ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDgzNjNlNDguLmZkY2NlNDAgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNTMsMyArNTMsNSBAQAogCiAqLm9yaWcKICoucmVqCisqfgorXCMqIwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKaW5kZXggMzBiMzI3YS4uYTgyYTExMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCkBAIC0yNSw4ICsyNSw2IEBACiAJLSBETUEgQVBJLCBwY2lfIEFQSSAmIGV4dGVuc2lvbnMgZm9yIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBtYWNoaW5lcy4KIERNQS1JU0EtTFBDLnR4dAogCS0gSG93IHRvIGRvIERNQSB3aXRoIElTQSAoYW5kIExQQykgZGV2aWNlcy4KLURNQS1tYXBwaW5nLnR4dAotCS0gaW5mbyBmb3IgUENJIGRyaXZlcnMgdXNpbmcgRE1BIHBvcnRhYmx5IGFjcm9zcyBhbGwgcGxhdGZvcm1zLgogRG9jQm9vay8KIAktIGRpcmVjdG9yeSB3aXRoIERvY0Jvb2sgdGVtcGxhdGVzIGV0Yy4gZm9yIGtlcm5lbCBkb2N1bWVudGF0aW9uLgogSE9XVE8KQEAgLTQzLDggKzQxLDYgQEAKIAktIGhvdyB0byAoYXR0ZW1wdCB0bykgbWFuYWdlIGtlcm5lbCBoYWNrZXJzLgogTVNJLUhPV1RPLnR4dAogCS0gdGhlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoTVNJKSBEcml2ZXIgR3VpZGUgSE9XVE8gYW5kIEZBUS4KLVBDSUVCVVMtSE9XVE8udHh0Ci0JLSBhIGd1aWRlIGRlc2NyaWJpbmcgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlci4KIFJDVS8KIAktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gUkNVIChyZWFkLWNvcHkgdXBkYXRlKS4KIFJFQURNRS5EQUM5NjAKQEAgLTE2NywxMCArMTYzLDggQEAKIAktIG5vdGVzIG9uIHRoZSBjaGFuZ2UgZnJvbSAxNiBiaXQgdG8gMzIgYml0IHVzZXIvZ3JvdXAgSURzLgogaHBldC50eHQKIAktIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIERyaXZlciBmb3IgTGludXguCi1ocnRpbWVyLwotCS0gaW5mbyBvbiB0aGUgdGltZXJfc3RhdHMgZGVidWdnaW5nIGZhY2lsaXR5IGZvciB0aW1lciAoYWIpdXNlLgotaHJ0aW1lcnMvCi0JLSBpbmZvIG9uIHRoZSBocnRpbWVycyBzdWJzeXN0ZW0gZm9yIGhpZ2gtcmVzb2x1dGlvbiBrZXJuZWwgdGltZXJzLgordGltZXJzLworCS0gaW5mbyBvbiB0aGUgdGltZXIgcmVsYXRlZCB0b3BpY3MKIGh3X3JhbmRvbS50eHQKIAktIGluZm8gb24gTGludXggc3VwcG9ydCBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaW4gaTh4eCBjaGlwc2V0cy4KIGh3bW9uLwpAQCAtMTgzLDggKzE3Nyw2IEBACiAJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIGFib3V0IExpbnV4IG9uIEludGVsIDMyIGJpdCBhcmNoaXRlY3R1cmUuCiBpYTY0LwogCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBJbnRlbCA2NCBiaXQgYXJjaGl0ZWN0dXJlLgotaWRlLnR4dAotCS0gaW1wb3J0YW50IGluZm8gZm9yIHVzZXJzIG9mIEFUQSBkZXZpY2VzIChJREUvRUlERSBkaXNrcyBhbmQgQ0QtUk9NUykuCiBpbmZpbmliYW5kLwogCS0gZGlyZWN0b3J5IHdpdGggZG9jdW1lbnRzIGNvbmNlcm5pbmcgTGludXggSW5maW5pQmFuZCBzdXBwb3J0LgogaW5pdHJkLnR4dApAQCAtMjI3LDggKzIxOSw2IEBACiAJLSBkb2N1bWVudHMgdGhlIGtlcm5lbCBwcm9iZXMgZGVidWdnaW5nIGZlYXR1cmUuCiBrcmVmLnR4dAogCS0gZG9jcyBvbiBhZGRpbmcgcmVmZXJlbmNlIGNvdW50ZXJzIChrcmVmcykgdG8ga2VybmVsIG9iamVjdHMuCi1sYXB0b3AtbW9kZS50eHQKLQktIGhvdyB0byBjb25zZXJ2ZSBiYXR0ZXJ5IHBvd2VyIHVzaW5nIGxhcHRvcC1tb2RlLgogbGFwdG9wcy8KIAktIGRpcmVjdG9yeSB3aXRoIGxhcHRvcCByZWxhdGVkIGluZm8gYW5kIGxhcHRvcCBkcml2ZXIgZG9jdW1lbnRhdGlvbi4KIGxkbS50eHQKQEAgLTI3NSw4ICsyNjUsNiBAQAogCS0gZGlyZWN0b3J5IHdpdGggaW5mb3JtYXRpb24gb24gdGhlIE5ldExhYmVsIHN1YnN5c3RlbS4KIG5ldHdvcmtpbmcvCiAJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHZhcmlvdXMgYXNwZWN0cyBvZiBuZXR3b3JraW5nIHdpdGggTGludXguCi1uZnNyb290LnR4dAotCS0gc2hvcnQgZ3VpZGUgb24gc2V0dGluZyB1cCBhIGRpc2tsZXNzIGJveCB3aXRoIE5GUyByb290IGZpbGVzeXN0ZW0uCiBubWlfd2F0Y2hkb2cudHh0CiAJLSBpbmZvIG9uIE5NSSB3YXRjaGRvZyBmb3IgU01QIHN5c3RlbXMuCiBub21tdS1tbWFwLnR4dApAQCAtMjkzLDIyICsyODEsMTIgQEAKIAktIGhvdyB0byB1c2UgdGhlIHBhcmFsbGVsLXBvcnQgZHJpdmVyLgogcGFycG9ydC1sb3dsZXZlbC50eHQKIAktIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGUgbG93IGxldmVsIHBhcmFsbGVsIHBvcnQgZnVuY3Rpb25zLgotcGNpLWVycm9yLXJlY292ZXJ5LnR4dAotCS0gaW5mbyBvbiBQQ0kgZXJyb3IgcmVjb3ZlcnkuCi1wY2kudHh0Ci0JLSBpbmZvIG9uIHRoZSBQQ0kgc3Vic3lzdGVtIGZvciBkZXZpY2UgZHJpdmVyIGF1dGhvcnMuCi1wY2llYWVyLWhvd3RvLnR4dAotCS0gdGhlIFBDSSBFeHByZXNzIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBEcml2ZXIgR3VpZGUgSE9XVE8uCiBwY21jaWEvCiAJLSBpbmZvIG9uIHRoZSBMaW51eCBQQ01DSUEgZHJpdmVyLgogcGktZnV0ZXgudHh0CiAJLSBkb2N1bWVudGF0aW9uIG9uIGxpZ2h0d2VpZ2h0IFBJLWZ1dGV4ZXMuCi1wbS50eHQKLQktIGluZm8gb24gTGludXggcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0LgogcG5wLnR4dAogCS0gTGludXggUGx1ZyBhbmQgUGxheSBkb2N1bWVudGF0aW9uLgotcG93ZXJfc3VwcGx5X2NsYXNzLnR4dAotCS0gVGVsbHMgdXNlcnNwYWNlIGFib3V0IGJhdHRlcnksIFVQUywgQUMgb3IgREMgcG93ZXIgc3VwcGx5IHByb3BlcnRpZXMKIHBvd2VyLwogCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiBMaW51eCBQQ0kgcG93ZXIgbWFuYWdlbWVudC4KIHBvd2VycGMvCkBAIC0zMjksOCArMzA3LDYgQEAKIAktIGEgZGVzY3JpcHRpb24gb2Ygd2hhdCByb2J1c3QgZnV0ZXhlcyBhcmUuCiByb2NrZXQudHh0CiAJLSBpbmZvIG9uIHRoZSBDb210cm9sIFJvY2tldFBvcnQgbXVsdGlwb3J0IHNlcmlhbCBkcml2ZXIuCi1ycGMtY2FjaGUudHh0Ci0JLSBpbnRyb2R1Y3Rpb24gdG8gdGhlIGNhY2hpbmcgbWVjaGFuaXNtcyBpbiB0aGUgc3VucnBjIGxheWVyLgogcnQtbXV0ZXgtZGVzaWduLnR4dAogCS0gZGVzY3JpcHRpb24gb2YgdGhlIFJlYWxUaW1lIG11dGV4IGltcGxlbWVudGF0aW9uIGRlc2lnbi4KIHJ0LW11dGV4LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvb2Jzb2xldGUvbzJjYiBiL0RvY3VtZW50YXRpb24vQUJJL29ic29sZXRlL28yY2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0OWQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL29ic29sZXRlL28yY2IKQEAgLTAsMCArMSwxMSBAQAorV2hhdDoJCS9zeXMvbzJjYiBzeW1saW5rCitEYXRlOgkJRGVjIDIwMDUKK0tlcm5lbFZlcnNpb246CTIuNi4xNgorQ29udGFjdDoJb2NmczItZGV2ZWxAb3NzLm9yYWNsZS5jb20KK0Rlc2NyaXB0aW9uOglUaGlzIGlzIGEgc3ltbGluazogL3N5cy9vMmNiIHRvIC9zeXMvZnMvbzJjYi4gVGhlIHN5bWxpbmsgd2lsbAorCQliZSByZW1vdmVkIHdoZW4gbmV3IHZlcnNpb25zIG9mIG9jZnMyLXRvb2xzIHdoaWNoIGtub3cgdG8gbG9vaworCQlpbiAvc3lzL2ZzL28yY2IgYXJlIHN1ZmZpY2llbnRseSBwcmV2YWxlbnQuIERvbid0IGNvZGUgbmV3CisJCXNvZnR3YXJlIHRvIGxvb2sgaGVyZSwgaXQgc2hvdWxkIHRyeSAvc3lzL2ZzL28yY2IgaW5zdGVhZC4KKwkJU2VlIERvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9vMmNiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzYWdlLgorVXNlcnM6CQlvY2ZzMi10b29scy4gSXQncyBzdWZmaWNpZW50IHRvIG1haWwgcHJvcG9zZWQgY2hhbmdlcyB0bworCQlvY2ZzMi1kZXZlbEBvc3Mub3JhY2xlLmNvbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9vMmNiIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL28yY2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViMTU0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9vMmNiCkBAIC0wLDAgKzEsMTAgQEAKK1doYXQ6CQkvc3lzL2ZzL28yY2IvICh3YXMgL3N5cy9vMmNiKQorRGF0ZToJCURlYyAyMDA1CitLZXJuZWxWZXJzaW9uOgkyLjYuMTYKK0NvbnRhY3Q6CW9jZnMyLWRldmVsQG9zcy5vcmFjbGUuY29tCitEZXNjcmlwdGlvbjoJT2NmczItdG9vbHMgbG9va3MgYXQgJ2ludGVyZmFjZS1yZXZpc2lvbicgZm9yIHZlcnNpb25pbmcKKwkJaW5mb3JtYXRpb24uIEVhY2ggbG9nbWFzay8gZmlsZSBjb250cm9scyBhIHNldCBvZiBkZWJ1ZyBwcmludHMKKwkJYW5kIGNhbiBiZSB3cml0dGVuIGludG8gd2l0aCB0aGUgc3RyaW5ncyAiYWxsb3ciLCAiZGVueSIsIG9yCisJCSJvZmYiLiBSZWFkaW5nIHRoZSBmaWxlIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUuCitVc2VyczoJCW9jZnMyLXRvb2xzLiBJdCdzIHN1ZmZpY2llbnQgdG8gbWFpbCBwcm9wb3NlZCBjaGFuZ2VzIHRvCisJCW9jZnMyLWRldmVsQG9zcy5vcmFjbGUuY29tLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGRjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKQEAgLTAsMCArMSwxMSBAQAorV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi92cGQKK0RhdGU6CQlGZWJydWFyeSAyMDA4CitDb250YWN0OglCZW4gSHV0Y2hpbmdzIDxiaHV0Y2hpbmdzQHNvbGFyZmxhcmUuY29tPgorRGVzY3JpcHRpb246CisJCUEgZmlsZSBuYW1lZCB2cGQgaW4gYSBkZXZpY2UgZGlyZWN0b3J5IHdpbGwgYmUgYQorCQliaW5hcnkgZmlsZSBjb250YWluaW5nIHRoZSBWaXRhbCBQcm9kdWN0IERhdGEgZm9yIHRoZQorCQlkZXZpY2UuICBJdCBzaG91bGQgZm9sbG93IHRoZSBWUEQgZm9ybWF0IGRlZmluZWQgaW4KKwkJUENJIFNwZWNpZmljYXRpb24gMi4xIG9yIDIuMiwgYnV0IHVzZXJzIHNob3VsZCBjb25zaWRlcgorCQl0aGF0IHNvbWUgZGV2aWNlcyBtYXkgaGF2ZSBtYWxmb3JtYXR0ZWQgZGF0YS4gIElmIHRoZQorCQl1bmRlcmx5aW5nIFZQRCBoYXMgYSB3cml0YWJsZSBzZWN0aW9uIHRoZW4gdGhlCisJCWNvcnJlc3BvbmRpbmcgc2VjdGlvbiBvZiB0aGlzIGZpbGUgd2lsbCBiZSB3cml0YWJsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtaWJmdCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtaWJmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI3ZDExCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1pYmZ0CkBAIC0wLDAgKzEsMjMgQEAKK1doYXQ6CQkvc3lzL2Zpcm13YXJlL2liZnQvaW5pdGlhdG9yCitEYXRlOgkJTm92ZW1iZXIgMjAwNworQ29udGFjdDoJS29ucmFkIFJ6ZXN6dXRlayA8a2V0dXpzZXpyQGRhcm5vay5vcmc+CitEZXNjcmlwdGlvbjoJVGhlIC9zeXMvZmlybXdhcmUvaWJmdC9pbml0aWF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbgorCQlmaWxlcyB0aGF0IGV4cG9zZSB0aGUgaVNDU0kgQm9vdCBGaXJtd2FyZSBUYWJsZSBpbml0aWF0b3IgZGF0YS4KKwkJVXN1YWxseSB0aGlzIGNvbnRhaW5zIHRoZSBJbml0aWF0b3IgbmFtZS4KKworV2hhdDoJCS9zeXMvZmlybXdhcmUvaWJmdC90YXJnZXRYCitEYXRlOgkJTm92ZW1iZXIgMjAwNworQ29udGFjdDoJS29ucmFkIFJ6ZXN6dXRlayA8a2V0dXpzZXpyQGRhcm5vay5vcmc+CitEZXNjcmlwdGlvbjoJVGhlIC9zeXMvZmlybXdhcmUvaWJmdC90YXJnZXRYIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4KKwkJZmlsZXMgdGhhdCBleHBvc2UgdGhlIGlTQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgdGFyZ2V0IGRhdGEuCisJCVVzdWFsbHkgdGhpcyBjb250YWlucyB0aGUgdGFyZ2V0J3MgSVAgYWRkcmVzcywgYm9vdCBMVU4sCisJCXRhcmdldCBuYW1lLCBhbmQgd2hhdCBOSUMgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBJdCBjYW4gYWxzbworCQljb250YWluIHRoZSBDSEFQIG5hbWUgKGFuZCBwYXNzd29yZCksIHRoZSByZXZlcnNlIENIQVAKKwkJbmFtZSAoYW5kIHBhc3N3b3JkKQorCitXaGF0OgkJL3N5cy9maXJtd2FyZS9pYmZ0L2V0aGVybmV0WAorRGF0ZToJCU5vdmVtYmVyIDIwMDcKK0NvbnRhY3Q6CUtvbnJhZCBSemVzenV0ZWsgPGtldHV6c2V6ckBkYXJub2sub3JnPgorRGVzY3JpcHRpb246CVRoZSAvc3lzL2Zpcm13YXJlL2liZnQvZXRoZXJuZXRYIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4KKwkJZmlsZXMgdGhhdCBleHBvc2UgdGhlIGlTQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgTklDIGRhdGEuCisJCVRoaXMgY2FuIHRoaXMgY2FuIHRoZSBJUCBhZGRyZXNzLCBNQUMsIGFuZCBnYXRld2F5IG9mIHRoZSBOSUMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLW9jZnMyIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1vY2ZzMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2NjNTE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1vY2ZzMgpAQCAtMCwwICsxLDg5IEBACitXaGF0OgkJL3N5cy9mcy9vY2ZzMi8KK0RhdGU6CQlBcHJpbCAyMDA4CitDb250YWN0OglvY2ZzMi1kZXZlbEBvc3Mub3JhY2xlLmNvbQorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2ZzL29jZnMyIGRpcmVjdG9yeSBjb250YWlucyBrbm9icyB1c2VkIGJ5IHRoZQorCQlvY2ZzMi10b29scyB0byBpbnRlcmFjdCB3aXRoIHRoZSBmaWxlc3lzdGVtLgorCitXaGF0OgkJL3N5cy9mcy9vY2ZzMi9tYXhfbG9ja2luZ19wcm90b2NvbAorRGF0ZToJCUFwcmlsIDIwMDgKK0NvbnRhY3Q6CW9jZnMyLWRldmVsQG9zcy5vcmFjbGUuY29tCitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZnMvb2NmczIvbWF4X2xvY2tpbmdfcHJvdG9jb2wgZmlsZSBkaXNwbGF5cyB2ZXJzaW9uCisJCW9mIG9jZnMyIGxvY2tpbmcgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlc3lzdGVtLiAgVGhpcyB2ZXJzaW9uCisJCWNvdmVycyBob3cgb2NmczIgdXNlcyBkaXN0cmlidXRlZCBsb2NraW5nIGJldHdlZW4gY2x1c3RlcgorCQlub2Rlcy4KKworCQlUaGUgcHJvdG9jb2wgdmVyc2lvbiBoYXMgYSBtYWpvciBhbmQgbWlub3IgbnVtYmVyLiAgVHdvCisJCWNsdXN0ZXIgbm9kZXMgY2FuIGludGVyb3BlcmF0ZSBpZiB0aGV5IGhhdmUgYW4gaWRlbnRpY2FsCisJCW1ham9yIG51bWJlciBhbmQgYW4gb3ZlcmxhcHBpbmcgbWlub3IgbnVtYmVyIC0gdGh1cywKKwkJYSBub2RlIHdpdGggdmVyc2lvbiAxLjEwIGNhbiBpbnRlcm9wZXJhdGUgd2l0aCBhIG5vZGUKKwkJc3BvcnRpbmcgdmVyc2lvbiAxLjgsIGFzIGxvbmcgYXMgYm90aCB1c2UgdGhlIDEuOCBwcm90b2NvbC4KKworCQlSZWFkaW5nIGZyb20gdGhpcyBmaWxlIHJldHVybnMgYSBzaW5nbGUgbGluZSwgdGhlIG1ham9yCisJCW51bWJlciBhbmQgbWlub3IgbnVtYmVyIGpvaW5lZCBieSBhIHBlcmlvZCwgZWcgIjEuMTAiLgorCisJCVRoaXMgZmlsZSBpcyByZWFkLW9ubHkuICBUaGUgdmFsdWUgaXMgY29tcGlsZWQgaW50byB0aGUKKwkJZHJpdmVyLgorCitXaGF0OgkJL3N5cy9mcy9vY2ZzMi9sb2FkZWRfY2x1c3Rlcl9wbHVnaW5zCitEYXRlOgkJQXByaWwgMjAwOAorQ29udGFjdDoJb2NmczItZGV2ZWxAb3NzLm9yYWNsZS5jb20KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9mcy9vY2ZzMi9sb2FkZWRfY2x1c3Rlcl9wbHVnaW5zIGZpbGUgZGVzY3JpYmVzCisJCXRoZSBhdmFpbGFibGUgcGx1Z2lucyB0byBzdXBwb3J0IG9jZnMyIGNsdXN0ZXIgb3BlcmF0aW9uLgorCQlBIGNsdXN0ZXIgcGx1Z2luIGlzIHJlcXVpcmVkIHRvIHVzZSBvY2ZzMiBpbiBhIGNsdXN0ZXIuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGF2YWlsYWJsZSBwbHVnaW5zOgorCisJCSogJ28yY2InIC0gVGhlIGNsYXNzaWMgbzJjYiBjbHVzdGVyIHN0YWNrIHRoYXQgb2NmczIgaGFzCisJCQl1c2VkIHNpbmNlIGl0cyBpbmNlcHRpb24uCisJCSogJ3VzZXInIC0gQSBwbHVnaW4gc3VwcG9ydGluZyB1c2Vyc3BhY2UgY2x1c3RlciBzb2Z0d2FyZQorCQkJaW4gY29uanVuY3Rpb24gd2l0aCBmcy9kbG0uCisKKwkJUmVhZGluZyBmcm9tIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgbG9hZGVkCisJCXBsdWdpbnMsIG9uZSBwZXIgbGluZS4KKworCQlUaGlzIGZpbGUgaXMgcmVhZC1vbmx5LiAgSXRzIGNvbnRlbnRzIG1heSBjaGFuZ2UgYXMKKwkJcGx1Z2lucyBhcmUgbG9hZGVkIG9yIHJlbW92ZWQuCisKK1doYXQ6CQkvc3lzL2ZzL29jZnMyL2FjdGl2ZV9jbHVzdGVyX3BsdWdpbgorRGF0ZToJCUFwcmlsIDIwMDgKK0NvbnRhY3Q6CW9jZnMyLWRldmVsQG9zcy5vcmFjbGUuY29tCitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZnMvb2NmczIvYWN0aXZlX2NsdXN0ZXJfcGx1Z2luIGRpc3BsYXlzIHdoaWNoCisJCWNsdXN0ZXIgcGx1Z2luIGlzIGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlIGZpbGVzeXN0ZW0uCisJCVRoZSBhY3RpdmUgcGx1Z2luIHdpbGwgYXBwZWFyIGluIHRoZSBsb2FkZWRfY2x1c3Rlcl9wbHVnaW5zCisJCWZpbGUgYXMgd2VsbC4gIE9ubHkgb25lIHBsdWdpbiBjYW4gYmUgdXNlZCBhdCBhIHRpbWUuCisKKwkJUmVhZGluZyBmcm9tIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBhY3RpdmUgcGx1Z2luCisJCW9uIGEgc2luZ2xlIGxpbmUuCisKKwkJVGhpcyBmaWxlIGlzIHJlYWQtb25seS4gIFdoaWNoIHBsdWdpbiBpcyBhY3RpdmUgZGVwZW5kcyBvbgorCQl0aGUgY2x1c3RlciBzdGFjayBpbiB1c2UuICBUaGUgY29udGVudHMgbWF5IGNoYW5nZQorCQl3aGVuIGFsbCBmaWxlc3lzdGVtcyBhcmUgdW5tb3VudGVkIGFuZCB0aGUgY2x1c3RlciBzdGFjaworCQlpcyBjaGFuZ2VkLgorCitXaGF0OgkJL3N5cy9mcy9vY2ZzMi9jbHVzdGVyX3N0YWNrCitEYXRlOgkJQXByaWwgMjAwOAorQ29udGFjdDoJb2NmczItZGV2ZWxAb3NzLm9yYWNsZS5jb20KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9mcy9vY2ZzMi9jbHVzdGVyX3N0YWNrIGZpbGUgY29udGFpbnMgdGhlIG5hbWUKKwkJb2YgY3VycmVudCBvY2ZzMiBjbHVzdGVyIHN0YWNrLiAgVGhpcyB2YWx1ZSBpcyBzZXQgYnkKKwkJdXNlcnNwYWNlIHRvb2xzIHdoZW4gYnJpbmdpbmcgdGhlIGNsdXN0ZXIgc3RhY2sgb25saW5lLgorCisJCUNsdXN0ZXIgc3RhY2sgbmFtZXMgYXJlIDQgY2hhcmFjdGVycyBpbiBsZW5ndGguCisKKwkJV2hlbiB0aGUgJ28yY2InIGNsdXN0ZXIgc3RhY2sgaXMgdXNlZCwgdGhlICdvMmNiJyBjbHVzdGVyCisJCXBsdWdpbiBpcyBhY3RpdmUuICBBbGwgb3RoZXIgY2x1c3RlciBzdGFja3MgdXNlIHRoZSAndXNlcicKKwkJY2x1c3RlciBwbHVnaW4uCisKKwkJUmVhZGluZyBmcm9tIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50CisJCWNsdXN0ZXIgc3RhY2sgb24gYSBzaW5nbGUgbGluZS4KKworCQlXcml0aW5nIGEgbmV3IHN0YWNrIG5hbWUgdG8gdGhpcyBmaWxlIGNoYW5nZXMgdGhlIGN1cnJlbnQKKwkJY2x1c3RlciBzdGFjayB1bmxlc3MgdGhlcmUgYXJlIG1vdW50ZWQgb2NmczIgZmlsZXN5c3RlbXMuCisJCUlmIHRoZXJlIGFyZSBtb3VudGVkIGZpbGVzeXN0ZW1zLCBhdHRlbXB0cyB0byBjaGFuZ2UgdGhlCisJCXN0YWNrIHJldHVybiBhbiBlcnJvci4KKworVXNlcnM6CisJb2NmczItdG9vbHMgPG9jZnMyLXRvb2xzLWRldmVsQG9zcy5vcmFjbGUuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IDMwMGUxNzAuLmIyYjYzNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTksOSArOSwxMCBAQAogRE9DQk9PS1MgOj0gd2FuYm9vay54bWwgejg1MzBib29rLnhtbCBtY2Fib29rLnhtbCB2aWRlb2Jvb2sueG1sIFwKIAkgICAga2VybmVsLWhhY2tpbmcueG1sIGtlcm5lbC1sb2NraW5nLnhtbCBkZXZpY2Vpb2Jvb2sueG1sIFwKIAkgICAgcHJvY2ZzLWd1aWRlLnhtbCB3cml0aW5nX3VzYl9kcml2ZXIueG1sIG5ldHdvcmtpbmcueG1sIFwKLQkgICAga2VybmVsLWFwaS54bWwgZmlsZXN5c3RlbXMueG1sIGxzbS54bWwgdXNiLnhtbCBcCisJICAgIGtlcm5lbC1hcGkueG1sIGZpbGVzeXN0ZW1zLnhtbCBsc20ueG1sIHVzYi54bWwga2dkYi54bWwgXAogCSAgICBnYWRnZXQueG1sIGxpYmF0YS54bWwgbXRkbmFuZC54bWwgbGlicnMueG1sIHJhcGlkaW8ueG1sIFwKLQkgICAgZ2VuZXJpY2lycS54bWwgczM5MC1kcml2ZXJzLnhtbCB1aW8taG93dG8ueG1sIHNjc2kueG1sCisJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCisJICAgIG1hYzgwMjExLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAppbmRleCBmMzE2MDFlLi40ODhkZDRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKQEAgLTI5NywxMSArMjk3LDYgQEAKICFJa2VybmVsL2FjY3QuYwogICA8L2NoYXB0ZXI+CiAKLSAgPGNoYXB0ZXIgaWQ9InBtZnVuY3MiPgotICAgICA8dGl0bGU+UG93ZXIgTWFuYWdlbWVudDwvdGl0bGU+Ci0hRWtlcm5lbC9wb3dlci9wbS5jCi0gIDwvY2hhcHRlcj4KLQogICA8Y2hhcHRlciBpZD0iZGV2ZHJpdmVycyI+CiAgICAgIDx0aXRsZT5EZXZpY2UgZHJpdmVycyBpbmZyYXN0cnVjdHVyZTwvdGl0bGU+CiAgICAgIDxzZWN0MT48dGl0bGU+RGV2aWNlIERyaXZlcnMgQmFzZTwvdGl0bGU+CkBAIC0zNjEsMTIgKzM1NiwxNCBAQAogICA8Y2hhcHRlciBpZD0iYmxrZGV2Ij4KICAgICAgPHRpdGxlPkJsb2NrIERldmljZXM8L3RpdGxlPgogIUVibG9jay9ibGstY29yZS5jCishSWJsb2NrL2Jsay1jb3JlLmMKICFFYmxvY2svYmxrLW1hcC5jCiAhSWJsb2NrL2Jsay1zeXNmcy5jCiAhRWJsb2NrL2Jsay1zZXR0aW5ncy5jCiAhRWJsb2NrL2Jsay1leGVjLmMKICFFYmxvY2svYmxrLWJhcnJpZXIuYwogIUVibG9jay9ibGstdGFnLmMKKyFJYmxvY2svYmxrLXRhZy5jCiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iY2hyZGV2Ij4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKaW5kZXggMmU5ZDZiNC4uNzdjNDJmNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgPC9wYXJhPgogICAgPHBhcmE+CiAgICAgIFRoZSB0aGlyZCB0eXBlIGlzIGEgc2VtYXBob3JlCi0gICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3NlbWFwaG9yZS5oPC9maWxlbmFtZT4pOiBpdAorICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L3NlbWFwaG9yZS5oPC9maWxlbmFtZT4pOiBpdAogICAgICBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGhvbGRlciBhdCBhbnkgdGltZSAodGhlIG51bWJlciBkZWNpZGVkIGF0CiAgICAgIGluaXRpYWxpemF0aW9uIHRpbWUpLCBhbHRob3VnaCBpdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgYXMgYQogICAgICBzaW5nbGUtaG9sZGVyIGxvY2sgKGEgbXV0ZXgpLiAgSWYgeW91IGNhbid0IGdldCBhIHNlbWFwaG9yZSwgeW91cgpAQCAtMjkwLDcgKzI5MCw3IEBACiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSBoYXZlIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgb25seSBldmVyIGFjY2Vzc2VkIGZyb20KICAgICAgICB1c2VyIGNvbnRleHQsIHRoZW4geW91IGNhbiB1c2UgYSBzaW1wbGUgc2VtYXBob3JlCi0gICAgICAgKDxmaWxlbmFtZT5saW51eC9hc20vc2VtYXBob3JlLmg8L2ZpbGVuYW1lPikgdG8gcHJvdGVjdCBpdC4gIFRoaXMgCisgICAgICAgKDxmaWxlbmFtZT5saW51eC9saW51eC9zZW1hcGhvcmUuaDwvZmlsZW5hbWU+KSB0byBwcm90ZWN0IGl0LiAgVGhpcwogICAgICAgIGlzIHRoZSBtb3N0IHRyaXZpYWwgY2FzZTogeW91IGluaXRpYWxpemUgdGhlIHNlbWFwaG9yZSB0byB0aGUgbnVtYmVyIAogICAgICAgIG9mIHJlc291cmNlcyBhdmFpbGFibGUgKHVzdWFsbHkgMSksIGFuZCBjYWxsCiAgICAgICAgPGZ1bmN0aW9uPmRvd25faW50ZXJydXB0aWJsZSgpPC9mdW5jdGlvbj4gdG8gZ3JhYiB0aGUgc2VtYXBob3JlLCBhbmQgCkBAIC04NTQsNyArODU0LDcgQEAKICB9OwogCiAtc3RhdGljIERFRklORV9NVVRFWChjYWNoZV9sb2NrKTsKLStzdGF0aWMgc3BpbmxvY2tfdCBjYWNoZV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FjaGVfbG9jayk7CiAgc3RhdGljIExJU1RfSEVBRChjYWNoZSk7CiAgc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZV9udW0gPSAwOwogICNkZWZpbmUgTUFYX0NBQ0hFX1NJWkUgMTAKQEAgLTEyMzgsNyArMTIzOCw3IEBACiAtICAgICAgICBpbnQgcG9wdWxhcml0eTsKICB9OwogCi0gc3RhdGljIHNwaW5sb2NrX3QgY2FjaGVfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKyBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNhY2hlX2xvY2spOwogQEAgLTc3LDYgKzg0LDcgQEAKICAgICAgICAgIG9iai0mZ3Q7aWQgPSBpZDsKICAgICAgICAgIG9iai0mZ3Q7cG9wdWxhcml0eSA9IDA7CkBAIC0xNjU2LDcgKzE2NTYsNyBAQAogICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAgI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogKyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwotICNpbmNsdWRlICZsdDthc20vc2VtYXBob3JlLmgmZ3Q7CisgI2luY2x1ZGUgJmx0O2xpbnV4L3NlbWFwaG9yZS5oJmd0OwogICNpbmNsdWRlICZsdDthc20vZXJybm8uaCZndDsKIAogIHN0cnVjdCBvYmplY3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZ2RiLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2dkYi50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjE4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2dkYi50bXBsCkBAIC0wLDAgKzEsNDQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9ImtnZGJPbkxpbnV4Ij4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5Vc2luZyBrZ2RiIGFuZCB0aGUga2dkYiBJbnRlcm5hbHM8L3RpdGxlPgorCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5KYXNvbjwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPldlc3NlbDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+VG9tPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+UmluaTwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnRyaW5pQGtlcm5lbC5jcmFzaGluZy5vcmc8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5BbWl0IFMuPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+S2FsZTwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmFtaXRrYWxlQGxpbnN5c3NvZnQuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwODwveWVhcj4KKyAgIDxob2xkZXI+V2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwNC0yMDA1PC95ZWFyPgorICAgPGhvbGRlcj5Nb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwNDwveWVhcj4KKyAgIDxob2xkZXI+QW1pdCBTLiBLYWxlPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgICBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIDwvcGFyYT4KKworICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisgIDxjaGFwdGVyIGlkPSJJbnRyb2R1Y3Rpb24iPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgIGtnZGIgaXMgYSBzb3VyY2UgbGV2ZWwgZGVidWdnZXIgZm9yIGxpbnV4IGtlcm5lbC4gSXQgaXMgdXNlZCBhbG9uZworICAgIHdpdGggZ2RiIHRvIGRlYnVnIGEgbGludXgga2VybmVsLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgZ2RiIGNhbgorICAgIGJlIHVzZWQgdG8gImJyZWFrIGluIiB0byB0aGUga2VybmVsIHRvIGluc3BlY3QgbWVtb3J5LCB2YXJpYWJsZXMKKyAgICBhbmQgbG9vayB0aHJvdWdoIGEgY2FsIHN0YWNrIGluZm9ybWF0aW9uIHNpbWlsYXIgdG8gd2hhdCBhbgorICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlciB3b3VsZCB1c2UgZ2RiIGZvci4gIEl0IGlzIHBvc3NpYmxlIHRvIHBsYWNlCisgICAgYnJlYWtwb2ludHMgaW4ga2VybmVsIGNvZGUgYW5kIHBlcmZvcm0gc29tZSBsaW1pdGVkIGV4ZWN1dGlvbgorICAgIHN0ZXBwaW5nLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICBUd28gbWFjaGluZXMgYXJlIHJlcXVpcmVkIGZvciB1c2luZyBrZ2RiLiBPbmUgb2YgdGhlc2UgbWFjaGluZXMgaXMgYQorICAgIGRldmVsb3BtZW50IG1hY2hpbmUgYW5kIHRoZSBvdGhlciBpcyBhIHRlc3QgbWFjaGluZS4gIFRoZSBrZXJuZWwKKyAgICB0byBiZSBkZWJ1Z2dlZCBydW5zIG9uIHRoZSB0ZXN0IG1hY2hpbmUuIFRoZSBkZXZlbG9wbWVudCBtYWNoaW5lCisgICAgcnVucyBhbiBpbnN0YW5jZSBvZiBnZGIgYWdhaW5zdCB0aGUgdm1saW51eCBmaWxlIHdoaWNoIGNvbnRhaW5zCisgICAgdGhlIHN5bWJvbHMgKG5vdCBib290IGltYWdlIHN1Y2ggYXMgYnpJbWFnZSwgekltYWdlLCB1SW1hZ2UuLi4pLgorICAgIEluIGdkYiB0aGUgZGV2ZWxvcGVyIHNwZWNpZmllcyB0aGUgY29ubmVjdGlvbiBwYXJhbWV0ZXJzIGFuZAorICAgIGNvbm5lY3RzIHRvIGtnZGIuICBEZXBlbmRpbmcgb24gd2hpY2gga2dkYiBJL08gbW9kdWxlcyBleGlzdCBpbgorICAgIHRoZSBrZXJuZWwgZm9yIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlLCBpdCBtYXkgYmUgcG9zc2libGUgdG8gZGVidWcKKyAgICB0aGUgdGVzdCBtYWNoaW5lJ3Mga2VybmVsIHdpdGggdGhlIGRldmVsb3BtZW50IG1hY2hpbmUgdXNpbmcgYQorICAgIHJzMjMyIG9yIGV0aGVybmV0IGNvbm5lY3Rpb24uCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJDb21waWxpbmdBS2VybmVsIj4KKyAgICA8dGl0bGU+Q29tcGlsaW5nIGEga2VybmVsPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICBUbyBlbmFibGUgPHN5bWJvbD5DT05GSUdfS0dEQjwvc3ltYm9sPiwgbG9vayB1bmRlciB0aGUgIktlcm5lbCBkZWJ1Z2dpbmciCisgICAgYW5kIHRoZW4gc2VsZWN0ICJLR0RCOiBrZXJuZWwgZGVidWdnaW5nIHdpdGggcmVtb3RlIGdkYiIuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIE5leHQgeW91IHNob3VsZCBjaG9vc2Ugb25lIG9mIG1vcmUgSS9PIGRyaXZlcnMgdG8gaW50ZXJjb25uZWN0IGRlYnVnZ2luZworICAgIGhvc3QgYW5kIGRlYnVnZ2VkIHRhcmdldC4gIEVhcmx5IGJvb3QgZGVidWdnaW5nIHJlcXVpcmVzIGEgS0dEQgorICAgIEkvTyBkcml2ZXIgdGhhdCBzdXBwb3J0cyBlYXJseSBkZWJ1Z2dpbmcgYW5kIHRoZSBkcml2ZXIgbXVzdCBiZQorICAgIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBkaXJlY3RseS4gS2dkYiBJL08gZHJpdmVyIGNvbmZpZ3VyYXRpb24KKyAgICB0YWtlcyBwbGFjZSB2aWEga2VybmVsIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLCBzZWUgZm9sbG93aW5nCisgICAgY2hhcHRlci4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgVGhlIGtnZGIgdGVzdCBjb21waWxlIG9wdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUga2dkYiB0ZXN0IHN1aXRlIGNoYXB0ZXIuCisgICAgPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9IkVuYWJsZUtHREIiPgorICAgPHRpdGxlPkVuYWJsZSBrZ2RiIGZvciBkZWJ1Z2dpbmc8L3RpdGxlPgorICAgPHBhcmE+CisgICBJbiBvcmRlciB0byB1c2Uga2dkYiB5b3UgbXVzdCBhY3RpdmF0ZSBpdCBieSBwYXNzaW5nIGNvbmZpZ3VyYXRpb24KKyAgIGluZm9ybWF0aW9uIHRvIG9uZSBvZiB0aGUga2dkYiBJL08gZHJpdmVycy4gIElmIHlvdSBkbyBub3QgcGFzcyBhbnkKKyAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24ga2dkYiB3aWxsIG5vdCBkbyBhbnl0aGluZyBhdCBhbGwuICBLZ2RiCisgICB3aWxsIG9ubHkgYWN0aXZlbHkgaG9vayB1cCB0byB0aGUga2VybmVsIHRyYXAgaG9va3MgaWYgYSBrZ2RiIEkvTworICAgZHJpdmVyIGlzIGxvYWRlZCBhbmQgY29uZmlndXJlZC4gIElmIHlvdSB1bmNvbmZpZ3VyZSBhIGtnZGIgSS9PCisgICBkcml2ZXIsIGtnZGIgd2lsbCB1bnJlZ2lzdGVyIGFsbCB0aGUga2VybmVsIGhvb2sgcG9pbnRzLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICBBbGwgZHJpdmVycyBjYW4gYmUgcmVjb25maWd1cmVkIGF0IHJ1biB0aW1lLCBpZgorICAgPHN5bWJvbD5DT05GSUdfU1lTRlM8L3N5bWJvbD4gYW5kIDxzeW1ib2w+Q09ORklHX01PRFVMRVM8L3N5bWJvbD4KKyAgIGFyZSBlbmFibGVkLCBieSBlY2hvJ2luZyBhIG5ldyBjb25maWcgc3RyaW5nIHRvCisgICA8Y29uc3RhbnQ+L3N5cy9tb2R1bGUvJmx0O2RyaXZlciZndDsvcGFyYW1ldGVyLyZsdDtvcHRpb24mZ3Q7PC9jb25zdGFudD4uCisgICBUaGUgZHJpdmVyIGNhbiBiZSB1bmNvbmZpZ3VyZWQgYnkgcGFzc2luZyBhbiBlbXB0eSBzdHJpbmcuICBZb3UgY2Fubm90CisgICBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gd2hpbGUgdGhlIGRlYnVnZ2VyIGlzIGF0dGFjaGVkLiAgTWFrZSBzdXJlCisgICB0byBkZXRhY2ggdGhlIGRlYnVnZ2VyIHdpdGggdGhlIDxjb25zdGFudD5kZXRhY2g8L2NvbnN0YW50PiBjb21tYW5kCisgICBwcmlvciB0byB0cnlpbmcgdW5jb25maWd1cmUgYSBrZ2RiIEkvTyBkcml2ZXIuCisgICA8L3BhcmE+CisgICA8c2VjdDEgaWQ9ImtnZGJ3YWl0Ij4KKyAgIDx0aXRsZT5LZXJuZWwgcGFyYW1ldGVyOiBrZ2Rid2FpdDwvdGl0bGU+CisgICA8cGFyYT4KKyAgIFRoZSBLZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiA8Y29uc3RhbnQ+a2dkYndhaXQ8L2NvbnN0YW50PiBtYWtlcworICAga2dkYiB3YWl0IGZvciBhIGRlYnVnZ2VyIGNvbm5lY3Rpb24gZHVyaW5nIGJvb3Rpbmcgb2YgYSBrZXJuZWwuICBZb3UKKyAgIGNhbiBvbmx5IHVzZSB0aGlzIG9wdGlvbiB5b3UgY29tcGlsZWQgYSBrZ2RiIEkvTyBkcml2ZXIgaW50byB0aGUKKyAgIGtlcm5lbCBhbmQgeW91IHNwZWNpZmllZCB0aGUgSS9PIGRyaXZlciBjb25maWd1cmF0aW9uIGFzIGEga2VybmVsCisgICBjb21tYW5kIGxpbmUgb3B0aW9uLiAgVGhlIGtnZGJ3YWl0IHBhcmFtZXRlciBzaG91bGQgYWx3YXlzIGZvbGxvdyB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUga2dkYiBJL08gZHJpdmVyIGluIHRoZSBrZXJuZWwKKyAgIGNvbW1hbmQgbGluZSBlbHNlIHRoZSBJL08gZHJpdmVyIHdpbGwgbm90IGJlIGNvbmZpZ3VyZWQgcHJpb3IgdG8KKyAgIGFza2luZyB0aGUga2VybmVsIHRvIHVzZSBpdCB0byB3YWl0LgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICBUaGUga2VybmVsIHdpbGwgc3RvcCBhbmQgd2FpdCBhcyBlYXJseSBhcyB0aGUgSS9PIGRyaXZlciBhbmQKKyAgIGFyY2hpdGVjdHVyZSB3aWxsIGFsbG93IHdoZW4geW91IHVzZSB0aGlzIG9wdGlvbi4gIElmIHlvdSBidWlsZCB0aGUKKyAgIGtnZGIgSS9PIGRyaXZlciBhcyBhIGtlcm5lbCBtb2R1bGUga2dkYndhaXQgd2lsbCBub3QgZG8gYW55dGhpbmcuCisgICA8L3BhcmE+CisgICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9ImtnZGJvYyI+CisgIDx0aXRsZT5LZXJuZWwgcGFyYW1ldGVyOiBrZ2Rib2M8L3RpdGxlPgorICA8cGFyYT4KKyAgVGhlIGtnZGJvYyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgYW4gYWJicmV2aWF0aW9uIG1lYW50IHRvIHN0YW5kIGZvcgorICAia2dkYiBvdmVyIGNvbnNvbGUiLiAgS2dkYm9jIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBhIHNpbmdsZQorICBzZXJpYWwgcG9ydC4gSXQgd2FzIG1lYW50IHRvIGNvdmVyIHRoZSBjaXJjdW1zdGFuY2UKKyAgd2hlcmUgeW91IHdhbnRlZCB0byB1c2UgYSBzZXJpYWwgY29uc29sZSBhcyB5b3VyIHByaW1hcnkgY29uc29sZSBhcworICB3ZWxsIGFzIHVzaW5nIGl0IHRvIHBlcmZvcm0ga2VybmVsIGRlYnVnZ2luZy4gIE9mIGNvdXJzZSB5b3UgY2FuCisgIGFsc28gdXNlIGtnZGJvYyB3aXRob3V0IGFzc2lnbmluZyBhIGNvbnNvbGUgdG8gdGhlIHNhbWUgcG9ydC4KKyAgPC9wYXJhPgorICA8c2VjdDIgaWQ9IlVzaW5nS2dkYm9jIj4KKyAgPHRpdGxlPlVzaW5nIGtnZGJvYzwvdGl0bGU+CisgIDxwYXJhPgorICBZb3UgY2FuIGNvbmZpZ3VyZSBrZ2Rib2MgdmlhIHN5c2ZzIG9yIGEgbW9kdWxlIG9yIGtlcm5lbCBib290IGxpbmUKKyAgcGFyYW1ldGVyIGRlcGVuZGluZyBvbiBpZiB5b3UgYnVpbGQgd2l0aCBDT05GSUdfS0dEQk9DIGFzIGEgbW9kdWxlCisgIG9yIGJ1aWx0LWluLgorICA8b3JkZXJlZGxpc3Q+CisgIDxsaXN0aXRlbT48cGFyYT5Gcm9tIHRoZSBtb2R1bGUgbG9hZCBvciBidWlsZC1pbjwvcGFyYT4KKyAgPHBhcmE+PGNvbnN0YW50PmtnZGJvYz0mbHQ7dHR5LWRldmljZSZndDssW2JhdWRdPC9jb25zdGFudD48L3BhcmE+CisgIDxwYXJhPgorICBUaGUgZXhhbXBsZSBoZXJlIHdvdWxkIGJlIGlmIHlvdXIgY29uc29sZSBwb3J0IHdhcyB0eXBpY2FsbHkgdHR5UzAsIHlvdSB3b3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgPGNvbnN0YW50PmtnZGJvYz10dHlTMCwxMTUyMDA8L2NvbnN0YW50PiBvciBvbiB0aGUgQVJNIFZlcnNhdGlsZSBBQiB5b3Ugd291bGQgbGlrZWx5IHVzZSA8Y29uc3RhbnQ+a2dkYm9jPXR0eUFNQTAsMTE1MjAwPC9jb25zdGFudD4KKyAgPC9wYXJhPgorICA8L2xpc3RpdGVtPgorICA8bGlzdGl0ZW0+PHBhcmE+RnJvbSBzeXNmczwvcGFyYT4KKyAgPHBhcmE+PGNvbnN0YW50PmVjaG8gdHR5UzAgJmd0OyAvc3lzL21vZHVsZS9rZ2Rib2MvcGFyYW1ldGVycy9rZ2Rib2M8L2NvbnN0YW50PjwvcGFyYT4KKyAgPC9saXN0aXRlbT4KKyAgPC9vcmRlcmVkbGlzdD4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgTk9URTogS2dkYm9jIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJydXB0aW5nIHRoZSB0YXJnZXQgdmlhIHRoZQorICBnZGIgcmVtb3RlIHByb3RvY29sLiAgWW91IG11c3QgbWFudWFsbHkgc2VuZCBhIHN5c3JxLWcgdW5sZXNzIHlvdQorICBoYXZlIGEgcHJveHkgdGhhdCBzcGxpdHMgY29uc29sZSBvdXRwdXQgdG8gYSB0ZXJtaW5hbCBwcm9ibGVtIGFuZAorICBoYXMgYSBzZXBhcmF0ZSBwb3J0IGZvciB0aGUgZGVidWdnZXIgdG8gY29ubmVjdCB0byB0aGF0IHNlbmRzIHRoZQorICBzeXNycS1nIGZvciB5b3UuCisgIDwvcGFyYT4KKyAgPHBhcmE+V2hlbiB1c2luZyBrZ2Rib2Mgd2l0aCBubyBkZWJ1Z2dlciBwcm94eSwgeW91IGNhbiBlbmQgdXAKKyAgY29ubmVjdGluZyB0aGUgZGVidWdnZXIgZm9yIG9uZSBvZiB0d28gZW50cnkgcG9pbnRzLiAgSWYgYW4KKyAgZXhjZXB0aW9uIG9jY3VycyBhZnRlciB5b3UgaGF2ZSBsb2FkZWQga2dkYm9jIGEgbWVzc2FnZSBzaG91bGQgcHJpbnQKKyAgb24gdGhlIGNvbnNvbGUgc3RhdGluZyBpdCBpcyB3YWl0aW5nIGZvciB0aGUgZGVidWdnZXIuICBJbiBjYXNlIHlvdQorICBkaXNjb25uZWN0IHlvdXIgdGVybWluYWwgcHJvZ3JhbSBhbmQgdGhlbiBjb25uZWN0IHRoZSBkZWJ1Z2dlciBpbgorICBpdHMgcGxhY2UuICBJZiB5b3Ugd2FudCB0byBpbnRlcnJ1cHQgdGhlIHRhcmdldCBzeXN0ZW0gYW5kIGZvcmNpYmx5CisgIGVudGVyIGEgZGVidWcgc2Vzc2lvbiB5b3UgaGF2ZSB0byBpc3N1ZSBhIFN5c3JxIHNlcXVlbmNlIGFuZCB0aGVuCisgIHR5cGUgdGhlIGxldHRlciA8Y29uc3RhbnQ+ZzwvY29uc3RhbnQ+LiAgVGhlbiB5b3UgZGlzY29ubmVjdCB0aGUKKyAgdGVybWluYWwgc2Vzc2lvbiBhbmQgY29ubmVjdCBnZGIuICBZb3VyIG9wdGlvbnMgaWYgeW91IGRvbid0IGxpa2UKKyAgdGhpcyBhcmUgdG8gaGFjayBnZGIgdG8gc2VuZCB0aGUgc3lzcnEtZyBmb3IgeW91IGFzIHdlbGwgYXMgb24gdGhlCisgIGluaXRpYWwgY29ubmVjdCwgb3IgdG8gdXNlIGEgZGVidWdnZXIgcHJveHkgdGhhdCBhbGxvd3MgYW4KKyAgdW5tb2RpZmllZCBnZGIgdG8gZG8gdGhlIGRlYnVnZ2luZy4KKyAgPC9wYXJhPgorICA8L3NlY3QyPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9ImtnZGJjb24iPgorICA8dGl0bGU+S2VybmVsIHBhcmFtZXRlcjoga2dkYmNvbjwvdGl0bGU+CisgIDxwYXJhPgorICBLZ2RiIHN1cHBvcnRzIHVzaW5nIHRoZSBnZGIgc2VyaWFsIHByb3RvY29sIHRvIHNlbmQgY29uc29sZSBtZXNzYWdlcworICB0byB0aGUgZGVidWdnZXIgd2hlbiB0aGUgZGVidWdnZXIgaXMgY29ubmVjdGVkIGFuZCBydW5uaW5nLiAgVGhlcmUKKyAgYXJlIHR3byB3YXlzIHRvIGFjdGl2YXRlIHRoaXMgZmVhdHVyZS4KKyAgPG9yZGVyZWRsaXN0PgorICA8bGlzdGl0ZW0+PHBhcmE+QWN0aXZhdGUgd2l0aCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb246PC9wYXJhPgorICA8cGFyYT48Y29uc3RhbnQ+a2dkYmNvbjwvY29uc3RhbnQ+PC9wYXJhPgorICA8L2xpc3RpdGVtPgorICA8bGlzdGl0ZW0+PHBhcmE+VXNlIHN5c2ZzIGJlZm9yZSBjb25maWd1cmluZyBhbiBpbyBkcml2ZXI8L3BhcmE+CisgIDxwYXJhPgorICA8Y29uc3RhbnQ+ZWNobyAxICZndDsgL3N5cy9tb2R1bGUva2dkYi9wYXJhbWV0ZXJzL2tnZGJfdXNlX2NvbjwvY29uc3RhbnQ+CisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIE5PVEU6IElmIHlvdSBkbyB0aGlzIGFmdGVyIHlvdSBjb25maWd1cmUgdGhlIGtnZGIgSS9PIGRyaXZlciwgdGhlCisgIHNldHRpbmcgd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgcG9pbnQgdGhlIEkvTyBpcworICByZWNvbmZpZ3VyZWQuCisgIDwvcGFyYT4KKyAgPC9saXN0aXRlbT4KKyAgPC9vcmRlcmVkbGlzdD4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgSU1QT1JUQU5UIE5PVEU6IFVzaW5nIHRoaXMgb3B0aW9uIHdpdGgga2dkYiBvdmVyIHRoZSBjb25zb2xlCisgIChrZ2Rib2MpIG9yIGtnZGIgb3ZlciBldGhlcm5ldCAoa2dkYm9lKSBpcyBub3Qgc3VwcG9ydGVkLgorICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9IkNvbm5lY3RpbmdHREIiPgorICA8dGl0bGU+Q29ubmVjdGluZyBnZGI8L3RpdGxlPgorICAgIDxwYXJhPgorICAgIElmIHlvdSBhcmUgdXNpbmcga2dkYm9jLCB5b3UgbmVlZCB0byBoYXZlIHVzZWQga2dkYndhaXQgYXMgYSBib290CisgICAgYXJndW1lbnQsIGlzc3VlZCBhIHN5c3JxLWcsIG9yIHRoZSBzeXN0ZW0geW91IGFyZSBnb2luZyB0byBkZWJ1ZworICAgIGhhcyBhbHJlYWR5IHRha2VuIGFuIGV4Y2VwdGlvbiBhbmQgaXMgd2FpdGluZyBmb3IgdGhlIGRlYnVnZ2VyIHRvCisgICAgYXR0YWNoIGJlZm9yZSB5b3UgY2FuIGNvbm5lY3QgZ2RiLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBkaWZmZXJlbnQga2dkYiBJL08gZHJpdmVyIG90aGVyIHRoYW4ga2dkYm9jLAorICAgIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb25uZWN0IGFuZCB0aGUgdGFyZ2V0IHdpbGwgYXV0b21hdGljYWxseQorICAgIHJlc3BvbmQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIEV4YW1wbGUgKHVzaW5nIGEgc2VyaWFsIHBvcnQpOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgJSBnZGIgLi92bWxpbnV4CisgICAgKGdkYikgc2V0IHJlbW90ZWJhdWQgMTE1MjAwCisgICAgKGdkYikgdGFyZ2V0IHJlbW90ZSAvZGV2L3R0eVMwCisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICBFeGFtcGxlIChrZ2RiIHRvIGEgdGVybWluYWwgc2VydmVyKToKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorICAgICUgZ2RiIC4vdm1saW51eAorICAgIChnZGIpIHRhcmdldCByZW1vdGUgdWRwOjE5Mi4xNjguMi4yOjY0NDMKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgIEV4YW1wbGUgKGtnZGIgb3ZlciBldGhlcm5ldCk6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgICAlIGdkYiAuL3ZtbGludXgKKyAgICAoZ2RiKSB0YXJnZXQgcmVtb3RlIHVkcDoxOTIuMTY4LjIuMjo2NDQzCisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICBPbmNlIGNvbm5lY3RlZCwgeW91IGNhbiBkZWJ1ZyBhIGtlcm5lbCB0aGUgd2F5IHlvdSB3b3VsZCBkZWJ1ZyBhbgorICAgIGFwcGxpY2F0aW9uIHByb2dyYW0uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIElmIHlvdSBhcmUgaGF2aW5nIHByb2JsZW1zIGNvbm5lY3Rpbmcgb3Igc29tZXRoaW5nIGlzIGdvaW5nCisgICAgc2VyaW91c2x5IHdyb25nIHdoaWxlIGRlYnVnZ2luZywgaXQgd2lsbCBtb3N0IG9mdGVuIGJlIHRoZSBjYXNlCisgICAgdGhhdCB5b3Ugd2FudCB0byBlbmFibGUgZ2RiIHRvIGJlIHZlcmJvc2UgYWJvdXQgaXRzIHRhcmdldAorICAgIGNvbW11bmljYXRpb25zLiAgWW91IGRvIHRoaXMgcHJpb3IgdG8gaXNzdWluZyB0aGUgPGNvbnN0YW50PnRhcmdldAorICAgIHJlbW90ZTwvY29uc3RhbnQ+IGNvbW1hbmQgYnkgdHlwaW5nIGluOiA8Y29uc3RhbnQ+c2V0IHJlbW90ZSBkZWJ1ZyAxPC9jb25zdGFudD4KKyAgICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9IktHREJUZXN0U3VpdGUiPgorICAgIDx0aXRsZT5rZ2RiIFRlc3QgU3VpdGU8L3RpdGxlPgorICAgIDxwYXJhPgorICAgIFdoZW4ga2dkYiBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnIHlvdSBjYW4gYWxzbyBlbGVjdCB0bworICAgIGVuYWJsZSB0aGUgY29uZmlnIHBhcmFtZXRlciBLR0RCX1RFU1RTLiAgVHVybmluZyB0aGlzIG9uIHdpbGwKKyAgICBlbmFibGUgYSBzcGVjaWFsIGtnZGIgSS9PIG1vZHVsZSB3aGljaCBpcyBkZXNpZ25lZCB0byB0ZXN0IHRoZQorICAgIGtnZGIgaW50ZXJuYWwgZnVuY3Rpb25zLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICBUaGUga2dkYiB0ZXN0cyBhcmUgbWFpbmx5IGludGVuZGVkIGZvciBkZXZlbG9wZXJzIHRvIHRlc3QgdGhlIGtnZGIKKyAgICBpbnRlcm5hbHMgYXMgd2VsbCBhcyBhIHRvb2wgZm9yIGRldmVsb3BpbmcgYSBuZXcga2dkYiBhcmNoaXRlY3R1cmUKKyAgICBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gIFRoZXNlIHRlc3RzIGFyZSBub3QgcmVhbGx5IGZvciBlbmQgdXNlcnMKKyAgICBvZiB0aGUgTGludXgga2VybmVsLiAgVGhlIHByaW1hcnkgc291cmNlIG9mIGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICB0byBsb29rIGluIHRoZSBkcml2ZXJzL21pc2Mva2dkYnRzLmMgZmlsZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgVGhlIGtnZGIgdGVzdCBzdWl0ZSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZSB0byBydW4KKyAgICB0aGUgY29yZSBzZXQgb2YgdGVzdHMgYnkgc2V0dGluZyB0aGUga2VybmVsIGNvbmZpZyBwYXJhbWV0ZXIKKyAgICBLR0RCX1RFU1RTX09OX0JPT1QuICBUaGlzIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGFpbWVkIGF0IGF1dG9tYXRlZAorICAgIHJlZ3Jlc3Npb24gdGVzdGluZyBhbmQgZG9lcyBub3QgcmVxdWlyZSBtb2RpZnlpbmcgdGhlIGtlcm5lbCBib290CisgICAgY29uZmlnIGFyZ3VtZW50cy4gIElmIHRoaXMgaXMgdHVybmVkIG9uLCB0aGUga2dkYiB0ZXN0IHN1aXRlIGNhbgorICAgIGJlIGRpc2FibGVkIGJ5IHNwZWNpZnlpbmcgImtnZGJ0cz0iIGFzIGEga2VybmVsIGJvb3QgYXJndW1lbnQuCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJDb21tb25CYWNrRW5kUmVxIj4KKyAgPHRpdGxlPktHREIgSW50ZXJuYWxzPC90aXRsZT4KKyAgPHNlY3QxIGlkPSJrZ2RiQXJjaGl0ZWN0dXJlIj4KKyAgICA8dGl0bGU+QXJjaGl0ZWN0dXJlIFNwZWNpZmljczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIEtnZGIgaXMgb3JnYW5pemVkIGludG8gdGhyZWUgYmFzaWMgY29tcG9uZW50czoKKyAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5rZ2RiIGNvcmU8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBrZ2RiIGNvcmUgaXMgZm91bmQgaW4ga2VybmVsL2tnZGIuYy4gIEl0IGNvbnRhaW5zOgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5BbGwgdGhlIGxvZ2ljIHRvIGltcGxlbWVudCB0aGUgZ2RiIHNlcmlhbCBwcm90b2NvbDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZ2VuZXJpYyBPUyBleGNlcHRpb24gaGFuZGxlciB3aGljaCBpbmNsdWRlcyBzeW5jJ2luZyB0aGUgcHJvY2Vzc29ycyBpbnRvIGEgc3RvcHBlZCBzdGF0ZSBvbiBhbiBtdWx0aSBjcHUgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBBUEkgdG8gdGFsayB0byB0aGUga2dkYiBJL08gZHJpdmVyczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBBUEkgdG8gbWFrZSBjYWxscyB0byB0aGUgYXJjaCBzcGVjaWZpYyBrZ2RiIGltcGxlbWVudGF0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGxvZ2ljIHRvIHBlcmZvcm0gc2FmZSBtZW1vcnkgcmVhZHMgYW5kIHdyaXRlcyB0byBtZW1vcnkgd2hpbGUgdXNpbmcgdGhlIGRlYnVnZ2VyPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBmdWxsIGltcGxlbWVudGF0aW9uIGZvciBzb2Z0d2FyZSBicmVha3BvaW50cyB1bmxlc3Mgb3ZlcnJpZGRlbiBieSB0aGUgYXJjaDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPmtnZGIgYXJjaCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbjwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBnZW5lcmFsbHkgZm91bmQgaW4gYXJjaC8qL2tlcm5lbC9rZ2RiLmMuCisgICAgICBBcyBhbiBleGFtcGxlLCBhcmNoL3g4Ni9rZXJuZWwva2dkYi5jIGNvbnRhaW5zIHRoZSBzcGVjaWZpY3MgdG8KKyAgICAgIGltcGxlbWVudCBIVyBicmVha3BvaW50IGFzIHdlbGwgYXMgdGhlIGluaXRpYWxpemF0aW9uIHRvCisgICAgICBkeW5hbWljYWxseSByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBmb3IgdGhlIHRyYXAgaGFuZGxlcnMgb24KKyAgICAgIHRoaXMgYXJjaGl0ZWN0dXJlLiAgVGhlIGFyY2ggc3BlY2lmaWMgcG9ydGlvbiBpbXBsZW1lbnRzOgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5jb250YWlucyBhbiBhcmNoIHNwZWNpZmljIHRyYXAgY2F0Y2hlciB3aGljaAorICAgICAgaW52b2tlcyBrZ2RiX2hhbmRsZV9leGNlcHRpb24oKSB0byBzdGFydCBrZ2RiIGFib3V0IGRvaW5nIGl0cworICAgICAgd29yazwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPnRyYW5zbGF0aW9uIHRvIGFuZCBmcm9tIGdkYiBzcGVjaWZpYyBwYWNrZXQgZm9ybWF0IHRvIHB0X3JlZ3M8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB0cmFwIGhvb2tzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW55IHNwZWNpYWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBjbGVhbnVwPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+Tk1JIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgY2xlYW51cDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPihvcHRpb25hbClIVyBicmVha3BvaW50czwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPmtnZGIgSS9PIGRyaXZlcjwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgRWFjaCBrZ2RiIEkvTyBkcml2ZXIgaGFzIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW5hdGlvbiBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y29uZmlndXJhdGlvbiB2aWEgYnVpbHRpbiBvciBtb2R1bGU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5keW5hbWljIGNvbmZpZ3VyYXRpb24gYW5kIGtnZGIgaG9vayByZWdpc3RyYXRpb24gY2FsbHM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT5yZWFkIGFuZCB3cml0ZSBjaGFyYWN0ZXIgaW50ZXJmYWNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBjbGVhbnVwIGhhbmRsZXIgZm9yIHVuY29uZmlndXJpbmcgZnJvbSB0aGUga2dkYiBjb3JlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+KG9wdGlvbmFsKSBFYXJseSBkZWJ1ZyBtZXRob2RvbG9neTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICBBbnkgZ2l2ZW4ga2dkYiBJL08gZHJpdmVyIGhhcyB0byBvcGVyYXRlIHZlcnkgY2xvc2VseSB3aXRoIHRoZQorICAgICAgaGFyZHdhcmUgYW5kIG11c3QgZG8gaXQgaW4gc3VjaCBhIHdheSB0aGF0IGRvZXMgbm90IGVuYWJsZQorICAgICAgaW50ZXJydXB0cyBvciBjaGFuZ2Ugb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBjb250ZXh0IHdpdGhvdXQKKyAgICAgIGNvbXBsZXRlbHkgcmVzdG9yaW5nIHRoZW0uIFRoZSBrZ2RiIGNvcmUgd2lsbCByZXBlYXRlZGx5ICJwb2xsIgorICAgICAgYSBrZ2RiIEkvTyBkcml2ZXIgZm9yIGNoYXJhY3RlcnMgd2hlbiBpdCBuZWVkcyBpbnB1dC4gIFRoZSBJL08KKyAgICAgIGRyaXZlciBpcyBleHBlY3RlZCB0byByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgaXMgbm8gZGF0YQorICAgICAgYXZhaWxhYmxlLiAgRG9pbmcgc28gYWxsb3dzIGZvciB0aGUgZnV0dXJlIHBvc3NpYmlsaXR5IHRvIHRvdWNoCisgICAgICB3YXRjaCBkb2cgaGFyZHdhcmUgaW4gc3VjaCBhIHdheSBhcyB0byBoYXZlIGEgdGFyZ2V0IHN5c3RlbSBub3QKKyAgICAgIHJlc2V0IHdoZW4gdGhlc2UgYXJlIGVuYWJsZWQuCisgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgSWYgeW91IGFyZSBpbnRlbnQgb24gYWRkaW5nIGtnZGIgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN1cHBvcnQKKyAgICAgIGZvciBhIG5ldyBhcmNoaXRlY3R1cmUsIHRoZSBhcmNoaXRlY3R1cmUgc2hvdWxkIGRlZmluZQorICAgICAgPGNvbnN0YW50PkhBVkVfQVJDSF9LR0RCPC9jb25zdGFudD4gaW4gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYworICAgICAgS2NvbmZpZyBmaWxlLiAgVGhpcyB3aWxsIGVuYWJsZSBrZ2RiIGZvciB0aGUgYXJjaGl0ZWN0dXJlLCBhbmQKKyAgICAgIGF0IHRoYXQgcG9pbnQgeW91IG11c3QgY3JlYXRlIGFuIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBrZ2RiCisgICAgICBpbXBsZW1lbnRhdGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgVGhlcmUgYXJlIGEgZmV3IGZsYWdzIHdoaWNoIG11c3QgYmUgc2V0IG9uIGV2ZXJ5IGFyY2hpdGVjdHVyZSBpbgorICAgICAgdGhlaXIgJmx0O2FzbS9rZ2RiLmgmZ3Q7IGZpbGUuICBUaGVzZSBhcmU6CisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisJICA8cGFyYT4KKwkgIE5VTVJFR0JZVEVTOiBUaGUgc2l6ZSBpbiBieXRlcyBvZiBhbGwgb2YgdGhlIHJlZ2lzdGVycywgc28KKwkgIHRoYXQgd2UgY2FuIGVuc3VyZSB0aGV5IHdpbGwgYWxsIGZpdCBpbnRvIGEgcGFja2V0LgorCSAgPC9wYXJhPgorCSAgPHBhcmE+CisJICBCVUZNQVg6IFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgR0RCIHdpbGwgcmVhZCBpbnRvLgorCSAgVGhpcyBtdXN0IGJlIGxhcmdlciB0aGFuIE5VTVJFR0JZVEVTLgorCSAgPC9wYXJhPgorCSAgPHBhcmE+CisJICBDQUNIRV9GTFVTSF9JU19TQUZFOiBTZXQgdG8gMSBpZiBpdCBpcyBhbHdheXMgc2FmZSB0byBjYWxsCisJICBmbHVzaF9jYWNoZV9yYW5nZSBvciBmbHVzaF9pY2FjaGVfcmFuZ2UuICBPbiBzb21lIGFyY2hpdGVjdHVyZXMsCisJICB0aGVzZSBmdW5jdGlvbnMgbWF5IG5vdCBiZSBzYWZlIHRvIGNhbGwgb24gU01QIHNpbmNlIHdlIGtlZXAgb3RoZXIKKwkgIENQVXMgaW4gYSBob2xkaW5nIHBhdHRlcm4uCisJICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICBUaGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbW1vbiBiYWNrZW5kLAorICAgICAgZm91bmQgaW4ga2VybmVsL2tnZGIuYywgdGhhdCBtdXN0IGJlIHN1cHBsaWVkIGJ5IHRoZQorICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJhY2tlbmQgdW5sZXNzIG1hcmtlZCBhcyAob3B0aW9uYWwpLCBpbgorICAgICAgd2hpY2ggY2FzZSBhIGRlZmF1bHQgZnVuY3Rpb24gbWF5YmUgdXNlZCBpZiB0aGUgYXJjaGl0ZWN0dXJlCisgICAgICBkb2VzIG5vdCBuZWVkIHRvIHByb3ZpZGUgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgIDwvcGFyYT4KKyFJaW5jbHVkZS9saW51eC9rZ2RiLmgKKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJrZ2Rib2NEZXNpZ24iPgorICA8dGl0bGU+a2dkYm9jIGludGVybmFsczwvdGl0bGU+CisgIDxwYXJhPgorICBUaGUga2dkYm9jIGRyaXZlciBpcyBhY3R1YWxseSBhIHZlcnkgdGhpbiBkcml2ZXIgdGhhdCByZWxpZXMgb24gdGhlCisgIHVuZGVybHlpbmcgbG93IGxldmVsIHRvIHRoZSBoYXJkd2FyZSBkcml2ZXIgaGF2aW5nICJwb2xsaW5nIGhvb2tzIgorICB3aGljaCB0aGUgdG8gd2hpY2ggdGhlIHR0eSBkcml2ZXIgaXMgYXR0YWNoZWQuICBJbiB0aGUgaW5pdGlhbAorICBpbXBsZW1lbnRhdGlvbiBvZiBrZ2Rib2MgaXQgdGhlIHNlcmlhbF9jb3JlIHdhcyBjaGFuZ2VkIHRvIGV4cG9zZSBhCisgIGxvdyBsZXZlbCB1YXJ0IGhvb2sgZm9yIGRvaW5nIHBvbGxlZCBtb2RlIHJlYWRpbmcgYW5kIHdyaXRpbmcgb2YgYQorICBzaW5nbGUgY2hhcmFjdGVyIHdoaWxlIGluIGFuIGF0b21pYyBjb250ZXh0LiAgV2hlbiBrZ2RiIG1ha2VzIGFuIEkvTworICByZXF1ZXN0IHRvIHRoZSBkZWJ1Z2dlciwga2dkYm9jIGludm9rZXMgYSBjYWxsIGJhY2sgaW4gdGhlIHNlcmlhbAorICBjb3JlIHdoaWNoIGluIHR1cm4gdXNlcyB0aGUgY2FsbCBiYWNrIGluIHRoZSB1YXJ0IGRyaXZlci4gIEl0IGlzCisgIGNlcnRhaW5seSBwb3NzaWJsZSB0byBleHRlbmQga2dkYm9jIHRvIHdvcmsgd2l0aCBub24tdWFydCBiYXNlZAorICBjb25zb2xlcyBpbiB0aGUgZnV0dXJlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICBXaGVuIHVzaW5nIGtnZGJvYyB3aXRoIGEgdWFydCwgdGhlIHVhcnQgZHJpdmVyIG11c3QgaW1wbGVtZW50IHR3byBjYWxsYmFja3MgaW4gdGhlIDxjb25zdGFudD5zdHJ1Y3QgdWFydF9vcHM8L2NvbnN0YW50Pi4gRXhhbXBsZSBmcm9tIGRyaXZlcnMvODI1MC5jOjxwcm9ncmFtbGlzdGluZz4KKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisJLnBvbGxfZ2V0X2NoYXIgPSBzZXJpYWw4MjUwX2dldF9wb2xsX2NoYXIsCisJLnBvbGxfcHV0X2NoYXIgPSBzZXJpYWw4MjUwX3B1dF9wb2xsX2NoYXIsCisjZW5kaWYKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgQW55IGltcGxlbWVudGF0aW9uIHNwZWNpZmljcyBhcm91bmQgY3JlYXRpbmcgYSBwb2xsaW5nIGRyaXZlciB1c2UgdGhlCisgIDxjb25zdGFudD4jaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTDwvY29uc3RhbnQ+LCBhcyBzaG93biBhYm92ZS4KKyAgS2VlcCBpbiBtaW5kIHRoYXQgcG9sbGluZyBob29rcyBoYXZlIHRvIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkKKyAgdGhhdCB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSBhbiBhdG9taWMgY29udGV4dCBhbmQgaGF2ZSB0byByZXN0b3JlCisgIHRoZSBzdGF0ZSBvZiB0aGUgdWFydCBjaGlwIG9uIHJldHVybiBzdWNoIHRoYXQgdGhlIHN5c3RlbSBjYW4gcmV0dXJuCisgIHRvIG5vcm1hbCB3aGVuIHRoZSBkZWJ1Z2dlciBkZXRhY2hlcy4gIFlvdSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bAorICB3aXRoIGFueSBraW5kIG9mIGxvY2sgeW91IGNvbnNpZGVyLCBiZWNhdXNlIGZhaWxpbmcgaGVyZSBpcyBtb3N0CisgIGdvaW5nIHRvIG1lYW4gcHJlc3NpbmcgdGhlIHJlc2V0IGJ1dHRvbi4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJjcmVkaXRzIj4KKyAgICAgPHRpdGxlPkNyZWRpdHM8L3RpdGxlPgorCTxwYXJhPgorCQlUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoaXMgZG9jdW1lbnQ6CisJCTxvcmRlcmVkbGlzdD4KKwkJCTxsaXN0aXRlbT48cGFyYT5BbWl0IEthbGU8ZW1haWw+YW1pdGthbGVAbGluc3lzc29mdC5jb208L2VtYWlsPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPlRvbSBSaW5pPGVtYWlsPnRyaW5pQGtlcm5lbC5jcmFzaGluZy5vcmc8L2VtYWlsPjwvcGFyYT48L2xpc3RpdGVtPgorCQk8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIEluIE1hcmNoIDIwMDggdGhpcyBkb2N1bWVudCB3YXMgY29tcGxldGVseSByZXdyaXR0ZW4gYnk6CisJCTxpdGVtaXplZGxpc3Q+CisJCTxsaXN0aXRlbT48cGFyYT5KYXNvbiBXZXNzZWw8ZW1haWw+amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb208L2VtYWlsPjwvcGFyYT48L2xpc3RpdGVtPgorCQk8L2l0ZW1pemVkbGlzdD4KKwk8L3BhcmE+CisgIDwvY2hhcHRlcj4KKzwvYm9vaz4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hYzgwMjExLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjUxZTBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hYzgwMjExLnRtcGwKQEAgLTAsMCArMSwzMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0ibWFjODAyMTEtZGV2ZWxvcGVycy1ndWlkZSI+CisgIDxib29raW5mbz4KKyAgICA8dGl0bGU+VGhlIG1hYzgwMjExIHN1YnN5c3RlbSBmb3Iga2VybmVsIGRldmVsb3BlcnM8L3RpdGxlPgorCisgICAgPGF1dGhvcmdyb3VwPgorICAgICAgPGF1dGhvcj4KKyAgICAgICAgPGZpcnN0bmFtZT5Kb2hhbm5lczwvZmlyc3RuYW1lPgorICAgICAgICA8c3VybmFtZT5CZXJnPC9zdXJuYW1lPgorICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgPGFkZHJlc3M+PGVtYWlsPmpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ8L2VtYWlsPjwvYWRkcmVzcz4KKyAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgIDwvYXV0aG9yPgorICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+MjAwNzwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDg8L3llYXI+CisgICAgICA8aG9sZGVyPkpvaGFubmVzIEJlcmc8L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICAgICBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBkb2N1bWVudGF0aW9uOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgICAgPC9wYXJhPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8YWJzdHJhY3Q+CishUGluY2x1ZGUvbmV0L21hYzgwMjExLmggSW50cm9kdWN0aW9uCishUGluY2x1ZGUvbmV0L21hYzgwMjExLmggV2FybmluZworICAgIDwvYWJzdHJhY3Q+CisgIDwvYm9va2luZm8+CisKKyAgPHRvYz48L3RvYz4KKworPCEtLQorR2VuZXJhbGx5LCB0aGlzIGRvY3VtZW50IHNoYWxsIGJlIG9yZGVyZWQgYnkgaW5jcmVhc2luZyBjb21wbGV4aXR5LgorSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCByZWFkZXJzIHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgb25seQordGhlIGZpcnN0IGZldyBzZWN0aW9ucyB0byBnZXQgYSB3b3JraW5nIGRyaXZlciBhbmQgb25seSBhZHZhbmNlZAordXNhZ2Ugc2hvdWxkIHJlcXVpcmUgcmVhZGluZyB0aGUgZnVsbCBkb2N1bWVudC4KKy0tPgorCisgIDxwYXJ0PgorICAgIDx0aXRsZT5UaGUgYmFzaWMgbWFjODAyMTEgZHJpdmVyIGludGVyZmFjZTwvdGl0bGU+CisgICAgPHBhcnRpbnRybz4KKyAgICAgIDxwYXJhPgorICAgICAgICBZb3Ugc2hvdWxkIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorICAgICAgICB3aXRoaW4gdGhpcyBwYXJ0IG9mIHRoZSBib29rIHdoaWxlIGltcGxlbWVudGluZyBhIGRyaXZlci4KKyAgICAgICAgSW4gc29tZSBjaGFwdGVycywgYWR2YW5jZWQgdXNhZ2UgaXMgbm90ZWQsIHRoYXQgbWF5IGJlCisgICAgICAgIHNraXBwZWQgYXQgZmlyc3QuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBwYXJ0IG9mIHRoZSBib29rIG9ubHkgY292ZXJzIHN0YXRpb24gYW5kIG1vbml0b3IgbW9kZQorICAgICAgICBmdW5jdGlvbmFsaXR5LCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGltcGxlbWVudAorICAgICAgICB0aGUgb3RoZXIgbW9kZXMgaXMgY292ZXJlZCBpbiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGJvb2suCisgICAgICA8L3BhcmE+CisgICAgPC9wYXJ0aW50cm8+CisKKyAgICA8Y2hhcHRlciBpZD0iYmFzaWNzIj4KKyAgICAgIDx0aXRsZT5CYXNpYyBoYXJkd2FyZSBoYW5kbGluZzwvdGl0bGU+CisgICAgICA8cGFyYT5UQkQ8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIHNoYWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gb24gZ2V0dGluZyBhIGh3CisgICAgICAgIHN0cnVjdCBhbGxvY2F0ZWQgYW5kIHJlZ2lzdGVyZWQgd2l0aCBtYWM4MDIxMS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTaW5jZSBpdCBpcyByZXF1aXJlZCB0byBhbGxvY2F0ZSByYXRlcy9tb2RlcyBiZWZvcmUgcmVnaXN0ZXJpbmcKKyAgICAgICAgYSBodyBzdHJ1Y3QsIHRoaXMgY2hhcHRlciBzaGFsbCBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gb24gc2V0dGluZworICAgICAgICB1cCB0aGUgcmF0ZS9tb2RlIHN0cnVjdHMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBzb21lIGRpc2N1c3Npb24gYWJvdXQgdGhlIGNhbGxiYWNrcyBhbmQKKyAgICAgICAgdGhlIGdlbmVyYWwgcHJvZ3JhbW1pbmcgbW9kZWwgc2hvdWxkIGJlIGluIGhlcmUsIGluY2x1ZGluZworICAgICAgICB0aGUgZGVmaW5pdGlvbiBvZiBpZWVlODAyMTFfb3BzIHdoaWNoIHdpbGwgYmUgcmVmZXJyZWQgdG8KKyAgICAgICAgYSBsb3QuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgRmluYWxseSwgYSBkaXNjdXNzaW9uIG9mIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgZG9uZQorICAgICAgICB3aXRoIHJlZmVyZW5jZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGJvb2suCisgICAgICA8L3BhcmE+Cis8IS0tIGludGVudGlvbmFsbHkgbXVsdGlwbGUgIUYgbGluZXMgdG8gZ2V0IHByb3BlciBvcmRlciAtLT4KKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfaHcKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfaHdfZmxhZ3MKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBTRVRfSUVFRTgwMjExX0RFVgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIFNFVF9JRUVFODAyMTFfUEVSTV9BRERSCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX29wcworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9hbGxvY19odworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9yZWdpc3Rlcl9odworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZQorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9mcmVlX2h3CisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9InBoeS1oYW5kbGluZyI+CisgICAgICA8dGl0bGU+UEhZIGNvbmZpZ3VyYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+VEJEPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBzaG91bGQgZGVzY3JpYmUgUEhZIGhhbmRsaW5nIGluY2x1ZGluZworICAgICAgICBzdGFydC9zdG9wIGNhbGxiYWNrcyBhbmQgdGhlIHZhcmlvdXMgc3RydWN0dXJlcyB1c2VkLgorICAgICAgPC9wYXJhPgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9jb25mCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2NvbmZfZmxhZ3MKKyAgICA8L2NoYXB0ZXI+CisKKyAgICA8Y2hhcHRlciBpZD0iaWZhY2UtaGFuZGxpbmciPgorICAgICAgPHRpdGxlPlZpcnR1YWwgaW50ZXJmYWNlczwvdGl0bGU+CisgICAgICA8cGFyYT5UQkQ8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIHNob3VsZCBkZXNjcmliZSB2aXJ0dWFsIGludGVyZmFjZSBiYXNpY3MKKyAgICAgICAgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIGRyaXZlciAoVkxBTnMsIE1HTVQgZXRjIGFyZSBub3QuKQorICAgICAgICBJdCBzaG91bGQgZXhwbGFpbiB0aGUgdXNlIG9mIHRoZSBhZGRfaWZhY2UvcmVtb3ZlX2lmYWNlCisgICAgICAgIGNhbGxiYWNrcyBhcyB3ZWxsIGFzIHRoZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBjYWxsYmFja3MuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT5UaGluZ3MgcmVsYXRlZCB0byBBUCBtb2RlIHNob3VsZCBiZSBkaXNjdXNzZWQgdGhlcmUuPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaW5ncyByZWxhdGVkIHRvIHN1cHBvcnRpbmcgbXVsdGlwbGUgaW50ZXJmYWNlcyBzaG91bGQgYmUKKyAgICAgICAgaW4gdGhlIGFwcHJvcHJpYXRlIGNoYXB0ZXIsIGEgQklHIEZBVCBub3RlIHNob3VsZCBiZSBoZXJlIGFib3V0CisgICAgICAgIHRoaXMgdGhvdWdoIGFuZCB0aGUgcmVjb21tZW5kYXRpb24gdG8gYWxsb3cgb25seSBhIHNpbmdsZQorICAgICAgICBpbnRlcmZhY2UgaW4gU1RBIG1vZGUgYXQgZmlyc3QhCisgICAgICA8L3BhcmE+CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2lmX3R5cGVzCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2lmX2luaXRfY29uZgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9pZl9jb25mCisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9InJ4LXR4Ij4KKyAgICAgIDx0aXRsZT5SZWNlaXZlIGFuZCB0cmFuc21pdCBwcm9jZXNzaW5nPC90aXRsZT4KKyAgICAgIDxzZWN0MT4KKyAgICAgICAgPHRpdGxlPndoYXQgc2hvdWxkIGJlIGhlcmU8L3RpdGxlPgorICAgICAgICA8cGFyYT5UQkQ8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgc2hvdWxkIGRlc2NyaWJlIHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdAorICAgICAgICAgIHBhdGhzIGluIG1hYzgwMjExL3RoZSBkcml2ZXJzIGFzIHdlbGwgYXMKKyAgICAgICAgICB0cmFuc21pdCBzdGF0dXMgaGFuZGxpbmcuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDE+CisgICAgICA8c2VjdDE+CisgICAgICAgIDx0aXRsZT5GcmFtZSBmb3JtYXQ8L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIEZyYW1lIGZvcm1hdAorICAgICAgPC9zZWN0MT4KKyAgICAgIDxzZWN0MT4KKyAgICAgICAgPHRpdGxlPkFsaWdubWVudCBpc3N1ZXM8L3RpdGxlPgorICAgICAgICA8cGFyYT5UQkQ8L3BhcmE+CisgICAgICA8L3NlY3QxPgorICAgICAgPHNlY3QxPgorICAgICAgICA8dGl0bGU+Q2FsbGluZyBpbnRvIG1hYzgwMjExIGZyb20gaW50ZXJydXB0czwvdGl0bGU+CishUGluY2x1ZGUvbmV0L21hYzgwMjExLmggQ2FsbGluZyBtYWM4MDIxMSBmcm9tIGludGVycnVwdHMKKyAgICAgIDwvc2VjdDE+CisgICAgICA8c2VjdDE+CisgICAgICAgIDx0aXRsZT5mdW5jdGlvbnMvZGVmaW5pdGlvbnM8L3RpdGxlPgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9yeF9zdGF0dXMKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBtYWM4MDIxMV9yeF9mbGFncworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV90eF9jb250cm9sCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X3N0YXR1c19mbGFncworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9yeAorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9yeF9pcnFzYWZlCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X3N0YXR1cworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZQorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9ydHNfZ2V0CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3J0c19kdXJhdGlvbgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9jdHN0b3NlbGZfZ2V0CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2N0c3Rvc2VsZl9kdXJhdGlvbgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2IKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfZ2V0X2hkcmxlbgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV93YWtlX3F1ZXVlCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3N0b3BfcXVldWUKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfc3RhcnRfcXVldWVzCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3N0b3BfcXVldWVzCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3dha2VfcXVldWVzCisgICAgICA8L3NlY3QxPgorICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyIGlkPSJmaWx0ZXJzIj4KKyAgICAgIDx0aXRsZT5GcmFtZSBmaWx0ZXJpbmc8L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIEZyYW1lIGZpbHRlcmluZworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9maWx0ZXJfZmxhZ3MKKyAgICA8L2NoYXB0ZXI+CisgIDwvcGFydD4KKworICA8cGFydCBpZD0iYWR2YW5jZWQiPgorICAgIDx0aXRsZT5BZHZhbmNlZCBkcml2ZXIgaW50ZXJmYWNlPC90aXRsZT4KKyAgICA8cGFydGludHJvPgorICAgICAgPHBhcmE+CisgICAgICAgSW5mb3JtYXRpb24gY29udGFpbmVkIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGJvb2sgaXMKKyAgICAgICBvZiBpbnRlcmVzdCBvbmx5IGZvciBhZHZhbmNlZCBpbnRlcmFjdGlvbiBvZiBtYWM4MDIxMQorICAgICAgIHdpdGggZHJpdmVycyB0byBleHBsb2l0IG1vcmUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGFuZAorICAgICAgIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAgICA8L3BhcmE+CisgICAgPC9wYXJ0aW50cm8+CisKKyAgICA8Y2hhcHRlciBpZD0iaGFyZHdhcmUtY3J5cHRvLW9mZmxvYWQiPgorICAgICAgPHRpdGxlPkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb248L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIEhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24KKzwhLS0gaW50ZW50aW9uYWxseSBtdWx0aXBsZSAhRiBsaW5lcyB0byBnZXQgcHJvcGVyIG9yZGVyIC0tPgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIHNldF9rZXlfY21kCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2tleV9jb25mCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2tleV9hbGcKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfa2V5X2ZsYWdzCisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9InFvcyI+CisgICAgICA8dGl0bGU+TXVsdGlwbGUgcXVldWVzIGFuZCBRb1Mgc3VwcG9ydDwvdGl0bGU+CisgICAgICA8cGFyYT5UQkQ8L3BhcmE+CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0c19kYXRhCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X3F1ZXVlCisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9IkFQIj4KKyAgICAgIDx0aXRsZT5BY2Nlc3MgcG9pbnQgbW9kZSBzdXBwb3J0PC90aXRsZT4KKyAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyAgICAgIDxwYXJhPlNvbWUgcGFydHMgb2YgdGhlIGlmX2NvbmYgc2hvdWxkIGJlIGRpc2N1c3NlZCBoZXJlIGluc3RlYWQ8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgSW5zZXJ0IG5vdGVzIGFib3V0IFZMQU4gaW50ZXJmYWNlcyB3aXRoIGh3IGNyeXB0byBoZXJlIG9yCisgICAgICAgIGluIHRoZSBodyBjcnlwdG8gY2hhcHRlci4KKyAgICAgIDwvcGFyYT4KKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2JlYWNvbl9nZXQKKyAgICA8L2NoYXB0ZXI+CisKKyAgICA8Y2hhcHRlciBpZD0ibXVsdGktaWZhY2UiPgorICAgICAgPHRpdGxlPlN1cHBvcnRpbmcgbXVsdGlwbGUgdmlydHVhbCBpbnRlcmZhY2VzPC90aXRsZT4KKyAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBOb3RlOiBXRFMgd2l0aCBpZGVudGljYWwgTUFDIGFkZHJlc3Mgc2hvdWxkIGFsbW9zdCBhbHdheXMgYmUgT0sKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbnNlcnQgbm90ZXMgYWJvdXQgaGF2aW5nIG11bHRpcGxlIHZpcnR1YWwgaW50ZXJmYWNlcyB3aXRoCisgICAgICAgIGRpZmZlcmVudCBNQUMgYWRkcmVzc2VzIGhlcmUsIG5vdGUgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlCisgICAgICAgIHN1cHBvcnRlZCBieSBtYWM4MDIxMSwgYWRkIG5vdGVzIGFib3V0IHN1cHBvcnRpbmcgaHcgY3J5cHRvCisgICAgICAgIHdpdGggaXQuCisgICAgICA8L3BhcmE+CisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9ImhhcmR3YXJlLXNjYW4tb2ZmbG9hZCI+CisgICAgICA8dGl0bGU+SGFyZHdhcmUgc2NhbiBvZmZsb2FkPC90aXRsZT4KKyAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQKKyAgICA8L2NoYXB0ZXI+CisgIDwvcGFydD4KKworICA8cGFydCBpZD0icmF0ZS1jb250cm9sIj4KKyAgICA8dGl0bGU+UmF0ZSBjb250cm9sIGludGVyZmFjZTwvdGl0bGU+CisgICAgPHBhcnRpbnRybz4KKyAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRoaXMgcGFydCBvZiB0aGUgYm9vayBkZXNjcmliZXMgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0KKyAgICAgICBpbnRlcmZhY2UgYW5kIGhvdyBpdCByZWxhdGVzIHRvIG1hYzgwMjExIGFuZCBkcml2ZXJzLgorICAgICAgPC9wYXJhPgorICAgIDwvcGFydGludHJvPgorICAgIDxjaGFwdGVyIGlkPSJkdW1teSI+CisgICAgICA8dGl0bGU+ZHVtbXkgY2hhcHRlcjwvdGl0bGU+CisgICAgICA8cGFyYT5UQkQ8L3BhcmE+CisgICAgPC9jaGFwdGVyPgorICA8L3BhcnQ+CisKKyAgPHBhcnQgaWQ9ImludGVybmFsIj4KKyAgICA8dGl0bGU+SW50ZXJuYWxzPC90aXRsZT4KKyAgICA8cGFydGludHJvPgorICAgICAgPHBhcmE+VEJEPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBwYXJ0IG9mIHRoZSBib29rIGRlc2NyaWJlcyBtYWM4MDIxMSBpbnRlcm5hbHMuCisgICAgICA8L3BhcmE+CisgICAgPC9wYXJ0aW50cm8+CisKKyAgICA8Y2hhcHRlciBpZD0ia2V5LWhhbmRsaW5nIj4KKyAgICAgIDx0aXRsZT5LZXkgaGFuZGxpbmc8L3RpdGxlPgorICAgICAgPHNlY3QxPgorICAgICAgICA8dGl0bGU+S2V5IGhhbmRsaW5nIGJhc2ljczwvdGl0bGU+CishUG5ldC9tYWM4MDIxMS9rZXkuYyBLZXkgaGFuZGxpbmcgYmFzaWNzCisgICAgICA8L3NlY3QxPgorICAgICAgPHNlY3QxPgorICAgICAgICA8dGl0bGU+TU9SRSBUQkQ8L3RpdGxlPgorICAgICAgICA8cGFyYT5UQkQ8L3BhcmE+CisgICAgICA8L3NlY3QxPgorICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyIGlkPSJyeC1wcm9jZXNzaW5nIj4KKyAgICAgIDx0aXRsZT5SZWNlaXZlIHByb2Nlc3Npbmc8L3RpdGxlPgorICAgICAgPHBhcmE+VEJEPC9wYXJhPgorICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyIGlkPSJ0eC1wcm9jZXNzaW5nIj4KKyAgICAgIDx0aXRsZT5UcmFuc21pdCBwcm9jZXNzaW5nPC90aXRsZT4KKyAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyAgICA8L2NoYXB0ZXI+CisKKyAgICA8Y2hhcHRlciBpZD0ic3RhLWluZm8iPgorICAgICAgPHRpdGxlPlN0YXRpb24gaW5mbyBoYW5kbGluZzwvdGl0bGU+CisgICAgICA8c2VjdDE+CisgICAgICAgIDx0aXRsZT5Qcm9ncmFtbWluZyBpbmZvcm1hdGlvbjwvdGl0bGU+CishRm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oIHN0YV9pbmZvCishRm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGllZWU4MDIxMV9zdGFfaW5mb19mbGFncworICAgICAgPC9zZWN0MT4KKyAgICAgIDxzZWN0MT4KKyAgICAgICAgPHRpdGxlPlNUQSBpbmZvcm1hdGlvbiBsaWZldGltZSBydWxlczwvdGl0bGU+CishUG5ldC9tYWM4MDIxMS9zdGFfaW5mby5jIFNUQSBpbmZvcm1hdGlvbiBsaWZldGltZSBydWxlcworICAgICAgPC9zZWN0MT4KKyAgICA8L2NoYXB0ZXI+CisKKyAgICA8Y2hhcHRlciBpZD0ic3luY2hyb25pc2F0aW9uIj4KKyAgICAgIDx0aXRsZT5TeW5jaHJvbmlzYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+VEJEPC9wYXJhPgorICAgICAgPHBhcmE+TG9ja2luZywgbG90cyBvZiBSQ1U8L3BhcmE+CisgICAgPC9jaGFwdGVyPgorICA8L3BhcnQ+Cis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZ191c2JfZHJpdmVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZ191c2JfZHJpdmVyLnRtcGwKaW5kZXggZDQxODhkNC4uZWVmZjE5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmdfdXNiX2RyaXZlci50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nX3VzYl9kcml2ZXIudG1wbApAQCAtMTAwLDggKzEwMCw4IEBACiAgICAgICB1c2VmdWwgZG9jdW1lbnRzLCBhdCB0aGUgVVNCIGhvbWUgcGFnZSAoc2VlIFJlc291cmNlcykuIEFuIGV4Y2VsbGVudAogICAgICAgaW50cm9kdWN0aW9uIHRvIHRoZSBMaW51eCBVU0Igc3Vic3lzdGVtIGNhbiBiZSBmb3VuZCBhdCB0aGUgVVNCIFdvcmtpbmcKICAgICAgIERldmljZXMgTGlzdCAoc2VlIFJlc291cmNlcykuIEl0IGV4cGxhaW5zIGhvdyB0aGUgTGludXggVVNCIHN1YnN5c3RlbSBpcwotICAgICAgc3RydWN0dXJlZCBhbmQgaW50cm9kdWNlcyB0aGUgcmVhZGVyIHRvIHRoZSBjb25jZXB0IG9mIFVTQiB1cmJzLCB3aGljaAotICAgICAgYXJlIGVzc2VudGlhbCB0byBVU0IgZHJpdmVycy4KKyAgICAgIHN0cnVjdHVyZWQgYW5kIGludHJvZHVjZXMgdGhlIHJlYWRlciB0byB0aGUgY29uY2VwdCBvZiBVU0IgdXJicworICAgICAgKFVTQiBSZXF1ZXN0IEJsb2NrcyksIHdoaWNoIGFyZSBlc3NlbnRpYWwgdG8gVVNCIGRyaXZlcnMuCiAgIDwvcGFyYT4KICAgPHBhcmE+CiAgICAgICBUaGUgZmlyc3QgdGhpbmcgYSBMaW51eCBVU0IgZHJpdmVyIG5lZWRzIHRvIGRvIGlzIHJlZ2lzdGVyIGl0c2VsZiB3aXRoCkBAIC0xNjIsOCArMTYyLDggQEAKIG1vZHVsZV9pbml0KHVzYl9za2VsX2luaXQpOwogICA8L3Byb2dyYW1saXN0aW5nPgogICA8cGFyYT4KLSAgICAgIFdoZW4gdGhlIGRyaXZlciBpcyB1bmxvYWRlZCBmcm9tIHRoZSBzeXN0ZW0sIGl0IG5lZWRzIHRvIHVucmVnaXN0ZXIKLSAgICAgIGl0c2VsZiB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgdXNiX3VucmVnaXN0ZXIKKyAgICAgIFdoZW4gdGhlIGRyaXZlciBpcyB1bmxvYWRlZCBmcm9tIHRoZSBzeXN0ZW0sIGl0IG5lZWRzIHRvIGRlcmVnaXN0ZXIKKyAgICAgIGl0c2VsZiB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgdXNiX2RlcmVnaXN0ZXIKICAgICAgIGZ1bmN0aW9uOgogICA8L3BhcmE+CiAgIDxwcm9ncmFtbGlzdGluZz4KQEAgLTIzMiw3ICsyMzIsNyBAQAogICAgICB3ZXJlIHBhc3NlZCB0byB0aGUgVVNCIHN1YnN5c3RlbSB3aWxsIGJlIGNhbGxlZCBmcm9tIGEgdXNlciBwcm9ncmFtIHRyeWluZwogICAgICB0byB0YWxrIHRvIHRoZSBkZXZpY2UuIFRoZSBmaXJzdCBmdW5jdGlvbiBjYWxsZWQgd2lsbCBiZSBvcGVuLCBhcyB0aGUKICAgICAgcHJvZ3JhbSB0cmllcyB0byBvcGVuIHRoZSBkZXZpY2UgZm9yIEkvTy4gV2UgaW5jcmVtZW50IG91ciBwcml2YXRlIHVzYWdlCi0gICAgIGNvdW50IGFuZCBzYXZlIG9mZiBhIHBvaW50ZXIgdG8gb3VyIGludGVybmFsIHN0cnVjdHVyZSBpbiB0aGUgZmlsZQorICAgICBjb3VudCBhbmQgc2F2ZSBhIHBvaW50ZXIgdG8gb3VyIGludGVybmFsIHN0cnVjdHVyZSBpbiB0aGUgZmlsZQogICAgICBzdHJ1Y3R1cmUuIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGZ1dHVyZSBjYWxscyB0byBmaWxlIG9wZXJhdGlvbnMgd2lsbAogICAgICBlbmFibGUgdGhlIGRyaXZlciB0byBkZXRlcm1pbmUgd2hpY2ggZGV2aWNlIHRoZSB1c2VyIGlzIGFkZHJlc3NpbmcuICBBbGwKICAgICAgb2YgdGhpcyBpcyBkb25lIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOgpAQCAtMjUyLDggKzI1Miw4IEBACiAgICAgIHNlbmQgdG8gdGhlIGRldmljZSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgd3JpdGUgdXJiIGl0IGhhcyBjcmVhdGVkICh0aGlzCiAgICAgIHNpemUgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgYnVsayBvdXQgZW5kIHBvaW50IHRoYXQgdGhlIGRldmljZSBoYXMpLgogICAgICBUaGVuIGl0IGNvcGllcyB0aGUgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsIHNwYWNlLCBwb2ludHMgdGhlIHVyYiB0bwotICAgICB0aGUgZGF0YSBhbmQgc3VibWl0cyB0aGUgdXJiIHRvIHRoZSBVU0Igc3Vic3lzdGVtLiAgVGhpcyBjYW4gYmUgc2hvd24gaW4KLSAgICAgaGUgZm9sbG93aW5nIGNvZGU6CisgICAgIHRoZSBkYXRhIGFuZCBzdWJtaXRzIHRoZSB1cmIgdG8gdGhlIFVTQiBzdWJzeXN0ZW0uICBUaGlzIGNhbiBiZSBzZWVuIGluCisgICAgIHRoZSBmb2xsb3dpbmcgY29kZToKICAgPC9wYXJhPgogICA8cHJvZ3JhbWxpc3Rpbmc+CiAvKiB3ZSBjYW4gb25seSB3cml0ZSBhcyBtdWNoIGFzIDEgdXJiIHdpbGwgaG9sZCAqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL1BDSS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY0Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvMDAtSU5ERVgKQEAgLTAsMCArMSwxMiBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZQorUENJLURNQS1tYXBwaW5nLnR4dAorCS0gaW5mbyBmb3IgUENJIGRyaXZlcnMgdXNpbmcgRE1BIHBvcnRhYmx5IGFjcm9zcyBhbGwgcGxhdGZvcm1zCitQQ0lFQlVTLUhPV1RPLnR4dAorCS0gYSBndWlkZSBkZXNjcmliaW5nIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIKK3BjaS1lcnJvci1yZWNvdmVyeS50eHQKKwktIGluZm8gb24gUENJIGVycm9yIHJlY292ZXJ5CitwY2kudHh0CisJLSBpbmZvIG9uIHRoZSBQQ0kgc3Vic3lzdGVtIGZvciBkZXZpY2UgZHJpdmVyIGF1dGhvcnMKK3BjaWVhZXItaG93dG8udHh0CisJLSB0aGUgUENJIEV4cHJlc3MgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nIERyaXZlciBHdWlkZSBIT1dUTwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvUENJRUJVUy1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9QQ0lFQlVTLUhPV1RPLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTA3ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvUENJRUJVUy1IT1dUTy50eHQKQEAgLTAsMCArMSwyMTcgQEAKKwkJVGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlciBHdWlkZSBIT1dUTworCVRvbSBMIE5ndXllbiB0b20ubC5uZ3V5ZW5AaW50ZWwuY29tCisJCQkxMS8wMy8yMDA0CisKKzEuIEFib3V0IHRoaXMgZ3VpZGUKKworVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIGJhc2ljcyBvZiB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyCithbmQgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IHRvIGVuYWJsZSB0aGUgc2VydmljZSBkcml2ZXJzIHRvCityZWdpc3Rlci91bnJlZ2lzdGVyIHdpdGggdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlci4KKworMi4gQ29weXJpZ2h0IDIwMDQgSW50ZWwgQ29ycG9yYXRpb24KKworMy4gV2hhdCBpcyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyCisKK0EgUENJIEV4cHJlc3MgUG9ydCBpcyBhIGxvZ2ljYWwgUENJLVBDSSBCcmlkZ2Ugc3RydWN0dXJlLiBUaGVyZQorYXJlIHR3byB0eXBlcyBvZiBQQ0kgRXhwcmVzcyBQb3J0OiB0aGUgUm9vdCBQb3J0IGFuZCB0aGUgU3dpdGNoCitQb3J0LiBUaGUgUm9vdCBQb3J0IG9yaWdpbmF0ZXMgYSBQQ0kgRXhwcmVzcyBsaW5rIGZyb20gYSBQQ0kgRXhwcmVzcworUm9vdCBDb21wbGV4IGFuZCB0aGUgU3dpdGNoIFBvcnQgY29ubmVjdHMgUENJIEV4cHJlc3MgbGlua3MgdG8KK2ludGVybmFsIGxvZ2ljYWwgUENJIGJ1c2VzLiBUaGUgU3dpdGNoIFBvcnQsIHdoaWNoIGhhcyBpdHMgc2Vjb25kYXJ5CitidXMgcmVwcmVzZW50aW5nIHRoZSBzd2l0Y2gncyBpbnRlcm5hbCByb3V0aW5nIGxvZ2ljLCBpcyBjYWxsZWQgdGhlCitzd2l0Y2gncyBVcHN0cmVhbSBQb3J0LiBUaGUgc3dpdGNoJ3MgRG93bnN0cmVhbSBQb3J0IGlzIGJyaWRnaW5nIGZyb20KK3N3aXRjaCdzIGludGVybmFsIHJvdXRpbmcgYnVzIHRvIGEgYnVzIHJlcHJlc2VudGluZyB0aGUgZG93bnN0cmVhbQorUENJIEV4cHJlc3MgbGluayBmcm9tIHRoZSBQQ0kgRXhwcmVzcyBTd2l0Y2guCisKK0EgUENJIEV4cHJlc3MgUG9ydCBjYW4gcHJvdmlkZSB1cCB0byBmb3VyIGRpc3RpbmN0IGZ1bmN0aW9ucywKK3JlZmVycmVkIHRvIGluIHRoaXMgZG9jdW1lbnQgYXMgc2VydmljZXMsIGRlcGVuZGluZyBvbiBpdHMgcG9ydCB0eXBlLgorUENJIEV4cHJlc3MgUG9ydCdzIHNlcnZpY2VzIGluY2x1ZGUgbmF0aXZlIGhvdHBsdWcgc3VwcG9ydCAoSFApLAorcG93ZXIgbWFuYWdlbWVudCBldmVudCBzdXBwb3J0IChQTUUpLCBhZHZhbmNlZCBlcnJvciByZXBvcnRpbmcKK3N1cHBvcnQgKEFFUiksIGFuZCB2aXJ0dWFsIGNoYW5uZWwgc3VwcG9ydCAoVkMpLiBUaGVzZSBzZXJ2aWNlcyBtYXkKK2JlIGhhbmRsZWQgYnkgYSBzaW5nbGUgY29tcGxleCBkcml2ZXIgb3IgYmUgaW5kaXZpZHVhbGx5IGRpc3RyaWJ1dGVkCithbmQgaGFuZGxlZCBieSBjb3JyZXNwb25kaW5nIHNlcnZpY2UgZHJpdmVycy4KKworNC4gV2h5IHVzZSB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyPworCitJbiBleGlzdGluZyBMaW51eCBrZXJuZWxzLCB0aGUgTGludXggRGV2aWNlIERyaXZlciBNb2RlbCBhbGxvd3MgYQorcGh5c2ljYWwgZGV2aWNlIHRvIGJlIGhhbmRsZWQgYnkgb25seSBhIHNpbmdsZSBkcml2ZXIuIFRoZSBQQ0kKK0V4cHJlc3MgUG9ydCBpcyBhIFBDSS1QQ0kgQnJpZGdlIGRldmljZSB3aXRoIG11bHRpcGxlIGRpc3RpbmN0CitzZXJ2aWNlcy4gVG8gbWFpbnRhaW4gYSBjbGVhbiBhbmQgc2ltcGxlIHNvbHV0aW9uIGVhY2ggc2VydmljZQorbWF5IGhhdmUgaXRzIG93biBzb2Z0d2FyZSBzZXJ2aWNlIGRyaXZlci4gSW4gdGhpcyBjYXNlIHNldmVyYWwKK3NlcnZpY2UgZHJpdmVycyB3aWxsIGNvbXBldGUgZm9yIGEgc2luZ2xlIFBDSS1QQ0kgQnJpZGdlIGRldmljZS4KK0ZvciBleGFtcGxlLCBpZiB0aGUgUENJIEV4cHJlc3MgUm9vdCBQb3J0IG5hdGl2ZSBob3RwbHVnIHNlcnZpY2UKK2RyaXZlciBpcyBsb2FkZWQgZmlyc3QsIGl0IGNsYWltcyBhIFBDSS1QQ0kgQnJpZGdlIFJvb3QgUG9ydC4gVGhlCitrZXJuZWwgdGhlcmVmb3JlIGRvZXMgbm90IGxvYWQgb3RoZXIgc2VydmljZSBkcml2ZXJzIGZvciB0aGF0IFJvb3QKK1BvcnQuIEluIG90aGVyIHdvcmRzLCBpdCBpcyBpbXBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgc2VydmljZQorZHJpdmVycyBsb2FkIGFuZCBydW4gb24gYSBQQ0ktUENJIEJyaWRnZSBkZXZpY2Ugc2ltdWx0YW5lb3VzbHkKK3VzaW5nIHRoZSBjdXJyZW50IGRyaXZlciBtb2RlbC4KKworVG8gZW5hYmxlIG11bHRpcGxlIHNlcnZpY2UgZHJpdmVycyBydW5uaW5nIHNpbXVsdGFuZW91c2x5IHJlcXVpcmVzCitoYXZpbmcgYSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIsIHdoaWNoIG1hbmFnZXMgYWxsIHBvcHVsYXRlZAorUENJIEV4cHJlc3MgUG9ydHMgYW5kIGRpc3RyaWJ1dGVzIGFsbCBwcm92aWRlZCBzZXJ2aWNlIHJlcXVlc3RzCit0byB0aGUgY29ycmVzcG9uZGluZyBzZXJ2aWNlIGRyaXZlcnMgYXMgcmVxdWlyZWQuIFNvbWUga2V5CithZHZhbnRhZ2VzIG9mIHVzaW5nIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgYXJlIGxpc3RlZCBiZWxvdzoKKworCS0gQWxsb3cgbXVsdGlwbGUgc2VydmljZSBkcml2ZXJzIHRvIHJ1biBzaW11bHRhbmVvdXNseSBvbgorCSAgYSBQQ0ktUENJIEJyaWRnZSBQb3J0IGRldmljZS4KKworCS0gQWxsb3cgc2VydmljZSBkcml2ZXJzIGltcGxlbWVudGVkIGluIGFuIGluZGVwZW5kZW50CisJICBzdGFnZWQgYXBwcm9hY2guCisKKwktIEFsbG93IG9uZSBzZXJ2aWNlIGRyaXZlciB0byBydW4gb24gbXVsdGlwbGUgUENJLVBDSSBCcmlkZ2UKKwkgIFBvcnQgZGV2aWNlcy4KKworCS0gTWFuYWdlIGFuZCBkaXN0cmlidXRlIHJlc291cmNlcyBvZiBhIFBDSS1QQ0kgQnJpZGdlIFBvcnQKKwkgIGRldmljZSB0byByZXF1ZXN0ZWQgc2VydmljZSBkcml2ZXJzLgorCis1LiBDb25maWd1cmluZyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyIHZzLiBTZXJ2aWNlIERyaXZlcnMKKworNS4xIEluY2x1ZGluZyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyIFN1cHBvcnQgaW50byB0aGUgS2VybmVsCisKK0luY2x1ZGluZyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIGRlcGVuZHMgb24gd2hldGhlciB0aGUgUENJCitFeHByZXNzIHN1cHBvcnQgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoZSBrZXJuZWwgd2lsbAorYXV0b21hdGljYWxseSBpbmNsdWRlIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgYXMgYSBrZXJuZWwKK2RyaXZlciB3aGVuIHRoZSBQQ0kgRXhwcmVzcyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4KKworNS4yIEVuYWJsaW5nIFNlcnZpY2UgRHJpdmVyIFN1cHBvcnQKKworUENJIGRldmljZSBkcml2ZXJzIGFyZSBpbXBsZW1lbnRlZCBiYXNlZCBvbiBMaW51eCBEZXZpY2UgRHJpdmVyIE1vZGVsLgorQWxsIHNlcnZpY2UgZHJpdmVycyBhcmUgUENJIGRldmljZSBkcml2ZXJzLiBBcyBkaXNjdXNzZWQgYWJvdmUsIGl0IGlzCitpbXBvc3NpYmxlIHRvIGxvYWQgYW55IHNlcnZpY2UgZHJpdmVyIG9uY2UgdGhlIGtlcm5lbCBoYXMgbG9hZGVkIHRoZQorUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyLiBUbyBtZWV0IHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIKK01vZGVsIHJlcXVpcmVzIHNvbWUgbWluaW1hbCBjaGFuZ2VzIG9uIGV4aXN0aW5nIHNlcnZpY2UgZHJpdmVycyB0aGF0CitpbXBvc2VzIG5vIGltcGFjdCBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZiBleGlzdGluZyBzZXJ2aWNlIGRyaXZlcnMuCisKK0Egc2VydmljZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gdXNlIHRoZSB0d28gQVBJcyBzaG93biBiZWxvdyB0bworcmVnaXN0ZXIgaXRzIHNlcnZpY2Ugd2l0aCB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIChzZWUKK3NlY3Rpb24gNS4yLjEgJiA1LjIuMikuIEl0IGlzIGltcG9ydGFudCB0aGF0IGEgc2VydmljZSBkcml2ZXIKK2luaXRpYWxpemVzIHRoZSBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgZGF0YSBzdHJ1Y3R1cmUsIGluY2x1ZGVkIGluCitoZWFkZXIgZmlsZSAvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oLCBiZWZvcmUgY2FsbGluZyB0aGVzZSBBUElzLgorRmFpbHVyZSB0byBkbyBzbyB3aWxsIHJlc3VsdCBhbiBpZGVudGl0eSBtaXNtYXRjaCwgd2hpY2ggcHJldmVudHMKK3RoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgZnJvbSBsb2FkaW5nIGEgc2VydmljZSBkcml2ZXIuCisKKzUuMi4xIHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyCisKK2ludCBwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlcihzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpuZXcpCisKK1RoaXMgQVBJIHJlcGxhY2VzIHRoZSBMaW51eCBEcml2ZXIgTW9kZWwncyBwY2lfbW9kdWxlX2luaXQgQVBJLiBBCitzZXJ2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGxzIHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyIGF0Cittb2R1bGUgaW5pdC4gTm90ZSB0aGF0IGFmdGVyIHNlcnZpY2UgZHJpdmVyIGJlaW5nIGxvYWRlZCwgY2FsbHMKK3N1Y2ggYXMgcGNpX2VuYWJsZV9kZXZpY2UoZGV2KSBhbmQgcGNpX3NldF9tYXN0ZXIoZGV2KSBhcmUgbm8gbG9uZ2VyCituZWNlc3Nhcnkgc2luY2UgdGhlc2UgY2FsbHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBQQ0kgUG9ydCBCdXMgZHJpdmVyLgorCis1LjIuMiBwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyCisKK3ZvaWQgcGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpuZXcpCisKK3BjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIgcmVwbGFjZXMgdGhlIExpbnV4IERyaXZlciBNb2RlbCdzCitwY2lfdW5yZWdpc3Rlcl9kcml2ZXIuIEl0J3MgYWx3YXlzIGNhbGxlZCBieSBzZXJ2aWNlIGRyaXZlciB3aGVuIGEKK21vZHVsZSBleGl0cy4KKworNS4yLjMgU2FtcGxlIENvZGUKKworQmVsb3cgaXMgc2FtcGxlIHNlcnZpY2UgZHJpdmVyIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgcG9ydCBzZXJ2aWNlCitkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUuCisKK3N0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgc2VydmljZV9pZFtdID0geyB7CisJLnZlbmRvciA9IFBDSV9BTllfSUQsCisJLmRldmljZSA9IFBDSV9BTllfSUQsCisJLnBvcnRfdHlwZSA9IFBDSUVfUkNfUE9SVCwKKwkuc2VydmljZV90eXBlID0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSLAorCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIHJvb3RfYWVyZHJ2ID0geworCS5uYW1lCQk9IChjaGFyICopZGV2aWNlX25hbWUsCisJLmlkX3RhYmxlCT0gJnNlcnZpY2VfaWRbMF0sCisKKwkucHJvYmUJCT0gYWVyZHJ2X2xvYWQsCisJLnJlbW92ZQkJPSBhZXJkcnZfdW5sb2FkLAorCisJLnN1c3BlbmQJPSBhZXJkcnZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFlcmRydl9yZXN1bWUsCit9OworCitCZWxvdyBpcyBhIHNhbXBsZSBjb2RlIGZvciByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nIGEgc2VydmljZQorZHJpdmVyLgorCitzdGF0aWMgaW50IF9faW5pdCBhZXJkcnZfc2VydmljZV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlyZXR2YWwgPSBwY2llX3BvcnRfc2VydmljZV9yZWdpc3Rlcigmcm9vdF9hZXJkcnYpOworCWlmICghcmV0dmFsKSB7CisJCS8qCisJCSAqIEZJWCBNRQorCQkgKi8KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFlcmRydl9zZXJ2aWNlX2V4aXQodm9pZCkKK3sKKwlwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyKCZyb290X2FlcmRydik7Cit9CisKK21vZHVsZV9pbml0KGFlcmRydl9zZXJ2aWNlX2luaXQpOworbW9kdWxlX2V4aXQoYWVyZHJ2X3NlcnZpY2VfZXhpdCk7CisKKzYuIFBvc3NpYmxlIFJlc291cmNlIENvbmZsaWN0cworCitTaW5jZSBhbGwgc2VydmljZSBkcml2ZXJzIG9mIGEgUENJLVBDSSBCcmlkZ2UgUG9ydCBkZXZpY2UgYXJlCithbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXNseSwgYmVsb3cgbGlzdHMgYSBmZXcgb2YgcG9zc2libGUgcmVzb3VyY2UKK2NvbmZsaWN0cyB3aXRoIHByb3Bvc2VkIHNvbHV0aW9ucy4KKworNi4xIE1TSSBWZWN0b3IgUmVzb3VyY2UKKworVGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBlbmFibGVzIGEgZGV2aWNlIHNvZnR3YXJlIGRyaXZlciB0byBjYWxsCitwY2lfZW5hYmxlX21zaSB0byByZXF1ZXN0IE1TSSBiYXNlZCBpbnRlcnJ1cHRzLiBPbmNlIE1TSSBpbnRlcnJ1cHRzCithcmUgZW5hYmxlZCBvbiBhIGRldmljZSwgaXQgc3RheXMgaW4gdGhpcyBtb2RlIHVudGlsIGEgZGV2aWNlIGRyaXZlcgorY2FsbHMgcGNpX2Rpc2FibGVfbXNpIHRvIGRpc2FibGUgTVNJIGludGVycnVwdHMgYW5kIHJldmVydCBiYWNrIHRvCitJTlR4IGVtdWxhdGlvbiBtb2RlLiBTaW5jZSBzZXJ2aWNlIGRyaXZlcnMgb2YgdGhlIHNhbWUgUENJLVBDSSBCcmlkZ2UKK3BvcnQgc2hhcmUgdGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNlLCBpZiBhbiBpbmRpdmlkdWFsIHNlcnZpY2UgZHJpdmVyCitjYWxscyBwY2lfZW5hYmxlX21zaS9wY2lfZGlzYWJsZV9tc2kgaXQgbWF5IHJlc3VsdCB1bnByZWRpY3RhYmxlCitiZWhhdmlvci4gRm9yIGV4YW1wbGUsIHR3byBzZXJ2aWNlIGRyaXZlcnMgcnVuIHNpbXVsdGFuZW91c2x5IG9uIHRoZQorc2FtZSBwaHlzaWNhbCBSb290IFBvcnQuIEJvdGggc2VydmljZSBkcml2ZXJzIGNhbGwgcGNpX2VuYWJsZV9tc2kgdG8KK3JlcXVlc3QgTVNJIGJhc2VkIGludGVycnVwdHMuIEEgc2VydmljZSBkcml2ZXIgbWF5IG5vdCBrbm93IHdoZXRoZXIKK2FueSBvdGhlciBzZXJ2aWNlIGRyaXZlcnMgaGF2ZSBydW4gb24gdGhpcyBSb290IFBvcnQuIElmIGVpdGhlciBvbmUKK29mIHRoZW0gY2FsbHMgcGNpX2Rpc2FibGVfbXNpLCBpdCBwdXRzIHRoZSBvdGhlciBzZXJ2aWNlIGRyaXZlcgoraW4gYSB3cm9uZyBpbnRlcnJ1cHQgbW9kZS4KKworVG8gYXZvaWQgdGhpcyBzaXR1YXRpb24gYWxsIHNlcnZpY2UgZHJpdmVycyBhcmUgbm90IHBlcm1pdHRlZCB0bworc3dpdGNoIGludGVycnVwdCBtb2RlIG9uIGl0cyBkZXZpY2UuIFRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIKK2lzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZXJydXB0IG1vZGUgYW5kIHRoaXMgc2hvdWxkIGJlCit0cmFuc3BhcmVudCB0byBzZXJ2aWNlIGRyaXZlcnMuIFNlcnZpY2UgZHJpdmVycyBuZWVkIHRvIGtub3cgb25seQordGhlIHZlY3RvciBJUlEgYXNzaWduZWQgdG8gdGhlIGZpZWxkIGlycSBvZiBzdHJ1Y3QgcGNpZV9kZXZpY2UsIHdoaWNoCitpcyBwYXNzZWQgaW4gd2hlbiB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIHByb2JlcyBlYWNoIHNlcnZpY2UKK2RyaXZlci4gU2VydmljZSBkcml2ZXJzIHNob3VsZCB1c2UgKHN0cnVjdCBwY2llX2RldmljZSopZGV2LT5pcnEgdG8KK2NhbGwgcmVxdWVzdF9pcnEvZnJlZV9pcnEuIEluIGFkZGl0aW9uLCB0aGUgaW50ZXJydXB0IG1vZGUgaXMgc3RvcmVkCitpbiB0aGUgZmllbGQgaW50ZXJydXB0X21vZGUgb2Ygc3RydWN0IHBjaWVfZGV2aWNlLgorCis2LjIgTVNJLVggVmVjdG9yIFJlc291cmNlcworCitTaW1pbGFyIHRvIHRoZSBNU0kgYSBkZXZpY2UgZHJpdmVyIGZvciBhbiBNU0ktWCBjYXBhYmxlIGRldmljZSBjYW4KK2NhbGwgcGNpX2VuYWJsZV9tc2l4IHRvIHJlcXVlc3QgTVNJLVggaW50ZXJydXB0cy4gQWxsIHNlcnZpY2UgZHJpdmVycworYXJlIG5vdCBwZXJtaXR0ZWQgdG8gc3dpdGNoIGludGVycnVwdCBtb2RlIG9uIGl0cyBkZXZpY2UuIFRoZSBQQ0kKK0V4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZXJydXB0Cittb2RlIGFuZCB0aGlzIHNob3VsZCBiZSB0cmFuc3BhcmVudCB0byBzZXJ2aWNlIGRyaXZlcnMuIEFueSBhdHRlbXB0CitieSBzZXJ2aWNlIGRyaXZlciB0byBjYWxsIHBjaV9lbmFibGVfbXNpeC9wY2lfZGlzYWJsZV9tc2l4IG1heQorcmVzdWx0IHVucHJlZGljdGFibGUgYmVoYXZpb3IuIFNlcnZpY2UgZHJpdmVycyBzaG91bGQgdXNlCisoc3RydWN0IHBjaWVfZGV2aWNlKilkZXYtPmlycSBhbmQgY2FsbCByZXF1ZXN0X2lycS9mcmVlX2lycS4KKworNi4zIFBDSSBNZW1vcnkvSU8gTWFwcGVkIFJlZ2lvbnMKKworU2VydmljZSBkcml2ZXJzIGZvciBQQ0kgRXhwcmVzcyBQb3dlciBNYW5hZ2VtZW50IChQTUUpLCBBZHZhbmNlZAorRXJyb3IgUmVwb3J0aW5nIChBRVIpLCBIb3QtUGx1ZyAoSFApIGFuZCBWaXJ0dWFsIENoYW5uZWwgKFZDKSBhY2Nlc3MKK1BDSSBjb25maWd1cmF0aW9uIHNwYWNlIG9uIHRoZSBQQ0kgRXhwcmVzcyBwb3J0LiBJbiBhbGwgY2FzZXMgdGhlCityZWdpc3RlcnMgYWNjZXNzZWQgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIFRoaXMgcGF0Y2ggYXNzdW1lcwordGhhdCBhbGwgc2VydmljZSBkcml2ZXJzIHdpbGwgYmUgd2VsbCBiZWhhdmVkIGFuZCBub3Qgb3ZlcndyaXRlCitvdGhlciBzZXJ2aWNlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKzYuNCBQQ0kgQ29uZmlnIFJlZ2lzdGVycworCitFYWNoIHNlcnZpY2UgZHJpdmVyIHJ1bnMgaXRzIFBDSSBjb25maWcgb3BlcmF0aW9ucyBvbiBpdHMgb3duCitjYXBhYmlsaXR5IHN0cnVjdHVyZSBleGNlcHQgdGhlIFBDSSBFeHByZXNzIGNhcGFiaWxpdHkgc3RydWN0dXJlLCBpbgord2hpY2ggUm9vdCBDb250cm9sIHJlZ2lzdGVyIGFuZCBEZXZpY2UgQ29udHJvbCByZWdpc3RlciBhcmUgc2hhcmVkCitiZXR3ZWVuIFBNRSBhbmQgQUVSLiBUaGlzIHBhdGNoIGFzc3VtZXMgdGhhdCBhbGwgc2VydmljZSBkcml2ZXJzCit3aWxsIGJlIHdlbGwgYmVoYXZlZCBhbmQgbm90IG92ZXJ3cml0ZSBvdGhlciBzZXJ2aWNlIGRyaXZlcidzCitjb25maWd1cmF0aW9uIHNldHRpbmdzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY2ktZXJyb3ItcmVjb3ZlcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLWVycm9yLXJlY292ZXJ5LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wY2ktZXJyb3ItcmVjb3ZlcnkudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL1BDSS9wY2ktZXJyb3ItcmVjb3ZlcnkudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDRkYzYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnR4dApAQCAtMCwwICsxLDY0NiBAQAorCisJCQlIb3cgVG8gV3JpdGUgTGludXggUENJIERyaXZlcnMKKworCQlieSBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4gb24gMDctRmViLTIwMDAKKwl1cGRhdGVkIGJ5IEdyYW50IEdydW5kbGVyIDxncnVuZGxlckBwYXJpc2MtbGludXgub3JnPiBvbiAyMy1EZWMtMjAwNgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIHdvcmxkIG9mIFBDSSBpcyB2YXN0IGFuZCBmdWxsIG9mIChtb3N0bHkgdW5wbGVhc2FudCkgc3VycHJpc2VzLgorU2luY2UgZWFjaCBDUFUgYXJjaGl0ZWN0dXJlIGltcGxlbWVudHMgZGlmZmVyZW50IGNoaXAtc2V0cyBhbmQgUENJIGRldmljZXMKK2hhdmUgZGlmZmVyZW50IHJlcXVpcmVtZW50cyAoZXJtLCAiZmVhdHVyZXMiKSwgdGhlIHJlc3VsdCBpcyB0aGUgUENJIHN1cHBvcnQKK2luIHRoZSBMaW51eCBrZXJuZWwgaXMgbm90IGFzIHRyaXZpYWwgYXMgb25lIHdvdWxkIHdpc2guIFRoaXMgc2hvcnQgcGFwZXIKK3RyaWVzIHRvIGludHJvZHVjZSBhbGwgcG90ZW50aWFsIGRyaXZlciBhdXRob3JzIHRvIExpbnV4IEFQSXMgZm9yCitQQ0kgZGV2aWNlIGRyaXZlcnMuCisKK0EgbW9yZSBjb21wbGV0ZSByZXNvdXJjZSBpcyB0aGUgdGhpcmQgZWRpdGlvbiBvZiAiTGludXggRGV2aWNlIERyaXZlcnMiCitieSBKb25hdGhhbiBDb3JiZXQsIEFsZXNzYW5kcm8gUnViaW5pLCBhbmQgR3JlZyBLcm9haC1IYXJ0bWFuLgorTEREMyBpcyBhdmFpbGFibGUgZm9yIGZyZWUgKHVuZGVyIENyZWF0aXZlIENvbW1vbnMgTGljZW5zZSkgZnJvbToKKworCWh0dHA6Ly9sd24ubmV0L0tlcm5lbC9MREQzLworCitIb3dldmVyLCBrZWVwIGluIG1pbmQgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBzdWJqZWN0IHRvICJiaXQgcm90Ii4KK1JlZmVyIHRvIHRoZSBzb3VyY2UgY29kZSBpZiB0aGluZ3MgYXJlIG5vdCB3b3JraW5nIGFzIGRlc2NyaWJlZCBoZXJlLgorCitQbGVhc2Ugc2VuZCBxdWVzdGlvbnMvY29tbWVudHMvcGF0Y2hlcyBhYm91dCBMaW51eCBQQ0kgQVBJIHRvIHRoZQorIkxpbnV4IFBDSSIgPGxpbnV4LXBjaUBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+IG1haWxpbmcgbGlzdC4KKworCisKKzAuIFN0cnVjdHVyZSBvZiBQQ0kgZHJpdmVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitQQ0kgZHJpdmVycyAiZGlzY292ZXIiIFBDSSBkZXZpY2VzIGluIGEgc3lzdGVtIHZpYSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCkuCitBY3R1YWxseSwgaXQncyB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gV2hlbiB0aGUgUENJIGdlbmVyaWMgY29kZSBkaXNjb3ZlcnMKK2EgbmV3IGRldmljZSwgdGhlIGRyaXZlciB3aXRoIGEgbWF0Y2hpbmcgImRlc2NyaXB0aW9uIiB3aWxsIGJlIG5vdGlmaWVkLgorRGV0YWlscyBvbiB0aGlzIGJlbG93LgorCitwY2lfcmVnaXN0ZXJfZHJpdmVyKCkgbGVhdmVzIG1vc3Qgb2YgdGhlIHByb2JpbmcgZm9yIGRldmljZXMgdG8KK3RoZSBQQ0kgbGF5ZXIgYW5kIHN1cHBvcnRzIG9ubGluZSBpbnNlcnRpb24vcmVtb3ZhbCBvZiBkZXZpY2VzIFt0aHVzCitzdXBwb3J0aW5nIGhvdC1wbHVnZ2FibGUgUENJLCBDYXJkQnVzLCBhbmQgRXhwcmVzcy1DYXJkIGluIGEgc2luZ2xlIGRyaXZlcl0uCitwY2lfcmVnaXN0ZXJfZHJpdmVyKCkgY2FsbCByZXF1aXJlcyBwYXNzaW5nIGluIGEgdGFibGUgb2YgZnVuY3Rpb24KK3BvaW50ZXJzIGFuZCB0aHVzIGRpY3RhdGVzIHRoZSBoaWdoIGxldmVsIHN0cnVjdHVyZSBvZiBhIGRyaXZlci4KKworT25jZSB0aGUgZHJpdmVyIGtub3dzIGFib3V0IGEgUENJIGRldmljZSBhbmQgdGFrZXMgb3duZXJzaGlwLCB0aGUKK2RyaXZlciBnZW5lcmFsbHkgbmVlZHMgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIGluaXRpYWxpemF0aW9uOgorCisJRW5hYmxlIHRoZSBkZXZpY2UKKwlSZXF1ZXN0IE1NSU8vSU9QIHJlc291cmNlcworCVNldCB0aGUgRE1BIG1hc2sgc2l6ZSAoZm9yIGJvdGggY29oZXJlbnQgYW5kIHN0cmVhbWluZyBETUEpCisJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgc2hhcmVkIGNvbnRyb2wgZGF0YSAocGNpX2FsbG9jYXRlX2NvaGVyZW50KCkpCisJQWNjZXNzIGRldmljZSBjb25maWd1cmF0aW9uIHNwYWNlIChpZiBuZWVkZWQpCisJUmVnaXN0ZXIgSVJRIGhhbmRsZXIgKHJlcXVlc3RfaXJxKCkpCisJSW5pdGlhbGl6ZSBub24tUENJIChpLmUuIExBTi9TQ1NJL2V0YyBwYXJ0cyBvZiB0aGUgY2hpcCkKKwlFbmFibGUgRE1BL3Byb2Nlc3NpbmcgZW5naW5lcworCitXaGVuIGRvbmUgdXNpbmcgdGhlIGRldmljZSwgYW5kIHBlcmhhcHMgdGhlIG1vZHVsZSBuZWVkcyB0byBiZSB1bmxvYWRlZCwKK3RoZSBkcml2ZXIgbmVlZHMgdG8gdGFrZSB0aGUgZm9sbG93IHN0ZXBzOgorCURpc2FibGUgdGhlIGRldmljZSBmcm9tIGdlbmVyYXRpbmcgSVJRcworCVJlbGVhc2UgdGhlIElSUSAoZnJlZV9pcnEoKSkKKwlTdG9wIGFsbCBETUEgYWN0aXZpdHkKKwlSZWxlYXNlIERNQSBidWZmZXJzIChib3RoIHN0cmVhbWluZyBhbmQgY29oZXJlbnQpCisJVW5yZWdpc3RlciBmcm9tIG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gc2NzaSBvciBuZXRkZXYpCisJUmVsZWFzZSBNTUlPL0lPUCByZXNvdXJjZXMKKwlEaXNhYmxlIHRoZSBkZXZpY2UKKworTW9zdCBvZiB0aGVzZSB0b3BpY3MgYXJlIGNvdmVyZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KK0ZvciB0aGUgcmVzdCBsb29rIGF0IExERDMgb3IgPGxpbnV4L3BjaS5oPiAuCisKK0lmIHRoZSBQQ0kgc3Vic3lzdGVtIGlzIG5vdCBjb25maWd1cmVkIChDT05GSUdfUENJIGlzIG5vdCBzZXQpLCBtb3N0IG9mCit0aGUgUENJIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cgYXJlIGRlZmluZWQgYXMgaW5saW5lIGZ1bmN0aW9ucyBlaXRoZXIKK2NvbXBsZXRlbHkgZW1wdHkgb3IganVzdCByZXR1cm5pbmcgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMgdG8gYXZvaWQKK2xvdHMgb2YgaWZkZWZzIGluIHRoZSBkcml2ZXJzLgorCisKKworMS4gcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGNhbGwKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1BDSSBkZXZpY2UgZHJpdmVycyBjYWxsIHBjaV9yZWdpc3Rlcl9kcml2ZXIoKSBkdXJpbmcgdGhlaXIKK2luaXRpYWxpemF0aW9uIHdpdGggYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGRyaXZlcgorKHN0cnVjdCBwY2lfZHJpdmVyKToKKworCWZpZWxkIG5hbWUJRGVzY3JpcHRpb24KKwktLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWlkX3RhYmxlCVBvaW50ZXIgdG8gdGFibGUgb2YgZGV2aWNlIElEJ3MgdGhlIGRyaXZlciBpcworCQkJaW50ZXJlc3RlZCBpbi4gIE1vc3QgZHJpdmVycyBzaG91bGQgZXhwb3J0IHRoaXMKKwkJCXRhYmxlIHVzaW5nIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLC4uLikuCisKKwlwcm9iZQkJVGhpcyBwcm9iaW5nIGZ1bmN0aW9uIGdldHMgY2FsbGVkIChkdXJpbmcgZXhlY3V0aW9uCisJCQlvZiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCkgZm9yIGFscmVhZHkgZXhpc3RpbmcKKwkJCWRldmljZXMgb3IgbGF0ZXIgaWYgYSBuZXcgZGV2aWNlIGdldHMgaW5zZXJ0ZWQpIGZvcgorCQkJYWxsIFBDSSBkZXZpY2VzIHdoaWNoIG1hdGNoIHRoZSBJRCB0YWJsZSBhbmQgYXJlIG5vdAorCQkJIm93bmVkIiBieSB0aGUgb3RoZXIgZHJpdmVycyB5ZXQuIFRoaXMgZnVuY3Rpb24gZ2V0cworCQkJcGFzc2VkIGEgInN0cnVjdCBwY2lfZGV2ICoiIGZvciBlYWNoIGRldmljZSB3aG9zZQorCQkJZW50cnkgaW4gdGhlIElEIHRhYmxlIG1hdGNoZXMgdGhlIGRldmljZS4gVGhlIHByb2JlCisJCQlmdW5jdGlvbiByZXR1cm5zIHplcm8gd2hlbiB0aGUgZHJpdmVyIGNob29zZXMgdG8KKwkJCXRha2UgIm93bmVyc2hpcCIgb2YgdGhlIGRldmljZSBvciBhbiBlcnJvciBjb2RlCisJCQkobmVnYXRpdmUgbnVtYmVyKSBvdGhlcndpc2UuCisJCQlUaGUgcHJvYmUgZnVuY3Rpb24gYWx3YXlzIGdldHMgY2FsbGVkIGZyb20gcHJvY2VzcworCQkJY29udGV4dCwgc28gaXQgY2FuIHNsZWVwLgorCisJcmVtb3ZlCQlUaGUgcmVtb3ZlKCkgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBkZXZpY2UKKwkJCWJlaW5nIGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIgaXMgcmVtb3ZlZCAoZWl0aGVyIGR1cmluZworCQkJZGVyZWdpc3RyYXRpb24gb2YgdGhlIGRyaXZlciBvciB3aGVuIGl0J3MgbWFudWFsbHkKKwkJCXB1bGxlZCBvdXQgb2YgYSBob3QtcGx1Z2dhYmxlIHNsb3QpLgorCQkJVGhlIHJlbW92ZSBmdW5jdGlvbiBhbHdheXMgZ2V0cyBjYWxsZWQgZnJvbSBwcm9jZXNzCisJCQljb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuCisKKwlzdXNwZW5kCQlQdXQgZGV2aWNlIGludG8gbG93IHBvd2VyIHN0YXRlLgorCXN1c3BlbmRfbGF0ZQlQdXQgZGV2aWNlIGludG8gbG93IHBvd2VyIHN0YXRlLgorCisJcmVzdW1lX2Vhcmx5CVdha2UgZGV2aWNlIGZyb20gbG93IHBvd2VyIHN0YXRlLgorCXJlc3VtZQkJV2FrZSBkZXZpY2UgZnJvbSBsb3cgcG93ZXIgc3RhdGUuCisKKwkJKFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0IGZvciBkZXNjcmlwdGlvbnMKKwkJb2YgUENJIFBvd2VyIE1hbmFnZW1lbnQgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9ucy4pCisKKwlzaHV0ZG93bglIb29rIGludG8gcmVib290X25vdGlmaWVyX2xpc3QgKGtlcm5lbC9zeXMuYykuCisJCQlJbnRlbmRlZCB0byBzdG9wIGFueSBpZGxpbmcgRE1BIG9wZXJhdGlvbnMuCisJCQlVc2VmdWwgZm9yIGVuYWJsaW5nIHdha2Utb24tbGFuIChOSUMpIG9yIGNoYW5naW5nCisJCQl0aGUgcG93ZXIgc3RhdGUgb2YgYSBkZXZpY2UgYmVmb3JlIHJlYm9vdC4KKwkJCWUuZy4gZHJpdmVycy9uZXQvZTEwMC5jLgorCisJZXJyX2hhbmRsZXIJU2VlIERvY3VtZW50YXRpb24vUENJL3BjaS1lcnJvci1yZWNvdmVyeS50eHQKKworCitUaGUgSUQgdGFibGUgaXMgYW4gYXJyYXkgb2Ygc3RydWN0IHBjaV9kZXZpY2VfaWQgZW50cmllcyBlbmRpbmcgd2l0aCBhbgorYWxsLXplcm8gZW50cnk7IHVzZSBvZiB0aGUgbWFjcm8gREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUgaXMgdGhlIHByZWZlcnJlZAorbWV0aG9kIG9mIGRlY2xhcmluZyB0aGUgdGFibGUuICBFYWNoIGVudHJ5IGNvbnNpc3RzIG9mOgorCisJdmVuZG9yLGRldmljZQlWZW5kb3IgYW5kIGRldmljZSBJRCB0byBtYXRjaCAob3IgUENJX0FOWV9JRCkKKworCXN1YnZlbmRvciwJU3Vic3lzdGVtIHZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQorCXN1YmRldmljZSwKKworCWNsYXNzCQlEZXZpY2UgY2xhc3MsIHN1YmNsYXNzLCBhbmQgImludGVyZmFjZSIgdG8gbWF0Y2guCisJCQlTZWUgQXBwZW5kaXggRCBvZiB0aGUgUENJIExvY2FsIEJ1cyBTcGVjIG9yCisJCQlpbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBmb3IgYSBmdWxsIGxpc3Qgb2YgY2xhc3Nlcy4KKwkJCU1vc3QgZHJpdmVycyBkbyBub3QgbmVlZCB0byBzcGVjaWZ5IGNsYXNzL2NsYXNzX21hc2sKKwkJCWFzIHZlbmRvci9kZXZpY2UgaXMgbm9ybWFsbHkgc3VmZmljaWVudC4KKworCWNsYXNzX21hc2sJbGltaXQgd2hpY2ggc3ViLWZpZWxkcyBvZiB0aGUgY2xhc3MgZmllbGQgYXJlIGNvbXBhcmVkLgorCQkJU2VlIGRyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi8gZm9yIGV4YW1wbGUgb2YgdXNhZ2UuCisKKwlkcml2ZXJfZGF0YQlEYXRhIHByaXZhdGUgdG8gdGhlIGRyaXZlci4KKwkJCU1vc3QgZHJpdmVycyBkb24ndCBuZWVkIHRvIHVzZSBkcml2ZXJfZGF0YSBmaWVsZC4KKwkJCUJlc3QgcHJhY3RpY2UgaXMgdG8gdXNlIGRyaXZlcl9kYXRhIGFzIGFuIGluZGV4CisJCQlpbnRvIGEgc3RhdGljIGxpc3Qgb2YgZXF1aXZhbGVudCBkZXZpY2UgdHlwZXMsCisJCQlpbnN0ZWFkIG9mIHVzaW5nIGl0IGFzIGEgcG9pbnRlci4KKworCitNb3N0IGRyaXZlcnMgb25seSBuZWVkIFBDSV9ERVZJQ0UoKSBvciBQQ0lfREVWSUNFX0NMQVNTKCkgdG8gc2V0IHVwCithIHBjaV9kZXZpY2VfaWQgdGFibGUuCisKK05ldyBQQ0kgSURzIG1heSBiZSBhZGRlZCB0byBhIGRldmljZSBkcml2ZXIgcGNpX2lkcyB0YWJsZSBhdCBydW50aW1lCithcyBzaG93biBiZWxvdzoKKworZWNobyAidmVuZG9yIGRldmljZSBzdWJ2ZW5kb3Igc3ViZGV2aWNlIGNsYXNzIGNsYXNzX21hc2sgZHJpdmVyX2RhdGEiID4gXAorL3N5cy9idXMvcGNpL2RyaXZlcnMve2RyaXZlcn0vbmV3X2lkCisKK0FsbCBmaWVsZHMgYXJlIHBhc3NlZCBpbiBhcyBoZXhhZGVjaW1hbCB2YWx1ZXMgKG5vIGxlYWRpbmcgMHgpLgorVGhlIHZlbmRvciBhbmQgZGV2aWNlIGZpZWxkcyBhcmUgbWFuZGF0b3J5LCB0aGUgb3RoZXJzIGFyZSBvcHRpb25hbC4gVXNlcnMKK25lZWQgcGFzcyBvbmx5IGFzIG1hbnkgb3B0aW9uYWwgZmllbGRzIGFzIG5lY2Vzc2FyeToKKwlvIHN1YnZlbmRvciBhbmQgc3ViZGV2aWNlIGZpZWxkcyBkZWZhdWx0IHRvIFBDSV9BTllfSUQgKEZGRkZGRkZGKQorCW8gY2xhc3MgYW5kIGNsYXNzbWFzayBmaWVsZHMgZGVmYXVsdCB0byAwCisJbyBkcml2ZXJfZGF0YSBkZWZhdWx0cyB0byAwVUwuCisKK09uY2UgYWRkZWQsIHRoZSBkcml2ZXIgcHJvYmUgcm91dGluZSB3aWxsIGJlIGludm9rZWQgZm9yIGFueSB1bmNsYWltZWQKK1BDSSBkZXZpY2VzIGxpc3RlZCBpbiBpdHMgKG5ld2x5IHVwZGF0ZWQpIHBjaV9pZHMgbGlzdC4KKworV2hlbiB0aGUgZHJpdmVyIGV4aXRzLCBpdCBqdXN0IGNhbGxzIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigpIGFuZCB0aGUgUENJIGxheWVyCithdXRvbWF0aWNhbGx5IGNhbGxzIHRoZSByZW1vdmUgaG9vayBmb3IgYWxsIGRldmljZXMgaGFuZGxlZCBieSB0aGUgZHJpdmVyLgorCisKKzEuMSAiQXR0cmlidXRlcyIgZm9yIGRyaXZlciBmdW5jdGlvbnMvZGF0YQorCitQbGVhc2UgbWFyayB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZnVuY3Rpb25zIHdoZXJlIGFwcHJvcHJpYXRlCisodGhlIGNvcnJlc3BvbmRpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIGluIDxsaW51eC9pbml0Lmg+KToKKworCV9faW5pdAkJSW5pdGlhbGl6YXRpb24gY29kZS4gVGhyb3duIGF3YXkgYWZ0ZXIgdGhlIGRyaXZlcgorCQkJaW5pdGlhbGl6ZXMuCisJX19leGl0CQlFeGl0IGNvZGUuIElnbm9yZWQgZm9yIG5vbi1tb2R1bGFyIGRyaXZlcnMuCisKKworCV9fZGV2aW5pdAlEZXZpY2UgaW5pdGlhbGl6YXRpb24gY29kZS4KKwkJCUlkZW50aWNhbCB0byBfX2luaXQgaWYgdGhlIGtlcm5lbCBpcyBub3QgY29tcGlsZWQKKwkJCXdpdGggQ09ORklHX0hPVFBMVUcsIG5vcm1hbCBmdW5jdGlvbiBvdGhlcndpc2UuCisJX19kZXZleGl0CVRoZSBzYW1lIGZvciBfX2V4aXQuCisKK1RpcHMgb24gd2hlbi93aGVyZSB0byB1c2UgdGhlIGFib3ZlIGF0dHJpYnV0ZXM6CisJbyBUaGUgbW9kdWxlX2luaXQoKS9tb2R1bGVfZXhpdCgpIGZ1bmN0aW9ucyAoYW5kIGFsbAorCSAgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGNhbGxlZCBfb25seV8gZnJvbSB0aGVzZSkKKwkgIHNob3VsZCBiZSBtYXJrZWQgX19pbml0L19fZXhpdC4KKworCW8gRG8gbm90IG1hcmsgdGhlIHN0cnVjdCBwY2lfZHJpdmVyLgorCisJbyBUaGUgSUQgdGFibGUgYXJyYXkgc2hvdWxkIGJlIG1hcmtlZCBfX2RldmluaXRjb25zdDsgdGhpcyBpcyBkb25lCisJICBhdXRvbWF0aWNhbGx5IGlmIHRoZSB0YWJsZSBpcyBkZWNsYXJlZCB3aXRoIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKCkuCisKKwlvIFRoZSBwcm9iZSgpIGFuZCByZW1vdmUoKSBmdW5jdGlvbnMgc2hvdWxkIGJlIG1hcmtlZCBfX2RldmluaXQKKwkgIGFuZCBfX2RldmV4aXQgcmVzcGVjdGl2ZWx5LiAgQWxsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworCSAgZXhjbHVzaXZlbHkgY2FsbGVkIGJ5IHRoZSBwcm9iZSgpIHJvdXRpbmUsIGNhbiBiZSBtYXJrZWQgX19kZXZpbml0LgorCSAgRGl0dG8gZm9yIHJlbW92ZSgpIGFuZCBfX2RldmV4aXQuCisKKwlvIElmIG15ZHJpdmVyX3JlbW92ZSgpIGlzIG1hcmtlZCB3aXRoIF9fZGV2ZXhpdCgpLCB0aGVuIGFsbCBhZGRyZXNzCisJICByZWZlcmVuY2VzIHRvIG15ZHJpdmVyX3JlbW92ZSBtdXN0IHVzZSBfX2RldmV4aXRfcChteWRyaXZlcl9yZW1vdmUpCisJICAoaW4gdGhlIHN0cnVjdCBwY2lfZHJpdmVyIGRlY2xhcmF0aW9uIGZvciBleGFtcGxlKS4KKwkgIF9fZGV2ZXhpdF9wKCkgd2lsbCBnZW5lcmF0ZSB0aGUgZnVuY3Rpb24gbmFtZSBfb3JfIE5VTEwgaWYgdGhlCisJICBmdW5jdGlvbiB3aWxsIGJlIGRpc2NhcmRlZC4gIEZvciBhbiBleGFtcGxlLCBzZWUgZHJpdmVycy9uZXQvdGczLmMuCisKKwlvIERvIE5PVCBtYXJrIGEgZnVuY3Rpb24gaWYgeW91IGFyZSBub3Qgc3VyZSB3aGljaCBtYXJrIHRvIHVzZS4KKwkgIEJldHRlciB0byBub3QgbWFyayB0aGUgZnVuY3Rpb24gdGhhbiBtYXJrIHRoZSBmdW5jdGlvbiB3cm9uZy4KKworCisKKzIuIEhvdyB0byBmaW5kIFBDSSBkZXZpY2VzIG1hbnVhbGx5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitQQ0kgZHJpdmVycyBzaG91bGQgaGF2ZSBhIHJlYWxseSBnb29kIHJlYXNvbiBmb3Igbm90IHVzaW5nIHRoZQorcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGludGVyZmFjZSB0byBzZWFyY2ggZm9yIFBDSSBkZXZpY2VzLgorVGhlIG1haW4gcmVhc29uIFBDSSBkZXZpY2VzIGFyZSBjb250cm9sbGVkIGJ5IG11bHRpcGxlIGRyaXZlcnMKK2lzIGJlY2F1c2Ugb25lIFBDSSBkZXZpY2UgaW1wbGVtZW50cyBzZXZlcmFsIGRpZmZlcmVudCBIVyBzZXJ2aWNlcy4KK0UuZy4gY29tYmluZWQgc2VyaWFsL3BhcmFsbGVsIHBvcnQvZmxvcHB5IGNvbnRyb2xsZXIuCisKK0EgbWFudWFsIHNlYXJjaCBtYXkgYmUgcGVyZm9ybWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29uc3RydWN0czoKKworU2VhcmNoaW5nIGJ5IHZlbmRvciBhbmQgZGV2aWNlIElEOgorCisJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CisJd2hpbGUgKGRldiA9IHBjaV9nZXRfZGV2aWNlKFZFTkRPUl9JRCwgREVWSUNFX0lELCBkZXYpKQorCQljb25maWd1cmVfZGV2aWNlKGRldik7CisKK1NlYXJjaGluZyBieSBjbGFzcyBJRCAoaXRlcmF0ZSBpbiBhIHNpbWlsYXIgd2F5KToKKworCXBjaV9nZXRfY2xhc3MoQ0xBU1NfSUQsIGRldikKKworU2VhcmNoaW5nIGJ5IGJvdGggdmVuZG9yL2RldmljZSBhbmQgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgSUQ6CisKKwlwY2lfZ2V0X3N1YnN5cyhWRU5ET1JfSUQsREVWSUNFX0lELCBTVUJTWVNfVkVORE9SX0lELCBTVUJTWVNfREVWSUNFX0lELCBkZXYpLgorCitZb3UgY2FuIHVzZSB0aGUgY29uc3RhbnQgUENJX0FOWV9JRCBhcyBhIHdpbGRjYXJkIHJlcGxhY2VtZW50IGZvcgorVkVORE9SX0lEIG9yIERFVklDRV9JRC4gIFRoaXMgYWxsb3dzIHNlYXJjaGluZyBmb3IgYW55IGRldmljZSBmcm9tIGEKK3NwZWNpZmljIHZlbmRvciwgZm9yIGV4YW1wbGUuCisKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgaG90cGx1Zy1zYWZlLiBUaGV5IGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9uCit0aGUgcGNpX2RldiB0aGF0IHRoZXkgcmV0dXJuLiBZb3UgbXVzdCBldmVudHVhbGx5IChwb3NzaWJseSBhdCBtb2R1bGUgdW5sb2FkKQorZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlc2UgZGV2aWNlcyBieSBjYWxsaW5nIHBjaV9kZXZfcHV0KCkuCisKKworCiszLiBEZXZpY2UgSW5pdGlhbGl6YXRpb24gU3RlcHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBcyBub3RlZCBpbiB0aGUgaW50cm9kdWN0aW9uLCBtb3N0IFBDSSBkcml2ZXJzIG5lZWQgdGhlIGZvbGxvd2luZyBzdGVwcworZm9yIGRldmljZSBpbml0aWFsaXphdGlvbjoKKworCUVuYWJsZSB0aGUgZGV2aWNlCisJUmVxdWVzdCBNTUlPL0lPUCByZXNvdXJjZXMKKwlTZXQgdGhlIERNQSBtYXNrIHNpemUgKGZvciBib3RoIGNvaGVyZW50IGFuZCBzdHJlYW1pbmcgRE1BKQorCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHNoYXJlZCBjb250cm9sIGRhdGEgKHBjaV9hbGxvY2F0ZV9jb2hlcmVudCgpKQorCUFjY2VzcyBkZXZpY2UgY29uZmlndXJhdGlvbiBzcGFjZSAoaWYgbmVlZGVkKQorCVJlZ2lzdGVyIElSUSBoYW5kbGVyIChyZXF1ZXN0X2lycSgpKQorCUluaXRpYWxpemUgbm9uLVBDSSAoaS5lLiBMQU4vU0NTSS9ldGMgcGFydHMgb2YgdGhlIGNoaXApCisJRW5hYmxlIERNQS9wcm9jZXNzaW5nIGVuZ2luZXMuCisKK1RoZSBkcml2ZXIgY2FuIGFjY2VzcyBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVycyBhdCBhbnkgdGltZS4KKyhXZWxsLCBhbG1vc3QuIFdoZW4gcnVubmluZyBCSVNULCBjb25maWcgc3BhY2UgY2FuIGdvIGF3YXkuLi5idXQKK3RoYXQgd2lsbCBqdXN0IHJlc3VsdCBpbiBhIFBDSSBCdXMgTWFzdGVyIEFib3J0IGFuZCBjb25maWcgcmVhZHMKK3dpbGwgcmV0dXJuIGdhcmJhZ2UpLgorCisKKzMuMSBFbmFibGUgdGhlIFBDSSBkZXZpY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0JlZm9yZSB0b3VjaGluZyBhbnkgZGV2aWNlIHJlZ2lzdGVycywgdGhlIGRyaXZlciBuZWVkcyB0byBlbmFibGUKK3RoZSBQQ0kgZGV2aWNlIGJ5IGNhbGxpbmcgcGNpX2VuYWJsZV9kZXZpY2UoKS4gVGhpcyB3aWxsOgorCW8gd2FrZSB1cCB0aGUgZGV2aWNlIGlmIGl0IHdhcyBpbiBzdXNwZW5kZWQgc3RhdGUsCisJbyBhbGxvY2F0ZSBJL08gYW5kIG1lbW9yeSByZWdpb25zIG9mIHRoZSBkZXZpY2UgKGlmIEJJT1MgZGlkIG5vdCksCisJbyBhbGxvY2F0ZSBhbiBJUlEgKGlmIEJJT1MgZGlkIG5vdCkuCisKK05PVEU6IHBjaV9lbmFibGVfZGV2aWNlKCkgY2FuIGZhaWwhIENoZWNrIHRoZSByZXR1cm4gdmFsdWUuCisKK1sgT1MgQlVHOiB3ZSBkb24ndCBjaGVjayByZXNvdXJjZSBhbGxvY2F0aW9ucyBiZWZvcmUgZW5hYmxpbmcgdGhvc2UKKyAgcmVzb3VyY2VzLiBUaGUgc2VxdWVuY2Ugd291bGQgbWFrZSBtb3JlIHNlbnNlIGlmIHdlIGNhbGxlZAorICBwY2lfcmVxdWVzdF9yZXNvdXJjZXMoKSBiZWZvcmUgY2FsbGluZyBwY2lfZW5hYmxlX2RldmljZSgpLgorICBDdXJyZW50bHksIHRoZSBkZXZpY2UgZHJpdmVycyBjYW4ndCBkZXRlY3QgdGhlIGJ1ZyB3aGVuIHdoZW4gdHdvCisgIGRldmljZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCB0aGUgc2FtZSByYW5nZS4gVGhpcyBpcyBub3QgYSBjb21tb24KKyAgcHJvYmxlbSBhbmQgdW5saWtlbHkgdG8gZ2V0IGZpeGVkIHNvb24uCisKKyAgVGhpcyBoYXMgYmVlbiBkaXNjdXNzZWQgYmVmb3JlIGJ1dCBub3QgY2hhbmdlZCBhcyBvZiAyLjYuMTk6CisJaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNi8zLzIvMTk0CitdCisKK3BjaV9zZXRfbWFzdGVyKCkgd2lsbCBlbmFibGUgRE1BIGJ5IHNldHRpbmcgdGhlIGJ1cyBtYXN0ZXIgYml0CitpbiB0aGUgUENJX0NPTU1BTkQgcmVnaXN0ZXIuIEl0IGFsc28gZml4ZXMgdGhlIGxhdGVuY3kgdGltZXIgdmFsdWUgaWYKK2l0J3Mgc2V0IHRvIHNvbWV0aGluZyBib2d1cyBieSB0aGUgQklPUy4KKworSWYgdGhlIFBDSSBkZXZpY2UgY2FuIHVzZSB0aGUgUENJIE1lbW9yeS1Xcml0ZS1JbnZhbGlkYXRlIHRyYW5zYWN0aW9uLAorY2FsbCBwY2lfc2V0X213aSgpLiAgVGhpcyBlbmFibGVzIHRoZSBQQ0lfQ09NTUFORCBiaXQgZm9yIE1lbS1Xci1JbnZhbAorYW5kIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgc2V0IGNvcnJlY3RseS4KK0NoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgcGNpX3NldF9td2koKSBhcyBub3QgYWxsIGFyY2hpdGVjdHVyZXMKK29yIGNoaXAtc2V0cyBtYXkgc3VwcG9ydCBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZS4gIEFsdGVybmF0aXZlbHksCitpZiBNZW0tV3ItSW52YWwgd291bGQgYmUgbmljZSB0byBoYXZlIGJ1dCBpcyBub3QgcmVxdWlyZWQsIGNhbGwKK3BjaV90cnlfc2V0X213aSgpIHRvIGhhdmUgdGhlIHN5c3RlbSBkbyBpdHMgYmVzdCBlZmZvcnQgYXQgZW5hYmxpbmcKK01lbS1Xci1JbnZhbC4KKworCiszLjIgUmVxdWVzdCBNTUlPL0lPUCByZXNvdXJjZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTWVtb3J5IChNTUlPKSwgYW5kIEkvTyBwb3J0IGFkZHJlc3NlcyBzaG91bGQgTk9UIGJlIHJlYWQgZGlyZWN0bHkKK2Zyb20gdGhlIFBDSSBkZXZpY2UgY29uZmlnIHNwYWNlLiBVc2UgdGhlIHZhbHVlcyBpbiB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUKK2FzIHRoZSBQQ0kgImJ1cyBhZGRyZXNzIiBtaWdodCBoYXZlIGJlZW4gcmVtYXBwZWQgdG8gYSAiaG9zdCBwaHlzaWNhbCIKK2FkZHJlc3MgYnkgdGhlIGFyY2gvY2hpcC1zZXQgc3BlY2lmaWMga2VybmVsIHN1cHBvcnQuCisKK1NlZSBEb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0IGZvciBob3cgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnMKK29yIGRldmljZSBtZW1vcnkuCisKK1RoZSBkZXZpY2UgZHJpdmVyIG5lZWRzIHRvIGNhbGwgcGNpX3JlcXVlc3RfcmVnaW9uKCkgdG8gdmVyaWZ5CitubyBvdGhlciBkZXZpY2UgaXMgYWxyZWFkeSB1c2luZyB0aGUgc2FtZSBhZGRyZXNzIHJlc291cmNlLgorQ29udmVyc2VseSwgZHJpdmVycyBzaG91bGQgY2FsbCBwY2lfcmVsZWFzZV9yZWdpb24oKSBBRlRFUgorY2FsbGluZyBwY2lfZGlzYWJsZV9kZXZpY2UoKS4KK1RoZSBpZGVhIGlzIHRvIHByZXZlbnQgdHdvIGRldmljZXMgY29sbGlkaW5nIG9uIHRoZSBzYW1lIGFkZHJlc3MgcmFuZ2UuCisKK1sgU2VlIE9TIEJVRyBjb21tZW50IGFib3ZlLiBDdXJyZW50bHkgKDIuNi4xOSksIFRoZSBkcml2ZXIgY2FuIG9ubHkKKyAgZGV0ZXJtaW5lIE1NSU8gYW5kIElPIFBvcnQgcmVzb3VyY2UgYXZhaWxhYmlsaXR5IF9hZnRlcl8gY2FsbGluZworICBwY2lfZW5hYmxlX2RldmljZSgpLiBdCisKK0dlbmVyaWMgZmxhdm9ycyBvZiBwY2lfcmVxdWVzdF9yZWdpb24oKSBhcmUgcmVxdWVzdF9tZW1fcmVnaW9uKCkKKyhmb3IgTU1JTyByYW5nZXMpIGFuZCByZXF1ZXN0X3JlZ2lvbigpIChmb3IgSU8gUG9ydCByYW5nZXMpLgorVXNlIHRoZXNlIGZvciBhZGRyZXNzIHJlc291cmNlcyB0aGF0IGFyZSBub3QgZGVzY3JpYmVkIGJ5ICJub3JtYWwiIFBDSQorQkFScy4KKworQWxzbyBzZWUgcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucygpIGJlbG93LgorCisKKzMuMyBTZXQgdGhlIERNQSBtYXNrIHNpemUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1sgSWYgYW55dGhpbmcgYmVsb3cgZG9lc24ndCBtYWtlIHNlbnNlLCBwbGVhc2UgcmVmZXIgdG8KKyAgRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dC4gVGhpcyBzZWN0aW9uIGlzIGp1c3QgYSByZW1pbmRlciB0aGF0CisgIGRyaXZlcnMgbmVlZCB0byBpbmRpY2F0ZSBETUEgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UgYW5kIGlzIG5vdAorICBhbiBhdXRob3JpdGF0aXZlIHNvdXJjZSBmb3IgRE1BIGludGVyZmFjZXMuIF0KKworV2hpbGUgYWxsIGRyaXZlcnMgc2hvdWxkIGV4cGxpY2l0bHkgaW5kaWNhdGUgdGhlIERNQSBjYXBhYmlsaXR5CisoZS5nLiAzMiBvciA2NCBiaXQpIG9mIHRoZSBQQ0kgYnVzIG1hc3RlciwgZGV2aWNlcyB3aXRoIG1vcmUgdGhhbgorMzItYml0IGJ1cyBtYXN0ZXIgY2FwYWJpbGl0eSBmb3Igc3RyZWFtaW5nIGRhdGEgbmVlZCB0aGUgZHJpdmVyCit0byAicmVnaXN0ZXIiIHRoaXMgY2FwYWJpbGl0eSBieSBjYWxsaW5nIHBjaV9zZXRfZG1hX21hc2soKSB3aXRoCithcHByb3ByaWF0ZSBwYXJhbWV0ZXJzLiAgSW4gZ2VuZXJhbCB0aGlzIGFsbG93cyBtb3JlIGVmZmljaWVudCBETUEKK29uIHN5c3RlbXMgd2hlcmUgU3lzdGVtIFJBTSBleGlzdHMgYWJvdmUgNEcgX3BoeXNpY2FsXyBhZGRyZXNzLgorCitEcml2ZXJzIGZvciBhbGwgUENJLVggYW5kIFBDSWUgY29tcGxpYW50IGRldmljZXMgbXVzdCBjYWxsCitwY2lfc2V0X2RtYV9tYXNrKCkgYXMgdGhleSBhcmUgNjQtYml0IERNQSBkZXZpY2VzLgorCitTaW1pbGFybHksIGRyaXZlcnMgbXVzdCBhbHNvICJyZWdpc3RlciIgdGhpcyBjYXBhYmlsaXR5IGlmIHRoZSBkZXZpY2UKK2NhbiBkaXJlY3RseSBhZGRyZXNzICJjb25zaXN0ZW50IG1lbW9yeSIgaW4gU3lzdGVtIFJBTSBhYm92ZSA0RyBwaHlzaWNhbAorYWRkcmVzcyBieSBjYWxsaW5nIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpLgorQWdhaW4sIHRoaXMgaW5jbHVkZXMgZHJpdmVycyBmb3IgYWxsIFBDSS1YIGFuZCBQQ0llIGNvbXBsaWFudCBkZXZpY2VzLgorTWFueSA2NC1iaXQgIlBDSSIgZGV2aWNlcyAoYmVmb3JlIFBDSS1YKSBhbmQgc29tZSBQQ0ktWCBkZXZpY2VzIGFyZQorNjQtYml0IERNQSBjYXBhYmxlIGZvciBwYXlsb2FkICgic3RyZWFtaW5nIikgZGF0YSBidXQgbm90IGNvbnRyb2wKKygiY29uc2lzdGVudCIpIGRhdGEuCisKKworMy40IFNldHVwIHNoYXJlZCBjb250cm9sIGRhdGEKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK09uY2UgdGhlIERNQSBtYXNrcyBhcmUgc2V0LCB0aGUgZHJpdmVyIGNhbiBhbGxvY2F0ZSAiY29uc2lzdGVudCIgKGEuay5hLiBzaGFyZWQpCittZW1vcnkuICBTZWUgRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dCBmb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mCit0aGUgRE1BIEFQSXMuIFRoaXMgc2VjdGlvbiBpcyBqdXN0IGEgcmVtaW5kZXIgdGhhdCBpdCBuZWVkcyB0byBiZSBkb25lCitiZWZvcmUgZW5hYmxpbmcgRE1BIG9uIHRoZSBkZXZpY2UuCisKKworMy41IEluaXRpYWxpemUgZGV2aWNlIHJlZ2lzdGVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorU29tZSBkcml2ZXJzIHdpbGwgbmVlZCBzcGVjaWZpYyAiY2FwYWJpbGl0eSIgZmllbGRzIHByb2dyYW1tZWQKK29yIG90aGVyICJ2ZW5kb3Igc3BlY2lmaWMiIHJlZ2lzdGVyIGluaXRpYWxpemVkIG9yIHJlc2V0LgorRS5nLiBjbGVhcmluZyBwZW5kaW5nIGludGVycnVwdHMuCisKKworMy42IFJlZ2lzdGVyIElSUSBoYW5kbGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1doaWxlIGNhbGxpbmcgcmVxdWVzdF9pcnEoKSBpcyB0aGUgbGFzdCBzdGVwIGRlc2NyaWJlZCBoZXJlLAordGhpcyBpcyBvZnRlbiBqdXN0IGFub3RoZXIgaW50ZXJtZWRpYXRlIHN0ZXAgdG8gaW5pdGlhbGl6ZSBhIGRldmljZS4KK1RoaXMgc3RlcCBjYW4gb2Z0ZW4gYmUgZGVmZXJyZWQgdW50aWwgdGhlIGRldmljZSBpcyBvcGVuZWQgZm9yIHVzZS4KKworQWxsIGludGVycnVwdCBoYW5kbGVycyBmb3IgSVJRIGxpbmVzIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggSVJRRl9TSEFSRUQKK2FuZCB1c2UgdGhlIGRldmlkIHRvIG1hcCBJUlFzIHRvIGRldmljZXMgKHJlbWVtYmVyIHRoYXQgYWxsIFBDSSBJUlEgbGluZXMKK2NhbiBiZSBzaGFyZWQpLgorCityZXF1ZXN0X2lycSgpIHdpbGwgYXNzb2NpYXRlIGFuIGludGVycnVwdCBoYW5kbGVyIGFuZCBkZXZpY2UgaGFuZGxlCit3aXRoIGFuIGludGVycnVwdCBudW1iZXIuIEhpc3RvcmljYWxseSBpbnRlcnJ1cHQgbnVtYmVycyByZXByZXNlbnQKK0lSUSBsaW5lcyB3aGljaCBydW4gZnJvbSB0aGUgUENJIGRldmljZSB0byB0aGUgSW50ZXJydXB0IGNvbnRyb2xsZXIuCitXaXRoIE1TSSBhbmQgTVNJLVggKG1vcmUgYmVsb3cpIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGlzIGEgQ1BVICJ2ZWN0b3IiLgorCityZXF1ZXN0X2lycSgpIGFsc28gZW5hYmxlcyB0aGUgaW50ZXJydXB0LiBNYWtlIHN1cmUgdGhlIGRldmljZSBpcworcXVpZXNjZWQgYW5kIGRvZXMgbm90IGhhdmUgYW55IGludGVycnVwdHMgcGVuZGluZyBiZWZvcmUgcmVnaXN0ZXJpbmcKK3RoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKworTVNJIGFuZCBNU0ktWCBhcmUgUENJIGNhcGFiaWxpdGllcy4gQm90aCBhcmUgIk1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyIKK3doaWNoIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgQ1BVIHZpYSBhIERNQSB3cml0ZSB0byBhIExvY2FsIEFQSUMuCitUaGUgZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBiZXR3ZWVuIE1TSSBhbmQgTVNJLVggaXMgaG93IG11bHRpcGxlCisidmVjdG9ycyIgZ2V0IGFsbG9jYXRlZC4gTVNJIHJlcXVpcmVzIGNvbnRpZ3VvdXMgYmxvY2tzIG9mIHZlY3RvcnMKK3doaWxlIE1TSS1YIGNhbiBhbGxvY2F0ZSBzZXZlcmFsIGluZGl2aWR1YWwgb25lcy4KKworTVNJIGNhcGFiaWxpdHkgY2FuIGJlIGVuYWJsZWQgYnkgY2FsbGluZyBwY2lfZW5hYmxlX21zaSgpIG9yCitwY2lfZW5hYmxlX21zaXgoKSBiZWZvcmUgY2FsbGluZyByZXF1ZXN0X2lycSgpLiBUaGlzIGNhdXNlcwordGhlIFBDSSBzdXBwb3J0IHRvIHByb2dyYW0gQ1BVIHZlY3RvciBkYXRhIGludG8gdGhlIFBDSSBkZXZpY2UKK2NhcGFiaWxpdHkgcmVnaXN0ZXJzLgorCitJZiB5b3VyIFBDSSBkZXZpY2Ugc3VwcG9ydHMgYm90aCwgdHJ5IHRvIGVuYWJsZSBNU0ktWCBmaXJzdC4KK09ubHkgb25lIGNhbiBiZSBlbmFibGVkIGF0IGEgdGltZS4gIE1hbnkgYXJjaGl0ZWN0dXJlcywgY2hpcC1zZXRzLAorb3IgQklPU2VzIGRvIE5PVCBzdXBwb3J0IE1TSSBvciBNU0ktWCBhbmQgdGhlIGNhbGwgdG8gcGNpX2VuYWJsZV9tc2kvbXNpeAord2lsbCBmYWlsLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIG1hbnkgZHJpdmVycyBoYXZlCit0d28gKG9yIG1vcmUpIGludGVycnVwdCBoYW5kbGVyczogb25lIGZvciBNU0kvTVNJLVggYW5kIGFub3RoZXIgZm9yIElSUXMuCitUaGV5IGNob29zZSB3aGljaCBoYW5kbGVyIHRvIHJlZ2lzdGVyIHdpdGggcmVxdWVzdF9pcnEoKSBiYXNlZCBvbiB0aGUKK3JldHVybiB2YWx1ZSBmcm9tIHBjaV9lbmFibGVfbXNpL21zaXgoKS4KKworVGhlcmUgYXJlIChhdCBsZWFzdCkgdHdvIHJlYWxseSBnb29kIHJlYXNvbnMgZm9yIHVzaW5nIE1TSToKKzEpIE1TSSBpcyBhbiBleGNsdXNpdmUgaW50ZXJydXB0IHZlY3RvciBieSBkZWZpbml0aW9uLgorICAgVGhpcyBtZWFucyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lc24ndCBoYXZlIHRvIHZlcmlmeQorICAgaXRzIGRldmljZSBjYXVzZWQgdGhlIGludGVycnVwdC4KKworMikgTVNJIGF2b2lkcyBETUEvSVJRIHJhY2UgY29uZGl0aW9ucy4gRE1BIHRvIGhvc3QgbWVtb3J5IGlzIGd1YXJhbnRlZWQKKyAgIHRvIGJlIHZpc2libGUgdG8gdGhlIGhvc3QgQ1BVKHMpIHdoZW4gdGhlIE1TSSBpcyBkZWxpdmVyZWQuIFRoaXMKKyAgIGlzIGltcG9ydGFudCBmb3IgYm90aCBkYXRhIGNvaGVyZW5jeSBhbmQgYXZvaWRpbmcgc3RhbGUgY29udHJvbCBkYXRhLgorICAgVGhpcyBndWFyYW50ZWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gb21pdCBNTUlPIHJlYWRzIHRvIGZsdXNoCisgICB0aGUgRE1BIHN0cmVhbS4KKworU2VlIGRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS8gb3IgZHJpdmVycy9uZXQvdGczLmMgZm9yIGV4YW1wbGVzCitvZiBNU0kvTVNJLVggdXNhZ2UuCisKKworCis0LiBQQ0kgZGV2aWNlIHNodXRkb3duCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIGEgUENJIGRldmljZSBkcml2ZXIgaXMgYmVpbmcgdW5sb2FkZWQsIG1vc3Qgb2YgdGhlIGZvbGxvd2luZworc3RlcHMgbmVlZCB0byBiZSBwZXJmb3JtZWQ6CisKKwlEaXNhYmxlIHRoZSBkZXZpY2UgZnJvbSBnZW5lcmF0aW5nIElSUXMKKwlSZWxlYXNlIHRoZSBJUlEgKGZyZWVfaXJxKCkpCisJU3RvcCBhbGwgRE1BIGFjdGl2aXR5CisJUmVsZWFzZSBETUEgYnVmZmVycyAoYm90aCBzdHJlYW1pbmcgYW5kIGNvbnNpc3RlbnQpCisJVW5yZWdpc3RlciBmcm9tIG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gc2NzaSBvciBuZXRkZXYpCisJRGlzYWJsZSBkZXZpY2UgZnJvbSByZXNwb25kaW5nIHRvIE1NSU8vSU8gUG9ydCBhZGRyZXNzZXMKKwlSZWxlYXNlIE1NSU8vSU8gUG9ydCByZXNvdXJjZShzKQorCisKKzQuMSBTdG9wIElSUXMgb24gdGhlIGRldmljZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitIb3cgdG8gZG8gdGhpcyBpcyBjaGlwL2RldmljZSBzcGVjaWZpYy4gSWYgaXQncyBub3QgZG9uZSwgaXQgb3BlbnMKK3RoZSBwb3NzaWJpbGl0eSBvZiBhICJzY3JlYW1pbmcgaW50ZXJydXB0IiBpZiAoYW5kIG9ubHkgaWYpCit0aGUgSVJRIGlzIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLgorCitXaGVuIHRoZSBzaGFyZWQgSVJRIGhhbmRsZXIgaXMgInVuaG9va2VkIiwgdGhlIHJlbWFpbmluZyBkZXZpY2VzCit1c2luZyB0aGUgc2FtZSBJUlEgbGluZSB3aWxsIHN0aWxsIG5lZWQgdGhlIElSUSBlbmFibGVkLiBUaHVzIGlmIHRoZQorInVuaG9va2VkIiBkZXZpY2UgYXNzZXJ0cyBJUlEgbGluZSwgdGhlIHN5c3RlbSB3aWxsIHJlc3BvbmQgYXNzdW1pbmcKK2l0IHdhcyBvbmUgb2YgdGhlIHJlbWFpbmluZyBkZXZpY2VzIGFzc2VydGVkIHRoZSBJUlEgbGluZS4gU2luY2Ugbm9uZQorb2YgdGhlIG90aGVyIGRldmljZXMgd2lsbCBoYW5kbGUgdGhlIElSUSwgdGhlIHN5c3RlbSB3aWxsICJoYW5nIiB1bnRpbAoraXQgZGVjaWRlcyB0aGUgSVJRIGlzbid0IGdvaW5nIHRvIGdldCBoYW5kbGVkIGFuZCBtYXNrcyB0aGUgSVJRICgxMDAsMDAwCitpdGVyYXRpb25zIGxhdGVyKS4gT25jZSB0aGUgc2hhcmVkIElSUSBpcyBtYXNrZWQsIHRoZSByZW1haW5pbmcgZGV2aWNlcword2lsbCBzdG9wIGZ1bmN0aW9uaW5nIHByb3Blcmx5LiBOb3QgYSBuaWNlIHNpdHVhdGlvbi4KKworVGhpcyBpcyBhbm90aGVyIHJlYXNvbiB0byB1c2UgTVNJIG9yIE1TSS1YIGlmIGl0J3MgYXZhaWxhYmxlLgorTVNJIGFuZCBNU0ktWCBhcmUgZGVmaW5lZCB0byBiZSBleGNsdXNpdmUgaW50ZXJydXB0cyBhbmQgdGh1cworYXJlIG5vdCBzdXNjZXB0aWJsZSB0byB0aGUgInNjcmVhbWluZyBpbnRlcnJ1cHQiIHByb2JsZW0uCisKKworNC4yIFJlbGVhc2UgdGhlIElSUQorfn5+fn5+fn5+fn5+fn5+fn5+fgorT25jZSB0aGUgZGV2aWNlIGlzIHF1aWVzY2VkIChubyBtb3JlIElSUXMpLCBvbmUgY2FuIGNhbGwgZnJlZV9pcnEoKS4KK1RoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gY29udHJvbCBvbmNlIGFueSBwZW5kaW5nIElSUXMgYXJlIGhhbmRsZWQsCisidW5ob29rIiB0aGUgZHJpdmVycyBJUlEgaGFuZGxlciBmcm9tIHRoYXQgSVJRLCBhbmQgZmluYWxseSByZWxlYXNlCit0aGUgSVJRIGlmIG5vIG9uZSBlbHNlIGlzIHVzaW5nIGl0LgorCisKKzQuMyBTdG9wIGFsbCBETUEgYWN0aXZpdHkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0l0J3MgZXh0cmVtZWx5IGltcG9ydGFudCB0byBzdG9wIGFsbCBETUEgb3BlcmF0aW9ucyBCRUZPUkUgYXR0ZW1wdGluZwordG8gZGVhbGxvY2F0ZSBETUEgY29udHJvbCBkYXRhLiBGYWlsdXJlIHRvIGRvIHNvIGNhbiByZXN1bHQgaW4gbWVtb3J5Citjb3JydXB0aW9uLCBoYW5ncywgYW5kIG9uIHNvbWUgY2hpcC1zZXRzIGEgaGFyZCBjcmFzaC4KKworU3RvcHBpbmcgRE1BIGFmdGVyIHN0b3BwaW5nIHRoZSBJUlFzIGNhbiBhdm9pZCByYWNlcyB3aGVyZSB0aGUKK0lSUSBoYW5kbGVyIG1pZ2h0IHJlc3RhcnQgRE1BIGVuZ2luZXMuCisKK1doaWxlIHRoaXMgc3RlcCBzb3VuZHMgb2J2aW91cyBhbmQgdHJpdmlhbCwgc2V2ZXJhbCAibWF0dXJlIiBkcml2ZXJzCitkaWRuJ3QgZ2V0IHRoaXMgc3RlcCByaWdodCBpbiB0aGUgcGFzdC4KKworCis0LjQgUmVsZWFzZSBETUEgYnVmZmVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK09uY2UgRE1BIGlzIHN0b3BwZWQsIGNsZWFuIHVwIHN0cmVhbWluZyBETUEgZmlyc3QuCitJLmUuIHVubWFwIGRhdGEgYnVmZmVycyBhbmQgcmV0dXJuIGJ1ZmZlcnMgdG8gInVwc3RyZWFtIgorb3duZXJzIGlmIHRoZXJlIGlzIG9uZS4KKworVGhlbiBjbGVhbiB1cCAiY29uc2lzdGVudCIgYnVmZmVycyB3aGljaCBjb250YWluIHRoZSBjb250cm9sIGRhdGEuCisKK1NlZSBEb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0IGZvciBkZXRhaWxzIG9uIHVubWFwcGluZyBpbnRlcmZhY2VzLgorCisKKzQuNSBVbnJlZ2lzdGVyIGZyb20gb3RoZXIgc3Vic3lzdGVtcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNb3N0IGxvdyBsZXZlbCBQQ0kgZGV2aWNlIGRyaXZlcnMgc3VwcG9ydCBzb21lIG90aGVyIHN1YnN5c3RlbQorbGlrZSBVU0IsIEFMU0EsIFNDU0ksIE5ldERldiwgSW5maW5pYmFuZCwgZXRjLiBNYWtlIHN1cmUgeW91cgorZHJpdmVyIGlzbid0IGxvc2luZyByZXNvdXJjZXMgZnJvbSB0aGF0IG90aGVyIHN1YnN5c3RlbS4KK0lmIHRoaXMgaGFwcGVucywgdHlwaWNhbGx5IHRoZSBzeW1wdG9tIGlzIGFuIE9vcHMgKHBhbmljKSB3aGVuCit0aGUgc3Vic3lzdGVtIGF0dGVtcHRzIHRvIGNhbGwgaW50byBhIGRyaXZlciB0aGF0IGhhcyBiZWVuIHVubG9hZGVkLgorCisKKzQuNiBEaXNhYmxlIERldmljZSBmcm9tIHJlc3BvbmRpbmcgdG8gTU1JTy9JTyBQb3J0IGFkZHJlc3Nlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Citpb191bm1hcCgpIE1NSU8gb3IgSU8gUG9ydCByZXNvdXJjZXMgYW5kIHRoZW4gY2FsbCBwY2lfZGlzYWJsZV9kZXZpY2UoKS4KK1RoaXMgaXMgdGhlIHN5bW1ldHJpYyBvcHBvc2l0ZSBvZiBwY2lfZW5hYmxlX2RldmljZSgpLgorRG8gbm90IGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzIGFmdGVyIGNhbGxpbmcgcGNpX2Rpc2FibGVfZGV2aWNlKCkuCisKKworNC43IFJlbGVhc2UgTU1JTy9JTyBQb3J0IFJlc291cmNlKHMpCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NhbGwgcGNpX3JlbGVhc2VfcmVnaW9uKCkgdG8gbWFyayB0aGUgTU1JTyBvciBJTyBQb3J0IHJhbmdlIGFzIGF2YWlsYWJsZS4KK0ZhaWx1cmUgdG8gZG8gc28gdXN1YWxseSByZXN1bHRzIGluIHRoZSBpbmFiaWxpdHkgdG8gcmVsb2FkIHRoZSBkcml2ZXIuCisKKworCis1LiBIb3cgdG8gYWNjZXNzIFBDSSBjb25maWcgc3BhY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIHVzZSBwY2lfKHJlYWR8d3JpdGUpX2NvbmZpZ18oYnl0ZXx3b3JkfGR3b3JkKSB0byBhY2Nlc3MgdGhlIGNvbmZpZworc3BhY2Ugb2YgYSBkZXZpY2UgcmVwcmVzZW50ZWQgYnkgc3RydWN0IHBjaV9kZXYgKi4gQWxsIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gMAord2hlbiBzdWNjZXNzZnVsIG9yIGFuIGVycm9yIGNvZGUgKFBDSUJJT1NfLi4uKSB3aGljaCBjYW4gYmUgdHJhbnNsYXRlZCB0byBhIHRleHQKK3N0cmluZyBieSBwY2liaW9zX3N0cmVycm9yLiBNb3N0IGRyaXZlcnMgZXhwZWN0IHRoYXQgYWNjZXNzZXMgdG8gdmFsaWQgUENJCitkZXZpY2VzIGRvbid0IGZhaWwuCisKK0lmIHlvdSBkb24ndCBoYXZlIGEgc3RydWN0IHBjaV9kZXYgYXZhaWxhYmxlLCB5b3UgY2FuIGNhbGwKK3BjaV9idXNfKHJlYWR8d3JpdGUpX2NvbmZpZ18oYnl0ZXx3b3JkfGR3b3JkKSB0byBhY2Nlc3MgYSBnaXZlbiBkZXZpY2UKK2FuZCBmdW5jdGlvbiBvbiB0aGF0IGJ1cy4KKworSWYgeW91IGFjY2VzcyBmaWVsZHMgaW4gdGhlIHN0YW5kYXJkIHBvcnRpb24gb2YgdGhlIGNvbmZpZyBoZWFkZXIsIHBsZWFzZQordXNlIHN5bWJvbGljIG5hbWVzIG9mIGxvY2F0aW9ucyBhbmQgYml0cyBkZWNsYXJlZCBpbiA8bGludXgvcGNpLmg+LgorCitJZiB5b3UgbmVlZCB0byBhY2Nlc3MgRXh0ZW5kZWQgUENJIENhcGFiaWxpdHkgcmVnaXN0ZXJzLCBqdXN0IGNhbGwKK3BjaV9maW5kX2NhcGFiaWxpdHkoKSBmb3IgdGhlIHBhcnRpY3VsYXIgY2FwYWJpbGl0eSBhbmQgaXQgd2lsbCBmaW5kIHRoZQorY29ycmVzcG9uZGluZyByZWdpc3RlciBibG9jayBmb3IgeW91LgorCisKKworNi4gT3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworcGNpX2ZpbmRfc2xvdCgpCQkJRmluZCBwY2lfZGV2IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYnVzIGFuZAorCQkJCXNsb3QgbnVtYmVycy4KK3BjaV9zZXRfcG93ZXJfc3RhdGUoKQkJU2V0IFBDSSBQb3dlciBNYW5hZ2VtZW50IHN0YXRlICgwPUQwIC4uLiAzPUQzKQorcGNpX2ZpbmRfY2FwYWJpbGl0eSgpCQlGaW5kIHNwZWNpZmllZCBjYXBhYmlsaXR5IGluIGRldmljZSdzIGNhcGFiaWxpdHkKKwkJCQlsaXN0LgorcGNpX3Jlc291cmNlX3N0YXJ0KCkJCVJldHVybnMgYnVzIHN0YXJ0IGFkZHJlc3MgZm9yIGEgZ2l2ZW4gUENJIHJlZ2lvbgorcGNpX3Jlc291cmNlX2VuZCgpCQlSZXR1cm5zIGJ1cyBlbmQgYWRkcmVzcyBmb3IgYSBnaXZlbiBQQ0kgcmVnaW9uCitwY2lfcmVzb3VyY2VfbGVuKCkJCVJldHVybnMgdGhlIGJ5dGUgbGVuZ3RoIG9mIGEgUENJIHJlZ2lvbgorcGNpX3NldF9kcnZkYXRhKCkJCVNldCBwcml2YXRlIGRyaXZlciBkYXRhIHBvaW50ZXIgZm9yIGEgcGNpX2RldgorcGNpX2dldF9kcnZkYXRhKCkJCVJldHVybiBwcml2YXRlIGRyaXZlciBkYXRhIHBvaW50ZXIgZm9yIGEgcGNpX2RldgorcGNpX3NldF9td2koKQkJCUVuYWJsZSBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMuCitwY2lfY2xlYXJfbXdpKCkJCQlEaXNhYmxlIE1lbW9yeS1Xcml0ZS1JbnZhbGlkYXRlIHRyYW5zYWN0aW9ucy4KKworCisKKzcuIE1pc2NlbGxhbmVvdXMgaGludHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2hlbiBkaXNwbGF5aW5nIFBDSSBkZXZpY2UgbmFtZXMgdG8gdGhlIHVzZXIgKGZvciBleGFtcGxlIHdoZW4gYSBkcml2ZXIgd2FudHMKK3RvIHRlbGwgdGhlIHVzZXIgd2hhdCBjYXJkIGhhcyBpdCBmb3VuZCksIHBsZWFzZSB1c2UgcGNpX25hbWUocGNpX2RldikuCisKK0Fsd2F5cyByZWZlciB0byB0aGUgUENJIGRldmljZXMgYnkgYSBwb2ludGVyIHRvIHRoZSBwY2lfZGV2IHN0cnVjdHVyZS4KK0FsbCBQQ0kgbGF5ZXIgZnVuY3Rpb25zIHVzZSB0aGlzIGlkZW50aWZpY2F0aW9uIGFuZCBpdCdzIHRoZSBvbmx5CityZWFzb25hYmxlIG9uZS4gRG9uJ3QgdXNlIGJ1cy9zbG90L2Z1bmN0aW9uIG51bWJlcnMgZXhjZXB0IGZvciB2ZXJ5CitzcGVjaWFsIHB1cnBvc2VzIC0tIG9uIHN5c3RlbXMgd2l0aCBtdWx0aXBsZSBwcmltYXJ5IGJ1c2VzIHRoZWlyIHNlbWFudGljcworY2FuIGJlIHByZXR0eSBjb21wbGV4LgorCitEb24ndCB0cnkgdG8gdHVybiBvbiBGYXN0IEJhY2sgdG8gQmFjayB3cml0ZXMgaW4geW91ciBkcml2ZXIuICBBbGwgZGV2aWNlcworb24gdGhlIGJ1cyBuZWVkIHRvIGJlIGNhcGFibGUgb2YgZG9pbmcgaXQsIHNvIHRoaXMgaXMgc29tZXRoaW5nIHdoaWNoIG5lZWRzCit0byBiZSBoYW5kbGVkIGJ5IHBsYXRmb3JtIGFuZCBnZW5lcmljIGNvZGUsIG5vdCBpbmRpdmlkdWFsIGRyaXZlcnMuCisKKworCis4LiBWZW5kb3IgYW5kIGRldmljZSBpZGVudGlmaWNhdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitPbmUgaXMgbm90IG5vdCByZXF1aXJlZCB0byBhZGQgbmV3IGRldmljZSBpZHMgdG8gaW5jbHVkZS9saW51eC9wY2lfaWRzLmguCitQbGVhc2UgYWRkIFBDSV9WRU5ET1JfSURfeHh4IGZvciB2ZW5kb3JzIGFuZCBhIGhleCBjb25zdGFudCBmb3IgZGV2aWNlIGlkcy4KKworUENJX1ZFTkRPUl9JRF94eHggY29uc3RhbnRzIGFyZSByZS11c2VkLiBUaGUgZGV2aWNlIGlkcyBhcmUgYXJiaXRyYXJ5CitoZXggbnVtYmVycyAodmVuZG9yIGNvbnRyb2xsZWQpIGFuZCBub3JtYWxseSB1c2VkIG9ubHkgaW4gYSBzaW5nbGUKK2xvY2F0aW9uLCB0aGUgcGNpX2RldmljZV9pZCB0YWJsZS4KKworUGxlYXNlIERPIHN1Ym1pdCBuZXcgdmVuZG9yL2RldmljZSBpZHMgdG8gcGNpaWRzLnNvdXJjZWZvcmdlLm5ldCBwcm9qZWN0LgorCisKKworOS4gT2Jzb2xldGUgZnVuY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlcmUgYXJlIHNldmVyYWwgZnVuY3Rpb25zIHdoaWNoIHlvdSBtaWdodCBjb21lIGFjcm9zcyB3aGVuIHRyeWluZyB0bworcG9ydCBhbiBvbGQgZHJpdmVyIHRvIHRoZSBuZXcgUENJIGludGVyZmFjZS4gIFRoZXkgYXJlIG5vIGxvbmdlciBwcmVzZW50CitpbiB0aGUga2VybmVsIGFzIHRoZXkgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBob3RwbHVnIG9yIFBDSSBkb21haW5zIG9yCitoYXZpbmcgc2FuZSBsb2NraW5nLgorCitwY2lfZmluZF9kZXZpY2UoKQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfZGV2aWNlKCkKK3BjaV9maW5kX3N1YnN5cygpCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9zdWJzeXMoKQorcGNpX2ZpbmRfc2xvdCgpCQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfc2xvdCgpCisKKworVGhlIGFsdGVybmF0aXZlIGlzIHRoZSB0cmFkaXRpb25hbCBQQ0kgZGV2aWNlIGRyaXZlciB0aGF0IHdhbGtzIFBDSQorZGV2aWNlIGxpc3RzLiBUaGlzIGlzIHN0aWxsIHBvc3NpYmxlIGJ1dCBkaXNjb3VyYWdlZC4KKworCisKKzEwLiBNTUlPIFNwYWNlIGFuZCAiV3JpdGUgUG9zdGluZyIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQ29udmVydGluZyBhIGRyaXZlciBmcm9tIHVzaW5nIEkvTyBQb3J0IHNwYWNlIHRvIHVzaW5nIE1NSU8gc3BhY2UKK29mdGVuIHJlcXVpcmVzIHNvbWUgYWRkaXRpb25hbCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksICJ3cml0ZSBwb3N0aW5nIgorbmVlZHMgdG8gYmUgaGFuZGxlZC4gTWFueSBkcml2ZXJzIChlLmcuIHRnMywgYWNlbmljLCBzeW01M2M4eHhfMikKK2FscmVhZHkgZG8gdGhpcy4gSS9PIFBvcnQgc3BhY2UgZ3VhcmFudGVlcyB3cml0ZSB0cmFuc2FjdGlvbnMgcmVhY2ggdGhlIFBDSQorZGV2aWNlIGJlZm9yZSB0aGUgQ1BVIGNhbiBjb250aW51ZS4gV3JpdGVzIHRvIE1NSU8gc3BhY2UgYWxsb3cgdGhlIENQVQordG8gY29udGludWUgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiByZWFjaGVzIHRoZSBQQ0kgZGV2aWNlLiBIVyB3ZWVuaWVzCitjYWxsIHRoaXMgIldyaXRlIFBvc3RpbmciIGJlY2F1c2UgdGhlIHdyaXRlIGNvbXBsZXRpb24gaXMgInBvc3RlZCIgdG8KK3RoZSBDUFUgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBoYXMgcmVhY2hlZCBpdHMgZGVzdGluYXRpb24uCisKK1RodXMsIHRpbWluZyBzZW5zaXRpdmUgY29kZSBzaG91bGQgYWRkIHJlYWRsKCkgd2hlcmUgdGhlIENQVSBpcworZXhwZWN0ZWQgdG8gd2FpdCBiZWZvcmUgZG9pbmcgb3RoZXIgd29yay4gIFRoZSBjbGFzc2ljICJiaXQgYmFuZ2luZyIKK3NlcXVlbmNlIHdvcmtzIGZpbmUgZm9yIEkvTyBQb3J0IHNwYWNlOgorCisgICAgICAgZm9yIChpID0gODsgLS1pOyB2YWwgPj49IDEpIHsKKyAgICAgICAgICAgICAgIG91dGIodmFsICYgMSwgaW9wb3J0X3JlZyk7ICAgICAgLyogd3JpdGUgYml0ICovCisgICAgICAgICAgICAgICB1ZGVsYXkoMTApOworICAgICAgIH0KKworVGhlIHNhbWUgc2VxdWVuY2UgZm9yIE1NSU8gc3BhY2Ugc2hvdWxkIGJlOgorCisgICAgICAgZm9yIChpID0gODsgLS1pOyB2YWwgPj49IDEpIHsKKyAgICAgICAgICAgICAgIHdyaXRlYih2YWwgJiAxLCBtbWlvX3JlZyk7ICAgICAgLyogd3JpdGUgYml0ICovCisgICAgICAgICAgICAgICByZWFkYihzYWZlX21taW9fcmVnKTsgICAgICAgICAgIC8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLworICAgICAgICAgICAgICAgdWRlbGF5KDEwKTsKKyAgICAgICB9CisKK0l0IGlzIGltcG9ydGFudCB0aGF0ICJzYWZlX21taW9fcmVnIiBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzIHRoYXQKK2ludGVyZmVyZXMgd2l0aCB0aGUgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIGRldmljZS4KKworQW5vdGhlciBjYXNlIHRvIHdhdGNoIG91dCBmb3IgaXMgd2hlbiByZXNldHRpbmcgYSBQQ0kgZGV2aWNlLiBVc2UgUENJCitDb25maWd1cmF0aW9uIHNwYWNlIHJlYWRzIHRvIGZsdXNoIHRoZSB3cml0ZWwoKS4gVGhpcyB3aWxsIGdyYWNlZnVsbHkKK2hhbmRsZSB0aGUgUENJIG1hc3RlciBhYm9ydCBvbiBhbGwgcGxhdGZvcm1zIGlmIHRoZSBQQ0kgZGV2aWNlIGlzCitleHBlY3RlZCB0byBub3QgcmVzcG9uZCB0byBhIHJlYWRsKCkuICBNb3N0IHg4NiBwbGF0Zm9ybXMgd2lsbCBhbGxvdworTU1JTyByZWFkcyB0byBtYXN0ZXIgYWJvcnQgKGEuay5hLiAiU29mdCBGYWlsIikgYW5kIHJldHVybiBnYXJiYWdlCisoZS5nLiB+MCkuIEJ1dCBtYW55IFJJU0MgcGxhdGZvcm1zIHdpbGwgY3Jhc2ggKGEuay5hLiJIYXJkIEZhaWwiKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpZWFlci1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9wY2llYWVyLWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMyNTEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpZWFlci1ob3d0by50eHQKQEAgLTAsMCArMSwyNTMgQEAKKyAgIFRoZSBQQ0kgRXhwcmVzcyBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgRHJpdmVyIEd1aWRlIEhPV1RPCisJCVQuIExvbmcgTmd1eWVuCTx0b20ubC5uZ3V5ZW5AaW50ZWwuY29tPgorCQlZYW5taW4gWmhhbmcJPHlhbm1pbi56aGFuZ0BpbnRlbC5jb20+CisJCQkJMDcvMjkvMjAwNgorCisKKzEuIE92ZXJ2aWV3CisKKzEuMSBBYm91dCB0aGlzIGd1aWRlCisKK1RoaXMgZ3VpZGUgZGVzY3JpYmVzIHRoZSBiYXNpY3Mgb2YgdGhlIFBDSSBFeHByZXNzIEFkdmFuY2VkIEVycm9yCitSZXBvcnRpbmcgKEFFUikgZHJpdmVyIGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGl0LCBhcword2VsbCBhcyBob3cgdG8gZW5hYmxlIHRoZSBkcml2ZXJzIG9mIGVuZHBvaW50IGRldmljZXMgdG8gY29uZm9ybSB3aXRoCitQQ0kgRXhwcmVzcyBBRVIgZHJpdmVyLgorCisxLjIgQ29weXJpZ2h0IKkgSW50ZWwgQ29ycG9yYXRpb24gMjAwNi4KKworMS4zIFdoYXQgaXMgdGhlIFBDSSBFeHByZXNzIEFFUiBEcml2ZXI/CisKK1BDSSBFeHByZXNzIGVycm9yIHNpZ25hbGluZyBjYW4gb2NjdXIgb24gdGhlIFBDSSBFeHByZXNzIGxpbmsgaXRzZWxmCitvciBvbiBiZWhhbGYgb2YgdHJhbnNhY3Rpb25zIGluaXRpYXRlZCBvbiB0aGUgbGluay4gUENJIEV4cHJlc3MKK2RlZmluZXMgdHdvIGVycm9yIHJlcG9ydGluZyBwYXJhZGlnbXM6IHRoZSBiYXNlbGluZSBjYXBhYmlsaXR5IGFuZAordGhlIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBjYXBhYmlsaXR5LiBUaGUgYmFzZWxpbmUgY2FwYWJpbGl0eSBpcworcmVxdWlyZWQgb2YgYWxsIFBDSSBFeHByZXNzIGNvbXBvbmVudHMgcHJvdmlkaW5nIGEgbWluaW11bSBkZWZpbmVkCitzZXQgb2YgZXJyb3IgcmVwb3J0aW5nIHJlcXVpcmVtZW50cy4gQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nCitjYXBhYmlsaXR5IGlzIGltcGxlbWVudGVkIHdpdGggYSBQQ0kgRXhwcmVzcyBhZHZhbmNlZCBlcnJvciByZXBvcnRpbmcKK2V4dGVuZGVkIGNhcGFiaWxpdHkgc3RydWN0dXJlIHByb3ZpZGluZyBtb3JlIHJvYnVzdCBlcnJvciByZXBvcnRpbmcuCisKK1RoZSBQQ0kgRXhwcmVzcyBBRVIgZHJpdmVyIHByb3ZpZGVzIHRoZSBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IFBDSQorRXhwcmVzcyBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgY2FwYWJpbGl0eS4gVGhlIFBDSSBFeHByZXNzIEFFUgorZHJpdmVyIHByb3ZpZGVzIHRocmVlIGJhc2ljIGZ1bmN0aW9uczoKKworLQlHYXRoZXJzIHRoZSBjb21wcmVoZW5zaXZlIGVycm9yIGluZm9ybWF0aW9uIGlmIGVycm9ycyBvY2N1cnJlZC4KKy0JUmVwb3J0cyBlcnJvciB0byB0aGUgdXNlcnMuCistCVBlcmZvcm1zIGVycm9yIHJlY292ZXJ5IGFjdGlvbnMuCisKK0FFUiBkcml2ZXIgb25seSBhdHRhY2hlcyByb290IHBvcnRzIHdoaWNoIHN1cHBvcnQgUENJLUV4cHJlc3MgQUVSCitjYXBhYmlsaXR5LgorCisKKzIuIFVzZXIgR3VpZGUKKworMi4xIEluY2x1ZGUgdGhlIFBDSSBFeHByZXNzIEFFUiBSb290IERyaXZlciBpbnRvIHRoZSBMaW51eCBLZXJuZWwKKworVGhlIFBDSSBFeHByZXNzIEFFUiBSb290IGRyaXZlciBpcyBhIFJvb3QgUG9ydCBzZXJ2aWNlIGRyaXZlciBhdHRhY2hlZAordG8gdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlci4gSWYgYSB1c2VyIHdhbnRzIHRvIHVzZSBpdCwgdGhlIGRyaXZlcgoraGFzIHRvIGJlIGNvbXBpbGVkLiBPcHRpb24gQ09ORklHX1BDSUVBRVIgc3VwcG9ydHMgdGhpcyBjYXBhYmlsaXR5LiBJdAorZGVwZW5kcyBvbiBDT05GSUdfUENJRVBPUlRCVVMsIHNvIHBscy4gc2V0IENPTkZJR19QQ0lFUE9SVEJVUz15IGFuZAorQ09ORklHX1BDSUVBRVIgPSB5LgorCisyLjIgTG9hZCBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBEcml2ZXIKK1RoZXJlIGlzIGEgY2FzZSB3aGVyZSBhIHN5c3RlbSBoYXMgQUVSIHN1cHBvcnQgaW4gQklPUy4gRW5hYmxpbmcgdGhlIEFFUgorUm9vdCBkcml2ZXIgYW5kIGhhdmluZyBBRVIgc3VwcG9ydCBpbiBCSU9TIG1heSByZXN1bHQgdW5wcmVkaWN0YWJsZQorYmVoYXZpb3IuIFRvIGF2b2lkIHRoaXMgY29uZmxpY3QsIGEgc3VjY2Vzc2Z1bCBsb2FkIG9mIHRoZSBBRVIgUm9vdCBkcml2ZXIKK3JlcXVpcmVzIEFDUEkgX09TQyBzdXBwb3J0IGluIHRoZSBCSU9TIHRvIGFsbG93IHRoZSBBRVIgUm9vdCBkcml2ZXIgdG8KK3JlcXVlc3QgZm9yIG5hdGl2ZSBjb250cm9sIG9mIEFFUi4gU2VlIHRoZSBQQ0kgRlcgMy4wIFNwZWNpZmljYXRpb24gZm9yCitkZXRhaWxzIHJlZ2FyZGluZyBPU0MgdXNhZ2UuIEN1cnJlbnRseSwgbG90cyBvZiBmaXJtd2FyZXMgZG9uJ3QgcHJvdmlkZQorX09TQyBzdXBwb3J0IHdoaWxlIHRoZXkgdXNlIFBDSSBFeHByZXNzLiBUbyBzdXBwb3J0IHN1Y2ggZmlybXdhcmVzLAorZm9yY2Vsb2FkLCBhIHBhcmFtZXRlciBvZiB0eXBlIGJvb2wsIGNvdWxkIGVuYWJsZSBBRVIgdG8gY29udGludWUgdG8KK2JlIGluaXRpYXRlZCBhbHRob3VnaCBmaXJtd2FyZXMgaGF2ZSBubyBfT1NDIHN1cHBvcnQuIFRvIGVuYWJsZSB0aGUKK3dhbGthcm91bmQsIHBscy4gYWRkIGFlcmRyaXZlci5mb3JjZWxvYWQ9eSB0byBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIgbGluZQord2hlbiBib290aW5nIGtlcm5lbC4gTm90ZSB0aGF0IGZvcmNlbG9hZD1uIGJ5IGRlZmF1bHQuCisKKzIuMyBBRVIgZXJyb3Igb3V0cHV0CitXaGVuIGEgUENJLUUgQUVSIGVycm9yIGlzIGNhcHR1cmVkLCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgb3V0cHV0ZWQgdG8KK2NvbnNvbGUuIElmIGl0J3MgYSBjb3JyZWN0YWJsZSBlcnJvciwgaXQgaXMgb3V0cHV0ZWQgYXMgYSB3YXJuaW5nLgorT3RoZXJ3aXNlLCBpdCBpcyBwcmludGVkIGFzIGFuIGVycm9yLiBTbyB1c2VycyBjb3VsZCBjaG9vc2UgZGlmZmVyZW50Citsb2cgbGV2ZWwgdG8gZmlsdGVyIG91dCBjb3JyZWN0YWJsZSBlcnJvciBtZXNzYWdlcy4KKworQmVsb3cgc2hvd3MgYW4gZXhhbXBsZS4KKystLS0tLS0gUENJLUV4cHJlc3MgRGV2aWNlIEVycm9yIC0tLS0tKworRXJyb3IgU2V2ZXJpdHkgICAgICAgICAgOiBVbmNvcnJlY3RlZCAoRmF0YWwpCitQQ0lFIEJ1cyBFcnJvciB0eXBlICAgICA6IFRyYW5zYWN0aW9uIExheWVyCitVbnN1cHBvcnRlZCBSZXF1ZXN0ICAgICA6IEZpcnN0CitSZXF1ZXN0ZXIgSUQgICAgICAgICAgICA6IDA1MDAKK1ZlbmRvcklEPTgwODZoLCBEZXZpY2VJRD0wMzI5aCwgQnVzPTA1aCwgRGV2aWNlPTAwaCwgRnVuY3Rpb249MDBoCitUTEIgSGVhZGVyOgorMDQwMDAwMDEgMDAyMDBhMDMgMDUwMTAwMDAgMDAwNTAxMDAKKworSW4gdGhlIGV4YW1wbGUsICdSZXF1ZXN0ZXIgSUQnIG1lYW5zIHRoZSBJRCBvZiB0aGUgZGV2aWNlIHdobyBzZW5kcwordGhlIGVycm9yIG1lc3NhZ2UgdG8gcm9vdCBwb3J0LiBQbHMuIHJlZmVyIHRvIHBjaSBleHByZXNzIHNwZWNzIGZvcgorb3RoZXIgZmllbGRzLgorCisKKzMuIERldmVsb3BlciBHdWlkZQorCitUbyBlbmFibGUgQUVSIGF3YXJlIHN1cHBvcnQgcmVxdWlyZXMgYSBzb2Z0d2FyZSBkcml2ZXIgdG8gY29uZmlndXJlCit0aGUgQUVSIGNhcGFiaWxpdHkgc3RydWN0dXJlIHdpdGhpbiBpdHMgZGV2aWNlIGFuZCB0byBwcm92aWRlIGNhbGxiYWNrcy4KKworVG8gc3VwcG9ydCBBRVIgYmV0dGVyLCBkZXZlbG9wZXJzIG5lZWQgdW5kZXJzdGFuZCBob3cgQUVSIGRvZXMgd29yaworZmlyc3RseS4KKworUENJIEV4cHJlc3MgZXJyb3JzIGFyZSBjbGFzc2lmaWVkIGludG8gdHdvIHR5cGVzOiBjb3JyZWN0YWJsZSBlcnJvcnMKK2FuZCB1bmNvcnJlY3RhYmxlIGVycm9ycy4gVGhpcyBjbGFzc2lmaWNhdGlvbiBpcyBiYXNlZCBvbiB0aGUgaW1wYWN0cworb2YgdGhvc2UgZXJyb3JzLCB3aGljaCBtYXkgcmVzdWx0IGluIGRlZ3JhZGVkIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uCitmYWlsdXJlLgorCitDb3JyZWN0YWJsZSBlcnJvcnMgcG9zZSBubyBpbXBhY3RzIG9uIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZQoraW50ZXJmYWNlLiBUaGUgUENJIEV4cHJlc3MgcHJvdG9jb2wgY2FuIHJlY292ZXIgd2l0aG91dCBhbnkgc29mdHdhcmUKK2ludGVydmVudGlvbiBvciBhbnkgbG9zcyBvZiBkYXRhLiBUaGVzZSBlcnJvcnMgYXJlIGRldGVjdGVkIGFuZAorY29ycmVjdGVkIGJ5IGhhcmR3YXJlLiBVbmxpa2UgY29ycmVjdGFibGUgZXJyb3JzLCB1bmNvcnJlY3RhYmxlCitlcnJvcnMgaW1wYWN0IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGludGVyZmFjZS4gVW5jb3JyZWN0YWJsZSBlcnJvcnMKK2NhbiBjYXVzZSBhIHBhcnRpY3VsYXIgdHJhbnNhY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIFBDSSBFeHByZXNzIGxpbmsKK3RvIGJlIHVucmVsaWFibGUuIERlcGVuZGluZyBvbiB0aG9zZSBlcnJvciBjb25kaXRpb25zLCB1bmNvcnJlY3RhYmxlCitlcnJvcnMgYXJlIGZ1cnRoZXIgY2xhc3NpZmllZCBpbnRvIG5vbi1mYXRhbCBlcnJvcnMgYW5kIGZhdGFsIGVycm9ycy4KK05vbi1mYXRhbCBlcnJvcnMgY2F1c2UgdGhlIHBhcnRpY3VsYXIgdHJhbnNhY3Rpb24gdG8gYmUgdW5yZWxpYWJsZSwKK2J1dCB0aGUgUENJIEV4cHJlc3MgbGluayBpdHNlbGYgaXMgZnVsbHkgZnVuY3Rpb25hbC4gRmF0YWwgZXJyb3JzLCBvbgordGhlIG90aGVyIGhhbmQsIGNhdXNlIHRoZSBsaW5rIHRvIGJlIHVucmVsaWFibGUuCisKK1doZW4gQUVSIGlzIGVuYWJsZWQsIGEgUENJIEV4cHJlc3MgZGV2aWNlIHdpbGwgYXV0b21hdGljYWxseSBzZW5kIGFuCitlcnJvciBtZXNzYWdlIHRvIHRoZSBQQ0lFIHJvb3QgcG9ydCBhYm92ZSBpdCB3aGVuIHRoZSBkZXZpY2UgY2FwdHVyZXMKK2FuIGVycm9yLiBUaGUgUm9vdCBQb3J0LCB1cG9uIHJlY2VpdmluZyBhbiBlcnJvciByZXBvcnRpbmcgbWVzc2FnZSwKK2ludGVybmFsbHkgcHJvY2Vzc2VzIGFuZCBsb2dzIHRoZSBlcnJvciBtZXNzYWdlIGluIGl0cyBQQ0kgRXhwcmVzcworY2FwYWJpbGl0eSBzdHJ1Y3R1cmUuIEVycm9yIGluZm9ybWF0aW9uIGJlaW5nIGxvZ2dlZCBpbmNsdWRlcyBzdG9yaW5nCit0aGUgZXJyb3IgcmVwb3J0aW5nIGFnZW50J3MgcmVxdWVzdG9yIElEIGludG8gdGhlIEVycm9yIFNvdXJjZQorSWRlbnRpZmljYXRpb24gUmVnaXN0ZXJzIGFuZCBzZXR0aW5nIHRoZSBlcnJvciBiaXRzIG9mIHRoZSBSb290IEVycm9yCitTdGF0dXMgUmVnaXN0ZXIgYWNjb3JkaW5nbHkuIElmIEFFUiBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCBpbiBSb290CitFcnJvciBDb21tYW5kIFJlZ2lzdGVyLCB0aGUgUm9vdCBQb3J0IGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgaWYgYW4KK2Vycm9yIGlzIGRldGVjdGVkLgorCitOb3RlIHRoYXQgdGhlIGVycm9ycyBhcyBkZXNjcmliZWQgYWJvdmUgYXJlIHJlbGF0ZWQgdG8gdGhlIFBDSSBFeHByZXNzCitoaWVyYXJjaHkgYW5kIGxpbmtzLiBUaGVzZSBlcnJvcnMgZG8gbm90IGluY2x1ZGUgYW55IGRldmljZSBzcGVjaWZpYworZXJyb3JzIGJlY2F1c2UgZGV2aWNlIHNwZWNpZmljIGVycm9ycyB3aWxsIHN0aWxsIGdldCBzZW50IGRpcmVjdGx5IHRvCit0aGUgZGV2aWNlIGRyaXZlci4KKworMy4xIENvbmZpZ3VyZSB0aGUgQUVSIGNhcGFiaWxpdHkgc3RydWN0dXJlCisKK0FFUiBhd2FyZSBkcml2ZXJzIG9mIFBDSSBFeHByZXNzIGNvbXBvbmVudCBuZWVkIGNoYW5nZSB0aGUgZGV2aWNlCitjb250cm9sIHJlZ2lzdGVycyB0byBlbmFibGUgQUVSLiBUaGV5IGFsc28gY291bGQgY2hhbmdlIEFFUiByZWdpc3RlcnMsCitpbmNsdWRpbmcgbWFzayBhbmQgc2V2ZXJpdHkgcmVnaXN0ZXJzLiBIZWxwZXIgZnVuY3Rpb24KK3BjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgY291bGQgYmUgdXNlZCB0byBlbmFibGUgQUVSLiBTZWUKK3NlY3Rpb24gMy4zLgorCiszLjIuIFByb3ZpZGUgY2FsbGJhY2tzCisKKzMuMi4xIGNhbGxiYWNrIHJlc2V0X2xpbmsgdG8gcmVzZXQgcGNpIGV4cHJlc3MgbGluaworCitUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVzZXQgdGhlIHBjaSBleHByZXNzIHBoeXNpY2FsIGxpbmsgd2hlbiBhCitmYXRhbCBlcnJvciBoYXBwZW5zLiBUaGUgcm9vdCBwb3J0IGFlciBzZXJ2aWNlIGRyaXZlciBwcm92aWRlcyBhCitkZWZhdWx0IHJlc2V0X2xpbmsgZnVuY3Rpb24sIGJ1dCBkaWZmZXJlbnQgdXBzdHJlYW0gcG9ydHMgbWlnaHQKK2hhdmUgZGlmZmVyZW50IHNwZWNpZmljYXRpb25zIHRvIHJlc2V0IHBjaSBleHByZXNzIGxpbmssIHNvIGFsbAordXBzdHJlYW0gcG9ydHMgc2hvdWxkIHByb3ZpZGUgdGhlaXIgb3duIHJlc2V0X2xpbmsgZnVuY3Rpb25zLgorCitJbiBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyLCBhIG5ldyBwb2ludGVyLCByZXNldF9saW5rLCBpcworYWRkZWQuCisKK3BjaV9lcnNfcmVzdWx0X3QgKCpyZXNldF9saW5rKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK1NlY3Rpb24gMy4yLjIuMiBwcm92aWRlcyBtb3JlIGRldGFpbGVkIGluZm8gb24gd2hlbiB0byBjYWxsCityZXNldF9saW5rLgorCiszLjIuMiBQQ0kgZXJyb3ItcmVjb3ZlcnkgY2FsbGJhY2tzCisKK1RoZSBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBkcml2ZXIgdXNlcyBlcnJvciBjYWxsYmFja3MgdG8gY29vcmRpbmF0ZQord2l0aCBkb3duc3RyZWFtIGRldmljZSBkcml2ZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGhpZXJhcmNoeSBpbiBxdWVzdGlvbgord2hlbiBwZXJmb3JtaW5nIGVycm9yIHJlY292ZXJ5IGFjdGlvbnMuCisKK0RhdGEgc3RydWN0IHBjaV9kcml2ZXIgaGFzIGEgcG9pbnRlciwgZXJyX2hhbmRsZXIsIHRvIHBvaW50IHRvCitwY2lfZXJyb3JfaGFuZGxlcnMgd2hvIGNvbnNpc3RzIG9mIGEgY291cGxlIG9mIGNhbGxiYWNrIGZ1bmN0aW9uCitwb2ludGVycy4gQUVSIGRyaXZlciBmb2xsb3dzIHRoZSBydWxlcyBkZWZpbmVkIGluCitwY2ktZXJyb3ItcmVjb3ZlcnkudHh0IGV4Y2VwdCBwY2kgZXhwcmVzcyBzcGVjaWZpYyBwYXJ0cyAoZS5nLgorcmVzZXRfbGluaykuIFBscy4gcmVmZXIgdG8gcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBmb3IgZGV0YWlsZWQKK2RlZmluaXRpb25zIG9mIHRoZSBjYWxsYmFja3MuCisKK0JlbG93IHNlY3Rpb25zIHNwZWNpZnkgd2hlbiB0byBjYWxsIHRoZSBlcnJvciBjYWxsYmFjayBmdW5jdGlvbnMuCisKKzMuMi4yLjEgQ29ycmVjdGFibGUgZXJyb3JzCisKK0NvcnJlY3RhYmxlIGVycm9ycyBwb3NlIG5vIGltcGFjdHMgb24gdGhlIGZ1bmN0aW9uYWxpdHkgb2YKK3RoZSBpbnRlcmZhY2UuIFRoZSBQQ0kgRXhwcmVzcyBwcm90b2NvbCBjYW4gcmVjb3ZlciB3aXRob3V0IGFueQorc29mdHdhcmUgaW50ZXJ2ZW50aW9uIG9yIGFueSBsb3NzIG9mIGRhdGEuIFRoZXNlIGVycm9ycyBkbyBub3QKK3JlcXVpcmUgYW55IHJlY292ZXJ5IGFjdGlvbnMuIFRoZSBBRVIgZHJpdmVyIGNsZWFycyB0aGUgZGV2aWNlJ3MKK2NvcnJlY3RhYmxlIGVycm9yIHN0YXR1cyByZWdpc3RlciBhY2NvcmRpbmdseSBhbmQgbG9ncyB0aGVzZSBlcnJvcnMuCisKKzMuMi4yLjIgTm9uLWNvcnJlY3RhYmxlIChub24tZmF0YWwgYW5kIGZhdGFsKSBlcnJvcnMKKworSWYgYW4gZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgYSBub24tZmF0YWwgZXJyb3IsIHBlcmZvcm1pbmcgbGluayByZXNldAorYXQgdXBzdHJlYW0gaXMgbm90IHJlcXVpcmVkLiBUaGUgQUVSIGRyaXZlciBjYWxscyBlcnJvcl9kZXRlY3RlZChkZXYsCitwY2lfY2hhbm5lbF9pb19ub3JtYWwpIHRvIGFsbCBkcml2ZXJzIGFzc29jaWF0ZWQgd2l0aGluIGEgaGllcmFyY2h5IGluCitxdWVzdGlvbi4gZm9yIGV4YW1wbGUsCitFbmRQb2ludDw9PT5Eb3duc3RyZWFtUG9ydCBCPD09PlVwc3RyZWFtUG9ydCBBPD09PlJvb3RQb3J0LgorSWYgVXBzdHJlYW0gcG9ydCBBIGNhcHR1cmVzIGFuIEFFUiBlcnJvciwgdGhlIGhpZXJhcmNoeSBjb25zaXN0cyBvZgorRG93bnN0cmVhbSBwb3J0IEIgYW5kIEVuZFBvaW50LgorCitBIGRyaXZlciBtYXkgcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSLAorUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCwgb3IgUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCwgZGVwZW5kaW5nIG9uCit3aGV0aGVyIGl0IGNhbiByZWNvdmVyIG9yIHRoZSBBRVIgZHJpdmVyIGNhbGxzIG1taW9fZW5hYmxlZCBhcyBuZXh0LgorCitJZiBhbiBlcnJvciBtZXNzYWdlIGluZGljYXRlcyBhIGZhdGFsIGVycm9yLCBrZXJuZWwgd2lsbCBicm9hZGNhc3QKK2Vycm9yX2RldGVjdGVkKGRldiwgcGNpX2NoYW5uZWxfaW9fZnJvemVuKSB0byBhbGwgZHJpdmVycyB3aXRoaW4KK2EgaGllcmFyY2h5IGluIHF1ZXN0aW9uLiBUaGVuLCBwZXJmb3JtaW5nIGxpbmsgcmVzZXQgYXQgdXBzdHJlYW0gaXMKK25lY2Vzc2FyeS4gQXMgZGlmZmVyZW50IGtpbmRzIG9mIGRldmljZXMgbWlnaHQgdXNlIGRpZmZlcmVudCBhcHByb2FjaGVzCit0byByZXNldCBsaW5rLCBBRVIgcG9ydCBzZXJ2aWNlIGRyaXZlciBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRoZQorZnVuY3Rpb24gdG8gcmVzZXQgbGluay4gRmlyc3RseSwga2VybmVsIGxvb2tzIGZvciBpZiB0aGUgdXBzdHJlYW0KK2NvbXBvbmVudCBoYXMgYW4gYWVyIGRyaXZlci4gSWYgaXQgaGFzLCBrZXJuZWwgdXNlcyB0aGUgcmVzZXRfbGluaworY2FsbGJhY2sgb2YgdGhlIGFlciBkcml2ZXIuIElmIHRoZSB1cHN0cmVhbSBjb21wb25lbnQgaGFzIG5vIGFlciBkcml2ZXIKK2FuZCB0aGUgcG9ydCBpcyBkb3duc3RyZWFtIHBvcnQsIHdlIHdpbGwgdXNlIHRoZSBhZXIgZHJpdmVyIG9mIHRoZQorcm9vdCBwb3J0IHdobyByZXBvcnRzIHRoZSBBRVIgZXJyb3IuIEFzIGZvciB1cHN0cmVhbSBwb3J0cywKK3RoZXkgc2hvdWxkIHByb3ZpZGUgdGhlaXIgb3duIGFlciBzZXJ2aWNlIGRyaXZlcnMgd2l0aCByZXNldF9saW5rCitmdW5jdGlvbi4gSWYgZXJyb3JfZGV0ZWN0ZWQgcmV0dXJucyBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUiBhbmQKK3Jlc2V0X2xpbmsgcmV0dXJucyBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQsIHRoZSBlcnJvciBoYW5kbGluZyBnb2VzCit0byBtbWlvX2VuYWJsZWQuCisKKzMuMyBoZWxwZXIgZnVuY3Rpb25zCisKKzMuMy4xIGludCBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3BjaV9maW5kX2Flcl9jYXBhYmlsaXR5IGxvY2F0ZXMgdGhlIFBDSSBFeHByZXNzIEFFUiBjYXBhYmlsaXR5CitpbiB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIElmIHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0CitQQ0ktRXhwcmVzcyBBRVIsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuCisKKzMuMy4yIGludCBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBlbmFibGVzIHRoZSBkZXZpY2UgdG8gc2VuZCBlcnJvcgorbWVzc2FnZXMgdG8gcm9vdCBwb3J0IHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuIE5vdGUgdGhhdCBkZXZpY2VzCitkb24ndCBlbmFibGUgdGhlIGVycm9yIHJlcG9ydGluZyBieSBkZWZhdWx0LCBzbyBkZXZpY2UgZHJpdmVycyBuZWVkCitjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIGl0LgorCiszLjMuMyBpbnQgcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CitwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBkaXNhYmxlcyB0aGUgZGV2aWNlIHRvIHNlbmQgZXJyb3IKK21lc3NhZ2VzIHRvIHJvb3QgcG9ydCB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLgorCiszLjMuNCBpbnQgcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7CitwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyBjbGVhbnVwcyB0aGUgdW5jb3JyZWN0YWJsZQorZXJyb3Igc3RhdHVzIHJlZ2lzdGVyLgorCiszLjQgRnJlcXVlbnQgQXNrZWQgUXVlc3Rpb25zCisKK1E6IFdoYXQgaGFwcGVucyBpZiBhIFBDSSBFeHByZXNzIGRldmljZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZSBhbgorZXJyb3IgcmVjb3ZlcnkgaGFuZGxlciAocGNpX2RyaXZlci0+ZXJyX2hhbmRsZXIgaXMgZXF1YWwgdG8gTlVMTCk/CisKK0E6IFRoZSBkZXZpY2VzIGF0dGFjaGVkIHdpdGggdGhlIGRyaXZlciB3b24ndCBiZSByZWNvdmVyZWQuIElmIHRoZQorZXJyb3IgaXMgZmF0YWwsIGtlcm5lbCB3aWxsIHByaW50IG91dCB3YXJuaW5nIG1lc3NhZ2VzLiBQbGVhc2UgcmVmZXIKK3RvIHNlY3Rpb24gMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworUTogV2hhdCBoYXBwZW5zIGlmIGFuIHVwc3RyZWFtIHBvcnQgc2VydmljZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZQorY2FsbGJhY2sgcmVzZXRfbGluaz8KKworQTogRmF0YWwgZXJyb3IgcmVjb3Zlcnkgd2lsbCBmYWlsIGlmIHRoZSBlcnJvcnMgYXJlIHJlcG9ydGVkIGJ5IHRoZQordXBzdHJlYW0gcG9ydHMgd2hvIGFyZSBhdHRhY2hlZCBieSB0aGUgc2VydmljZSBkcml2ZXIuCisKK1E6IEhvdyBkb2VzIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgZGVhbCB3aXRoIGRyaXZlciB0aGF0IGlzIG5vdCBQQ0kKK0V4cHJlc3MgYXdhcmU/CisKK0E6IFRoaXMgaW5mcmFzdHJ1Y3R1cmUgY2FsbHMgdGhlIGVycm9yIGNhbGxiYWNrIGZ1bmN0aW9ucyBvZiB0aGUKK2RyaXZlciB3aGVuIGFuIGVycm9yIGhhcHBlbnMuIEJ1dCBpZiB0aGUgZHJpdmVyIGlzIG5vdCBhd2FyZSBvZgorUENJIEV4cHJlc3MsIHRoZSBkZXZpY2UgbWlnaHQgbm90IHJlcG9ydCBpdHMgb3duIGVycm9ycyB0byByb290Citwb3J0LgorCitROiBXaGF0IG1vZGlmaWNhdGlvbnMgd2lsbCB0aGF0IGRyaXZlciBuZWVkIHRvIG1ha2UgaXQgY29tcGF0aWJsZQord2l0aCB0aGUgUENJIEV4cHJlc3MgQUVSIFJvb3QgZHJpdmVyPworCitBOiBJdCBjb3VsZCBjYWxsIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGVuYWJsZSBBRVIgaW4gZGV2aWNlcyBhbmQKK2NsZWFudXAgdW5jb3JyZWN0YWJsZSBzdGF0dXMgcmVnaXN0ZXIuIFBscy4gcmVmZXIgdG8gc2VjdGlvbiAzLjMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUENJRUJVUy1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSUVCVVMtSE9XVE8udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTNmNDJhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vUENJRUJVUy1IT1dUTy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotCQlUaGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyIEd1aWRlIEhPV1RPCi0JVG9tIEwgTmd1eWVuIHRvbS5sLm5ndXllbkBpbnRlbC5jb20KLQkJCTExLzAzLzIwMDQKLQotMS4gQWJvdXQgdGhpcyBndWlkZQotCi1UaGlzIGd1aWRlIGRlc2NyaWJlcyB0aGUgYmFzaWNzIG9mIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIKLWFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZW5hYmxlIHRoZSBzZXJ2aWNlIGRyaXZlcnMgdG8KLXJlZ2lzdGVyL3VucmVnaXN0ZXIgd2l0aCB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyLgotCi0yLiBDb3B5cmlnaHQgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbgotCi0zLiBXaGF0IGlzIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIKLQotQSBQQ0kgRXhwcmVzcyBQb3J0IGlzIGEgbG9naWNhbCBQQ0ktUENJIEJyaWRnZSBzdHJ1Y3R1cmUuIFRoZXJlCi1hcmUgdHdvIHR5cGVzIG9mIFBDSSBFeHByZXNzIFBvcnQ6IHRoZSBSb290IFBvcnQgYW5kIHRoZSBTd2l0Y2gKLVBvcnQuIFRoZSBSb290IFBvcnQgb3JpZ2luYXRlcyBhIFBDSSBFeHByZXNzIGxpbmsgZnJvbSBhIFBDSSBFeHByZXNzCi1Sb290IENvbXBsZXggYW5kIHRoZSBTd2l0Y2ggUG9ydCBjb25uZWN0cyBQQ0kgRXhwcmVzcyBsaW5rcyB0bwotaW50ZXJuYWwgbG9naWNhbCBQQ0kgYnVzZXMuIFRoZSBTd2l0Y2ggUG9ydCwgd2hpY2ggaGFzIGl0cyBzZWNvbmRhcnkKLWJ1cyByZXByZXNlbnRpbmcgdGhlIHN3aXRjaCdzIGludGVybmFsIHJvdXRpbmcgbG9naWMsIGlzIGNhbGxlZCB0aGUKLXN3aXRjaCdzIFVwc3RyZWFtIFBvcnQuIFRoZSBzd2l0Y2gncyBEb3duc3RyZWFtIFBvcnQgaXMgYnJpZGdpbmcgZnJvbQotc3dpdGNoJ3MgaW50ZXJuYWwgcm91dGluZyBidXMgdG8gYSBidXMgcmVwcmVzZW50aW5nIHRoZSBkb3duc3RyZWFtCi1QQ0kgRXhwcmVzcyBsaW5rIGZyb20gdGhlIFBDSSBFeHByZXNzIFN3aXRjaC4KLQotQSBQQ0kgRXhwcmVzcyBQb3J0IGNhbiBwcm92aWRlIHVwIHRvIGZvdXIgZGlzdGluY3QgZnVuY3Rpb25zLAotcmVmZXJyZWQgdG8gaW4gdGhpcyBkb2N1bWVudCBhcyBzZXJ2aWNlcywgZGVwZW5kaW5nIG9uIGl0cyBwb3J0IHR5cGUuCi1QQ0kgRXhwcmVzcyBQb3J0J3Mgc2VydmljZXMgaW5jbHVkZSBuYXRpdmUgaG90cGx1ZyBzdXBwb3J0IChIUCksCi1wb3dlciBtYW5hZ2VtZW50IGV2ZW50IHN1cHBvcnQgKFBNRSksIGFkdmFuY2VkIGVycm9yIHJlcG9ydGluZwotc3VwcG9ydCAoQUVSKSwgYW5kIHZpcnR1YWwgY2hhbm5lbCBzdXBwb3J0IChWQykuIFRoZXNlIHNlcnZpY2VzIG1heQotYmUgaGFuZGxlZCBieSBhIHNpbmdsZSBjb21wbGV4IGRyaXZlciBvciBiZSBpbmRpdmlkdWFsbHkgZGlzdHJpYnV0ZWQKLWFuZCBoYW5kbGVkIGJ5IGNvcnJlc3BvbmRpbmcgc2VydmljZSBkcml2ZXJzLgotCi00LiBXaHkgdXNlIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXI/Ci0KLUluIGV4aXN0aW5nIExpbnV4IGtlcm5lbHMsIHRoZSBMaW51eCBEZXZpY2UgRHJpdmVyIE1vZGVsIGFsbG93cyBhCi1waHlzaWNhbCBkZXZpY2UgdG8gYmUgaGFuZGxlZCBieSBvbmx5IGEgc2luZ2xlIGRyaXZlci4gVGhlIFBDSQotRXhwcmVzcyBQb3J0IGlzIGEgUENJLVBDSSBCcmlkZ2UgZGV2aWNlIHdpdGggbXVsdGlwbGUgZGlzdGluY3QKLXNlcnZpY2VzLiBUbyBtYWludGFpbiBhIGNsZWFuIGFuZCBzaW1wbGUgc29sdXRpb24gZWFjaCBzZXJ2aWNlCi1tYXkgaGF2ZSBpdHMgb3duIHNvZnR3YXJlIHNlcnZpY2UgZHJpdmVyLiBJbiB0aGlzIGNhc2Ugc2V2ZXJhbAotc2VydmljZSBkcml2ZXJzIHdpbGwgY29tcGV0ZSBmb3IgYSBzaW5nbGUgUENJLVBDSSBCcmlkZ2UgZGV2aWNlLgotRm9yIGV4YW1wbGUsIGlmIHRoZSBQQ0kgRXhwcmVzcyBSb290IFBvcnQgbmF0aXZlIGhvdHBsdWcgc2VydmljZQotZHJpdmVyIGlzIGxvYWRlZCBmaXJzdCwgaXQgY2xhaW1zIGEgUENJLVBDSSBCcmlkZ2UgUm9vdCBQb3J0LiBUaGUKLWtlcm5lbCB0aGVyZWZvcmUgZG9lcyBub3QgbG9hZCBvdGhlciBzZXJ2aWNlIGRyaXZlcnMgZm9yIHRoYXQgUm9vdAotUG9ydC4gSW4gb3RoZXIgd29yZHMsIGl0IGlzIGltcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBzZXJ2aWNlCi1kcml2ZXJzIGxvYWQgYW5kIHJ1biBvbiBhIFBDSS1QQ0kgQnJpZGdlIGRldmljZSBzaW11bHRhbmVvdXNseQotdXNpbmcgdGhlIGN1cnJlbnQgZHJpdmVyIG1vZGVsLgotCi1UbyBlbmFibGUgbXVsdGlwbGUgc2VydmljZSBkcml2ZXJzIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkgcmVxdWlyZXMKLWhhdmluZyBhIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlciwgd2hpY2ggbWFuYWdlcyBhbGwgcG9wdWxhdGVkCi1QQ0kgRXhwcmVzcyBQb3J0cyBhbmQgZGlzdHJpYnV0ZXMgYWxsIHByb3ZpZGVkIHNlcnZpY2UgcmVxdWVzdHMKLXRvIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZpY2UgZHJpdmVycyBhcyByZXF1aXJlZC4gU29tZSBrZXkKLWFkdmFudGFnZXMgb2YgdXNpbmcgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlciBhcmUgbGlzdGVkIGJlbG93OgotCi0JLSBBbGxvdyBtdWx0aXBsZSBzZXJ2aWNlIGRyaXZlcnMgdG8gcnVuIHNpbXVsdGFuZW91c2x5IG9uCi0JICBhIFBDSS1QQ0kgQnJpZGdlIFBvcnQgZGV2aWNlLgotCi0JLSBBbGxvdyBzZXJ2aWNlIGRyaXZlcnMgaW1wbGVtZW50ZWQgaW4gYW4gaW5kZXBlbmRlbnQKLQkgIHN0YWdlZCBhcHByb2FjaC4KLQkKLQktIEFsbG93IG9uZSBzZXJ2aWNlIGRyaXZlciB0byBydW4gb24gbXVsdGlwbGUgUENJLVBDSSBCcmlkZ2UKLQkgIFBvcnQgZGV2aWNlcy4gCi0KLQktIE1hbmFnZSBhbmQgZGlzdHJpYnV0ZSByZXNvdXJjZXMgb2YgYSBQQ0ktUENJIEJyaWRnZSBQb3J0Ci0JICBkZXZpY2UgdG8gcmVxdWVzdGVkIHNlcnZpY2UgZHJpdmVycy4KLQotNS4gQ29uZmlndXJpbmcgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlciB2cy4gU2VydmljZSBEcml2ZXJzCi0KLTUuMSBJbmNsdWRpbmcgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlciBTdXBwb3J0IGludG8gdGhlIEtlcm5lbAotCi1JbmNsdWRpbmcgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlciBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIFBDSQotRXhwcmVzcyBzdXBwb3J0IGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGUga2VybmVsIHdpbGwKLWF1dG9tYXRpY2FsbHkgaW5jbHVkZSB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIGFzIGEga2VybmVsCi1kcml2ZXIgd2hlbiB0aGUgUENJIEV4cHJlc3Mgc3VwcG9ydCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwuCi0KLTUuMiBFbmFibGluZyBTZXJ2aWNlIERyaXZlciBTdXBwb3J0Ci0KLVBDSSBkZXZpY2UgZHJpdmVycyBhcmUgaW1wbGVtZW50ZWQgYmFzZWQgb24gTGludXggRGV2aWNlIERyaXZlciBNb2RlbC4KLUFsbCBzZXJ2aWNlIGRyaXZlcnMgYXJlIFBDSSBkZXZpY2UgZHJpdmVycy4gQXMgZGlzY3Vzc2VkIGFib3ZlLCBpdCBpcwotaW1wb3NzaWJsZSB0byBsb2FkIGFueSBzZXJ2aWNlIGRyaXZlciBvbmNlIHRoZSBrZXJuZWwgaGFzIGxvYWRlZCB0aGUKLVBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlci4gVG8gbWVldCB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyCi1Nb2RlbCByZXF1aXJlcyBzb21lIG1pbmltYWwgY2hhbmdlcyBvbiBleGlzdGluZyBzZXJ2aWNlIGRyaXZlcnMgdGhhdAotaW1wb3NlcyBubyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZXhpc3Rpbmcgc2VydmljZSBkcml2ZXJzLgotCi1BIHNlcnZpY2UgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgdHdvIEFQSXMgc2hvd24gYmVsb3cgdG8KLXJlZ2lzdGVyIGl0cyBzZXJ2aWNlIHdpdGggdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlciAoc2VlIAotc2VjdGlvbiA1LjIuMSAmIDUuMi4yKS4gSXQgaXMgaW1wb3J0YW50IHRoYXQgYSBzZXJ2aWNlIGRyaXZlcgotaW5pdGlhbGl6ZXMgdGhlIHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBkYXRhIHN0cnVjdHVyZSwgaW5jbHVkZWQgaW4KLWhlYWRlciBmaWxlIC9pbmNsdWRlL2xpbnV4L3BjaWVwb3J0X2lmLmgsIGJlZm9yZSBjYWxsaW5nIHRoZXNlIEFQSXMuCi1GYWlsdXJlIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGFuIGlkZW50aXR5IG1pc21hdGNoLCB3aGljaCBwcmV2ZW50cwotdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlciBmcm9tIGxvYWRpbmcgYSBzZXJ2aWNlIGRyaXZlci4KLQotNS4yLjEgcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIKLQotaW50IHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKm5ldykKLQotVGhpcyBBUEkgcmVwbGFjZXMgdGhlIExpbnV4IERyaXZlciBNb2RlbCdzIHBjaV9tb2R1bGVfaW5pdCBBUEkuIEEKLXNlcnZpY2UgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbHMgcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIgYXQKLW1vZHVsZSBpbml0LiBOb3RlIHRoYXQgYWZ0ZXIgc2VydmljZSBkcml2ZXIgYmVpbmcgbG9hZGVkLCBjYWxscwotc3VjaCBhcyBwY2lfZW5hYmxlX2RldmljZShkZXYpIGFuZCBwY2lfc2V0X21hc3RlcihkZXYpIGFyZSBubyBsb25nZXIKLW5lY2Vzc2FyeSBzaW5jZSB0aGVzZSBjYWxscyBhcmUgZXhlY3V0ZWQgYnkgdGhlIFBDSSBQb3J0IEJ1cyBkcml2ZXIuCi0KLTUuMi4yIHBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIKLQotdm9pZCBwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyKHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKm5ldykKLQotcGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlciByZXBsYWNlcyB0aGUgTGludXggRHJpdmVyIE1vZGVsJ3MKLXBjaV91bnJlZ2lzdGVyX2RyaXZlci4gSXQncyBhbHdheXMgY2FsbGVkIGJ5IHNlcnZpY2UgZHJpdmVyIHdoZW4gYQotbW9kdWxlIGV4aXRzLgotCi01LjIuMyBTYW1wbGUgQ29kZQotCi1CZWxvdyBpcyBzYW1wbGUgc2VydmljZSBkcml2ZXIgY29kZSB0byBpbml0aWFsaXplIHRoZSBwb3J0IHNlcnZpY2UKLWRyaXZlciBkYXRhIHN0cnVjdHVyZS4KLQotc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCBzZXJ2aWNlX2lkW10gPSB7IHsKLQkudmVuZG9yID0gUENJX0FOWV9JRCwKLQkuZGV2aWNlID0gUENJX0FOWV9JRCwKLQkucG9ydF90eXBlID0gUENJRV9SQ19QT1JULAotCS5zZXJ2aWNlX3R5cGUgPSBQQ0lFX1BPUlRfU0VSVklDRV9BRVIsCi0JfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQotfTsKLQotc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgcm9vdF9hZXJkcnYgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKilkZXZpY2VfbmFtZSwKLQkuaWRfdGFibGUJPSAmc2VydmljZV9pZFswXSwKLQotCS5wcm9iZQkJPSBhZXJkcnZfbG9hZCwKLQkucmVtb3ZlCQk9IGFlcmRydl91bmxvYWQsCi0KLQkuc3VzcGVuZAk9IGFlcmRydl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gYWVyZHJ2X3Jlc3VtZSwKLX07Ci0KLUJlbG93IGlzIGEgc2FtcGxlIGNvZGUgZm9yIHJlZ2lzdGVyaW5nL3VucmVnaXN0ZXJpbmcgYSBzZXJ2aWNlCi1kcml2ZXIuCi0KLXN0YXRpYyBpbnQgX19pbml0IGFlcmRydl9zZXJ2aWNlX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQkKLQlyZXR2YWwgPSBwY2llX3BvcnRfc2VydmljZV9yZWdpc3Rlcigmcm9vdF9hZXJkcnYpOwotCWlmICghcmV0dmFsKSB7Ci0JCS8qCi0JCSAqIEZJWCBNRQotCQkgKi8KLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFlcmRydl9zZXJ2aWNlX2V4aXQodm9pZCkgCi17Ci0JcGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3Rlcigmcm9vdF9hZXJkcnYpOwotfQotCi1tb2R1bGVfaW5pdChhZXJkcnZfc2VydmljZV9pbml0KTsKLW1vZHVsZV9leGl0KGFlcmRydl9zZXJ2aWNlX2V4aXQpOwotCi02LiBQb3NzaWJsZSBSZXNvdXJjZSBDb25mbGljdHMKLQotU2luY2UgYWxsIHNlcnZpY2UgZHJpdmVycyBvZiBhIFBDSS1QQ0kgQnJpZGdlIFBvcnQgZGV2aWNlIGFyZQotYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzbHksIGJlbG93IGxpc3RzIGEgZmV3IG9mIHBvc3NpYmxlIHJlc291cmNlCi1jb25mbGljdHMgd2l0aCBwcm9wb3NlZCBzb2x1dGlvbnMuCi0KLTYuMSBNU0kgVmVjdG9yIFJlc291cmNlCi0KLVRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgZW5hYmxlcyBhIGRldmljZSBzb2Z0d2FyZSBkcml2ZXIgdG8gY2FsbAotcGNpX2VuYWJsZV9tc2kgdG8gcmVxdWVzdCBNU0kgYmFzZWQgaW50ZXJydXB0cy4gT25jZSBNU0kgaW50ZXJydXB0cwotYXJlIGVuYWJsZWQgb24gYSBkZXZpY2UsIGl0IHN0YXlzIGluIHRoaXMgbW9kZSB1bnRpbCBhIGRldmljZSBkcml2ZXIKLWNhbGxzIHBjaV9kaXNhYmxlX21zaSB0byBkaXNhYmxlIE1TSSBpbnRlcnJ1cHRzIGFuZCByZXZlcnQgYmFjayB0bwotSU5UeCBlbXVsYXRpb24gbW9kZS4gU2luY2Ugc2VydmljZSBkcml2ZXJzIG9mIHRoZSBzYW1lIFBDSS1QQ0kgQnJpZGdlCi1wb3J0IHNoYXJlIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZSwgaWYgYW4gaW5kaXZpZHVhbCBzZXJ2aWNlIGRyaXZlcgotY2FsbHMgcGNpX2VuYWJsZV9tc2kvcGNpX2Rpc2FibGVfbXNpIGl0IG1heSByZXN1bHQgdW5wcmVkaWN0YWJsZQotYmVoYXZpb3IuIEZvciBleGFtcGxlLCB0d28gc2VydmljZSBkcml2ZXJzIHJ1biBzaW11bHRhbmVvdXNseSBvbiB0aGUKLXNhbWUgcGh5c2ljYWwgUm9vdCBQb3J0LiBCb3RoIHNlcnZpY2UgZHJpdmVycyBjYWxsIHBjaV9lbmFibGVfbXNpIHRvCi1yZXF1ZXN0IE1TSSBiYXNlZCBpbnRlcnJ1cHRzLiBBIHNlcnZpY2UgZHJpdmVyIG1heSBub3Qga25vdyB3aGV0aGVyCi1hbnkgb3RoZXIgc2VydmljZSBkcml2ZXJzIGhhdmUgcnVuIG9uIHRoaXMgUm9vdCBQb3J0LiBJZiBlaXRoZXIgb25lCi1vZiB0aGVtIGNhbGxzIHBjaV9kaXNhYmxlX21zaSwgaXQgcHV0cyB0aGUgb3RoZXIgc2VydmljZSBkcml2ZXIKLWluIGEgd3JvbmcgaW50ZXJydXB0IG1vZGUuIAotCi1UbyBhdm9pZCB0aGlzIHNpdHVhdGlvbiBhbGwgc2VydmljZSBkcml2ZXJzIGFyZSBub3QgcGVybWl0dGVkIHRvCi1zd2l0Y2ggaW50ZXJydXB0IG1vZGUgb24gaXRzIGRldmljZS4gVGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlcgotaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBpbnRlcnJ1cHQgbW9kZSBhbmQgdGhpcyBzaG91bGQgYmUKLXRyYW5zcGFyZW50IHRvIHNlcnZpY2UgZHJpdmVycy4gU2VydmljZSBkcml2ZXJzIG5lZWQgdG8ga25vdyBvbmx5Ci10aGUgdmVjdG9yIElSUSBhc3NpZ25lZCB0byB0aGUgZmllbGQgaXJxIG9mIHN0cnVjdCBwY2llX2RldmljZSwgd2hpY2gKLWlzIHBhc3NlZCBpbiB3aGVuIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgcHJvYmVzIGVhY2ggc2VydmljZQotZHJpdmVyLiBTZXJ2aWNlIGRyaXZlcnMgc2hvdWxkIHVzZSAoc3RydWN0IHBjaWVfZGV2aWNlKilkZXYtPmlycSB0bwotY2FsbCByZXF1ZXN0X2lycS9mcmVlX2lycS4gSW4gYWRkaXRpb24sIHRoZSBpbnRlcnJ1cHQgbW9kZSBpcyBzdG9yZWQKLWluIHRoZSBmaWVsZCBpbnRlcnJ1cHRfbW9kZSBvZiBzdHJ1Y3QgcGNpZV9kZXZpY2UuCi0KLTYuMiBNU0ktWCBWZWN0b3IgUmVzb3VyY2VzCi0KLVNpbWlsYXIgdG8gdGhlIE1TSSBhIGRldmljZSBkcml2ZXIgZm9yIGFuIE1TSS1YIGNhcGFibGUgZGV2aWNlIGNhbgotY2FsbCBwY2lfZW5hYmxlX21zaXggdG8gcmVxdWVzdCBNU0ktWCBpbnRlcnJ1cHRzLiBBbGwgc2VydmljZSBkcml2ZXJzCi1hcmUgbm90IHBlcm1pdHRlZCB0byBzd2l0Y2ggaW50ZXJydXB0IG1vZGUgb24gaXRzIGRldmljZS4gVGhlIFBDSQotRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBpbnRlcnJ1cHQKLW1vZGUgYW5kIHRoaXMgc2hvdWxkIGJlIHRyYW5zcGFyZW50IHRvIHNlcnZpY2UgZHJpdmVycy4gQW55IGF0dGVtcHQKLWJ5IHNlcnZpY2UgZHJpdmVyIHRvIGNhbGwgcGNpX2VuYWJsZV9tc2l4L3BjaV9kaXNhYmxlX21zaXggbWF5Ci1yZXN1bHQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gU2VydmljZSBkcml2ZXJzIHNob3VsZCB1c2UKLShzdHJ1Y3QgcGNpZV9kZXZpY2UqKWRldi0+aXJxIGFuZCBjYWxsIHJlcXVlc3RfaXJxL2ZyZWVfaXJxLgotCi02LjMgUENJIE1lbW9yeS9JTyBNYXBwZWQgUmVnaW9ucwotCi1TZXJ2aWNlIGRyaXZlcnMgZm9yIFBDSSBFeHByZXNzIFBvd2VyIE1hbmFnZW1lbnQgKFBNRSksIEFkdmFuY2VkCi1FcnJvciBSZXBvcnRpbmcgKEFFUiksIEhvdC1QbHVnIChIUCkgYW5kIFZpcnR1YWwgQ2hhbm5lbCAoVkMpIGFjY2VzcwotUENJIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb24gdGhlIFBDSSBFeHByZXNzIHBvcnQuIEluIGFsbCBjYXNlcyB0aGUKLXJlZ2lzdGVycyBhY2Nlc3NlZCBhcmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlci4gVGhpcyBwYXRjaCBhc3N1bWVzCi10aGF0IGFsbCBzZXJ2aWNlIGRyaXZlcnMgd2lsbCBiZSB3ZWxsIGJlaGF2ZWQgYW5kIG5vdCBvdmVyd3JpdGUKLW90aGVyIHNlcnZpY2UgZHJpdmVyJ3MgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KLQotNi40IFBDSSBDb25maWcgUmVnaXN0ZXJzCi0KLUVhY2ggc2VydmljZSBkcml2ZXIgcnVucyBpdHMgUENJIGNvbmZpZyBvcGVyYXRpb25zIG9uIGl0cyBvd24KLWNhcGFiaWxpdHkgc3RydWN0dXJlIGV4Y2VwdCB0aGUgUENJIEV4cHJlc3MgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUsIGluCi13aGljaCBSb290IENvbnRyb2wgcmVnaXN0ZXIgYW5kIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGFyZSBzaGFyZWQKLWJldHdlZW4gUE1FIGFuZCBBRVIuIFRoaXMgcGF0Y2ggYXNzdW1lcyB0aGF0IGFsbCBzZXJ2aWNlIGRyaXZlcnMKLXdpbGwgYmUgd2VsbCBiZWhhdmVkIGFuZCBub3Qgb3ZlcndyaXRlIG90aGVyIHNlcnZpY2UgZHJpdmVyJ3MKLWNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCAwOGExZWQxLi45YzkzYTAzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTE4Myw3ICsxODMsNyBAQAogY29weSB0aGUgbWFpbnRhaW5lciB3aGVuIHlvdSBjaGFuZ2UgdGhlaXIgY29kZS4KIAogRm9yIHNtYWxsIHBhdGNoZXMgeW91IG1heSB3YW50IHRvIENDIHRoZSBUcml2aWFsIFBhdGNoIE1vbmtleQotdHJpdmlhbEBrZXJuZWwub3JnIG1hbmFnZWQgYnkgQWRyaWFuIEJ1bms7IHdoaWNoIGNvbGxlY3RzICJ0cml2aWFsIgordHJpdmlhbEBrZXJuZWwub3JnIG1hbmFnZWQgYnkgSmVzcGVyIEp1aGw7IHdoaWNoIGNvbGxlY3RzICJ0cml2aWFsIgogcGF0Y2hlcy4gVHJpdmlhbCBwYXRjaGVzIG11c3QgcXVhbGlmeSBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcnVsZXM6CiAgU3BlbGxpbmcgZml4ZXMgaW4gZG9jdW1lbnRhdGlvbgogIFNwZWxsaW5nIGZpeGVzIHdoaWNoIGNvdWxkIGJyZWFrIGdyZXAoMSkKQEAgLTE5Niw3ICsxOTYsNyBAQAogIHNpbmNlIHBlb3BsZSBjb3B5LCBhcyBsb25nIGFzIGl0J3MgdHJpdmlhbCkKICBBbnkgZml4IGJ5IHRoZSBhdXRob3IvbWFpbnRhaW5lciBvZiB0aGUgZmlsZSAoaWUuIHBhdGNoIG1vbmtleQogIGluIHJlLXRyYW5zbWlzc2lvbiBtb2RlKQotVVJMOiA8aHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2J1bmsvdHJpdmlhbC8+CitVUkw6IDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvanVobC90cml2aWFsLz4KIAogCiAKQEAgLTMyOCw3ICszMjgsNyBAQAogcG9pbnQgb3V0IHNvbWUgc3BlY2lhbCBkZXRhaWwgYWJvdXQgdGhlIHNpZ24tb2ZmLiAKIAogCi0xMykgV2hlbiB0byB1c2UgQWNrZWQtYnk6CisxMykgV2hlbiB0byB1c2UgQWNrZWQtYnk6IGFuZCBDYzoKIAogVGhlIFNpZ25lZC1vZmYtYnk6IHRhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgc2lnbmVyIHdhcyBpbnZvbHZlZCBpbiB0aGUKIGRldmVsb3BtZW50IG9mIHRoZSBwYXRjaCwgb3IgdGhhdCBoZS9zaGUgd2FzIGluIHRoZSBwYXRjaCdzIGRlbGl2ZXJ5IHBhdGguCkBAIC0zNDksMTEgKzM0OSw1OSBAQAogRm9yIGV4YW1wbGUsIGlmIGEgcGF0Y2ggYWZmZWN0cyBtdWx0aXBsZSBzdWJzeXN0ZW1zIGFuZCBoYXMgYW4gQWNrZWQtYnk6IGZyb20KIG9uZSBzdWJzeXN0ZW0gbWFpbnRhaW5lciB0aGVuIHRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYWNrbm93bGVkZ2VtZW50IG9mIGp1c3QKIHRoZSBwYXJ0IHdoaWNoIGFmZmVjdHMgdGhhdCBtYWludGFpbmVyJ3MgY29kZS4gIEp1ZGdlbWVudCBzaG91bGQgYmUgdXNlZCBoZXJlLgotIFdoZW4gaW4gZG91YnQgcGVvcGxlIHNob3VsZCByZWZlciB0byB0aGUgb3JpZ2luYWwgZGlzY3Vzc2lvbiBpbiB0aGUgbWFpbGluZworV2hlbiBpbiBkb3VidCBwZW9wbGUgc2hvdWxkIHJlZmVyIHRvIHRoZSBvcmlnaW5hbCBkaXNjdXNzaW9uIGluIHRoZSBtYWlsaW5nCiBsaXN0IGFyY2hpdmVzLgogCitJZiBhIHBlcnNvbiBoYXMgaGFkIHRoZSBvcHBvcnR1bml0eSB0byBjb21tZW50IG9uIGEgcGF0Y2gsIGJ1dCBoYXMgbm90Citwcm92aWRlZCBzdWNoIGNvbW1lbnRzLCB5b3UgbWF5IG9wdGlvbmFsbHkgYWRkIGEgIkNjOiIgdGFnIHRvIHRoZSBwYXRjaC4KK1RoaXMgaXMgdGhlIG9ubHkgdGFnIHdoaWNoIG1pZ2h0IGJlIGFkZGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgYWN0aW9uIGJ5IHRoZQorcGVyc29uIGl0IG5hbWVzLiAgVGhpcyB0YWcgZG9jdW1lbnRzIHRoYXQgcG90ZW50aWFsbHkgaW50ZXJlc3RlZCBwYXJ0aWVzCitoYXZlIGJlZW4gaW5jbHVkZWQgaW4gdGhlIGRpc2N1c3Npb24KIAotMTQpIFRoZSBjYW5vbmljYWwgcGF0Y2ggZm9ybWF0CisKKzE0KSBVc2luZyBUZXN0LWJ5OiBhbmQgUmV2aWV3ZWQtYnk6CisKK0EgVGVzdGVkLWJ5OiB0YWcgaW5kaWNhdGVzIHRoYXQgdGhlIHBhdGNoIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgKGluCitzb21lIGVudmlyb25tZW50KSBieSB0aGUgcGVyc29uIG5hbWVkLiAgVGhpcyB0YWcgaW5mb3JtcyBtYWludGFpbmVycyB0aGF0Citzb21lIHRlc3RpbmcgaGFzIGJlZW4gcGVyZm9ybWVkLCBwcm92aWRlcyBhIG1lYW5zIHRvIGxvY2F0ZSB0ZXN0ZXJzIGZvcgorZnV0dXJlIHBhdGNoZXMsIGFuZCBlbnN1cmVzIGNyZWRpdCBmb3IgdGhlIHRlc3RlcnMuCisKK1Jldmlld2VkLWJ5OiwgaW5zdGVhZCwgaW5kaWNhdGVzIHRoYXQgdGhlIHBhdGNoIGhhcyBiZWVuIHJldmlld2VkIGFuZCBmb3VuZAorYWNjZXB0YWJsZSBhY2NvcmRpbmcgdG8gdGhlIFJldmlld2VyJ3MgU3RhdGVtZW50OgorCisJUmV2aWV3ZXIncyBzdGF0ZW1lbnQgb2Ygb3ZlcnNpZ2h0CisKKwlCeSBvZmZlcmluZyBteSBSZXZpZXdlZC1ieTogdGFnLCBJIHN0YXRlIHRoYXQ6CisKKyAJIChhKSBJIGhhdmUgY2FycmllZCBvdXQgYSB0ZWNobmljYWwgcmV2aWV3IG9mIHRoaXMgcGF0Y2ggdG8KKwkgICAgIGV2YWx1YXRlIGl0cyBhcHByb3ByaWF0ZW5lc3MgYW5kIHJlYWRpbmVzcyBmb3IgaW5jbHVzaW9uIGludG8KKwkgICAgIHRoZSBtYWlubGluZSBrZXJuZWwuCisKKwkgKGIpIEFueSBwcm9ibGVtcywgY29uY2VybnMsIG9yIHF1ZXN0aW9ucyByZWxhdGluZyB0byB0aGUgcGF0Y2gKKwkgICAgIGhhdmUgYmVlbiBjb21tdW5pY2F0ZWQgYmFjayB0byB0aGUgc3VibWl0dGVyLiAgSSBhbSBzYXRpc2ZpZWQKKwkgICAgIHdpdGggdGhlIHN1Ym1pdHRlcidzIHJlc3BvbnNlIHRvIG15IGNvbW1lbnRzLgorCisJIChjKSBXaGlsZSB0aGVyZSBtYXkgYmUgdGhpbmdzIHRoYXQgY291bGQgYmUgaW1wcm92ZWQgd2l0aCB0aGlzCisJICAgICBzdWJtaXNzaW9uLCBJIGJlbGlldmUgdGhhdCBpdCBpcywgYXQgdGhpcyB0aW1lLCAoMSkgYQorCSAgICAgd29ydGh3aGlsZSBtb2RpZmljYXRpb24gdG8gdGhlIGtlcm5lbCwgYW5kICgyKSBmcmVlIG9mIGtub3duCisJICAgICBpc3N1ZXMgd2hpY2ggd291bGQgYXJndWUgYWdhaW5zdCBpdHMgaW5jbHVzaW9uLgorCisJIChkKSBXaGlsZSBJIGhhdmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFuZCBiZWxpZXZlIGl0IHRvIGJlIHNvdW5kLCBJCisJICAgICBkbyBub3QgKHVubGVzcyBleHBsaWNpdGx5IHN0YXRlZCBlbHNld2hlcmUpIG1ha2UgYW55CisJICAgICB3YXJyYW50aWVzIG9yIGd1YXJhbnRlZXMgdGhhdCBpdCB3aWxsIGFjaGlldmUgaXRzIHN0YXRlZAorCSAgICAgcHVycG9zZSBvciBmdW5jdGlvbiBwcm9wZXJseSBpbiBhbnkgZ2l2ZW4gc2l0dWF0aW9uLgorCitBIFJldmlld2VkLWJ5IHRhZyBpcyBhIHN0YXRlbWVudCBvZiBvcGluaW9uIHRoYXQgdGhlIHBhdGNoIGlzIGFuCithcHByb3ByaWF0ZSBtb2RpZmljYXRpb24gb2YgdGhlIGtlcm5lbCB3aXRob3V0IGFueSByZW1haW5pbmcgc2VyaW91cwordGVjaG5pY2FsIGlzc3Vlcy4gIEFueSBpbnRlcmVzdGVkIHJldmlld2VyICh3aG8gaGFzIGRvbmUgdGhlIHdvcmspIGNhbgorb2ZmZXIgYSBSZXZpZXdlZC1ieSB0YWcgZm9yIGEgcGF0Y2guICBUaGlzIHRhZyBzZXJ2ZXMgdG8gZ2l2ZSBjcmVkaXQgdG8KK3Jldmlld2VycyBhbmQgdG8gaW5mb3JtIG1haW50YWluZXJzIG9mIHRoZSBkZWdyZWUgb2YgcmV2aWV3IHdoaWNoIGhhcyBiZWVuCitkb25lIG9uIHRoZSBwYXRjaC4gIFJldmlld2VkLWJ5OiB0YWdzLCB3aGVuIHN1cHBsaWVkIGJ5IHJldmlld2VycyBrbm93biB0bwordW5kZXJzdGFuZCB0aGUgc3ViamVjdCBhcmVhIGFuZCB0byBwZXJmb3JtIHRob3JvdWdoIHJldmlld3MsIHdpbGwgbm9ybWFsbHkKK2luY3JlYXNlIHRoZSBsaWtsaWhvb2Qgb2YgeW91ciBwYXRjaCBnZXR0aW5nIGludG8gdGhlIGtlcm5lbC4KKworCisxNSkgVGhlIGNhbm9uaWNhbCBwYXRjaCBmb3JtYXQKIAogVGhlIGNhbm9uaWNhbCBwYXRjaCBzdWJqZWN0IGxpbmUgaXM6CiAKQEAgLTUxMiw3ICs1NjAsNyBAQAogbGltaXRhdGlvbnMsIGFuZCB1bmRlciBnY2MgdGhleSBhcmUgYXMgY2hlYXAgYXMgbWFjcm9zLgogCiBNYWNyb3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY2FzZXMgd2hlcmUgYSBzdGF0aWMgaW5saW5lIGlzIGNsZWFybHkKLXN1Ym9wdGltYWwgW3RoZXJlIGEgZmV3LCBpc29sYXRlZCBjYXNlcyBvZiB0aGlzIGluIGZhc3QgcGF0aHNdLAorc3Vib3B0aW1hbCBbdGhlcmUgYXJlIGEgZmV3LCBpc29sYXRlZCBjYXNlcyBvZiB0aGlzIGluIGZhc3QgcGF0aHNdLAogb3Igd2hlcmUgaXQgaXMgaW1wb3NzaWJsZSB0byB1c2UgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIFtzdWNoIGFzCiBzdHJpbmctaXppbmddLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjcGkvZHNkdC1vdmVycmlkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2FjcGkvZHNkdC1vdmVycmlkZS50eHQKaW5kZXggNTAwOGYyNS4uZmViYmIxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY3BpL2RzZHQtb3ZlcnJpZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYWNwaS9kc2R0LW92ZXJyaWRlLnR4dApAQCAtMSwxNSArMSw3IEBACi1MaW51eCBzdXBwb3J0cyB0d28gbWV0aG9kcyBvZiBvdmVycmlkaW5nIHRoZSBCSU9TIERTRFQ6CitMaW51eCBzdXBwb3J0cyBhIG1ldGhvZCBvZiBvdmVycmlkaW5nIHRoZSBCSU9TIERTRFQ6CiAKIENPTkZJR19BQ1BJX0NVU1RPTV9EU0RUIGJ1aWxkcyB0aGUgaW1hZ2UgaW50byB0aGUga2VybmVsLgogCi1DT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQgYWRkcyB0aGUgaW1hZ2UgdG8gdGhlIGluaXRyZC4KLQotV2hlbiB0byB1c2UgdGhlc2UgbWV0aG9kcyBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIG9uIHRoZQorV2hlbiB0byB1c2UgdGhpcyBtZXRob2QgaXMgZGVzY3JpYmVkIGluIGRldGFpbCBvbiB0aGUKIExpbnV4L0FDUEkgaG9tZSBwYWdlOgogaHR0cDovL3d3dy5sZXNzd2F0dHMub3JnL3Byb2plY3RzL2FjcGkvb3ZlcnJpZGluZ0RTRFQucGhwCi0KLU5vdGUgdGhhdCBpZiBib3RoIG9wdGlvbnMgYXJlIHVzZWQsIHRoZSBEU0RUIHN1cHBsaWVkCi1ieSB0aGUgSU5JVFJEIG1ldGhvZCB0YWtlcyBwcmVjZWRlbmNlLgotCi1Eb2N1bWVudGF0aW9uL2luaXRyYW1mcy1hZGQtZHNkdC5zaCBpcyBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UKLWZvciB1c2Ugd2l0aCB0aGUgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFRfSU5JVFJEIG1ldGhvZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNwaS9pbml0cmFtZnMtYWRkLWRzZHQuc2ggYi9Eb2N1bWVudGF0aW9uL2FjcGkvaW5pdHJhbWZzLWFkZC1kc2R0LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxN2VmNmU4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vYWNwaS9pbml0cmFtZnMtYWRkLWRzZHQuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBBZGRzIGEgRFNEVCBmaWxlIHRvIHRoZSBpbml0cmQgKGlmIGl0J3MgYW4gaW5pdHJhbWZzKQotIyBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhcmNoaXZlCi0jIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBhZGQKLSMgVGhlIGZpbGUgd2lsbCBiZSBjb3BpZWQgYXMgL0RTRFQuYW1sCi0KLSMgMjAwNjAxMjY6IGZpeCAiUHJlbWF0dXJlIGVuZCBvZiBmaWxlIiB3aXRoIHNvbWUgb2xkIGNwaW8gKFJvbGFuZCBSb2JpYykKLSMgMjAwNjAyMDU6IHRoaXMgdGltZSBpdCBzaG91bGQgcmVhbGx5IHdvcmsKLQotIyBjaGVjayB0aGUgYXJndW1lbnRzCi1pZiBbICQjIC1uZSAyIF07IHRoZW4KLQlwcm9ncmFtX25hbWU9JChiYXNlbmFtZSAkMCkKLQllY2hvICJcCi0kcHJvZ3JhbV9uYW1lOiB0b28gZmV3IGFyZ3VtZW50cwotVXNhZ2U6ICRwcm9ncmFtX25hbWUgaW5pdHJkLW5hbWUuaW1nIERTRFQtdG8tYWRkLmFtbAotQWRkcyBhIERTRFQgZmlsZSB0byBhbiBpbml0cmQgKGluIGluaXRyYW1mcyBmb3JtYXQpCi0KLSAgaW5pdHJkLW5hbWUuaW1nOiBmaWxlbmFtZSBvZiB0aGUgaW5pdHJkIGluIGluaXRyYW1mcyBmb3JtYXQKLSAgRFNEVC10by1hZGQuYW1sOiBmaWxlbmFtZSBvZiB0aGUgRFNEVCBmaWxlIHRvIGFkZAotICAiIDE+JjIKLSAgICBleGl0IDEKLWZpCi0KLSMgd2Ugc2hvdWxkIGNoZWNrIGl0J3MgYW4gaW5pdHJhbWZzCi0KLXRlbXBjcGlvPSQobWt0ZW1wIC1kKQotIyBjbGVhbnVwIG9uIGV4aXQsIGhhbmd1cCwgaW50ZXJydXB0LCBxdWl0LCB0ZXJtaW5hdGlvbgotdHJhcCAncm0gLXJmICR0ZW1wY3BpbycgMCAxIDIgMyAxNQotCi0jIGV4dHJhY3QgdGhlIGFyY2hpdmUKLWd1bnppcCAtYyAiJDEiID4gIiR0ZW1wY3BpbyIvaW5pdHJhbWZzLmNwaW8gfHwgZXhpdCAxCi0KLSMgY29weSB0aGUgRFNEVCBmaWxlIGF0IHRoZSByb290IG9mIHRoZSBkaXJlY3Rvcnkgc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCAiL0RTRFQuYW1sIgotY3AgLWYgIiQyIiAiJHRlbXBjcGlvIi9EU0RULmFtbAotCi0jIGFkZCB0aGUgZmlsZQotY2QgIiR0ZW1wY3BpbyIKLShlY2hvIERTRFQuYW1sIHwgY3BpbyAtLXF1aWV0IC1IIG5ld2MgLW8gLUEgLU8gIiR0ZW1wY3BpbyIvaW5pdHJhbWZzLmNwaW8pIHx8IGV4aXQgMQotY2QgIiRPTERQV0QiCi0KLSMgcmUtY29tcHJlc3MgdGhlIGFyY2hpdmUKLWd6aXAgLWMgIiR0ZW1wY3BpbyIvaW5pdHJhbWZzLmNwaW8gPiAiJDEiCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQgYi9Eb2N1bWVudGF0aW9uL2F0b21pY19vcHMudHh0CmluZGV4IGYyMGMxMGMuLjRlZjI0NTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dApAQCAtMTg2LDcgKzE4Niw4IEBACiByZXR1cm5zIG5vbiB6ZXJvLiBJZiB2IGlzIGVxdWFsIHRvIHUgdGhlbiBpdCByZXR1cm5zIHplcm8uIFRoaXMgaXMgZG9uZSBhcwogYW4gYXRvbWljIG9wZXJhdGlvbi4KIAotYXRvbWljX2FkZF91bmxlc3MgcmVxdWlyZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIGFyb3VuZCB0aGUgb3BlcmF0aW9uLgorYXRvbWljX2FkZF91bmxlc3MgcmVxdWlyZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIGFyb3VuZCB0aGUgb3BlcmF0aW9uCit1bmxlc3MgaXQgZmFpbHMgKHJldHVybnMgMCkuCiAKIGF0b21pY19pbmNfbm90X3plcm8sIGVxdWl2YWxlbnQgdG8gYXRvbWljX2FkZF91bmxlc3ModiwgMSwgMCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IDkzZjIyM2IuLjRkYmI4YmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiBpb19yZXF1ZXN0X2xvY2sgZm9yIHNlcmlhbGl6YXRpb24gbmVlZCB0byBiZSBtb2RpZmllZCBhY2NvcmRpbmdseS4KIFVzdWFsbHkgaXQncyBhcyBlYXN5IGFzIGFkZGluZyBhIGdsb2JhbCBsb2NrOgogCi0Jc3RhdGljIHNwaW5sb2NrX3QgbXlfZHJpdmVyX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhteV9kcml2ZXJfbG9jayk7CiAKIGFuZCBwYXNzaW5nIHRoZSBhZGRyZXNzIHRvIHRoYXQgbG9jayB0byBibGtfaW5pdF9xdWV1ZSgpLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2Nkcm9tLXN0YW5kYXJkLnRleCBiL0RvY3VtZW50YXRpb24vY2Ryb20vY2Ryb20tc3RhbmRhcmQudGV4CmluZGV4IGM3MTNhZWIuLmMwNjIzM2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2Ryb20vY2Ryb20tc3RhbmRhcmQudGV4CisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vY2Ryb20tc3RhbmRhcmQudGV4CkBAIC03NzcsNyArNzc3LDcgQEAKIGl0IG1heSBoYXZlIGFzIG1hbnkgc3RydWN0dXJlcyAkPGRldmljZT5faW5mbyQgYXMgdGhlcmUgYXJlIG1pbm9yIGRldmljZXMKIGFjdGl2ZS4gJFJlZ2lzdGVyX2Nkcm9tKCkkIGJ1aWxkcyBhIGxpbmtlZCBsaXN0IGZyb20gdGhlc2UuIAogCi1cc3Vic2VjdGlvbnskSW50XCB1bnJlZ2lzdGVyX2Nkcm9tKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGkpJH0KK1xzdWJzZWN0aW9ueyRWb2lkXCB1bnJlZ2lzdGVyX2Nkcm9tKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGkpJH0KIAogVW5yZWdpc3RlcmluZyBkZXZpY2UgJGNkaSQgd2l0aCBtaW5vciBudW1iZXIgJE1JTk9SKGNkaVx0byBkZXYpJCByZW1vdmVzCiB0aGUgbWlub3IgZGV2aWNlIGZyb20gdGhlIGxpc3QuIElmIGl0IHdhcyB0aGUgbGFzdCByZWdpc3RlcmVkIG1pbm9yIGZvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9pZGUtY2QgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lkZS1jZAppbmRleCAyOTcyMWJmLi45MWMwZGNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lkZS1jZAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lkZS1jZApAQCAtNDUsNyArNDUsNyBAQAogLS0tLS0tLS0tLS0tLS0tCiAKIDAuIFRoZSBpZGUtY2QgcmVsaWVzIG9uIHRoZSBpZGUgZGlzayBkcml2ZXIuICBTZWUKLSAgIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgaWRlCisgICBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciB1cC10by1kYXRlIGluZm9ybWF0aW9uIG9uIHRoZSBpZGUKICAgIGRyaXZlci4KIAogMS4gTWFrZSBzdXJlIHRoYXQgdGhlIGlkZSBhbmQgaWRlLWNkIGRyaXZlcnMgYXJlIGNvbXBpbGVkIGludG8gdGhlCkBAIC02NCw3ICs2NCw3IEBACiAKICAgIERlcGVuZGluZyBvbiB3aGF0IHR5cGUgb2YgSURFIGludGVyZmFjZSB5b3UgaGF2ZSwgeW91IG1heSBuZWVkIHRvCiAgICBzcGVjaWZ5IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgU2VlCi0gICBEb2N1bWVudGF0aW9uL2lkZS50eHQuCisgICBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0LgogCiAyLiBZb3Ugc2hvdWxkIGFsc28gZW5zdXJlIHRoYXQgdGhlIGlzbzk2NjAgZmlsZXN5c3RlbSBpcyBlaXRoZXIKICAgIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBhdmFpbGFibGUgYXMgYSBsb2FkYWJsZSBtb2R1bGUuICBZb3UKQEAgLTg0LDcgKzg0LDcgQEAKICAgIG9uIHRoZSBwcmltYXJ5IElERSBpbnRlcmZhY2UgYXJlIGNhbGxlZCBgaGRhJyBhbmQgYGhkYicsCiAgICByZXNwZWN0aXZlbHkuICBUaGUgZHJpdmVzIG9uIHRoZSBzZWNvbmRhcnkgaW50ZXJmYWNlIGFyZSBjYWxsZWQKICAgIGBoZGMnIGFuZCBgaGRkJy4gIChJbnRlcmZhY2VzIGF0IG90aGVyIGxvY2F0aW9ucyBnZXQgb3RoZXIgbGV0dGVycwotICAgaW4gdGhlIHRoaXJkIHBvc2l0aW9uOyBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LikKKyAgIGluIHRoZSB0aGlyZCBwb3NpdGlvbjsgc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQuKQogCiAgICBJZiB5b3Ugd2FudCB5b3VyIENEUk9NIGRyaXZlIHRvIGJlIGZvdW5kIGF1dG9tYXRpY2FsbHkgYnkgdGhlCiAgICBkcml2ZXIsIHlvdSBzaG91bGQgbWFrZSBzdXJlIHlvdXIgSURFIGludGVyZmFjZSB1c2VzIGVpdGhlciB0aGUKQEAgLTkzLDcgKzkzLDcgQEAKICAgIGJlIGp1bXBlcmVkIGFzIGBtYXN0ZXInLiAgKElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90IGNvbmZpZ3VyZQogICAgeW91ciBzeXN0ZW0gaW4gdGhpcyBtYW5uZXIsIHlvdSBjYW4gcHJvYmFibHkgc3RpbGwgdXNlIHRoZSBkcml2ZXIuCiAgICBZb3UgbWF5IGhhdmUgdG8gcGFzcyBleHRyYSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRvIHRoZSBrZXJuZWwKLSAgIHdoZW4geW91IGJvb3QsIGhvd2V2ZXIuICBTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBtb3JlCisgICB3aGVuIHlvdSBib290LCBob3dldmVyLiAgU2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIG1vcmUKICAgIGluZm9ybWF0aW9uLikKIAogNC4gQm9vdCB0aGUgc3lzdGVtLiAgSWYgdGhlIGRyaXZlIGlzIHJlY29nbml6ZWQsIHlvdSBzaG91bGQgc2VlIGEKQEAgLTIwMSw3ICsyMDEsNyBAQAogVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBzb21lIGNvbW1vbiBwcm9ibGVtcyBlbmNvdW50ZXJlZCB3aGVuIHRyeWluZyB0bwogdXNlIHRoZSBkcml2ZXIsIGFuZCBzb21lIHBvc3NpYmxlIHNvbHV0aW9ucy4gIE5vdGUgdGhhdCBpZiB5b3UgYXJlCiBleHBlcmllbmNpbmcgcHJvYmxlbXMsIHlvdSBzaG91bGQgcHJvYmFibHkgYWxzbyByZXZpZXcKLURvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5kZXJseWluZworRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5kZXJseWluZwogSURFIHN1cHBvcnQgY29kZS4gIFNvbWUgb2YgdGhlc2UgaXRlbXMgYXBwbHkgb25seSB0byBlYXJsaWVyIHZlcnNpb25zCiBvZiB0aGUgZHJpdmVyLCBidXQgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuCiAKQEAgLTIxMSw3ICsyMTEsNyBAQAogYS4gRHJpdmUgaXMgbm90IGRldGVjdGVkIGR1cmluZyBib290aW5nLgogCiAgICAtIFJldmlldyB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbnMgYWJvdmUgYW5kIGluCi0gICAgIERvY3VtZW50YXRpb24vaWRlLnR4dCwgYW5kIGNoZWNrIGhvdyB5b3VyIGhhcmR3YXJlIGlzCisgICAgIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQsIGFuZCBjaGVjayBob3cgeW91ciBoYXJkd2FyZSBpcwogICAgICBjb25maWd1cmVkLgogCiAgICAtIElmIHlvdXIgZHJpdmUgaXMgdGhlIG9ubHkgZGV2aWNlIG9uIGFuIElERSBpbnRlcmZhY2UsIGl0IHNob3VsZApAQCAtMjE5LDcgKzIxOSw3IEBACiAKICAgIC0gSWYgeW91ciBJREUgaW50ZXJmYWNlIGlzIG5vdCBhdCB0aGUgc3RhbmRhcmQgYWRkcmVzc2VzIG9mIDB4MTcwCiAgICAgIG9yIDB4MWYwLCB5b3UnbGwgbmVlZCB0byBleHBsaWNpdGx5IGluZm9ybSB0aGUgZHJpdmVyIHVzaW5nIGEKLSAgICAgbGlsbyBvcHRpb24uICBTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LiAgKFRoaXMgZmVhdHVyZSB3YXMKKyAgICAgbGlsbyBvcHRpb24uICBTZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dC4gIChUaGlzIGZlYXR1cmUgd2FzCiAgICAgIGFkZGVkIGFyb3VuZCBrZXJuZWwgdmVyc2lvbiAxLjMuMzAuKQogCiAgICAtIElmIHRoZSBhdXRvcHJvYmluZyBpcyBub3QgZmluZGluZyB5b3VyIGRyaXZlLCB5b3UgY2FuIHRlbGwgdGhlCkBAIC0yNDUsNyArMjQ1LDcgQEAKICAgICAgU3VwcG9ydCBmb3Igc29tZSBpbnRlcmZhY2VzIG5lZWRpbmcgZXh0cmEgaW5pdGlhbGl6YXRpb24gaXMKICAgICAgcHJvdmlkZWQgaW4gbGF0ZXIgMS4zLngga2VybmVscy4gIFlvdSBtYXkgbmVlZCB0byB0dXJuIG9uCiAgICAgIGFkZGl0aW9uYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgdGhlbSB0byB3b3JrOwotICAgICBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LgorICAgICBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dC4KIAogICAgICBFdmVuIGlmIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgeW91ciBpbnRlcmZhY2UsIHlvdSBtYXkgYmUKICAgICAgYWJsZSB0byBnZXQgaXQgdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlLiAgRmlyc3QgYm9vdApAQCAtMjk5LDcgKzI5OSw3IEBACiAgICAgYmUgd29ya2VkIGFyb3VuZCBieSBzcGVjaWZ5aW5nIHRoZSBgc2VyaWFsaXplJyBvcHRpb24gd2hlbgogICAgIGJvb3RpbmcuICBSZWNlbnQga2VybmVscyBzaG91bGQgYmUgYWJsZSB0byBkZXRlY3QgdGhlIG5lZWQgZm9yCiAgICAgdGhpcyBhdXRvbWF0aWNhbGx5IGluIG1vc3QgY2FzZXMsIGJ1dCB0aGUgZGV0ZWN0aW9uIGlzIG5vdAotICAgIGZvb2xwcm9vZi4gIFNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICBmb29scHJvb2YuICBTZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgIGFib3V0IHRoZSBgc2VyaWFsaXplJyBvcHRpb24gYW5kIHRoZSBDTUQ2NDBCLgogCiAgIC0gTm90ZSB0aGF0IG1hbnkgTVMtRE9TIENEUk9NIGRyaXZlcnMgd2lsbCB3b3JrIHdpdGggc3VjaCBidWdneQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy50eHQKaW5kZXggNDJkN2M0Yy4uMzFkMTJlMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMudHh0CkBAIC0yOCw3ICsyOCw3IEBACiA0LiBRdWVzdGlvbnMKIAogMS4gQ29udHJvbCBHcm91cHMKLT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09CiAKIDEuMSBXaGF0IGFyZSBjZ3JvdXBzID8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0MywxMCArMTQzLDEwIEBACiAKIEFsc28gbGV0cyBzYXkgdGhhdCB0aGUgYWRtaW5pc3RyYXRvciB3b3VsZCBsaWtlIHRvIGdpdmUgZW5oYW5jZWQgbmV0d29yawogYWNjZXNzIHRlbXBvcmFyaWx5IHRvIGEgc3R1ZGVudCdzIGJyb3dzZXIgKHNpbmNlIGl0IGlzIG5pZ2h0IGFuZCB0aGUgdXNlcgotd2FudHMgdG8gZG8gb25saW5lIGdhbWluZyA6KSAgT1IgZ2l2ZSBvbmUgb2YgdGhlIHN0dWRlbnRzIHNpbXVsYXRpb24KK3dhbnRzIHRvIGRvIG9ubGluZSBnYW1pbmcgOikpICBPUiBnaXZlIG9uZSBvZiB0aGUgc3R1ZGVudHMgc2ltdWxhdGlvbgogYXBwcyBlbmhhbmNlZCBDUFUgcG93ZXIsCiAKLVdpdGggYWJpbGl0eSB0byB3cml0ZSBwaWRzIGRpcmVjdGx5IHRvIHJlc291cmNlIGNsYXNzZXMsIGl0cyBqdXN0IGEKK1dpdGggYWJpbGl0eSB0byB3cml0ZSBwaWRzIGRpcmVjdGx5IHRvIHJlc291cmNlIGNsYXNzZXMsIGl0J3MganVzdCBhCiBtYXR0ZXIgb2YgOgogCiAgICAgICAgIyBlY2hvIHBpZCA+IC9tbnQvbmV0d29yay88bmV3X2NsYXNzPi90YXNrcwpAQCAtMjI3LDEwICsyMjcsMTMgQEAKIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBmaWxlcyBkZXNjcmliaW5nIHRoYXQgY2dyb3VwOgogCiAgLSB0YXNrczogbGlzdCBvZiB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byB0aGF0IGNncm91cAotIC0gbm90aWZ5X29uX3JlbGVhc2UgZmxhZzogcnVuIC9zYmluL2Nncm91cF9yZWxlYXNlX2FnZW50IG9uIGV4aXQ/CisgLSByZWxlYXNhYmxlIGZsYWc6IGNncm91cCBjdXJyZW50bHkgcmVtb3ZlYWJsZT8KKyAtIG5vdGlmeV9vbl9yZWxlYXNlIGZsYWc6IHJ1biB0aGUgcmVsZWFzZSBhZ2VudCBvbiBleGl0PworIC0gcmVsZWFzZV9hZ2VudDogdGhlIHBhdGggdG8gdXNlIGZvciByZWxlYXNlIG5vdGlmaWNhdGlvbnMgKHRoaXMgZmlsZQorICAgZXhpc3RzIGluIHRoZSB0b3AgY2dyb3VwIG9ubHkpCiAKIE90aGVyIHN1YnN5c3RlbXMgc3VjaCBhcyBjcHVzZXRzIG1heSBhZGQgYWRkaXRpb25hbCBmaWxlcyBpbiBlYWNoCi1jZ3JvdXAgZGlyCitjZ3JvdXAgZGlyLgogCiBOZXcgY2dyb3VwcyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgbWtkaXIgc3lzdGVtIGNhbGwgb3Igc2hlbGwKIGNvbW1hbmQuICBUaGUgcHJvcGVydGllcyBvZiBhIGNncm91cCwgc3VjaCBhcyBpdHMgZmxhZ3MsIGFyZQpAQCAtMjU3LDcgKzI2MCw3IEBACiBUbyBhbGxvdyBhY2Nlc3MgZnJvbSBhIGNncm91cCB0byB0aGUgY3NzX3NldHMgKGFuZCBoZW5jZSB0YXNrcykKIHRoYXQgY29tcHJpc2UgaXQsIGEgc2V0IG9mIGNnX2Nncm91cF9saW5rIG9iamVjdHMgZm9ybSBhIGxhdHRpY2U7CiBlYWNoIGNnX2Nncm91cF9saW5rIGlzIGxpbmtlZCBpbnRvIGEgbGlzdCBvZiBjZ19jZ3JvdXBfbGlua3MgZm9yCi1hIHNpbmdsZSBjZ3JvdXAgb24gaXRzIGNvbnRfbGlua19saXN0IGZpZWxkLCBhbmQgYSBsaXN0IG9mCithIHNpbmdsZSBjZ3JvdXAgb24gaXRzIGNncnBfbGlua19saXN0IGZpZWxkLCBhbmQgYSBsaXN0IG9mCiBjZ19jZ3JvdXBfbGlua3MgZm9yIGEgc2luZ2xlIGNzc19zZXQgb24gaXRzIGNnX2xpbmtfbGlzdC4KIAogVGh1cyB0aGUgc2V0IG9mIHRhc2tzIGluIGEgY2dyb3VwIGNhbiBiZSBsaXN0ZWQgYnkgaXRlcmF0aW5nIG92ZXIKQEAgLTI3MSw5ICsyNzQsNiBAQAogMS40IFdoYXQgZG9lcyBub3RpZnlfb25fcmVsZWFzZSBkbyA/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotKioqIG5vdGlmeV9vbl9yZWxlYXNlIGlzIGRpc2FibGVkIGluIHRoZSBjdXJyZW50IHBhdGNoIHNldC4gSXQgd2lsbCBiZQotKioqIHJlYWN0aXZhdGVkIGluIGEgZnV0dXJlIHBhdGNoIGluIGEgbGVzcy1pbnRydXNpdmUgbWFubmVyCi0KIElmIHRoZSBub3RpZnlfb25fcmVsZWFzZSBmbGFnIGlzIGVuYWJsZWQgKDEpIGluIGEgY2dyb3VwLCB0aGVuCiB3aGVuZXZlciB0aGUgbGFzdCB0YXNrIGluIHRoZSBjZ3JvdXAgbGVhdmVzIChleGl0cyBvciBhdHRhY2hlcyB0bwogc29tZSBvdGhlciBjZ3JvdXApIGFuZCB0aGUgbGFzdCBjaGlsZCBjZ3JvdXAgb2YgdGhhdCBjZ3JvdXAKQEAgLTM2MCw4ICszNjAsOCBAQAogCiBJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKICMgbHMKLW5vdGlmeV9vbl9yZWxlYXNlIHJlbGVhc2VfYWdlbnQgdGFza3MKLShwbHVzIHdoYXRldmVyIGZpbGVzIGFyZSBhZGRlZCBieSB0aGUgYXR0YWNoZWQgc3Vic3lzdGVtcykKK25vdGlmeV9vbl9yZWxlYXNlIHJlbGVhc2FibGUgdGFza3MKKyhwbHVzIHdoYXRldmVyIGZpbGVzIGFkZGVkIGJ5IHRoZSBhdHRhY2hlZCBzdWJzeXN0ZW1zKQogCiBOb3cgYXR0YWNoIHlvdXIgc2hlbGwgdG8gdGhpcyBjZ3JvdXA6CiAjIC9iaW4vZWNobyAkJCA+IHRhc2tzCkBAIC00MDQsMTkgKzQwNCwxMyBAQAogT3RoZXIgZmllbGRzIGluIHRoZSBjZ3JvdXBfc3Vic3lzIG9iamVjdCBpbmNsdWRlOgogCiAtIHN1YnN5c19pZDogYSB1bmlxdWUgYXJyYXkgaW5kZXggZm9yIHRoZSBzdWJzeXN0ZW0sIGluZGljYXRpbmcgd2hpY2gKLSAgZW50cnkgaW4gY2dyb3VwLT5zdWJzeXNbXSB0aGlzIHN1YnN5c3RlbSBzaG91bGQgYmUKLSAgbWFuYWdpbmcuIEluaXRpYWxpemVkIGJ5IGNncm91cF9yZWdpc3Rlcl9zdWJzeXMoKTsgcHJpb3IgdG8gdGhpcwotICBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gLTEKKyAgZW50cnkgaW4gY2dyb3VwLT5zdWJzeXNbXSB0aGlzIHN1YnN5c3RlbSBzaG91bGQgYmUgbWFuYWdpbmcuCiAKLS0gaGllcmFyY2h5OiBhbiBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIGhpZXJhcmNoeSwgaWYgYW55LCB0aGlzCi0gIHN1YnN5c3RlbSBpcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8uIElmIHRoaXMgaXMgLTEsIHRoZW4gdGhlCi0gIHN1YnN5c3RlbSBpcyBub3QgYXR0YWNoZWQgdG8gYW55IGhpZXJhcmNoeSwgYW5kIGFsbCB0YXNrcyBzaG91bGQgYmUKLSAgY29uc2lkZXJlZCB0byBiZSBtZW1iZXJzIG9mIHRoZSBzdWJzeXN0ZW0ncyB0b3BfY2dyb3VwLiBJdCBzaG91bGQKLSAgYmUgaW5pdGlhbGl6ZWQgdG8gLTEuCistIG5hbWU6IHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBhIHVuaXF1ZSBzdWJzeXN0ZW0gbmFtZS4gU2hvdWxkIGJlCisgIG5vIGxvbmdlciB0aGFuIE1BWF9DR1JPVVBfVFlQRV9OQU1FTEVOLgogCi0tIG5hbWU6IHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBhIHVuaXF1ZSBzdWJzeXN0ZW0gbmFtZSBwcmlvciB0bwotICBjYWxsaW5nIGNncm91cF9yZWdpc3Rlcl9zdWJzeXN0ZW0uIFNob3VsZCBiZSBubyBsb25nZXIgdGhhbgotICBNQVhfQ0dST1VQX1RZUEVfTkFNRUxFTgorLSBlYXJseV9pbml0OiBpbmRpY2F0ZSBpZiB0aGUgc3Vic3lzdGVtIG5lZWRzIGVhcmx5IGluaXRpYWxpemF0aW9uCisgIGF0IHN5c3RlbSBib290LgogCiBFYWNoIGNncm91cCBvYmplY3QgY3JlYXRlZCBieSB0aGUgc3lzdGVtIGhhcyBhbiBhcnJheSBvZiBwb2ludGVycywKIGluZGV4ZWQgYnkgc3Vic3lzdGVtIGlkOyB0aGlzIHBvaW50ZXIgaXMgZW50aXJlbHkgbWFuYWdlZCBieSB0aGUKQEAgLTQzNCw4ICs0MjgsNiBAQAogU2VlIGtlcm5lbC9jZ3JvdXAuYyBmb3IgbW9yZSBkZXRhaWxzLgogCiBTdWJzeXN0ZW1zIGNhbiB0YWtlL3JlbGVhc2UgdGhlIGNncm91cF9tdXRleCB2aWEgdGhlIGZ1bmN0aW9ucwotY2dyb3VwX2xvY2soKS9jZ3JvdXBfdW5sb2NrKCksIGFuZCBjYW4KLXRha2UvcmVsZWFzZSB0aGUgY2FsbGJhY2tfbXV0ZXggdmlhIHRoZSBmdW5jdGlvbnMKIGNncm91cF9sb2NrKCkvY2dyb3VwX3VubG9jaygpLgogCiBBY2Nlc3NpbmcgYSB0YXNrJ3MgY2dyb3VwIHBvaW50ZXIgbWF5IGJlIGRvbmUgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgpAQCAtNDQ0LDcgKzQzNiw3IEBACiAtIGluc2lkZSBhbiByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbiB2aWEgcmN1X2RlcmVmZXJlbmNlKCkKIAogMy4zIFN1YnN5c3RlbSBBUEkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLQogCiBFYWNoIHN1YnN5c3RlbSBzaG91bGQ6CiAKQEAgLTQ1NSw3ICs0NDcsOCBAQAogbWV0aG9kcyBhcmUgY3JlYXRlL2Rlc3Ryb3kuIEFueSBvdGhlcnMgdGhhdCBhcmUgbnVsbCBhcmUgcHJlc3VtZWQgdG8KIGJlIHN1Y2Nlc3NmdWwgbm8tb3BzLgogCi1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3JlYXRlKHN0cnVjdCBjZ3JvdXAgKmNvbnQpCitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCQkgICBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogKGNncm91cF9tdXRleCBoZWxkIGJ5IGNhbGxlcikKIAogQ2FsbGVkIHRvIGNyZWF0ZSBhIHN1YnN5c3RlbSBzdGF0ZSBvYmplY3QgZm9yIGEgY2dyb3VwLiBUaGUKQEAgLTQ3MCw3ICs0NjMsNyBAQAogaXQncyB0aGUgcm9vdCBvZiB0aGUgaGllcmFyY2h5KSBhbmQgbWF5IGJlIGFuIGFwcHJvcHJpYXRlIHBsYWNlIGZvcgogaW5pdGlhbGl6YXRpb24gY29kZS4KIAotdm9pZCBkZXN0cm95KHN0cnVjdCBjZ3JvdXAgKmNvbnQpCit2b2lkIGRlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogKGNncm91cF9tdXRleCBoZWxkIGJ5IGNhbGxlcikKIAogVGhlIGNncm91cCBzeXN0ZW0gaXMgYWJvdXQgdG8gZGVzdHJveSB0aGUgcGFzc2VkIGNncm91cDsgdGhlIHN1YnN5c3RlbQpAQCAtNDgxLDcgKzQ3NCwxNCBAQAogbmV3bHktY3JlYXRlZCBjZ3JvdXAgaWYgYW4gZXJyb3Igb2NjdXJzIGFmdGVyIHRoaXMgc3Vic3lzdGVtJ3MKIGNyZWF0ZSgpIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgZm9yIHRoZSBuZXcgY2dyb3VwKS4KIAotaW50IGNhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250LAordm9pZCBwcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnApOworKGNncm91cF9tdXRleCBoZWxkIGJ5IGNhbGxlcikKKworQ2FsbGVkIGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIGVhY2ggc3Vic3lzdGVtLiBUaGlzIG1heQorYmUgdXNlZnVsIGZvciBzdWJzeXN0ZW1zIHdoaWNoIGhhdmUgc29tZSBleHRyYSByZWZlcmVuY2VzIGV2ZW4gaWYKK3RoZXJlIGFyZSBub3QgdGFza3MgaW4gdGhlIGNncm91cC4KKworaW50IGNhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAoY2dyb3VwX211dGV4IGhlbGQgYnkgY2FsbGVyKQogCkBAIC00OTIsOCArNDkyLDggQEAKIGNhbGxlZCBvbiBhIGZvcmsuIElmIHRoaXMgbWV0aG9kIHJldHVybnMgMCAoc3VjY2VzcykgdGhlbiB0aGlzIHNob3VsZAogcmVtYWluIHZhbGlkIHdoaWxlIHRoZSBjYWxsZXIgaG9sZHMgY2dyb3VwX211dGV4LgogCi12b2lkIGF0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQsCi0JICAgIHN0cnVjdCBjZ3JvdXAgKm9sZF9jb250LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit2b2lkIGF0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsCisJICAgIHN0cnVjdCBjZ3JvdXAgKm9sZF9jZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAKIENhbGxlZCBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBhdHRhY2hlZCB0byB0aGUgY2dyb3VwLCB0byBhbGxvdyBhbnkKIHBvc3QtYXR0YWNobWVudCBhY3Rpdml0eSB0aGF0IHJlcXVpcmVzIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBibG9ja2luZy4KQEAgLTUwNSw5ICs1MDUsOSBAQAogCiB2b2lkIGV4aXQoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiAKLUNhbGxlZCBkdXJpbmcgdGFzayBleGl0CitDYWxsZWQgZHVyaW5nIHRhc2sgZXhpdC4KIAotaW50IHBvcHVsYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCkKK2ludCBwb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnApCiAKIENhbGxlZCBhZnRlciBjcmVhdGlvbiBvZiBhIGNncm91cCB0byBhbGxvdyBhIHN1YnN5c3RlbSB0byBwb3B1bGF0ZQogdGhlIGNncm91cCBkaXJlY3Rvcnkgd2l0aCBmaWxlIGVudHJpZXMuICBUaGUgc3Vic3lzdGVtIHNob3VsZCBtYWtlCkBAIC01MTYsNyArNTE2LDcgQEAKIG1ldGhvZCBjYW4gcmV0dXJuIGFuIGVycm9yIGNvZGUsIHRoZSBlcnJvciBjb2RlIGlzIGN1cnJlbnRseSBub3QKIGFsd2F5cyBoYW5kbGVkIHdlbGwuCiAKLXZvaWQgcG9zdF9jbG9uZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCit2b2lkIHBvc3RfY2xvbmUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogCiBDYWxsZWQgYXQgdGhlIGVuZCBvZiBjZ3JvdXBfY2xvbmUoKSB0byBkbyBhbnkgcGFyYW1hdGVyCiBpbml0aWFsaXphdGlvbiB3aGljaCBtaWdodCBiZSByZXF1aXJlZCBiZWZvcmUgYSB0YXNrIGNvdWxkIGF0dGFjaC4gIEZvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jbGktc3RpLXJlbW92YWwudHh0IGIvRG9jdW1lbnRhdGlvbi9jbGktc3RpLXJlbW92YWwudHh0CmluZGV4IDAyMjNjOWQuLjYwOTMyYjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2xpLXN0aS1yZW1vdmFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NsaS1zdGktcmVtb3ZhbC50eHQKQEAgLTQzLDcgKzQzLDcgQEAKIAogYnV0IGZyb20gbm93IG9uIGEgbW9yZSBkaXJlY3QgbWV0aG9kIG9mIGxvY2tpbmcgaGFzIHRvIGJlIHVzZWQ6CiAKLQlzcGlubG9ja190IGRyaXZlcl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCURFRklORV9TUElOTE9DSyhkcml2ZXJfbG9jayk7CiAJc3RydWN0IGRyaXZlcl9kYXRhOwogCiAJaXJxX2hhbmRsZXIgKC4uLikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dAppbmRleCBiNWJiZWE5Li44NjZiOWNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbnRyb2xsZXJzL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0CkBAIC0xLDQgKzEsOCBAQAotTWVtb3J5IENvbnRyb2xsZXIKK01lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyCisKK05PVEU6IFRoZSBNZW1vcnkgUmVzb3VyY2UgQ29udHJvbGxlciBoYXMgYmVlbiBnZW5lcmljYWxseSBiZWVuIHJlZmVycmVkCit0byBhcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaW4gdGhpcyBkb2N1bWVudC4gRG8gbm90IGNvbmZ1c2UgbWVtb3J5IGNvbnRyb2xsZXIKK3VzZWQgaGVyZSB3aXRoIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIHVzZWQgaW4gaGFyZHdhcmUuCiAKIFNhbGllbnQgZmVhdHVyZXMKIApAQCAtMTUyLDcgKzE1Niw3IEBACiAKIGEuIEVuYWJsZSBDT05GSUdfQ0dST1VQUwogYi4gRW5hYmxlIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUwotYy4gRW5hYmxlIENPTkZJR19DR1JPVVBfTUVNX0NPTlQKK2MuIEVuYWJsZSBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogCiAxLiBQcmVwYXJlIHRoZSBjZ3JvdXBzCiAjIG1rZGlyIC1wIC9jZ3JvdXBzCkBAIC0xNjQsMjAgKzE2OCwyMCBAQAogCiBTaW5jZSBub3cgd2UncmUgaW4gdGhlIDAgY2dyb3VwLAogV2UgY2FuIGFsdGVyIHRoZSBtZW1vcnkgbGltaXQ6Ci0jIGVjaG8gLW4gNE0gPiAvY2dyb3Vwcy8wL21lbW9yeS5saW1pdF9pbl9ieXRlcworIyBlY2hvIDRNID4gL2Nncm91cHMvMC9tZW1vcnkubGltaXRfaW5fYnl0ZXMKIAogTk9URTogV2UgY2FuIHVzZSBhIHN1ZmZpeCAoaywgSywgbSwgTSwgZyBvciBHKSB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4ga2lsbywKIG1lZ2Egb3IgZ2lnYWJ5dGVzLgogCiAjIGNhdCAvY2dyb3Vwcy8wL21lbW9yeS5saW1pdF9pbl9ieXRlcwotNDE5NDMwNCBCeXRlcworNDE5NDMwNAogCiBOT1RFOiBUaGUgaW50ZXJmYWNlIGhhcyBub3cgY2hhbmdlZCB0byBkaXNwbGF5IHRoZSB1c2FnZSBpbiBieXRlcwogaW5zdGVhZCBvZiBwYWdlcwogCiBXZSBjYW4gY2hlY2sgdGhlIHVzYWdlOgogIyBjYXQgL2Nncm91cHMvMC9tZW1vcnkudXNhZ2VfaW5fYnl0ZXMKLTEyMTY1MTIgQnl0ZXMKKzEyMTY1MTIKIAogQSBzdWNjZXNzZnVsIHdyaXRlIHRvIHRoaXMgZmlsZSBkb2VzIG5vdCBndWFyYW50ZWUgYSBzdWNjZXNzZnVsIHNldCBvZgogdGhpcyBsaW1pdCB0byB0aGUgdmFsdWUgd3JpdHRlbiBpbnRvIHRoZSBmaWxlLiAgVGhpcyBjYW4gYmUgZHVlIHRvIGEKQEAgLTE4NSw5ICsxODksOSBAQAogYXZhaWxhYmlsaXR5IG9mIG1lbW9yeSBvbiB0aGUgc3lzdGVtLiAgVGhlIHVzZXIgaXMgcmVxdWlyZWQgdG8gcmUtcmVhZAogdGhpcyBmaWxlIGFmdGVyIGEgd3JpdGUgdG8gZ3VhcmFudGVlIHRoZSB2YWx1ZSBjb21taXR0ZWQgYnkgdGhlIGtlcm5lbC4KIAotIyBlY2hvIC1uIDEgPiBtZW1vcnkubGltaXRfaW5fYnl0ZXMKKyMgZWNobyAxID4gbWVtb3J5LmxpbWl0X2luX2J5dGVzCiAjIGNhdCBtZW1vcnkubGltaXRfaW5fYnl0ZXMKLTQwOTYgQnl0ZXMKKzQwOTYKIAogVGhlIG1lbW9yeS5mYWlsY250IGZpZWxkIGdpdmVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgY2dyb3VwIGxpbWl0IHdhcwogZXhjZWVkZWQuCkBAIC0xOTcsNyArMjAxLDcgQEAKIAogVGhlIG1lbW9yeS5mb3JjZV9lbXB0eSBnaXZlcyBhbiBpbnRlcmZhY2UgdG8gZHJvcCAqYWxsKiBjaGFyZ2VzIGJ5IGZvcmNlLgogCi0jIGVjaG8gLW4gMSA+IG1lbW9yeS5mb3JjZV9lbXB0eQorIyBlY2hvIDEgPiBtZW1vcnkuZm9yY2VfZW1wdHkKIAogd2lsbCBkcm9wIGFsbCBjaGFyZ2VzIGluIGNncm91cC4gQ3VycmVudGx5LCB0aGlzIGlzIG1haW50YWluZWQgZm9yIHRlc3QuCiAKQEAgLTIzMywxMyArMjM3LDYgQEAKIHRhc2tzIGhhdmUgbWlncmF0ZWQgYXdheSBmcm9tIGl0LiBTdWNoIGNoYXJnZXMgYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCBhdAogcm1kaXIoKSBpZiB0aGVyZSBhcmUgbm8gdGFza3MuCiAKLTQuNCBDaG9vc2luZyB3aGF0IHRvIGFjY291bnQgIC0tIFBhZ2UgQ2FjaGUgKHVubWFwcGVkKSB2cyBSU1MgKG1hcHBlZCk/Ci0KLVRoZSB0eXBlIG9mIG1lbW9yeSBhY2NvdW50ZWQgYnkgdGhlIGNncm91cCBjYW4gYmUgbGltaXRlZCB0byBqdXN0Ci1tYXBwZWQgcGFnZXMgYnkgd3JpdGluZyAiMSIgdG8gbWVtb3J5LmNvbnRyb2xfdHlwZSBmaWVsZAotCi1lY2hvIC1uIDEgPiBtZW1vcnkuY29udHJvbF90eXBlCi0KIDUuIFRPRE8KIAogMS4gQWRkIHN1cHBvcnQgZm9yIGFjY291bnRpbmcgaHVnZSBwYWdlcyAoYXMgYSBzZXBhcmF0ZSBjb250cm9sbGVyKQpAQCAtMjYyLDE4ICsyNTksMTkgQEAKIDMuIEVtZWxpYW5vdiwgUGF2ZWwuIFJlc291cmNlIGNvbnRyb2xsZXJzIGJhc2VkIG9uIHByb2Nlc3MgY2dyb3VwcwogICAgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy8zLzYvMTk4CiA0LiBFbWVsaWFub3YsIFBhdmVsLiBSU1MgY29udHJvbGxlciBiYXNlZCBvbiBwcm9jZXNzIGNncm91cHMgKHYyKQotICAgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy80LzkvNzQKKyAgIGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDcvNC85Lzc4CiA1LiBFbWVsaWFub3YsIFBhdmVsLiBSU1MgY29udHJvbGxlciBiYXNlZCBvbiBwcm9jZXNzIGNncm91cHMgKHYzKQogICAgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy81LzMwLzI0NAogNi4gTWVuYWdlLCBQYXVsLiBDb250cm9sIEdyb3VwcyB2MTAsIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzIzNjAzMi8KIDcuIFZhaWR5YW5hdGhhbiwgU3Jpbml2YXNhbiwgQ29udHJvbCBHcm91cHM6IFBhZ2VjYWNoZSBhY2NvdW50aW5nIGFuZCBjb250cm9sCiAgICBzdWJzeXN0ZW0gKHYzKSwgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjM1NTM0LwotOC4gU2luZ2gsIEJhbGJpci4gUlNTIGNvbnRyb2xsZXIgVjIgdGVzdCByZXN1bHRzIChsbWJlbmNoKSwKKzguIFNpbmdoLCBCYWxiaXIuIFJTUyBjb250cm9sbGVyIHYyIHRlc3QgcmVzdWx0cyAobG1iZW5jaCksCiAgICBodHRwOi8vbGttbC5vcmcvbGttbC8yMDA3LzUvMTcvMjMyCi05LiBTaW5naCwgQmFsYmlyLiBSU1MgY29udHJvbGxlciBWMiBBSU05IHJlc3VsdHMKKzkuIFNpbmdoLCBCYWxiaXIuIFJTUyBjb250cm9sbGVyIHYyIEFJTTkgcmVzdWx0cwogICAgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy81LzE4LzEKLTEwLiBTaW5naCwgQmFsYmlyLiBNZW1vcnkgY29udHJvbGxlciB2NiByZXN1bHRzLAorMTAuIFNpbmdoLCBCYWxiaXIuIE1lbW9yeSBjb250cm9sbGVyIHY2IHRlc3QgcmVzdWx0cywKICAgICBodHRwOi8vbGttbC5vcmcvbGttbC8yMDA3LzgvMTkvMzYKLTExLiBTaW5naCwgQmFsYmlyLiBNZW1vcnkgY29udHJvbGxlciB2NiwgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy84LzE3LzY5CisxMS4gU2luZ2gsIEJhbGJpci4gTWVtb3J5IGNvbnRyb2xsZXIgaW50cm9kdWN0aW9uICh2NiksCisgICAgaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy84LzE3LzY5CiAxMi4gQ29yYmV0LCBKb25hdGhhbiwgQ29udHJvbGxpbmcgbWVtb3J5IHVzZSBpbiBjZ3JvdXBzLAogICAgIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzI0Mzc5NS8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CmluZGV4IDQzZGI2ZmUuLmFhODU0YjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dApAQCAtOCw2ICs4LDcgQEAKIE1vZGlmaWVkIGJ5IFBhdWwgSmFja3NvbiA8cGpAc2dpLmNvbT4KIE1vZGlmaWVkIGJ5IENocmlzdG9waCBMYW1ldGVyIDxjbGFtZXRlckBzZ2kuY29tPgogTW9kaWZpZWQgYnkgUGF1bCBNZW5hZ2UgPG1lbmFnZUBnb29nbGUuY29tPgorTW9kaWZpZWQgYnkgSGlkZXRvc2hpIFNldG8gPHNldG8uaGlkZXRvc2hpQGpwLmZ1aml0c3UuY29tPgogCiBDT05URU5UUzoKID09PT09PT09PQpAQCAtMjAsNyArMjEsOCBAQAogICAxLjUgV2hhdCBpcyBtZW1vcnlfcHJlc3N1cmUgPwogICAxLjYgV2hhdCBpcyBtZW1vcnkgc3ByZWFkID8KICAgMS43IFdoYXQgaXMgc2NoZWRfbG9hZF9iYWxhbmNlID8KLSAgMS44IEhvdyBkbyBJIHVzZSBjcHVzZXRzID8KKyAgMS44IFdoYXQgaXMgc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsID8KKyAgMS45IEhvdyBkbyBJIHVzZSBjcHVzZXRzID8KIDIuIFVzYWdlIEV4YW1wbGVzIGFuZCBTeW50YXgKICAgMi4xIEJhc2ljIFVzYWdlCiAgIDIuMiBBZGRpbmcvcmVtb3ZpbmcgY3B1cwpAQCAtMjA5LDcgKzIxMSw3IEBACiBUaGUgY3B1cyBhbmQgbWVtcyBmaWxlcyBpbiB0aGUgcm9vdCAodG9wX2NwdXNldCkgY3B1c2V0IGFyZQogcmVhZC1vbmx5LiAgVGhlIGNwdXMgZmlsZSBhdXRvbWF0aWNhbGx5IHRyYWNrcyB0aGUgdmFsdWUgb2YKIGNwdV9vbmxpbmVfbWFwIHVzaW5nIGEgQ1BVIGhvdHBsdWcgbm90aWZpZXIsIGFuZCB0aGUgbWVtcyBmaWxlCi1hdXRvbWF0aWNhbGx5IHRyYWNrcyB0aGUgdmFsdWUgb2Ygbm9kZV9zdGF0ZXNbTl9NRU1PUlldLS1pLmUuLAorYXV0b21hdGljYWxseSB0cmFja3MgdGhlIHZhbHVlIG9mIG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldLS1pLmUuLAogbm9kZXMgd2l0aCBtZW1vcnktLXVzaW5nIHRoZSBjcHVzZXRfdHJhY2tfb25saW5lX25vZGVzKCkgaG9vay4KIAogCkBAIC00OTcsNyArNDk5LDczIEBACiBwYXJ0aXRpb24gcmVxdWVzdGVkIHdpdGggdGhlIGN1cnJlbnQsIGFuZCB1cGRhdGVzIGl0cyBzY2hlZCBkb21haW5zLAogcmVtb3ZpbmcgdGhlIG9sZCBhbmQgYWRkaW5nIHRoZSBuZXcsIGZvciBlYWNoIGNoYW5nZS4KIAotMS44IEhvdyBkbyBJIHVzZSBjcHVzZXRzID8KKworMS44IFdoYXQgaXMgc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsID8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHNjaGVkIGRvbWFpbiwgdGhlIHNjaGVkdWxlciBtaWdyYXRlcyB0YXNrcyBpbiAyIHdheXM7IHBlcmlvZGljIGxvYWQKK2JhbGFuY2Ugb24gdGljaywgYW5kIGF0IHRpbWUgb2Ygc29tZSBzY2hlZHVsZSBldmVudHMuCisKK1doZW4gYSB0YXNrIGlzIHdva2VuIHVwLCBzY2hlZHVsZXIgdHJ5IHRvIG1vdmUgdGhlIHRhc2sgb24gaWRsZSBDUFUuCitGb3IgZXhhbXBsZSwgaWYgYSB0YXNrIEEgcnVubmluZyBvbiBDUFUgWCBhY3RpdmF0ZXMgYW5vdGhlciB0YXNrIEIKK29uIHRoZSBzYW1lIENQVSBYLCBhbmQgaWYgQ1BVIFkgaXMgWCdzIHNpYmxpbmcgYW5kIHBlcmZvcm1pbmcgaWRsZSwKK3RoZW4gc2NoZWR1bGVyIG1pZ3JhdGUgdGFzayBCIHRvIENQVSBZIHNvIHRoYXQgdGFzayBCIGNhbiBzdGFydCBvbgorQ1BVIFkgd2l0aG91dCB3YWl0aW5nIHRhc2sgQSBvbiBDUFUgWC4KKworQW5kIGlmIGEgQ1BVIHJ1biBvdXQgb2YgdGFza3MgaW4gaXRzIHJ1bnF1ZXVlLCB0aGUgQ1BVIHRyeSB0byBwdWxsCitleHRyYSB0YXNrcyBmcm9tIG90aGVyIGJ1c3kgQ1BVcyB0byBoZWxwIHRoZW0gYmVmb3JlIGl0IGlzIGdvaW5nIHRvCitiZSBpZGxlLgorCitPZiBjb3Vyc2UgaXQgdGFrZXMgc29tZSBzZWFyY2hpbmcgY29zdCB0byBmaW5kIG1vdmFibGUgdGFza3MgYW5kL29yCitpZGxlIENQVXMsIHRoZSBzY2hlZHVsZXIgbWlnaHQgbm90IHNlYXJjaCBhbGwgQ1BVcyBpbiB0aGUgZG9tYWluCitldmVyeXRpbWUuICBJbiBmYWN0LCBpbiBzb21lIGFyY2hpdGVjdHVyZXMsIHRoZSBzZWFyY2hpbmcgcmFuZ2VzIG9uCitldmVudHMgYXJlIGxpbWl0ZWQgaW4gdGhlIHNhbWUgc29ja2V0IG9yIG5vZGUgd2hlcmUgdGhlIENQVSBsb2NhdGVzLAord2hpbGUgdGhlIGxvYWQgYmFsYW5jZSBvbiB0aWNrIHNlYXJjaHMgYWxsLgorCitGb3IgZXhhbXBsZSwgYXNzdW1lIENQVSBaIGlzIHJlbGF0aXZlbHkgZmFyIGZyb20gQ1BVIFguICBFdmVuIGlmIENQVSBaCitpcyBpZGxlIHdoaWxlIENQVSBYIGFuZCB0aGUgc2libGluZ3MgYXJlIGJ1c3ksIHNjaGVkdWxlciBjYW4ndCBtaWdyYXRlCit3b2tlbiB0YXNrIEIgZnJvbSBYIHRvIFogc2luY2UgaXQgaXMgb3V0IG9mIGl0cyBzZWFyY2hpbmcgcmFuZ2UuCitBcyB0aGUgcmVzdWx0LCB0YXNrIEIgb24gQ1BVIFggbmVlZCB0byB3YWl0IHRhc2sgQSBvciB3YWl0IGxvYWQgYmFsYW5jZQorb24gdGhlIG5leHQgdGljay4gIEZvciBzb21lIGFwcGxpY2F0aW9ucyBpbiBzcGVjaWFsIHNpdHVhdGlvbiwgd2FpdGluZworMSB0aWNrIG1heSBiZSB0b28gbG9uZy4KKworVGhlICdzY2hlZF9yZWxheF9kb21haW5fbGV2ZWwnIGZpbGUgYWxsb3dzIHlvdSB0byByZXF1ZXN0IGNoYW5naW5nCit0aGlzIHNlYXJjaGluZyByYW5nZSBhcyB5b3UgbGlrZS4gIFRoaXMgZmlsZSB0YWtlcyBpbnQgdmFsdWUgd2hpY2gKK2luZGljYXRlcyBzaXplIG9mIHNlYXJjaGluZyByYW5nZSBpbiBsZXZlbHMgaWRlYWxseSBhcyBmb2xsb3dzLAorb3RoZXJ3aXNlIGluaXRpYWwgdmFsdWUgLTEgdGhhdCBpbmRpY2F0ZXMgdGhlIGNwdXNldCBoYXMgbm8gcmVxdWVzdC4KKworICAtMSAgOiBubyByZXF1ZXN0LiB1c2Ugc3lzdGVtIGRlZmF1bHQgb3IgZm9sbG93IHJlcXVlc3Qgb2Ygb3RoZXJzLgorICAgMCAgOiBubyBzZWFyY2guCisgICAxICA6IHNlYXJjaCBzaWJsaW5ncyAoaHlwZXJ0aHJlYWRzIGluIGEgY29yZSkuCisgICAyICA6IHNlYXJjaCBjb3JlcyBpbiBhIHBhY2thZ2UuCisgICAzICA6IHNlYXJjaCBjcHVzIGluIGEgbm9kZSBbPSBzeXN0ZW0gd2lkZSBvbiBub24tTlVNQSBzeXN0ZW1dCisgKCA0ICA6IHNlYXJjaCBub2RlcyBpbiBhIGNodW5rIG9mIG5vZGUgW29uIE5VTUEgc3lzdGVtXSApCisgKCA1fiA6IHNlYXJjaCBzeXN0ZW0gd2lkZSBbb24gTlVNQSBzeXN0ZW1dKQorCitUaGlzIGZpbGUgaXMgcGVyLWNwdXNldCBhbmQgYWZmZWN0IHRoZSBzY2hlZCBkb21haW4gd2hlcmUgdGhlIGNwdXNldAorYmVsb25ncyB0by4gIFRoZXJlZm9yZSBpZiB0aGUgZmxhZyAnc2NoZWRfbG9hZF9iYWxhbmNlJyBvZiBhIGNwdXNldAoraXMgZGlzYWJsZWQsIHRoZW4gJ3NjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCcgaGF2ZSBubyBlZmZlY3Qgc2luY2UKK3RoZXJlIGlzIG5vIHNjaGVkIGRvbWFpbiBiZWxvbmdpbmcgdGhlIGNwdXNldC4KKworSWYgbXVsdGlwbGUgY3B1c2V0cyBhcmUgb3ZlcmxhcHBpbmcgYW5kIGhlbmNlIHRoZXkgZm9ybSBhIHNpbmdsZSBzY2hlZAorZG9tYWluLCB0aGUgbGFyZ2VzdCB2YWx1ZSBhbW9uZyB0aG9zZSBpcyB1c2VkLiAgQmUgY2FyZWZ1bCwgaWYgb25lCityZXF1ZXN0cyAwIGFuZCBvdGhlcnMgYXJlIC0xIHRoZW4gMCBpcyB1c2VkLgorCitOb3RlIHRoYXQgbW9kaWZ5aW5nIHRoaXMgZmlsZSB3aWxsIGhhdmUgYm90aCBnb29kIGFuZCBiYWQgZWZmZWN0cywKK2FuZCB3aGV0aGVyIGl0IGlzIGFjY2VwdGFibGUgb3Igbm90IHdpbGwgYmUgZGVwZW5kIG9uIHlvdXIgc2l0dWF0aW9uLgorRG9uJ3QgbW9kaWZ5IHRoaXMgZmlsZSBpZiB5b3UgYXJlIG5vdCBzdXJlLgorCitJZiB5b3VyIHNpdHVhdGlvbiBpczoKKyAtIFRoZSBtaWdyYXRpb24gY29zdHMgYmV0d2VlbiBlYWNoIGNwdSBjYW4gYmUgYXNzdW1lZCBjb25zaWRlcmFibHkKKyAgIHNtYWxsKGZvciB5b3UpIGR1ZSB0byB5b3VyIHNwZWNpYWwgYXBwbGljYXRpb24ncyBiZWhhdmlvciBvcgorICAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGZvciBDUFUgY2FjaGUgZXRjLgorIC0gVGhlIHNlYXJjaGluZyBjb3N0IGRvZXNuJ3QgaGF2ZSBpbXBhY3QoZm9yIHlvdSkgb3IgeW91IGNhbiBtYWtlCisgICB0aGUgc2VhcmNoaW5nIGNvc3QgZW5vdWdoIHNtYWxsIGJ5IG1hbmFnaW5nIGNwdXNldCB0byBjb21wYWN0IGV0Yy4KKyAtIFRoZSBsYXRlbmN5IGlzIHJlcXVpcmVkIGV2ZW4gaXQgc2FjcmlmaWNlcyBjYWNoZSBoaXQgcmF0ZSBldGMuCit0aGVuIGluY3JlYXNpbmcgJ3NjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCcgd291bGQgYmVuZWZpdCB5b3UuCisKKworMS45IEhvdyBkbyBJIHVzZSBjcHVzZXRzID8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIG9yZGVyIHRvIG1pbmltaXplIHRoZSBpbXBhY3Qgb2YgY3B1c2V0cyBvbiBjcml0aWNhbCBrZXJuZWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQgYi9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CmluZGV4IGRlNDgwNGUuLjU5YTkxZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dApAQCAtMzYsMTkgKzM2LDI0IEBACiBEcml2ZXJzCiAtLS0tLS0tCiAKLVRoZSBPSENJLTEzOTQgZHJpdmVycyBpbiBkcml2ZXJzL2ZpcmV3aXJlIGFuZCBkcml2ZXJzL2llZWUxMzk0IGluaXRpYWxpemUKLXRoZSBPSENJLTEzOTQgY29udHJvbGxlcnMgdG8gYSB3b3JraW5nIHN0YXRlIGFuZCBjYW4gYmUgdXNlZCB0byBlbmFibGUKLXBoeXNpY2FsIERNQS4gQnkgZGVmYXVsdCB5b3Ugb25seSBoYXZlIHRvIGxvYWQgdGhlIGRyaXZlciwgYW5kIHBoeXNpY2FsCi1ETUEgYWNjZXNzIHdpbGwgYmUgZ3JhbnRlZCB0byBhbGwgcmVtb3RlIG5vZGVzLCBidXQgaXQgY2FuIGJlIHR1cm5lZCBvZmYKLXdoZW4gdXNpbmcgdGhlIG9oY2kxMzk0IGRyaXZlci4KK1RoZSBvaGNpMTM5NCBkcml2ZXIgaW4gZHJpdmVycy9pZWVlMTM5NCBpbml0aWFsaXplcyB0aGUgT0hDSS0xMzk0IGNvbnRyb2xsZXJzCit0byBhIHdvcmtpbmcgc3RhdGUgYW5kIGVuYWJsZXMgcGh5c2ljYWwgRE1BIGJ5IGRlZmF1bHQgZm9yIGFsbCByZW1vdGUgbm9kZXMuCitUaGlzIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5IG9oY2kxMzk0J3MgbW9kdWxlIHBhcmFtZXRlciBwaHlzX2RtYT0wLgogCi1CZWNhdXNlIHRoZXNlIGRyaXZlcnMgZGVwZW5kIG9uIHRoZSBQQ0kgZW51bWVyYXRpb24gdG8gYmUgY29tcGxldGVkLCBhbgotaW5pdGlhbGl6YXRpb24gcm91dGluZSB3aGljaCBjYW4gcnVucyBwcmV0dHkgZWFybHkgKGxvbmcgYmVmb3JlIGNvbnNvbGVfaW5pdCgpLAotd2hpY2ggbWFrZXMgdGhlIHByaW50ayBidWZmZXIgYXBwZWFyIG9uIHRoZSBjb25zb2xlIGNhbiBiZSBjYWxsZWQpIHdhcyB3cml0dGVuLgorVGhlIGFsdGVybmF0aXZlIGZpcmV3aXJlLW9oY2kgZHJpdmVyIGluIGRyaXZlcnMvZmlyZXdpcmUgdXNlcyBmaWx0ZXJlZCBwaHlzaWNhbAorRE1BIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIG1vcmUgc2VjdXJlIGJ1dCBub3Qgc3VpdGFibGUgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcuCitDb21waWxlIHRoZSBkcml2ZXIgd2l0aCBDT05GSUdfRklSRVdJUkVfT0hDSV9SRU1PVEVfRE1BIChLZXJuZWwgaGFja2luZyBtZW51OgorUmVtb3RlIGRlYnVnZ2luZyBvdmVyIEZpcmVXaXJlIHdpdGggZmlyZXdpcmUtb2hjaSkgdG8gZ2V0IHVuZmlsdGVyZWQgcGh5c2ljYWwKK0RNQS4KKworQmVjYXVzZSBvaGNpMTM5NCBhbmQgZmlyZXdpcmUtb2hjaSBkZXBlbmQgb24gdGhlIFBDSSBlbnVtZXJhdGlvbiB0byBiZQorY29tcGxldGVkLCBhbiBpbml0aWFsaXphdGlvbiByb3V0aW5lIHdoaWNoIHJ1bnMgcHJldHR5IGVhcmx5IGhhcyBiZWVuCitpbXBsZW1lbnRlZCBmb3IgeDg2LiAgVGhpcyByb3V0aW5lIHJ1bnMgbG9uZyBiZWZvcmUgY29uc29sZV9pbml0KCkgY2FuIGJlCitjYWxsZWQsIGkuZS4gYmVmb3JlIHRoZSBwcmludGsgYnVmZmVyIGFwcGVhcnMgb24gdGhlIGNvbnNvbGUuCiAKIFRvIGFjdGl2YXRlIGl0LCBlbmFibGUgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQgKEtlcm5lbCBoYWNraW5nIG1lbnU6Ci1Qcm92aWRlIGNvZGUgZm9yIGVuYWJsaW5nIERNQSBvdmVyIEZpcmVXaXJlIGVhcmx5IG9uIGJvb3QpIGFuZCBwYXNzIHRoZQotcGFyYW1ldGVyICJvaGNpMTM5NF9kbWE9ZWFybHkiIHRvIHRoZSByZWNvbXBpbGVkIGtlcm5lbCBvbiBib290LgorUmVtb3RlIGRlYnVnZ2luZyBvdmVyIEZpcmVXaXJlIGVhcmx5IG9uIGJvb3QpIGFuZCBwYXNzIHRoZSBwYXJhbWV0ZXIKKyJvaGNpMTM5NF9kbWE9ZWFybHkiIHRvIHRoZSByZWNvbXBpbGVkIGtlcm5lbCBvbiBib290LgogCiBUb29scwogLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCmluZGV4IGMwOWE5NmIuLjM1NGFlYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYKKysrIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgpAQCAtNDcsNyArNDcsNiBAQAogLm1tCiA1M2M3MDBfZC5oCiA1M2M4eHhfZC5oKgotQml0S2VlcGVyCiBDT1BZSU5HCiBDUkVESVRTCiBDVlMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWFybHktdXNlcnNwYWNlL1JFQURNRSBiL0RvY3VtZW50YXRpb24vZWFybHktdXNlcnNwYWNlL1JFQURNRQppbmRleCA3NjZkMzIwLi5lMzVkODMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Vhcmx5LXVzZXJzcGFjZS9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9lYXJseS11c2Vyc3BhY2UvUkVBRE1FCkBAIC04OSw4ICs4OSw4IEBACiBZb3UgY2FuIG9idGFpbiBzb21ld2hhdCBpbmZyZXF1ZW50IHNuYXBzaG90cyBvZiBrbGliYyBmcm9tCiBmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgvbGlicy9rbGliYy8KIAotRm9yIGFjdGl2ZSB1c2VycywgeW91IGFyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBrbGliYyBCaXRLZWVwZXIKLXJlcG9zaXRvcmllcywgYXQgaHR0cDovL2tsaWJjLmJrYml0cy5uZXQvCitGb3IgYWN0aXZlIHVzZXJzLCB5b3UgYXJlIGJldHRlciBvZmYgdXNpbmcgdGhlIGtsaWJjIGdpdAorcmVwb3NpdG9yeSwgYXQgaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpYnMva2xpYmMva2xpYmMuZ2l0CiAKIFRoZSBzdGFuZGFsb25lIGtsaWJjIGRpc3RyaWJ1dGlvbiBjdXJyZW50bHkgcHJvdmlkZXMgdGhyZWUgY29tcG9uZW50cywKIGluIGFkZGl0aW9uIHRvIHRoZSBrbGliYyBsaWJyYXJ5OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jbWFwX3hmYmRldi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2NtYXBfeGZiZGV2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUxZjBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9jbWFwX3hmYmRldi50eHQKQEAgLTAsMCArMSw1MyBAQAorVW5kZXJzdGFuZGluZyBmYmRldidzIGNtYXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIG5vdGVzIGV4cGxhaW4gaG93IFgncyBkaXggbGF5ZXIgdXNlcyBmYmRldidzIGNtYXAgc3RydWN0dXJlcy4KKworKi4gZXhhbXBsZSBvZiByZWxldmFudCBzdHJ1Y3R1cmVzIGluIGZiZGV2IGFzIHVzZWQgZm9yIGEgMy1iaXQgZ3JheXNjYWxlIGNtYXAKK3N0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB7CisgICAgICAgIC5iaXRzX3Blcl9waXhlbCA9IDgsCisgICAgICAgIC5ncmF5c2NhbGUgICAgICA9IDEsCisgICAgICAgIC5yZWQgPSAgICAgICAgICB7IDQsIDMsIDAgfSwKKyAgICAgICAgLmdyZWVuID0gICAgICAgIHsgMCwgMCwgMCB9LAorICAgICAgICAuYmx1ZSA9ICAgICAgICAgeyAwLCAwLCAwIH0sCit9CitzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8geworICAgICAgICAudmlzdWFsID0gICAgICAgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUiwKK30KK2ZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJaW5mby0+Y21hcC5yZWRbaV0gPSAoKCgyKmkpKzEpKigweEZGRkYpKS8xNjsKK21lbWNweShpbmZvLT5jbWFwLmdyZWVuLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqOCk7CittZW1jcHkoaW5mby0+Y21hcC5ibHVlLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqOCk7CisKKyouIFgxMSBhcHBzIGRvIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgd2hlbiB0cnlpbmcgdG8gdXNlIGdyYXlzY2FsZS4KK2ZvciAoaT0wOyBpIDwgODsgaSsrKSB7CisJY2hhciBjb2xvcnNwZWNbNjRdOworCW1lbXNldChjb2xvcnNwZWMsMCw2NCk7CisJc3ByaW50Zihjb2xvcnNwZWMsICJyZ2I6JXgvJXgvJXgiLCBpKjM2LGkqMzYsaSozNik7CisJaWYgKCFYUGFyc2VDb2xvcihvdXRwdXREaXNwbGF5LCB0ZXN0Q29sb3JtYXAsIGNvbG9yc3BlYywgJndhbnRlZENvbG9yKSkKKwkJcHJpbnRmKCJDYW4ndCBnZXQgY29sb3IgJXNcbiIsY29sb3JzcGVjKTsKKwlYQWxsb2NDb2xvcihvdXRwdXREaXNwbGF5LCB0ZXN0Q29sb3JtYXAsICZ3YW50ZWRDb2xvcik7CisJZ3JheXNbaV0gPSB3YW50ZWRDb2xvcjsKK30KK1RoZXJlJ3MgYWxzbyBuYW1lZCBlcXVpdmFsZW50cyBsaWtlIGdyYXkxLi54IHByb3ZpZGVkIHlvdSBoYXZlIGFuIHJnYi50eHQuCisKK1NvbWV3aGVyZSBpbiBYJ3MgY2FsbGNoYWluLCB0aGlzIHJlc3VsdHMgaW4gYSBjYWxsIHRvIFggY29kZSB0aGF0IGhhbmRsZXMgdGhlCitjb2xvcm1hcC4gRm9yIGV4YW1wbGUsIFhmYmRldiBoaXRzIHRoZSBmb2xsb3dpbmc6CisKK3hjLTAxMTAxMC9wcm9ncmFtcy9Yc2VydmVyL2RpeC9jb2xvcm1hcC5jOgorCitGaW5kQmVzdFBpeGVsKHBlbnRGaXJzdCwgc2l6ZSwgcHJnYiwgY2hhbm5lbCkKKworZHIgPSAobG9uZykgcGVudC0+Y28ubG9jYWwucmVkIC0gcHJnYi0+cmVkOworZGcgPSAobG9uZykgcGVudC0+Y28ubG9jYWwuZ3JlZW4gLSBwcmdiLT5ncmVlbjsKK2RiID0gKGxvbmcpIHBlbnQtPmNvLmxvY2FsLmJsdWUgLSBwcmdiLT5ibHVlOworc3EgPSBkciAqIGRyOworVW5zaWduZWRUb0JpZ051bSAoc3EsICZzdW0pOworQmlnTnVtQWRkICgmc3VtLCAmdGVtcCwgJnN1bSk7CisKK2NvLmxvY2FsLnJlZCBhcmUgZW50cmllcyB0aGF0IHdlcmUgYnJvdWdodCBpbiB0aHJvdWdoIEZCSU9HRVRDTUFQIHdoaWNoIGNvbWUKK2RpcmVjdGx5IGZyb20gdGhlIGluZm8tPmNtYXAucmVkIHRoYXQgd2FzIGxpc3RlZCBhYm92ZS4gVGhlIHByZ2IgaXMgdGhlIHJnYgordGhhdCB0aGUgYXBwIHdhbnRzIHRvIG1hdGNoIHRvLiBUaGUgYWJvdmUgY29kZSBpcyBkb2luZyB3aGF0IGxvb2tzIGxpa2UgYSBsZWFzdAorc3F1YXJlcyBtYXRjaGluZyBmdW5jdGlvbi4gVGhhdCdzIHdoeSB0aGUgY21hcCBlbnRyaWVzIGNhbid0IGJlIHNldCB0byB0aGUgbGVmdAoraGFuZCBzaWRlIGJvdW5kYXJpZXMgb2YgYSBjb2xvciByYW5nZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9tZXRyb25vbWVmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL21ldHJvbm9tZWZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWEyZTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9tZXRyb25vbWVmYi50eHQKQEAgLTAsMCArMSwzOCBAQAorCQkJTWV0cm9ub21lZmIKKwkJCS0tLS0tLS0tLS0tCitNYWludGFpbmVkIGJ5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sLmdtYWlsLmNvbT4KK0xhc3QgcmV2aXNlZDogTm92IDIwLCAyMDA3CisKK01ldHJvbm9tZWZiIGlzIGEgZHJpdmVyIGZvciB0aGUgTWV0cm9ub21lIGRpc3BsYXkgY29udHJvbGxlci4gVGhlIGNvbnRyb2xsZXIKK2lzIGZyb20gRS1JbmsgQ29ycG9yYXRpb24uIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gZHJpdmUgdGhlIEUtSW5rCitWaXpwbGV4IGRpc3BsYXkgbWVkaWEuIEUtSW5rIGhvc3RzIHNvbWUgZGV0YWlscyBvZiB0aGlzIGNvbnRyb2xsZXIgYW5kIHRoZQorZGlzcGxheSBtZWRpYSBoZXJlIGh0dHA6Ly93d3cuZS1pbmsuY29tL3Byb2R1Y3RzL21hdHJpeC9tZXRyb25vbWUuaHRtbCAuCisKK01ldHJvbm9tZSBpcyBpbnRlcmZhY2VkIHRvIHRoZSBob3N0IENQVSB0aHJvdWdoIHRoZSBBTUxDRCBpbnRlcmZhY2UuIFRoZQoraG9zdCBDUFUgZ2VuZXJhdGVzIHRoZSBjb250cm9sIGluZm9ybWF0aW9uIGFuZCB0aGUgaW1hZ2UgaW4gYSBmcmFtZWJ1ZmZlcgord2hpY2ggaXMgdGhlbiBkZWxpdmVyZWQgdG8gdGhlIEFNTENEIGludGVyZmFjZSBieSBhIGhvc3Qgc3BlY2lmaWMgbWV0aG9kLgorQ3VycmVudGx5LCB0aGF0J3MgaW1wbGVtZW50ZWQgZm9yIHRoZSBQWEEncyBMQ0RDIGNvbnRyb2xsZXIuIFRoZSBkaXNwbGF5IGFuZAorZXJyb3Igc3RhdHVzIGFyZSBlYWNoIHB1bGxlZCB0aHJvdWdoIGluZGl2aWR1YWwgR1BJT3MuCisKK01ldHJvbm9tZWZiIHdhcyB3cml0dGVuIGZvciB0aGUgUFhBMjU1L2d1bXN0aXgvbHlyZSBjb21iaW5hdGlvbiBhbmQKK3RoZXJlZm9yZSBjdXJyZW50bHkgaGFzIGJvYXJkIHNldCBzcGVjaWZpYyBjb2RlIGluIGl0LiBJZiBvdGhlciBib2FyZHMgYmFzZWQgb24KK290aGVyIGFyY2hpdGVjdHVyZXMgYXJlIGF2YWlsYWJsZSwgdGhlbiB0aGUgaG9zdCBzcGVjaWZpYyBjb2RlIGNhbiBiZSBzZXBhcmF0ZWQKK2FuZCBhYnN0cmFjdGVkIG91dC4KKworTWV0cm9ub21lZmIgcmVxdWlyZXMgd2F2ZWZvcm0gaW5mb3JtYXRpb24gd2hpY2ggaXMgZGVsaXZlcmVkIHZpYSB0aGUgQU1MQ0QKK2ludGVyZmFjZSB0byB0aGUgbWV0cm9ub21lIGNvbnRyb2xsZXIuIFRoZSB3YXZlZm9ybSBpbmZvcm1hdGlvbiBpcyBleHBlY3RlZCB0bworYmUgZGVsaXZlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgZmlybXdhcmUgY2xhc3MgaW50ZXJmYWNlLiBUaGUgd2F2ZWZvcm0gZmlsZQorY2FuIGJlIGNvbXByZXNzZWQgYXMgbG9uZyBhcyB5b3VyIHVkZXYgb3IgaG90cGx1ZyBzY3JpcHQgaXMgYXdhcmUgb2YgdGhlIG5lZWQKK3RvIHVuY29tcHJlc3MgaXQgYmVmb3JlIGRlbGl2ZXJpbmcgaXQuIG1ldHJvbm9tZWZiIHdpbGwgYXNrIGZvciB3YXZlZm9ybS53YmYKK3doaWNoIHdvdWxkIHR5cGljYWxseSBnbyBpbnRvIC9saWIvZmlybXdhcmUvd2F2ZWZvcm0ud2JmIGRlcGVuZGluZyBvbiB5b3VyCit1ZGV2L2hvdHBsdWcgc2V0dXAuIEkgaGF2ZSBvbmx5IHRlc3RlZCB3aXRoIGEgc2luZ2xlIHdhdmVmb3JtIGZpbGUgd2hpY2ggd2FzCitvcmlnaW5hbGx5IGxhYmVsZWQgMjNQMDEyMDFfNjBfV1QwMTA3X01UQy4gSSBkbyBub3Qga25vdyB3aGF0IGl0IHN0YW5kcyBmb3IuCitDYXV0aW9uIHNob3VsZCBiZSBleGVyY2lzZWQgd2hlbiBtYW5pcHVsYXRpbmcgdGhlIHdhdmVmb3JtIGFzIHRoZXJlIG1heSBiZQorYSBwb3NzaWJpbGl0eSB0aGF0IGl0IGNvdWxkIGhhdmUgc29tZSBwZXJtYW5lbnQgZWZmZWN0cyBvbiB0aGUgZGlzcGxheSBtZWRpYS4KK0kgbmVpdGhlciBoYXZlIGFjY2VzcyB0byBub3Iga25vdyBleGFjdGx5IHdoYXQgdGhlIHdhdmVmb3JtIGRvZXMgaW4gdGVybXMgb2YKK3RoZSBwaHlzaWNhbCBtZWRpYS4KKworTWV0cm9ub21lZmIgdXNlcyB0aGUgZGVmZXJyZWQgSU8gaW50ZXJmYWNlIHNvIHRoYXQgaXQgY2FuIHByb3ZpZGUgYSBtZW1vcnkKK21hcHBhYmxlIGZyYW1lIGJ1ZmZlci4gSXQgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGlueXggKFhmYmRldikuIEl0IGlzIGtub3duCit0byB3b3JrIGF0IHRoaXMgdGltZSB3aXRoIHhleWVzLCB4Y2xvY2ssIHhsb2FkaW1hZ2UsIHhwZGYuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA0ZDNhYTUxLi40NDg3MjlmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0yMDMsMTYgKzIwMyw4IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OiAgIHNrOThsaW4gbmV0d29yayBkcml2ZXIKLVdoZW46ICAgRmVidXJhcnkgMjAwOAotV2h5OiAgICBJbiBrZXJuZWwgdHJlZSB2ZXJzaW9uIG9mIGRyaXZlciBpcyB1bm1haW50YWluZWQuIFNrOThsaW4gZHJpdmVyCi0JcmVwbGFjZWQgYnkgdGhlIHNrZ2UgZHJpdmVyLiAKLVdobzogICAgU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAbGludXgtZm91bmRhdGlvbi5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglpMzg2L3g4Nl82NCBiekltYWdlIHN5bWxpbmtzCi1XaGVuOglBcHJpbCAyMDA4CitXaGVuOglBcHJpbCAyMDEwCiAKIFdoeToJVGhlIGkzODYveDg2XzY0IG1lcmdlIHByb3ZpZGVzIGEgc3ltbGluayB0byB0aGUgb2xkIGJ6SW1hZ2UKIAlsb2NhdGlvbiBzbyBub3QgeWV0IHVwZGF0ZWQgdXNlciBzcGFjZSB0b29scywgZS5nLiBwYWNrYWdlCkBAIC0yMjEsOCArMjEzLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglpMmMtaTgxMCwgaTJjLXByb3NhdmFnZSBhbmQgaTJjLXNhdmFnZTQKIFdoZW46CU1heSAyMDA4CiBXaHk6CVRoZXNlIGRyaXZlcnMgYXJlIHN1cGVyc2VkZWQgYnkgaTgxMGZiLCBpbnRlbGZiIGFuZCBzYXZhZ2VmYi4KQEAgLTIzMCwzMyArMjIwLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CWJjbTQzeHggd2lyZWxlc3MgbmV0d29yayBkcml2ZXIKLVdoZW46CTIuNi4yNgotRmlsZXM6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgKLVdoeToJVGhpcyBkcml2ZXIncyBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZQotCW1hYzgwMjExLWJhc2VkIGI0MyBhbmQgYjQzbGVnYWN5IGRyaXZlcnMuCi1XaG86CUpvaG4gVy4gTGludmlsbGUgPGxpbnZpbGxlQHR1eGRyaXZlci5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGF0OglpZWVlODAyMTEgc29mdG1hYyB3aXJlbGVzcyBuZXR3b3JraW5nIGNvbXBvbmVudAotV2hlbjoJMi42LjI2IChvciBhZnRlciByZW1vdmFsIG9mIGJjbTQzeHggYW5kIHBvcnQgb2YgemQxMjExcncgdG8gbWFjODAyMTEpCi1GaWxlczoJbmV0L2llZWU4MDIxMS9zb2Z0bWFjCi1XaHk6CU5vIGluLWtlcm5lbCBkcml2ZXJzIHdpbGwgZGVwZW5kIG9uIGl0IGFueSBsb25nZXIuCi1XaG86CUpvaG4gVy4gTGludmlsbGUgPGxpbnZpbGxlQHR1eGRyaXZlci5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGF0OglyYzgwMjExLXNpbXBsZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGZvciBtYWM4MDIxMQotV2hlbjoJMi42LjI2Ci1GaWxlczoJbmV0L21hYzgwMjExL3JjODAyMTEtc2ltcGxlLmMKLVdoeToJVGhpcyBhbGdvcml0aG0gd2FzIHByb3ZpZGVkIGZvciByZWZlcmVuY2UgYnV0IGFsd2F5cyBleGhpYml0ZWQgYmFkCi0JcmVzcG9uc2l2ZW5lc3MgYW5kIHBlcmZvcm1hbmNlIGFuZCBoYXMgc29tZSBzZXJpb3VzIGZsYXdzLiBJdCBoYXMgYmVlbgotCXJlcGxhY2VkIGJ5IHJjODAyMTEtcGlkLgotV2hvOglTdGVmYW5vIEJyaXZpbyA8c3RlZmFuby5icml2aW9AcG9saW1pLml0PgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdCAoV2h5KToKIAktIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oIGlwdF90b3MuaCBoZWFkZXIgZmlsZXMKIAkgIChzdXBlcnNlZGVkIGJ5IHh0X1RPUy94dF90b3MgdGFyZ2V0ICYgbWF0Y2gpCkBAIC0yOTgsMTEgKzI2MSwzNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJU29sYXJpcy9TdW5PUyBzeXNjYWxsIGFuZCBiaW5hcnkgc3VwcG9ydCBvbiBTcGFyYworV2hhdDoJaW5pdF9tbSBleHBvcnQKIFdoZW46CTIuNi4yNgotV2h5OglMYXJnZWx5IHVubWFpbnRhaW5lZCBhbmQgYWxtb3N0IGVudGlyZWx5IHVudXNlZC4gIEZpbGUgc3lzdGVtCi0JbGF5ZXJpbmcgdXNlZCB0byBkaXZlcnQgbGlicmFyeSBhbmQgZHluYW1pYyBsaW5rZXIgc2VhcmNoZXMgdG8KLQkvdXNyL2duZW11bCBpcyBleHRyZW1lbHkgYnVnZ3kgYW5kIHVuZml4YWJsZS4gIE1ha2luZyBpdCB3b3JrCi0JaXMgbGFyZ2VseSBwb2ludGxlc3MgYXMgd2l0aG91dCBhIGxvdCBvZiB3b3JrIG9ubHkgdGhlIG1vc3QKLQl0cml2aWFsIG9mIFNvbGFyaXMgYmluYXJpZXMgY2FuIHdvcmsgd2l0aCB0aGUgZW11bGF0aW9uIGNvZGUuCi1XaG86CURhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1doeToJTm90IHVzZWQgaW4tdHJlZS4gVGhlIGN1cnJlbnQgb3V0LW9mLXRyZWUgdXNlcnMgdXNlZCBpdCB0bworCXdvcmsgYXJvdW5kIHByb2JsZW1zIGluIHRoZSBDUEEgY29kZSB3aGljaCBzaG91bGQgYmUgcmVzb2x2ZWQKKwlieSBub3cuIE9uZSB1c2VjYXNlIHdhcyBkZXNjcmliZWQgdG8gcHJvdmlkZSB2ZXJpZmljYXRpb24gY29kZQorCW9mIHRoZSBDUEEgb3BlcmF0aW9uLiBUaGF0J3MgYSBnb29kIGlkZWEgaW4gZ2VuZXJhbCwgYnV0IHN1Y2gKKwljb2RlIC8gaW5mcmFzdHJ1Y3R1cmUgc2hvdWxkIGJlIGluIHRoZSBrZXJuZWwgYW5kIG5vdCBpbiBzb21lCisJb3V0LW9mLXRyZWUgZHJpdmVyLgorV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0Ogl1c2VkYWMgaTM4NiBrZXJuZWwgcGFyYW1ldGVyCitXaGVuOgkyLjYuMjcKK1doeToJcmVwbGFjZWQgYnkgYWxsb3dkYWMgYW5kIG5vIGRhYyBjb21iaW5hdGlvbgorV2hvOglHbGF1YmVyIENvc3RhIDxnY29zdGFAcmVkaGF0LmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CS9zeXMvbzJjYiBzeW1saW5rCitXaGVuOglKYW51YXJ5IDIwMTAKK1doeToJL3N5cy9mcy9vMmNiIGlzIHRoZSBwcm9wZXIgbG9jYXRpb24gZm9yIHRoaXMgaW5mb3JtYXRpb24gLSAvc3lzL28yY2IKKwlleGlzdHMgYXMgYSBzeW1saW5rIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igb2xkIHZlcnNpb25zIG9mCisJb2NmczItdG9vbHMuIDIgeWVhcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdGltZSB0byBwaGFzZSBpbiBuZXcgdmVyc2lvbnMKKwl3aGljaCBrbm93IHRvIGxvb2sgaW4gL3N5cy9mcy9vMmNiLgorV2hvOglvY2ZzMi1kZXZlbEBvc3Mub3JhY2xlLmNvbQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJYXNtL3NlbWFwaG9yZS5oCitXaGVuOgkyLjYuMjYKK1doeToJSW1wbGVtZW50YXRpb24gYmVjYW1lIGdlbmVyaWM7IHVzZXJzIHNob3VsZCBub3cgaW5jbHVkZQorCWxpbnV4L3NlbWFwaG9yZS5oIGluc3RlYWQuCitXaG86CU1hdHRoZXcgV2lsY294IDx3aWxseUBsaW51eC5pbnRlbC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWAppbmRleCBlNjgwMjFjLi41MmNkNjExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKQEAgLTY2LDYgKzY2LDggQEAKIAktIGluZm8gb24gdGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIFN5cyBWIG1hbmRhdG9yeSBmaWxlIGxvY2tpbmcuCiBuY3Bmcy50eHQKIAktIGluZm8gb24gTm92ZWxsIE5ldHdhcmUodG0pIGZpbGVzeXN0ZW0gdXNpbmcgTkNQIHByb3RvY29sLgorbmZzcm9vdC50eHQKKwktIHNob3J0IGd1aWRlIG9uIHNldHRpbmcgdXAgYSBkaXNrbGVzcyBib3ggd2l0aCBORlMgcm9vdCBmaWxlc3lzdGVtLgogbnRmcy50eHQKIAktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBOVEZTIGZpbGVzeXN0ZW0gKFdpbmRvd3MgTlQpLgogb2NmczIudHh0CkBAIC04Miw2ICs4NCwxMCBAQAogCS0gaW5mbyBvbiByZWxheSwgZm9yIGVmZmljaWVudCBzdHJlYW1pbmcgZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZS4KIHJvbWZzLnR4dAogCS0gZGVzY3JpcHRpb24gb2YgdGhlIFJPTUZTIGZpbGVzeXN0ZW0uCitycGMtY2FjaGUudHh0CisJLSBpbnRyb2R1Y3Rpb24gdG8gdGhlIGNhY2hpbmcgbWVjaGFuaXNtcyBpbiB0aGUgc3VucnBjIGxheWVyLgorc2VxX2ZpbGUudHh0CisJLSBob3cgdG8gdXNlIHRoZSBzZXFfZmlsZSBBUEkKIHNoYXJlZHN1YnRyZWUudHh0CiAJLSBhIGRlc2NyaXB0aW9uIG9mIHNoYXJlZCBzdWJ0cmVlcyBmb3IgbmFtZXNwYWNlcy4KIHNtYmZzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vbmZzcm9vdC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDU2ODFlMmYuLjUxOGViZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTUwNiwxMyArMTUwNiwxMyBAQAogLS0tLS0tLS0tLS0KIAogbGFwdG9wX21vZGUgaXMgYSBrbm9iIHRoYXQgY29udHJvbHMgImxhcHRvcCBtb2RlIi4gQWxsIHRoZSB0aGluZ3MgdGhhdCBhcmUKLWNvbnRyb2xsZWQgYnkgdGhpcyBrbm9iIGFyZSBkaXNjdXNzZWQgaW4gRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQuCitjb250cm9sbGVkIGJ5IHRoaXMga25vYiBhcmUgZGlzY3Vzc2VkIGluIERvY3VtZW50YXRpb24vbGFwdG9wcy9sYXB0b3AtbW9kZS50eHQuCiAKIGJsb2NrX2R1bXAKIC0tLS0tLS0tLS0KIAogYmxvY2tfZHVtcCBlbmFibGVzIGJsb2NrIEkvTyBkZWJ1Z2dpbmcgd2hlbiBzZXQgdG8gYSBub256ZXJvIHZhbHVlLiBNb3JlCi1pbmZvcm1hdGlvbiBvbiBibG9jayBJL08gZGVidWdnaW5nIGlzIGluIERvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0LgoraW5mb3JtYXRpb24gb24gYmxvY2sgSS9PIGRlYnVnZ2luZyBpcyBpbiBEb2N1bWVudGF0aW9uL2xhcHRvcHMvbGFwdG9wLW1vZGUudHh0LgogCiBzd2FwX3Rva2VuX3RpbWVvdXQKIC0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ycGMtY2FjaGUudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9ycGMtY2FjaGUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3JwYy1jYWNoZS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcnBjLWNhY2hlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zZXFfZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NlcV9maWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmI4ZTZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zZXFfZmlsZS50eHQKQEAgLTAsMCArMSwyODMgQEAKK1RoZSBzZXFfZmlsZSBpbnRlcmZhY2UKKworCUNvcHlyaWdodCAyMDAzIEpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CisJVGhpcyBmaWxlIGlzIG9yaWdpbmFsbHkgZnJvbSB0aGUgTFdOLm5ldCBEcml2ZXIgUG9ydGluZyBzZXJpZXMgYXQKKwlodHRwOi8vbHduLm5ldC9BcnRpY2xlcy9kcml2ZXItcG9ydGluZy8KKworCitUaGVyZSBhcmUgbnVtZXJvdXMgd2F5cyBmb3IgYSBkZXZpY2UgZHJpdmVyIChvciBvdGhlciBrZXJuZWwgY29tcG9uZW50KSB0bworcHJvdmlkZSBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBvciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4gIE9uZSB1c2VmdWwKK3RlY2huaXF1ZSBpcyB0aGUgY3JlYXRpb24gb2YgdmlydHVhbCBmaWxlcywgaW4gZGVidWdmcywgL3Byb2Mgb3IgZWxzZXdoZXJlLgorVmlydHVhbCBmaWxlcyBjYW4gcHJvdmlkZSBodW1hbi1yZWFkYWJsZSBvdXRwdXQgdGhhdCBpcyBlYXN5IHRvIGdldCBhdAord2l0aG91dCBhbnkgc3BlY2lhbCB1dGlsaXR5IHByb2dyYW1zOyB0aGV5IGNhbiBhbHNvIG1ha2UgbGlmZSBlYXNpZXIgZm9yCitzY3JpcHQgd3JpdGVycy4gSXQgaXMgbm90IHN1cnByaXNpbmcgdGhhdCB0aGUgdXNlIG9mIHZpcnR1YWwgZmlsZXMgaGFzCitncm93biBvdmVyIHRoZSB5ZWFycy4KKworQ3JlYXRpbmcgdGhvc2UgZmlsZXMgY29ycmVjdGx5IGhhcyBhbHdheXMgYmVlbiBhIGJpdCBvZiBhIGNoYWxsZW5nZSwKK2hvd2V2ZXIuIEl0IGlzIG5vdCB0aGF0IGhhcmQgdG8gbWFrZSBhIHZpcnR1YWwgZmlsZSB3aGljaCByZXR1cm5zIGEKK3N0cmluZy4gQnV0IGxpZmUgZ2V0cyB0cmlja2llciBpZiB0aGUgb3V0cHV0IGlzIGxvbmcgLSBhbnl0aGluZyBncmVhdGVyCit0aGFuIGFuIGFwcGxpY2F0aW9uIGlzIGxpa2VseSB0byByZWFkIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gIEhhbmRsaW5nCittdWx0aXBsZSByZWFkcyAoYW5kIHNlZWtzKSByZXF1aXJlcyBjYXJlZnVsIGF0dGVudGlvbiB0byB0aGUgcmVhZGVyJ3MKK3Bvc2l0aW9uIHdpdGhpbiB0aGUgdmlydHVhbCBmaWxlIC0gdGhhdCBwb3NpdGlvbiBpcywgbGlrZWx5IGFzIG5vdCwgaW4gdGhlCittaWRkbGUgb2YgYSBsaW5lIG9mIG91dHB1dC4gVGhlIGtlcm5lbCBoYXMgdHJhZGl0aW9uYWxseSBoYWQgYSBudW1iZXIgb2YKK2ltcGxlbWVudGF0aW9ucyB0aGF0IGdvdCB0aGlzIHdyb25nLgorCitUaGUgMi42IGtlcm5lbCBjb250YWlucyBhIHNldCBvZiBmdW5jdGlvbnMgKGltcGxlbWVudGVkIGJ5IEFsZXhhbmRlciBWaXJvKQord2hpY2ggYXJlIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzeSBmb3IgdmlydHVhbCBmaWxlIGNyZWF0b3JzIHRvIGdldCBpdAorcmlnaHQuCisKK1RoZSBzZXFfZmlsZSBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlIHZpYSA8bGludXgvc2VxX2ZpbGUuaD4uIFRoZXJlIGFyZQordGhyZWUgYXNwZWN0cyB0byBzZXFfZmlsZToKKworICAgICAqIEFuIGl0ZXJhdG9yIGludGVyZmFjZSB3aGljaCBsZXRzIGEgdmlydHVhbCBmaWxlIGltcGxlbWVudGF0aW9uCisgICAgICAgc3RlcCB0aHJvdWdoIHRoZSBvYmplY3RzIGl0IGlzIHByZXNlbnRpbmcuCisKKyAgICAgKiBTb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBmb3JtYXR0aW5nIG9iamVjdHMgZm9yIG91dHB1dCB3aXRob3V0CisgICAgICAgbmVlZGluZyB0byB3b3JyeSBhYm91dCB0aGluZ3MgbGlrZSBvdXRwdXQgYnVmZmVycy4KKworICAgICAqIEEgc2V0IG9mIGNhbm5lZCBmaWxlX29wZXJhdGlvbnMgd2hpY2ggaW1wbGVtZW50IG1vc3Qgb3BlcmF0aW9ucyBvbgorICAgICAgIHRoZSB2aXJ0dWFsIGZpbGUuCisKK1dlJ2xsIGxvb2sgYXQgdGhlIHNlcV9maWxlIGludGVyZmFjZSB2aWEgYW4gZXh0cmVtZWx5IHNpbXBsZSBleGFtcGxlOiBhCitsb2FkYWJsZSBtb2R1bGUgd2hpY2ggY3JlYXRlcyBhIGZpbGUgY2FsbGVkIC9wcm9jL3NlcXVlbmNlLiBUaGUgZmlsZSwgd2hlbgorcmVhZCwgc2ltcGx5IHByb2R1Y2VzIGEgc2V0IG9mIGluY3JlYXNpbmcgaW50ZWdlciB2YWx1ZXMsIG9uZSBwZXIgbGluZS4gVGhlCitzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSB1c2VyIGxvc2VzIHBhdGllbmNlIGFuZCBmaW5kcyBzb21ldGhpbmcKK2JldHRlciB0byBkby4gVGhlIGZpbGUgaXMgc2Vla2FibGUsIGluIHRoYXQgb25lIGNhbiBkbyBzb21ldGhpbmcgbGlrZSB0aGUKK2ZvbGxvd2luZzoKKworICAgIGRkIGlmPS9wcm9jL3NlcXVlbmNlIG9mPW91dDEgY291bnQ9MQorICAgIGRkIGlmPS9wcm9jL3NlcXVlbmNlIHNraXA9MSBvdXQ9b3V0MiBjb3VudD0xCisKK1RoZW4gY29uY2F0ZW5hdGUgdGhlIG91dHB1dCBmaWxlcyBvdXQxIGFuZCBvdXQyIGFuZCBnZXQgdGhlIHJpZ2h0CityZXN1bHQuIFllcywgaXQgaXMgYSB0aG9yb3VnaGx5IHVzZWxlc3MgbW9kdWxlLCBidXQgdGhlIHBvaW50IGlzIHRvIHNob3cKK2hvdyB0aGUgbWVjaGFuaXNtIHdvcmtzIHdpdGhvdXQgZ2V0dGluZyBsb3N0IGluIG90aGVyIGRldGFpbHMuICAoVGhvc2UKK3dhbnRpbmcgdG8gc2VlIHRoZSBmdWxsIHNvdXJjZSBmb3IgdGhpcyBtb2R1bGUgY2FuIGZpbmQgaXQgYXQKK2h0dHA6Ly9sd24ubmV0L0FydGljbGVzLzIyMzU5LykuCisKKworVGhlIGl0ZXJhdG9yIGludGVyZmFjZQorCitNb2R1bGVzIGltcGxlbWVudGluZyBhIHZpcnR1YWwgZmlsZSB3aXRoIHNlcV9maWxlIG11c3QgaW1wbGVtZW50IGEgc2ltcGxlCitpdGVyYXRvciBvYmplY3QgdGhhdCBhbGxvd3Mgc3RlcHBpbmcgdGhyb3VnaCB0aGUgZGF0YSBvZiBpbnRlcmVzdC4KK0l0ZXJhdG9ycyBtdXN0IGJlIGFibGUgdG8gbW92ZSB0byBhIHNwZWNpZmljIHBvc2l0aW9uIC0gbGlrZSB0aGUgZmlsZSB0aGV5CitpbXBsZW1lbnQgLSBidXQgdGhlIGludGVycHJldGF0aW9uIG9mIHRoYXQgcG9zaXRpb24gaXMgdXAgdG8gdGhlIGl0ZXJhdG9yCitpdHNlbGYuIEEgc2VxX2ZpbGUgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBmb3JtYXR0aW5nIGZpcmV3YWxsIHJ1bGVzLCBmb3IKK2V4YW1wbGUsIGNvdWxkIGludGVycHJldCBwb3NpdGlvbiBOIGFzIHRoZSBOdGggcnVsZSBpbiB0aGUgY2hhaW4uCitQb3NpdGlvbmluZyBjYW4gdGh1cyBiZSBkb25lIGluIHdoYXRldmVyIHdheSBtYWtlcyB0aGUgbW9zdCBzZW5zZSBmb3IgdGhlCitnZW5lcmF0b3Igb2YgdGhlIGRhdGEsIHdoaWNoIG5lZWQgbm90IGJlIGF3YXJlIG9mIGhvdyBhIHBvc2l0aW9uIHRyYW5zbGF0ZXMKK3RvIGFuIG9mZnNldCBpbiB0aGUgdmlydHVhbCBmaWxlLiBUaGUgb25lIG9idmlvdXMgZXhjZXB0aW9uIGlzIHRoYXQgYQorcG9zaXRpb24gb2YgemVybyBzaG91bGQgaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKworVGhlIC9wcm9jL3NlcXVlbmNlIGl0ZXJhdG9yIGp1c3QgdXNlcyB0aGUgY291bnQgb2YgdGhlIG5leHQgbnVtYmVyIGl0Cit3aWxsIG91dHB1dCBhcyBpdHMgcG9zaXRpb24uCisKK0ZvdXIgZnVuY3Rpb25zIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gbWFrZSB0aGUgaXRlcmF0b3Igd29yay4gVGhlIGZpcnN0LAorY2FsbGVkIHN0YXJ0KCkgdGFrZXMgYSBwb3NpdGlvbiBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhbiBpdGVyYXRvcgord2hpY2ggd2lsbCBzdGFydCByZWFkaW5nIGF0IHRoYXQgcG9zaXRpb24uIEZvciBvdXIgc2ltcGxlIHNlcXVlbmNlIGV4YW1wbGUsCit0aGUgc3RhcnQoKSBmdW5jdGlvbiBsb29rcyBsaWtlOgorCisJc3RhdGljIHZvaWQgKmN0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQorCXsKKwkgICAgICAgIGxvZmZfdCAqc3BvcyA9IGttYWxsb2Moc2l6ZW9mKGxvZmZfdCksIEdGUF9LRVJORUwpOworCSAgICAgICAgaWYgKCEgc3BvcykKKwkgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisJICAgICAgICAqc3BvcyA9ICpwb3M7CisJICAgICAgICByZXR1cm4gc3BvczsKKwl9CisKK1RoZSBlbnRpcmUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoaXMgaXRlcmF0b3IgaXMgYSBzaW5nbGUgbG9mZl90IHZhbHVlCitob2xkaW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBUaGVyZSBpcyBubyB1cHBlciBib3VuZCBmb3IgdGhlIHNlcXVlbmNlCitpdGVyYXRvciwgYnV0IHRoYXQgd2lsbCBub3QgYmUgdGhlIGNhc2UgZm9yIG1vc3Qgb3RoZXIgc2VxX2ZpbGUKK2ltcGxlbWVudGF0aW9uczsgaW4gbW9zdCBjYXNlcyB0aGUgc3RhcnQoKSBmdW5jdGlvbiBzaG91bGQgY2hlY2sgZm9yIGEKKyJwYXN0IGVuZCBvZiBmaWxlIiBjb25kaXRpb24gYW5kIHJldHVybiBOVUxMIGlmIG5lZWQgYmUuCisKK0ZvciBtb3JlIGNvbXBsaWNhdGVkIGFwcGxpY2F0aW9ucywgdGhlIHByaXZhdGUgZmllbGQgb2YgdGhlIHNlcV9maWxlCitzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQuIFRoZXJlIGlzIGFsc28gYSBzcGVjaWFsIHZhbHVlIHdoaWNoIGNhbiBiZSByZXR1cm5lZAorYnkgdGhlIHN0YXJ0KCkgZnVuY3Rpb24gY2FsbGVkIFNFUV9TVEFSVF9UT0tFTjsgaXQgY2FuIGJlIHVzZWQgaWYgeW91IHdpc2gKK3RvIGluc3RydWN0IHlvdXIgc2hvdygpIGZ1bmN0aW9uIChkZXNjcmliZWQgYmVsb3cpIHRvIHByaW50IGEgaGVhZGVyIGF0IHRoZQordG9wIG9mIHRoZSBvdXRwdXQuIFNFUV9TVEFSVF9UT0tFTiBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBvZmZzZXQgaXMKK3plcm8sIGhvd2V2ZXIuCisKK1RoZSBuZXh0IGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpcyBjYWxsZWQsIGFtYXppbmdseSwgbmV4dCgpOyBpdHMgam9iIGlzIHRvCittb3ZlIHRoZSBpdGVyYXRvciBmb3J3YXJkIHRvIHRoZSBuZXh0IHBvc2l0aW9uIGluIHRoZSBzZXF1ZW5jZS4gIFRoZQorZXhhbXBsZSBtb2R1bGUgY2FuIHNpbXBseSBpbmNyZW1lbnQgdGhlIHBvc2l0aW9uIGJ5IG9uZTsgbW9yZSB1c2VmdWwKK21vZHVsZXMgd2lsbCBkbyB3aGF0IGlzIG5lZWRlZCB0byBzdGVwIHRocm91Z2ggc29tZSBkYXRhIHN0cnVjdHVyZS4gVGhlCituZXh0KCkgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBpdGVyYXRvciwgb3IgTlVMTCBpZiB0aGUgc2VxdWVuY2UgaXMKK2NvbXBsZXRlLiBIZXJlJ3MgdGhlIGV4YW1wbGUgdmVyc2lvbjoKKworCXN0YXRpYyB2b2lkICpjdF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQorCXsKKwkgICAgICAgIGxvZmZfdCAqc3BvcyA9IHY7CisJICAgICAgICAqcG9zID0gKysqc3BvczsKKwkgICAgICAgIHJldHVybiBzcG9zOworCX0KKworVGhlIHN0b3AoKSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBpdGVyYXRpb24gaXMgY29tcGxldGU7IGl0cyBqb2IsIG9mCitjb3Vyc2UsIGlzIHRvIGNsZWFuIHVwLiBJZiBkeW5hbWljIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoZSBpdGVyYXRvciwKK3N0b3AoKSBpcyB0aGUgcGxhY2UgdG8gZnJlZSBpdC4KKworCXN0YXRpYyB2b2lkIGN0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKKwl7CisJICAgICAgICBrZnJlZSh2KTsKKwl9CisKK0ZpbmFsbHksIHRoZSBzaG93KCkgZnVuY3Rpb24gc2hvdWxkIGZvcm1hdCB0aGUgb2JqZWN0IGN1cnJlbnRseSBwb2ludGVkIHRvCitieSB0aGUgaXRlcmF0b3IgZm9yIG91dHB1dC4gSXQgc2hvdWxkIHJldHVybiB6ZXJvLCBvciBhbiBlcnJvciBjb2RlIGlmCitzb21ldGhpbmcgZ29lcyB3cm9uZy4gVGhlIGV4YW1wbGUgbW9kdWxlJ3Mgc2hvdygpIGZ1bmN0aW9uIGlzOgorCisJc3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCisJeworCSAgICAgICAgbG9mZl90ICpzcG9zID0gdjsKKwkgICAgICAgIHNlcV9wcmludGYocywgIiVsbGRcbiIsIChsb25nIGxvbmcpKnNwb3MpOworCSAgICAgICAgcmV0dXJuIDA7CisJfQorCitXZSB3aWxsIGxvb2sgYXQgc2VxX3ByaW50ZigpIGluIGEgbW9tZW50LiBCdXQgZmlyc3QsIHRoZSBkZWZpbml0aW9uIG9mIHRoZQorc2VxX2ZpbGUgaXRlcmF0b3IgaXMgZmluaXNoZWQgYnkgY3JlYXRpbmcgYSBzZXFfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgd2l0aAordGhlIGZvdXIgZnVuY3Rpb25zIHdlIGhhdmUganVzdCBkZWZpbmVkOgorCisJc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjdF9zZXFfb3BzID0geworCSAgICAgICAgLnN0YXJ0ID0gY3Rfc2VxX3N0YXJ0LAorCSAgICAgICAgLm5leHQgID0gY3Rfc2VxX25leHQsCisJICAgICAgICAuc3RvcCAgPSBjdF9zZXFfc3RvcCwKKwkgICAgICAgIC5zaG93ICA9IGN0X3NlcV9zaG93CisJfTsKKworVGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSBuZWVkZWQgdG8gdGllIG91ciBpdGVyYXRvciB0byB0aGUgL3Byb2MgZmlsZSBpbgorYSBsaXR0bGUgYml0LgorCitJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBpdGVyYXRvciB2YWx1ZSByZXR1cm5lZCBieSBzdGFydCgpIGFuZAorbWFuaXB1bGF0ZWQgYnkgdGhlIG90aGVyIGZ1bmN0aW9ucyBpcyBjb25zaWRlcmVkIHRvIGJlIGNvbXBsZXRlbHkgb3BhcXVlIGJ5Cit0aGUgc2VxX2ZpbGUgY29kZS4gSXQgY2FuIHRodXMgYmUgYW55dGhpbmcgdGhhdCBpcyB1c2VmdWwgaW4gc3RlcHBpbmcKK3Rocm91Z2ggdGhlIGRhdGEgdG8gYmUgb3V0cHV0LiBDb3VudGVycyBjYW4gYmUgdXNlZnVsLCBidXQgaXQgY291bGQgYWxzbyBiZQorYSBkaXJlY3QgcG9pbnRlciBpbnRvIGFuIGFycmF5IG9yIGxpbmtlZCBsaXN0LiBBbnl0aGluZyBnb2VzLCBhcyBsb25nIGFzCit0aGUgcHJvZ3JhbW1lciBpcyBhd2FyZSB0aGF0IHRoaW5ncyBjYW4gaGFwcGVuIGJldHdlZW4gY2FsbHMgdG8gdGhlCitpdGVyYXRvciBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIHNlcV9maWxlIGNvZGUgKGJ5IGRlc2lnbikgd2lsbCBub3Qgc2xlZXAKK2JldHdlZW4gdGhlIGNhbGxzIHRvIHN0YXJ0KCkgYW5kIHN0b3AoKSwgc28gaG9sZGluZyBhIGxvY2sgZHVyaW5nIHRoYXQgdGltZQoraXMgYSByZWFzb25hYmxlIHRoaW5nIHRvIGRvLiBUaGUgc2VxX2ZpbGUgY29kZSB3aWxsIGFsc28gYXZvaWQgdGFraW5nIGFueQorb3RoZXIgbG9ja3Mgd2hpbGUgdGhlIGl0ZXJhdG9yIGlzIGFjdGl2ZS4KKworCitGb3JtYXR0ZWQgb3V0cHV0CisKK1RoZSBzZXFfZmlsZSBjb2RlIG1hbmFnZXMgcG9zaXRpb25pbmcgd2l0aGluIHRoZSBvdXRwdXQgY3JlYXRlZCBieSB0aGUKK2l0ZXJhdG9yIGFuZCBnZXR0aW5nIGl0IGludG8gdGhlIHVzZXIncyBidWZmZXIuIEJ1dCwgZm9yIHRoYXQgdG8gd29yaywgdGhhdAorb3V0cHV0IG11c3QgYmUgcGFzc2VkIHRvIHRoZSBzZXFfZmlsZSBjb2RlLiBTb21lIHV0aWxpdHkgZnVuY3Rpb25zIGhhdmUKK2JlZW4gZGVmaW5lZCB3aGljaCBtYWtlIHRoaXMgdGFzayBlYXN5LgorCitNb3N0IGNvZGUgd2lsbCBzaW1wbHkgdXNlIHNlcV9wcmludGYoKSwgd2hpY2ggd29ya3MgcHJldHR5IG11Y2ggbGlrZQorcHJpbnRrKCksIGJ1dCB3aGljaCByZXF1aXJlcyB0aGUgc2VxX2ZpbGUgcG9pbnRlciBhcyBhbiBhcmd1bWVudC4gSXQgaXMKK2NvbW1vbiB0byBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHNlcV9wcmludGYoKSwgYnV0IGEgZnVuY3Rpb24KK3Byb2R1Y2luZyBjb21wbGljYXRlZCBvdXRwdXQgbWF5IHdhbnQgdG8gY2hlY2sgdGhhdCB2YWx1ZSBhbmQgcXVpdCBpZgorc29tZXRoaW5nIG5vbi16ZXJvIGlzIHJldHVybmVkOyBhbiBlcnJvciByZXR1cm4gbWVhbnMgdGhhdCB0aGUgc2VxX2ZpbGUKK2J1ZmZlciBoYXMgYmVlbiBmaWxsZWQgYW5kIGZ1cnRoZXIgb3V0cHV0IHdpbGwgYmUgZGlzY2FyZGVkLgorCitGb3Igc3RyYWlnaHQgY2hhcmFjdGVyIG91dHB1dCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbWF5IGJlIHVzZWQ6CisKKwlpbnQgc2VxX3B1dGMoc3RydWN0IHNlcV9maWxlICptLCBjaGFyIGMpOworCWludCBzZXFfcHV0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IGNoYXIgKnMpOworCWludCBzZXFfZXNjYXBlKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZXNjKTsKKworVGhlIGZpcnN0IHR3byBvdXRwdXQgYSBzaW5nbGUgY2hhcmFjdGVyIGFuZCBhIHN0cmluZywganVzdCBsaWtlIG9uZSB3b3VsZAorZXhwZWN0LiBzZXFfZXNjYXBlKCkgaXMgbGlrZSBzZXFfcHV0cygpLCBleGNlcHQgdGhhdCBhbnkgY2hhcmFjdGVyIGluIHMKK3doaWNoIGlzIGluIHRoZSBzdHJpbmcgZXNjIHdpbGwgYmUgcmVwcmVzZW50ZWQgaW4gb2N0YWwgZm9ybSBpbiB0aGUgb3V0cHV0LgorCitUaGVyZSBpcyBhbHNvIGEgZnVuY3Rpb24gZm9yIHByaW50aW5nIGZpbGVuYW1lczoKKworCWludCBzZXFfcGF0aChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICplc2MpOworCitIZXJlLCBwYXRoIGluZGljYXRlcyB0aGUgZmlsZSBvZiBpbnRlcmVzdCwgYW5kIGVzYyBpcyBhIHNldCBvZiBjaGFyYWN0ZXJzCit3aGljaCBzaG91bGQgYmUgZXNjYXBlZCBpbiB0aGUgb3V0cHV0LgorCisKK01ha2luZyBpdCBhbGwgd29yaworCitTbyBmYXIsIHdlIGhhdmUgYSBuaWNlIHNldCBvZiBmdW5jdGlvbnMgd2hpY2ggY2FuIHByb2R1Y2Ugb3V0cHV0IHdpdGhpbiB0aGUKK3NlcV9maWxlIHN5c3RlbSwgYnV0IHdlIGhhdmUgbm90IHlldCB0dXJuZWQgdGhlbSBpbnRvIGEgZmlsZSB0aGF0IGEgdXNlcgorY2FuIHNlZS4gQ3JlYXRpbmcgYSBmaWxlIHdpdGhpbiB0aGUga2VybmVsIHJlcXVpcmVzLCBvZiBjb3Vyc2UsIHRoZQorY3JlYXRpb24gb2YgYSBzZXQgb2YgZmlsZV9vcGVyYXRpb25zIHdoaWNoIGltcGxlbWVudCB0aGUgb3BlcmF0aW9ucyBvbiB0aGF0CitmaWxlLiBUaGUgc2VxX2ZpbGUgaW50ZXJmYWNlIHByb3ZpZGVzIGEgc2V0IG9mIGNhbm5lZCBvcGVyYXRpb25zIHdoaWNoIGRvCittb3N0IG9mIHRoZSB3b3JrLiBUaGUgdmlydHVhbCBmaWxlIGF1dGhvciBzdGlsbCBtdXN0IGltcGxlbWVudCB0aGUgb3BlbigpCittZXRob2QsIGhvd2V2ZXIsIHRvIGhvb2sgZXZlcnl0aGluZyB1cC4gVGhlIG9wZW4gZnVuY3Rpb24gaXMgb2Z0ZW4gYSBzaW5nbGUKK2xpbmUsIGFzIGluIHRoZSBleGFtcGxlIG1vZHVsZToKKworCXN0YXRpYyBpbnQgY3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKKwl7CisJCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY3Rfc2VxX29wcyk7CisJfQorCitIZXJlLCB0aGUgY2FsbCB0byBzZXFfb3BlbigpIHRha2VzIHRoZSBzZXFfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgd2UgY3JlYXRlZAorYmVmb3JlLCBhbmQgZ2V0cyBzZXQgdXAgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSB2aXJ0dWFsIGZpbGUuCisKK09uIGEgc3VjY2Vzc2Z1bCBvcGVuLCBzZXFfb3BlbigpIHN0b3JlcyB0aGUgc3RydWN0IHNlcV9maWxlIHBvaW50ZXIgaW4KK2ZpbGUtPnByaXZhdGVfZGF0YS4gSWYgeW91IGhhdmUgYW4gYXBwbGljYXRpb24gd2hlcmUgdGhlIHNhbWUgaXRlcmF0b3IgY2FuCitiZSB1c2VkIGZvciBtb3JlIHRoYW4gb25lIGZpbGUsIHlvdSBjYW4gc3RvcmUgYW4gYXJiaXRyYXJ5IHBvaW50ZXIgaW4gdGhlCitwcml2YXRlIGZpZWxkIG9mIHRoZSBzZXFfZmlsZSBzdHJ1Y3R1cmU7IHRoYXQgdmFsdWUgY2FuIHRoZW4gYmUgcmV0cmlldmVkCitieSB0aGUgaXRlcmF0b3IgZnVuY3Rpb25zLgorCitUaGUgb3RoZXIgb3BlcmF0aW9ucyBvZiBpbnRlcmVzdCAtIHJlYWQoKSwgbGxzZWVrKCksIGFuZCByZWxlYXNlKCkgLSBhcmUKK2FsbCBpbXBsZW1lbnRlZCBieSB0aGUgc2VxX2ZpbGUgY29kZSBpdHNlbGYuIFNvIGEgdmlydHVhbCBmaWxlJ3MKK2ZpbGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgd2lsbCBsb29rIGxpa2U6CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjdF9maWxlX29wcyA9IHsKKwkgICAgICAgIC5vd25lciAgID0gVEhJU19NT0RVTEUsCisJICAgICAgICAub3BlbiAgICA9IGN0X29wZW4sCisJICAgICAgICAucmVhZCAgICA9IHNlcV9yZWFkLAorCSAgICAgICAgLmxsc2VlayAgPSBzZXFfbHNlZWssCisJICAgICAgICAucmVsZWFzZSA9IHNlcV9yZWxlYXNlCisJfTsKKworVGhlcmUgaXMgYWxzbyBhIHNlcV9yZWxlYXNlX3ByaXZhdGUoKSB3aGljaCBwYXNzZXMgdGhlIGNvbnRlbnRzIG9mIHRoZQorc2VxX2ZpbGUgcHJpdmF0ZSBmaWVsZCB0byBrZnJlZSgpIGJlZm9yZSByZWxlYXNpbmcgdGhlIHN0cnVjdHVyZS4KKworVGhlIGZpbmFsIHN0ZXAgaXMgdGhlIGNyZWF0aW9uIG9mIHRoZSAvcHJvYyBmaWxlIGl0c2VsZi4gSW4gdGhlIGV4YW1wbGUKK2NvZGUsIHRoYXQgaXMgZG9uZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBpbiB0aGUgdXN1YWwgd2F5OgorCisJc3RhdGljIGludCBjdF9pbml0KHZvaWQpCisJeworCSAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKworCSAgICAgICAgZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic2VxdWVuY2UiLCAwLCBOVUxMKTsKKwkgICAgICAgIGlmIChlbnRyeSkKKwkgICAgICAgICAgICAgICAgZW50cnktPnByb2NfZm9wcyA9ICZjdF9maWxlX29wczsKKwkgICAgICAgIHJldHVybiAwOworCX0KKworCW1vZHVsZV9pbml0KGN0X2luaXQpOworCitBbmQgdGhhdCBpcyBwcmV0dHkgbXVjaCBpdC4KKworCitzZXFfbGlzdAorCitJZiB5b3VyIGZpbGUgd2lsbCBiZSBpdGVyYXRpbmcgdGhyb3VnaCBhIGxpbmtlZCBsaXN0LCB5b3UgbWF5IGZpbmQgdGhlc2UKK3JvdXRpbmVzIHVzZWZ1bDoKKworCXN0cnVjdCBsaXN0X2hlYWQgKnNlcV9saXN0X3N0YXJ0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJICAgICAgIAkJIAkJIGxvZmZfdCBwb3MpOworCXN0cnVjdCBsaXN0X2hlYWQgKnNlcV9saXN0X3N0YXJ0X2hlYWQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCSAJCSAgICAgIGxvZmZfdCBwb3MpOworCXN0cnVjdCBsaXN0X2hlYWQgKnNlcV9saXN0X25leHQodm9pZCAqdiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJbG9mZl90ICpwcG9zKTsKKworVGhlc2UgaGVscGVycyB3aWxsIGludGVycHJldCBwb3MgYXMgYSBwb3NpdGlvbiB3aXRoaW4gdGhlIGxpc3QgYW5kIGl0ZXJhdGUKK2FjY29yZGluZ2x5LiAgWW91ciBzdGFydCgpIGFuZCBuZXh0KCkgZnVuY3Rpb25zIG5lZWQgb25seSBpbnZva2UgdGhlCitzZXFfbGlzdF8qIGhlbHBlcnMgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3RfaGVhZCBzdHJ1Y3R1cmUuCisKKworVGhlIGV4dHJhLXNpbXBsZSB2ZXJzaW9uCisKK0ZvciBleHRyZW1lbHkgc2ltcGxlIHZpcnR1YWwgZmlsZXMsIHRoZXJlIGlzIGFuIGV2ZW4gZWFzaWVyIGludGVyZmFjZS4gIEEKK21vZHVsZSBjYW4gZGVmaW5lIG9ubHkgdGhlIHNob3coKSBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGNyZWF0ZSBhbGwgdGhlCitvdXRwdXQgdGhhdCB0aGUgdmlydHVhbCBmaWxlIHdpbGwgY29udGFpbi4gVGhlIGZpbGUncyBvcGVuKCkgbWV0aG9kIHRoZW4KK2NhbGxzOgorCisJaW50IHNpbmdsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLAorCSAgICAgICAgICAgICAgICBpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApLAorCSAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKKworV2hlbiBvdXRwdXQgdGltZSBjb21lcywgdGhlIHNob3coKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmNlLiBUaGUgZGF0YQordmFsdWUgZ2l2ZW4gdG8gc2luZ2xlX29wZW4oKSBjYW4gYmUgZm91bmQgaW4gdGhlIHByaXZhdGUgZmllbGQgb2YgdGhlCitzZXFfZmlsZSBzdHJ1Y3R1cmUuIFdoZW4gdXNpbmcgc2luZ2xlX29wZW4oKSwgdGhlIHByb2dyYW1tZXIgc2hvdWxkIHVzZQorc2luZ2xlX3JlbGVhc2UoKSBpbnN0ZWFkIG9mIHNlcV9yZWxlYXNlKCkgaW4gdGhlIGZpbGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUKK3RvIGF2b2lkIGEgbWVtb3J5IGxlYWsuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CmluZGV4IDQ1OThlZjcuLjdmMjdiOGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CkBAIC0xNzYsOCArMTc2LDEwIEBACiAgIFJlY2FsbCB0aGF0IGFuIGF0dHJpYnV0ZSBzaG91bGQgb25seSBiZSBleHBvcnRpbmcgb25lIHZhbHVlLCBvciBhbgogICBhcnJheSBvZiBzaW1pbGFyIHZhbHVlcywgc28gdGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBleHBlbnNpdmUuIAogCi0gIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBkbyBwYXJ0aWFsIHJlYWRzIGFuZCBzZWVrcyBhcmJpdHJhcmlseSBvdmVyCi0gIHRoZSBlbnRpcmUgZmlsZSBhdCB3aWxsLiAKKyAgVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGRvIHBhcnRpYWwgcmVhZHMgYW5kIGZvcndhcmQgc2Vla3MKKyAgYXJiaXRyYXJpbHkgb3ZlciB0aGUgZW50aXJlIGZpbGUgYXQgd2lsbC4gSWYgdXNlcnNwYWNlIHNlZWtzIGJhY2sgdG8KKyAgemVybyBvciBkb2VzIGEgcHJlYWQoMikgd2l0aCBhbiBvZmZzZXQgb2YgJzAnIHRoZSBzaG93KCkgbWV0aG9kIHdpbGwKKyAgYmUgY2FsbGVkIGFnYWluLCByZWFybWVkLCB0byBmaWxsIHRoZSBidWZmZXIuCiAKIC0gT24gd3JpdGUoMiksIHN5c2ZzIGV4cGVjdHMgdGhlIGVudGlyZSBidWZmZXIgdG8gYmUgcGFzc2VkIGR1cmluZyB0aGUKICAgZmlyc3Qgd3JpdGUuIFN5c2ZzIHRoZW4gcGFzc2VzIHRoZSBlbnRpcmUgYnVmZmVyIHRvIHRoZSBzdG9yZSgpCkBAIC0xOTIsNiArMTk0LDkgQEAKIAogT3RoZXIgbm90ZXM6CiAKKy0gV3JpdGluZyBjYXVzZXMgdGhlIHNob3coKSBtZXRob2QgdG8gYmUgcmVhcm1lZCByZWdhcmRsZXNzIG9mIGN1cnJlbnQKKyAgZmlsZSBwb3NpdGlvbi4KKwogLSBUaGUgYnVmZmVyIHdpbGwgYWx3YXlzIGJlIFBBR0VfU0laRSBieXRlcyBpbiBsZW5ndGguIE9uIGkzODYsIHRoaXMKICAgaXMgNDA5Ni4gCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLnR4dAppbmRleCA3NGFlYjE0Li4wYTE2NjhiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMudHh0CkBAIC01MiwxNiArNTIsMTUgQEAKIAlhbmQgYWxzbyBnZXRzIHRoZSBzZXRnaWQgYml0IHNldCBpZiBpdCBpcyBhIGRpcmVjdG9yeSBpdHNlbGYuCiAKICAgaWhhc2hzaXplPXZhbHVlCi0JU2V0cyB0aGUgbnVtYmVyIG9mIGhhc2ggYnVja2V0cyBhdmFpbGFibGUgZm9yIGhhc2hpbmcgdGhlCi0JaW4tbWVtb3J5IGlub2RlcyBvZiB0aGUgc3BlY2lmaWVkIG1vdW50IHBvaW50LiAgSWYgYSB2YWx1ZQotCW9mIHplcm8gaXMgdXNlZCwgdGhlIHZhbHVlIHNlbGVjdGVkIGJ5IHRoZSBkZWZhdWx0IGFsZ29yaXRobQotCXdpbGwgYmUgZGlzcGxheWVkIGluIC9wcm9jL21vdW50cy4KKwlJbiBtZW1vcnkgaW5vZGUgaGFzaGVzIGhhdmUgYmVlbiByZW1vdmVkLCBzbyB0aGlzIG9wdGlvbiBoYXMKKwlubyBmdW5jdGlvbiBhcyBvZiBBdWd1c3QgMjAwNy4gT3B0aW9uIGlzIGRlcHJlY2F0ZWQuCiAKICAgaWtlZXAvbm9pa2VlcAotCVdoZW4gaW5vZGUgY2x1c3RlcnMgYXJlIGVtcHRpZWQgb2YgaW5vZGVzLCBrZWVwIHRoZW0gYXJvdW5kCi0Jb24gdGhlIGRpc2sgKGlrZWVwKSAtIHRoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIFhGUyBiZWhhdmlvdXIKLQlhbmQgaXMgc3RpbGwgdGhlIGRlZmF1bHQgZm9yIG5vdy4gIFVzaW5nIHRoZSBub2lrZWVwIG9wdGlvbiwKLQlpbm9kZSBjbHVzdGVycyBhcmUgcmV0dXJuZWQgdG8gdGhlIGZyZWUgc3BhY2UgcG9vbC4KKwlXaGVuIGlrZWVwIGlzIHNwZWNpZmllZCwgWEZTIGRvZXMgbm90IGRlbGV0ZSBlbXB0eSBpbm9kZSBjbHVzdGVycworCWFuZCBrZWVwcyB0aGVtIGFyb3VuZCBvbiBkaXNrLiBpa2VlcCBpcyB0aGUgdHJhZGl0aW9uYWwgWEZTCisJYmVoYXZpb3VyLiBXaGVuIG5vaWtlZXAgaXMgc3BlY2lmaWVkLCBlbXB0eSBpbm9kZSBjbHVzdGVycworCWFyZSByZXR1cm5lZCB0byB0aGUgZnJlZSBzcGFjZSBwb29sLiBUaGUgZGVmYXVsdCBpcyBub2lrZWVwIGZvcgorCW5vbi1ETUFQSSBtb3VudHMsIHdoaWxlIGlrZWVwIGlzIHRoZSBkZWZhdWx0IHdoZW4gRE1BUEkgaXMgaW4gdXNlLgogCiAgIGlub2RlNjQKIAlJbmRpY2F0ZXMgdGhhdCBYRlMgaXMgYWxsb3dlZCB0byBjcmVhdGUgaW5vZGVzIGF0IGFueSBsb2NhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg2NWNiZS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jIC0KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWFudWVsIEVzdHJhZGEgU2FpbnoKLSAqCi0gKiBTYW1wbGUgY29kZSBvbiBob3cgdG8gdXNlIHJlcXVlc3RfZmlybXdhcmUoKSBmcm9tIGRyaXZlcnMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJsaW51eC9maXJtd2FyZS5oIgotCi1zdGF0aWMgc3RydWN0IGRldmljZSBnaG9zdF9kZXZpY2UgPSB7Ci0JLmJ1c19pZCAgICA9ICJnaG9zdDAiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzYW1wbGVfZmlybXdhcmVfbG9hZChjaGFyICpmaXJtd2FyZSwgaW50IHNpemUpCi17Ci0JdTggYnVmW3NpemUrMV07Ci0JbWVtY3B5KGJ1ZiwgZmlybXdhcmUsIHNpemUpOwotCWJ1ZltzaXplXSA9ICdcMCc7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogZmlybXdhcmU6ICVzXG4iLCBidWYpOwotfQotCi1zdGF0aWMgdm9pZCBzYW1wbGVfcHJvYmVfZGVmYXVsdCh2b2lkKQotewotCS8qIHVzZXMgdGhlIGRlZmF1bHQgbWV0aG9kIHRvIGdldCB0aGUgZmlybXdhcmUgKi8KLSAgICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKLQlwcmludGsoS0VSTl9JTkZPICJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiBhIGdob3N0IGRldmljZSBnb3QgaW5zZXJ0ZWQgOilcbiIpOwotCi0gICAgICAgIGlmKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAic2FtcGxlX2RyaXZlcl9mdyIsICZnaG9zdF9kZXZpY2UpIT0wKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogRmlybXdhcmUgbm90IGF2YWlsYWJsZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JCi0Jc2FtcGxlX2Zpcm13YXJlX2xvYWQoZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKLQotCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCi0JLyogZmluaXNoIHNldHRpbmcgdXAgdGhlIGRldmljZSAqLwotfQotc3RhdGljIHZvaWQgc2FtcGxlX3Byb2JlX3NwZWNpZmljKHZvaWQpCi17Ci0JLyogVXNlcyBzb21lIHNwZWNpZmljIGhvdHBsdWcgc3VwcG9ydCB0byBnZXQgdGhlIGZpcm13YXJlIGZyb20KLQkgKiB1c2Vyc3BhY2UgIGRpcmVjdGx5IGludG8gdGhlIGhhcmR3YXJlLCBvciB2aWEgc29tZSBzeXNmcyBmaWxlICovCi0KLQkvKiBOT1RFOiBUaGlzIGN1cnJlbnRseSBkb2Vzbid0IHdvcmsgKi8KLQotCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGEgZ2hvc3QgZGV2aWNlIGdvdCBpbnNlcnRlZCA6KVxuIik7Ci0KLSAgICAgICAgaWYocmVxdWVzdF9maXJtd2FyZShOVUxMLCAic2FtcGxlX2RyaXZlcl9mdyIsICZnaG9zdF9kZXZpY2UpIT0wKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogRmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCQotCS8qIHJlcXVlc3RfZmlybXdhcmUgYmxvY2tzIHVudGlsIHVzZXJzcGFjZSBmaW5pc2hlZCwgc28gYXQKLQkgKiB0aGlzIHBvaW50IHRoZSBmaXJtd2FyZSBzaG91bGQgYmUgYWxyZWFkeSBpbiB0aGUgZGV2aWNlICovCi0KLQkvKiBmaW5pc2ggc2V0dGluZyB1cCB0aGUgZGV2aWNlICovCi19Ci1zdGF0aWMgdm9pZCBzYW1wbGVfcHJvYmVfYXN5bmNfY29udChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KQotewotCWlmKCFmdyl7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGZpcm13YXJlIGxvYWQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGRldmljZSBwb2ludGVyIFwiJXNcIlxuIiwKLQkgICAgICAgKGNoYXIgKiljb250ZXh0KTsKLQlzYW1wbGVfZmlybXdhcmVfbG9hZChmdy0+ZGF0YSwgZnctPnNpemUpOwotfQotc3RhdGljIHZvaWQgc2FtcGxlX3Byb2JlX2FzeW5jKHZvaWQpCi17Ci0JLyogTGV0J3Mgc2F5IHRoYXQgSSBjYW4ndCBzbGVlcCAqLwotCWludCBlcnJvcjsKLQllcnJvciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0IChUSElTX01PRFVMRSwgRldfQUNUSU9OX05PSE9UUExVRywKLQkJCQkJICJzYW1wbGVfZHJpdmVyX2Z3IiwgJmdob3N0X2RldmljZSwKLQkJCQkJICJteSBkZXZpY2UgcG9pbnRlciIsCi0JCQkJCSBzYW1wbGVfcHJvYmVfYXN5bmNfY29udCk7Ci0JaWYoZXJyb3IpewotCQlwcmludGsoS0VSTl9FUlIgCi0JCSAgICAgICAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjoiCi0JCSAgICAgICAiIHJlcXVlc3RfZmlybXdhcmVfbm93YWl0IGZhaWxlZFxuIik7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNhbXBsZV9pbml0KHZvaWQpCi17Ci0JZGV2aWNlX2luaXRpYWxpemUoJmdob3N0X2RldmljZSk7Ci0JLyogc2luY2UgdGhlcmUgaXMgbm8gcmVhbCBoYXJkd2FyZSBpbnNlcnRpb24gSSBqdXN0IGNhbGwgdGhlCi0JICogc2FtcGxlIHByb2JlIGZ1bmN0aW9ucyBoZXJlICovCi0Jc2FtcGxlX3Byb2JlX3NwZWNpZmljKCk7Ci0Jc2FtcGxlX3Byb2JlX2RlZmF1bHQoKTsKLQlzYW1wbGVfcHJvYmVfYXN5bmMoKTsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzYW1wbGVfZXhpdCh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdCAoc2FtcGxlX2luaXQpOwotbW9kdWxlX2V4aXQgKHNhbXBsZV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZTYyODUuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKgotICogZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMgLQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBNYW51ZWwgRXN0cmFkYSBTYWluegotICoKLSAqIE5PVEU6IFRoaXMgaXMganVzdCBhIHByb2JlIG9mIGNvbmNlcHQsIGlmIHlvdSB0aGluayB0aGF0IHlvdXIgZHJpdmVyIHdvdWxkCi0gKiBiZSB3ZWxsIHNlcnZlZCBieSB0aGlzIG1lY2hhbmlzbSBwbGVhc2UgY29udGFjdCBtZSBmaXJzdC4KLSAqCi0gKiBET04nVCBVU0UgVEhJUyBDT0RFIEFTIElTCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLQotCi1NT0RVTEVfQVVUSE9SKCJNYW51ZWwgRXN0cmFkYSBTYWlueiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJIYWNraXNoIHNhbXBsZSBmb3IgdXNpbmcgZmlybXdhcmUgY2xhc3MgZGlyZWN0bHkiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xhc3NfZGV2aWNlICp0b19jbGFzc19kZXYoc3RydWN0IGtvYmplY3QgKm9iaikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKG9iaixzdHJ1Y3QgY2xhc3NfZGV2aWNlLGtvYmopOwotfQotc3RhdGljIGlubGluZQotc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnRvX2NsYXNzX2Rldl9hdHRyKHN0cnVjdCBhdHRyaWJ1dGUgKl9hdHRyKQotewotCXJldHVybiBjb250YWluZXJfb2YoX2F0dHIsc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUsYXR0cik7Ci19Ci0KLWludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqIGF0dHIpOwotaW50IHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cik7Ci0KLXN0cnVjdCBmaXJtd2FyZV9wcml2IHsKLQljaGFyIGZ3X2lkW0ZJUk1XQVJFX05BTUVfTUFYXTsKLQlzMzIgbG9hZGluZzoyOwotCXUzMiBhYm9ydDoxOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBjbGFzcyBmaXJtd2FyZV9jbGFzczsKLQotc3RhdGljIHNzaXplX3QgZmlybXdhcmVfbG9hZGluZ19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQotewotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZndfcHJpdi0+bG9hZGluZyk7Ci19Ci1zdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9sb2FkaW5nX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKLQkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7Ci0JaW50IHByZXZfbG9hZGluZyA9IGZ3X3ByaXYtPmxvYWRpbmc7Ci0KLQlmd19wcml2LT5sb2FkaW5nID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKLQkKLQlzd2l0Y2goZndfcHJpdi0+bG9hZGluZyl7Ci0JY2FzZSAtMToKLQkJLyogYWJvcnQgbG9hZCBhbiBwYW5pYyAqLwotCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qIHNldHVwIGxvYWQgKi8KLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQlpZihwcmV2X2xvYWRpbmc9PTEpewotCQkJLyogZmluaXNoIGxvYWQgYW5kIGdldCB0aGUgZGV2aWNlIGJhY2sgdG8gd29ya2luZwotCQkJICogc3RhdGUgKi8KLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobG9hZGluZywgMDY0NCwKLQkJCSBmaXJtd2FyZV9sb2FkaW5nX3Nob3csIGZpcm13YXJlX2xvYWRpbmdfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9kYXRhX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJICBjaGFyICpidWZmZXIsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSB0b19jbGFzc19kZXYoa29iaik7Ci0Jc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOwotCi0JLyogcmVhZCBmcm9tIHRoZSBkZXZpY2VzIGZpcm13YXJlIG1lbW9yeSAqLwotCi0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIHNzaXplX3QgZmlybXdhcmVfZGF0YV93cml0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJICAgY2hhciAqYnVmZmVyLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gdG9fY2xhc3NfZGV2KGtvYmopOwotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKLQotCS8qIHdyaXRlIHRvIHRoZSBkZXZpY2VzIGZpcm13YXJlIG1lbW9yeSAqLwotCi0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGZpcm13YXJlX2F0dHJfZGF0YSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJkYXRhIiwgLm1vZGUgPSAwNjQ0fSwKLQkuc2l6ZSA9IDAsCi0JLnJlYWQgPSBmaXJtd2FyZV9kYXRhX3JlYWQsCi0JLndyaXRlID0gZmlybXdhcmVfZGF0YV93cml0ZSwKLX07Ci1zdGF0aWMgaW50IGZ3X3NldHVwX2NsYXNzX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCi0JCQkJIGNvbnN0IGNoYXIgKmZ3X25hbWUsCi0JCQkJIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2OwotCi0JZndfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmaXJtd2FyZV9wcml2KSwJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmd19wcml2KSB7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbXNldChjbGFzc19kZXYsIDAsIHNpemVvZigqY2xhc3NfZGV2KSk7Ci0KLQlzdHJuY3B5KGZ3X3ByaXYtPmZ3X2lkLCBmd19uYW1lLCBGSVJNV0FSRV9OQU1FX01BWCk7Ci0JZndfcHJpdi0+ZndfaWRbRklSTVdBUkVfTkFNRV9NQVgtMV0gPSAnXDAnOwotCi0Jc3RybmNweShjbGFzc19kZXYtPmNsYXNzX2lkLCBkZXZpY2UtPmJ1c19pZCwgQlVTX0lEX1NJWkUpOwotCWNsYXNzX2Rldi0+Y2xhc3NfaWRbQlVTX0lEX1NJWkUtMV0gPSAnXDAnOwotCWNsYXNzX2Rldi0+ZGV2ID0gZGV2aWNlOwotCi0JY2xhc3NfZGV2LT5jbGFzcyA9ICZmaXJtd2FyZV9jbGFzcywKLQljbGFzc19zZXRfZGV2ZGF0YShjbGFzc19kZXYsIGZ3X3ByaXYpOwotCXJldHZhbCA9IGNsYXNzX2RldmljZV9yZWdpc3RlcihjbGFzc19kZXYpOwotCWlmIChyZXR2YWwpewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjbGFzc19kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKLQkJZ290byBlcnJvcl9mcmVlX2Z3X3ByaXY7Ci0JfQotCi0JcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZjbGFzc19kZXYtPmtvYmosICZmaXJtd2FyZV9hdHRyX2RhdGEpOwotCWlmIChyZXR2YWwpewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzeXNmc19jcmVhdGVfYmluX2ZpbGUgZmFpbGVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKLQkJZ290byBlcnJvcl91bnJlZ19jbGFzc19kZXY7Ci0JfQotCi0JcmV0dmFsID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsYXNzX2RldiwKLQkJCQkJICAmY2xhc3NfZGV2aWNlX2F0dHJfbG9hZGluZyk7Ci0JaWYgKHJldHZhbCl7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSBmYWlsZWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOwotCQlnb3RvIGVycm9yX3JlbW92ZV9kYXRhOwotCX0KLQotCWdvdG8gb3V0OwotCQotZXJyb3JfcmVtb3ZlX2RhdGE6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZjbGFzc19kZXYtPmtvYmosICZmaXJtd2FyZV9hdHRyX2RhdGEpOwotZXJyb3JfdW5yZWdfY2xhc3NfZGV2OgotCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7Ci1lcnJvcl9mcmVlX2Z3X3ByaXY6Ci0Ja2ZyZWUoZndfcHJpdik7Ci1vdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLXN0YXRpYyB2b2lkIGZ3X3JlbW92ZV9jbGFzc19kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2KQotewotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKLQotCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9sb2FkaW5nKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNsYXNzX2Rldi0+a29iaiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7Ci0JY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoY2xhc3NfZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2UgbXlfZGV2aWNlID0gewotCS5idXNfaWQgICAgPSAibXlfZGV2MCIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBmaXJtd2FyZV9zYW1wbGVfaW5pdCh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWRldmljZV9pbml0aWFsaXplKCZteV9kZXZpY2UpOwotCWNsYXNzX2RldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGFzc19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQlpZighY2xhc3NfZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWVycm9yID0gZndfc2V0dXBfY2xhc3NfZGV2aWNlKGNsYXNzX2RldiwgIm15X2Zpcm13YXJlX2ltYWdlIiwKLQkJCQkgICAgICAmbXlfZGV2aWNlKTsKLQlpZihlcnJvcil7Ci0JCWtmcmVlKGNsYXNzX2Rldik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0gICAgICAgIHJldHVybiAwOwotCi19Ci1zdGF0aWMgdm9pZCBfX2V4aXQgZmlybXdhcmVfc2FtcGxlX2V4aXQodm9pZCkKLXsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7Ci0JZndfcmVtb3ZlX2NsYXNzX2RldmljZShjbGFzc19kZXYpOwotCWtmcmVlKGZ3X3ByaXYpOwotCWtmcmVlKGNsYXNzX2Rldik7Ci19Ci1tb2R1bGVfaW5pdChmaXJtd2FyZV9zYW1wbGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChmaXJtd2FyZV9zYW1wbGVfZXhpdCk7Ci0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CmluZGV4IDhkYTcyNGUuLjU0NjMwMDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtMiw2ICsyLDkgQEAKIAogVGhpcyBwcm92aWRlcyBhbiBvdmVydmlldyBvZiBHUElPIGFjY2VzcyBjb252ZW50aW9ucyBvbiBMaW51eC4KIAorVGhlc2UgY2FsbHMgdXNlIHRoZSBncGlvXyogbmFtaW5nIHByZWZpeC4gIE5vIG90aGVyIGNhbGxzIHNob3VsZCB1c2UgdGhhdAorcHJlZml4LCBvciB0aGUgcmVsYXRlZCBfX2dwaW9fKiBwcmVmaXguCisKIAogV2hhdCBpcyBhIEdQSU8/CiA9PT09PT09PT09PT09PT0KQEAgLTY5LDExICs3MiwxMyBAQAogbm90IGNhcmUgaG93IGl0J3MgaW1wbGVtZW50ZWQuKQogCiBUaGF0IHNhaWQsIGlmIHRoZSBjb252ZW50aW9uIGlzIHN1cHBvcnRlZCBvbiB0aGVpciBwbGF0Zm9ybSwgZHJpdmVycyBzaG91bGQKLXVzZSBpdCB3aGVuIHBvc3NpYmxlLiAgUGxhdGZvcm1zIHNob3VsZCBkZWNsYXJlIEdFTkVSSUNfR1BJTyBzdXBwb3J0IGluCi1LY29uZmlnIChib29sZWFuIHRydWUpLCB3aGljaCBtdWx0aS1wbGF0Zm9ybSBkcml2ZXJzIGNhbiBkZXBlbmQgb24gd2hlbgotdXNpbmcgdGhlIGluY2x1ZGUgZmlsZToKK3VzZSBpdCB3aGVuIHBvc3NpYmxlLiAgUGxhdGZvcm1zIG11c3QgZGVjbGFyZSBHRU5FUklDX0dQSU8gc3VwcG9ydCBpbiB0aGVpcgorS2NvbmZpZyAoYm9vbGVhbiB0cnVlKSwgYW5kIHByb3ZpZGUgYW4gPGFzbS9ncGlvLmg+IGZpbGUuICBEcml2ZXJzIHRoYXQgY2FuJ3QKK3dvcmsgd2l0aG91dCBzdGFuZGFyZCBHUElPIGNhbGxzIHNob3VsZCBoYXZlIEtjb25maWcgZW50cmllcyB3aGljaCBkZXBlbmQKK29uIEdFTkVSSUNfR1BJTy4gIFRoZSBHUElPIGNhbGxzIGFyZSBhdmFpbGFibGUsIGVpdGhlciBhcyAicmVhbCBjb2RlIiBvciBhcworb3B0aW1pemVkLWF3YXkgc3R1YnMsIHdoZW4gZHJpdmVycyB1c2UgdGhlIGluY2x1ZGUgZmlsZToKIAotCSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorCSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKIElmIHlvdSBzdGljayB0byB0aGlzIGNvbnZlbnRpb24gdGhlbiBpdCdsbCBiZSBlYXNpZXIgZm9yIG90aGVyIGRldmVsb3BlcnMgdG8KIHNlZSB3aGF0IHlvdXIgY29kZSBpcyBkb2luZywgYW5kIGhlbHAgbWFpbnRhaW4gaXQuCkBAIC0zMTYsNiArMzIxLDkgQEAKIG9yIHN1cHBvcnQgdGhlbSBpbiB0aGUgc2FtZSB3YXk7IGFuZCBhbnkgZ2l2ZW4gYm9hcmQgbWlnaHQgdXNlIGV4dGVybmFsCiBwdWxsdXBzIChvciBwdWxsZG93bnMpIHNvIHRoYXQgdGhlIG9uLWNoaXAgb25lcyBzaG91bGQgbm90IGJlIHVzZWQuCiAoV2hlbiBhIGNpcmN1aXQgbmVlZHMgNSBrT2htLCBvbi1jaGlwIDEwMCBrT2htIHJlc2lzdG9ycyB3b24ndCBkby4pCitMaWtld2lzZSBkcml2ZSBzdHJlbmd0aCAoMiBtQSB2cyAyMCBtQSkgYW5kIHZvbHRhZ2UgKDEuOFYgdnMgMy4zVikgaXMgYQorcGxhdGZvcm0tc3BlY2lmaWMgaXNzdWUsIGFzIGFyZSBtb2RlbHMgbGlrZSAobm90KSBoYXZpbmcgYSBvbmUtdG8tb25lCitjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGNvbmZpZ3VyYWJsZSBwaW5zIGFuZCBHUElPcy4KIAogVGhlcmUgYXJlIG90aGVyIHN5c3RlbS1zcGVjaWZpYyBtZWNoYW5pc21zIHRoYXQgYXJlIG5vdCBzcGVjaWZpZWQgaGVyZSwKIGxpa2UgdGhlIGFmb3JlbWVudGlvbmVkIG9wdGlvbnMgZm9yIGlucHV0IGRlLWdsaXRjaGluZyBhbmQgd2lyZS1PUiBvdXRwdXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hpZ2h1aWQudHh0IGIvRG9jdW1lbnRhdGlvbi9oaWdodWlkLnR4dAppbmRleCA3NjAzNGQ5Li42YmFkNmYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2hpZ2h1aWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaGlnaHVpZC50eHQKQEAgLTI4LDggKzI4LDYgQEAKICAgdXNlcyB0aGUgMzItYml0IFVJRCBzeXN0ZW0gY2FsbHMgcHJvcGVybHkgb3RoZXJ3aXNlLgogCiAgIFRoaXMgYWZmZWN0cyBhdCBsZWFzdDoKLQlTdW5PUyBlbXVsYXRpb24KLQlTb2xhcmlzIGVtdWxhdGlvbgogCWlCQ1Mgb24gSW50ZWwKIAogCXNwYXJjMzIgZW11bGF0aW9uIG9uIHNwYXJjNjQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHJ0aW1lcnMvaGlnaHJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2hydGltZXJzL2hpZ2hyZXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTBlOWE5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vaHJ0aW1lcnMvaGlnaHJlcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotSGlnaCByZXNvbHV0aW9uIHRpbWVycyBhbmQgZHluYW1pYyB0aWNrcyBkZXNpZ24gbm90ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZ1cnRoZXIgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBwYXBlciBvZiB0aGUgT0xTIDIwMDYgdGFsayAiaHJ0aW1lcnMKLWFuZCBiZXlvbmQiLiBUaGUgcGFwZXIgaXMgcGFydCBvZiB0aGUgT0xTIDIwMDYgUHJvY2VlZGluZ3MgVm9sdW1lIDEsIHdoaWNoIGNhbgotYmUgZm91bmQgb24gdGhlIE9MUyB3ZWJzaXRlOgotaHR0cDovL3d3dy5saW51eHN5bXBvc2l1bS5vcmcvMjAwNi9saW51eHN5bXBvc2l1bV9wcm9jdjEucGRmCi0KLVRoZSBzbGlkZXMgdG8gdGhpcyB0YWxrIGFyZSBhdmFpbGFibGUgZnJvbToKLWh0dHA6Ly90Z2x4LmRlL3Byb2plY3RzL2hydGltZXJzL29sczIwMDYtaHJ0aW1lcnMucGRmCi0KLVRoZSBzbGlkZXMgY29udGFpbiBmaXZlIGZpZ3VyZXMgKHBhZ2VzIDIsIDE1LCAxOCwgMjAsIDIyKSwgd2hpY2ggaWxsdXN0cmF0ZSB0aGUKLWNoYW5nZXMgaW4gdGhlIHRpbWUocikgcmVsYXRlZCBMaW51eCBzdWJzeXN0ZW1zLiBGaWd1cmUgIzEgKHAuIDIpIHNob3dzIHRoZQotZGVzaWduIG9mIHRoZSBMaW51eCB0aW1lKHIpIHN5c3RlbSBiZWZvcmUgaHJ0aW1lcnMgYW5kIG90aGVyIGJ1aWxkaW5nIGJsb2NrcwotZ290IG1lcmdlZCBpbnRvIG1haW5saW5lLgotCi1Ob3RlOiB0aGUgcGFwZXIgYW5kIHRoZSBzbGlkZXMgYXJlIHRhbGtpbmcgYWJvdXQgImNsb2NrIGV2ZW50IHNvdXJjZSIsIHdoaWxlIHdlCi1zd2l0Y2hlZCB0byB0aGUgbmFtZSAiY2xvY2sgZXZlbnQgZGV2aWNlcyIgaW4gbWVhbnRpbWUuCi0KLVRoZSBkZXNpZ24gY29udGFpbnMgdGhlIGZvbGxvd2luZyBiYXNpYyBidWlsZGluZyBibG9ja3M6Ci0KLS0gaHJ0aW1lciBiYXNlIGluZnJhc3RydWN0dXJlCi0tIHRpbWVvZmRheSBhbmQgY2xvY2sgc291cmNlIG1hbmFnZW1lbnQKLS0gY2xvY2sgZXZlbnQgbWFuYWdlbWVudAotLSBoaWdoIHJlc29sdXRpb24gdGltZXIgZnVuY3Rpb25hbGl0eQotLSBkeW5hbWljIHRpY2tzCi0KLQotaHJ0aW1lciBiYXNlIGluZnJhc3RydWN0dXJlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGhydGltZXIgYmFzZSBpbmZyYXN0cnVjdHVyZSB3YXMgbWVyZ2VkIGludG8gdGhlIDIuNi4xNiBrZXJuZWwuIERldGFpbHMgb2YKLXRoZSBiYXNlIGltcGxlbWVudGF0aW9uIGFyZSBjb3ZlcmVkIGluIERvY3VtZW50YXRpb24vaHJ0aW1lcnMvaHJ0aW1lci50eHQuIFNlZQotYWxzbyBmaWd1cmUgIzIgKE9MUyBzbGlkZXMgcC4gMTUpCi0KLVRoZSBtYWluIGRpZmZlcmVuY2VzIHRvIHRoZSB0aW1lciB3aGVlbCwgd2hpY2ggaG9sZHMgdGhlIGFybWVkIHRpbWVyX2xpc3QgdHlwZQotdGltZXJzIGFyZToKLSAgICAgICAtIHRpbWUgb3JkZXJlZCBlbnF1ZXVlaW5nIGludG8gYSByYi10cmVlCi0gICAgICAgLSBpbmRlcGVuZGVudCBvZiB0aWNrcyAodGhlIHByb2Nlc3NpbmcgaXMgYmFzZWQgb24gbmFub3NlY29uZHMpCi0KLQotdGltZW9mZGF5IGFuZCBjbG9jayBzb3VyY2UgbWFuYWdlbWVudAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Kb2huIFN0dWx0eidzIEdlbmVyaWMgVGltZSBPZiBEYXkgKEdUT0QpIGZyYW1ld29yayBtb3ZlcyBhIGxhcmdlIHBvcnRpb24gb2YKLWNvZGUgb3V0IG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXJlYXMgaW50byBhIGdlbmVyaWMgbWFuYWdlbWVudAotZnJhbWV3b3JrLCBhcyBpbGx1c3RyYXRlZCBpbiBmaWd1cmUgIzMgKE9MUyBzbGlkZXMgcC4gMTgpLiBUaGUgYXJjaGl0ZWN0dXJlCi1zcGVjaWZpYyBwb3J0aW9uIGlzIHJlZHVjZWQgdG8gdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSBkZXRhaWxzIG9mIHRoZSBjbG9jawotc291cmNlcywgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgaW4gdGhlIGZyYW1ld29yayBhbmQgc2VsZWN0ZWQgb24gYSBxdWFsaXR5IGJhc2VkCi1kZWNpc2lvbi4gVGhlIGxvdyBsZXZlbCBjb2RlIHByb3ZpZGVzIGhhcmR3YXJlIHNldHVwIGFuZCByZWFkb3V0IHJvdXRpbmVzIGFuZAotaW5pdGlhbGl6ZXMgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBhcmUgdXNlZCBieSB0aGUgZ2VuZXJpYyB0aW1lIGtlZXBpbmcgY29kZSB0bwotY29udmVydCB0aGUgY2xvY2sgdGlja3MgdG8gbmFub3NlY29uZCBiYXNlZCB0aW1lIHZhbHVlcy4gQWxsIG90aGVyIHRpbWUga2VlcGluZwotcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGlzIG1vdmVkIGludG8gdGhlIGdlbmVyaWMgY29kZS4gVGhlIEdUT0QgYmFzZSBwYXRjaCBnb3QKLW1lcmdlZCBpbnRvIHRoZSAyLjYuMTgga2VybmVsLgotCi1GdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBHZW5lcmljIFRpbWUgT2YgRGF5IGZyYW1ld29yayBpcyBhdmFpbGFibGUgaW4gdGhlCi1PTFMgMjAwNSBQcm9jZWVkaW5ncyBWb2x1bWUgMToKLWh0dHA6Ly93d3cubGludXhzeW1wb3NpdW0ub3JnLzIwMDUvbGludXhzeW1wb3NpdW1fcHJvY3YxLnBkZgotCi1UaGUgcGFwZXIgIldlIEFyZSBOb3QgR2V0dGluZyBBbnkgWW91bmdlcjogQSBOZXcgQXBwcm9hY2ggdG8gVGltZSBhbmQKLVRpbWVycyIgd2FzIHdyaXR0ZW4gYnkgSi4gU3R1bHR6LCBELlYuIEhhcnQsICYgTi4gQXJhdmFtdWRhbi4KLQotRmlndXJlICMzIChPTFMgc2xpZGVzIHAuMTgpIGlsbHVzdHJhdGVzIHRoZSB0cmFuc2Zvcm1hdGlvbi4KLQotCi1jbG9jayBldmVudCBtYW5hZ2VtZW50Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoaWxlIGNsb2NrIHNvdXJjZXMgcHJvdmlkZSByZWFkIGFjY2VzcyB0byB0aGUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHRpbWUKLXZhbHVlLCBjbG9jayBldmVudCBkZXZpY2VzIGFyZSB1c2VkIHRvIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50Ci1pbnRlcnJ1cHQocykuIFRoZSBuZXh0IGV2ZW50IGlzIGN1cnJlbnRseSBkZWZpbmVkIHRvIGJlIHBlcmlvZGljLCB3aXRoIGl0cwotcGVyaW9kIGRlZmluZWQgYXQgY29tcGlsZSB0aW1lLiBUaGUgc2V0dXAgYW5kIHNlbGVjdGlvbiBvZiB0aGUgZXZlbnQgZGV2aWNlCi1mb3IgdmFyaW91cyBldmVudCBkcml2ZW4gZnVuY3Rpb25hbGl0aWVzIGlzIGhhcmR3aXJlZCBpbnRvIHRoZSBhcmNoaXRlY3R1cmUKLWRlcGVuZGVudCBjb2RlLiBUaGlzIHJlc3VsdHMgaW4gZHVwbGljYXRlZCBjb2RlIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBhbmQKLW1ha2VzIGl0IGV4dHJlbWVseSBkaWZmaWN1bHQgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0gdG8gdXNlCi1ldmVudCBpbnRlcnJ1cHQgZGV2aWNlcyBvdGhlciB0aGFuIHRob3NlIGFscmVhZHkgYnVpbHQgaW50byB0aGUKLWFyY2hpdGVjdHVyZS4gQW5vdGhlciBpbXBsaWNhdGlvbiBvZiB0aGUgY3VycmVudCBkZXNpZ24gaXMgdGhhdCBpdCBpcyBuZWNlc3NhcnkKLXRvIHRvdWNoIGFsbCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBpbiBvcmRlciB0byBwcm92aWRlIG5ldwotZnVuY3Rpb25hbGl0eSBsaWtlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMgb3IgZHluYW1pYyB0aWNrcy4KLQotVGhlIGNsb2NrIGV2ZW50cyBzdWJzeXN0ZW0gdHJpZXMgdG8gYWRkcmVzcyB0aGlzIHByb2JsZW0gYnkgcHJvdmlkaW5nIGEgZ2VuZXJpYwotc29sdXRpb24gdG8gbWFuYWdlIGNsb2NrIGV2ZW50IGRldmljZXMgYW5kIHRoZWlyIHVzYWdlIGZvciB0aGUgdmFyaW91cyBjbG9jawotZXZlbnQgZHJpdmVuIGtlcm5lbCBmdW5jdGlvbmFsaXRpZXMuIFRoZSBnb2FsIG9mIHRoZSBjbG9jayBldmVudCBzdWJzeXN0ZW0gaXMKLXRvIG1pbmltaXplIHRoZSBjbG9jayBldmVudCByZWxhdGVkIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgY29kZSB0byB0aGUgcHVyZQotaGFyZHdhcmUgcmVsYXRlZCBoYW5kbGluZyBhbmQgdG8gYWxsb3cgZWFzeSBhZGRpdGlvbiBhbmQgdXRpbGl6YXRpb24gb2YgbmV3Ci1jbG9jayBldmVudCBkZXZpY2VzLiBJdCBhbHNvIG1pbmltaXplcyB0aGUgZHVwbGljYXRlZCBjb2RlIGFjcm9zcyB0aGUKLWFyY2hpdGVjdHVyZXMgYXMgaXQgcHJvdmlkZXMgZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IGRvd24gdG8gdGhlIGludGVycnVwdAotc2VydmljZSBoYW5kbGVyLCB3aGljaCBpcyBhbG1vc3QgaW5oZXJlbnRseSBoYXJkd2FyZSBkZXBlbmRlbnQuCi0KLUNsb2NrIGV2ZW50IGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgZWl0aGVyIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IGJvb3QKLWNvZGUgb3IgYXQgbW9kdWxlIGluc2VydGlvbiB0aW1lLiBFYWNoIGNsb2NrIGV2ZW50IGRldmljZSBmaWxscyBhIGRhdGEKLXN0cnVjdHVyZSB3aXRoIGNsb2NrLXNwZWNpZmljIHByb3BlcnR5IHBhcmFtZXRlcnMgYW5kIGNhbGxiYWNrIGZ1bmN0aW9ucy4gVGhlCi1jbG9jayBldmVudCBtYW5hZ2VtZW50IGRlY2lkZXMsIGJ5IHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgcGFyYW1ldGVycywgdGhlCi1zZXQgb2Ygc3lzdGVtIGZ1bmN0aW9ucyBhIGNsb2NrIGV2ZW50IGRldmljZSB3aWxsIGJlIHVzZWQgdG8gc3VwcG9ydC4gVGhpcwotaW5jbHVkZXMgdGhlIGRpc3RpbmN0aW9uIG9mIHBlci1DUFUgYW5kIHBlci1zeXN0ZW0gZ2xvYmFsIGV2ZW50IGRldmljZXMuCi0KLVN5c3RlbS1sZXZlbCBnbG9iYWwgZXZlbnQgZGV2aWNlcyBhcmUgdXNlZCBmb3IgdGhlIExpbnV4IHBlcmlvZGljIHRpY2suIFBlci1DUFUKLWV2ZW50IGRldmljZXMgYXJlIHVzZWQgdG8gcHJvdmlkZSBsb2NhbCBDUFUgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIHByb2Nlc3MKLWFjY291bnRpbmcsIHByb2ZpbGluZywgYW5kIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMuCi0KLVRoZSBtYW5hZ2VtZW50IGxheWVyIGFzc2lnbmVzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsaXdpbmcgZnVuY3Rpb25zIHRvIGEgY2xvY2sKLWV2ZW50IGRldmljZToKLSAgICAgIC0gc3lzdGVtIGdsb2JhbCBwZXJpb2RpYyB0aWNrIChqaWZmaWVzIHVwZGF0ZSkKLSAgICAgIC0gY3B1IGxvY2FsIHVwZGF0ZV9wcm9jZXNzX3RpbWVzCi0gICAgICAtIGNwdSBsb2NhbCBwcm9maWxpbmcKLSAgICAgIC0gY3B1IGxvY2FsIG5leHQgZXZlbnQgaW50ZXJydXB0IChub24gcGVyaW9kaWMgbW9kZSkKLQotVGhlIGNsb2NrIGV2ZW50IGRldmljZSBkZWxlZ2F0ZXMgdGhlIHNlbGVjdGlvbiBvZiB0aG9zZSB0aW1lciBpbnRlcnJ1cHQgcmVsYXRlZAotZnVuY3Rpb25zIGNvbXBsZXRlbHkgdG8gdGhlIG1hbmFnZW1lbnQgbGF5ZXIuIFRoZSBjbG9jayBtYW5hZ2VtZW50IGxheWVyIHN0b3JlcwotYSBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBkZXZpY2UgZGVzY3JpcHRpb24gc3RydWN0dXJlLCB3aGljaCBoYXMgdG8gYmUgY2FsbGVkCi1mcm9tIHRoZSBoYXJkd2FyZSBsZXZlbCBoYW5kbGVyLiBUaGlzIHJlbW92ZXMgYSBsb3Qgb2YgZHVwbGljYXRlZCBjb2RlIGZyb20gdGhlCi1hcmNoaXRlY3R1cmUgc3BlY2lmaWMgdGltZXIgaW50ZXJydXB0IGhhbmRsZXJzIGFuZCBoYW5kcyB0aGUgY29udHJvbCBvdmVyIHRoZQotY2xvY2sgZXZlbnQgZGV2aWNlcyBhbmQgdGhlIGFzc2lnbm1lbnQgb2YgdGltZXIgaW50ZXJydXB0IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eQotdG8gdGhlIGNvcmUgY29kZS4KLQotVGhlIGNsb2NrIGV2ZW50IGxheWVyIEFQSSBpcyByYXRoZXIgc21hbGwuIEFzaWRlIGZyb20gdGhlIGNsb2NrIGV2ZW50IGRldmljZQotcmVnaXN0cmF0aW9uIGludGVyZmFjZSBpdCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnQKLWludGVycnVwdCwgY2xvY2sgZXZlbnQgZGV2aWNlIG5vdGlmaWNhdGlvbiBzZXJ2aWNlIGFuZCBzdXBwb3J0IGZvciBzdXNwZW5kIGFuZAotcmVzdW1lLgotCi1UaGUgZnJhbWV3b3JrIGFkZHMgYWJvdXQgNzAwIGxpbmVzIG9mIGNvZGUgd2hpY2ggcmVzdWx0cyBpbiBhIDJLQiBpbmNyZWFzZSBvZgotdGhlIGtlcm5lbCBiaW5hcnkgc2l6ZS4gVGhlIGNvbnZlcnNpb24gb2YgaTM4NiByZW1vdmVzIGFib3V0IDEwMCBsaW5lcyBvZgotY29kZS4gVGhlIGJpbmFyeSBzaXplIGRlY3JlYXNlIGlzIGluIHRoZSByYW5nZSBvZiA0MDAgYnl0ZS4gV2UgYmVsaWV2ZSB0aGF0IHRoZQotaW5jcmVhc2Ugb2YgZmxleGliaWxpdHkgYW5kIHRoZSBhdm9pZGFuY2Ugb2YgZHVwbGljYXRlZCBjb2RlIGFjcm9zcwotYXJjaGl0ZWN0dXJlcyBqdXN0aWZpZXMgdGhlIHNsaWdodCBpbmNyZWFzZSBvZiB0aGUgYmluYXJ5IHNpemUuCi0KLVRoZSBjb252ZXJzaW9uIG9mIGFuIGFyY2hpdGVjdHVyZSBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3QsIGJ1dCBhbGxvd3MgdG8KLXV0aWxpemUgdGhlIGhpZ2ggcmVzb2x1dGlvbiBhbmQgZHluYW1pYyB0aWNrIGZ1bmN0aW9uYWxpdGVzIHdpdGhvdXQgYW55IGNoYW5nZQotdG8gdGhlIGNsb2NrIGV2ZW50IGRldmljZSBhbmQgdGltZXIgaW50ZXJydXB0IGNvZGUuIEFmdGVyIHRoZSBjb252ZXJzaW9uIHRoZQotZW5hYmxpbmcgb2YgaGlnaCByZXNvbHV0aW9uIHRpbWVycyBhbmQgZHluYW1pYyB0aWNrcyBpcyBzaW1wbHkgcHJvdmlkZWQgYnkKLWFkZGluZyB0aGUga2VybmVsL3RpbWUvS2NvbmZpZyBmaWxlIHRvIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgS2NvbmZpZyBhbmQKLWFkZGluZyB0aGUgZHluYW1pYyB0aWNrIHNwZWNpZmljIGNhbGxzIHRvIHRoZSBpZGxlIHJvdXRpbmUgKGEgdG90YWwgb2YgMyBsaW5lcwotYWRkZWQgdG8gdGhlIGlkbGUgZnVuY3Rpb24gYW5kIHRoZSBLY29uZmlnIGZpbGUpCi0KLUZpZ3VyZSAjNCAoT0xTIHNsaWRlcyBwLjIwKSBpbGx1c3RyYXRlcyB0aGUgdHJhbnNmb3JtYXRpb24uCi0KLQotaGlnaCByZXNvbHV0aW9uIHRpbWVyIGZ1bmN0aW9uYWxpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUR1cmluZyBzeXN0ZW0gYm9vdCBpdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIHRoZSBoaWdoIHJlc29sdXRpb24gdGltZXIKLWZ1bmN0aW9uYWxpdHksIHdoaWxlIG1ha2luZyBpdCBwb3NzaWJsZSB3b3VsZCBiZSBkaWZmaWN1bHQgYW5kIHdvdWxkIHNlcnZlIG5vCi11c2VmdWwgZnVuY3Rpb24uIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlIGZyYW1ld29yaywgdGhlCi1jbG9jayBzb3VyY2UgZnJhbWV3b3JrIChHVE9EKSBhbmQgaHJ0aW1lcnMgaXRzZWxmIGhhcyB0byBiZSBkb25lIGFuZAotYXBwcm9wcmlhdGUgY2xvY2sgc291cmNlcyBhbmQgY2xvY2sgZXZlbnQgZGV2aWNlcyBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlCi10aGUgaGlnaCByZXNvbHV0aW9uIGZ1bmN0aW9uYWxpdHkgY2FuIHdvcmsuIFVwIHRvIHRoZSBwb2ludCB3aGVyZSBocnRpbWVycyBhcmUKLWluaXRpYWxpemVkLCB0aGUgc3lzdGVtIHdvcmtzIGluIHRoZSB1c3VhbCBsb3cgcmVzb2x1dGlvbiBwZXJpb2RpYyBtb2RlLiBUaGUKLWNsb2NrIHNvdXJjZSBhbmQgdGhlIGNsb2NrIGV2ZW50IGRldmljZSBsYXllcnMgcHJvdmlkZSBub3RpZmljYXRpb24gZnVuY3Rpb25zCi13aGljaCBpbmZvcm0gaHJ0aW1lcnMgYWJvdXQgYXZhaWxhYmlsaXR5IG9mIG5ldyBoYXJkd2FyZS4gaHJ0aW1lcnMgdmFsaWRhdGVzCi10aGUgdXNhYmlsaXR5IG9mIHRoZSByZWdpc3RlcmVkIGNsb2NrIHNvdXJjZXMgYW5kIGNsb2NrIGV2ZW50IGRldmljZXMgYmVmb3JlCi1zd2l0Y2hpbmcgdG8gaGlnaCByZXNvbHV0aW9uIG1vZGUuIFRoaXMgZW5zdXJlcyBhbHNvIHRoYXQgYSBrZXJuZWwgd2hpY2ggaXMKLWNvbmZpZ3VyZWQgZm9yIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMgY2FuIHJ1biBvbiBhIHN5c3RlbSB3aGljaCBsYWNrcyB0aGUKLW5lY2Vzc2FyeSBoYXJkd2FyZSBzdXBwb3J0LgotCi1UaGUgaGlnaCByZXNvbHV0aW9uIHRpbWVyIGNvZGUgZG9lcyBub3Qgc3VwcG9ydCBTTVAgbWFjaGluZXMgd2hpY2ggaGF2ZSBvbmx5Ci1nbG9iYWwgY2xvY2sgZXZlbnQgZGV2aWNlcy4gVGhlIHN1cHBvcnQgb2Ygc3VjaCBoYXJkd2FyZSB3b3VsZCBpbnZvbHZlIElQSQotY2FsbHMgd2hlbiBhbiBpbnRlcnJ1cHQgaGFwcGVucy4gVGhlIG92ZXJoZWFkIHdvdWxkIGJlIG11Y2ggbGFyZ2VyIHRoYW4gdGhlCi1iZW5lZml0LiBUaGlzIGlzIHRoZSByZWFzb24gd2h5IHdlIGN1cnJlbnRseSBkaXNhYmxlIGhpZ2ggcmVzb2x1dGlvbiBhbmQKLWR5bmFtaWMgdGlja3Mgb24gaTM4NiBTTVAgc3lzdGVtcyB3aGljaCBzdG9wIHRoZSBsb2NhbCBBUElDIGluIEMzIHBvd2VyCi1zdGF0ZS4gQSB3b3JrYXJvdW5kIGlzIGF2YWlsYWJsZSBhcyBhbiBpZGVhLCBidXQgdGhlIHByb2JsZW0gaGFzIG5vdCBiZWVuCi10YWNrbGVkIHlldC4KLQotVGhlIHRpbWUgb3JkZXJlZCBpbnNlcnRpb24gb2YgdGltZXJzIHByb3ZpZGVzIGFsbCB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gZGVjaWRlCi13aGV0aGVyIHRoZSBldmVudCBkZXZpY2UgaGFzIHRvIGJlIHJlcHJvZ3JhbW1lZCB3aGVuIGEgdGltZXIgaXMgYWRkZWQuIFRoZQotZGVjaXNpb24gaXMgbWFkZSBwZXIgdGltZXIgYmFzZSBhbmQgc3luY2hyb25pemVkIGFjcm9zcyBwZXItY3B1IHRpbWVyIGJhc2VzIGluCi1hIHN1cHBvcnQgZnVuY3Rpb24uIFRoZSBkZXNpZ24gYWxsb3dzIHRoZSBzeXN0ZW0gdG8gdXRpbGl6ZSBzZXBhcmF0ZSBwZXItQ1BVCi1jbG9jayBldmVudCBkZXZpY2VzIGZvciB0aGUgcGVyLUNQVSB0aW1lciBiYXNlcywgYnV0IGN1cnJlbnRseSBvbmx5IG9uZQotcmVwcm9ncmFtbWFibGUgY2xvY2sgZXZlbnQgZGV2aWNlIHBlci1DUFUgaXMgdXRpbGl6ZWQuCi0KLVdoZW4gdGhlIHRpbWVyIGludGVycnVwdCBoYXBwZW5zLCB0aGUgbmV4dCBldmVudCBpbnRlcnJ1cHQgaGFuZGxlciBpcyBjYWxsZWQKLWZyb20gdGhlIGNsb2NrIGV2ZW50IGRpc3RyaWJ1dGlvbiBjb2RlIGFuZCBtb3ZlcyBleHBpcmVkIHRpbWVycyBmcm9tIHRoZQotcmVkLWJsYWNrIHRyZWUgdG8gYSBzZXBhcmF0ZSBkb3VibGUgbGlua2VkIGxpc3QgYW5kIGludm9rZXMgdGhlIHNvZnRpcnEKLWhhbmRsZXIuIEFuIGFkZGl0aW9uYWwgbW9kZSBmaWVsZCBpbiB0aGUgaHJ0aW1lciBzdHJ1Y3R1cmUgYWxsb3dzIHRoZSBzeXN0ZW0gdG8KLWV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb25zIGRpcmVjdGx5IGZyb20gdGhlIG5leHQgZXZlbnQgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMKLWlzIHJlc3RyaWN0ZWQgdG8gY29kZSB3aGljaCBjYW4gc2FmZWx5IGJlIGV4ZWN1dGVkIGluIHRoZSBoYXJkIGludGVycnVwdAotY29udGV4dC4gVGhpcyBhcHBsaWVzLCBmb3IgZXhhbXBsZSwgdG8gdGhlIGNvbW1vbiBjYXNlIG9mIGEgd2FrZXVwIGZ1bmN0aW9uIGFzCi11c2VkIGJ5IG5hbm9zbGVlcC4gVGhlIGFkdmFudGFnZSBvZiBleGVjdXRpbmcgdGhlIGhhbmRsZXIgaW4gdGhlIGludGVycnVwdAotY29udGV4dCBpcyB0aGUgYXZvaWRhbmNlIG9mIHVwIHRvIHR3byBjb250ZXh0IHN3aXRjaGVzIC0gZnJvbSB0aGUgaW50ZXJydXB0ZWQKLWNvbnRleHQgdG8gdGhlIHNvZnRpcnEgYW5kIHRvIHRoZSB0YXNrIHdoaWNoIGlzIHdva2VuIHVwIGJ5IHRoZSBleHBpcmVkCi10aW1lci4KLQotT25jZSBhIHN5c3RlbSBoYXMgc3dpdGNoZWQgdG8gaGlnaCByZXNvbHV0aW9uIG1vZGUsIHRoZSBwZXJpb2RpYyB0aWNrIGlzCi1zd2l0Y2hlZCBvZmYuIFRoaXMgZGlzYWJsZXMgdGhlIHBlciBzeXN0ZW0gZ2xvYmFsIHBlcmlvZGljIGNsb2NrIGV2ZW50IGRldmljZSAtCi1lLmcuIHRoZSBQSVQgb24gaTM4NiBTTVAgc3lzdGVtcy4KLQotVGhlIHBlcmlvZGljIHRpY2sgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBieSBhbiBwZXItY3B1IGhydGltZXIuIFRoZSBjYWxsYmFjawotZnVuY3Rpb24gaXMgZXhlY3V0ZWQgaW4gdGhlIG5leHQgZXZlbnQgaW50ZXJydXB0IGNvbnRleHQgYW5kIHVwZGF0ZXMgamlmZmllcwotYW5kIGNhbGxzIHVwZGF0ZV9wcm9jZXNzX3RpbWVzIGFuZCBwcm9maWxpbmcuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaHJ0aW1lcgotYmFzZWQgcGVyaW9kaWMgdGljayBpcyBkZXNpZ25lZCB0byBiZSBleHRlbmRlZCB3aXRoIGR5bmFtaWMgdGljayBmdW5jdGlvbmFsaXR5LgotVGhpcyBhbGxvd3MgdG8gdXNlIGEgc2luZ2xlIGNsb2NrIGV2ZW50IGRldmljZSB0byBzY2hlZHVsZSBoaWdoIHJlc29sdXRpb24KLXRpbWVyIGFuZCBwZXJpb2RpYyBldmVudHMgKGppZmZpZXMgdGljaywgcHJvZmlsaW5nLCBwcm9jZXNzIGFjY291bnRpbmcpIG9uIFVQCi1zeXN0ZW1zLiBUaGlzIGhhcyBiZWVuIHByb3ZlZCB0byB3b3JrIHdpdGggdGhlIFBJVCBvbiBpMzg2IGFuZCB0aGUgSW5jcmVtZW50ZXIKLW9uIFBQQy4KLQotVGhlIHNvZnRpcnEgZm9yIHJ1bm5pbmcgdGhlIGhydGltZXIgcXVldWVzIGFuZCBleGVjdXRpbmcgdGhlIGNhbGxiYWNrcyBoYXMgYmVlbgotc2VwYXJhdGVkIGZyb20gdGhlIHRpY2sgYm91bmQgdGltZXIgc29mdGlycSB0byBhbGxvdyBhY2N1cmF0ZSBkZWxpdmVyeSBvZiBoaWdoCi1yZXNvbHV0aW9uIHRpbWVyIHNpZ25hbHMgd2hpY2ggYXJlIHVzZWQgYnkgaXRpbWVyIGFuZCBQT1NJWCBpbnRlcnZhbAotdGltZXJzLiBUaGUgZXhlY3V0aW9uIG9mIHRoaXMgc29mdGlycSBjYW4gc3RpbGwgYmUgZGVsYXllZCBieSBvdGhlciBzb2Z0aXJxcywKLWJ1dCB0aGUgb3ZlcmFsbCBsYXRlbmNpZXMgaGF2ZSBiZWVuIHNpZ25pZmljYW50bHkgaW1wcm92ZWQgYnkgdGhpcyBzZXBhcmF0aW9uLgotCi1GaWd1cmUgIzUgKE9MUyBzbGlkZXMgcC4yMikgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uLgotCi0KLWR5bmFtaWMgdGlja3MKLS0tLS0tLS0tLS0tLS0KLQotRHluYW1pYyB0aWNrcyBhcmUgdGhlIGxvZ2ljYWwgY29uc2VxdWVuY2Ugb2YgdGhlIGhydGltZXIgYmFzZWQgcGVyaW9kaWMgdGljawotcmVwbGFjZW1lbnQgKHNjaGVkX3RpY2spLiBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgc2NoZWRfdGljayBocnRpbWVyIGlzCi1leHRlbmRlZCBieSB0aHJlZSBmdW5jdGlvbnM6Ci0KLS0gaHJ0aW1lcl9zdG9wX3NjaGVkX3RpY2sKLS0gaHJ0aW1lcl9yZXN0YXJ0X3NjaGVkX3RpY2sKLS0gaHJ0aW1lcl91cGRhdGVfamlmZmllcwotCi1ocnRpbWVyX3N0b3Bfc2NoZWRfdGljaygpIGlzIGNhbGxlZCB3aGVuIGEgQ1BVIGdvZXMgaW50byBpZGxlIHN0YXRlLiBUaGUgY29kZQotZXZhbHVhdGVzIHRoZSBuZXh0IHNjaGVkdWxlZCB0aW1lciBldmVudCAoZnJvbSBib3RoIGhydGltZXJzIGFuZCB0aGUgdGltZXIKLXdoZWVsKSBhbmQgaW4gY2FzZSB0aGF0IHRoZSBuZXh0IGV2ZW50IGlzIGZ1cnRoZXIgYXdheSB0aGFuIHRoZSBuZXh0IHRpY2sgaXQKLXJlcHJvZ3JhbXMgdGhlIHNjaGVkX3RpY2sgdG8gdGhpcyBmdXR1cmUgZXZlbnQsIHRvIGFsbG93IGxvbmdlciBpZGxlIHNsZWVwcwotd2l0aG91dCB3b3J0aGxlc3MgaW50ZXJydXB0aW9uIGJ5IHRoZSBwZXJpb2RpYyB0aWNrLiBUaGUgZnVuY3Rpb24gaXMgYWxzbwotY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IGhhcHBlbnMgZHVyaW5nIHRoZSBpZGxlIHBlcmlvZCwgd2hpY2ggZG9lcyBub3QgY2F1c2UgYQotcmVzY2hlZHVsZS4gVGhlIGNhbGwgaXMgbmVjZXNzYXJ5IGFzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBtaWdodCBoYXZlIGFybWVkIGEKLW5ldyB0aW1lciB3aG9zZSBleHBpcnkgdGltZSBpcyBiZWZvcmUgdGhlIHRpbWUgd2hpY2ggd2FzIGlkZW50aWZpZWQgYXMgdGhlCi1uZWFyZXN0IGV2ZW50IGluIHRoZSBwcmV2aW91cyBjYWxsIHRvIGhydGltZXJfc3RvcF9zY2hlZF90aWNrLgotCi1ocnRpbWVyX3Jlc3RhcnRfc2NoZWRfdGljaygpIGlzIGNhbGxlZCB3aGVuIHRoZSBDUFUgbGVhdmVzIHRoZSBpZGxlIHN0YXRlIGJlZm9yZQotaXQgY2FsbHMgc2NoZWR1bGUoKS4gaHJ0aW1lcl9yZXN0YXJ0X3NjaGVkX3RpY2soKSByZXN1bWVzIHRoZSBwZXJpb2RpYyB0aWNrLAotd2hpY2ggaXMga2VwdCBhY3RpdmUgdW50aWwgdGhlIG5leHQgY2FsbCB0byBocnRpbWVyX3N0b3Bfc2NoZWRfdGljaygpLgotCi1ocnRpbWVyX3VwZGF0ZV9qaWZmaWVzKCkgaXMgY2FsbGVkIGZyb20gaXJxX2VudGVyKCkgd2hlbiBhbiBpbnRlcnJ1cHQgaGFwcGVucwotaW4gdGhlIGlkbGUgcGVyaW9kIHRvIG1ha2Ugc3VyZSB0aGF0IGppZmZpZXMgYXJlIHVwIHRvIGRhdGUgYW5kIHRoZSBpbnRlcnJ1cHQKLWhhbmRsZXIgaGFzIG5vdCB0byBkZWFsIHdpdGggYW4gZXZlbnR1YWxseSBzdGFsZSBqaWZmeSB2YWx1ZS4KLQotVGhlIGR5bmFtaWMgdGljayBmZWF0dXJlIHByb3ZpZGVzIHN0YXRpc3RpY2FsIHZhbHVlcyB3aGljaCBhcmUgZXhwb3J0ZWQgdG8KLXVzZXJzcGFjZSB2aWEgL3Byb2Mvc3RhdHMgYW5kIGNhbiBiZSBtYWRlIGF2YWlsYWJsZSBmb3IgZW5oYW5jZWQgcG93ZXIKLW1hbmFnZW1lbnQgY29udHJvbC4KLQotVGhlIGltcGxlbWVudGF0aW9uIGxlYXZlcyByb29tIGZvciBmdXJ0aGVyIGRldmVsb3BtZW50IGxpa2UgZnVsbCB0aWNrbGVzcwotc3lzdGVtcywgd2hlcmUgdGhlIHRpbWUgc2xpY2UgaXMgY29udHJvbGxlZCBieSB0aGUgc2NoZWR1bGVyLCB2YXJpYWJsZQotZnJlcXVlbmN5IHByb2ZpbGluZywgYW5kIGEgY29tcGxldGUgcmVtb3ZhbCBvZiBqaWZmaWVzIGluIHRoZSBmdXR1cmUuCi0KLQotQXNpZGUgdGhlIGN1cnJlbnQgaW5pdGlhbCBzdWJtaXNzaW9uIG9mIGkzODYgc3VwcG9ydCwgdGhlIHBhdGNoc2V0IGhhcyBiZWVuCi1leHRlbmRlZCB0byB4ODZfNjQgYW5kIEFSTSBhbHJlYWR5LiBJbml0aWFsICh3b3JrIGluIHByb2dyZXNzKSBzdXBwb3J0IGlzIGFsc28KLWF2YWlsYWJsZSBmb3IgTUlQUyBhbmQgUG93ZXJQQy4KLQotCSAgVGhvbWFzLCBJbmdvCi0KLQotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3X3JhbmRvbS50eHQgYi9Eb2N1bWVudGF0aW9uL2h3X3JhbmRvbS50eHQKaW5kZXggYmI1OGMzNi4uNjkwZjUyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od19yYW5kb20udHh0CisrKyBiL0RvY3VtZW50YXRpb24vaHdfcmFuZG9tLnR4dApAQCAtMSwyMCArMSw1NCBAQAotCUhhcmR3YXJlIGRyaXZlciBmb3IgSW50ZWwvQU1EL1ZJQSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnMgKFJORykKLQlDb3B5cmlnaHQgMjAwMCwyMDAxIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KLQlDb3B5cmlnaHQgMjAwMCwyMDAxIFBoaWxpcHAgUnVtcGYgPHBydW1wZkBtYW5kcmFrZXNvZnQuY29tPgotCiBJbnRyb2R1Y3Rpb246CiAKLQlUaGUgaHdfcmFuZG9tIGRldmljZSBkcml2ZXIgaXMgc29mdHdhcmUgdGhhdCBtYWtlcyB1c2Ugb2YgYQorCVRoZSBod19yYW5kb20gZnJhbWV3b3JrIGlzIHNvZnR3YXJlIHRoYXQgbWFrZXMgdXNlIG9mIGEKIAlzcGVjaWFsIGhhcmR3YXJlIGZlYXR1cmUgb24geW91ciBDUFUgb3IgbW90aGVyYm9hcmQsCi0JYSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAoUk5HKS4KKwlhIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChSTkcpLiAgVGhlIHNvZnR3YXJlIGhhcyB0d28gcGFydHM6CisJYSBjb3JlIHByb3ZpZGluZyB0aGUgL2Rldi9od19yYW5kb20gY2hhcmFjdGVyIGRldmljZSBhbmQgaXRzCisJc3lzZnMgc3VwcG9ydCwgcGx1cyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHBsdWdzCisJaW50byB0aGF0IGNvcmUuCiAKLQlJbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhpcyBkZXZpY2UgZHJpdmVyLCB5b3UKKwlUbyBtYWtlIHRoZSBtb3N0IGVmZmVjdGl2ZSB1c2Ugb2YgdGhlc2UgbWVjaGFuaXNtcywgeW91CiAJc2hvdWxkIGRvd25sb2FkIHRoZSBzdXBwb3J0IHNvZnR3YXJlIGFzIHdlbGwuICBEb3dubG9hZCB0aGUKIAlsYXRlc3QgdmVyc2lvbiBvZiB0aGUgInJuZy10b29scyIgcGFja2FnZSBmcm9tIHRoZQogCWh3X3JhbmRvbSBkcml2ZXIncyBvZmZpY2lhbCBXZWIgc2l0ZToKIAogCQlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwvCiAKKwlUaG9zZSB0b29scyB1c2UgL2Rldi9od19yYW5kb20gdG8gZmlsbCB0aGUga2VybmVsIGVudHJvcHkgcG9vbCwKKwl3aGljaCBpcyB1c2VkIGludGVybmFsbHkgYW5kIGV4cG9ydGVkIGJ5IHRoZSAvZGV2L3VyYW5kb20gYW5kCisJL2Rldi9yYW5kb20gc3BlY2lhbCBmaWxlcy4KKworVGhlb3J5IG9mIG9wZXJhdGlvbjoKKworCUNIQVJBQ1RFUiBERVZJQ0UuICBVc2luZyB0aGUgc3RhbmRhcmQgb3BlbigpCisJYW5kIHJlYWQoKSBzeXN0ZW0gY2FsbHMsIHlvdSBjYW4gcmVhZCByYW5kb20gZGF0YSBmcm9tCisJdGhlIGhhcmR3YXJlIFJORyBkZXZpY2UuICBUaGlzIGRhdGEgaXMgTk9UIENIRUNLRUQgYnkgYW55CisJZml0bmVzcyB0ZXN0cywgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIGJvZ3VzIChpZiB0aGUKKwloYXJkd2FyZSBpcyBmYXVsdHkgb3IgaGFzIGJlZW4gdGFtcGVyZWQgd2l0aCkuICBEYXRhIGlzIG9ubHkKKwlvdXRwdXQgaWYgdGhlIGhhcmR3YXJlICJoYXMtZGF0YSIgZmxhZyBpcyBzZXQsIGJ1dCBuZXZlcnRoZWxlc3MKKwlhIHNlY3VyaXR5LWNvbnNjaW91cyBwZXJzb24gd291bGQgcnVuIGZpdG5lc3MgdGVzdHMgb24gdGhlCisJZGF0YSBiZWZvcmUgYXNzdW1pbmcgaXQgaXMgdHJ1bHkgcmFuZG9tLgorCisJVGhlIHJuZy10b29scyBwYWNrYWdlIHVzZXMgc3VjaCB0ZXN0cyBpbiAicm5nZCIsIGFuZCBsZXRzIHlvdQorCXJ1biB0aGVtIGJ5IGhhbmQgd2l0aCBhICJybmd0ZXN0IiB1dGlsaXR5LgorCisJL2Rldi9od19yYW5kb20gaXMgY2hhciBkZXZpY2UgbWFqb3IgMTAsIG1pbm9yIDE4My4KKworCUNMQVNTIERFVklDRS4gIFRoZXJlIGlzIGEgL3N5cy9jbGFzcy9taXNjL2h3X3JhbmRvbSBub2RlIHdpdGgKKwl0d28gdW5pcXVlIGF0dHJpYnV0ZXMsICJybmdfYXZhaWxhYmxlIiBhbmQgInJuZ19jdXJyZW50Ii4gIFRoZQorCSJybmdfYXZhaWxhYmxlIiBhdHRyaWJ1dGUgbGlzdHMgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMKKwlhdmFpbGFibGUsIHdoaWxlICJybmdfY3VycmVudCIgbGlzdHMgdGhlIG9uZSB3aGljaCBpcyBjdXJyZW50bHkKKwljb25uZWN0ZWQgdG8gL2Rldi9od19yYW5kb20uICBJZiB5b3VyIHN5c3RlbSBoYXMgbW9yZSB0aGFuIG9uZQorCVJORyBhdmFpbGFibGUsIHlvdSBtYXkgY2hhbmdlIHRoZSBvbmUgdXNlZCBieSB3cml0aW5nIGEgbmFtZSBmcm9tCisJdGhlIGxpc3QgaW4gInJuZ19hdmFpbGFibGUiIGludG8gInJuZ19jdXJyZW50Ii4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCUhhcmR3YXJlIGRyaXZlciBmb3IgSW50ZWwvQU1EL1ZJQSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnMgKFJORykKKwlDb3B5cmlnaHQgMjAwMCwyMDAxIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KKwlDb3B5cmlnaHQgMjAwMCwyMDAxIFBoaWxpcHAgUnVtcGYgPHBydW1wZkBtYW5kcmFrZXNvZnQuY29tPgorCisKIEFib3V0IHRoZSBJbnRlbCBSTkcgaGFyZHdhcmUsIGZyb20gdGhlIGZpcm13YXJlIGh1YiBkYXRhc2hlZXQ6CiAKIAlUaGUgRmlybXdhcmUgSHViIGludGVncmF0ZXMgYSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAoUk5HKQpAQCAtMjUsMjAgKzU5LDcgQEAKIAlhY2Nlc3MgdG8gb3VyIFJORyBmb3IgdXNlIGFzIGEgc2VjdXJpdHkgZmVhdHVyZS4gQXQgdGhpcyB0aW1lLAogCXRoZSBSTkcgaXMgb25seSB0byBiZSB1c2VkIHdpdGggYSBzeXN0ZW0gaW4gYW4gT1MtcHJlc2VudCBzdGF0ZS4KIAotVGhlb3J5IG9mIG9wZXJhdGlvbjoKLQotCUNoYXJhY3RlciBkcml2ZXIuICBVc2luZyB0aGUgc3RhbmRhcmQgb3BlbigpCi0JYW5kIHJlYWQoKSBzeXN0ZW0gY2FsbHMsIHlvdSBjYW4gcmVhZCByYW5kb20gZGF0YSBmcm9tCi0JdGhlIGhhcmR3YXJlIFJORyBkZXZpY2UuICBUaGlzIGRhdGEgaXMgTk9UIENIRUNLRUQgYnkgYW55Ci0JZml0bmVzcyB0ZXN0cywgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIGJvZ3VzIChpZiB0aGUKLQloYXJkd2FyZSBpcyBmYXVsdHkgb3IgaGFzIGJlZW4gdGFtcGVyZWQgd2l0aCkuICBEYXRhIGlzIG9ubHkKLQlvdXRwdXQgaWYgdGhlIGhhcmR3YXJlICJoYXMtZGF0YSIgZmxhZyBpcyBzZXQsIGJ1dCBuZXZlcnRoZWxlc3MKLQlhIHNlY3VyaXR5LWNvbnNjaW91cyBwZXJzb24gd291bGQgcnVuIGZpdG5lc3MgdGVzdHMgb24gdGhlCi0JZGF0YSBiZWZvcmUgYXNzdW1pbmcgaXQgaXMgdHJ1bHkgcmFuZG9tLgotCi0JL2Rldi9od3JhbmRvbSBpcyBjaGFyIGRldmljZSBtYWpvciAxMCwgbWlub3IgMTgzLgotCi1Ecml2ZXIgbm90ZXM6CitJbnRlbCBSTkcgRHJpdmVyIG5vdGVzOgogCiAJKiBGSVhNRTogc3VwcG9ydCBwb2xsKDIpCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQ4YjE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDczCkBAIC0wLDAgKzEsNzkgQEAKK0tlcm5lbCBkcml2ZXIgYWR0NzQ3MworPT09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogQW5hbG9nIERldmljZXMgQURUNzQ3MworICAgIFByZWZpeDogJ2FkdDc0NzMnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJDLCAweDJELCAweDJFCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKKworQXV0aG9yOiBEYXJyaWNrIEouIFdvbmcKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NzMgY2hpcCBmYW1pbHkuCisKK1RoZSBMTTg1IHVzZXMgdGhlIDItd2lyZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSBTTUJVUyAyLjAKK3NwZWNpZmljYXRpb24uIFVzaW5nIGFuIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlciBpdCBtZWFzdXJlcyB0aHJlZSAoMykKK3RlbXBlcmF0dXJlcyBhbmQgdHdvICgyKSB2b2x0YWdlcy4gSXQgaGFzIHRocmVlICgzKSAxNi1iaXQgY291bnRlcnMgZm9yCittZWFzdXJpbmcgZmFuIHNwZWVkLiBUaGVyZSBhcmUgdGhyZWUgKDMpIFBXTSBvdXRwdXRzIHRoYXQgY2FuIGJlIHVzZWQKK3RvIGNvbnRyb2wgZmFuIHNwZWVkLgorCitBIHNvcGhpc3RpY2F0ZWQgY29udHJvbCBzeXN0ZW0gZm9yIHRoZSBQV00gb3V0cHV0cyBpcyBkZXNpZ25lZCBpbnRvIHRoZQorTE04NSB0aGF0IGFsbG93cyBmYW4gc3BlZWQgdG8gYmUgYWRqdXN0ZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiBhbnkgb2YgdGhlCit0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBFYWNoIFBXTSBvdXRwdXQgaXMgaW5kaXZpZHVhbGx5IGFkanVzdGFibGUgYW5kCitwcm9ncmFtbWFibGUuIE9uY2UgY29uZmlndXJlZCwgdGhlIEFEVDc0NzMgd2lsbCBhZGp1c3QgdGhlIFBXTSBvdXRwdXRzIGluCityZXNwb25zZSB0byB0aGUgbWVhc3VyZWQgdGVtcGVyYXR1cmVzIHdpdGhvdXQgZnVydGhlciBob3N0IGludGVydmVudGlvbi4KK1RoaXMgZmVhdHVyZSBjYW4gYWxzbyBiZSBkaXNhYmxlZCBmb3IgbWFudWFsIGNvbnRyb2wgb2YgdGhlIFBXTSdzLgorCitFYWNoIG9mIHRoZSBtZWFzdXJlZCBpbnB1dHMgKHZvbHRhZ2UsIHRlbXBlcmF0dXJlLCBmYW4gc3BlZWQpIGhhcworY29ycmVzcG9uZGluZyBoaWdoL2xvdyBsaW1pdCB2YWx1ZXMuIFRoZSBBRFQ3NDczIHdpbGwgc2lnbmFsIGFuIEFMQVJNIGlmCithbnkgbWVhc3VyZWQgdmFsdWUgZXhjZWVkcyBlaXRoZXIgbGltaXQuCisKK1RoZSBBRFQ3NDczIHNhbXBsZXMgYWxsIGlucHV0cyBjb250aW51b3VzbHkuIFRoZSBkcml2ZXIgd2lsbCBub3QgcmVhZAordGhlIHJlZ2lzdGVycyBtb3JlIG9mdGVuIHRoYW4gb25jZSBldmVyeSBvdGhlciBzZWNvbmQuIEZ1cnRoZXIsCitjb25maWd1cmF0aW9uIGRhdGEgaXMgb25seSByZWFkIG9uY2UgcGVyIG1pbnV0ZS4KKworU3BlY2lhbCBGZWF0dXJlcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQURUNzQ3MyBoYXZlIGEgMTAtYml0IEFEQyBhbmQgY2FuIHRoZXJlZm9yZSBtZWFzdXJlIHRlbXBlcmF0dXJlcword2l0aCAwLjI1IGRlZ0MgcmVzb2x1dGlvbi4gVGVtcGVyYXR1cmUgcmVhZGluZ3MgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyCitmb3IgdHdvcyBjb21wbGVtZW50IGZvcm1hdCBvciAiT2Zmc2V0IDY0IiBmb3JtYXQsIHdoZXJlaW4gNjMgaXMgc3VidHJhY3RlZAorZnJvbSB0aGUgcmF3IHZhbHVlIHRvIGdldCB0aGUgdGVtcGVyYXR1cmUgdmFsdWUuCisKK1RoZSBBbmFsb2cgRGV2aWNlcyBkYXRhc2hlZXQgaXMgdmVyeSBkZXRhaWxlZCBhbmQgZGVzY3JpYmVzIGEgcHJvY2VkdXJlIGZvcgorZGV0ZXJtaW5pbmcgYW4gb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXV0b21hdGljIFBXTSBjb250cm9sLgorCitIYXJkd2FyZSBDb25maWd1cmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEFEVDc0NzMgY2hpcHMgaGF2ZSBhbiBvcHRpb25hbCBTTUJBTEVSVCBvdXRwdXQgdGhhdCBjYW4gYmUgdXNlZCB0bworc2lnbmFsIHRoZSBjaGlwc2V0IGluIGNhc2UgYSBsaW1pdCBpcyBleGNlZWRlZCBvciB0aGUgdGVtcGVyYXR1cmUgc2Vuc29ycworZmFpbC4gSW5kaXZpZHVhbCBzZW5zb3IgaW50ZXJydXB0cyBjYW4gYmUgbWFza2VkIHNvIHRoZXkgd29uJ3QgdHJpZ2dlcgorU01CQUxFUlQuIFRoZSBTTUJBTEVSVCBvdXRwdXQgaWYgY29uZmlndXJlZCByZXBsYWNlcyB0aGUgUFdNMiBmdW5jdGlvbi4KKworQ29uZmlndXJhdGlvbiBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZXNpZGVzIHN0YW5kYXJkIGludGVyZmFjZXMgZHJpdmVyIGFkZHMgdGhlIGZvbGxvd2luZzoKKworKiBQV00gQ29udHJvbAorCisqIHB3bSNfYXV0b19wb2ludDFfcHdtIGFuZCBwd20jX2F1dG9fcG9pbnQxX3RlbXAgYW5kCisqIHB3bSNfYXV0b19wb2ludDJfcHdtIGFuZCBwd20jX2F1dG9fcG9pbnQyX3RlbXAgLQorCitwb2ludDE6IFNldCB0aGUgcHdtIHNwZWVkIGF0IGEgbG93ZXIgdGVtcGVyYXR1cmUgYm91bmQuCitwb2ludDI6IFNldCB0aGUgcHdtIHNwZWVkIGF0IGEgaGlnaGVyIHRlbXBlcmF0dXJlIGJvdW5kLgorCitUaGUgQURUNzQ3MyB3aWxsIHNjYWxlIHRoZSBwd20gYmV0d2VlbiB0aGUgbG93ZXIgYW5kIGhpZ2hlciBwd20gc3BlZWQgd2hlbgordGhlIHRlbXBlcmF0dXJlIGlzIGJldHdlZW4gdGhlIHR3byB0ZW1wZXJhdHVyZSBib3VuZGFyaWVzLiAgUFdNIHZhbHVlcyByYW5nZQorZnJvbSAwIChvZmYpIHRvIDI1NSAoZnVsbCBzcGVlZCkuCisKK05vdGVzCistLS0tLQorCitUaGUgTlZJRElBIGJpbmFyeSBkcml2ZXIgcHJlc2VudHMgYW4gQURUNzQ3MyBjaGlwIHZpYSBhbiBvbi1jYXJkIGkyYyBidXMuCitVbmZvcnR1bmF0ZWx5LCB0aGV5IGZhaWwgdG8gc2V0IHRoZSBpMmMgYWRhcHRlciBjbGFzcywgc28gdGhpcyBkcml2ZXIgbWF5CitmYWlsIHRvIGZpbmQgdGhlIGNoaXAgdW50aWwgdGhlIG52aWRpYSBkcml2ZXIgaXMgcGF0Y2hlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCmluZGV4IDE3MGJmODYuLmRiYmU2YzcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAKQEAgLTQsOSArNCwxMCBAQAogU3VwcG9ydGVkIGNoaXBzOgogICAqIEFsbCBJbnRlbCBDb3JlIGZhbWlseQogICAgIFByZWZpeDogJ2NvcmV0ZW1wJwotICAgIENQVUlEOiBmYW1pbHkgMHg2LCBtb2RlbHMgMHhlLCAweGYsIDB4MTYKKyAgICBDUFVJRDogZmFtaWx5IDB4NiwgbW9kZWxzIDB4ZSwgMHhmLCAweDE2LCAweDE3CiAgICAgRGF0YXNoZWV0OiBJbnRlbCA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKICAgICAgICAgICAgICAgIFZvbHVtZSAzQTogU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlCisgICAgICAgICAgICAgICBodHRwOi8vc29mdHdhcmVjb21tdW5pdHkuaW50ZWwuY29tL1dpa2kvTW9iaWxpdHkvNzIwLmh0bQogCiBBdXRob3I6IFJ1ZG9sZiBNYXJlawogCkBAIC0yNSw3ICsyNiw4IEBACiB0aGUgT3V0LU9mLVNwZWMgYml0LiBGb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgZXhwb3J0ZWQgc3lzZnMgZmlsZXM6CiAKIHRlbXAxX2lucHV0CSAtIENvcmUgdGVtcGVyYXR1cmUgKGluIG1pbGxpZGVncmVlcyBDZWxzaXVzKS4KLXRlbXAxX2NyaXQJIC0gTWF4aW11bSBqdW5jdGlvbiB0ZW1wZXJhdHVyZSAgKGluIG1pbGxpZGVncmVlcyBDZWxzaXVzKS4KK3RlbXAxX21heAkgLSBBbGwgY29vbGluZyBkZXZpY2VzIHNob3VsZCBiZSB0dXJuZWQgb24gKG9uIENvcmUyKS4KK3RlbXAxX2NyaXQJIC0gTWF4aW11bSBqdW5jdGlvbiB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMpLgogdGVtcDFfY3JpdF9hbGFybSAtIFNldCB3aGVuIE91dC1vZi1zcGVjIGJpdCBpcyBzZXQsIG5ldmVyIGNsZWFycy4KIAkJICAgQ29ycmVjdCBDUFUgb3BlcmF0aW9uIGlzIG5vIGxvbmdlciBndWFyYW50ZWVkLgogdGVtcDFfbGFiZWwJIC0gQ29udGFpbnMgc3RyaW5nICJDb3JlIFgiLCB3aGVyZSBYIGlzIHByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCmluZGV4IDNiZDk1ODMuLmMzMWUwMjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKQEAgLTEyLDggKzEyLDkgQEAKICAgKiBJbnRlbCA4MjgwMUcgKElDSDcpCiAgICogSW50ZWwgNjMxeEVTQi82MzJ4RVNCIChFU0IyKQogICAqIEludGVsIDgyODAxSCAoSUNIOCkKLSAgKiBJbnRlbCBJQ0g5CisgICogSW50ZWwgODI4MDFJIChJQ0g5KQogICAqIEludGVsIFRvbGFwYWkKKyAgKiBJbnRlbCBJQ0gxMAogICAgRGF0YXNoZWV0czogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJbnRlbCB3ZWJzaXRlCiAKIEF1dGhvcnM6IApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMzg2L0lPLUFQSUMudHh0IGIvRG9jdW1lbnRhdGlvbi9pMzg2L0lPLUFQSUMudHh0CmluZGV4IDQzNWU2OWUuLjMwYjRjNzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2kzODYvSU8tQVBJQy50eHQKQEAgLTEsMTIgKzEsMTQgQEAKIE1vc3QgKGFsbCkgSW50ZWwtTVAgY29tcGxpYW50IFNNUCBib2FyZHMgaGF2ZSB0aGUgc28tY2FsbGVkICdJTy1BUElDJywKLXdoaWNoIGlzIGFuIGVuaGFuY2VkIGludGVycnVwdCBjb250cm9sbGVyLCBpdCBlbmFibGVzIHVzIHRvIHJvdXRlCi1oYXJkd2FyZSBpbnRlcnJ1cHRzIHRvIG11bHRpcGxlIENQVXMsIG9yIHRvIENQVSBncm91cHMuCit3aGljaCBpcyBhbiBlbmhhbmNlZCBpbnRlcnJ1cHQgY29udHJvbGxlci4gSXQgZW5hYmxlcyB1cyB0byByb3V0ZQoraGFyZHdhcmUgaW50ZXJydXB0cyB0byBtdWx0aXBsZSBDUFVzLCBvciB0byBDUFUgZ3JvdXBzLiBXaXRob3V0IGFuCitJTy1BUElDLCBpbnRlcnJ1cHRzIGZyb20gaGFyZHdhcmUgd2lsbCBiZSBkZWxpdmVyZWQgb25seSB0byB0aGUKK0NQVSB3aGljaCBib290cyB0aGUgb3BlcmF0aW5nIHN5c3RlbSAodXN1YWxseSBDUFUjMCkuCiAKIExpbnV4IHN1cHBvcnRzIGFsbCB2YXJpYW50cyBvZiBjb21wbGlhbnQgU01QIGJvYXJkcywgaW5jbHVkaW5nIG9uZXMgd2l0aAotbXVsdGlwbGUgSU8tQVBJQ3MuIChtdWx0aXBsZSBJTy1BUElDcyBhcmUgdXNlZCBpbiBoaWdoLWVuZCBzZXJ2ZXJzIHRvCi1kaXN0cmlidXRlIElSUSBsb2FkIGZ1cnRoZXIpLgorbXVsdGlwbGUgSU8tQVBJQ3MuIE11bHRpcGxlIElPLUFQSUNzIGFyZSB1c2VkIGluIGhpZ2gtZW5kIHNlcnZlcnMgdG8KK2Rpc3RyaWJ1dGUgSVJRIGxvYWQgZnVydGhlci4KIAotVGhlcmUgYXJlIChhIGZldykga25vd24gYnJlYWthZ2VzIGluIGNlcnRhaW4gb2xkZXIgYm9hcmRzLCB3aGljaCBidWdzIGFyZQorVGhlcmUgYXJlIChhIGZldykga25vd24gYnJlYWthZ2VzIGluIGNlcnRhaW4gb2xkZXIgYm9hcmRzLCBzdWNoIGJ1Z3MgYXJlCiB1c3VhbGx5IHdvcmtlZCBhcm91bmQgYnkgdGhlIGtlcm5lbC4gSWYgeW91ciBNUC1jb21wbGlhbnQgU01QIGJvYXJkIGRvZXMKIG5vdCBib290IExpbnV4LCB0aGVuIGNvbnN1bHQgdGhlIGxpbnV4LXNtcCBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgZmlyc3QuCiAKQEAgLTI4LDE4ICszMCwxOCBAQAogICBoZWxsOn4+CiAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXNvbWUgaW50ZXJydXB0cyBhcmUgc3RpbGwgbGlzdGVkIGFzICdYVCBQSUMnLCBidXQgdGhpcyBpcyBub3QgYSBwcm9ibGVtLAorU29tZSBpbnRlcnJ1cHRzIGFyZSBzdGlsbCBsaXN0ZWQgYXMgJ1hUIFBJQycsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW07CiBub25lIG9mIHRob3NlIElSUSBzb3VyY2VzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLgogCiAKLWluIHRoZSB1bmxpa2VseSBjYXNlIHRoYXQgeW91ciBib2FyZCBkb2VzIG5vdCBjcmVhdGUgYSB3b3JraW5nIG1wLXRhYmxlLAorSW4gdGhlIHVubGlrZWx5IGNhc2UgdGhhdCB5b3VyIGJvYXJkIGRvZXMgbm90IGNyZWF0ZSBhIHdvcmtpbmcgbXAtdGFibGUsCiB5b3UgY2FuIHVzZSB0aGUgcGlycT0gYm9vdCBwYXJhbWV0ZXIgdG8gJ2hhbmQtY29uc3RydWN0JyBJUlEgZW50cmllcy4gVGhpcwotaXMgbm9udHJpdmlhbCB0aG91Z2ggYW5kIGNhbm5vdCBiZSBhdXRvbWF0ZWQuIE9uZSBzYW1wbGUgL2V0Yy9saWxvLmNvbmYKK2lzIG5vbi10cml2aWFsIHRob3VnaCBhbmQgY2Fubm90IGJlIGF1dG9tYXRlZC4gT25lIHNhbXBsZSAvZXRjL2xpbG8uY29uZgogZW50cnk6CiAKIAlhcHBlbmQ9InBpcnE9MTUsMTEsMTAiCiAKLXRoZSBhY3R1YWwgbnVtYmVycyBkZXBlbmQgb24geW91ciBzeXN0ZW0sIG9uIHlvdXIgUENJIGNhcmRzIGFuZCBvbiB0aGVpcgorVGhlIGFjdHVhbCBudW1iZXJzIGRlcGVuZCBvbiB5b3VyIHN5c3RlbSwgb24geW91ciBQQ0kgY2FyZHMgYW5kIG9uIHRoZWlyCiBQQ0kgc2xvdCBwb3NpdGlvbi4gVXN1YWxseSBQQ0kgc2xvdHMgYXJlICdkYWlzeSBjaGFpbmVkJyBiZWZvcmUgdGhleSBhcmUKIGNvbm5lY3RlZCB0byB0aGUgUENJIGNoaXBzZXQgSVJRIHJvdXRpbmcgZmFjaWxpdHkgKHRoZSBpbmNvbWluZyBQSVJRMS00CiBsaW5lcyk6CkBAIC01NCw3ICs1Niw3IEBACiAgICAgIFBJUlExIC0tLS18IHwtICBgLS0tLXwgfC0gIGAtLS0tfCB8LSAgYC0tLS18IHwtLS0tLS0tLXwgfAogICAgICAgICAgICAgICAgYC0nICAgICAgICBgLScgICAgICAgIGAtJyAgICAgICAgYC0nICAgICAgICBgLScKIAotZXZlcnkgUENJIGNhcmQgZW1pdHMgYSBQQ0kgSVJRLCB3aGljaCBjYW4gYmUgSU5UQSxJTlRCLElOVEMsSU5URDoKK0V2ZXJ5IFBDSSBjYXJkIGVtaXRzIGEgUENJIElSUSwgd2hpY2ggY2FuIGJlIElOVEEsIElOVEIsIElOVEMgb3IgSU5URDoKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwtLgogICAgICAgICAgICAgICAgICAgICAgICAgIElOVEQtLXwgfApAQCAtNjgsNyArNzAsNyBAQAogCiBUaGVzZSBJTlRBLUQgUENJIElSUXMgYXJlIGFsd2F5cyAnbG9jYWwgdG8gdGhlIGNhcmQnLCB0aGVpciByZWFsIG1lYW5pbmcKIGRlcGVuZHMgb24gd2hpY2ggc2xvdCB0aGV5IGFyZSBpbi4gSWYgeW91IGxvb2sgYXQgdGhlIGRhaXN5IGNoYWluaW5nIGRpYWdyYW0sCi1hIGNhcmQgaW4gc2xvdDQsIGlzc3VpbmcgSU5UQSBJUlEsIGl0IHdpbGwgZW5kIHVwIGFzIGEgc2lnbmFsIG9uIFBJUlEyIG9mCithIGNhcmQgaW4gc2xvdDQsIGlzc3VpbmcgSU5UQSBJUlEsIGl0IHdpbGwgZW5kIHVwIGFzIGEgc2lnbmFsIG9uIFBJUlE0IG9mCiB0aGUgUENJIGNoaXBzZXQuIE1vc3QgY2FyZHMgaXNzdWUgSU5UQSwgdGhpcyBjcmVhdGVzIG9wdGltYWwgZGlzdHJpYnV0aW9uCiBiZXR3ZWVuIHRoZSBQSVJRIGxpbmVzLiAoZGlzdHJpYnV0aW5nIElSUSBzb3VyY2VzIHByb3Blcmx5IGlzIG5vdCBhCiBuZWNlc3NpdHksIFBDSSBJUlFzIGNhbiBiZSBzaGFyZWQgYXQgd2lsbCwgYnV0IGl0J3MgYSBnb29kIGZvciBwZXJmb3JtYW5jZQpAQCAtOTUsMjEgKzk3LDIxIEBACiBbdmFsdWUgJzAnIGlzIGEgZ2VuZXJpYyAncGxhY2Vob2xkZXInLCByZXNlcnZlZCBmb3IgZW1wdHkgKG9yIG5vbi1JUlEgZW1pdHRpbmcpCiBzbG90cy5dCiAKLWdlbmVyYWxseSwgaXQncyBhbHdheXMgcG9zc2libGUgdG8gZmluZCBvdXQgdGhlIGNvcnJlY3QgcGlycT0gc2V0dGluZ3MsIGp1c3QKK0dlbmVyYWxseSwgaXQncyBhbHdheXMgcG9zc2libGUgdG8gZmluZCBvdXQgdGhlIGNvcnJlY3QgcGlycT0gc2V0dGluZ3MsIGp1c3QKIHBlcm11dGUgYWxsIElSUSBudW1iZXJzIHByb3Blcmx5IC4uLiBpdCB3aWxsIHRha2Ugc29tZSB0aW1lIHRob3VnaC4gQW4KICdpbmNvcnJlY3QnIHBpcnEgbGluZSB3aWxsIGNhdXNlIHRoZSBib290aW5nIHByb2Nlc3MgdG8gaGFuZywgb3IgYSBkZXZpY2UKLXdvbid0IGZ1bmN0aW9uIHByb3Blcmx5IChpZiBpdCdzIGluc2VydGVkIGFzIGVnLiBhIG1vZHVsZSkuCit3b24ndCBmdW5jdGlvbiBwcm9wZXJseSAoZS5nLiBpZiBpdCdzIGluc2VydGVkIGFzIGEgbW9kdWxlKS4KIAotSWYgeW91IGhhdmUgMiBQQ0kgYnVzZXMsIHRoZW4geW91IGNhbiB1c2UgdXAgdG8gOCBwaXJxIHZhbHVlcy4gQWx0aG91Z2ggc3VjaAorSWYgeW91IGhhdmUgMiBQQ0kgYnVzZXMsIHRoZW4geW91IGNhbiB1c2UgdXAgdG8gOCBwaXJxIHZhbHVlcywgYWx0aG91Z2ggc3VjaAogYm9hcmRzIHRlbmQgdG8gaGF2ZSBhIGdvb2QgY29uZmlndXJhdGlvbi4KIAogQmUgcHJlcGFyZWQgdGhhdCBpdCBtaWdodCBoYXBwZW4gdGhhdCB5b3UgbmVlZCBzb21lIHN0cmFuZ2UgcGlycSBsaW5lOgogCiAJYXBwZW5kPSJwaXJxPTAsMCwwLDAsMCwwLDksMTEiCiAKLXVzZSBzbWFydCB0cnktYW5kLWVyciB0ZWNobmlxdWVzIHRvIGZpbmQgb3V0IHRoZSBjb3JyZWN0IHBpcnEgbGluZSAuLi4KK1VzZSBzbWFydCB0cmlhbC1hbmQtZXJyb3IgdGVjaG5pcXVlcyB0byBmaW5kIG91dCB0aGUgY29ycmVjdCBwaXJxIGxpbmUgLi4uCiAKLWdvb2QgbHVjayBhbmQgbWFpbCB0byBsaW51eC1zbXBAdmdlci5rZXJuZWwub3JnIG9yCitHb29kIGx1Y2sgYW5kIG1haWwgdG8gbGludXgtc21wQHZnZXIua2VybmVsLm9yZyBvcgogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyBpZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgdGhhdCBhcmUgbm90IGNvdmVyZWQKIGJ5IHRoaXMgZG9jdW1lbnQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dCBiL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dAppbmRleCBmYzQ5Yjc5Li4yZWIxNjEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0CkBAIC0xNzAsNiArMTcwLDggQEAKIDAyMzgvNAkyLjA2KwljbWRsaW5lX3NpemUJTWF4aW11bSBzaXplIG9mIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCiAwMjNDLzQJMi4wNysJaGFyZHdhcmVfc3ViYXJjaCBIYXJkd2FyZSBzdWJhcmNoaXRlY3R1cmUKIDAyNDAvOAkyLjA3KwloYXJkd2FyZV9zdWJhcmNoX2RhdGEgU3ViYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRhdGEKKzAyNDgvNAkyLjA4KwlwYXlsb2FkX29mZnNldAlPZmZzZXQgb2Yga2VybmVsIHBheWxvYWQKKzAyNEMvNAkyLjA4KwlwYXlsb2FkX2xlbmd0aAlMZW5ndGggb2Yga2VybmVsIHBheWxvYWQKIAogKDEpIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgdGhlIHNldHVwX3NlY3RzIGZpZWxkIGNvbnRhaW5zIDAsIHRoZQogICAgIHJlYWwgdmFsdWUgaXMgNC4KQEAgLTUxMiw2ICs1MTQsMzIgQEAKIAogICBBIHBvaW50ZXIgdG8gZGF0YSB0aGF0IGlzIHNwZWNpZmljIHRvIGhhcmR3YXJlIHN1YmFyY2gKIAorRmllbGQgbmFtZToJcGF5bG9hZF9vZmZzZXQKK1R5cGU6CQlyZWFkCitPZmZzZXQvc2l6ZToJMHgyNDgvNAorUHJvdG9jb2w6CTIuMDgrCisKKyAgSWYgbm9uLXplcm8gdGhlbiB0aGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZQorICByZWFsLW1vZGUgY29kZSB0byB0aGUgcGF5bG9hZC4KKworICBUaGUgcGF5bG9hZCBtYXkgYmUgY29tcHJlc3NlZC4gVGhlIGZvcm1hdCBvZiBib3RoIHRoZSBjb21wcmVzc2VkIGFuZAorICB1bmNvbXByZXNzZWQgZGF0YSBzaG91bGQgYmUgZGV0ZXJtaW5lZCB1c2luZyB0aGUgc3RhbmRhcmQgbWFnaWMKKyAgbnVtYmVycy4gQ3VycmVudGx5IG9ubHkgZ3ppcCBjb21wcmVzc2VkIEVMRiBpcyB1c2VkLgorICAKK0ZpZWxkIG5hbWU6CXBheWxvYWRfbGVuZ3RoCitUeXBlOgkJcmVhZAorT2Zmc2V0L3NpemU6CTB4MjRjLzQKK1Byb3RvY29sOgkyLjA4KworCisgIFRoZSBsZW5ndGggb2YgdGhlIHBheWxvYWQuCisKKyoqKiogVEhFIElNQUdFIENIRUNLU1VNCisKK0Zyb20gYm9vdCBwcm90b2NvbCB2ZXJzaW9uIDIuMDggb253YXJkcyB0aGUgQ1JDLTMyIGlzIGNhbGN1bGF0ZWQgb3ZlcgordGhlIGVudGlyZSBmaWxlIHVzaW5nIHRoZSBjaGFyYWN0ZXJpc3RpYyBwb2x5bm9taWFsIDB4MDRDMTFEQjcgYW5kIGFuCitpbml0aWFsIHJlbWFpbmRlciBvZiAweGZmZmZmZmZmLiAgVGhlIGNoZWNrc3VtIGlzIGFwcGVuZGVkIHRvIHRoZQorZmlsZTsgdGhlcmVmb3JlIHRoZSBDUkMgb2YgdGhlIGZpbGUgdXAgdG8gdGhlIGxpbWl0IHNwZWNpZmllZCBpbiB0aGUKK3N5c3NpemUgZmllbGQgb2YgdGhlIGhlYWRlciBpcyBhbHdheXMgMC4KIAogKioqKiBUSEUgS0VSTkVMIENPTU1BTkQgTElORQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2lkZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZTJlM2IuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9pZGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLQotCUluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgRW5oYW5jZWQgSURFIGRyaXZlIGluIExpbnV4IDIuNgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgCi0gICBUaGUgaGRwYXJtIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIElERSBmZWF0dXJlcyBvbiBhCi0gICBydW5uaW5nIHN5c3RlbS4gSXQgaXMgcGFja2FnZWQgc2VwYXJhdGVseS4gIFBsZWFzZSBMb29rIGZvciBpdCBvbiBwb3B1bGFyCi0gICBsaW51eCBGVFAgc2l0ZXMuCi0gICAKLQotCi0qKiogIElNUE9SVEFOVCBOT1RJQ0VTOiAgQlVHR1kgSURFIENISVBTRVRTIENBTiBDT1JSVVBUIERBVEEhIQotKioqICA9PT09PT09PT09PT09PT09PQotKioqICBQQ0kgdmVyc2lvbnMgb2YgdGhlIENNRDY0MCBhbmQgUloxMDAwIGludGVyZmFjZXMgYXJlIG5vdyBkZXRlY3RlZAotKioqICBhdXRvbWF0aWNhbGx5IGF0IHN0YXJ0dXAgd2hlbiBQQ0kgQklPUyBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQuCi0qKioKLSoqKiAgTGludXggZGlzYWJsZXMgdGhlICJwcmVmZXRjaCIgKCJyZWFkYWhlYWQiKSBtb2RlIG9mIHRoZSBSWjEwMDAKLSoqKiAgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gcG9zc2libGUgZHVlIHRvIGhhcmR3YXJlIGRlc2lnbiBmbGF3cy4KLSoqKgotKioqICBGb3IgdGhlIENNRDY0MCwgbGludXggZGlzYWJsZXMgIklSUSB1bm1hc2tpbmciIChoZHBhcm0gLXUxKSBvbiBhbnkKLSoqKiAgZHJpdmUgZm9yIHdoaWNoIHRoZSAicHJlZmV0Y2giIG1vZGUgb2YgdGhlIENNRDY0MCBpcyB0dXJuZWQgb24uCi0qKiogIElmICJwcmVmZXRjaCIgaXMgZGlzYWJsZWQgKGhkcGFybSAtcDgpLCB0aGVuICJJUlEgdW5tYXNraW5nIiBjYW4gYmUKLSoqKiAgdXNlZCBhZ2Fpbi4KLSoqKgotKioqICBGb3IgdGhlIENNRDY0MCwgbGludXggZGlzYWJsZXMgIjMyYml0IEkvTyIgKGhkcGFybSAtYzEpIG9uIGFueSBkcml2ZQotKioqICBmb3Igd2hpY2ggdGhlICJwcmVmZXRjaCIgbW9kZSBvZiB0aGUgQ01ENjQwIGlzIHR1cm5lZCBvZmYuCi0qKiogIElmICJwcmVmZXRjaCIgaXMgZW5hYmxlZCAoaGRwYXJtIC1wOSksIHRoZW4gIjMyYml0IEkvTyIgY2FuIGJlCi0qKiogIHVzZWQgYWdhaW4uCi0qKioKLSoqKiAgVGhlIENNRDY0MCBpcyBhbHNvIHVzZWQgb24gc29tZSBWZXNhIExvY2FsIEJ1cyAoVkxCKSBjYXJkcywgYW5kIGlzICpOT1QqCi0qKiogIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYnkgTGludXguICBGb3Igc2FmZSwgcmVsaWFibGUgb3BlcmF0aW9uIHdpdGggc3VjaAotKioqICBpbnRlcmZhY2VzLCBvbmUgKk1VU1QqIHVzZSB0aGUgImNtZDY0MC5wcm9iZV92bGIiIGtlcm5lbCBvcHRpb24uCi0qKioKLSoqKiAgVXNlIG9mIHRoZSAic2VyaWFsaXplIiBvcHRpb24gaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNvbW1vbiBwaXRmYWxsczoKLQotLSA0MC1jb25kdWN0b3IgSURFIGNhYmxlcyBhcmUgY2FwYWJsZSBvZiB0cmFuc2ZlcnJpbmcgZGF0YSBpbiBETUEgbW9kZXMgdXAgdG8KLSAgdWRtYTIsIGJ1dCBubyBmYXN0ZXIuCi0KLS0gSWYgcG9zc2libGUgZGV2aWNlcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8gc2VwYXJhdGUgY2hhbm5lbHMgaWYgdGhleSBhcmUKLSAgYXZhaWxhYmxlLiBUeXBpY2FsbHkgdGhlIGRpc2sgb24gdGhlIGZpcnN0IGFuZCBDRC1ST00gb24gdGhlIHNlY29uZC4KLQotLSBJZiB5b3UgbWl4IGRldmljZXMgb24gdGhlIHNhbWUgY2FibGUsIHBsZWFzZSBjb25zaWRlciB1c2luZyBzaW1pbGFyIGRldmljZXMKLSAgaW4gcmVzcGVjdCBvZiB0aGUgZGF0YSB0cmFuc2ZlciBtb2RlIHRoZXkgc3VwcG9ydC4KLQotLSBFdmVuIGJldHRlciB0cnkgdG8gc3RpY2sgdG8gdGhlIHNhbWUgdmVuZG9yIGFuZCBkZXZpY2UgdHlwZSBvbiB0aGUgc2FtZQotICBjYWJsZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhpcyBpcyB0aGUgbXVsdGlwbGUgSURFIGludGVyZmFjZSBkcml2ZXIsIGFzIGV2b2x2ZWQgZnJvbSBoZC5jLiAgCi0KLUl0IHN1cHBvcnRzIHVwIHRvIDkgSURFIGludGVyZmFjZXMgcGVyIGRlZmF1bHQsIG9uIG9uZSBvciBtb3JlIElSUXMgKHVzdWFsbHkKLTE0ICYgMTUpLiAgVGhlcmUgY2FuIGJlIHVwIHRvIHR3byBkcml2ZXMgcGVyIGludGVyZmFjZSwgYXMgcGVyIHRoZSBBVEEtNiBzcGVjLgotCi1QcmltYXJ5OiAgICBpZGUwLCBwb3J0IDB4MWYwOyBtYWpvcj0zOyAgaGRhIGlzIG1pbm9yPTA7IGhkYiBpcyBtaW5vcj02NAotU2Vjb25kYXJ5OiAgaWRlMSwgcG9ydCAweDE3MDsgbWFqb3I9MjI7IGhkYyBpcyBtaW5vcj0wOyBoZGQgaXMgbWlub3I9NjQKLVRlcnRpYXJ5OiAgIGlkZTIsIHBvcnQgMHgxZTg7IG1ham9yPTMzOyBoZGUgaXMgbWlub3I9MDsgaGRmIGlzIG1pbm9yPTY0Ci1RdWF0ZXJuYXJ5OiBpZGUzLCBwb3J0IDB4MTY4OyBtYWpvcj0zNDsgaGRnIGlzIG1pbm9yPTA7IGhkaCBpcyBtaW5vcj02NAotZmlmdGguLiAgICAgaWRlNCwgdXN1YWxseSBQQ0ksIHByb2JlZAotc2l4dGguLiAgICAgaWRlNSwgdXN1YWxseSBQQ0ksIHByb2JlZAotCi1UbyBhY2Nlc3MgZGV2aWNlcyBvbiBpbnRlcmZhY2VzID4gaWRlMCwgZGV2aWNlIGVudHJpZXMgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0Ci1kZXZpY2UgZmlsZXMgZm9yIHRoZW0gYXJlIHByZXNlbnQgaW4gL2Rldi4gIElmIG5vdCwgcGxlYXNlIGNyZWF0ZSBzdWNoCi1lbnRyaWVzLCBieSB1c2luZyAvZGV2L01BS0VERVYuCi0KLVRoaXMgZHJpdmVyIGF1dG9tYXRpY2FsbHkgcHJvYmVzIGZvciBtb3N0IElERSBpbnRlcmZhY2VzIChpbmNsdWRpbmcgYWxsIFBDSQotb25lcyksIGZvciB0aGUgZHJpdmVzL2dlb21ldHJpZXMgYXR0YWNoZWQgdG8gdGhvc2UgaW50ZXJmYWNlcywgYW5kIGZvciB0aGUgSVJRCi1saW5lcyBiZWluZyB1c2VkIGJ5IHRoZSBpbnRlcmZhY2VzIChub3JtYWxseSAxNCwgMTUgZm9yIGlkZTAvaWRlMSkuCi0KLUZvciBzcGVjaWFsIGNhc2VzLCBpbnRlcmZhY2VzIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcga2VybmVsICJjb21tYW5kIGxpbmUiCi1vcHRpb25zLiAgRm9yIGV4YW1wbGUsCi0KLQlpZGUzPTB4MTY4LDB4MzZlLDEwCS8qIGlvcG9ydHMgMHgxNjgtMHgxNmYsMHgzNmUsIGlycSAxMCAqLwotCi1Ob3JtYWxseSB0aGUgaXJxIG51bWJlciBuZWVkIG5vdCBiZSBzcGVjaWZpZWQsIGFzIGlkZS5jIHdpbGwgcHJvYmUgZm9yIGl0OgotCi0JaWRlMz0weDE2OCwweDM2ZQkvKiBpb3BvcnRzIDB4MTY4LTB4MTZmLDB4MzZlICovCi0KLVRoZSBzdGFuZGFyZCBwb3J0LCBhbmQgaXJxIHZhbHVlcyBhcmUgdGhlc2U6Ci0KLQlpZGUwPTB4MWYwLDB4M2Y2LDE0Ci0JaWRlMT0weDE3MCwweDM3NiwxNQotCWlkZTI9MHgxZTgsMHgzZWUsMTEKLQlpZGUzPTB4MTY4LDB4MzZlLDEwCi0KLU5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIHJlc2VydmVzIDggY29udGlndW91cyBpb3BvcnRzLCB3aGVyZWFzIHRoZQotc2Vjb25kIHZhbHVlIGRlbm90ZXMgYSBzaW5nbGUgaW9wb3J0LiBJZiBpbiBkb3VidCwgZG8gYSAnY2F0IC9wcm9jL2lvcG9ydHMnLgotCi1JbiBhbGwgcHJvYmFiaWxpdHkgdGhlIGRldmljZSB1c2VzIHRoZXNlIHBvcnRzIGFuZCBJUlFzIGlmIGl0IGlzIGF0dGFjaGVkCi10byB0aGUgYXBwcm9wcmlhdGUgaWRlIGNoYW5uZWwuICBQYXNzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZSBjb3JyZWN0IGlkZQotY2hhbm5lbCB0byB0aGUga2VybmVsLCBhcyBleHBsYWluZWQgYWJvdmUuCi0KLUFueSBudW1iZXIgb2YgaW50ZXJmYWNlcyBtYXkgc2hhcmUgYSBzaW5nbGUgSVJRIGlmIG5lY2Vzc2FyeSwgYXQgYSBzbGlnaHQKLXBlcmZvcm1hbmNlIHBlbmFsdHksIHdoZXRoZXIgb24gc2VwYXJhdGUgY2FyZHMgb3IgYSBzaW5nbGUgVkxCIGNhcmQuCi1UaGUgSURFIGRyaXZlciBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIGhhbmRsZXMgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgbWF5Ci1vciBtYXkgbm90IGJlIGhhcm1mdWwgdG8geW91ciBoYXJkd2FyZS4uIHR3byBvciBtb3JlIGNhcmRzIGRyaXZpbmcgdGhlIHNhbWUgSVJRCi1jYW4gcG90ZW50aWFsbHkgYnVybiBlYWNoIG90aGVyJ3MgYnVzIGRyaXZlciwgdGhvdWdoIGluIHByYWN0aWNlIHRoaXMKLXNlbGRvbSBvY2N1cnMuICBCZSBjYXJlZnVsLCBhbmQgaWYgaW4gZG91YnQsIGRvbid0IGRvIGl0IQotCi1Ecml2ZXMgYXJlIG5vcm1hbGx5IGZvdW5kIGJ5IGF1dG8tcHJvYmluZyBhbmQvb3IgZXhhbWluaW5nIHRoZSBDTU9TL0JJT1MgZGF0YS4KLUZvciByZWFsbHkgd2VpcmQgc2l0dWF0aW9ucywgdGhlIGFwcGFyZW50IChmZGlzaykgZ2VvbWV0cnkgY2FuIGFsc28gYmUgc3BlY2lmaWVkCi1vbiB0aGUga2VybmVsICJjb21tYW5kIGxpbmUiIHVzaW5nIExJTE8uICBUaGUgZm9ybWF0IG9mIHN1Y2ggbGluZXMgaXM6Ci0KLQloZHg9Y3lscyxoZWFkcyxzZWN0cyx3cGNvbSxpcnEKLW9yCWhkeD1jZHJvbQotCi13aGVyZSBoZHggY2FuIGJlIGFueSBvZiBoZGEgdGhyb3VnaCBoZGgsIFRocmVlIHZhbHVlcyBhcmUgcmVxdWlyZWQKLShjeWxzLGhlYWRzLHNlY3RzKS4gIEZvciBleGFtcGxlOgotCi0JaGRjPTEwNTAsMzIsNjQgIGhkZD1jZHJvbQotCi1laXRoZXIge2hkYSxoZGJ9IG9yIHtoZGMsaGRkfS4gIFRoZSByZXN1bHRzIG9mIHN1Y2Nlc3NmdWwgYXV0by1wcm9iaW5nIG1heQotb3ZlcnJpZGUgdGhlIHBoeXNpY2FsIGdlb21ldHJ5L2lycSBzcGVjaWZpZWQsIHRob3VnaCB0aGUgIm9yaWdpbmFsIiBnZW9tZXRyeQotbWF5IGJlIHJldGFpbmVkIGFzIHRoZSAibG9naWNhbCIgZ2VvbWV0cnkgZm9yIHBhcnRpdGlvbmluZyBwdXJwb3NlcyAoZmRpc2spLgotCi1JZiB0aGUgYXV0by1wcm9iaW5nIGR1cmluZyBib290IHRpbWUgY29uZnVzZXMgYSBkcml2ZSAoaWUuIHRoZSBkcml2ZSB3b3Jrcwotd2l0aCBoZC5jIGJ1dCBub3Qgd2l0aCBpZGUuYyksIHRoZW4gYW4gY29tbWFuZCBsaW5lIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkCi1mb3IgZWFjaCBkcml2ZSBmb3Igd2hpY2ggeW91J2QgbGlrZSB0aGUgZHJpdmUgdG8gc2tpcCB0aGUgaGFyZHdhcmUKLXByb2JlL2lkZW50aWZpY2F0aW9uIHNlcXVlbmNlLiAgRm9yIGV4YW1wbGU6Ci0KLQloZGI9bm9wcm9iZQotb3IKLQloZGM9NzY4LDE2LDMyCi0JaGRjPW5vcHJvYmUKLQotTm90ZSB0aGF0IHdoZW4gb25seSBvbmUgSURFIGRldmljZSBpcyBhdHRhY2hlZCB0byBhbiBpbnRlcmZhY2UsIGl0IHNob3VsZCBiZQotanVtcGVyZWQgYXMgInNpbmdsZSIgb3IgIm1hc3RlciIsICpub3QqICJzbGF2ZSIuICBNYW55IGZvbGtzIGhhdmUgaGFkCi0idHJvdWJsZSIgd2l0aCBjZHJvbXMgYmVjYXVzZSBvZiB0aGlzIHJlcXVpcmVtZW50LCBzbyB0aGUgZHJpdmVyIG5vdyBwcm9iZXMKLWZvciBib3RoIHVuaXRzLCB0aG91Z2ggc3VjY2VzcyBpcyBtb3JlIGxpa2VseSB3aGVuIHRoZSBkcml2ZSBpcyBqdW1wZXJlZAotY29ycmVjdGx5LgotCi1Db3VydGVzeSBvZiBTY290dCBTbnlkZXIgYW5kIG90aGVycywgdGhlIGRyaXZlciBzdXBwb3J0cyBBVEFQSSBjZHJvbSBkcml2ZXMKLXN1Y2ggYXMgdGhlIE5FQy0yNjAgYW5kIHRoZSBuZXcgTUlUU1VNSSB0cmlwbGUvcXVhZCBzcGVlZCBkcml2ZXMuCi1TdWNoIGRyaXZlcyB3aWxsIGJlIGlkZW50aWZpZWQgYXQgYm9vdCB0aW1lLCBqdXN0IGxpa2UgYSBoYXJkIGRpc2suCi0KLUlmIGZvciBzb21lIHJlYXNvbiB5b3VyIGNkcm9tIGRyaXZlIGlzICpub3QqIGZvdW5kIGF0IGJvb3QgdGltZSwgeW91IGNhbiBmb3JjZQotdGhlIHByb2JlIHRvIGxvb2sgaGFyZGVyIGJ5IHN1cHBseWluZyBhIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyCi12aWEgTElMTywgc3VjaCBhczoKLQotCWhkYz1jZHJvbQkvKiBoZGMgPSAibWFzdGVyIiBvbiBzZWNvbmQgaW50ZXJmYWNlICovCi1vcgotCWhkZD1jZHJvbQkvKiBoZGQgPSAic2xhdmUiIG9uIHNlY29uZCBpbnRlcmZhY2UgKi8KLQotRm9yIGV4YW1wbGUsIGEgR1cyMDAwIHN5c3RlbSBtaWdodCBoYXZlIGEgaGFyZCBkcml2ZSBvbiB0aGUgcHJpbWFyeQotaW50ZXJmYWNlICgvZGV2L2hkYSkgYW5kIGFuIElERSBjZHJvbSBkcml2ZSBvbiB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZQotKC9kZXYvaGRjKS4gIFRvIG1vdW50IGEgQ0QgaW4gdGhlIGNkcm9tIGRyaXZlLCBvbmUgd291bGQgdXNlIHNvbWV0aGluZyBsaWtlOgotCi0JbG4gLXNmIC9kZXYvaGRjIC9kZXYvY2Ryb20KLQlta2RpciAvbW50L2Nkcm9tCi0JbW91bnQgL2Rldi9jZHJvbSAvbW50L2Nkcm9tIC10IGlzbzk2NjAgLW8gcm8KLQotSWYsIGFmdGVyIGRvaW5nIGFsbCBvZiB0aGUgYWJvdmUsIG1vdW50IGRvZXNuJ3Qgd29yayBhbmQgeW91IHNlZQotZXJyb3JzIGZyb20gdGhlIGRyaXZlciAod2l0aCBkbWVzZykgY29tcGxhaW5pbmcgYWJvdXQgYHN0YXR1cz0weGZmJywKLXRoaXMgbWVhbnMgdGhhdCB0aGUgaGFyZHdhcmUgaXMgbm90IHJlc3BvbmRpbmcgdG8gdGhlIGRyaXZlcidzIGF0dGVtcHRzCi10byByZWFkIGl0LiAgT25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgcHJvYmFibHkgdGhlIHByb2JsZW06Ci0KLSAgLSBZb3VyIGhhcmR3YXJlIGlzIGJyb2tlbi4KLQotICAtIFlvdSBhcmUgdXNpbmcgdGhlIHdyb25nIGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UsIG9yIHlvdSBoYXZlIHRoZQotICAgIGRyaXZlIGp1bXBlcmVkIHdyb25nLiAgUmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIGluc3RydWN0aW9ucyBhYm92ZS4KLQotICAtIFlvdXIgSURFIGNvbnRyb2xsZXIgcmVxdWlyZXMgc29tZSBub25zdGFuZGFyZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQotICAgIGJlZm9yZSBpdCB3aWxsIHdvcmsgcHJvcGVybHkuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVyZSB3aWxsIG9mdGVuCi0gICAgYmUgYSBzZXBhcmF0ZSBNUy1ET1MgZHJpdmVyIGp1c3QgZm9yIHRoZSBjb250cm9sbGVyLiAgSURFIGludGVyZmFjZXMKLSAgICBvbiBzb3VuZCBjYXJkcyB1c3VhbGx5IGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiAgU3VjaCBjb25maWd1cmF0aW9ucwotICAgIGNhbiBvZnRlbiBiZSBtYWRlIHRvIHdvcmsgYnkgZmlyc3QgYm9vdGluZyBNUy1ET1MsIGxvYWRpbmcgdGhlCi0gICAgYXBwcm9wcmlhdGUgZHJpdmVycywgYW5kIHRoZW4gd2FybS1ib290aW5nIGxpbnV4ICh3aXRob3V0IHBvd2VyaW5nCi0gICAgb2ZmKS4gIFRoaXMgY2FuIGJlIGF1dG9tYXRlZCB1c2luZyBsb2FkbGluIGluIHRoZSBNUy1ET1MgYXV0b2V4ZWMuCi0KLUlmIHlvdSBhbHdheXMgZ2V0IHRpbWVvdXQgZXJyb3JzLCBpbnRlcnJ1cHRzIGZyb20gdGhlIGRyaXZlIGFyZSBwcm9iYWJseQotbm90IG1ha2luZyBpdCB0byB0aGUgaG9zdC4gIENoZWNrIGhvdyB5b3UgaGF2ZSB0aGUgaGFyZHdhcmUganVtcGVyZWQKLWFuZCBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cyAoc2VlIHRoZSBjb25maWd1cmF0aW9uCi1pbnN0cnVjdGlvbnMgYWJvdmUpLiAgSWYgeW91IGhhdmUgYSBQQ0kgc3lzdGVtLCBhbHNvIGNoZWNrIHRoZSBCSU9TCi1zZXR1cDsgSSd2ZSBoYWQgb25lIHJlcG9ydCBvZiBhIHN5c3RlbSB3aGljaCB3YXMgc2hpcHBlZCB3aXRoIElSUSAxNQotZGlzYWJsZWQgYnkgdGhlIEJJT1MuCi0KLVRoZSBrZXJuZWwgaXMgYWJsZSB0byBleGVjdXRlIGJpbmFyaWVzIGRpcmVjdGx5IG9mZiBvZiB0aGUgY2Ryb20sCi1wcm92aWRlZCBpdCBpcyBtb3VudGVkIHdpdGggdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBvZiAxMDI0IChhcyBhYm92ZSkuCi0KLVBsZWFzZSBwYXNzIG9uIGFueSBmZWVkYmFjayBvbiBhbnkgb2YgdGhpcyBzdHVmZiB0byB0aGUgbWFpbnRhaW5lciwKLXdob3NlIGFkZHJlc3MgY2FuIGJlIGZvdW5kIGluIGxpbnV4L01BSU5UQUlORVJTLgotCi1Ob3RlIHRoYXQgaWYgQk9USCBoZC5jIGFuZCBpZGUuYyBhcmUgY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwsCi1oZC5jIHdpbGwgbm9ybWFsbHkgYmUgYWxsb3dlZCB0byBjb250cm9sIHRoZSBwcmltYXJ5IElERSBpbnRlcmZhY2UuCi1UaGlzIGlzIHVzZWZ1bCBmb3Igb2xkZXIgaGFyZHdhcmUgdGhhdCBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggaWRlLmMsCi1hbmQgc3RpbGwgYWxsb3dzIG5ld2VyIGhhcmR3YXJlIHRvIHJ1biBvbiB0aGUgMm5kLzNyZC80dGggSURFIHBvcnRzCi11bmRlciBjb250cm9sIG9mIGlkZS5jLiAgIFRvIGhhdmUgaWRlLmMgYWxzbyAidGFrZSBvdmVyIiB0aGUgcHJpbWFyeQotSURFIHBvcnQgaW4gdGhpcyBzaXR1YXRpb24sIHVzZSB0aGUgImNvbW1hbmQgbGluZSIgcGFyYW1ldGVyOiAgaWRlMD0weDFmMAotCi1UaGUgSURFIGRyaXZlciBpcyBtb2R1bGFyaXplZC4gIFRoZSBoaWdoIGxldmVsIGRpc2svQ0QtUk9NL3RhcGUvZmxvcHB5Ci1kcml2ZXJzIGNhbiBhbHdheXMgYmUgY29tcGlsZWQgYXMgbG9hZGFibGUgbW9kdWxlcywgdGhlIGNoaXBzZXQgZHJpdmVycwotY2FuIG9ubHkgYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBhbmQgdGhlIGNvcmUgY29kZSAoaWRlLmMpIGNhbiBiZQotY29tcGlsZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUgcHJvdmlkZWQgbm8gY2hpcHNldCBzdXBwb3J0IGlzIG5lZWRlZC4KLQotV2hlbiB1c2luZyBpZGUuYyBhcyBhIG1vZHVsZSBpbiBjb21iaW5hdGlvbiB3aXRoIGttb2QsIGFkZDoKLQotCWFsaWFzIGJsb2NrLW1ham9yLTMgaWRlLXByb2JlCi0KLXRvIC9ldGMvbW9kcHJvYmUuY29uZi4KLQotV2hlbiBpZGUuYyBpcyB1c2VkIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHBhc3MgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgdG8gdGhlCi1kcml2ZXIgdXNpbmcgdGhlICJvcHRpb25zPSIga2V5d29yZCB0byBpbnNtb2QsIHdoaWxlIHJlcGxhY2luZyBhbnkgJywnIHdpdGgKLSc7Jy4gIEZvciBleGFtcGxlOgotCi0JaW5zbW9kIGlkZS5vIG9wdGlvbnM9ImlkZTA9c2VyaWFsaXplIGlkZTE9c2VyaWFsaXplIGlkZTI9MHgxZTg7MHgzZWU7MTEiCi0KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU3VtbWFyeSBvZiBpZGUgZHJpdmVyIHBhcmFtZXRlcnMgZm9yIGtlcm5lbCBjb21tYW5kIGxpbmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAiaGR4PSIgIGlzIHJlY29nbml6ZWQgZm9yIGFsbCAieCIgZnJvbSAiYSIgdG8gImgiLCBzdWNoIGFzICJoZGMiLgotIAotICJpZGV4PSIgaXMgcmVjb2duaXplZCBmb3IgYWxsICJ4IiBmcm9tICIwIiB0byAiMyIsIHN1Y2ggYXMgImlkZTEiLgotCi0gImhkeD1ub3Byb2JlIgkJOiBkcml2ZSBtYXkgYmUgcHJlc2VudCwgYnV0IGRvIG5vdCBwcm9iZSBmb3IgaXQKLSAKLSAiaGR4PW5vbmUiCQk6IGRyaXZlIGlzIE5PVCBwcmVzZW50LCBpZ25vcmUgY21vcyBhbmQgZG8gbm90IHByb2JlCi0gCi0gImhkeD1ub3dlcnIiCQk6IGlnbm9yZSB0aGUgV1JFUlJfU1RBVCBiaXQgb24gdGhpcyBkcml2ZQotIAotICJoZHg9Y2Ryb20iCQk6IGRyaXZlIGlzIHByZXNlbnQsIGFuZCBpcyBhIGNkcm9tIGRyaXZlCi0gCi0gImhkeD1jeWwsaGVhZCxzZWN0Igk6IGRpc2sgZHJpdmUgaXMgcHJlc2VudCwgd2l0aCBzcGVjaWZpZWQgZ2VvbWV0cnkKLQotICJoZHg9cmVtYXAiCQk6IHJlbWFwIGFjY2VzcyBvZiBzZWN0b3IgMCB0byBzZWN0b3IgMSAoZm9yIEVaRHJpdmUpCi0KLSAiaGR4PXJlbWFwNjMiCQk6IHJlbWFwIHRoZSBkcml2ZTogYWRkIDYzIHRvIGFsbCBzZWN0b3IgbnVtYmVycwotCQkJICAoZm9yIERNIE9uVHJhY2spCi0KLSAiaWRleD1ub2F1dG90dW5lIgk6IGRyaXZlciB3aWxsIE5PVCBhdHRlbXB0IHRvIHR1bmUgaW50ZXJmYWNlIHNwZWVkCi0KLSAiaGR4PWF1dG90dW5lIgkJOiBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHR1bmUgaW50ZXJmYWNlIHNwZWVkCi0JCQkgIHRvIHRoZSBmYXN0ZXN0IFBJTyBtb2RlIHN1cHBvcnRlZCwKLQkJCSAgaWYgcG9zc2libGUgZm9yIHRoaXMgZHJpdmUgb25seS4KLQkJCSAgTm90IGZ1bGx5IHN1cHBvcnRlZCBieSBhbGwgY2hpcHNldCB0eXBlcywKLQkJCSAgYW5kIHF1aXRlIGxpa2VseSB0byBjYXVzZSB0cm91YmxlIHdpdGgKLQkJCSAgb2xkZXIvb2RkIElERSBkcml2ZXMuCi0KLSAiaGR4PW5vZG1hIgkJOiBkaXNhbGxvdyBETUEKLQotICJoZHg9c2NzaSIJCTogdGhlIHJldHVybiBvZiB0aGUgaWRlLXNjc2kgZmxhZywgdGhpcyBpcyB1c2VmdWwgZm9yCi0gCQkJICBhbGxvd2luZyBpZGUtZmxvcHB5LCBpZGUtdGFwZSwgYW5kIGlkZS1jZHJvbXx3cml0ZXJzCi0gCQkJICB0byB1c2UgaWRlLXNjc2kgZW11bGF0aW9uIG9uIGEgZGV2aWNlIHNwZWNpZmljIG9wdGlvbi4KLQotICJpZGVidXM9eHgiCQk6IGluZm9ybSBJREUgZHJpdmVyIG9mIFZFU0EvUENJIGJ1cyBzcGVlZCBpbiBNSHosCi0JCQkgIHdoZXJlICJ4eCIgaXMgYmV0d2VlbiAyMCBhbmQgNjYgaW5jbHVzaXZlLAotCQkJICB1c2VkIHdoZW4gdHVuaW5nIGNoaXBzZXQgUElPIG1vZGVzLgotCQkJICBGb3IgUENJIGJ1cywgMjUgaXMgY29ycmVjdCBmb3IgYSBQNzUgc3lzdGVtLAotCQkJICAzMCBpcyBjb3JyZWN0IGZvciBQOTAsUDEyMCxQMTgwIHN5c3RlbXMsCi0JCQkgIGFuZCAzMyBpcyB1c2VkIGZvciBQMTAwLFAxMzMsUDE2NiBzeXN0ZW1zLgotCQkJICBJZiBpbiBkb3VidCwgdXNlIGlkZWJ1cz0zMyBmb3IgUENJLgotCQkJICBBcyBmb3IgVkxCLCBpdCBpcyBzYWZlc3QgdG8gbm90IHNwZWNpZnkgaXQuCi0JCQkgIEJpZ2dlciB2YWx1ZXMgYXJlIHNhZmVyIHRoYW4gc21hbGxlciBvbmVzLgotCi0gImlkZXg9bm9wcm9iZSIJCTogZG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzL3VzZSB0aGlzIGludGVyZmFjZQotIAotICJpZGV4PWJhc2UiCQk6IHByb2JlIGZvciBhbiBpbnRlcmZhY2UgYXQgdGhlIGFkZHIgc3BlY2lmaWVkLAotCQkJICB3aGVyZSAiYmFzZSIgaXMgdXN1YWxseSAweDFmMCBvciAweDE3MAotCQkJICBhbmQgImN0bCIgaXMgYXNzdW1lZCB0byBiZSAiYmFzZSIrMHgyMDYKLQkJCSAgCi0gImlkZXg9YmFzZSxjdGwiCTogc3BlY2lmeSBib3RoIGJhc2UgYW5kIGN0bAotCi0gImlkZXg9YmFzZSxjdGwsaXJxIgk6IHNwZWNpZnkgYmFzZSwgY3RsLCBhbmQgaXJxIG51bWJlcgotCi0gImlkZXg9c2VyaWFsaXplIgk6IGRvIG5vdCBvdmVybGFwIG9wZXJhdGlvbnMgb24gaWRleC4gUGxlYXNlIG5vdGUKLQkJCSAgdGhhdCB5b3Ugd2lsbCBoYXZlIHRvIHNwZWNpZnkgdGhpcyBvcHRpb24gZm9yCi0JCQkgIGJvdGggdGhlIHJlc3BlY3RpdmUgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGNoYW5uZWwKLQkJCSAgdG8gdGFrZSBlZmZlY3QuCi0KLSAiaWRleD1mb3VyIgkJOiBmb3VyIGRyaXZlcyBvbiBpZGV4IGFuZCBpZGUoeF4xKSBzaGFyZSBzYW1lIHBvcnRzCi0JCQkKLSAiaWRleD1yZXNldCIJCTogcmVzZXQgaW50ZXJmYWNlIGFmdGVyIHByb2JlCi0KLSAiaWRleD1hdGE2NiIJCTogaW5mb3JtcyB0aGUgaW50ZXJmYWNlIHRoYXQgaXQgaGFzIGFuIDgwYyBjYWJsZQotCQkJICBmb3IgY2hpcHNldHMgdGhhdCBhcmUgQVRBLTY2IGNhcGFibGUsIGJ1dCB0aGUKLQkJCSAgYWJpbGl0eSB0byBiaXQgdGVzdCBmb3IgZGV0ZWN0aW9uIGlzIGN1cnJlbnRseQotCQkJICB1bmtub3duLgotCi0gImlkZT1yZXZlcnNlIgkJOiBmb3JtZXJseSBjYWxsZWQgdG8gcGNpIHN1Yi1zeXN0ZW0sIGJ1dCBub3cgbG9jYWwuCi0KLVRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIE9OTFkgb24gaWRlMCwgd2hpY2ggdXN1YWxseSBjb3JyZXNwb25kcwotdG8gdGhlIGZpcnN0IEFUQSBpbnRlcmZhY2UgZm91bmQgb24gdGhlIHBhcnRpY3VsYXIgaG9zdCwgYW5kIHRoZSBkZWZhdWx0cyBmb3IKLXRoZSBiYXNlLGN0bCBwb3J0cyBtdXN0IG5vdCBiZSBhbHRlcmVkLgotCi0gImlkZT1kb3VibGVyIgkJOiBwcm9iZS9zdXBwb3J0IElERSBkb3VibGVycyBvbiBBbWlnYQotCi1UaGVyZSBtYXkgYmUgbW9yZSBvcHRpb25zIHRoYW4gc2hvd24gLS0gdXNlIHRoZSBzb3VyY2UsIEx1a2UhCi0KLUV2ZXJ5dGhpbmcgZWxzZSBpcyByZWplY3RlZCB3aXRoIGEgIkJBRCBPUFRJT04iIG1lc3NhZ2UuCi0KLUZvciBsZWdhY3kgSURFIFZMQiBob3N0IGRyaXZlcnMgKGFsaTE0eHgvZHRjMjI3OC9odDY1NjBiL3FkNjV4eC91bWM4NjcyKQoteW91IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgcHJvYmluZyBieSB1c2luZyAicHJvYmUiIGtlcm5lbCBwYXJhbWV0ZXIsCi1pLmUuIHRvIGVuYWJsZSBwcm9iaW5nIGZvciBBTEkgTTE0eHggY2hpcHNldHMgKGFsaTE0eHggaG9zdCBkcml2ZXIpIHVzZToKLQotKiAiYWxpMTR4eC5wcm9iZSIgYm9vdCBvcHRpb24gd2hlbiBhbGkxNHh4IGRyaXZlciBpcyBidWlsdC1pbiB0aGUga2VybmVsCi0KLSogInByb2JlIiBtb2R1bGUgcGFyYW1ldGVyIHdoZW4gYWxpMTR4eCBkcml2ZXIgaXMgY29tcGlsZWQgYXMgbW9kdWxlCi0gICgibW9kcHJvYmUgYWxpMTR4eCBwcm9iZSIpCi0KLUFsc28gZm9yIGxlZ2FjeSBDTUQ2NDAgaG9zdCBkcml2ZXIgKGNtZDY0MCkgeW91IG5lZWQgdG8gdXNlICJwcm9iZV92bGIiCi1rZXJuZWwgcGFyZW1ldGVyIHRvIGVuYWJsZSBwcm9iaW5nIGZvciBWTEIgdmVyc2lvbiBvZiB0aGUgY2hpcHNldCAoUENJIG9uZXMKLWFyZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5KS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSURFIEFUQVBJIHN0cmVhbWluZyB0YXBlIGRyaXZlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRyaXZlciBpcyBhIHBhcnQgb2YgdGhlIExpbnV4IGlkZSBkcml2ZXIgYW5kIHdvcmtzIGluIGNvLW9wZXJhdGlvbgotd2l0aCBsaW51eC9kcml2ZXJzL2Jsb2NrL2lkZS5jLgotCi1UaGUgZHJpdmVyLCBpbiBjby1vcGVyYXRpb24gd2l0aCBpZGUuYywgYmFzaWNhbGx5IHRyYXZlcnNlcyB0aGUKLXJlcXVlc3QtbGlzdCBmb3IgdGhlIGJsb2NrIGRldmljZSBpbnRlcmZhY2UuIFRoZSBjaGFyYWN0ZXIgZGV2aWNlCi1pbnRlcmZhY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBjcmVhdGVzIG5ldyByZXF1ZXN0cywgYWRkcyB0aGVtCi10byB0aGUgcmVxdWVzdC1saXN0IG9mIHRoZSBibG9jayBkZXZpY2UsIGFuZCB3YWl0cyBmb3IgdGhlaXIgY29tcGxldGlvbi4KLQotUGlwZWxpbmVkIG9wZXJhdGlvbiBtb2RlIGlzIG5vdyBzdXBwb3J0ZWQgb24gYm90aCByZWFkcyBhbmQgd3JpdGVzLgotCi1UaGUgYmxvY2sgZGV2aWNlIG1ham9yIGFuZCBtaW5vciBudW1iZXJzIGFyZSBkZXRlcm1pbmVkIGZyb20gdGhlCi10YXBlJ3MgcmVsYXRpdmUgcG9zaXRpb24gaW4gdGhlIGlkZSBpbnRlcmZhY2VzLCBhcyBleHBsYWluZWQgaW4gaWRlLmMuCi0KLVRoZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGRldmljZXM6Ci0KLSBodDAJCW1ham9yIDM3LCBtaW5vciAwCWZpcnN0ICBJREUgdGFwZSwgcmV3aW5kIG9uIGNsb3NlLgotIGh0MQkJbWFqb3IgMzcsIG1pbm9yIDEJc2Vjb25kIElERSB0YXBlLCByZXdpbmQgb24gY2xvc2UuCi0gLi4uCi0gbmh0MAkJbWFqb3IgMzcsIG1pbm9yIDEyOAlmaXJzdCAgSURFIHRhcGUsIG5vIHJld2luZCBvbiBjbG9zZS4KLSBuaHQxCQltYWpvciAzNywgbWlub3IgMTI5CXNlY29uZCBJREUgdGFwZSwgbm8gcmV3aW5kIG9uIGNsb3NlLgotIC4uLgotCi1SdW4gL2Rldi9NQUtFREVWIHRvIGNyZWF0ZSB0aGUgYWJvdmUgZW50cmllcy4KLQotVGhlIGdlbmVyYWwgbWFnbmV0aWMgdGFwZSBjb21tYW5kcyBjb21wYXRpYmxlIGludGVyZmFjZSwgYXMgZGVmaW5lZCBieQotaW5jbHVkZS9saW51eC9tdGlvLmgsIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgY2hhcmFjdGVyIGRldmljZS4KLQotR2VuZXJhbCBpZGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3VjaCBhcyB0aGUgaW50ZXJydXB0LXVubWFzawotZmxhZywgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgaXNzdWluZyBhbiBpb2N0bCB0byB0aGUgYmxvY2sgZGV2aWNlIGludGVyZmFjZSwKLWFzIGFueSBvdGhlciBpZGUgZGV2aWNlLgotCi1PdXIgb3duIGlkZS10YXBlIGlvY3RsJ3MgY2FuIGJlIGlzc3VlZCB0byBlaXRoZXIgdGhlIGJsb2NrIGRldmljZSBvcgotdGhlIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlLgotCi1NYXhpbWFsIHRocm91Z2hwdXQgd2l0aCBtaW5pbWFsIGJ1cyBsb2FkIHdpbGwgdXN1YWxseSBiZSBhY2hpZXZlZCBpbiB0aGUKLWZvbGxvd2luZyBzY2VuYXJpbzoKLQotCTEuCWlkZS10YXBlIGlzIG9wZXJhdGluZyBpbiB0aGUgcGlwZWxpbmVkIG9wZXJhdGlvbiBtb2RlLgotCTIuCU5vIGJ1ZmZlcmluZyBpcyBwZXJmb3JtZWQgYnkgdGhlIHVzZXIgYmFja3VwIHByb2dyYW0uCi0KLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Tb21lIFRlcm1pbm9sb2d5Ci0tLS0tLS0tLS0tLS0tLS0tCi1JREUgPSBJbnRlZ3JhdGVkIERyaXZlIEVsZWN0cm9uaWNzLCBtZWFuaW5nIHRoYXQgZWFjaCBkcml2ZSBoYXMgYSBidWlsdC1pbgotY29udHJvbGxlciwgd2hpY2ggaXMgd2h5IGFuICJJREUgaW50ZXJmYWNlIGNhcmQiIGlzIG5vdCBhICJjb250cm9sbGVyIGNhcmQiLgotCi1BVEEgPSBBVCAodGhlIG9sZCBJQk0gMjg2IGNvbXB1dGVyKSBBdHRhY2htZW50IEludGVyZmFjZSwgYSBkcmFmdCBBbWVyaWNhbgotTmF0aW9uYWwgU3RhbmRhcmQgZm9yIGNvbm5lY3RpbmcgaGFyZCBkcml2ZXMgdG8gUENzLiAgVGhpcyBpcyB0aGUgb2ZmaWNpYWwKLW5hbWUgZm9yICJJREUiLgotCi1UaGUgbGF0ZXN0IHN0YW5kYXJkcyBkZWZpbmUgc29tZSBlbmhhbmNlbWVudHMsIGtub3duIGFzIHRoZSBBVEEtNiBzcGVjLAotd2hpY2ggZ3JldyBvdXQgb2YgdmVuZG9yLXNwZWNpZmljICJFbmhhbmNlZCBJREUiIChFSURFKSBpbXBsZW1lbnRhdGlvbnMuCi0KLUFUQVBJID0gQVRBIFBhY2tldCBJbnRlcmZhY2UsIGEgbmV3IHByb3RvY29sIGZvciBjb250cm9sbGluZyB0aGUgZHJpdmVzLAotc2ltaWxhciB0byBTQ1NJIHByb3RvY29scywgY3JlYXRlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBBVEEyIHN0YW5kYXJkLgotQVRBUEkgaXMgY3VycmVudGx5IHVzZWQgZm9yIGNvbnRyb2xsaW5nIENEUk9NLCBUQVBFIGFuZCBGTE9QUFkgKFpJUCBvcgotTFMxMjAvMjQwKSBkZXZpY2VzLCByZW1vdmFibGUgUi9XIGNhcnRyaWRnZXMsIGFuZCBmb3IgaGlnaCBjYXBhY2l0eSBoYXJkIGRpc2sKLWRyaXZlcy4KLQotbWxvcmRAcG9ib3guY29tCi0tLQotCi1XZWQgQXByIDE3IDIyOjUyOjQ0IENFU1QgMjAwMiBlZGl0ZWQgYnkgTWFyY2luIERhbGVja2ksIHRoZSBjdXJyZW50Ci1tYWludGFpbmVyLgotCi1XZWQgQXVnIDIwIDIyOjMxOjI5IENFU1QgMjAwMyB1cGRhdGVkIGlkZSBib290IG9wdGlvbnMgdG8gY3VycmVudCBpZGUuYwotY29tbWVudHMgYXQgMi42LjAtdGVzdDQgdGltZS4gTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWRlLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9pZGUvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiNzc4OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWRlLzAwLUlOREVYCkBAIC0wLDAgKzEsMTIgQEAKKzAwLUlOREVYCisgICAgCS0gdGhpcyBmaWxlCitDaGFuZ2VMb2cuaWRlLWNkLjE5OTQtMjAwNAorCS0gaWRlLWNkIGNoYW5nZWxvZworQ2hhbmdlTG9nLmlkZS1mbG9wcHkuMTk5Ni0yMDAyCisJLSBpZGUtZmxvcHB5IGNoYW5nZWxvZworQ2hhbmdlTG9nLmlkZS10YXBlLjE5OTUtMjAwMgorCS0gaWRlLXRhcGUgY2hhbmdlbG9nCitpZGUtdGFwZS50eHQKKwktIGluZm8gb24gdGhlIElERSBBVEFQSSBzdHJlYW1pbmcgdGFwZSBkcml2ZXIKK2lkZS50eHQKKwktIGltcG9ydGFudCBpbmZvIGZvciB1c2VycyBvZiBBVEEgZGV2aWNlcyAoSURFL0VJREUgZGlza3MgYW5kIENELVJPTVMpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBiL0RvY3VtZW50YXRpb24vaWRlL2lkZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2YzY5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaWRlL2lkZS50eHQKQEAgLTAsMCArMSwyODEgQEAKKworCUluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgRW5oYW5jZWQgSURFIGRyaXZlIGluIExpbnV4IDIuNgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisgICBUaGUgaGRwYXJtIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIElERSBmZWF0dXJlcyBvbiBhCisgICBydW5uaW5nIHN5c3RlbS4gSXQgaXMgcGFja2FnZWQgc2VwYXJhdGVseS4gIFBsZWFzZSBMb29rIGZvciBpdCBvbiBwb3B1bGFyCisgICBsaW51eCBGVFAgc2l0ZXMuCisKKworCisqKiogIElNUE9SVEFOVCBOT1RJQ0VTOiAgQlVHR1kgSURFIENISVBTRVRTIENBTiBDT1JSVVBUIERBVEEhIQorKioqICA9PT09PT09PT09PT09PT09PQorKioqICBQQ0kgdmVyc2lvbnMgb2YgdGhlIENNRDY0MCBhbmQgUloxMDAwIGludGVyZmFjZXMgYXJlIG5vdyBkZXRlY3RlZAorKioqICBhdXRvbWF0aWNhbGx5IGF0IHN0YXJ0dXAgd2hlbiBQQ0kgQklPUyBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQuCisqKioKKyoqKiAgTGludXggZGlzYWJsZXMgdGhlICJwcmVmZXRjaCIgKCJyZWFkYWhlYWQiKSBtb2RlIG9mIHRoZSBSWjEwMDAKKyoqKiAgdG8gcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gcG9zc2libGUgZHVlIHRvIGhhcmR3YXJlIGRlc2lnbiBmbGF3cy4KKyoqKgorKioqICBGb3IgdGhlIENNRDY0MCwgbGludXggZGlzYWJsZXMgIklSUSB1bm1hc2tpbmciIChoZHBhcm0gLXUxKSBvbiBhbnkKKyoqKiAgZHJpdmUgZm9yIHdoaWNoIHRoZSAicHJlZmV0Y2giIG1vZGUgb2YgdGhlIENNRDY0MCBpcyB0dXJuZWQgb24uCisqKiogIElmICJwcmVmZXRjaCIgaXMgZGlzYWJsZWQgKGhkcGFybSAtcDgpLCB0aGVuICJJUlEgdW5tYXNraW5nIiBjYW4gYmUKKyoqKiAgdXNlZCBhZ2Fpbi4KKyoqKgorKioqICBGb3IgdGhlIENNRDY0MCwgbGludXggZGlzYWJsZXMgIjMyYml0IEkvTyIgKGhkcGFybSAtYzEpIG9uIGFueSBkcml2ZQorKioqICBmb3Igd2hpY2ggdGhlICJwcmVmZXRjaCIgbW9kZSBvZiB0aGUgQ01ENjQwIGlzIHR1cm5lZCBvZmYuCisqKiogIElmICJwcmVmZXRjaCIgaXMgZW5hYmxlZCAoaGRwYXJtIC1wOSksIHRoZW4gIjMyYml0IEkvTyIgY2FuIGJlCisqKiogIHVzZWQgYWdhaW4uCisqKioKKyoqKiAgVGhlIENNRDY0MCBpcyBhbHNvIHVzZWQgb24gc29tZSBWZXNhIExvY2FsIEJ1cyAoVkxCKSBjYXJkcywgYW5kIGlzICpOT1QqCisqKiogIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYnkgTGludXguICBGb3Igc2FmZSwgcmVsaWFibGUgb3BlcmF0aW9uIHdpdGggc3VjaAorKioqICBpbnRlcmZhY2VzLCBvbmUgKk1VU1QqIHVzZSB0aGUgImNtZDY0MC5wcm9iZV92bGIiIGtlcm5lbCBvcHRpb24uCisqKioKKyoqKiAgVXNlIG9mIHRoZSAic2VyaWFsaXplIiBvcHRpb24gaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvbW1vbiBwaXRmYWxsczoKKworLSA0MC1jb25kdWN0b3IgSURFIGNhYmxlcyBhcmUgY2FwYWJsZSBvZiB0cmFuc2ZlcnJpbmcgZGF0YSBpbiBETUEgbW9kZXMgdXAgdG8KKyAgdWRtYTIsIGJ1dCBubyBmYXN0ZXIuCisKKy0gSWYgcG9zc2libGUgZGV2aWNlcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8gc2VwYXJhdGUgY2hhbm5lbHMgaWYgdGhleSBhcmUKKyAgYXZhaWxhYmxlLiBUeXBpY2FsbHkgdGhlIGRpc2sgb24gdGhlIGZpcnN0IGFuZCBDRC1ST00gb24gdGhlIHNlY29uZC4KKworLSBJZiB5b3UgbWl4IGRldmljZXMgb24gdGhlIHNhbWUgY2FibGUsIHBsZWFzZSBjb25zaWRlciB1c2luZyBzaW1pbGFyIGRldmljZXMKKyAgaW4gcmVzcGVjdCBvZiB0aGUgZGF0YSB0cmFuc2ZlciBtb2RlIHRoZXkgc3VwcG9ydC4KKworLSBFdmVuIGJldHRlciB0cnkgdG8gc3RpY2sgdG8gdGhlIHNhbWUgdmVuZG9yIGFuZCBkZXZpY2UgdHlwZSBvbiB0aGUgc2FtZQorICBjYWJsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgbXVsdGlwbGUgSURFIGludGVyZmFjZSBkcml2ZXIsIGFzIGV2b2x2ZWQgZnJvbSBoZC5jLgorCitJdCBzdXBwb3J0cyB1cCB0byA5IElERSBpbnRlcmZhY2VzIHBlciBkZWZhdWx0LCBvbiBvbmUgb3IgbW9yZSBJUlFzICh1c3VhbGx5CisxNCAmIDE1KS4gIFRoZXJlIGNhbiBiZSB1cCB0byB0d28gZHJpdmVzIHBlciBpbnRlcmZhY2UsIGFzIHBlciB0aGUgQVRBLTYgc3BlYy4KKworUHJpbWFyeTogICAgaWRlMCwgcG9ydCAweDFmMDsgbWFqb3I9MzsgIGhkYSBpcyBtaW5vcj0wOyBoZGIgaXMgbWlub3I9NjQKK1NlY29uZGFyeTogIGlkZTEsIHBvcnQgMHgxNzA7IG1ham9yPTIyOyBoZGMgaXMgbWlub3I9MDsgaGRkIGlzIG1pbm9yPTY0CitUZXJ0aWFyeTogICBpZGUyLCBwb3J0IDB4MWU4OyBtYWpvcj0zMzsgaGRlIGlzIG1pbm9yPTA7IGhkZiBpcyBtaW5vcj02NAorUXVhdGVybmFyeTogaWRlMywgcG9ydCAweDE2ODsgbWFqb3I9MzQ7IGhkZyBpcyBtaW5vcj0wOyBoZGggaXMgbWlub3I9NjQKK2ZpZnRoLi4gICAgIGlkZTQsIHVzdWFsbHkgUENJLCBwcm9iZWQKK3NpeHRoLi4gICAgIGlkZTUsIHVzdWFsbHkgUENJLCBwcm9iZWQKKworVG8gYWNjZXNzIGRldmljZXMgb24gaW50ZXJmYWNlcyA+IGlkZTAsIGRldmljZSBlbnRyaWVzIHBsZWFzZSBtYWtlIHN1cmUgdGhhdAorZGV2aWNlIGZpbGVzIGZvciB0aGVtIGFyZSBwcmVzZW50IGluIC9kZXYuICBJZiBub3QsIHBsZWFzZSBjcmVhdGUgc3VjaAorZW50cmllcywgYnkgdXNpbmcgL2Rldi9NQUtFREVWLgorCitUaGlzIGRyaXZlciBhdXRvbWF0aWNhbGx5IHByb2JlcyBmb3IgbW9zdCBJREUgaW50ZXJmYWNlcyAoaW5jbHVkaW5nIGFsbCBQQ0kKK29uZXMpLCBmb3IgdGhlIGRyaXZlcy9nZW9tZXRyaWVzIGF0dGFjaGVkIHRvIHRob3NlIGludGVyZmFjZXMsIGFuZCBmb3IgdGhlIElSUQorbGluZXMgYmVpbmcgdXNlZCBieSB0aGUgaW50ZXJmYWNlcyAobm9ybWFsbHkgMTQsIDE1IGZvciBpZGUwL2lkZTEpLgorCitBbnkgbnVtYmVyIG9mIGludGVyZmFjZXMgbWF5IHNoYXJlIGEgc2luZ2xlIElSUSBpZiBuZWNlc3NhcnksIGF0IGEgc2xpZ2h0CitwZXJmb3JtYW5jZSBwZW5hbHR5LCB3aGV0aGVyIG9uIHNlcGFyYXRlIGNhcmRzIG9yIGEgc2luZ2xlIFZMQiBjYXJkLgorVGhlIElERSBkcml2ZXIgYXV0b21hdGljYWxseSBkZXRlY3RzIGFuZCBoYW5kbGVzIHRoaXMuICBIb3dldmVyLCB0aGlzIG1heQorb3IgbWF5IG5vdCBiZSBoYXJtZnVsIHRvIHlvdXIgaGFyZHdhcmUuLiB0d28gb3IgbW9yZSBjYXJkcyBkcml2aW5nIHRoZSBzYW1lIElSUQorY2FuIHBvdGVudGlhbGx5IGJ1cm4gZWFjaCBvdGhlcidzIGJ1cyBkcml2ZXIsIHRob3VnaCBpbiBwcmFjdGljZSB0aGlzCitzZWxkb20gb2NjdXJzLiAgQmUgY2FyZWZ1bCwgYW5kIGlmIGluIGRvdWJ0LCBkb24ndCBkbyBpdCEKKworRHJpdmVzIGFyZSBub3JtYWxseSBmb3VuZCBieSBhdXRvLXByb2JpbmcgYW5kL29yIGV4YW1pbmluZyB0aGUgQ01PUy9CSU9TIGRhdGEuCitGb3IgcmVhbGx5IHdlaXJkIHNpdHVhdGlvbnMsIHRoZSBhcHBhcmVudCAoZmRpc2spIGdlb21ldHJ5IGNhbiBhbHNvIGJlIHNwZWNpZmllZAorb24gdGhlIGtlcm5lbCAiY29tbWFuZCBsaW5lIiB1c2luZyBMSUxPLiAgVGhlIGZvcm1hdCBvZiBzdWNoIGxpbmVzIGlzOgorCisJaGR4PWN5bHMsaGVhZHMsc2VjdHMKK29yCWhkeD1jZHJvbQorCit3aGVyZSBoZHggY2FuIGJlIGFueSBvZiBoZGEgdGhyb3VnaCBoZGgsIFRocmVlIHZhbHVlcyBhcmUgcmVxdWlyZWQKKyhjeWxzLGhlYWRzLHNlY3RzKS4gIEZvciBleGFtcGxlOgorCisJaGRjPTEwNTAsMzIsNjQgIGhkZD1jZHJvbQorCitlaXRoZXIge2hkYSxoZGJ9IG9yIHtoZGMsaGRkfS4gIFRoZSByZXN1bHRzIG9mIHN1Y2Nlc3NmdWwgYXV0by1wcm9iaW5nIG1heQorb3ZlcnJpZGUgdGhlIHBoeXNpY2FsIGdlb21ldHJ5L2lycSBzcGVjaWZpZWQsIHRob3VnaCB0aGUgIm9yaWdpbmFsIiBnZW9tZXRyeQorbWF5IGJlIHJldGFpbmVkIGFzIHRoZSAibG9naWNhbCIgZ2VvbWV0cnkgZm9yIHBhcnRpdGlvbmluZyBwdXJwb3NlcyAoZmRpc2spLgorCitJZiB0aGUgYXV0by1wcm9iaW5nIGR1cmluZyBib290IHRpbWUgY29uZnVzZXMgYSBkcml2ZSAoaWUuIHRoZSBkcml2ZSB3b3Jrcword2l0aCBoZC5jIGJ1dCBub3Qgd2l0aCBpZGUuYyksIHRoZW4gYW4gY29tbWFuZCBsaW5lIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkCitmb3IgZWFjaCBkcml2ZSBmb3Igd2hpY2ggeW91J2QgbGlrZSB0aGUgZHJpdmUgdG8gc2tpcCB0aGUgaGFyZHdhcmUKK3Byb2JlL2lkZW50aWZpY2F0aW9uIHNlcXVlbmNlLiAgRm9yIGV4YW1wbGU6CisKKwloZGI9bm9wcm9iZQorb3IKKwloZGM9NzY4LDE2LDMyCisJaGRjPW5vcHJvYmUKKworTm90ZSB0aGF0IHdoZW4gb25seSBvbmUgSURFIGRldmljZSBpcyBhdHRhY2hlZCB0byBhbiBpbnRlcmZhY2UsIGl0IHNob3VsZCBiZQoranVtcGVyZWQgYXMgInNpbmdsZSIgb3IgIm1hc3RlciIsICpub3QqICJzbGF2ZSIuICBNYW55IGZvbGtzIGhhdmUgaGFkCisidHJvdWJsZSIgd2l0aCBjZHJvbXMgYmVjYXVzZSBvZiB0aGlzIHJlcXVpcmVtZW50LCBzbyB0aGUgZHJpdmVyIG5vdyBwcm9iZXMKK2ZvciBib3RoIHVuaXRzLCB0aG91Z2ggc3VjY2VzcyBpcyBtb3JlIGxpa2VseSB3aGVuIHRoZSBkcml2ZSBpcyBqdW1wZXJlZAorY29ycmVjdGx5LgorCitDb3VydGVzeSBvZiBTY290dCBTbnlkZXIgYW5kIG90aGVycywgdGhlIGRyaXZlciBzdXBwb3J0cyBBVEFQSSBjZHJvbSBkcml2ZXMKK3N1Y2ggYXMgdGhlIE5FQy0yNjAgYW5kIHRoZSBuZXcgTUlUU1VNSSB0cmlwbGUvcXVhZCBzcGVlZCBkcml2ZXMuCitTdWNoIGRyaXZlcyB3aWxsIGJlIGlkZW50aWZpZWQgYXQgYm9vdCB0aW1lLCBqdXN0IGxpa2UgYSBoYXJkIGRpc2suCisKK0lmIGZvciBzb21lIHJlYXNvbiB5b3VyIGNkcm9tIGRyaXZlIGlzICpub3QqIGZvdW5kIGF0IGJvb3QgdGltZSwgeW91IGNhbiBmb3JjZQordGhlIHByb2JlIHRvIGxvb2sgaGFyZGVyIGJ5IHN1cHBseWluZyBhIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyCit2aWEgTElMTywgc3VjaCBhczoKKworCWhkYz1jZHJvbQkvKiBoZGMgPSAibWFzdGVyIiBvbiBzZWNvbmQgaW50ZXJmYWNlICovCitvcgorCWhkZD1jZHJvbQkvKiBoZGQgPSAic2xhdmUiIG9uIHNlY29uZCBpbnRlcmZhY2UgKi8KKworRm9yIGV4YW1wbGUsIGEgR1cyMDAwIHN5c3RlbSBtaWdodCBoYXZlIGEgaGFyZCBkcml2ZSBvbiB0aGUgcHJpbWFyeQoraW50ZXJmYWNlICgvZGV2L2hkYSkgYW5kIGFuIElERSBjZHJvbSBkcml2ZSBvbiB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZQorKC9kZXYvaGRjKS4gIFRvIG1vdW50IGEgQ0QgaW4gdGhlIGNkcm9tIGRyaXZlLCBvbmUgd291bGQgdXNlIHNvbWV0aGluZyBsaWtlOgorCisJbG4gLXNmIC9kZXYvaGRjIC9kZXYvY2Ryb20KKwlta2RpciAvbW50L2Nkcm9tCisJbW91bnQgL2Rldi9jZHJvbSAvbW50L2Nkcm9tIC10IGlzbzk2NjAgLW8gcm8KKworSWYsIGFmdGVyIGRvaW5nIGFsbCBvZiB0aGUgYWJvdmUsIG1vdW50IGRvZXNuJ3Qgd29yayBhbmQgeW91IHNlZQorZXJyb3JzIGZyb20gdGhlIGRyaXZlciAod2l0aCBkbWVzZykgY29tcGxhaW5pbmcgYWJvdXQgYHN0YXR1cz0weGZmJywKK3RoaXMgbWVhbnMgdGhhdCB0aGUgaGFyZHdhcmUgaXMgbm90IHJlc3BvbmRpbmcgdG8gdGhlIGRyaXZlcidzIGF0dGVtcHRzCit0byByZWFkIGl0LiAgT25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgcHJvYmFibHkgdGhlIHByb2JsZW06CisKKyAgLSBZb3VyIGhhcmR3YXJlIGlzIGJyb2tlbi4KKworICAtIFlvdSBhcmUgdXNpbmcgdGhlIHdyb25nIGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UsIG9yIHlvdSBoYXZlIHRoZQorICAgIGRyaXZlIGp1bXBlcmVkIHdyb25nLiAgUmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIGluc3RydWN0aW9ucyBhYm92ZS4KKworICAtIFlvdXIgSURFIGNvbnRyb2xsZXIgcmVxdWlyZXMgc29tZSBub25zdGFuZGFyZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQorICAgIGJlZm9yZSBpdCB3aWxsIHdvcmsgcHJvcGVybHkuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVyZSB3aWxsIG9mdGVuCisgICAgYmUgYSBzZXBhcmF0ZSBNUy1ET1MgZHJpdmVyIGp1c3QgZm9yIHRoZSBjb250cm9sbGVyLiAgSURFIGludGVyZmFjZXMKKyAgICBvbiBzb3VuZCBjYXJkcyB1c3VhbGx5IGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiAgU3VjaCBjb25maWd1cmF0aW9ucworICAgIGNhbiBvZnRlbiBiZSBtYWRlIHRvIHdvcmsgYnkgZmlyc3QgYm9vdGluZyBNUy1ET1MsIGxvYWRpbmcgdGhlCisgICAgYXBwcm9wcmlhdGUgZHJpdmVycywgYW5kIHRoZW4gd2FybS1ib290aW5nIGxpbnV4ICh3aXRob3V0IHBvd2VyaW5nCisgICAgb2ZmKS4gIFRoaXMgY2FuIGJlIGF1dG9tYXRlZCB1c2luZyBsb2FkbGluIGluIHRoZSBNUy1ET1MgYXV0b2V4ZWMuCisKK0lmIHlvdSBhbHdheXMgZ2V0IHRpbWVvdXQgZXJyb3JzLCBpbnRlcnJ1cHRzIGZyb20gdGhlIGRyaXZlIGFyZSBwcm9iYWJseQorbm90IG1ha2luZyBpdCB0byB0aGUgaG9zdC4gIENoZWNrIGhvdyB5b3UgaGF2ZSB0aGUgaGFyZHdhcmUganVtcGVyZWQKK2FuZCBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cyAoc2VlIHRoZSBjb25maWd1cmF0aW9uCitpbnN0cnVjdGlvbnMgYWJvdmUpLiAgSWYgeW91IGhhdmUgYSBQQ0kgc3lzdGVtLCBhbHNvIGNoZWNrIHRoZSBCSU9TCitzZXR1cDsgSSd2ZSBoYWQgb25lIHJlcG9ydCBvZiBhIHN5c3RlbSB3aGljaCB3YXMgc2hpcHBlZCB3aXRoIElSUSAxNQorZGlzYWJsZWQgYnkgdGhlIEJJT1MuCisKK1RoZSBrZXJuZWwgaXMgYWJsZSB0byBleGVjdXRlIGJpbmFyaWVzIGRpcmVjdGx5IG9mZiBvZiB0aGUgY2Ryb20sCitwcm92aWRlZCBpdCBpcyBtb3VudGVkIHdpdGggdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBvZiAxMDI0IChhcyBhYm92ZSkuCisKK1BsZWFzZSBwYXNzIG9uIGFueSBmZWVkYmFjayBvbiBhbnkgb2YgdGhpcyBzdHVmZiB0byB0aGUgbWFpbnRhaW5lciwKK3dob3NlIGFkZHJlc3MgY2FuIGJlIGZvdW5kIGluIGxpbnV4L01BSU5UQUlORVJTLgorCitUaGUgSURFIGRyaXZlciBpcyBtb2R1bGFyaXplZC4gIFRoZSBoaWdoIGxldmVsIGRpc2svQ0QtUk9NL3RhcGUvZmxvcHB5Citkcml2ZXJzIGNhbiBhbHdheXMgYmUgY29tcGlsZWQgYXMgbG9hZGFibGUgbW9kdWxlcywgdGhlIGNoaXBzZXQgZHJpdmVycworY2FuIG9ubHkgYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBhbmQgdGhlIGNvcmUgY29kZSAoaWRlLmMpIGNhbiBiZQorY29tcGlsZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUgcHJvdmlkZWQgbm8gY2hpcHNldCBzdXBwb3J0IGlzIG5lZWRlZC4KKworV2hlbiB1c2luZyBpZGUuYyBhcyBhIG1vZHVsZSBpbiBjb21iaW5hdGlvbiB3aXRoIGttb2QsIGFkZDoKKworCWFsaWFzIGJsb2NrLW1ham9yLTMgaWRlLXByb2JlCisKK3RvIC9ldGMvbW9kcHJvYmUuY29uZi4KKworV2hlbiBpZGUuYyBpcyB1c2VkIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHBhc3MgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgdG8gdGhlCitkcml2ZXIgdXNpbmcgdGhlICJvcHRpb25zPSIga2V5d29yZCB0byBpbnNtb2QsIHdoaWxlIHJlcGxhY2luZyBhbnkgJywnIHdpdGgKKyc7Jy4gIEZvciBleGFtcGxlOgorCisJaW5zbW9kIGlkZS5vIG9wdGlvbnM9ImhkYT1ub2RtYSBoZGI9bm9kbWEiCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3VtbWFyeSBvZiBpZGUgZHJpdmVyIHBhcmFtZXRlcnMgZm9yIGtlcm5lbCBjb21tYW5kIGxpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAiaGR4PSIgIGlzIHJlY29nbml6ZWQgZm9yIGFsbCAieCIgZnJvbSAiYSIgdG8gInUiLCBzdWNoIGFzICJoZGMiLgorCisgImlkZXg9IiBpcyByZWNvZ25pemVkIGZvciBhbGwgIngiIGZyb20gIjAiIHRvICI5Iiwgc3VjaCBhcyAiaWRlMSIuCisKKyAiaGR4PW5vcHJvYmUiCQk6IGRyaXZlIG1heSBiZSBwcmVzZW50LCBidXQgZG8gbm90IHByb2JlIGZvciBpdAorCisgImhkeD1ub25lIgkJOiBkcml2ZSBpcyBOT1QgcHJlc2VudCwgaWdub3JlIGNtb3MgYW5kIGRvIG5vdCBwcm9iZQorCisgImhkeD1ub3dlcnIiCQk6IGlnbm9yZSB0aGUgV1JFUlJfU1RBVCBiaXQgb24gdGhpcyBkcml2ZQorCisgImhkeD1jZHJvbSIJCTogZHJpdmUgaXMgcHJlc2VudCwgYW5kIGlzIGEgY2Ryb20gZHJpdmUKKworICJoZHg9Y3lsLGhlYWQsc2VjdCIJOiBkaXNrIGRyaXZlIGlzIHByZXNlbnQsIHdpdGggc3BlY2lmaWVkIGdlb21ldHJ5CisKKyAiaGR4PWF1dG90dW5lIgkJOiBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHR1bmUgaW50ZXJmYWNlIHNwZWVkCisJCQkgIHRvIHRoZSBmYXN0ZXN0IFBJTyBtb2RlIHN1cHBvcnRlZCwKKwkJCSAgaWYgcG9zc2libGUgZm9yIHRoaXMgZHJpdmUgb25seS4KKwkJCSAgTm90IGZ1bGx5IHN1cHBvcnRlZCBieSBhbGwgY2hpcHNldCB0eXBlcywKKwkJCSAgYW5kIHF1aXRlIGxpa2VseSB0byBjYXVzZSB0cm91YmxlIHdpdGgKKwkJCSAgb2xkZXIvb2RkIElERSBkcml2ZXMuCisKKyAiaGR4PW5vZG1hIgkJOiBkaXNhbGxvdyBETUEKKworICJpZGVidXM9eHgiCQk6IGluZm9ybSBJREUgZHJpdmVyIG9mIFZFU0EvUENJIGJ1cyBzcGVlZCBpbiBNSHosCisJCQkgIHdoZXJlICJ4eCIgaXMgYmV0d2VlbiAyMCBhbmQgNjYgaW5jbHVzaXZlLAorCQkJICB1c2VkIHdoZW4gdHVuaW5nIGNoaXBzZXQgUElPIG1vZGVzLgorCQkJICBGb3IgUENJIGJ1cywgMjUgaXMgY29ycmVjdCBmb3IgYSBQNzUgc3lzdGVtLAorCQkJICAzMCBpcyBjb3JyZWN0IGZvciBQOTAsUDEyMCxQMTgwIHN5c3RlbXMsCisJCQkgIGFuZCAzMyBpcyB1c2VkIGZvciBQMTAwLFAxMzMsUDE2NiBzeXN0ZW1zLgorCQkJICBJZiBpbiBkb3VidCwgdXNlIGlkZWJ1cz0zMyBmb3IgUENJLgorCQkJICBBcyBmb3IgVkxCLCBpdCBpcyBzYWZlc3QgdG8gbm90IHNwZWNpZnkgaXQuCisJCQkgIEJpZ2dlciB2YWx1ZXMgYXJlIHNhZmVyIHRoYW4gc21hbGxlciBvbmVzLgorCisgImlkZXg9c2VyaWFsaXplIgk6IGRvIG5vdCBvdmVybGFwIG9wZXJhdGlvbnMgb24gaWRleC4gUGxlYXNlIG5vdGUKKwkJCSAgdGhhdCB5b3Ugd2lsbCBoYXZlIHRvIHNwZWNpZnkgdGhpcyBvcHRpb24gZm9yCisJCQkgIGJvdGggdGhlIHJlc3BlY3RpdmUgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGNoYW5uZWwKKwkJCSAgdG8gdGFrZSBlZmZlY3QuCisKKyAiaWRleD1yZXNldCIJCTogcmVzZXQgaW50ZXJmYWNlIGFmdGVyIHByb2JlCisKKyAiaWRleD1hdGE2NiIJCTogaW5mb3JtcyB0aGUgaW50ZXJmYWNlIHRoYXQgaXQgaGFzIGFuIDgwYyBjYWJsZQorCQkJICBmb3IgY2hpcHNldHMgdGhhdCBhcmUgQVRBLTY2IGNhcGFibGUsIGJ1dCB0aGUKKwkJCSAgYWJpbGl0eSB0byBiaXQgdGVzdCBmb3IgZGV0ZWN0aW9uIGlzIGN1cnJlbnRseQorCQkJICB1bmtub3duLgorCisgImlkZT1kb3VibGVyIgkJOiBwcm9iZS9zdXBwb3J0IElERSBkb3VibGVycyBvbiBBbWlnYQorCitUaGVyZSBtYXkgYmUgbW9yZSBvcHRpb25zIHRoYW4gc2hvd24gLS0gdXNlIHRoZSBzb3VyY2UsIEx1a2UhCisKK0V2ZXJ5dGhpbmcgZWxzZSBpcyByZWplY3RlZCB3aXRoIGEgIkJBRCBPUFRJT04iIG1lc3NhZ2UuCisKK0ZvciBsZWdhY3kgSURFIFZMQiBob3N0IGRyaXZlcnMgKGFsaTE0eHgvZHRjMjI3OC9odDY1NjBiL3FkNjV4eC91bWM4NjcyKQoreW91IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgcHJvYmluZyBieSB1c2luZyAicHJvYmUiIGtlcm5lbCBwYXJhbWV0ZXIsCitpLmUuIHRvIGVuYWJsZSBwcm9iaW5nIGZvciBBTEkgTTE0eHggY2hpcHNldHMgKGFsaTE0eHggaG9zdCBkcml2ZXIpIHVzZToKKworKiAiYWxpMTR4eC5wcm9iZSIgYm9vdCBvcHRpb24gd2hlbiBhbGkxNHh4IGRyaXZlciBpcyBidWlsdC1pbiB0aGUga2VybmVsCisKKyogInByb2JlIiBtb2R1bGUgcGFyYW1ldGVyIHdoZW4gYWxpMTR4eCBkcml2ZXIgaXMgY29tcGlsZWQgYXMgbW9kdWxlCisgICgibW9kcHJvYmUgYWxpMTR4eCBwcm9iZSIpCisKK0Fsc28gZm9yIGxlZ2FjeSBDTUQ2NDAgaG9zdCBkcml2ZXIgKGNtZDY0MCkgeW91IG5lZWQgdG8gdXNlICJwcm9iZV92bGIiCitrZXJuZWwgcGFyZW1ldGVyIHRvIGVuYWJsZSBwcm9iaW5nIGZvciBWTEIgdmVyc2lvbiBvZiB0aGUgY2hpcHNldCAoUENJIG9uZXMKK2FyZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5KS4KKworWW91IGFsc28gbmVlZCB0byB1c2UgInByb2JlIiBrZXJuZWwgcGFyYW1ldGVyIGZvciBpZGUtNGRyaXZlcyBkcml2ZXIKKyhzdXBwb3J0IGZvciBJREUgZ2VuZXJpYyBjaGlwc2V0IHdpdGggZm91ciBkcml2ZXMgb24gb25lIHBvcnQpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTb21lIFRlcm1pbm9sb2d5CistLS0tLS0tLS0tLS0tLS0tCitJREUgPSBJbnRlZ3JhdGVkIERyaXZlIEVsZWN0cm9uaWNzLCBtZWFuaW5nIHRoYXQgZWFjaCBkcml2ZSBoYXMgYSBidWlsdC1pbgorY29udHJvbGxlciwgd2hpY2ggaXMgd2h5IGFuICJJREUgaW50ZXJmYWNlIGNhcmQiIGlzIG5vdCBhICJjb250cm9sbGVyIGNhcmQiLgorCitBVEEgPSBBVCAodGhlIG9sZCBJQk0gMjg2IGNvbXB1dGVyKSBBdHRhY2htZW50IEludGVyZmFjZSwgYSBkcmFmdCBBbWVyaWNhbgorTmF0aW9uYWwgU3RhbmRhcmQgZm9yIGNvbm5lY3RpbmcgaGFyZCBkcml2ZXMgdG8gUENzLiAgVGhpcyBpcyB0aGUgb2ZmaWNpYWwKK25hbWUgZm9yICJJREUiLgorCitUaGUgbGF0ZXN0IHN0YW5kYXJkcyBkZWZpbmUgc29tZSBlbmhhbmNlbWVudHMsIGtub3duIGFzIHRoZSBBVEEtNiBzcGVjLAord2hpY2ggZ3JldyBvdXQgb2YgdmVuZG9yLXNwZWNpZmljICJFbmhhbmNlZCBJREUiIChFSURFKSBpbXBsZW1lbnRhdGlvbnMuCisKK0FUQVBJID0gQVRBIFBhY2tldCBJbnRlcmZhY2UsIGEgbmV3IHByb3RvY29sIGZvciBjb250cm9sbGluZyB0aGUgZHJpdmVzLAorc2ltaWxhciB0byBTQ1NJIHByb3RvY29scywgY3JlYXRlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBBVEEyIHN0YW5kYXJkLgorQVRBUEkgaXMgY3VycmVudGx5IHVzZWQgZm9yIGNvbnRyb2xsaW5nIENEUk9NLCBUQVBFIGFuZCBGTE9QUFkgKFpJUCBvcgorTFMxMjAvMjQwKSBkZXZpY2VzLCByZW1vdmFibGUgUi9XIGNhcnRyaWRnZXMsIGFuZCBmb3IgaGlnaCBjYXBhY2l0eSBoYXJkIGRpc2sKK2RyaXZlcy4KKworbWxvcmRAcG9ib3guY29tCistLQorCitXZWQgQXByIDE3IDIyOjUyOjQ0IENFU1QgMjAwMiBlZGl0ZWQgYnkgTWFyY2luIERhbGVja2ksIHRoZSBjdXJyZW50CittYWludGFpbmVyLgorCitXZWQgQXVnIDIwIDIyOjMxOjI5IENFU1QgMjAwMyB1cGRhdGVkIGlkZSBib290IG9wdGlvbnMgdG8gY3VycmVudCBpZGUuYworY29tbWVudHMgYXQgMi42LjAtdGVzdDQgdGltZS4gTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWRlL3dhcm0tcGx1Zy1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL2lkZS93YXJtLXBsdWctaG93dG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODg1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lkZS93YXJtLXBsdWctaG93dG8udHh0CkBAIC0wLDAgKzEsMTMgQEAKKworSURFIHdhcm0tcGx1ZyBIT1dUTworPT09PT09PT09PT09PT09PT09PQorCitUbyB3YXJtLXBsdWcgZGV2aWNlcyBvbiBhIHBvcnQgJ2lkZXgnOgorCisjIGVjaG8gLW4gIjEiID4gL3N5cy9jbGFzcy9pZGVfcG9ydC9pZGV4L2RlbGV0ZV9kZXZpY2VzCisKK3VucGx1ZyBvbGQgZGV2aWNlKHMpIGFuZCBwbHVnIG5ldyBkZXZpY2UocykKKworIyBlY2hvIC1uICIxIiA+IC9zeXMvY2xhc3MvaWRlX3BvcnQvaWRleC9zY2FuCisKK2RvbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvbm90aWZpZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9ub3RpZmllci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxNzJjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvbm90aWZpZXIudHh0CkBAIC0wLDAgKzEsNTIgQEAKK0tleWJvYXJkIG5vdGlmaWVyCisKK09uZSBjYW4gdXNlIHJlZ2lzdGVyX2tleWJvYXJkX25vdGlmaWVyIHRvIGdldCBjYWxsZWQgYmFjayBvbiBrZXlib2FyZAorZXZlbnRzIChzZWUga2JkX2tleWNvZGUoKSBmdW5jdGlvbiBmb3IgZGV0YWlscykuICBUaGUgcGFzc2VkIHN0cnVjdHVyZSBpcwora2V5Ym9hcmRfbm90aWZpZXJfcGFyYW06CisKKy0gJ3ZjJyBhbHdheXMgcHJvdmlkZSB0aGUgVkMgZm9yIHdoaWNoIHRoZSBrZXlib2FyZCBldmVudCBhcHBsaWVzOworLSAnZG93bicgaXMgMSBmb3IgYSBrZXkgcHJlc3MgZXZlbnQsIDAgZm9yIGEga2V5IHJlbGVhc2U7CistICdzaGlmdCcgaXMgdGhlIGN1cnJlbnQgbW9kaWZpZXIgc3RhdGUsIG1hc2sgYml0IGluZGV4ZXMgYXJlIEtHXyo7CistICd2YWx1ZScgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBldmVudC4KKworLSBLQkRfS0VZQ09ERSBldmVudHMgYXJlIGFsd2F5cyBzZW50IGJlZm9yZSBvdGhlciBldmVudHMsIHZhbHVlIGlzIHRoZSBrZXljb2RlLgorLSBLQkRfVU5CT1VORF9LRVlDT0RFIGV2ZW50cyBhcmUgc2VudCBpZiB0aGUga2V5Y29kZSBpcyBub3QgYm91bmQgdG8gYSBrZXlzeW0uCisgIHZhbHVlIGlzIHRoZSBrZXljb2RlLgorLSBLQkRfVU5JQ09ERSBldmVudHMgYXJlIHNlbnQgaWYgdGhlIGtleWNvZGUgLT4ga2V5c3ltIHRyYW5zbGF0aW9uIHByb2R1Y2VkIGEKKyAgdW5pY29kZSBjaGFyYWN0ZXIuIHZhbHVlIGlzIHRoZSB1bmljb2RlIHZhbHVlLgorLSBLQkRfS0VZU1lNIGV2ZW50cyBhcmUgc2VudCBpZiB0aGUga2V5Y29kZSAtPiBrZXlzeW0gdHJhbnNsYXRpb24gcHJvZHVjZWQgYQorICBub24tdW5pY29kZSBjaGFyYWN0ZXIuIHZhbHVlIGlzIHRoZSBrZXlzeW0uCistIEtCRF9QT1NUX0tFWVNZTSBldmVudHMgYXJlIHNlbnQgYWZ0ZXIgdGhlIHRyZWF0bWVudCBvZiBub24tdW5pY29kZSBrZXlzeW1zLgorICBUaGF0IHBlcm1pdHMgb25lIHRvIGluc3BlY3QgdGhlIHJlc3VsdGluZyBMRURzIGZvciBpbnN0YW5jZS4KKworRm9yIGVhY2gga2luZCBvZiBldmVudCBidXQgdGhlIGxhc3QsIHRoZSBjYWxsYmFjayBtYXkgcmV0dXJuIE5PVElGWV9TVE9QIGluCitvcmRlciB0byAiZWF0IiB0aGUgZXZlbnQ6IHRoZSBub3RpZnkgbG9vcCBpcyBzdG9wcGVkIGFuZCB0aGUga2V5Ym9hcmQgZXZlbnQgaXMKK2Ryb3BwZWQuCisKK0luIGEgcm91Z2ggQyBzbmlwcGV0LCB3ZSBoYXZlOgorCitrYmRfa2V5Y29kZShrZXljb2RlKSB7CisJLi4uCisJcGFyYW1zLnZhbHVlID0ga2V5Y29kZTsKKwlpZiAobm90aWZpZXJfY2FsbF9jaGFpbihLQkRfS0VZQ09ERSwmcGFyYW1zKSA9PSBOT1RJRllfU1RPUCkKKwkgICAgfHwgIWJvdW5kKSB7CisJCW5vdGlmaWVyX2NhbGxfY2hhaW4oS0JEX1VOQk9VTkRfS0VZQ09ERSwmcGFyYW1zKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmljb2RlKSB7CisJCXBhcmFtLnZhbHVlID0gdW5pY29kZTsKKwkJaWYgKG5vdGlmaWVyX2NhbGxfY2hhaW4oS0JEX1VOSUNPREUsJnBhcmFtcykgPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CisJCWVtaXQgdW5pY29kZTsKKwkJcmV0dXJuOworCX0KKworCXBhcmFtcy52YWx1ZSA9IGtleXN5bTsKKwlpZiAobm90aWZpZXJfY2FsbF9jaGFpbihLQkRfS0VZU1lNLCZwYXJhbXMpID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisJYXBwbHkga2V5c3ltOworCW5vdGlmaWVyX2NhbGxfY2hhaW4oS0JEX1BPU1RfS0VZU1lNLCZwYXJhbXMpOworfQorCitOT1RFOiBUaGlzIG5vdGlmaWVyIGlzIHVzdWFsbHkgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2phX0pQL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9qYV9KUC9zdGFibGVfa2VybmVsX3J1bGVzLnR4dAppbmRleCAxN2Q4NzUxLi5iM2ZmZTg3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2phX0pQL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vamFfSlAvc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQKQEAgLTExLDY5ICsxMSw2OSBAQAogZmlsZSBhdCBmaXJzdC4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotw6PCgcKTw6PCgsKMw6PCgcKvw6PCgMKBCivjgZPjgozjga/jgIEKIGxpbnV4LTIuNi4yNC9Eb2N1bWVudGF0aW9uL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0Ci3Do8KBwq7DpcKSwozDqMKowrPDo8KBwqfDo8KBwpnDo8KAwoIKK+OBruWSjOios+OBp+OBmeOAggogCi3Dp8K/wrvDqMKowrPDpcKbwqPDpMK9wpPDr8K8wpogSkYgw6PCg8KXw6PCg8Ktw6PCgsK4w6PCgsKnw6PCgsKvw6PCg8KIIDwgaHR0cDovL3d3dy5saW51eC5vci5qcC9KRi8gPgotw6fCv8K7w6jCqMKzw6bCl8Klw6/CvMKaIDIwMDcvMTIvMzAKLcOnwr/Cu8OowqjCs8OowoDChcOvwrzCmiBUc3VnaWthenUgU2hpYmF0YSA8dHNoaWJhdGEgYXQgYWIgZG90IGpwIGRvdCBuZWMgZG90IGNvbT4KLcOmwqDCocOmwq3Co8OowoDChcOvwrzCmiDDpsKtwqbDpMK6wpXDpMK8wrjDpcKFwonDo8KBwpXDo8KCwpPDo8KAwoE8dGFrZWkgYXQgd2VibWFzdGVycyBkb3QgZ3IgZG90IGpwPgotICAgICAgICAgw6PCgcKLw6PCgcKtw6PCgcKTw6PCgcKVw6PCgsKTIChTZWlqaSBLYW5la28pIDxza2FuZWtvIGF0IGEyIGRvdCBtYm4gZG90IG9yIGRvdCBqcD4KLSAgICAgICAgIMOlwrDCj8Omwp7ClyDDqcKbwoXDpcKFwrjDo8KBwpXDo8KCwpMgKE1hc2Fub3JpIEtvYmF5YXNpKSA8emFwMDMyMTYgYXQgbmlmdHkgZG90IG5lIGRvdCBqcD4KLSAgICAgICAgIMOpwofCjsOlwo/Co8OjwoHClcOjwoLCkyAoS2VuamkgTm9ndWNoaSkgPHRva3lvMjQ2IGF0IGdtYWlsIGRvdCBjb20+Ci0gICAgICAgICDDp8Klwp7DpcKuwq7DpMK/wqHDpcKkwqrDqcKDwo7Do8KBwpXDo8KCwpMgPGppbiBhdCBsaWJqaW5ndSBkb3QganA+Civnv7voqLPlm6PkvZPvvJogSkYg44OX44Ot44K444Kn44Kv44OIIDwgaHR0cDovL3d3dy5saW51eC5vci5qcC9KRi8gPgor57+76Kiz5pel77yaIDIwMDcvMTIvMzAKK+e/u+ios+iAhe+8miBUc3VnaWthenUgU2hpYmF0YSA8dHNoaWJhdGEgYXQgYWIgZG90IGpwIGRvdCBuZWMgZG90IGNvbT4KK+agoeato+iAhe+8miDmrabkupXkvLjlhYnjgZXjgpPjgIE8dGFrZWkgYXQgd2VibWFzdGVycyBkb3QgZ3IgZG90IGpwPgorICAgICAgICAg44GL44Gt44GT44GV44KTIChTZWlqaSBLYW5la28pIDxza2FuZWtvIGF0IGEyIGRvdCBtYm4gZG90IG9yIGRvdCBqcD4KKyAgICAgICAgIOWwj+aelyDpm4XlhbjjgZXjgpMgKE1hc2Fub3JpIEtvYmF5YXNpKSA8emFwMDMyMTYgYXQgbmlmdHkgZG90IG5lIGRvdCBqcD4KKyAgICAgICAgIOmHjuWPo+OBleOCkyAoS2VuamkgTm9ndWNoaSkgPHRva3lvMjQ2IGF0IGdtYWlsIGRvdCBjb20+CisgICAgICAgICDnpZ7lrq7kv6HlpKrpg47jgZXjgpMgPGppbiBhdCBsaWJqaW5ndSBkb3QganA+CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLcOjwoHCmsOjwoHCo8OjwoHCqMOnwp/CpcOjwoLCisOjwoHCn8OjwoHCi8OjwoHCo8OjwoHCnyBMaW51eCAyLjYgLXN0YWJsZSDDo8KDwqrDo8KDwqrDo8KDwrzDo8KCwrnDo8KBwq7DpcKFwqjDo8KBwqYKK+OBmuOBo+OBqOefpeOCiuOBn+OBi+OBo+OBnyBMaW51eCAyLjYgLXN0YWJsZSDjg6rjg6rjg7zjgrnjga7lhajjgaYKIAotIi1zdGFibGUiIMOjwoPChMOjwoPCqsOjwoPCvMOjwoHCq8OjwoHCqcOjwoHCrsOjwoLCiMOjwoHChsOjwoHCqsOnwqjCrsOpwqHCnsOjwoHCrsOjwoPCkcOjwoPCg8OjwoPCgcOjwoHCjMOlwo/Cl8OjwoHCkcOlwoXCpcOjwoLCjMOjwoLCicOjwoLCjMOjwoLCi8OjwoHCi8OjwoDCgcOjwoHCqcOjwoHCrsOjwoLCiMOjwoHChsOjwoHCqgotw6PCgsKCw6PCgcKuw6PCgcKMw6XCj8KXw6PCgcKRw6XChcKlw6PCgsKMw6PCgsKJw6PCgsKMw6PCgcKqw6PCgcKEw6PCgcKLw6PCgMKBw6PCgcKrw6PCgcKkw6PCgcKEw6PCgcKmw6PCgcKuw6jCpsKPw6XCicKHLQorIi1zdGFibGUiIOODhOODquODvOOBq+OBqeOBruOCiOOBhuOBqueorumhnuOBruODkeODg+ODgeOBjOWPl+OBkeWFpeOCjOOCieOCjOOCi+OBi+OAgeOBqeOBruOCiOOBhuOBqgor44KC44Gu44GM5Y+X44GR5YWl44KM44KJ44KM44Gq44GE44GL44CB44Gr44Gk44GE44Gm44Gu6KaP5YmHLQogCi0gLSDDpsKYwo7Do8KCwonDo8KBwovDo8KBwqvDpsKtwqPDo8KBwpfDo8KBwo/Do8KAwoHDo8KDwobDo8KCwrnDo8KDwojDo8KBwpXDo8KCwozDo8KBwqbDo8KBwoTDo8KCwovDo8KCwoLDo8KBwq7Do8KBwqfDo8KBwqrDo8KBwpHDo8KCwozDo8KBwrDDo8KBwqrDo8KCwonDo8KBwqrDo8KBwoTDo8KAwoIKLSAtIMOmwpbCh8OowoTCiCjDpcKkwonDpsKbwrTDqMKhwozDo8KBwq7DpcKJwo3DpcK+wowpw6PCgsKSw6XCkMKrw6PCgsKBw6PCgcKmIDEwMCDDqMKhwozDo8KCwojDo8KCworDpcKkwqfDo8KBwo3Do8KBwo/Do8KBwqbDo8KBwq/Do8KBwoTDo8KBwpHDo8KBwqrDo8KBwoTDo8KAwoIKLSAtIMOjwoHCn8OjwoHCoMOkwrjCgMOlwoDCi8OjwoHCrsOjwoHCk8OjwoHCqMOjwoHCoMOjwoHCkcOjwoLCksOkwr/CrsOmwq3Co8OjwoHCl8OjwoHCpsOjwoHChMOjwoLCi8OjwoHCucOjwoHCjcOjwoDCggotIC0gw6fCmsKGw6PCgsKSw6bCgsKpw6PCgcK+w6PCgcKbw6PCgcKmw6PCgcKEw6PCgsKLw6bCnMKsw6fCicKpw6PCgcKuw6PCg8KQw6PCgsKww6PCgsKSw6TCv8Kuw6bCrcKjw6PCgcKXw6PCgcKqw6PCgcKRw6PCgsKMw6PCgcKww6PCgcKqw6PCgsKJw6PCgcKqw6PCgcKEw6PCgMKCKCLDo8KBwpPDo8KCwozDo8KBwq/Do8KDwpDDo8KCwrDDo8KBwqcKLSAgIMOjwoHCgsOjwoLCi8OjwoHCi8OjwoLCgsOjwoHCl8OjwoLCjMOjwoHCqsOjwoHChMOjwoHCjC4uLiIgw6PCgcKuw6PCgsKIw6PCgcKGw6PCgcKqw6PCgsKCw6PCgcKuw6PCgcKnw6PCgcKvw6PCgcKqw6PCgcKEKQotIC0gw6PCg8KTw6PCg8Krw6PCg8KJw6PCgsKow6PCg8Kpw6PCg8K8KENPTkZJR19CUk9LRU7Do8KBwqvDo8KBwqrDo8KBwqPDo8KBwqbDo8KBwoTDo8KCwovDo8KCwoLDo8KBwq7Do8KCwpLDqcKZwqTDo8KBwo8pLCBvb3BzLCDDo8KDwo/Do8KDwrPDo8KCwrDDo8KAwoHDo8KDwofDo8KDwrwKLSAgIMOjwoLCv8OnwqDCtMOlwqPCisOjwoDCgcOnwo/CvsOlwq7Cn8OjwoHCrsOjwoLCu8OjwoLCrcOjwoPCpcOjwoPCqsOjwoPChsOjwoLCo8OlwpXCj8OpwqHCjMOjwoDCgcOjwoHCncOjwoHCrsOkwrvCliAiw6PCgcKCw6PCgcKCw6PCgMKBw6PCgcKTw6PCgsKMw6PCgcKvw6PCg8KAw6PCg8Khw6PCgcKgw6PCgcKtIsOjwoHCqMOjwoHChMOjwoHChgotICAgw6PCgsKIw6PCgcKGw6PCgcKqw6PCgsKCw6PCgcKuw6PCgsKSw6TCv8Kuw6bCrcKjw6PCgcKXw6PCgcKqw6PCgcKRw6PCgsKMw6PCgcKww6PCgcKqw6PCgsKJw6PCgcKqw6PCgcKEw6PCgMKCw6fCn8Ktw6PCgcKPw6jCqMKAw6PCgcKIw6PCgcKww6PCgMKBw6nCh8KNw6XCpMKnw6PCgcKqw6XClcKPw6nCocKMw6PCgMKCCi0gLSDDo8KBwqnDo8KBwq7Do8KCwojDo8KBwobDo8KBwqvDp8KrwrbDpcKQwojDp8KKwrbDpsKFwovDo8KBwozDp8KZwrrDp8KUwp/Do8KBwpnDo8KCwovDo8KBwovDo8KBwq7DqMKqwqzDpsKYwo7Do8KCwoLDpMK4woDDp8K3wpLDo8KBwqvDpsKbwrjDo8KBwovDo8KCwozDo8KBwqbDo8KBwoTDo8KBwqrDo8KBwoTDqcKZwpDDo8KCworDo8KAwoEKLSAgICLDp8KQwobDqMKrwpbDp8KawoTDo8KBwqvDo8KBwq/Dp8KrwrbDpcKQwojDp8KKwrbDpsKFwovDo8KBwqvDo8KBwqrDo8KCwosiw6PCgsKIw6PCgcKGw6PCgcKqw6PCgsKCw6PCgcKuw6PCgcKvw6TCuMKNw6XCj8Kvw6PCgMKCCi0gLSDDo8KBwoTDo8KBwovDo8KBwqrDo8KCwovDpMK6wpvDp8K0wrDDo8KBwqrDpMK/wq7DpsKtwqPDo8KCwoLDpcKQwqvDo8KCwoHDo8KCwovDo8KBwpPDo8KBwqjDo8KBwq/Do8KBwqfDo8KBwo3Do8KBwqrDo8KBwoTDo8KAwoIow6PCgsK5w6PCg8Kaw6PCg8Krw6PCgcKuw6TCv8Kuw6bCrcKjw6PCgMKBw6fCqcK6w6fCmcK9w6PCgcKuw6PCgsKvw6PCg8Kqw6PCg8K8Ci0gICDDo8KDwrPDo8KCwqLDo8KDwoPDo8KDwpfDo8KBwqrDo8KBwqkpCi0gLSDDpcKvwr7DpcK/wpzDo8KBwpnDo8KCwovDo8KCwrXDo8KDwpbDo8KCwrfDo8KCwrnDo8KDwobDo8KDwqDDo8KDwqHDo8KDwrPDo8KDwobDo8KDworDo8KBwozDpcKPwpfDo8KBwpHDpcKFwqXDo8KCwozDo8KBwp/Do8KCwoLDo8KBwq7Do8KBwqfDo8KBwqrDo8KBwpHDo8KCwozDo8KBwrDDo8KBwqrDo8KCwonDo8KBwqrDo8KBwoTDo8KAwoIKLSAtIERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgw6PCgcKuw6jCpsKPw6XCicKHw6PCgcKrw6XCvsKTw6PCgcKjw6PCgcKfw6PCgsKCw6PCgcKuw6PCgcKnw6PCgcKqw6PCgcKRw6PCgsKMw6PCgcKww6PCgcKqw6PCgsKJw6PCgcKqw6PCgcKEw6PCgMKCCisgLSDmmI7jgonjgYvjgavmraPjgZfjgY/jgIHjg4bjgrnjg4jjgZXjgozjgabjgYTjgovjgoLjga7jgafjgarjgZHjgozjgbDjgarjgonjgarjgYTjgIIKKyAtIOaWh+iEiCjlpInmm7TooYzjga7liY3lvowp44KS5ZCr44KB44GmIDEwMCDooYzjgojjgorlpKfjgY3jgY/jgabjga/jgYTjgZHjgarjgYTjgIIKKyAtIOOBn+OBoOS4gOWAi+OBruOBk+OBqOOBoOOBkeOCkuS/ruato+OBl+OBpuOBhOOCi+OBueOBjeOAggorIC0g55qG44KS5oKp44G+44Gb44Gm44GE44KL5pys54mp44Gu44OQ44Kw44KS5L+u5q2j44GX44Gq44GR44KM44Gw44Gq44KJ44Gq44GE44CCKCLjgZPjgozjga/jg5DjgrDjgacKKyAgIOOBguOCi+OBi+OCguOBl+OCjOOBquOBhOOBjC4uLiIg44Gu44KI44GG44Gq44KC44Gu44Gn44Gv44Gq44GEKQorIC0g44OT44Or44OJ44Ko44Op44O8KENPTkZJR19CUk9LRU7jgavjgarjgaPjgabjgYTjgovjgoLjga7jgpLpmaTjgY8pLCBvb3BzLCDjg4/jg7PjgrDjgIHjg4fjg7wKKyAgIOOCv+egtOWjiuOAgeePvuWun+OBruOCu+OCreODpeODquODhuOCo+WVj+mhjOOAgeOBneOBruS7liAi44GC44GC44CB44GT44KM44Gv44OA44Oh44Gg44GtIuOBqOOBhOOBhgorICAg44KI44GG44Gq44KC44Gu44KS5L+u5q2j44GX44Gq44GR44KM44Gw44Gq44KJ44Gq44GE44CC55+t44GP6KiA44GI44Gw44CB6YeN5aSn44Gq5ZWP6aGM44CCCisgLSDjganjga7jgojjgYbjgavnq7blkIjnirbmhYvjgYznmbrnlJ/jgZnjgovjgYvjga7oqqzmmI7jgoLkuIDnt5Ljgavmm7jjgYvjgozjgabjgYTjgarjgYTpmZDjgorjgIEKKyAgICLnkIboq5bnmoTjgavjga/nq7blkIjnirbmhYvjgavjgarjgosi44KI44GG44Gq44KC44Gu44Gv5LiN5Y+v44CCCisgLSDjgYTjgYvjgarjgovkupvntLDjgarkv67mraPjgoLlkKvjgoHjgovjgZPjgajjga/jgafjgY3jgarjgYTjgIIo44K544Oa44Or44Gu5L+u5q2j44CB56m655m944Gu44Kv44Oq44O8CisgICDjg7PjgqLjg4Pjg5fjgarjgakpCisgLSDlr77lv5zjgZnjgovjgrXjg5bjgrfjgrnjg4bjg6Djg6Hjg7Pjg4bjg4rjgYzlj5fjgZHlhaXjgozjgZ/jgoLjga7jgafjgarjgZHjgozjgbDjgarjgonjgarjgYTjgIIKKyAtIERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMg44Gu6KaP5YmH44Gr5b6T44Gj44Gf44KC44Gu44Gn44Gq44GR44KM44Gw44Gq44KJ44Gq44GE44CCCiAKLS1zdGFibGUgw6PCg8KEw6PCg8Kqw6PCg8K8w6PCgcKrw6PCg8KRw6PCg8KDw6PCg8KBw6PCgsKSw6nCgMKBw6TCu8KYw6PCgcKZw6PCgsKLw6bCicKLw6fCtsKaw6PCgcKNLQorLXN0YWJsZSDjg4Tjg6rjg7zjgavjg5Hjg4Pjg4HjgpLpgIHku5jjgZnjgovmiYvntprjgY0tCiAKLSAtIMOkwrjCisOowqjCmMOjwoHCrsOowqbCj8OlwonCh8OjwoHCq8Olwr7Ck8OjwoHCo8OjwoHCpsOjwoHChMOjwoLCi8OjwoHCi8OjwoLCksOnwqLCusOowqrCjcOjwoHCl8OjwoHCn8Olwr7CjMOjwoHCq8OjwoDCgXN0YWJsZUBrZXJuZWwub3JnIMOjwoHCq8OjwoPCkcOjwoPCg8OjwoPCgQotICAgw6PCgsKSw6nCgMKBw6PCgsKLw6PCgMKCCi0gLSDDqcKAwoHDpMK/wqHDqMKAwoXDo8KBwq/Do8KDwpHDo8KDwoPDo8KDwoHDo8KBwozDo8KCwq3Do8KDwqXDo8KDwrzDo8KBwqvDpcKPwpfDo8KBwpHDpMK7wpjDo8KBwpHDo8KCwonDo8KCwozDo8KBwp/DqcKawpvDo8KBwqvDo8KBwq8gQUNLIMOjwoLCksOjwoDCgcOlwo3CtMOkwrjCi8OjwoHClcOjwoLCjMOjwoHCn8OlwqDCtMOlwpDCiAotICAgw6PCgcKrw6PCgcKvIE5BSyDDo8KCwpLDpcKPwpfDo8KBwpHDpcKPwpbDo8KCwovDo8KAwoLDo8KBwpPDo8KBwq7DpcKPwo3DpcK/wpzDo8KBwq/DqcKWwovDp8KZwrrDqMKAwoXDo8KBwp/Do8KBwqHDo8KBwq7Do8KCwrnDo8KCwrHDo8KCwrjDo8KDwqXDo8KDwrzDo8KDwqvDo8KBwqvDo8KCwojDo8KBwqPDo8KBwqbDo8KAwoHDpsKVwrAKLSAgIMOmwpfCpcOjwoHCi8OjwoHCi8OjwoLCi8OlwqDCtMOlwpDCiMOjwoHCjMOjwoHCgsOjwoLCi8OjwoDCggotIC0gw6PCgsKCw6PCgcKXw6XCj8KXw6PCgcKRw6XCj8KWw6PCgsKJw6PCgsKMw6PCgcKfw6PCgsKJw6PCgMKBw6PCg8KRw6PCg8KDw6PCg8KBw6PCgcKvw6TCu8KWw6PCgcKuw6nClsKLw6fCmcK6w6jCgMKFw6PCgcKfw6PCgcKhw6PCgcKuw6PCg8Ksw6PCg8KTw6PCg8Klw6PCg8K8w6PCgcKuw6PCgcKfw6PCgsKBw6PCgcKrCi0gICAtc3RhYmxlIMOjwoLCrcOjwoPCpcOjwoPCvMOjwoHCq8Oowr/CvcOlworCoMOjwoHClcOjwoLCjMOjwoLCi8OjwoDCggotIC0gw6PCgsK7w6PCgsKtw6PCg8Klw6PCg8Kqw6PCg8KGw6PCgsKjw6PCg8KRw6PCg8KDw6PCg8KBw6PCgcKvw6PCgcKTw6PCgcKuw6PCgsKow6PCgsKkw6PCg8Kqw6PCgsKiw6PCgsK5IChzdGFibGVAa2VybmVsLm9yZykgw6PCgcKrw6nCgMKBw6PCgsKJw6PCgsKMw6PCgsKLw6PCgcK5Ci0gICDDo8KBwo3Do8KBwqfDo8KBwq/Do8KBwqrDo8KBwo/Do8KAwoHDpMK7wqPDo8KCwo/Do8KCworDo8KBwqsgc2VjdXJpdHlAa2VybmVsLm9yZyDDo8KBwq7Do8KCwqLDo8KDwonDo8KDwqzDo8KCwrnDo8KBwqvDqcKAwoHDo8KCwonDo8KCwozDo8KCwovDo8KAwoIKKyAtIOS4iuiomOOBruimj+WJh+OBq+W+k+OBo+OBpuOBhOOCi+OBi+OCkueiuuiqjeOBl+OBn+W+jOOBq+OAgXN0YWJsZUBrZXJuZWwub3JnIOOBq+ODkeODg+ODgQorICAg44KS6YCB44KL44CCCisgLSDpgIHkv6HogIXjga/jg5Hjg4Pjg4HjgYzjgq3jg6Xjg7zjgavlj5fjgZHku5jjgZHjgonjgozjgZ/pmpvjgavjga8gQUNLIOOCkuOAgeWNtOS4i+OBleOCjOOBn+WgtOWQiAorICAg44Gr44GvIE5BSyDjgpLlj5fjgZHlj5bjgovjgILjgZPjga7lj43lv5zjga/plovnmbrogIXjgZ/jgaHjga7jgrnjgrHjgrjjg6Xjg7zjg6vjgavjgojjgaPjgabjgIHmlbAKKyAgIOaXpeOBi+OBi+OCi+WgtOWQiOOBjOOBguOCi+OAggorIC0g44KC44GX5Y+X44GR5Y+W44KJ44KM44Gf44KJ44CB44OR44OD44OB44Gv5LuW44Gu6ZaL55m66ICF44Gf44Gh44Gu44Os44OT44Ol44O844Gu44Gf44KB44GrCisgICAtc3RhYmxlIOOCreODpeODvOOBq+i/veWKoOOBleOCjOOCi+OAggorIC0g44K744Kt44Ol44Oq44OG44Kj44OR44OD44OB44Gv44GT44Gu44Ko44Kk44Oq44Ki44K5IChzdGFibGVAa2VybmVsLm9yZykg44Gr6YCB44KJ44KM44KL44G5CisgICDjgY3jgafjga/jgarjgY/jgIHku6Pjgo/jgorjgasgc2VjdXJpdHlAa2VybmVsLm9yZyDjga7jgqLjg4njg6zjgrnjgavpgIHjgonjgozjgovjgIIKIAotw6PCg8Ksw6PCg8KTw6PCg8Klw6PCg8K8w6PCgsK1w6PCgsKkw6PCgsKvw6PCg8KrLQor44Os44OT44Ol44O844K144Kk44Kv44OrLQogCi0gLSAtc3RhYmxlIMOjwoPCocOjwoPCs8OjwoPChsOjwoPCisOjwoHCjMOjwoPCrMOjwoPCk8OjwoPCpcOjwoPCvMOjwoLCtcOjwoLCpMOjwoLCr8OjwoPCq8OjwoLCksOmwrHCusOjwoLCgcOjwoLCi8OjwoHCqMOjwoHCjcOjwoDCgcOjwoPCkcOjwoPCg8OjwoPCgcOjwoHCr8OjwoPCrMOjwoPCk8OjwoPCpcOjwoPCvMOlwqfClAotICAgw6XCk8Khw6TCvMKaw6PCgcKow6PCg8KRw6PCg8KDw6PCg8KBw6PCgcKMw6XCvcKxw6nCn8K/w6PCgcKZw6PCgsKLw6nCoMKYw6XCn8Kfw6PCgcKuw6PCg8Khw6PCg8Kzw6PCg8KGw6PCg8KKKMOmwo/CkMOkwr7Cm8OowoDChcOjwoHCjMOjwoHCncOjwoHCrsOpwqDCmMOlwp/Cn8OjwoHCrsOjwoPCocOjwoPCs8OjwoPChsOjwoPCisOjwoHCp8OnwoTCoQotICAgw6PCgcKEw6nCmcKQw6PCgsKKKcOjwoHCq8OpwoDCgcOjwoLCicOjwoLCjMOjwoDCgWxpbnV4LWtlcm5lbCDDo8KDwqHDo8KDwrzDo8KDwqrDo8KDwrPDo8KCwrDDo8KDwqrDo8KCwrnDo8KDwojDo8KBwqtDQ8OjwoHClcOjwoLCjMOjwoLCi8OjwoDCggotIC0gw6PCg8Ksw6PCg8KTw6PCg8Klw6PCg8K8w6XCp8KUw6XCk8Khw6TCvMKaw6PCgcKvIDQ4w6bCmcKCw6nClsKTw6PCgcKuw6nClsKTw6PCgcKrIEFDSyDDo8KBwosgTkFLIMOjwoLCksOlwofCusOjwoHCmcOjwoDCggotIC0gw6PCgsKCw6PCgcKXw6PCg8KRw6PCg8KDw6PCg8KBw6PCgcKMw6XCp8KUw6XCk8Khw6TCvMKaw6PCgcKuw6PCg8Khw6PCg8Kzw6PCg8KQw6PCgcKLw6PCgsKJw6XCjcK0w6TCuMKLw6PCgsKMw6PCgsKLw6PCgcKLw6PCgMKBw6PCg8Khw6PCg8Kzw6PCg8KGw6PCg8KKw6nCgcKUw6PCgsKEw6PCg8Khw6PCg8Kzw6PCg8KQw6PCgcKMw6bCsMKXw6TCu8KYCi0gICDDo8KBwovDo8KBwqrDo8KBwovDo8KBwqPDo8KBwp/DpcKVwo/DqcKhwozDo8KBwozDpsKMwoHDo8KBwqHDo8KBwoLDo8KBwozDo8KCworDo8KAwoFsaW51eC1rZXJuZWwgw6PCg8Khw6PCg8Kzw6PCg8KQw6PCgcKMw6PCg8KRw6PCg8KDw6PCg8KBw6PCgcKrw6fClcKww6jCrcKww6PCgsKSw6XClMKxw6PCgcKICi0gICDDo8KBwp/DpcKgwrTDpcKQwojDo8KBwqvDo8KBwq/Do8KAwoHDo8KDwpHDo8KDwoPDo8KDwoHDo8KBwq/Do8KCwq3Do8KDwqXDo8KDwrzDo8KBwovDo8KCwonDpcKJworDqcKZwqTDo8KBwpXDo8KCwozDo8KCwovDo8KAwoIKLSAtIMOjwoPCrMOjwoPCk8OjwoPCpcOjwoPCvMOjwoLCtcOjwoLCpMOjwoLCr8OjwoPCq8OjwoHCrsOmwpzCgMOlwr7CjMOjwoHCq8OjwoDCgUFDSyDDo8KCwpLDpcKPwpfDo8KBwpHDo8KBwp/Do8KDwpHDo8KDwoPDo8KDwoHDo8KBwq/DpsKcwoDDpsKWwrDDo8KBwq4gLXN0YWJsZSDDo8KDwqrDo8KDwqrDo8KDwrwKLSAgIMOjwoLCucOjwoHCq8Oowr/CvcOlworCoMOjwoHClcOjwoLCjMOjwoDCgcOjwoHCncOjwoHCrsOlwr7CjMOjwoHCq8OmwpbCsMOjwoHCl8OjwoHChCAtc3RhYmxlIMOjwoPCqsOjwoPCqsOjwoPCvMOjwoLCucOjwoHCjMOowqHCjMOjwoLCj8OjwoLCjMOjwoLCi8OjwoDCggotIC0gw6PCgsK7w6PCgsKtw6PCg8Klw6PCg8Kqw6PCg8KGw6PCgsKjw6PCg8KRw6PCg8KDw6PCg8KBw6PCgcKvw6PCgMKBw6nCgMKaw6XCuMK4w6PCgcKuw6PCg8Ksw6PCg8KTw6PCg8Klw6PCg8K8w6PCgsK1w6PCgsKkw6PCgsKvw6PCg8Krw6PCgsKSw6nCgMKaw6PCgsKJw6PCgcKaw6PCgMKBw6PCgsK7w6PCgsKtw6PCg8Klw6PCg8Kqw6PCg8KGw6PCgsKjCi0gICDDo8KCwqvDo8KDwrzDo8KDwo3Do8KDwqvDo8KDwoHDo8KDwrzDo8KDwqDDo8KBwovDo8KCwonDp8KbwrTDpsKOwqUgLXN0YWJsZSDDo8KDwoTDo8KDwqrDo8KDwrzDo8KBwqvDpcKPwpfDo8KBwpHDpMK7wpjDo8KBwpHDo8KCwonDo8KCwozDo8KCwovDo8KAwoIKLSAgIMOjwoHCk8OjwoHCrsOmwonCi8OnwrbCmsOjwoHCjcOjwoHCrsOowqnCs8OnwrTCsMOjwoHCq8OjwoHCpMOjwoHChMOjwoHCpsOjwoHCryBrZXJuZWwgc2VjdXJpdHkgw6PCg8KBw6PCg8K8w6PCg8Kgw6PCgcKrw6XClcKPw6PCgcKEw6XCkMKIw6PCgsKPw6PCgcKbw6PCgsKLw6PCgcKTw6PCgcKow6PCgMKCCisgLSAtc3RhYmxlIOODoeODs+ODhuODiuOBjOODrOODk+ODpeODvOOCteOCpOOCr+ODq+OCkuaxuuOCgeOCi+OBqOOBjeOAgeODkeODg+ODgeOBr+ODrOODk+ODpeODvOWnlAorICAg5ZOh5Lya44Go44OR44OD44OB44GM5b2x6Z+/44GZ44KL6aCY5Z+f44Gu44Oh44Oz44OG44OKKOaPkOS+m+iAheOBjOOBneOBrumgmOWfn+OBruODoeODs+ODhuODiuOBp+eEoQorICAg44GE6ZmQ44KKKeOBq+mAgeOCieOCjOOAgWxpbnV4LWtlcm5lbCDjg6Hjg7zjg6rjg7PjgrDjg6rjgrnjg4jjgatDQ+OBleOCjOOCi+OAggorIC0g44Os44OT44Ol44O85aeU5ZOh5Lya44GvIDQ45pmC6ZaT44Gu6ZaT44GrIEFDSyDjgYsgTkFLIOOCkuWHuuOBmeOAggorIC0g44KC44GX44OR44OD44OB44GM5aeU5ZOh5Lya44Gu44Oh44Oz44OQ44GL44KJ5Y205LiL44GV44KM44KL44GL44CB44Oh44Oz44OG44OK6YGU44KE44Oh44Oz44OQ44GM5rCX5LuYCisgICDjgYvjgarjgYvjgaPjgZ/llY/poYzjgYzmjIHjgaHjgYLjgYzjgorjgIFsaW51eC1rZXJuZWwg44Oh44Oz44OQ44GM44OR44OD44OB44Gr55Ww6K2w44KS5ZSx44GICisgICDjgZ/loLTlkIjjgavjga/jgIHjg5Hjg4Pjg4Hjga/jgq3jg6Xjg7zjgYvjgonliYrpmaTjgZXjgozjgovjgIIKKyAtIOODrOODk+ODpeODvOOCteOCpOOCr+ODq+OBruacgOW+jOOBq+OAgUFDSyDjgpLlj5fjgZHjgZ/jg5Hjg4Pjg4Hjga/mnIDmlrDjga4gLXN0YWJsZSDjg6rjg6rjg7wKKyAgIOOCueOBq+i/veWKoOOBleOCjOOAgeOBneOBruW+jOOBq+aWsOOBl+OBhCAtc3RhYmxlIOODquODquODvOOCueOBjOihjOOCj+OCjOOCi+OAggorIC0g44K744Kt44Ol44Oq44OG44Kj44OR44OD44OB44Gv44CB6YCa5bi444Gu44Os44OT44Ol44O844K144Kk44Kv44Or44KS6YCa44KJ44Ga44CB44K744Kt44Ol44Oq44OG44KjCisgICDjgqvjg7zjg43jg6vjg4Hjg7zjg6DjgYvjgonnm7TmjqUgLXN0YWJsZSDjg4Tjg6rjg7zjgavlj5fjgZHku5jjgZHjgonjgozjgovjgIIKKyAgIOOBk+OBruaJi+e2muOBjeOBruips+e0sOOBq+OBpOOBhOOBpuOBryBrZXJuZWwgc2VjdXJpdHkg44OB44O844Og44Gr5ZWP44GE5ZCI44KP44Gb44KL44GT44Go44CCCiAKLcOjwoPCrMOjwoPCk8OjwoPCpcOjwoPCvMOlwqfClMOlwpPCocOkwrzCmi0KK+ODrOODk+ODpeODvOWnlOWToeS8mi0KIAotIC0gw6PCgcKTw6PCgcKuw6XCp8KUw6XCk8Khw6TCvMKaw6PCgcKvw6PCgMKBw6PCgcKTw6PCgcKuw6PCgsK/w6PCgsK5w6PCgsKvw6PCgcKrw6PCgcKkw6PCgcKEw6PCgcKmw6bCtMK7w6XCi8KVw6PCgcKZw6PCgsKLw6XCpMKaw6PCgcKPw6PCgcKuw6PCg8Kcw6PCg8Kpw6PCg8Kzw6PCg8KGw6PCgsKjw6PCgsKiw6PCgcKow6PCgMKBw6XCsMKRw6bClcKww6PCgcKuCi0gICDDqcKdwp7Do8KDwpzDo8KDwqnDo8KDwrPDo8KDwobDo8KCwqPDo8KCwqLDo8KBwq7Do8KCwqvDo8KDwrzDo8KDwo3Do8KDwqvDqcKWwovDp8KZwrrDqMKAwoXDqcKBwpTDo8KBwqfDpsKnwovDpsKIwpDDo8KBwpXDo8KCwozDo8KBwqbDo8KBwoTDo8KCwovDo8KAwoIKKyAtIOOBk+OBruWnlOWToeS8muOBr+OAgeOBk+OBruOCv+OCueOCr+OBq+OBpOOBhOOBpua0u+WLleOBmeOCi+WkmuOBj+OBruODnOODqeODs+ODhuOCo+OCouOBqOOAgeWwkeaVsOOBrgorICAg6Z2e44Oc44Op44Oz44OG44Kj44Ki44Gu44Kr44O844ON44Or6ZaL55m66ICF6YGU44Gn5qeL5oiQ44GV44KM44Gm44GE44KL44CCCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYTRmYzdmYy4uYmY2MzAzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQkJc3RyaWN0IC0tIEJlIGxlc3MgdG9sZXJhbnQgb2YgcGxhdGZvcm1zIHRoYXQgYXJlIG5vdAogCQkJCXN0cmljdGx5IEFDUEkgc3BlY2lmaWNhdGlvbiBjb21wbGlhbnQuCiAKLQkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vcG0udHh0LCBwY2k9bm9hY3BpCisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3Bvd2VyL3BtLnR4dCwgcGNpPW5vYWNwaQogCiAJYWNwaV9hcGljX2luc3RhbmNlPQlbQUNQSSwgSU9BUElDXQogCQkJRm9ybWF0OiA8aW50PgpAQCAtMTcwLDE2ICsxNzAsOCBAQAogCWFjcGlfaXJxX2lzYT0JW0hXLEFDUEldIElmIGlycV9iYWxhbmNlLCBtYXJrIGxpc3RlZCBJUlFzIHVzZWQgYnkgSVNBCiAJCQlGb3JtYXQ6IDxpcnE+LDxpcnE+Li4uCiAKLQlhY3BpX25ld19wdHNfb3JkZXJpbmcgW0hXLEFDUEldCi0JCQlFbmZvcmNlIHRoZSBBQ1BJIDIuMCBvcmRlcmluZyBvZiB0aGUgX1BUUyBjb250cm9sCi0JCQltZXRob2Qgd3J0IHB1dHRpbmcgZGV2aWNlcyBpbnRvIGxvdyBwb3dlciBzdGF0ZXMKLQkJCWRlZmF1bHQ6IHByZSBBQ1BJIDIuMCBvcmRlcmluZyBvZiBfUFRTCi0KIAlhY3BpX25vX2F1dG9fc3NkdAlbSFcsQUNQSV0gRGlzYWJsZSBhdXRvbWF0aWMgbG9hZGluZyBvZiBTU0RUCiAKLQlhY3BpX25vX2luaXRyZF9vdmVycmlkZQlbS05MLEFDUEldCi0JCQlEaXNhYmxlIGxvYWRpbmcgY3VzdG9tIEFDUEkgdGFibGVzIGZyb20gdGhlIGluaXRyYW1mcwotCiAJYWNwaV9vc19uYW1lPQlbSFcsQUNQSV0gVGVsbCBBQ1BJIEJJT1MgdGhlIG5hbWUgb2YgdGhlIE9TCiAJCQlGb3JtYXQ6IFRvIHNwb29mIGFzIFdpbmRvd3MgOTg6ID0iTWljcm9zb2Z0IFdpbmRvd3MiCiAKQEAgLTM3NCw2ICszNjYsMTIgQEAKIAkJCXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGF0IHRoZSBjb3JyZWN0IHNpemUgc2hvdWxkIGJlLgogCQkJVGhpcyBvcHRpb24gcHJvdmlkZXMgYW4gb3ZlcnJpZGUgZm9yIHRoZXNlIHNpdHVhdGlvbnMuCiAKKwlzZWN1cml0eT0JW1NFQ1VSSVRZXSBDaG9vc2UgYSBzZWN1cml0eSBtb2R1bGUgdG8gZW5hYmxlIGF0IGJvb3QuCisJCQlJZiB0aGlzIGJvb3QgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIG9ubHkgdGhlIGZpcnN0CisJCQlzZWN1cml0eSBtb2R1bGUgYXNraW5nIGZvciBzZWN1cml0eSByZWdpc3RyYXRpb24gd2lsbCBiZQorCQkJbG9hZGVkLiBBbiBpbnZhbGlkIHNlY3VyaXR5IG1vZHVsZSBuYW1lIHdpbGwgYmUgdHJlYXRlZAorCQkJYXMgaWYgbm8gbW9kdWxlIGhhcyBiZWVuIGNob3Nlbi4KKwogCWNhcGFiaWxpdHkuZGlzYWJsZT0KIAkJCVtTRUNVUklUWV0gRGlzYWJsZSBjYXBhYmlsaXRpZXMuICBUaGlzIHdvdWxkIG5vcm1hbGx5CiAJCQliZSB1c2VkIG9ubHkgaWYgYW4gYWx0ZXJuYXRpdmUgc2VjdXJpdHkgbW9kZWwgaXMgdG8gYmUKQEAgLTM4Myw2ICszODEsMTAgQEAKIAljY3dfdGltZW91dF9sb2cgW1MzOTBdCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPIGZvciBkZXRhaWxzLgogCisJY2dyb3VwX2Rpc2FibGU9IFtLTkxdIERpc2FibGUgYSBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIKKwkJCUZvcm1hdDoge25hbWUgb2YgdGhlIGNvbnRyb2xsZXIocykgdG8gZGlzYWJsZX0KKwkJCQl7Q3VycmVudGx5IHN1cHBvcnRlZCBjb250cm9sbGVycyAtICJtZW1vcnkifQorCiAJY2hlY2tyZXFwcm90CVtTRUxJTlVYXSBTZXQgaW5pdGlhbCBjaGVja3JlcXByb3QgZmxhZyB2YWx1ZS4KIAkJCUZvcm1hdDogeyAiMCIgfCAiMSIgfQogCQkJU2VlIHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZyBoZWxwIHRleHQuCkBAIC03MTIsNyArNzE0LDcgQEAKIAkJCUZvcm1hdDogPGN5bD4sPGhlYWQ+LDxzZWN0PgogCiAJaGQ/PQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtCi0JaGQ/bHVuPQkJU2VlIERvY3VtZW50YXRpb24vaWRlLnR4dC4KKwloZD9sdW49CQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dC4KIAogCWhpZ2htZW09bm5bS01HXQlbS05MLEJPT1RdIGZvcmNlcyB0aGUgaGlnaG1lbSB6b25lIHRvIGhhdmUgYW4gZXhhY3QKIAkJCXNpemUgb2YgPG5uPi4gVGhpcyB3b3JrcyBldmVuIG9uIGJveGVzIHRoYXQgaGF2ZSBubwpAQCAtNzM1LDYgKzczNyw4IEBACiAJCQkgICAgIChEb24ndCBhdHRlbXB0IHRvIGJsaW5rIHRoZSBsZWRzKQogCWk4MDQyLm5vYXV4CVtIV10gRG9uJ3QgY2hlY2sgZm9yIGF1eGlsaWFyeSAoPT0gbW91c2UpIHBvcnQKIAlpODA0Mi5ub2tiZAlbSFddIERvbid0IGNoZWNrL2NyZWF0ZSBrZXlib2FyZCBwb3J0CisJaTgwNDIubm9sb29wCVtIV10gRGlzYWJsZSB0aGUgQVVYIExvb3BiYWNrIGNvbW1hbmQgd2hpbGUgcHJvYmluZworCQkJICAgICBmb3IgdGhlIEFVWCBwb3J0CiAJaTgwNDIubm9tdXgJW0hXXSBEb24ndCBjaGVjayBwcmVzZW5jZSBvZiBhbiBhY3RpdmUgbXVsdGlwbGV4aW5nCiAJCQkgICAgIGNvbnRyb2xsZXIKIAlpODA0Mi5ub3BucAlbSFddIERvbid0IHVzZSBBQ1BJUG5QIC8gUG5QQklPUyB0byBkaXNjb3ZlciBLQkQvQVVYCkBAIC03NjUsMTUgKzc2OSwxNSBAQAogCQkJRm9ybWF0OiA8aW8+Wyw8bWVtYmFzZT5bLDxpY25faWQ+Wyw8aWNuX2lkMj5dXV0KIAogCWlkZT0JCVtIV10gKEUpSURFIHN1YnN5c3RlbQotCQkJRm9ybWF0OiBpZGU9bm9kbWEgb3IgaWRlPWRvdWJsZXIgb3IgaWRlPXJldmVyc2UKLQkJCVNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQuCisJCQlGb3JtYXQ6IGlkZT1ub2RtYSBvciBpZGU9ZG91YmxlcgorCQkJU2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQuCiAKIAlpZGU/PQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtCi0JCQlGb3JtYXQ6IGlkZT89bm9wcm9iZSBvciBjaGlwc2V0IHNwZWNpZmljIHBhcmFtZXRlcnMuCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LgorCQkJRm9ybWF0OiBpZGU/PWF0YTY2IG9yIGNoaXBzZXQgc3BlY2lmaWMgcGFyYW1ldGVycy4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0LgogCiAJaWRlYnVzPQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtIC0gVkxCL1BDSSBidXMgc3BlZWQKLQkJCVNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQuCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dC4KIAogCWlkbGU9CQlbWDg2XQogCQkJRm9ybWF0OiBpZGxlPXBvbGwgb3IgaWRsZT1td2FpdApAQCAtODE0LDYgKzgxOCwxOSBAQAogCiAJaW50dGVzdD0JW0lBNjRdCiAKKwlpb21tdT0JCVt4ODZdCisJCW9mZgorCQlmb3JjZQorCQlub2ZvcmNlCisJCWJpb21lcmdlCisJCXBhbmljCisJCW5vcGFuaWMKKwkJbWVyZ2UKKwkJbm9tZXJnZQorCQlmb3JjZXNhYworCQlzb2Z0CisKKwogCWludGVsX2lvbW11PQlbRE1BUl0gSW50ZWwgSU9NTVUgZHJpdmVyIChETUFSKSBvcHRpb24KIAkJb2ZmCiAJCQlEaXNhYmxlIGludGVsIGlvbW11IGRyaXZlci4KQEAgLTgzMCw2ICs4NDcsMTAgQEAKIAkJCXRoYW4gMzIgYml0IGFkZHJlc3NpbmcuIFRoZSBkZWZhdWx0IGlzIHRvIGxvb2sKIAkJCWZvciB0cmFuc2xhdGlvbiBiZWxvdyAzMiBiaXQgYW5kIGlmIG5vdCBhdmFpbGFibGUKIAkJCXRoZW4gbG9vayBpbiB0aGUgaGlnaGVyIHJhbmdlLgorCQlzdHJpY3QgW0RlZmF1bHQgT2ZmXQorCQkJV2l0aCB0aGlzIG9wdGlvbiBvbiBldmVyeSB1bm1hcF9zaW5nbGUgb3BlcmF0aW9uIHdpbGwKKwkJCXJlc3VsdCBpbiBhIGhhcmR3YXJlIElPVExCIGZsdXNoIG9wZXJhdGlvbiBhcyBvcHBvc2VkCisJCQl0byBiYXRjaGluZyB0aGVtIGZvciBwZXJmb3JtYW5jZS4KIAogCWlvX2RlbGF5PQlbWDg2LTMyLFg4Ni02NF0gSS9PIGRlbGF5IG1ldGhvZAogCQkweDgwCkBAIC04NDYsNyArODY3LDcgQEAKIAkJCWFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMuCiAKIAlpcD0JCVtJUF9QTlBdCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dC4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0LgogCiAJaXAyPQkJW0hXXSBTZXQgSU8vSVJRIHBhaXJzIGZvciB1cCB0byA0IEludGVsbGlQb3J0IGJvYXJkcwogCQkJU2VlIGNvbW1lbnQgYmVmb3JlIGlwMl9zZXR1cCgpIGluCkBAIC05MzAsOCArOTUxLDE1IEBACiAJa3N0YWNrPU4JW1g4Ni0zMixYODYtNjRdIFByaW50IE4gd29yZHMgZnJvbSB0aGUga2VybmVsIHN0YWNrCiAJCQlpbiBvb3BzIGR1bXBzLgogCisJa2dkYm9jPQkJW0hXXSBrZ2RiIG92ZXIgY29uc29sZXMuCisJCQlSZXF1aXJlcyBhIHR0eSBkcml2ZXIgdGhhdCBzdXBwb3J0cyBjb25zb2xlIHBvbGxpbmcuCisJCQkob25seSBzZXJpYWwgc3Vwb3J0ZWQgZm9yIG5vdykKKwkJCUZvcm1hdDogPHNlcmlhbF9kZXZpY2U+WyxiYXVkXQorCiAJbDJjcj0JCVtQUENdCiAKKwlsM2NyPQkJW1BQQ10KKwogCWxhcGljCQlbWDg2LTMyLEFQSUNdIEVuYWJsZSB0aGUgbG9jYWwgQVBJQyBldmVuIGlmIEJJT1MKIAkJCWRpc2FibGVkIGl0LgogCkBAIC05NTAsNiArOTc4LDQxIEBACiAJCQl3aGVuIHNldC4KIAkJCUZvcm1hdDogPGludD4KIAorCWxpYmF0YS5mb3JjZT0JW0xJQkFUQV0gRm9yY2UgY29uZmlndXJhdGlvbnMuICBUaGUgZm9ybWF0IGlzIGNvbW1hCisJCQlzZXBhcmF0ZWQgbGlzdCBvZiAiW0lEOl1WQUwiIHdoZXJlIElEIGlzCisJCQlQT1JUWzpERVZJQ0VdLiAgUE9SVCBhbmQgREVWSUNFIGFyZSBkZWNpbWFsIG51bWJlcnMKKwkJCW1hdGNoaW5nIHBvcnQsIGxpbmsgb3IgZGV2aWNlLiAgQmFzaWNhbGx5LCBpdCBtYXRjaGVzCisJCQl0aGUgQVRBIElEIHN0cmluZyBwcmludGVkIG9uIGNvbnNvbGUgYnkgbGliYXRhLiAgSWYKKwkJCXRoZSB3aG9sZSBJRCBwYXJ0IGlzIG9taXR0ZWQsIHRoZSBsYXN0IFBPUlQgYW5kIERFVklDRQorCQkJdmFsdWVzIGFyZSB1c2VkLiAgSWYgSUQgaGFzbid0IGJlZW4gc3BlY2lmaWVkIHlldCwgdGhlCisJCQljb25maWd1cmF0aW9uIGFwcGxpZXMgdG8gYWxsIHBvcnRzLCBsaW5rcyBhbmQgZGV2aWNlcy4KKworCQkJSWYgb25seSBERVZJQ0UgaXMgb21pdHRlZCwgdGhlIHBhcmFtZXRlciBhcHBsaWVzIHRvCisJCQl0aGUgcG9ydCBhbmQgYWxsIGxpbmtzIGFuZCBkZXZpY2VzIGJlaGluZCBpdC4gIERFVklDRQorCQkJbnVtYmVyIG9mIDAgZWl0aGVyIHNlbGVjdHMgdGhlIGZpcnN0IGRldmljZSBvciB0aGUKKwkJCWZpcnN0IGZhbi1vdXQgbGluayBiZWhpbmQgUE1QIGRldmljZS4gIEl0IGRvZXMgbm90CisJCQlzZWxlY3QgdGhlIGhvc3QgbGluay4gIERFVklDRSBudW1iZXIgb2YgMTUgc2VsZWN0cyB0aGUKKwkJCWhvc3QgbGluayBhbmQgZGV2aWNlIGF0dGFjaGVkIHRvIGl0LgorCisJCQlUaGUgVkFMIHNwZWNpZmllcyB0aGUgY29uZmlndXJhdGlvbiB0byBmb3JjZS4gIEFzIGxvbmcKKwkJCWFzIHRoZXJlJ3Mgbm8gYW1iaWd1aXR5IHNob3J0Y3V0IG5vdGF0aW9uIGlzIGFsbG93ZWQuCisJCQlGb3IgZXhhbXBsZSwgYm90aCAxLjUgYW5kIDEuNUcgd291bGQgd29yayBmb3IgMS41R2Jwcy4KKwkJCVRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgY2FuIGJlIGZvcmNlZC4KKworCQkJKiBDYWJsZSB0eXBlOiA0MGMsIDgwYywgc2hvcnQ0MGMsIHVuaywgaWduIG9yIHNhdGEuCisJCQkgIEFueSBJRCB3aXRoIG1hdGNoaW5nIFBPUlQgaXMgdXNlZC4KKworCQkJKiBTQVRBIGxpbmsgc3BlZWQgbGltaXQ6IDEuNUdicHMgb3IgMy4wR2Jwcy4KKworCQkJKiBUcmFuc2ZlciBtb2RlOiBwaW9bMC03XSwgbXdkbWFbMC00XSBhbmQgdWRtYVswLTddLgorCQkJICB1ZG1hWy9dWzE2LDI1LDMzLDQ0LDY2LDEwMCwxMzNdIG5vdGF0aW9uIGlzIGFsc28KKwkJCSAgYWxsb3dlZC4KKworCQkJKiBbbm9dbmNxOiBUdXJuIG9uIG9yIG9mZiBOQ1EuCisKKwkJCUlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGluZyBjb25maWd1cmF0aW9ucyBjaGFuZ2luZworCQkJdGhlIHNhbWUgYXR0cmlidXRlLCB0aGUgbGFzdCBvbmUgaXMgdXNlZC4KKwogCWxvYWRfcmFtZGlzaz0JW1JBTV0gTGlzdCBvZiByYW1kaXNrcyB0byBsb2FkIGZyb20gZmxvcHB5CiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dC4KIApAQCAtMTA1Niw4ICsxMTE5LDYgQEAKIAkJCVtTQ1NJXSBNYXhpbXVtIG51bWJlciBvZiBMVU5zIHJlY2VpdmVkLgogCQkJU2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMTYzODQuCiAKLQltY2EtcGVudGl1bQlbQlVHUz1YODYtMzJdCi0KIAltY2F0ZXN0PQlbSUEtNjRdCiAKIAltY2UJCVtYODYtMzJdIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uCkBAIC0xMDk4LDYgKzExNTksMTUgQEAKIAltZW1tYXA9bm5bS01HXSRzc1tLTUddCiAJCQlbS05MLEFDUEldIE1hcmsgc3BlY2lmaWMgbWVtb3J5IGFzIHJlc2VydmVkLgogCQkJUmVnaW9uIG9mIG1lbW9yeSB0byBiZSB1c2VkLCBmcm9tIHNzIHRvIHNzK25uLgorCQkJRXhhbXBsZTogRXhjbHVkZSBtZW1vcnkgZnJvbSAweDE4NjkwMDAwLTB4MTg2OWZmZmYKKwkJCSAgICAgICAgIG1lbW1hcD02NEskMHgxODY5MDAwMAorCQkJICAgICAgICAgb3IKKwkJCSAgICAgICAgIG1lbW1hcD0weDEwMDAwJDB4MTg2OTAwMDAKKworCW1lbXRlc3Q9CVtLTkwsWDg2XzY0XSBFbmFibGUgbWVtdGVzdAorCQkJRm9ybWF0OiA8aW50ZWdlcj4KKwkJCXJhbmdlOiAwLDQgOiBwYXR0ZXJuIG51bWJlcgorCQkJZGVmYXVsdCA6IDAgPGRpc2FibGU+CiAKIAltZXllLio9CQlbSFddIFNldCBNb3Rpb25FeWUgQ2FtZXJhIHBhcmFtZXRlcnMKIAkJCVNlZSBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0LgpAQCAtMTE2MywxMCArMTIzMywxMCBAQAogCQkJZmlsZSBpZiBhdCBhbGwuCiAKIAluZnNhZGRycz0JW05GU10KLQkJCVNlZSBEb2N1bWVudGF0aW9uL25mc3Jvb3QudHh0LgorCQkJU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQuCiAKIAluZnNyb290PQlbTkZTXSBuZnMgcm9vdCBmaWxlc3lzdGVtIGZvciBkaXNrLWxlc3MgYm94ZXMuCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dC4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0LgogCiAJbmZzLmNhbGxiYWNrX3RjcHBvcnQ9CiAJCQlbTkZTXSBzZXQgdGhlIFRDUCBwb3J0IG9uIHdoaWNoIHRoZSBORlN2NCBjYWxsYmFjawpAQCAtMTIxNiw4ICsxMjg2LDE2IEBACiAJbm9leGVjCQlbSUEtNjRdCiAKIAlub2V4ZWMJCVtYODYtMzIsWDg2LTY0XQorCQkJT24gWDg2LTMyIGF2YWlsYWJsZSBvbmx5IG9uIFBBRSBjb25maWd1cmVkIGtlcm5lbHMuCiAJCQlub2V4ZWM9b246IGVuYWJsZSBub24tZXhlY3V0YWJsZSBtYXBwaW5ncyAoZGVmYXVsdCkKLQkJCW5vZXhlYz1vZmY6IGRpc2FibGUgbm4tZXhlY3V0YWJsZSBtYXBwaW5ncworCQkJbm9leGVjPW9mZjogZGlzYWJsZSBub24tZXhlY3V0YWJsZSBtYXBwaW5ncworCisJbm9leGVjMzIJW1g4Ni02NF0KKwkJCVRoaXMgYWZmZWN0cyBvbmx5IDMyLWJpdCBleGVjdXRhYmxlcy4KKwkJCW5vZXhlYzMyPW9uOiBlbmFibGUgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgKGRlZmF1bHQpCisJCQkJcmVhZCBkb2Vzbid0IGltcGx5IGV4ZWN1dGFibGUgbWFwcGluZ3MKKwkJCW5vZXhlYzMyPW9mZjogZGlzYWJsZSBub24tZXhlY3V0YWJsZSBtYXBwaW5ncworCQkJCXJlYWQgaW1wbGllcyBleGVjdXRhYmxlIG1hcHBpbmdzCiAKIAlub2Z4c3IJCVtCVUdTPVg4Ni0zMl0gRGlzYWJsZXMgeDg2IGZsb2F0aW5nIHBvaW50IGV4dGVuZGVkCiAJCQlyZWdpc3RlciBzYXZlIGFuZCByZXN0b3JlLiBUaGUga2VybmVsIHdpbGwgb25seSBzYXZlCkBAIC0xMzA0LDYgKzEzODIsMTAgQEAKIAogCW5vd2IJCVtBUk1dCiAKKwlucHRjZz0JCVtJQTY0XSBPdmVycmlkZSBtYXggbnVtYmVyIG9mIGNvbmN1cnJlbnQgZ2xvYmFsIFRMQgorCQkJcHVyZ2VzIHdoaWNoIGlzIHJlcG9ydGVkIGZyb20gZWl0aGVyIFBBTF9WTV9TVU1NQVJZIG9yCisJCQlTQUwgUEFMTy4KKwogCW51bWFfem9uZWxpc3Rfb3JkZXI9IFtLTkwsIEJPT1RdIFNlbGVjdCB6b25lbGlzdCBvcmRlciBmb3IgTlVNQS4KIAkJCW9uZSBvZiBbJ3pvbmUnLCAnbm9kZScsICdkZWZhdWx0J10gY2FuIGJlIHNwZWNpZmllZAogCQkJVGhpcyBjYW4gYmUgc2V0IGZyb20gc3lzY3RsIGFmdGVyIGJvb3QuCkBAIC0xMzkzLDEwICsxNDc1LDYgQEAKIAkJbm9tc2kJCVtNU0ldIElmIHRoZSBQQ0lfTVNJIGtlcm5lbCBjb25maWcgcGFyYW1ldGVyIGlzCiAJCQkJZW5hYmxlZCwgdGhpcyBrZXJuZWwgYm9vdCBvcHRpb24gY2FuIGJlIHVzZWQgdG8KIAkJCQlkaXNhYmxlIHRoZSB1c2Ugb2YgTVNJIGludGVycnVwdHMgc3lzdGVtLXdpZGUuCi0JCW5vc29ydAkJW1g4Ni0zMl0gRG9uJ3Qgc29ydCBQQ0kgZGV2aWNlcyBhY2NvcmRpbmcgdG8KLQkJCQlvcmRlciBnaXZlbiBieSB0aGUgUENJIEJJT1MuIFRoaXMgc29ydGluZyBpcwotCQkJCWRvbmUgdG8gZ2V0IGEgZGV2aWNlIG9yZGVyIGNvbXBhdGlibGUgd2l0aAotCQkJCW9sZGVyIGtlcm5lbHMuCiAJCWJpb3NpcnEJCVtYODYtMzJdIFVzZSBQQ0kgQklPUyBjYWxscyB0byBnZXQgdGhlIGludGVycnVwdAogCQkJCXJvdXRpbmcgdGFibGUuIFRoZXNlIGNhbGxzIGFyZSBrbm93biB0byBiZSBidWdneQogCQkJCW9uIHNldmVyYWwgbWFjaGluZXMgYW5kIHRoZXkgaGFuZyB0aGUgbWFjaGluZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dCBiL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKaW5kZXggODNmNTE1Yy4uYmU4OWYzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CkBAIC0xOTIsNyArMTkyLDggQEAKIFRoZSBLcHJvYmVzIEFQSSBpbmNsdWRlcyBhICJyZWdpc3RlciIgZnVuY3Rpb24gYW5kIGFuICJ1bnJlZ2lzdGVyIgogZnVuY3Rpb24gZm9yIGVhY2ggdHlwZSBvZiBwcm9iZS4gIEhlcmUgYXJlIHRlcnNlLCBtaW5pLW1hbi1wYWdlCiBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGUgYXNzb2NpYXRlZCBwcm9iZSBoYW5kbGVycwotdGhhdCB5b3UnbGwgd3JpdGUuICBTZWUgdGhlIGxhdHRlciBoYWxmIG9mIHRoaXMgZG9jdW1lbnQgZm9yIGV4YW1wbGVzLgordGhhdCB5b3UnbGwgd3JpdGUuICBTZWUgdGhlIGZpbGVzIGluIHRoZSBzYW1wbGVzL2twcm9iZXMvIHN1Yi1kaXJlY3RvcnkKK2ZvciBleGFtcGxlcy4KIAogNC4xIHJlZ2lzdGVyX2twcm9iZQogCkBAIC00MjAsMjQ5ICs0MjEsMTUgQEAKIAogOC4gS3Byb2JlcyBFeGFtcGxlCiAKLUhlcmUncyBhIHNhbXBsZSBrZXJuZWwgbW9kdWxlIHNob3dpbmcgdGhlIHVzZSBvZiBrcHJvYmVzIHRvIGR1bXAgYQotc3RhY2sgdHJhY2UgYW5kIHNlbGVjdGVkIGkzODYgcmVnaXN0ZXJzIHdoZW4gZG9fZm9yaygpIGlzIGNhbGxlZC4KLS0tLS0tIGN1dCBoZXJlIC0tLS0tCi0vKmtwcm9iZV9leGFtcGxlLmMqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0vKkZvciBlYWNoIHByb2JlIHlvdSBuZWVkIHRvIGFsbG9jYXRlIGEga3Byb2JlIHN0cnVjdHVyZSovCi1zdGF0aWMgc3RydWN0IGtwcm9iZSBrcDsKLQotLyprcHJvYmUgcHJlX2hhbmRsZXI6IGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgcHJvYmVkIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkKi8KLWludCBoYW5kbGVyX3ByZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlwcmludGsoInByZV9oYW5kbGVyOiBwLT5hZGRyPTB4JXAsIGVpcD0lbHgsIGVmbGFncz0weCVseFxuIiwKLQkJcC0+YWRkciwgcmVncy0+ZWlwLCByZWdzLT5lZmxhZ3MpOwotCWR1bXBfc3RhY2soKTsKLQlyZXR1cm4gMDsKLX0KLQotLyprcHJvYmUgcG9zdF9oYW5kbGVyOiBjYWxsZWQgYWZ0ZXIgdGhlIHByb2JlZCBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCovCi12b2lkIGhhbmRsZXJfcG9zdChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlwcmludGsoInBvc3RfaGFuZGxlcjogcC0+YWRkcj0weCVwLCBlZmxhZ3M9MHglbHhcbiIsCi0JCXAtPmFkZHIsIHJlZ3MtPmVmbGFncyk7Ci19Ci0KLS8qIGZhdWx0X2hhbmRsZXI6IHRoaXMgaXMgY2FsbGVkIGlmIGFuIGV4Y2VwdGlvbiBpcyBnZW5lcmF0ZWQgZm9yIGFueQotICogaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBwcmUtIG9yIHBvc3QtaGFuZGxlciwgb3Igd2hlbiBLcHJvYmVzCi0gKiBzaW5nbGUtc3RlcHMgdGhlIHByb2JlZCBpbnN0cnVjdGlvbi4KLSAqLwotaW50IGhhbmRsZXJfZmF1bHQoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCi17Ci0JcHJpbnRrKCJmYXVsdF9oYW5kbGVyOiBwLT5hZGRyPTB4JXAsIHRyYXAgIyVkbiIsCi0JCXAtPmFkZHIsIHRyYXBucik7Ci0JLyogUmV0dXJuIDAgYmVjYXVzZSB3ZSBkb24ndCBoYW5kbGUgdGhlIGZhdWx0LiAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBrcHJvYmVfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Ja3AucHJlX2hhbmRsZXIgPSBoYW5kbGVyX3ByZTsKLQlrcC5wb3N0X2hhbmRsZXIgPSBoYW5kbGVyX3Bvc3Q7Ci0Ja3AuZmF1bHRfaGFuZGxlciA9IGhhbmRsZXJfZmF1bHQ7Ci0Ja3Auc3ltYm9sX25hbWUgPSAiZG9fZm9yayI7Ci0KLQlyZXQgPSByZWdpc3Rlcl9rcHJvYmUoJmtwKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoInJlZ2lzdGVyX2twcm9iZSBmYWlsZWQsIHJldHVybmVkICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlwcmludGsoImtwcm9iZSByZWdpc3RlcmVkXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGtwcm9iZV9leGl0KHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9rcHJvYmUoJmtwKTsKLQlwcmludGsoImtwcm9iZSB1bnJlZ2lzdGVyZWRcbiIpOwotfQotCi1tb2R1bGVfaW5pdChrcHJvYmVfaW5pdCkKLW1vZHVsZV9leGl0KGtwcm9iZV9leGl0KQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLS0tLS0gY3V0IGhlcmUgLS0tLS0KLQotWW91IGNhbiBidWlsZCB0aGUga2VybmVsIG1vZHVsZSwga3Byb2JlLWV4YW1wbGUua28sIHVzaW5nIHRoZSBmb2xsb3dpbmcKLU1ha2VmaWxlOgotLS0tLS0gY3V0IGhlcmUgLS0tLS0KLW9iai1tIDo9IGtwcm9iZS1leGFtcGxlLm8KLUtESVIgOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCi1QV0QgOj0gJChzaGVsbCBwd2QpCi1kZWZhdWx0OgotCSQoTUFLRSkgLUMgJChLRElSKSBTVUJESVJTPSQoUFdEKSBtb2R1bGVzCi1jbGVhbjoKLQlybSAtZiAqLm1vZC5jICoua28gKi5vCi0tLS0tLSBjdXQgaGVyZSAtLS0tLQotCi0kIG1ha2UKLSQgc3UgLQotLi4uCi0jIGluc21vZCBrcHJvYmUtZXhhbXBsZS5rbwotCi1Zb3Ugd2lsbCBzZWUgdGhlIHRyYWNlIGRhdGEgaW4gL3Zhci9sb2cvbWVzc2FnZXMgYW5kIG9uIHRoZSBjb25zb2xlCi13aGVuZXZlciBkb19mb3JrKCkgaXMgaW52b2tlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy4KK1NlZSBzYW1wbGVzL2twcm9iZXMva3Byb2JlX2V4YW1wbGUuYwogCiA5LiBKcHJvYmVzIEV4YW1wbGUKIAotSGVyZSdzIGEgc2FtcGxlIGtlcm5lbCBtb2R1bGUgc2hvd2luZyB0aGUgdXNlIG9mIGpwcm9iZXMgdG8gZHVtcAotdGhlIGFyZ3VtZW50cyBvZiBkb19mb3JrKCkuCi0tLS0tLSBjdXQgaGVyZSAtLS0tLQotLypqcHJvYmUtZXhhbXBsZS5jICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC91aW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+Ci0KLS8qCi0gKiBKdW1wZXIgcHJvYmUgZm9yIGRvX2ZvcmsuCi0gKiBNaXJyb3IgcHJpbmNpcGxlIGVuYWJsZXMgYWNjZXNzIHRvIGFyZ3VtZW50cyBvZiB0aGUgcHJvYmVkIHJvdXRpbmUKLSAqIGZyb20gdGhlIHByb2JlIGhhbmRsZXIuCi0gKi8KLQotLyogUHJveHkgcm91dGluZSBoYXZpbmcgdGhlIHNhbWUgYXJndW1lbnRzIGFzIGFjdHVhbCBkb19mb3JrKCkgcm91dGluZSAqLwotbG9uZyBqZG9fZm9yayh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0LAotCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHN0YWNrX3NpemUsCi0JICAgICAgaW50IF9fdXNlciAqIHBhcmVudF90aWRwdHIsIGludCBfX3VzZXIgKiBjaGlsZF90aWRwdHIpCi17Ci0JcHJpbnRrKCJqcHJvYmU6IGNsb25lX2ZsYWdzPTB4JWx4LCBzdGFja19zaXplPTB4JWx4LCByZWdzPTB4JXBcbiIsCi0JICAgICAgIGNsb25lX2ZsYWdzLCBzdGFja19zaXplLCByZWdzKTsKLQkvKiBBbHdheXMgZW5kIHdpdGggYSBjYWxsIHRvIGpwcm9iZV9yZXR1cm4oKS4gKi8KLQlqcHJvYmVfcmV0dXJuKCk7Ci0JLypOT1RSRUFDSEVEKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBqcHJvYmUgbXlfanByb2JlID0gewotCS5lbnRyeSA9IGpkb19mb3JrCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBqcHJvYmVfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0JbXlfanByb2JlLmtwLnN5bWJvbF9uYW1lID0gImRvX2ZvcmsiOwotCi0JaWYgKChyZXQgPSByZWdpc3Rlcl9qcHJvYmUoJm15X2pwcm9iZSkpIDwwKSB7Ci0JCXByaW50aygicmVnaXN0ZXJfanByb2JlIGZhaWxlZCwgcmV0dXJuZWQgJWRcbiIsIHJldCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcHJpbnRrKCJQbGFudGVkIGpwcm9iZSBhdCAlcCwgaGFuZGxlciBhZGRyICVwXG4iLAotCSAgICAgICBteV9qcHJvYmUua3AuYWRkciwgbXlfanByb2JlLmVudHJ5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGpwcm9iZV9leGl0KHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9qcHJvYmUoJm15X2pwcm9iZSk7Ci0JcHJpbnRrKCJqcHJvYmUgdW5yZWdpc3RlcmVkXG4iKTsKLX0KLQotbW9kdWxlX2luaXQoanByb2JlX2luaXQpCi1tb2R1bGVfZXhpdChqcHJvYmVfZXhpdCkKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS0tLS0tIGN1dCBoZXJlIC0tLS0tCi0KLUJ1aWxkIGFuZCBpbnNlcnQgdGhlIGtlcm5lbCBtb2R1bGUgYXMgc2hvd24gaW4gdGhlIGFib3ZlIGtwcm9iZQotZXhhbXBsZS4gIFlvdSB3aWxsIHNlZSB0aGUgdHJhY2UgZGF0YSBpbiAvdmFyL2xvZy9tZXNzYWdlcyBhbmQgb24KLXRoZSBjb25zb2xlIHdoZW5ldmVyIGRvX2ZvcmsoKSBpcyBpbnZva2VkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLgotKFNvbWUgbWVzc2FnZXMgbWF5IGJlIHN1cHByZXNzZWQgaWYgc3lzbG9nZCBpcyBjb25maWd1cmVkIHRvCi1lbGltaW5hdGUgZHVwbGljYXRlIG1lc3NhZ2VzLikKK1NlZSBzYW1wbGVzL2twcm9iZXMvanByb2JlX2V4YW1wbGUuYwogCiAxMC4gS3JldHByb2JlcyBFeGFtcGxlCiAKLUhlcmUncyBhIHNhbXBsZSBrZXJuZWwgbW9kdWxlIHNob3dpbmcgdGhlIHVzZSBvZiByZXR1cm4gcHJvYmVzIHRvCi1yZXBvcnQgZmFpbGVkIGNhbGxzIHRvIHN5c19vcGVuKCkuCi0tLS0tLSBjdXQgaGVyZSAtLS0tLQotLyprcmV0cHJvYmUtZXhhbXBsZS5jKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLQotLyogcGVyLWluc3RhbmNlIHByaXZhdGUgZGF0YSAqLwotc3RydWN0IG15X2RhdGEgewotCWt0aW1lX3QgZW50cnlfc3RhbXA7Ci19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvYmVkX2Z1bmMgPSAic3lzX29wZW4iOwotCi0vKiBUaW1lc3RhbXAgZnVuY3Rpb24gZW50cnkuICovCi1zdGF0aWMgaW50IGVudHJ5X2hhbmRsZXIoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBteV9kYXRhICpkYXRhOwotCi0JaWYoIWN1cnJlbnQtPm1tKQotCQlyZXR1cm4gMTsgLyogc2tpcCBrZXJuZWwgdGhyZWFkcyAqLwotCi0JZGF0YSA9IChzdHJ1Y3QgbXlfZGF0YSAqKXJpLT5kYXRhOwotCWRhdGEtPmVudHJ5X3N0YW1wID0ga3RpbWVfZ2V0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIElmIHRoZSBwcm9iZWQgZnVuY3Rpb24gZmFpbGVkLCBsb2cgdGhlIHJldHVybiB2YWx1ZSBhbmQgZHVyYXRpb24uCi0gKiBEdXJhdGlvbiBtYXkgdHVybiBvdXQgdG8gYmUgemVybyBjb25zaXN0ZW50bHksIGRlcGVuZGluZyB1cG9uIHRoZQotICogZ3JhbnVsYXJpdHkgb2YgdGltZSBhY2NvdW50aW5nIG9uIHRoZSBwbGF0Zm9ybS4gKi8KLXN0YXRpYyBpbnQgcmV0dXJuX2hhbmRsZXIoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWludCByZXR2YWwgPSByZWdzX3JldHVybl92YWx1ZShyZWdzKTsKLQlzdHJ1Y3QgbXlfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgbXlfZGF0YSAqKXJpLT5kYXRhOwotCXM2NCBkZWx0YTsKLQlrdGltZV90IG5vdzsKLQotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCW5vdyA9IGt0aW1lX2dldCgpOwotCQlkZWx0YSA9IGt0aW1lX3RvX25zKGt0aW1lX3N1Yihub3csIGRhdGEtPmVudHJ5X3N0YW1wKSk7Ci0JCXByaW50aygiJXM6IHJldHVybiB2YWwgPSAlZCAoZHVyYXRpb24gPSAlbGxkIG5zKVxuIiwKLQkJICAgICAgIHByb2JlZF9mdW5jLCByZXR2YWwsIGRlbHRhKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga3JldHByb2JlIG15X2tyZXRwcm9iZSA9IHsKLQkuaGFuZGxlciA9IHJldHVybl9oYW5kbGVyLAotCS5lbnRyeV9oYW5kbGVyID0gZW50cnlfaGFuZGxlciwKLQkuZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBteV9kYXRhKSwKLQkubWF4YWN0aXZlID0gMjAsIC8qIHByb2JlIHVwIHRvIDIwIGluc3RhbmNlcyBjb25jdXJyZW50bHkgKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGtyZXRwcm9iZV9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQlteV9rcmV0cHJvYmUua3Auc3ltYm9sX25hbWUgPSAoY2hhciAqKXByb2JlZF9mdW5jOwotCi0JaWYgKChyZXQgPSByZWdpc3Rlcl9rcmV0cHJvYmUoJm15X2tyZXRwcm9iZSkpIDwgMCkgewotCQlwcmludGsoInJlZ2lzdGVyX2tyZXRwcm9iZSBmYWlsZWQsIHJldHVybmVkICVkXG4iLCByZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXByaW50aygiS3JldHByb2JlIGFjdGl2ZSBvbiAlc1xuIiwgbXlfa3JldHByb2JlLmtwLnN5bWJvbF9uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGtyZXRwcm9iZV9leGl0KHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9rcmV0cHJvYmUoJm15X2tyZXRwcm9iZSk7Ci0JcHJpbnRrKCJrcmV0cHJvYmUgdW5yZWdpc3RlcmVkXG4iKTsKLQkvKiBubWlzc2VkID4gMCBzdWdnZXN0cyB0aGF0IG1heGFjdGl2ZSB3YXMgc2V0IHRvbyBsb3cuICovCi0JcHJpbnRrKCJNaXNzZWQgcHJvYmluZyAlZCBpbnN0YW5jZXMgb2YgJXNcbiIsCi0JICAgICAgIG15X2tyZXRwcm9iZS5ubWlzc2VkLCBwcm9iZWRfZnVuYyk7Ci19Ci0KLW1vZHVsZV9pbml0KGtyZXRwcm9iZV9pbml0KQotbW9kdWxlX2V4aXQoa3JldHByb2JlX2V4aXQpCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0tLS0tLSBjdXQgaGVyZSAtLS0tLQotCi1CdWlsZCBhbmQgaW5zZXJ0IHRoZSBrZXJuZWwgbW9kdWxlIGFzIHNob3duIGluIHRoZSBhYm92ZSBrcHJvYmUKLWV4YW1wbGUuICBZb3Ugd2lsbCBzZWUgdGhlIHRyYWNlIGRhdGEgaW4gL3Zhci9sb2cvbWVzc2FnZXMgYW5kIG9uIHRoZQotY29uc29sZSB3aGVuZXZlciBzeXNfb3BlbigpIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZS4gIChTb21lIG1lc3NhZ2VzCi1tYXkgYmUgc3VwcHJlc3NlZCBpZiBzeXNsb2dkIGlzIGNvbmZpZ3VyZWQgdG8gZWxpbWluYXRlIGR1cGxpY2F0ZQotbWVzc2FnZXMuKQorU2VlIHNhbXBsZXMva3Byb2Jlcy9rcmV0cHJvYmVfZXhhbXBsZS5jCiAKIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIEtwcm9iZXMsIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgVVJMczoKIGh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGlicmFyeS9sLWtwcm9iZXMuaHRtbD9jYT1kZ3ItbG54dzQyS3Byb2JlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvMDAtSU5ERVgKaW5kZXggNzI5YzJjMC4uZWU1NjkyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy8wMC1JTkRFWApAQCAtMiw2ICsyLDggQEAKIAktIFRoaXMgZmlsZQogYWNlci13bWkudHh0CiAJLSBpbmZvcm1hdGlvbiBvbiB0aGUgQWNlciBMYXB0b3AgV01JIEV4dHJhcyBkcml2ZXIuCitsYXB0b3AtbW9kZS50eHQKKwktIGhvdyB0byBjb25zZXJ2ZSBiYXR0ZXJ5IHBvd2VyIHVzaW5nIGxhcHRvcC1tb2RlLgogc29ueS1sYXB0b3AudHh0CiAJLSBTb255IE5vdGVib29rIENvbnRyb2wgRHJpdmVyIChTTkMpIFJlYWRtZS4KIHNvbnlwaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvYWNlci13bWkudHh0CmluZGV4IGIwNjY5NjMuLjc5YjdkYmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FjZXItd21pLnR4dApAQCAtNDgsNyArNDgsNyBAQAogCiBUbyBzZW5kIG1lIHRoZSBEU0RULCBhcyByb290L3N1ZG86CiAKLWNhdCAvc3lzL2Zpcm13YXJlL2FjcGkvRFNEVCA+IGRzZHQKK2NhdCAvc3lzL2Zpcm13YXJlL2FjcGkvdGFibGVzL0RTRFQgPiBkc2R0CiAKIEFuZCBzZW5kIG1lIHRoZSByZXN1bHRpbmcgJ2RzZHQnIGZpbGUuCiAKQEAgLTgwLDcgKzgwLDcgQEAKIGUuZy4gV2l0aCB0aGUgQkNNNDMxOCBvbiB0aGUgQWNlciBBc3BpcmUgNTAyMCBzZXJpZXM6CiAKIG5kaXN3cmFwcGVyOiBMaWdodCBibGlua3Mgb24gd2hlbiB0cmFuc21pdHRpbmcKLWJjbTQzeHgvYjQzOiBTb2xpZCBsaWdodCwgYmxpbmtzIG9mZiB3aGVuIHRyYW5zbWl0dGluZworYjQzOiBTb2xpZCBsaWdodCwgYmxpbmtzIG9mZiB3aGVuIHRyYW5zbWl0dGluZwogCiBXaXJlbGVzcyByYWRpbyBjb250cm9sIGlzIHVuY29uZGl0aW9uYWxseSBlbmFibGVkIC0gYWxsIEFjZXIgbGFwdG9wcyB0aGF0IHN1cHBvcnQKIGFjZXItd21pIGNvbWUgd2l0aCBidWlsdC1pbiB3aXJlbGVzcy4gSG93ZXZlciwgc2hvdWxkIHlvdSBmZWVsIHNvIGluY2xpbmVkIHRvCkBAIC0xNjksNyArMTY5LDcgQEAKIAogVGhlIExFRCBpcyBleHBvc2VkIHRocm91Z2ggdGhlIExFRCBzdWJzeXN0ZW0sIGFuZCBjYW4gYmUgZm91bmQgaW46CiAKLS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hY2VyLXdtaS9sZWRzL2FjZXItbWFpbDpncmVlbi8KKy9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hY2VyLXdtaS9sZWRzL2FjZXItd21pOjptYWlsLwogCiBUaGUgbWFpbCBMRUQgaXMgYXV0b2RldGVjdGVkLCBzbyBpZiB5b3UgZG9uJ3QgaGF2ZSBvbmUsIHRoZSBMRUQgZGV2aWNlIHdvbid0CiBiZSByZWdpc3RlcmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvbGFwdG9wLW1vZGUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2xhcHRvcC1tb2RlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CmluZGV4IDZjMjQ3NzcuLjc2Y2I0MjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKQEAgLTE2MCw3ICsxNjAsNyBAQAogcHJvY2ZzOiAvcHJvYy9hY3BpL2libS9ob3RrZXkKIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGU6IGhvdGtleV8qCiAKLUluIGEgVGhpbmtQYWQsIHRoZSBBQ1BJIEhLRVkgaGFuZGxlciBpcyByZXNwb25zaWJsZSBmb3IgY29tdW5pY2F0aW5nCitJbiBhIFRoaW5rUGFkLCB0aGUgQUNQSSBIS0VZIGhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNvbW11bmljYXRpbmcKIHNvbWUgaW1wb3J0YW50IGV2ZW50cyBhbmQgYWxzbyBrZXlib2FyZCBob3Qga2V5IHByZXNzZXMgdG8gdGhlIG9wZXJhdGluZwogc3lzdGVtLiAgRW5hYmxpbmcgdGhlIGhvdGtleSBmdW5jdGlvbmFsaXR5IG9mIHRoaW5rcGFkLWFjcGkgc2lnbmFscyB0aGUKIGZpcm13YXJlIHRoYXQgc3VjaCBhIGRyaXZlciBpcyBwcmVzZW50LCBhbmQgbW9kaWZpZXMgaG93IHRoZSBUaGlua1BhZApAQCAtMTkzLDcgKzE5Myw3IEBACiBtb2RpZmllZCBkbyBhbnl0aGluZy4gIE5vdCBhbGwgaG90IGtleXMgY2FuIGJlIGluZGl2aWR1YWxseSBjb250cm9sbGVkCiBieSB0aGUgbWFzay4gIFNvbWUgbW9kZWxzIGRvIG5vdCBzdXBwb3J0IHRoZSBtYXNrIGF0IGFsbCwgYW5kIGluIHRob3NlCiBtb2RlbHMsIGhvdCBrZXlzIGNhbm5vdCBiZSBjb250cm9sbGVkIGluZGl2aWR1YWxseS4gIFRoZSBiZWhhdmlvdXIgb2YKLXRoZSBtYXNrIGlzLCB0aGVyZWZvcmUsIGhpZ2x5IGRlcGVuZGVudCBvbiB0aGUgVGhpbmtQYWQgbW9kZWwuCit0aGUgbWFzayBpcywgdGhlcmVmb3JlLCBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBUaGlua1BhZCBtb2RlbC4KIAogTm90ZSB0aGF0IHVubWFza2luZyBzb21lIGtleXMgcHJldmVudHMgdGhlaXIgZGVmYXVsdCBiZWhhdmlvci4gIEZvcgogZXhhbXBsZSwgaWYgRm4rRjUgaXMgdW5tYXNrZWQsIHRoYXQga2V5IHdpbGwgbm8gbG9uZ2VyIGVuYWJsZS9kaXNhYmxlCkBAIC0yODgsNyArMjg4LDcgQEAKIAkJaW4gQUNQSSBldmVudCBtb2RlLCB2b2x1bWUgdXAvZG93bi9tdXRlIGFyZSByZXBvcnRlZCBhcwogCQlzZXBhcmF0ZSBldmVudHMsIGJ1dCB0aGlzIGJlaGF2aW91ciBtYXkgYmUgY29ycmVjdGVkIGluCiAJCWZ1dHVyZSByZWxlYXNlcyBvZiB0aGlzIGRyaXZlciwgaW4gd2hpY2ggY2FzZSB0aGUKLQkJVGhpbmtQYWQgdm9sdW1lIG1peGVyIHVzZXIgaW50ZXJmYWNlIHNlbWFudGhpY3Mgd2lsbCBiZQorCQlUaGlua1BhZCB2b2x1bWUgbWl4ZXIgdXNlciBpbnRlcmZhY2Ugc2VtYW50aWNzIHdpbGwgYmUKIAkJZW5mb3JjZWQuCiAKIAlob3RrZXlfcG9sbF9mcmVxOgpAQCAtMzA2LDEzICszMDYsMjAgQEAKIAkJVGhlIHJlY29tbWVuZGVkIHBvbGxpbmcgZnJlcXVlbmN5IGlzIDEwSHouCiAKIAlob3RrZXlfcmFkaW9fc3c6Ci0JCWlmIHRoZSBUaGlua1BhZCBoYXMgYSBoYXJkd2FyZSByYWRpbyBzd2l0Y2gsIHRoaXMKKwkJSWYgdGhlIFRoaW5rUGFkIGhhcyBhIGhhcmR3YXJlIHJhZGlvIHN3aXRjaCwgdGhpcwogCQlhdHRyaWJ1dGUgd2lsbCByZWFkIDAgaWYgdGhlIHN3aXRjaCBpcyBpbiB0aGUgInJhZGlvcwotCQlkaXNhYmxlZCIgcG9zdGl0aW9uLCBhbmQgMSBpZiB0aGUgc3dpdGNoIGlzIGluIHRoZQorCQlkaXNhYmxlZCIgcG9zaXRpb24sIGFuZCAxIGlmIHRoZSBzd2l0Y2ggaXMgaW4gdGhlCiAJCSJyYWRpb3MgZW5hYmxlZCIgcG9zaXRpb24uCiAKIAkJVGhpcyBhdHRyaWJ1dGUgaGFzIHBvbGwoKS9zZWxlY3QoKSBzdXBwb3J0LgogCisJaG90a2V5X3RhYmxldF9tb2RlOgorCQlJZiB0aGUgVGhpbmtQYWQgaGFzIHRhYmxldCBjYXBhYmlsaXRpZXMsIHRoaXMgYXR0cmlidXRlCisJCXdpbGwgcmVhZCAwIGlmIHRoZSBUaGlua1BhZCBpcyBpbiBub3JtYWwgbW9kZSwgYW5kCisJCTEgaWYgdGhlIFRoaW5rUGFkIGlzIGluIHRhYmxldCBtb2RlLgorCisJCVRoaXMgYXR0cmlidXRlIGhhcyBwb2xsKCkvc2VsZWN0KCkgc3VwcG9ydC4KKwogCWhvdGtleV9yZXBvcnRfbW9kZToKIAkJUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHByb2NmcyBBQ1BJIGV2ZW50IHJlcG9ydCBtb2RlCiAJCWZpbHRlciBmb3IgaG90IGtleXMuICBJZiBpdCBpcyBzZXQgdG8gMSAodGhlIGRlZmF1bHQpLApAQCAtMzM5LDcgKzM0Niw3IEBACiAJd2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZToKIAkJU2V0IHRvIDEgaWYgdGhlIHN5c3RlbSB3YXMgd2FrZW4gdXAgYmVjYXVzZSBvZiBhbgogCQl1bmRvY2sgb3IgYmF5IGVqZWN0aW9uIHJlcXVlc3QsIGFuZCB0aGF0IHJlcXVlc3QKLQkJd2FzIHN1Y2Vzc2Z1bGx5IGNvbXBsZXRlZC4gIEF0IHRoaXMgcG9pbnQsIGl0IG1pZ2h0CisJCXdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiAgQXQgdGhpcyBwb2ludCwgaXQgbWlnaHQKIAkJYmUgdXNlZnVsIHRvIHNlbmQgdGhlIHN5c3RlbSBiYWNrIHRvIHNsZWVwLCBhdCB0aGUKIAkJdXNlcidzIGNob2ljZS4gIFJlZmVyIHRvIEhLRVkgZXZlbnRzIDB4NDAwMyBhbmQKIAkJMHgzMDAzLCBiZWxvdy4KQEAgLTM5Miw3ICszOTksNyBAQAogCQkJCUxlbm92bzogYmF0dGVyeQogCiAweDEwMDQJMHgwMwlGTitGNAkJU2xlZXAgYnV0dG9uIChBQ1BJIHNsZWVwIGJ1dHRvbgotCQkJCXNlbWFudGhpY3MsIGkuZS4gc2xlZXAtdG8tUkFNKS4KKwkJCQlzZW1hbnRpY3MsIGkuZS4gc2xlZXAtdG8tUkFNKS4KIAkJCQlJdCBpcyBhbHdheXMgZ2VuZXJhdGUgc29tZSBraW5kCiAJCQkJb2YgZXZlbnQsIGVpdGhlciB0aGUgaG90IGtleQogCQkJCWV2ZW50IG9yIGEgQUNQSSBzbGVlcCBidXR0b24KQEAgLTQwMywxMiArNDEwLDEyIEBACiAJCQkJdGltZSBwYXNzZXMuCiAKIDB4MTAwNQkweDA0CUZOK0Y1CQlSYWRpby4gIEVuYWJsZXMvZGlzYWJsZXMKLQkJCQl0aGUgaW50ZXJuYWwgQmx1ZVRvb3RoIGhhcmR3YXJlCisJCQkJdGhlIGludGVybmFsIEJsdWV0b290aCBoYXJkd2FyZQogCQkJCWFuZCBXLVdBTiBjYXJkIGlmIGxlZnQgaW4gY29udHJvbAogCQkJCW9mIHRoZSBmaXJtd2FyZS4gIERvZXMgbm90IGFmZmVjdAogCQkJCXRoZSBXTEFOIGNhcmQuCiAJCQkJU2hvdWxkIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgYWxsCi0JCQkJcmFkaW9zIChibHVldG9vdGgrVy1XQU4rV0xBTiksCisJCQkJcmFkaW9zIChCbHVldG9vdGgrVy1XQU4rV0xBTiksCiAJCQkJcmVhbGx5LgogCiAweDEwMDYJMHgwNQlGTitGNgkJLQpAQCAtNDE3LDcgKzQyNCw3IEBACiAJCQkJRG8geW91IGZlZWwgbHVja3kgdG9kYXk/CiAKIDB4MTAwOAkweDA3CUZOK0Y4CQlJQk06IHRvZ2dsZSBzY3JlZW4gZXhwYW5kCi0JCQkJTGVub3ZvOiBjb25maWd1cmUgdWx0cmFuYXYKKwkJCQlMZW5vdm86IGNvbmZpZ3VyZSBVbHRyYU5hdgogCiAweDEwMDkJMHgwOAlGTitGOQkJLQogCS4uCS4uCQkuLgpAQCAtNDQ3LDcgKzQ1NCw3IEBACiAweDEwMTEJMHgxMAlGTitFTkQJCUJyaWdodG5lc3MgZG93bi4gIFNlZSBicmlnaHRuZXNzCiAJCQkJdXAgZm9yIGRldGFpbHMuCiAKLTB4MTAxMgkweDExCUZOK1BHVVAJCVRoaW5rbGlnaHQgdG9nZ2xlLiAgVGhpcyBrZXkgaXMKKzB4MTAxMgkweDExCUZOK1BHVVAJCVRoaW5rTGlnaHQgdG9nZ2xlLiAgVGhpcyBrZXkgaXMKIAkJCQlhbHdheXMgaGFuZGxlZCBieSB0aGUgZmlybXdhcmUsCiAJCQkJZXZlbiB3aGVuIHVubWFza2VkLgogCkBAIC00NjksNyArNDc2LDcgQEAKIAkJCQlrZXkgaXMgYWx3YXlzIGhhbmRsZWQgYnkgdGhlCiAJCQkJZmlybXdhcmUsIGV2ZW4gd2hlbiB1bm1hc2tlZC4KIAotMHgxMDE4CTB4MTcJVEhJTktQQUQJVGhpbmtwYWQvQWNjZXNzIElCTS9MZW5vdm8ga2V5CisweDEwMTgJMHgxNwlUSElOS1BBRAlUaGlua1BhZC9BY2Nlc3MgSUJNL0xlbm92byBrZXkKIAogMHgxMDE5CTB4MTgJdW5rbm93bgogLi4JLi4JLi4KQEAgLTQ4OCw5ICs0OTUsMTcgQEAKIGluY2x1ZGVzIGFuIHNjYW4gY29kZS4gIElmIGEga2V5IGlzIG1hcHBlZCB0byBhbnl0aGluZyBlbHNlLCBpdCB3aWxsCiBnZW5lcmF0ZSBpbnB1dCBkZXZpY2UgRVZfS0VZIGV2ZW50cy4KIAorSW4gYWRkaXRpb24gdG8gdGhlIEVWX0tFWSBldmVudHMsIHRoaW5rcGFkLWFjcGkgbWF5IGFsc28gaXNzdWUgRVZfU1cKK2V2ZW50cyBmb3Igc3dpdGNoZXM6CisKK1NXX1JBRElPCVQ2MCBhbmQgbGF0ZXIgaGFyZGFyZSByZmtpbGwgcm9ja2VyIHN3aXRjaAorU1dfVEFCTEVUX01PREUJVGFibGV0IFRoaW5rUGFkcyBIS0VZIGV2ZW50cyAweDUwMDkgYW5kIDB4NTAwQQorCiBOb24gaG90LWtleSBBQ1BJIEhLRVkgZXZlbnQgbWFwOgogMHg1MDAxCQlMaWQgY2xvc2VkCiAweDUwMDIJCUxpZCBvcGVuZWQKKzB4NTAwOQkJVGFibGV0IHN3aXZlbDogc3dpdGNoZWQgdG8gdGFibGV0IG1vZGUKKzB4NTAwQQkJVGFibGV0IHN3aXZlbDogc3dpdGNoZWQgdG8gbm9ybWFsIG1vZGUKIDB4NzAwMAkJUmFkaW8gU3dpdGNoIG1heSBoYXZlIGNoYW5nZWQgc3RhdGUKIAogVGhlIGFib3ZlIGV2ZW50cyBhcmUgbm90IHByb3BhZ2F0ZWQgYnkgdGhlIGRyaXZlciwgZXhjZXB0IGZvciBsZWdhY3kKQEAgLTUwNSw5ICs1MjAsNyBAQAogCiAweDMwMDMJCUJheSBlamVjdGlvbiAoc2VlIDB4MngwNSkgY29tcGxldGUsIGNhbiBzbGVlcCBhZ2FpbgogMHg0MDAzCQlVbmRvY2tlZCAoc2VlIDB4MngwNCksIGNhbiBzbGVlcCBhZ2FpbgotMHg1MDA5CQlUYWJsZXQgc3dpdmVsOiBzd2l0Y2hlZCB0byB0YWJsZXQgbW9kZQotMHg1MDBBCQlUYWJsZXQgc3dpdmVsOiBzd2l0Y2hlZCB0byBub3JtYWwgbW9kZQotMHg1MDBCCQlUYWJsZXQgcGVuIGluc3RlcnRlZCBpbnRvIGl0cyBzdG9yYWdlIGJheQorMHg1MDBCCQlUYWJsZXQgcGVuIGluc2VydGVkIGludG8gaXRzIHN0b3JhZ2UgYmF5CiAweDUwMEMJCVRhYmxldCBwZW4gcmVtb3ZlZCBmcm9tIGl0cyBzdG9yYWdlIGJheQogMHg1MDEwCQlCcmlnaHRuZXNzIGxldmVsIGNoYW5nZWQgKG5ld2VyIExlbm92byBCSU9TZXMpCiAKQEAgLTUzOSw3ICs1NTIsNyBAQAogSWYgdGhlIGhvdGtleV9yZXBvcnRfbW9kZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHNldCB0byAxIG9yIDIsIGl0IGNhbm5vdAogYmUgY2hhbmdlZCBsYXRlciB0aHJvdWdoIHN5c2ZzIChhbnkgd3JpdGVzIHdpbGwgcmV0dXJuIC1FUEVSTSB0byBzaWduYWwKIHRoYXQgaG90a2V5X3JlcG9ydF9tb2RlIHdhcyBsb2NrZWQuICBPbiAyLjYuMjMgYW5kIGxhdGVyLCB3aGVyZQotaG90a2V5X3JlcG9ydF9tb2RlIGNhbm5vdCBiZSBjaGFuZ2VkIGF0IGFsbCwgd3JpdGVzIHdpbGwgcmV0dXJuIC1FQUNFUykuCitob3RrZXlfcmVwb3J0X21vZGUgY2Fubm90IGJlIGNoYW5nZWQgYXQgYWxsLCB3cml0ZXMgd2lsbCByZXR1cm4gLUVBQ0NFUykuCiAKIGhvdGtleV9yZXBvcnRfbW9kZSBzZXQgdG8gMSBtYWtlcyB0aGUgZHJpdmVyIGV4cG9ydCB0aHJvdWdoIHRoZSBwcm9jZnMKIEFDUEkgZXZlbnQgaW50ZXJmYWNlIGFsbCBob3Qga2V5IHByZXNzZXMgKHdoaWNoIGFyZSAqYWxzbyogc2VudCB0byB0aGUKQEAgLTU4NCw3ICs1OTcsNyBAQAogCQkwOiBkaXNhYmxlcyBCbHVldG9vdGggLyBCbHVldG9vdGggaXMgZGlzYWJsZWQKIAkJMTogZW5hYmxlcyBCbHVldG9vdGggLyBCbHVldG9vdGggaXMgZW5hYmxlZC4KIAotCU5vdGU6IHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgcHJvYmFibHkgYmUgc3VwZXJzZWVkZWQgYnkgdGhlCisJTm90ZTogdGhpcyBpbnRlcmZhY2Ugd2lsbCBiZSBwcm9iYWJseSBiZSBzdXBlcnNlZGVkIGJ5IHRoZQogCWdlbmVyaWMgcmZraWxsIGNsYXNzLCBzbyBpdCBpcyBOT1QgdG8gYmUgY29uc2lkZXJlZCBzdGFibGUgeWV0LgogCiBWaWRlbyBvdXRwdXQgY29udHJvbCAtLSAvcHJvYy9hY3BpL2libS92aWRlbwpAQCAtNzkxLDEyICs4MDQsMTIgQEAKIAkxIC0gUmVsYXRlZCB0byAiVm9sdW1lIHVwIiBrZXkgcHJlc3MKIAkyIC0gUmVsYXRlZCB0byAiTXV0ZSBvbiIga2V5IHByZXNzCiAJMyAtIFJlbGF0ZWQgdG8gIkFjY2VzcyBJQk0iIGtleSBwcmVzcwotCTQgLSBSZWxhdGVkIHRvICJMQ0QgYnJpZ2h0bmVzcyB1cCIga2V5IHBlc3MKKwk0IC0gUmVsYXRlZCB0byAiTENEIGJyaWdodG5lc3MgdXAiIGtleSBwcmVzcwogCTUgLSBSZWxhdGVkIHRvICJMQ0QgYnJpZ2h0bmVzcyBkb3duIiBrZXkgcHJlc3MKIAkxMSAtIFJlbGF0ZWQgdG8gInRvZ2dsZSBzY3JlZW4gZXhwYW5zaW9uIiBrZXkgcHJlc3MvZnVuY3Rpb24KIAkxMiAtIFJlbGF0ZWQgdG8gIlRoaW5rTGlnaHQgb24iCiAJMTMgLSBSZWxhdGVkIHRvICJUaGlua0xpZ2h0IG9mZiIKLQkxNCAtIFJlbGF0ZWQgdG8gIlRoaW5rTGlnaHQiIGtleSBwcmVzcyAodG9nZ2xlIHRoaW5rbGlnaHQpCisJMTQgLSBSZWxhdGVkIHRvICJUaGlua0xpZ2h0IiBrZXkgcHJlc3MgKHRvZ2dsZSBUaGlua0xpZ2h0KQogCiBUaGUgY21vcyBjb21tYW5kIGludGVyZmFjZSBpcyBwcm9uZSB0byBmaXJtd2FyZSBzcGxpdC1icmFpbiBwcm9ibGVtcywgYXMKIGluIG5ld2VyIFRoaW5rUGFkcyBpdCBpcyBqdXN0IGEgY29tcGF0aWJpbGl0eSBsYXllci4gIERvIG5vdCB1c2UgaXQsIGl0IGlzCkBAIC0xMDI0LDcgKzEwMzcsNyBAQAogRUMgYW5kIENNT1MuICBUbyBzZWxlY3Qgd2hpY2ggb25lIHNob3VsZCBiZSB1c2VkLCB1c2UgdGhlCiBicmlnaHRuZXNzX21vZGUgbW9kdWxlIHBhcmFtZXRlcjogYnJpZ2h0bmVzc19tb2RlPTEgc2VsZWN0cyBFQyBtb2RlLAogYnJpZ2h0bmVzc19tb2RlPTIgc2VsZWN0cyBDTU9TIG1vZGUsIGJyaWdodG5lc3NfbW9kZT0zIHNlbGVjdHMgYm90aCBFQwotYW5kIENNT1MuICBUaGUgZHJpdmVyIHRyaWVzIHRvIGF1dG9kZXRlY3Qgd2hpY2ggaW50ZXJmYWNlIHRvIHVzZS4KK2FuZCBDTU9TLiAgVGhlIGRyaXZlciB0cmllcyB0byBhdXRvLWRldGVjdCB3aGljaCBpbnRlcmZhY2UgdG8gdXNlLgogCiBXaGVuIGRpc3BsYXkgYmFja2xpZ2h0IGJyaWdodG5lc3MgY29udHJvbHMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIHRoZQogc3RhbmRhcmQgQUNQSSBpbnRlcmZhY2UsIGl0IGlzIGJlc3QgdG8gdXNlIGl0IGluc3RlYWQgb2YgdGhpcyBkaXJlY3QKQEAgLTEyNjYsOCArMTI3OSw4IEBACiBUaGlzIGZlYXR1cmUgc2hvd3MgdGhlIHByZXNlbmNlIGFuZCBjdXJyZW50IHN0YXRlIG9mIGEgVy1XQU4gKFNpZXJyYQogV2lyZWxlc3MgRVYtRE8pIGRldmljZS4KIAotSXQgd2FzIHRlc3RlZCBvbiBhIExlbm92byBUaGlua3BhZCBYNjAuIEl0IHNob3VsZCBwcm9iYWJseSB3b3JrIG9uIG90aGVyCi1UaGlua3BhZCBtb2RlbHMgd2hpY2ggY29tZSB3aXRoIHRoaXMgbW9kdWxlIGluc3RhbGxlZC4KK0l0IHdhcyB0ZXN0ZWQgb24gYSBMZW5vdm8gVGhpbmtQYWQgWDYwLiBJdCBzaG91bGQgcHJvYmFibHkgd29yayBvbiBvdGhlcgorVGhpbmtQYWQgbW9kZWxzIHdoaWNoIGNvbWUgd2l0aCB0aGlzIG1vZHVsZSBpbnN0YWxsZWQuCiAKIFByb2NmcyBub3RlczoKIApAQCAtMTI4Niw3ICsxMjk5LDcgQEAKIAkJMDogZGlzYWJsZXMgV1dBTiBjYXJkIC8gV1dBTiBjYXJkIGlzIGRpc2FibGVkCiAJCTE6IGVuYWJsZXMgV1dBTiBjYXJkIC8gV1dBTiBjYXJkIGlzIGVuYWJsZWQuCiAKLQlOb3RlOiB0aGlzIGludGVyZmFjZSB3aWxsIGJlIHByb2JhYmx5IGJlIHN1cGVyc2VlZGVkIGJ5IHRoZQorCU5vdGU6IHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgcHJvYmFibHkgYmUgc3VwZXJzZWRlZCBieSB0aGUKIAlnZW5lcmljIHJma2lsbCBjbGFzcywgc28gaXQgaXMgTk9UIHRvIGJlIGNvbnNpZGVyZWQgc3RhYmxlIHlldC4KIAogTXVsdGlwbGUgQ29tbWFuZHMsIE1vZHVsZSBQYXJhbWV0ZXJzCkBAIC0xMzA5LDcgKzEzMjIsNyBAQAogVGhlIG1vZHVsZSB0YWtlcyBhIGRlYnVnIHBhcmFtZXRlciB3aGljaCBjYW4gYmUgdXNlZCB0byBzZWxlY3RpdmVseQogZW5hYmxlIHZhcmlvdXMgY2xhc3NlcyBvZiBkZWJ1Z2dpbmcgb3V0cHV0LCBmb3IgZXhhbXBsZToKIAotCSBtb2Rwcm9iZSBpYm1fYWNwaSBkZWJ1Zz0weGZmZmYKKwkgbW9kcHJvYmUgdGhpbmtwYWRfYWNwaSBkZWJ1Zz0weGZmZmYKIAogd2lsbCBlbmFibGUgYWxsIGRlYnVnZ2luZyBvdXRwdXQgY2xhc3Nlcy4gIEl0IHRha2VzIGEgYml0bWFzaywgc28KIHRvIGVuYWJsZSBtb3JlIHRoYW4gb25lIG91dHB1dCBjbGFzcywganVzdCBhZGQgdGhlaXIgdmFsdWVzLgpAQCAtMTM1Niw3ICsxMzY5LDcgQEAKIAkJTlZSQU0gaXMgY29tcGlsZWQgb3V0IGJ5IHRoZSB1c2VyIGJlY2F1c2UgaXQgaXMKIAkJdW5uZWVkZWQvdW5kZXNpcmVkIGluIHRoZSBmaXJzdCBwbGFjZSkuCiAweDAyMDEwMToJTWFya2VyIGZvciB0aGlua3BhZC1hY3BpIHdpdGggaG90IGtleSBOVlJBTSBwb2xsaW5nCi0JCWFuZCBwcm9wZXIgaG90a2V5X21hc2sgc2VtYW50aGljcyAodmVyc2lvbiA4IG9mIHRoZQorCQlhbmQgcHJvcGVyIGhvdGtleV9tYXNrIHNlbWFudGljcyAodmVyc2lvbiA4IG9mIHRoZQogCQlOVlJBTSBwb2xsaW5nIHBhdGNoKS4gIFNvbWUgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mCiAJCTAuMTggaGFkIGFuIGVhcmxpZXIgdmVyc2lvbiB0aGF0IGRpZCBzdHJhbmdlIHRoaW5ncwogCQl0byBob3RrZXlfbWFzay4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jIGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKaW5kZXggMGYyM2Q2Ny4uNGMxZmM2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKKysrIGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKQEAgLTEsNyArMSw3IEBACiAvKlA6MTAwIFRoaXMgaXMgdGhlIExhdW5jaGVyIGNvZGUsIGEgc2ltcGxlIHByb2dyYW0gd2hpY2ggbGF5cyBvdXQgdGhlCi0gKiAicGh5c2ljYWwiIG1lbW9yeSBmb3IgdGhlIG5ldyBHdWVzdCBieSBtYXBwaW5nIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHRoZQotICogdmlydHVhbCBkZXZpY2VzLCB0aGVuIHJlYWRzIHJlcGVhdGVkbHkgZnJvbSAvZGV2L2xndWVzdCB0byBydW4gdGhlIEd1ZXN0LgotOiovCisgKiAicGh5c2ljYWwiIG1lbW9yeSBmb3IgdGhlIG5ldyBHdWVzdCBieSBtYXBwaW5nIHRoZSBrZXJuZWwgaW1hZ2UgYW5kCisgKiB0aGUgdmlydHVhbCBkZXZpY2VzLCB0aGVuIG9wZW5zIC9kZXYvbGd1ZXN0IHRvIHRlbGwgdGhlIGtlcm5lbAorICogYWJvdXQgdGhlIEd1ZXN0IGFuZCBjb250cm9sIGl0LiA6Ki8KICNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQogI2RlZmluZSBfR05VX1NPVVJDRQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbnNvbGUuaCIKICNpbmNsdWRlICJsaW51eC92aXJ0aW9fcmluZy5oIgogI2luY2x1ZGUgImFzbS14ODYvYm9vdHBhcmFtLmgiCi0vKkw6MTEwIFdlIGNhbiBpZ25vcmUgdGhlIDM4IGluY2x1ZGUgZmlsZXMgd2UgbmVlZCBmb3IgdGhpcyBwcm9ncmFtLCBidXQgSSBkbworLypMOjExMCBXZSBjYW4gaWdub3JlIHRoZSAzOSBpbmNsdWRlIGZpbGVzIHdlIG5lZWQgZm9yIHRoaXMgcHJvZ3JhbSwgYnV0IEkgZG8KICAqIHdhbnQgdG8gZHJhdyBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBrZXJuZWwtc3R5bGUgdHlwZXMuCiAgKgogICogQXMgTGludXMgc2FpZCwgIkMgaXMgYSBTcGFydGFuIGxhbmd1YWdlLCBhbmQgc28gc2hvdWxkIHlvdXIgbmFtaW5nIGJlLiIgIEkKQEAgLTMyMCw3ICszMjAsNyBAQAogCQllcnIoMSwgIlJlYWRpbmcgcHJvZ3JhbSBoZWFkZXJzIik7CiAKIAkvKiBUcnkgYWxsIHRoZSBoZWFkZXJzOiB0aGVyZSBhcmUgdXN1YWxseSBvbmx5IHRocmVlLiAgQSByZWFkLW9ubHkgb25lLAotCSAqIGEgcmVhZC13cml0ZSBvbmUsIGFuZCBhICJub3RlIiBzZWN0aW9uIHdoaWNoIGlzbid0IGxvYWRhYmxlLiAqLworCSAqIGEgcmVhZC13cml0ZSBvbmUsIGFuZCBhICJub3RlIiBzZWN0aW9uIHdoaWNoIHdlIGRvbid0IGxvYWQuICovCiAJZm9yIChpID0gMDsgaSA8IGVoZHItPmVfcGhudW07IGkrKykgewogCQkvKiBJZiB0aGlzIGlzbid0IGEgbG9hZGFibGUgc2VnbWVudCwgd2UgaWdub3JlIGl0ICovCiAJCWlmIChwaGRyW2ldLnBfdHlwZSAhPSBQVF9MT0FEKQpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJaWYgKG1lbWNtcChoZHIuZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSA9PSAwKQogCQlyZXR1cm4gbWFwX2VsZihmZCwgJmhkcik7CiAKLQkvKiBPdGhlcndpc2Ugd2UgYXNzdW1lIGl0J3MgYSBiekltYWdlLCBhbmQgdHJ5IHRvIHVucGFjayBpdCAqLworCS8qIE90aGVyd2lzZSB3ZSBhc3N1bWUgaXQncyBhIGJ6SW1hZ2UsIGFuZCB0cnkgdG8gbG9hZCBpdC4gKi8KIAlyZXR1cm4gbG9hZF9iemltYWdlKGZkKTsKIH0KIApAQCAtNDMzLDEyICs0MzMsMTIgQEAKIAlyZXR1cm4gbGVuOwogfQogCi0vKiBPbmNlIHdlIGtub3cgaG93IG11Y2ggbWVtb3J5IHdlIGhhdmUsIHdlIGNhbiBjb25zdHJ1Y3Qgc2ltcGxlIGxpbmVhciBwYWdlCisvKiBPbmNlIHdlIGtub3cgaG93IG11Y2ggbWVtb3J5IHdlIGhhdmUgd2UgY2FuIGNvbnN0cnVjdCBzaW1wbGUgbGluZWFyIHBhZ2UKICAqIHRhYmxlcyB3aGljaCBzZXQgdmlydHVhbCA9PSBwaHlzaWNhbCB3aGljaCB3aWxsIGdldCB0aGUgR3Vlc3QgZmFyIGVub3VnaAogICogaW50byB0aGUgYm9vdCB0byBjcmVhdGUgaXRzIG93bi4KICAqCiAgKiBXZSBsYXkgdGhlbSBvdXQgb2YgdGhlIHdheSwganVzdCBiZWxvdyB0aGUgaW5pdHJkICh3aGljaCBpcyB3aHkgd2UgbmVlZCB0bwotICoga25vdyBpdHMgc2l6ZSkuICovCisgKiBrbm93IGl0cyBzaXplIGhlcmUpLiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0dXBfcGFnZXRhYmxlcyh1bnNpZ25lZCBsb25nIG1lbSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGluaXRyZF9zaXplKQogewpAQCAtNDg2LDkgKzQ4NiwxMiBAQAogCXVuc2lnbmVkIGludCBpLCBsZW4gPSAwOwogCiAJZm9yIChpID0gMDsgYXJnc1tpXTsgaSsrKSB7CisJCWlmIChpKSB7CisJCQlzdHJjYXQoZHN0K2xlbiwgIiAiKTsKKwkJCWxlbisrOworCQl9CiAJCXN0cmNweShkc3QrbGVuLCBhcmdzW2ldKTsKLQkJc3RyY2F0KGRzdCtsZW4sICIgIik7Ci0JCWxlbiArPSBzdHJsZW4oYXJnc1tpXSkgKyAxOworCQlsZW4gKz0gc3RybGVuKGFyZ3NbaV0pOwogCX0KIAkvKiBJbiBjYXNlIGl0J3MgZW1wdHkuICovCiAJZHN0W2xlbl0gPSAnXDAnOwpAQCAtODQ3LDcgKzg1MCw4IEBACiAgKgogICogSGFuZGxpbmcgb3V0cHV0IGZvciBuZXR3b3JrIGlzIGFsc28gc2ltcGxlOiB3ZSBnZXQgYWxsIHRoZSBvdXRwdXQgYnVmZmVycwogICogYW5kIHdyaXRlIHRoZW0gKGlnbm9yaW5nIHRoZSBmaXJzdCBlbGVtZW50KSB0byB0aGlzIGRldmljZSdzIGZpbGUgZGVzY3JpcHRvcgotICogKHN0ZG91dCkuICovCisgKiAoL2Rldi9uZXQvdHVuKS4KKyAqLwogc3RhdGljIHZvaWQgaGFuZGxlX25ldF9vdXRwdXQoaW50IGZkLCBzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKIHsKIAl1bnNpZ25lZCBpbnQgaGVhZCwgb3V0LCBpbjsKQEAgLTkyMSw3ICs5MjUsNyBAQAogCXdyaXRlKHdha2VyX2ZkLCAmdnEtPmRldi0+ZmQsIHNpemVvZih2cS0+ZGV2LT5mZCkpOwogfQogCi0vKiBSZXNldHRpbmcgYSBkZXZpY2UgaXMgZmFpcmx5IGVhc3kuICovCisvKiBXaGVuIHRoZSBHdWVzdCBhc2tzIHVzIHRvIHJlc2V0IGEgZGV2aWNlLCBpdCdzIGlzIGZhaXJseSBlYXN5LiAqLwogc3RhdGljIHZvaWQgcmVzZXRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKQEAgLTEwMDAsOCArMTAwNCw4IEBACiAJCWlmIChzZWxlY3QoZGV2aWNlcy5tYXhfaW5mZCsxLCAmZmRzLCBOVUxMLCBOVUxMLCAmcG9sbCkgPT0gMCkKIAkJCWJyZWFrOwogCi0JCS8qIE90aGVyd2lzZSwgY2FsbCB0aGUgZGV2aWNlKHMpIHdoaWNoIGhhdmUgcmVhZGFibGUKLQkJICogZmlsZSBkZXNjcmlwdG9ycyBhbmQgYSBtZXRob2Qgb2YgaGFuZGxpbmcgdGhlbS4gICovCisJCS8qIE90aGVyd2lzZSwgY2FsbCB0aGUgZGV2aWNlKHMpIHdoaWNoIGhhdmUgcmVhZGFibGUgZmlsZQorCQkgKiBkZXNjcmlwdG9ycyBhbmQgYSBtZXRob2Qgb2YgaGFuZGxpbmcgdGhlbS4gICovCiAJCWZvciAoaSA9IGRldmljZXMuZGV2OyBpOyBpID0gaS0+bmV4dCkgewogCQkJaWYgKGktPmhhbmRsZV9pbnB1dCAmJiBGRF9JU1NFVChpLT5mZCwgJmZkcykpIHsKIAkJCQlpbnQgZGV2X2ZkOwpAQCAtMTAxMiw4ICsxMDE2LDcgQEAKIAkJCQkgKiBzaG91bGQgbm8gbG9uZ2VyIHNlcnZpY2UgaXQuICBOZXR3b3JraW5nIGFuZAogCQkJCSAqIGNvbnNvbGUgZG8gdGhpcyB3aGVuIHRoZXJlJ3Mgbm8gaW5wdXQKIAkJCQkgKiBidWZmZXJzIHRvIGRlbGl2ZXIgaW50by4gIENvbnNvbGUgYWxzbyB1c2VzCi0JCQkJICogaXQgd2hlbiBpdCBkaXNjb3ZlcnMgdGhhdCBzdGRpbiBpcwotCQkJCSAqIGNsb3NlZC4gKi8KKwkJCQkgKiBpdCB3aGVuIGl0IGRpc2NvdmVycyB0aGF0IHN0ZGluIGlzIGNsb3NlZC4gKi8KIAkJCQlGRF9DTFIoaS0+ZmQsICZkZXZpY2VzLmluZmRzKTsKIAkJCQkvKiBUZWxsIHdha2VyIHRvIGlnbm9yZSBpdCB0b28sIGJ5IHNlbmRpbmcgYQogCQkJCSAqIG5lZ2F0aXZlIGZkIG51bWJlciAoLTEsIHNpbmNlIDAgaXMgYSB2YWxpZApAQCAtMTAzMCw3ICsxMDMzLDggQEAKICAqCiAgKiBBbGwgZGV2aWNlcyBuZWVkIGEgZGVzY3JpcHRvciBzbyB0aGUgR3Vlc3Qga25vd3MgaXQgZXhpc3RzLCBhbmQgYSAic3RydWN0CiAgKiBkZXZpY2UiIHNvIHRoZSBMYXVuY2hlciBjYW4ga2VlcCB0cmFjayBvZiBpdC4gIFdlIGhhdmUgY29tbW9uIGhlbHBlcgotICogcm91dGluZXMgdG8gYWxsb2NhdGUgYW5kIG1hbmFnZSB0aGVtLiAqLworICogcm91dGluZXMgdG8gYWxsb2NhdGUgYW5kIG1hbmFnZSB0aGVtLgorICovCiAKIC8qIFRoZSBsYXlvdXQgb2YgdGhlIGRldmljZSBwYWdlIGlzIGEgInN0cnVjdCBsZ3Vlc3RfZGV2aWNlX2Rlc2MiIGZvbGxvd2VkIGJ5IGEKICAqIG51bWJlciBvZiB2aXJ0cXVldWUgZGVzY3JpcHRvcnMsIHRoZW4gdHdvIHNldHMgb2YgZmVhdHVyZSBiaXRzLCB0aGVuIGFuCkBAIC0xMDc1LDcgKzEwNzksNyBAQAogCXN0cnVjdCB2aXJ0cXVldWUgKippLCAqdnEgPSBtYWxsb2Moc2l6ZW9mKCp2cSkpOwogCXZvaWQgKnA7CiAKLQkvKiBGaXJzdCB3ZSBuZWVkIHNvbWUgcGFnZXMgZm9yIHRoaXMgdmlydHF1ZXVlLiAqLworCS8qIEZpcnN0IHdlIG5lZWQgc29tZSBtZW1vcnkgZm9yIHRoaXMgdmlydHF1ZXVlLiAqLwogCXBhZ2VzID0gKHZyaW5nX3NpemUobnVtX2Rlc2NzLCBnZXRwYWdlc2l6ZSgpKSArIGdldHBhZ2VzaXplKCkgLSAxKQogCQkvIGdldHBhZ2VzaXplKCk7CiAJcCA9IGdldF9wYWdlcyhwYWdlcyk7CkBAIC0xMTE5LDcgKzExMjMsNyBAQAogfQogCiAvKiBUaGUgZmlyc3QgaGFsZiBvZiB0aGUgZmVhdHVyZSBiaXRtYXNrIGlzIGZvciB1cyB0byBhZHZlcnRpc2UgZmVhdHVyZXMuICBUaGUKLSAqIHNlY29uZCBoYWxmIGlmIGZvciB0aGUgR3Vlc3QgdG8gYWNjZXB0IGZlYXR1cmVzLiAqLworICogc2Vjb25kIGhhbGYgaXMgZm9yIHRoZSBHdWVzdCB0byBhY2NlcHQgZmVhdHVyZXMuICovCiBzdGF0aWMgdm9pZCBhZGRfZmVhdHVyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGJpdCkKIHsKIAl1OCAqZmVhdHVyZXMgPSBnZXRfZmVhdHVyZV9iaXRzKGRldik7CkBAIC0xMTQ4LDcgKzExNTIsOSBAQAogfQogCiAvKiBUaGlzIHJvdXRpbmUgZG9lcyBhbGwgdGhlIGNyZWF0aW9uIGFuZCBzZXR1cCBvZiBhIG5ldyBkZXZpY2UsIGluY2x1ZGluZwotICogY2FsbGluZyBuZXdfZGV2X2Rlc2MoKSB0byBhbGxvY2F0ZSB0aGUgZGVzY3JpcHRvciBhbmQgZGV2aWNlIG1lbW9yeS4gKi8KKyAqIGNhbGxpbmcgbmV3X2Rldl9kZXNjKCkgdG8gYWxsb2NhdGUgdGhlIGRlc2NyaXB0b3IgYW5kIGRldmljZSBtZW1vcnkuCisgKgorICogU2VlIHdoYXQgSSBtZWFuIGFib3V0IHVzZXJzcGFjZSBiZWluZyBib3Jpbmc/ICovCiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV3X2RldmljZShjb25zdCBjaGFyICpuYW1lLCB1MTYgdHlwZSwgaW50IGZkLAogCQkJCSBib29sICgqaGFuZGxlX2lucHV0KShpbnQsIHN0cnVjdCBkZXZpY2UgKikpCiB7CkBAIC0xMzgwLDcgKzEzODYsNiBAQAogCSAqIExhdW5jaGVyIHRyaWdnZXJzIGludGVycnVwdCB0byBHdWVzdC4gKi8KIAlpbnQgZG9uZV9mZDsKIH07Ci0vKjoqLwogCiAvKkw6MjEwCiAgKiBUaGUgRGlzawpAQCAtMTQ5MCw3ICsxNDk1LDEwIEBACiAJd2hpbGUgKHJlYWQodmJsay0+d29ya3BpcGVbMF0sICZjLCAxKSA9PSAxKSB7CiAJCS8qIFdlIGFja25vd2xlZGdlIGVhY2ggcmVxdWVzdCBpbW1lZGlhdGVseSB0byByZWR1Y2UgbGF0ZW5jeSwKIAkJICogcmF0aGVyIHRoYW4gd2FpdGluZyB1bnRpbCB3ZSd2ZSBkb25lIHRoZW0gYWxsLiAgSSBoYXZlbid0Ci0JCSAqIG1lYXN1cmVkIHRvIHNlZSBpZiBpdCBtYWtlcyBhbnkgZGlmZmVyZW5jZS4gKi8KKwkJICogbWVhc3VyZWQgdG8gc2VlIGlmIGl0IG1ha2VzIGFueSBkaWZmZXJlbmNlLgorCQkgKgorCQkgKiBUaGF0IHdvdWxkIGJlIGFuIGludGVyZXN0aW5nIHRlc3QsIHdvdWxkbid0IGl0PyAgWW91IGNvdWxkCisJCSAqIGFsc28gdHJ5IGhhdmluZyBtb3JlIHRoYW4gb25lIEkvTyB0aHJlYWQuICovCiAJCXdoaWxlIChzZXJ2aWNlX2lvKGRldikpCiAJCQl3cml0ZSh2YmxrLT5kb25lX2ZkLCAmYywgMSk7CiAJfQpAQCAtMTQ5OCw3ICsxNTA2LDcgQEAKIH0KIAogLyogTm93IHdlJ3ZlIHNlZW4gdGhlIEkvTyB0aHJlYWQsIHdlIHJldHVybiB0byB0aGUgTGF1bmNoZXIgdG8gc2VlIHdoYXQgaGFwcGVucwotICogd2hlbiB0aGUgdGhyZWFkIHRlbGxzIHVzIGl0J3MgY29tcGxldGVkIHNvbWUgSS9PLiAqLworICogd2hlbiB0aGF0IHRocmVhZCB0ZWxscyB1cyBpdCdzIGNvbXBsZXRlZCBzb21lIEkvTy4gKi8KIHN0YXRpYyBib29sIGhhbmRsZV9pb19maW5pc2goaW50IGZkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJY2hhciBjOwpAQCAtMTU3MCwxMSArMTU3OCwxMiBAQAogCSAqIG1vcmUgd29yay4gKi8KIAlwaXBlKHZibGstPndvcmtwaXBlKTsKIAotCS8qIENyZWF0ZSBzdGFjayBmb3IgdGhyZWFkIGFuZCBydW4gaXQgKi8KKwkvKiBDcmVhdGUgc3RhY2sgZm9yIHRocmVhZCBhbmQgcnVuIGl0LiAgU2luY2Ugc3RhY2sgZ3Jvd3MgdXB3YXJkcywgd2UKKwkgKiBwb2ludCB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoaXMgcmVnaW9uLiAqLwogCXN0YWNrID0gbWFsbG9jKDMyNzY4KTsKIAkvKiBTSUdDSExEIC0gV2UgZG9udCAid2FpdCIgZm9yIG91ciBjbG9uZWQgdGhyZWFkLCBzbyBwcmV2ZW50IGl0IGZyb20KIAkgKiBiZWNvbWluZyBhIHpvbWJpZS4gKi8KLQlpZiAoY2xvbmUoaW9fdGhyZWFkLCBzdGFjayArIDMyNzY4LCAgQ0xPTkVfVk0gfCBTSUdDSExELCBkZXYpID09IC0xKQorCWlmIChjbG9uZShpb190aHJlYWQsIHN0YWNrICsgMzI3NjgsIENMT05FX1ZNIHwgU0lHQ0hMRCwgZGV2KSA9PSAtMSkKIAkJZXJyKDEsICJDcmVhdGluZyBjbG9uZSIpOwogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBJL08gdGhyZWFkJ3MgZW5kIG9mIHRoZSBwaXBlcyBvcGVuLiAqLwpAQCAtMTU4NCwxNCArMTU5MywxNCBAQAogCXZlcmJvc2UoImRldmljZSAldTogdmlydGJsb2NrICVsbHUgc2VjdG9yc1xuIiwKIAkJZGV2aWNlcy5kZXZpY2VfbnVtLCBsZTY0X3RvX2NwdShjb25mLmNhcGFjaXR5KSk7CiB9Ci0vKiBUaGF0J3MgdGhlIGVuZCBvZiBkZXZpY2Ugc2V0dXAuIDoqLworLyogVGhhdCdzIHRoZSBlbmQgb2YgZGV2aWNlIHNldHVwLiAqLwogCi0vKiBSZWJvb3QgKi8KKy8qTDoyMzAgUmVib290IGlzIHByZXR0eSBlYXN5OiBjbGVhbiB1cCBhbmQgZXhlYygpIHRoZSBMYXVuY2hlciBhZnJlc2guICovCiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIHJlc3RhcnRfZ3Vlc3Qodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCS8qIENsb3NpbmcgcGlwZXMgY2F1c2VzIHRoZSB3YWtlciB0aHJlYWQgYW5kIGlvX3RocmVhZHMgdG8gZGllLCBhbmQKKwkvKiBDbG9zaW5nIHBpcGVzIGNhdXNlcyB0aGUgV2FrZXIgdGhyZWFkIGFuZCBpb190aHJlYWRzIHRvIGRpZSwgYW5kCiAJICogY2xvc2luZyAvZGV2L2xndWVzdCBjbGVhbnMgdXAgdGhlIEd1ZXN0LiAgU2luY2Ugd2UgZG9uJ3QgdHJhY2sgYWxsCiAJICogb3BlbiBmZHMsIHdlIHNpbXBseSBjbG9zZSBldmVyeXRoaW5nIGJleW9uZCBzdGRlcnIuICovCiAJZm9yIChpID0gMzsgaSA8IEZEX1NFVFNJWkU7IGkrKykKQEAgLTE2MDAsNyArMTYwOSw3IEBACiAJZXJyKDEsICJDb3VsZCBub3QgZXhlYyAlcyIsIG1haW5fYXJnc1swXSk7CiB9CiAKLS8qTDoyMjAgRmluYWxseSB3ZSByZWFjaCB0aGUgY29yZSBvZiB0aGUgTGF1bmNoZXIsIHdoaWNoIHJ1bnMgdGhlIEd1ZXN0LCBzZXJ2ZXMKKy8qTDoyMjAgRmluYWxseSB3ZSByZWFjaCB0aGUgY29yZSBvZiB0aGUgTGF1bmNoZXIgd2hpY2ggcnVucyB0aGUgR3Vlc3QsIHNlcnZlcwogICogaXRzIGlucHV0IGFuZCBvdXRwdXQsIGFuZCBmaW5hbGx5LCBsYXlzIGl0IHRvIHJlc3QuICovCiBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIHJ1bl9ndWVzdChpbnQgbGd1ZXN0X2ZkKQogewpAQCAtMTY0MSw3ICsxNjUwLDcgQEAKIAkJCWVycigxLCAiUmVzZXR0aW5nIGJyZWFrIik7CiAJfQogfQotLyoKKy8qTDoyNDAKICAqIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgTGF1bmNoZXIuICBUaGUgZ29vZCBuZXdzOiB3ZSBhcmUgb3ZlciBoYWxmd2F5CiAgKiB0aHJvdWdoISAgVGhlIGJhZCBuZXdzOiB0aGUgbW9zdCBmaWVuZGlzaCBwYXJ0IG9mIHRoZSBjb2RlIHN0aWxsIGxpZXMgYWhlYWQKICAqIG9mIHVzLgpAQCAtMTY4OCw4ICsxNjk3LDggQEAKIAkgKiBkZXZpY2UgcmVjZWl2ZSBpbnB1dCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLCB3ZSBrZWVwIGFuIGZkc2V0CiAJICogKGluZmRzKSBhbmQgdGhlIG1heGltdW0gZmQgbnVtYmVyIChtYXhfaW5mZCkgd2l0aCB0aGUgaGVhZCBvZiB0aGUKIAkgKiBsaXN0LiAgV2UgYWxzbyBrZWVwIGEgcG9pbnRlciB0byB0aGUgbGFzdCBkZXZpY2UuICBGaW5hbGx5LCB3ZSBrZWVwCi0JICogdGhlIG5leHQgaW50ZXJydXB0IG51bWJlciB0byBoYW5kIG91dCAoMTogcmVtZW1iZXIgdGhhdCAwIGlzIHVzZWQgYnkKLQkgKiB0aGUgdGltZXIpLiAqLworCSAqIHRoZSBuZXh0IGludGVycnVwdCBudW1iZXIgdG8gdXNlIGZvciBkZXZpY2VzICgxOiByZW1lbWJlciB0aGF0IDAgaXMKKwkgKiB1c2VkIGJ5IHRoZSB0aW1lcikuICovCiAJRkRfWkVSTygmZGV2aWNlcy5pbmZkcyk7CiAJZGV2aWNlcy5tYXhfaW5mZCA9IC0xOwogCWRldmljZXMubGFzdGRldiA9IE5VTEw7CkBAIC0xNzkwLDggKzE3OTksOCBAQAogCWxndWVzdF9mZCA9IHRlbGxfa2VybmVsKHBnZGlyLCBzdGFydCk7CiAKIAkvKiBXZSBmb3JrIG9mZiBhIGNoaWxkIHByb2Nlc3MsIHdoaWNoIHdha2VzIHRoZSBMYXVuY2hlciB3aGVuZXZlciBvbmUKLQkgKiBvZiB0aGUgaW5wdXQgZmlsZSBkZXNjcmlwdG9ycyBuZWVkcyBhdHRlbnRpb24uICBPdGhlcndpc2Ugd2Ugd291bGQKLQkgKiBydW4gdGhlIEd1ZXN0IHVudGlsIGl0IHRyaWVzIHRvIG91dHB1dCBzb21ldGhpbmcuICovCisJICogb2YgdGhlIGlucHV0IGZpbGUgZGVzY3JpcHRvcnMgbmVlZHMgYXR0ZW50aW9uLiAgV2UgY2FsbCB0aGlzIHRoZQorCSAqIFdha2VyLCBhbmQgd2UnbGwgY292ZXIgaXQgaW4gYSBtb21lbnQuICovCiAJd2FrZXJfZmQgPSBzZXR1cF93YWtlcihsZ3Vlc3RfZmQpOwogCiAJLyogRmluYWxseSwgcnVuIHRoZSBHdWVzdC4gIFRoaXMgZG9lc24ndCByZXR1cm4uICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LnR4dAppbmRleCA3MjJkNGU3Li4yOTUxMGRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQKQEAgLTEsNiArMSw3IEBACi1SdXN0eSdzIFJlbWFya2FibHkgVW5yZWxpYWJsZSBHdWlkZSB0byBMZ3Vlc3QKLQktIG9yLCBBIFlvdW5nIENvZGVyJ3MgSWxsdXN0cmF0ZWQgSHlwZXJ2aXNvcgotaHR0cDovL2xndWVzdC5vemxhYnMub3JnCisgICAgICBfXworIChfX18oKSdgOyAgUnVzdHkncyBSZW1hcmthYmx5IFVucmVsaWFibGUgR3VpZGUgdG8gTGd1ZXN0CisgLywgICAgL2AgICAgICAtIG9yLCBBIFlvdW5nIENvZGVyJ3MgSWxsdXN0cmF0ZWQgSHlwZXJ2aXNvcgorIFxcIi0tXFwgICAgaHR0cDovL2xndWVzdC5vemxhYnMub3JnCiAKIExndWVzdCBpcyBkZXNpZ25lZCB0byBiZSBhIG1pbmltYWwgaHlwZXJ2aXNvciBmb3IgdGhlIExpbnV4IGtlcm5lbCwgZm9yCiBMaW51eCBkZXZlbG9wZXJzIGFuZCB1c2VycyB0byBleHBlcmltZW50IHdpdGggdmlydHVhbGl6YXRpb24gd2l0aCB0aGUKQEAgLTQxLDEyICs0MiwxNiBAQAogICAgICAgICAgQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MTAwMDAwKQogCiAgICJEZXZpY2UgRHJpdmVycyI6CisgICAgICJCbG9jayBkZXZpY2VzIgorICAgICAgICAiVmlydGlvIGJsb2NrIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIgPSBNL1kKICAgICAgIk5ldHdvcmsgZGV2aWNlIHN1cHBvcnQiCiAgICAgICAgICJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnQiID0gTS9ZCi0gICAgICAgICAgIChDT05GSUdfVFVOPW0pCi0gICAgICJWaXJ0dWFsaXphdGlvbiIKLSAgICAgICAgIkxpbnV4IGh5cGVydmlzb3IgZXhhbXBsZSBjb2RlIiA9IE0vWQotICAgICAgICAgICAoQ09ORklHX0xHVUVTVD1tKQorICAgICAgICAiVmlydGlvIG5ldHdvcmsgZHJpdmVyIChFWFBFUklNRU5UQUwpIiA9IE0vWQorICAgICAgICAgICAoQ09ORklHX1ZJUlRJT19CTEs9bSwgQ09ORklHX1ZJUlRJT19ORVQ9bSBhbmQgQ09ORklHX1RVTj1tKQorCisgICJWaXJ0dWFsaXphdGlvbiIKKyAgICAgIkxpbnV4IGh5cGVydmlzb3IgZXhhbXBsZSBjb2RlIiA9IE0vWQorICAgICAgICAoQ09ORklHX0xHVUVTVD1tKQogCiAtIEEgdG9vbCBjYWxsZWQgImxndWVzdCIgaXMgYXZhaWxhYmxlIGluIHRoaXMgZGlyZWN0b3J5OiB0eXBlICJtYWtlIgogICB0byBidWlsZCBpdC4gIElmIHlvdSBkaWRuJ3QgYnVpbGQgeW91ciBrZXJuZWwgaW4tdHJlZSwgdXNlICJtYWtlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hZ2ljLW51bWJlci50eHQgYi9Eb2N1bWVudGF0aW9uL21hZ2ljLW51bWJlci50eHQKaW5kZXggYmQ0NTBlNy4uOTUwNzAwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tYWdpYy1udW1iZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWFnaWMtbnVtYmVyLnR4dApAQCAtOTUsNyArOTUsNiBAQAogVVNCX1NFUklBTF9QT1JUX01BR0lDIDB4NzMwMSAgICAgIHVzYl9zZXJpYWxfcG9ydCAgIGRyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKIENHX01BR0lDICAgICAgICAgICAgICAweDAwMDkwMjU1ICB1ZnNfY3lsaW5kZXJfZ3JvdXAgaW5jbHVkZS9saW51eC91ZnNfZnMuaAogQTIyMzJfTUFHSUMgICAgICAgICAgIDB4MDAwYTIyMzIgIGdzX3BvcnQgICAgICAgICAgIGRyaXZlcnMvY2hhci9zZXJfYTIyMzIuaAotU09MQVJJU19TT0NLRVRfTUFHSUMgIDB4MDAwQURERUQgIHNvbF9zb2NrZXRfc3RydWN0IGFyY2gvc3BhcmM2NC9zb2xhcmlzL3NvY2tzeXMuaAogUlBPUlRfTUFHSUMgICAgICAgICAgIDB4MDA1MjUwMDEgIHJfcG9ydCAgICAgICAgICAgIGRyaXZlcnMvY2hhci9yb2NrZXRfaW50LmgKIExTRU1BR0lDICAgICAgICAgICAgICAweDA1MDkxOTk4ICBsc2UgICAgICAgICAgICAgICBkcml2ZXJzL2ZjNC9mYy5jCiBHRFRJT0NUTF9NQUdJQyAgICAgICAgMHgwNjAzMGYwNyAgZ2R0aF9pb3dyX3N0ciAgICAgZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tY2EudHh0IGIvRG9jdW1lbnRhdGlvbi9tY2EudHh0CmluZGV4IGFhYmNlNGEuLjUxMDM3NWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWNhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21jYS50eHQKQEAgLTE0MywxNCArMTQzLDcgQEAKIAogQ3VycmVudGx5LCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgTUNBLXNwZWNpZmljIGRldmljZSBkcml2ZXJzLgogCi0xKSBQUy8yIEVTREkKLQlkcml2ZXJzL2Jsb2NrL3BzMmVzZGkuYwotCWluY2x1ZGUvbGludXgvcHMyZXNkaS5oCi0gICBVc2VzIG1ham9yIG51bWJlciAzNiwgYW5kIHNob3VsZCB1c2UgL2RldiBmaWxlcyAvZGV2L2VkYSwgL2Rldi9lZGIuCi0gICBTdXBwb3J0cyB0d28gZHJpdmVzLCBidXQgb25seSBvbmUgY29udHJvbGxlci4gIE1heSB1c2UgdGhlCi0gICBjb21tYW5kLWxpbmUgYXJncyAiZWQ9Y3lsLGhlYWQsc2VjIiBhbmQgInRwNzIwIi4KLQotMikgUFMvMiBTQ1NJCisxKSBQUy8yIFNDU0kKIAlkcml2ZXJzL3Njc2kvaWJtbWNhLmMKIAlkcml2ZXJzL3Njc2kvaWJtbWNhLmgKICAgIFRoZSBkcml2ZXIgZm9yIHRoZSBJQk0gU0NTSSBzdWJzeXN0ZW0uICBJbmNsdWRlcyBib3RoIGludGVncmF0ZWQKQEAgLTE1OSwyNSArMTUyLDI1IEBACiAgICBtYWNoaW5lIHdpdGggYSBmcm9udC1wYW5lbCBkaXNwbGF5IChpLmUuIG1vZGVsIDk1KSwgeW91IGNhbiB1c2UKICAgICJpYm1tY2FzY3NpPWRpc3BsYXkiIHRvIGVuYWJsZSBhIGRyaXZlIGFjdGl2aXR5IGluZGljYXRvci4KIAotMykgM2M1MjMKKzIpIDNjNTIzCiAJZHJpdmVycy9uZXQvM2M1MjMuYwogCWRyaXZlcnMvbmV0LzNjNTIzLmgKICAgIDNDb20gM2M1MjMgRXRoZXJsaW5rL01DIGV0aGVybmV0IGRyaXZlci4KIAotNCkgU01DIFVsdHJhL01DQSBhbmQgSUJNIEFkYXB0ZXIvQQorMykgU01DIFVsdHJhL01DQSBhbmQgSUJNIEFkYXB0ZXIvQQogCWRyaXZlcnMvbmV0L3NtYy1tY2EuYwogCWRyaXZlcnMvbmV0L3NtYy1tY2EuaAogCURyaXZlciBmb3IgdGhlIE1DQSB2ZXJzaW9uIG9mIHRoZSBTTUMgVWx0cmEgYW5kIHZhcmlvdXMgb3RoZXIKIAlPRU0nZWQgYW5kIHdvcmstYWxpa2UgY2FyZHMgKEVsaXRlLCBBZGFwdGVyL0EsIGV0YykuCiAKLTUpIE5FLzIKKzQpIE5FLzIKIAlkcml2ZXIvbmV0L25lMi5jCiAJZHJpdmVyL25ldC9uZTIuaAogCVRoZSBORS8yIGlzIHRoZSBNQ0EgdmVyc2lvbiBvZiB0aGUgTkUyMDAwLiAgVGhpcyBtYXkgbm90IHdvcmsKIAl3aXRoIGNsb25lcyB0aGF0IGhhdmUgYSBkaWZmZXJlbnQgYWRhcHRlciBpZCB0aGFuIHRoZSBvcmlnaW5hbAogCU5FLzIuCiAKLTYpIEZ1dHVyZSBEb21haW4gTUNTLTYwMC83MDAsIE9FTSdkIElCTSBGYXN0IFNDU0kgQWRhcHRlci9BIGFuZAorNSkgRnV0dXJlIERvbWFpbiBNQ1MtNjAwLzcwMCwgT0VNJ2QgSUJNIEZhc3QgU0NTSSBBZGFwdGVyL0EgYW5kCiAgICBSZXBseSBTb3VuZCBCbGFzdGVyL1NDU0kgKFNDU0kgcGFydCkKIAlCZXR0ZXIgc3VwcG9ydCBmb3IgdGhlc2UgY2FyZHMgdGhhbiB0aGUgZHJpdmVyIGZvciBJU0EuCiAgICBTdXBwb3J0cyBtdWx0aXBsZSBjYXJkcyB3aXRoIElSUSBzaGFyaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IDRlMTdiZWIuLmU1YTgxOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTQzMCw4ICs0MzAsOCBAQAogCiAJWypdIEZvciBpbmZvcm1hdGlvbiBvbiBidXMgbWFzdGVyaW5nIERNQSBhbmQgY29oZXJlbmN5IHBsZWFzZSByZWFkOgogCi0JICAgIERvY3VtZW50YXRpb24vcGNpLnR4dAotCSAgICBEb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dAorCSAgICBEb2N1bWVudGF0aW9uL1BDSS9wY2kudHh0CisJICAgIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQKIAkgICAgRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dAogCiAKQEAgLTE0OTMsNyArMTQ5Myw3IEBACiAJYXRvbWljX2RlY19hbmRfdGVzdCgpOwogCWF0b21pY19zdWJfYW5kX3Rlc3QoKTsKIAlhdG9taWNfYWRkX25lZ2F0aXZlKCk7Ci0JYXRvbWljX2FkZF91bmxlc3MoKTsKKwlhdG9taWNfYWRkX3VubGVzcygpOwkvKiB3aGVuIHN1Y2NlZWRzIChyZXR1cm5zIDEpICovCiAJdGVzdF9hbmRfc2V0X2JpdCgpOwogCXRlc3RfYW5kX2NsZWFyX2JpdCgpOwogCXRlc3RfYW5kX2NoYW5nZV9iaXQoKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWAppbmRleCAwMmU1NmQ0Li4xNjM0YzZkYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApAQCAtODQsOSArODQsNiBAQAogCS0gSVAgcG9saWN5LWJhc2VkIHJvdXRpbmcKIHJheV9jcy50eHQKIAktIFJheWxpbmsgV2lyZWxlc3MgTEFOIGNhcmQgZHJpdmVyIGluZm8uCi1zazk4bGluLnR4dAotCS0gTWFydmVsbCBZdWtvbiBDaGlwc2V0IC8gU3lzS29ubmVjdCBTSy05OHh4IGNvbXBsaWFudCBHaWdhYml0Ci0JICBFdGhlcm5ldCBBZGFwdGVyIGZhbWlseSBkcml2ZXIgaW5mbwogc2tmcC50eHQKIAktIFN5c0tvbm5lY3QgRkRESSAoU0stNXh4eCwgQ29tcGFxIE5ldGVsbGlnZW50KSBkcml2ZXIgaW5mby4KIHNtYzkudHh0CkBAIC0xMDMsOCArMTAwLDYgQEAKIAktIFRVTi9UQVAgZGV2aWNlIGRyaXZlciwgYWxsb3dpbmcgdXNlciBzcGFjZSBSeC9UeCBvZiBwYWNrZXRzLgogdm9ydGV4LnR4dAogCS0gaW5mbyBvbiB1c2luZyAzQ29tIFZvcnRleCAoM2M1OTAsIDNjNTkyLCAzYzU5NSwgM2M1OTcpIEV0aGVybmV0IGNhcmRzLgotd2FuLXJvdXRlci50eHQKLQktIFdBTiByb3V0ZXIgZG9jdW1lbnRhdGlvbgogd2F2ZWxhbi50eHQKIAktIEFUJlQgR0lTIChuZWUgTkNSKSBXYXZlTEFOIGNhcmQ6IEFuIEV0aGVybmV0LWxpa2UgcmFkaW8gdHJhbnNjZWl2ZXIKIHgyNS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iY200M3h4LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iY200M3h4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwMmM4ZC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmNtNDN4eC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0KLQkJCUJDTTQzeHggTGludXggRHJpdmVyIFByb2plY3QKLQkJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSW50cm9kdWN0aW9uCi0tLS0tLS0tLS0tLS0KLQotTWFueSBvZiB0aGUgd2lyZWxlc3MgZGV2aWNlcyBmb3VuZCBpbiBtb2Rlcm4gbm90ZWJvb2sgY29tcHV0ZXJzIGFyZQotYmFzZWQgb24gdGhlIHdpcmVsZXNzIGNoaXBzIHByb2R1Y2VkIGJ5IEJyb2FkY29tLiBUaGVzZSBkZXZpY2VzIGhhdmUKLWJlZW4gYSBwcm9ibGVtIGZvciBMaW51eCB1c2VycyBhcyB0aGVyZSBpcyBubyBvcGVuLXNvdXJjZSBkcml2ZXIKLWF2YWlsYWJsZS4gSW4gYWRkaXRpb24sIEJyb2FkY29tIGhhcyBub3QgcmVsZWFzZWQgc3BlY2lmaWNhdGlvbnMKLWZvciB0aGUgZGV2aWNlLCBhbmQgZHJpdmVyIGF2YWlsYWJpbGl0eSBoYXMgYmVlbiBsaW1pdGVkIHRvIHRoZQotYmluYXJ5LW9ubHkgZm9ybSB1c2VkIGluIHRoZSBHUEwgdmVyc2lvbnMgb2YgQVAgaGFyZHdhcmUgc3VjaCBhcyB0aGUKLUxpbmtzeXMgV1JUNTRHLCBhbmQgdGhlIFdpbmRvd3MgYW5kIE9TIFggZHJpdmVycy4gIEJlZm9yZSB0aGlzIHByb2plY3QKLWJlZ2FuLCB0aGUgb25seSB3YXkgdG8gdXNlIHRoZXNlIGRldmljZXMgd2VyZSB0byB1c2UgdGhlIFdpbmRvd3Mgb3IKLU9TIFggZHJpdmVycyB3aXRoIGVpdGhlciB0aGUgTGludXhhbnQgb3IgbmRpc3dyYXBwZXIgbW9kdWxlcy4gVGhlcmUKLWlzIGEgc3Ryb25nIHBlbmFsdHkgaWYgdGhpcyBtZXRob2QgaXMgdXNlZCBhcyBsb2FkaW5nIHRoZSBiaW5hcnktb25seQotbW9kdWxlICJ0YWludHMiIHRoZSBrZXJuZWwsIGFuZCBubyBrZXJuZWwgZGV2ZWxvcGVyIHdpbGwgaGVscCBkaWFnbm9zZQotYW55IGtlcm5lbCBwcm9ibGVtcy4KLQotRGV2ZWxvcG1lbnQKLS0tLS0tLS0tLS0tCi0KLVRoaXMgZHJpdmVyIGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZwotYSBjbGVhbi1yb29tIHRlY2huaXF1ZSB0aGF0IGlzIGRlc2NyaWJlZCBhdAotaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1JldmVyc2VFbmdpbmVlcmluZ1Byb2Nlc3MuIEZvciBsZWdhbAotcmVhc29ucywgbm9uZSBvZiB0aGUgY2xlYW4tcm9vbSBjcmV3IHdvcmtzIG9uIHRoZSBvbiB0aGUgTGludXggZHJpdmVyLAotYW5kIG5vbmUgb2YgdGhlIExpbnV4IGRldmVsb3BlcnMgc2VlcyBhbnl0aGluZyBidXQgdGhlIHNwZWNpZmljYXRpb25zLAotd2hpY2ggYXJlIHRoZSB1bHRpbWF0ZSBwcm9kdWN0IG9mIHRoZSByZXZlcnNlLWVuZ2luZWVyaW5nIGdyb3VwLgotCi1Tb2Z0d2FyZQotLS0tLS0tLS0KLQotU2luY2UgdGhlIHJlbGVhc2Ugb2YgdGhlIDIuNi4xNyBrZXJuZWwsIHRoZSBiY200M3h4IGRyaXZlciBoYXMgYmVlbgotZGlzdHJpYnV0ZWQgd2l0aCB0aGUga2VybmVsIHNvdXJjZSwgYW5kIGlzIHByZWJ1aWx0IGluIG1vc3QsIGlmIG5vdAotYWxsLCBkaXN0cmlidXRpb25zLiAgVGhlcmUgaXMsIGhvd2V2ZXIsIGFkZGl0aW9uYWwgc29mdHdhcmUgdGhhdCBpcwotcmVxdWlyZWQuIFRoZSBmaXJtd2FyZSB1c2VkIGJ5IHRoZSBjaGlwIGlzIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLW9mIEJyb2FkY29tIGFuZCB0aGV5IGhhdmUgbm90IGdpdmVuIHRoZSBiY200M3h4IHRlYW0gcmVkaXN0cmlidXRpb24KLXJpZ2h0cyB0byB0aGlzIGZpcm13YXJlLiAgU2luY2Ugd2UgY2Fubm90IGxlZ2FsbHkgcmVkaXN0cmlidXRlCi10aGUgZmlybXdhcmUgd2UgY2Fubm90IGluY2x1ZGUgaXQgd2l0aCB0aGUgZHJpdmVyLiBGdXJ0aGVybW9yZSwgaXQKLWNhbm5vdCBiZSBwbGFjZWQgaW4gdGhlIGRvd25sb2FkYWJsZSBhcmNoaXZlcyBvZiBhbnkgZGlzdHJpYnV0aW5nCi1vcmdhbml6YXRpb247IHRoZXJlZm9yZSwgdGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIG9idGFpbmluZyB0aGUKLWZpcm13YXJlIGFuZCBwbGFjaW5nIGl0IGluIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbiBzbyB0aGF0IHRoZSBkcml2ZXIKLWNhbiBmaW5kIGl0IHdoZW4gaW5pdGlhbGl6aW5nLgotCi1UbyBoZWxwIHdpdGggdGhpcyBwcm9jZXNzLCB0aGUgYmNtNDN4eCBkZXZlbG9wZXJzIHByb3ZpZGUgYSBzZXBhcmF0ZQotcHJvZ3JhbSBuYW1lZCBiY200M3h4LWZ3Y3V0dGVyIHRvICJjdXQiIHRoZSBmaXJtd2FyZSBvdXQgb2YgYQotV2luZG93cyBvciBPUyBYIGRyaXZlciBhbmQgd3JpdGUgdGhlIGV4dHJhY3RlZCBmaWxlcyB0byB0aGUgcHJvcGVyCi1sb2NhdGlvbi4gVGhpcyBwcm9ncmFtIGlzIHVzdWFsbHkgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uOwotaG93ZXZlciwgaXQgbWF5IGJlIGRvd25sb2FkZWQgZnJvbQotCi1odHRwOi8vZGV2ZWxvcGVyLmJlcmxpb3MuZGUvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTQ1NDcKLQotVGhlIGZpcm13YXJlIGlzIGF2YWlsYWJsZSBpbiB0d28gdmVyc2lvbnMuIFYzIGZpcm13YXJlIGlzIHVzZWQgd2l0aAotdGhlIGluLWtlcm5lbCBiY200M3h4IGRyaXZlciB0aGF0IHVzZXMgYSBzb2Z0d2FyZSBNQUMgbGF5ZXIgY2FsbGVkCi1Tb2Z0TUFDLCBhbmQgd2lsbCBoYXZlIGEgbWljcm9jb2RlIHJldmlzaW9uIG9mIDB4MTI3IG9yIHNtYWxsZXIuIFRoZQotVjQgZmlybXdhcmUgaXMgdXNlZCBieSBhbiBvdXQtb2Yta2VybmVsIGRyaXZlciBlbXBsb3lpbmcgYSB2YXJpYXRpb24gb2YKLXRoZSBEZXZpY2VzY2FwZSBNQUMgbGF5ZXIga25vd24gYXMgZDgwMjExLiBPbmNlIGJjbTQzeHgtZDgwMjExIHJlYWNoZXMKLWEgc2F0aXNmYWN0b3J5IGxldmVsIG9mIGRldmVsb3BtZW50LCBpdCB3aWxsIHJlcGxhY2UgYmNtNDN4eC1zb2Z0bWFjCi1pbiB0aGUga2VybmVsIGFzIGl0IGlzIG11Y2ggbW9yZSBmbGV4aWJsZSBhbmQgcG93ZXJmdWwuCi0KLUEgc291cmNlIGZvciB0aGUgbGF0ZXN0IFYzIGZpcm13YXJlIGlzCi0KLWh0dHA6Ly9kb3dubG9hZHMub3BlbndydC5vcmcvc291cmNlcy93bF9hcHN0YS0zLjEzMC4yMC4wLm8KLQotT25jZSB0aGlzIGZpbGUgaXMgZG93bmxvYWRlZCwgdGhlIGNvbW1hbmQKLSdiY200M3h4LWZ3Y3V0dGVyIC13IDxkaXI+IDxmaWxlbmFtZT4nCi13aWxsIGV4dHJhY3QgdGhlIG1pY3JvY29kZSBhbmQgd3JpdGUgaXQgdG8gZGlyZWN0b3J5Ci08ZGlyPi4gVGhlIGNvcnJlY3QgZGlyZWN0b3J5IHdpbGwgZGVwZW5kIG9uIHlvdXIgZGlzdHJpYnV0aW9uOwotaG93ZXZlciwgbW9zdCB1c2UgJy9saWIvZmlybXdhcmUnLiBPbmNlIHRoaXMgc3RlcCBpcyBjb21wbGV0ZWQsCi10aGUgYmNtM3h4IGRyaXZlciBzaG91bGQgbG9hZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYm9vdGVkLiBUbyBzZWUKLWFueSBtZXNzYWdlcyByZWxhdGluZyB0byB0aGUgZHJpdmVyLCBpc3N1ZSB0aGUgY29tbWFuZCAnZG1lc2cgfAotZ3JlcCBiY200M3h4JyBmcm9tIGEgdGVybWluYWwgd2luZG93LiBJZiB0aGVyZSBhcmUgYW55IHByb2JsZW1zLAotcGxlYXNlIHNlbmQgdGhhdCBvdXRwdXQgdG8gQmNtNDN4eC1kZXZAbGlzdHMuYmVybGlvcy5kZS4KLQotQWx0aG91Z2ggdGhlIGRyaXZlciBoYXMgYmVlbiBpbi1rZXJuZWwgc2luY2UgMi42LjE3LCB0aGUgZWFybGllc3QKLXZlcnNpb24gaXMgcXVpdGUgbGltaXRlZCBpbiBpdHMgY2FwYWJpbGl0eS4gUGF0Y2hlcyB0aGF0IGluY2x1ZGUKLWFsbCBmZWF0dXJlcyBvZiBsYXRlciB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgc3RhYmxlIGtlcm5lbAotdmVyc2lvbnMgZnJvbSAyLjYuMTguIFRoZXNlIHdpbGwgYmUgbmVlZGVkIGlmIHlvdSB1c2UgYSBCQ000MzE4LAotb3IgYSBQQ0kgRXhwcmVzcyB2ZXJzaW9uIChCQ000MzExIGFuZCBCQ000MzEyKS4gSW4gYWRkaXRpb24sIGlmIHlvdQotaGF2ZSBhbiBlYXJseSBCQ000MzA2IGFuZCBtb3JlIHRoYW4gMSBHQiBSQU0sIHlvdXIga2VybmVsIHdpbGwgbmVlZAotdG8gYmUgcGF0Y2hlZC4JVGhlc2UgcGF0Y2hlcywgd2hpY2ggYXJlIGJlaW5nIHVwZGF0ZWQgcmVndWxhcmx5LAotYXJlIGF2YWlsYWJsZSBhdCBmdHA6Ly9sd2Zpbmdlci5keW5hbGlhcy5vcmcvcGF0Y2hlcy4gTG9vayBmb3IKLWNvbWJpbmVkXzIuNi5ZWS5wYXRjaC4gT2YgY291cnNlIHlvdSB3aWxsIG5lZWQga2VybmVsIHNvdXJjZSBkb3dubG9hZGVkCi1mcm9tIGtlcm5lbC5vcmcsIG9yIHRoZSBzb3VyY2UgZnJvbSB5b3VyIGRpc3RyaWJ1dGlvbi4KLQotSWYgeW91IGJ1aWxkIHlvdXIgb3duIGtlcm5lbCwgcGxlYXNlIGVuYWJsZSBDT05GSUdfQkNNNDNYWF9ERUJVRwotYW5kIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRy4gVGhlIGxvZyBpbmZvcm1hdGlvbiBwcm92aWRlZCBpcwotZXNzZW50aWFsIGZvciBzb2x2aW5nIGFueSBwcm9ibGVtcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKaW5kZXggZjFiMmRlMS4uNjQxZDJhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKQEAgLTI4MSwxMCArMjgxLDEwIEBACiAgICAgICAgICAgICBzYV9mYW1pbHlfdCBjYW5fZmFtaWx5OwogICAgICAgICAgICAgaW50ICAgICAgICAgY2FuX2lmaW5kZXg7CiAgICAgICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7IGNhbmlkX3QgcnhfaWQsIHR4X2lkOyB9IHRwMTY7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7IGNhbmlkX3QgcnhfaWQsIHR4X2lkOyB9IHRwMjA7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7IGNhbmlkX3QgcnhfaWQsIHR4X2lkOyB9IG1jbmV0OwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeyBjYW5pZF90IHJ4X2lkLCB0eF9pZDsgfSBpc290cDsKKyAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNwb3J0IHByb3RvY29sIGNsYXNzIGFkZHJlc3MgaW5mbyAoZS5nLiBJU09UUCkgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsgY2FuaWRfdCByeF9pZCwgdHhfaWQ7IH0gdHA7CisKKyAgICAgICAgICAgICAgICAgICAgLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBDQU4gcHJvdG9jb2xzIGFkZHJlc3MgaW5mb3JtYXRpb24gKi8KICAgICAgICAgICAgIH0gY2FuX2FkZHI7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTkwYTk1Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zazk4bGluLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU2OCArMCwwIEBACi0oQylDb3B5cmlnaHQgMTk5OS0yMDA0IE1hcnZlbGwoUikuCi1BbGwgcmlnaHRzIHJlc2VydmVkCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc2s5OGxpbi50eHQgY3JlYXRlZCAxMy1GZWItMjAwNAotCi1SZWFkbWUgRmlsZSBmb3Igc2s5OGxpbiB2Ni4yMwotTWFydmVsbCBZdWtvbi9TeXNLb25uZWN0IFNLLTk4eHggR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyIGZhbWlseSBkcml2ZXIgZm9yIExJTlVYCi0KLVRoaXMgZmlsZSBjb250YWlucwotIDEgIE92ZXJ2aWV3Ci0gMiAgUmVxdWlyZWQgRmlsZXMKLSAzICBJbnN0YWxsYXRpb24KLSAgICAzLjEgIERyaXZlciBJbnN0YWxsYXRpb24KLSAgICAzLjIgIEluY2x1c2lvbiBvZiBhZGFwdGVyIGF0IHN5c3RlbSBzdGFydAotIDQgIERyaXZlciBQYXJhbWV0ZXJzCi0gICAgNC4xICBQZXItUG9ydCBQYXJhbWV0ZXJzCi0gICAgNC4yICBBZGFwdGVyIFBhcmFtZXRlcnMKLSA1ICBMYXJnZSBGcmFtZSBTdXBwb3J0Ci0gNiAgVkxBTiBhbmQgTGluayBBZ2dyZWdhdGlvbiBTdXBwb3J0IChJRUVFIDgwMi4xLCA4MDIuMXEsIDgwMi4zYWQpCi0gNyAgVHJvdWJsZXNob290aW5nCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLTEgIE92ZXJ2aWV3Ci09PT09PT09PT09PQotCi1UaGUgc2s5OGxpbiBkcml2ZXIgc3VwcG9ydHMgdGhlIE1hcnZlbGwgWXVrb24gYW5kIFN5c0tvbm5lY3QgCi1TSy05OHh4L1NLLTk1eHggY29tcGxpYW50IEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlciBvbiBMaW51eC4gSXQgaGFzIAotYmVlbiB0ZXN0ZWQgd2l0aCBMaW51eCBvbiBJbnRlbC94ODYgbWFjaGluZXMuCi0qKioKLQotCi0yICBSZXF1aXJlZCBGaWxlcwotPT09PT09PT09PT09PT09PT0KLQotVGhlIGxpbnV4IGtlcm5lbCBzb3VyY2UuCi1ObyBhZGRpdGlvbmFsIGZpbGVzIHJlcXVpcmVkLgotKioqCi0KLQotMyAgSW5zdGFsbGF0aW9uCi09PT09PT09PT09PT09PT0KLQotSXQgaXMgcmVjb21tZW5kZWQgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgZnJvbSB0aGUgCi1TeXNLb25uZWN0IHdlYiBzaXRlIHd3dy5zeXNrb25uZWN0LmNvbS4gSWYgeW91IGhhdmUgZG93bmxvYWRlZCB0aGUgbGF0ZXN0Ci1kcml2ZXIsIHRoZSBMaW51eCBrZXJuZWwgaGFzIHRvIGJlIHBhdGNoZWQgYmVmb3JlIHRoZSBkcml2ZXIgY2FuIGJlIAotaW5zdGFsbGVkLiBGb3IgZGV0YWlscyBvbiBob3cgdG8gcGF0Y2ggYSBMaW51eCBrZXJuZWwsIHJlZmVyIHRvIHRoZSAKLXBhdGNoLnR4dCBmaWxlLgotCi0zLjEgIERyaXZlciBJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHRoZSBhY3Rpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGluc3RhbGwKLXRoZSBkcml2ZXIgYW5kIHRvIHN0YXJ0IGl0IG1hbnVhbGx5LiBUaGVzZSBzdGVwcyBzaG91bGQgYmUgY2FycmllZAotb3V0IGZvciB0aGUgaW5pdGlhbCBkcml2ZXIgc2V0dXAuIE9uY2UgY29uZmlybWVkIHRvIGJlIG9rLCB0aGV5IGNhbgotYmUgaW5jbHVkZWQgaW4gdGhlIHN5c3RlbSBzdGFydC4KLQotTk9URSAxOiBUbyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGFza3MgeW91IG5lZWQgJ3Jvb3QnIGFjY2Vzcy4KLQotTk9URSAyOiBJbiBjYXNlIG9mIHByb2JsZW1zLCBwbGVhc2UgcmVhZCB0aGUgc2VjdGlvbiAiVHJvdWJsZXNob290aW5nIiAKLSAgICAgICAgYmVsb3cuCi0KLVRoZSBkcml2ZXIgY2FuIGVpdGhlciBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBvciBpdCBjYW4gYmUgY29tcGlsZWQgCi1hcyBhIG1vZHVsZS4gU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gZHVyaW5nIHRoZSBrZXJuZWwgCi1jb25maWd1cmF0aW9uLgotCi1Db21waWxlL3VzZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UbyBjb21waWxlIHRoZSBkcml2ZXIsIGdvIHRvIHRoZSBkaXJlY3RvcnkgL3Vzci9zcmMvbGludXggYW5kCi1leGVjdXRlIHRoZSBjb21tYW5kICJtYWtlIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciIGFuZCBwcm9jZWVkIGFzIAotZm9sbG93czoKLQotVG8gaW50ZWdyYXRlIHRoZSBkcml2ZXIgcGVybWFuZW50bHkgaW50byB0aGUga2VybmVsLCBwcm9jZWVkIGFzIGZvbGxvd3M6Ci0KLTEuIFNlbGVjdCB0aGUgbWVudSAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIgYW5kIHRoZW4gIkV0aGVybmV0KDEwMDBNYml0KSIKLTIuIE1hcmsgIk1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBmYW1pbHkgc3VwcG9ydCIgCi0gICB3aXRoICgqKSAKLTMuIEJ1aWxkIGEgbmV3IGtlcm5lbCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhYm92ZSBvcHRpb25zIGlzIAotICAgZmluaXNoZWQuCi00LiBJbnN0YWxsIHRoZSBuZXcga2VybmVsLgotNS4gUmVib290IHlvdXIgc3lzdGVtLgotCi1UbyB1c2UgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgcHJvY2VlZCBhcyBmb2xsb3dzOgotCi0xLiBFbmFibGUgJ2xvYWRhYmxlIG1vZHVsZSBzdXBwb3J0JyBpbiB0aGUga2VybmVsLgotMi4gRm9yIGF1dG9tYXRpYyBkcml2ZXIgc3RhcnQsIGVuYWJsZSB0aGUgJ0tlcm5lbCBtb2R1bGUgbG9hZGVyJy4KLTMuIFNlbGVjdCB0aGUgbWVudSAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIgYW5kIHRoZW4gIkV0aGVybmV0KDEwMDBNYml0KSIKLTQuIE1hcmsgIk1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBmYW1pbHkgc3VwcG9ydCIgCi0gICB3aXRoIChNKQotNS4gRXhlY3V0ZSB0aGUgY29tbWFuZCAibWFrZSBtb2R1bGVzIi4KLTYuIEV4ZWN1dGUgdGhlIGNvbW1hbmQgIm1ha2UgbW9kdWxlc19pbnN0YWxsIi4KLSAgIFRoZSBhcHByb3ByaWF0ZSBtb2R1bGVzIHdpbGwgYmUgaW5zdGFsbGVkLgotNy4gUmVib290IHlvdXIgc3lzdGVtLgotCi0KLUxvYWQgdGhlIG1vZHVsZSBtYW51YWxseQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UbyBsb2FkIHRoZSBtb2R1bGUgbWFudWFsbHksIHByb2NlZWQgYXMgZm9sbG93czoKLQotMS4gRW50ZXIgIm1vZHByb2JlIHNrOThsaW4iLgotMi4gSWYgYSBNYXJ2ZWxsIFl1a29uIG9yIFN5c0tvbm5lY3QgU0stOTh4eCBhZGFwdGVyIGlzIGluc3RhbGxlZCBpbiAKLSAgIHlvdXIgY29tcHV0ZXIgYW5kIHlvdSBoYXZlIGEgL3Byb2MgZmlsZSBzeXN0ZW0sIGV4ZWN1dGUgdGhlIGNvbW1hbmQ6Ci0gICAibHMgL3Byb2MvbmV0L3NrOThsaW4vIiAKLSAgIFRoaXMgc2hvdWxkIHByb2R1Y2UgYW4gb3V0cHV0IGNvbnRhaW5pbmcgYSBsaW5lIHdpdGggdGhlIGZvbGxvd2luZyAKLSAgIGZvcm1hdDoKLSAgIGV0aDAgICBldGgxICAuLi4KLSAgIHdoaWNoIGluZGljYXRlcyB0aGF0IHlvdXIgYWRhcHRlciBoYXMgYmVlbiBmb3VuZCBhbmQgaW5pdGlhbGl6ZWQuCi0gICAKLSAgIE5PVEUgMTogSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBNYXJ2ZWxsIFl1a29uIG9yIFN5c0tvbm5lY3QgU0stOTh4eCAKLSAgICAgICAgICAgYWRhcHRlciBpbnN0YWxsZWQsIHRoZSBhZGFwdGVycyB3aWxsIGJlIGxpc3RlZCBhcyAnZXRoMCcsIAotICAgICAgICAgICAgICAgICAgICdldGgxJywgJ2V0aDInLCBldGMuCi0gICAgICAgICAgICAgICAgICAgRm9yIGVhY2ggYWRhcHRlciwgcmVwZWF0IHN0ZXBzIDMgYW5kIDQgYmVsb3cuCi0KLSAgIE5PVEUgMjogSWYgeW91IGhhdmUgb3RoZXIgRXRoZXJuZXQgYWRhcHRlcnMgaW5zdGFsbGVkLCB5b3VyIE1hcnZlbGwKLSAgICAgICAgICAgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4IGFkYXB0ZXIgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIAotICAgICAgICAgICAgICAgICAgIG5leHQgYXZhaWxhYmxlIG51bWJlciwgZS5nLiAnZXRoMScuIFRoZSBtYXBwaW5nIGlzIGV4ZWN1dGVkIAotICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkuCi0gICAgICAgICAgIFRoZSBtb2R1bGUgaW5zdGFsbGF0aW9uIG1lc3NhZ2UgKGRpc3BsYXllZCBlaXRoZXIgaW4gYSBzeXN0ZW0KLSAgICAgICAgICAgbG9nIGZpbGUgb3Igb24gdGhlIGNvbnNvbGUpIHByaW50cyBhIGxpbmUgZm9yIGVhY2ggYWRhcHRlciAKLSAgICAgICAgICAgZm91bmQgY29udGFpbmluZyB0aGUgY29ycmVzcG9uZGluZyAnZXRoWCcuCi0KLTMuIFNlbGVjdCBhbiBJUCBhZGRyZXNzIGFuZCBhc3NpZ24gaXQgdG8gdGhlIHJlc3BlY3RpdmUgYWRhcHRlciBieSAKLSAgIGVudGVyaW5nOgotICAgaWZjb25maWcgZXRoMCA8aXAtYWRkcmVzcz4KLSAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgYWRhcHRlciBpcyBjb25uZWN0ZWQgdG8gdGhlIEV0aGVybmV0LiAKLSAgIAotICAgU0stOTh4eCBHaWdhYml0IEV0aGVybmV0IFNlcnZlciBBZGFwdGVyczogVGhlIHllbGxvdyBMRUQgb24gdGhlIGFkYXB0ZXIgCi0gICBpcyBub3cgYWN0aXZlLCB0aGUgbGluayBzdGF0dXMgTEVEIG9mIHRoZSBwcmltYXJ5IHBvcnQgaXMgYWN0aXZlIGFuZCAKLSAgIHRoZSBsaW5rIHN0YXR1cyBMRUQgb2YgdGhlIHNlY29uZGFyeSBwb3J0IChvbiBkdWFsIHBvcnQgYWRhcHRlcnMpIGlzIAotICAgYmxpbmtpbmcgKGlmIHRoZSBwb3J0cyBhcmUgY29ubmVjdGVkIHRvIGEgc3dpdGNoIG9yIGh1YikuCi0gICBTSy05OHh4IFYyLjAgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyczogVGhlIGxpbmsgc3RhdHVzIExFRCBpcyBhY3RpdmUuCi0gICBJbiBhZGRpdGlvbiwgeW91IHdpbGwgcmVjZWl2ZSBhIHN0YXR1cyBtZXNzYWdlIG9uIHRoZSBjb25zb2xlIHN0YXRpbmcKLSAgICJldGhYOiBuZXR3b3JrIGNvbm5lY3Rpb24gdXAgdXNpbmcgcG9ydCBZIiBhbmQgc2hvd2luZyB0aGUgc2VsZWN0ZWQgCi0gICBjb25uZWN0aW9uIHBhcmFtZXRlcnMgKHggc3RhbmRzIGZvciB0aGUgZXRoZXJuZXQgZGV2aWNlIG51bWJlciAKLSAgICgwLDEsMiwgZXRjKSwgeSBzdGFuZHMgZm9yIHRoZSBwb3J0IG5hbWUgKEEgb3IgQikpLgotCi0gICBOT1RFOiBJZiB5b3UgYXJlIGluIGRvdWJ0IGFib3V0IElQIGFkZHJlc3NlcywgYXNrIHlvdXIgbmV0d29yawotICAgICAgICAgYWRtaW5pc3RyYXRvciBmb3IgYXNzaXN0YW5jZS4KLSAgCi00LiBZb3VyIGFkYXB0ZXIgc2hvdWxkIG5vdyBiZSBmdWxseSBvcGVyYXRpb25hbC4KLSAgIFVzZSAncGluZyA8b3RoZXJzdGF0aW9uPicgdG8gdmVyaWZ5IHRoZSBjb25uZWN0aW9uIHRvIG90aGVyIGNvbXB1dGVycyAKLSAgIG9uIHlvdXIgbmV0d29yay4KLTUuIFRvIGNoZWNrIHRoZSBhZGFwdGVyIGNvbmZpZ3VyYXRpb24gdmlldyAvcHJvYy9uZXQvc2s5OGxpbi9bZGV2aWNlbmFtZV0uCi0gICBGb3IgZXhhbXBsZSBieSBleGVjdXRpbmc6ICAgIAotICAgImNhdCAvcHJvYy9uZXQvc2s5OGxpbi9ldGgwIiAKLQotVW5sb2FkIHRoZSBtb2R1bGUKLS0tLS0tLS0tLS0tLS0tLS0tCi1UbyBzdG9wIGFuZCB1bmxvYWQgdGhlIGRyaXZlciBtb2R1bGVzLCBwcm9jZWVkIGFzIGZvbGxvd3M6Ci0KLTEuIEV4ZWN1dGUgdGhlIGNvbW1hbmQgImlmY29uZmlnIGV0aDAgZG93biIuCi0yLiBFeGVjdXRlIHRoZSBjb21tYW5kICJybW1vZCBzazk4bGluIi4KLQotMy4yICBJbmNsdXNpb24gb2YgYWRhcHRlciBhdCBzeXN0ZW0gc3RhcnQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNpbmNlIGEgbGFyZ2UgbnVtYmVyIG9mIGRpZmZlcmVudCBMaW51eCBkaXN0cmlidXRpb25zIGFyZSAKLWF2YWlsYWJsZSwgd2UgYXJlIHVuYWJsZSB0byBkZXNjcmliZSBhIGdlbmVyYWwgaW5zdGFsbGF0aW9uIHByb2NlZHVyZQotZm9yIHRoZSBkcml2ZXIgbW9kdWxlLgotQmVjYXVzZSB0aGUgZHJpdmVyIGlzIG5vdyBpbnRlZ3JhdGVkIGluIHRoZSBrZXJuZWwsIGluc3RhbGxhdGlvbiBzaG91bGQKLWJlIGVhc3ksIHVzaW5nIHRoZSBzdGFuZGFyZCBtZWNoYW5pc20gb2YgeW91ciBkaXN0cmlidXRpb24uCi1SZWZlciB0byB0aGUgZGlzdHJpYnV0aW9uJ3MgbWFudWFsIGZvciBpbnN0YWxsYXRpb24gb2YgZXRoZXJuZXQgYWRhcHRlcnMuCi0KLSoqKgotCi00ICBEcml2ZXIgUGFyYW1ldGVycwotPT09PT09PT09PT09PT09PT09PT0KLQotUGFyYW1ldGVycyBjYW4gYmUgc2V0IGF0IHRoZSBjb21tYW5kIGxpbmUgYWZ0ZXIgdGhlIG1vZHVsZSBoYXMgYmVlbiAKLWxvYWRlZCB3aXRoIHRoZSBjb21tYW5kICdtb2Rwcm9iZScuCi1JbiBzb21lIGRpc3RyaWJ1dGlvbnMsIHRoZSBjb25maWd1cmF0aW9uIHRvb2xzIGFyZSBhYmxlIHRvIHBhc3MgcGFyYW1ldGVycwotdG8gdGhlIGRyaXZlciBtb2R1bGUuCi0KLUlmIHlvdSB1c2UgdGhlIGtlcm5lbCBtb2R1bGUgbG9hZGVyLCB5b3UgY2FuIHNldCBkcml2ZXIgcGFyYW1ldGVycwotaW4gdGhlIGZpbGUgL2V0Yy9tb2Rwcm9iZS5jb25mIChvciAvZXRjL21vZHVsZXMuY29uZiBpbiAyLjQgb3IgZWFybGllcikuCi1UbyBzZXQgdGhlIGRyaXZlciBwYXJhbWV0ZXJzIGluIHRoaXMgZmlsZSwgcHJvY2VlZCBhcyBmb2xsb3dzOgotCi0xLiBJbnNlcnQgYSBsaW5lIG9mIHRoZSBmb3JtIDoKLSAgIG9wdGlvbnMgc2s5OGxpbiAuLi4KLSAgIEZvciAiLi4uIiwgdGhlIHNhbWUgc3ludGF4IGlzIHJlcXVpcmVkIGFzIGRlc2NyaWJlZCBmb3IgdGhlIGNvbW1hbmQKLSAgIGxpbmUgcGFyYW1ldGVycyBvZiBtb2Rwcm9iZSBiZWxvdy4KLTIuIFRvIGFjdGl2YXRlIHRoZSBuZXcgcGFyYW1ldGVycywgZWl0aGVyIHJlYm9vdCB5b3VyIGNvbXB1dGVyCi0gICBvciAKLSAgIHVubG9hZCBhbmQgcmVsb2FkIHRoZSBkcml2ZXIuCi0gICBUaGUgc3ludGF4IG9mIHRoZSBkcml2ZXIgcGFyYW1ldGVycyBpczoKLQotICAgICAgICBtb2Rwcm9iZSBzazk4bGluIHBhcmFtZXRlcj12YWx1ZTFbLHZhbHVlMlssdmFsdWUzLi4uXV0KLQotICAgd2hlcmUgdmFsdWUxIHJlZmVycyB0byB0aGUgZmlyc3QgYWRhcHRlciwgdmFsdWUyIHRvIHRoZSBzZWNvbmQgZXRjLgotCi1OT1RFOiBBbGwgcGFyYW1ldGVycyBhcmUgY2FzZSBzZW5zaXRpdmUuIFdyaXRlIHRoZW0gZXhhY3RseSBhcyBzaG93biAKLSAgICAgIGJlbG93LgotCi1FeGFtcGxlOgotU3VwcG9zZSB5b3UgaGF2ZSB0d28gYWRhcHRlcnMuIFlvdSB3YW50IHRvIHNldCBhdXRvLW5lZ290aWF0aW9uCi1vbiB0aGUgZmlyc3QgYWRhcHRlciB0byBPTiBhbmQgb24gdGhlIHNlY29uZCBhZGFwdGVyIHRvIE9GRi4KLVlvdSBhbHNvIHdhbnQgdG8gc2V0IER1cGxleENhcGFiaWxpdGllcyBvbiB0aGUgZmlyc3QgYWRhcHRlcgotdG8gRlVMTCwgYW5kIG9uIHRoZSBzZWNvbmQgYWRhcHRlciB0byBIQUxGLgotVGhlbiwgeW91IG11c3QgZW50ZXI6Ci0KLSAgICAgICAgbW9kcHJvYmUgc2s5OGxpbiBBdXRvTmVnX0E9T24sT2ZmIER1cENhcF9BPUZ1bGwsSGFsZgotCi1OT1RFOiBUaGUgbnVtYmVyIG9mIGFkYXB0ZXJzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgdGhpcyB3YXkgaXMKLSAgICAgIGxpbWl0ZWQgaW4gdGhlIGRyaXZlciAoZmlsZSBza2dlLmMsIGNvbnN0YW50IFNLX01BWF9DQVJEX1BBUkFNKS4KLSAgICAgIFRoZSBjdXJyZW50IGxpbWl0IGlzIDE2LiBJZiB5b3UgaGFwcGVuIHRvIGluc3RhbGwKLSAgICAgIG1vcmUgYWRhcHRlcnMsIGFkanVzdCB0aGlzIGFuZCByZWNvbXBpbGUuCi0KLQotNC4xICBQZXItUG9ydCBQYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlc2Ugc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBmb3IgZWFjaCBwb3J0IG9uIHRoZSBhZGFwdGVyLgotSW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiwgJz8nIHN0YW5kcyBmb3IgdGhlIHBvcnQgZm9yCi13aGljaCB5b3Ugc2V0IHRoZSBwYXJhbWV0ZXIgKEEgb3IgQikuCi0KLVNwZWVkCi0tLS0tLQotUGFyYW1ldGVyOiAgICBTcGVlZF8/Ci1WYWx1ZXM6ICAgICAgIDEwLCAxMDAsIDEwMDAsIEF1dG8KLURlZmF1bHQ6ICAgICAgQXV0bwotCi1UaGlzIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNldCB0aGUgc3BlZWQgY2FwYWJpbGl0aWVzLiBJdCBpcyBvbmx5IHZhbGlkIAotZm9yIHRoZSBTSy05OHh4IFYyLjAgY29wcGVyIGFkYXB0ZXJzLgotVXN1YWxseSwgdGhlIHNwZWVkIGlzIG5lZ290aWF0ZWQgYmV0d2VlbiB0aGUgdHdvIHBvcnRzIGR1cmluZyBsaW5rIAotZXN0YWJsaXNobWVudC4gSWYgdGhpcyBmYWlscywgYSBwb3J0IGNhbiBiZSBmb3JjZWQgdG8gYSBzcGVjaWZpYyBzZXR0aW5nCi13aXRoIHRoaXMgcGFyYW1ldGVyLgotCi1BdXRvLU5lZ290aWF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tCi1QYXJhbWV0ZXI6ICAgIEF1dG9OZWdfPwotVmFsdWVzOiAgICAgICBPbiwgT2ZmLCBTZW5zZQotRGVmYXVsdDogICAgICBPbgotICAKLVRoZSAiU2Vuc2UiLW1vZGUgYXV0b21hdGljYWxseSBkZXRlY3RzIHdoZXRoZXIgdGhlIGxpbmsgcGFydG5lciBzdXBwb3J0cwotYXV0by1uZWdvdGlhdGlvbiBvciBub3QuCi0KLUR1cGxleCBDYXBhYmlsaXRpZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcmFtZXRlcjogICAgRHVwQ2FwXz8KLVZhbHVlczogICAgICAgSGFsZiwgRnVsbCwgQm90aAotRGVmYXVsdDogICAgICBCb3RoCi0KLVRoaXMgcGFyYW1ldGVycyBpcyBvbmx5IHJlbGV2YW50IGlmIGF1dG8tbmVnb3RpYXRpb24gZm9yIHRoaXMgcG9ydCBpcyAKLW5vdCBzZXQgdG8gIlNlbnNlIi4gSWYgYXV0by1uZWdvdGlhdGlvbiBpcyBzZXQgdG8gIk9uIiwgYWxsIHRocmVlIHZhbHVlcwotYXJlIHBvc3NpYmxlLiBJZiBpdCBpcyBzZXQgdG8gIk9mZiIsIG9ubHkgIkZ1bGwiIGFuZCAiSGFsZiIgYXJlIGFsbG93ZWQuCi1UaGlzIHBhcmFtZXRlciBpcyB1c2VmdWwgaWYgeW91ciBsaW5rIHBhcnRuZXIgZG9lcyBub3Qgc3VwcG9ydCBhbGwKLXBvc3NpYmxlIGNvbWJpbmF0aW9ucy4KLQotRmxvdyBDb250cm9sCi0tLS0tLS0tLS0tLS0KLVBhcmFtZXRlcjogICAgRmxvd0N0cmxfPwotVmFsdWVzOiAgICAgICBTeW0sIFN5bU9yUmVtLCBMb2NTZW5kLCBOb25lCi1EZWZhdWx0OiAgICAgIFN5bU9yUmVtCi0KLVRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZmxvdyBjb250cm9sIGNhcGFiaWxpdGllcyB0aGUgCi1wb3J0IHJlcG9ydHMgZHVyaW5nIGF1dG8tbmVnb3RpYXRpb24uIEl0IGNhbiBiZSBzZXQgZm9yIGVhY2ggcG9ydCAKLWluZGl2aWR1YWxseS4KLVBvc3NpYmxlIG1vZGVzOgotICAgLS0gU3ltICAgICAgPSBTeW1tZXRyaWM6IGJvdGggbGluayBwYXJ0bmVycyBhcmUgYWxsb3dlZCB0byBzZW5kIAotICAgICAgICAgICAgICAgICAgUEFVU0UgZnJhbWVzCi0gICAtLSBTeW1PclJlbSA9IFN5bW1ldHJpY09yUmVtb3RlOiBib3RoIG9yIG9ubHkgcmVtb3RlIHBhcnRuZXIgCi0gICAgICAgICAgICAgICAgICBhcmUgYWxsb3dlZCB0byBzZW5kIFBBVVNFIGZyYW1lcwotICAgLS0gTG9jU2VuZCAgPSBMb2NhbFNlbmQ6IG9ubHkgbG9jYWwgbGluayBwYXJ0bmVyIGlzIGFsbG93ZWQgCi0gICAgICAgICAgICAgICAgICB0byBzZW5kIFBBVVNFIGZyYW1lcwotICAgLS0gTm9uZSAgICAgPSBubyBsaW5rIHBhcnRuZXIgaXMgYWxsb3dlZCB0byBzZW5kIFBBVVNFIGZyYW1lcwotICAKLU5PVEU6IFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgYXV0by1uZWdvdGlhdGlvbiBpcyBzZXQgdG8gIk9mZiIuCi0KLVJvbGUgaW4gTWFzdGVyLVNsYXZlLU5lZ290aWF0aW9uICgxMDAwQmFzZS1UIG9ubHkpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUGFyYW1ldGVyOiAgICBSb2xlXz8KLVZhbHVlczogICAgICAgQXV0bywgTWFzdGVyLCBTbGF2ZQotRGVmYXVsdDogICAgICBBdXRvCi0KLVRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBTSy05ODIxIGFuZCBTSy05ODIyIGFkYXB0ZXJzLgotRm9yIHR3byAxMDAwQmFzZS1UIHBvcnRzIHRvIGNvbW11bmljYXRlLCBvbmUgbXVzdCB0YWtlIHRoZSByb2xlIG9mIHRoZQotbWFzdGVyIChwcm92aWRpbmcgdGltaW5nIGluZm9ybWF0aW9uKSwgd2hpbGUgdGhlIG90aGVyIG11c3QgYmUgdGhlIAotc2xhdmUuIFVzdWFsbHksIHRoaXMgaXMgbmVnb3RpYXRlZCBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgZHVyaW5nIGxpbmsgCi1lc3RhYmxpc2htZW50LiBJZiB0aGlzIGZhaWxzLCBhIHBvcnQgY2FuIGJlIGZvcmNlZCB0byBhIHNwZWNpZmljIHNldHRpbmcKLXdpdGggdGhpcyBwYXJhbWV0ZXIuCi0KLQotNC4yICBBZGFwdGVyIFBhcmFtZXRlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvbm5lY3Rpb24gVHlwZSAoU0stOTh4eCBWMi4wIGNvcHBlciBhZGFwdGVycyBvbmx5KQotLS0tLS0tLS0tLS0tLS0tCi1QYXJhbWV0ZXI6ICAgIENvblR5cGUKLVZhbHVlczogICAgICAgQXV0bywgMTAwRkQsIDEwMEhELCAxMEZELCAxMEhECi1EZWZhdWx0OiAgICAgIEF1dG8KLQotVGhlIHBhcmFtZXRlciAnQ29uVHlwZScgaXMgYSBjb21iaW5hdGlvbiBvZiBhbGwgZml2ZSBwZXItcG9ydCBwYXJhbWV0ZXJzCi13aXRoaW4gb25lIHNpbmdsZSBwYXJhbWV0ZXIuIFRoaXMgc2ltcGxpZmllcyB0aGUgY29uZmlndXJhdGlvbiBvZiBib3RoIHBvcnRzCi1vZiBhbiBhZGFwdGVyIGNhcmQhIFRoZSBkaWZmZXJlbnQgdmFsdWVzIG9mIHRoaXMgdmFyaWFibGUgcmVmbGVjdCB0aGUgbW9zdCAKLW1lYW5pbmdmdWwgY29tYmluYXRpb25zIG9mIHBvcnQgcGFyYW1ldGVycy4KLQotVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgdmFsdWVzIG9mICdDb25UeXBlJyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKLWNvbWJpbmF0aW9ucyBvZiB0aGUgcGVyLXBvcnQgcGFyYW1ldGVyczoKLQotICAgIENvblR5cGUgICB8ICBEdXBDYXAgICBBdXRvTmVnICAgRmxvd0N0cmwgICBSb2xlICAgICAgICAgICAgIFNwZWVkCi0gICAgLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBBdXRvICAgICAgfCAgQm90aCAgICAgT24gICAgICAgIFN5bU9yUmVtICAgQXV0byAgICAgICAgICAgICBBdXRvCi0gICAgMTAwRkQgICAgIHwgIEZ1bGwgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAwCi0gICAgMTAwSEQgICAgIHwgIEhhbGYgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAwCi0gICAgMTBGRCAgICAgIHwgIEZ1bGwgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAKLSAgICAxMEhEICAgICAgfCAgSGFsZiAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMAotCi1TdGF0aW5nIGFueSBvdGhlciBwb3J0IHBhcmFtZXRlciB0b2dldGhlciB3aXRoIHRoaXMgJ0NvblR5cGUnIHZhcmlhYmxlCi13aWxsIHJlc3VsdCBpbiBhIG1lcmdlZCBjb25maWd1cmF0aW9uIG9mIHRob3NlIHNldHRpbmdzLiBUaGlzIGR1ZSB0byAKLXRoZSBmYWN0LCB0aGF0IHRoZSBwZXItcG9ydCBwYXJhbWV0ZXJzIChlLmcuIFNwZWVkXz8gKSBoYXZlIGEgaGlnaGVyCi1wcmlvcml0eSB0aGFuIHRoZSBjb21iaW5lZCB2YXJpYWJsZSAnQ29uVHlwZScuCi0KLU5PVEU6IFRoaXMgcGFyYW1ldGVyIGlzIGFsd2F5cyB1c2VkIG9uIGJvdGggcG9ydHMgb2YgdGhlIGFkYXB0ZXIgY2FyZC4KLQotSW50ZXJydXB0IE1vZGVyYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYXJhbWV0ZXI6ICAgIE1vZGVyYXRpb24KLVZhbHVlczogICAgICAgTm9uZSwgU3RhdGljLCBEeW5hbWljCi1EZWZhdWx0OiAgICAgIE5vbmUKLQotSW50ZXJydXB0IG1vZGVyYXRpb24gaXMgZW1wbG95ZWQgdG8gbGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdHMKLXRoZSBkcml2ZXIgaGFzIHRvIHNlcnZlLiBUaGF0IGlzLCBvbmUgb3IgbW9yZSBpbnRlcnJ1cHRzICh3aGljaCBpbmRpY2F0ZSBhbnkKLXRyYW5zbWl0IG9yIHJlY2VpdmUgcGFja2V0IHRvIGJlIHByb2Nlc3NlZCkgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZHJpdmVyIAotcHJvY2Vzc2VzIHRoZW0uIFdoZW4gcXVldWVkIGludGVycnVwdHMgYXJlIHRvIGJlIHNlcnZlZCwgaXMgZGV0ZXJtaW5lZCBieSB0aGUKLSdJbnRzUGVyU2VjJyBwYXJhbWV0ZXIsIHdoaWNoIGlzIGV4cGxhaW5lZCBsYXRlciBiZWxvdy4KLQotUG9zc2libGUgbW9kZXM6Ci0KLSAgIC0tIE5vbmUgLSBObyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBhcHBsaWVkIG9uIHRoZSBhZGFwdGVyIGNhcmQuIAotICAgICAgVGhlcmVmb3JlLCBlYWNoIHRyYW5zbWl0IG9yIHJlY2VpdmUgaW50ZXJydXB0IGlzIHNlcnZlZCBpbW1lZGlhdGVseQotICAgICAgYXMgc29vbiBhcyBpdCBhcHBlYXJzIG9uIHRoZSBpbnRlcnJ1cHQgbGluZSBvZiB0aGUgYWRhcHRlciBjYXJkLgotCi0gICAtLSBTdGF0aWMgLSBJbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBhcHBsaWVkIG9uIHRoZSBhZGFwdGVyIGNhcmQuIAotICAgICAgQWxsIHRyYW5zbWl0IGFuZCByZWNlaXZlIGludGVycnVwdHMgYXJlIHF1ZXVlZCB1bnRpbCBhIGNvbXBsZXRlCi0gICAgICBtb2RlcmF0aW9uIGludGVydmFsIGVuZHMuIElmIHN1Y2ggYSBtb2RlcmF0aW9uIGludGVydmFsIGVuZHMsIGFsbAotICAgICAgcXVldWVkIGludGVycnVwdHMgYXJlIHByb2Nlc3NlZCBpbiBvbmUgYmlnIGJ1bmNoIHdpdGhvdXQgYW55IGRlbGF5LgotICAgICAgVGhlIHRlcm0gJ3N0YXRpYycgcmVmbGVjdHMgdGhlIGZhY3QsIHRoYXQgaW50ZXJydXB0IG1vZGVyYXRpb24gaXMKLSAgICAgIGFsd2F5cyBlbmFibGVkLCByZWdhcmRsZXNzIGhvdyBtdWNoIG5ldHdvcmsgbG9hZCBpcyBjdXJyZW50bHkgCi0gICAgICBwYXNzaW5nIHZpYSBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiBJbiBhZGRpdGlvbiwgdGhlIGR1cmF0aW9uIG9mCi0gICAgICB0aGUgbW9kZXJhdGlvbiBpbnRlcnZhbCBoYXMgYSBmaXhlZCBsZW5ndGggdGhhdCBuZXZlciBjaGFuZ2VzIHdoaWxlCi0gICAgICB0aGUgZHJpdmVyIGlzIG9wZXJhdGlvbmFsLgotCi0gICAtLSBEeW5hbWljIC0gSW50ZXJydXB0IG1vZGVyYXRpb24gbWlnaHQgYmUgYXBwbGllZCBvbiB0aGUgYWRhcHRlciBjYXJkLAotICAgICAgZGVwZW5kaW5nIG9uIHRoZSBsb2FkIG9mIHRoZSBzeXN0ZW0uIElmIHRoZSBkcml2ZXIgZGV0ZWN0cyB0aGF0IHRoZQotICAgICAgc3lzdGVtIGxvYWQgaXMgdG9vIGhpZ2gsIHRoZSBkcml2ZXIgdHJpZXMgdG8gc2hpZWxkIHRoZSBzeXN0ZW0gYWdhaW5zdCAKLSAgICAgIHRvbyBtdWNoIG5ldHdvcmsgbG9hZCBieSBlbmFibGluZyBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4gSWYgLSBhdCBhIGxhdGVyCi0gICAgICB0aW1lIC0gdGhlIENQVSB1dGlsaXphdGlvbiBkZWNyZWFzZXMgYWdhaW4gKG9yIGlmIHRoZSBuZXR3b3JrIGxvYWQgaXMgCi0gICAgICBuZWdsaWdpYmxlKSB0aGUgaW50ZXJydXB0IG1vZGVyYXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRpc2FibGVkLgotCi1JbnRlcnJ1cHQgbW9kZXJhdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBkcml2ZXIgaGFzIHRvIGhhbmRsZSBvbmUgb3IgbW9yZQotaW50ZXJmYWNlcyB3aXRoIGEgaGlnaCBuZXR3b3JrIGxvYWQsIHdoaWNoIC0gYXMgYSBjb25zZXF1ZW5jZSAtIGxlYWRzIGFsc28gdG8gYQotaGlnaCBDUFUgdXRpbGl6YXRpb24uIFdoZW4gbW9kZXJhdGlvbiBpcyBhcHBsaWVkIGluIHN1Y2ggaGlnaCBuZXR3b3JrIGxvYWQgCi1zaXR1YXRpb25zLCBDUFUgbG9hZCBtaWdodCBiZSByZWR1Y2VkIGJ5IDIwLTMwJS4KLQotTk9URTogVGhlIGRyYXdiYWNrIG9mIHVzaW5nIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIGFuIGluY3JlYXNlIG9mIHRoZSByb3VuZC0KLXRyaXAtdGltZSAoUlRUKSwgZHVlIHRvIHRoZSBxdWV1ZWluZyBhbmQgc2VydmluZyBvZiBpbnRlcnJ1cHRzIGF0IGRlZGljYXRlZAotbW9kZXJhdGlvbiB0aW1lcy4KLQotSW50ZXJydXB0cyBwZXIgc2Vjb25kCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcmFtZXRlcjogICAgSW50c1BlclNlYwotVmFsdWVzOiAgICAgICAzMC4uLjQwMDAwIChpbnRlcnJ1cHRzIHBlciBzZWNvbmQpCi1EZWZhdWx0OiAgICAgIDIwMDAKLQotVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIGlmIGVpdGhlciBzdGF0aWMgb3IgZHluYW1pYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbgotaXMgdXNlZCBvbiBhIG5ldHdvcmsgYWRhcHRlciBjYXJkLiBVc2luZyB0aGlzIHBhcmFtZXRlciBpZiBubyBtb2RlcmF0aW9uIGlzCi1hcHBsaWVkIHdpbGwgbGVhZCB0byBubyBhY3Rpb24gcGVyZm9ybWVkLgotCi1UaGlzIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgYW55IGludGVycnVwdCBtb2RlcmF0aW9uIGludGVydmFsLiAKLUFzc3VtaW5nIHRoYXQgc3RhdGljIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIHRvIGJlIHVzZWQsIGFuICdJbnRzUGVyU2VjJyAKLXBhcmFtZXRlciB2YWx1ZSBvZiAyMDAwIHdpbGwgbGVhZCB0byBhbiBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpbnRlcnZhbCBvZgotNTAwIG1pY3Jvc2Vjb25kcy4gCi0KLU5PVEU6IFRoZSBkdXJhdGlvbiBvZiB0aGUgbW9kZXJhdGlvbiBpbnRlcnZhbCBpcyB0byBiZSBjaG9zZW4gd2l0aCBjYXJlLgotQXQgZmlyc3QgZ2xhbmNlLCBzZWxlY3RpbmcgYSB2ZXJ5IGxvbmcgZHVyYXRpb24gKGUuZy4gb25seSAxMDAgaW50ZXJydXB0cyBwZXIgCi1zZWNvbmQpIHNlZW1zIHRvIGJlIG1lYW5pbmdmdWwsIGJ1dCB0aGUgaW5jcmVhc2Ugb2YgcGFja2V0LXByb2Nlc3NpbmcgZGVsYXkgCi1pcyB0cmVtZW5kb3VzLiBPbiB0aGUgb3RoZXIgaGFuZCwgc2VsZWN0aW5nIGEgdmVyeSBzaG9ydCBtb2RlcmF0aW9uIHRpbWUgbWlnaHQKLWNvbXBlbnNhdGUgdGhlIHVzZSBvZiBhbnkgbW9kZXJhdGlvbiBiZWluZyBhcHBsaWVkLgotCi0KLVByZWZlcnJlZCBQb3J0Ci0tLS0tLS0tLS0tLS0tLQotUGFyYW1ldGVyOiAgICBQcmVmUG9ydAotVmFsdWVzOiAgICAgICBBLCBCCi1EZWZhdWx0OiAgICAgIEEKLQotVGhpcyBpcyB1c2VkIHRvIGZvcmNlIHRoZSBwcmVmZXJyZWQgcG9ydCB0byBBIG9yIEIgKG9uIGR1YWwtcG9ydCBuZXR3b3JrIAotYWRhcHRlcnMpLiBUaGUgcHJlZmVycmVkIHBvcnQgaXMgdGhlIG9uZSB0aGF0IGlzIHVzZWQgaWYgYm90aCBhcmUgZGV0ZWN0ZWQKLWFzIGZ1bGx5IGZ1bmN0aW9uYWwuCi0KLVJMTVQgTW9kZSAoUmVkdW5kYW50IExpbmsgTWFuYWdlbWVudCBUZWNobm9sb2d5KQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYXJhbWV0ZXI6ICAgIFJsbXRNb2RlCi1WYWx1ZXM6ICAgICAgIENoZWNrTGlua1N0YXRlLENoZWNrTG9jYWxQb3J0LCBDaGVja1NlZywgRHVhbE5ldAotRGVmYXVsdDogICAgICBDaGVja0xpbmtTdGF0ZQotCi1STE1UIG1vbml0b3JzIHRoZSBzdGF0dXMgb2YgdGhlIHBvcnQuIElmIHRoZSBsaW5rIG9mIHRoZSBhY3RpdmUgcG9ydCAKLWZhaWxzLCBSTE1UIHN3aXRjaGVzIGltbWVkaWF0ZWx5IHRvIHRoZSBzdGFuZGJ5IGxpbmsuIFRoZSB2aXJ0dWFsIGxpbmsgaXMgCi1tYWludGFpbmVkIGFzIGxvbmcgYXMgYXQgbGVhc3Qgb25lICdwaHlzaWNhbCcgbGluayBpcyB1cC4gCi0KLVBvc3NpYmxlIG1vZGVzOgotCi0gICAtLSBDaGVja0xpbmtTdGF0ZSAtIENoZWNrIGxpbmsgc3RhdGUgb25seTogUkxNVCB1c2VzIHRoZSBsaW5rIHN0YXRlCi0gICAgICByZXBvcnRlZCBieSB0aGUgYWRhcHRlciBoYXJkd2FyZSBmb3IgZWFjaCBpbmRpdmlkdWFsIHBvcnQgdG8gCi0gICAgICBkZXRlcm1pbmUgd2hldGhlciBhIHBvcnQgY2FuIGJlIHVzZWQgZm9yIGFsbCBuZXR3b3JrIHRyYWZmaWMgb3IgCi0gICAgICBub3QuCi0KLSAgIC0tIENoZWNrTG9jYWxQb3J0IC0gSW4gdGhpcyBtb2RlLCBSTE1UIG1vbml0b3JzIHRoZSBuZXR3b3JrIHBhdGggCi0gICAgICBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgb2YgYW4gYWRhcHRlciBieSByZWd1bGFybHkgZXhjaGFuZ2luZyBwYWNrZXRzCi0gICAgICBiZXR3ZWVuIHRoZW0uIFRoaXMgbW9kZSByZXF1aXJlcyBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpbiB3aGljaCAKLSAgICAgIHRoZSB0d28gcG9ydHMgYXJlIGFibGUgdG8gInNlZSIgZWFjaCBvdGhlciAoaS5lLiB0aGVyZSBtdXN0IG5vdCBiZSAKLSAgICAgIGFueSByb3V0ZXIgYmV0d2VlbiB0aGUgcG9ydHMpLgotCi0gICAtLSBDaGVja1NlZyAtIENoZWNrIGxvY2FsIHBvcnQgYW5kIHNlZ21lbnRhdGlvbjogVGhpcyBtb2RlIHN1cHBvcnRzIHRoZQotICAgICAgc2FtZSBmdW5jdGlvbnMgYXMgdGhlIENoZWNrTG9jYWxQb3J0IG1vZGUgYW5kIGFkZGl0aW9uYWxseSBjaGVja3MgCi0gICAgICBuZXR3b3JrIHNlZ21lbnRhdGlvbiBiZXR3ZWVuIHRoZSBwb3J0cy4gVGhlcmVmb3JlLCB0aGlzIG1vZGUgaXMgb25seQotICAgICAgdG8gYmUgdXNlZCBpZiBHaWdhYml0IEV0aGVybmV0IHN3aXRjaGVzIGFyZSBpbnN0YWxsZWQgb24gdGhlIG5ldHdvcmsKLSAgICAgIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBTcGFubmluZyBUcmVlIHByb3RvY29sLiAKLQotICAgLS0gRHVhbE5ldCAtIEluIHRoaXMgbW9kZSwgcG9ydHMgQSBhbmQgQiBhcmUgdXNlZCBhcyBzZXBhcmF0ZSBkZXZpY2VzLiAKLSAgICAgIElmIHlvdSBoYXZlIGEgZHVhbCBwb3J0IGFkYXB0ZXIsIHBvcnQgQSB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgZXRoMCAKLSAgICAgIGFuZCBwb3J0IEIgYXMgZXRoMS4gQm90aCBwb3J0cyBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IHdpdGggCi0gICAgICBkaXN0aW5jdCBJUCBhZGRyZXNzZXMuIFRoZSBwcmVmZXJyZWQgcG9ydCBzZXR0aW5nIGlzIG5vdCB1c2VkLiAKLSAgICAgIFJMTVQgaXMgdHVybmVkIG9mZi4KLSAgIAotTk9URTogUkxNVCBtb2RlcyBDTFAgYW5kIENMUFNTIGFyZSBkZXNpZ25lZCB0byBvcGVyYXRlIGluIGNvbmZpZ3VyYXRpb25zIAotICAgICAgd2hlcmUgYSBuZXR3b3JrIHBhdGggYmV0d2VlbiB0aGUgcG9ydHMgb24gb25lIGFkYXB0ZXIgZXhpc3RzLiAKLSAgICAgIE1vcmVvdmVyLCB0aGV5IGFyZSBub3QgZGVzaWduZWQgdG8gd29yayB3aGVyZSBhZGFwdGVycyBhcmUgY29ubmVjdGVkCi0gICAgICBiYWNrLXRvLWJhY2suCi0qKioKLQotCi01ICBMYXJnZSBGcmFtZSBTdXBwb3J0Ci09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSBkcml2ZXIgc3VwcG9ydHMgbGFyZ2UgZnJhbWVzIChhbHNvIGNhbGxlZCBqdW1ibyBmcmFtZXMpLiBVc2luZyBsYXJnZSAKLWZyYW1lcyBjYW4gcmVzdWx0IGluIGFuIGltcHJvdmVkIHRocm91Z2hwdXQgaWYgdHJhbnNmZXJyaW5nIGxhcmdlIGFtb3VudHMgCi1vZiBkYXRhLgotVG8gZW5hYmxlIGxhcmdlIGZyYW1lcywgc2V0IHRoZSBNVFUgKG1heGltdW0gdHJhbnNmZXIgdW5pdCkgb2YgdGhlIAotaW50ZXJmYWNlIHRvIHRoZSBkZXNpcmVkIHZhbHVlICh1cCB0byA5MDAwKSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIAotY29tbWFuZDoKLSAgICAgIGlmY29uZmlnIGV0aDAgbXR1IDkwMDAKLVRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91IGhhdmUgdHdvIGFkYXB0ZXJzIGNvbm5lY3RlZCBiYWNrLXRvLWJhY2sKLW9yIGlmIHlvdSB1c2UgYSBzd2l0Y2ggdGhhdCBzdXBwb3J0cyBsYXJnZSBmcmFtZXMuIFdoZW4gdXNpbmcgYSBzd2l0Y2gsIAotaXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgbGFyZ2UgZnJhbWVzIGFuZCBhdXRvLW5lZ290aWF0aW9uIHNob3VsZCAgCi1iZSBzZXQgdG8gT0ZGLiBUaGUgc2V0dGluZyBtdXN0IGJlIGNvbmZpZ3VyZWQgb24gYWxsIGFkYXB0ZXJzIHRoYXQgY2FuIGJlIAotcmVhY2hlZCBieSB0aGUgbGFyZ2UgZnJhbWVzLiBJZiBvbmUgYWRhcHRlciBpcyBub3Qgc2V0IHRvIHJlY2VpdmUgbGFyZ2UgCi1mcmFtZXMsIGl0IHdpbGwgc2ltcGx5IGRyb3AgdGhlbS4KLQotWW91IGNhbiBzd2l0Y2ggYmFjayB0byB0aGUgc3RhbmRhcmQgZXRoZXJuZXQgZnJhbWUgc2l6ZSBieSBleGVjdXRpbmcgdGhlIAotZm9sbG93aW5nIGNvbW1hbmQ6Ci0gICAgICBpZmNvbmZpZyBldGgwIG10dSAxNTAwCi0KLVRvIHBlcm1hbmVudGx5IGNvbmZpZ3VyZSB0aGlzIHNldHRpbmcsIGFkZCBhIHNjcmlwdCB3aXRoIHRoZSAnaWZjb25maWcnIAotbGluZSB0byB0aGUgc3lzdGVtIHN0YXJ0dXAgc2VxdWVuY2UgKG5hbWVkIHNvbWV0aGluZyBsaWtlICJTOTlzazk4bGluIiAKLWluIC9ldGMvcmMuZC9yYzIuZCkuCi0qKioKLQotCi02ICBWTEFOIGFuZCBMaW5rIEFnZ3JlZ2F0aW9uIFN1cHBvcnQgKElFRUUgODAyLjEsIDgwMi4xcSwgODAyLjNhZCkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgTWFydmVsbCBZdWtvbi9TeXNLb25uZWN0IExpbnV4IGRyaXZlcnMgYXJlIGFibGUgdG8gc3VwcG9ydCBWTEFOIGFuZCAKLUxpbmsgQWdncmVnYXRpb24gYWNjb3JkaW5nIHRvIElFRUUgc3RhbmRhcmRzIDgwMi4xLCA4MDIuMXEsIGFuZCA4MDIuM2FkLiAKLVRoZXNlIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSBhZnRlciBpbnN0YWxsYXRpb24gb2Ygb3BlbiBzb3VyY2UgCi1tb2R1bGVzIGF2YWlsYWJsZSBvbiB0aGUgSW50ZXJuZXQ6Ci1Gb3IgVkxBTiBnbyB0bzogaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWwKLUZvciBMaW5rIEFnZ3JlZ2F0aW9uIGdvIHRvOiBodHRwOi8vd3d3LnN0LnJpbS5vci5qcC9+eXVtbwotCi1OT1RFOiBTeXNLb25uZWN0IEdtYkggZG9lcyBub3Qgb2ZmZXIgYW55IHN1cHBvcnQgZm9yIHRoZXNlIG9wZW4gc291cmNlIAotICAgICAgbW9kdWxlcyBhbmQgZG9lcyBub3QgdGFrZSB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBraW5kIG9mIAotICAgICAgZmFpbHVyZXMgb3IgcHJvYmxlbXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHdpdGggdGhlc2UgbW9kdWxlcy4KLQotTk9URTogQ29uZmlndXJpbmcgTGluayBBZ2dyZWdhdGlvbiBvbiBhIFN5c0tvbm5lY3QgZHVhbCBsaW5rIGFkYXB0ZXIgbWF5IAotICAgICAgY2F1c2UgcHJvYmxlbXMgd2hlbiB1bmxvYWRpbmcgdGhlIGRyaXZlci4KLQotCi03ICBUcm91Ymxlc2hvb3RpbmcKLT09PT09PT09PT09PT09PT09PQotCi1JZiBhbnkgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcywgY2hlY2sgdGhlIAotZm9sbG93aW5nIGxpc3Q6Ci0KLQotUHJvYmxlbTogIFRoZSBTSy05OHh4IGFkYXB0ZXIgY2Fubm90IGJlIGZvdW5kIGJ5IHRoZSBkcml2ZXIuCi1Tb2x1dGlvbjogSW4gL3Byb2MvcGNpIHNlYXJjaCBmb3IgdGhlIGZvbGxvd2luZyBlbnRyeToKLSAgICAgICAgICAgICAnRXRoZXJuZXQgY29udHJvbGxlcjogU3lzS29ubmVjdCBTSy05OHh4IC4uLicKLSAgICAgICAgICBJZiB0aGlzIGVudHJ5IGV4aXN0cywgdGhlIFNLLTk4eHggb3IgU0stOTh4eCBWMi4wIGFkYXB0ZXIgaGFzIAotICAgICAgICAgIGJlZW4gZm91bmQgYnkgdGhlIHN5c3RlbSBhbmQgc2hvdWxkIGJlIG9wZXJhdGlvbmFsLgotICAgICAgICAgIElmIHRoaXMgZW50cnkgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIGZpbGUgJy9wcm9jL3BjaScgaXMgbm90IAotICAgICAgICAgIGZvdW5kLCB0aGVyZSBtYXkgYmUgYSBoYXJkd2FyZSBwcm9ibGVtIG9yIHRoZSBQQ0kgc3VwcG9ydCBtYXkgCi0gICAgICAgICAgbm90IGJlIGVuYWJsZWQgaW4geW91ciBrZXJuZWwuCi0gICAgICAgICAgVGhlIGFkYXB0ZXIgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGhlIGRpYWdub3N0aWNzIHByb2dyYW0gd2hpY2ggCi0gICAgICAgICAgaXMgYXZhaWxhYmxlIG9uIHRoZSBTeXNLb25uZWN0IHdlYiBzaXRlOgotICAgICAgICAgIHd3dy5zeXNrb25uZWN0LmNvbQotICAgICAgICAgIAotICAgICAgICAgIFNvbWUgQ09NUEFRIG1hY2hpbmVzIGhhdmUgcHJvYmxlbXMgZGVhbGluZyB3aXRoIFBDSSB1bmRlciBMaW51eC4KLSAgICAgICAgICBUaGlzIHByb2JsZW0gaXMgZGVzY3JpYmVkIGluIHRoZSAnUENJIGhvd3RvJyBkb2N1bWVudAotICAgICAgICAgIChpbmNsdWRlZCBpbiBzb21lIGRpc3RyaWJ1dGlvbnMgb3IgYXZhaWxhYmxlIGZyb20gdGhlCi0gICAgICAgICAgd2ViLCBlLmcuIGF0ICd3d3cubGludXgub3JnJykuIAotCi0KLVByb2JsZW06ICBQcm9ncmFtcyBzdWNoIGFzICdpZmNvbmZpZycgb3IgJ3JvdXRlJyBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIAotICAgICAgICAgIGVycm9yIG1lc3NhZ2UgJ09wZXJhdGlvbiBub3QgcGVybWl0dGVkJyBpcyBkaXNwbGF5ZWQuCi1SZWFzb246ICAgWW91IGFyZSBub3QgbG9nZ2VkIGluIGFzIHVzZXIgJ3Jvb3QnLgotU29sdXRpb246IExvZ291dCBhbmQgbG9naW4gYXMgJ3Jvb3QnIG9yIGNoYW5nZSB0byAncm9vdCcgdmlhICdzdScuCi0KLQotUHJvYmxlbTogIFVwb24gdXNlIG9mIHRoZSBjb21tYW5kICdwaW5nIDxhZGRyZXNzPicgdGhlIG1lc3NhZ2UKLSAgICAgICAgICAicGluZzogc2VuZHRvOiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlIiBpcyBkaXNwbGF5ZWQuCi1SZWFzb246ICAgWW91ciByb3V0ZSBpcyBub3Qgc2V0IGNvcnJlY3RseS4KLVNvbHV0aW9uOiBJZiB5b3UgYXJlIHVzaW5nIFJlZEhhdCwgeW91IHByb2JhYmx5IGZvcmdvdCB0byBzZXQgdXAgdGhlIAotICAgICAgICAgIHJvdXRlIGluIHRoZSAnbmV0d29yayBjb25maWd1cmF0aW9uJy4KLSAgICAgICAgICBDaGVjayB0aGUgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlICdyb3V0ZScgY29tbWFuZCBhbmQgY2hlY2sgCi0gICAgICAgICAgaWYgYW4gZW50cnkgZm9yICdldGgwJyBleGlzdHMsIGFuZCBpZiBzbywgaWYgaXQgaXMgc2V0IGNvcnJlY3RseS4KLQotCi1Qcm9ibGVtOiAgVGhlIGRyaXZlciBjYW4gYmUgc3RhcnRlZCwgdGhlIGFkYXB0ZXIgaXMgY29ubmVjdGVkIHRvIHRoZSAKLSAgICAgICAgICBuZXR3b3JrLCBidXQgeW91IGNhbm5vdCByZWNlaXZlIG9yIHRyYW5zbWl0IGFueSBwYWNrZXRzOyAKLSAgICAgICAgICBlLmcuICdwaW5nJyBkb2VzIG5vdCB3b3JrLgotUmVhc29uOiAgIFRoZXJlIGlzIGFuIGluY29ycmVjdCByb3V0ZSBpbiB5b3VyIHJvdXRpbmcgdGFibGUuCi1Tb2x1dGlvbjogQ2hlY2sgdGhlIHJvdXRpbmcgdGFibGUgd2l0aCB0aGUgY29tbWFuZCAncm91dGUnIGFuZCByZWFkIHRoZSAKLSAgICAgICAgICBtYW51YWwgaGVscCBwYWdlcyBkZWFsaW5nIHdpdGggcm91dGVzIChlbnRlciAnbWFuIHJvdXRlJykuCi0KLU5PVEU6IEFsdGhvdWdoIHRoZSAyLjIueCBrZXJuZWwgdmVyc2lvbnMgZ2VuZXJhdGUgdGhlIHJvdXRpbmcgZW50cnkgCi0gICAgICBhdXRvbWF0aWNhbGx5LCBwcm9ibGVtcyBvZiB0aGlzIGtpbmQgbWF5IG9jY3VyIGhlcmUgYXMgd2VsbC4gV2UndmUgCi0gICAgICBjb21lIGFjcm9zcyBhIHNpdHVhdGlvbiBpbiB3aGljaCB0aGUgZHJpdmVyIHN0YXJ0ZWQgY29ycmVjdGx5IGF0IAotICAgICAgc3lzdGVtIHN0YXJ0LCBidXQgYWZ0ZXIgdGhlIGRyaXZlciBoYXMgYmVlbiByZW1vdmVkIGFuZCByZWxvYWRlZCwKLSAgICAgIHRoZSByb3V0ZSBvZiB0aGUgYWRhcHRlcidzIG5ldHdvcmsgcG9pbnRlZCB0byB0aGUgJ2R1bW15MCdkZXZpY2UgCi0gICAgICBhbmQgaGFkIHRvIGJlIGNvcnJlY3RlZCBtYW51YWxseS4KLQotCi1Qcm9ibGVtOiAgWW91ciBjb21wdXRlciBzaG91bGQgYWN0IGFzIGEgcm91dGVyIGJldHdlZW4gbXVsdGlwbGUgCi0gICAgICAgICAgSVAgc3VibmV0d29ya3MgKHVzaW5nIG11bHRpcGxlIGFkYXB0ZXJzKSwgYnV0IGNvbXB1dGVycyBpbiAKLSAgICAgICAgICBvdGhlciBzdWJuZXR3b3JrcyBjYW5ub3QgYmUgcmVhY2hlZC4KLVJlYXNvbjogICBFaXRoZXIgdGhlIHJvdXRlcidzIGtlcm5lbCBpcyBub3QgY29uZmlndXJlZCBmb3IgSVAgZm9yd2FyZGluZyAKLSAgICAgICAgICBvciB0aGUgcm91dGluZyB0YWJsZSBhbmQgZ2F0ZXdheSBjb25maWd1cmF0aW9uIG9mIGF0IGxlYXN0IG9uZSAKLSAgICAgICAgICBjb21wdXRlciBpcyBub3Qgd29ya2luZy4KLQotUHJvYmxlbTogIFVwb24gZHJpdmVyIHN0YXJ0LCB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2UgaXMgZGlzcGxheWVkOgotICAgICAgICAgICJldGgwOiAtLSBFUlJPUiAtLQotICAgICAgICAgIENsYXNzOiBpbnRlcm5hbCBTb2Z0d2FyZSBlcnJvcgotICAgICAgICAgIE5yOiAgICAweGNjCi0gICAgICAgICAgTXNnOiAgIFNrR2VJbml0UG9ydCgpIGNhbm5vdCBpbml0IHJ1bm5pbmcgcG9ydHMiCi1SZWFzb246ICAgWW91IGFyZSB1c2luZyBhIGRyaXZlciBjb21waWxlZCBmb3Igc2luZ2xlIHByb2Nlc3NvciBtYWNoaW5lcyAKLSAgICAgICAgICBvbiBhIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUgd2l0aCBTTVAgKFN5bW1ldHJpYyBNdWx0aVByb2Nlc3NvcikgCi0gICAgICAgICAga2VybmVsLgotU29sdXRpb246IENvbmZpZ3VyZSB5b3VyIGtlcm5lbCBhcHByb3ByaWF0ZWx5IGFuZCByZWNvbXBpbGUgdGhlIGtlcm5lbCBvcgotICAgICAgICAgIHRoZSBtb2R1bGVzLgotCi0KLQotSWYgeW91ciBwcm9ibGVtIGlzIG5vdCBsaXN0ZWQgaGVyZSwgcGxlYXNlIGNvbnRhY3QgU3lzS29ubmVjdCdzIHRlY2huaWNhbAotc3VwcG9ydCBmb3IgaGVscCAobGludXhAc3lza29ubmVjdC5kZSkuCi1XaGVuIGNvbnRhY3Rpbmcgb3VyIHRlY2huaWNhbCBzdXBwb3J0LCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyAKLWluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZToKLS0gU3lzdGVtIE1hbnVmYWN0dXJlciBhbmQgSFcgSW5mb3JtYXRpb25zIChDUFUsIE1lbW9yeS4uLiApCi0tIFBDSS1Cb2FyZHMgaW4geW91ciBzeXN0ZW0KLS0gRGlzdHJpYnV0aW9uCi0tIEtlcm5lbCB2ZXJzaW9uCi0tIERyaXZlciB2ZXJzaW9uCi0qKioKLQotCi0KLSoqKkVuZCBvZiBSZWFkbWUgRmlsZSoqKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLnR4dAppbmRleCAwMTIxZWRjLi43ZDExYmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLnR4dApAQCAtMSw3ICsxLDcgQEAKIFRDUCBwcm90b2NvbAogPT09PT09PT09PT09CiAKLUxhc3QgdXBkYXRlZDogMjEgSnVuZSAyMDA1CitMYXN0IHVwZGF0ZWQ6IDkgRmVicnVhcnkgMjAwOAogCiBDb250ZW50cwogPT09PT09PT0KQEAgLTUyLDkgKzUyLDkgQEAKIFRoZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtIGlzCiBkZXRlcm1pbmVkIGJ5IHRoZSBzZXR0aW5nIG9mIHRoZSBzeXNjdGwgbmV0LmlwdjQudGNwX2Nvbmdlc3Rpb25fY29udHJvbC4KIFRoZSBkZWZhdWx0IGNvbmdlc3Rpb24gY29udHJvbCB3aWxsIGJlIHRoZSBsYXN0IG9uZSByZWdpc3RlcmVkIChMSUZPKTsKLXNvIGlmIHlvdSBidWlsdCBldmVyeXRoaW5nIGFzIG1vZHVsZXMuIHRoZSBkZWZhdWx0IHdpbGwgYmUgcmVuby4gSWYgeW91Ci1idWlsZCB3aXRoIHRoZSBkZWZhdWx0J3MgZnJvbSBLY29uZmlnLCB0aGVuIEJJQyB3aWxsIGJlIGJ1aWx0aW4gKG5vdCBhIG1vZHVsZSkKLWFuZCBpdCB3aWxsIGVuZCB1cCB0aGUgZGVmYXVsdC4KK3NvIGlmIHlvdSBidWlsdCBldmVyeXRoaW5nIGFzIG1vZHVsZXMsIHRoZSBkZWZhdWx0IHdpbGwgYmUgcmVuby4gSWYgeW91CitidWlsZCB3aXRoIHRoZSBkZWZhdWx0cyBmcm9tIEtjb25maWcsIHRoZW4gQ1VCSUMgd2lsbCBiZSBidWlsdGluIChub3QgYQorbW9kdWxlKSBhbmQgaXQgd2lsbCBlbmQgdXAgdGhlIGRlZmF1bHQuCiAKIElmIHlvdSByZWFsbHkgd2FudCBhIHBhcnRpY3VsYXIgZGVmYXVsdCB2YWx1ZSB0aGVuIHlvdSB3aWxsIG5lZWQKIHRvIHNldCBpdCB3aXRoIHRoZSBzeXNjdGwuICBJZiB5b3UgdXNlIGEgc3lzY3RsLCB0aGUgbW9kdWxlIHdpbGwgYmUgYXV0b2xvYWRlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbi1yb3V0ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbi1yb3V0ZXIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzJhYjQxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW4tcm91dGVyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYyMSArMCwwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUxpbnV4IFdBTiBSb3V0ZXIgVXRpbGl0aWVzIFBhY2thZ2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVmVyc2lvbiAyLjIuMSAKLU1hciAyOCwgMjAwMQotQXV0aG9yOiBOZW5hZCBDb3JiaWMgPG5jb3JiaWNAc2FuZ29tYS5jb20+Ci1Db3B5cmlnaHQgKGMpIDE5OTUtMjAwMSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5UUk9EVUNUSU9OCi0KLVdpZGUgQXJlYSBOZXR3b3JrcyAoV0FOcykgYXJlIHVzZWQgdG8gaW50ZXJjb25uZWN0IExvY2FsIEFyZWEgTmV0d29ya3MgKExBTnMpCi1hbmQvb3Igc3RhbmQtYWxvbmUgaG9zdHMgb3ZlciB2YXN0IGRpc3RhbmNlcyB3aXRoIGRhdGEgdHJhbnNmZXIgcmF0ZXMKLXNpZ25pZmljYW50bHkgaGlnaGVyIHRoYW4gdGhvc2UgYWNoaWV2YWJsZSB3aXRoIGNvbW1vbmx5IHVzZWQgZGlhbC11cAotY29ubmVjdGlvbnMuCi0KLVVzdWFsbHkgYW4gZXh0ZXJuYWwgZGV2aWNlIGNhbGxlZCBgV0FOIHJvdXRlcicgc2l0dGluZyBvbiB5b3VyIGxvY2FsIG5ldHdvcmsKLW9yIGNvbm5lY3RlZCB0byB5b3VyIG1hY2hpbmUncyBzZXJpYWwgcG9ydCBwcm92aWRlcyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvCi1XQU4uICBBbHRob3VnaCByb3V0ZXIncyBqb2IgbWF5IGJlIGFzIHNpbXBsZSBhcyB0YWtpbmcgeW91ciBsb2NhbCBuZXR3b3JrCi10cmFmZmljLCBjb252ZXJ0aW5nIGl0IHRvIFdBTiBmb3JtYXQgYW5kIHBpcGluZyBpdCB0aHJvdWdoIHRoZSBXQU4gbGluaywgdGhlc2UKLWRldmljZXMgYXJlIG5vdG9yaW91c2x5IGV4cGVuc2l2ZSwgd2l0aCBwcmljZXMgYXMgbXVjaCBhcyAyIC0gNSB0aW1lcyBoaWdoZXIKLXRoZW4gdGhlIHByaWNlIG9mIGEgdHlwaWNhbCBQQyBib3guCi0KLUFsdGVybmF0aXZlbHksIGNvbnNpZGVyaW5nIHJvYnVzdG5lc3MgYW5kIG11bHRpdGFza2luZyBjYXBhYmlsaXRpZXMgb2YgTGludXgsCi1hbiBpbnRlcm5hbCByb3V0ZXIgY2FuIGJlIGJ1aWx0IChtb3N0IHJvdXRlcnMgdXNlIHNvbWUgc29ydCBvZiBzdHJpcHBlZCBkb3duCi1Vbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbSBhbnl3YXkpLiBXaXRoIGEgbnVtYmVyIG9mIHJlbGF0aXZlbHkgaW5leHBlbnNpdmUgV0FOCi1pbnRlcmZhY2UgY2FyZHMgYXZhaWxhYmxlIG9uIHRoZSBtYXJrZXQsIGEgcGVyZmVjdGx5IHVzYWJsZSByb3V0ZXIgY2FuIGJlCi1idWlsdCBmb3IgbGVzcyB0aGFuIGhhbGYgYSBwcmljZSBvZiBhbiBleHRlcm5hbCByb3V0ZXIuICBZZXQgYSBMaW51eCBib3gKLWFjdGluZyBhcyBhIHJvdXRlciBjYW4gc3RpbGwgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMsIHN1Y2ggYXMgZmlyZS13YWxsaW5nLAotcnVubmluZyBGVFAsIFdXVyBvciBETlMgc2VydmVyLCBldGMuCi0KLVRoaXMga2VybmVsIG1vZHVsZSBpbnRyb2R1Y2VzIHRoZSBub3Rpb24gb2YgYSBXQU4gTGluayBEcml2ZXIgKFdMRCkgdG8gTGludXgKLW9wZXJhdGluZyBzeXN0ZW0gYW5kIHByb3ZpZGVzIGdlbmVyaWMgaGFyZHdhcmUtaW5kZXBlbmRlbnQgc2VydmljZXMgZm9yIHN1Y2gKLWRyaXZlcnMuICBXaHkgY2FuIGV4aXN0aW5nIExpbnV4IG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSBub3QgYmUgdXNlZCBmb3IKLXRoaXMgcHVycG9zZT8gIFdlbGwsIGl0IGNhbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIGZldyBrZXkgZGlmZmVyZW5jZXMgYmV0d2VlbgotYSB0eXBpY2FsIG5ldHdvcmsgaW50ZXJmYWNlIChlLmcuIEV0aGVybmV0KSBhbmQgYSBXQU4gbGluay4KLQotTWFueSBXQU4gcHJvdG9jb2xzLCBzdWNoIGFzIFguMjUgYW5kIGZyYW1lIHJlbGF5LCBhbGxvdyBmb3IgbXVsdGlwbGUgbG9naWNhbAotY29ubmVjdGlvbnMgKGtub3duIGFzIGB2aXJ0dWFsIGNpcmN1aXRzJyBpbiBYLjI1IHRlcm1pbm9sb2d5KSBvdmVyIGEgc2luZ2xlCi1waHlzaWNhbCBsaW5rLiAgRWFjaCBzdWNoIHZpcnR1YWwgY2lyY3VpdCBtYXkgKGFuZCBhbG1vc3QgYWx3YXlzIGRvZXMpIGxlYWQKLXRvIGEgZGlmZmVyZW50IGdlb2dyYXBoaWNhbCBsb2NhdGlvbiBhbmQsIHRoZXJlZm9yZSwgZGlmZmVyZW50IG5ldHdvcmsuICBBcyBhCi1yZXN1bHQsIGl0IGlzIHRoZSB2aXJ0dWFsIGNpcmN1aXQsIG5vdCB0aGUgcGh5c2ljYWwgbGluaywgdGhhdCByZXByZXNlbnRzIGEKLXJvdXRlIGFuZCwgdGhlcmVmb3JlLCBhIG5ldHdvcmsgaW50ZXJmYWNlIGluIExpbnV4IHRlcm1zLgotCi1UbyBmdXJ0aGVyIGNvbXBsaWNhdGUgdGhpbmdzLCB2aXJ0dWFsIGNpcmN1aXRzIGFyZSB1c3VhbGx5IHZvbGF0aWxlIGluIG5hdHVyZQotKGV4Y2x1ZGluZyBzbyBjYWxsZWQgYHBlcm1hbmVudCcgdmlydHVhbCBjaXJjdWl0cyBvciBQVkNzKS4gIFdpdGggYWxtb3N0IG5vCi10aW1lIHJlcXVpcmVkIHRvIHNldCB1cCBhbmQgdGVhciBkb3duIGEgdmlydHVhbCBjaXJjdWl0LCBpdCBpcyBoaWdobHkgZGVzaXJhYmxlCi10byBpbXBsZW1lbnQgb24tZGVtYW5kIGNvbm5lY3Rpb25zIGluIG9yZGVyIHRvIG1pbmltaXplIG5ldHdvcmsgY2hhcmdlcy4gIFNvCi11bmxpa2UgYSB0eXBpY2FsIG5ldHdvcmsgZHJpdmVyLCB0aGUgV0FOIGRyaXZlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIG11bHRpcGxlCi1uZXR3b3JrIGludGVyZmFjZXMgYW5kIGNvcGUgYXMgbXVsdGlwbGUgdmlydHVhbCBjaXJjdWl0cyBjb21lIGludG8gZXhpc3RlbmNlCi1hbmQgZ28gYXdheSBkeW5hbWljYWxseS4KLSAKLUxhc3QsIGJ1dCBub3QgbGVhc3QsIFdBTiBjb25maWd1cmF0aW9uIGlzIG11Y2ggbW9yZSBjb21wbGV4IHRoYW4gdGhhdCBvZiBzYXkKLUV0aGVybmV0IGFuZCBtYXkgd2VsbCBhbW91bnQgdG8gc2V2ZXJhbCBkb3plbnMgb2YgcGFyYW1ldGVycy4gIFNvbWUgb2YgdGhlbQotYXJlICJsaW5rLXdpZGUiICB3aGlsZSBvdGhlcnMgYXJlIHZpcnR1YWwgY2lyY3VpdC1zcGVjaWZpYy4gIFRoZSBzYW1lIGhvbGRzCi10cnVlIGZvciBXQU4gc3RhdGlzdGljcyB3aGljaCBpcyBieSBmYXIgbW9yZSBleHRlbnNpdmUgYW5kIGV4dHJlbWVseSB1c2VmdWwKLXdoZW4gdHJvdWJsZXNob290aW5nIFdBTiBjb25uZWN0aW9ucy4gIEV4dGVuZGluZyB0aGUgaWZjb25maWcgdXRpbGl0eSB0byBzdWl0Ci10aGVzZSBuZWVkcyBtYXkgYmUgcG9zc2libGUsIGJ1dCBkb2VzIG5vdCBzZWVtIHF1aXRlIHJlYXNvbmFibGUuICBUaGVyZWZvcmUsIGEKLVdBTiBjb25maWd1cmF0aW9uIHV0aWxpdHkgYW5kIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gcHJvZ3JhbW1lcidzIGludGVyZmFjZQotaXMgbmVlZGVkIGZvciB0aGlzIHB1cnBvc2UuCi0KLU1vc3Qgb2YgdGhlc2UgcHJvYmxlbXMgYXJlIHRha2VuIGNhcmUgb2YgYnkgdGhpcyBtb2R1bGUuICBJdHMgZ29hbCBpcyB0bwotcHJvdmlkZSBhIHVzZXIgd2l0aCBtb3JlLW9yLWxlc3Mgc3RhbmRhcmQgbG9vayBhbmQgZmVlbCBmb3IgYWxsIFdBTiBkZXZpY2VzIGFuZAotYXNzaXN0IGEgV0FOIGRldmljZSBkcml2ZXIgd3JpdGVyIGJ5IHByb3ZpZGluZyBjb21tb24gc2VydmljZXMsIHN1Y2ggYXM6Ci0KLSBvIFVzZXItbGV2ZWwgaW50ZXJmYWNlIHZpYSAvcHJvYyBmaWxlIHN5c3RlbQotIG8gQ2VudHJhbGl6ZWQgY29uZmlndXJhdGlvbgotIG8gRGV2aWNlIG1hbmFnZW1lbnQgKHNldHVwLCBzaHV0ZG93biwgZXRjLikKLSBvIE5ldHdvcmsgaW50ZXJmYWNlIG1hbmFnZW1lbnQgKGR5bmFtaWMgY3JlYXRpb24vZGVzdHJ1Y3Rpb24pCi0gbyBQcm90b2NvbCBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24KLQotVG8gYmEgYWJsZSB0byB1c2UgdGhlIExpbnV4IFdBTiBSb3V0ZXIgeW91IHdpbGwgYWxzbyBuZWVkIGEgV0FOIFRvb2xzIHBhY2thZ2UKLWF2YWlsYWJsZSBmcm9tCi0KLQlmdHAuc2FuZ29tYS5jb20vcHViL2xpbnV4L2N1cnJlbnRfd2FucGlwZS93YW5waXBlLVguWS5aLnRnegotCi13aGVyZSB2WC5ZLlogcmVwcmVzZW50IHRoZSB3YW5waXBlIHZlcnNpb24gbnVtYmVyLgotCi1Gb3IgdGVjaG5pY2FsIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgcGxlYXNlIGUtbWFpbCB0byBuY29yYmljQHNhbmdvbWEuY29tLgotRm9yIGdlbmVyYWwgaW5xdWlyaWVzIHBsZWFzZSBjb250YWN0IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4gYnkKLQotCUhvdGxpbmU6CTEtODAwLTM4OC0yNDc1CShVU0EgYW5kIENhbmFkYSwgdG9sbCBmcmVlKQotCVBob25lOgkJKDkwNSkgNDc0LTE5OTAgIGV4dDogMTA2Ci0JRmF4OgkJKDkwNSkgNDc0LTkyMjMKLQlFLW1haWw6CQlkbUBzYW5nb21hLmNvbQkoRGF2aWQgTWFuZGVsc3RhbSkKLQlXV1c6CQlodHRwOi8vd3d3LnNhbmdvbWEuY29tCi0KLQotSU5TVEFMTEFUSU9OCi0KLVBsZWFzZSByZWFkIHRoZSBXYW5waXBlRm9yTGludXgucGRmIG1hbnVhbCBvbiBob3cgdG8gCi1pbnN0YWxsIHRoZSBXQU5QSVBFIHRvb2xzIGFuZCBkcml2ZXJzIHByb3Blcmx5LiAKLQotCi1BZnRlciBpbnN0YWxsaW5nIHdhbnBpcGUgcGFja2FnZTogL3Vzci9sb2NhbC93YW5yb3V0ZXIvZG9jLiAKLU9uIHRoZSBmdHAuc2FuZ29tYS5jb20gOiAvbGludXgvY3VycmVudF93YW5waXBlL2RvYwotCi0KLUNPUFlSSUdIVCBBTkQgTElDRU5TSU5HIElORk9STUFUSU9OCi0KLVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi10aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi1BTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLXRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcwotQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLQotCi1BQ0tOT1dMRURHRU1FTlRTCi0KLVRoaXMgcHJvZHVjdCBpcyBiYXNlZCBvbiB0aGUgV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gUm91dGVyIGRldmVsb3BlZAotYnkgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiBmb3IgTGludXggMi4wLnggYW5kIDIuMi54LiAgU3VjY2VzcyBvZiB0aGUgV0FOUElQRQotdG9nZXRoZXIgd2l0aCB0aGUgbmV4dCBtYWpvciByZWxlYXNlIG9mIExpbnV4IGtlcm5lbCBpbiBzdW1tZXIgMTk5NiBjb21tYW5kZWQKLWFkZXF1YXRlIGNoYW5nZXMgdG8gdGhlIFdBTlBJUEUgY29kZSB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIG5ldyBMaW51eAotZmVhdHVyZXMuCi0KLUluc3RlYWQgb2YgY29udGludWluZyBkZXZlbG9waW5nIHByb3ByaWV0YXJ5IGludGVyZmFjZSB0aWVkIHRvIFNhbmdvbWEgV0FOCi1jYXJkcywgd2UgZGVjaWRlZCB0byBzZXBhcmF0ZSBhbGwgaGFyZHdhcmUtaW5kZXBlbmRlbnQgY29kZSBpbnRvIGEgc2VwYXJhdGUKLW1vZHVsZSBhbmQgZGVmaW5lZCB0d28gbGV2ZWxzIG9mIGludGVyZmFjZXMgLSBvbmUgZm9yIHVzZXItbGV2ZWwgYXBwbGljYXRpb25zCi1hbmQgYW5vdGhlciBmb3Iga2VybmVsLWxldmVsIFdBTiBkcml2ZXJzLiAgV0FOUElQRSBpcyBub3cgaW1wbGVtZW50ZWQgYXMgYQotV0FOIGRyaXZlciBjb21wbGlhbnQgd2l0aCB0aGUgV0FOIExpbmsgRHJpdmVyIGludGVyZmFjZS4gIEFsc28gYSBnZW5lcmFsCi1wdXJwb3NlIFdBTiBjb25maWd1cmF0aW9uIHV0aWxpdHkgYW5kIGEgc2V0IG9mIHNoZWxsIHNjcmlwdHMgd2FzIGRldmVsb3BlZCB0byAKLXN1cHBvcnQgV0FOIHJvdXRlciBhdCB0aGUgdXNlciBsZXZlbC4KLQotTWFueSB1c2VmdWwgaWRlYXMgY29uY2VybmluZyBoYXJkd2FyZS1pbmRlcGVuZGVudCBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24KLXdlcmUgZ2l2ZW4gYnkgTWlrZSBNY0xhZ2FuIDxtaWtlLm1jbGFnYW5AbGludXgub3JnPiBhbmQgaGlzIGltcGxlbWVudGF0aW9uCi1vZiB0aGUgRnJhbWUgUmVsYXkgcm91dGVyIGFuZCBkcml2ZXJzIGZvciBTYW5nb21hIGNhcmRzIChkbGNpL3NkbGEpLgotCi1XaXRoIHRoZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSXMgYmVpbmcgaW5jb3Jwb3JhdGVkIGludG8gdGhlIFdBTlBJUEUsCi1hIHNwZWNpYWwgdGhhbmsgZ29lcyB0byBBbGFuIENveCBpbiBwcm92aWRpbmcgaW5zaWdodCBpbnRvIEJTRCBzb2NrZXRzLgotCi1TcGVjaWFsIHRoYW5rcyB0byBhbGwgdGhlIFdBTlBJUEUgdXNlcnMgd2hvIHBlcmZvcm1lZCBmaWVsZC10ZXN0aW5nLCByZXBvcnRlZAotYnVncyBhbmQgbWFkZSB2YWx1YWJsZSBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgdGhhdCBoZWxwIHVzIHRvIGltcHJvdmUgdGhpcwotcHJvZHVjdC4KLQotCi0KLU5FVyBJTiBUSElTIFJFTEVBU0UKLQotCW8gVXBkYXRlZCB0aGUgV0FOQ0ZHIHV0aWxpdHkKLQkJQ2FsbHMgdGhlIHBwcGNvbmZpZyB0byBjb25maWd1cmUgdGhlIFBQUEQKLQkJZm9yIGFzeW5jIGNvbm5lY3Rpb25zLgotCi0JbyBBZGRlZCB0aGUgUFBQQ09ORklHIHV0aWxpdHkKLQkJVXNlZCB0byBjb25maWd1cmUgdGhlIFBQUEQgZGFlbW9uIGZvciB0aGUKLQkJV0FOUElQRSBBc3luYyBQUFAgYW5kIHN0YW5kYXJkIHNlcmlhbCBwb3J0LgotCQlUaGUgd2FuY2ZnIGNhbGxzIHRoZSBwcHBjb25maWcgdG8gY29uZmlndXJlCi0JCXRoZSBwcHBkLgotCi0JbyBGaXhlZCB0aGUgUENJIGF1dG9kZXRlY3QgZmVhdHVyZS4gIAotCQlUaGUgU0xPVCAwIHdhcyB1c2VkIGFzIGFuIGF1dG9kZXRlY3Qgb3B0aW9uCi0JCWhvd2V2ZXIsIHNvbWUgaGlnaCBlbmQgUEMncyBzbG90IG51bWJlcnMgc3RhcnQKLQkJZnJvbSAwLiAKLQotCW8gVGhpcyByZWxlYXNlIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHRoZSBuZXcgYmFja3VwZAotCSAgZGFlbW9uIHJlbGVhc2UuCi0JCi0KLVBST0RVQ1QgQ09NUE9ORU5UUyBBTkQgUkVMQVRFRCBGSUxFUwotCi0vZXRjOiAob3IgdXNlciBkZWZpbmVkKQotCXdhbnBpcGUxLmNvbmYJZGVmYXVsdCByb3V0ZXIgY29uZmlndXJhdGlvbiBmaWxlCi0KLS9saWIvbW9kdWxlcy9YLlkuWi9taXNjOgotCXdhbnJvdXRlci5vCXJvdXRlciBrZXJuZWwgbG9hZGFibGUgbW9kdWxlCi0JYWZfd2FucGlwZS5vCXdhbnBpcGUgYXBpIHNvY2tldCBtb2R1bGUKLQotL2xpYi9tb2R1bGVzL1guWS5aL25ldDoKLQlzZGxhZHJ2Lm8JU2FuZ29tYSBTRExBIHN1cHBvcnQgbW9kdWxlCi0Jd2FucGlwZS5vCVNhbmdvbWEgV0FOUElQRSh0bSkgZHJpdmVyIG1vZHVsZQotCi0vcHJvYy9uZXQvd2Fucm91dGVyCi0JQ29uZmlnCQlyZWFkcyBjdXJyZW50IHJvdXRlciBjb25maWd1cmF0aW9uCi0JU3RhdHVzCQlyZWFkcyBjdXJyZW50IHJvdXRlciBzdGF0dXMKLQl7bmFtZX0JCXJlYWRzIFdBTiBkcml2ZXIgc3RhdGlzdGljcwotCi0vdXNyL3NiaW46Ci0Jd2Fucm91dGVyCXdhbnJvdXRlciBzdGFydC11cCBzY3JpcHQKLQl3YW5jb25maWcJd2Fucm91dGVyIGNvbmZpZ3VyYXRpb24gdXRpbGl0eQotCXNkbGFkdW1wCVdBTlBJUEUgYWRhcHRlciBtZW1vcnkgZHVtcCB1dGlsaXR5Ci0gICAgICAgIGZwaXBlbW9uICAgICAgICBNb25pdG9yIGZvciBGcmFtZSBSZWxheQotICAgICAgICBjcGlwZW1vbiAgICAgICAgTW9uaXRvciBmb3IgQ2lzY28gSERMQwotCXBwaXBlbW9uIAlNb25pdG9yIGZvciBQUFAKLQl4cGlwZW1vbiAJTW9uaXRvciBmb3IgWDI1Ci0Jd3BrYmRtb24gICAgICAgIFdBTlBJUEUga2V5Ym9hcmQgbGVkIG1vbml0b3IvZGVidWdnZXIKLQotL3Vzci9sb2NhbC93YW5yb3V0ZXI6Ci0JUkVBRE1FCQl0aGlzIGZpbGUKLQlDT1BZSU5HCQlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotCVNldHVwCQlpbnN0YWxsYXRpb24gc2NyaXB0Ci0JRmlsZWxpc3QJZGlzdHJpYnV0aW9uIGRlZmluaXRpb24gZmlsZQotCXdhbnJvdXRlci5yYwltZXRhLWNvbmZpZ3VyYXRpb24gZmlsZSAKLQkJCSh1c2VkIGJ5IHRoZSBTZXR1cCBhbmQgd2Fucm91dGVyIHNjcmlwdCkKLQotL3Vzci9sb2NhbC93YW5yb3V0ZXIvZG9jOgotCXdhbnBpcGVGb3JMaW51eC5wZGYgCVdBTiBSb3V0ZXIgVXNlcidzIE1hbnVhbAotCi0vdXNyL2xvY2FsL3dhbnJvdXRlci9wYXRjaGVzOgotCXdhbnJvdXRlci12MjIxMy5neiAgCXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xMSB1cCB0byAyLjIuMTMuCi0Jd2Fucm91dGVyLXYyMjE0Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi4yLjE0LiAKLQl3YW5yb3V0ZXItdjIyMTUuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbHMgMi4yLjE1IHRvIDIuMi4xNy4KLQl3YW5yb3V0ZXItdjIyMTguZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbHMgMi4yLjE4IGFuZCB1cC4KLQl3YW5yb3V0ZXItdjI0MC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuNC4wLiAgCi0Jd2Fucm91dGVyLXYyNDIuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjQuMiBhbmQgdXAuCi0Jd2Fucm91dGVyLXYyMDM0Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi4wLjM0Ci0Jd2Fucm91dGVyLXYyMDM2Lmd6IAlwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMC4zNiBhbmQgdXAuIAotCi0vdXNyL2xvY2FsL3dhbnJvdXRlci9wYXRjaGVzL2tkcml2ZXJzOgotCVNvdXJjZXMgb2YgdGhlIGxhdGVzdCBXQU5QSVBFIGRldmljZSBkcml2ZXJzLgotCVRoZXNlIGFyZSB1c2VkIHRvIFVQR1JBREUgdGhlIGxpbnV4IGtlcm5lbCB0byB0aGUgbmV3ZXN0Ci0JdmVyc2lvbiBpZiB0aGUga2VybmVsIHNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIHBhdGNoZWQgd2l0aAotCVdBTlBJUEUgZHJpdmVycy4KLQotL3Vzci9sb2NhbC93YW5yb3V0ZXIvc2FtcGxlczoKLQlpbnRlcmZhY2UJc2FtcGxlIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGZpbGUKLQl3YW5waXBlMS5jcHJpIAlDSERMQyBwcmltYXJ5IHBvcnQKLSAgICAgCXdhbnBpcGUyLmNzZWMgCUNIRExDIHNlY29uZGFyeSBwb3J0Ci0gICAgIAl3YW5waXBlMS5mciAgIAlGcmFtZSBSZWxheSBwcm90b2NvbAotICAgICAJd2FucGlwZTEucHBwICAJUFBQIHByb3RvY29sICkgCi0Jd2FucGlwZTEuYXN5CUNIRExDIEFTWU5DIHByb3RvY29sCi0Jd2FucGlwZTEueDI1CVgyNSBwcm90b2NvbAotCXdhbnBpcGUxLnN0dHkJU3luYyBUVFkgZHJpdmVyIChVc2VkIGJ5IEtlcm5lbCBQUFBEIGRhZW1vbikKLQl3YW5waXBlMS5hdHR5CUFzeW5jIFRUWSBkcml2ZXIgKFVzZWQgYnkgS2VybmVsIFBQUEQgZGFlbW9uKQotCXdhbnJvdXRlci5yYwlzYW1wbGUgbWV0YS1jb25maWd1cmF0aW9uIGZpbGUKLQotL3Vzci9sb2NhbC93YW5yb3V0ZXIvdXRpbDoKLQkqCQl3YW4tdG9vbHMgdXRpbGl0aWVzIHNvdXJjZSBjb2RlCi0KLS91c3IvbG9jYWwvd2Fucm91dGVyL2FwaS94MjU6Ci0JKgkJeDI1IGFwaSBzYW1wbGUgcHJvZ3JhbXMuCi0vdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkvY2hkbGM6Ci0JKgkJY2hkbGMgYXBpIHNhbXBsZSBwcm9ncmFtcy4KLS91c3IvbG9jYWwvd2Fucm91dGVyL2FwaS9mcjoKLQkqCQlmciBhcGkgc2FtcGxlIHByb2dyYW1zLgotL3Vzci9sb2NhbC93YW5yb3V0ZXIvY29uZmlnL3dhbmNmZzoKLQl3YW5jZmcJCVdBTlBJUEUgR1VJIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbS4KLSAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgd2FucGlwZSMuY29uZiBmaWxlcy4gCi0vdXNyL2xvY2FsL3dhbnJvdXRlci9jb25maWcvY2ZnZnQxOgotCWNmZ2Z0MQkJR1VJIENTVS9EU1UgY29uZmlndXJhdGlvbiBwcm9ncmFtLgotCi0vdXNyL2luY2x1ZGUvbGludXg6Ci0Jd2Fucm91dGVyLmgJcm91dGVyIEFQSSBkZWZpbml0aW9ucwotCXdhbnBpcGUuaAlXQU5QSVBFIEFQSSBkZWZpbml0aW9ucwotCXNkbGFkcnYuaAlTRExBIHN1cHBvcnQgbW9kdWxlIEFQSSBkZWZpbml0aW9ucwotCXNkbGFzZm0uaAlTRExBIGZpcm13YXJlIG1vZHVsZSBkZWZpbml0aW9ucwotCWlmX3dhbnBpcGUuaAlXQU5QSVBFIFNvY2tldCBkZWZpbml0aW9ucwotCXNkbGFwY2kuaAlXQU5QSVBFIFBDSSBkZWZpbml0aW9ucwotCQotCi0vdXNyL3NyYy9saW51eC9uZXQvd2Fucm91dGVyOgotCSoJCXdhbnJvdXRlciBzb3VyY2UgY29kZQotCi0vdmFyL2xvZzoKLQl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIGxvZyAoY3JlYXRlZCBieSB0aGUgU2V0dXAgc2NyaXB0KQotCi0vdmFyL2xvY2s6ICAob3IgL3Zhci9sb2NrL3N1YnN5cyBmb3IgUmVkSGF0KQotCXdhbnJvdXRlcgl3YW5yb3V0ZXIgbG9jayBmaWxlIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCi0KLS91c3IvbG9jYWwvd2Fucm91dGVyL2Zpcm13YXJlOgotCWZyNTE0LnNmbQlGcmFtZSByZWxheSBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAotCWNkdWFsNTE0LnNmbQlEdWFsIFBvcnQgQ2lzY28gSERMQyBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAotCXBwcDUxNC5zZm0gICAgICBQUFAgRmlybXdhcmUgZm9yIFNhbmdvbWEgUzUwOCBhbmQgUzUxNCBjYXJkcwotCXgyNV81MDguc2ZtCVgyNSBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGNhcmQuCi0KLQotUkVWSVNJT04gSElTVE9SWQotCi0xLjAuMAlEZWNlbWJlciAzMSwgMTk5NglJbml0aWFsIHZlcnNpb24KLQotMS4wLjEJSmFudWFyeSAzMCwgMTk5NwlTdGF0dXMgYW5kIHN0YXRpc3RpY3MgY2FuIGJlIHJlYWQgdmlhIC9wcm9jCi0JCQkJZmlsZXN5c3RlbSBlbnRyaWVzLgotCi0xLjAuMiAgIEFwcmlsIDMwLCAxOTk3ICAgICAgICAgIEFkZGVkIFVEUCBtYW5hZ2VtZW50IHZpYSBtb25pdG9ycy4KLQotMS4wLjMJSnVuZSAzLCAxOTk3CQlVRFAgbWFuYWdlbWVudCBmb3IgbXVsdGlwbGUgYm9hcmRzIHVzaW5nIEZyYW1lCi0JCQkJUmVsYXkgYW5kIFBQUAotCQkJCUVuYWJsZWQgY29udGludW91cyB0cmFuc21pc3Npb24gb2YgQ29uZmlndXJlIAotCQkJCVJlcXVlc3QgUGFja2V0IGZvciBQUFAgKGZvciA1MDggb25seSkKLQkJCQlDb25uZWN0aW9uIFRpbWVvdXQgZm9yIFBQUCBjaGFuZ2VkIGZyb20gOTAwIHRvIDAKLQkJCQlGbG93IENvbnRyb2wgUHJvYmxlbSBmaXhlZCBmb3IgRnJhbWUgUmVsYXkKLQotMS4wLjQJSnVseSAxMCwgMTk5NwkJUzUwOC9GVDEgbW9uaXRvcmluZyBjYXBhYmlsaXR5IGluIGZwaXBlbW9uIGFuZAotCQkJCXBwaXBlbW9uIHV0aWxpdGllcy4KLQkJCQlDb25maWd1cmFibGUgVFRMIGZvciBVRFAgcGFja2V0cy4KLQkJCQlNdWx0aWNhc3QgYW5kIEJyb2FkY2FzdCBJUCBzb3VyY2UgYWRkcmVzc2VzIGFyZQotCQkJCXNpbGVudGx5IGRpc2NhcmRlZC4KLQotMS4wLjUJSnVseSAyOCwgMTk5NwkJQ29uZmlndXJhYmxlIFQzOTEsVDM5MixOMzkxLE4zOTIsTjM5MyBmb3IgRnJhbWUKLQkJCQlSZWxheSBpbiByb3V0ZXIuY29uZi4KLQkJCQlDb25maWd1cmFibGUgTWVtb3J5IEFkZHJlc3MgdGhyb3VnaCByb3V0ZXIuY29uZiAKLQkJCQlmb3IgRnJhbWUgUmVsYXksIFBQUCBhbmQgWC4yNS4gKGNvbW1lbnRpbmcgdGhpcwotIAkJCQlvdXQgZW5hYmxlcyBhdXRvLWRldGVjdGlvbikuCi0JCQkJRml4ZWQgZnJlZWluZyB1cCByZWNlaXZlZCBidWZmZXJzIHVzaW5nIGtmcmVlKCkKLSAJCQkJZm9yIEZyYW1lIFJlbGF5IGFuZCBYLjI1LgotCQkJCVByb3RlY3Qgc2RsYV9wZWVrKCkgYnkgY2FsbGluZyBzYXZlX2ZsYWdzKCksCi0JCQkJY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KLQkJCQlDaGFuZ2VkIG51bWJlciBvZiBUcmFjZSBlbGVtZW50cyBmcm9tIDMyIHRvIDIwCi0JCQkJQWRkZWQgRExDSSBzcGVjaWZpYyBkYXRhIG1vbml0b3JpbmcgaW4gRlBJUEVNT04uIAotMi4wLjAJTm92IDA3LCAxOTk3CQlJbXBsZW1lbnRlZCBwcm90ZWN0aW9uIG9mIFJBQ0UgY29uZGl0aW9ucyBieSAKLQkJCQljcml0aWNhbCBmbGFncyBmb3IgRlJBTUUgUkVMQVkgYW5kIFBQUC4KLQkJCQlETENJIExpc3QgaW50ZXJydXB0IG1vZGUgaW1wbGVtZW50ZWQuCi0JCQkJSVBYIHN1cHBvcnQgaW4gRlJBTUUgUkVMQVkgYW5kIFBQUC4KLQkJCQlJUFggU2VydmVyIFN1cHBvcnQgKE1BUlMpCi0JCQkJTW9yZSBkcml2ZXIgc3BlY2lmaWMgc3RhdHMgaW5jbHVkZWQgaW4gRlBJUEVNT04KLQkJCQlhbmQgUElQRU1PTi4KLQotMi4wLjEJTm92IDI4LCAxOTk3CQlCdWcgRml4ZXMgZm9yIHZlcnNpb24gMi4wLjAuCi0JCQkJUHJvdGVjdGlvbiBvZiAiZW5hYmxlX2lycSgpIiB3aGlsZSAKLQkJCQkiZGlzYWJsZV9pcnEoKSIgaGFzIGJlZW4gZW5hYmxlZCBmcm9tIGFueSBvdGhlcgotCQkJCXJvdXRpbmUgKGZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYMjUpLgotCQkJCUFkZGVkIGFkZGl0aW9uYWwgU3RhdHMgZm9yIEZwaXBlbW9uIGFuZCBQcGlwZW1vbgotCQkJCUltcHJvdmVkIExvYWQgU2hhcmluZyBmb3IgbXVsdGlwbGUgYm9hcmRzCi0KLTIuMC4yCURlYyAwOSwgMTk5NwkJU3VwcG9ydCBmb3IgUEFQIGFuZCBDSEFQIGZvciBwcHAgaGFzIGJlZW4KLQkJCQlpbXBsZW1lbnRlZC4KLQotMi4wLjMJQXVnIDE1LCAxOTk4CQlOZXcgcmVsZWFzZSBzdXBwb3J0aW5nIENpc2NvIEhETEMsIENJUiBmb3IgRnJhbWUKLQkJCQlyZWxheSwgRHluYW1pYyBJUCBhc3NpZ25tZW50IGZvciBQUFAgYW5kIEludmVyc2UKLQkJCQlBcnAgc3VwcG9ydCBmb3IgRnJhbWUtcmVsYXkuICBNYW4gUGFnZXMgYXJlIAotCQkJCWluY2x1ZGVkIGZvciBiZXR0ZXIgc3VwcG9ydCBhbmQgYSBuZXcgdXRpbGl0eQotCQkJCWZvciBjb25maWd1cmluZyBGVDEgY2FyZHMuCi0KLTIuMC40CURlYyAwOSwgMTk5OAkgICAgICAgIER1YWwgUG9ydCBzdXBwb3J0IGZvciBDaXNjbyBIRExDLgotCQkJCVN1cHBvcnQgZm9yIEhETEMgKExBUEIpIEFQSS4KLQkJCQlTdXBwb3J0cyBCaVN5bmMgU3RyZWFtaW5nIGNvZGUgZm9yIFM1MDJFIAotCQkJCWFuZCBTNTAzIGNhcmRzLgotCQkJCVN1cHBvcnQgZm9yIFN0cmVhbWluZyBIRExDIEFQSS4KLQkJCQlQcm92aWRlcyBhIEJTRCBzb2NrZXQgaW50ZXJmYWNlIGZvciAKLQkJCQljcmVhdGluZyBhcHBsaWNhdGlvbnMgdXNpbmcgQmlTeW5jCi0gICAJCQkJc3RyZWFtaW5nLiAgICAgICAgCi0KLTIuMC41ICAgQXVnIDA0LCAxOTk5IAkJQ0hETEMgaW5pdGlhbGl6YXRpb24gYnVnIGZpeC4KLQkJCQlQUFAgaW50ZXJydXB0IGRyaXZlbiBkcml2ZXI6IAotICAJCQkJRml4IHRvIHRoZSBQUFAgbGluZSBoYW5ndXAgcHJvYmxlbS4KLQkJCQlOZXcgUFBQIGZpcm13YXJlCi0JCQkJQWRkZWQgY29tbWVudHMgdG8gdGhlIHN0YXJ0dXAgU1lTVEVNIEVSUk9SIG1lc3NhZ2VzCi0JCQkJWHBpcGVtb24gZGVidWdnaW5nIGFwcGxpY2F0aW9uIGZvciB0aGUgWDI1IHByb3RvY29sCi0JCQkJTmV3IFVTRVJfTUFOVUFMLnR4dAotCQkJCUZpeGVkIHRoZSBvZGQgYm91bmRhcnkgNGJ5dGUgd3JpdGVzIHRvIHRoZSBib2FyZC4KLQkJCQlCaVN5bmMgU3RyZWFtaW5nIGNvZGUgaGFzIGJlZW4gdGFrZW4gb3V0LiAgCi0JCQkJIEF2YWlsYWJsZSBhcyBhIHBhdGNoLgotCQkJCVN0cmVhbWluZyBIRExDIEFQSSBoYXMgYmVlbiB0YWtlbiBvdXQuICAKLQkJCQkgQXZhaWxhYmxlIGFzIGEgcGF0Y2guICAgICAgICAgICAgICAgICAKLQotMi4wLjYgICBBdWcgMTcsIDE5OTkJCUluY3JlYXNlZCBkZWJ1Z2dpbmcgaW4gc3RhdHVwIHNjcmlwdHMKLQkJCQlGaXhlZCBpbnN0YWxsYXRpb24gYnVncyBmcm9tIDIuMC41Ci0JCQkJS2VybmVsIHBhdGNoIHdvcmtzIGZvciBib3RoIDIuMi4xMCBhbmQgMi4yLjExIGtlcm5lbHMuCi0JCQkJVGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwYWNrYWdlcyAgICAgICAgIAotCi0yLjAuNyAgIEF1ZyAyNiwgMTk5OQkJbyAgTWVyZ2VkIFgyNUFQSSBjb2RlIGludG8gV0FOUElQRS4KLQkJCQlvICBGaXhlZCBhIG1lbW9yeSBsZWFrIGZvciBYMjVBUEkKLQkJCQlvICBVcGRhdGVkIHRoZSBYMjVBUEkgY29kZSBmb3IgMi4yLlgga2VybmVscy4KLQkJCQlvICBJbXByb3ZlZCBORU0gaGFuZGxpbmcuICAgCi0KLTIuMS4wCU9jdCAyNSwgMTk5OQkJbyBOZXcgY29kZSBmb3IgUzUxNCBQQ0kgQ2FyZAotCQkJCW8gTmV3IENIRExDIGFuZCBGcmFtZSBSZWxheSBkcml2ZXJzCi0JCQkJbyBQUFAgYW5kIFgyNSBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHJlbGVhc2UgICAgCi0KLTIuMS4xCU5vdiAzMCwgMTk5OQkJbyBQUFAgc3VwcG9ydCBmb3IgUzUxNCBQQ0kgQ2FyZHMKLQotMi4xLjMgICBBcHIgMDYsIDIwMDAJCW8gU29ja2V0IGJhc2VkIHgyNWFwaSAKLQkJCQlvIFNvY2tldCBiYXNlZCBjaGRsYyBhcGkKLQkJCQlvIFNvY2tldCBiYXNlZCBmciBhcGkKLQkJCQlvIER1YWwgUG9ydCBSZWNlaXZlIG9ubHkgQ0hETEMgc3VwcG9ydC4KLQkJCQlvIEFzeW5jaHJvbm91cyBDSERMQyBzdXBwb3J0IChTZWNvbmRhcnkgUG9ydCkKLQkJCQlvIGNmZ2Z0MSBHVUkgY3N1L2RzdSBjb25maWd1cmF0b3IKLQkJCQlvIHdhbmNmZyBHVUkgY29uZmlndXJhdGlvbiBmaWxlIAotCQkJCSAgY29uZmlndXJhdG9yLgotCQkJCW8gQXJjaGl0ZWN0dXJhbCBkaXJlY3RvcnkgY2hhbmdlcy4KLQotYmV0YS0yLjEuNCBKdWwgMjAwMAkJbyBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uOgotCQkJCQlOZXR3b3JrIGludGVyZmFjZXMgcmVmbGVjdCB0aGUgc3RhdGUKLQkJCQkJb2YgcHJvdG9jb2wgbGF5ZXIuICBJZiB0aGUgcHJvdG9jb2wgYmVjb21lcwotCQkJCQlkaXNjb25uZWN0ZWQsIGRyaXZlciB3aWxsIGJyaW5nIGRvd24KLQkJCQkJdGhlIGludGVyZmFjZS4gIE9uY2UgdGhlIHByb3RvY29sIHJlY29ubmVjdHMKLQkJCQkJdGhlIGludGVyZmFjZSB3aWxsIGJlIGJyb3VnaHQgdXAuIAotCQkJCQkKLQkJCQkJTm90ZTogVGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgotCi0JCQkJbyBEeW5hbWljIHdhbnJvdXRlciBzZXR1cCB1c2luZyAnd2FuY29uZmlnJzoKLQkJCQkJd2FuY29uZmlnIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8KLQkJCQkJc2h1dGRvd24scmVzdGFydCxzdGFydCBvciByZWNvbmZpZ3VyZSAKLQkJCQkJYSB2aXJ0dWFsIGNpcmN1aXQgZHluYW1pY2FsbHkuCi0JCQkJICAgICAKLQkJCQkJRnJhbWUgUmVsYXk6ICBFYWNoIERMQ0kgY2FuIGJlOiAKLQkJCQkJCSAgICAgIGNyZWF0ZWQsc3RvcHBlZCxyZXN0YXJ0ZWQgYW5kIHJlY29uZmlndXJlZAotCQkJCQkJICAgICAgZHluYW1pY2FsbHkgdXNpbmcgd2FuY29uZmlnLgotCQkJCQkKLQkJCQkJCSAgICAgIGV4OiB3YW5jb25maWcgY2FyZCB3YW5waXBlMSBkZXYgd3AxX2ZyMTYgdXAKLQkJCQkgIAotCQkJCW8gV2Fucm91dGVyIHN0YXJ0dXAgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6Ci0JCQkJCXdhbmNvbmZpZyBhbHNvIHN1cHBvcnRzIHdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUKLQkJCQkJYXJndW1lbnRzLiAgVGh1cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYSB3YW5waXBlIy5jb25mCi0JCQkJCWNvbmZpZ3VyYXRpb24gZmlsZS4gIAotCi0JCQkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIHVwZGF0ZS9idWcgZml4ZXMuCi0JCQkJCUFkZGVkIHN1cHBvcnQgZm9yIExDTiBudW1iZXJzIGdyZWF0ZXIgdGhhbiAyNTUuCi0JCQkJCU9wdGlvbiB0byBwYXNzIHVwIG1vZGVtIG1lc3NhZ2VzLgotCQkJCQlQcm92aWRlZCBhIFBDSSBJUlEgY2hlY2ssIHNvIGEgc2luZ2xlIFM1MTQKLQkJCQkJY2FyZCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYSBub24tc2hhcmluZyBpbnRlcnJ1cHQuCi0KLQkJCQlvIEZpeGVzIHRvIHRoZSB3YW5jZmcgdXRpbGl0eS4KLQkJCQlvIE5ldyBGVDEgZGVidWdnaW5nIHN1cHBvcnQgdmlhICpwaXBlbW9uIHV0aWxpdGllcy4KLQkJCQlvIEZyYW1lIFJlbGF5IEFSUCBzdXBwb3J0IEVuYWJsZWQuCi0KLWJldGEzLTIuMS40IEp1bCAyMDAwCQlvIFgyNSBNX0JJVCBQcm9ibGVtIGZpeC4KLQkJCQlvIEFkZGVkIHRoZSBNdWx0aS1Qb3J0IFBQUAotCQkJCSAgVXBkYXRlZCB1dGlsaXRpZXMgZm9yIHRoZSBNdWx0aS1Qb3J0IFBQUC4KLQotMi4xLjQJQXV0IDIwMDAKLQkJCQlvIEluIFgyNUFQSToKLQkJCQkJTWF4aW11bSBwYWNrZXQgYW4gYXBwbGljYXRpb24gY2FuIHNlbmQKLQkJCQkJdG8gdGhlIGRyaXZlciBoYXMgYmVlbiBleHRlbmRlZCB0byA0MDk2IGJ5dGVzLgotCi0JCQkJCUZpeGVkIHRoZSB4MjUgc3RhcnR1cCBidWcuIEVuYWJsZSAKLQkJCQkJY29tbXVuaWNhdGlvbnMgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcwotCQkJCQljb21lIHVwLiAgSElHSCBTVkMvUFZDIGlzIHVzZWQgdG8gY2FsY3VsYXRlCi0JCQkJCXRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCi0JCQkJCUVuYWJsZSBwcm90b2NvbCBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCi0JCQkJCWFyZSBlbmFibGVkLgotCi0JCQkJbyBBZGRlZCBhbiBleHRyYSBzdGF0ZSB0byB0aGUgRlQxIGNvbmZpZywga2VybmVsIG1vZHVsZS4KLQkJCQlvIFVwZGF0ZWQgdGhlIHBpcGVtb24gZGVidWdnZXJzLgotCi0JCQkJbyBCbG9ja2VkIHRoZSBNdWx0aS1Qb3J0IFBQUCBmcm9tIHJ1bm5pbmcgb24ga2VybmVscwotCQkJCSAgMi4yLjE2IG9yIGdyZWF0ZXIsIGR1ZSB0byBzeW5jcHBwIGtlcm5lbCBtb2R1bGUKLQkJCQkgIGNoYW5nZS4gCi0JICAKLWJldGExLTIuMS41IAlOb3YgMTUgMjAwMAotCQkJCW8gRml4ZWQgdGhlIE11bHRpUG9ydCBQUFAgU3VwcG9ydCBmb3Iga2VybmVscyAyLjIuMTYgYW5kIGFib3ZlLgotCQkJCSAgMi4yLlgga2VybmVscyBvbmx5Ci0KLQkJCQlvIFNlY3VyZWQgdGhlIGRyaXZlciBVRFAgZGVidWdnaW5nIGNhbGxzCi0JCQkJCS0gQWxsIGlsbGVnYWwgbmV0d29yayBkZWJ1Z2dpbmcgY2FsbHMgYXJlIHJlcG9ydGVkIHRvCi0JCQkJCSAgdGhlIGxvZy4KLQkJCQkJLSBEZWZpbmVkIGEgc2V0IG9mIGFsbG93ZWQgY29tbWFuZHMsIGFsbCBvdGhlciBkZW5pZWQuCi0JCQkJCQotCQkJCW8gQ3BpcGVtb24KLQkJCQkJLSBBZGRlZCBzZXQgRlQxIGNvbW1hbmRzIHRvIHRoZSBjcGlwZW1vbi4gVGh1cyBDU1UvRFNVCi0JCQkJCSAgY29uZmlndXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIGNwaXBlbW9uLgotCQkJCQkgIEFsbCBzeXN0ZW1zIHRoYXQgY2Fubm90IHJ1biBjZmdmdDEgR1VJIHV0aWxpdHkgc2hvdWxkCi0JCQkJCSAgdXNlIGNwaXBlbW9uIHRvIGNvbmZpZ3VyZSB0aGUgb24gYm9hcmQgQ1NVL0RTVS4KLQotCi0JCQkJbyBLZXlib2FyZCBMZWQgTW9uaXRvci9EZWJ1Z2dlcgotCQkJCQktIEEgbmV3IHV0aWxpdHkgL3Vzci9zYmluL3dwa2JkbW9uIHVzZXMga2V5Ym9hcmQgbGVkcwotCQkJCQkgIHRvIGNvbnZleSBvcGVyYXRpb25hbCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gb2YgdGhlIAotCQkJCQkgIFNhbmdvbWEgV0FOUElQRSBjYXJkcy4KLQkJCQkJTlVNX0xPQ0sgICAgPSBMaW5lIFN0YXRlICAoT249Y29ubmVjdGVkLCAgICBPZmY9ZGlzY29ubmVjdGVkKQotCQkJCQlDQVBTX0xPQ0sgICA9IFR4IGRhdGEgICAgIChPbj10cmFuc21pdHRpbmcsIE9mZj1ubyB0eCBkYXRhKQotCQkJCQlTQ1JPTExfTE9DSyA9IFJ4IGRhdGEgICAgIChPbj1yZWNlaXZpbmcsICAgIE9mZj1ubyByeCBkYXRhCi0JCQkJCQotCQkJCW8gSGFyZHdhcmUgcHJvYmUgb24gbW9kdWxlIGxvYWQgYW5kIGR5bmFtaWMgZGV2aWNlIGFsbG9jYXRpb24KLQkJCQkJLSBEdXJpbmcgV0FOUElQRSBtb2R1bGUgbG9hZCwgYWxsIFNhbmdvbWEgY2FyZHMgYXJlIHByb2JlZAotCQkJCQkgIGFuZCBmb3VuZCBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGluIHRoZSAvdmFyL2xvZy9tZXNzYWdlcy4KLQkJCQkJLSBJZiBubyBjYXJkcyBhcmUgZm91bmQsIHRoZSBtb2R1bGUgbG9hZCBmYWlscy4KLQkJCQkJLSBBcHByb3ByaWF0ZSBudW1iZXIgb2YgZGV2aWNlcyBhcmUgZHluYW1pY2FsbHkgbG9hZGVkIAotCQkJCQkgIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgU2FuZ29tYSBjYXJkcyBmb3VuZC4KLQotCQkJCQkgIE5vdGU6IFRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gCi0JCQkJCQlDT05GSUdfV0FOUElQRV9DQVJEUyBoYXMgYmVlbiB0YWtlbiBvdXQuCi0JCQkJCQotCQkJCW8gRml4ZWQgdGhlIEZyYW1lIFJlbGF5IGFuZCBDaGRsYyBuZXR3b3JrIGludGVyZmFjZXMgc28gdGhleSBhcmUKLQkJCQkgIGNvbXBhdGlibGUgd2l0aCBsaWJwY2FwIGxpYnJhcmllcy4gIE1lYW5pbmcsIHRjcGR1bXAsIHNub3J0LAotCQkJCSAgZXRoZXJlYWwsIGFuZCBhbGwgb3RoZXIgcGFja2V0IHNuaWZmZXJzIGFuZCBkZWJ1Z2dlcnMgd29yayBvbgotCQkJCSAgYWxsIFdBTlBJUEUgbmV0d29yayBpbnRlcmZhY2VzLgotCQkJCQktIFNldCB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcgdHlwZSB0byBBUlBIUkRfUFBQLgotCQkJCQkgIFRoaXMgdGVsbCB0aGUgc25pZmZlcnMgdGhhdCBkYXRhIG9idGFpbmVkIGZyb20gdGhlCi0JCQkJCSAgbmV0d29yayBpbnRlcmZhY2UgaXMgaW4gcHVyZSBJUCBmb3JtYXQuCi0JCQkJICBGaXggZm9yIDIuMi5YIGtlcm5lbHMgb25seS4KLQkJCQkKLQkJCQlvIFRydWUgaW50ZXJmYWNlIGVuY29kaW5nIG9wdGlvbiBmb3IgRnJhbWUgUmVsYXkgYW5kIENIRExDCi0JCQkJCS0gVGhlIGFib3ZlIGZpeCBzZXRzIHRoZSBuZXR3b3JrIGludGVyZmFjZSBlbmNvZGluZwotCQkJCQkgIHR5cGUgdG8gQVJQSFJEX1BQUCwgaG93ZXZlciBzb21lIGN1c3RvbWVycyB1c2UKLQkJCQkJICB0aGUgZW5jb2RpbmcgaW50ZXJmYWNlIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZQotCQkJCQkgIHByb3RvY29sIHJ1bm5pbmcuICBUaGVyZWZvcmUsIHRoZSBUVVJFIEVOQ09ESU5HCi0JCQkJCSAgb3B0aW9uIHdpbGwgc2V0IHRoZSBpbnRlcmZhY2UgdHlwZSBiYWNrIHRvIHRoZQotCQkJCQkgIG9yaWdpbmFsIHZhbHVlLiAgCi0KLQkJCQkJICBOT1RFOiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggRnJhbWUgUmVsYXkgYW5kIENIRExDCi0JCQkJCQlsaWJwY2FwIGxpYnJhcnkgc3VwcG9ydCB3aWxsIGJlIGJyb2tlbi4gIAotCQkJCQkJaS5lLiB0Y3BkdW1wIHdpbGwgbm90IHdvcmsuCi0JCQkJCUZpeCBmb3IgMi4yLnggS2VybmVscyBvbmx5LgotCQkJCQkJCi0JCQkJbyBFdGhlcm5ldCBCcmlkZ2luZCBvdmVyIEZyYW1lIFJlbGF5Ci0JCQkJCS0gVGhlIEZyYW1lIFJlbGF5IGJyaWRnaW5nIGhhcyBiZWVuIGRldmVsb3BlZCBieSAKLQkJCQkJICBLcmlzdGlhbiBIb2ZmbWFubiBhbmQgTWFyayBXZWxscy4gIAotCQkJCQktIFRoZSBMaW51eCBrZXJuZWwgYnJpZGdlIGlzIHVzZWQgdG8gc2VuZCBldGhlcm5ldCAKLQkJCQkJICBkYXRhIG92ZXIgdGhlIGZyYW1lIHJlbGF5IGxpbmtzLgotCQkJCQlGb3IgMi4yLlggS2VybmVscyBvbmx5LgotCi0JCQkJbyBBZGRlZCBleHRlbnNpdmUgMi4wLlggc3VwcG9ydC4gTW9zdCBuZXcgZmVhdHVyZXMgb2YKLQkJCQkgIDIuMS41IGZvciBwcm90b2NvbHMgRnJhbWUgUmVsYXksIFBQUCBhbmQgQ0hETEMgYXJlCi0JCQkJICBzdXBwb3J0ZWQgdW5kZXIgMi4wLlgga2VybmVscy4gCi0KLWJldGExLTIuMi4wIAlEZWMgMzAgMjAwMAotCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciAyLjQuWCBrZXJuZWxzLgotCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciBTTVAgc3VwcG9ydC4KLQkJCQlvIFgyNUFQSSBpcyBub3cgYWJsZSB0byBzaGFyZSBQQ0kgaW50ZXJydXB0cy4KLQkJCQlvIFRvb2sgb3V0IGEgZ2VuZXJhbCBwb2xsaW5nIHJvdXRpbmUgdGhhdCB3YXMgdXNlZAotCQkJCSAgb25seSBieSBYMjVBUEkuIAotCQkJCW8gQWRkZWQgYXBwcm9wcmlhdGUgbG9ja3MgdG8gdGhlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uCi0JCQkJICBjb2RlLgotCQkJCW8gRml4ZWQgYSBidWcgaW4gdGhlIGtleWJvYXJkIGRlYnVnIG1vbml0b3IuCi0KLWJldGEyLTIuMi4wCUphbiA4IDIwMDEKLQkJCQlvIFBhdGNoZXMgZm9yIDIuNC4wIGtlcm5lbAotCQkJCW8gUGF0Y2hlcyBmb3IgMi4yLjE4IGtlcm5lbAotCQkJCW8gTWlub3IgdXBkYXRlcyB0byBQUFAgYW5kIENITERDIGRyaXZlcnMuCi0JCQkJICBOb3RlOiBObyBmdW5jdGlvbmFsIGRpZmZlcmVuY2UuCi0KLWJldGEzLTIuMi45CUphbiAxMCAyMDAxCi0JCQkJbyBJIG1pc3NlZCB0aGUgMi4yLjE4IGtlcm5lbCBwYXRjaGVzIGluIGJldGEyLTIuMi4wCi0JCQkJICByZWxlYXNlLiAgVGhleSBhcmUgaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgotCi1TdGFibGUgUmVsZWFzZQotMi4yLjAJCUZlYiAwMSAyMDAxCi0JCQkJbyBCdWcgZml4IGluIHdhbmNmZyBHVUkgY29uZmlndXJhdG9yLgotCQkJCQlUaGUgZWRpdCBmdW5jdGlvbiBkaWRuJ3Qgd29yayBwcm9wZXJseS4KLQotCi1iYXRhMS0yLjIuMQlGZWIgMDkgMjAwMQotCQkJbyBXQU5QSVBFIFRUWSBEcml2ZXIgZW11bGF0aW9uLiAKLQkJCSAgVHdvIG1vZGVzIG9mIG9wZXJhdGlvbiBTeW5jIGFuZCBBc3luYy4KLQkJCQlTeW5jOiBVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBTeW5jUFBQIGxheWVyCi0JCQkJICAgICAgYW5kIHRoZSBXYW5waXBlIHN5bmMgVFRZIGRyaXZlcjogYSBQUFAgcHJvdG9jb2wgCi0JCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciwgb3ZlcgotCQkJCSAgICAgIGEgVDEgbGVhc2VkIGxpbmUuCi0JCQkKLQkJCQkgICAgICBUaGUgMi40LjAga2VybmVsIFBQUCBsYXllciBzdXBwb3J0cyBNVUxUSUxJTksKLQkJCQkgICAgICBwcm90b2NvbCwgdGhhdCBjYW4gYmUgdXNlZCB0byBidW5kbGUgYW55IG51bWJlciBvZiBTYW5nb21hCi0JCQkJICAgICAgYWRhcHRlcnMgKFQxIGxpbmVzKSBpbnRvIG9uZSwgdW5kZXIgYSBzaW5nbGUgSVAgYWRkcmVzcy4KLQkJCQkgICAgICBUaHVzLCBlZmZpY2llbnRseSBvYnRhaW5pbmcgbXVsdGlwbGUgVDEgdGhyb3VnaHB1dC4gCi0KLQkJCQkgICAgICBOT1RFOiBUaGUgcmVtb3RlIHNpZGUgbXVzdCBhbHNvIGltcGxlbWVudCBNVUxUSUxJTksgUFBQCi0JCQkJCSAgICBwcm90b2NvbC4KLQotCQkJCUFzeW5jOlVzaW5nIHRoZSBQUFBEIGRhZW1vbiwga2VybmVsIEFzeW5jUFBQIGxheWVyCi0JCQkJICAgICAgYW5kIHRoZSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sCi0JCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciBhbmQKLQkJCQkgICAgICBhIG1vZGVtLCBvdmVyIGEgdGVsZXBob25lIGxpbmUuCi0KLQkJCQkgICAgICBUaHVzLCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyIHNpbXVsYXRlcyBhIHNlcmlhbAotCQkJCSAgICAgIFRUWSBkcml2ZXIgdGhhdCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIGludGVyZmFjZSB0aGUgCi0JCQkJICAgICAgTU9ERU0gdG8gdGhlIGxpbnV4IGtlcm5lbC4KLQkJCQkKLQkJCW8gV0FOUElQRSBQUFAgQmFja3VwIFV0aWxpdHkKLQkJCQlUaGlzIHV0aWxpdHkgd2lsbCBtb25pdG9yIHRoZSBzdGF0ZSBvZiB0aGUgUFBQIFQxIGxpbmUuCi0JCQkJSW4gY2FzZSBvZiBmYWlsdXJlLCBhIGRpYWwgdXAgY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkCi0JCQkJdmlhIHBwcGQgZGFlbW9uLCBldGhlciB2aWEgYSBzZXJpYWwgdHR5IGRyaXZlciAoc2VyaWFsIHBvcnQpLCAKLQkJCQlvciBhIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciAoaW4gY2FzZSBzZXJpYWwgcG9ydCBpcyB1bmF2YWlsYWJsZSkuCi0JCQkJCi0JCQkJRnVydGhlcm1vcmUsIHdoaWxlIGluIGRpYWwgdXAgbW9kZSwgdGhlIHByaW1hcnkgUFBQIFQxIGxpbmsKLQkJCQl3aWxsIGJlIG1vbml0b3JlZCBmb3Igc2lnbnMgb2YgbGlmZS4gIAotCi0JCQkJSWYgdGhlIFBQUCBUMSBsaW5rIGNvbWVzIGJhY2sgdG8gbGlmZSwgdGhlIGRpYWwgdXAgY29ubmVjdGlvbgotCQkJCXdpbGwgYmUgc2h1dGRvd24gYW5kIFQxIGxpbmUgcmUtZXN0YWJsaXNoZWQuCi0JCQkKLQotCQkJbyBOZXcgU2V0dXAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KLQkJCQlPcHRpb24gdG8gVVBHUkFERSBkZXZpY2UgZHJpdmVycyBpZiB0aGUga2VybmVsIHNvdXJjZSBoYXMKLQkJCQlhbHJlYWR5IGJlZW4gcGF0Y2hlZCB3aXRoIFdBTlBJUEUuCi0KLQkJCQlPcHRpb24gdG8gQ09NUElMRSBXQU5QSVBFIG1vZHVsZXMgYWdhaW5zdCB0aGUgY3VycmVudGx5IAotCQkJCXJ1bm5pbmcga2VybmVsLCB0aHVzIG5vIG5lZWQgZm9yIG1hbnVhbCBrZXJuZWwgYW5kIG1vZHVsZQotCQkJCXJlLWNvbXBpbGF0aW9uLgotCQkJCi0JCQlvIFVwZGF0ZXMgYW5kIEJ1ZyBGaXhlcyB0byB3YW5jZmcgdXRpbGl0eS4KLQotYmF0YTItMi4yLjEJRmViIDIwIDIwMDEKLQotCQkJbyBCdWcgZml4ZXMgdG8gdGhlIENIRExDIGRldmljZSBkcml2ZXJzLgotCQkJCVRoZSBkcml2ZXIgaGFkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHVuZGVyIGtlcm5lbHMKLQkJCQkyLjIuMTQgb3IgbG93ZXIuCi0KLQkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgotCQkJCVRoZSBkZXZpY2UgZHJpdmVycyBjb21waWxhdGlvbiBvcHRpb25zIGRpZG4ndCB3b3JrCi0JCQkJcHJvcGVybHkuCi0KLQkJCW8gVXBkYXRlIHRvIHRoZSB3cGJhY2t1cGQgZGFlbW9uLiAgCi0JCQkJT3B0aW1pemVkIHRoZSBjcm9zcy1vdmVyIHRpbWVzLCBiZXR3ZWVuIHRoZSBwcmltYXJ5Ci0JCQkJbGluayBhbmQgdGhlIGJhY2t1cCBkaWFsdXAuCi0KLWJldGEzLTIuMi4xCU1hciAwMiAyMDAxCi0JCQlvIFBhdGNoZXMgZm9yIDIuNC4yIGtlcm5lbC4KLQotCQkJbyBCdWcgZml4ZXMgdG8gdXRpbC8gbWFrZSBmaWxlcy4KLQkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgotCi0JCQlvIFRvb2sgb3V0IHRoZSBiYWNrdXBkIHN1cHBvcnQgYW5kIG1hZGUgaXQgaW50bwotCQkJICBhcyBzZXBhcmF0ZSBwYWNrYWdlLgotCQkJICAKLWJldGE0LTIuMi4xICAgICBNYXIgMTIgMjAwMQotCi0JCW8gRml4IHRvIHRoZSBGcmFtZSBSZWxheSBEZXZpY2UgZHJpdmVyLgotCQkJSVBTQUMgc2VuZHMgYSBwYWNrZXQgb2YgemVybyBsZW5ndGgKLQkJCWhlYWRlciB0byB0aGUgZnJhbWUgcmVsYXkgZHJpdmVyLiAgVGhlCi0JCQlkcml2ZXIgdHJpZXMgdG8gcHVzaCBpdHMgb3duIDIgYnl0ZSBoZWFkZXIKLQkJCWludG8gdGhlIHBhY2tldCwgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8KLQkJCWNyYXNoLgotCi0JCW8gRml4IHRoZSBXQU5QSVBFIHJlLWNvbmZpZ3VyYXRpb24gY29kZS4KLQkJCUJ1ZyB3YXMgZm91bmQgYnkgdHJ5aW5nIHRvIHJ1biAgdGhlIGNmZ2Z0MSB3aGlsZSB0aGUKLQkJCWludGVyZmFjZSB3YXMgYWxyZWFkeSBydW5uaW5nLiAgCi0KLQkJbyBVcGRhdGVzIHRvIGNmZ2Z0MS4KLQkJCVdyaXRlcyBhIHdhbnBpcGUjLmNmZ2Z0MSBjb25maWd1cmF0aW9uIGZpbGUKLQkJCW9uY2UgdGhlIENTVS9EU1UgaXMgY29uZmlndXJlZC4gVGhpcyBmaWxlIGNhbgotCQkJaG9sZHMgdGhlIGN1cnJlbnQgQ1NVL0RTVSBjb25maWd1cmF0aW9uLgotCi0KLQotPj4+Pj4+IEVORCBPRiBSRUFETUUgPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Ci0KLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ubWlfd2F0Y2hkb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9ubWlfd2F0Y2hkb2cudHh0CmluZGV4IGMwMjVhNDUuLjc1N2M3MjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbm1pX3dhdGNoZG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQKQEAgLTIzLDggKzIzLDcgQEAKIG1heSBpbXBsaWNpdGx5IGRpc2FibGUgdGhlIE5NSSB3YXRjaGRvZy5dCiAKIEZvciB4ODYtNjQsIHRoZSBuZWVkZWQgQVBJQyBpcyBhbHdheXMgY29tcGlsZWQgaW4sIGFuZCB0aGUgTk1JIHdhdGNoZG9nIGlzCi1hbHdheXMgZW5hYmxlZCB3aXRoIEkvTy1BUElDIG1vZGUgKG5taV93YXRjaGRvZz0xKS4gQ3VycmVudGx5LCBsb2NhbCBBUElDCi1tb2RlIChubWlfd2F0Y2hkb2c9MikgZG9lcyBub3Qgd29yayBvbiB4ODYtNjQuCithbHdheXMgZW5hYmxlZCB3aXRoIEkvTy1BUElDIG1vZGUgKG5taV93YXRjaGRvZz0xKS4KIAogVXNpbmcgbG9jYWwgQVBJQyAobm1pX3dhdGNoZG9nPTIpIG5lZWRzIHRoZSBmaXJzdCBwZXJmb3JtYW5jZSByZWdpc3Rlciwgc28KIHlvdSBjYW4ndCB1c2UgaXQgZm9yIG90aGVyIHB1cnBvc2VzIChzdWNoIGFzIGhpZ2ggcHJlY2lzaW9uIHBlcmZvcm1hbmNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjaS50eHQgYi9Eb2N1bWVudGF0aW9uL3BjaS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYjIwYzYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9wY2kudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNjQ0ICswLDAgQEAKLQotCQkJSG93IFRvIFdyaXRlIExpbnV4IFBDSSBEcml2ZXJzCi0KLQkJYnkgTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+IG9uIDA3LUZlYi0yMDAwCi0JdXBkYXRlZCBieSBHcmFudCBHcnVuZGxlciA8Z3J1bmRsZXJAcGFyaXNjLWxpbnV4Lm9yZz4gb24gMjMtRGVjLTIwMDYKLQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVRoZSB3b3JsZCBvZiBQQ0kgaXMgdmFzdCBhbmQgZnVsbCBvZiAobW9zdGx5IHVucGxlYXNhbnQpIHN1cnByaXNlcy4KLVNpbmNlIGVhY2ggQ1BVIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRzIGRpZmZlcmVudCBjaGlwLXNldHMgYW5kIFBDSSBkZXZpY2VzCi1oYXZlIGRpZmZlcmVudCByZXF1aXJlbWVudHMgKGVybSwgImZlYXR1cmVzIiksIHRoZSByZXN1bHQgaXMgdGhlIFBDSSBzdXBwb3J0Ci1pbiB0aGUgTGludXgga2VybmVsIGlzIG5vdCBhcyB0cml2aWFsIGFzIG9uZSB3b3VsZCB3aXNoLiBUaGlzIHNob3J0IHBhcGVyCi10cmllcyB0byBpbnRyb2R1Y2UgYWxsIHBvdGVudGlhbCBkcml2ZXIgYXV0aG9ycyB0byBMaW51eCBBUElzIGZvcgotUENJIGRldmljZSBkcml2ZXJzLgotCi1BIG1vcmUgY29tcGxldGUgcmVzb3VyY2UgaXMgdGhlIHRoaXJkIGVkaXRpb24gb2YgIkxpbnV4IERldmljZSBEcml2ZXJzIgotYnkgSm9uYXRoYW4gQ29yYmV0LCBBbGVzc2FuZHJvIFJ1YmluaSwgYW5kIEdyZWcgS3JvYWgtSGFydG1hbi4KLUxERDMgaXMgYXZhaWxhYmxlIGZvciBmcmVlICh1bmRlciBDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UpIGZyb206Ci0KLQlodHRwOi8vbHduLm5ldC9LZXJuZWwvTEREMy8KLQotSG93ZXZlciwga2VlcCBpbiBtaW5kIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgc3ViamVjdCB0byAiYml0IHJvdCIuCi1SZWZlciB0byB0aGUgc291cmNlIGNvZGUgaWYgdGhpbmdzIGFyZSBub3Qgd29ya2luZyBhcyBkZXNjcmliZWQgaGVyZS4KLQotUGxlYXNlIHNlbmQgcXVlc3Rpb25zL2NvbW1lbnRzL3BhdGNoZXMgYWJvdXQgTGludXggUENJIEFQSSB0byB0aGUKLSJMaW51eCBQQ0kiIDxsaW51eC1wY2lAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PiBtYWlsaW5nIGxpc3QuCi0KLQotCi0wLiBTdHJ1Y3R1cmUgb2YgUENJIGRyaXZlcnMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotUENJIGRyaXZlcnMgImRpc2NvdmVyIiBQQ0kgZGV2aWNlcyBpbiBhIHN5c3RlbSB2aWEgcGNpX3JlZ2lzdGVyX2RyaXZlcigpLgotQWN0dWFsbHksIGl0J3MgdGhlIG90aGVyIHdheSBhcm91bmQuIFdoZW4gdGhlIFBDSSBnZW5lcmljIGNvZGUgZGlzY292ZXJzCi1hIG5ldyBkZXZpY2UsIHRoZSBkcml2ZXIgd2l0aCBhIG1hdGNoaW5nICJkZXNjcmlwdGlvbiIgd2lsbCBiZSBub3RpZmllZC4KLURldGFpbHMgb24gdGhpcyBiZWxvdy4KLQotcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGxlYXZlcyBtb3N0IG9mIHRoZSBwcm9iaW5nIGZvciBkZXZpY2VzIHRvCi10aGUgUENJIGxheWVyIGFuZCBzdXBwb3J0cyBvbmxpbmUgaW5zZXJ0aW9uL3JlbW92YWwgb2YgZGV2aWNlcyBbdGh1cwotc3VwcG9ydGluZyBob3QtcGx1Z2dhYmxlIFBDSSwgQ2FyZEJ1cywgYW5kIEV4cHJlc3MtQ2FyZCBpbiBhIHNpbmdsZSBkcml2ZXJdLgotcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGNhbGwgcmVxdWlyZXMgcGFzc2luZyBpbiBhIHRhYmxlIG9mIGZ1bmN0aW9uCi1wb2ludGVycyBhbmQgdGh1cyBkaWN0YXRlcyB0aGUgaGlnaCBsZXZlbCBzdHJ1Y3R1cmUgb2YgYSBkcml2ZXIuCi0KLU9uY2UgdGhlIGRyaXZlciBrbm93cyBhYm91dCBhIFBDSSBkZXZpY2UgYW5kIHRha2VzIG93bmVyc2hpcCwgdGhlCi1kcml2ZXIgZ2VuZXJhbGx5IG5lZWRzIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbjoKLQotCUVuYWJsZSB0aGUgZGV2aWNlCi0JUmVxdWVzdCBNTUlPL0lPUCByZXNvdXJjZXMKLQlTZXQgdGhlIERNQSBtYXNrIHNpemUgKGZvciBib3RoIGNvaGVyZW50IGFuZCBzdHJlYW1pbmcgRE1BKQotCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHNoYXJlZCBjb250cm9sIGRhdGEgKHBjaV9hbGxvY2F0ZV9jb2hlcmVudCgpKQotCUFjY2VzcyBkZXZpY2UgY29uZmlndXJhdGlvbiBzcGFjZSAoaWYgbmVlZGVkKQotCVJlZ2lzdGVyIElSUSBoYW5kbGVyIChyZXF1ZXN0X2lycSgpKQotCUluaXRpYWxpemUgbm9uLVBDSSAoaS5lLiBMQU4vU0NTSS9ldGMgcGFydHMgb2YgdGhlIGNoaXApCi0JRW5hYmxlIERNQS9wcm9jZXNzaW5nIGVuZ2luZXMKLQotV2hlbiBkb25lIHVzaW5nIHRoZSBkZXZpY2UsIGFuZCBwZXJoYXBzIHRoZSBtb2R1bGUgbmVlZHMgdG8gYmUgdW5sb2FkZWQsCi10aGUgZHJpdmVyIG5lZWRzIHRvIHRha2UgdGhlIGZvbGxvdyBzdGVwczoKLQlEaXNhYmxlIHRoZSBkZXZpY2UgZnJvbSBnZW5lcmF0aW5nIElSUXMKLQlSZWxlYXNlIHRoZSBJUlEgKGZyZWVfaXJxKCkpCi0JU3RvcCBhbGwgRE1BIGFjdGl2aXR5Ci0JUmVsZWFzZSBETUEgYnVmZmVycyAoYm90aCBzdHJlYW1pbmcgYW5kIGNvaGVyZW50KQotCVVucmVnaXN0ZXIgZnJvbSBvdGhlciBzdWJzeXN0ZW1zIChlLmcuIHNjc2kgb3IgbmV0ZGV2KQotCVJlbGVhc2UgTU1JTy9JT1AgcmVzb3VyY2VzCi0JRGlzYWJsZSB0aGUgZGV2aWNlCi0KLU1vc3Qgb2YgdGhlc2UgdG9waWNzIGFyZSBjb3ZlcmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCi1Gb3IgdGhlIHJlc3QgbG9vayBhdCBMREQzIG9yIDxsaW51eC9wY2kuaD4gLgotCi1JZiB0aGUgUENJIHN1YnN5c3RlbSBpcyBub3QgY29uZmlndXJlZCAoQ09ORklHX1BDSSBpcyBub3Qgc2V0KSwgbW9zdCBvZgotdGhlIFBDSSBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93IGFyZSBkZWZpbmVkIGFzIGlubGluZSBmdW5jdGlvbnMgZWl0aGVyCi1jb21wbGV0ZWx5IGVtcHR5IG9yIGp1c3QgcmV0dXJuaW5nIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzIHRvIGF2b2lkCi1sb3RzIG9mIGlmZGVmcyBpbiB0aGUgZHJpdmVycy4KLQotCi0KLTEuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoKSBjYWxsCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1QQ0kgZGV2aWNlIGRyaXZlcnMgY2FsbCBwY2lfcmVnaXN0ZXJfZHJpdmVyKCkgZHVyaW5nIHRoZWlyCi1pbml0aWFsaXphdGlvbiB3aXRoIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIKLShzdHJ1Y3QgcGNpX2RyaXZlcik6Ci0KLQlmaWVsZCBuYW1lCURlc2NyaXB0aW9uCi0JLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlpZF90YWJsZQlQb2ludGVyIHRvIHRhYmxlIG9mIGRldmljZSBJRCdzIHRoZSBkcml2ZXIgaXMKLQkJCWludGVyZXN0ZWQgaW4uICBNb3N0IGRyaXZlcnMgc2hvdWxkIGV4cG9ydCB0aGlzCi0JCQl0YWJsZSB1c2luZyBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwuLi4pLgotCi0JcHJvYmUJCVRoaXMgcHJvYmluZyBmdW5jdGlvbiBnZXRzIGNhbGxlZCAoZHVyaW5nIGV4ZWN1dGlvbgotCQkJb2YgcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGZvciBhbHJlYWR5IGV4aXN0aW5nCi0JCQlkZXZpY2VzIG9yIGxhdGVyIGlmIGEgbmV3IGRldmljZSBnZXRzIGluc2VydGVkKSBmb3IKLQkJCWFsbCBQQ0kgZGV2aWNlcyB3aGljaCBtYXRjaCB0aGUgSUQgdGFibGUgYW5kIGFyZSBub3QKLQkJCSJvd25lZCIgYnkgdGhlIG90aGVyIGRyaXZlcnMgeWV0LiBUaGlzIGZ1bmN0aW9uIGdldHMKLQkJCXBhc3NlZCBhICJzdHJ1Y3QgcGNpX2RldiAqIiBmb3IgZWFjaCBkZXZpY2Ugd2hvc2UKLQkJCWVudHJ5IGluIHRoZSBJRCB0YWJsZSBtYXRjaGVzIHRoZSBkZXZpY2UuIFRoZSBwcm9iZQotCQkJZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4gdGhlIGRyaXZlciBjaG9vc2VzIHRvCi0JCQl0YWtlICJvd25lcnNoaXAiIG9mIHRoZSBkZXZpY2Ugb3IgYW4gZXJyb3IgY29kZQotCQkJKG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLgotCQkJVGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3MKLQkJCWNvbnRleHQsIHNvIGl0IGNhbiBzbGVlcC4KLQotCXJlbW92ZQkJVGhlIHJlbW92ZSgpIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgZGV2aWNlCi0JCQliZWluZyBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyIGlzIHJlbW92ZWQgKGVpdGhlciBkdXJpbmcKLQkJCWRlcmVnaXN0cmF0aW9uIG9mIHRoZSBkcml2ZXIgb3Igd2hlbiBpdCdzIG1hbnVhbGx5Ci0JCQlwdWxsZWQgb3V0IG9mIGEgaG90LXBsdWdnYWJsZSBzbG90KS4KLQkJCVRoZSByZW1vdmUgZnVuY3Rpb24gYWx3YXlzIGdldHMgY2FsbGVkIGZyb20gcHJvY2VzcwotCQkJY29udGV4dCwgc28gaXQgY2FuIHNsZWVwLgotCi0Jc3VzcGVuZAkJUHV0IGRldmljZSBpbnRvIGxvdyBwb3dlciBzdGF0ZS4KLQlzdXNwZW5kX2xhdGUJUHV0IGRldmljZSBpbnRvIGxvdyBwb3dlciBzdGF0ZS4KLQotCXJlc3VtZV9lYXJseQlXYWtlIGRldmljZSBmcm9tIGxvdyBwb3dlciBzdGF0ZS4KLQlyZXN1bWUJCVdha2UgZGV2aWNlIGZyb20gbG93IHBvd2VyIHN0YXRlLgotCi0JCShQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vcG93ZXIvcGNpLnR4dCBmb3IgZGVzY3JpcHRpb25zCi0JCW9mIFBDSSBQb3dlciBNYW5hZ2VtZW50IGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMuKQotCi0Jc2h1dGRvd24JSG9vayBpbnRvIHJlYm9vdF9ub3RpZmllcl9saXN0IChrZXJuZWwvc3lzLmMpLgotCQkJSW50ZW5kZWQgdG8gc3RvcCBhbnkgaWRsaW5nIERNQSBvcGVyYXRpb25zLgotCQkJVXNlZnVsIGZvciBlbmFibGluZyB3YWtlLW9uLWxhbiAoTklDKSBvciBjaGFuZ2luZwotCQkJdGhlIHBvd2VyIHN0YXRlIG9mIGEgZGV2aWNlIGJlZm9yZSByZWJvb3QuCi0JCQllLmcuIGRyaXZlcnMvbmV0L2UxMDAuYy4KLQotCWVycl9oYW5kbGVyCVNlZSBEb2N1bWVudGF0aW9uL3BjaS1lcnJvci1yZWNvdmVyeS50eHQKLQotCi1UaGUgSUQgdGFibGUgaXMgYW4gYXJyYXkgb2Ygc3RydWN0IHBjaV9kZXZpY2VfaWQgZW50cmllcyBlbmRpbmcgd2l0aCBhbgotYWxsLXplcm8gZW50cnkuICBFYWNoIGVudHJ5IGNvbnNpc3RzIG9mOgotCi0JdmVuZG9yLGRldmljZQlWZW5kb3IgYW5kIGRldmljZSBJRCB0byBtYXRjaCAob3IgUENJX0FOWV9JRCkKLQotCXN1YnZlbmRvciwJU3Vic3lzdGVtIHZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQotCXN1YmRldmljZSwKLQotCWNsYXNzCQlEZXZpY2UgY2xhc3MsIHN1YmNsYXNzLCBhbmQgImludGVyZmFjZSIgdG8gbWF0Y2guCi0JCQlTZWUgQXBwZW5kaXggRCBvZiB0aGUgUENJIExvY2FsIEJ1cyBTcGVjIG9yCi0JCQlpbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBmb3IgYSBmdWxsIGxpc3Qgb2YgY2xhc3Nlcy4KLQkJCU1vc3QgZHJpdmVycyBkbyBub3QgbmVlZCB0byBzcGVjaWZ5IGNsYXNzL2NsYXNzX21hc2sKLQkJCWFzIHZlbmRvci9kZXZpY2UgaXMgbm9ybWFsbHkgc3VmZmljaWVudC4KLQotCWNsYXNzX21hc2sJbGltaXQgd2hpY2ggc3ViLWZpZWxkcyBvZiB0aGUgY2xhc3MgZmllbGQgYXJlIGNvbXBhcmVkLgotCQkJU2VlIGRyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi8gZm9yIGV4YW1wbGUgb2YgdXNhZ2UuCi0KLQlkcml2ZXJfZGF0YQlEYXRhIHByaXZhdGUgdG8gdGhlIGRyaXZlci4KLQkJCU1vc3QgZHJpdmVycyBkb24ndCBuZWVkIHRvIHVzZSBkcml2ZXJfZGF0YSBmaWVsZC4KLQkJCUJlc3QgcHJhY3RpY2UgaXMgdG8gdXNlIGRyaXZlcl9kYXRhIGFzIGFuIGluZGV4Ci0JCQlpbnRvIGEgc3RhdGljIGxpc3Qgb2YgZXF1aXZhbGVudCBkZXZpY2UgdHlwZXMsCi0JCQlpbnN0ZWFkIG9mIHVzaW5nIGl0IGFzIGEgcG9pbnRlci4KLQotCi1Nb3N0IGRyaXZlcnMgb25seSBuZWVkIFBDSV9ERVZJQ0UoKSBvciBQQ0lfREVWSUNFX0NMQVNTKCkgdG8gc2V0IHVwCi1hIHBjaV9kZXZpY2VfaWQgdGFibGUuCi0KLU5ldyBQQ0kgSURzIG1heSBiZSBhZGRlZCB0byBhIGRldmljZSBkcml2ZXIgcGNpX2lkcyB0YWJsZSBhdCBydW50aW1lCi1hcyBzaG93biBiZWxvdzoKLQotZWNobyAidmVuZG9yIGRldmljZSBzdWJ2ZW5kb3Igc3ViZGV2aWNlIGNsYXNzIGNsYXNzX21hc2sgZHJpdmVyX2RhdGEiID4gXAotL3N5cy9idXMvcGNpL2RyaXZlcnMve2RyaXZlcn0vbmV3X2lkCi0KLUFsbCBmaWVsZHMgYXJlIHBhc3NlZCBpbiBhcyBoZXhhZGVjaW1hbCB2YWx1ZXMgKG5vIGxlYWRpbmcgMHgpLgotVGhlIHZlbmRvciBhbmQgZGV2aWNlIGZpZWxkcyBhcmUgbWFuZGF0b3J5LCB0aGUgb3RoZXJzIGFyZSBvcHRpb25hbC4gVXNlcnMKLW5lZWQgcGFzcyBvbmx5IGFzIG1hbnkgb3B0aW9uYWwgZmllbGRzIGFzIG5lY2Vzc2FyeToKLQlvIHN1YnZlbmRvciBhbmQgc3ViZGV2aWNlIGZpZWxkcyBkZWZhdWx0IHRvIFBDSV9BTllfSUQgKEZGRkZGRkZGKQotCW8gY2xhc3MgYW5kIGNsYXNzbWFzayBmaWVsZHMgZGVmYXVsdCB0byAwCi0JbyBkcml2ZXJfZGF0YSBkZWZhdWx0cyB0byAwVUwuCi0KLU9uY2UgYWRkZWQsIHRoZSBkcml2ZXIgcHJvYmUgcm91dGluZSB3aWxsIGJlIGludm9rZWQgZm9yIGFueSB1bmNsYWltZWQKLVBDSSBkZXZpY2VzIGxpc3RlZCBpbiBpdHMgKG5ld2x5IHVwZGF0ZWQpIHBjaV9pZHMgbGlzdC4KLQotV2hlbiB0aGUgZHJpdmVyIGV4aXRzLCBpdCBqdXN0IGNhbGxzIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigpIGFuZCB0aGUgUENJIGxheWVyCi1hdXRvbWF0aWNhbGx5IGNhbGxzIHRoZSByZW1vdmUgaG9vayBmb3IgYWxsIGRldmljZXMgaGFuZGxlZCBieSB0aGUgZHJpdmVyLgotCi0KLTEuMSAiQXR0cmlidXRlcyIgZm9yIGRyaXZlciBmdW5jdGlvbnMvZGF0YQotCi1QbGVhc2UgbWFyayB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZnVuY3Rpb25zIHdoZXJlIGFwcHJvcHJpYXRlCi0odGhlIGNvcnJlc3BvbmRpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIGluIDxsaW51eC9pbml0Lmg+KToKLQotCV9faW5pdAkJSW5pdGlhbGl6YXRpb24gY29kZS4gVGhyb3duIGF3YXkgYWZ0ZXIgdGhlIGRyaXZlcgotCQkJaW5pdGlhbGl6ZXMuCi0JX19leGl0CQlFeGl0IGNvZGUuIElnbm9yZWQgZm9yIG5vbi1tb2R1bGFyIGRyaXZlcnMuCi0KLQotCV9fZGV2aW5pdAlEZXZpY2UgaW5pdGlhbGl6YXRpb24gY29kZS4KLQkJCUlkZW50aWNhbCB0byBfX2luaXQgaWYgdGhlIGtlcm5lbCBpcyBub3QgY29tcGlsZWQKLQkJCXdpdGggQ09ORklHX0hPVFBMVUcsIG5vcm1hbCBmdW5jdGlvbiBvdGhlcndpc2UuCi0JX19kZXZleGl0CVRoZSBzYW1lIGZvciBfX2V4aXQuCi0KLVRpcHMgb24gd2hlbi93aGVyZSB0byB1c2UgdGhlIGFib3ZlIGF0dHJpYnV0ZXM6Ci0JbyBUaGUgbW9kdWxlX2luaXQoKS9tb2R1bGVfZXhpdCgpIGZ1bmN0aW9ucyAoYW5kIGFsbAotCSAgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGNhbGxlZCBfb25seV8gZnJvbSB0aGVzZSkKLQkgIHNob3VsZCBiZSBtYXJrZWQgX19pbml0L19fZXhpdC4KLQotCW8gRG8gbm90IG1hcmsgdGhlIHN0cnVjdCBwY2lfZHJpdmVyLgotCi0JbyBUaGUgSUQgdGFibGUgYXJyYXkgc2hvdWxkIGJlIG1hcmtlZCBfX2RldmluaXRkYXRhLgotCi0JbyBUaGUgcHJvYmUoKSBhbmQgcmVtb3ZlKCkgZnVuY3Rpb25zIHNob3VsZCBiZSBtYXJrZWQgX19kZXZpbml0Ci0JICBhbmQgX19kZXZleGl0IHJlc3BlY3RpdmVseS4gIEFsbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKLQkgIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSB0aGUgcHJvYmUoKSByb3V0aW5lLCBjYW4gYmUgbWFya2VkIF9fZGV2aW5pdC4KLQkgIERpdHRvIGZvciByZW1vdmUoKSBhbmQgX19kZXZleGl0LgotCi0JbyBJZiBteWRyaXZlcl9yZW1vdmUoKSBpcyBtYXJrZWQgd2l0aCBfX2RldmV4aXQoKSwgdGhlbiBhbGwgYWRkcmVzcwotCSAgcmVmZXJlbmNlcyB0byBteWRyaXZlcl9yZW1vdmUgbXVzdCB1c2UgX19kZXZleGl0X3AobXlkcml2ZXJfcmVtb3ZlKQotCSAgKGluIHRoZSBzdHJ1Y3QgcGNpX2RyaXZlciBkZWNsYXJhdGlvbiBmb3IgZXhhbXBsZSkuCi0JICBfX2RldmV4aXRfcCgpIHdpbGwgZ2VuZXJhdGUgdGhlIGZ1bmN0aW9uIG5hbWUgX29yXyBOVUxMIGlmIHRoZQotCSAgZnVuY3Rpb24gd2lsbCBiZSBkaXNjYXJkZWQuICBGb3IgYW4gZXhhbXBsZSwgc2VlIGRyaXZlcnMvbmV0L3RnMy5jLgotCi0JbyBEbyBOT1QgbWFyayBhIGZ1bmN0aW9uIGlmIHlvdSBhcmUgbm90IHN1cmUgd2hpY2ggbWFyayB0byB1c2UuCi0JICBCZXR0ZXIgdG8gbm90IG1hcmsgdGhlIGZ1bmN0aW9uIHRoYW4gbWFyayB0aGUgZnVuY3Rpb24gd3JvbmcuCi0KLQotCi0yLiBIb3cgdG8gZmluZCBQQ0kgZGV2aWNlcyBtYW51YWxseQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotUENJIGRyaXZlcnMgc2hvdWxkIGhhdmUgYSByZWFsbHkgZ29vZCByZWFzb24gZm9yIG5vdCB1c2luZyB0aGUKLXBjaV9yZWdpc3Rlcl9kcml2ZXIoKSBpbnRlcmZhY2UgdG8gc2VhcmNoIGZvciBQQ0kgZGV2aWNlcy4KLVRoZSBtYWluIHJlYXNvbiBQQ0kgZGV2aWNlcyBhcmUgY29udHJvbGxlZCBieSBtdWx0aXBsZSBkcml2ZXJzCi1pcyBiZWNhdXNlIG9uZSBQQ0kgZGV2aWNlIGltcGxlbWVudHMgc2V2ZXJhbCBkaWZmZXJlbnQgSFcgc2VydmljZXMuCi1FLmcuIGNvbWJpbmVkIHNlcmlhbC9wYXJhbGxlbCBwb3J0L2Zsb3BweSBjb250cm9sbGVyLgotCi1BIG1hbnVhbCBzZWFyY2ggbWF5IGJlIHBlcmZvcm1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdHM6Ci0KLVNlYXJjaGluZyBieSB2ZW5kb3IgYW5kIGRldmljZSBJRDoKLQotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCXdoaWxlIChkZXYgPSBwY2lfZ2V0X2RldmljZShWRU5ET1JfSUQsIERFVklDRV9JRCwgZGV2KSkKLQkJY29uZmlndXJlX2RldmljZShkZXYpOwotCi1TZWFyY2hpbmcgYnkgY2xhc3MgSUQgKGl0ZXJhdGUgaW4gYSBzaW1pbGFyIHdheSk6Ci0KLQlwY2lfZ2V0X2NsYXNzKENMQVNTX0lELCBkZXYpCi0KLVNlYXJjaGluZyBieSBib3RoIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEOgotCi0JcGNpX2dldF9zdWJzeXMoVkVORE9SX0lELERFVklDRV9JRCwgU1VCU1lTX1ZFTkRPUl9JRCwgU1VCU1lTX0RFVklDRV9JRCwgZGV2KS4KLQotWW91IGNhbiB1c2UgdGhlIGNvbnN0YW50IFBDSV9BTllfSUQgYXMgYSB3aWxkY2FyZCByZXBsYWNlbWVudCBmb3IKLVZFTkRPUl9JRCBvciBERVZJQ0VfSUQuICBUaGlzIGFsbG93cyBzZWFyY2hpbmcgZm9yIGFueSBkZXZpY2UgZnJvbSBhCi1zcGVjaWZpYyB2ZW5kb3IsIGZvciBleGFtcGxlLgotCi1UaGVzZSBmdW5jdGlvbnMgYXJlIGhvdHBsdWctc2FmZS4gVGhleSBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbgotdGhlIHBjaV9kZXYgdGhhdCB0aGV5IHJldHVybi4gWW91IG11c3QgZXZlbnR1YWxseSAocG9zc2libHkgYXQgbW9kdWxlIHVubG9hZCkKLWRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZXNlIGRldmljZXMgYnkgY2FsbGluZyBwY2lfZGV2X3B1dCgpLgotCi0KLQotMy4gRGV2aWNlIEluaXRpYWxpemF0aW9uIFN0ZXBzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotQXMgbm90ZWQgaW4gdGhlIGludHJvZHVjdGlvbiwgbW9zdCBQQ0kgZHJpdmVycyBuZWVkIHRoZSBmb2xsb3dpbmcgc3RlcHMKLWZvciBkZXZpY2UgaW5pdGlhbGl6YXRpb246Ci0KLQlFbmFibGUgdGhlIGRldmljZQotCVJlcXVlc3QgTU1JTy9JT1AgcmVzb3VyY2VzCi0JU2V0IHRoZSBETUEgbWFzayBzaXplIChmb3IgYm90aCBjb2hlcmVudCBhbmQgc3RyZWFtaW5nIERNQSkKLQlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBzaGFyZWQgY29udHJvbCBkYXRhIChwY2lfYWxsb2NhdGVfY29oZXJlbnQoKSkKLQlBY2Nlc3MgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgKGlmIG5lZWRlZCkKLQlSZWdpc3RlciBJUlEgaGFuZGxlciAocmVxdWVzdF9pcnEoKSkKLQlJbml0aWFsaXplIG5vbi1QQ0kgKGkuZS4gTEFOL1NDU0kvZXRjIHBhcnRzIG9mIHRoZSBjaGlwKQotCUVuYWJsZSBETUEvcHJvY2Vzc2luZyBlbmdpbmVzLgotCi1UaGUgZHJpdmVyIGNhbiBhY2Nlc3MgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlcnMgYXQgYW55IHRpbWUuCi0oV2VsbCwgYWxtb3N0LiBXaGVuIHJ1bm5pbmcgQklTVCwgY29uZmlnIHNwYWNlIGNhbiBnbyBhd2F5Li4uYnV0Ci10aGF0IHdpbGwganVzdCByZXN1bHQgaW4gYSBQQ0kgQnVzIE1hc3RlciBBYm9ydCBhbmQgY29uZmlnIHJlYWRzCi13aWxsIHJldHVybiBnYXJiYWdlKS4KLQotCi0zLjEgRW5hYmxlIHRoZSBQQ0kgZGV2aWNlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1CZWZvcmUgdG91Y2hpbmcgYW55IGRldmljZSByZWdpc3RlcnMsIHRoZSBkcml2ZXIgbmVlZHMgdG8gZW5hYmxlCi10aGUgUENJIGRldmljZSBieSBjYWxsaW5nIHBjaV9lbmFibGVfZGV2aWNlKCkuIFRoaXMgd2lsbDoKLQlvIHdha2UgdXAgdGhlIGRldmljZSBpZiBpdCB3YXMgaW4gc3VzcGVuZGVkIHN0YXRlLAotCW8gYWxsb2NhdGUgSS9PIGFuZCBtZW1vcnkgcmVnaW9ucyBvZiB0aGUgZGV2aWNlIChpZiBCSU9TIGRpZCBub3QpLAotCW8gYWxsb2NhdGUgYW4gSVJRIChpZiBCSU9TIGRpZCBub3QpLgotCi1OT1RFOiBwY2lfZW5hYmxlX2RldmljZSgpIGNhbiBmYWlsISBDaGVjayB0aGUgcmV0dXJuIHZhbHVlLgotCi1bIE9TIEJVRzogd2UgZG9uJ3QgY2hlY2sgcmVzb3VyY2UgYWxsb2NhdGlvbnMgYmVmb3JlIGVuYWJsaW5nIHRob3NlCi0gIHJlc291cmNlcy4gVGhlIHNlcXVlbmNlIHdvdWxkIG1ha2UgbW9yZSBzZW5zZSBpZiB3ZSBjYWxsZWQKLSAgcGNpX3JlcXVlc3RfcmVzb3VyY2VzKCkgYmVmb3JlIGNhbGxpbmcgcGNpX2VuYWJsZV9kZXZpY2UoKS4KLSAgQ3VycmVudGx5LCB0aGUgZGV2aWNlIGRyaXZlcnMgY2FuJ3QgZGV0ZWN0IHRoZSBidWcgd2hlbiB3aGVuIHR3bwotICBkZXZpY2VzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgdGhlIHNhbWUgcmFuZ2UuIFRoaXMgaXMgbm90IGEgY29tbW9uCi0gIHByb2JsZW0gYW5kIHVubGlrZWx5IHRvIGdldCBmaXhlZCBzb29uLgotCi0gIFRoaXMgaGFzIGJlZW4gZGlzY3Vzc2VkIGJlZm9yZSBidXQgbm90IGNoYW5nZWQgYXMgb2YgMi42LjE5OgotCWh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDYvMy8yLzE5NAotXQotCi1wY2lfc2V0X21hc3RlcigpIHdpbGwgZW5hYmxlIERNQSBieSBzZXR0aW5nIHRoZSBidXMgbWFzdGVyIGJpdAotaW4gdGhlIFBDSV9DT01NQU5EIHJlZ2lzdGVyLiBJdCBhbHNvIGZpeGVzIHRoZSBsYXRlbmN5IHRpbWVyIHZhbHVlIGlmCi1pdCdzIHNldCB0byBzb21ldGhpbmcgYm9ndXMgYnkgdGhlIEJJT1MuCi0KLUlmIHRoZSBQQ0kgZGV2aWNlIGNhbiB1c2UgdGhlIFBDSSBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZSB0cmFuc2FjdGlvbiwKLWNhbGwgcGNpX3NldF9td2koKS4gIFRoaXMgZW5hYmxlcyB0aGUgUENJX0NPTU1BTkQgYml0IGZvciBNZW0tV3ItSW52YWwKLWFuZCBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIHNldCBjb3JyZWN0bHkuCi1DaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHBjaV9zZXRfbXdpKCkgYXMgbm90IGFsbCBhcmNoaXRlY3R1cmVzCi1vciBjaGlwLXNldHMgbWF5IHN1cHBvcnQgTWVtb3J5LVdyaXRlLUludmFsaWRhdGUuICBBbHRlcm5hdGl2ZWx5LAotaWYgTWVtLVdyLUludmFsIHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBidXQgaXMgbm90IHJlcXVpcmVkLCBjYWxsCi1wY2lfdHJ5X3NldF9td2koKSB0byBoYXZlIHRoZSBzeXN0ZW0gZG8gaXRzIGJlc3QgZWZmb3J0IGF0IGVuYWJsaW5nCi1NZW0tV3ItSW52YWwuCi0KLQotMy4yIFJlcXVlc3QgTU1JTy9JT1AgcmVzb3VyY2VzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLU1lbW9yeSAoTU1JTyksIGFuZCBJL08gcG9ydCBhZGRyZXNzZXMgc2hvdWxkIE5PVCBiZSByZWFkIGRpcmVjdGx5Ci1mcm9tIHRoZSBQQ0kgZGV2aWNlIGNvbmZpZyBzcGFjZS4gVXNlIHRoZSB2YWx1ZXMgaW4gdGhlIHBjaV9kZXYgc3RydWN0dXJlCi1hcyB0aGUgUENJICJidXMgYWRkcmVzcyIgbWlnaHQgaGF2ZSBiZWVuIHJlbWFwcGVkIHRvIGEgImhvc3QgcGh5c2ljYWwiCi1hZGRyZXNzIGJ5IHRoZSBhcmNoL2NoaXAtc2V0IHNwZWNpZmljIGtlcm5lbCBzdXBwb3J0LgotCi1TZWUgRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dCBmb3IgaG93IHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCi1vciBkZXZpY2UgbWVtb3J5LgotCi1UaGUgZGV2aWNlIGRyaXZlciBuZWVkcyB0byBjYWxsIHBjaV9yZXF1ZXN0X3JlZ2lvbigpIHRvIHZlcmlmeQotbm8gb3RoZXIgZGV2aWNlIGlzIGFscmVhZHkgdXNpbmcgdGhlIHNhbWUgYWRkcmVzcyByZXNvdXJjZS4KLUNvbnZlcnNlbHksIGRyaXZlcnMgc2hvdWxkIGNhbGwgcGNpX3JlbGVhc2VfcmVnaW9uKCkgQUZURVIKLWNhbGxpbmcgcGNpX2Rpc2FibGVfZGV2aWNlKCkuCi1UaGUgaWRlYSBpcyB0byBwcmV2ZW50IHR3byBkZXZpY2VzIGNvbGxpZGluZyBvbiB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlLgotCi1bIFNlZSBPUyBCVUcgY29tbWVudCBhYm92ZS4gQ3VycmVudGx5ICgyLjYuMTkpLCBUaGUgZHJpdmVyIGNhbiBvbmx5Ci0gIGRldGVybWluZSBNTUlPIGFuZCBJTyBQb3J0IHJlc291cmNlIGF2YWlsYWJpbGl0eSBfYWZ0ZXJfIGNhbGxpbmcKLSAgcGNpX2VuYWJsZV9kZXZpY2UoKS4gXQotCi1HZW5lcmljIGZsYXZvcnMgb2YgcGNpX3JlcXVlc3RfcmVnaW9uKCkgYXJlIHJlcXVlc3RfbWVtX3JlZ2lvbigpCi0oZm9yIE1NSU8gcmFuZ2VzKSBhbmQgcmVxdWVzdF9yZWdpb24oKSAoZm9yIElPIFBvcnQgcmFuZ2VzKS4KLVVzZSB0aGVzZSBmb3IgYWRkcmVzcyByZXNvdXJjZXMgdGhhdCBhcmUgbm90IGRlc2NyaWJlZCBieSAibm9ybWFsIiBQQ0kKLUJBUnMuCi0KLUFsc28gc2VlIHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoKSBiZWxvdy4KLQotCi0zLjMgU2V0IHRoZSBETUEgbWFzayBzaXplCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1bIElmIGFueXRoaW5nIGJlbG93IGRvZXNuJ3QgbWFrZSBzZW5zZSwgcGxlYXNlIHJlZmVyIHRvCi0gIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQuIFRoaXMgc2VjdGlvbiBpcyBqdXN0IGEgcmVtaW5kZXIgdGhhdAotICBkcml2ZXJzIG5lZWQgdG8gaW5kaWNhdGUgRE1BIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlIGFuZCBpcyBub3QKLSAgYW4gYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIERNQSBpbnRlcmZhY2VzLiBdCi0KLVdoaWxlIGFsbCBkcml2ZXJzIHNob3VsZCBleHBsaWNpdGx5IGluZGljYXRlIHRoZSBETUEgY2FwYWJpbGl0eQotKGUuZy4gMzIgb3IgNjQgYml0KSBvZiB0aGUgUENJIGJ1cyBtYXN0ZXIsIGRldmljZXMgd2l0aCBtb3JlIHRoYW4KLTMyLWJpdCBidXMgbWFzdGVyIGNhcGFiaWxpdHkgZm9yIHN0cmVhbWluZyBkYXRhIG5lZWQgdGhlIGRyaXZlcgotdG8gInJlZ2lzdGVyIiB0aGlzIGNhcGFiaWxpdHkgYnkgY2FsbGluZyBwY2lfc2V0X2RtYV9tYXNrKCkgd2l0aAotYXBwcm9wcmlhdGUgcGFyYW1ldGVycy4gIEluIGdlbmVyYWwgdGhpcyBhbGxvd3MgbW9yZSBlZmZpY2llbnQgRE1BCi1vbiBzeXN0ZW1zIHdoZXJlIFN5c3RlbSBSQU0gZXhpc3RzIGFib3ZlIDRHIF9waHlzaWNhbF8gYWRkcmVzcy4KLQotRHJpdmVycyBmb3IgYWxsIFBDSS1YIGFuZCBQQ0llIGNvbXBsaWFudCBkZXZpY2VzIG11c3QgY2FsbAotcGNpX3NldF9kbWFfbWFzaygpIGFzIHRoZXkgYXJlIDY0LWJpdCBETUEgZGV2aWNlcy4KLQotU2ltaWxhcmx5LCBkcml2ZXJzIG11c3QgYWxzbyAicmVnaXN0ZXIiIHRoaXMgY2FwYWJpbGl0eSBpZiB0aGUgZGV2aWNlCi1jYW4gZGlyZWN0bHkgYWRkcmVzcyAiY29uc2lzdGVudCBtZW1vcnkiIGluIFN5c3RlbSBSQU0gYWJvdmUgNEcgcGh5c2ljYWwKLWFkZHJlc3MgYnkgY2FsbGluZyBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soKS4KLUFnYWluLCB0aGlzIGluY2x1ZGVzIGRyaXZlcnMgZm9yIGFsbCBQQ0ktWCBhbmQgUENJZSBjb21wbGlhbnQgZGV2aWNlcy4KLU1hbnkgNjQtYml0ICJQQ0kiIGRldmljZXMgKGJlZm9yZSBQQ0ktWCkgYW5kIHNvbWUgUENJLVggZGV2aWNlcyBhcmUKLTY0LWJpdCBETUEgY2FwYWJsZSBmb3IgcGF5bG9hZCAoInN0cmVhbWluZyIpIGRhdGEgYnV0IG5vdCBjb250cm9sCi0oImNvbnNpc3RlbnQiKSBkYXRhLgotCi0KLTMuNCBTZXR1cCBzaGFyZWQgY29udHJvbCBkYXRhCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1PbmNlIHRoZSBETUEgbWFza3MgYXJlIHNldCwgdGhlIGRyaXZlciBjYW4gYWxsb2NhdGUgImNvbnNpc3RlbnQiIChhLmsuYS4gc2hhcmVkKQotbWVtb3J5LiAgU2VlIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZgotdGhlIERNQSBBUElzLiBUaGlzIHNlY3Rpb24gaXMganVzdCBhIHJlbWluZGVyIHRoYXQgaXQgbmVlZHMgdG8gYmUgZG9uZQotYmVmb3JlIGVuYWJsaW5nIERNQSBvbiB0aGUgZGV2aWNlLgotCi0KLTMuNSBJbml0aWFsaXplIGRldmljZSByZWdpc3RlcnMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVNvbWUgZHJpdmVycyB3aWxsIG5lZWQgc3BlY2lmaWMgImNhcGFiaWxpdHkiIGZpZWxkcyBwcm9ncmFtbWVkCi1vciBvdGhlciAidmVuZG9yIHNwZWNpZmljIiByZWdpc3RlciBpbml0aWFsaXplZCBvciByZXNldC4KLUUuZy4gY2xlYXJpbmcgcGVuZGluZyBpbnRlcnJ1cHRzLgotCi0KLTMuNiBSZWdpc3RlciBJUlEgaGFuZGxlcgotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1XaGlsZSBjYWxsaW5nIHJlcXVlc3RfaXJxKCkgaXMgdGhlIGxhc3Qgc3RlcCBkZXNjcmliZWQgaGVyZSwKLXRoaXMgaXMgb2Z0ZW4ganVzdCBhbm90aGVyIGludGVybWVkaWF0ZSBzdGVwIHRvIGluaXRpYWxpemUgYSBkZXZpY2UuCi1UaGlzIHN0ZXAgY2FuIG9mdGVuIGJlIGRlZmVycmVkIHVudGlsIHRoZSBkZXZpY2UgaXMgb3BlbmVkIGZvciB1c2UuCi0KLUFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIElSUSBsaW5lcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIElSUUZfU0hBUkVECi1hbmQgdXNlIHRoZSBkZXZpZCB0byBtYXAgSVJRcyB0byBkZXZpY2VzIChyZW1lbWJlciB0aGF0IGFsbCBQQ0kgSVJRIGxpbmVzCi1jYW4gYmUgc2hhcmVkKS4KLQotcmVxdWVzdF9pcnEoKSB3aWxsIGFzc29jaWF0ZSBhbiBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgZGV2aWNlIGhhbmRsZQotd2l0aCBhbiBpbnRlcnJ1cHQgbnVtYmVyLiBIaXN0b3JpY2FsbHkgaW50ZXJydXB0IG51bWJlcnMgcmVwcmVzZW50Ci1JUlEgbGluZXMgd2hpY2ggcnVuIGZyb20gdGhlIFBDSSBkZXZpY2UgdG8gdGhlIEludGVycnVwdCBjb250cm9sbGVyLgotV2l0aCBNU0kgYW5kIE1TSS1YIChtb3JlIGJlbG93KSB0aGUgaW50ZXJydXB0IG51bWJlciBpcyBhIENQVSAidmVjdG9yIi4KLQotcmVxdWVzdF9pcnEoKSBhbHNvIGVuYWJsZXMgdGhlIGludGVycnVwdC4gTWFrZSBzdXJlIHRoZSBkZXZpY2UgaXMKLXF1aWVzY2VkIGFuZCBkb2VzIG5vdCBoYXZlIGFueSBpbnRlcnJ1cHRzIHBlbmRpbmcgYmVmb3JlIHJlZ2lzdGVyaW5nCi10aGUgaW50ZXJydXB0IGhhbmRsZXIuCi0KLU1TSSBhbmQgTVNJLVggYXJlIFBDSSBjYXBhYmlsaXRpZXMuIEJvdGggYXJlICJNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMiCi13aGljaCBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIENQVSB2aWEgYSBETUEgd3JpdGUgdG8gYSBMb2NhbCBBUElDLgotVGhlIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgYmV0d2VlbiBNU0kgYW5kIE1TSS1YIGlzIGhvdyBtdWx0aXBsZQotInZlY3RvcnMiIGdldCBhbGxvY2F0ZWQuIE1TSSByZXF1aXJlcyBjb250aWd1b3VzIGJsb2NrcyBvZiB2ZWN0b3JzCi13aGlsZSBNU0ktWCBjYW4gYWxsb2NhdGUgc2V2ZXJhbCBpbmRpdmlkdWFsIG9uZXMuCi0KLU1TSSBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkIGJ5IGNhbGxpbmcgcGNpX2VuYWJsZV9tc2koKSBvcgotcGNpX2VuYWJsZV9tc2l4KCkgYmVmb3JlIGNhbGxpbmcgcmVxdWVzdF9pcnEoKS4gVGhpcyBjYXVzZXMKLXRoZSBQQ0kgc3VwcG9ydCB0byBwcm9ncmFtIENQVSB2ZWN0b3IgZGF0YSBpbnRvIHRoZSBQQ0kgZGV2aWNlCi1jYXBhYmlsaXR5IHJlZ2lzdGVycy4KLQotSWYgeW91ciBQQ0kgZGV2aWNlIHN1cHBvcnRzIGJvdGgsIHRyeSB0byBlbmFibGUgTVNJLVggZmlyc3QuCi1Pbmx5IG9uZSBjYW4gYmUgZW5hYmxlZCBhdCBhIHRpbWUuICBNYW55IGFyY2hpdGVjdHVyZXMsIGNoaXAtc2V0cywKLW9yIEJJT1NlcyBkbyBOT1Qgc3VwcG9ydCBNU0kgb3IgTVNJLVggYW5kIHRoZSBjYWxsIHRvIHBjaV9lbmFibGVfbXNpL21zaXgKLXdpbGwgZmFpbC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBzaW5jZSBtYW55IGRyaXZlcnMgaGF2ZQotdHdvIChvciBtb3JlKSBpbnRlcnJ1cHQgaGFuZGxlcnM6IG9uZSBmb3IgTVNJL01TSS1YIGFuZCBhbm90aGVyIGZvciBJUlFzLgotVGhleSBjaG9vc2Ugd2hpY2ggaGFuZGxlciB0byByZWdpc3RlciB3aXRoIHJlcXVlc3RfaXJxKCkgYmFzZWQgb24gdGhlCi1yZXR1cm4gdmFsdWUgZnJvbSBwY2lfZW5hYmxlX21zaS9tc2l4KCkuCi0KLVRoZXJlIGFyZSAoYXQgbGVhc3QpIHR3byByZWFsbHkgZ29vZCByZWFzb25zIGZvciB1c2luZyBNU0k6Ci0xKSBNU0kgaXMgYW4gZXhjbHVzaXZlIGludGVycnVwdCB2ZWN0b3IgYnkgZGVmaW5pdGlvbi4KLSAgIFRoaXMgbWVhbnMgdGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXNuJ3QgaGF2ZSB0byB2ZXJpZnkKLSAgIGl0cyBkZXZpY2UgY2F1c2VkIHRoZSBpbnRlcnJ1cHQuCi0KLTIpIE1TSSBhdm9pZHMgRE1BL0lSUSByYWNlIGNvbmRpdGlvbnMuIERNQSB0byBob3N0IG1lbW9yeSBpcyBndWFyYW50ZWVkCi0gICB0byBiZSB2aXNpYmxlIHRvIHRoZSBob3N0IENQVShzKSB3aGVuIHRoZSBNU0kgaXMgZGVsaXZlcmVkLiBUaGlzCi0gICBpcyBpbXBvcnRhbnQgZm9yIGJvdGggZGF0YSBjb2hlcmVuY3kgYW5kIGF2b2lkaW5nIHN0YWxlIGNvbnRyb2wgZGF0YS4KLSAgIFRoaXMgZ3VhcmFudGVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIG9taXQgTU1JTyByZWFkcyB0byBmbHVzaAotICAgdGhlIERNQSBzdHJlYW0uCi0KLVNlZSBkcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvIG9yIGRyaXZlcnMvbmV0L3RnMy5jIGZvciBleGFtcGxlcwotb2YgTVNJL01TSS1YIHVzYWdlLgotCi0KLQotNC4gUENJIGRldmljZSBzaHV0ZG93bgotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotV2hlbiBhIFBDSSBkZXZpY2UgZHJpdmVyIGlzIGJlaW5nIHVubG9hZGVkLCBtb3N0IG9mIHRoZSBmb2xsb3dpbmcKLXN0ZXBzIG5lZWQgdG8gYmUgcGVyZm9ybWVkOgotCi0JRGlzYWJsZSB0aGUgZGV2aWNlIGZyb20gZ2VuZXJhdGluZyBJUlFzCi0JUmVsZWFzZSB0aGUgSVJRIChmcmVlX2lycSgpKQotCVN0b3AgYWxsIERNQSBhY3Rpdml0eQotCVJlbGVhc2UgRE1BIGJ1ZmZlcnMgKGJvdGggc3RyZWFtaW5nIGFuZCBjb25zaXN0ZW50KQotCVVucmVnaXN0ZXIgZnJvbSBvdGhlciBzdWJzeXN0ZW1zIChlLmcuIHNjc2kgb3IgbmV0ZGV2KQotCURpc2FibGUgZGV2aWNlIGZyb20gcmVzcG9uZGluZyB0byBNTUlPL0lPIFBvcnQgYWRkcmVzc2VzCi0JUmVsZWFzZSBNTUlPL0lPIFBvcnQgcmVzb3VyY2UocykKLQotCi00LjEgU3RvcCBJUlFzIG9uIHRoZSBkZXZpY2UKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotSG93IHRvIGRvIHRoaXMgaXMgY2hpcC9kZXZpY2Ugc3BlY2lmaWMuIElmIGl0J3Mgbm90IGRvbmUsIGl0IG9wZW5zCi10aGUgcG9zc2liaWxpdHkgb2YgYSAic2NyZWFtaW5nIGludGVycnVwdCIgaWYgKGFuZCBvbmx5IGlmKQotdGhlIElSUSBpcyBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZS4KLQotV2hlbiB0aGUgc2hhcmVkIElSUSBoYW5kbGVyIGlzICJ1bmhvb2tlZCIsIHRoZSByZW1haW5pbmcgZGV2aWNlcwotdXNpbmcgdGhlIHNhbWUgSVJRIGxpbmUgd2lsbCBzdGlsbCBuZWVkIHRoZSBJUlEgZW5hYmxlZC4gVGh1cyBpZiB0aGUKLSJ1bmhvb2tlZCIgZGV2aWNlIGFzc2VydHMgSVJRIGxpbmUsIHRoZSBzeXN0ZW0gd2lsbCByZXNwb25kIGFzc3VtaW5nCi1pdCB3YXMgb25lIG9mIHRoZSByZW1haW5pbmcgZGV2aWNlcyBhc3NlcnRlZCB0aGUgSVJRIGxpbmUuIFNpbmNlIG5vbmUKLW9mIHRoZSBvdGhlciBkZXZpY2VzIHdpbGwgaGFuZGxlIHRoZSBJUlEsIHRoZSBzeXN0ZW0gd2lsbCAiaGFuZyIgdW50aWwKLWl0IGRlY2lkZXMgdGhlIElSUSBpc24ndCBnb2luZyB0byBnZXQgaGFuZGxlZCBhbmQgbWFza3MgdGhlIElSUSAoMTAwLDAwMAotaXRlcmF0aW9ucyBsYXRlcikuIE9uY2UgdGhlIHNoYXJlZCBJUlEgaXMgbWFza2VkLCB0aGUgcmVtYWluaW5nIGRldmljZXMKLXdpbGwgc3RvcCBmdW5jdGlvbmluZyBwcm9wZXJseS4gTm90IGEgbmljZSBzaXR1YXRpb24uCi0KLVRoaXMgaXMgYW5vdGhlciByZWFzb24gdG8gdXNlIE1TSSBvciBNU0ktWCBpZiBpdCdzIGF2YWlsYWJsZS4KLU1TSSBhbmQgTVNJLVggYXJlIGRlZmluZWQgdG8gYmUgZXhjbHVzaXZlIGludGVycnVwdHMgYW5kIHRodXMKLWFyZSBub3Qgc3VzY2VwdGlibGUgdG8gdGhlICJzY3JlYW1pbmcgaW50ZXJydXB0IiBwcm9ibGVtLgotCi0KLTQuMiBSZWxlYXNlIHRoZSBJUlEKLX5+fn5+fn5+fn5+fn5+fn5+fn4KLU9uY2UgdGhlIGRldmljZSBpcyBxdWllc2NlZCAobm8gbW9yZSBJUlFzKSwgb25lIGNhbiBjYWxsIGZyZWVfaXJxKCkuCi1UaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGNvbnRyb2wgb25jZSBhbnkgcGVuZGluZyBJUlFzIGFyZSBoYW5kbGVkLAotInVuaG9vayIgdGhlIGRyaXZlcnMgSVJRIGhhbmRsZXIgZnJvbSB0aGF0IElSUSwgYW5kIGZpbmFsbHkgcmVsZWFzZQotdGhlIElSUSBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyBpdC4KLQotCi00LjMgU3RvcCBhbGwgRE1BIGFjdGl2aXR5Ci1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1JdCdzIGV4dHJlbWVseSBpbXBvcnRhbnQgdG8gc3RvcCBhbGwgRE1BIG9wZXJhdGlvbnMgQkVGT1JFIGF0dGVtcHRpbmcKLXRvIGRlYWxsb2NhdGUgRE1BIGNvbnRyb2wgZGF0YS4gRmFpbHVyZSB0byBkbyBzbyBjYW4gcmVzdWx0IGluIG1lbW9yeQotY29ycnVwdGlvbiwgaGFuZ3MsIGFuZCBvbiBzb21lIGNoaXAtc2V0cyBhIGhhcmQgY3Jhc2guCi0KLVN0b3BwaW5nIERNQSBhZnRlciBzdG9wcGluZyB0aGUgSVJRcyBjYW4gYXZvaWQgcmFjZXMgd2hlcmUgdGhlCi1JUlEgaGFuZGxlciBtaWdodCByZXN0YXJ0IERNQSBlbmdpbmVzLgotCi1XaGlsZSB0aGlzIHN0ZXAgc291bmRzIG9idmlvdXMgYW5kIHRyaXZpYWwsIHNldmVyYWwgIm1hdHVyZSIgZHJpdmVycwotZGlkbid0IGdldCB0aGlzIHN0ZXAgcmlnaHQgaW4gdGhlIHBhc3QuCi0KLQotNC40IFJlbGVhc2UgRE1BIGJ1ZmZlcnMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1PbmNlIERNQSBpcyBzdG9wcGVkLCBjbGVhbiB1cCBzdHJlYW1pbmcgRE1BIGZpcnN0LgotSS5lLiB1bm1hcCBkYXRhIGJ1ZmZlcnMgYW5kIHJldHVybiBidWZmZXJzIHRvICJ1cHN0cmVhbSIKLW93bmVycyBpZiB0aGVyZSBpcyBvbmUuCi0KLVRoZW4gY2xlYW4gdXAgImNvbnNpc3RlbnQiIGJ1ZmZlcnMgd2hpY2ggY29udGFpbiB0aGUgY29udHJvbCBkYXRhLgotCi1TZWUgRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dCBmb3IgZGV0YWlscyBvbiB1bm1hcHBpbmcgaW50ZXJmYWNlcy4KLQotCi00LjUgVW5yZWdpc3RlciBmcm9tIG90aGVyIHN1YnN5c3RlbXMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotTW9zdCBsb3cgbGV2ZWwgUENJIGRldmljZSBkcml2ZXJzIHN1cHBvcnQgc29tZSBvdGhlciBzdWJzeXN0ZW0KLWxpa2UgVVNCLCBBTFNBLCBTQ1NJLCBOZXREZXYsIEluZmluaWJhbmQsIGV0Yy4gTWFrZSBzdXJlIHlvdXIKLWRyaXZlciBpc24ndCBsb3NpbmcgcmVzb3VyY2VzIGZyb20gdGhhdCBvdGhlciBzdWJzeXN0ZW0uCi1JZiB0aGlzIGhhcHBlbnMsIHR5cGljYWxseSB0aGUgc3ltcHRvbSBpcyBhbiBPb3BzIChwYW5pYykgd2hlbgotdGhlIHN1YnN5c3RlbSBhdHRlbXB0cyB0byBjYWxsIGludG8gYSBkcml2ZXIgdGhhdCBoYXMgYmVlbiB1bmxvYWRlZC4KLQotCi00LjYgRGlzYWJsZSBEZXZpY2UgZnJvbSByZXNwb25kaW5nIHRvIE1NSU8vSU8gUG9ydCBhZGRyZXNzZXMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotaW9fdW5tYXAoKSBNTUlPIG9yIElPIFBvcnQgcmVzb3VyY2VzIGFuZCB0aGVuIGNhbGwgcGNpX2Rpc2FibGVfZGV2aWNlKCkuCi1UaGlzIGlzIHRoZSBzeW1tZXRyaWMgb3Bwb3NpdGUgb2YgcGNpX2VuYWJsZV9kZXZpY2UoKS4KLURvIG5vdCBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVycyBhZnRlciBjYWxsaW5nIHBjaV9kaXNhYmxlX2RldmljZSgpLgotCi0KLTQuNyBSZWxlYXNlIE1NSU8vSU8gUG9ydCBSZXNvdXJjZShzKQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1DYWxsIHBjaV9yZWxlYXNlX3JlZ2lvbigpIHRvIG1hcmsgdGhlIE1NSU8gb3IgSU8gUG9ydCByYW5nZSBhcyBhdmFpbGFibGUuCi1GYWlsdXJlIHRvIGRvIHNvIHVzdWFsbHkgcmVzdWx0cyBpbiB0aGUgaW5hYmlsaXR5IHRvIHJlbG9hZCB0aGUgZHJpdmVyLgotCi0KLQotNS4gSG93IHRvIGFjY2VzcyBQQ0kgY29uZmlnIHNwYWNlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotWW91IGNhbiB1c2UgcGNpXyhyZWFkfHdyaXRlKV9jb25maWdfKGJ5dGV8d29yZHxkd29yZCkgdG8gYWNjZXNzIHRoZSBjb25maWcKLXNwYWNlIG9mIGEgZGV2aWNlIHJlcHJlc2VudGVkIGJ5IHN0cnVjdCBwY2lfZGV2ICouIEFsbCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIDAKLXdoZW4gc3VjY2Vzc2Z1bCBvciBhbiBlcnJvciBjb2RlIChQQ0lCSU9TXy4uLikgd2hpY2ggY2FuIGJlIHRyYW5zbGF0ZWQgdG8gYSB0ZXh0Ci1zdHJpbmcgYnkgcGNpYmlvc19zdHJlcnJvci4gTW9zdCBkcml2ZXJzIGV4cGVjdCB0aGF0IGFjY2Vzc2VzIHRvIHZhbGlkIFBDSQotZGV2aWNlcyBkb24ndCBmYWlsLgotCi1JZiB5b3UgZG9uJ3QgaGF2ZSBhIHN0cnVjdCBwY2lfZGV2IGF2YWlsYWJsZSwgeW91IGNhbiBjYWxsCi1wY2lfYnVzXyhyZWFkfHdyaXRlKV9jb25maWdfKGJ5dGV8d29yZHxkd29yZCkgdG8gYWNjZXNzIGEgZ2l2ZW4gZGV2aWNlCi1hbmQgZnVuY3Rpb24gb24gdGhhdCBidXMuCi0KLUlmIHlvdSBhY2Nlc3MgZmllbGRzIGluIHRoZSBzdGFuZGFyZCBwb3J0aW9uIG9mIHRoZSBjb25maWcgaGVhZGVyLCBwbGVhc2UKLXVzZSBzeW1ib2xpYyBuYW1lcyBvZiBsb2NhdGlvbnMgYW5kIGJpdHMgZGVjbGFyZWQgaW4gPGxpbnV4L3BjaS5oPi4KLQotSWYgeW91IG5lZWQgdG8gYWNjZXNzIEV4dGVuZGVkIFBDSSBDYXBhYmlsaXR5IHJlZ2lzdGVycywganVzdCBjYWxsCi1wY2lfZmluZF9jYXBhYmlsaXR5KCkgZm9yIHRoZSBwYXJ0aWN1bGFyIGNhcGFiaWxpdHkgYW5kIGl0IHdpbGwgZmluZCB0aGUKLWNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgYmxvY2sgZm9yIHlvdS4KLQotCi0KLTYuIE90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLXBjaV9maW5kX3Nsb3QoKQkJCUZpbmQgcGNpX2RldiBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGJ1cyBhbmQKLQkJCQlzbG90IG51bWJlcnMuCi1wY2lfc2V0X3Bvd2VyX3N0YXRlKCkJCVNldCBQQ0kgUG93ZXIgTWFuYWdlbWVudCBzdGF0ZSAoMD1EMCAuLi4gMz1EMykKLXBjaV9maW5kX2NhcGFiaWxpdHkoKQkJRmluZCBzcGVjaWZpZWQgY2FwYWJpbGl0eSBpbiBkZXZpY2UncyBjYXBhYmlsaXR5Ci0JCQkJbGlzdC4KLXBjaV9yZXNvdXJjZV9zdGFydCgpCQlSZXR1cm5zIGJ1cyBzdGFydCBhZGRyZXNzIGZvciBhIGdpdmVuIFBDSSByZWdpb24KLXBjaV9yZXNvdXJjZV9lbmQoKQkJUmV0dXJucyBidXMgZW5kIGFkZHJlc3MgZm9yIGEgZ2l2ZW4gUENJIHJlZ2lvbgotcGNpX3Jlc291cmNlX2xlbigpCQlSZXR1cm5zIHRoZSBieXRlIGxlbmd0aCBvZiBhIFBDSSByZWdpb24KLXBjaV9zZXRfZHJ2ZGF0YSgpCQlTZXQgcHJpdmF0ZSBkcml2ZXIgZGF0YSBwb2ludGVyIGZvciBhIHBjaV9kZXYKLXBjaV9nZXRfZHJ2ZGF0YSgpCQlSZXR1cm4gcHJpdmF0ZSBkcml2ZXIgZGF0YSBwb2ludGVyIGZvciBhIHBjaV9kZXYKLXBjaV9zZXRfbXdpKCkJCQlFbmFibGUgTWVtb3J5LVdyaXRlLUludmFsaWRhdGUgdHJhbnNhY3Rpb25zLgotcGNpX2NsZWFyX213aSgpCQkJRGlzYWJsZSBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMuCi0KLQotCi03LiBNaXNjZWxsYW5lb3VzIGhpbnRzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVdoZW4gZGlzcGxheWluZyBQQ0kgZGV2aWNlIG5hbWVzIHRvIHRoZSB1c2VyIChmb3IgZXhhbXBsZSB3aGVuIGEgZHJpdmVyIHdhbnRzCi10byB0ZWxsIHRoZSB1c2VyIHdoYXQgY2FyZCBoYXMgaXQgZm91bmQpLCBwbGVhc2UgdXNlIHBjaV9uYW1lKHBjaV9kZXYpLgotCi1BbHdheXMgcmVmZXIgdG8gdGhlIFBDSSBkZXZpY2VzIGJ5IGEgcG9pbnRlciB0byB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUuCi1BbGwgUENJIGxheWVyIGZ1bmN0aW9ucyB1c2UgdGhpcyBpZGVudGlmaWNhdGlvbiBhbmQgaXQncyB0aGUgb25seQotcmVhc29uYWJsZSBvbmUuIERvbid0IHVzZSBidXMvc2xvdC9mdW5jdGlvbiBudW1iZXJzIGV4Y2VwdCBmb3IgdmVyeQotc3BlY2lhbCBwdXJwb3NlcyAtLSBvbiBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgcHJpbWFyeSBidXNlcyB0aGVpciBzZW1hbnRpY3MKLWNhbiBiZSBwcmV0dHkgY29tcGxleC4KLQotRG9uJ3QgdHJ5IHRvIHR1cm4gb24gRmFzdCBCYWNrIHRvIEJhY2sgd3JpdGVzIGluIHlvdXIgZHJpdmVyLiAgQWxsIGRldmljZXMKLW9uIHRoZSBidXMgbmVlZCB0byBiZSBjYXBhYmxlIG9mIGRvaW5nIGl0LCBzbyB0aGlzIGlzIHNvbWV0aGluZyB3aGljaCBuZWVkcwotdG8gYmUgaGFuZGxlZCBieSBwbGF0Zm9ybSBhbmQgZ2VuZXJpYyBjb2RlLCBub3QgaW5kaXZpZHVhbCBkcml2ZXJzLgotCi0KLQotOC4gVmVuZG9yIGFuZCBkZXZpY2UgaWRlbnRpZmljYXRpb25zCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotT25lIGlzIG5vdCBub3QgcmVxdWlyZWQgdG8gYWRkIG5ldyBkZXZpY2UgaWRzIHRvIGluY2x1ZGUvbGludXgvcGNpX2lkcy5oLgotUGxlYXNlIGFkZCBQQ0lfVkVORE9SX0lEX3h4eCBmb3IgdmVuZG9ycyBhbmQgYSBoZXggY29uc3RhbnQgZm9yIGRldmljZSBpZHMuCi0KLVBDSV9WRU5ET1JfSURfeHh4IGNvbnN0YW50cyBhcmUgcmUtdXNlZC4gVGhlIGRldmljZSBpZHMgYXJlIGFyYml0cmFyeQotaGV4IG51bWJlcnMgKHZlbmRvciBjb250cm9sbGVkKSBhbmQgbm9ybWFsbHkgdXNlZCBvbmx5IGluIGEgc2luZ2xlCi1sb2NhdGlvbiwgdGhlIHBjaV9kZXZpY2VfaWQgdGFibGUuCi0KLVBsZWFzZSBETyBzdWJtaXQgbmV3IHZlbmRvci9kZXZpY2UgaWRzIHRvIHBjaWlkcy5zb3VyY2Vmb3JnZS5uZXQgcHJvamVjdC4KLQotCi0KLTkuIE9ic29sZXRlIGZ1bmN0aW9ucwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVRoZXJlIGFyZSBzZXZlcmFsIGZ1bmN0aW9ucyB3aGljaCB5b3UgbWlnaHQgY29tZSBhY3Jvc3Mgd2hlbiB0cnlpbmcgdG8KLXBvcnQgYW4gb2xkIGRyaXZlciB0byB0aGUgbmV3IFBDSSBpbnRlcmZhY2UuICBUaGV5IGFyZSBubyBsb25nZXIgcHJlc2VudAotaW4gdGhlIGtlcm5lbCBhcyB0aGV5IGFyZW4ndCBjb21wYXRpYmxlIHdpdGggaG90cGx1ZyBvciBQQ0kgZG9tYWlucyBvcgotaGF2aW5nIHNhbmUgbG9ja2luZy4KLQotcGNpX2ZpbmRfZGV2aWNlKCkJU3VwZXJzZWRlZCBieSBwY2lfZ2V0X2RldmljZSgpCi1wY2lfZmluZF9zdWJzeXMoKQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfc3Vic3lzKCkKLXBjaV9maW5kX3Nsb3QoKQkJU3VwZXJzZWRlZCBieSBwY2lfZ2V0X3Nsb3QoKQotCi0KLVRoZSBhbHRlcm5hdGl2ZSBpcyB0aGUgdHJhZGl0aW9uYWwgUENJIGRldmljZSBkcml2ZXIgdGhhdCB3YWxrcyBQQ0kKLWRldmljZSBsaXN0cy4gVGhpcyBpcyBzdGlsbCBwb3NzaWJsZSBidXQgZGlzY291cmFnZWQuCi0KLQotCi0xMC4gTU1JTyBTcGFjZSBhbmQgIldyaXRlIFBvc3RpbmciCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLUNvbnZlcnRpbmcgYSBkcml2ZXIgZnJvbSB1c2luZyBJL08gUG9ydCBzcGFjZSB0byB1c2luZyBNTUlPIHNwYWNlCi1vZnRlbiByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgY2hhbmdlcy4gU3BlY2lmaWNhbGx5LCAid3JpdGUgcG9zdGluZyIKLW5lZWRzIHRvIGJlIGhhbmRsZWQuIE1hbnkgZHJpdmVycyAoZS5nLiB0ZzMsIGFjZW5pYywgc3ltNTNjOHh4XzIpCi1hbHJlYWR5IGRvIHRoaXMuIEkvTyBQb3J0IHNwYWNlIGd1YXJhbnRlZXMgd3JpdGUgdHJhbnNhY3Rpb25zIHJlYWNoIHRoZSBQQ0kKLWRldmljZSBiZWZvcmUgdGhlIENQVSBjYW4gY29udGludWUuIFdyaXRlcyB0byBNTUlPIHNwYWNlIGFsbG93IHRoZSBDUFUKLXRvIGNvbnRpbnVlIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gcmVhY2hlcyB0aGUgUENJIGRldmljZS4gSFcgd2VlbmllcwotY2FsbCB0aGlzICJXcml0ZSBQb3N0aW5nIiBiZWNhdXNlIHRoZSB3cml0ZSBjb21wbGV0aW9uIGlzICJwb3N0ZWQiIHRvCi10aGUgQ1BVIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gaGFzIHJlYWNoZWQgaXRzIGRlc3RpbmF0aW9uLgotCi1UaHVzLCB0aW1pbmcgc2Vuc2l0aXZlIGNvZGUgc2hvdWxkIGFkZCByZWFkbCgpIHdoZXJlIHRoZSBDUFUgaXMKLWV4cGVjdGVkIHRvIHdhaXQgYmVmb3JlIGRvaW5nIG90aGVyIHdvcmsuICBUaGUgY2xhc3NpYyAiYml0IGJhbmdpbmciCi1zZXF1ZW5jZSB3b3JrcyBmaW5lIGZvciBJL08gUG9ydCBzcGFjZToKLQotICAgICAgIGZvciAoaSA9IDg7IC0taTsgdmFsID4+PSAxKSB7Ci0gICAgICAgICAgICAgICBvdXRiKHZhbCAmIDEsIGlvcG9ydF9yZWcpOyAgICAgIC8qIHdyaXRlIGJpdCAqLwotICAgICAgICAgICAgICAgdWRlbGF5KDEwKTsKLSAgICAgICB9Ci0KLVRoZSBzYW1lIHNlcXVlbmNlIGZvciBNTUlPIHNwYWNlIHNob3VsZCBiZToKLQotICAgICAgIGZvciAoaSA9IDg7IC0taTsgdmFsID4+PSAxKSB7Ci0gICAgICAgICAgICAgICB3cml0ZWIodmFsICYgMSwgbW1pb19yZWcpOyAgICAgIC8qIHdyaXRlIGJpdCAqLwotICAgICAgICAgICAgICAgcmVhZGIoc2FmZV9tbWlvX3JlZyk7ICAgICAgICAgICAvKiBmbHVzaCBwb3N0ZWQgd3JpdGUgKi8KLSAgICAgICAgICAgICAgIHVkZWxheSgxMCk7Ci0gICAgICAgfQotCi1JdCBpcyBpbXBvcnRhbnQgdGhhdCAic2FmZV9tbWlvX3JlZyIgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0cyB0aGF0Ci1pbnRlcmZlcmVzIHdpdGggdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBkZXZpY2UuCi0KLUFub3RoZXIgY2FzZSB0byB3YXRjaCBvdXQgZm9yIGlzIHdoZW4gcmVzZXR0aW5nIGEgUENJIGRldmljZS4gVXNlIFBDSQotQ29uZmlndXJhdGlvbiBzcGFjZSByZWFkcyB0byBmbHVzaCB0aGUgd3JpdGVsKCkuIFRoaXMgd2lsbCBncmFjZWZ1bGx5Ci1oYW5kbGUgdGhlIFBDSSBtYXN0ZXIgYWJvcnQgb24gYWxsIHBsYXRmb3JtcyBpZiB0aGUgUENJIGRldmljZSBpcwotZXhwZWN0ZWQgdG8gbm90IHJlc3BvbmQgdG8gYSByZWFkbCgpLiAgTW9zdCB4ODYgcGxhdGZvcm1zIHdpbGwgYWxsb3cKLU1NSU8gcmVhZHMgdG8gbWFzdGVyIGFib3J0IChhLmsuYS4gIlNvZnQgRmFpbCIpIGFuZCByZXR1cm4gZ2FyYmFnZQotKGUuZy4gfjApLiBCdXQgbWFueSBSSVNDIHBsYXRmb3JtcyB3aWxsIGNyYXNoIChhLmsuYS4iSGFyZCBGYWlsIikuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNpZWFlci1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL3BjaWVhZXItaG93dG8udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWRhODYxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vcGNpZWFlci1ob3d0by50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotICAgVGhlIFBDSSBFeHByZXNzIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBEcml2ZXIgR3VpZGUgSE9XVE8KLQkJVC4gTG9uZyBOZ3V5ZW4JPHRvbS5sLm5ndXllbkBpbnRlbC5jb20+Ci0JCVlhbm1pbiBaaGFuZwk8eWFubWluLnpoYW5nQGludGVsLmNvbT4KLQkJCQkwNy8yOS8yMDA2Ci0KLQotMS4gT3ZlcnZpZXcKLQotMS4xIEFib3V0IHRoaXMgZ3VpZGUKLQotVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIGJhc2ljcyBvZiB0aGUgUENJIEV4cHJlc3MgQWR2YW5jZWQgRXJyb3IKLVJlcG9ydGluZyAoQUVSKSBkcml2ZXIgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgaXQsIGFzCi13ZWxsIGFzIGhvdyB0byBlbmFibGUgdGhlIGRyaXZlcnMgb2YgZW5kcG9pbnQgZGV2aWNlcyB0byBjb25mb3JtIHdpdGgKLVBDSSBFeHByZXNzIEFFUiBkcml2ZXIuCi0KLTEuMiBDb3B5cmlnaHQgwqkgSW50ZWwgQ29ycG9yYXRpb24gMjAwNi4KLQotMS4zIFdoYXQgaXMgdGhlIFBDSSBFeHByZXNzIEFFUiBEcml2ZXI/Ci0KLVBDSSBFeHByZXNzIGVycm9yIHNpZ25hbGluZyBjYW4gb2NjdXIgb24gdGhlIFBDSSBFeHByZXNzIGxpbmsgaXRzZWxmCi1vciBvbiBiZWhhbGYgb2YgdHJhbnNhY3Rpb25zIGluaXRpYXRlZCBvbiB0aGUgbGluay4gUENJIEV4cHJlc3MKLWRlZmluZXMgdHdvIGVycm9yIHJlcG9ydGluZyBwYXJhZGlnbXM6IHRoZSBiYXNlbGluZSBjYXBhYmlsaXR5IGFuZAotdGhlIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBjYXBhYmlsaXR5LiBUaGUgYmFzZWxpbmUgY2FwYWJpbGl0eSBpcwotcmVxdWlyZWQgb2YgYWxsIFBDSSBFeHByZXNzIGNvbXBvbmVudHMgcHJvdmlkaW5nIGEgbWluaW11bSBkZWZpbmVkCi1zZXQgb2YgZXJyb3IgcmVwb3J0aW5nIHJlcXVpcmVtZW50cy4gQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nCi1jYXBhYmlsaXR5IGlzIGltcGxlbWVudGVkIHdpdGggYSBQQ0kgRXhwcmVzcyBhZHZhbmNlZCBlcnJvciByZXBvcnRpbmcKLWV4dGVuZGVkIGNhcGFiaWxpdHkgc3RydWN0dXJlIHByb3ZpZGluZyBtb3JlIHJvYnVzdCBlcnJvciByZXBvcnRpbmcuCi0KLVRoZSBQQ0kgRXhwcmVzcyBBRVIgZHJpdmVyIHByb3ZpZGVzIHRoZSBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IFBDSQotRXhwcmVzcyBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgY2FwYWJpbGl0eS4gVGhlIFBDSSBFeHByZXNzIEFFUgotZHJpdmVyIHByb3ZpZGVzIHRocmVlIGJhc2ljIGZ1bmN0aW9uczoKLQotLQlHYXRoZXJzIHRoZSBjb21wcmVoZW5zaXZlIGVycm9yIGluZm9ybWF0aW9uIGlmIGVycm9ycyBvY2N1cnJlZC4KLS0JUmVwb3J0cyBlcnJvciB0byB0aGUgdXNlcnMuCi0tCVBlcmZvcm1zIGVycm9yIHJlY292ZXJ5IGFjdGlvbnMuCi0KLUFFUiBkcml2ZXIgb25seSBhdHRhY2hlcyByb290IHBvcnRzIHdoaWNoIHN1cHBvcnQgUENJLUV4cHJlc3MgQUVSCi1jYXBhYmlsaXR5LgotCi0KLTIuIFVzZXIgR3VpZGUKLQotMi4xIEluY2x1ZGUgdGhlIFBDSSBFeHByZXNzIEFFUiBSb290IERyaXZlciBpbnRvIHRoZSBMaW51eCBLZXJuZWwKLQotVGhlIFBDSSBFeHByZXNzIEFFUiBSb290IGRyaXZlciBpcyBhIFJvb3QgUG9ydCBzZXJ2aWNlIGRyaXZlciBhdHRhY2hlZAotdG8gdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlci4gSWYgYSB1c2VyIHdhbnRzIHRvIHVzZSBpdCwgdGhlIGRyaXZlcgotaGFzIHRvIGJlIGNvbXBpbGVkLiBPcHRpb24gQ09ORklHX1BDSUVBRVIgc3VwcG9ydHMgdGhpcyBjYXBhYmlsaXR5LiBJdAotZGVwZW5kcyBvbiBDT05GSUdfUENJRVBPUlRCVVMsIHNvIHBscy4gc2V0IENPTkZJR19QQ0lFUE9SVEJVUz15IGFuZAotQ09ORklHX1BDSUVBRVIgPSB5LgotCi0yLjIgTG9hZCBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBEcml2ZXIKLVRoZXJlIGlzIGEgY2FzZSB3aGVyZSBhIHN5c3RlbSBoYXMgQUVSIHN1cHBvcnQgaW4gQklPUy4gRW5hYmxpbmcgdGhlIEFFUgotUm9vdCBkcml2ZXIgYW5kIGhhdmluZyBBRVIgc3VwcG9ydCBpbiBCSU9TIG1heSByZXN1bHQgdW5wcmVkaWN0YWJsZQotYmVoYXZpb3IuIFRvIGF2b2lkIHRoaXMgY29uZmxpY3QsIGEgc3VjY2Vzc2Z1bCBsb2FkIG9mIHRoZSBBRVIgUm9vdCBkcml2ZXIKLXJlcXVpcmVzIEFDUEkgX09TQyBzdXBwb3J0IGluIHRoZSBCSU9TIHRvIGFsbG93IHRoZSBBRVIgUm9vdCBkcml2ZXIgdG8KLXJlcXVlc3QgZm9yIG5hdGl2ZSBjb250cm9sIG9mIEFFUi4gU2VlIHRoZSBQQ0kgRlcgMy4wIFNwZWNpZmljYXRpb24gZm9yCi1kZXRhaWxzIHJlZ2FyZGluZyBPU0MgdXNhZ2UuIEN1cnJlbnRseSwgbG90cyBvZiBmaXJtd2FyZXMgZG9uJ3QgcHJvdmlkZQotX09TQyBzdXBwb3J0IHdoaWxlIHRoZXkgdXNlIFBDSSBFeHByZXNzLiBUbyBzdXBwb3J0IHN1Y2ggZmlybXdhcmVzLAotZm9yY2Vsb2FkLCBhIHBhcmFtZXRlciBvZiB0eXBlIGJvb2wsIGNvdWxkIGVuYWJsZSBBRVIgdG8gY29udGludWUgdG8KLWJlIGluaXRpYXRlZCBhbHRob3VnaCBmaXJtd2FyZXMgaGF2ZSBubyBfT1NDIHN1cHBvcnQuIFRvIGVuYWJsZSB0aGUKLXdhbGthcm91bmQsIHBscy4gYWRkIGFlcmRyaXZlci5mb3JjZWxvYWQ9eSB0byBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIgbGluZQotd2hlbiBib290aW5nIGtlcm5lbC4gTm90ZSB0aGF0IGZvcmNlbG9hZD1uIGJ5IGRlZmF1bHQuCi0KLTIuMyBBRVIgZXJyb3Igb3V0cHV0Ci1XaGVuIGEgUENJLUUgQUVSIGVycm9yIGlzIGNhcHR1cmVkLCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgb3V0cHV0ZWQgdG8KLWNvbnNvbGUuIElmIGl0J3MgYSBjb3JyZWN0YWJsZSBlcnJvciwgaXQgaXMgb3V0cHV0ZWQgYXMgYSB3YXJuaW5nLgotT3RoZXJ3aXNlLCBpdCBpcyBwcmludGVkIGFzIGFuIGVycm9yLiBTbyB1c2VycyBjb3VsZCBjaG9vc2UgZGlmZmVyZW50Ci1sb2cgbGV2ZWwgdG8gZmlsdGVyIG91dCBjb3JyZWN0YWJsZSBlcnJvciBtZXNzYWdlcy4KLQotQmVsb3cgc2hvd3MgYW4gZXhhbXBsZS4KLSstLS0tLS0gUENJLUV4cHJlc3MgRGV2aWNlIEVycm9yIC0tLS0tKwotRXJyb3IgU2V2ZXJpdHkgICAgICAgICAgOiBVbmNvcnJlY3RlZCAoRmF0YWwpCi1QQ0lFIEJ1cyBFcnJvciB0eXBlICAgICA6IFRyYW5zYWN0aW9uIExheWVyCi1VbnN1cHBvcnRlZCBSZXF1ZXN0ICAgICA6IEZpcnN0Ci1SZXF1ZXN0ZXIgSUQgICAgICAgICAgICA6IDA1MDAKLVZlbmRvcklEPTgwODZoLCBEZXZpY2VJRD0wMzI5aCwgQnVzPTA1aCwgRGV2aWNlPTAwaCwgRnVuY3Rpb249MDBoCi1UTEIgSGVhZGVyOgotMDQwMDAwMDEgMDAyMDBhMDMgMDUwMTAwMDAgMDAwNTAxMDAKLQotSW4gdGhlIGV4YW1wbGUsICdSZXF1ZXN0ZXIgSUQnIG1lYW5zIHRoZSBJRCBvZiB0aGUgZGV2aWNlIHdobyBzZW5kcwotdGhlIGVycm9yIG1lc3NhZ2UgdG8gcm9vdCBwb3J0LiBQbHMuIHJlZmVyIHRvIHBjaSBleHByZXNzIHNwZWNzIGZvcgotb3RoZXIgZmllbGRzLgotCi0KLTMuIERldmVsb3BlciBHdWlkZQotCi1UbyBlbmFibGUgQUVSIGF3YXJlIHN1cHBvcnQgcmVxdWlyZXMgYSBzb2Z0d2FyZSBkcml2ZXIgdG8gY29uZmlndXJlCi10aGUgQUVSIGNhcGFiaWxpdHkgc3RydWN0dXJlIHdpdGhpbiBpdHMgZGV2aWNlIGFuZCB0byBwcm92aWRlIGNhbGxiYWNrcy4KLQotVG8gc3VwcG9ydCBBRVIgYmV0dGVyLCBkZXZlbG9wZXJzIG5lZWQgdW5kZXJzdGFuZCBob3cgQUVSIGRvZXMgd29yawotZmlyc3RseS4KLQotUENJIEV4cHJlc3MgZXJyb3JzIGFyZSBjbGFzc2lmaWVkIGludG8gdHdvIHR5cGVzOiBjb3JyZWN0YWJsZSBlcnJvcnMKLWFuZCB1bmNvcnJlY3RhYmxlIGVycm9ycy4gVGhpcyBjbGFzc2lmaWNhdGlvbiBpcyBiYXNlZCBvbiB0aGUgaW1wYWN0cwotb2YgdGhvc2UgZXJyb3JzLCB3aGljaCBtYXkgcmVzdWx0IGluIGRlZ3JhZGVkIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uCi1mYWlsdXJlLgotCi1Db3JyZWN0YWJsZSBlcnJvcnMgcG9zZSBubyBpbXBhY3RzIG9uIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZQotaW50ZXJmYWNlLiBUaGUgUENJIEV4cHJlc3MgcHJvdG9jb2wgY2FuIHJlY292ZXIgd2l0aG91dCBhbnkgc29mdHdhcmUKLWludGVydmVudGlvbiBvciBhbnkgbG9zcyBvZiBkYXRhLiBUaGVzZSBlcnJvcnMgYXJlIGRldGVjdGVkIGFuZAotY29ycmVjdGVkIGJ5IGhhcmR3YXJlLiBVbmxpa2UgY29ycmVjdGFibGUgZXJyb3JzLCB1bmNvcnJlY3RhYmxlCi1lcnJvcnMgaW1wYWN0IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGludGVyZmFjZS4gVW5jb3JyZWN0YWJsZSBlcnJvcnMKLWNhbiBjYXVzZSBhIHBhcnRpY3VsYXIgdHJhbnNhY3Rpb24gb3IgYSBwYXJ0aWN1bGFyIFBDSSBFeHByZXNzIGxpbmsKLXRvIGJlIHVucmVsaWFibGUuIERlcGVuZGluZyBvbiB0aG9zZSBlcnJvciBjb25kaXRpb25zLCB1bmNvcnJlY3RhYmxlCi1lcnJvcnMgYXJlIGZ1cnRoZXIgY2xhc3NpZmllZCBpbnRvIG5vbi1mYXRhbCBlcnJvcnMgYW5kIGZhdGFsIGVycm9ycy4KLU5vbi1mYXRhbCBlcnJvcnMgY2F1c2UgdGhlIHBhcnRpY3VsYXIgdHJhbnNhY3Rpb24gdG8gYmUgdW5yZWxpYWJsZSwKLWJ1dCB0aGUgUENJIEV4cHJlc3MgbGluayBpdHNlbGYgaXMgZnVsbHkgZnVuY3Rpb25hbC4gRmF0YWwgZXJyb3JzLCBvbgotdGhlIG90aGVyIGhhbmQsIGNhdXNlIHRoZSBsaW5rIHRvIGJlIHVucmVsaWFibGUuCi0KLVdoZW4gQUVSIGlzIGVuYWJsZWQsIGEgUENJIEV4cHJlc3MgZGV2aWNlIHdpbGwgYXV0b21hdGljYWxseSBzZW5kIGFuCi1lcnJvciBtZXNzYWdlIHRvIHRoZSBQQ0lFIHJvb3QgcG9ydCBhYm92ZSBpdCB3aGVuIHRoZSBkZXZpY2UgY2FwdHVyZXMKLWFuIGVycm9yLiBUaGUgUm9vdCBQb3J0LCB1cG9uIHJlY2VpdmluZyBhbiBlcnJvciByZXBvcnRpbmcgbWVzc2FnZSwKLWludGVybmFsbHkgcHJvY2Vzc2VzIGFuZCBsb2dzIHRoZSBlcnJvciBtZXNzYWdlIGluIGl0cyBQQ0kgRXhwcmVzcwotY2FwYWJpbGl0eSBzdHJ1Y3R1cmUuIEVycm9yIGluZm9ybWF0aW9uIGJlaW5nIGxvZ2dlZCBpbmNsdWRlcyBzdG9yaW5nCi10aGUgZXJyb3IgcmVwb3J0aW5nIGFnZW50J3MgcmVxdWVzdG9yIElEIGludG8gdGhlIEVycm9yIFNvdXJjZQotSWRlbnRpZmljYXRpb24gUmVnaXN0ZXJzIGFuZCBzZXR0aW5nIHRoZSBlcnJvciBiaXRzIG9mIHRoZSBSb290IEVycm9yCi1TdGF0dXMgUmVnaXN0ZXIgYWNjb3JkaW5nbHkuIElmIEFFUiBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCBpbiBSb290Ci1FcnJvciBDb21tYW5kIFJlZ2lzdGVyLCB0aGUgUm9vdCBQb3J0IGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgaWYgYW4KLWVycm9yIGlzIGRldGVjdGVkLgotCi1Ob3RlIHRoYXQgdGhlIGVycm9ycyBhcyBkZXNjcmliZWQgYWJvdmUgYXJlIHJlbGF0ZWQgdG8gdGhlIFBDSSBFeHByZXNzCi1oaWVyYXJjaHkgYW5kIGxpbmtzLiBUaGVzZSBlcnJvcnMgZG8gbm90IGluY2x1ZGUgYW55IGRldmljZSBzcGVjaWZpYwotZXJyb3JzIGJlY2F1c2UgZGV2aWNlIHNwZWNpZmljIGVycm9ycyB3aWxsIHN0aWxsIGdldCBzZW50IGRpcmVjdGx5IHRvCi10aGUgZGV2aWNlIGRyaXZlci4KLQotMy4xIENvbmZpZ3VyZSB0aGUgQUVSIGNhcGFiaWxpdHkgc3RydWN0dXJlCi0KLUFFUiBhd2FyZSBkcml2ZXJzIG9mIFBDSSBFeHByZXNzIGNvbXBvbmVudCBuZWVkIGNoYW5nZSB0aGUgZGV2aWNlCi1jb250cm9sIHJlZ2lzdGVycyB0byBlbmFibGUgQUVSLiBUaGV5IGFsc28gY291bGQgY2hhbmdlIEFFUiByZWdpc3RlcnMsCi1pbmNsdWRpbmcgbWFzayBhbmQgc2V2ZXJpdHkgcmVnaXN0ZXJzLiBIZWxwZXIgZnVuY3Rpb24KLXBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgY291bGQgYmUgdXNlZCB0byBlbmFibGUgQUVSLiBTZWUKLXNlY3Rpb24gMy4zLgotCi0zLjIuIFByb3ZpZGUgY2FsbGJhY2tzCi0KLTMuMi4xIGNhbGxiYWNrIHJlc2V0X2xpbmsgdG8gcmVzZXQgcGNpIGV4cHJlc3MgbGluawotCi1UaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVzZXQgdGhlIHBjaSBleHByZXNzIHBoeXNpY2FsIGxpbmsgd2hlbiBhCi1mYXRhbCBlcnJvciBoYXBwZW5zLiBUaGUgcm9vdCBwb3J0IGFlciBzZXJ2aWNlIGRyaXZlciBwcm92aWRlcyBhCi1kZWZhdWx0IHJlc2V0X2xpbmsgZnVuY3Rpb24sIGJ1dCBkaWZmZXJlbnQgdXBzdHJlYW0gcG9ydHMgbWlnaHQKLWhhdmUgZGlmZmVyZW50IHNwZWNpZmljYXRpb25zIHRvIHJlc2V0IHBjaSBleHByZXNzIGxpbmssIHNvIGFsbAotdXBzdHJlYW0gcG9ydHMgc2hvdWxkIHByb3ZpZGUgdGhlaXIgb3duIHJlc2V0X2xpbmsgZnVuY3Rpb25zLgotCi1JbiBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyLCBhIG5ldyBwb2ludGVyLCByZXNldF9saW5rLCBpcwotYWRkZWQuCi0KLXBjaV9lcnNfcmVzdWx0X3QgKCpyZXNldF9saW5rKSAoc3RydWN0IHBjaV9kZXYgKmRldik7Ci0KLVNlY3Rpb24gMy4yLjIuMiBwcm92aWRlcyBtb3JlIGRldGFpbGVkIGluZm8gb24gd2hlbiB0byBjYWxsCi1yZXNldF9saW5rLgotCi0zLjIuMiBQQ0kgZXJyb3ItcmVjb3ZlcnkgY2FsbGJhY2tzCi0KLVRoZSBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBkcml2ZXIgdXNlcyBlcnJvciBjYWxsYmFja3MgdG8gY29vcmRpbmF0ZQotd2l0aCBkb3duc3RyZWFtIGRldmljZSBkcml2ZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGhpZXJhcmNoeSBpbiBxdWVzdGlvbgotd2hlbiBwZXJmb3JtaW5nIGVycm9yIHJlY292ZXJ5IGFjdGlvbnMuCi0KLURhdGEgc3RydWN0IHBjaV9kcml2ZXIgaGFzIGEgcG9pbnRlciwgZXJyX2hhbmRsZXIsIHRvIHBvaW50IHRvCi1wY2lfZXJyb3JfaGFuZGxlcnMgd2hvIGNvbnNpc3RzIG9mIGEgY291cGxlIG9mIGNhbGxiYWNrIGZ1bmN0aW9uCi1wb2ludGVycy4gQUVSIGRyaXZlciBmb2xsb3dzIHRoZSBydWxlcyBkZWZpbmVkIGluCi1wY2ktZXJyb3ItcmVjb3ZlcnkudHh0IGV4Y2VwdCBwY2kgZXhwcmVzcyBzcGVjaWZpYyBwYXJ0cyAoZS5nLgotcmVzZXRfbGluaykuIFBscy4gcmVmZXIgdG8gcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBmb3IgZGV0YWlsZWQKLWRlZmluaXRpb25zIG9mIHRoZSBjYWxsYmFja3MuCi0KLUJlbG93IHNlY3Rpb25zIHNwZWNpZnkgd2hlbiB0byBjYWxsIHRoZSBlcnJvciBjYWxsYmFjayBmdW5jdGlvbnMuCi0KLTMuMi4yLjEgQ29ycmVjdGFibGUgZXJyb3JzCi0KLUNvcnJlY3RhYmxlIGVycm9ycyBwb3NlIG5vIGltcGFjdHMgb24gdGhlIGZ1bmN0aW9uYWxpdHkgb2YKLXRoZSBpbnRlcmZhY2UuIFRoZSBQQ0kgRXhwcmVzcyBwcm90b2NvbCBjYW4gcmVjb3ZlciB3aXRob3V0IGFueQotc29mdHdhcmUgaW50ZXJ2ZW50aW9uIG9yIGFueSBsb3NzIG9mIGRhdGEuIFRoZXNlIGVycm9ycyBkbyBub3QKLXJlcXVpcmUgYW55IHJlY292ZXJ5IGFjdGlvbnMuIFRoZSBBRVIgZHJpdmVyIGNsZWFycyB0aGUgZGV2aWNlJ3MKLWNvcnJlY3RhYmxlIGVycm9yIHN0YXR1cyByZWdpc3RlciBhY2NvcmRpbmdseSBhbmQgbG9ncyB0aGVzZSBlcnJvcnMuCi0KLTMuMi4yLjIgTm9uLWNvcnJlY3RhYmxlIChub24tZmF0YWwgYW5kIGZhdGFsKSBlcnJvcnMKLQotSWYgYW4gZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgYSBub24tZmF0YWwgZXJyb3IsIHBlcmZvcm1pbmcgbGluayByZXNldAotYXQgdXBzdHJlYW0gaXMgbm90IHJlcXVpcmVkLiBUaGUgQUVSIGRyaXZlciBjYWxscyBlcnJvcl9kZXRlY3RlZChkZXYsCi1wY2lfY2hhbm5lbF9pb19ub3JtYWwpIHRvIGFsbCBkcml2ZXJzIGFzc29jaWF0ZWQgd2l0aGluIGEgaGllcmFyY2h5IGluCi1xdWVzdGlvbi4gZm9yIGV4YW1wbGUsCi1FbmRQb2ludDw9PT5Eb3duc3RyZWFtUG9ydCBCPD09PlVwc3RyZWFtUG9ydCBBPD09PlJvb3RQb3J0LgotSWYgVXBzdHJlYW0gcG9ydCBBIGNhcHR1cmVzIGFuIEFFUiBlcnJvciwgdGhlIGhpZXJhcmNoeSBjb25zaXN0cyBvZgotRG93bnN0cmVhbSBwb3J0IEIgYW5kIEVuZFBvaW50LgotCi1BIGRyaXZlciBtYXkgcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSLAotUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCwgb3IgUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCwgZGVwZW5kaW5nIG9uCi13aGV0aGVyIGl0IGNhbiByZWNvdmVyIG9yIHRoZSBBRVIgZHJpdmVyIGNhbGxzIG1taW9fZW5hYmxlZCBhcyBuZXh0LgotCi1JZiBhbiBlcnJvciBtZXNzYWdlIGluZGljYXRlcyBhIGZhdGFsIGVycm9yLCBrZXJuZWwgd2lsbCBicm9hZGNhc3QKLWVycm9yX2RldGVjdGVkKGRldiwgcGNpX2NoYW5uZWxfaW9fZnJvemVuKSB0byBhbGwgZHJpdmVycyB3aXRoaW4KLWEgaGllcmFyY2h5IGluIHF1ZXN0aW9uLiBUaGVuLCBwZXJmb3JtaW5nIGxpbmsgcmVzZXQgYXQgdXBzdHJlYW0gaXMKLW5lY2Vzc2FyeS4gQXMgZGlmZmVyZW50IGtpbmRzIG9mIGRldmljZXMgbWlnaHQgdXNlIGRpZmZlcmVudCBhcHByb2FjaGVzCi10byByZXNldCBsaW5rLCBBRVIgcG9ydCBzZXJ2aWNlIGRyaXZlciBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRoZQotZnVuY3Rpb24gdG8gcmVzZXQgbGluay4gRmlyc3RseSwga2VybmVsIGxvb2tzIGZvciBpZiB0aGUgdXBzdHJlYW0KLWNvbXBvbmVudCBoYXMgYW4gYWVyIGRyaXZlci4gSWYgaXQgaGFzLCBrZXJuZWwgdXNlcyB0aGUgcmVzZXRfbGluawotY2FsbGJhY2sgb2YgdGhlIGFlciBkcml2ZXIuIElmIHRoZSB1cHN0cmVhbSBjb21wb25lbnQgaGFzIG5vIGFlciBkcml2ZXIKLWFuZCB0aGUgcG9ydCBpcyBkb3duc3RyZWFtIHBvcnQsIHdlIHdpbGwgdXNlIHRoZSBhZXIgZHJpdmVyIG9mIHRoZQotcm9vdCBwb3J0IHdobyByZXBvcnRzIHRoZSBBRVIgZXJyb3IuIEFzIGZvciB1cHN0cmVhbSBwb3J0cywKLXRoZXkgc2hvdWxkIHByb3ZpZGUgdGhlaXIgb3duIGFlciBzZXJ2aWNlIGRyaXZlcnMgd2l0aCByZXNldF9saW5rCi1mdW5jdGlvbi4gSWYgZXJyb3JfZGV0ZWN0ZWQgcmV0dXJucyBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUiBhbmQKLXJlc2V0X2xpbmsgcmV0dXJucyBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQsIHRoZSBlcnJvciBoYW5kbGluZyBnb2VzCi10byBtbWlvX2VuYWJsZWQuCi0KLTMuMyBoZWxwZXIgZnVuY3Rpb25zCi0KLTMuMy4xIGludCBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLXBjaV9maW5kX2Flcl9jYXBhYmlsaXR5IGxvY2F0ZXMgdGhlIFBDSSBFeHByZXNzIEFFUiBjYXBhYmlsaXR5Ci1pbiB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIElmIHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0Ci1QQ0ktRXhwcmVzcyBBRVIsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuCi0KLTMuMy4yIGludCBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBlbmFibGVzIHRoZSBkZXZpY2UgdG8gc2VuZCBlcnJvcgotbWVzc2FnZXMgdG8gcm9vdCBwb3J0IHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuIE5vdGUgdGhhdCBkZXZpY2VzCi1kb24ndCBlbmFibGUgdGhlIGVycm9yIHJlcG9ydGluZyBieSBkZWZhdWx0LCBzbyBkZXZpY2UgZHJpdmVycyBuZWVkCi1jYWxsIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIGl0LgotCi0zLjMuMyBpbnQgcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7Ci1wY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBkaXNhYmxlcyB0aGUgZGV2aWNlIHRvIHNlbmQgZXJyb3IKLW1lc3NhZ2VzIHRvIHJvb3QgcG9ydCB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLgotCi0zLjMuNCBpbnQgcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7Ci1wY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyBjbGVhbnVwcyB0aGUgdW5jb3JyZWN0YWJsZQotZXJyb3Igc3RhdHVzIHJlZ2lzdGVyLgotCi0zLjQgRnJlcXVlbnQgQXNrZWQgUXVlc3Rpb25zCi0KLVE6IFdoYXQgaGFwcGVucyBpZiBhIFBDSSBFeHByZXNzIGRldmljZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZSBhbgotZXJyb3IgcmVjb3ZlcnkgaGFuZGxlciAocGNpX2RyaXZlci0+ZXJyX2hhbmRsZXIgaXMgZXF1YWwgdG8gTlVMTCk/Ci0KLUE6IFRoZSBkZXZpY2VzIGF0dGFjaGVkIHdpdGggdGhlIGRyaXZlciB3b24ndCBiZSByZWNvdmVyZWQuIElmIHRoZQotZXJyb3IgaXMgZmF0YWwsIGtlcm5lbCB3aWxsIHByaW50IG91dCB3YXJuaW5nIG1lc3NhZ2VzLiBQbGVhc2UgcmVmZXIKLXRvIHNlY3Rpb24gMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotUTogV2hhdCBoYXBwZW5zIGlmIGFuIHVwc3RyZWFtIHBvcnQgc2VydmljZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZQotY2FsbGJhY2sgcmVzZXRfbGluaz8KLQotQTogRmF0YWwgZXJyb3IgcmVjb3Zlcnkgd2lsbCBmYWlsIGlmIHRoZSBlcnJvcnMgYXJlIHJlcG9ydGVkIGJ5IHRoZQotdXBzdHJlYW0gcG9ydHMgd2hvIGFyZSBhdHRhY2hlZCBieSB0aGUgc2VydmljZSBkcml2ZXIuCi0KLVE6IEhvdyBkb2VzIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgZGVhbCB3aXRoIGRyaXZlciB0aGF0IGlzIG5vdCBQQ0kKLUV4cHJlc3MgYXdhcmU/Ci0KLUE6IFRoaXMgaW5mcmFzdHJ1Y3R1cmUgY2FsbHMgdGhlIGVycm9yIGNhbGxiYWNrIGZ1bmN0aW9ucyBvZiB0aGUKLWRyaXZlciB3aGVuIGFuIGVycm9yIGhhcHBlbnMuIEJ1dCBpZiB0aGUgZHJpdmVyIGlzIG5vdCBhd2FyZSBvZgotUENJIEV4cHJlc3MsIHRoZSBkZXZpY2UgbWlnaHQgbm90IHJlcG9ydCBpdHMgb3duIGVycm9ycyB0byByb290Ci1wb3J0LgotCi1ROiBXaGF0IG1vZGlmaWNhdGlvbnMgd2lsbCB0aGF0IGRyaXZlciBuZWVkIHRvIG1ha2UgaXQgY29tcGF0aWJsZQotd2l0aCB0aGUgUENJIEV4cHJlc3MgQUVSIFJvb3QgZHJpdmVyPwotCi1BOiBJdCBjb3VsZCBjYWxsIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGVuYWJsZSBBRVIgaW4gZGV2aWNlcyBhbmQKLWNsZWFudXAgdW5jb3JyZWN0YWJsZSBzdGF0dXMgcmVnaXN0ZXIuIFBscy4gcmVmZXIgdG8gc2VjdGlvbiAzLjMuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wbS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhODU4OWEuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9wbS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotICAgICAgICAgICAgICAgTGludXggUG93ZXIgTWFuYWdlbWVudCBTdXBwb3J0Ci0KLVRoaXMgZG9jdW1lbnQgYnJpZWZseSBkZXNjcmliZXMgaG93IHRvIHVzZSBwb3dlciBtYW5hZ2VtZW50IHdpdGggeW91cgotTGludXggc3lzdGVtIGFuZCBob3cgdG8gYWRkIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCB0byBMaW51eCBkcml2ZXJzLgotCi1BUE0gb3IgQUNQST8KLS0tLS0tLS0tLS0tLQotSWYgeW91IGhhdmUgYSByZWxhdGl2ZWx5IHJlY2VudCB4ODYgbW9iaWxlLCBkZXNrdG9wLCBvciBzZXJ2ZXIgc3lzdGVtLAotb2RkcyBhcmUgaXQgc3VwcG9ydHMgZWl0aGVyIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgKEFQTSkgb3IKLUFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSAoQUNQSSkuICBBQ1BJIGlzIHRoZSBuZXdlcgotb2YgdGhlIHR3byB0ZWNobm9sb2dpZXMgYW5kIHB1dHMgcG93ZXIgbWFuYWdlbWVudCBpbiB0aGUgaGFuZHMgb2YgdGhlCi1vcGVyYXRpbmcgc3lzdGVtLCBhbGxvd2luZyBmb3IgbW9yZSBpbnRlbGxpZ2VudCBwb3dlciBtYW5hZ2VtZW50IHRoYW4KLWlzIHBvc3NpYmxlIHdpdGggQklPUyBjb250cm9sbGVkIEFQTS4KLQotVGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB3aGljaCwgaWYgZWl0aGVyLCB5b3VyIHN5c3RlbSBzdXBwb3J0cyBpcyB0bwotYnVpbGQgYSBrZXJuZWwgd2l0aCBib3RoIEFDUEkgYW5kIEFQTSBlbmFibGVkIChhcyBvZiAyLjMueCBBQ1BJIGlzCi1lbmFibGVkIGJ5IGRlZmF1bHQpLiAgSWYgYSB3b3JraW5nIEFDUEkgaW1wbGVtZW50YXRpb24gaXMgZm91bmQsIHRoZQotQUNQSSBkcml2ZXIgd2lsbCBvdmVycmlkZSBhbmQgZGlzYWJsZSBBUE0sIG90aGVyd2lzZSB0aGUgQVBNIGRyaXZlcgotd2lsbCBiZSB1c2VkLgotCi1Obywgc29ycnksIHlvdSBjYW5ub3QgaGF2ZSBib3RoIEFDUEkgYW5kIEFQTSBlbmFibGVkIGFuZCBydW5uaW5nIGF0Ci1vbmNlLiAgU29tZSBwZW9wbGUgd2l0aCBicm9rZW4gQUNQSSBvciBicm9rZW4gQVBNIGltcGxlbWVudGF0aW9ucwotd291bGQgbGlrZSB0byB1c2UgYm90aCB0byBnZXQgYSBmdWxsIHNldCBvZiB3b3JraW5nIGZlYXR1cmVzLCBidXQgeW91Ci1zaW1wbHkgY2Fubm90IG1peCBhbmQgbWF0Y2ggdGhlIHR3by4gIE9ubHkgb25lIHBvd2VyIG1hbmFnZW1lbnQKLWludGVyZmFjZSBjYW4gYmUgaW4gY29udHJvbCBvZiB0aGUgbWFjaGluZSBhdCBvbmNlLiAgVGhpbmsgYWJvdXQgaXQuLgotCi1Vc2VyLXNwYWNlIERhZW1vbnMKLS0tLS0tLS0tLS0tLS0tLS0tLQotQm90aCBBUE0gYW5kIEFDUEkgcmVseSBvbiB1c2VyLXNwYWNlIGRhZW1vbnMsIGFwbWQgYW5kIGFjcGlkCi1yZXNwZWN0aXZlbHksIHRvIGJlIGNvbXBsZXRlbHkgZnVuY3Rpb25hbC4gIE9idGFpbiBib3RoIG9mIHRoZXNlCi1kYWVtb25zIGZyb20geW91ciBMaW51eCBkaXN0cmlidXRpb24gb3IgZnJvbSB0aGUgSW50ZXJuZXQgKHNlZSBiZWxvdykKLWFuZCBiZSBzdXJlIHRoYXQgdGhleSBhcmUgc3RhcnRlZCBzb21ldGltZSBpbiB0aGUgc3lzdGVtIGJvb3QgcHJvY2Vzcy4KLUdvIGFoZWFkIGFuZCBzdGFydCBib3RoLiAgSWYgQUNQSSBvciBBUE0gaXMgbm90IGF2YWlsYWJsZSBvbiB5b3VyCi1zeXN0ZW0gdGhlIGFzc29jaWF0ZWQgZGFlbW9uIHdpbGwgZXhpdCBncmFjZWZ1bGx5LgotCi0gIGFwbWQ6ICAgaHR0cDovL3dvcmxkdmlzaW9ucy5jYS9+YXBlbndhcnIvYXBtZC8KLSAgYWNwaWQ6ICBodHRwOi8vYWNwaWQuc2YubmV0LwotCi1Ecml2ZXIgSW50ZXJmYWNlIC0tIE9CU09MRVRFLCBETyBOT1QgVVNFIQotLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqKioqKioqKioqKioqKioqKioKLQotTm90ZTogcG1fcmVnaXN0ZXIoKSwgcG1fYWNjZXNzKCksIHBtX2Rldl9pZGxlKCkgYW5kIGZyaWVuZHMgYXJlCi1vYnNvbGV0ZS4gUGxlYXNlIGRvIG5vdCB1c2UgdGhlbS4gSW5zdGVhZCB5b3Ugc2hvdWxkIHByb3Blcmx5IGhvb2sKLXlvdXIgZHJpdmVyIGludG8gdGhlIGRyaXZlciBtb2RlbCwgYW5kIHVzZSBpdHMgc3VzcGVuZCgpL3Jlc3VtZSgpCi1jYWxsYmFja3MgdG8gZG8gdGhpcyBraW5kIG9mIHN0dWZmLgotCi1JZiB5b3UgYXJlIHdyaXRpbmcgYSBuZXcgZHJpdmVyIG9yIG1haW50YWluaW5nIGFuIG9sZCBkcml2ZXIsIGl0Ci1zaG91bGQgaW5jbHVkZSBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuICBXaXRob3V0IHBvd2VyIG1hbmFnZW1lbnQKLXN1cHBvcnQsIGEgc2luZ2xlIGRyaXZlciBtYXkgcHJldmVudCBhIHN5c3RlbSB3aXRoIHBvd2VyIG1hbmFnZW1lbnQKLWNhcGFiaWxpdGllcyBmcm9tIGV2ZXIgYmVpbmcgYWJsZSB0byBzdXNwZW5kIChzYWZlbHkpLgotCi1PdmVydmlldzoKLTEpIFJlZ2lzdGVyIGVhY2ggaW5zdGFuY2Ugb2YgYSBkZXZpY2Ugd2l0aCAicG1fcmVnaXN0ZXIiCi0yKSBDYWxsICJwbV9hY2Nlc3MiIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGhhcmR3YXJlLgotICAgKHRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgaGFyZHdhcmUgaXMgYXdha2UgYW5kIHJlYWR5KQotMykgWW91ciAicG1fY2FsbGJhY2siIGlzIGNhbGxlZCBiZWZvcmUgZ29pbmcgaW50byBhCi0gICBzdXNwZW5kIHN0YXRlIChBQ1BJIEQxLUQzKSBvciBhZnRlciByZXN1bWluZyAoQUNQSSBEMCkKLSAgIGZyb20gYSBzdXNwZW5kLgotNCkgQ2FsbCAicG1fZGV2X2lkbGUiIHdoZW4gdGhlIGRldmljZSBpcyBub3QgYmVpbmcgdXNlZAotICAgKG9wdGlvbmFsIGJ1dCB3aWxsIGltcHJvdmUgZGV2aWNlIGlkbGUgZGV0ZWN0aW9uKQotNSkgV2hlbiB1bmxvYWRlZCwgdW5yZWdpc3RlciB0aGUgZGV2aWNlIHdpdGggInBtX3VucmVnaXN0ZXIiCi0KLS8qCi0gKiBEZXNjcmlwdGlvbjogUmVnaXN0ZXIgYSBkZXZpY2Ugd2l0aCB0aGUgcG93ZXItbWFuYWdlbWVudCBzdWJzeXN0ZW0KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogICB0eXBlIC0gZGV2aWNlIHR5cGUgKFBDSSBkZXZpY2UsIHN5c3RlbSBkZXZpY2UsIC4uLikKLSAqICAgaWQgLSBpbnN0YW5jZSBudW1iZXIgb3IgdW5pcXVlIGlkZW50aWZpZXIKLSAqICAgY2JhY2sgLSByZXF1ZXN0IGhhbmRsZXIgY2FsbGJhY2sgKHN1c3BlbmQsIHJlc3VtZSwgLi4uKQotICoKLSAqIFJldHVybnM6IFJlZ2lzdGVyZWQgUE0gZGV2aWNlIG9yIE5VTEwgb24gZXJyb3IKLSAqCi0gKiBFeGFtcGxlczoKLSAqICAgZGV2ID0gcG1fcmVnaXN0ZXIoUE1fU1lTX0RFViwgUE1fU1lTX1ZHQSwgdmdhX2NhbGxiYWNrKTsKLSAqCi0gKiAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2KC4uLik7Ci0gKiAgIGRldiA9IHBtX3JlZ2lzdGVyKFBNX1BDSV9ERVYsIFBNX1BDSV9JRChwY2lfZGV2KSwgY2FsbGJhY2spOwotICovCi1zdHJ1Y3QgcG1fZGV2ICpwbV9yZWdpc3RlcihwbV9kZXZfdCB0eXBlLCB1bnNpZ25lZCBsb25nIGlkLCBwbV9jYWxsYmFjayBjYmFjayk7Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjogVW5yZWdpc3RlciBhIGRldmljZSB3aXRoIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN1YnN5c3RlbQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgIGRldiAtIFBNIGRldmljZSBwcmV2aW91c2x5IHJldHVybmVkIGZyb20gcG1fcmVnaXN0ZXIKLSAqLwotdm9pZCBwbV91bnJlZ2lzdGVyKHN0cnVjdCBwbV9kZXYgKmRldik7Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjogVW5yZWdpc3RlciBhbGwgZGV2aWNlcyB3aXRoIGEgbWF0Y2hpbmcgY2FsbGJhY2sgZnVuY3Rpb24KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogICBjYmFjayAtIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCByZXF1ZXN0IGNhbGxiYWNrCi0gKgotICogTm90ZXM6IFByb3ZpZGVkIGZvciBlYXNpZXIgcG9ydGluZyBmcm9tIG9sZCBBUE0gaW50ZXJmYWNlCi0gKi8KLXZvaWQgcG1fdW5yZWdpc3Rlcl9hbGwocG1fY2FsbGJhY2sgY2JhY2spOwotCi0vKgotICogUG93ZXIgbWFuYWdlbWVudCByZXF1ZXN0IGNhbGxiYWNrCi0gKgotICogUGFyYW1ldGVyczoKLSAqICAgZGV2IC0gUE0gZGV2aWNlIHByZXZpb3VzbHkgcmV0dXJuZWQgZnJvbSBwbV9yZWdpc3RlcgotICogICBycXN0IC0gcmVxdWVzdCB0eXBlCi0gKiAgIGRhdGEgLSBkYXRhLCBpZiBhbnksIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdAotICoKLSAqIFJldHVybnM6IDAgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bAotICogICAgICAgICAgRUlOVkFMIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBzdXBwb3J0ZWQKLSAqICAgICAgICAgIEVCVVNZIGlmIHRoZSBkZXZpY2UgaXMgbm93IGJ1c3kgYW5kIGNhbm5vdCBoYW5kbGUgdGhlIHJlcXVlc3QKLSAqICAgICAgICAgIEVOT01FTSBpZiB0aGUgZGV2aWNlIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0IGR1ZSB0byBtZW1vcnkKLSAqICAgICAgICAgIAotICogRGV0YWlsczogVGhlIGRldmljZSByZXF1ZXN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUKLSAqICAgICAgICAgIGRldmljZS9zeXN0ZW0gZW50ZXJzIGEgc3VzcGVuZCBzdGF0ZSAoQUNQSSBEMS1EMykgb3IKLSAqICAgICAgICAgIG9yIGFmdGVyIHRoZSBkZXZpY2Uvc3lzdGVtIHJlc3VtZXMgZnJvbSBzdXNwZW5kIChBQ1BJIEQwKS4KLSAqICAgICAgICAgIEZvciBQTV9TVVNQRU5ELCB0aGUgQUNQSSBELXN0YXRlIGJlaW5nIGVudGVyZWQgaXMgcGFzc2VkCi0gKiAgICAgICAgICBhcyB0aGUgImRhdGEiIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjay4gIFRoZSBkZXZpY2UKLSAqICAgICAgICAgIGRyaXZlciBzaG91bGQgc2F2ZSAoUE1fU1VTUEVORCkgb3IgcmVzdG9yZSAoUE1fUkVTVU1FKQotICogICAgICAgICAgZGV2aWNlIGNvbnRleHQgd2hlbiB0aGUgcmVxdWVzdCBjYWxsYmFjayBpcyBjYWxsZWQuCi0gKgotICogICAgICAgICAgT25jZSBhIGRyaXZlciByZXR1cm5zIDAgKHN1Y2Nlc3MpIGZyb20gYSBzdXNwZW5kCi0gKiAgICAgICAgICByZXF1ZXN0LCBpdCBzaG91bGQgbm90IHByb2Nlc3MgYW55IGZ1cnRoZXIgcmVxdWVzdHMgb3IKLSAqICAgICAgICAgIGFjY2VzcyB0aGUgZGV2aWNlIGhhcmR3YXJlIHVudGlsIGEgY2FsbCB0byAicG1fYWNjZXNzIiBpcyBtYWRlLgotICovCi10eXBlZGVmIGludCAoKnBtX2NhbGxiYWNrKShzdHJ1Y3QgcG1fZGV2ICpkZXYsIHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpkYXRhKTsKLQotRHJpdmVyIERldGFpbHMKLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGlzIGp1c3QgYSBxdWljayBRJkEgYXMgYSBzdG9wZ2FwIHVudGlsIGEgcmVhbCBkcml2ZXIgd3JpdGVycycKLXBvd2VyIG1hbmFnZW1lbnQgZ3VpZGUgaXMgYXZhaWxhYmxlLgotCi1ROiBXaGVuIGlzIGEgZGV2aWNlIHN1c3BlbmRlZD8KLQotRGV2aWNlcyBjYW4gYmUgc3VzcGVuZGVkIGJhc2VkIG9uIGRpcmVjdCB1c2VyIHJlcXVlc3QgKGVnLiBsYXB0b3AgbGlkCi1jbG9zZXMpLCBzeXN0ZW0gcG93ZXIgcG9saWN5IChlZy4gIHNsZWVwIGFmdGVyIDMwIG1pbnV0ZXMgb2YgY29uc29sZQotaW5hY3Rpdml0eSksIG9yIGRldmljZSBwb3dlciBwb2xpY3kgKGVnLiBwb3dlciBkb3duIGRldmljZSBhZnRlciA1Ci1taW51dGVzIG9mIGluYWN0aXZpdHkpCi0KLVE6IE11c3QgYSBkcml2ZXIgaG9ub3IgYSBzdXNwZW5kIHJlcXVlc3Q/Ci0KLU5vLCBhIGRyaXZlciBjYW4gcmV0dXJuIC1FQlVTWSBmcm9tIGEgc3VzcGVuZCByZXF1ZXN0IGFuZCB0aGlzCi13aWxsIHN0b3AgdGhlIHN5c3RlbSBmcm9tIHN1c3BlbmRpbmcuICBXaGVuIGEgc3VzcGVuZCByZXF1ZXN0Ci1mYWlscywgYWxsIHN1c3BlbmRlZCBkZXZpY2VzIGFyZSByZXN1bWVkIGFuZCB0aGUgc3lzdGVtIGNvbnRpbnVlcwotdG8gcnVuLiAgU3VzcGVuZCBjYW4gYmUgcmV0cmllZCBhdCBhIGxhdGVyIHRpbWUuCi0KLVE6IENhbiB0aGUgZHJpdmVyIGJsb2NrIHN1c3BlbmQvcmVzdW1lIHJlcXVlc3RzPwotCi1ZZXMsIGEgZHJpdmVyIGNhbiBkZWxheSBpdHMgcmV0dXJuIGZyb20gYSBzdXNwZW5kIG9yIHJlc3VtZQotcmVxdWVzdCB1bnRpbCB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGhhbmRsZSByZXF1ZXN0cy4gIEl0Ci1pcyBhZHZhbnRhZ2VvdXMgdG8gcmV0dXJuIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgZnJvbSBhCi1yZXF1ZXN0IGFzIHN1c3BlbmQvcmVzdW1lIGFyZSBkb25lIHNlcmlhbGx5LgotCi1ROiBXaGF0IGNvbnRleHQgaXMgYSBzdXNwZW5kL3Jlc3VtZSBpbml0aWF0ZWQgZnJvbT8KLQotQSBzdXNwZW5kIG9yIHJlc3VtZSBpcyBpbml0aWF0ZWQgZnJvbSBhIGtlcm5lbCB0aHJlYWQgY29udGV4dC4KLUl0IGlzIHNhZmUgdG8gYmxvY2ssIGFsbG9jYXRlIG1lbW9yeSwgaW5pdGlhdGUgcmVxdWVzdHMKLW9yIGFueXRoaW5nIGVsc2UgeW91IGNhbiBkbyB3aXRoaW4gdGhlIGtlcm5lbC4KLQotUTogV2lsbCByZXF1ZXN0cyBjb250aW51ZSB0byBhcnJpdmUgYWZ0ZXIgYSBzdXNwZW5kPwotCi1Qb3NzaWJseS4gIEl0IGlzIHRoZSBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0byBxdWV1ZSgqKSwKLWZhaWwsIG9yIGRyb3AgYW55IHJlcXVlc3RzIHRoYXQgYXJyaXZlIGFmdGVyIHJldHVybmluZwotc3VjY2VzcyB0byBhIHN1c3BlbmQgcmVxdWVzdC4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZQotZHJpdmVyIG5vdCBhY2Nlc3MgaXRzIGRldmljZSB1bnRpbCBhZnRlciBpdCByZWNlaXZlcwotYSByZXN1bWUgcmVxdWVzdCBhcyB0aGUgZGV2aWNlJ3MgYnVzIG1heSBubyBsb25nZXIKLWJlIGFjdGl2ZS4KLQotKCopIElmIGEgZHJpdmVyIHF1ZXVlcyByZXF1ZXN0cyBmb3IgcHJvY2Vzc2luZyBhZnRlcgotICAgIHJlc3VtZSBiZSBhd2FyZSB0aGF0IHRoZSBkZXZpY2UsIG5ldHdvcmssIGV0Yy4KLSAgICBtaWdodCBiZSBpbiBhIGRpZmZlcmVudCBzdGF0ZSB0aGFuIGF0IHN1c3BlbmQgdGltZS4KLSAgICBJdCdzIHByb2JhYmx5IGJldHRlciB0byBkcm9wIHJlcXVlc3RzIHVubGVzcwotICAgIHRoZSBkcml2ZXIgaXMgYSBzdG9yYWdlIGRldmljZS4KLQotUTogRG8gSSBoYXZlIHRvIG1hbmFnZSBidXMtc3BlY2lmaWMgcG93ZXIgbWFuYWdlbWVudCByZWdpc3RlcnMKLQotTm8uICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGJ1cyBkcml2ZXIgdG8gbWFuYWdlCi1QQ0ksIFVTQiwgZXRjLiBwb3dlciBtYW5hZ2VtZW50IHJlZ2lzdGVycy4gIFRoZSBidXMgZHJpdmVyCi1vciB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2lsbCBhbHNvIGVuYWJsZSBhbnkKLXdha2Utb24gZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBkZXZpY2UgaGFzLgotCi1ROiBTbywgcmVhbGx5LCB3aGF0IGRvIEkgbmVlZCB0byBkbyB0byBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lPwotCi1Zb3UgbmVlZCB0byBzYXZlIGFueSBkZXZpY2UgY29udGV4dCB0aGF0IHdvdWxkCi1iZSBsb3N0IGlmIHRoZSBkZXZpY2Ugd2FzIHBvd2VyZWQgb2ZmIGFuZCB0aGVuIHJlc3RvcmUKLWl0IGF0IHJlc3VtZSB0aW1lLiAgV2hlbiBBQ1BJIGlzIGFjdGl2ZSwgdGhlcmUgYXJlCi10aHJlZSBsZXZlbHMgb2YgZGV2aWNlIHN1c3BlbmQgc3RhdGVzOyBEMSwgRDIsIGFuZCBEMy4KLShUaGUgc3VzcGVuZCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlICJkYXRhIiBhcmd1bWVudAotdG8gdGhlIGRldmljZSBjYWxsYmFjay4pICBXaXRoIEQzLCB0aGUgZGV2aWNlIGlzIHBvd2VyZWQKLW9mZiBhbmQgbG9zZXMgYWxsIGNvbnRleHQsIEQxIGFuZCBEMiBhcmUgc2hhbGxvd2VyIHBvd2VyCi1zdGF0ZXMgYW5kIHJlcXVpcmUgbGVzcyBkZXZpY2UgY29udGV4dCB0byBiZSBzYXZlZC4gIFRvCi1wbGF5IGl0IHNhZmUsIGp1c3Qgc2F2ZSBldmVyeXRoaW5nIGF0IHN1c3BlbmQgYW5kIHJlc3RvcmUKLWV2ZXJ5dGhpbmcgYXQgcmVzdW1lLgotCi1ROiBXaGVyZSBkbyBJIHN0b3JlIGRldmljZSBjb250ZXh0IGZvciBzdXNwZW5kPwotCi1Bbnl3aGVyZSBpbiBtZW1vcnksIGttYWxsb2MgYSBidWZmZXIgb3Igc3RvcmUgaXQKLWluIHRoZSBkZXZpY2UgZGVzY3JpcHRvci4gIFlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoZQotY29udGVudHMgb2YgbWVtb3J5IHdpbGwgYmUgcmVzdG9yZWQgYW5kIGFjY2Vzc2libGUKLWJlZm9yZSByZXN1bWUsIGV2ZW4gd2hlbiB0aGUgc3lzdGVtIHN1c3BlbmRzIHRvIGRpc2suCi0KLVE6IFdoYXQgZG8gSSBuZWVkIHRvIGRvIGZvciBBQ1BJIHZzLiBBUE0gdnMuIGV0Yz8KLQotRHJpdmVycyBuZWVkIG5vdCBiZSBhd2FyZSBvZiB0aGUgc3BlY2lmaWMgcG93ZXIgbWFuYWdlbWVudAotdGVjaG5vbG9neSB0aGF0IGlzIGFjdGl2ZS4gIFRoZXkganVzdCBuZWVkIHRvIGJlIGF3YXJlCi1vZiB3aGVuIHRoZSBvdmVybHlpbmcgcG93ZXIgbWFuYWdlbWVudCBzeXN0ZW0gcmVxdWVzdHMKLXRoYXQgdGhleSBzdXNwZW5kIG9yIHJlc3VtZS4KLQotUTogV2hhdCBhYm91dCBkZXZpY2UgZGVwZW5kZW5jaWVzPwotCi1XaGVuIGEgZHJpdmVyIHJlZ2lzdGVycyBhIGRldmljZSwgdGhlIHBvd2VyIG1hbmFnZW1lbnQKLXN1YnN5c3RlbSB1c2VzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCB0byBidWlsZCBhCi10cmVlIG9mIGRldmljZSBkZXBlbmRlbmNpZXMgKGVnLiBVU0IgZGV2aWNlIFggaXMgb24KLVVTQiBjb250cm9sbGVyIFkgd2hpY2ggaXMgb24gUENJIGJ1cyBaKSAgV2hlbiBwb3dlcgotbWFuYWdlbWVudCB3YW50cyB0byBzdXNwZW5kIGEgZGV2aWNlLCBpdCBmaXJzdCBzZW5kcwotYSBzdXNwZW5kIHJlcXVlc3QgdG8gaXRzIGRyaXZlciwgdGhlbiB0aGUgYnVzIGRyaXZlciwKLWFuZCBzbyBvbiB1cCB0byB0aGUgc3lzdGVtIGJ1cy4gIERldmljZSByZXN1bWVzCi1wcm9jZWVkIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCi0KLVE6IFdobyBkbyBJIGNvbnRhY3QgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQKLSAgIGVuYWJsaW5nIHBvd2VyIG1hbmFnZW1lbnQgZm9yIG15IHNwZWNpZmljIGRyaXZlci9kZXZpY2U/Ci0KLUFDUEkgRGV2ZWxvcG1lbnQgbWFpbGluZyBsaXN0OiBsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwotCi1TeXN0ZW0gSW50ZXJmYWNlIC0tIE9CU09MRVRFLCBETyBOT1QgVVNFIQotLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqKioqKioqKioqKioqKioqKioKLUlmIHlvdSBhcmUgcHJvdmlkaW5nIG5ldyBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgdG8gTGludXggKGllLgotYWRkaW5nIHN1cHBvcnQgZm9yIHNvbWV0aGluZyBsaWtlIEFQTSBvciBBQ1BJKSwgeW91IHNob3VsZAotY29tbXVuaWNhdGUgd2l0aCBkcml2ZXJzIHRocm91Z2ggdGhlIGV4aXN0aW5nIGdlbmVyaWMgcG93ZXIKLW1hbmFnZW1lbnQgaW50ZXJmYWNlLgotCi0vKgotICogU2VuZCBhIHJlcXVlc3QgdG8gYWxsIGRldmljZXMKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogICBycXN0IC0gcmVxdWVzdCB0eXBlCi0gKiAgIGRhdGEgLSBkYXRhLCBpZiBhbnksIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdAotICoKLSAqIFJldHVybnM6IDAgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bAotICogICAgICAgICAgU2VlICJwbV9jYWxsYmFjayIgcmV0dXJuIGZvciBlcnJvcnMKLSAqCi0gKiBEZXRhaWxzOiBXYWxrIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZXZpY2VzIGFuZCBjYWxsIHBtX3NlbmQKLSAqICAgICAgICAgIGZvciBlYWNoIHVudGlsIGNvbXBsZXRlIG9yIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgotICogICAgICAgICAgSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgZm9yIGEgc3VzcGVuZCByZXF1ZXN0LAotICogICAgICAgICAgcmV0dXJuIGFsbCBkZXZpY2VzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4gYmVmb3JlCi0gKiAgICAgICAgICB0aGUgc3VzcGVuZCByZXF1ZXN0LgotICovCi1pbnQgcG1fc2VuZF9hbGwocG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpOwotCi0vKgotICogRmluZCBhIG1hdGNoaW5nIGRldmljZQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgIHR5cGUgLSBkZXZpY2UgdHlwZSAoUENJIGRldmljZSwgc3lzdGVtIGRldmljZSwgb3IgMCB0byBtYXRjaCBhbGwgZGV2aWNlcykKLSAqICAgZnJvbSAtIHByZXZpb3VzIG1hdGNoIG9yIE5VTEwgdG8gc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nCi0gKgotICogUmV0dXJuczogTWF0Y2hpbmcgZGV2aWNlIG9yIE5VTEwgaWYgbm9uZSBmb3VuZAotICovCi1zdHJ1Y3QgcG1fZGV2ICpwbV9maW5kKHBtX2Rldl90IHR5cGUsIHN0cnVjdCBwbV9kZXYgKmZyb20pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vcG93ZXIvMDAtSU5ERVgKaW5kZXggOGRiNGU0MS4uYTU1ZDdmMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyLzAwLUlOREVYCkBAIC0xNCw2ICsxNCwxMiBAQAogCS0gUmVnaXN0ZXJpbmcgc3VzcGVuZCBub3RpZmllcnMgaW4gZGV2aWNlIGRyaXZlcnMKIHBjaS50eHQKIAktIEhvdyB0aGUgUENJIFN1YnN5c3RlbSBEb2VzIFBvd2VyIE1hbmFnZW1lbnQKK3BtLnR4dAorCS0gaW5mbyBvbiBMaW51eCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCitwbV9xb3NfaW50ZXJmYWNlLnR4dAorCS0gaW5mbyBvbiBMaW51eCBQTSBRdWFsaXR5IG9mIFNlcnZpY2UgaW50ZXJmYWNlCitwb3dlcl9zdXBwbHlfY2xhc3MudHh0CisJLSBUZWxscyB1c2Vyc3BhY2UgYWJvdXQgYmF0dGVyeSwgVVBTLCBBQyBvciBEQyBwb3dlciBzdXBwbHkgcHJvcGVydGllcwogczJyYW0udHh0CiAJLSBIb3cgdG8gZ2V0IHN1c3BlbmQgdG8gcmFtIHdvcmtpbmcgKGFuZCBkZWJ1ZyBpdCB3aGVuIGl0IGlzbid0KQogc3RhdGVzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQKaW5kZXggYzUzZDI2My4uNDIxZTdkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0CkBAIC0xOTYsNiArMTk2LDExIEBACiAKIFRoZSBwb2xpY3kgaXMgdGhhdCB0aGUgZGV2aWNlIHRyZWUgc2hvdWxkIG1hdGNoIGhhcmR3YXJlIGJ1cyB0b3BvbG9neS4KIChPciBhdCBsZWFzdCB0aGUgY29udHJvbCBidXMsIGZvciBkZXZpY2VzIHdoaWNoIHVzZSBtdWx0aXBsZSBidXNzZXMuKQorSW4gcGFydGljdWxhciwgdGhpcyBtZWFucyB0aGF0IGEgZGV2aWNlIHJlZ2lzdHJhdGlvbiBtYXkgZmFpbCBpZiB0aGUgcGFyZW50IG9mCit0aGUgZGV2aWNlIGlzIHN1c3BlbmRpbmcgKGllLiBoYXMgYmVlbiBjaG9zZW4gYnkgdGhlIFBNIGNvcmUgYXMgdGhlIG5leHQKK2RldmljZSB0byBzdXNwZW5kKSBvciBoYXMgYWxyZWFkeSBzdXNwZW5kZWQsIGFzIHdlbGwgYXMgYWZ0ZXIgYWxsIG9mIHRoZSBvdGhlcgorZGV2aWNlcyBoYXZlIGJlZW4gc3VzcGVuZGVkLiAgRGV2aWNlIGRyaXZlcnMgbXVzdCBiZSBwcmVwYXJlZCB0byBjb3BlIHdpdGggc3VjaAorc2l0dWF0aW9ucy4KIAogCiBTdXNwZW5kaW5nIERldmljZXMKQEAgLTMxMCw5ICszMTUsMTIgQEAKICAgICBQTV9FVkVOVF9TVVNQRU5EIC0tIHF1aWVzY2UgdGhlIGRyaXZlciBhbmQgcHV0IGhhcmR3YXJlIGludG8gYSBsb3ctcG93ZXIKIAlzdGF0ZS4gIFdoZW4gdXNlZCB3aXRoIHN5c3RlbSBzbGVlcCBzdGF0ZXMgbGlrZSAic3VzcGVuZC10by1SQU0iIG9yCiAJInN0YW5kYnkiLCB0aGUgdXBjb21pbmcgcmVzdW1lKCkgY2FsbCB3aWxsIG9mdGVuIGJlIGFibGUgdG8gcmVseSBvbgotCXN0YXRlIGtlcHQgaW4gaGFyZHdhcmUsIG9yIGlzc3VlIHN5c3RlbSB3YWtldXAgZXZlbnRzLiAgV2hlbiB1c2VkCi0JaW5zdGVhZCB3aXRoIHN1c3BlbmQtdG8tZGlzaywgZmV3IGRldmljZXMgc3VwcG9ydCB0aGlzIGNhcGFiaWxpdHk7Ci0JbW9zdCBhcmUgY29tcGxldGVseSBwb3dlcmVkIG9mZi4KKwlzdGF0ZSBrZXB0IGluIGhhcmR3YXJlLCBvciBpc3N1ZSBzeXN0ZW0gd2FrZXVwIGV2ZW50cy4KKworICAgIFBNX0VWRU5UX0hJQkVSTkFURSAtLSBQdXQgaGFyZHdhcmUgaW50byBhIGxvdy1wb3dlciBzdGF0ZSBhbmQgZW5hYmxlIHdha2V1cAorCWV2ZW50cyBhcyBhcHByb3ByaWF0ZS4gIEl0IGlzIG9ubHkgdXNlZCB3aXRoIGhpYmVybmF0aW9uCisJKHN1c3BlbmQtdG8tZGlzaykgYW5kIGZldyBkZXZpY2VzIGFyZSBhYmxlIHRvIHdha2UgdXAgdGhlIHN5c3RlbSBmcm9tCisJdGhpcyBzdGF0ZTsgbW9zdCBhcmUgY29tcGxldGVseSBwb3dlcmVkIG9mZi4KIAogICAgIFBNX0VWRU5UX0ZSRUVaRSAtLSBxdWllc2NlIHRoZSBkcml2ZXIsIGJ1dCBkb24ndCBuZWNlc3NhcmlseSBjaGFuZ2UgaW50bwogCWFueSBsb3cgcG93ZXIgbW9kZS4gIEEgc3lzdGVtIHNuYXBzaG90IGlzIGFib3V0IHRvIGJlIHRha2VuLCBvZnRlbgpAQCAtMzI5LDggKzMzNyw4IEBACiAJd2FrZXVwIGV2ZW50cyBub3IgRE1BIGFyZSBhbGxvd2VkLgogCiBUbyBlbnRlciAic3RhbmRieSIgKEFDUEkgUzEpIG9yICJTdXNwZW5kIHRvIFJBTSIgKFNUUiwgQUNQSSBTMykgc3RhdGVzLCBvcgotdGhlIHNpbWlsYXJseSBuYW1lZCBBUE0gc3RhdGVzLCBvbmx5IFBNX0VWRU5UX1NVU1BFTkQgaXMgdXNlZDsgZm9yICJTdXNwZW5kCi10byBEaXNrIiAoU1RELCBoaWJlcm5hdGUsIEFDUEkgUzQpLCBhbGwgb2YgdGhvc2UgZXZlbnQgY29kZXMgYXJlIHVzZWQuCit0aGUgc2ltaWxhcmx5IG5hbWVkIEFQTSBzdGF0ZXMsIG9ubHkgUE1fRVZFTlRfU1VTUEVORCBpcyB1c2VkOyB0aGUgb3RoZXIgZXZlbnQKK2NvZGVzIGFyZSB1c2VkIGZvciBoaWJlcm5hdGlvbiAoIlN1c3BlbmQgdG8gRGlzayIsIFNURCwgQUNQSSBTNCkuCiAKIFRoZXJlJ3MgYWxzbyBQTV9FVkVOVF9PTiwgYSB2YWx1ZSB3aGljaCBuZXZlciBhcHBlYXJzIGFzIGEgc3VzcGVuZCBldmVudAogYnV0IGlzIHNvbWV0aW1lcyB1c2VkIHRvIHJlY29yZCB0aGUgIm5vdCBzdXNwZW5kZWQiIGRldmljZSBzdGF0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9wbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4NDE1MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcG0udHh0CkBAIC0wLDAgKzEsMjU3IEBACisgICAgICAgICAgICAgICBMaW51eCBQb3dlciBNYW5hZ2VtZW50IFN1cHBvcnQKKworVGhpcyBkb2N1bWVudCBicmllZmx5IGRlc2NyaWJlcyBob3cgdG8gdXNlIHBvd2VyIG1hbmFnZW1lbnQgd2l0aCB5b3VyCitMaW51eCBzeXN0ZW0gYW5kIGhvdyB0byBhZGQgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0IHRvIExpbnV4IGRyaXZlcnMuCisKK0FQTSBvciBBQ1BJPworLS0tLS0tLS0tLS0tCitJZiB5b3UgaGF2ZSBhIHJlbGF0aXZlbHkgcmVjZW50IHg4NiBtb2JpbGUsIGRlc2t0b3AsIG9yIHNlcnZlciBzeXN0ZW0sCitvZGRzIGFyZSBpdCBzdXBwb3J0cyBlaXRoZXIgQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCAoQVBNKSBvcgorQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlIChBQ1BJKS4gIEFDUEkgaXMgdGhlIG5ld2VyCitvZiB0aGUgdHdvIHRlY2hub2xvZ2llcyBhbmQgcHV0cyBwb3dlciBtYW5hZ2VtZW50IGluIHRoZSBoYW5kcyBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0sIGFsbG93aW5nIGZvciBtb3JlIGludGVsbGlnZW50IHBvd2VyIG1hbmFnZW1lbnQgdGhhbgoraXMgcG9zc2libGUgd2l0aCBCSU9TIGNvbnRyb2xsZWQgQVBNLgorCitUaGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoLCBpZiBlaXRoZXIsIHlvdXIgc3lzdGVtIHN1cHBvcnRzIGlzIHRvCitidWlsZCBhIGtlcm5lbCB3aXRoIGJvdGggQUNQSSBhbmQgQVBNIGVuYWJsZWQgKGFzIG9mIDIuMy54IEFDUEkgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCkuICBJZiBhIHdvcmtpbmcgQUNQSSBpbXBsZW1lbnRhdGlvbiBpcyBmb3VuZCwgdGhlCitBQ1BJIGRyaXZlciB3aWxsIG92ZXJyaWRlIGFuZCBkaXNhYmxlIEFQTSwgb3RoZXJ3aXNlIHRoZSBBUE0gZHJpdmVyCit3aWxsIGJlIHVzZWQuCisKK05vLCBzb3JyeSwgeW91IGNhbm5vdCBoYXZlIGJvdGggQUNQSSBhbmQgQVBNIGVuYWJsZWQgYW5kIHJ1bm5pbmcgYXQKK29uY2UuICBTb21lIHBlb3BsZSB3aXRoIGJyb2tlbiBBQ1BJIG9yIGJyb2tlbiBBUE0gaW1wbGVtZW50YXRpb25zCit3b3VsZCBsaWtlIHRvIHVzZSBib3RoIHRvIGdldCBhIGZ1bGwgc2V0IG9mIHdvcmtpbmcgZmVhdHVyZXMsIGJ1dCB5b3UKK3NpbXBseSBjYW5ub3QgbWl4IGFuZCBtYXRjaCB0aGUgdHdvLiAgT25seSBvbmUgcG93ZXIgbWFuYWdlbWVudAoraW50ZXJmYWNlIGNhbiBiZSBpbiBjb250cm9sIG9mIHRoZSBtYWNoaW5lIGF0IG9uY2UuICBUaGluayBhYm91dCBpdC4uCisKK1VzZXItc3BhY2UgRGFlbW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCitCb3RoIEFQTSBhbmQgQUNQSSByZWx5IG9uIHVzZXItc3BhY2UgZGFlbW9ucywgYXBtZCBhbmQgYWNwaWQKK3Jlc3BlY3RpdmVseSwgdG8gYmUgY29tcGxldGVseSBmdW5jdGlvbmFsLiAgT2J0YWluIGJvdGggb2YgdGhlc2UKK2RhZW1vbnMgZnJvbSB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbiBvciBmcm9tIHRoZSBJbnRlcm5ldCAoc2VlIGJlbG93KQorYW5kIGJlIHN1cmUgdGhhdCB0aGV5IGFyZSBzdGFydGVkIHNvbWV0aW1lIGluIHRoZSBzeXN0ZW0gYm9vdCBwcm9jZXNzLgorR28gYWhlYWQgYW5kIHN0YXJ0IGJvdGguICBJZiBBQ1BJIG9yIEFQTSBpcyBub3QgYXZhaWxhYmxlIG9uIHlvdXIKK3N5c3RlbSB0aGUgYXNzb2NpYXRlZCBkYWVtb24gd2lsbCBleGl0IGdyYWNlZnVsbHkuCisKKyAgYXBtZDogICBodHRwOi8vd29ybGR2aXNpb25zLmNhL35hcGVud2Fyci9hcG1kLworICBhY3BpZDogIGh0dHA6Ly9hY3BpZC5zZi5uZXQvCisKK0RyaXZlciBJbnRlcmZhY2UgLS0gT0JTT0xFVEUsIERPIE5PVCBVU0UhCistLS0tLS0tLS0tLS0tLS0tKioqKioqKioqKioqKioqKioqKioqKioqKgorCitOb3RlOiBwbV9yZWdpc3RlcigpLCBwbV9hY2Nlc3MoKSwgcG1fZGV2X2lkbGUoKSBhbmQgZnJpZW5kcyBhcmUKK29ic29sZXRlLiBQbGVhc2UgZG8gbm90IHVzZSB0aGVtLiBJbnN0ZWFkIHlvdSBzaG91bGQgcHJvcGVybHkgaG9vaworeW91ciBkcml2ZXIgaW50byB0aGUgZHJpdmVyIG1vZGVsLCBhbmQgdXNlIGl0cyBzdXNwZW5kKCkvcmVzdW1lKCkKK2NhbGxiYWNrcyB0byBkbyB0aGlzIGtpbmQgb2Ygc3R1ZmYuCisKK0lmIHlvdSBhcmUgd3JpdGluZyBhIG5ldyBkcml2ZXIgb3IgbWFpbnRhaW5pbmcgYW4gb2xkIGRyaXZlciwgaXQKK3Nob3VsZCBpbmNsdWRlIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4gIFdpdGhvdXQgcG93ZXIgbWFuYWdlbWVudAorc3VwcG9ydCwgYSBzaW5nbGUgZHJpdmVyIG1heSBwcmV2ZW50IGEgc3lzdGVtIHdpdGggcG93ZXIgbWFuYWdlbWVudAorY2FwYWJpbGl0aWVzIGZyb20gZXZlciBiZWluZyBhYmxlIHRvIHN1c3BlbmQgKHNhZmVseSkuCisKK092ZXJ2aWV3OgorMSkgUmVnaXN0ZXIgZWFjaCBpbnN0YW5jZSBvZiBhIGRldmljZSB3aXRoICJwbV9yZWdpc3RlciIKKzIpIENhbGwgInBtX2FjY2VzcyIgYmVmb3JlIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUuCisgICAodGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBoYXJkd2FyZSBpcyBhd2FrZSBhbmQgcmVhZHkpCiszKSBZb3VyICJwbV9jYWxsYmFjayIgaXMgY2FsbGVkIGJlZm9yZSBnb2luZyBpbnRvIGEKKyAgIHN1c3BlbmQgc3RhdGUgKEFDUEkgRDEtRDMpIG9yIGFmdGVyIHJlc3VtaW5nIChBQ1BJIEQwKQorICAgZnJvbSBhIHN1c3BlbmQuCis0KSBDYWxsICJwbV9kZXZfaWRsZSIgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBiZWluZyB1c2VkCisgICAob3B0aW9uYWwgYnV0IHdpbGwgaW1wcm92ZSBkZXZpY2UgaWRsZSBkZXRlY3Rpb24pCis1KSBXaGVuIHVubG9hZGVkLCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCAicG1fdW5yZWdpc3RlciIKKworLyoKKyAqIERlc2NyaXB0aW9uOiBSZWdpc3RlciBhIGRldmljZSB3aXRoIHRoZSBwb3dlci1tYW5hZ2VtZW50IHN1YnN5c3RlbQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIHR5cGUgLSBkZXZpY2UgdHlwZSAoUENJIGRldmljZSwgc3lzdGVtIGRldmljZSwgLi4uKQorICogICBpZCAtIGluc3RhbmNlIG51bWJlciBvciB1bmlxdWUgaWRlbnRpZmllcgorICogICBjYmFjayAtIHJlcXVlc3QgaGFuZGxlciBjYWxsYmFjayAoc3VzcGVuZCwgcmVzdW1lLCAuLi4pCisgKgorICogUmV0dXJuczogUmVnaXN0ZXJlZCBQTSBkZXZpY2Ugb3IgTlVMTCBvbiBlcnJvcgorICoKKyAqIEV4YW1wbGVzOgorICogICBkZXYgPSBwbV9yZWdpc3RlcihQTV9TWVNfREVWLCBQTV9TWVNfVkdBLCB2Z2FfY2FsbGJhY2spOworICoKKyAqICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBwY2lfZmluZF9kZXYoLi4uKTsKKyAqICAgZGV2ID0gcG1fcmVnaXN0ZXIoUE1fUENJX0RFViwgUE1fUENJX0lEKHBjaV9kZXYpLCBjYWxsYmFjayk7CisgKi8KK3N0cnVjdCBwbV9kZXYgKnBtX3JlZ2lzdGVyKHBtX2Rldl90IHR5cGUsIHVuc2lnbmVkIGxvbmcgaWQsIHBtX2NhbGxiYWNrIGNiYWNrKTsKKworLyoKKyAqIERlc2NyaXB0aW9uOiBVbnJlZ2lzdGVyIGEgZGV2aWNlIHdpdGggdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtCisgKgorICogUGFyYW1ldGVyczoKKyAqICAgZGV2IC0gUE0gZGV2aWNlIHByZXZpb3VzbHkgcmV0dXJuZWQgZnJvbSBwbV9yZWdpc3RlcgorICovCit2b2lkIHBtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KTsKKworLyoKKyAqIERlc2NyaXB0aW9uOiBVbnJlZ2lzdGVyIGFsbCBkZXZpY2VzIHdpdGggYSBtYXRjaGluZyBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIGNiYWNrIC0gcHJldmlvdXNseSByZWdpc3RlcmVkIHJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlczogUHJvdmlkZWQgZm9yIGVhc2llciBwb3J0aW5nIGZyb20gb2xkIEFQTSBpbnRlcmZhY2UKKyAqLwordm9pZCBwbV91bnJlZ2lzdGVyX2FsbChwbV9jYWxsYmFjayBjYmFjayk7CisKKy8qCisgKiBQb3dlciBtYW5hZ2VtZW50IHJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICBkZXYgLSBQTSBkZXZpY2UgcHJldmlvdXNseSByZXR1cm5lZCBmcm9tIHBtX3JlZ2lzdGVyCisgKiAgIHJxc3QgLSByZXF1ZXN0IHR5cGUKKyAqICAgZGF0YSAtIGRhdGEsIGlmIGFueSwgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0CisgKgorICogUmV0dXJuczogMCBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsCisgKiAgICAgICAgICBFSU5WQUwgaWYgdGhlIHJlcXVlc3QgaXMgbm90IHN1cHBvcnRlZAorICogICAgICAgICAgRUJVU1kgaWYgdGhlIGRldmljZSBpcyBub3cgYnVzeSBhbmQgY2Fubm90IGhhbmRsZSB0aGUgcmVxdWVzdAorICogICAgICAgICAgRU5PTUVNIGlmIHRoZSBkZXZpY2Ugd2FzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHJlcXVlc3QgZHVlIHRvIG1lbW9yeQorICoKKyAqIERldGFpbHM6IFRoZSBkZXZpY2UgcmVxdWVzdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlCisgKiAgICAgICAgICBkZXZpY2Uvc3lzdGVtIGVudGVycyBhIHN1c3BlbmQgc3RhdGUgKEFDUEkgRDEtRDMpIG9yCisgKiAgICAgICAgICBvciBhZnRlciB0aGUgZGV2aWNlL3N5c3RlbSByZXN1bWVzIGZyb20gc3VzcGVuZCAoQUNQSSBEMCkuCisgKiAgICAgICAgICBGb3IgUE1fU1VTUEVORCwgdGhlIEFDUEkgRC1zdGF0ZSBiZWluZyBlbnRlcmVkIGlzIHBhc3NlZAorICogICAgICAgICAgYXMgdGhlICJkYXRhIiBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2suICBUaGUgZGV2aWNlCisgKiAgICAgICAgICBkcml2ZXIgc2hvdWxkIHNhdmUgKFBNX1NVU1BFTkQpIG9yIHJlc3RvcmUgKFBNX1JFU1VNRSkKKyAqICAgICAgICAgIGRldmljZSBjb250ZXh0IHdoZW4gdGhlIHJlcXVlc3QgY2FsbGJhY2sgaXMgY2FsbGVkLgorICoKKyAqICAgICAgICAgIE9uY2UgYSBkcml2ZXIgcmV0dXJucyAwIChzdWNjZXNzKSBmcm9tIGEgc3VzcGVuZAorICogICAgICAgICAgcmVxdWVzdCwgaXQgc2hvdWxkIG5vdCBwcm9jZXNzIGFueSBmdXJ0aGVyIHJlcXVlc3RzIG9yCisgKiAgICAgICAgICBhY2Nlc3MgdGhlIGRldmljZSBoYXJkd2FyZSB1bnRpbCBhIGNhbGwgdG8gInBtX2FjY2VzcyIgaXMgbWFkZS4KKyAqLwordHlwZWRlZiBpbnQgKCpwbV9jYWxsYmFjaykoc3RydWN0IHBtX2RldiAqZGV2LCBwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSk7CisKK0RyaXZlciBEZXRhaWxzCistLS0tLS0tLS0tLS0tLQorVGhpcyBpcyBqdXN0IGEgcXVpY2sgUSZBIGFzIGEgc3RvcGdhcCB1bnRpbCBhIHJlYWwgZHJpdmVyIHdyaXRlcnMnCitwb3dlciBtYW5hZ2VtZW50IGd1aWRlIGlzIGF2YWlsYWJsZS4KKworUTogV2hlbiBpcyBhIGRldmljZSBzdXNwZW5kZWQ/CisKK0RldmljZXMgY2FuIGJlIHN1c3BlbmRlZCBiYXNlZCBvbiBkaXJlY3QgdXNlciByZXF1ZXN0IChlZy4gbGFwdG9wIGxpZAorY2xvc2VzKSwgc3lzdGVtIHBvd2VyIHBvbGljeSAoZWcuICBzbGVlcCBhZnRlciAzMCBtaW51dGVzIG9mIGNvbnNvbGUKK2luYWN0aXZpdHkpLCBvciBkZXZpY2UgcG93ZXIgcG9saWN5IChlZy4gcG93ZXIgZG93biBkZXZpY2UgYWZ0ZXIgNQorbWludXRlcyBvZiBpbmFjdGl2aXR5KQorCitROiBNdXN0IGEgZHJpdmVyIGhvbm9yIGEgc3VzcGVuZCByZXF1ZXN0PworCitObywgYSBkcml2ZXIgY2FuIHJldHVybiAtRUJVU1kgZnJvbSBhIHN1c3BlbmQgcmVxdWVzdCBhbmQgdGhpcword2lsbCBzdG9wIHRoZSBzeXN0ZW0gZnJvbSBzdXNwZW5kaW5nLiAgV2hlbiBhIHN1c3BlbmQgcmVxdWVzdAorZmFpbHMsIGFsbCBzdXNwZW5kZWQgZGV2aWNlcyBhcmUgcmVzdW1lZCBhbmQgdGhlIHN5c3RlbSBjb250aW51ZXMKK3RvIHJ1bi4gIFN1c3BlbmQgY2FuIGJlIHJldHJpZWQgYXQgYSBsYXRlciB0aW1lLgorCitROiBDYW4gdGhlIGRyaXZlciBibG9jayBzdXNwZW5kL3Jlc3VtZSByZXF1ZXN0cz8KKworWWVzLCBhIGRyaXZlciBjYW4gZGVsYXkgaXRzIHJldHVybiBmcm9tIGEgc3VzcGVuZCBvciByZXN1bWUKK3JlcXVlc3QgdW50aWwgdGhlIGRldmljZSBpcyByZWFkeSB0byBoYW5kbGUgcmVxdWVzdHMuICBJdAoraXMgYWR2YW50YWdlb3VzIHRvIHJldHVybiBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGZyb20gYQorcmVxdWVzdCBhcyBzdXNwZW5kL3Jlc3VtZSBhcmUgZG9uZSBzZXJpYWxseS4KKworUTogV2hhdCBjb250ZXh0IGlzIGEgc3VzcGVuZC9yZXN1bWUgaW5pdGlhdGVkIGZyb20/CisKK0Egc3VzcGVuZCBvciByZXN1bWUgaXMgaW5pdGlhdGVkIGZyb20gYSBrZXJuZWwgdGhyZWFkIGNvbnRleHQuCitJdCBpcyBzYWZlIHRvIGJsb2NrLCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYXRlIHJlcXVlc3RzCitvciBhbnl0aGluZyBlbHNlIHlvdSBjYW4gZG8gd2l0aGluIHRoZSBrZXJuZWwuCisKK1E6IFdpbGwgcmVxdWVzdHMgY29udGludWUgdG8gYXJyaXZlIGFmdGVyIGEgc3VzcGVuZD8KKworUG9zc2libHkuICBJdCBpcyB0aGUgZHJpdmVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gcXVldWUoKiksCitmYWlsLCBvciBkcm9wIGFueSByZXF1ZXN0cyB0aGF0IGFycml2ZSBhZnRlciByZXR1cm5pbmcKK3N1Y2Nlc3MgdG8gYSBzdXNwZW5kIHJlcXVlc3QuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUKK2RyaXZlciBub3QgYWNjZXNzIGl0cyBkZXZpY2UgdW50aWwgYWZ0ZXIgaXQgcmVjZWl2ZXMKK2EgcmVzdW1lIHJlcXVlc3QgYXMgdGhlIGRldmljZSdzIGJ1cyBtYXkgbm8gbG9uZ2VyCitiZSBhY3RpdmUuCisKKygqKSBJZiBhIGRyaXZlciBxdWV1ZXMgcmVxdWVzdHMgZm9yIHByb2Nlc3NpbmcgYWZ0ZXIKKyAgICByZXN1bWUgYmUgYXdhcmUgdGhhdCB0aGUgZGV2aWNlLCBuZXR3b3JrLCBldGMuCisgICAgbWlnaHQgYmUgaW4gYSBkaWZmZXJlbnQgc3RhdGUgdGhhbiBhdCBzdXNwZW5kIHRpbWUuCisgICAgSXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZHJvcCByZXF1ZXN0cyB1bmxlc3MKKyAgICB0aGUgZHJpdmVyIGlzIGEgc3RvcmFnZSBkZXZpY2UuCisKK1E6IERvIEkgaGF2ZSB0byBtYW5hZ2UgYnVzLXNwZWNpZmljIHBvd2VyIG1hbmFnZW1lbnQgcmVnaXN0ZXJzCisKK05vLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBidXMgZHJpdmVyIHRvIG1hbmFnZQorUENJLCBVU0IsIGV0Yy4gcG93ZXIgbWFuYWdlbWVudCByZWdpc3RlcnMuICBUaGUgYnVzIGRyaXZlcgorb3IgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtIHdpbGwgYWxzbyBlbmFibGUgYW55Cit3YWtlLW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCB0aGUgZGV2aWNlIGhhcy4KKworUTogU28sIHJlYWxseSwgd2hhdCBkbyBJIG5lZWQgdG8gZG8gdG8gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZT8KKworWW91IG5lZWQgdG8gc2F2ZSBhbnkgZGV2aWNlIGNvbnRleHQgdGhhdCB3b3VsZAorYmUgbG9zdCBpZiB0aGUgZGV2aWNlIHdhcyBwb3dlcmVkIG9mZiBhbmQgdGhlbiByZXN0b3JlCitpdCBhdCByZXN1bWUgdGltZS4gIFdoZW4gQUNQSSBpcyBhY3RpdmUsIHRoZXJlIGFyZQordGhyZWUgbGV2ZWxzIG9mIGRldmljZSBzdXNwZW5kIHN0YXRlczsgRDEsIEQyLCBhbmQgRDMuCisoVGhlIHN1c3BlbmQgc3RhdGUgaXMgcGFzc2VkIGFzIHRoZSAiZGF0YSIgYXJndW1lbnQKK3RvIHRoZSBkZXZpY2UgY2FsbGJhY2suKSAgV2l0aCBEMywgdGhlIGRldmljZSBpcyBwb3dlcmVkCitvZmYgYW5kIGxvc2VzIGFsbCBjb250ZXh0LCBEMSBhbmQgRDIgYXJlIHNoYWxsb3dlciBwb3dlcgorc3RhdGVzIGFuZCByZXF1aXJlIGxlc3MgZGV2aWNlIGNvbnRleHQgdG8gYmUgc2F2ZWQuICBUbworcGxheSBpdCBzYWZlLCBqdXN0IHNhdmUgZXZlcnl0aGluZyBhdCBzdXNwZW5kIGFuZCByZXN0b3JlCitldmVyeXRoaW5nIGF0IHJlc3VtZS4KKworUTogV2hlcmUgZG8gSSBzdG9yZSBkZXZpY2UgY29udGV4dCBmb3Igc3VzcGVuZD8KKworQW55d2hlcmUgaW4gbWVtb3J5LCBrbWFsbG9jIGEgYnVmZmVyIG9yIHN0b3JlIGl0CitpbiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IuICBZb3UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUKK2NvbnRlbnRzIG9mIG1lbW9yeSB3aWxsIGJlIHJlc3RvcmVkIGFuZCBhY2Nlc3NpYmxlCitiZWZvcmUgcmVzdW1lLCBldmVuIHdoZW4gdGhlIHN5c3RlbSBzdXNwZW5kcyB0byBkaXNrLgorCitROiBXaGF0IGRvIEkgbmVlZCB0byBkbyBmb3IgQUNQSSB2cy4gQVBNIHZzLiBldGM/CisKK0RyaXZlcnMgbmVlZCBub3QgYmUgYXdhcmUgb2YgdGhlIHNwZWNpZmljIHBvd2VyIG1hbmFnZW1lbnQKK3RlY2hub2xvZ3kgdGhhdCBpcyBhY3RpdmUuICBUaGV5IGp1c3QgbmVlZCB0byBiZSBhd2FyZQorb2Ygd2hlbiB0aGUgb3Zlcmx5aW5nIHBvd2VyIG1hbmFnZW1lbnQgc3lzdGVtIHJlcXVlc3RzCit0aGF0IHRoZXkgc3VzcGVuZCBvciByZXN1bWUuCisKK1E6IFdoYXQgYWJvdXQgZGV2aWNlIGRlcGVuZGVuY2llcz8KKworV2hlbiBhIGRyaXZlciByZWdpc3RlcnMgYSBkZXZpY2UsIHRoZSBwb3dlciBtYW5hZ2VtZW50CitzdWJzeXN0ZW0gdXNlcyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgdG8gYnVpbGQgYQordHJlZSBvZiBkZXZpY2UgZGVwZW5kZW5jaWVzIChlZy4gVVNCIGRldmljZSBYIGlzIG9uCitVU0IgY29udHJvbGxlciBZIHdoaWNoIGlzIG9uIFBDSSBidXMgWikgIFdoZW4gcG93ZXIKK21hbmFnZW1lbnQgd2FudHMgdG8gc3VzcGVuZCBhIGRldmljZSwgaXQgZmlyc3Qgc2VuZHMKK2Egc3VzcGVuZCByZXF1ZXN0IHRvIGl0cyBkcml2ZXIsIHRoZW4gdGhlIGJ1cyBkcml2ZXIsCithbmQgc28gb24gdXAgdG8gdGhlIHN5c3RlbSBidXMuICBEZXZpY2UgcmVzdW1lcworcHJvY2VlZCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLgorCitROiBXaG8gZG8gSSBjb250YWN0IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0CisgICBlbmFibGluZyBwb3dlciBtYW5hZ2VtZW50IGZvciBteSBzcGVjaWZpYyBkcml2ZXIvZGV2aWNlPworCitBQ1BJIERldmVsb3BtZW50IG1haWxpbmcgbGlzdDogbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKKworU3lzdGVtIEludGVyZmFjZSAtLSBPQlNPTEVURSwgRE8gTk9UIFVTRSEKKy0tLS0tLS0tLS0tLS0tLS0qKioqKioqKioqKioqKioqKioqKioqKioqCitJZiB5b3UgYXJlIHByb3ZpZGluZyBuZXcgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0IHRvIExpbnV4IChpZS4KK2FkZGluZyBzdXBwb3J0IGZvciBzb21ldGhpbmcgbGlrZSBBUE0gb3IgQUNQSSksIHlvdSBzaG91bGQKK2NvbW11bmljYXRlIHdpdGggZHJpdmVycyB0aHJvdWdoIHRoZSBleGlzdGluZyBnZW5lcmljIHBvd2VyCittYW5hZ2VtZW50IGludGVyZmFjZS4KKworLyoKKyAqIFNlbmQgYSByZXF1ZXN0IHRvIGFsbCBkZXZpY2VzCisgKgorICogUGFyYW1ldGVyczoKKyAqICAgcnFzdCAtIHJlcXVlc3QgdHlwZQorICogICBkYXRhIC0gZGF0YSwgaWYgYW55LCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QKKyAqCisgKiBSZXR1cm5zOiAwIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwKKyAqICAgICAgICAgIFNlZSAicG1fY2FsbGJhY2siIHJldHVybiBmb3IgZXJyb3JzCisgKgorICogRGV0YWlsczogV2FsayBsaXN0IG9mIHJlZ2lzdGVyZWQgZGV2aWNlcyBhbmQgY2FsbCBwbV9zZW5kCisgKiAgICAgICAgICBmb3IgZWFjaCB1bnRpbCBjb21wbGV0ZSBvciBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKyAqICAgICAgICAgIElmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIGZvciBhIHN1c3BlbmQgcmVxdWVzdCwKKyAqICAgICAgICAgIHJldHVybiBhbGwgZGV2aWNlcyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGJlZm9yZQorICogICAgICAgICAgdGhlIHN1c3BlbmQgcmVxdWVzdC4KKyAqLworaW50IHBtX3NlbmRfYWxsKHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpkYXRhKTsKKworLyoKKyAqIEZpbmQgYSBtYXRjaGluZyBkZXZpY2UKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICB0eXBlIC0gZGV2aWNlIHR5cGUgKFBDSSBkZXZpY2UsIHN5c3RlbSBkZXZpY2UsIG9yIDAgdG8gbWF0Y2ggYWxsIGRldmljZXMpCisgKiAgIGZyb20gLSBwcmV2aW91cyBtYXRjaCBvciBOVUxMIHRvIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZworICoKKyAqIFJldHVybnM6IE1hdGNoaW5nIGRldmljZSBvciBOVUxMIGlmIG5vbmUgZm91bmQKKyAqLworc3RydWN0IHBtX2RldiAqcG1fZmluZChwbV9kZXZfdCB0eXBlLCBzdHJ1Y3QgcG1fZGV2ICpmcm9tKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG1fcW9zX2ludGVyZmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3BtX3Fvc19pbnRlcmZhY2UudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3BtX3Fvc19pbnRlcmZhY2UudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3Bvd2VyL3BtX3Fvc19pbnRlcmZhY2UudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyX3N1cHBseV9jbGFzcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3Bvd2VyX3N1cHBseV9jbGFzcy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJfc3VwcGx5X2NsYXNzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9wb3dlci9wb3dlcl9zdXBwbHlfY2xhc3MudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CmluZGV4IDdiNGU4YTcuLjRjYzc4MDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CkBAIC01OSwxMiArNTksMzkgQEAKICAgICAgIHApIEZyZWVzY2FsZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlCiAJICBxKSBVU0IgRUhDSSBjb250cm9sbGVycwogCi0gIFZJSSAtIFNwZWNpZnlpbmcgaW50ZXJydXB0IGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCisgIFZJSSAtIE1hcnZlbGwgRGlzY292ZXJ5IG12NjRbMzQ1XTZ4IFN5c3RlbSBDb250cm9sbGVyIGNoaXBzCisgICAgMSkgVGhlIC9zeXN0ZW0tY29udHJvbGxlciBub2RlCisgICAgMikgQ2hpbGQgbm9kZXMgb2YgL3N5c3RlbS1jb250cm9sbGVyCisgICAgICBhKSBNYXJ2ZWxsIERpc2NvdmVyeSBNRElPIGJ1cworICAgICAgYikgTWFydmVsbCBEaXNjb3ZlcnkgZXRoZXJuZXQgY29udHJvbGxlcgorICAgICAgYykgTWFydmVsbCBEaXNjb3ZlcnkgUEhZIG5vZGVzCisgICAgICBkKSBNYXJ2ZWxsIERpc2NvdmVyeSBTRE1BIG5vZGVzCisgICAgICBlKSBNYXJ2ZWxsIERpc2NvdmVyeSBCUkcgbm9kZXMKKyAgICAgIGYpIE1hcnZlbGwgRGlzY292ZXJ5IENVTklUIG5vZGVzCisgICAgICBnKSBNYXJ2ZWxsIERpc2NvdmVyeSBNUFNDUk9VVElORyBub2RlcworICAgICAgaCkgTWFydmVsbCBEaXNjb3ZlcnkgTVBTQ0lOVFIgbm9kZXMKKyAgICAgIGkpIE1hcnZlbGwgRGlzY292ZXJ5IE1QU0Mgbm9kZXMKKyAgICAgIGopIE1hcnZlbGwgRGlzY292ZXJ5IFdhdGNoIERvZyBUaW1lciBub2RlcworICAgICAgaykgTWFydmVsbCBEaXNjb3ZlcnkgSTJDIG5vZGVzCisgICAgICBsKSBNYXJ2ZWxsIERpc2NvdmVyeSBQSUMgKFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcikgbm9kZXMKKyAgICAgIG0pIE1hcnZlbGwgRGlzY292ZXJ5IE1QUCAoTXVsdGlwdXJwb3NlIFBpbnMpIG11bHRpcGxleGluZyBub2RlcworICAgICAgbikgTWFydmVsbCBEaXNjb3ZlcnkgR1BQIChHZW5lcmFsIFB1cnBvc2UgUGlucykgbm9kZXMKKyAgICAgIG8pIE1hcnZlbGwgRGlzY292ZXJ5IFBDSSBob3N0IGJyaWRnZSBub2RlCisgICAgICBwKSBNYXJ2ZWxsIERpc2NvdmVyeSBDUFUgRXJyb3Igbm9kZXMKKyAgICAgIHEpIE1hcnZlbGwgRGlzY292ZXJ5IFNSQU0gQ29udHJvbGxlciBub2RlcworICAgICAgcikgTWFydmVsbCBEaXNjb3ZlcnkgUENJIEVycm9yIEhhbmRsZXIgbm9kZXMKKyAgICAgIHMpIE1hcnZlbGwgRGlzY292ZXJ5IE1lbW9yeSBDb250cm9sbGVyIG5vZGVzCisKKyAgVklJSSAtIFNwZWNpZnlpbmcgaW50ZXJydXB0IGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCiAgICAgMSkgaW50ZXJydXB0cyBwcm9wZXJ0eQogICAgIDIpIGludGVycnVwdC1wYXJlbnQgcHJvcGVydHkKICAgICAzKSBPcGVuUElDIEludGVycnVwdCBDb250cm9sbGVycwogICAgIDQpIElTQSBJbnRlcnJ1cHQgQ29udHJvbGxlcnMKIAorICBWSUlJIC0gU3BlY2lmeWluZyBHUElPIGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCisgICAgMSkgZ3Bpb3MgcHJvcGVydHkKKyAgICAyKSBncGlvLWNvbnRyb2xsZXIgbm9kZXMKKwogICBBcHBlbmRpeCBBIC0gU2FtcGxlIFNPQyBub2RlIGZvciBNUEM4NTQwCiAKIApAQCAtMTI2OSwxMCArMTI5Niw2IEBACiAKICAgUmVjb21tZW5kZWQgcHJvcGVydGllczoKIAotICAgIC0gbGludXgsbmV0d29yay1pbmRleCA6IFRoaXMgaXMgdGhlIGludGVuZGVkICJpbmRleCIgb2YgdGhpcwotICAgICAgbmV0d29yayBkZXZpY2UuICBUaGlzIGlzIHVzZWQgYnkgdGhlIGJvb3R3cmFwcGVyIHRvIGludGVycHJldAotICAgICAgTUFDIGFkZHJlc3NlcyBwYXNzZWQgYnkgdGhlIGZpcm13YXJlIHdoZW4gbm8gaW5mb3JtYXRpb24gb3RoZXIKLSAgICAgIHRoYW4gaW5kaWNlcyBpcyBhdmFpbGFibGUgdG8gYXNzb2NpYXRlIGFuIGFkZHJlc3Mgd2l0aCBhIGRldmljZS4KICAgICAtIHBoeS1jb25uZWN0aW9uLXR5cGUgOiBhIHN0cmluZyBuYW1pbmcgdGhlIGNvbnRyb2xsZXIvUEhZIGludGVyZmFjZSB0eXBlLAogICAgICAgaS5lLiwgIm1paSIgKGRlZmF1bHQpLCAicm1paSIsICJnbWlpIiwgInJnbWlpIiwgInJnbWlpLWlkIiwgInNnbWlpIiwKICAgICAgICJ0YmkiLCBvciAicnRiaSIuICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBpZiB0aGUgY29ubmVjdGlvbgpAQCAtMTYyMiw4ICsxNjQ1LDcgQEAKICAgIC0gZGV2aWNlX3R5cGUgOiBzaG91bGQgYmUgIm5ldHdvcmsiLCAiaGxkYyIsICJ1YXJ0IiwgInRyYW5zcGFyZW50IgogICAgICAiYmlzeW5jIiwgImF0bSIsIG9yICJzZXJpYWwiLgogICAgLSBjb21wYXRpYmxlIDogY291bGQgYmUgInVjY19nZXRoIiBvciAiZnNsX2F0bSIgYW5kIHNvIG9uLgotICAgLSBtb2RlbCA6IHNob3VsZCBiZSAiVUNDIi4KLSAgIC0gZGV2aWNlLWlkIDogdGhlIHVjYyBudW1iZXIoMS04KSwgY29ycmVzcG9uZGluZyB0byBVQ0N4IGluIFVNLgorICAgLSBjZWxsLWluZGV4IDogdGhlIHVjYyBudW1iZXIoMS04KSwgY29ycmVzcG9uZGluZyB0byBVQ0N4IGluIFVNLgogICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCiAgICAtIGludGVycnVwdHMgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBiIGlzIGEKICAgICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQgbGV2ZWwKQEAgLTE2NjcsMTAgKzE2ODksNiBAQAogICAgLSBwaHktaGFuZGxlIDogVGhlIHBoYW5kbGUgZm9yIHRoZSBQSFkgY29ubmVjdGVkIHRvIHRoaXMgY29udHJvbGxlci4KIAogICAgUmVjb21tZW5kZWQgcHJvcGVydGllczoKLSAgIC0gbGludXgsbmV0d29yay1pbmRleCA6IFRoaXMgaXMgdGhlIGludGVuZGVkICJpbmRleCIgb2YgdGhpcwotICAgICBuZXR3b3JrIGRldmljZS4gIFRoaXMgaXMgdXNlZCBieSB0aGUgYm9vdHdyYXBwZXIgdG8gaW50ZXJwcmV0Ci0gICAgIE1BQyBhZGRyZXNzZXMgcGFzc2VkIGJ5IHRoZSBmaXJtd2FyZSB3aGVuIG5vIGluZm9ybWF0aW9uIG90aGVyCi0gICAgIHRoYW4gaW5kaWNlcyBpcyBhdmFpbGFibGUgdG8gYXNzb2NpYXRlIGFuIGFkZHJlc3Mgd2l0aCBhIGRldmljZS4KICAgIC0gcGh5LWNvbm5lY3Rpb24tdHlwZSA6IGEgc3RyaW5nIG5hbWluZyB0aGUgY29udHJvbGxlci9QSFkgaW50ZXJmYWNlIHR5cGUsCiAgICAgIGkuZS4sICJtaWkiIChkZWZhdWx0KSwgInJtaWkiLCAiZ21paSIsICJyZ21paSIsICJyZ21paS1pZCIgKEludGVybmFsCiAgICAgIERlbGF5KSwgInJnbWlpLXR4aWQiIChkZWxheSBvbiBUWCBvbmx5KSwgInJnbWlpLXJ4aWQiIChkZWxheSBvbiBSWCBvbmx5KSwKQEAgLTE2ODAsOCArMTY5OCw3IEBACiAJdWNjQDIwMDAgewogCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aCI7Ci0JCW1vZGVsID0gIlVDQyI7Ci0JCWRldmljZS1pZCA9IDwxPjsKKwkJY2VsbC1pbmRleCA9IDwxPjsKIAkJcmVnID0gPDIwMDAgMjAwPjsKIAkJaW50ZXJydXB0cyA9IDxhMCAwPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwpAQCAtMTk5NSw3ICsyMDEyLDYgQEAKIAkJaW50ZXJydXB0cyA9IDwyMCA4PjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJcGh5LWhhbmRsZSA9IDwmUEhZMD47Ci0JCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CiAJCWZzbCxjcG0tY29tbWFuZCA9IDwxMjAwMDMwMD47CiAJfTsKIApAQCAtMjIxNywxMiArMjIzMyw2IEBACiAJCQkgIEVNQUMsIHRoYXQgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgKGJvZ3VzKSAicGh5LXBvcnQiCiAJCQkgIHByb3BlcnR5LgogCi0gICAgUmVjb21tZW5kZWQgcHJvcGVydGllczoKLSAgICAtIGxpbnV4LG5ldHdvcmstaW5kZXggOiBUaGlzIGlzIHRoZSBpbnRlbmRlZCAiaW5kZXgiIG9mIHRoaXMKLSAgICAgIG5ldHdvcmsgZGV2aWNlLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBib290d3JhcHBlciB0byBpbnRlcnByZXQKLSAgICAgIE1BQyBhZGRyZXNzZXMgcGFzc2VkIGJ5IHRoZSBmaXJtd2FyZSB3aGVuIG5vIGluZm9ybWF0aW9uIG90aGVyCi0gICAgICB0aGFuIGluZGljZXMgaXMgYXZhaWxhYmxlIHRvIGFzc29jaWF0ZSBhbiBhZGRyZXNzIHdpdGggYSBkZXZpY2UuCi0KICAgICBPcHRpb25hbCBwcm9wZXJ0aWVzOgogICAgIC0gcGh5LWFkZHJlc3MgICAgICAgOiAxIGNlbGwsIG9wdGlvbmFsLCBNRElPIGFkZHJlc3Mgb2YgdGhlIFBIWS4gSWYgYWJzZW50LAogCQkJICBhIHNlYXJjaCBpcyBwZXJmb3JtZWQuCkBAIC0yMjQ2LDcgKzIyNTYsNiBAQAogICAgIEV4YW1wbGU6CiAKIAlFTUFDMDogZXRoZXJuZXRANDAwMDA4MDAgewotCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OwogCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBncCIsICJpYm0sZW1hYyI7CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwpAQCAtMjgxNyw5ICsyODI2LDUyOCBAQAogCSAgIH07CiAKIAotICAgTW9yZSBkZXZpY2VzIHdpbGwgYmUgZGVmaW5lZCBhcyB0aGlzIHNwZWMgbWF0dXJlcy4KK1ZJSSAtIE1hcnZlbGwgRGlzY292ZXJ5IG12NjRbMzQ1XTZ4IFN5c3RlbSBDb250cm9sbGVyIGNoaXBzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1WSUkgLSBTcGVjaWZ5aW5nIGludGVycnVwdCBpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcworVGhlIE1hcnZlbGwgbXY2NFszNDVdNjAgc2VyaWVzIG9mIHN5c3RlbSBjb250cm9sbGVyIGNoaXBzIGNvbnRhaW4KK21hbnkgb2YgdGhlIHBlcmlwaGVyYWxzIG5lZWRlZCB0byBpbXBsZW1lbnQgYSBjb21wbGV0ZSBjb21wdXRlcgorc3lzdGVtLiAgSW4gdGhpcyBzZWN0aW9uLCB3ZSBkZWZpbmUgZGV2aWNlIHRyZWUgbm9kZXMgdG8gZGVzY3JpYmUKK3RoZSBzeXN0ZW0gY29udHJvbGxlciBjaGlwIGl0c2VsZiBhbmQgZWFjaCBvZiB0aGUgcGVyaXBoZXJhbHMKK3doaWNoIGl0IGNvbnRhaW5zLiAgQ29tcGF0aWJsZSBzdHJpbmcgdmFsdWVzIGZvciBlYWNoIG5vZGUgYXJlCitwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgIm1hcnZlbGwsIiwgZm9yIE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisKKzEpIFRoZSAvc3lzdGVtLWNvbnRyb2xsZXIgbm9kZQorCisgIFRoaXMgbm9kZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc3lzdGVtLWNvbnRyb2xsZXIgYW5kIG11c3QgYmUKKyAgcHJlc2VudCB3aGVuIHRoZSBzeXN0ZW0gdXNlcyBhIHN5c3RlbSBjb250bGxlciBjaGlwLiBUaGUgdG9wLWxldmVsCisgIHN5c3RlbS1jb250cm9sbGVyIG5vZGUgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBpcyBnbG9iYWwgdG8gYWxsCisgIGRldmljZXMgd2l0aGluIHRoZSBzeXN0ZW0gY29udHJvbGxlciBjaGlwLiBUaGUgbm9kZSBuYW1lIGJlZ2lucworICB3aXRoICJzeXN0ZW0tY29udHJvbGxlciIgZm9sbG93ZWQgYnkgdGhlIHVuaXQgYWRkcmVzcywgd2hpY2ggaXMKKyAgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5LW1hcHBlZCByZWdpc3RlciBzZXQgZm9yIHRoZSBzeXN0ZW0KKyAgY29udHJvbGxlciBjaGlwLgorCisgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgICAtIHJhbmdlcyA6IERlc2NyaWJlcyB0aGUgdHJhbnNsYXRpb24gb2Ygc3lzdGVtIGNvbnRyb2xsZXIgYWRkcmVzc2VzCisgICAgICBmb3IgbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMuCisgICAgLSBjbG9jay1mcmVxdWVuY3k6IENvbnRhaW5zIHRoZSBtYWluIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIHN5c3RlbQorICAgICAgY29udHJvbGxlciBjaGlwLgorICAgIC0gcmVnIDogVGhpcyBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZQorICAgICAgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgY29udGFpbmVkIHdpdGhpbiB0aGUgc3lzdGVtIGNvbnRyb2xsZXIKKyAgICAgIGNoaXAuICBUaGUgYWRkcmVzcyBzcGVjaWZpZWQgaW4gdGhlICJyZWciIHByb3BlcnR5IHNob3VsZCBtYXRjaAorICAgICAgdGhlIHVuaXQgYWRkcmVzcyBvZiB0aGUgc3lzdGVtLWNvbnRyb2xsZXIgbm9kZS4KKyAgICAtICNhZGRyZXNzLWNlbGxzIDogQWRkcmVzcyByZXByZXNlbnRhdGlvbiBmb3Igc3lzdGVtIGNvbnRyb2xsZXIKKyAgICAgIGRldmljZXMuICBUaGlzIGZpZWxkIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBjZWxscyBuZWVkZWQgdG8KKyAgICAgIHJlcHJlc2VudCB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgb2YgZGV2aWNlcworICAgICAgd2l0aGluIHRoZSBzeXN0ZW0gY29udHJvbGxlciBjaGlwLgorICAgIC0gI3NpemUtY2VsbHMgOiBTaXplIHJlcHJlc2VudGF0aW9uIGZvciBmb3IgdGhlIG1lbW9yeS1tYXBwZWQKKyAgICAgIHJlZ2lzdGVycyB3aXRoaW4gdGhlIHN5c3RlbSBjb250cm9sbGVyIGNoaXAuCisgICAgLSAjaW50ZXJydXB0LWNlbGxzIDogRGVmaW5lcyB0aGUgd2lkdGggb2YgY2VsbHMgdXNlZCB0byByZXByZXNlbnQKKyAgICAgIGludGVycnVwdHMuCisKKyAgT3B0aW9uYWwgcHJvcGVydGllczoKKworICAgIC0gbW9kZWwgOiBUaGUgc3BlY2lmaWMgbW9kZWwgb2YgdGhlIHN5c3RlbSBjb250cm9sbGVyIGNoaXAuICBTdWNoCisgICAgICBhcywgIm12NjQzNjAiLCAibXY2NDQ2MCIsIG9yICJtdjY0NTYwIi4KKyAgICAtIGNvbXBhdGlibGUgOiBBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgY29tcGF0aWJpbGl0eSBpZGVudGlmaWVycworICAgICAgb2YgdGhlIHN5c3RlbSBjb250cm9sbGVyIGNoaXAuCisKKyAgVGhlIHN5c3RlbS1jb250cm9sbGVyIG5vZGUgY29udGFpbnMgY2hpbGQgbm9kZXMgZm9yIGVhY2ggc3lzdGVtCisgIGNvbnRyb2xsZXIgZGV2aWNlIHRoYXQgdGhlIHBsYXRmb3JtIHVzZXMuICBOb2RlcyBzaG91bGQgbm90IGJlIGNyZWF0ZWQKKyAgZm9yIGRldmljZXMgd2hpY2ggZXhpc3Qgb24gdGhlIHN5c3RlbSBjb250cm9sbGVyIGNoaXAgYnV0IGFyZSBub3QgdXNlZAorCisgIEV4YW1wbGUgTWFydmVsbCBEaXNjb3ZlcnkgbXY2NDM2MCBzeXN0ZW0tY29udHJvbGxlciBub2RlOgorCisgICAgc3lzdGVtLWNvbnRyb2xsZXJAZjEwMDAwMDAgeyAvKiBNYXJ2ZWxsIERpc2NvdmVyeSBtdjY0MzYwICovCisJICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworCSAgICAjc2l6ZS1jZWxscyA9IDwxPjsKKwkgICAgbW9kZWwgPSAibXY2NDM2MCI7ICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KKwkgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAiOworCSAgICBjbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKKwkgICAgcmVnID0gPDB4ZjEwMDAwMDAgMHgxMDAwMD47CisJICAgIHZpcnR1YWwtcmVnID0gPDB4ZjEwMDAwMDA+OworCSAgICByYW5nZXMgPSA8MHg4ODAwMDAwMCAweDg4MDAwMDAwIDB4MTAwMDAwMCAvKiBQQ0kgMCBJL08gU3BhY2UgKi8KKwkJICAgIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDgwMDAwMDAgLyogUENJIDAgTUVNIFNwYWNlICovCisJCSAgICAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHg0MDAwMDAwIC8qIFVzZXIgRkxBU0ggKi8KKwkJICAgIDB4MDAwMDAwMDAgMHhmMTAwMDAwMCAweDAwMTAwMDAgLyogQnJpZGdlJ3MgcmVncyAqLworCQkgICAgMHhmMjAwMDAwMCAweGYyMDAwMDAwIDB4MDA0MDAwMD47LyogSW50ZWdyYXRlZCBTUkFNICovCisKKwkgICAgWyBjaGlsZCBub2RlIGRlZmluaXRpb25zLi4uIF0KKyAgICB9CisKKzIpIENoaWxkIG5vZGVzIG9mIC9zeXN0ZW0tY29udHJvbGxlcgorCisgICBhKSBNYXJ2ZWxsIERpc2NvdmVyeSBNRElPIGJ1cworCisgICBUaGUgTURJTyBpcyBhIGJ1cyB0byB3aGljaCB0aGUgUEhZIGRldmljZXMgYXJlIGNvbm5lY3RlZC4gIEZvciBlYWNoCisgICBkZXZpY2UgdGhhdCBleGlzdHMgb24gdGhpcyBidXMsIGEgY2hpbGQgbm9kZSBzaG91bGQgYmUgY3JlYXRlZC4gIFNlZQorICAgdGhlIGRlZmluaXRpb24gb2YgdGhlIFBIWSBub2RlIGJlbG93IGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byBkZWZpbmUKKyAgIGEgUEhZLgorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtICNhZGRyZXNzLWNlbGxzIDogU2hvdWxkIGJlIDwxPgorICAgICAtICNzaXplLWNlbGxzIDogU2hvdWxkIGJlIDwwPgorICAgICAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJtZGlvIgorICAgICAtIGNvbXBhdGlibGUgOiBTaG91bGQgYmUgIm1hcnZlbGwsbXY2NDM2MC1tZGlvIgorCisgICBFeGFtcGxlOgorCisgICAgIG1kaW8geworCSAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKwkgICAgIGRldmljZV90eXBlID0gIm1kaW8iOworCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtbWRpbyI7CisKKwkgICAgIGV0aGVybmV0LXBoeUAwIHsKKwkJICAgICAuLi4uLi4KKwkgICAgIH07CisgICAgIH07CisKKworICAgYikgTWFydmVsbCBEaXNjb3ZlcnkgZXRoZXJuZXQgY29udHJvbGxlcgorCisgICBUaGUgRGlzY292ZXIgZXRoZXJuZXQgY29udHJvbGxlciBpcyBkZXNjcmliZWQgd2l0aCB0d28gbGV2ZWxzCisgICBvZiBub2Rlcy4gIFRoZSBmaXJzdCBsZXZlbCBkZXNjcmliZXMgYW4gZXRoZXJuZXQgc2lsaWNvbiBibG9jaworICAgYW5kIHRoZSBzZWNvbmQgbGV2ZWwgZGVzY3JpYmVzIHVwIHRvIDMgZXRoZXJuZXQgbm9kZXMgd2l0aGluCisgICB0aGF0IGJsb2NrLiAgVGhlIHJlYXNvbiBmb3IgdGhlIG11bHRpcGxlIGxldmVscyBpcyB0aGF0IHRoZQorICAgcmVnaXN0ZXJzIGZvciB0aGUgbm9kZSBhcmUgaW50ZXJsZWF2ZWQgd2l0aGluIGEgc2luZ2xlIHNldAorICAgb2YgcmVnaXN0ZXJzLiAgVGhlICJldGhlcm5ldC1ibG9jayIgbGV2ZWwgZGVzY3JpYmVzIHRoZQorICAgc2hhcmVkIHJlZ2lzdGVyIHNldCwgYW5kIHRoZSAiZXRoZXJuZXQiIG5vZGVzIGRlc2NyaWJlIGV0aGVybmV0CisgICBwb3J0LXNwZWNpZmljIHByb3BlcnRpZXMuCisKKyAgIEV0aGVybmV0IGJsb2NrIG5vZGUKKworICAgUmVxdWlyZWQgcHJvcGVydGllczoKKyAgICAgLSAjYWRkcmVzcy1jZWxscyA6IDwxPgorICAgICAtICNzaXplLWNlbGxzIDogPDA+CisgICAgIC0gY29tcGF0aWJsZSA6ICJtYXJ2ZWxsLG12NjQzNjAtZXRoLWJsb2NrIgorICAgICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoaXMgYmxvY2sKKworICAgRXhhbXBsZSBEaXNjb3ZlcnkgRXRoZXJuZXQgYmxvY2sgbm9kZToKKyAgICAgZXRoZXJuZXQtYmxvY2tAMjAwMCB7CisJICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkgICAgICNzaXplLWNlbGxzID0gPDA+OworCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtZXRoLWJsb2NrIjsKKwkgICAgIHJlZyA9IDwweDIwMDAgMHgyMDAwPjsKKwkgICAgIGV0aGVybmV0QDAgeworCQkgICAgIC4uLi4uLi4KKwkgICAgIH07CisgICAgIH07CisKKyAgIEV0aGVybmV0IHBvcnQgbm9kZQorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJuZXR3b3JrIi4KKyAgICAgLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJtYXJ2ZWxsLG12NjQzNjAtZXRoIi4KKyAgICAgLSByZWcgOiBTaG91bGQgYmUgPDA+LCA8MT4sIG9yIDwyPiwgYWNjb3JkaW5nIHRvIHdoaWNoIHJlZ2lzdGVycworICAgICAgIHdpdGhpbiB0aGUgc2lsaWNvbiBibG9jayB0aGUgZGV2aWNlIHVzZXMuCisgICAgIC0gaW50ZXJydXB0cyA6IDxhPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGUgcG9ydC4KKyAgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgICAgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisgICAgIC0gcGh5IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBQSFkgY29ubmVjdGVkIHRvIHRoaXMgZXRoZXJuZXQKKyAgICAgICBjb250cm9sbGVyLgorICAgICAtIGxvY2FsLW1hYy1hZGRyZXNzIDogNiBieXRlcywgTUFDIGFkZHJlc3MKKworICAgRXhhbXBsZSBEaXNjb3ZlcnkgRXRoZXJuZXQgcG9ydCBub2RlOgorICAgICBldGhlcm5ldEAwIHsKKwkgICAgIGRldmljZV90eXBlID0gIm5ldHdvcmsiOworCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtZXRoIjsKKwkgICAgIHJlZyA9IDwwPjsKKwkgICAgIGludGVycnVwdHMgPSA8MzI+OworCSAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkgICAgIHBoeSA9IDwmUEhZMD47CisJICAgICBsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKyAgICAgfTsKKworCisKKyAgIGMpIE1hcnZlbGwgRGlzY292ZXJ5IFBIWSBub2RlcworCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJldGhlcm5ldC1waHkiCisgICAgIC0gaW50ZXJydXB0cyA6IDxhPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGlzIHBoeS4KKyAgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICAgICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisgICAgIC0gcmVnIDogVGhlIElEIG51bWJlciBmb3IgdGhlIHBoeSwgdXN1YWxseSBhIHNtYWxsIGludGVnZXIKKworICAgRXhhbXBsZSBEaXNjb3ZlcnkgUEhZIG5vZGU6CisgICAgIGV0aGVybmV0LXBoeUAxIHsKKwkgICAgIGRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJICAgICBjb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0MjEiOworCSAgICAgaW50ZXJydXB0cyA9IDw3Nj47ICAgICAgLyogR1BQIDEyICovCisJICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCSAgICAgcmVnID0gPDE+OworICAgICB9OworCisKKyAgIGQpIE1hcnZlbGwgRGlzY292ZXJ5IFNETUEgbm9kZXMKKworICAgUmVwcmVzZW50IERNQSBoYXJkd2FyZSBhc3NvY2lhdGVkIHdpdGggdGhlIE1QU0MgKG11bHRpcHJvdG9jb2wKKyAgIHNlcmlhbCBjb250cm9sbGVycykuCisKKyAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgICAgIC0gY29tcGF0aWJsZSA6ICJtYXJ2ZWxsLG12NjQzNjAtc2RtYSIKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorICAgICAtIGludGVycnVwdHMgOiA8YT4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGhlIERNQQorICAgICAgIGRldmljZS4KKyAgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgICAgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKKyAgIEV4YW1wbGUgRGlzY292ZXJ5IFNETUEgbm9kZToKKyAgICAgc2RtYUA0MDAwIHsKKwkgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXNkbWEiOworCSAgICAgcmVnID0gPDB4NDAwMCAweGMxOD47CisJICAgICB2aXJ0dWFsLXJlZyA9IDwweGYxMDA0MDAwPjsKKwkgICAgIGludGVycnVwdHMgPSA8MzY+OworCSAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKyAgICAgfTsKKworCisgICBlKSBNYXJ2ZWxsIERpc2NvdmVyeSBCUkcgbm9kZXMKKworICAgUmVwcmVzZW50IGJhdWQgcmF0ZSBnZW5lcmF0b3IgaGFyZHdhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBNUFNDCisgICAobXVsdGlwcm90b2NvbCBzZXJpYWwgY29udHJvbGxlcnMpLgorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIGNvbXBhdGlibGUgOiAibWFydmVsbCxtdjY0MzYwLWJyZyIKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorICAgICAtIGNsb2NrLXNyYyA6IEEgdmFsdWUgZnJvbSAwIHRvIDE1IHdoaWNoIHNlbGVjdHMgdGhlIGNsb2NrCisgICAgICAgc291cmNlIGZvciB0aGUgYmF1ZCByYXRlIGdlbmVyYXRvci4gIFRoaXMgdmFsdWUgY29ycmVzcG9uZHMKKyAgICAgICB0byB0aGUgQ0xLUyB2YWx1ZSBpbiB0aGUgQlJHeCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAgU2VlCisgICAgICAgdGhlIG12NjR4NjAgVXNlcidzIE1hbnVhbC4KKyAgICAgLSBjbG9jay1mcmVxdWVuY2UgOiBUaGUgZnJlcXVlbmN5IChpbiBIeikgb2YgdGhlIGJhdWQgcmF0ZQorICAgICAgIGdlbmVyYXRvcidzIGlucHV0IGNsb2NrLgorICAgICAtIGN1cnJlbnQtc3BlZWQgOiBUaGUgY3VycmVudCBzcGVlZCBzZXR0aW5nIChwcmVzdW1hYmx5IGJ5CisgICAgICAgZmlybXdhcmUpIG9mIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yLgorCisgICBFeGFtcGxlIERpc2NvdmVyeSBCUkcgbm9kZToKKyAgICAgYnJnQGIyMDAgeworCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtYnJnIjsKKwkgICAgIHJlZyA9IDwweGIyMDAgMHg4PjsKKwkgICAgIGNsb2NrLXNyYyA9IDw4PjsKKwkgICAgIGNsb2NrLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OworCSAgICAgY3VycmVudC1zcGVlZCA9IDw5NjAwPjsKKyAgICAgfTsKKworCisgICBmKSBNYXJ2ZWxsIERpc2NvdmVyeSBDVU5JVCBub2RlcworCisgICBSZXByZXNlbnQgdGhlIFNlcmlhbCBDb21tdW5pY2F0aW9ucyBVbml0IGRldmljZSBoYXJkd2FyZS4KKworICAgUmVxdWlyZWQgcHJvcGVydGllczoKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorCisgICBFeGFtcGxlIERpc2NvdmVyeSBDVU5JVCBub2RlOgorICAgICBjdW5pdEBmMjAwIHsKKwkgICAgIHJlZyA9IDwweGYyMDAgMHgyMDA+OworICAgICB9OworCisKKyAgIGcpIE1hcnZlbGwgRGlzY292ZXJ5IE1QU0NST1VUSU5HIG5vZGVzCisKKyAgIFJlcHJlc2VudCB0aGUgRGlzY292ZXJ5J3MgTVBTQyByb3V0aW5nIGhhcmR3YXJlCisKKyAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgICAgIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhpcyBkZXZpY2UKKworICAgRXhhbXBsZSBEaXNjb3ZlcnkgQ1VOSVQgbm9kZToKKyAgICAgbXBzY3JvdXRpbmdAYjUwMCB7CisJICAgICByZWcgPSA8MHhiNDAwIDB4Yz47CisgICAgIH07CisKKworICAgaCkgTWFydmVsbCBEaXNjb3ZlcnkgTVBTQ0lOVFIgbm9kZXMKKworICAgUmVwcmVzZW50IHRoZSBEaXNjb3ZlcnkncyBNUFNDIERNQSBpbnRlcnJ1cHQgaGFyZHdhcmUgcmVnaXN0ZXJzCisgICAoU0RNQSBjYXVzZSBhbmQgbWFzayByZWdpc3RlcnMpLgorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoaXMgZGV2aWNlCisKKyAgIEV4YW1wbGUgRGlzY292ZXJ5IE1QU0NJTlRSIG5vZGU6CisgICAgIG1wc2ludHJAYjgwMCB7CisJICAgICByZWcgPSA8MHhiODAwIDB4MTAwPjsKKyAgICAgfTsKKworCisgICBpKSBNYXJ2ZWxsIERpc2NvdmVyeSBNUFNDIG5vZGVzCisKKyAgIFJlcHJlc2VudCB0aGUgRGlzY292ZXJ5J3MgTVBTQyAoTXVsdGlwcm90b2NvbCBTZXJpYWwgQ29udHJvbGxlcikKKyAgIHNlcmlhbCBwb3J0LgorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIGRldmljZV90eXBlIDogInNlcmlhbCIKKyAgICAgLSBjb21wYXRpYmxlIDogIm1hcnZlbGwsbXY2NDM2MC1tcHNjIgorICAgICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoaXMgZGV2aWNlCisgICAgIC0gc2RtYSA6IHRoZSBwaGFuZGxlIGZvciB0aGUgU0RNQSBub2RlIHVzZWQgYnkgdGhpcyBwb3J0CisgICAgIC0gYnJnIDogdGhlIHBoYW5kbGUgZm9yIHRoZSBCUkcgbm9kZSB1c2VkIGJ5IHRoaXMgcG9ydAorICAgICAtIGN1bml0IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBDVU5JVCBub2RlIHVzZWQgYnkgdGhpcyBwb3J0CisgICAgIC0gbXBzY3JvdXRpbmcgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIE1QU0NST1VUSU5HIG5vZGUgdXNlZCBieSB0aGlzIHBvcnQKKyAgICAgLSBtcHNjaW50ciA6IHRoZSBwaGFuZGxlIGZvciB0aGUgTVBTQ0lOVFIgbm9kZSB1c2VkIGJ5IHRoaXMgcG9ydAorICAgICAtIGNlbGwtaW5kZXggOiB0aGUgaGFyZHdhcmUgaW5kZXggb2YgdGhpcyBjZWxsIGluIHRoZSBNUFNDIGNvcmUKKyAgICAgLSBtYXhfaWRsZSA6IHZhbHVlIG5lZWRlZCBmb3IgTVBTQyBDSFIzIChNYXhpbXVtIEZyYW1lIExlbmd0aCkKKyAgICAgICByZWdpc3RlcgorICAgICAtIGludGVycnVwdHMgOiA8YT4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGhlIE1QU0MuCisgICAgIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAgICAgICB0aGF0IHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorCisgICBFeGFtcGxlIERpc2NvdmVyeSBNUFNDSU5UUiBub2RlOgorICAgICBtcHNjQDgwMDAgeworCSAgICAgZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLW1wc2MiOworCSAgICAgcmVnID0gPDB4ODAwMCAweDM4PjsKKwkgICAgIHZpcnR1YWwtcmVnID0gPDB4ZjEwMDgwMDA+OworCSAgICAgc2RtYSA9IDwmU0RNQTA+OworCSAgICAgYnJnID0gPCZCUkcwPjsKKwkgICAgIGN1bml0ID0gPCZDVU5JVD47CisJICAgICBtcHNjcm91dGluZyA9IDwmTVBTQ1JPVVRJTkc+OworCSAgICAgbXBzY2ludHIgPSA8Jk1QU0NJTlRSPjsKKwkgICAgIGNlbGwtaW5kZXggPSA8MD47CisJICAgICBtYXhfaWRsZSA9IDw0MD47CisJICAgICBpbnRlcnJ1cHRzID0gPDQwPjsKKwkgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CisgICAgIH07CisKKworICAgaikgTWFydmVsbCBEaXNjb3ZlcnkgV2F0Y2ggRG9nIFRpbWVyIG5vZGVzCisKKyAgIFJlcHJlc2VudCB0aGUgRGlzY292ZXJ5J3Mgd2F0Y2hkb2cgdGltZXIgaGFyZHdhcmUKKworICAgUmVxdWlyZWQgcHJvcGVydGllczoKKyAgICAgLSBjb21wYXRpYmxlIDogIm1hcnZlbGwsbXY2NDM2MC13ZHQiCisgICAgIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhpcyBkZXZpY2UKKworICAgRXhhbXBsZSBEaXNjb3ZlcnkgV2F0Y2ggRG9nIFRpbWVyIG5vZGU6CisgICAgIHdkdEBiNDEwIHsKKwkgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXdkdCI7CisJICAgICByZWcgPSA8MHhiNDEwIDB4OD47CisgICAgIH07CisKKworICAgaykgTWFydmVsbCBEaXNjb3ZlcnkgSTJDIG5vZGVzCisKKyAgIFJlcHJlc2VudCB0aGUgRGlzY292ZXJ5J3MgSTJDIGhhcmR3YXJlCisKKyAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgICAgIC0gZGV2aWNlX3R5cGUgOiAiaTJjIgorICAgICAtIGNvbXBhdGlibGUgOiAibWFydmVsbCxtdjY0MzYwLWkyYyIKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorICAgICAtIGludGVycnVwdHMgOiA8YT4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGhlIEkyQy4KKyAgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgICAgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKKyAgIEV4YW1wbGUgRGlzY292ZXJ5IEkyQyBub2RlOgorCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtaTJjIjsKKwkgICAgIHJlZyA9IDwweGMwMDAgMHgyMD47CisJICAgICB2aXJ0dWFsLXJlZyA9IDwweGYxMDBjMDAwPjsKKwkgICAgIGludGVycnVwdHMgPSA8Mzc+OworCSAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKyAgICAgfTsKKworCisgICBsKSBNYXJ2ZWxsIERpc2NvdmVyeSBQSUMgKFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcikgbm9kZXMKKworICAgUmVwcmVzZW50IHRoZSBEaXNjb3ZlcnkncyBQSUMgaGFyZHdhcmUKKworICAgUmVxdWlyZWQgcHJvcGVydGllczoKKyAgICAgLSAjaW50ZXJydXB0LWNlbGxzIDogPDE+CisgICAgIC0gI2FkZHJlc3MtY2VsbHMgOiA8MD4KKyAgICAgLSBjb21wYXRpYmxlIDogIm1hcnZlbGwsbXY2NDM2MC1waWMiCisgICAgIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhpcyBkZXZpY2UKKyAgICAgLSBpbnRlcnJ1cHQtY29udHJvbGxlcgorCisgICBFeGFtcGxlIERpc2NvdmVyeSBQSUMgbm9kZToKKyAgICAgcGljIHsKKwkgICAgICNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJICAgICAjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXBpYyI7CisJICAgICByZWcgPSA8MHgwIDB4ODg+OworCSAgICAgaW50ZXJydXB0LWNvbnRyb2xsZXI7CisgICAgIH07CisKKworICAgbSkgTWFydmVsbCBEaXNjb3ZlcnkgTVBQIChNdWx0aXB1cnBvc2UgUGlucykgbXVsdGlwbGV4aW5nIG5vZGVzCisKKyAgIFJlcHJlc2VudCB0aGUgRGlzY292ZXJ5J3MgTVBQIGhhcmR3YXJlCisKKyAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisgICAgIC0gY29tcGF0aWJsZSA6ICJtYXJ2ZWxsLG12NjQzNjAtbXBwIgorICAgICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoaXMgZGV2aWNlCisKKyAgIEV4YW1wbGUgRGlzY292ZXJ5IE1QUCBub2RlOgorICAgICBtcHBAZjAwMCB7CisJICAgICBjb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1tcHAiOworCSAgICAgcmVnID0gPDB4ZjAwMCAweDEwPjsKKyAgICAgfTsKKworCisgICBuKSBNYXJ2ZWxsIERpc2NvdmVyeSBHUFAgKEdlbmVyYWwgUHVycG9zZSBQaW5zKSBub2RlcworCisgICBSZXByZXNlbnQgdGhlIERpc2NvdmVyeSdzIEdQUCBoYXJkd2FyZQorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIGNvbXBhdGlibGUgOiAibWFydmVsbCxtdjY0MzYwLWdwcCIKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorCisgICBFeGFtcGxlIERpc2NvdmVyeSBHUFAgbm9kZToKKyAgICAgZ3BwQGYwMDAgeworCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtZ3BwIjsKKwkgICAgIHJlZyA9IDwweGYxMDAgMHgyMD47CisgICAgIH07CisKKworICAgbykgTWFydmVsbCBEaXNjb3ZlcnkgUENJIGhvc3QgYnJpZGdlIG5vZGUKKworICAgUmVwcmVzZW50cyB0aGUgRGlzY292ZXJ5J3MgUENJIGhvc3QgYnJpZGdlIGRldmljZS4gIFRoZSBwcm9wZXJ0aWVzCisgICBmb3IgdGhpcyBub2RlIGNvbmZvcm0gdG8gUmV2IDIuMSBvZiB0aGUgUENJIEJ1cyBCaW5kaW5nIHRvIElFRUUKKyAgIDEyNzUtMTk5NC4gIEEgdHlwaWNhbCB2YWx1ZSBmb3IgdGhlIGNvbXBhdGlibGUgcHJvcGVydHkgaXMKKyAgICJtYXJ2ZWxsLG12NjQzNjAtcGNpIi4KKworICAgRXhhbXBsZSBEaXNjb3ZlcnkgUENJIGhvc3QgYnJpZGdlIG5vZGUKKyAgICAgcGNpQDgwMDAwMDAwIHsKKwkgICAgICNhZGRyZXNzLWNlbGxzID0gPDM+OworCSAgICAgI3NpemUtY2VsbHMgPSA8Mj47CisJICAgICAjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCSAgICAgZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXBjaSI7CisJICAgICByZWcgPSA8MHhjZjggMHg4PjsKKwkgICAgIHJhbmdlcyA9IDwweDAxMDAwMDAwIDB4MCAgICAgICAgMHgwCisJCQkgICAgIDB4ODgwMDAwMDAgMHgwIDB4MDEwMDAwMDAKKwkJICAgICAgIDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCSAgICAgMHg4MDAwMDAwMCAweDAgMHgwODAwMDAwMD47CisJICAgICBidXMtcmFuZ2UgPSA8MCAyNTU+OworCSAgICAgY2xvY2stZnJlcXVlbmN5ID0gPDY2MDAwMDAwPjsKKwkgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CisJICAgICBpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkgICAgIGludGVycnVwdC1tYXAgPSA8CisJCSAgICAgLyogSURTRUwgMHgwYSAqLworCQkgICAgIDB4NTAwMCAwIDAgMSAmUElDIDgwCisJCSAgICAgMHg1MDAwIDAgMCAyICZQSUMgODEKKwkJICAgICAweDUwMDAgMCAwIDMgJlBJQyA5MQorCQkgICAgIDB4NTAwMCAwIDAgNCAmUElDIDkzCisKKwkJICAgICAvKiBJRFNFTCAweDBiICovCisJCSAgICAgMHg1ODAwIDAgMCAxICZQSUMgOTEKKwkJICAgICAweDU4MDAgMCAwIDIgJlBJQyA5MworCQkgICAgIDB4NTgwMCAwIDAgMyAmUElDIDgwCisJCSAgICAgMHg1ODAwIDAgMCA0ICZQSUMgODEKKworCQkgICAgIC8qIElEU0VMIDB4MGMgKi8KKwkJICAgICAweDYwMDAgMCAwIDEgJlBJQyA5MQorCQkgICAgIDB4NjAwMCAwIDAgMiAmUElDIDkzCisJCSAgICAgMHg2MDAwIDAgMCAzICZQSUMgODAKKwkJICAgICAweDYwMDAgMCAwIDQgJlBJQyA4MQorCisJCSAgICAgLyogSURTRUwgMHgwZCAqLworCQkgICAgIDB4NjgwMCAwIDAgMSAmUElDIDkzCisJCSAgICAgMHg2ODAwIDAgMCAyICZQSUMgODAKKwkJICAgICAweDY4MDAgMCAwIDMgJlBJQyA4MQorCQkgICAgIDB4NjgwMCAwIDAgNCAmUElDIDkxCisJICAgICA+OworICAgICB9OworCisKKyAgIHApIE1hcnZlbGwgRGlzY292ZXJ5IENQVSBFcnJvciBub2RlcworCisgICBSZXByZXNlbnQgdGhlIERpc2NvdmVyeSdzIENQVSBlcnJvciBoYW5kbGVyIGRldmljZS4KKworICAgUmVxdWlyZWQgcHJvcGVydGllczoKKyAgICAgLSBjb21wYXRpYmxlIDogIm1hcnZlbGwsbXY2NDM2MC1jcHUtZXJyb3IiCisgICAgIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhpcyBkZXZpY2UKKyAgICAgLSBpbnRlcnJ1cHRzIDogdGhlIGludGVycnVwdCBudW1iZXIgZm9yIHRoaXMgZGV2aWNlCisgICAgIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAgICAgICB0aGF0IHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorCisgICBFeGFtcGxlIERpc2NvdmVyeSBDUFUgRXJyb3Igbm9kZToKKyAgICAgY3B1LWVycm9yQDAwNzAgeworCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtY3B1LWVycm9yIjsKKwkgICAgIHJlZyA9IDwweDcwIDB4MTAgMHgxMjggMHgyOD47CisJICAgICBpbnRlcnJ1cHRzID0gPDM+OworCSAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKyAgICAgfTsKKworCisgICBxKSBNYXJ2ZWxsIERpc2NvdmVyeSBTUkFNIENvbnRyb2xsZXIgbm9kZXMKKworICAgUmVwcmVzZW50IHRoZSBEaXNjb3ZlcnkncyBTUkFNIGNvbnRyb2xsZXIgZGV2aWNlLgorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIGNvbXBhdGlibGUgOiAibWFydmVsbCxtdjY0MzYwLXNyYW0tY3RybCIKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorICAgICAtIGludGVycnVwdHMgOiB0aGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGhpcyBkZXZpY2UKKyAgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgICAgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKKyAgIEV4YW1wbGUgRGlzY292ZXJ5IFNSQU0gQ29udHJvbGxlciBub2RlOgorICAgICBzcmFtLWN0cmxAMDM4MCB7CisJICAgICBjb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1zcmFtLWN0cmwiOworCSAgICAgcmVnID0gPDB4MzgwIDB4ODA+OworCSAgICAgaW50ZXJydXB0cyA9IDwxMz47CisJICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworICAgICB9OworCisKKyAgIHIpIE1hcnZlbGwgRGlzY292ZXJ5IFBDSSBFcnJvciBIYW5kbGVyIG5vZGVzCisKKyAgIFJlcHJlc2VudCB0aGUgRGlzY292ZXJ5J3MgUENJIGVycm9yIGhhbmRsZXIgZGV2aWNlLgorCisgICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgICAtIGNvbXBhdGlibGUgOiAibWFydmVsbCxtdjY0MzYwLXBjaS1lcnJvciIKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorICAgICAtIGludGVycnVwdHMgOiB0aGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGhpcyBkZXZpY2UKKyAgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgICAgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKKyAgIEV4YW1wbGUgRGlzY292ZXJ5IFBDSSBFcnJvciBIYW5kbGVyIG5vZGU6CisgICAgIHBjaS1lcnJvckAxZDQwIHsKKwkgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXBjaS1lcnJvciI7CisJICAgICByZWcgPSA8MHgxZDQwIDB4NDAgMHhjMjggMHg0PjsKKwkgICAgIGludGVycnVwdHMgPSA8MTI+OworCSAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKyAgICAgfTsKKworCisgICBzKSBNYXJ2ZWxsIERpc2NvdmVyeSBNZW1vcnkgQ29udHJvbGxlciBub2RlcworCisgICBSZXByZXNlbnQgdGhlIERpc2NvdmVyeSdzIG1lbW9yeSBjb250cm9sbGVyIGRldmljZS4KKworICAgUmVxdWlyZWQgcHJvcGVydGllczoKKyAgICAgLSBjb21wYXRpYmxlIDogIm1hcnZlbGwsbXY2NDM2MC1tZW0tY3RybCIKKyAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGlzIGRldmljZQorICAgICAtIGludGVycnVwdHMgOiB0aGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGhpcyBkZXZpY2UKKyAgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICAgICAgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKKyAgIEV4YW1wbGUgRGlzY292ZXJ5IE1lbW9yeSBDb250cm9sbGVyIG5vZGU6CisgICAgIG1lbS1jdHJsQDE0MDAgeworCSAgICAgY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtbWVtLWN0cmwiOworCSAgICAgcmVnID0gPDB4MTQwMCAweDYwPjsKKwkgICAgIGludGVycnVwdHMgPSA8MTc+OworCSAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKyAgICAgfTsKKworCitWSUlJIC0gU3BlY2lmeWluZyBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gZm9yIGRldmljZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBUaGUgZGV2aWNlIHRyZWUgcmVwcmVzZW50cyB0aGUgYnVzc2VzIGFuZCBkZXZpY2VzIG9mIGEgaGFyZHdhcmUKQEAgLTI5MDUsNiArMzQzMyw1NCBAQAogCTIgPSAgaGlnaCB0byBsb3cgZWRnZSBzZW5zaXRpdmUgdHlwZSBlbmFibGVkCiAJMyA9ICBsb3cgdG8gaGlnaCBlZGdlIHNlbnNpdGl2ZSB0eXBlIGVuYWJsZWQKIAorVklJSSAtIFNwZWNpZnlpbmcgR1BJTyBpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxKSBncGlvcyBwcm9wZXJ0eQorLS0tLS0tLS0tLS0tLS0tLS0KKworTm9kZXMgdGhhdCBtYWtlcyB1c2Ugb2YgR1BJT3Mgc2hvdWxkIGRlZmluZSB0aGVtIHVzaW5nIGBncGlvcycgcHJvcGVydHksCitmb3JtYXQgb2Ygd2hpY2ggaXM6IDwmZ3Bpby1jb250cm9sbGVyMS1waGFuZGxlIGdwaW8xLXNwZWNpZmllcgorCQkgICAgICZncGlvLWNvbnRyb2xsZXIyLXBoYW5kbGUgZ3BpbzItc3BlY2lmaWVyCisJCSAgICAgMCAvKiBob2xlcyBhcmUgcGVybWl0dGVkLCBtZWFucyBubyBHUElPIDMgKi8KKwkJICAgICAmZ3Bpby1jb250cm9sbGVyNC1waGFuZGxlIGdwaW80LXNwZWNpZmllcgorCQkgICAgIC4uLj47CisKK05vdGUgdGhhdCBncGlvLXNwZWNpZmllciBsZW5ndGggaXMgY29udHJvbGxlciBkZXBlbmRlbnQuCisKK2dwaW8tc3BlY2lmaWVyIG1heSBlbmNvZGU6IGJhbmssIHBpbiBwb3NpdGlvbiBpbnNpZGUgdGhlIGJhbmssCit3aGV0aGVyIHBpbiBpcyBvcGVuLWRyYWluIGFuZCB3aGV0aGVyIHBpbiBpcyBsb2dpY2FsbHkgaW52ZXJ0ZWQuCisKK0V4YW1wbGUgb2YgdGhlIG5vZGUgdXNpbmcgR1BJT3M6CisKKwlub2RlIHsKKwkJZ3Bpb3MgPSA8JnFlX3Bpb19lIDE4IDA+OworCX07CisKK0luIHRoaXMgZXhhbXBsZSBncGlvLXNwZWNpZmllciBpcyAiMTggMCIgYW5kIGVuY29kZXMgR1BJTyBwaW4gbnVtYmVyLAorYW5kIGVtcHR5IEdQSU8gZmxhZ3MgYXMgYWNjZXB0ZWQgYnkgdGhlICJxZV9waW9fZSIgZ3Bpby1jb250cm9sbGVyLgorCisyKSBncGlvLWNvbnRyb2xsZXIgbm9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVyeSBHUElPIGNvbnRyb2xsZXIgbm9kZSBtdXN0IGhhdmUgI2dwaW8tY2VsbHMgcHJvcGVydHkgZGVmaW5lZCwKK3RoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHRvIHRyYW5zbGF0ZSBncGlvLXNwZWNpZmllcnMuCisKK0V4YW1wbGUgb2YgdHdvIFNPQyBHUElPIGJhbmtzIGRlZmluZWQgYXMgZ3Bpby1jb250cm9sbGVyIG5vZGVzOgorCisJcWVfcGlvX2E6IGdwaW8tY29udHJvbGxlckAxNDAwIHsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCWNvbXBhdGlibGUgPSAiZnNsLHFlLXBhcmlvLWJhbmstYSIsICJmc2wscWUtcGFyaW8tYmFuayI7CisJCXJlZyA9IDwweDE0MDAgMHgxOD47CisJCWdwaW8tY29udHJvbGxlcjsKKwl9OworCisJcWVfcGlvX2U6IGdwaW8tY29udHJvbGxlckAxNDYwIHsKKwkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCWNvbXBhdGlibGUgPSAiZnNsLHFlLXBhcmlvLWJhbmstZSIsICJmc2wscWUtcGFyaW8tYmFuayI7CisJCXJlZyA9IDwweDE0NjAgMHgxOD47CisJCWdwaW8tY29udHJvbGxlcjsKKwl9OwogCiBBcHBlbmRpeCBBIC0gU2FtcGxlIFNPQyBub2RlIGZvciBNUEM4NTQwCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcGh5cC1hc3Npc3RlZC1kdW1wLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9waHlwLWFzc2lzdGVkLWR1bXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjgyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcGh5cC1hc3Npc3RlZC1kdW1wLnR4dApAQCAtMCwwICsxLDEyNyBAQAorCisgICAgICAgICAgICAgICAgICAgSHlwZXJ2aXNvci1Bc3Npc3RlZCBEdW1wCisgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIE5vdmVtYmVyIDIwMDcKKworVGhlIGdvYWwgb2YgaHlwZXJ2aXNvci1hc3Npc3RlZCBkdW1wIGlzIHRvIGVuYWJsZSB0aGUgZHVtcCBvZgorYSBjcmFzaGVkIHN5c3RlbSwgYW5kIHRvIGRvIHNvIGZyb20gYSBmdWxseS1yZXNldCBzeXN0ZW0sIGFuZAordG8gbWluaW1pemUgdGhlIHRvdGFsIGVsYXBzZWQgdGltZSB1bnRpbCB0aGUgc3lzdGVtIGlzIGJhY2sKK2luIHByb2R1Y3Rpb24gdXNlLgorCitBcyBjb21wYXJlZCB0byBrZHVtcCBvciBvdGhlciBzdHJhdGVnaWVzLCBoeXBlcnZpc29yLWFzc2lzdGVkCitkdW1wIG9mZmVycyBzZXZlcmFsIHN0cm9uZywgcHJhY3RpY2FsIGFkdmFudGFnZXM6CisKKy0tIFVubGlrZSBrZHVtcCwgdGhlIHN5c3RlbSBoYXMgYmVlbiByZXNldCwgYW5kIGxvYWRlZAorICAgd2l0aCBhIGZyZXNoIGNvcHkgb2YgdGhlIGtlcm5lbC4gIEluIHBhcnRpY3VsYXIsCisgICBQQ0kgYW5kIEkvTyBkZXZpY2VzIGhhdmUgYmVlbiByZWluaXRpYWxpemVkIGFuZCBhcmUKKyAgIGluIGEgY2xlYW4sIGNvbnNpc3RlbnQgc3RhdGUuCistLSBBcyB0aGUgZHVtcCBpcyBwZXJmb3JtZWQsIHRoZSBkdW1wZWQgbWVtb3J5IGJlY29tZXMKKyAgIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtIGZvciBub3JtYWwgdXNlLgorLS0gQWZ0ZXIgdGhlIGR1bXAgaXMgY29tcGxldGVkLCBubyBmdXJ0aGVyIHJlYm9vdHMgYXJlCisgICByZXF1aXJlZDsgdGhlIHN5c3RlbSB3aWxsIGJlIGZ1bGx5IHVzYWJsZSwgYW5kIHJ1bm5pbmcKKyAgIGluIGl0J3Mgbm9ybWFsLCBwcm9kdWN0aW9uIG1vZGUgb24gaXQgbm9ybWFsIGtlcm5lbC4KKworVGhlIGFib3ZlIGNhbiBvbmx5IGJlIGFjY29tcGxpc2hlZCBieSBjb29yZGluYXRpb24gd2l0aCwKK2FuZCBhc3Npc3RhbmNlIGZyb20gdGhlIGh5cGVydmlzb3IuIFRoZSBwcm9jZWR1cmUgaXMKK2FzIGZvbGxvd3M6CisKKy0tIFdoZW4gYSBzeXN0ZW0gY3Jhc2hlcywgdGhlIGh5cGVydmlzb3Igd2lsbCBzYXZlCisgICB0aGUgbG93IDI1Nk1CIG9mIFJBTSB0byBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZAorICAgc2F2ZSByZWdpb24uIEl0IHdpbGwgYWxzbyBzYXZlIHN5c3RlbSBzdGF0ZSwgc3lzdGVtCisgICByZWdpc3RlcnMsIGFuZCBoYXJkd2FyZSBQVEUncy4KKworLS0gQWZ0ZXIgdGhlIGxvdyAyNTZNQiBhcmVhIGhhcyBiZWVuIHNhdmVkLCB0aGUKKyAgIGh5cGVydmlzb3Igd2lsbCByZXNldCBQQ0kgYW5kIG90aGVyIGhhcmR3YXJlIHN0YXRlLgorICAgSXQgd2lsbCAqbm90KiBjbGVhciBSQU0uIEl0IHdpbGwgdGhlbiBsYXVuY2ggdGhlCisgICBib290bG9hZGVyLCBhcyBub3JtYWwuCisKKy0tIFRoZSBmcmVzaGx5IGJvb3RlZCBrZXJuZWwgd2lsbCBub3RpY2UgdGhhdCB0aGVyZQorICAgaXMgYSBuZXcgbm9kZSAoaWJtLGR1bXAta2VybmVsKSBpbiB0aGUgZGV2aWNlIHRyZWUsCisgICBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgaXMgY3Jhc2ggZGF0YSBhdmFpbGFibGUgZnJvbQorICAgYSBwcmV2aW91cyBib290LiBJdCB3aWxsIGJvb3QgaW50byBvbmx5IDI1Nk1CIG9mIFJBTSwKKyAgIHJlc2VydmluZyB0aGUgcmVzdCBvZiBzeXN0ZW0gbWVtb3J5LgorCistLSBVc2Vyc3BhY2UgdG9vbHMgd2lsbCBwYXJzZSAvc3lzL2tlcm5lbC9yZWxlYXNlX3JlZ2lvbgorICAgYW5kIHJlYWQgL3Byb2Mvdm1jb3JlIHRvIG9idGFpbiB0aGUgY29udGVudHMgb2YgbWVtb3J5LAorICAgd2hpY2ggaG9sZHMgdGhlIHByZXZpb3VzIGNyYXNoZWQga2VybmVsLiBUaGUgdXNlcnNwYWNlCisgICB0b29scyBtYXkgY29weSB0aGlzIGluZm8gdG8gZGlzaywgb3IgbmV0d29yaywgbmFzLCBzYW4sCisgICBpc2NzaSwgZXRjLiBhcyBkZXNpcmVkLgorCisgICBGb3IgRXhhbXBsZTogdGhlIHZhbHVlcyBpbiAvc3lzL2tlcm5lbC9yZWxlYXNlLXJlZ2lvbgorICAgd291bGQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzIChhZGRyZXNzLXJhbmdlIHBhaXJzKS4KKyAgIENQVToweDE3N2ZlZTAwMC0weDEwMDAwOiBIUFRFOjB4MTc3ZmZlMDIwLTB4MTAwMDogLworICAgRFVNUDoweDE3N2ZmZjAyMC0weDEwMDAwMDAwLCAweDEwMDAwMDAwLTB4MTZGMUQzNzBBCisKKy0tIEFzIHRoZSB1c2Vyc3BhY2UgdG9vbHMgY29tcGxldGUgc2F2aW5nIGEgcG9ydGlvbiBvZgorICAgZHVtcCwgdGhleSBlY2hvIGFuIG9mZnNldCBhbmQgc2l6ZSB0bworICAgL3N5cy9rZXJuZWwvcmVsZWFzZV9yZWdpb24gdG8gcmVsZWFzZSB0aGUgcmVzZXJ2ZWQKKyAgIG1lbW9yeSBiYWNrIHRvIGdlbmVyYWwgdXNlLgorCisgICBBbiBleGFtcGxlIG9mIHRoaXMgaXM6CisgICAgICJlY2hvIDB4NDAwMDAwMDAgMHgxMDAwMDAwMCA+IC9zeXMva2VybmVsL3JlbGVhc2VfcmVnaW9uIgorICAgd2hpY2ggd2lsbCByZWxlYXNlIDI1Nk1CIGF0IHRoZSAxR0IgYm91bmRhcnkuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlIGh5cGVydmlzb3ItYXNzaXN0ZWQgZHVtcCBmZWF0dXJlCitpcyBvbmx5IGF2YWlsYWJsZSBvbiBQb3dlcjYtYmFzZWQgc3lzdGVtcyB3aXRoIHJlY2VudAorZmlybXdhcmUgdmVyc2lvbnMuCisKK0ltcGxlbWVudGF0aW9uIGRldGFpbHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0R1cmluZyBib290LCBhIGNoZWNrIGlzIG1hZGUgdG8gc2VlIGlmIGZpcm13YXJlIHN1cHBvcnRzCit0aGlzIGZlYXR1cmUgb24gdGhpcyBwYXJ0aWN1bGFyIG1hY2hpbmUuIElmIGl0IGRvZXMsIHRoZW4KK3dlIGNoZWNrIHRvIHNlZSBpZiBhIGFjdGl2ZSBkdW1wIGlzIHdhaXRpbmcgZm9yIHVzLiBJZiB5ZXMKK3RoZW4gZXZlcnl0aGluZyBidXQgMjU2IE1CIG9mIFJBTSBpcyByZXNlcnZlZCBkdXJpbmcgZWFybHkKK2Jvb3QuIFRoaXMgYXJlYSBpcyByZWxlYXNlZCBvbmNlIHdlIGNvbGxlY3QgYSBkdW1wIGZyb20gdXNlcgorbGFuZCBzY3JpcHRzIHRoYXQgYXJlIHJ1bi4gSWYgdGhlcmUgaXMgZHVtcCBkYXRhLCB0aGVuCit0aGUgL3N5cy9rZXJuZWwvcmVsZWFzZV9yZWdpb24gZmlsZSBpcyBjcmVhdGVkLCBhbmQKK3RoZSByZXNlcnZlZCBtZW1vcnkgaXMgaGVsZC4KKworSWYgdGhlcmUgaXMgbm8gd2FpdGluZyBkdW1wIGRhdGEsIHRoZW4gb25seSB0aGUgaGlnaGVzdAorMjU2TUIgb2YgdGhlIHJhbSBpcyByZXNlcnZlZCBhcyBhIHNjcmF0Y2ggYXJlYS4gVGhpcyBhcmVhCitpcyAqbm90KiByZWxlYXNlZDogdGhpcyByZWdpb24gd2lsbCBiZSBrZXB0IHBlcm1hbmVudGx5CityZXNlcnZlZCwgc28gdGhhdCBpdCBjYW4gYWN0IGFzIGEgcmVjZXB0YWNsZSBmb3IgYSBjb3B5CitvZiB0aGUgbG93IDI1Nk1CIGluIHRoZSBjYXNlIGEgY3Jhc2ggZG9lcyBvY2N1ci4gU2VlLAoraG93ZXZlciwgIm9wZW4gaXNzdWVzIiBiZWxvdywgYXMgdG8gd2hldGhlcgorc3VjaCBhIHJlc2VydmVkIHJlZ2lvbiBpcyByZWFsbHkgbmVlZGVkLgorCitDdXJyZW50bHkgdGhlIGR1bXAgd2lsbCBiZSBjb3BpZWQgZnJvbSAvcHJvYy92bWNvcmUgdG8gYQorYSBuZXcgZmlsZSB1cG9uIHVzZXIgaW50ZXJ2ZW50aW9uLiBUaGUgc3RhcnRpbmcgYWRkcmVzcwordG8gYmUgcmVhZCBhbmQgdGhlIHJhbmdlIGZvciBlYWNoIGRhdGEgcG9pbnQgaW4gcHJvdmlkZWQKK2luIC9zeXMva2VybmVsL3JlbGVhc2VfcmVnaW9uLgorCitUaGUgdG9vbHMgdG8gZXhhbWluZSB0aGUgZHVtcCB3aWxsIGJlIHNhbWUgYXMgdGhlIG9uZXMKK3VzZWQgZm9yIGtkdW1wLgorCitHZW5lcmFsIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0KK1NlY3VyaXR5OiBwbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGFyZSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWVzCit3aXRoIGFueSBzb3J0IG9mIGR1bXAgbWVjaGFuaXNtLiBJbiBwYXJ0aWN1bGFyLCBwbGFpbnRleHQKKyh1bmVuY3J5cHRlZCkgZGF0YSwgYW5kIHBvc3NpYmx5IHBhc3N3b3JkcywgbWF5IGJlIHByZXNlbnQgaW4KK3RoZSBkdW1wIGRhdGEuIFVzZXJzcGFjZSB0b29scyBtdXN0IHRha2UgYWRlcXVhdGUgcHJlY2F1dGlvbnMgdG8KK3ByZXNlcnZlIHNlY3VyaXR5LgorCitPcGVuIGlzc3Vlcy9Ub0RvOgorLS0tLS0tLS0tLS0tCisgbyBUaGUgdmFyaW91cyBjb2RlIHBhdGhzIHRoYXQgdGVsbCB0aGUgaHlwZXJ2aXNvciB0aGF0IGEgY3Jhc2gKKyAgIG9jY3VycmVkLCB2cy4gaXQgc2ltcGx5IGJlaW5nIGEgbm9ybWFsIHJlYm9vdCwgc2hvdWxkIGJlCisgICByZXZpZXdlZCwgYW5kIHBvc3NpYmx5IGNsYXJpZmllZC9maXhlZC4KKworIG8gSW5zdGVhZCBvZiB1c2luZyAvc3lzL2tlcm5lbCwgc2hvdWxkIHRoZXJlIGJlIGEgL3N5cy9kdW1wCisgICBpbnN0ZWFkPyBUaGVyZSBpcyBhIGR1bXBfc3Vic3lzIGJlaW5nIGNyZWF0ZWQgYnkgdGhlIHMzOTAgY29kZSwKKyAgIHBlcmhhcHMgdGhlIHBzZXJpZXMgY29kZSBzaG91bGQgdXNlIGEgc2ltaWxhciBsYXlvdXQgYXMgd2VsbC4KKworIG8gSXMgcmVzZXJ2aW5nIGEgMjU2TUIgcmVnaW9uIHJlYWxseSByZXF1aXJlZD8gVGhlIGdvYWwgb2YKKyAgIHJlc2VydmluZyBhIDI1Nk1CIHNjcmF0Y2ggYXJlYSBpcyB0byBtYWtlIHN1cmUgdGhhdCBubworICAgaW1wb3J0YW50IGNyYXNoIGRhdGEgaXMgY2xvYmJlcmVkIHdoZW4gdGhlIGh5cGVydmlzb3IKKyAgIHNhdmUgbG93IG1lbSB0byB0aGUgc2NyYXRjaCBhcmVhLiBCdXQsIGlmIG9uZSBjb3VsZCBhc3N1cmUKKyAgIHRoYXQgbm90aGluZyBpbXBvcnRhbnQgaXMgbG9jYXRlZCBpbiBzb21lIDI1Nk1CIGFyZWEsIHRoZW4KKyAgIGl0IHdvdWxkIG5vdCBuZWVkIHRvIGJlIHJlc2VydmVkLiBTb21ldGhpbmcgdGhhdCBjYW4gYmUKKyAgIGltcHJvdmVkIGluIHN1YnNlcXVlbnQgdmVyc2lvbnMuCisKKyBvIFN0aWxsIHdvcmtpbmcgdGhlIGtkdW1wIHRlYW0gdG8gaW50ZWdyYXRlIHRoaXMgd2l0aCBrZHVtcCwKKyAgIHNvbWUgd29yayByZW1haW5zIGJ1dCB0aGlzIHdvdWxkIG5vdCBhZmZlY3QgdGhlIGN1cnJlbnQKKyAgIHBhdGNoZXMuCisKKyBvIFN0aWxsIG5lZWQgdG8gd3JpdGUgYSBzaGVsbCBzY3JpcHQsIHRvIGNvcHkgdGhlIGR1bXAgYXdheS4KKyAgIEN1cnJlbnRseSBJIGFtIHBhcnNpbmcgaXQgbWFudWFsbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByY3RsL2Rpc2FibGUtdHNjLWN0eHQtc3ctc3RyZXNzLXRlc3QuYyBiL0RvY3VtZW50YXRpb24vcHJjdGwvZGlzYWJsZS10c2MtY3R4dC1zdy1zdHJlc3MtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZThlOTVlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcHJjdGwvZGlzYWJsZS10c2MtY3R4dC1zdy1zdHJlc3MtdGVzdC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBUZXN0cyBmb3IgcHJjdGwoUFJfR0VUX1RTQywgLi4uKSAvIHByY3RsKFBSX1NFVF9UU0MsIC4uLikKKyAqCisgKiBUZXN0cyBpZiB0aGUgY29udHJvbCByZWdpc3RlciBpcyB1cGRhdGVkIGNvcnJlY3RseQorICogYXQgY29udGV4dCBzd2l0Y2hlcworICoKKyAqIFdhcm5pbmc6IHRoaXMgdGVzdCB3aWxsIGNhdXNlIGEgdmVyeSBoaWdoIGxvYWQgZm9yIGEgZmV3IHNlY29uZHMKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDx3YWl0Lmg+CisKKworI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CisKKy8qIEdldC9zZXQgdGhlIHByb2Nlc3MnIGFiaWxpdHkgdG8gdXNlIHRoZSB0aW1lc3RhbXAgY291bnRlciBpbnN0cnVjdGlvbiAqLworI2lmbmRlZiBQUl9HRVRfVFNDCisjZGVmaW5lIFBSX0dFVF9UU0MgMjUKKyNkZWZpbmUgUFJfU0VUX1RTQyAyNgorIyBkZWZpbmUgUFJfVFNDX0VOQUJMRQkJMSAgIC8qIGFsbG93IHRoZSB1c2Ugb2YgdGhlIHRpbWVzdGFtcCBjb3VudGVyICovCisjIGRlZmluZSBQUl9UU0NfU0lHU0VHVgkJMiAgIC8qIHRocm93IGEgU0lHU0VHViBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIFRTQyAqLworI2VuZGlmCisKK3VpbnQ2NF90IHJkdHNjKCkgewordWludDMyX3QgbG8sIGhpOworLyogV2UgY2Fubm90IHVzZSAiPUEiLCBzaW5jZSB0aGlzIHdvdWxkIHVzZSAlcmF4IG9uIHg4Nl82NCAqLworX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZHRzYyIgOiAiPWEiIChsbyksICI9ZCIgKGhpKSk7CityZXR1cm4gKHVpbnQ2NF90KWhpIDw8IDMyIHwgbG87Cit9CisKK3ZvaWQgc2lnc2Vndl9leHBlY3QoaW50IHNpZykKK3sKKwkvKiAqLworfQorCit2b2lkIHNlZ3Z0YXNrKHZvaWQpCit7CisJaWYgKHByY3RsKFBSX1NFVF9UU0MsIFBSX1RTQ19TSUdTRUdWKSA8IDApCisJeworCQlwZXJyb3IoInByY3RsIik7CisJCWV4aXQoMCk7CisJfQorCXNpZ25hbChTSUdTRUdWLCBzaWdzZWd2X2V4cGVjdCk7CisJYWxhcm0oMTApOworCXJkdHNjKCk7CisJZnByaW50ZihzdGRlcnIsICJGQVRBTCBFUlJPUiwgcmR0c2MoKSBzdWNjZWVkZWQgd2hpbGUgZGlzYWJsZWRcbiIpOworCWV4aXQoMCk7Cit9CisKKwordm9pZCBzaWdzZWd2X2ZhaWwoaW50IHNpZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIEVSUk9SLCByZHRzYygpIGZhaWxlZCB3aGlsZSBlbmFibGVkXG4iKTsKKwlleGl0KDApOworfQorCit2b2lkIHJkdHNjdGFzayh2b2lkKQoreworCWlmIChwcmN0bChQUl9TRVRfVFNDLCBQUl9UU0NfRU5BQkxFKSA8IDApCisJeworCQlwZXJyb3IoInByY3RsIik7CisJCWV4aXQoMCk7CisJfQorCXNpZ25hbChTSUdTRUdWLCBzaWdzZWd2X2ZhaWwpOworCWFsYXJtKDEwKTsKKwlmb3IoOzspIHJkdHNjKCk7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBuX3Rhc2tzID0gMTAwLCBpOworCisJZnByaW50ZihzdGRlcnIsICJbTm8gZnVydGhlciBvdXRwdXQgbWVhbnMgd2UncmUgYWxscmlnaHRdXG4iKTsKKworCWZvciAoaT0wOyBpPG5fdGFza3M7IGkrKykKKwkJaWYgKGZvcmsoKSA9PSAwKQorCQl7CisJCQlpZiAoaSAmIDEpCisJCQkJc2VndnRhc2soKTsKKwkJCWVsc2UKKwkJCQlyZHRzY3Rhc2soKTsKKwkJfQorCisJZm9yIChpPTA7IGk8bl90YXNrczsgaSsrKQorCQl3YWl0KE5VTEwpOworCisJZXhpdCgwKTsKK30KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmN0bC9kaXNhYmxlLXRzYy1vbi1vZmYtc3RyZXNzLXRlc3QuYyBiL0RvY3VtZW50YXRpb24vcHJjdGwvZGlzYWJsZS10c2Mtb24tb2ZmLXN0cmVzcy10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjZDkxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ByY3RsL2Rpc2FibGUtdHNjLW9uLW9mZi1zdHJlc3MtdGVzdC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBUZXN0cyBmb3IgcHJjdGwoUFJfR0VUX1RTQywgLi4uKSAvIHByY3RsKFBSX1NFVF9UU0MsIC4uLikKKyAqCisgKiBUZXN0cyBpZiB0aGUgY29udHJvbCByZWdpc3RlciBpcyB1cGRhdGVkIGNvcnJlY3RseQorICogd2hlbiBzZXQgd2l0aCBwcmN0bCgpCisgKgorICogV2FybmluZzogdGhpcyB0ZXN0IHdpbGwgY2F1c2UgYSB2ZXJ5IGhpZ2ggbG9hZCBmb3IgYSBmZXcgc2Vjb25kcworICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHdhaXQuaD4KKworCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcHJjdGwuaD4KKworLyogR2V0L3NldCB0aGUgcHJvY2VzcycgYWJpbGl0eSB0byB1c2UgdGhlIHRpbWVzdGFtcCBjb3VudGVyIGluc3RydWN0aW9uICovCisjaWZuZGVmIFBSX0dFVF9UU0MKKyNkZWZpbmUgUFJfR0VUX1RTQyAyNQorI2RlZmluZSBQUl9TRVRfVFNDIDI2CisjIGRlZmluZSBQUl9UU0NfRU5BQkxFCQkxICAgLyogYWxsb3cgdGhlIHVzZSBvZiB0aGUgdGltZXN0YW1wIGNvdW50ZXIgKi8KKyMgZGVmaW5lIFBSX1RTQ19TSUdTRUdWCQkyICAgLyogdGhyb3cgYSBTSUdTRUdWIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgVFNDICovCisjZW5kaWYKKworLyogc25pcHBldCBmcm9tIHdpa2lwZWRpYSA6LSkgKi8KKwordWludDY0X3QgcmR0c2MoKSB7Cit1aW50MzJfdCBsbywgaGk7CisvKiBXZSBjYW5ub3QgdXNlICI9QSIsIHNpbmNlIHRoaXMgd291bGQgdXNlICVyYXggb24geDg2XzY0ICovCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJkdHNjIiA6ICI9YSIgKGxvKSwgIj1kIiAoaGkpKTsKK3JldHVybiAodWludDY0X3QpaGkgPDwgMzIgfCBsbzsKK30KKworaW50IHNob3VsZF9zZWd2ID0gMDsKKwordm9pZCBzaWdzZWd2X2NiKGludCBzaWcpCit7CisJaWYgKCFzaG91bGRfc2VndikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgRVJST1IsIHJkdHNjKCkgZmFpbGVkIHdoaWxlIGVuYWJsZWRcbiIpOworCQlleGl0KDApOworCX0KKwlpZiAocHJjdGwoUFJfU0VUX1RTQywgUFJfVFNDX0VOQUJMRSkgPCAwKQorCXsKKwkJcGVycm9yKCJwcmN0bCIpOworCQlleGl0KDApOworCX0KKwlzaG91bGRfc2VndiA9IDA7CisKKwlyZHRzYygpOworfQorCit2b2lkIHRhc2sodm9pZCkKK3sKKwlzaWduYWwoU0lHU0VHViwgc2lnc2Vndl9jYik7CisJYWxhcm0oMTApOworCWZvcig7OykKKwl7CisJCXJkdHNjKCk7CisJCWlmIChzaG91bGRfc2VndikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBFUlJPUiwgcmR0c2MoKSBzdWNjZWVkZWQgd2hpbGUgZGlzYWJsZWRcbiIpOworCQkJZXhpdCgwKTsKKwkJfQorCQlpZiAocHJjdGwoUFJfU0VUX1RTQywgUFJfVFNDX1NJR1NFR1YpIDwgMCkKKwkJeworCQkJcGVycm9yKCJwcmN0bCIpOworCQkJZXhpdCgwKTsKKwkJfQorCQlzaG91bGRfc2VndiA9IDE7CisJfQorfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgbl90YXNrcyA9IDEwMCwgaTsKKworCWZwcmludGYoc3RkZXJyLCAiW05vIGZ1cnRoZXIgb3V0cHV0IG1lYW5zIHdlJ3JlIGFsbHJpZ2h0XVxuIik7CisKKwlmb3IgKGk9MDsgaTxuX3Rhc2tzOyBpKyspCisJCWlmIChmb3JrKCkgPT0gMCkKKwkJCXRhc2soKTsKKworCWZvciAoaT0wOyBpPG5fdGFza3M7IGkrKykKKwkJd2FpdChOVUxMKTsKKworCWV4aXQoMCk7Cit9CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJjdGwvZGlzYWJsZS10c2MtdGVzdC5jIGIvRG9jdW1lbnRhdGlvbi9wcmN0bC9kaXNhYmxlLXRzYy10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzYzgxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcHJjdGwvZGlzYWJsZS10c2MtdGVzdC5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBUZXN0cyBmb3IgcHJjdGwoUFJfR0VUX1RTQywgLi4uKSAvIHByY3RsKFBSX1NFVF9UU0MsIC4uLikKKyAqCisgKiBCYXNpYyB0ZXN0IHRvIHRlc3QgYmVoYXZpb3VyIG9mIFBSX0dFVF9UU0MgYW5kIFBSX1NFVF9UU0MKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgorCisvKiBHZXQvc2V0IHRoZSBwcm9jZXNzJyBhYmlsaXR5IHRvIHVzZSB0aGUgdGltZXN0YW1wIGNvdW50ZXIgaW5zdHJ1Y3Rpb24gKi8KKyNpZm5kZWYgUFJfR0VUX1RTQworI2RlZmluZSBQUl9HRVRfVFNDIDI1CisjZGVmaW5lIFBSX1NFVF9UU0MgMjYKKyMgZGVmaW5lIFBSX1RTQ19FTkFCTEUJCTEgICAvKiBhbGxvdyB0aGUgdXNlIG9mIHRoZSB0aW1lc3RhbXAgY291bnRlciAqLworIyBkZWZpbmUgUFJfVFNDX1NJR1NFR1YJCTIgICAvKiB0aHJvdyBhIFNJR1NFR1YgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSBUU0MgKi8KKyNlbmRpZgorCitjb25zdCBjaGFyICp0c2NfbmFtZXNbXSA9Cit7CisJWzBdID0gIltub3Qgc2V0XSIsCisJW1BSX1RTQ19FTkFCTEVdID0gIlBSX1RTQ19FTkFCTEUiLAorCVtQUl9UU0NfU0lHU0VHVl0gPSAiUFJfVFNDX1NJR1NFR1YiLAorfTsKKwordWludDY0X3QgcmR0c2MoKSB7Cit1aW50MzJfdCBsbywgaGk7CisvKiBXZSBjYW5ub3QgdXNlICI9QSIsIHNpbmNlIHRoaXMgd291bGQgdXNlICVyYXggb24geDg2XzY0ICovCitfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJkdHNjIiA6ICI9YSIgKGxvKSwgIj1kIiAoaGkpKTsKK3JldHVybiAodWludDY0X3QpaGkgPDwgMzIgfCBsbzsKK30KKwordm9pZCBzaWdzZWd2X2NiKGludCBzaWcpCit7CisJaW50IHRzY192YWwgPSAwOworCisJcHJpbnRmKCJbIFNJR19TRUdWIF1cbiIpOworCXByaW50ZigicHJjdGwoUFJfR0VUX1RTQywgJnRzY192YWwpOyAiKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCWlmICggcHJjdGwoUFJfR0VUX1RTQywgJnRzY192YWwpID09IC0xKQorCQlwZXJyb3IoInByY3RsIik7CisKKwlwcmludGYoInRzY192YWwgPT0gJXNcbiIsIHRzY19uYW1lc1t0c2NfdmFsXSk7CisJcHJpbnRmKCJwcmN0bChQUl9TRVRfVFNDLCBQUl9UU0NfRU5BQkxFKVxuIik7CisJZmZsdXNoKHN0ZG91dCk7CisJaWYgKCBwcmN0bChQUl9TRVRfVFNDLCBQUl9UU0NfRU5BQkxFKSA9PSAtMSkKKwkJcGVycm9yKCJwcmN0bCIpOworCisJcHJpbnRmKCJyZHRzYygpID09ICIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IHRzY192YWwgPSAwOworCisJc2lnbmFsKFNJR1NFR1YsIHNpZ3NlZ3ZfY2IpOworCisJcHJpbnRmKCJyZHRzYygpID09ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcmR0c2MoKSk7CisJcHJpbnRmKCJwcmN0bChQUl9HRVRfVFNDLCAmdHNjX3ZhbCk7ICIpOworCWZmbHVzaChzdGRvdXQpOworCisJaWYgKCBwcmN0bChQUl9HRVRfVFNDLCAmdHNjX3ZhbCkgPT0gLTEpCisJCXBlcnJvcigicHJjdGwiKTsKKworCXByaW50ZigidHNjX3ZhbCA9PSAlc1xuIiwgdHNjX25hbWVzW3RzY192YWxdKTsKKwlwcmludGYoInJkdHNjKCkgPT0gJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZHRzYygpKTsKKwlwcmludGYoInByY3RsKFBSX1NFVF9UU0MsIFBSX1RTQ19FTkFCTEUpXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCWlmICggcHJjdGwoUFJfU0VUX1RTQywgUFJfVFNDX0VOQUJMRSkgPT0gLTEpCisJCXBlcnJvcigicHJjdGwiKTsKKworCXByaW50ZigicmR0c2MoKSA9PSAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXJkdHNjKCkpOworCXByaW50ZigicHJjdGwoUFJfU0VUX1RTQywgUFJfVFNDX1NJR1NFR1YpXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCWlmICggcHJjdGwoUFJfU0VUX1RTQywgUFJfVFNDX1NJR1NFR1YpID09IC0xKQorCQlwZXJyb3IoInByY3RsIik7CisKKwlwcmludGYoInJkdHNjKCkgPT0gIik7CisJZmZsdXNoKHN0ZG91dCk7CisJcHJpbnRmKCIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXJkdHNjKCkpOworCWZmbHVzaChzdGRvdXQpOworCisJZXhpdChFWElUX1NVQ0NFU1MpOworfQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQKaW5kZXggMGViN2M1OC4uZTA1NDIwOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zMzkwL3MzOTBkYmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dApAQCAtMTE1LDYgKzExNSwyNyBAQAogRGVzY3JpcHRpb246ICBBbGxvY2F0ZXMgbWVtb3J5IGZvciBhIGRlYnVnIGxvZyAgICAgCiAgICAgICAgICAgICAgIE11c3Qgbm90IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlYnVnX2luZm9fdCAqZGVidWdfcmVnaXN0ZXJfbW9kZShjaGFyICpuYW1lLCBpbnQgcGFnZXMsIGludCBucl9hcmVhcywKKwkJCQkgIGludCBidWZfc2l6ZSwgbW9kZV90IG1vZGUsIHVpZF90IHVpZCwKKwkJCQkgIGdpZF90IGdpZCk7CisKK1BhcmFtZXRlcjogICAgbmFtZToJICAgTmFtZSBvZiBkZWJ1ZyBsb2cgKGUuZy4gdXNlZCBmb3IgZGVidWdmcyBlbnRyeSkKKwkgICAgICBwYWdlczoJICAgTnVtYmVyIG9mIHBhZ2VzLCB3aGljaCB3aWxsIGJlIGFsbG9jYXRlZCBwZXIgYXJlYQorCSAgICAgIG5yX2FyZWFzOiAgICBOdW1iZXIgb2YgZGVidWcgYXJlYXMKKwkgICAgICBidWZfc2l6ZTogICAgU2l6ZSBvZiBkYXRhIGFyZWEgaW4gZWFjaCBkZWJ1ZyBlbnRyeQorCSAgICAgIG1vZGU6CSAgIEZpbGUgbW9kZSBmb3IgZGVidWdmcyBmaWxlcy4gRS5nLiBTX0lSV1hVR08KKwkgICAgICB1aWQ6CSAgIFVzZXIgSUQgZm9yIGRlYnVnZnMgZmlsZXMuIEN1cnJlbnRseSBvbmx5IDAgaXMKKwkJCSAgIHN1cHBvcnRlZC4KKwkgICAgICBnaWQ6CSAgIEdyb3VwIElEIGZvciBkZWJ1Z2ZzIGZpbGVzLiBDdXJyZW50bHkgb25seSAwIGlzCisJCQkgICBzdXBwb3J0ZWQuCisKK1JldHVybiBWYWx1ZTogSGFuZGxlIGZvciBnZW5lcmF0ZWQgZGVidWcgYXJlYQorCSAgICAgIE5VTEwgaWYgcmVnaXN0ZXIgZmFpbGVkCisKK0Rlc2NyaXB0aW9uOiAgQWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBkZWJ1ZyBsb2cKKwkgICAgICBNdXN0IG5vdCBiZSBjYWxsZWQgd2l0aGluIGFuIGludGVycnVwdCBoYW5kbGVyCisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBkZWJ1Z191bnJlZ2lzdGVyIChkZWJ1Z19pbmZvX3QgKiBpZCk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWQtcnQtZ3JvdXAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1ydC1ncm91cC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNjMzMmYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZC1ydC1ncm91cC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0KLQotUmVhbC1UaW1lIGdyb3VwIHNjaGVkdWxpbmcuCi0KLVRoZSBwcm9ibGVtIHNwYWNlOgotCi1JbiBvcmRlciB0byBzY2hlZHVsZSBtdWx0aXBsZSBncm91cHMgb2YgcmVhbHRpbWUgdGFza3MgZWFjaCBncm91cCBtdXN0Ci1iZSBhc3NpZ25lZCBhIGZpeGVkIHBvcnRpb24gb2YgdGhlIENQVSB0aW1lIGF2YWlsYWJsZS4gV2l0aG91dCBhIG1pbmltdW0KLWd1YXJhbnRlZSBhIHJlYWx0aW1lIGdyb3VwIGNhbiBvYnZpb3VzbHkgZmFsbCBzaG9ydC4gQSBmdXp6eSB1cHBlciBsaW1pdAotaXMgb2Ygbm8gdXNlIHNpbmNlIGl0IGNhbm5vdCBiZSByZWxpZWQgdXBvbi4gV2hpY2ggbGVhdmVzIHVzIHdpdGgganVzdAotdGhlIHNpbmdsZSBmaXhlZCBwb3J0aW9uLgotCi1DUFUgdGltZSBpcyBkaXZpZGVkIGJ5IG1lYW5zIG9mIHNwZWNpZnlpbmcgaG93IG11Y2ggdGltZSBjYW4gYmUgc3BlbnQKLXJ1bm5pbmcgaW4gYSBnaXZlbiBwZXJpb2QuIFNheSBhIGZyYW1lIGZpeGVkIHJlYWx0aW1lIHJlbmRlcmVyIG11c3QKLWRlbGl2ZXIgMjUgZnJhbWVzIGEgc2Vjb25kLCB3aGljaCB5aWVsZHMgYSBwZXJpb2Qgb2YgMC4wNHMuIE5vdyBzYXkKLWl0IHdpbGwgYWxzbyBoYXZlIHRvIHBsYXkgc29tZSBtdXNpYyBhbmQgcmVzcG9uZCB0byBpbnB1dCwgbGVhdmluZyBpdAotd2l0aCBhcm91bmQgODAlIGZvciB0aGUgZ3JhcGhpY3MuIFdlIGNhbiB0aGVuIGdpdmUgdGhpcyBncm91cCBhIHJ1bnRpbWUKLW9mIDAuOCAqIDAuMDRzID0gMC4wMzJzLgotCi1UaGlzIHdheSB0aGUgZ3JhcGhpY3MgZ3JvdXAgd2lsbCBoYXZlIGEgMC4wNHMgcGVyaW9kIHdpdGggYSAwLjAzMnMgcnVudGltZQotbGltaXQuCi0KLU5vdyBpZiB0aGUgYXVkaW8gdGhyZWFkIG5lZWRzIHRvIHJlZmlsbCB0aGUgRE1BIGJ1ZmZlciBldmVyeSAwLjAwNXMsIGJ1dAotbmVlZHMgb25seSBhYm91dCAzJSBDUFUgdGltZSB0byBkbyBzbywgaXQgY2FuIGRvIHdpdGggYSAwLjAzICogMC4wMDVzCi09IDAuMDAwMTVzLgotCi0KLVRoZSBJbnRlcmZhY2U6Ci0KLXN5c3RlbSB3aWRlOgotCi0vcHJvYy9zeXMva2VybmVsL3NjaGVkX3J0X3BlcmlvZF9tcwotL3Byb2Mvc3lzL2tlcm5lbC9zY2hlZF9ydF9ydW50aW1lX3VzCi0KLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQKLQotL3N5cy9rZXJuZWwvdWlkcy88dWlkPi9jcHVfcnRfcnVudGltZV91cwotCi1vcgotCi1DT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQKLQotL2Nncm91cC88Y2dyb3VwPi9jcHUucnRfcnVudGltZV91cwotCi1bIHRpbWUgaXMgc3BlY2lmaWVkIGluIHVzIGJlY2F1c2UgdGhlIGludGVyZmFjZSBpcyBzMzI7IHRoaXMgZ2l2ZXMgYW4KLSAgb3BlcmF0aW5nIHJhbmdlIG9mIH4zNW0gdG8gMXVzIF0KLQotVGhlIHBlcmlvZCB0YWtlcyB2YWx1ZXMgaW4gWyAxLCBJTlRfTUFYIF0sIHJ1bnRpbWUgaW4gWyAtMSwgSU5UX01BWCAtIDEgXS4KLQotQSBydW50aW1lIG9mIC0xIHNwZWNpZmllcyBydW50aW1lID09IHBlcmlvZCwgaWUuIG5vIGxpbWl0LgotCi1OZXcgZ3JvdXBzIGdldCB0aGUgcGVyaW9kIGZyb20gL3Byb2Mvc3lzL2tlcm5lbC9zY2hlZF9ydF9wZXJpb2RfdXMgYW5kCi1hIHJ1bnRpbWUgb2YgMC4KLQotU2V0dGluZ3MgYXJlIGNvbnN0cmFpbmVkIHRvOgotCi0gICBcU3VtX3tpfSBydW50aW1lX3tpfSAvIGdsb2JhbF9wZXJpb2QgPD0gZ2xvYmFsX3J1bnRpbWUgLyBnbG9iYWxfcGVyaW9kCi0KLWluIG9yZGVyIHRvIGtlZXAgdGhlIGNvbmZpZ3VyYXRpb24gc2NoZWR1bGFibGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCmluZGV4IGI1ZjVjYTAuLmZjMjM0ZDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCkBAIC0xMiw1ICsxMiw3IEBACiAJLSBpbmZvcm1hdGlvbiBvbiBzY2hlZHVsaW5nIGRvbWFpbnMuCiBzY2hlZC1uaWNlLWRlc2lnbi50eHQKIAktIEhvdyBhbmQgd2h5IHRoZSBzY2hlZHVsZXIncyBuaWNlIGxldmVscyBhcmUgaW1wbGVtZW50ZWQuCitzY2hlZC1ydC1ncm91cC50eHQKKwktIHJlYWwtdGltZSBncm91cCBzY2hlZHVsaW5nLgogc2NoZWQtc3RhdHMudHh0CiAJLSBpbmZvcm1hdGlvbiBvbiBzY2hlZHN0YXRzIChMaW51eCBTY2hlZHVsZXIgU3RhdGlzdGljcykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmOTAxZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dApAQCAtMCwwICsxLDE3NyBAQAorCQkJCVJlYWwtVGltZSBncm91cCBzY2hlZHVsaW5nCisJCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ09OVEVOVFMKKz09PT09PT09CisKKzEuIE92ZXJ2aWV3CisgIDEuMSBUaGUgcHJvYmxlbQorICAxLjIgVGhlIHNvbHV0aW9uCisyLiBUaGUgaW50ZXJmYWNlCisgIDIuMSBTeXN0ZW0td2lkZSBzZXR0aW5ncworICAyLjIgRGVmYXVsdCBiZWhhdmlvdXIKKyAgMi4zIEJhc2lzIGZvciBncm91cGluZyB0YXNrcworMy4gRnV0dXJlIHBsYW5zCisKKworMS4gT3ZlcnZpZXcKKz09PT09PT09PT09CisKKworMS4xIFRoZSBwcm9ibGVtCistLS0tLS0tLS0tLS0tLS0KKworUmVhbHRpbWUgc2NoZWR1bGluZyBpcyBhbGwgYWJvdXQgZGV0ZXJtaW5pc20sIGEgZ3JvdXAgaGFzIHRvIGJlIGFibGUgdG8gcmVseSBvbgordGhlIGFtb3VudCBvZiBiYW5kd2lkdGggKGVnLiBDUFUgdGltZSkgYmVpbmcgY29uc3RhbnQuIEluIG9yZGVyIHRvIHNjaGVkdWxlCittdWx0aXBsZSBncm91cHMgb2YgcmVhbHRpbWUgdGFza3MsIGVhY2ggZ3JvdXAgbXVzdCBiZSBhc3NpZ25lZCBhIGZpeGVkIHBvcnRpb24KK29mIHRoZSBDUFUgdGltZSBhdmFpbGFibGUuICBXaXRob3V0IGEgbWluaW11bSBndWFyYW50ZWUgYSByZWFsdGltZSBncm91cCBjYW4KK29idmlvdXNseSBmYWxsIHNob3J0LiBBIGZ1enp5IHVwcGVyIGxpbWl0IGlzIG9mIG5vIHVzZSBzaW5jZSBpdCBjYW5ub3QgYmUKK3JlbGllZCB1cG9uLiBXaGljaCBsZWF2ZXMgdXMgd2l0aCBqdXN0IHRoZSBzaW5nbGUgZml4ZWQgcG9ydGlvbi4KKworMS4yIFRoZSBzb2x1dGlvbgorLS0tLS0tLS0tLS0tLS0tLQorCitDUFUgdGltZSBpcyBkaXZpZGVkIGJ5IG1lYW5zIG9mIHNwZWNpZnlpbmcgaG93IG11Y2ggdGltZSBjYW4gYmUgc3BlbnQgcnVubmluZworaW4gYSBnaXZlbiBwZXJpb2QuIFdlIGFsbG9jYXRlIHRoaXMgInJ1biB0aW1lIiBmb3IgZWFjaCByZWFsdGltZSBncm91cCB3aGljaAordGhlIG90aGVyIHJlYWx0aW1lIGdyb3VwcyB3aWxsIG5vdCBiZSBwZXJtaXR0ZWQgdG8gdXNlLgorCitBbnkgdGltZSBub3QgYWxsb2NhdGVkIHRvIGEgcmVhbHRpbWUgZ3JvdXAgd2lsbCBiZSB1c2VkIHRvIHJ1biBub3JtYWwgcHJpb3JpdHkKK3Rhc2tzIChTQ0hFRF9PVEhFUikuIEFueSBhbGxvY2F0ZWQgcnVuIHRpbWUgbm90IHVzZWQgd2lsbCBhbHNvIGJlIHBpY2tlZCB1cCBieQorU0NIRURfT1RIRVIuCisKK0xldCdzIGNvbnNpZGVyIGFuIGV4YW1wbGU6IGEgZnJhbWUgZml4ZWQgcmVhbHRpbWUgcmVuZGVyZXIgbXVzdCBkZWxpdmVyIDI1CitmcmFtZXMgYSBzZWNvbmQsIHdoaWNoIHlpZWxkcyBhIHBlcmlvZCBvZiAwLjA0cyBwZXIgZnJhbWUuIE5vdyBzYXkgaXQgd2lsbCBhbHNvCitoYXZlIHRvIHBsYXkgc29tZSBtdXNpYyBhbmQgcmVzcG9uZCB0byBpbnB1dCwgbGVhdmluZyBpdCB3aXRoIGFyb3VuZCA4MCUgQ1BVCit0aW1lIGRlZGljYXRlZCBmb3IgdGhlIGdyYXBoaWNzLiBXZSBjYW4gdGhlbiBnaXZlIHRoaXMgZ3JvdXAgYSBydW4gdGltZSBvZiAwLjgKKyogMC4wNHMgPSAwLjAzMnMuCisKK1RoaXMgd2F5IHRoZSBncmFwaGljcyBncm91cCB3aWxsIGhhdmUgYSAwLjA0cyBwZXJpb2Qgd2l0aCBhIDAuMDMycyBydW4gdGltZQorbGltaXQuIE5vdyBpZiB0aGUgYXVkaW8gdGhyZWFkIG5lZWRzIHRvIHJlZmlsbCB0aGUgRE1BIGJ1ZmZlciBldmVyeSAwLjAwNXMsIGJ1dAorbmVlZHMgb25seSBhYm91dCAzJSBDUFUgdGltZSB0byBkbyBzbywgaXQgY2FuIGRvIHdpdGggYSAwLjAzICogMC4wMDVzID0KKzAuMDAwMTVzLiBTbyB0aGlzIGdyb3VwIGNhbiBiZSBzY2hlZHVsZWQgd2l0aCBhIHBlcmlvZCBvZiAwLjAwNXMgYW5kIGEgcnVuIHRpbWUKK29mIDAuMDAwMTVzLgorCitUaGUgcmVtYWluaW5nIENQVSB0aW1lIHdpbGwgYmUgdXNlZCBmb3IgdXNlciBpbnB1dCBhbmQgb3RoZXIgdGFzcy4gQmVjYXVzZQorcmVhbHRpbWUgdGFza3MgaGF2ZSBleHBsaWNpdGx5IGFsbG9jYXRlZCB0aGUgQ1BVIHRpbWUgdGhleSBuZWVkIHRvIHBlcmZvcm0KK3RoZWlyIHRhc2tzLCBidWZmZXIgdW5kZXJydW5zIGluIHRoZSBncmFwaG9jcyBvciBhdWRpbyBjYW4gYmUgZWxpbWluYXRlZC4KKworTk9URTogdGhlIGFib3ZlIGV4YW1wbGUgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIGFzIG9mIHlldCAoMi42LjI1KS4gV2Ugc3RpbGwKK2xhY2sgYW4gRURGIHNjaGVkdWxlciB0byBtYWtlIG5vbi11bmlmb3JtIHBlcmlvZHMgdXNhYmxlLgorCisKKzIuIFRoZSBJbnRlcmZhY2UKKz09PT09PT09PT09PT09PT0KKworCisyLjEgU3lzdGVtIHdpZGUgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3lzdGVtIHdpZGUgc2V0dGluZ3MgYXJlIGNvbmZpZ3VyZWQgdW5kZXIgdGhlIC9wcm9jIHZpcnR1YWwgZmlsZSBzeXN0ZW06CisKKy9wcm9jL3N5cy9rZXJuZWwvc2NoZWRfcnRfcGVyaW9kX3VzOgorICBUaGUgc2NoZWR1bGluZyBwZXJpb2QgdGhhdCBpcyBlcXVpdmFsZW50IHRvIDEwMCUgQ1BVIGJhbmR3aWR0aAorCisvcHJvYy9zeXMva2VybmVsL3NjaGVkX3J0X3J1bnRpbWVfdXM6CisgIEEgZ2xvYmFsIGxpbWl0IG9uIGhvdyBtdWNoIHRpbWUgcmVhbHRpbWUgc2NoZWR1bGluZyBtYXkgdXNlLiAgRXZlbiB3aXRob3V0CisgIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBlbmFibGVkLCB0aGlzIHdpbGwgbGltaXQgdGltZSByZXNlcnZlZCB0byByZWFsdGltZQorICBwcm9jZXNzZXMuIFdpdGggQ09ORklHX1JUX0dST1VQX1NDSEVEIGl0IHNpZ25pZmllcyB0aGUgdG90YWwgYmFuZHdpZHRoCisgIGF2YWlsYWJsZSB0byBhbGwgcmVhbHRpbWUgZ3JvdXBzLgorCisgICogVGltZSBpcyBzcGVjaWZpZWQgaW4gdXMgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIGlzIHMzMi4gVGhpcyBnaXZlcyBhbgorICAgIG9wZXJhdGluZyByYW5nZSBmcm9tIDF1cyB0byBhYm91dCAzNSBtaW51dGVzLgorICAqIHNjaGVkX3J0X3BlcmlvZF91cyB0YWtlcyB2YWx1ZXMgZnJvbSAxIHRvIElOVF9NQVguCisgICogc2NoZWRfcnRfcnVudGltZV91cyB0YWtlcyB2YWx1ZXMgZnJvbSAtMSB0byAoSU5UX01BWCAtIDEpLgorICAqIEEgcnVuIHRpbWUgb2YgLTEgc3BlY2lmaWVzIHJ1bnRpbWUgPT0gcGVyaW9kLCBpZS4gbm8gbGltaXQuCisKKworMi4yIERlZmF1bHQgYmVoYXZpb3VyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgdmFsdWVzIGZvciBzY2hlZF9ydF9wZXJpb2RfdXMgKDEwMDAwMDAgb3IgMXMpIGFuZAorc2NoZWRfcnRfcnVudGltZV91cyAoOTUwMDAwIG9yIDAuOTVzKS4gIFRoaXMgZ2l2ZXMgMC4wNXMgdG8gYmUgdXNlZCBieQorU0NIRURfT1RIRVIgKG5vbi1SVCB0YXNrcykuIFRoZXNlIGRlZmF1bHRzIHdlcmUgY2hvc2VuIHNvIHRoYXQgYSBydW4tYXdheQorcmVhbHRpbWUgdGFza3Mgd2lsbCBub3QgbG9jayB1cCB0aGUgbWFjaGluZSBidXQgbGVhdmUgYSBsaXR0bGUgdGltZSB0byByZWNvdmVyCitpdC4gIEJ5IHNldHRpbmcgcnVudGltZSB0byAtMSB5b3UnZCBnZXQgdGhlIG9sZCBiZWhhdmlvdXIgYmFjay4KKworQnkgZGVmYXVsdCBhbGwgYmFuZHdpZHRoIGlzIGFzc2lnbmVkIHRvIHRoZSByb290IGdyb3VwIGFuZCBuZXcgZ3JvdXBzIGdldCB0aGUKK3BlcmlvZCBmcm9tIC9wcm9jL3N5cy9rZXJuZWwvc2NoZWRfcnRfcGVyaW9kX3VzIGFuZCBhIHJ1biB0aW1lIG9mIDAuIElmIHlvdQord2FudCB0byBhc3NpZ24gYmFuZHdpZHRoIHRvIGFub3RoZXIgZ3JvdXAsIHJlZHVjZSB0aGUgcm9vdCBncm91cCdzIGJhbmR3aWR0aAorYW5kIGFzc2lnbiBzb21lIG9yIGFsbCBvZiB0aGUgZGlmZmVyZW5jZSB0byBhbm90aGVyIGdyb3VwLgorCitSZWFsdGltZSBncm91cCBzY2hlZHVsaW5nIG1lYW5zIHlvdSBoYXZlIHRvIGFzc2lnbiBhIHBvcnRpb24gb2YgdG90YWwgQ1BVCitiYW5kd2lkdGggdG8gdGhlIGdyb3VwIGJlZm9yZSBpdCB3aWxsIGFjY2VwdCByZWFsdGltZSB0YXNrcy4gVGhlcmVmb3JlIHlvdSB3aWxsCitub3QgYmUgYWJsZSB0byBydW4gcmVhbHRpbWUgdGFza3MgYXMgYW55IHVzZXIgb3RoZXIgdGhhbiByb290IHVudGlsIHlvdSBoYXZlCitkb25lIHRoYXQsIGV2ZW4gaWYgdGhlIHVzZXIgaGFzIHRoZSByaWdodHMgdG8gcnVuIHByb2Nlc3NlcyB3aXRoIHJlYWx0aW1lCitwcmlvcml0eSEKKworCisyLjMgQmFzaXMgZm9yIGdyb3VwaW5nIHRhc2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSB0d28gY29tcGlsZS10aW1lIHNldHRpbmdzIGZvciBhbGxvY2F0aW5nIENQVSBiYW5kd2lkdGguIFRoZXNlIGFyZQorY29uZmlndXJlZCB1c2luZyB0aGUgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIgbXVsdGlwbGUgY2hvaWNlIG1lbnUgdW5kZXIKK0dlbmVyYWwgc2V0dXAgPiBHcm91cCBDUFUgU2NoZWR1bGVyOgorCithLiBDT05GSUdfVVNFUl9TQ0hFRCAoYWthICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiID0gICJ1c2VyIGlkIikKKworVGhpcyBsZXRzIHlvdSB1c2UgdGhlIHZpcnR1YWwgZmlsZXMgdW5kZXIKKyIvc3lzL2tlcm5lbC91aWRzLzx1aWQ+L2NwdV9ydF9ydW50aW1lX3VzIiB0byBjb250cm9sIGhlIENQVSB0aW1lIHJlc2VydmVkIGZvcgorZWFjaCB1c2VyIC4KKworVGhlIG90aGVyIG9wdGlvbiBpczoKKworLm8gQ09ORklHX0NHUk9VUF9TQ0hFRCAoYWthICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiID0gIkNvbnRyb2wgZ3JvdXBzIikKKworVGhpcyB1c2VzIHRoZSAvY2dyb3VwIHZpcnR1YWwgZmlsZSBzeXN0ZW0gYW5kICIvY2dyb3VwLzxjZ3JvdXA+L2NwdS5ydF9ydW50aW1lX3VzIgordG8gY29udHJvbCB0aGUgQ1BVIHRpbWUgcmVzZXJ2ZWQgZm9yIGVhY2ggY29udHJvbCBncm91cCBpbnN0ZWFkLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB3b3JraW5nIHdpdGggY29udHJvbCBncm91cHMsIHlvdSBzaG91bGQgcmVhZAorRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBhcyB3ZWxsLgorCitHcm91cCBzZXR0aW5ncyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgbGltaXRzIGluIG9yZGVyIHRvIGtlZXAgdGhlIGNvbmZpZ3VyYXRpb24KK3NjaGVkdWxhYmxlOgorCisgICBcU3VtX3tpfSBydW50aW1lX3tpfSAvIGdsb2JhbF9wZXJpb2QgPD0gZ2xvYmFsX3J1bnRpbWUgLyBnbG9iYWxfcGVyaW9kCisKK0ZvciBub3csIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8ganVzdCB0aGUgZm9sbG93aW5nIChidXQgc2VlIEZ1dHVyZSBwbGFucyk6CisKKyAgIFxTdW1fe2l9IHJ1bnRpbWVfe2l9IDw9IGdsb2JhbF9ydW50aW1lCisKKworMy4gRnV0dXJlIHBsYW5zCis9PT09PT09PT09PT09PT0KKworVGhlcmUgaXMgd29yayBpbiBwcm9ncmVzcyB0byBtYWtlIHRoZSBzY2hlZHVsaW5nIHBlcmlvZCBmb3IgZWFjaCBncm91cAorKCIvc3lzL2tlcm5lbC91aWRzLzx1aWQ+L2NwdV9ydF9wZXJpb2RfdXMiIG9yCisiL2Nncm91cC88Y2dyb3VwPi9jcHUucnRfcGVyaW9kX3VzIiByZXNwZWN0aXZlbHkpIGNvbmZpZ3VyYWJsZSBhcyB3ZWxsLgorCitUaGUgY29uc3RyYWludCBvbiB0aGUgcGVyaW9kIGlzIHRoYXQgYSBzdWJncm91cCBtdXN0IGhhdmUgYSBzbWFsbGVyIG9yCitlcXVhbCBwZXJpb2QgdG8gaXRzIHBhcmVudC4gQnV0IHJlYWxpc3RpY2FsbHkgaXRzIG5vdCB2ZXJ5IHVzZWZ1bCBfeWV0XworYXMgaXRzIHByb25lIHRvIHN0YXJ2YXRpb24gd2l0aG91dCBkZWFkbGluZSBzY2hlZHVsaW5nLgorCitDb25zaWRlciB0d28gc2libGluZyBncm91cHMgQSBhbmQgQjsgYm90aCBoYXZlIDUwJSBiYW5kd2lkdGgsIGJ1dCBBJ3MKK3BlcmlvZCBpcyB0d2ljZSB0aGUgbGVuZ3RoIG9mIEIncy4KKworKiBncm91cCBBOiBwZXJpb2Q9MTAwMDAwdXMsIHJ1bnRpbWU9MTAwMDB1cworCS0gdGhpcyBydW5zIGZvciAwLjAxcyBvbmNlIGV2ZXJ5IDAuMXMKKworKiBncm91cCBCOiBwZXJpb2Q9IDUwMDAwdXMsIHJ1bnRpbWU9MTAwMDB1cworCS0gdGhpcyBydW5zIGZvciAwLjAxcyB0d2ljZSBldmVyeSAwLjFzIChvciBvbmNlIGV2ZXJ5IDAuMDUgc2VjKS4KKworVGhpcyBtZWFucyB0aGF0IGN1cnJlbnRseSBhIHdoaWxlICgxKSBsb29wIGluIEEgd2lsbCBydW4gZm9yIHRoZSBmdWxsIHBlcmlvZCBvZgorQiBhbmQgY2FuIHN0YXJ2ZSBCJ3MgdGFza3MgKGFzc3VtaW5nIHRoZXkgYXJlIG9mIGxvd2VyIHByaW9yaXR5KSBmb3IgYSB3aG9sZQorcGVyaW9kLgorCitUaGUgbmV4dCBwcm9qZWN0IHdpbGwgYmUgU0NIRURfRURGIChFYXJsaWVzdCBEZWFkbGluZSBGaXJzdCBzY2hlZHVsaW5nKSB0byBicmluZworZnVsbCBkZWFkbGluZSBzY2hlZHVsaW5nIHRvIHRoZSBsaW51eCBrZXJuZWwuIERlYWRsaW5lIHNjaGVkdWxpbmcgdGhlIGFib3ZlCitncm91cHMgYW5kIHRyZWF0aW5nIGVuZCBvZiB0aGUgcGVyaW9kIGFzIGEgZGVhZGxpbmUgd2lsbCBlbnN1cmUgdGhhdCB0aGV5IGJvdGgKK2dldCB0aGVpciBhbGxvY2F0ZWQgdGltZS4KKworSW1wbGVtZW50aW5nIFNDSEVEX0VERiBtaWdodCB0YWtlIGEgd2hpbGUgdG8gY29tcGxldGUuIFByaW9yaXR5IEluaGVyaXRhbmNlIGlzCit0aGUgYmlnZ2VzdCBjaGFsbGVuZ2UgYXMgdGhlIGN1cnJlbnQgbGludXggUEkgaW5mcmFzdHJ1Y3R1cmUgaXMgZ2VhcmVkIHRvd2FyZHMKK3RoZSBsaW1pdGVkIHN0YXRpYyBwcmlvcml0eSBsZXZlbHMgMC0xMzkuIFdpdGggZGVhZGxpbmUgc2NoZWR1bGluZyB5b3UgbmVlZCB0bworZG8gZGVhZGxpbmUgaW5oZXJpdGFuY2UgKHNpbmNlIHByaW9yaXR5IGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlCitkZWFkbGluZSBkZWx0YSAoZGVhZGxpbmUgLSBub3cpLgorCitUaGlzIG1lYW5zIHRoZSB3aG9sZSBQSSBtYWNoaW5lcnkgd2lsbCBoYXZlIHRvIGJlIHJld29ya2VkIC0gYW5kIHRoYXQgaXMgb25lIG9mCit0aGUgbW9zdCBjb21wbGV4IHBpZWNlcyBvZiBjb2RlIHdlIGhhdmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQKaW5kZXggNDQyZTE0ZC4uMDFlNjk0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dApAQCAtMTQyLDcgKzE0Miw3IEBACiAKIC9wcm9jLzxwaWQ+L3NjaGVkc3RhdAogLS0tLS0tLS0tLS0tLS0tLQotc2NoZWRzdGF0cyBhbHNvIGFkZHMgYSBuZXcgL3Byb2MvPHBpZC9zY2hlZHN0YXQgZmlsZSB0byBpbmNsdWRlIHNvbWUgb2YKK3NjaGVkc3RhdHMgYWxzbyBhZGRzIGEgbmV3IC9wcm9jLzxwaWQ+L3NjaGVkc3RhdCBmaWxlIHRvIGluY2x1ZGUgc29tZSBvZgogdGhlIHNhbWUgaW5mb3JtYXRpb24gb24gYSBwZXItcHJvY2VzcyBsZXZlbC4gIFRoZXJlIGFyZSB0aHJlZSBmaWVsZHMgaW4KIHRoaXMgZmlsZSBjb3JyZWxhdGluZyBmb3IgdGhhdCBwcm9jZXNzIHRvOgogICAgICAxKSB0aW1lIHNwZW50IG9uIHRoZSBjcHUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuYXJjbXNyIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5hcmNtc3IKaW5kZXggZGUyYmNhYy4uMDM4YTNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5hcmNtc3IKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5hcmNtc3IKQEAgLTEwOSw0ICsxMDksMTAgQEAKICoqCQkJCQkJOC5yZXBsYWNlIHBjaV9hbGxvY19jb25zaXN0ZW50KCkvcGNpX2ZyZWVfY29uc2lzdGVudCgpIHdpdGgga21hbGxvYygpL2tmcmVlKCkgaW4gYXJjbXNyX2lvcF9tZXNzYWdlX3hmZXIoKQogKioJCQkJCQk5LiBmaXggdGhlIHJlbGVhc2Ugb2YgZG1hIG1lbW9yeSBmb3IgdHlwZSBCIGluIGFyY21zcl9mcmVlX2NjYl9wb29sKCkKICoqCQkJCQkJMTAuZml4IHRoZSBhcmNtc3JfcG9sbGluZ19oYmJfY2NiZG9uZSgpCisqKiAxLjIwLjAwLjE1CTAyLzI3LzIwMDgJRXJpY2ggQ2hlbiAmIE5pY2sgQ2hlbmcKKyoqCQkJCQkJMS5hcmNtc3JfaW9wX21lc3NhZ2VfeGZlcigpIGlzIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0IHVuZGVyIHRoZQorKioJCQkJCQlxdWV1ZWNvbW1hbmQgc2NzaV9ob3N0X3RlbXBsYXRlIGhhbmRsZXIuIEphbWVzIEJvdHRvbWxleSBwb2ludGVkIG91dAorKioJCQkJCQl0aGF0IHRoZSBjdXJyZW50IEdGUF9LRVJORUx8R0ZQX0RNQSBmbGFncyBhcmUgd3Jvbmc6IGZpcnN0bHkgd2UgYXJlIGluCisqKgkJCQkJCWF0b21pYyBjb250ZXh0LCBzZWNvbmRseSB0aGlzIG1lbW9yeSBpcyBub3QgdXNlZCBmb3IgRE1BLgorKioJCQkJCQlBbHNvIHJlbW92ZWQgc29tZSB1bm5lZWRlZCBjYXN0cy4gVGhhbmtzIHRvIERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQKaW5kZXggYjdiZTk1Yi4uNDA3NTI2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0CkBAIC0yLDcgKzIsNyBAQAogVGhlIGRyaXZlciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBLYWkgTcOka2lzYXJhIChlbWFpbAogS2FpLk1ha2lzYXJhQGtvbHVtYnVzLmZpKQogCi1MYXN0IG1vZGlmaWVkOiBNb24gTWFyICA3IDIxOjE0OjQ0IDIwMDUgYnkga2FpLm1ha2lzYXJhCitMYXN0IG1vZGlmaWVkOiBTdW4gRmViIDI0IDIxOjU5OjA3IDIwMDggYnkga2FpLm1ha2lzYXJhCiAKIAogQkFTSUNTCkBAIC0xMzMsNiArMTMzLDExIEBACiBmaWxlICdkZXYnIGNvbnRhaW5zIHRoZSBkZXZpY2UgbnVtYmVycyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZGV2aWNlLiBUaGUgbGlua3MKICdkZXZpY2UnIGFuZCAnZHJpdmVyJyBwb2ludCB0byB0aGUgU0NTSSBkZXZpY2UgYW5kIGRyaXZlciBlbnRyaWVzLgogCitFYWNoIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIHRoZSBlbnRyeSAnb3B0aW9ucycgd2hpY2ggc2hvd3MgdGhlIGN1cnJlbnRseQorZW5hYmxlZCBkcml2ZXIgYW5kIG1vZGUgb3B0aW9ucy4gVGhlIHZhbHVlIGluIHRoZSBmaWxlIGlzIGEgYml0IG1hc2sgd2hlcmUgdGhlCitiaXQgZGVmaW5pdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIHVzZWQgd2l0aCBNVFNFVERSVkJVRkZFUiBpbiBzZXR0aW5nIHRoZQorb3B0aW9ucy4KKwogQSBsaW5rIG5hbWVkICd0YXBlJyBpcyBtYWRlIGZyb20gdGhlIFNDU0kgZGV2aWNlIGRpcmVjdG9yeSB0byB0aGUgY2xhc3MKIGRpcmVjdG9yeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2RlIDAgYXV0by1yZXdpbmQgZGV2aWNlIChlLmcuLCBzdDApLiAKIApAQCAtMzcyLDYgKzM3NywxMSBAQAogCSAgICAgTVRfU1RfU1lTViBzZXRzIHRoZSBTWVNWIHNlbWFudGljcyAobW9kZSkKIAkgICAgIE1UX1NUX05PV0FJVCBlbmFibGVzIGltbWVkaWF0ZSBtb2RlIChpLmUuLCBkb24ndCB3YWl0IGZvcgogCSAgICAgICAgdGhlIGNvbW1hbmQgdG8gZmluaXNoKSBmb3Igc29tZSBjb21tYW5kcyAoZS5nLiwgcmV3aW5kKQorCSAgICAgTVRfU1RfU0lMSSBlbmFibGVzIHNldHRpbmcgdGhlIFNJTEkgYml0IGluIFNDU0kgY29tbWFuZHMgd2hlbgorCQlyZWFkaW5nIGluIHZhcmlhYmxlIGJsb2NrIG1vZGUgdG8gZW5oYW5jZSBwZXJmb3JtYW5jZSB3aGVuCisJCXJlYWRpbmcgYmxvY2tzIHNob3J0ZXIgdGhhbiB0aGUgYnl0ZSBjb3VudDsgc2V0IHRoaXMgb25seQorCQlpZiB5b3UgYXJlIHN1cmUgdGhhdCB0aGUgZHJpdmUgc3VwcG9ydHMgU0lMSSBhbmQgdGhlIEhCQQorCQljb3JyZWN0bHkgcmV0dXJucyB0cmFuc2ZlciByZXNpZHVhbHMKIAkgICAgIE1UX1NUX0RFQlVHR0lORyBkZWJ1Z2dpbmcgKGdsb2JhbDsgZGVidWdnaW5nIG11c3QgYmUKIAkJY29tcGlsZWQgaW50byB0aGUgZHJpdmVyKQogCU1UX1NUX1NFVEJPT0xFQU5TCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeSBiL0RvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5CmluZGV4IDg4NjFlNDcuLjZkNWYxODE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQpAQCAtMTE2LDYgKzExNiwxMyBAQAogc3RhcnRpbmcgbG93IChDUE9MPTApIGFuZCBkYXRhIHN0YWJpbGl6ZWQgZm9yIHNhbXBsaW5nIGR1cmluZyB0aGUKIHRyYWlsaW5nIGNsb2NrIGVkZ2UgKENQSEE9MSksIHRoYXQncyBTUEkgbW9kZSAxLgogCitOb3RlIHRoYXQgdGhlIGNsb2NrIG1vZGUgaXMgcmVsZXZhbnQgYXMgc29vbiBhcyB0aGUgY2hpcHNlbGVjdCBnb2VzCithY3RpdmUuICBTbyB0aGUgbWFzdGVyIG11c3Qgc2V0IHRoZSBjbG9jayB0byBpbmFjdGl2ZSBiZWZvcmUgc2VsZWN0aW5nCithIHNsYXZlLCBhbmQgdGhlIHNsYXZlIGNhbiB0ZWxsIHRoZSBjaG9zZW4gcG9sYXJpdHkgYnkgc2FtcGxpbmcgdGhlCitjbG9jayBsZXZlbCB3aGVuIGl0cyBzZWxlY3QgbGluZSBnb2VzIGFjdGl2ZS4gIFRoYXQncyB3aHkgbWFueSBkZXZpY2VzCitzdXBwb3J0IGZvciBleGFtcGxlIGJvdGggbW9kZXMgMCBhbmQgMzogIHRoZXkgZG9uJ3QgY2FyZSBhYm91dCBwb2xhcml0eSwKK2FuZCBhbHdheSBjbG9jayBkYXRhIGluL291dCBvbiByaXNpbmcgY2xvY2sgZWRnZXMuCisKIAogSG93IGRvIHRoZXNlIGRyaXZlciBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIHdvcms/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3OSw4ICszODYsMTQgQEAKICAgICAgICsgd2hlbiBiaWRpcmVjdGlvbmFsIHJlYWRzIGFuZCB3cml0ZXMgc3RhcnQgLi4uIGJ5IGhvdyBpdHMKICAgICAgICAgc2VxdWVuY2Ugb2Ygc3BpX3RyYW5zZmVyIHJlcXVlc3RzIGlzIGFycmFuZ2VkOwogCisgICAgICArIHdoaWNoIEkvTyBidWZmZXJzIGFyZSB1c2VkIC4uLiBlYWNoIHNwaV90cmFuc2ZlciB3cmFwcyBhCisgICAgICAgIGJ1ZmZlciBmb3IgZWFjaCB0cmFuc2ZlciBkaXJlY3Rpb24sIHN1cHBvcnRpbmcgZnVsbCBkdXBsZXgKKyAgICAgICAgKHR3byBwb2ludGVycywgbWF5YmUgdGhlIHNhbWUgb25lIGluIGJvdGggY2FzZXMpIGFuZCBoYWxmCisgICAgICAgIGR1cGxleCAob25lIHBvaW50ZXIgaXMgTlVMTCkgdHJhbnNmZXJzOworCiAgICAgICArIG9wdGlvbmFsbHkgZGVmaW5pbmcgc2hvcnQgZGVsYXlzIGFmdGVyIHRyYW5zZmVycyAuLi4gdXNpbmcKLSAgICAgICAgdGhlIHNwaV90cmFuc2Zlci5kZWxheV91c2VjcyBzZXR0aW5nOworICAgICAgICB0aGUgc3BpX3RyYW5zZmVyLmRlbGF5X3VzZWNzIHNldHRpbmcgKHRoaXMgZGVsYXkgY2FuIGJlIHRoZQorICAgICAgICBvbmx5IHByb3RvY29sIGVmZmVjdCwgaWYgdGhlIGJ1ZmZlciBsZW5ndGggaXMgemVybyk7CiAKICAgICAgICsgd2hldGhlciB0aGUgY2hpcHNlbGVjdCBiZWNvbWVzIGluYWN0aXZlIGFmdGVyIGEgdHJhbnNmZXIgYW5kCiAgICAgICAgIGFueSBkZWxheSAuLi4gYnkgdXNpbmcgdGhlIHNwaV90cmFuc2Zlci5jc19jaGFuZ2UgZmxhZzsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpbmxvY2tzLnR4dCBiL0RvY3VtZW50YXRpb24vc3BpbmxvY2tzLnR4dAppbmRleCA0NzFlNzUzLi42MTk2OTlkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGlubG9ja3MudHh0CkBAIC01LDYgKzUsMjggQEAKIF9fU1BJTl9MT0NLX1VOTE9DS0VEKCkvX19SV19MT0NLX1VOTE9DS0VEKCkgYXMgYXBwcm9wcmlhdGUgZm9yIHN0YXRpYwogaW5pdGlhbGl6YXRpb24uCiAKK01vc3Qgb2YgdGhlIHRpbWUsIHlvdSBjYW4gc2ltcGx5IHR1cm46CisKKwlzdGF0aWMgc3BpbmxvY2tfdCB4eHhfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworaW50bzoKKworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeHh4X2xvY2spOworCitTdGF0aWMgc3RydWN0dXJlIG1lbWJlciB2YXJpYWJsZXMgZ28gZnJvbToKKworCXN0cnVjdCBmb28gYmFyIHsKKwkJLmxvY2sJPQlTUElOX0xPQ0tfVU5MT0NLRUQ7CisJfTsKKwordG86CisKKwlzdHJ1Y3QgZm9vIGJhciB7CisJCS5sb2NrCT0JX19TUElOX0xPQ0tfVU5MT0NLRUQoYmFyLmxvY2spOworCX07CisKK0RlY2xhcmF0aW9uIG9mIHN0YXRpYyByd19sb2NrcyB1bmRlcmdvIGEgc2ltaWxhciB0cmFuc2Zvcm1hdGlvbi4KKwogRHluYW1pYyBpbml0aWFsaXphdGlvbiwgd2hlbiBuZWNlc3NhcnksIG1heSBiZSBwZXJmb3JtZWQgYXMKIGRlbW9uc3RyYXRlZCBiZWxvdy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQKaW5kZXggYzgxNWM1Mi4uNGNmYzc4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0CkBAIC0xNiw4ICsxNiw5IEBACiAgICByYWNlIGNhbiBiZSBleHBsb2l0ZWQgaXMgYWxzbyBwcm92aWRlZC4KICAtIEl0IGNhbm5vdCBjb250YWluIGFueSAidHJpdmlhbCIgZml4ZXMgaW4gaXQgKHNwZWxsaW5nIGNoYW5nZXMsCiAgICB3aGl0ZXNwYWNlIGNsZWFudXBzLCBldGMpLgotIC0gSXQgbXVzdCBiZSBhY2NlcHRlZCBieSB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtIG1haW50YWluZXIuCiAgLSBJdCBtdXN0IGZvbGxvdyB0aGUgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBydWxlcy4KKyAtIEl0IG9yIGFuIGVxdWl2YWxlbnQgZml4IG11c3QgYWxyZWFkeSBleGlzdCBpbiBMaW51cycgdHJlZS4gIFF1b3RlIHRoZQorICAgcmVzcGVjdGl2ZSBjb21taXQgSUQgaW4gTGludXMnIHRyZWUgaW4geW91ciBwYXRjaCBzdWJtaXNzaW9uIHRvIC1zdGFibGUuCiAKIAogUHJvY2VkdXJlIGZvciBzdWJtaXR0aW5nIHBhdGNoZXMgdG8gdGhlIC1zdGFibGUgdHJlZToKQEAgLTI4LDcgKzI5LDkgQEAKICAgIHF1ZXVlLCBvciBhIE5BSyBpZiB0aGUgcGF0Y2ggaXMgcmVqZWN0ZWQuICBUaGlzIHJlc3BvbnNlIG1pZ2h0IHRha2UgYSBmZXcKICAgIGRheXMsIGFjY29yZGluZyB0byB0aGUgZGV2ZWxvcGVyJ3Mgc2NoZWR1bGVzLgogIC0gSWYgYWNjZXB0ZWQsIHRoZSBwYXRjaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSAtc3RhYmxlIHF1ZXVlLCBmb3IgcmV2aWV3IGJ5Ci0gICBvdGhlciBkZXZlbG9wZXJzLgorICAgb3RoZXIgZGV2ZWxvcGVycyBhbmQgYnkgdGhlIHJlbGV2YW50IHN1YnN5c3RlbSBtYWludGFpbmVyLgorIC0gSWYgdGhlIHN0YWJsZUBrZXJuZWwub3JnIGFkZHJlc3MgaXMgYWRkZWQgdG8gYSBwYXRjaCwgd2hlbiBpdCBnb2VzIGludG8KKyAgIExpbnVzJ3MgdHJlZSBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZW1haWxlZCB0byB0aGUgc3RhYmxlIHRlYW0uCiAgLSBTZWN1cml0eSBwYXRjaGVzIHNob3VsZCBub3QgYmUgc2VudCB0byB0aGlzIGFsaWFzLCBidXQgaW5zdGVhZCB0byB0aGUKICAgIGRvY3VtZW50ZWQgc2VjdXJpdHlAa2VybmVsLm9yZyBhZGRyZXNzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9zeXNmcy1hcGkudHh0CmluZGV4IGJhOWMyZGEuLmQ5ZjI4YmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGhlcm1hbC9zeXNmcy1hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9zeXNmcy1hcGkudHh0CkBAIC0xNDMsMTAgKzE0MywxMCBAQAogCQkJCVRoaXMgaXMgZ2l2ZW4gYnkgdGhlcm1hbCB6b25lIGRyaXZlciBhcyBwYXJ0IG9mIHJlZ2lzdHJhdGlvbi4KIAkJCQlFZzogIkFDUEkgdGhlcm1hbCB6b25lIiBpbmRpY2F0ZXMgaXQncyBhIEFDUEkgdGhlcm1hbCBkZXZpY2UKIAkJCQlSTwotCQkJCU9wdGlvbmFsCisJCQkJUmVxdWlyZWQKIAogdGVtcAkJCQlDdXJyZW50IHRlbXBlcmF0dXJlIGFzIHJlcG9ydGVkIGJ5IHRoZXJtYWwgem9uZSAoc2Vuc29yKQotCQkJCVVuaXQ6IGRlZ3JlZSBDZWxzaXVzCisJCQkJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cwogCQkJCVJPCiAJCQkJUmVxdWlyZWQKIApAQCAtMTYzLDcgKzE2Myw3IEBACiAJCQkJCSAgY2hhcmdlIG9mIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQuCiAKIHRyaXBfcG9pbnRfWzAtKl1fdGVtcAkJVGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZAotCQkJCVVuaXQ6IGRlZ3JlZSBDZWxzaXVzCisJCQkJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cwogCQkJCVJPCiAJCQkJT3B0aW9uYWwKIApAQCAtMTkzLDcgKzE5Myw3IEBACiAJCQkJZWcuIEZvciBtZW1vcnkgY29udHJvbGxlciBkZXZpY2Ugb24gaW50ZWxfbWVubG93IHBsYXRmb3JtOgogCQkJCXRoaXMgc2hvdWxkIGJlICJNZW1vcnkgY29udHJvbGxlciIKIAkJCQlSTwotCQkJCU9wdGlvbmFsCisJCQkJUmVxdWlyZWQKIAogbWF4X3N0YXRlCQkJVGhlIG1heGltdW0gcGVybWlzc2libGUgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgogCQkJCVJPCkBAIC0yMTksMTYgKzIxOSwxNiBAQAogCiB8dGhlcm1hbF96b25lMToKIAl8LS0tLS10eXBlOgkJCUFDUEkgdGhlcm1hbCB6b25lCi0JfC0tLS0tdGVtcDoJCQkzNworCXwtLS0tLXRlbXA6CQkJMzcwMDAKIAl8LS0tLS1tb2RlOgkJCWtlcm5lbAotCXwtLS0tLXRyaXBfcG9pbnRfMF90ZW1wOgkxMDAKKwl8LS0tLS10cmlwX3BvaW50XzBfdGVtcDoJMTAwMDAwCiAJfC0tLS0tdHJpcF9wb2ludF8wX3R5cGU6CWNyaXRpY2FsCi0JfC0tLS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwCisJfC0tLS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCiAJfC0tLS0tdHJpcF9wb2ludF8xX3R5cGU6CXBhc3NpdmUKLQl8LS0tLS10cmlwX3BvaW50XzJfdGVtcDoJNzAKLQl8LS0tLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlWzBdCi0JfC0tLS0tdHJpcF9wb2ludF8zX3RlbXA6CTYwCi0JfC0tLS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZVsxXQorCXwtLS0tLXRyaXBfcG9pbnRfMl90ZW1wOgk3MDAwMAorCXwtLS0tLXRyaXBfcG9pbnRfMl90eXBlOglhY3RpdmUwCisJfC0tLS0tdHJpcF9wb2ludF8zX3RlbXA6CTYwMDAwCisJfC0tLS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZTEKIAl8LS0tLS1jZGV2MDoJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMAogCXwtLS0tLWNkZXYwX3RyaXBfcG9pbnQ6CQkxCS8qIGNkZXYwIGNhbiBiZSB1c2VkIGZvciBwYXNzaXZlICovCiAJfC0tLS0tY2RldjE6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZXJzL2hpZ2hyZXMudHh0IGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvaGlnaHJlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczZWNmNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGltZXJzL2hpZ2hyZXMudHh0CkBAIC0wLDAgKzEsMjQ5IEBACitIaWdoIHJlc29sdXRpb24gdGltZXJzIGFuZCBkeW5hbWljIHRpY2tzIGRlc2lnbiBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIHBhcGVyIG9mIHRoZSBPTFMgMjAwNiB0YWxrICJocnRpbWVycworYW5kIGJleW9uZCIuIFRoZSBwYXBlciBpcyBwYXJ0IG9mIHRoZSBPTFMgMjAwNiBQcm9jZWVkaW5ncyBWb2x1bWUgMSwgd2hpY2ggY2FuCitiZSBmb3VuZCBvbiB0aGUgT0xTIHdlYnNpdGU6CitodHRwOi8vd3d3LmxpbnV4c3ltcG9zaXVtLm9yZy8yMDA2L2xpbnV4c3ltcG9zaXVtX3Byb2N2MS5wZGYKKworVGhlIHNsaWRlcyB0byB0aGlzIHRhbGsgYXJlIGF2YWlsYWJsZSBmcm9tOgoraHR0cDovL3RnbHguZGUvcHJvamVjdHMvaHJ0aW1lcnMvb2xzMjAwNi1ocnRpbWVycy5wZGYKKworVGhlIHNsaWRlcyBjb250YWluIGZpdmUgZmlndXJlcyAocGFnZXMgMiwgMTUsIDE4LCAyMCwgMjIpLCB3aGljaCBpbGx1c3RyYXRlIHRoZQorY2hhbmdlcyBpbiB0aGUgdGltZShyKSByZWxhdGVkIExpbnV4IHN1YnN5c3RlbXMuIEZpZ3VyZSAjMSAocC4gMikgc2hvd3MgdGhlCitkZXNpZ24gb2YgdGhlIExpbnV4IHRpbWUocikgc3lzdGVtIGJlZm9yZSBocnRpbWVycyBhbmQgb3RoZXIgYnVpbGRpbmcgYmxvY2tzCitnb3QgbWVyZ2VkIGludG8gbWFpbmxpbmUuCisKK05vdGU6IHRoZSBwYXBlciBhbmQgdGhlIHNsaWRlcyBhcmUgdGFsa2luZyBhYm91dCAiY2xvY2sgZXZlbnQgc291cmNlIiwgd2hpbGUgd2UKK3N3aXRjaGVkIHRvIHRoZSBuYW1lICJjbG9jayBldmVudCBkZXZpY2VzIiBpbiBtZWFudGltZS4KKworVGhlIGRlc2lnbiBjb250YWlucyB0aGUgZm9sbG93aW5nIGJhc2ljIGJ1aWxkaW5nIGJsb2NrczoKKworLSBocnRpbWVyIGJhc2UgaW5mcmFzdHJ1Y3R1cmUKKy0gdGltZW9mZGF5IGFuZCBjbG9jayBzb3VyY2UgbWFuYWdlbWVudAorLSBjbG9jayBldmVudCBtYW5hZ2VtZW50CistIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBmdW5jdGlvbmFsaXR5CistIGR5bmFtaWMgdGlja3MKKworCitocnRpbWVyIGJhc2UgaW5mcmFzdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaHJ0aW1lciBiYXNlIGluZnJhc3RydWN0dXJlIHdhcyBtZXJnZWQgaW50byB0aGUgMi42LjE2IGtlcm5lbC4gRGV0YWlscyBvZgordGhlIGJhc2UgaW1wbGVtZW50YXRpb24gYXJlIGNvdmVyZWQgaW4gRG9jdW1lbnRhdGlvbi9ocnRpbWVycy9ocnRpbWVyLnR4dC4gU2VlCithbHNvIGZpZ3VyZSAjMiAoT0xTIHNsaWRlcyBwLiAxNSkKKworVGhlIG1haW4gZGlmZmVyZW5jZXMgdG8gdGhlIHRpbWVyIHdoZWVsLCB3aGljaCBob2xkcyB0aGUgYXJtZWQgdGltZXJfbGlzdCB0eXBlCit0aW1lcnMgYXJlOgorICAgICAgIC0gdGltZSBvcmRlcmVkIGVucXVldWVpbmcgaW50byBhIHJiLXRyZWUKKyAgICAgICAtIGluZGVwZW5kZW50IG9mIHRpY2tzICh0aGUgcHJvY2Vzc2luZyBpcyBiYXNlZCBvbiBuYW5vc2Vjb25kcykKKworCit0aW1lb2ZkYXkgYW5kIGNsb2NrIHNvdXJjZSBtYW5hZ2VtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0pvaG4gU3R1bHR6J3MgR2VuZXJpYyBUaW1lIE9mIERheSAoR1RPRCkgZnJhbWV3b3JrIG1vdmVzIGEgbGFyZ2UgcG9ydGlvbiBvZgorY29kZSBvdXQgb2YgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhcmVhcyBpbnRvIGEgZ2VuZXJpYyBtYW5hZ2VtZW50CitmcmFtZXdvcmssIGFzIGlsbHVzdHJhdGVkIGluIGZpZ3VyZSAjMyAoT0xTIHNsaWRlcyBwLiAxOCkuIFRoZSBhcmNoaXRlY3R1cmUKK3NwZWNpZmljIHBvcnRpb24gaXMgcmVkdWNlZCB0byB0aGUgbG93IGxldmVsIGhhcmR3YXJlIGRldGFpbHMgb2YgdGhlIGNsb2NrCitzb3VyY2VzLCB3aGljaCBhcmUgcmVnaXN0ZXJlZCBpbiB0aGUgZnJhbWV3b3JrIGFuZCBzZWxlY3RlZCBvbiBhIHF1YWxpdHkgYmFzZWQKK2RlY2lzaW9uLiBUaGUgbG93IGxldmVsIGNvZGUgcHJvdmlkZXMgaGFyZHdhcmUgc2V0dXAgYW5kIHJlYWRvdXQgcm91dGluZXMgYW5kCitpbml0aWFsaXplcyBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBnZW5lcmljIHRpbWUga2VlcGluZyBjb2RlIHRvCitjb252ZXJ0IHRoZSBjbG9jayB0aWNrcyB0byBuYW5vc2Vjb25kIGJhc2VkIHRpbWUgdmFsdWVzLiBBbGwgb3RoZXIgdGltZSBrZWVwaW5nCityZWxhdGVkIGZ1bmN0aW9uYWxpdHkgaXMgbW92ZWQgaW50byB0aGUgZ2VuZXJpYyBjb2RlLiBUaGUgR1RPRCBiYXNlIHBhdGNoIGdvdAorbWVyZ2VkIGludG8gdGhlIDIuNi4xOCBrZXJuZWwuCisKK0Z1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEdlbmVyaWMgVGltZSBPZiBEYXkgZnJhbWV3b3JrIGlzIGF2YWlsYWJsZSBpbiB0aGUKK09MUyAyMDA1IFByb2NlZWRpbmdzIFZvbHVtZSAxOgoraHR0cDovL3d3dy5saW51eHN5bXBvc2l1bS5vcmcvMjAwNS9saW51eHN5bXBvc2l1bV9wcm9jdjEucGRmCisKK1RoZSBwYXBlciAiV2UgQXJlIE5vdCBHZXR0aW5nIEFueSBZb3VuZ2VyOiBBIE5ldyBBcHByb2FjaCB0byBUaW1lIGFuZAorVGltZXJzIiB3YXMgd3JpdHRlbiBieSBKLiBTdHVsdHosIEQuVi4gSGFydCwgJiBOLiBBcmF2YW11ZGFuLgorCitGaWd1cmUgIzMgKE9MUyBzbGlkZXMgcC4xOCkgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uLgorCisKK2Nsb2NrIGV2ZW50IG1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpbGUgY2xvY2sgc291cmNlcyBwcm92aWRlIHJlYWQgYWNjZXNzIHRvIHRoZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdGltZQordmFsdWUsIGNsb2NrIGV2ZW50IGRldmljZXMgYXJlIHVzZWQgdG8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnQKK2ludGVycnVwdChzKS4gVGhlIG5leHQgZXZlbnQgaXMgY3VycmVudGx5IGRlZmluZWQgdG8gYmUgcGVyaW9kaWMsIHdpdGggaXRzCitwZXJpb2QgZGVmaW5lZCBhdCBjb21waWxlIHRpbWUuIFRoZSBzZXR1cCBhbmQgc2VsZWN0aW9uIG9mIHRoZSBldmVudCBkZXZpY2UKK2ZvciB2YXJpb3VzIGV2ZW50IGRyaXZlbiBmdW5jdGlvbmFsaXRpZXMgaXMgaGFyZHdpcmVkIGludG8gdGhlIGFyY2hpdGVjdHVyZQorZGVwZW5kZW50IGNvZGUuIFRoaXMgcmVzdWx0cyBpbiBkdXBsaWNhdGVkIGNvZGUgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGFuZAorbWFrZXMgaXQgZXh0cmVtZWx5IGRpZmZpY3VsdCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSB0byB1c2UKK2V2ZW50IGludGVycnVwdCBkZXZpY2VzIG90aGVyIHRoYW4gdGhvc2UgYWxyZWFkeSBidWlsdCBpbnRvIHRoZQorYXJjaGl0ZWN0dXJlLiBBbm90aGVyIGltcGxpY2F0aW9uIG9mIHRoZSBjdXJyZW50IGRlc2lnbiBpcyB0aGF0IGl0IGlzIG5lY2Vzc2FyeQordG8gdG91Y2ggYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGluIG9yZGVyIHRvIHByb3ZpZGUgbmV3CitmdW5jdGlvbmFsaXR5IGxpa2UgaGlnaCByZXNvbHV0aW9uIHRpbWVycyBvciBkeW5hbWljIHRpY2tzLgorCitUaGUgY2xvY2sgZXZlbnRzIHN1YnN5c3RlbSB0cmllcyB0byBhZGRyZXNzIHRoaXMgcHJvYmxlbSBieSBwcm92aWRpbmcgYSBnZW5lcmljCitzb2x1dGlvbiB0byBtYW5hZ2UgY2xvY2sgZXZlbnQgZGV2aWNlcyBhbmQgdGhlaXIgdXNhZ2UgZm9yIHRoZSB2YXJpb3VzIGNsb2NrCitldmVudCBkcml2ZW4ga2VybmVsIGZ1bmN0aW9uYWxpdGllcy4gVGhlIGdvYWwgb2YgdGhlIGNsb2NrIGV2ZW50IHN1YnN5c3RlbSBpcwordG8gbWluaW1pemUgdGhlIGNsb2NrIGV2ZW50IHJlbGF0ZWQgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBjb2RlIHRvIHRoZSBwdXJlCitoYXJkd2FyZSByZWxhdGVkIGhhbmRsaW5nIGFuZCB0byBhbGxvdyBlYXN5IGFkZGl0aW9uIGFuZCB1dGlsaXphdGlvbiBvZiBuZXcKK2Nsb2NrIGV2ZW50IGRldmljZXMuIEl0IGFsc28gbWluaW1pemVzIHRoZSBkdXBsaWNhdGVkIGNvZGUgYWNyb3NzIHRoZQorYXJjaGl0ZWN0dXJlcyBhcyBpdCBwcm92aWRlcyBnZW5lcmljIGZ1bmN0aW9uYWxpdHkgZG93biB0byB0aGUgaW50ZXJydXB0CitzZXJ2aWNlIGhhbmRsZXIsIHdoaWNoIGlzIGFsbW9zdCBpbmhlcmVudGx5IGhhcmR3YXJlIGRlcGVuZGVudC4KKworQ2xvY2sgZXZlbnQgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZCBlaXRoZXIgYnkgdGhlIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgYm9vdAorY29kZSBvciBhdCBtb2R1bGUgaW5zZXJ0aW9uIHRpbWUuIEVhY2ggY2xvY2sgZXZlbnQgZGV2aWNlIGZpbGxzIGEgZGF0YQorc3RydWN0dXJlIHdpdGggY2xvY2stc3BlY2lmaWMgcHJvcGVydHkgcGFyYW1ldGVycyBhbmQgY2FsbGJhY2sgZnVuY3Rpb25zLiBUaGUKK2Nsb2NrIGV2ZW50IG1hbmFnZW1lbnQgZGVjaWRlcywgYnkgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBwYXJhbWV0ZXJzLCB0aGUKK3NldCBvZiBzeXN0ZW0gZnVuY3Rpb25zIGEgY2xvY2sgZXZlbnQgZGV2aWNlIHdpbGwgYmUgdXNlZCB0byBzdXBwb3J0LiBUaGlzCitpbmNsdWRlcyB0aGUgZGlzdGluY3Rpb24gb2YgcGVyLUNQVSBhbmQgcGVyLXN5c3RlbSBnbG9iYWwgZXZlbnQgZGV2aWNlcy4KKworU3lzdGVtLWxldmVsIGdsb2JhbCBldmVudCBkZXZpY2VzIGFyZSB1c2VkIGZvciB0aGUgTGludXggcGVyaW9kaWMgdGljay4gUGVyLUNQVQorZXZlbnQgZGV2aWNlcyBhcmUgdXNlZCB0byBwcm92aWRlIGxvY2FsIENQVSBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgcHJvY2VzcworYWNjb3VudGluZywgcHJvZmlsaW5nLCBhbmQgaGlnaCByZXNvbHV0aW9uIHRpbWVycy4KKworVGhlIG1hbmFnZW1lbnQgbGF5ZXIgYXNzaWducyBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBhIGNsb2NrCitldmVudCBkZXZpY2U6CisgICAgICAtIHN5c3RlbSBnbG9iYWwgcGVyaW9kaWMgdGljayAoamlmZmllcyB1cGRhdGUpCisgICAgICAtIGNwdSBsb2NhbCB1cGRhdGVfcHJvY2Vzc190aW1lcworICAgICAgLSBjcHUgbG9jYWwgcHJvZmlsaW5nCisgICAgICAtIGNwdSBsb2NhbCBuZXh0IGV2ZW50IGludGVycnVwdCAobm9uIHBlcmlvZGljIG1vZGUpCisKK1RoZSBjbG9jayBldmVudCBkZXZpY2UgZGVsZWdhdGVzIHRoZSBzZWxlY3Rpb24gb2YgdGhvc2UgdGltZXIgaW50ZXJydXB0IHJlbGF0ZWQKK2Z1bmN0aW9ucyBjb21wbGV0ZWx5IHRvIHRoZSBtYW5hZ2VtZW50IGxheWVyLiBUaGUgY2xvY2sgbWFuYWdlbWVudCBsYXllciBzdG9yZXMKK2EgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgZGV2aWNlIGRlc2NyaXB0aW9uIHN0cnVjdHVyZSwgd2hpY2ggaGFzIHRvIGJlIGNhbGxlZAorZnJvbSB0aGUgaGFyZHdhcmUgbGV2ZWwgaGFuZGxlci4gVGhpcyByZW1vdmVzIGEgbG90IG9mIGR1cGxpY2F0ZWQgY29kZSBmcm9tIHRoZQorYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHRpbWVyIGludGVycnVwdCBoYW5kbGVycyBhbmQgaGFuZHMgdGhlIGNvbnRyb2wgb3ZlciB0aGUKK2Nsb2NrIGV2ZW50IGRldmljZXMgYW5kIHRoZSBhc3NpZ25tZW50IG9mIHRpbWVyIGludGVycnVwdCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkKK3RvIHRoZSBjb3JlIGNvZGUuCisKK1RoZSBjbG9jayBldmVudCBsYXllciBBUEkgaXMgcmF0aGVyIHNtYWxsLiBBc2lkZSBmcm9tIHRoZSBjbG9jayBldmVudCBkZXZpY2UKK3JlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgaXQgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50CitpbnRlcnJ1cHQsIGNsb2NrIGV2ZW50IGRldmljZSBub3RpZmljYXRpb24gc2VydmljZSBhbmQgc3VwcG9ydCBmb3Igc3VzcGVuZCBhbmQKK3Jlc3VtZS4KKworVGhlIGZyYW1ld29yayBhZGRzIGFib3V0IDcwMCBsaW5lcyBvZiBjb2RlIHdoaWNoIHJlc3VsdHMgaW4gYSAyS0IgaW5jcmVhc2Ugb2YKK3RoZSBrZXJuZWwgYmluYXJ5IHNpemUuIFRoZSBjb252ZXJzaW9uIG9mIGkzODYgcmVtb3ZlcyBhYm91dCAxMDAgbGluZXMgb2YKK2NvZGUuIFRoZSBiaW5hcnkgc2l6ZSBkZWNyZWFzZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgNDAwIGJ5dGUuIFdlIGJlbGlldmUgdGhhdCB0aGUKK2luY3JlYXNlIG9mIGZsZXhpYmlsaXR5IGFuZCB0aGUgYXZvaWRhbmNlIG9mIGR1cGxpY2F0ZWQgY29kZSBhY3Jvc3MKK2FyY2hpdGVjdHVyZXMganVzdGlmaWVzIHRoZSBzbGlnaHQgaW5jcmVhc2Ugb2YgdGhlIGJpbmFyeSBzaXplLgorCitUaGUgY29udmVyc2lvbiBvZiBhbiBhcmNoaXRlY3R1cmUgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0LCBidXQgYWxsb3dzIHRvCit1dGlsaXplIHRoZSBoaWdoIHJlc29sdXRpb24gYW5kIGR5bmFtaWMgdGljayBmdW5jdGlvbmFsaXRlcyB3aXRob3V0IGFueSBjaGFuZ2UKK3RvIHRoZSBjbG9jayBldmVudCBkZXZpY2UgYW5kIHRpbWVyIGludGVycnVwdCBjb2RlLiBBZnRlciB0aGUgY29udmVyc2lvbiB0aGUKK2VuYWJsaW5nIG9mIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMgYW5kIGR5bmFtaWMgdGlja3MgaXMgc2ltcGx5IHByb3ZpZGVkIGJ5CithZGRpbmcgdGhlIGtlcm5lbC90aW1lL0tjb25maWcgZmlsZSB0byB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIEtjb25maWcgYW5kCithZGRpbmcgdGhlIGR5bmFtaWMgdGljayBzcGVjaWZpYyBjYWxscyB0byB0aGUgaWRsZSByb3V0aW5lIChhIHRvdGFsIG9mIDMgbGluZXMKK2FkZGVkIHRvIHRoZSBpZGxlIGZ1bmN0aW9uIGFuZCB0aGUgS2NvbmZpZyBmaWxlKQorCitGaWd1cmUgIzQgKE9MUyBzbGlkZXMgcC4yMCkgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uLgorCisKK2hpZ2ggcmVzb2x1dGlvbiB0aW1lciBmdW5jdGlvbmFsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEdXJpbmcgc3lzdGVtIGJvb3QgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSB0aGUgaGlnaCByZXNvbHV0aW9uIHRpbWVyCitmdW5jdGlvbmFsaXR5LCB3aGlsZSBtYWtpbmcgaXQgcG9zc2libGUgd291bGQgYmUgZGlmZmljdWx0IGFuZCB3b3VsZCBzZXJ2ZSBubwordXNlZnVsIGZ1bmN0aW9uLiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNsb2NrIGV2ZW50IGRldmljZSBmcmFtZXdvcmssIHRoZQorY2xvY2sgc291cmNlIGZyYW1ld29yayAoR1RPRCkgYW5kIGhydGltZXJzIGl0c2VsZiBoYXMgdG8gYmUgZG9uZSBhbmQKK2FwcHJvcHJpYXRlIGNsb2NrIHNvdXJjZXMgYW5kIGNsb2NrIGV2ZW50IGRldmljZXMgaGF2ZSB0byBiZSByZWdpc3RlcmVkIGJlZm9yZQordGhlIGhpZ2ggcmVzb2x1dGlvbiBmdW5jdGlvbmFsaXR5IGNhbiB3b3JrLiBVcCB0byB0aGUgcG9pbnQgd2hlcmUgaHJ0aW1lcnMgYXJlCitpbml0aWFsaXplZCwgdGhlIHN5c3RlbSB3b3JrcyBpbiB0aGUgdXN1YWwgbG93IHJlc29sdXRpb24gcGVyaW9kaWMgbW9kZS4gVGhlCitjbG9jayBzb3VyY2UgYW5kIHRoZSBjbG9jayBldmVudCBkZXZpY2UgbGF5ZXJzIHByb3ZpZGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9ucword2hpY2ggaW5mb3JtIGhydGltZXJzIGFib3V0IGF2YWlsYWJpbGl0eSBvZiBuZXcgaGFyZHdhcmUuIGhydGltZXJzIHZhbGlkYXRlcwordGhlIHVzYWJpbGl0eSBvZiB0aGUgcmVnaXN0ZXJlZCBjbG9jayBzb3VyY2VzIGFuZCBjbG9jayBldmVudCBkZXZpY2VzIGJlZm9yZQorc3dpdGNoaW5nIHRvIGhpZ2ggcmVzb2x1dGlvbiBtb2RlLiBUaGlzIGVuc3VyZXMgYWxzbyB0aGF0IGEga2VybmVsIHdoaWNoIGlzCitjb25maWd1cmVkIGZvciBoaWdoIHJlc29sdXRpb24gdGltZXJzIGNhbiBydW4gb24gYSBzeXN0ZW0gd2hpY2ggbGFja3MgdGhlCituZWNlc3NhcnkgaGFyZHdhcmUgc3VwcG9ydC4KKworVGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBjb2RlIGRvZXMgbm90IHN1cHBvcnQgU01QIG1hY2hpbmVzIHdoaWNoIGhhdmUgb25seQorZ2xvYmFsIGNsb2NrIGV2ZW50IGRldmljZXMuIFRoZSBzdXBwb3J0IG9mIHN1Y2ggaGFyZHdhcmUgd291bGQgaW52b2x2ZSBJUEkKK2NhbGxzIHdoZW4gYW4gaW50ZXJydXB0IGhhcHBlbnMuIFRoZSBvdmVyaGVhZCB3b3VsZCBiZSBtdWNoIGxhcmdlciB0aGFuIHRoZQorYmVuZWZpdC4gVGhpcyBpcyB0aGUgcmVhc29uIHdoeSB3ZSBjdXJyZW50bHkgZGlzYWJsZSBoaWdoIHJlc29sdXRpb24gYW5kCitkeW5hbWljIHRpY2tzIG9uIGkzODYgU01QIHN5c3RlbXMgd2hpY2ggc3RvcCB0aGUgbG9jYWwgQVBJQyBpbiBDMyBwb3dlcgorc3RhdGUuIEEgd29ya2Fyb3VuZCBpcyBhdmFpbGFibGUgYXMgYW4gaWRlYSwgYnV0IHRoZSBwcm9ibGVtIGhhcyBub3QgYmVlbgordGFja2xlZCB5ZXQuCisKK1RoZSB0aW1lIG9yZGVyZWQgaW5zZXJ0aW9uIG9mIHRpbWVycyBwcm92aWRlcyBhbGwgdGhlIGluZnJhc3RydWN0dXJlIHRvIGRlY2lkZQord2hldGhlciB0aGUgZXZlbnQgZGV2aWNlIGhhcyB0byBiZSByZXByb2dyYW1tZWQgd2hlbiBhIHRpbWVyIGlzIGFkZGVkLiBUaGUKK2RlY2lzaW9uIGlzIG1hZGUgcGVyIHRpbWVyIGJhc2UgYW5kIHN5bmNocm9uaXplZCBhY3Jvc3MgcGVyLWNwdSB0aW1lciBiYXNlcyBpbgorYSBzdXBwb3J0IGZ1bmN0aW9uLiBUaGUgZGVzaWduIGFsbG93cyB0aGUgc3lzdGVtIHRvIHV0aWxpemUgc2VwYXJhdGUgcGVyLUNQVQorY2xvY2sgZXZlbnQgZGV2aWNlcyBmb3IgdGhlIHBlci1DUFUgdGltZXIgYmFzZXMsIGJ1dCBjdXJyZW50bHkgb25seSBvbmUKK3JlcHJvZ3JhbW1hYmxlIGNsb2NrIGV2ZW50IGRldmljZSBwZXItQ1BVIGlzIHV0aWxpemVkLgorCitXaGVuIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFwcGVucywgdGhlIG5leHQgZXZlbnQgaW50ZXJydXB0IGhhbmRsZXIgaXMgY2FsbGVkCitmcm9tIHRoZSBjbG9jayBldmVudCBkaXN0cmlidXRpb24gY29kZSBhbmQgbW92ZXMgZXhwaXJlZCB0aW1lcnMgZnJvbSB0aGUKK3JlZC1ibGFjayB0cmVlIHRvIGEgc2VwYXJhdGUgZG91YmxlIGxpbmtlZCBsaXN0IGFuZCBpbnZva2VzIHRoZSBzb2Z0aXJxCitoYW5kbGVyLiBBbiBhZGRpdGlvbmFsIG1vZGUgZmllbGQgaW4gdGhlIGhydGltZXIgc3RydWN0dXJlIGFsbG93cyB0aGUgc3lzdGVtIHRvCitleGVjdXRlIGNhbGxiYWNrIGZ1bmN0aW9ucyBkaXJlY3RseSBmcm9tIHRoZSBuZXh0IGV2ZW50IGludGVycnVwdCBoYW5kbGVyLiBUaGlzCitpcyByZXN0cmljdGVkIHRvIGNvZGUgd2hpY2ggY2FuIHNhZmVseSBiZSBleGVjdXRlZCBpbiB0aGUgaGFyZCBpbnRlcnJ1cHQKK2NvbnRleHQuIFRoaXMgYXBwbGllcywgZm9yIGV4YW1wbGUsIHRvIHRoZSBjb21tb24gY2FzZSBvZiBhIHdha2V1cCBmdW5jdGlvbiBhcwordXNlZCBieSBuYW5vc2xlZXAuIFRoZSBhZHZhbnRhZ2Ugb2YgZXhlY3V0aW5nIHRoZSBoYW5kbGVyIGluIHRoZSBpbnRlcnJ1cHQKK2NvbnRleHQgaXMgdGhlIGF2b2lkYW5jZSBvZiB1cCB0byB0d28gY29udGV4dCBzd2l0Y2hlcyAtIGZyb20gdGhlIGludGVycnVwdGVkCitjb250ZXh0IHRvIHRoZSBzb2Z0aXJxIGFuZCB0byB0aGUgdGFzayB3aGljaCBpcyB3b2tlbiB1cCBieSB0aGUgZXhwaXJlZAordGltZXIuCisKK09uY2UgYSBzeXN0ZW0gaGFzIHN3aXRjaGVkIHRvIGhpZ2ggcmVzb2x1dGlvbiBtb2RlLCB0aGUgcGVyaW9kaWMgdGljayBpcworc3dpdGNoZWQgb2ZmLiBUaGlzIGRpc2FibGVzIHRoZSBwZXIgc3lzdGVtIGdsb2JhbCBwZXJpb2RpYyBjbG9jayBldmVudCBkZXZpY2UgLQorZS5nLiB0aGUgUElUIG9uIGkzODYgU01QIHN5c3RlbXMuCisKK1RoZSBwZXJpb2RpYyB0aWNrIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQgYnkgYW4gcGVyLWNwdSBocnRpbWVyLiBUaGUgY2FsbGJhY2sKK2Z1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHRoZSBuZXh0IGV2ZW50IGludGVycnVwdCBjb250ZXh0IGFuZCB1cGRhdGVzIGppZmZpZXMKK2FuZCBjYWxscyB1cGRhdGVfcHJvY2Vzc190aW1lcyBhbmQgcHJvZmlsaW5nLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhydGltZXIKK2Jhc2VkIHBlcmlvZGljIHRpY2sgaXMgZGVzaWduZWQgdG8gYmUgZXh0ZW5kZWQgd2l0aCBkeW5hbWljIHRpY2sgZnVuY3Rpb25hbGl0eS4KK1RoaXMgYWxsb3dzIHRvIHVzZSBhIHNpbmdsZSBjbG9jayBldmVudCBkZXZpY2UgdG8gc2NoZWR1bGUgaGlnaCByZXNvbHV0aW9uCit0aW1lciBhbmQgcGVyaW9kaWMgZXZlbnRzIChqaWZmaWVzIHRpY2ssIHByb2ZpbGluZywgcHJvY2VzcyBhY2NvdW50aW5nKSBvbiBVUAorc3lzdGVtcy4gVGhpcyBoYXMgYmVlbiBwcm92ZWQgdG8gd29yayB3aXRoIHRoZSBQSVQgb24gaTM4NiBhbmQgdGhlIEluY3JlbWVudGVyCitvbiBQUEMuCisKK1RoZSBzb2Z0aXJxIGZvciBydW5uaW5nIHRoZSBocnRpbWVyIHF1ZXVlcyBhbmQgZXhlY3V0aW5nIHRoZSBjYWxsYmFja3MgaGFzIGJlZW4KK3NlcGFyYXRlZCBmcm9tIHRoZSB0aWNrIGJvdW5kIHRpbWVyIHNvZnRpcnEgdG8gYWxsb3cgYWNjdXJhdGUgZGVsaXZlcnkgb2YgaGlnaAorcmVzb2x1dGlvbiB0aW1lciBzaWduYWxzIHdoaWNoIGFyZSB1c2VkIGJ5IGl0aW1lciBhbmQgUE9TSVggaW50ZXJ2YWwKK3RpbWVycy4gVGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHNvZnRpcnEgY2FuIHN0aWxsIGJlIGRlbGF5ZWQgYnkgb3RoZXIgc29mdGlycXMsCitidXQgdGhlIG92ZXJhbGwgbGF0ZW5jaWVzIGhhdmUgYmVlbiBzaWduaWZpY2FudGx5IGltcHJvdmVkIGJ5IHRoaXMgc2VwYXJhdGlvbi4KKworRmlndXJlICM1IChPTFMgc2xpZGVzIHAuMjIpIGlsbHVzdHJhdGVzIHRoZSB0cmFuc2Zvcm1hdGlvbi4KKworCitkeW5hbWljIHRpY2tzCistLS0tLS0tLS0tLS0tCisKK0R5bmFtaWMgdGlja3MgYXJlIHRoZSBsb2dpY2FsIGNvbnNlcXVlbmNlIG9mIHRoZSBocnRpbWVyIGJhc2VkIHBlcmlvZGljIHRpY2sKK3JlcGxhY2VtZW50IChzY2hlZF90aWNrKS4gVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHNjaGVkX3RpY2sgaHJ0aW1lciBpcworZXh0ZW5kZWQgYnkgdGhyZWUgZnVuY3Rpb25zOgorCistIGhydGltZXJfc3RvcF9zY2hlZF90aWNrCistIGhydGltZXJfcmVzdGFydF9zY2hlZF90aWNrCistIGhydGltZXJfdXBkYXRlX2ppZmZpZXMKKworaHJ0aW1lcl9zdG9wX3NjaGVkX3RpY2soKSBpcyBjYWxsZWQgd2hlbiBhIENQVSBnb2VzIGludG8gaWRsZSBzdGF0ZS4gVGhlIGNvZGUKK2V2YWx1YXRlcyB0aGUgbmV4dCBzY2hlZHVsZWQgdGltZXIgZXZlbnQgKGZyb20gYm90aCBocnRpbWVycyBhbmQgdGhlIHRpbWVyCit3aGVlbCkgYW5kIGluIGNhc2UgdGhhdCB0aGUgbmV4dCBldmVudCBpcyBmdXJ0aGVyIGF3YXkgdGhhbiB0aGUgbmV4dCB0aWNrIGl0CityZXByb2dyYW1zIHRoZSBzY2hlZF90aWNrIHRvIHRoaXMgZnV0dXJlIGV2ZW50LCB0byBhbGxvdyBsb25nZXIgaWRsZSBzbGVlcHMKK3dpdGhvdXQgd29ydGhsZXNzIGludGVycnVwdGlvbiBieSB0aGUgcGVyaW9kaWMgdGljay4gVGhlIGZ1bmN0aW9uIGlzIGFsc28KK2NhbGxlZCB3aGVuIGFuIGludGVycnVwdCBoYXBwZW5zIGR1cmluZyB0aGUgaWRsZSBwZXJpb2QsIHdoaWNoIGRvZXMgbm90IGNhdXNlIGEKK3Jlc2NoZWR1bGUuIFRoZSBjYWxsIGlzIG5lY2Vzc2FyeSBhcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbWlnaHQgaGF2ZSBhcm1lZCBhCituZXcgdGltZXIgd2hvc2UgZXhwaXJ5IHRpbWUgaXMgYmVmb3JlIHRoZSB0aW1lIHdoaWNoIHdhcyBpZGVudGlmaWVkIGFzIHRoZQorbmVhcmVzdCBldmVudCBpbiB0aGUgcHJldmlvdXMgY2FsbCB0byBocnRpbWVyX3N0b3Bfc2NoZWRfdGljay4KKworaHJ0aW1lcl9yZXN0YXJ0X3NjaGVkX3RpY2soKSBpcyBjYWxsZWQgd2hlbiB0aGUgQ1BVIGxlYXZlcyB0aGUgaWRsZSBzdGF0ZSBiZWZvcmUKK2l0IGNhbGxzIHNjaGVkdWxlKCkuIGhydGltZXJfcmVzdGFydF9zY2hlZF90aWNrKCkgcmVzdW1lcyB0aGUgcGVyaW9kaWMgdGljaywKK3doaWNoIGlzIGtlcHQgYWN0aXZlIHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gaHJ0aW1lcl9zdG9wX3NjaGVkX3RpY2soKS4KKworaHJ0aW1lcl91cGRhdGVfamlmZmllcygpIGlzIGNhbGxlZCBmcm9tIGlycV9lbnRlcigpIHdoZW4gYW4gaW50ZXJydXB0IGhhcHBlbnMKK2luIHRoZSBpZGxlIHBlcmlvZCB0byBtYWtlIHN1cmUgdGhhdCBqaWZmaWVzIGFyZSB1cCB0byBkYXRlIGFuZCB0aGUgaW50ZXJydXB0CitoYW5kbGVyIGhhcyBub3QgdG8gZGVhbCB3aXRoIGFuIGV2ZW50dWFsbHkgc3RhbGUgamlmZnkgdmFsdWUuCisKK1RoZSBkeW5hbWljIHRpY2sgZmVhdHVyZSBwcm92aWRlcyBzdGF0aXN0aWNhbCB2YWx1ZXMgd2hpY2ggYXJlIGV4cG9ydGVkIHRvCit1c2Vyc3BhY2UgdmlhIC9wcm9jL3N0YXRzIGFuZCBjYW4gYmUgbWFkZSBhdmFpbGFibGUgZm9yIGVuaGFuY2VkIHBvd2VyCittYW5hZ2VtZW50IGNvbnRyb2wuCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBsZWF2ZXMgcm9vbSBmb3IgZnVydGhlciBkZXZlbG9wbWVudCBsaWtlIGZ1bGwgdGlja2xlc3MKK3N5c3RlbXMsIHdoZXJlIHRoZSB0aW1lIHNsaWNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNjaGVkdWxlciwgdmFyaWFibGUKK2ZyZXF1ZW5jeSBwcm9maWxpbmcsIGFuZCBhIGNvbXBsZXRlIHJlbW92YWwgb2YgamlmZmllcyBpbiB0aGUgZnV0dXJlLgorCisKK0FzaWRlIHRoZSBjdXJyZW50IGluaXRpYWwgc3VibWlzc2lvbiBvZiBpMzg2IHN1cHBvcnQsIHRoZSBwYXRjaHNldCBoYXMgYmVlbgorZXh0ZW5kZWQgdG8geDg2XzY0IGFuZCBBUk0gYWxyZWFkeS4gSW5pdGlhbCAod29yayBpbiBwcm9ncmVzcykgc3VwcG9ydCBpcyBhbHNvCithdmFpbGFibGUgZm9yIE1JUFMgYW5kIFBvd2VyUEMuCisKKwkgIFRob21hcywgSW5nbworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ocnRpbWVycy9ocnRpbWVycy50eHQgYi9Eb2N1bWVudGF0aW9uL3RpbWVycy9ocnRpbWVycy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaHJ0aW1lcnMvaHJ0aW1lcnMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3RpbWVycy9ocnRpbWVycy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHJ0aW1lci90aW1lcl9zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3RpbWVycy90aW1lcl9zdGF0cy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaHJ0aW1lci90aW1lcl9zdGF0cy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdGltZXJzL3RpbWVyX3N0YXRzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91bmFsaWduZWQtbWVtb3J5LWFjY2Vzcy50eHQgYi9Eb2N1bWVudGF0aW9uL3VuYWxpZ25lZC1tZW1vcnktYWNjZXNzLnR4dAppbmRleCA2MjIzZWFjLi5iMDQ3MmFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VuYWxpZ25lZC1tZW1vcnktYWNjZXNzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VuYWxpZ25lZC1tZW1vcnktYWNjZXNzLnR4dApAQCAtNTcsNyArNTcsNyBAQAogICAgdW5hbGlnbmVkIGFjY2VzcyB0byBiZSBjb3JyZWN0ZWQuCiAgLSBTb21lIGFyY2hpdGVjdHVyZXMgYXJlIG5vdCBjYXBhYmxlIG9mIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLCBidXQgd2lsbAogICAgc2lsZW50bHkgcGVyZm9ybSBhIGRpZmZlcmVudCBtZW1vcnkgYWNjZXNzIHRvIHRoZSBvbmUgdGhhdCB3YXMgcmVxdWVzdGVkLAotICAgcmVzdWx0aW5nIGEgYSBzdWJ0bGUgY29kZSBidWcgdGhhdCBpcyBoYXJkIHRvIGRldGVjdCEKKyAgIHJlc3VsdGluZyBpbiBhIHN1YnRsZSBjb2RlIGJ1ZyB0aGF0IGlzIGhhcmQgdG8gZGV0ZWN0IQogCiBJdCBzaG91bGQgYmUgb2J2aW91cyBmcm9tIHRoZSBhYm92ZSB0aGF0IGlmIHlvdXIgY29kZSBjYXVzZXMgdW5hbGlnbmVkCiBtZW1vcnkgYWNjZXNzZXMgdG8gaGFwcGVuLCB5b3VyIGNvZGUgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgb24gY2VydGFpbgpAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAl1MzIgdmFsdWUgPSBnZXRfdW5hbGlnbmVkKCh1MzIgKikgZGF0YSk7CiAKLVRoZXNlIG1hY3JvcyB3b3JrIHdvcmsgZm9yIG1lbW9yeSBhY2Nlc3NlcyBvZiBhbnkgbGVuZ3RoIChub3QganVzdCAzMiBiaXRzIGFzCitUaGVzZSBtYWNyb3Mgd29yayBmb3IgbWVtb3J5IGFjY2Vzc2VzIG9mIGFueSBsZW5ndGggKG5vdCBqdXN0IDMyIGJpdHMgYXMKIGluIHRoZSBleGFtcGxlcyBhYm92ZSkuIEJlIGF3YXJlIHRoYXQgd2hlbiBjb21wYXJlZCB0byBzdGFuZGFyZCBhY2Nlc3Mgb2YKIGFsaWduZWQgbWVtb3J5LCB1c2luZyB0aGVzZSBtYWNyb3MgdG8gYWNjZXNzIHVuYWxpZ25lZCBtZW1vcnkgY2FuIGJlIGNvc3RseSBpbgogdGVybXMgb2YgcGVyZm9ybWFuY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2ItaGVscC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2ItaGVscC50eHQKaW5kZXggYTc0MDg1OS4uNDI3M2NhMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvdXNiLWhlbHAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dApAQCAtMSw1ICsxLDUgQEAKIHVzYi1oZWxwLnR4dAotMjAwMC1KdWx5LTEyCisyMDA4LU1hci03CiAKIEZvciBVU0IgaGVscCBvdGhlciB0aGFuIHRoZSByZWFkbWUgZmlsZXMgdGhhdCBhcmUgbG9jYXRlZCBpbgogRG9jdW1lbnRhdGlvbi91c2IvKiwgc2VlIHRoZSBmb2xsb3dpbmc6CkBAIC0xMCw5ICsxMCw3IEBACiBMaW51eCBVU0IgR3VpZGU6ICAgIGh0dHA6Ly9saW51eC11c2Iuc291cmNlZm9yZ2UubmV0CiBMaW51eC1VU0IgZGV2aWNlIG92ZXJ2aWV3ICh3b3JraW5nIGRldmljZXMgYW5kIGRyaXZlcnMpOgogICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnFiaWsuY2gvdXNiL2RldmljZXMvCi0gICAgCi1UaGUgTGludXgtVVNCIG1haWxpbmcgbGlzdHMgYXJlOgotICBsaW51eC11c2ItdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICAgZm9yIGdlbmVyYWwgdXNlciBoZWxwCi0gIGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICBmb3IgZGV2ZWxvcGVyIGRpc2N1c3Npb25zCisKK1RoZSBMaW51eC1VU0IgbWFpbGluZyBsaXN0IGlzIGF0IGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIAogIyMjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CmluZGV4IDZhODQ2OWYuLmY0MGUwOTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CkBAIC04LDcgKzgsNyBAQAogICA3IC0+IExlYWR0ZWsgV2luZmFzdCBVU0IgSUkgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKICAgOCAtPiBLd29ybGQgVVNCMjgwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCiAgIDkgLT4gUGlubmFjbGUgRGF6emxlIERWQyA5MC9EVkMgMTAwICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIzMDQ6MDIwNywyMzA0OjAyMWFdCi0gMTAgLT4gSGF1cHBhdWdlIFdpblRWIEhWUiA5MDAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzIwNDA6NjUwMF0KKyAxMCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAwLDIwNDA6NjUwMl0KICAxMSAtPiBUZXJyYXRlYyBIeWJyaWQgWFMgICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQyXQogIDEyIC0+IEt3b3JsZCBQVlIgVFYgMjgwMCBSRiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCiAgMTMgLT4gVGVycmF0ZWMgUHJvZGlneSBYUyAgICAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzBjY2Q6MDA0N10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCA1ZDNiNmI0Li4wNDI0OTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC05Miw5ICs5Miw5IEBACiAgOTEgLT4gQVZlck1lZGlhIEExNjkgQiAgICAgICAgICAgICAgICAgICAgICAgICBbMTQ2MTo3MzYwXQogIDkyIC0+IEFWZXJNZWRpYSBBMTY5IEIxICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6NjM2MF0KICA5MyAtPiBNZWRpb24gNzEzNCBCcmlkZ2UgIzIgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDVdCi0gOTQgLT4gTGlmZVZpZXcgRmx5RFZCLVQgSHlicmlkIENhcmRidXMvTVNJIFRWIEBueXdoZXJlIEEvRCBOQiBbNTE2ODozMzA2LDUxNjg6MzUwMiw0ZTQyOjM1MDJdCisgOTQgLT4gTGlmZVZpZXcgRmx5RFZCLVQgSHlicmlkIENhcmRidXMvTVNJIFRWIEBueXdoZXJlIEEvRCBOQiBbNTE2ODozMzA2LDUxNjg6MzUwMiw1MTY4OjMzMDcsNGU0MjozNTAyXQogIDk1IC0+IExpZmVWaWV3IEZseVZJREVPMzAwMCAoTlRTQykgICAgICAgICAgICAgWzUxNjk6MDEzOF0KLSA5NiAtPiBNZWRpb24gTWQ4ODAwIFF1YWRybyAgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDcsMTZiZTowMDA4XQorIDk2IC0+IE1lZGlvbiBNZDg4MDAgUXVhZHJvICAgICAgICAgICAgICAgICAgICAgWzE2YmU6MDAwNywxNmJlOjAwMDgsMTZiZTowMDBkXQogIDk3IC0+IExpZmVWaWV3IEZseURWQi1TIC9BY29ycCBUVjEzNERTICAgICAgICAgWzUxNjg6MDMwMCw0ZTQyOjAzMDBdCiAgOTggLT4gUHJvdGV1cyBQcm8gMjMwOSAgICAgICAgICAgICAgICAgICAgICAgICBbMDkxOToyMDAzXQogIDk5IC0+IEFWZXJNZWRpYSBUViBIeWJyaWQgQTE2QVIgICAgICAgICAgICAgICAgWzE0NjE6MmMwMF0KQEAgLTEyOSwzICsxMjksNSBAQAogMTI4IC0+IEJlaG9sZGVyIEJlaG9sZFRWIENvbHVtYnVzIFRWRk0gICAgICAgICAgWzAwMDA6NTIwMV0KIDEyOSAtPiBCZWhvbGRlciBCZWhvbGRUViA2MDcgLyBCZWhvbGRUViA2MDkgICAgIFs1YWNlOjYwNzAsNWFjZTo2MDcxLDVhY2U6NjA3Miw1YWNlOjYwNzMsNWFjZTo2MDkwLDVhY2U6NjA5MSw1YWNlOjYwOTIsNWFjZTo2MDkzXQogMTMwIC0+IEJlaG9sZGVyIEJlaG9sZFRWIE02IC8gQmVob2xkVFYgTTYgRXh0cmEgWzVhY2U6NjE5MCw1YWNlOjYxOTNdCisxMzEgLT4gVHdpbmhhbiBIeWJyaWQgRFRWLURWQiAzMDU2IFBDSSAgICAgICAgICBbMTgyMjowMDIyXQorMTMyIC0+IEdlbml1cyBUVkdPIEFNMTFNQ0UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjR4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzY0eHgudHh0CmluZGV4IDRkOWEwYzMuLjVjODFlM2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjR4eC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2NHh4LnR4dApAQCAtMjUsNyArMjUsNyBAQAogIC0gZGVidWcgICAgICA6IHNldCB0byAxIHRvIGVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzCiAgLSBtb2RlICAgICAgIDogMCA9IDMyMHgyNDAsIDEgPSAxNjB4MTIwLCAyID0gNjQweDQ4MAogWW91IGNhbiB0aGVuIHVzZSB0aGUgY2FtZXJhIHdpdGggVjRMMiBjb21wYXRpYmxlIGFwcGxpY2F0aW9ucywgZm9yIGV4YW1wbGUgRWtpZ2EuCi1UbyBjYXB0dXJlIGEgc2luZ2xlIGltYWdlLCB0cnkgdGhpczogZGQgaWY9L2Rldi92aWRlbzAgb2Y9dGVzdC5qcGcgYnM9MSBjb3VudD0xCitUbyBjYXB0dXJlIGEgc2luZ2xlIGltYWdlLCB0cnkgdGhpczogZGQgaWY9L2Rldi92aWRlbzAgb2Y9dGVzdC5qcGcgYnM9MU0gY291bnQ9MQogCiBsaW5rcyA6CiBodHRwOi8vbXhoYWFyZC5mcmVlLmZyLyAoc3VwcG9ydCBmb3IgbWFueSBvdGhlcnMgY2FtcyBpbmNsdWRpbmcgc29tZSBBaXB0ZWsgUG9ja2V0RFYpCkBAIC02MywzICs2Myw1IEBACiAweDA2ZDYgIDB4MDAzNCAgIFRydXN0ICAgICAgICAgICBQb3dlcmNAbSA3NTAKIDB4MGExNyAgMHgwMDYyICAgUGVudGF4ICAgICAgICAgIE9wdGlvIDUwTAogMHgwNmQ2ICAweDAwM2IgICBUcnVzdCAgICAgICAgICAgUG93ZXJjQG0gOTcwWgorMHgwYTE3ICAweDAwNGUgICBQZW50YXggICAgICAgICAgT3B0aW8gNTAKKzB4MDQxZSAgMHg0MDVkICAgQ3JlYXRpdmUgICAgICAgIERpVmkgQ0FNIDUxNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9odWdldGxicGFnZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAppbmRleCBmOTYyZDAxLi4zMTAyYjgxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dApAQCAtODgsMTAgKzg4LDkgQEAKIHRoZXNlIHN1cnBsdXMgaHVnZXBhZ2VzIGdvIG91dCBvZiB1c2UsIHRoZXkgYXJlIGZyZWVkIGJhY2sgdG8gdGhlIGJ1ZGR5CiBhbGxvY2F0b3IuCiAKLUNhdmVhdDogU2hyaW5raW5nIHRoZSBwb29sIHZpYSBucl9odWdlcGFnZXMgd2hpbGUgYSBzdXJwbHVzIGlzIGluIGVmZmVjdAotd2lsbCBhbGxvdyB0aGUgbnVtYmVyIG9mIHN1cnBsdXMgaHVnZSBwYWdlcyB0byBleGNlZWQgdGhlIG92ZXJjb21taXQKLXZhbHVlLCBhcyB0aGUgcG9vbCBodWdlcGFnZXMgKHdoaWNoIG11c3QgaGF2ZSBiZWVuIGluIHVzZSBmb3IgYSBzdXJwbHVzCi1odWdlcGFnZXMgdG8gYmUgYWxsb2NhdGVkKSB3aWxsIGJlY29tZSBzdXJwbHVzIGh1Z2VwYWdlcy4gIEFzIGxvbmcgYXMKK0NhdmVhdDogU2hyaW5raW5nIHRoZSBwb29sIHZpYSBucl9odWdlcGFnZXMgc3VjaCB0aGF0IGl0IGJlY29tZXMgbGVzcwordGhhbiB0aGUgbnVtYmVyIG9mIGh1Z2VwYWdlcyBpbiB1c2Ugd2lsbCBjb252ZXJ0IHRoZSBiYWxhbmNlIHRvIHN1cnBsdXMKK2h1Z2UgcGFnZXMgZXZlbiBpZiBpdCB3b3VsZCBleGNlZWQgdGhlIG92ZXJjb21taXQgdmFsdWUuICBBcyBsb25nIGFzCiB0aGlzIGNvbmRpdGlvbiBob2xkcywgaG93ZXZlciwgbm8gbW9yZSBzdXJwbHVzIGh1Z2UgcGFnZXMgd2lsbCBiZQogYWxsb3dlZCBvbiB0aGUgc3lzdGVtIHVudGlsIG9uZSBvZiB0aGUgdHdvIHN5c2N0bHMgYXJlIGluY3JlYXNlZAogc3VmZmljaWVudGx5LCBvciB0aGUgc3VycGx1cyBodWdlIHBhZ2VzIGdvIG91dCBvZiB1c2UgYW5kIGFyZSBmcmVlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vc2xhYmluZm8uYyBiL0RvY3VtZW50YXRpb24vdm0vc2xhYmluZm8uYwppbmRleCA3MTIzZmVlLi4yMmQ3ZTNlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3NsYWJpbmZvLmMKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9zbGFiaW5mby5jCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCWNoYXIgKnQ7CiAJaW50IGNvdW50OwogCi0JaWYgKGNoZGlyKCIvc3lzL2tlcm5lbC9zbGFiIikpCisJaWYgKGNoZGlyKCIvc3lzL2tlcm5lbC9zbGFiIikgJiYgY2hkaXIoIi9zeXMvc2xhYiIpKQogCQlmYXRhbCgiU1lTRlMgc3VwcG9ydCBmb3IgU0xVQiBub3QgYWN0aXZlXG4iKTsKIAogCWRpciA9IG9wZW5kaXIoIi4iKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3NsdWIudHh0CmluZGV4IGRjZjhiY2YuLjdjMTNmMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dApAQCAtNTAsMTQgKzUwLDE0IEBACiAKIFRyeWluZyB0byBmaW5kIGFuIGlzc3VlIGluIHRoZSBkZW50cnkgY2FjaGU/IFRyeQogCi0Jc2x1Yl9kZWJ1Zz0sZGVudHJ5X2NhY2hlCisJc2x1Yl9kZWJ1Zz0sZGVudHJ5CiAKIHRvIG9ubHkgZW5hYmxlIGRlYnVnZ2luZyBvbiB0aGUgZGVudHJ5IGNhY2hlLgogCiBSZWQgem9uaW5nIGFuZCB0cmFja2luZyBtYXkgcmVhbGlnbiB0aGUgc2xhYi4gIFdlIGNhbiBqdXN0IGFwcGx5IHNhbml0eSBjaGVja3MKIHRvIHRoZSBkZW50cnkgY2FjaGUgd2l0aAogCi0Jc2x1Yl9kZWJ1Zz1GLGRlbnRyeV9jYWNoZQorCXNsdWJfZGVidWc9RixkZW50cnkKIAogSW4gY2FzZSB5b3UgZm9yZ290IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU6IEl0IGlzCiBwb3NzaWJsZSB0byBlbmFibGUgZGVidWdnaW5nIG1hbnVhbGx5IHdoZW4gdGhlIGtlcm5lbCBpcyB1cC4gTG9vayBhdCB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3BhdC50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni9wYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTY1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni9wYXQudHh0CkBAIC0wLDAgKzEsMTAwIEBACisKK1BBVCAoUGFnZSBBdHRyaWJ1dGUgVGFibGUpCisKK3g4NiBQYWdlIEF0dHJpYnV0ZSBUYWJsZSAoUEFUKSBhbGxvd3MgZm9yIHNldHRpbmcgdGhlIG1lbW9yeSBhdHRyaWJ1dGUgYXQgdGhlCitwYWdlIGxldmVsIGdyYW51bGFyaXR5LiBQQVQgaXMgY29tcGxlbWVudGFyeSB0byB0aGUgTVRSUiBzZXR0aW5ncyB3aGljaCBhbGxvd3MKK2ZvciBzZXR0aW5nIG9mIG1lbW9yeSB0eXBlcyBvdmVyIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2VzLiBIb3dldmVyLCBQQVQgaXMKK21vcmUgZmxleGlibGUgdGhhbiBNVFJSIGR1ZSB0byBpdHMgY2FwYWJpbGl0eSB0byBzZXQgYXR0cmlidXRlcyBhdCBwYWdlIGxldmVsCithbmQgYWxzbyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgbm8gaGFyZHdhcmUgbGltaXRhdGlvbnMgb24gbnVtYmVyIG9mCitzdWNoIGF0dHJpYnV0ZSBzZXR0aW5ncyBhbGxvd2VkLiBBZGRlZCBmbGV4aWJpbGl0eSBjb21lcyB3aXRoIGd1aWRlbGluZXMgZm9yCitub3QgaGF2aW5nIG1lbW9yeSB0eXBlIGFsaWFzaW5nIGZvciB0aGUgc2FtZSBwaHlzaWNhbCBtZW1vcnkgd2l0aCBtdWx0aXBsZQordmlydHVhbCBhZGRyZXNzZXMuCisKK1BBVCBhbGxvd3MgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnkgYXR0cmlidXRlcy4gVGhlIG1vc3QgY29tbW9ubHkgdXNlZAorb25lcyB0aGF0IHdpbGwgYmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSBhcmUgV3JpdGUtYmFjaywgVW5jYWNoZWQsCitXcml0ZS1jb21iaW5lZCBhbmQgVW5jYWNoZWQgTWludXMuCisKK1RoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBBUElzIGluIHRoZSBrZXJuZWwgdGhhdCBhbGxvd3Mgc2V0dGluZyBvZiBtZW1vcnkKK2F0dHJpYnV0ZXMgYXQgdGhlIHBhZ2UgbGV2ZWwuIEluIG9yZGVyIHRvIGF2b2lkIGFsaWFzaW5nLCB0aGVzZSBpbnRlcmZhY2VzCitzaG91bGQgYmUgdXNlZCB0aG91Z2h0ZnVsbHkuIEJlbG93IGlzIGEgdGFibGUgb2YgaW50ZXJmYWNlcyBhdmFpbGFibGUsCit0aGVpciBpbnRlbmRlZCB1c2FnZSBhbmQgdGhlaXIgbWVtb3J5IGF0dHJpYnV0ZSByZWxhdGlvbnNoaXBzLiBJbnRlcm5hbGx5LAordGhlc2UgQVBJcyB1c2UgYSByZXNlcnZlX21lbXR5cGUoKS9mcmVlX21lbXR5cGUoKSBpbnRlcmZhY2Ugb24gdGhlIHBoeXNpY2FsCithZGRyZXNzIHJhbmdlIHRvIGF2b2lkIGFueSBhbGlhc2luZy4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBUEkgICAgICAgICAgICAgICAgICAgIHwgICAgUkFNICAgfCAgQUNQSSwuLi4gIHwgIFJlc2VydmVkL0hvbGVzICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Citpb3JlbWFwICAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICBVQyAgICAgIHwgICAgICAgVUMgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Citpb3JlbWFwX2NhY2hlICAgICAgICAgIHwgICAgLS0gICAgfCAgICBXQiAgICAgIHwgICAgICAgV0IgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Citpb3JlbWFwX25vY2FjaGUgICAgICAgIHwgICAgLS0gICAgfCAgICBVQyAgICAgIHwgICAgICAgVUMgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Citpb3JlbWFwX3djICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICAtLSAgICAgIHwgICAgICAgV0MgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CitzZXRfbWVtb3J5X3VjICAgICAgICAgIHwgICAgVUMgICAgfCAgICAtLSAgICAgIHwgICAgICAgLS0gICAgICAgICB8Cisgc2V0X21lbW9yeV93YiAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CitzZXRfbWVtb3J5X3djICAgICAgICAgIHwgICAgV0MgICAgfCAgICAtLSAgICAgIHwgICAgICAgLS0gICAgICAgICB8Cisgc2V0X21lbW9yeV93YiAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CitwY2kgc3lzZnMgcmVzb3VyY2UgICAgIHwgICAgLS0gICAgfCAgICAtLSAgICAgIHwgICAgICAgVUMgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CitwY2kgc3lzZnMgcmVzb3VyY2Vfd2MgIHwgICAgLS0gICAgfCAgICAtLSAgICAgIHwgICAgICAgV0MgICAgICAgICB8CisgaXMgSU9SRVNPVVJDRV9QUkVGRVRDSHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CitwY2kgcHJvYyAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICAtLSAgICAgIHwgICAgICAgVUMgICAgICAgICB8CisgIVBDSUlPQ19XUklURV9DT01CSU5FIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CitwY2kgcHJvYyAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICAtLSAgICAgIHwgICAgICAgV0MgICAgICAgICB8CisgUENJSU9DX1dSSVRFX0NPTUJJTkUgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisvZGV2L21lbSAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICBVQyAgICAgIHwgICAgICAgVUMgICAgICAgICB8CisgcmVhZC13cml0ZSAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisvZGV2L21lbSAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICBVQyAgICAgIHwgICAgICAgVUMgICAgICAgICB8CisgbW1hcCBTWU5DIGZsYWcgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisvZGV2L21lbSAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgV0IvV0MvVUMgIHwgICAgV0IvV0MvVUMgICAgICB8CisgbW1hcCAhU1lOQyBmbGFnICAgICAgIHwgICAgICAgICAgfChmcm9tIGV4aXN0LXwgIChmcm9tIGV4aXN0LSAgICB8CisgYW5kICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgaW5nIGFsaWFzKXwgICAgaW5nIGFsaWFzKSAgICB8CisgYW55IGFsaWFzIHRvIHRoaXMgYXJlYXwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisvZGV2L21lbSAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICBXQiAgICAgIHwgICAgICAgV0IgICAgICAgICB8CisgbW1hcCAhU1lOQyBmbGFnICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Cisgbm8gYWxpYXMgdG8gdGhpcyBhcmVhIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgYW5kICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgTVRSUiBzYXlzIFdCICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisvZGV2L21lbSAgICAgICAgICAgICAgIHwgICAgLS0gICAgfCAgICAtLSAgICAgIHwgICAgVUNfTUlOVVMgICAgICB8CisgbW1hcCAhU1lOQyBmbGFnICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8Cisgbm8gYWxpYXMgdG8gdGhpcyBhcmVhIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgYW5kICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgTVRSUiBzYXlzICFXQiAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGVzOgorCistLSBpbiB0aGUgYWJvdmUgdGFibGUgbWVhbiAiTm90IHN1Z2dlc3RlZCB1c2FnZSBmb3IgdGhlIEFQSSIuIFNvbWUgb2YgdGhlIC0tJ3MKK2FyZSBzdHJpY3RseSBlbmZvcmNlZCBieSB0aGUga2VybmVsLiBTb21lIG90aGVycyBhcmUgbm90IHJlYWxseSBlbmZvcmNlZAordG9kYXksIGJ1dCBtYXkgYmUgZW5mb3JjZWQgaW4gZnV0dXJlLgorCitGb3IgaW9yZW1hcCBhbmQgcGNpIGFjY2VzcyB0aHJvdWdoIC9zeXMgb3IgL3Byb2MgLSBUaGUgYWN0dWFsIHR5cGUgcmV0dXJuZWQKK2NhbiBiZSBtb3JlIHJlc3RyaWN0aXZlLCBpbiBjYXNlIG9mIGFueSBleGlzdGluZyBhbGlhc2luZyBmb3IgdGhhdCBhZGRyZXNzLgorRm9yIGV4YW1wbGU6IElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHVuY2FjaGVkIG1hcHBpbmcsIGEgbmV3IGlvcmVtYXBfd2MgY2FuCityZXR1cm4gdW5jYWNoZWQgbWFwcGluZyBpbiBwbGFjZSBvZiB3cml0ZS1jb21iaW5lIHJlcXVlc3RlZC4KKworc2V0X21lbW9yeV9bdWN8d2NdIGFuZCBzZXRfbWVtb3J5X3diIHNob3VsZCBiZSB1c2VkIGluIHBhaXJzLCB3aGVyZSBkcml2ZXIgd2lsbAorZmlyc3QgbWFrZSBhIHJlZ2lvbiB1YyBvciB3YyBhbmQgc3dpdGNoIGl0IGJhY2sgdG8gd2IgYWZ0ZXIgdXNlLgorCitPdmVyIHRpbWUgd3JpdGVzIHRvIC9wcm9jL210cnIgd2lsbCBiZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHVzaW5nIFBBVCBiYXNlZAoraW50ZXJmYWNlcy4gVXNlcnMgd3JpdGluZyB0byAvcHJvYy9tdHJyIGFyZSBzdWdnZXN0ZWQgdG8gdXNlIGFib3ZlIGludGVyZmFjZXMuCisKK0RyaXZlcnMgc2hvdWxkIHVzZSBpb3JlbWFwX1t1Y3x3Y10gdG8gYWNjZXNzIFBDSSBCQVJzIHdpdGggW3VjfHdjXSBhY2Nlc3MKK3R5cGVzLgorCitEcml2ZXJzIHNob3VsZCB1c2Ugc2V0X21lbW9yeV9bdWN8d2NdIHRvIHNldCBhY2Nlc3MgdHlwZSBmb3IgUkFNIHJhbmdlcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMzRhYmFlNC4uYjBjN2I2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CkBAIC0zMDcsMyArMzA3LDggQEAKIAkJCXN0dWNrIChkZWZhdWx0KQogCiBNaXNjZWxsYW5lb3VzCisKKwlub2dicGFnZXMKKwkJRG8gbm90IHVzZSBHQiBwYWdlcyBmb3Iga2VybmVsIGRpcmVjdCBtYXBwaW5ncy4KKwlnYnBhZ2VzCisJCVVzZSBHQiBwYWdlcyBmb3Iga2VybmVsIGRpcmVjdCBtYXBwaW5ncy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMWQyZWRiNDkuLmMwY2M1MmEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNjMsNiArMTYzLDEyIEBACiBMOglsaW51eC1tNjhrQGxpc3RzLmxpbnV4LW02OGsub3JnCiBTOglNYWludGFpbmVkCiAKK0FGUyBGSUxFU1lTVEVNICYgQUZfUlhSUEMgU09DS0VUIERPTUFJTgorUDoJRGF2aWQgSG93ZWxscworTToJZGhvd2VsbHNAcmVkaGF0LmNvbQorTDoJbGludXgtYWZzQGxpc3RzLmluZnJhZGVhZC5vcmcKK1M6CVN1cHBvcnRlZAorCiBBSU8KIFA6CUJlbmphbWluIExhSGFpc2UKIE06CWJjcmxAa3ZhY2sub3JnCkBAIC0yNjYsNiArMjcyLDE1IEBACiBXOiAgICAgIGh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLwogUzogICAgICBNYWludGFpbmVkCiAKK0FEMTg4OSBBTFNBIFNPVU5EIERSSVZFUgorUDogICAgIEt5bGUgTWNNYXJ0aW4KK006ICAgICBreWxlQHBhcmlzYy1saW51eC5vcmcKK1A6ICAgICBUaGliYXV0IFZhcmVuZQorTTogICAgIFQtQm9uZUBwYXJpc2MtbGludXgub3JnCitXOiAgICAgaHR0cDovL3dpa2kucGFyaXNjLWxpbnV4Lm9yZy9BRDE4ODkKK0w6ICAgICBsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCitTOiAgICAgTWFpbnRhaW5lZAorCiBBRE0xMDI1IEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCiBQOglKZWFuIERlbHZhcmUKIE06CWtoYWxpQGxpbnV4LWZyLm9yZwpAQCAtNDQzLDcgKzQ1OCw3IEBACiAKIEFSTS9BVE1FTCBBVDkxUk05MjAwIEFSTSBBUkNISVRFQ1RVUkUKIFA6ICAgICAgQW5kcmV3IFZpY3RvcgotTTogICAgICBhbmRyZXdAc2FucGVvcGxlLmNvbQorTTogICAgICBsaW51eEBtYXhpbS5vcmcuemEKIEw6ICAgICAgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQogVzogICAgICBodHRwOi8vbWF4aW0ub3JnLnphL2F0OTFfMjYuaHRtbAogUzogICAgICBNYWludGFpbmVkCkBAIC00NzEsNiArNDg2LDEyIEBACiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCiAKK0FSTS9HVU1TVElYIE1BQ0hJTkUgU1VQUE9SVAorUDoJU3RldmUgU2Frb21hbgorTToJc2Frb21hbkBnbWFpbC5jb20KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKwogQVJNL0hQIEpPUk5BREEgN1hYIE1BQ0hJTkUgU1VQUE9SVAogUDogICAgICBLcmlzdG9mZmVyIEVyaWNzb24KIE06ICAgICAga3Jpc3RvZmZlci5lcmljc29uQGdtYWlsLmNvbQpAQCAtNjQwLDggKzY2MSw4IEBACiBBU1lOQ0hST05PVVMgVFJBTlNGRVJTL1RSQU5TRk9STVMgQVBJCiBQOglEYW4gV2lsbGlhbXMKIE06CWRhbi5qLndpbGxpYW1zQGludGVsLmNvbQotUDoJU2hhbm5vbiBOZWxzb24KLU06CXNoYW5ub24ubmVsc29uQGludGVsLmNvbQorUDoJTWFjaWVqIFNvc25vd3NraQorTToJbWFjaWVqLnNvc25vd3NraUBpbnRlbC5jb20KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMveHNjYWxlaW9wCiBTOglTdXBwb3J0ZWQKQEAgLTY2Myw2ICs2ODQsMTEgQEAKIEw6CWF0aDVrLWRldmVsQGxpc3RzLmF0aDVrLm9yZwogUzoJTWFpbnRhaW5lZAogCitBVElfUkVNT1RFMiBEUklWRVIKK1A6CVZpbGxlIFN5cmphbGEKK006CXN5cmphbGFAc2NpLmZpCitTOglNYWludGFpbmVkCisKIEFUTDEgRVRIRVJORVQgRFJJVkVSCiBQOglKYXkgQ2xpYnVybgogTToJamNsaWJ1cm5AZ21haWwuY29tCkBAIC02OTcsNyArNzIzLDcgQEAKIEFUTUVMIExDREZCIERSSVZFUgogUDoJTmljb2xhcyBGZXJyZQogTToJbmljb2xhcy5mZXJyZUBhdG1lbC5jb20KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIEFUTUVMIE1BQ0IgRVRIRVJORVQgRFJJVkVSCkBAIC03NjcsMTQgKzc5MywxNCBAQAogCiBCTEFDS0ZJTiBBUkNISVRFQ1RVUkUKIFA6CUJyeWFuIFd1Ci1NOglicnlhbi53dUBhbmFsb2cuY29tCitNOgljb29sb25leUBrZXJuZWwub3JnCiBMOgl1Y2xpbnV4LWRpc3QtZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcgKHN1YnNjcmliZXJzLW9ubHkpCiBXOglodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcKIFM6CVN1cHBvcnRlZAogCiBCTEFDS0ZJTiBFTUFDIERSSVZFUgogUDoJQnJ5YW4gV3UKLU06CWJyeWFuLnd1QGFuYWxvZy5jb20KK006CWNvb2xvbmV5QGtlcm5lbC5vcmcKIEw6CXVjbGludXgtZGlzdC1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZyAoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZwogUzoJU3VwcG9ydGVkCkBAIC04MjUsMTUgKzg1MSw2IEBACiBXOglodHRwOi8vbGludXh3aXJlbGVzcy5vcmcvZW4vdXNlcnMvRHJpdmVycy9iNDMKIFM6CU1haW50YWluZWQKIAotQkNNNDNYWCBXSVJFTEVTUyBEUklWRVIgKFNPRlRNQUMgQkFTRUQgVkVSU0lPTikKLVA6CUxhcnJ5IEZpbmdlcgotTToJTGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldAotUDoJU3RlZmFubyBCcml2aW8KLU06CXN0ZWZhbm8uYnJpdmlvQHBvbGltaS5pdAotTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vYmNtNDN4eC5iZXJsaW9zLmRlLwotUzoJT2Jzb2xldGUKLQogQkVGUyBGSUxFIFNZU1RFTQogUDoJU2VyZ2V5IFMuIEtvc3R5bGlvdgogTToJcmF0aGFtYWhhdGFAcGhwNC5ydQpAQCAtODcxLDcgKzg4OCw3IEBACiBNOgltYXJjZWxAaG9sdG1hbm4ub3JnCiBQOglNYXhpbSBLcmFzbnlhbnNreQogTToJbWF4a0BxdWFsY29tbS5jb20KLUw6CWJsdWV6LWRldmVsQGxpc3RzLnNmLm5ldAorTDoJbGludXgtYmx1ZXRvb3RoQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2JsdWV6LnNmLm5ldAogVzoJaHR0cDovL3d3dy5ibHVlei5vcmcKIFc6CWh0dHA6Ly93d3cuaG9sdG1hbm4ub3JnL2xpbnV4L2JsdWV0b290aC8KQEAgLTk4Miw2ICs5OTksMTIgQEAKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogCitCUk9BRENPTSBCTlgyWCAxMCBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgorUDoJRWxpZXplciBUYW1pcgorTToJZWxpZXplcnRAYnJvYWRjb20uY29tCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKKwogQlJPQURDT00gVEczIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCiBQOglNaWNoYWVsIENoYW4KIE06CW1jaGFuQGJyb2FkY29tLmNvbQpAQCAtMTEzMiw2ICsxMTU1LDEyIEBACiBXOglodHRwOi8vYWNjZXNzcnVubmVyLnNvdXJjZWZvcmdlLm5ldC8KIFM6CU1haW50YWluZWQKIAorQ09OVFJPTCBHUk9VUFMgKENHUk9VUFMpCitQOglQYXVsIE1lbmFnZQorTToJbWVuYWdlQGdvb2dsZS5jb20KK0w6CWNvbnRhaW5lcnNAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKK1M6CU1haW50YWluZWQKKwogQ09SRVRFTVAgSEFSRFdBUkUgTU9OSVRPUklORyBEUklWRVIKIFA6CVJ1ZG9sZiBNYXJlawogTToJci5tYXJla0Bhc3NlbWJsZXIuY3oKQEAgLTEyMDIsNyArMTIzMSw3IEBACiBDWUJMQUZCIEZSQU1FQlVGRkVSIERSSVZFUgogUDoJS251dCBQZXRlcnNlbgogTToJS251dF9QZXRlcnNlbkB0LW9ubGluZS5kZQotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogQ1lDTEFERVMgMlggU1lOQyBDQVJEIERSSVZFUgpAQCAtMTMyNCw4ICsxMzUzLDcgQEAKIE06CXRlaWdsYW5kQHJlZGhhdC5jb20KIEw6CWNsdXN0ZXItZGV2ZWxAcmVkaGF0LmNvbQogVzoJaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9jbHVzdGVyLwotVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zdGV2ZS9nZnMyLTIuNi1maXhlcy5naXQKLVQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc3RldmUvZ2ZzMi0yLjYtbm13LmdpdAorVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ZWlnbGFuZC9kbG0uZ2l0CiBTOglTdXBwb3J0ZWQKIAogREFWSUNPTSBGQVNUIEVUSEVSTkVUIChETUZFKSBORVRXT1JLIERSSVZFUgpAQCAtMTMzNSw4ICsxMzYzLDggQEAKIFM6CU1haW50YWluZWQKIAogRE1BIEdFTkVSSUMgT0ZGTE9BRCBFTkdJTkUgU1VCU1lTVEVNCi1QOglTaGFubm9uIE5lbHNvbgotTToJc2hhbm5vbi5uZWxzb25AaW50ZWwuY29tCitQOglNYWNpZWogU29zbm93c2tpCitNOgltYWNpZWouc29zbm93c2tpQGludGVsLmNvbQogUDoJRGFuIFdpbGxpYW1zCiBNOglkYW4uai53aWxsaWFtc0BpbnRlbC5jb20KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKQEAgLTE1ODAsMTAgKzE2MDgsMTcgQEAKIEZSQU1FQlVGRkVSIExBWUVSCiBQOglBbnRvbmlubyBEYXBsYXMKIE06CWFkYXBsYXNAZ21haWwuY29tCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL2xpbnV4LWZiZGV2LnNvdXJjZWZvcmdlLm5ldC8KIFM6CU1haW50YWluZWQKIAorRlJFRVNDQUxFIERNQSBEUklWRVIKK1A7CVpoYW5nIFdlaQorTToJd2VpLnpoYW5nQGZyZWVzY2FsZS5jb20KK0w6CWxpbnV4cHBjLWVtYmVkZGVkQG96bGFicy5vcmcKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogRlJFRVNDQUxFIFNPQyBGU19FTkVUIERSSVZFUgogUDoJUGFudGVsaXMgQW50b25pb3UKIE06CXBhbnRlbGlzLmFudG9uaW91QGdtYWlsLmNvbQpAQCAtMTcxMyw5ICsxNzQ4LDcgQEAKIFM6CU1haW50YWluZWQKIAogSEFSRFdBUkUgUkFORE9NIE5VTUJFUiBHRU5FUkFUT1IgQ09SRQotUDoJTWljaGFlbCBCdWVzY2gKLU06CW1iQGJ1M3NjaC5kZQotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuZWQKIAogSEFSRCBEUklWRSBBQ1RJVkUgUFJPVEVDVElPTiBTWVNURU0gKEhEQVBTKSBEUklWRVIKIFA6CVJvYmVydCBMb3ZlCkBAIC0xOTI0LDcgKzE5NTcsNyBAQAogCiBJREUvQVRBUEkgQ0RST00gRFJJVkVSCiBQOglCb3Jpc2xhdiBQZXRrb3YKLU06CWJicGV0a292QHlhaG9vLmRlCitNOglwZXRrb3ZiYkBnbWFpbC5jb20KIEw6CWxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIApAQCAtMTk2NSw3ICsxOTk4LDcgQEAKIFM6CU1haW50YWluZWQKIAogSU1TIFRXSU5UVVJCTyBGUkFNRUJVRkZFUiBEUklWRVIKLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglPcnBoYW4KIAogSU5GSU5JQkFORCBTVUJTWVNURU0KQEAgLTE5OTksMTMgKzIwMzIsMTMgQEAKIElOVEVMIEZSQU1FQlVGRkVSIERSSVZFUiAoZXhjbHVkaW5nIDgxMCBhbmQgODE1KQogUDoJU3lsdmFpbiBNZXllcgogTToJc3lsdmFpbi5tZXllckB3b3JsZG9ubGluZS5mcgotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogSU5URUwgODEwLzgxNSBGUkFNRUJVRkZFUiBEUklWRVIKIFA6CUFudG9uaW5vIERhcGxhcwogTToJYWRhcGxhc0BnbWFpbC5jb20KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIElOVEVMIElBMzIgTUlDUk9DT0RFIFVQREFURSBTVVBQT1JUCkBAIC0yMDE0LDggKzIwNDcsOCBAQAogUzoJTWFpbnRhaW5lZAogCiBJTlRFTCBJL09BVCBETUEgRFJJVkVSCi1QOglTaGFubm9uIE5lbHNvbgotTToJc2hhbm5vbi5uZWxzb25AaW50ZWwuY29tCitQOglNYWNpZWogU29zbm93c2tpCitNOgltYWNpZWouc29zbm93c2tpQGludGVsLmNvbQogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiAKQEAgLTIwMzYsNDMgKzIwNjksMTkgQEAKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAotSU5URUwgUFJPLzEwMCBFVEhFUk5FVCBTVVBQT1JUCitJTlRFTCBFVEhFUk5FVCBEUklWRVJTIChlMTAwL2UxMDAwL2UxMDAwZS9pZ2IvaXhnYi9peGdiZSkKIFA6CUF1a2UgS29rCiBNOglhdWtlLWphbi5oLmtva0BpbnRlbC5jb20KIFA6CUplc3NlIEJyYW5kZWJ1cmcKIE06CWplc3NlLmJyYW5kZWJ1cmdAaW50ZWwuY29tCiBQOglKZWZmIEtpcnNoZXIKIE06CWplZmZyZXkudC5raXJzaGVyQGludGVsLmNvbQorUDoJQnJ1Y2UgQWxsYW4KK006CWJydWNlLncuYWxsYW5AaW50ZWwuY29tCiBQOglKb2huIFJvbmNpYWsKIE06CWpvaG4ucm9uY2lha0BpbnRlbC5jb20KIEw6CWUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMTAwMC8KLVM6CVN1cHBvcnRlZAotCi1JTlRFTCBQUk8vMTAwMCBHSUdBQklUIEVUSEVSTkVUIFNVUFBPUlQKLVA6CUF1a2UgS29rCi1NOglhdWtlLWphbi5oLmtva0BpbnRlbC5jb20KLVA6CUplc3NlIEJyYW5kZWJ1cmcKLU06CWplc3NlLmJyYW5kZWJ1cmdAaW50ZWwuY29tCi1QOglKZWZmIEtpcnNoZXIKLU06CWplZmZyZXkudC5raXJzaGVyQGludGVsLmNvbQotUDoJSm9obiBSb25jaWFrCi1NOglqb2huLnJvbmNpYWtAaW50ZWwuY29tCi1MOgllMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAvCi1TOglTdXBwb3J0ZWQKLQotSU5URUwgUFJPLzEwR2JFIFNVUFBPUlQKLVA6CUF5eWFwcGFuIFZlZXJhaXlhbgotTToJYXl5YXBwYW4udmVlcmFpeWFuQGludGVsLmNvbQotUDoJQXVrZSBLb2sKLU06CWF1a2UtamFuLmgua29rQGludGVsLmNvbQotUDoJSmVzc2UgQnJhbmRlYnVyZwotTToJamVzc2UuYnJhbmRlYnVyZ0BpbnRlbC5jb20KLVA6CUpvaG4gUm9uY2lhawotTToJam9obi5yb25jaWFrQGludGVsLmNvbQotTDoJZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1XOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwLworVzoJaHR0cDovL2UxMDAwLnNvdXJjZWZvcmdlLm5ldC8KIFM6CVN1cHBvcnRlZAogCiBJTlRFTCBQUk8vV0lSRUxFU1MgMjEwMCBORVRXT1JLIENPTk5FQ1RJT04gU1VQUE9SVApAQCAtMjEwOSw3ICsyMTE4LDcgQEAKIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogTDoJaXB3Mzk0NS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9pbnRlbGxpbnV4d2lyZWxlc3Mub3JnCi1UOglnaXQgZ2l0Oi8vaW50ZWxsaW51eHdpcmVsZXNzLm9yZy9yZXBvcy9pd2x3aWZpCitUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2l3bHdpZmkvaXdsd2lmaS0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIAogSU9DMyBFVEhFUk5FVCBEUklWRVIKQEAgLTIxNDAsNyArMjE0OSw3IEBACiBTOglNYWludGFpbmVkCiAKIElQQVRIIERSSVZFUjoKLVA6CUFydGh1ciBKb25lcworUDoJUmFscGggQ2FtcGJlbGwKIE06CWluZmluaXBhdGhAcWxvZ2ljLmNvbQogTDoJZ2VuZXJhbEBsaXN0cy5vcGVuZmFicmljcy5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQucWxvZ2ljLmNvbS9pcGF0aC1saW51eC0yLjYKQEAgLTIxOTAsNyArMjE5OSw3IEBACiBJU0ROIFNVQlNZU1RFTQogUDoJS2Fyc3RlbiBLZWlsCiBNOglra2VpbEBzdXNlLmRlCi1MOglpc2RuNGxpbnV4QGxpc3RzZXJ2LmlzZG40bGludXguZGUKK0w6CWlzZG40bGludXhAbGlzdHNlcnYuaXNkbjRsaW51eC5kZSAoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly93d3cuaXNkbjRsaW51eC5kZQogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2trZWlsL2lzZG4tMi42LmdpdAogUzoJTWFpbnRhaW5lZApAQCAtMjE5OCw3ICsyMjA3LDcgQEAKIElTRE4gU1VCU1lTVEVNIChFaWNvbiBhY3RpdmUgY2FyZCBkcml2ZXIpCiBQOglBcm1pbiBTY2hpbmRsZXIKIE06CW1hY0BtZWx3YXJlLmRlCi1MOglpc2RuNGxpbnV4QGxpc3RzZXJ2LmlzZG40bGludXguZGUKK0w6CWlzZG40bGludXhAbGlzdHNlcnYuaXNkbjRsaW51eC5kZSAoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly93d3cubWVsd2FyZS5kZQogUzoJTWFpbnRhaW5lZAogCkBAIC0yMzEyLDE1ICsyMzIxLDIxIEBACiBMOglrZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCiBTOglNYWludGFpbmVkCiAKK0tHREIKK1A6CUphc29uIFdlc3NlbAorTToJamFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20KK0w6CWtnZGItYnVncmVwb3J0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUzoJTWFpbnRhaW5lZAorCiBLUFJPQkVTCi1QOglQcmFzYW5uYSBTIFBhbmNoYW11a2hpCi1NOglwcmFzYW5uYUBpbi5pYm0uY29tCiBQOglBbmFudGggTiBNYXZpbmFrYXlhbmFoYWxsaQogTToJYW5hbnRoQGluLmlibS5jb20KIFA6CUFuaWwgUyBLZXNoYXZhbXVydGh5CiBNOglhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20KIFA6CURhdmlkIFMuIE1pbGxlcgogTToJZGF2ZW1AZGF2ZW1sb2Z0Lm5ldAorUDoJTWFzYW1pIEhpcmFtYXRzdQorTToJbWhpcmFtYXRAcmVkaGF0LmNvbQogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCkBAIC0yNjAxLDcgKzI2MTYsNyBAQAogTUFUUk9YIEZSQU1FQlVGRkVSIERSSVZFUgogUDoJUGV0ciBWYW5kcm92ZWMKIE06CXZhbmRyb3ZlQHZjLmN2dXQuY3oKLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIE1BWDY2NTAgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCkBAIC0yNjIzLDYgKzI2MzgsMTcgQEAKIFc6CWh0dHA6Ly93d3cubGludXgtbW0ub3JnCiBTOglNYWludGFpbmVkCiAKK01FTU9SWSBSRVNPVVJDRSBDT05UUk9MTEVSCitQOglCYWxiaXIgU2luZ2gKK006CWJhbGJpckBsaW51eC52bmV0LmlibS5jb20KK1A6CVBhdmVsIEVtZWx5YW5vdgorTToJeGVtdWxAb3BlbnZ6Lm9yZworUDoJS0FNRVpBV0EgSGlyb3l1a2kKK006CWthbWV6YXdhLmhpcm95dUBqcC5mdWppdHN1LmNvbQorTDoJbGludXgtbW1Aa3ZhY2sub3JnCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCisKIE1FSSBNTjEwMzAwL0FNMzMgUE9SVAogUDoJRGF2aWQgSG93ZWxscwogTToJZGhvd2VsbHNAcmVkaGF0LmNvbQpAQCAtMjc0Nyw2ICsyNzczLDggQEAKIE5FVEVGRkVDVCBJV0FSUCBSTklDIERSSVZFUiAoSVdfTkVTKQogUDoJRmFpc2FsIExhdGlmCiBNOglmbGF0aWZAbmV0ZWZmZWN0LmNvbQorUDoJTmlzaGkgR3VwdGEKK006CW5ndXB0YUBuZXRlZmZlY3QuY29tCiBQOglHbGVubiBTdHJlaWZmCiBNOglnc3RyZWlmZkBuZXRlZmZlY3QuY29tCiBMOglnZW5lcmFsQGxpc3RzLm9wZW5mYWJyaWNzLm9yZwpAQCAtMjkxMCw3ICsyOTM4LDcgQEAKIE5WSURJQSAocml2YWZiIGFuZCBudmlkaWFmYikgRlJBTUVCVUZGRVIgRFJJVkVSCiBQOglBbnRvbmlubyBEYXBsYXMKIE06CWFkYXBsYXNAZ21haWwuY29tCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBPUEVOQ09SRVMgSTJDIEJVUyBEUklWRVIKQEAgLTI5MjEsMTEgKzI5NDksMTIgQEAKIAogT1JBQ0xFIENMVVNURVIgRklMRVNZU1RFTSAyIChPQ0ZTMikKIFA6CU1hcmsgRmFzaGVoCi1NOgltYXJrLmZhc2hlaEBvcmFjbGUuY29tCi1QOglLdXJ0IEhhY2tlbAotTToJa3VydC5oYWNrZWxAb3JhY2xlLmNvbQotTDoJb2NmczItZGV2ZWxAb3NzLm9yYWNsZS5jb20KK006CW1mYXNoZWhAc3VzZS5jb20KK1A6CUpvZWwgQmVja2VyCitNOglqb2VsLmJlY2tlckBvcmFjbGUuY29tCitMOglvY2ZzMi1kZXZlbEBvc3Mub3JhY2xlLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vb3NzLm9yYWNsZS5jb20vcHJvamVjdHMvb2NmczIvCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21mYXNoZWgvb2NmczIuZ2l0CiBTOglTdXBwb3J0ZWQKIAogT01OSUtFWSBDQVJETUFOIDQwMDAgRFJJVkVSCkBAIC0zMDQxLDExICszMDcwLDEwIEBACiBTOglTdXBwb3J0ZWQKIAogUENJIFNVQlNZU1RFTQotUDoJR3JlZyBLcm9haC1IYXJ0bWFuCi1NOglncmVna2hAc3VzZS5kZQorUDoJSmVzc2UgQmFybmVzCitNOglqYmFybmVzQHZpcnR1b3VzZ2Vlay5vcmcKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LXBjaUBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3oKLVQ6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZ3JlZ2toL2dyZWdraC0yLjYvCiBTOglTdXBwb3J0ZWQKIAogUENJIEhPVFBMVUcgQ09SRQpAQCAtMzIzOSwxMyArMzI2NywxMyBAQAogUkFERU9OIEZSQU1FQlVGRkVSIERJU1BMQVkgRFJJVkVSCiBQOglCZW5qYW1pbiBIZXJyZW5zY2htaWR0CiBNOgliZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcKLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIFJBR0UxMjggRlJBTUVCVUZGRVIgRElTUExBWSBEUklWRVIKIFA6CVBhdWwgTWFja2VycmFzCiBNOglwYXVsdXNAc2FtYmEub3JnCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBSQVlMSU5LL1dFQkdFQVIgODAyLjExIFdJUkVMRVNTIExBTiBEUklWRVIKQEAgLTMyNjAsNiArMzI4OCw3IEBACiBMOglydDI0MDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20vCiBTOglNYWludGFpbmVkCitUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2l2ZC9ydDJ4MDAuZ2l0CiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvCiAKIFJBTURJU0sgUkFNIEJMT0NLIERFVklDRSBEUklWRVIKQEAgLTMzMjIsNiArMzM1MSwxMyBAQAogVzoJaHR0cDovL3d3dy5uYW1lc3lzLmNvbQogUzoJU3VwcG9ydGVkCiAKK1JGS0lMTAorUDoJSXZvIHZhbiBEb29ybgorTToJSXZEb29ybkBnbWFpbC5jb20KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CW5ldC9yZmtpbGwKKwogUk9DS0VUUE9SVCBEUklWRVIKIFA6CUNvbXRyb2wgQ29ycC4KIFc6CWh0dHA6Ly93d3cuY29tdHJvbC5jb20KQEAgLTMzNTAsNyArMzM4Niw3IEBACiBTMyBTQVZBR0UgRlJBTUVCVUZGRVIgRFJJVkVSCiBQOglBbnRvbmlubyBEYXBsYXMKIE06CWFkYXBsYXNAZ21haWwuY29tCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCiBTMzkwCkBAIC0zNDQ0LDcgKzM0ODAsNyBAQAogTToJdmxhZGlzbGF2Lnlhc2V2aWNoQGhwLmNvbQogUDoJU3JpZGhhciBTYW11ZHJhbGEKIE06CXNyaUB1cy5pYm0uY29tCi1MOglsa3NjdHAtZGV2ZWxvcGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CWxpbnV4LXNjdHBAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGtzY3RwLnNvdXJjZWZvcmdlLm5ldAogUzoJU3VwcG9ydGVkCiAKQEAgLTM1NzgsMTEgKzM2MTQsMTAgQEAKIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKIFM6CU1haW50YWluZWQKIAotU09GVE1BQyBMQVlFUiAoSUVFRSA4MDIuMTEpCi1QOglEYW5pZWwgRHJha2UKLU06CWRzZEBnZW50b28ub3JnCi1MOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLVM6CU9ic29sZXRlCitTTVggVUlPIEludGVyZmFjZQorUDoJQmVuIE5pemV0dGUKK006CWJuQG5pYXNkaWdpdGFsLmNvbQorUzoJTWFpbnRhaW5lZAogCiBTT0ZUV0FSRSBSQUlEIChNdWx0aXBsZSBEaXNrcykgU1VQUE9SVAogUDoJSW5nbyBNb2xuYXIKQEAgLTM4ODcsMTAgKzM5MjIsMTMgQEAKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAotVFVMSVAgTkVUV09SSyBEUklWRVIKLUw6CXR1bGlwLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90dWxpcC8KLVM6CU9ycGhhbgorVFVMSVAgTkVUV09SSyBEUklWRVJTCitQOglHcmFudCBHcnVuZGxlcgorTToJZ3J1bmRsZXJAcGFyaXNjLWxpbnV4Lm9yZworUDoJS3lsZSBNY01hcnRpbgorTToJa3lsZUBwYXJpc2MtbGludXgub3JnCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCiAKIFRVTi9UQVAgZHJpdmVyCiBQOglNYXhpbSBLcmFzbnlhbnNreQpAQCAtNDI2Miw3ICs0MzAwLDcgQEAKIAogVlQ4MjMxIEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCiBQOglSb2dlciBMdWNhcwotTToJcm9nZXJAcGxhbmJpdC5jby51aworTToJdnQ4MjMxQGhpZGRlbmVuZ2luZS5jby51awogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDY3Y2M0NTcuLjNkYmM4MjYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDI1Ci1FWFRSQVZFUlNJT04gPSAtcmMyCitFWFRSQVZFUlNJT04gPQogTkFNRSA9IEZ1bmt5IFdlYXNlbCBpcyBKaWdneSB3aXQgaXQKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTE4OSw3ICsxODksNyBAQAogIyBBbHRlcm5hdGl2ZWx5IENST1NTX0NPTVBJTEUgY2FuIGJlIHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCiAjIERlZmF1bHQgdmFsdWUgZm9yIENST1NTX0NPTVBJTEUgaXMgbm90IHRvIHByZWZpeCBleGVjdXRhYmxlcwogIyBOb3RlOiBTb21lIGFyY2hpdGVjdHVyZXMgYXNzaWduIENST1NTX0NPTVBJTEUgaW4gdGhlaXIgYXJjaC8qL01ha2VmaWxlCi0KK2V4cG9ydCBLQlVJTERfQlVJTERIT1NUIDo9ICQoU1VCQVJDSCkKIEFSQ0gJCT89ICQoU1VCQVJDSCkKIENST1NTX0NPTVBJTEUJPz0KIApAQCAtNTA3LDYgKzUwNywxMCBAQAogS0JVSUxEX0NGTEFHUwkrPSAtTzIKIGVuZGlmCiAKKyMgRm9yY2UgZ2NjIHRvIGJlaGF2ZSBjb3JyZWN0IGV2ZW4gZm9yIGJ1Z2d5IGRpc3RyaWJ1dGlvbnMKKyMgQXJjaCBNYWtlZmlsZXMgbWF5IG92ZXJyaWRlIHRoaXMgc2V0dGluZworS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKKwogaW5jbHVkZSAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9NYWtlZmlsZQogCiBpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgpAQCAtNTI1LDkgKzUyOSw2IEBACiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sIC1mbm8taW5saW5lLWZ1bmN0aW9ucy1jYWxsZWQtb25jZSkKIGVuZGlmCiAKLSMgRm9yY2UgZ2NjIHRvIGJlaGF2ZSBjb3JyZWN0IGV2ZW4gZm9yIGJ1Z2d5IGRpc3RyaWJ1dGlvbnMKLUtCVUlMRF9DRkxBR1MgICAgICAgICArPSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKLQogIyBhcmNoIE1ha2VmaWxlIG1heSBvdmVycmlkZSBDQyBzbyBrZWVwIHRoaXMgYWZ0ZXIgYXJjaCBNYWtlZmlsZSBpcyBpbmNsdWRlZAogTk9TVERJTkNfRkxBR1MgKz0gLW5vc3RkaW5jIC1pc3lzdGVtICQoc2hlbGwgJChDQykgLXByaW50LWZpbGUtbmFtZT1pbmNsdWRlKQogQ0hFQ0tGTEFHUyAgICAgKz0gJChOT1NURElOQ19GTEFHUykKQEAgLTgxMCw3ICs4MTEsOSBAQAogCSQoUSlybSAtZiAub2xkX3ZlcnNpb24KIAogIyBidWlsZCB2bWxpbnV4Lm8gZmlyc3QgdG8gY2F0Y2ggc2VjdGlvbiBtaXNtYXRjaCBlcnJvcnMgZWFybHkKLSQoa2FsbHN5bXMubyk6IHZtbGludXgubworaWZkZWYgQ09ORklHX0tBTExTWU1TCisudG1wX3ZtbGludXgxOiB2bWxpbnV4Lm8KK2VuZGlmCiB2bWxpbnV4Lm86ICQodm1saW51eC1sZHMpICQodm1saW51eC1pbml0KSAkKHZtbGludXgtbWFpbikgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZF9ydWxlLHZtbGludXgtbW9kcG9zdCkKIApAQCAtMTUzNSw3ICsxNTM4LDcgQEAKIHF1aWV0X2NtZF9ybWZpbGVzID0gJChpZiAkKHdpbGRjYXJkICQocm0tZmlsZXMpKSxDTEVBTiAgICQod2lsZGNhcmQgJChybS1maWxlcykpKQogICAgICAgY21kX3JtZmlsZXMgPSBybSAtZiAkKHJtLWZpbGVzKQogCi0jIFJ1biBkZXBtb2Qgb25seSBpcyB3ZSBoYXZlIFN5c3RlbS5tYXAgYW5kIGRlcG1vZCBpcyBleGVjdXRhYmxlCisjIFJ1biBkZXBtb2Qgb25seSBpZiB3ZSBoYXZlIFN5c3RlbS5tYXAgYW5kIGRlcG1vZCBpcyBleGVjdXRhYmxlCiAjIGFuZCB3ZSBidWlsZCBmb3IgdGhlIGhvc3QgYXJjaAogcXVpZXRfY21kX2RlcG1vZCA9IERFUE1PRCAgJChLRVJORUxSRUxFQVNFKQogICAgICAgY21kX2RlcG1vZCA9IFwKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCAzZDcyZGMzLi42OTRjOWFmIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0yNyw1ICsyNywxMiBAQAogCSAgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcsIG5vbi1pbnRydXNpdmUgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLgogCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCiAKK2NvbmZpZyBLUkVUUFJPQkVTCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gS1BST0JFUyAmJiBIQVZFX0tSRVRQUk9CRVMKKwogY29uZmlnIEhBVkVfS1BST0JFUwogCWRlZl9ib29sIG4KKworY29uZmlnIEhBVkVfS1JFVFBST0JFUworCWRlZl9ib29sIG4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCAwMDI3MDNiLi43MjljZGJkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC0zMzAsNiArMzMwLDkgQEAKIGNvbmZpZyBQQ0lfU1lTQ0FMTAogCWRlZl9ib29sIFBDSQogCitjb25maWcgSU9NTVVfSEVMUEVSCisJZGVmX2Jvb2wgUENJCisKIGNvbmZpZyBBTFBIQV9DT1JFX0FHUAogCWJvb2wKIAlkZXBlbmRzIG9uIEFMUEhBX0dFTkVSSUMgfHwgQUxQSEFfVElUQU4gfHwgQUxQSEFfTUFSVkVMCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlCmluZGV4IGRjY2YwNTIuLmFjNzA2YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogRVhUUkFfQ0ZMQUdTCTo9IC1XZXJyb3IgLVduby1zaWduLWNvbXBhcmUKIAogb2JqLXkgICAgOj0gZW50cnkubyB0cmFwcy5vIHByb2Nlc3MubyBpbml0X3Rhc2subyBvc2Zfc3lzLm8gaXJxLm8gXAotCSAgICBpcnFfYWxwaGEubyBzaWduYWwubyBzZXR1cC5vIHB0cmFjZS5vIHRpbWUubyBzZW1hcGhvcmUubyBcCisJICAgIGlycV9hbHBoYS5vIHNpZ25hbC5vIHNldHVwLm8gcHRyYWNlLm8gdGltZS5vIFwKIAkgICAgYWxwaGFfa3N5bXMubyBzeXN0YmxzLm8gZXJyX2NvbW1vbi5vIGlvLm8KIAogb2JqLSQoQ09ORklHX1ZHQV9IT1NFKQkrPSBjb25zb2xlLm8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9hbHBoYV9rc3ltcy5jCmluZGV4IGU5NzYyYTMuLmQ5NmU3NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYwpAQCAtNzcsMTUgKzc3LDYgQEAKIEVYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fc3Rybmxlbl91c2VyKTsKIAotLyogU2VtYXBob3JlIGhlbHBlciBmdW5jdGlvbnMuICAqLwotRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKLUVYUE9SVF9TWU1CT0woX191cF93YWtldXApOwotRVhQT1JUX1NZTUJPTChkb3duKTsKLUVYUE9SVF9TWU1CT0woZG93bl9pbnRlcnJ1cHRpYmxlKTsKLUVYUE9SVF9TWU1CT0woZG93bl90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0wodXApOwotCiAvKiAKICAqIFNNUC1zcGVjaWZpYyBzeW1ib2xzLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jCmluZGV4IDlkYzFjZWUuLmMxMDdjYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jCkBAIC0zNzIsMjggKzM3Miw3IEBACiBpbnQKIHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKIHsKLQl1MTYgY21kLCBvbGRjbWQ7Ci0JaW50IGk7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQlvbGRjbWQgPSBjbWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZkZXYtPnJlc291cmNlW2ldOwotCi0JCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKLQkJZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQl9Ci0KLQlpZiAoY21kICE9IG9sZGNtZCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBFbmFibGluZyBkZXZpY2U6ICglcyksIGNtZCAleFxuIiwKLQkJICAgICAgIHBjaV9uYW1lKGRldiksIGNtZCk7Ci0JCS8qIEVuYWJsZSB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiB0aGUgUENJIGNvbW1hbmQgcmVnaXN0ZXIuICAqLwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBjaV9lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzayk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jCmluZGV4IDI2ZDM3ODkuLmRkNmUzMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb21tdS1oZWxwZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9od3JwYi5oPgpAQCAtMzEsNyArMzIsNiBAQAogI2VuZGlmCiAKICNkZWZpbmUgREVCVUdfTk9ESVJFQ1QgMAotI2RlZmluZSBERUJVR19GT1JDRURBQyAwCiAKICNkZWZpbmUgSVNBX0RNQV9NQVNLCQkweDAwZmZmZmZmCiAKQEAgLTEyOCwzNyArMTI4LDU1IEBACiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGFyZW5hIGxvY2sgaGVsZCAqLwogc3RhdGljIGxvbmcKLWlvbW11X2FyZW5hX2ZpbmRfcGFnZXMoc3RydWN0IHBjaV9pb21tdV9hcmVuYSAqYXJlbmEsIGxvbmcgbiwgbG9uZyBtYXNrKQoraW9tbXVfYXJlbmFfZmluZF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfaW9tbXVfYXJlbmEgKmFyZW5hLAorCQkgICAgICAgbG9uZyBuLCBsb25nIG1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyAqcHRlczsKIAlsb25nIGksIHAsIG5lbnQ7CisJaW50IHBhc3MgPSAwOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwl1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3NpemU7CisKKwliYXNlID0gYXJlbmEtPmRtYV9iYXNlID4+IFBBR0VfU0hJRlQ7CisJaWYgKGRldikgeworCQlib3VuZGFyeV9zaXplID0gZG1hX2dldF9zZWdfYm91bmRhcnkoZGV2KSArIDE7CisJCWJvdW5kYXJ5X3NpemUgPj49IFBBR0VfU0hJRlQ7CisJfSBlbHNlIHsKKwkJYm91bmRhcnlfc2l6ZSA9IDFVTCA8PCAoMzIgLSBQQUdFX1NISUZUKTsKKwl9CiAKIAkvKiBTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIGZpcnN0IG1hc2stYWxpZ25lZCBzZXF1ZW5jZSBvZiBOIGZyZWUgcHRlcyAqLwogCXB0ZXMgPSBhcmVuYS0+cHRlczsKIAluZW50ID0gYXJlbmEtPnNpemUgPj4gUEFHRV9TSElGVDsKLQlwID0gKGFyZW5hLT5uZXh0X2VudHJ5ICsgbWFzaykgJiB+bWFzazsKKwlwID0gQUxJR04oYXJlbmEtPm5leHRfZW50cnksIG1hc2sgKyAxKTsKIAlpID0gMDsKKworYWdhaW46CiAJd2hpbGUgKGkgPCBuICYmIHAraSA8IG5lbnQpIHsKKwkJaWYgKCFpICYmIGlvbW11X2lzX3NwYW5fYm91bmRhcnkocCwgbiwgYmFzZSwgYm91bmRhcnlfc2l6ZSkpIHsKKwkJCXAgPSBBTElHTihwICsgMSwgbWFzayArIDEpOworCQkJZ290byBhZ2FpbjsKKwkJfQorCiAJCWlmIChwdGVzW3AraV0pCi0JCQlwID0gKHAgKyBpICsgMSArIG1hc2spICYgfm1hc2ssIGkgPSAwOworCQkJcCA9IEFMSUdOKHAgKyBpICsgMSwgbWFzayArIDEpLCBpID0gMDsKIAkJZWxzZQogCQkJaSA9IGkgKyAxOwogCX0KIAogCWlmIChpIDwgbikgewotICAgICAgICAgICAgICAgIC8qIFJlYWNoZWQgdGhlIGVuZC4gIEZsdXNoIHRoZSBUTEIgYW5kIHJlc3RhcnQgdGhlCi0gICAgICAgICAgICAgICAgICAgc2VhcmNoIGZyb20gdGhlIGJlZ2lubmluZy4gICovCi0JCWFscGhhX212Lm12X3BjaV90YmkoYXJlbmEtPmhvc2UsIDAsIC0xKTsKKwkJaWYgKHBhc3MgPCAxKSB7CisJCQkvKgorCQkJICogUmVhY2hlZCB0aGUgZW5kLiAgRmx1c2ggdGhlIFRMQiBhbmQgcmVzdGFydAorCQkJICogdGhlIHNlYXJjaCBmcm9tIHRoZSBiZWdpbm5pbmcuCisJCQkqLworCQkJYWxwaGFfbXYubXZfcGNpX3RiaShhcmVuYS0+aG9zZSwgMCwgLTEpOwogCi0JCXAgPSAwLCBpID0gMDsKLQkJd2hpbGUgKGkgPCBuICYmIHAraSA8IG5lbnQpIHsKLQkJCWlmIChwdGVzW3AraV0pCi0JCQkJcCA9IChwICsgaSArIDEgKyBtYXNrKSAmIH5tYXNrLCBpID0gMDsKLQkJCWVsc2UKLQkJCQlpID0gaSArIDE7Ci0JCX0KLQotCQlpZiAoaSA8IG4pCisJCQlwYXNzKys7CisJCQlwID0gMDsKKwkJCWkgPSAwOworCQkJZ290byBhZ2FpbjsKKwkJfSBlbHNlCiAJCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNjgsNyArMTg2LDggQEAKIH0KIAogc3RhdGljIGxvbmcKLWlvbW11X2FyZW5hX2FsbG9jKHN0cnVjdCBwY2lfaW9tbXVfYXJlbmEgKmFyZW5hLCBsb25nIG4sIHVuc2lnbmVkIGludCBhbGlnbikKK2lvbW11X2FyZW5hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjaV9pb21tdV9hcmVuYSAqYXJlbmEsIGxvbmcgbiwKKwkJICB1bnNpZ25lZCBpbnQgYWxpZ24pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nICpwdGVzOwpAQCAtMTc5LDcgKzE5OCw3IEBACiAJLyogU2VhcmNoIGZvciBOIGVtcHR5IHB0ZXMgKi8KIAlwdGVzID0gYXJlbmEtPnB0ZXM7CiAJbWFzayA9IG1heChhbGlnbiwgYXJlbmEtPmFsaWduX2VudHJ5KSAtIDE7Ci0JcCA9IGlvbW11X2FyZW5hX2ZpbmRfcGFnZXMoYXJlbmEsIG4sIG1hc2spOworCXAgPSBpb21tdV9hcmVuYV9maW5kX3BhZ2VzKGRldiwgYXJlbmEsIG4sIG1hc2spOwogCWlmIChwIDwgMCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcmVuYS0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CkBAIC0yMjksNiArMjQ4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHBhZGRyOwogCWRtYV9hZGRyX3QgcmV0OwogCXVuc2lnbmVkIGludCBhbGlnbiA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGRldiA/ICZwZGV2LT5kZXYgOiBOVUxMOwogCiAJcGFkZHIgPSBfX3BhKGNwdV9hZGRyKTsKIApAQCAtMjc2LDcgKzI5Niw3IEBACiAJLyogRm9yY2UgYWxsb2NhdGlvbiB0byA2NEtCIGJvdW5kYXJ5IGZvciBJU0EgYnJpZGdlcy4gKi8KIAlpZiAocGRldiAmJiBwZGV2ID09IGlzYV9icmlkZ2UpCiAJCWFsaWduID0gODsKLQlkbWFfb2ZzID0gaW9tbXVfYXJlbmFfYWxsb2MoYXJlbmEsIG5wYWdlcywgYWxpZ24pOworCWRtYV9vZnMgPSBpb21tdV9hcmVuYV9hbGxvYyhkZXYsIGFyZW5hLCBucGFnZXMsIGFsaWduKTsKIAlpZiAoZG1hX29mcyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNpX21hcF9zaW5nbGUgZmFpbGVkOiAiCiAJCSAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIGRtYSBwYWdlIHRhYmxlc1xuIik7CkBAIC00MDQsMTEgKzQyNCwxMyBAQAogICAgZWxzZSBETUFfQUREUlAgaXMgdW5kZWZpbmVkLiAgKi8KIAogdm9pZCAqCi1wY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9hZGRycCkKK19fcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLAorCQkgICAgICAgZG1hX2FkZHJfdCAqZG1hX2FkZHJwLCBnZnBfdCBnZnApCiB7CiAJdm9pZCAqY3B1X2FkZHI7CiAJbG9uZyBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKLQlnZnBfdCBnZnAgPSBHRlBfQVRPTUlDOworCisJZ2ZwICY9IH5HRlBfRE1BOwogCiB0cnlfYWdhaW46CiAJY3B1X2FkZHIgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwLCBvcmRlcik7CkBAIC00MzgsNyArNDYwLDcgQEAKIAogCXJldHVybiBjcHVfYWRkcjsKIH0KLUVYUE9SVF9TWU1CT0wocGNpX2FsbG9jX2NvbnNpc3RlbnQpOworRVhQT1JUX1NZTUJPTChfX3BjaV9hbGxvY19jb25zaXN0ZW50KTsKIAogLyogRnJlZSBhbmQgdW5tYXAgYSBjb25zaXN0ZW50IERNQSBidWZmZXIuICBDUFVfQUREUiBhbmQgRE1BX0FERFIgbXVzdAogICAgYmUgdmFsdWVzIHRoYXQgd2VyZSByZXR1cm5lZCBmcm9tIHBjaV9hbGxvY19jb25zaXN0ZW50LiAgU0laRSBtdXN0CkBAIC01NjMsNyArNTg1LDcgQEAKIAogCXBhZGRyICY9IH5QQUdFX01BU0s7CiAJbnBhZ2VzID0gY2FsY19ucGFnZXMocGFkZHIgKyBzaXplKTsKLQlkbWFfb2ZzID0gaW9tbXVfYXJlbmFfYWxsb2MoYXJlbmEsIG5wYWdlcywgMCk7CisJZG1hX29mcyA9IGlvbW11X2FyZW5hX2FsbG9jKGRldiwgYXJlbmEsIG5wYWdlcywgMCk7CiAJaWYgKGRtYV9vZnMgPCAwKSB7CiAJCS8qIElmIHdlIGF0dGVtcHRlZCBhIGRpcmVjdCBtYXAgYWJvdmUgYnV0IGZhaWxlZCwgZGllLiAgKi8KIAkJaWYgKGxlYWRlci0+ZG1hX2FkZHJlc3MgPT0gMCkKQEAgLTgzMCw3ICs4NTIsNyBAQAogCiAJLyogU2VhcmNoIGZvciBOIGVtcHR5IHB0ZXMuICAqLwogCXB0ZXMgPSBhcmVuYS0+cHRlczsKLQlwID0gaW9tbXVfYXJlbmFfZmluZF9wYWdlcyhhcmVuYSwgcGdfY291bnQsIGFsaWduX21hc2spOworCXAgPSBpb21tdV9hcmVuYV9maW5kX3BhZ2VzKE5VTEwsIGFyZW5hLCBwZ19jb3VudCwgYWxpZ25fbWFzayk7CiAJaWYgKHAgPCAwKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyZW5hLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2VtYXBob3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMjk4MmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoKLSAqIEFscGhhIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMTk5OSwgMjAwMCBSaWNoYXJkIEhlbmRlcnNvbgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0vKgotICogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIFBQQyBzZW1hcGhvcmUgc2NoZW1lIHBvcnRlZCB0byB1c2UKLSAqIHRoZSBBbHBoYSBsbC9zYyBzZXF1ZW5jZXMsIHNvIHNlZSB0aGUgUFBDIGNvZGUgZm9yCi0gKiBjcmVkaXRzLgotICovCi0KLS8qCi0gKiBBdG9taWNhbGx5IHVwZGF0ZSBzZW0tPmNvdW50LgotICogVGhpcyBkb2VzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBmb2xsb3dpbmc6Ci0gKgotICoJb2xkX2NvdW50ID0gc2VtLT5jb3VudDsKLSAqCXRtcCA9IE1BWChvbGRfY291bnQsIDApICsgaW5jcjsKLSAqCXNlbS0+Y291bnQgPSB0bXA7Ci0gKglyZXR1cm4gb2xkX2NvdW50OwotICovCi1zdGF0aWMgaW5saW5lIGludCBfX3NlbV91cGRhdGVfY291bnQoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgaW5jcikKLXsKLQlsb25nIG9sZF9jb3VudCwgdG1wID0gMDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIxOglsZGxfbAklMCwlMlxuIgotCSIJY21vdmd0CSUwLCUwLCUxXG4iCi0JIglhZGRsCSUxLCUzLCUxXG4iCi0JIglzdGxfYwklMSwlMlxuIgotCSIJYmVxCSUxLDJmXG4iCi0JIgltYlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjI6CWJyCTFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiIChvbGRfY291bnQpLCAiPSZyIiAodG1wKSwgIj1tIiAoc2VtLT5jb3VudCkKLQk6ICJJciIgKGluY3IpLCAiMSIgKHRtcCksICJtIiAoc2VtLT5jb3VudCkpOwotCi0JcmV0dXJuIG9sZF9jb3VudDsKLX0KLQotLyoKLSAqIFBlcmZvcm0gdGhlICJkb3duIiBmdW5jdGlvbi4gIFJldHVybiB6ZXJvIGZvciBzZW1hcGhvcmUgYWNxdWlyZWQsCi0gKiByZXR1cm4gbmVnYXRpdmUgZm9yIHNpZ25hbGxlZCBvdXQgb2YgdGhlIGZ1bmN0aW9uLgotICoKLSAqIElmIGNhbGxlZCBmcm9tIGRvd24sIHRoZSByZXR1cm4gaXMgaWdub3JlZCBhbmQgdGhlIHdhaXQgbG9vcCBpcwotICogbm90IGludGVycnVwdGlibGUuICBUaGlzIG1lYW5zIHRoYXQgYSB0YXNrIHdhaXRpbmcgb24gYSBzZW1hcGhvcmUKLSAqIHVzaW5nICJkb3duKCkiIGNhbm5vdCBiZSBraWxsZWQgdW50aWwgc29tZW9uZSBkb2VzIGFuICJ1cCgpIiBvbgotICogdGhlIHNlbWFwaG9yZS4KLSAqCi0gKiBJZiBjYWxsZWQgZnJvbSBkb3duX2ludGVycnVwdGlibGUsIHRoZSByZXR1cm4gdmFsdWUgZ2V0cyBjaGVja2VkCi0gKiB1cG9uIHJldHVybi4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbmVnYXRpdmUgdGhlbiB0aGUgdGFzayBjb250aW51ZXMKLSAqIHdpdGggdGhlIG5lZ2F0aXZlIHZhbHVlIGluIHRoZSByZXR1cm4gcmVnaXN0ZXIgKGl0IGNhbiBiZSB0ZXN0ZWQgYnkKLSAqIHRoZSBjYWxsZXIpLgotICoKLSAqIEVpdGhlciBmb3JtIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggInVwKCkiLgotICovCi0KLXZvaWQgX19zY2hlZAotX19kb3duX2ZhaWxlZChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCi0JcHJpbnRrKCIlcyglZCk6IGRvd24gZmFpbGVkKCVwKVxuIiwKLQkgICAgICAgdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCBzZW0pOwotI2VuZGlmCi0KLQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0Jd21iKCk7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCS8qCi0JICogVHJ5IHRvIGdldCB0aGUgc2VtYXBob3JlLiAgSWYgdGhlIGNvdW50IGlzID4gMCwgdGhlbiB3ZSd2ZQotCSAqIGdvdCB0aGUgc2VtYXBob3JlOyB3ZSBkZWNyZW1lbnQgY291bnQgYW5kIGV4aXQgdGhlIGxvb3AuCi0JICogSWYgdGhlIGNvdW50IGlzIDAgb3IgbmVnYXRpdmUsIHdlIHNldCBpdCB0byAtMSwgaW5kaWNhdGluZwotCSAqIHRoYXQgd2UgYXJlIGFzbGVlcCwgYW5kIHRoZW4gc2xlZXAuCi0JICovCi0Jd2hpbGUgKF9fc2VtX3VwZGF0ZV9jb3VudChzZW0sIC0xKSA8PSAwKSB7Ci0JCXNjaGVkdWxlKCk7Ci0JCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCX0KLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGFueSBtb3JlIHNsZWVwZXJzLCB3YWtlIG9uZSBvZiB0aGVtIHVwIHNvCi0JICogdGhhdCBpdCBjYW4gZWl0aGVyIGdldCB0aGUgc2VtYXBob3JlLCBvciBzZXQgY291bnQgdG8gLTEKLQkgKiBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHByb2Nlc3NlcyBzbGVlcGluZy4KLQkgKi8KLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQotCXByaW50aygiJXMoJWQpOiBkb3duIGFjcXVpcmVkKCVwKVxuIiwKLQkgICAgICAgdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCBzZW0pOwotI2VuZGlmCi19Ci0KLWludCBfX3NjaGVkCi1fX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCWxvbmcgcmV0ID0gMDsKLQotI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKLQlwcmludGsoIiVzKCVkKTogZG93biBmYWlsZWQoJXApXG4iLAotCSAgICAgICB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHNlbSk7Ci0jZW5kaWYKLQotCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0Jd21iKCk7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCXdoaWxlIChfX3NlbV91cGRhdGVfY291bnQoc2VtLCAtMSkgPD0gMCkgewotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCS8qCi0JCQkgKiBBIHNpZ25hbCBpcyBwZW5kaW5nIC0gZ2l2ZSB1cCB0cnlpbmcuCi0JCQkgKiBTZXQgc2VtLT5jb3VudCB0byAwIGlmIGl0IGlzIG5lZ2F0aXZlLAotCQkJICogc2luY2Ugd2UgYXJlIG5vIGxvbmdlciBzbGVlcGluZy4KLQkJCSAqLwotCQkJX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgMCk7Ci0JCQlyZXQgPSAtRUlOVFI7Ci0JCQlicmVhazsKLQkJfQotCQlzY2hlZHVsZSgpOwotCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JfQotCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLQotI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKLQlwcmludGsoIiVzKCVkKTogZG93biAlcyglcClcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAotCSAgICAgICAocmV0IDwgMCA/ICJpbnRlcnJ1cHRlZCIgOiAiYWNxdWlyZWQiKSwgc2VtKTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQKLV9fdXBfd2FrZXVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQkvKgotCSAqIE5vdGUgdGhhdCB3ZSBpbmNyZW1lbnRlZCBjb3VudCBpbiB1cCgpIGJlZm9yZSB3ZSBjYW1lIGhlcmUsCi0JICogYnV0IHRoYXQgd2FzIGluZWZmZWN0aXZlIHNpbmNlIHRoZSByZXN1bHQgd2FzIDw9IDAsIGFuZAotCSAqIGFueSBuZWdhdGl2ZSB2YWx1ZSBvZiBjb3VudCBpcyBlcXVpdmFsZW50IHRvIDAuCi0JICogVGhpcyBlbmRzIHVwIHNldHRpbmcgY291bnQgdG8gMSwgdW5sZXNzIGNvdW50IGlzIG5vdyA+IDAKLQkgKiAoaS5lLiBiZWNhdXNlIHNvbWUgb3RoZXIgY3B1IGhhcyBjYWxsZWQgdXAoKSBpbiB0aGUgbWVhbnRpbWUpLAotCSAqIGluIHdoaWNoIGNhc2Ugd2UganVzdCBpbmNyZW1lbnQgY291bnQuCi0JICovCi0JX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgMSk7Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLX0KLQotdm9pZCBfX3NjaGVkCi1kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLSNpZmRlZiBXQUlUUVVFVUVfREVCVUcKLQlDSEVDS19NQUdJQyhzZW0tPl9fbWFnaWMpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQotCXByaW50aygiJXMoJWQpOiBkb3duKCVwKSA8Y291bnQ9JWQ+IGZyb20gJXBcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBzZW0sCi0JICAgICAgIGF0b21pY19yZWFkKCZzZW0tPmNvdW50KSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLSNlbmRpZgotCV9fZG93bihzZW0pOwotfQotCi1pbnQgX19zY2hlZAotZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLSNpZmRlZiBXQUlUUVVFVUVfREVCVUcKLQlDSEVDS19NQUdJQyhzZW0tPl9fbWFnaWMpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQotCXByaW50aygiJXMoJWQpOiBkb3duKCVwKSA8Y291bnQ9JWQ+IGZyb20gJXBcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBzZW0sCi0JICAgICAgIGF0b21pY19yZWFkKCZzZW0tPmNvdW50KSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLSNlbmRpZgotCXJldHVybiBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotfQotCi1pbnQKLWRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldDsKLQotI2lmZGVmIFdBSVRRVUVVRV9ERUJVRwotCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7Ci0jZW5kaWYKLQotCXJldCA9IF9fZG93bl90cnlsb2NrKHNlbSk7Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCi0JcHJpbnRrKCIlcyglZCk6IGRvd25fdHJ5bG9jayAlcyBmcm9tICVwXG4iLAotCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKLQkgICAgICAgcmV0ID8gImZhaWxlZCIgOiAiYWNxdWlyZWQiLAotCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotI2VuZGlmCi0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkCi11cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0jaWZkZWYgV0FJVFFVRVVFX0RFQlVHCi0JQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKLQlwcmludGsoIiVzKCVkKTogdXAoJXApIDxjb3VudD0lZD4gZnJvbSAlcFxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHNlbSwKLQkgICAgICAgYXRvbWljX3JlYWQoJnNlbS0+Y291bnQpLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotI2VuZGlmCi0JX191cChzZW0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggOTYxOWM0My4uZDhkMjUzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xMiw2ICsxMiw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9LUFJPQkVTIGlmICghWElQX0tFUk5FTCkKKwlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTIGlmIChIQVZFX0tQUk9CRVMpCiAJaGVscAogCSAgVGhlIEFSTSBzZXJpZXMgaXMgYSBsaW5lIG9mIGxvdy1wb3dlci1jb25zdW1wdGlvbiBSSVNDIGNoaXAgZGVzaWducwogCSAgbGljZW5zZWQgYnkgQVJNIEx0ZCBhbmQgdGFyZ2V0ZWQgYXQgZW1iZWRkZWQgYXBwbGljYXRpb25zIGFuZApAQCAtMjU0LDYgKzI1NSw3IEBACiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEhBVkVfR1BJT19MSUIKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIENpcnJ1cyBFUDkzeHggc2VyaWVzIG9mIENQVXMuCiAKQEAgLTM3NiwxNSArMzc4LDE3IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgRnJlZXNjYWxlIE1YQy9pTVgtYmFzZWQgZmFtaWx5IG9mIHByb2Nlc3NvcnMKIAotY29uZmlnIEFSQ0hfT1JJT04KK2NvbmZpZyBBUkNIX09SSU9ONVgKIAlib29sICJNYXJ2ZWxsIE9yaW9uIgogCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgUExBVF9PUklPTgogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIE1hcnZlbGwgT3Jpb24gU3lzdGVtIG9uIENoaXAgZmFtaWx5LgorCSAgU3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZyBNYXJ2ZWxsIE9yaW9uIDV4IHNlcmllcyBTb0NzOgorCSAgT3Jpb24tMSAoNTE4MSksIE9yaW9uLU5BUyAoNTE4MiksIE9yaW9uLTIgKDUyODEuKQogCiBjb25maWcgQVJDSF9QTlg0MDA4CiAJYm9vbCAiUGhpbGlwcyBOZXhwZXJpYSBQTlg0MDA4IE1vYmlsZSIKQEAgLTQyMSwxMCArNDI1LDE1IEBACiAJYm9vbCAiU0ExMTAwLWJhc2VkIgogCXNlbGVjdCBJU0EKIAlzZWxlY3QgQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCXNlbGVjdCBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKIAlzZWxlY3QgQVJDSF9NVERfWElQCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBUSUNLX09ORVNIT1QKIAlzZWxlY3QgSEFWRV9JREUKKwlzZWxlY3QgSEFWRV9HUElPX0xJQgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFN0cm9uZ0FSTSAxMXgwIGJhc2VkIGJvYXJkcy4KIApAQCAtNDY3LDcgKzQ3Niw5IEBACiBjb25maWcgQVJDSF9PTUFQCiAJYm9vbCAiVEkgT01BUCIKIAlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEhBVkVfR1BJT19MSUIKIAlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUSSdzIE9NQVAgcGxhdGZvcm0gKE9NQVAxIGFuZCBPTUFQMikuCiAKQEAgLTUxNCw3ICs1MjUsNyBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyIKIAotc291cmNlICJhcmNoL2FybS9tYWNoLW9yaW9uL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnIgpAQCAtNTYxLDYgKzU3Miw5IEBACiBjb25maWcgUExBVF9JT1AKIAlib29sCiAKK2NvbmZpZyBQTEFUX09SSU9OCisJYm9vbAorCiBzb3VyY2UgYXJjaC9hcm0vbW0vS2NvbmZpZwogCiBjb25maWcgSVdNTVhUCkBAIC02NDgsNyArNjYyLDcgQEAKIAogY29uZmlnIFNNUAogCWJvb2wgIlN5bW1ldHJpYyBNdWx0aS1Qcm9jZXNzaW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFJFQUxWSUVXX0VCX0FSTTExTVAKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiAoUkVBTFZJRVdfRUJfQVJNMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCMTFNUCkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpAQCAtNjgxLDcgKzY5NSw3IEBACiAKIGNvbmZpZyBMT0NBTF9USU1FUlMKIAlib29sICJVc2UgbG9jYWwgdGltZXIgaW50ZXJydXB0cyIKLQlkZXBlbmRzIG9uIFNNUCAmJiBSRUFMVklFV19FQl9BUk0xMU1QCisJZGVwZW5kcyBvbiBTTVAgJiYgKFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVApCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGxvY2FsIHRpbWVycyBvbiBTTVAgcGxhdGZvcm1zLCByYXRoZXIgdGhlbiB0aGUKQEAgLTc3Miw2ICs3ODYsMTIgQEAKIAkgIG9yIGhhdmUgaHVnZSBob2xlcyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBmb3Igb3RoZXIgcmVhc29ucy4KIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZtL251bWE+IGZvciBtb3JlLgogCitjb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJYm9vbAorCitjb25maWcgQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMCisJYm9vbAorCiBjb25maWcgTk9ERVNfU0hJRlQKIAlpbnQKIAlkZWZhdWx0ICI0IiBpZiBBUkNIX0xIN0E0MFgKQEAgLTkzOSw3ICs5NTksOCBAQAogCiBjb25maWcgQVRBR1NfUFJPQwogCWJvb2wgIkV4cG9ydCBhdGFncyBpbiBwcm9jZnMiCi0JZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBLRVhFQworCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNob3VsZCB0aGUgYXRhZ3MgdXNlZCB0byBib290IHRoZSBrZXJuZWwgYmUgZXhwb3J0ZWQgaW4gYW4gImF0YWdzIgogCSAgZmlsZSBpbiBwcm9jZnMuIFVzZWZ1bCB3aXRoIGtleGVjLgpAQCAtMTE3MSw2ICsxMTkyLDggQEAKIAogc291cmNlICJkcml2ZXJzL2RjYS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvdWlvL0tjb25maWciCisKIGVuZG1lbnUKIAogc291cmNlICJmcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA3YjhmZjY2Li5lNzJkYjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTM0LDEyICsxMzQsMTEgQEAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUE5YNDAwOCkJICAgOj0gcG54NDAwOAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9ORVRYKQkgICA6PSBuZXR4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX05TOVhYWCkJICAgOj0gbnM5eHh4Ci0gdGV4dG9mcy0kKENPTkZJR19BUkNIX05TOVhYWCkJICAgOj0gMHgwMDEwODAwMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9EQVZJTkNJKQkgICA6PSBkYXZpbmNpCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0tTODY5NSkgICAgIDo9IGtzODY5NQogICBpbmNkaXItJChDT05GSUdfQVJDSF9NWEMpCSAgIDo9IG14YwogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDMpCSAgIDo9IG14MwotIG1hY2hpbmUtJChDT05GSUdfQVJDSF9PUklPTikJICAgOj0gb3Jpb24KKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT1JJT041WCkJICAgOj0gb3Jpb241eAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NU003WDAwQSkgICA6PSBtc20KIAogaWZlcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQpAQCAtMTg1LDYgKzE4NCw3IEBACiAKICMgSWYgd2UgaGF2ZSBhIGNvbW1vbiBwbGF0Zm9ybSBkaXJlY3RvcnksIHRoZW4gaW5jbHVkZSBpdCBpbiB0aGUgYnVpbGQuCiBjb3JlLSQoQ09ORklHX1BMQVRfSU9QKQkJKz0gYXJjaC9hcm0vcGxhdC1pb3AvCitjb3JlLSQoQ09ORklHX1BMQVRfT1JJT04pCQkrPSBhcmNoL2FybS9wbGF0LW9yaW9uLwogY29yZS0kKENPTkZJR19BUkNIX09NQVApCSs9IGFyY2gvYXJtL3BsYXQtb21hcC8KIGNvcmUtJChDT05GSUdfUExBVF9TM0MyNFhYKQkJKz0gYXJjaC9hcm0vcGxhdC1zM2MyNHh4LwogY29yZS0kKENPTkZJR19BUkNIX01YQykJCSs9IGFyY2gvYXJtL3BsYXQtbXhjLwpAQCAtMjUxLDYgKzI1MSw3IEBACiAgIGVjaG8gICcqIHpJbWFnZSAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZSAoYXJjaC8kKEFSQ0gpL2Jvb3QvekltYWdlKScKICAgZWNobyAgJyAgSW1hZ2UgICAgICAgICAtIFVuY29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgKGFyY2gvJChBUkNIKS9ib290L0ltYWdlKScKICAgZWNobyAgJyogeGlwSW1hZ2UgICAgICAtIFhJUCBrZXJuZWwgaW1hZ2UsIGlmIGNvbmZpZ3VyZWQgKGFyY2gvJChBUkNIKS9ib290L3hpcEltYWdlKScKKyAgZWNobyAgJyAgdUltYWdlICAgICAgICAtIFUtQm9vdCB3cmFwcGVkIHpJbWFnZScKICAgZWNobyAgJyAgYm9vdHBJbWFnZSAgICAtIENvbWJpbmVkIHpJbWFnZSBhbmQgaW5pdGlhbCBSQU0gZGlzaycgCiAgIGVjaG8gICcgICAgICAgICAgICAgICAgICAoc3VwcGx5IGluaXRyZCBpbWFnZSB2aWEgbWFrZSB2YXJpYWJsZSBJTklUUkQ9PHBhdGg+KScKICAgZWNobyAgJyAgaW5zdGFsbCAgICAgICAtIEluc3RhbGwgdW5jb21wcmVzc2VkIGtlcm5lbCcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL2FybS9ib290L01ha2VmaWxlCmluZGV4IDI1ZjEyMzAuLmRhMjI2YWJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvTWFrZWZpbGUKQEAgLTYxLDkgKzYxLDE1IEBACiAKIHF1aWV0X2NtZF91aW1hZ2UgPSBVSU1BR0UgICRACiAgICAgICBjbWRfdWltYWdlID0gJChDT05GSUdfU0hFTEwpICQoTUtJTUFHRSkgLUEgYXJtIC1PIGxpbnV4IC1UIGtlcm5lbCBcCi0JCSAgIC1DIG5vbmUgLWEgJChaUkVMQUREUikgLWUgJChaUkVMQUREUikgXAorCQkgICAtQyBub25lIC1hICQoTE9BREFERFIpIC1lICQoTE9BREFERFIpIFwKIAkJICAgLW4gJ0xpbnV4LSQoS0VSTkVMUkVMRUFTRSknIC1kICQ8ICRACiAKK2lmZXEgKCQoQ09ORklHX1pCT09UX1JPTSkseSkKKyQob2JqKS91SW1hZ2U6IExPQURBRERSPSQoQ09ORklHX1pCT09UX1JPTV9URVhUKQorZWxzZQorJChvYmopL3VJbWFnZTogTE9BREFERFI9JChaUkVMQUREUikKK2VuZGlmCisKICQob2JqKS91SW1hZ2U6CSQob2JqKS96SW1hZ2UgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UpCiAJQGVjaG8gJyAgSW1hZ2UgJEAgaXMgcmVhZHknCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMgYi9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMKaW5kZXggOTdiN2RjMS4uNWZlOTU4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2l0ODE1Mi5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9pdDgxNTIuYwpAQCAtMTIwLDYgKzEyMCw3IEBACiAJCQkgIHRpbWUsIHdoZW4gdGhleSBhbGwgdGhyZWUgd2VyZSAwLiAqLwogCQkgICAgICAgYml0c19wZCA9IF9fcmF3X3JlYWRsKElUODE1Ml9JTlRDX1BEQ05JUlIpOwogCQkgICAgICAgYml0c19scCA9IF9fcmF3X3JlYWRsKElUODE1Ml9JTlRDX0xQQ05JUlIpOworCQkgICAgICAgYml0c19sZCA9IF9fcmF3X3JlYWRsKElUODE1Ml9JTlRDX0xEQ05JUlIpOwogCQkgICAgICAgaWYgKCEoYml0c19sZCB8IGJpdHNfbHAgfCBiaXRzX3BkKSkKIAkJCSAgICAgICByZXR1cm47CiAJICAgICAgIH0KQEAgLTEzMywxNCArMTM0LDE0IEBACiAKIAkgICAgICAgYml0c19scCAmPSAoKDEgPDwgSVQ4MTUyX0xQX0lSUV9DT1VOVCkgLSAxKTsKIAkgICAgICAgd2hpbGUgKGJpdHNfbHApIHsKLQkJICAgICAgIGkgPSBfX2ZmcyhiaXRzX3BkKTsKKwkJICAgICAgIGkgPSBfX2ZmcyhiaXRzX2xwKTsKIAkJICAgICAgIGl0ODE1Ml9pcnEoSVQ4MTUyX0xQX0lSUShpKSk7CiAJCSAgICAgICBiaXRzX2xwICY9IH4oMSA8PCBpKTsKIAkgICAgICAgfQogCiAJICAgICAgIGJpdHNfbGQgJj0gKCgxIDw8IElUODE1Ml9MRF9JUlFfQ09VTlQpIC0gMSk7CiAJICAgICAgIHdoaWxlIChiaXRzX2xkKSB7Ci0JCSAgICAgICBpID0gX19mZnMoYml0c19wZCk7CisJCSAgICAgICBpID0gX19mZnMoYml0c19sZCk7CiAJCSAgICAgICBpdDgxNTJfaXJxKElUODE1Ml9MRF9JUlEoaSkpOwogCQkgICAgICAgYml0c19sZCAmPSB+KDEgPDwgaSk7CiAJICAgICAgIH0KQEAgLTI3NCw3ICsyNzUsNyBAQAogaW50IGRtYV9uZWVkc19ib3VuY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlkZXZfZGJnKGRldiwgIiVzOiBkbWFfYWRkciAlMDh4LCBzaXplICUwOHhcbiIsCi0JCV9fRlVOQ1RJT05fXywgZG1hX2FkZHIsIHNpemUpOworCQlfX2Z1bmNfXywgZG1hX2FkZHIsIHNpemUpOwogCXJldHVybiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgJiYKIAkJKChkbWFfYWRkciArIHNpemUgLSBQSFlTX09GRlNFVCkgPj0gU1pfNjRNKTsKIH0KQEAgLTI4OSw3ICsyOTAsNyBAQAogICovCiBpbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKIHsKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiAlbGx4XG4iLCBfX0ZVTkNUSU9OX18sIG1hc2spOworCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6ICVsbHhcbiIsIF9fZnVuY19fLCBtYXNrKTsKIAlpZiAobWFzayA+PSBQSFlTX09GRlNFVCArIFNaXzY0TSAtIDEpCiAJCXJldHVybiAwOwogCkBAIC0yOTksNyArMzAwLDcgQEAKIGludAogcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQogewotCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6ICVsbHhcbiIsIF9fRlVOQ1RJT05fXywgbWFzayk7CisJZGV2X2RiZygmZGV2LT5kZXYsICIlczogJWxseFxuIiwgX19mdW5jX18sIG1hc2spOwogCWlmIChtYXNrID49IFBIWVNfT0ZGU0VUICsgU1pfNjRNIC0gMSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMgYi9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jCmluZGV4IGY1M2JjYTQuLmFhOGY3NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3J0Y3RpbWUuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vcnRjLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocnRjX3dhaXQpOwogc3RhdGljIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpydGNfYXN5bmNfcXVldWU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IDMxNGViZDMuLmJjMjk5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CiAKIC8qIFBDTUNJQSB0byBTY29vcCBsaW5rYWdlCkBAIC0zMCwxMCArMzEsOSBAQAogc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKIEVYUE9SVF9TWU1CT0wocGxhdGZvcm1fc2Nvb3BfY29uZmlnKTsKIAotI2RlZmluZSBTQ09PUF9SRUcoZCxhZHIpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikoZCArKGFkcikpKQotCiBzdHJ1Y3QgIHNjb29wX2RldiB7Ci0Jdm9pZCAgKmJhc2U7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBncGlvX2NoaXAgZ3BpbzsKIAlzcGlubG9ja190IHNjb29wX2xvY2s7CiAJdW5zaWduZWQgc2hvcnQgc3VzcGVuZF9jbHI7CiAJdW5zaWduZWQgc2hvcnQgc3VzcGVuZF9zZXQ7CkBAIC00NCwxMyArNDQsODQgQEAKIHsKIAlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9NQ1IpID0gMHgwMTAwOyAgLy8gMDAKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9DRFIpID0gMHgwMDAwOyAgLy8gMDQKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9DQ1IpID0gMHgwMDAwOyAgLy8gMTAKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JTVIpID0gMHgwMDAwOyAgLy8gMTgKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JUk0pID0gMHgwMEZGOyAgLy8gMTQKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JU1IpID0gMHgwMDAwOyAgLy8gMUMKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9JUk0pID0gMHgwMDAwOworCWlvd3JpdGUxNigweDAxMDAsIHNkZXYtPmJhc2UgKyBTQ09PUF9NQ1IpOyAgLy8gMDAKKwlpb3dyaXRlMTYoMHgwMDAwLCBzZGV2LT5iYXNlICsgU0NPT1BfQ0RSKTsgIC8vIDA0CisJaW93cml0ZTE2KDB4MDAwMCwgc2Rldi0+YmFzZSArIFNDT09QX0NDUik7ICAvLyAxMAorCWlvd3JpdGUxNigweDAwMDAsIHNkZXYtPmJhc2UgKyBTQ09PUF9JTVIpOyAgLy8gMTgKKwlpb3dyaXRlMTYoMHgwMEZGLCBzZGV2LT5iYXNlICsgU0NPT1BfSVJNKTsgIC8vIDE0CisJaW93cml0ZTE2KDB4MDAwMCwgc2Rldi0+YmFzZSArIFNDT09QX0lTUik7ICAvLyAxQworCWlvd3JpdGUxNigweDAwMDAsIHNkZXYtPmJhc2UgKyBTQ09PUF9JUk0pOworfQorCitzdGF0aWMgdm9pZCBfX3Njb29wX2dwaW9fc2V0KHN0cnVjdCBzY29vcF9kZXYgKnNkZXYsCisJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBncHdyOworCisJZ3B3ciA9IGlvcmVhZDE2KHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKKwlpZiAodmFsdWUpCisJCWdwd3IgfD0gMSA8PCAob2Zmc2V0ICsgMSk7CisJZWxzZQorCQlncHdyICY9IH4oMSA8PCAob2Zmc2V0ICsgMSkpOworCWlvd3JpdGUxNihncHdyLCBzZGV2LT5iYXNlICsgU0NPT1BfR1BXUik7Cit9CisKK3N0YXRpYyB2b2lkIHNjb29wX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHNjb29wX2RldiwgZ3Bpbyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFncyk7CisKKwlfX3Njb29wX2dwaW9fc2V0KHNkZXYsIG9mZnNldCwgdmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+c2Nvb3BfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNjb29wX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBzY29vcF9kZXYsIGdwaW8pOworCisJLyogWFhYOiBJJ20gdXN1cmUsICBidXQgaXQgc2VlbXMgc28gKi8KKwlyZXR1cm4gaW9yZWFkMTYoc2Rldi0+YmFzZSArIFNDT09QX0dQUlIpICYgKDEgPDwgKG9mZnNldCArIDEpKTsKK30KKworc3RhdGljIGludCBzY29vcF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHNjb29wX2RldiwgZ3Bpbyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBncGNyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWdzKTsKKworCWdwY3IgPSBpb3JlYWQxNihzZGV2LT5iYXNlICsgU0NPT1BfR1BDUik7CisJZ3BjciAmPSB+KDEgPDwgKG9mZnNldCArIDEpKTsKKwlpb3dyaXRlMTYoZ3Bjciwgc2Rldi0+YmFzZSArIFNDT09QX0dQQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+c2Nvb3BfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Nvb3BfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBzY29vcF9kZXYsIGdwaW8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQgZ3BjcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFncyk7CisKKwlfX3Njb29wX2dwaW9fc2V0KHNkZXYsIG9mZnNldCwgdmFsdWUpOworCisJZ3BjciA9IGlvcmVhZDE2KHNkZXYtPmJhc2UgKyBTQ09PUF9HUENSKTsKKwlncGNyIHw9IDEgPDwgKG9mZnNldCArIDEpOworCWlvd3JpdGUxNihncGNyLCBzZGV2LT5iYXNlICsgU0NPT1BfR1BDUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKIH0KIAogdW5zaWduZWQgc2hvcnQgc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpCkBAIC02MCw4ICsxMzEsOCBAQAogCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKLQlncGlvX2JpdCA9IFNDT09QX1JFRyhzZGV2LT5iYXNlLCBTQ09PUF9HUFdSKSB8IGJpdDsKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSwgU0NPT1BfR1BXUikgPSBncGlvX2JpdDsKKwlncGlvX2JpdCA9IGlvcmVhZDE2KHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKSB8IGJpdDsKKwlpb3dyaXRlMTYoZ3Bpb19iaXQsIHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKIAogCXJldHVybiBncGlvX2JpdDsKQEAgLTc0LDggKzE0NSw4IEBACiAJc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOwotCWdwaW9fYml0ID0gU0NPT1BfUkVHKHNkZXYtPmJhc2UsIFNDT09QX0dQV1IpICYgfmJpdDsKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9HUFdSKSA9IGdwaW9fYml0OworCWdwaW9fYml0ID0gaW9yZWFkMTYoc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpICYgfmJpdDsKKwlpb3dyaXRlMTYoZ3Bpb19iaXQsIHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKIAogCXJldHVybiBncGlvX2JpdDsKQEAgLTg3LDEzICsxNTgsMTMgQEAKIHVuc2lnbmVkIHNob3J0IHJlYWRfc2Nvb3BfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlyZXR1cm4gU0NPT1BfUkVHKHNkZXYtPmJhc2UscmVnKTsKKwlyZXR1cm4gaW9yZWFkMTYoc2Rldi0+YmFzZSArIHJlZyk7CiB9CiAKIHZvaWQgd3JpdGVfc2Nvb3BfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCBkYXRhKQogewogCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxyZWcpPWRhdGE7CisJaW93cml0ZTE2KGRhdGEsIHNkZXYtPmJhc2UgKyByZWcpOwogfQogCiBFWFBPUlRfU1lNQk9MKHJlc2V0X3Njb29wKTsKQEAgLTEwNCw5ICsxNzUsOSBAQAogewogCXVuc2lnbmVkIHNob3J0IG1jcjsKIAotCW1jciA9IFNDT09QX1JFRyhzZGV2LT5iYXNlLCBTQ09PUF9NQ1IpOworCW1jciA9IGlvcmVhZDE2KHNkZXYtPmJhc2UgKyBTQ09PUF9NQ1IpOwogCWlmICgobWNyICYgMHgxMDApID09IDApCi0JCVNDT09QX1JFRyhzZGV2LT5iYXNlLCBTQ09PUF9NQ1IpID0gMHgwMTAxOworCQlpb3dyaXRlMTYoMHgwMTAxLCBzZGV2LT5iYXNlICsgU0NPT1BfTUNSKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMTE1LDggKzE4Niw4IEBACiAJc3RydWN0IHNjb29wX2RldiAqc2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAljaGVja19zY29vcF9yZWcoc2Rldik7Ci0Jc2Rldi0+c2Nvb3BfZ3B3ciA9IFNDT09QX1JFRyhzZGV2LT5iYXNlLCBTQ09PUF9HUFdSKTsKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSwgU0NPT1BfR1BXUikgPSAoc2Rldi0+c2Nvb3BfZ3B3ciAmIH5zZGV2LT5zdXNwZW5kX2NscikgfCBzZGV2LT5zdXNwZW5kX3NldDsKKwlzZGV2LT5zY29vcF9ncHdyID0gaW9yZWFkMTYoc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpOworCWlvd3JpdGUxNigoc2Rldi0+c2Nvb3BfZ3B3ciAmIH5zZGV2LT5zdXNwZW5kX2NscikgfCBzZGV2LT5zdXNwZW5kX3NldCwgc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjYsNyArMTk3LDcgQEAKIAlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWNoZWNrX3Njb29wX3JlZyhzZGV2KTsKLQlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9HUFdSKSA9IHNkZXYtPnNjb29wX2dwd3I7CisJaW93cml0ZTE2KHNkZXYtPnNjb29wX2dwd3IsIHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM1LDExICsyMDYsMTMgQEAKICNkZWZpbmUgc2Nvb3BfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1pbnQgX19pbml0IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzY29vcF9kZXYgKmRldnB0cjsKIAlzdHJ1Y3Qgc2Nvb3BfY29uZmlnICppbmY7CiAJc3RydWN0IHJlc291cmNlICptZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWludCByZXQ7CisJaW50IHRlbXA7CiAKIAlpZiAoIW1lbSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTQsNDAgKzIyNyw3OCBAQAogCWRldnB0ci0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CiAKIAlpZiAoIWRldnB0ci0+YmFzZSkgewotCQlrZnJlZShkZXZwdHIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXZwdHIpOwogCi0JcHJpbnRrKCJTaGFycCBTY29vcCBEZXZpY2UgZm91bmQgYXQgMHglMDh4IC0+IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KW1lbS0+c3RhcnQsKHVuc2lnbmVkIGludClkZXZwdHItPmJhc2UpOworCXByaW50aygiU2hhcnAgU2Nvb3AgRGV2aWNlIGZvdW5kIGF0IDB4JTA4eCAtPiAweCU4cFxuIiwodW5zaWduZWQgaW50KW1lbS0+c3RhcnQsIGRldnB0ci0+YmFzZSk7CiAKLQlTQ09PUF9SRUcoZGV2cHRyLT5iYXNlLCBTQ09PUF9NQ1IpID0gMHgwMTQwOworCWlvd3JpdGUxNigweDAxNDAsIGRldnB0ci0+YmFzZSArIFNDT09QX01DUik7CiAJcmVzZXRfc2Nvb3AoJnBkZXYtPmRldik7Ci0JU0NPT1BfUkVHKGRldnB0ci0+YmFzZSwgU0NPT1BfQ1BSKSA9IDB4MDAwMDsKLQlTQ09PUF9SRUcoZGV2cHRyLT5iYXNlLCBTQ09PUF9HUENSKSA9IGluZi0+aW9fZGlyICYgMHhmZmZmOwotCVNDT09QX1JFRyhkZXZwdHItPmJhc2UsIFNDT09QX0dQV1IpID0gaW5mLT5pb19vdXQgJiAweGZmZmY7CisJaW93cml0ZTE2KDB4MDAwMCwgZGV2cHRyLT5iYXNlICsgU0NPT1BfQ1BSKTsKKwlpb3dyaXRlMTYoaW5mLT5pb19kaXIgJiAweGZmZmYsIGRldnB0ci0+YmFzZSArIFNDT09QX0dQQ1IpOworCWlvd3JpdGUxNihpbmYtPmlvX291dCAmIDB4ZmZmZiwgZGV2cHRyLT5iYXNlICsgU0NPT1BfR1BXUik7CiAKIAlkZXZwdHItPnN1c3BlbmRfY2xyID0gaW5mLT5zdXNwZW5kX2NscjsKIAlkZXZwdHItPnN1c3BlbmRfc2V0ID0gaW5mLT5zdXNwZW5kX3NldDsKIAorCWRldnB0ci0+Z3Bpby5iYXNlID0gLTE7CisKKwlpZiAoaW5mLT5ncGlvX2Jhc2UgIT0gMCkgeworCQlkZXZwdHItPmdwaW8ubGFiZWwgPSBwZGV2LT5kZXYuYnVzX2lkOworCQlkZXZwdHItPmdwaW8uYmFzZSA9IGluZi0+Z3Bpb19iYXNlOworCQlkZXZwdHItPmdwaW8ubmdwaW8gPSAxMjsgLyogUEExMSA9IDAsIFBBMTIgPSAxLCBldGMuIHVwIHRvIFBBMjIgPSAxMSAqLworCQlkZXZwdHItPmdwaW8uc2V0ID0gc2Nvb3BfZ3Bpb19zZXQ7CisJCWRldnB0ci0+Z3Bpby5nZXQgPSBzY29vcF9ncGlvX2dldDsKKwkJZGV2cHRyLT5ncGlvLmRpcmVjdGlvbl9pbnB1dCA9IHNjb29wX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCQlkZXZwdHItPmdwaW8uZGlyZWN0aW9uX291dHB1dCA9IHNjb29wX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKworCQlyZXQgPSBncGlvY2hpcF9hZGQoJmRldnB0ci0+Z3Bpbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9ncGlvOworCX0KKwogCXJldHVybiAwOworCisJaWYgKGRldnB0ci0+Z3Bpby5iYXNlICE9IC0xKQorCQl0ZW1wID0gZ3Bpb2NoaXBfcmVtb3ZlKCZkZXZwdHItPmdwaW8pOworZXJyX2dwaW86CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CitlcnJfaW9yZW1hcDoKKwlpb3VubWFwKGRldnB0ci0+YmFzZSk7CisJa2ZyZWUoZGV2cHRyKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2Nvb3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzY29vcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaWYgKHNkZXYpIHsKLQkJaW91bm1hcChzZGV2LT5iYXNlKTsKLQkJa2ZyZWUoc2Rldik7Ci0JCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWludCByZXQ7CisKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNkZXYtPmdwaW8uYmFzZSAhPSAtMSkgeworCQlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJnNkZXYtPmdwaW8pOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCByZW1vdmUgZ3BpbyBjaGlwOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKHNkZXYtPmJhc2UpOworCWtmcmVlKHNkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNjb29wX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2Nvb3BfcHJvYmUsCi0JLnJlbW92ZSAJPSBzY29vcF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzY29vcF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gc2Nvb3Bfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNjb29wX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKQEAgLTE5NSw3ICszMDYsNyBAQAogCX0sCiB9OwogCi1pbnQgX19pbml0IHNjb29wX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNjb29wX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzY29vcF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FtMjAwZXBka2l0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzAzMGNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTQ5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmMzCisjIFN1biBNYXIgIDkgMDY6MzM6MzMgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Imd1bSIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKKyMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfR1VNU1RJWD15CisjIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9HVU1TVElYX0Y9eQorQ09ORklHX1BYQTI1eD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKK0NPTkZJR19YU0NBTEVfUE1VPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCitDT05GSUdfUENNQ0lBX1BYQTJYWD15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjggcm9vdD0xZjAxIHJvb3Rmc3R5cGU9amZmczIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD1tCitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KKyMgQ09ORklHX0JUX0JORVBfTUNfRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hJRFAgaXMgbm90IHNldAorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lVQVJUPW0KK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKKyMgQ09ORklHX0JUX0hDSVVBUlRfQkNTUCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlQzQyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCTFVFQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMT1tCisjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQorIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVAgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVAgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QWEEyWFg9eQorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9bQorQ09ORklHX0lERV9NQVhfSFdJRlM9MgorQ09ORklHX0JMS19ERVZfSURFPW0KKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz1tCisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9bQorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9bQorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD1tCisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HUElPX0xJQj15CisKKyMKKyMgR1BJTyBTdXBwb3J0CisjCisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NBMTEwMF9XQVRDSERPRz1tCisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX1NZU19DT1BZQVJFQT1tCitDT05GSUdfRkJfU1lTX0lNQUdFQkxJVD1tCitDT05GSUdfRkJfU1lTX0ZPUFM9bQorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKK0NPTkZJR19GQl9NQlg9bQorQ09ORklHX0ZCX1ZJUlRVQUw9bQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworQ09ORklHX1NORF9BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgQUxTQSBBUk0gZGV2aWNlcworIworQ09ORklHX1NORF9QWEEyWFhfUENNPW0KK0NPTkZJR19TTkRfUFhBMlhYX0FDOTc9bQorCisjCisjIFBDTUNJQSBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAorIworIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisKKyMKKyMgU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFN1cGVySAorIworCisjCisjIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcworIworCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9QWEEyWFg9eQorQ09ORklHX1VTQl9QWEEyWFg9eQorIyBDT05GSUdfVVNCX1BYQTJYWF9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPXkKK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9eQorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCmluZGV4IGUxMGQwMDMuLjJkYmJiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKQEAgLTYyMCwxNCArNjIwLDE0IEBACiAjCiAjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0FMR09CSVQ9eQogIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIwotQ09ORklHX0kyQ19BVDkxPXkKK0NPTkZJR19JMkNfR1BJTz15CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKaW5kZXggODM0ZGRkYi4uNmU5OTRmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZwpAQCAtNTk0LDE0ICs1OTQsMTQgQEAKICMKICMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQUxHT0JJVD15CiAjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX0FUOTE9eQorQ09ORklHX0kyQ19HUElPPXkKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwZWtfZGVmY29uZmlnCmluZGV4IDQ2YjBjNzMuLmY2NTljOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZwpAQCAtMSw0MyArMSw1NiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjNgotIyBGcmkgTm92IDE3IDE4OjQyOjIxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKKyMgVHVlIEphbiAgOCAyMjoyMDo1MCAyMDA4CiAjCiBDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CkBAIC01MywzMCArNjYsMzAgQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCiBDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDgsMTIgKzEyMSwxNiBAQAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTEyMSwyOSArMTM4LDUyIEBACiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CiAKICMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCiAjIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKICMKICMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MD15CiAjIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9QTUNfVU5JVD15CiAKICMKLSMgQVQ5MVNBTTkyNjAgQm9hcmQgVHlwZQorIyBBVDkxU0FNOTI2MCBWYXJpYW50cworIworIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MF9TQU05WEUgaXMgbm90IHNldAorCisjCisjIEFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlCiAjCiBDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLPXkKKyMgQ09ORklHX01BQ0hfQ0FNNjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQU05X0w5MjYwIGlzIG5vdCBzZXQKIAogIwogIyBBVDkxIEJvYXJkIE9wdGlvbnMKICMKKyMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0FUOTFfQlVTV0lEVEhfMTYgaXMgbm90IHNldAogCiAjCiAjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCiAjCi0jIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15CisjIENPTkZJR19BVE1FTF9UQ0xJQiBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTY2LDE5ICsyMDYsMTkgQEAKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogQ09ORklHX0haPTEwMApAQCAtMTkxLDggKzIzMSwxMiBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCkBAIC0yMDMsNiArMjQ3LDcgQEAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCiAjCiAjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgpAQCAtMjI4LDcgKzI3Myw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAotIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yMzgsMTMgKzI4Myw5IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTI2MywzMyArMzA0LDIzIEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzAyLDEwICszMzMsNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0zMTUsNyArMzQyLDE3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzI0LDM0ICszNjEsMTcgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKQEAgLTM2MCwxNSArMzgwLDE5IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19BVE1FTF9TU0M9eQogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtMzg4LDYgKzQxMiw4IEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtMzk1LDQzICs0MjEsNzIgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQogCiAjCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKK0NPTkZJR19ORVRERVZfMTAwMDA9eQogCiAjCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMgV2lyZWxlc3MgTEFOCiAjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCiAjCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwpAQCAtNDM5LDYgKzQ5NCw3IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC00NDgsNyArNTA0LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC00NTgsNiArNTEzLDcgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNDkyLDE1ICs1NDgsNjAgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQogCiAjCi0jIFdhdGNoZG9nIENhcmRzCisjIEkyQyBBbGdvcml0aG1zCiAjCitDT05GSUdfSTJDX0FMR09CSVQ9eQorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19HUElPPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKIApAQCAtNTA4LDk4ICs2MDksNzAgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0FUOTFTQU05X1dBVENIRE9HPXkKIAogIwogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKICMKICMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBUUE0gZGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldApAQCAtNjEwLDcgKzY4Myw3IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKQEAgLTYxOSw5ICs2OTIsMTEgQEAKICMKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtNjQwLDYgKzcxNSw3IEBACiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUc9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CkBAIC02NTAsNDMgKzcyNiwxMCBAQAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotCi0jCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIAogIwpAQCAtNzA4LDYgKzc1MSw3IEBACiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKQEAgLTcxNyw2ICs3NjEsNyBAQAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC03MjcsMTMgKzc3MiwxOSBAQAogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKIENPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKIENPTkZJR19VU0JfQVQ5MT15CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CkBAIC03NDUsMTcgKzc5Niw1NiBAQAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIFJUQyBpbnRlcmZhY2VzCiAjCi1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0FUOTFTQU05PXkKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTgwNiw3ICs4OTYsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODI1LDEwICs5MTQsNyBAQAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTgzNiwxNyArOTIyLDEyIEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtODg3LDQxICs5NjgsNDkgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CitDT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CkBAIC05MzIsMTggKzEwMjEsMjEgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnCmluZGV4IGZjZDhmYTAuLjM4MDJlODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZwpAQCAtMSw0MyArMSw1NiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjNgotIyBGcmkgTm92IDE3IDE4OjAwOjM4IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKKyMgVHVlIEphbiAgOCAyMjoyMTo0OSAyMDA4CiAjCiBDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CkBAIC01MywzMCArNjYsMzAgQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCiBDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDgsMTIgKzEyMSwxNiBAQAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTEyMSwxNCArMTM4LDI3IEBACiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CiAKICMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCiAjIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKICMKICMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFTQU05MjYxPXkKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9QTUNfVU5JVD15CiAKICMKICMgQVQ5MVNBTTkyNjEgQm9hcmQgVHlwZQpAQCAtMTM4LDEyICsxNjgsMTUgQEAKICMKICMgQVQ5MSBCb2FyZCBPcHRpb25zCiAjCisjIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9BVDkxX0JVU1dJRFRIXzE2IGlzIG5vdCBzZXQKIAogIwogIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwogIwotIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1M9eQorIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAorQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTE2NiwxOSArMTk5LDE5IEBACiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgc3VwcG9ydAogIwotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKIENPTkZJR19IWj0xMDAKQEAgLTE5MSw4ICsyMjQsMTIgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKICMgQ09ORklHX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIApAQCAtMjAzLDYgKzI0MCw3IEBACiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTIyOCw3ICsyNjYsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CitDT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjM4LDEzICsyNzYsMTMgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTI2NiwzMCArMzA0LDIwIEBACiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzAyLDEwICszMzAsNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0zMTUsNyArMzM5LDE3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzI0LDIwICszNTgsMTQgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldApAQCAtMzUwLDEyICszNzgsMTQgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKICMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC0zNzUsNyArNDA1LDYgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwpAQCAtMzg2LDYgKzQxNSw4IEBACiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC0zOTcsMzUgKzQyOCwyNCBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfTVREX05BTkQ9eQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPXkKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0FUOTE9eQogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIworIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKQEAgLTQzNCwxNSArNDU0LDE5IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19BVE1FTF9TU0M9eQogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNDYyLDYgKzQ4Niw4IEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNDY5LDc1ICs0OTUsNDkgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKIENPTkZJR19ETTkwMDA9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNTQ1LDEwICs1NDUsNiBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU2LDYgKzU1Miw3IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NjUsMjMgKzU2Miw0MyBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTYwOSw3NSArNjI2LDQ3IEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogCiAjCiAjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0FMR09CSVQ9eQogIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIwotQ09ORklHX0kyQ19BVDkxPXkKK0NPTkZJR19JMkNfR1BJTz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtNjg2LDcwICs2NzUsMTI1IEBACiAjCiAjIFNQSSBzdXBwb3J0CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwogIworQ09ORklHX1NQSV9BVE1FTD15CisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxU0FNOV9XQVRDSERPRz15CiAKICMKLSMgTEVEIGRldmljZXMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZHJpdmVycworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgVHJpZ2dlcnMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDE1NjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BVE1FTD15CisjIENPTkZJR19GQl9JTlRTUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUTUVMX1NUTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldApAQCAtNzYwLDcgKzgwNCw3IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKQEAgLTc2OSw5ICs4MTMsMTEgQEAKICMKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtNzkwLDYgKzgzNiw3IEBACiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUc9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CkBAIC04MDAsNDMgKzg0NywxMCBAQAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotCi0jCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIAogIwpAQCAtODU4LDYgKzg3Miw3IEBACiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKQEAgLTg2Nyw2ICs4ODIsNyBAQAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC04NzcsMTMgKzg5MywxOSBAQAogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKIENPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKIENPTkZJR19VU0JfQVQ5MT15CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CkBAIC04OTUsMjEgKzkxNyw3MyBAQAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR19TRVJJQUw9bQogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQVQ5MT1tCi0jIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIE1NQy9TRCBDYXJkIERyaXZlcnMKICMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQVQ5MT15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTYwLDcgKzEwMzQsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtOTczLDcgKzEwNDYsNiBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk4MSwxMCArMTA1Myw3IEBACiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTkyLDE3ICsxMDYxLDEyIEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtMTA0Myw0MSArMTEwNyw0OSBAQAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNUUlVNRU5UQVRJT049eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKQEAgLTEwODgsMTggKzExNjAsMjEgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnCmluZGV4IGM3MmFiODIuLjMyYTBkNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZwpAQCAtMSwxMiArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjMQotIyBNb24gSmFuICA4IDE2OjA2OjU0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKKyMgVHVlIEphbiAgOCAyMjoxMjoyMCAyMDA4CiAjCiBDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xNSwzMiArMjEsMzYgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQpAQCAtNTYsMzIgKzY2LDMwIEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTEzLDEzICsxMjEsMTYgQEAKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldApAQCAtMTI3LDE1ICsxMzgsMjcgQEAKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKIAogIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKICMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAogIwogIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9BVDkxU0FNOTI2Mz15CisjIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKIAogIwogIyBBVDkxU0FNOTI2MyBCb2FyZCBUeXBlCkBAIC0xNTIsNiArMTc1LDggQEAKICMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKICMKICMgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTF9UQ0xJQiBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTc0LDE5ICsxOTksMTkgQEAKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogQ09ORklHX0haPTEwMApAQCAtMTk5LDggKzIyNCwxMiBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCkBAIC0yMTEsNiArMjQwLDcgQEAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCiAjCiAjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgpAQCAtMjM2LDcgKzI2Niw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAotIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yNDYsNyArMjc2LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI3MSw2ICszMDAsNyBAQAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQpAQCAtMjgxLDIwICszMTEsOCBAQAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zMDcsMTAgKzMyNSw2IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTMyMCw3ICszMzQsMTcgQEAKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zMjksMjAgKzM1MywxNCBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CkBAIC0zNjIsNiArMzgwLDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC0zODEsNyArNDAwLDYgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwpAQCAtNDA1LDM1ICs0MjMsMjQgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX01URF9OQU5EPXkKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9BVDkxPXkKICMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKQEAgLTQ0MywxNSArNDUwLDE4IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19BVE1FTF9TU0M9eQogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKICMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKQEAgLTQ3Myw2ICs0ODMsNyBAQAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNDgwLDgwICs0OTEsNjUgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKIAogIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKK0NPTkZJR19ORVRERVZfMTAwMDA9eQogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNTYxLDEwICs1NTcsNiBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwpAQCAtNTcyLDYgKzU2NCw3IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01ODEsMjAgKzU3NCwyNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVFNERVY9eQotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9YPTI0MAotQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9ZPTMyMAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldApAQCAtNjAzLDYgKzYwMiw3IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtNjM2LDcxICs2MzYsNDcgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiAKICMKICMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQUxHT0JJVD15CiAjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSTJDX0FUOTE9eQorQ09ORklHX0kyQ19HUElPPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03MjIsNjEgKzY5OCw4MCBAQAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxU0FNOV9XQVRDSERPRz15CiAKICMKLSMgTEVEIGRldmljZXMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZHJpdmVycworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgVHJpZ2dlcnMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTU2MDUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX0FUTUVMPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydApAQCAtNzg0LDI2ICs3NzksMjggQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKK0NPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CkBAIC04MTQsOSArODExLDggQEAKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyNCw5ICs4MjAsMTEgQEAKICMKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtODQ1LDYgKzg0Myw3IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKQEAgLTg1Niw0MyArODU1LDEwIEBACiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0KLSMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCiAjCkBAIC05MTQsNiArODgwLDcgQEAKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldApAQCAtOTIzLDYgKzg5MCw3IEBACiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTkzMywxMyArOTAxLDE5IEBACiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX0FUOTE9eQogQ09ORklHX1VTQl9BVDkxPXkKICMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKQEAgLTk1MSwyMSArOTI1LDczIEBACiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HX1NFUklBTD1tCiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19BVDkxPW0KLSMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgTU1DL1NEIENhcmQgRHJpdmVycwogIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19BVDkxPW0KKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9BVDkxU0FNOT15CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xMDE2LDcgKzEwNDIsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMiwxMCArMTA1NywxMiBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CkBAIC0xMDQ0LDEwICsxMDcxLDcgQEAKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CkBAIC0xMDU3LDYgKzEwODEsNyBAQAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA2NCwxNyArMTA4OSwxMiBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTExMTUsMzYgKzExMzUsMzUgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCitDT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTUyLDkgKzExNzEsMTMgQEAKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CkBAIC0xMTY1LDEwICsxMTg4LDcgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3Nyw4ICsxMTk3LDEzIEBACiBDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX1BMSVNUPXkKLUNPTkZJR19JT01BUF9DT1BZPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnCmluZGV4IGZiZThiMzAuLjk4ZTY3NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxla19kZWZjb25maWcKQEAgLTEsMTUgKzEsMTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQotIyBNb24gTWF5ICA3IDE2OjMwOjQwIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKKyMgVHVlIEphbiAgOCAyMjoyNDoxNCAyMDA4CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0yMywyNyArMjYsMjggQEAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKQEAgLTYyLDMyICs2NiwzMCBAQAogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTExOSwxNCArMTIxLDE2IEBACiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTEzNCw5ICsxMzgsMTggQEAKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKIAogIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKICMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAogIwogIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKQEAgLTE0NCw2ICsxNTcsOCBAQAogIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0FUOTFTQU05Ukw9eQorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKIAogIwogIyBBVDkxU0FNOVJMIEJvYXJkIFR5cGUKQEAgLTE1Nyw3ICsxNzIsOSBAQAogIwogIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucwogIwotIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1M9eQorIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAorQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTE4NSwxNSArMjAyLDE0IEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogQ09ORklHX0haPTEwMApAQCAtMjA2LDkgKzIyMiwxMiBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCkBAIC0yNDUsNiArMjY0LDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjU0LDcgKzI3NCw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldApAQCAtMjcxLDEwICsyOTAsNiBAQAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0yODQsNyArMjk5LDE2IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMjkzLDIxICszMTcsMTQgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKQEAgLTMyNyw2ICszNDQsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTM0Niw3ICszNjQsNiBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC0zNzAsMzYgKzM4NywyMyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfTVREX05BTkQ9eQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPXkKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0FUOTE9eQogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIworIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldApAQCAtNDEwLDEyICs0MTQsMTYgQEAKIENPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0FUTUVMX1NTQz15CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQogIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQpAQCAtNDM3LDYgKzQ0NSw3IEBACiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC00NDQsNDcgKzQ1MywxMyBAQAogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIworIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwpAQCAtNDkyLDYgKzQ2Nyw3IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01MDEsNyArNDc3LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0zMjAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0yNDAKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC01MTEsOCArNDg2LDEwIEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKQEAgLTUyMSw2ICs0OTgsNyBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTU1NCwzNyArNTMyLDUwIEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQogCiAjCi0jIEkyQyBzdXBwb3J0CisjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfR1BJTz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIHN1cHBvcnQKQEAgLTYwMywyMSArNTk0LDI1IEBACiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCiAjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwogIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0c9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTYyNSwzNyArNjIwLDI4IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtNjY1LDkgKzY1MSwxNiBAQAogIwogIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwogIworIyBDT05GSUdfRkJfUzFEMTU2MDUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX0FUTUVMPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydApAQCAtNjc1LDcwICs2NjgsMTcgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKICMKLUNPTkZJR19TT1VORD15Ci0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCi1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotQ09ORklHX1NORF9TRVFVRU5DRVI9eQotQ09ORklHX1NORF9TRVFfRFVNTVk9eQotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci1DT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15Ci1DT05GSUdfU05EX0RFQlVHPXkKLUNPTkZJR19TTkRfREVCVUdfREVURUNUPXkKLSMgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgQVJNIGRldmljZXMKLSMKLQotIwotIyBTb0MgYXVkaW8gc3VwcG9ydAotIwotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLQotIwotIyBISUQgRGV2aWNlcwotIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIworIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldApAQCAtNzUyLDIwICs2OTIsNzMgQEAKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQVQ5MT15CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIE1NQy9TRCBDYXJkIERyaXZlcnMKICMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQVQ5MT15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtODE2LDcgKzgwOSw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MzYsMjAgKzgyOCwxMyBAQAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtODkwLDE2ICs4NzUsMTUgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCitDT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKQEAgLTkwNyw4ICs4OTEsOCBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CkBAIC05MTYsNiArOTAwLDkgQEAKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtOTIzLDEwICs5MTAsMTMgQEAKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKICMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQpAQCAtOTM3LDEwICs5MjcsNyBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCkBAIC05NDksOSArOTM2LDEyIEBACiBDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKaW5kZXggYmFhOTc2OS4uZDg0NmE0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKQEAgLTcxNCw3ICs3MTQsNyBAQAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfQVQ5MT1tCitDT05GSUdfSTJDX0dQSU89bQogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jYW02MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NkNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jYW02MF9kZWZjb25maWcKQEAgLTAsMCArMSwxMjI4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQKKyMgVGh1IE1hciAgNiAxMDowNzoyNiAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CitDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxPXkKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFDQVA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9QTUNfVU5JVD15CisKKyMKKyMgQVQ5MVNBTTkyNjAgVmFyaWFudHMKKyMKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjBfU0FNOVhFIGlzIG5vdCBzZXQKKworIworIyBBVDkxU0FNOTI2MCAvIEFUOTFTQU05WEUgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0NBTTYwPXkKKyMgQ09ORklHX01BQ0hfU0FNOV9MOTI2MCBpcyBub3Qgc2V0CisKKyMKKyMgQVQ5MSBCb2FyZCBPcHRpb25zCisjCisKKyMKKyMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKKyMgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKK0NPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgyMDAwNDAwMAorIyBDT05GSUdfWkJPT1RfUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBub2luaXRyZCByb290PS9kZXYvbXRkYmxvY2swIHJvb3Rmc3R5cGU9amZmczIgbWVtPTY0TSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD15CitDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKK0NPTkZJR19DRkc4MDIxMT1tCitDT05GSUdfTkw4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19NQUM4MDIxMT1tCitDT05GSUdfTUFDODAyMTFfUkNTSU1QTEU9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUkFNPW0KKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BMQVRSQU09bQorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01URF9EQVRBRkxBU0g9eQorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQVQ5MT15CisjIENPTkZJR19NVERfTkFORF9BVDkxX0VDQ19TT0ZUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9BVDkxX0VDQ19IVz15CisjIENPTkZJR19NVERfTkFORF9BVDkxX0VDQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD15CitDT05GSUdfU0NTSV9ORVRMSU5LPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19DSFJfREVWX1NDSD15CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9bQorQ09ORklHX1NDU0lfRkNfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9GQ19UR1RfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT1tCitDT05GSUdfREFWSUNPTV9QSFk9bQorQ09ORklHX1FTRU1JX1BIWT1tCitDT05GSUdfTFhUX1BIWT1tCitDT05GSUdfQ0lDQURBX1BIWT1tCitDT05GSUdfVklURVNTRV9QSFk9bQorQ09ORklHX1NNU0NfUEhZPW0KK0NPTkZJR19CUk9BRENPTV9QSFk9bQorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfRklYRURfUEhZPW0KKyMgQ09ORklHX0ZJWEVEX01JSV8xMF9GRFggaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfTUlJXzEwMF9GRFggaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfTUlJXzEwMDBfRkRYIGlzIG5vdCBzZXQKK0NPTkZJR19GSVhFRF9NSUlfQU1OVD0xCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19NQUNCPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorQ09ORklHX0tFWUJPQVJEX1NVTktCRD1tCitDT05GSUdfS0VZQk9BUkRfTEtLQkQ9bQorQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KK0NPTkZJR19LRVlCT0FSRF9ORVdUT049bQorQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZPW0KKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfU0VSSUFMPW0KK0NPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KK0NPTkZJR19NT1VTRV9WU1hYWEFBPW0KKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAorIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAorIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9BVE1FTD15CisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKK0NPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQorQ09ORklHX1JUQ19EUlZfVEVTVD1tCisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTk9eQorQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTlfUlRUPTAKK0NPTkZJR19SVENfRFJWX0FUOTFTQU05X0dQQlI9MAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0FVVE9GU19GUz15CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfRlM9eQorQ09ORklHX1lBRkZTX1lBRkZTMT15CisjIENPTkZJR19ZQUZGU185QllURV9UQUdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lBRkZTX0RPRVNfRUNDIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19ZQUZGUzI9eQorQ09ORklHX1lBRkZTX0FVVE9fWUFGRlMyPXkKKyMgQ09ORklHX1lBRkZTX0RJU0FCTEVfTEFaWV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lBRkZTX0RJU0FCTEVfV0lERV9UTk9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfWUFGRlNfQUxXQVlTX0NIRUNLX0NIVU5LX0VSQVNFRCBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfU0hPUlRfTkFNRVNfSU5fUkFNPXkKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FCTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DUllQVEQ9bQorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPW0KKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPW0KKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCmluZGV4IDg4ZTVkMjguLjY3ZTY1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKQEAgLTEsNjkgKzEsOTYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNQotIyBNb24gSmFuICA5IDIxOjUxOjMxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzcKKyMgV2VkIEphbiAgOSAyMjoxOToyNCAyMDA4CiAjCiBDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15CisjIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTgxLDYyICsxMDgsMTAxIEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfQVQ5MT15Ci1DT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKIAogIwotIyBBVDkxUk05MjAwIEltcGxlbWVudGF0aW9ucworIyBCb290IG9wdGlvbnMKICMKIAogIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIwogIyBBVDkxUk05MjAwIEJvYXJkIFR5cGUKICMKKyMgQ09ORklHX01BQ0hfT05FQVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0NTQjMzNz15CiAjIENPTkZJR19NQUNIX0NTQjYzNyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0NBUk1FVkEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9LQjkyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9BVEVCOTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0tCOTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BJQ09UVVgyWFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9LQUZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hPTUVNQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VDQkFUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TV0VEQVRNUyBpcyBub3Qgc2V0CiAKICMKLSMgQVQ5MVJNOTIwMCBGZWF0dXJlIFNlbGVjdGlvbnMKKyMgQVQ5MSBCb2FyZCBPcHRpb25zCisjCisKKyMKKyMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKICMKIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1M9eQorIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAorQ09ORklHX0FUOTFfVElNRVJfSFo9MTI4CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKIENPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKIENPTkZJR19DUFVfQ0FDSEVfVjRXVD15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQogCiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwpAQCAtMTQ1LDE1ICsyMTEsMTMgQEAKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQogIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQpAQCAtMTY4LDggKzIzMiwxMyBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTc4LDkgKzI0NywxMyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKQEAgLTE5MSw2ICsyNjQsNyBAQAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDM4NDAwIGluaXRyZD0weDIwNDEwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTIxNSw2ICsyODksNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yMjcsNiArMzAyLDEwIEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTI0MywyMyArMzIyLDI2IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNjksMTMgKzM1MSw4IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTI4NSw3ICszNjIsMTcgQEAKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0yOTQsMTkgKzM4MSwxNCBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldApAQCAtMzE5LDExICs0MDEsMTQgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtMzQ5LDE1ICs0MzQsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAogQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldApAQCAtMzY4LDcgKzQ1Miw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtMzc4LDI5ICs0NjEsMTUgQEAKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0ggaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldApAQCAtNDA5LDEzICs0NzgsMTIgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfU1NDPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQyMyw2ICs0OTEsOSBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC00NDEsOTcgKzUxMiw2MSBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIworIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19BUk1fQVQ5MV9FVEhFUj15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorQ09ORklHX05FVERFVl8xMDAwMD15CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgV2lyZWxlc3MgTEFOCiAjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNTM5LDI2ICs1NzQsMjMgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKIENPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTU2OCw2ICs2MDAsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC01ODMsNiArNjE2LDcgQEAKIENPTkZJR19WVD15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjAxLDE1ICs2MzUsNjkgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKLSMgV2F0Y2hkb2cgQ2FyZHMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9TUEk9eQorQ09ORklHX0FUOTFfU1BJREVWPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfR1BJTz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CiAKQEAgLTYyMywxMzAgKzcxMSwzOCBAQAogIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKICMKICMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ5MV9TUEk9eQotQ09ORklHX0FUOTFfU1BJREVWPXkKLQotIwotIyBJMkMgc3VwcG9ydAotIwotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSTJDX0FUOTE9eQotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydApAQCAtNzU4LDEyICs3NTQsMjUgQEAKICMgU291bmQKICMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKIApAQCAtNzcxLDcgKzc4MCw3IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKQEAgLTc4MCw5ICs3ODksMTEgQEAKICMKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtODAxLDU5ICs4MTIsMjEgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCiAjCkBAIC04NjYsMTUgKzgzOSwxOCBAQAogQ09ORklHX1VTQl9TRVJJQUw9eQogQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89eQorIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldApAQCAtODk5LDE0ICs4NzUsMjAgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj15CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VaVVNCPXkKIAogIwpAQCAtOTE0LDE2ICs4OTYsMjIgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM0LDEzICs5MjIsMTkgQEAKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCiBDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15CiBDT05GSUdfVVNCX0FUOTE9eQogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldApAQCAtOTUwLDIyICs5NDQsMjggQEAKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIworIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19BVDkxUk05MjAwPXkKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgTU1DL1NEIENhcmQgRHJpdmVycwogIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQogQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMSIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgUlRDIGludGVyZmFjZXMKQEAgLTk3NCwzOSArOTc0LDYwIEBACiBDT05GSUdfUlRDX0lOVEZfUFJPQz15CiBDT05GSUdfUlRDX0lOVEZfREVWPXkKICMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIFJUQyBkcml2ZXJzCisjIEkyQyBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtMTAzMCwxMSArMTA1MSwxMiBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwNDYsNyArMTA2OCw2IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTA1NCwxMCArMTA3NSw3IEBACiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CkBAIC0xMDcwLDYgKzEwODgsNyBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA3Nyw0MyArMTA5Niw1NiBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNUUlVNRU5UQVRJT049eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CkBAIC0xMTI0LDEyICsxMTU2LDEzIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtMTEzOCw3ICsxMTcxLDE1IEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKQEAgLTExNDksMjAgKzExOTAsMjcgQEAKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZwppbmRleCA2NjlmMDM1Li45OTcwMjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCkBAIC0xLDY5ICsxLDExMiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1Ci0jIE1vbiBKYW4gIDkgMjE6NTI6MDAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjOAorIyBGcmkgQXByICA0IDIyOjA2OjE1IDIwMDgKICMKIENPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC03Nyw2NiArMTIwLDExMSBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgU3lzdGVtIFR5cGUKICMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CiAjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0FUOTE9eQotQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CisjIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKIAogIwotIyBBVDkxUk05MjAwIEltcGxlbWVudGF0aW9ucworIyBCb290IG9wdGlvbnMKICMKIAogIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAorQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQorCisjCiAjIEFUOTFSTTkyMDAgQm9hcmQgVHlwZQogIworIyBDT05GSUdfTUFDSF9PTkVBUk0gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwREsgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfQ1NCNjM3PXkKICMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0tCOTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0FURUI5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUElDT1RVWDJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAogCiAjCi0jIEFUOTFSTTkyMDAgRmVhdHVyZSBTZWxlY3Rpb25zCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCiAjCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKK0NPTkZJR19BVDkxX1RJTUVSX0haPTEyOAorQ09ORklHX0FUOTFfRUFSTFlfREJHVT15CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKIENPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKLUNPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKIENPTkZJR19DUFVfQ0FDSEVfVjRXVD15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQogCiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwpAQCAtMTQ1LDE1ICsyMzMsMTMgQEAKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQogIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQpAQCAtMTY4LDggKzI1NCwxMyBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTc4LDkgKzI2OSwxMyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKQEAgLTE5MSw2ICsyODYsNyBAQAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDM4NDAwIGluaXRyZD0weDIwNDEwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTIxNSw2ICszMTEsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTIyNyw2ICszMjQsMTEgQEAKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTI0MywyMyArMzQ1LDI2IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNjksMTMgKzM3NCw4IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTI4Myw5ICszODMsMjAgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0yOTQsMTkgKzQwNSwxNCBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldApAQCAtMzE5LDExICs0MjUsMTQgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtMzQ5LDE1ICs0NTgsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAogQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldApAQCAtMzY4LDcgKzQ3Niw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtMzc3LDMwICs0ODQsMTUgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0ggaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldApAQCAtNDA5LDEzICs1MDEsMTUgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BVE1FTF9QV00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMX1NTQyBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQyMyw2ICs1MTcsOSBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC00NDEsMTE0ICs1MzgsNzggQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CiBDT05GSUdfQVJNX0FUOTFfRVRIRVI9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBXaXJlbGVzcyBMQU4KICMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTU4LDcgKzYxOSw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNTY4LDYgKzYyOCw3IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTU4Myw2ICs2NDQsNyBAQAogQ09ORklHX1ZUPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01OTUsNjQgKzY1NywyOSBAQAogIwogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQogIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HPXkKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDPXkKLSMgQ09ORklHX0FUOTFSTTkyMDBfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotCi0jCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19BVDkxX1NQST15Ci1DT05GSUdfQVQ5MV9TUElERVY9eQotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiBDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiAKICMKQEAgLTY2NSw0MyArNjkyLDUzIEBACiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIwotQ09ORklHX0kyQ19BVDkxPXkKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjIFNQSSBzdXBwb3J0CiAjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTcxNSwzOSArNzUyLDcyIEBACiAjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0FUOTFSTTkyMDBfV0FUQ0hET0c9eQogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKICMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC03NTksMjAgKzgyOSwzNCBAQAogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCkBAIC03ODEsOSArODY1LDExIEBACiAjCiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTgwMiw4MCArODg4LDQyIEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogQ09ORklHX1VTQl9TRVJJQUw9eQogQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15CitDT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQU5ZREFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz15CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CkBAIC04ODMsNiArOTMxLDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPXkKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fTVBSPXkKQEAgLTkwMCw0NiArOTQ5LDY2IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9eQorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVpVU0I9eQorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIExFRCBkcml2ZXJzCiAjCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTQ4LDE2ICsxMDE3LDE3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtOTc5LDExICsxMDQ5LDEyIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTk1LDE4ICsxMDY2LDE2IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CkBAIC0xMDE5LDYgKzEwODgsNyBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTAyNiw0NSArMTA5Niw1NyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKICMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKIApAQCAtMTA3MywxMiArMTE1NSwxNCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC0xMDg3LDcgKzExNzEsMTggQEAKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldApAQCAtMTA5OCwyMCArMTE5MywyOSBAQAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VjYmF0OTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lY2JhdDkxX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGVkMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lY2JhdDkxX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEzMTUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzQKKyMgU2F0IEp1biAgOSAwMTozMDoxOCAyMDA3CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05UkwgaXMgbm90IHNldAorCisjCisjIEFUOTFSTTkyMDAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9PTkVBUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwREsgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BVDkxUk05MjAwRUsgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DU0IzMzcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DU0I2MzcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DQVJNRVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVRFQjkyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9LQjkyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QSUNPVFVYMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfS0FGQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NIVUIgaXMgbm90IHNldAorQ09ORklHX01BQ0hfRUNCQVQ5MT15CisKKyMKKyMgQVQ5MSBCb2FyZCBPcHRpb25zCisjCisjIENPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKK0NPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1M9eQorIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTIwVD15CitDT05GSUdfQ1BVXzMydjRUPXkKK0NPTkZJR19DUFVfQUJSVF9FVjRUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXVD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKK0NPTkZJR19BVDkxX0NGPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290ZnN0eXBlPXJlaXNlcmZzIHJvb3Q9L2Rldi9tbWNibGswcDEgY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290ZGVsYXk9MSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCitDT05GSUdfQ0ZHODAyMTE9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfTUFDODAyMTE9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMT15CisjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQorIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVAgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVAgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPXkKK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRz15CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9BRlNfUEFSVFM9eQorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfREFUQUZMQVNIPXkKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0FSTV9BVDkxX0VUSEVSPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPXkKK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9eQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9eQorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxUk05MjAwX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfR1BJTz15CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0FUTUVMIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfQklUQkFORz15CitDT05GSUdfU1BJX0FUOTE9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfQkxJTksgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKyMgQ09ORklHX0xFRFNfVFJJR0dFUlMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorQ09ORklHX1VTQl9QUklOVEVSPXkKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0FUOTE9eQorQ09ORklHX1VTQl9BVDkxPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfREVCVUc9eQorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19BVDkxPXkKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPXkKKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKaW5kZXggYTBmNDhkNS4uYWU1MWE0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCkBAIC01ODcsMTQgKzU4NywxNCBAQAogIwogIyBJMkMgQWxnb3JpdGhtcwogIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19BTEdPQklUPXkKICMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfQVQ5MT15CitDT05GSUdfSTJDX0dQSU89eQogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tYWdpY2lhbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDExNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tYWdpY2lhbl9kZWZjb25maWcKQEAgLTAsMCArMSwxMTgyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2CisjIFN1biBEZWMgMzAgMTM6MDI6NTQgMjAwNworIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorQ09ORklHX01BQ0hfTUFHSUNJQU49eQorQ09ORklHX1BYQTI3eD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfWFNDQUxFX1BNVT15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImtlZXBpbml0cmQiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX0FQTV9FTVVMQVRJT049eQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCisjIENPTkZJR19JUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfSVJDT01NPW0KK0NPTkZJR19JUkRBX1VMVFJBPXkKKworIworIyBJckRBIG9wdGlvbnMKKyMKK0NPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15CitDT05GSUdfSVJEQV9GQVNUX1JSPXkKK0NPTkZJR19JUkRBX0RFQlVHPXkKKworIworIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCisjCisKKyMKKyMgU0lSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfSVJUVFlfU0lSPW0KKworIworIyBEb25nbGUgc3VwcG9ydAorIworIyBDT05GSUdfRE9OR0xFIGlzIG5vdCBzZXQKKworIworIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKKworIworIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0CisjCisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfUFhBX0ZJQ1A9bQorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CitDT05GSUdfTVREX0RFQlVHPXkKK0NPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDQwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAorIyBDT05GSUdfTVREX1BYQTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1BYQTI3eCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9VSU5QVVQ9bQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CisjIENPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPW0KKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX1cxPXkKKworIworIyAxLXdpcmUgQnVzIE1hc3RlcnMKKyMKKyMgQ09ORklHX1cxX01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAorQ09ORklHX1cxX01BU1RFUl9EUzFXTT15CisKKyMKKyMgMS13aXJlIFNsYXZlcworIworIyBDT05GSUdfVzFfU0xBVkVfVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfU01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9EUzI0MzMgaXMgbm90IHNldAorQ09ORklHX1cxX1NMQVZFX0RTMjc2MD15CitDT05GSUdfUE9XRVJfU1VQUExZPXkKKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUERBX1BPV0VSPXkKKyMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0CitDT05GSUdfQkFUVEVSWV9EUzI3NjA9eQorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CitDT05GSUdfSFRDX0VHUElPPXkKK0NPTkZJR19IVENfUEFTSUMzPXkKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9DT1JHST15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF9NSU5JXzR4Nj15CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9eQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgQUxTQSBBUk0gZGV2aWNlcworIworIyBDT05GSUdfU05EX1BYQTJYWF9BQzk3IGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0CisjCitDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX1BYQTJYWF9TT0M9bQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0hJRD1tCisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPW0KKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfUFhBPXkKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorQ09ORklHX1JUQ19ERUJVRz15CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TQTExMDA9eQorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1ZNPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uczl4eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uczl4eHhfZGVmY29uZmlnCmluZGV4IDBlNTc5NGMuLjdkYzE1ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbnM5eHh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25zOXh4eF9kZWZjb25maWcKQEAgLTEsNjIxICsxLDc5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVGh1IEZlYiAxNSAyMDo1MTo0NyAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQogIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OUzlYWFg9eQotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotCi0jCi0jIE5TOXh4eCBJbXBsZW1lbnRhdGlvbnMKLSMKK0NPTkZJR19NQUNIX0E5TTkzNjA9eQorQ09ORklHX01BQ0hfQTlNOTc1MD15CitDT05GSUdfTUFDSF9DQzdVQ0FNUlk9eQorQ09ORklHX01BQ0hfQ0M5Qz15CitDT05GSUdfTUFDSF9DQzlQOTIxMD15CitDT05GSUdfTUFDSF9DQzlQOTIxMEpTPXkKK0NPTkZJR19NQUNIX0NDOVA5MjE1PXkKK0NPTkZJR19NQUNIX0NDOVA5MjE1SlM9eQogQ09ORklHX01BQ0hfQ0M5UDkzNjBERVY9eQotQ09ORklHX1BST0NFU1NPUl9OUzkzNjA9eQotQ09ORklHX0JPQVJEX0E5TTk3NTBERVY9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfQVJNOTI2VD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX0NPUFlfVjRXQj15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKK0NPTkZJR19NQUNIX0NDOVA5MzYwSlM9eQorQ09ORklHX01BQ0hfQ0M5UDkzNjBWQUw9eQorQ09ORklHX01BQ0hfQ0M5UDk3NTBERVY9eQorQ09ORklHX01BQ0hfQ0M5UDk3NTBWQUw9eQorQ09ORklHX01BQ0hfQ0NXOUM9eQorQ09ORklHX01BQ0hfSU5DMjBPVFRFUj15CitDT05GSUdfTUFDSF9PVFRFUj15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwotIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQorQ09ORklHX05FVD15CitDT05GSUdfUEFDS0VUPW0KK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19NVEQ9bQorQ09ORklHX01URF9DT05DQVQ9bQorQ09ORklHX01URF9DSEFSPW0KK0NPTkZJR19NVERfQkxPQ0s9bQorQ09ORklHX01URF9DRkk9bQorQ09ORklHX01URF9KRURFQ1BST0JFPW0KK0NPTkZJR19NVERfQ0ZJX0FNRFNURD1tCitDT05GSUdfTVREX1BIWVNNQVA9bQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19OUzlYWFhfRVRIPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19TRVJJQUxfTlM5MjFYPXkKK0NPTkZJR19TRVJJQUxfTlM5MjFYX0NPTlNPTEU9eQogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKK0NPTkZJR19BRENfTlM5MjE1PW0KK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19HUElPPW0KICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPW0KK0NPTkZJR19MRURTX0dQSU89bQorQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCitDT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfRFJWX05TOTIxNT1tCitDT05GSUdfRVhUMl9GUz1tCiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9bQorQ09ORklHX05GU19GUz15CitDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0RFQlVHX0lDRURDQz15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19JT01BUF9DT1BZPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwppbmRleCBjMjM0NWFmLi4zMjNjMWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNQotIyBNb24gRGVjIDE3IDIwOjA0OjM4IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzMKKyMgTW9uIE1hciAgMyAwMzozOTo0OCAyMDA4CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CkBAIC0yMSw2ICsyMSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtNDAsMTcgKzQxLDIyIEBACiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC02NCwxNyArNzAsMjYgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMDIsNiArMTE3LDggQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMzAsNiArMTQ3LDcgQEAKICMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT04gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKQEAgLTEzOSw2ICsxNTcsNyBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAogCiAjCiAjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCkBAIC0xNTUsNiArMTc0LDcgQEAKICMgQ09ORklHX09NQVBfTVVYX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CiBDT05GSUdfT01BUF9NQ0JTUD15CisjIENPTkZJR19PTUFQX01NVV9GV0sgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKIENPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKQEAgLTI2Niw2ICsyODYsNyBAQAogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290PTA4MDEgcm8gaW5pdD0vYmluL3NoIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFHU19QUk9DIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTMxMSw5ICszMzIsMTAgQEAKICMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQogQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTMzMCw2ICszNTIsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTM4NCw2ICs0MDcsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00MjEsMTEgKzQ0NSwxMyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC00ODksNiArNTE1LDcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogCiAjCkBAIC01MTIsNyArNTM5LDYgQEAKIENPTkZJR19TTEhDPXkKICMgQ09ORklHX1NMSVBfU01BUlQgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUF9NT0RFX1NMSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC02MTYsMTIgKzY0MiwxMCBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfVFBTNjUwMTA9eQpAQCAtNjQ5LDYgKzY3Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtNjc2LDYgKzcwMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CkBAIC02ODMsNiArNzA5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldApAQCAtNzA1LDYgKzczMiw3IEBACiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODAyLDEwICs4MzAsNiBAQAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC04MjYsMTIgKzg1MCwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotQ09ORklHX1JPTUZTX0ZTPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC04NzQsOCArODk2LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CkBAIC05NDYsOSArOTcwLDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC05NzUsNiArOTk2LDcgQEAKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CkBAIC05OTIsNiArMTAxNCw5IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xMDA2LDEyICsxMDMxLDE0IEBACiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9vc2tfNTkxMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnCmluZGV4IGQ1OTJhNjQuLmQ0Y2E1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9vc2tfNTkxMl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzUKLSMgTW9uIERlYyAxNyAyMToxMjo0NSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmMzCisjIE1vbiBNYXIgIDMgMDM6MzU6MTcgMjAwOAogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQpAQCAtMjEsNiArMjEsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTM5LDE3ICs0MCwyMiBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNjMsMTcgKzY5LDI2IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTAxLDYgKzExNiw4IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIFR5cGUKQEAgLTEyOSw2ICsxNDYsNyBAQAogIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldApAQCAtMTM4LDYgKzE1Niw3IEBACiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CiAKICMKICMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKQEAgLTE1NCw2ICsxNzMsNyBAQAogIyBDT05GSUdfT01BUF9NVVhfREVCVUcgaXMgbm90IHNldAogQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKIENPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTU1VX0ZXSyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CiBDT05GSUdfT01BUF8zMktfVElNRVI9eQogQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOApAQCAtMTczLDEzICsxOTMsMTMgQEAKICMKICMgT01BUCBCb2FyZCBUeXBlCiAjCi0jIENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfT01BUF9IMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfSDMgaXMgbm90IHNldAorQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1I9eQorQ09ORklHX01BQ0hfT01BUF9IMj15CitDT05GSUdfTUFDSF9PTUFQX0gzPXkKIENPTkZJR19NQUNIX09NQVBfT1NLPXkKICMgQ09ORklHX09NQVBfT1NLX01JU1RSQUwgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9OT0tJQTc3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX09NQVBfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9OT0tJQTc3MD15CitDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUM9eQogCiAjCiAjIE9NQVAgQ1BVIFNwZWVkCkBAIC0yNzUsNiArMjk1LDcgQEAKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDEwNDAwMDAwLDhNIHJvb3Q9L2Rldi9yYW0wIHJ3IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFHU19QUk9DIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTMwNyw5ICszMjgsMTAgQEAKICMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQogQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTMyNiw2ICszNDgsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zODEsNiArNDA0LDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtNDkzLDExICs1MTcsMTMgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPW0KIENPTkZJR19CTEtfREVWX0lERT1tCiAKQEAgLTUxOSw3ICs1NDUsNiBAQAogIwogIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNTUzLDYgKzU3OCw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwpAQCAtNTc0LDcgKzYwMCw2IEBACiAjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPXkKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC02NzEsNiArNjk2LDcgQEAKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CkBAIC02OTgsMTIgKzcyNCwxMCBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfVFBTNjUwMTA9eQpAQCAtNzMxLDYgKzc1NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtNzU4LDYgKzc4Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CkBAIC03NjUsNiArNzkxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldApAQCAtNzgwLDYgKzgwNyw3IEBACiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODY1LDEwICs4OTMsNiBAQAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC04ODksMTIgKzkxMywxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPXkKIENPTkZJR19BVVRPRlM0X0ZTPXkKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtOTQ4LDggKzk3MCwxMCBAQAogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTAxOSw5ICsxMDQzLDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDQ1LDcgKzEwNjYsNTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmNkOTliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDEzODMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAorIyBUaHUgRmViICA3IDE0OjEwOjMwIDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09SSU9ONVg9eQorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAorCisjCisjIE9yaW9uIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX01BQ0hfREI4OEY1MjgxPXkKK0NPTkZJR19NQUNIX1JEODhGNTE4Mj15CitDT05GSUdfTUFDSF9LVVJPQk9YX1BSTz15CitDT05GSUdfTUFDSF9ETlMzMjM9eQorQ09ORklHX01BQ0hfVFMyMDk9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0ZFUk9DRU9OPXkKK0NPTkZJR19DUFVfRkVST0NFT05fT0xEX0lEPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfTEVEUz15CitDT05GSUdfTEVEU19DUFU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQVRBR1NfUFJPQyBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CitDT05GSUdfVkZQPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorQ09ORklHX0ZUTD15CitDT05GSUdfTkZUTD15CisjIENPTkZJR19ORlRMX1JXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorQ09ORklHX01URF9DRklfSTQ9eQorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX0NGSV9TVEFBPXkKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfT1JJT049eQorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPW0KKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX01WPXkKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CitDT05GSUdfRTEwMDBfTkFQST15CisjIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CitDT05GSUdfU0tHRT15CitDT05GSUdfU0tZMj15CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CitDT05GSUdfVElHT04zPXkKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX01WNjQzWFhfRVRIPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVY2NFhYWD15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorQ09ORklHX1VTQl9QUklOVEVSPXkKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlM1QzM3Mj15CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX000MVQ4MD15CisjIENPTkZJR19SVENfRFJWX000MVQ4MF9XRFQgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKKyMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19CU0RfRElTS0xBQkVMPXkKK0NPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQorQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CitDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKK0NPTkZJR19MRE1fUEFSVElUSU9OPXkKK0NPTkZJR19MRE1fREVCVUc9eQorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb25fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNWFhYTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vcmlvbl9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgzICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAotIyBUaHUgRmViICA3IDE0OjEwOjMwIDIwMDgKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09SSU9OPXkKLSMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKLQotIwotIyBPcmlvbiBJbXBsZW1lbnRhdGlvbnMKLSMKLUNPTkZJR19NQUNIX0RCODhGNTI4MT15Ci1DT05GSUdfTUFDSF9SRDg4RjUxODI9eQotQ09ORklHX01BQ0hfS1VST0JPWF9QUk89eQotQ09ORklHX01BQ0hfRE5TMzIzPXkKLUNPTkZJR19NQUNIX1RTMjA5PXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9GRVJPQ0VPTj15Ci1DT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0xFRFM9eQotQ09ORklHX0xFRFNfQ1BVPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUdTX1BST0MgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotQ09ORklHX1ZGUD15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi1DT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19GVEw9eQotQ09ORklHX05GVEw9eQotIyBDT05GSUdfTkZUTF9SVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9HRU9NRVRSWT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLUNPTkZJR19NVERfQ0ZJX0k0PXkKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotQ09ORklHX01URF9DRklfU1RBQT15Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX09SSU9OPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj1tCi0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz1tCi0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLUNPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci1DT05GSUdfU0FUQV9NVj15Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci1DT05GSUdfRTEwMDA9eQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotQ09ORklHX1NLR0U9eQotQ09ORklHX1NLWTI9eQotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotQ09ORklHX1RJR09OMz15Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19NVjY0M1hYX0VUSD15Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX01WNjRYWFg9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfUFJJTlRFUj15Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0jIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi1DT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfRFJWX1JTNUMzNzI9eQotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9NNDFUODA9eQotIyBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfSVNPOTY2MF9GUz15Ci0jIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfQlNEX0RJU0tMQUJFTD15Ci1DT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKLUNPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQotQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15Ci1DT05GSUdfTERNX1BBUlRJVElPTj15Ci1DT05GSUdfTERNX0RFQlVHPXkKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfU1VOX1BBUlRJVElPTj15Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMj15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9waWNvdHV4MjAwX2RlZmNvbmZpZwppbmRleCAzYzBjNGYxLi45NWEyMmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcKQEAgLTcyNywxNCArNzI3LDE0IEBACiAjCiAjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0FMR09CSVQ9bQogIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIwotQ09ORklHX0kyQ19BVDkxPW0KK0NPTkZJR19JMkNfR1BJTz1tCiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtOV9sOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NhbTlfbDkyNjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGRjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3NhbTlfbDkyNjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA5OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCisjIFN1biBPY3QgMTQgMDI6MDE6MDcgMjAwNworIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MU0Y9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxPXkKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisKKyMKKyMgQVQ5MVNBTTkyNjAgVmFyaWFudHMKKyMKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjBfU0FNOVhFIGlzIG5vdCBzZXQKKworIworIyBBVDkxU0FNOTI2MCAvIEFUOTFTQU05WEUgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ0FNNjAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfU0FNOV9MOTI2MD15CisKKyMKKyMgQVQ5MSBCb2FyZCBPcHRpb25zCisjCitDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQ9eQorCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19MRURTPXkKK0NPTkZJR19MRURTX1RJTUVSPXkKK0NPTkZJR19MRURTX0NQVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTY0TSBpbml0cmQ9MHgyMTEwMDAwMCw0MTk0MzA0IHJvb3Q9L2Rldi9yYW0wIHJ3IgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19WRlAgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMT0NLMk1URD15CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9BVDkxPXkKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0zCitDT05GSUdfTVREX1VCSV9HTFVFQkk9eQorCisjCisjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucworIworIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPXkKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQVRNRUw9eQorQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworQ09ORklHX0xFRFNfR1BJTz15CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15CitDT05GSUdfVVNCX0FUOTE9eQorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfREVCVUc9eQorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19BVDkxPXkKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0RTMTU1Mz15CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0RTMTc0Mj15CitDT05GSUdfUlRDX0RSVl9NNDhUODY9eQorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVjMwMjA9eQorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX0RJUkVDVElPPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PXkKK0NPTkZJR19OTFNfSVNPODg1OV84PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9eQorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj15CitDT05GSUdfTkxTX0lTTzg4NTlfMz15CitDT05GSUdfTkxTX0lTTzg4NTlfND15CitDT05GSUdfTkxTX0lTTzg4NTlfNT15CitDT05GSUdfTkxTX0lTTzg4NTlfNj15CitDT05GSUdfTkxTX0lTTzg4NTlfNz15CitDT05GSUdfTkxTX0lTTzg4NTlfOT15CitDT05GSUdfTkxTX0lTTzg4NTlfMTM9eQorQ09ORklHX05MU19JU084ODU5XzE0PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CitDT05GSUdfTkxTX0tPSThfUj15CitDT05GSUdfTkxTX0tPSThfVT15CitDT05GSUdfTkxTX1VURjg9eQorCisjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy90Y3RfaGFtbWVyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2YjgzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKQEAgLTAsMCArMSw4ODYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzctaGFtbWVyCisjIFRodSBNYXIgMjcgMTY6Mzk6NDggMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKKyMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorQ09ORklHX1NMT0I9eQorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TM0MyNDEwPXkKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CitDT05GSUdfUExBVF9TM0MyNFhYPXkKKyMgQ09ORklHX1MzQzI0MTBfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19QTEFUX1MzQz15CitDT05GSUdfQ1BVX0xMU0VSSUFMX1MzQzI0MTBfT05MWT15CitDT05GSUdfQ1BVX0xMU0VSSUFMX1MzQzI0MTA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworIyBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKK0NPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUPTAKKworIworIyBTM0MyNDAwIE1hY2hpbmVzCisjCitDT05GSUdfQ1BVX1MzQzI0MTA9eQorQ09ORklHX1MzQzI0MTBfR1BJTz15CitDT05GSUdfUzNDMjQxMF9DTE9DSz15CisKKyMKKyMgUzNDMjQxMCBNYWNoaW5lcworIworIyBDT05GSUdfQVJDSF9TTURLMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0gxOTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkFTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09UT00gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BTUxfTTU5MDAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVENUX0hBTU1FUj15CisjIENPTkZJR19NQUNIX1ZSMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1FUMjQxMCBpcyBub3Qgc2V0CisKKyMKKyMgUzNDMjQxMiBNYWNoaW5lcworIworIyBDT05GSUdfTUFDSF9TTURLMjQxMyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NNREsyNDEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlNUTVMgaXMgbm90IHNldAorCisjCisjIFMzQzI0NDAgTWFjaGluZXMKKyMKKyMgQ09ORklHX01BQ0hfQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT1NJUklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUlgzNzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQ0MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX05FWENPREVSXzI0NDAgaXMgbm90IHNldAorCisjCisjIFMzQzI0NDIgTWFjaGluZXMKKyMKKworIworIyBTM0MyNDQzIE1hY2hpbmVzCisjCisjIENPTkZJR19NQUNIX1NNREsyNDQzIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyMFQ9eQorQ09ORklHX0NQVV8zMnY0VD15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJtZW09NjRNIHJvb3Q9L2Rldi9yYW0wIGluaXQ9L2xpbnV4cmMgcnciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEwMjQwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorIyBDT05GSUdfVlRfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUzNDMjQxMD15CitDT05GSUdfU0VSSUFMX1MzQzI0MTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0RFQlVHPXkKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1MzQzI0MTA9eQorQ09ORklHX1VTQl9TM0MyNDEwPXkKKyMgQ09ORklHX1VTQl9TM0MyNDEwX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX1NZU0NUTCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1MzQ19QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TM0NfVUFSVD0wCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy95bDkyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy95bDkyMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZGUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3lsOTIwMF9kZWZjb25maWcKQEAgLTAsMCArMSwxMjE2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2CisjIEZyaSBKYW4gMTEgMDk6NTM6NTkgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxPXkKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCitDT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAorQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQorCisjCisjIEFUOTFSTTkyMDAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9PTkVBUk0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLPXkKKyMgQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNjM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FURUI5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUElDT1RVWDJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAorQ09ORklHX01BQ0hfWUw5MjAwPXkKKworIworIyBBVDkxIEJvYXJkIE9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKKworIworIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyMFQ9eQorQ09ORklHX0NQVV8zMnY0VD15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX0haPTEwMAorIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjA0MTAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorQ09ORklHX01URF9QTEFUUkFNPXkKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKK0NPTkZJR19NVERfTkFORF9BVDkxPXkKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MworQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19EQVZJQ09NX1BIWT15CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19BUk1fQVQ5MV9FVEhFUj15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9NjQwCitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NDgwCisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQVRNRUw9eQorQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9ERUJVRz15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVRNRUw9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TMUQxMzVYWD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKK0NPTkZJR19VU0JfTTY2NTkyPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19ERUJVRz15CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CisjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX0FUOTE9eQorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworQ09ORklHX0xFRFNfR1BJTz15CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CitDT05GSUdfUkVJU0VSRlNfRlM9eQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTEKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorQ09ORklHX0lOU1RSVU1FTlRBVElPTj15CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCX0RFQlVHX09OPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tPQkpFQ1Q9eQorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xJU1Q9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMDBkNDRjNi4uYWQ0NTVmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKIG9iai15CQk6PSBjb21wYXQubyBlbnRyeS1hcm12Lm8gZW50cnktY29tbW9uLm8gaXJxLm8gXAotCQkgICBwcm9jZXNzLm8gcHRyYWNlLm8gc2VtYXBob3JlLm8gc2V0dXAubyBzaWduYWwubyBcCisJCSAgIHByb2Nlc3MubyBwdHJhY2UubyBzZXR1cC5vIHNpZ25hbC5vIFwKIAkJICAgc3lzX2FybS5vIHN0YWNrdHJhY2UubyB0aW1lLm8gdHJhcHMubwogCiBvYmotJChDT05GSUdfSVNBX0RNQV9BUEkpCSs9IGRtYS5vCkBAIC0yMiw2ICsyMiw3IEBACiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubyBrcHJvYmVzLWRlY29kZS5vCiBvYmotJChDT05GSUdfQVRBR1NfUFJPQykJKz0gYXRhZ3Mubwogb2JqLSQoQ09ORklHX09BQklfQ09NUEFUKQkrPSBzeXNfb2FiaS1jb21wYXQubworb2JqLSQoQ09ORklHX0FSTV9USFVNQkVFKQkrPSB0aHVtYmVlLm8KIAogb2JqLSQoQ09ORklHX0NSVU5DSCkJCSs9IGNydW5jaC5vIGNydW5jaC1iaXRzLm8KIEFGTEFHU19jcnVuY2gtYml0cy5vCQk6PSAtV2EsLW1jcHU9ZXA5MzEyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDMyNzhlNzEuLjBhMGQyNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC01OCw2ICs1OCw5IEBACiAgIERFRklORShUSV9UUF9WQUxVRSwJCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgdHBfdmFsdWUpKTsKICAgREVGSU5FKFRJX0ZQU1RBVEUsCQlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZwc3RhdGUpKTsKICAgREVGSU5FKFRJX1ZGUFNUQVRFLAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB2ZnBzdGF0ZSkpOworI2lmZGVmIENPTkZJR19BUk1fVEhVTUJFRQorICBERUZJTkUoVElfVEhVTUJFRV9TVEFURSwJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0aHVtYmVlX3N0YXRlKSk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfSVdNTVhUCiAgIERFRklORShUSV9JV01NWFRfU1RBVEUsCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZnBzdGF0ZS5pd21teHQpKTsKICNlbmRpZgpAQCAtMTA4LDUgKzExMSwxMiBAQAogICBERUZJTkUoUFJPQ0lORk9fSU5JVEZVTkMsCW9mZnNldG9mKHN0cnVjdCBwcm9jX2luZm9fbGlzdCwgX19jcHVfZmx1c2gpKTsKICAgREVGSU5FKFBST0NJTkZPX01NX01NVUZMQUdTLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY19pbmZvX2xpc3QsIF9fY3B1X21tX21tdV9mbGFncykpOwogICBERUZJTkUoUFJPQ0lORk9fSU9fTU1VRkxBR1MsCW9mZnNldG9mKHN0cnVjdCBwcm9jX2luZm9fbGlzdCwgX19jcHVfaW9fbW11X2ZsYWdzKSk7CisgIEJMQU5LKCk7CisjaWZkZWYgTVVMVElfREFCT1JUCisgIERFRklORShQUk9DRVNTT1JfREFCVF9GVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBfZGF0YV9hYm9ydCkpOworI2VuZGlmCisjaWZkZWYgTVVMVElfUEFCT1JUCisgIERFRklORShQUk9DRVNTT1JfUEFCVF9GVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBfcHJlZmV0Y2hfYWJvcnQpKTsKKyNlbmRpZgogICByZXR1cm4gMDsgCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCmluZGV4IDI4M2UxNGYuLjMwYTY3YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC0zMzYsNyArMzM2LDcgQEAKIAkJQ0FMTChzeXNfbWtub2RhdCkKIC8qIDMyNSAqLwlDQUxMKHN5c19mY2hvd25hdCkKIAkJQ0FMTChzeXNfZnV0aW1lc2F0KQotCQlDQUxMKHN5c19mc3RhdGF0NjQpCisJCUNBTEwoQUJJKHN5c19mc3RhdGF0NjQsICBzeXNfb2FiaV9mc3RhdGF0NjQpKQogCQlDQUxMKHN5c191bmxpbmthdCkKIAkJQ0FMTChzeXNfcmVuYW1lYXQpCiAvKiAzMzAgKi8JQ0FMTChzeXNfbGlua2F0KQpAQCAtMzU5LDkgKzM1OSwxMSBAQAogCQlDQUxMKHN5c19rZXhlY19sb2FkKQogCQlDQUxMKHN5c191dGltZW5zYXQpCiAJCUNBTEwoc3lzX3NpZ25hbGZkKQotLyogMzUwICovCUNBTEwoc3lzX25pX3N5c2NhbGwpCisvKiAzNTAgKi8JQ0FMTChzeXNfdGltZXJmZF9jcmVhdGUpCiAJCUNBTEwoc3lzX2V2ZW50ZmQpCiAJCUNBTEwoc3lzX2ZhbGxvY2F0ZSkKKwkJQ0FMTChzeXNfdGltZXJmZF9zZXR0aW1lKQorCQlDQUxMKHN5c190aW1lcmZkX2dldHRpbWUpCiAjaWZuZGVmIHN5c2NhbGxzX2NvdW50ZWQKIC5lcXUgc3lzY2FsbHNfcGFkZGluZywgKChOUl9zeXNjYWxscyArIDMpICYgfjMpIC0gTlJfc3lzY2FsbHMKICNkZWZpbmUgc3lzY2FsbHNfY291bnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggYTQ2ZDViNC4uN2RjYTIyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0xNjYsMTIgKzE2NiwxMiBAQAogCUAgVGhlIGFib3J0IGhhbmRsZXIgbXVzdCByZXR1cm4gdGhlIGFib3J0ZWQgYWRkcmVzcyBpbiByMCwgYW5kCiAJQCB0aGUgZmF1bHQgc3RhdHVzIHJlZ2lzdGVyIGluIHIxLiAgcjkgbXVzdCBiZSBwcmVzZXJ2ZWQuCiAJQAotI2lmZGVmIE1VTFRJX0FCT1JUCisjaWZkZWYgTVVMVElfREFCT1JUCiAJbGRyCXI0LCAuTENwcm9jZm5zCiAJbW92CWxyLCBwYwotCWxkcglwYywgW3I0XQorCWxkcglwYywgW3I0LCAjUFJPQ0VTU09SX0RBQlRfRlVOQ10KICNlbHNlCi0JYmwJQ1BVX0FCT1JUX0hBTkRMRVIKKwlibAlDUFVfREFCT1JUX0hBTkRMRVIKICNlbmRpZgogCiAJQApAQCAtMjA5LDE0ICsyMDksMTIgQEAKIAogCWlycV9oYW5kbGVyCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKKwlzdHIJcjgsIFt0c2ssICNUSV9QUkVFTVBUXQkJQCByZXN0b3JlIHByZWVtcHQgY291bnQKIAlsZHIJcjAsIFt0c2ssICNUSV9GTEFHU10JCUAgZ2V0IGZsYWdzCisJdGVxCXI4LCAjMAkJCQlAIGlmIHByZWVtcHQgY291bnQgIT0gMAorCW1vdm5lCXIwLCAjMAkJCQlAIGZvcmNlIGZsYWdzIHRvIDAKIAl0c3QJcjAsICNfVElGX05FRURfUkVTQ0hFRAogCWJsbmUJc3ZjX3ByZWVtcHQKLXByZWVtcHRfcmV0dXJuOgotCWxkcglyMCwgW3RzaywgI1RJX1BSRUVNUFRdCQlAIHJlYWQgcHJlZW1wdCB2YWx1ZQotCXN0cglyOCwgW3RzaywgI1RJX1BSRUVNUFRdCQlAIHJlc3RvcmUgcHJlZW1wdCBjb3VudAotCXRlcQlyMCwgcjcKLQlzdHJuZQlyMCwgW3IwLCAtcjBdCQkJQCBidWcoKQogI2VuZGlmCiAJbGRyCXIwLCBbc3AsICNTX1BTUl0JCUAgaXJxcyBhcmUgYWxyZWFkeSBkaXNhYmxlZAogCW1zcglzcHNyX2N4c2YsIHIwCkBAIC0yMzAsMTkgKzIyOCwxMSBAQAogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIHN2Y19wcmVlbXB0OgotCXRlcQlyOCwgIzAJCQkJQCB3YXMgcHJlZW1wdCBjb3VudCA9IDAKLQlsZHJlcQlyNiwgLkxDaXJxX3N0YXQKLQltb3ZuZQlwYywgbHIJCQkJQCBubwotCWxkcglyMCwgW3I2LCAjNF0JCQlAIGxvY2FsX2lycV9jb3VudAotCWxkcglyMSwgW3I2LCAjOF0JCQlAIGxvY2FsX2JoX2NvdW50Ci0JYWRkcwlyMCwgcjAsIHIxCi0JbW92bmUJcGMsIGxyCi0JbW92CXI3LCAjMAkJCQlAIHByZWVtcHRfc2NoZWR1bGVfaXJxCi0Jc3RyCXI3LCBbdHNrLCAjVElfUFJFRU1QVF0JCUAgZXhwZWN0cyBwcmVlbXB0X2NvdW50ID09IDAKKwltb3YJcjgsIGxyCiAxOglibAlwcmVlbXB0X3NjaGVkdWxlX2lycQkJQCBpcnEgZW4vZGlzYWJsZSBpcyBkb25lIGluc2lkZQogCWxkcglyMCwgW3RzaywgI1RJX0ZMQUdTXQkJQCBnZXQgbmV3IHRhc2tzIFRJX0ZMQUdTCiAJdHN0CXIwLCAjX1RJRl9ORUVEX1JFU0NIRUQKLQliZXEJcHJlZW1wdF9yZXR1cm4JCQlAIGdvIGFnYWluCisJbW92ZXEJcGMsIHI4CQkJCUAgZ28gYWdhaW4KIAliCTFiCiAjZW5kaWYKIApAQCAtMjkzLDcgKzI4Myw2IEBACiAJbXJzCXI5LCBjcHNyCiAJdHN0CXIzLCAjUFNSX0lfQklUCiAJYmljZXEJcjksIHI5LCAjUFNSX0lfQklUCi0JbXNyCWNwc3JfYywgcjkKIAogCUAKIAlAIHNldCBhcmdzLCB0aGVuIGNhbGwgbWFpbiBoYW5kbGVyCkBAIC0zMDEsNyArMjkwLDE1IEBACiAJQCAgcjAgLSBhZGRyZXNzIG9mIGZhdWx0aW5nIGluc3RydWN0aW9uCiAJQCAgcjEgLSBwb2ludGVyIHRvIHJlZ2lzdGVycyBvbiBzdGFjawogCUAKLQltb3YJcjAsIHIyCQkJCUAgYWRkcmVzcyAocGMpCisjaWZkZWYgTVVMVElfUEFCT1JUCisJbW92CXIwLCByMgkJCUAgcGFzcyBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisJbGRyCXI0LCAuTENwcm9jZm5zCisJbW92CWxyLCBwYworCWxkcglwYywgW3I0LCAjUFJPQ0VTU09SX1BBQlRfRlVOQ10KKyNlbHNlCisJQ1BVX1BBQk9SVF9IQU5ETEVSKHIwLCByMikKKyNlbmRpZgorCW1zcgljcHNyX2MsIHI5CQkJQCBNYXliZSBlbmFibGUgaW50ZXJydXB0cwogCW1vdglyMSwgc3AJCQkJQCByZWdzCiAJYmwJZG9fUHJlZmV0Y2hBYm9ydAkJQCBjYWxsIGFib3J0IGhhbmRsZXIKIApAQCAtMzIwLDE2ICszMTcsMTIgQEAKIAkuYWxpZ24JNQogLkxDY3JhbGlnbjoKIAkud29yZAljcl9hbGlnbm1lbnQKLSNpZmRlZiBNVUxUSV9BQk9SVAorI2lmZGVmIE1VTFRJX0RBQk9SVAogLkxDcHJvY2ZuczoKIAkud29yZAlwcm9jZXNzb3IKICNlbmRpZgogLkxDZnA6CiAJLndvcmQJZnBfZW50ZXIKLSNpZmRlZiBDT05GSUdfUFJFRU1QVAotLkxDaXJxX3N0YXQ6Ci0JLndvcmQJaXJxX3N0YXQKLSNlbmRpZgogCiAvKgogICogVXNlciBtb2RlIGhhbmRsZXJzCkBAIC00MDQsMTIgKzM5NywxMiBAQAogCUAgVGhlIGFib3J0IGhhbmRsZXIgbXVzdCByZXR1cm4gdGhlIGFib3J0ZWQgYWRkcmVzcyBpbiByMCwgYW5kCiAJQCB0aGUgZmF1bHQgc3RhdHVzIHJlZ2lzdGVyIGluIHIxLgogCUAKLSNpZmRlZiBNVUxUSV9BQk9SVAorI2lmZGVmIE1VTFRJX0RBQk9SVAogCWxkcglyNCwgLkxDcHJvY2ZucwogCW1vdglsciwgcGMKLQlsZHIJcGMsIFtyNF0KKwlsZHIJcGMsIFtyNCwgI1BST0NFU1NPUl9EQUJUX0ZVTkNdCiAjZWxzZQotCWJsCUNQVV9BQk9SVF9IQU5ETEVSCisJYmwJQ1BVX0RBQk9SVF9IQU5ETEVSCiAjZW5kaWYKIAogCUAKQEAgLTQ1NSwxMCArNDQ4LDYgQEAKIF9fdW5kX3VzcjoKIAl1c3JfZW50cnkKIAotCXRzdAlyMywgI1BTUl9UX0JJVAkJCUAgVGh1bWIgbW9kZT8KLQlibmUJX191bmRfdXNyX3Vua25vd24JCUAgaWdub3JlIEZQCi0Jc3ViCXI0LCByMiwgIzQKLQogCUAKIAlAIGZhbGwgdGhyb3VnaCB0byB0aGUgZW11bGF0aW9uIGNvZGUsIHdoaWNoIHJldHVybnMgdXNpbmcgcjkgaWYKIAlAIGl0IGhhcyBlbXVsYXRlZCB0aGUgaW5zdHJ1Y3Rpb24sIG9yIHRoZSBtb3JlIGNvbnZlbnRpb25hbCBscgpAQCAtNDY4LDcgKzQ1NywyNCBAQAogCUAKIAlhZHIJcjksIHJldF9mcm9tX2V4Y2VwdGlvbgogCWFkcglsciwgX191bmRfdXNyX3Vua25vd24KLTE6CWxkcnQJcjAsIFtyNF0KKwl0c3QJcjMsICNQU1JfVF9CSVQJCQlAIFRodW1iIG1vZGU/CisJc3ViZXEJcjQsIHIyLCAjNAkJCUAgQVJNIGluc3RyIGF0IExSIC0gNAorCXN1Ym5lCXI0LCByMiwgIzIJCQlAIFRodW1iIGluc3RyIGF0IExSIC0gMgorMToJbGRyZXF0CXIwLCBbcjRdCisJYmVxCWNhbGxfZnBlCisJQCBUaHVtYiBpbnN0cnVjdGlvbgorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA3CisyOglsZHJodAlyNSwgW3I0XSwgIzIKKwlhbmQJcjAsIHI1LCAjMHhmODAwCQkJQCBtYXNrIGJpdHMgMTExeCB4Li4uIC4uLi4gLi4uLgorCWNtcAlyMCwgIzB4ZTgwMAkJCUAgMzJiaXQgaW5zdHJ1Y3Rpb24gaWYgeHggIT0gMAorCWJsbwlfX3VuZF91c3JfdW5rbm93bgorMzoJbGRyaHQJcjAsIFtyNF0KKwlhZGQJcjIsIHIyLCAjMgkJCUAgcjIgaXMgUEMgKyAyLCBtYWtlIGl0IFBDICsgNAorCW9ycglyMCwgcjAsIHI1LCBsc2wgIzE2CisjZWxzZQorCWIJX191bmRfdXNyX3Vua25vd24KKyNlbmRpZgorCiAJQAogCUAgZmFsbHRocm91Z2ggdG8gY2FsbF9mcGUKIAlACkBAIC00NzcsMTAgKzQ4MywxNCBAQAogICogVGhlIG91dCBvZiBsaW5lIGZpeHVwIGZvciB0aGUgbGRydCBhYm92ZS4KICAqLwogCS5zZWN0aW9uIC5maXh1cCwgImF4IgotMjoJbW92CXBjLCByOQorNDoJbW92CXBjLCByOQogCS5wcmV2aW91cwogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmxvbmcJMWIsIDJiCisJLmxvbmcJMWIsIDRiCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDcKKwkubG9uZwkyYiwgNGIKKwkubG9uZwkzYiwgNGIKKyNlbmRpZgogCS5wcmV2aW91cwogCiAvKgpAQCAtNTA3LDkgKzUxNywxNiBAQAogICogIHIxMCA9IHRoaXMgdGhyZWFkcyB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUuCiAgKiAgbHIgID0gdW5yZWNvZ25pc2VkIGluc3RydWN0aW9uIHJldHVybiBhZGRyZXNzCiAgKi8KKwlACisJQCBGYWxsLXRocm91Z2ggZnJvbSBUaHVtYi0yIF9fdW5kX3VzcgorCUAKKyNpZmRlZiBDT05GSUdfTkVPTgorCWFkcglyNiwgLkxDbmVvbl90aHVtYl9vcGNvZGVzCisJYgkyZgorI2VuZGlmCiBjYWxsX2ZwZToKICNpZmRlZiBDT05GSUdfTkVPTgotCWFkcglyNiwgLkxDbmVvbl9vcGNvZGVzCisJYWRyCXI2LCAuTENuZW9uX2FybV9vcGNvZGVzCiAyOgogCWxkcglyNywgW3I2XSwgIzQJCQlAIG1hc2sgdmFsdWUKIAljbXAJcjcsICMwCQkJCUAgZW5kIG1hc2s/CkBAIC01MjYsNiArNTQzLDcgQEAKIDE6CiAjZW5kaWYKIAl0c3QJcjAsICMweDA4MDAwMDAwCQkJQCBvbmx5IENEUC9DUFJUL0xEQy9TVEMgaGF2ZSBiaXQgMjcKKwl0c3RuZQlyMCwgIzB4MDQwMDAwMDAJCQlAIGJpdCAyNiBzZXQgb24gYm90aCBBUk0gYW5kIFRodW1iLTIKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNNjEwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfQVJNNzEwKQogCWFuZAlyOCwgcjAsICMweDBmMDAwMDAwCQlAIG1hc2sgb3V0IG9wLWNvZGUgYml0cwogCXRlcW5lCXI4LCAjMHgwZjAwMDAwMAkJCUAgU1dJIChBUk02LzcgYnVnKT8KQEAgLTU3Nyw3ICs1OTUsNyBAQAogI2lmZGVmIENPTkZJR19ORU9OCiAJLmFsaWduCTYKIAotLkxDbmVvbl9vcGNvZGVzOgorLkxDbmVvbl9hcm1fb3Bjb2RlczoKIAkud29yZAkweGZlMDAwMDAwCQkJQCBtYXNrCiAJLndvcmQJMHhmMjAwMDAwMAkJCUAgb3Bjb2RlCiAKQEAgLTU4Niw2ICs2MDQsMTYgQEAKIAogCS53b3JkCTB4MDAwMDAwMDAJCQlAIG1hc2sKIAkud29yZAkweDAwMDAwMDAwCQkJQCBvcGNvZGUKKworLkxDbmVvbl90aHVtYl9vcGNvZGVzOgorCS53b3JkCTB4ZWYwMDAwMDAJCQlAIG1hc2sKKwkud29yZAkweGVmMDAwMDAwCQkJQCBvcGNvZGUKKworCS53b3JkCTB4ZmYxMDAwMDAJCQlAIG1hc2sKKwkud29yZAkweGY5MDAwMDAwCQkJQCBvcGNvZGUKKworCS53b3JkCTB4MDAwMDAwMDAJCQlAIG1hc2sKKwkud29yZAkweDAwMDAwMDAwCQkJQCBvcGNvZGUKICNlbmRpZgogCiBkb19mcGU6CkBAIC02MTksOCArNjQ3LDE1IEBACiBfX3BhYnRfdXNyOgogCXVzcl9lbnRyeQogCisjaWZkZWYgTVVMVElfUEFCT1JUCisJbW92CXIwLCByMgkJCUAgcGFzcyBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisJbGRyCXI0LCAuTENwcm9jZm5zCisJbW92CWxyLCBwYworCWxkcglwYywgW3I0LCAjUFJPQ0VTU09SX1BBQlRfRlVOQ10KKyNlbHNlCisJQ1BVX1BBQk9SVF9IQU5ETEVSKHIwLCByMikKKyNlbmRpZgogCWVuYWJsZV9pcnEJCQkJQCBFbmFibGUgaW50ZXJydXB0cwotCW1vdglyMCwgcjIJCQkJQCBhZGRyZXNzIChwYykKIAltb3YJcjEsIHNwCQkJCUAgcmVncwogCWJsCWRvX1ByZWZldGNoQWJvcnQJCUAgY2FsbCBhYm9ydCBoYW5kbGVyCiAJLyogZmFsbCB0aHJvdWdoICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggNmM5MGM1MC4uNTk3ZWQwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtMzUyLDYgKzM1MiwxMSBAQAogCQliCWRvX21tYXAyCiAjZW5kaWYKIAorRU5UUlkocGFib3J0X2lmYXIpCisJCW1yYwlwMTUsIDAsIHIwLCBjcjYsIGNyMCwgMgorRU5UUlkocGFib3J0X25vaWZhcikKKwkJbW92CXBjLCBscgorCiAjaWZkZWYgQ09ORklHX09BQklfQ09NUEFUCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCmluZGV4IDAyNGE5Y2YuLjdlOWMwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCkBAIC0xMSw2ICsxMSw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgQVRBR19DT1JFIDB4NTQ0MTAwMDEKKyNkZWZpbmUgQVRBR19DT1JFX1NJWkUgKCgyKjQgKyAzKjQpID4+IDIpCisKIAkudHlwZQlfX3N3aXRjaF9kYXRhLCAlb2JqZWN0CiBfX3N3aXRjaF9kYXRhOgogCS5sb25nCV9fbW1hcF9zd2l0Y2hlZApAQCAtNzIsOCArNzUsMTMgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfTEwKIAlhZHIJcjAsIHN0cl9wMQogCWJsCXByaW50YXNjaWkKKwltb3YJcjAsIHI5CisJYmwJcHJpbnRoZXg4CisJYWRyCXIwLCBzdHJfcDIKKwlibAlwcmludGFzY2lpCiAJYglfX2Vycm9yCi1zdHJfcDE6CS5hc2NpegkiXG5FcnJvcjogdW5yZWNvZ25pemVkL3Vuc3VwcG9ydGVkIHByb2Nlc3NvciB2YXJpYW50LlxuIgorc3RyX3AxOgkuYXNjaXoJIlxuRXJyb3I6IHVucmVjb2duaXplZC91bnN1cHBvcnRlZCBwcm9jZXNzb3IgdmFyaWFudCAoMHgiCitzdHJfcDI6CS5hc2NpegkiKS5cbiIKIAkuYWxpZ24KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCA3ODk4Y2JjLi5iZmY0YzZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTI5LDkgKzI5LDYgQEAKICNkZWZpbmUgS0VSTkVMX1JBTV9WQUREUgkoUEFHRV9PRkZTRVQgKyBURVhUX09GRlNFVCkKICNkZWZpbmUgS0VSTkVMX1JBTV9QQUREUgkoUEhZU19PRkZTRVQgKyBURVhUX09GRlNFVCkKIAotI2RlZmluZSBBVEFHX0NPUkUgMHg1NDQxMDAwMQotI2RlZmluZSBBVEFHX0NPUkVfU0laRSAoKDIqNCArIDMqNCkgPj4gMikKLQogCiAvKgogICogc3dhcHBlcl9wZ19kaXIgaXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgaW5pdGlhbCBwYWdlIHRhYmxlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYTIyYTk4Yy4uMTNlMzcxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCkBAIC00MzEsNiArNDMxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBfX2twcm9iZXMgYXJjaF90cmFtcG9saW5lX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sga3Byb2Jlc19icmVha19ob29rID0gewogCS5pbnN0cl9tYXNrCT0gMHhmZmZmZmZmZiwKIAkuaW5zdHJfdmFsCT0gS1BST0JFX0JSRUFLUE9JTlRfSU5TVFJVQ1RJT04sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL2FybS9rZXJuZWwvc2VtYXBob3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MWZlNWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qCi0gKiAgQVJNIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiwgdGFrZW4gZnJvbQotICoKLSAqICBpMzg2IHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiAgKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzCi0gKgotICogIE1vZGlmaWVkIGZvciBBUk0gYnkgUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0KLS8qCi0gKiBTZW1hcGhvcmVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhIHR3by13YXkgY291bnRlcjoKLSAqIFRoZSAiY291bnQiIHZhcmlhYmxlIGlzIGRlY3JlbWVudGVkIGZvciBlYWNoIHByb2Nlc3MKLSAqIHRoYXQgdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2VtYXBob3JlLCB3aGlsZSB0aGUgInNsZWVwaW5nIgotICogdmFyaWFibGUgaXMgYSBjb3VudCBvZiBzdWNoIGFjcXVpcmVzLgotICoKLSAqIE5vdGFibHksIHRoZSBpbmxpbmUgInVwKCkiIGFuZCAiZG93bigpIiBmdW5jdGlvbnMgY2FuCi0gKiBlZmZpY2llbnRseSB0ZXN0IGlmIHRoZXkgbmVlZCB0byBkbyBhbnkgZXh0cmEgd29yayAodXAKLSAqIG5lZWRzIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqICJzbGVlcGluZyIgYW5kIHRoZSBjb250ZW50aW9uIHJvdXRpbmUgb3JkZXJpbmcgaXMKLSAqIHByb3RlY3RlZCBieSB0aGUgc2VtYXBob3JlIHNwaW5sb2NrLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMKLSAqIGNvbnRlbnRpb24gb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZQotICogIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUgd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUKLSAqIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbiA8YXNtL3NlbWFwaG9yZS5oPgotICogd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi0KLS8qCi0gKiBMb2dpYzoKLSAqICAtIG9ubHkgb24gYSBib3VuZGFyeSBjb25kaXRpb24gZG8gd2UgbmVlZCB0byBjYXJlLiBXaGVuIHdlIGdvCi0gKiAgICBmcm9tIGEgbmVnYXRpdmUgY291bnQgdG8gYSBub24tbmVnYXRpdmUsIHdlIHdha2UgcGVvcGxlIHVwLgotICogIC0gd2hlbiB3ZSBnbyBmcm9tIGEgbm9uLW5lZ2F0aXZlIGNvdW50IHRvIGEgbmVnYXRpdmUgZG8gd2UKLSAqICAgIChhKSBzeW5jaHJvbml6ZSB3aXRoIHRoZSAic2xlZXBlciIgY291bnQgYW5kIChiKSBtYWtlIHN1cmUKLSAqICAgIHRoYXQgd2UncmUgb24gdGhlIHdha2V1cCBsaXN0IGJlZm9yZSB3ZSBzeW5jaHJvbml6ZSBzbyB0aGF0Ci0gKiAgICB3ZSBjYW5ub3QgbG9zZSB3YWtldXAgZXZlbnRzLgotICovCi0KLXZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLX0KLQotc3RhdGljIERFRklORV9TUElOTE9DSyhzZW1hcGhvcmVfbG9jayk7Ci0KLXZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKLQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCXNwaW5fbG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQlzZW0tPnNsZWVwZXJzKys7Ci0JZm9yICg7OykgewotCQlpbnQgc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzOwotCi0JCS8qCi0JCSAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JCSAqIHBsYXlpbmcsIGJlY2F1c2Ugd2Ugb3duIHRoZSBzcGlubG9jay4KLQkJICovCi0JCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZShzbGVlcGVycyAtIDEsICZzZW0tPmNvdW50KSkgewotCQkJc2VtLT5zbGVlcGVycyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlzZW0tPnNsZWVwZXJzID0gMTsJLyogdXMgLSBzZWUgLTEgYWJvdmUgKi8KLQkJc3Bpbl91bmxvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0KLQkJc2NoZWR1bGUoKTsKLQkJdHNrLT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwotCQlzcGluX2xvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLWludCBfX3NjaGVkIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoJnNlbS0+d2FpdCwgJndhaXQpOwotCi0Jc3Bpbl9sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOwotCXNlbS0+c2xlZXBlcnMgKys7Ci0JZm9yICg7OykgewotCQlpbnQgc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzOwotCi0JCS8qCi0JCSAqIFdpdGggc2lnbmFscyBwZW5kaW5nLCB0aGlzIHR1cm5zIGludG8KLQkJICogdGhlIHRyeWxvY2sgZmFpbHVyZSBjYXNlIC0gd2Ugd29uJ3QgYmUKLQkJICogc2xlZXBpbmcsIGFuZCB3ZSogY2FuJ3QgZ2V0IHRoZSBsb2NrIGFzCi0JCSAqIGl0IGhhcyBjb250ZW50aW9uLiBKdXN0IGNvcnJlY3QgdGhlIGNvdW50Ci0JCSAqIGFuZCBleGl0LgotCQkgKi8KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVFI7Ci0JCQlzZW0tPnNsZWVwZXJzID0gMDsKLQkJCWF0b21pY19hZGQoc2xlZXBlcnMsICZzZW0tPmNvdW50KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogQWRkICJldmVyeWJvZHkgZWxzZSIgaW50byBpdC4gVGhleSBhcmVuJ3QKLQkJICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrLiBUaGUKLQkJICogIi0xIiBpcyBiZWNhdXNlIHdlJ3JlIHN0aWxsIGhvcGluZyB0byBnZXQKLQkJICogdGhlIGxvY2suCi0JCSAqLwotCQlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoc2xlZXBlcnMgLSAxLCAmc2VtLT5jb3VudCkpIHsKLQkJCXNlbS0+c2xlZXBlcnMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2VtLT5zbGVlcGVycyA9IDE7CS8qIHVzIC0gc2VlIC0xIGFib3ZlICovCi0JCXNwaW5fdW5sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOwotCi0JCXNjaGVkdWxlKCk7Ci0JCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCXNwaW5fbG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKgotICogVHJ5bG9jayBmYWlsZWQgLSBtYWtlIHN1cmUgd2UgY29ycmVjdCBmb3IKLSAqIGhhdmluZyBkZWNyZW1lbnRlZCB0aGUgY291bnQuCi0gKgotICogV2UgY291bGQgaGF2ZSBkb25lIHRoZSB0cnlsb2NrIHdpdGggYQotICogc2luZ2xlICJjbXB4Y2hnIiB3aXRob3V0IGZhaWx1cmUgY2FzZXMsCi0gKiBidXQgdGhlbiBpdCB3b3VsZG4ndCB3b3JrIG9uIGEgMzg2LgotICovCi1pbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgc2xlZXBlcnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfbG9jaywgZmxhZ3MpOwotCXNsZWVwZXJzID0gc2VtLT5zbGVlcGVycyArIDE7Ci0Jc2VtLT5zbGVlcGVycyA9IDA7Ci0KLQkvKgotCSAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGFuZCB1cyBpbnRvIGl0LiBUaGV5IGFyZW4ndAotCSAqIHBsYXlpbmcsIGJlY2F1c2Ugd2Ugb3duIHRoZSBzcGlubG9jay4KLQkgKi8KLQlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoc2xlZXBlcnMsICZzZW0tPmNvdW50KSkKLQkJd2FrZV91cCgmc2VtLT53YWl0KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBUaGUgc2VtYXBob3JlIG9wZXJhdGlvbnMgaGF2ZSBhIHNwZWNpYWwgY2FsbGluZyBzZXF1ZW5jZSB0aGF0Ci0gKiBhbGxvdyB1cyB0byBkbyBhIHNpbXBsZXIgaW4tbGluZSB2ZXJzaW9uIG9mIHRoZW0uIFRoZXNlIHJvdXRpbmVzCi0gKiBuZWVkIHRvIGNvbnZlcnQgdGhhdCBzZXF1ZW5jZSBiYWNrIGludG8gdGhlIEMgc2VxdWVuY2Ugd2hlbgotICogdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgc2VtYXBob3JlLgotICoKLSAqIGlwIGNvbnRhaW5zIHRoZSBzZW1hcGhvcmUgcG9pbnRlciBvbiBlbnRyeS4gU2F2ZSB0aGUgQy1jbG9iYmVyZWQKLSAqIHJlZ2lzdGVycyAocjAgdG8gcjMgYW5kIGxyKSwgYnV0IG5vdCBpcCwgYXMgd2UgdXNlIGl0IGFzIGEgcmV0dXJuCi0gKiB2YWx1ZSBpbiBzb21lIGNhc2VzLi4KLSAqIFRvIHJlbWFpbiBBQVBDUyBjb21wbGlhbnQgKDY0LWJpdCBzdGFjayBhbGlnbikgd2Ugc2F2ZSByNCBhcyB3ZWxsLgotICovCi1hc20oIgkuc2VjdGlvbiAuc2NoZWQudGV4dCxcImF4XCIsJXByb2diaXRzCVxuXAotCS5hbGlnbgk1CQkJCVxuXAotCS5nbG9ibAlfX2Rvd25fZmFpbGVkCQkJXG5cCi1fX2Rvd25fZmFpbGVkOgkJCQkJXG5cCi0Jc3RtZmQJc3AhLCB7cjAgLSByNCwgbHJ9CQlcblwKLQltb3YJcjAsIGlwCQkJCVxuXAotCWJsCV9fZG93bgkJCQlcblwKLQlsZG1mZAlzcCEsIHtyMCAtIHI0LCBwY30JCVxuXAotCQkJCQkJXG5cCi0JLmFsaWduCTUJCQkJXG5cCi0JLmdsb2JsCV9fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZAlcblwKLV9fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZDoJCQlcblwKLQlzdG1mZAlzcCEsIHtyMCAtIHI0LCBscn0JCVxuXAotCW1vdglyMCwgaXAJCQkJXG5cCi0JYmwJX19kb3duX2ludGVycnVwdGlibGUJCVxuXAotCW1vdglpcCwgcjAJCQkJXG5cCi0JbGRtZmQJc3AhLCB7cjAgLSByNCwgcGN9CQlcblwKLQkJCQkJCVxuXAotCS5hbGlnbgk1CQkJCVxuXAotCS5nbG9ibAlfX2Rvd25fdHJ5bG9ja19mYWlsZWQJCVxuXAotX19kb3duX3RyeWxvY2tfZmFpbGVkOgkJCQlcblwKLQlzdG1mZAlzcCEsIHtyMCAtIHI0LCBscn0JCVxuXAotCW1vdglyMCwgaXAJCQkJXG5cCi0JYmwJX19kb3duX3RyeWxvY2sJCQlcblwKLQltb3YJaXAsIHIwCQkJCVxuXAotCWxkbWZkCXNwISwge3IwIC0gcjQsIHBjfQkJXG5cCi0JCQkJCQlcblwKLQkuYWxpZ24JNQkJCQlcblwKLQkuZ2xvYmwJX191cF93YWtldXAJCQlcblwKLV9fdXBfd2FrZXVwOgkJCQkJXG5cCi0Jc3RtZmQJc3AhLCB7cjAgLSByNCwgbHJ9CQlcblwKLQltb3YJcjAsIGlwCQkJCVxuXAotCWJsCV9fdXAJCQkJXG5cCi0JbGRtZmQJc3AhLCB7cjAgLSByNCwgcGN9CQlcblwKLQkiKTsKLQotRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGVfZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX3RyeWxvY2tfZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0woX191cF93YWtldXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCmluZGV4IDU0Y2RmMWFlLi5lZjJmODZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC0yNiw4ICsyNiw4IEBACiAvKgogICogRm9yIEFSTSBzeXNjYWxscywgd2UgZW5jb2RlIHRoZSBzeXNjYWxsIG51bWJlciBpbnRvIHRoZSBpbnN0cnVjdGlvbi4KICAqLwotI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pKQotI2RlZmluZSBTV0lfU1lTX1JUX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9ydF9zaWdyZXR1cm4pKQorI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pfChfX05SX09BQklfU1lTQ0FMTF9CQVNFKSkKKyNkZWZpbmUgU1dJX1NZU19SVF9TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfcnRfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCiAKIC8qCiAgKiBXaXRoIEVBQkksIHRoZSBzeXNjYWxsIG51bWJlciBoYXMgdG8gYmUgbG9hZGVkIGludG8gcjcuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMgYi9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMKaW5kZXggZThiOTgwNC4uOTZhYjVmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYwpAQCAtMjUsNiArMjUsNyBAQAogICogc3lzX3N0YXQ2NDoKICAqIHN5c19sc3RhdDY0OgogICogc3lzX2ZzdGF0NjQ6CisgKiBzeXNfZnN0YXRhdDY0OgogICoKICAqICAgc3RydWN0IHN0YXQ2NCBoYXMgZGlmZmVyZW50IHNpemVzIGFuZCBzb21lIG1lbWJlcnMgYXJlIHNoaWZ0ZWQKICAqICAgQ29tcGF0aWJpbGl0eSB3cmFwcGVycyBhcmUgbmVlZGVkIGZvciB0aGVtIGFuZCBwcm92aWRlZCBiZWxvdy4KQEAgLTE2OSw2ICsxNzAsMjkgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK2FzbWxpbmthZ2UgbG9uZyBzeXNfb2FiaV9mc3RhdGF0NjQoaW50IGRmZCwKKwkJCQkgICBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQkJICAgc3RydWN0IG9sZGFiaV9zdGF0NjQgIF9fdXNlciAqc3RhdGJ1ZiwKKwkJCQkgICBpbnQgZmxhZykKK3sKKwlzdHJ1Y3Qga3N0YXQgc3RhdDsKKwlpbnQgZXJyb3IgPSAtRUlOVkFMOworCisJaWYgKChmbGFnICYgfkFUX1NZTUxJTktfTk9GT0xMT1cpICE9IDApCisJCWdvdG8gb3V0OworCisJaWYgKGZsYWcgJiBBVF9TWU1MSU5LX05PRk9MTE9XKQorCQllcnJvciA9IHZmc19sc3RhdF9mZChkZmQsIGZpbGVuYW1lLCAmc3RhdCk7CisJZWxzZQorCQllcnJvciA9IHZmc19zdGF0X2ZkKGRmZCwgZmlsZW5hbWUsICZzdGF0KTsKKworCWlmICghZXJyb3IpCisJZXJyb3IgPSBjcF9vbGRhYmlfc3RhdDY0KCZzdGF0LCBzdGF0YnVmKTsKKworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKwogc3RydWN0IG9hYmlfZmxvY2s2NCB7CiAJc2hvcnQJbF90eXBlOwogCXNob3J0CWxfd2hlbmNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RodW1iZWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aHVtYmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzZjZiNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aHVtYmVlLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIGFyY2gvYXJtL2tlcm5lbC90aHVtYmVlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vdGhyZWFkX25vdGlmeS5oPgorCisvKgorICogQWNjZXNzIHRvIHRoZSBUaHVtYkVFIEhhbmRsZXIgQmFzZSByZWdpc3RlcgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGVlaGJyX3JlYWQoKQoreworCXVuc2lnbmVkIGxvbmcgdjsKKwlhc20oIm1yYwlwMTQsIDYsICUwLCBjMSwgYzAsIDBcbiIgOiAiPXIiICh2KSk7CisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZWVoYnJfd3JpdGUodW5zaWduZWQgbG9uZyB2KQoreworCWFzbSgibWNyCXAxNCwgNiwgJTAsIGMxLCBjMCwgMFxuIiA6IDogInIiICh2KSk7Cit9CisKK3N0YXRpYyBpbnQgdGh1bWJlZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp0KQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSFJFQURfTk9USUZZX0ZMVVNIOgorCQl0aHJlYWQtPnRodW1iZWVfc3RhdGUgPSAwOworCQlicmVhazsKKwljYXNlIFRIUkVBRF9OT1RJRllfU1dJVENIOgorCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnRodW1iZWVfc3RhdGUgPSB0ZWVoYnJfcmVhZCgpOworCQl0ZWVoYnJfd3JpdGUodGhyZWFkLT50aHVtYmVlX3N0YXRlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRodW1iZWVfbm90aWZpZXJfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSB0aHVtYmVlX25vdGlmaWVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGh1bWJlZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZnIwOworCXVuc2lnbmVkIGludCBjcHVfYXJjaCA9IGNwdV9hcmNoaXRlY3R1cmUoKTsKKworCWlmIChjcHVfYXJjaCA8IENQVV9BUkNIX0FSTXY3KQorCQlyZXR1cm4gMDsKKworCS8qIHByb2Nlc3NvciBmZWF0dXJlIHJlZ2lzdGVyIDAgKi8KKwlhc20oIm1yYwlwMTUsIDAsICUwLCBjMCwgYzEsIDBcbiIgOiAiPXIiIChwZnIwKSk7CisJaWYgKChwZnIwICYgMHgwMDAwZjAwMCkgIT0gMHgwMDAwMTAwMCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJUaHVtYkVFIENQVSBleHRlbnNpb24gc3VwcG9ydGVkLlxuIik7CisJZWxmX2h3Y2FwIHw9IEhXQ0FQX1RIVU1CRUU7CisJdGhyZWFkX3JlZ2lzdGVyX25vdGlmaWVyKCZ0aHVtYmVlX25vdGlmaWVyX2Jsb2NrKTsKKworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHRodW1iZWVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2Nsb2NrLmMKaW5kZXggNzRhYTdhMy4uZTEwZWUxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY2xvY2suYwpAQCAtMTgsOCArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0KICNpbmNsdWRlICJjbG9jay5oIgogCiBzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IDA3NGRjZDUuLjBmYzA3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0xMiwxOCArMTIsMjggQEAKIAogY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjAKIAlib29sICJBVDkxU0FNOTI2MCBvciBBVDkxU0FNOVhFIgorCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCiBjb25maWcgQVJDSF9BVDkxU0FNOTI2MQogCWJvb2wgIkFUOTFTQU05MjYxIgorCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCiBjb25maWcgQVJDSF9BVDkxU0FNOTI2MwogCWJvb2wgIkFUOTFTQU05MjYzIgorCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCiBjb25maWcgQVJDSF9BVDkxU0FNOVJMCiAJYm9vbCAiQVQ5MVNBTTlSTCIKKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAogY29uZmlnIEFSQ0hfQVQ5MUNBUDkKIAlib29sICJBVDkxQ0FQOSIKKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAogY29uZmlnIEFSQ0hfQVQ5MVg0MAogCWJvb2wgIkFUOTF4NDAiCkBAIC0xMDksNiArMTE5LDEzIEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBTcGVycnktU3VuJ3MgS0FGQSBib2FyZC4KIAorY29uZmlnIE1BQ0hfRUNCQVQ5MQorCWJvb2wgImVtUWJpdCBFQ0JfQVQ5MSBTQkMiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGVtUWJpdCdzIEVDQl9BVDkxIGJvYXJkLgorCSAgPGh0dHA6Ly93aWtpLmVtcWJpdC5jb20vZnJlZS1lY2ItYXQ5MT4KKwogZW5kaWYKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMsNiArMTUwLDIwIEBACiAJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTkyNjAtRUsgb3IgQVQ5MVNBTTlYRSBFdmFsdWF0aW9uIEtpdAogCSAgPGh0dHA6Ly93d3cuYXRtZWwuY29tL2R5bi9wcm9kdWN0cy90b29sc19jYXJkLmFzcD90b29sX2lkPTM5MzM+CiAKK2NvbmZpZyBNQUNIX0NBTTYwCisJYm9vbCAiS3dpa0J5dGUgS0I5MjYwIChDQU02MCkgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05MjYwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBLd2lrQnl0ZSdzIEtCOTI2MCAoQ0FNNjApIGJvYXJkIGJhc2VkIG9uIHRoZSBBdG1lbCBBVDkxU0FNOTI2MC4KKwkgIDxodHRwOi8vd3d3Lmt3aWtieXRlLmNvbS9LQjkyNjAuaHRtbD4KKworY29uZmlnIE1BQ0hfU0FNOV9MOTI2MAorCWJvb2wgIk9saW1leCBTQU05LUw5MjYwIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOTI2MAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgT2xpbWV4J3MgU0FNOS1MOTI2MCBib2FyZCBiYXNlZCBvbiB0aGUgQXRtZWwgQVQ5MVNBTTkyNjAuCisJICA8aHR0cDovL3d3dy5vbGltZXguY29tL2Rldi9zYW05LUw5MjYwLmh0bWw+CisKIGVuZGlmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE2LDcgKzI0Nyw3IEBACiAKIGNvbmZpZyBNVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRAogCWJvb2wgIkVuYWJsZSBEYXRhRmxhc2ggQ2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gKEFSQ0hfQVQ5MVJNOTIwMERLIHx8IE1BQ0hfQVQ5MVJNOTIwMEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjBFSyB8fCBNQUNIX0FUOTFTQU05MjYxRUsgfHwgTUFDSF9BVDkxU0FNOTI2M0VLIHx8IE1BQ0hfQVQ5MUNBUDlBREspCisJZGVwZW5kcyBvbiAoQVJDSF9BVDkxUk05MjAwREsgfHwgTUFDSF9BVDkxUk05MjAwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsgfHwgTUFDSF9BVDkxQ0FQOUFESyB8fCBNQUNIX1NBTTlfTDkyNjAgfHwgTUFDSF9FQ0JBVDkxKQogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRGF0YUZsYXNoIGNhcmQuCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCBiZjVmMjkzLi44ZDliYzAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0yOSw5ICsyOSwxMiBAQAogb2JqLSQoQ09ORklHX01BQ0hfQVRFQjkyMDApCSs9IGJvYXJkLWViOTIwMC5vCiBvYmotJChDT05GSUdfTUFDSF9LQUZBKQkJKz0gYm9hcmQta2FmYS5vCiBvYmotJChDT05GSUdfTUFDSF9QSUNPVFVYMlhYKQkrPSBib2FyZC1waWNvdHV4MjAwLm8KK29iai0kKENPTkZJR19NQUNIX0VDQkFUOTEpCSs9IGJvYXJkLWVjYmF0OTEubwogCiAjIEFUOTFTQU05MjYwIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05MjYwRUspICs9IGJvYXJkLXNhbTkyNjBlay5vCitvYmotJChDT05GSUdfTUFDSF9DQU02MCkJKz0gYm9hcmQtY2FtNjAubworb2JqLSQoQ09ORklHX01BQ0hfU0FNOV9MOTI2MCkJKz0gYm9hcmQtc2FtOS1sOTI2MC5vCiAKICMgQVQ5MVNBTTkyNjEgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjFFSykgKz0gYm9hcmQtc2FtOTI2MWVrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5LmMKaW5kZXggNDhkMjdkOC4uOTMzZmE4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5LmMKQEAgLTEzLDEyICsxMywxNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFjYXA5Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3NoZHdjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTI4OCw2ICsyOTAsMTIgQEAKIAlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOwogfQogCitzdGF0aWMgdm9pZCBhdDkxY2FwOV9wb3dlcm9mZih2b2lkKQoreworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU0hEV19DUiwgQVQ5MV9TSERXX0tFWSB8IEFUOTFfU0hEV19TSERXKTsKK30KKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFDQVA5IHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI5OCw2ICszMDYsNyBAQAogCWlvdGFibGVfaW5pdChhdDkxY2FwOV9pb19kZXNjLCBBUlJBWV9TSVpFKGF0OTFjYXA5X2lvX2Rlc2MpKTsKIAogCWF0OTFfYXJjaF9yZXNldCA9IGF0OTFjYXA5X3Jlc2V0OworCXBtX3Bvd2VyX29mZiA9IGF0OTFjYXA5X3Bvd2Vyb2ZmOwogCWF0OTFfZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFDQVA5X0lEX0lSUTApIHwgKDEgPDwgQVQ5MUNBUDlfSURfSVJRMSk7CiAKIAkvKiBJbml0IGNsb2NrIHN1YnN5c3RlbSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKaW5kZXggYzUwZmFkOS4uZjFhODBkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCkBAIC0xNiwxNSArMTYsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MWNhcDkuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2eF9tYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFjYXA5X21hdHJpeC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05X3NtYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC0yODMsMTAgKzI4MywxNSBAQAogI2RlZmluZSBOQU5EX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzMKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5kX3Jlc291cmNlc1tdID0gewotCXsKKwlbMF0gPSB7CiAJCS5zdGFydAk9IE5BTkRfQkFTRSwKIAkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRUNDLAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRUNDICsgU1pfNTEyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfQogfTsKIApAQCAtMzQ0LDYgKzM0OSw3IEBACiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgKmRhdGEpIHt9CiAjZW5kaWYKIAorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFRXSSAoaTJjKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTUzMiwxMyArNTM4LDU5IEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUaW1lci9Db3VudGVyIGJsb2NrCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MUNBUDlfQkFTRV9UQ0IwLAorCQkuZW5kCT0gQVQ5MUNBUDlfQkFTRV9UQ0IwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFDQVA5X0lEX1RDQiwKKwkJLmVuZAk9IEFUOTFDQVA5X0lEX1RDQiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFjYXA5X3RjYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3RjYiIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gdGNiX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCit7CisJLyogdGhpcyBjaGlwIGhhcyBvbmUgY2xvY2sgYW5kIGlycSBmb3IgYWxsIHRocmVlIFRDIGNoYW5uZWxzICovCisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjYl9jbGsiLCAmYXQ5MWNhcDlfdGNiX2RldmljZS5kZXYsICJ0MF9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFjYXA5X3RjYl9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFJUVAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQsCisJCS5lbmQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQgKyBTWl8xNiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFjYXA5X3J0dF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF0OTFfcnR0IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHJ0dF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJ0dF9yZXNvdXJjZXMpLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ydHQodm9pZCkKQEAgLTk5MCw3ICsxMDQyLDcgQEAKIAkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsJLyogQ1RTMiAqLwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlOwkvKiB0aGUgc2VyaWFsIGNvbnNvbGUgZGV2aWNlICovCiAKIHZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKQpAQCAtMTAzMSw4ICsxMDgzLDYgQEAKIHsKIAlpZiAocG9ydG5yIDwgQVRNRUxfTUFYX1VBUlQpCiAJCWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UgPSBhdDkxX3VhcnRzW3BvcnRucl07Ci0JaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQotCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKIH0KIAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQpAQCAtMTA0Myw2ICsxMDkzLDkgQEAKIAkJaWYgKGF0OTFfdWFydHNbaV0pCiAJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7CiAJfQorCisJaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKIH0KICNlbHNlCiB2b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykge30KQEAgLTEwNjAsNiArMTExMyw3IEBACiB7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwogCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOworCWF0OTFfYWRkX2RldmljZV90YygpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKaW5kZXggZWY2YWViOC4uZGUxOWJlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX2RldmljZXMuYwpAQCAtNTc3LDYgKzU3Nyw5MCBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGltZXIvQ291bnRlciBibG9ja3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1RDQjAsCisJCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxUk05MjAwX0lEX1RDMCwKKwkJLmVuZAk9IEFUOTFSTTkyMDBfSURfVEMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9JRF9UQzEsCisJCS5lbmQJPSBBVDkxUk05MjAwX0lEX1RDMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IEFUOTFSTTkyMDBfSURfVEMyLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9JRF9UQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxcm05MjAwX3RjYjBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHRjYjBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHRjYjFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVENCMSwKKwkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9UQ0IxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFSTTkyMDBfSURfVEMzLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9JRF9UQzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxUk05MjAwX0lEX1RDNCwKKwkJLmVuZAk9IEFUOTFSTTkyMDBfSURfVEM0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9JRF9UQzUsCisJCS5lbmQJPSBBVDkxUk05MjAwX0lEX1RDNSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFybTkyMDBfdGNiMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3RjYiIsCisJLmlkCQk9IDEsCisJLnJlc291cmNlCT0gdGNiMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYjFfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKK3sKKwkvKiB0aGlzIGNoaXAgaGFzIGEgc2VwYXJhdGUgY2xvY2sgYW5kIGlycSBmb3IgZWFjaCBUQyBjaGFubmVsICovCisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjMF9jbGsiLCAmYXQ5MXJtOTIwMF90Y2IwX2RldmljZS5kZXYsICJ0MF9jbGsiKTsKKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGMxX2NsayIsICZhdDkxcm05MjAwX3RjYjBfZGV2aWNlLmRldiwgInQxX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzJfY2xrIiwgJmF0OTFybTkyMDBfdGNiMF9kZXZpY2UuZGV2LCAidDJfY2xrIik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3RjYjBfZGV2aWNlKTsKKworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzNfY2xrIiwgJmF0OTFybTkyMDBfdGNiMV9kZXZpY2UuZGV2LCAidDBfY2xrIik7CisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjNF9jbGsiLCAmYXQ5MXJtOTIwMF90Y2IxX2RldmljZS5kZXYsICJ0MV9jbGsiKTsKKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGM1X2NsayIsICZhdDkxcm05MjAwX3RjYjFfZGV2aWNlLmRldiwgInQyX2NsayIpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF90Y2IxX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgUlRDCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMDE5LDcgKzExMDMsNyBAQAogCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBSVFMzICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2U7CS8qIHRoZSBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KIAogdm9pZCBfX2luaXQgX19kZXByZWNhdGVkIGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykKQEAgLTExMTAsOCArMTE5NCw2IEBACiB7CiAJaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQogCQlhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlID0gYXQ5MV91YXJ0c1twb3J0bnJdOwotCWlmICghYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MTogTm8gZGVmYXVsdCBzZXJpYWwgY29uc29sZSBkZWZpbmVkLlxuIik7CiB9CiAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkKQEAgLTExMjIsNiArMTIwNCw5IEBACiAJCWlmIChhdDkxX3VhcnRzW2ldKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwogCX0KKworCWlmICghYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MTogTm8gZGVmYXVsdCBzZXJpYWwgY29uc29sZSBkZWZpbmVkLlxuIik7CiB9CiAjZWxzZQogdm9pZCBfX2luaXQgX19kZXByZWNhdGVkIGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykge30KQEAgLTExNDEsNiArMTIyNiw3IEBACiB7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0YygpOwogCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOworCWF0OTFfYWRkX2RldmljZV90YygpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jCmluZGV4IDE4ZDA2NjEuLmVlMjY1NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0xOCw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNjAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcnN0Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfc2hkd2MuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtMjY3LDYgKzI2OSwxMSBAQAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlNUQ19DUiwgQVQ5MV9SU1RDX0tFWSB8IEFUOTFfUlNUQ19QUk9DUlNUIHwgQVQ5MV9SU1RDX1BFUlJTVCk7CiB9CiAKK3N0YXRpYyB2b2lkIGF0OTFzYW05MjYwX3Bvd2Vyb2ZmKHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TSERXX0NSLCBBVDkxX1NIRFdfS0VZIHwgQVQ5MV9TSERXX1NIRFcpOworfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTkyNjAgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCkBAIC0zMDQsNiArMzExLDcgQEAKIAkJaW90YWJsZV9pbml0KGF0OTFzYW05MjYwX3NyYW1fZGVzYywgQVJSQVlfU0laRShhdDkxc2FtOTI2MF9zcmFtX2Rlc2MpKTsKIAogCWF0OTFfYXJjaF9yZXNldCA9IGF0OTFzYW05MjYwX3Jlc2V0OworCXBtX3Bvd2VyX29mZiA9IGF0OTFzYW05MjYwX3Bvd2Vyb2ZmOwogCWF0OTFfZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05MjYwX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVNBTTkyNjBfSURfSVJRMSkKIAkJCXwgKDEgPDwgQVQ5MVNBTTkyNjBfSURfSVJRMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCmluZGV4IDEwNWY4NDAuLjM5M2EzMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYwLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNnhfbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2MF9tYXRyaXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOV9zbWMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMjg4LDEwICsyODgsMTUgQEAKICNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQl7CisJWzBdID0gewogCQkuc3RhcnQJPSBOQU5EX0JBU0UsCiAJCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQywKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQyArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0KIH07CiAKQEAgLTU0MCw2ICs1NDUsOTAgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVENCMCwKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9JRF9UQzAsCisJCS5lbmQJPSBBVDkxU0FNOTI2MF9JRF9UQzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9JRF9UQzEsCisJCS5lbmQJPSBBVDkxU0FNOTI2MF9JRF9UQzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9JRF9UQzIsCisJCS5lbmQJPSBBVDkxU0FNOTI2MF9JRF9UQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF90Y2IwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0Y2IwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2IxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IxLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9UQ0IxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX1RDMywKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX1RDMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX1RDNCwKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX1RDNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX1RDNSwKKwkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX1RDNSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3RjYjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHRjYjFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2IxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpCit7CisJLyogdGhpcyBjaGlwIGhhcyBhIHNlcGFyYXRlIGNsb2NrIGFuZCBpcnEgZm9yIGVhY2ggVEMgY2hhbm5lbCAqLworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzBfY2xrIiwgJmF0OTFzYW05MjYwX3RjYjBfZGV2aWNlLmRldiwgInQwX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzFfY2xrIiwgJmF0OTFzYW05MjYwX3RjYjBfZGV2aWNlLmRldiwgInQxX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzJfY2xrIiwgJmF0OTFzYW05MjYwX3RjYjBfZGV2aWNlLmRldiwgInQyX2NsayIpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfdGNiMF9kZXZpY2UpOworCisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjM19jbGsiLCAmYXQ5MXNhbTkyNjBfdGNiMV9kZXZpY2UuZGV2LCAidDBfY2xrIik7CisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjNF9jbGsiLCAmYXQ5MXNhbTkyNjBfdGNiMV9kZXZpY2UuZGV2LCAidDFfY2xrIik7CisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjNV9jbGsiLCAmYXQ5MXNhbTkyNjBfdGNiMV9kZXZpY2UuZGV2LCAidDJfY2xrIik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF90Y2IxX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgUlRUCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC01NTMsNyArNjQyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfcnR0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydHRfcmVzb3VyY2VzKSwKIH07CkBAIC05NjIsNjQgKzEwNTEsOSBAQAogCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDApOwkJLyogUlhENSAqLwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXRkYXRhIGF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlOwkvKiB0aGUgc2VyaWFsIGNvbnNvbGUgZGV2aWNlICovCiAKLXZvaWQgX19pbml0IF9fZGVwcmVjYXRlZCBhdDkxX2luaXRfc2VyaWFsKHN0cnVjdCBhdDkxX3VhcnRfY29uZmlnICpjb25maWcpCi17Ci0JaW50IGk7Ci0KLQkvKiBGaWxsIGluIGxpc3Qgb2Ygc3VwcG9ydGVkIFVBUlRzICovCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnJfdHR5OyBpKyspIHsKLQkJc3dpdGNoIChjb25maWctPnR0eV9tYXBbaV0pIHsKLQkJCWNhc2UgMDoKLQkJCQljb25maWd1cmVfdXNhcnQwX3BpbnMoQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EVFIgfCBBVE1FTF9VQVJUX0RDRCB8IEFUTUVMX1VBUlRfUkkpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjBfdWFydDBfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDBfY2xrIiwgJmF0OTFzYW05MjYwX3VhcnQwX2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05MjYwX3VhcnQxX2RldmljZTsKLQkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQxX2NsayIsICZhdDkxc2FtOTI2MF91YXJ0MV9kZXZpY2UuZGV2LCAidXNhcnQiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQljb25maWd1cmVfdXNhcnQyX3BpbnMoMCk7Ci0JCQkJYXQ5MV91YXJ0c1tpXSA9ICZhdDkxc2FtOTI2MF91YXJ0Ml9kZXZpY2U7Ci0JCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0Ml9jbGsiLCAmYXQ5MXNhbTkyNjBfdWFydDJfZGV2aWNlLmRldiwgInVzYXJ0Iik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJY29uZmlndXJlX3VzYXJ0M19waW5zKDApOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjBfdWFydDNfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDNfY2xrIiwgJmF0OTFzYW05MjYwX3VhcnQzX2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSA0OgotCQkJCWNvbmZpZ3VyZV91c2FydDRfcGlucygpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjBfdWFydDRfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDRfY2xrIiwgJmF0OTFzYW05MjYwX3VhcnQ0X2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSA1OgotCQkJCWNvbmZpZ3VyZV91c2FydDVfcGlucygpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjBfdWFydDVfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDVfY2xrIiwgJmF0OTFzYW05MjYwX3VhcnQ1X2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSA2OgotCQkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKLQkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05MjYwX2RiZ3VfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJtY2siLCAmYXQ5MXNhbTkyNjBfZGJndV9kZXZpY2UuZGV2LCAidXNhcnQiKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJY29udGludWU7Ci0JCX0KLQkJYXQ5MV91YXJ0c1tpXS0+aWQgPSBpOwkJLyogdXBkYXRlIElEIG51bWJlciB0byBtYXBwZWQgSUQgKi8KLQl9Ci0KLQkvKiBTZXQgc2VyaWFsIGNvbnNvbGUgZGV2aWNlICovCi0JaWYgKGNvbmZpZy0+Y29uc29sZV90dHkgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFydHNbY29uZmlnLT5jb25zb2xlX3R0eV07Ci0JaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQotCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKLX0KLQogdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKQEAgLTEwNzMsOCArMTEwNyw2IEBACiB7CiAJaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQogCQlhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlID0gYXQ5MV91YXJ0c1twb3J0bnJdOwotCWlmICghYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MTogTm8gZGVmYXVsdCBzZXJpYWwgY29uc29sZSBkZWZpbmVkLlxuIik7CiB9CiAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkKQEAgLTEwODUsOSArMTExNywxMSBAQAogCQlpZiAoYXQ5MV91YXJ0c1tpXSkKIAkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKIAl9CisKKwlpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpCisJCXByaW50ayhLRVJOX0lORk8gIkFUOTE6IE5vIGRlZmF1bHQgc2VyaWFsIGNvbnNvbGUgZGVmaW5lZC5cbiIpOwogfQogI2Vsc2UKLXZvaWQgX19pbml0IF9fZGVwcmVjYXRlZCBhdDkxX2luaXRfc2VyaWFsKHN0cnVjdCBhdDkxX3VhcnRfY29uZmlnICpjb25maWcpIHt9CiB2b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykge30KIHZvaWQgX19pbml0IGF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKHVuc2lnbmVkIHBvcnRucikge30KIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkge30KQEAgLTExMDMsNiArMTEzNyw3IEBACiB7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwogCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOworCWF0OTFfYWRkX2RldmljZV90YygpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MS5jCmluZGV4IDkwYjg3ZTEuLjM1YmY2ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MS5jCkBAIC0xMSwxMiArMTEsMTQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2MS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcG1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9yc3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9zaGR3Yy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC0yNDUsNiArMjQ3LDExIEBACiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SU1RDX0NSLCBBVDkxX1JTVENfS0VZIHwgQVQ5MV9SU1RDX1BST0NSU1QgfCBBVDkxX1JTVENfUEVSUlNUKTsKIH0KIAorc3RhdGljIHZvaWQgYXQ5MXNhbTkyNjFfcG93ZXJvZmYodm9pZCkKK3sKKwlhdDkxX3N5c193cml0ZShBVDkxX1NIRFdfQ1IsIEFUOTFfU0hEV19LRVkgfCBBVDkxX1NIRFdfU0hEVyk7Cit9CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBBVDkxU0FNOTI2MSBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTI1Niw2ICsyNjMsNyBAQAogCWlvdGFibGVfaW5pdChhdDkxc2FtOTI2MV9pb19kZXNjLCBBUlJBWV9TSVpFKGF0OTFzYW05MjYxX2lvX2Rlc2MpKTsKIAogCWF0OTFfYXJjaF9yZXNldCA9IGF0OTFzYW05MjYxX3Jlc2V0OworCXBtX3Bvd2VyX29mZiA9IGF0OTFzYW05MjYxX3Bvd2Vyb2ZmOwogCWF0OTFfZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05MjYxX0lEX0lSUTApIHwgKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMSkKIAkJCXwgKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCmluZGV4IDI0NTY0MTIuLjM3Y2Q1NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2MS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYxX21hdHJpeC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjZ4X21jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlfc21jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTU0OCw2ICs1NDgsNTUgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2sKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2JfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2MV9CQVNFX1RDQjAsCisJCS5lbmQJPSBBVDkxU0FNOTI2MV9CQVNFX1RDQjAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfSURfVEMwLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjFfSURfVEMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfSURfVEMxLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjFfSURfVEMxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjFfSURfVEMyLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjFfSURfVEMyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjFfdGNiX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0Y2JfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2JfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKK3sKKwkvKiB0aGlzIGNoaXAgaGFzIGEgc2VwYXJhdGUgY2xvY2sgYW5kIGlycSBmb3IgZWFjaCBUQyBjaGFubmVsICovCisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjMF9jbGsiLCAmYXQ5MXNhbTkyNjFfdGNiX2RldmljZS5kZXYsICJ0MF9jbGsiKTsKKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGMxX2NsayIsICZhdDkxc2FtOTI2MV90Y2JfZGV2aWNlLmRldiwgInQxX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzJfY2xrIiwgJmF0OTFzYW05MjYxX3RjYl9kZXZpY2UuZGV2LCAidDJfY2xrIik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV90Y2JfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBSVFQKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTU2MSw3ICs2MTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MV9ydHRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJhdDkxX3J0dCIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSAwLAogCS5yZXNvdXJjZQk9IHJ0dF9yZXNvdXJjZXMsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJ0dF9yZXNvdXJjZXMpLAogfTsKQEAgLTkzOCw0OSArOTg3LDkgQEAKIAkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExNiwgMCk7CS8qIENUUzIgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsJLyogdGhlIHNlcmlhbCBjb25zb2xlIGRldmljZSAqLwogCi12b2lkIF9faW5pdCBfX2RlcHJlY2F0ZWQgYXQ5MV9pbml0X3NlcmlhbChzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyAqY29uZmlnKQotewotCWludCBpOwotCi0JLyogRmlsbCBpbiBsaXN0IG9mIHN1cHBvcnRlZCBVQVJUcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjb25maWctPm5yX3R0eTsgaSsrKSB7Ci0JCXN3aXRjaCAoY29uZmlnLT50dHlfbWFwW2ldKSB7Ci0JCQljYXNlIDA6Ci0JCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjFfdWFydDBfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDBfY2xrIiwgJmF0OTFzYW05MjYxX3VhcnQwX2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucygwKTsKLQkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05MjYxX3VhcnQxX2RldmljZTsKLQkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQxX2NsayIsICZhdDkxc2FtOTI2MV91YXJ0MV9kZXZpY2UuZGV2LCAidXNhcnQiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQljb25maWd1cmVfdXNhcnQyX3BpbnMoMCk7Ci0JCQkJYXQ5MV91YXJ0c1tpXSA9ICZhdDkxc2FtOTI2MV91YXJ0Ml9kZXZpY2U7Ci0JCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0Ml9jbGsiLCAmYXQ5MXNhbTkyNjFfdWFydDJfZGV2aWNlLmRldiwgInVzYXJ0Iik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjFfZGJndV9kZXZpY2U7Ci0JCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoIm1jayIsICZhdDkxc2FtOTI2MV9kYmd1X2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQljb250aW51ZTsKLQkJfQotCQlhdDkxX3VhcnRzW2ldLT5pZCA9IGk7CQkvKiB1cGRhdGUgSUQgbnVtYmVyIHRvIG1hcHBlZCBJRCAqLwotCX0KLQotCS8qIFNldCBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KLQlpZiAoY29uZmlnLT5jb25zb2xlX3R0eSA8IEFUTUVMX01BWF9VQVJUKQotCQlhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlID0gYXQ5MV91YXJ0c1tjb25maWctPmNvbnNvbGVfdHR5XTsKLQlpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpCi0JCXByaW50ayhLRVJOX0lORk8gIkFUOTE6IE5vIGRlZmF1bHQgc2VyaWFsIGNvbnNvbGUgZGVmaW5lZC5cbiIpOwotfQotCiB2b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwpAQCAtMTAxOSw4ICsxMDI4LDYgQEAKIHsKIAlpZiAocG9ydG5yIDwgQVRNRUxfTUFYX1VBUlQpCiAJCWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UgPSBhdDkxX3VhcnRzW3BvcnRucl07Ci0JaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQotCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKIH0KIAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQpAQCAtMTAzMSw5ICsxMDM4LDExIEBACiAJCWlmIChhdDkxX3VhcnRzW2ldKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwogCX0KKworCWlmICghYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MTogTm8gZGVmYXVsdCBzZXJpYWwgY29uc29sZSBkZWZpbmVkLlxuIik7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgX19kZXByZWNhdGVkIGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykge30KIHZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQogdm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKSB7fQogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQpAQCAtMTA1MCw2ICsxMDU5LDcgQEAKIHsKIAlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CisJYXQ5MV9hZGRfZGV2aWNlX3RjKCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzLmMKaW5kZXggYTUzYmEwZi4uMDUyMDc0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzLmMKQEAgLTExLDEyICsxMSwxNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3NoZHdjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTI3MSw2ICsyNzMsMTEgQEAKIAlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOwogfQogCitzdGF0aWMgdm9pZCBhdDkxc2FtOTI2M19wb3dlcm9mZih2b2lkKQoreworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU0hEV19DUiwgQVQ5MV9TSERXX0tFWSB8IEFUOTFfU0hEV19TSERXKTsKK30KKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIEFUOTFTQU05MjYzIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgpAQCAtMjgyLDYgKzI4OSw3IEBACiAJaW90YWJsZV9pbml0KGF0OTFzYW05MjYzX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYXQ5MXNhbTkyNjNfaW9fZGVzYykpOwogCiAJYXQ5MV9hcmNoX3Jlc2V0ID0gYXQ5MXNhbTkyNjNfcmVzZXQ7CisJcG1fcG93ZXJfb2ZmID0gYXQ5MXNhbTkyNjNfcG93ZXJvZmY7CiAJYXQ5MV9leHRlcm5faXJxID0gKDEgPDwgQVQ5MVNBTTkyNjNfSURfSVJRMCkgfCAoMSA8PCBBVDkxU0FNOTI2M19JRF9JUlExKTsKIAogCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYwppbmRleCAwYjEyZTFhLi5iNjQ1NGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2My5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjZ4X21jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNjNfbWF0cml4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlfc21jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTM1OCwxMCArMzU4LDE1IEBACiAjZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7Ci0JeworCVswXSA9IHsKIAkJLnN0YXJ0CT0gTkFORF9CQVNFLAogCQkuZW5kCT0gTkFORF9CQVNFICsgU1pfMjU2TSAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9FQ0MwLAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfRUNDMCArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0KIH07CiAKQEAgLTc4Myw2ICs3ODgsNDMgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2sKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2JfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1RDQjAsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1RDQjAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfSURfVENCLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfSURfVENCLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdGNiX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0Y2JfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2JfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKK3sKKwkvKiB0aGlzIGNoaXAgaGFzIG9uZSBjbG9jayBhbmQgaXJxIGZvciBhbGwgdGhyZWUgVEMgY2hhbm5lbHMgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGNiX2NsayIsICZhdDkxc2FtOTI2M190Y2JfZGV2aWNlLmRldiwgInQwX2NsayIpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfdGNiX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKSB7IH0KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgUlRUCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC05MzMsOSArOTc1LDYgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgZGV2aWNlIG5vZGUgc28gdGhhdCBib2FyZCBpbml0IGNvZGUgY2FuIHVzZSBpdCBhcyB0aGUKLSAqIHBhcmVudCBmb3IgdGhlIGRldmljZSBub2RlIHJlZmxlY3RpbmcgaG93IGl0J3MgdXNlZCBvbiB0aGlzIGJvYXJkLgotICoKICAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55CiAgKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQogICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQpAQCAtMTE0Niw0OSArMTE4NSw5IEBACiAJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BENiwgMCk7CS8qIENUUzIgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsJLyogdGhlIHNlcmlhbCBjb25zb2xlIGRldmljZSAqLwogCi12b2lkIF9faW5pdCBfX2RlcHJlY2F0ZWQgYXQ5MV9pbml0X3NlcmlhbChzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyAqY29uZmlnKQotewotCWludCBpOwotCi0JLyogRmlsbCBpbiBsaXN0IG9mIHN1cHBvcnRlZCBVQVJUcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjb25maWctPm5yX3R0eTsgaSsrKSB7Ci0JCXN3aXRjaCAoY29uZmlnLT50dHlfbWFwW2ldKSB7Ci0JCQljYXNlIDA6Ci0JCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjNfdWFydDBfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDBfY2xrIiwgJmF0OTFzYW05MjYzX3VhcnQwX2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucyhBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05MjYzX3VhcnQxX2RldmljZTsKLQkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQxX2NsayIsICZhdDkxc2FtOTI2M191YXJ0MV9kZXZpY2UuZGV2LCAidXNhcnQiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQljb25maWd1cmVfdXNhcnQyX3BpbnMoQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7Ci0JCQkJYXQ5MV91YXJ0c1tpXSA9ICZhdDkxc2FtOTI2M191YXJ0Ml9kZXZpY2U7Ci0JCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0Ml9jbGsiLCAmYXQ5MXNhbTkyNjNfdWFydDJfZGV2aWNlLmRldiwgInVzYXJ0Iik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjNfZGJndV9kZXZpY2U7Ci0JCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoIm1jayIsICZhdDkxc2FtOTI2M19kYmd1X2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQljb250aW51ZTsKLQkJfQotCQlhdDkxX3VhcnRzW2ldLT5pZCA9IGk7CQkvKiB1cGRhdGUgSUQgbnVtYmVyIHRvIG1hcHBlZCBJRCAqLwotCX0KLQotCS8qIFNldCBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KLQlpZiAoY29uZmlnLT5jb25zb2xlX3R0eSA8IEFUTUVMX01BWF9VQVJUKQotCQlhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlID0gYXQ5MV91YXJ0c1tjb25maWctPmNvbnNvbGVfdHR5XTsKLQlpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpCi0JCXByaW50ayhLRVJOX0lORk8gIkFUOTE6IE5vIGRlZmF1bHQgc2VyaWFsIGNvbnNvbGUgZGVmaW5lZC5cbiIpOwotfQotCiB2b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwpAQCAtMTIyNyw4ICsxMjI2LDYgQEAKIHsKIAlpZiAocG9ydG5yIDwgQVRNRUxfTUFYX1VBUlQpCiAJCWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UgPSBhdDkxX3VhcnRzW3BvcnRucl07Ci0JaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQotCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKIH0KIAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQpAQCAtMTIzOSw5ICsxMjM2LDExIEBACiAJCWlmIChhdDkxX3VhcnRzW2ldKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwogCX0KKworCWlmICghYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MTogTm8gZGVmYXVsdCBzZXJpYWwgY29uc29sZSBkZWZpbmVkLlxuIik7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9pbml0X3NlcmlhbChzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyAqY29uZmlnKSB7fQogdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpIHt9CiB2b2lkIF9faW5pdCBhdDkxX3NldF9zZXJpYWxfY29uc29sZSh1bnNpZ25lZCBwb3J0bnIpIHt9CiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpIHt9CkBAIC0xMjU3LDYgKzEyNTYsNyBAQAogewogCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKIAlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKKwlhdDkxX2FkZF9kZXZpY2VfdGMoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2eF90aW1lLmMKaW5kZXggZTM4ZDIzNy4uNWNlY2JkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNnhfdGltZS5jCkBAIC0xLDIzICsxLDIwIEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYworICogYXQ5MXNhbTkyNnhfdGltZS5jIC0gUGVyaW9kaWMgSW50ZXJ2YWwgVGltZXIgKFBJVCkgZm9yIGF0OTFzYW05MjZ4CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTS4gQW1pbmUgU0FZQSwgQVRNRUwgUm91c3NldCwgRnJhbmNlCiAgKiBSZXZpc2lvbgkgMjAwNSBNLiBOaWNvbGFzIERpcmVtZGppYW4sIEFUTUVMIFJvdXNzZXQsIEZyYW5jZQorICogQ29udmVydGVkIHRvIENsb2NrU291cmNlL0Nsb2NrRXZlbnRzIGJ5IERhdmlkIEJyb3duZWxsLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BpdC5oPgpAQCAtMjYsODUgKzIzLDE2NyBAQAogI2RlZmluZSBQSVRfQ1BJVih4KQkoKHgpICYgQVQ5MV9QSVRfQ1BJVikKICNkZWZpbmUgUElUX1BJQ05UKHgpCSgoKHgpICYgQVQ5MV9QSVRfUElDTlQpID4+IDIwKQogCitzdGF0aWMgdTMyIHBpdF9jeWNsZTsJCS8qIHdyaXRlLW9uY2UgKi8KK3N0YXRpYyB1MzIgcGl0X2NudDsJCS8qIGFjY2VzcyBvbmx5IHcvc3lzdGVtIGlycSBibG9ja2VkICovCisKKwogLyoKLSAqIFJldHVybnMgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBzaW5jZSBsYXN0IHRpbWVyIGludGVycnVwdC4gIE5vdGUgdGhhdCBpbnRlcnJ1cHRzCi0gKiB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBieSBkb19nZXR0aW1lb2ZkYXkoKQotICogICdMQVRDSCcgaXMgaHdjbG9jayB0aWNrcyAoc2VlIENMT0NLX1RJQ0tfUkFURSBpbiB0aW1leC5oKSBwZXIgamlmZnkuCisgKiBDbG9ja3NvdXJjZTogIGp1c3QgYSBtb25vdG9uaWMgY291bnRlciBvZiBNQ0svMTYgY3ljbGVzLgorICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIG9yIG5vdCBQSVQgaXJxcyBhcmUgZW5hYmxlZC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXQ5MXNhbTkyNnhfZ2V0dGltZW9mZnNldCh2b2lkKQorc3RhdGljIGN5Y2xlX3QgcmVhZF9waXRfY2xrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBlbGFwc2VkOwotCXVuc2lnbmVkIGxvbmcgdCA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QSVRfUElJUik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgZWxhcHNlZDsKKwl1MzIgdDsKIAotCWVsYXBzZWQgPSAoUElUX1BJQ05UKHQpICogTEFUQ0gpICsgUElUX0NQSVYodCk7CQkvKiBoYXJkd2FyZSBjbG9jayBjeWNsZXMgKi8KKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWVsYXBzZWQgPSBwaXRfY250OworCXQgPSBhdDkxX3N5c19yZWFkKEFUOTFfUElUX1BJSVIpOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGVsYXBzZWQgKiBqaWZmaWVzX3RvX3VzZWNzKDEpKSAvIExBVENIOworCWVsYXBzZWQgKz0gUElUX1BJQ05UKHQpICogcGl0X2N5Y2xlOworCWVsYXBzZWQgKz0gUElUX0NQSVYodCk7CisJcmV0dXJuIGVsYXBzZWQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgcGl0X2NsayA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkucmF0aW5nCQk9IDE3NSwKKwkucmVhZAkJPSByZWFkX3BpdF9jbGssCisJLnNoaWZ0CQk9IDIwLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKKworLyoKKyAqIENsb2NrZXZlbnQgZGV2aWNlOiAgaW50ZXJydXB0cyBldmVyeSAxL0haICg9PSBwaXRfY3ljbGVzICogTUNLLzE2KQorICovCitzdGF0aWMgdm9pZAorcGl0X2Nsa2V2dF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCS8qIHVwZGF0ZSBjbG9ja3NvdXJjZSBjb3VudGVyLCB0aGVuIGVuYWJsZSB0aGUgSVJRICovCisJCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXBpdF9jbnQgKz0gcGl0X2N5Y2xlICogUElUX1BJQ05UKGF0OTFfc3lzX3JlYWQoQVQ5MV9QSVRfUElWUikpOworCQlhdDkxX3N5c193cml0ZShBVDkxX1BJVF9NUiwgKHBpdF9jeWNsZSAtIDEpIHwgQVQ5MV9QSVRfUElURU4KKwkJCQl8IEFUOTFfUElUX1BJVElFTik7CisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJQlVHKCk7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwkJLyogZGlzYWJsZSBpcnEsIGxlYXZpbmcgdGhlIGNsb2Nrc291cmNlIGFjdGl2ZSAqLworCQlhdDkxX3N5c193cml0ZShBVDkxX1BJVF9NUiwgKHBpdF9jeWNsZSAtIDEpIHwgQVQ5MV9QSVRfUElURU4pOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBwaXRfY2xrZXZ0ID0geworCS5uYW1lCQk9ICJwaXQiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5zaGlmdAkJPSAzMiwKKwkucmF0aW5nCQk9IDEwMCwKKwkuY3B1bWFzawk9IENQVV9NQVNLX0NQVTAsCisJLnNldF9tb2RlCT0gcGl0X2Nsa2V2dF9tb2RlLAorfTsKKworCiAvKgogICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lci4KICAqLwotc3RhdGljIGlycXJldHVybl90IGF0OTFzYW05MjZ4X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MXNhbTkyNnhfcGl0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jdm9sYXRpbGUgbG9uZyBucl90aWNrczsKIAotCWlmIChhdDkxX3N5c19yZWFkKEFUOTFfUElUX1NSKSAmIEFUOTFfUElUX1BJVFMpIHsJLyogVGhpcyBpcyBhIHNoYXJlZCBpbnRlcnJ1cHQgKi8KLQkJLyogR2V0IG51bWJlciB0byB0aWNrcyBwZXJmb3JtZWQgYmVmb3JlIGludGVycnVwdCBhbmQgY2xlYXIgUElUIGludGVycnVwdCAqLworCS8qIFRoZSBQSVQgaW50ZXJydXB0IG1heSBiZSBkaXNhYmxlZCwgYW5kIGlzIHNoYXJlZCAqLworCWlmICgocGl0X2Nsa2V2dC5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCQkJJiYgKGF0OTFfc3lzX3JlYWQoQVQ5MV9QSVRfU1IpICYgQVQ5MV9QSVRfUElUUykpIHsKKwkJdW5zaWduZWQgbnJfdGlja3M7CisKKwkJLyogR2V0IG51bWJlciBvZiB0aWNrcyBwZXJmb3JtZWQgYmVmb3JlIGlycSwgYW5kIGFjayBpdCAqLwogCQlucl90aWNrcyA9IFBJVF9QSUNOVChhdDkxX3N5c19yZWFkKEFUOTFfUElUX1BJVlIpKTsKIAkJZG8gewotCQkJdGltZXJfdGljaygpOworCQkJcGl0X2NudCArPSBwaXRfY3ljbGU7CisJCQlwaXRfY2xrZXZ0LmV2ZW50X2hhbmRsZXIoJnBpdF9jbGtldnQpOwogCQkJbnJfdGlja3MtLTsKIAkJfSB3aGlsZSAobnJfdGlja3MpOwogCiAJCXJldHVybiBJUlFfSEFORExFRDsKLQl9IGVsc2UKLQkJcmV0dXJuIElSUV9OT05FOwkJLyogbm90IGhhbmRsZWQgKi8KKwl9CisKKwlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGF0OTFzYW05MjZ4X3RpbWVyX2lycSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGF0OTFzYW05MjZ4X3BpdF9pcnEgPSB7CiAJLm5hbWUJCT0gImF0OTFfdGljayIsCiAJLmZsYWdzCQk9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBhdDkxc2FtOTI2eF90aW1lcl9pbnRlcnJ1cHQKKwkuaGFuZGxlcgk9IGF0OTFzYW05MjZ4X3BpdF9pbnRlcnJ1cHQKIH07CiAKLXZvaWQgYXQ5MXNhbTkyNnhfdGltZXJfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIGF0OTFzYW05MjZ4X3BpdF9yZXNldCh2b2lkKQogewotCS8qIERpc2FibGUgdGltZXIgKi8KKwkvKiBEaXNhYmxlIHRpbWVyIGFuZCBpcnFzICovCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSVRfTVIsIDApOwogCi0JLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCSh2b2lkKSBhdDkxX3N5c19yZWFkKEFUOTFfUElUX1BJVlIpOworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMsIHdhaXQgZm9yIFBJVCB0byBzdG9wIGNvdW50aW5nICovCisJd2hpbGUgKFBJVF9DUElWKGF0OTFfc3lzX3JlYWQoQVQ5MV9QSVRfUElWUikpICE9IDApCisJCWNwdV9yZWxheCgpOwogCi0JLyogU2V0IFBlcmlvZCBJbnRlcnZhbCB0aW1lciBhbmQgZW5hYmxlIGl0cyBpbnRlcnJ1cHQgKi8KLQlhdDkxX3N5c193cml0ZShBVDkxX1BJVF9NUiwgKExBVENIICYgQVQ5MV9QSVRfUElWKSB8IEFUOTFfUElUX1BJVElFTiB8IEFUOTFfUElUX1BJVEVOKTsKKwkvKiBTdGFydCBQSVQgYnV0IGRvbid0IGVuYWJsZSBJUlEgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1BJVF9NUiwgKHBpdF9jeWNsZSAtIDEpIHwgQVQ5MV9QSVRfUElURU4pOwogfQogCiAvKgotICogU2V0IHVwIHRpbWVyIGludGVycnVwdC4KKyAqIFNldCB1cCBib3RoIGNsb2Nrc291cmNlIGFuZCBjbG9ja2V2ZW50IHN1cHBvcnQuCiAgKi8KLXZvaWQgX19pbml0IGF0OTFzYW05MjZ4X3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxc2FtOTI2eF9waXRfaW5pdCh2b2lkKQogewotCS8qIEluaXRpYWxpemUgYW5kIGVuYWJsZSB0aGUgdGltZXIgKi8KLQlhdDkxc2FtOTI2eF90aW1lcl9yZXNldCgpOworCXVuc2lnbmVkIGxvbmcJcGl0X3JhdGU7CisJdW5zaWduZWQJYml0czsKIAotCS8qIE1ha2UgSVJRcyBoYXBwZW4gZm9yIHRoZSBzeXN0ZW0gdGltZXIuICovCi0Jc2V0dXBfaXJxKEFUOTFfSURfU1lTLCAmYXQ5MXNhbTkyNnhfdGltZXJfaXJxKTsKKwkvKgorCSAqIFVzZSBvdXIgYWN0dWFsIE1DSyB0byBmaWd1cmUgb3V0IGhvdyBtYW55IE1DSy8xNiB0aWNrcyBwZXIKKwkgKiAxL0haIHBlcmlvZCAoaW5zdGVhZCBvZiBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBMQVRDSCkuCisJICovCisJcGl0X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrX2dldChOVUxMLCAibWNrIikpIC8gMTY7CisJcGl0X2N5Y2xlID0gKHBpdF9yYXRlICsgSFovMikgLyBIWjsKKwlXQVJOX09OKCgocGl0X2N5Y2xlIC0gMSkgJiB+QVQ5MV9QSVRfUElWKSAhPSAwKTsKKworCS8qIEluaXRpYWxpemUgYW5kIGVuYWJsZSB0aGUgdGltZXIgKi8KKwlhdDkxc2FtOTI2eF9waXRfcmVzZXQoKTsKKworCS8qCisJICogUmVnaXN0ZXIgY2xvY2tzb3VyY2UuICBUaGUgaGlnaCBvcmRlciBiaXRzIG9mIFBJViBhcmUgdW51c2VkLAorCSAqIHNvIHRoaXMgaXNuJ3QgYSAzMi1iaXQgY291bnRlciB1bmxlc3Mgd2UgZ2V0IGNsb2NrZXZlbnQgaXJxcy4KKwkgKi8KKwlwaXRfY2xrLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHBpdF9yYXRlLCBwaXRfY2xrLnNoaWZ0KTsKKwliaXRzID0gMTIgLyogUElDTlQgKi8gKyBpbG9nMihwaXRfY3ljbGUpIC8qIFBJViAqLzsKKwlwaXRfY2xrLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKGJpdHMpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZwaXRfY2xrKTsKKworCS8qIFNldCB1cCBpcnEgaGFuZGxlciAqLworCXNldHVwX2lycShBVDkxX0lEX1NZUywgJmF0OTFzYW05MjZ4X3BpdF9pcnEpOworCisJLyogU2V0IHVwIGFuZCByZWdpc3RlciBjbG9ja2V2ZW50cyAqLworCXBpdF9jbGtldnQubXVsdCA9IGRpdl9zYyhwaXRfcmF0ZSwgTlNFQ19QRVJfU0VDLCBwaXRfY2xrZXZ0LnNoaWZ0KTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnBpdF9jbGtldnQpOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdm9pZCBhdDkxc2FtOTI2eF90aW1lcl9zdXNwZW5kKHZvaWQpCitzdGF0aWMgdm9pZCBhdDkxc2FtOTI2eF9waXRfc3VzcGVuZCh2b2lkKQogewogCS8qIERpc2FibGUgdGltZXIgKi8KIAlhdDkxX3N5c193cml0ZShBVDkxX1BJVF9NUiwgMCk7CiB9Ci0jZWxzZQotI2RlZmluZSBhdDkxc2FtOTI2eF90aW1lcl9zdXNwZW5kCU5VTEwKLSNlbmRpZgogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGF0OTFzYW05MjZ4X3RpbWVyID0gewotCS5pbml0CQk9IGF0OTFzYW05MjZ4X3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBhdDkxc2FtOTI2eF9nZXR0aW1lb2Zmc2V0LAotCS5zdXNwZW5kCT0gYXQ5MXNhbTkyNnhfdGltZXJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGF0OTFzYW05MjZ4X3RpbWVyX3Jlc2V0LAorCS5pbml0CQk9IGF0OTFzYW05MjZ4X3BpdF9pbml0LAorCS5zdXNwZW5kCT0gYXQ5MXNhbTkyNnhfcGl0X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdDkxc2FtOTI2eF9waXRfcmVzZXQsCiB9OwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYwppbmRleCA0ODEzYTM1Li45MDJjNzk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTE3LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOXJsLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3NoZHdjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTI0NCw2ICsyNDYsMTEgQEAKIAlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOwogfQogCitzdGF0aWMgdm9pZCBhdDkxc2FtOXJsX3Bvd2Vyb2ZmKHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TSERXX0NSLCBBVDkxX1NIRFdfS0VZIHwgQVQ5MV9TSERXX1NIRFcpOworfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgQVQ5MVNBTTlSTCBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KQEAgLTI3NCw2ICsyODEsNyBAQAogCWlvdGFibGVfaW5pdChhdDkxc2FtOXJsX3NyYW1fZGVzYywgQVJSQVlfU0laRShhdDkxc2FtOXJsX3NyYW1fZGVzYykpOwogCiAJYXQ5MV9hcmNoX3Jlc2V0ID0gYXQ5MXNhbTlybF9yZXNldDsKKwlwbV9wb3dlcl9vZmYgPSBhdDkxc2FtOXJsX3Bvd2Vyb2ZmOwogCWF0OTFfZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05UkxfSURfSVJRMCk7CiAKIAkvKiBJbml0IGNsb2NrIHN1YnN5c3RlbSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCmluZGV4IGY0M2I1YzMuLmRiYjlhNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlybC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05cmxfbWF0cml4Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNnhfbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOV9zbWMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMTA1LDEwICsxMDUsMTUgQEAKICNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKLQl7CisJWzBdID0gewogCQkuc3RhcnQJPSBOQU5EX0JBU0UsCiAJCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQywKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQyArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0KIH07CiAKQEAgLTM4NSw2ICszOTAsNTUgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2sKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0Y2JfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0JBU0VfVENCMCwKKwkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9UQ0IwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfVEMwLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9UQzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0lEX1RDMSwKKwkJLmVuZAk9IEFUOTFTQU05UkxfSURfVEMxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9JRF9UQzIsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0lEX1RDMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfdGNiX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0Y2JfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0Y2JfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkKK3sKKwkvKiB0aGlzIGNoaXAgaGFzIGEgc2VwYXJhdGUgY2xvY2sgYW5kIGlycSBmb3IgZWFjaCBUQyBjaGFubmVsICovCisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjMF9jbGsiLCAmYXQ5MXNhbTlybF90Y2JfZGV2aWNlLmRldiwgInQwX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzFfY2xrIiwgJmF0OTFzYW05cmxfdGNiX2RldmljZS5kZXYsICJ0MV9jbGsiKTsKKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGMyX2NsayIsICZhdDkxc2FtOXJsX3RjYl9kZXZpY2UuZGV2LCAidDJfY2xrIik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX3RjYl9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFJUQwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNDE4LDcgKzQ3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfcnR0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV9ydHQiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydHRfcmVzb3VyY2VzKSwKIH07CkBAIC01MzksOSArNTkzLDYgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgZGV2aWNlIG5vZGUgc28gdGhhdCBib2FyZCBpbml0IGNvZGUgY2FuIHVzZSBpdCBhcyB0aGUKLSAqIHBhcmVudCBmb3IgdGhlIGRldmljZSBub2RlIHJlZmxlY3RpbmcgaG93IGl0J3MgdXNlZCBvbiB0aGlzIGJvYXJkLgotICoKICAqIFNTQyBjb250cm9sbGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBsaWJyYXJ5IGNvZGUsIGluc3RlYWQgb2YgYW55CiAgKiBraW5kIG9mIGFsbC1zaW5naW5nL2FsbC1kYW5jaW5nIGRyaXZlci4gIEZvciBleGFtcGxlIG9uZSBjb3VsZCBiZQogICogdXNlZCBieSBhIHBhcnRpY3VsYXIgSTJTIGF1ZGlvIGNvZGVjJ3MgZHJpdmVyLCB3aGlsZSBhbm90aGVyIG9uZQpAQCAtODAyLDU0ICs4NTMsOSBAQAogCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDMsIDApOwkvKiBDVFMzICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2U7CS8qIHRoZSBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KIAotdm9pZCBfX2luaXQgX19kZXByZWNhdGVkIGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykKLXsKLQlpbnQgaTsKLQotCS8qIEZpbGwgaW4gbGlzdCBvZiBzdXBwb3J0ZWQgVUFSVHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ucl90dHk7IGkrKykgewotCQlzd2l0Y2ggKGNvbmZpZy0+dHR5X21hcFtpXSkgewotCQkJY2FzZSAwOgotCQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKLQkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05cmxfdWFydDBfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDBfY2xrIiwgJmF0OTFzYW05cmxfdWFydDBfZGV2aWNlLmRldiwgInVzYXJ0Iik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKDApOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTlybF91YXJ0MV9kZXZpY2U7Ci0JCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MV9jbGsiLCAmYXQ5MXNhbTlybF91YXJ0MV9kZXZpY2UuZGV2LCAidXNhcnQiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQljb25maWd1cmVfdXNhcnQyX3BpbnMoMCk7Ci0JCQkJYXQ5MV91YXJ0c1tpXSA9ICZhdDkxc2FtOXJsX3VhcnQyX2RldmljZTsKLQkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQyX2NsayIsICZhdDkxc2FtOXJsX3VhcnQyX2RldmljZS5kZXYsICJ1c2FydCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAzOgotCQkJCWNvbmZpZ3VyZV91c2FydDNfcGlucygwKTsKLQkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05cmxfdWFydDNfZGV2aWNlOwotCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDNfY2xrIiwgJmF0OTFzYW05cmxfdWFydDNfZGV2aWNlLmRldiwgInVzYXJ0Iik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDQ6Ci0JCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOwotCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTlybF9kYmd1X2RldmljZTsKLQkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgibWNrIiwgJmF0OTFzYW05cmxfZGJndV9kZXZpY2UuZGV2LCAidXNhcnQiKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJY29udGludWU7Ci0JCX0KLQkJYXQ5MV91YXJ0c1tpXS0+aWQgPSBpOwkJLyogdXBkYXRlIElEIG51bWJlciB0byBtYXBwZWQgSUQgKi8KLQl9Ci0KLQkvKiBTZXQgc2VyaWFsIGNvbnNvbGUgZGV2aWNlICovCi0JaWYgKGNvbmZpZy0+Y29uc29sZV90dHkgPCBBVE1FTF9NQVhfVUFSVCkKLQkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFydHNbY29uZmlnLT5jb25zb2xlX3R0eV07Ci0JaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQotCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKLX0KLQogdm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKQEAgLTg5Myw4ICs4OTksNiBAQAogewogCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKIAkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFydHNbcG9ydG5yXTsKLQlpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpCi0JCXByaW50ayhLRVJOX0lORk8gIkFUOTE6IE5vIGRlZmF1bHQgc2VyaWFsIGNvbnNvbGUgZGVmaW5lZC5cbiIpOwogfQogCiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCkBAIC05MDUsOSArOTA5LDExIEBACiAJCWlmIChhdDkxX3VhcnRzW2ldKQogCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0pOwogCX0KKworCWlmICghYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MTogTm8gZGVmYXVsdCBzZXJpYWwgY29uc29sZSBkZWZpbmVkLlxuIik7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgX19kZXByZWNhdGVkIGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykge30KIHZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQogdm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKSB7fQogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQpAQCAtOTI1LDYgKzkzMSw3IEBACiAJYXQ5MV9hZGRfZGV2aWNlX3J0YygpOwogCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKIAlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKKwlhdDkxX2FkZF9kZXZpY2VfdGMoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FtNjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjJhMWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBLd2lrQnl0ZSBDQU02MCAoS0I5MjYwKQorICoKKyAqIGJhc2VkIG9uIGJvYXJkLXNhbTkyNjBlay5jCisgKiAgIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKiAgIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKK3N0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9tYXBfaW8odm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTAgTUh6IGNyeXN0YWwgKi8KKwlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDEwMDAwMDAwKTsKKworCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KKwlhdDkxX3NldF9zZXJpYWxfY29uc29sZSgwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGNhbTYwX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXNhbTkyNjBfaW5pdF9pbnRlcnJ1cHRzKE5VTEwpOworfQorCisKKy8qCisgKiBVU0IgSG9zdAorICovCitzdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgY2FtNjBfdXNiaF9kYXRhID0geworCS5wb3J0cwkJPSAxLAorfTsKKworCisvKgorICogU1BJIGRldmljZXMuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgY2FtNjBfc3BpX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIkJPT1QxIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gNCAqIDEwNTYsCisJfSwKKwl7CisJCS5uYW1lCT0gIkJPT1QyIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJPSAyNTYgKiAxMDU2LAorCX0sCisJeworCQkubmFtZQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZQk9IDIyMjIgKiAxMDU2LAorCX0sCisJeworCQkubmFtZQk9ICJmaWxlIHN5c3RlbSIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY2FtNjBfc3BpX2ZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUJCT0gInNwaV9mbGFzaCIsCisJLnBhcnRzCQk9IGNhbTYwX3NwaV9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY2FtNjBfc3BpX3BhcnRpdGlvbnMpCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY2FtNjBfc3BpX2RldmljZXNbXSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIKQorCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkucGxhdGZvcm1fZGF0YQk9ICZjYW02MF9zcGlfZmxhc2hfcGxhdGZvcm1fZGF0YQorCX0sCisjZW5kaWYKK307CisKKworLyoKKyAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBhdDkxX2V0aF9kYXRhIGNhbTYwX21hY2JfZGF0YSA9IHsKKwkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjUsCisJLmlzX3JtaWkJPSAwLAorfTsKKworCisvKgorICogTkFORCBGbGFzaAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBjYW02MF9uYW5kX3BhcnRpdGlvbltdID0geworCXsKKwkJLm5hbWUJPSAibmFuZF9mcyIsCisJCS5vZmZzZXQJPSAwLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShjYW02MF9uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGNhbTYwX25hbmRfcGFydGl0aW9uOworfQorCitzdGF0aWMgc3RydWN0IGF0OTFfbmFuZF9kYXRhIF9faW5pdGRhdGEgY2FtNjBfbmFuZF9kYXRhID0geworCS5hbGUJCT0gMjEsCisJLmNsZQkJPSAyMiwKKwkvLyAuZGV0X3Bpbgk9IC4uLiBub3QgdGhlcmUKKwkucmR5X3Bpbgk9IEFUOTFfUElOX1BBOSwKKwkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BBNywKKwkucGFydGl0aW9uX2luZm8JPSBuYW5kX3BhcnRpdGlvbnMsCit9OworCisKK3N0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9ib2FyZF9pbml0KHZvaWQpCit7CisJLyogU2VyaWFsICovCisJYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOworCS8qIFNQSSAqLworCWF0OTFfYWRkX2RldmljZV9zcGkoY2FtNjBfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoY2FtNjBfc3BpX2RldmljZXMpKTsKKwkvKiBFdGhlcm5ldCAqLworCWF0OTFfYWRkX2RldmljZV9ldGgoJmNhbTYwX21hY2JfZGF0YSk7CisJLyogVVNCIEhvc3QgKi8KKwkvKiBlbmFibGUgVVNCIHBvd2VyIHN1cHBseSBjaXJjdWl0ICovCisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIxOCwgMSk7CisJYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNhbTYwX3VzYmhfZGF0YSk7CisJLyogTkFORCAqLworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjYW02MF9uYW5kX2RhdGEpOworfQorCitNQUNISU5FX1NUQVJUKENBTTYwLCAiS3dpa0J5dGUgQ0FNNjAiKQorCS8qIE1haW50YWluZXI6IEt3aWtCeXRlICovCisJLnBoeXNfaW8JPSBBVDkxX0JBU0VfU1lTLAorCS5pb19wZ19vZmZzdAk9IChBVDkxX1ZBX0JBU0VfU1lTID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBBVDkxX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkudGltZXIJCT0gJmF0OTFzYW05MjZ4X3RpbWVyLAorCS5tYXBfaW8JCT0gY2FtNjBfbWFwX2lvLAorCS5pbml0X2lycQk9IGNhbTYwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBjYW02MF9ib2FyZF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jCmluZGV4IDE4NTQzNzEuLmU1NTEyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFjYXA5X21hdHJpeC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjZ4X21jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlfc21jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYwppbmRleCAwZTJhMTFmLi4yNmZlYTRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjMzNy5jCkBAIC00MywxNyArNDMsNiBAQAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogCi0vKgotICogU2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbi4KLSAqICAgIDAgLi4gMyA9IFVTQVJUMCAuLiBVU0FSVDMKLSAqICAgIDQgICAgICA9IERCR1UKLSAqLwotc3RhdGljIHN0cnVjdCBhdDkxX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgY3NiMzM3X3VhcnRfY29uZmlnID0gewotCS5jb25zb2xlX3R0eQk9IDAsCQkJCS8qIHR0eVMwICovCi0JLm5yX3R0eQkJPSAyLAotCS50dHlfbWFwCT0geyA0LCAxLCAtMSwgLTEsIC0xIH0JCS8qIHR0eVMwLCAuLi4sIHR0eVM0ICovCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgY3NiMzM3X21hcF9pbyh2b2lkKQogewogCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KQEAgLTYyLDggKzUxLDExIEBACiAJLyogU2V0dXAgdGhlIExFRHMgKi8KIAlhdDkxX2luaXRfbGVkcyhBVDkxX1BJTl9QQjAsIEFUOTFfUElOX1BCMSk7CiAKLQkvKiBTZXR1cCB0aGUgc2VyaWFsIHBvcnRzIGFuZCBjb25zb2xlICovCi0JYXQ5MV9pbml0X3NlcmlhbCgmY3NiMzM3X3VhcnRfY29uZmlnKTsKKwkvKiBEQkdVIG9uIHR0eVMwICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogbWFrZSBjb25zb2xlPXR0eVMwIHRoZSBkZWZhdWx0ICovCisJYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUoMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMzdfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYwppbmRleCBjNWM3MjFkLi40MTlmZDE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiNjM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNzYjYzNy5jCkBAIC00MCwyNyArNDAsMTYgQEAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIAotLyoKLSAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCi0gKiAgICAwIC4uIDMgPSBVU0FSVDAgLi4gVVNBUlQzCi0gKiAgICA0ICAgICAgPSBEQkdVCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhIGNzYjYzN191YXJ0X2NvbmZpZyA9IHsKLQkuY29uc29sZV90dHkJPSAwLAkJCQkvKiB0dHlTMCAqLwotCS5ucl90dHkJCT0gMiwKLQkudHR5X21hcAk9IHsgNCwgMSwgLTEsIC0xLCAtMSB9CQkvKiB0dHlTMCwgLi4uLCB0dHlTNCAqLwotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IGNzYjYzN19tYXBfaW8odm9pZCkKIHsKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMy42ODY0IE1IeiBjcnlzdGFsICovCiAJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDM2ODY0MDAsIEFUOTFSTTkyMDBfQkdBKTsKIAotCS8qIFNldHVwIHRoZSBMRURzICovCi0JYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEIyLCBBVDkxX1BJTl9QQjIpOworCS8qIERCR1Ugb24gdHR5UzAgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CiAKLQkvKiBTZXR1cCB0aGUgc2VyaWFsIHBvcnRzIGFuZCBjb25zb2xlICovCi0JYXQ5MV9pbml0X3NlcmlhbCgmY3NiNjM3X3VhcnRfY29uZmlnKTsKKwkvKiBtYWtlIGNvbnNvbGU9dHR5UzAgdGhlIGRlZmF1bHQgKi8KKwlhdDkxX3NldF9zZXJpYWxfY29uc29sZSgwKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNzYjYzN19pbml0X2lycSh2b2lkKQpAQCAtMTE4LDggKzEwNywxOSBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjc2JfZmxhc2hfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgY3NiX2xlZHNbXSA9IHsKKwl7CS8qICJkMSIsIHJlZCAqLworCQkubmFtZQkJCT0gImQxIiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCX0sCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgY3NiNjM3X2JvYXJkX2luaXQodm9pZCkKIHsKKwkvKiBMRUQocykgKi8KKwlhdDkxX2dwaW9fbGVkcyhjc2JfbGVkcywgQVJSQVlfU0laRShjc2JfbGVkcykpOwogCS8qIFNlcmlhbCAqLwogCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKIAkvKiBFdGhlcm5ldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVjYmF0OTEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY2JhdDkxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3ZmFkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lY2JhdDkxLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWNiYXQ5MS5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgZW1RYml0LmNvbS4KKyAqCisgKiBXZSBzdGFydGVkIGZyb20gYm9hcmQtZGsuYywgd2hpY2ggaXMgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworc3RhdGljIHZvaWQgX19pbml0IGVjYl9hdDkxbWFwX2lvKHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLworCWF0OTFybTkyMDBfaW5pdGlhbGl6ZSgxODQzMjAwMCwgQVQ5MVJNOTIwMF9QUUZQKTsKKworCS8qIFNldHVwIHRoZSBMRURzICovCisJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEM3LCBBVDkxX1BJTl9QQzcpOworCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMwLCAxLCAwKTsKKworCS8qIHNldCBzZXJpYWwgY29uc29sZSB0byB0dHlTMCAoaWUsIERCR1UpICovCisJYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUoMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlY2JfYXQ5MWluaXRfaXJxKHZvaWQpCit7CisJYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIGVjYl9hdDkxZXRoX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAorCS5pc19ybWlpCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBlY2JfYXQ5MXVzYmhfZGF0YSA9IHsKKwkucG9ydHMJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGVjYl9hdDkxbW1jX2RhdGEgPSB7CisJLnNsb3RfYgkJPSAwLAorCS53aXJlNAkJPSAxLAorfTsKKworCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIG15X2ZsYXNoMF9wYXJ0aXRpb25zW10gPQoreworCXsJLyogMHg4NDAwICovCisJCS5uYW1lCT0gIkRhcnJlbGwtbG9hZGVyIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gMTIqIDEwNTYsCisJfSwKKwl7CisJCS5uYW1lCT0gIlUtYm9vdCIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCT0gMTEwICogMTA1NiwKKwl9LAorCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KKwkJLm5hbWUJPSAiVUJvb3QtZW52IiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJPSA4ICogMTA1NiwKKwl9LAorCXsJLyogMTMzNiAoMTY3IGJsb2NrcykgcGFnZXMgKiAxMDU2IGJ5dGVzID0gMHgxNTg3MDAgYnl0ZXMgKi8KKwkJLm5hbWUJPSAiS2VybmVsIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJPSAxNTM0ICogMTA1NiwKKwl9LAorCXsJLyogMTkwMjAwIC0gamZmczIgcm9vdCBmaWxlc3lzdGVtICovCisJCS5uYW1lCT0gIkZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCS8qIDI2IHNlY3RvcnMgKi8KKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBteV9mbGFzaDBfcGxhdGZvcm0gPSB7CisJLm5hbWUJCT0gIlJlbW92YWJsZSBmbGFzaCBjYXJkIiwKKwkucGFydHMJCT0gbXlfZmxhc2gwX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShteV9mbGFzaDBfcGFydGl0aW9ucykKK307CisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWNiX2F0OTFzcGlfZGV2aWNlc1tdID0geworCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkubWF4X3NwZWVkX2h6CT0gMTAgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm15X2ZsYXNoMF9wbGF0Zm9ybSwKKyNlbmRpZgorCX0sCisJewkvKiBVc2VyIGFjY2Vzc2FibGUgc3BpIC0gY3MxICgyNTBLSHopICovCisJCS5tb2RhbGlhcwk9ICJzcGktY3MxIiwKKwkJLmNoaXBfc2VsZWN0CT0gMSwKKwkJLm1heF9zcGVlZF9oegk9IDI1MCAqIDEwMDAsCisJfSwKKwl7CS8qIFVzZXIgYWNjZXNzYWJsZSBzcGkgLSBjczIgKDFNSHopICovCisJCS5tb2RhbGlhcwk9ICJzcGktY3MyIiwKKwkJLmNoaXBfc2VsZWN0CT0gMiwKKwkJLm1heF9zcGVlZF9oegk9IDEgKiAxMDAwICogMTAwMCwKKwl9LAorCXsJLyogVXNlciBhY2Nlc3NhYmxlIHNwaSAtIGNzMyAoMTBNSHopICovCisJCS5tb2RhbGlhcwk9ICJzcGktY3MzIiwKKwkJLmNoaXBfc2VsZWN0CT0gMywKKwkJLm1heF9zcGVlZF9oegk9IDEwICogMTAwMCAqIDEwMDAsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlY2JfYXQ5MWJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisKKwkvKiBFdGhlcm5ldCAqLworCWF0OTFfYWRkX2RldmljZV9ldGgoJmVjYl9hdDkxZXRoX2RhdGEpOworCisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWNiX2F0OTF1c2JoX2RhdGEpOworCisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKKworCS8qIE1NQyAqLworCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVjYl9hdDkxbW1jX2RhdGEpOworCisJLyogU1BJICovCisJYXQ5MV9hZGRfZGV2aWNlX3NwaShlY2JfYXQ5MXNwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVjYl9hdDkxc3BpX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChFQ0JBVDkxLCAiZW1RYml0J3MgRUNCX0FUOTEiKQorCS8qIE1haW50YWluZXI6IGVtUWJpdC5jb20gKi8KKwkucGh5c19pbwk9IEFUOTFfQkFTRV9TWVMsCisJLmlvX3BnX29mZnN0CT0gKEFUOTFfVkFfQkFTRV9TWVMgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEFUOTFfU0RSQU1fQkFTRSArIDB4MTAwLAorCS50aW1lcgkJPSAmYXQ5MXJtOTIwMF90aW1lciwKKwkubWFwX2lvCQk9IGVjYl9hdDkxbWFwX2lvLAorCS5pbml0X2lycQk9IGVjYl9hdDkxaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGVjYl9hdDkxYm9hcmRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOS1sOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTktbDkyNjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjc2YWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTktbDkyNjAuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgT2xpbWV4IEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19tYXBfaW8odm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCisJYXQ5MXNhbTkyNjBfaW5pdGlhbGl6ZSgxODQzMjAwMCk7CisKKwkvKiBTZXR1cCB0aGUgTEVEcyAqLworCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BBOSwgQVQ5MV9QSU5fUEE2KTsKKworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUworCQkJICAgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwgQVRNRUxfVUFSVF9EQ0QKKwkJCSAgIHwgQVRNRUxfVUFSVF9SSSk7CisKKwkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIENUUywgUlRTKSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2MF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOworCisJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KKwlhdDkxX3NldF9zZXJpYWxfY29uc29sZSgwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXNhbTkyNjBfaW5pdF9pbnRlcnJ1cHRzKE5VTEwpOworfQorCisKKy8qCisgKiBVU0IgSG9zdCBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7CisJLnBvcnRzCQk9IDIsCit9OworCisvKgorICogVVNCIERldmljZSBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVrX3VkY19kYXRhID0geworCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDNSwKKwkucHVsbHVwX3Bpbgk9IDAsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KK307CisKKworLyoKKyAqIFNQSSBkZXZpY2VzLgorICovCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7CisjaWYgIWRlZmluZWQoQ09ORklHX01NQ19BVDkxKQorCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAxLAorCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorCX0sCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCisJewkvKiBEYXRhRmxhc2ggY2FyZCAqLworCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJfSwKKyNlbmRpZgorI2VuZGlmCit9OworCisKKy8qCisgKiBNQUNCIEV0aGVybmV0IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEE3LAorCS5pc19ybWlpCT0gMCwKK307CisKKworLyoKKyAqIE5BTkQgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgZWtfbmFuZF9wYXJ0aXRpb25bXSA9IHsKKwl7CisJCS5uYW1lCT0gIkJvb3Rsb2FkZXIgQXJlYSIsCisJCS5vZmZzZXQJPSAwLAorCQkuc2l6ZQk9IDEwICogMTAyNCAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCT0gIlVzZXIgQXJlYSIsCisJCS5vZmZzZXQJPSAxMCAqIDEwMjQgKiAxMDI0LAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGVrX25hbmRfcGFydGl0aW9uOworfQorCitzdGF0aWMgc3RydWN0IGF0OTFfbmFuZF9kYXRhIF9faW5pdGRhdGEgZWtfbmFuZF9kYXRhID0geworCS5hbGUJCT0gMjEsCisJLmNsZQkJPSAyMiwKKy8vCS5kZXRfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKKwkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCisJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAorCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVDkxX0JVU1dJRFRIXzE2KQorCS5idXNfd2lkdGhfMTYJPSAxLAorI2Vsc2UKKwkuYnVzX3dpZHRoXzE2CT0gMCwKKyNlbmRpZgorfTsKKworCisvKgorICogTUNJIChTRC9NTUMpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0geworCS5zbG90X2IJCT0gMSwKKwkud2lyZTQJCT0gMSwKKwkuZGV0X3Bpbgk9IEFUOTFfUElOX1BDOCwKKwkud3BfcGluCQk9IEFUOTFfUElOX1BDNCwKKy8vCS52Y2NfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCit7CisJLyogU2VyaWFsICovCisJYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOworCS8qIFVTQiBIb3N0ICovCisJYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmVrX3VzYmhfZGF0YSk7CisJLyogVVNCIERldmljZSAqLworCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKKwkvKiBTUEkgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7CisJLyogTkFORCAqLworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOworCS8qIEV0aGVybmV0ICovCisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKKwkvKiBNTUMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKK30KKworTUFDSElORV9TVEFSVChTQU05X0w5MjYwLCAiT2xpbWV4IFNBTTktTDkyNjAiKQorCS8qIE1haW50YWluZXI6IE9saW1leCAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxc2FtOTI2eF90aW1lciwKKwkubWFwX2lvCQk9IGVrX21hcF9pbywKKwkuaW5pdF9pcnEJPSBla19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZWtfYm9hcmRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMKaW5kZXggYjM0M2E2Yy4uNGQxZDljNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYwpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYXQ3M2MyMTMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMzcsMjkgKzM5LDI4IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2eF9tYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKLS8qCi0gKiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uLgotICogICAgMCAuLiA1ID0gVVNBUlQwIC4uIFVTQVJUNQotICogICAgNiAgICAgID0gREJHVQotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWFydF9jb25maWcgX19pbml0ZGF0YSBla191YXJ0X2NvbmZpZyA9IHsKLQkuY29uc29sZV90dHkJPSAwLAkJCQkvKiB0dHlTMCAqLwotCS5ucl90dHkJCT0gMywKLQkudHR5X21hcAk9IHsgNiwgMCwgMSwgLTEsIC0xLCAtMSwgLTEgfQkvKiB0dHlTMCwgLi4uLCB0dHlTNiAqLwotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IGVrX21hcF9pbyh2b2lkKQogewogCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDE4NDMyMDAwKTsKIAotCS8qIFNldHVwIHRoZSBzZXJpYWwgcG9ydHMgYW5kIGNvbnNvbGUgKi8KLQlhdDkxX2luaXRfc2VyaWFsKCZla191YXJ0X2NvbmZpZyk7CisJLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMwLCAxLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTCisJCQkgICB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfCBBVE1FTF9VQVJUX0RDRAorCQkJICAgfCBBVE1FTF9VQVJUX1JJKTsKKworCS8qIFVTQVJUMSBvbiB0dHlTMi4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMSwgMiwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9pcnEodm9pZCkKQEAgLTg1LDYgKzg2LDM1IEBACiAKIAogLyoKKyAqIEF1ZGlvCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyBhdDczYzIxM19kYXRhID0geworCS5zc2NfaWQJCT0gMCwKKwkuc2hvcnRuYW1lCT0gIkFUOTFTQU05MjYwLUVLIGV4dGVybmFsIERBQyIsCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTNfTU9EVUxFKQorc3RhdGljIHZvaWQgX19pbml0IGF0NzNjMjEzX3NldF9jbGsoc3RydWN0IGF0NzNjMjEzX2JvYXJkX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNsayAqcGNrMDsKKwlzdHJ1Y3QgY2xrICpwbGxhOworCisJcGNrMCA9IGNsa19nZXQoTlVMTCwgInBjazAiKTsKKwlwbGxhID0gY2xrX2dldChOVUxMLCAicGxsYSIpOworCisJLyogQVQ3M0MyMTMgTUNLIENsb2NrICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJLyogUENLMCAqLworCisJY2xrX3NldF9wYXJlbnQocGNrMCwgcGxsYSk7CisJY2xrX3B1dChwbGxhKTsKKworCWluZm8tPmRhY19jbGsgPSBwY2swOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDczYzIxM19zZXRfY2xrKHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvICppbmZvKSB7fQorI2VuZGlmCisKKy8qCiAgKiBTUEkgZGV2aWNlcy4KICAqLwogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0gewpAQCAtMTEwLDYgKzE0MCw4IEBACiAJCS5jaGlwX3NlbGVjdAk9IDAsCiAJCS5tYXhfc3BlZWRfaHoJPSAxMCAqIDEwMDAgKiAxMDAwLAogCQkuYnVzX251bQk9IDEsCisJCS5tb2RlCQk9IFNQSV9NT0RFXzEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmF0NzNjMjEzX2RhdGEsCiAJfSwKICNlbmRpZgogfTsKQEAgLTE3Miw2ICsyMDQsMjQgQEAKIC8vCS52Y2NfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKIH07CiAKKworLyoKKyAqIExFRHMKKyAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7CisJewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCisJCS5uYW1lCQkJPSAiZHM1IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BBNiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLworCQkubmFtZQkJCT0gImRzMSIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTksCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwl9Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfYm9hcmRfaW5pdCh2b2lkKQogewogCS8qIFNlcmlhbCAqLwpAQCAtMTkwLDYgKzI0MCwxMSBAQAogCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVrX21tY19kYXRhKTsKIAkvKiBJMkMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOworCS8qIFNTQyAodG8gQVQ3M0MyMTMpICovCisJYXQ3M2MyMTNfc2V0X2NsaygmYXQ3M2MyMTNfZGF0YSk7CisJYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7CisJLyogTEVEcyAqLworCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwogfQogCiBNQUNISU5FX1NUQVJUKEFUOTFTQU05MjYwRUssICJBdG1lbCBBVDkxU0FNOTI2MC1FSyIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKaW5kZXggMGNlMzhkZi4uMDgzODJjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hdDczYzIxMy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CkBAIC00NCwyMiArNDYsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjZ4X21jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlfc21jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIAotLyoKLSAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCi0gKiAgICAwIC4uIDIgPSBVU0FSVDAgLi4gVVNBUlQyCi0gKiAgICAzICAgICAgPSBEQkdVCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhIGVrX3VhcnRfY29uZmlnID0gewotCS5jb25zb2xlX3R0eQk9IDAsCQkJCS8qIHR0eVMwICovCi0JLm5yX3R0eQkJPSAxLAotCS50dHlfbWFwCT0geyAzLCAtMSwgLTEsIC0xIH0JCS8qIHR0eVMwLCAuLi4sIHR0eVMzICovCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCiB7CiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwpAQCAtNjgsOCArNTksMTEgQEAKIAkvKiBTZXR1cCB0aGUgTEVEcyAqLwogCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BBMTMsIEFUOTFfUElOX1BBMTQpOwogCi0JLyogU2V0dXAgdGhlIHNlcmlhbCBwb3J0cyBhbmQgY29uc29sZSAqLwotCWF0OTFfaW5pdF9zZXJpYWwoJmVrX3VhcnRfY29uZmlnKTsKKwkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKKworCS8qIHNldCBzZXJpYWwgY29uc29sZSB0byB0dHlTMCAoaWUsIERCR1UpICovCisJYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUoMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2lycSh2b2lkKQpAQCAtMjM5LDYgKzIzMywzNSBAQAogI2VuZGlmCiAKIC8qCisgKiBBdWRpbworICovCitzdGF0aWMgc3RydWN0IGF0NzNjMjEzX2JvYXJkX2luZm8gYXQ3M2MyMTNfZGF0YSA9IHsKKwkuc3NjX2lkCQk9IDEsCisJLnNob3J0bmFtZQk9ICJBVDkxU0FNOTI2MS1FSyBleHRlcm5hbCBEQUMiLAorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxMykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUNzNDMjEzX01PRFVMRSkKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDczYzIxM19zZXRfY2xrKHN0cnVjdCBhdDczYzIxM19ib2FyZF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjbGsgKnBjazI7CisJc3RydWN0IGNsayAqcGxsYTsKKworCXBjazIgPSBjbGtfZ2V0KE5VTEwsICJwY2syIik7CisJcGxsYSA9IGNsa19nZXQoTlVMTCwgInBsbGEiKTsKKworCS8qIEFUNzNDMjEzIE1DSyBDbG9jayAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMzEsIDApOwkvKiBQQ0syICovCisKKwljbGtfc2V0X3BhcmVudChwY2syLCBwbGxhKTsKKwljbGtfcHV0KHBsbGEpOworCisJaW5mby0+ZGFjX2NsayA9IHBjazI7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGF0NzNjMjEzX3NldF9jbGsoc3RydWN0IGF0NzNjMjEzX2JvYXJkX2luZm8gKmluZm8pIHt9CisjZW5kaWYKKworLyoKICAqIFNQSSBkZXZpY2VzCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZWtfc3BpX2RldmljZXNbXSA9IHsKQEAgLTI1Niw2ICsyNzksNyBAQAogCQkuYnVzX251bQk9IDAsCiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkc19pbmZvLAogCQkuaXJxCQk9IEFUOTFTQU05MjYxX0lEX0lSUTAsCisJCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBBVDkxX1BJTl9QQTI4LAkvKiBDUyBwaW4gKi8KIAl9LAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCkBAIC0yNzEsNiArMjk1LDkgQEAKIAkJLmNoaXBfc2VsZWN0CT0gMywKIAkJLm1heF9zcGVlZF9oegk9IDEwICogMTAwMCAqIDEwMDAsCiAJCS5idXNfbnVtCT0gMCwKKwkJLm1vZGUJCT0gU1BJX01PREVfMSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYXQ3M2MyMTNfZGF0YSwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkKikgQVQ5MV9QSU5fUEEyOSwJLyogZGVmYXVsdCBmb3IgQ1MzIGlzIFBBNiwgYnV0IGl0IG11c3QgYmUgUEEyOSAqLwogCX0sCiAjZW5kaWYKIH07CkBAIC00NjAsNiArNDg3LDI5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9CiAjZW5kaWYKIAorLyoKKyAqIExFRHMKKyAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7CisJewkvKiAiYm90dG9tIiBsZWQsIGdyZWVuLCB1c2VybGVkMSB0byBiZSBkZWZpbmVkICovCisJCS5uYW1lCQkJPSAiZHM3IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMTQsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJfSwKKwl7CS8qICJ0b3AiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyIHRvIGJlIGRlZmluZWQgKi8KKwkJLm5hbWUJCQk9ICJkczgiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEExMywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorCXsJLyogInBvd2VyIiBsZWQsIHllbGxvdyAqLworCQkubmFtZQkJCT0gImRzMSIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQTIzLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJfQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKIHsKIAkvKiBTZXJpYWwgKi8KQEAgLTQ4MSw2ICs1MzEsOSBAQAogCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKIAkvKiBUb3VjaHNjcmVlbiAqLwogCWVrX2FkZF9kZXZpY2VfdHMoKTsKKwkvKiBTU0MgKHRvIEFUNzNDMjEzKSAqLworCWF0NzNjMjEzX3NldF9jbGsoJmF0NzNjMjEzX2RhdGEpOworCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjFfSURfU1NDMSwgQVRNRUxfU1NDX1RYKTsKICNlbHNlCiAJLyogTU1DICovCiAJYXQ5MV9hZGRfZGV2aWNlX21tYygwLCAmZWtfbW1jX2RhdGEpOwpAQCAtNDg5LDYgKzU0Miw4IEBACiAJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7CiAJLyogUHVzaCBCdXR0b25zICovCiAJZWtfYWRkX2RldmljZV9idXR0b25zKCk7CisJLyogTEVEcyAqLworCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOwogfQogCiBNQUNISU5FX1NUQVJUKEFUOTFTQU05MjYxRUssICJBdG1lbCBBVDkxU0FNOTI2MS1FSyIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKaW5kZXggMzgzMTNhYi4uYjRjZDVkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwpAQCAtNDMsMjkgKzQzLDI0IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2eF9tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05X3NtYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKLS8qCi0gKiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uLgotICogICAgMCAuLiAyID0gVVNBUlQwIC4uIFVTQVJUMgotICogICAgMyAgICAgID0gREJHVQotICovCi1zdGF0aWMgc3RydWN0IGF0OTFfdWFydF9jb25maWcgX19pbml0ZGF0YSBla191YXJ0X2NvbmZpZyA9IHsKLQkuY29uc29sZV90dHkJPSAwLAkJCQkvKiB0dHlTMCAqLwotCS5ucl90dHkJCT0gMiwKLQkudHR5X21hcAk9IHsgMywgMCwgLTEsIC0xLCB9CQkvKiB0dHlTMCwgLi4uLCB0dHlTMyAqLwotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IGVrX21hcF9pbyh2b2lkKQogewogCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxNi4zNjcgTUh6IGNyeXN0YWwgKi8KIAlhdDkxc2FtOTI2M19pbml0aWFsaXplKDE2MzY3NjYwKTsKIAotCS8qIFNldHVwIHRoZSBzZXJpYWwgcG9ydHMgYW5kIGNvbnNvbGUgKi8KLQlhdDkxX2luaXRfc2VyaWFsKCZla191YXJ0X2NvbmZpZyk7CisJLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIFJUUywgQ1RTKSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxU0FNOTI2M19JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOworCisJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KKwlhdDkxX3NldF9zZXJpYWxfY29uc29sZSgwKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfaXJxKHZvaWQpCkBAIC0yNDUsMTAgKzI0MCw3IEBACiAKIHN0YXRpYyB2b2lkIGF0OTFfbGNkY19wb3dlcl9jb250cm9sKGludCBvbikKIHsKLQlpZiAob24pCi0JCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEQxMiwgMCk7CS8qIHBvd2VyIHVwICovCi0JZWxzZQotCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BEMTIsIDEpOwkvKiBwb3dlciBkb3duICovCisJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQTMwLCBvbik7CiB9CiAKIC8qIERyaXZlciBkYXRhcyAqLwpAQCAtMzQ0LDcgKzMzNiw3IEBACiAJCS5uYW1lCQkJPSAiZHMzIiwKIAkJLmdwaW8JCQk9IEFUOTFfUElOX1BCNywKIAkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAotCX0sCisJfQogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jCmluZGV4IGJjMDU0NmQuLmZmYzA1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jCkBAIC0yOSwyOSArMjksMjQgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjZ4X21jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTlfc21jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIAotLyoKLSAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCi0gKiAgICAwIC4uIDMgPSBVU0FSVDAgLi4gVVNBUlQzCi0gKiAgICA0ICAgICAgPSBEQkdVCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhIGVrX3VhcnRfY29uZmlnID0gewotCS5jb25zb2xlX3R0eQk9IDAsCQkJCS8qIHR0eVMwICovCi0JLm5yX3R0eQkJPSAyLAotCS50dHlfbWFwCT0geyA0LCAwLCAtMSwgLTEsIC0xIH0JCS8qIHR0eVMwLCAuLi4sIHR0eVM0ICovCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCiB7CiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLwogCWF0OTFzYW05cmxfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7CiAKLQkvKiBTZXR1cCB0aGUgc2VyaWFsIHBvcnRzIGFuZCBjb25zb2xlICovCi0JYXQ5MV9pbml0X3NlcmlhbCgmZWtfdWFydF9jb25maWcpOworCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUykgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTlSTF9JRF9VUzAsIDEsIEFUTUVMX1VBUlRfQ1RTIHwgQVRNRUxfVUFSVF9SVFMpOworCisJLyogc2V0IHNlcmlhbCBjb25zb2xlIHRvIHR0eVMwIChpZSwgREJHVSkgKi8KKwlhdDkxX3NldF9zZXJpYWxfY29uc29sZSgwKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGVrX2luaXRfaXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQteWwtOTIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNTcxNzEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXlsLTkyMDAuYwpAQCAtMCwwICsxLDY4MyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC15bC05MjAwLmMKKyAqCisgKiBBZGFwdGVkIGZyb206CisgKnZhcmlvdXMgYm9hcmQgZmlsZXMgaW4KKyAqIC9hcmNoL2FybS9tYWNoLWF0OTEKKyAqIG1vZGlmaWNhdGlvbnMgIHRvIGNvbnZlcnQgdG8gIFlMLTkyMDAgcGxhdGZvcm0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUy5CaXJ0bGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKy8qI2luY2x1ZGUgPGxpbnV4L2Nhbl9idXMvY2FuZGF0YS5oPiovCisjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisvKiNpbmNsdWRlIDxzb3VuZC9ncGlvX3NvdW5kZXIuaD4qLworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXJtOTIwMF9tYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9waW8uaD4KKworI2RlZmluZSBZTF85MjAwX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKKyNkZWZpbmUgWUxfOTIwMF9GTEFTSF9TSVpFCTB4ODAwMDAwCisKKy8qCisgKiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uLgorICogICAgMCAuLiAzID0gVVNBUlQwIC4uIFVTQVJUMworICogICAgNCAgICAgID0gREJHVQorICphdG1lbF91c2FydC4wOiB0dHlTMCBhdCBNTUlPIDB4ZmVmZmYyMDAgKGlycSA9IDEpIGlzIGEgQVRNRUxfU0VSSUFMCisgKmF0bWVsX3VzYXJ0LjE6IHR0eVMxIGF0IE1NSU8gMHhmZmZjMDAwMCAoaXJxID0gNikgaXMgYSBBVE1FTF9TRVJJQUwKKyAqYXRtZWxfdXNhcnQuMjogdHR5UzIgYXQgTU1JTyAweGZmZmM0MDAwIChpcnEgPSA3KSBpcyBhIEFUTUVMX1NFUklBTAorICphdG1lbF91c2FydC4zOiB0dHlTMyBhdCBNTUlPIDB4ZmZmYzgwMDAgKGlycSA9IDgpIGlzIGEgQVRNRUxfU0VSSUFMCisgKmF0bWVsX3VzYXJ0LjQ6IHR0eVM0IGF0IE1NSU8gMHhmZmZjYzAwMCAoaXJxID0gOSkgaXMgYSBBVE1FTF9TRVJJQUwKKyAqIG9uIHRoZSBZTC05MjAwIHdlIGFyZSBzaXR0aW5nIGF0IHRoZSBmb2xsb3dpbmcKKyAqdHR5UzAgYXQgTU1JTyAweGZlZmZmMjAwIChpcnEgPSAxKSBpcyBhIEFUOTFfU0VSSUFMCisgKnR0eVMxIGF0IE1NSU8gMHhmZWZjNDAwMCAoaXJxID0gNykgaXMgYSBBVDkxX1NFUklBTAorICovCisKKy8qIGV4dGVybiB2b2lkIF9faW5pdCB5bF85MjAwX2FkZF9kZXZpY2Vfc291bmRlcihzdHJ1Y3QgZ3Bpb19zb3VuZGVyICpzb3VuZGVycywgaW50IG5yKTsqLworCitzdGF0aWMgc3RydWN0IGF0OTFfdWFydF9jb25maWcgX19pbml0ZGF0YSB5bF85MjAwX3VhcnRfY29uZmlnID0geworCS5jb25zb2xlX3R0eQk9IDAsCQkJCS8qIHR0eVMwICovCisJLm5yX3R0eQkJPSAzLAorCS50dHlfbWFwCT0geyA0LCAxLCAwLCAtMSwgLTEgfQkJLyogdHR5UzAsIC4uLiwgdHR5UzQgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB5bF85MjAwX21hcF9pbyh2b2lkKQoreworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KKwkvKkFsc28gaW5pdGlhbGlzZXMgcmVnaXN0ZXIgY2xvY2tzICYgZ3BpbyovCisJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDE4NDMyMDAwLCBBVDkxUk05MjAwX1BRRlApOyAvKndlIGhhdmUgYSAzIGJhbmsgc3lzdGVtKi8KKworCS8qIFNldHVwIHRoZSBzZXJpYWwgcG9ydHMgYW5kIGNvbnNvbGUgKi8KKwlhdDkxX2luaXRfc2VyaWFsKCZ5bF85MjAwX3VhcnRfY29uZmlnKTsKKworCS8qIFNldHVwIHRoZSBMRURzIEQyPVBCMTcsRDM9UEIxNiAqLworCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BCMTYsQVQ5MV9QSU5fUEIxNyk7IC8qY3B1LWxlZCx0aW1lci1sZWQqLworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgeWxfOTIwMF9pbml0X2lycSh2b2lkKQoreworCWF0OTFybTkyMDBfaW5pdF9pbnRlcnJ1cHRzKE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSB5bF85MjAwX2V0aF9kYXRhID0geworCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BCMjgsCisJLmlzX3JtaWkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIHlsXzkyMDBfdXNiaF9kYXRhID0geworCS5wb3J0cwkJPSAxLCAgLyogdGhpcyBzaG91bGQgYmUgMSBub3QgMiBmb3IgdGhlIFlsOTIwMCovCit9OworCitzdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSB5bF85MjAwX3VkY19kYXRhID0geworLypvbiBzaGVldCA3IFNjaGVtaXRpYyByZXYgMS4wKi8KKwkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BDNCwKKwkudmJ1c19waW49ICBBVDkxX1BJTl9QQzUsCisJLnB1bGx1cF9hY3RpdmVfbG93ID0gMSwgLypBQ1RJVkUgTE9XISEgZHVlIHRvIFBOUCB0cmFuc2lzdG9yIG9uIHBhZ2UgNyovCisKK307CisvKgorc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgX19pbml0ZGF0YSB5bF85MjAwX2NmX2RhdGEgPSB7CitUT0RPIFMuQklSVExFUworCS5kZXRfcGluCT0gQVQ5MV9QSU5feHh4LAorCS5yc3RfcGluCT0gQVQ5MV9QSU5feHh4LAorCS5pcnFfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKKwkudmNjX3Bpbgk9IC4uLiBhbHdheXMgcG93ZXJlZAorCit9OworKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIHlsXzkyMDBfbW1jX2RhdGEgPSB7CisJLmRldF9waW4JPSBBVDkxX1BJTl9QQjksIC8qVEhJUyBMT09LUyBDT1JSRUNUIFNIRUVUNyovCisvKgkud3BfcGluCQk9IC4uLiBub3QgY29ubmVjdGVkICBTSEVFVDcqLworCS5zbG90X2IJCT0gMCwKKwkud2lyZTQJCT0gMSwKKworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUb3VjaCBzY3JlZW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nl9NT0RVTEUpCitzdGF0aWMgaW50IGFkczc4NDNfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhYXQ5MV9nZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQjExKTsJLyogVG91Y2hzY3JlZW4gUEVOSVJRICovCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2luaXRfZGV2aWNlX3RzKHZvaWQpCit7CisvKklNUE9SVEFOVCBOT1RFIFRIRSBTUEkgSU5URVJGQUNFIElTIEFMUkVBRFkgQ09ORklHVVJFRCBCWSBYWFhfREVWSUNFUy5DCitUSEFUIElTIFRPIFNBWSBUSEFUICBNSVNPLE1PU0ksU1BDSyBBTkQgQ1MgIGFyZSBhbHJlYWR5IGNvbmZpZ3VyZWQKK3dlIG9ubHkgbmVlZCB0byBlbmFibGUgdGhlIG90aGVyIGRhdGFwaW5zIHdoaWNoIGFyZToKK1BCMTAvUksxIEJVU1kKKyovCisvKiBUb3VjaHNjcmVlbiBCVVNZIHNpZ25hbCAsICBwaW4sdXNlIHB1bGx1cCAoIFRPRE8gbm90IGN1cnJlbnRseSB1c2VkIGluIHRoZSBBRFM3ODQzLzYuYyBkcml2ZXIpKi8KK2F0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIxMCwgMSk7Cit9CisKKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9pbml0X2RldmljZV90cyh2b2lkKSB7fQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIGFkc19pbmZvID0geworCS5tb2RlbAkJCT0gNzg0MywKKwkueF9taW4JCQk9IDE1MCwKKwkueF9tYXgJCQk9IDM4MzAsCisJLnlfbWluCQkJPSAxOTAsCisJLnlfbWF4CQkJPSAzODMwLAorCS52cmVmX2RlbGF5X3VzZWNzCT0gMTAwLAorLyogZm9yIGEgOCIgdG91Y2ggc2NyZWVuKi8KKwkvLy54X3BsYXRlX29obXMJCT0gNjAzLCAvLz0gNDUwLCBTLkJpcnRsZXMgVE9ETworCS8vLnlfcGxhdGVfb2htcwkJPSAzMzIsIC8vPSAyNTAsIFMuQmlydGxlcyBUT0RPCisvKmZvciBhIDEwLjQiIHRvdWNoIHNjcmVlbiovCisJLy8ueF9wbGF0ZV9vaG1zCQk9NjExLAorCS8vLnlfcGxhdGVfb2htcwkJPTMyNSwKKworCS54X3BsYXRlX29obXMJPSA1NzYsCisJLnlfcGxhdGVfb2htcwk9IDM2NiwKKwkJLy8KKwkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLCAvKmdlbmVyYWxseSBub25zZW5zZSBvbiB0aGUgNzg0MyovCisJIC8qbnVtYmVyIG9mIHRpbWVzIHRvIHNlbmQgcXVlcnkgdG8gY2hpcCBpbiBhIGdpdmVuIHJ1biAwIGVxdWFscyBvbmUgdGltZSAoZG8gbm90IHNldCB0byAwISEgLHRoZXJlIGlzIGEgYnVnIGluIEFEUyA3ODQ2IGNvZGUpKi8KKwkuZGVib3VuY2VfbWF4CQk9IDEsCisJLmRlYm91bmNlX3JlcAkJPSAwLAorCS5kZWJvdW5jZV90b2wJCT0gKH4wKSwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQzX3BlbmRvd25fc3RhdGUsCit9OworCisvKnN0YXRpYyBzdHJ1Y3QgY2FuYnVzX3BsYXRmb3JtX2RhdGEgY2FuX2luZm8gPSB7CisJLm1vZGVsCQkJPSAyNTEwLAorfTsKKyovCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8geWxfOTIwMF9zcGlfZGV2aWNlc1tdID0geworLyp0aGlzIHN0aWNrcyBpdCBhdDoKKyAvc3lzL2RldmljZXMvcGxhdGZvcm0vYXRtZWxfc3BpLjAvc3BpMC4wCisgL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy8KK0RvY3VtZW50YXRpb24vc3BpIElJUkMqLworCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nl9NT0RVTEUpCisgLyoodGhpcyBJUyBjb3JyZWN0IDA0LU5PVi0yMDA3KSovCisJeworCQkubW9kYWxpYXMJCT0gImFkczc4NDYiLCAvKiBiZWNhdXNlIHRoZSBkcml2ZXIgaXMgY2FsbGVkIGFkczc4NDYqLworCQkuY2hpcF9zZWxlY3QJPSAwLCAvKlRISVMgTVVTVCBCRSBBTiBJTkRFWCBJTlRPIEFOIEFSUkFZIE9GICBwaW5zICovCisvKnRoaXMgaXMgT05MWSBUTyBCRSBVU0VEIGlmIGNoaXBzZWxlY3QgYWJvdmUgaXMgbm90IHVzZWQsIGl0IHBhc3NlcyBhIHBpbiBkaXJlY3RseSBmb3IgdGhlIGNoaXAgc2VsZWN0Ki8KKwkJLyouY29udHJvbGxlcl9kYXRhID1BVDkxX1BJTl9QQTMgLCovCisJCS5tYXhfc3BlZWRfaHoJPSA1MDAwKjI2LCAvKig0NzAwICogMjYpLTEyNTAwMCAqIDI2LCAobWF4IHNhbXBsZSByYXRlIEAgM1YpICogKGNtZCArIGRhdGEgKyBvdmVyaGVhZCkgKi8KKwkJLmJ1c19udW0JCT0gMCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYWRzX2luZm8sCisJCS5pcnEJCQk9IEFUOTFfUElOX1BCMTEsCisJfSwKKyNlbmRpZgorLyp3ZSBuZWVkIHRvIHB1dCBvdXIgQ0FOIGRyaXZlciBkYXRhIGhlcmUhISovCisvKlRISVMgSVMgQUxMIERVTU1ZIERBVEEqLworLyoJeworCQkubW9kYWxpYXMJCT0gIm1jcDI1MTAiLCAvL0RVTU1ZIGZvciBNQ1AyNTEwIGNoaXAKKwkJLmNoaXBfc2VsZWN0CT0gMSwqLyAvKlRISVMgTVVTVCBCRSBBTiBJTkRFWCBJTlRPIEFOIEFSUkFZIE9GICBwaW5zICovCisJLyp0aGlzIGlzIE9OTFkgVE8gQkUgVVNFRCBpZiBjaGlwc2VsZWN0IGFib3ZlIGlzIG5vdCB1c2VkLCBpdCBwYXNzZXMgYSBwaW4gZGlyZWN0bHkgZm9yIHRoZSBjaGlwIHNlbGVjdCAqLworCS8qICAuY29udHJvbGxlcl9kYXRhID1BVDkxX1BJTl9QQTQgLAorCQkubWF4X3NwZWVkX2h6CT0gMjUwMDAgKiAyNiwKKwkJLmJ1c19udW0JCT0gMCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY2FuX2luZm8sCisJCS5pcnEJCQk9IEFUOTFfUElOX1BDMCwKKwl9LAorCSovCisJLy9tYXggU1BJIGNoaXAgbmVlZHMgdG8gZ28gaGVyZQorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgeWxfOTIwMF9uYW5kX3BhcnRpdGlvbltdID0geworCXsKKwkJLm5hbWUJPSAiQVQ5MSBOQU5EIHBhcnRpdGlvbiAxLCBib290IiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gMSAqIFNaXzI1NksKKwl9LAorCXsKKwkJLm5hbWUJPSAiQVQ5MSBOQU5EIHBhcnRpdGlvbiAyLCBrZXJuZWwiLAorCQkub2Zmc2V0CT0gMSAqIFNaXzI1NkssCisJCS5zaXplCT0gMiAqIFNaXzFNIC0gMSAqIFNaXzI1NksKKwl9LAorCXsKKwkJLm5hbWUJPSAiQVQ5MSBOQU5EIHBhcnRpdGlvbiAzLCBmaWxlc3lzdGVtIiwKKwkJLm9mZnNldAk9IDIgKiBTWl8xTSwKKwkJLnNpemUJPSAxNCAqIFNaXzFNCisJfSwKKwl7CisJCS5uYW1lCT0gIkFUOTEgTkFORCBwYXJ0aXRpb24gNCwgc3RvcmFnZSIsCisJCS5vZmZzZXQJPSAxNiAqIFNaXzFNLAorCQkuc2l6ZQk9IDE2ICogU1pfMU0KKwl9LAorCXsKKwkJLm5hbWUJPSAiQVQ5MSBOQU5EIHBhcnRpdGlvbiA1LCBleHQtZnMiLAorCQkub2Zmc2V0CT0gMzIgKiBTWl8xTSwKKwkJLnNpemUJPSAzMiAqIFNaXzFNCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRSh5bF85MjAwX25hbmRfcGFydGl0aW9uKTsKKwlyZXR1cm4geWxfOTIwMF9uYW5kX3BhcnRpdGlvbjsKK30KKworc3RhdGljIHN0cnVjdCBhdDkxX25hbmRfZGF0YSBfX2luaXRkYXRhIHlsXzkyMDBfbmFuZF9kYXRhID0geworCS5hbGU9IDYsCisJLmNsZT0gNywKKwkvKi5kZXRfcGluCT0gQVQ5MV9QSU5fUEN4eCwqLyAgIC8qd2UgZG9uJ3QgaGF2ZSBhIGRldCBwaW4gYmVjYXVzZSBOYW5kRmxhc2ggaXMgZml4ZWQgdG8gYm9hcmQqLworCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxNCwgIC8qUi8hQiBTaGVldDEwKi8KKwkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTUsICAvKiFDRSAgU2hlZXQxMCAqLworCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKK307CisKKworCisvKgorVE9ETyBTLkJpcnRsZXMKK3BvdGVudGlhbGx5IGEgcHJvYmxlbSB3aXRoIHRoZSBzaXplIGFib3ZlCitwaHlzbWFwIHBsYXRmb3JtIGZsYXNoIGRldmljZTogMDA4MDAwMDAgYXQgMTAwMDAwMDAKK3BoeXNtYXAtZmxhc2guMDogRm91bmQgMSB4MTYgZGV2aWNlcyBhdCAweDAgaW4gMTYtYml0IGJhbmsKK05PUiBjaGlwIHRvbyBsYXJnZSB0byBmaXQgaW4gbWFwcGluZy4gQXR0ZW1wdGluZyB0byBjb3BlLi4uCisgSW50ZWwvU2hhcnAgRXh0ZW5kZWQgUXVlcnkgVGFibGUgYXQgMHgwMDMxCitVc2luZyBidWZmZXIgd3JpdGUgbWV0aG9kCitjZmlfY21kc2V0XzAwMDE6IEVyYXNlIHN1c3BlbmQgb24gd3JpdGUgZW5hYmxlZAorUmVkdWNpbmcgdmlzaWJpbGl0eSBvZiAxNjM4NEtpQiBjaGlwIHRvIDgxOTJLaUIKKyovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB5bF85MjAwX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0JCSJCb290bG9hZGVyIiwKKwkJLnNpemUgPQkJMHgwMDA0MDAwMCwKKwkJLm9mZnNldCA9CTAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSx7CisJCS5uYW1lID0JCSJLZXJuZWwiLAorCQkuc2l6ZSA9CQkweDAwMUMwMDAwLAorCQkub2Zmc2V0ID0JMHgwMDA0MDAwMCwKKwl9LHsKKwkJLm5hbWUgPQkJIkZpbGVzeXN0ZW0iLAorCQkuc2l6ZSA9CQlNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0ID0JMHgwMDIwMDAwMAorCX0KKworfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgeWxfOTIwMF9mbGFzaF9kYXRhID0geworCS53aWR0aAk9IDIsCisJLnBhcnRzICAgICAgICAgID0geWxfOTIwMF9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyAgICAgICA9IEFSUkFZX1NJWkUoeWxfOTIwMF9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeWxfOTIwMF9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKK3sKKwkuc3RhcnQJCT0gWUxfOTIwMF9GTEFTSF9CQVNFLAorCS5lbmQJCT0gWUxfOTIwMF9GTEFTSF9CQVNFICsgWUxfOTIwMF9GTEFTSF9TSVpFIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgeWxfOTIwMF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmeWxfOTIwMF9mbGFzaF9kYXRhLAorCQkJfSwKKwkucmVzb3VyY2UJPSB5bF85MjAwX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHlsXzkyMDBfZmxhc2hfcmVzb3VyY2VzKSwKK307CisKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCB5bF85MjAwX2xlZHNbXSA9IHsKKy8qRDIgJkQzIGFyZSBwYXNzZWQgZGlyZWN0bHkgaW4gdmlhIGF0OTFfaW5pdF9sZWRzKi8KKwl7CisJCS5uYW1lCQkJPSAibGVkNCIsICAvKkQ0Ki8KKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTUsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwkJLyouZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwqLworCX0sCisJeworCQkubmFtZQkJCT0gImxlZDUiLCAgLypENSovCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjgsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwl9Cit9OworCisvL3N0YXRpYyBzdHJ1Y3QgZ3Bpb19zb3VuZGVyIHlsXzkyMDBfc291bmRlcltdID0geyovCisvKlRoaXMgaXMgYSBzaW1wbGUgc3BlYWtlciBhdHRhY2hlZCB0byBhIGdwbyBsaW5lKi8KKworLy8JeworLy8JCS5uYW1lCQkJPSAiU3BlYWtlciIsICAvKkxTMSovCisvLwkJLmdwaW8JCQk9IEFUOTFfUElOX1BBMjIsCisvLwkJLmFjdGl2ZV9sb3cJCT0gMCwKKy8vCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS8qLmRlZmF1bHRfdHJpZ2dlcgk9ICJ0aW1lciIsKi8KKy8vCX0sCisvL307CisKKworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgeWxfOTIwMF9pMmNfZGV2aWNlc1tdID0geworCXsKKwkvKlRPRE8qLworCQlJMkNfQk9BUkRfSU5GTygiQ1M0MzM0IiwgMHgwMCksCisJfQorfTsKKworCisgLyoKKyAqIEdQSU8gQnV0dG9ucworICovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24geWxfOTIwMF9idXR0b25zW10gPSB7CisJeworCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQTI0LAorCQkuY29kZQk9IEJUTl8yLAorCQkuZGVzYwkJPSAiU1cyIiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkud2FrZXVwCQk9IDEsCisJfSwKKwl7CisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMSwKKwkJLmNvZGUJPSBCVE5fMywKKwkJLmRlc2MJCT0gIlNXMyIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLndha2V1cAkJPSAxLAorCX0sCisJeworCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjIsCisJCS5jb2RlCT0gQlROXzQsCisJCS5kZXNjCQk9ICJTVzQiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS53YWtldXAJCT0gMSwKKwl9LAorCXsKKwkJLmdwaW8JCT0gQVQ5MV9QSU5fUEI2LAorCQkuY29kZQk9IEJUTl81LAorCQkuZGVzYwkJPSAiU1c1IiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkud2FrZXVwCQk9IDEsCisJfSwKKworfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSB5bF85MjAwX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0geWxfOTIwMF9idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoeWxfOTIwMF9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHlsXzkyMDBfYnV0dG9uX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5kZXYJCT0geworCS5wbGF0Zm9ybV9kYXRhCT0gJnlsXzkyMDBfYnV0dG9uX2RhdGEsCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHlsXzkyMDBfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCit7CisJLy9TVzIKKwlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BBMjQsIDApOworCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BBMjQsIDEpOworCisJLy9TVzMKKwlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMSwgMCk7CisJYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEIxLCAxKTsKKwkvL1NXNAorCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIyLCAwKTsKKwlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjIsIDEpOworCisJLy9TVzUKKwlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCNiwgMCk7CisJYXQ5MV9zZXRfZGVnbGl0Y2goQVQ5MV9QSU5fUEI2LCAxKTsKKworCisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEI3LCAxKTsJLyogI1RVUk4gQlVUVE9OUyBPTiwgU0hFRVQgNSAgb2Ygc2NoZW1hdGljcyAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmeWxfOTIwMF9idXR0b25fZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgeWxfOTIwMF9hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUzFEMTM1WFgpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1MxRDEzWFhYX01PRFVMRSkKKyNpbmNsdWRlIDx2aWRlby9zMWQxM3h4eGZiLmg+CisKKy8qIEVQU09OIFMxRDEzODA2IEZCIChkaXNjb250aW51ZWQgY2hpcCkqLworLyogRVBTT04gUzFEMTM1MDYgRkIgKi8KKworI2RlZmluZSBBVDkxX0ZCX1JFR19CQVNFCTB4ODAwMDAwMDBMCisjZGVmaW5lIEFUOTFfRkJfUkVHX1NJWkUJMHgyMDAKKyNkZWZpbmUgQVQ5MV9GQl9WTUVNX0JBU0UJMHg4MDIwMDAwMEwKKyNkZWZpbmUgQVQ5MV9GQl9WTUVNX1NJWkUJMHgyMDAwMDBMCisKKy8qI2RlZmluZSBTMURfRElTUExBWV9XSURUSCAgICAgICAgICAgNjQwKi8KKy8qI2RlZmluZSBTMURfRElTUExBWV9IRUlHSFQgICAgICAgICAgNDgwKi8KKworCitzdGF0aWMgdm9pZCBfX2luaXQgeWxfOTIwMF9pbml0X3ZpZGVvKHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9DICsgUElPX0FTUixBVDkxX1BJTl9QQzYpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQyArIFBJT19CU1IsMCk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9DICsgUElPX0FTUixBVDkxX1BJTl9QQzYpOworCisJYXQ5MV9zeXNfd3JpdGUoIEFUOTFfU01DX0NTUigyKSwKKwlBVDkxX1NNQ19OV1NfKDB4NCkgfAorCUFUOTFfU01DX1dTRU4gfAorCUFUOTFfU01DX1RERl8oMHgxMDApIHwKKwlBVDkxX1NNQ19EQlcKKwkpOworCisKKworfQorCisKK3N0YXRpYyBzdHJ1Y3QgczFkMTN4eHhmYl9yZWd2YWwgeWxfOTIwMF9zMWRmYl9pbml0cmVnc1tdID0KK3sKKwl7UzFEUkVHX01JU0MsCQkJCTB4MDB9LCAgIC8qIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIqLworCXtTMURSRUdfQ09NX0RJU1BfTU9ERSwJCTB4MDF9LCAgIC8qIERpc3BsYXkgTW9kZSBSZWdpc3RlciwgTENEIG9ubHkqLworCXtTMURSRUdfR1BJT19DTkYwLAkJCTB4MDB9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0dQSU9fQ1RMMCwJCQkweDAwfSwgICAvKiBHZW5lcmFsIElPIFBpbnMgQ29udHJvbCBSZWdpc3RlciovCisJe1MxRFJFR19DTEtfQ05GLAkJCTB4MTF9LCAgIC8qIE1lbW9yeSBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9DTEtfQ05GLAkJMHgxMH0sICAgLyogTENEIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqLworCXtTMURSRUdfQ1JUX0NMS19DTkYsCQkweDEyfSwgICAvKiBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciovCisJe1MxRFJFR19NUExVR19DTEtfQ05GLAkJMHgwMX0sICAgLyogTWVkaWFQbHVnIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqLworCXtTMURSRUdfQ1BVMk1FTV9XU1RfU0VMLAkweDAyfSwgICAvKiBDUFUgVG8gTWVtb3J5IFdhaXQgU3RhdGUgU2VsZWN0IFJlZ2lzdGVyKi8KKwl7UzFEUkVHX01FTV9DTkYsCQkJMHgwMH0sICAgLyogTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqLworCXtTMURSRUdfU0RSQU1fUkVGX1JBVEUsCQkweDA0fSwgICAvKiBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlciwgTUNMSyBzb3VyY2UqLworCXtTMURSRUdfU0RSQU1fVEMwLAkJCTB4MTJ9LCAgIC8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDAqLworCXtTMURSRUdfU0RSQU1fVEMxLAkJCTB4MDJ9LCAgIC8qIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDEqLworCXtTMURSRUdfUEFORUxfVFlQRSwJCQkweDI1fSwgICAvKiBQYW5lbCBUeXBlIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX01PRF9SQVRFLAkJCTB4MDB9LCAgIC8qIE1PRCBSYXRlIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9ESVNQX0hXSURUSCwJMHg0Rn0sICAgLyogTENEIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfTkRJU1BfSFBFUiwJCTB4MTN9LCAgIC8qIExDRCBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciovCisJe1MxRFJFR19URlRfRlBMSU5FX1NUQVJULAkweDAxfSwgICAvKiBURlQgRlBMSU5FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX1RGVF9GUExJTkVfUFdJRFRILAkweDBjfSwgICAvKiBURlQgRlBMSU5FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9ESVNQX1ZIRUlHSFQwLAkweERGfSwgICAvKiBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMCovCisJe1MxRFJFR19MQ0RfRElTUF9WSEVJR0hUMSwJMHgwMX0sICAgLyogTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLworCXtTMURSRUdfTENEX05ESVNQX1ZQRVIsCQkweDJjfSwgICAvKiBMQ0QgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX1RGVF9GUEZSQU1FX1NUQVJULAkweDBhfSwgICAvKiBURlQgRlBGUkFNRSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCisJe1MxRFJFR19URlRfRlBGUkFNRV9QV0lEVEgsCTB4MDJ9LCAgIC8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9ESVNQX01PREUsCQkweDA1fSwgICAvKiBMQ0QgRGlzcGxheSBNb2RlIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9NSVNDLAkJCTB4MDF9LCAgIC8qIExDRCBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9ESVNQX1NUQVJUMCwJMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwKi8KKwl7UzFEUkVHX0xDRF9ESVNQX1NUQVJUMSwJMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxKi8KKwl7UzFEUkVHX0xDRF9ESVNQX1NUQVJUMiwJMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KKwl7UzFEUkVHX0xDRF9NRU1fT0ZGMCwJCTB4ODB9LCAgIC8qIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCovCisJe1MxRFJFR19MQ0RfTUVNX09GRjEsCQkweDAyfSwgICAvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEqLworCXtTMURSRUdfTENEX1BJWF9QQU4sCQkweDAzfSwgICAvKiBMQ0QgUGl4ZWwgUGFubmluZyBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfRElTUF9GSUZPX0hUQywJMHgwMH0sICAgLyogTENEIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9ESVNQX0ZJRk9fTFRDLAkweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciovCisJe1MxRFJFR19DUlRfRElTUF9IV0lEVEgsCTB4NEZ9LCAgIC8qIENSVC9UViBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIqLworCXtTMURSRUdfQ1JUX05ESVNQX0hQRVIsCQkweDEzfSwgICAvKiBDUlQvVFYgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIqLworCXtTMURSRUdfQ1JUX0hSVENfU1RBUlQsCQkweDAxfSwgICAvKiBDUlQvVFYgSFJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciovCisJe1MxRFJFR19DUlRfSFJUQ19QV0lEVEgsCTB4MEJ9LCAgIC8qIENSVC9UViBIUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9ESVNQX1ZIRUlHSFQwLAkweERGfSwgICAvKiBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMCovCisJe1MxRFJFR19DUlRfRElTUF9WSEVJR0hUMSwJMHgwMX0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEqLworCXtTMURSRUdfQ1JUX05ESVNQX1ZQRVIsCQkweDJCfSwgICAvKiBDUlQvVFYgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9WUlRDX1NUQVJULAkJMHgwOX0sICAgLyogQ1JUL1RWIFZSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIqLworCXtTMURSRUdfQ1JUX1ZSVENfUFdJRFRILAkweDAxfSwgICAvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciovCisJe1MxRFJFR19UVl9PVVRfQ1RMLAkJCTB4MTh9LCAgIC8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCisJe1MxRFJFR19DUlRfRElTUF9NT0RFLAkJMHgwNX0sICAgLyogQ1JUL1RWIERpc3BsYXkgTW9kZSBSZWdpc3RlciwgMTZCUFAqLworCXtTMURSRUdfQ1JUX0RJU1BfU1RBUlQwLAkweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLworCXtTMURSRUdfQ1JUX0RJU1BfU1RBUlQxLAkweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEqLworCXtTMURSRUdfQ1JUX0RJU1BfU1RBUlQyLAkweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIqLworCXtTMURSRUdfQ1JUX01FTV9PRkYwLAkJMHg4MH0sICAgLyogQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwKi8KKwl7UzFEUkVHX0NSVF9NRU1fT0ZGMSwJCTB4MDJ9LCAgIC8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSovCisJe1MxRFJFR19DUlRfUElYX1BBTiwJCTB4MDB9LCAgIC8qIENSVC9UViBQaXhlbCBQYW5uaW5nIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9ESVNQX0ZJRk9fSFRDLAkweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIqLworCXtTMURSRUdfQ1JUX0RJU1BfRklGT19MVEMsCTB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xDRF9DVVJfQ1RMLAkJMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfQ1VSX1NUQVJULAkJMHgwMX0sICAgLyogTENEIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfQ1VSX1hQT1MwLAkJMHgwMH0sICAgLyogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAqLworCXtTMURSRUdfTENEX0NVUl9YUE9TMSwJCTB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxKi8KKwl7UzFEUkVHX0xDRF9DVVJfWVBPUzAsCQkweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCovCisJe1MxRFJFR19MQ0RfQ1VSX1lQT1MxLAkJMHgwMH0sICAgLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLworCXtTMURSRUdfTENEX0NVUl9CQ1RMMCwJCTB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfQ1VSX0dDVEwwLAkJMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfQ1VSX1JDVEwwLAkJMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIqLworCXtTMURSRUdfTENEX0NVUl9CQ1RMMSwJCTB4MUZ9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfQ1VSX0dDVEwxLAkJMHgzRn0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciovCisJe1MxRFJFR19MQ0RfQ1VSX1JDVEwxLAkJMHgxRn0sICAgLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIqLworCXtTMURSRUdfTENEX0NVUl9GSUZPX0hUQywJMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIqLworCXtTMURSRUdfQ1JUX0NVUl9DVEwsCQkweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9DVVJfU1RBUlQsCQkweDAxfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9DVVJfWFBPUzAsCQkweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMCovCisJe1MxRFJFR19DUlRfQ1VSX1hQT1MxLAkJMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEqLworCXtTMURSRUdfQ1JUX0NVUl9ZUE9TMCwJCTB4MDB9LCAgIC8qIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwKi8KKwl7UzFEUkVHX0NSVF9DVVJfWVBPUzEsCQkweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMSovCisJe1MxRFJFR19DUlRfQ1VSX0JDVEwwLAkJMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9DVVJfR0NUTDAsCQkweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9DVVJfUkNUTDAsCQkweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlciovCisJe1MxRFJFR19DUlRfQ1VSX0JDVEwxLAkJMHgxRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9DVVJfR0NUTDEsCQkweDNGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NSVF9DVVJfUkNUTDEsCQkweDFGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlciovCisJe1MxRFJFR19DUlRfQ1VSX0ZJRk9fSFRDLAkweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciovCisJe1MxRFJFR19CQkxUX0NUTDAsCQkJMHgwMH0sICAgLyogQml0Qmx0IENvbnRyb2wgUmVnaXN0ZXIgMCovCisJe1MxRFJFR19CQkxUX0NUTDEsCQkJMHgwMX0sICAgLyogQml0Qmx0IENvbnRyb2wgUmVnaXN0ZXIgMSovCisJe1MxRFJFR19CQkxUX0NDX0VYUCwJCTB4MDB9LCAgIC8qIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIqLworCXtTMURSRUdfQkJMVF9PUCwJCQkweDAwfSwgICAvKiBCaXRCbHQgT3BlcmF0aW9uIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0JCTFRfU1JDX1NUQVJUMCwJMHgwMH0sICAgLyogQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAqLworCXtTMURSRUdfQkJMVF9TUkNfU1RBUlQxLAkweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSovCisJe1MxRFJFR19CQkxUX1NSQ19TVEFSVDIsCTB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KKwl7UzFEUkVHX0JCTFRfRFNUX1NUQVJUMCwJMHgwMH0sICAgLyogQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCovCisJe1MxRFJFR19CQkxUX0RTVF9TVEFSVDEsCTB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEqLworCXtTMURSRUdfQkJMVF9EU1RfU1RBUlQyLAkweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyKi8KKwl7UzFEUkVHX0JCTFRfTUVNX09GRjAsCQkweDAwfSwgICAvKiBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAqLworCXtTMURSRUdfQkJMVF9NRU1fT0ZGMSwJCTB4MDB9LCAgIC8qIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSovCisJe1MxRFJFR19CQkxUX1dJRFRIMCwJCTB4MDB9LCAgIC8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAwKi8KKwl7UzFEUkVHX0JCTFRfV0lEVEgxLAkJMHgwMH0sICAgLyogQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDEqLworCXtTMURSRUdfQkJMVF9IRUlHSFQwLAkJMHgwMH0sICAgLyogQml0Qmx0IEhlaWdodCBSZWdpc3RlciAwKi8KKwl7UzFEUkVHX0JCTFRfSEVJR0hUMSwJCTB4MDB9LCAgIC8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMSovCisJe1MxRFJFR19CQkxUX0JHQzAsCQkJMHgwMH0sICAgLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCisJe1MxRFJFR19CQkxUX0JHQzEsCQkJMHgwMH0sICAgLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCisJe1MxRFJFR19CQkxUX0ZHQzAsCQkJMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCovCisJe1MxRFJFR19CQkxUX0ZHQzEsCQkJMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSovCisJe1MxRFJFR19MS1VQX01PREUsCQkJMHgwMH0sICAgLyogTG9vay1VcCBUYWJsZSBNb2RlIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0xLVVBfQUREUiwJCQkweDAwfSwgICAvKiBMb29rLVVwIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIqLworCXtTMURSRUdfUFNfQ05GLAkJCQkweDAwfSwgICAvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqLworCXtTMURSRUdfUFNfU1RBVFVTLAkJCTB4MDB9LCAgIC8qIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyKi8KKwl7UzFEUkVHX0NQVTJNRU1fV0RPR1QsCQkweDAwfSwgICAvKiBDUFUtdG8tTWVtb3J5IEFjY2VzcyBXYXRjaGRvZyBUaW1lciBSZWdpc3RlciovCisJe1MxRFJFR19DT01fRElTUF9NT0RFLAkJMHgwMX0sICAgLyogRGlzcGxheSBNb2RlIFJlZ2lzdGVyLCBMQ0Qgb25seSovCit9OworCitzdGF0aWMgdTY0IHMxZGZiX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSB5bF85MjAwX3MxZGZiX3BkYXRhID0geworCQkuaW5pdHJlZ3MJCQkJPSB5bF85MjAwX3MxZGZiX2luaXRyZWdzLAorCQkuaW5pdHJlZ3NzaXplCQkJPSBBUlJBWV9TSVpFKHlsXzkyMDBfczFkZmJfaW5pdHJlZ3MpLAorCQkucGxhdGZvcm1faW5pdF92aWRlbwk9IHlsXzkyMDBfaW5pdF92aWRlbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeWxfOTIwMF9zMWRmYl9yZXNvdXJjZVtdID0geworCVswXSA9IHsJLyogdmlkZW8gbWVtICovCisJCS5uYW1lICAgPSAiczFkMTN4eHhmYiBtZW1vcnkiLAorCS8qCS5uYW1lICAgPSAiczFkMTM4MDYgbWVtb3J5IiwqLworCQkuc3RhcnQgID0gQVQ5MV9GQl9WTUVNX0JBU0UsCisJCS5lbmQgICAgPSBBVDkxX0ZCX1ZNRU1fQkFTRSArIEFUOTFfRkJfVk1FTV9TSVpFIC0xLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CS8qIHZpZGVvIHJlZ2lzdGVycyAqLworCQkubmFtZSAgID0gInMxZDEzeHh4ZmIgcmVnaXN0ZXJzIiwKKwkvKgkubmFtZSAgID0gInMxZDEzODA2IHJlZ2lzdGVycyIsKi8KKwkJLnN0YXJ0ICA9IEFUOTFfRkJfUkVHX0JBU0UsCisJCS5lbmQgICAgPSBBVDkxX0ZCX1JFR19CQVNFICsgQVQ5MV9GQl9SRUdfU0laRSAtMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB5bF85MjAwX3MxZGZiX2RldmljZSA9IHsKKwkvKlRPRE8gUy5CaXJ0bGVzICwgcmVhbGx5IHdlIG5lZWQgdGhlIGNoaXAgcmV2aXNpb24gaW4gaGVyZSBhcyB3ZWxsKi8KKwkJLm5hbWUJCT0gInMxZDEzODA2ZmIiLAorCS8qICAubmFtZQkJPSAiczFkMTM1MDZmYiIsKi8KKwkJLmlkCQkJPSAtMSwKKwkJLmRldgkJPSB7CisJLypUT0RPIHRoZXJlcyBhIHdhcmluZyBoZXJlISEqLworCS8qV0FSTklORzogdm1saW51eC5vKC5kYXRhKzB4MmRiYyk6IFNlY3Rpb24gbWlzbWF0Y2g6IHJlZmVyZW5jZSB0byAuaW5pdC50ZXh0OiAoYmV0d2VlbiAneWxfOTIwMF9zMWRmYl9wZGF0YScgYW5kICdzMWRmYl9kbWFtYXNrJykqLworCQkuZG1hX21hc2sJCT0gJnMxZGZiX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ5bF85MjAwX3MxZGZiX3BkYXRhLAorCX0sCisJLnJlc291cmNlCT0geWxfOTIwMF9zMWRmYl9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoeWxfOTIwMF9zMWRmYl9yZXNvdXJjZSksCit9OworCit2b2lkIF9faW5pdCB5bF85MjAwX2FkZF9kZXZpY2VfdmlkZW8odm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnlsXzkyMDBfczFkZmJfZGV2aWNlKTsKK30KKyNlbHNlCisJdm9pZCBfX2luaXQgeWxfOTIwMF9hZGRfZGV2aWNlX3ZpZGVvKHZvaWQpIHt9CisjZW5kaWYKKworLyp0aGlzIGlzIG5vdCBjYWxsZWQgZmlyc3QgLCB5bF85MjAwX21hcF9pbyBpcyBjYWxsZWQgZmlyc3QqLworc3RhdGljIHZvaWQgX19pbml0IHlsXzkyMDBfYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIFNlcmlhbCAqLworCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKKwkvKiBFdGhlcm5ldCAqLworCWF0OTFfYWRkX2RldmljZV9ldGgoJnlsXzkyMDBfZXRoX2RhdGEpOworCS8qIFVTQiBIb3N0ICovCisJYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJnlsXzkyMDBfdXNiaF9kYXRhKTsKKwkvKiBVU0IgRGV2aWNlICovCisJYXQ5MV9hZGRfZGV2aWNlX3VkYygmeWxfOTIwMF91ZGNfZGF0YSk7CisJLyogcHVsbHVwX3BpbiBpdCBpcyAgYWN0dWFsbHkgYWN0aXZlIGxvdywgYnV0IHRoaXMgaXMgbm90IG5lZWRlZCwgZHJpdmVyIHNldHMgaXQgdXAgKi8KKwkvKmF0OTFfc2V0X211bHRpX2RyaXZlKHlsXzkyMDBfdWRjX2RhdGEucHVsbHVwX3BpbiwgMCk7Ki8KKworCS8qIENvbXBhY3QgRmxhc2ggKi8KKwkvKmF0OTFfYWRkX2RldmljZV9jZigmeWxfOTIwMF9jZl9kYXRhKTsqLworCisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYyh5bF85MjAwX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKHlsXzkyMDBfaTJjX2RldmljZXMpKTsKKwkvKiBTUEkgKi8KKwkvKlRPRE8gWUw5MjAwIHdlIGhhdmUgMiBzcGkgaW50ZXJmYWNlcyB0b3VjaCBzY3JlZW4gJiBDQU4qLworCS8qIEFUOTFfUElOX1BBNSwgQVQ5MV9QSU5fUEE2ICwgYXJlIHVzZWQgb24gdGhlICBtYXggNDg1IE5PVCBTUEkqLworCisJLyp0b3VjaCBzY3JlZW4gYW5kIENBTiovCisJYXQ5MV9hZGRfZGV2aWNlX3NwaSh5bF85MjAwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHlsXzkyMDBfc3BpX2RldmljZXMpKTsKKworCS8qQmFzaWNhbGx5IHRoZSAgVFMgdXNlcyAgUEIxMSAmIFBCMTAgLCBQQjExIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIFNQSSBzeXN0ZW0gQlAxMCBJUyBOT1QgVVNFRCEhKi8KKwkvKiB3ZSBuZWVkIHRoaXMgaW5jYXNlIHRoZSBib2FyZCBpcyBydW5uaW5nIHdpdGhvdXQgYSB0b3VjaCBzY3JlZW4qLworCSNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKKwlhdDkxX2luaXRfZGV2aWNlX3RzKCk7IC8qaW5pdCB0aGUgdG91Y2ggc2NyZWVuIGRldmljZSovCisJI2VuZGlmCisJLyogRGF0YUZsYXNoIGNhcmQgKi8KKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZ5bF85MjAwX21tY19kYXRhKTsKKwkvKiBOQU5EICovCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJnlsXzkyMDBfbmFuZF9kYXRhKTsKKwkvKiBOT1IgRmxhc2ggKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnlsXzkyMDBfZmxhc2gpOworCS8qIExFRHMuIE5vdGUhISB0aGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIGxlZCdzIHdlIHBhc3NlZCBmb3IgdGhlIHByb2Nlc3NvciBzdGF0dXMgKi8KKwlhdDkxX2dwaW9fbGVkcyh5bF85MjAwX2xlZHMsIEFSUkFZX1NJWkUoeWxfOTIwMF9sZWRzKSk7CisJLyogVkdBICAqLworCS8qdGhpcyBpcyBzZWxmIHJlZ2lzdGVyZWQgYnkgaW5jbHVkaW5nIHRoZSBzMWQxM3h4eCBjaGlwIGluIHRoZSBrZXJuZWwgYnVpbGQqLworCXlsXzkyMDBfYWRkX2RldmljZV92aWRlbygpOworCS8qIFB1c2ggQnV0dG9ucyAqLworCXlsXzkyMDBfYWRkX2RldmljZV9idXR0b25zKCk7CisJLypUT0RPIGZpeHVwIHRoZSBTb3VuZGVyICovCisvLwl5bF85MjAwX2FkZF9kZXZpY2Vfc291bmRlcih5bF85MjAwX3NvdW5kZXIsQVJSQVlfU0laRSh5bF85MjAwX3NvdW5kZXIpKTsKKworfQorCitNQUNISU5FX1NUQVJUKFlMOTIwMCwgInVDZHJhZ29uIFlMLTkyMDAiKQorCS8qIE1haW50YWluZXI6IFMuQmlydGxlcyovCisJLnBoeXNfaW8JCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQkJPSAmYXQ5MXJtOTIwMF90aW1lciwKKwkubWFwX2lvCQkJPSB5bF85MjAwX21hcF9pbywKKwkuaW5pdF9pcnEJCT0geWxfOTIwMF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0geWxfOTIwMF9ib2FyZF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMKaW5kZXggZGU2NDI0ZS4uYTMzZGZlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCmluZGV4IGY2MjljMmIuLmVlNDk2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpAQCAtNDkwLDYgKzQ5MCwxMSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogVGhpcyBsb2NrIGNsYXNzIHRlbGxzIGxvY2tkZXAgdGhhdCBHUElPIGlycXMgYXJlIGluIGEgZGlmZmVyZW50CisgKiBjYXRlZ29yeSB0aGFuIHRoZWlyIHBhcmVudHMsIHNvIGl0IHdvbid0IHJlcG9ydCBmYWxzZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZ3Bpb19sb2NrX2NsYXNzOworCiAvKgogICogQ2FsbGVkIGZyb20gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBpbml0IHRvIGVuYWJsZSBHUElPIGludGVycnVwdCBzdXBwb3J0LgogICovCkBAIC01MTAsNiArNTE1LDggQEAKIAkJX19yYXdfd3JpdGVsKH4wLCB0aGlzLT5yZWdiYXNlICsgUElPX0lEUik7CiAKIAkJZm9yIChpID0gMCwgcGluID0gdGhpcy0+Y2hpcGJhc2U7IGkgPCAzMjsgaSsrLCBwaW4rKykgeworCQkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW3Bpbl0ubG9jaywgJmdwaW9fbG9ja19jbGFzcyk7CisKIAkJCS8qCiAJCQkgKiBDYW4gdXNlIHRoZSAic2ltcGxlIiBhbmQgbm90ICJlZGdlIiBoYW5kbGVyIHNpbmNlIGl0J3MKIAkJCSAqIHNob3J0ZXIsIGFuZCB0aGUgQUlDIGhhbmRsZXMgaW50ZXJydXB0cyBzYW5lbHkuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCmluZGV4IGE2N2RlZmQuLjM5NzMzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCkBAIC0yNiwxMiArMjYsMTM1IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcG1jLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXJtOTIwMF9tYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTFSTTkyMDAKKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxcm05MjAwX21jLmg+CisKKy8qCisgKiBUaGUgQVQ5MVJNOTIwMCBnb2VzIGludG8gc2VsZi1yZWZyZXNoIG1vZGUgd2l0aCB0aGlzIGNvbW1hbmQsIGFuZCB3aWxsCisgKiB0ZXJtaW5hdGUgc2VsZi1yZWZyZXNoIGF1dG9tYXRpY2FsbHkgb24gdGhlIG5leHQgU0RSQU0gYWNjZXNzLgorICovCisjZGVmaW5lIHNkcmFtX3NlbGZyZWZyZXNoX2VuYWJsZSgpCWF0OTFfc3lzX3dyaXRlKEFUOTFfU0RSQU1DX1NSUiwgMSkKKyNkZWZpbmUgc2RyYW1fc2VsZnJlZnJlc2hfZGlzYWJsZSgpCWRvIHt9IHdoaWxlICgwKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFDQVA5KQorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFjYXA5X2RkcnNkci5oPgorCitzdGF0aWMgdTMyIHNhdmVkX2xwcjsKKworc3RhdGljIGlubGluZSB2b2lkIHNkcmFtX3NlbGZyZWZyZXNoX2VuYWJsZSh2b2lkKQoreworCXUzMiBscHI7CisKKwlzYXZlZF9scHIgPSBhdDkxX3N5c19yZWFkKEFUOTFfRERSU0RSQ19MUFIpOworCisJbHByID0gc2F2ZWRfbHByICYgfkFUOTFfRERSU0RSQ19MUENCOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfRERSU0RSQ19MUFIsIGxwciB8IEFUOTFfRERSU0RSQ19MUENCX1NFTEZfUkVGUkVTSCk7Cit9CisKKyNkZWZpbmUgc2RyYW1fc2VsZnJlZnJlc2hfZGlzYWJsZSgpCWF0OTFfc3lzX3dyaXRlKEFUOTFfRERSU0RSQ19MUFIsIHNhdmVkX2xwcikKKworI2Vsc2UKKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOV9zZHJhbWMuaD4KKworc3RhdGljIHUzMiBzYXZlZF9scHI7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZHJhbV9zZWxmcmVmcmVzaF9lbmFibGUodm9pZCkKK3sKKwl1MzIgbHByOworCisJc2F2ZWRfbHByID0gYXQ5MV9zeXNfcmVhZChBVDkxX1NEUkFNQ19MUFIpOworCisJbHByID0gc2F2ZWRfbHByICYgfkFUOTFfU0RSQU1DX0xQQ0I7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TRFJBTUNfTFBSLCBscHIgfCBBVDkxX1NEUkFNQ19MUENCX1NFTEZfUkVGUkVTSCk7Cit9CisKKyNkZWZpbmUgc2RyYW1fc2VsZnJlZnJlc2hfZGlzYWJsZSgpCWF0OTFfc3lzX3dyaXRlKEFUOTFfU0RSQU1DX0xQUiwgc2F2ZWRfbHByKQorCisvKgorICogRklYTUU6IFRoZSBBVDkxU0FNOTI2MyBoYXMgYSBzZWNvbmQgRUJJIGNvbnRyb2xsZXIgd2hpY2ggbWF5IGhhdmUKKyAqICAgICAgICBhZGRpdGlvbmFsIFNEUkFNLiAgcG1fc2xvd2Nsb2NrLlMgd2lsbCByZXF1aXJlIGEgc2ltaWxhciBmaXguCisgKi8KKworI2VuZGlmCisKKworLyoKKyAqIFNob3cgdGhlIHJlYXNvbiBmb3IgdGhlIHByZXZpb3VzIHN5c3RlbSByZXNldC4KKyAqLworI2lmIGRlZmluZWQoQVQ5MV9TSERXQykKKworI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcnN0Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfc2hkd2MuaD4KKworc3RhdGljIHZvaWQgX19pbml0IHNob3dfcmVzZXRfc3RhdHVzKHZvaWQpCit7CisJc3RhdGljIGNoYXIgcmVzZXRbXSBfX2luaXRkYXRhID0gInJlc2V0IjsKKworCXN0YXRpYyBjaGFyIGdlbmVyYWxbXSBfX2luaXRkYXRhID0gImdlbmVyYWwiOworCXN0YXRpYyBjaGFyIHdha2V1cFtdIF9faW5pdGRhdGEgPSAid2FrZXVwIjsKKwlzdGF0aWMgY2hhciB3YXRjaGRvZ1tdIF9faW5pdGRhdGEgPSAid2F0Y2hkb2ciOworCXN0YXRpYyBjaGFyIHNvZnR3YXJlW10gX19pbml0ZGF0YSA9ICJzb2Z0d2FyZSI7CisJc3RhdGljIGNoYXIgdXNlcltdIF9faW5pdGRhdGEgPSAidXNlciI7CisJc3RhdGljIGNoYXIgdW5rbm93bltdIF9faW5pdGRhdGEgPSAidW5rbm93biI7CisKKwlzdGF0aWMgY2hhciBzaWduYWxbXSBfX2luaXRkYXRhID0gInNpZ25hbCI7CisJc3RhdGljIGNoYXIgcnRjW10gX19pbml0ZGF0YSA9ICJydGMiOworCXN0YXRpYyBjaGFyIHJ0dFtdIF9faW5pdGRhdGEgPSAicnR0IjsKKwlzdGF0aWMgY2hhciByZXN0b3JlW10gX19pbml0ZGF0YSA9ICJwb3dlci1yZXN0b3JlZCI7CisKKwljaGFyICpyZWFzb24sICpyMiA9IHJlc2V0OworCXUzMiByZXNldF90eXBlLCB3YWtlX3R5cGU7CisKKwlyZXNldF90eXBlID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JTVENfU1IpICYgQVQ5MV9SU1RDX1JTVFRZUDsKKwl3YWtlX3R5cGUgPSBhdDkxX3N5c19yZWFkKEFUOTFfU0hEV19TUik7CisKKwlzd2l0Y2ggKHJlc2V0X3R5cGUpIHsKKwljYXNlIEFUOTFfUlNUQ19SU1RUWVBfR0VORVJBTDoKKwkJcmVhc29uID0gZ2VuZXJhbDsKKwkJYnJlYWs7CisJY2FzZSBBVDkxX1JTVENfUlNUVFlQX1dBS0VVUDoKKwkJLyogYm9hcmQtc3BlY2lmaWMgY29kZSBlbmFibGVkIHRoZSB3YWtldXAgc291cmNlcyAqLworCQlyZWFzb24gPSB3YWtldXA7CisKKwkJLyogIndha2V1cCBzaWduYWwiICovCisJCWlmICh3YWtlX3R5cGUgJiBBVDkxX1NIRFdfV0FLRVVQMCkKKwkJCXIyID0gc2lnbmFsOworCQllbHNlIHsKKwkJCXIyID0gcmVhc29uOworCQkJaWYgKHdha2VfdHlwZSAmIEFUOTFfU0hEV19SVFRXSykJLyogcnR0IHdha2V1cCAqLworCQkJCXJlYXNvbiA9IHJ0dDsKKwkJCWVsc2UgaWYgKHdha2VfdHlwZSAmIEFUOTFfU0hEV19SVENXSykJLyogcnRjIHdha2V1cCAqLworCQkJCXJlYXNvbiA9IHJ0YzsKKwkJCWVsc2UgaWYgKHdha2VfdHlwZSA9PSAwKQkvKiBwb3dlci1yZXN0b3JlZCB3YWtldXAgKi8KKwkJCQlyZWFzb24gPSByZXN0b3JlOworCQkJZWxzZQkJCQkvKiB1bmtub3duIHdha2V1cCAqLworCQkJCXJlYXNvbiA9IHVua25vd247CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBVDkxX1JTVENfUlNUVFlQX1dBVENIRE9HOgorCQlyZWFzb24gPSB3YXRjaGRvZzsKKwkJYnJlYWs7CisJY2FzZSBBVDkxX1JTVENfUlNUVFlQX1NPRlRXQVJFOgorCQlyZWFzb24gPSBzb2Z0d2FyZTsKKwkJYnJlYWs7CisJY2FzZSBBVDkxX1JTVENfUlNUVFlQX1VTRVI6CisJCXJlYXNvbiA9IHVzZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlYXNvbiA9IHVua25vd247CisJCWJyZWFrOworCX0KKwlwcl9pbmZvKCJBVDkxOiBTdGFydGluZyBhZnRlciAlcyAlc1xuIiwgcmVhc29uLCByMik7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IHNob3dfcmVzZXRfc3RhdHVzKHZvaWQpIHt9CisjZW5kaWYKKwogCiBzdGF0aWMgaW50IGF0OTFfcG1fdmFsaWRfc3RhdGUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewpAQCAtMTI1LDYgKzI0OCwxMSBAQAogCiBzdGF0aWMgdm9pZCAoKnNsb3dfY2xvY2spKHZvaWQpOwogCisjaWZkZWYgQ09ORklHX0FUOTFfU0xPV19DTE9DSworZXh0ZXJuIHZvaWQgYXQ5MV9zbG93X2Nsb2NrKHZvaWQpOworZXh0ZXJuIHUzMiBhdDkxX3Nsb3dfY2xvY2tfc3o7CisjZW5kaWYKKwogCiBzdGF0aWMgaW50IGF0OTFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewpAQCAtMTU4LDExICsyODYsMTQgQEAKIAkJCSAqIHR1cm5pbmcgb2ZmIHRoZSBtYWluIG9zY2lsbGF0b3I7IHJldmVyc2Ugb24gd2FrZXVwLgogCQkJICovCiAJCQlpZiAoc2xvd19jbG9jaykgeworI2lmZGVmIENPTkZJR19BVDkxX1NMT1dfQ0xPQ0sKKwkJCQkvKiBjb3B5IHNsb3dfY2xvY2sgaGFuZGxlciB0byBTUkFNLCBhbmQgY2FsbCBpdCAqLworCQkJCW1lbWNweShzbG93X2Nsb2NrLCBhdDkxX3Nsb3dfY2xvY2ssIGF0OTFfc2xvd19jbG9ja19zeik7CisjZW5kaWYKIAkJCQlzbG93X2Nsb2NrKCk7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewotCQkJCS8qIERFVkVMT1BNRU5UIE9OTFkgKi8KLQkJCQlwcl9pbmZvKCJBVDkxOiBQTSAtIG5vIHNsb3cgY2xvY2sgbW9kZSB5ZXQgLi4uXG4iKTsKKwkJCQlwcl9pbmZvKCJBVDkxOiBQTSAtIG5vIHNsb3cgY2xvY2sgbW9kZSBlbmFibGVkIC4uLlxuIik7CiAJCQkJLyogRkFMTFRIUk9VR0ggbGVhdmluZyBtYXN0ZXIgY2xvY2sgYWxvbmUgKi8KIAkJCX0KIApAQCAtMTc1LDEzICszMDYsMTUgQEAKIAkJY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6CiAJCQkvKgogCQkJICogTk9URTogdGhlIFdhaXQtZm9yLUludGVycnVwdCBpbnN0cnVjdGlvbiBuZWVkcyB0byBiZQotCQkJICogaW4gaWNhY2hlIHNvIHRoZSBTRFJBTSBzdGF5cyBpbiBzZWxmLXJlZnJlc2ggbW9kZSB1bnRpbAotCQkJICogdGhlIHdha2V1cCBJUlEgb2NjdXJzLgorCQkJICogaW4gaWNhY2hlIHNvIG5vIFNEUkFNIGFjY2Vzc2VzIGFyZSBuZWVkZWQgdW50aWwgdGhlCisJCQkgKiB3YWtldXAgSVJRIG9jY3VycyBhbmQgc2VsZi1yZWZyZXNoIGlzIHRlcm1pbmF0ZWQuCiAJCQkgKi8KIAkJCWFzbSgiYiAxZjsgLmFsaWduIDU7IDE6Iik7CiAJCQlhc20oIm1jciBwMTUsIDAsIHIwLCBjNywgYzEwLCA0Iik7CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLwotCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TRFJBTUNfU1JSLCAxKTsJLyogc2VsZi1yZWZyZXNoIG1vZGUgKi8KLQkJCS8qIGZhbGwgdGhvdWdoIHRvIG5leHQgc3RhdGUgKi8KKwkJCXNkcmFtX3NlbGZyZWZyZXNoX2VuYWJsZSgpOworCQkJYXNtKCJtY3IgcDE1LCAwLCByMCwgYzcsIGMwLCA0Iik7CS8qIHdhaXQgZm9yIGludGVycnVwdCAqLworCQkJc2RyYW1fc2VsZnJlZnJlc2hfZGlzYWJsZSgpOworCQkJYnJlYWs7CiAKIAkJY2FzZSBQTV9TVVNQRU5EX09OOgogCQkJYXNtKCJtY3IgcDE1LCAwLCByMCwgYzcsIGMwLCA0Iik7CS8qIHdhaXQgZm9yIGludGVycnVwdCAqLwpAQCAtMTk2LDYgKzMyOSw3IEBACiAJCQlhdDkxX3N5c19yZWFkKEFUOTFfQUlDX0lQUikgJiBhdDkxX3N5c19yZWFkKEFUOTFfQUlDX0lNUikpOwogCiBlcnJvcjoKKwlzZHJhbV9zZWxmcmVmcmVzaF9kaXNhYmxlKCk7CiAJdGFyZ2V0X3N0YXRlID0gUE1fU1VTUEVORF9PTjsKIAlhdDkxX2lycV9yZXN1bWUoKTsKIAlhdDkxX2dwaW9fcmVzdW1lKCk7CkBAIC0yMjAsMjEgKzM1NCwyMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdDkxX3BtX2luaXQodm9pZCkKIHsKLQlwcmludGsoIkFUOTE6IFBvd2VyIE1hbmFnZW1lbnRcbiIpOwotCi0jaWZkZWYgQ09ORklHX0FUOTFfUE1fU0xPV19DTE9DSwotCS8qIFJFVklTSVQgYWxsb2NhdGlvbnMgb2YgU1JBTSBzaG91bGQgYmUgZHluYW1pY2FsbHkgbWFuYWdlZC4KLQkgKiBGSVEgaGFuZGxlcnMgYW5kIG90aGVyIGNvbXBvbmVudHMgd2lsbCB3YW50IFNSQU0vVENNIHRvby4uLgotCSAqLwotCXNsb3dfY2xvY2sgPSAodm9pZCAqKSAoQVQ5MV9WQV9CQVNFX1NSQU0gKyAoMyAqIFNaXzRLKSk7Ci0JbWVtY3B5KHNsb3dfY2xvY2ssIGF0OTFybTkyMDBfc2xvd19jbG9jaywgYXQ5MXJtOTIwMF9zbG93X2Nsb2NrX3N6KTsKKyNpZmRlZiBDT05GSUdfQVQ5MV9TTE9XX0NMT0NLCisJc2xvd19jbG9jayA9ICh2b2lkICopIChBVDkxX0lPX1ZJUlRfQkFTRSAtIGF0OTFfc2xvd19jbG9ja19zeik7CiAjZW5kaWYKIAotCS8qIERpc2FibGUgU0RSQU0gbG93LXBvd2VyIG1vZGUuICBDYW5ub3QgYmUgdXNlZCB3aXRoIHNlbGYtcmVmcmVzaC4gKi8KKwlwcl9pbmZvKCJBVDkxOiBQb3dlciBNYW5hZ2VtZW50JXNcbiIsIChzbG93X2Nsb2NrID8gIiAod2l0aCBzbG93IGNsb2NrIG1vZGUpIiA6ICIiKSk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxUk05MjAwCisJLyogQVQ5MVJNOTIwMCBTRFJBTSBsb3ctcG93ZXIgbW9kZSBjYW5ub3QgYmUgdXNlZCB3aXRoIHNlbGYtcmVmcmVzaC4gKi8KIAlhdDkxX3N5c193cml0ZShBVDkxX1NEUkFNQ19MUFIsIDApOworI2VuZGlmCiAKIAlzdXNwZW5kX3NldF9vcHMoJmF0OTFfcG1fb3BzKTsKIAorCXNob3dfcmVzZXRfc3RhdHVzKCk7CiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKGF0OTFfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWcKaW5kZXggMGUyYjY0MS4uZGJhYWU1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvS2NvbmZpZwpAQCAtMzEsNiArMzEsOCBAQAogCWJvb2wgIkVEQjcyMTEiCiAJc2VsZWN0IElTQQogCXNlbGVjdCBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBDaXJydXMgTG9naWMgRURCLTcyMTEKIAkgIGV2YWx1YXRpb24gYm9hcmQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCmluZGV4IDBlY2Y5OTcuLmMxMjUyY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KICMKLW9iai15CQkJOj0gY29yZS5vIGNsb2NrLm8KK29iai15CQkJOj0gY29yZS5vIGNsb2NrLm8gZ3Bpby5vCiBvYmotbQkJCTo9CiBvYmotbgkJCTo9CiBvYmotCQkJOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCA5MWY2YTA3Li44YmMxODcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0xNTksNyArMTU5LDcgQEAKIHN0YXRpYyBjb25zdCB1OCBlb2lfcmVnaXN0ZXJfb2Zmc2V0WzNdCQk9IHsgMHg5OCwgMHhiNCwgMHg1NCB9Owogc3RhdGljIGNvbnN0IHU4IGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OWMsIDB4YjgsIDB4NWMgfTsKIAotc3RhdGljIHZvaWQgdXBkYXRlX2dwaW9faW50X3BhcmFtcyh1bnNpZ25lZCBwb3J0KQordm9pZCBlcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyh1bnNpZ25lZCBwb3J0KQogewogCUJVR19PTihwb3J0ID4gMik7CiAKQEAgLTE3NSw5OSArMTc1LDExIEBACiAJCUVQOTNYWF9HUElPX1JFRyhpbnRfZW5fcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7CiB9CiAKLS8qIFBvcnQgb3JkZXJpbmcgaXM6IEEgQiBGIEQgRSBDIEcgSCAqLwotc3RhdGljIGNvbnN0IHU4IGRhdGFfcmVnaXN0ZXJfb2Zmc2V0WzhdID0gewotCTB4MDAsIDB4MDQsIDB4MzAsIDB4MGMsIDB4MjAsIDB4MDgsIDB4MzgsIDB4NDAsCi19OwotCi1zdGF0aWMgY29uc3QgdTggZGF0YV9kaXJlY3Rpb25fcmVnaXN0ZXJfb2Zmc2V0WzhdID0gewotCTB4MTAsIDB4MTQsIDB4MzQsIDB4MWMsIDB4MjQsIDB4MTgsIDB4M2MsIDB4NDQsCi19OwotCi0jZGVmaW5lIEdQSU9fSU4JCTAKLSNkZWZpbmUgR1BJT19PVVQJMQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19zZXRfZGlyZWN0aW9uKHVuc2lnbmVkIGxpbmUsIGludCBkaXJlY3Rpb24pCit2b2lkIGVwOTN4eF9ncGlvX2ludF9tYXNrKHVuc2lnbmVkIGxpbmUpCiB7Ci0JdW5zaWduZWQgaW50IGRhdGFfZGlyZWN0aW9uX3JlZ2lzdGVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciB2OwotCi0JZGF0YV9kaXJlY3Rpb25fcmVnaXN0ZXIgPQotCQlFUDkzWFhfR1BJT19SRUcoZGF0YV9kaXJlY3Rpb25fcmVnaXN0ZXJfb2Zmc2V0W2xpbmUgPj4gM10pOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChkaXJlY3Rpb24gPT0gR1BJT19PVVQpIHsKLQkJaWYgKGxpbmUgPj0gMCAmJiBsaW5lIDw9IEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSkgewotCQkJLyogUG9ydCBBL0IvRiAqLwotCQkJZ3Bpb19pbnRfdW5tYXNrZWRbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7Ci0JCQl1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKGxpbmUgPj4gMyk7Ci0JCX0KLQotCQl2ID0gX19yYXdfcmVhZGIoZGF0YV9kaXJlY3Rpb25fcmVnaXN0ZXIpOwotCQl2IHw9IDEgPDwgKGxpbmUgJiA3KTsKLQkJX19yYXdfd3JpdGViKHYsIGRhdGFfZGlyZWN0aW9uX3JlZ2lzdGVyKTsKLQl9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBHUElPX0lOKSB7Ci0JCXYgPSBfX3Jhd19yZWFkYihkYXRhX2RpcmVjdGlvbl9yZWdpc3Rlcik7Ci0JCXYgJj0gfigxIDw8IChsaW5lICYgNykpOwotCQlfX3Jhd193cml0ZWIodiwgZGF0YV9kaXJlY3Rpb25fcmVnaXN0ZXIpOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZ3Bpb19pbnRfdW5tYXNrZWRbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CiB9CiAKLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCWlmIChncGlvID4gRVA5M1hYX0dQSU9fTElORV9NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXA5M3h4X2dwaW9fc2V0X2RpcmVjdGlvbihncGlvLCBHUElPX0lOKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9pbnB1dCk7Ci0KLWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWlmIChncGlvID4gRVA5M1hYX0dQSU9fTElORV9NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotCWVwOTN4eF9ncGlvX3NldF9kaXJlY3Rpb24oZ3BpbywgR1BJT19PVVQpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX291dHB1dCk7Ci0KLWludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXVuc2lnbmVkIGludCBkYXRhX3JlZ2lzdGVyOwotCi0JZGF0YV9yZWdpc3RlciA9IEVQOTNYWF9HUElPX1JFRyhkYXRhX3JlZ2lzdGVyX29mZnNldFtncGlvID4+IDNdKTsKLQotCXJldHVybiAhIShfX3Jhd19yZWFkYihkYXRhX3JlZ2lzdGVyKSAmICgxIDw8IChncGlvICYgNykpKTsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19nZXRfdmFsdWUpOwotCi12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBpbnQgZGF0YV9yZWdpc3RlcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIgdjsKLQotCWRhdGFfcmVnaXN0ZXIgPSBFUDkzWFhfR1BJT19SRUcoZGF0YV9yZWdpc3Rlcl9vZmZzZXRbZ3BpbyA+PiAzXSk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdiA9IF9fcmF3X3JlYWRiKGRhdGFfcmVnaXN0ZXIpOwotCWlmICh2YWx1ZSkKLQkJdiB8PSAxIDw8IChncGlvICYgNyk7Ci0JZWxzZQotCQl2ICY9IH4oMSA8PCAoZ3BpbyAmIDcpKTsKLQlfX3Jhd193cml0ZWIodiwgZGF0YV9yZWdpc3Rlcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChncGlvX3NldF92YWx1ZSk7Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEVQOTN4eCBJUlEgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzE2LDcgKzIyOCw3IEBACiAKIAlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRVF9CT1RIRURHRSkgewogCQlncGlvX2ludF90eXBlMltwb3J0XSBePSBwb3J0X21hc2s7IC8qIHN3aXRjaCBlZGdlIGRpcmVjdGlvbiAqLwotCQl1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKHBvcnQpOworCQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKIAl9CiAKIAlfX3Jhd193cml0ZWIocG9ydF9tYXNrLCBFUDkzWFhfR1BJT19SRUcoZW9pX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwpAQCAtMzMyLDcgKzI0NCw3IEBACiAJCWdwaW9faW50X3R5cGUyW3BvcnRdIF49IHBvcnRfbWFzazsgLyogc3dpdGNoIGVkZ2UgZGlyZWN0aW9uICovCiAKIAlncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmPSB+cG9ydF9tYXNrOwotCXVwZGF0ZV9ncGlvX2ludF9wYXJhbXMocG9ydCk7CisJZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7CiAKIAlfX3Jhd193cml0ZWIocG9ydF9tYXNrLCBFUDkzWFhfR1BJT19SRUcoZW9pX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwogfQpAQCAtMzQzLDcgKzI1NSw3IEBACiAJaW50IHBvcnQgPSBsaW5lID4+IDM7CiAKIAlncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7Ci0JdXBkYXRlX2dwaW9faW50X3BhcmFtcyhwb3J0KTsKKwllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMzUyLDcgKzI2NCw3IEBACiAJaW50IHBvcnQgPSBsaW5lID4+IDM7CiAKIAlncGlvX2ludF91bm1hc2tlZFtwb3J0XSB8PSAxIDw8IChsaW5lICYgNyk7Ci0JdXBkYXRlX2dwaW9faW50X3BhcmFtcyhwb3J0KTsKKwllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKIH0KIAogCkBAIC0zNjgsNyArMjgwLDcgQEAKIAljb25zdCBpbnQgcG9ydCA9IGdwaW8gPj4gMzsKIAljb25zdCBpbnQgcG9ydF9tYXNrID0gMSA8PCAoZ3BpbyAmIDcpOwogCi0JZXA5M3h4X2dwaW9fc2V0X2RpcmVjdGlvbihncGlvLCBHUElPX0lOKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgZ3Bpb19nZXRfdmFsdWUoZ3BpbykpOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBJUlFUX1JJU0lORzoKQEAgLTQxMSw3ICszMjMsNyBAQAogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKIAlkZXNjLT5zdGF0dXMgfD0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7CiAKLQl1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKHBvcnQpOworCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDksNiArNDYxLDcgQEAKIAkucmVzb3VyY2UJPSBlcDkzeHhfb2hjaV9yZXNvdXJjZXMsCiB9OwogCitleHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbml0KHZvaWQpOwogCiB2b2lkIF9faW5pdCBlcDkzeHhfaW5pdF9kZXZpY2VzKHZvaWQpCiB7CkBAIC01NjIsNiArNDc1LDggQEAKIAlfX3Jhd193cml0ZWwoMHhhYSwgRVA5M1hYX1NZU0NPTl9TV0xPQ0spOwogCV9fcmF3X3dyaXRlbCh2LCBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcpOwogCisJZXA5M3h4X2dwaW9faW5pdCgpOworCiAJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoJnVhcnQxX2RldmljZSwgJmlvbWVtX3Jlc291cmNlKTsKIAlhbWJhX2RldmljZV9yZWdpc3RlcigmdWFydDJfZGV2aWNlLCAmaW9tZW1fcmVzb3VyY2UpOwogCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKCZ1YXJ0M19kZXZpY2UsICZpb21lbV9yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyZTRjMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYworICoKKyAqIEdlbmVyaWMgRVA5M3h4IEdQSU8gaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIG9yaWdpbmFsbHkgZnJvbToKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2VwOTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKworc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKworCXVuc2lnbmVkIGludAkJZGF0YV9yZWc7CisJdW5zaWduZWQgaW50CQlkYXRhX2Rpcl9yZWc7Cit9OworCisjZGVmaW5lIHRvX2VwOTN4eF9ncGlvX2NoaXAoYykgY29udGFpbmVyX29mKGMsIHN0cnVjdCBlcDkzeHhfZ3Bpb19jaGlwLCBjaGlwKQorCisvKiBGcm9tIGNvcmUuYyAqLworZXh0ZXJuIHZvaWQgZXA5M3h4X2dwaW9faW50X21hc2sodW5zaWduZWQgbGluZSk7CitleHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyh1bnNpZ25lZCBwb3J0KTsKKworc3RhdGljIGludCBlcDkzeHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBlcDkzeHhfZ3Bpb19jaGlwICplcDkzeHhfY2hpcCA9IHRvX2VwOTN4eF9ncGlvX2NoaXAoY2hpcCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCB2OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXYgPSBfX3Jhd19yZWFkYihlcDkzeHhfY2hpcC0+ZGF0YV9kaXJfcmVnKTsKKwl2ICY9IH4oMSA8PCBvZmZzZXQpOworCV9fcmF3X3dyaXRlYih2LCBlcDkzeHhfY2hpcC0+ZGF0YV9kaXJfcmVnKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcDkzeHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCAqZXA5M3h4X2NoaXAgPSB0b19lcDkzeHhfZ3Bpb19jaGlwKGNoaXApOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxpbmU7CisJdTggdjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIFNldCB0aGUgdmFsdWUgKi8KKwl2ID0gX19yYXdfcmVhZGIoZXA5M3h4X2NoaXAtPmRhdGFfcmVnKTsKKwlpZiAodmFsKQorCQl2IHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQl2ICY9IH4oMSA8PCBvZmZzZXQpOworCV9fcmF3X3dyaXRlYih2LCBlcDkzeHhfY2hpcC0+ZGF0YV9yZWcpOworCisJLyogRHJpdmUgYXMgYW4gb3V0cHV0ICovCisJbGluZSA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CisJaWYgKGxpbmUgPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKSB7CisJCS8qIFBvcnRzIEEvQi9GICovCisJCWVwOTN4eF9ncGlvX2ludF9tYXNrKGxpbmUpOworCQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhsaW5lID4+IDMpOworCX0KKworCXYgPSBfX3Jhd19yZWFkYihlcDkzeHhfY2hpcC0+ZGF0YV9kaXJfcmVnKTsKKwl2IHw9ICgxIDw8IG9mZnNldCk7CisJX19yYXdfd3JpdGViKHYsIGVwOTN4eF9jaGlwLT5kYXRhX2Rpcl9yZWcpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCAqZXA5M3h4X2NoaXAgPSB0b19lcDkzeHhfZ3Bpb19jaGlwKGNoaXApOworCisJcmV0dXJuICEhKF9fcmF3X3JlYWRiKGVwOTN4eF9jaGlwLT5kYXRhX3JlZykgJiAoMSA8PCBvZmZzZXQpKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCAqZXA5M3h4X2NoaXAgPSB0b19lcDkzeHhfZ3Bpb19jaGlwKGNoaXApOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggdjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2ID0gX19yYXdfcmVhZGIoZXA5M3h4X2NoaXAtPmRhdGFfcmVnKTsKKwlpZiAodmFsKQorCQl2IHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQl2ICY9IH4oMSA8PCBvZmZzZXQpOworCV9fcmF3X3dyaXRlYih2LCBlcDkzeHhfY2hpcC0+ZGF0YV9yZWcpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQoreworCXN0cnVjdCBlcDkzeHhfZ3Bpb19jaGlwICplcDkzeHhfY2hpcCA9IHRvX2VwOTN4eF9ncGlvX2NoaXAoY2hpcCk7CisJdTggZGF0YV9yZWcsIGRhdGFfZGlyX3JlZzsKKwlpbnQgaTsKKworCWRhdGFfcmVnID0gX19yYXdfcmVhZGIoZXA5M3h4X2NoaXAtPmRhdGFfcmVnKTsKKwlkYXRhX2Rpcl9yZWcgPSBfX3Jhd19yZWFkYihlcDkzeHhfY2hpcC0+ZGF0YV9kaXJfcmVnKTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uZ3BpbzsgaSsrKQorCQlzZXFfcHJpbnRmKHMsICJHUElPICVzJWQ6ICVzICVzXG4iLCBjaGlwLT5sYWJlbCwgaSwKKwkJCSAgIChkYXRhX3JlZyAmICgxIDw8IGkpKSA/ICJzZXQiIDogImNsZWFyIiwKKwkJCSAgIChkYXRhX2Rpcl9yZWcgJiAoMSA8PCBpKSkgPyAib3V0IiA6ICJpbiIpOworfQorCisjZGVmaW5lIEVQOTNYWF9HUElPX0JBTksobmFtZSwgZHIsIGRkciwgYmFzZV9ncGlvKQkJCVwKKwl7CQkJCQkJCQlcCisJCS5jaGlwID0gewkJCQkJCVwKKwkJCS5sYWJlbAkJICA9IG5hbWUsCQkJXAorCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBlcDkzeHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQsIFwKKwkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gZXA5M3h4X2dwaW9fZGlyZWN0aW9uX291dHB1dCwgXAorCQkJLmdldAkJICA9IGVwOTN4eF9ncGlvX2dldCwJCVwKKwkJCS5zZXQJCSAgPSBlcDkzeHhfZ3Bpb19zZXQsCQlcCisJCQkuZGJnX3Nob3cJICA9IGVwOTN4eF9ncGlvX2RiZ19zaG93LAlcCisJCQkuYmFzZQkJICA9IGJhc2VfZ3BpbywJCQlcCisJCQkubmdwaW8JCSAgPSA4LAkJCQlcCisJCX0sCQkJCQkJCVwKKwkJLmRhdGFfcmVnCT0gRVA5M1hYX0dQSU9fUkVHKGRyKSwJCQlcCisJCS5kYXRhX2Rpcl9yZWcJPSBFUDkzWFhfR1BJT19SRUcoZGRyKSwJCQlcCisJfQorCitzdGF0aWMgc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgZXA5M3h4X2dwaW9fYmFua3NbXSA9IHsKKwlFUDkzWFhfR1BJT19CQU5LKCJBIiwgMHgwMCwgMHgxMCwgMCksCisJRVA5M1hYX0dQSU9fQkFOSygiQiIsIDB4MDQsIDB4MTQsIDgpLAorCUVQOTNYWF9HUElPX0JBTksoIkMiLCAweDMwLCAweDM0LCA0MCksCisJRVA5M1hYX0dQSU9fQkFOSygiRCIsIDB4MGMsIDB4MWMsIDI0KSwKKwlFUDkzWFhfR1BJT19CQU5LKCJFIiwgMHgyMCwgMHgyNCwgMzIpLAorCUVQOTNYWF9HUElPX0JBTksoIkYiLCAweDA4LCAweDE4LCAxNiksCisJRVA5M1hYX0dQSU9fQkFOSygiRyIsIDB4MzgsIDB4M2MsIDQ4KSwKKwlFUDkzWFhfR1BJT19CQU5LKCJIIiwgMHg0MCwgMHg0NCwgNTYpLAorfTsKKwordm9pZCBfX2luaXQgZXA5M3h4X2dwaW9faW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspCisJCWdwaW9jaGlwX2FkZCgmZXA5M3h4X2dwaW9fYmFua3NbaV0uY2hpcCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jb21tb24uYwppbmRleCA3ZjMxODE2Li40NTE0NGFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvY29tbW9uLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogaDcyMHhfZ3Bpb19oYW5kbGVyKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgaXJxLAogICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JSVJRREJHKCIlcyBpcnE6ICVkXG4iLF9fRlVOQ1RJT05fXyxpcnEpOworCUlSUURCRygiJXMgaXJxOiAlZFxuIiwgX19mdW5jX18sIGlycSk7CiAJZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXdoaWxlIChtYXNrKSB7CiAJCWlmIChtYXNrICYgMSkgewpAQCAtMTIzLDcgKzEyMyw3IEBACiAKIAltYXNrID0gQ1BVX1JFRyhHUElPX0FfVklSVCxHUElPX1NUQVQpOwogCWlycSA9IElSUV9DSEFJTkVEX0dQSU9BKDApOwotCUlSUURCRygiJXMgbWFzazogMHglMDh4IGlycTogJWRcbiIsX19GVU5DVElPTl9fLG1hc2ssaXJxKTsKKwlJUlFEQkcoIiVzIG1hc2s6IDB4JTA4eCBpcnE6ICVkXG4iLCBfX2Z1bmNfXywgbWFzayxpcnEpOwogCWg3MjB4X2dwaW9faGFuZGxlcihtYXNrLCBpcnEsIGRlc2MpOwogfQogCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1bnNpZ25lZCBpbnQgbWFzaywgaXJxOwogCW1hc2sgPSBDUFVfUkVHKEdQSU9fQl9WSVJULEdQSU9fU1RBVCk7CiAJaXJxID0gSVJRX0NIQUlORURfR1BJT0IoMCk7Ci0JSVJRREJHKCIlcyBtYXNrOiAweCUwOHggaXJxOiAlZFxuIixfX0ZVTkNUSU9OX18sbWFzayxpcnEpOworCUlSUURCRygiJXMgbWFzazogMHglMDh4IGlycTogJWRcbiIsIF9fZnVuY19fLCBtYXNrLGlycSk7CiAJaDcyMHhfZ3Bpb19oYW5kbGVyKG1hc2ssIGlycSwgZGVzYyk7CiB9CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAJbWFzayA9IENQVV9SRUcoR1BJT19DX1ZJUlQsR1BJT19TVEFUKTsKIAlpcnEgPSBJUlFfQ0hBSU5FRF9HUElPQygwKTsKLQlJUlFEQkcoIiVzIG1hc2s6IDB4JTA4eCBpcnE6ICVkXG4iLF9fRlVOQ1RJT05fXyxtYXNrLGlycSk7CisJSVJRREJHKCIlcyBtYXNrOiAweCUwOHggaXJxOiAlZFxuIiwgX19mdW5jX18sIG1hc2ssaXJxKTsKIAloNzIweF9ncGlvX2hhbmRsZXIobWFzaywgaXJxLCBkZXNjKTsKIH0KIApAQCAtMTU1LDcgKzE1NSw3IEBACiAKIAltYXNrID0gQ1BVX1JFRyhHUElPX0RfVklSVCxHUElPX1NUQVQpOwogCWlycSA9IElSUV9DSEFJTkVEX0dQSU9EKDApOwotCUlSUURCRygiJXMgbWFzazogMHglMDh4IGlycTogJWRcbiIsX19GVU5DVElPTl9fLG1hc2ssaXJxKTsKKwlJUlFEQkcoIiVzIG1hc2s6IDB4JTA4eCBpcnE6ICVkXG4iLCBfX2Z1bmNfXywgbWFzayxpcnEpOwogCWg3MjB4X2dwaW9faGFuZGxlcihtYXNrLCBpcnEsIGRlc2MpOwogfQogCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogCW1hc2sgPSBDUFVfUkVHKEdQSU9fRV9WSVJULEdQSU9fU1RBVCk7CiAJaXJxID0gSVJRX0NIQUlORURfR1BJT0UoMCk7Ci0JSVJRREJHKCIlcyBtYXNrOiAweCUwOHggaXJxOiAlZFxuIixfX0ZVTkNUSU9OX18sbWFzayxpcnEpOworCUlSUURCRygiJXMgbWFzazogMHglMDh4IGlycTogJWRcbiIsIF9fZnVuY19fLCBtYXNrLGlycSk7CiAJaDcyMHhfZ3Bpb19oYW5kbGVyKG1hc2ssIGlycSwgZGVzYyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKaW5kZXggYmM2ZmIwMi4uYTU5ZmYyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogCWlmICghaW14ZG1hLT5uYW1lKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjYWxsZWQgZm9yICBub3QgYWxsb2NhdGVkIGNoYW5uZWwgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGRtYV9jaCk7CisJCSAgICAgICBfX2Z1bmNfXywgZG1hX2NoKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yODgsNyArMjg4LDcgQEAKIAogCWlmICghaW14ZG1hLT5uYW1lKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjYWxsZWQgZm9yICBub3QgYWxsb2NhdGVkIGNoYW5uZWwgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGRtYV9jaCk7CisJCSAgICAgICBfX2Z1bmNfXywgZG1hX2NoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0zMjEsNyArMzIxLDcgQEAKIAogCWlmICghaW14ZG1hLT5uYW1lKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjYWxsZWQgZm9yICBub3QgYWxsb2NhdGVkIGNoYW5uZWwgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGRtYV9jaCk7CisJCSAgICAgICBfX2Z1bmNfXywgZG1hX2NoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzY1LDcgKzM2NSw3IEBACiAKIAlpZiAoZG1hX2NoID49IElNWF9ETUFfQ0hBTk5FTFMpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGNhbGxlZCBmb3IgIG5vbi1leGlzdGVkIGNoYW5uZWwgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGRtYV9jaCk7CisJCSAgICAgICBfX2Z1bmNfXywgZG1hX2NoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zOTYsNyArMzk2LDcgQEAKIAlpZiAoIWlteGRtYS0+bmFtZSkgewogCQlwcmludGsoS0VSTl9DUklUCiAJCSAgICAgICAiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZG1hX2NoKTsKKwkJICAgICAgIF9fZnVuY19fLCBkbWFfY2gpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NTYsNyArNDU2LDcgQEAKIAkJfQogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIGZyZWUgRE1BIGNoYW5uZWwgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gZnJlZSBETUEgY2hhbm5lbCBmb3VuZFxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIC1FTk9ERVY7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lycS5jCmluZGV4IGE3NDY1ZGIuLmU2Njk1YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2lycS5jCkBAIC0xNjAsMjEgKzE2MCwyMSBAQAogc3RhdGljIHZvaWQKIGlteF9ncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlERUJVR19JUlEoIiVzOiBpcnEgJWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwlERUJVR19JUlEoIiVzOiBpcnEgJWRcbiIsIF9fZnVuY19fLCBpcnEpOwogCUlTUihJUlFfVE9fUkVHKGlycSkpID0gMSA8PCAoKGlycSAtIElSUV9HUElPQSgwKSkgJSAzMik7CiB9CiAKIHN0YXRpYyB2b2lkCiBpbXhfZ3Bpb19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19mdW5jX18sIGlycSk7CiAJSU1SKElSUV9UT19SRUcoaXJxKSkgJj0gfiggMSA8PCAoKGlycSAtIElSUV9HUElPQSgwKSkgJSAzMikpOwogfQogCiBzdGF0aWMgdm9pZAogaW14X2dwaW9fdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19mdW5jX18sIGlycSk7CiAJSU1SKElSUV9UT19SRUcoaXJxKSkgfD0gMSA8PCAoKGlycSAtIElSUV9HUElPQSgwKSkgJSAzMik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKaW5kZXggOTVhMWUyNi4uOGQ3NjFmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0NTI1Lmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci90aW1lLmMKaW5kZXggNTI3OGY1OC4uNTIzNWY2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvdGltZS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAl4dGltZS50dl9zZWMgPSBfX3Jhd19yZWFkbChydGNfYmFzZSArIFJUQ19EUik7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycVswXSwgYXJtX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkgICJydGMtcGwwMzAiLCBkZXYpOworCQkJICAicnRjLXBsMDMwIiwgTlVMTCk7CiAJaWYgKHJldCkKIAkJZ290byBtYXBfb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MG1jLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MG1jLmMKaW5kZXggMjY4YThkOC4uNzdiMjRjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwbWMuYwpAQCAtODEsNyArODEsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGlxODEzNDBtY190aW1lcl9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBidXNfZnJlcSA9IGlvcDEzeHhfY29yZV9mcmVxKCkgLyBpb3AxM3h4X3hzaV9idXNfcmF0aW8oKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJ1cyBmcmVxdWVuY3k6ICVsdVxuIiwgX19GVU5DVElPTl9fLCBidXNfZnJlcSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBidXMgZnJlcXVlbmN5OiAlbHVcbiIsIF9fZnVuY19fLCBidXNfZnJlcSk7CiAJaW9wX2luaXRfdGltZShidXNfZnJlcSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwc2MuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwc2MuYwppbmRleCBhNTFmZmQyLi5lODUyMmIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MHNjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBzYy5jCkBAIC04Myw3ICs4Myw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaXE4MTM0MHNjX3RpbWVyX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGJ1c19mcmVxID0gaW9wMTN4eF9jb3JlX2ZyZXEoKSAvIGlvcDEzeHhfeHNpX2J1c19yYXRpbygpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogYnVzIGZyZXF1ZW5jeTogJWx1XG4iLCBfX0ZVTkNUSU9OX18sIGJ1c19mcmVxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJ1cyBmcmVxdWVuY3k6ICVsdVxuIiwgX19mdW5jX18sIGJ1c19mcmVxKTsKIAlpb3BfaW5pdF90aW1lKGJ1c19mcmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCmluZGV4IDk5ZDk0Y2IuLjc4MjVjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKQEAgLTk0LDEzICs5NCwxMyBAQAogCQkJCQksIDAsIGlvcDEzeHhfYXR1eF9tZW1fc2l6ZSwgTVRfREVWSUNFKTsKIAkJCQkJaWYgKCFpb3AxM3h4X2F0dXhfbWVtX2Jhc2UpIHsKIAkJCQkJCXByaW50aygiJXM6IGF0dXggYWxsb2NhdGlvbiAiCi0JCQkJCQkgICAgICAgImZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJCSAgICAgICAiZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCQlCVUcoKTsKIAkJCQkJfQogCQkJCX0gZWxzZQogCQkJCQlpb3AxM3h4X2F0dXhfbWVtX3NpemUgPSAwOwogCQkJCVBSSU5USygiJXM6IGF0dTogJWQgYnVzX3NpemU6ICVkIG1lbV9iYXNlOiAleFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGF0dSwgaW9wMTN4eF9hdHV4X21lbV9zaXplLAorCQkJCV9fZnVuY19fLCBhdHUsIGlvcDEzeHhfYXR1eF9tZW1fc2l6ZSwKIAkJCQlpb3AxM3h4X2F0dXhfbWVtX2Jhc2UpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAxOgpAQCAtMTIwLDEzICsxMjAsMTMgQEAKIAkJCQkJLCAwLCBpb3AxM3h4X2F0dWVfbWVtX3NpemUsIE1UX0RFVklDRSk7CiAJCQkJCWlmICghaW9wMTN4eF9hdHVlX21lbV9iYXNlKSB7CiAJCQkJCQlwcmludGsoIiVzOiBhdHVlIGFsbG9jYXRpb24gIgotCQkJCQkJICAgICAgICJmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCQkgICAgICAgImZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJCQkJQlVHKCk7CiAJCQkJCX0KIAkJCQl9IGVsc2UKIAkJCQkJaW9wMTN4eF9hdHVlX21lbV9zaXplID0gMDsKIAkJCQlQUklOVEsoIiVzOiBhdHU6ICVkIGJ1c19zaXplOiAlZCBtZW1fYmFzZTogJXhcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBhdHUsIGlvcDEzeHhfYXR1ZV9tZW1fc2l6ZSwKKwkJCQlfX2Z1bmNfXywgYXR1LCBpb3AxM3h4X2F0dWVfbWVtX3NpemUsCiAJCQkJaW9wMTN4eF9hdHVlX21lbV9iYXNlKTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3NldHVwLmMKaW5kZXggYmZlMGM4Ny4uMjQ2ZjZkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3NldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3NldHVwLmMKQEAgLTUxOSw3ICs1MTksNyBAQAogCWlmIChpcTgxMzR4X2ZsYXNoX3Jlc291cmNlLmVuZCA+IGlxODEzNHhfZmxhc2hfcmVzb3VyY2Uuc3RhcnQpCiAJCWlvcDEzeHhfZGV2aWNlc1twbGF0X2lkeCsrXSA9ICZpcTgxMzR4X2ZsYXNoOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHByb2JlIGZsYXNoIHNpemVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBwcm9iZSBmbGFzaCBzaXplXG4iLCBfX2Z1bmNfXyk7CiAjZW5kaWYKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlvcDEzeHhfZGV2aWNlcywgcGxhdF9pZHgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L0tjb25maWcKaW5kZXggZGJlMDdjOS4uNWU4YzZmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9LY29uZmlnCkBAIC0zNCwxNCArMzQsNiBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIFRoZWN1cyBuMjEwMAogCSAgTkFTIGFwcGxpYW5jZS4KIAotY29uZmlnIElPUDNYWF9BVFUKLSAgICAgICAgYm9vbCAiRW5hYmxlIHRoZSBQQ0kgQ29udHJvbGxlciIKLSAgICAgICAgZGVmYXVsdCB5Ci0gICAgICAgIGhlbHAKLSAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBJT1AgdG8gaW5pdGlhbGl6ZSBpdHMgUENJIENvbnRyb2xsZXIuCi0gICAgICAgICAgU2F5IE4gaWYgdGhlIElPUCBpcyBhbiBhZGQgaW4gY2FyZCwgdGhlIGhvc3Qgc3lzdGVtIG93bnMgdGhlIFBDSQotICAgICAgICAgIGJ1cyBpbiB0aGlzIGNhc2UuCi0KIGNvbmZpZyBNQUNIX0VNNzIxMAogCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTGFubmVyIEVNNzIxMCIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYwppbmRleCA3NGM2NWNlLi5kMmE3YjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2dsYW50YW5rLmMKQEAgLTE0LDggKzE0LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mNzUzNzVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KQEAgLTE2NywxMSArMTY5LDIxIEBACiAJLnJlc291cmNlCT0gJmdsYW50YW5rX3VhcnRfcmVzb3VyY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IGY3NTM3NXNfcGxhdGZvcm1fZGF0YSBnbGFudGFua19mNzUzNzVzID0geworCS5wd20JCT0geyAyNTUsIDI1NSB9LAorCS5wd21fZW5hYmxlCT0geyAwLCAwIH0sCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZ2xhbnRhbmtfaTJjX2RldmljZXNbXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJydGMtcnM1YzM3MiIsIDB4MzIpLAogCQkudHlwZSA9ICJyczVjMzcyYSIsCiAJfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJmNzUzNzUiLCAweDJlKSwKKwkJLnR5cGUgPSAiZjc1Mzc1IiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ2xhbnRhbmtfZjc1Mzc1cywKKwl9LAogfTsKIAogc3RhdGljIHZvaWQgZ2xhbnRhbmtfcG93ZXJfb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTMxMjQ0LmMgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTMxMjQ0LmMKaW5kZXggOThjZmExYy4uNGE4OTgyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxMzEyNDQuYwpAQCAtMTc4LDEwICsxNzgsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpcTMxMjQ0X3BjaV9pbml0KHZvaWQpCiB7Ci0JaWYgKGlzX2VwODAyMTkoKSkgewotCQlpZiAoaW9wM3h4X2dldF9pbml0X2F0dSgpID09IElPUDNYWF9JTklUX0FUVV9FTkFCTEUpCi0JCQlwY2lfY29tbW9uX2luaXQoJmVwODAyMTlfcGNpKTsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfaXEzMTI0NCgpKSB7CisJaWYgKGlzX2VwODAyMTkoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZlcDgwMjE5X3BjaSk7CisJZWxzZSBpZiAobWFjaGluZV9pc19pcTMxMjQ0KCkpIHsKIAkJaWYgKGlzXzgwMjE5KCkpIHsKIAkJCXByaW50aygibm90ZTogaXEzMTI0NCBib2FyZCB0eXBlIGhhcyBiZWVuIHNlbGVjdGVkXG4iKTsKIAkJCXByaW50aygibm90ZTogdG8gc2VsZWN0IGVwODAyMTkgb3BlcmF0aW9uOlxuIik7CkBAIC0xOTAsOSArMTg5LDcgQEAKIAkJCXByaW50aygiXHQyLyB1cGRhdGUgYm9vdCBsb2FkZXIgdG8gcGFzcyIKIAkJCQkiIHRoZSBlcDgwMjE5IGlkOiAlZFxuIiwgTUFDSF9UWVBFX0VQODAyMTkpOwogCQl9Ci0KLQkJaWYgKGlvcDN4eF9nZXRfaW5pdF9hdHUoKSA9PSBJT1AzWFhfSU5JVF9BVFVfRU5BQkxFKQotCQkJcGNpX2NvbW1vbl9pbml0KCZpcTMxMjQ0X3BjaSk7CisJCXBjaV9jb21tb25faW5pdCgmaXEzMTI0NF9wY2kpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jCmluZGV4IDE4YWQyOWYuLjFkYTNjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxODAzMjEuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTgwMzIxLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAogCS5ucl9jb250cm9sbGVycyA9IDEsCiAJLnNldHVwCQk9IGlvcDN4eF9wY2lfc2V0dXAsCi0JLnByZWluaXQJPSBpb3AzeHhfcGNpX3ByZWluaXQsCisJLnByZWluaXQJPSBpb3AzeHhfcGNpX3ByZWluaXRfY29uZCwKIAkuc2NhbgkJPSBpb3AzeHhfcGNpX3NjYW5fYnVzLAogCS5tYXBfaXJxCT0gaXE4MDMyMV9wY2lfbWFwX2lycSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvS2NvbmZpZwppbmRleCA0NTU5OGUwLi45YWEwMTZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L0tjb25maWcKQEAgLTE2LDE0ICsxNiw2IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biB5b3VyIGtlcm5lbCBvbiB0aGUgSW50ZWwgSVE4MDMzMgogCSAgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJT1AzMzIgY2hpcHNldC4KIAotY29uZmlnIElPUDNYWF9BVFUKLQlib29sICJFbmFibGUgdGhlIFBDSSBDb250cm9sbGVyIgotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIElPUCB0byBpbml0aWFsaXplIGl0cyBQQ0kgQ29udHJvbGxlci4KLQkgIFNheSBOIGlmIHRoZSBJT1AgaXMgYW4gYWRkIGluIGNhcmQsIHRoZSBob3N0IHN5c3RlbSBvd25zIHRoZSBQQ0kKLQkgIGJ1cyBpbiB0aGlzIGNhc2UuCi0KIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzEuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzEuYwppbmRleCA0MzMxODhlLi5kZTM5ZmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMS5jCkBAIC04OSw3ICs4OSw3IEBACiAJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCiAJLm5yX2NvbnRyb2xsZXJzID0gMSwKIAkuc2V0dXAJCT0gaW9wM3h4X3BjaV9zZXR1cCwKLQkucHJlaW5pdAk9IGlvcDN4eF9wY2lfcHJlaW5pdCwKKwkucHJlaW5pdAk9IGlvcDN4eF9wY2lfcHJlaW5pdF9jb25kLAogCS5zY2FuCQk9IGlvcDN4eF9wY2lfc2Nhbl9idXMsCiAJLm1hcF9pcnEJPSBpcTgwMzMxX3BjaV9tYXBfaXJxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzIuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzIuYwppbmRleCA0MTZjMDk1Li40OTA0ZmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMi5jCkBAIC04OSw3ICs4OSw3IEBACiAJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCiAJLm5yX2NvbnRyb2xsZXJzID0gMSwKIAkuc2V0dXAJCT0gaW9wM3h4X3BjaV9zZXR1cCwKLQkucHJlaW5pdAk9IGlvcDN4eF9wY2lfcHJlaW5pdCwKKwkucHJlaW5pdAk9IGlvcDN4eF9wY2lfcHJlaW5pdF9jb25kLAogCS5zY2FuCQk9IGlvcDN4eF9wY2lfc2Nhbl9idXMsCiAJLm1hcF9pcnEJPSBpcTgwMzMyX3BjaV9tYXBfaXJxLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYwppbmRleCBiZjA0MTIxLi42NGJlMzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJaWYgKGlzciAmIFBDSV9JU1JfUEZFKSB7CiAJCS8qIG1ha2Ugc3VyZSB0aGUgTWFzdGVyIEFib3J0IGJpdCBpcyByZXNldCAqLyAgICAKIAkJKlBDSV9JU1IgPSBQQ0lfSVNSX1BGRTsKLQkJcHJfZGVidWcoIiVzIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJfZGVidWcoIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtcGNpLmMKaW5kZXggMGQ1YTQyNC4uNDlkZWM3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtcGNpLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAllbHNlCiAJCXJjID0gZ3R3eDU3MTVfaXJxbWFwW3Nsb3RdW3Bpbi0xXTsKIAotCXByaW50aygiJXM6IE1hcHBlZCBzbG90ICVkIHBpbiAlZCB0byBJUlEgJWRcbiIsIF9fRlVOQ1RJT05fXyxzbG90LCBwaW4sIHJjKTsKKwlwcmludGsoIiVzOiBNYXBwZWQgc2xvdCAlZCBwaW4gJWQgdG8gSVJRICVkXG4iLCBfX2Z1bmNfXywgc2xvdCwgcGluLCByYyk7CiAJcmV0dXJuKHJjKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZQppbmRleCA3MzBhM2FmLi5hZGU0MmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZQpAQCAtMTEsNSArMTEsOCBAQAogIyBQQ0kgc3VwcG9ydCBpcyBvcHRpb25hbAogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaS5vCiAKKyMgTEVEcworb2JqLSQoQ09ORklHX0xFRFMpCQkrPSBsZWRzLm8KKwogIyBCb2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9LUzg2OTUpCSs9IGJvYXJkLW1pY3JlbC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9kZXZpY2VzLmMKaW5kZXggMzg2NTkzZi4uM2RiMmVjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2RldmljZXMuYwpAQCAtMTc2LDYgKzE3NiwyNyBAQAogI2VuZGlmCiAKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBMRURzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTEVEUykKK3Nob3J0IGtzODY5NV9sZWRzX2NwdSA9IC0xOworc2hvcnQga3M4Njk1X2xlZHNfdGltZXIgPSAtMTsKKwordm9pZCBfX2luaXQga3M4Njk1X2luaXRfbGVkcyh1OCBjcHVfbGVkLCB1OCB0aW1lcl9sZWQpCit7CisJLyogRW5hYmxlIEdQSU8gdG8gYWNjZXNzIHRoZSBMRURzICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGNwdV9sZWQsIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCh0aW1lcl9sZWQsIDEpOworCisJa3M4Njk1X2xlZHNfY3B1ICAgPSBjcHVfbGVkOworCWtzODY5NV9sZWRzX3RpbWVyID0gdGltZXJfbGVkOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGtzODY5NV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKSB7fQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxNzYyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2xlZHMuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogTEVEIGRyaXZlciBmb3IgS1M4Njk1LWJhc2VkIGJvYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIEFuZHJldyBWaWN0b3IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZGV2aWNlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworCitzdGF0aWMgaW5saW5lIHZvaWQga3M4Njk1X2xlZF9vbih1bnNpZ25lZCBpbnQgbGVkKQoreworCWdwaW9fc2V0X3ZhbHVlKGxlZCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrczg2OTVfbGVkX29mZih1bnNpZ25lZCBpbnQgbGVkKQoreworCWdwaW9fc2V0X3ZhbHVlKGxlZCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrczg2OTVfbGVkX3RvZ2dsZSh1bnNpZ25lZCBpbnQgbGVkKQoreworCXVuc2lnbmVkIGxvbmcgaXNfb2ZmID0gZ3Bpb19nZXRfdmFsdWUobGVkKTsKKwlpZiAoaXNfb2ZmKQorCQlrczg2OTVfbGVkX29uKGxlZCk7CisJZWxzZQorCQlrczg2OTVfbGVkX29mZihsZWQpOworfQorCisKKy8qCisgKiBIYW5kbGUgTEVEIGV2ZW50cy4KKyAqLworc3RhdGljIHZvaWQga3M4Njk1X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2goZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CQkvKiBTeXN0ZW0gc3RhcnR1cCAqLworCQlrczg2OTVfbGVkX29uKGtzODY5NV9sZWRzX2NwdSk7CisJCWJyZWFrOworCisJY2FzZSBsZWRfc3RvcDoJCS8qIFN5c3RlbSBzdG9wIC8gc3VzcGVuZCAqLworCQlrczg2OTVfbGVkX29mZihrczg2OTVfbGVkc19jcHUpOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCisJY2FzZSBsZWRfdGltZXI6CQkvKiBFdmVyeSA1MCB0aW1lciB0aWNrcyAqLworCQlrczg2OTVfbGVkX3RvZ2dsZShrczg2OTVfbGVkc190aW1lcik7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwljYXNlIGxlZF9pZGxlX3N0YXJ0OgkvKiBFbnRlcmluZyBpZGxlIHN0YXRlICovCisJCWtzODY5NV9sZWRfb2ZmKGtzODY5NV9sZWRzX2NwdSk7CisJCWJyZWFrOworCisJY2FzZSBsZWRfaWRsZV9lbmQ6CS8qIEV4aXQgaWRsZSBzdGF0ZSAqLworCQlrczg2OTVfbGVkX29uKGtzODY5NV9sZWRzX2NwdSk7CisJCWJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgbGVkc19pbml0KHZvaWQpCit7CisJaWYgKChrczg2OTVfbGVkc190aW1lciA9PSAtMSkgfHwgKGtzODY5NV9sZWRzX2NwdSA9PSAtMSkpCisJCXJldHVybiAtRU5PREVWOworCisJbGVkc19ldmVudCA9IGtzODY5NV9sZWRzX2V2ZW50OworCisJbGVkc19ldmVudChsZWRfc3RhcnQpOworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGxlZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2dlbmVyaWMuYwppbmRleCBiOWNhOGY5Li5mZDc1MzdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC9nZW5lcmljLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXZhbCAmPSB+KCgxIDw8IDI0KSA8PCBpcnEpOwogCXdyaXRlbCh2YWwsIE5FVFhfRFBNQVNfSU5UX0VOKTsKIAotCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBfaXJxKTsKKwlERUJVR19JUlEoIiVzOiBpcnEgJWRcbiIsIF9fZnVuY19fLCBfaXJxKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXZhbCA9IHJlYWRsKE5FVFhfRFBNQVNfSU5UX0VOKTsKIAl2YWwgJj0gfigoMSA8PCAyNCkgPDwgaXJxKTsKIAl3cml0ZWwodmFsLCBORVRYX0RQTUFTX0lOVF9FTik7Ci0JREVCVUdfSVJRKCIlczogaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIF9pcnEpOworCURFQlVHX0lSUSgiJXM6IGlycSAlZFxuIiwgX19mdW5jX18sIF9pcnEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTU3LDcgKzE1Nyw3IEBACiAJdmFsID0gcmVhZGwoTkVUWF9EUE1BU19JTlRfRU4pOwogCXZhbCB8PSAoMSA8PCAyNCkgPDwgaXJxOwogCXdyaXRlbCh2YWwsIE5FVFhfRFBNQVNfSU5UX0VOKTsKLQlERUJVR19JUlEoIiVzOiBpcnEgJWRcbiIsIF9fRlVOQ1RJT05fXywgX2lycSk7CisJREVCVUdfSVJRKCIlczogaXJxICVkXG4iLCBfX2Z1bmNfXywgX2lycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbmV0eF9oaWZfY2hpcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9LY29uZmlnCmluZGV4IDg1ODRlZDEuLmRkMGNkNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvS2NvbmZpZwpAQCAtMiw5ICsyLDI2IEBACiAKIG1lbnUgIk5TOXh4eCBJbXBsZW1lbnRhdGlvbnMiCiAKK2NvbmZpZyBOUzlYWFhfSEFWRV9TRVJJQUw4MjUwCisJYm9vbAorCitjb25maWcgUFJPQ0VTU09SX05TOTM2MAorCWJvb2wKKworY29uZmlnIE1PRFVMRV9DQzlQOTM2MAorCWJvb2wKKwlzZWxlY3QgUFJPQ0VTU09SX05TOTM2MAorCitjb25maWcgQk9BUkRfQTlNOTc1MERFVgorCXNlbGVjdCBOUzlYWFhfSEFWRV9TRVJJQUw4MjUwCisJYm9vbAorCitjb25maWcgQk9BUkRfSlNDQzlQOTM2MAorCWJvb2wKKwogY29uZmlnIE1BQ0hfQ0M5UDkzNjBERVYKIAlib29sICJDb25uZWN0Q29yZSA5UCA5MzYwIG9uIGFuIEE5TTk3NTAgRGV2Ym9hcmQiCi0Jc2VsZWN0IFBST0NFU1NPUl9OUzkzNjAKKwlzZWxlY3QgTU9EVUxFX0NDOVA5MzYwCiAJc2VsZWN0IEJPQVJEX0E5TTk3NTBERVYKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIERpZ2kgQ29ubmVjdENvcmUgOVAgOTM2MApAQCAtMTIsMjEgKzI5LDEyIEBACiAKIGNvbmZpZyBNQUNIX0NDOVA5MzYwSlMKIAlib29sICJDb25uZWN0Q29yZSA5UCA5MzYwIG9uIGEgSlNDQzlQOTM2MCBEZXZib2FyZCIKLQlzZWxlY3QgUFJPQ0VTU09SX05TOTM2MAorCXNlbGVjdCBNT0RVTEVfQ0M5UDkzNjAKIAlzZWxlY3QgQk9BUkRfSlNDQzlQOTM2MAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgRGlnaSBDb25uZWN0Q29yZSA5UCA5MzYwCiAJICBvbiBhbiBKU0NDOVA5MzYwIERldmVsb3BtZW50IEJvYXJkLgogCi1jb25maWcgUFJPQ0VTU09SX05TOTM2MAotCWJvb2wKLQotY29uZmlnIEJPQVJEX0E5TTk3NTBERVYKLQlib29sCi0KLWNvbmZpZyBCT0FSRF9KU0NDOVA5MzYwCi0JYm9vbAotCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L01ha2VmaWxlCmluZGV4IDZmYjgyYjguLjQxZWZhZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L01ha2VmaWxlCkBAIC0xLDcgKzEsMTIgQEAKLW9iai15IDo9IGlycS5vIHRpbWUubyBnZW5lcmljLm8gZ3Bpby5vCitvYmoteSA6PSBjbG9jay5vIGdlbmVyaWMubyBncGlvLm8gaXJxLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfQ0M5UDkzNjBERVYpICs9IG1hY2gtY2M5cDkzNjBkZXYubwogb2JqLSQoQ09ORklHX01BQ0hfQ0M5UDkzNjBKUykgKz0gbWFjaC1jYzlwOTM2MGpzLm8KIAorb2JqLSQoQ09ORklHX1BST0NFU1NPUl9OUzkzNjApICs9IGdwaW8tbnM5MzYwLm8gcHJvY2Vzc29yLW5zOTM2MC5vIHRpbWUtbnM5MzYwLm8KKwogb2JqLSQoQ09ORklHX0JPQVJEX0E5TTk3NTBERVYpICs9IGJvYXJkLWE5bTk3NTBkZXYubwogb2JqLSQoQ09ORklHX0JPQVJEX0pTQ0M5UDkzNjApICs9IGJvYXJkLWpzY2M5cDkzNjAubworCisjIHBsYXRmb3JtIGRldmljZXMKK29iai0kKENPTkZJR19OUzlYWFhfSEFWRV9TRVJJQUw4MjUwKSArPSBwbGF0LXNlcmlhbDgyNTAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L01ha2VmaWxlLmJvb3QKaW5kZXggNzVlZDY0ZS4uNTQ2NTQ5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvTWFrZWZpbGUuYm9vdAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9NYWtlZmlsZS5ib290CkBAIC0xLDIgKzEsMiBAQAotenJlbGFkZHIteSA6PSAweDEwODAwMAorenJlbGFkZHIteSA6PSAweDgwMDAKIHBhcmFtc19waHlzLXkgOj0gMHgxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2JvYXJkLWE5bTk3NTBkZXYuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2JvYXJkLWE5bTk3NTBkZXYuYwppbmRleCAwZjY1MTc3Li5hNDk0YjcxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvYm9hcmQtYTltOTc1MGRldi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2JvYXJkLWE5bTk3NTBkZXYuYwpAQCAtOCwxNSArOCwxNCBAQAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvYm9hcmQuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1zeXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLXN5cy1uczkzNjAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1iYnUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1ib2FyZC1hOW05NzUwZGV2Lmg+CkBAIC0xMDUsOSArMTA0LDkgQEAKIAlpbnQgaTsKIAogCWlmIChncGlvX3JlcXVlc3QoMTEsICJib2FyZCBhOW05NzUwZGV2IGV4dGlycTIiKSA9PSAwKQotCQluczl4eHhfZ3Bpb19jb25maWd1cmUoMTEsIDAsIDEpOworCQluczkzNjBfZ3Bpb19jb25maWd1cmUoMTEsIDAsIDEpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBncGlvIDExIGZvciBJUlFfRVhUMlxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBncGlvIDExIGZvciBJUlFfTlM5WFhYX0VYVDJcbiIsCiAJCQkJX19mdW5jX18pOwogCiAJZm9yIChpID0gRlBHQV9JUlEoMCk7IGkgPD0gRlBHQV9JUlEoNyk7ICsraSkgewpAQCAtMTE2LDY5ICsxMTUsMTYgQEAKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKIAl9CiAKLQkvKiBJUlFfRVhUMjogbGV2ZWwgc2Vuc2l0aXZlICsgYWN0aXZlIGxvdyAqLworCS8qIElSUV9OUzlYWFhfRVhUMjogbGV2ZWwgc2Vuc2l0aXZlICsgYWN0aXZlIGxvdyAqLwogCWVpYyA9IF9fcmF3X3JlYWRsKFNZU19FSUMoMikpOwogCVJFR1NFVChlaWMsIFNZU19FSUMsIFBMVFksIEFMKTsKIAlSRUdTRVQoZWljLCBTWVNfRUlDLCBMVkVERywgTEVWRUwpOwogCV9fcmF3X3dyaXRlbChlaWMsIFNZU19FSUMoMikpOwogCi0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VYVDIsCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX05TOVhYWF9FWFQyLAogCQkJYTltOTc1MGRldl9mcGdhX2RlbXV4X2hhbmRsZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGJvYXJkX2E5bTk3NTBkZXZfc2VyaWFsODI1MF9wb3J0W10gPSB7Ci0JewotCQkuaW9iYXNlICAgICAgICAgPSBGUEdBX1VBUlRBX0JBU0UsCi0JCS5tZW1iYXNlICAgICAgICA9ICh1bnNpZ25lZCBjaGFyKilGUEdBX1VBUlRBX0JBU0UsCi0JCS5tYXBiYXNlICAgICAgICA9IEZQR0FfVUFSVEFfQkFTRSwKLQkJLmlycSAgICAgICAgICAgID0gSVJRX0ZQR0FfVUFSVEEsCi0JCS5pb3R5cGUgICAgICAgICA9IFVQSU9fTUVNLAotCQkudWFydGNsayAgICAgICAgPSAxODQzMjAwMCwKLQkJLnJlZ3NoaWZ0ICAgICAgID0gMCwKLQkJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0hBUkVfSVJRLAotCX0sIHsKLQkJLmlvYmFzZSAgICAgICAgID0gRlBHQV9VQVJUQl9CQVNFLAotCQkubWVtYmFzZSAgICAgICAgPSAodW5zaWduZWQgY2hhciopRlBHQV9VQVJUQl9CQVNFLAotCQkubWFwYmFzZSAgICAgICAgPSBGUEdBX1VBUlRCX0JBU0UsCi0JCS5pcnEgICAgICAgICAgICA9IElSUV9GUEdBX1VBUlRCLAotCQkuaW90eXBlICAgICAgICAgPSBVUElPX01FTSwKLQkJLnVhcnRjbGsgICAgICAgID0gMTg0MzIwMDAsCi0JCS5yZWdzaGlmdCAgICAgICA9IDAsCi0JCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NIQVJFX0lSUSwKLQl9LCB7Ci0JCS5pb2Jhc2UgICAgICAgICA9IEZQR0FfVUFSVENfQkFTRSwKLQkJLm1lbWJhc2UgICAgICAgID0gKHVuc2lnbmVkIGNoYXIqKUZQR0FfVUFSVENfQkFTRSwKLQkJLm1hcGJhc2UgICAgICAgID0gRlBHQV9VQVJUQ19CQVNFLAotCQkuaXJxICAgICAgICAgICAgPSBJUlFfRlBHQV9VQVJUQywKLQkJLmlvdHlwZSAgICAgICAgID0gVVBJT19NRU0sCi0JCS51YXJ0Y2xrICAgICAgICA9IDE4NDMyMDAwLAotCQkucmVnc2hpZnQgICAgICAgPSAwLAotCQkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TSEFSRV9JUlEsCi0JfSwgewotCQkuaW9iYXNlICAgICAgICAgPSBGUEdBX1VBUlREX0JBU0UsCi0JCS5tZW1iYXNlICAgICAgICA9ICh1bnNpZ25lZCBjaGFyKilGUEdBX1VBUlREX0JBU0UsCi0JCS5tYXBiYXNlICAgICAgICA9IEZQR0FfVUFSVERfQkFTRSwKLQkJLmlycSAgICAgICAgICAgID0gSVJRX0ZQR0FfVUFSVEQsCi0JCS5pb3R5cGUgICAgICAgICA9IFVQSU9fTUVNLAotCQkudWFydGNsayAgICAgICAgPSAxODQzMjAwMCwKLQkJLnJlZ3NoaWZ0ICAgICAgID0gMCwKLQkJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0hBUkVfSVJRLAotCX0sIHsKLQkJLyogZW5kIG1hcmtlciAqLwotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBib2FyZF9hOW05NzUwZGV2X3NlcmlhbF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2VyaWFsODI1MCIsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSBib2FyZF9hOW05NzUwZGV2X3NlcmlhbDgyNTBfcG9ydCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJvYXJkX2E5bTk3NTBkZXZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmJvYXJkX2E5bTk3NTBkZXZfc2VyaWFsX2RldmljZSwKLX07Ci0KIHZvaWQgX19pbml0IGJvYXJkX2E5bTk3NTBkZXZfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJdTMyIHJlZzsKQEAgLTIxMCw3ICsxNTYsNCBAQAogCV9fcmF3X3dyaXRlbCgweDIsIE1FTV9TTU9FRCgwKSk7CiAJX19yYXdfd3JpdGVsKDB4NiwgTUVNX1NNUkQoMCkpOwogCV9fcmF3X3dyaXRlbCgweDYsIE1FTV9TTVdEKDApKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGJvYXJkX2E5bTk3NTBkZXZfZGV2aWNlcywKLQkJCUFSUkFZX1NJWkUoYm9hcmRfYTltOTc1MGRldl9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODYzOTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCBjbGsgKnAsICpyZXQgPSBOVUxMLCAqcmV0Z2VuID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpZG5vOworCisJaWYgKGRldiA9PSBOVUxMIHx8IGRldi0+YnVzICE9ICZwbGF0Zm9ybV9idXNfdHlwZSkKKwkJaWRubyA9IC0xOworCWVsc2UKKwkJaWRubyA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpLT5pZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAoc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwKSB7CisJCQlpZiAocC0+aWQgPT0gaWRubykgeworCQkJCWlmICghdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKQorCQkJCQljb250aW51ZTsKKwkJCQlyZXQgPSBwOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChwLT5pZCA9PSAtMSkKKwkJCQkvKiByZW1lbWJlciBtYXRjaCB3aXRoIGlkID09IC0xIGluIGNhc2UgdGhlcmUgaXMKKwkJCQkgKiBubyBjbG9jayBmb3IgaWRubyAqLworCQkJCXJldGdlbiA9IHA7CisJCX0KKwl9CisKKwlpZiAoIXJldCAmJiByZXRnZW4gJiYgdHJ5X21vZHVsZV9nZXQocmV0Z2VuLT5vd25lcikpCisJCXJldCA9IHJldGdlbjsKKworCWlmIChyZXQpCisJCSsrcmV0LT5yZWZjb3VudDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogRVJSX1BUUigtRU5PRU5UKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7CisJbW9kdWxlX3B1dChjbGstPm93bmVyKTsKKwktLWNsay0+cmVmY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCitzdGF0aWMgaW50IGNsa19lbmFibGVfdW5sb2NrZWQoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCWlmIChjbGstPnBhcmVudCkgeworCQlyZXQgPSBjbGtfZW5hYmxlX3VubG9ja2VkKGNsay0+cGFyZW50KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGNsay0+dXNhZ2UrKyA9PSAwICYmIGNsay0+ZW5kaXNhYmxlKQorCQlyZXQgPSBjbGstPmVuZGlzYWJsZShjbGssIDEpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCisJcmV0ID0gY2xrX2VuYWJsZV91bmxvY2tlZChjbGspOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCitzdGF0aWMgdm9pZCBjbGtfZGlzYWJsZV91bmxvY2tlZChzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKC0tY2xrLT51c2FnZSA9PSAwICYmIGNsay0+ZW5kaXNhYmxlKQorCQljbGstPmVuZGlzYWJsZShjbGssIDApOworCisJaWYgKGNsay0+cGFyZW50KQorCQljbGtfZGlzYWJsZV91bmxvY2tlZChjbGstPnBhcmVudCk7Cit9CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCWNsa19kaXNhYmxlX3VubG9ja2VkKGNsayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT5nZXRfcmF0ZSkKKwkJcmV0dXJuIGNsay0+Z2V0X3JhdGUoY2xrKTsKKworCWlmIChjbGstPnJhdGUpCisJCXJldHVybiBjbGstPnJhdGU7CisKKwlpZiAoY2xrLT5wYXJlbnQpCisJCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOworCisJaWYgKGNsay0+cGFyZW50KQorCQkrK2Nsay0+cGFyZW50LT5yZWZjb3VudDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwlpZiAoY2xrLT51c2FnZSB8fCBjbGstPnJlZmNvdW50KQorCQlyZXQgPSAtRUJVU1k7CisJZWxzZQorCQlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKKworCWlmIChjbGstPnBhcmVudCkKKwkJLS1jbGstPnBhcmVudC0+cmVmY291bnQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmIGRlZmluZWQgQ09ORklHX0RFQlVHX0ZTCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIGludCBjbGtfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqbnVsbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjbGsgKnA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkKKwkJc2VxX3ByaW50ZihzLCAiJXMuJWQ6IHVzYWdlPSVsdSByZWZjb3VudD0lbHUgcmF0ZT0lbHVcbiIsCisJCQkJcC0+bmFtZSwgcC0+aWQsIHAtPnVzYWdlLCBwLT5yZWZjb3VudCwKKwkJCQlwLT51c2FnZSA/IGNsa19nZXRfcmF0ZShwKSA6IDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNsa19kZWJ1Z2ZzX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbGtfZGVidWdmc19vcGVyYXRpb25zID0geworCS5vcGVuID0gY2xrX2RlYnVnZnNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjbGsiLCBTX0lGUkVHIHwgU19JUlVHTywgTlVMTCwgTlVMTCwKKwkJCSZjbGtfZGVidWdmc19vcGVyYXRpb25zKTsKKwlyZXR1cm4gSVNfRVJSKGRlbnRyeSkgPyBQVFJfRVJSKGRlbnRyeSkgOiAwOworfQorc3Vic3lzX2luaXRjYWxsKGNsa19kZWJ1Z2ZzX2luaXQpOworCisjZW5kaWYgLyogaWYgZGVmaW5lZCBDT05GSUdfREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmMzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19OUzlYWFhfQ0xPQ0tfSAorI2RlZmluZSBfX05TOVhYWF9DTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGlkOworCisJc3RydWN0IGNsayAqcGFyZW50OworCisJdW5zaWduZWQgbG9uZyByYXRlOworCWludCAoKmVuZGlzYWJsZSkoc3RydWN0IGNsayAqLCBpbnQgZW5hYmxlKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3JhdGUpKHN0cnVjdCBjbGsgKik7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdW5zaWduZWQgbG9uZyByZWZjb3VudDsKKwl1bnNpZ25lZCBsb25nIHVzYWdlOworfTsKKworaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOworaW50IGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CisKKyNlbmRpZiAvKiBpZm5kZWYgX19OUzlYWFhfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5jCmluZGV4IGQ3NDJjOTIuLjFlMGY0NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9nZW5lcmljLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5jCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTEsMzQgKzExLDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1zeXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1tZW0uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvYm9hcmQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzdGFuZGFyZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7IC8qIEJCdXMgKi8KLQkJLnZpcnR1YWwgPSBpb19wMnYoMHg5MDAwMDAwMCksCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKDB4OTAwMDAwMDApLAotCQkubGVuZ3RoID0gMHgwMDcwMDAwMCwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UsCi0JfSwgeyAvKiBBSEIgKi8KLQkJLnZpcnR1YWwgPSBpb19wMnYoMHhhMDEwMDAwMCksCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKDB4YTAxMDAwMDApLAotCQkubGVuZ3RoID0gMHgwMDkwMDAwMCwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UsCi0JfSwKLX07Ci0KLXZvaWQgX19pbml0IG5zOXh4eF9tYXBfaW8odm9pZCkKLXsKLQlpb3RhYmxlX2luaXQoc3RhbmRhcmRfaW9fZGVzYywgQVJSQVlfU0laRShzdGFuZGFyZF9pb19kZXNjKSk7Ci19Ci0KIHZvaWQgX19pbml0IG5zOXh4eF9pbml0X21hY2hpbmUodm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dlbmVyaWMuaAppbmRleCA2ODdlMjkxNy4uODI0OTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dlbmVyaWMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9nZW5lcmljLmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xMyw3ICsxMyw0IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiB2b2lkIF9faW5pdCBuczl4eHhfaW5pdF9pcnEodm9pZCk7Ci12b2lkIF9faW5pdCBuczl4eHhfbWFwX2lvKHZvaWQpOwogdm9pZCBfX2luaXQgbnM5eHh4X2luaXRfbWFjaGluZSh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbnM5eHh4X3RpbWVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ3Bpby1uczkzNjAuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dwaW8tbnM5MzYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiZmI4NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dwaW8tbnM5MzYwLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9ncGlvLW5zOTM2MC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLWJidS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9wcm9jZXNzb3ItbnM5MzYwLmg+CisKKyNpbmNsdWRlICJncGlvLW5zOTM2MC5oIgorCitzdGF0aWMgaW5saW5lIGludCBuczkzNjBfdmFsaWRfZ3Bpbyh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBncGlvIDw9IDcyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqbnM5MzYwX2dwaW9fZ2V0X2djb25mYWRkcih1bnNpZ25lZCBncGlvKQoreworCWlmIChncGlvIDwgNTYpCisJCXJldHVybiBCQlVfR0NPTkZiMShncGlvIC8gOCk7CisJZWxzZQorCQkvKgorCQkgKiB0aGlzIGNvdWxkIGJlIG9wdGltaXNlZCBhd2F5IG9uCisJCSAqIG5zOTc1MCBvbmx5IGJ1aWxkcywgYnV0IGl0IGlzbid0IC4uLgorCQkgKi8KKwkJcmV0dXJuIEJCVV9HQ09ORmIyKChncGlvIC0gNTYpIC8gOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpuczkzNjBfZ3Bpb19nZXRfZ2N0cmxhZGRyKHVuc2lnbmVkIGdwaW8pCit7CisJaWYgKGdwaW8gPCAzMikKKwkJcmV0dXJuIEJCVV9HQ1RSTDE7CisJZWxzZSBpZiAoZ3BpbyA8IDY0KQorCQlyZXR1cm4gQkJVX0dDVFJMMjsKKwllbHNlCisJCS8qIHRoaXMgY291bGQgYmUgb3B0aW1pc2VkIGF3YXkgb24gbnM5NzUwIG9ubHkgYnVpbGRzICovCisJCXJldHVybiBCQlVfR0NUUkwzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqbnM5MzYwX2dwaW9fZ2V0X2dzdGF0YWRkcih1bnNpZ25lZCBncGlvKQoreworCWlmIChncGlvIDwgMzIpCisJCXJldHVybiBCQlVfR1NUQVQxOworCWVsc2UgaWYgKGdwaW8gPCA2NCkKKwkJcmV0dXJuIEJCVV9HU1RBVDI7CisJZWxzZQorCQkvKiB0aGlzIGNvdWxkIGJlIG9wdGltaXNlZCBhd2F5IG9uIG5zOTc1MCBvbmx5IGJ1aWxkcyAqLworCQlyZXR1cm4gQkJVX0dTVEFUMzsKK30KKworLyoKKyAqIGVhY2ggZ3BpbyBjYW4gc2VydmUgZm9yIDQgZGlmZmVyZW50IHB1cnBvc2VzIFswLi4zXS4gIFRoZXNlIGFyZSBjYWxsZWQKKyAqICJmdW5jdGlvbnMiIGFuZCBwYXNzZWQgaW4gdGhlIHBhcmFtZXRlciBmdW5jLiAgRnVuY3Rpb25zIDAtMiBhcmUgYWx3YXlzIHNvbWUKKyAqIHNwZWNpYWwgdGhpbmdzLCBmdW5jdGlvbiAzIGlzIEdQSU8uICBJZiBmdW5jID09IDMgZGlyIHNwZWNpZmllcyBpbnB1dCBvcgorICogb3V0cHV0LCBhbmQgd2l0aCBpbnYgeW91IGNhbiBlbmFibGUgYW4gaW52ZXJ0ZXIgKGluZGVwZW5kZW50IG9mIGZ1bmMpLgorICovCitpbnQgX19uczkzNjBfZ3Bpb19jb25maWd1cmUodW5zaWduZWQgZ3BpbywgaW50IGRpciwgaW50IGludiwgaW50IGZ1bmMpCit7CisJdm9pZCBfX2lvbWVtICpjb25mID0gbnM5MzYwX2dwaW9fZ2V0X2djb25mYWRkcihncGlvKTsKKwl1MzIgY29uZnZhbDsKKworCWNvbmZ2YWwgPSBfX3Jhd19yZWFkbChjb25mKTsKKwlSRUdTRVRJTV9JRFgoY29uZnZhbCwgQkJVX0dDT05GeCwgRElSLCBncGlvICYgNywgZGlyKTsKKwlSRUdTRVRJTV9JRFgoY29uZnZhbCwgQkJVX0dDT05GeCwgSU5WLCBncGlvICYgNywgaW52KTsKKwlSRUdTRVRJTV9JRFgoY29uZnZhbCwgQkJVX0dDT05GeCwgRlVOQywgZ3BpbyAmIDcsIGZ1bmMpOworCV9fcmF3X3dyaXRlbChjb25mdmFsLCBjb25mKTsKKworCXJldHVybiAwOworfQorCitpbnQgbnM5MzYwX2dwaW9fY29uZmlndXJlKHVuc2lnbmVkIGdwaW8sIGludCBpbnYsIGludCBmdW5jKQoreworCWlmIChsaWtlbHkobnM5MzYwX3ZhbGlkX2dwaW8oZ3BpbykpKSB7CisJCWlmIChmdW5jID09IDMpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzZSBncGlvX2RpcmVjdGlvbl9pbnB1dCAiCisJCQkJCSJvciBncGlvX2RpcmVjdGlvbl9vdXRwdXRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJcmV0dXJuIF9fbnM5MzYwX2dwaW9fY29uZmlndXJlKGdwaW8sIDAsIGludiwgZnVuYyk7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChuczkzNjBfZ3Bpb19jb25maWd1cmUpOworCitpbnQgbnM5MzYwX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJdm9pZCBfX2lvbWVtICpzdGF0ID0gbnM5MzYwX2dwaW9fZ2V0X2dzdGF0YWRkcihncGlvKTsKKwlpbnQgcmV0OworCisJcmV0ID0gMSAmIChfX3Jhd19yZWFkbChzdGF0KSA+PiAoZ3BpbyAmIDMxKSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG5zOTM2MF9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpjdHJsID0gbnM5MzYwX2dwaW9fZ2V0X2djdHJsYWRkcihncGlvKTsKKwl1MzIgY3RybHZhbDsKKworCWN0cmx2YWwgPSBfX3Jhd19yZWFkbChjdHJsKTsKKworCWlmICh2YWx1ZSkKKwkJY3RybHZhbCB8PSAxIDw8IChncGlvICYgMzEpOworCWVsc2UKKwkJY3RybHZhbCAmPSB+KDEgPDwgKGdwaW8gJiAzMSkpOworCisJX19yYXdfd3JpdGVsKGN0cmx2YWwsIGN0cmwpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ3Bpby1uczkzNjAuaCBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dwaW8tbnM5MzYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxY2QxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dwaW8tbnM5MzYwLmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnM5eHh4L2dwaW8tbnM5MzYwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCitpbnQgX19uczkzNjBfZ3Bpb19jb25maWd1cmUodW5zaWduZWQgZ3BpbywgaW50IGRpciwgaW50IGludiwgaW50IGZ1bmMpOworaW50IG5zOTM2MF9ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKK3ZvaWQgbnM5MzYwX2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9ncGlvLmMKaW5kZXggYjIyMzAyMS4uYjNjOTYzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dwaW8uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9ncGlvLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xNSwxMiArMTUsMTMgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLWJidS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9wcm9jZXNzb3ItbnM5MzYwLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIAorI2luY2x1ZGUgImdwaW8tbnM5MzYwLmgiCisKICNpZiBkZWZpbmVkKENPTkZJR19QUk9DRVNTT1JfTlM5MzYwKQogI2RlZmluZSBHUElPX01BWCA3MgogI2VsaWYgZGVmaW5lZChDT05GSUdfUFJPQ0VTU09SX05TOTc1MCkKQEAgLTMxLDcgKzMyLDcgQEAKIHN0YXRpYyBzcGlubG9ja190IGdwaW9fbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGdwaW9fbG9jayk7CiAKIC8qIG9ubHkgYWNjZXNzIGdwaW9yZXMgd2l0aCBhdG9taWMgb3BzICovCi1zdGF0aWMgREVDTEFSRV9CSVRNQVAoZ3Bpb3JlcywgR1BJT19NQVgpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGdwaW9yZXMsIEdQSU9fTUFYICsgMSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5zOXh4eF92YWxpZF9ncGlvKHVuc2lnbmVkIGdwaW8pCiB7CkBAIC00NSw0MSArNDYsMTAgQEAKIAkJcmV0dXJuIGdwaW8gPD0gNDk7CiAJZWxzZQogI2VuZGlmCisJewogCQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKm5zOXh4eF9ncGlvX2dldF9nY29uZmFkZHIodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoZ3BpbyA8IDU2KQotCQlyZXR1cm4gQkJVX0dDT05GYjEoZ3BpbyAvIDgpOwotCWVsc2UKLQkJLyoKLQkJICogdGhpcyBjb3VsZCBiZSBvcHRpbWlzZWQgYXdheSBvbgotCQkgKiBuczk3NTAgb25seSBidWlsZHMsIGJ1dCBpdCBpc24ndCAuLi4KLQkJICovCi0JCXJldHVybiBCQlVfR0NPTkZiMigoZ3BpbyAtIDU2KSAvIDgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqbnM5eHh4X2dwaW9fZ2V0X2djdHJsYWRkcih1bnNpZ25lZCBncGlvKQotewotCWlmIChncGlvIDwgMzIpCi0JCXJldHVybiBCQlVfR0NUUkwxOwotCWVsc2UgaWYgKGdwaW8gPCA2NCkKLQkJcmV0dXJuIEJCVV9HQ1RSTDI7Ci0JZWxzZQotCQkvKiB0aGlzIGNvdWxkIGJlIG9wdGltaXNlZCBhd2F5IG9uIG5zOTc1MCBvbmx5IGJ1aWxkcyAqLwotCQlyZXR1cm4gQkJVX0dDVFJMMzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKm5zOXh4eF9ncGlvX2dldF9nc3RhdGFkZHIodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoZ3BpbyA8IDMyKQotCQlyZXR1cm4gQkJVX0dTVEFUMTsKLQllbHNlIGlmIChncGlvIDwgNjQpCi0JCXJldHVybiBCQlVfR1NUQVQyOwotCWVsc2UKLQkJLyogdGhpcyBjb3VsZCBiZSBvcHRpbWlzZWQgYXdheSBvbiBuczk3NTAgb25seSBidWlsZHMgKi8KLQkJcmV0dXJuIEJCVV9HU1RBVDM7CisJCXJldHVybiAwOworCX0KIH0KIAogaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKQEAgLTk4LDQ5ICs2OCwyNCBAQAogfQogRVhQT1JUX1NZTUJPTChncGlvX2ZyZWUpOwogCi0vKgotICogZWFjaCBncGlvIGNhbiBzZXJ2ZSBmb3IgNCBkaWZmZXJlbnQgcHVycG9zZXMgWzAuLjNdLiAgVGhlc2UgYXJlIGNhbGxlZAotICogImZ1bmN0aW9ucyIgYW5kIHBhc3NlZCBpbiB0aGUgcGFyYW1ldGVyIGZ1bmMuICBGdW5jdGlvbnMgMC0yIGFyZSBhbHdheXMgc29tZQotICogc3BlY2lhbCB0aGluZ3MsIGZ1bmN0aW9uIDMgaXMgR1BJTy4gIElmIGZ1bmMgPT0gMyBkaXIgc3BlY2lmaWVzIGlucHV0IG9yCi0gKiBvdXRwdXQsIGFuZCB3aXRoIGludiB5b3UgY2FuIGVuYWJsZSBhbiBpbnZlcnRlciAoaW5kZXBlbmRlbnQgb2YgZnVuYykuCi0gKi8KLXN0YXRpYyBpbnQgX19uczl4eHhfZ3Bpb19jb25maWd1cmUodW5zaWduZWQgZ3BpbywgaW50IGRpciwgaW50IGludiwgaW50IGZ1bmMpCi17Ci0Jdm9pZCBfX2lvbWVtICpjb25mID0gbnM5eHh4X2dwaW9fZ2V0X2djb25mYWRkcihncGlvKTsKLQl1MzIgY29uZnZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCi0JY29uZnZhbCA9IF9fcmF3X3JlYWRsKGNvbmYpOwotCVJFR1NFVElNX0lEWChjb25mdmFsLCBCQlVfR0NPTkZ4LCBESVIsIGdwaW8gJiA3LCBkaXIpOwotCVJFR1NFVElNX0lEWChjb25mdmFsLCBCQlVfR0NPTkZ4LCBJTlYsIGdwaW8gJiA3LCBpbnYpOwotCVJFR1NFVElNX0lEWChjb25mdmFsLCBCQlVfR0NPTkZ4LCBGVU5DLCBncGlvICYgNywgZnVuYyk7Ci0JX19yYXdfd3JpdGVsKGNvbmZ2YWwsIGNvbmYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IG5zOXh4eF9ncGlvX2NvbmZpZ3VyZSh1bnNpZ25lZCBncGlvLCBpbnQgaW52LCBpbnQgZnVuYykKLXsKLQlpZiAobGlrZWx5KG5zOXh4eF92YWxpZF9ncGlvKGdwaW8pKSkgewotCQlpZiAoZnVuYyA9PSAzKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2UgZ3Bpb19kaXJlY3Rpb25faW5wdXQgIgotCQkJCQkib3IgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0XG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9IGVsc2UKLQkJCXJldHVybiBfX25zOXh4eF9ncGlvX2NvbmZpZ3VyZShncGlvLCAwLCBpbnYsIGZ1bmMpOwotCX0gZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLX0KLUVYUE9SVF9TWU1CT0wobnM5eHh4X2dwaW9fY29uZmlndXJlKTsKLQogaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCiB7CiAJaWYgKGxpa2VseShuczl4eHhfdmFsaWRfZ3BpbyhncGlvKSkpIHsKLQkJcmV0dXJuIF9fbnM5eHh4X2dwaW9fY29uZmlndXJlKGdwaW8sIDAsIDAsIDMpOworCQlpbnQgcmV0ID0gLUVJTlZBTDsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisjaWYgZGVmaW5lZChDT05GSUdfUFJPQ0VTU09SX05TOTM2MCkKKwkJaWYgKHByb2Nlc3Nvcl9pc19uczkzNjAoKSkKKwkJCXJldCA9IF9fbnM5MzYwX2dwaW9fY29uZmlndXJlKGdwaW8sIDAsIDAsIDMpOworCQllbHNlCisjZW5kaWYKKwkJCUJVRygpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJCXJldHVybiByZXQ7CisKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xNDksOSArOTQsMjIgQEAKIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewogCWlmIChsaWtlbHkobnM5eHh4X3ZhbGlkX2dwaW8oZ3BpbykpKSB7CisJCWludCByZXQgPSAtRUlOVkFMOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKIAotCQlyZXR1cm4gX19uczl4eHhfZ3Bpb19jb25maWd1cmUoZ3BpbywgMSwgMCwgMyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKyNpZiBkZWZpbmVkKENPTkZJR19QUk9DRVNTT1JfTlM5MzYwKQorCQlpZiAocHJvY2Vzc29yX2lzX25zOTM2MCgpKQorCQkJcmV0ID0gX19uczkzNjBfZ3Bpb19jb25maWd1cmUoZ3BpbywgMSwgMCwgMyk7CisJCWVsc2UKKyNlbmRpZgorCQkJQlVHKCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisKKwkJcmV0dXJuIHJldDsKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xNTksMzEgKzExNywyOCBAQAogCiBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKLQl2b2lkIF9faW9tZW0gKnN0YXQgPSBuczl4eHhfZ3Bpb19nZXRfZ3N0YXRhZGRyKGdwaW8pOwotCWludCByZXQ7Ci0KLQlyZXQgPSAxICYgKF9fcmF3X3JlYWRsKHN0YXQpID4+IChncGlvICYgMzEpKTsKLQotCXJldHVybiByZXQ7CisjaWYgZGVmaW5lZChDT05GSUdfUFJPQ0VTU09SX05TOTM2MCkKKwlpZiAocHJvY2Vzc29yX2lzX25zOTM2MCgpKQorCQlyZXR1cm4gbnM5MzYwX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworCWVsc2UKKyNlbmRpZgorCXsKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIH0KIEVYUE9SVF9TWU1CT0woZ3Bpb19nZXRfdmFsdWUpOwogCiB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKIHsKLQl2b2lkIF9faW9tZW0gKmN0cmwgPSBuczl4eHhfZ3Bpb19nZXRfZ2N0cmxhZGRyKGdwaW8pOwotCXUzMiBjdHJsdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0KLQljdHJsdmFsID0gX19yYXdfcmVhZGwoY3RybCk7Ci0KLQlpZiAodmFsdWUpCi0JCWN0cmx2YWwgfD0gMSA8PCAoZ3BpbyAmIDMxKTsKKyNpZiBkZWZpbmVkKENPTkZJR19QUk9DRVNTT1JfTlM5MzYwKQorCWlmIChwcm9jZXNzb3JfaXNfbnM5MzYwKCkpCisJCW5zOTM2MF9ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7CiAJZWxzZQotCQljdHJsdmFsICY9IH4oMSA8PCAoZ3BpbyAmIDMxKSk7Ci0KLQlfX3Jhd193cml0ZWwoY3RybHZhbCwgY3RybCk7CisjZW5kaWYKKwkJQlVHKCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKaW5kZXggMDAwMDFiOC4uMzZlNTgzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKQEAgLTksMjEgKzksMjcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLWNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L2JvYXJkLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKKy8qIHNpbXBsZSBpbnRlcnJ1cHQgcHJpbyB0YWJsZTogcHJpbyh4KSA8IHByaW8oeSkgPD0+IHggPCB5ICovCisjZGVmaW5lIGlycTJwcmlvKGkpIChpKQorI2RlZmluZSBwcmlvMmlycShwKSAocCkKKwogc3RhdGljIHZvaWQgbnM5eHh4X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJLyogWFhYOiBiZXR0ZXIgdXNlIGNwcCBzeW1ib2xzICovCi0JdTMyIGljID0gX19yYXdfcmVhZGwoU1lTX0lDKGlycSAvIDQpKTsKLQlpYyAmPSB+KDEgPDwgKDcgKyA4ICogKDMgLSAoaXJxICYgMykpKSk7Ci0JX19yYXdfd3JpdGVsKGljLCBTWVNfSUMoaXJxIC8gNCkpOworCWludCBwcmlvID0gaXJxMnByaW8oaXJxKTsKKwl1MzIgaWMgPSBfX3Jhd19yZWFkbChTWVNfSUMocHJpbyAvIDQpKTsKKwlpYyAmPSB+KDEgPDwgKDcgKyA4ICogKDMgLSAocHJpbyAmIDMpKSkpOworCV9fcmF3X3dyaXRlbChpYywgU1lTX0lDKHByaW8gLyA0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIG5zOXh4eF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC00MCw5ICs0NiwxMCBAQAogc3RhdGljIHZvaWQgbnM5eHh4X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAkvKiBYWFg6IGJldHRlciB1c2UgY3BwIHN5bWJvbHMgKi8KLQl1MzIgaWMgPSBfX3Jhd19yZWFkbChTWVNfSUMoaXJxIC8gNCkpOwotCWljIHw9IDEgPDwgKDcgKyA4ICogKDMgLSAoaXJxICYgMykpKTsKLQlfX3Jhd193cml0ZWwoaWMsIFNZU19JQyhpcnEgLyA0KSk7CisJaW50IHByaW8gPSBpcnEycHJpbyhpcnEpOworCXUzMiBpYyA9IF9fcmF3X3JlYWRsKFNZU19JQyhwcmlvIC8gNCkpOworCWljIHw9IDEgPDwgKDcgKyA4ICogKDMgLSAocHJpbyAmIDMpKSk7CisJX19yYXdfd3JpdGVsKGljLCBTWVNfSUMocHJpbyAvIDQpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBuczl4eHhfY2hpcCA9IHsKQEAgLTUyLDI0ICs1OSw2MSBAQAogCS51bm1hc2sJCT0gbnM5eHh4X3VubWFza19pcnEsCiB9OwogCisjaWYgMAorI2RlZmluZSBoYW5kbGVfaXJxIGhhbmRsZV9sZXZlbF9pcnEKKyNlbHNlCit2b2lkIGhhbmRsZV9wcmlvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKKworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisKKwlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOworCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCWlmICh1bmxpa2VseSghYWN0aW9uIHx8IChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJZGVzYy0+c3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKworCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgYWN0aW9uKTsKKworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpICYmIGRlc2MtPmNoaXAtPmFjaykKKwkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworfQorI2RlZmluZSBoYW5kbGVfaXJxIGhhbmRsZV9wcmlvX2lycQorI2VuZGlmCisKIHZvaWQgX19pbml0IG5zOXh4eF9pbml0X2lycSh2b2lkKQogewogCWludCBpOwogCiAJLyogZGlzYWJsZSBhbGwgSVJRcyAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCi0JCV9fcmF3X3dyaXRlbCgoNCAqIGkpIDw8IDI0IHwgKDQgKiBpICsgMSkgPDwgMTYgfAotCQkJCSg0ICogaSArIDIpIDw8IDggfCAoNCAqIGkgKyAzKSwgU1lTX0lDKGkpKTsKKwkJX19yYXdfd3JpdGVsKHByaW8yaXJxKDQgKiBpKSA8PCAyNCB8CisJCQkJcHJpbzJpcnEoNCAqIGkgKyAxKSA8PCAxNiB8CisJCQkJcHJpbzJpcnEoNCAqIGkgKyAyKSA8PCA4IHwKKwkJCQlwcmlvMmlycSg0ICogaSArIDMpLAorCQkJCVNZU19JQyhpKSk7CiAKLQkvKiBzaW1wbGUgaW50ZXJydXB0IHByaW8gdGFibGU6Ci0JICogcHJpbyh4KSA8IHByaW8oeSkgPD0+IHggPCB5Ci0JICovCiAJZm9yIChpID0gMDsgaSA8IDMyOyArK2kpCi0JCV9fcmF3X3dyaXRlbChpLCBTWVNfSVZBKGkpKTsKKwkJX19yYXdfd3JpdGVsKHByaW8yaXJxKGkpLCBTWVNfSVZBKGkpKTsKIAotCWZvciAoaSA9IElSUV9XQVRDSERPRzsgaSA8PSBJUlFfRVhUMzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8PSAzMTsgKytpKSB7CiAJCXNldF9pcnFfY2hpcChpLCAmbnM5eHh4X2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfaXJxKTsKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9tYWNoLWNjOXA5MzYwZGV2LmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9tYWNoLWNjOXA5MzYwZGV2LmMKaW5kZXggNzYwYzlkMC4uOTYyM2ZmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvbWFjaC1jYzlwOTM2MGRldi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L21hY2gtY2M5cDkzNjBkZXYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9tYWNoLWNjOXA5MzYwZGV2LmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xMSwxMiArMTEsMTQgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9wcm9jZXNzb3ItbnM5MzYwLmg+CisKICNpbmNsdWRlICJib2FyZC1hOW05NzUwZGV2LmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFjaF9jYzlwOTM2MGRldl9tYXBfaW8odm9pZCkKIHsKLQluczl4eHhfbWFwX2lvKCk7CisJbnM5MzYwX21hcF9pbygpOwogCWJvYXJkX2E5bTk3NTBkZXZfbWFwX2lvKCk7CiB9CiAKQEAgLTM2LDYgKzM4LDYgQEAKIAkubWFwX2lvID0gbWFjaF9jYzlwOTM2MGRldl9tYXBfaW8sCiAJLmluaXRfaXJxID0gbWFjaF9jYzlwOTM2MGRldl9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lID0gbWFjaF9jYzlwOTM2MGRldl9pbml0X21hY2hpbmUsCi0JLnRpbWVyID0gJm5zOXh4eF90aW1lciwKKwkudGltZXIgPSAmbnM5MzYwX3RpbWVyLAogCS5ib290X3BhcmFtcyA9IDB4MTAwLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L21hY2gtY2M5cDkzNjBqcy5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvbWFjaC1jYzlwOTM2MGpzLmMKaW5kZXggODVjOGI0MS4uZmNjODE1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvbWFjaC1jYzlwOTM2MGpzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvbWFjaC1jYzlwOTM2MGpzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vbWFjaC1uczl4eHgvbWFjaC1jYzlwOTM2MGpzLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xMSw2ICsxMSw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5oPgorCiAjaW5jbHVkZSAiYm9hcmQtanNjYzlwOTM2MC5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMjEsOSArMjMsOSBAQAogfQogCiBNQUNISU5FX1NUQVJUKENDOVA5MzYwSlMsICJEaWdpIENvbm5lY3RDb3JlIDlQIDkzNjAgb24gYW4gSlNDQzlQOTM2MCBEZXZib2FyZCIpCi0JLm1hcF9pbyA9IG5zOXh4eF9tYXBfaW8sCisJLm1hcF9pbyA9IG5zOTM2MF9tYXBfaW8sCiAJLmluaXRfaXJxID0gbnM5eHh4X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgPSBtYWNoX2NjOXA5MzYwanNfaW5pdF9tYWNoaW5lLAotCS50aW1lciA9ICZuczl4eHhfdGltZXIsCisJLnRpbWVyID0gJm5zOTM2MF90aW1lciwKIAkuYm9vdF9wYXJhbXMgPSAweDEwMCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9wbGF0LXNlcmlhbDgyNTAuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L3BsYXQtc2VyaWFsODI1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTVkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9wbGF0LXNlcmlhbDgyNTAuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1uczl4eHgvcGxhdC1zZXJpYWw4MjUwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1ib2FyZC1hOW05NzUwZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L2JvYXJkLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInNlcmlhbDgyNTAiCisKK3N0YXRpYyBpbnQgX19pbml0IG5zOXh4eF9wbGF0X3NlcmlhbDgyNTBfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcGRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlpbnQgaTsKKworCWlmICghYm9hcmRfaXNfYTltOTc1MGRldigpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJJVkVSX05BTUUsIDApOworCWlmICghcGRldikKKwkJZ290byBlcnI7CisKKwlwZGF0YSA9IGt6YWxsb2MoNSAqIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhKQorCQlnb3RvIGVycjsKKworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CisKKwlwZGF0YVswXS5pb2Jhc2UgPSBGUEdBX1VBUlRBX0JBU0U7CisJcGRhdGFbMV0uaW9iYXNlID0gRlBHQV9VQVJUQl9CQVNFOworCXBkYXRhWzJdLmlvYmFzZSA9IEZQR0FfVUFSVENfQkFTRTsKKwlwZGF0YVszXS5pb2Jhc2UgPSBGUEdBX1VBUlREX0JBU0U7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCXBkYXRhW2ldLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcGRhdGFbaV0uaW9iYXNlOworCQlwZGF0YVtpXS5tYXBiYXNlID0gcGRhdGFbaV0uaW9iYXNlOworCQlwZGF0YVtpXS5pb3R5cGUgPSBVUElPX01FTTsKKwkJcGRhdGFbaV0udWFydGNsayA9IDE4NDMyMDAwOworCQlwZGF0YVtpXS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NIQVJFX0lSUTsKKwl9CisKKwlwZGF0YVswXS5pcnEgPSBJUlFfRlBHQV9VQVJUQTsKKwlwZGF0YVsxXS5pcnEgPSBJUlFfRlBHQV9VQVJUQjsKKwlwZGF0YVsyXS5pcnEgPSBJUlFfRlBHQV9VQVJUQzsKKwlwZGF0YVszXS5pcnEgPSBJUlFfRlBHQV9VQVJURDsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKHJldCkgeworZXJyOgorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvdWxkIG5vdCBhZGQgJXMgKGVycm5vPSVkKVxuIiwKKwkJCQlEUklWRVJfTkFNRSwgcmV0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChuczl4eHhfcGxhdF9zZXJpYWw4MjUwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWUwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9wcm9jZXNzb3ItbnM5MzYwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnM5eHh4L3Byb2Nlc3Nvci1uczkzNjAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9wcm9jZXNzb3ItbnM5MzYwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLW5zOTM2MC5oPgorCit2b2lkIG5zOTM2MF9yZXNldChjaGFyIG1vZGUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKFNZU19QTEwpID4+IDE2OworCVJFR1NFVChyZWcsIFNZU19QTEwsIFNXQywgWUVTKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTWVNfUExMKTsKK30KKworI2RlZmluZSBDUllTVEFMIDI5NDkxMjAwIC8qIEh6ICovCit1bnNpZ25lZCBsb25nIG5zOTM2MF9zeXN0ZW1jbG9jayh2b2lkKQoreworCXUzMiBwbGwgPSBfX3Jhd19yZWFkbChTWVNfUExMKTsKKwlyZXR1cm4gQ1JZU1RBTCAqIChSRUdHRVRJTShwbGwsIFNZU19QTEwsIE5EKSArIDEpCisJCT4+IFJFR0dFVElNKHBsbCwgU1lTX1BMTCwgRlMpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5zOTM2MF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7IC8qIEJCdXMgKi8KKwkJLnZpcnR1YWwgPSBpb19wMnYoMHg5MDAwMDAwMCksCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKDB4OTAwMDAwMDApLAorCQkubGVuZ3RoID0gMHgwMDcwMDAwMCwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UsCisJfSwgeyAvKiBBSEIgKi8KKwkJLnZpcnR1YWwgPSBpb19wMnYoMHhhMDEwMDAwMCksCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKDB4YTAxMDAwMDApLAorCQkubGVuZ3RoID0gMHgwMDkwMDAwMCwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UsCisJfSwKK307CisKK3ZvaWQgX19pbml0IG5zOTM2MF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQobnM5MzYwX2lvX2Rlc2MsIEFSUkFZX1NJWkUobnM5MzYwX2lvX2Rlc2MpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUtbnM5MzYwLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC90aW1lLW5zOTM2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTczYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC90aW1lLW5zOTM2MC5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1uczl4eHgvdGltZS1uczkzNjAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLXN5cy1uczkzNjAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c3RlbS5oPgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBUSU1FUl9DTE9DS1NPVVJDRSAwCisjZGVmaW5lIFRJTUVSX0NMT0NLRVZFTlQgMQorc3RhdGljIHUzMiBsYXRjaDsKKworc3RhdGljIGN5Y2xlX3QgbnM5MzYwX2Nsb2Nrc291cmNlX3JlYWQodm9pZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoU1lTX1RSKFRJTUVSX0NMT0NLU09VUkNFKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgbnM5MzYwX2Nsb2Nrc291cmNlID0geworCS5uYW1lCT0gIm5zOTM2MC10aW1lciIgX19zdHJpbmdpZnkoVElNRVJfQ0xPQ0tTT1VSQ0UpLAorCS5yYXRpbmcJPSAzMDAsCisJLnJlYWQJPSBuczkzNjBfY2xvY2tzb3VyY2VfcmVhZCwKKwkubWFzawk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdAk9IDIwLAorCS5mbGFncwk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIHZvaWQgbnM5MzYwX2Nsb2NrZXZlbnRfc2V0bW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrKQoreworCXUzMiB0YyA9IF9fcmF3X3JlYWRsKFNZU19UQyhUSU1FUl9DTE9DS0VWRU5UKSk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlfX3Jhd193cml0ZWwobGF0Y2gsIFNZU19UUkMoVElNRVJfQ0xPQ0tFVkVOVCkpOworCQlSRUdTRVQodGMsIFNZU19UQ3gsIFJFTiwgRU4pOworCQlSRUdTRVQodGMsIFNZU19UQ3gsIElOVFMsIEVOKTsKKwkJUkVHU0VUKHRjLCBTWVNfVEN4LCBURU4sIEVOKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCVJFR1NFVCh0YywgU1lTX1RDeCwgUkVOLCBESVMpOworCQlSRUdTRVQodGMsIFNZU19UQ3gsIElOVFMsIEVOKTsKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJZGVmYXVsdDoKKwkJUkVHU0VUKHRjLCBTWVNfVEN4LCBURU4sIERJUyk7CisJCWJyZWFrOworCX0KKworCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKFRJTUVSX0NMT0NLRVZFTlQpKTsKK30KKworc3RhdGljIGludCBuczkzNjBfY2xvY2tldmVudF9zZXRuZXh0ZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCisJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKK3sKKwl1MzIgdGMgPSBfX3Jhd19yZWFkbChTWVNfVEMoVElNRVJfQ0xPQ0tFVkVOVCkpOworCisJaWYgKFJFR0dFVCh0YywgU1lTX1RDeCwgVEVOKSkgeworCQlSRUdTRVQodGMsIFNZU19UQ3gsIFRFTiwgRElTKTsKKwkJX19yYXdfd3JpdGVsKHRjLCBTWVNfVEMoVElNRVJfQ0xPQ0tFVkVOVCkpOworCX0KKworCVJFR1NFVCh0YywgU1lTX1RDeCwgVEVOLCBFTik7CisKKwlfX3Jhd193cml0ZWwoZXZ0LCBTWVNfVFJDKFRJTUVSX0NMT0NLRVZFTlQpKTsKKworCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKFRJTUVSX0NMT0NLRVZFTlQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBuczkzNjBfY2xvY2tldmVudF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm5zOTM2MC10aW1lciIgX19zdHJpbmdpZnkoVElNRVJfQ0xPQ0tFVkVOVCksCisJLnNoaWZ0CQk9IDIwLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2V0X21vZGUJPSBuczkzNjBfY2xvY2tldmVudF9zZXRtb2RlLAorCS5zZXRfbmV4dF9ldmVudAk9IG5zOTM2MF9jbG9ja2V2ZW50X3NldG5leHRldmVudCwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuczkzNjBfY2xvY2tldmVudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgdGltZXJubyA9IGlycSAtIElSUV9OUzkzNjBfVElNRVIwOworCXUzMiB0YzsKKworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZuczkzNjBfY2xvY2tldmVudF9kZXZpY2U7CisKKwkvKiBjbGVhciBpcnEgKi8KKwl0YyA9IF9fcmF3X3JlYWRsKFNZU19UQyh0aW1lcm5vKSk7CisJaWYgKFJFR0dFVCh0YywgU1lTX1RDeCwgUkVOKSA9PSBTWVNfVEN4X1JFTl9ESVMpIHsKKwkJUkVHU0VUKHRjLCBTWVNfVEN4LCBURU4sIERJUyk7CisJCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKHRpbWVybm8pKTsKKwl9CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBJTlRDLCBTRVQpOworCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKHRpbWVybm8pKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIElOVEMsIFVOU0VUKTsKKwlfX3Jhd193cml0ZWwodGMsIFNZU19UQyh0aW1lcm5vKSk7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbnM5MzYwX2Nsb2NrZXZlbnRfYWN0aW9uID0geworCS5uYW1lCQk9ICJuczkzNjAtdGltZXIiIF9fc3RyaW5naWZ5KFRJTUVSX0NMT0NLRVZFTlQpLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IG5zOTM2MF9jbG9ja2V2ZW50X2hhbmRsZXIsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbnM5MzYwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpbnQgdGM7CisKKwl0YyA9IF9fcmF3X3JlYWRsKFNZU19UQyhUSU1FUl9DTE9DS1NPVVJDRSkpOworCWlmIChSRUdHRVQodGMsIFNZU19UQ3gsIFRFTikpIHsKKwkJUkVHU0VUKHRjLCBTWVNfVEN4LCBURU4sIERJUyk7CisJCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKFRJTUVSX0NMT0NLU09VUkNFKSk7CisJfQorCisJX19yYXdfd3JpdGVsKDAsIFNZU19UUkMoVElNRVJfQ0xPQ0tTT1VSQ0UpKTsKKworCVJFR1NFVCh0YywgU1lTX1RDeCwgVEVOLCBFTik7CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBUREJHLCBTVE9QKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFRMQ1MsIENQVSk7CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBUTSwgSUVFKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIElOVFMsIERJUyk7CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBVRFMsIFVQKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFRTWiwgMzIpOworCVJFR1NFVCh0YywgU1lTX1RDeCwgUkVOLCBFTik7CisKKwlfX3Jhd193cml0ZWwodGMsIFNZU19UQyhUSU1FUl9DTE9DS1NPVVJDRSkpOworCisJbnM5MzYwX2Nsb2Nrc291cmNlLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KG5zOTM2MF9jcHVjbG9jaygpLAorCQkJbnM5MzYwX2Nsb2Nrc291cmNlLnNoaWZ0KTsKKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZuczkzNjBfY2xvY2tzb3VyY2UpOworCisJbGF0Y2ggPSBTSF9ESVYobnM5MzYwX2NwdWNsb2NrKCksIEhaLCAwKTsKKworCXRjID0gX19yYXdfcmVhZGwoU1lTX1RDKFRJTUVSX0NMT0NLRVZFTlQpKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFRFTiwgRElTKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFREQkcsIFNUT1ApOworCVJFR1NFVCh0YywgU1lTX1RDeCwgVExDUywgQ1BVKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFRNLCBJRUUpOworCVJFR1NFVCh0YywgU1lTX1RDeCwgSU5UUywgRElTKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFVEUywgRE9XTik7CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBUU1osIDMyKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFJFTiwgRU4pOworCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKFRJTUVSX0NMT0NLRVZFTlQpKTsKKworCW5zOTM2MF9jbG9ja2V2ZW50X2RldmljZS5tdWx0ID0gZGl2X3NjKG5zOTM2MF9jcHVjbG9jaygpLAorCQkJTlNFQ19QRVJfU0VDLCBuczkzNjBfY2xvY2tldmVudF9kZXZpY2Uuc2hpZnQpOworCW5zOTM2MF9jbG9ja2V2ZW50X2RldmljZS5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKC0xLCAmbnM5MzYwX2Nsb2NrZXZlbnRfZGV2aWNlKTsKKwluczkzNjBfY2xvY2tldmVudF9kZXZpY2UubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygxLCAmbnM5MzYwX2Nsb2NrZXZlbnRfZGV2aWNlKTsKKworCW5zOTM2MF9jbG9ja2V2ZW50X2RldmljZS5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoMCk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZuczkzNjBfY2xvY2tldmVudF9kZXZpY2UpOworCisJc2V0dXBfaXJxKElSUV9OUzkzNjBfVElNRVIwICsgVElNRVJfQ0xPQ0tFVkVOVCwKKwkJCSZuczkzNjBfY2xvY2tldmVudF9hY3Rpb24pOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG5zOTM2MF90aW1lciA9IHsKKwkuaW5pdCA9IG5zOTM2MF90aW1lcl9pbml0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkZDFmNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC90aW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotCi0jaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L2lycXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9zeXN0ZW0uaD4KLSNpbmNsdWRlICJnZW5lcmljLmgiCi0KLSNkZWZpbmUgVElNRVJfQ0xPQ0tTT1VSQ0UgMAotI2RlZmluZSBUSU1FUl9DTE9DS0VWRU5UIDEKLXN0YXRpYyB1MzIgbGF0Y2g7Ci0KLXN0YXRpYyBjeWNsZV90IG5zOXh4eF9jbG9ja3NvdXJjZV9yZWFkKHZvaWQpCi17Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKFNZU19UUihUSU1FUl9DTE9DS1NPVVJDRSkpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIG5zOXh4eF9jbG9ja3NvdXJjZSA9IHsKLQkubmFtZQk9ICJuczl4eHgtdGltZXIiIF9fc3RyaW5naWZ5KFRJTUVSX0NMT0NLU09VUkNFKSwKLQkucmF0aW5nCT0gMzAwLAotCS5yZWFkCT0gbnM5eHh4X2Nsb2Nrc291cmNlX3JlYWQsCi0JLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQJPSAyMCwKLQkuZmxhZ3MJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKLX07Ci0KLXN0YXRpYyB2b2lkIG5zOXh4eF9jbG9ja2V2ZW50X3NldG1vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKLXsKLQl1MzIgdGMgPSBfX3Jhd19yZWFkbChTWVNfVEMoVElNRVJfQ0xPQ0tFVkVOVCkpOwotCi0Jc3dpdGNoKG1vZGUpIHsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQlfX3Jhd193cml0ZWwobGF0Y2gsIFNZU19UUkMoVElNRVJfQ0xPQ0tFVkVOVCkpOwotCQlSRUdTRVQodGMsIFNZU19UQ3gsIFJFTiwgRU4pOwotCQlSRUdTRVQodGMsIFNZU19UQ3gsIElOVFMsIEVOKTsKLQkJUkVHU0VUKHRjLCBTWVNfVEN4LCBURU4sIEVOKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCVJFR1NFVCh0YywgU1lTX1RDeCwgUkVOLCBESVMpOwotCQlSRUdTRVQodGMsIFNZU19UQ3gsIElOVFMsIEVOKTsKLQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6Ci0JZGVmYXVsdDoKLQkJUkVHU0VUKHRjLCBTWVNfVEN4LCBURU4sIERJUyk7Ci0JCWJyZWFrOwotCX0KLQotCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKFRJTUVSX0NMT0NLRVZFTlQpKTsKLX0KLQotc3RhdGljIGludCBuczl4eHhfY2xvY2tldmVudF9zZXRuZXh0ZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCi0JCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKLXsKLQl1MzIgdGMgPSBfX3Jhd19yZWFkbChTWVNfVEMoVElNRVJfQ0xPQ0tFVkVOVCkpOwotCi0JaWYgKFJFR0dFVCh0YywgU1lTX1RDeCwgVEVOKSkgewotCQlSRUdTRVQodGMsIFNZU19UQ3gsIFRFTiwgRElTKTsKLQkJX19yYXdfd3JpdGVsKHRjLCBTWVNfVEMoVElNRVJfQ0xPQ0tFVkVOVCkpOwotCX0KLQotCVJFR1NFVCh0YywgU1lTX1RDeCwgVEVOLCBFTik7Ci0KLQlfX3Jhd193cml0ZWwoZXZ0LCBTWVNfVFJDKFRJTUVSX0NMT0NLRVZFTlQpKTsKLQotCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKFRJTUVSX0NMT0NLRVZFTlQpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBuczl4eHhfY2xvY2tldmVudF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm5zOXh4eC10aW1lciIgX19zdHJpbmdpZnkoVElNRVJfQ0xPQ0tFVkVOVCksCi0JLnNoaWZ0CQk9IDIwLAotCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKLQkuc2V0X21vZGUJPSBuczl4eHhfY2xvY2tldmVudF9zZXRtb2RlLAotCS5zZXRfbmV4dF9ldmVudAk9IG5zOXh4eF9jbG9ja2V2ZW50X3NldG5leHRldmVudCwKLX07Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBuczl4eHhfY2xvY2tldmVudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgdGltZXJubyA9IGlycSAtIElSUV9USU1FUjA7Ci0JdTMyIHRjOwotCi0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJm5zOXh4eF9jbG9ja2V2ZW50X2RldmljZTsKLQotCS8qIGNsZWFyIGlycSAqLwotCXRjID0gX19yYXdfcmVhZGwoU1lTX1RDKHRpbWVybm8pKTsKLQlpZiAoUkVHR0VUKHRjLCBTWVNfVEN4LCBSRU4pID09IFNZU19UQ3hfUkVOX0RJUykgewotCQlSRUdTRVQodGMsIFNZU19UQ3gsIFRFTiwgRElTKTsKLQkJX19yYXdfd3JpdGVsKHRjLCBTWVNfVEModGltZXJubykpOwotCX0KLQlSRUdTRVQodGMsIFNZU19UQ3gsIElOVEMsIFNFVCk7Ci0JX19yYXdfd3JpdGVsKHRjLCBTWVNfVEModGltZXJubykpOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgSU5UQywgVU5TRVQpOwotCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKHRpbWVybm8pKTsKLQotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBuczl4eHhfY2xvY2tldmVudF9hY3Rpb24gPSB7Ci0JLm5hbWUJCT0gIm5zOXh4eC10aW1lciIgX19zdHJpbmdpZnkoVElNRVJfQ0xPQ0tFVkVOVCksCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotCS5oYW5kbGVyCT0gbnM5eHh4X2Nsb2NrZXZlbnRfaGFuZGxlciwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBuczl4eHhfdGltZXJfaW5pdCh2b2lkKQotewotCWludCB0YzsKLQotCXRjID0gX19yYXdfcmVhZGwoU1lTX1RDKFRJTUVSX0NMT0NLU09VUkNFKSk7Ci0JaWYgKFJFR0dFVCh0YywgU1lTX1RDeCwgVEVOKSkgewotCQlSRUdTRVQodGMsIFNZU19UQ3gsIFRFTiwgRElTKTsKLQkJX19yYXdfd3JpdGVsKHRjLCBTWVNfVEMoVElNRVJfQ0xPQ0tTT1VSQ0UpKTsKLQl9Ci0KLQlfX3Jhd193cml0ZWwoMCwgU1lTX1RSQyhUSU1FUl9DTE9DS1NPVVJDRSkpOwotCi0JUkVHU0VUKHRjLCBTWVNfVEN4LCBURU4sIEVOKTsKLQlSRUdTRVQodGMsIFNZU19UQ3gsIFREQkcsIFNUT1ApOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgVExDUywgQ1BVKTsKLQlSRUdTRVQodGMsIFNZU19UQ3gsIFRNLCBJRUUpOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgSU5UUywgRElTKTsKLQlSRUdTRVQodGMsIFNZU19UQ3gsIFVEUywgVVApOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgVFNaLCAzMik7Ci0JUkVHU0VUKHRjLCBTWVNfVEN4LCBSRU4sIEVOKTsKLQotCV9fcmF3X3dyaXRlbCh0YywgU1lTX1RDKFRJTUVSX0NMT0NLU09VUkNFKSk7Ci0KLQluczl4eHhfY2xvY2tzb3VyY2UubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQobnM5eHh4X2NwdWNsb2NrKCksCi0JCQluczl4eHhfY2xvY2tzb3VyY2Uuc2hpZnQpOwotCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJm5zOXh4eF9jbG9ja3NvdXJjZSk7Ci0KLQlsYXRjaCA9IFNIX0RJVihuczl4eHhfY3B1Y2xvY2soKSwgSFosIDApOwotCi0JdGMgPSBfX3Jhd19yZWFkbChTWVNfVEMoVElNRVJfQ0xPQ0tFVkVOVCkpOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgVEVOLCBESVMpOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgVERCRywgU1RPUCk7Ci0JUkVHU0VUKHRjLCBTWVNfVEN4LCBUTENTLCBDUFUpOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgVE0sIElFRSk7Ci0JUkVHU0VUKHRjLCBTWVNfVEN4LCBJTlRTLCBESVMpOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgVURTLCBET1dOKTsKLQlSRUdTRVQodGMsIFNZU19UQ3gsIFRTWiwgMzIpOwotCVJFR1NFVCh0YywgU1lTX1RDeCwgUkVOLCBFTik7Ci0JX19yYXdfd3JpdGVsKHRjLCBTWVNfVEMoVElNRVJfQ0xPQ0tFVkVOVCkpOwotCi0JbnM5eHh4X2Nsb2NrZXZlbnRfZGV2aWNlLm11bHQgPSBkaXZfc2MobnM5eHh4X2NwdWNsb2NrKCksCi0JCQlOU0VDX1BFUl9TRUMsIG5zOXh4eF9jbG9ja2V2ZW50X2RldmljZS5zaGlmdCk7Ci0JbnM5eHh4X2Nsb2NrZXZlbnRfZGV2aWNlLm1heF9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoLTEsICZuczl4eHhfY2xvY2tldmVudF9kZXZpY2UpOwotCW5zOXh4eF9jbG9ja2V2ZW50X2RldmljZS5taW5fZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZuczl4eHhfY2xvY2tldmVudF9kZXZpY2UpOwotCi0JbnM5eHh4X2Nsb2NrZXZlbnRfZGV2aWNlLmNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJm5zOXh4eF9jbG9ja2V2ZW50X2RldmljZSk7Ci0KLQlzZXR1cF9pcnEoSVJRX1RJTUVSMCArIFRJTUVSX0NMT0NLRVZFTlQsICZuczl4eHhfY2xvY2tldmVudF9hY3Rpb24pOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG5zOXh4eF90aW1lciA9IHsKLQkuaW5pdCA9IG5zOXh4eF90aW1lcl9pbml0LAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCmluZGV4IDAxNWE2NmIuLmMwNmY1MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQpAQCAtNSw3ICs1LDggQEAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15IDo9IGlvLm8gaWQubyBjbG9jay5vIGlycS5vIG11eC5vIHNlcmlhbC5vIGRldmljZXMubwogCi1vYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lLm8KK29iai0kKENPTkZJR19PTUFQX01QVV9USU1FUikJKz0gdGltZS5vCitvYmotJChDT05GSUdfT01BUF8zMktfVElNRVIpCSs9IHRpbWVyMzJrLm8KIAogIyBQb3dlciBNYW5hZ2VtZW50CiBvYmotJChDT05GSUdfUE0pICs9IHBtLm8gc2xlZXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCmluZGV4IDA3MDM0NWUuLjUwNzk4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTM1MCw2ICszNTAsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGgyX2kyY19ib2FyZF9pbmZvW10gPSB7CiAJeworCQlJMkNfQk9BUkRfSU5GTygidHBzNjUwMTAiLCAweDQ4KSwKKwkJLnR5cGUgICAgICAgICAgID0gInRwczY1MDEwIiwKKwkJLmlycSAgICAgICAgICAgID0gT01BUF9HUElPX0lSUSg1OCksCisJfSwgewogCQlJMkNfQk9BUkRfSU5GTygiaXNwMTMwMV9vbWFwIiwgMHgyZCksCiAJCS50eXBlCQk9ICJpc3AxMzAxX29tYXAiLAogCQkuaXJxCQk9IE9NQVBfR1BJT19JUlEoMiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggNmZjNTE2OC4uYzNlZjFlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHBzNjUwMTAuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNTEsNiArNTIsOCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL21jYnNwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvb21hcC1hbHNhLmg+CiAKKyNkZWZpbmUgSDNfVFNfR1BJTwk0OAorCiBzdGF0aWMgaW50IGgzX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCiAJS0VZKDAsIDEsIEtFWV9SSUdIVCksCkBAIC0zNzMsNiArMzc2LDE3IEBACiAJLmlkCQk9IC0xLAogfTsKIAorc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBoM19zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkubW9kYWxpYXMJPSAidHNjMjEwMSIsCisJCS5idXNfbnVtCT0gMiwKKwkJLmNoaXBfc2VsZWN0CT0gMCwKKwkJLmlycQkJPSBPTUFQX0dQSU9fSVJRKEgzX1RTX0dQSU8pLAorCQkubWF4X3NwZWVkX2h6CT0gMTYwMDAwMDAsCisJCS8qIC5wbGF0Zm9ybV9kYXRhCT0gJnRzY19wbGF0Zm9ybV9kYXRhLCAqLworCX0sCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyBtY2JzcF9yZWdzID0gewogCS5zcGNyMiA9IEZSRUUgfCBGUlNUIHwgR1JTVCB8IFhSU1QgfCBYSU5UTSgzKSwKIAkuc3BjcjEgPSBSSU5UTSgzKSB8IFJSU1QsCkBAIC00NTcsNiArNDcxLDE0IEBACiAJeyBPTUFQX1RBR19MQ0QsCQkmaDNfbGNkX2NvbmZpZyB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGgzX2kyY19ib2FyZF9pbmZvW10gPSB7CisgICAgICAgeworICAgICAgICAgICAgICAgSTJDX0JPQVJEX0lORk8oInRwczY1MDEwIiwgMHg0OCksCisgICAgICAgICAgICAgICAudHlwZSAgICAgICAgICAgPSAidHBzNjUwMTMiLAorICAgICAgICAgICAgICAgLyogLmlycSAgICAgICAgID0gT01BUF9HUElPX0lSUSg/PyksICovCisgICAgICAgfSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ncGlvX3N3aXRjaCBoM19ncGlvX3N3aXRjaGVzW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS5uYW1lCQkJPSAibW1jX3Nsb3QiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggNTI3OWUzNS4uNGY5YmFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CkBAIC0xODMsMTEgKzE4NCw4MCBAQAogCSZvc2s1OTEyX21jYnNwMV9kZXZpY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHRwc19sZWRzW10gPSB7CisJLyogTk9URTogIEQ5IGFuZCBEMiBoYXZlIGhhcmR3YXJlIGJsaW5rIHN1cHBvcnQuCisJICogQWxzbywgRDkgcmVxdWlyZXMgbm9uLWJhdHRlcnkgcG93ZXIuCisJICovCisJeyAuZ3BpbyA9IE9TS19UUFNfR1BJT19MRURfRDksIC5uYW1lID0gImQ5IiwgfSwKKwl7IC5ncGlvID0gT1NLX1RQU19HUElPX0xFRF9EMiwgLm5hbWUgPSAiZDIiLCB9LAorCXsgLmdwaW8gPSBPU0tfVFBTX0dQSU9fTEVEX0QzLCAubmFtZSA9ICJkMyIsIC5hY3RpdmVfbG93ID0gMSwKKwkJCS5kZWZhdWx0X3RyaWdnZXIgPSAiaGVhcnRiZWF0IiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSB0cHNfbGVkc19kYXRhID0geworCS5udW1fbGVkcwk9IDMsCisJLmxlZHMJCT0gdHBzX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2s1OTEyX3Rwc19sZWRzID0geworCS5uYW1lCQkJPSAibGVkcy1ncGlvIiwKKwkuaWQJCQk9IDAsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnRwc19sZWRzX2RhdGEsCit9OworCitzdGF0aWMgaW50IG9za190cHNfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdm9pZCAqY29udGV4dCkKK3sKKwkvKiBTZXQgR1BJTyAxIEhJR0ggdG8gZGlzYWJsZSBWQlVTIHBvd2VyIHN1cHBseTsKKwkgKiBPSENJIGRyaXZlciBwb3dlcnMgaXQgdXAvZG93biBhcyBuZWVkZWQuCisJICovCisJZ3Bpb19yZXF1ZXN0KE9TS19UUFNfR1BJT19VU0JfUFdSX0VOLCAibl92YnVzX2VuIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9TS19UUFNfR1BJT19VU0JfUFdSX0VOLCAxKTsKKworCS8qIFNldCBHUElPIDIgaGlnaCBzbyBMRUQgRDMgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKwl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzIsIEhJR0gpOworCisJLyogU2V0IEdQSU8gMyBsb3cgdG8gdGFrZSBldGhlcm5ldCBvdXQgb2YgcmVzZXQgKi8KKwlncGlvX3JlcXVlc3QoT1NLX1RQU19HUElPX0xBTl9SRVNFVCwgInNtY19yZXNldCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChPU0tfVFBTX0dQSU9fTEFOX1JFU0VULCAwKTsKKworCS8qIEdQSU80IGlzIFZERF9EU1AgKi8KKwlncGlvX3JlcXVlc3QoT1NLX1RQU19HUElPX0RTUF9QV1JfRU4sICJkc3BfcG93ZXIiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1NLX1RQU19HUElPX0RTUF9QV1JfRU4sIDEpOworCS8qIFJFVklTSVQgaWYgRFNQIHN1cHBvcnQgaXNuJ3QgY29uZmlndXJlZCwgcG93ZXIgaXQgb2ZmIC4uLiAqLworCisJLyogTGV0IExFRDEgKEQ5KSBibGluazsgbGVkcy1ncGlvIG1heSBvdmVycmlkZSBpdCAqLworCXRwczY1MDEwX3NldF9sZWQoTEVEMSwgQkxJTkspOworCisJLyogU2V0IExFRDIgb2ZmIGJ5IGRlZmF1bHQgKi8KKwl0cHM2NTAxMF9zZXRfbGVkKExFRDIsIE9GRik7CisKKwkvKiBFbmFibGUgTE9XX1BXUiBoYW5kc2hha2UgKi8KKwl0cHM2NTAxMF9zZXRfbG93X3B3cihPTik7CisKKwkvKiBTd2l0Y2ggVkxETzIgdG8gMy4wViBmb3IgQUlDMjMgKi8KKwl0cHM2NTAxMF9jb25maWdfdnJlZ3MxKFRQU19MRE8yX0VOQUJMRSB8IFRQU19WTERPMl8zXzBWCisJCQl8IFRQU19MRE8xX0VOQUJMRSk7CisKKwkvKiByZWdpc3RlciB0aGVzZSB0aHJlZSBMRURzICovCisJb3NrNTkxMl90cHNfbGVkcy5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3NrNTkxMl90cHNfbGVkcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0cHM2NTAxMF9ib2FyZCB0cHNfYm9hcmQgPSB7CisJLmJhc2UJCT0gT1NLX1RQU19HUElPX0JBU0UsCisJLm91dG1hc2sJPSAweDBmLAorCS5zZXR1cAkJPSBvc2tfdHBzX3NldHVwLAorfTsKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG9za19pMmNfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oInRwczY1MDEwIiwgMHg0OCksCiAJCS50eXBlCQk9ICJ0cHM2NTAxMCIsCiAJCS5pcnEJCT0gT01BUF9HUElPX0lSUShPTUFQX01QVUlPKDEpKSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdHBzX2JvYXJkLAorCiAJfSwKIAkvKiBUT0RPIHdoZW4gZHJpdmVyIHN1cHBvcnQgaXMgcmVhZHk6CiAJICogIC0gYWljMjMgYXVkaW8gY2hpcCBhdCAweDFhCkBAIC0xOTgsNyArMjY4LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9za19pbml0X3NtYzkxeCh2b2lkKQogewotCWlmICgob21hcF9yZXF1ZXN0X2dwaW8oMCkpIDwgMCkgeworCWlmICgoZ3Bpb19yZXF1ZXN0KDAsICJzbWNfaXJxIikpIDwgMCkgewogCQlwcmludGsoIkVycm9yIHJlcXVlc3RpbmcgZ3BpbyAwIGZvciBzbWM5MXggaXJxXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTIxMCw3ICsyODAsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9za19pbml0X2NmKHZvaWQpCiB7CiAJb21hcF9jZmdfcmVnKE03XzE2MTBfR1BJTzYyKTsKLQlpZiAoKG9tYXBfcmVxdWVzdF9ncGlvKDYyKSkgPCAwKSB7CisJaWYgKChncGlvX3JlcXVlc3QoNjIsICJjZl9pcnEiKSkgPCAwKSB7CiAJCXByaW50aygiRXJyb3IgcmVxdWVzdGluZyBncGlvIDYyIGZvciBDRiBpcnFcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMzM0LDcgKzQwNCw3IEBACiAKIHN0YXRpYyBpbnQgbWlzdHJhbF9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQogewotCXJldHVybiAhb21hcF9nZXRfZ3Bpb19kYXRhaW4oNCk7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZSg0KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgbWlzdHJhbF90c19pbmZvID0gewpAQCAtMzk2LDI1ICs0NjYsMzEgQEAKIAlvbWFwX2NmZ19yZWcoVzE0XzE2MTBfQ0NQX0RBVEFQKTsKIAogCS8qIENBTV9QV0ROICovCi0JaWYgKG9tYXBfcmVxdWVzdF9ncGlvKDExKSA9PSAwKSB7CisJaWYgKGdwaW9fcmVxdWVzdCgxMSwgImNhbV9wd2RuIikgPT0gMCkgewogCQlvbWFwX2NmZ19yZWcoTjIwXzE2MTBfR1BJTzExKTsKLQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oMTEsIDAgLyogb3V0ICovKTsKLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDExLCAwIC8qIG9mZiAqLyk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxMSwgMCk7CiAJfSBlbHNlCiAJCXByX2RlYnVnKCJPU0srTWlzdHJhbDogQ0FNX1BXRE4gaXMgYXdvbFxuIik7CiAKIAogCS8qIG9tYXBfY2ZnX3JlZyhQMTlfMTYxMF9HUElPNik7ICovCS8qIEJVU1kgKi8KKwlncGlvX3JlcXVlc3QoNiwgInRzX2J1c3kiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dCg2KTsKKwogCW9tYXBfY2ZnX3JlZyhQMjBfMTYxMF9HUElPNCk7CS8qIFBFTklSUSAqLworCWdwaW9fcmVxdWVzdCg0LCAidHNfaW50Iik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoNCk7CiAJc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoNCksIElSUVRfRkFMTElORyk7CisKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhtaXN0cmFsX2JvYXJkaW5mbywKIAkJCUFSUkFZX1NJWkUobWlzdHJhbF9ib2FyZGluZm8pKTsKIAogCS8qIHRoZSBzaWRld2F5cyBidXR0b24gKFNXMSkgaXMgZm9yIHVzZSBhcyBhICJ3YWtldXAiIGJ1dHRvbiAqLwogCW9tYXBfY2ZnX3JlZyhOMTVfMTYxMF9NUFVJTzIpOwotCWlmIChvbWFwX3JlcXVlc3RfZ3BpbyhPTUFQX01QVUlPKDIpKSA9PSAwKSB7CisJaWYgKGdwaW9fcmVxdWVzdChPTUFQX01QVUlPKDIpLCAid2FrZXVwIikgPT0gMCkgewogCQlpbnQgcmV0ID0gMDsKLQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oT01BUF9NUFVJTygyKSwgMSk7CisKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoT01BUF9NUFVJTygyKSk7CiAJCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKE9NQVBfTVBVSU8oMikpLCBJUlFUX1JJU0lORyk7CiAjaWZkZWYJQ09ORklHX1BNCiAJCS8qIHNoYXJlIHRoZSBJUlEgaW4gY2FzZSBzb21lb25lIHdhbnRzIHRvIHVzZSB0aGUKQEAgLTQyNSw3ICs1MDEsNyBAQAogCQkJCUlSUUZfU0hBUkVELCAibWlzdHJhbF93YWtldXAiLAogCQkJCSZvc2tfbWlzdHJhbF93YWtlX2ludGVycnVwdCk7CiAJCWlmIChyZXQgIT0gMCkgewotCQkJb21hcF9mcmVlX2dwaW8oT01BUF9NUFVJTygyKSk7CisJCQlncGlvX2ZyZWUoT01BUF9NUFVJTygyKSk7CiAJCQlwcmludGsoS0VSTl9FUlIgIk9TSytNaXN0cmFsOiBubyB3YWtldXAgaXJxLCAlZD9cbiIsCiAJCQkJcmV0KTsKIAkJfSBlbHNlCkBAIC00MzgsMTAgKzUxNCw4IEBACiAJICogYm9hcmQsIGxpa2UgdGhlIHRvdWNoc2NyZWVuLCBFRVBST00sIGFuZCB3YWtldXAgKCEpIHN3aXRjaC4KIAkgKi8KIAlvbWFwX2NmZ19yZWcoUFdMKTsKLQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oMikgPT0gMCkgewotCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigyLCAwIC8qIG91dCAqLyk7Ci0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgyLCAxIC8qIG9uICovKTsKLQl9CisJaWYgKGdwaW9fcmVxdWVzdCgyLCAibGNkX3B3ciIpID09IDApCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dCgyLCAxKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG1pc3RyYWxfZGV2aWNlcywgQVJSQVlfU0laRShtaXN0cmFsX2RldmljZXMpKTsKIH0KQEAgLTQ4NCw0NCArNTU4LDYgQEAKIAlvbWFwMV9tYXBfY29tbW9uX2lvKCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfVFBTNjUwMTAKLXN0YXRpYyBpbnQgX19pbml0IG9za190cHNfaW5pdCh2b2lkKQotewotCWlmICghbWFjaGluZV9pc19vbWFwX29zaygpKQotCQlyZXR1cm4gMDsKLQotCS8qIExldCBMRUQxIChEOSkgYmxpbmsgKi8KLQl0cHM2NTAxMF9zZXRfbGVkKExFRDEsIEJMSU5LKTsKLQotCS8qIERpc2FibGUgTEVEIDIgKEQyKSAqLwotCXRwczY1MDEwX3NldF9sZWQoTEVEMiwgT0ZGKTsKLQotCS8qIFNldCBHUElPIDEgSElHSCB0byBkaXNhYmxlIFZCVVMgcG93ZXIgc3VwcGx5OwotCSAqIE9IQ0kgZHJpdmVyIHBvd2VycyBpdCB1cC9kb3duIGFzIG5lZWRlZC4KLQkgKi8KLQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzEsIEhJR0gpOwotCi0JLyogU2V0IEdQSU8gMiBsb3cgdG8gdHVybiBvbiBMRUQgRDMgKi8KLQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzIsIEhJR0gpOwotCi0JLyogU2V0IEdQSU8gMyBsb3cgdG8gdGFrZSBldGhlcm5ldCBvdXQgb2YgcmVzZXQgKi8KLQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzMsIExPVyk7Ci0KLQkvKiBncGlvNCBmb3IgVkREX0RTUCAqLwotCS8qIEZJWE1FIHNlbmQgcG93ZXIgdG8gRFNQIGlmZiBpdCdzIGNvbmZpZ3VyZWQgKi8KLQotCS8qIEVuYWJsZSBMT1dfUFdSICovCi0JdHBzNjUwMTBfc2V0X2xvd19wd3IoT04pOwotCi0JLyogU3dpdGNoIFZMRE8yIHRvIDMuMFYgZm9yIEFJQzIzICovCi0JdHBzNjUwMTBfY29uZmlnX3ZyZWdzMShUUFNfTERPMl9FTkFCTEUgfCBUUFNfVkxETzJfM18wVgotCQkJfCBUUFNfTERPMV9FTkFCTEUpOwotCi0JcmV0dXJuIDA7Ci19Ci1mc19pbml0Y2FsbChvc2tfdHBzX2luaXQpOwotI2VuZGlmCi0KIE1BQ0hJTkVfU1RBUlQoT01BUF9PU0ssICJUSS1PU0siKQogCS8qIE1haW50YWluZXI6IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPiAqLwogCS5waHlzX2lvCT0gMHhmZmYwMDAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IDFjN2YwOWEuLmU0NzNmYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtNjEsNiArNjEsNyBAQAogCWRhdGFbMF0gPSByZWdvZmZzZXQ7CS8qIHJlZ2lzdGVyIG51bSAqLwogCWRhdGFbMV0gPSB2YWx1ZTsJCS8qIHJlZ2lzdGVyIGRhdGEgKi8KIAllcnIgPSBpMmNfdHJhbnNmZXIoYWRhcCwgbXNnLCAxKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiAJaWYgKGVyciA+PSAwKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gZXJyOwpAQCAtOTEsNiArOTIsNyBAQAogCW1zZy0+YnVmID0gZGF0YTsKIAllcnIgPSBpMmNfdHJhbnNmZXIoYWRhcCwgbXNnLCAxKTsKIAkqdmFsdWUgPSBkYXRhWzBdOworCWkyY19wdXRfYWRhcHRlcihhZGFwKTsKIAogCWlmIChlcnIgPj0gMCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtb3NrLmMKaW5kZXggMDI2Njg1ZS4uNzU0MzgzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1vc2suYwpAQCAtMSwxMSArMSw5IEBACiAvKgogICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLW9zay5jCiAgKgotICogTEVEIGRyaXZlciBmb3IgT1NLLCBhbmQgb3B0aW9uYWxseSBNaXN0cmFsIFFWR0EsIGJvYXJkcworICogTEVEIGRyaXZlciBmb3IgT1NLIHdpdGggb3B0aW9uYWwgTWlzdHJhbCBRVkdBIGJvYXJkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3RwczY1MDEwLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbGVkcy5oPgpAQCAtMjAsNDkgKzE4LDExIEBACiAjZGVmaW5lIExFRF9TVEFURV9DTEFJTUVECSgxIDw8IDEpCiBzdGF0aWMgdTggbGVkX3N0YXRlOwogCi0jZGVmaW5lCUdSRUVOX0xFRAkJKDEgPDwgMCkJLyogVFBTNjUwMTAgTEVEMSAqLwotI2RlZmluZQlBTUJFUl9MRUQJCSgxIDw8IDEpCS8qIFRQUzY1MDEwIExFRDIgKi8KLSNkZWZpbmUJUkVEX0xFRAkJCSgxIDw8IDIpCS8qIFRQUzY1MDEwIEdQSU8yICovCiAjZGVmaW5lCVRJTUVSX0xFRAkJKDEgPDwgMykJLyogTWlzdHJhbCBib2FyZCAqLwogI2RlZmluZQlJRExFX0xFRAkJKDEgPDwgNCkJLyogTWlzdHJhbCBib2FyZCAqLwogc3RhdGljIHU4IGh3X2xlZF9zdGF0ZTsKIAogCi0vKiBUUFM2NTAxMCBsZWRzIGFyZSBjaGFuZ2VkIHVzaW5nIGkyYyAtLSBmcm9tIGEgdGFzayBjb250ZXh0LgotICogVXNpbmcgb25lIG9mIHRoZXNlIGZvciB0aGUgImlkbGUiIExFRCB3b3VsZCBiZSBpbXByYWN0aWNhbC4uLgotICovCi0jZGVmaW5lCVRQU19MRURTCShHUkVFTl9MRUQgfCBSRURfTEVEIHwgQU1CRVJfTEVEKQotCi1zdGF0aWMgdTggdHBzX2xlZHNfY2hhbmdlOwotCi1zdGF0aWMgdm9pZCB0cHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKLXsKLQlmb3IgKDs7KSB7Ci0JCXU4CWxlZHM7Ci0KLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJbGVkcyA9IHRwc19sZWRzX2NoYW5nZTsKLQkJdHBzX2xlZHNfY2hhbmdlID0gMDsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JCWlmICghbGVkcykKLQkJCWJyZWFrOwotCi0JCS8qIGNhcmVmdWw6ICB0aGUgc2V0X2xlZCgpIHZhbHVlIGlzIG9uL29mZi9ibGluayAqLwotCQlpZiAobGVkcyAmIEdSRUVOX0xFRCkKLQkJCXRwczY1MDEwX3NldF9sZWQoTEVEMSwgISEoaHdfbGVkX3N0YXRlICYgR1JFRU5fTEVEKSk7Ci0JCWlmIChsZWRzICYgQU1CRVJfTEVEKQotCQkJdHBzNjUwMTBfc2V0X2xlZChMRUQyLCAhIShod19sZWRfc3RhdGUgJiBBTUJFUl9MRUQpKTsKLQotCQkvKiB0aGUgZ3BpbyBsZWQgZG9lc24ndCBoYXZlIHRoYXQgaXNzdWUgKi8KLQkJaWYgKGxlZHMgJiBSRURfTEVEKQotCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU8yLAotCQkJCQkhKGh3X2xlZF9zdGF0ZSAmIFJFRF9MRUQpKTsKLQl9Ci19Ci0KLXN0YXRpYyBERUNMQVJFX1dPUksod29yaywgdHBzX3dvcmspOwotCiAjaWZkZWYJQ09ORklHX09NQVBfT1NLX01JU1RSQUwKIAogLyogRm9yIG5vdywgYWxsIHN5c3RlbSBpbmRpY2F0b3JzIHJlcXVpcmUgdGhlIE1pc3RyYWwgYm9hcmQsIHNpbmNlIHRoYXQKQEAgLTExMiw3ICs3Miw2IEBACiAJY2FzZSBsZWRfc3RvcDoKIAkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKIAkJaHdfbGVkX3N0YXRlID0gMDsKLQkJLyogTk9URTogIHdvcmsgbWF5IHN0aWxsIGJlIHBlbmRpbmchISAqLwogCQlicmVhazsKIAogCWNhc2UgbGVkX2NsYWltOgpAQCAtMTQ1LDQ4ICsxMDQsMTEgQEAKIAogI2VuZGlmCS8qIENPTkZJR19PTUFQX09TS19NSVNUUkFMICovCiAKLQkvKiAiZ3JlZW4iID09IHRwcyBMRUQxIChsZWZ0bW9zdCwgbm9ybWFsbHkgcG93ZXItZ29vZCkKLQkgKiB3b3JrcyBvbmx5IHdpdGggREMgYWRhcHRlciwgbm90IG9uIGJhdHRlcnkgcG93ZXIhCi0JICovCi0JY2FzZSBsZWRfZ3JlZW5fb246Ci0JCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKLQkJCWh3X2xlZF9zdGF0ZSB8PSBHUkVFTl9MRUQ7Ci0JCWJyZWFrOwotCWNhc2UgbGVkX2dyZWVuX29mZjoKLQkJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9DTEFJTUVEKQotCQkJaHdfbGVkX3N0YXRlICY9IH5HUkVFTl9MRUQ7Ci0JCWJyZWFrOwotCi0JLyogImFtYmVyIiA9PSB0cHMgTEVEMiAobWlkZGxlKSAqLwotCWNhc2UgbGVkX2FtYmVyX29uOgotCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCi0JCQlod19sZWRfc3RhdGUgfD0gQU1CRVJfTEVEOwotCQlicmVhazsKLQljYXNlIGxlZF9hbWJlcl9vZmY6Ci0JCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKLQkJCWh3X2xlZF9zdGF0ZSAmPSB+QU1CRVJfTEVEOwotCQlicmVhazsKLQotCS8qICJyZWQiID09IExFRCBvbiB0cHMgZ3BpbzMgKHJpZ2h0bW9zdCkgKi8KLQljYXNlIGxlZF9yZWRfb246Ci0JCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKLQkJCWh3X2xlZF9zdGF0ZSB8PSBSRURfTEVEOwotCQlicmVhazsKLQljYXNlIGxlZF9yZWRfb2ZmOgotCQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCi0JCQlod19sZWRfc3RhdGUgJj0gflJFRF9MRUQ7Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCiAJbGVkcyBePSBod19sZWRfc3RhdGU7Ci0JbGVkcyAmPSBUUFNfTEVEUzsKLQlpZiAobGVkcyAmJiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpKSB7Ci0JCXRwc19sZWRzX2NoYW5nZSB8PSBsZWRzOwotCQlzY2hlZHVsZV93b3JrKCZ3b3JrKTsKLQl9CiAKIGRvbmU6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKaW5kZXggNTJjNzBlNS4uZTIwN2JmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCkBAIC0zLDkgKzMsOSBAQAogICoKICAqIE9NQVAxIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2lmZGVmIENPTkZJR19PTUFQX01VWAogCitzdGF0aWMgc3RydWN0IG9tYXBfbXV4X2NmZyBhcmNoX211eF9jZmc7CisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCi1zdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwNzMwX3BpbnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwNzMwX3BpbnNbXSA9IHsKIE1VWF9DRkdfNzMwKCJFMl83MzBfS0JSMCIsICAgICAgICAxMiwgICAyMSwgICAgMCwgICAyMCwgICAxLCAwKQogTVVYX0NGR183MzAoIko3XzczMF9LQlIxIiwgICAgICAgIDEyLCAgIDI1LCAgICAwLCAgIDI0LCAgIDEsIDApCiBNVVhfQ0ZHXzczMCgiRTFfNzMwX0tCUjIiLCAgICAgICAgMTIsICAgMjksICAgIDAsICAgMjgsICAgMSwgMCkKQEAgLTQ5LDEwICs1MSwxNCBAQAogTVVYX0NGR183MzAoIlcxNl83MzBfVVNCX1BVX0VOIiwgICAyLCAgIDI1LCAgICAwLCAgIDI0LCAgIDAsIDApCiBNVVhfQ0ZHXzczMCgiVzE3XzczMF9VU0JfVkJVU0kiLCAgIDIsICAgMjksICAgIDAsICAgMjgsICAgMCwgMCkKIH07Ci0jZW5kaWYKKyNkZWZpbmUgT01BUDczMF9QSU5TX1NaCQlBUlJBWV9TSVpFKG9tYXA3MzBfcGlucykKKyNlbHNlCisjZGVmaW5lIG9tYXA3MzBfcGlucwkJTlVMTAorI2RlZmluZSBPTUFQNzMwX1BJTlNfU1oJCTAKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQNzMwICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDF4eHhfcGluc1tdID0geworc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAxeHh4X3BpbnNbXSA9IHsKIC8qCiAgKgkgZGVzY3JpcHRpb24JCW11eCAgbW9kZSAgIG11eAkgcHVsbCBwdWxsICBwdWxsICBwdV9wZAkgcHUgIGRiZwogICoJCQkJcmVnICBvZmZzZXQgbW9kZSByZWcgIGJpdCAgIGVuYQkgIHJlZwpAQCAtMzA2LDIyICszMTIsMTM2IEBACiBNVVhfQ0ZHKCJXMTNfMTYxMF9DQ1BfQ0xLTSIsCSA5LCAgICAwLCAgICA2LCAgIDEsICAyOCwgICAxLCAgICAxLCAgICAgMCwgIDApCiBNVVhfQ0ZHKCJXMTRfMTYxMF9DQ1BfREFUQVAiLAkgOSwgICAyNCwgICAgNiwgICAyLCAgIDQsICAgMSwgICAgMiwgICAgIDAsICAwKQogTVVYX0NGRygiWTE0XzE2MTBfQ0NQX0RBVEFNIiwJIDksICAgMjEsICAgIDYsICAgMiwgICAzLCAgIDEsICAgIDIsICAgICAwLCAgMCkKLQogfTsKKyNkZWZpbmUgT01BUDFYWFhfUElOU19TWglBUlJBWV9TSVpFKG9tYXAxeHh4X3BpbnMpCisjZWxzZQorI2RlZmluZSBvbWFwMXh4eF9waW5zCQlOVUxMCisjZGVmaW5lIE9NQVAxWFhYX1BJTlNfU1oJMAogI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxNVhYIHx8IENPTkZJR19BUkNIX09NQVAxNlhYICovCiAKK2ludCBfX2luaXRfb3JfbW9kdWxlIG9tYXAxX2NmZ19yZWcoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZykKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJlZ19vcmlnID0gMCwgcmVnID0gMCwgcHVfcGRfb3JpZyA9IDAsIHB1X3BkID0gMCwKKwkJcHVsbF9vcmlnID0gMCwgcHVsbCA9IDA7CisJdW5zaWduZWQgaW50IG1hc2ssIHdhcm4gPSAwOworCisJLyogQ2hlY2sgdGhlIG11eCByZWdpc3RlciBpbiBxdWVzdGlvbiAqLworCWlmIChjZmctPm11eF9yZWcpIHsKKwkJdW5zaWduZWQJdG1wMSwgdG1wMjsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCQlyZWdfb3JpZyA9IG9tYXBfcmVhZGwoY2ZnLT5tdXhfcmVnKTsKKworCQkvKiBUaGUgbXV4IHJlZ2lzdGVycyBhbHdheXMgc2VlbSB0byBiZSAzIGJpdHMgbG9uZyAqLworCQltYXNrID0gKDB4NyA8PCBjZmctPm1hc2tfb2Zmc2V0KTsKKwkJdG1wMSA9IHJlZ19vcmlnICYgbWFzazsKKwkJcmVnID0gcmVnX29yaWcgJiB+bWFzazsKKworCQl0bXAyID0gKGNmZy0+bWFzayA8PCBjZmctPm1hc2tfb2Zmc2V0KTsKKwkJcmVnIHw9IHRtcDI7CisKKwkJaWYgKHRtcDEgIT0gdG1wMikKKwkJCXdhcm4gPSAxOworCisJCW9tYXBfd3JpdGVsKHJlZywgY2ZnLT5tdXhfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCX0KKworCS8qIENoZWNrIGZvciBwdWxsIHVwIG9yIHB1bGwgZG93biBzZWxlY3Rpb24gb24gMTYxMCAqLworCWlmICghY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJaWYgKGNmZy0+cHVfcGRfcmVnICYmIGNmZy0+cHVsbF92YWwpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CisJCQlwdV9wZF9vcmlnID0gb21hcF9yZWFkbChjZmctPnB1X3BkX3JlZyk7CisJCQltYXNrID0gMSA8PCBjZmctPnB1bGxfYml0OworCisJCQlpZiAoY2ZnLT5wdV9wZF92YWwpIHsKKwkJCQlpZiAoIShwdV9wZF9vcmlnICYgbWFzaykpCisJCQkJCXdhcm4gPSAxOworCQkJCS8qIFVzZSBwdWxsIHVwICovCisJCQkJcHVfcGQgPSBwdV9wZF9vcmlnIHwgbWFzazsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHB1X3BkX29yaWcgJiBtYXNrKQorCQkJCQl3YXJuID0gMTsKKwkJCQkvKiBVc2UgcHVsbCBkb3duICovCisJCQkJcHVfcGQgPSBwdV9wZF9vcmlnICYgfm1hc2s7CisJCQl9CisJCQlvbWFwX3dyaXRlbChwdV9wZCwgY2ZnLT5wdV9wZF9yZWcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCQl9CisJfQorCisJLyogQ2hlY2sgZm9yIGFuIGFzc29jaWF0ZWQgcHVsbCBkb3duIHJlZ2lzdGVyICovCisJaWYgKGNmZy0+cHVsbF9yZWcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKKwkJcHVsbF9vcmlnID0gb21hcF9yZWFkbChjZmctPnB1bGxfcmVnKTsKKwkJbWFzayA9IDEgPDwgY2ZnLT5wdWxsX2JpdDsKKworCQlpZiAoY2ZnLT5wdWxsX3ZhbCkgeworCQkJaWYgKHB1bGxfb3JpZyAmIG1hc2spCisJCQkJd2FybiA9IDE7CisJCQkvKiBMb3cgYml0ID0gcHVsbCBlbmFibGVkICovCisJCQlwdWxsID0gcHVsbF9vcmlnICYgfm1hc2s7CisJCX0gZWxzZSB7CisJCQlpZiAoIShwdWxsX29yaWcgJiBtYXNrKSkKKwkJCQl3YXJuID0gMTsKKwkJCS8qIEhpZ2ggYml0ID0gcHVsbCBkaXNhYmxlZCAqLworCQkJcHVsbCA9IHB1bGxfb3JpZyB8IG1hc2s7CisJCX0KKworCQlvbWFwX3dyaXRlbChwdWxsLCBjZmctPnB1bGxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCX0KKworCWlmICh3YXJuKSB7CisjaWZkZWYgQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1VWDogaW5pdGlhbGl6ZWQgJXNcbiIsIGNmZy0+bmFtZSk7CisjZW5kaWYKKwl9CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVhfREVCVUcKKwlpZiAoY2ZnLT5kZWJ1ZyB8fCB3YXJuKSB7CisJCXByaW50aygiTVVYOiBTZXR0aW5nIHJlZ2lzdGVyICVzXG4iLCBjZmctPm5hbWUpOworCQlwcmludGsoIiAgICAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKKwkJICAgICAgIGNmZy0+bXV4X3JlZ19uYW1lLCBjZmctPm11eF9yZWcsIHJlZ19vcmlnLCByZWcpOworCisJCWlmICghY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJCWlmIChjZmctPnB1X3BkX3JlZyAmJiBjZmctPnB1bGxfdmFsKSB7CisJCQkJcHJpbnRrKCIgICAgICAlcyAoMHglMDh4KSA9IDB4JTA4eCAtPiAweCUwOHhcbiIsCisJCQkJICAgICAgIGNmZy0+cHVfcGRfbmFtZSwgY2ZnLT5wdV9wZF9yZWcsCisJCQkJICAgICAgIHB1X3BkX29yaWcsIHB1X3BkKTsKKwkJCX0KKwkJfQorCisJCWlmIChjZmctPnB1bGxfcmVnKQorCQkJcHJpbnRrKCIgICAgICAlcyAoMHglMDh4KSA9IDB4JTA4eCAtPiAweCUwOHhcbiIsCisJCQkgICAgICAgY2ZnLT5wdWxsX25hbWUsIGNmZy0+cHVsbF9yZWcsIHB1bGxfb3JpZywgcHVsbCk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVhfRVJST1JTCisJcmV0dXJuIHdhcm4gPyAtRVRYVEJTWSA6IDA7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKIGludCBfX2luaXQgb21hcDFfbXV4X2luaXQodm9pZCkKIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlhcmNoX211eF9jZmcucGlucwk9IG9tYXA3MzBfcGluczsKKwkJYXJjaF9tdXhfY2ZnLnNpemUJPSBPTUFQNzMwX1BJTlNfU1o7CisJCWFyY2hfbXV4X2NmZy5jZmdfcmVnCT0gb21hcDFfY2ZnX3JlZzsKKwl9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCi0Jb21hcF9tdXhfcmVnaXN0ZXIob21hcDczMF9waW5zLCBBUlJBWV9TSVpFKG9tYXA3MzBfcGlucykpOwotI2VuZGlmCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCWFyY2hfbXV4X2NmZy5waW5zCT0gb21hcDF4eHhfcGluczsKKwkJYXJjaF9tdXhfY2ZnLnNpemUJPSBPTUFQMVhYWF9QSU5TX1NaOworCQlhcmNoX211eF9jZmcuY2ZnX3JlZwk9IG9tYXAxX2NmZ19yZWc7CisJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKLQlvbWFwX211eF9yZWdpc3RlcihvbWFwMXh4eF9waW5zLCBBUlJBWV9TSVpFKG9tYXAxeHh4X3BpbnMpKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9tYXBfbXV4X3JlZ2lzdGVyKCZhcmNoX211eF9jZmcpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYwppbmRleCA4ZWI1ZGNkLi5lNmM2NGUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCkBAIC03MTcsNyArNzE3LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCi0JZXJyb3IgPSBzeXNmc19jcmVhdGVfZmlsZShwb3dlcl9rb2JqLCAmc2xlZXBfd2hpbGVfaWRsZV9hdHRyKTsKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9maWxlKHBvd2VyX2tvYmosICZzbGVlcF93aGlsZV9pZGxlX2F0dHIuYXR0cik7CiAJaWYgKGVycm9yKQogCQlwcmludGsoS0VSTl9FUlIgInN5c2ZzX2NyZWF0ZV9maWxlIGZhaWxlZDogJWRcbiIsIGVycm9yKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwppbmRleCAyMzc2NTFlLi41ZDJiMjcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwpAQCAtNTYsMzcgKzU2LDYgQEAKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfQkFTRQkJT01BUF9NUFVfVElNRVIxX0JBU0UKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfT0ZGU0VUCQkweDEwMAogCi0vKiBjeWNsZXMgdG8gbnNlYyBjb252ZXJzaW9ucyB0YWtlbiBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jLAotICogY29udmVydGVkIHRvIHVzZSBrSHogYnkgS2V2aW4gSGlsbWFuICovCi0vKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKLSAqICBiYXNpYyBlcXVhdGlvbjoKLSAqCQlucyA9IGN5Y2xlcyAvIChmcmVxIC8gbnNfcGVyX3NlYykKLSAqCQlucyA9IGN5Y2xlcyAqIChuc19wZXJfc2VjIC8gZnJlcSkKLSAqCQlucyA9IGN5Y2xlcyAqICgxMF45IC8gKGNwdV9raHogKiAxMF4zKSkKLSAqCQlucyA9IGN5Y2xlcyAqICgxMF42IC8gY3B1X2toeikKLSAqCi0gKglUaGVuIHdlIHVzZSBzY2FsaW5nIG1hdGggKHN1Z2dlc3RlZCBieSBnZW9yZ2UgYXQgbXZpc3RhLmNvbSkgdG8gZ2V0OgotICoJCW5zID0gY3ljbGVzICogKDEwXjYgKiBTQyAvIGNwdV9raHogLyBTQwotICoJCW5zID0gY3ljbGVzICogY3ljMm5zX3NjYWxlIC8gU0MKLSAqCi0gKglBbmQgc2luY2UgU0MgaXMgYSBjb25zdGFudCBwb3dlciBvZiB0d28sIHdlIGNhbiBjb252ZXJ0IHRoZSBkaXYKLSAqICBpbnRvIGEgc2hpZnQuCi0gKgkJCS1qb2huc3R1bCBhdCB1cy5pYm0uY29tICJtYXRoIGlzIGhhcmQsIGxldHMgZ28gc2hvcHBpbmchIgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjeWMybnNfc2NhbGU7Ci0jZGVmaW5lIENZQzJOU19TQ0FMRV9GQUNUT1IgMTAgLyogMl4xMCwgY2FyZWZ1bGx5IGNob3NlbiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2N5YzJuc19zY2FsZSh1bnNpZ25lZCBsb25nIGNwdV9raHopCi17Ci0JY3ljMm5zX3NjYWxlID0gKDEwMDAwMDAgPDwgQ1lDMk5TX1NDQUxFX0ZBQ1RPUikvY3B1X2toejsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzXzJfbnModW5zaWduZWQgbG9uZyBsb25nIGN5YykKLXsKLQlyZXR1cm4gKGN5YyAqIGN5YzJuc19zY2FsZSkgPj4gQ1lDMk5TX1NDQUxFX0ZBQ1RPUjsKLX0KLQotCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTMyIGNudGw7CQkJLyogQ05UTF9USU1FUiwgUi9XICovCiAJdTMyIGxvYWRfdGltOwkJCS8qIExPQURfVElNLCAgIFcgKi8KQEAgLTEzMiwxMyArMTAxLDIwIEBACiAJdGltZXItPmNudGwgPSB0aW1lcmZsYWdzOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tcHVfdGltZXJfc3RvcChpbnQgbnIpCit7CisJdm9sYXRpbGUgb21hcF9tcHVfdGltZXJfcmVnc190KiB0aW1lciA9IG9tYXBfbXB1X3RpbWVyX2Jhc2UobnIpOworCisJdGltZXItPmNudGwgJj0gfk1QVV9USU1FUl9TVDsKK30KKwogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTVBVIHRpbWVyIDEgLi4uIGNvdW50IGRvd24gdG8gemVybywgaW50ZXJydXB0LCByZWxvYWQKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgaW50IG9tYXBfbXB1X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgY3ljbGVzLAotCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCisJCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQogewogCW9tYXBfbXB1X3RpbWVyX3N0YXJ0KDAsIGN5Y2xlcywgMCk7CiAJcmV0dXJuIDA7CkBAIC0xNTIsNiArMTI4LDcgQEAKIAkJb21hcF9tcHVfc2V0X2F1dG9yZXNldCgwKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlvbWFwX21wdV90aW1lcl9zdG9wKDApOwogCQlvbWFwX21wdV9yZW1vdmVfYXV0b3Jlc2V0KDApOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKQEAgLTE2Myw3ICsxNDAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja2V2ZW50X21wdV90aW1lcjEgPSB7CiAJLm5hbWUJCT0gIm1wdV90aW1lcjEiLAotCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKIAkuc2hpZnQJCT0gMzIsCiAJLnNldF9uZXh0X2V2ZW50CT0gb21hcF9tcHVfc2V0X25leHRfZXZlbnQsCiAJLnNldF9tb2RlCT0gb21hcF9tcHVfc2V0X21vZGUsCkBAIC0xODYsOCArMTYzLDYgQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIG9tYXBfaW5pdF9tcHVfdGltZXIodW5zaWduZWQgbG9uZyByYXRlKQogewotCXNldF9jeWMybnNfc2NhbGUocmF0ZSAvIDEwMDApOwotCiAJc2V0dXBfaXJxKElOVF9USU1FUjEsICZvbWFwX21wdV90aW1lcjFfaXJxKTsKIAlvbWFwX21wdV90aW1lcl9zdGFydCgwLCAocmF0ZSAvIEhaKSAtIDEsIDEpOwogCkBAIC0yNTIsMjIgKzIyNyw2IEBACiAJCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX21wdS5uYW1lKTsKIH0KIAotCi0vKgotICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KLSAqLwotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0aWNrcyA9IDAgLSBvbWFwX21wdV90aW1lcl9yZWFkKDEpOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrczY0OwotCi0JdGlja3M2NCA9IG9tYXBfbXB1X3RpbWVyMl9vdmVyZmxvd3M7Ci0JdGlja3M2NCA8PD0gMzI7Ci0JdGlja3M2NCB8PSB0aWNrczsKLQotCXJldHVybiBjeWNsZXNfMl9ucyh0aWNrczY0KTsKLX0KLQogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGltZXIgaW5pdGlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJkYjgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jCisgKgorICogT01BUCAzMksgVGltZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXJ0aWFsIHRpbWVyIHJld3JpdGUgYW5kIGFkZGl0aW9uYWwgZHluYW1pYyB0aWNrIHRpbWVyIHN1cHBvcnQgYnkKKyAqIFRvbnkgTGluZGdlbiA8dG9ueUBhdG9taWRlLmNvbT4gYW5kCisgKiBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqIE9NQVAgRHVhbC1tb2RlIHRpbWVyIGZyYW1ld29yayBzdXBwb3J0IGJ5IFRpbW8gVGVyYXMKKyAqCisgKiBNUFUgdGltZXIgY29kZSBiYXNlZCBvbiB0aGUgb2xkZXIgTVBVIHRpbWVyIGNvZGUgZm9yIE9NQVAKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgorICogQXV0aG9yOiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbXRpbWVyLmg+CisKK3N0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMzJLSHogT1MgdGltZXIKKyAqCisgKiBUaGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IG9uIDE2eHgsIGFzIDE1MTAgZG9lcyBub3QgaGF2ZSB0aGUgY29udGludW91cworICogMzJLSHogc3luY2hyb25vdXMgdGltZXIuIFRoZSAzMktIeiBzeW5jaHJvbm91cyB0aW1lciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sKKyAqIG9mIHRpbWUgaW4gYWRkaXRpb24gdG8gdGhlIDMyS0h6IE9TIHRpbWVyLiBVc2luZyBvbmx5IHRoZSAzMktIeiBPUyB0aW1lcgorICogb24gMTUxMCB3b3VsZCBiZSBwb3NzaWJsZSwgYnV0IHRoZSB0aW1lciB3b3VsZCBub3QgYmUgYXMgYWNjdXJhdGUgYXMKKyAqIHdpdGggdGhlIDMyS0h6IHN5bmNocm9uaXplZCB0aW1lci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkweGZmZmJjNDEwCisjZWxzZQorI2Vycm9yIE9NQVAgMzJLSHogdGltZXIgZG9lcyBub3QgY3VycmVudGx5IHdvcmsgb24gMTVYWCEKKyNlbmRpZgorCisvKiAxNnh4IHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0JBU0UJCTB4ZmZmYjkwMDAKKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0NSCQkweDA4CisjZGVmaW5lIE9NQVAxXzMyS19USU1FUl9UVlIJCTB4MDAKKyNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX1RDUgkJMHgwNAorCisjZGVmaW5lIE9NQVBfMzJLX1RJQ0tTX1BFUl9TRUMJCSgzMjc2OCkKKworLyoKKyAqIFRSTSBzYXlzIDEgLyBIWiA9ICggVFZSICsgMSkgLyAzMjc2OCwgc28gVFJWID0gKDMyNzY4IC8gSFopIC0gMQorICogc28gd2l0aCBIWiA9IDEyOCwgVFZSID0gMjU1LgorICovCisjZGVmaW5lIE9NQVBfMzJLX1RJTUVSX1RJQ0tfUEVSSU9ECSgoT01BUF8zMktfVElDS1NfUEVSX1NFQyAvIEhaKSAtIDEpCisKKyNkZWZpbmUgSklGRklFU19UT19IV19USUNLUyhucl9qaWZmaWVzLCBjbG9ja19yYXRlKQkJCVwKKwkJCQkoKChucl9qaWZmaWVzKSAqIChjbG9ja19yYXRlKSkgLyBIWikKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3dyaXRlKGludCB2YWwsIGludCByZWcpCit7CisJb21hcF93cml0ZXcodmFsLCBPTUFQMV8zMktfVElNRVJfQkFTRSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvbWFwXzMya190aW1lcl9yZWFkKGludCByZWcpCit7CisJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpICYgMHhmZmZmZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQoreworCWlmICghbG9hZF92YWwpCisJCWxvYWRfdmFsID0gMTsKKwlvbWFwXzMya190aW1lcl93cml0ZShsb2FkX3ZhbCwgT01BUDFfMzJLX1RJTUVSX1RWUik7CisJb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwZiwgT01BUDFfMzJLX1RJTUVSX0NSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKK3sKKwlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVAxXzMyS19USU1FUl9DUik7Cit9CisKKyNkZWZpbmUgb21hcF8zMmtfdGltZXJfYWNrX2lycSgpCisKK3N0YXRpYyBpbnQgb21hcF8zMmtfdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQkJIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKKwlvbWFwXzMya190aW1lcl9zdGFydChkZWx0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcF8zMmtfdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlvbWFwXzMya190aW1lcl9zdG9wKCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlvbWFwXzMya190aW1lcl9zdGFydChPTUFQXzMyS19USU1FUl9USUNLX1BFUklPRCk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja2V2ZW50XzMya190aW1lciA9IHsKKwkubmFtZQkJPSAiMzJrLXRpbWVyIiwKKwkuZmVhdHVyZXMgICAgICAgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNoaWZ0CQk9IDMyLAorCS5zZXRfbmV4dF9ldmVudAk9IG9tYXBfMzJrX3RpbWVyX3NldF9uZXh0X2V2ZW50LAorCS5zZXRfbW9kZQk9IG9tYXBfMzJrX3RpbWVyX3NldF9tb2RlLAorfTsKKworLyoKKyAqIFRoZSAzMktIeiBzeW5jaHJvbml6ZWQgdGltZXIgaXMgYW4gYWRkaXRpb25hbCB0aW1lciBvbiAxNnh4LgorICogSXQgaXMgYWx3YXlzIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQodm9pZCkKK3sKKwlyZXR1cm4gb21hcF9yZWFkbChUSU1FUl8zMktfU1lOQ0hST05JWkVEKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmNsb2NrZXZlbnRfMzJrX3RpbWVyOworCW9tYXBfMzJrX3RpbWVyX2Fja19pcnEoKTsKKworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwXzMya190aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIjMyS0h6IHRpbWVyIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCit9OworCitzdGF0aWMgX19pbml0IHZvaWQgb21hcF9pbml0XzMya190aW1lcih2b2lkKQoreworCXNldHVwX2lycShJTlRfT1NfVElNRVIsICZvbWFwXzMya190aW1lcl9pcnEpOworCisJY2xvY2tldmVudF8zMmtfdGltZXIubXVsdCA9IGRpdl9zYyhPTUFQXzMyS19USUNLU19QRVJfU0VDLAorCQkJCQkgICBOU0VDX1BFUl9TRUMsCisJCQkJCSAgIGNsb2NrZXZlbnRfMzJrX3RpbWVyLnNoaWZ0KTsKKwljbG9ja2V2ZW50XzMya190aW1lci5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50XzMya190aW1lcik7CisJY2xvY2tldmVudF8zMmtfdGltZXIubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygxLCAmY2xvY2tldmVudF8zMmtfdGltZXIpOworCisJY2xvY2tldmVudF8zMmtfdGltZXIuY3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xvY2tldmVudF8zMmtfdGltZXIpOworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lciBpbml0aWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfT01BUF9ETV9USU1FUgorCW9tYXBfZG1fdGltZXJfaW5pdCgpOworI2VuZGlmCisJb21hcF9pbml0XzMya190aW1lcigpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXIgPSB7CisJLmluaXQJCT0gb21hcF90aW1lcl9pbml0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IGIwNWI3MzguLjJmZWI2ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMywxMyArMywxNSBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIG1lbW9yeS5vIHByY20ubyBjbG9jay5vIG11eC5vIGRldmljZXMubyBcCi0JIHNlcmlhbC5vIGdwbWMubwotCi1vYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lci1ncC5vCitvYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIG1lbW9yeS5vIGNvbnRyb2wubyBwcmNtLm8gY2xvY2subyBtdXgubyBcCisJCWRldmljZXMubyBzZXJpYWwubyBncG1jLm8gdGltZXItZ3AubwogCiAjIFBvd2VyIE1hbmFnZW1lbnQKLW9iai0kKENPTkZJR19QTSkgKz0gcG0ubyBwbS1kb21haW4ubyBzbGVlcC5vCitvYmotJChDT05GSUdfUE0pICs9IHBtLm8gc2xlZXAubworCisjIENsb2NrIGZyYW1ld29yaworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBjbG9jazI0eHgubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBjbG9jazM0eHgubwogCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX09NQVBfR0VORVJJQykJCSs9IGJvYXJkLWdlbmVyaWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwppbmRleCA2NDIzNWRlLi4xYzEyZDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3BtYy5oPgotI2luY2x1ZGUgInByY20tcmVncy5oIgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTEyNSwxNSArMTI0LDE4IEBACiAJaW50IGV0aF9jczsKIAl1bnNpZ25lZCBsb25nIGNzX21lbV9iYXNlOwogCXVuc2lnbmVkIGludCByYXRlOwotCXN0cnVjdCBjbGsgKmwzY2s7CisJc3RydWN0IGNsayAqZ3BtY19mY2s7CiAKIAlldGhfY3MgPSBTRFAyNDMwX1NNQzkxWF9DUzsKIAotCWwzY2sgPSBjbGtfZ2V0KE5VTEwsICJjb3JlX2wzX2NrIik7Ci0JaWYgKElTX0VSUihsM2NrKSkKLQkJcmF0ZSA9IDEwMDAwMDAwMDsKLQllbHNlCi0JCXJhdGUgPSBjbGtfZ2V0X3JhdGUobDNjayk7CisJZ3BtY19mY2sgPSBjbGtfZ2V0KE5VTEwsICJncG1jX2ZjayIpOwkvKiBBbHdheXMgb24gRU5BQkxFX09OX0lOSVQgKi8KKwlpZiAoSVNfRVJSKGdwbWNfZmNrKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJY2xrX2VuYWJsZShncG1jX2Zjayk7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShncG1jX2Zjayk7CiAKIAkvKiBNYWtlIHN1cmUgQ1MxIHRpbWluZ3MgYXJlIGNvcnJlY3QsIGZvciAyNDMwIGFsd2F5cyBtdXhlZCAqLwogCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUcxLCAweDAwMDExMjAwKTsKQEAgLTE2MCw3ICsxNjIsNyBAQAogCiAJaWYgKGdwbWNfY3NfcmVxdWVzdChldGhfY3MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUE1DIG1lbSBmb3Igc21jOTF4XG4iKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAlzZHAyNDMwX3NtYzkxeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MzAwOwpAQCAtMTcxLDEwICsxNzMsMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCiAJCQlPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKTsKIAkJZ3BtY19jc19mcmVlKGV0aF9jcyk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEsIDEpOwogCitvdXQ6CisJY2xrX2Rpc2FibGUoZ3BtY19mY2spOworCWNsa19wdXQoZ3BtY19mY2spOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8yNDMwc2RwX2luaXRfaXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCmluZGV4IDc4NDY1NTEuLmExZTFlNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzksNyArNDEsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3BtYy5oPgotI2luY2x1ZGUgInByY20tcmVncy5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbnRyb2wuaD4KIAogLyogTEVEICYgU3dpdGNoIG1hY3JvcyAqLwogI2RlZmluZSBMRUQwX0dQSU8xMwkJMTMKQEAgLTE4NywxNyArMTg5LDQ3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCisJdW5zaWduZWQgaW50IHJhdGU7CisJc3RydWN0IGNsayAqZ3BtY19mY2s7CisJaW50IGV0aF9jczsKKworCWdwbWNfZmNrID0gY2xrX2dldChOVUxMLCAiZ3BtY19mY2siKTsJLyogQWx3YXlzIG9uIEVOQUJMRV9PTl9JTklUICovCisJaWYgKElTX0VSUihncG1jX2ZjaykpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWNsa19lbmFibGUoZ3BtY19mY2spOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZ3BtY19mY2spOworCisJZXRoX2NzID0gQVBPTExPTl9FVEhfQ1M7CisKIAkvKiBNYWtlIHN1cmUgQ1MxIHRpbWluZ3MgYXJlIGNvcnJlY3QgKi8KLQlHUE1DX0NPTkZJRzFfMSA9IDB4MDAwMTEyMDM7Ci0JR1BNQ19DT05GSUcyXzEgPSAweDAwMWYxZjAxOwotCUdQTUNfQ09ORklHM18xID0gMHgwMDA4MDgwMzsKLQlHUE1DX0NPTkZJRzRfMSA9IDB4MWMwOTFjMDk7Ci0JR1BNQ19DT05GSUc1XzEgPSAweDA0MWYxZjFmOwotCUdQTUNfQ09ORklHNl8xID0gMHgwMDAwMDRjNDsKKwlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHMSwgMHgwMDAxMTIwMCk7CisKKwlpZiAocmF0ZSA+PSAxNjAwMDAwMDApIHsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzIsIDB4MDAxZjFmMDEpOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHMywgMHgwMDA4MDgwMyk7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUc0LCAweDFjMGIxYzBhKTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzUsIDB4MDQxZjFGMUYpOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHNiwgMHgwMDAwMDRDNCk7CisJfSBlbHNlIGlmIChyYXRlID49IDEzMDAwMDAwMCkgeworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHMiwgMHgwMDFmMWYwMCk7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUczLCAweDAwMDgwODAyKTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzQsIDB4MUMwOTFDMDkpOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHNSwgMHgwNDFmMUYxRik7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUc2LCAweDAwMDAwNEM0KTsKKwl9IGVsc2Ugey8qIHJhdGUgPSAxMDAwMDAwMDAgKi8KKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzIsIDB4MDAxZjFmMDApOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHMywgMHgwMDA4MDgwMik7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUc0LCAweDFDMDkxQzA5KTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzUsIDB4MDMxQTFGMUYpOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHNiwgMHgwMDAwMDNDMik7CisJfQogCiAJaWYgKGdwbWNfY3NfcmVxdWVzdChBUE9MTE9OX0VUSF9DUywgU1pfMTZNLCAmYmFzZSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBDUyBmb3Igc21jOTF4XG4iKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAJYXBvbGxvbl9zbWM5MXhfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gYmFzZSArIDB4MzAwOwogCWFwb2xsb25fc21jOTF4X3Jlc291cmNlc1swXS5lbmQgICA9IGJhc2UgKyAweDMwZjsKQEAgLTIwOCw5ICsyNDAsMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCiAJCQlBUE9MTE9OX0VUSFJfR1BJT19JUlEpOwogCQlncG1jX2NzX2ZyZWUoQVBPTExPTl9FVEhfQ1MpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihBUE9MTE9OX0VUSFJfR1BJT19JUlEsIDEpOworCitvdXQ6CisJY2xrX2Rpc2FibGUoZ3BtY19mY2spOworCWNsa19wdXQoZ3BtY19mY2spOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXRfaXJxKHZvaWQpCkBAIC0zMzAsNiArMzY2LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfYXBvbGxvbl9pbml0KHZvaWQpCiB7CisJdTMyIHY7CisKIAlhcG9sbG9uX2xlZF9pbml0KCk7CiAJYXBvbGxvbl9zd19pbml0KCk7CiAJYXBvbGxvbl9mbGFzaF9pbml0KCk7CkBAIC0zMzksNyArMzc3LDkgQEAKIAlvbWFwX2NmZ19yZWcoVzE5XzI0WFhfU1lTX05JUlEpOwogCiAJLyogVXNlIEludGVyYWwgbG9vcC1iYWNrIGluIE1NQy9TRElPIE1vZHVsZSBJbnB1dCBDbG9jayBzZWxlY3Rpb24gKi8KLQlDT05UUk9MX0RFVkNPTkYgfD0gKDEgPDwgMjQpOworCXYgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CisJdiB8PSAoMSA8PCAyNCk7CisJb21hcF9jdHJsX3dyaXRlbCh2LCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKIAogCS8qCiAgCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCmluZGV4IGYxMjVmNDMuLmQxOTE1ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMjYsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9jb250cm9sLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW9leHBhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgpAQCAtMzYsMTAgKzM5LDEzIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWVuZWxhdXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KLSNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAorI2RlZmluZSBINF9GTEFTSF9DUwkwCisjZGVmaW5lIEg0X1NNQzkxWF9DUwkxCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm93X2dwaW9zWzZdID0geyA4OCwgODksIDEyNCwgMTEsIDYsIDk2IH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbF9ncGlvc1s3XSA9IHsgOTAsIDkxLCAxMDAsIDM2LCAxMiwgOTcsIDk4IH07CiAKQEAgLTExNiw4ICsxMjIsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoNF9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gSDRfQ1MwX0JBU0UsCi0JLmVuZAkJPSBINF9DUzBfQkFTRSArIFNaXzY0TSAtIDEsCiAJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogfTsKIApAQCAtMjUzLDIxICsyNTcsMTA3IEBACiAJJmg0X2xjZF9kZXZpY2UsCiB9OwogCisvKiAyNDIwIFN5c2Jvb3Qgc2V0dXAgKDI0MzAgaXMgZGlmZmVyZW50KSAqLworc3RhdGljIHUzMiBnZXRfc3lzYm9vdF92YWx1ZSh2b2lkKQoreworCXJldHVybiAob21hcF9jdHJsX3JlYWRsKE9NQVAyNFhYX0NPTlRST0xfU1RBVFVTKSAmCisJCShPTUFQMl9TWVNCT09UXzVfTUFTSyB8IE9NQVAyX1NZU0JPT1RfNF9NQVNLIHwKKwkJIE9NQVAyX1NZU0JPT1RfM19NQVNLIHwgT01BUDJfU1lTQk9PVF8yX01BU0sgfAorCQkgT01BUDJfU1lTQk9PVF8xX01BU0sgfCBPTUFQMl9TWVNCT09UXzBfTUFTSykpOworfQorCisvKiBINC0yNDIwJ3MgYWx3YXlzIHVzZWQgbXV4ZWQgbW9kZSwgSDQtMjQyMidzIGFsd2F5cyB1c2Ugbm9uLW11eGVkCisgKgorICogTm90ZTogT01BUC1HSVQgZG9lc24ndCBjb3JyZWN0bHkgZG8gaXNfY3B1X29tYXAyNDIyIGFuZCBpc19jcHVfb21hcDI0MjMKKyAqICBjb3JyZWN0bHkuICBUaGUgbWFjcm8gbmVlZHMgdG8gbG9vayBhdCBwcm9kdWN0aW9uX2lkIG5vdCBqdXN0IGhhd2tleWUuCisgKi8KK3N0YXRpYyB1MzIgaXNfZ3BtY19tdXhlZCh2b2lkKQoreworCXUzMiBtdXg7CisJbXV4ID0gZ2V0X3N5c2Jvb3RfdmFsdWUoKTsKKwlpZiAoKG11eCAmIDB4RikgPT0gMHhkKQorCQlyZXR1cm4gMTsJLyogTkFORCBjb25maWcgKGNvdWxkIGJlIGVpdGhlcikgKi8KKwlpZiAobXV4ICYgMHgyKQkJLyogaWYgbXV4J2VkICovCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaDRfaW5pdF9kZWJ1Zyh2b2lkKQogeworCWludCBldGhfY3M7CisJdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKKwl1bnNpZ25lZCBpbnQgbXV4ZWQsIHJhdGU7CisJc3RydWN0IGNsayAqZ3BtY19mY2s7CisKKwlldGhfY3MJPSBINF9TTUM5MVhfQ1M7CisKKwlncG1jX2ZjayA9IGNsa19nZXQoTlVMTCwgImdwbWNfZmNrIik7CS8qIEFsd2F5cyBvbiBFTkFCTEVfT05fSU5JVCAqLworCWlmIChJU19FUlIoZ3BtY19mY2spKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwljbGtfZW5hYmxlKGdwbWNfZmNrKTsKKwlyYXRlID0gY2xrX2dldF9yYXRlKGdwbWNfZmNrKTsKKwljbGtfZGlzYWJsZShncG1jX2Zjayk7CisJY2xrX3B1dChncG1jX2Zjayk7CisKKwlpZiAoaXNfZ3BtY19tdXhlZCgpKQorCQltdXhlZCA9IDB4MjAwOworCWVsc2UKKwkJbXV4ZWQgPSAwOworCiAJLyogTWFrZSBzdXJlIENTMSB0aW1pbmdzIGFyZSBjb3JyZWN0ICovCi0JR1BNQ19DT05GSUcxXzEgPSAweDAwMDExMjAwOwotCUdQTUNfQ09ORklHMl8xID0gMHgwMDFmMWYwMTsKLQlHUE1DX0NPTkZJRzNfMSA9IDB4MDAwODA4MDM7Ci0JR1BNQ19DT05GSUc0XzEgPSAweDFjMDkxYzA5OwotCUdQTUNfQ09ORklHNV8xID0gMHgwNDFmMWYxZjsKLQlHUE1DX0NPTkZJRzZfMSA9IDB4MDAwMDA0YzQ7Ci0JR1BNQ19DT05GSUc3XzEgPSAweDAwMDAwZjQwIHwgKDB4MDgwMDAwMDAgPj4gMjQpOworCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUcxLAorCQkJICAweDAwMDExMDAwIHwgbXV4ZWQpOworCisJaWYgKHJhdGUgPj0gMTYwMDAwMDAwKSB7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUcyLCAweDAwMWYxZjAxKTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzMsIDB4MDAwODA4MDMpOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHNCwgMHgxYzBiMWMwYSk7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUc1LCAweDA0MWYxRjFGKTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzYsIDB4MDAwMDA0QzQpOworCX0gZWxzZSBpZiAocmF0ZSA+PSAxMzAwMDAwMDApIHsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzIsIDB4MDAxZjFmMDApOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHMywgMHgwMDA4MDgwMik7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUc0LCAweDFDMDkxQzA5KTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzUsIDB4MDQxZjFGMUYpOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHNiwgMHgwMDAwMDRDNCk7CisJfSBlbHNlIHsvKiByYXRlID0gMTAwMDAwMDAwICovCisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUcyLCAweDAwMWYxZjAwKTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzMsIDB4MDAwODA4MDIpOworCQlncG1jX2NzX3dyaXRlX3JlZyhldGhfY3MsIEdQTUNfQ1NfQ09ORklHNCwgMHgxQzA5MUMwOSk7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGV0aF9jcywgR1BNQ19DU19DT05GSUc1LCAweDAzMUExRjFGKTsKKwkJZ3BtY19jc193cml0ZV9yZWcoZXRoX2NzLCBHUE1DX0NTX0NPTkZJRzYsIDB4MDAwMDAzQzIpOworCX0KKworCWlmIChncG1jX2NzX3JlcXVlc3QoZXRoX2NzLCBTWl8xNk0sICZjc19tZW1fYmFzZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBtZW0gZm9yIHNtYzkxeFxuIik7CisJCWdvdG8gb3V0OworCX0KKwogCXVkZWxheSgxMDApOwogCiAJb21hcF9jZmdfcmVnKE0xNV8yNFhYX0dQSU85Mik7CiAJaWYgKGRlYnVnX2NhcmRfaW5pdChjc19tZW1fYmFzZSwgT01BUDI0WFhfRVRIUl9HUElPX0lSUSkgPCAwKQogCQlncG1jX2NzX2ZyZWUoZXRoX2NzKTsKKworb3V0OgorCWNsa19kaXNhYmxlKGdwbWNfZmNrKTsKKwljbGtfcHV0KGdwbWNfZmNrKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGg0X2luaXRfZmxhc2godm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwlpZiAoZ3BtY19jc19yZXF1ZXN0KEg0X0ZMQVNIX0NTLCBTWl82NE0sICZiYXNlKSA8IDApIHsKKwkJcHJpbnRrKCJDYW4ndCByZXF1ZXN0IEdQTUMgQ1MgZm9yIGZsYXNoXG4iKTsKKwkJcmV0dXJuOworCX0KKwloNF9mbGFzaF9yZXNvdXJjZS5zdGFydAk9IGJhc2U7CisJaDRfZmxhc2hfcmVzb3VyY2UuZW5kCT0gYmFzZSArIFNaXzY0TSAtIDE7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X2luaXRfaXJxKHZvaWQpCkBAIC0yNzUsNiArMzY1LDcgQEAKIAlvbWFwMl9pbml0X2NvbW1vbl9odygpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOworCWg0X2luaXRfZmxhc2goKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGg0X3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggZTZlODViNy4uYjU3ZmZiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMSwyMCArMSwxOSBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIENvbnRhY3RzOgogICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqICBDcmVhdGVkIGZvciBPTUFQMi4KLSAqCi0gKiAgQ2xlYW5lZCB1cCBhbmQgbW9kaWZpZWQgdG8gdXNlIG9tYXAgc2hhcmVkIGNsb2NrIGZyYW1ld29yayBieQotICogIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+Ci0gKgotICogIEJhc2VkIG9uIG9tYXAxIGNsb2NrLmMsIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KLSAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICogIFBhdWwgV2FsbXNsZXkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjdW5kZWYgREVCVUcKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjIsMTc2ICsyMSwyMjcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3NyYW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAotI2luY2x1ZGUgInByY20tcmVncy5oIgogI2luY2x1ZGUgIm1lbW9yeS5oIgorI2luY2x1ZGUgInNkcmMuaCIKICNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCi0jdW5kZWYgREVCVUcKKyNkZWZpbmUgTUFYX0NMT0NLX0VOQUJMRV9XQUlUCQkxMDAwMDAKIAotLy8jZGVmaW5lIERPV05fVkFSSUFCTEVfRFBMTCAxCQkJLyogRXhwZXJpbWVudGFsICovCi0KLXN0YXRpYyBzdHJ1Y3QgcHJjbV9jb25maWcgKmN1cnJfcHJjbV9zZXQ7Ci1zdGF0aWMgdTMyIGN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fRlVMTF9TUEVFRDsKLXN0YXRpYyBzdHJ1Y3QgY2xrICp2Y2xrOwotc3RhdGljIHN0cnVjdCBjbGsgKnNjbGs7Cit1OCBjcHVfbWFzazsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBPbWFwMiBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFJlY2FsY3VsYXRlIFNZU1RfQ0xLICovCi1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQorLyoqCisgKiBvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQgLSBzZXQgYSBjbGtzZWwgY2xrJ3MgcGFyZW50IGZpZWxkIGZyb20gdGhlIGhhcmR3YXJlCisgKiBAY2xrOiBPTUFQIGNsb2NrIHN0cnVjdCBwdHIgdG8gdXNlCisgKgorICogR2l2ZW4gYSBwb2ludGVyIHRvIGEgc291cmNlLXNlbGVjdGFibGUgc3RydWN0IGNsaywgcmVhZCB0aGUgaGFyZHdhcmUKKyAqIHJlZ2lzdGVyIGFuZCBkZXRlcm1pbmUgd2hhdCBpdHMgcGFyZW50IGlzIGN1cnJlbnRseSBzZXQgdG8uICBVcGRhdGUgdGhlCisgKiBjbGstPnBhcmVudCBmaWVsZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjbGsgcHRyLgorICovCit2b2lkIG9tYXAyX2luaXRfY2xrc2VsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIGRpdiA9IFBSQ01fQ0xLU1JDX0NUUkw7Ci0JZGl2ICY9ICgxIDw8IDcpIHwgKDEgPDwgNik7CS8qIFRlc3QgaWYgZXh0IGNsayBkaXZpZGVkIGJ5IDEgb3IgMiAqLwotCWRpdiA+Pj0gY2xrLT5yYXRlX29mZnNldDsKLQljbGstPnJhdGUgPSAoY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpOwotCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CisJdTMyIHIsIGZvdW5kID0gMDsKKworCWlmICghY2xrLT5jbGtzZWwpCisJCXJldHVybjsKKworCXIgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpICYgY2xrLT5jbGtzZWxfbWFzazsKKwlyID4+PSBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKKworCWZvciAoY2xrcyA9IGNsay0+Y2xrc2VsOyBjbGtzLT5wYXJlbnQgJiYgIWZvdW5kOyBjbGtzKyspIHsKKwkJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdiAmJiAhZm91bmQ7IGNsa3IrKykgeworCQkJaWYgKChjbGtyLT5mbGFncyAmIGNwdV9tYXNrKSAmJiAoY2xrci0+dmFsID09IHIpKSB7CisJCQkJaWYgKGNsay0+cGFyZW50ICE9IGNsa3MtPnBhcmVudCkgeworCQkJCQlwcl9kZWJ1ZygiY2xvY2s6IGluaXRlZCAlcyBwYXJlbnQgIgorCQkJCQkJICJ0byAlcyAod2FzICVzKVxuIiwKKwkJCQkJCSBjbGstPm5hbWUsIGNsa3MtPnBhcmVudC0+bmFtZSwKKwkJCQkJCSAoKGNsay0+cGFyZW50KSA/CisJCQkJCQkgIGNsay0+cGFyZW50LT5uYW1lIDogIk5VTEwiKSk7CisJCQkJCWNsay0+cGFyZW50ID0gY2xrcy0+cGFyZW50OworCQkJCX07CisJCQkJZm91bmQgPSAxOworCQkJfQorCQl9CisJfQorCisJaWYgKCFmb3VuZCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogaW5pdCBwYXJlbnQ6IGNvdWxkIG5vdCBmaW5kICIKKwkJICAgICAgICJyZWd2YWwgJTB4IGZvciBjbG9jayAlc1xuIiwgciwgIGNsay0+bmFtZSk7CisKKwlyZXR1cm47CiB9CiAKLXN0YXRpYyB1MzIgb21hcDJfZ2V0X2RwbGxfcmF0ZShzdHJ1Y3QgY2xrICogdGNsaykKKy8qIFJldHVybnMgdGhlIERQTEwgcmF0ZSAqLwordTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCWxvbmcgbG9uZyBkcGxsX2NsazsKLQlpbnQgZHBsbF9tdWx0LCBkcGxsX2RpdiwgYW11bHQ7CisJdTMyIGRwbGxfbXVsdCwgZHBsbF9kaXYsIGRwbGw7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CiAKLQlkcGxsX211bHQgPSAoQ01fQ0xLU0VMMV9QTEwgPj4gMTIpICYgMHgwM2ZmOwkvKiAxMCBiaXRzICovCi0JZHBsbF9kaXYgPSAoQ01fQ0xLU0VMMV9QTEwgPj4gOCkgJiAweDBmOwkvKiA0IGJpdHMgKi8KLQlkcGxsX2NsayA9IChsb25nIGxvbmcpdGNsay0+cGFyZW50LT5yYXRlICogZHBsbF9tdWx0OworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisJLyogUkVWSVNJVDogV2hhdCBkbyB3ZSByZXR1cm4gb24gZXJyb3I/ICovCisJaWYgKCFkZCkKKwkJcmV0dXJuIDA7CisKKwlkcGxsID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOworCWRwbGxfbXVsdCA9IGRwbGwgJiBkZC0+bXVsdF9tYXNrOworCWRwbGxfbXVsdCA+Pj0gX19mZnMoZGQtPm11bHRfbWFzayk7CisJZHBsbF9kaXYgPSBkcGxsICYgZGQtPmRpdjFfbWFzazsKKwlkcGxsX2RpdiA+Pj0gX19mZnMoZGQtPmRpdjFfbWFzayk7CisKKwlkcGxsX2NsayA9IChsb25nIGxvbmcpY2xrLT5wYXJlbnQtPnJhdGUgKiBkcGxsX211bHQ7CiAJZG9fZGl2KGRwbGxfY2xrLCBkcGxsX2RpdiArIDEpOwotCWFtdWx0ID0gQ01fQ0xLU0VMMl9QTEwgJiAweDM7Ci0JZHBsbF9jbGsgKj0gYW11bHQ7CiAKIAlyZXR1cm4gZHBsbF9jbGs7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorLyoKKyAqIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHBhcmVudCBjbG9jaywKKyAqIGRpdmlkZWQgYnkgc29tZSBmYWN0b3IKKyAqLwordm9pZCBvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JZm9sbG93cGFyZW50X3JlY2FsYyhjbGspOworCVdBUk5fT04oIWNsay0+Zml4ZWRfZGl2KTsKKworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gY2xrLT5maXhlZF9kaXY7CisKKwlpZiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKIH0KIAotc3RhdGljIHZvaWQgb21hcDJfcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqIGNsaykKKy8qKgorICogb21hcDJfd2FpdF9jbG9ja19yZWFkeSAtIHdhaXQgZm9yIGNsb2NrIHRvIGVuYWJsZQorICogQHJlZzogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbG9jayBJRExFU1QgcmVnaXN0ZXIKKyAqIEBtYXNrOiB2YWx1ZSB0byBtYXNrIGFnYWluc3QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjbG9jayBpcyBhY3RpdmUKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBjbG9jayAoZm9yIHByaW50aykKKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIGNsb2NrIGVuYWJsZWQgaW4gdGltZSwgb3IgMCBpZiBpdCBmYWlsZWQgdG8gZW5hYmxlCisgKiBpbiByb3VnaGx5IE1BWF9DTE9DS19FTkFCTEVfV0FJVCBtaWNyb3NlY29uZHMuCisgKi8KK2ludCBvbWFwMl93YWl0X2Nsb2NrX3JlYWR5KHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaywgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAoIShjbGstPmZsYWdzICYgUkFURV9GSVhFRCkpCi0JCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworCWludCBpID0gMDsKKwlpbnQgZW5hID0gMDsKIAotCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9tYXAyX3NldF9vc2NfY2soaW50IGVuYWJsZSkKLXsKLQlpZiAoZW5hYmxlKQotCQlQUkNNX0NMS1NSQ19DVFJMICY9IH4oMHgzIDw8IDMpOwotCWVsc2UKLQkJUFJDTV9DTEtTUkNfQ1RSTCB8PSAweDMgPDwgMzsKLX0KLQotLyogRW5hYmxlIGFuIEFQTEwgaWYgb2ZmICovCi1zdGF0aWMgdm9pZCBvbWFwMl9jbGtfZml4ZWRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgY3ZhbCwgaT0wOwotCi0JaWYgKGNsay0+ZW5hYmxlX2JpdCA9PSAweGZmKQkJCS8qIFBhcmVudCB3aWxsIGRvIGl0ICovCi0JCXJldHVybjsKLQotCWN2YWwgPSBDTV9DTEtFTl9QTEw7Ci0KLQlpZiAoKGN2YWwgJiAoMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCkpID09ICgweDMgPDwgY2xrLT5lbmFibGVfYml0KSkKLQkJcmV0dXJuOwotCi0JY3ZhbCAmPSB+KDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpOwotCWN2YWwgfD0gKDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpOwotCUNNX0NMS0VOX1BMTCA9IGN2YWw7Ci0KLQlpZiAoY2xrID09ICZhcGxsOTZfY2spCi0JCWN2YWwgPSAoMSA8PCA4KTsKLQllbHNlIGlmIChjbGsgPT0gJmFwbGw1NF9jaykKLQkJY3ZhbCA9ICgxIDw8IDYpOwotCi0Jd2hpbGUgKCEoQ01fSURMRVNUX0NLR0VOICYgY3ZhbCkpIHsJCS8qIFdhaXQgZm9yIGxvY2sgKi8KLQkJKytpOwotCQl1ZGVsYXkoMSk7Ci0JCWlmIChpID09IDEwMDAwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDbG9jayAlcyBkaWRuJ3QgbG9ja1xuIiwgY2xrLT5uYW1lKTsKLQkJCWJyZWFrOwotCQl9CisJLyoKKwkgKiAyNHh4IHVzZXMgMCB0byBpbmRpY2F0ZSBub3QgcmVhZHksIGFuZCAxIHRvIGluZGljYXRlIHJlYWR5LgorCSAqIDM0eHggcmV2ZXJzZXMgdGhpcywganVzdCB0byBrZWVwIHVzIG9uIG91ciB0b2VzCisJICovCisJaWYgKGNwdV9tYXNrICYgKFJBVEVfSU5fMjQyWCB8IFJBVEVfSU5fMjQzWCkpIHsKKwkJZW5hID0gbWFzazsKKwl9IGVsc2UgaWYgKGNwdV9tYXNrICYgUkFURV9JTl8zNDNYKSB7CisJCWVuYSA9IDA7CiAJfQotfQogCisJLyogV2FpdCBmb3IgbG9jayAqLworCXdoaWxlICgoKF9fcmF3X3JlYWRsKHJlZykgJiBtYXNrKSAhPSBlbmEpICYmCisJICAgICAgIChpKysgPCBNQVhfQ0xPQ0tfRU5BQkxFX1dBSVQpKSB7CisJCXVkZWxheSgxKTsKKwl9CisKKwlpZiAoaSA8IE1BWF9DTE9DS19FTkFCTEVfV0FJVCkKKwkJcHJfZGVidWcoIkNsb2NrICVzIHN0YWJsZSBhZnRlciAlZCBsb29wc1xuIiwgbmFtZSwgaSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIkNsb2NrICVzIGRpZG4ndCBlbmFibGUgaW4gJWQgdHJpZXNcbiIsCisJCSAgICAgICBuYW1lLCBNQVhfQ0xPQ0tfRU5BQkxFX1dBSVQpOworCisKKwlyZXR1cm4gKGkgPCBNQVhfQ0xPQ0tfRU5BQkxFX1dBSVQpID8gMSA6IDA7Cit9OworCisKKy8qCisgKiBOb3RlOiBXZSBkb24ndCBuZWVkIHNwZWNpYWwgY29kZSBoZXJlIGZvciBJTlZFUlRfRU5BQkxFCisgKiBmb3IgdGhlIHRpbWUgYmVpbmcgc2luY2UgSU5WRVJUX0VOQUJMRSBvbmx5IGFwcGxpZXMgdG8gY2xvY2tzIGVuYWJsZWQgYnkKKyAqIENNX0NMS0VOX1BMTAorICovCiBzdGF0aWMgdm9pZCBvbWFwMl9jbGtfd2FpdF9yZWFkeShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdW5zaWduZWQgbG9uZyByZWcsIG90aGVyX3JlZywgc3RfcmVnOworCXZvaWQgX19pb21lbSAqcmVnLCAqb3RoZXJfcmVnLCAqc3RfcmVnOwogCXUzMiBiaXQ7Ci0JaW50IGk7CiAKLQlyZWcgPSAodW5zaWduZWQgbG9uZykgY2xrLT5lbmFibGVfcmVnOwotCWlmIChyZWcgPT0gKHVuc2lnbmVkIGxvbmcpICZDTV9GQ0xLRU4xX0NPUkUgfHwKLQkgICAgcmVnID09ICh1bnNpZ25lZCBsb25nKSAmQ01fRkNMS0VOMl9DT1JFKQotCQlvdGhlcl9yZWcgPSAocmVnICYgfjB4ZjApIHwgMHgxMDsKLQllbHNlIGlmIChyZWcgPT0gKHVuc2lnbmVkIGxvbmcpICZDTV9JQ0xLRU4xX0NPUkUgfHwKLQkJIHJlZyA9PSAodW5zaWduZWQgbG9uZykgJkNNX0lDTEtFTjJfQ09SRSkKLQkJb3RoZXJfcmVnID0gKHJlZyAmIH4weGYwKSB8IDB4MDA7CisJLyoKKwkgKiBSRVZJU0lUOiBUaGlzIGNvZGUgaXMgcHJldHR5IHVnbHkuICBJdCB3b3VsZCBiZSBuaWNlIHRvIGdlbmVyYWxpemUKKwkgKiBpdCBhbmQgcHVsbCBpdCBpbnRvIHN0cnVjdCBjbGsgaXRzZWxmIHNvbWVob3cuCisJICovCisJcmVnID0gY2xrLT5lbmFibGVfcmVnOworCWlmICgoKCh1MzIpcmVnICYgMHhmZikgPj0gQ01fRkNMS0VOMSkgJiYKKwkgICAgKCgodTMyKXJlZyAmIDB4ZmYpIDw9IE9NQVAyNFhYX0NNX0ZDTEtFTjIpKQorCQlvdGhlcl9yZWcgPSAodm9pZCBfX2lvbWVtICopKCgodTMyKXJlZyAmIH4weGYwKSB8IDB4MTApOyAvKiBDTV9JQ0xLRU4qICovCisJZWxzZSBpZiAoKCgodTMyKXJlZyAmIDB4ZmYpID49IENNX0lDTEtFTjEpICYmCisJCSAoKCh1MzIpcmVnICYgMHhmZikgPD0gT01BUDI0WFhfQ01fSUNMS0VONCkpCisJCW90aGVyX3JlZyA9ICh2b2lkIF9faW9tZW0gKikoKCh1MzIpcmVnICYgfjB4ZjApIHwgMHgwMCk7IC8qIENNX0ZDTEtFTiogKi8KIAllbHNlCiAJCXJldHVybjsKIAorCS8qIFJFVklTSVQ6IFdoYXQgYXJlIHRoZSBhcHByb3ByaWF0ZSBleGNsdXNpb25zIGZvciAzNFhYPyAqLwogCS8qIE5vIGNoZWNrIGZvciBEU1Mgb3IgY2FtIGNsb2NrcyAqLwotCWlmICgocmVnICYgMHgwZikgPT0gMCkgewotCQlpZiAoY2xrLT5lbmFibGVfYml0IDw9IDEgfHwgY2xrLT5lbmFibGVfYml0ID09IDMxKQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSAmJiAoKHUzMilyZWcgJiAweDBmKSA9PSAwKSB7IC8qIENNX3tGLEl9Q0xLRU4xICovCisJCWlmIChjbGstPmVuYWJsZV9iaXQgPT0gT01BUDI0WFhfRU5fRFNTMl9TSElGVCB8fAorCQkgICAgY2xrLT5lbmFibGVfYml0ID09IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQgfHwKKwkJICAgIGNsay0+ZW5hYmxlX2JpdCA9PSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQpCiAJCQlyZXR1cm47CiAJfQogCisJLyogUkVWSVNJVDogV2hhdCBhcmUgdGhlIGFwcHJvcHJpYXRlIGV4Y2x1c2lvbnMgZm9yIDM0WFg/ICovCisJLyogT01BUDM6IGlnbm9yZSBEU1MtbW9kIGNsb2NrcyAqLworCWlmIChjcHVfaXNfb21hcDM0eHgoKSAmJgorCSAgICAoKCh1MzIpcmVnICYgfjB4ZmYpID09ICh1MzIpT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIDApKSkKKwkJcmV0dXJuOworCiAJLyogQ2hlY2sgaWYgYm90aCBmdW5jdGlvbmFsIGFuZCBpbnRlcmZhY2UgY2xvY2tzCiAJICogYXJlIHJ1bm5pbmcuICovCiAJYml0ID0gMSA8PCBjbGstPmVuYWJsZV9iaXQ7CiAJaWYgKCEoX19yYXdfcmVhZGwob3RoZXJfcmVnKSAmIGJpdCkpCiAJCXJldHVybjsKLQlzdF9yZWcgPSAob3RoZXJfcmVnICYgfjB4ZjApIHwgMHgyMDsKLQlpID0gMDsKLQl3aGlsZSAoIShfX3Jhd19yZWFkbChzdF9yZWcpICYgYml0KSkgewotCQlpKys7Ci0JCWlmIChpID09IDEwMDAwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJUaW1lb3V0IGVuYWJsaW5nIGNsb2NrICVzXG4iLCBjbGstPm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGkpCi0JCXByX2RlYnVnKCJDbG9jayAlcyBzdGFibGUgYWZ0ZXIgJWQgbG9vcHNcbiIsIGNsay0+bmFtZSwgaSk7CisJc3RfcmVnID0gKHZvaWQgX19pb21lbSAqKSgoKHUzMilvdGhlcl9yZWcgJiB+MHhmMCkgfCAweDIwKTsgLyogQ01fSURMRVNUKiAqLworCisJb21hcDJfd2FpdF9jbG9ja19yZWFkeShzdF9yZWcsIGJpdCwgY2xrLT5uYW1lKTsKIH0KIAogLyogRW5hYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50CiAgKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdGhpcyB0byB1c2UgY2xrLT5lbmFibGUgbGlrZSBvbiBvbWFwMT8KICAqLwotc3RhdGljIGludCBfb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICogY2xrKQoraW50IF9vbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVndmFsMzI7CiAKLQlpZiAoY2xrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKQorCWlmIChjbGstPmZsYWdzICYgKEFMV0FZU19FTkFCTEVEIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodW5saWtlbHkoY2xrID09ICZvc2NfY2spKSB7Ci0JCW9tYXAyX3NldF9vc2NfY2soMSk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoY2xrLT5lbmFibGUpCisJCXJldHVybiBjbGstPmVuYWJsZShjbGspOwogCiAJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKIAkJICAgICAgIGNsay0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwpIHsKLQkJb21hcDJfY2xrX2ZpeGVkX2VuYWJsZShjbGspOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDA7IC8qIFJFVklTSVQ6IC1FSU5WQUwgKi8KIAl9CiAKIAlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwlpZiAoY2xrLT5mbGFncyAmIElOVkVSVF9FTkFCTEUpCisJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCWVsc2UKKwkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKIAlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CiAJd21iKCk7CiAKQEAgLTIwMCw0NCArMjUwLDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFN0b3AgQVBMTCAqLwotc3RhdGljIHZvaWQgb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBjdmFsOwotCi0JaWYoY2xrLT5lbmFibGVfYml0ID09IDB4ZmYpCQkvKiBsZXQgcGFyZW50IG9mZiBkbyBpdCAqLwotCQlyZXR1cm47Ci0KLQljdmFsID0gQ01fQ0xLRU5fUExMOwotCWN2YWwgJj0gfigweDMgPDwgY2xrLT5lbmFibGVfYml0KTsKLQlDTV9DTEtFTl9QTEwgPSBjdmFsOwotfQotCiAvKiBEaXNhYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50ICovCi1zdGF0aWMgdm9pZCBfb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQordm9pZCBfb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWd2YWwzMjsKIAotCWlmICh1bmxpa2VseShjbGsgPT0gJm9zY19jaykpIHsKLQkJb21hcDJfc2V0X29zY19jaygwKTsKKwlpZiAoY2xrLT5mbGFncyAmIChBTFdBWVNfRU5BQkxFRCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSykpCisJCXJldHVybjsKKworCWlmIChjbGstPmRpc2FibGUpIHsKKwkJY2xrLT5kaXNhYmxlKGNsayk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCi0JCXJldHVybjsKLQotCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwpIHsKLQkJb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoY2xrKTsKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApIHsKKwkJLyoKKwkJICogJ0luZGVwZW5kZW50JyBoZXJlIHJlZmVycyB0byBhIGNsb2NrIHdoaWNoIGlzIG5vdAorCQkgKiBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBjbGtfZGlzYWJsZSBjYWxsZWQgb24gaW5kZXBlbmRlbnQgIgorCQkgICAgICAgImNsb2NrICVzIHdoaWNoIGhhcyBubyBlbmFibGVfcmVnXG4iLCBjbGstPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCiAJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCWlmIChjbGstPmZsYWdzICYgSU5WRVJUX0VOQUJMRSkKKwkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwllbHNlCisJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwogCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKIAl3bWIoKTsKIH0KIAotc3RhdGljIGludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3ZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKKwkJX29tYXAyX2Nsa19kaXNhYmxlKGNsayk7CisJCWlmIChsaWtlbHkoKHUzMiljbGstPnBhcmVudCkpCisJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCitpbnQgb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTI2MSw1MTkgKzMxNSwzMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgewotCQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKLQkJaWYgKGxpa2VseSgodTMyKWNsay0+cGFyZW50KSkKLQkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQl9Ci19Ci0KLS8qCi0gKiBVc2VzIHRoZSBjdXJyZW50IHByY20gc2V0IHRvIHRlbGwgaWYgYSByYXRlIGlzIHZhbGlkLgotICogWW91IGNhbiBnbyBzbG93ZXIsIGJ1dCBub3QgZmFzdGVyIHdpdGhpbiBhIGdpdmVuIHJhdGUgc2V0LgotICovCi1zdGF0aWMgdTMyIG9tYXAyX2RwbGxfcm91bmRfcmF0ZSh1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlKQotewotCXUzMiBoaWdoLCBsb3c7Ci0KLQlpZiAoKENNX0NMS1NFTDJfUExMICYgMHgzKSA9PSAxKSB7CS8qIERQTEwgY2xvY2tvdXQgKi8KLQkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgKiAyOwotCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOwotCX0gZWxzZSB7CQkJCS8qIERQTEwgY2xvY2tvdXQgeCAyICovCi0JCWhpZ2ggPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOwotCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKLQl9Ci0KLSNpZmRlZiBET1dOX1ZBUklBQkxFX0RQTEwKLQlpZiAodGFyZ2V0X3JhdGUgPiBoaWdoKQotCQlyZXR1cm4gaGlnaDsKLQllbHNlCi0JCXJldHVybiB0YXJnZXRfcmF0ZTsKLSNlbHNlCi0JaWYgKHRhcmdldF9yYXRlID4gbG93KQotCQlyZXR1cm4gaGlnaDsKLQllbHNlCi0JCXJldHVybiBsb3c7Ci0jZW5kaWYKLQotfQotCiAvKgogICogVXNlZCBmb3IgY2xvY2tzIHRoYXQgYXJlIHBhcnQgb2YgQ0xLU0VMX3h5eiBnb3Zlcm5lZCBjbG9ja3MuCiAgKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdG8gdXNlIGNsay0+ZW5hYmxlKCkgZnVuY3Rpb25zIGxpa2Ugb24gb21hcDE/CiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3ZvaWQgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIGZpeGVkID0gMCwgZGl2ID0gMDsKKwl1MzIgZGl2ID0gMDsKIAotCWlmIChjbGsgPT0gJmRwbGxfY2spIHsKLQkJY2xrLT5yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwotCQlmaXhlZCA9IDE7Ci0JCWRpdiA9IDA7Ci0JfQorCXByX2RlYnVnKCJjbG9jazogcmVjYWxjJ2luZyBjbGtzZWwgY2xrICVzXG4iLCBjbGstPm5hbWUpOwogCi0JaWYgKGNsayA9PSAmaXZhMV9tcHVfaW50X2lmY2spIHsKLQkJZGl2ID0gMjsKLQkJZml4ZWQgPSAxOwotCX0KLQotCWlmICgoY2xrID09ICZkc3MxX2ZjaykgJiYgKChDTV9DTEtTRUwxX0NPUkUgJiAoMHgxZiA8PCA4KSkgPT0gMCkpIHsKLQkJY2xrLT5yYXRlID0gc3lzX2NrLnJhdGU7CisJZGl2ID0gb21hcDJfY2xrc2VsX2dldF9kaXZpc29yKGNsayk7CisJaWYgKGRpdiA9PSAwKQogCQlyZXR1cm47Ci0JfQogCi0JaWYgKCFmaXhlZCkgewotCQlkaXYgPSBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IoY2xrKTsKLQkJaWYgKGRpdiA9PSAwKQotCQkJcmV0dXJuOwotCX0KKwlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2KSkKKwkJcmV0dXJuOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2OwogCi0JaWYgKGRpdiAhPSAwKSB7Ci0JCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpKQotCQkJcmV0dXJuOwotCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKLQl9CisJcHJfZGVidWcoImNsb2NrOiBuZXcgY2xvY2sgcmF0ZSBpcyAlbGQgKGRpdiAlZClcbiIsIGNsay0+cmF0ZSwgZGl2KTsKIAogCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKIAkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKIH0KIAotLyoKLSAqIEZpbmRzIGJlc3QgZGl2aWRlciB2YWx1ZSBpbiBhbiBhcnJheSBiYXNlZCBvbiB0aGUgc291cmNlIGFuZCB0YXJnZXQKLSAqIHJhdGVzLiBUaGUgZGl2aWRlciBhcnJheSBtdXN0IGJlIHNvcnRlZCB3aXRoIHNtYWxsZXN0IGRpdmlkZXIgZmlyc3QuCisvKioKKyAqIG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50IC0gcmV0dXJuIGNsa3NlbCBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gY2xrICYgcGFyZW50CisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgcHRyIHRvIGluc3BlY3QKKyAqIEBzcmNfY2xrOiBPTUFQIHN0cnVjdCBjbGsgcHRyIG9mIHRoZSBwYXJlbnQgY2xrIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBTY2FuIHRoZSBzdHJ1Y3QgY2xrc2VsIGFycmF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2xvY2sgdG8gZmluZAorICogdGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBwbGllZCBwYXJlbnQgY2xvY2sgYWRkcmVzcy4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xrc2VsIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KICAqLwotc3RhdGljIGlubGluZSB1MzIgb21hcDJfZGl2aWRlcl9mcm9tX3RhYmxlKHUzMiBzaXplLCB1MzIgKmRpdl9hcnJheSwKLQkJCQkJICAgdTMyIHNyY19yYXRlLCB1MzIgdGd0X3JhdGUpCitjb25zdCBzdHJ1Y3QgY2xrc2VsICpvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssCisJCQkJCQlzdHJ1Y3QgY2xrICpzcmNfY2xrKQogewotCWludCBpLCB0ZXN0X3JhdGU7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKIAotCWlmIChkaXZfYXJyYXkgPT0gTlVMTCkKLQkJcmV0dXJuIH4xOworCWlmICghY2xrLT5jbGtzZWwpCisJCXJldHVybiBOVUxMOwogCi0JZm9yIChpPTA7IGkgPCBzaXplOyBpKyspIHsKLQkJdGVzdF9yYXRlID0gc3JjX3JhdGUgLyAqZGl2X2FycmF5OwotCQlpZiAodGVzdF9yYXRlIDw9IHRndF9yYXRlKQotCQkJcmV0dXJuICpkaXZfYXJyYXk7Ci0JCSsrZGl2X2FycmF5OworCWZvciAoY2xrcyA9IGNsay0+Y2xrc2VsOyBjbGtzLT5wYXJlbnQ7IGNsa3MrKykgeworCQlpZiAoY2xrcy0+cGFyZW50ID09IHNyY19jbGspCisJCQlicmVhazsgLyogRm91bmQgdGhlIHJlcXVlc3RlZCBwYXJlbnQgKi8KIAl9CiAKLQlyZXR1cm4gfjA7CS8qIE5vIGFjY2VwdGFibGUgZGl2aWRlciAqLworCWlmICghY2xrcy0+cGFyZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IENvdWxkIG5vdCBmaW5kIHBhcmVudCBjbG9jayAlcyBpbiAiCisJCSAgICAgICAiY2xrc2VsIGFycmF5IG9mIGNsb2NrICVzXG4iLCBzcmNfY2xrLT5uYW1lLAorCQkgICAgICAgY2xrLT5uYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNsa3M7CiB9CiAKLS8qCi0gKiBGaW5kIGRpdmlzb3IgZm9yIHRoZSBnaXZlbiBjbG9jayBhbmQgdGFyZ2V0IHJhdGUuCisvKioKKyAqIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdiAtIGZpbmQgZGl2aXNvciBmb3IgdGhlIGdpdmVuIGNsb2NrIGFuZCByYXRlCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCisgKiBAdGFyZ2V0X3JhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZQorICogQG5ld19kaXY6IHB0ciB0byB3aGVyZSB3ZSBzaG91bGQgc3RvcmUgdGhlIGRpdmlzb3IKICAqCisgKiBGaW5kcyAnYmVzdCcgZGl2aWRlciB2YWx1ZSBpbiBhbiBhcnJheSBiYXNlZCBvbiB0aGUgc291cmNlIGFuZCB0YXJnZXQKKyAqIHJhdGVzLiAgVGhlIGRpdmlkZXIgYXJyYXkgbXVzdCBiZSBzb3J0ZWQgd2l0aCBzbWFsbGVzdCBkaXZpZGVyIGZpcnN0LgogICogTm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgd29yayBmb3IgY2xvY2tzIHdoaWNoIGFyZSBwYXJ0IG9mIENPTkZJR19QQVJUSUNJUEFOVCwKICAqIHRoZXkgYXJlIG9ubHkgc2V0dGFibGUgYXMgcGFydCBvZiB2aXJ0dWFsX3ByY20gc2V0LgorICoKKyAqIFJldHVybnMgdGhlIHJvdW5kZWQgY2xvY2sgcmF0ZSBvciByZXR1cm5zIDB4ZmZmZmZmZmYgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyB1MzIgb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqdGNsaywgdTMyIHRhcmdldF9yYXRlLAotCXUzMiAqbmV3X2RpdikKK3UzMiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlLAorCQkJCXUzMiAqbmV3X2RpdikKIHsKLQl1MzIgZ2Z4X2RpdltdID0gezIsIDMsIDR9OwotCXUzMiBzeXNjbGtvdXRfZGl2W10gPSB7MSwgMiwgNCwgOCwgMTZ9OwotCXUzMiBkc3MxX2RpdltdID0gezEsIDIsIDMsIDQsIDUsIDYsIDgsIDksIDEyLCAxNn07Ci0JdTMyIHZ5bG5xX2RpdltdID0gezEsIDIsIDMsIDQsIDYsIDgsIDksIDEyLCAxNiwgMTh9OwotCXUzMiBiZXN0X2RpdiA9IH4wLCBhc2l6ZSA9IDA7Ci0JdTMyICpkaXZfYXJyYXkgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgdGVzdF9yYXRlOworCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CisJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOworCXUzMiBsYXN0X2RpdiA9IDA7CiAKLQlzd2l0Y2ggKHRjbGstPmZsYWdzICYgU1JDX1JBVEVfU0VMX01BU0spIHsKLQljYXNlIENNX0dGWF9TRUwxOgotCQlhc2l6ZSA9IDM7Ci0JCWRpdl9hcnJheSA9IGdmeF9kaXY7Ci0JCWJyZWFrOwotCWNhc2UgQ01fUExMX1NFTDE6Ci0JCXJldHVybiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUodGFyZ2V0X3JhdGUpOwotCWNhc2UgQ01fU1lTQ0xLT1VUX1NFTDE6Ci0JCWFzaXplID0gNTsKLQkJZGl2X2FycmF5ID0gc3lzY2xrb3V0X2RpdjsKLQkJYnJlYWs7Ci0JY2FzZSBDTV9DT1JFX1NFTDE6Ci0JCWlmKHRjbGsgPT0gJmRzczFfZmNrKXsKLQkJCWlmKHRjbGstPnBhcmVudCA9PSAmY29yZV9jayl7Ci0JCQkJYXNpemUgPSAxMDsKLQkJCQlkaXZfYXJyYXkgPSBkc3MxX2RpdjsKLQkJCX0gZWxzZSB7Ci0JCQkJKm5ld19kaXYgPSAwOyAvKiBmaXhlZCBjbGsgKi8KLQkJCQlyZXR1cm4odGNsay0+cGFyZW50LT5yYXRlKTsKLQkJCX0KLQkJfSBlbHNlIGlmKCh0Y2xrID09ICZ2bHlucV9mY2spICYmIGNwdV9pc19vbWFwMjQyMCgpKXsKLQkJCWlmKHRjbGstPnBhcmVudCA9PSAmY29yZV9jayl7Ci0JCQkJYXNpemUgPSAxMDsKLQkJCQlkaXZfYXJyYXkgPSB2eWxucV9kaXY7Ci0JCQl9IGVsc2UgewotCQkJCSpuZXdfZGl2ID0gMDsgLyogZml4ZWQgY2xrICovCi0JCQkJcmV0dXJuKHRjbGstPnBhcmVudC0+cmF0ZSk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7CisJcHJpbnRrKEtFUk5fSU5GTyAiY2xvY2s6IGNsa3NlbF9yb3VuZF9yYXRlX2RpdjogJXMgdGFyZ2V0X3JhdGUgJWxkXG4iLAorCSAgICAgICBjbGstPm5hbWUsIHRhcmdldF9yYXRlKTsKKworCSpuZXdfZGl2ID0gMTsKKworCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKKwlpZiAoY2xrcyA9PSBOVUxMKQorCQlyZXR1cm4gfjA7CisKKwlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKKwkJaWYgKCEoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCSAgICBjb250aW51ZTsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKGNsa3ItPmRpdiA8PSBsYXN0X2RpdikKKwkJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IGNsa3NlbF9yYXRlIHRhYmxlIG5vdCBzb3J0ZWQgIgorCQkJICAgICAgICJmb3IgY2xvY2sgJXMiLCBjbGstPm5hbWUpOworCisJCWxhc3RfZGl2ID0gY2xrci0+ZGl2OworCisJCXRlc3RfcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2OworCisJCWlmICh0ZXN0X3JhdGUgPD0gdGFyZ2V0X3JhdGUpCisJCQlicmVhazsgLyogZm91bmQgaXQgKi8KIAl9CiAKLQliZXN0X2RpdiA9IG9tYXAyX2RpdmlkZXJfZnJvbV90YWJsZShhc2l6ZSwgZGl2X2FycmF5LAotCSB0Y2xrLT5wYXJlbnQtPnJhdGUsIHRhcmdldF9yYXRlKTsKLQlpZiAoYmVzdF9kaXYgPT0gfjApewotCQkqbmV3X2RpdiA9IDE7Ci0JCXJldHVybiBiZXN0X2RpdjsgLyogc2lnbmFsIGVycm9yICovCisJaWYgKCFjbGtyLT5kaXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgZGl2aXNvciBmb3IgdGFyZ2V0ICIKKwkJICAgICAgICJyYXRlICVsZCBmb3IgY2xvY2sgJXMgcGFyZW50ICVzXG4iLCB0YXJnZXRfcmF0ZSwKKwkJICAgICAgIGNsay0+bmFtZSwgY2xrLT5wYXJlbnQtPm5hbWUpOworCQlyZXR1cm4gfjA7CiAJfQogCi0JKm5ld19kaXYgPSBiZXN0X2RpdjsKLQlyZXR1cm4gKHRjbGstPnBhcmVudC0+cmF0ZSAvIGJlc3RfZGl2KTsKKwkqbmV3X2RpdiA9IGNsa3ItPmRpdjsKKworCXByaW50ayhLRVJOX0lORk8gImNsb2NrOiBuZXdfZGl2ID0gJWQsIG5ld19yYXRlID0gJWxkXG4iLCAqbmV3X2RpdiwKKwkgICAgICAgKGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2KSk7CisKKwlyZXR1cm4gKGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2KTsKIH0KIAotLyogR2l2ZW4gYSBjbG9jayBhbmQgYSByYXRlIGFwcGx5IGEgY2xvY2sgc3BlY2lmaWMgcm91bmRpbmcgZnVuY3Rpb24gKi8KLXN0YXRpYyBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorLyoqCisgKiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSAtIGZpbmQgcm91bmRlZCByYXRlIGZvciB0aGUgZ2l2ZW4gY2xvY2sgYW5kIHJhdGUKKyAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKKyAqIEB0YXJnZXRfcmF0ZTogZGVzaXJlZCBjbG9jayByYXRlCisgKgorICogQ29tcGF0aWJpbGl0eSB3cmFwcGVyIGZvciBPTUFQIGNsb2NrIGZyYW1ld29yaworICogRmluZHMgYmVzdCB0YXJnZXQgcmF0ZSBiYXNlZCBvbiB0aGUgc291cmNlIGNsb2NrIGFuZCBwb3NzaWJsZSBkaXZpZGVycy4KKyAqIHJhdGVzLiBUaGUgZGl2aWRlciBhcnJheSBtdXN0IGJlIHNvcnRlZCB3aXRoIHNtYWxsZXN0IGRpdmlkZXIgZmlyc3QuCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB3b3JrIGZvciBjbG9ja3Mgd2hpY2ggYXJlIHBhcnQgb2YgQ09ORklHX1BBUlRJQ0lQQU5ULAorICogdGhleSBhcmUgb25seSBzZXR0YWJsZSBhcyBwYXJ0IG9mIHZpcnR1YWxfcHJjbSBzZXQuCisgKgorICogUmV0dXJucyB0aGUgcm91bmRlZCBjbG9jayByYXRlIG9yIHJldHVybnMgMHhmZmZmZmZmZiBvbiBlcnJvci4KKyAqLworbG9uZyBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCiB7Ci0JdTMyIG5ld19kaXYgPSAwOwotCWludCB2YWxpZF9yYXRlOworCXUzMiBuZXdfZGl2OwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQotCQlyZXR1cm4gY2xrLT5yYXRlOworCXJldHVybiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCB0YXJnZXRfcmF0ZSwgJm5ld19kaXYpOworfQogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCXZhbGlkX3JhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShjbGssIHJhdGUsICZuZXdfZGl2KTsKLQkJcmV0dXJuIHZhbGlkX3JhdGU7Ci0JfQogCisvKiBHaXZlbiBhIGNsb2NrIGFuZCBhIHJhdGUgYXBwbHkgYSBjbG9jayBzcGVjaWZpYyByb3VuZGluZyBmdW5jdGlvbiAqLworbG9uZyBvbWFwMl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKIAlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IDApCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIAorCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogZ2VuZXJpYyBvbWFwMl9jbGtfcm91bmRfcmF0ZSBjYWxsZWQgIgorCQkgICAgICAgIm9uIGZpeGVkLXJhdGUgY2xvY2sgJXNcbiIsIGNsay0+bmFtZSk7CisKIAlyZXR1cm4gY2xrLT5yYXRlOwogfQogCi0vKgotICogQ2hlY2sgdGhlIERMTCBsb2NrIHN0YXRlLCBhbmQgcmV0dXJuIHR1ZSBpZiBydW5uaW5nIGluIHVubG9jayBtb2RlLgotICogVGhpcyBpcyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHNoaWZ0ZWQgRExMIHZhbHVlIGluIHVubG9jayBtb2RlLgotICovCi1zdGF0aWMgdTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCkKLXsKLQl1MzIgZGxsX3N0YXRlID0gU0RSQ19ETExBX0NUUkw7CQkvKiBkbGxhIGFuZCBkbGxiIGFyZSBhIHNldCAqLwotCi0JaWYgKChkbGxfc3RhdGUgJiAoMSA8PCAyKSkgPT0gKDEgPDwgMikpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgb21hcDJfcmVwcm9ncmFtX3NkcmModTMyIGxldmVsLCB1MzIgZm9yY2UpCi17Ci0JdTMyIHNsb3dfZGxsX2N0cmwsIGZhc3RfZGxsX2N0cmwsIG1fdHlwZTsKLQl1MzIgcHJldiA9IGN1cnJfcGVyZl9sZXZlbCwgZmxhZ3M7Ci0KLQlpZiAoKGN1cnJfcGVyZl9sZXZlbCA9PSBsZXZlbCkgJiYgIWZvcmNlKQotCQlyZXR1cm4gcHJldjsKLQotCW1fdHlwZSA9IG9tYXAyX21lbW9yeV9nZXRfdHlwZSgpOwotCXNsb3dfZGxsX2N0cmwgPSBvbWFwMl9tZW1vcnlfZ2V0X3Nsb3dfZGxsX2N0cmwoKTsKLQlmYXN0X2RsbF9jdHJsID0gb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKCk7Ci0KLQlpZiAobGV2ZWwgPT0gUFJDTV9IQUxGX1NQRUVEKSB7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJUFJDTV9WT0xUU0VUVVAgPSAweGZmZmY7Ci0JCW9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMoUFJDTV9IQUxGX1NQRUVELAotCQkJCQkgIHNsb3dfZGxsX2N0cmwsIG1fdHlwZSk7Ci0JCWN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fSEFMRl9TUEVFRDsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLQlpZiAobGV2ZWwgPT0gUFJDTV9GVUxMX1NQRUVEKSB7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJUFJDTV9WT0xUU0VUVVAgPSAweGZmZmY7Ci0JCW9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELAotCQkJCQkgIGZhc3RfZGxsX2N0cmwsIG1fdHlwZSk7Ci0JCWN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fRlVMTF9TUEVFRDsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLQotCXJldHVybiBwcmV2OwotfQotCi1zdGF0aWMgaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgZmxhZ3MsIGN1cl9yYXRlLCBsb3csIG11bHQsIGRpdiwgdmFsaWRfcmF0ZSwgZG9uZV9yYXRlOwotCXUzMiBieXBhc3MgPSAwOwotCXN0cnVjdCBwcmNtX2NvbmZpZyB0bXBzZXQ7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKCZkcGxsX2NrKTsKLQltdWx0ID0gQ01fQ0xLU0VMMl9QTEwgJiAweDM7Ci0KLQlpZiAoKHJhdGUgPT0gKGN1cl9yYXRlIC8gMikpICYmIChtdWx0ID09IDIpKSB7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fSEFMRl9TUEVFRCwgMSk7Ci0JfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsKLQl9IGVsc2UgaWYgKHJhdGUgIT0gY3VyX3JhdGUpIHsKLQkJdmFsaWRfcmF0ZSA9IG9tYXAyX2RwbGxfcm91bmRfcmF0ZShyYXRlKTsKLQkJaWYgKHZhbGlkX3JhdGUgIT0gcmF0ZSkKLQkJCWdvdG8gZHBsbF9leGl0OwotCi0JCWlmICgoQ01fQ0xLU0VMMl9QTEwgJiAweDMpID09IDEpCi0JCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOwotCQllbHNlCi0JCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKLQotCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgPSBDTV9DTEtTRUwxX1BMTDsKLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsICY9IH4oMHgzRkZGIDw8IDgpOwotCQlkaXYgPSAoKGN1cnJfcHJjbV9zZXQtPnh0YWxfc3BlZWQgLyAxMDAwMDAwKSAtIDEpOwotCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgPSBDTV9DTEtTRUwyX1BMTDsKLQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsICY9IH4weDM7Ci0JCWlmIChyYXRlID4gbG93KSB7Ci0JCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gMHgyOwotCQkJbXVsdCA9ICgocmF0ZSAvIDIpIC8gMTAwMDAwMCk7Ci0JCQlkb25lX3JhdGUgPSBQUkNNX0ZVTExfU1BFRUQ7Ci0JCX0gZWxzZSB7Ci0JCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gMHgxOwotCQkJbXVsdCA9IChyYXRlIC8gMTAwMDAwMCk7Ci0JCQlkb25lX3JhdGUgPSBQUkNNX0hBTEZfU1BFRUQ7Ci0JCX0KLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9ICgoZGl2IDw8IDgpIHwgKG11bHQgPDwgMTIpKTsKLQotCQkvKiBXb3JzdCBjYXNlICovCi0JCXRtcHNldC5iYXNlX3NkcmNfcmZyID0gVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1M7Ci0KLQkJaWYgKHJhdGUgPT0gY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCkJLyogSWYgYXNraW5nIGZvciAxLTEgKi8KLQkJCWJ5cGFzcyA9IDE7Ci0KLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsgLyogRm9yIGluaXRfbWVtICovCi0KLQkJLyogRm9yY2UgZGxsIGxvY2sgbW9kZSAqLwotCQlvbWFwMl9zZXRfcHJjbSh0bXBzZXQuY21fY2xrc2VsMV9wbGwsIHRtcHNldC5iYXNlX3NkcmNfcmZyLAotCQkJICAgICAgIGJ5cGFzcyk7Ci0KLQkJLyogRXJyYXRhOiByZXQgZGxsIGVudHJ5IHN0YXRlICovCi0JCW9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyhvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKCkpOwotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhkb25lX3JhdGUsIDApOwotCX0KLQlvbWFwMl9jbGtzZWxfcmVjYWxjKCZkcGxsX2NrKTsKLQlyZXQgPSAwOwotCi1kcGxsX2V4aXQ6Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybihyZXQpOwotfQotCi0vKiBKdXN0IHJldHVybiB0aGUgTVBVIHNwZWVkICovCi1zdGF0aWMgdm9pZCBvbWFwMl9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCi17Ci0JY2xrLT5yYXRlID0gY3Vycl9wcmNtX3NldC0+bXB1X3NwZWVkOwotfQotCi0vKgotICogTG9vayBmb3IgYSByYXRlIGVxdWFsIG9yIGxlc3MgdGhhbiB0aGUgdGFyZ2V0IHJhdGUgZ2l2ZW4gYSBjb25maWd1cmF0aW9uIHNldC4KKy8qKgorICogb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IoKSAtIHR1cm4gY2xrc2VsIGZpZWxkIHZhbHVlIGludG8gaW50ZWdlciBkaXZpZGVyCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCisgKiBAZmllbGRfdmFsOiByZWdpc3RlciBmaWVsZCB2YWx1ZSB0byBmaW5kCiAgKgotICogV2hhdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpcyAid2hpY2giIGZpZWxkIHJlcHJlc2VudHMgdGhlIGtleSBmaWVsZC4KLSAqIFNvbWUgbWlnaHQgYXJndWUgTDMtRERSLCBvdGhlcnMgQVJNLCBvdGhlcnMgSVZBLiBUaGlzIGNvZGUgaXMgc2ltcGxlIGFuZAotICoganVzdCB1c2VzIHRoZSBBUk0gcmF0ZXMuCisgKiBHaXZlbiBhIHN0cnVjdCBjbGsgb2YgYSByYXRlLXNlbGVjdGFibGUgY2xrc2VsIGNsb2NrLCBhbmQgYSByZWdpc3RlciBmaWVsZAorICogdmFsdWUgdG8gc2VhcmNoIGZvciwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBjbG9jayBkaXZpc29yLiAgVGhlIHJlZ2lzdGVyCisgKiBmaWVsZCB2YWx1ZSBzaG91bGQgYmUgcHJlLW1hc2tlZCBhbmQgc2hpZnRlZCBkb3duIHNvIHRoZSBMU0IgaXMgYXQgYml0IDAKKyAqIGJlZm9yZSBjYWxsaW5nLiAgUmV0dXJucyAwIG9uIGVycm9yCiAgKi8KLXN0YXRpYyBsb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQordTMyIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKHN0cnVjdCBjbGsgKmNsaywgdTMyIGZpZWxkX3ZhbCkKIHsKLQlzdHJ1Y3QgcHJjbV9jb25maWcgKiBwdHI7Ci0JbG9uZyBoaWdoZXN0X3JhdGU7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CiAKLQlpZiAoY2xrICE9ICZ2aXJ0X3ByY21fc2V0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7CisJaWYgKGNsa3MgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKLQloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOwotCi0JZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPm1wdV9zcGVlZDsgcHRyKyspIHsKLQkJaWYgKHB0ci0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+bXB1X3NwZWVkOwotCi0JCS8qIENhbiBjaGVjayBvbmx5IGFmdGVyIHh0YWwgZnJlcXVlbmN5IGNoZWNrICovCi0JCWlmIChwdHItPm1wdV9zcGVlZCA8PSByYXRlKQorCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgeworCQlpZiAoKGNsa3ItPmZsYWdzICYgY3B1X21hc2spICYmIChjbGtyLT52YWwgPT0gZmllbGRfdmFsKSkKIAkJCWJyZWFrOwogCX0KLQlyZXR1cm4gaGlnaGVzdF9yYXRlOwotfQogCi0vKgotICogb21hcDJfY29udmVydF9maWVsZF90b19kaXYoKSAtIHR1cm4gZmllbGQgdmFsdWUgaW50byBpbnRlZ2VyIGRpdmlkZXIKLSAqLwotc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcih1MzIgZGl2X3NlbCwgdTMyIGZpZWxkX3ZhbCkKLXsKLQl1MzIgaTsKLQl1MzIgY2xrb3V0X2FycmF5W10gPSB7MSwgMiwgNCwgOCwgMTZ9OwotCi0JaWYgKChkaXZfc2VsICYgU1JDX1JBVEVfU0VMX01BU0spID09IENNX1NZU0NMS09VVF9TRUwxKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCWlmIChmaWVsZF92YWwgPT0gaSkKLQkJCQlyZXR1cm4gY2xrb3V0X2FycmF5W2ldOwotCQl9Ci0JCXJldHVybiB+MDsKLQl9IGVsc2UKLQkJcmV0dXJuIGZpZWxkX3ZhbDsKLX0KLQotLyoKLSAqIFJldHVybnMgdGhlIENMS1NFTCBkaXZpZGVyIHJlZ2lzdGVyIHZhbHVlCi0gKiBSRVZJU0lUOiBUaGlzIHNob3VsZCBiZSBjbGVhbmVkIHVwIHRvIHdvcmsgbmljZWx5IHdpdGggdm9pZCBfX2lvbWVtICoKLSAqLwotc3RhdGljIHUzMiBvbWFwMl9nZXRfY2xrc2VsKHUzMiAqZGl2X3NlbCwgdTMyICpmaWVsZF9tYXNrLAotCQkJICAgIHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcmV0ID0gfjA7Ci0JdTMyIHJlZ192YWwsIGRpdl9vZmY7Ci0JdTMyIGRpdl9hZGRyID0gMDsKLQl1MzIgbWFzayA9IH4wOwotCi0JZGl2X29mZiA9IGNsay0+cmF0ZV9vZmZzZXQ7Ci0KLQlzd2l0Y2ggKCgqZGl2X3NlbCAmIFNSQ19SQVRFX1NFTF9NQVNLKSkgewotCWNhc2UgQ01fTVBVX1NFTDE6Ci0JCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX01QVTsKLQkJbWFzayA9IDB4MWY7Ci0JCWJyZWFrOwotCWNhc2UgQ01fRFNQX1NFTDE6Ci0JCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX0RTUDsKLQkJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7Ci0JCQlpZiAoKGRpdl9vZmYgPT0gMCkgfHwgKGRpdl9vZmYgPT0gOCkpCi0JCQkJbWFzayA9IDB4MWY7Ci0JCQllbHNlIGlmIChkaXZfb2ZmID09IDUpCi0JCQkJbWFzayA9IDB4MzsKLQkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0MzAoKSkgewotCQkJaWYgKGRpdl9vZmYgPT0gMCkKLQkJCQltYXNrID0gMHgxZjsKLQkJCWVsc2UgaWYgKGRpdl9vZmYgPT0gNSkKLQkJCQltYXNrID0gMHgzOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQ01fR0ZYX1NFTDE6Ci0JCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX0dGWDsKLQkJaWYgKGRpdl9vZmYgPT0gMCkKLQkJCW1hc2sgPSAweDc7Ci0JCWJyZWFrOwotCWNhc2UgQ01fTU9ERU1fU0VMMToKLQkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUxfTURNOwotCQlpZiAoZGl2X29mZiA9PSAwKQotCQkJbWFzayA9IDB4ZjsKLQkJYnJlYWs7Ci0JY2FzZSBDTV9TWVNDTEtPVVRfU0VMMToKLQkJZGl2X2FkZHIgPSAodTMyKSZQUkNNX0NMS09VVF9DVFJMOwotCQlpZiAoKGRpdl9vZmYgPT0gMykgfHwgKGRpdl9vZmYgPT0gMTEpKQotCQkJbWFzaz0gMHgzOwotCQlicmVhazsKLQljYXNlIENNX0NPUkVfU0VMMToKLQkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX0NPUkU7Ci0JCXN3aXRjaCAoZGl2X29mZikgewotCQljYXNlIDA6CQkJCQkvKiBsMyAqLwotCQljYXNlIDg6CQkJCQkvKiBkc3MxICovCi0JCWNhc2UgMTU6CQkJCS8qIHZ5bG5jLTI0MjAgKi8KLQkJY2FzZSAyMDoJCQkJLyogc3NpICovCi0JCQltYXNrID0gMHgxZjsgYnJlYWs7Ci0JCWNhc2UgNToJCQkJCS8qIGw0ICovCi0JCQltYXNrID0gMHgzOyBicmVhazsKLQkJY2FzZSAxMzoJCQkJLyogZHNzMiAqLwotCQkJbWFzayA9IDB4MTsgYnJlYWs7Ci0JCWNhc2UgMjU6CQkJCS8qIHVzYiAqLwotCQkJbWFzayA9IDB4NzsgYnJlYWs7Ci0JCX0KKwlpZiAoIWNsa3ItPmRpdikgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBDb3VsZCBub3QgZmluZCBmaWVsZHZhbCAlZCBmb3IgIgorCQkgICAgICAgImNsb2NrICVzIHBhcmVudCAlc1xuIiwgZmllbGRfdmFsLCBjbGstPm5hbWUsCisJCSAgICAgICBjbGstPnBhcmVudC0+bmFtZSk7CisJCXJldHVybiAwOwogCX0KIAotCSpmaWVsZF9tYXNrID0gbWFzazsKLQotCWlmICh1bmxpa2VseShtYXNrID09IH4wKSkKLQkJZGl2X2FkZHIgPSAwOwotCi0JKmRpdl9zZWwgPSBkaXZfYWRkcjsKLQotCWlmICh1bmxpa2VseShkaXZfYWRkciA9PSAwKSkKLQkJcmV0dXJuIHJldDsKLQotCS8qIElzb2xhdGUgZmllbGQgKi8KLQlyZWdfdmFsID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKWRpdl9hZGRyKSAmIChtYXNrIDw8IGRpdl9vZmYpOwotCi0JLyogTm9ybWFsaXplIGJhY2sgdG8gZGl2aWRlciB2YWx1ZSAqLwotCXJlZ192YWwgPj49IGRpdl9vZmY7Ci0KLQlyZXR1cm4gcmVnX3ZhbDsKKwlyZXR1cm4gY2xrci0+ZGl2OwogfQogCi0vKgotICogUmV0dXJuIGRpdmlkZXIgdG8gYmUgYXBwbGllZCB0byBwYXJlbnQgY2xvY2suCi0gKiBSZXR1cm4gMCBvbiBlcnJvci4KKy8qKgorICogb21hcDJfZGl2aXNvcl90b19jbGtzZWwoKSAtIHR1cm4gY2xrc2VsIGludGVnZXIgZGl2aXNvciBpbnRvIGEgZmllbGQgdmFsdWUKKyAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKKyAqIEBkaXY6IGludGVnZXIgZGl2aXNvciB0byBzZWFyY2ggZm9yCisgKgorICogR2l2ZW4gYSBzdHJ1Y3QgY2xrIG9mIGEgcmF0ZS1zZWxlY3RhYmxlIGNsa3NlbCBjbG9jaywgYW5kIGEgY2xvY2sgZGl2aXNvciwKKyAqIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgZmllbGQgdmFsdWUuICBUaGUgcmV0dXJuIHJlZ2lzdGVyIHZhbHVlIGlzCisgKiB0aGUgdmFsdWUgYmVmb3JlIGxlZnQtc2hpZnRpbmcuICBSZXR1cm5zIDB4ZmZmZmZmZmYgb24gZXJyb3IKICAqLwotc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKQordTMyIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyIGRpdikKIHsKLQlpbnQgcmV0ID0gMDsKLQl1MzIgZGl2LCBkaXZfc2VsLCBkaXZfb2ZmLCBmaWVsZF9tYXNrLCBmaWVsZF92YWw7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CiAKLQkvKiBpc29sYXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7CisJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCVdBUk5fT04oZGl2ID09IDApOwogCi0JZGl2X29mZiA9IGNsay0+cmF0ZV9vZmZzZXQ7Ci0JZmllbGRfdmFsID0gb21hcDJfZ2V0X2Nsa3NlbCgmZGl2X3NlbCwgJmZpZWxkX21hc2ssIGNsayk7Ci0JaWYgKGRpdl9zZWwgPT0gMCkKLQkJcmV0dXJuIHJldDsKKwljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7CisJaWYgKGNsa3MgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKLQlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7Ci0JZGl2ID0gb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IoZGl2X3NlbCwgZmllbGRfdmFsKTsKKwlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKKwkJaWYgKChjbGtyLT5mbGFncyAmIGNwdV9tYXNrKSAmJiAoY2xrci0+ZGl2ID09IGRpdikpCisJCQlicmVhazsKKwl9CiAKLQlyZXR1cm4gZGl2OworCWlmICghY2xrci0+ZGl2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IENvdWxkIG5vdCBmaW5kIGRpdmlzb3IgJWQgZm9yICIKKwkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGRpdiwgY2xrLT5uYW1lLAorCQkgICAgICAgY2xrLT5wYXJlbnQtPm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gY2xrci0+dmFsOwogfQogCisvKioKKyAqIG9tYXAyX2dldF9jbGtzZWwgLSBmaW5kIGNsa3NlbCByZWdpc3RlciBhZGRyICYgZmllbGQgbWFzayBmb3IgYSBjbGsKKyAqIEBjbGs6IHN0cnVjdCBjbGsgdG8gdXNlCisgKiBAZmllbGRfbWFzazogcHRyIHRvIHUzMiB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgZmllbGQgbWFzaworICoKKyAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNsa3NlbCByZWdpc3RlciB1cG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KKyAqLwordm9pZCBfX2lvbWVtICpvbWFwMl9nZXRfY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyICpmaWVsZF9tYXNrKQoreworCWlmICh1bmxpa2VseSgoY2xrLT5jbGtzZWxfcmVnID09IDApIHx8IChjbGstPmNsa3NlbF9tYXNrID09IDApKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkqZmllbGRfbWFzayA9IGNsay0+Y2xrc2VsX21hc2s7CisKKwlyZXR1cm4gY2xrLT5jbGtzZWxfcmVnOworfQorCisvKioKKyAqIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvciAtIGdldCBjdXJyZW50IGRpdmlkZXIgYXBwbGllZCB0byBwYXJlbnQgY2xvY2suCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlLgorICoKKyAqIFJldHVybnMgdGhlIGludGVnZXIgZGl2aXNvciB1cG9uIHN1Y2Nlc3Mgb3IgMCBvbiBlcnJvci4KKyAqLwordTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGZpZWxkX21hc2ssIGZpZWxkX3ZhbDsKKwl2b2lkIF9faW9tZW0gKmRpdl9hZGRyOworCisJZGl2X2FkZHIgPSBvbWFwMl9nZXRfY2xrc2VsKGNsaywgJmZpZWxkX21hc2spOworCWlmIChkaXZfYWRkciA9PSAwKQorCQlyZXR1cm4gMDsKKworCWZpZWxkX3ZhbCA9IF9fcmF3X3JlYWRsKGRpdl9hZGRyKSAmIGZpZWxkX21hc2s7CisJZmllbGRfdmFsID4+PSBfX2ZmcyhmaWVsZF9tYXNrKTsKKworCXJldHVybiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihjbGssIGZpZWxkX3ZhbCk7Cit9CisKK2ludCBvbWFwMl9jbGtzZWxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGZpZWxkX21hc2ssIGZpZWxkX3ZhbCwgcmVnX3ZhbCwgdmFsaWRyYXRlLCBuZXdfZGl2ID0gMDsKKwl2b2lkIF9faW9tZW0gKmRpdl9hZGRyOworCisJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KGNsaywgcmF0ZSwgJm5ld19kaXYpOworCWlmICh2YWxpZHJhdGUgIT0gcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXZfYWRkciA9IG9tYXAyX2dldF9jbGtzZWwoY2xrLCAmZmllbGRfbWFzayk7CisJaWYgKGRpdl9hZGRyID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZmllbGRfdmFsID0gb21hcDJfZGl2aXNvcl90b19jbGtzZWwoY2xrLCBuZXdfZGl2KTsKKwlpZiAoZmllbGRfdmFsID09IH4wKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZ192YWwgPSBfX3Jhd19yZWFkbChkaXZfYWRkcik7CisJcmVnX3ZhbCAmPSB+ZmllbGRfbWFzazsKKwlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgX19mZnMoZmllbGRfbWFzaykpOworCV9fcmF3X3dyaXRlbChyZWdfdmFsLCBkaXZfYWRkcik7CisJd21iKCk7CisKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG5ld19kaXY7CisKKwlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQICYmIGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCV9fcmF3X3dyaXRlbChPTUFQMjRYWF9WQUxJRF9DT05GSUcsIE9NQVAyNFhYX1BSQ01fQ0xLQ0ZHX0NUUkwpOworCQl3bWIoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCiAvKiBTZXQgdGhlIGNsb2NrIHJhdGUgZm9yIGEgY2xvY2sgc291cmNlICovCi1zdGF0aWMgaW50IG9tYXAyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLQoraW50IG9tYXAyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQl2b2lkIF9faW9tZW0gKiByZWc7Ci0JdTMyIGRpdl9zZWwsIGRpdl9vZmYsIGZpZWxkX21hc2ssIGZpZWxkX3ZhbCwgcmVnX3ZhbCwgdmFsaWRyYXRlOwotCXUzMiBuZXdfZGl2ID0gMDsKIAotCWlmICghKGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpICYmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkpIHsKLQkJaWYgKGNsayA9PSAmZHBsbF9jaykKLQkJCXJldHVybiBvbWFwMl9yZXByb2dyYW1fZHBsbChjbGssIHJhdGUpOworCXByX2RlYnVnKCJjbG9jazogc2V0X3JhdGUgZm9yIGNsb2NrICVzIHRvIHJhdGUgJWxkXG4iLCBjbGstPm5hbWUsIHJhdGUpOwogCi0JCS8qIElzb2xhdGUgY29udHJvbCByZWdpc3RlciAqLwotCQlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7Ci0JCWRpdl9vZmYgPSBjbGstPnJhdGVfb2Zmc2V0OworCS8qIENPTkZJR19QQVJUSUNJUEFOVCBjbG9ja3MgYXJlIGNoYW5nZWQgb25seSBpbiBzZXRzIHZpYSB0aGUKKwkgICByYXRlIHRhYmxlIG1lY2hhbmlzbSwgZHJpdmVuIGJ5IG1wdV9zcGVlZCAgKi8KKwlpZiAoY2xrLT5mbGFncyAmIENPTkZJR19QQVJUSUNJUEFOVCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAmbmV3X2Rpdik7Ci0JCWlmICh2YWxpZHJhdGUgIT0gcmF0ZSkKLQkJCXJldHVybihyZXQpOwotCi0JCWZpZWxkX3ZhbCA9IG9tYXAyX2dldF9jbGtzZWwoJmRpdl9zZWwsICZmaWVsZF9tYXNrLCBjbGspOwotCQlpZiAoZGl2X3NlbCA9PSAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlpZiAoY2xrLT5mbGFncyAmIENNX1NZU0NMS09VVF9TRUwxKSB7Ci0JCQlzd2l0Y2ggKG5ld19kaXYpIHsKLQkJCWNhc2UgMTY6Ci0JCQkJZmllbGRfdmFsID0gNDsKLQkJCQlicmVhazsKLQkJCWNhc2UgODoKLQkJCQlmaWVsZF92YWwgPSAzOwotCQkJCWJyZWFrOwotCQkJY2FzZSA0OgotCQkJCWZpZWxkX3ZhbCA9IDI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI6Ci0JCQkJZmllbGRfdmFsID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQlmaWVsZF92YWwgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UKLQkJCWZpZWxkX3ZhbCA9IG5ld19kaXY7Ci0KLQkJcmVnID0gKHZvaWQgX19pb21lbSAqKWRpdl9zZWw7Ci0KLQkJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JCXJlZ192YWwgJj0gfihmaWVsZF9tYXNrIDw8IGRpdl9vZmYpOwotCQlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgZGl2X29mZik7Ci0JCV9fcmF3X3dyaXRlbChyZWdfdmFsLCByZWcpOwotCQl3bWIoKTsKLQkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmaWVsZF92YWw7Ci0KLQkJaWYgKGNsay0+ZmxhZ3MgJiBERUxBWUVEX0FQUCkgewotCQkJX19yYXdfd3JpdGVsKDB4MSwgKHZvaWQgX19pb21lbSAqKSZQUkNNX0NMS0NGR19DVFJMKTsKLQkJCXdtYigpOwotCQl9Ci0JCXJldCA9IDA7Ci0JfSBlbHNlIGlmIChjbGstPnNldF9yYXRlICE9IDApCisJLyogZHBsbF9jaywgY29yZV9jaywgdmlydF9wcmNtX3NldDsgcGx1cyBhbGwgY2xrc2VsIGNsb2NrcyAqLworCWlmIChjbGstPnNldF9yYXRlICE9IDApCiAJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQpAQCAtNzgyLDI0MiArNjMxLDkyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogQ29udmVydHMgZW5jb2RlZCBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgaW50byBhIGZ1bGwgYWRkcmVzcyAqLwotc3RhdGljIHUzMiBvbWFwMl9nZXRfc3JjX2ZpZWxkKHUzMiAqdHlwZV90b19hZGRyLCB1MzIgcmVnX29mZnNldCwKLQkJCSAgICAgICBzdHJ1Y3QgY2xrICpzcmNfY2xrLCB1MzIgKmZpZWxkX21hc2spCisvKgorICogQ29udmVydHMgZW5jb2RlZCBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgaW50byBhIGZ1bGwgYWRkcmVzcworICogT24gZXJyb3IsICpzcmNfYWRkciB3aWxsIGJlIHJldHVybmVkIGFzIDAuCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQodm9pZCBfX2lvbWVtICoqc3JjX2FkZHIsCisJCQkJICAgICAgc3RydWN0IGNsayAqc3JjX2NsaywgdTMyICpmaWVsZF9tYXNrLAorCQkJCSAgICAgIHN0cnVjdCBjbGsgKmNsaywgdTMyICpwYXJlbnRfZGl2KQogewotCXUzMiB2YWwgPSB+MCwgc3JjX3JlZ19hZGRyID0gMCwgbWFzayA9IDA7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CiAKLQkvKiBGaW5kIHRhcmdldCBjb250cm9sIHJlZ2lzdGVyLiovCi0Jc3dpdGNoICgoKnR5cGVfdG9fYWRkciAmIFNSQ19SQVRFX1NFTF9NQVNLKSkgewotCWNhc2UgQ01fQ09SRV9TRUwxOgotCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX0NPUkU7Ci0JCWlmIChyZWdfb2Zmc2V0ID09IDEzKSB7CQkJLyogRFNTMl9mY2xrICovCi0JCQltYXNrID0gMHgxOwotCQkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKLQkJCQl2YWwgPSAwOwotCQkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfNDhtX2NrKQotCQkJCXZhbCA9IDE7Ci0JCX0gZWxzZSBpZiAocmVnX29mZnNldCA9PSA4KSB7CQkvKiBEU1MxX2ZjbGsgKi8KLQkJCW1hc2sgPSAweDFmOwotCQkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKLQkJCQl2YWwgPSAwOwotCQkJZWxzZSBpZiAoc3JjX2NsayA9PSAmY29yZV9jaykJLyogZGl2aWRlZCBjbG9jayAqLwotCQkJCXZhbCA9IDB4MTA7CQkvKiByYXRlIG5lZWRzIGZpeGluZyAqLwotCQl9IGVsc2UgaWYgKChyZWdfb2Zmc2V0ID09IDE1KSAmJiBjcHVfaXNfb21hcDI0MjAoKSl7IC8qdmxueXEqLwotCQkJbWFzayA9IDB4MUY7Ci0JCQlpZihzcmNfY2xrID09ICZmdW5jXzk2bV9jaykKLQkJCQl2YWwgPSAwOwotCQkJZWxzZSBpZiAoc3JjX2NsayA9PSAmY29yZV9jaykKLQkJCQl2YWwgPSAweDEwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQ01fQ09SRV9TRUwyOgotCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwyX0NPUkU7Ci0JCW1hc2sgPSAweDM7Ci0JCWlmIChzcmNfY2xrID09ICZmdW5jXzMya19jaykKLQkJCXZhbCA9IDB4MDsKLQkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKLQkJCXZhbCA9IDB4MTsKLQkJaWYgKHNyY19jbGsgPT0gJmFsdF9jaykKLQkJCXZhbCA9IDB4MjsKLQkJYnJlYWs7Ci0JY2FzZSBDTV9XS1VQX1NFTDE6Ci0JCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9XS1VQOwotCQltYXNrID0gMHgzOwotCQlpZiAoc3JjX2NsayA9PSAmZnVuY18zMmtfY2spCi0JCQl2YWwgPSAweDA7Ci0JCWlmIChzcmNfY2xrID09ICZzeXNfY2spCi0JCQl2YWwgPSAweDE7Ci0JCWlmIChzcmNfY2xrID09ICZhbHRfY2spCi0JCQl2YWwgPSAweDI7Ci0JCWJyZWFrOwotCWNhc2UgQ01fUExMX1NFTDE6Ci0JCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDFfUExMOwotCQltYXNrID0gMHgxOwotCQlpZiAocmVnX29mZnNldCA9PSAweDMpIHsKLQkJCWlmIChzcmNfY2xrID09ICZhcGxsOTZfY2spCi0JCQkJdmFsID0gMDsKLQkJCWlmIChzcmNfY2xrID09ICZhbHRfY2spCi0JCQkJdmFsID0gMTsKLQkJfQotCQllbHNlIGlmIChyZWdfb2Zmc2V0ID09IDB4NSkgewotCQkJaWYgKHNyY19jbGsgPT0gJmFwbGw1NF9jaykKLQkJCQl2YWwgPSAwOwotCQkJaWYgKHNyY19jbGsgPT0gJmFsdF9jaykKLQkJCQl2YWwgPSAxOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQ01fUExMX1NFTDI6Ci0JCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDJfUExMOwotCQltYXNrID0gMHgzOwotCQlpZiAoc3JjX2NsayA9PSAmZnVuY18zMmtfY2spCi0JCQl2YWwgPSAweDA7Ci0JCWlmIChzcmNfY2xrID09ICZkcGxsX2NrKQotCQkJdmFsID0gMHgyOwotCQlicmVhazsKLQljYXNlIENNX1NZU0NMS09VVF9TRUwxOgotCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZQUkNNX0NMS09VVF9DVFJMOwotCQltYXNrID0gMHgzOwotCQlpZiAoc3JjX2NsayA9PSAmZHBsbF9jaykKLQkJCXZhbCA9IDA7Ci0JCWlmIChzcmNfY2xrID09ICZzeXNfY2spCi0JCQl2YWwgPSAxOwotCQlpZiAoc3JjX2NsayA9PSAmZnVuY185Nm1fY2spCi0JCQl2YWwgPSAyOwotCQlpZiAoc3JjX2NsayA9PSAmZnVuY181NG1fY2spCi0JCQl2YWwgPSAzOwotCQlicmVhazsKKwkqcGFyZW50X2RpdiA9IDA7CisJKnNyY19hZGRyID0gMDsKKworCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIHNyY19jbGspOworCWlmIChjbGtzID09IE5VTEwpCisJCXJldHVybiAwOworCisJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CisJCWlmIChjbGtyLT5mbGFncyAmIChjcHVfbWFzayB8IERFRkFVTFRfUkFURSkpCisJCQlicmVhazsgLyogRm91bmQgdGhlIGRlZmF1bHQgcmF0ZSBmb3IgdGhpcyBwbGF0Zm9ybSAqLwogCX0KIAotCWlmICh2YWwgPT0gfjApCQkJLyogQ2F0Y2ggZXJyb3JzIGluIG9mZnNldCAqLwotCQkqdHlwZV90b19hZGRyID0gMDsKLQllbHNlCi0JCSp0eXBlX3RvX2FkZHIgPSBzcmNfcmVnX2FkZHI7Ci0JKmZpZWxkX21hc2sgPSBtYXNrOworCWlmICghY2xrci0+ZGl2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IENvdWxkIG5vdCBmaW5kIGRlZmF1bHQgcmF0ZSBmb3IgIgorCQkgICAgICAgImNsb2NrICVzIHBhcmVudCAlc1xuIiwgY2xrLT5uYW1lLAorCQkgICAgICAgc3JjX2Nsay0+cGFyZW50LT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JcmV0dXJuIHZhbDsKKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAgQWRkIGEgY2xrc2VsIG1hc2sgdG8gdGhlIHN0cnVjdCBjbGsuICovCisJV0FSTl9PTihjbGstPmNsa3NlbF9tYXNrID09IDApOworCisJKmZpZWxkX21hc2sgPSBjbGstPmNsa3NlbF9tYXNrOworCSpzcmNfYWRkciA9IGNsay0+Y2xrc2VsX3JlZzsKKwkqcGFyZW50X2RpdiA9IGNsa3ItPmRpdjsKKworCXJldHVybiBjbGtyLT52YWw7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDJfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpuZXdfcGFyZW50KQoraW50IG9tYXAyX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqbmV3X3BhcmVudCkKIHsKLQl2b2lkIF9faW9tZW0gKiByZWc7Ci0JdTMyIHNyY19zZWwsIHNyY19vZmYsIGZpZWxkX3ZhbCwgZmllbGRfbWFzaywgcmVnX3ZhbCwgcmF0ZTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKKwl2b2lkIF9faW9tZW0gKnNyY19hZGRyOworCXUzMiBmaWVsZF92YWwsIGZpZWxkX21hc2ssIHJlZ192YWwsIHBhcmVudF9kaXY7CiAKIAlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIENPTkZJR19QQVJUSUNJUEFOVCkpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBTUkNfU0VMX01BU0spIHsJLyogT24tY2hpcCBTRUwgY29sbGVjdGlvbiAqLwotCQlzcmNfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7Ci0JCXNyY19vZmYgPSBjbGstPnNyY19vZmZzZXQ7CisJaWYgKCFjbGstPmNsa3NlbCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKHNyY19zZWwgPT0gMCkKLQkJCWdvdG8gc2V0X3BhcmVudF9lcnJvcjsKKwlmaWVsZF92YWwgPSBvbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZCgmc3JjX2FkZHIsIG5ld19wYXJlbnQsCisJCQkJCSAgICAgICAmZmllbGRfbWFzaywgY2xrLCAmcGFyZW50X2Rpdik7CisJaWYgKHNyY19hZGRyID09IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWZpZWxkX3ZhbCA9IG9tYXAyX2dldF9zcmNfZmllbGQoJnNyY19zZWwsIHNyY19vZmYsIG5ld19wYXJlbnQsCi0JCQkJCQkmZmllbGRfbWFzayk7CisJaWYgKGNsay0+dXNlY291bnQgPiAwKQorCQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKIAotCQlyZWcgPSAodm9pZCBfX2lvbWVtICopc3JjX3NlbDsKKwkvKiBTZXQgbmV3IHNvdXJjZSB2YWx1ZSAocHJldmlvdXMgZGl2aWRlcnMgaWYgYW55IGluIGVmZmVjdCkgKi8KKwlyZWdfdmFsID0gX19yYXdfcmVhZGwoc3JjX2FkZHIpICYgfmZpZWxkX21hc2s7CisJcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IF9fZmZzKGZpZWxkX21hc2spKTsKKwlfX3Jhd193cml0ZWwocmVnX3ZhbCwgc3JjX2FkZHIpOworCXdtYigpOwogCi0JCWlmIChjbGstPnVzZWNvdW50ID4gMCkKLQkJCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOwotCi0JCS8qIFNldCBuZXcgc291cmNlIHZhbHVlIChwcmV2aW91cyBkaXZpZGVycyBpZiBhbnkgaW4gZWZmZWN0KSAqLwotCQlyZWdfdmFsID0gX19yYXdfcmVhZGwocmVnKSAmIH4oZmllbGRfbWFzayA8PCBzcmNfb2ZmKTsKLQkJcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IHNyY19vZmYpOwotCQlfX3Jhd193cml0ZWwocmVnX3ZhbCwgcmVnKTsKKwlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQICYmIGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCV9fcmF3X3dyaXRlbChPTUFQMjRYWF9WQUxJRF9DT05GSUcsIE9NQVAyNFhYX1BSQ01fQ0xLQ0ZHX0NUUkwpOwogCQl3bWIoKTsKLQotCQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQKSB7Ci0JCQlfX3Jhd193cml0ZWwoMHgxLCAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLQ0ZHX0NUUkwpOwotCQkJd21iKCk7Ci0JCX0KLQkJaWYgKGNsay0+dXNlY291bnQgPiAwKQotCQkJX29tYXAyX2Nsa19lbmFibGUoY2xrKTsKLQotCQljbGstPnBhcmVudCA9IG5ld19wYXJlbnQ7Ci0KLQkJLyogU1JDX1JBVEVfU0VMX01BU0sgY2xvY2tzIGZvbGxvdyB0aGVpciBwYXJlbnRzIHJhdGVzLiovCi0JCWlmICgobmV3X3BhcmVudCA9PSAmY29yZV9jaykgJiYgKGNsayA9PSAmZHNzMV9mY2spKQotCQkJY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZSAvIDB4MTA7Ci0JCWVsc2UKLQkJCWNsay0+cmF0ZSA9IG5ld19wYXJlbnQtPnJhdGU7Ci0KLQkJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKLQotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQljbGstPnBhcmVudCA9IG5ld19wYXJlbnQ7Ci0JCXJhdGUgPSBuZXdfcGFyZW50LT5yYXRlOwotCQlvbWFwMl9jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKLQkJcmV0ID0gMDsKIAl9CiAKLSBzZXRfcGFyZW50X2Vycm9yOgotCXJldHVybiByZXQ7Ci19CisJaWYgKGNsay0+dXNlY291bnQgPiAwKQorCQlfb21hcDJfY2xrX2VuYWJsZShjbGspOwogCi0vKiBTZXRzIGJhc2ljIGNsb2NrcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHJhdGUgKi8KLXN0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBmbGFncywgY3VyX3JhdGUsIGRvbmVfcmF0ZSwgYnlwYXNzID0gMDsKLQl1OCBjcHVfbWFzayA9IDA7Ci0Jc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXVuc2lnbmVkIGxvbmcgZm91bmRfc3BlZWQgPSAwOworCWNsay0+cGFyZW50ID0gbmV3X3BhcmVudDsKIAotCWlmIChjbGsgIT0gJnZpcnRfcHJjbV9zZXQpCi0JCXJldHVybiAtRUlOVkFMOworCS8qIENMS1NFTCBjbG9ja3MgZm9sbG93IHRoZWlyIHBhcmVudHMnIHJhdGVzLCBkaXZpZGVkIGJ5IGEgZGl2aXNvciAqLworCWNsay0+cmF0ZSA9IG5ld19wYXJlbnQtPnJhdGU7CiAKLQkvKiBGSVhNRTogQ2hhbmdlIGNwdV9pc19vbWFwMjQyMCgpIHRvIGNwdV9pc19vbWFwMjQyeCgpICovCi0JaWYgKGNwdV9pc19vbWFwMjQyMCgpKQotCQljcHVfbWFzayA9IFJBVEVfSU5fMjQyWDsKLQllbHNlIGlmIChjcHVfaXNfb21hcDI0MzAoKSkKLQkJY3B1X21hc2sgPSBSQVRFX0lOXzI0M1g7CisJaWYgKHBhcmVudF9kaXYgPiAwKQorCQljbGstPnJhdGUgLz0gcGFyZW50X2RpdjsKIAotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7CisJcHJfZGVidWcoImNsb2NrOiBzZXQgcGFyZW50IG9mICVzIHRvICVzIChuZXcgcmF0ZSAlbGQpXG4iLAorCQkgY2xrLT5uYW1lLCBjbGstPnBhcmVudC0+bmFtZSwgY2xrLT5yYXRlKTsKIAotCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwcmNtLT5tcHVfc3BlZWQgPD0gcmF0ZSkgewotCQkJZm91bmRfc3BlZWQgPSBwcmNtLT5tcHVfc3BlZWQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmRfc3BlZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IHNldCBNUFUgcmF0ZSB0byAlbHVNSHpcbiIsCi0JIHJhdGUgLyAxMDAwMDAwKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY3Vycl9wcmNtX3NldCA9IHByY207Ci0JY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKCZkcGxsX2NrKTsKLQotCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlIC8gMikgewotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0hBTEZfU1BFRUQsIDEpOwotCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAqIDIpIHsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsKLQl9IGVsc2UgaWYgKHByY20tPmRwbGxfc3BlZWQgIT0gY3VyX3JhdGUpIHsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCi0JCQlieXBhc3MgPSAxOwotCi0JCWlmICgocHJjbS0+Y21fY2xrc2VsMl9wbGwgJiAweDMpID09IDIpCi0JCQlkb25lX3JhdGUgPSBQUkNNX0ZVTExfU1BFRUQ7Ci0JCWVsc2UKLQkJCWRvbmVfcmF0ZSA9IFBSQ01fSEFMRl9TUEVFRDsKLQotCQkvKiBNUFUgZGl2aWRlciAqLwotCQlDTV9DTEtTRUxfTVBVID0gcHJjbS0+Y21fY2xrc2VsX21wdTsKLQotCQkvKiBkc3AgKyBpdmExIGRpdigyNDIwKSwgaXZhMi4xKDI0MzApICovCi0JCUNNX0NMS1NFTF9EU1AgPSBwcmNtLT5jbV9jbGtzZWxfZHNwOwotCi0JCUNNX0NMS1NFTF9HRlggPSBwcmNtLT5jbV9jbGtzZWxfZ2Z4OwotCi0JCS8qIE1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLwotCQlDTV9DTEtTRUwxX0NPUkUgPSBwcmNtLT5jbV9jbGtzZWwxX2NvcmU7Ci0JCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKLQkJCUNNX0NMS1NFTF9NRE0gPSBwcmNtLT5jbV9jbGtzZWxfbWRtOwotCi0JCS8qIHgyIHRvIGVudGVyIGluaXRfbWVtICovCi0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwgMSk7Ci0KLQkJb21hcDJfc2V0X3ByY20ocHJjbS0+Y21fY2xrc2VsMV9wbGwsIHByY20tPmJhc2Vfc2RyY19yZnIsCi0JCQkgICAgICAgYnlwYXNzKTsKLQotCQlvbWFwMl9pbml0X21lbW9yeV9wYXJhbXMob21hcDJfZGxsX2ZvcmNlX25lZWRlZCgpKTsKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoZG9uZV9yYXRlLCAwKTsKLQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotCW9tYXAyX2Nsa3NlbF9yZWNhbGMoJmRwbGxfY2spOworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAyNywxNTAgKzcyNiwxNyBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZChzdHJ1Y3QgY2xrICpjbGspCit2b2lkIG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIHJlZ3ZhbDMyOworCXUzMiByZWd2YWwzMiwgdjsKKworCXYgPSAoY2xrLT5mbGFncyAmIElOVkVSVF9FTkFCTEUpID8gKDEgPDwgY2xrLT5lbmFibGVfYml0KSA6IDA7CiAKIAlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKChyZWd2YWwzMiAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpID09IDApCisJaWYgKChyZWd2YWwzMiAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpID09IHYpCiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB1bnVzZWQgY2xvY2sgXCIlc1wiXG4iLCBjbGstPm5hbWUpOwogCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOwogfQotI2Vsc2UKLSNkZWZpbmUgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkCU5VTEwKICNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDJfY2xrX2Z1bmN0aW9ucyA9IHsKLQkuY2xrX2VuYWJsZQkJPSBvbWFwMl9jbGtfZW5hYmxlLAotCS5jbGtfZGlzYWJsZQkJPSBvbWFwMl9jbGtfZGlzYWJsZSwKLQkuY2xrX3JvdW5kX3JhdGUJCT0gb21hcDJfY2xrX3JvdW5kX3JhdGUsCi0JLmNsa19zZXRfcmF0ZQkJPSBvbWFwMl9jbGtfc2V0X3JhdGUsCi0JLmNsa19zZXRfcGFyZW50CQk9IG9tYXAyX2Nsa19zZXRfcGFyZW50LAotCS5jbGtfZGlzYWJsZV91bnVzZWQJPSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ2V0X2NyeXN0YWxfcmF0ZShzdHJ1Y3QgY2xrICpvc2MsIHN0cnVjdCBjbGsgKnN5cykKLXsKLQl1MzIgZGl2LCBhcGxscywgc2NsayA9IDEzMDAwMDAwOwotCi0JYXBsbHMgPSBDTV9DTEtTRUwxX1BMTDsKLQlhcGxscyAmPSAoKDEgPDwgMjMpIHwgKDEgPDwgMjQpIHwgKDEgPDwgMjUpKTsKLQlhcGxscyA+Pj0gMjM7CQkJLyogSXNvbGF0ZSBmaWVsZCwgMCwyLDMgKi8KLQotCWlmIChhcGxscyA9PSAwKQotCQlzY2xrID0gMTkyMDAwMDA7Ci0JZWxzZSBpZiAoYXBsbHMgPT0gMikKLQkJc2NsayA9IDEzMDAwMDAwOwotCWVsc2UgaWYgKGFwbGxzID09IDMpCi0JCXNjbGsgPSAxMjAwMDAwMDsKLQotCWRpdiA9IFBSQ01fQ0xLU1JDX0NUUkw7Ci0JZGl2ICY9ICgoMSA8PCA3KSB8ICgxIDw8IDYpKTsKLQlkaXYgPj49IHN5cy0+cmF0ZV9vZmZzZXQ7Ci0KLQlvc2MtPnJhdGUgPSBzY2xrICogZGl2OwotCXN5cy0+cmF0ZSA9IHNjbGs7Ci19Ci0KLS8qCi0gKiBTZXQgY2xvY2tzIGZvciBieXBhc3MgbW9kZSBmb3IgcmVib290IHRvIHdvcmsuCi0gKi8KLXZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQotewotCXUzMiByYXRlOwotCi0JaWYgKHZjbGsgPT0gTlVMTCB8fCBzY2xrID09IE5VTEwpCi0JCXJldHVybjsKLQotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7Ci0JY2xrX3NldF9yYXRlKHZjbGssIHJhdGUpOwotfQotCi0vKgotICogU3dpdGNoIHRoZSBNUFUgcmF0ZSBpZiBzcGVjaWZpZWQgb24gY21kbGluZS4KLSAqIFdlIGNhbm5vdCBkbyB0aGlzIGVhcmx5IHVudGlsIGNtZGxpbmUgaXMgcGFyc2VkLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwMl9jbGtfYXJjaF9pbml0KHZvaWQpCi17Ci0JaWYgKCFtcHVyYXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSgmdmlydF9wcmNtX3NldCwgbXB1cmF0ZSkpCi0JCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgTVBVIHJhdGVcbiIpOwotCi0JcHJvcGFnYXRlX3JhdGUoJm9zY19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IGZhc3QgKi8KLQlwcm9wYWdhdGVfcmF0ZSgmZnVuY18zMmtfY2spOwkJLyogdXBkYXRlIG1haW4gcm9vdCBzbG93ICovCi0KLQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBuZXcgY2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML01QVSk6ICIKLQkgICAgICAgIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKLQkgICAgICAgKHN5c19jay5yYXRlIC8gMTAwMDAwMCksIChzeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKLQkgICAgICAgKGRwbGxfY2sucmF0ZSAvIDEwMDAwMDApLCAobXB1X2NrLnJhdGUgLyAxMDAwMDAwKSkgOwotCi0JcmV0dXJuIDA7Ci19Ci1hcmNoX2luaXRjYWxsKG9tYXAyX2Nsa19hcmNoX2luaXQpOwotCi1pbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXN0cnVjdCBjbGsgKiogY2xrcDsKLQl1MzIgY2xrcmF0ZTsKLQotCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKLQlvbWFwMl9nZXRfY3J5c3RhbF9yYXRlKCZvc2NfY2ssICZzeXNfY2spOwotCi0JZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwX2Nsa3MpOwotCSAgICAgY2xrcCsrKSB7Ci0KLQkJaWYgKCgqY2xrcCktPmZsYWdzICYgQ0xPQ0tfSU5fT01BUDI0MlggJiYgY3B1X2lzX29tYXAyNDIwKCkpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICgoKmNsa3ApLT5mbGFncyAmIENMT0NLX0lOX09NQVAyNDNYICYmIGNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci0KLQkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KLQljbGtyYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZSgmZHBsbF9jayk7Ci0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPmRwbGxfc3BlZWQgPD0gY2xrcmF0ZSkKLQkJCSBicmVhazsKLQl9Ci0JY3Vycl9wcmNtX3NldCA9IHByY207Ci0KLQlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsJCS8qIHVwZGF0ZSBtYWluIHJvb3QgZmFzdCAqLwotCXByb3BhZ2F0ZV9yYXRlKCZmdW5jXzMya19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IHNsb3cgKi8KLQotCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCi0JICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JICAgICAgIChzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIChkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfZW5hYmxlKCZzeW5jXzMya19pY2spOwotCWNsa19lbmFibGUoJm9tYXBjdHJsX2ljayk7Ci0KLQkvKiBGb3JjZSB0aGUgQVBMTHMgYWx3YXlzIGFjdGl2ZS4gVGhlIGNsb2NrcyBhcmUgaWRsZWQKLQkgKiBhdXRvbWF0aWNhbGx5IGJ5IGhhcmR3YXJlLiAqLwotCWNsa19lbmFibGUoJmFwbGw5Nl9jayk7Ci0JY2xrX2VuYWJsZSgmYXBsbDU0X2NrKTsKLQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKLQkJY2xrX2VuYWJsZSgmc2RyY19pY2spOwotCi0JLyogQXZvaWQgc2xlZXBpbmcgc2xlZXBpbmcgZHVyaW5nIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3QoKSAqLwotCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7Ci0Jc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggNGY3OTE4Ni4uZDU5ODBhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMSwxMyArMSwxMiBAQAogLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyNHh4L2Nsb2NrLmgKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIENvbnRhY3RzOgogICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqICBDcmVhdGVkIGZvciBPTUFQMi4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIGNvcnBvcmF0aW9uCi0gKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KLSAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKiAgUGF1bCBXYWxtc2xleQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTcsMjA5NSArMTYsNTMgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLX0gKIAotc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIHZvaWQgb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAyX3Byb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIHZvaWQgb21hcDJfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyBsb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyB1MzIgb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IodTMyIGRpdl9zZWwsIHUzMiBmaWVsZF92YWwpOwotc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKTsKKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgogCitpbnQgb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwordm9pZCBvbWFwMl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOworbG9uZyBvbWFwMl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitpbnQgb21hcDJfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2ludCBvbWFwMl9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpOwogCi0jZGVmaW5lIFJBVEVfSU5fMjQyWAkoMSA8PCAwKQotI2RlZmluZSBSQVRFX0lOXzI0M1gJKDEgPDwgMSkKKyNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKK3ZvaWQgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsayk7CisjZWxzZQorI2RlZmluZSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQJTlVMTAorI2VuZGlmCiAKLS8qIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvJ3MgZm9yIGEgUFJDTSBhcmUgbWFuZGF0ZWQuCi0gKiB4dGFsX3NwZWVkLCBkcGxsX3NwZWVkLCBtcHVfc3BlZWQsIENNX0NMS1NFTF9NUFUsQ01fQ0xLU0VMX0RTUAotICogQ01fQ0xLU0VMX0dGWCwgQ01fQ0xLU0VMMV9DT1JFLCBDTV9DTEtTRUwxX1BMTCBDTV9DTEtTRUwyX1BMTCwgQ01fQ0xLU0VMX01ETQotICovCi1zdHJ1Y3QgcHJjbV9jb25maWcgewotCXVuc2lnbmVkIGxvbmcgeHRhbF9zcGVlZDsJLyogY3J5c3RhbCByYXRlICovCi0JdW5zaWduZWQgbG9uZyBkcGxsX3NwZWVkOwkvKiBkcGxsOiBvdXQqeHRhbCpNLyhOLTEpdGFibGVfcmVjYWxjICovCi0JdW5zaWduZWQgbG9uZyBtcHVfc3BlZWQ7CS8qIHNwZWVkIG9mIE1QVSAqLwotCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX21wdTsJLyogbXB1IGRpdmlkZXIgKi8KLQl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9kc3A7CS8qIGRzcCtpdmExIGRpdigyNDIwKSwgaXZhMi4xKDI0MzApICovCi0JdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfZ2Z4OwkvKiBnZnggZGl2aWRlcnMgKi8KLQl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbDFfY29yZTsJLyogbWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCi0JdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwxX3BsbDsJLyogbSxuICovCi0JdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwyX3BsbDsJLyogZHBsbHgxIG9yIHgyIG91dCAqLwotCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX21kbTsJLyogbW9kZW0gZGl2aWRlcnMgMjQzMCBvbmx5ICovCi0JdW5zaWduZWQgbG9uZyBiYXNlX3NkcmNfcmZyOwkvKiBiYXNlIHJlZnJlc2ggdGltaW5nIGZvciBhIHNldCAqLwotCXVuc2lnbmVkIGNoYXIgZmxhZ3M7Ci19Owordm9pZCBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIG9tYXAyX2luaXRfY2xrc2VsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwordTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspOwordTMyIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUsCisJCQkJdTMyICpuZXdfZGl2KTsKK3UzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGssIHUzMiBmaWVsZF92YWwpOwordTMyIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyIGRpdik7Cit2b2lkIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Citsb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSk7CitpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3UzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgb21hcDJfd2FpdF9jbG9ja19yZWFkeSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIGN2YWwsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi0vKiBNYXNrIGZvciBjbGtzZWwgd2hpY2ggc3VwcG9ydCBwYXJlbnQgc2V0dGlnbiBpbiBzZXRfcmF0ZSAqLwotI2RlZmluZSBTUkNfU0VMX01BU0sgKENNX0NPUkVfU0VMMSB8IENNX0NPUkVfU0VMMiB8IENNX1dLVVBfU0VMMSB8IFwKLQkJCUNNX1BMTF9TRUwxIHwgQ01fUExMX1NFTDIgfCBDTV9TWVNDTEtPVVRfU0VMMSkKK2V4dGVybiB1OCBjcHVfbWFzazsKIAotLyogTWFzayBmb3IgY2xrc2VsIHJlZ3Mgd2hpY2ggc3VwcG9ydCByYXRlIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgU1JDX1JBVEVfU0VMX01BU0sgKENNX01QVV9TRUwxIHwgQ01fRFNQX1NFTDEgfCBDTV9HRlhfU0VMMSB8IFwKLQkJCUNNX01PREVNX1NFTDEgfCBDTV9DT1JFX1NFTDEgfCBDTV9DT1JFX1NFTDIgfCBcCi0JCQlDTV9XS1VQX1NFTDEgfCBDTV9QTExfU0VMMSB8IENNX1BMTF9TRUwyIHwgXAotCQkJQ01fU1lTQ0xLT1VUX1NFTDEpCi0KLS8qCi0gKiBUaGUgT01BUDIgcHJvY2Vzc29yIGNhbiBiZSBydW4gYXQgc2V2ZXJhbCBkaXNjcmV0ZSAnUFJDTSBjb25maWd1cmF0aW9ucycuCi0gKiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgY2hhcmFjdGVyaXplZCBieSB2b2x0YWdlIGFuZCBzcGVlZCBmb3IgY2xvY2tzLgotICogVGhlIGRldmljZSBpcyBvbmx5IHZhbGlkYXRlZCBmb3IgY2VydGFpbiBjb21iaW5hdGlvbnMuIE9uZSB3YXkgdG8gZXhwcmVzcwotICogdGhlc2UgY29tYmluYXRpb25zIGlzIHZpYSB0aGUgJ3JhdGlvJ3MnIHdoaWNoIHRoZSBjbG9ja3Mgb3BlcmF0ZSB3aXRoCi0gKiByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFRoZXNlIHJhdGlvIHNldHMgYXJlIGZvciBhIGdpdmVuIHZvbHRhZ2UvRFBMTAotICogc2V0dGluZy4gQWxsIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBkZXNjcmliZWQgYnkgYSBEUExMIHNldHRpbmcgYW5kIGEgcmF0aW8KLSAqIFRoZXJlIGFyZSAzIHJhdGlvIHNldHMgZm9yIHRoZSAyNDMwIGFuZCBYIHJhdGlvIHNldHMgZm9yIDI0MjAuCi0gKgotICogMjQzMCBkaWZmZXJzIGZyb20gMjQyMCBpbiB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHBoYXNlIHN5bmNocm9uaXplcnMgdXNlZC4KLSAqIFRoZXkgYm90aCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNsb2NrIGRvbWFpbiBzZXR1cC4gMjQyMChpdmExLGRzcCkgdnMKLSAqIDI0MzAgKGl2YTIuMSwgTk9kc3AsIG1kbSkKLSAqLwotCi0vKiBDb3JlIGZpZWxkcyBmb3IgY21fY2xrc2VsLCBub3QgcmF0aW8gZ292ZXJuZWQgKi8KLSNkZWZpbmUgUlhfQ0xLU0VMX0RTUzEJCQkoMHgxMCA8PCA4KQotI2RlZmluZSBSWF9DTEtTRUxfRFNTMgkJCSgweDAgPDwgMTMpCi0jZGVmaW5lIFJYX0NMS1NFTF9TU0kJCQkoMHg1IDw8IDIwKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFZvbHRhZ2UvRFBMTCByYXRpb3MKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIDI0MzAgUmF0aW8ncywgMjQzMC1SYXRpbyBDb25maWcgMSAqLwotI2RlZmluZSBSMV9DTEtTRUxfTDMJCQkoNCA8PCAwKQotI2RlZmluZSBSMV9DTEtTRUxfTDQJCQkoMiA8PCA1KQotI2RlZmluZSBSMV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCi0jZGVmaW5lIFIxX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVIxX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAotCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAotCQkJCQlSMV9DTEtTRUxfTDQgfCBSMV9DTEtTRUxfTDMKLSNkZWZpbmUgUjFfQ0xLU0VMX01QVQkJCSgyIDw8IDApCi0jZGVmaW5lIFIxX0NNX0NMS1NFTF9NUFVfVkFMCQlSMV9DTEtTRUxfTVBVCi0jZGVmaW5lIFIxX0NMS1NFTF9EU1AJCQkoMiA8PCAwKQotI2RlZmluZSBSMV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQotI2RlZmluZSBSMV9DTV9DTEtTRUxfRFNQX1ZBTAkJUjFfQ0xLU0VMX0RTUCB8IFIxX0NMS1NFTF9EU1BfSUYKLSNkZWZpbmUgUjFfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCi0jZGVmaW5lIFIxX0NNX0NMS1NFTF9HRlhfVkFMCQlSMV9DTEtTRUxfR0ZYCi0jZGVmaW5lIFIxX0NMS1NFTF9NRE0JCQkoNCA8PCAwKQotI2RlZmluZSBSMV9DTV9DTEtTRUxfTURNX1ZBTAkJUjFfQ0xLU0VMX01ETQotCi0vKiAyNDMwLVJhdGlvIENvbmZpZyAyICovCi0jZGVmaW5lIFIyX0NMS1NFTF9MMwkJCSg2IDw8IDApCi0jZGVmaW5lIFIyX0NMS1NFTF9MNAkJCSgyIDw8IDUpCi0jZGVmaW5lIFIyX0NMS1NFTF9VU0IJCQkoMiA8PCAyNSkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUjJfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCi0JCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCi0JCQkJCVIyX0NMS1NFTF9MNCB8IFIyX0NMS1NFTF9MMwotI2RlZmluZSBSMl9DTEtTRUxfTVBVCQkJKDIgPDwgMCkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMX01QVV9WQUwJCVIyX0NMS1NFTF9NUFUKLSNkZWZpbmUgUjJfQ0xLU0VMX0RTUAkJCSgyIDw8IDApCi0jZGVmaW5lIFIyX0NMS1NFTF9EU1BfSUYJCSgzIDw8IDUpCi0jZGVmaW5lIFIyX0NNX0NMS1NFTF9EU1BfVkFMCQlSMl9DTEtTRUxfRFNQIHwgUjJfQ0xLU0VMX0RTUF9JRgotI2RlZmluZSBSMl9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMX0dGWF9WQUwJCVIyX0NMS1NFTF9HRlgKLSNkZWZpbmUgUjJfQ0xLU0VMX01ETQkJCSg2IDw8IDApCi0jZGVmaW5lIFIyX0NNX0NMS1NFTF9NRE1fVkFMCQlSMl9DTEtTRUxfTURNCi0KLS8qIDI0MzAtUmF0aW8gQm9vdG0gKEJZUEFTUykgKi8KLSNkZWZpbmUgUkJfQ0xLU0VMX0wzCQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKLSNkZWZpbmUgUkJfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1KQotI2RlZmluZSBSQl9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSQl9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKLQkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKLQkJCQkJUkJfQ0xLU0VMX0w0IHwgUkJfQ0xLU0VMX0wzCi0jZGVmaW5lIFJCX0NMS1NFTF9NUFUJCQkoMSA8PCAwKQotI2RlZmluZSBSQl9DTV9DTEtTRUxfTVBVX1ZBTAkJUkJfQ0xLU0VMX01QVQotI2RlZmluZSBSQl9DTEtTRUxfRFNQCQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKLSNkZWZpbmUgUkJfQ01fQ0xLU0VMX0RTUF9WQUwJCVJCX0NMS1NFTF9EU1AgfCBSQl9DTEtTRUxfRFNQX0lGCi0jZGVmaW5lIFJCX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQotI2RlZmluZSBSQl9DTV9DTEtTRUxfR0ZYX1ZBTAkJUkJfQ0xLU0VMX0dGWAotI2RlZmluZSBSQl9DTEtTRUxfTURNCQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ01fQ0xLU0VMX01ETV9WQUwJCVJCX0NMS1NFTF9NRE0KLQotLyogMjQyMCBSYXRpbyBFcXVpdmFsZW50cyAqLwotI2RlZmluZSBSWFhfQ0xLU0VMX1ZMWU5RCQkoMHgxMiA8PCAxNSkKLSNkZWZpbmUgUlhYX0NMS1NFTF9TU0kJCQkoMHg4IDw8IDIwKQotCi0vKiAyNDIwLVBSQ00gSUlJIDUzMk1IeiBjb3JlICovCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0wzCQkJKDQgPDwgMCkJLyogMTMzTUh6ICovCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogNjYuNU1IeiAqLwotI2RlZmluZSBSSUlJX0NMS1NFTF9VU0IJCQkoNCA8PCAyNSkJLyogMzMuMjVNSHogKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCVJJSUlfQ0xLU0VMX1VTQiB8IFJYWF9DTEtTRUxfU1NJIHwgXAotCQkJCQlSWFhfQ0xLU0VMX1ZMWU5RIHwgUlhfQ0xLU0VMX0RTUzIgfCBcCi0JCQkJCVJYX0NMS1NFTF9EU1MxIHwgUklJSV9DTEtTRUxfTDQgfCBcCi0JCQkJCVJJSUlfQ0xLU0VMX0wzCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX01QVQkJCSgyIDw8IDApCS8qIDI2Nk1IeiAqLwotI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMCQlSSUlJX0NMS1NFTF9NUFUKLSNkZWZpbmUgUklJSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0gMTc3LjNNSHogKi8KLSNkZWZpbmUgUklJSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSA4OC42N01IeiAqLwotI2RlZmluZSBSSUlJX1NZTkNfRFNQCQkJKDEgPDwgNykJLyogRW5hYmxlIHN5bmMgKi8KLSNkZWZpbmUgUklJSV9DTEtTRUxfSVZBCQkJKDYgPDwgOCkJLyogaXZhMSAtIDg4LjY3TUh6ICovCi0jZGVmaW5lIFJJSUlfU1lOQ19JVkEJCQkoMSA8PCAxMykJLyogRW5hYmxlIHN5bmMgKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUklJSV9TWU5DX0lWQSB8IFJJSUlfQ0xLU0VMX0lWQSB8IFwKLQkJCQkJUklJSV9TWU5DX0RTUCB8IFJJSUlfQ0xLU0VMX0RTUF9JRiB8IFwKLQkJCQkJUklJSV9DTEtTRUxfRFNQCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCS8qIDY2LjVNSHogKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUklJSV9DTEtTRUxfR0ZYCi0KLS8qIDI0MjAtUFJDTSBJSSA2MDBNSHogY29yZSAqLwotI2RlZmluZSBSSUlfQ0xLU0VMX0wzCQkJKDYgPDwgMCkJLyogMTAwTUh6ICovCi0jZGVmaW5lIFJJSV9DTEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA1ME1IeiAqLwotI2RlZmluZSBSSUlfQ0xLU0VMX1VTQgkJCSgyIDw8IDI1KQkvKiA1ME1IeiAqLwotI2RlZmluZSBSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUklJX0NMS1NFTF9VU0IgfCBcCi0JCQkJCVJYWF9DTEtTRUxfU1NJIHwgUlhYX0NMS1NFTF9WTFlOUSB8IFwKLQkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKLQkJCQkJUklJX0NMS1NFTF9MNCB8IFJJSV9DTEtTRUxfTDMKLSNkZWZpbmUgUklJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAzMDBNSHogKi8KLSNkZWZpbmUgUklJX0NNX0NMS1NFTF9NUFVfVkFMCQlSSUlfQ0xLU0VMX01QVQotI2RlZmluZSBSSUlfQ0xLU0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDIwME1IeiAqLwotI2RlZmluZSBSSUlfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkJLyogYzV4IC0gMTAwTUh6ICovCi0jZGVmaW5lIFJJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCS8qIEJ5cGFzcyBzeW5jICovCi0jZGVmaW5lIFJJSV9DTEtTRUxfSVZBCQkJKDYgPDwgOCkJLyogaXZhMSAtIDIwME1IeiAqLwotI2RlZmluZSBSSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykJLyogQnlwYXNzIHN5bmMgKi8KLSNkZWZpbmUgUklJX0NNX0NMS1NFTF9EU1BfVkFMCQlSSUlfU1lOQ19JVkEgfCBSSUlfQ0xLU0VMX0lWQSB8IFwKLQkJCQkJUklJX1NZTkNfRFNQIHwgUklJX0NMS1NFTF9EU1BfSUYgfCBcCi0JCQkJCVJJSV9DTEtTRUxfRFNQCi0jZGVmaW5lIFJJSV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkJLyogNTBNSHogKi8KLSNkZWZpbmUgUklJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSUlfQ0xLU0VMX0dGWAotCi0vKiAyNDIwLVBSQ00gVklJIChib290KSAqLwotI2RlZmluZSBSVklJX0NMS1NFTF9MMwkJCSgxIDw8IDApCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKLSNkZWZpbmUgUlZJSV9DTEtTRUxfRFNTMQkJKDEgPDwgOCkKLSNkZWZpbmUgUlZJSV9DTEtTRUxfRFNTMgkJKDAgPDwgMTMpCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX1ZMWU5RCQkoMSA8PCAxNSkKLSNkZWZpbmUgUlZJSV9DTEtTRUxfU1NJCQkJKDEgPDwgMjApCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1KQotCi0jZGVmaW5lIFJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAlSVklJX0NMS1NFTF9VU0IgfCBSVklJX0NMS1NFTF9TU0kgfCBcCi0JCQkJCVJWSUlfQ0xLU0VMX1ZMWU5RIHwgUlZJSV9DTEtTRUxfRFNTMiB8IFwKLQkJCQkJUlZJSV9DTEtTRUxfRFNTMSB8IFJWSUlfQ0xLU0VMX0w0IHwgUlZJSV9DTEtTRUxfTDMKLQotI2RlZmluZSBSVklJX0NMS1NFTF9NUFUJCQkoMSA8PCAwKSAvKiBhbGwgZGl2aWRlIGJ5IDEgKi8KLSNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfTVBVX1ZBTAkJUlZJSV9DTEtTRUxfTVBVCi0KLSNkZWZpbmUgUlZJSV9DTEtTRUxfRFNQCQkJKDEgPDwgMCkKLSNkZWZpbmUgUlZJSV9DTEtTRUxfRFNQX0lGCQkoMSA8PCA1KQotI2RlZmluZSBSVklJX1NZTkNfRFNQCQkJKDAgPDwgNykKLSNkZWZpbmUgUlZJSV9DTEtTRUxfSVZBCQkJKDEgPDwgOCkKLSNkZWZpbmUgUlZJSV9TWU5DX0lWQQkJCSgwIDw8IDEzKQotI2RlZmluZSBSVklJX0NNX0NMS1NFTF9EU1BfVkFMCQlSVklJX1NZTkNfSVZBIHwgUlZJSV9DTEtTRUxfSVZBIHwgUlZJSV9TWU5DX0RTUCB8IFwKLQkJCQkJUlZJSV9DTEtTRUxfRFNQX0lGIHwgUlZJSV9DTEtTRUxfRFNQCi0KLSNkZWZpbmUgUlZJSV9DTEtTRUxfR0ZYCQkJKDEgPDwgMCkKLSNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUlZJSV9DTEtTRUxfR0ZYCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjQzMCBUYXJnZXQgbW9kZXM6IEFsb25nIHdpdGggZWFjaCBjb25maWd1cmF0aW9uIHRoZSBDUFUgaGFzIHNldmVyYWwKLSAqIG1vZGVzIHdoaWNoIGdvZXMgYWxvbmcgd2l0aCB0aGVtLiBNb2RlcyBtYWlubHkgYXJlIHRoZSBhZGRpdGlvbiBvZgotICogZGVzY3JpYmUgRFBMTCBjb21iaW5hdGlvbnMgdG8gZ28gYWxvbmcgd2l0aCBhIHJhdGlvLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogSGFyZHdhcmUgZ292ZXJuZWQgKi8KLSNkZWZpbmUgTVhfNDhNX1NSQwkJCSgwIDw8IDMpCi0jZGVmaW5lIE1YXzU0TV9TUkMJCQkoMCA8PCA1KQotI2RlZmluZSBNWF9BUExMU19DTElLSU5fMTIJCSgzIDw8IDIzKQotI2RlZmluZSBNWF9BUExMU19DTElLSU5fMTMJCSgyIDw8IDIzKQotI2RlZmluZSBNWF9BUExMU19DTElLSU5fMTlfMgkJKDAgPDwgMjMpCi0KLS8qCi0gKiAyNDMwIC0gc3RhbmRhbG9uZSwgMipyZWYqTS8obisxKSwgTS9OIGlzIGZvciBleGFjdG5lc3Mgbm90IHJlbG9jayBzcGVlZAotICogIzIJKHJhdGlvMSkgYmFzZXBvcnQtdGFyZ2V0Ci0gKiAjNWEJKHJhdGlvMSkgYmFzZXBvcnQtdGFyZ2V0LCB0YXJnZXQgRFBMTCA9IDI2NioyID0gNTMyTUh6Ci0gKi8KLSNkZWZpbmUgTTVBX0RQTExfTVVMVF8xMgkJKDEzMyA8PCAxMikKLSNkZWZpbmUgTTVBX0RQTExfRElWXzEyCQkJKDUgPDwgOCkKLSNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTVBX0RQTExfRElWXzEyIHwgTTVBX0RQTExfTVVMVF8xMiB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCi0jZGVmaW5lIE01QV9EUExMX01VTFRfMTMJCSgyNjYgPDwgMTIpCi0jZGVmaW5lIE01QV9EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQotI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQlNNUFfRFBMTF9ESVZfMTMgfCBNNUFfRFBMTF9NVUxUXzEzIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTMKLSNkZWZpbmUgTTVBX0RQTExfTVVMVF8xOQkJKDE4MCA8PCAxMikKLSNkZWZpbmUgTTVBX0RQTExfRElWXzE5CQkJKDEyIDw8IDgpCi0jZGVmaW5lIE01QV9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU01QV9EUExMX0RJVl8xOSB8IE01QV9EUExMX01VTFRfMTkgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xOV8yCi0vKiAjNWIJKHJhdGlvMSkgdGFyZ2V0IERQTEwgPSAyMDAqMiA9IDQwME1IeiAqLwotI2RlZmluZSBNNUJfRFBMTF9NVUxUXzEyCQkoNTAgPDwgMTIpCi0jZGVmaW5lIE01Ql9EUExMX0RJVl8xMgkJCSgyIDw8IDgpCi0jZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU01Ql9EUExMX0RJVl8xMiB8IE01Ql9EUExMX01VTFRfMTIgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xMgotI2RlZmluZSBNNUJfRFBMTF9NVUxUXzEzCQkoMjAwIDw8IDEyKQotI2RlZmluZSBNNUJfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKLQotI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQlNNUJfRFBMTF9ESVZfMTMgfCBNNUJfRFBMTF9NVUxUXzEzIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTMKLSNkZWZpbmUgTTVCX0RQTExfTVVMVF8xOQkJKDEyNSA8PCAxMikKLSNkZWZpbmUgTTVCX0RQTExfRElWXzE5CQkJKDMxIDw8IDgpCi0jZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU01Ql9EUExMX0RJVl8xOSB8IE01Ql9EUExMX01VTFRfMTkgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xOV8yCi0vKgotICogIzQJKHJhdGlvMikKLSAqICMzCShyYXRpbzIpIGJhc2Vwb3J0LXRhcmdldCwgdGFyZ2V0IERQTEwgPSAzMzAqMiA9IDY2ME1IegotICovCi0jZGVmaW5lIE0zX0RQTExfTVVMVF8xMgkJCSg1NSA8PCAxMikKLSNkZWZpbmUgTTNfRFBMTF9ESVZfMTIJCQkoMSA8PCA4KQotI2RlZmluZSBNM19DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU0zX0RQTExfRElWXzEyIHwgTTNfRFBMTF9NVUxUXzEyIHwgXAotCQkJCQlNWF9BUExMU19DTElLSU5fMTIKLSNkZWZpbmUgTTNfRFBMTF9NVUxUXzEzCQkJKDMzMCA8PCAxMikKLSNkZWZpbmUgTTNfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKLSNkZWZpbmUgTTNfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQlNM19EUExMX0RJVl8xMyB8IE0zX0RQTExfTVVMVF8xMyB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCi0jZGVmaW5lIE0zX0RQTExfTVVMVF8xOQkJCSgyNzUgPDwgMTIpCi0jZGVmaW5lIE0zX0RQTExfRElWXzE5CQkJKDE1IDw8IDgpCi0jZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTTNfRFBMTF9ESVZfMTkgfCBNM19EUExMX01VTFRfMTkgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xOV8yCi0vKiBib290IChib290KSAqLwotI2RlZmluZSBNQl9EUExMX01VTFQJCQkoMSA8PCAxMikKLSNkZWZpbmUgTUJfRFBMTF9ESVYJCQkoMCA8PCA4KQotI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAotCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTIKLQotI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAotCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTMKLQotI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAotCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTkKLQotLyoKLSAqIDI0MzAgLSBjaGFzc2lzIChzZWRuYSkKLSAqIDE2NSAocmF0aW8xKSBzYW1lIGFzIGFib3ZlICMyCi0gKiAxNTAgKHJhdGlvMSkKLSAqIDEzMyAocmF0aW8yKSBzYW1lIGFzIGFib3ZlICM0Ci0gKiAxMTAgKHJhdGlvMikgc2FtZSBhcyBhYm92ZSAjMwotICogMTA0IChyYXRpbzIpCi0gKiBib290IChib290KQotICovCi0KLS8qCi0gKiAyNDIwIEVxdWl2YWxlbnQgLSBtb2RlIHJlZ2lzdGVycwotICogUFJDTSBJSSAsIHRhcmdldCBEUExMID0gMiozMDBNSHogPSA2MDBNSHoKLSAqLwotI2RlZmluZSBNSUlfRFBMTF9NVUxUXzEyCQkoNTAgPDwgMTIpCi0jZGVmaW5lIE1JSV9EUExMX0RJVl8xMgkJCSgxIDw8IDgpCi0jZGVmaW5lIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU1JSV9EUExMX0RJVl8xMiB8IE1JSV9EUExMX01VTFRfMTIgfCBcCi0JCQkJCU1YX0FQTExTX0NMSUtJTl8xMgotI2RlZmluZSBNSUlfRFBMTF9NVUxUXzEzCQkoMzAwIDw8IDEyKQotI2RlZmluZSBNSUlfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKLSNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJTUlJX0RQTExfRElWXzEzIHwgTUlJX0RQTExfTVVMVF8xMyB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCi0KLS8qIFBSQ00gSUlJIHRhcmdldCBEUExMID0gMioyNjYgPSA1MzJNSHoqLwotI2RlZmluZSBNSUlJX0RQTExfTVVMVF8xMgkJKDEzMyA8PCAxMikKLSNkZWZpbmUgTUlJSV9EUExMX0RJVl8xMgkJKDUgPDwgOCkKLSNkZWZpbmUgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU1JSUlfRFBMTF9ESVZfMTIgfCBNSUlJX0RQTExfTVVMVF8xMiB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCi0jZGVmaW5lIE1JSUlfRFBMTF9NVUxUXzEzCQkoMjY2IDw8IDEyKQotI2RlZmluZSBNSUlJX0RQTExfRElWXzEzCQkoMTIgPDwgOCkKLSNkZWZpbmUgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCU1JSUlfRFBMTF9ESVZfMTMgfCBNSUlJX0RQTExfTVVMVF8xMyB8IFwKLQkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCi0KLS8qIFBSQ00gVklJIChib290IGJ5cGFzcykgKi8KLSNkZWZpbmUgTVZJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCi0jZGVmaW5lIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAotCi0vKiBIaWdoIGFuZCBsb3cgb3BlcmF0aW9uIHZhbHVlICovCi0jZGVmaW5lIE1YX0NMS1NFTDJfUExMXzJ4X1ZBTAkJKDIgPDwgMCkKLSNkZWZpbmUgTVhfQ0xLU0VMMl9QTExfMXhfVkFMCQkoMSA8PCAwKQotCi0vKgotICogVGhlc2UgcmVwcmVzZW50IG9wdGltYWwgdmFsdWVzIGZvciBjb21tb24gcGFydHMsIGl0IHdvbid0IHdvcmsgZm9yIGFsbC4KLSAqIEFzIGxvbmcgYXMgeW91IHNjYWxlIGRvd24sIG1vc3QgcGFyYW1ldGVycyBhcmUgc3RpbGwgd29yaywgdGhleSBqdXN0Ci0gKiBiZWNvbWUgc3ViLW9wdGltYWwuIFRoZSBSRlIgdmFsdWUgZ29lcyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBJZiB5b3UKLSAqIGRvbid0IGFkanVzdCBpdCBkb3duIGFzIHlvdXIgY2xvY2sgcGVyaW9kIGluY3JlYXNlcyB0aGUgcmVmcmVzaCBpbnRlcnZhbAotICogd2lsbCBub3QgYmUgbWV0LiBTZXR0aW5nIGFsbCBwYXJhbWV0ZXJzIGZvciBjb21wbGV0ZSB3b3JzdCBjYXNlIG1heSB3b3JrLAotICogYnV0IG1heSBjdXQgbWVtb3J5IHBlcmZvcm1hbmNlIGJ5IDJ4LiBEdWUgdG8gZXJyYXRhIHRoZSBETExzIG5lZWQgdG8gYmUKLSAqIHVubG9ja2VkIGFuZCB0aGVpciB2YWx1ZSBuZWVkcyBydW4gdGltZSBjYWxpYnJhdGlvbi4JQSBkeW5hbWljIGNhbGwgaXMKLSAqIG5lZWQgZm9yIHRoYXQgYXMgbm8gc2luZ2xlIHJpZ2h0IHZhbHVlIGV4aXN0cyBhY29yc3MgcHJvZHVjdGlvbiBzYW1wbGVzLgotICoKLSAqIE9ubHkgdGhlIEZVTEwgc3BlZWQgdmFsdWVzIGFyZSBnaXZlbi4gQ3VycmVudCBjb2RlIGlzIHN1Y2ggdGhhdCByYXRlCi0gKiBjaGFuZ2VzIG11c3QgYmUgbWFkZSBhdCBEUExMb3V0eDIuIFRoZSBhY3R1YWwgdmFsdWUgYWRqdXN0bWVudCBmb3IgbG93Ci0gKiBmcmVxdWVuY3kgb3BlcmF0aW9uIHdpbGwgYmUgaGFuZGxlZCBieSBvbWFwX3NldF9wZXJmb3JtYW5jZSgpCi0gKgotICogQnkgaGF2aW5nIHRoZSBib290IGxvYWRlciBib290IHVwIGluIHRoZSBmYXN0ZXN0IEw0IHNwZWVkIGF2YWlsYWJsZSBsaWtlbHkKLSAqIHdpbGwgcmVzdWx0IGluIHNvbWV0aGluZyB3aGljaCB5b3UgY2FuIHN3aXRjaCBiZXR3ZWVuLgotICovCi0jZGVmaW5lIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6CSgweDAwMDNkZTAwIHwgMSkKLSNkZWZpbmUgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHoJKDB4MDAwMmRhMDEgfCAxKQotI2RlZmluZSBWMjRYWF9TRFJDX1JGUl9DVFJMXzExME1IegkoMHgwMDAyZGEwMSB8IDEpIC8qIE5lZWQgdG8gY2FsYyAqLwotI2RlZmluZSBWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUwkoMHgwMDAwNTAwMCB8IDEpIC8qIE5lZWQgdG8gY2FsYyAqLwotCi0vKiBNUFUgc3BlZWQgZGVmaW5lcyAqLwotI2RlZmluZSBTMTJNCTEyMDAwMDAwCi0jZGVmaW5lIFMxM00JMTMwMDAwMDAKLSNkZWZpbmUgUzE5TQkxOTIwMDAwMAotI2RlZmluZSBTMjZNCTI2MDAwMDAwCi0jZGVmaW5lIFMxMDBNCTEwMDAwMDAwMAotI2RlZmluZSBTMTMzTQkxMzMwMDAwMDAKLSNkZWZpbmUgUzE1ME0JMTUwMDAwMDAwCi0jZGVmaW5lIFMxNjVNCTE2NTAwMDAwMAotI2RlZmluZSBTMjAwTQkyMDAwMDAwMDAKLSNkZWZpbmUgUzI2Nk0JMjY2MDAwMDAwCi0jZGVmaW5lIFMzMDBNCTMwMDAwMDAwMAotI2RlZmluZSBTMzMwTQkzMzAwMDAwMDAKLSNkZWZpbmUgUzQwME0JNDAwMDAwMDAwCi0jZGVmaW5lIFM1MzJNCTUzMjAwMDAwMAotI2RlZmluZSBTNjAwTQk2MDAwMDAwMDAKLSNkZWZpbmUgUzY2ME0JNjYwMDAwMDAwCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KLSAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSwKLSAqIENNX0NMS1NFTF9EU1AsIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xLU0VMMV9QTEwsCi0gKiBDTV9DTEtTRUwyX1BMTCwgQ01fQ0xLU0VMX01ETQotICoKLSAqIEZpbGxpbmcgaW4gdGFibGUgYmFzZWQgb24gSDQgYm9hcmRzIGFuZCAyNDMwLVNEUHMgdmFyaWFudHMgYXZhaWxhYmxlLgotICogVGhlcmUgYXJlIHF1aXRlIGEgZmV3IG1vcmUgcmF0ZXMgY29tYmluYXRpb25zIHdoaWNoIGNvdWxkIGJlIGRlZmluZWQuCi0gKgotICogV2hlbiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGRlZmluZWQgdGhlIHN0YXJ0IHVwIHdpbGwgdHJ5IGFuZCBjaG9vc2UgdGhlCi0gKiBmYXN0ZXN0IG9uZS4gSWYgYSAnZmFzdCcgdmFsdWUgaXMgZGVmaW5lZCwgdGhlbiBhdXRvbWF0aWNhbGx5LCB0aGUgLzIKLSAqIG9uZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMgaXQgY2FuIGJlIHVzZWQuCUdlbmVyYWxseSBoYXZpbmcgbW9yZSB0aGF0Ci0gKiBvbmUgZmFzdCBzZXQgZG9lcyBub3QgbWFrZSBzZW5zZSwgYXMgc3RhdGljIHRpbWluZ3MgbmVlZCB0byBiZSBjaGFuZ2VkCi0gKiB0byBjaGFuZ2UgdGhlIHNldC4JIFRoZSBleGNlcHRpb24gaXMgdGhlIGJ5cGFzcyBzZXR0aW5nIHdoaWNoIGlzCi0gKiBhdmFpbGJsZSBmb3IgbG93IHBvd2VyIGJ5cGFzcy4KLSAqCi0gKiBOb3RlOiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNvcnRlZCwgZmFzdGVzdCB0byBzbG93ZXN0LgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBzdHJ1Y3QgcHJjbV9jb25maWcgcmF0ZV90YWJsZVtdID0gewotCS8qIFBSQ00gSUkgLSBGQVNUICovCi0Je1MxMk0sIFM2MDBNLCBTMzAwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzAwTUh6IEFSTSAqLwotCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQl7UzEzTSwgUzYwME0sIFMzMDBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMDBNSHogQVJNICovCi0JCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKLQkJUkFURV9JTl8yNDJYfSwKLQotCS8qIFBSQ00gSUlJIC0gRkFTVCAqLwotCXtTMTJNLCBTNTMyTSwgUzI2Nk0sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCi0JCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQl7UzEzTSwgUzUzMk0sIFMyNjZNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLwotCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAotCQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTSBJSSAtIFNMT1cgKi8KLQl7UzEyTSwgUzMwME0sIFMxNTBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNTBNSHogQVJNICovCi0JCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKLQkJUkFURV9JTl8yNDJYfSwKLQotCXtTMTNNLCBTMzAwTSwgUzE1ME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE1ME1IeiBBUk0gKi8KLQkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAotCQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTSBJSUkgLSBTTE9XICovCi0Je1MxMk0sIFMyNjZNLCBTMTMzTSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzM01IeiBBUk0gKi8KLQkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKLQkJUkFURV9JTl8yNDJYfSwKLQotCXtTMTNNLCBTMjY2TSwgUzEzM00sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCi0JCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQkvKiBQUkNNLVZJSSAoYm9vdC1ieXBhc3MpICovCi0Je1MxMk0sIFMxMk0sIFMxMk0sIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMk1IeiBBUk0qLwotCQlSVklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSVklJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTLAotCQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTS1WSUkgKGJvb3QtYnlwYXNzKSAqLwotCXtTMTNNLCBTMTNNLCBTMTNNLCBSVklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTNNSHogQVJNICovCi0JCVJWSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTVZJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQkvKiBQUkNNICMzIC0gcmF0aW8yIChFUzIpIC0gRkFTVCAqLwotCXtTMTNNLCBTNjYwTSwgUzMzME0sIFIyX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzMwTUh6IEFSTSAqLwotCQlSMl9DTV9DTEtTRUxfRFNQX1ZBTCwgUjJfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVIyX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE0zX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMl9DTV9DTEtTRUxfTURNX1ZBTCwKLQkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMTBNSHosCi0JCVJBVEVfSU5fMjQzWH0sCi0KLQkvKiBQUkNNICM1YSAtIHJhdGlvMSAtIEZBU1QgKi8KLQl7UzEzTSwgUzUzMk0sIFMyNjZNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KLQkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUFfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKLQkJUkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00gIzViIC0gcmF0aW8xIC0gRkFTVCAqLwotCXtTMTNNLCBTNDAwTSwgUzIwME0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjAwTUh6IEFSTSAqLwotCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTSAjMyAtIHJhdGlvMiAoRVMyKSAtIFNMT1cgKi8KLQl7UzEzTSwgUzMzME0sIFMxNjVNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE2NU1IeiBBUk0gKi8KLQkJUjJfQ01fQ0xLU0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSMl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNM19DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjJfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTEwTUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTSAjNWEgLSByYXRpbzEgLSBTTE9XICovCi0Je1MxM00sIFMyNjZNLCBTMTMzTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCi0JCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMXhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKLQkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCi0JCVJBVEVfSU5fMjQzWH0sCi0KLQkvKiBQUkNNICM1YiAtIHJhdGlvMSAtIFNMT1cqLwotCXtTMTNNLCBTMjAwTSwgUzEwME0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTAwTUh6IEFSTSAqLwotCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTS1ib290L2J5cGFzcyAqLwotCXtTMTNNLCBTMTNNLCBTMTNNLCBSQl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzTWh6ICovCi0JCVJCX0NNX0NMS1NFTF9EU1BfVkFMLCBSQl9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUkJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFJCX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUywKLQkJUkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KLQl7UzEyTSwgUzEyTSwgUzEyTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMk1oeiAqLwotCQlSQl9DTV9DTEtTRUxfRFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9DTV9DTEtTRUxfTURNX1ZBTCwKLQkJVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCi0JCVJBVEVfSU5fMjQzWH0sCi0KLQl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAorLyogY2xrc2VsX3JhdGUgZGF0YSBjb21tb24gdG8gMjR4eC8zNDN4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF8zMmtfcmF0ZXNbXSA9IHsKKwkgeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCSB7IC5kaXYgPSAwIH0KIH07CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMjR4eCBjbG9jayB0cmVlLgotICoKLSAqIE5PVEU6SW4gbWFueSBjYXNlcyBoZXJlIHdlIGFyZSBhc3NpZ25pbmcgYSAnZGVmYXVsdCcgcGFyZW50LglJbiBtYW55Ci0gKgljYXNlcyB0aGUgcGFyZW50IGlzIHNlbGVjdGFibGUuCVRoZSBnZXQvc2V0IHBhcmVudCBjYWxscyB3aWxsIGFsc28KLSAqCXN3aXRjaCBzb3VyY2VzLgotICoKLSAqCU1hbnkgc29tZSBjbG9ja3Mgc2F5IGFsd2F5c19lbmFibGVkLCBidXQgdGhleSBjYW4gYmUgYXV0byBpZGxlZCBmb3IKLSAqCXBvd2VyIHNhdmluZ3MuIFRoZXkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIHVwb24gY2xvY2sgcmVxdWVzdC4KLSAqCi0gKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKLSAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCi0gKgotICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcwotICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jawotICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKLSAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCi0gKgljbG9ja3MuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7Ci0JLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKLQkucmF0ZQkJPSAzMjAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVELAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfc3lzX3JhdGVzW10gPSB7CisJIHsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwkgeyAuZGl2ID0gMCB9CiB9OwogCi0vKiBUeXBpY2FsIDEyLzEzTUh6IGluIHN0YW5kYWxvbmUgbW9kZSwgd2lsbCBiZSAyNk1oeiBpbiBjaGFzc2lzIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgKjI2LCAzOC40KU1IeiAqLwotCS5uYW1lCQk9ICJvc2NfY2siLAotCS5yYXRlCQk9IDI2MDAwMDAwLAkJLyogZml4ZWQgdXAgaW4gY2xvY2sgaW5pdCAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAotfTsKLQotLyogV2l0aCBvdXQgbW9kZW0gbGlrZWx5IDEyTUh6LCB3aXRoIG1vZGVtIGxpa2VseSAxM01IeiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAyNiwgMzguNClNSHogKi8KLQkubmFtZQkJPSAic3lzX2NrIiwJCS8qIH4gcmVmX2NsayBhbHNvICovCi0JLnBhcmVudAkJPSAmb3NjX2NrLAotCS5yYXRlCQk9IDEzMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCi0JLnJhdGVfb2Zmc2V0CT0gNiwgLyogc3lzY2xrZGl2IDEgb3IgMiwgYWxyZWFkeSBoYW5kbGVkIG9yIG5vIGJvb3QgKi8KLQkucmVjYWxjCQk9ICZvbWFwMl9zeXNfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFsdF9jayA9IHsJCS8qIFR5cGljYWwgNTRNIG9yIDQ4TSwgbWF5IG5vdCBleGlzdCAqLwotCS5uYW1lCQk9ICJhbHRfY2siLAotCS5yYXRlCQk9IDU0MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCi0JLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCi19OwotCi0vKgotICogQW5hbG9nIGRvbWFpbiByb290IHNvdXJjZSBjbG9ja3MKLSAqLwotCi0vKiBkcGxsX2NrLCBpcyBicm9rZW4gb3V0IGluIHRvIHNwZWNpYWwgY2FzZXMgdGhyb3VnaCBjbGtzZWwgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGxfY2siLAotCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFJBVEVfQ0tDVEwgfCBDTV9QTExfU0VMMSwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0gewotCS5uYW1lCQk9ICJhcGxsOTZfY2siLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkucmF0ZQkJPSA5NjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCi0JLmVuYWJsZV9iaXQJPSAweDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcGxsNTRfY2sgPSB7Ci0JLm5hbWUJCT0gImFwbGw1NF9jayIsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5yYXRlCQk9IDU0MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCi0JLmVuYWJsZV9iaXQJPSAweDYsCi0JLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCi19OwotCi0vKgotICogUFJDTSBkaWdpdGFsIGJhc2Ugc291cmNlcwotICovCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzU0bV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY181NG1fY2siLAotCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLwotCS5yYXRlCQk9IDU0MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0ZJWEVEIHwgQ01fUExMX1NFTDEgfCBSQVRFX1BST1BBR0FURVMsCi0JLnNyY19vZmZzZXQJPSA1LAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCi0JLmVuYWJsZV9iaXQJPSAweGZmLAotCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKLQkubmFtZQkJPSAiY29yZV9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKLQkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNsZWVwX2NrID0gewkJLyogc3lzX2NsayBvciAzMmsgKi8KLQkubmFtZQkJPSAic2xlZXBfY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5yYXRlCQk9IDMyMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZnVuY185Nm1fY2sgPSB7Ci0JLm5hbWUJCT0gImZ1bmNfOTZtX2NrIiwKLQkucGFyZW50CQk9ICZhcGxsOTZfY2ssCi0JLnJhdGUJCT0gOTYwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKLQkuZW5hYmxlX2JpdAk9IDB4ZmYsCi0JLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY180OG1fY2siLAotCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IENNX1BMTF9TRUwxIHwgUkFURV9QUk9QQUdBVEVTLAotCS5zcmNfb2Zmc2V0CT0gMywKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAotCS5lbmFibGVfYml0CT0gMHhmZiwKLQkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMTJtX2NrID0gewotCS5uYW1lCQk9ICJmdW5jXzEybV9jayIsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCi0JLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKLQkuZW5hYmxlX2JpdAk9IDB4ZmYsCi19OwotCi0vKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKLQkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAotCS5wYXJlbnQJCT0gJm9zY19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKLQkubmFtZQkJPSAic3lzX2Nsa291dCIsCi0JLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCi0JLnJhdGUJCT0gNTQwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUNNX1NZU0NMS09VVF9TRUwxIHwgUkFURV9DS0NUTCwKLQkuc3JjX29mZnNldAk9IDAsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSA3LAotCS5yYXRlX29mZnNldAk9IDMsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQ01fU1lTQ0xLT1VUX1NFTDEgfCBSQVRFX0NLQ1RMLAotCS5zcmNfb2Zmc2V0CT0gOCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtPVVRfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IDE1LAotCS5yYXRlX29mZnNldAk9IDExLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVsX2NrID0gewotCS5uYW1lCQk9ICJlbXVsX2NrIiwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLRU1VTF9DVFJMLAotCS5lbmFibGVfYml0CT0gMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKLQotfTsKLQotLyoKLSAqIE1QVSBjbG9jayBkb21haW4KLSAqCUNsb2NrczoKLSAqCQlNUFVfRkNMSywgTVBVX0lDTEsKLSAqCQlJTlRfTV9GQ0xLLCBJTlRfTV9JX0NMSwotICoKLSAqIC0gSW5kaXZpZHVhbCBjbG9ja3MgYXJlIGhhcmR3YXJlIG1hbmFnZWQuCi0gKiAtIEJhc2UgZGl2aWRlciBjb21lcyBmcm9tOiBDTV9DTEtTRUxfTVBVCi0gKgotICovCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7CS8qIENvbnRyb2wgY3B1ICovCi0JLm5hbWUJCT0gIm1wdV9jayIsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgQ01fTVBVX1NFTDEgfCBERUxBWUVEX0FQUCB8Ci0JCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAotCS5yYXRlX29mZnNldAk9IDAsCS8qIGJpdHMgMC00ICovCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qCi0gKiBEU1AgKDI0MzAtSVZBMi4xKSAoMjQyMC1VTUErSVZBMSkgY2xvY2sgZG9tYWluCi0gKiBDbG9ja3M6Ci0gKgkyNDMwOiBJVkEyLjFfRkNMSywgSVZBMi4xX0lDTEsKLSAqCTI0MjA6IFVNQV9GQ0xLLCBVTUFfSUNMSywgSVZBX01QVSwgSVZBX0NPUAotICovCi1zdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfZmNrID0gewotCS5uYW1lCQk9ICJpdmEyXzFfZmNrIiwKLQkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSB8Ci0JCQkJREVMQVlFRF9BUFAgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUNPTkZJR19QQVJUSUNJUEFOVCwKLQkucmF0ZV9vZmZzZXQJPSAwLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fRFNQLAotCS5lbmFibGVfYml0CT0gMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKLQkubmFtZQkJPSAiaXZhMl8xX2ljayIsCi0JLnBhcmVudAkJPSAmaXZhMl8xX2ZjaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEgfAotCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5yYXRlX29mZnNldAk9IDUsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qCi0gKiBXb24ndCBiZSB0b28gc3BlY2lmaWMgaGVyZS4gVGhlIGNvcmUgY2xvY2sgY29tZXMgaW50byB0aGlzIGJsb2NrCi0gKiBpdCBpcyBkaXZpZGVkIHRoZW4gdGVlJ2VkLiBPbmUgYnJhbmNoIGdvZXMgZGlyZWN0bHkgdG8geHl6IGVuYWJsZQotICogY29udHJvbHMuIFRoZSBvdGhlciBicmFuY2ggZ2V0cyBmdXJ0aGVyIGRpdmlkZWQgYnkgMiB0aGVuIHBvc3NpYmx5Ci0gKiByb3V0ZWQgaW50byBhIHN5bmNocm9uaXplciBhbmQgb3V0IG9mIGNsb2NrcyBhYmMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzcF9mY2siLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxIHwKLQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAotCS5yYXRlX29mZnNldAk9IDAsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCi0JLmVuYWJsZV9iaXQJPSAwLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BfaWNrID0gewotCS5uYW1lCQk9ICJkc3BfaWNrIiwJIC8qIGFwcGFyZW50bHkgaXBpIGFuZCBpc3AgKi8KLQkucGFyZW50CQk9ICZkc3BfZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSB8Ci0JCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLnJhdGVfb2Zmc2V0ID0gNSwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX0RTUCwKLQkuZW5hYmxlX2JpdAk9IDEsCQkvKiBmb3IgaXBpICovCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfaWZjayA9IHsKLQkubmFtZQkJPSAiaXZhMV9pZmNrIiwKLQkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENNX0RTUF9TRUwxIHwgUkFURV9DS0NUTCB8Ci0JCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMgfCBERUxBWUVEX0FQUCwKLQkucmF0ZV9vZmZzZXQ9IDgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCi0JLmVuYWJsZV9iaXQJPSAxMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogSVZBMSBtcHUvaW50L2kvZiBjbG9ja3MgYXJlIC8yIG9mIHBhcmVudCAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9tcHVfaW50X2lmY2sgPSB7Ci0JLm5hbWUJCT0gIml2YTFfbXB1X2ludF9pZmNrIiwKLQkucGFyZW50CQk9ICZpdmExX2lmY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fRFNQLAotCS5lbmFibGVfYml0CT0gOCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyoKLSAqIEwzIGNsb2NrIGRvbWFpbgotICogTDMgY2xvY2tzIGFyZSB1c2VkIGZvciBib3RoIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbCBjbG9ja3MgdG8KLSAqIG11bHRpcGxlIGVudGl0aWVzLiBTb21lIG9mIHRoZXNlIGNsb2NrcyBhcmUgY29tcGxldGVseSBtYW5hZ2VkCi0gKiBieSBoYXJkd2FyZSwgYW5kIHNvbWUgb3RoZXJzIGFsbG93IHNvZnR3YXJlIGNvbnRyb2wuIEhhcmR3YXJlCi0gKiBtYW5hZ2VkIG9uZXMgZ2VuZXJhbCBhcmUgYmFzZWQgb24gZGlyZWN0bHkgQ0xLX1JFUSBzaWduYWxzIGFuZAotICogdmFyaW91cyBhdXRvIGlkbGUgc2V0dGluZ3MuIFRoZSBmdW5jdGlvbmFsIHNwZWMgc2V0cyBtYW55IG9mIHRoZXNlCi0gKiBhcyAndGllLWhpZ2gnIGZvciB0aGVpciBlbmFibGVzLgotICoKLSAqIEktQ0xPQ0tTOgotICoJTDMtSW50ZXJjb25uZWN0LCBTTVMsIEdQTUMsIFNEUkMsIE9DTV9SQU0sIE9DTV9ST00sIFNETUEKLSAqCUNBTSwgSFMtVVNCLgotICogRi1DTE9DSwotICoJU1NJLgotICoKLSAqIEdQTUMgbWVtb3JpZXMgYW5kIFNEUkMgaGF2ZSB0aW1pbmcgYW5kIGNsb2NrIHNlbnNpdGl2ZSByZWdpc3RlcnMgd2hpY2gKLSAqIG1heSB2ZXJ5IHdlbGwgbmVlZCBub3RpZmljYXRpb24gd2hlbiB0aGUgY2xvY2sgY2hhbmdlcy4gQ3VycmVudGx5IGZvciBsb3cKLSAqIG9wZXJhdGluZyBwb2ludHMsIHRoZXNlIGFyZSB0YWtlbiBjYXJlIG9mIGluIHNsZWVwLlMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfY2sgPSB7CS8qIFVzZWQgZm9yIGljayBhbmQgZmNrLCBpbnRlcmNvbm5lY3QgKi8KLQkubmFtZQkJPSAiY29yZV9sM19jayIsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9DS0NUTCB8IEFMV0FZU19FTkFCTEVEIHwgQ01fQ09SRV9TRUwxIHwKLQkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTLAotCS5yYXRlX29mZnNldAk9IDAsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KLQkubmFtZQkJPSAidXNiX2w0X2ljayIsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IERFTEFZRURfQVBQIHwKLQkJCQlDT05GSUdfUEFSVElDSVBBTlQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDAsCi0JLnJhdGVfb2Zmc2V0ID0gMjUsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qCi0gKiBTU0kgaXMgaW4gTDMgbWFuYWdlbWVudCBkb21haW4sIGl0cyBkaXJlY3QgcGFyZW50IGlzIGNvcmUgbm90IGwzLAotICogbWFueSBjb3JlIHBvd2VyIGRvbWFpbiBlbnRpdGllcyBhcmUgZ3JvdXBlZCBpbnRvIHRoZSBMMyBjbG9jawotICogZG9tYWluLgotICogU1NJX1NTUl9GQ0xLLCBTU0lfU1NUX0ZDTEssIFNTSV9MNF9DTElLCi0gKgotICogc3NyID0gY29yZS8xLzIvMy80LzUsIHNzdCA9IDEvMiBzc3IuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3Jfc3N0X2ZjayA9IHsKLQkubmFtZQkJPSAic3NpX2ZjayIsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IERFTEFZRURfQVBQLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCS8qIGJpdCAxICovCi0JLmVuYWJsZV9iaXQJPSAxLAotCS5yYXRlX29mZnNldCA9IDIwLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKgotICogR0ZYIGNsb2NrIGRvbWFpbgotICoJQ2xvY2tzOgotICogR0ZYX0ZDTEssIEdGWF9JQ0xLCi0gKiBHRlhfQ0cxKDJkKSwgR0ZYX0NHMigzZCkKLSAqCi0gKiBHRlhfRkNMSyBydW5zIGZyb20gTDMsIGFuZCBpcyBkaXZpZGVkIGJ5ICgxLDIsMyw0KQotICogVGhlIDJkIGFuZCAzZCBjbG9ja3MgcnVuIGF0IGEgaGFyZHdhcmUgZGV0ZXJtaW5lZAotICogZGl2aWRlZCB2YWx1ZSBvZiBmY2xrLgotICoKLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzNkX2ZjayA9IHsKLQkubmFtZQkJPSAiZ2Z4XzNkX2ZjayIsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9DS0NUTCB8IENNX0dGWF9TRUwxLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fR0ZYLAotCS5lbmFibGVfYml0CT0gMiwKLQkucmF0ZV9vZmZzZXQ9IDAsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8yZF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF8yZF9mY2siLAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfQ0tDVEwgfCBDTV9HRlhfU0VMMSwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0dGWCwKLQkuZW5hYmxlX2JpdAk9IDEsCi0JLnJhdGVfb2Zmc2V0PSAwLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfaWNrID0gewotCS5uYW1lCQk9ICJnZnhfaWNrIiwJCS8qIEZyb20gbDMgKi8KLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX0NLQ1RMLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fR0ZYLAkvKiBiaXQgMCAqLwotCS5lbmFibGVfYml0CT0gMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIE1vZGVtIGNsb2NrIGRvbWFpbiAoMjQzMCkKLSAqCUNMT0NLUzoKLSAqCQlNRE1fT1NDX0NMSwotICoJCU1ETV9JQ0xLCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYSBpY2sgYW5kIGZjayAqLwotCS5uYW1lCQk9ICJtZG1faWNrIiwKLQkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfCBDTV9NT0RFTV9TRUwxIHwKLQkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKLQkucmF0ZV9vZmZzZXQJPSAwLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fTURNLAotCS5lbmFibGVfYml0CT0gMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKLQkubmFtZQkJPSAibWRtX29zY19jayIsCi0JLnJhdGUJCT0gMjYwMDAwMDAsCi0JLnBhcmVudAkJPSAmb3NjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfRklYRUQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9NRE0sCi0JLmVuYWJsZV9iaXQJPSAxLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgotICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KLSAqCi0gKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCi0gKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KLSAqIHRoaXMgZG9tYWluLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBsNF9jayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhbiBpY2sgYW5kIGZjayAqLwotCS5uYW1lCQk9ICJsNF9jayIsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9DS0NUTCB8IEFMV0FZU19FTkFCTEVEIHwgQ01fQ09SRV9TRUwxIHwKLQkJCQlERUxBWUVEX0FQUCB8IFJBVEVfUFJPUEFHQVRFUywKLQkucmF0ZV9vZmZzZXQJPSA1LAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0gewotCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwJLyogYml0IDEgKi8KLQkuZW5hYmxlX2JpdAk9IDEsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qCi0gKiBEU1MgY2xvY2sgZG9tYWluCi0gKiBDTE9DS3M6Ci0gKiBEU1NfTDRfSUNMSywgRFNTX0wzX0lDTEssCi0gKiBEU1NfQ0xLMSwgRFNTX0NMSzIsIERTU181NE1Iel9DTEsKLSAqCi0gKiBEU1MgaXMgYm90aCBpbml0aWF0b3IgYW5kIHRhcmdldC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHNzX2ljayA9IHsJCS8qIEVuYWJsZXMgYm90aCBMMyxMNCBJQ0xLJ3MgKi8KLQkubmFtZQkJPSAiZHNzX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCS8qIHJlYWxseSBib3RoIGwzIGFuZCBsNCAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzczFfZmNrIiwKLQkucGFyZW50CQk9ICZjb3JlX2NrLAkJLyogQ29yZSBvciBzeXMgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IERFTEFZRURfQVBQLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAwLAotCS5yYXRlX29mZnNldAk9IDgsCi0JLnNyY19vZmZzZXQJPSA4LAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCi0JLm5hbWUJCT0gImRzczJfZmNrIiwKLQkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IFJBVEVfRklYRUQgfAotCQkJCURFTEFZRURfQVBQLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxLAotCS5zcmNfb2Zmc2V0CT0gMTMsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc181NG1fZmNrID0gewkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLwotCS5uYW1lCQk9ICJkc3NfNTRtX2ZjayIsCS8qIDU0bSB0diBjbGsgKi8KLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUywKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMiwKLQkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKLX07Ci0KLS8qCi0gKiBDT1JFIHBvd2VyIGRvbWFpbiBJQ0xLICYgRkNMSyBkZWZpbmVzLgotICogTWFueSBvZiB0aGUgdGhlc2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBwYXJlbnQuIEVudHJpZXMKLSAqIGhlcmUgd2lsbCBsaWtlbHkgaGF2ZSBhbiBMNCBpbnRlcmZhY2UgcGFyZW50LCBhbmQgbWF5IGhhdmUgbXVsdGlwbGUKLSAqIGZ1bmN0aW9uYWwgY2xvY2sgcGFyZW50cy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDFfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCS8qIEJpdDAgKi8KLQkuZW5hYmxlX2JpdAk9IDAsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewotCS5uYW1lCQk9ICJncHQxX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUNNX1dLVVBfU0VMMSwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX1dLVVAsCS8qIEJpdDAgKi8KLQkuZW5hYmxlX2JpdAk9IDAsCi0JLnNyY19vZmZzZXQJPSAwLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0Ml9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCS8qIEJpdDQgKi8KLQkuZW5hYmxlX2JpdAk9IDQsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0gewotCS5uYW1lCQk9ICJncHQyX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUNNX0NPUkVfU0VMMiwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gNCwKLQkuc3JjX29mZnNldAk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0gewotCS5uYW1lCQk9ICJncHQzX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJLyogQml0NSAqLwotCS5lbmFibGVfYml0CT0gNSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDNfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQ01fQ09SRV9TRUwyLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSA1LAotCS5zcmNfb2Zmc2V0CT0gNCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkvKiBCaXQ2ICovCi0JLmVuYWJsZV9iaXQJPSA2LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0NF9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlDTV9DT1JFX1NFTDIsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDYsCi0JLnNyY19vZmZzZXQJPSA2LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0NV9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBCaXQ3ICovCi0JLmVuYWJsZV9iaXQJPSA3LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0NV9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlDTV9DT1JFX1NFTDIsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDcsCi0JLnNyY19vZmZzZXQJPSA4LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ2X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0Nl9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfYml0CT0gOCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0OCAqLwotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0Nl9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlDTV9DT1JFX1NFTDIsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDgsCi0JLnNyY19vZmZzZXQJPSAxMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0OSAqLwotCS5lbmFibGVfYml0CT0gOSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQ01fQ09SRV9TRUwyLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSA5LAotCS5zcmNfb2Zmc2V0CT0gMTIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0gewotCS5uYW1lCQk9ICJncHQ4X2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIGJpdDEwICovCi0JLmVuYWJsZV9iaXQJPSAxMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDhfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQ01fQ09SRV9TRUwyLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxMCwKLQkuc3JjX29mZnNldAk9IDE0LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0OV9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxMSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDlfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJCUNNX0NPUkVfU0VMMiwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMTEsCi0JLnNyY19vZmZzZXQJPSAxNiwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMF9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxMiwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0gewotCS5uYW1lCQk9ICJncHQxMF9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQkJQ01fQ09SRV9TRUwyLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxMiwKLQkuc3JjX29mZnNldAk9IDE4LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDExX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDEzLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxMV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDExX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCQlDTV9DT1JFX1NFTDIsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDEzLAotCS5zcmNfb2Zmc2V0CT0gMjAsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0MTJfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0MTQgKi8KLQkuZW5hYmxlX2JpdAk9IDE0LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDEyX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCQlDTV9DT1JFX1NFTDIsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDE0LAotCS5zcmNfb2Zmc2V0CT0gMjIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwMV9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfYml0CT0gMTUsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIGJpdDE2ICovCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwMV9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfYml0CT0gMTUsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKLQkubmFtZQkJPSAibWNic3AyX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9iaXQJPSAxNiwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcDJfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX2JpdAk9IDE2LAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwM19pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAotCS5lbmFibGVfYml0CT0gMywKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKLQkubmFtZQkJPSAibWNic3AzX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAzLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcDRfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDQsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwNF9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAotCS5lbmFibGVfYml0CT0gNCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ljayA9IHsKLQkubmFtZQkJPSAibWNic3A1X2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSA1LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcDVfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDUsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDE3LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxNywKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ljayA9IHsKLQkubmFtZQkJPSAibWNzcGlfaWNrIiwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMTgsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ZjayIsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDE4LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5pZAkJPSAzLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAotCS5lbmFibGVfYml0CT0gOSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGlfZmNrIiwKLQkuaWQJCT0gMywKLQkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDksCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDFfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjEsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDFfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjEsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDJfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDJfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDNfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAotCS5lbmFibGVfYml0CT0gMiwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAyLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW9zX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAotCS5lbmFibGVfYml0CT0gMiwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfZmNrID0gewotCS5uYW1lCQk9ICJncGlvc19mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fV0tVUCwKLQkuZW5hYmxlX2JpdAk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfaWNrID0gewotCS5uYW1lCQk9ICJtcHVfd2R0X2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAotCS5lbmFibGVfYml0CT0gMywKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1wdV93ZHRfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX1dLVVAsCi0JLmVuYWJsZV9iaXQJPSAzLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7Ci0JLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAotCS5lbmFibGVfYml0CT0gMSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0gewotCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAotCS5lbmFibGVfYml0CT0gNCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKLQkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCi0JLmVuYWJsZV9iaXQJPSA1LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKLQkubmFtZQkJPSAiaWNyX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKLQkuZW5hYmxlX2JpdAk9IDYsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7Ci0JLm5hbWUJCT0gImNhbV9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAzMSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ZjayA9IHsKLQkubmFtZQkJPSAiY2FtX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDMxLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0gewotCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMzAsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0gewotCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDI5LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAid2R0NF9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAyOSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDI4LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKLQkubmFtZQkJPSAid2R0M19mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjgsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKLQkubmFtZQkJPSAibXNwcm9faWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjcsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKLQkubmFtZQkJPSAibXNwcm9fZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjcsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjYsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjYsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7Ci0JLm5hbWUJCT0gImZhY19pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAyNSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ZjayA9IHsKLQkubmFtZQkJPSAiZmFjX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDI1LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlYWNfaWNrID0gewotCS5uYW1lCQk9ICJlYWNfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDI0LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlYWNfZmNrID0gewotCS5uYW1lCQk9ICJlYWNfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDI0LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBoZHFfaWNrID0gewotCS5uYW1lCQk9ICJoZHFfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMjMsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9mY2sgPSB7Ci0JLm5hbWUJCT0gImhkcV9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAyMywKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19pY2siLAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAyMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAyMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjaHMyX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAyMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19pY2siLAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxOSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxOSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMxX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjaHMxX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxOSwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0gewotCS5uYW1lCQk9ICJ2bHlucV9pY2siLAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAzLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2bHlucV9mY2sgPSB7Ci0JLm5hbWUJCT0gInZseW5xX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYICB8IFJBVEVfQ0tDVEwgfCBDTV9DT1JFX1NFTDEgfCBERUxBWUVEX0FQUCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAotCS5lbmFibGVfYml0CT0gMywKLQkuc3JjX29mZnNldAk9IDE1LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZHJjX2ljayA9IHsKLQkubmFtZQkJPSAic2RyY19pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOM19DT1JFLAotCS5lbmFibGVfYml0CT0gMiwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDAsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInNoYV9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewotCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VONF9DT1JFLAotCS5lbmFibGVfYml0CT0gMiwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKLQkubmFtZQkJPSAiYWVzX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDMsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInBrYV9pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCi0JLmVuYWJsZV9iaXQJPSA0LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0gewotCS5uYW1lCQk9ICJ1c2JfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAotCS5lbmFibGVfYml0CT0gMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0gewotCS5uYW1lCQk9ICJ1c2Joc19pY2siLAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSA2LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0gewotCS5uYW1lCQk9ICJtbWNoczFfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDcsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzMV9mY2siLAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAotCS5lbmFibGVfYml0CT0gNywKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHMyX2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSA4LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0gewotCS5uYW1lCQk9ICJtbWNoczJfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDgsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ljayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfaWNrIiwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDEwLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvNV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW81X2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxMCwKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ludGNfaWNrID0gewotCS5uYW1lCQk9ICJtZG1faW50Y19pY2siLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAotCS5lbmFibGVfYml0CT0gMTEsCi0JLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIxX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNkYjFfZmNrIiwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKLQkuZW5hYmxlX2JpdAk9IDE2LAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMl9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzZGIyX2ZjayIsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCi0JLmVuYWJsZV9iaXQJPSAxNywKLQkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgotICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKLSAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KLSAqCi0gKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAotICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAotICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycwotICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAotICogdGhlIGJ1cy4KLSAqCi0gKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAotICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKLQkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVZJUlRVQUxfQ0xPQ0sgfCBBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQLAotCS5wYXJlbnQJCT0gJm1wdV9jaywJLyogSW5kZXhlZCBieSBtcHUgc3BlZWQsIG5vIHBhcmVudCAqLwotCS5yZWNhbGMJCT0gJm9tYXAyX21wdV9yZWNhbGMsCS8qIHNldHMgYXJlIGtleWVkIG9uIG1wdSByYXRlICovCi0JLnNldF9yYXRlCT0gJm9tYXAyX3NlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUsCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdmeF9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpvbmNoaXBfY2xrc1tdID0gewotCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLwotCSZmdW5jXzMya19jaywKLQkmb3NjX2NrLAotCSZzeXNfY2ssCi0JJmFsdF9jaywKLQkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLwotCSZkcGxsX2NrLAotCSZhcGxsOTZfY2ssCi0JJmFwbGw1NF9jaywKLQkvKiBpbnRlcm5hbCBwcmNtIHJvb3Qgc291cmNlcyAqLwotCSZmdW5jXzU0bV9jaywKLQkmY29yZV9jaywKLQkmc2xlZXBfY2ssCi0JJmZ1bmNfOTZtX2NrLAotCSZmdW5jXzQ4bV9jaywKLQkmZnVuY18xMm1fY2ssCi0JJndkdDFfb3NjX2NrLAotCSZzeXNfY2xrb3V0LAotCSZzeXNfY2xrb3V0MiwKLQkmZW11bF9jaywKLQkvKiBtcHUgZG9tYWluIGNsb2NrcyAqLwotCSZtcHVfY2ssCi0JLyogZHNwIGRvbWFpbiBjbG9ja3MgKi8KLQkmaXZhMl8xX2ZjaywJCS8qIDI0MzAgKi8KLQkmaXZhMl8xX2ljaywKLQkmZHNwX2ljaywJCS8qIDI0MjAgKi8KLQkmZHNwX2ZjaywKLQkmaXZhMV9pZmNrLAotCSZpdmExX21wdV9pbnRfaWZjaywKLQkvKiBHRlggZG9tYWluIGNsb2NrcyAqLwotCSZnZnhfM2RfZmNrLAotCSZnZnhfMmRfZmNrLAotCSZnZnhfaWNrLAotCS8qIE1vZGVtIGRvbWFpbiBjbG9ja3MgKi8KLQkmbWRtX2ljaywKLQkmbWRtX29zY19jaywKLQkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLwotCSZkc3NfaWNrLAotCSZkc3MxX2ZjaywKLQkmZHNzMl9mY2ssCi0JJmRzc181NG1fZmNrLAotCS8qIEwzIGRvbWFpbiBjbG9ja3MgKi8KLQkmY29yZV9sM19jaywKLQkmc3NpX3Nzcl9zc3RfZmNrLAotCSZ1c2JfbDRfaWNrLAotCS8qIEw0IGRvbWFpbiBjbG9ja3MgKi8KLQkmbDRfY2ssCQkJLyogdXNlZCBhcyBib3RoIGNvcmVfbDQgYW5kIHd1X2w0ICovCi0JJnNzaV9sNF9pY2ssCi0JLyogdmlydHVhbCBtZXRhLWdyb3VwIGNsb2NrICovCi0JJnZpcnRfcHJjbV9zZXQsCi0JLyogZ2VuZXJhbCBsNCBpbnRlcmZhY2UgY2ssIG11bHRpLXBhcmVudCBmdW5jdGlvbmFsIGNsayAqLwotCSZncHQxX2ljaywKLQkmZ3B0MV9mY2ssCi0JJmdwdDJfaWNrLAotCSZncHQyX2ZjaywKLQkmZ3B0M19pY2ssCi0JJmdwdDNfZmNrLAotCSZncHQ0X2ljaywKLQkmZ3B0NF9mY2ssCi0JJmdwdDVfaWNrLAotCSZncHQ1X2ZjaywKLQkmZ3B0Nl9pY2ssCi0JJmdwdDZfZmNrLAotCSZncHQ3X2ljaywKLQkmZ3B0N19mY2ssCi0JJmdwdDhfaWNrLAotCSZncHQ4X2ZjaywKLQkmZ3B0OV9pY2ssCi0JJmdwdDlfZmNrLAotCSZncHQxMF9pY2ssCi0JJmdwdDEwX2ZjaywKLQkmZ3B0MTFfaWNrLAotCSZncHQxMV9mY2ssCi0JJmdwdDEyX2ljaywKLQkmZ3B0MTJfZmNrLAotCSZtY2JzcDFfaWNrLAotCSZtY2JzcDFfZmNrLAotCSZtY2JzcDJfaWNrLAotCSZtY2JzcDJfZmNrLAotCSZtY2JzcDNfaWNrLAotCSZtY2JzcDNfZmNrLAotCSZtY2JzcDRfaWNrLAotCSZtY2JzcDRfZmNrLAotCSZtY2JzcDVfaWNrLAotCSZtY2JzcDVfZmNrLAotCSZtY3NwaTFfaWNrLAotCSZtY3NwaTFfZmNrLAotCSZtY3NwaTJfaWNrLAotCSZtY3NwaTJfZmNrLAotCSZtY3NwaTNfaWNrLAotCSZtY3NwaTNfZmNrLAotCSZ1YXJ0MV9pY2ssCi0JJnVhcnQxX2ZjaywKLQkmdWFydDJfaWNrLAotCSZ1YXJ0Ml9mY2ssCi0JJnVhcnQzX2ljaywKLQkmdWFydDNfZmNrLAotCSZncGlvc19pY2ssCi0JJmdwaW9zX2ZjaywKLQkmbXB1X3dkdF9pY2ssCi0JJm1wdV93ZHRfZmNrLAotCSZzeW5jXzMya19pY2ssCi0JJndkdDFfaWNrLAotCSZvbWFwY3RybF9pY2ssCi0JJmljcl9pY2ssCi0JJmNhbV9mY2ssCi0JJmNhbV9pY2ssCi0JJm1haWxib3hlc19pY2ssCi0JJndkdDRfaWNrLAotCSZ3ZHQ0X2ZjaywKLQkmd2R0M19pY2ssCi0JJndkdDNfZmNrLAotCSZtc3Byb19pY2ssCi0JJm1zcHJvX2ZjaywKLQkmbW1jX2ljaywKLQkmbW1jX2ZjaywKLQkmZmFjX2ljaywKLQkmZmFjX2ZjaywKLQkmZWFjX2ljaywKLQkmZWFjX2ZjaywKLQkmaGRxX2ljaywKLQkmaGRxX2ZjaywKLQkmaTJjMV9pY2ssCi0JJmkyYzFfZmNrLAotCSZpMmNoczFfZmNrLAotCSZpMmMyX2ljaywKLQkmaTJjMl9mY2ssCi0JJmkyY2hzMl9mY2ssCi0JJnZseW5xX2ljaywKLQkmdmx5bnFfZmNrLAotCSZzZHJjX2ljaywKLQkmZGVzX2ljaywKLQkmc2hhX2ljaywKLQkmcm5nX2ljaywKLQkmYWVzX2ljaywKLQkmcGthX2ljaywKLQkmdXNiX2ZjaywKLQkmdXNiaHNfaWNrLAotCSZtbWNoczFfaWNrLAotCSZtbWNoczFfZmNrLAotCSZtbWNoczJfaWNrLAotCSZtbWNoczJfZmNrLAotCSZncGlvNV9pY2ssCi0JJmdwaW81X2ZjaywKLQkmbWRtX2ludGNfaWNrLAotCSZtbWNoc2RiMV9mY2ssCi0JJm1tY2hzZGIyX2ZjaywKLX07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlMzJkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiAgQ29udGFjdHM6CisgKiAgUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogIFBhdWwgV2FsbXNsZXkKKyAqCisgKiAgQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqICBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazI0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKworLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLworI2RlZmluZSBFTl9BUExMX1NUT1BQRUQJCQkwCisjZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJMworCisvKiBDTV9DTEtTRUwxX1BMTC5BUExMU19DTEtJTiBvcHRpb25zICgyNFhYKSAqLworI2RlZmluZSBBUExMU19DTEtJTl8xOV8yTUhaCQkwCisjZGVmaW5lIEFQTExTX0NMS0lOXzEzTUhaCQkyCisjZGVmaW5lIEFQTExTX0NMS0lOXzEyTUhaCQkzCisKKy8qICNkZWZpbmUgRE9XTl9WQVJJQUJMRV9EUExMIDEgKi8JCS8qIEV4cGVyaW1lbnRhbCAqLworCitzdGF0aWMgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0Oworc3RhdGljIHN0cnVjdCBjbGsgKnZjbGs7CitzdGF0aWMgc3RydWN0IGNsayAqc2NsazsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMjR4eCBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoaXMgYWN0dWFsbHkgcmV0dXJucyB0aGUgcmF0ZSBvZiBjb3JlX2NrLCBub3QgZHBsbF9jay4gKi8KK3N0YXRpYyB1MzIgb21hcDJfZ2V0X2RwbGxfcmF0ZV8yNHh4KHN0cnVjdCBjbGsgKnRjbGspCit7CisJbG9uZyBsb25nIGRwbGxfY2xrOworCXU4IGFtdWx0OworCisJZHBsbF9jbGsgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKHRjbGspOworCisJYW11bHQgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJYW11bHQgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CisJZHBsbF9jbGsgKj0gYW11bHQ7CisKKwlyZXR1cm4gZHBsbF9jbGs7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfZW5hYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHBjYzsKKworCXBjYyA9IF9fcmF3X3JlYWRsKE9NQVAyNFhYX1BSQ01fQ0xLU1JDX0NUUkwpOworCisJX19yYXdfd3JpdGVsKHBjYyAmIH5PTUFQX0FVVE9FWFRDTEtNT0RFX01BU0ssCisJCSAgICAgIE9NQVAyNFhYX1BSQ01fQ0xLU1JDX0NUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2Rpc2FibGVfb3NjX2NrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcGNjOworCisJcGNjID0gX19yYXdfcmVhZGwoT01BUDI0WFhfUFJDTV9DTEtTUkNfQ1RSTCk7CisKKwlfX3Jhd193cml0ZWwocGNjIHwgT01BUF9BVVRPRVhUQ0xLTU9ERV9NQVNLLAorCQkgICAgICBPTUFQMjRYWF9QUkNNX0NMS1NSQ19DVFJMKTsKK30KKworI2lmZGVmIE9MRF9DSworLyogUmVjYWxjdWxhdGUgU1lTVF9DTEsgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdTMyIGRpdiA9IFBSQ01fQ0xLU1JDX0NUUkw7CisJZGl2ICY9ICgxIDw8IDcpIHwgKDEgPDwgNik7CS8qIFRlc3QgaWYgZXh0IGNsayBkaXZpZGVkIGJ5IDEgb3IgMiAqLworCWRpdiA+Pj0gY2xrLT5yYXRlX29mZnNldDsKKwljbGstPnJhdGUgPSAoY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpOworCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisjZW5kaWYJLyogT0xEX0NLICovCisKKy8qIEVuYWJsZSBhbiBBUExMIGlmIG9mZiAqLworc3RhdGljIGludCBvbWFwMl9jbGtfZml4ZWRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgY3ZhbCwgYXBsbF9tYXNrOworCisJYXBsbF9tYXNrID0gRU5fQVBMTF9MT0NLRUQgPDwgY2xrLT5lbmFibGVfYml0OworCisJY3ZhbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisKKwlpZiAoKGN2YWwgJiBhcGxsX21hc2spID09IGFwbGxfbWFzaykKKwkJcmV0dXJuIDA7ICAgLyogYXBsbCBhbHJlYWR5IGVuYWJsZWQgKi8KKworCWN2YWwgJj0gfmFwbGxfbWFzazsKKwljdmFsIHw9IGFwbGxfbWFzazsKKwljbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKKworCWlmIChjbGsgPT0gJmFwbGw5Nl9jaykKKwkJY3ZhbCA9IE9NQVAyNFhYX1NUXzk2TV9BUExMOworCWVsc2UgaWYgKGNsayA9PSAmYXBsbDU0X2NrKQorCQljdmFsID0gT01BUDI0WFhfU1RfNTRNX0FQTEw7CisKKwlvbWFwMl93YWl0X2Nsb2NrX3JlYWR5KE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLCBjdmFsLAorCQkJICAgIGNsay0+bmFtZSk7CisKKwkvKgorCSAqIFJFVklTSVQ6IFNob3VsZCB3ZSByZXR1cm4gYW4gZXJyb3IgY29kZSBpZiBvbWFwMl93YWl0X2Nsb2NrX3JlYWR5KCkKKwkgKiBmYWlscz8KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworLyogU3RvcCBBUExMICovCitzdGF0aWMgdm9pZCBvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGN2YWw7CisKKwljdmFsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKKwljdmFsICY9IH4oRU5fQVBMTF9MT0NLRUQgPDwgY2xrLT5lbmFibGVfYml0KTsKKwljbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKK30KKworLyoKKyAqIFVzZXMgdGhlIGN1cnJlbnQgcHJjbSBzZXQgdG8gdGVsbCBpZiBhIHJhdGUgaXMgdmFsaWQuCisgKiBZb3UgY2FuIGdvIHNsb3dlciwgYnV0IG5vdCBmYXN0ZXIgd2l0aGluIGEgZ2l2ZW4gcmF0ZSBzZXQuCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfZHBsbF9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCit7CisJdTMyIGhpZ2gsIGxvdywgY29yZV9jbGtfc3JjOworCisJY29yZV9jbGtfc3JjID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCWNvcmVfY2xrX3NyYyAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKKworCWlmIChjb3JlX2Nsa19zcmMgPT0gQ09SRV9DTEtfU1JDX0RQTEwpIHsJLyogRFBMTCBjbG9ja291dCAqLworCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAqIDI7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJfSBlbHNlIHsJCQkJLyogRFBMTCBjbG9ja291dCB4IDIgKi8KKwkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCX0KKworI2lmZGVmIERPV05fVkFSSUFCTEVfRFBMTAorCWlmICh0YXJnZXRfcmF0ZSA+IGhpZ2gpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIHRhcmdldF9yYXRlOworI2Vsc2UKKwlpZiAodGFyZ2V0X3JhdGUgPiBsb3cpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIGxvdzsKKyNlbmRpZgorCit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2RwbGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoY2xrKTsKKworCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGwoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGN1cl9yYXRlLCBsb3csIG11bHQsIGRpdiwgdmFsaWRfcmF0ZSwgZG9uZV9yYXRlOworCXUzMiBieXBhc3MgPSAwOworCXN0cnVjdCBwcmNtX2NvbmZpZyB0bXBzZXQ7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljdXJfcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eCgmZHBsbF9jayk7CisJbXVsdCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKKwltdWx0ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOworCisJaWYgKChyYXRlID09IChjdXJfcmF0ZSAvIDIpKSAmJiAobXVsdCA9PSAyKSkgeworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhDT1JFX0NMS19TUkNfRFBMTCwgMSk7CisJfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCX0gZWxzZSBpZiAocmF0ZSAhPSBjdXJfcmF0ZSkgeworCQl2YWxpZF9yYXRlID0gb21hcDJfZHBsbF9yb3VuZF9yYXRlKHJhdGUpOworCQlpZiAodmFsaWRfcmF0ZSAhPSByYXRlKQorCQkJZ290byBkcGxsX2V4aXQ7CisKKwkJaWYgKG11bHQgPT0gMSkKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWVsc2UKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCisJCWRkID0gY2xrLT5kcGxsX2RhdGE7CisJCWlmICghZGQpCisJCQlnb3RvIGRwbGxfZXhpdDsKKworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7CisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCAmPSB+KGRkLT5tdWx0X21hc2sgfAorCQkJCQkgICBkZC0+ZGl2MV9tYXNrKTsKKwkJZGl2ID0gKChjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkIC8gMTAwMDAwMCkgLSAxKTsKKwkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgJj0gfk9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOworCQlpZiAocmF0ZSA+IGxvdykgeworCQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsIHw9IENPUkVfQ0xLX1NSQ19EUExMX1gyOworCQkJbXVsdCA9ICgocmF0ZSAvIDIpIC8gMTAwMDAwMCk7CisJCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKKwkJfSBlbHNlIHsKKwkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSBDT1JFX0NMS19TUkNfRFBMTDsKKwkJCW11bHQgPSAocmF0ZSAvIDEwMDAwMDApOworCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTEw7CisJCX0KKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9IChkaXYgPDwgX19mZnMoZGQtPm11bHRfbWFzaykpOworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgfD0gKG11bHQgPDwgX19mZnMoZGQtPmRpdjFfbWFzaykpOworCisJCS8qIFdvcnN0IGNhc2UgKi8KKwkJdG1wc2V0LmJhc2Vfc2RyY19yZnIgPSBTRFJDX1JGUl9DVFJMX0JZUEFTUzsKKworCQlpZiAocmF0ZSA9PSBjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkKQkvKiBJZiBhc2tpbmcgZm9yIDEtMSAqLworCQkJYnlwYXNzID0gMTsKKworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7IC8qIEZvciBpbml0X21lbSAqLworCisJCS8qIEZvcmNlIGRsbCBsb2NrIG1vZGUgKi8KKwkJb21hcDJfc2V0X3ByY20odG1wc2V0LmNtX2Nsa3NlbDFfcGxsLCB0bXBzZXQuYmFzZV9zZHJjX3JmciwKKwkJCSAgICAgICBieXBhc3MpOworCisJCS8qIEVycmF0YTogcmV0IGRsbCBlbnRyeSBzdGF0ZSAqLworCQlvbWFwMl9pbml0X21lbW9yeV9wYXJhbXMob21hcDJfZGxsX2ZvcmNlX25lZWRlZCgpKTsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoZG9uZV9yYXRlLCAwKTsKKwl9CisJb21hcDJfZHBsbF9yZWNhbGMoJmRwbGxfY2spOworCXJldCA9IDA7CisKK2RwbGxfZXhpdDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuKHJldCk7Cit9CisKKy8qKgorICogb21hcDJfdGFibGVfbXB1X3JlY2FsYyAtIGp1c3QgcmV0dXJuIHRoZSBNUFUgc3BlZWQKKyAqIEBjbGs6IHZpcnRfcHJjbV9zZXQgc3RydWN0IGNsaworICoKKyAqIFNldCB2aXJ0X3ByY21fc2V0J3MgcmF0ZSB0byB0aGUgbXB1X3NwZWVkIGZpZWxkIG9mIHRoZSBjdXJyZW50IFBSQ00gc2V0LgorICovCitzdGF0aWMgdm9pZCBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgPSBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7Cit9CisKKy8qCisgKiBMb29rIGZvciBhIHJhdGUgZXF1YWwgb3IgbGVzcyB0aGFuIHRoZSB0YXJnZXQgcmF0ZSBnaXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0LgorICoKKyAqIFdoYXQncyBub3QgZW50aXJlbHkgY2xlYXIgaXMgIndoaWNoIiBmaWVsZCByZXByZXNlbnRzIHRoZSBrZXkgZmllbGQuCisgKiBTb21lIG1pZ2h0IGFyZ3VlIEwzLUREUiwgb3RoZXJzIEFSTSwgb3RoZXJzIElWQS4gVGhpcyBjb2RlIGlzIHNpbXBsZSBhbmQKKyAqIGp1c3QgdXNlcyB0aGUgQVJNIHJhdGVzLgorICovCitzdGF0aWMgbG9uZyBvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXN0cnVjdCBwcmNtX2NvbmZpZyAqcHRyOworCWxvbmcgaGlnaGVzdF9yYXRlOworCisJaWYgKGNsayAhPSAmdmlydF9wcmNtX3NldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOworCisJZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPm1wdV9zcGVlZDsgcHRyKyspIHsKKwkJaWYgKCEocHRyLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHRyLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisKKwkJaGlnaGVzdF9yYXRlID0gcHRyLT5tcHVfc3BlZWQ7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+bXB1X3NwZWVkIDw9IHJhdGUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworLyogU2V0cyBiYXNpYyBjbG9ja3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByYXRlICovCitzdGF0aWMgaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBjdXJfcmF0ZSwgZG9uZV9yYXRlLCBieXBhc3MgPSAwLCB0bXA7CisJc3RydWN0IHByY21fY29uZmlnICpwcmNtOworCXVuc2lnbmVkIGxvbmcgZm91bmRfc3BlZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoY2xrICE9ICZ2aXJ0X3ByY21fc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKworCQlpZiAocHJjbS0+bXB1X3NwZWVkIDw9IHJhdGUpIHsKKwkJCWZvdW5kX3NwZWVkID0gcHJjbS0+bXB1X3NwZWVkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kX3NwZWVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBzZXQgTVBVIHJhdGUgdG8gJWx1TUh6XG4iLAorCQkgICAgICAgcmF0ZSAvIDEwMDAwMDApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljdXJyX3ByY21fc2V0ID0gcHJjbTsKKwljdXJfcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eCgmZHBsbF9jayk7CisKKwlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAvIDIpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTEwsIDEpOworCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAqIDIpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCAhPSBjdXJfcmF0ZSkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKKwkJCWJ5cGFzcyA9IDE7CisKKwkJaWYgKChwcmNtLT5jbV9jbGtzZWwyX3BsbCAmIE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLKSA9PQorCQkgICAgQ09SRV9DTEtfU1JDX0RQTExfWDIpCisJCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKKwkJZWxzZQorCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTEw7CisKKwkJLyogTVBVIGRpdmlkZXIgKi8KKwkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbXB1LCBNUFVfTU9ELCBDTV9DTEtTRUwpOworCisJCS8qIGRzcCArIGl2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KKwkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZHNwLAorCQkJCSBPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpOworCisJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX2dmeCwgR0ZYX01PRCwgQ01fQ0xLU0VMKTsKKworCQkvKiBNYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KKwkJdG1wID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9DTEtTRUwxKSAmIE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0s7CisJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsMV9jb3JlIHwgdG1wLCBDT1JFX01PRCwgQ01fQ0xLU0VMMSk7CisJCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX21kbSwKKwkJCQkJIE9NQVAyNDMwX01ETV9NT0QsIENNX0NMS1NFTCk7CisKKwkJLyogeDIgdG8gZW50ZXIgaW5pdF9tZW0gKi8KKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCisJCW9tYXAyX3NldF9wcmNtKHByY20tPmNtX2Nsa3NlbDFfcGxsLCBwcmNtLT5iYXNlX3NkcmNfcmZyLAorCQkJICAgICAgIGJ5cGFzcyk7CisKKwkJb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQoKSk7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKGRvbmVfcmF0ZSwgMCk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKwlvbWFwMl9kcGxsX3JlY2FsYygmZHBsbF9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7CisJLmNsa19lbmFibGUJCT0gb21hcDJfY2xrX2VuYWJsZSwKKwkuY2xrX2Rpc2FibGUJCT0gb21hcDJfY2xrX2Rpc2FibGUsCisJLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAyX2Nsa19yb3VuZF9yYXRlLAorCS5jbGtfc2V0X3JhdGUJCT0gb21hcDJfY2xrX3NldF9yYXRlLAorCS5jbGtfc2V0X3BhcmVudAkJPSBvbWFwMl9jbGtfc2V0X3BhcmVudCwKKwkuY2xrX2Rpc2FibGVfdW51c2VkCT0gb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkLAorfTsKKworc3RhdGljIHUzMiBvbWFwMl9nZXRfYXBsbF9jbGtpbih2b2lkKQoreworCXUzMiBhcGxscywgc2NsayA9IDA7CisKKwlhcGxscyA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwxKTsKKwlhcGxscyAmPSBPTUFQMjRYWF9BUExMU19DTEtJTl9NQVNLOworCWFwbGxzID4+PSBPTUFQMjRYWF9BUExMU19DTEtJTl9TSElGVDsKKworCWlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xOV8yTUhaKQorCQlzY2xrID0gMTkyMDAwMDA7CisJZWxzZSBpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTNNSFopCisJCXNjbGsgPSAxMzAwMDAwMDsKKwllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xMk1IWikKKwkJc2NsayA9IDEyMDAwMDAwOworCisJcmV0dXJuIHNjbGs7Cit9CisKK3N0YXRpYyB1MzIgb21hcDJfZ2V0X3N5c2Nsa2Rpdih2b2lkKQoreworCXUzMiBkaXY7CisKKwlkaXYgPSBfX3Jhd19yZWFkbChPTUFQMjRYWF9QUkNNX0NMS1NSQ19DVFJMKTsKKwlkaXYgJj0gT01BUF9TWVNDTEtESVZfTUFTSzsKKwlkaXYgPj49IE9NQVBfU1lTQ0xLRElWX1NISUZUOworCisJcmV0dXJuIGRpdjsKK30KKworc3RhdGljIHZvaWQgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9hcGxsX2Nsa2luKCkgKiBvbWFwMl9nZXRfc3lzY2xrZGl2KCk7CisJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gb21hcDJfZ2V0X3N5c2Nsa2RpdigpOworCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKKy8qCisgKiBTZXQgY2xvY2tzIGZvciBieXBhc3MgbW9kZSBmb3IgcmVib290IHRvIHdvcmsuCisgKi8KK3ZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQoreworCXUzMiByYXRlOworCisJaWYgKHZjbGsgPT0gTlVMTCB8fCBzY2xrID09IE5VTEwpCisJCXJldHVybjsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisJY2xrX3NldF9yYXRlKHZjbGssIHJhdGUpOworfQorCisvKgorICogU3dpdGNoIHRoZSBNUFUgcmF0ZSBpZiBzcGVjaWZpZWQgb24gY21kbGluZS4KKyAqIFdlIGNhbm5vdCBkbyB0aGlzIGVhcmx5IHVudGlsIGNtZGxpbmUgaXMgcGFyc2VkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9jbGtfYXJjaF9pbml0KHZvaWQpCit7CisJaWYgKCFtcHVyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSgmdmlydF9wcmNtX3NldCwgbXB1cmF0ZSkpCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgTVBVIHJhdGVcbiIpOworCisJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKKworCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIG5ldyBjbG9ja2luZyByYXRlIChDcnlzdGFsL0RQTEwvTVBVKTogIgorCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCSAgICAgICAoc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKHN5c19jay5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICAoZHBsbF9jay5yYXRlIC8gMTAwMDAwMCksIChtcHVfY2sucmF0ZSAvIDEwMDAwMDApKSA7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwob21hcDJfY2xrX2FyY2hfaW5pdCk7CisKK2ludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJc3RydWN0IGNsayAqKmNsa3A7CisJdTMyIGNsa3JhdGU7CisKKwlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpCisJCWNwdV9tYXNrID0gUkFURV9JTl8yNDJYOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQljcHVfbWFzayA9IFJBVEVfSU5fMjQzWDsKKworCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKKworCW9tYXAyX29zY19jbGtfcmVjYWxjKCZvc2NfY2spOworCW9tYXAyX3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOworCisJZm9yIChjbGtwID0gb25jaGlwXzI0eHhfY2xrczsKKwkgICAgIGNsa3AgPCBvbmNoaXBfMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfMjR4eF9jbGtzKTsKKwkgICAgIGNsa3ArKykgeworCisJCWlmICgoKmNsa3ApLT5mbGFncyAmIENMT0NLX0lOX09NQVAyNDJYICYmIGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBDTE9DS19JTl9PTUFQMjQzWCAmJiBjcHVfaXNfb21hcDI0MzAoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCisJY2xrcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGVfMjR4eCgmZHBsbF9jayk7CisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPD0gY2xrcmF0ZSkKKwkJCSBicmVhazsKKwl9CisJY3Vycl9wcmNtX3NldCA9IHByY207CisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML01QVSk6ICIKKwkgICAgICAgIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkgICAgICAgKHN5c19jay5yYXRlIC8gMTAwMDAwMCksIChzeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgKGRwbGxfY2sucmF0ZSAvIDEwMDAwMDApLCAobXB1X2NrLnJhdGUgLyAxMDAwMDAwKSkgOworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa19lbmFibGVfaW5pdF9jbG9ja3MoKTsKKworCS8qIEF2b2lkIHNsZWVwaW5nIHNsZWVwaW5nIGR1cmluZyBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KCkgKi8KKwl2Y2xrID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOworCXNjbGsgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwODFlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKQEAgLTAsMCArMSwyNjQzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqICBDb250YWN0czoKKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0syNFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMjRYWF9ICisKKyNpbmNsdWRlICJjbG9jay5oIgorCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAic2RyYy5oIgorCitzdGF0aWMgdm9pZCBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyBsb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHZvaWQgb21hcDJfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyBpbnQgb21hcDJfY2xrX2ZpeGVkX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHZvaWQgb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyBpbnQgb21hcDJfZW5hYmxlX29zY19jayhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHZvaWQgb21hcDJfZGlzYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGwoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworCisvKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgorICogeHRhbF9zcGVlZCwgZHBsbF9zcGVlZCwgbXB1X3NwZWVkLCBDTV9DTEtTRUxfTVBVLENNX0NMS1NFTF9EU1AKKyAqIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xLU0VMMV9QTEwgQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KKyAqLworc3RydWN0IHByY21fY29uZmlnIHsKKwl1bnNpZ25lZCBsb25nIHh0YWxfc3BlZWQ7CS8qIGNyeXN0YWwgcmF0ZSAqLworCXVuc2lnbmVkIGxvbmcgZHBsbF9zcGVlZDsJLyogZHBsbDogb3V0Knh0YWwqTS8oTi0xKXRhYmxlX3JlY2FsYyAqLworCXVuc2lnbmVkIGxvbmcgbXB1X3NwZWVkOwkvKiBzcGVlZCBvZiBNUFUgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tcHU7CS8qIG1wdSBkaXZpZGVyICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfZHNwOwkvKiBkc3AraXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX2dmeDsJLyogZ2Z4IGRpdmlkZXJzICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwxX2NvcmU7CS8qIG1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMV9wbGw7CS8qIG0sbiAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMl9wbGw7CS8qIGRwbGx4MSBvciB4MiBvdXQgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tZG07CS8qIG1vZGVtIGRpdmlkZXJzIDI0MzAgb25seSAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9zZHJjX3JmcjsJLyogYmFzZSByZWZyZXNoIHRpbWluZyBmb3IgYSBzZXQgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworfTsKKworLyoKKyAqIFRoZSBPTUFQMiBwcm9jZXNzb3IgY2FuIGJlIHJ1biBhdCBzZXZlcmFsIGRpc2NyZXRlICdQUkNNIGNvbmZpZ3VyYXRpb25zJy4KKyAqIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBjaGFyYWN0ZXJpemVkIGJ5IHZvbHRhZ2UgYW5kIHNwZWVkIGZvciBjbG9ja3MuCisgKiBUaGUgZGV2aWNlIGlzIG9ubHkgdmFsaWRhdGVkIGZvciBjZXJ0YWluIGNvbWJpbmF0aW9ucy4gT25lIHdheSB0byBleHByZXNzCisgKiB0aGVzZSBjb21iaW5hdGlvbnMgaXMgdmlhIHRoZSAncmF0aW8ncycgd2hpY2ggdGhlIGNsb2NrcyBvcGVyYXRlIHdpdGgKKyAqIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gVGhlc2UgcmF0aW8gc2V0cyBhcmUgZm9yIGEgZ2l2ZW4gdm9sdGFnZS9EUExMCisgKiBzZXR0aW5nLiBBbGwgY29uZmlndXJhdGlvbnMgY2FuIGJlIGRlc2NyaWJlZCBieSBhIERQTEwgc2V0dGluZyBhbmQgYSByYXRpbworICogVGhlcmUgYXJlIDMgcmF0aW8gc2V0cyBmb3IgdGhlIDI0MzAgYW5kIFggcmF0aW8gc2V0cyBmb3IgMjQyMC4KKyAqCisgKiAyNDMwIGRpZmZlcnMgZnJvbSAyNDIwIGluIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgcGhhc2Ugc3luY2hyb25pemVycyB1c2VkLgorICogVGhleSBib3RoIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgY2xvY2sgZG9tYWluIHNldHVwLiAyNDIwKGl2YTEsZHNwKSB2cworICogMjQzMCAoaXZhMi4xLCBOT2RzcCwgbWRtKQorICovCisKKy8qIENvcmUgZmllbGRzIGZvciBjbV9jbGtzZWwsIG5vdCByYXRpbyBnb3Zlcm5lZCAqLworI2RlZmluZSBSWF9DTEtTRUxfRFNTMQkJCSgweDEwIDw8IDgpCisjZGVmaW5lIFJYX0NMS1NFTF9EU1MyCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlhfQ0xLU0VMX1NTSQkJCSgweDUgPDwgMjApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVm9sdGFnZS9EUExMIHJhdGlvcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogMjQzMCBSYXRpbydzLCAyNDMwLVJhdGlvIENvbmZpZyAxICovCisjZGVmaW5lIFIxX0NMS1NFTF9MMwkJCSg0IDw8IDApCisjZGVmaW5lIFIxX0NMS1NFTF9MNAkJCSgyIDw8IDUpCisjZGVmaW5lIFIxX0NMS1NFTF9VU0IJCQkoNCA8PCAyNSkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUjFfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCVIxX0NMS1NFTF9MNCB8IFIxX0NMS1NFTF9MMworI2RlZmluZSBSMV9DTEtTRUxfTVBVCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX01QVV9WQUwJCVIxX0NMS1NFTF9NUFUKKyNkZWZpbmUgUjFfQ0xLU0VMX0RTUAkJCSgyIDw8IDApCisjZGVmaW5lIFIxX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCisjZGVmaW5lIFIxX0NNX0NMS1NFTF9EU1BfVkFMCQlSMV9DTEtTRUxfRFNQIHwgUjFfQ0xLU0VMX0RTUF9JRgorI2RlZmluZSBSMV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX0dGWF9WQUwJCVIxX0NMS1NFTF9HRlgKKyNkZWZpbmUgUjFfQ0xLU0VMX01ETQkJCSg0IDw8IDApCisjZGVmaW5lIFIxX0NNX0NMS1NFTF9NRE1fVkFMCQlSMV9DTEtTRUxfTURNCisKKy8qIDI0MzAtUmF0aW8gQ29uZmlnIDIgKi8KKyNkZWZpbmUgUjJfQ0xLU0VMX0wzCQkJKDYgPDwgMCkKKyNkZWZpbmUgUjJfQ0xLU0VMX0w0CQkJKDIgPDwgNSkKKyNkZWZpbmUgUjJfQ0xLU0VMX1VTQgkJCSgyIDw8IDI1KQorI2RlZmluZSBSMl9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSMl9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJUjJfQ0xLU0VMX0w0IHwgUjJfQ0xLU0VMX0wzCisjZGVmaW5lIFIyX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQorI2RlZmluZSBSMl9DTV9DTEtTRUxfTVBVX1ZBTAkJUjJfQ0xLU0VMX01QVQorI2RlZmluZSBSMl9DTEtTRUxfRFNQCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjJfQ0xLU0VMX0RTUF9JRgkJKDMgPDwgNSkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMX0RTUF9WQUwJCVIyX0NMS1NFTF9EU1AgfCBSMl9DTEtTRUxfRFNQX0lGCisjZGVmaW5lIFIyX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQorI2RlZmluZSBSMl9DTV9DTEtTRUxfR0ZYX1ZBTAkJUjJfQ0xLU0VMX0dGWAorI2RlZmluZSBSMl9DTEtTRUxfTURNCQkJKDYgPDwgMCkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMX01ETV9WQUwJCVIyX0NMS1NFTF9NRE0KKworLyogMjQzMC1SYXRpbyBCb290bSAoQllQQVNTKSAqLworI2RlZmluZSBSQl9DTEtTRUxfTDMJCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTEtTRUxfTDQJCQkoMSA8PCA1KQorI2RlZmluZSBSQl9DTEtTRUxfVVNCCQkJKDEgPDwgMjUpCisjZGVmaW5lIFJCX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVJCX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSQl9DTEtTRUxfTDQgfCBSQl9DTEtTRUxfTDMKKyNkZWZpbmUgUkJfQ0xLU0VMX01QVQkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9NUFVfVkFMCQlSQl9DTEtTRUxfTVBVCisjZGVmaW5lIFJCX0NMS1NFTF9EU1AJCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTEtTRUxfRFNQX0lGCQkoMSA8PCA1KQorI2RlZmluZSBSQl9DTV9DTEtTRUxfRFNQX1ZBTAkJUkJfQ0xLU0VMX0RTUCB8IFJCX0NMS1NFTF9EU1BfSUYKKyNkZWZpbmUgUkJfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9HRlhfVkFMCQlSQl9DTEtTRUxfR0ZYCisjZGVmaW5lIFJCX0NMS1NFTF9NRE0JCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTV9DTEtTRUxfTURNX1ZBTAkJUkJfQ0xLU0VMX01ETQorCisvKiAyNDIwIFJhdGlvIEVxdWl2YWxlbnRzICovCisjZGVmaW5lIFJYWF9DTEtTRUxfVkxZTlEJCSgweDEyIDw8IDE1KQorI2RlZmluZSBSWFhfQ0xLU0VMX1NTSQkJCSgweDggPDwgMjApCisKKy8qIDI0MjAtUFJDTSBJSUkgNTMyTUh6IGNvcmUgKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfTDMJCQkoNCA8PCAwKQkvKiAxMzNNSHogKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA2Ni41TUh6ICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX1VTQgkJCSg0IDw8IDI1KQkvKiAzMy4yNU1IeiAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwJUklJSV9DTEtTRUxfVVNCIHwgUlhYX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJYWF9DTEtTRUxfVkxZTlEgfCBSWF9DTEtTRUxfRFNTMiB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzEgfCBSSUlJX0NMS1NFTF9MNCB8IFwKKwkJCQkJUklJSV9DTEtTRUxfTDMKKyNkZWZpbmUgUklJSV9DTEtTRUxfTVBVCQkJKDIgPDwgMCkJLyogMjY2TUh6ICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJSUlfQ0xLU0VMX01QVQorI2RlZmluZSBSSUlJX0NMS1NFTF9EU1AJCQkoMyA8PCAwKQkvKiBjNXggLSAxNzcuM01IeiAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCS8qIGM1eCAtIDg4LjY3TUh6ICovCisjZGVmaW5lIFJJSUlfU1lOQ19EU1AJCQkoMSA8PCA3KQkvKiBFbmFibGUgc3luYyAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9JVkEJCQkoNiA8PCA4KQkvKiBpdmExIC0gODguNjdNSHogKi8KKyNkZWZpbmUgUklJSV9TWU5DX0lWQQkJCSgxIDw8IDEzKQkvKiBFbmFibGUgc3luYyAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9EU1BfVkFMCQlSSUlJX1NZTkNfSVZBIHwgUklJSV9DTEtTRUxfSVZBIHwgXAorCQkJCQlSSUlJX1NZTkNfRFNQIHwgUklJSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQlSSUlJX0NMS1NFTF9EU1AKKyNkZWZpbmUgUklJSV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkJLyogNjYuNU1IeiAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSUlJX0NMS1NFTF9HRlgKKworLyogMjQyMC1QUkNNIElJIDYwME1IeiBjb3JlICovCisjZGVmaW5lIFJJSV9DTEtTRUxfTDMJCQkoNiA8PCAwKQkvKiAxMDBNSHogKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9MNAkJCSgyIDw8IDUpCS8qIDUwTUh6ICovCisjZGVmaW5lIFJJSV9DTEtTRUxfVVNCCQkJKDIgPDwgMjUpCS8qIDUwTUh6ICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSSUlfQ0xLU0VMX1VTQiB8IFwKKwkJCQkJUlhYX0NMS1NFTF9TU0kgfCBSWFhfQ0xLU0VMX1ZMWU5RIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSSUlfQ0xLU0VMX0w0IHwgUklJX0NMS1NFTF9MMworI2RlZmluZSBSSUlfQ0xLU0VMX01QVQkJCSgyIDw8IDApCS8qIDMwME1IeiAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJSV9DTEtTRUxfTVBVCisjZGVmaW5lIFJJSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0gMjAwTUh6ICovCisjZGVmaW5lIFJJSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSAxMDBNSHogKi8KKyNkZWZpbmUgUklJX1NZTkNfRFNQCQkJKDAgPDwgNykJLyogQnlwYXNzIHN5bmMgKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9JVkEJCQkoMyA8PCA4KQkvKiBpdmExIC0gMjAwTUh6ICovCisjZGVmaW5lIFJJSV9TWU5DX0lWQQkJCSgwIDw8IDEzKQkvKiBCeXBhc3Mgc3luYyAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCVJJSV9TWU5DX0lWQSB8IFJJSV9DTEtTRUxfSVZBIHwgXAorCQkJCQlSSUlfU1lOQ19EU1AgfCBSSUlfQ0xLU0VMX0RTUF9JRiB8IFwKKwkJCQkJUklJX0NMS1NFTF9EU1AKKyNkZWZpbmUgUklJX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQkvKiA1ME1IeiAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJJSV9DTEtTRUxfR0ZYCisKKy8qIDI0MjAtUFJDTSBJIDY2ME1IeiBjb3JlICovCisjZGVmaW5lIFJJX0NMS1NFTF9MMwkJCSg0IDw8IDApCS8qIDE2NU1IeiAqLworI2RlZmluZSBSSV9DTEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA4Mi41TUh6ICovCisjZGVmaW5lIFJJX0NMS1NFTF9VU0IJCQkoNCA8PCAyNSkJLyogNDEuMjVNSHogKi8KKyNkZWZpbmUgUklfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUklfQ0xLU0VMX1VTQiB8IFwKKwkJCQkJUlhYX0NMS1NFTF9TU0kgfCBSWFhfQ0xLU0VMX1ZMWU5RIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSSV9DTEtTRUxfTDQgfCBSSV9DTEtTRUxfTDMKKyNkZWZpbmUgUklfQ0xLU0VMX01QVQkJCSgyIDw8IDApCS8qIDMzME1IeiAqLworI2RlZmluZSBSSV9DTV9DTEtTRUxfTVBVX1ZBTAkJUklfQ0xLU0VMX01QVQorI2RlZmluZSBSSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0gMjIwTUh6ICovCisjZGVmaW5lIFJJX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCS8qIGM1eCAtIDExME1IeiAqLworI2RlZmluZSBSSV9TWU5DX0RTUAkJCSgxIDw8IDcpCS8qIEFjdGl2YXRlIHN5bmMgKi8KKyNkZWZpbmUgUklfQ0xLU0VMX0lWQQkJCSg0IDw8IDgpCS8qIGl2YTEgLSAxNjVNSHogKi8KKyNkZWZpbmUgUklfU1lOQ19JVkEJCQkoMCA8PCAxMykJLyogQnlwYXNzIHN5bmMgKi8KKyNkZWZpbmUgUklfQ01fQ0xLU0VMX0RTUF9WQUwJCVJJX1NZTkNfSVZBIHwgUklfQ0xLU0VMX0lWQSB8IFwKKwkJCQkJUklfU1lOQ19EU1AgfCBSSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQlSSV9DTEtTRUxfRFNQCisjZGVmaW5lIFJJX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQkvKiAxNjVNSHogKi8KKyNkZWZpbmUgUklfQ01fQ0xLU0VMX0dGWF9WQUwJCVJJX0NMS1NFTF9HRlgKKworLyogMjQyMC1QUkNNIFZJSSAoYm9vdCkgKi8KKyNkZWZpbmUgUlZJSV9DTEtTRUxfTDMJCQkoMSA8PCAwKQorI2RlZmluZSBSVklJX0NMS1NFTF9MNAkJCSgxIDw8IDUpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUzEJCSgxIDw8IDgpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUzIJCSgwIDw8IDEzKQorI2RlZmluZSBSVklJX0NMS1NFTF9WTFlOUQkJKDEgPDwgMTUpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX1NTSQkJCSgxIDw8IDIwKQorI2RlZmluZSBSVklJX0NMS1NFTF9VU0IJCQkoMSA8PCAyNSkKKworI2RlZmluZSBSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwJUlZJSV9DTEtTRUxfVVNCIHwgUlZJSV9DTEtTRUxfU1NJIHwgXAorCQkJCQlSVklJX0NMS1NFTF9WTFlOUSB8IFJWSUlfQ0xLU0VMX0RTUzIgfCBcCisJCQkJCVJWSUlfQ0xLU0VMX0RTUzEgfCBSVklJX0NMS1NFTF9MNCB8IFJWSUlfQ0xLU0VMX0wzCisKKyNkZWZpbmUgUlZJSV9DTEtTRUxfTVBVCQkJKDEgPDwgMCkgLyogYWxsIGRpdmlkZSBieSAxICovCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJWSUlfQ0xLU0VMX01QVQorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKKyNkZWZpbmUgUlZJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0lWQQkJCSgxIDw8IDgpCisjZGVmaW5lIFJWSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykKKyNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUlZJSV9TWU5DX0lWQSB8IFJWSUlfQ0xLU0VMX0lWQSB8IFJWSUlfU1lOQ19EU1AgfCBcCisJCQkJCVJWSUlfQ0xLU0VMX0RTUF9JRiB8IFJWSUlfQ0xLU0VMX0RTUAorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJWSUlfQ0xLU0VMX0dGWAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDI0MzAgVGFyZ2V0IG1vZGVzOiBBbG9uZyB3aXRoIGVhY2ggY29uZmlndXJhdGlvbiB0aGUgQ1BVIGhhcyBzZXZlcmFsCisgKiBtb2RlcyB3aGljaCBnb2VzIGFsb25nIHdpdGggdGhlbS4gTW9kZXMgbWFpbmx5IGFyZSB0aGUgYWRkaXRpb24gb2YKKyAqIGRlc2NyaWJlIERQTEwgY29tYmluYXRpb25zIHRvIGdvIGFsb25nIHdpdGggYSByYXRpby4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhhcmR3YXJlIGdvdmVybmVkICovCisjZGVmaW5lIE1YXzQ4TV9TUkMJCQkoMCA8PCAzKQorI2RlZmluZSBNWF81NE1fU1JDCQkJKDAgPDwgNSkKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEyCQkoMyA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEzCQkoMiA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzE5XzIJCSgwIDw8IDIzKQorCisvKgorICogMjQzMCAtIHN0YW5kYWxvbmUsIDIqcmVmKk0vKG4rMSksIE0vTiBpcyBmb3IgZXhhY3RuZXNzIG5vdCByZWxvY2sgc3BlZWQKKyAqICM1YQkocmF0aW8xKSBiYXNlcG9ydC10YXJnZXQsIHRhcmdldCBEUExMID0gMjY2KjIgPSA1MzJNSHoKKyAqLworI2RlZmluZSBNNUFfRFBMTF9NVUxUXzEyCQkoMTMzIDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTIJCQkoNSA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUFfRFBMTF9ESVZfMTIgfCBNNUFfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTTVBX0RQTExfTVVMVF8xMwkJKDYxIDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTMJCQkoMiA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUFfRFBMTF9ESVZfMTMgfCBNNUFfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTMKKyNkZWZpbmUgTTVBX0RQTExfTVVMVF8xOQkJKDU1IDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTkJCQkoMyA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUFfRFBMTF9ESVZfMTkgfCBNNUFfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyogIzViCShyYXRpbzEpIHRhcmdldCBEUExMID0gMjAwKjIgPSA0MDBNSHogKi8KKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQorI2RlZmluZSBNNUJfRFBMTF9ESVZfMTIJCQkoMiA8PCA4KQorI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUJfRFBMTF9ESVZfMTIgfCBNNUJfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMwkJKDIwMCA8PCAxMikKKyNkZWZpbmUgTTVCX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisKKyNkZWZpbmUgTTVCX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVCX0RQTExfRElWXzEzIHwgTTVCX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisjZGVmaW5lIE01Ql9EUExMX01VTFRfMTkJCSgxMjUgPDwgMTIpCisjZGVmaW5lIE01Ql9EUExMX0RJVl8xOQkJCSgzMSA8PCA4KQorI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUJfRFBMTF9ESVZfMTkgfCBNNUJfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyoKKyAqICM0CShyYXRpbzIpLCBEUExMID0gMzk5KjIgPSA3OThNSHosIEwzPTEzM01IegorICovCisjZGVmaW5lIE00X0RQTExfTVVMVF8xMgkJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE00X0RQTExfRElWXzEyCQkJKDMgPDwgOCkKKyNkZWZpbmUgTTRfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNF9EUExMX0RJVl8xMiB8IE00X0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCisKKyNkZWZpbmUgTTRfRFBMTF9NVUxUXzEzCQkJKDM5OSA8PCAxMikKKyNkZWZpbmUgTTRfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKKyNkZWZpbmUgTTRfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNF9EUExMX0RJVl8xMyB8IE00X0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisKKyNkZWZpbmUgTTRfRFBMTF9NVUxUXzE5CQkJKDE0NSA8PCAxMikKKyNkZWZpbmUgTTRfRFBMTF9ESVZfMTkJCQkoNiA8PCA4KQorI2RlZmluZSBNNF9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU00X0RQTExfRElWXzE5IHwgTTRfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorCisvKgorICogIzMJKHJhdGlvMikgYmFzZXBvcnQtdGFyZ2V0LCB0YXJnZXQgRFBMTCA9IDMzMCoyID0gNjYwTUh6CisgKi8KKyNkZWZpbmUgTTNfRFBMTF9NVUxUXzEyCQkJKDU1IDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xMgkJCSgxIDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTNfRFBMTF9ESVZfMTIgfCBNM19EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNM19EUExMX01VTFRfMTMJCQkoNzYgPDwgMTIpCisjZGVmaW5lIE0zX0RQTExfRElWXzEzCQkJKDIgPDwgOCkKKyNkZWZpbmUgTTNfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNM19EUExMX0RJVl8xMyB8IE0zX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisjZGVmaW5lIE0zX0RQTExfTVVMVF8xOQkJCSgxNyA8PCAxMikKKyNkZWZpbmUgTTNfRFBMTF9ESVZfMTkJCQkoMCA8PCA4KQorI2RlZmluZSBNM19DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU0zX0RQTExfRElWXzE5IHwgTTNfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorCisvKgorICogIzIgICAocmF0aW8xKSBEUExMID0gMzMwKjIgPSA2NjBNSHosIEwzPTE2NU1IegorICovCisjZGVmaW5lIE0yX0RQTExfTVVMVF8xMgkJICAgICAgICAoNTUgPDwgMTIpCisjZGVmaW5lIE0yX0RQTExfRElWXzEyCQkgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIE0yX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTJfRFBMTF9ESVZfMTIgfCBNMl9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorCisvKiBTcGVlZCBjaGFuZ2VzIC0gVXNlZCA2NTguN01IeiBpbnN0ZWFkIG9mIDY2ME1IeiBmb3IgTFAtUmVmcmVzaCBNPTc2IE49MiwKKyAqIHJlbG9jayB0aW1lIGlzc3VlICovCisvKiBDb3JlIGZyZXF1ZW5jeSBjaGFuZ2VkIGZyb20gMzMwLzE2NSB0byAzMjkvMTY0IE1IeiovCisjZGVmaW5lIE0yX0RQTExfTVVMVF8xMwkJICAgICAgICAoNzYgPDwgMTIpCisjZGVmaW5lIE0yX0RQTExfRElWXzEzCQkgICAgICAgICgyIDw8IDgpCisjZGVmaW5lIE0yX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTJfRFBMTF9ESVZfMTMgfCBNMl9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworCisjZGVmaW5lIE0yX0RQTExfTVVMVF8xOQkJICAgICAgICAoMTcgPDwgMTIpCisjZGVmaW5lIE0yX0RQTExfRElWXzE5CQkgICAgICAgICgwIDw8IDgpCisjZGVmaW5lIE0yX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTJfRFBMTF9ESVZfMTkgfCBNMl9EUExMX01VTFRfMTkgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xOV8yCisKKy8qIGJvb3QgKGJvb3QpICovCisjZGVmaW5lIE1CX0RQTExfTVVMVAkJCSgxIDw8IDEyKQorI2RlZmluZSBNQl9EUExMX0RJVgkJCSgwIDw8IDgpCisjZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IE1CX0RQTExfRElWIHxcCisJCQkJCU1CX0RQTExfTVVMVCB8IE1YX0FQTExTX0NMSUtJTl8xMgorCisjZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IE1CX0RQTExfRElWIHxcCisJCQkJCU1CX0RQTExfTVVMVCB8IE1YX0FQTExTX0NMSUtJTl8xMworCisjZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IE1CX0RQTExfRElWIHxcCisJCQkJCU1CX0RQTExfTVVMVCB8IE1YX0FQTExTX0NMSUtJTl8xOQorCisvKgorICogMjQzMCAtIGNoYXNzaXMgKHNlZG5hKQorICogMTY1IChyYXRpbzEpIHNhbWUgYXMgYWJvdmUgIzIKKyAqIDE1MCAocmF0aW8xKQorICogMTMzIChyYXRpbzIpIHNhbWUgYXMgYWJvdmUgIzQKKyAqIDExMCAocmF0aW8yKSBzYW1lIGFzIGFib3ZlICMzCisgKiAxMDQgKHJhdGlvMikKKyAqIGJvb3QgKGJvb3QpCisgKi8KKworLyogUFJDTSBJIHRhcmdldCBEUExMID0gMiozMzBNSHogPSA2NjBNSHogKi8KKyNkZWZpbmUgTUlfRFBMTF9NVUxUXzEyCQkJKDU1IDw8IDEyKQorI2RlZmluZSBNSV9EUExMX0RJVl8xMgkJCSgxIDw8IDgpCisjZGVmaW5lIE1JX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTUlfRFBMTF9ESVZfMTIgfCBNSV9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorCisvKgorICogMjQyMCBFcXVpdmFsZW50IC0gbW9kZSByZWdpc3RlcnMKKyAqIFBSQ00gSUkgLCB0YXJnZXQgRFBMTCA9IDIqMzAwTUh6ID0gNjAwTUh6CisgKi8KKyNkZWZpbmUgTUlJX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQorI2RlZmluZSBNSUlfRFBMTF9ESVZfMTIJCQkoMSA8PCA4KQorI2RlZmluZSBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlfRFBMTF9ESVZfMTIgfCBNSUlfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTUlJX0RQTExfTVVMVF8xMwkJKDMwMCA8PCAxMikKKyNkZWZpbmUgTUlJX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisjZGVmaW5lIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU1JSV9EUExMX0RJVl8xMyB8IE1JSV9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworCisvKiBQUkNNIElJSSB0YXJnZXQgRFBMTCA9IDIqMjY2ID0gNTMyTUh6Ki8KKyNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTIJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTIJCSg1IDw8IDgpCisjZGVmaW5lIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlJX0RQTExfRElWXzEyIHwgTUlJSV9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNSUlJX0RQTExfTVVMVF8xMwkJKDI2NiA8PCAxMikKKyNkZWZpbmUgTUlJSV9EUExMX0RJVl8xMwkJKDEyIDw8IDgpCisjZGVmaW5lIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlJX0RQTExfRElWXzEzIHwgTUlJSV9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworCisvKiBQUkNNIFZJSSAoYm9vdCBieXBhc3MpICovCisjZGVmaW5lIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAorI2RlZmluZSBNVklJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwKKworLyogSGlnaCBhbmQgbG93IG9wZXJhdGlvbiB2YWx1ZSAqLworI2RlZmluZSBNWF9DTEtTRUwyX1BMTF8yeF9WQUwJCSgyIDw8IDApCisjZGVmaW5lIE1YX0NMS1NFTDJfUExMXzF4X1ZBTAkJKDEgPDwgMCkKKworLyogTVBVIHNwZWVkIGRlZmluZXMgKi8KKyNkZWZpbmUgUzEyTQkxMjAwMDAwMAorI2RlZmluZSBTMTNNCTEzMDAwMDAwCisjZGVmaW5lIFMxOU0JMTkyMDAwMDAKKyNkZWZpbmUgUzI2TQkyNjAwMDAwMAorI2RlZmluZSBTMTAwTQkxMDAwMDAwMDAKKyNkZWZpbmUgUzEzM00JMTMzMDAwMDAwCisjZGVmaW5lIFMxNTBNCTE1MDAwMDAwMAorI2RlZmluZSBTMTY0TQkxNjQwMDAwMDAKKyNkZWZpbmUgUzE2NU0JMTY1MDAwMDAwCisjZGVmaW5lIFMxOTlNCTE5OTAwMDAwMAorI2RlZmluZSBTMjAwTQkyMDAwMDAwMDAKKyNkZWZpbmUgUzI2Nk0JMjY2MDAwMDAwCisjZGVmaW5lIFMzMDBNCTMwMDAwMDAwMAorI2RlZmluZSBTMzI5TQkzMjkwMDAwMDAKKyNkZWZpbmUgUzMzME0JMzMwMDAwMDAwCisjZGVmaW5lIFMzOTlNCTM5OTAwMDAwMAorI2RlZmluZSBTNDAwTQk0MDAwMDAwMDAKKyNkZWZpbmUgUzUzMk0JNTMyMDAwMDAwCisjZGVmaW5lIFM2MDBNCTYwMDAwMDAwMAorI2RlZmluZSBTNjU4TQk2NTgwMDAwMDAKKyNkZWZpbmUgUzY2ME0JNjYwMDAwMDAwCisjZGVmaW5lIFM3OThNCTc5ODAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvJ3MgZm9yIGEgUFJDTSBhcmUgbWFuZGF0ZWQuCisgKiB4dGFsX3NwZWVkLCBkcGxsX3NwZWVkLCBtcHVfc3BlZWQsIENNX0NMS1NFTF9NUFUsCisgKiBDTV9DTEtTRUxfRFNQLCBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMLAorICogQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KKyAqCisgKiBGaWxsaW5nIGluIHRhYmxlIGJhc2VkIG9uIEg0IGJvYXJkcyBhbmQgMjQzMC1TRFBzIHZhcmlhbnRzIGF2YWlsYWJsZS4KKyAqIFRoZXJlIGFyZSBxdWl0ZSBhIGZldyBtb3JlIHJhdGVzIGNvbWJpbmF0aW9ucyB3aGljaCBjb3VsZCBiZSBkZWZpbmVkLgorICoKKyAqIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpbmVkIHRoZSBzdGFydCB1cCB3aWxsIHRyeSBhbmQgY2hvb3NlIHRoZQorICogZmFzdGVzdCBvbmUuIElmIGEgJ2Zhc3QnIHZhbHVlIGlzIGRlZmluZWQsIHRoZW4gYXV0b21hdGljYWxseSwgdGhlIC8yCisgKiBvbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0IGNhbiBiZSB1c2VkLglHZW5lcmFsbHkgaGF2aW5nIG1vcmUgdGhhdAorICogb25lIGZhc3Qgc2V0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGFzIHN0YXRpYyB0aW1pbmdzIG5lZWQgdG8gYmUgY2hhbmdlZAorICogdG8gY2hhbmdlIHRoZSBzZXQuCSBUaGUgZXhjZXB0aW9uIGlzIHRoZSBieXBhc3Mgc2V0dGluZyB3aGljaCBpcworICogYXZhaWxibGUgZm9yIGxvdyBwb3dlciBieXBhc3MuCisgKgorICogTm90ZTogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBzb3J0ZWQsIGZhc3Rlc3QgdG8gc2xvd2VzdC4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IHByY21fY29uZmlnIHJhdGVfdGFibGVbXSA9IHsKKwkvKiBQUkNNIEkgLSBGQVNUICovCisJe1MxMk0sIFM2NjBNLCBTMzMwTSwgUklfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMzBNSHogQVJNICovCisJCVJJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTY1TUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTSBJSSAtIEZBU1QgKi8KKwl7UzEyTSwgUzYwME0sIFMzMDBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMDBNSHogQVJNICovCisJCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCXtTMTNNLCBTNjAwTSwgUzMwME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMwME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTSBJSUkgLSBGQVNUICovCisJe1MxMk0sIFM1MzJNLCBTMjY2TSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCXtTMTNNLCBTNTMyTSwgUzI2Nk0sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCisJCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJIC0gU0xPVyAqLworCXtTMTJNLCBTMzAwTSwgUzE1ME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE1ME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFMzMDBNLCBTMTUwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTUwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJSSAtIFNMT1cgKi8KKwl7UzEyTSwgUzI2Nk0sIFMxMzNNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFMyNjZNLCBTMTMzTSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzM01IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00tVklJIChib290LWJ5cGFzcykgKi8KKwl7UzEyTSwgUzEyTSwgUzEyTSwgUlZJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEyTUh6IEFSTSovCisJCVJWSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTVZJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNLVZJSSAoYm9vdC1ieXBhc3MpICovCisJe1MxM00sIFMxM00sIFMxM00sIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxM01IeiBBUk0gKi8KKwkJUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUlZJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNVklJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gIzQgLSByYXRpbzIgKEVTMi4xKSAtIEZBU1QgKi8KKwl7UzEzTSwgUzc5OE0sIFMzOTlNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDM5OU1IeiBBUk0gKi8KKwkJUjJfQ01fQ0xLU0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNF9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjMiAtIHJhdGlvMSAoRVMyKSAtIEZBU1QgKi8KKwl7UzEzTSwgUzY1OE0sIFMzMjlNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMzME1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNMl9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfMTY1TUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWEgLSByYXRpbzEgLSBGQVNUICovCisJe1MxM00sIFM1MzJNLCBTMjY2TSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM1YiAtIHJhdGlvMSAtIEZBU1QgKi8KKwl7UzEzTSwgUzQwME0sIFMyMDBNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDIwME1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlTRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzQgLSByYXRpbzEgKEVTMi4xKSAtIFNMT1cgKi8KKwl7UzEzTSwgUzM5OU0sIFMxOTlNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDIwME1IeiBBUk0gKi8KKwkJUjJfQ01fQ0xLU0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNF9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjMiAtIHJhdGlvMSAoRVMyKSAtIFNMT1cgKi8KKwl7UzEzTSwgUzMyOU0sIFMxNjRNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE2NU1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNMl9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfMTY1TUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWEgLSByYXRpbzEgLSBTTE9XICovCisJe1MxM00sIFMyNjZNLCBTMTMzTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMXhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM1YiAtIHJhdGlvMSAtIFNMT1cqLworCXtTMTNNLCBTMjAwTSwgUzEwME0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTAwTUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVNEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTS1ib290L2J5cGFzcyAqLworCXtTMTNNLCBTMTNNLCBTMTNNLCBSQl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzTWh6ICovCisJCVJCX0NNX0NMS1NFTF9EU1BfVkFMLCBSQl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUkJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFJCX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlTRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KKwl7UzEyTSwgUzEyTSwgUzEyTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMk1oeiAqLworCQlSQl9DTV9DTEtTRUxfRFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQzWH0sCisKKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAyNHh4IGNsb2NrIHRyZWUuCisgKgorICogTk9URTpJbiBtYW55IGNhc2VzIGhlcmUgd2UgYXJlIGFzc2lnbmluZyBhICdkZWZhdWx0JyBwYXJlbnQuCUluIG1hbnkKKyAqCWNhc2VzIHRoZSBwYXJlbnQgaXMgc2VsZWN0YWJsZS4JVGhlIGdldC9zZXQgcGFyZW50IGNhbGxzIHdpbGwgYWxzbworICoJc3dpdGNoIHNvdXJjZXMuCisgKgorICoJTWFueSBzb21lIGNsb2NrcyBzYXkgYWx3YXlzX2VuYWJsZWQsIGJ1dCB0aGV5IGNhbiBiZSBhdXRvIGlkbGVkIGZvcgorICoJcG93ZXIgc2F2aW5ncy4gVGhleSB3aWxsIGFsd2F5cyBiZSBhdmFpbGFibGUgdXBvbiBjbG9jayByZXF1ZXN0LgorICoKKyAqCVNldmVyYWwgc291cmNlcyBhcmUgZ2l2ZW4gaW5pdGlhbCByYXRlcyB3aGljaCBtYXkgYmUgd3JvbmcsIHRoaXMgd2lsbAorICoJYmUgZml4ZWQgdXAgaW4gdGhlIGluaXQgZnVuYy4KKyAqCisgKglUaGluZ3MgYXJlIGJyb2FkbHkgc2VwYXJhdGVkIGJlbG93IGJ5IGNsb2NrIGRvbWFpbnMuIEl0IGlzCisgKglub3Rld29ydGh5IHRoYXQgbW9zdCBwZXJpZmVyYWxzIGhhdmUgZGVwZW5kZW5jaWVzIG9uIG11bHRpcGxlIGNsb2NrCisgKglkb21haW5zLiBNYW55IGdldCB0aGVpciBpbnRlcmZhY2UgY2xvY2tzIGZyb20gdGhlIEw0IGRvbWFpbiwgYnV0IGdldAorICoJZnVuY3Rpb25hbCBjbG9ja3MgZnJvbSBmaXhlZCBzb3VyY2VzIG9yIG90aGVyIGNvcmUgZG9tYWluIGRlcml2ZWQKKyAqCWNsb2Nrcy4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEJhc2UgZXh0ZXJuYWwgaW5wdXQgY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzMya19jayA9IHsKKwkubmFtZQkJPSAiZnVuY18zMmtfY2siLAorCS5yYXRlCQk9IDMyMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCit9OworCisvKiBUeXBpY2FsIDEyLzEzTUh6IGluIHN0YW5kYWxvbmUgbW9kZSwgd2lsbCBiZSAyNk1oeiBpbiBjaGFzc2lzIG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9zY19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgKjI2LCAzOC40KU1IeiAqLworCS5uYW1lCQk9ICJvc2NfY2siLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZQkJPSAmb21hcDJfZW5hYmxlX29zY19jaywKKwkuZGlzYWJsZQk9ICZvbWFwMl9kaXNhYmxlX29zY19jaywKKwkucmVjYWxjCQk9ICZvbWFwMl9vc2NfY2xrX3JlY2FsYywKK307CisKKy8qIFdpdGggb3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLworCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfc3lzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KKwkubmFtZQkJPSAiYWx0X2NrIiwKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorfTsKKworLyoKKyAqIEFuYWxvZyBkb21haW4gcm9vdCBzb3VyY2UgY2xvY2tzCisgKi8KKworLyogZHBsbF9jaywgaXMgYnJva2VuIG91dCBpbiB0byBzcGVjaWFsIGNhc2VzIHRocm91Z2ggY2xrc2VsICovCisvKiBSRVZJU0lUOiBSYXRlIGNoYW5nZXMgb24gZHBsbF9jayB0cmlnZ2VyIGEgZnVsbCBzZXQgY2hhbmdlLgkuLi4KKyAqIGRlYWwgd2l0aCB0aGlzCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgZHBsbF9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLm11bHRfbWFzawkJPSBPTUFQMjRYWF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCQk9IE9NQVAyNFhYX0RQTExfRElWX01BU0ssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLworCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmb21hcDJfZHBsbF9yZWNhbGMsCisJLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0geworCS5uYW1lCQk9ICJhcGxsOTZfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA5NjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8IEVOQUJMRV9PTl9JTklULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzk2TV9QTExfU0hJRlQsCisJLmVuYWJsZQkJPSAmb21hcDJfY2xrX2ZpeGVkX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZSwKKwkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw1NF9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDU0X2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfCBFTkFCTEVfT05fSU5JVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl81NE1fUExMX1NISUZULAorCS5lbmFibGUJCT0gJm9tYXAyX2Nsa19maXhlZF9lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUsCisJLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCit9OworCisvKgorICogUFJDTSBkaWdpdGFsIGJhc2Ugc291cmNlcworICovCisKKy8qIGZ1bmNfNTRtX2NrICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY181NG1fYXBsbDU0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY181NG1fYWx0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfNTRtX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZhcGxsNTRfY2ssIC5yYXRlcyA9IGZ1bmNfNTRtX2FwbGw1NF9yYXRlcywgfSwKKwl7IC5wYXJlbnQgPSAmYWx0X2NrLAkucmF0ZXMgPSBmdW5jXzU0bV9hbHRfcmF0ZXMsIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY181NG1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfNTRtX2NrIiwKKwkucGFyZW50CQk9ICZhcGxsNTRfY2ssCS8qIGNhbiBhbHNvIGJlIGFsdF9jbGsgKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9QUk9QQUdBVEVTIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfNTRNX1NPVVJDRSwKKwkuY2xrc2VsCQk9IGZ1bmNfNTRtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogZnVuY185Nm1fY2sgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY185Nm1fYXBsbDk2X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY185Nm1fYWx0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfOTZtX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZhcGxsOTZfY2ssCS5yYXRlcyA9IGZ1bmNfOTZtX2FwbGw5Nl9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZhbHRfY2ssCS5yYXRlcyA9IGZ1bmNfOTZtX2FsdF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVGhlIHBhcmVudCBvZiB0aGlzIGNsb2NrIGlzIG5vdCBzZWxlY3RhYmxlIG9uIDI0MjAuICovCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzk2bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY185Nm1fY2siLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9QUk9QQUdBVEVTIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0MzBfOTZNX1NPVVJDRSwKKwkuY2xrc2VsCQk9IGZ1bmNfOTZtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qIGZ1bmNfNDhtX2NrICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY180OG1fYXBsbDk2X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMiwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZnVuY180OG1fYWx0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfNDhtX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZhcGxsOTZfY2ssCS5yYXRlcyA9IGZ1bmNfNDhtX2FwbGw5Nl9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZhbHRfY2ssIC5yYXRlcyA9IGZ1bmNfNDhtX2FsdF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY180OG1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfNDhtX2NrIiwKKwkucGFyZW50CQk9ICZhcGxsOTZfY2ssCSAvKiA5Nk0gb3IgQWx0ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCisJLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY18xMm1fY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5maXhlZF9kaXYJPSA0LAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoZSBjb21tb25fY2xrb3V0KiBjbGtzZWxfcmF0ZSBzdHJ1Y3RzIGFyZSBjb21tb24gdG8KKyAqIHN5c19jbGtvdXQsIHN5c19jbGtvdXRfc3JjLCBzeXNfY2xrb3V0MiwgYW5kIHN5c19jbGtvdXQyX3NyYy4KKyAqIHN5c19jbGtvdXQyXyogYXJlIDI0MjAtb25seSwgc28gdGhlCisgKiBjbGtzZWxfcmF0ZSBmbGFncyBmaWVsZHMgYXJlIGluYWNjdXJhdGUgZm9yIHRob3NlIGNsb2Nrcy4gVGhpcyBpcworICogaGFybWxlc3Mgc2luY2UgYWNjZXNzIHRvIHRob3NlIGNsb2NrcyBhcmUgZ2F0ZWQgYnkgdGhlIHN0cnVjdCBjbGsKKyAqIGZsYWdzIGZpZWxkcywgd2hpY2ggbWFyayB0aGVtIGFzIDI0MjAtb25seS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmZ1bmNfOTZtX2NrLCAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY185Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY181NG1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzU0bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dF9zcmMgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXRfc3JjIiwKKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9QUk9QQUdBVEVTLAorCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NMS09VVF9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjb21tb25fY2xrb3V0X3NyY19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0X3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLnBhcmVudAkJPSAmc3lzX2Nsa291dF9zcmMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLT1VUX0RJVl9NQVNLLAorCS5jbGtzZWwJCT0gc3lzX2Nsa291dF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCisvKiBJbiAyNDMwLCBuZXcgaW4gMjQyMCBFUzIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQyX3NyYyA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dDJfc3JjIiwKKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfQ0xLT1VUMl9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtPVVQyX1NPVVJDRV9NQVNLLAorCS5jbGtzZWwJCT0gY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dDJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jbGtvdXQyX3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MiA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dDIiLAorCS5wYXJlbnQJCT0gJnN5c19jbGtvdXQyX3NyYywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS09VVDJfRElWX01BU0ssCisJLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBlbXVsX2NrID0geworCS5uYW1lCQk9ICJlbXVsX2NrIiwKKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS0VNVUxfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VNVUxBVElPTl9FTl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCit9OworCisvKgorICogTVBVIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICoJCU1QVV9GQ0xLLCBNUFVfSUNMSworICoJCUlOVF9NX0ZDTEssIElOVF9NX0lfQ0xLCisgKgorICogLSBJbmRpdmlkdWFsIGNsb2NrcyBhcmUgaGFyZHdhcmUgbWFuYWdlZC4KKyAqIC0gQmFzZSBkaXZpZGVyIGNvbWVzIGZyb206IENNX0NMS1NFTF9NUFUKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbXB1X2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1wdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gbXB1X2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsJLyogQ29udHJvbCBjcHUgKi8KKwkubmFtZQkJPSAibXB1X2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQIHwKKwkJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9NUFVfTUFTSywKKwkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZSAgICAgPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyoKKyAqIERTUCAoMjQzMC1JVkEyLjEpICgyNDIwLVVNQStJVkExKSBjbG9jayBkb21haW4KKyAqIENsb2NrczoKKyAqCTI0MzA6IElWQTIuMV9GQ0xLIChyZWFsbHkganVzdCBEU1BfRkNMSyksIElWQTIuMV9JQ0xLCisgKgkyNDIwOiBVTUFfRkNMSywgVU1BX0lDTEssIElWQV9NUFUsIElWQV9DT1AKKyAqCisgKiBXb24ndCBiZSB0b28gc3BlY2lmaWMgaGVyZS4gVGhlIGNvcmUgY2xvY2sgY29tZXMgaW50byB0aGlzIGJsb2NrCisgKiBpdCBpcyBkaXZpZGVkIHRoZW4gdGVlJ2VkLiBPbmUgYnJhbmNoIGdvZXMgZGlyZWN0bHkgdG8geHl6IGVuYWJsZQorICogY29udHJvbHMuIFRoZSBvdGhlciBicmFuY2ggZ2V0cyBmdXJ0aGVyIGRpdmlkZWQgYnkgMiB0aGVuIHBvc3NpYmx5CisgKiByb3V0ZWQgaW50byBhIHN5bmNocm9uaXplciBhbmQgb3V0IG9mIGNsb2NrcyBhYmMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNwX2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNwX2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZHNwX2Zja19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BfZmNrID0geworCS5uYW1lCQk9ICJkc3BfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfAorCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX01BU0ssCisJLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qIERTUCBpbnRlcmZhY2UgY2xvY2sgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNwX2lyYXRlX2lja19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzcF9pcmF0ZV9pY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRzcF9mY2ssIC5yYXRlcyA9IGRzcF9pcmF0ZV9pY2tfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qCisgKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTSwgYnV0IGlzIGFkZGVkIHRvCisgKiBzZXBhcmF0ZSBzb3VyY2Ugc2VsZWN0aW9uIGZyb20gIFhYWAorICovCitzdGF0aWMgc3RydWN0IGNsayBkc3BfaXJhdGVfaWNrID0geworCS5uYW1lCQk9ICJkc3BfaXJhdGVfaWNrIiwKKwkucGFyZW50CQk9ICZkc3BfZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfAorCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfSUZfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9pcmF0ZV9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCSAgICAgID0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogMjQyMCBvbmx5ICovCitzdGF0aWMgc3RydWN0IGNsayBkc3BfaWNrID0geworCS5uYW1lCQk9ICJkc3BfaWNrIiwJIC8qIGFwcGFyZW50bHkgaXBpIGFuZCBpc3AgKi8KKwkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9EU1BfSVBJX1NISUZULAkgICAgICAvKiBmb3IgaXBpICovCit9OworCisvKiAyNDMwIG9ubHkgLSBFTl9EU1AgY29udHJvbHMgYm90aCBkc3AgZmNsayBhbmQgaWNsayBvbiAyNDMwICovCitzdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfaWNrID0geworCS5uYW1lCQk9ICJpdmEyXzFfaWNrIiwKKwkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfaWZjayA9IHsKKwkubmFtZQkJPSAiaXZhMV9pZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENPTkZJR19QQVJUSUNJUEFOVCB8CisJCQkJUkFURV9QUk9QQUdBVEVTIHwgREVMQVlFRF9BUFAsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtTRUxfSVZBX01BU0ssCisJLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qIElWQTEgbXB1L2ludC9pL2YgY2xvY2tzIGFyZSAvMiBvZiBwYXJlbnQgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfbXB1X2ludF9pZmNrID0geworCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCisJLnBhcmVudAkJPSAmaXZhMV9pZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX01QVV9TSElGVCwKKwkuZml4ZWRfZGl2CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKK307CisKKy8qCisgKiBMMyBjbG9jayBkb21haW4KKyAqIEwzIGNsb2NrcyBhcmUgdXNlZCBmb3IgYm90aCBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWwgY2xvY2tzIHRvCisgKiBtdWx0aXBsZSBlbnRpdGllcy4gU29tZSBvZiB0aGVzZSBjbG9ja3MgYXJlIGNvbXBsZXRlbHkgbWFuYWdlZAorICogYnkgaGFyZHdhcmUsIGFuZCBzb21lIG90aGVycyBhbGxvdyBzb2Z0d2FyZSBjb250cm9sLiBIYXJkd2FyZQorICogbWFuYWdlZCBvbmVzIGdlbmVyYWwgYXJlIGJhc2VkIG9uIGRpcmVjdGx5IENMS19SRVEgc2lnbmFscyBhbmQKKyAqIHZhcmlvdXMgYXV0byBpZGxlIHNldHRpbmdzLiBUaGUgZnVuY3Rpb25hbCBzcGVjIHNldHMgbWFueSBvZiB0aGVzZQorICogYXMgJ3RpZS1oaWdoJyBmb3IgdGhlaXIgZW5hYmxlcy4KKyAqCisgKiBJLUNMT0NLUzoKKyAqCUwzLUludGVyY29ubmVjdCwgU01TLCBHUE1DLCBTRFJDLCBPQ01fUkFNLCBPQ01fUk9NLCBTRE1BCisgKglDQU0sIEhTLVVTQi4KKyAqIEYtQ0xPQ0sKKyAqCVNTSS4KKyAqCisgKiBHUE1DIG1lbW9yaWVzIGFuZCBTRFJDIGhhdmUgdGltaW5nIGFuZCBjbG9jayBzZW5zaXRpdmUgcmVnaXN0ZXJzIHdoaWNoCisgKiBtYXkgdmVyeSB3ZWxsIG5lZWQgbm90aWZpY2F0aW9uIHdoZW4gdGhlIGNsb2NrIGNoYW5nZXMuIEN1cnJlbnRseSBmb3IgbG93CisgKiBvcGVyYXRpbmcgcG9pbnRzLCB0aGVzZSBhcmUgdGFrZW4gY2FyZSBvZiBpbiBzbGVlcC5TLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvcmVfbDNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb3JlX2wzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBjb3JlX2wzX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfY2sgPSB7CS8qIFVzZWQgZm9yIGljayBhbmQgZmNrLCBpbnRlcmNvbm5lY3QgKi8KKwkubmFtZQkJPSAiY29yZV9sM19jayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCB8CisJCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSywKKwkuY2xrc2VsCQk9IGNvcmVfbDNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogdXNiX2w0X2ljayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2JfbDRfaWNrX2NvcmVfbDNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9pY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IHVzYl9sNF9pY2tfY29yZV9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KKwkubmFtZQkJPSAidXNiX2w0X2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfVVNCX01BU0ssCisJLmNsa3NlbAkJPSB1c2JfbDRfaWNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qCisgKiBTU0kgaXMgaW4gTDMgbWFuYWdlbWVudCBkb21haW4sIGl0cyBkaXJlY3QgcGFyZW50IGlzIGNvcmUgbm90IGwzLAorICogbWFueSBjb3JlIHBvd2VyIGRvbWFpbiBlbnRpdGllcyBhcmUgZ3JvdXBlZCBpbnRvIHRoZSBMMyBjbG9jaworICogZG9tYWluLgorICogU1NJX1NTUl9GQ0xLLCBTU0lfU1NUX0ZDTEssIFNTSV9MNF9DTElLCisgKgorICogc3NyID0gY29yZS8xLzIvMy80LzUsIHNzdCA9IDEvMiBzc3IuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3NpX3Nzcl9zc3RfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzc2lfc3NyX3NzdF9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IHNzaV9zc3Jfc3N0X2Zja19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX3NzdF9mY2sgPSB7CisJLm5hbWUJCT0gInNzaV9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCURFTEFZRURfQVBQLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1NTSV9NQVNLLAorCS5jbGtzZWwJCT0gc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKKy8qCisgKiBHRlggY2xvY2sgZG9tYWluCisgKglDbG9ja3M6CisgKiBHRlhfRkNMSywgR0ZYX0lDTEsKKyAqIEdGWF9DRzEoMmQpLCBHRlhfQ0cyKDNkKQorICoKKyAqIEdGWF9GQ0xLIHJ1bnMgZnJvbSBMMywgYW5kIGlzIGRpdmlkZWQgYnkgKDEsMiwzLDQpCisgKiBUaGUgMmQgYW5kIDNkIGNsb2NrcyBydW4gYXQgYSBoYXJkd2FyZSBkZXRlcm1pbmVkCisgKiBkaXZpZGVkIHZhbHVlIG9mIGZjbGsuCisgKgorICovCisvKiBYWFggUkVWSVNJVDogR0ZYIGNsb2NrIGlzIHBhcnQgb2YgQ09ORklHX1BBUlRJQ0lQQU5ULCBubz8gZG91YmxlY2hlY2suICovCisKKy8qIFRoaXMgY2xrc2VsIHN0cnVjdCBpcyBzaGFyZWQgYmV0d2VlbiBnZnhfM2RfZmNrIGFuZCBnZnhfMmRfZmNrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBnZnhfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2wzX2NrLCAucmF0ZXMgPSBnZnhfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfM2RfZmNrID0geworCS5uYW1lCQk9ICJnZnhfM2RfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zRF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAorCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfMmRfZmNrID0geworCS5uYW1lCQk9ICJnZnhfMmRfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8yRF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAorCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfaWNrID0geworCS5uYW1lCQk9ICJnZnhfaWNrIiwJCS8qIEZyb20gbDMgKi8KKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIE1vZGVtIGNsb2NrIGRvbWFpbiAoMjQzMCkKKyAqCUNMT0NLUzoKKyAqCQlNRE1fT1NDX0NMSworICoJCU1ETV9JQ0xLCisgKiBUaGVzZSBjbG9ja3MgYXJlIHVzYWJsZSBpbiBjaGFzc2lzIG1vZGUgb25seS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBtZG1faWNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtZG1faWNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBtZG1faWNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYSBpY2sgYW5kIGZjayAqLworCS5uYW1lCQk9ICJtZG1faWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9DTV9JQ0xLRU5fTURNX0VOX01ETV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNDMwX0NMS1NFTF9NRE1fTUFTSywKKwkuY2xrc2VsCQk9IG1kbV9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKKwkubmFtZQkJPSAibWRtX29zY19jayIsCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fT1NDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KKyAqCisgKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCisgKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KKyAqIHRoaXMgZG9tYWluLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGw0X2NvcmVfbDNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbDRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGw0X2NvcmVfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCisJLm5hbWUJCT0gImw0X2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDRfTUFTSywKKwkuY2xrc2VsCQk9IGw0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIERTUyBjbG9jayBkb21haW4KKyAqIENMT0NLczoKKyAqIERTU19MNF9JQ0xLLCBEU1NfTDNfSUNMSywKKyAqIERTU19DTEsxLCBEU1NfQ0xLMiwgRFNTXzU0TUh6X0NMSworICoKKyAqIERTUyBpcyBib3RoIGluaXRpYXRvciBhbmQgdGFyZ2V0LgorICovCisvKiBYWFggQWRkIFJBVEVfTk9UX1ZBTElEQVRFRCAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzczFfZmNrX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MxX2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgLnJhdGVzID0gZHNzMV9mY2tfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRzczFfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewkJLyogRW5hYmxlcyBib3RoIEwzLEw0IElDTEsncyAqLworCS5uYW1lCQk9ICJkc3NfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9mY2sgPSB7CisJLm5hbWUJCT0gImRzczFfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAkJLyogQ29yZSBvciBzeXMgKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJREVMQVlFRF9BUFAsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNTMV9NQVNLLAorCS5jbGtzZWwJCT0gZHNzMV9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja19zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzczJfZmNrXzQ4bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzczJfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZHNzMl9mY2tfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmZ1bmNfNDhtX2NrLCAucmF0ZXMgPSBkc3MyX2Zja180OG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfZmNrID0gewkJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkubmFtZQkJPSAiZHNzMl9mY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIGZpeGVkIGF0IHN5c19jayBvciA0OE1IeiAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlERUxBWUVEX0FQUCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MyX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0ssCisJLmNsa3NlbAkJPSBkc3MyX2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc181NG1fZmNrID0gewkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLworCS5uYW1lCQk9ICJkc3NfNTRtX2ZjayIsCS8qIDU0bSB0diBjbGsgKi8KKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIENPUkUgcG93ZXIgZG9tYWluIElDTEsgJiBGQ0xLIGRlZmluZXMuCisgKiBNYW55IG9mIHRoZSB0aGVzZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIHBhcmVudC4gRW50cmllcworICogaGVyZSB3aWxsIGxpa2VseSBoYXZlIGFuIEw0IGludGVyZmFjZSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBtdWx0aXBsZQorICogZnVuY3Rpb25hbCBjbG9jayBwYXJlbnRzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMjR4eF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfMzJrX2NrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBncHRfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJICAucmF0ZXMgPSBncHRfYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0geworCS5uYW1lCQk9ICJncHQxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDJfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0geworCS5uYW1lCQk9ICJncHQzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0geworCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDVfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDVfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0geworCS5uYW1lCQk9ICJncHQ2X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0geworCS5uYW1lCQk9ICJncHQ3X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUN19NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDhfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfaWNrID0geworCS5uYW1lCQk9ICJncHQ5X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTBfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMTBfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDExX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0geworCS5uYW1lCQk9ICJncHQxMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDEyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEyX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLmlkCQk9IDEsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLmlkCQk9IDIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5pZAkJPSAzLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLmlkCQk9IDMsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DU1BJM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfaWNrID0geworCS5uYW1lCQk9ICJncGlvc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3Bpb3NfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ljayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9mY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01QVV9XRFRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5bmNfMzJrX2ljayA9IHsKKwkubmFtZQkJPSAic3luY18zMmtfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0geworCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9PTUFQQ1RSTF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGljcl9pY2sgPSB7CisJLm5hbWUJCT0gImljcl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKKwkubmFtZQkJPSAiY2FtX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjYW1fZmNrID0geworCS5uYW1lCQk9ICJjYW1fZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CisJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01BSUxCT1hFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKKwkubmFtZQkJPSAid2R0NF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKKwkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NU1BST19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0geworCS5uYW1lCQk9ICJtc3Byb19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNfaWNrID0geworCS5uYW1lCQk9ICJtbWNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNfZmNrID0geworCS5uYW1lCQk9ICJtbWNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0geworCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZhY19mY2sgPSB7CisJLm5hbWUJCT0gImZhY19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ljayA9IHsKKwkubmFtZQkJPSAiZWFjX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZWFjX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKKwkubmFtZQkJPSAiaGRxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0geworCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0geworCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjX2ZjayIsCisJLmlkCQk9IDIsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMl9mY2sgPSB7CisJLm5hbWUJCT0gImkyY2hzX2ZjayIsCisJLmlkCQk9IDIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CisJLm5hbWUJCT0gImkyY19pY2siLAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfZmNrID0geworCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjaHNfZmNrIiwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BtY19mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBFTkFCTEVfT05fSU5JVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7CisJLm5hbWUJCT0gInNkbWFfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZG1hX2ljayA9IHsKKwkubmFtZQkJPSAic2RtYV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2bHlucV9pY2sgPSB7CisJLm5hbWUJCT0gInZseW5xX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdmx5bnFfZmNrXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdmx5bnFfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB2bHlucV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfOTZtX2NrLCAucmF0ZXMgPSB2bHlucV9mY2tfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNvcmVfY2ssCSAgLnJhdGVzID0gdmx5bnFfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ZjayA9IHsKKwkubmFtZQkJPSAidmx5bnFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBERUxBWUVEX0FQUCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtTRUxfVkxZTlFfTUFTSywKKwkuY2xrc2VsCQk9IHZseW5xX2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZHJjX2ljayA9IHsKKwkubmFtZQkJPSAic2RyY19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1NEUkNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRlc19pY2sgPSB7CisJLm5hbWUJCT0gImRlc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhX2ljayA9IHsKKwkubmFtZQkJPSAic2hhX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0geworCS5uYW1lCQk9ICJybmdfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9STkdfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFlc19pY2sgPSB7CisJLm5hbWUJCT0gImFlc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKKwkubmFtZQkJPSAicGthX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0geworCS5uYW1lCQk9ICJ1c2JfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhzX2ljayA9IHsKKwkubmFtZQkJPSAidXNiaHNfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9VU0JIU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzX2ljayIsCisJLmlkCQk9IDIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHNfZmNrIiwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9mY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7CisJLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01ETV9JTlRDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzZGJfZmNrIiwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFNEQjFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHNkYl9mY2siLAorCS5pZAkJPSAyLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgorICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKKyAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KKyAqCisgKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAorICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAorICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycworICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAorICogdGhlIGJ1cy4KKyAqCisgKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAorICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKKwkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVZJUlRVQUxfQ0xPQ0sgfCBBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQLAorCS5wYXJlbnQJCT0gJm1wdV9jaywJLyogSW5kZXhlZCBieSBtcHUgc3BlZWQsIG5vIHBhcmVudCAqLworCS5yZWNhbGMJCT0gJm9tYXAyX3RhYmxlX21wdV9yZWNhbGMsCS8qIHNldHMgYXJlIGtleWVkIG9uIG1wdSByYXRlICovCisJLnNldF9yYXRlCT0gJm9tYXAyX3NlbGVjdF90YWJsZV9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqb25jaGlwXzI0eHhfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJLyogZXh0ZXJuYWwgcm9vdCBzb3VyY2VzICovCisJJmZ1bmNfMzJrX2NrLAorCSZvc2NfY2ssCisJJnN5c19jaywKKwkmYWx0X2NrLAorCS8qIGludGVybmFsIGFuYWxvZyBzb3VyY2VzICovCisJJmRwbGxfY2ssCisJJmFwbGw5Nl9jaywKKwkmYXBsbDU0X2NrLAorCS8qIGludGVybmFsIHByY20gcm9vdCBzb3VyY2VzICovCisJJmZ1bmNfNTRtX2NrLAorCSZjb3JlX2NrLAorCSZmdW5jXzk2bV9jaywKKwkmZnVuY180OG1fY2ssCisJJmZ1bmNfMTJtX2NrLAorCSZ3ZHQxX29zY19jaywKKwkmc3lzX2Nsa291dF9zcmMsCisJJnN5c19jbGtvdXQsCisJJnN5c19jbGtvdXQyX3NyYywKKwkmc3lzX2Nsa291dDIsCisJJmVtdWxfY2ssCisJLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KKwkmbXB1X2NrLAorCS8qIGRzcCBkb21haW4gY2xvY2tzICovCisJJmRzcF9mY2ssCisJJmRzcF9pcmF0ZV9pY2ssCisJJmRzcF9pY2ssCQkvKiAyNDJ4ICovCisJJml2YTJfMV9pY2ssCQkvKiAyNDN4ICovCisJJml2YTFfaWZjaywJCS8qIDI0MnggKi8KKwkmaXZhMV9tcHVfaW50X2lmY2ssCS8qIDI0MnggKi8KKwkvKiBHRlggZG9tYWluIGNsb2NrcyAqLworCSZnZnhfM2RfZmNrLAorCSZnZnhfMmRfZmNrLAorCSZnZnhfaWNrLAorCS8qIE1vZGVtIGRvbWFpbiBjbG9ja3MgKi8KKwkmbWRtX2ljaywKKwkmbWRtX29zY19jaywKKwkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLworCSZkc3NfaWNrLAorCSZkc3MxX2ZjaywKKwkmZHNzMl9mY2ssCisJJmRzc181NG1fZmNrLAorCS8qIEwzIGRvbWFpbiBjbG9ja3MgKi8KKwkmY29yZV9sM19jaywKKwkmc3NpX3Nzcl9zc3RfZmNrLAorCSZ1c2JfbDRfaWNrLAorCS8qIEw0IGRvbWFpbiBjbG9ja3MgKi8KKwkmbDRfY2ssCQkJLyogdXNlZCBhcyBib3RoIGNvcmVfbDQgYW5kIHd1X2w0ICovCisJJnNzaV9sNF9pY2ssCisJLyogdmlydHVhbCBtZXRhLWdyb3VwIGNsb2NrICovCisJJnZpcnRfcHJjbV9zZXQsCisJLyogZ2VuZXJhbCBsNCBpbnRlcmZhY2UgY2ssIG11bHRpLXBhcmVudCBmdW5jdGlvbmFsIGNsayAqLworCSZncHQxX2ljaywKKwkmZ3B0MV9mY2ssCisJJmdwdDJfaWNrLAorCSZncHQyX2ZjaywKKwkmZ3B0M19pY2ssCisJJmdwdDNfZmNrLAorCSZncHQ0X2ljaywKKwkmZ3B0NF9mY2ssCisJJmdwdDVfaWNrLAorCSZncHQ1X2ZjaywKKwkmZ3B0Nl9pY2ssCisJJmdwdDZfZmNrLAorCSZncHQ3X2ljaywKKwkmZ3B0N19mY2ssCisJJmdwdDhfaWNrLAorCSZncHQ4X2ZjaywKKwkmZ3B0OV9pY2ssCisJJmdwdDlfZmNrLAorCSZncHQxMF9pY2ssCisJJmdwdDEwX2ZjaywKKwkmZ3B0MTFfaWNrLAorCSZncHQxMV9mY2ssCisJJmdwdDEyX2ljaywKKwkmZ3B0MTJfZmNrLAorCSZtY2JzcDFfaWNrLAorCSZtY2JzcDFfZmNrLAorCSZtY2JzcDJfaWNrLAorCSZtY2JzcDJfZmNrLAorCSZtY2JzcDNfaWNrLAorCSZtY2JzcDNfZmNrLAorCSZtY2JzcDRfaWNrLAorCSZtY2JzcDRfZmNrLAorCSZtY2JzcDVfaWNrLAorCSZtY2JzcDVfZmNrLAorCSZtY3NwaTFfaWNrLAorCSZtY3NwaTFfZmNrLAorCSZtY3NwaTJfaWNrLAorCSZtY3NwaTJfZmNrLAorCSZtY3NwaTNfaWNrLAorCSZtY3NwaTNfZmNrLAorCSZ1YXJ0MV9pY2ssCisJJnVhcnQxX2ZjaywKKwkmdWFydDJfaWNrLAorCSZ1YXJ0Ml9mY2ssCisJJnVhcnQzX2ljaywKKwkmdWFydDNfZmNrLAorCSZncGlvc19pY2ssCisJJmdwaW9zX2ZjaywKKwkmbXB1X3dkdF9pY2ssCisJJm1wdV93ZHRfZmNrLAorCSZzeW5jXzMya19pY2ssCisJJndkdDFfaWNrLAorCSZvbWFwY3RybF9pY2ssCisJJmljcl9pY2ssCisJJmNhbV9mY2ssCisJJmNhbV9pY2ssCisJJm1haWxib3hlc19pY2ssCisJJndkdDRfaWNrLAorCSZ3ZHQ0X2ZjaywKKwkmd2R0M19pY2ssCisJJndkdDNfZmNrLAorCSZtc3Byb19pY2ssCisJJm1zcHJvX2ZjaywKKwkmbW1jX2ljaywKKwkmbW1jX2ZjaywKKwkmZmFjX2ljaywKKwkmZmFjX2ZjaywKKwkmZWFjX2ljaywKKwkmZWFjX2ZjaywKKwkmaGRxX2ljaywKKwkmaGRxX2ZjaywKKwkmaTJjMV9pY2ssCisJJmkyYzFfZmNrLAorCSZpMmNoczFfZmNrLAorCSZpMmMyX2ljaywKKwkmaTJjMl9mY2ssCisJJmkyY2hzMl9mY2ssCisJJmdwbWNfZmNrLAorCSZzZG1hX2ZjaywKKwkmc2RtYV9pY2ssCisJJnZseW5xX2ljaywKKwkmdmx5bnFfZmNrLAorCSZzZHJjX2ljaywKKwkmZGVzX2ljaywKKwkmc2hhX2ljaywKKwkmcm5nX2ljaywKKwkmYWVzX2ljaywKKwkmcGthX2ljaywKKwkmdXNiX2ZjaywKKwkmdXNiaHNfaWNrLAorCSZtbWNoczFfaWNrLAorCSZtbWNoczFfZmNrLAorCSZtbWNoczJfaWNrLAorCSZtbWNoczJfZmNrLAorCSZncGlvNV9pY2ssCisJJmdwaW81X2ZjaywKKwkmbWRtX2ludGNfaWNrLAorCSZtbWNoc2RiMV9mY2ssCisJJm1tY2hzZGIyX2ZjaywKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDJiZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIE9NQVAzLXNwZWNpZmljIGNsb2NrIGZyYW1ld29yayBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICoKKyAqIFBhcnRzIG9mIHRoaXMgY29kZSBhcmUgYmFzZWQgb24gY29kZSB3cml0dGVuIGJ5CisgKiBSaWNoYXJkIFdvb2RydWZmLCBUb255IExpbmRncmVuLCBUdXVra2EgVGlra2FuZW4sIEthcnRoaWsgRGFzdQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazM0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworLyogQ01fQ0xLRU5fUExMKi5FTiogYml0IHZhbHVlcyAqLworI2RlZmluZSBEUExMX0xPQ0tFRAkJMHg3CisKKy8qKgorICogb21hcDNfZHBsbF9yZWNhbGMgLSByZWNhbGN1bGF0ZSBEUExMIHJhdGUKKyAqIEBjbGs6IERQTEwgc3RydWN0IGNsaworICoKKyAqIFJlY2FsY3VsYXRlIGFuZCBwcm9wYWdhdGUgdGhlIERQTEwgcmF0ZS4KKyAqLworc3RhdGljIHZvaWQgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKKworCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKKy8qKgorICogb21hcDNfY2xrb3V0eDJfcmVjYWxjIC0gcmVjYWxjdWxhdGUgRFBMTCBYMiBvdXRwdXQgdmlydHVhbCBjbG9jayByYXRlCisgKiBAY2xrOiBEUExMIG91dHB1dCBzdHJ1Y3QgY2xrCisgKgorICogVXNpbmcgcGFyZW50IGNsb2NrIERQTEwgZGF0YSwgbG9vayB1cCBEUExMIHN0YXRlLiAgSWYgbG9ja2VkLCBzZXQgb3VyCisgKiByYXRlIHRvIHRoZSBkcGxsX2NsayAqIDI7IG90aGVyd2lzZSwganVzdCB1c2UgZHBsbF9jbGsuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdTMyIHY7CisJc3RydWN0IGNsayAqcGNsazsKKworCS8qIFdhbGsgdXAgdGhlIHBhcmVudHMgb2YgY2xrLCBsb29raW5nIGZvciBhIERQTEwgKi8KKwlwY2xrID0gY2xrLT5wYXJlbnQ7CisJd2hpbGUgKHBjbGsgJiYgIXBjbGstPmRwbGxfZGF0YSkKKwkJcGNsayA9IHBjbGstPnBhcmVudDsKKworCS8qIGNsayBkb2VzIG5vdCBoYXZlIGEgRFBMTCBhcyBhIHBhcmVudD8gKi8KKwlXQVJOX09OKCFwY2xrKTsKKworCWRkID0gcGNsay0+ZHBsbF9kYXRhOworCisJV0FSTl9PTighZGQtPmNvbnRyb2xfcmVnIHx8ICFkZC0+ZW5hYmxlX21hc2spOworCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZykgJiBkZC0+ZW5hYmxlX21hc2s7CisJdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKKwlpZiAodiAhPSBEUExMX0xPQ0tFRCkKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7CisJZWxzZQorCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAqIDI7CisKKwlpZiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworLyoKKyAqIEFzIGl0IGlzIHN0cnVjdHVyZWQgbm93LCB0aGlzIHdpbGwgcHJldmVudCBhbiBPTUFQMi8zIG11bHRpYm9vdAorICoga2VybmVsIGZyb20gY29tcGlsaW5nLiAgVGhpcyB3aWxsIG5lZWQgZnVydGhlciBhdHRlbnRpb24uCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDJfY2xrX2Z1bmN0aW9ucyA9IHsKKwkuY2xrX2VuYWJsZQkJPSBvbWFwMl9jbGtfZW5hYmxlLAorCS5jbGtfZGlzYWJsZQkJPSBvbWFwMl9jbGtfZGlzYWJsZSwKKwkuY2xrX3JvdW5kX3JhdGUJCT0gb21hcDJfY2xrX3JvdW5kX3JhdGUsCisJLmNsa19zZXRfcmF0ZQkJPSBvbWFwMl9jbGtfc2V0X3JhdGUsCisJLmNsa19zZXRfcGFyZW50CQk9IG9tYXAyX2Nsa19zZXRfcGFyZW50LAorCS5jbGtfZGlzYWJsZV91bnVzZWQJPSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQsCit9OworCisvKgorICogU2V0IGNsb2NrcyBmb3IgYnlwYXNzIG1vZGUgZm9yIHJlYm9vdCB0byB3b3JrLgorICovCit2b2lkIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCkKK3sKKwkvKiBSRVZJU0lUOiBOb3QgcmVhZHkgZm9yIDM0M3ggKi8KKyNpZiAwCisJdTMyIHJhdGU7CisKKwlpZiAodmNsayA9PSBOVUxMIHx8IHNjbGsgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKKwljbGtfc2V0X3JhdGUodmNsaywgcmF0ZSk7CisjZW5kaWYKK30KKworLyogUkVWSVNJVDogTW92ZSB0aGlzIGluaXQgc3R1ZmYgb3V0IGludG8gY2xvY2suYyAqLworCisvKgorICogU3dpdGNoIHRoZSBNUFUgcmF0ZSBpZiBzcGVjaWZpZWQgb24gY21kbGluZS4KKyAqIFdlIGNhbm5vdCBkbyB0aGlzIGVhcmx5IHVudGlsIGNtZGxpbmUgaXMgcGFyc2VkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9jbGtfYXJjaF9pbml0KHZvaWQpCit7CisJaWYgKCFtcHVyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFJFVklTSVQ6IG5vdCB5ZXQgcmVhZHkgZm9yIDM0M3ggKi8KKyNpZiAwCisJaWYgKG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBtYXRjaGluZyBNUFUgcmF0ZVxuIik7CisjZW5kaWYKKworCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBuZXcgY2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExMMy9NUFUpOiAiCisJICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJICAgICAgIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG9zY19zeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgKGNvcmVfY2sucmF0ZSAvIDEwMDAwMDApLCAoZHBsbDFfZmNrLnJhdGUgLyAxMDAwMDAwKSkgOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG9tYXAyX2Nsa19hcmNoX2luaXQpOworCitpbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCit7CisJLyogc3RydWN0IHByY21fY29uZmlnICpwcmNtOyAqLworCXN0cnVjdCBjbGsgKipjbGtwOworCS8qIHUzMiBjbGtyYXRlOyAqLworCXUzMiBjcHVfY2xrZmxnOworCisJLyogUkVWSVNJVDogVWx0aW1hdGVseSB0aGlzIHdpbGwgYmUgdXNlZCBmb3IgbXVsdGlib290ICovCisjaWYgMAorCWlmIChjcHVfaXNfb21hcDI0MngoKSkgeworCQljcHVfbWFzayA9IFJBVEVfSU5fMjQyWDsKKwkJY3B1X2Nsa2ZsZyA9IENMT0NLX0lOX09NQVAyNDJYOworCQljbGtwID0gb25jaGlwXzI0eHhfY2xrczsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCWNwdV9tYXNrID0gUkFURV9JTl8yNDNYOworCQljcHVfY2xrZmxnID0gQ0xPQ0tfSU5fT01BUDI0M1g7CisJCWNsa3AgPSBvbmNoaXBfMjR4eF9jbGtzOworCX0KKyNlbmRpZgorCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQljcHVfbWFzayA9IFJBVEVfSU5fMzQzWDsKKwkJY3B1X2Nsa2ZsZyA9IENMT0NLX0lOX09NQVAzNDNYOworCQljbGtwID0gb25jaGlwXzM0eHhfY2xrczsKKworCQkvKgorCQkgKiBVcGRhdGUgdGhpcyBpZiB0aGVyZSBhcmUgZnVydGhlciBjbG9jayBjaGFuZ2VzIGJldHdlZW4gRVMyCisJCSAqIGFuZCBwcm9kdWN0aW9uIHBhcnRzCisJCSAqLworCQlpZiAoaXNfc2lsX3Jldl9lcXVhbF90byhPTUFQMzQzMF9SRVZfRVMxXzApKSB7CisJCQkvKiBObyAzNDMwRVMxLW9ubHkgcmF0ZXMgZXhpc3QsIHNvIG5vIFJBVEVfSU5fMzQzMEVTMSAqLworCQkJY3B1X2Nsa2ZsZyB8PSBDTE9DS19JTl9PTUFQMzQzMEVTMTsKKwkJfSBlbHNlIHsKKwkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKKwkJCWNwdV9jbGtmbGcgfD0gQ0xPQ0tfSU5fT01BUDM0MzBFUzI7CisJCX0KKwl9CisKKwljbGtfaW5pdCgmb21hcDJfY2xrX2Z1bmN0aW9ucyk7CisKKwlmb3IgKGNsa3AgPSBvbmNoaXBfMzR4eF9jbGtzOworCSAgICAgY2xrcCA8IG9uY2hpcF8zNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF8zNHh4X2Nsa3MpOworCSAgICAgY2xrcCsrKSB7CisJCWlmICgoKmNsa3ApLT5mbGFncyAmIGNwdV9jbGtmbGcpCisJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCX0KKworCS8qIFJFVklTSVQ6IE5vdCB5ZXQgcmVhZHkgZm9yIE9NQVAzICovCisjaWYgMAorCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLworCWNsa3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCisJCQkgYnJlYWs7CisJfQorCWN1cnJfcHJjbV9zZXQgPSBwcmNtOworI2VuZGlmCisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML0FSTSBjb3JlKTogIgorCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCSAgICAgICAob3NjX3N5c19jay5yYXRlIC8gMTAwMDAwMCksIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIChjb3JlX2NrLnJhdGUgLyAxMDAwMDAwKSwgKGFybV9mY2sucmF0ZSAvIDEwMDAwMDApKTsKKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CisKKwkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCisJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLworI2lmIDAKKwl2Y2xrID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOworCXNjbGsgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDY0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCkBAIC0wLDAgKzEsMzAwOSBAQAorLyoKKyAqIE9NQVAzIGNsb2NrIGZyYW1ld29yaworICoKKyAqIFZpcnR1YWwgY2xvY2tzIGFyZSBpbnRyb2R1Y2VkIGFzIGEgY29udmVuaWVudCB0b29scy4KKyAqIFRoZXkgYXJlIHNvdXJjZXMgZm9yIG90aGVyIGNsb2NrcyBhbmQgbm90IHN1cHBvc2VkCisgKiB0byBiZSByZXF1ZXN0ZWQgZnJvbSBkcml2ZXJzIGRpcmVjdGx5LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DSzM0WFhfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvY29udHJvbC5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKworc3RhdGljIHZvaWQgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworCisvKgorICogRFBMTDEgc3VwcGxpZXMgY2xvY2sgdG8gdGhlIE1QVS4KKyAqIERQTEwyIHN1cHBsaWVzIGNsb2NrIHRvIHRoZSBJVkEyLgorICogRFBMTDMgc3VwcGxpZXMgQ09SRSBkb21haW4gY2xvY2tzLgorICogRFBMTDQgc3VwcGxpZXMgcGVyaXBoZXJhbCBjbG9ja3MuCisgKiBEUExMNSBzdXBwbGllcyBvdGhlciBwZXJpcGhlcmFsIGNsb2NrcyAoVVNCSE9TVCwgVVNJTSkuCisgKi8KKworLyogUFJNIENMT0NLUyAqLworCisvKiBBY2NvcmRpbmcgdG8gdGltZXIzMmsuYywgdGhpcyBpcyBhIDMyNzY4SHogY2xvY2ssIG5vdCBhIDMyMDAwSHogY2xvY2suICovCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya19mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfMzJrX2ZjayIsCisJLnJhdGUJCT0gMzI3NjgsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZWN1cmVfMzJrX2ZjayA9IHsKKwkubmFtZQkJPSAic2VjdXJlXzMya19mY2siLAorCS5yYXRlCQk9IDMyNzY4LAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCUFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorfTsKKworLyogVmlydHVhbCBzb3VyY2UgY2xvY2tzIGZvciBvc2Nfc3lzX2NrICovCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEybV9jayA9IHsKKwkubmFtZQkJPSAidmlydF8xMm1fY2siLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCUFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xM21fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMTNtX2NrIiwKKwkucmF0ZQkJPSAxMzAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTZfOG1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMTZfOG1fY2siLAorCS5yYXRlCQk9IDE2ODAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCUFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xOV8ybV9jayA9IHsKKwkubmFtZQkJPSAidmlydF8xOV8ybV9jayIsCisJLnJhdGUJCT0gMTkyMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzI2bV9jayA9IHsKKwkubmFtZQkJPSAidmlydF8yNm1fY2siLAorCS5yYXRlCQk9IDI2MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCUFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8zOF80bV9jayA9IHsKKwkubmFtZQkJPSAidmlydF8zOF80bV9jayIsCisJLnJhdGUJCT0gMzg0MDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTJtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzEzbV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xNl84bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xOV8ybV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18yNm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMzhfNG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvc2Nfc3lzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZ2aXJ0XzEybV9jaywgICAucmF0ZXMgPSBvc2Nfc3lzXzEybV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzEzbV9jaywgICAucmF0ZXMgPSBvc2Nfc3lzXzEzbV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzE2XzhtX2NrLCAucmF0ZXMgPSBvc2Nfc3lzXzE2XzhtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMTlfMm1fY2ssIC5yYXRlcyA9IG9zY19zeXNfMTlfMm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8yNm1fY2ssICAgLnJhdGVzID0gb3NjX3N5c18yNm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8zOF80bV9jaywgLnJhdGVzID0gb3NjX3N5c18zOF80bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIE9zY2lsbGF0b3IgY2xvY2sgKi8KKy8qIDEyLCAxMywgMTYuOCwgMTkuMiwgMjYsIG9yIDM4LjQgTUh6ICovCitzdGF0aWMgc3RydWN0IGNsayBvc2Nfc3lzX2NrID0geworCS5uYW1lCQk9ICJvc2Nfc3lzX2NrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfUFJNX0NMS1NFTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TWVNfQ0xLSU5fU0VMX01BU0ssCisJLmNsa3NlbAkJPSBvc2Nfc3lzX2Nsa3NlbCwKKwkvKiBSRVZJU0lUOiBkZWFsIHdpdGggYXV0b2V4dGNsa21vZGU/ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2Ml9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm9zY19zeXNfY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIExhdGVuY3k6IHRoaXMgY2xvY2sgaXMgb25seSBlbmFibGVkIGFmdGVyIFBSTV9DTEtTRVRVUC5TRVRVUF9USU1FICovCisvKiBGZWVkcyBEUExMcyAtIGRpdmlkZWQgZmlyc3QgYnkgUFJNX0NMS1NSQ19DVFJMLlNZU0NMS0RJVj8gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsKKwkubmFtZQkJPSAic3lzX2NrIiwKKwkucGFyZW50CQk9ICZvc2Nfc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLU1JDX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUF9TWVNDTEtESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19hbHRjbGsgPSB7CisJLm5hbWUJCT0gInN5c19hbHRjbGsiLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorfTsKKworLyogT3B0aW9uYWwgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgZm9yIHNvbWUgTWNCU1BzICovCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcF9jbGtzID0geworCS5uYW1lCQk9ICJtY2JzcF9jbGtzIiwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKK307CisKKy8qIFBSTSBFWFRFUk5BTCBDTE9DSyBPVVRQVVQgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDEgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQxIiwKKwkucGFyZW50CQk9ICZvc2Nfc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUDM0MzBfUFJNX0NMS09VVF9DVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ0xLT1VUX0VOX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTFMgKi8KKworLyogQ00gQ0xPQ0tTICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHBsbF9ieXBhc3NfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRwbGxfbG9ja2VkX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYxNl9kcGxsX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNywgLnZhbCA9IDcsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTEsIC52YWwgPSAxMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTMsIC52YWwgPSAxMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTQsIC52YWwgPSAxNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTUsIC52YWwgPSAxNSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCisvKiBEUExMMSAqLworLyogTVBVIGNsb2NrIHNvdXJjZSAqLworLyogVHlwZTogRFBMTCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgZHBsbDFfZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX0RJVl9NQVNLLAorCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAorCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX01QVV9EUExMX01BU0ssCisJLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fTVBVX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfTVBVX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX01QVV9EUExMX1NUX1NISUZULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwxX2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmRwbGxfZGF0YQk9ICZkcGxsMV9kZCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKK307CisKKy8qCisgKiBUaGlzIHZpcnR1YWwgY2xvY2sgcHJvdmlkZXMgdGhlIENMS09VVFgyIG91dHB1dCBmcm9tIHRoZSBEUExMIGlmIHRoZQorICogRFBMTCBpc24ndCBieXBhc3NlZC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwxX3gyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsMV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBPbiBEUExMMSwgdW5saWtlIG90aGVyIERQTExzLCB0aGUgZGl2aWRlciBpcyBkb3duc3RyZWFtIGZyb20gQ0xLT1VUWDIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwxX3gybTJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGwxX3gyX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKgorICogRG9lcyBub3QgZXhpc3QgaW4gdGhlIFRSTSAtIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgTTIgZGl2aWRlciBmcm9tCisgKiBieXBhc3Mgc2VsZWN0aW9uIGluIG1wdV9jaworICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Mm0yX2NrID0geworCS5uYW1lCQk9ICJkcGxsMV94Mm0yX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsMV94Ml9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9DTEtPVVRfRElWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogRFBMTDIgKi8KKy8qIElWQTIgY2xvY2sgc291cmNlICovCisvKiBUeXBlOiBEUExMICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGwyX2RkID0geworCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLm11bHRfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9ESVZfTUFTSywKKwkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fSVZBMl9EUExMX01BU0ssCisJLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fSVZBMl9EUExMX0RSSUZUR1VBUkRfU0hJRlQsCisJLnJlY2FsX2VuX2JpdAk9IE9NQVAzNDMwX1BSTV9JUlFFTkFCTEVfTVBVX0lWQTJfRFBMTF9SRUNBTF9FTl9TSElGVCwKKwkucmVjYWxfc3RfYml0CT0gT01BUDM0MzBfUFJNX0lSUVNUQVRVU19NUFVfSVZBMl9EUExMX1NUX1NISUZULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwyX2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmRwbGxfZGF0YQk9ICZkcGxsMl9kZCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwyX20yeDJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGwyX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKgorICogVGhlIFRSTSBpcyBjb25mbGljdGVkIG9uIHdoZXRoZXIgSVZBMiBjbG9jayBjb21lcyBmcm9tIERQTEwyIENMS09VVAorICogb3IgQ0xLT1VUWDIuIENMS09VVCBzZWVtcyBtb3N0IHBsYXVzaWJsZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwyX20yX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsMl9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJCQkgIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDJfbTJ4Ml9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIERQTEwzICovCisvKiBTb3VyY2UgY2xvY2sgZm9yIGFsbCBpbnRlcmZhY2VzIGFuZCBmb3Igc29tZSBkZXZpY2UgZmNsa3MgKi8KKy8qIFR5cGU6IERQTEwgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGwzX2RkID0geworCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfRElWX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfTUFTSywKKwkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfQ09SRV9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfU1RfU0hJRlQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCisgKiBEUExMIGlzbid0IGJ5cGFzc2VkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX3gyX2NrID0geworCS5uYW1lCQk9ICJkcGxsM194Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV9kcGxsM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE3LCAudmFsID0gMTcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE4LCAudmFsID0gMTgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDE5LCAudmFsID0gMTksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIwLCAudmFsID0gMjAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIxLCAudmFsID0gMjEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIyLCAudmFsID0gMjIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDIzLCAudmFsID0gMjMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI0LCAudmFsID0gMjQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI1LCAudmFsID0gMjUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI2LCAudmFsID0gMjYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI3LCAudmFsID0gMjcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI4LCAudmFsID0gMjgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDI5LCAudmFsID0gMjksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDMwLCAudmFsID0gMzAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDMxLCAudmFsID0gMzEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjMxX2RwbGwzbTJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYzMV9kcGxsM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIERQTEwzIG91dHB1dCBNMgorICogUkVWSVNJVDogVGhpcyBEUExMIG91dHB1dCBkaXZpZGVyIG11c3QgYmUgY2hhbmdlZCBpbiBTUkFNLCBzbyB1bnRpbAorICogdGhhdCBjb2RlIGlzIHJlYWR5LCB0aGlzIHNob3VsZCByZW1haW4gYSAncmVhZC1vbmx5JyBjbGtzZWwgY2xvY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20yX2NrID0geworCS5uYW1lCQk9ICJkcGxsM19tMl9jayIsCisJLnBhcmVudAkJPSAmZHBsbDNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MzFfZHBsbDNtMl9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jaywgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsM19tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMSywKKwkuY2xrc2VsCQk9IGNvcmVfY2tfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsM19tMngyX2NrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDNfeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMngyX2NrID0geworCS5uYW1lCQk9ICJkcGxsM19tMngyX2NrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEssCisJLmNsa3NlbAkJPSBkcGxsM19tMngyX2NrX2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsM19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDNfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsM19tM3gyX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tM19jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfbTNfY2siLAorCS5wYXJlbnQJCT0gJmRwbGwzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWX0RQTEwzX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsM19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTN4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfbTN4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbDNfbTNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fRU1VX0NPUkVfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgSU5WRVJUX0VOQUJMRSwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBlbXVfY29yZV9hbHdvbl9ja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDNfbTN4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9jb3JlX2Fsd29uX2NrID0geworCS5uYW1lCQk9ICJlbXVfY29yZV9hbHdvbl9jayIsCisJLnBhcmVudAkJPSAmZHBsbDNfbTN4Ml9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEssCisJLmNsa3NlbAkJPSBlbXVfY29yZV9hbHdvbl9ja19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIERQTEw0ICovCisvKiBTdXBwbGllcyA5Nk1IeiwgNTRNaHogVFYgREFDLCBEU1MgZmNsaywgQ0FNIHNlbnNvciBjbG9jaywgZW11bCB0cmFjZSBjbGsgKi8KKy8qIFR5cGU6IERQTEwgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGw0X2RkID0geworCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDIpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawk9IE9NQVAzNDMwX1BFUklQSF9EUExMX0RJVl9NQVNLLAorCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fUEVSSVBIX0RQTExfTUFTSywKKwkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9EUklGVEdVQVJEX1NISUZULAorCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9SRUNBTF9FTl9TSElGVCwKKwkucmVjYWxfc3RfYml0CT0gT01BUDM0MzBfUEVSSVBIX0RQTExfU1RfU0hJRlQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGw0X2RkLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCisgKiBEUExMIGlzbid0IGJ5cGFzc2VkIC0tCisgKiBYWFggZG9lcyB0aGlzIHNlcnZlIGFueSBkb3duc3RyZWFtIGNsb2Nrcz8KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X3gyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDRfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tMngyX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMyksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWXzk2TV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X20yeDJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGw0X20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROXzk2TV9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfOTZtX2Fsd29uX2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDRfbTJ4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2Fsd29uX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF85Nm1fYWx3b25fZmNrIiwKKwkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLLAorCS5jbGtzZWwJCT0gb21hcF85Nm1fYWx3b25fZmNrX2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCSBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF85Nm1fZmNrIiwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNtXzk2bV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGw0X20yeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbV85Nm1fZmNrID0geworCS5uYW1lCQk9ICJjbV85Nm1fZmNrIiwKKwkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLLAorCS5jbGtzZWwJCT0gY21fOTZtX2Zja19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tM3gyX2NrICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTNfY2siLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFZfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM3gyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tM3gyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsNF9tM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX1RWX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IElOVkVSVF9FTkFCTEUsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdmlydF9vbWFwXzU0bV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGw0X20zeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0X29tYXBfNTRtX2ZjayA9IHsKKwkubmFtZQkJPSAidmlydF9vbWFwXzU0bV9mY2siLAorCS5wYXJlbnQJCT0gJmRwbGw0X20zeDJfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEssCisJLmNsa3NlbAkJPSB2aXJ0X29tYXBfNTRtX2Zja19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF81NG1fZDRtM3gyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzU0bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzU0bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmdmlydF9vbWFwXzU0bV9mY2ssIC5yYXRlcyA9IG9tYXBfNTRtX2Q0bTN4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfYWx0Y2xrLCAgICAucmF0ZXMgPSBvbWFwXzU0bV9hbHRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfNTRtX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF81NG1fZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV81NE0sCisJLmNsa3NlbAkJPSBvbWFwXzU0bV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF80OG1fOTZtZDJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNDhtX2FsdF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfNDhtX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzQ4bV85Nm1kMl9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfYWx0Y2xrLCAucmF0ZXMgPSBvbWFwXzQ4bV9hbHRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfNDhtX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF80OG1fZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV80OE0sCisJLmNsa3NlbAkJPSBvbWFwXzQ4bV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMTJtX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF8xMm1fZmNrIiwKKwkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmZpeGVkX2Rpdgk9IDQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisvKiBUaGlzIHZpcnN0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X200eDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X200X2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNF9jayIsCisJLnBhcmVudAkJPSAmZHBsbDRfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9EU1MxX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTR4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTR4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbDRfbTRfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fQ0FNX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IElOVkVSVF9FTkFCTEUsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X201eDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201X2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNV9jayIsCisJLnBhcmVudAkJPSAmZHBsbDRfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9DQU1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNXgyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNXgyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsNF9tNV9jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9DQU1fU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgSU5WRVJUX0VOQUJMRSwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTZ4Ml9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X202X2NrIiwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl9EUExMNF9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202eDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X202eDJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGw0X202X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fRU1VX1BFUklQSF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9wZXJfYWx3b25fY2sgPSB7CisJLm5hbWUJCT0gImVtdV9wZXJfYWx3b25fY2siLAorCS5wYXJlbnQJCT0gJmRwbGw0X202eDJfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIERQTEw1ICovCisvKiBTdXBwbGllcyAxMjBNSHogY2xvY2ssIFVTSU0gc291cmNlIGNsb2NrICovCisvKiBUeXBlOiBEUExMICovCisvKiAzNDMwRVMyIG9ubHkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGw1X2RkID0geworCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDQpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfTVVMVF9NQVNLLAorCS5kaXYxX21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfRElWX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS0VOMiksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX01BU0ssCisJLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX0RSSUZUR1VBUkRfU0hJRlQsCisJLnJlY2FsX2VuX2JpdAk9IE9NQVAzNDMwRVMyX1NORF9QRVJJUEhfRFBMTF9SRUNBTF9FTl9TSElGVCwKKwkucmVjYWxfc3RfYml0CT0gT01BUDM0MzBFUzJfU05EX1BFUklQSF9EUExMX1NUX1NISUZULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw1X2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmRwbGxfZGF0YQk9ICZkcGxsNV9kZCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCUFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2MTZfZHBsbDVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGw1X2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9tMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDVfbTJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGw1X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfRElWXzEyME1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGw1X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfMTIwbV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jaywgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMTIwbV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfMTIwbV9mY2siLAorCS5wYXJlbnQJCT0gJmRwbGw1X20yX2NrLAorCS5pbml0ICAgICAgICAgICA9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcgICAgID0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVDIpLAorCS5jbGtzZWxfbWFzayAgICA9IE9NQVAzNDMwRVMyX1NUX1BFUklQSDJfQ0xLX01BU0ssCisJLmNsa3NlbCAgICAgICAgID0gb21hcF8xMjBtX2Zja19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYyAgICAgICAgID0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDTSBFWFRFUk5BTCBDTE9DSyBPVVRQVVRTICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjbGtvdXQyX3NyY185Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjXzU0bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNsa291dDJfc3JjX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkJICAucmF0ZXMgPSBjbGtvdXQyX3NyY19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJCSAgLnJhdGVzID0gY2xrb3V0Ml9zcmNfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm9tYXBfOTZtX2Fsd29uX2ZjaywgIC5yYXRlcyA9IGNsa291dDJfc3JjXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZvbWFwXzU0bV9mY2ssCSAgLnJhdGVzID0gY2xrb3V0Ml9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQyX3NyY19jayA9IHsKKwkubmFtZQkJPSAiY2xrb3V0Ml9zcmNfY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjbGtvdXQyX3NyY19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHN5c19jbGtvdXQyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dDJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNsa291dDJfc3JjX2NrLCAucmF0ZXMgPSBzeXNfY2xrb3V0Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQyID0geworCS5uYW1lCQk9ICJzeXNfY2xrb3V0MiIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX0NNX0NMS09VVF9DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS09VVDJfRElWX01BU0ssCisJLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDTSBPVVRQVVQgQ0xPQ0tTICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmV4Ml9mY2sgPSB7CisJLm5hbWUJCT0gImNvcmV4Ml9mY2siLAorCS5wYXJlbnQJCT0gJmRwbGwzX20yeDJfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIERQTEwgcG93ZXIgZG9tYWluIGNsb2NrIGNvbnRyb2xzICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfY29yZV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIFJFVklTSVQ6IEFyZSB0aGVzZSBpbiBEUExMIHBvd2VyIGRvbWFpbiBvciBDTSBwb3dlciBkb21haW4/IGRvY3MKKyAqIG1heSBiZSBpbmNvbnNpc3RlbnQgaGVyZT8KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrID0geworCS5uYW1lCQk9ICJkcGxsMV9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0NMS19TUkNfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjJfY29yZV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBNUFUgY2xrc2VsOgorICogSWYgRFBMTDEgaXMgbG9ja2VkLCBtcHVfY2sgZGVyaXZlcyBmcm9tIERQTEwxOyBvdGhlcndpc2UsIG1wdV9jaworICogZGVyaXZlcyBmcm9tIHRoZSBoaWdoLWZyZXF1ZW5jeSBieXBhc3MgY2xvY2sgb3JpZ2luYXRpbmcgZnJvbSBEUExMMywKKyAqIGNhbGxlZCAnZHBsbDFfZmNrJworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtcHVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRwbGwxX2ZjaywgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGwxX3gybTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7CisJLm5hbWUJCT0gIm1wdV9jayIsCisJLnBhcmVudAkJPSAmZHBsbDFfeDJtMl9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX01QVV9DTEtfTUFTSywKKwkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIGFybV9mY2sgaXMgZGl2aWRlZCBieSB0d28gd2hlbiBEUExMMSBsb2NrZWQ7IG90aGVyd2lzZSwgcGFzc3Rocm91Z2ggbXB1X2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGFybV9mY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGFybV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm1wdV9jaywgLnJhdGVzID0gYXJtX2Zja19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2ZjayA9IHsKKwkubmFtZQkJPSAiYXJtX2ZjayIsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAorCS5jbGtzZWwJCT0gYXJtX2Zja19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBSRVZJU0lUOiBUaGlzIGNsb2NrIGlzIG5ldmVyIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIHRoZSAzNDMwIFRSTSwKKyAqIGFsdGhvdWdoIGl0IGlzIHJlZmVyZW5jZWQgLSBzbyB0aGlzIGlzIGEgZ3Vlc3MKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZW11X21wdV9hbHdvbl9jayA9IHsKKwkubmFtZQkJPSAiZW11X21wdV9hbHdvbl9jayIsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2sgPSB7CisJLm5hbWUJCT0gImRwbGwyX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9DTEtfU1JDX01BU0ssCisJLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogSVZBMiBjbGtzZWw6CisgKiBJZiBEUExMMiBpcyBsb2NrZWQsIGl2YTJfY2sgZGVyaXZlcyBmcm9tIERQTEwyOyBvdGhlcndpc2UsIGl2YTJfY2sKKyAqIGRlcml2ZXMgZnJvbSB0aGUgaGlnaC1mcmVxdWVuY3kgYnlwYXNzIGNsb2NrIG9yaWdpbmF0aW5nIGZyb20gRFBMTDMsCisgKiBjYWxsZWQgJ2RwbGwyX2ZjaycKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBpdmEyX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsMl9mY2ssICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDJfbTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmEyX2NrID0geworCS5uYW1lCQk9ICJpdmEyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsMl9tMl9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJCQkgIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCisJLmNsa3NlbAkJPSBpdmEyX2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogQ29tbW9uIGludGVyZmFjZSBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgbDNfaWNrID0geworCS5uYW1lCQk9ICJsM19pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfTDNfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjJfY29yZV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfbDNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmwzX2ljaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbDRfaWNrID0geworCS5uYW1lCQk9ICJsNF9pY2siLAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9MNF9NQVNLLAorCS5jbGtzZWwJCT0gZGl2Ml9sM19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9sNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBybV9pY2sgPSB7CisJLm5hbWUJCT0gInJtX2ljayIsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1JNX01BU0ssCisJLmNsa3NlbAkJPSBkaXYyX2w0X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIEdGWCBwb3dlciBkb21haW4gKi8KKworLyogR0ZYIGNsb2NrcyBhcmUgaW4gMzQzMEVTMSBvbmx5LiAzNDMwRVMyIGFuZCBsYXRlciB1c2VzIHRoZSBTR1ggaW5zdGVhZCAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBnZnhfbDNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmwzX2ljaywgLnJhdGVzID0gZ2Z4X2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0geworCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQX0NMS1NFTF9HRlhfTUFTSywKKwkuY2xrc2VsCQk9IGdmeF9sM19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfaWNrID0geworCS5uYW1lCQk9ICJnZnhfbDNfaWNrIiwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NnMV9jayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2NnMV9jayIsCisJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fMkRfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfY2cyX2NrID0geworCS5uYW1lCQk9ICJnZnhfY2cyX2NrIiwKKwkucGFyZW50CQk9ICZnZnhfbDNfZmNrLCAvKiBSRVZJU0lUOiBjb3JyZWN0PyAqLworCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl8zRF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFNHWCBwb3dlciBkb21haW4gLSAzNDMwRVMyIG9ubHkgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDMsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc2d4Xzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsICAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc2d4X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkgLnJhdGVzID0gc2d4X2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywgLnJhdGVzID0gc2d4Xzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNneF9mY2sgPSB7CisJLm5hbWUJCT0gInNneF9mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfTUFTSywKKwkuY2xrc2VsCQk9IHNneF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZ3hfaWNrID0geworCS5uYW1lCQk9ICJzZ3hfaWNrIiwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIENPUkUgcG93ZXIgZG9tYWluICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGQyZF8yNm1fZmNrID0geworCS5uYW1lCQk9ICJkMmRfMjZtX2ZjayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0QyRF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXAzNDN4X2dwdF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmb21hcF8zMmtfZmNrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNwZWZ1c2VfZmNrID0geworCS5uYW1lCQk9ICJjcGVmdXNlX2ZjayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX0NQRUZVU0VfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0c19mY2sgPSB7CisJLm5hbWUJCT0gInRzX2ZjayIsCisJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1RTX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ZjayA9IHsKKwkubmFtZQkJPSAidXNidGxsX2ZjayIsCisJLnBhcmVudAkJPSAmb21hcF8xMjBtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDT1JFIDk2TSBGQ0xLLWRlcml2ZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiY29yZV85Nm1fZmNrIiwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLmlkCQk9IDMsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5pZAkJPSAyLAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0geworCS5uYW1lCQk9ICJtc3Byb19mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLmlkCQk9IDEsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMzX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjX2ZjayIsCisJLmlkCQk9IDMsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjX2ZjayIsCisJLmlkIAkJPSAyLAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9mY2sgPSB7CisJLm5hbWUJCT0gImkyY19mY2siLAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMxX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIE1DQlNQIDEgJiA1IGdldCB0aGVpciA5Nk1IeiBjbG9jayBmcm9tIGNvcmVfOTZtX2ZjazsKKyAqIE1DQlNQIDIsIDMsIDQgZ2V0IHRoZWlyIDk2TUh6IGNsb2NrIGZyb20gcGVyXzk2bV9mY2suCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwX21jYnNwX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMTVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfOTZtX2ZjaywgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3A1X2ZjayIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A1X0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAyX0NPTlRST0xfREVWQ09ORjApLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQMV9DTEtTX01BU0ssCisJLmNsa3NlbAkJPSBtY2JzcF8xNV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDT1JFXzQ4TV9GQ0stZGVyaXZlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV80OG1fZmNrID0geworCS5uYW1lCQk9ICJjb3JlXzQ4bV9mY2siLAorCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkuaWQJCT0gNCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMl9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmc2hvc3R1c2JfZmNrID0geworCS5uYW1lCQk9ICJmc2hvc3R1c2JfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRlNIT1NUVVNCX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ09SRV8xMk1fRkNLIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlXzEybV9mY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfMTJtX2ZjayIsCisJLnBhcmVudAkJPSAmb21hcF8xMm1fZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0geworCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlXzEybV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTDMtZGVyaXZlZCBjbG9jayAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3JfY29yZXgyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzc2lfc3NyX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JleDJfZmNrLCAucmF0ZXMgPSBzc2lfc3NyX2NvcmV4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9mY2sgPSB7CisJLm5hbWUJCT0gInNzaV9zc3JfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfU1NJX01BU0ssCisJLmNsa3NlbAkJPSBzc2lfc3NyX2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3RfZmNrID0geworCS5uYW1lCQk9ICJzc2lfc3N0X2ZjayIsCisJLnBhcmVudAkJPSAmc3NpX3Nzcl9mY2ssCisJLmZpeGVkX2Rpdgk9IDIsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAorfTsKKworCisKKy8qIENPUkVfTDNfSUNLIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2ljayA9IHsKKwkubmFtZQkJPSAiY29yZV9sM19pY2siLAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaHNvdGd1c2JfaWNrID0geworCS5uYW1lCQk9ICJoc290Z3VzYl9pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BtY19mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSyB8CisJCQkJRU5BQkxFX09OX0lOSVQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFNFQ1VSSVRZX0wzX0lDSyBiYXNlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDNfaWNrID0geworCS5uYW1lCQk9ICJzZWN1cml0eV9sM19pY2siLAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKKwkubmFtZQkJPSAicGthX2ljayIsCisJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1BLQV9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIENPUkVfTDRfSUNLIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2w0X2ljayA9IHsKKwkubmFtZQkJPSAiY29yZV9sNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ljayA9IHsKKwkubmFtZQkJPSAidXNidGxsX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCVExMX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMzX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkuaWQJCT0gMywKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogSW50ZXJzeXN0ZW0gQ29tbXVuaWNhdGlvbiBSZWdpc3RlcnMgLSBjaGFzc2lzIG1vZGUgb25seSAqLworc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKKwkubmFtZQkJPSAiaWNyX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSUNSX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7CisJLm5hbWUJCT0gImFlczJfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhMTJfaWNrID0geworCS5uYW1lCQk9ICJzaGExMl9pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGVzMl9pY2sgPSB7CisJLm5hbWUJCT0gImRlczJfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMxX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9faWNrID0geworCS5uYW1lCQk9ICJtc3Byb19pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKKwkubmFtZQkJPSAiaGRxX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkuaWQJCT0gNCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5pZAkJPSAzLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJM19TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLmlkCQk9IDIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMzX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjX2ljayIsCisJLmlkCQk9IDMsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0geworCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkuaWQJCT0gMiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CisJLm5hbWUJCT0gImkyY19pY2siLAorCS5pZAkJPSAxLAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDVfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0geworCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GQUNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0geworCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fT01BUENUUkxfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFNTSV9MNF9JQ0sgYmFzZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9pY2siLAorCS5wYXJlbnQJCT0gJnNzaV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogUkVWSVNJVDogVGVjaG5pY2FsbHkgdGhlIFRSTSBjbGFpbXMgdGhhdCB0aGlzIGlzIENPUkVfQ0xLIGJhc2VkLAorICogYnV0IGw0X2ljayBtYWtlcyBtb3JlIHNlbnNlIHRvIG1lICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsKKwkubmFtZQkJPSAidXNiX2w0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRlNIT1NUVVNCX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMxX0NMS1NFTF9GU0hPU1RVU0JfTUFTSywKKwkuY2xrc2VsCQk9IHVzYl9sNF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBYWFggTURNX0lOVENfSUNLLCBTQUQyRF9JQ0sgPz8gKi8KKworLyogU0VDVVJJVFlfTDRfSUNLMiBiYXNlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDRfaWNrMiA9IHsKKwkubmFtZQkJPSAic2VjdXJpdHlfbDRfaWNrMiIsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhZXMxX2ljayA9IHsKKwkubmFtZQkJPSAiYWVzMV9pY2siLAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQUVTMV9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fUk5HX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhMTFfaWNrID0geworCS5uYW1lCQk9ICJzaGExMV9pY2siLAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXMxX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzMV9pY2siLAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMV9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIERTUyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNzMV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGw0X200eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MxX2Fsd29uX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNzMV9hbHdvbl9mY2siLAorCS5wYXJlbnQJCT0gJmRwbGw0X200eDJfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fRFNTMV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEssCisJLmNsa3NlbAkJPSBkc3MxX2Fsd29uX2Zja19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3NfdHZfZmNrID0geworCS5uYW1lCQk9ICJkc3NfdHZfZmNrIiwKKwkucGFyZW50CQk9ICZvbWFwXzU0bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gImRzc185Nm1fZmNrIiwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9hbHdvbl9mY2sgPSB7CisJLm5hbWUJCT0gImRzczJfYWx3b25fZmNrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzJfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDQU0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY2FtX21jbGtfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGw0X201eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9IHsKKwkubmFtZQkJPSAiY2FtX21jbGsiLAorCS5wYXJlbnQJCT0gJmRwbGw0X201eDJfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEssCisJLmNsa3NlbAkJPSBjYW1fbWNsa19jbGtzZWwsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9sM19pY2sgPSB7CisJLm5hbWUJCT0gImNhbV9sM19pY2siLAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2w0X2ljayA9IHsKKwkubmFtZQkJPSAiY2FtX2w0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBVU0JIT1NUIC0gMzQzMEVTMiBvbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfMTIwbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzYmhvc3RfMTIwbV9mY2siLAorCS5wYXJlbnQJCT0gJm9tYXBfMTIwbV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMl9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfNDhtX2ZjayA9IHsKKwkubmFtZQkJPSAidXNiaG9zdF80OG1fZmNrIiwKKwkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMV9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfbDNfaWNrID0geworCS5uYW1lCQk9ICJ1c2Job3N0X2wzX2ljayIsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfbDRfaWNrID0geworCS5uYW1lCQk9ICJ1c2Job3N0X2w0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3Rfc2FyX2ZjayA9IHsKKwkubmFtZQkJPSAidXNiaG9zdF9zYXJfZmNrIiwKKwkucGFyZW50CQk9ICZvc2Nfc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fUFdTVENUUkwpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBXS1VQICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV85Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDQsICAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gOCwgIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAxMCwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV8xMjBtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gNCwgIC52YWwgPSA3LAkuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSA4LCAgLnZhbCA9IDgsCS5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gOSwJLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMjAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNpbV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmb21hcF85Nm1fZmNrLAkucmF0ZXMgPSB1c2ltXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZvbWFwXzEyMG1fZmNrLAkucmF0ZXMgPSB1c2ltXzEyMG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIDM0MzBFUzIgb25seSAqLworc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzaW1fZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfVVNJTU9DUF9NQVNLLAorCS5jbGtzZWwJCT0gdXNpbV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2t1cF8zMmtfZmNrID0geworCS5uYW1lCQk9ICJ3a3VwXzMya19mY2siLAorCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfZmNrID0geworCS5uYW1lCQk9ICJncGlvMV9mY2siLAorCS5wYXJlbnQJCT0gJndrdXBfMzJrX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0Ml9mY2sgPSB7CisJLm5hbWUJCT0gIndkdDJfZmNrIiwKKwkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2t1cF9sNF9pY2sgPSB7CisJLm5hbWUJCT0gIndrdXBfbDRfaWNrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIDM0MzBFUzIgb25seSAqLworLyogTmV2ZXIgc3BlY2lmaWNhbGx5IG5hbWVkIGluIHRoZSBUUk0sIHNvIHdlIGhhdmUgdG8gaW5mZXIgYSBsaWtlbHkgbmFtZSAqLworc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9pY2sgPSB7CisJLm5hbWUJCT0gInVzaW1faWNrIiwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ljayA9IHsKKwkubmFtZQkJPSAid2R0Ml9pY2siLAorCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUMl9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQxX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfaWNrID0geworCS5uYW1lCQk9ICJncGlvMV9pY2siLAorCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya3N5bmNfaWNrID0geworCS5uYW1lCQk9ICJvbWFwXzMya3N5bmNfaWNrIiwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOXzMyS1NZTkNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0geworCS5uYW1lCQk9ICJncHQxX2ljayIsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworCisKKy8qIFBFUiBjbG9jayBkb21haW4gKi8KKworc3RhdGljIHN0cnVjdCBjbGsgcGVyXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gInBlcl85Nm1fZmNrIiwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl80OG1fZmNrID0geworCS5uYW1lCQk9ICJwZXJfNDhtX2ZjayIsCisJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLnBhcmVudAkJPSAmcGVyXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQzX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0M19mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0geworCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ0X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDVfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0geworCS5uYW1lCQk9ICJncHQ3X2ZjayIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ3X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl8zMmtfYWx3b25fZmNrID0geworCS5uYW1lCQk9ICJwZXJfMzJrX2Fsd29uX2ZjayIsCisJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNl9mY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2ZjayIsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9mY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ZjayIsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNF9mY2sgPSB7CisJLm5hbWUJCT0gImdwaW80X2ZjayIsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvM19mY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2ZjayIsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMl9mY2sgPSB7CisJLm5hbWUJCT0gImdwaW8yX2ZjayIsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0M19mY2siLAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGVyX2w0X2ljayA9IHsKKwkubmFtZQkJPSAicGVyX2w0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2ljayIsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNF9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW80X2ljayIsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvM19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2ljayIsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8yX2ljayIsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKKwkubmFtZQkJPSAid2R0M19pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0M19pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9pY2siLAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfaWNrIiwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfaWNrIiwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfaWNrIiwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtY2JzcF8yMzRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAgLnJhdGVzID0gY29tbW9uX21jYnNwX21jYnNwX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AzX0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A0X0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBFTVUgY2xvY2tzICovCisKKy8qIE1vcmUgaW5mb3JtYXRpb246IEFSTSBDb3J0ZXgtQTggVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWwsIHNlY3QgMTAuMSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19wZXJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX21wdV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBlbXVfc3JjX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBlbXVfc3JjX3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZlbXVfY29yZV9hbHdvbl9jaywgLnJhdGVzID0gZW11X3NyY19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmVtdV9wZXJfYWx3b25fY2ssCS5yYXRlcyA9IGVtdV9zcmNfcGVyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmVtdV9tcHVfYWx3b25fY2ssCS5yYXRlcyA9IGVtdV9zcmNfbXB1X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworLyoKKyAqIExpa2UgdGhlIGNsa291dF9zcmMgY2xvY2tzLCBlbXVfc3JjX2NsayBpcyBhIHZpcnR1YWwgY2xvY2ssIGV4aXN0aW5nIG9ubHkKKyAqIHRvIHN3aXRjaCB0aGUgc291cmNlIG9mIHNvbWUgb2YgdGhlIEVNVSBjbG9ja3MuCisgKiBYWFggQXJlIHRoZXJlIENMS0VOIGJpdHMgZm9yIHRoZXNlIEVNVSBjbGtzPworICovCitzdGF0aWMgc3RydWN0IGNsayBlbXVfc3JjX2NrID0geworCS5uYW1lCQk9ICJlbXVfc3JjX2NrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX01VWF9DVFJMX01BU0ssCisJLmNsa3NlbAkJPSBlbXVfc3JjX2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xrX2VtdV9yYXRlc1tdID0geworCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwY2xrX2VtdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa19lbXVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwY2xrX2ZjayA9IHsKKwkubmFtZQkJPSAicGNsa19mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtfTUFTSywKKwkuY2xrc2VsCQk9IHBjbGtfZW11X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xreDJfZW11X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa3gyX2VtdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa3gyX2VtdV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjbGt4Ml9mY2sgPSB7CisJLm5hbWUJCT0gInBjbGt4Ml9mY2siLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLLAorCS5jbGtzZWwJCT0gcGNsa3gyX2VtdV9jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGF0Y2xrX2VtdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGF0Y2xrX2ZjayA9IHsKKwkubmFtZQkJPSAiYXRjbGtfZmNrIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9BVENMS19NQVNLLAorCS5jbGtzZWwJCT0gYXRjbGtfZW11X2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdHJhY2VjbGtfc3JjX2ZjayA9IHsKKwkubmFtZQkJPSAidHJhY2VjbGtfc3JjX2ZjayIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9UUkFDRV9NVVhfQ1RSTF9NQVNLLAorCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdHJhY2VjbGtfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB0cmFjZWNsa19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmdHJhY2VjbGtfc3JjX2ZjaywgLnJhdGVzID0gdHJhY2VjbGtfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0cmFjZWNsa19mY2sgPSB7CisJLm5hbWUJCT0gInRyYWNlY2xrX2ZjayIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfTUFTSywKKwkuY2xrc2VsCQk9IHRyYWNlY2xrX2Nsa3NlbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogU1IgY2xvY2tzICovCisKKy8qIFNtYXJ0UmVmbGV4IGZjbGsgKFZERDEpICovCitzdGF0aWMgc3RydWN0IGNsayBzcjFfZmNrID0geworCS5uYW1lCQk9ICJzcjFfZmNrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjFfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTbWFydFJlZmxleCBmY2xrIChWREQyKSAqLworc3RhdGljIHN0cnVjdCBjbGsgc3IyX2ZjayA9IHsKKwkubmFtZQkJPSAic3IyX2ZjayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1IyX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3JfbDRfaWNrID0geworCS5uYW1lCQk9ICJzcl9sNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFNFQ1VSRV8zMktfRkNLIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ZjayIsCisJLnBhcmVudAkJPSAmc2VjdXJlXzMya19mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQxX2ZjayIsCisJLnBhcmVudAkJPSAmc2VjdXJlXzMya19mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpvbmNoaXBfMzR4eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKKwkmb21hcF8zMmtfZmNrLAorCSZ2aXJ0XzEybV9jaywKKwkmdmlydF8xM21fY2ssCisJJnZpcnRfMTZfOG1fY2ssCisJJnZpcnRfMTlfMm1fY2ssCisJJnZpcnRfMjZtX2NrLAorCSZ2aXJ0XzM4XzRtX2NrLAorCSZvc2Nfc3lzX2NrLAorCSZzeXNfY2ssCisJJnN5c19hbHRjbGssCisJJm1jYnNwX2Nsa3MsCisJJnN5c19jbGtvdXQxLAorCSZkcGxsMV9jaywKKwkmZHBsbDFfeDJfY2ssCisJJmRwbGwxX3gybTJfY2ssCisJJmRwbGwyX2NrLAorCSZkcGxsMl9tMl9jaywKKwkmZHBsbDNfY2ssCisJJmNvcmVfY2ssCisJJmRwbGwzX3gyX2NrLAorCSZkcGxsM19tMl9jaywKKwkmZHBsbDNfbTJ4Ml9jaywKKwkmZHBsbDNfbTNfY2ssCisJJmRwbGwzX20zeDJfY2ssCisJJmVtdV9jb3JlX2Fsd29uX2NrLAorCSZkcGxsNF9jaywKKwkmZHBsbDRfeDJfY2ssCisJJm9tYXBfOTZtX2Fsd29uX2ZjaywKKwkmb21hcF85Nm1fZmNrLAorCSZjbV85Nm1fZmNrLAorCSZ2aXJ0X29tYXBfNTRtX2ZjaywKKwkmb21hcF81NG1fZmNrLAorCSZvbWFwXzQ4bV9mY2ssCisJJm9tYXBfMTJtX2ZjaywKKwkmZHBsbDRfbTJfY2ssCisJJmRwbGw0X20yeDJfY2ssCisJJmRwbGw0X20zX2NrLAorCSZkcGxsNF9tM3gyX2NrLAorCSZkcGxsNF9tNF9jaywKKwkmZHBsbDRfbTR4Ml9jaywKKwkmZHBsbDRfbTVfY2ssCisJJmRwbGw0X201eDJfY2ssCisJJmRwbGw0X202X2NrLAorCSZkcGxsNF9tNngyX2NrLAorCSZlbXVfcGVyX2Fsd29uX2NrLAorCSZkcGxsNV9jaywKKwkmZHBsbDVfbTJfY2ssCisJJm9tYXBfMTIwbV9mY2ssCisJJmNsa291dDJfc3JjX2NrLAorCSZzeXNfY2xrb3V0MiwKKwkmY29yZXgyX2ZjaywKKwkmZHBsbDFfZmNrLAorCSZtcHVfY2ssCisJJmFybV9mY2ssCisJJmVtdV9tcHVfYWx3b25fY2ssCisJJmRwbGwyX2ZjaywKKwkmaXZhMl9jaywKKwkmbDNfaWNrLAorCSZsNF9pY2ssCisJJnJtX2ljaywKKwkmZ2Z4X2wzX2ZjaywKKwkmZ2Z4X2wzX2ljaywKKwkmZ2Z4X2NnMV9jaywKKwkmZ2Z4X2NnMl9jaywKKwkmc2d4X2ZjaywKKwkmc2d4X2ljaywKKwkmZDJkXzI2bV9mY2ssCisJJmdwdDEwX2ZjaywKKwkmZ3B0MTFfZmNrLAorCSZjcGVmdXNlX2ZjaywKKwkmdHNfZmNrLAorCSZ1c2J0bGxfZmNrLAorCSZjb3JlXzk2bV9mY2ssCisJJm1tY2hzM19mY2ssCisJJm1tY2hzMl9mY2ssCisJJm1zcHJvX2ZjaywKKwkmbW1jaHMxX2ZjaywKKwkmaTJjM19mY2ssCisJJmkyYzJfZmNrLAorCSZpMmMxX2ZjaywKKwkmbWNic3A1X2ZjaywKKwkmbWNic3AxX2ZjaywKKwkmY29yZV80OG1fZmNrLAorCSZtY3NwaTRfZmNrLAorCSZtY3NwaTNfZmNrLAorCSZtY3NwaTJfZmNrLAorCSZtY3NwaTFfZmNrLAorCSZ1YXJ0Ml9mY2ssCisJJnVhcnQxX2ZjaywKKwkmZnNob3N0dXNiX2ZjaywKKwkmY29yZV8xMm1fZmNrLAorCSZoZHFfZmNrLAorCSZzc2lfc3NyX2ZjaywKKwkmc3NpX3NzdF9mY2ssCisJJmNvcmVfbDNfaWNrLAorCSZoc290Z3VzYl9pY2ssCisJJnNkcmNfaWNrLAorCSZncG1jX2ZjaywKKwkmc2VjdXJpdHlfbDNfaWNrLAorCSZwa2FfaWNrLAorCSZjb3JlX2w0X2ljaywKKwkmdXNidGxsX2ljaywKKwkmbW1jaHMzX2ljaywKKwkmaWNyX2ljaywKKwkmYWVzMl9pY2ssCisJJnNoYTEyX2ljaywKKwkmZGVzMl9pY2ssCisJJm1tY2hzMl9pY2ssCisJJm1tY2hzMV9pY2ssCisJJm1zcHJvX2ljaywKKwkmaGRxX2ljaywKKwkmbWNzcGk0X2ljaywKKwkmbWNzcGkzX2ljaywKKwkmbWNzcGkyX2ljaywKKwkmbWNzcGkxX2ljaywKKwkmaTJjM19pY2ssCisJJmkyYzJfaWNrLAorCSZpMmMxX2ljaywKKwkmdWFydDJfaWNrLAorCSZ1YXJ0MV9pY2ssCisJJmdwdDExX2ljaywKKwkmZ3B0MTBfaWNrLAorCSZtY2JzcDVfaWNrLAorCSZtY2JzcDFfaWNrLAorCSZmYWNfaWNrLAorCSZtYWlsYm94ZXNfaWNrLAorCSZvbWFwY3RybF9pY2ssCisJJnNzaV9sNF9pY2ssCisJJnNzaV9pY2ssCisJJnVzYl9sNF9pY2ssCisJJnNlY3VyaXR5X2w0X2ljazIsCisJJmFlczFfaWNrLAorCSZybmdfaWNrLAorCSZzaGExMV9pY2ssCisJJmRlczFfaWNrLAorCSZkc3MxX2Fsd29uX2ZjaywKKwkmZHNzX3R2X2ZjaywKKwkmZHNzXzk2bV9mY2ssCisJJmRzczJfYWx3b25fZmNrLAorCSZkc3NfaWNrLAorCSZjYW1fbWNsaywKKwkmY2FtX2wzX2ljaywKKwkmY2FtX2w0X2ljaywKKwkmdXNiaG9zdF8xMjBtX2ZjaywKKwkmdXNiaG9zdF80OG1fZmNrLAorCSZ1c2Job3N0X2wzX2ljaywKKwkmdXNiaG9zdF9sNF9pY2ssCisJJnVzYmhvc3Rfc2FyX2ZjaywKKwkmdXNpbV9mY2ssCisJJmdwdDFfZmNrLAorCSZ3a3VwXzMya19mY2ssCisJJmdwaW8xX2ZjaywKKwkmd2R0Ml9mY2ssCisJJndrdXBfbDRfaWNrLAorCSZ1c2ltX2ljaywKKwkmd2R0Ml9pY2ssCisJJndkdDFfaWNrLAorCSZncGlvMV9pY2ssCisJJm9tYXBfMzJrc3luY19pY2ssCisJJmdwdDEyX2ljaywKKwkmZ3B0MV9pY2ssCisJJnBlcl85Nm1fZmNrLAorCSZwZXJfNDhtX2ZjaywKKwkmdWFydDNfZmNrLAorCSZncHQyX2ZjaywKKwkmZ3B0M19mY2ssCisJJmdwdDRfZmNrLAorCSZncHQ1X2ZjaywKKwkmZ3B0Nl9mY2ssCisJJmdwdDdfZmNrLAorCSZncHQ4X2ZjaywKKwkmZ3B0OV9mY2ssCisJJnBlcl8zMmtfYWx3b25fZmNrLAorCSZncGlvNl9mY2ssCisJJmdwaW81X2ZjaywKKwkmZ3BpbzRfZmNrLAorCSZncGlvM19mY2ssCisJJmdwaW8yX2ZjaywKKwkmd2R0M19mY2ssCisJJnBlcl9sNF9pY2ssCisJJmdwaW82X2ljaywKKwkmZ3BpbzVfaWNrLAorCSZncGlvNF9pY2ssCisJJmdwaW8zX2ljaywKKwkmZ3BpbzJfaWNrLAorCSZ3ZHQzX2ljaywKKwkmdWFydDNfaWNrLAorCSZncHQ5X2ljaywKKwkmZ3B0OF9pY2ssCisJJmdwdDdfaWNrLAorCSZncHQ2X2ljaywKKwkmZ3B0NV9pY2ssCisJJmdwdDRfaWNrLAorCSZncHQzX2ljaywKKwkmZ3B0Ml9pY2ssCisJJm1jYnNwMl9pY2ssCisJJm1jYnNwM19pY2ssCisJJm1jYnNwNF9pY2ssCisJJm1jYnNwMl9mY2ssCisJJm1jYnNwM19mY2ssCisJJm1jYnNwNF9mY2ssCisJJmVtdV9zcmNfY2ssCisJJnBjbGtfZmNrLAorCSZwY2xreDJfZmNrLAorCSZhdGNsa19mY2ssCisJJnRyYWNlY2xrX3NyY19mY2ssCisJJnRyYWNlY2xrX2ZjaywKKwkmc3IxX2ZjaywKKwkmc3IyX2ZjaywKKwkmc3JfbDRfaWNrLAorCSZzZWN1cmVfMzJrX2ZjaywKKwkmZ3B0MTJfZmNrLAorCSZ3ZHQxX2ZjaywKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhYzM4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKQEAgLTAsMCArMSw0MDEgQEAKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNX1JFR0JJVFNfMjRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTV9SRUdCSVRTXzI0WFhfSAorCisvKgorICogT01BUDI0WFggQ2xvY2sgTWFuYWdlbWVudCByZWdpc3RlciBiaXRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJjbS5oIgorCisvKiBCaXRzIHNoYXJlZCBiZXR3ZWVuIHJlZ2lzdGVycyAqLworCisvKiBDTV9GQ0xLRU4xX0NPUkUgYW5kIENNX0lDTEtFTjFfQ09SRSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQJCQkJMzEKKyNkZWZpbmUgT01BUDI0WFhfRU5fQ0FNCQkJCQkoMSA8PCAzMSkKKyNkZWZpbmUgT01BUDI0WFhfRU5fV0RUNF9TSElGVAkJCQkyOQorI2RlZmluZSBPTUFQMjRYWF9FTl9XRFQ0CQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQMjQyMF9FTl9XRFQzX1NISUZUCQkJCTI4CisjZGVmaW5lIE9NQVAyNDIwX0VOX1dEVDMJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVAyNFhYX0VOX01TUFJPX1NISUZUCQkJCTI3CisjZGVmaW5lIE9NQVAyNFhYX0VOX01TUFJPCQkJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQJCQkJMjUKKyNkZWZpbmUgT01BUDI0WFhfRU5fRkFDCQkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDI0MjBfRU5fRUFDX1NISUZUCQkJCTI0CisjZGVmaW5lIE9NQVAyNDIwX0VOX0VBQwkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0hEUV9TSElGVAkJCQkyMworI2RlZmluZSBPTUFQMjRYWF9FTl9IRFEJCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMjQyMF9FTl9JMkMyX1NISUZUCQkJCTIwCisjZGVmaW5lIE9NQVAyNDIwX0VOX0kyQzIJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQJCQkJMTkKKyNkZWZpbmUgT01BUDI0MjBfRU5fSTJDMQkJCQkoMSA8PCAxOSkKKworLyogQ01fRkNMS0VOMl9DT1JFIGFuZCBDTV9JQ0xLRU4yX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0MzBfRU5fTUNCU1A1X1NISUZUCQkJNQorI2RlZmluZSBPTUFQMjQzMF9FTl9NQ0JTUDUJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0MzBfRU5fTUNCU1A0X1NISUZUCQkJNAorI2RlZmluZSBPTUFQMjQzMF9FTl9NQ0JTUDQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0MzBfRU5fTUNCU1AzX1NISUZUCQkJMworI2RlZmluZSBPTUFQMjQzMF9FTl9NQ0JTUDMJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfRU5fU1NJX1NISUZUCQkJCTEKKyNkZWZpbmUgT01BUDI0WFhfRU5fU1NJCQkJCQkoMSA8PCAxKQorCisvKiBDTV9GQ0xLRU5fV0tVUCBhbmQgQ01fSUNMS0VOX1dLVVAgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVAkJCTMKKyNkZWZpbmUgT01BUDI0WFhfRU5fTVBVX1dEVAkJCQkoMSA8PCAzKQorCisvKiBCaXRzIHNwZWNpZmljIHRvIGVhY2ggcmVnaXN0ZXIgKi8KKworLyogQ01fSURMRVNUX01QVSAqLworLyogMjQzMCBvbmx5ICovCisjZGVmaW5lIE9NQVAyNDMwX1NUX01QVQkJCQkJKDEgPDwgMCkKKworLyogQ01fQ0xLU0VMX01QVSAqLworI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfTVBVX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfTVBVX01BU0sJCQkoMHgxZiA8PCAwKQorCisvKiBDTV9DTEtTVENUUkxfTVBVICovCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9NUFUJCQkJKDEgPDwgMCkKKworLyogQ01fRkNMS0VOMV9DT1JFIHNwZWNpZmljIGJpdHMqLworI2RlZmluZSBPTUFQMjRYWF9FTl9UVl9TSElGVAkJCQkyCisjZGVmaW5lIE9NQVAyNFhYX0VOX1RWCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9FTl9EU1MyX1NISUZUCQkJCTEKKyNkZWZpbmUgT01BUDI0WFhfRU5fRFNTMgkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjRYWF9FTl9EU1MxX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfRU5fRFNTMQkJCQkoMSA8PCAwKQorCisvKiBDTV9GQ0xLRU4yX0NPUkUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMjQzMF9FTl9JMkNIUzJfU0hJRlQJCQkyMAorI2RlZmluZSBPTUFQMjQzMF9FTl9JMkNIUzIJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVAyNDMwX0VOX0kyQ0hTMV9TSElGVAkJCTE5CisjZGVmaW5lIE9NQVAyNDMwX0VOX0kyQ0hTMQkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDI0MzBfRU5fTU1DSFNEQjJfU0hJRlQJCQkxNworI2RlZmluZSBPTUFQMjQzMF9FTl9NTUNIU0RCMgkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDI0MzBfRU5fTU1DSFNEQjFfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQMjQzMF9FTl9NTUNIU0RCMQkJCQkoMSA8PCAxNikKKworLyogQ01fSUNMS0VOMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRU5fTUFJTEJPWEVTX1NISUZUCQkJMzAKKyNkZWZpbmUgT01BUDI0WFhfRU5fTUFJTEJPWEVTCQkJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQMjRYWF9FTl9EU1NfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMjRYWF9FTl9EU1MJCQkJCSgxIDw8IDApCisKKy8qIENNX0lDTEtFTjJfQ09SRSBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0lDTEtFTjNfQ09SRSAqLworLyogMjQzMCBvbmx5ICovCisjZGVmaW5lIE9NQVAyNDMwX0VOX1NEUkNfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMjQzMF9FTl9TRFJDCQkJCSgxIDw8IDIpCisKKy8qIENNX0lDTEtFTjRfQ09SRSAqLworI2RlZmluZSBPTUFQMjRYWF9FTl9QS0FfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMjRYWF9FTl9QS0EJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0FFU19TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAyNFhYX0VOX0FFUwkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfRU5fUk5HX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfRU5fUk5HCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9FTl9TSEFfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMjRYWF9FTl9TSEEJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0RFU19TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0VOX0RFUwkJCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfU1RfTUFJTEJPWEVTCQkJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQ0CQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQMjQyMF9TVF9XRFQzCQkJCSgxIDw8IDI4KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NU1BSTwkJCQkoMSA8PCAyNykKKyNkZWZpbmUgT01BUDI0WFhfU1RfRkFDCQkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDI0MjBfU1RfRUFDCQkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfSERRCQkJCQkoMSA8PCAyMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfSTJDMgkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfSTJDMQkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDEJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0RTUwkJCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUMl9DT1JFICovCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNQkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTUNCU1AzCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1NTSQkJCQkJKDEgPDwgMSkKKworLyogQ01fSURMRVNUM19DT1JFICovCisvKiAyNDMwIG9ubHkgKi8KKyNkZWZpbmUgT01BUDI0MzBfU1RfU0RSQwkJCQkoMSA8PCAyKQorCisvKiBDTV9JRExFU1Q0X0NPUkUgKi8KKyNkZWZpbmUgT01BUDI0WFhfU1RfUEtBCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjRYWF9TVF9BRVMJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1JORwkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfU1RfU0hBCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjRYWF9TVF9ERVMJCQkJCSgxIDw8IDApCisKKy8qIENNX0FVVE9JRExFMV9DT1JFICovCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fQ0FNCQkJCSgxIDw8IDMxKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX01BSUxCT1hFUwkJCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19XRFQ0CQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQMjQyMF9BVVRPX1dEVDMJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fTVNQUk8JCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVAyNDIwX0FVVE9fTU1DCQkJCSgxIDw8IDI2KQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX0ZBQwkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDI0MjBfQVVUT19FQUMJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fSERRCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX1VBUlQyCQkJCSgxIDw8IDIyKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX1VBUlQxCQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX0kyQzIJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fSTJDMQkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19NQ1NQSTIJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fTUNTUEkxCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX01DQlNQMgkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19NQ0JTUDEJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fR1BUMTIJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fR1BUMTEJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fR1BUMTAJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fR1BUOQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19HUFQ4CQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX0dQVDcJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19HUFQ2CQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fR1BUNQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX0dQVDQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19HUFQzCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fR1BUMgkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjQyMF9BVVRPX1ZMWU5RCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fRFNTCQkJCSgxIDw8IDApCisKKy8qIENNX0FVVE9JRExFMl9DT1JFICovCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fTURNX0lOVEMJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fR1BJTzUJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fTUNTUEkzCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fTU1DSFMyCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fTU1DSFMxCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fVVNCSFMJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDI0MzBfQVVUT19NQ0JTUDUJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0MzBfQVVUT19NQ0JTUDQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0MzBfQVVUT19NQ0JTUDMJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19VQVJUMwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX1NTSQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX1VTQgkJCQkoMSA8PCAwKQorCisvKiBDTV9BVVRPSURMRTNfQ09SRSAqLworI2RlZmluZSBPTUFQMjRYWF9BVVRPX1NEUkMJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19HUE1DCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fU0RNQQkJCQkoMSA8PCAwKQorCisvKiBDTV9BVVRPSURMRTRfQ09SRSAqLworI2RlZmluZSBPTUFQMjRYWF9BVVRPX1BLQQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX0FFUwkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX1JORwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX1NIQQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX0RFUwkJCQkoMSA8PCAwKQorCisvKiBDTV9DTEtTRUwxX0NPUkUgKi8KKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX1VTQl9TSElGVAkJCTI1CisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9VU0JfTUFTSwkJCSgweDcgPDwgMjUpCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9TU0lfU0hJRlQJCQkyMAorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfU1NJX01BU0sJCQkoMHgxZiA8PCAyMCkKKyNkZWZpbmUgT01BUDI0MjBfQ0xLU0VMX1ZMWU5RX1NISUZUCQkJMTUKKyNkZWZpbmUgT01BUDI0MjBfQ0xLU0VMX1ZMWU5RX01BU0sJCQkoMHgxZiA8PCAxNSkKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0RTUzJfU0hJRlQJCQkxMworI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfRFNTMl9NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0RTUzFfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9EU1MxX01BU0sJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfTDRfU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLCQkJCSgweDMgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0wzX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSwkJCQkoMHgxZiA8PCAwKQorCisvKiBDTV9DTEtTRUwyX0NPUkUgKi8KKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDEyX1NISUZUCQkJMjIKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDEyX01BU0sJCQkoMHgzIDw8IDIyKQorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUMTFfU0hJRlQJCQkyMAorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUMTFfTUFTSwkJCSgweDMgPDwgMjApCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9HUFQxMF9TSElGVAkJCTE4CisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9HUFQxMF9NQVNLCQkJKDB4MyA8PCAxOCkKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDlfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUOV9NQVNLCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDhfU0hJRlQJCQkxNAorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUOF9NQVNLCQkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDdfU0hJRlQJCQkxMgorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUN19NQVNLCQkJKDB4MyA8PCAxMikKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDZfU0hJRlQJCQkxMAorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUNl9NQVNLCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDVfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9HUFQ1X01BU0sJCQkoMHgzIDw8IDgpCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9HUFQ0X1NISUZUCQkJNgorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUNF9NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUM19TSElGVAkJCTQKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDNfTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0dQVDJfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9HUFQyX01BU0sJCQkoMHgzIDw8IDIpCisKKy8qIENNX0NMS1NUQ1RSTF9DT1JFICovCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9EU1MJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0w0CQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9MMwkJCQkoMSA8PCAwKQorCisvKiBDTV9GQ0xLRU5fR0ZYICovCisjZGVmaW5lIE9NQVAyNFhYX0VOXzNEX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfRU5fM0QJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX0VOXzJEX1NISUZUCQkJCTEKKyNkZWZpbmUgT01BUDI0WFhfRU5fMkQJCQkJCSgxIDw8IDEpCisKKy8qIENNX0lDTEtFTl9HRlggc3BlY2lmaWMgYml0cyAqLworCisvKiBDTV9JRExFU1RfR0ZYIHNwZWNpZmljIGJpdHMgKi8KKworLyogQ01fQ0xLU0VMX0dGWCBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0NMS1NUQ1RSTF9HRlggKi8KKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0dGWAkJCQkoMSA8PCAwKQorCisvKiBDTV9GQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0lDTEtFTl9XS1VQIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0MzBfRU5fSUNSX1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0MzBfRU5fSUNSCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9FTl9PTUFQQ1RSTF9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDI0WFhfRU5fT01BUENUUkwJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfRU5fV0RUMV9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAyNFhYX0VOX1dEVDEJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVAkJCTEKKyNkZWZpbmUgT01BUDI0WFhfRU5fMzJLU1lOQwkJCQkoMSA8PCAxKQorCisvKiBDTV9JRExFU1RfV0tVUCBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAyNDMwX1NUX0lDUgkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDI0WFhfU1RfT01BUENUUkwJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfV0RUMQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NUFVfV0RUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1NUXzMyS1NZTkMJCQkJKDEgPDwgMSkKKworLyogQ01fQVVUT0lETEVfV0tVUCAqLworI2RlZmluZSBPTUFQMjRYWF9BVVRPX09NQVBDVFJMCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fV0RUMQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjRYWF9BVVRPX01QVV9XRFQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19HUElPUwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPXzMyS1NZTkMJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19HUFQxCQkJCSgxIDw8IDApCisKKy8qIENNX0NMS1NFTF9XS1VQICovCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9HUFQxX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUMV9NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBDTV9DTEtFTl9QTEwgKi8KKyNkZWZpbmUgT01BUDI0WFhfRU5fNTRNX1BMTF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDI0WFhfRU5fNTRNX1BMTF9NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZUCQkJMgorI2RlZmluZSBPTUFQMjRYWF9FTl85Nk1fUExMX01BU0sJCQkoMHgzIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0RQTExfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMjRYWF9FTl9EUExMX01BU0sJCQkJKDB4MyA8PCAwKQorCisvKiBDTV9JRExFU1RfQ0tHRU4gKi8KKyNkZWZpbmUgT01BUDI0WFhfU1RfNTRNX0FQTEwJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfOTZNX0FQTEwJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfNTRNX0NMSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9TVF8xMk1fQ0xLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1NUXzQ4TV9DTEsJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfOTZNX0NMSwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9TVF9DT1JFX0NMS19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0WFhfU1RfQ09SRV9DTEtfTUFTSwkJCSgweDMgPDwgMCkKKworLyogQ01fQVVUT0lETEVfUExMICovCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fNTRNX1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0WFhfQVVUT181NE1fTUFTSwkJCQkoMHgzIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fOTZNX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfQVVUT185Nk1fTUFTSwkJCQkoMHgzIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fRFBMTF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0WFhfQVVUT19EUExMX01BU0sJCQkJKDB4MyA8PCAwKQorCisvKiBDTV9DTEtTRUwxX1BMTCAqLworI2RlZmluZSBPTUFQMjQzMF9NQVhEUExMRkFTVExPQ0tfU0hJRlQJCQkyOAorI2RlZmluZSBPTUFQMjQzMF9NQVhEUExMRkFTVExPQ0tfTUFTSwkJCSgweDcgPDwgMjgpCisjZGVmaW5lIE9NQVAyNFhYX0FQTExTX0NMS0lOX1NISUZUCQkJMjMKKyNkZWZpbmUgT01BUDI0WFhfQVBMTFNfQ0xLSU5fTUFTSwkJCSgweDcgPDwgMjMpCisjZGVmaW5lIE9NQVAyNFhYX0RQTExfTVVMVF9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVAyNFhYX0RQTExfTVVMVF9NQVNLCQkJCSgweDNmZiA8PCAxMikKKyNkZWZpbmUgT01BUDI0WFhfRFBMTF9ESVZfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQMjRYWF9EUExMX0RJVl9NQVNLCQkJCSgweGYgPDwgOCkKKyNkZWZpbmUgT01BUDI0WFhfNTRNX1NPVVJDRV9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDI0WFhfNTRNX1NPVVJDRQkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjQzMF85Nk1fU09VUkNFX1NISUZUCQkJNAorI2RlZmluZSBPTUFQMjQzMF85Nk1fU09VUkNFCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNFhYXzQ4TV9TT1VSQ0VfU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAyNFhYXzQ4TV9TT1VSQ0UJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0MzBfQUxUQ0xLX1NPVVJDRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0MzBfQUxUQ0xLX1NPVVJDRV9NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBDTV9DTEtTRUwyX1BMTCAqLworI2RlZmluZSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBDTV9GQ0xLRU5fRFNQICovCisjZGVmaW5lIE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQJCQkxMAorI2RlZmluZSBPTUFQMjQyMF9FTl9JVkFfQ09QCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMjQyMF9FTl9JVkFfTVBVX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMjQyMF9FTl9JVkFfTVBVCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNFhYX0NNX0ZDTEtFTl9EU1BfRU5fRFNQX1NISUZUCQkwCisjZGVmaW5lIE9NQVAyNFhYX0NNX0ZDTEtFTl9EU1BfRU5fRFNQCQkJKDEgPDwgMCkKKworLyogQ01fSUNMS0VOX0RTUCAqLworI2RlZmluZSBPTUFQMjQyMF9FTl9EU1BfSVBJX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMjQyMF9FTl9EU1BfSVBJCQkJCSgxIDw8IDEpCisKKy8qIENNX0lETEVTVF9EU1AgKi8KKyNkZWZpbmUgT01BUDI0MjBfU1RfSVZBCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjQyMF9TVF9JUEkJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0RTUAkJCQkJKDEgPDwgMCkKKworLyogQ01fQVVUT0lETEVfRFNQICovCisjZGVmaW5lIE9NQVAyNDIwX0FVVE9fRFNQX0lQSQkJCQkoMSA8PCAxKQorCisvKiBDTV9DTEtTRUxfRFNQICovCisjZGVmaW5lIE9NQVAyNDIwX1NZTkNfSVZBCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMjQyMF9DTEtTRUxfSVZBX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMjQyMF9DTEtTRUxfSVZBX01BU0sJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9TWU5DX0RTUAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX1NISUZUCQkJNQorI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX01BU0sJCQkoMHgzIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9EU1BfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NFTF9EU1BfTUFTSwkJCSgweDFmIDw8IDApCisKKy8qIENNX0NMS1NUQ1RSTF9EU1AgKi8KKyNkZWZpbmUgT01BUDI0MjBfQVVUT1NUQVRFX0lWQQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQCQkJCSgxIDw8IDApCisKKy8qIENNX0ZDTEtFTl9NRE0gKi8KKy8qIDI0MzAgb25seSAqLworI2RlZmluZSBPTUFQMjQzMF9FTl9PU0NfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMjQzMF9FTl9PU0MJCQkJCSgxIDw8IDEpCisKKy8qIENNX0lDTEtFTl9NRE0gKi8KKy8qIDI0MzAgb25seSAqLworI2RlZmluZSBPTUFQMjQzMF9DTV9JQ0xLRU5fTURNX0VOX01ETV9TSElGVAkJMAorI2RlZmluZSBPTUFQMjQzMF9DTV9JQ0xLRU5fTURNX0VOX01ETQkJCSgxIDw8IDApCisKKy8qIENNX0lETEVTVF9NRE0gc3BlY2lmaWMgYml0cyAqLworLyogMjQzMCBvbmx5ICovCisKKy8qIENNX0FVVE9JRExFX01ETSAqLworLyogMjQzMCBvbmx5ICovCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fT1NDCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNDMwX0FVVE9fTURNCQkJCSgxIDw8IDApCisKKy8qIENNX0NMS1NFTF9NRE0gKi8KKy8qIDI0MzAgb25seSAqLworI2RlZmluZSBPTUFQMjQzMF9TWU5DX01ETQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjQzMF9DTEtTRUxfTURNX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjQzMF9DTEtTRUxfTURNX01BU0sJCQkoMHhmIDw8IDApCisKKy8qIENNX0NMS1NUQ1RSTF9NRE0gKi8KKy8qIDI0MzAgb25seSAqLworI2RlZmluZSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNCQkJCSgxIDw8IDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0OTEyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKQEAgLTAsMCArMSw2NzMgQEAKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNX1JFR0JJVFNfMzRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTV9SRUdCSVRTXzM0WFhfSAorCisvKgorICogT01BUDM0MzAgQ2xvY2sgTWFuYWdlbWVudCByZWdpc3RlciBiaXRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiY20uaCIKKworLyogQml0cyBzaGFyZWQgYmV0d2VlbiByZWdpc3RlcnMgKi8KKworLyogQ01fRkNMS0VOMV9DT1JFIGFuZCBDTV9JQ0xLRU4xX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fTU1DM19NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQJCQkzMAorI2RlZmluZSBPTUFQMzQzMF9FTl9NU1BSTwkJCQkoMSA8PCAyMykKKyNkZWZpbmUgT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQJCQkJMjMKKyNkZWZpbmUgT01BUDM0MzBfRU5fSERRCQkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDM0MzBfRU5fSERRX1NISUZUCQkJCTIyCisjZGVmaW5lIE9NQVAzNDMwRVMxX0VOX0ZTSE9TVFVTQgkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwRVMxX0VOX0ZTSE9TVFVTQl9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDM0MzBFUzFfRU5fRDJECQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwRVMxX0VOX0QyRF9TSElGVAkJCTMKKyNkZWZpbmUgT01BUDM0MzBfRU5fU1NJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQJCQkJMAorCisvKiBDTV9GQ0xLRU4zX0NPUkUgYW5kIENNX0lDTEtFTjNfQ09SRSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9NQVNLCQkJKDEgPDwgMikKKworLyogQ01fRkNMS0VOX1dLVVAgYW5kIENNX0lDTEtFTl9XS1VQIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0VOX1dEVDIJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fV0RUMl9TSElGVAkJCQk1CisKKy8qIENNX0lDTEtFTl9DQU0sIENNX0ZDTEtFTl9DQU0gc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fQ0FNCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQJCQkJMAorCisvKiBDTV9GQ0xLRU5fUEVSLCBDTV9JQ0xLRU5fUEVSIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0VOX1dEVDMJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQJCQkJMTIKKworLyogQ01fQ0xLU0VMMl9FTVUsIENNX0NMS1NFTDNfRU1VIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX09WRVJSSURFX0VOQUJMRQkJCSgxIDw8IDE5KQorCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gZWFjaCByZWdpc3RlciAqLworCisvKiBDTV9GQ0xLRU5fSVZBMiAqLworI2RlZmluZSBPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyCQkJKDEgPDwgMCkKKworLyogQ01fQ0xLRU5fUExMX0lWQTIgKi8KKyNkZWZpbmUgT01BUDM0MzBfSVZBMl9EUExMX1JBTVBUSU1FX1NISUZUCQk4CisjZGVmaW5lIE9NQVAzNDMwX0lWQTJfRFBMTF9SQU1QVElNRV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VMX1NISUZUCQk0CisjZGVmaW5lIE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VMX01BU0sJCQkoMHhmIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9EUklGVEdVQVJEX1NISUZUCQkzCisjZGVmaW5lIE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9EUklGVEdVQVJEX01BU0sJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfRU5fSVZBMl9EUExMX01BU0sJCQkoMHg3IDw8IDApCisKKy8qIENNX0lETEVTVF9JVkEyICovCisjZGVmaW5lIE9NQVAzNDMwX1NUX0lWQTIJCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUX1BMTF9JVkEyICovCisjZGVmaW5lIE9NQVAzNDMwX1NUX0lWQTJfQ0xLCQkJCSgxIDw8IDApCisKKy8qIENNX0FVVE9JRExFX1BMTF9JVkEyICovCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fSVZBMl9EUExMX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0lWQTJfRFBMTF9NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBDTV9DTEtTRUwxX1BMTF9JVkEyICovCisjZGVmaW5lIE9NQVAzNDMwX0lWQTJfQ0xLX1NSQ19TSElGVAkJCTE5CisjZGVmaW5lIE9NQVAzNDMwX0lWQTJfQ0xLX1NSQ19NQVNLCQkJKDB4MyA8PCAxOSkKKyNkZWZpbmUgT01BUDM0MzBfSVZBMl9EUExMX01VTFRfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX0lWQTJfRFBMTF9NVUxUX01BU0sJCQkoMHg3ZmYgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfSVZBMl9EUExMX0RJVl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfSVZBMl9EUExMX0RJVl9NQVNLCQkJKDB4N2YgPDwgMCkKKworLyogQ01fQ0xLU0VMMl9QTExfSVZBMiAqLworI2RlZmluZSBPTUFQMzQzMF9JVkEyX0RQTExfQ0xLT1VUX0RJVl9TSElGVAkJMAorI2RlZmluZSBPTUFQMzQzMF9JVkEyX0RQTExfQ0xLT1VUX0RJVl9NQVNLCQkoMHgxZiA8PCAwKQorCisvKiBDTV9DTEtTVENUUkxfSVZBMiAqLworI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfSVZBMl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSwkJCSgweDMgPDwgMCkKKworLyogQ01fQ0xLU1RTVF9JVkEyICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0lWQTIJCQkoMSA8PCAwKQorCisvKiBDTV9SRVZJU0lPTiBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX1NZU0NPTkZJRyBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0NMS0VOX1BMTF9NUFUgKi8KKyNkZWZpbmUgT01BUDM0MzBfTVBVX0RQTExfUkFNUFRJTUVfU0hJRlQJCTgKKyNkZWZpbmUgT01BUDM0MzBfTVBVX0RQTExfUkFNUFRJTUVfTUFTSwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfTVBVX0RQTExfRlJFUVNFTF9TSElGVAkJCTQKKyNkZWZpbmUgT01BUDM0MzBfTVBVX0RQTExfRlJFUVNFTF9NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9FTl9NUFVfRFBMTF9EUklGVEdVQVJEX1NISUZUCQkzCisjZGVmaW5lIE9NQVAzNDMwX0VOX01QVV9EUExMX0RSSUZUR1VBUkRfTUFTSwkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfRU5fTVBVX0RQTExfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0VOX01QVV9EUExMX01BU0sJCQkoMHg3IDw8IDApCisKKy8qIENNX0lETEVTVF9NUFUgKi8KKyNkZWZpbmUgT01BUDM0MzBfU1RfTVBVCQkJCQkoMSA8PCAwKQorCisvKiBDTV9JRExFU1RfUExMX01QVSAqLworI2RlZmluZSBPTUFQMzQzMF9TVF9NUFVfQ0xLCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0sJCQkoMSA8PCAwKQorCisvKiBDTV9JRExFU1RfUExMX01QVSAqLworI2RlZmluZSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0sJCQkoMSA8PCAwKQorCisvKiBDTV9BVVRPSURMRV9QTExfTVBVICovCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfTUFTSwkJCSgweDcgPDwgMCkKKworLyogQ01fQ0xLU0VMMV9QTExfTVBVICovCisjZGVmaW5lIE9NQVAzNDMwX01QVV9DTEtfU1JDX1NISUZUCQkJMTkKKyNkZWZpbmUgT01BUDM0MzBfTVBVX0NMS19TUkNfTUFTSwkJCSgweDMgPDwgMTkpCisjZGVmaW5lIE9NQVAzNDMwX01QVV9EUExMX01VTFRfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX01QVV9EUExMX01VTFRfTUFTSwkJCSgweDdmZiA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9NUFVfRFBMTF9ESVZfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX01QVV9EUExMX0RJVl9NQVNLCQkJKDB4N2YgPDwgMCkKKworLyogQ01fQ0xLU0VMMl9QTExfTVBVICovCisjZGVmaW5lIE9NQVAzNDMwX01QVV9EUExMX0NMS09VVF9ESVZfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBfTVBVX0RQTExfQ0xLT1VUX0RJVl9NQVNLCQkoMHgxZiA8PCAwKQorCisvKiBDTV9DTEtTVENUUkxfTVBVICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfTUFTSwkJCSgweDMgPDwgMCkKKworLyogQ01fQ0xLU1RTVF9NUFUgKi8KKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTVBVCQkJKDEgPDwgMCkKKworLyogQ01fRkNMS0VOMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKworLyogQ01fSUNMS0VOMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fSUNSCQkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fSUNSX1NISUZUCQkJCTI5CisjZGVmaW5lIE9NQVAzNDMwX0VOX0FFUzIJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQJCQkJMjgKKyNkZWZpbmUgT01BUDM0MzBfRU5fU0hBMTIJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVAzNDMwX0VOX1NIQTEyX1NISUZUCQkJCTI3CisjZGVmaW5lIE9NQVAzNDMwX0VOX0RFUzIJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0RFUzJfU0hJRlQJCQkJMjYKKyNkZWZpbmUgT01BUDM0MzBFUzFfRU5fRkFDCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwRVMxX0VOX0ZBQ19TSElGVAkJCTgKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUFJTEJPWEVTCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX0VOX01BSUxCT1hFU19TSElGVAkJCTcKKyNkZWZpbmUgT01BUDM0MzBfRU5fT01BUENUUkwJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfRU5fT01BUENUUkxfU0hJRlQJCQk2CisjZGVmaW5lIE9NQVAzNDMwX0VOX1NEUkMJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fU0RSQ19TSElGVAkJCQkxCisKKy8qIENNX0lDTEtFTjJfQ09SRSAqLworI2RlZmluZSBPTUFQMzQzMF9FTl9QS0EJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX0VOX1BLQV9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAzNDMwX0VOX0FFUzEJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfRU5fQUVTMV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAzNDMwX0VOX1JORwkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfRU5fUk5HX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDM0MzBfRU5fU0hBMTEJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fU0hBMTFfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMzQzMF9FTl9ERVMxCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0VOX0RFUzFfU0hJRlQJCQkJMAorCisvKiBDTV9GQ0xLRU4zX0NPUkUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9UU19TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1RTX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fQ1BFRlVTRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fQ1BFRlVTRV9NQVNLCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfU1RfSUNSCQkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfQUVTMgkJCQkoMSA8PCAyOCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0hBMTIJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzIJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01TUFJPCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9IRFEJCQkJCSgxIDw8IDIyKQorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9GQUMJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfTUFJTEJPWEVTCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfT01BUENUUkwJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0RNQQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9TVF9TRFJDCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NTSQkJCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUMl9DT1JFICovCisjZGVmaW5lIE9NQVAzNDMwX1NUX1BLQQkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfQUVTMQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9STkcJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTExCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzEJCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUM19DT1JFICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1VTQlRMTF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCVExMX01BU0sJCQkoMSA8PCAyKQorCisvKiBDTV9BVVRPSURMRTFfQ09SRSAqLworI2RlZmluZSBPTUFQMzQzMF9BVVRPX0FFUzIJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fQUVTMl9TSElGVAkJCTI4CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fU0hBMTIJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fU0hBMTJfU0hJRlQJCQkyNworI2RlZmluZSBPTUFQMzQzMF9BVVRPX0RFUzIJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fREVTMl9TSElGVAkJCTI2CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTU1DMgkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19NTUMyX1NISUZUCQkJMjUKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19NTUMxCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01NQzFfU0hJRlQJCQkyNAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01TUFJPCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01TUFJPX1NISUZUCQkJMjMKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19IRFEJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fSERRX1NISUZUCQkJCTIyCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUNTUEk0CQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DU1BJNF9TSElGVAkJCTIxCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUNTUEkzCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DU1BJM19TSElGVAkJCTIwCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUNTUEkyCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DU1BJMl9TSElGVAkJCTE5CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUNTUEkxCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DU1BJMV9TSElGVAkJCTE4CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fSTJDMwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19JMkMzX1NISUZUCQkJMTcKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19JMkMyCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0kyQzJfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0kyQzEJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fSTJDMV9TSElGVAkJCTE1CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fVUFSVDIJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fVUFSVDJfU0hJRlQJCQkxNAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1VBUlQxCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1VBUlQxX1NISUZUCQkJMTMKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQxMQkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQxMV9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BUMTAJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BUMTBfU0hJRlQJCQkxMQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DQlNQNQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19NQ0JTUDVfU0hJRlQJCQkxMAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DQlNQMQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DQlNQMV9TSElGVAkJCTkKKyNkZWZpbmUgT01BUDM0MzBFUzFfQVVUT19GQUMJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBFUzFfQVVUT19GQUNfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUFJTEJPWEVTCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUFJTEJPWEVTX1NISUZUCQkJNworI2RlZmluZSBPTUFQMzQzMF9BVVRPX09NQVBDVFJMCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fT01BUENUUkxfU0hJRlQJCQk2CisjZGVmaW5lIE9NQVAzNDMwRVMxX0FVVE9fRlNIT1NUVVNCCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBFUzFfQVVUT19GU0hPU1RVU0JfU0hJRlQJCTUKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19IU09UR1VTQgkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0hTT1RHVVNCX1NISUZUCQkJNAorI2RlZmluZSBPTUFQMzQzMEVTMV9BVVRPX0QyRAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMEVTMV9BVVRPX0QyRF9TSElGVAkJCTMKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19TU0kJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19TU0lfU0hJRlQJCQkJMAorCisvKiBDTV9BVVRPSURMRTJfQ09SRSAqLworI2RlZmluZSBPTUFQMzQzMF9BVVRPX1BLQQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1BLQV9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fQUVTMQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0FFUzFfU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fUk5HCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fUk5HX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19TSEExMQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1NIQTExX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0RFUzEJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19ERVMxX1NISUZUCQkJMAorCisvKiBDTV9BVVRPSURMRTNfQ09SRSAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX1VTQlRMTF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0JUTExfTUFTSwkJCSgxIDw8IDIpCisKKy8qIENNX0NMS1NFTF9DT1JFICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9TU0lfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9TU0lfTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0dQVDExX01BU0sJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfR1BUMTFfU0hJRlQJCQk3CisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQxMF9NQVNLCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0dQVDEwX1NISUZUCQkJNgorI2RlZmluZSBPTUFQMzQzMEVTMV9DTEtTRUxfRlNIT1NUVVNCX1NISUZUCQk0CisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS1NFTF9GU0hPU1RVU0JfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfTDRfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9MNF9NQVNLCQkJCSgweDMgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0wzX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfTDNfTUFTSwkJCQkoMHgzIDw8IDApCisKKy8qIENNX0NMS1NUQ1RSTF9DT1JFICovCisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9EMkRfU0hJRlQJCQk0CisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9EMkRfTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0w0X1NISUZUCQkJMgorI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfTDRfTUFTSwkJCSgweDMgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0wzX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfTDNfTUFTSwkJCSgweDMgPDwgMCkKKworLyogQ01fQ0xLU1RTVF9DT1JFICovCisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS0FDVElWSVRZX0QyRAkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0w0CQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0wzCQkJCSgxIDw8IDApCisKKy8qIENNX0ZDTEtFTl9HRlggKi8KKyNkZWZpbmUgT01BUDM0MzBFUzFfRU5fM0QJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBFUzFfRU5fM0RfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMzQzMEVTMV9FTl8yRAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMEVTMV9FTl8yRF9TSElGVAkJCQkxCisKKy8qIENNX0lDTEtFTl9HRlggc3BlY2lmaWMgYml0cyAqLworCisvKiBDTV9JRExFU1RfR0ZYIHNwZWNpZmljIGJpdHMgKi8KKworLyogQ01fQ0xLU0VMX0dGWCBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX1NMRUVQREVQX0dGWCBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0NMS1NUQ1RSTF9HRlggKi8KKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0dGWF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0dGWF9NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBDTV9DTEtTVFNUX0dGWCAqLworI2RlZmluZSBPTUFQMzQzMEVTMV9DTEtBQ1RJVklUWV9HRlgJCQkoMSA8PCAwKQorCisvKiBDTV9GQ0xLRU5fU0dYICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fU0dYX01BU0sJCQkJKDEgPDwgMSkKKworLyogQ01fQ0xLU0VMX1NHWCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9DTEtTRUxfU0dYX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMEVTMl9DTEtTRUxfU0dYX01BU0sJCQkoMHg3IDw8IDApCisKKy8qIENNX0ZDTEtFTl9XS1VQIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVAkJCTkKKworLyogQ01fSUNMS0VOX1dLVVAgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9FTl9XRFQxCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX0VOX1dEVDFfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMzQzMF9FTl8zMktTWU5DCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0VOXzMyS1NZTkNfU0hJRlQJCQkyCisKKy8qIENNX0lETEVTVF9XS1VQIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMgkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQxCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX1NUXzMyS1NZTkMJCQkJKDEgPDwgMikKKworLyogQ01fQVVUT0lETEVfV0tVUCAqLworI2RlZmluZSBPTUFQMzQzMF9BVVRPX1dEVDIJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19XRFQyX1NISUZUCQkJNQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1dEVDEJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19XRFQxX1NISUZUCQkJNAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQSU8xCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BJTzFfU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fMzJLU1lOQwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPXzMyS1NZTkNfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BUMTIJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQxMl9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQxCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BUMV9TSElGVAkJCTAKKworLyogQ01fQ0xLU0VMX1dLVVAgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLU0VMX1VTSU1PQ1BfTUFTSwkJCSgweGYgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1JNX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfUk1fTUFTSwkJCQkoMHgzIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQxX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfR1BUMV9NQVNLCQkJKDEgPDwgMCkKKworLyogQ01fQ0xLRU5fUExMICovCisjZGVmaW5lIE9NQVAzNDMwX1BXUkROX0VNVV9QRVJJUEhfU0hJRlQJCQkzMQorI2RlZmluZSBPTUFQMzQzMF9QV1JETl9DQU1fU0hJRlQJCQkzMAorI2RlZmluZSBPTUFQMzQzMF9QV1JETl9EU1MxX1NISUZUCQkJMjkKKyNkZWZpbmUgT01BUDM0MzBfUFdSRE5fVFZfU0hJRlQJCQkJMjgKKyNkZWZpbmUgT01BUDM0MzBfUFdSRE5fOTZNX1NISUZUCQkJMjcKKyNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfUkFNUFRJTUVfU0hJRlQJCTI0CisjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX1JBTVBUSU1FX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX0ZSRVFTRUxfU0hJRlQJCTIwCisjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX0ZSRVFTRUxfTUFTSwkJKDB4ZiA8PCAyMCkKKyNkZWZpbmUgT01BUDM0MzBfRU5fUEVSSVBIX0RQTExfRFJJRlRHVUFSRF9TSElGVAkxOQorI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9EUklGVEdVQVJEX01BU0sJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX0VOX1BFUklQSF9EUExMX01BU0sJCQkoMHg3IDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9QV1JETl9FTVVfQ09SRV9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9SQU1QVElNRV9TSElGVAkJOAorI2RlZmluZSBPTUFQMzQzMF9DT1JFX0RQTExfUkFNUFRJTUVfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9DT1JFX0RQTExfRlJFUVNFTF9TSElGVAkJNAorI2RlZmluZSBPTUFQMzQzMF9DT1JFX0RQTExfRlJFUVNFTF9NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfRFJJRlRHVUFSRF9TSElGVAkJMworI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfRFJJRlRHVUFSRF9NQVNLCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBDTV9DTEtFTjJfUExMICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9MUE1PREVfU0hJRlQJCTEwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9SQU1QVElNRV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9GUkVRU0VMX1NISUZUCQk0CisjZGVmaW5lIE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9GUkVRU0VMX01BU0sJCSgweGYgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX0RSSUZUR1VBUkRfU0hJRlQJMworI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9QRVJJUEgyX0RQTExfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX01BU0sJCSgweDcgPDwgMCkKKworLyogQ01fSURMRVNUX0NLR0VOICovCisjZGVmaW5lIE9NQVAzNDMwX1NUXzU0TV9DTEsJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfMTJNX0NMSwkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9TVF80OE1fQ0xLCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX1NUXzk2TV9DTEsJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfU1RfUEVSSVBIX0NMSwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9DT1JFX0NMSwkJCQkoMSA8PCAwKQorCisvKiBDTV9JRExFU1QyX0NLR0VOICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUXzEyME1fQ0xLX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF8xMjBNX0NMS19NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfTUFTSwkJCSgxIDw8IDApCisKKy8qIENNX0FVVE9JRExFX1BMTCAqLworI2RlZmluZSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX1NISUZUCQkJMworI2RlZmluZSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0sJCQkoMHg3IDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0NPUkVfRFBMTF9NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBDTV9DTEtTRUwxX1BMTCAqLworLyogTm90ZSB0aGF0IE9NQVAzNDMwX0NPUkVfRFBMTF9DTEtPVVRfRElWX01BU0sgd2FzICgweDMgPDwgMjcpIG9uIDM0MzBFUzEgKi8KKyNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0NMS09VVF9ESVZfU0hJRlQJCTI3CisjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9DTEtPVVRfRElWX01BU0sJCSgweDFmIDw8IDI3KQorI2RlZmluZSBPTUFQMzQzMF9DT1JFX0RQTExfTVVMVF9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9NVUxUX01BU0sJCQkoMHg3ZmYgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9ESVZfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9ESVZfTUFTSwkJCSgweDdmIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV81NE0JCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfU09VUkNFXzQ4TQkJCQkoMSA8PCAzKQorCisvKiBDTV9DTEtTRUwyX1BMTCAqLworI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9NVUxUX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9NVUxUX01BU0sJCQkoMHg3ZmYgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfRElWX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfTUFTSwkJCSgweDdmIDw8IDApCisKKy8qIENNX0NMS1NFTDNfUExMICovCisjZGVmaW5lIE9NQVAzNDMwX0RJVl85Nk1fU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMzQzMF9ESVZfOTZNX01BU0sJCQkJKDB4MWYgPDwgMCkKKworLyogQ01fQ0xLU0VMNF9QTEwgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX01VTFRfU0hJRlQJCTgKKyNkZWZpbmUgT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX01VTFRfTUFTSwkJKDB4N2ZmIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9ESVZfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX0RJVl9NQVNLCQkoMHg3ZiA8PCAwKQorCisvKiBDTV9DTEtTRUw1X1BMTCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9ESVZfMTIwTV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfRElWXzEyME1fTUFTSwkJCSgweDFmIDw8IDApCisKKy8qIENNX0NMS09VVF9DVFJMICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQJCQk3CisjZGVmaW5lIE9NQVAzNDMwX0NMS09VVDJfRU4JCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfQ0xLT1VUMl9ESVZfU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAzNDMwX0NMS09VVDJfRElWX01BU0sJCQkoMHg3IDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0NMS09VVDJTT1VSQ0VfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS09VVDJTT1VSQ0VfTUFTSwkJCSgweDMgPDwgMCkKKworLyogQ01fRkNMS0VOX0RTUyAqLworI2RlZmluZSBPTUFQMzQzMF9FTl9UVgkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfRU5fVFZfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMzQzMF9FTl9EU1MyCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0RTUzJfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMzQzMF9FTl9EU1MxCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQJCQkJMAorCisvKiBDTV9JQ0xLRU5fRFNTICovCisjZGVmaW5lIE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQJCTAKKworLyogQ01fSURMRVNUX0RTUyAqLworI2RlZmluZSBPTUFQMzQzMF9TVF9EU1MJCQkJCSgxIDw8IDApCisKKy8qIENNX0FVVE9JRExFX0RTUyAqLworI2RlZmluZSBPTUFQMzQzMF9BVVRPX0RTUwkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0RTU19TSElGVAkJCQkwCisKKy8qIENNX0NMS1NFTF9EU1MgKi8KKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1RWX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfVFZfTUFTSwkJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfRFNTMV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0RTUzFfTUFTSwkJCSgweDFmIDw8IDApCisKKy8qIENNX1NMRUVQREVQX0RTUyBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0NMS1NUQ1RSTF9EU1MgKi8KKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0RTU19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0RTU19NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBDTV9DTEtTVFNUX0RTUyAqLworI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9EU1MJCQkoMSA8PCAwKQorCisvKiBDTV9GQ0xLRU5fQ0FNIHNwZWNpZmljIGJpdHMgKi8KKworLyogQ01fSUNMS0VOX0NBTSBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0lETEVTVF9DQU0gKi8KKyNkZWZpbmUgT01BUDM0MzBfU1RfQ0FNCQkJCQkoMSA8PCAwKQorCisvKiBDTV9BVVRPSURMRV9DQU0gKi8KKyNkZWZpbmUgT01BUDM0MzBfQVVUT19DQU0JCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19DQU1fU0hJRlQJCQkJMAorCisvKiBDTV9DTEtTRUxfQ0FNICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9DQU1fU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9DQU1fTUFTSwkJCSgweDFmIDw8IDApCisKKy8qIENNX1NMRUVQREVQX0NBTSBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0NMS1NUQ1RSTF9DQU0gKi8KKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0NBTV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0NBTV9NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBDTV9DTEtTVFNUX0NBTSAqLworI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9DQU0JCQkoMSA8PCAwKQorCisvKiBDTV9GQ0xLRU5fUEVSIHNwZWNpZmljIGJpdHMgKi8KKworLyogQ01fSUNMS0VOX1BFUiBzcGVjaWZpYyBiaXRzICovCisKKy8qIENNX0lETEVTVF9QRVIgKi8KKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMwkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1A0CQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMwkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDIJCQkJKDEgPDwgMCkKKworLyogQ01fQVVUT0lETEVfUEVSICovCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BJTzYJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BJTzZfU0hJRlQJCQkxNworI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQSU81CQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQSU81X1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUElPNAkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUElPNF9TSElGVAkJCTE1CisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BJTzMJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fR1BJTzNfU0hJRlQJCQkxNAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQSU8yCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQSU8yX1NISUZUCQkJMTMKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19XRFQzCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1dEVDNfU0hJRlQJCQkxMgorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1VBUlQzCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX1VBUlQzX1NISUZUCQkJMTEKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQ5CQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDlfU0hJRlQJCQkxMAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDgJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQ4X1NISUZUCQkJOQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDcJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQ3X1NISUZUCQkJOAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDYJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQ2X1NISUZUCQkJNworI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDUJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQ1X1NISUZUCQkJNgorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQ0X1NISUZUCQkJNQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDMJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQzX1NISUZUCQkJNAorI2RlZmluZSBPTUFQMzQzMF9BVVRPX0dQVDIJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19HUFQyX1NISUZUCQkJMworI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DQlNQNAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9BVVRPX01DQlNQNF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19NQ0JTUDMJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfQVVUT19NQ0JTUDNfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUNCU1AyCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fTUNCU1AyX1NISUZUCQkJMAorCisvKiBDTV9DTEtTRUxfUEVSICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQ5X01BU0sJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9TSElGVAkJCTcKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSwkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQ4X1NISUZUCQkJNgorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfR1BUN19NQVNLCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0dQVDdfU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQ2X01BU0sJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9TSElGVAkJCTQKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSwkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQ1X1NISUZUCQkJMworI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfR1BUNF9NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0dQVDRfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQzX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfR1BUM19TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSwkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9HUFQyX1NISUZUCQkJMAorCisvKiBDTV9TTEVFUERFUF9QRVIgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9DTV9TTEVFUERFUF9QRVJfRU5fSVZBMgkJKDEgPDwgMikKKworLyogQ01fQ0xLU1RDVFJMX1BFUiAqLworI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfUEVSX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfUEVSX01BU0sJCQkoMHgzIDw8IDApCisKKy8qIENNX0NMS1NUU1RfUEVSICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX1BFUgkJCSgxIDw8IDApCisKKy8qIENNX0NMS1NFTDFfRU1VICovCisjZGVmaW5lIE9NQVAzNDMwX0RJVl9EUExMNF9TSElGVAkJCTI0CisjZGVmaW5lIE9NQVAzNDMwX0RJVl9EUExMNF9NQVNLCQkJCSgweDFmIDw8IDI0KQorI2RlZmluZSBPTUFQMzQzMF9ESVZfRFBMTDNfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9ESVZfRFBMTDNfTUFTSwkJCQkoMHgxZiA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1RSQUNFQ0xLX1NISUZUCQkJMTEKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1RSQUNFQ0xLX01BU0sJCQkoMHg3IDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfUENMS19TSElGVAkJCTgKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1BDTEtfTUFTSwkJCSgweDcgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfQVRDTEtfU0hJRlQJCQk0CisjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9BVENMS19NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9UUkFDRV9NVVhfQ1RSTF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSwkJCSgweDMgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfTVVYX0NUUkxfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMzQzMF9NVVhfQ1RSTF9NQVNLCQkJCSgweDMgPDwgMCkKKworLyogQ01fQ0xLU1RDVFJMX0VNVSAqLworI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfRU1VX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfRU1VX01BU0sJCQkoMHgzIDw8IDApCisKKy8qIENNX0NMS1NUU1RfRU1VICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0VNVQkJCSgxIDw8IDApCisKKy8qIENNX0NMS1NFTDJfRU1VIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0VNVV9NVUxUX1NISUZUCQk4CisjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9FTVVfTVVMVF9NQVNLCQkoMHg3ZmYgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0VNVV9ESVZfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX0VNVV9ESVZfTUFTSwkJCSgweDdmIDw8IDApCisKKy8qIENNX0NMS1NFTDNfRU1VIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfRU1VX01VTFRfU0hJRlQJCTgKKyNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfRU1VX01VTFRfTUFTSwkJKDB4N2ZmIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX0VNVV9ESVZfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfRU1VX0RJVl9NQVNLCQkoMHg3ZiA8PCAwKQorCisvKiBDTV9QT0xDVFJMICovCisjZGVmaW5lIE9NQVAzNDMwX0NMS09VVDJfUE9MCQkJCSgxIDw8IDApCisKKy8qIENNX0lETEVTVF9ORU9OICovCisjZGVmaW5lIE9NQVAzNDMwX1NUX05FT04JCQkJKDEgPDwgMCkKKworLyogQ01fQ0xLU1RDVFJMX05FT04gKi8KKyNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX05FT05fU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9ORU9OX01BU0sJCQkoMHgzIDw8IDApCisKKy8qIENNX0ZDTEtFTl9VU0JIT1NUICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMl9NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QxX01BU0sJCQkoMSA8PCAwKQorCisvKiBDTV9JQ0xLRU5fVVNCSE9TVCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX01BU0sJCQkoMSA8PCAwKQorCisvKiBDTV9JRExFU1RfVVNCSE9TVCAqLworCisvKiBDTV9BVVRPSURMRV9VU0JIT1NUICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fVVNCSE9TVF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0JIT1NUX01BU0sJCQkoMSA8PCAwKQorCisvKiBDTV9TTEVFUERFUF9VU0JIT1NUICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX01QVV9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fTVBVX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fSVZBMl9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDM0MzBFUzJfRU5fSVZBMl9NQVNLCQkJKDEgPDwgMikKKworLyogQ01fQ0xLU1RDVFJMX1VTQkhPU1QgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1VTQkhPU1RfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1VTQkhPU1RfTUFTSwkJKDMgPDwgMCkKKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODlmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKQEAgLTAsMCArMSwxMjQgQEAKKyNpZm5kZWYgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNX0gKKyNkZWZpbmUgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNX0gKKworLyoKKyAqIE9NQVAyLzMgQ2xvY2sgTWFuYWdlbWVudCAoQ00pIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAicHJjbS1jb21tb24uaCIKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisjZGVmaW5lIE9NQVBfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJCVwKKwkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMl9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNlbHNlCisjZGVmaW5lIE9NQVAyNDIwX0NNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKKwkJCUlPX0FERFJFU1MoT01BUDI0MjBfQ01fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisjZGVmaW5lIE9NQVAyNDMwX0NNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKKwkJCUlPX0FERFJFU1MoT01BUDI0MzBfQ01fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisjZGVmaW5lIE9NQVAzNFhYX0NNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKKwkJCUlPX0FERFJFU1MoT01BUDM0MzBfQ01fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisjZW5kaWYKKworLyoKKyAqIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBnbG9iYWwgQ00gcmVnaXN0ZXJzCisgKiBVc2UgY21fe3JlYWQsd3JpdGV9X3JlZygpIHdpdGggdGhlc2UgcmVnaXN0ZXJzLgorICogVGhlc2UgcmVnaXN0ZXJzIGFwcGVhciBvbmNlIHBlciBDTSBtb2R1bGUuCisgKi8KKworI2RlZmluZSBPTUFQMzQzMF9DTV9SRVZJU0lPTgkJT01BUF9DTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDM0MzBfQ01fU1lTQ09ORklHCQlPTUFQX0NNX1JFR0FERFIoT0NQX01PRCwgMHgwMDEwKQorI2RlZmluZSBPTUFQMzQzMF9DTV9QT0xDVFJMCQlPTUFQX0NNX1JFR0FERFIoT0NQX01PRCwgMHgwMDljKQorCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS09VVF9DVFJMCQlPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0NSX01PRCwgMHgwMDcwKQorCisvKgorICogTW9kdWxlIHNwZWNpZmljIENNIHJlZ2lzdGVycyBmcm9tIENNX0JBU0UgKyBkb21haW4gb2Zmc2V0CisgKiBVc2UgY21fe3JlYWQsd3JpdGV9X21vZF9yZWcoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KKyAqIFRoZXNlIHJlZ2lzdGVyIG9mZnNldHMgZ2VuZXJhbGx5IGFwcGVhciBpbiBtb3JlIHRoYW4gb25lIFBSQ00gc3VibW9kdWxlLgorICovCisKKy8qIENvbW1vbiBiZXR3ZWVuIDI0eHggYW5kIDM0eHggKi8KKworI2RlZmluZSBDTV9GQ0xLRU4JCQkJCTB4MDAwMAorI2RlZmluZSBDTV9GQ0xLRU4xCQkJCQlDTV9GQ0xLRU4KKyNkZWZpbmUgQ01fQ0xLRU4JCQkJCUNNX0ZDTEtFTgorI2RlZmluZSBDTV9JQ0xLRU4JCQkJCTB4MDAxMAorI2RlZmluZSBDTV9JQ0xLRU4xCQkJCQlDTV9JQ0xLRU4KKyNkZWZpbmUgQ01fSUNMS0VOMgkJCQkJMHgwMDE0CisjZGVmaW5lIENNX0lDTEtFTjMJCQkJCTB4MDAxOAorI2RlZmluZSBDTV9JRExFU1QJCQkJCTB4MDAyMAorI2RlZmluZSBDTV9JRExFU1QxCQkJCQlDTV9JRExFU1QKKyNkZWZpbmUgQ01fSURMRVNUMgkJCQkJMHgwMDI0CisjZGVmaW5lIENNX0FVVE9JRExFCQkJCQkweDAwMzAKKyNkZWZpbmUgQ01fQVVUT0lETEUxCQkJCQlDTV9BVVRPSURMRQorI2RlZmluZSBDTV9BVVRPSURMRTIJCQkJCTB4MDAzNAorI2RlZmluZSBDTV9BVVRPSURMRTMJCQkJCTB4MDAzOAorI2RlZmluZSBDTV9DTEtTRUwJCQkJCTB4MDA0MAorI2RlZmluZSBDTV9DTEtTRUwxCQkJCQlDTV9DTEtTRUwKKyNkZWZpbmUgQ01fQ0xLU0VMMgkJCQkJMHgwMDQ0CisjZGVmaW5lIENNX0NMS1NUQ1RSTAkJCQkJMHgwMDQ4CisKKworLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIE9NQVAyNFhYX0NNX0ZDTEtFTjIJCQkJMHgwMDA0CisjZGVmaW5lIE9NQVAyNFhYX0NNX0lDTEtFTjQJCQkJMHgwMDFjCisjZGVmaW5lIE9NQVAyNFhYX0NNX0FVVE9JRExFNAkJCQkweDAwM2MKKworI2RlZmluZSBPTUFQMjQzMF9DTV9JRExFU1QzCQkJCTB4MDAyOAorCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS0VOX1BMTAkJCQkweDAwMDQKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ01fQ0xLRU4yCQkJCTB4MDAwNAorI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zCQkJCTB4MDAwOAorI2RlZmluZSBPTUFQMzQzMF9DTV9JRExFU1RfUExMCQkJCUNNX0lETEVTVDIKKyNkZWZpbmUgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMCQkJQ01fQVVUT0lETEUyCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDEJCQkJQ01fQ0xLU0VMCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMCQkJCUNNX0NMS1NFTAorI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTAkJCQlDTV9DTEtTRUwyCisjZGVmaW5lIE9NQVAzNDMwX0NNX1NMRUVQREVQCQkJCUNNX0NMS1NFTDIKKyNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMMwkJCQlDTV9DTEtTVENUUkwKKyNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU1RTVAkJCQkweDAwNGMKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNAkJCQkweDAwNGMKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNQkJCQkweDAwNTAKKyNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMMl9FTVUJCQkJMHgwMDUwCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDNfRU1VCQkJCTB4MDA1NAorCisKKy8qIENsb2NrIG1hbmFnZW1lbnQgZG9tYWluIHJlZ2lzdGVyIGdldC9zZXQgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCitzdGF0aWMgaW5saW5lIHZvaWQgY21fd3JpdGVfbW9kX3JlZyh1MzIgdmFsLCBzMTYgbW9kdWxlLCBzMTYgaWR4KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVBfQ01fUkVHQUREUihtb2R1bGUsIGlkeCkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBjbV9yZWFkX21vZF9yZWcoczE2IG1vZHVsZSwgczE2IGlkeCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoT01BUF9DTV9SRUdBRERSKG1vZHVsZSwgaWR4KSk7Cit9CisjZW5kaWYKKworLyogQ00gcmVnaXN0ZXIgYml0cyBzaGFyZWQgYmV0d2VlbiAyNFhYIGFuZCAzNDMwICovCisKKy8qIENNX0NMS1NFTF9HRlggKi8KKyNkZWZpbmUgT01BUF9DTEtTRUxfR0ZYX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUF9DTEtTRUxfR0ZYX01BU0sJCQkJKDB4NyA8PCAwKQorCisvKiBDTV9JQ0xLRU5fR0ZYICovCisjZGVmaW5lIE9NQVBfRU5fR0ZYX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUF9FTl9HRlgJCQkJCSgxIDw8IDApCisKKy8qIENNX0lETEVTVF9HRlggKi8KKyNkZWZpbmUgT01BUF9TVF9HRlgJCQkJCSgxIDw8IDApCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZDg2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogT01BUDIvMyBTeXN0ZW0gQ29udHJvbCBNb2R1bGUgcmVnaXN0ZXIgYWNjZXNzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9jb250cm9sLmg+CisKK3N0YXRpYyB1MzIgb21hcDJfY3RybF9iYXNlOworCisjZGVmaW5lIE9NQVBfQ1RSTF9SRUdBRERSKHJlZykJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1Mob21hcDJfY3RybF9iYXNlIFwKKwkJCQkJCQkJKyAocmVnKSkKKwordm9pZCBvbWFwX2N0cmxfYmFzZV9zZXQodTMyIGJhc2UpCit7CisJb21hcDJfY3RybF9iYXNlID0gYmFzZTsKK30KKwordTMyIG9tYXBfY3RybF9iYXNlX2dldCh2b2lkKQoreworCXJldHVybiBvbWFwMl9jdHJsX2Jhc2U7Cit9CisKK3U4IG9tYXBfY3RybF9yZWFkYih1MTYgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkYihPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKK30KKwordTE2IG9tYXBfY3RybF9yZWFkdyh1MTYgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkdyhPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKK30KKwordTMyIG9tYXBfY3RybF9yZWFkbCh1MTYgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKK30KKwordm9pZCBvbWFwX2N0cmxfd3JpdGViKHU4IHZhbCwgdTE2IG9mZnNldCkKK3sKKwlwcl9kZWJ1Zygib21hcF9jdHJsX3dyaXRlYjogd3JpdGluZyAweCUweCB0byAweCUweFxuIiwgdmFsLAorCQkgKHUzMilPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKKworCV9fcmF3X3dyaXRlYih2YWwsIE9NQVBfQ1RSTF9SRUdBRERSKG9mZnNldCkpOworfQorCit2b2lkIG9tYXBfY3RybF93cml0ZXcodTE2IHZhbCwgdTE2IG9mZnNldCkKK3sKKwlwcl9kZWJ1Zygib21hcF9jdHJsX3dyaXRldzogd3JpdGluZyAweCUweCB0byAweCUweFxuIiwgdmFsLAorCQkgKHUzMilPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKKworCV9fcmF3X3dyaXRldyh2YWwsIE9NQVBfQ1RSTF9SRUdBRERSKG9mZnNldCkpOworfQorCit2b2lkIG9tYXBfY3RybF93cml0ZWwodTMyIHZhbCwgdTE2IG9mZnNldCkKK3sKKwlwcl9kZWJ1Zygib21hcF9jdHJsX3dyaXRlbDogd3JpdGluZyAweCUweCB0byAweCUweFxuIiwgdmFsLAorCQkgKHUzMilPTUFQX0NUUkxfUkVHQUREUihvZmZzZXQpKTsKKworCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVBfQ1RSTF9SRUdBRERSKG9mZnNldCkpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCmluZGV4IDVhNGNjMjAuLjAyY2VkZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC02OSw3ICs2OSw3IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpncG1jX2NzX2Jhc2UgPQogCSh2b2lkIF9faW9tZW0gKikgSU9fQUREUkVTUyhHUE1DX0JBU0UpICsgR1BNQ19DUzA7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpncG1jX2wzX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpncG1jX2ZjazsKIAogc3RhdGljIHZvaWQgZ3BtY193cml0ZV9yZWcoaW50IGlkeCwgdTMyIHZhbCkKIHsKQEAgLTk0LDExICs5NCwxMCBAQAogCXJldHVybiBfX3Jhd19yZWFkbChncG1jX2NzX2Jhc2UgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4KTsKIH0KIAotLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIGdwbWNfZmNrIHRvIGNsb2NrIGZyYW1ld29yayBhbmQgdXNlIGl0ICovCiB1bnNpZ25lZCBsb25nIGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKHZvaWQpCiB7CiAJLyogSW4gcGljb3NlY29uZHMgKi8KLQlyZXR1cm4gMTAwMDAwMDAwMCAvICgoY2xrX2dldF9yYXRlKGdwbWNfbDNfY2xrKSkgLyAxMDAwKTsKKwlyZXR1cm4gMTAwMDAwMDAwMCAvICgoY2xrX2dldF9yYXRlKGdwbWNfZmNrKSkgLyAxMDAwKTsKIH0KIAogdW5zaWduZWQgaW50IGdwbWNfbnNfdG9fdGlja3ModW5zaWduZWQgaW50IHRpbWVfbnMpCkBAIC0zOTgsOCArMzk3LDExIEBACiB7CiAJdTMyIGw7CiAKLQlncG1jX2wzX2NsayA9IGNsa19nZXQoTlVMTCwgImNvcmVfbDNfY2siKTsKLQlCVUdfT04oSVNfRVJSKGdwbWNfbDNfY2xrKSk7CisJZ3BtY19mY2sgPSBjbGtfZ2V0KE5VTEwsICJncG1jX2ZjayIpOyAvKiBBbHdheXMgb24gRU5BQkxFX09OX0lOSVQgKi8KKwlpZiAoSVNfRVJSKGdwbWNfZmNrKSkKKwkJV0FSTl9PTigxKTsKKwllbHNlCisJCWNsa19lbmFibGUoZ3BtY19mY2spOwogCiAJbCA9IGdwbWNfcmVhZF9yZWcoR1BNQ19SRVZJU0lPTik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiR1BNQyByZXZpc2lvbiAlZC4lZFxuIiwgKGwgPj4gNCkgJiAweDBmLCBsICYgMHgwZik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggNWE0MDkxZi4uNjljODE3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtNDIsNiArNDIsMTIgQEAKIAkJLmxlbmd0aAkJPSBMM18yNFhYX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCisJeworCQkudmlydHVhbCAgICAgICAgPSBMNF8yNFhYX1ZJUlQsCisJCS5wZm4gICAgICAgICAgICA9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKKwkJLmxlbmd0aCAgICAgICAgID0gTDRfMjRYWF9TSVpFLAorCQkudHlwZSAgICAgICAgICAgPSBNVF9ERVZJQ0UKKwl9LAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCiAJewogCQkudmlydHVhbAk9IEw0X1dLXzI0M1hfVklSVCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCmluZGV4IDNlNWQ4Y2QuLjEyNDc5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYwpAQCAtMjcsMTEgKzI3LDE2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CiAKLSNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKLSNpbmNsdWRlICJtZW1vcnkuaCIKKyNpbmNsdWRlICJwcm0uaCIKIAorI2luY2x1ZGUgIm1lbW9yeS5oIgorI2luY2x1ZGUgInNkcmMuaCIKKwordW5zaWduZWQgbG9uZyBvbWFwMl9zZHJjX2Jhc2U7Cit1bnNpZ25lZCBsb25nIG9tYXAyX3Ntc19iYXNlOwogCiBzdGF0aWMgc3RydWN0IG1lbW9yeV90aW1pbmdzIG1lbV90aW1pbmdzOworc3RhdGljIHUzMiBjdXJyX3BlcmZfbGV2ZWwgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKIAogdTMyIG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCh2b2lkKQogewpAQCAtNDgsMTIgKzUzLDYwIEBACiAJcmV0dXJuIG1lbV90aW1pbmdzLm1fdHlwZTsKIH0KIAorLyoKKyAqIENoZWNrIHRoZSBETEwgbG9jayBzdGF0ZSwgYW5kIHJldHVybiB0dWUgaWYgcnVubmluZyBpbiB1bmxvY2sgbW9kZS4KKyAqIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzaGlmdGVkIERMTCB2YWx1ZSBpbiB1bmxvY2sgbW9kZS4KKyAqLwordTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCkKK3sKKwkvKiBkbGxhIGFuZCBkbGxiIGFyZSBhIHNldCAqLworCXUzMiBkbGxfc3RhdGUgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQV9DVFJMKTsKKworCWlmICgoZGxsX3N0YXRlICYgKDEgPDwgMikpID09ICgxIDw8IDIpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogJ2xldmVsJyBpcyB0aGUgdmFsdWUgdG8gc3RvcmUgdG8gQ01fQ0xLU0VMMl9QTEwuQ09SRV9DTEtfU1JDLgorICogUHJhY3RpY2FsIHZhbHVlcyBhcmUgQ09SRV9DTEtfU1JDX0RQTEwgKGZvciBDT1JFX0NMSyA9IERQTExfQ0xLKSBvcgorICogQ09SRV9DTEtfU1JDX0RQTExfWDIgKGZvciBDT1JFX0NMSyA9ICogRFBMTF9DTEsgKiAyKQorICovCit1MzIgb21hcDJfcmVwcm9ncmFtX3NkcmModTMyIGxldmVsLCB1MzIgZm9yY2UpCit7CisJdTMyIGRsbF9jdHJsLCBtX3R5cGU7CisJdTMyIHByZXYgPSBjdXJyX3BlcmZfbGV2ZWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCisJCXJldHVybiBwcmV2OworCisJaWYgKGxldmVsID09IENPUkVfQ0xLX1NSQ19EUExMKSB7CisJCWRsbF9jdHJsID0gb21hcDJfbWVtb3J5X2dldF9zbG93X2RsbF9jdHJsKCk7CisJfSBlbHNlIGlmIChsZXZlbCA9PSBDT1JFX0NMS19TUkNfRFBMTF9YMikgeworCQlkbGxfY3RybCA9IG9tYXAyX21lbW9yeV9nZXRfZmFzdF9kbGxfY3RybCgpOworCX0gZWxzZSB7CisJCXJldHVybiBwcmV2OworCX0KKworCW1fdHlwZSA9IG9tYXAyX21lbW9yeV9nZXRfdHlwZSgpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRlbCgweGZmZmYsIE9NQVAyNFhYX1BSQ01fVk9MVFNFVFVQKTsKKwlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKGxldmVsLCBkbGxfY3RybCwgbV90eXBlKTsKKwljdXJyX3BlcmZfbGV2ZWwgPSBsZXZlbDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcHJldjsKK30KKwogdm9pZCBvbWFwMl9pbml0X21lbW9yeV9wYXJhbXModTMyIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBkbGxfY250OwogCXUzMiBmYXN0X2RsbCA9IDA7CiAKLQltZW1fdGltaW5ncy5tX3R5cGUgPSAhKChTRFJDX01SXzAgJiAweDMpID09IDB4MSk7IC8qIEREUiA9IDEsIFNEUiA9IDAgKi8KKwltZW1fdGltaW5ncy5tX3R5cGUgPSAhKChzZHJjX3JlYWRfcmVnKFNEUkNfTVJfMCkgJiAweDMpID09IDB4MSk7IC8qIEREUiA9IDEsIFNEUiA9IDAgKi8KIAogCS8qIDI0MjIgZXMyLjA1IGFuZCBiZXlvbmQgaGFzIGEgc2luZ2xlIFNJUCBERFIgaW5zdGVhZCBvZiAyIGxpa2Ugb3RoZXJzLgogCSAqIEluIHRoZSBjYXNlIG9mIDI0MjIsIGl0cyBvayB0byB1c2UgQ1MxIGluc3RlYWQgb2YgQ1MwLgpAQCAtNzMsMTEgKzEyNiwxMSBAQAogCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fTE9DSzsKIAogCWlmIChtZW1fdGltaW5ncy5iYXNlX2NzID09IDApIHsKLQkJZmFzdF9kbGwgPSBTRFJDX0RMTEFfQ1RSTDsKLQkJZGxsX2NudCA9IFNEUkNfRExMQV9TVEFUVVMgJiAweGZmMDA7CisJCWZhc3RfZGxsID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEFfQ1RSTCk7CisJCWRsbF9jbnQgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQV9TVEFUVVMpICYgMHhmZjAwOwogCX0gZWxzZSB7Ci0JCWZhc3RfZGxsID0gU0RSQ19ETExCX0NUUkw7Ci0JCWRsbF9jbnQgPSBTRFJDX0RMTEJfU1RBVFVTICYgMHhmZjAwOworCQlmYXN0X2RsbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExCX0NUUkwpOworCQlkbGxfY250ID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEJfU1RBVFVTKSAmIDB4ZmYwMDsKIAl9CiAJaWYgKGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpIHsKIAkJZmFzdF9kbGwgJj0gfjB4ZmYwMDsKQEAgLTEwNiwxNCArMTU5LDEzIEBACiB7CiAJdTMyIGw7CiAKLQlsID0gU01TX1NZU0NPTkZJRzsKKwlsID0gc21zX3JlYWRfcmVnKFNNU19TWVNDT05GSUcpOwogCWwgJj0gfigweDMgPDwgMyk7CiAJbCB8PSAoMHgyIDw8IDMpOwotCVNNU19TWVNDT05GSUcgPSBsOworCXNtc193cml0ZV9yZWcobCwgU01TX1NZU0NPTkZJRyk7CiAKLQlsID0gU0RSQ19TWVNDT05GSUc7CisJbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19TWVNDT05GSUcpOwogCWwgJj0gfigweDMgPDwgMyk7CiAJbCB8PSAoMHgyIDw8IDMpOwotCVNEUkNfU1lTQ09ORklHID0gbDsKLQorCXNkcmNfd3JpdGVfcmVnKGwsIFNEUkNfU1lTQ09ORklHKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oCmluZGV4IGQyMTJlZWEuLjlhMjgwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaApAQCAtMzIsMyArMzIsNSBAQAogZXh0ZXJuIHUzMiBvbWFwMl9tZW1vcnlfZ2V0X3Nsb3dfZGxsX2N0cmwodm9pZCk7CiBleHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfZmFzdF9kbGxfY3RybCh2b2lkKTsKIGV4dGVybiB1MzIgb21hcDJfbWVtb3J5X2dldF90eXBlKHZvaWQpOwordTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCk7Cit1MzIgb21hcDJfcmVwcm9ncmFtX3NkcmModTMyIGxldmVsLCB1MzIgZm9yY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggMDU3NTA5Ny4uOTMwNzcwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0xLDExICsxLDEyIEBACiAvKgogICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwogICoKLSAqIE9NQVAxIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKKyAqIE9NQVAyIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnkubGluZGdyZW5Abm9raWEuY29tPgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOCwxMyArMjksMTcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXhfY2ZnIGFyY2hfbXV4X2NmZzsKKwogLyogTk9URTogU2VlIG11eC5oIGZvciB0aGUgZW51bWVyYXRpb24gKi8KIAotc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDI0eHhfcGluc1tdID0geworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCitzdGF0aWMgc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDI0eHhfcGluc1tdID0gewogLyoKICAqCWRlc2NyaXB0aW9uCQkJbXV4CW11eAlwdWxsCXB1bGwJZGVidWcKICAqCQkJCQlvZmZzZXQJbW9kZQllbmEJdHlwZQpAQCAtNzcsNyArODIsMTIgQEAKIE1VWF9DRkdfMjRYWCgiQUE4XzI0MlhfR1BJTzU4IiwJCTB4MGVhLAkzLAkwLAkwLAkxKQogTVVYX0NGR18yNFhYKCJZMjBfMjRYWF9HUElPNjAiLAkJMHgxMmMsCTMsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIlc0X18yNFhYX0dQSU83NCIsCQkweDBmMiwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiTjE1XzI0WFhfR1BJTzg1IiwJCTB4MTAzLAkzLAkwLAkwLAkxKQogTVVYX0NGR18yNFhYKCJNMTVfMjRYWF9HUElPOTIiLAkJMHgxMGEsCTMsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlAyMF8yNFhYX0dQSU85MyIsCQkweDEwYiwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiUDE4XzI0WFhfR1BJTzk1IiwJCTB4MTBkLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJNMThfMjRYWF9HUElPOTYiLAkJMHgxMGUsCTMsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkwxNF8yNFhYX0dQSU85NyIsCQkweDEwZiwJMywJMCwJMCwJMSkKIE1VWF9DRkdfMjRYWCgiSjE1XzI0WFhfR1BJTzk5IiwJCTB4MTEzLAkzLAkxLAkxLAkxKQogTVVYX0NGR18yNFhYKCJWMTRfMjRYWF9HUElPMTE3IiwJMHgxMjgsCTMsCTEsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIlAxNF8yNFhYX0dQSU8xMjUiLAkweDE0MCwJMywJMSwJMSwJMSkKQEAgLTEwMiw5ICsxMTIsNiBAQAogTVVYX0NGR18yNFhYKCJEM18yNDJYX0RNQVJFUTQiLAkJMHgwNzIsCTIsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIkUzXzI0MlhfRE1BUkVRNSIsCQkweDA3MSwJMiwJMCwJMCwJMSkKIAotLyogVFNDIElSUSAqLwotTVVYX0NGR18yNFhYKCJQMjBfMjRYWF9UU0NfSVJRIiwJMHgxMDgsCTAsCTAsCTAsCTEpCi0KIC8qIFVBUlQzICovCiBNVVhfQ0ZHXzI0WFgoIksxNV8yNFhYX1VBUlQzX1RYIiwJMHgxMTgsCTAsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIksxNF8yNFhYX1VBUlQzX1JYIiwJMHgxMTksCTAsCTAsCTAsCTEpCkBAIC0xNjcsMTIgKzE3NCwxMDggQEAKIE1VWF9DRkdfMjRYWCgiQUE0XzI0WFhfS0JDMiIsCQkweGU3LAkzLAkwLAkwLAkxKQogTVVYX0NGR18yNFhYKCJCMTNfMjRYWF9LQkM2IiwJCTB4MTEwLAkzLAkwLAkwLAkxKQogCisvKiAyNDMwIFVTQiAqLworTVVYX0NGR18yNFhYKCJBRDlfMjQzMF9VU0IwX1BVRU4iLAkweDEzMywJNCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiWTExXzI0MzBfVVNCMF9WUCIsCTB4MTM0LAk0LAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRDdfMjQzMF9VU0IwX1ZNIiwJMHgxMzUsCTQsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFFN18yNDMwX1VTQjBfUkNWIiwJMHgxMzYsCTQsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFENF8yNDMwX1VTQjBfVFhFTiIsCTB4MTM3LAk0LAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRjlfMjQzMF9VU0IwX1NFMCIsCTB4MTM4LAk0LAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRTZfMjQzMF9VU0IwX0RBVCIsCTB4MTM5LAk0LAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRDI0XzI0MzBfVVNCMV9TRTAiLAkweDEwNywJMiwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUIyNF8yNDMwX1VTQjFfUkNWIiwJMHgxMDgsCTIsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlkyNV8yNDMwX1VTQjFfVFhFTiIsCTB4MTA5LAkyLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBQTI2XzI0MzBfVVNCMV9EQVQiLAkweDEwQSwJMiwJMCwJMCwJMSkKKworLyogMjQzMCBIUy1VU0IgKi8KK01VWF9DRkdfMjRYWCgiQUQ5XzI0MzBfVVNCMEhTX0RBVEEzIiwJMHgxMzMsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlkxMV8yNDMwX1VTQjBIU19EQVRBNCIsCTB4MTM0LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRDdfMjQzMF9VU0IwSFNfREFUQTUiLAkweDEzNSwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUU3XzI0MzBfVVNCMEhTX0RBVEE2IiwJMHgxMzYsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFENF8yNDMwX1VTQjBIU19EQVRBMiIsCTB4MTM3LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRjlfMjQzMF9VU0IwSFNfREFUQTAiLAkweDEzOCwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUU2XzI0MzBfVVNCMEhTX0RBVEExIiwJMHgxMzksCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFFOF8yNDMwX1VTQjBIU19DTEsiLAkweDEzQSwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUQ4XzI0MzBfVVNCMEhTX0RJUiIsCTB4MTNCLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRTVfMjQzMF9VU0IwSFNfU1RQIiwJMHgxM2MsCTAsCTEsCTEsCTEpCitNVVhfQ0ZHXzI0WFgoIkFFOV8yNDMwX1VTQjBIU19OWFQiLAkweDEzRCwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUM3XzI0MzBfVVNCMEhTX0RBVEE3IiwJMHgxM0UsCTAsCTAsCTAsCTEpCisKKy8qIDI0MzAgTWNCU1AgKi8KK01VWF9DRkdfMjRYWCgiQUMxMF8yNDMwX01DQlNQMl9GU1giLAkweDAxMkUsCTEsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFEMTZfMjQzMF9NQ0JTUDJfQ0xYIiwJMHgwMTJGLAkxLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRTEzXzI0MzBfTUNCU1AyX0RYIiwJMHgwMTMwLAkxLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRDEzXzI0MzBfTUNCU1AyX0RSIiwJMHgwMTMxLAkxLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBQzEwXzI0MzBfTUNCU1AyX0ZTWF9PRkYiLDB4MDEyRSwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUQxNl8yNDMwX01DQlNQMl9DTFhfT0ZGIiwweDAxMkYsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFFMTNfMjQzMF9NQ0JTUDJfRFhfT0ZGIiwJMHgwMTMwLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRDEzXzI0MzBfTUNCU1AyX0RSX09GRiIsCTB4MDEzMSwJMCwJMCwJMCwJMSkKIH07CiAKKyNkZWZpbmUgT01BUDI0WFhfUElOU19TWglBUlJBWV9TSVpFKG9tYXAyNHh4X3BpbnMpCisKKyNlbHNlCisjZGVmaW5lIG9tYXAyNHh4X3BpbnMJCU5VTEwKKyNkZWZpbmUgT01BUDI0WFhfUElOU19TWgkwCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDI0WFggKi8KKworI2RlZmluZSBPTUFQMjRYWF9QVUxMX0VOQQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMjRYWF9QVUxMX1VQCSgxIDw8IDQpCisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01VWF9ERUJVRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpCit2b2lkIF9faW5pdF9vcl9tb2R1bGUgb21hcDJfY2ZnX2RlYnVnKGNvbnN0IHN0cnVjdCBwaW5fY29uZmlnICpjZmcsIHU4IHJlZykKK3sKKwl1MTYgb3JpZzsKKwl1OCB3YXJuID0gMCwgZGVidWcgPSAwOworCisJb3JpZyA9IG9tYXBfY3RybF9yZWFkYihjZmctPm11eF9yZWcpOworCisjaWZkZWYJQ09ORklHX09NQVBfTVVYX0RFQlVHCisJZGVidWcgPSBjZmctPmRlYnVnOworI2VuZGlmCisJd2FybiA9IChvcmlnICE9IHJlZyk7CisJaWYgKGRlYnVnIHx8IHdhcm4pCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJNVVg6IHNldHVwICVzICgweCUwOHgpOiAweCUwMnggLT4gMHglMDJ4XG4iLAorCQkJY2ZnLT5uYW1lLCBvbWFwX2N0cmxfYmFzZV9nZXQoKSArIGNmZy0+bXV4X3JlZywKKwkJCW9yaWcsIHJlZyk7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwMl9jZmdfZGVidWcoeCwgeSkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCitpbnQgX19pbml0X29yX21vZHVsZSBvbWFwMjR4eF9jZmdfcmVnKGNvbnN0IHN0cnVjdCBwaW5fY29uZmlnICpjZmcpCit7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhtdXhfc3Bpbl9sb2NrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHJlZyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCXJlZyB8PSBjZmctPm1hc2sgJiAweDc7CisJaWYgKGNmZy0+cHVsbF92YWwpCisJCXJlZyB8PSBPTUFQMjRYWF9QVUxMX0VOQTsKKwlpZiAoY2ZnLT5wdV9wZF92YWwpCisJCXJlZyB8PSBPTUFQMjRYWF9QVUxMX1VQOworCW9tYXAyX2NmZ19kZWJ1ZyhjZmcsIHJlZyk7CisJb21hcF9jdHJsX3dyaXRlYihyZWcsIGNmZy0+bXV4X3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwMjR4eF9jZmdfcmVnCTAKKyNlbmRpZgorCiBpbnQgX19pbml0IG9tYXAyX211eF9pbml0KHZvaWQpCiB7Ci0Jb21hcF9tdXhfcmVnaXN0ZXIob21hcDI0eHhfcGlucywgQVJSQVlfU0laRShvbWFwMjR4eF9waW5zKSk7Ci0JcmV0dXJuIDA7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWFyY2hfbXV4X2NmZy5waW5zCT0gb21hcDI0eHhfcGluczsKKwkJYXJjaF9tdXhfY2ZnLnNpemUJPSBPTUFQMjRYWF9QSU5TX1NaOworCQlhcmNoX211eF9jZmcuY2ZnX3JlZwk9IG9tYXAyNHh4X2NmZ19yZWc7CisJfQorCisJcmV0dXJuIG9tYXBfbXV4X3JlZ2lzdGVyKCZhcmNoX211eF9jZmcpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDk0MDkxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZG9tYWluLmMKLSAqCi0gKiBQb3dlciBkb21haW4gZnVuY3Rpb25zIGZvciBPTUFQMgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgotICogVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KLSAqCi0gKiBTb21lIGNvZGUgYmFzZWQgb24gZWFybGllciBPTUFQMiBzYW1wbGUgUE0gY29kZQotICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKLQotLyogUG93ZXIgZG9tYWluIG9mZnNldHMgKi8KLSNkZWZpbmUgUE1fTVBVX09GRlNFVAkJCTB4MTAwCi0jZGVmaW5lIFBNX0NPUkVfT0ZGU0VUCQkJMHgyMDAKLSNkZWZpbmUgUE1fR0ZYX09GRlNFVAkJCTB4MzAwCi0jZGVmaW5lIFBNX1dLVVBfT0ZGU0VUCQkJMHg0MDAJCS8qIEF1dG9pZGxlIG9ubHkgKi8KLSNkZWZpbmUgUE1fUExMX09GRlNFVAkJCTB4NTAwCQkvKiBBdXRvaWRsZSBvbmx5ICovCi0jZGVmaW5lIFBNX0RTUF9PRkZTRVQJCQkweDgwMAotI2RlZmluZSBQTV9NRE1fT0ZGU0VUCQkJMHhjMDAKLQotLyogUG93ZXIgZG9tYWluIHdha2UtdXAgZGVwZW5kZW5jeSBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIFBNX1dLREVQX09GRlNFVAkJCTB4YzgKLSNkZWZpbmUJCUVOX01ETQkJCSgxIDw8IDUpCi0jZGVmaW5lCQlFTl9XS1VQCQkJKDEgPDwgNCkKLSNkZWZpbmUJCUVOX0dGWAkJCSgxIDw8IDMpCi0jZGVmaW5lCQlFTl9EU1AJCQkoMSA8PCAyKQotI2RlZmluZQkJRU5fTVBVCQkJKDEgPDwgMSkKLSNkZWZpbmUJCUVOX0NPUkUJCQkoMSA8PCAwKQotCi0vKiBDb3JlIHBvd2VyIGRvbWFpbiBzdGF0ZSB0cmFuc2l0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgUE1fUFdTVENUUkxfT0ZGU0VUCQkweGUwCi0jZGVmaW5lCQlGT1JDRVNUQVRFCQkoMSA8PCAxOCkJLyogT25seSBmb3IgRFNQICYgR0ZYICovCi0jZGVmaW5lCQlNRU00UkVUU1RBVEUJCSgxIDw8IDYpCi0jZGVmaW5lCQlNRU0zUkVUU1RBVEUJCSgxIDw8IDUpCi0jZGVmaW5lCQlNRU0yUkVUU1RBVEUJCSgxIDw8IDQpCi0jZGVmaW5lCQlNRU0xUkVUU1RBVEUJCSgxIDw8IDMpCi0jZGVmaW5lCQlMT0dJQ1JFVFNUQVRFCQkoMSA8PCAyKQkvKiBMb2dpYyBpcyByZXRhaW5lZCAqLwotI2RlZmluZQkJUE9XRVJTVEFURV9PRkYJCTB4MwotI2RlZmluZQkJUE9XRVJTVEFURV9SRVRFTlRJT04JMHgxCi0jZGVmaW5lCQlQT1dFUlNUQVRFX09OCQkweDAKLQotLyogUG93ZXIgZG9tYWluIHN0YXRlIHJlZ2lzdGVyICovCi0jZGVmaW5lIFBNX1BXU1RTVF9PRkZTRVQJCTB4ZTQKLQotLyogSGFyZHdhcmUgc3VwZXJ2aXNlZCBzdGF0ZSB0cmFuc2l0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ01fQ0xLU1RDVFJMX09GRlNFVAkJMHg0OAotI2RlZmluZQkJQVVUT1NUQVRfTVBVCQkoMSA8PCAwKQkvKiBNUFUgKi8KLSNkZWZpbmUJCUFVVE9TVEFUX0RTUwkJKDEgPDwgMikJLyogQ29yZSAqLwotI2RlZmluZQkJQVVUT1NUQVRfTDQJCSgxIDw8IDEpCS8qIENvcmUgKi8KLSNkZWZpbmUJCUFVVE9TVEFUX0wzCQkoMSA8PCAwKQkvKiBDb3JlICovCi0jZGVmaW5lCQlBVVRPU1RBVF9HRlgJCSgxIDw8IDApCS8qIEdGWCAqLwotI2RlZmluZQkJQVVUT1NUQVRfSVZBCQkoMSA8PCA4KQkvKiAyNDIwIElWQSBpbiBEU1AgZG9tYWluICovCi0jZGVmaW5lCQlBVVRPU1RBVF9EU1AJCSgxIDw8IDApCS8qIERTUCAqLwotI2RlZmluZQkJQVVUT1NUQVRfTURNCQkoMSA8PCAwKQkvKiBNRE0gKi8KLQotLyogQXV0b21hdGljIGNvbnRyb2wgb2YgaW50ZXJmYWNlIGNsb2NrIGlkbGluZyAqLwotI2RlZmluZSBDTV9BVVRPSURMRTFfT0ZGU0VUCQkweDMwCi0jZGVmaW5lIENNX0FVVE9JRExFMl9PRkZTRVQJCTB4MzQJCS8qIENvcmUgb25seSAqLwotI2RlZmluZSBDTV9BVVRPSURMRTNfT0ZGU0VUCQkweDM4CQkvKiBDb3JlIG9ubHkgKi8KLSNkZWZpbmUgQ01fQVVUT0lETEU0X09GRlNFVAkJMHgzYwkJLyogQ29yZSBvbmx5ICovCi0jZGVmaW5lCQlBVVRPXzU0TSh4KQkJKCgoeCkgJiAweDMpIDw8IDYpCi0jZGVmaW5lCQlBVVRPXzk2TSh4KQkJKCgoeCkgJiAweDMpIDw8IDIpCi0jZGVmaW5lCQlBVVRPX0RQTEwoeCkJCSgoKHgpICYgMHgzKSA8PCAwKQotI2RlZmluZQkJQVVUT19TVE9QUEVECQkweDMKLSNkZWZpbmUJCUFVVE9fQllQQVNTX0ZBU1QJMHgyCQkvKiBEUExMIG9ubHkgKi8KLSNkZWZpbmUJCUFVVE9fQllQQVNTX0xPV19QT1dFUgkweDEJCS8qIERQTEwgb25seSAqLwotI2RlZmluZQkJQVVUT19ESVNBQkxFRAkJMHgwCi0KLS8qIFZvbHRhZ2UgY29udHJvbCBQUkNNX1ZPTFRDVFJMIGJpdHMgKi8KLSNkZWZpbmUJCUFVVE9fRVhUVk9MVAkJKDEgPDwgMTUpCi0jZGVmaW5lCQlGT1JDRV9FWFRWT0xUCQkoMSA8PCAxNCkKLSNkZWZpbmUJCVNFVE9GRl9MRVZFTCh4KQkJKCgoeCkgJiAweDMpIDw8IDEyKQotI2RlZmluZQkJTUVNUkVUQ1RSTAkJKDEgPDwgOCkKLSNkZWZpbmUJCVNFVFJFVF9MRVZFTCh4KQkJKCgoeCkgJiAweDMpIDw8IDYpCi0jZGVmaW5lCQlWT0xUX0xFVkVMKHgpCQkoKCh4KSAmIDB4MykgPDwgMCkKLQotI2RlZmluZSBPTUFQMjRYWF9QUkNNX1ZCQVNFCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKQotI2RlZmluZSBwcmNtX3JlYWRsKHIpCQlfX3Jhd19yZWFkbChPTUFQMjRYWF9QUkNNX1ZCQVNFICsgKHIpKQotI2RlZmluZSBwcmNtX3dyaXRlbCh2LCByKQlfX3Jhd193cml0ZWwoKHYpLCBPTUFQMjRYWF9QUkNNX1ZCQVNFICsgKHIpKQotCi1zdGF0aWMgdTMyIHBtZG9tYWluX2dldF93YWtldXBfZGVwZW5kZW5jaWVzKGludCBkb21haW5fb2Zmc2V0KQotewotCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBQTV9XS0RFUF9PRkZTRVQpOwotfQotCi1zdGF0aWMgdm9pZCBwbWRvbWFpbl9zZXRfd2FrZXVwX2RlcGVuZGVuY2llcyh1MzIgc3RhdGUsIGludCBkb21haW5fb2Zmc2V0KQotewotCXByY21fd3JpdGVsKHN0YXRlLCBkb21haW5fb2Zmc2V0ICsgUE1fV0tERVBfT0ZGU0VUKTsKLX0KLQotc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfcG93ZXJzdGF0ZShpbnQgZG9tYWluX29mZnNldCkKLXsKLQlyZXR1cm4gcHJjbV9yZWFkbChkb21haW5fb2Zmc2V0ICsgUE1fUFdTVENUUkxfT0ZGU0VUKTsKLX0KLQotc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUodTMyIHN0YXRlLCBpbnQgZG9tYWluX29mZnNldCkKLXsKLQlwcmNtX3dyaXRlbChzdGF0ZSwgZG9tYWluX29mZnNldCArIFBNX1BXU1RDVFJMX09GRlNFVCk7Ci19Ci0KLXN0YXRpYyB1MzIgcG1kb21haW5fZ2V0X2Nsb2NrX2F1dG9jb250cm9sKGludCBkb21haW5fb2Zmc2V0KQotewotCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9DTEtTVENUUkxfT0ZGU0VUKTsKLX0KLQotc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9jb250cm9sKHUzMiBzdGF0ZSwgaW50IGRvbWFpbl9vZmZzZXQpCi17Ci0JcHJjbV93cml0ZWwoc3RhdGUsIGRvbWFpbl9vZmZzZXQgKyBDTV9DTEtTVENUUkxfT0ZGU0VUKTsKLX0KLQotc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGUxKGludCBkb21haW5fb2Zmc2V0KQotewotCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTFfT0ZGU0VUKTsKLX0KLQotLyogQ29yZSBkb21haW4gb25seSAqLwotc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGUyKGludCBkb21haW5fb2Zmc2V0KQotewotCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTJfT0ZGU0VUKTsKLX0KLQotLyogQ29yZSBkb21haW4gb25seSAqLwotc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGUzKGludCBkb21haW5fb2Zmc2V0KQotewotCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTNfT0ZGU0VUKTsKLX0KLQotLyogQ29yZSBkb21haW4gb25seSAqLwotc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGU0KGludCBkb21haW5fb2Zmc2V0KQotewotCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTRfT0ZGU0VUKTsKLX0KLQotc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSh1MzIgc3RhdGUsIGludCBkb21haW5fb2Zmc2V0KQotewotCXByY21fd3JpdGVsKHN0YXRlLCBDTV9BVVRPSURMRTFfT0ZGU0VUICsgZG9tYWluX29mZnNldCk7Ci19Ci0KLS8qIENvcmUgZG9tYWluIG9ubHkgKi8KLXN0YXRpYyB2b2lkIHBtZG9tYWluX3NldF9jbG9ja19hdXRvaWRsZTIodTMyIHN0YXRlLCBpbnQgZG9tYWluX29mZnNldCkKLXsKLQlwcmNtX3dyaXRlbChzdGF0ZSwgQ01fQVVUT0lETEUyX09GRlNFVCArIGRvbWFpbl9vZmZzZXQpOwotfQotCi0vKiBDb3JlIGRvbWFpbiBvbmx5ICovCi1zdGF0aWMgdm9pZCBwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2lkbGUzKHUzMiBzdGF0ZSwgaW50IGRvbWFpbl9vZmZzZXQpCi17Ci0JcHJjbV93cml0ZWwoc3RhdGUsIENNX0FVVE9JRExFM19PRkZTRVQgKyBkb21haW5fb2Zmc2V0KTsKLX0KLQotLyogQ29yZSBkb21haW4gb25seSAqLwotc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlNCh1MzIgc3RhdGUsIGludCBkb21haW5fb2Zmc2V0KQotewotCXByY21fd3JpdGVsKHN0YXRlLCBDTV9BVVRPSURMRTRfT0ZGU0VUICsgZG9tYWluX29mZnNldCk7Ci19Ci0KLS8qCi0gKiBDb25maWd1cmVzIHBvd2VyIG1hbmFnZW1lbnQgZG9tYWlucyB0byBpZGxlIGNsb2NrcyBhdXRvbWF0aWNhbGx5LgotICovCi12b2lkIHBtZG9tYWluX3NldF9hdXRvaWRsZSh2b2lkKQotewotCXUzMiB2YWw7Ci0KLQkvKiBTZXQgUExMIGF1dG8gc3RvcCBmb3IgNTRNLCA5Nk0gJiBEUExMICovCi0JcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMShBVVRPXzU0TShBVVRPX1NUT1BQRUQpIHwKLQkJCQkgICAgIEFVVE9fOTZNKEFVVE9fU1RPUFBFRCkgfAotCQkJCSAgICAgQVVUT19EUExMKEFVVE9fU1RPUFBFRCksIFBNX1BMTF9PRkZTRVQpOwotCi0JLyogRXh0ZXJuYWwgY2xvY2sgaW5wdXQgY29udHJvbAotCSAqIFJFVklTSVQ6IFNob3VsZCB0aGlzIGJlIGluIGNsb2NrIGZyYW1ld29yaz8KLQkgKi8KLQlQUkNNX0NMS1NSQ19DVFJMIHw9ICgweDMgPDwgMyk7Ci0KLQkvKiBDb25maWd1cmUgbnVtYmVyIG9mIDMyS0h6IGNsb2NrIGN5Y2xlcyBmb3Igc3lzX2NsayAqLwotCVBSQ01fQ0xLU1NFVFVQID0gMHgwMGZmOwotCi0JLyogQ29uZmlndXJlIGF1dG9tYXRpYyB2b2x0YWdlIHRyYW5zaXRpb24gKi8KLQlQUkNNX1ZPTFRTRVRVUCA9IDA7Ci0JdmFsID0gUFJDTV9WT0xUQ1RSTDsKLQl2YWwgJj0gfihTRVRPRkZfTEVWRUwoMHgzKSB8IFZPTFRfTEVWRUwoMHgzKSk7Ci0JdmFsIHw9IFNFVE9GRl9MRVZFTCgxKSB8IFZPTFRfTEVWRUwoMSkgfCBBVVRPX0VYVFZPTFQ7Ci0JUFJDTV9WT0xUQ1RSTCA9IHZhbDsKLQotCS8qIERpc2FibGUgZW11bGF0aW9uIHRvb2xzIGZ1bmN0aW9uYWwgY2xvY2sgKi8KLQlQUkNNX0NMS0VNVUxfQ1RSTCA9IDB4MDsKLQotCS8qIFNldCBjb3JlIG1lbW9yeSByZXRlbnRpb24gc3RhdGUgKi8KLQl2YWwgPSBwbWRvbWFpbl9nZXRfcG93ZXJzdGF0ZShQTV9DT1JFX09GRlNFVCk7Ci0JaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7Ci0JCXZhbCAmPSB+KDB4NyA8PCAzKTsKLQkJdmFsIHw9IChNRU0zUkVUU1RBVEUgfCBNRU0yUkVUU1RBVEUgfCBNRU0xUkVUU1RBVEUpOwotCX0gZWxzZSB7Ci0JCXZhbCAmPSB+KDB4ZiA8PCAzKTsKLQkJdmFsIHw9IChNRU00UkVUU1RBVEUgfCBNRU0zUkVUU1RBVEUgfCBNRU0yUkVUU1RBVEUgfAotCQkJTUVNMVJFVFNUQVRFKTsKLQl9Ci0JcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUodmFsLCBQTV9DT1JFX09GRlNFVCk7Ci0KLQkvKiBPQ1AgaW50ZXJmYWNlIHNtYXJ0IGlkbGUuIFJFVklTSVQ6IEVuYWJsZSBhdXRvaWRsZSBiaXQwID8gKi8KLQl2YWwgPSBTTVNfU1lTQ09ORklHOwotCXZhbCAmPSB+KDB4MyA8PCAzKTsKLQl2YWwgfD0gKDB4MiA8PCAzKSB8ICgxIDw8IDApOwotCVNNU19TWVNDT05GSUcgfD0gdmFsOwotCi0JdmFsID0gU0RSQ19TWVNDT05GSUc7Ci0JdmFsICY9IH4oMHgzIDw8IDMpOwotCXZhbCB8PSAoMHgyIDw8IDMpOwotCVNEUkNfU1lTQ09ORklHID0gdmFsOwotCi0JLyogQ29uZmlndXJlIEwzIGludGVyZmFjZSBmb3Igc21hcnQgaWRsZS4KLQkgKiBSRVZJU0lUOiBFbmFibGUgYXV0b2lkbGUgYml0MCA/Ci0JICovCi0JdmFsID0gR1BNQ19TWVNDT05GSUc7Ci0JdmFsICY9IH4oMHgzIDw8IDMpOwotCXZhbCB8PSAoMHgyIDw8IDMpIHwgKDEgPDwgMCk7Ci0JR1BNQ19TWVNDT05GSUcgPSB2YWw7Ci0KLQlwbWRvbWFpbl9zZXRfcG93ZXJzdGF0ZShMT0dJQ1JFVFNUQVRFIHwgUE9XRVJTVEFURV9SRVRFTlRJT04sCi0JCQkJUE1fTVBVX09GRlNFVCk7Ci0JcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUoUE9XRVJTVEFURV9SRVRFTlRJT04sIFBNX0NPUkVfT0ZGU0VUKTsKLQlpZiAoIWNwdV9pc19vbWFwMjQyMCgpKQotCQlwbWRvbWFpbl9zZXRfcG93ZXJzdGF0ZShQT1dFUlNUQVRFX1JFVEVOVElPTiwgUE1fTURNX09GRlNFVCk7Ci0KLQkvKiBBc3N1bWUgc3VzcGVuZCBmdW5jdGlvbiBoYXMgc2F2ZWQgdGhlIHN0YXRlIGZvciBEU1AgYW5kIEdGWCAqLwotCXBtZG9tYWluX3NldF9wb3dlcnN0YXRlKEZPUkNFU1RBVEUgfCBQT1dFUlNUQVRFX09GRiwgUE1fRFNQX09GRlNFVCk7Ci0JcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUoRk9SQ0VTVEFURSB8IFBPV0VSU1RBVEVfT0ZGLCBQTV9HRlhfT0ZGU0VUKTsKLQotI2lmIDAKLQkvKiBSRVZJU0lUOiBJbnRlcm5hbCBVU0IgbmVlZHMgc3BlY2lhbCBoYW5kbGluZyAqLwotCWZvcmNlX3N0YW5kYnlfdXNiKCk7Ci0JaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQlmb3JjZV9oc21tYygpOwotCXNkcmFtX3NlbGZfcmVmcmVzaF9vbl9pZGxlX3JlcSgxKTsKLSNlbmRpZgotCi0JLyogRW5hYmxlIGNsb2NrIGF1dG8gY29udHJvbCBmb3IgYWxsIGRvbWFpbnMuCi0JICogTm90ZSB0aGF0IENPUkUgZG9tYWluIGluY2x1ZGVzIGFsc28gRFNTLCBMNCAmIEwzLgotCSAqLwotCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9NUFUsIFBNX01QVV9PRkZTRVQpOwotCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9HRlgsIFBNX0dGWF9PRkZTRVQpOwotCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9EU1MgfCBBVVRPU1RBVF9MNCB8IEFVVE9TVEFUX0wzLAotCQkJCSAgICAgICBQTV9DT1JFX09GRlNFVCk7Ci0JaWYgKGNwdV9pc19vbWFwMjQyMCgpKQotCQlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2NvbnRyb2woQVVUT1NUQVRfSVZBIHwgQVVUT1NUQVRfRFNQLAotCQkJCQkgICAgICAgUE1fRFNQX09GRlNFVCk7Ci0JZWxzZSB7Ci0JCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9EU1AsIFBNX0RTUF9PRkZTRVQpOwotCQlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2NvbnRyb2woQVVUT1NUQVRfTURNLCBQTV9NRE1fT0ZGU0VUKTsKLQl9Ci0KLQkvKiBFbmFibGUgY2xvY2sgYXV0b2lkbGUgZm9yIGFsbCBkb21haW5zICovCi0JcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweDIsIFBNX0RTUF9PRkZTRVQpOwotCWlmIChjcHVfaXNfb21hcDI0MjAoKSkgewotCQlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2lkbGUxKDB4ZmZmZmZmZjksIFBNX0NPUkVfT0ZGU0VUKTsKLQkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMigweDcsIFBNX0NPUkVfT0ZGU0VUKTsKLQkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweDNmLCBQTV9XS1VQX09GRlNFVCk7Ci0JfSBlbHNlIHsKLQkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweGVhZmZmZmYxLCBQTV9DT1JFX09GRlNFVCk7Ci0JCXBtZG9tYWluX3NldF9jbG9ja19hdXRvaWRsZTIoMHhmZmYsIFBNX0NPUkVfT0ZGU0VUKTsKLQkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweDdmLCBQTV9XS1VQX09GRlNFVCk7Ci0JCXBtZG9tYWluX3NldF9jbG9ja19hdXRvaWRsZTEoMHgzLCBQTV9NRE1fT0ZGU0VUKTsKLQl9Ci0JcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMygweDcsIFBNX0NPUkVfT0ZGU0VUKTsKLQlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2lkbGU0KDB4MWYsIFBNX0NPUkVfT0ZGU0VUKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemVzIHBvd2VyIGRvbWFpbnMgYnkgcmVtb3Zpbmcgd2FrZS11cCBkZXBlbmRlbmNpZXMgYW5kIHBvd2VyaW5nCi0gKiBkb3duIERTUCBhbmQgR0ZYLiBHZXRzIGNhbGxlZCBmcm9tIFBNIGluaXQuIE5vdGUgdGhhdCBEU1AgYW5kIElWQSBjb2RlCi0gKiBtdXN0IHJlLWVuYWJsZSBEU1AgYW5kIEdGWCB3aGVuIHVzZWQuCi0gKi8KLXZvaWQgX19pbml0IHBtZG9tYWluX2luaXQodm9pZCkKLXsKLQkvKiBSZW1vdmUgYWxsIGRvbWFpbiB3YWtldXAgZGVwZW5kZW5jaWVzICovCi0JcG1kb21haW5fc2V0X3dha2V1cF9kZXBlbmRlbmNpZXMoRU5fV0tVUCB8IEVOX0NPUkUsIFBNX01QVV9PRkZTRVQpOwotCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKDAsIFBNX0RTUF9PRkZTRVQpOwotCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKDAsIFBNX0dGWF9PRkZTRVQpOwotCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKEVOX1dLVVAgfCBFTl9NUFUsIFBNX0NPUkVfT0ZGU0VUKTsKLQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCi0JCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKDAsIFBNX01ETV9PRkZTRVQpOwotCi0JLyogUG93ZXIgZG93biBEU1AgYW5kIEdGWCAqLwotCXBtZG9tYWluX3NldF9wb3dlcnN0YXRlKFBPV0VSU1RBVEVfT0ZGIHwgRk9SQ0VTVEFURSwgUE1fRFNQX09GRlNFVCk7Ci0JcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUoUE9XRVJTVEFURV9PRkYgfCBGT1JDRVNUQVRFLCBQTV9HRlhfT0ZGU0VUKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwppbmRleCBiYWY3ZDgyLi5hYWQ3ODFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzYsOCArMzcsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3NyYW0uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgogCi0jaW5jbHVkZSAicHJjbS1yZWdzLmgiCi0KIHN0YXRpYyBzdHJ1Y3QgY2xrICp2Y2xrOwogc3RhdGljIHZvaWQgKCpvbWFwMl9zcmFtX2lkbGUpKHZvaWQpOwogc3RhdGljIHZvaWQgKCpvbWFwMl9zcmFtX3N1c3BlbmQpKGludCBkbGxjdHJsLCBpbnQgY3B1X3Jldik7CkBAIC03OCwyNTEgKzc3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBJTlQwX1dBS0VfTUFTSwkoT01BUF9JUlFfQklUKElOVF8yNFhYX0dQSU9fQkFOSzEpIHwJXAotCQkJT01BUF9JUlFfQklUKElOVF8yNFhYX0dQSU9fQkFOSzIpIHwJXAotCQkJT01BUF9JUlFfQklUKElOVF8yNFhYX0dQSU9fQkFOSzMpKQotCi0jZGVmaW5lIElOVDFfV0FLRV9NQVNLCShPTUFQX0lSUV9CSVQoSU5UXzI0WFhfR1BJT19CQU5LNCkpCi0KLSNkZWZpbmUgSU5UMl9XQUtFX01BU0sJKE9NQVBfSVJRX0JJVChJTlRfMjRYWF9VQVJUMV9JUlEpIHwJXAotCQkJT01BUF9JUlFfQklUKElOVF8yNFhYX1VBUlQyX0lSUSkgfAlcCi0JCQlPTUFQX0lSUV9CSVQoSU5UXzI0WFhfVUFSVDNfSVJRKSkKLQotI2RlZmluZSBwcmVnKHJlZykJcHJpbnRrKCIlc1x0KDB4JXApOlx0MHglMDh4XG4iLCAjcmVnLCAmcmVnLCByZWcpOwotCi1zdGF0aWMgdm9pZCBvbWFwMl9wbV9kZWJ1ZyhjaGFyICogZGVzYykKLXsKLQlwcmludGsoIiVzOlxuIiwgZGVzYyk7Ci0KLQlwcmVnKENNX0NMS1NUQ1RSTF9NUFUpOwotCXByZWcoQ01fQ0xLU1RDVFJMX0NPUkUpOwotCXByZWcoQ01fQ0xLU1RDVFJMX0dGWCk7Ci0JcHJlZyhDTV9DTEtTVENUUkxfRFNQKTsKLQlwcmVnKENNX0NMS1NUQ1RSTF9NRE0pOwotCi0JcHJlZyhQTV9QV1NUQ1RSTF9NUFUpOwotCXByZWcoUE1fUFdTVENUUkxfQ09SRSk7Ci0JcHJlZyhQTV9QV1NUQ1RSTF9HRlgpOwotCXByZWcoUE1fUFdTVENUUkxfRFNQKTsKLQlwcmVnKFBNX1BXU1RDVFJMX01ETSk7Ci0KLQlwcmVnKFBNX1BXU1RTVF9NUFUpOwotCXByZWcoUE1fUFdTVFNUX0NPUkUpOwotCXByZWcoUE1fUFdTVFNUX0dGWCk7Ci0JcHJlZyhQTV9QV1NUU1RfRFNQKTsKLQlwcmVnKFBNX1BXU1RTVF9NRE0pOwotCi0JcHJlZyhDTV9BVVRPSURMRTFfQ09SRSk7Ci0JcHJlZyhDTV9BVVRPSURMRTJfQ09SRSk7Ci0JcHJlZyhDTV9BVVRPSURMRTNfQ09SRSk7Ci0JcHJlZyhDTV9BVVRPSURMRTRfQ09SRSk7Ci0JcHJlZyhDTV9BVVRPSURMRV9XS1VQKTsKLQlwcmVnKENNX0FVVE9JRExFX1BMTCk7Ci0JcHJlZyhDTV9BVVRPSURMRV9EU1ApOwotCXByZWcoQ01fQVVUT0lETEVfTURNKTsKLQotCXByZWcoQ01fSUNMS0VOMV9DT1JFKTsKLQlwcmVnKENNX0lDTEtFTjJfQ09SRSk7Ci0JcHJlZyhDTV9JQ0xLRU4zX0NPUkUpOwotCXByZWcoQ01fSUNMS0VONF9DT1JFKTsKLQlwcmVnKENNX0lDTEtFTl9HRlgpOwotCXByZWcoQ01fSUNMS0VOX1dLVVApOwotCXByZWcoQ01fSUNMS0VOX0RTUCk7Ci0JcHJlZyhDTV9JQ0xLRU5fTURNKTsKLQotCXByZWcoQ01fSURMRVNUMV9DT1JFKTsKLQlwcmVnKENNX0lETEVTVDJfQ09SRSk7Ci0JcHJlZyhDTV9JRExFU1QzX0NPUkUpOwotCXByZWcoQ01fSURMRVNUNF9DT1JFKTsKLQlwcmVnKENNX0lETEVTVF9HRlgpOwotCXByZWcoQ01fSURMRVNUX1dLVVApOwotCXByZWcoQ01fSURMRVNUX0NLR0VOKTsKLQlwcmVnKENNX0lETEVTVF9EU1ApOwotCXByZWcoQ01fSURMRVNUX01ETSk7Ci0KLQlwcmVnKFJNX1JTVFNUX01QVSk7Ci0JcHJlZyhSTV9SU1RTVF9HRlgpOwotCXByZWcoUk1fUlNUU1RfV0tVUCk7Ci0JcHJlZyhSTV9SU1RTVF9EU1ApOwotCXByZWcoUk1fUlNUU1RfTURNKTsKLQotCXByZWcoUE1fV0tERVBfTVBVKTsKLQlwcmVnKFBNX1dLREVQX0NPUkUpOwotCXByZWcoUE1fV0tERVBfR0ZYKTsKLQlwcmVnKFBNX1dLREVQX0RTUCk7Ci0JcHJlZyhQTV9XS0RFUF9NRE0pOwotCi0JcHJlZyhDTV9GQ0xLRU5fV0tVUCk7Ci0JcHJlZyhDTV9JQ0xLRU5fV0tVUCk7Ci0JcHJlZyhDTV9JRExFU1RfV0tVUCk7Ci0JcHJlZyhDTV9BVVRPSURMRV9XS1VQKTsKLQlwcmVnKENNX0NMS1NFTF9XS1VQKTsKLQotCXByZWcoUE1fV0tFTl9XS1VQKTsKLQlwcmVnKFBNX1dLU1RfV0tVUCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9wbV9zYXZlX3JlZ2lzdGVycyh2b2lkKQotewotCS8qIFNhdmUgaW50ZXJydXB0IHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1NBVkUoSU5UQ19NSVIwKTsKLQlPTUFQMjRYWF9TQVZFKElOVENfTUlSMSk7Ci0JT01BUDI0WFhfU0FWRShJTlRDX01JUjIpOwotCi0JLyogU2F2ZSBwb3dlciBjb250cm9sIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1NBVkUoQ01fQ0xLU1RDVFJMX01QVSk7Ci0JT01BUDI0WFhfU0FWRShDTV9DTEtTVENUUkxfQ09SRSk7Ci0JT01BUDI0WFhfU0FWRShDTV9DTEtTVENUUkxfR0ZYKTsKLQlPTUFQMjRYWF9TQVZFKENNX0NMS1NUQ1RSTF9EU1ApOwotCU9NQVAyNFhYX1NBVkUoQ01fQ0xLU1RDVFJMX01ETSk7Ci0KLQkvKiBTYXZlIHBvd2VyIHN0YXRlIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1NBVkUoUE1fUFdTVENUUkxfTVBVKTsKLQlPTUFQMjRYWF9TQVZFKFBNX1BXU1RDVFJMX0NPUkUpOwotCU9NQVAyNFhYX1NBVkUoUE1fUFdTVENUUkxfR0ZYKTsKLQlPTUFQMjRYWF9TQVZFKFBNX1BXU1RDVFJMX0RTUCk7Ci0JT01BUDI0WFhfU0FWRShQTV9QV1NUQ1RSTF9NRE0pOwotCi0JLyogU2F2ZSBhdXRvaWRsZSByZWdpc3RlcnMgKi8KLQlPTUFQMjRYWF9TQVZFKENNX0FVVE9JRExFMV9DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0FVVE9JRExFMl9DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0FVVE9JRExFM19DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0FVVE9JRExFNF9DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0FVVE9JRExFX1dLVVApOwotCU9NQVAyNFhYX1NBVkUoQ01fQVVUT0lETEVfUExMKTsKLQlPTUFQMjRYWF9TQVZFKENNX0FVVE9JRExFX0RTUCk7Ci0JT01BUDI0WFhfU0FWRShDTV9BVVRPSURMRV9NRE0pOwotCi0JLyogU2F2ZSBpZGxlIHN0YXRlIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1NBVkUoQ01fSURMRVNUMV9DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0lETEVTVDJfQ09SRSk7Ci0JT01BUDI0WFhfU0FWRShDTV9JRExFU1QzX0NPUkUpOwotCU9NQVAyNFhYX1NBVkUoQ01fSURMRVNUNF9DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0lETEVTVF9HRlgpOwotCU9NQVAyNFhYX1NBVkUoQ01fSURMRVNUX1dLVVApOwotCU9NQVAyNFhYX1NBVkUoQ01fSURMRVNUX0NLR0VOKTsKLQlPTUFQMjRYWF9TQVZFKENNX0lETEVTVF9EU1ApOwotCU9NQVAyNFhYX1NBVkUoQ01fSURMRVNUX01ETSk7Ci0KLQkvKiBTYXZlIGNsb2NrIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1NBVkUoQ01fRkNMS0VOMV9DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0ZDTEtFTjJfQ09SRSk7Ci0JT01BUDI0WFhfU0FWRShDTV9JQ0xLRU4xX0NPUkUpOwotCU9NQVAyNFhYX1NBVkUoQ01fSUNMS0VOMl9DT1JFKTsKLQlPTUFQMjRYWF9TQVZFKENNX0lDTEtFTjNfQ09SRSk7Ci0JT01BUDI0WFhfU0FWRShDTV9JQ0xLRU40X0NPUkUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfcG1fcmVzdG9yZV9yZWdpc3RlcnModm9pZCkKLXsKLQkvKiBSZXN0b3JlIGNsb2NrIHN0YXRlIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQ0xLU1RDVFJMX01QVSk7Ci0JT01BUDI0WFhfUkVTVE9SRShDTV9DTEtTVENUUkxfQ09SRSk7Ci0JT01BUDI0WFhfUkVTVE9SRShDTV9DTEtTVENUUkxfR0ZYKTsKLQlPTUFQMjRYWF9SRVNUT1JFKENNX0NMS1NUQ1RSTF9EU1ApOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQ0xLU1RDVFJMX01ETSk7Ci0KLQkvKiBSZXN0b3JlIHBvd2VyIHN0YXRlIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1JFU1RPUkUoUE1fUFdTVENUUkxfTVBVKTsKLQlPTUFQMjRYWF9SRVNUT1JFKFBNX1BXU1RDVFJMX0NPUkUpOwotCU9NQVAyNFhYX1JFU1RPUkUoUE1fUFdTVENUUkxfR0ZYKTsKLQlPTUFQMjRYWF9SRVNUT1JFKFBNX1BXU1RDVFJMX0RTUCk7Ci0JT01BUDI0WFhfUkVTVE9SRShQTV9QV1NUQ1RSTF9NRE0pOwotCi0JLyogUmVzdG9yZSBpZGxlIHN0YXRlIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fSURMRVNUMV9DT1JFKTsKLQlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVDJfQ09SRSk7Ci0JT01BUDI0WFhfUkVTVE9SRShDTV9JRExFU1QzX0NPUkUpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fSURMRVNUNF9DT1JFKTsKLQlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVF9HRlgpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fSURMRVNUX1dLVVApOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fSURMRVNUX0NLR0VOKTsKLQlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVF9EU1ApOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fSURMRVNUX01ETSk7Ci0KLQkvKiBSZXN0b3JlIGF1dG9pZGxlIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQVVUT0lETEUxX0NPUkUpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQVVUT0lETEUyX0NPUkUpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQVVUT0lETEUzX0NPUkUpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQVVUT0lETEU0X0NPUkUpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQVVUT0lETEVfV0tVUCk7Ci0JT01BUDI0WFhfUkVTVE9SRShDTV9BVVRPSURMRV9QTEwpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fQVVUT0lETEVfRFNQKTsKLQlPTUFQMjRYWF9SRVNUT1JFKENNX0FVVE9JRExFX01ETSk7Ci0KLQkvKiBSZXN0b3JlIGNsb2NrIHJlZ2lzdGVycyAqLwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fRkNMS0VOMV9DT1JFKTsKLQlPTUFQMjRYWF9SRVNUT1JFKENNX0ZDTEtFTjJfQ09SRSk7Ci0JT01BUDI0WFhfUkVTVE9SRShDTV9JQ0xLRU4xX0NPUkUpOwotCU9NQVAyNFhYX1JFU1RPUkUoQ01fSUNMS0VOMl9DT1JFKTsKLQlPTUFQMjRYWF9SRVNUT1JFKENNX0lDTEtFTjNfQ09SRSk7Ci0JT01BUDI0WFhfUkVTVE9SRShDTV9JQ0xLRU40X0NPUkUpOwotCi0JLyogUkVWSVNJVDogQ2xlYXIgaW50ZXJydXB0cyBoZXJlICovCi0KLQkvKiBSZXN0b3JlIGludGVycnVwdCByZWdpc3RlcnMgKi8KLQlPTUFQMjRYWF9SRVNUT1JFKElOVENfTUlSMCk7Ci0JT01BUDI0WFhfUkVTVE9SRShJTlRDX01JUjEpOwotCU9NQVAyNFhYX1JFU1RPUkUoSU5UQ19NSVIyKTsKLX0KLQogc3RhdGljIGludCBvbWFwMl9wbV9zdXNwZW5kKHZvaWQpCiB7Ci0JaW50IHByb2Nlc3Nvcl90eXBlID0gMDsKLQotCS8qIFJFVklTSVQ6IDB4MjEgb3IgMHgyNj8gKi8KLQlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCi0JCXByb2Nlc3Nvcl90eXBlID0gMHgyMTsKLQotCWlmICghcHJvY2Vzc29yX3R5cGUpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWxvY2FsX2ZpcV9kaXNhYmxlKCk7Ci0KLQlvbWFwMl9wbV9zYXZlX3JlZ2lzdGVycygpOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGV4Y2VwdCBmb3IgdGhlIHdha2UgZXZlbnRzICovCi0JSU5UQ19NSVJfU0VUMCA9IDB4ZmZmZmZmZmYgJiB+SU5UMF9XQUtFX01BU0s7Ci0JSU5UQ19NSVJfU0VUMSA9IDB4ZmZmZmZmZmYgJiB+SU5UMV9XQUtFX01BU0s7Ci0JSU5UQ19NSVJfU0VUMiA9IDB4ZmZmZmZmZmYgJiB+SU5UMl9XQUtFX01BU0s7Ci0KLQlwbWRvbWFpbl9zZXRfYXV0b2lkbGUoKTsKLQotCS8qIENsZWFyIG9sZCB3YWtlLXVwIGV2ZW50cyAqLwotCVBNX1dLU1QxX0NPUkUgPSAwOwotCVBNX1dLU1QyX0NPUkUgPSAwOwotCVBNX1dLU1RfV0tVUCA9IDA7Ci0KLQkvKiBFbmFibGUgd2FrZS11cCBldmVudHMgKi8KLQlQTV9XS0VOMV9DT1JFID0gKDEgPDwgMjIpIHwgKDEgPDwgMjEpOwkvKiBVQVJUMSAmIDIgKi8KLQlQTV9XS0VOMl9DT1JFID0gKDEgPDwgMik7CQkvKiBVQVJUMyAqLwotCVBNX1dLRU5fV0tVUCA9ICgxIDw8IDIpIHwgKDEgPDwgMCk7CS8qIEdQSU8gJiBHUFQxICovCi0KLQkvKiBEaXNhYmxlIGNsb2NrcyBleGNlcHQgZm9yIENNX0lDTEtFTjJfQ09SRS4gSXQgZ2V0cyBkaXNhYmxlZAotCSAqIGluIHRoZSBTUkFNIHN1c3BlbmQgY29kZSAqLwotCUNNX0ZDTEtFTjFfQ09SRSA9IDA7Ci0JQ01fRkNMS0VOMl9DT1JFID0gMDsKLQlDTV9JQ0xLRU4xX0NPUkUgPSAwOwotCUNNX0lDTEtFTjNfQ09SRSA9IDA7Ci0JQ01fSUNMS0VONF9DT1JFID0gMDsKLQotCW9tYXAyX3BtX2RlYnVnKCJTdGF0dXMgYmVmb3JlIHN1c3BlbmQiKTsKLQotCS8qIE11c3Qgd2FpdCBmb3Igc2VyaWFsIGJ1ZmZlcnMgdG8gY2xlYXIgKi8KLQltZGVsYXkoMjAwKTsKLQotCS8qIEp1bXAgdG8gU1JBTSBzdXNwZW5kIGNvZGUKLQkgKiBSRVZJU0lUOiBXaGVuIGlzIHRoaXMgU0RSQ19ETExCX0NUUkw/Ci0JICovCi0Jb21hcDJfc3JhbV9zdXNwZW5kKFNEUkNfRExMQV9DVFJMLCBwcm9jZXNzb3JfdHlwZSk7Ci0KLQkvKiBCYWNrIGZyb20gc2xlZXAgKi8KLQlvbWFwMl9wbV9yZXN0b3JlX3JlZ2lzdGVycygpOwotCi0JbG9jYWxfZmlxX2VuYWJsZSgpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0zNTcsMzAgKzExMyw2IEBACiAKIGludCBfX2luaXQgb21hcDJfcG1faW5pdCh2b2lkKQogewotCXByaW50aygiUG93ZXIgTWFuYWdlbWVudCBmb3IgVEkgT01BUC5cbiIpOwotCi0JdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKLQlpZiAoSVNfRVJSKHZjbGspKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBQTSB2Y2xrXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKLQkgKiBXZSBjb3B5IHRoZSBhc3NlbWJsZXIgc2xlZXAvd2FrZXVwIHJvdXRpbmVzIHRvIFNSQU0uCi0JICogVGhlc2Ugcm91dGluZXMgbmVlZCB0byBiZSBpbiBTUkFNIGFzIHRoYXQncyB0aGUgb25seQotCSAqIG1lbW9yeSB0aGUgTVBVIGNhbiBzZWUgd2hlbiBpdCB3YWtlcyB1cC4KLQkgKi8KLQlvbWFwMl9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCwKLQkJCQkJIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKLQotCW9tYXAyX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAyNHh4X2NwdV9zdXNwZW5kLAotCQkJCQkgICAgb21hcDI0eHhfY3B1X3N1c3BlbmRfc3opOwotCi0Jc3VzcGVuZF9zZXRfb3BzKCZvbWFwX3BtX29wcyk7Ci0JcG1faWRsZSA9IG9tYXAyX3BtX2lkbGU7Ci0KLQlwbWRvbWFpbl9pbml0KCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhY2IzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKQEAgLTAsMCArMSwzMTcgQEAKKyNpZm5kZWYgX19BUkNIX0FTTV9NQUNIX09NQVAyX1BSQ01fQ09NTU9OX0gKKyNkZWZpbmUgX19BUkNIX0FTTV9NQUNIX09NQVAyX1BSQ01fQ09NTU9OX0gKKworLyoKKyAqIE9NQVAyLzMgUFJDTSBiYXNlIGFuZCBtb2R1bGUgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKworLyogTW9kdWxlIG9mZnNldHMgZnJvbSBib3RoIENNX0JBU0UgJiBQUk1fQkFTRSAqLworCisvKgorICogT2Zmc2V0cyB0aGF0IGFyZSB0aGUgc2FtZSBvbiAyNHh4IGFuZCAzNHh4CisgKgorICogVGVjaG5pY2FsbHksIGluIHRlcm1zIG9mIHRoZSBUUk0sIE9DUF9NT0QgaXMgMzR4eCBvbmx5OyBQTExfTU9EIGlzCisgKiBDQ1JfTU9EIG9uIDM0MzA7IGFuZCBHRlhfTU9EIG9ubHkgZXhpc3RzIDwgMzQzMEVTMi4KKyAqLworI2RlZmluZSBPQ1BfTU9ECQkJCQkJMHgwMDAKKyNkZWZpbmUgTVBVX01PRAkJCQkJCTB4MTAwCisjZGVmaW5lIENPUkVfTU9ECQkJCQkweDIwMAorI2RlZmluZSBHRlhfTU9ECQkJCQkJMHgzMDAKKyNkZWZpbmUgV0tVUF9NT0QJCQkJCTB4NDAwCisjZGVmaW5lIFBMTF9NT0QJCQkJCQkweDUwMAorCisKKy8qIENoaXAtc3BlY2lmaWMgbW9kdWxlIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRFNQX01PRAkJCQkweDgwMAorCisjZGVmaW5lIE9NQVAyNDMwX01ETV9NT0QJCQkJMHhjMDAKKworLyogSVZBMiBtb2R1bGUgaXMgPCBiYXNlIG9uIDM0MzAgKi8KKyNkZWZpbmUgT01BUDM0MzBfSVZBMl9NT0QJCQkJLTB4ODAwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NHWF9NT0QJCQkJR0ZYX01PRAorI2RlZmluZSBPTUFQMzQzMF9DQ1JfTU9ECQkJCVBMTF9NT0QKKyNkZWZpbmUgT01BUDM0MzBfRFNTX01PRAkJCQkweDYwMAorI2RlZmluZSBPTUFQMzQzMF9DQU1fTU9ECQkJCTB4NzAwCisjZGVmaW5lIE9NQVAzNDMwX1BFUl9NT0QJCQkJMHg4MDAKKyNkZWZpbmUgT01BUDM0MzBfRU1VX01PRAkJCQkweDkwMAorI2RlZmluZSBPTUFQMzQzMF9HUl9NT0QJCQkJCTB4YTAwCisjZGVmaW5lIE9NQVAzNDMwX05FT05fTU9ECQkJCTB4YjAwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ECQkJCTB4YzAwCisKKworLyogMjRYWCByZWdpc3RlciBiaXRzIHNoYXJlZCBiZXR3ZWVuIENNICYgUFJNIHJlZ2lzdGVycyAqLworCisvKiBDTV9GQ0xLRU4xX0NPUkUsIENNX0lDTEtFTjFfQ09SRSwgUE1fV0tFTjFfQ09SRSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQJCQkJMjYKKyNkZWZpbmUgT01BUDI0MjBfRU5fTU1DCQkJCQkoMSA8PCAyNikKKyNkZWZpbmUgT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQJCQkJMjIKKyNkZWZpbmUgT01BUDI0WFhfRU5fVUFSVDIJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVAyNFhYX0VOX1VBUlQxX1NISUZUCQkJCTIxCisjZGVmaW5lIE9NQVAyNFhYX0VOX1VBUlQxCQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQJCQkxOAorI2RlZmluZSBPTUFQMjRYWF9FTl9NQ1NQSTIJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVAkJCTE3CisjZGVmaW5lIE9NQVAyNFhYX0VOX01DU1BJMQkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDI0WFhfRU5fTUNCU1AyX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDI0WFhfRU5fTUNCU1AyCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQJCQkxNQorI2RlZmluZSBPTUFQMjRYWF9FTl9NQ0JTUDEJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDEyX1NISUZUCQkJCTE0CisjZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDEyCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVAkJCQkxMworI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQxMQkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQJCQkJMTIKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUMTAJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQJCQkJMTEKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUOQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUOF9TSElGVAkJCQkxMAorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQ4CQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZUCQkJCTkKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUNwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZUCQkJCTgKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUNgkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZUCQkJCTcKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUNQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUNAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQzX1NISUZUCQkJCTUKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUMwkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQyX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUMgkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAyNDIwX0VOX1ZMWU5RCQkJCSgxIDw8IDMpCisKKy8qIENNX0ZDTEtFTjJfQ09SRSwgQ01fSUNMS0VOMl9DT1JFLCBQTV9XS0VOMl9DT1JFIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAyNDMwX0VOX0dQSU81X1NISUZUCQkJCTEwCisjZGVmaW5lIE9NQVAyNDMwX0VOX0dQSU81CQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQJCQk5CisjZGVmaW5lIE9NQVAyNDMwX0VOX01DU1BJMwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMjQzMF9FTl9NTUNIUzJfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAyNDMwX0VOX01NQ0hTMgkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQJCQk3CisjZGVmaW5lIE9NQVAyNDMwX0VOX01NQ0hTMQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVAkJCQkyCisjZGVmaW5lIE9NQVAyNFhYX0VOX1VBUlQzCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX0VOX1VTQl9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0VOX1VTQgkJCQkJKDEgPDwgMCkKKworLyogQ01fSUNMS0VOMl9DT1JFLCBQTV9XS0VOMl9DT1JFIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAyNDMwX0VOX01ETV9JTlRDX1NISUZUCQkJMTEKKyNkZWZpbmUgT01BUDI0MzBfRU5fTURNX0lOVEMJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAyNDMwX0VOX1VTQkhTX1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0MzBfRU5fVVNCSFMJCQkJKDEgPDwgNikKKworLyogQ01fSURMRVNUMV9DT1JFLCBQTV9XS1NUMV9DT1JFIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAyNDIwX1NUX01NQwkJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQyCQkJCSgxIDw8IDIyKQorI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUMQkJCQkoMSA8PCAyMSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUNTUEkyCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTEJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEyCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMQkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTAJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDgJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDcJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNgkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ1CQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMwkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQyCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNDIwX1NUX1ZMWU5RCQkJCSgxIDw8IDMpCisKKy8qIENNX0lETEVTVDJfQ09SRSwgUE1fV0tTVDJfQ09SRSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1fSU5UQwkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDI0MzBfU1RfR1BJTzUJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAyNDMwX1NUX01DU1BJMwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzIJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTU1DSFMxCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAyNDMwX1NUX1VTQkhTCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQzCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VTQgkJCQkJKDEgPDwgMCkKKworLyogQ01fRkNMS0VOX1dLVVAsIENNX0lDTEtFTl9XS1VQLCBQTV9XS0VOX1dLVVAgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQJCQkJMgorI2RlZmluZSBPTUFQMjRYWF9FTl9HUElPUwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQxX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfRU5fR1BUMQkJCQkoMSA8PCAwKQorCisvKiBQTV9XS1NUX1dLVVAsIENNX0lETEVTVF9XS1VQIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQSU9TCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEJCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUX01ETSBhbmQgUE1fV0tTVF9NRE0gc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0MzBfU1RfTURNCQkJCQkoMSA8PCAwKQorCisKKy8qIDM0MzAgcmVnaXN0ZXIgYml0cyBzaGFyZWQgYmV0d2VlbiBDTSAmIFBSTSByZWdpc3RlcnMgKi8KKworLyogQ01fUkVWSVNJT04sIFBSTV9SRVZJU0lPTiBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9SRVZfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMzQzMF9SRVZfTUFTSwkJCQkoMHhmZiA8PCAwKQorCisvKiBDTV9TWVNDT05GSUcsIFBSTV9TWVNDT05GSUcgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfQVVUT0lETEUJCQkJKDEgPDwgMCkKKworLyogQ01fRkNMS0VOMV9DT1JFLCBDTV9JQ0xLRU4xX0NPUkUsIFBNX1dLRU4xX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fTU1DMgkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fTU1DMl9TSElGVAkJCQkyNQorI2RlZmluZSBPTUFQMzQzMF9FTl9NTUMxCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQMzQzMF9FTl9NTUMxX1NISUZUCQkJCTI0CisjZGVmaW5lIE9NQVAzNDMwX0VOX01DU1BJNAkJCQkoMSA8PCAyMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNTUEk0X1NISUZUCQkJMjEKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNTUEkzCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQJCQkyMAorI2RlZmluZSBPTUFQMzQzMF9FTl9NQ1NQSTIJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVAkJCTE5CisjZGVmaW5lIE9NQVAzNDMwX0VOX01DU1BJMQkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNTUEkxX1NISUZUCQkJMTgKKyNkZWZpbmUgT01BUDM0MzBfRU5fSTJDMwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDM0MzBfRU5fSTJDM19TSElGVAkJCQkxNworI2RlZmluZSBPTUFQMzQzMF9FTl9JMkMyCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9FTl9JMkMyX1NISUZUCQkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX0VOX0kyQzEJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQJCQkJMTUKKyNkZWZpbmUgT01BUDM0MzBfRU5fVUFSVDIJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX0VOX1VBUlQyX1NISUZUCQkJCTE0CisjZGVmaW5lIE9NQVAzNDMwX0VOX1VBUlQxCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVAkJCQkxMworI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQxMQkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQJCQkJMTIKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BUMTAJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDEwX1NISUZUCQkJCTExCisjZGVmaW5lIE9NQVAzNDMwX0VOX01DQlNQNQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNCU1A1X1NISUZUCQkJMTAKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNCU1AxCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVAkJCTkKKyNkZWZpbmUgT01BUDM0MzBfRU5fRlNIT1NUVVNCCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0ZTSE9TVFVTQl9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDM0MzBfRU5fRDJECQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9FTl9EMkRfU0hJRlQJCQkJMworCisvKiBDTV9JQ0xLRU4xX0NPUkUsIFBNX1dLRU4xX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fSFNPVEdVU0IJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQJCQkJNAorCisvKiBQTV9XS1NUMV9DT1JFLCBDTV9JRExFU1QxX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfU1RfTU1DMgkJCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTU1DMQkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEk0CQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTMJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJMgkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkxCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMzCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMyCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMxCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMgkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfVUFSVDEJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDExCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1A1CQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDEJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfRlNIT1NUVVNCCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0hTT1RHVVNCCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0QyRAkJCQkJKDEgPDwgMykKKworLyogQ01fRkNMS0VOX1dLVVAsIENNX0lDTEtFTl9XS1VQLCBQTV9XS0VOX1dLVVAgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BJTzEJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQxCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDFfU0hJRlQJCQkJMAorCisvKiBDTV9GQ0xLRU5fV0tVUCwgUE1fV0tFTl9XS1VQIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0VOX1NSMgkJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfRU5fU1IyX1NISUZUCQkJCTcKKyNkZWZpbmUgT01BUDM0MzBfRU5fU1IxCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9FTl9TUjFfU0hJRlQJCQkJNgorCisvKiBDTV9JQ0xLRU5fV0tVUCwgUE1fV0tFTl9XS1VQIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDEyCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDEyX1NISUZUCQkJCTEKKworLyogQ01fSURMRVNUX1dLVVAsIFBNX1dLU1RfV0tVUCBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9TVF9TUjIJCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMQkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzEJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMTIJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMQkJCQkoMSA8PCAwKQorCisvKgorICogQ01fU0xFRVBERVBfR0ZYLCBDTV9TTEVFUERFUF9EU1MsIENNX1NMRUVQREVQX0NBTSwKKyAqIENNX1NMRUVQREVQX1BFUiwgUE1fV0tERVBfSVZBMiwgUE1fV0tERVBfR0ZYLAorICogUE1fV0tERVBfRFNTLCBQTV9XS0RFUF9DQU0sIFBNX1dLREVQX1BFUiwgUE1fV0tERVBfTkVPTiBzaGFyZWQgYml0cworICovCisjZGVmaW5lIE9NQVAzNDMwX0VOX01QVQkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fTVBVX1NISUZUCQkJCTEKKworLyogQ01fRkNMS0VOX1BFUiwgQ01fSUNMS0VOX1BFUiwgUE1fV0tFTl9QRVIgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BJTzYJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQSU82X1NISUZUCQkJCTE3CisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQSU81CQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9FTl9HUElPNAkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQJCQkJMTUKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BJTzMJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQSU8zX1NISUZUCQkJCTE0CisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQSU8yCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVAkJCQkxMworI2RlZmluZSBPTUFQMzQzMF9FTl9VQVJUMwkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQJCQkJMTEKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BUOQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfRU5fR1BUOV9TSElGVAkJCQkxMAorI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQ4CQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQJCQkJOQorI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQ3CQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQ2CQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQ1CQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQ0CQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQJCQkJNQorI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQzCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMzQzMF9FTl9HUFQyCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQJCQkJMworCisvKiBDTV9GQ0xLRU5fUEVSLCBDTV9JQ0xLRU5fUEVSLCBQTV9XS0VOX1BFUiwgUE1fV0tTVF9QRVIgc2hhcmVkIGJpdHMgKi8KKy8qIFhYWCBQb3NzaWJsZSBUSSBkb2N1bWVudGF0aW9uIGJ1Zzogc2hvdWxkIHRoZSBQTV9XS1NUX1BFUiBFTl8qIGJpdHMKKyAqIGJlIFNUXyogYml0cyBpbnN0ZWFkPyAqLworI2RlZmluZSBPTUFQMzQzMF9FTl9NQ0JTUDQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNCU1A0X1NISUZUCQkJMgorI2RlZmluZSBPTUFQMzQzMF9FTl9NQ0JTUDMJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNCU1AzX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMF9FTl9NQ0JTUDIJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfRU5fTUNCU1AyX1NISUZUCQkJMAorCisvKiBDTV9JRExFU1RfUEVSLCBQTV9XS1NUX1BFUiBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNgkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzUJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU80CQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMwkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzIJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQzCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ5CQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ4CQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDcJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNgkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ1CQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMwkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQyCQkJCSgxIDw8IDMpCisKKy8qIENNX1NMRUVQREVQX1BFUiwgUE1fV0tERVBfSVZBMiwgUE1fV0tERVBfTVBVLCBQTV9XS0RFUF9QRVIgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRQkJCQkoMSA8PCAwKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1yZWdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMWM0YjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLXJlZ3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLXJlZ3MuaAotICoKLSAqIE9NQVAyNFhYIFBvd2VyIFJlc2V0IGFuZCBDbG9jayBNYW5hZ2VtZW50IChQUkNNKSByZWdpc3RlcnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJDTV9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUkNNX0gKLQotLyogU0VUX1BFUkZPUk1BTkNFX0xFVkVMIFBBUkFNRVRFUlMgKi8KLSNkZWZpbmUgUFJDTV9IQUxGX1NQRUVEIDEKLSNkZWZpbmUgUFJDTV9GVUxMX1NQRUVEIDIKLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLSNkZWZpbmUgUFJDTV9SRUczMihvZmZzZXQpCV9fUkVHMzIoT01BUDI0WFhfUFJDTV9CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgUFJDTV9SRVZJU0lPTgkJUFJDTV9SRUczMigweDAwMCkKLSNkZWZpbmUgUFJDTV9TWVNDT05GSUcJCVBSQ01fUkVHMzIoMHgwMTApCi0jZGVmaW5lIFBSQ01fSVJRU1RBVFVTX01QVQlQUkNNX1JFRzMyKDB4MDE4KQotI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9NUFUJUFJDTV9SRUczMigweDAxQykKLSNkZWZpbmUgUFJDTV9WT0xUQ1RSTAkJUFJDTV9SRUczMigweDA1MCkKLSNkZWZpbmUgUFJDTV9WT0xUU1QJCVBSQ01fUkVHMzIoMHgwNTQpCi0jZGVmaW5lIFBSQ01fQ0xLU1JDX0NUUkwJUFJDTV9SRUczMigweDA2MCkKLSNkZWZpbmUgUFJDTV9DTEtPVVRfQ1RSTAlQUkNNX1JFRzMyKDB4MDcwKQotI2RlZmluZSBQUkNNX0NMS0VNVUxfQ1RSTAlQUkNNX1JFRzMyKDB4MDc4KQotI2RlZmluZSBQUkNNX0NMS0NGR19DVFJMCVBSQ01fUkVHMzIoMHgwODApCi0jZGVmaW5lIFBSQ01fQ0xLQ0ZHX1NUQVRVUwlQUkNNX1JFRzMyKDB4MDg0KQotI2RlZmluZSBQUkNNX1ZPTFRTRVRVUAkJUFJDTV9SRUczMigweDA5MCkKLSNkZWZpbmUgUFJDTV9DTEtTU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTQpCi0jZGVmaW5lIFBSQ01fUE9MQ1RSTAkJUFJDTV9SRUczMigweDA5OCkKLQotLyogR0VORVJBTCBQVVJQT1NFICovCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEJUFJDTV9SRUczMigweDBCMCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMglQUkNNX1JFRzMyKDB4MEI0KQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UzCVBSQ01fUkVHMzIoMHgwQjgpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTQJUFJDTV9SRUczMigweDBCQykKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNQlQUkNNX1JFRzMyKDB4MEMwKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U2CVBSQ01fUkVHMzIoMHgwQzQpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTcJUFJDTV9SRUczMigweDBDOCkKLSNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOAlQUkNNX1JFRzMyKDB4MENDKQotI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U5CVBSQ01fUkVHMzIoMHgwRDApCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEwCVBSQ01fUkVHMzIoMHgwRDQpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTExCVBSQ01fUkVHMzIoMHgwRDgpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEyCVBSQ01fUkVHMzIoMHgwREMpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEzCVBSQ01fUkVHMzIoMHgwRTApCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE0CVBSQ01fUkVHMzIoMHgwRTQpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE1CVBSQ01fUkVHMzIoMHgwRTgpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE2CVBSQ01fUkVHMzIoMHgwRUMpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE3CVBSQ01fUkVHMzIoMHgwRjApCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE4CVBSQ01fUkVHMzIoMHgwRjQpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE5CVBSQ01fUkVHMzIoMHgwRjgpCi0jZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIwCVBSQ01fUkVHMzIoMHgwRkMpCi0KLS8qIE1QVSAqLwotI2RlZmluZSBDTV9DTEtTRUxfTVBVCQlQUkNNX1JFRzMyKDB4MTQwKQotI2RlZmluZSBDTV9DTEtTVENUUkxfTVBVCVBSQ01fUkVHMzIoMHgxNDgpCi0jZGVmaW5lIFJNX1JTVFNUX01QVQkJUFJDTV9SRUczMigweDE1OCkKLSNkZWZpbmUgUE1fV0tERVBfTVBVCQlQUkNNX1JFRzMyKDB4MUM4KQotI2RlZmluZSBQTV9FVkdFTkNUUkxfTVBVCVBSQ01fUkVHMzIoMHgxRDQpCi0jZGVmaW5lIFBNX0VWRUdFTk9OVElNX01QVQlQUkNNX1JFRzMyKDB4MUQ4KQotI2RlZmluZSBQTV9FVkVHRU5PRkZUSU1fTVBVCVBSQ01fUkVHMzIoMHgxREMpCi0jZGVmaW5lIFBNX1BXU1RDVFJMX01QVQkJUFJDTV9SRUczMigweDFFMCkKLSNkZWZpbmUgUE1fUFdTVFNUX01QVQkJUFJDTV9SRUczMigweDFFNCkKLQotLyogQ09SRSAqLwotI2RlZmluZSBDTV9GQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDApCi0jZGVmaW5lIENNX0ZDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIwNCkKLSNkZWZpbmUgQ01fRkNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjA4KQotI2RlZmluZSBDTV9JQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTApCi0jZGVmaW5lIENNX0lDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIxNCkKLSNkZWZpbmUgQ01fSUNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjE4KQotI2RlZmluZSBDTV9JQ0xLRU40X0NPUkUJCVBSQ01fUkVHMzIoMHgyMUMpCi0jZGVmaW5lIENNX0lETEVTVDFfQ09SRQkJUFJDTV9SRUczMigweDIyMCkKLSNkZWZpbmUgQ01fSURMRVNUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjI0KQotI2RlZmluZSBDTV9JRExFU1QzX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjgpCi0jZGVmaW5lIENNX0lETEVTVDRfQ09SRQkJUFJDTV9SRUczMigweDIyQykKLSNkZWZpbmUgQ01fQVVUT0lETEUxX0NPUkUJUFJDTV9SRUczMigweDIzMCkKLSNkZWZpbmUgQ01fQVVUT0lETEUyX0NPUkUJUFJDTV9SRUczMigweDIzNCkKLSNkZWZpbmUgQ01fQVVUT0lETEUzX0NPUkUJUFJDTV9SRUczMigweDIzOCkKLSNkZWZpbmUgQ01fQVVUT0lETEU0X0NPUkUJUFJDTV9SRUczMigweDIzQykKLSNkZWZpbmUgQ01fQ0xLU0VMMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjQwKQotI2RlZmluZSBDTV9DTEtTRUwyX0NPUkUJCVBSQ01fUkVHMzIoMHgyNDQpCi0jZGVmaW5lIENNX0NMS1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyNDgpCi0jZGVmaW5lIFBNX1dLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTApCi0jZGVmaW5lIFBNX1dLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTQpCi0jZGVmaW5lIFBNX1dLU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjApCi0jZGVmaW5lIFBNX1dLU1QyX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjQpCi0jZGVmaW5lIFBNX1dLREVQX0NPUkUJCVBSQ01fUkVHMzIoMHgyQzgpCi0jZGVmaW5lIFBNX1BXU1RDVFJMX0NPUkUJUFJDTV9SRUczMigweDJFMCkKLSNkZWZpbmUgUE1fUFdTVFNUX0NPUkUJCVBSQ01fUkVHMzIoMHgyRTQpCi0KLS8qIEdGWCAqLwotI2RlZmluZSBDTV9GQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzAwKQotI2RlZmluZSBDTV9JQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzEwKQotI2RlZmluZSBDTV9JRExFU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzIwKQotI2RlZmluZSBDTV9DTEtTRUxfR0ZYCQlQUkNNX1JFRzMyKDB4MzQwKQotI2RlZmluZSBDTV9DTEtTVENUUkxfR0ZYCVBSQ01fUkVHMzIoMHgzNDgpCi0jZGVmaW5lIFJNX1JTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4MzUwKQotI2RlZmluZSBSTV9SU1RTVF9HRlgJCVBSQ01fUkVHMzIoMHgzNTgpCi0jZGVmaW5lIFBNX1dLREVQX0dGWAkJUFJDTV9SRUczMigweDNDOCkKLSNkZWZpbmUgUE1fUFdTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4M0UwKQotI2RlZmluZSBQTV9QV1NUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4M0U0KQotCi0vKiBXQUtFLVVQICovCi0jZGVmaW5lIENNX0ZDTEtFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NDAwKQotI2RlZmluZSBDTV9JQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQxMCkKLSNkZWZpbmUgQ01fSURMRVNUX1dLVVAJCVBSQ01fUkVHMzIoMHg0MjApCi0jZGVmaW5lIENNX0FVVE9JRExFX1dLVVAJUFJDTV9SRUczMigweDQzMCkKLSNkZWZpbmUgQ01fQ0xLU0VMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NDApCi0jZGVmaW5lIFJNX1JTVENUUkxfV0tVUAkJUFJDTV9SRUczMigweDQ1MCkKLSNkZWZpbmUgUk1fUlNUVElNRV9XS1VQCQlQUkNNX1JFRzMyKDB4NDU0KQotI2RlZmluZSBSTV9SU1RTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDU4KQotI2RlZmluZSBQTV9XS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0QTApCi0jZGVmaW5lIFBNX1dLU1RfV0tVUAkJUFJDTV9SRUczMigweDRCMCkKLQotLyogQ0xPQ0tTICovCi0jZGVmaW5lIENNX0NMS0VOX1BMTAkJUFJDTV9SRUczMigweDUwMCkKLSNkZWZpbmUgQ01fSURMRVNUX0NLR0VOCQlQUkNNX1JFRzMyKDB4NTIwKQotI2RlZmluZSBDTV9BVVRPSURMRV9QTEwJCVBSQ01fUkVHMzIoMHg1MzApCi0jZGVmaW5lIENNX0NMS1NFTDFfUExMCQlQUkNNX1JFRzMyKDB4NTQwKQotI2RlZmluZSBDTV9DTEtTRUwyX1BMTAkJUFJDTV9SRUczMigweDU0NCkKLQotLyogRFNQICovCi0jZGVmaW5lIENNX0ZDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MDApCi0jZGVmaW5lIENNX0lDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MTApCi0jZGVmaW5lIENNX0lETEVTVF9EU1AJCVBSQ01fUkVHMzIoMHg4MjApCi0jZGVmaW5lIENNX0FVVE9JRExFX0RTUAkJUFJDTV9SRUczMigweDgzMCkKLSNkZWZpbmUgQ01fQ0xLU0VMX0RTUAkJUFJDTV9SRUczMigweDg0MCkKLSNkZWZpbmUgQ01fQ0xLU1RDVFJMX0RTUAlQUkNNX1JFRzMyKDB4ODQ4KQotI2RlZmluZSBSTV9SU1RDVFJMX0RTUAkJUFJDTV9SRUczMigweDg1MCkKLSNkZWZpbmUgUk1fUlNUU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODU4KQotI2RlZmluZSBQTV9XS0VOX0RTUAkJUFJDTV9SRUczMigweDhBMCkKLSNkZWZpbmUgUE1fV0tERVBfRFNQCQlQUkNNX1JFRzMyKDB4OEM4KQotI2RlZmluZSBQTV9QV1NUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4RTApCi0jZGVmaW5lIFBNX1BXU1RTVF9EU1AJCVBSQ01fUkVHMzIoMHg4RTQpCi0jZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0RTUAlQUkNNX1JFRzMyKDB4OEYwKQotI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9EU1AJUFJDTV9SRUczMigweDhGNCkKLQotLyogSVZBICovCi0jZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0lWQQlQUkNNX1JFRzMyKDB4OEY4KQotI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9JVkEJUFJDTV9SRUczMigweDhGQykKLQotLyogTW9kZW0gb24gMjQzMCAqLwotI2RlZmluZSBDTV9GQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzAwKQotI2RlZmluZSBDTV9JQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzEwKQotI2RlZmluZSBDTV9JRExFU1RfTURNCQlQUkNNX1JFRzMyKDB4QzIwKQotI2RlZmluZSBDTV9BVVRPSURMRV9NRE0JCVBSQ01fUkVHMzIoMHhDMzApCi0jZGVmaW5lIENNX0NMS1NFTF9NRE0JCVBSQ01fUkVHMzIoMHhDNDApCi0jZGVmaW5lIENNX0NMS1NUQ1RSTF9NRE0JUFJDTV9SRUczMigweEM0OCkKLSNkZWZpbmUgUk1fUlNUQ1RSTF9NRE0JCVBSQ01fUkVHMzIoMHhDNTApCi0jZGVmaW5lIFJNX1JTVFNUX01ETQkJUFJDTV9SRUczMigweEM1OCkKLSNkZWZpbmUgUE1fV0tFTl9NRE0JCVBSQ01fUkVHMzIoMHhDQTApCi0jZGVmaW5lIFBNX1dLU1RfTURNCQlQUkNNX1JFRzMyKDB4Q0IwKQotI2RlZmluZSBQTV9XS0RFUF9NRE0JCVBSQ01fUkVHMzIoMHhDQzgpCi0jZGVmaW5lIFBNX1BXU1RDVFJMX01ETQkJUFJDTV9SRUczMigweENFMCkKLSNkZWZpbmUgUE1fUFdTVFNUX01ETQkJUFJDTV9SRUczMigweENFNCkKLQotI2RlZmluZSBPTUFQMjRYWF9MNF9JT19CQVNFCTB4NDgwMDAwMDAKLQotI2RlZmluZSBESVNQX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg1MDAwMCkKLSNkZWZpbmUgRElTUF9SRUczMihvZmZzZXQpCV9fUkVHMzIoRElTUF9CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgT01BUDI0WFhfR1BNQ19CQVNFCShMM18yNFhYX0JBU0UgKyAweGEwMDApCi0jZGVmaW5lIEdQTUNfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKE9NQVAyNFhYX0dQTUNfQkFTRSArIChvZmZzZXQpKQotCi0vKiBGSVhNRTogTW92ZSB0aGVzZSB0byB0aW1lciBjb2RlICovCi0jZGVmaW5lIEdQVDFfQkFTRQkJKDB4NDgwMjgwMDApCi0jZGVmaW5lIEdQVDFfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQVDFfQkFTRSArIChvZmZzZXQpKQotCi0vKiBNaXNjIHN5c2NvbmZpZyAqLwotI2RlZmluZSBESVNQQ19TWVNDT05GSUcJCURJU1BfUkVHMzIoMHg0MTApCi0jZGVmaW5lIFNQSV9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4OTgwMDApCi0jZGVmaW5lIE1DU1BJMV9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSArIDB4MTApCi0jZGVmaW5lIE1DU1BJMl9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSArIDB4MjAwMCArIDB4MTApCi0jZGVmaW5lIE1DU1BJM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFICsgMHhiODAxMCkKLQotI2RlZmluZSBDQU1FUkFfTU1VX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSArIDB4MkMxMCkKLSNkZWZpbmUgQ0FNRVJBX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UgKyAweDI4MkMpCi0jZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFICsgMHg2MDJDKQotI2RlZmluZSBHUE1DX1NZU0NPTkZJRwkJR1BNQ19SRUczMigweDAxMCkKLSNkZWZpbmUgTUFJTEJPWEVTX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDk0MDEwKQotI2RlZmluZSBVQVJUMV9TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4NkEwNTQpCi0jZGVmaW5lIFVBUlQyX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg2QzA1NCkKLSNkZWZpbmUgVUFSVDNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDZFMDU0KQotI2RlZmluZSBTRFJDX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDEwKQotI2RlZmluZSBPTUFQMjRYWF9TTVNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHg4MDAwKQotI2RlZmluZSBTTVNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NNU19CQVNFICsgMHgxMCkKLSNkZWZpbmUgU1NJX1NZU0NPTkZJRwkJX19SRUczMihESVNQX0JBU0UgKyAweDgwMTApCi0KLS8qIHJrdyAtIGdvb2QgY2FubmlkYXRlcyBmb3IgUE1fIHRvIHN0YXJ0IHdoYXQgbm0gd2FzIHRyeWluZyAqLwotI2RlZmluZSBPTUFQMjRYWF9HUFQyCQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4MkEwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg3ODAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUNAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDdBMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ1CQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4N0MwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg3RTAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUNwkJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweDgwMDAwKQotI2RlZmluZSBPTUFQMjRYWF9HUFQ4CQkoT01BUDI0WFhfTDRfSU9fQkFTRSArIDB4ODIwMDApCi0jZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg4NDAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMTAJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg4NjAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMTEJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg4ODAwMCkKLSNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg4QTAwMCkKLQotLyogRklYTUU6IE1vdmUgdGhlc2UgdG8gdGltZXIgY29kZSAqLwotI2RlZmluZSBHUFRJTUVSMV9TWVNDT05GSUcJR1BUMV9SRUczMigweDAxMCkKLSNkZWZpbmUgR1BUSU1FUjJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMiArIDB4MTApCi0jZGVmaW5lIEdQVElNRVIzX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDMgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSNF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ0ICsgMHgxMCkKLSNkZWZpbmUgR1BUSU1FUjVfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNSArIDB4MTApCi0jZGVmaW5lIEdQVElNRVI2X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDYgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSN19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ3ICsgMHgxMCkKLSNkZWZpbmUgR1BUSU1FUjhfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUOCArIDB4MTApCi0jZGVmaW5lIEdQVElNRVI5X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDkgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSMTBfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTAgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSMTFfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTEgKyAweDEwKQotI2RlZmluZSBHUFRJTUVSMTJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTIgKyAweDEwKQotCi0vKiBGSVhNRTogTW92ZSB0aGVzZSB0byBncGlvIGNvZGUgKi8KLSNkZWZpbmUgT01BUDI0WFhfR1BJT19CQVNFCTB4NDgwMTgwMDAKLSNkZWZpbmUgR1BJT1hfQkFTRShYKQkJKE9NQVAyNFhYX0dQSU9fQkFTRSArICgweDIwMDAgKiAoKFgpIC0gMSkpKQotCi0jZGVmaW5lIEdQSU8xX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgxKSArIDB4MTApKQotI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikgKyAweDEwKSkKLSNkZWZpbmUgR1BJTzNfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDMpICsgMHgxMCkpCi0jZGVmaW5lIEdQSU80X1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSg0KSArIDB4MTApKQotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzWCkKLSNkZWZpbmUgR1BJTzVfU1lTQ09ORklHCQlfX1JFRzMyKChPTUFQMjRYWF9HUElPNV9CQVNFICsgMHgxMCkpCi0jZW5kaWYKLQotLyogR1AgVElNRVIgMSAqLwotI2RlZmluZSBHUFRJTUVSMV9USVNUQVQJCUdQVDFfUkVHMzIoMHgwMTQpCi0jZGVmaW5lIEdQVElNRVIxX1RJU1IJCUdQVDFfUkVHMzIoMHgwMTgpCi0jZGVmaW5lIEdQVElNRVIxX1RJRVIJCUdQVDFfUkVHMzIoMHgwMUMpCi0jZGVmaW5lIEdQVElNRVIxX1RXRVIJCUdQVDFfUkVHMzIoMHgwMjApCi0jZGVmaW5lIEdQVElNRVIxX1RDTFIJCUdQVDFfUkVHMzIoMHgwMjQpCi0jZGVmaW5lIEdQVElNRVIxX1RDUlIJCUdQVDFfUkVHMzIoMHgwMjgpCi0jZGVmaW5lIEdQVElNRVIxX1RMRFIJCUdQVDFfUkVHMzIoMHgwMkMpCi0jZGVmaW5lIEdQVElNRVIxX1RUR1IJCUdQVDFfUkVHMzIoMHgwMzApCi0jZGVmaW5lIEdQVElNRVIxX1RXUFMJCUdQVDFfUkVHMzIoMHgwMzQpCi0jZGVmaW5lIEdQVElNRVIxX1RNQVIJCUdQVDFfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQVElNRVIxX1RDQVIxCQlHUFQxX1JFRzMyKDB4MDNDKQotI2RlZmluZSBHUFRJTUVSMV9UU0lDUgkJR1BUMV9SRUczMigweDA0MCkKLSNkZWZpbmUgR1BUSU1FUjFfVENBUjIJCUdQVDFfUkVHMzIoMHgwNDQpCi0KLS8qIHJrdyAtLSBiYXNlIGZpeCB1cCBwbGVhc2UuLi4gKi8KLSNkZWZpbmUgR1BUSU1FUjNfVElTUgkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFICsgMHg3ODAxOCkKLQotLyogU0RSQyAqLwotI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2MCkKLSNkZWZpbmUgU0RSQ19ETExBX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDY0KQotI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2OCkKLSNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDZDKQotI2RlZmluZSBTRFJDX1BPV0VSCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDcwKQotI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFICsgMHgwODQpCi0KLS8qIEdQSU8gMSAqLwotI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCi0jZGVmaW5lIEdQSU8xX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMV9CQVNFICsgKG9mZnNldCkpCi0jZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTEJR1BJTzFfUkVHMzIoMHgwMUMpCi0jZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzEJR1BJTzFfUkVHMzIoMHgwMTgpCi0jZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTIJR1BJTzFfUkVHMzIoMHgwMkMpCi0jZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzIJR1BJTzFfUkVHMzIoMHgwMjgpCi0jZGVmaW5lIEdQSU8xX1dBS0VVUEVOQUJMRQlHUElPMV9SRUczMigweDAyMCkKLSNkZWZpbmUgR1BJTzFfUklTSU5HREVURUNUCUdQSU8xX1JFRzMyKDB4MDQ4KQotI2RlZmluZSBHUElPMV9EQVRBSU4JCUdQSU8xX1JFRzMyKDB4MDM4KQotI2RlZmluZSBHUElPMV9PRQkJR1BJTzFfUkVHMzIoMHgwMzQpCi0jZGVmaW5lIEdQSU8xX0RBVEFPVVQJCUdQSU8xX1JFRzMyKDB4MDNDKQotCi0vKiBHUElPMiAqLwotI2RlZmluZSBHUElPMl9CQVNFCQlHUElPWF9CQVNFKDIpCi0jZGVmaW5lIEdQSU8yX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMl9CQVNFICsgKG9mZnNldCkpCi0jZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTEJR1BJTzJfUkVHMzIoMHgwMUMpCi0jZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzEJR1BJTzJfUkVHMzIoMHgwMTgpCi0jZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTIJR1BJTzJfUkVHMzIoMHgwMkMpCi0jZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzIJR1BJTzJfUkVHMzIoMHgwMjgpCi0jZGVmaW5lIEdQSU8yX1dBS0VVUEVOQUJMRQlHUElPMl9SRUczMigweDAyMCkKLSNkZWZpbmUgR1BJTzJfUklTSU5HREVURUNUCUdQSU8yX1JFRzMyKDB4MDQ4KQotI2RlZmluZSBHUElPMl9EQVRBSU4JCUdQSU8yX1JFRzMyKDB4MDM4KQotI2RlZmluZSBHUElPMl9PRQkJR1BJTzJfUkVHMzIoMHgwMzQpCi0jZGVmaW5lIEdQSU8yX0RBVEFPVVQJCUdQSU8yX1JFRzMyKDB4MDNDKQotI2RlZmluZSBHUElPMl9ERUJPVU5DRU5BQkxFCUdQSU8yX1JFRzMyKDB4MDUwKQotI2RlZmluZSBHUElPMl9ERUJPVU5DSU5HVElNRQlHUElPMl9SRUczMigweDA1NCkKLQotLyogR1BJTyAzICovCi0jZGVmaW5lIEdQSU8zX0JBU0UJCUdQSU9YX0JBU0UoMykKLSNkZWZpbmUgR1BJTzNfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8zX0JBU0UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMQlHUElPM19SRUczMigweDAxQykKLSNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMQlHUElPM19SRUczMigweDAxOCkKLSNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMglHUElPM19SRUczMigweDAyQykKLSNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMglHUElPM19SRUczMigweDAyOCkKLSNkZWZpbmUgR1BJTzNfV0FLRVVQRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDIwKQotI2RlZmluZSBHUElPM19SSVNJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNDgpCi0jZGVmaW5lIEdQSU8zX0ZBTExJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNEMpCi0jZGVmaW5lIEdQSU8zX0RBVEFJTgkJR1BJTzNfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQSU8zX09FCQlHUElPM19SRUczMigweDAzNCkKLSNkZWZpbmUgR1BJTzNfREFUQU9VVAkJR1BJTzNfUkVHMzIoMHgwM0MpCi0jZGVmaW5lIEdQSU8zX0RFQk9VTkNFTkFCTEUJR1BJTzNfUkVHMzIoMHgwNTApCi0jZGVmaW5lIEdQSU8zX0RFQk9VTkNJTkdUSU1FCUdQSU8zX1JFRzMyKDB4MDU0KQotI2RlZmluZSBHUElPM19ERUJPVU5DRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDUwKQotI2RlZmluZSBHUElPM19ERUJPVU5DSU5HVElNRQlHUElPM19SRUczMigweDA1NCkKLQotLyogR1BJTyA0ICovCi0jZGVmaW5lIEdQSU80X0JBU0UJCUdQSU9YX0JBU0UoNCkKLSNkZWZpbmUgR1BJTzRfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU80X0JBU0UgKyAob2Zmc2V0KSkKLSNkZWZpbmUgR1BJTzRfSVJRRU5BQkxFMQlHUElPNF9SRUczMigweDAxQykKLSNkZWZpbmUgR1BJTzRfSVJRU1RBVFVTMQlHUElPNF9SRUczMigweDAxOCkKLSNkZWZpbmUgR1BJTzRfSVJRRU5BQkxFMglHUElPNF9SRUczMigweDAyQykKLSNkZWZpbmUgR1BJTzRfSVJRU1RBVFVTMglHUElPNF9SRUczMigweDAyOCkKLSNkZWZpbmUgR1BJTzRfV0FLRVVQRU5BQkxFCUdQSU80X1JFRzMyKDB4MDIwKQotI2RlZmluZSBHUElPNF9SSVNJTkdERVRFQ1QJR1BJTzRfUkVHMzIoMHgwNDgpCi0jZGVmaW5lIEdQSU80X0ZBTExJTkdERVRFQ1QJR1BJTzRfUkVHMzIoMHgwNEMpCi0jZGVmaW5lIEdQSU80X0RBVEFJTgkJR1BJTzRfUkVHMzIoMHgwMzgpCi0jZGVmaW5lIEdQSU80X09FCQlHUElPNF9SRUczMigweDAzNCkKLSNkZWZpbmUgR1BJTzRfREFUQU9VVAkJR1BJTzRfUkVHMzIoMHgwM0MpCi0jZGVmaW5lIEdQSU80X0RFQk9VTkNFTkFCTEUJR1BJTzRfUkVHMzIoMHgwNTApCi0jZGVmaW5lIEdQSU80X0RFQk9VTkNJTkdUSU1FCUdQSU80X1JFRzMyKDB4MDU0KQotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzWCkKLS8qIEdQSU8gNSAqLwotI2RlZmluZSBHUElPNV9SRUczMihvZmZzZXQpCV9fUkVHMzIoKE9NQVAyNFhYX0dQSU81X0JBU0UgKyAob2Zmc2V0KSkpCi0jZGVmaW5lIEdQSU81X0lSUUVOQUJMRTEJR1BJTzVfUkVHMzIoMHgwMUMpCi0jZGVmaW5lIEdQSU81X0lSUVNUQVRVUzEJR1BJTzVfUkVHMzIoMHgwMTgpCi0jZGVmaW5lIEdQSU81X0lSUUVOQUJMRTIJR1BJTzVfUkVHMzIoMHgwMkMpCi0jZGVmaW5lIEdQSU81X0lSUVNUQVRVUzIJR1BJTzVfUkVHMzIoMHgwMjgpCi0jZGVmaW5lIEdQSU81X1dBS0VVUEVOQUJMRQlHUElPNV9SRUczMigweDAyMCkKLSNkZWZpbmUgR1BJTzVfUklTSU5HREVURUNUCUdQSU81X1JFRzMyKDB4MDQ4KQotI2RlZmluZSBHUElPNV9GQUxMSU5HREVURUNUCUdQSU81X1JFRzMyKDB4MDRDKQotI2RlZmluZSBHUElPNV9EQVRBSU4JCUdQSU81X1JFRzMyKDB4MDM4KQotI2RlZmluZSBHUElPNV9PRQkJR1BJTzVfUkVHMzIoMHgwMzQpCi0jZGVmaW5lIEdQSU81X0RBVEFPVVQJCUdQSU81X1JFRzMyKDB4MDNDKQotI2RlZmluZSBHUElPNV9ERUJPVU5DRU5BQkxFCUdQSU81X1JFRzMyKDB4MDUwKQotI2RlZmluZSBHUElPNV9ERUJPVU5DSU5HVElNRQlHUElPNV9SRUczMigweDA1NCkKLSNlbmRpZgotCi0vKiBJTyBDT05GSUcgKi8KLSNkZWZpbmUgT01BUDI0WFhfQ1RSTF9CQVNFCQkoTDRfMjRYWF9CQVNFKQotI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJCV9fUkVHMzIoT01BUDI0WFhfQ1RSTF9CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMglDT05UUk9MX1JFRzMyKDB4MTA0KQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1lTX1hUQUxPVVQJQ09OVFJPTF9SRUczMigweDEzNCkKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX1JYCUNPTlRST0xfUkVHMzIoMHgwQzgpCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFgJQ09OVFJPTF9SRUczMigweDEwQykKLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNAlDT05UUk9MX1JFRzMyKDB4MDkwKQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q1CQlDT05UUk9MX1JFRzMyKDB4MEI4KQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQkvKiAyNDIwICovCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfTklSUVcwCUNPTlRST0xfUkVHMzIoMHgwQkMpCS8qIDI0MzAgKi8KLSNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NTSTFfRkxBR19UWAlDT05UUk9MX1JFRzMyKDB4MTA4KQkvKiAyNDMwICovCi0KLS8qIENPTlRST0wgKi8KLSNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQotI2RlZmluZSBDT05UUk9MX0RFVkNPTkYxCUNPTlRST0xfUkVHMzIoMHgyRTgpCi0KLS8qIElOVEVSUlVQVCBDT05UUk9MTEVSICovCi0jZGVmaW5lIElOVENfQkFTRQkJKChMNF8yNFhYX0JBU0UpICsgMHhmZTAwMCkKLSNkZWZpbmUgSU5UQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoSU5UQ19CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgSU5UQzFfVV9CQVNFCQlJTlRDX1JFRzMyKDB4MDAwKQotI2RlZmluZSBJTlRDX01JUjAJCUlOVENfUkVHMzIoMHgwODQpCi0jZGVmaW5lIElOVENfTUlSX1NFVDAJCUlOVENfUkVHMzIoMHgwOEMpCi0jZGVmaW5lIElOVENfTUlSX0NMRUFSMAkJSU5UQ19SRUczMigweDA4OCkKLSNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIwCQlJTlRDX1JFRzMyKDB4MDk0KQotI2RlZmluZSBJTlRDX01JUjEJCUlOVENfUkVHMzIoMHgwQTQpCi0jZGVmaW5lIElOVENfTUlSX1NFVDEJCUlOVENfUkVHMzIoMHgwQUMpCi0jZGVmaW5lIElOVENfTUlSX0NMRUFSMQkJSU5UQ19SRUczMigweDBBOCkKLSNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIxCQlJTlRDX1JFRzMyKDB4MEI0KQotI2RlZmluZSBJTlRDX01JUjIJCUlOVENfUkVHMzIoMHgwQzQpCi0jZGVmaW5lIElOVENfTUlSX1NFVDIJCUlOVENfUkVHMzIoMHgwQ0MpCi0jZGVmaW5lIElOVENfTUlSX0NMRUFSMgkJSU5UQ19SRUczMigweDBDOCkKLSNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIyCQlJTlRDX1JFRzMyKDB4MEQ0KQotI2RlZmluZSBJTlRDX1NJUl9JUlEJCUlOVENfUkVHMzIoMHgwNDApCi0jZGVmaW5lIElOVENfQ09OVFJPTAkJSU5UQ19SRUczMigweDA0OCkKLSNkZWZpbmUgSU5UQ19JTFIxMQkJSU5UQ19SRUczMigweDEyQykJLyogUFJDTSBvbiBNUFUgUElDICovCi0jZGVmaW5lIElOVENfSUxSMzAJCUlOVENfUkVHMzIoMHgxNzgpCi0jZGVmaW5lIElOVENfSUxSMzEJCUlOVENfUkVHMzIoMHgxN0MpCi0jZGVmaW5lIElOVENfSUxSMzIJCUlOVENfUkVHMzIoMHgxODApCi0jZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCS8qIEdQSU80IG9uIE1QVSBQSUMgKi8KLSNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCUlOVENfUkVHMzIoMHgwMTApCS8qIEdQVDEgb24gTVBVIFBJQyAqLwotCi0vKiBSQU0gRklSRVdBTEwgKi8KLSNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCi0jZGVmaW5lIFJBTUZXX1JFRzMyKG9mZnNldCkJX19SRUczMihSQU1GV19CQVNFICsgKG9mZnNldCkpCi0KLSNkZWZpbmUgUkFNRldfUkVRSU5GT1BFUk0wCVJBTUZXX1JFRzMyKDB4MDQ4KQotI2RlZmluZSBSQU1GV19SRUFEUEVSTTAJCVJBTUZXX1JFRzMyKDB4MDUwKQotI2RlZmluZSBSQU1GV19XUklURVBFUk0wCVJBTUZXX1JFRzMyKDB4MDU4KQotCi0vKiBHUE1DIENTMSBGUEdBIE9OIFVTRVIgSU5URVJGQUNFIE1PRFVMRSAqLwotLy8jZGVmaW5lIERFQlVHX0JPQVJEX0xFRF9SRUdJU1RFUiAweDA0MDAwMDE0Ci0KLS8qIEdQTUMgQ1MwICovCi0jZGVmaW5lIEdQTUNfQ09ORklHMV8wCQlHUE1DX1JFRzMyKDB4MDYwKQotI2RlZmluZSBHUE1DX0NPTkZJRzJfMAkJR1BNQ19SRUczMigweDA2NCkKLSNkZWZpbmUgR1BNQ19DT05GSUczXzAJCUdQTUNfUkVHMzIoMHgwNjgpCi0jZGVmaW5lIEdQTUNfQ09ORklHNF8wCQlHUE1DX1JFRzMyKDB4MDZDKQotI2RlZmluZSBHUE1DX0NPTkZJRzVfMAkJR1BNQ19SRUczMigweDA3MCkKLSNkZWZpbmUgR1BNQ19DT05GSUc2XzAJCUdQTUNfUkVHMzIoMHgwNzQpCi0jZGVmaW5lIEdQTUNfQ09ORklHN18wCQlHUE1DX1JFRzMyKDB4MDc4KQotCi0vKiBHUE1DIENTMSAqLwotI2RlZmluZSBHUE1DX0NPTkZJRzFfMQkJR1BNQ19SRUczMigweDA5MCkKLSNkZWZpbmUgR1BNQ19DT05GSUcyXzEJCUdQTUNfUkVHMzIoMHgwOTQpCi0jZGVmaW5lIEdQTUNfQ09ORklHM18xCQlHUE1DX1JFRzMyKDB4MDk4KQotI2RlZmluZSBHUE1DX0NPTkZJRzRfMQkJR1BNQ19SRUczMigweDA5QykKLSNkZWZpbmUgR1BNQ19DT05GSUc1XzEJCUdQTUNfUkVHMzIoMHgwYTApCi0jZGVmaW5lIEdQTUNfQ09ORklHNl8xCQlHUE1DX1JFRzMyKDB4MGE0KQotI2RlZmluZSBHUE1DX0NPTkZJRzdfMQkJR1BNQ19SRUczMigweDBhOCkKLQotLyogR1BNQyBDUzMgKi8KLSNkZWZpbmUgR1BNQ19DT05GSUcxXzMJCUdQTUNfUkVHMzIoMHgwRjApCi0jZGVmaW5lIEdQTUNfQ09ORklHMl8zCQlHUE1DX1JFRzMyKDB4MEY0KQotI2RlZmluZSBHUE1DX0NPTkZJRzNfMwkJR1BNQ19SRUczMigweDBGOCkKLSNkZWZpbmUgR1BNQ19DT05GSUc0XzMJCUdQTUNfUkVHMzIoMHgwRkMpCi0jZGVmaW5lIEdQTUNfQ09ORklHNV8zCQlHUE1DX1JFRzMyKDB4MTAwKQotI2RlZmluZSBHUE1DX0NPTkZJRzZfMwkJR1BNQ19SRUczMigweDEwNCkKLSNkZWZpbmUgR1BNQ19DT05GSUc3XzMJCUdQTUNfUkVHMzIoMHgxMDgpCi0KLS8qIERTUyAqLwotI2RlZmluZSBEU1NfQ09OVFJPTAkJRElTUF9SRUczMigweDA0MCkKLSNkZWZpbmUgRElTUENfQ09OVFJPTAkJRElTUF9SRUczMigweDQ0MCkKLSNkZWZpbmUgRElTUENfU1lTU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE0KQotI2RlZmluZSBESVNQQ19JUlFTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTgpCi0jZGVmaW5lIERJU1BDX0lSUUVOQUJMRQkJRElTUF9SRUczMigweDQxQykKLSNkZWZpbmUgRElTUENfQ09ORklHCQlESVNQX1JFRzMyKDB4NDQ0KQotI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMAlESVNQX1JFRzMyKDB4NDRDKQotI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMQlESVNQX1JFRzMyKDB4NDUwKQotI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjAJRElTUF9SRUczMigweDQ1NCkKLSNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTgpCi0jZGVmaW5lIERJU1BDX0xJTkVfTlVNQkVSCURJU1BfUkVHMzIoMHg0NjApCi0jZGVmaW5lIERJU1BDX1RJTUlOR19ICQlESVNQX1JFRzMyKDB4NDY0KQotI2RlZmluZSBESVNQQ19USU1JTkdfVgkJRElTUF9SRUczMigweDQ2OCkKLSNkZWZpbmUgRElTUENfUE9MX0ZSRVEJCURJU1BfUkVHMzIoMHg0NkMpCi0jZGVmaW5lIERJU1BDX0RJVklTT1IJCURJU1BfUkVHMzIoMHg0NzApCi0jZGVmaW5lIERJU1BDX1NJWkVfRElHCQlESVNQX1JFRzMyKDB4NDc4KQotI2RlZmluZSBESVNQQ19TSVpFX0xDRAkJRElTUF9SRUczMigweDQ3QykKLSNkZWZpbmUgRElTUENfR0ZYX0JBMAkJRElTUF9SRUczMigweDQ4MCkKLSNkZWZpbmUgRElTUENfR0ZYX0JBMQkJRElTUF9SRUczMigweDQ4NCkKLSNkZWZpbmUgRElTUENfR0ZYX1BPU0lUSU9OCURJU1BfUkVHMzIoMHg0ODgpCi0jZGVmaW5lIERJU1BDX0dGWF9TSVpFCQlESVNQX1JFRzMyKDB4NDhDKQotI2RlZmluZSBESVNQQ19HRlhfQVRUUklCVVRFUwlESVNQX1JFRzMyKDB4NEEwKQotI2RlZmluZSBESVNQQ19HRlhfRklGT19USFJFU0hPTEQJRElTUF9SRUczMigweDRBNCkKLSNkZWZpbmUgRElTUENfR0ZYX1JPV19JTkMJRElTUF9SRUczMigweDRBQykKLSNkZWZpbmUgRElTUENfR0ZYX1BJWEVMX0lOQwlESVNQX1JFRzMyKDB4NEIwKQotI2RlZmluZSBESVNQQ19HRlhfV0lORE9XX1NLSVAJRElTUF9SRUczMigweDRCNCkKLSNkZWZpbmUgRElTUENfR0ZYX1RBQkxFX0JBCURJU1BfUkVHMzIoMHg0QjgpCi0jZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUxCURJU1BfUkVHMzIoMHg1RDQpCi0jZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUyCURJU1BfUkVHMzIoMHg1RDgpCi0jZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUzCURJU1BfUkVHMzIoMHg1REMpCi0KLS8qIEhTVVNCIFN1c3BlbmQgKi8KLSNkZWZpbmUgSFNVU0JfQ1RSTAkJX19SRUc4KDB4NDgwQUMwMDEpCi0jZGVmaW5lIFVTQk9UR19QT1dFUgkJX19SRUczMigweDQ4MEFDMDAwKQotCi0vKiBIUyBNTUMgKi8KLSNkZWZpbmUgTU1DSFMxX1NZU0NPTkZJRwlfX1JFRzMyKDB4NDgwOUMwMTApCi0jZGVmaW5lIE1NQ0hTMl9TWVNDT05GSUcJX19SRUczMigweDQ4MGI0MDEwKQotCi0jZW5kaWYJLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYKLQotCi0KLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCmluZGV4IDkwZjUzMDUuLmIxMmY0MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCkBAIC0xNywxOSArMTcsMjcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKLSNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKIAogZXh0ZXJuIHZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKIAogdTMyIG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyh2b2lkKQogewotCXJldHVybiBSTV9SU1RTVF9XS1VQICYgMHg3ZjsKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUk1fUlNUU1QpICYgMHg3ZjsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKTsKIAogLyogUmVzZXRzIGNsb2NrIHJhdGVzIGFuZCByZWJvb3RzIHRoZSBzeXN0ZW0uIE9ubHkgY2FsbGVkIGZyb20gc3lzdGVtLmggKi8KIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKQogeworCXUzMiB3a3VwOwogCW9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3QoKTsKLQlSTV9SU1RDVFJMX1dLVVAgfD0gMjsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl3a3VwID0gcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUk1fUlNUQ1RSTCkgfCBPTUFQX1JTVF9EUExMMzsKKwkJcHJtX3dyaXRlX21vZF9yZWcod2t1cCwgV0tVUF9NT0QsIFJNX1JTVENUUkwpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0yNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkMTdhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCkBAIC0wLDAgKzEsMjc5IEBACisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUk1fUkVHQklUU18yNFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTV9SRUdCSVRTXzI0WFhfSAorCisvKgorICogT01BUDI0WFggUG93ZXIvUmVzZXQgTWFuYWdlbWVudCByZWdpc3RlciBiaXRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJwcm0uaCIKKworLyogQml0cyBzaGFyZWQgYmV0d2VlbiByZWdpc3RlcnMgKi8KKworLyogUFJDTV9JUlFTVEFUVVNfTVBVLCBQTV9JUlFTVEFUVVNfRFNQLCBQUkNNX0lSUVNUQVRVU19JVkEgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfVk9MVFRSQU5TX1NUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX1dLVVAyX1NUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX1dLVVAxX1NUCQkJCSgxIDw8IDApCisKKy8qIFBSQ01fSVJRRU5BQkxFX01QVSwgUE1fSVJRRU5BQkxFX0RTUCwgUFJDTV9JUlFFTkFCTEVfSVZBIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAyNFhYX1ZPTFRUUkFOU19FTgkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9XS1VQMl9FTgkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjRYWF9XS1VQMV9FTgkJCQkoMSA8PCAwKQorCisvKiBQTV9XS0RFUF9HRlgsIFBNX1dLREVQX01QVSwgUE1fV0tERVBfRFNQLCBQTV9XS0RFUF9NRE0gc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRU5fTVBVCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMjRYWF9FTl9DT1JFCQkJCSgxIDw8IDApCisKKy8qCisgKiBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0dGWCwgUE1fUFdTVENUUkxfRFNQLCBQTV9QV1NUQ1RSTF9NRE0KKyAqIHNoYXJlZCBiaXRzCisgKi8KKyNkZWZpbmUgT01BUDI0WFhfTUVNT05TVEFURV9TSElGVAkJCTEwCisjZGVmaW5lIE9NQVAyNFhYX01FTU9OU1RBVEVfTUFTSwkJCSgweDMgPDwgMTApCisjZGVmaW5lIE9NQVAyNFhYX01FTVJFVFNUQVRFCQkJCSgxIDw8IDMpCisKKy8qIFBNX1BXU1RDVFJMX0dGWCwgUE1fUFdTVENUUkxfRFNQLCBQTV9QV1NUQ1RSTF9NRE0gc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRk9SQ0VTVEFURQkJCQkoMSA8PCAxOCkKKworLyoKKyAqIFBNX1BXU1RTVF9DT1JFLCBQTV9QV1NUU1RfR0ZYLCBQTV9QV1NUU1RfTVBVLCBQTV9QV1NUU1RfRFNQLAorICogUE1fUFdTVFNUX01ETSBzaGFyZWQgYml0cworICovCisjZGVmaW5lIE9NQVAyNFhYX0NMS0FDVElWSVRZCQkJCSgxIDw8IDE5KQorCisvKiBQTV9QV1NUU1RfTVBVLCBQTV9QV1NUU1RfQ09SRSwgUE1fUFdTVFNUX0RTUCBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMjRYWF9MQVNUU1RBVEVFTlRFUkVEX1NISUZUCQkJNAorI2RlZmluZSBPTUFQMjRYWF9MQVNUU1RBVEVFTlRFUkVEX01BU0sJCQkoMHgzIDw8IDQpCisKKy8qIFBNX1BXU1RTVF9NUFUgYW5kIFBNX1BXU1RTVF9EU1Agc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0MzBfTUVNU1RBVEVTVF9TSElGVAkJCTEwCisjZGVmaW5lIE9NQVAyNDMwX01FTVNUQVRFU1RfTUFTSwkJCSgweDMgPDwgMTApCisKKy8qIFBNX1BXU1RTVF9HRlgsIFBNX1BXU1RTVF9EU1AsIFBNX1BXU1RTVF9NRE0gc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfUE9XRVJTVEFURVNUX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9QT1dFUlNUQVRFU1RfTUFTSwkJCSgweDMgPDwgMCkKKworCisvKiBCaXRzIHNwZWNpZmljIHRvIGVhY2ggcmVnaXN0ZXIgKi8KKworLyogUFJDTV9SRVZJU0lPTiAqLworI2RlZmluZSBPTUFQMjRYWF9SRVZfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMjRYWF9SRVZfTUFTSwkJCQkoMHhmZiA8PCAwKQorCisvKiBQUkNNX1NZU0NPTkZJRyAqLworI2RlZmluZSBPTUFQMjRYWF9BVVRPSURMRQkJCQkoMSA8PCAwKQorCisvKiBQUkNNX0lSUVNUQVRVU19NUFUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMjQzMF9EUExMX1JFQ0FMX1NUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1RSQU5TSVRJT05fU1QJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfRVZHRU5PRkZfU1QJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfRVZHRU5PTl9TVAkJCQkoMSA8PCAzKQorCisvKiBQUkNNX0lSUUVOQUJMRV9NUFUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMjQzMF9EUExMX1JFQ0FMX0VOCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1RSQU5TSVRJT05fRU4JCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfRVZHRU5PRkZfRU4JCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfRVZHRU5PTl9FTgkJCQkoMSA8PCAzKQorCisvKiBQUkNNX1ZPTFRDVFJMICovCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9fRVhUVk9MVAkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDI0WFhfRk9SQ0VfRVhUVk9MVAkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDI0WFhfU0VUT0ZGX0xFVkVMX1NISUZUCQkJMTIKKyNkZWZpbmUgT01BUDI0WFhfU0VUT0ZGX0xFVkVMX01BU0sJCQkoMHgzIDw8IDEyKQorI2RlZmluZSBPTUFQMjRYWF9NRU1SRVRDVFJMCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNFhYX1NFVFJFVF9MRVZFTF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDI0WFhfU0VUUkVUX0xFVkVMX01BU0sJCQkoMHgzIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1ZPTFRfTEVWRUxfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAyNFhYX1ZPTFRfTEVWRUxfTUFTSwkJCSgweDMgPDwgMCkKKworLyogUFJDTV9WT0xUU1QgKi8KKyNkZWZpbmUgT01BUDI0WFhfU1RfVk9MVExFVkVMX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9TVF9WT0xUTEVWRUxfTUFTSwkJCSgweDMgPDwgMCkKKworLyogUFJDTV9DTEtTUkNfQ1RSTCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBSQ01fQ0xLT1VUX0NUUkwgKi8KKyNkZWZpbmUgT01BUDI0MjBfQ0xLT1VUMl9FTl9TSElGVAkJCTE1CisjZGVmaW5lIE9NQVAyNDIwX0NMS09VVDJfRU4JCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAyNDIwX0NMS09VVDJfRElWX1NISUZUCQkJMTEKKyNkZWZpbmUgT01BUDI0MjBfQ0xLT1VUMl9ESVZfTUFTSwkJCSgweDcgPDwgMTEpCisjZGVmaW5lIE9NQVAyNDIwX0NMS09VVDJfU09VUkNFX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMjQyMF9DTEtPVVQyX1NPVVJDRV9NQVNLCQkJKDB4MyA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9DTEtPVVRfRU5fU0hJRlQJCQk3CisjZGVmaW5lIE9NQVAyNFhYX0NMS09VVF9FTgkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMjRYWF9DTEtPVVRfRElWX1NISUZUCQkJMworI2RlZmluZSBPTUFQMjRYWF9DTEtPVVRfRElWX01BU0sJCQkoMHg3IDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX0NMS09VVF9TT1VSQ0VfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0NMS09VVF9TT1VSQ0VfTUFTSwkJCSgweDMgPDwgMCkKKworLyogUFJDTV9DTEtFTVVMX0NUUkwgKi8KKyNkZWZpbmUgT01BUDI0WFhfRU1VTEFUSU9OX0VOX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9FTVVMQVRJT05fRU4JCQkJKDEgPDwgMCkKKworLyogUFJDTV9DTEtDRkdfQ1RSTCAqLworI2RlZmluZSBPTUFQMjRYWF9WQUxJRF9DT05GSUcJCQkJKDEgPDwgMCkKKworLyogUFJDTV9DTEtDRkdfU1RBVFVTICovCisjZGVmaW5lIE9NQVAyNFhYX0NPTkZJR19TVEFUVVMJCQkJKDEgPDwgMCkKKworLyogUFJDTV9WT0xUU0VUVVAgc3BlY2lmaWMgYml0cyAqLworCisvKiBQUkNNX0NMS1NTRVRVUCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBSQ01fUE9MQ1RSTCAqLworI2RlZmluZSBPTUFQMjQyMF9DTEtPVVQyX1BPTAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDI0WFhfQ0xLT1VUX1BPTAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMjRYWF9DTEtSRVFfUE9MCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNDMwX1VTRV9QT1dFUk9LCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNDMwX1BPV0VST0tfUE9MCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0VYVFZPTF9QT0wJCQkJKDEgPDwgMCkKKworLyogUk1fUlNUU1RfTVBVIHNwZWNpZmljIGJpdHMgKi8KKy8qIDI0MzAgY2FsbHMgR0xPQkFMV01QVV9SU1QgIkdMT0JBTFdBUk1fUlNUIiBpbnN0ZWFkICovCisKKy8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAyNDMwX1BNX1dLREVQX01QVV9FTl9NRE0JCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQCQkJKDEgPDwgMikKKworLyogUE1fRVZHRU5DVFJMX01QVSBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX0VWRUdFTk9OVElNX01QVSBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX0VWRUdFTk9GRlRJTV9NUFUgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9QV1NUQ1RSTF9NUFUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMjQzMF9GT1JDRVNUQVRFCQkJCSgxIDw8IDE4KQorCisvKiBQTV9QV1NUU1RfTVBVIHNwZWNpZmljIGJpdHMgKi8KKy8qIElOVFJBTlNJVElPTiwgQ0xLQUNUSVZJVFksIFBPV0VSU1RBVEUsIE1FTVNUQVRFU1QgYXJlIDI0MzAgb25seSAqLworCisvKiBQTV9XS0VOMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fV0tFTjJfQ09SRSBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1dLU1QxX0NPUkUgc3BlY2lmaWMgYml0cyovCisKKy8qIFBNX1dLU1QyX0NPUkUgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS0RFUF9DT1JFIHNwZWNpZmljIGJpdHMqLworI2RlZmluZSBPTUFQMjQzMF9QTV9XS0RFUF9DT1JFX0VOX01ETQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1BNX1dLREVQX0NPUkVfRU5fR0ZYCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tERVBfQ09SRV9FTl9EU1AJCQkoMSA8PCAyKQorCisvKiBQTV9QV1NUQ1RSTF9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfTUVNT1JZQ0hBTkdFCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMjRYWF9NRU0zT05TVEFURV9TSElGVAkJCTE0CisjZGVmaW5lIE9NQVAyNFhYX01FTTNPTlNUQVRFX01BU0sJCQkoMHgzIDw8IDE0KQorI2RlZmluZSBPTUFQMjRYWF9NRU0yT05TVEFURV9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVAyNFhYX01FTTJPTlNUQVRFX01BU0sJCQkoMHgzIDw8IDEyKQorI2RlZmluZSBPTUFQMjRYWF9NRU0xT05TVEFURV9TSElGVAkJCTEwCisjZGVmaW5lIE9NQVAyNFhYX01FTTFPTlNUQVRFX01BU0sJCQkoMHgzIDw8IDEwKQorI2RlZmluZSBPTUFQMjRYWF9NRU0zUkVUU1RBVEUJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfTUVNMlJFVFNUQVRFCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNFhYX01FTTFSRVRTVEFURQkJCQkoMSA8PCAzKQorCisvKiBQTV9QV1NUU1RfQ09SRSBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAyNFhYX01FTTNTVEFURVNUX1NISUZUCQkJMTQKKyNkZWZpbmUgT01BUDI0WFhfTUVNM1NUQVRFU1RfTUFTSwkJCSgweDMgPDwgMTQpCisjZGVmaW5lIE9NQVAyNFhYX01FTTJTVEFURVNUX1NISUZUCQkJMTIKKyNkZWZpbmUgT01BUDI0WFhfTUVNMlNUQVRFU1RfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIE9NQVAyNFhYX01FTTFTVEFURVNUX1NISUZUCQkJMTAKKyNkZWZpbmUgT01BUDI0WFhfTUVNMVNUQVRFU1RfTUFTSwkJCSgweDMgPDwgMTApCisKKy8qIFJNX1JTVENUUkxfR0ZYICovCisjZGVmaW5lIE9NQVAyNFhYX0dGWF9SU1QJCQkJKDEgPDwgMCkKKworLyogUk1fUlNUU1RfR0ZYIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0WFhfR0ZYX1NXX1JTVAkJCQkoMSA8PCA0KQorCisvKiBQTV9QV1NUQ1RSTF9HRlggc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS0RFUF9HRlggc3BlY2lmaWMgYml0cyAqLworLyogMjQzMCBvZnRlbiBjYWxscyBFTl9XQUtFVVAgIkVOX1dLVVAiICovCisKKy8qIFJNX1JTVENUUkxfV0tVUCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFJNX1JTVFRJTUVfV0tVUCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFJNX1JTVFNUX1dLVVAgc3BlY2lmaWMgYml0cyAqLworLyogMjQzMCBjYWxscyBFWFRXTVBVX1JTVCAiRVhUV0FSTV9SU1QiIGFuZCBHTE9CQUxXTVBVX1JTVCAiR0xPQkFMV0FSTV9SU1QiICovCisjZGVmaW5lIE9NQVAyNFhYX0VYVFdNUFVfUlNUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1NFQ1VfV0RfUlNUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX01QVV9XRF9SU1QJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDI0WFhfU0VDVV9WSU9MX1JTVAkJCQkoMSA8PCAzKQorCisvKiBQTV9XS0VOX1dLVVAgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS1NUX1dLVVAgc3BlY2lmaWMgYml0cyAqLworCisvKiBSTV9SU1RDVFJMX0RTUCAqLworI2RlZmluZSBPTUFQMjQyMF9SU1RfSVZBCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNFhYX1JTVDJfRFNQCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX1JTVDFfRFNQCQkJCSgxIDw8IDApCisKKy8qIFJNX1JTVFNUX0RTUCBzcGVjaWZpYyBiaXRzICovCisvKiAyNDMwIGNhbGxzIEdMT0JBTFdNUFVfUlNUICJHTE9CQUxXQVJNX1JTVCIgKi8KKyNkZWZpbmUgT01BUDI0MjBfSVZBX1NXX1JTVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMjRYWF9EU1BfU1dfUlNUMgkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjRYWF9EU1BfU1dfUlNUMQkJCQkoMSA8PCA0KQorCisvKiBQTV9XS0RFUF9EU1Agc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9QV1NUQ1RSTF9EU1Agc3BlY2lmaWMgYml0cyAqLworLyogMjQzMCBvbmx5OiBNRU1PTlNUQVRFLCBNRU1SRVRTVEFURSAqLworI2RlZmluZSBPTUFQMjQyMF9NRU1JT05TVEFURV9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVAyNDIwX01FTUlPTlNUQVRFX01BU0sJCQkoMHgzIDw8IDEyKQorI2RlZmluZSBPTUFQMjQyMF9NRU1JUkVUU1RBVEUJCQkJKDEgPDwgNCkKKworLyogUE1fUFdTVFNUX0RTUCBzcGVjaWZpYyBiaXRzICovCisvKiBNRU1TVEFURVNUIGlzIDI0MzAgb25seSAqLworI2RlZmluZSBPTUFQMjQyMF9NRU1JU1RBVEVTVF9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVAyNDIwX01FTUlTVEFURVNUX01BU0sJCQkoMHgzIDw8IDEyKQorCisvKiBQUkNNX0lSUVNUQVRVU19EU1Agc3BlY2lmaWMgYml0cyAqLworCisvKiBQUkNNX0lSUUVOQUJMRV9EU1Agc3BlY2lmaWMgYml0cyAqLworCisvKiBSTV9SU1RDVFJMX01ETSAqLworLyogMjQzMCBvbmx5ICovCisjZGVmaW5lIE9NQVAyNDMwX1BXUk9OMV9NRE0JCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDI0MzBfUlNUMV9NRE0JCQkJKDEgPDwgMCkKKworLyogUk1fUlNUU1RfTURNIHNwZWNpZmljIGJpdHMgKi8KKy8qIDI0MzAgb25seSAqLworI2RlZmluZSBPTUFQMjQzMF9NRE1fU0VDVV9WSU9MCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNDMwX01ETV9TV19QV1JPTjEJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0MzBfTURNX1NXX1JTVDEJCQkJKDEgPDwgNCkKKworLyogUE1fV0tFTl9NRE0gKi8KKy8qIDI0MzAgb25seSAqLworI2RlZmluZSBPTUFQMjQzMF9QTV9XS0VOX01ETV9FTl9NRE0JCQkoMSA8PCAwKQorCisvKiBQTV9XS1NUX01ETSBzcGVjaWZpYyBiaXRzICovCisvKiAyNDMwIG9ubHkgKi8KKworLyogUE1fV0tERVBfTURNIHNwZWNpZmljIGJpdHMgKi8KKy8qIDI0MzAgb25seSAqLworCisvKiBQTV9QV1NUQ1RSTF9NRE0gc3BlY2lmaWMgYml0cyAqLworLyogMjQzMCBvbmx5ICovCisjZGVmaW5lIE9NQVAyNDMwX0tJTExET01BSU5XS1VQCQkJCSgxIDw8IDE5KQorCisvKiBQTV9QV1NUU1RfTURNIHNwZWNpZmljIGJpdHMgKi8KKy8qIDI0MzAgb25seSAqLworCisvKiBQUkNNX0lSUVNUQVRVU19JVkEgKi8KKy8qIDI0MjAgb25seSAqLworCisvKiBQUkNNX0lSUUVOQUJMRV9JVkEgKi8KKy8qIDI0MjAgb25seSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2ODZiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oCkBAIC0wLDAgKzEsNTgyIEBACisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUk1fUkVHQklUU18zNFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTV9SRUdCSVRTXzM0WFhfSAorCisvKgorICogT01BUDM0MzAgUG93ZXIvUmVzZXQgTWFuYWdlbWVudCByZWdpc3RlciBiaXRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAicHJtLmgiCisKKy8qIFNoYXJlZCByZWdpc3RlciBiaXRzICovCisKKy8qIFBSTV9WQ19DTURfVkFMXzAsIFBSTV9WQ19DTURfVkFMXzEgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfT05fU0hJRlQJCQkJMjQKKyNkZWZpbmUgT01BUDM0MzBfT05fTUFTSwkJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgT01BUDM0MzBfT05MUF9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9PTkxQX01BU0sJCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX1JFVF9TSElGVAkJCQk4CisjZGVmaW5lIE9NQVAzNDMwX1JFVF9NQVNLCQkJCSgweGZmIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX09GRl9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX09GRl9NQVNLCQkJCSgweGZmIDw8IDApCisKKy8qIFBSTV9WUDFfQ09ORklHLCBQUk1fVlAyX0NPTkZJRyBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9FUlJPUk9GRlNFVF9TSElGVAkJCTI0CisjZGVmaW5lIE9NQVAzNDMwX0VSUk9ST0ZGU0VUX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgT01BUDM0MzBfRVJST1JHQUlOX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDM0MzBfRVJST1JHQUlOX01BU0sJCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX0lOSVRWT0xUQUdFX1NISUZUCQkJOAorI2RlZmluZSBPTUFQMzQzMF9JTklUVk9MVEFHRV9NQVNLCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfVElNRU9VVEVOCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0lOSVRWREQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfRk9SQ0VVUERBVEUJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfVlBFTkFCTEUJCQkJKDEgPDwgMCkKKworLyogUFJNX1ZQMV9WU1RFUE1JTiwgUFJNX1ZQMl9WU1RFUE1JTiBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9TTVBTV0FJVFRJTUVNSU5fU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX1NNUFNXQUlUVElNRU1JTl9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9WU1RFUE1JTl9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1ZTVEVQTUlOX01BU0sJCQkJKDB4ZmYgPDwgMCkKKworLyogUFJNX1ZQMV9WU1RFUE1BWCwgUFJNX1ZQMl9WU1RFUE1BWCBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9TTVBTV0FJVFRJTUVNQVhfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwX1NNUFNXQUlUVElNRU1BWF9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9WU1RFUE1BWF9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1ZTVEVQTUFYX01BU0sJCQkJKDB4ZmYgPDwgMCkKKworLyogUFJNX1ZQMV9WTElNSVRUTywgUFJNX1ZQMl9WTElNSVRUTyBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9WRERNQVhfU0hJRlQJCQkJMjQKKyNkZWZpbmUgT01BUDM0MzBfVkRETUFYX01BU0sJCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIE9NQVAzNDMwX1ZERE1JTl9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9WRERNSU5fTUFTSwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfVElNRU9VVF9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1RJTUVPVVRfTUFTSwkJCQkoMHhmZmZmIDw8IDApCisKKy8qIFBSTV9WUDFfVk9MVEFHRSwgUFJNX1ZQMl9WT0xUQUdFIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1ZQVk9MVEFHRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfVlBWT0xUQUdFX01BU0sJCQkJKDB4ZmYgPDwgMCkKKworLyogUFJNX1ZQMV9TVEFUVVMsIFBSTV9WUDJfU1RBVFVTIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1ZQSU5JRExFCQkJCSgxIDw8IDApCisKKy8qIFBNX1dLREVQX0lWQTIsIFBNX1dLREVQX01QVSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9FTl9QRVIJCQkJCSgxIDw8IDcpCisKKy8qIFBNX1BXU1RDVFJMX0lWQTIsIFBNX1BXU1RDVFJMX01QVSwgUE1fUFdTVENUUkxfQ09SRSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9NRU1PUllDSEFOR0UJCQkJKDEgPDwgMykKKworLyogUE1fUFdTVFNUX0lWQTIsIFBNX1BXU1RTVF9DT1JFIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0xPR0lDU1RBVEVTVAkJCQkoMSA8PCAyKQorCisvKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfTEFTVExPR0lDU1RBVEVFTlRFUkVECQkJCSgxIDw8IDIpCisKKy8qCisgKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX01QVSwgUE1fUFJFUFdTVFNUX0NPUkUsCisgKiBQTV9QUkVQV1NUU1RfR0ZYLCBQTV9QUkVQV1NUU1RfRFNTLCBQTV9QUkVQV1NUU1RfQ0FNLAorICogUE1fUFJFUFdTVFNUX1BFUiwgUE1fUFJFUFdTVFNUX05FT04gc2hhcmVkIGJpdHMKKyAqLworI2RlZmluZSBPTUFQMzQzMF9MQVNUUE9XRVJTVEFURUVOVEVSRURfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0xBU1RQT1dFUlNUQVRFRU5URVJFRF9NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBQUk1fSVJRU1RBVFVTX0lWQTIsIFBSTV9JUlFTVEFUVVNfTVBVIHNoYXJlZCBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1dLVVBfU1QJCQkJKDEgPDwgMCkKKworLyogUFJNX0lSUUVOQUJMRV9JVkEyLCBQUk1fSVJRRU5BQkxFX01QVSBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9XS1VQX0VOCQkJCQkoMSA8PCAwKQorCisvKiBQTV9NUFVHUlBTRUwxX0NPUkUsIFBNX0lWQTJHUlBTRUwxX0NPUkUgc2hhcmVkIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX01NQzIJCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9NTUMxCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfTUNTUEk0CQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfTUNTUEkzCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfTUNTUEkyCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfTUNTUEkxCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfSTJDMwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0kyQzIJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9JMkMxCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfVUFSVDIJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9VQVJUMQkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDExCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfR1BUMTAJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDUJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDEJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0hTT1RHVVNCCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0QyRAkJCQkoMSA8PCAzKQorCisvKgorICogUE1fUFdTVENUUkxfR0ZYLCBQTV9QV1NUQ1RSTF9EU1MsIFBNX1BXU1RDVFJMX0NBTSwKKyAqIFBNX1BXU1RDVFJMX1BFUiBzaGFyZWQgYml0cworICovCisjZGVmaW5lIE9NQVAzNDMwX01FTU9OU1RBVEVfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9NRU1PTlNUQVRFX01BU0sJCQkoMHgzIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9NRU1SRVRTVEFURQkJCQkoMSA8PCA4KQorCisvKiBQTV9NUFVHUlBTRUxfUEVSLCBQTV9JVkEyR1JQU0VMX1BFUiBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfR1BJTzYJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9HUElPNQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQSU80CQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfR1BJTzMJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9HUElPMgkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX1VBUlQzCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfR1BUOQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDgJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDcJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDYJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDUJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDMJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDIJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX01DQlNQNAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfTUNCU1AzCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDIJCQkJKDEgPDwgMCkKKworLyogUE1fTVBVR1JQU0VMX1dLVVAsIFBNX0lWQTJHUlBTRUxfV0tVUCBzaGFyZWQgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfSU8JCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX1NSMgkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfU1IxCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9HUElPMQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfR1BUMTIJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0dQVDEJCQkJKDEgPDwgMCkKKworLyogQml0cyBzcGVjaWZpYyB0byBlYWNoIHJlZ2lzdGVyICovCisKKy8qIFJNX1JTVENUUkxfSVZBMiAqLworI2RlZmluZSBPTUFQMzQzMF9SU1QzX0lWQTIJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfUlNUMl9JVkEyCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX1JTVDFfSVZBMgkJCQkoMSA8PCAwKQorCisvKiBSTV9SU1RTVF9JVkEyIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfRU1VTEFUSU9OX1ZTRVFfUlNUCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzNDMwX0VNVUxBVElPTl9WSFdBX1JTVAkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQMzQzMF9FTVVMQVRJT05fSVZBMl9SU1QJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDM0MzBfSVZBMl9TV19SU1QzCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9JVkEyX1NXX1JTVDIJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBfSVZBMl9TV19SU1QxCQkJCSgxIDw8IDgpCisKKy8qIFBNX1dLREVQX0lWQTIgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9QV1NUQ1RSTF9JVkEyIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfTDJGTEFUTUVNT05TVEFURV9TSElGVAkJCTIyCisjZGVmaW5lIE9NQVAzNDMwX0wyRkxBVE1FTU9OU1RBVEVfTUFTSwkJCSgweDMgPDwgMjIpCisjZGVmaW5lIE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUT05TVEFURV9TSElGVAkJMjAKKyNkZWZpbmUgT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRPTlNUQVRFX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lIE9NQVAzNDMwX0wxRkxBVE1FTU9OU1RBVEVfU0hJRlQJCQkxOAorI2RlZmluZSBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0sJCQkoMHgzIDw8IDE4KQorI2RlZmluZSBPTUFQMzQzMF9TSEFSRURMMUNBQ0hFRkxBVE9OU1RBVEVfU0hJRlQJCTE2CisjZGVmaW5lIE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUT05TVEFURV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVFJFVFNUQVRFCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfTDFGTEFUTUVNUkVUU1RBVEUJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9TSEFSRURMMUNBQ0hFRkxBVFJFVFNUQVRFCQkoMSA8PCA4KQorCisvKiBQTV9QV1NUU1RfSVZBMiBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0wyRkxBVE1FTVNUQVRFU1RfU0hJRlQJCQkxMAorI2RlZmluZSBPTUFQMzQzMF9MMkZMQVRNRU1TVEFURVNUX01BU0sJCQkoMHgzIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVFNUQVRFU1RfU0hJRlQJCTgKKyNkZWZpbmUgT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRTVEFURVNUX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfTDFGTEFUTUVNU1RBVEVTVF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfTDFGTEFUTUVNU1RBVEVTVF9NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9TSEFSRURMMUNBQ0hFRkxBVFNUQVRFU1RfU0hJRlQJCTQKKyNkZWZpbmUgT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRTVEFURVNUX01BU0sJCSgweDMgPDwgNCkKKworLyogUE1fUFJFUFdTVFNUX0lWQTIgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9MQVNUTDJGTEFUTUVNU1RBVEVFTlRFUkVEX1NISUZUCQkxMAorI2RlZmluZSBPTUFQMzQzMF9MQVNUTDJGTEFUTUVNU1RBVEVFTlRFUkVEX01BU0sJCQkoMHgzIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9MQVNUU0hBUkVETDJDQUNIRUZMQVRTVEFURUVOVEVSRURfU0hJRlQJOAorI2RlZmluZSBPTUFQMzQzMF9MQVNUU0hBUkVETDJDQUNIRUZMQVRTVEFURUVOVEVSRURfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9MQVNUTDFGTEFUTUVNU1RBVEVFTlRFUkVEX1NISUZUCQk2CisjZGVmaW5lIE9NQVAzNDMwX0xBU1RMMUZMQVRNRU1TVEFURUVOVEVSRURfTUFTSwkJCSgweDMgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfTEFTVFNIQVJFREwxQ0FDSEVGTEFUU1RBVEVFTlRFUkVEX1NISUZUCTQKKyNkZWZpbmUgT01BUDM0MzBfTEFTVFNIQVJFREwxQ0FDSEVGTEFUU1RBVEVFTlRFUkVEX01BU0sJCSgweDMgPDwgNCkKKworLyogUFJNX0lSUVNUQVRVU19JVkEyIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUVNUQVRVU19JVkEyX0lWQTJfRFBMTF9TVAkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9GT1JDRVdLVVBfU1QJCQkJKDEgPDwgMSkKKworLyogUFJNX0lSUUVOQUJMRV9JVkEyIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9JVkEyX0lWQTJfRFBMTF9SRUNBTF9FTgkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfRk9SQ0VXS1VQX0VOCQkJCQkoMSA8PCAxKQorCisvKiBQUk1fUkVWSVNJT04gc3BlY2lmaWMgYml0cyAqLworCisvKiBQUk1fU1lTQ09ORklHIHNwZWNpZmljIGJpdHMgKi8KKworLyogUFJNX0lSUVNUQVRVU19NUFUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfU1RfU0hJRlQJCTI1CisjZGVmaW5lIE9NQVAzNDMwRVMyX1NORF9QRVJJUEhfRFBMTF9TVAkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQMzQzMF9WQ19USU1FT1VURVJSX1NUCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVAzNDMwX1ZDX1JBRVJSX1NUCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMzQzMF9WQ19TQUVSUl9TVAkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDM0MzBfVlAyX1RSQU5YRE9ORV9TVAkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQMzQzMF9WUDJfRVFWQUxVRV9TVAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDM0MzBfVlAyX05PU01QU0FDS19TVAkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQMzQzMF9WUDJfTUFYVkREX1NUCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMzQzMF9WUDJfTUlOVkREX1NUCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9WUDJfT1BQQ0hBTkdFRE9ORV9TVAkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9WUDFfVFJBTlhET05FX1NUCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMV9FUVZBTFVFX1NUCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQMzQzMF9WUDFfTk9TTVBTQUNLX1NUCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMV9NQVhWRERfU1QJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMV9NSU5WRERfU1QJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMV9PUFBDSEFOR0VET05FX1NUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAzNDMwX0lPX1NUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRU1RBVFVTX01QVV9JVkEyX0RQTExfU1QJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfTVBVX0lWQTJfRFBMTF9TVF9TSElGVAk4CisjZGVmaW5lIE9NQVAzNDMwX01QVV9EUExMX1NUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX01QVV9EUExMX1NUX1NISUZUCQkJNworI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9TVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9TVF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX1NUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9TVF9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDM0MzBfVFJBTlNJVElPTl9TVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9FVkdFTk9GRl9TVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9FVkdFTk9OX1NUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0ZTX1VTQl9XS1VQX1NUCQkJCSgxIDw8IDEpCisKKy8qIFBSTV9JUlFFTkFCTEVfTVBVIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfU05EX1BFUklQSF9EUExMX1JFQ0FMX0VOX1NISUZUCQkyNQorI2RlZmluZSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfUkVDQUxfRU4JCQkoMSA8PCAyNSkKKyNkZWZpbmUgT01BUDM0MzBfVkNfVElNRU9VVEVSUl9FTgkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDM0MzBfVkNfUkFFUlJfRU4JCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMzQzMF9WQ19TQUVSUl9FTgkJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMl9UUkFOWERPTkVfRU4JCQkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMl9FUVZBTFVFX0VOCQkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDM0MzBfVlAyX05PU01QU0FDS19FTgkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDM0MzBfVlAyX01BWFZERF9FTgkJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMl9NSU5WRERfRU4JCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9WUDJfT1BQQ0hBTkdFRE9ORV9FTgkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfVlAxX1RSQU5YRE9ORV9FTgkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDM0MzBfVlAxX0VRVkFMVUVfRU4JCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQMzQzMF9WUDFfTk9TTVBTQUNLX0VOCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9WUDFfTUFYVkREX0VOCQkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDM0MzBfVlAxX01JTlZERF9FTgkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzNDMwX1ZQMV9PUFBDSEFOR0VET05FX0VOCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9JT19FTgkJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9JUlFFTkFCTEVfTVBVX0lWQTJfRFBMTF9SRUNBTF9FTgkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9NUFVfSVZBMl9EUExMX1JFQ0FMX0VOX1NISUZUCTgKKyNkZWZpbmUgT01BUDM0MzBfTVBVX0RQTExfUkVDQUxfRU4JCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfTVBVX0RQTExfUkVDQUxfRU5fU0hJRlQJCQk3CisjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX1JFQ0FMX0VOCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX1JFQ0FMX0VOX1NISUZUCQkJNgorI2RlZmluZSBPTUFQMzQzMF9DT1JFX0RQTExfUkVDQUxfRU4JCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfQ09SRV9EUExMX1JFQ0FMX0VOX1NISUZUCQkJNQorI2RlZmluZSBPTUFQMzQzMF9UUkFOU0lUSU9OX0VOCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9FVkdFTk9GRl9FTgkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfRVZHRU5PTl9FTgkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfRlNfVVNCX1dLVVBfRU4JCQkJCSgxIDw8IDEpCisKKy8qIFJNX1JTVFNUX01QVSBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX0VNVUxBVElPTl9NUFVfUlNUCQkJKDEgPDwgMTEpCisKKy8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1MJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMgkJCSgxIDw8IDIpCisKKy8qIFBNX0VWR0VOQ1RSTF9NUFUgKi8KKyNkZWZpbmUgT01BUDM0MzBfT0ZGTE9BRE1PREVfU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAzNDMwX09GRkxPQURNT0RFX01BU0sJCQkoMHgzIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX09OTE9BRE1PREVfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVAzNDMwX09OTE9BRE1PREVfTUFTSwkJCSgweDMgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfRU5BQkxFCQkJCQkoMSA8PCAwKQorCisvKiBQTV9FVkdFTk9OVElNX01QVSAqLworI2RlZmluZSBPTUFQMzQzMF9PTlRJTUVWQUxfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX09OVElNRVZBTF9NQVNLCQkJCSgweGZmZmZmZmZmIDw8IDApCisKKy8qIFBNX0VWR0VOT0ZGVElNX01QVSAqLworI2RlZmluZSBPTUFQMzQzMF9PRkZUSU1FVkFMX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9PRkZUSU1FVkFMX01BU0sJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBQTV9QV1NUQ1RSTF9NUFUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9MMkNBQ0hFT05TVEFURV9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX0wyQ0FDSEVPTlNUQVRFX01BU0sJCQkoMHgzIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9MMkNBQ0hFUkVUU1RBVEUJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9MT0dJQ0wxQ0FDSEVSRVRTVEFURQkJCSgxIDw8IDIpCisKKy8qIFBNX1BXU1RTVF9NUFUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9MMkNBQ0hFU1RBVEVTVF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfTDJDQUNIRVNUQVRFU1RfTUFTSwkJCSgweDMgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfTE9HSUNMMUNBQ0hFU1RBVEVTVAkJCSgxIDw8IDIpCisKKy8qIFBNX1BSRVBXU1RTVF9NUFUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9MQVNUTDJDQUNIRVNUQVRFRU5URVJFRF9TSElGVAkJNgorI2RlZmluZSBPTUFQMzQzMF9MQVNUTDJDQUNIRVNUQVRFRU5URVJFRF9NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX0xBU1RMT0dJQ0wxQ0FDSEVTVEFURUVOVEVSRUQJCSgxIDw8IDIpCisKKy8qIFJNX1JTVENUUkxfQ09SRSAqLworI2RlZmluZSBPTUFQMzQzMF9STV9SU1RDVFJMX0NPUkVfTU9ERU1fU1dfUlNUUFdST04JCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX1JNX1JTVENUUkxfQ09SRV9NT0RFTV9TV19SU1QJCQkoMSA8PCAwKQorCisvKiBSTV9SU1RTVF9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfTU9ERU1fU0VDVVJJVFlfVklPTF9SU1QJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9STV9SU1RTVF9DT1JFX01PREVNX1NXX1JTVFBXUk9OCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwX1JNX1JTVFNUX0NPUkVfTU9ERU1fU1dfUlNUCQkoMSA8PCA4KQorCisvKiBQTV9XS0VOMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fTVBVR1JQU0VMMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0ZTSE9TVFVTQgkJCSgxIDw8IDUpCisKKy8qIFBNX0lWQTJHUlBTRUwxX0NPUkUgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS1NUMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fUFdTVENUUkxfQ09SRSBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX01FTTJPTlNUQVRFX1NISUZUCQkJMTgKKyNkZWZpbmUgT01BUDM0MzBfTUVNMk9OU1RBVEVfTUFTSwkJCSgweDMgPDwgMTgpCisjZGVmaW5lIE9NQVAzNDMwX01FTTFPTlNUQVRFX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDM0MzBfTUVNMU9OU1RBVEVfTUFTSwkJCSgweDMgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX01FTTJSRVRTVEFURQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9NRU0xUkVUU1RBVEUJCQkJKDEgPDwgOCkKKworLyogUE1fUFdTVFNUX0NPUkUgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9NRU0yU1RBVEVTVF9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfTUVNMlNUQVRFU1RfTUFTSwkJCSgweDMgPDwgNikKKyNkZWZpbmUgT01BUDM0MzBfTUVNMVNUQVRFU1RfU0hJRlQJCQk0CisjZGVmaW5lIE9NQVAzNDMwX01FTTFTVEFURVNUX01BU0sJCQkoMHgzIDw8IDQpCisKKy8qIFBNX1BSRVBXU1RTVF9DT1JFIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfTEFTVE1FTTJTVEFURUVOVEVSRURfU0hJRlQJCTYKKyNkZWZpbmUgT01BUDM0MzBfTEFTVE1FTTJTVEFURUVOVEVSRURfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9MQVNUTUVNMVNUQVRFRU5URVJFRF9TSElGVAkJNAorI2RlZmluZSBPTUFQMzQzMF9MQVNUTUVNMVNUQVRFRU5URVJFRF9NQVNLCQkoMHgzIDw8IDQpCisKKy8qIFJNX1JTVFNUX0dGWCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1dLREVQX0dGWCBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX0dGWF9FTl9JVkEyCQkJKDEgPDwgMikKKworLyogUE1fUFdTVENUUkxfR0ZYIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fUFdTVFNUX0dGWCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1BSRVBXU1RTVF9HRlggc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS0VOX1dLVVAgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9FTl9JTwkJCQkJKDEgPDwgOCkKKworLyogUE1fTVBVR1JQU0VMX1dLVVAgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9JVkEyR1JQU0VMX1dLVVAgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS1NUX1dLVVAgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9TVF9JTwkJCQkJKDEgPDwgOCkKKworLyogUFJNX0NMS1NFTCAqLworI2RlZmluZSBPTUFQMzQzMF9TWVNfQ0xLSU5fU0VMX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9TWVNfQ0xLSU5fU0VMX01BU0sJCQkoMHg3IDw8IDApCisKKy8qIFBSTV9DTEtPVVRfQ1RSTCAqLworI2RlZmluZSBPTUFQMzQzMF9DTEtPVVRfRU4JCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfQ0xLT1VUX0VOX1NISUZUCQkJNworCisvKiBSTV9SU1RTVF9EU1Mgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS0VOX0RTUyAqLworI2RlZmluZSBPTUFQMzQzMF9QTV9XS0VOX0RTU19FTl9EU1MJCQkoMSA8PCAwKQorCisvKiBQTV9XS0RFUF9EU1Mgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9EU1NfRU5fSVZBMgkJCSgxIDw8IDIpCisKKy8qIFBNX1BXU1RDVFJMX0RTUyBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1BXU1RTVF9EU1Mgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9QUkVQV1NUU1RfRFNTIHNwZWNpZmljIGJpdHMgKi8KKworLyogUk1fUlNUU1RfQ0FNIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fV0tERVBfQ0FNIHNwZWNpZmljIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM0MzBfUE1fV0tERVBfQ0FNX0VOX0lWQTIJCQkoMSA8PCAyKQorCisvKiBQTV9QV1NUQ1RSTF9DQU0gc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9QV1NUU1RfQ0FNIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fUFJFUFdTVFNUX0NBTSBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1BXU1RDVFJMX1VTQkhPU1Qgc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVAkJKDEgPDwgNCkKKworLyogUk1fUlNUU1RfUEVSIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fV0tFTl9QRVIgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9NUFVHUlBTRUxfUEVSIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fSVZBMkdSUFNFTF9QRVIgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS1NUX1BFUiBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1dLREVQX1BFUiBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX1BFUl9FTl9JVkEyCQkJKDEgPDwgMikKKworLyogUE1fUFdTVENUUkxfUEVSIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fUFdTVFNUX1BFUiBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1BSRVBXU1RTVF9QRVIgc3BlY2lmaWMgYml0cyAqLworCisvKiBSTV9SU1RTVF9FTVUgc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9QV1NUU1RfRU1VIHNwZWNpZmljIGJpdHMgKi8KKworLyogUFJNX1ZDX1NNUFNfU0EgKi8KKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX1NNUFNfU0FfU0ExX1NISUZUCQkxNgorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfU01QU19TQV9TQTFfTUFTSwkJKDB4N2YgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19TTVBTX1NBX1NBMF9TSElGVAkJMAorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfU01QU19TQV9TQTBfTUFTSwkJKDB4N2YgPDwgMCkKKworLyogUFJNX1ZDX1NNUFNfVk9MX1JBICovCisjZGVmaW5lIE9NQVAzNDMwX1ZPTFJBMV9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9WT0xSQTFfTUFTSwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfVk9MUkEwX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDM0MzBfVk9MUkEwX01BU0sJCQkJKDB4ZmYgPDwgMCkKKworLyogUFJNX1ZDX1NNUFNfQ01EX1JBICovCisjZGVmaW5lIE9NQVAzNDMwX0NNRFJBMV9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9DTURSQTFfTUFTSwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfQ01EUkEwX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ01EUkEwX01BU0sJCQkJKDB4ZmYgPDwgMCkKKworLyogUFJNX1ZDX0NNRF9WQUxfMCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBSTV9WQ19DTURfVkFMXzEgc3BlY2lmaWMgYml0cyAqLworCisvKiBQUk1fVkNfQ0hfQ09ORiAqLworI2RlZmluZSBPTUFQMzQzMF9DTUQxCQkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDM0MzBfUkFDRU4xCQkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDM0MzBfUkFDMQkJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVAzNDMwX1JBVjEJCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQ0hfQ09ORl9TQTEJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfQ01EMAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfUkFDRU4wCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9SQUMwCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9SQVYwCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQ0hfQ09ORl9TQTAJCQkoMSA8PCAwKQorCisvKiBQUk1fVkNfSTJDX0NGRyAqLworI2RlZmluZSBPTUFQMzQzMF9IU01BU1RFUgkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9TUkVOCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9IU0VOCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9NQ09ERV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX01DT0RFX01BU0sJCQkJKDB4NyA8PCAwKQorCisvKiBQUk1fVkNfQllQQVNTX1ZBTCAqLworI2RlZmluZSBPTUFQMzQzMF9WQUxJRAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVAzNDMwX0RBVEFfU0hJRlQJCQkJMTYKKyNkZWZpbmUgT01BUDM0MzBfREFUQV9NQVNLCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9SRUdBRERSX1NISUZUCQkJCTgKKyNkZWZpbmUgT01BUDM0MzBfUkVHQUREUl9NQVNLCQkJCSgweGZmIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1NMQVZFQUREUl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfU0xBVkVBRERSX01BU0sJCQkJKDB4N2YgPDwgMCkKKworLyogUFJNX1JTVENUUkwgKi8KKyNkZWZpbmUgT01BUDM0MzBfUlNUX0RQTEwzCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1JTVF9HUwkJCQkJKDEgPDwgMSkKKworLyogUFJNX1JTVFRJTUUgKi8KKyNkZWZpbmUgT01BUDM0MzBfUlNUVElNRTJfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQMzQzMF9SU1RUSU1FMl9NQVNLCQkJCSgweDFmIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1JTVFRJTUUxX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDM0MzBfUlNUVElNRTFfTUFTSwkJCQkoMHhmZiA8PCAwKQorCisvKiBQUk1fUlNUU1QgKi8KKyNkZWZpbmUgT01BUDM0MzBfSUNFQ1JVU0hFUl9SU1QJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAzNDMwX0lDRVBJQ0tfUlNUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwX1ZERDJfVk9MVEFHRV9NQU5BR0VSX1JTVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfVkREMV9WT0xUQUdFX01BTkFHRVJfUlNUCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9FWFRFUk5BTF9XQVJNX1JTVAkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NFQ1VSRV9XRF9SU1QJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDM0MzBfTVBVX1dEX1JTVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9TRUNVUklUWV9WSU9MX1JTVAkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0dMT0JBTF9TV19SU1QJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfR0xPQkFMX0NPTERfUlNUCQkJKDEgPDwgMCkKKworLyogUFJNX1ZPTFRDVFJMICovCisjZGVmaW5lIE9NQVAzNDMwX1NFTF9WTU9ERQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9TRUxfT0ZGCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fT0ZGCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fUkVUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0FVVE9fU0xFRVAJCQkJKDEgPDwgMCkKKworLyogUFJNX1NSQU1fUENIQVJHRSAqLworI2RlZmluZSBPTUFQMzQzMF9QQ0hBUkdFX1RJTUVfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1BDSEFSR0VfVElNRV9NQVNLCQkJKDB4ZmYgPDwgMCkKKworLyogUFJNX0NMS1NSQ19DVFJMICovCisjZGVmaW5lIE9NQVAzNDMwX1NZU0NMS0RJVl9TSElGVAkJCTYKKyNkZWZpbmUgT01BUDM0MzBfU1lTQ0xLRElWX01BU0sJCQkJKDB4MyA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9BVVRPRVhUQ0xLTU9ERV9TSElGVAkJCTMKKyNkZWZpbmUgT01BUDM0MzBfQVVUT0VYVENMS01PREVfTUFTSwkJCSgweDMgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfU1lTQ0xLU0VMX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9TWVNDTEtTRUxfTUFTSwkJCQkoMHgzIDw8IDApCisKKy8qIFBSTV9WT0xUU0VUVVAxICovCisjZGVmaW5lIE9NQVAzNDMwX1NFVFVQX1RJTUUyX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDM0MzBfU0VUVVBfVElNRTJfTUFTSwkJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lIE9NQVAzNDMwX1NFVFVQX1RJTUUxX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9TRVRVUF9USU1FMV9NQVNLCQkJKDB4ZmZmZiA8PCAwKQorCisvKiBQUk1fVk9MVE9GRlNFVCAqLworI2RlZmluZSBPTUFQMzQzMF9PRkZTRVRfVElNRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfT0ZGU0VUX1RJTUVfTUFTSwkJCSgweGZmZmYgPDwgMCkKKworLyogUFJNX0NMS1NFVFVQICovCisjZGVmaW5lIE9NQVAzNDMwX1NFVFVQX1RJTUVfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NFVFVQX1RJTUVfTUFTSwkJCSgweGZmZmYgPDwgMCkKKworLyogUFJNX1BPTENUUkwgKi8KKyNkZWZpbmUgT01BUDM0MzBfT0ZGTU9ERV9QT0wJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfQ0xLT1VUX1BPTAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9DTEtSRVFfUE9MCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0VYVFZPTF9QT0wJCQkJKDEgPDwgMCkKKworLyogUFJNX1ZPTFRTRVRVUDIgKi8KKyNkZWZpbmUgT01BUDM0MzBfT0ZGTU9ERVNFVFVQVElNRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfT0ZGTU9ERVNFVFVQVElNRV9NQVNLCQkJKDB4ZmZmZiA8PCAwKQorCisvKiBQUk1fVlAxX0NPTkZJRyBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBSTV9WUDFfVlNURVBNSU4gc3BlY2lmaWMgYml0cyAqLworCisvKiBQUk1fVlAxX1ZTVEVQTUFYIHNwZWNpZmljIGJpdHMgKi8KKworLyogUFJNX1ZQMV9WTElNSVRUTyBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBSTV9WUDFfVk9MVEFHRSBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBSTV9WUDFfU1RBVFVTIHNwZWNpZmljIGJpdHMgKi8KKworLyogUFJNX1ZQMl9DT05GSUcgc3BlY2lmaWMgYml0cyAqLworCisvKiBQUk1fVlAyX1ZTVEVQTUlOIHNwZWNpZmljIGJpdHMgKi8KKworLyogUFJNX1ZQMl9WU1RFUE1BWCBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBSTV9WUDJfVkxJTUlUVE8gc3BlY2lmaWMgYml0cyAqLworCisvKiBQUk1fVlAyX1ZPTFRBR0Ugc3BlY2lmaWMgYml0cyAqLworCisvKiBQUk1fVlAyX1NUQVRVUyBzcGVjaWZpYyBiaXRzICovCisKKy8qIFJNX1JTVFNUX05FT04gc3BlY2lmaWMgYml0cyAqLworCisvKiBQTV9XS0RFUF9ORU9OIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fUFdTVENUUkxfTkVPTiBzcGVjaWZpYyBiaXRzICovCisKKy8qIFBNX1BXU1RTVF9ORU9OIHNwZWNpZmljIGJpdHMgKi8KKworLyogUE1fUFJFUFdTVFNUX05FT04gc3BlY2lmaWMgYml0cyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNzY0OWFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaApAQCAtMCwwICsxLDMxNiBAQAorI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTV9ICisKKy8qCisgKiBPTUFQMi8zIFBvd2VyL1Jlc2V0IE1hbmFnZW1lbnQgKFBSTSkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworI2RlZmluZSBPTUFQX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQkJXAorCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNlbHNlCisjZGVmaW5lIE9NQVAyNDIwX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCisJCQlJT19BRERSRVNTKE9NQVAyNDIwX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNkZWZpbmUgT01BUDI0MzBfUFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKKwkJCUlPX0FERFJFU1MoT01BUDI0MzBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQorI2RlZmluZSBPTUFQMzRYWF9QUk1fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAorCQkJSU9fQUREUkVTUyhPTUFQMzQzMF9QUk1fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisjZW5kaWYKKworLyoKKyAqIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBnbG9iYWwgUFJNIHJlZ2lzdGVycworICogVXNlIHBybV97cmVhZCx3cml0ZX1fcmVnKCkgd2l0aCB0aGVzZSByZWdpc3RlcnMuCisgKgorICogV2l0aCBhIGZldyBleGNlcHRpb25zLCB0aGVzZSBhcmUgdGhlIHJlZ2lzdGVyIG5hbWVzIGJlZ2lubmluZyB3aXRoCisgKiBQUkNNXyogb24gMjR4eCwgYW5kIFBSTV8qIG9uIDM0eHguICAoVGhlIGV4Y2VwdGlvbnMgYXJlIHRoZQorICogSVJRU1RBVFVTIGFuZCBJUlFFTkFCTEUgYml0cy4pCisgKgorICovCisKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9SRVZJU0lPTgkJT01BUF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fU1lTQ09ORklHCQlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxMCkKKworI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUVNUQVRVU19NUFUJT01BUF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMTgpCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX01QVQlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxYykKKworI2RlZmluZSBPTUFQMjRYWF9QUkNNX1ZPTFRDVFJMCQlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9WT0xUU1QJCU9NQVBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDU0KQorI2RlZmluZSBPTUFQMjRYWF9QUkNNX0NMS1NSQ19DVFJMCU9NQVBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMCU9NQVBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDcwKQorI2RlZmluZSBPTUFQMjRYWF9QUkNNX0NMS0VNVUxfQ1RSTAlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA3OCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtDRkdfQ1RSTAlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA4MCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtDRkdfU1RBVFVTCU9NQVBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDg0KQorI2RlZmluZSBPTUFQMjRYWF9QUkNNX1ZPTFRTRVRVUAkJT01BUF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwOTApCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fQ0xLU1NFVFVQCQlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5NCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9QT0xDVFJMCQlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5OCkKKworI2RlZmluZSBPTUFQMzQzMF9QUk1fUkVWSVNJT04JCU9NQVBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fU1lTQ09ORklHCQlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxNCkKKworI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRU1RBVFVTX01QVQlPTUFQX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxOCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9NUFUJT01BUF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMWMpCisKKworI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfU01QU19TQQkJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX1NNUFNfVk9MX1JBCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19TTVBTX0NNRF9SQQlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDI4KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQ01EX1ZBTF8wCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwMmMpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19DTURfVkFMXzEJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX0NIX0NPTkYJCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwMzQpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19JMkNfQ0ZHCQlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDM4KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQllQQVNTX1ZBTAlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDNjKQorI2RlZmluZSBPTUFQMzQzMF9QUk1fUlNUQ1RSTAkJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1JTVFRJTUUJCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNTQpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9SU1RTVAkJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA1OCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZPTFRDVFJMCQlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQMzQzMF9QUk1fU1JBTV9QQ0hBUkdFCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9DTEtTUkNfQ1RSTAlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDcwKQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVk9MVFNFVFVQMQkJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA5MCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZPTFRPRkZTRVQJCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwOTQpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9DTEtTRVRVUAkJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA5OCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1BPTENUUkwJCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwOWMpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUU0VUVVAyCQlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGEwKQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAxX0NPTkZJRwkJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBiMCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMV9WU1RFUE1JTglPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGI0KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAxX1ZTVEVQTUFYCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwYjgpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfVkxJTUlUVE8JT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBiYykKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMV9WT0xUQUdFCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwYzApCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfU1RBVFVTCQlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGM0KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX0NPTkZJRwkJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBkMCkKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMl9WU1RFUE1JTglPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGQ0KQorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX1ZTVEVQTUFYCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZDgpCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDJfVkxJTUlUVE8JT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBkYykKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMl9WT0xUQUdFCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZTApCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDJfU1RBVFVTCQlPTUFQX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGU0KQorCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9DTEtTRUwJCU9NQVBfUFJNX1JFR0FERFIoT01BUDM0MzBfQ0NSX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQMzQzMF9QUk1fQ0xLT1VUX0NUUkwJT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMF9DQ1JfTU9ELCAweDAwNzApCisKKy8qCisgKiBNb2R1bGUgc3BlY2lmaWMgUFJNIHJlZ2lzdGVycyBmcm9tIFBSTV9CQVNFICsgZG9tYWluIG9mZnNldAorICoKKyAqIFVzZSBwcm1fe3JlYWQsd3JpdGV9X21vZF9yZWcoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KKyAqCisgKiBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHRoZXNlIGFyZSB0aGUgcmVnaXN0ZXIgbmFtZXMgYmVnaW5uaW5nIHdpdGgKKyAqIHtQTSxSTX1fKiBvbiBib3RoIGFyY2hpdGVjdHVyZXMuICAoVGhlIGV4Y2VwdGlvbnMgYXJlIHRoZSBJUlFTVEFUVVMKKyAqIGFuZCBJUlFFTkFCTEUgYml0cy4pCisgKgorICovCisKKy8qIFJlZ2lzdGVycyBhcHBlYXJpbmcgb24gYm90aCAyNHh4IGFuZCAzNHh4ICovCisKKyNkZWZpbmUgUk1fUlNUQ1RSTAkJCQkJMHgwMDUwCisjZGVmaW5lIFJNX1JTVFRJTUUJCQkJCTB4MDA1NAorI2RlZmluZSBSTV9SU1RTVAkJCQkJMHgwMDU4CisKKyNkZWZpbmUgUE1fV0tFTgkJCQkJCTB4MDBhMAorI2RlZmluZSBQTV9XS0VOMQkJCQkJUE1fV0tFTgorI2RlZmluZSBQTV9XS1NUCQkJCQkJMHgwMGIwCisjZGVmaW5lIFBNX1dLU1QxCQkJCQlQTV9XS1NUCisjZGVmaW5lIFBNX1dLREVQCQkJCQkweDAwYzgKKyNkZWZpbmUgUE1fRVZHRU5DVFJMCQkJCQkweDAwZDQKKyNkZWZpbmUgUE1fRVZHRU5PTlRJTQkJCQkJMHgwMGQ4CisjZGVmaW5lIFBNX0VWR0VOT0ZGVElNCQkJCQkweDAwZGMKKyNkZWZpbmUgUE1fUFdTVENUUkwJCQkJCTB4MDBlMAorI2RlZmluZSBQTV9QV1NUU1QJCQkJCTB4MDBlNAorCisjZGVmaW5lIE9NQVAzNDMwX1BNX01QVUdSUFNFTAkJCQkweDAwYTQKKyNkZWZpbmUgT01BUDM0MzBfUE1fTVBVR1JQU0VMMQkJCQlPTUFQMzQzMF9QTV9NUFVHUlBTRUwKKworI2RlZmluZSBPTUFQMzQzMF9QTV9JVkFHUlBTRUwJCQkJMHgwMGE4CisjZGVmaW5lIE9NQVAzNDMwX1BNX0lWQUdSUFNFTDEJCQkJT01BUDM0MzBfUE1fSVZBR1JQU0VMCisKKyNkZWZpbmUgT01BUDM0MzBfUE1fUFJFUFdTVFNUCQkJCTB4MDBlOAorCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfSVZBMgkJCTB4MDBmOAorI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX0lWQTIJCQkweDAwZmMKKworCisvKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tFTjIJCQkJMHgwMGE0CisjZGVmaW5lIE9NQVAyNFhYX1BNX1dLU1QyCQkJCTB4MDBiNAorCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRU1RBVFVTX0RTUAkJCTB4MDBmMAkvKiBJVkEgbW9kICovCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0RTUAkJCTB4MDBmNAkvKiBJVkEgbW9kICovCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRU1RBVFVTX0lWQQkJCTB4MDBmOAorI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUUVOQUJMRV9JVkEJCQkweDAwZmMKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qIFBvd2VyL3Jlc2V0IG1hbmFnZW1lbnQgZG9tYWluIHJlZ2lzdGVyIGdldC9zZXQgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBybV93cml0ZV9tb2RfcmVnKHUzMiB2YWwsIHMxNiBtb2R1bGUsIHMxNiBpZHgpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgT01BUF9QUk1fUkVHQUREUihtb2R1bGUsIGlkeCkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBwcm1fcmVhZF9tb2RfcmVnKHMxNiBtb2R1bGUsIHMxNiBpZHgpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVBfUFJNX1JFR0FERFIobW9kdWxlLCBpZHgpKTsKK30KKworI2VuZGlmCisKKy8qCisgKiBCaXRzIGNvbW1vbiB0byBzcGVjaWZpYyByZWdpc3RlcnMKKyAqCisgKiBUaGUgMzQzMCByZWdpc3RlciBhbmQgYml0IG5hbWVzIGFyZSBnZW5lcmFsbHkgdXNlZCwKKyAqIHNpbmNlIHRoZXkgdGVuZCB0byBtYWtlIG1vcmUgc2Vuc2UKKyAqLworCisvKiBQTV9FVkdFTk9OVElNX01QVSAqLworLyogTmFtZWQgUE1fRVZFR0VOT05USU1fTVBVIG9uIHRoZSAyNFhYICovCisjZGVmaW5lIE9NQVBfT05USU1FVkFMX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUF9PTlRJTUVWQUxfTUFTSwkJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBQTV9FVkdFTk9GRlRJTV9NUFUgKi8KKy8qIE5hbWVkIFBNX0VWRUdFTk9GRlRJTV9NUFUgb24gdGhlIDI0WFggKi8KKyNkZWZpbmUgT01BUF9PRkZUSU1FVkFMX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUF9PRkZUSU1FVkFMX01BU0sJCQkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogUFJNX0NMS1NFVFVQIGFuZCBQUkNNX1ZPTFRTRVRVUCAqLworLyogTmFtZWQgUFJDTV9DTEtTU0VUVVAgb24gdGhlIDI0WFggKi8KKyNkZWZpbmUgT01BUF9TRVRVUF9USU1FX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUF9TRVRVUF9USU1FX01BU0sJCQkJKDB4ZmZmZiA8PCAwKQorCisvKiBQUk1fQ0xLU1JDX0NUUkwgKi8KKy8qIE5hbWVkIFBSQ01fQ0xLU1JDX0NUUkwgb24gdGhlIDI0WFggKi8KKyNkZWZpbmUgT01BUF9TWVNDTEtESVZfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQX1NZU0NMS0RJVl9NQVNLCQkJCSgweDMgPDwgNikKKyNkZWZpbmUgT01BUF9BVVRPRVhUQ0xLTU9ERV9TSElGVAkJCTMKKyNkZWZpbmUgT01BUF9BVVRPRVhUQ0xLTU9ERV9NQVNLCQkJKDB4MyA8PCAzKQorI2RlZmluZSBPTUFQX1NZU0NMS1NFTF9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVBfU1lTQ0xLU0VMX01BU0sJCQkJKDB4MyA8PCAwKQorCisvKiBQTV9FVkdFTkNUUkxfTVBVICovCisjZGVmaW5lIE9NQVBfT0ZGTE9BRE1PREVfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQX09GRkxPQURNT0RFX01BU0sJCQkJKDB4MyA8PCAzKQorI2RlZmluZSBPTUFQX09OTE9BRE1PREVfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQX09OTE9BRE1PREVfTUFTSwkJCQkoMHgzIDw8IDEpCisjZGVmaW5lIE9NQVBfRU5BQkxFCQkJCQkoMSA8PCAwKQorCisvKiBQUk1fUlNUVElNRSAqLworLyogTmFtZWQgUk1fUlNUVElNRV9XS1VQIG9uIHRoZSAyNHh4ICovCisjZGVmaW5lIE9NQVBfUlNUVElNRTJfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQX1JTVFRJTUUyX01BU0sJCQkJKDB4MWYgPDwgOCkKKyNkZWZpbmUgT01BUF9SU1RUSU1FMV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVBfUlNUVElNRTFfTUFTSwkJCQkoMHhmZiA8PCAwKQorCisKKy8qIFBSTV9SU1RDVFJMICovCisvKiBOYW1lZCBSTV9SU1RDVFJMX1dLVVAgb24gdGhlIDI0eHggKi8KKy8qIDI0MjAgY2FsbHMgUlNUX0RQTEwzICdSU1RfRFBMTCcgKi8KKyNkZWZpbmUgT01BUF9SU1RfRFBMTDMJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVBfUlNUX0dTCQkJCQkoMSA8PCAxKQorCisKKy8qCisgKiBCaXRzIGNvbW1vbiB0byBtb2R1bGUtc2hhcmVkIHJlZ2lzdGVycworICoKKyAqIE5vdCBhbGwgcmVnaXN0ZXJzIG9mIGEgcGFydGljdWxhciB0eXBlIHN1cHBvcnQgYWxsIG9mIHRoZXNlIGJpdHMgLQorICogY2hlY2sgVFJNIGlmIHlvdSBhcmUgdW5zdXJlCisgKi8KKworLyoKKyAqIDI0WFg6IFBNX1BXU1RTVF9DT1JFLCBQTV9QV1NUU1RfR0ZYLCBQTV9QV1NUU1RfTVBVLCBQTV9QV1NUU1RfRFNQCisgKgorICogMjQzMDogUE1fUFdTVFNUX01ETQorICoKKyAqIDM0MzA6IFBNX1BXU1RTVF9JVkEyLCBQTV9QV1NUU1RfTVBVLCBQTV9QV1NUU1RfQ09SRSwgUE1fUFdTVFNUX0dGWCwKKyAqCSBQTV9QV1NUU1RfRFNTLCBQTV9QV1NUU1RfQ0FNLCBQTV9QV1NUU1RfUEVSLCBQTV9QV1NUU1RfRU1VLAorICoJIFBNX1BXU1RTVF9ORU9OCisgKi8KKyNkZWZpbmUgT01BUF9JTlRSQU5TSVRJT04JCQkJKDEgPDwgMjApCisKKworLyoKKyAqIDI0WFg6IFBNX1BXU1RTVF9HRlgsIFBNX1BXU1RTVF9EU1AKKyAqCisgKiAyNDMwOiBQTV9QV1NUU1RfTURNCisgKgorICogMzQzMDogUE1fUFdTVFNUX0lWQTIsIFBNX1BXU1RTVF9NUFUsIFBNX1BXU1RTVF9DT1JFLCBQTV9QV1NUU1RfR0ZYLAorICoJIFBNX1BXU1RTVF9EU1MsIFBNX1BXU1RTVF9DQU0sIFBNX1BXU1RTVF9QRVIsIFBNX1BXU1RTVF9FTVUsCisgKgkgUE1fUFdTVFNUX05FT04KKyAqLworI2RlZmluZSBPTUFQX1BPV0VSU1RBVEVTVF9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVBfUE9XRVJTVEFURVNUX01BU0sJCQkJKDB4MyA8PCAwKQorCisvKgorICogMjRYWDogUk1fUlNUU1RfTVBVIGFuZCBSTV9SU1RTVF9EU1AgLSBvbiAyNFhYLCAnQ09SRURPTUFJTldLVVBfUlNUJyBpcworICoJIGNhbGxlZCAnQ09SRVdLVVBfUlNUJworICoKKyAqIDM0MzA6IFJNX1JTVFNUX0lWQTIsIFJNX1JTVFNUX01QVSwgUk1fUlNUU1RfR0ZYLCBSTV9SU1RTVF9EU1MsCisgKgkgUk1fUlNUU1RfQ0FNLCBSTV9SU1RTVF9QRVIsIFJNX1JTVFNUX05FT04KKyAqLworI2RlZmluZSBPTUFQX0NPUkVET01BSU5XS1VQX1JTVAkJCQkoMSA8PCAzKQorCisvKgorICogMjRYWDogUk1fUlNUU1RfTVBVLCBSTV9SU1RTVF9HRlgsIFJNX1JTVFNUX0RTUAorICoKKyAqIDI0MzA6IFJNX1JTVFNUX01ETQorICoKKyAqIDM0MzA6IFJNX1JTVFNUX0NPUkUsIFJNX1JTVFNUX0VNVQorICovCisjZGVmaW5lIE9NQVBfRE9NQUlOV0tVUF9SU1QJCQkJKDEgPDwgMikKKworLyoKKyAqIDI0WFg6IFJNX1JTVFNUX01QVSwgUk1fUlNUU1RfV0tVUCwgUk1fUlNUU1RfRFNQCisgKgkgT24gMjRYWCwgJ0dMT0JBTFdBUk1fUlNUJyBpcyBjYWxsZWQgJ0dMT0JBTFdNUFVfUlNUJy4KKyAqCisgKiAyNDMwOiBSTV9SU1RTVF9NRE0KKyAqCisgKiAzNDMwOiBSTV9SU1RTVF9DT1JFLCBSTV9SU1RTVF9FTVUKKyAqLworI2RlZmluZSBPTUFQX0dMT0JBTFdBUk1fUlNUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVBfR0xPQkFMQ09MRF9SU1QJCQkJKDEgPDwgMCkKKworLyoKKyAqIDI0WFg6IFBNX1dLREVQX0dGWCwgUE1fV0tERVBfTVBVLCBQTV9XS0RFUF9DT1JFLCBQTV9XS0RFUF9EU1AKKyAqCSAyNDIwIFRSTSBzb21ldGltZXMgdXNlcyAiRU5fV0FLRVVQIiBpbnN0ZWFkIG9mICJFTl9XS1VQIgorICoKKyAqIDI0MzA6IFBNX1dLREVQX01ETQorICoKKyAqIDM0MzA6IFBNX1dLREVQX0lWQTIsIFBNX1dLREVQX0dGWCwgUE1fV0tERVBfRFNTLCBQTV9XS0RFUF9DQU0sCisgKgkgUE1fV0tERVBfUEVSCisgKi8KKyNkZWZpbmUgT01BUF9FTl9XS1VQCQkJCQkoMSA8PCA0KQorCisvKgorICogMjRYWDogUE1fUFdTVENUUkxfTVBVLCBQTV9QV1NUQ1RSTF9DT1JFLCBQTV9QV1NUQ1RSTF9HRlgsCisgKgkgUE1fUFdTVENUUkxfRFNQCisgKgorICogMjQzMDogUE1fUFdTVENUUkxfTURNCisgKgorICogMzQzMDogUE1fUFdTVENUUkxfSVZBMiwgUE1fUFdTVENUUkxfQ09SRSwgUE1fUFdTVENUUkxfR0ZYLAorICoJIFBNX1BXU1RDVFJMX0RTUywgUE1fUFdTVENUUkxfQ0FNLCBQTV9QV1NUQ1RSTF9QRVIsCisgKgkgUE1fUFdTVENUUkxfTkVPTgorICovCisjZGVmaW5lIE9NQVBfTE9HSUNSRVRTVEFURQkJCQkoMSA8PCAyKQorCisvKgorICogMjRYWDogUE1fUFdTVENUUkxfTVBVLCBQTV9QV1NUQ1RSTF9DT1JFLCBQTV9QV1NUQ1RSTF9HRlgsCisgKiAgICAgICBQTV9QV1NUQ1RSTF9EU1AsIFBNX1BXU1RTVF9NUFUKKyAqCisgKiAyNDMwOiBQTV9QV1NUQ1RSTF9NRE0gc2hhcmVkIGJpdHMKKyAqCisgKiAzNDMwOiBQTV9QV1NUQ1RSTF9JVkEyLCBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0NPUkUsCisgKgkgUE1fUFdTVENUUkxfR0ZYLCBQTV9QV1NUQ1RSTF9EU1MsIFBNX1BXU1RDVFJMX0NBTSwgUE1fUFdTVENUUkxfUEVSLAorICoJIFBNX1BXU1RDVFJMX05FT04gc2hhcmVkIGJpdHMKKyAqLworI2RlZmluZSBPTUFQX1BPV0VSU1RBVEVfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQX1BPV0VSU1RBVEVfTUFTSwkJCQkoMHgzIDw8IDApCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZjIzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9TRFJDX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1NEUkNfSAorCisvKgorICogT01BUDIgU0RSQyByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxhc20vYXJjaC9zZHJjLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcDJfc2RyY19iYXNlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcDJfc21zX2Jhc2U7CisKKyNkZWZpbmUgT01BUF9TRFJDX1JFR0FERFIocmVnKQkJCQkJCVwKKwkJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1Mob21hcDJfc2RyY19iYXNlICsgKHJlZykpCisjZGVmaW5lIE9NQVBfU01TX1JFR0FERFIocmVnKQkJCQkJCVwKKwkJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1Mob21hcDJfc21zX2Jhc2UgKyAocmVnKSkKKworLyogU0RSQyBnbG9iYWwgcmVnaXN0ZXIgZ2V0L3NldCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2RyY193cml0ZV9yZWcodTMyIHZhbCwgdTE2IHJlZykKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBPTUFQX1NEUkNfUkVHQUREUihyZWcpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2RyY19yZWFkX3JlZyh1MTYgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChPTUFQX1NEUkNfUkVHQUREUihyZWcpKTsKK30KKworLyogU01TIGdsb2JhbCByZWdpc3RlciBnZXQvc2V0ICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXNfd3JpdGVfcmVnKHUzMiB2YWwsIHUxNiByZWcpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgT01BUF9TTVNfUkVHQUREUihyZWcpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc21zX3JlYWRfcmVnKHUxNiByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVBfU01TX1JFR0FERFIocmVnKSk7Cit9CisjZWxzZQorI2RlZmluZSBPTUFQMjQyWF9TRFJDX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDIwX1NEUkNfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMjQzWF9TRFJDX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDNYX1NEUkNfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMzRYWF9TRFJDX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAzNDNYX1NEUkNfQkFTRSArIChyZWcpKQorI2VuZGlmCS8qIF9fQVNTRU1CTEVSX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKaW5kZXggMTYyNDdkNS4uNDZjY2I5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwpAQCAtMjYsMTkgKzI2LDEwIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgogCi0jZGVmaW5lIEFfMzJLU1lOQ19DUl9WCQlJT19BRERSRVNTKE9NQVBfVElNRVIzMktfQkFTRSsweDEwKQotI2RlZmluZSBBX1BSQ01fVk9MVENUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDUwKQotI2RlZmluZSBBX1BSQ01fQ0xLQ0ZHX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDgwKQotI2RlZmluZSBBX0NNX0NMS0VOX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKzB4NTAwKQotI2RlZmluZSBBX0NNX0lETEVTVF9DS0dFTl9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKzB4NTIwKQotI2RlZmluZSBBX0NNX0NMS1NFTDFfUExMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UrMHg1NDApCi0jZGVmaW5lIEFfQ01fQ0xLU0VMMl9QTExfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSsweDU0NCkKKyNpbmNsdWRlICJzZHJjLmgiCiAKLSNkZWZpbmUgQV9TRFJDX0RMTEFfQ1RSTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFKzB4NjApCi0jZGVmaW5lCUFfU0RSQ19QT1dFUl9WCQlJT19BRERSRVNTKE9NQVAyNFhYX1NEUkNfQkFTRSsweDcwKQotI2RlZmluZSBBX1NEUkNfUkZSX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1NEUkNfQkFTRSsweEE0KQorLyogRmlyc3QgYWRkcmVzcyBvZiByZXNlcnZlZCBhZGRyZXNzIHNwYWNlPyAgYXBwYXJlbnRseSB2YWxpZCBmb3IgT01BUDIgJiAzICovCiAjZGVmaW5lIEFfU0RSQzBfVgkJKDB4QzAwMDAwMDApCi0jZGVmaW5lIEFfU0RSQ19NQU5VQUxfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UrMHhBOCkKIAogCS50ZXh0CiAKQEAgLTEyNiwxNyArMTE3LDExIEBACiAJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCiAKIEFfU0RSQ19QT1dFUjoKLQkud29yZCBBX1NEUkNfUE9XRVJfVgorCS53b3JkIE9NQVAyNDJYX1NEUkNfUkVHQUREUihTRFJDX1BPV0VSKQogQV9TRFJDMDoKIAkud29yZCBBX1NEUkMwX1YKLUFfQ01fQ0xLU0VMMl9QTExfUzoKLQkud29yZCBBX0NNX0NMS1NFTDJfUExMX1YKLUFfQ01fQ0xLRU5fUExMOgotCS53b3JkIEFfQ01fQ0xLRU5fUExMX1YKIEFfU0RSQ19ETExBX0NUUkxfUzoKLQkud29yZCBBX1NEUkNfRExMQV9DVFJMX1YKLUFfU0RSQ19NQU5VQUxfUzoKLQkud29yZCBBX1NEUkNfTUFOVUFMX1YKKwkud29yZCBPTUFQMjQyWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCiAKIEVOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6KQogCS53b3JkCS4gLSBvbWFwMjR4eF9jcHVfc3VzcGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLWZuLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUwppbmRleCBiMjc1NzY2Li40YTllNDkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUwpAQCAtMjcsMTkgKzI3LDExIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgInByY20tcmVncy5oIgorI2luY2x1ZGUgInNkcmMuaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJjbS5oIgogCi0jZGVmaW5lIFRJTUVSXzMyS1NZTkNUX0NSX1YJSU9fQUREUkVTUyhPTUFQMjRYWF8zMktTWU5DVF9CQVNFICsgMHgwMTApCi0KLSNkZWZpbmUgQ01fQ0xLU0VMMl9QTExfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTQ0KQotI2RlZmluZSBQUkNNX1ZPTFRDVFJMX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHgwNTApCi0jZGVmaW5lIFBSQ01fQ0xLQ0ZHX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4MDgwKQotI2RlZmluZSBDTV9DTEtFTl9QTExfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDUwMCkKLSNkZWZpbmUgQ01fSURMRVNUX0NLR0VOX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDUyMCkKLSNkZWZpbmUgQ01fQ0xLU0VMMV9QTExfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTQwKQotCi0jZGVmaW5lIFNEUkNfRExMQV9DVFJMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2MCkKLSNkZWZpbmUgU0RSQ19SRlJfQ1RSTF9WCQlJT19BRERSRVNTKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MGE0KQorI2RlZmluZSBUSU1FUl8zMktTWU5DVF9DUl9WCUlPX0FERFJFU1MoT01BUDI0MjBfMzJLU1lOQ1RfQkFTRSArIDB4MDEwKQogCiAJLnRleHQKIApAQCAtMTMxLDExICsxMjMsMTEgQEAKIAogLyogcmVsYXRpdmUgbG9hZCBjb25zdGFudHMgKi8KIGNtX2Nsa3NlbDJfcGxsOgotCS53b3JkIENNX0NMS1NFTDJfUExMX1YKKwkud29yZCBPTUFQMjQyMF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDIpCiBzZHJjX2RsbGFfY3RybDoKLQkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCisJLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9DVFJMKQogcHJjbV92b2x0Y3RybDoKLQkud29yZCBQUkNNX1ZPTFRDVFJMX1YKKwkud29yZCBPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDUwKQogcHJjbV9tYXNrX3ZhbDoKIAkud29yZCAweEZGRkYzRkZDCiB0aW1lcl8zMmtzeW5jdF9jcjoKQEAgLTIyNSwxMyArMjE3LDEzIEBACiAJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIKIAogZGRyX2NtX2Nsa3NlbDJfcGxsOgotCS53b3JkIENNX0NMS1NFTDJfUExMX1YKKwkud29yZCBPTUFQMjQyMF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDIpCiBkZHJfc2RyY19kbGxhX2N0cmw6Ci0JLndvcmQgU0RSQ19ETExBX0NUUkxfVgorCS53b3JkIE9NQVAyNDJYX1NEUkNfUkVHQUREUihTRFJDX0RMTEFfQ1RSTCkKIGRkcl9zZHJjX3Jmcl9jdHJsOgotCS53b3JkIFNEUkNfUkZSX0NUUkxfVgorCS53b3JkIE9NQVAyNDJYX1NEUkNfUkVHQUREUihTRFJDX1JGUl9DVFJMXzApCiBkZHJfcHJjbV92b2x0Y3RybDoKLQkud29yZCBQUkNNX1ZPTFRDVFJMX1YKKwkud29yZCBPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDUwKQogZGRyX3ByY21fbWFza192YWw6CiAJLndvcmQgMHhGRkZGM0ZGQwogZGRyX3RpbWVyXzMya3N5bmN0OgpAQCAtMzE2LDE3ICszMDgsMTcgQEAKIAlsZG1mZAlzcCEsIHtyMC1yMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCiAKIHNldF9jb25maWc6Ci0JLndvcmQgUFJDTV9DTEtDRkdfQ1RSTF9WCisJLndvcmQgT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHg4MCkKIHBsbF9jdGw6Ci0JLndvcmQgQ01fQ0xLRU5fUExMX1YKKwkud29yZCBPTUFQMjQyMF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0ZDTEtFTjEpCiBwbGxfc3RhdDoKLQkud29yZCBDTV9JRExFU1RfQ0tHRU5fVgorCS53b3JkIE9NQVAyNDIwX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMSkKIHBsbF9kaXY6Ci0JLndvcmQgQ01fQ0xLU0VMMV9QTExfVgorCS53b3JkIE9NQVAyNDIwX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMKQogc2RyY19yZnI6Ci0JLndvcmQgU0RSQ19SRlJfQ1RSTF9WCisJLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNfUkZSX0NUUkxfMCkKIGRsbGFfY3RybDoKLQkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCisJLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9DVFJMKQogCiBFTlRSWShzcmFtX3NldF9wcmNtX3N6KQogCS53b3JkCS4gLSBzcmFtX3NldF9wcmNtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKaW5kZXggMzIzNGRlZS4uNzhkMDVmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwpAQCAtMyw2ICszLDExIEBACiAgKgogICogT01BUDIgR1AgdGltZXIgc3VwcG9ydC4KICAqCisgKiBVcGRhdGUgdG8gdXNlIG5ldyBjbG9ja3NvdXJjZS9jbG9ja2V2ZW50IGxheWVycworICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBPcmlnaW5hbCBkcml2ZXI6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KICAqIEF1dGhvcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CiAgKiAgICAgICAgIEp1aGEgWXJqw7Zsw6QgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KQEAgLTI1LDI0ICszMCwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZG10aW1lci5oPgogCiBzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgKmdwdGltZXI7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9ncF90aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQotewotCW9tYXBfZG1fdGltZXJfc2V0X2xvYWQoZ3B0aW1lciwgMSwgMHhmZmZmZmZmZiAtIGxvYWRfdmFsKTsKLQlvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKGdwdGltZXIsIE9NQVBfVElNRVJfSU5UX09WRVJGTE9XKTsKLQlvbWFwX2RtX3RpbWVyX3N0YXJ0KGdwdGltZXIpOwotfQorc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2xvY2tldmVudF9ncHQ7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwMl9ncF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCW9tYXBfZG1fdGltZXJfd3JpdGVfc3RhdHVzKGdwdGltZXIsIE9NQVBfVElNRVJfSU5UX09WRVJGTE9XKTsKLQl0aW1lcl90aWNrKCk7CisJc3RydWN0IG9tYXBfZG1fdGltZXIgKmdwdCA9IChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqKWRldl9pZDsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmY2xvY2tldmVudF9ncHQ7CiAKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3N0YXR1cyhncHQsIE9NQVBfVElNRVJfSU5UX09WRVJGTE9XKTsKKworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNTIsMjAgKzU2LDEzOCBAQAogCS5oYW5kbGVyCT0gb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0LAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgb21hcDJfZ3BfdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCisJCQkJCSBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JdTMyIHRpY2tfcGVyaW9kOworCW9tYXBfZG1fdGltZXJfc2V0X2xvYWQoZ3B0aW1lciwgMCwgMHhmZmZmZmZmZiAtIGN5Y2xlcyk7CisJb21hcF9kbV90aW1lcl9zdGFydChncHRpbWVyKTsKIAotCW9tYXBfZG1fdGltZXJfaW5pdCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9ncF90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXUzMiBwZXJpb2Q7CisKKwlvbWFwX2RtX3RpbWVyX3N0b3AoZ3B0aW1lcik7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlwZXJpb2QgPSBjbGtfZ2V0X3JhdGUob21hcF9kbV90aW1lcl9nZXRfZmNsayhncHRpbWVyKSkgLyBIWjsKKwkJcGVyaW9kIC09IDE7CisKKwkJb21hcF9kbV90aW1lcl9zZXRfbG9hZChncHRpbWVyLCAxLCAweGZmZmZmZmZmIC0gcGVyaW9kKTsKKwkJb21hcF9kbV90aW1lcl9zdGFydChncHRpbWVyKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNsb2NrZXZlbnRfZ3B0ID0geworCS5uYW1lCQk9ICJncCB0aW1lciIsCisJLmZlYXR1cmVzICAgICAgID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zaGlmdAkJPSAzMiwKKwkuc2V0X25leHRfZXZlbnQJPSBvbWFwMl9ncF90aW1lcl9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUJPSBvbWFwMl9ncF90aW1lcl9zZXRfbW9kZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9ncF9jbG9ja2V2ZW50X2luaXQodm9pZCkKK3sKKwl1MzIgdGlja19yYXRlOworCiAJZ3B0aW1lciA9IG9tYXBfZG1fdGltZXJfcmVxdWVzdF9zcGVjaWZpYygxKTsKIAlCVUdfT04oZ3B0aW1lciA9PSBOVUxMKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfMzJLX1RJTUVSKQorCW9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShncHRpbWVyLCBPTUFQX1RJTUVSX1NSQ18zMl9LSFopOworI2Vsc2UKIAlvbWFwX2RtX3RpbWVyX3NldF9zb3VyY2UoZ3B0aW1lciwgT01BUF9USU1FUl9TUkNfU1lTX0NMSyk7Ci0JdGlja19wZXJpb2QgPSBjbGtfZ2V0X3JhdGUob21hcF9kbV90aW1lcl9nZXRfZmNsayhncHRpbWVyKSkgLyBIWjsKLQl0aWNrX3BlcmlvZCAtPSAxOworI2VuZGlmCisJdGlja19yYXRlID0gY2xrX2dldF9yYXRlKG9tYXBfZG1fdGltZXJfZ2V0X2ZjbGsoZ3B0aW1lcikpOwogCisJb21hcDJfZ3BfdGltZXJfaXJxLmRldl9pZCA9ICh2b2lkICopZ3B0aW1lcjsKIAlzZXR1cF9pcnEob21hcF9kbV90aW1lcl9nZXRfaXJxKGdwdGltZXIpLCAmb21hcDJfZ3BfdGltZXJfaXJxKTsKLQlvbWFwMl9ncF90aW1lcl9zdGFydCh0aWNrX3BlcmlvZCk7CisJb21hcF9kbV90aW1lcl9zZXRfaW50X2VuYWJsZShncHRpbWVyLCBPTUFQX1RJTUVSX0lOVF9PVkVSRkxPVyk7CisKKwljbG9ja2V2ZW50X2dwdC5tdWx0ID0gZGl2X3NjKHRpY2tfcmF0ZSwgTlNFQ19QRVJfU0VDLAorCQkJCSAgICAgY2xvY2tldmVudF9ncHQuc2hpZnQpOworCWNsb2NrZXZlbnRfZ3B0Lm1heF9kZWx0YV9ucyA9CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwgJmNsb2NrZXZlbnRfZ3B0KTsKKwljbG9ja2V2ZW50X2dwdC5taW5fZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZjbG9ja2V2ZW50X2dwdCk7CisKKwljbG9ja2V2ZW50X2dwdC5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoMCk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZjbG9ja2V2ZW50X2dwdCk7Cit9CisKKyNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKKy8qIAorICogV2hlbiAzMmstdGltZXIgaXMgZW5hYmxlZCwgZG9uJ3QgdXNlIEdQVGltZXIgZm9yIGNsb2Nrc291cmNlCisgKiBpbnN0ZWFkLCBqdXN0IGxlYXZlIGRlZmF1bHQgY2xvY2tzb3VyY2Ugd2hpY2ggdXNlcyB0aGUgMzJrCisgKiBzeW5jIGNvdW50ZXIuICBTZWUgY2xvY2tzb3VyY2Ugc2V0dXAgaW4gc2VlIHBsYXQtb21hcC9jb21tb24uYy4gCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvbWFwMl9ncF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpIHt9CisjZWxzZQorLyoKKyAqIGNsb2Nrc291cmNlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciAqZ3B0X2Nsb2Nrc291cmNlOworc3RhdGljIGN5Y2xlX3QgY2xvY2tzb3VyY2VfcmVhZF9jeWNsZXModm9pZCkKK3sKKwlyZXR1cm4gKGN5Y2xlX3Qpb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoZ3B0X2Nsb2Nrc291cmNlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9ncHQgPSB7CisJLm5hbWUJCT0gImdwIHRpbWVyIiwKKwkucmF0aW5nCQk9IDMwMCwKKwkucmVhZAkJPSBjbG9ja3NvdXJjZV9yZWFkX2N5Y2xlcywKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuc2hpZnQJCT0gMjQsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworLyogU2V0dXAgZnJlZS1ydW5uaW5nIGNvdW50ZXIgZm9yIGNsb2Nrc291cmNlICovCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ3BfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciAqZ3B0OworCXUzMiB0aWNrX3JhdGUsIHRpY2tfcGVyaW9kOworCXN0YXRpYyBjaGFyIGVycjFbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKKwkJIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBkbS10aW1lclxuIjsKKwlzdGF0aWMgY2hhciBlcnIyW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSCisJCSIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2UhXG4iOworCisJZ3B0ID0gb21hcF9kbV90aW1lcl9yZXF1ZXN0KCk7CisJaWYgKCFncHQpCisJCXByaW50ayhlcnIxLCBjbG9ja3NvdXJjZV9ncHQubmFtZSk7CisJZ3B0X2Nsb2Nrc291cmNlID0gZ3B0OworCisJb21hcF9kbV90aW1lcl9zZXRfc291cmNlKGdwdCwgT01BUF9USU1FUl9TUkNfU1lTX0NMSyk7CisJdGlja19yYXRlID0gY2xrX2dldF9yYXRlKG9tYXBfZG1fdGltZXJfZ2V0X2ZjbGsoZ3B0KSk7CisJdGlja19wZXJpb2QgPSAodGlja19yYXRlIC8gSFopIC0gMTsKKworCW9tYXBfZG1fdGltZXJfc2V0X2xvYWQoZ3B0LCAxLCAwKTsKKwlvbWFwX2RtX3RpbWVyX3N0YXJ0KGdwdCk7CisKKwljbG9ja3NvdXJjZV9ncHQubXVsdCA9CisJCWNsb2Nrc291cmNlX2toejJtdWx0KHRpY2tfcmF0ZS8xMDAwLCBjbG9ja3NvdXJjZV9ncHQuc2hpZnQpOworCWlmIChjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfZ3B0KSkKKwkJcHJpbnRrKGVycjIsIGNsb2Nrc291cmNlX2dwdC5uYW1lKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ3BfdGltZXJfaW5pdCh2b2lkKQoreworCW9tYXBfZG1fdGltZXJfaW5pdCgpOworCisJb21hcDJfZ3BfY2xvY2tldmVudF9pbml0KCk7CisJb21hcDJfZ3BfY2xvY2tzb3VyY2VfaW5pdCgpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9yaW9uL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkY2JiNmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotaWYgQVJDSF9PUklPTgotCi1tZW51ICJPcmlvbiBJbXBsZW1lbnRhdGlvbnMiCi0KLWNvbmZpZyBNQUNIX0RCODhGNTI4MQotCWJvb2wgIk1hcnZlbGwgT3Jpb24tMiBEZXZlbG9wbWVudCBCb2FyZCIKLQlzZWxlY3QgSTJDX0JPQVJESU5GTwotCWhlbHAKLQkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgTWFydmVsbCBPcmlvbi0yICg4OEY1MjgxKSBEZXZlbG9wbWVudCBCb2FyZAotCi1jb25maWcgTUFDSF9SRDg4RjUxODIKLQlib29sICJNYXJ2ZWxsIE9yaW9uLU5BUyBSZWZlcmVuY2UgRGVzaWduIgotCXNlbGVjdCBJMkNfQk9BUkRJTkZPCi0JaGVscAotCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCi0JICBNYXJ2ZWxsIE9yaW9uLU5BUyAoODhGNTE4MikgUkQyCi0KLWNvbmZpZyBNQUNIX0tVUk9CT1hfUFJPCi0JYm9vbCAiS3Vyb0JveCBQcm8iCi0Jc2VsZWN0IEkyQ19CT0FSRElORk8KLQloZWxwCi0JICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIEt1cm9Cb3ggUHJvIHBsYXRmb3JtLgotCi1jb25maWcgTUFDSF9ETlMzMjMKLQlib29sICJELUxpbmsgRE5TLTMyMyIKLQlzZWxlY3QgSTJDX0JPQVJESU5GTwotCWhlbHAKLQkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgRC1MaW5rIEROUy0zMjMgcGxhdGZvcm0uCi0KLWNvbmZpZyBNQUNIX1RTMjA5Ci0JYm9vbCAiUU5BUCBUUy0xMDkvVFMtMjA5IgotCWhlbHAKLQkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgUU5BUCBUUy0xMDkvVFMtMjA5IHBsYXRmb3JtLgotCi1lbmRtZW51Ci0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vcmlvbi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxZDkzNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1vYmoteQkJCQkrPSBjb21tb24ubyBhZGRyLW1hcC5vIHBjaS5vIGdwaW8ubyBpcnEubyB0aW1lLm8KLW9iai0kKENPTkZJR19NQUNIX0RCODhGNTI4MSkJKz0gZGI4OGY1MjgxLXNldHVwLm8KLW9iai0kKENPTkZJR19NQUNIX1JEODhGNTE4MikJKz0gcmQ4OGY1MTgyLXNldHVwLm8KLW9iai0kKENPTkZJR19NQUNIX0tVUk9CT1hfUFJPKQkrPSBrdXJvYm94X3Byby1zZXR1cC5vCi1vYmotJChDT05GSUdfTUFDSF9ETlMzMjMpCSs9IGRuczMyMy1zZXR1cC5vCi1vYmotJChDT05GSUdfTUFDSF9UUzIwOSkJKz0gdHMyMDktc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbi9hZGRyLW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTJmZDYzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb24vYWRkci1tYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4NCArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1vcmlvbi9hZGRyLW1hcC5jCi0gKgotICogQWRkcmVzcyBtYXAgZnVuY3Rpb25zIGZvciBNYXJ2ZWxsIE9yaW9uIFN5c3RlbSBPbiBDaGlwCi0gKgotICogTWFpbnRhaW5lcjogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0vKgotICogVGhlIE9yaW9uIGhhcyBmdWxseSBwcm9ncmFtYWJsZSBhZGRyZXNzIG1hcC4gVGhlcmUncyBhIHNlcGFyYXRlIGFkZHJlc3MKLSAqIG1hcCBmb3IgZWFjaCBvZiB0aGUgZGV2aWNlIF9tYXN0ZXJfIGludGVyZmFjZXMsIGUuZy4gQ1BVLCBQQ0ksIFBDSUUsIFVTQiwKLSAqIEdpZ2FiaXQgRXRoZXJuZXQsIERNQS9YT1IgZW5naW5lcywgZXRjLiBFYWNoIGludGVyZmFjZSBoYXMgaXRzIG93bgotICogYWRkcmVzcyBkZWNvZGUgd2luZG93cyB0aGF0IGFsbG93IGl0IHRvIGFjY2VzcyBhbnkgb2YgdGhlIE9yaW9uIHJlc291cmNlcy4KLSAqCi0gKiBDUFUgYWRkcmVzcyBkZWNvZGluZyAtLQotICogTGludXggYXNzdW1lcyB0aGF0IGl0IGlzIHRoZSBib290IGxvYWRlciB0aGF0IGFscmVhZHkgc2V0dXAgdGhlIGFjY2VzcyB0bwotICogRERSIGFuZCBpbnRlcm5hbCByZWdpc3RlcnMuCi0gKiBTZXR1cCBhY2Nlc3MgdG8gUENJIGFuZCBQQ0ktRSBJTy9NRU0gc3BhY2UgaXMgaXNzdWVkIGJ5IGNvcmUuYy4KLSAqIFNldHVwIGFjY2VzcyB0byB2YXJpb3VzIGRldmljZXMgbG9jYXRlZCBvbiB0aGUgZGV2aWNlIGJ1cyBpbnRlcmZhY2UgKGUuZy4KLSAqIGZsYXNoZXMsIFJUQywgZXRjKSBzaG91bGQgYmUgaXNzdWVkIGJ5IG1hY2hpbmUtc2V0dXAuYyBhY2NvcmRpbmcgdG8KLSAqIHNwZWNpZmljIGJvYXJkIHBvcHVsYXRpb24gKGJ5IHVzaW5nIG9yaW9uX3NldHVwX2NwdV93aW4oKSkuCi0gKgotICogTm9uLUNQVSBNYXN0ZXJzIGFkZHJlc3MgZGVjb2RpbmcgLS0KLSAqIFVubGlrZSB0aGUgQ1BVLCB3ZSBzZXR1cCB0aGUgYWNjZXNzIGZyb20gT3Jpb24ncyBtYXN0ZXIgaW50ZXJmYWNlcyB0byBERFIKLSAqIGJhbmtzIG9ubHkgKHRoZSB0eXBpY2FsIHVzZSBjYXNlKS4KLSAqIFNldHVwIGFjY2VzcyBmb3IgZWFjaCBtYXN0ZXIgdG8gRERSIGlzIGlzc3VlZCBieSBjb21tb24uYy4KLSAqCi0gKiBOb3RlOiBhbHRob3VnaCBvcmlvbl9zZXRiaXRzKCkgYW5kIG9yaW9uX2NscmJpdHMoKSBhcmUgbm90IGF0b21pYwotICogbm8gbG9ja2luZyBpcyBuZWNlc3NhcnkgaGVyZSBzaW5jZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBvbmx5IGNhbGxlZAotICogYXQgYm9vdCB0aW1lIHdoZW4gdGhlcmUgaXMgbm8gY29uY3VycmVuY3kgaXNzdWVzLgotICovCi0KLS8qCi0gKiBHZW5lcmljIEFkZHJlc3MgRGVjb2RlIFdpbmRvd3MgYml0IHNldHRpbmdzCi0gKi8KLSNkZWZpbmUgVEFSR0VUX0REUgkJMAotI2RlZmluZSBUQVJHRVRfUENJCQkzCi0jZGVmaW5lIFRBUkdFVF9QQ0lFCQk0Ci0jZGVmaW5lIFRBUkdFVF9ERVZfQlVTCQkxCi0jZGVmaW5lIEFUVFJfRERSX0NTKG4pCQkoKChuKSA9PTApID8gMHhlIDoJXAotCQkJCSgobikgPT0gMSkgPyAweGQgOglcCi0JCQkJKChuKSA9PSAyKSA/IDB4YiA6CVwKLQkJCQkoKG4pID09IDMpID8gMHg3IDogMHhmKQotI2RlZmluZSBBVFRSX1BDSUVfTUVNCQkweDU5Ci0jZGVmaW5lIEFUVFJfUENJRV9JTwkJMHg1MQotI2RlZmluZSBBVFRSX1BDSV9NRU0JCTB4NTkKLSNkZWZpbmUgQVRUUl9QQ0lfSU8JCTB4NTEKLSNkZWZpbmUgQVRUUl9ERVZfQ1MwCQkweDFlCi0jZGVmaW5lIEFUVFJfREVWX0NTMQkJMHgxZAotI2RlZmluZSBBVFRSX0RFVl9DUzIJCTB4MWIKLSNkZWZpbmUgQVRUUl9ERVZfQk9PVAkJMHhmCi0jZGVmaW5lIFdJTl9FTgkJCTEKLQotLyoKLSAqIEhlbHBlcnMgdG8gZ2V0IEREUiBiYW5rcyBpbmZvCi0gKi8KLSNkZWZpbmUgRERSX0JBU0VfQ1MobikJCU9SSU9OX0REUl9SRUcoMHgxNTAwICsgKChuKSAqIDgpKQotI2RlZmluZSBERFJfU0laRV9DUyhuKQkJT1JJT05fRERSX1JFRygweDE1MDQgKyAoKG4pICogOCkpCi0jZGVmaW5lIEREUl9NQVhfQ1MJCTQKLSNkZWZpbmUgRERSX1JFR19UT19TSVpFKHJlZykJKCgocmVnKSB8IDB4ZmZmZmZmKSArIDEpCi0jZGVmaW5lIEREUl9SRUdfVE9fQkFTRShyZWcpCSgocmVnKSAmIDB4ZmYwMDAwMDApCi0jZGVmaW5lIEREUl9CQU5LX0VOCQkxCi0KLS8qCi0gKiBDUFUgQWRkcmVzcyBEZWNvZGUgV2luZG93cyByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBDUFVfV0lOX0NUUkwobikJCU9SSU9OX0JSSURHRV9SRUcoMHgwMDAgfCAoKG4pIDw8IDQpKQotI2RlZmluZSBDUFVfV0lOX0JBU0UobikJCU9SSU9OX0JSSURHRV9SRUcoMHgwMDQgfCAoKG4pIDw8IDQpKQotI2RlZmluZSBDUFVfV0lOX1JFTUFQX0xPKG4pCU9SSU9OX0JSSURHRV9SRUcoMHgwMDggfCAoKG4pIDw8IDQpKQotI2RlZmluZSBDUFVfV0lOX1JFTUFQX0hJKG4pCU9SSU9OX0JSSURHRV9SRUcoMHgwMGMgfCAoKG4pIDw8IDQpKQotI2RlZmluZSBDUFVfTUFYX1dJTgkJOAotCi0vKgotICogVXNlIHRoaXMgQ1BVIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgYWxsb2NhdGlvbgotICovCi0jZGVmaW5lIENQVV9XSU5fUENJRV9JTwkJMAotI2RlZmluZSBDUFVfV0lOX1BDSV9JTwkJMQotI2RlZmluZSBDUFVfV0lOX1BDSUVfTUVNCTIKLSNkZWZpbmUgQ1BVX1dJTl9QQ0lfTUVNCQkzCi0jZGVmaW5lIENQVV9XSU5fREVWX0JPT1QJNAotI2RlZmluZSBDUFVfV0lOX0RFVl9DUzAJCTUKLSNkZWZpbmUgQ1BVX1dJTl9ERVZfQ1MxCQk2Ci0jZGVmaW5lIENQVV9XSU5fREVWX0NTMgkJNwotCi0vKgotICogUENJRSBBZGRyZXNzIERlY29kZSBXaW5kb3dzIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIFBDSUVfQkFSX0NUUkwobikJT1JJT05fUENJRV9SRUcoMHgxODA0ICsgKChuIC0gMSkgKiA0KSkKLSNkZWZpbmUgUENJRV9CQVJfTE8obikJCU9SSU9OX1BDSUVfUkVHKDB4MDAxMCArICgobikgKiA4KSkKLSNkZWZpbmUgUENJRV9CQVJfSEkobikJCU9SSU9OX1BDSUVfUkVHKDB4MDAxNCArICgobikgKiA4KSkKLSNkZWZpbmUgUENJRV9XSU5fQ1RSTChuKQlPUklPTl9QQ0lFX1JFRygweDE4MjAgKyAoKG4pIDw8IDQpKQotI2RlZmluZSBQQ0lFX1dJTl9CQVNFKG4pCU9SSU9OX1BDSUVfUkVHKDB4MTgyNCArICgobikgPDwgNCkpCi0jZGVmaW5lIFBDSUVfV0lOX1JFTUFQKG4pCU9SSU9OX1BDSUVfUkVHKDB4MTgyYyArICgobikgPDwgNCkpCi0jZGVmaW5lIFBDSUVfREVGV0lOX0NUUkwJT1JJT05fUENJRV9SRUcoMHgxOGIwKQotI2RlZmluZSBQQ0lFX0VYUFJPTV9XSU5fQ1RSTAlPUklPTl9QQ0lFX1JFRygweDE4YzApCi0jZGVmaW5lIFBDSUVfRVhQUk9NX1dJTl9SRU1QCU9SSU9OX1BDSUVfUkVHKDB4MThjNCkKLSNkZWZpbmUgUENJRV9NQVhfQkFSUwkJMwotI2RlZmluZSBQQ0lFX01BWF9XSU5TCQk1Ci0KLS8qCi0gKiBVc2UgUENJRSBCQVIgJzEnIGZvciBhbGwgRERSIGJhbmtzCi0gKi8KLSNkZWZpbmUgUENJRV9EUkFNX0JBUgkJMQotCi0vKgotICogUENJIEFkZHJlc3MgRGVjb2RlIFdpbmRvd3MgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgUENJX0JBUl9TSVpFX0REUl9DUyhuKQkoKChuKSA9PSAwKSA/IE9SSU9OX1BDSV9SRUcoMHhjMDgpIDogXAotCQkJCSgobikgPT0gMSkgPyBPUklPTl9QQ0lfUkVHKDB4ZDA4KSA6ICBcCi0JCQkJKChuKSA9PSAyKSA/IE9SSU9OX1BDSV9SRUcoMHhjMGMpIDogIFwKLQkJCQkoKG4pID09IDMpID8gT1JJT05fUENJX1JFRygweGQwYykgOiAwKQotI2RlZmluZSBQQ0lfQkFSX1JFTUFQX0REUl9DUyhuKQkoKChuKSA9PTApID8gT1JJT05fUENJX1JFRygweGM0OCkgOiBcCi0JCQkJKChuKSA9PSAxKSA/IE9SSU9OX1BDSV9SRUcoMHhkNDgpIDogIFwKLQkJCQkoKG4pID09IDIpID8gT1JJT05fUENJX1JFRygweGM0YykgOiAgXAotCQkJCSgobikgPT0gMykgPyBPUklPTl9QQ0lfUkVHKDB4ZDRjKSA6IDApCi0jZGVmaW5lIFBDSV9CQVJfRU5BQkxFCQlPUklPTl9QQ0lfUkVHKDB4YzNjKQotI2RlZmluZSBQQ0lfQ1RSTF9CQVNFX0xPKG4pCU9SSU9OX1BDSV9SRUcoMHgxZTAwIHwgKChuKSA8PCA0KSkKLSNkZWZpbmUgUENJX0NUUkxfQkFTRV9ISShuKQlPUklPTl9QQ0lfUkVHKDB4MWUwNCB8ICgobikgPDwgNCkpCi0jZGVmaW5lIFBDSV9DVFJMX1NJWkUobikJT1JJT05fUENJX1JFRygweDFlMDggfCAoKG4pIDw8IDQpKQotI2RlZmluZSBQQ0lfQUREUl9ERUNPREVfQ1RSTAlPUklPTl9QQ0lfUkVHKDB4ZDNjKQotCi0vKgotICogUENJIGNvbmZpZ3VyYXRpb24gaGVsZXBycyBmb3IgQkFSIHNldHRpbmdzCi0gKi8KLSNkZWZpbmUgUENJX0NPTkZfRlVOQ19CQVJfQ1MobikJCSgobikgPj4gMSkKLSNkZWZpbmUgUENJX0NPTkZfUkVHX0JBUl9MT19DUyhuKQkoKChuKSAmIDEpID8gMHgxOCA6IDB4MTApCi0jZGVmaW5lIFBDSV9DT05GX1JFR19CQVJfSElfQ1MobikJKCgobikgJiAxKSA/IDB4MWMgOiAweDE0KQotCi0vKgotICogR2lnYWJpdCBFdGhlcm5ldCBBZGRyZXNzIERlY29kZSBXaW5kb3dzIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIEVUSF9XSU5fQkFTRSh3aW4pCU9SSU9OX0VUSF9SRUcoMHgyMDAgKyAoKHdpbikgKiA4KSkKLSNkZWZpbmUgRVRIX1dJTl9TSVpFKHdpbikJT1JJT05fRVRIX1JFRygweDIwNCArICgod2luKSAqIDgpKQotI2RlZmluZSBFVEhfV0lOX1JFTUFQKHdpbikJT1JJT05fRVRIX1JFRygweDI4MCArICgod2luKSAqIDQpKQotI2RlZmluZSBFVEhfV0lOX0VOCQlPUklPTl9FVEhfUkVHKDB4MjkwKQotI2RlZmluZSBFVEhfV0lOX1BST1QJCU9SSU9OX0VUSF9SRUcoMHgyOTQpCi0jZGVmaW5lIEVUSF9NQVhfV0lOCQk2Ci0jZGVmaW5lIEVUSF9NQVhfUkVNQVBfV0lOCTQKLQotLyoKLSAqIFVTQiBBZGRyZXNzIERlY29kZSBXaW5kb3dzIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIFVTQl9XSU5fQ1RSTChpLCB3KQkoKGkgPT0gMCkgPyBPUklPTl9VU0IwX1JFRygweDMyMCArICgodykgPDwgNCkpIFwKLQkJCQkJOiBPUklPTl9VU0IxX1JFRygweDMyMCArICgodykgPDwgNCkpKQotI2RlZmluZSBVU0JfV0lOX0JBU0UoaSwgdykJKChpID09IDApID8gT1JJT05fVVNCMF9SRUcoMHgzMjQgKyAoKHcpIDw8IDQpKSBcCi0JCQkJCTogT1JJT05fVVNCMV9SRUcoMHgzMjQgKyAoKHcpIDw8IDQpKSkKLSNkZWZpbmUgVVNCX01BWF9XSU4JCTQKLQotLyoKLSAqIFNBVEEgQWRkcmVzcyBEZWNvZGUgV2luZG93cyByZWdpc3RlcnMKLSAqLwotI2RlZmluZSBTQVRBX1dJTl9DVFJMKHdpbikJT1JJT05fU0FUQV9SRUcoMHgzMCArICgod2luKSAqIDB4MTApKQotI2RlZmluZSBTQVRBX1dJTl9CQVNFKHdpbikJT1JJT05fU0FUQV9SRUcoMHgzNCArICgod2luKSAqIDB4MTApKQotI2RlZmluZSBTQVRBX01BWF9XSU4JCTQKLQotc3RhdGljIGludCBfX2luaXQgb3Jpb25fY3B1X3dpbl9jYW5fcmVtYXAodTMyIHdpbikKLXsKLQl1MzIgZGV2LCByZXY7Ci0KLQlvcmlvbl9wY2llX2lkKCZkZXYsICZyZXYpOwotCWlmICgoZGV2ID09IE1WODhGNTI4MV9ERVZfSUQgJiYgd2luIDwgNCkKLQkgICAgfHwgKGRldiA9PSBNVjg4RjUxODJfREVWX0lEICYmIHdpbiA8IDIpCi0JICAgIHx8IChkZXYgPT0gTVY4OEY1MTgxX0RFVl9JRCAmJiB3aW4gPCAyKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgb3Jpb25fc2V0dXBfY3B1X3dpbihlbnVtIG9yaW9uX3RhcmdldCB0YXJnZXQsIHUzMiBiYXNlLCB1MzIgc2l6ZSwgaW50IHJlbWFwKQotewotCXUzMiB3aW4sIGF0dHIsIGN0cmw7Ci0KLQlzd2l0Y2ggKHRhcmdldCkgewotCWNhc2UgT1JJT05fUENJRV9JTzoKLQkJdGFyZ2V0ID0gVEFSR0VUX1BDSUU7Ci0JCWF0dHIgPSBBVFRSX1BDSUVfSU87Ci0JCXdpbiA9IENQVV9XSU5fUENJRV9JTzsKLQkJYnJlYWs7Ci0JY2FzZSBPUklPTl9QQ0lfSU86Ci0JCXRhcmdldCA9IFRBUkdFVF9QQ0k7Ci0JCWF0dHIgPSBBVFRSX1BDSV9JTzsKLQkJd2luID0gQ1BVX1dJTl9QQ0lfSU87Ci0JCWJyZWFrOwotCWNhc2UgT1JJT05fUENJRV9NRU06Ci0JCXRhcmdldCA9IFRBUkdFVF9QQ0lFOwotCQlhdHRyID0gQVRUUl9QQ0lFX01FTTsKLQkJd2luID0gQ1BVX1dJTl9QQ0lFX01FTTsKLQkJYnJlYWs7Ci0JY2FzZSBPUklPTl9QQ0lfTUVNOgotCQl0YXJnZXQgPSBUQVJHRVRfUENJOwotCQlhdHRyID0gQVRUUl9QQ0lfTUVNOwotCQl3aW4gPSBDUFVfV0lOX1BDSV9NRU07Ci0JCWJyZWFrOwotCWNhc2UgT1JJT05fREVWX0JPT1Q6Ci0JCXRhcmdldCA9IFRBUkdFVF9ERVZfQlVTOwotCQlhdHRyID0gQVRUUl9ERVZfQk9PVDsKLQkJd2luID0gQ1BVX1dJTl9ERVZfQk9PVDsKLQkJYnJlYWs7Ci0JY2FzZSBPUklPTl9ERVYwOgotCQl0YXJnZXQgPSBUQVJHRVRfREVWX0JVUzsKLQkJYXR0ciA9IEFUVFJfREVWX0NTMDsKLQkJd2luID0gQ1BVX1dJTl9ERVZfQ1MwOwotCQlicmVhazsKLQljYXNlIE9SSU9OX0RFVjE6Ci0JCXRhcmdldCA9IFRBUkdFVF9ERVZfQlVTOwotCQlhdHRyID0gQVRUUl9ERVZfQ1MxOwotCQl3aW4gPSBDUFVfV0lOX0RFVl9DUzE7Ci0JCWJyZWFrOwotCWNhc2UgT1JJT05fREVWMjoKLQkJdGFyZ2V0ID0gVEFSR0VUX0RFVl9CVVM7Ci0JCWF0dHIgPSBBVFRSX0RFVl9DUzI7Ci0JCXdpbiA9IENQVV9XSU5fREVWX0NTMjsKLQkJYnJlYWs7Ci0JY2FzZSBPUklPTl9ERFI6Ci0JY2FzZSBPUklPTl9SRUdTOgotCQkvKgotCQkgKiBNdXN0IGJlIG1hcHBlZCBieSBib290bG9hZGVyLgotCQkgKi8KLQlkZWZhdWx0OgotCQl0YXJnZXQgPSBhdHRyID0gd2luID0gLTE7Ci0JCUJVRygpOwotCX0KLQotCWJhc2UgJj0gMHhmZmZmMDAwMDsKLQljdHJsID0gKCgoc2l6ZSAtIDEpICYgMHhmZmZmMDAwMCkgfCAoYXR0ciA8PCA4KSB8Ci0JCSh0YXJnZXQgPDwgNCkgfCBXSU5fRU4pOwotCi0Jb3Jpb25fd3JpdGUoQ1BVX1dJTl9CQVNFKHdpbiksIGJhc2UpOwotCW9yaW9uX3dyaXRlKENQVV9XSU5fQ1RSTCh3aW4pLCBjdHJsKTsKLQotCWlmIChvcmlvbl9jcHVfd2luX2Nhbl9yZW1hcCh3aW4pKSB7Ci0JCWlmIChyZW1hcCA+PSAwKSB7Ci0JCQlvcmlvbl93cml0ZShDUFVfV0lOX1JFTUFQX0xPKHdpbiksIHJlbWFwICYgMHhmZmZmMDAwMCk7Ci0JCQlvcmlvbl93cml0ZShDUFVfV0lOX1JFTUFQX0hJKHdpbiksIDApOwotCQl9IGVsc2UgewotCQkJb3Jpb25fd3JpdGUoQ1BVX1dJTl9SRU1BUF9MTyh3aW4pLCBiYXNlKTsKLQkJCW9yaW9uX3dyaXRlKENQVV9XSU5fUkVNQVBfSEkod2luKSwgMCk7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgX19pbml0IG9yaW9uX3NldHVwX2NwdV93aW5zKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIEZpcnN0LCBkaXNhYmxlIGFuZCBjbGVhciB3aW5kb3dzCi0JICovCi0JZm9yIChpID0gMDsgaSA8IENQVV9NQVhfV0lOOyBpKyspIHsKLQkJb3Jpb25fd3JpdGUoQ1BVX1dJTl9CQVNFKGkpLCAwKTsKLQkJb3Jpb25fd3JpdGUoQ1BVX1dJTl9DVFJMKGkpLCAwKTsKLQkJaWYgKG9yaW9uX2NwdV93aW5fY2FuX3JlbWFwKGkpKSB7Ci0JCQlvcmlvbl93cml0ZShDUFVfV0lOX1JFTUFQX0xPKGkpLCAwKTsKLQkJCW9yaW9uX3dyaXRlKENQVV9XSU5fUkVNQVBfSEkoaSksIDApOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTZXR1cCB3aW5kb3dzIGZvciBQQ0krUENJZSBJTytNRU0gc3BhY2UuCi0JICovCi0Jb3Jpb25fc2V0dXBfY3B1X3dpbihPUklPTl9QQ0lFX0lPLCBPUklPTl9QQ0lFX0lPX1BIWVNfQkFTRSwKLQkJCQlPUklPTl9QQ0lFX0lPX1NJWkUsIE9SSU9OX1BDSUVfSU9fQlVTX0JBU0UpOwotCW9yaW9uX3NldHVwX2NwdV93aW4oT1JJT05fUENJX0lPLCBPUklPTl9QQ0lfSU9fUEhZU19CQVNFLAotCQkJCU9SSU9OX1BDSV9JT19TSVpFLCBPUklPTl9QQ0lfSU9fQlVTX0JBU0UpOwotCW9yaW9uX3NldHVwX2NwdV93aW4oT1JJT05fUENJRV9NRU0sIE9SSU9OX1BDSUVfTUVNX1BIWVNfQkFTRSwKLQkJCQlPUklPTl9QQ0lFX01FTV9TSVpFLCAtMSk7Ci0Jb3Jpb25fc2V0dXBfY3B1X3dpbihPUklPTl9QQ0lfTUVNLCBPUklPTl9QQ0lfTUVNX1BIWVNfQkFTRSwKLQkJCQlPUklPTl9QQ0lfTUVNX1NJWkUsIC0xKTsKLX0KLQotLyoKLSAqIFNldHVwIFBDSUUgQkFScyBhbmQgQWRkcmVzcyBEZWNvZGUgV2luczoKLSAqIEJBUlswLDJdIC0+IGRpc2FibGVkLCBCQVJbMV0gLT4gY292ZXJzIGFsbCBEUkFNIGJhbmtzCi0gKiBXSU5bMC0zXSAtPiBEUkFNIGJhbmtbMC0zXQotICovCi12b2lkIF9faW5pdCBvcmlvbl9zZXR1cF9wY2llX3dpbnModm9pZCkKLXsKLQl1MzIgYmFzZSwgc2l6ZSwgaTsKLQotCS8qCi0JICogRmlyc3QsIGRpc2FibGUgYW5kIGNsZWFyIEJBUnMgYW5kIHdpbmRvd3MKLQkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgUENJRV9NQVhfQkFSUzsgaSsrKSB7Ci0JCW9yaW9uX3dyaXRlKFBDSUVfQkFSX0NUUkwoaSksIDApOwotCQlvcmlvbl93cml0ZShQQ0lFX0JBUl9MTyhpKSwgMCk7Ci0JCW9yaW9uX3dyaXRlKFBDSUVfQkFSX0hJKGkpLCAwKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUENJRV9NQVhfV0lOUzsgaSsrKSB7Ci0JCW9yaW9uX3dyaXRlKFBDSUVfV0lOX0NUUkwoaSksIDApOwotCQlvcmlvbl93cml0ZShQQ0lFX1dJTl9CQVNFKGkpLCAwKTsKLQkJb3Jpb25fd3JpdGUoUENJRV9XSU5fUkVNQVAoaSksIDApOwotCX0KLQotCS8qCi0JICogU2V0dXAgd2luZG93cyBmb3IgRERSIGJhbmtzLiBDb3VudCB0b3RhbCBERFIgc2l6ZSBvbiB0aGUgZmx5LgotCSAqLwotCWJhc2UgPSBERFJfUkVHX1RPX0JBU0Uob3Jpb25fcmVhZChERFJfQkFTRV9DUygwKSkpOwotCXNpemUgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBERFJfTUFYX0NTOyBpKyspIHsKLQkJdTMyIGJhbmtfYmFzZSwgYmFua19zaXplOwotCQliYW5rX3NpemUgPSBvcmlvbl9yZWFkKEREUl9TSVpFX0NTKGkpKTsKLQkJYmFua19iYXNlID0gb3Jpb25fcmVhZChERFJfQkFTRV9DUyhpKSk7Ci0JCWlmIChiYW5rX3NpemUgJiBERFJfQkFOS19FTikgewotCQkJYmFua19zaXplID0gRERSX1JFR19UT19TSVpFKGJhbmtfc2l6ZSk7Ci0JCQliYW5rX2Jhc2UgPSBERFJfUkVHX1RPX0JBU0UoYmFua19iYXNlKTsKLQkJCW9yaW9uX3dyaXRlKFBDSUVfV0lOX0JBU0UoaSksIGJhbmtfYmFzZSAmIDB4ZmZmZjAwMDApOwotCQkJb3Jpb25fd3JpdGUoUENJRV9XSU5fUkVNQVAoaSksIDApOwotCQkJb3Jpb25fd3JpdGUoUENJRV9XSU5fQ1RSTChpKSwKLQkJCQkJKChiYW5rX3NpemUtMSkgJiAweGZmZmYwMDAwKSB8Ci0JCQkJCShBVFRSX0REUl9DUyhpKSA8PCA4KSB8Ci0JCQkJCShUQVJHRVRfRERSIDw8IDQpIHwKLQkJCQkJKFBDSUVfRFJBTV9CQVIgPDwgMSkgfCBXSU5fRU4pOwotCQkJc2l6ZSArPSBiYW5rX3NpemU7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNldHVwIEJBUlsxXSB0byBhbGwgRFJBTSBiYW5rcwotCSAqLwotCW9yaW9uX3dyaXRlKFBDSUVfQkFSX0xPKFBDSUVfRFJBTV9CQVIpLCBiYXNlICYgMHhmZmZmMDAwMCk7Ci0Jb3Jpb25fd3JpdGUoUENJRV9CQVJfSEkoUENJRV9EUkFNX0JBUiksIDApOwotCW9yaW9uX3dyaXRlKFBDSUVfQkFSX0NUUkwoUENJRV9EUkFNX0JBUiksCi0JCQkJKChzaXplIC0gMSkgJiAweGZmZmYwMDAwKSB8IFdJTl9FTik7Ci19Ci0KLXZvaWQgX19pbml0IG9yaW9uX3NldHVwX3BjaV93aW5zKHZvaWQpCi17Ci0JdTMyIGJhc2UsIHNpemUsIGk7Ci0KLQkvKgotCSAqIEZpcnN0LCBkaXNhYmxlIHdpbmRvd3MKLQkgKi8KLQlvcmlvbl93cml0ZShQQ0lfQkFSX0VOQUJMRSwgMHhmZmZmZmZmZik7Ci0KLQkvKgotCSAqIFNldHVwIHdpbmRvd3MgZm9yIEREUiBiYW5rcy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgRERSX01BWF9DUzsgaSsrKSB7Ci0JCWJhc2UgPSBvcmlvbl9yZWFkKEREUl9CQVNFX0NTKGkpKTsKLQkJc2l6ZSA9IG9yaW9uX3JlYWQoRERSX1NJWkVfQ1MoaSkpOwotCQlpZiAoc2l6ZSAmIEREUl9CQU5LX0VOKSB7Ci0JCQl1MzIgYnVzLCBkZXYsIGZ1bmMsIHJlZywgdmFsOwotCQkJc2l6ZSA9IEREUl9SRUdfVE9fU0laRShzaXplKTsKLQkJCWJhc2UgPSBERFJfUkVHX1RPX0JBU0UoYmFzZSk7Ci0JCQlidXMgPSBvcmlvbl9wY2lfbG9jYWxfYnVzX25yKCk7Ci0JCQlkZXYgPSBvcmlvbl9wY2lfbG9jYWxfZGV2X25yKCk7Ci0JCQlmdW5jID0gUENJX0NPTkZfRlVOQ19CQVJfQ1MoaSk7Ci0JCQlyZWcgPSBQQ0lfQ09ORl9SRUdfQkFSX0xPX0NTKGkpOwotCQkJb3Jpb25fcGNpX2h3X3JkX2NvbmYoYnVzLCBkZXYsIGZ1bmMsIHJlZywgNCwgJnZhbCk7Ci0JCQlvcmlvbl9wY2lfaHdfd3JfY29uZihidXMsIGRldiwgZnVuYywgcmVnLCA0LAotCQkJCQkoYmFzZSAmIDB4ZmZmZmYwMDApIHwgKHZhbCAmIDB4ZmZmKSk7Ci0JCQlyZWcgPSBQQ0lfQ09ORl9SRUdfQkFSX0hJX0NTKGkpOwotCQkJb3Jpb25fcGNpX2h3X3dyX2NvbmYoYnVzLCBkZXYsIGZ1bmMsIHJlZywgNCwgMCk7Ci0JCQlvcmlvbl93cml0ZShQQ0lfQkFSX1NJWkVfRERSX0NTKGkpLAotCQkJCQkoc2l6ZSAtIDEpICYgMHhmZmZmZjAwMCk7Ci0JCQlvcmlvbl93cml0ZShQQ0lfQkFSX1JFTUFQX0REUl9DUyhpKSwKLQkJCQkJYmFzZSAmIDB4ZmZmZmYwMDApOwotCQkJb3Jpb25fY2xyYml0cyhQQ0lfQkFSX0VOQUJMRSwgKDEgPDwgaSkpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBEaXNhYmxlIGF1dG9tYXRpYyB1cGRhdGUgb2YgYWRkcmVzcyByZW1hcGluZyB3aGVuIHdyaXRpbmcgdG8gQkFScwotCSAqLwotCW9yaW9uX3NldGJpdHMoUENJX0FERFJfREVDT0RFX0NUUkwsIDEpOwotfQotCi12b2lkIF9faW5pdCBvcmlvbl9zZXR1cF91c2Jfd2lucyh2b2lkKQotewotCWludCBpOwotCXUzMiB1c2JfaWYsIGRldiwgcmV2OwotCXUzMiBtYXhfdXNiX2lmID0gMTsKLQotCW9yaW9uX3BjaWVfaWQoJmRldiwgJnJldik7Ci0JaWYgKGRldiA9PSBNVjg4RjUxODJfREVWX0lEKQotCQltYXhfdXNiX2lmID0gMjsKLQotCWZvciAodXNiX2lmID0gMDsgdXNiX2lmIDwgbWF4X3VzYl9pZjsgdXNiX2lmKyspIHsKLQkJLyoKLQkJICogRmlyc3QsIGRpc2FibGUgYW5kIGNsZWFyIHdpbmRvd3MKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX1dJTjsgaSsrKSB7Ci0JCQlvcmlvbl93cml0ZShVU0JfV0lOX0JBU0UodXNiX2lmLCBpKSwgMCk7Ci0JCQlvcmlvbl93cml0ZShVU0JfV0lOX0NUUkwodXNiX2lmLCBpKSwgMCk7Ci0JCX0KLQotCQkvKgotCQkgKiBTZXR1cCB3aW5kb3dzIGZvciBERFIgYmFua3MuCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgRERSX01BWF9DUzsgaSsrKSB7Ci0JCQl1MzIgYmFzZSwgc2l6ZTsKLQkJCXNpemUgPSBvcmlvbl9yZWFkKEREUl9TSVpFX0NTKGkpKTsKLQkJCWJhc2UgPSBvcmlvbl9yZWFkKEREUl9CQVNFX0NTKGkpKTsKLQkJCWlmIChzaXplICYgRERSX0JBTktfRU4pIHsKLQkJCQliYXNlID0gRERSX1JFR19UT19CQVNFKGJhc2UpOwotCQkJCXNpemUgPSBERFJfUkVHX1RPX1NJWkUoc2l6ZSk7Ci0JCQkJb3Jpb25fd3JpdGUoVVNCX1dJTl9DVFJMKHVzYl9pZiwgaSksCi0JCQkJCQkoKHNpemUtMSkgJiAweGZmZmYwMDAwKSB8Ci0JCQkJCQkoQVRUUl9ERFJfQ1MoaSkgPDwgOCkgfAotCQkJCQkJKFRBUkdFVF9ERFIgPDwgNCkgfCBXSU5fRU4pOwotCQkJCW9yaW9uX3dyaXRlKFVTQl9XSU5fQkFTRSh1c2JfaWYsIGkpLAotCQkJCQkJYmFzZSAmIDB4ZmZmZjAwMDApOwotCQkJfQotCQl9Ci0JfQotfQotCi12b2lkIF9faW5pdCBvcmlvbl9zZXR1cF9ldGhfd2lucyh2b2lkKQotewotCWludCBpOwotCi0JLyoKLQkgKiBGaXJzdCwgZGlzYWJsZSBhbmQgY2xlYXIgd2luZG93cwotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBFVEhfTUFYX1dJTjsgaSsrKSB7Ci0JCW9yaW9uX3dyaXRlKEVUSF9XSU5fQkFTRShpKSwgMCk7Ci0JCW9yaW9uX3dyaXRlKEVUSF9XSU5fU0laRShpKSwgMCk7Ci0JCW9yaW9uX3NldGJpdHMoRVRIX1dJTl9FTiwgMSA8PCBpKTsKLQkJb3Jpb25fY2xyYml0cyhFVEhfV0lOX1BST1QsIDB4MyA8PCAoaSAqIDIpKTsKLQkJaWYgKGkgPCBFVEhfTUFYX1JFTUFQX1dJTikKLQkJCW9yaW9uX3dyaXRlKEVUSF9XSU5fUkVNQVAoaSksIDApOwotCX0KLQotCS8qCi0JICogU2V0dXAgd2luZG93cyBmb3IgRERSIGJhbmtzLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBERFJfTUFYX0NTOyBpKyspIHsKLQkJdTMyIGJhc2UsIHNpemU7Ci0JCXNpemUgPSBvcmlvbl9yZWFkKEREUl9TSVpFX0NTKGkpKTsKLQkJYmFzZSA9IG9yaW9uX3JlYWQoRERSX0JBU0VfQ1MoaSkpOwotCQlpZiAoc2l6ZSAmIEREUl9CQU5LX0VOKSB7Ci0JCQliYXNlID0gRERSX1JFR19UT19CQVNFKGJhc2UpOwotCQkJc2l6ZSA9IEREUl9SRUdfVE9fU0laRShzaXplKTsKLQkJCW9yaW9uX3dyaXRlKEVUSF9XSU5fU0laRShpKSwgKHNpemUtMSkgJiAweGZmZmYwMDAwKTsKLQkJCW9yaW9uX3dyaXRlKEVUSF9XSU5fQkFTRShpKSwgKGJhc2UgJiAweGZmZmYwMDAwKSB8Ci0JCQkJCShBVFRSX0REUl9DUyhpKSA8PCA4KSB8Ci0JCQkJCVRBUkdFVF9ERFIpOwotCQkJb3Jpb25fY2xyYml0cyhFVEhfV0lOX0VOLCAxIDw8IGkpOwotCQkJb3Jpb25fc2V0Yml0cyhFVEhfV0lOX1BST1QsIDB4MyA8PCAoaSAqIDIpKTsKLQkJfQotCX0KLX0KLQotdm9pZCBfX2luaXQgb3Jpb25fc2V0dXBfc2F0YV93aW5zKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIEZpcnN0LCBkaXNhYmxlIGFuZCBjbGVhciB3aW5kb3dzCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFNBVEFfTUFYX1dJTjsgaSsrKSB7Ci0JCW9yaW9uX3dyaXRlKFNBVEFfV0lOX0JBU0UoaSksIDApOwotCQlvcmlvbl93cml0ZShTQVRBX1dJTl9DVFJMKGkpLCAwKTsKLQl9Ci0KLQkvKgotCSAqIFNldHVwIHdpbmRvd3MgZm9yIEREUiBiYW5rcy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgRERSX01BWF9DUzsgaSsrKSB7Ci0JCXUzMiBiYXNlLCBzaXplOwotCQlzaXplID0gb3Jpb25fcmVhZChERFJfU0laRV9DUyhpKSk7Ci0JCWJhc2UgPSBvcmlvbl9yZWFkKEREUl9CQVNFX0NTKGkpKTsKLQkJaWYgKHNpemUgJiBERFJfQkFOS19FTikgewotCQkJYmFzZSA9IEREUl9SRUdfVE9fQkFTRShiYXNlKTsKLQkJCXNpemUgPSBERFJfUkVHX1RPX1NJWkUoc2l6ZSk7Ci0JCQlvcmlvbl93cml0ZShTQVRBX1dJTl9DVFJMKGkpLAotCQkJCQkoKHNpemUtMSkgJiAweGZmZmYwMDAwKSB8Ci0JCQkJCShBVFRSX0REUl9DUyhpKSA8PCA4KSB8Ci0JCQkJCShUQVJHRVRfRERSIDw8IDQpIHwgV0lOX0VOKTsKLQkJCW9yaW9uX3dyaXRlKFNBVEFfV0lOX0JBU0UoaSksCi0JCQkJCWJhc2UgJiAweGZmZmYwMDAwKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb24vY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uL2NvbW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjBlZTRiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb24vY29tbW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtb3Jpb24vY29tbW9uLmMKLSAqCi0gKiBDb3JlIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBPcmlvbiBTeXN0ZW0gT24gQ2hpcAotICoKLSAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+Ci0jaW5jbHVkZSA8bGludXgvbXY2NDN4eF9pMmMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSS9PIEFkZHJlc3MgTWFwcGluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9yaW9uX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBPUklPTl9SRUdTX1ZJUlRfQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9SSU9OX1JFR1NfUEhZU19CQVNFKSwKLQkJLmxlbmd0aAkJPSBPUklPTl9SRUdTX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi0JewotCQkudmlydHVhbAk9IE9SSU9OX1BDSUVfSU9fVklSVF9CQVNFLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oT1JJT05fUENJRV9JT19QSFlTX0JBU0UpLAotCQkubGVuZ3RoCQk9IE9SSU9OX1BDSUVfSU9fU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLQl7Ci0JCS52aXJ0dWFsCT0gT1JJT05fUENJX0lPX1ZJUlRfQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9SSU9OX1BDSV9JT19QSFlTX0JBU0UpLAotCQkubGVuZ3RoCQk9IE9SSU9OX1BDSV9JT19TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LAotCXsKLQkJLnZpcnR1YWwJPSBPUklPTl9QQ0lFX1dBX1ZJUlRfQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9SSU9OX1BDSUVfV0FfUEhZU19CQVNFKSwKLQkJLmxlbmd0aAkJPSBPUklPTl9QQ0lFX1dBX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi19OwotCi12b2lkIF9faW5pdCBvcmlvbl9tYXBfaW8odm9pZCkKLXsKLQlpb3RhYmxlX2luaXQob3Jpb25faW9fZGVzYywgQVJSQVlfU0laRShvcmlvbl9pb19kZXNjKSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVUFSVAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Jpb25fdWFydF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAkJPSBVQVJUMF9QSFlTX0JBU0UsCi0JCS5lbmQJCT0gVUFSVDBfUEhZU19CQVNFICsgMHhmZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gSVJRX09SSU9OX1VBUlQwLAotCQkuZW5kCQk9IElSUV9PUklPTl9VQVJUMCwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JewotCQkuc3RhcnQJCT0gVUFSVDFfUEhZU19CQVNFLAotCQkuZW5kCQk9IFVBUlQxX1BIWVNfQkFTRSArIDB4ZmYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IElSUV9PUklPTl9VQVJUMSwKLQkJLmVuZAkJPSBJUlFfT1JJT05fVUFSVDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBvcmlvbl91YXJ0X2RhdGFbXSA9IHsKLQl7Ci0JCS5tYXBiYXNlCT0gVUFSVDBfUEhZU19CQVNFLAotCQkubWVtYmFzZQk9IChjaGFyICopVUFSVDBfVklSVF9CQVNFLAotCQkuaXJxCQk9IElSUV9PUklPTl9VQVJUMCwKLQkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QgfCBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJLnJlZ3NoaWZ0CT0gMiwKLQkJLnVhcnRjbGsJPSBPUklPTl9UQ0xLLAotCX0sCi0JewotCQkubWFwYmFzZQk9IFVBUlQxX1BIWVNfQkFTRSwKLQkJLm1lbWJhc2UJPSAoY2hhciAqKVVBUlQxX1ZJUlRfQkFTRSwKLQkJLmlycQkJPSBJUlFfT1JJT05fVUFSVDEsCi0JCS5mbGFncwkJPSBVUEZfU0tJUF9URVNUIHwgVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCS5yZWdzaGlmdAk9IDIsCi0JCS51YXJ0Y2xrCT0gT1JJT05fVENMSywKLQl9LAotCXsgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uX3VhcnQgPSB7Ci0JLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKLQkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKLQkuZGV2CQkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gb3Jpb25fdWFydF9kYXRhLAotCX0sCi0JLnJlc291cmNlCQk9IG9yaW9uX3VhcnRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUob3Jpb25fdWFydF9yZXNvdXJjZXMpLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFVTQiBDb250cm9sbGVyIC0gMiBpbnRlcmZhY2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9yaW9uX2VoY2kwX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gT1JJT05fVVNCMF9QSFlTX0JBU0UsCi0JCS5lbmQJPSBPUklPTl9VU0IwX1BIWVNfQkFTRSArIFNaXzRLLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gSVJRX09SSU9OX1VTQjBfQ1RSTCwKLQkJLmVuZAk9IElSUV9PUklPTl9VU0IwX0NUUkwsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9yaW9uX2VoY2kxX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gT1JJT05fVVNCMV9QSFlTX0JBU0UsCi0JCS5lbmQJPSBPUklPTl9VU0IxX1BIWVNfQkFTRSArIFNaXzRLLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gSVJRX09SSU9OX1VTQjFfQ1RSTCwKLQkJLmVuZAk9IElSUV9PUklPTl9VU0IxX0NUUkwsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgdTY0IGVoY2lfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Jpb25fZWhjaTAgPSB7Ci0JLm5hbWUJCT0gIm9yaW9uLWVoY2kiLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkuZG1hX21hc2sJCT0gJmVoY2lfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKLQl9LAotCS5yZXNvdXJjZQk9IG9yaW9uX2VoY2kwX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3Jpb25fZWhjaTBfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uX2VoY2kxID0gewotCS5uYW1lCQk9ICJvcmlvbi1laGNpIiwKLQkuaWQJCT0gMSwKLQkuZGV2CQk9IHsKLQkJLmRtYV9tYXNrCQk9ICZlaGNpX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCi0JfSwKLQkucmVzb3VyY2UJPSBvcmlvbl9laGNpMV9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9yaW9uX2VoY2kxX3Jlc291cmNlcyksCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydAotICogKFRoZSBPcmlvbiBhbmQgRGlzY292ZXJ5IChNVjY0M3h4KSBmYW1pbGllcyB1c2UgdGhlIHNhbWUgRXRoZXJuZXQgZHJpdmVyKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Jpb25fZXRoX3NoYXJlZF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IE9SSU9OX0VUSF9QSFlTX0JBU0UsCi0JCS5lbmQJPSBPUklPTl9FVEhfUEhZU19CQVNFICsgMHhmZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Jpb25fZXRoX3NoYXJlZCA9IHsKLQkubmFtZQkJPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gb3Jpb25fZXRoX3NoYXJlZF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9yaW9uX2V0aF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5uYW1lCT0gImV0aCBpcnEiLAotCQkuc3RhcnQJPSBJUlFfT1JJT05fRVRIX1NVTSwKLQkJLmVuZAk9IElSUV9PUklPTl9FVEhfU1VNLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbl9ldGggPSB7Ci0JLm5hbWUJCT0gTVY2NDNYWF9FVEhfTkFNRSwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gb3Jpb25fZXRoX3Jlc291cmNlcywKLX07Ci0KLXZvaWQgX19pbml0IG9yaW9uX2V0aF9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKLXsKLQlvcmlvbl9ldGguZGV2LnBsYXRmb3JtX2RhdGEgPSBldGhfZGF0YTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uX2V0aF9zaGFyZWQpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb25fZXRoKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJMkMgY29udHJvbGxlcgotICogKFRoZSBPcmlvbiBhbmQgRGlzY292ZXJ5IChNVjY0M3h4KSBmYW1pbGllcyBzaGFyZSB0aGUgc2FtZSBJMkMgY29udHJvbGxlcikKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhIG9yaW9uX2kyY19wZGF0YSA9IHsKLQkuZnJlcV9tCQk9IDgsIC8qIGFzc3VtZXMgMTY2IE1IeiBUQ0xLICovCi0JLmZyZXFfbgkJPSAzLAotCS50aW1lb3V0CT0gMTAwMCwgLyogRGVmYXVsdCB0aW1lb3V0IG9mIDEgc2Vjb25kICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9yaW9uX2kyY19yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5uYW1lICAgPSAiaTJjIGJhc2UiLAotCQkuc3RhcnQgID0gSTJDX1BIWVNfQkFTRSwKLQkJLmVuZCAgICA9IEkyQ19QSFlTX0JBU0UgKyAweDIwIC0xLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5uYW1lICAgPSAiaTJjIGlycSIsCi0JCS5zdGFydCAgPSBJUlFfT1JJT05fSTJDLAotCQkuZW5kICAgID0gSVJRX09SSU9OX0kyQywKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbl9pMmMgPSB7Ci0JLm5hbWUJCT0gTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvcmlvbl9pMmNfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBvcmlvbl9pMmNfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZvcmlvbl9pMmNfcGRhdGEsCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU2F0YSBwb3J0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Jpb25fc2F0YV9yZXNvdXJjZXNbXSA9IHsKLSAgICAgICAgewotICAgICAgICAgICAgICAgIC5uYW1lICAgPSAic2F0YSBiYXNlIiwKLSAgICAgICAgICAgICAgICAuc3RhcnQgID0gT1JJT05fU0FUQV9QSFlTX0JBU0UsCi0gICAgICAgICAgICAgICAgLmVuZCAgICA9IE9SSU9OX1NBVEFfUEhZU19CQVNFICsgMHg1MDAwIC0gMSwKLSAgICAgICAgICAgICAgICAuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0gICAgICAgIH0sCi0JewotICAgICAgICAgICAgICAgIC5uYW1lICAgPSAic2F0YSBpcnEiLAotICAgICAgICAgICAgICAgIC5zdGFydCAgPSBJUlFfT1JJT05fU0FUQSwKLSAgICAgICAgICAgICAgICAuZW5kICAgID0gSVJRX09SSU9OX1NBVEEsCi0gICAgICAgICAgICAgICAgLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotICAgICAgICB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Jpb25fc2F0YSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAic2F0YV9tdiIsCi0JLmlkICAgICAgICAgICAgID0gMCwKLQkuZGV2CQk9IHsKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUob3Jpb25fc2F0YV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IG9yaW9uX3NhdGFfcmVzb3VyY2VzLAotfTsKLQotdm9pZCBfX2luaXQgb3Jpb25fc2F0YV9pbml0KHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgKnNhdGFfZGF0YSkKLXsKLQlvcmlvbl9zYXRhLmRldi5wbGF0Zm9ybV9kYXRhID0gc2F0YV9kYXRhOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb25fc2F0YSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJhbAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBJZGVudGlmeSBkZXZpY2UgSUQgYW5kIHJldiBmcm9tIFBDSUUgY29uZmlndXJhdGlvbiBoZWFkZXIgc3BhY2UgJzAnLgotICovCi1zdGF0aWMgdm9pZCBvcmlvbl9pZCh1MzIgKmRldiwgdTMyICpyZXYsIGNoYXIgKipkZXZfbmFtZSkKLXsKLQlvcmlvbl9wY2llX2lkKGRldiwgcmV2KTsKLQotCWlmICgqZGV2ID09IE1WODhGNTI4MV9ERVZfSUQpIHsKLQkJaWYgKCpyZXYgPT0gTVY4OEY1MjgxX1JFVl9EMikgewotCQkJKmRldl9uYW1lID0gIk1WODhGNTI4MS1EMiI7Ci0JCX0gZWxzZSBpZiAoKnJldiA9PSBNVjg4RjUyODFfUkVWX0QxKSB7Ci0JCQkqZGV2X25hbWUgPSAiTVY4OEY1MjgxLUQxIjsKLQkJfSBlbHNlIHsKLQkJCSpkZXZfbmFtZSA9ICJNVjg4RjUyODEtUmV2LVVuc3VwcG9ydGVkIjsKLQkJfQotCX0gZWxzZSBpZiAoKmRldiA9PSBNVjg4RjUxODJfREVWX0lEKSB7Ci0JCWlmICgqcmV2ID09IE1WODhGNTE4Ml9SRVZfQTIpIHsKLQkJCSpkZXZfbmFtZSA9ICJNVjg4RjUxODItQTIiOwotCQl9IGVsc2UgewotCQkJKmRldl9uYW1lID0gIk1WODhGNTE4Mi1SZXYtVW5zdXBwb3J0ZWQiOwotCQl9Ci0JfSBlbHNlIGlmICgqZGV2ID09IE1WODhGNTE4MV9ERVZfSUQpIHsKLQkJaWYgKCpyZXYgPT0gTVY4OEY1MTgxX1JFVl9CMSkgewotCQkJKmRldl9uYW1lID0gIk1WODhGNTE4MS1SZXYtQjEiOwotCQl9IGVsc2UgewotCQkJKmRldl9uYW1lID0gIk1WODhGNTE4MS1SZXYtVW5zdXBwb3J0ZWQiOwotCQl9Ci0JfSBlbHNlIHsKLQkJKmRldl9uYW1lID0gIkRldmljZS1Vbmtub3duIjsKLQl9Ci19Ci0KLXZvaWQgX19pbml0IG9yaW9uX2luaXQodm9pZCkKLXsKLQljaGFyICpkZXZfbmFtZTsKLQl1MzIgZGV2LCByZXY7Ci0KLQlvcmlvbl9pZCgmZGV2LCAmcmV2LCAmZGV2X25hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIk9yaW9uIElEOiAlcy4gVENMSz0lZC5cbiIsIGRldl9uYW1lLCBPUklPTl9UQ0xLKTsKLQotCS8qCi0JICogU2V0dXAgT3Jpb24gYWRkcmVzcyBtYXAKLQkgKi8KLQlvcmlvbl9zZXR1cF9jcHVfd2lucygpOwotCW9yaW9uX3NldHVwX3VzYl93aW5zKCk7Ci0Jb3Jpb25fc2V0dXBfZXRoX3dpbnMoKTsKLQlvcmlvbl9zZXR1cF9wY2lfd2lucygpOwotCW9yaW9uX3NldHVwX3BjaWVfd2lucygpOwotCWlmIChkZXYgPT0gTVY4OEY1MTgyX0RFVl9JRCkKLQkJb3Jpb25fc2V0dXBfc2F0YV93aW5zKCk7Ci0KLQkvKgotCSAqIFJFZ2lzdGVyIGRldmljZXMKLQkgKi8KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uX3VhcnQpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb25fZWhjaTApOwotCWlmIChkZXYgPT0gTVY4OEY1MTgyX0RFVl9JRCkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbl9laGNpMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbl9pMmMpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb3Jpb24vY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMTU0ZWM4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb24vY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0jaWZuZGVmIF9fQVJDSF9PUklPTl9DT01NT05fSF9fCi0jZGVmaW5lIF9fQVJDSF9PUklPTl9DT01NT05fSF9fCi0KLS8qCi0gKiBCYXNpYyBPcmlvbiBpbml0IGZ1bmN0aW9ucyB1c2VkIGVhcmx5IGJ5IG1hY2hpbmUtc2V0dXAuCi0gKi8KLQotdm9pZCBfX2luaXQgb3Jpb25fbWFwX2lvKHZvaWQpOwotdm9pZCBfX2luaXQgb3Jpb25faW5pdF9pcnEodm9pZCk7Ci12b2lkIF9faW5pdCBvcmlvbl9pbml0KHZvaWQpOwotCi0vKgotICogRW51bWVyYXRpb25zIGFuZCBmdW5jdGlvbnMgZm9yIE9yaW9uIHdpbmRvd3MgbWFwcGluZy4gVXNlZCBieSBPcmlvbiBjb3JlCi0gKiBmdW5jdGlvbnMgdG8gbWFwIGl0cyBpbnRlcmZhY2VzIGFuZCBieSB0aGUgbWFjaGluZS1zZXR1cCB0byBtYXAgaXRzIG9uLQotICogYm9hcmQgZGV2aWNlcy4gRGV0YWlscyBpbiAvbWFjaC1vcmlvbi9hZGRyLW1hcC5jCi0gKi8KLQotZW51bSBvcmlvbl90YXJnZXQgewotCU9SSU9OX0RFVl9CT09UID0gMCwKLQlPUklPTl9ERVYwLAotCU9SSU9OX0RFVjEsCi0JT1JJT05fREVWMiwKLQlPUklPTl9QQ0lFX01FTSwKLQlPUklPTl9QQ0lFX0lPLAotCU9SSU9OX1BDSV9NRU0sCi0JT1JJT05fUENJX0lPLAotCU9SSU9OX0REUiwKLQlPUklPTl9SRUdTLAotCU9SSU9OX01BWF9UQVJHRVRTCi19OwotCi12b2lkIG9yaW9uX3NldHVwX2NwdV93aW4oZW51bSBvcmlvbl90YXJnZXQgdGFyZ2V0LCB1MzIgYmFzZSwgdTMyIHNpemUsIGludCByZW1hcCk7Ci12b2lkIG9yaW9uX3NldHVwX2NwdV93aW5zKHZvaWQpOwotdm9pZCBvcmlvbl9zZXR1cF9ldGhfd2lucyh2b2lkKTsKLXZvaWQgb3Jpb25fc2V0dXBfdXNiX3dpbnModm9pZCk7Ci12b2lkIG9yaW9uX3NldHVwX3BjaV93aW5zKHZvaWQpOwotdm9pZCBvcmlvbl9zZXR1cF9wY2llX3dpbnModm9pZCk7Ci12b2lkIG9yaW9uX3NldHVwX3NhdGFfd2lucyh2b2lkKTsKLQotLyoKLSAqIFNoYXJlZCBjb2RlIHVzZWQgaW50ZXJuYWxseSBieSBvdGhlciBPcmlvbiBjb3JlIGZ1bmN0aW9ucy4KLSAqICgvbWFjaC1vcmlvbi9wY2kuYykKLSAqLwotCi1zdHJ1Y3QgcGNpX3N5c19kYXRhOwotc3RydWN0IHBjaV9idXM7Ci0KLXZvaWQgb3Jpb25fcGNpZV9pZCh1MzIgKmRldiwgdTMyICpyZXYpOwotdTMyIG9yaW9uX3BjaWVfbG9jYWxfYnVzX25yKHZvaWQpOwotdTMyIG9yaW9uX3BjaV9sb2NhbF9idXNfbnIodm9pZCk7Ci11MzIgb3Jpb25fcGNpX2xvY2FsX2Rldl9ucih2b2lkKTsKLWludCBvcmlvbl9wY2lfc3lzX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKTsKLXN0cnVjdCBwY2lfYnVzICpvcmlvbl9wY2lfc3lzX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKTsKLWludCBvcmlvbl9wY2lfaHdfcmRfY29uZih1MzIgYnVzLCB1MzIgZGV2LCB1MzIgZnVuYywgdTMyIHdoZXJlLCB1MzIgc2l6ZSwgdTMyICp2YWwpOwotaW50IG9yaW9uX3BjaV9od193cl9jb25mKHUzMiBidXMsIHUzMiBkZXYsIHUzMiBmdW5jLCB1MzIgd2hlcmUsIHUzMiBzaXplLCB1MzIgdmFsKTsKLQotLyoKLSAqIFZhbGlkIEdQSU8gcGlucyBhY2NvcmRpbmcgdG8gTVBQIHNldHVwLCB1c2VkIGJ5IG1hY2hpbmUtc2V0dXAuCi0gKiAoL21hY2gtb3Jpb24vZ3Bpby5jKS4KLSAqLwotCi12b2lkIF9faW5pdCBvcmlvbl9ncGlvX3NldF92YWxpZF9waW5zKHUzMiBwaW5zKTsKLXZvaWQgZ3Bpb19kaXNwbGF5KHZvaWQpOwkvKiBkZWJ1ZyAqLwotCi0vKgotICogT3Jpb24gc3lzdGVtIHRpbWVyIChjbG9ja3NvdXJjZSArIGNsb2NrZXZudCwgL21hY2gtb3Jpb24vdGltZS5jKQotICovCi1leHRlcm4gc3RydWN0IHN5c190aW1lciBvcmlvbl90aW1lcjsKLQotLyoKLSAqIFB1bGwgaW4gT3Jpb24gRXRoZXJuZXQgcGxhdGZvcm1fZGF0YSwgdXNlZCBieSBtYWNoaW5lLXNldHVwCi0gKi8KLQotc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGE7Ci0KLXZvaWQgX19pbml0IG9yaW9uX2V0aF9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSk7Ci0KLS8qCi0gKiBPcmlvbiBTYXRhIHBsYXRmb3JtX2RhdGEsIHVzZWQgYnkgbWFjaGluZS1zZXR1cAotICovCi0KLXN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGE7Ci0KLXZvaWQgX19pbml0IG9yaW9uX3NhdGFfaW5pdChzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhICpzYXRhX2RhdGEpOwotCi0jZW5kaWYgLyogX19BUkNIX09SSU9OX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb24vZGI4OGY1MjgxLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uL2RiODhmNTI4MS1zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWY0NGUxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb24vZGI4OGY1MjgxLXNldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjQgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtb3Jpb24vZGI4OGY1MjgxLXNldHVwLmMKLSAqCi0gKiBNYXJ2ZWxsIE9yaW9uLTIgRGV2ZWxvcG1lbnQgQm9hcmQgU2V0dXAKLSAqCi0gKiBNYWludGFpbmVyOiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KLSNpbmNsdWRlICJjb21tb24uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEQi04OEY1MjgxIG9uIGJvYXJkIGRldmljZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogNTEySyBOT1IgZmxhc2ggRGV2aWNlIGJ1cyBib290IGNoaXAgc2VsZWN0Ci0gKi8KLQotI2RlZmluZSBEQjg4RjUyODFfTk9SX0JPT1RfQkFTRQkJMHhmNDAwMDAwMAotI2RlZmluZSBEQjg4RjUyODFfTk9SX0JPT1RfU0laRQkJU1pfNTEySwotCi0vKgotICogNy1TZWdtZW50IG9uIERldmljZSBidXMgY2hpcCBzZWxlY3QgMAotICovCi0KLSNkZWZpbmUgREI4OEY1MjgxXzdTRUdfQkFTRQkJMHhmYTAwMDAwMAotI2RlZmluZSBEQjg4RjUyODFfN1NFR19TSVpFCQlTWl8xSwotCi0vKgotICogMzJNIE5PUiBmbGFzaCBvbiBEZXZpY2UgYnVzIGNoaXAgc2VsZWN0IDEKLSAqLwotCi0jZGVmaW5lIERCODhGNTI4MV9OT1JfQkFTRQkJMHhmYzAwMDAwMAotI2RlZmluZSBEQjg4RjUyODFfTk9SX1NJWkUJCVNaXzMyTQotCi0vKgotICogMzJNIE5BTkQgZmxhc2ggb24gRGV2aWNlIGJ1cyBjaGlwIHNlbGVjdCAyCi0gKi8KLQotI2RlZmluZSBEQjg4RjUyODFfTkFORF9CQVNFCQkweGZhODAwMDAwCi0jZGVmaW5lIERCODhGNTI4MV9OQU5EX1NJWkUJCVNaXzFLCi0KLS8qCi0gKiBQQ0kKLSAqLwotCi0jZGVmaW5lIERCODhGNTI4MV9QQ0lfU0xPVDBfT0ZGUwkJNwotI2RlZmluZSBEQjg4RjUyODFfUENJX1NMT1QwX0lSUV9QSU4JCTEyCi0jZGVmaW5lIERCODhGNTI4MV9QQ0lfU0xPVDFfU0xPVDJfSVJRX1BJTgkxMwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIDUxMk0gTk9SIEZsYXNoIG9uIERldmljZSBidXMgQm9vdCBDUwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGRiODhmNTI4MV9ib290X2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDEsCS8qIDggYml0IGJ1cyB3aWR0aCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYjg4ZjUyODFfYm9vdF9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0CQk9IERCODhGNTI4MV9OT1JfQk9PVF9CQVNFLAotCS5lbmQJCT0gREI4OEY1MjgxX05PUl9CT09UX0JBU0UgKyBEQjg4RjUyODFfTk9SX0JPT1RfU0laRSAtIDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjg4ZjUyODFfYm9vdF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmRiODhmNTI4MV9ib290X2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJmRiODhmNTI4MV9ib290X2ZsYXNoX3Jlc291cmNlLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAzMk0gTk9SIEZsYXNoIG9uIERldmljZSBidXMgQ1MxCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZGI4OGY1MjgxX25vcl9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSA0LAkvKiAzMiBiaXQgYnVzIHdpZHRoICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiODhmNTI4MV9ub3JfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCS5zdGFydAkJPSBEQjg4RjUyODFfTk9SX0JBU0UsCi0JLmVuZAkJPSBEQjg4RjUyODFfTk9SX0JBU0UgKyBEQjg4RjUyODFfTk9SX1NJWkUgLSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGI4OGY1MjgxX25vcl9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmRiODhmNTI4MV9ub3JfZmxhc2hfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmZGI4OGY1MjgxX25vcl9mbGFzaF9yZXNvdXJjZSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogMzJNIE5BTkQgRmxhc2ggb24gRGV2aWNlIGJ1cyBDUzIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGI4OGY1MjgxX25hbmRfcGFydHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImtlcm5lbCIsCi0JCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9IFNaXzJNLAotCX0sCi0JewotCQkubmFtZSA9ICJyb290IiwKLQkJLm9mZnNldCA9IFNaXzJNLAotCQkuc2l6ZSA9IChTWl8xNk0gLSBTWl8yTSksCi0JfSwKLQl7Ci0JCS5uYW1lID0gInVzZXIiLAotCQkub2Zmc2V0ID0gU1pfMTZNLAotCQkuc2l6ZSA9IFNaXzhNLAotCX0sCi0JewotCQkubmFtZSA9ICJyZWNvdmVyeSIsCi0JCS5vZmZzZXQgPSAoU1pfMTZNICsgU1pfOE0pLAotCQkuc2l6ZSA9IFNaXzhNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGRiODhmNTI4MV9uYW5kX3Jlc291cmNlID0gewotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkuc3RhcnQJCT0gREI4OEY1MjgxX05BTkRfQkFTRSwKLQkuZW5kCQk9IERCODhGNTI4MV9OQU5EX0JBU0UgKyBEQjg4RjUyODFfTkFORF9TSVpFIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb3Jpb25fbmFuZF9kYXRhIGRiODhmNTI4MV9uYW5kX2RhdGEgPSB7Ci0JLnBhcnRzCQk9IGRiODhmNTI4MV9uYW5kX3BhcnRzLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZGI4OGY1MjgxX25hbmRfcGFydHMpLAotCS5jbGUJCT0gMCwKLQkuYWxlCQk9IDEsCi0JLndpZHRoCQk9IDgsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjg4ZjUyODFfbmFuZF9mbGFzaCA9IHsKLQkubmFtZQkJPSAib3Jpb25fbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZkYjg4ZjUyODFfbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gJmRiODhmNTI4MV9uYW5kX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogNy1TZWdtZW50IG9uIERldmljZSBidXMgQ1MwCi0gKiBEdW1teSBjb3VudGVyIGV2ZXJ5IDIgc2VjCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgX19pb21lbSAqZGI4OGY1MjgxXzdzZWc7Ci1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgZGI4OGY1MjgxX3RpbWVyOwotCi1zdGF0aWMgdm9pZCBkYjg4ZjUyODFfN3NlZ19ldmVudCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RhdGljIGludCBjb3VudCA9IDA7Ci0Jd3JpdGVsKDAsIGRiODhmNTI4MV83c2VnICsgKGNvdW50IDw8IDQpKTsKLQljb3VudCA9IChjb3VudCArIDEpICYgNzsKLQltb2RfdGltZXIoJmRiODhmNTI4MV90aW1lciwgamlmZmllcyArIDIgKiBIWik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRiODhmNTI4MV83c2VnX2luaXQodm9pZCkKLXsKLQlpZiAobWFjaGluZV9pc19kYjg4ZjUyODEoKSkgewotCQlkYjg4ZjUyODFfN3NlZyA9IGlvcmVtYXAoREI4OEY1MjgxXzdTRUdfQkFTRSwKLQkJCQkJREI4OEY1MjgxXzdTRUdfU0laRSk7Ci0JCWlmICghZGI4OGY1MjgxXzdzZWcpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGlvcmVtYXAgZGI4OGY1MjgxXzdzZWdcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJc2V0dXBfdGltZXIoJmRiODhmNTI4MV90aW1lciwgZGI4OGY1MjgxXzdzZWdfZXZlbnQsIDApOwotCQltb2RfdGltZXIoJmRiODhmNTI4MV90aW1lciwgamlmZmllcyArIDIgKiBIWik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLV9faW5pdGNhbGwoZGI4OGY1MjgxXzdzZWdfaW5pdCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUENJCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCBfX2luaXQgZGI4OGY1MjgxX3BjaV9wcmVpbml0KHZvaWQpCi17Ci0JaW50IHBpbjsKLQotCS8qCi0JICogQ29uZmlndXJlIFBDSSBHUElPIElSUSBwaW5zCi0JICovCi0JcGluID0gREI4OEY1MjgxX1BDSV9TTE9UMF9JUlFfUElOOwotCWlmIChncGlvX3JlcXVlc3QocGluLCAiUENJIEludDEiKSA9PSAwKSB7Ci0JCWlmIChncGlvX2RpcmVjdGlvbl9pbnB1dChwaW4pID09IDApIHsKLQkJCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShwaW4pLCBJUlFUX0xPVyk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImRiODhmNTI4MV9wY2lfcHJlaW5pdCBmYWllbGQgdG8gIgotCQkJCQkic2V0X2lycV90eXBlIHBpbiAlZFxuIiwgcGluKTsKLQkJCWdwaW9fZnJlZShwaW4pOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkYjg4ZjUyODFfcGNpX3ByZWluaXQgZmFpbGVkIHRvIGdwaW9fcmVxdWVzdCAlZFxuIiwgcGluKTsKLQl9Ci0KLQlwaW4gPSBEQjg4RjUyODFfUENJX1NMT1QxX1NMT1QyX0lSUV9QSU47Ci0JaWYgKGdwaW9fcmVxdWVzdChwaW4sICJQQ0kgSW50MiIpID09IDApIHsKLQkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbikgPT0gMCkgewotCQkJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHBpbiksIElSUVRfTE9XKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZGI4OGY1MjgxX3BjaV9wcmVpbml0IGZhaWVsZCAiCi0JCQkJCSJ0byBzZXRfaXJxX3R5cGUgcGluICVkXG4iLCBwaW4pOwotCQkJZ3Bpb19mcmVlKHBpbik7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImRiODhmNTI4MV9wY2lfcHJlaW5pdCBmYWlsZWQgdG8gZ3Bpb19yZXF1ZXN0ICVkXG4iLCBwaW4pOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgZGI4OGY1MjgxX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQkvKgotCSAqIFBDSUUgSVJRIGlzIGNvbm5lY3RlZCBpbnRlcm5hbGx5IChub3QgR1BJTykKLQkgKi8KLQlpZiAoZGV2LT5idXMtPm51bWJlciA9PSBvcmlvbl9wY2llX2xvY2FsX2J1c19ucigpKQotCQlyZXR1cm4gSVJRX09SSU9OX1BDSUUwX0lOVDsKLQotCS8qCi0JICogUENJIElSUXMgYXJlIGNvbm5lY3RlZCB2aWEgR1BJT3MKLQkgKi8KLQlzd2l0Y2ggKHNsb3QgLSBEQjg4RjUyODFfUENJX1NMT1QwX09GRlMpIHsKLQljYXNlIDA6Ci0JCXJldHVybiBncGlvX3RvX2lycShEQjg4RjUyODFfUENJX1NMT1QwX0lSUV9QSU4pOwotCWNhc2UgMToKLQljYXNlIDI6Ci0JCXJldHVybiBncGlvX3RvX2lycShEQjg4RjUyODFfUENJX1NMT1QxX1NMT1QyX0lSUV9QSU4pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtMTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfcGNpIGRiODhmNTI4MV9wY2kgX19pbml0ZGF0YSA9IHsKLQkubnJfY29udHJvbGxlcnMJPSAyLAotCS5wcmVpbml0CT0gZGI4OGY1MjgxX3BjaV9wcmVpbml0LAotCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAotCS5zZXR1cAkJPSBvcmlvbl9wY2lfc3lzX3NldHVwLAotCS5zY2FuCQk9IG9yaW9uX3BjaV9zeXNfc2Nhbl9idXMsCi0JLm1hcF9pcnEJPSBkYjg4ZjUyODFfcGNpX21hcF9pcnEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkYjg4ZjUyODFfcGNpX2luaXQodm9pZCkKLXsKLQlpZiAobWFjaGluZV9pc19kYjg4ZjUyODEoKSkKLQkJcGNpX2NvbW1vbl9pbml0KCZkYjg4ZjUyODFfcGNpKTsKLQotCXJldHVybiAwOwotfQotCi1zdWJzeXNfaW5pdGNhbGwoZGI4OGY1MjgxX3BjaV9pbml0KTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFdGhlcm5ldAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZGI4OGY1MjgxX2V0aF9kYXRhID0gewotCS5waHlfYWRkcgk9IDgsCi0JLmZvcmNlX3BoeV9hZGRyID0gMSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUlRDIERTMTMzOSBvbiBJMkMgYnVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBkYjg4ZjUyODFfaTJjX3J0YyA9IHsKLQkuZHJpdmVyX25hbWUJPSAicnRjLWRzMTMwNyIsCi0JLnR5cGUJCT0gImRzMTMzOSIsCi0JLmFkZHIJCT0gMHg2OCwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJhbCBTZXR1cAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkYjg4ZjUyODFfZGV2c1tdIF9faW5pdGRhdGEgPSB7Ci0JJmRiODhmNTI4MV9ib290X2ZsYXNoLAotCSZkYjg4ZjUyODFfbm9yX2ZsYXNoLAotCSZkYjg4ZjUyODFfbmFuZF9mbGFzaCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkYjg4ZjUyODFfaW5pdCh2b2lkKQotewotCS8qCi0JICogQmFzaWMgT3Jpb24gc2V0dXAuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgotCSAqLwotCW9yaW9uX2luaXQoKTsKLQotCS8qCi0JICogU2V0dXAgdGhlIENQVSBhZGRyZXNzIGRlY29kZSB3aW5kb3dzIGZvciBvdXIgb24tYm9hcmQgZGV2aWNlcwotCSAqLwotCW9yaW9uX3NldHVwX2NwdV93aW4oT1JJT05fREVWX0JPT1QsIERCODhGNTI4MV9OT1JfQk9PVF9CQVNFLAotCQkJCURCODhGNTI4MV9OT1JfQk9PVF9TSVpFLCAtMSk7Ci0Jb3Jpb25fc2V0dXBfY3B1X3dpbihPUklPTl9ERVYwLAlEQjg4RjUyODFfN1NFR19CQVNFLAotCQkJCURCODhGNTI4MV83U0VHX1NJWkUsIC0xKTsKLQlvcmlvbl9zZXR1cF9jcHVfd2luKE9SSU9OX0RFVjEsIERCODhGNTI4MV9OT1JfQkFTRSwKLQkJCQlEQjg4RjUyODFfTk9SX1NJWkUsIC0xKTsKLQlvcmlvbl9zZXR1cF9jcHVfd2luKE9SSU9OX0RFVjIsCURCODhGNTI4MV9OQU5EX0JBU0UsCi0JCQkJREI4OEY1MjgxX05BTkRfU0laRSwgLTEpOwotCi0JLyoKLQkgKiBTZXR1cCBNdWx0aXBsZXhpbmcgUGluczoKLQkgKiBNUFAwOiBHUElPIChVU0IgT3ZlciBDdXJyZW50KQlNUFAxOiBHUElPIChVU0IgVmJhdCBpbnB1dCkKLQkgKiBNUFAyOiBQQ0lfUkVRblsyXQkJCU1QUDM6IFBDSV9HTlRuWzJdCi0JICogTVBQNDogUENJX1JFUW5bM10JCQlNUFA1OiBQQ0lfR05UblszXQotCSAqIE1QUDY6IEdQSU8gKEpQMCwgQ09OMTcuMikJCU1QUDc6IEdQSU8gKEpQMSwgQ09OMTcuMSkKLQkgKiBNUFA4OiBHUElPIChKUDIsIENPTjExLjIpCQlNUFA5OiBHUElPIChKUDMsIENPTjExLjMpCi0JICogTVBQMTA6IEdQSU8gKFJUQyBpbnQpCQlNUFAxMTogR1BJTyAoQmF1ZCBSYXRlIEdlbmVyYXRvcikKLQkgKiBNUFAxMjogR1BJTyAoUENJIGludCAxKQkJTVBQMTM6IEdQSU8gKFBDSSBpbnQgMikKLQkgKiBNUFAxNDogTkFORF9SRW5bMl0JCQlNUFAxNTogTkFORF9XRW5bMl0KLQkgKiBNUFAxNjogVUFSVDFfUlgJCQlNUFAxNzogVUFSVDFfVFgKLQkgKiBNUFAxODogVUFSVDFfQ1RTCQkJTVBQMTk6IFVBUlQxX1JUUwotCSAqIE1QUC1ERVY6IERFVl9EWzE2OjMxXQotCSAqLwotCW9yaW9uX3dyaXRlKE1QUF8wXzdfQ1RSTCwgMHgwMDIyMjIwMyk7Ci0Jb3Jpb25fd3JpdGUoTVBQXzhfMTVfQ1RSTCwgMHg0NDAwMDAwMCk7Ci0Jb3Jpb25fd3JpdGUoTVBQXzE2XzE5X0NUUkwsIDApOwotCW9yaW9uX3dyaXRlKE1QUF9ERVZfQ1RSTCwgMCk7Ci0KLQlvcmlvbl9ncGlvX3NldF92YWxpZF9waW5zKDB4MDAwMDNmYzMpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGI4OGY1MjgxX2RldnMsIEFSUkFZX1NJWkUoZGI4OGY1MjgxX2RldnMpKTsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmZGI4OGY1MjgxX2kyY19ydGMsIDEpOwotCW9yaW9uX2V0aF9pbml0KCZkYjg4ZjUyODFfZXRoX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKERCODhGNTI4MSwgIk1hcnZlbGwgT3Jpb24tMiBEZXZlbG9wbWVudCBCb2FyZCIpCi0JLyogTWFpbnRhaW5lcjogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4gKi8KLQkucGh5c19pbwk9IE9SSU9OX1JFR1NfUEhZU19CQVNFLAotCS5pb19wZ19vZmZzdAk9ICgoT1JJT05fUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAotCS5pbml0X21hY2hpbmUJPSBkYjg4ZjUyODFfaW5pdCwKLQkubWFwX2lvCQk9IG9yaW9uX21hcF9pbywKLQkuaW5pdF9pcnEJPSBvcmlvbl9pbml0X2lycSwKLQkudGltZXIJCT0gJm9yaW9uX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb24vZG5zMzIzLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uL2RuczMyMy1zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmIyODBjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb24vZG5zMzIzLXNldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtb3Jpb24vZG5zMzIzLXNldHVwLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSGVyYmVydCBWYWxlcmlvIFJpZWRlbCA8aHZyQGdudS5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLSAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0jZGVmaW5lIEROUzMyM19HUElPX0xFRF9SSUdIVF9BTUJFUgkxCi0jZGVmaW5lIEROUzMyM19HUElPX0xFRF9MRUZUX0FNQkVSCTIKLSNkZWZpbmUgRE5TMzIzX0dQSU9fTEVEX1BPV0VSCQk1Ci0jZGVmaW5lIEROUzMyM19HUElPX09WRVJURU1QCQk2Ci0jZGVmaW5lIEROUzMyM19HUElPX1JUQwkJCTcKLSNkZWZpbmUgRE5TMzIzX0dQSU9fUE9XRVJfT0ZGCQk4Ci0jZGVmaW5lIEROUzMyM19HUElPX0tFWV9QT1dFUgkJOQotI2RlZmluZSBETlMzMjNfR1BJT19LRVlfUkVTRVQJCTEwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQQ0kgc2V0dXAKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBkbnMzMjNfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQotewotCS8qIFBDSS1FICovCi0JaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gb3Jpb25fcGNpZV9sb2NhbF9idXNfbnIoKSkKLQkJcmV0dXJuIElSUV9PUklPTl9QQ0lFMF9JTlQ7Ci0KLQlwcl9lcnIoIiVzOiByZXF1ZXN0ZWQgbWFwcGluZyBmb3IgdW5rbm93biBidXNcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIHN0cnVjdCBod19wY2kgZG5zMzIzX3BjaSBfX2luaXRkYXRhID0gewotCS5ucl9jb250cm9sbGVycyA9IDEsCi0JLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCi0JLnNldHVwCQk9IG9yaW9uX3BjaV9zeXNfc2V0dXAsCi0JLnNjYW4JCT0gb3Jpb25fcGNpX3N5c19zY2FuX2J1cywKLQkubWFwX2lycQk9IGRuczMyM19wY2lfbWFwX2lycSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRuczMyM19wY2lfaW5pdCh2b2lkKQotewotCWlmIChtYWNoaW5lX2lzX2RuczMyMygpKQotCQlwY2lfY29tbW9uX2luaXQoJmRuczMyM19wY2kpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN1YnN5c19pbml0Y2FsbChkbnMzMjNfcGNpX2luaXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRXRoZXJuZXQKLSAqLwotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZG5zMzIzX2V0aF9kYXRhID0gewotCS5waHlfYWRkciA9IDgsCi0JLmZvcmNlX3BoeV9hZGRyID0gMSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiA4TWlCIE5PUiBmbGFzaCAoU3BhbnNpb24gUzI5R0wwNjRNOTBURklSNCkKLSAqCi0gKiBMYXlvdXQgYXMgdXNlZCBieSBELUxpbms6Ci0gKiAgMHgwMDAwMDAwMC0weDAwMDEwMDAwIDogIk1URDEiCi0gKiAgMHgwMDAxMDAwMC0weDAwMDIwMDAwIDogIk1URDIiCi0gKiAgMHgwMDAyMDAwMC0weDAwMWEwMDAwIDogIkxpbnV4IEtlcm5lbCIKLSAqICAweDAwMWEwMDAwLTB4MDA3ZDAwMDAgOiAiRmlsZSBTeXN0ZW0iCi0gKiAgMHgwMDdkMDAwMC0weDAwODAwMDAwIDogInUtYm9vdCIKLSAqLwotCi0jZGVmaW5lIEROUzMyM19OT1JfQk9PVF9CQVNFIDB4ZjQwMDAwMDAKLSNkZWZpbmUgRE5TMzIzX05PUl9CT09UX1NJWkUgU1pfOE0KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGRuczMyM19wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZQk9ICJNVEQxIiwKLQkJLnNpemUJPSAweDAwMDEwMDAwLAotCQkub2Zmc2V0CT0gMCwKLQl9LCB7Ci0JCS5uYW1lCT0gIk1URDIiLAotCQkuc2l6ZQk9IDB4MDAwMTAwMDAsCi0JCS5vZmZzZXQgPSAweDAwMDEwMDAwLAotCX0sIHsKLQkJLm5hbWUJPSAiTGludXggS2VybmVsIiwKLQkJLnNpemUJPSAweDAwMTgwMDAwLAotCQkub2Zmc2V0CT0gMHgwMDAyMDAwMCwKLQl9LCB7Ci0JCS5uYW1lCT0gIkZpbGUgU3lzdGVtIiwKLQkJLnNpemUJPSAweDAwNjMwMDAwLAotCQkub2Zmc2V0CT0gMHgwMDFBMDAwMCwKLQl9LCB7Ci0JCS5uYW1lCT0gInUtYm9vdCIsCi0JCS5zaXplCT0gMHgwMDAzMDAwMCwKLQkJLm9mZnNldAk9IDB4MDA3ZDAwMDAsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZG5zMzIzX25vcl9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAxLAotCS5wYXJ0cwkJPSBkbnMzMjNfcGFydGl0aW9ucywKLQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGRuczMyM19wYXJ0aXRpb25zKQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbnMzMjNfbm9yX2ZsYXNoX3Jlc291cmNlID0gewotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkuc3RhcnQJCT0gRE5TMzIzX05PUl9CT09UX0JBU0UsCi0JLmVuZAkJPSBETlMzMjNfTk9SX0JPT1RfQkFTRSArIEROUzMyM19OT1JfQk9PVF9TSVpFIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuczMyM19ub3JfZmxhc2ggPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAwLAotCS5kZXYJCT0geyAucGxhdGZvcm1fZGF0YSA9ICZkbnMzMjNfbm9yX2ZsYXNoX2RhdGEsIH0sCi0JLnJlc291cmNlCT0gJmRuczMyM19ub3JfZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdQSU8gTEVEcyAoc2ltcGxlIC0gZG9lc24ndCB1c2UgaGFyZHdhcmUgYmxpbmtpbmcgc3VwcG9ydCkKLSAqLwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRuczMyM19sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJwb3dlcjpibHVlIiwKLQkJLmdwaW8gPSBETlMzMjNfR1BJT19MRURfUE9XRVIsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LCB7Ci0JCS5uYW1lID0gInJpZ2h0OmFtYmVyIiwKLQkJLmdwaW8gPSBETlMzMjNfR1BJT19MRURfUklHSFRfQU1CRVIsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LCB7Ci0JCS5uYW1lID0gImxlZnQ6YW1iZXIiLAotCQkuZ3BpbyA9IEROUzMyM19HUElPX0xFRF9MRUZUX0FNQkVSLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBkbnMzMjNfbGVkX2RhdGEgPSB7Ci0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShkbnMzMjNfbGVkcyksCi0JLmxlZHMJCT0gZG5zMzIzX2xlZHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbnMzMjNfZ3Bpb19sZWRzID0gewotCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsgLnBsYXRmb3JtX2RhdGEgPSAmZG5zMzIzX2xlZF9kYXRhLCB9LAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdQSU8gQXR0YWNoZWQgS2V5cwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBkbnMzMjNfYnV0dG9uc1tdID0gewotCXsKLQkJLmNvZGUJCT0gS0VZX1JFU1RBUlQsCi0JCS5ncGlvCQk9IEROUzMyM19HUElPX0tFWV9SRVNFVCwKLQkJLmRlc2MJCT0gIlJlc2V0IEJ1dHRvbiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQl9LAotCXsKLQkJLmNvZGUJCT0gS0VZX1BPV0VSLAotCQkuZ3BpbwkJPSBETlMzMjNfR1BJT19LRVlfUE9XRVIsCi0JCS5kZXNjCQk9ICJQb3dlciBCdXR0b24iLAotCQkuYWN0aXZlX2xvdwk9IDEsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBkbnMzMjNfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBkbnMzMjNfYnV0dG9ucywKLQkubmJ1dHRvbnMgICAgICAgPSBBUlJBWV9TSVpFKGRuczMyM19idXR0b25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuczMyM19idXR0b25fZGV2aWNlID0gewotCS5uYW1lCQk9ICJncGlvLWtleXMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDAsCi0JLmRldgkJPSB7IC5wbGF0Zm9ybV9kYXRhICA9ICZkbnMzMjNfYnV0dG9uX2RhdGEsIH0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJhbCBTZXR1cAotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkbnMzMjNfcGxhdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmZG5zMzIzX25vcl9mbGFzaCwKLQkmZG5zMzIzX2dwaW9fbGVkcywKLQkmZG5zMzIzX2J1dHRvbl9kZXZpY2UsCi19OwotCi0vKgotICogT24gdGhlIEROUy0zMjMgdGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBhdHRhY2hlZCB2aWEgSTJDOgotICoKLSAqICBpMmMgYWRkciB8IGNoaXAgICAgICAgIHwgZGVzY3JpcHRpb24KLSAqICAweDNlICAgICB8IEdNVCBHNzYwQWYgIHwgZmFuIHNwZWVkIFBXTSBjb250cm9sbGVyCi0gKiAgMHg0OCAgICAgfCBHTVQgRzc1MS0yZiB8IHRlbXAuIHNlbnNvciBhbmQgdGhlcm0uIHdhdGNoZG9nIChMTTc1IGNvbXBhdGlibGUpCi0gKiAgMHg2OCAgICAgfCBTVCBNNDFUODAgICB8IFJUQyB3LyBhbGFybQotICovCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZG5zMzIzX2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiZzc2MGEiLCAweDNlKSwKLQkJLnR5cGUgPSAiZzc2MGEiLAotCX0sCi0jaWYgMAotCS8qIHRoaXMgZW50cnkgcmVxdWlyZXMgdGhlIG5ldy1zdHlsZSBkcml2ZXIgbW9kZWwgbG03NSBkcml2ZXIsCi0JICogZm9yIHRoZSBtZWFudGltZSAiaW5zbW9kIGxtNzUua28gZm9yY2VfbG03NT0wLDB4NDgiIGlzIG5lZWRlZCAqLwotCXsKLQkJSTJDX0JPQVJEX0lORk8oImxtNzUiLCAweDQ4KSwKLQkJLnR5cGUgPSAiZzc1MSIsCi0JfSwKLSNlbmRpZgotCXsKLQkJSTJDX0JPQVJEX0lORk8oInJ0Yy1tNDF0ODAiLCAweDY4KSwKLQkJLnR5cGUgPSAibTQxdDgwIiwKLQl9Ci19OwotCi0vKiBETlMtMzIzIHNwZWNpZmljIHBvd2VyIG9mZiBtZXRob2QgKi8KLXN0YXRpYyB2b2lkIGRuczMyM19wb3dlcl9vZmYodm9pZCkKLXsKLQlwcl9pbmZvKCIlczogdHJpZ2dlcmluZyBwb3dlci1vZmYuLi5cbiIsIF9fZnVuY19fKTsKLQlncGlvX3NldF92YWx1ZShETlMzMjNfR1BJT19QT1dFUl9PRkYsIDEpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZG5zMzIzX2luaXQodm9pZCkKLXsKLQkvKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LiAqLwotCW9yaW9uX2luaXQoKTsKLQotCS8qIHNldHVwIGZsYXNoIG1hcHBpbmcKLQkgKiBDUzMgaG9sZHMgYSA4IE1CIFNwYW5zaW9uIFMyOUdMMDY0TTkwVEZJUjQKLQkgKi8KLQlvcmlvbl9zZXR1cF9jcHVfd2luKE9SSU9OX0RFVl9CT09ULCBETlMzMjNfTk9SX0JPT1RfQkFTRSwKLQkJCSAgICBETlMzMjNfTk9SX0JPT1RfU0laRSwgLTEpOwotCi0JLyogRE5TLTMyMyBoYXMgYSBNYXJ2ZWxsIDg4WDcwNDIgU0FUQSBjb250cm9sbGVyIGF0dGFjaGVkIHZpYSBQQ0lFCi0JICoKLQkgKiBPcGVuIGEgc3BlY2lhbCBhZGRyZXNzIGRlY29kZSB3aW5kb3dzIGZvciB0aGUgUENJRSBXQS4KLQkgKi8KLQlvcmlvbl93cml0ZShPUklPTl9SRUdTX1ZJUlRfQkFTRSB8IDB4MjAwNzQsIE9SSU9OX1BDSUVfV0FfUEhZU19CQVNFKTsKLQlvcmlvbl93cml0ZShPUklPTl9SRUdTX1ZJUlRfQkFTRSB8IDB4MjAwNzAsCi0JCSAgICAoMHg3OTQxIHwgKCgoT1JJT05fUENJRV9XQV9TSVpFID4+IDE2KSAtIDEpKSA8PCAxNikpOwotCi0JLyogc2V0IE1QUCB0byAwIGFzIEQtTGluaydzIDIuNi4xMi42IGtlcm5lbCBkaWQgKi8KLQlvcmlvbl93cml0ZShNUFBfMF83X0NUUkwsIDApOwotCW9yaW9uX3dyaXRlKE1QUF84XzE1X0NUUkwsIDApOwotCW9yaW9uX3dyaXRlKE1QUF8xNl8xOV9DVFJMLCAwKTsKLQlvcmlvbl93cml0ZShNUFBfREVWX0NUUkwsIDApOwotCi0JLyogRGVmaW5lIHVzZWQgR1BJTyBwaW5zCi0KLQkgIEdQSU8gTWFwOgotCi0JICB8ICAwIHwgICAgIHwgUEVYX1JTVF9PVVQgKG5vdCBjb250cm9sbGVkIGJ5IEdQSU8pCi0JICB8ICAxIHwgT3V0IHwgcmlnaHQgYW1iZXIgTEVEICg9IHNhdGEgY2gwIExFRCkgIChsb3ctYWN0aXZlKQotCSAgfCAgMiB8IE91dCB8IGxlZnQgIGFtYmVyIExFRCAoPSBzYXRhIGNoMSBMRUQpICAobG93LWFjdGl2ZSkKLQkgIHwgIDMgfCBPdXQgfCAvL3Vua25vd24vLwotCSAgfCAgNCB8IE91dCB8IHBvd2VyIGJ1dHRvbiBMRUQgKGxvdy1hY3RpdmUsIHRvZ2V0aGVyIHdpdGggcGluICM1KQotCSAgfCAgNSB8IE91dCB8IHBvd2VyIGJ1dHRvbiBMRUQgKGxvdy1hY3RpdmUsIHRvZ2V0aGVyIHdpdGggcGluICM0KQotCSAgfCAgNiB8IEluICB8IEdNVCBHNzUxLTJmIG92ZXJ0ZW1wLiBzaHV0ZG93biBzaWduYWwgKGxvdy1hY3RpdmUpCi0JICB8ICA3IHwgSW4gIHwgTTQxVDgwIG5JUlEvT1VUL1NRVyBzaWduYWwKLQkgIHwgIDggfCBPdXQgfCB0cmlnZ2VycyBwb3dlciBvZmYgKGhpZ2gtYWN0aXZlKQotCSAgfCAgOSB8IEluICB8IHBvd2VyIGJ1dHRvbiBzd2l0Y2ggKGxvdy1hY3RpdmUpCi0JICB8IDEwIHwgSW4gIHwgcmVzZXQgYnV0dG9uIHN3aXRjaCAobG93LWFjdGl2ZSkKLQkgIHwgMTEgfCBPdXQgfCAvL3Vua25vd24vLwotCSAgfCAxMiB8IE91dCB8IC8vdW5rbm93bi8vCi0JICB8IDEzIHwgT3V0IHwgLy91bmtub3duLy8KLQkgIHwgMTQgfCBPdXQgfCAvL3Vua25vd24vLwotCSAgfCAxNSB8IE91dCB8IC8vdW5rbm93bi8vCi0JKi8KLQlvcmlvbl9ncGlvX3NldF92YWxpZF9waW5zKDB4MDdmNik7Ci0KLQkvKiByZWdpc3RlciBkbnMzMjMgc3BlY2lmaWMgcG93ZXItb2ZmIG1ldGhvZCAqLwotCWlmICgoZ3Bpb19yZXF1ZXN0KEROUzMyM19HUElPX1BPV0VSX09GRiwgIlBPV0VST0ZGIikgIT0gMCkKLQkgICAgfHwgKGdwaW9fZGlyZWN0aW9uX291dHB1dChETlMzMjNfR1BJT19QT1dFUl9PRkYsIDApICE9IDApKQotCQlwcl9lcnIoIkROUzMyMzogZmFpbGVkIHRvIHNldHVwIHBvd2VyLW9mZiBHUElPXG4iKTsKLQotCXBtX3Bvd2VyX29mZiA9IGRuczMyM19wb3dlcl9vZmY7Ci0KLQkvKiByZWdpc3RlciBmbGFzaCBhbmQgb3RoZXIgcGxhdGZvcm0gZGV2aWNlcyAqLwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRuczMyM19wbGF0X2RldmljZXMsCi0JCQkgICAgIEFSUkFZX1NJWkUoZG5zMzIzX3BsYXRfZGV2aWNlcykpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZG5zMzIzX2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoZG5zMzIzX2kyY19kZXZpY2VzKSk7Ci0KLQlvcmlvbl9ldGhfaW5pdCgmZG5zMzIzX2V0aF9kYXRhKTsKLX0KLQotLyogV2FybmluZzogRC1MaW5rIHVzZXMgYSB3cm9uZyBtYWNoLXR5cGUgKD01MjYpIGluIHRoZWlyIGJvb3Rsb2FkZXIgKi8KLU1BQ0hJTkVfU1RBUlQoRE5TMzIzLCAiRC1MaW5rIEROUy0zMjMiKQotCS8qIE1haW50YWluZXI6IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPiAqLwotCS5waHlzX2lvCT0gT1JJT05fUkVHU19QSFlTX0JBU0UsCi0JLmlvX3BnX29mZnN0CT0gKChPUklPTl9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhGRkZDLAotCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCi0JLmluaXRfbWFjaGluZQk9IGRuczMyM19pbml0LAotCS5tYXBfaW8JCT0gb3Jpb25fbWFwX2lvLAotCS5pbml0X2lycQk9IG9yaW9uX2luaXRfaXJxLAotCS50aW1lcgkJPSAmb3Jpb25fdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uL2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVmMDBjOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uL2dwaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1vcmlvbi9ncGlvLmMKLSAqCi0gKiBHUElPIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBPcmlvbiBTeXN0ZW0gT24gQ2hpcAotICoKLSAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLSNpbmNsdWRlICJjb21tb24uaCIKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb192YWxpZFtCSVRTX1RPX0xPTkdTKEdQSU9fTUFYKV07Ci1zdGF0aWMgY29uc3QgY2hhciAqZ3Bpb19sYWJlbFtHUElPX01BWF07ICAvKiBub24gbnVsbCBmb3IgYWxsb2NhdGVkIEdQSU9zICovCi0KLXZvaWQgX19pbml0IG9yaW9uX2dwaW9fc2V0X3ZhbGlkX3BpbnModTMyIHBpbnMpCi17Ci0JZ3Bpb192YWxpZFswXSA9IHBpbnM7Ci19Ci0KLS8qCi0gKiBHRU5FUklDX0dQSU8gcHJpbWl0aXZlcwotICovCi1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgcGluKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7Ci0JCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogU29tZSBjYWxsZXJzIG1pZ2h0IGhhdmUgbm90IHVzZWQgdGhlIGdwaW9fcmVxdWVzdCgpLAotCSAqIHNvIGZsYWcgdGhpcyBwaW4gYXMgcmVxdWVzdGVkIG5vdy4KLQkgKi8KLQlpZiAoIWdwaW9fbGFiZWxbcGluXSkKLQkJZ3Bpb19sYWJlbFtwaW5dID0gIj8iOwotCi0Jb3Jpb25fc2V0Yml0cyhHUElPX0lPX0NPTkYsIDEgPDwgcGluKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9pbnB1dCk7Ci0KLWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbWFzazsKLQotCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZCkpIHsKLQkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fRlVOQ1RJT05fXywgcGluKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBTb21lIGNhbGxlcnMgbWlnaHQgaGF2ZSBub3QgdXNlZCB0aGUgZ3Bpb19yZXF1ZXN0KCksCi0JICogc28gZmxhZyB0aGlzIHBpbiBhcyByZXF1ZXN0ZWQgbm93LgotCSAqLwotCWlmICghZ3Bpb19sYWJlbFtwaW5dKQotCQlncGlvX2xhYmVsW3Bpbl0gPSAiPyI7Ci0KLQltYXNrID0gMSA8PCBwaW47Ci0Jb3Jpb25fY2xyYml0cyhHUElPX0JMSU5LX0VOLCBtYXNrKTsKLQlpZiAodmFsdWUpCi0JCW9yaW9uX3NldGJpdHMoR1BJT19PVVQsIG1hc2spOwotCWVsc2UKLQkJb3Jpb25fY2xyYml0cyhHUElPX09VVCwgbWFzayk7Ci0Jb3Jpb25fY2xyYml0cyhHUElPX0lPX0NPTkYsIG1hc2spOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX291dHB1dCk7Ci0KLWludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBwaW4pCi17Ci0JaW50IHZhbCwgbWFzayA9IDEgPDwgcGluOwotCi0JaWYgKG9yaW9uX3JlYWQoR1BJT19JT19DT05GKSAmIG1hc2spCi0JCXZhbCA9IG9yaW9uX3JlYWQoR1BJT19EQVRBX0lOKSBeIG9yaW9uX3JlYWQoR1BJT19JTl9QT0wpOwotCWVsc2UKLQkJdmFsID0gb3Jpb25fcmVhZChHUElPX09VVCk7Ci0KLQlyZXR1cm4gdmFsICYgbWFzazsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19nZXRfdmFsdWUpOwotCi12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1hc2sgPSAxIDw8IHBpbjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCW9yaW9uX2NscmJpdHMoR1BJT19CTElOS19FTiwgbWFzayk7Ci0JaWYgKHZhbHVlKQotCQlvcmlvbl9zZXRiaXRzKEdQSU9fT1VULCBtYXNrKTsKLQllbHNlCi0JCW9yaW9uX2NscmJpdHMoR1BJT19PVVQsIG1hc2spOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwaW9fc2V0X3ZhbHVlKTsKLQotdm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtYXNrID0gMSA8PCBwaW47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0KLQlvcmlvbl9jbHJiaXRzKEdQSU9fT1VULCBtYXNrKTsKLQlpZiAoYmxpbmspCi0JCW9yaW9uX3NldGJpdHMoR1BJT19CTElOS19FTiwgbWFzayk7Ci0JZWxzZQotCQlvcmlvbl9jbHJiaXRzKEdQSU9fQkxJTktfRU4sIG1hc2spOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9yaW9uX2dwaW9fc2V0X2JsaW5rKTsKLQotaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBwaW4sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7Ci0JCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCWlmIChncGlvX2xhYmVsW3Bpbl0pIHsKLQkJcHJfZGVidWcoIiVzOiBHUElPICVkIGFscmVhZHkgdXNlZCBhcyAlc1xuIiwKLQkJCSBfX0ZVTkNUSU9OX18sIHBpbiwgZ3Bpb19sYWJlbFtwaW5dKTsKLQkJcmV0ID0gLUVCVVNZOwotCX0gZWxzZQotCQlncGlvX2xhYmVsW3Bpbl0gPSBsYWJlbCA/IGxhYmVsIDogIj8iOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19yZXF1ZXN0KTsKLQotdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgcGluKQotewotCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZCkpIHsKLQkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fRlVOQ1RJT05fXywgcGluKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghZ3Bpb19sYWJlbFtwaW5dKQotCQlwcl93YXJuaW5nKCIlczogR1BJTyAlZCBhbHJlYWR5IGZyZWVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpbik7Ci0JZWxzZQotCQlncGlvX2xhYmVsW3Bpbl0gPSBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChncGlvX2ZyZWUpOwotCi0vKiBEZWJ1ZyBoZWxwZXIgKi8KLXZvaWQgZ3Bpb19kaXNwbGF5KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgR1BJT19NQVg7IGkrKykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiUGluLSVkOiAiLCBpKTsKLQotCQlpZiAoIXRlc3RfYml0KGksIGdwaW9fdmFsaWQpKSB7Ci0JCQlwcmludGsoIm5vbi1HUElPXG4iKTsKLQkJfSBlbHNlIGlmICghZ3Bpb19sYWJlbFtpXSkgewotCQkJcHJpbnRrKCJHUElPLCBmcmVlXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygiR1BJTywgdXNlZCBieSAlcywgIiwgZ3Bpb19sYWJlbFtpXSk7Ci0JCQlpZiAob3Jpb25fcmVhZChHUElPX0lPX0NPTkYpICYgKDEgPDwgaSkpIHsKLQkJCQlwcmludGsoImlucHV0LCBhY3RpdmUgJXMsIGxldmVsICVzLCBlZGdlICVzXG4iLAotCQkJCSgob3Jpb25fcmVhZChHUElPX0lOX1BPTCkgPj4gaSkgJiAxKSA/ICJsb3ciIDogImhpZ2giLAotCQkJCSgob3Jpb25fcmVhZChHUElPX0xFVkVMX01BU0spID4+IGkpICYgMSkgPyAiZW5hYmxlZCIgOiAibWFza2VkIiwKLQkJCQkoKG9yaW9uX3JlYWQoR1BJT19FREdFX01BU0spID4+IGkpICYgMSkgPyAiZW5hYmxlZCIgOiAibWFza2VkIik7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50aygib3V0cHV0LCB2YWw9JWRcbiIsIChvcmlvbl9yZWFkKEdQSU9fT1VUKSA+PiBpKSAmIDEpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIk1QUF8wXzdfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlNUFBfMF83X0NUUkwsIG9yaW9uX3JlYWQoTVBQXzBfN19DVFJMKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk1QUF84XzE1X0NUUkwgKDB4JTA4eCkgPSAweCUwOHhcbiIsCi0JCQkJTVBQXzhfMTVfQ1RSTCwgb3Jpb25fcmVhZChNUFBfOF8xNV9DVFJMKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk1QUF8xNl8xOV9DVFJMICgweCUwOHgpID0gMHglMDh4XG4iLAotCQkJCU1QUF8xNl8xOV9DVFJMLCBvcmlvbl9yZWFkKE1QUF8xNl8xOV9DVFJMKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk1QUF9ERVZfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlNUFBfREVWX0NUUkwsIG9yaW9uX3JlYWQoTVBQX0RFVl9DVFJMKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fT1VUICgweCUwOHgpID0gMHglMDh4XG4iLAotCQkJCUdQSU9fT1VULCBvcmlvbl9yZWFkKEdQSU9fT1VUKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fSU9fQ09ORiAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlHUElPX0lPX0NPTkYsIG9yaW9uX3JlYWQoR1BJT19JT19DT05GKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fQkxJTktfRU4gKDB4JTA4eCkgPSAweCUwOHhcbiIsCi0JCQkJR1BJT19CTElOS19FTiwgb3Jpb25fcmVhZChHUElPX0JMSU5LX0VOKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fSU5fUE9MICgweCUwOHgpID0gMHglMDh4XG4iLAotCQkJCUdQSU9fSU5fUE9MLCBvcmlvbl9yZWFkKEdQSU9fSU5fUE9MKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fREFUQV9JTiAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlHUElPX0RBVEFfSU4sIG9yaW9uX3JlYWQoR1BJT19EQVRBX0lOKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fTEVWRUxfTUFTSyAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlHUElPX0xFVkVMX01BU0ssIG9yaW9uX3JlYWQoR1BJT19MRVZFTF9NQVNLKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fRURHRV9DQVVTRSAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlHUElPX0VER0VfQ0FVU0UsIG9yaW9uX3JlYWQoR1BJT19FREdFX0NBVVNFKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fRURHRV9NQVNLICgweCUwOHgpID0gMHglMDh4XG4iLAotCQkJCUdQSU9fRURHRV9NQVNLLCBvcmlvbl9yZWFkKEdQSU9fRURHRV9NQVNLKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbi9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3ZTEyYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uL2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLW9yaW9uL2lycS5jCi0gKgotICogQ29yZSBJUlEgZnVuY3Rpb25zIGZvciBNYXJ2ZWxsIE9yaW9uIFN5c3RlbSBPbiBDaGlwCi0gKgotICogTWFpbnRhaW5lcjogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbi5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE9yaW9uIEdQSU8gSVJRCi0gKgotICogR1BJT19JTl9QT0wgcmVnaXN0ZXIgY29udHJvbGxzIHdoZXRoZXIgR1BJT19EQVRBX0lOIHdpbGwgaG9sZCB0aGUgc2FtZQotICogdmFsdWUgb2YgdGhlIGxpbmUgb3IgdGhlIG9wcG9zaXRlIHZhbHVlLgotICoKLSAqIExldmVsIElSUSBoYW5kbGVyczogREFUQV9JTiBpcyB1c2VkIGRpcmVjdGx5IGFzIGNhdXNlIHJlZ2lzdGVyLgotICogICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgYXJlIG1hc2tlZCBieSBMRVZFTF9NQVNLIHJlZ2lzdGVycy4KLSAqIEVkZ2UgSVJRIGhhbmRsZXJzOiAgQ2hhbmdlIGluIERBVEFfSU4gYXJlIGxhdGNoZWQgaW4gRURHRV9DQVVTRS4KLSAqICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGFyZSBtYXNrZWQgYnkgRURHRV9NQVNLIHJlZ2lzdGVycy4KLSAqIEJvdGgtZWRnZSBoYW5kbGVyczogU2ltaWxhciB0byByZWd1bGFyIEVkZ2UgaGFuZGxlcnMsIGJ1dCBhbHNvIHN3YXBzCi0gKiAgICAgICAgICAgICAgICAgICAgIHRoZSBwb2xhcml0eSB0byBjYXRjaCB0aGUgbmV4dCBsaW5lIHRyYW5zYWN0aW9uLgotICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBtaWdodCBub3QgcGVyZmVjdGx5Ci0gKiAgICAgICAgICAgICAgICAgICAgIHdvcmsgb24gc29tZSB1c2UgY2FzZXMuCi0gKgotICogRXZlcnkgZWlnaHQgR1BJTyBsaW5lcyBhcmUgZ3JvdXBlZCAoT1InZWQpIGJlZm9yZSBnb2luZyB1cCB0byBtYWluCi0gKiBjYXVzZSByZWdpc3Rlci4KLSAqCi0gKiAgICAgICAgICAgICAgICAgICAgRURHRSAgY2F1c2UgICAgbWFzawotICogICAgICAgIGRhdGEtaW4gICAvLS0tLS0tLS18IHwtLS0tLXwgfC0tLS1cCi0gKiAgICAgLS0tLS18IHwtLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tIHRvIG1haW4gY2F1c2UgcmVnCi0gKiAgICAgICAgICAgWCAgICAgIFwtLS0tLS0tLS0tLS0tLS0tfCB8LS0tLS8KLSAqICAgICAgICBwb2xhcml0eSAgICBMRVZFTCAgICAgICAgICBtYXNrCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBvcmlvbl9ncGlvX2lycV9hY2sodTMyIGlycSkKLXsKLQlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpCi0JCS8qCi0JCSAqIE1hc2sgYml0IGZvciBsZXZlbCBpbnRlcnJ1cHQKLQkJICovCi0JCW9yaW9uX2NscmJpdHMoR1BJT19MRVZFTF9NQVNLLCAxIDw8IHBpbik7Ci0JZWxzZQotCQkvKgotCQkgKiBDbGVhciBjYXN1ZSBiaXQgZm9yIGVnZGUgaW50ZXJydXB0Ci0JCSAqLwotCQlvcmlvbl9jbHJiaXRzKEdQSU9fRURHRV9DQVVTRSwgMSA8PCBwaW4pOwotfQotCi1zdGF0aWMgdm9pZCBvcmlvbl9ncGlvX2lycV9tYXNrKHUzMiBpcnEpCi17Ci0JaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7Ci0JaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKQotCQlvcmlvbl9jbHJiaXRzKEdQSU9fTEVWRUxfTUFTSywgMSA8PCBwaW4pOwotCWVsc2UKLQkJb3Jpb25fY2xyYml0cyhHUElPX0VER0VfTUFTSywgMSA8PCBwaW4pOwotfQotCi1zdGF0aWMgdm9pZCBvcmlvbl9ncGlvX2lycV91bm1hc2sodTMyIGlycSkKLXsKLQlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpCi0JCW9yaW9uX3NldGJpdHMoR1BJT19MRVZFTF9NQVNLLCAxIDw8IHBpbik7Ci0JZWxzZQotCQlvcmlvbl9zZXRiaXRzKEdQSU9fRURHRV9NQVNLLCAxIDw8IHBpbik7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpb25fZ3Bpb19zZXRfaXJxX3R5cGUodTMyIGlycSwgdTMyIHR5cGUpCi17Ci0JaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0JaWYgKChvcmlvbl9yZWFkKEdQSU9fSU9fQ09ORikgJiAoMSA8PCBwaW4pKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib3Jpb25fZ3Bpb19zZXRfaXJxX3R5cGUgZmFpbGVkICIKLQkJCQkiKGlycSAlZCwgcGluICVkKS5cbiIsIGlycSwgcGluKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBJUlFUX0hJR0g6Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOwotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCQlvcmlvbl9jbHJiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFUX0xPVzoKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JCW9yaW9uX3NldGJpdHMoR1BJT19JTl9QT0wsICgxIDw8IHBpbikpOwotCQlicmVhazsKLQljYXNlIElSUVRfUklTSU5HOgotCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOwotCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQkJb3Jpb25fY2xyYml0cyhHUElPX0lOX1BPTCwgKDEgPDwgcGluKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVJRVF9GQUxMSU5HOgotCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOwotCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQkJb3Jpb25fc2V0Yml0cyhHUElPX0lOX1BPTCwgKDEgPDwgcGluKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVJRVF9CT1RIRURHRToKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7Ci0JCS8qCi0JCSAqIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwKLQkJICovCi0JCWlmICgob3Jpb25fcmVhZChHUElPX0lOX1BPTCkgXiBvcmlvbl9yZWFkKEdQSU9fREFUQV9JTikpCi0JCSAgICAmICgxIDw8IHBpbikpCi0JCQlvcmlvbl9zZXRiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsgLyogZmFsbGluZyAqLwotCQllbHNlCi0JCQlvcmlvbl9jbHJiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsgLyogcmlzaW5nICovCi0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IGlycT0lZCAodHlwZT0lZClcbiIsIGlycSwgdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKLQlkZXNjLT5zdGF0dXMgfD0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvcmlvbl9ncGlvX2lycV9jaGlwID0gewotCS5uYW1lCQk9ICJPcmlvbi1JUlEtR1BJTyIsCi0JLmFjawkJPSBvcmlvbl9ncGlvX2lycV9hY2ssCi0JLm1hc2sJCT0gb3Jpb25fZ3Bpb19pcnFfbWFzaywKLQkudW5tYXNrCQk9IG9yaW9uX2dwaW9faXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBvcmlvbl9ncGlvX3NldF9pcnFfdHlwZSwKLX07Ci0KLXN0YXRpYyB2b2lkIG9yaW9uX2dwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXUzMiBjYXVzZSwgb2ZmcywgcGluOwotCi0JQlVHX09OKGlycSA8IElSUV9PUklPTl9HUElPXzBfNyB8fCBpcnEgPiBJUlFfT1JJT05fR1BJT18yNF8zMSk7Ci0Jb2ZmcyA9IChpcnEgLSBJUlFfT1JJT05fR1BJT18wXzcpICogODsKLQljYXVzZSA9IChvcmlvbl9yZWFkKEdQSU9fREFUQV9JTikgJiBvcmlvbl9yZWFkKEdQSU9fTEVWRUxfTUFTSykpIHwKLQkJKG9yaW9uX3JlYWQoR1BJT19FREdFX0NBVVNFKSAmIG9yaW9uX3JlYWQoR1BJT19FREdFX01BU0spKTsKLQotCWZvciAocGluID0gb2ZmczsgcGluIDwgb2ZmcyArIDg7IHBpbisrKSB7Ci0JCWlmIChjYXVzZSAmICgxIDw8IHBpbikpIHsKLQkJCWlycSA9IGdwaW9fdG9faXJxKHBpbik7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCQlpZiAoKGRlc2MtPnN0YXR1cyAmIElSUV9UWVBFX1NFTlNFX01BU0spID09IElSUVRfQk9USEVER0UpIHsKLQkJCQkvKiBTd2FwIHBvbGFyaXR5IChyYWNlIHdpdGggR1BJTyBsaW5lKSAqLwotCQkJCXUzMiBwb2xhcml0eSA9IG9yaW9uX3JlYWQoR1BJT19JTl9QT0wpOwotCQkJCXBvbGFyaXR5IF49IDEgPDwgcGluOwotCQkJCW9yaW9uX3dyaXRlKEdQSU9fSU5fUE9MLCBwb2xhcml0eSk7Ci0JCQl9Ci0JCQlkZXNjX2hhbmRsZV9pcnEoaXJxLCBkZXNjKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG9yaW9uX2luaXRfZ3Bpb19pcnEodm9pZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQkvKgotCSAqIE1hc2sgYW5kIGNsZWFyIEdQSU8gSVJRIGludGVycnVwdHMKLQkgKi8KLQlvcmlvbl93cml0ZShHUElPX0xFVkVMX01BU0ssIDB4MCk7Ci0Jb3Jpb25fd3JpdGUoR1BJT19FREdFX01BU0ssIDB4MCk7Ci0Jb3Jpb25fd3JpdGUoR1BJT19FREdFX0NBVVNFLCAweDApOwotCi0JLyoKLQkgKiBSZWdpc3RlciBjaGFpbmVkIGxldmVsIGhhbmRsZXJzIGZvciBHUElPIElSUXMgYnkgZGVmYXVsdC4KLQkgKiBVc2VyIGNhbiB1c2Ugc2V0X3R5cGUoKSBpZiBoZSB3YW50cyB0byB1c2UgZWRnZSB0eXBlcyBoYW5kbGVycy4KLQkgKi8KLQlmb3IgKGkgPSBJUlFfT1JJT05fR1BJT19TVEFSVDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJm9yaW9uX2dwaW9faXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCWRlc2MgPSBpcnFfZGVzYyArIGk7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7Ci0JfQotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9PUklPTl9HUElPXzBfNywgb3Jpb25fZ3Bpb19pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9OX0dQSU9fOF8xNSwgb3Jpb25fZ3Bpb19pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9OX0dQSU9fMTZfMjMsIG9yaW9uX2dwaW9faXJxX2hhbmRsZXIpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9PUklPTl9HUElPXzI0XzMxLCBvcmlvbl9ncGlvX2lycV9oYW5kbGVyKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBPcmlvbiBNYWluIElSUQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBvcmlvbl9tYWluX2lycV9tYXNrKHUzMiBpcnEpCi17Ci0Jb3Jpb25fY2xyYml0cyhNQUlOX0lSUV9NQVNLLCAxIDw8IGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW9uX21haW5faXJxX3VubWFzayh1MzIgaXJxKQotewotCW9yaW9uX3NldGJpdHMoTUFJTl9JUlFfTUFTSywgMSA8PCBpcnEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG9yaW9uX21haW5faXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIk9yaW9uLUlSUS1NYWluIiwKLQkuYWNrCQk9IG9yaW9uX21haW5faXJxX21hc2ssCi0JLm1hc2sJCT0gb3Jpb25fbWFpbl9pcnFfbWFzaywKLQkudW5tYXNrCQk9IG9yaW9uX21haW5faXJxX3VubWFzaywKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBvcmlvbl9pbml0X21haW5faXJxKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIE1hc2sgYW5kIGNsZWFyIE1haW4gSVJRIGludGVycnVwdHMKLQkgKi8KLQlvcmlvbl93cml0ZShNQUlOX0lSUV9NQVNLLCAweDApOwotCW9yaW9uX3dyaXRlKE1BSU5fSVJRX0NBVVNFLCAweDApOwotCi0JLyoKLQkgKiBSZWdpc3RlciBsZXZlbCBoYW5kbGVyIGZvciBNYWluIElSUXMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVJRX09SSU9OX0dQSU9fU1RBUlQ7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJm9yaW9uX21haW5faXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7Ci0JfQotfQotCi12b2lkIF9faW5pdCBvcmlvbl9pbml0X2lycSh2b2lkKQotewotCW9yaW9uX2luaXRfbWFpbl9pcnEoKTsKLQlvcmlvbl9pbml0X2dwaW9faXJxKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uL2t1cm9ib3hfcHJvLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uL2t1cm9ib3hfcHJvLXNldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MTdhY2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9rdXJvYm94X3Byby1zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLW9yaW9uL2t1cm9ib3hfcHJvLXNldHVwLmMKLSAqCi0gKiBNYWludGFpbmVyOiBSb25lbiBTaGl0cml0IDxyc2hpdHJpdEBtYXJ2ZWxsLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEtVUk9CT1gtUFJPIEluZm8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogMjU2SyBOT1IgZmxhc2ggRGV2aWNlIGJ1cyBib290IGNoaXAgc2VsZWN0Ci0gKi8KLQotI2RlZmluZSBLVVJPQk9YX1BST19OT1JfQk9PVF9CQVNFCTB4ZjQwMDAwMDAKLSNkZWZpbmUgS1VST0JPWF9QUk9fTk9SX0JPT1RfU0laRQlTWl8yNTZLCi0KLS8qCi0gKiAyNTZNIE5BTkQgZmxhc2ggb24gRGV2aWNlIGJ1cyBjaGlwIHNlbGVjdCAxCi0gKi8KLQotI2RlZmluZSBLVVJPQk9YX1BST19OQU5EX0JBU0UJCTB4ZmMwMDAwMDAKLSNkZWZpbmUgS1VST0JPWF9QUk9fTkFORF9TSVpFCQlTWl8yTQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIDI1Nk1CIE5BTkQgRmxhc2ggb24gRGV2aWNlIGJ1cyBDUzAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24ga3Vyb2JveF9wcm9fbmFuZF9wYXJ0c1tdID0gewotCXsKLQkJLm5hbWUJPSAidUltYWdlIiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gU1pfNE0sCi0JfSwKLQl7Ci0JCS5uYW1lCT0gInJvb3RmcyIsCi0JCS5vZmZzZXQJPSBTWl80TSwKLQkJLnNpemUJPSBTWl82NE0sCi0JfSwKLQl7Ci0JCS5uYW1lCT0gImV4dHJhIiwKLQkJLm9mZnNldAk9IFNaXzRNICsgU1pfNjRNLAotCQkuc2l6ZQk9IFNaXzI1Nk0gLSAoU1pfNE0gKyBTWl82NE0pLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGt1cm9ib3hfcHJvX25hbmRfcmVzb3VyY2UgPSB7Ci0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCS5zdGFydAkJPSBLVVJPQk9YX1BST19OQU5EX0JBU0UsCi0JLmVuZAkJPSBLVVJPQk9YX1BST19OQU5EX0JBU0UgKyBLVVJPQk9YX1BST19OQU5EX1NJWkUgLSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBvcmlvbl9uYW5kX2RhdGEga3Vyb2JveF9wcm9fbmFuZF9kYXRhID0gewotCS5wYXJ0cwkJPSBrdXJvYm94X3Byb19uYW5kX3BhcnRzLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoa3Vyb2JveF9wcm9fbmFuZF9wYXJ0cyksCi0JLmNsZQkJPSAwLAotCS5hbGUJCT0gMSwKLQkud2lkdGgJCT0gOCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGt1cm9ib3hfcHJvX25hbmRfZmxhc2ggPSB7Ci0JLm5hbWUJCT0gIm9yaW9uX25hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAma3Vyb2JveF9wcm9fbmFuZF9kYXRhLAotCX0sCi0JLnJlc291cmNlCT0gJmt1cm9ib3hfcHJvX25hbmRfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAyNTZLQiBOT1IgRmxhc2ggb24gQk9PVCBEZXZpY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBrdXJvYm94X3Byb19ub3JfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3Vyb2JveF9wcm9fbm9yX2ZsYXNoX3Jlc291cmNlID0gewotCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0CQkJPSBLVVJPQk9YX1BST19OT1JfQk9PVF9CQVNFLAotCS5lbmQJCQk9IEtVUk9CT1hfUFJPX05PUl9CT09UX0JBU0UgKyBLVVJPQk9YX1BST19OT1JfQk9PVF9TSVpFIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGt1cm9ib3hfcHJvX25vcl9mbGFzaCA9IHsKLQkubmFtZQkJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAma3Vyb2JveF9wcm9fbm9yX2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwkJPSAxLAotCS5yZXNvdXJjZQkJPSAma3Vyb2JveF9wcm9fbm9yX2ZsYXNoX3Jlc291cmNlLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQQ0kKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IF9faW5pdCBrdXJvYm94X3Byb19wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JLyoKLQkgKiBQQ0kgaXNuJ3QgdXNlZCBvbiB0aGUgS3VybwotCSAqLwotCWlmIChkZXYtPmJ1cy0+bnVtYmVyID09IG9yaW9uX3BjaWVfbG9jYWxfYnVzX25yKCkpCi0JCXJldHVybiBJUlFfT1JJT05fUENJRTBfSU5UOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJrdXJvYm94X3Byb19wY2lfbWFwX2lycSBmYWlsZWQsIHVua25vd24gYnVzXG4iKTsKLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIHN0cnVjdCBod19wY2kga3Vyb2JveF9wcm9fcGNpIF9faW5pdGRhdGEgPSB7Ci0JLm5yX2NvbnRyb2xsZXJzCT0gMSwKLQkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKLQkuc2V0dXAJCT0gb3Jpb25fcGNpX3N5c19zZXR1cCwKLQkuc2NhbgkJPSBvcmlvbl9wY2lfc3lzX3NjYW5fYnVzLAotCS5tYXBfaXJxCT0ga3Vyb2JveF9wcm9fcGNpX21hcF9pcnEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBrdXJvYm94X3Byb19wY2lfaW5pdCh2b2lkKQotewotCWlmIChtYWNoaW5lX2lzX2t1cm9ib3hfcHJvKCkpCi0JCXBjaV9jb21tb25faW5pdCgma3Vyb2JveF9wcm9fcGNpKTsKLQotCXJldHVybiAwOwotfQotCi1zdWJzeXNfaW5pdGNhbGwoa3Vyb2JveF9wcm9fcGNpX2luaXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEV0aGVybmV0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGt1cm9ib3hfcHJvX2V0aF9kYXRhID0gewotCS5waHlfYWRkcgk9IDgsCi0JLmZvcmNlX3BoeV9hZGRyID0gMSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUlRDIDVDMzcyYSBvbiBJMkMgYnVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBrdXJvYm94X3Byb19pMmNfcnRjID0gewotICAgICAgIC5kcml2ZXJfbmFtZSAgICA9ICJydGMtcnM1YzM3MiIsCi0gICAgICAgLnR5cGUgICAgICAgICAgID0gInJzNWMzNzJhIiwKLSAgICAgICAuYWRkciAgICAgICAgICAgPSAweDMyLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTQVRBCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGt1cm9ib3hfcHJvX3NhdGFfZGF0YSA9IHsKLQkubl9wb3J0cyAgICAgICAgPSAyLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBHZW5lcmFsIFNldHVwCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmt1cm9ib3hfcHJvX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZrdXJvYm94X3Byb19ub3JfZmxhc2gsCi0JJmt1cm9ib3hfcHJvX25hbmRfZmxhc2gsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQga3Vyb2JveF9wcm9faW5pdCh2b2lkKQotewotCS8qCi0JICogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KLQkgKi8KLQlvcmlvbl9pbml0KCk7Ci0KLQkvKgotCSAqIFNldHVwIHRoZSBDUFUgYWRkcmVzcyBkZWNvZGUgd2luZG93cyBmb3Igb3VyIGRldmljZXMKLQkgKi8KLQlvcmlvbl9zZXR1cF9jcHVfd2luKE9SSU9OX0RFVl9CT09ULCBLVVJPQk9YX1BST19OT1JfQk9PVF9CQVNFLAotCQkJCUtVUk9CT1hfUFJPX05PUl9CT09UX1NJWkUsIC0xKTsKLQlvcmlvbl9zZXR1cF9jcHVfd2luKE9SSU9OX0RFVjAsCUtVUk9CT1hfUFJPX05BTkRfQkFTRSwKLQkJCQlLVVJPQk9YX1BST19OQU5EX1NJWkUsIC0xKTsKLQkvKgotCSAqIE9wZW4gYSBzcGVjaWFsIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgZm9yIHRoZSBQQ0lFIFdBLgotCSAqLwotCW9yaW9uX3dyaXRlKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHgyMDA3NCwgT1JJT05fUENJRV9XQV9QSFlTX0JBU0UpOwotCW9yaW9uX3dyaXRlKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHgyMDA3MCwgKDB4Nzk0MSB8Ci0JCSgoKE9SSU9OX1BDSUVfV0FfU0laRSA+PiAxNikgLSAxKSkgPDwgMTYpKTsKLQotCS8qCi0JICogU2V0dXAgTXVsdGlwbGV4aW5nIFBpbnMgLS0KLQkgKiBNUFBbMC0xXSBOb3QgdXNlZAotCSAqIE1QUFsyXSBHUElPIE1pY29uCi0JICogTVBQWzNdIEdQSU8gUlRDCi0JICogTVBQWzQtNV0gTm90IHVzZWQKLQkgKiBNUFBbNl0gTmFuZCBGbGFzaCBSRW4KLQkgKiBNUFBbN10gTmFuZCBGbGFzaCBXRW4KLQkgKiBNUFBbOC0xMV0gTm90IHVzZWQKLQkgKiBNUFBbMTJdIFNBVEEgMCBwcmVzZW5jZSBJbmRpY2F0aW9uCi0JICogTVBQWzEzXSBTQVRBIDEgcHJlc2VuY2UgSW5kaWNhdGlvbgotCSAqIE1QUFsxNF0gU0FUQSAwIGFjdGl2ZSBJbmRpY2F0aW9uCi0JICogTVBQWzE1XSBTQVRBIDEgYWN0aXZlIGluZGljYXRpb24KLQkgKiBNUFBbMTYtMTldIE5vdCB1c2VkCi0JICovCi0Jb3Jpb25fd3JpdGUoTVBQXzBfN19DVFJMLCAweDQ0MjIwMDAzKTsKLQlvcmlvbl93cml0ZShNUFBfOF8xNV9DVFJMLCAweDU1NTUwMDAwKTsKLQlvcmlvbl93cml0ZShNUFBfMTZfMTlfQ1RSTCwgMHgwKTsKLQotCW9yaW9uX2dwaW9fc2V0X3ZhbGlkX3BpbnMoMHgwMDAwMDAwYyk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhrdXJvYm94X3Byb19kZXZpY2VzLCBBUlJBWV9TSVpFKGt1cm9ib3hfcHJvX2RldmljZXMpKTsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAma3Vyb2JveF9wcm9faTJjX3J0YywgMSk7Ci0Jb3Jpb25fZXRoX2luaXQoJmt1cm9ib3hfcHJvX2V0aF9kYXRhKTsKLQlvcmlvbl9zYXRhX2luaXQoJmt1cm9ib3hfcHJvX3NhdGFfZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoS1VST0JPWF9QUk8sICJCdWZmYWxvL1Jldm9nZWFyIEt1cm9ib3ggUHJvIikKLQkvKiBNYWludGFpbmVyOiBSb25lbiBTaGl0cml0IDxyc2hpdHJpdEBtYXJ2ZWxsLmNvbT4gKi8KLQkucGh5c19pbwk9IE9SSU9OX1JFR1NfUEhZU19CQVNFLAotCS5pb19wZ19vZmZzdAk9ICgoT1JJT05fUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKLQkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAotCS5pbml0X21hY2hpbmUJPSBrdXJvYm94X3Byb19pbml0LAotCS5tYXBfaW8JCT0gb3Jpb25fbWFwX2lvLAotCS5pbml0X2lycQk9IG9yaW9uX2luaXRfaXJxLAotCS50aW1lcgkJPSAmb3Jpb25fdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9wY2kuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb24vcGNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMDliYjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDU1NyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1vcmlvbi9wY2kuYwotICoKLSAqIFBDSSBhbmQgUENJRSBmdW5jdGlvbnMgZm9yIE1hcnZlbGwgT3Jpb24gU3lzdGVtIE9uIENoaXAKLSAqCi0gKiBNYWludGFpbmVyOiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KLSNpbmNsdWRlICJjb21tb24uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBPcmlvbiBoYXMgb25lIFBDSUUgY29udHJvbGxlciBhbmQgb25lIFBDSSBjb250cm9sbGVyLgotICoKLSAqIE5vdGUxOiBUaGUgbG9jYWwgUENJRSBidXMgbnVtYmVyIGlzICcwJy4gVGhlIGxvY2FsIFBDSSBidXMgbnVtYmVyCi0gKiBmb2xsb3dzIHRoZSBzY2FubmVkIFBDSUUgYnJpZGdlZCBidXNzZXMsIGlmIGFueS4KLSAqCi0gKiBOb3RlMjogSXQgaXMgcG9zc2libGUgZm9yIFBDSS9QQ0lFIGFnZW50cyB0byBhY2Nlc3MgbWFueSBzdWJzeXN0ZW0ncwotICogc3BhY2UsIGJ5IGNvbmZpZ3VyaW5nIEJBUnMgYW5kIEFkZHJlc3MgRGVjb2RlIFdpbmRvd3MsIGUuZy4gZmxhc2hlcyBvbgotICogZGV2aWNlIGJ1cywgT3Jpb24gcmVnaXN0ZXJzLCBldGMuIEhvd2V2ZXIgdGhpcyBjb2RlIG9ubHkgZW5hYmxlIHRoZQotICogYWNjZXNzIHRvIEREUiBiYW5rcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUENJRSBjb250cm9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUENJRV9DVFJMCQlPUklPTl9QQ0lFX1JFRygweDFhMDApCi0jZGVmaW5lIFBDSUVfU1RBVAkJT1JJT05fUENJRV9SRUcoMHgxYTA0KQotI2RlZmluZSBQQ0lFX0RFVl9JRAkJT1JJT05fUENJRV9SRUcoMHgwMDAwKQotI2RlZmluZSBQQ0lFX0NNRF9TVEFUCQlPUklPTl9QQ0lFX1JFRygweDAwMDQpCi0jZGVmaW5lIFBDSUVfREVWX1JFVgkJT1JJT05fUENJRV9SRUcoMHgwMDA4KQotI2RlZmluZSBQQ0lFX01BU0sJCU9SSU9OX1BDSUVfUkVHKDB4MTkxMCkKLSNkZWZpbmUgUENJRV9DT05GX0FERFIJCU9SSU9OX1BDSUVfUkVHKDB4MThmOCkKLSNkZWZpbmUgUENJRV9DT05GX0RBVEEJCU9SSU9OX1BDSUVfUkVHKDB4MThmYykKLQotLyoKLSAqIFBDSUVfU1RBVCBiaXRzCi0gKi8KLSNkZWZpbmUgUENJRV9TVEFUX0xJTktfRE9XTgkJMQotI2RlZmluZSBQQ0lFX1NUQVRfQlVTX09GRlMJCTgKLSNkZWZpbmUgUENJRV9TVEFUX0JVU19NQVNLCQkoMHhmZiA8PCBQQ0lFX1NUQVRfQlVTX09GRlMpCi0jZGVmaW5lIFBDSUVfU1RBVF9ERVZfT0ZGUwkJMjAKLSNkZWZpbmUgUENJRV9TVEFUX0RFVl9NQVNLCQkoMHgxZiA8PCBQQ0lFX1NUQVRfREVWX09GRlMpCi0KLS8qCi0gKiBQQ0lFX0NPTkZfQUREUiBiaXRzCi0gKi8KLSNkZWZpbmUgUENJRV9DT05GX1JFRyhyKQkJKCgoKHIpICYgMHhmMDApIDw8IDI0KSB8ICgocikgJiAweGZjKSkKLSNkZWZpbmUgUENJRV9DT05GX0ZVTkMoZikJCSgoKGYpICYgMHgzKSA8PCA4KQotI2RlZmluZSBQQ0lFX0NPTkZfREVWKGQpCQkoKChkKSAmIDB4MWYpIDw8IDExKQotI2RlZmluZSBQQ0lFX0NPTkZfQlVTKGIpCQkoKChiKSAmIDB4ZmYpIDw8IDE2KQotI2RlZmluZSBQQ0lFX0NPTkZfQUREUl9FTgkJKDEgPDwgMzEpCi0KLS8qCi0gKiBQQ0lFIGNvbmZpZyBjeWNsZXMgYXJlIGRvbmUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBDSUVfQ09ORl9BRERSIHJlZ2lzdGVyCi0gKiBhbmQgdGhlbiByZWFkaW5nIHRoZSBQQ0lFX0NPTkZfREFUQSByZWdpc3Rlci4gTmVlZCB0byBtYWtlIHN1cmUgdGhlc2UKLSAqIHRyYW5zYWN0aW9ucyBhcmUgYXRvbWljLgotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9yaW9uX3BjaWVfbG9jayk7Ci0KLXZvaWQgb3Jpb25fcGNpZV9pZCh1MzIgKmRldiwgdTMyICpyZXYpCi17Ci0JKmRldiA9IG9yaW9uX3JlYWQoUENJRV9ERVZfSUQpID4+IDE2OwotCSpyZXYgPSBvcmlvbl9yZWFkKFBDSUVfREVWX1JFVikgJiAweGZmOwotfQotCi11MzIgb3Jpb25fcGNpZV9sb2NhbF9idXNfbnIodm9pZCkKLXsKLQl1MzIgc3RhdCA9IG9yaW9uX3JlYWQoUENJRV9TVEFUKTsKLQlyZXR1cm4oKHN0YXQgJiBQQ0lFX1NUQVRfQlVTX01BU0spID4+IFBDSUVfU1RBVF9CVVNfT0ZGUyk7Ci19Ci0KLXN0YXRpYyB1MzIgb3Jpb25fcGNpZV9sb2NhbF9kZXZfbnIodm9pZCkKLXsKLQl1MzIgc3RhdCA9IG9yaW9uX3JlYWQoUENJRV9TVEFUKTsKLQlyZXR1cm4oKHN0YXQgJiBQQ0lFX1NUQVRfREVWX01BU0spID4+IFBDSUVfU1RBVF9ERVZfT0ZGUyk7Ci19Ci0KLXN0YXRpYyB1MzIgb3Jpb25fcGNpZV9ub19saW5rKHZvaWQpCi17Ci0JdTMyIHN0YXQgPSBvcmlvbl9yZWFkKFBDSUVfU1RBVCk7Ci0JcmV0dXJuKHN0YXQgJiBQQ0lFX1NUQVRfTElOS19ET1dOKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpb25fcGNpZV9zZXRfYnVzX25yKGludCBucikKLXsKLQlvcmlvbl9jbHJiaXRzKFBDSUVfU1RBVCwgUENJRV9TVEFUX0JVU19NQVNLKTsKLQlvcmlvbl9zZXRiaXRzKFBDSUVfU1RBVCwgbnIgPDwgUENJRV9TVEFUX0JVU19PRkZTKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpb25fcGNpZV9tYXN0ZXJfc2xhdmVfZW5hYmxlKHZvaWQpCi17Ci0Jb3Jpb25fc2V0Yml0cyhQQ0lFX0NNRF9TVEFULCBQQ0lfQ09NTUFORF9NQVNURVIgfAotCQkJCQkgIFBDSV9DT01NQU5EX0lPIHwKLQkJCQkJICBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotCi1zdGF0aWMgdm9pZCBvcmlvbl9wY2llX2VuYWJsZV9pbnRlcnJ1cHRzKHZvaWQpCi17Ci0JLyoKLQkgKiBFbmFibGUgaW50ZXJydXB0cyBsaW5lcwotCSAqIElOVEFbMjRdIElOVEJbMjVdIElOVENbMjZdIElOVERbMjddCi0JICovCi0Jb3Jpb25fc2V0Yml0cyhQQ0lFX01BU0ssIDB4Zjw8MjQpOwotfQotCi1zdGF0aWMgaW50IG9yaW9uX3BjaWVfdmFsaWRfY29uZmlnKHUzMiBidXMsIHUzMiBkZXYpCi17Ci0JLyoKLQkgKiBEb24ndCBnbyBvdXQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIC0tCi0JICogMS4gb3VyIG93biBkZXZpY2UKLQkgKiAyLiB3aGVyZSB0aGVyZSdzIG5vIGRldmljZSBjb25uZWN0ZWQgKG5vIGxpbmspCi0JICogMy4gbm9uZXhpc3RpbmcgZGV2aWNlcyBvbiBsb2NhbCBidXMKLQkgKi8KLQotCWlmICgob3Jpb25fcGNpZV9sb2NhbF9idXNfbnIoKSA9PSBidXMpICYmCi0JICAgKG9yaW9uX3BjaWVfbG9jYWxfZGV2X25yKCkgPT0gZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAob3Jpb25fcGNpZV9ub19saW5rKCkpCi0JCXJldHVybiAwOwotCi0JaWYgKGJ1cyA9PSBvcmlvbl9wY2llX2xvY2FsX2J1c19ucigpKQotCQlpZiAoKChvcmlvbl9wY2llX2xvY2FsX2Rldl9ucigpID09IDApICYmIChkZXYgIT0gMSkpIHx8Ci0JCSAgICgob3Jpb25fcGNpZV9sb2NhbF9kZXZfbnIoKSAhPSAwKSAmJiAoZGV2ICE9IDApKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBvcmlvbl9wY2llX3JkX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdTMyIGRldmZuLCBpbnQgd2hlcmUsCi0JCQkJCQlpbnQgc2l6ZSwgdTMyICp2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgZGV2LCByZXYsIHBjaWVfYWRkcjsKLQotCWlmIChvcmlvbl9wY2llX3ZhbGlkX2NvbmZpZyhidXMtPm51bWJlciwgUENJX1NMT1QoZGV2Zm4pKSA9PSAwKSB7Ci0JCSp2YWwgPSAweGZmZmZmZmZmOwotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlvbl9wY2llX2xvY2ssIGZsYWdzKTsKLQotCW9yaW9uX3dyaXRlKFBDSUVfQ09ORl9BRERSLCBQQ0lFX0NPTkZfQlVTKGJ1cy0+bnVtYmVyKSB8Ci0JCQlQQ0lFX0NPTkZfREVWKFBDSV9TTE9UKGRldmZuKSkgfAotCQkJUENJRV9DT05GX0ZVTkMoUENJX0ZVTkMoZGV2Zm4pKSB8Ci0JCQlQQ0lFX0NPTkZfUkVHKHdoZXJlKSB8IFBDSUVfQ09ORl9BRERSX0VOKTsKLQotCW9yaW9uX3BjaWVfaWQoJmRldiwgJnJldik7Ci0JaWYgKGRldiA9PSBNVjg4RjUxODFfREVWX0lEIHx8IGRldiA9PSBNVjg4RjUxODJfREVWX0lEKSB7Ci0JCS8qIGV4dGVuZGVkIHJlZ2lzdGVyIHNwYWNlICovCi0JCXBjaWVfYWRkciA9IE9SSU9OX1BDSUVfV0FfVklSVF9CQVNFOwotCQlwY2llX2FkZHIgfD0gUENJRV9DT05GX0JVUyhidXMtPm51bWJlcikgfAotCQkJUENJRV9DT05GX0RFVihQQ0lfU0xPVChkZXZmbikpIHwKLQkJCVBDSUVfQ09ORl9GVU5DKFBDSV9GVU5DKGRldmZuKSkgfAotCQkJUENJRV9DT05GX1JFRyh3aGVyZSk7Ci0JCSp2YWwgPSBvcmlvbl9yZWFkKHBjaWVfYWRkcik7Ci0JfSBlbHNlCi0JCSp2YWwgPSBvcmlvbl9yZWFkKFBDSUVfQ09ORl9EQVRBKTsKLQotCWlmIChzaXplID09IDEpCi0JCSp2YWwgPSAoKnZhbCA+PiAoOCood2hlcmUgJiAweDMpKSkgJiAweGZmOwotCWVsc2UgaWYgKHNpemUgPT0gMikKLQkJKnZhbCA9ICgqdmFsID4+ICg4Kih3aGVyZSAmIDB4MykpKSAmIDB4ZmZmZjsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaW9uX3BjaWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotCi1zdGF0aWMgaW50IG9yaW9uX3BjaWVfd3JfY29uZihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MzIgZGV2Zm4sIGludCB3aGVyZSwKLQkJCQkJCWludCBzaXplLCB1MzIgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCWlmIChvcmlvbl9wY2llX3ZhbGlkX2NvbmZpZyhidXMtPm51bWJlciwgUENJX1NMT1QoZGV2Zm4pKSA9PSAwKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9yaW9uX3BjaWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0ID0gUENJQklPU19TVUNDRVNTRlVMOwotCi0Jb3Jpb25fd3JpdGUoUENJRV9DT05GX0FERFIsIFBDSUVfQ09ORl9CVVMoYnVzLT5udW1iZXIpIHwKLQkJCVBDSUVfQ09ORl9ERVYoUENJX1NMT1QoZGV2Zm4pKSB8Ci0JCQlQQ0lFX0NPTkZfRlVOQyhQQ0lfRlVOQyhkZXZmbikpIHwKLQkJCVBDSUVfQ09ORl9SRUcod2hlcmUpIHwgUENJRV9DT05GX0FERFJfRU4pOwotCi0JaWYgKHNpemUgPT0gNCkgewotCQlfX3Jhd193cml0ZWwodmFsLCBQQ0lFX0NPTkZfREFUQSk7Ci0JfSBlbHNlIGlmIChzaXplID09IDIpIHsKLQkJX19yYXdfd3JpdGV3KHZhbCwgUENJRV9DT05GX0RBVEEgKyAod2hlcmUgJiAweDMpKTsKLQl9IGVsc2UgaWYgKHNpemUgPT0gMSkgewotCQlfX3Jhd193cml0ZWIodmFsLCBQQ0lFX0NPTkZfREFUQSArICh3aGVyZSAmIDB4MykpOwotCX0gZWxzZSB7Ci0JCXJldCA9IFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlvbl9wY2llX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0cnVjdCBwY2lfb3BzIG9yaW9uX3BjaWVfb3BzID0gewotCS5yZWFkID0gb3Jpb25fcGNpZV9yZF9jb25mLAotCS53cml0ZSA9IG9yaW9uX3BjaWVfd3JfY29uZiwKLX07Ci0KLQotc3RhdGljIGludCBvcmlvbl9wY2llX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCS8qCi0JICogTWFzdGVyICsgU2xhdmUgZW5hYmxlCi0JICovCi0Jb3Jpb25fcGNpZV9tYXN0ZXJfc2xhdmVfZW5hYmxlKCk7Ci0KLQkvKgotCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGxpbmVzIEEtRAotCSAqLwotCW9yaW9uX3BjaWVfZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCS8qCi0JICogUmVxdWVzdCByZXNvdXJjZQotCSAqLwotCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcykKLQkJcGFuaWMoIm9yaW9uX3BjaV9zZXR1cCB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7Ci0KLQkvKgotCSAqIElPUkVTT1VSQ0VfSU8KLQkgKi8KLQlyZXNbMF0ubmFtZSA9ICJQQ0ktRVggSS9PIFNwYWNlIjsKLQlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCXJlc1swXS5zdGFydCA9IE9SSU9OX1BDSUVfSU9fQlVTX0JBU0U7Ci0JcmVzWzBdLmVuZCA9IHJlc1swXS5zdGFydCArIE9SSU9OX1BDSUVfSU9fU0laRSAtIDE7Ci0JaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSkpCi0JCXBhbmljKCJSZXF1ZXN0IFBDSUUgSU8gcmVzb3VyY2UgZmFpbGVkXG4iKTsKLQlzeXMtPnJlc291cmNlWzBdID0gJnJlc1swXTsKLQotCS8qCi0JICogSU9SRVNPVVJDRV9NRU0KLQkgKi8KLQlyZXNbMV0ubmFtZSA9ICJQQ0ktRVggTWVtb3J5IFNwYWNlIjsKLQlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQlyZXNbMV0uc3RhcnQgPSBPUklPTl9QQ0lFX01FTV9QSFlTX0JBU0U7Ci0JcmVzWzFdLmVuZCA9IHJlc1sxXS5zdGFydCArIE9SSU9OX1BDSUVfTUVNX1NJWkUgLSAxOwotCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSkpCi0JCXBhbmljKCJSZXF1ZXN0IFBDSUUgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7Ci0Jc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07Ci0KLQlzeXMtPnJlc291cmNlWzJdID0gTlVMTDsKLQlzeXMtPmlvX29mZnNldCA9IDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQQ0kgY29udHJvbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFBDSV9NT0RFCQlPUklPTl9QQ0lfUkVHKDB4ZDAwKQotI2RlZmluZSBQQ0lfQ01ECQkJT1JJT05fUENJX1JFRygweGMwMCkKLSNkZWZpbmUgUENJX1AyUF9DT05GCQlPUklPTl9QQ0lfUkVHKDB4MWQxNCkKLSNkZWZpbmUgUENJX0NPTkZfQUREUgkJT1JJT05fUENJX1JFRygweGM3OCkKLSNkZWZpbmUgUENJX0NPTkZfREFUQQkJT1JJT05fUENJX1JFRygweGM3YykKLQotLyoKLSAqIFBDSV9NT0RFIGJpdHMKLSAqLwotI2RlZmluZSBQQ0lfTU9ERV82NEJJVAkJCSgxIDw8IDIpCi0jZGVmaW5lIFBDSV9NT0RFX1BDSVgJCQkoKDEgPDwgNCkgfCAoMSA8PCA1KSkKLQotLyoKLSAqIFBDSV9DTUQgYml0cwotICovCi0jZGVmaW5lIFBDSV9DTURfSE9TVF9SRU9SREVSCQkoMSA8PCAyOSkKLQotLyoKLSAqIFBDSV9QMlBfQ09ORiBiaXRzCi0gKi8KLSNkZWZpbmUgUENJX1AyUF9CVVNfT0ZGUwkJMTYKLSNkZWZpbmUgUENJX1AyUF9CVVNfTUFTSwkJKDB4ZmYgPDwgUENJX1AyUF9CVVNfT0ZGUykKLSNkZWZpbmUgUENJX1AyUF9ERVZfT0ZGUwkJMjQKLSNkZWZpbmUgUENJX1AyUF9ERVZfTUFTSwkJKDB4MWYgPDwgUENJX1AyUF9ERVZfT0ZGUykKLQotLyoKLSAqIFBDSV9DT05GX0FERFIgYml0cwotICovCi0jZGVmaW5lIFBDSV9DT05GX1JFRyhyZWcpCQkoKHJlZykgJiAweGZjKQotI2RlZmluZSBQQ0lfQ09ORl9GVU5DKGZ1bmMpCQkoKChmdW5jKSAmIDB4MykgPDwgOCkKLSNkZWZpbmUgUENJX0NPTkZfREVWKGRldikJCSgoKGRldikgJiAweDFmKSA8PCAxMSkKLSNkZWZpbmUgUENJX0NPTkZfQlVTKGJ1cykJCSgoKGJ1cykgJiAweGZmKSA8PCAxNikKLSNkZWZpbmUgUENJX0NPTkZfQUREUl9FTgkJKDEgPDwgMzEpCi0KLS8qCi0gKiBJbnRlcm5hbCBjb25maWd1cmF0aW9uIHNwYWNlCi0gKi8KLSNkZWZpbmUgUENJX0NPTkZfRlVOQ19TVEFUX0NNRAkJMAotI2RlZmluZSBQQ0lfQ09ORl9SRUdfU1RBVF9DTUQJCTQKLSNkZWZpbmUgUENJWF9TVEFUCQkJMHg2NAotI2RlZmluZSBQQ0lYX1NUQVRfQlVTX09GRlMJCTgKLSNkZWZpbmUgUENJWF9TVEFUX0JVU19NQVNLCQkoMHhmZiA8PCBQQ0lYX1NUQVRfQlVTX09GRlMpCi0KLS8qCi0gKiBQQ0kgY29uZmlnIGN5Y2xlcyBhcmUgZG9uZSBieSBwcm9ncmFtbWluZyB0aGUgUENJX0NPTkZfQUREUiByZWdpc3RlcgotICogYW5kIHRoZW4gcmVhZGluZyB0aGUgUENJX0NPTkZfREFUQSByZWdpc3Rlci4gTmVlZCB0byBtYWtlIHN1cmUgdGhlc2UKLSAqIHRyYW5zYWN0aW9ucyBhcmUgYXRvbWljLgotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9yaW9uX3BjaV9sb2NrKTsKLQotdTMyIG9yaW9uX3BjaV9sb2NhbF9idXNfbnIodm9pZCkKLXsKLQl1MzIgY29uZiA9IG9yaW9uX3JlYWQoUENJX1AyUF9DT05GKTsKLQlyZXR1cm4oKGNvbmYgJiBQQ0lfUDJQX0JVU19NQVNLKSA+PiBQQ0lfUDJQX0JVU19PRkZTKTsKLX0KLQotdTMyIG9yaW9uX3BjaV9sb2NhbF9kZXZfbnIodm9pZCkKLXsKLQl1MzIgY29uZiA9IG9yaW9uX3JlYWQoUENJX1AyUF9DT05GKTsKLQlyZXR1cm4oKGNvbmYgJiBQQ0lfUDJQX0RFVl9NQVNLKSA+PiBQQ0lfUDJQX0RFVl9PRkZTKTsKLX0KLQotaW50IG9yaW9uX3BjaV9od19yZF9jb25mKHUzMiBidXMsIHUzMiBkZXYsIHUzMiBmdW5jLAotCQkJCQl1MzIgd2hlcmUsIHUzMiBzaXplLCB1MzIgKnZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlvbl9wY2lfbG9jaywgZmxhZ3MpOwotCi0Jb3Jpb25fd3JpdGUoUENJX0NPTkZfQUREUiwgUENJX0NPTkZfQlVTKGJ1cykgfAotCQkJUENJX0NPTkZfREVWKGRldikgfCBQQ0lfQ09ORl9SRUcod2hlcmUpIHwKLQkJCVBDSV9DT05GX0ZVTkMoZnVuYykgfCBQQ0lfQ09ORl9BRERSX0VOKTsKLQotCSp2YWwgPSBvcmlvbl9yZWFkKFBDSV9DT05GX0RBVEEpOwotCi0JaWYgKHNpemUgPT0gMSkKLQkJKnZhbCA9ICgqdmFsID4+ICg4Kih3aGVyZSAmIDB4MykpKSAmIDB4ZmY7Ci0JZWxzZSBpZiAoc2l6ZSA9PSAyKQotCQkqdmFsID0gKCp2YWwgPj4gKDgqKHdoZXJlICYgMHgzKSkpICYgMHhmZmZmOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3Jpb25fcGNpX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLWludCBvcmlvbl9wY2lfaHdfd3JfY29uZih1MzIgYnVzLCB1MzIgZGV2LCB1MzIgZnVuYywKLQkJCQkJdTMyIHdoZXJlLCB1MzIgc2l6ZSwgdTMyIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmb3Jpb25fcGNpX2xvY2ssIGZsYWdzKTsKLQotCW9yaW9uX3dyaXRlKFBDSV9DT05GX0FERFIsIFBDSV9DT05GX0JVUyhidXMpIHwKLQkJCVBDSV9DT05GX0RFVihkZXYpIHwgUENJX0NPTkZfUkVHKHdoZXJlKSB8Ci0JCQlQQ0lfQ09ORl9GVU5DKGZ1bmMpIHwgUENJX0NPTkZfQUREUl9FTik7Ci0KLQlpZiAoc2l6ZSA9PSA0KSB7Ci0JCV9fcmF3X3dyaXRlbCh2YWwsIFBDSV9DT05GX0RBVEEpOwotCX0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7Ci0JCV9fcmF3X3dyaXRldyh2YWwsIFBDSV9DT05GX0RBVEEgKyAod2hlcmUgJiAweDMpKTsKLQl9IGVsc2UgaWYgKHNpemUgPT0gMSkgewotCQlfX3Jhd193cml0ZWIodmFsLCBQQ0lfQ09ORl9EQVRBICsgKHdoZXJlICYgMHgzKSk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaW9uX3BjaV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9yaW9uX3BjaV9yZF9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKLQkJCQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKLXsKLQkvKgotCSAqIERvbid0IGdvIG91dCBmb3IgbG9jYWwgZGV2aWNlCi0JICovCi0JaWYgKChvcmlvbl9wY2lfbG9jYWxfYnVzX25yKCkgPT0gYnVzLT5udW1iZXIpICYmCi0JICAgKG9yaW9uX3BjaV9sb2NhbF9kZXZfbnIoKSA9PSBQQ0lfU0xPVChkZXZmbikpKSB7Ci0JCSp2YWwgPSAweGZmZmZmZmZmOwotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCX0KLQotCXJldHVybiBvcmlvbl9wY2lfaHdfcmRfY29uZihidXMtPm51bWJlciwgUENJX1NMT1QoZGV2Zm4pLAotCQkJCQlQQ0lfRlVOQyhkZXZmbiksIHdoZXJlLCBzaXplLCB2YWwpOwotfQotCi1zdGF0aWMgaW50IG9yaW9uX3BjaV93cl9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKLQkJCQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQotewotCS8qCi0JICogRG9uJ3QgZ28gb3V0IGZvciBsb2NhbCBkZXZpY2UKLQkgKi8KLQlpZiAoKG9yaW9uX3BjaV9sb2NhbF9idXNfbnIoKSA9PSBidXMtPm51bWJlcikgJiYKLQkgICAob3Jpb25fcGNpX2xvY2FsX2Rldl9ucigpID09IFBDSV9TTE9UKGRldmZuKSkpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlyZXR1cm4gb3Jpb25fcGNpX2h3X3dyX2NvbmYoYnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSwKLQkJCQkJUENJX0ZVTkMoZGV2Zm4pLCB3aGVyZSwgc2l6ZSwgdmFsKTsKLX0KLQotc3RydWN0IHBjaV9vcHMgb3Jpb25fcGNpX29wcyA9IHsKLQkucmVhZCA9IG9yaW9uX3BjaV9yZF9jb25mLAotCS53cml0ZSA9IG9yaW9uX3BjaV93cl9jb25mLAotfTsKLQotc3RhdGljIHZvaWQgb3Jpb25fcGNpX3NldF9idXNfbnIoaW50IG5yKQotewotCXUzMiBwMnAgPSBvcmlvbl9yZWFkKFBDSV9QMlBfQ09ORik7Ci0KLQlpZiAob3Jpb25fcmVhZChQQ0lfTU9ERSkgJiBQQ0lfTU9ERV9QQ0lYKSB7Ci0JCS8qCi0JCSAqIFBDSS1YIG1vZGUKLQkJICovCi0JCXUzMiBwY2l4X3N0YXR1cywgYnVzLCBkZXY7Ci0JCWJ1cyA9IChwMnAgJiBQQ0lfUDJQX0JVU19NQVNLKSA+PiBQQ0lfUDJQX0JVU19PRkZTOwotCQlkZXYgPSAocDJwICYgUENJX1AyUF9ERVZfTUFTSykgPj4gUENJX1AyUF9ERVZfT0ZGUzsKLQkJb3Jpb25fcGNpX2h3X3JkX2NvbmYoYnVzLCBkZXYsIDAsIFBDSVhfU1RBVCwgNCwgJnBjaXhfc3RhdHVzKTsKLQkJcGNpeF9zdGF0dXMgJj0gflBDSVhfU1RBVF9CVVNfTUFTSzsKLQkJcGNpeF9zdGF0dXMgfD0gKG5yIDw8IFBDSVhfU1RBVF9CVVNfT0ZGUyk7Ci0JCW9yaW9uX3BjaV9od193cl9jb25mKGJ1cywgZGV2LCAwLCBQQ0lYX1NUQVQsIDQsIHBjaXhfc3RhdHVzKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBQQ0kgQ29udmVudGlvbmFsIG1vZGUKLQkJICovCi0JCXAycCAmPSB+UENJX1AyUF9CVVNfTUFTSzsKLQkJcDJwIHw9IChuciA8PCBQQ0lfUDJQX0JVU19PRkZTKTsKLQkJb3Jpb25fd3JpdGUoUENJX1AyUF9DT05GLCBwMnApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgb3Jpb25fcGNpX21hc3Rlcl9zbGF2ZV9lbmFibGUodm9pZCkKLXsKLQl1MzIgYnVzX25yLCBkZXZfbnIsIGZ1bmMsIHJlZywgdmFsOwotCi0JYnVzX25yID0gb3Jpb25fcGNpX2xvY2FsX2J1c19ucigpOwotCWRldl9uciA9IG9yaW9uX3BjaV9sb2NhbF9kZXZfbnIoKTsKLQlmdW5jID0gUENJX0NPTkZfRlVOQ19TVEFUX0NNRDsKLQlyZWcgPSBQQ0lfQ09ORl9SRUdfU1RBVF9DTUQ7Ci0Jb3Jpb25fcGNpX2h3X3JkX2NvbmYoYnVzX25yLCBkZXZfbnIsIGZ1bmMsIHJlZywgNCwgJnZhbCk7Ci0JdmFsIHw9IChQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUik7Ci0Jb3Jpb25fcGNpX2h3X3dyX2NvbmYoYnVzX25yLCBkZXZfbnIsIGZ1bmMsIHJlZywgNCwgdmFsIHwgMHg3KTsKLX0KLQotc3RhdGljIGludCBvcmlvbl9wY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQotewotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCi0JLyoKLQkgKiBNYXN0ZXIgKyBTbGF2ZSBlbmFibGUKLQkgKi8KLQlvcmlvbl9wY2lfbWFzdGVyX3NsYXZlX2VuYWJsZSgpOwotCi0JLyoKLQkgKiBGb3JjZSBvcmRlcmluZwotCSAqLwotCW9yaW9uX3NldGJpdHMoUENJX0NNRCwgUENJX0NNRF9IT1NUX1JFT1JERVIpOwotCi0JLyoKLQkgKiBSZXF1ZXN0IHJlc291cmNlcwotCSAqLwotCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcykKLQkJcGFuaWMoIm9yaW9uX3BjaV9zZXR1cCB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7Ci0KLQkvKgotCSAqIElPUkVTT1VSQ0VfSU8KLQkgKi8KLQlyZXNbMF0ubmFtZSA9ICJQQ0kgSS9PIFNwYWNlIjsKLQlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCXJlc1swXS5zdGFydCA9IE9SSU9OX1BDSV9JT19CVVNfQkFTRTsKLQlyZXNbMF0uZW5kID0gcmVzWzBdLnN0YXJ0ICsgT1JJT05fUENJX0lPX1NJWkUgLSAxOwotCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZyZXNbMF0pKQotCQlwYW5pYygiUmVxdWVzdCBQQ0kgSU8gcmVzb3VyY2UgZmFpbGVkXG4iKTsKLQlzeXMtPnJlc291cmNlWzBdID0gJnJlc1swXTsKLQotCS8qCi0JICogSU9SRVNPVVJDRV9NRU0KLQkgKi8KLQlyZXNbMV0ubmFtZSA9ICJQQ0kgTWVtb3J5IFNwYWNlIjsKLQlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQlyZXNbMV0uc3RhcnQgPSBPUklPTl9QQ0lfTUVNX1BIWVNfQkFTRTsKLQlyZXNbMV0uZW5kID0gcmVzWzFdLnN0YXJ0ICsgT1JJT05fUENJX01FTV9TSVpFIC0gMTsKLQlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMV0pKQotCQlwYW5pYygiUmVxdWVzdCBQQ0kgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7Ci0Jc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07Ci0KLQlzeXMtPnJlc291cmNlWzJdID0gTlVMTDsKLQlzeXMtPmlvX29mZnNldCA9IDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgUENJRSArIFBDSQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgb3Jpb25fcGNpX3N5c19zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChuciA9PSAwKSB7Ci0JCS8qCi0JCSAqIFBDSUUgc2V0dXAKLQkJICovCi0JCW9yaW9uX3BjaWVfc2V0X2J1c19ucigwKTsKLQkJcmV0ID0gb3Jpb25fcGNpZV9zZXR1cChzeXMpOwotCX0gZWxzZSBpZiAobnIgPT0gMSkgewotCQkvKgotCQkgKiBQQ0kgc2V0dXAKLQkJICovCi0JCXJldCA9IG9yaW9uX3BjaV9zZXR1cChzeXMpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0cnVjdCBwY2lfYnVzICpvcmlvbl9wY2lfc3lzX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQotewotCXN0cnVjdCBwY2lfb3BzICpvcHM7Ci0Jc3RydWN0IHBjaV9idXMgKmJ1czsKLQotCi0JaWYgKG5yID09IDApIHsKLQkJdTMyIHBjaV9idXM7Ci0JCS8qCi0JCSAqIFBDSUUgc2NhbgotCQkgKi8KLQkJb3BzID0gJm9yaW9uX3BjaWVfb3BzOwotCQlidXMgPSBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgb3BzLCBzeXMpOwotCQkvKgotCQkgKiBTZXQgbG9jYWwgUENJIGJ1cyBudW1iZXIgdG8gZm9sbG93IFBDSUUgYnJpZGdlcyAoaWYgYW55KQotCQkgKi8KLQkJcGNpX2J1cwk9IGJ1cy0+bnVtYmVyICsgYnVzLT5zdWJvcmRpbmF0ZSAtIGJ1cy0+c2Vjb25kYXJ5ICsgMTsKLQkJb3Jpb25fcGNpX3NldF9idXNfbnIocGNpX2J1cyk7Ci0JfSBlbHNlIGlmIChuciA9PSAxKSB7Ci0JCS8qCi0JCSAqIFBDSSBzY2FuCi0JCSAqLwotCQlvcHMgPSAmb3Jpb25fcGNpX29wczsKLQkJYnVzID0gcGNpX3NjYW5fYnVzKHN5cy0+YnVzbnIsIG9wcywgc3lzKTsKLQl9IGVsc2UgewotCQlCVUcoKTsKLQkJYnVzID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gYnVzOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9yZDg4ZjUxODItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb24vcmQ4OGY1MTgyLXNldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NTFiOGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9yZDg4ZjUxODItc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1vcmlvbi9yZDg4ZjUxODItc2V0dXAuYwotICoKLSAqIE1hcnZlbGwgT3Jpb24tTkFTIFJlZmVyZW5jZSBEZXNpZ24gU2V0dXAKLSAqCi0gKiBNYWludGFpbmVyOiBSb25lbiBTaGl0cml0IDxyc2hpdHJpdEBtYXJ2ZWxsLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KLSNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2xlZHMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJELTg4RjUxODIgSW5mbwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiA1MTJLIE5PUiBmbGFzaCBEZXZpY2UgYnVzIGJvb3QgY2hpcCBzZWxlY3QKLSAqLwotCi0jZGVmaW5lIFJEODhGNTE4Ml9OT1JfQk9PVF9CQVNFCQkweGY0MDAwMDAwCi0jZGVmaW5lIFJEODhGNTE4Ml9OT1JfQk9PVF9TSVpFCQlTWl81MTJLCi0KLS8qCi0gKiAxNk0gTk9SIGZsYXNoIG9uIERldmljZSBidXMgY2hpcCBzZWxlY3QgMQotICovCi0KLSNkZWZpbmUgUkQ4OEY1MTgyX05PUl9CQVNFCQkweGZjMDAwMDAwCi0jZGVmaW5lIFJEODhGNTE4Ml9OT1JfU0laRQkJU1pfMTZNCi0KLS8qCi0gKiBQQ0kKLSAqLwotCi0jZGVmaW5lIFJEODhGNTE4Ml9QQ0lfU0xPVDBfT0ZGUwk3Ci0jZGVmaW5lIFJEODhGNTE4Ml9QQ0lfU0xPVDBfSVJRX0FfUElOCTcKLSNkZWZpbmUgUkQ4OEY1MTgyX1BDSV9TTE9UMF9JUlFfQl9QSU4JNgotCi0vKgotICogR1BJTyBEZWJ1ZyBMRUQKLSAqLwotCi0jZGVmaW5lIFJEODhGNTE4Ml9HUElPX0RCR19MRUQJCTAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAxNk0gTk9SIEZsYXNoIG9uIERldmljZSBidXMgQ1MxCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcmQ4OGY1MTgyX25vcl9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZDg4ZjUxODJfbm9yX2ZsYXNoX3Jlc291cmNlID0gewotCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0CQkJPSBSRDg4RjUxODJfTk9SX0JBU0UsCi0JLmVuZAkJCT0gUkQ4OEY1MTgyX05PUl9CQVNFICsgUkQ4OEY1MTgyX05PUl9TSVpFIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJkODhmNTE4Ml9ub3JfZmxhc2ggPSB7Ci0JLm5hbWUJCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCQk9IDAsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnJkODhmNTE4Ml9ub3JfZmxhc2hfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCQk9IDEsCi0JLnJlc291cmNlCQk9ICZyZDg4ZjUxODJfbm9yX2ZsYXNoX3Jlc291cmNlLAotfTsKLQotI2lmZGVmIENPTkZJR19MRURTCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVXNlIEdQSU8gZGVidWcgbGVkIGFzIENQVSBhY3RpdmUgaW5kaWNhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIHJkODhmNTE4Ml9kYmdsZWRfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQotewotCWludCB2YWw7Ci0KLQlpZiAoZXZ0ID09IGxlZF9pZGxlX2VuZCkKLQkJdmFsID0gMTsKLQllbHNlIGlmIChldnQgPT0gbGVkX2lkbGVfc3RhcnQpCi0JCXZhbCA9IDA7Ci0JZWxzZQotCQlyZXR1cm47Ci0KLQlncGlvX3NldF92YWx1ZShSRDg4RjUxODJfR1BJT19EQkdfTEVELCB2YWwpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCByZDg4ZjUxODJfZGJnbGVkX2luaXQodm9pZCkKLXsKLQlpbnQgcGluOwotCi0JaWYgKG1hY2hpbmVfaXNfcmQ4OGY1MTgyKCkpIHsKLQkJcGluID0gUkQ4OEY1MTgyX0dQSU9fREJHX0xFRDsKLQotCQlpZiAoZ3Bpb19yZXF1ZXN0KHBpbiwgIkRCR0xFRCIpID09IDApIHsKLQkJCWlmIChncGlvX2RpcmVjdGlvbl9vdXRwdXQocGluLCAwKSAhPSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJyZDg4ZjUxODJfZGJnbGVkX2luaXQgZmFpbGVkICIKLQkJCQkJCSJ0byBzZXQgb3V0cHV0IHBpbiAlZFxuIiwgcGluKTsKLQkJCQlncGlvX2ZyZWUocGluKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmQ4OGY1MTgyX2RiZ2xlZF9pbml0IGZhaWxlZCAiCi0JCQkJCSJ0byByZXF1ZXN0IGdwaW8gJWRcbiIsIHBpbik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWxlZHNfZXZlbnQgPSByZDg4ZjUxODJfZGJnbGVkX2V2ZW50OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotX19pbml0Y2FsbChyZDg4ZjUxODJfZGJnbGVkX2luaXQpOwotCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQQ0kKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIF9faW5pdCByZDg4ZjUxODJfcGNpX3ByZWluaXQodm9pZCkKLXsKLQlpbnQgcGluOwotCi0JLyoKLQkgKiBDb25maWd1cmUgUENJIEdQSU8gSVJRIHBpbnMKLQkgKi8KLQlwaW4gPSBSRDg4RjUxODJfUENJX1NMT1QwX0lSUV9BX1BJTjsKLQlpZiAoZ3Bpb19yZXF1ZXN0KHBpbiwgIlBDSSBJbnRBIikgPT0gMCkgewotCQlpZiAoZ3Bpb19kaXJlY3Rpb25faW5wdXQocGluKSA9PSAwKSB7Ci0JCQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEocGluKSwgSVJRVF9MT1cpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJyZDg4ZjUxODJfcGNpX3ByZWluaXQgZmFpZWxkIHRvICIKLQkJCQkJInNldF9pcnFfdHlwZSBwaW4gJWRcbiIsIHBpbik7Ci0JCQlncGlvX2ZyZWUocGluKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmQ4OGY1MTgyX3BjaV9wcmVpbml0IGZhaWxlZCB0byByZXF1ZXN0IGdwaW8gJWRcbiIsIHBpbik7Ci0JfQotCi0JcGluID0gUkQ4OEY1MTgyX1BDSV9TTE9UMF9JUlFfQl9QSU47Ci0JaWYgKGdwaW9fcmVxdWVzdChwaW4sICJQQ0kgSW50QiIpID09IDApIHsKLQkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbikgPT0gMCkgewotCQkJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHBpbiksIElSUVRfTE9XKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmQ4OGY1MTgyX3BjaV9wcmVpbml0IGZhaWVsZCB0byAiCi0JCQkJCSJzZXRfaXJxX3R5cGUgcGluICVkXG4iLCBwaW4pOwotCQkJZ3Bpb19mcmVlKHBpbik7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgInJkODhmNTE4Ml9wY2lfcHJlaW5pdCBmYWlsZWQgdG8gZ3Bpb19yZXF1ZXN0ICVkXG4iLCBwaW4pOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgcmQ4OGY1MTgyX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQkvKgotCSAqIFBDSS1FIGlzbid0IHVzZWQgb24gdGhlIFJEMgotCSAqLwotCWlmIChkZXYtPmJ1cy0+bnVtYmVyID09IG9yaW9uX3BjaWVfbG9jYWxfYnVzX25yKCkpCi0JCXJldHVybiBJUlFfT1JJT05fUENJRTBfSU5UOwotCi0JLyoKLQkgKiBQQ0kgSVJRcyBhcmUgY29ubmVjdGVkIHZpYSBHUElPcwotCSAqLwotCXN3aXRjaCAoc2xvdCAtIFJEODhGNTE4Ml9QQ0lfU0xPVDBfT0ZGUykgewotCWNhc2UgMDoKLQkJaWYgKHBpbiA9PSAxKQotCQkJcmV0dXJuIGdwaW9fdG9faXJxKFJEODhGNTE4Ml9QQ0lfU0xPVDBfSVJRX0FfUElOKTsKLQkJZWxzZQotCQkJcmV0dXJuIGdwaW9fdG9faXJxKFJEODhGNTE4Ml9QQ0lfU0xPVDBfSVJRX0JfUElOKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLTE7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGh3X3BjaSByZDg4ZjUxODJfcGNpIF9faW5pdGRhdGEgPSB7Ci0JLm5yX2NvbnRyb2xsZXJzCT0gMiwKLQkucHJlaW5pdAk9IHJkODhmNTE4Ml9wY2lfcHJlaW5pdCwKLQkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKLQkuc2V0dXAJCT0gb3Jpb25fcGNpX3N5c19zZXR1cCwKLQkuc2NhbgkJPSBvcmlvbl9wY2lfc3lzX3NjYW5fYnVzLAotCS5tYXBfaXJxCT0gcmQ4OGY1MTgyX3BjaV9tYXBfaXJxLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcmQ4OGY1MTgyX3BjaV9pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfcmQ4OGY1MTgyKCkpCi0JCXBjaV9jb21tb25faW5pdCgmcmQ4OGY1MTgyX3BjaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKHJkODhmNTE4Ml9wY2lfaW5pdCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRXRoZXJuZXQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgyX2V0aF9kYXRhID0gewotCS5waHlfYWRkcgk9IDgsCi0JLmZvcmNlX3BoeV9hZGRyID0gMSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUlRDIERTMTMzOCBvbiBJMkMgYnVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSByZDg4ZjUxODJfaTJjX3J0YyA9IHsKLQkuZHJpdmVyX25hbWUJPSAicnRjLWRzMTMwNyIsCi0JLnR5cGUJCT0gImRzMTMzOCIsCi0JLmFkZHIJCT0gMHg2OCwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU2F0YQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODJfc2F0YV9kYXRhID0gewotCS5uX3BvcnRzICAgICAgICA9IDIsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgU2V0dXAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcmQ4OGY1MTgyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZyZDg4ZjUxODJfbm9yX2ZsYXNoLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHJkODhmNTE4Ml9pbml0KHZvaWQpCi17Ci0JLyoKLQkgKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgotCSAqLwotCW9yaW9uX2luaXQoKTsKLQotCS8qCi0JICogU2V0dXAgdGhlIENQVSBhZGRyZXNzIGRlY29kZSB3aW5kb3dzIGZvciBvdXIgZGV2aWNlcwotCSAqLwotCW9yaW9uX3NldHVwX2NwdV93aW4oT1JJT05fREVWX0JPT1QsIFJEODhGNTE4Ml9OT1JfQk9PVF9CQVNFLAotCQkJCVJEODhGNTE4Ml9OT1JfQk9PVF9TSVpFLCAtMSk7Ci0Jb3Jpb25fc2V0dXBfY3B1X3dpbihPUklPTl9ERVYxLCBSRDg4RjUxODJfTk9SX0JBU0UsCi0JCQkJUkQ4OEY1MTgyX05PUl9TSVpFLCAtMSk7Ci0KLQkvKgotCSAqIE9wZW4gYSBzcGVjaWFsIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgZm9yIHRoZSBQQ0lFIFdBLgotCSAqLwotCW9yaW9uX3dyaXRlKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHgyMDA3NCwgT1JJT05fUENJRV9XQV9QSFlTX0JBU0UpOwotCW9yaW9uX3dyaXRlKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHgyMDA3MCwgKDB4Nzk0MSB8Ci0JCSgoKE9SSU9OX1BDSUVfV0FfU0laRSA+PiAxNikgLSAxKSkgPDwgMTYpKTsKLQotCS8qCi0JICogU2V0dXAgTXVsdGlwbGV4aW5nIFBpbnMgLS0KLQkgKiBNUFBbMF0gRGVidWcgTGVkIChHUElPIC0gT3V0KQotCSAqIE1QUFsxXSBEZWJ1ZyBMZWQgKEdQSU8gLSBPdXQpCi0JICogTVBQWzJdIE4vQQotCSAqIE1QUFszXSBSVENfSW50IChHUElPIC0gSW4pCi0JICogTVBQWzRdIEdQSU8KLQkgKiBNUFBbNV0gR1BJTwotCSAqIE1QUFs2XSBQQ0lfaW50QSAoR1BJTyAtIEluKQotCSAqIE1QUFs3XSBQQ0lfaW50QiAoR1BJTyAtIEluKQotCSAqIE1QUFs4LTExXSBOL0EKLQkgKiBNUFBbMTJdIFNBVEEgMCBwcmVzZW5jZSBJbmRpY2F0aW9uCi0JICogTVBQWzEzXSBTQVRBIDEgcHJlc2VuY2UgSW5kaWNhdGlvbgotCSAqIE1QUFsxNF0gU0FUQSAwIGFjdGl2ZSBJbmRpY2F0aW9uCi0JICogTVBQWzE1XSBTQVRBIDEgYWN0aXZlIGluZGljYXRpb24KLQkgKiBNUFBbMTYtMTldIE5vdCB1c2VkCi0JICogTVBQWzIwXSBQQ0kgQ2xvY2sgdG8gTVY4OEY1MTgyCi0JICogTVBQWzIxXSBQQ0kgQ2xvY2sgdG8gbWluaSBQQ0kgQ09OMTEKLQkgKiBNUFBbMjJdIFVTQiAwIG92ZXIgY3VycmVudCBpbmRpY2F0aW9uCi0JICogTVBQWzIzXSBVU0IgMSBvdmVyIGN1cnJlbnQgaW5kaWNhdGlvbgotCSAqIE1QUFsyNF0gVVNCIDEgb3ZlciBjdXJyZW50IGVuYWJsZQotCSAqIE1QUFsyNV0gVVNCIDAgb3ZlciBjdXJyZW50IGVuYWJsZQotCSAqLwotCi0Jb3Jpb25fd3JpdGUoTVBQXzBfN19DVFJMLCAweDAwMDAwMDAzKTsKLQlvcmlvbl93cml0ZShNUFBfOF8xNV9DVFJMLCAweDU1NTUwMDAwKTsKLQlvcmlvbl93cml0ZShNUFBfMTZfMTlfQ1RSTCwgMHg1NTU1KTsKLQotCW9yaW9uX2dwaW9fc2V0X3ZhbGlkX3BpbnMoMHgwMDAwMDBmYik7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyZDg4ZjUxODJfZGV2aWNlcywgQVJSQVlfU0laRShyZDg4ZjUxODJfZGV2aWNlcykpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZyZDg4ZjUxODJfaTJjX3J0YywgMSk7Ci0Jb3Jpb25fZXRoX2luaXQoJnJkODhmNTE4Ml9ldGhfZGF0YSk7Ci0Jb3Jpb25fc2F0YV9pbml0KCZyZDg4ZjUxODJfc2F0YV9kYXRhKTsKLX0KLQotTUFDSElORV9TVEFSVChSRDg4RjUxODIsICJNYXJ2ZWxsIE9yaW9uLU5BUyBSZWZlcmVuY2UgRGVzaWduIikKLQkvKiBNYWludGFpbmVyOiBSb25lbiBTaGl0cml0IDxyc2hpdHJpdEBtYXJ2ZWxsLmNvbT4gKi8KLQkucGh5c19pbwk9IE9SSU9OX1JFR1NfUEhZU19CQVNFLAotCS5pb19wZ19vZmZzdAk9ICgoT1JJT05fUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKLQkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAotCS5pbml0X21hY2hpbmUJPSByZDg4ZjUxODJfaW5pdCwKLQkubWFwX2lvCQk9IG9yaW9uX21hcF9pbywKLQkuaW5pdF9pcnEJPSBvcmlvbl9pbml0X2lycSwKLQkudGltZXIJCT0gJm9yaW9uX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb24vdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbi90aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNDI2MmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbi90aW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtb3Jpb24vdGltZS5jCi0gKgotICogQ29yZSB0aW1lIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBPcmlvbiBTeXN0ZW0gT24gQ2hpcAotICoKLSAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbi5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0vKgotICogVGltZXIwOiBjbG9ja19ldmVudF9kZXZpY2UsIFRpY2suCi0gKiBUaW1lcjE6IGNsb2Nrc291cmNlLCBGcmVlIHJ1bm5pbmcuCi0gKiBXYXRjaERvZzogTm90IHVzZWQuCi0gKgotICogVGltZXJzIGFyZSBjb3VudGluZyBkb3duLgotICovCi0jZGVmaW5lIENMT0NLRVZFTlQJMAotI2RlZmluZSBDTE9DS1NPVVJDRQkxCi0KLS8qCi0gKiBUaW1lcnMgYml0cwotICovCi0jZGVmaW5lIEJSSURHRV9JTlRfVElNRVIoeCkJKDEgPDwgKCh4KSArIDEpKQotI2RlZmluZSBUSU1FUl9FTih4KQkJKDEgPDwgKCh4KSAqIDIpKQotI2RlZmluZSBUSU1FUl9SRUxPQURfRU4oeCkJKDEgPDwgKCgoeCkgKiAyKSArIDEpKQotI2RlZmluZSBCUklER0VfSU5UX1RJTUVSX1dECSgxIDw8IDMpCi0jZGVmaW5lIFRJTUVSX1dEX0VOCQkoMSA8PCA0KQotI2RlZmluZSBUSU1FUl9XRF9SRUxPQURfRU4JKDEgPDwgNSkKLQotc3RhdGljIGN5Y2xlX3Qgb3Jpb25fY2xrc3JjX3JlYWQodm9pZCkKLXsKLQlyZXR1cm4gKDB4ZmZmZmZmZmYgLSBvcmlvbl9yZWFkKFRJTUVSX1ZBTChDTE9DS1NPVVJDRSkpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBvcmlvbl9jbGtzcmMgPSB7Ci0JLm5hbWUJCT0gIm9yaW9uX2Nsb2Nrc291cmNlIiwKLQkuc2hpZnQJCT0gMjAsCi0JLnJhdGluZwkJPSAzMDAsCi0JLnJlYWQJCT0gb3Jpb25fY2xrc3JjX3JlYWQsCi0JLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAotfTsKLQotc3RhdGljIGludAotb3Jpb25fY2xrZXZ0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoZGVsdGEgPT0gMCkKLQkJcmV0dXJuIC1FVElNRTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCS8qCi0JICogQ2xlYXIgYW5kIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgYml0Ci0JICovCi0Jb3Jpb25fd3JpdGUoQlJJREdFX0NBVVNFLCB+QlJJREdFX0lOVF9USU1FUihDTE9DS0VWRU5UKSk7Ci0Jb3Jpb25fc2V0Yml0cyhCUklER0VfTUFTSywgQlJJREdFX0lOVF9USU1FUihDTE9DS0VWRU5UKSk7Ci0KLQkvKgotCSAqIFNldHVwIG5ldyB0aW1lciB2YWx1ZQotCSAqLwotCW9yaW9uX3dyaXRlKFRJTUVSX1ZBTChDTE9DS0VWRU5UKSwgZGVsdGEpOwotCi0JLyoKLQkgKiBEaXNhYmxlIGF1dG8gcmVsb2FkIGFuZCBraWNrb2ZmIHRoZSB0aW1lcgotCSAqLwotCW9yaW9uX2NscmJpdHMoVElNRVJfQ1RSTCwgVElNRVJfUkVMT0FEX0VOKENMT0NLRVZFTlQpKTsKLQlvcmlvbl9zZXRiaXRzKFRJTUVSX0NUUkwsIFRJTUVSX0VOKENMT0NLRVZFTlQpKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotb3Jpb25fY2xrZXZ0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaWYgKG1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpIHsKLQkJLyoKLQkJICogU2V0dXAgbGF0Y2ggY3ljbGVzIGluIHRpbWVyIGFuZCBlbmFibGUgcmVsb2FkIGludGVycnVwdC4KLQkJICovCi0JCW9yaW9uX3dyaXRlKFRJTUVSX1ZBTF9SRUxPQUQoQ0xPQ0tFVkVOVCksIExBVENIKTsKLQkJb3Jpb25fd3JpdGUoVElNRVJfVkFMKENMT0NLRVZFTlQpLCBMQVRDSCk7Ci0JCW9yaW9uX3NldGJpdHMoQlJJREdFX01BU0ssIEJSSURHRV9JTlRfVElNRVIoQ0xPQ0tFVkVOVCkpOwotCQlvcmlvbl9zZXRiaXRzKFRJTUVSX0NUUkwsIFRJTUVSX1JFTE9BRF9FTihDTE9DS0VWRU5UKSB8Ci0JCQkJCSAgVElNRVJfRU4oQ0xPQ0tFVkVOVCkpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIERpc2FibGUgdGltZXIgYW5kIGludGVycnVwdAotCQkgKi8KLQkJb3Jpb25fY2xyYml0cyhCUklER0VfTUFTSywgQlJJREdFX0lOVF9USU1FUihDTE9DS0VWRU5UKSk7Ci0JCW9yaW9uX3dyaXRlKEJSSURHRV9DQVVTRSwgfkJSSURHRV9JTlRfVElNRVIoQ0xPQ0tFVkVOVCkpOwotCQlvcmlvbl9jbHJiaXRzKFRJTUVSX0NUUkwsIFRJTUVSX1JFTE9BRF9FTihDTE9DS0VWRU5UKSB8Ci0JCQkJCSAgVElNRVJfRU4oQ0xPQ0tFVkVOVCkpOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2Ugb3Jpb25fY2xrZXZ0ID0gewotCS5uYW1lCQk9ICJvcmlvbl90aWNrIiwKLQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCi0JLnNoaWZ0CQk9IDMyLAotCS5yYXRpbmcJCT0gMzAwLAotCS5jcHVtYXNrCT0gQ1BVX01BU0tfQ1BVMCwKLQkuc2V0X25leHRfZXZlbnQJPSBvcmlvbl9jbGtldnRfbmV4dF9ldmVudCwKLQkuc2V0X21vZGUJPSBvcmlvbl9jbGtldnRfbW9kZSwKLX07Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBvcmlvbl90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCS8qCi0JICogQ2xlYXIgY2F1c2UgYml0IGFuZCBkbyBldmVudAotCSAqLwotCW9yaW9uX3dyaXRlKEJSSURHRV9DQVVTRSwgfkJSSURHRV9JTlRfVElNRVIoQ0xPQ0tFVkVOVCkpOwotCW9yaW9uX2Nsa2V2dC5ldmVudF9oYW5kbGVyKCZvcmlvbl9jbGtldnQpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb3Jpb25fdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJvcmlvbl90aWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCi0JLmhhbmRsZXIJPSBvcmlvbl90aW1lcl9pbnRlcnJ1cHQKLX07Ci0KLXN0YXRpYyB2b2lkIG9yaW9uX3RpbWVyX2luaXQodm9pZCkKLXsKLQkvKgotCSAqIFNldHVwIGNsb2Nrc291cmNlIGZyZWUgcnVubmluZyB0aW1lciAobm8gaW50ZXJydXB0IG9uIHJlbG9hZCkKLQkgKi8KLQlvcmlvbl93cml0ZShUSU1FUl9WQUwoQ0xPQ0tTT1VSQ0UpLCAweGZmZmZmZmZmKTsKLQlvcmlvbl93cml0ZShUSU1FUl9WQUxfUkVMT0FEKENMT0NLU09VUkNFKSwgMHhmZmZmZmZmZik7Ci0Jb3Jpb25fY2xyYml0cyhCUklER0VfTUFTSywgQlJJREdFX0lOVF9USU1FUihDTE9DS1NPVVJDRSkpOwotCW9yaW9uX3NldGJpdHMoVElNRVJfQ1RSTCwgVElNRVJfUkVMT0FEX0VOKENMT0NLU09VUkNFKSB8Ci0JCQkJICBUSU1FUl9FTihDTE9DS1NPVVJDRSkpOwotCi0JLyoKLQkgKiBSZWdpc3RlciBjbG9ja3NvdXJjZQotCSAqLwotCW9yaW9uX2Nsa3NyYy5tdWx0ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIG9yaW9uX2Nsa3NyYy5zaGlmdCk7Ci0KLQljbG9ja3NvdXJjZV9yZWdpc3Rlcigmb3Jpb25fY2xrc3JjKTsKLQotCS8qCi0JICogQ29ubmVjdCBhbmQgZW5hYmxlIHRpY2sgaGFuZGxlcgotCSAqLwotCXNldHVwX2lycShJUlFfT1JJT05fQlJJREdFLCAmb3Jpb25fdGltZXJfaXJxKTsKLQotCS8qCi0JICogUmVnaXN0ZXIgY2xvY2tldmVudAotCSAqLwotCW9yaW9uX2Nsa2V2dC5tdWx0ID0KLQkJZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCBvcmlvbl9jbGtldnQuc2hpZnQpOwotCW9yaW9uX2Nsa2V2dC5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZvcmlvbl9jbGtldnQpOwotCW9yaW9uX2Nsa2V2dC5taW5fZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZvcmlvbl9jbGtldnQpOwotCi0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZvcmlvbl9jbGtldnQpOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG9yaW9uX3RpbWVyID0gewotCS5pbml0ID0gb3Jpb25fdGltZXJfaW5pdCwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uL3RzMjA5LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uL3RzMjA5LXNldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNmRiY2QuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbi90czIwOS1zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ1ICswLDAgQEAKLS8qCi0gKiBRTkFQIFRTLTEwOS9UUy0yMDkgQm9hcmQgU2V0dXAKLSAqCi0gKiBNYWludGFpbmVyOiBCeXJvbiBCcmFkbGV5IDxieXJvbi5iYnJhZGxleUBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi0jZGVmaW5lIFFOQVBfVFMyMDlfTk9SX0JPT1RfQkFTRSAweGY0MDAwMDAwCi0jZGVmaW5lIFFOQVBfVFMyMDlfTk9SX0JPT1RfU0laRSBTWl84TQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogOE1pQiBOT1IgZmxhc2guIFRoZSBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBpcyBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCi0gKiAgICAgcGFydGl0aW9ucyBvbiB0aGUgZGV2aWNlIGJlY2F1c2Ugd2Ugd2FudCB0byBrZWVwIGNvbXBhdGFiaWxpdHkgd2l0aAotICogICAgIGV4aXN0aW5nIFFOQVAgZmlybXdhcmUuCi0gKgotICogTGF5b3V0IGFzIHVzZWQgYnkgUU5BUDoKLSAqICBbMl0gMHgwMDAwMDAwMC0weDAwMjAwMDAwIDogIktlcm5lbCIKLSAqICBbM10gMHgwMDIwMDAwMC0weDAwNjAwMDAwIDogIlJvb3RGUzEiCi0gKiAgWzRdIDB4MDA2MDAwMDAtMHgwMDcwMDAwMCA6ICJSb290RlMyIgotICogIFs2XSAweDAwNzAwMDAwLTB4MDA3NjAwMDAgOiAiTkFTIENvbmZpZyIgKHJlYWQtb25seSkKLSAqICBbNV0gMHgwMDc2MDAwMC0weDAwNzgwMDAwIDogIlUtQm9vdCBDb25maWciCi0gKiAgWzFdIDB4MDA3ODAwMDAtMHgwMDgwMDAwMCA6ICJVLUJvb3QiIChyZWFkLW9ubHkpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHFuYXBfdHMyMDlfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgICAgICAgPSAiVS1Cb290IiwKLQkJLnNpemUgICAgICAgPSAweDAwMDgwMDAwLAotCQkub2Zmc2V0ICAgICA9IDB4MDA3ODAwMDAsCi0JCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwKLQl9LCB7Ci0JCS5uYW1lICAgPSAiS2VybmVsIiwKLQkJLnNpemUgICA9IDB4MDAyMDAwMDAsCi0JCS5vZmZzZXQgPSAwLAotCX0sIHsKLQkJLm5hbWUgICA9ICJSb290RlMxIiwKLQkJLnNpemUgICA9IDB4MDA0MDAwMDAsCi0JCS5vZmZzZXQgPSAweDAwMjAwMDAwLAotCX0sIHsKLQkJLm5hbWUgICA9ICJSb290RlMyIiwKLQkJLnNpemUgICA9IDB4MDAxMDAwMDAsCi0JCS5vZmZzZXQgPSAweDAwNjAwMDAwLAotCX0sIHsKLQkJLm5hbWUgICA9ICJVLUJvb3QgQ29uZmlnIiwKLQkJLnNpemUgICA9IDB4MDAwMjAwMDAsCi0JCS5vZmZzZXQgPSAweDAwNzYwMDAwLAotCX0sIHsKLQkJLm5hbWUgICAgICAgPSAiTkFTIENvbmZpZyIsCi0JCS5zaXplICAgICAgID0gMHgwMDA2MDAwMCwKLQkJLm9mZnNldCAgICAgPSAweDAwNzAwMDAwLAotCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcW5hcF90czIwOV9ub3JfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGggICAgPSAxLAotCS5wYXJ0cyAgICA9IHFuYXBfdHMyMDlfcGFydGl0aW9ucywKLQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKHFuYXBfdHMyMDlfcGFydGl0aW9ucykKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcW5hcF90czIwOV9ub3JfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0ID0gUU5BUF9UUzIwOV9OT1JfQk9PVF9CQVNFLAotCS5lbmQgICA9IFFOQVBfVFMyMDlfTk9SX0JPT1RfQkFTRSArIFFOQVBfVFMyMDlfTk9SX0JPT1RfU0laRSAtIDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxbmFwX3RzMjA5X25vcl9mbGFzaCA9IHsKLQkubmFtZSAgICAgICAgICA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgICAgICAgICAgICA9IDAsCi0JLmRldiAgICAgICAgICAgPSB7IC5wbGF0Zm9ybV9kYXRhID0gJnFuYXBfdHMyMDlfbm9yX2ZsYXNoX2RhdGEsIH0sCi0JLnJlc291cmNlICAgICAgPSAmcW5hcF90czIwOV9ub3JfZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQQ0kKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFFOQVBfVFMyMDlfUENJX1NMT1QwX09GRlMJNwotI2RlZmluZSBRTkFQX1RTMjA5X1BDSV9TTE9UMF9JUlFfUElOCTYKLSNkZWZpbmUgUU5BUF9UUzIwOV9QQ0lfU0xPVDFfSVJRX1BJTgk3Ci0KLXZvaWQgX19pbml0IHFuYXBfdHMyMDlfcGNpX3ByZWluaXQodm9pZCkKLXsKLQlpbnQgcGluOwotCi0JLyoKLQkgKiBDb25maWd1cmUgUENJIEdQSU8gSVJRIHBpbnMKLQkgKi8KLQlwaW4gPSBRTkFQX1RTMjA5X1BDSV9TTE9UMF9JUlFfUElOOwotCWlmIChncGlvX3JlcXVlc3QocGluLCAiUENJIEludDEiKSA9PSAwKSB7Ci0JCWlmIChncGlvX2RpcmVjdGlvbl9pbnB1dChwaW4pID09IDApIHsKLQkJCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShwaW4pLCBJUlFUX0xPVyk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInFuYXBfdHMyMDlfcGNpX3ByZWluaXQgZmFpbGVkIHRvICIKLQkJCQkJInNldF9pcnFfdHlwZSBwaW4gJWRcbiIsIHBpbik7Ci0JCQlncGlvX2ZyZWUocGluKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicW5hcF90czIwOV9wY2lfcHJlaW5pdCBmYWlsZWQgdG8gZ3Bpb19yZXF1ZXN0ICIKLQkJCQkiJWRcbiIsIHBpbik7Ci0JfQotCi0JcGluID0gUU5BUF9UUzIwOV9QQ0lfU0xPVDFfSVJRX1BJTjsKLQlpZiAoZ3Bpb19yZXF1ZXN0KHBpbiwgIlBDSSBJbnQyIikgPT0gMCkgewotCQlpZiAoZ3Bpb19kaXJlY3Rpb25faW5wdXQocGluKSA9PSAwKSB7Ci0JCQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEocGluKSwgSVJRVF9MT1cpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJxbmFwX3RzMjA5X3BjaV9wcmVpbml0IGZhaWxlZCAiCi0JCQkJCSJ0byBzZXRfaXJxX3R5cGUgcGluICVkXG4iLCBwaW4pOwotCQkJZ3Bpb19mcmVlKHBpbik7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgInFuYXBfdHMyMDlfcGNpX3ByZWluaXQgZmFpbGVkIHRvIGdwaW9fcmVxdWVzdCAiCi0JCQkJIiVkXG4iLCBwaW4pOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgcW5hcF90czIwOV9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JLyoKLQkgKiBQQ0lFIElSUSBpcyBjb25uZWN0ZWQgaW50ZXJuYWxseSAobm90IEdQSU8pCi0JICovCi0JaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gb3Jpb25fcGNpZV9sb2NhbF9idXNfbnIoKSkKLQkJcmV0dXJuIElSUV9PUklPTl9QQ0lFMF9JTlQ7Ci0KLQkvKgotCSAqIFBDSSBJUlFzIGFyZSBjb25uZWN0ZWQgdmlhIEdQSU9zCi0JICovCi0Jc3dpdGNoIChzbG90IC0gUU5BUF9UUzIwOV9QQ0lfU0xPVDBfT0ZGUykgewotCWNhc2UgMDoKLQkJcmV0dXJuIGdwaW9fdG9faXJxKFFOQVBfVFMyMDlfUENJX1NMT1QwX0lSUV9QSU4pOwotCWNhc2UgMToKLQkJcmV0dXJuIGdwaW9fdG9faXJxKFFOQVBfVFMyMDlfUENJX1NMT1QxX0lSUV9QSU4pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtMTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfcGNpIHFuYXBfdHMyMDlfcGNpIF9faW5pdGRhdGEgPSB7Ci0JLm5yX2NvbnRyb2xsZXJzID0gMiwKLQkucHJlaW5pdCAgICAgICAgPSBxbmFwX3RzMjA5X3BjaV9wcmVpbml0LAotCS5zd2l6emxlICAgICAgICA9IHBjaV9zdGRfc3dpenpsZSwKLQkuc2V0dXAgICAgICAgICAgPSBvcmlvbl9wY2lfc3lzX3NldHVwLAotCS5zY2FuICAgICAgICAgICA9IG9yaW9uX3BjaV9zeXNfc2Nhbl9idXMsCi0JLm1hcF9pcnEgICAgICAgID0gcW5hcF90czIwOV9wY2lfbWFwX2lycSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHFuYXBfdHMyMDlfcGNpX2luaXQodm9pZCkKLXsKLQlpZiAobWFjaGluZV9pc190c194MDkoKSkKLQkJcGNpX2NvbW1vbl9pbml0KCZxbmFwX3RzMjA5X3BjaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKHFuYXBfdHMyMDlfcGNpX2luaXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEV0aGVybmV0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHFuYXBfdHMyMDlfZXRoX2RhdGEgPSB7Ci0JLnBoeV9hZGRyICAgICAgID0gOCwKLQkuZm9yY2VfcGh5X2FkZHIgPSAxLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSVEMgUzM1MzkwQSBvbiBJMkMgYnVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBxbmFwX3RzMjA5X2kyY19ydGMgPSB7Ci0gICAgICAgLmRyaXZlcl9uYW1lID0gInJ0Yy1zMzUzOTBhIiwKLSAgICAgICAuYWRkciAgICAgICAgPSAweDMwLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdQSU8gQXR0YWNoZWQgS2V5cwotICogICAgIFBvd2VyIGJ1dHRvbiBpcyBhdHRhY2hlZCB0byB0aGUgUElDIG1pY3JvY29udHJvbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgUU5BUF9UUzIwOV9HUElPX0tFWV9NRURJQQkxCi0jZGVmaW5lIFFOQVBfVFMyMDlfR1BJT19LRVlfUkVTRVQJMgotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcW5hcF90czIwOV9idXR0b25zW10gPSB7Ci0JewotCQkuY29kZQkJPSBLRVlfUkVTVEFSVCwKLQkJLmdwaW8JCT0gUU5BUF9UUzIwOV9HUElPX0tFWV9NRURJQSwKLQkJLmRlc2MJCT0gIlVTQiBDb3B5IEJ1dHRvbiIsCi0JCS5hY3RpdmVfbG93CT0gMSwKLQl9LAotCXsKLQkJLmNvZGUJCT0gS0VZX1BPV0VSLAotCQkuZ3BpbwkJPSBRTkFQX1RTMjA5X0dQSU9fS0VZX1JFU0VULAotCQkuZGVzYwkJPSAiUmVzZXQgQnV0dG9uIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcW5hcF90czIwOV9idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IHFuYXBfdHMyMDlfYnV0dG9ucywKLQkubmJ1dHRvbnMgICAgICAgPSBBUlJBWV9TSVpFKHFuYXBfdHMyMDlfYnV0dG9ucyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxbmFwX3RzMjA5X2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsgLnBsYXRmb3JtX2RhdGEgID0gJnFuYXBfdHMyMDlfYnV0dG9uX2RhdGEsIH0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNBVEEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgcW5hcF90czIwOV9zYXRhX2RhdGEgPSB7Ci0JLm5fcG9ydHMgICAgICAgID0gMiwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gKiBHZW5lcmFsIFNldHVwCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnFuYXBfdHMyMDlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnFuYXBfdHMyMDlfbm9yX2ZsYXNoLAotCSZxbmFwX3RzMjA5X2J1dHRvbl9kZXZpY2UsCi19OwotCi0vKgotICogUU5BUCBUUy1bMTJdMDkgc3BlY2lmaWMgcG93ZXIgb2ZmIG1ldGhvZCB2aWEgVUFSVDEtYXR0YWNoZWQgUElDCi0gKi8KLQotI2RlZmluZSBVQVJUMV9SRUcoeCkgIChVQVJUMV9WSVJUX0JBU0UgKyAoKFVBUlRfIyN4KSA8PCAyKSkKLQotc3RhdGljIHZvaWQgcW5hcF90czIwOV9wb3dlcl9vZmYodm9pZCkKLXsKLQkvKiAxOTIwMCBiYXVkIGRpdmlzb3IgKi8KLQljb25zdCB1bnNpZ25lZCBkaXZpc29yID0gKChPUklPTl9UQ0xLICsgKDggKiAxOTIwMCkpIC8gKDE2ICogMTkyMDApKTsKLQotCXByX2luZm8oIiVzOiB0cmlnZ2VyaW5nIHBvd2VyLW9mZi4uLlxuIiwgX19mdW5jX18pOwotCi0JLyogaGlqYWNrIHVhcnQxIGFuZCByZXNldCBpbnRvIHNhbmUgc3RhdGUgKDE5MjAwLDhuMSkgKi8KLQlvcmlvbl93cml0ZShVQVJUMV9SRUcoTENSKSwgMHg4Myk7Ci0Jb3Jpb25fd3JpdGUoVUFSVDFfUkVHKERMTCksIGRpdmlzb3IgJiAweGZmKTsKLQlvcmlvbl93cml0ZShVQVJUMV9SRUcoRExNKSwgKGRpdmlzb3IgPj4gOCkgJiAweGZmKTsKLQlvcmlvbl93cml0ZShVQVJUMV9SRUcoTENSKSwgMHgwMyk7Ci0Jb3Jpb25fd3JpdGUoVUFSVDFfUkVHKElFUiksIDB4MDApOwotCW9yaW9uX3dyaXRlKFVBUlQxX1JFRyhGQ1IpLCAweDAwKTsKLQlvcmlvbl93cml0ZShVQVJUMV9SRUcoTUNSKSwgMHgwMCk7Ci0KLQkvKiBzZW5kIHRoZSBwb3dlci1vZmYgY29tbWFuZCAnQScgdG8gUElDICovCi0Jb3Jpb25fd3JpdGUoVUFSVDFfUkVHKFRYKSwgJ0EnKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHFuYXBfdHMyMDlfaW5pdCh2b2lkKQotewotCS8qCi0JICogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KLQkgKi8KLQlvcmlvbl9pbml0KCk7Ci0KLQkvKgotCSAqIFNldHVwIGZsYXNoIG1hcHBpbmcKLQkgKi8KLQlvcmlvbl9zZXR1cF9jcHVfd2luKE9SSU9OX0RFVl9CT09ULCBRTkFQX1RTMjA5X05PUl9CT09UX0JBU0UsCi0JCQkgICAgUU5BUF9UUzIwOV9OT1JfQk9PVF9TSVpFLCAtMSk7Ci0KLQkvKgotCSAqIE9wZW4gYSBzcGVjaWFsIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgZm9yIHRoZSBQQ0lFIFdBLgotCSAqLwotCW9yaW9uX3dyaXRlKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHgyMDA3NCwgT1JJT05fUENJRV9XQV9QSFlTX0JBU0UpOwotCW9yaW9uX3dyaXRlKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHgyMDA3MCwgKDB4Nzk0MSB8Ci0JCSgoKE9SSU9OX1BDSUVfV0FfU0laRSA+PiAxNikgLSAxKSkgPDwgMTYpKTsKLQotCS8qCi0JICogU2V0dXAgTXVsdGlwbGV4aW5nIFBpbnMgLS0KLQkgKiBNUFBbMF0gUmVzZXJ2ZWQKLQkgKiBNUFBbMV0gVVNCIGNvcHkgYnV0dG9uICgwIGFjdGl2ZSkKLQkgKiBNUFBbMl0gTG9hZCBkZWZhdWx0cyBidXR0b24gKDAgYWN0aXZlKQotCSAqIE1QUFszXSBHUElPIFJUQwotCSAqIE1QUFs0LTVdIFJlc2VydmVkCi0JICogTVBQWzZdIFBDSSBJbnQgQQotCSAqIE1QUFs3XSBQQ0kgSW50IEIKLQkgKiBNUFBbOC0xMV0gUmVzZXJ2ZWQKLQkgKiBNUFBbMTJdIFNBVEEgMCBwcmVzZW5jZQotCSAqIE1QUFsxM10gU0FUQSAxIHByZXNlbmNlCi0JICogTVBQWzE0XSBTQVRBIDAgYWN0aXZlCi0JICogTVBQWzE1XSBTQVRBIDEgYWN0aXZlCi0JICogTVBQWzE2XSBVQVJUMSBSWEQKLQkgKiBNUFBbMTddIFVBUlQxIFRYRAotCSAqIE1QUFsxOF0gU1dfUlNUICgwIGFjdGl2ZSkKLQkgKiBNUFBbMTldIFJlc2VydmVkCi0JICogTVBQWzIwXSBQQ0kgY2xvY2sgMAotCSAqIE1QUFsyMV0gUENJIGNsb2NrIDEKLQkgKiBNUFBbMjJdIFVTQiAwIG92ZXIgY3VycmVudAotCSAqIE1QUFsyMy0yNV0gUmVzZXJ2ZWQKLQkgKi8KLQlvcmlvbl93cml0ZShNUFBfMF83X0NUUkwsIDB4Myk7Ci0Jb3Jpb25fd3JpdGUoTVBQXzhfMTVfQ1RSTCwgMHg1NTU1MDAwMCk7Ci0Jb3Jpb25fd3JpdGUoTVBQXzE2XzE5X0NUUkwsIDB4NTUwMCk7Ci0Jb3Jpb25fZ3Bpb19zZXRfdmFsaWRfcGlucygweDNjYzBmZmYpOwotCi0JLyogcmVnaXN0ZXIgdHMyMDkgc3BlY2lmaWMgcG93ZXItb2ZmIG1ldGhvZCAqLwotCXBtX3Bvd2VyX29mZiA9IHFuYXBfdHMyMDlfcG93ZXJfb2ZmOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMocW5hcF90czIwOV9kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUocW5hcF90czIwOV9kZXZpY2VzKSk7Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJnFuYXBfdHMyMDlfaTJjX3J0YywgMSk7Ci0Jb3Jpb25fZXRoX2luaXQoJnFuYXBfdHMyMDlfZXRoX2RhdGEpOwotCW9yaW9uX3NhdGFfaW5pdCgmcW5hcF90czIwOV9zYXRhX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKFRTMjA5LCAiUU5BUCBUUy0xMDkvVFMtMjA5IikKLQkvKiBNYWludGFpbmVyOiAgQnlyb24gQnJhZGxleSA8Ynlyb24uYmJyYWRsZXlAZ21haWwuY29tPiAqLwotCS5waHlzX2lvCT0gT1JJT05fUkVHU19QSFlTX0JBU0UsCi0JLmlvX3BnX29mZnN0CT0gKChPUklPTl9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhGRkZDLAotCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCi0JLmluaXRfbWFjaGluZQk9IHFuYXBfdHMyMDlfaW5pdCwKLQkubWFwX2lvCQk9IG9yaW9uX21hcF9pbywKLQkuaW5pdF9pcnEJPSBvcmlvbl9pbml0X2lycSwKLQkudGltZXIJCT0gJm9yaW9uX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkZWJmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCkBAIC0wLDAgKzEsNDkgQEAKK2lmIEFSQ0hfT1JJT041WAorCittZW51ICJPcmlvbiBJbXBsZW1lbnRhdGlvbnMiCisKK2NvbmZpZyBNQUNIX0RCODhGNTI4MQorCWJvb2wgIk1hcnZlbGwgT3Jpb24tMiBEZXZlbG9wbWVudCBCb2FyZCIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgTWFydmVsbCBPcmlvbi0yICg4OEY1MjgxKSBEZXZlbG9wbWVudCBCb2FyZAorCitjb25maWcgTUFDSF9SRDg4RjUxODIKKwlib29sICJNYXJ2ZWxsIE9yaW9uLU5BUyBSZWZlcmVuY2UgRGVzaWduIgorCXNlbGVjdCBJMkNfQk9BUkRJTkZPCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBNYXJ2ZWxsIE9yaW9uLU5BUyAoODhGNTE4MikgUkQyCisKK2NvbmZpZyBNQUNIX0tVUk9CT1hfUFJPCisJYm9vbCAiS3Vyb0JveCBQcm8iCisJc2VsZWN0IEkyQ19CT0FSRElORk8KKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIEt1cm9Cb3ggUHJvIHBsYXRmb3JtLgorCitjb25maWcgTUFDSF9ETlMzMjMKKwlib29sICJELUxpbmsgRE5TLTMyMyIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgRC1MaW5rIEROUy0zMjMgcGxhdGZvcm0uCisKK2NvbmZpZyBNQUNIX1RTMjA5CisJYm9vbCAiUU5BUCBUUy0xMDkvVFMtMjA5IgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgUU5BUCBUUy0xMDkvVFMtMjA5IHBsYXRmb3JtLgorCitjb25maWcgTUFDSF9MSU5LU1RBVElPTl9QUk8KKwlib29sICJCdWZmYWxvIExpbmtzdGF0aW9uIFByby9MaXZlIgorCXNlbGVjdCBJMkNfQk9BUkRJTkZPCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBCdWZmYWxvIExpbmtzdGF0aW9uIFByby9MaXZlIHBsYXRmb3JtLiBCb3RoIHYxIGFuZAorCSAgdjIgZGV2aWNlcyBhcmUgc3VwcG9ydGVkLgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwMWJmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK29iai15CQkJCSs9IGNvbW1vbi5vIGFkZHItbWFwLm8gcGNpLm8gZ3Bpby5vIGlycS5vCitvYmotJChDT05GSUdfTUFDSF9EQjg4RjUyODEpCSs9IGRiODhmNTI4MS1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9SRDg4RjUxODIpCSs9IHJkODhmNTE4Mi1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9LVVJPQk9YX1BSTykJKz0ga3Vyb2JveF9wcm8tc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfTElOS1NUQVRJT05fUFJPKSArPSBrdXJvYm94X3Byby1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9ETlMzMjMpCSs9IGRuczMyMy1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9UUzIwOSkJKz0gdHMyMDktc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbi9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlLmJvb3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtb3Jpb24vTWFrZWZpbGUuYm9vdApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlLmJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxNzkzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKKyAqCisgKiBBZGRyZXNzIG1hcCBmdW5jdGlvbnMgZm9yIE1hcnZlbGwgT3Jpb24gNXggU29DcworICoKKyAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qCisgKiBUaGUgT3Jpb24gaGFzIGZ1bGx5IHByb2dyYW1hYmxlIGFkZHJlc3MgbWFwLiBUaGVyZSdzIGEgc2VwYXJhdGUgYWRkcmVzcworICogbWFwIGZvciBlYWNoIG9mIHRoZSBkZXZpY2UgX21hc3Rlcl8gaW50ZXJmYWNlcywgZS5nLiBDUFUsIFBDSSwgUENJRSwgVVNCLAorICogR2lnYWJpdCBFdGhlcm5ldCwgRE1BL1hPUiBlbmdpbmVzLCBldGMuIEVhY2ggaW50ZXJmYWNlIGhhcyBpdHMgb3duCisgKiBhZGRyZXNzIGRlY29kZSB3aW5kb3dzIHRoYXQgYWxsb3cgaXQgdG8gYWNjZXNzIGFueSBvZiB0aGUgT3Jpb24gcmVzb3VyY2VzLgorICoKKyAqIENQVSBhZGRyZXNzIGRlY29kaW5nIC0tCisgKiBMaW51eCBhc3N1bWVzIHRoYXQgaXQgaXMgdGhlIGJvb3QgbG9hZGVyIHRoYXQgYWxyZWFkeSBzZXR1cCB0aGUgYWNjZXNzIHRvCisgKiBERFIgYW5kIGludGVybmFsIHJlZ2lzdGVycy4KKyAqIFNldHVwIGFjY2VzcyB0byBQQ0kgYW5kIFBDSS1FIElPL01FTSBzcGFjZSBpcyBpc3N1ZWQgYnkgdGhpcyBmaWxlLgorICogU2V0dXAgYWNjZXNzIHRvIHZhcmlvdXMgZGV2aWNlcyBsb2NhdGVkIG9uIHRoZSBkZXZpY2UgYnVzIGludGVyZmFjZSAoZS5nLgorICogZmxhc2hlcywgUlRDLCBldGMpIHNob3VsZCBiZSBpc3N1ZWQgYnkgbWFjaGluZS1zZXR1cC5jIGFjY29yZGluZyB0bworICogc3BlY2lmaWMgYm9hcmQgcG9wdWxhdGlvbiAoYnkgdXNpbmcgb3Jpb241eF9zZXR1cF8qX3dpbigpKS4KKyAqCisgKiBOb24tQ1BVIE1hc3RlcnMgYWRkcmVzcyBkZWNvZGluZyAtLQorICogVW5saWtlIHRoZSBDUFUsIHdlIHNldHVwIHRoZSBhY2Nlc3MgZnJvbSBPcmlvbidzIG1hc3RlciBpbnRlcmZhY2VzIHRvIEREUgorICogYmFua3Mgb25seSAodGhlIHR5cGljYWwgdXNlIGNhc2UpLgorICogU2V0dXAgYWNjZXNzIGZvciBlYWNoIG1hc3RlciB0byBERFIgaXMgaXNzdWVkIGJ5IGNvbW1vbi5jLgorICoKKyAqIE5vdGU6IGFsdGhvdWdoIG9yaW9uX3NldGJpdHMoKSBhbmQgb3Jpb25fY2xyYml0cygpIGFyZSBub3QgYXRvbWljCisgKiBubyBsb2NraW5nIGlzIG5lY2Vzc2FyeSBoZXJlIHNpbmNlIGNvZGUgaW4gdGhpcyBmaWxlIGlzIG9ubHkgY2FsbGVkCisgKiBhdCBib290IHRpbWUgd2hlbiB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSBpc3N1ZXMuCisgKi8KKworLyoKKyAqIEdlbmVyaWMgQWRkcmVzcyBEZWNvZGUgV2luZG93cyBiaXQgc2V0dGluZ3MKKyAqLworI2RlZmluZSBUQVJHRVRfRERSCQkwCisjZGVmaW5lIFRBUkdFVF9ERVZfQlVTCQkxCisjZGVmaW5lIFRBUkdFVF9QQ0kJCTMKKyNkZWZpbmUgVEFSR0VUX1BDSUUJCTQKKyNkZWZpbmUgQVRUUl9ERFJfQ1MobikJCSgoKG4pID09MCkgPyAweGUgOglcCisJCQkJKChuKSA9PSAxKSA/IDB4ZCA6CVwKKwkJCQkoKG4pID09IDIpID8gMHhiIDoJXAorCQkJCSgobikgPT0gMykgPyAweDcgOiAweGYpCisjZGVmaW5lIEFUVFJfUENJRV9NRU0JCTB4NTkKKyNkZWZpbmUgQVRUUl9QQ0lFX0lPCQkweDUxCisjZGVmaW5lIEFUVFJfUENJRV9XQQkJMHg3OQorI2RlZmluZSBBVFRSX1BDSV9NRU0JCTB4NTkKKyNkZWZpbmUgQVRUUl9QQ0lfSU8JCTB4NTEKKyNkZWZpbmUgQVRUUl9ERVZfQ1MwCQkweDFlCisjZGVmaW5lIEFUVFJfREVWX0NTMQkJMHgxZAorI2RlZmluZSBBVFRSX0RFVl9DUzIJCTB4MWIKKyNkZWZpbmUgQVRUUl9ERVZfQk9PVAkJMHhmCisjZGVmaW5lIFdJTl9FTgkJCTEKKworLyoKKyAqIEhlbHBlcnMgdG8gZ2V0IEREUiBiYW5rIGluZm8KKyAqLworI2RlZmluZSBERFJfQkFTRV9DUyhuKQkJT1JJT041WF9ERFJfUkVHKDB4MTUwMCArICgobikgKiA4KSkKKyNkZWZpbmUgRERSX1NJWkVfQ1MobikJCU9SSU9ONVhfRERSX1JFRygweDE1MDQgKyAoKG4pICogOCkpCisjZGVmaW5lIEREUl9NQVhfQ1MJCTQKKyNkZWZpbmUgRERSX1JFR19UT19TSVpFKHJlZykJKCgocmVnKSB8IDB4ZmZmZmZmKSArIDEpCisjZGVmaW5lIEREUl9SRUdfVE9fQkFTRShyZWcpCSgocmVnKSAmIDB4ZmYwMDAwMDApCisjZGVmaW5lIEREUl9CQU5LX0VOCQkxCisKKy8qCisgKiBDUFUgQWRkcmVzcyBEZWNvZGUgV2luZG93cyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBDUFVfV0lOX0NUUkwobikJCU9SSU9ONVhfQlJJREdFX1JFRygweDAwMCB8ICgobikgPDwgNCkpCisjZGVmaW5lIENQVV9XSU5fQkFTRShuKQkJT1JJT041WF9CUklER0VfUkVHKDB4MDA0IHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgQ1BVX1dJTl9SRU1BUF9MTyhuKQlPUklPTjVYX0JSSURHRV9SRUcoMHgwMDggfCAoKG4pIDw8IDQpKQorI2RlZmluZSBDUFVfV0lOX1JFTUFQX0hJKG4pCU9SSU9ONVhfQlJJREdFX1JFRygweDAwYyB8ICgobikgPDwgNCkpCisKKy8qCisgKiBHaWdhYml0IEV0aGVybmV0IEFkZHJlc3MgRGVjb2RlIFdpbmRvd3MgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgRVRIX1dJTl9CQVNFKHdpbikJT1JJT041WF9FVEhfUkVHKDB4MjAwICsgKCh3aW4pICogOCkpCisjZGVmaW5lIEVUSF9XSU5fU0laRSh3aW4pCU9SSU9ONVhfRVRIX1JFRygweDIwNCArICgod2luKSAqIDgpKQorI2RlZmluZSBFVEhfV0lOX1JFTUFQKHdpbikJT1JJT041WF9FVEhfUkVHKDB4MjgwICsgKCh3aW4pICogNCkpCisjZGVmaW5lIEVUSF9XSU5fRU4JCU9SSU9ONVhfRVRIX1JFRygweDI5MCkKKyNkZWZpbmUgRVRIX1dJTl9QUk9UCQlPUklPTjVYX0VUSF9SRUcoMHgyOTQpCisjZGVmaW5lIEVUSF9NQVhfV0lOCQk2CisjZGVmaW5lIEVUSF9NQVhfUkVNQVBfV0lOCTQKKworCitzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvIG9yaW9uNXhfbWJ1c19kcmFtX2luZm87CisKK3N0YXRpYyBpbnQgX19pbml0IG9yaW9uNXhfY3B1X3dpbl9jYW5fcmVtYXAoaW50IHdpbikKK3sKKwl1MzIgZGV2LCByZXY7CisKKwlvcmlvbjV4X3BjaWVfaWQoJmRldiwgJnJldik7CisJaWYgKChkZXYgPT0gTVY4OEY1MjgxX0RFVl9JRCAmJiB3aW4gPCA0KQorCSAgICB8fCAoZGV2ID09IE1WODhGNTE4Ml9ERVZfSUQgJiYgd2luIDwgMikKKwkgICAgfHwgKGRldiA9PSBNVjg4RjUxODFfREVWX0lEICYmIHdpbiA8IDIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfY3B1X3dpbihpbnQgd2luLCB1MzIgYmFzZSwgdTMyIHNpemUsCisJCQkJIHU4IHRhcmdldCwgdTggYXR0ciwgaW50IHJlbWFwKQoreworCW9yaW9uNXhfd3JpdGUoQ1BVX1dJTl9CQVNFKHdpbiksIGJhc2UgJiAweGZmZmYwMDAwKTsKKwlvcmlvbjV4X3dyaXRlKENQVV9XSU5fQ1RSTCh3aW4pLAorCQkoKHNpemUgLSAxKSAmIDB4ZmZmZjAwMDApIHwgKGF0dHIgPDwgOCkgfCAodGFyZ2V0IDw8IDQpIHwgMSk7CisKKwlpZiAob3Jpb241eF9jcHVfd2luX2Nhbl9yZW1hcCh3aW4pKSB7CisJCWlmIChyZW1hcCA8IDApCisJCQlyZW1hcCA9IGJhc2U7CisKKwkJb3Jpb241eF93cml0ZShDUFVfV0lOX1JFTUFQX0xPKHdpbiksIHJlbWFwICYgMHhmZmZmMDAwMCk7CisJCW9yaW9uNXhfd3JpdGUoQ1BVX1dJTl9SRU1BUF9ISSh3aW4pLCAwKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfc2V0dXBfY3B1X21idXNfYnJpZGdlKHZvaWQpCit7CisJaW50IGk7CisJaW50IGNzOworCisJLyoKKwkgKiBGaXJzdCwgZGlzYWJsZSBhbmQgY2xlYXIgd2luZG93cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCW9yaW9uNXhfd3JpdGUoQ1BVX1dJTl9CQVNFKGkpLCAwKTsKKwkJb3Jpb241eF93cml0ZShDUFVfV0lOX0NUUkwoaSksIDApOworCQlpZiAob3Jpb241eF9jcHVfd2luX2Nhbl9yZW1hcChpKSkgeworCQkJb3Jpb241eF93cml0ZShDUFVfV0lOX1JFTUFQX0xPKGkpLCAwKTsKKwkJCW9yaW9uNXhfd3JpdGUoQ1BVX1dJTl9SRU1BUF9ISShpKSwgMCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNldHVwIHdpbmRvd3MgZm9yIFBDSStQQ0llIElPK01FTSBzcGFjZS4KKwkgKi8KKwlzZXR1cF9jcHVfd2luKDAsIE9SSU9ONVhfUENJRV9JT19QSFlTX0JBU0UsIE9SSU9ONVhfUENJRV9JT19TSVpFLAorCQlUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX0lPLCBPUklPTjVYX1BDSUVfSU9fQlVTX0JBU0UpOworCXNldHVwX2NwdV93aW4oMSwgT1JJT041WF9QQ0lfSU9fUEhZU19CQVNFLCBPUklPTjVYX1BDSV9JT19TSVpFLAorCQlUQVJHRVRfUENJLCBBVFRSX1BDSV9JTywgT1JJT041WF9QQ0lfSU9fQlVTX0JBU0UpOworCXNldHVwX2NwdV93aW4oMiwgT1JJT041WF9QQ0lFX01FTV9QSFlTX0JBU0UsIE9SSU9ONVhfUENJRV9NRU1fU0laRSwKKwkJVEFSR0VUX1BDSUUsIEFUVFJfUENJRV9NRU0sIC0xKTsKKwlzZXR1cF9jcHVfd2luKDMsIE9SSU9ONVhfUENJX01FTV9QSFlTX0JBU0UsIE9SSU9ONVhfUENJX01FTV9TSVpFLAorCQlUQVJHRVRfUENJLCBBVFRSX1BDSV9NRU0sIC0xKTsKKworCS8qCisJICogU2V0dXAgTUJVUyBkcmFtIHRhcmdldCBpbmZvLgorCSAqLworCW9yaW9uNXhfbWJ1c19kcmFtX2luZm8ubWJ1c19kcmFtX3RhcmdldF9pZCA9IFRBUkdFVF9ERFI7CisKKwlmb3IgKGkgPSAwLCBjcyA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdTMyIGJhc2UgPSByZWFkbChERFJfQkFTRV9DUyhpKSk7CisJCXUzMiBzaXplID0gcmVhZGwoRERSX1NJWkVfQ1MoaSkpOworCisJCS8qCisJCSAqIENoaXAgc2VsZWN0IGVuYWJsZWQ/CisJCSAqLworCQlpZiAoc2l6ZSAmIDEpIHsKKwkJCXN0cnVjdCBtYnVzX2RyYW1fd2luZG93ICp3OworCisJCQl3ID0gJm9yaW9uNXhfbWJ1c19kcmFtX2luZm8uY3NbY3MrK107CisJCQl3LT5jc19pbmRleCA9IGk7CisJCQl3LT5tYnVzX2F0dHIgPSAweGYgJiB+KDEgPDwgaSk7CisJCQl3LT5iYXNlID0gYmFzZSAmIDB4ZmYwMDAwMDA7CisJCQl3LT5zaXplID0gKHNpemUgfCAweDAwZmZmZmZmKSArIDE7CisJCX0KKwl9CisJb3Jpb241eF9tYnVzX2RyYW1faW5mby5udW1fY3MgPSBjczsKK30KKwordm9pZCBfX2luaXQgb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4odTMyIGJhc2UsIHUzMiBzaXplKQoreworCXNldHVwX2NwdV93aW4oNCwgYmFzZSwgc2l6ZSwgVEFSR0VUX0RFVl9CVVMsIEFUVFJfREVWX0JPT1QsIC0xKTsKK30KKwordm9pZCBfX2luaXQgb3Jpb241eF9zZXR1cF9kZXYwX3dpbih1MzIgYmFzZSwgdTMyIHNpemUpCit7CisJc2V0dXBfY3B1X3dpbig1LCBiYXNlLCBzaXplLCBUQVJHRVRfREVWX0JVUywgQVRUUl9ERVZfQ1MwLCAtMSk7Cit9CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfc2V0dXBfZGV2MV93aW4odTMyIGJhc2UsIHUzMiBzaXplKQoreworCXNldHVwX2NwdV93aW4oNiwgYmFzZSwgc2l6ZSwgVEFSR0VUX0RFVl9CVVMsIEFUVFJfREVWX0NTMSwgLTEpOworfQorCit2b2lkIF9faW5pdCBvcmlvbjV4X3NldHVwX2RldjJfd2luKHUzMiBiYXNlLCB1MzIgc2l6ZSkKK3sKKwlzZXR1cF9jcHVfd2luKDcsIGJhc2UsIHNpemUsIFRBUkdFVF9ERVZfQlVTLCBBVFRSX0RFVl9DUzIsIC0xKTsKK30KKwordm9pZCBfX2luaXQgb3Jpb241eF9zZXR1cF9wY2llX3dhX3dpbih1MzIgYmFzZSwgdTMyIHNpemUpCit7CisJc2V0dXBfY3B1X3dpbig3LCBiYXNlLCBzaXplLCBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX1dBLCAtMSk7Cit9CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfc2V0dXBfZXRoX3dpbnModm9pZCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogRmlyc3QsIGRpc2FibGUgYW5kIGNsZWFyIHdpbmRvd3MKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRVRIX01BWF9XSU47IGkrKykgeworCQlvcmlvbjV4X3dyaXRlKEVUSF9XSU5fQkFTRShpKSwgMCk7CisJCW9yaW9uNXhfd3JpdGUoRVRIX1dJTl9TSVpFKGkpLCAwKTsKKwkJb3Jpb241eF9zZXRiaXRzKEVUSF9XSU5fRU4sIDEgPDwgaSk7CisJCW9yaW9uNXhfY2xyYml0cyhFVEhfV0lOX1BST1QsIDB4MyA8PCAoaSAqIDIpKTsKKwkJaWYgKGkgPCBFVEhfTUFYX1JFTUFQX1dJTikKKwkJCW9yaW9uNXhfd3JpdGUoRVRIX1dJTl9SRU1BUChpKSwgMCk7CisJfQorCisJLyoKKwkgKiBTZXR1cCB3aW5kb3dzIGZvciBERFIgYmFua3MuCisJICovCisJZm9yIChpID0gMDsgaSA8IEREUl9NQVhfQ1M7IGkrKykgeworCQl1MzIgYmFzZSwgc2l6ZTsKKwkJc2l6ZSA9IG9yaW9uNXhfcmVhZChERFJfU0laRV9DUyhpKSk7CisJCWJhc2UgPSBvcmlvbjV4X3JlYWQoRERSX0JBU0VfQ1MoaSkpOworCQlpZiAoc2l6ZSAmIEREUl9CQU5LX0VOKSB7CisJCQliYXNlID0gRERSX1JFR19UT19CQVNFKGJhc2UpOworCQkJc2l6ZSA9IEREUl9SRUdfVE9fU0laRShzaXplKTsKKwkJCW9yaW9uNXhfd3JpdGUoRVRIX1dJTl9TSVpFKGkpLCAoc2l6ZS0xKSAmIDB4ZmZmZjAwMDApOworCQkJb3Jpb241eF93cml0ZShFVEhfV0lOX0JBU0UoaSksIChiYXNlICYgMHhmZmZmMDAwMCkgfAorCQkJCQkoQVRUUl9ERFJfQ1MoaSkgPDwgOCkgfAorCQkJCQlUQVJHRVRfRERSKTsKKwkJCW9yaW9uNXhfY2xyYml0cyhFVEhfV0lOX0VOLCAxIDw8IGkpOworCQkJb3Jpb241eF9zZXRiaXRzKEVUSF9XSU5fUFJPVCwgMHgzIDw8IChpICogMikpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOWM3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKKyAqCisgKiBDb3JlIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBPcmlvbiA1eCBTb0NzCisgKgorICogTWFpbnRhaW5lcjogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbjV4Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtb3Jpb24vZWhjaS1vcmlvbi5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LW9yaW9uL29yaW9uX25hbmQuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1vcmlvbi90aW1lLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSS9PIEFkZHJlc3MgTWFwcGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9yaW9uNXhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IE9SSU9ONVhfUkVHU19WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPUklPTjVYX1JFR1NfUEhZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBPUklPTjVYX1JFR1NfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gT1JJT041WF9QQ0lFX0lPX1ZJUlRfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9SSU9ONVhfUENJRV9JT19QSFlTX0JBU0UpLAorCQkubGVuZ3RoCQk9IE9SSU9ONVhfUENJRV9JT19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBPUklPTjVYX1BDSV9JT19WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPUklPTjVYX1BDSV9JT19QSFlTX0JBU0UpLAorCQkubGVuZ3RoCQk9IE9SSU9ONVhfUENJX0lPX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IE9SSU9ONVhfUENJRV9XQV9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPUklPTjVYX1BDSUVfV0FfUEhZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBPUklPTjVYX1BDSUVfV0FfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KG9yaW9uNXhfaW9fZGVzYywgQVJSQVlfU0laRShvcmlvbjV4X2lvX2Rlc2MpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVQVJUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvcmlvbjV4X3VhcnRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gVUFSVDBfUEhZU19CQVNFLAorCQkuZW5kCQk9IFVBUlQwX1BIWVNfQkFTRSArIDB4ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElSUV9PUklPTjVYX1VBUlQwLAorCQkuZW5kCQk9IElSUV9PUklPTjVYX1VBUlQwLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSBVQVJUMV9QSFlTX0JBU0UsCisJCS5lbmQJCT0gVUFSVDFfUEhZU19CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gSVJRX09SSU9ONVhfVUFSVDEsCisJCS5lbmQJCT0gSVJRX09SSU9ONVhfVUFSVDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBvcmlvbjV4X3VhcnRfZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSBVQVJUMF9QSFlTX0JBU0UsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilVQVJUMF9WSVJUX0JBU0UsCisJCS5pcnEJCT0gSVJRX09SSU9ONVhfVUFSVDAsCisJCS5mbGFncwkJPSBVUEZfU0tJUF9URVNUIHwgVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT1JJT041WF9UQ0xLLAorCX0sCisJeworCQkubWFwYmFzZQk9IFVBUlQxX1BIWVNfQkFTRSwKKwkJLm1lbWJhc2UJPSAoY2hhciAqKVVBUlQxX1ZJUlRfQkFTRSwKKwkJLmlycQkJPSBJUlFfT1JJT041WF9VQVJUMSwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QgfCBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBPUklPTjVYX1RDTEssCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbjV4X3VhcnQgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gb3Jpb241eF91YXJ0X2RhdGEsCisJfSwKKwkucmVzb3VyY2UJCT0gb3Jpb241eF91YXJ0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG9yaW9uNXhfdWFydF9yZXNvdXJjZXMpLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQiBDb250cm9sbGVyIC0gMiBpbnRlcmZhY2VzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9yaW9uNXhfZWhjaTBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPUklPTjVYX1VTQjBfUEhZU19CQVNFLAorCQkuZW5kCT0gT1JJT041WF9VU0IwX1BIWVNfQkFTRSArIFNaXzRLLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX09SSU9ONVhfVVNCMF9DVFJMLAorCQkuZW5kCT0gSVJRX09SSU9ONVhfVVNCMF9DVFJMLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvcmlvbjV4X2VoY2kxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT1JJT041WF9VU0IxX1BIWVNfQkFTRSwKKwkJLmVuZAk9IE9SSU9ONVhfVVNCMV9QSFlTX0JBU0UgKyBTWl80SywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9PUklPTjVYX1VTQjFfQ1RSTCwKKwkJLmVuZAk9IElSUV9PUklPTjVYX1VTQjFfQ1RSTCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3Jpb25fZWhjaV9kYXRhIG9yaW9uNXhfZWhjaV9kYXRhID0geworCS5kcmFtCQk9ICZvcmlvbjV4X21idXNfZHJhbV9pbmZvLAorfTsKKworc3RhdGljIHU2NCBlaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfZWhjaTAgPSB7CisJLm5hbWUJCT0gIm9yaW9uLWVoY2kiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sJCT0gJmVoY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJm9yaW9uNXhfZWhjaV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gb3Jpb241eF9laGNpMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9yaW9uNXhfZWhjaTBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfZWhjaTEgPSB7CisJLm5hbWUJCT0gIm9yaW9uLWVoY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sJCT0gJmVoY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJm9yaW9uNXhfZWhjaV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gb3Jpb241eF9laGNpMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9yaW9uNXhfZWhjaTFfcmVzb3VyY2VzKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2lnYWJpdCBFdGhlcm5ldCBwb3J0CisgKiAoVGhlIE9yaW9uIGFuZCBEaXNjb3ZlcnkgKE1WNjQzeHgpIGZhbWlsaWVzIHVzZSB0aGUgc2FtZSBFdGhlcm5ldCBkcml2ZXIpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvcmlvbjV4X2V0aF9zaGFyZWRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPUklPTjVYX0VUSF9QSFlTX0JBU0UgKyAweDIwMDAsCisJCS5lbmQJPSBPUklPTjVYX0VUSF9QSFlTX0JBU0UgKyAweDNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbjV4X2V0aF9zaGFyZWQgPSB7CisJLm5hbWUJCT0gTVY2NDNYWF9FVEhfU0hBUkVEX05BTUUsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9IG9yaW9uNXhfZXRoX3NoYXJlZF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9yaW9uNXhfZXRoX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiZXRoIGlycSIsCisJCS5zdGFydAk9IElSUV9PUklPTjVYX0VUSF9TVU0sCisJCS5lbmQJPSBJUlFfT1JJT041WF9FVEhfU1VNLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbjV4X2V0aCA9IHsKKwkubmFtZQkJPSBNVjY0M1hYX0VUSF9OQU1FLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSBvcmlvbjV4X2V0aF9yZXNvdXJjZXMsCit9OworCit2b2lkIF9faW5pdCBvcmlvbjV4X2V0aF9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKK3sKKwlvcmlvbjV4X2V0aC5kZXYucGxhdGZvcm1fZGF0YSA9IGV0aF9kYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb241eF9ldGhfc2hhcmVkKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfZXRoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJMkMgY29udHJvbGxlcgorICogKFRoZSBPcmlvbiBhbmQgRGlzY292ZXJ5IChNVjY0M3h4KSBmYW1pbGllcyBzaGFyZSB0aGUgc2FtZSBJMkMgY29udHJvbGxlcikKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhIG9yaW9uNXhfaTJjX3BkYXRhID0geworCS5mcmVxX20JCT0gOCwgLyogYXNzdW1lcyAxNjYgTUh6IFRDTEsgKi8KKwkuZnJlcV9uCQk9IDMsCisJLnRpbWVvdXQJPSAxMDAwLCAvKiBEZWZhdWx0IHRpbWVvdXQgb2YgMSBzZWNvbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Jpb241eF9pMmNfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZSAgID0gImkyYyBiYXNlIiwKKwkJLnN0YXJ0ICA9IEkyQ19QSFlTX0JBU0UsCisJCS5lbmQgICAgPSBJMkNfUEhZU19CQVNFICsgMHgyMCAtMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gImkyYyBpcnEiLAorCQkuc3RhcnQgID0gSVJRX09SSU9ONVhfSTJDLAorCQkuZW5kICAgID0gSVJRX09SSU9ONVhfSTJDLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfaTJjID0geworCS5uYW1lCQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3Jpb241eF9pMmNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvcmlvbjV4X2kyY19yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9yaW9uNXhfaTJjX3BkYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNhdGEgcG9ydAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9yaW9uNXhfc2F0YV9yZXNvdXJjZXNbXSA9IHsKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC5uYW1lICAgPSAic2F0YSBiYXNlIiwKKyAgICAgICAgICAgICAgICAuc3RhcnQgID0gT1JJT041WF9TQVRBX1BIWVNfQkFTRSwKKyAgICAgICAgICAgICAgICAuZW5kICAgID0gT1JJT041WF9TQVRBX1BIWVNfQkFTRSArIDB4NTAwMCAtIDEsCisgICAgICAgICAgICAgICAgLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorICAgICAgICB9LAorCXsKKyAgICAgICAgICAgICAgICAubmFtZSAgID0gInNhdGEgaXJxIiwKKyAgICAgICAgICAgICAgICAuc3RhcnQgID0gSVJRX09SSU9ONVhfU0FUQSwKKyAgICAgICAgICAgICAgICAuZW5kICAgID0gSVJRX09SSU9ONVhfU0FUQSwKKyAgICAgICAgICAgICAgICAuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisgICAgICAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvcmlvbjV4X3NhdGEgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNhdGFfbXYiLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG9yaW9uNXhfc2F0YV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IG9yaW9uNXhfc2F0YV9yZXNvdXJjZXMsCit9OworCit2b2lkIF9faW5pdCBvcmlvbjV4X3NhdGFfaW5pdChzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhICpzYXRhX2RhdGEpCit7CisJc2F0YV9kYXRhLT5kcmFtID0gJm9yaW9uNXhfbWJ1c19kcmFtX2luZm87CisJb3Jpb241eF9zYXRhLmRldi5wbGF0Zm9ybV9kYXRhID0gc2F0YV9kYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb241eF9zYXRhKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaW1lIGhhbmRsaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgb3Jpb241eF90aW1lcl9pbml0KHZvaWQpCit7CisJb3Jpb25fdGltZV9pbml0KElSUV9PUklPTjVYX0JSSURHRSwgT1JJT041WF9UQ0xLKTsKK30KKworc3RydWN0IHN5c190aW1lciBvcmlvbjV4X3RpbWVyID0geworICAgICAgICAuaW5pdCA9IG9yaW9uNXhfdGltZXJfaW5pdCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJZGVudGlmeSBkZXZpY2UgSUQgYW5kIHJldiBmcm9tIFBDSUUgY29uZmlndXJhdGlvbiBoZWFkZXIgc3BhY2UgJzAnLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgb3Jpb241eF9pZCh1MzIgKmRldiwgdTMyICpyZXYsIGNoYXIgKipkZXZfbmFtZSkKK3sKKwlvcmlvbjV4X3BjaWVfaWQoZGV2LCByZXYpOworCisJaWYgKCpkZXYgPT0gTVY4OEY1MjgxX0RFVl9JRCkgeworCQlpZiAoKnJldiA9PSBNVjg4RjUyODFfUkVWX0QyKSB7CisJCQkqZGV2X25hbWUgPSAiTVY4OEY1MjgxLUQyIjsKKwkJfSBlbHNlIGlmICgqcmV2ID09IE1WODhGNTI4MV9SRVZfRDEpIHsKKwkJCSpkZXZfbmFtZSA9ICJNVjg4RjUyODEtRDEiOworCQl9IGVsc2UgeworCQkJKmRldl9uYW1lID0gIk1WODhGNTI4MS1SZXYtVW5zdXBwb3J0ZWQiOworCQl9CisJfSBlbHNlIGlmICgqZGV2ID09IE1WODhGNTE4Ml9ERVZfSUQpIHsKKwkJaWYgKCpyZXYgPT0gTVY4OEY1MTgyX1JFVl9BMikgeworCQkJKmRldl9uYW1lID0gIk1WODhGNTE4Mi1BMiI7CisJCX0gZWxzZSB7CisJCQkqZGV2X25hbWUgPSAiTVY4OEY1MTgyLVJldi1VbnN1cHBvcnRlZCI7CisJCX0KKwl9IGVsc2UgaWYgKCpkZXYgPT0gTVY4OEY1MTgxX0RFVl9JRCkgeworCQlpZiAoKnJldiA9PSBNVjg4RjUxODFfUkVWX0IxKSB7CisJCQkqZGV2X25hbWUgPSAiTVY4OEY1MTgxLVJldi1CMSI7CisJCX0gZWxzZSB7CisJCQkqZGV2X25hbWUgPSAiTVY4OEY1MTgxLVJldi1VbnN1cHBvcnRlZCI7CisJCX0KKwl9IGVsc2UgeworCQkqZGV2X25hbWUgPSAiRGV2aWNlLVVua25vd24iOworCX0KK30KKwordm9pZCBfX2luaXQgb3Jpb241eF9pbml0KHZvaWQpCit7CisJY2hhciAqZGV2X25hbWU7CisJdTMyIGRldiwgcmV2OworCisJb3Jpb241eF9pZCgmZGV2LCAmcmV2LCAmZGV2X25hbWUpOworCXByaW50ayhLRVJOX0lORk8gIk9yaW9uIElEOiAlcy4gVENMSz0lZC5cbiIsIGRldl9uYW1lLCBPUklPTjVYX1RDTEspOworCisJLyoKKwkgKiBTZXR1cCBPcmlvbiBhZGRyZXNzIG1hcAorCSAqLworCW9yaW9uNXhfc2V0dXBfY3B1X21idXNfYnJpZGdlKCk7CisJb3Jpb241eF9zZXR1cF9ldGhfd2lucygpOworCisJLyoKKwkgKiBSZWdpc3RlciBkZXZpY2VzLgorCSAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb241eF91YXJ0KTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfZWhjaTApOworCWlmIChkZXYgPT0gTVY4OEY1MTgyX0RFVl9JRCkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbjV4X2VoY2kxKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfaTJjKTsKK30KKworLyoKKyAqIE1hbnkgb3Jpb24tYmFzZWQgc3lzdGVtcyBoYXZlIGJ1Z2d5IGJvb3Rsb2FkZXIgaW1wbGVtZW50YXRpb25zLgorICogVGhpcyBpcyBhIGNvbW1vbiBmaXh1cCBmb3IgYm9ndXMgbWVtb3J5IHRhZ3MuCisgKi8KK3ZvaWQgX19pbml0IHRhZ19maXh1cF9tZW0zMihzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywgc3RydWN0IHRhZyAqdCwKKwkJCSAgICBjaGFyICoqZnJvbSwgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisJZm9yICg7IHQtPmhkci5zaXplOyB0ID0gdGFnX25leHQodCkpCisJCWlmICh0LT5oZHIudGFnID09IEFUQUdfTUVNICYmCisJCSAgICAoIXQtPnUubWVtLnNpemUgfHwgdC0+dS5tZW0uc2l6ZSAmIH5QQUdFX01BU0sgfHwKKwkJICAgICB0LT51Lm1lbS5zdGFydCAmIH5QQUdFX01BU0spKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIkNsZWFyaW5nIGludmFsaWQgbWVtb3J5IGJhbmsgJWRLQkAweCUwOHhcbiIsCisJCQkgICAgICAgdC0+dS5tZW0uc2l6ZSAvIDEwMjQsIHQtPnUubWVtLnN0YXJ0KTsKKwkJCXQtPmhkci50YWcgPSAwOworCQl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjNGM5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaApAQCAtMCwwICsxLDcyIEBACisjaWZuZGVmIF9fQVJDSF9PUklPTjVYX0NPTU1PTl9ICisjZGVmaW5lIF9fQVJDSF9PUklPTjVYX0NPTU1PTl9ICisKKy8qCisgKiBCYXNpYyBPcmlvbiBpbml0IGZ1bmN0aW9ucyB1c2VkIGVhcmx5IGJ5IG1hY2hpbmUtc2V0dXAuCisgKi8KKwordm9pZCBvcmlvbjV4X21hcF9pbyh2b2lkKTsKK3ZvaWQgb3Jpb241eF9pbml0X2lycSh2b2lkKTsKK3ZvaWQgb3Jpb241eF9pbml0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb3Jpb241eF90aW1lcjsKKworLyoKKyAqIEVudW1lcmF0aW9ucyBhbmQgZnVuY3Rpb25zIGZvciBPcmlvbiB3aW5kb3dzIG1hcHBpbmcuIFVzZWQgYnkgT3Jpb24gY29yZQorICogZnVuY3Rpb25zIHRvIG1hcCBpdHMgaW50ZXJmYWNlcyBhbmQgYnkgdGhlIG1hY2hpbmUtc2V0dXAgdG8gbWFwIGl0cyBvbi0KKyAqIGJvYXJkIGRldmljZXMuIERldGFpbHMgaW4gL21hY2gtb3Jpb24vYWRkci1tYXAuYworICovCitleHRlcm4gc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyBvcmlvbjV4X21idXNfZHJhbV9pbmZvOwordm9pZCBvcmlvbjV4X3NldHVwX2NwdV9tYnVzX2JyaWRnZSh2b2lkKTsKK3ZvaWQgb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4odTMyIGJhc2UsIHUzMiBzaXplKTsKK3ZvaWQgb3Jpb241eF9zZXR1cF9kZXYwX3dpbih1MzIgYmFzZSwgdTMyIHNpemUpOwordm9pZCBvcmlvbjV4X3NldHVwX2RldjFfd2luKHUzMiBiYXNlLCB1MzIgc2l6ZSk7Cit2b2lkIG9yaW9uNXhfc2V0dXBfZGV2Ml93aW4odTMyIGJhc2UsIHUzMiBzaXplKTsKK3ZvaWQgb3Jpb241eF9zZXR1cF9wY2llX3dhX3dpbih1MzIgYmFzZSwgdTMyIHNpemUpOwordm9pZCBvcmlvbjV4X3NldHVwX2V0aF93aW5zKHZvaWQpOworCisvKgorICogU2hhcmVkIGNvZGUgdXNlZCBpbnRlcm5hbGx5IGJ5IG90aGVyIE9yaW9uIGNvcmUgZnVuY3Rpb25zLgorICogKC9tYWNoLW9yaW9uL3BjaS5jKQorICovCisKK3N0cnVjdCBwY2lfc3lzX2RhdGE7CitzdHJ1Y3QgcGNpX2J1czsKKwordm9pZCBvcmlvbjV4X3BjaWVfaWQodTMyICpkZXYsIHUzMiAqcmV2KTsKK2ludCBvcmlvbjV4X3BjaWVfbG9jYWxfYnVzX25yKHZvaWQpOworaW50IG9yaW9uNXhfcGNpX2xvY2FsX2J1c19ucih2b2lkKTsKK2ludCBvcmlvbjV4X3BjaV9zeXNfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOworc3RydWN0IHBjaV9idXMgKm9yaW9uNXhfcGNpX3N5c19zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyk7CisKKy8qCisgKiBWYWxpZCBHUElPIHBpbnMgYWNjb3JkaW5nIHRvIE1QUCBzZXR1cCwgdXNlZCBieSBtYWNoaW5lLXNldHVwLgorICogKC9tYWNoLW9yaW9uL2dwaW8uYykuCisgKi8KKwordm9pZCBvcmlvbjV4X2dwaW9fc2V0X3ZhbGlkX3BpbnModTMyIHBpbnMpOwordm9pZCBncGlvX2Rpc3BsYXkodm9pZCk7CS8qIGRlYnVnICovCisKKy8qCisgKiBQdWxsIGluIE9yaW9uIEV0aGVybmV0IHBsYXRmb3JtX2RhdGEsIHVzZWQgYnkgbWFjaGluZS1zZXR1cAorICovCisKK3N0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhOworCit2b2lkIG9yaW9uNXhfZXRoX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKTsKKworLyoKKyAqIE9yaW9uIFNhdGEgcGxhdGZvcm1fZGF0YSwgdXNlZCBieSBtYWNoaW5lLXNldHVwCisgKi8KKworc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YTsKKwordm9pZCBvcmlvbjV4X3NhdGFfaW5pdChzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhICpzYXRhX2RhdGEpOworCitzdHJ1Y3QgbWFjaGluZV9kZXNjOworc3RydWN0IG1lbWluZm87CitzdHJ1Y3QgdGFnOworZXh0ZXJuIHZvaWQgX19pbml0IHRhZ19maXh1cF9tZW0zMihzdHJ1Y3QgbWFjaGluZV9kZXNjICosIHN0cnVjdCB0YWcgKiwKKwkJCQkgICBjaGFyICoqLCBzdHJ1Y3QgbWVtaW5mbyAqKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kYjg4ZjUyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kYjg4ZjUyODEtc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzJhZWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RiODhmNTI4MS1zZXR1cC5jCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RiODhmNTI4MS1zZXR1cC5jCisgKgorICogTWFydmVsbCBPcmlvbi0yIERldmVsb3BtZW50IEJvYXJkIFNldHVwCisgKgorICogTWFpbnRhaW5lcjogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbjV4Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtb3Jpb24vb3Jpb25fbmFuZC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERCLTg4RjUyODEgb24gYm9hcmQgZGV2aWNlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiA1MTJLIE5PUiBmbGFzaCBEZXZpY2UgYnVzIGJvb3QgY2hpcCBzZWxlY3QKKyAqLworCisjZGVmaW5lIERCODhGNTI4MV9OT1JfQk9PVF9CQVNFCQkweGY0MDAwMDAwCisjZGVmaW5lIERCODhGNTI4MV9OT1JfQk9PVF9TSVpFCQlTWl81MTJLCisKKy8qCisgKiA3LVNlZ21lbnQgb24gRGV2aWNlIGJ1cyBjaGlwIHNlbGVjdCAwCisgKi8KKworI2RlZmluZSBEQjg4RjUyODFfN1NFR19CQVNFCQkweGZhMDAwMDAwCisjZGVmaW5lIERCODhGNTI4MV83U0VHX1NJWkUJCVNaXzFLCisKKy8qCisgKiAzMk0gTk9SIGZsYXNoIG9uIERldmljZSBidXMgY2hpcCBzZWxlY3QgMQorICovCisKKyNkZWZpbmUgREI4OEY1MjgxX05PUl9CQVNFCQkweGZjMDAwMDAwCisjZGVmaW5lIERCODhGNTI4MV9OT1JfU0laRQkJU1pfMzJNCisKKy8qCisgKiAzMk0gTkFORCBmbGFzaCBvbiBEZXZpY2UgYnVzIGNoaXAgc2VsZWN0IDIKKyAqLworCisjZGVmaW5lIERCODhGNTI4MV9OQU5EX0JBU0UJCTB4ZmE4MDAwMDAKKyNkZWZpbmUgREI4OEY1MjgxX05BTkRfU0laRQkJU1pfMUsKKworLyoKKyAqIFBDSQorICovCisKKyNkZWZpbmUgREI4OEY1MjgxX1BDSV9TTE9UMF9PRkZTCQk3CisjZGVmaW5lIERCODhGNTI4MV9QQ0lfU0xPVDBfSVJRX1BJTgkJMTIKKyNkZWZpbmUgREI4OEY1MjgxX1BDSV9TTE9UMV9TTE9UMl9JUlFfUElOCTEzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogNTEyTSBOT1IgRmxhc2ggb24gRGV2aWNlIGJ1cyBCb290IENTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZGI4OGY1MjgxX2Jvb3RfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMSwJLyogOCBiaXQgYnVzIHdpZHRoICovCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiODhmNTI4MV9ib290X2ZsYXNoX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gREI4OEY1MjgxX05PUl9CT09UX0JBU0UsCisJLmVuZAkJPSBEQjg4RjUyODFfTk9SX0JPT1RfQkFTRSArIERCODhGNTI4MV9OT1JfQk9PVF9TSVpFIC0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiODhmNTI4MV9ib290X2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGI4OGY1MjgxX2Jvb3RfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZGI4OGY1MjgxX2Jvb3RfZmxhc2hfcmVzb3VyY2UsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDMyTSBOT1IgRmxhc2ggb24gRGV2aWNlIGJ1cyBDUzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBkYjg4ZjUyODFfbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCS8qIDMyIGJpdCBidXMgd2lkdGggKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGI4OGY1MjgxX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJLnN0YXJ0CQk9IERCODhGNTI4MV9OT1JfQkFTRSwKKwkuZW5kCQk9IERCODhGNTI4MV9OT1JfQkFTRSArIERCODhGNTI4MV9OT1JfU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjg4ZjUyODFfbm9yX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGI4OGY1MjgxX25vcl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZkYjg4ZjUyODFfbm9yX2ZsYXNoX3Jlc291cmNlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAzMk0gTkFORCBGbGFzaCBvbiBEZXZpY2UgYnVzIENTMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBkYjg4ZjUyODFfbmFuZF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUgPSAia2VybmVsIiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMk0sCisJfSwKKwl7CisJCS5uYW1lID0gInJvb3QiLAorCQkub2Zmc2V0ID0gU1pfMk0sCisJCS5zaXplID0gKFNaXzE2TSAtIFNaXzJNKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidXNlciIsCisJCS5vZmZzZXQgPSBTWl8xNk0sCisJCS5zaXplID0gU1pfOE0sCisJfSwKKwl7CisJCS5uYW1lID0gInJlY292ZXJ5IiwKKwkJLm9mZnNldCA9IChTWl8xNk0gKyBTWl84TSksCisJCS5zaXplID0gU1pfOE0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGI4OGY1MjgxX25hbmRfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJPSBEQjg4RjUyODFfTkFORF9CQVNFLAorCS5lbmQJCT0gREI4OEY1MjgxX05BTkRfQkFTRSArIERCODhGNTI4MV9OQU5EX1NJWkUgLSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBvcmlvbl9uYW5kX2RhdGEgZGI4OGY1MjgxX25hbmRfZGF0YSA9IHsKKwkucGFydHMJCT0gZGI4OGY1MjgxX25hbmRfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShkYjg4ZjUyODFfbmFuZF9wYXJ0cyksCisJLmNsZQkJPSAwLAorCS5hbGUJCT0gMSwKKwkud2lkdGgJCT0gOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiODhmNTI4MV9uYW5kX2ZsYXNoID0geworCS5uYW1lCQk9ICJvcmlvbl9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRiODhmNTI4MV9uYW5kX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAmZGI4OGY1MjgxX25hbmRfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiA3LVNlZ21lbnQgb24gRGV2aWNlIGJ1cyBDUzAKKyAqIER1bW15IGNvdW50ZXIgZXZlcnkgMiBzZWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpkYjg4ZjUyODFfN3NlZzsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBkYjg4ZjUyODFfdGltZXI7CisKK3N0YXRpYyB2b2lkIGRiODhmNTI4MV83c2VnX2V2ZW50KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdGF0aWMgaW50IGNvdW50ID0gMDsKKwl3cml0ZWwoMCwgZGI4OGY1MjgxXzdzZWcgKyAoY291bnQgPDwgNCkpOworCWNvdW50ID0gKGNvdW50ICsgMSkgJiA3OworCW1vZF90aW1lcigmZGI4OGY1MjgxX3RpbWVyLCBqaWZmaWVzICsgMiAqIEhaKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZGI4OGY1MjgxXzdzZWdfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2RiODhmNTI4MSgpKSB7CisJCWRiODhmNTI4MV83c2VnID0gaW9yZW1hcChEQjg4RjUyODFfN1NFR19CQVNFLAorCQkJCQlEQjg4RjUyODFfN1NFR19TSVpFKTsKKwkJaWYgKCFkYjg4ZjUyODFfN3NlZykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gaW9yZW1hcCBkYjg4ZjUyODFfN3NlZ1xuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlzZXR1cF90aW1lcigmZGI4OGY1MjgxX3RpbWVyLCBkYjg4ZjUyODFfN3NlZ19ldmVudCwgMCk7CisJCW1vZF90aW1lcigmZGI4OGY1MjgxX3RpbWVyLCBqaWZmaWVzICsgMiAqIEhaKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChkYjg4ZjUyODFfN3NlZ19pbml0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQ0kKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIF9faW5pdCBkYjg4ZjUyODFfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlpbnQgcGluOworCisJLyoKKwkgKiBDb25maWd1cmUgUENJIEdQSU8gSVJRIHBpbnMKKwkgKi8KKwlwaW4gPSBEQjg4RjUyODFfUENJX1NMT1QwX0lSUV9QSU47CisJaWYgKGdwaW9fcmVxdWVzdChwaW4sICJQQ0kgSW50MSIpID09IDApIHsKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbikgPT0gMCkgeworCQkJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHBpbiksIElSUVRfTE9XKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZGI4OGY1MjgxX3BjaV9wcmVpbml0IGZhaWVsZCB0byAiCisJCQkJCSJzZXRfaXJxX3R5cGUgcGluICVkXG4iLCBwaW4pOworCQkJZ3Bpb19mcmVlKHBpbik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImRiODhmNTI4MV9wY2lfcHJlaW5pdCBmYWlsZWQgdG8gZ3Bpb19yZXF1ZXN0ICVkXG4iLCBwaW4pOworCX0KKworCXBpbiA9IERCODhGNTI4MV9QQ0lfU0xPVDFfU0xPVDJfSVJRX1BJTjsKKwlpZiAoZ3Bpb19yZXF1ZXN0KHBpbiwgIlBDSSBJbnQyIikgPT0gMCkgeworCQlpZiAoZ3Bpb19kaXJlY3Rpb25faW5wdXQocGluKSA9PSAwKSB7CisJCQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEocGluKSwgSVJRVF9MT1cpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkYjg4ZjUyODFfcGNpX3ByZWluaXQgZmFpZWxkICIKKwkJCQkJInRvIHNldF9pcnFfdHlwZSBwaW4gJWRcbiIsIHBpbik7CisJCQlncGlvX2ZyZWUocGluKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiZGI4OGY1MjgxX3BjaV9wcmVpbml0IGZhaWxlZCB0byBncGlvX3JlcXVlc3QgJWRcbiIsIHBpbik7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBkYjg4ZjUyODFfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCS8qCisJICogUENJRSBJUlEgaXMgY29ubmVjdGVkIGludGVybmFsbHkgKG5vdCBHUElPKQorCSAqLworCWlmIChkZXYtPmJ1cy0+bnVtYmVyID09IG9yaW9uNXhfcGNpZV9sb2NhbF9idXNfbnIoKSkKKwkJcmV0dXJuIElSUV9PUklPTjVYX1BDSUUwX0lOVDsKKworCS8qCisJICogUENJIElSUXMgYXJlIGNvbm5lY3RlZCB2aWEgR1BJT3MKKwkgKi8KKwlzd2l0Y2ggKHNsb3QgLSBEQjg4RjUyODFfUENJX1NMT1QwX09GRlMpIHsKKwljYXNlIDA6CisJCXJldHVybiBncGlvX3RvX2lycShEQjg4RjUyODFfUENJX1NMT1QwX0lSUV9QSU4pOworCWNhc2UgMToKKwljYXNlIDI6CisJCXJldHVybiBncGlvX3RvX2lycShEQjg4RjUyODFfUENJX1NMT1QxX1NMT1QyX0lSUV9QSU4pOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfcGNpIGRiODhmNTI4MV9wY2kgX19pbml0ZGF0YSA9IHsKKwkubnJfY29udHJvbGxlcnMJPSAyLAorCS5wcmVpbml0CT0gZGI4OGY1MjgxX3BjaV9wcmVpbml0LAorCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAorCS5zZXR1cAkJPSBvcmlvbjV4X3BjaV9zeXNfc2V0dXAsCisJLnNjYW4JCT0gb3Jpb241eF9wY2lfc3lzX3NjYW5fYnVzLAorCS5tYXBfaXJxCT0gZGI4OGY1MjgxX3BjaV9tYXBfaXJxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGI4OGY1MjgxX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfZGI4OGY1MjgxKCkpCisJCXBjaV9jb21tb25faW5pdCgmZGI4OGY1MjgxX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGRiODhmNTI4MV9wY2lfaW5pdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXRoZXJuZXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGRiODhmNTI4MV9ldGhfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSA4LAorCS5mb3JjZV9waHlfYWRkciA9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJUQyBEUzEzMzkgb24gSTJDIGJ1cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZGI4OGY1MjgxX2kyY19ydGMgPSB7CisJLmRyaXZlcl9uYW1lCT0gInJ0Yy1kczEzMDciLAorCS50eXBlCQk9ICJkczEzMzkiLAorCS5hZGRyCQk9IDB4NjgsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGI4OGY1MjgxX2RldnNbXSBfX2luaXRkYXRhID0geworCSZkYjg4ZjUyODFfYm9vdF9mbGFzaCwKKwkmZGI4OGY1MjgxX25vcl9mbGFzaCwKKwkmZGI4OGY1MjgxX25hbmRfZmxhc2gsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGI4OGY1MjgxX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEJhc2ljIE9yaW9uIHNldHVwLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlvcmlvbjV4X2luaXQoKTsKKworCS8qCisJICogU2V0dXAgdGhlIENQVSBhZGRyZXNzIGRlY29kZSB3aW5kb3dzIGZvciBvdXIgb24tYm9hcmQgZGV2aWNlcworCSAqLworCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKERCODhGNTI4MV9OT1JfQk9PVF9CQVNFLAorCQkJCURCODhGNTI4MV9OT1JfQk9PVF9TSVpFKTsKKwlvcmlvbjV4X3NldHVwX2RldjBfd2luKERCODhGNTI4MV83U0VHX0JBU0UsIERCODhGNTI4MV83U0VHX1NJWkUpOworCW9yaW9uNXhfc2V0dXBfZGV2MV93aW4oREI4OEY1MjgxX05PUl9CQVNFLCBEQjg4RjUyODFfTk9SX1NJWkUpOworCW9yaW9uNXhfc2V0dXBfZGV2Ml93aW4oREI4OEY1MjgxX05BTkRfQkFTRSwgREI4OEY1MjgxX05BTkRfU0laRSk7CisKKwkvKgorCSAqIFNldHVwIE11bHRpcGxleGluZyBQaW5zOgorCSAqIE1QUDA6IEdQSU8gKFVTQiBPdmVyIEN1cnJlbnQpCU1QUDE6IEdQSU8gKFVTQiBWYmF0IGlucHV0KQorCSAqIE1QUDI6IFBDSV9SRVFuWzJdCQkJTVBQMzogUENJX0dOVG5bMl0KKwkgKiBNUFA0OiBQQ0lfUkVRblszXQkJCU1QUDU6IFBDSV9HTlRuWzNdCisJICogTVBQNjogR1BJTyAoSlAwLCBDT04xNy4yKQkJTVBQNzogR1BJTyAoSlAxLCBDT04xNy4xKQorCSAqIE1QUDg6IEdQSU8gKEpQMiwgQ09OMTEuMikJCU1QUDk6IEdQSU8gKEpQMywgQ09OMTEuMykKKwkgKiBNUFAxMDogR1BJTyAoUlRDIGludCkJCU1QUDExOiBHUElPIChCYXVkIFJhdGUgR2VuZXJhdG9yKQorCSAqIE1QUDEyOiBHUElPIChQQ0kgaW50IDEpCQlNUFAxMzogR1BJTyAoUENJIGludCAyKQorCSAqIE1QUDE0OiBOQU5EX1JFblsyXQkJCU1QUDE1OiBOQU5EX1dFblsyXQorCSAqIE1QUDE2OiBVQVJUMV9SWAkJCU1QUDE3OiBVQVJUMV9UWAorCSAqIE1QUDE4OiBVQVJUMV9DVFMJCQlNUFAxOTogVUFSVDFfUlRTCisJICogTVBQLURFVjogREVWX0RbMTY6MzFdCisJICovCisJb3Jpb241eF93cml0ZShNUFBfMF83X0NUUkwsIDB4MDAyMjIyMDMpOworCW9yaW9uNXhfd3JpdGUoTVBQXzhfMTVfQ1RSTCwgMHg0NDAwMDAwMCk7CisJb3Jpb241eF93cml0ZShNUFBfMTZfMTlfQ1RSTCwgMCk7CisJb3Jpb241eF93cml0ZShNUFBfREVWX0NUUkwsIDApOworCisJb3Jpb241eF9ncGlvX3NldF92YWxpZF9waW5zKDB4MDAwMDNmYzMpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGI4OGY1MjgxX2RldnMsIEFSUkFZX1NJWkUoZGI4OGY1MjgxX2RldnMpKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmZGI4OGY1MjgxX2kyY19ydGMsIDEpOworCW9yaW9uNXhfZXRoX2luaXQoJmRiODhmNTI4MV9ldGhfZGF0YSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoREI4OEY1MjgxLCAiTWFydmVsbCBPcmlvbi0yIERldmVsb3BtZW50IEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPiAqLworCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBkYjg4ZjUyODFfaW5pdCwKKwkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjc3OTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uNXguaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBETlMzMjNfR1BJT19MRURfUklHSFRfQU1CRVIJMQorI2RlZmluZSBETlMzMjNfR1BJT19MRURfTEVGVF9BTUJFUgkyCisjZGVmaW5lIEROUzMyM19HUElPX0xFRF9QT1dFUgkJNQorI2RlZmluZSBETlMzMjNfR1BJT19PVkVSVEVNUAkJNgorI2RlZmluZSBETlMzMjNfR1BJT19SVEMJCQk3CisjZGVmaW5lIEROUzMyM19HUElPX1BPV0VSX09GRgkJOAorI2RlZmluZSBETlMzMjNfR1BJT19LRVlfUE9XRVIJCTkKKyNkZWZpbmUgRE5TMzIzX0dQSU9fS0VZX1JFU0VUCQkxMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUENJIHNldHVwCisgKi8KKworc3RhdGljIGludCBfX2luaXQgZG5zMzIzX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwkvKiBQQ0ktRSAqLworCWlmIChkZXYtPmJ1cy0+bnVtYmVyID09IG9yaW9uNXhfcGNpZV9sb2NhbF9idXNfbnIoKSkKKwkJcmV0dXJuIElSUV9PUklPTjVYX1BDSUUwX0lOVDsKKworCXByX2VycigiJXM6IHJlcXVlc3RlZCBtYXBwaW5nIGZvciB1bmtub3duIGJ1c1xuIiwgX19mdW5jX18pOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3RydWN0IGh3X3BjaSBkbnMzMjNfcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkuc2V0dXAJCT0gb3Jpb241eF9wY2lfc3lzX3NldHVwLAorCS5zY2FuCQk9IG9yaW9uNXhfcGNpX3N5c19zY2FuX2J1cywKKwkubWFwX2lycQk9IGRuczMyM19wY2lfbWFwX2lycSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRuczMyM19wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2RuczMyMygpKQorCQlwY2lfY29tbW9uX2luaXQoJmRuczMyM19wY2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChkbnMzMjNfcGNpX2luaXQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXRoZXJuZXQKKyAqLworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZG5zMzIzX2V0aF9kYXRhID0geworCS5waHlfYWRkciA9IDgsCisJLmZvcmNlX3BoeV9hZGRyID0gMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiA4TWlCIE5PUiBmbGFzaCAoU3BhbnNpb24gUzI5R0wwNjRNOTBURklSNCkKKyAqCisgKiBMYXlvdXQgYXMgdXNlZCBieSBELUxpbms6CisgKiAgMHgwMDAwMDAwMC0weDAwMDEwMDAwIDogIk1URDEiCisgKiAgMHgwMDAxMDAwMC0weDAwMDIwMDAwIDogIk1URDIiCisgKiAgMHgwMDAyMDAwMC0weDAwMWEwMDAwIDogIkxpbnV4IEtlcm5lbCIKKyAqICAweDAwMWEwMDAwLTB4MDA3ZDAwMDAgOiAiRmlsZSBTeXN0ZW0iCisgKiAgMHgwMDdkMDAwMC0weDAwODAwMDAwIDogInUtYm9vdCIKKyAqLworCisjZGVmaW5lIEROUzMyM19OT1JfQk9PVF9CQVNFIDB4ZjQwMDAwMDAKKyNkZWZpbmUgRE5TMzIzX05PUl9CT09UX1NJWkUgU1pfOE0KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGRuczMyM19wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9ICJNVEQxIiwKKwkJLnNpemUJPSAweDAwMDEwMDAwLAorCQkub2Zmc2V0CT0gMCwKKwl9LCB7CisJCS5uYW1lCT0gIk1URDIiLAorCQkuc2l6ZQk9IDB4MDAwMTAwMDAsCisJCS5vZmZzZXQgPSAweDAwMDEwMDAwLAorCX0sIHsKKwkJLm5hbWUJPSAiTGludXggS2VybmVsIiwKKwkJLnNpemUJPSAweDAwMTgwMDAwLAorCQkub2Zmc2V0CT0gMHgwMDAyMDAwMCwKKwl9LCB7CisJCS5uYW1lCT0gIkZpbGUgU3lzdGVtIiwKKwkJLnNpemUJPSAweDAwNjMwMDAwLAorCQkub2Zmc2V0CT0gMHgwMDFBMDAwMCwKKwl9LCB7CisJCS5uYW1lCT0gInUtYm9vdCIsCisJCS5zaXplCT0gMHgwMDAzMDAwMCwKKwkJLm9mZnNldAk9IDB4MDA3ZDAwMDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZG5zMzIzX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAxLAorCS5wYXJ0cwkJPSBkbnMzMjNfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGRuczMyM19wYXJ0aXRpb25zKQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbnMzMjNfbm9yX2ZsYXNoX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gRE5TMzIzX05PUl9CT09UX0JBU0UsCisJLmVuZAkJPSBETlMzMjNfTk9SX0JPT1RfQkFTRSArIEROUzMyM19OT1JfQk9PVF9TSVpFIC0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuczMyM19ub3JfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geyAucGxhdGZvcm1fZGF0YSA9ICZkbnMzMjNfbm9yX2ZsYXNoX2RhdGEsIH0sCisJLnJlc291cmNlCT0gJmRuczMyM19ub3JfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8gTEVEcyAoc2ltcGxlIC0gZG9lc24ndCB1c2UgaGFyZHdhcmUgYmxpbmtpbmcgc3VwcG9ydCkKKyAqLworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRuczMyM19sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJwb3dlcjpibHVlIiwKKwkJLmdwaW8gPSBETlMzMjNfR1BJT19MRURfUE9XRVIsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LCB7CisJCS5uYW1lID0gInJpZ2h0OmFtYmVyIiwKKwkJLmdwaW8gPSBETlMzMjNfR1BJT19MRURfUklHSFRfQU1CRVIsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LCB7CisJCS5uYW1lID0gImxlZnQ6YW1iZXIiLAorCQkuZ3BpbyA9IEROUzMyM19HUElPX0xFRF9MRUZUX0FNQkVSLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBkbnMzMjNfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShkbnMzMjNfbGVkcyksCisJLmxlZHMJCT0gZG5zMzIzX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbnMzMjNfZ3Bpb19sZWRzID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsgLnBsYXRmb3JtX2RhdGEgPSAmZG5zMzIzX2xlZF9kYXRhLCB9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8gQXR0YWNoZWQgS2V5cworICovCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBkbnMzMjNfYnV0dG9uc1tdID0geworCXsKKwkJLmNvZGUJCT0gS0VZX1JFU1RBUlQsCisJCS5ncGlvCQk9IEROUzMyM19HUElPX0tFWV9SRVNFVCwKKwkJLmRlc2MJCT0gIlJlc2V0IEJ1dHRvbiIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwl9LAorCXsKKwkJLmNvZGUJCT0gS0VZX1BPV0VSLAorCQkuZ3BpbwkJPSBETlMzMjNfR1BJT19LRVlfUE9XRVIsCisJCS5kZXNjCQk9ICJQb3dlciBCdXR0b24iLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBkbnMzMjNfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBkbnMzMjNfYnV0dG9ucywKKwkubmJ1dHRvbnMgICAgICAgPSBBUlJBWV9TSVpFKGRuczMyM19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuczMyM19idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7IC5wbGF0Zm9ybV9kYXRhICA9ICZkbnMzMjNfYnV0dG9uX2RhdGEsIH0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBTZXR1cAorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkbnMzMjNfcGxhdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmZG5zMzIzX25vcl9mbGFzaCwKKwkmZG5zMzIzX2dwaW9fbGVkcywKKwkmZG5zMzIzX2J1dHRvbl9kZXZpY2UsCit9OworCisvKgorICogT24gdGhlIEROUy0zMjMgdGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBhdHRhY2hlZCB2aWEgSTJDOgorICoKKyAqICBpMmMgYWRkciB8IGNoaXAgICAgICAgIHwgZGVzY3JpcHRpb24KKyAqICAweDNlICAgICB8IEdNVCBHNzYwQWYgIHwgZmFuIHNwZWVkIFBXTSBjb250cm9sbGVyCisgKiAgMHg0OCAgICAgfCBHTVQgRzc1MS0yZiB8IHRlbXAuIHNlbnNvciBhbmQgdGhlcm0uIHdhdGNoZG9nIChMTTc1IGNvbXBhdGlibGUpCisgKiAgMHg2OCAgICAgfCBTVCBNNDFUODAgICB8IFJUQyB3LyBhbGFybQorICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZG5zMzIzX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiZzc2MGEiLCAweDNlKSwKKwkJLnR5cGUgPSAiZzc2MGEiLAorCX0sCisjaWYgMAorCS8qIHRoaXMgZW50cnkgcmVxdWlyZXMgdGhlIG5ldy1zdHlsZSBkcml2ZXIgbW9kZWwgbG03NSBkcml2ZXIsCisJICogZm9yIHRoZSBtZWFudGltZSAiaW5zbW9kIGxtNzUua28gZm9yY2VfbG03NT0wLDB4NDgiIGlzIG5lZWRlZCAqLworCXsKKwkJSTJDX0JPQVJEX0lORk8oImxtNzUiLCAweDQ4KSwKKwkJLnR5cGUgPSAiZzc1MSIsCisJfSwKKyNlbmRpZgorCXsKKwkJSTJDX0JPQVJEX0lORk8oInJ0Yy1tNDF0ODAiLCAweDY4KSwKKwkJLnR5cGUgPSAibTQxdDgwIiwKKwl9Cit9OworCisvKiBETlMtMzIzIHNwZWNpZmljIHBvd2VyIG9mZiBtZXRob2QgKi8KK3N0YXRpYyB2b2lkIGRuczMyM19wb3dlcl9vZmYodm9pZCkKK3sKKwlwcl9pbmZvKCIlczogdHJpZ2dlcmluZyBwb3dlci1vZmYuLi5cbiIsIF9fZnVuY19fKTsKKwlncGlvX3NldF92YWx1ZShETlMzMjNfR1BJT19QT1dFUl9PRkYsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZG5zMzIzX2luaXQodm9pZCkKK3sKKwkvKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LiAqLworCW9yaW9uNXhfaW5pdCgpOworCisJLyogc2V0dXAgZmxhc2ggbWFwcGluZworCSAqIENTMyBob2xkcyBhIDggTUIgU3BhbnNpb24gUzI5R0wwNjRNOTBURklSNAorCSAqLworCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKEROUzMyM19OT1JfQk9PVF9CQVNFLCBETlMzMjNfTk9SX0JPT1RfU0laRSk7CisKKwkvKiBETlMtMzIzIGhhcyBhIE1hcnZlbGwgODhYNzA0MiBTQVRBIGNvbnRyb2xsZXIgYXR0YWNoZWQgdmlhIFBDSUUKKwkgKgorCSAqIE9wZW4gYSBzcGVjaWFsIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgZm9yIHRoZSBQQ0lFIFdBLgorCSAqLworCW9yaW9uNXhfc2V0dXBfcGNpZV93YV93aW4oT1JJT041WF9QQ0lFX1dBX1BIWVNfQkFTRSwKKwkJCQlPUklPTjVYX1BDSUVfV0FfU0laRSk7CisKKwkvKiBzZXQgTVBQIHRvIDAgYXMgRC1MaW5rJ3MgMi42LjEyLjYga2VybmVsIGRpZCAqLworCW9yaW9uNXhfd3JpdGUoTVBQXzBfN19DVFJMLCAwKTsKKwlvcmlvbjV4X3dyaXRlKE1QUF84XzE1X0NUUkwsIDApOworCW9yaW9uNXhfd3JpdGUoTVBQXzE2XzE5X0NUUkwsIDApOworCW9yaW9uNXhfd3JpdGUoTVBQX0RFVl9DVFJMLCAwKTsKKworCS8qIERlZmluZSB1c2VkIEdQSU8gcGlucworCisJICBHUElPIE1hcDoKKworCSAgfCAgMCB8ICAgICB8IFBFWF9SU1RfT1VUIChub3QgY29udHJvbGxlZCBieSBHUElPKQorCSAgfCAgMSB8IE91dCB8IHJpZ2h0IGFtYmVyIExFRCAoPSBzYXRhIGNoMCBMRUQpICAobG93LWFjdGl2ZSkKKwkgIHwgIDIgfCBPdXQgfCBsZWZ0ICBhbWJlciBMRUQgKD0gc2F0YSBjaDEgTEVEKSAgKGxvdy1hY3RpdmUpCisJICB8ICAzIHwgT3V0IHwgLy91bmtub3duLy8KKwkgIHwgIDQgfCBPdXQgfCBwb3dlciBidXR0b24gTEVEIChsb3ctYWN0aXZlLCB0b2dldGhlciB3aXRoIHBpbiAjNSkKKwkgIHwgIDUgfCBPdXQgfCBwb3dlciBidXR0b24gTEVEIChsb3ctYWN0aXZlLCB0b2dldGhlciB3aXRoIHBpbiAjNCkKKwkgIHwgIDYgfCBJbiAgfCBHTVQgRzc1MS0yZiBvdmVydGVtcC4gc2h1dGRvd24gc2lnbmFsIChsb3ctYWN0aXZlKQorCSAgfCAgNyB8IEluICB8IE00MVQ4MCBuSVJRL09VVC9TUVcgc2lnbmFsCisJICB8ICA4IHwgT3V0IHwgdHJpZ2dlcnMgcG93ZXIgb2ZmIChoaWdoLWFjdGl2ZSkKKwkgIHwgIDkgfCBJbiAgfCBwb3dlciBidXR0b24gc3dpdGNoIChsb3ctYWN0aXZlKQorCSAgfCAxMCB8IEluICB8IHJlc2V0IGJ1dHRvbiBzd2l0Y2ggKGxvdy1hY3RpdmUpCisJICB8IDExIHwgT3V0IHwgLy91bmtub3duLy8KKwkgIHwgMTIgfCBPdXQgfCAvL3Vua25vd24vLworCSAgfCAxMyB8IE91dCB8IC8vdW5rbm93bi8vCisJICB8IDE0IHwgT3V0IHwgLy91bmtub3duLy8KKwkgIHwgMTUgfCBPdXQgfCAvL3Vua25vd24vLworCSovCisJb3Jpb241eF9ncGlvX3NldF92YWxpZF9waW5zKDB4MDdmNik7CisKKwkvKiByZWdpc3RlciBkbnMzMjMgc3BlY2lmaWMgcG93ZXItb2ZmIG1ldGhvZCAqLworCWlmICgoZ3Bpb19yZXF1ZXN0KEROUzMyM19HUElPX1BPV0VSX09GRiwgIlBPV0VST0ZGIikgIT0gMCkKKwkgICAgfHwgKGdwaW9fZGlyZWN0aW9uX291dHB1dChETlMzMjNfR1BJT19QT1dFUl9PRkYsIDApICE9IDApKQorCQlwcl9lcnIoIkROUzMyMzogZmFpbGVkIHRvIHNldHVwIHBvd2VyLW9mZiBHUElPXG4iKTsKKworCXBtX3Bvd2VyX29mZiA9IGRuczMyM19wb3dlcl9vZmY7CisKKwkvKiByZWdpc3RlciBmbGFzaCBhbmQgb3RoZXIgcGxhdGZvcm0gZGV2aWNlcyAqLworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRuczMyM19wbGF0X2RldmljZXMsCisJCQkgICAgIEFSUkFZX1NJWkUoZG5zMzIzX3BsYXRfZGV2aWNlcykpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZG5zMzIzX2kyY19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUoZG5zMzIzX2kyY19kZXZpY2VzKSk7CisKKwlvcmlvbjV4X2V0aF9pbml0KCZkbnMzMjNfZXRoX2RhdGEpOworfQorCisvKiBXYXJuaW5nOiBELUxpbmsgdXNlcyBhIHdyb25nIG1hY2gtdHlwZSAoPTUyNikgaW4gdGhlaXIgYm9vdGxvYWRlciAqLworTUFDSElORV9TVEFSVChETlMzMjMsICJELUxpbmsgRE5TLTMyMyIpCisJLyogTWFpbnRhaW5lcjogSGVyYmVydCBWYWxlcmlvIFJpZWRlbCA8aHZyQGdudS5vcmc+ICovCisJLnBoeXNfaW8JPSBPUklPTjVYX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoT1JJT041WF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhGRkZDLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IGRuczMyM19pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTA4YzMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2dwaW8uYwpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9ncGlvLmMKKyAqCisgKiBHUElPIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBPcmlvbiBTeXN0ZW0gT24gQ2hpcAorICoKKyAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb241eC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3ZhbGlkW0JJVFNfVE9fTE9OR1MoR1BJT19NQVgpXTsKK3N0YXRpYyBjb25zdCBjaGFyICpncGlvX2xhYmVsW0dQSU9fTUFYXTsgIC8qIG5vbiBudWxsIGZvciBhbGxvY2F0ZWQgR1BJT3MgKi8KKwordm9pZCBfX2luaXQgb3Jpb241eF9ncGlvX3NldF92YWxpZF9waW5zKHUzMiBwaW5zKQoreworCWdwaW9fdmFsaWRbMF0gPSBwaW5zOworfQorCisvKgorICogR0VORVJJQ19HUElPIHByaW1pdGl2ZXMKKyAqLworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogU29tZSBjYWxsZXJzIG1pZ2h0IGhhdmUgbm90IHVzZWQgdGhlIGdwaW9fcmVxdWVzdCgpLAorCSAqIHNvIGZsYWcgdGhpcyBwaW4gYXMgcmVxdWVzdGVkIG5vdy4KKwkgKi8KKwlpZiAoIWdwaW9fbGFiZWxbcGluXSkKKwkJZ3Bpb19sYWJlbFtwaW5dID0gIj8iOworCisJb3Jpb241eF9zZXRiaXRzKEdQSU9fSU9fQ09ORiwgMSA8PCBwaW4pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKKworaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtYXNrOworCisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogU29tZSBjYWxsZXJzIG1pZ2h0IGhhdmUgbm90IHVzZWQgdGhlIGdwaW9fcmVxdWVzdCgpLAorCSAqIHNvIGZsYWcgdGhpcyBwaW4gYXMgcmVxdWVzdGVkIG5vdy4KKwkgKi8KKwlpZiAoIWdwaW9fbGFiZWxbcGluXSkKKwkJZ3Bpb19sYWJlbFtwaW5dID0gIj8iOworCisJbWFzayA9IDEgPDwgcGluOworCW9yaW9uNXhfY2xyYml0cyhHUElPX0JMSU5LX0VOLCBtYXNrKTsKKwlpZiAodmFsdWUpCisJCW9yaW9uNXhfc2V0Yml0cyhHUElPX09VVCwgbWFzayk7CisJZWxzZQorCQlvcmlvbjV4X2NscmJpdHMoR1BJT19PVVQsIG1hc2spOworCW9yaW9uNXhfY2xyYml0cyhHUElPX0lPX0NPTkYsIG1hc2spOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX291dHB1dCk7CisKK2ludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBwaW4pCit7CisJaW50IHZhbCwgbWFzayA9IDEgPDwgcGluOworCisJaWYgKG9yaW9uNXhfcmVhZChHUElPX0lPX0NPTkYpICYgbWFzaykKKwkJdmFsID0gb3Jpb241eF9yZWFkKEdQSU9fREFUQV9JTikgXiBvcmlvbjV4X3JlYWQoR1BJT19JTl9QT0wpOworCWVsc2UKKwkJdmFsID0gb3Jpb241eF9yZWFkKEdQSU9fT1VUKTsKKworCXJldHVybiB2YWwgJiBtYXNrOworfQorRVhQT1JUX1NZTUJPTChncGlvX2dldF92YWx1ZSk7CisKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbWFzayA9IDEgPDwgcGluOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJb3Jpb241eF9jbHJiaXRzKEdQSU9fQkxJTktfRU4sIG1hc2spOworCWlmICh2YWx1ZSkKKwkJb3Jpb241eF9zZXRiaXRzKEdQSU9fT1VULCBtYXNrKTsKKwllbHNlCisJCW9yaW9uNXhfY2xyYml0cyhHUElPX09VVCwgbWFzayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19zZXRfdmFsdWUpOworCit2b2lkIG9yaW9uNXhfZ3Bpb19zZXRfYmxpbmsodW5zaWduZWQgcGluLCBpbnQgYmxpbmspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbWFzayA9IDEgPDwgcGluOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJb3Jpb241eF9jbHJiaXRzKEdQSU9fT1VULCBtYXNrKTsKKwlpZiAoYmxpbmspCisJCW9yaW9uNXhfc2V0Yml0cyhHUElPX0JMSU5LX0VOLCBtYXNrKTsKKwllbHNlCisJCW9yaW9uNXhfY2xyYml0cyhHUElPX0JMSU5LX0VOLCBtYXNrKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChvcmlvbjV4X2dwaW9fc2V0X2JsaW5rKTsKKworaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBwaW4sIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJaWYgKGdwaW9fbGFiZWxbcGluXSkgeworCQlwcl9kZWJ1ZygiJXM6IEdQSU8gJWQgYWxyZWFkeSB1c2VkIGFzICVzXG4iLAorCQkJIF9fZnVuY19fLCBwaW4sIGdwaW9fbGFiZWxbcGluXSk7CisJCXJldCA9IC1FQlVTWTsKKwl9IGVsc2UKKwkJZ3Bpb19sYWJlbFtwaW5dID0gbGFiZWwgPyBsYWJlbCA6ICI/IjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fcmVxdWVzdCk7CisKK3ZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIHBpbikKK3sKKwlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZ3Bpb19sYWJlbFtwaW5dKQorCQlwcl93YXJuaW5nKCIlczogR1BJTyAlZCBhbHJlYWR5IGZyZWVkXG4iLCBfX2Z1bmNfXywgcGluKTsKKwllbHNlCisJCWdwaW9fbGFiZWxbcGluXSA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKKy8qIERlYnVnIGhlbHBlciAqLwordm9pZCBncGlvX2Rpc3BsYXkodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHUElPX01BWDsgaSsrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQaW4tJWQ6ICIsIGkpOworCisJCWlmICghdGVzdF9iaXQoaSwgZ3Bpb192YWxpZCkpIHsKKwkJCXByaW50aygibm9uLUdQSU9cbiIpOworCQl9IGVsc2UgaWYgKCFncGlvX2xhYmVsW2ldKSB7CisJCQlwcmludGsoIkdQSU8sIGZyZWVcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJHUElPLCB1c2VkIGJ5ICVzLCAiLCBncGlvX2xhYmVsW2ldKTsKKwkJCWlmIChvcmlvbjV4X3JlYWQoR1BJT19JT19DT05GKSAmICgxIDw8IGkpKSB7CisJCQkJcHJpbnRrKCJpbnB1dCwgYWN0aXZlICVzLCBsZXZlbCAlcywgZWRnZSAlc1xuIiwKKwkJCQkoKG9yaW9uNXhfcmVhZChHUElPX0lOX1BPTCkgPj4gaSkgJiAxKSA/ICJsb3ciIDogImhpZ2giLAorCQkJCSgob3Jpb241eF9yZWFkKEdQSU9fTEVWRUxfTUFTSykgPj4gaSkgJiAxKSA/ICJlbmFibGVkIiA6ICJtYXNrZWQiLAorCQkJCSgob3Jpb241eF9yZWFkKEdQSU9fRURHRV9NQVNLKSA+PiBpKSAmIDEpID8gImVuYWJsZWQiIDogIm1hc2tlZCIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoIm91dHB1dCwgdmFsPSVkXG4iLCAob3Jpb241eF9yZWFkKEdQSU9fT1VUKSA+PiBpKSAmIDEpOworCQkJfQorCQl9CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIk1QUF8wXzdfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKKwkJCQlNUFBfMF83X0NUUkwsIG9yaW9uNXhfcmVhZChNUFBfMF83X0NUUkwpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiTVBQXzhfMTVfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKKwkJCQlNUFBfOF8xNV9DVFJMLCBvcmlvbjV4X3JlYWQoTVBQXzhfMTVfQ1RSTCkpOworCXByaW50ayhLRVJOX0RFQlVHICJNUFBfMTZfMTlfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKKwkJCQlNUFBfMTZfMTlfQ1RSTCwgb3Jpb241eF9yZWFkKE1QUF8xNl8xOV9DVFJMKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk1QUF9ERVZfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKKwkJCQlNUFBfREVWX0NUUkwsIG9yaW9uNXhfcmVhZChNUFBfREVWX0NUUkwpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiR1BJT19PVVQgKDB4JTA4eCkgPSAweCUwOHhcbiIsCisJCQkJR1BJT19PVVQsIG9yaW9uNXhfcmVhZChHUElPX09VVCkpOworCXByaW50ayhLRVJOX0RFQlVHICJHUElPX0lPX0NPTkYgKDB4JTA4eCkgPSAweCUwOHhcbiIsCisJCQkJR1BJT19JT19DT05GLCBvcmlvbjV4X3JlYWQoR1BJT19JT19DT05GKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fQkxJTktfRU4gKDB4JTA4eCkgPSAweCUwOHhcbiIsCisJCQkJR1BJT19CTElOS19FTiwgb3Jpb241eF9yZWFkKEdQSU9fQkxJTktfRU4pKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiR1BJT19JTl9QT0wgKDB4JTA4eCkgPSAweCUwOHhcbiIsCisJCQkJR1BJT19JTl9QT0wsIG9yaW9uNXhfcmVhZChHUElPX0lOX1BPTCkpOworCXByaW50ayhLRVJOX0RFQlVHICJHUElPX0RBVEFfSU4gKDB4JTA4eCkgPSAweCUwOHhcbiIsCisJCQkJR1BJT19EQVRBX0lOLCBvcmlvbjV4X3JlYWQoR1BJT19EQVRBX0lOKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fTEVWRUxfTUFTSyAoMHglMDh4KSA9IDB4JTA4eFxuIiwKKwkJCQlHUElPX0xFVkVMX01BU0ssIG9yaW9uNXhfcmVhZChHUElPX0xFVkVMX01BU0spKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiR1BJT19FREdFX0NBVVNFICgweCUwOHgpID0gMHglMDh4XG4iLAorCQkJCUdQSU9fRURHRV9DQVVTRSwgb3Jpb241eF9yZWFkKEdQSU9fRURHRV9DQVVTRSkpOworCXByaW50ayhLRVJOX0RFQlVHICJHUElPX0VER0VfTUFTSyAoMHglMDh4KSA9IDB4JTA4eFxuIiwKKwkJCQlHUElPX0VER0VfTUFTSywgb3Jpb241eF9yZWFkKEdQSU9fRURHRV9NQVNLKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyMWYzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYwpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYworICoKKyAqIENvcmUgSVJRIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBPcmlvbiBTeXN0ZW0gT24gQ2hpcAorICoKKyAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uNXguaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1vcmlvbi9pcnEuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPcmlvbiBHUElPIElSUQorICoKKyAqIEdQSU9fSU5fUE9MIHJlZ2lzdGVyIGNvbnRyb2xscyB3aGV0aGVyIEdQSU9fREFUQV9JTiB3aWxsIGhvbGQgdGhlIHNhbWUKKyAqIHZhbHVlIG9mIHRoZSBsaW5lIG9yIHRoZSBvcHBvc2l0ZSB2YWx1ZS4KKyAqCisgKiBMZXZlbCBJUlEgaGFuZGxlcnM6IERBVEFfSU4gaXMgdXNlZCBkaXJlY3RseSBhcyBjYXVzZSByZWdpc3Rlci4KKyAqICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGFyZSBtYXNrZWQgYnkgTEVWRUxfTUFTSyByZWdpc3RlcnMuCisgKiBFZGdlIElSUSBoYW5kbGVyczogIENoYW5nZSBpbiBEQVRBX0lOIGFyZSBsYXRjaGVkIGluIEVER0VfQ0FVU0UuCisgKiAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBhcmUgbWFza2VkIGJ5IEVER0VfTUFTSyByZWdpc3RlcnMuCisgKiBCb3RoLWVkZ2UgaGFuZGxlcnM6IFNpbWlsYXIgdG8gcmVndWxhciBFZGdlIGhhbmRsZXJzLCBidXQgYWxzbyBzd2FwcworICogICAgICAgICAgICAgICAgICAgICB0aGUgcG9sYXJpdHkgdG8gY2F0Y2ggdGhlIG5leHQgbGluZSB0cmFuc2FjdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgbWlnaHQgbm90IHBlcmZlY3RseQorICogICAgICAgICAgICAgICAgICAgICB3b3JrIG9uIHNvbWUgdXNlIGNhc2VzLgorICoKKyAqIEV2ZXJ5IGVpZ2h0IEdQSU8gbGluZXMgYXJlIGdyb3VwZWQgKE9SJ2VkKSBiZWZvcmUgZ29pbmcgdXAgdG8gbWFpbgorICogY2F1c2UgcmVnaXN0ZXIuCisgKgorICogICAgICAgICAgICAgICAgICAgIEVER0UgIGNhdXNlICAgIG1hc2sKKyAqICAgICAgICBkYXRhLWluICAgLy0tLS0tLS0tfCB8LS0tLS18IHwtLS0tXAorICogICAgIC0tLS0tfCB8LS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSB0byBtYWluIGNhdXNlIHJlZworICogICAgICAgICAgIFggICAgICBcLS0tLS0tLS0tLS0tLS0tLXwgfC0tLS0vCisgKiAgICAgICAgcG9sYXJpdHkgICAgTEVWRUwgICAgICAgICAgbWFzaworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgb3Jpb241eF9ncGlvX2lycV9hY2sodTMyIGlycSkKK3sKKwlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpCisJCS8qCisJCSAqIE1hc2sgYml0IGZvciBsZXZlbCBpbnRlcnJ1cHQKKwkJICovCisJCW9yaW9uNXhfY2xyYml0cyhHUElPX0xFVkVMX01BU0ssIDEgPDwgcGluKTsKKwllbHNlCisJCS8qCisJCSAqIENsZWFyIGNhc3VlIGJpdCBmb3IgZWdkZSBpbnRlcnJ1cHQKKwkJICovCisJCW9yaW9uNXhfY2xyYml0cyhHUElPX0VER0VfQ0FVU0UsIDEgPDwgcGluKTsKK30KKworc3RhdGljIHZvaWQgb3Jpb241eF9ncGlvX2lycV9tYXNrKHUzMiBpcnEpCit7CisJaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7CisJaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKQorCQlvcmlvbjV4X2NscmJpdHMoR1BJT19MRVZFTF9NQVNLLCAxIDw8IHBpbik7CisJZWxzZQorCQlvcmlvbjV4X2NscmJpdHMoR1BJT19FREdFX01BU0ssIDEgPDwgcGluKTsKK30KKworc3RhdGljIHZvaWQgb3Jpb241eF9ncGlvX2lycV91bm1hc2sodTMyIGlycSkKK3sKKwlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpCisJCW9yaW9uNXhfc2V0Yml0cyhHUElPX0xFVkVMX01BU0ssIDEgPDwgcGluKTsKKwllbHNlCisJCW9yaW9uNXhfc2V0Yml0cyhHUElPX0VER0VfTUFTSywgMSA8PCBwaW4pOworfQorCitzdGF0aWMgaW50IG9yaW9uNXhfZ3Bpb19zZXRfaXJxX3R5cGUodTMyIGlycSwgdTMyIHR5cGUpCit7CisJaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJaWYgKChvcmlvbjV4X3JlYWQoR1BJT19JT19DT05GKSAmICgxIDw8IHBpbikpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcmlvbjV4X2dwaW9fc2V0X2lycV90eXBlIGZhaWxlZCAiCisJCQkJIihpcnEgJWQsIHBpbiAlZCkuXG4iLCBpcnEsIHBpbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVJRVF9ISUdIOgorCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2xldmVsX2lycTsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwkJb3Jpb241eF9jbHJiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFUX0xPVzoKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCW9yaW9uNXhfc2V0Yml0cyhHUElPX0lOX1BPTCwgKDEgPDwgcGluKSk7CisJCWJyZWFrOworCWNhc2UgSVJRVF9SSVNJTkc6CisJCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7CisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0xFVkVMOworCQlvcmlvbjV4X2NscmJpdHMoR1BJT19JTl9QT0wsICgxIDw8IHBpbikpOworCQlicmVhazsKKwljYXNlIElSUVRfRkFMTElORzoKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7CisJCW9yaW9uNXhfc2V0Yml0cyhHUElPX0lOX1BPTCwgKDEgPDwgcGluKSk7CisJCWJyZWFrOworCWNhc2UgSVJRVF9CT1RIRURHRToKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7CisJCS8qCisJCSAqIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwKKwkJICovCisJCWlmICgob3Jpb241eF9yZWFkKEdQSU9fSU5fUE9MKSBeIG9yaW9uNXhfcmVhZChHUElPX0RBVEFfSU4pKQorCQkgICAgJiAoMSA8PCBwaW4pKQorCQkJb3Jpb241eF9zZXRiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsgLyogZmFsbGluZyAqLworCQllbHNlCisJCQlvcmlvbjV4X2NscmJpdHMoR1BJT19JTl9QT0wsICgxIDw8IHBpbikpOyAvKiByaXNpbmcgKi8KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgaXJxPSVkICh0eXBlPSVkKVxuIiwgaXJxLCB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGVzYy0+c3RhdHVzICY9IH5JUlFfVFlQRV9TRU5TRV9NQVNLOworCWRlc2MtPnN0YXR1cyB8PSB0eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9yaW9uNXhfZ3Bpb19pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiT3Jpb24tSVJRLUdQSU8iLAorCS5hY2sJCT0gb3Jpb241eF9ncGlvX2lycV9hY2ssCisJLm1hc2sJCT0gb3Jpb241eF9ncGlvX2lycV9tYXNrLAorCS51bm1hc2sJCT0gb3Jpb241eF9ncGlvX2lycV91bm1hc2ssCisJLnNldF90eXBlCT0gb3Jpb241eF9ncGlvX3NldF9pcnFfdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIG9yaW9uNXhfZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdTMyIGNhdXNlLCBvZmZzLCBwaW47CisKKwlCVUdfT04oaXJxIDwgSVJRX09SSU9ONVhfR1BJT18wXzcgfHwgaXJxID4gSVJRX09SSU9ONVhfR1BJT18yNF8zMSk7CisJb2ZmcyA9IChpcnEgLSBJUlFfT1JJT041WF9HUElPXzBfNykgKiA4OworCWNhdXNlID0gKG9yaW9uNXhfcmVhZChHUElPX0RBVEFfSU4pICYgb3Jpb241eF9yZWFkKEdQSU9fTEVWRUxfTUFTSykpIHwKKwkJKG9yaW9uNXhfcmVhZChHUElPX0VER0VfQ0FVU0UpICYgb3Jpb241eF9yZWFkKEdQSU9fRURHRV9NQVNLKSk7CisKKwlmb3IgKHBpbiA9IG9mZnM7IHBpbiA8IG9mZnMgKyA4OyBwaW4rKykgeworCQlpZiAoY2F1c2UgJiAoMSA8PCBwaW4pKSB7CisJCQlpcnEgPSBncGlvX3RvX2lycShwaW4pOworCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQkJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFUX0JPVEhFREdFKSB7CisJCQkJLyogU3dhcCBwb2xhcml0eSAocmFjZSB3aXRoIEdQSU8gbGluZSkgKi8KKwkJCQl1MzIgcG9sYXJpdHkgPSBvcmlvbjV4X3JlYWQoR1BJT19JTl9QT0wpOworCQkJCXBvbGFyaXR5IF49IDEgPDwgcGluOworCQkJCW9yaW9uNXhfd3JpdGUoR1BJT19JTl9QT0wsIHBvbGFyaXR5KTsKKwkJCX0KKwkJCWRlc2NfaGFuZGxlX2lycShpcnEsIGRlc2MpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb3Jpb241eF9pbml0X2dwaW9faXJxKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJLyoKKwkgKiBNYXNrIGFuZCBjbGVhciBHUElPIElSUSBpbnRlcnJ1cHRzCisJICovCisJb3Jpb241eF93cml0ZShHUElPX0xFVkVMX01BU0ssIDB4MCk7CisJb3Jpb241eF93cml0ZShHUElPX0VER0VfTUFTSywgMHgwKTsKKwlvcmlvbjV4X3dyaXRlKEdQSU9fRURHRV9DQVVTRSwgMHgwKTsKKworCS8qCisJICogUmVnaXN0ZXIgY2hhaW5lZCBsZXZlbCBoYW5kbGVycyBmb3IgR1BJTyBJUlFzIGJ5IGRlZmF1bHQuCisJICogVXNlciBjYW4gdXNlIHNldF90eXBlKCkgaWYgaGUgd2FudHMgdG8gdXNlIGVkZ2UgdHlwZXMgaGFuZGxlcnMuCisJICovCisJZm9yIChpID0gSVJRX09SSU9ONVhfR1BJT19TVEFSVDsgaSA8IE5SX0lSUVM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJm9yaW9uNXhfZ3Bpb19pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJZGVzYyA9IGlycV9kZXNjICsgaTsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwl9CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18wXzcsIG9yaW9uNXhfZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT184XzE1LCBvcmlvbjV4X2dwaW9faXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9PUklPTjVYX0dQSU9fMTZfMjMsIG9yaW9uNXhfZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18yNF8zMSwgb3Jpb241eF9ncGlvX2lycV9oYW5kbGVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPcmlvbiBNYWluIElSUQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2luaXQgb3Jpb241eF9pbml0X21haW5faXJxKHZvaWQpCit7CisJb3Jpb25faXJxX2luaXQoMCwgKHZvaWQgX19pb21lbSAqKU1BSU5fSVJRX01BU0spOworfQorCit2b2lkIF9faW5pdCBvcmlvbjV4X2luaXRfaXJxKHZvaWQpCit7CisJb3Jpb241eF9pbml0X21haW5faXJxKCk7CisJb3Jpb241eF9pbml0X2dwaW9faXJxKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgva3Vyb2JveF9wcm8tc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9rdXJvYm94X3Byby1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDEzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgva3Vyb2JveF9wcm8tc2V0dXAuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9rdXJvYm94X3Byby1zZXR1cC5jCisgKgorICogTWFpbnRhaW5lcjogUm9uZW4gU2hpdHJpdCA8cnNoaXRyaXRAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uNXguaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1vcmlvbi9vcmlvbl9uYW5kLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogS1VST0JPWC1QUk8gSW5mbworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAyNTZLIE5PUiBmbGFzaCBEZXZpY2UgYnVzIGJvb3QgY2hpcCBzZWxlY3QKKyAqLworCisjZGVmaW5lIEtVUk9CT1hfUFJPX05PUl9CT09UX0JBU0UJMHhmNDAwMDAwMAorI2RlZmluZSBLVVJPQk9YX1BST19OT1JfQk9PVF9TSVpFCVNaXzI1NksKKworLyoKKyAqIDI1Nk0gTkFORCBmbGFzaCBvbiBEZXZpY2UgYnVzIGNoaXAgc2VsZWN0IDEKKyAqLworCisjZGVmaW5lIEtVUk9CT1hfUFJPX05BTkRfQkFTRQkJMHhmYzAwMDAwMAorI2RlZmluZSBLVVJPQk9YX1BST19OQU5EX1NJWkUJCVNaXzJNCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMjU2TUIgTkFORCBGbGFzaCBvbiBEZXZpY2UgYnVzIENTMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBrdXJvYm94X3Byb19uYW5kX3BhcnRzW10gPSB7CisJeworCQkubmFtZQk9ICJ1SW1hZ2UiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBTWl80TSwKKwl9LAorCXsKKwkJLm5hbWUJPSAicm9vdGZzIiwKKwkJLm9mZnNldAk9IFNaXzRNLAorCQkuc2l6ZQk9IFNaXzY0TSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiZXh0cmEiLAorCQkub2Zmc2V0CT0gU1pfNE0gKyBTWl82NE0sCisJCS5zaXplCT0gU1pfMjU2TSAtIChTWl80TSArIFNaXzY0TSksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3Vyb2JveF9wcm9fbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJLnN0YXJ0CQk9IEtVUk9CT1hfUFJPX05BTkRfQkFTRSwKKwkuZW5kCQk9IEtVUk9CT1hfUFJPX05BTkRfQkFTRSArIEtVUk9CT1hfUFJPX05BTkRfU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IG9yaW9uX25hbmRfZGF0YSBrdXJvYm94X3Byb19uYW5kX2RhdGEgPSB7CisJLnBhcnRzCQk9IGt1cm9ib3hfcHJvX25hbmRfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShrdXJvYm94X3Byb19uYW5kX3BhcnRzKSwKKwkuY2xlCQk9IDAsCisJLmFsZQkJPSAxLAorCS53aWR0aAkJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga3Vyb2JveF9wcm9fbmFuZF9mbGFzaCA9IHsKKwkubmFtZQkJPSAib3Jpb25fbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZrdXJvYm94X3Byb19uYW5kX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAma3Vyb2JveF9wcm9fbmFuZF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDI1NktCIE5PUiBGbGFzaCBvbiBCT09UIERldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGt1cm9ib3hfcHJvX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBrdXJvYm94X3Byb19ub3JfZmxhc2hfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCQk9IEtVUk9CT1hfUFJPX05PUl9CT09UX0JBU0UsCisJLmVuZAkJCT0gS1VST0JPWF9QUk9fTk9SX0JPT1RfQkFTRSArIEtVUk9CT1hfUFJPX05PUl9CT09UX1NJWkUgLSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga3Vyb2JveF9wcm9fbm9yX2ZsYXNoID0geworCS5uYW1lCQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZrdXJvYm94X3Byb19ub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZrdXJvYm94X3Byb19ub3JfZmxhc2hfcmVzb3VyY2UsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBDSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IGt1cm9ib3hfcHJvX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwkvKgorCSAqIFBDSSBpc24ndCB1c2VkIG9uIHRoZSBLdXJvCisJICovCisJaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gb3Jpb241eF9wY2llX2xvY2FsX2J1c19ucigpKQorCQlyZXR1cm4gSVJRX09SSU9ONVhfUENJRTBfSU5UOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJrdXJvYm94X3Byb19wY2lfbWFwX2lycSBmYWlsZWQsIHVua25vd24gYnVzXG4iKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kga3Vyb2JveF9wcm9fcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzCT0gMSwKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkuc2V0dXAJCT0gb3Jpb241eF9wY2lfc3lzX3NldHVwLAorCS5zY2FuCQk9IG9yaW9uNXhfcGNpX3N5c19zY2FuX2J1cywKKwkubWFwX2lycQk9IGt1cm9ib3hfcHJvX3BjaV9tYXBfaXJxLAorfTsKKworc3RhdGljIGludCBfX2luaXQga3Vyb2JveF9wcm9fcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19rdXJvYm94X3BybygpKQorCQlwY2lfY29tbW9uX2luaXQoJmt1cm9ib3hfcHJvX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGt1cm9ib3hfcHJvX3BjaV9pbml0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBrdXJvYm94X3Byb19ldGhfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSA4LAorCS5mb3JjZV9waHlfYWRkciA9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJUQyA1QzM3MmEgb24gSTJDIGJ1cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEga3Vyb2JveF9wcm9faTJjX3J0YyA9IHsKKyAgICAgICAuZHJpdmVyX25hbWUgICAgPSAicnRjLXJzNWMzNzIiLAorICAgICAgIC50eXBlICAgICAgICAgICA9ICJyczVjMzcyYSIsCisgICAgICAgLmFkZHIgICAgICAgICAgID0gMHgzMiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0FUQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBrdXJvYm94X3Byb19zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMgICAgICAgID0gMiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBTZXR1cAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBrdXJvYm94X3Byb19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCW9yaW9uNXhfaW5pdCgpOworCisJLyoKKwkgKiBTZXR1cCB0aGUgQ1BVIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgZm9yIG91ciBkZXZpY2VzCisJICovCisJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oS1VST0JPWF9QUk9fTk9SX0JPT1RfQkFTRSwKKwkJCQlLVVJPQk9YX1BST19OT1JfQk9PVF9TSVpFKTsKKwlvcmlvbjV4X3NldHVwX2RldjBfd2luKEtVUk9CT1hfUFJPX05BTkRfQkFTRSwgS1VST0JPWF9QUk9fTkFORF9TSVpFKTsKKworCS8qCisJICogT3BlbiBhIHNwZWNpYWwgYWRkcmVzcyBkZWNvZGUgd2luZG93cyBmb3IgdGhlIFBDSUUgV0EuCisJICovCisJb3Jpb241eF9zZXR1cF9wY2llX3dhX3dpbihPUklPTjVYX1BDSUVfV0FfUEhZU19CQVNFLAorCQkJCU9SSU9ONVhfUENJRV9XQV9TSVpFKTsKKworCS8qCisJICogU2V0dXAgTXVsdGlwbGV4aW5nIFBpbnMgLS0KKwkgKiBNUFBbMC0xXSBOb3QgdXNlZAorCSAqIE1QUFsyXSBHUElPIE1pY29uCisJICogTVBQWzNdIEdQSU8gUlRDCisJICogTVBQWzQtNV0gTm90IHVzZWQKKwkgKiBNUFBbNl0gTmFuZCBGbGFzaCBSRW4KKwkgKiBNUFBbN10gTmFuZCBGbGFzaCBXRW4KKwkgKiBNUFBbOC0xMV0gTm90IHVzZWQKKwkgKiBNUFBbMTJdIFNBVEEgMCBwcmVzZW5jZSBJbmRpY2F0aW9uCisJICogTVBQWzEzXSBTQVRBIDEgcHJlc2VuY2UgSW5kaWNhdGlvbgorCSAqIE1QUFsxNF0gU0FUQSAwIGFjdGl2ZSBJbmRpY2F0aW9uCisJICogTVBQWzE1XSBTQVRBIDEgYWN0aXZlIGluZGljYXRpb24KKwkgKiBNUFBbMTYtMTldIE5vdCB1c2VkCisJICovCisJb3Jpb241eF93cml0ZShNUFBfMF83X0NUUkwsIDB4NDQyMjAwMDMpOworCW9yaW9uNXhfd3JpdGUoTVBQXzhfMTVfQ1RSTCwgMHg1NTU1MDAwMCk7CisJb3Jpb241eF93cml0ZShNUFBfMTZfMTlfQ1RSTCwgMHgwKTsKKworCW9yaW9uNXhfZ3Bpb19zZXRfdmFsaWRfcGlucygweDAwMDAwMDBjKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma3Vyb2JveF9wcm9fbm9yX2ZsYXNoKTsKKwlpZiAobWFjaGluZV9pc19rdXJvYm94X3BybygpKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmt1cm9ib3hfcHJvX25hbmRfZmxhc2gpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZrdXJvYm94X3Byb19pMmNfcnRjLCAxKTsKKwlvcmlvbjV4X2V0aF9pbml0KCZrdXJvYm94X3Byb19ldGhfZGF0YSk7CisJb3Jpb241eF9zYXRhX2luaXQoJmt1cm9ib3hfcHJvX3NhdGFfZGF0YSk7Cit9CisKKyNpZmRlZiBDT05GSUdfTUFDSF9LVVJPQk9YX1BSTworTUFDSElORV9TVEFSVChLVVJPQk9YX1BSTywgIkJ1ZmZhbG8vUmV2b2dlYXIgS3Vyb2JveCBQcm8iKQorCS8qIE1haW50YWluZXI6IFJvbmVuIFNoaXRyaXQgPHJzaGl0cml0QG1hcnZlbGwuY29tPiAqLworCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBrdXJvYm94X3Byb19pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0xJTktTVEFUSU9OX1BSTworTUFDSElORV9TVEFSVChMSU5LU1RBVElPTl9QUk8sICJCdWZmYWxvIExpbmtzdGF0aW9uIFByby9MaXZlIikKKwkvKiBNYWludGFpbmVyOiBCeXJvbiBCcmFkbGV5IDxieXJvbi5iYnJhZGxleUBnbWFpbC5jb20+ICovCisJLnBoeXNfaW8JPSBPUklPTjVYX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoT1JJT041WF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhGRkZDLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IGt1cm9ib3hfcHJvX2luaXQsCisJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKKwkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjk5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMKKyAqCisgKiBQQ0kgYW5kIFBDSWUgZnVuY3Rpb25zIGZvciBNYXJ2ZWxsIE9yaW9uIFN5c3RlbSBPbiBDaGlwCisgKgorICogTWFpbnRhaW5lcjogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LW9yaW9uL3BjaWUuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPcmlvbiBoYXMgb25lIFBDSWUgY29udHJvbGxlciBhbmQgb25lIFBDSSBjb250cm9sbGVyLgorICoKKyAqIE5vdGUxOiBUaGUgbG9jYWwgUENJZSBidXMgbnVtYmVyIGlzICcwJy4gVGhlIGxvY2FsIFBDSSBidXMgbnVtYmVyCisgKiBmb2xsb3dzIHRoZSBzY2FubmVkIFBDSWUgYnJpZGdlZCBidXNzZXMsIGlmIGFueS4KKyAqCisgKiBOb3RlMjogSXQgaXMgcG9zc2libGUgZm9yIFBDSS9QQ0llIGFnZW50cyB0byBhY2Nlc3MgbWFueSBzdWJzeXN0ZW0ncworICogc3BhY2UsIGJ5IGNvbmZpZ3VyaW5nIEJBUnMgYW5kIEFkZHJlc3MgRGVjb2RlIFdpbmRvd3MsIGUuZy4gZmxhc2hlcyBvbgorICogZGV2aWNlIGJ1cywgT3Jpb24gcmVnaXN0ZXJzLCBldGMuIEhvd2V2ZXIgdGhpcyBjb2RlIG9ubHkgZW5hYmxlIHRoZQorICogYWNjZXNzIHRvIEREUiBiYW5rcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUENJZSBjb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUENJRV9CQVNFCSgodm9pZCBfX2lvbWVtICopT1JJT041WF9QQ0lFX1ZJUlRfQkFTRSkKKwordm9pZCBfX2luaXQgb3Jpb241eF9wY2llX2lkKHUzMiAqZGV2LCB1MzIgKnJldikKK3sKKwkqZGV2ID0gb3Jpb25fcGNpZV9kZXZfaWQoUENJRV9CQVNFKTsKKwkqcmV2ID0gb3Jpb25fcGNpZV9yZXYoUENJRV9CQVNFKTsKK30KKworaW50IF9faW5pdCBvcmlvbjV4X3BjaWVfbG9jYWxfYnVzX25yKHZvaWQpCit7CisJcmV0dXJuIG9yaW9uX3BjaWVfZ2V0X2xvY2FsX2J1c19ucihQQ0lFX0JBU0UpOworfQorCitzdGF0aWMgaW50IHBjaWVfdmFsaWRfY29uZmlnKGludCBidXMsIGludCBkZXYpCit7CisJLyoKKwkgKiBEb24ndCBnbyBvdXQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIC0tCisJICogMS4gbm9uZXhpc3RpbmcgZGV2aWNlIG9uIGxvY2FsIGJ1cworCSAqIDIuIHdoZXJlIHRoZXJlJ3Mgbm8gZGV2aWNlIGNvbm5lY3RlZCAobm8gbGluaykKKwkgKi8KKwlpZiAoYnVzID09IDAgJiYgZGV2ID09IDApCisJCXJldHVybiAxOworCisJaWYgKCFvcmlvbl9wY2llX2xpbmtfdXAoUENJRV9CQVNFKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYnVzID09IDAgJiYgZGV2ICE9IDEpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKworLyoKKyAqIFBDSWUgY29uZmlnIGN5Y2xlcyBhcmUgZG9uZSBieSBwcm9ncmFtbWluZyB0aGUgUENJRV9DT05GX0FERFIgcmVnaXN0ZXIKKyAqIGFuZCB0aGVuIHJlYWRpbmcgdGhlIFBDSUVfQ09ORl9EQVRBIHJlZ2lzdGVyLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZQorICogdHJhbnNhY3Rpb25zIGFyZSBhdG9taWMuCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sob3Jpb241eF9wY2llX2xvY2spOworCitzdGF0aWMgaW50IHBjaWVfcmRfY29uZihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MzIgZGV2Zm4sIGludCB3aGVyZSwKKwkJCWludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlpZiAocGNpZV92YWxpZF9jb25maWcoYnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSkgPT0gMCkgeworCQkqdmFsID0gMHhmZmZmZmZmZjsKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3Jpb241eF9wY2llX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBvcmlvbl9wY2llX3JkX2NvbmYoUENJRV9CQVNFLCBidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlvbjV4X3BjaWVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwY2llX3JkX2NvbmZfd2Eoc3RydWN0IHBjaV9idXMgKmJ1cywgdTMyIGRldmZuLAorCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJaW50IHJldDsKKworCWlmIChwY2llX3ZhbGlkX2NvbmZpZyhidXMtPm51bWJlciwgUENJX1NMT1QoZGV2Zm4pKSA9PSAwKSB7CisJCSp2YWwgPSAweGZmZmZmZmZmOworCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCX0KKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IGFjY2VzcyB0byB0aGUgbm9uLWV4dGVuZGVkIGNvbmZpZ3VyYXRpb24KKwkgKiBzcGFjZSB3aGVuIHVzaW5nIHRoZSBXQSBhY2Nlc3MgbWV0aG9kIChvciB3ZSB3b3VsZCBoYXZlIHRvCisJICogc2FjcmlmaWNlIDI1Nk0gb2YgQ1BVIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4pCisJICovCisJaWYgKHdoZXJlID49IDB4MTAwKSB7CisJCSp2YWwgPSAweGZmZmZmZmZmOworCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCX0KKworCXJldCA9IG9yaW9uX3BjaWVfcmRfY29uZl93YSgodm9pZCBfX2lvbWVtICopT1JJT041WF9QQ0lFX1dBX1ZJUlRfQkFTRSwKKwkJCQkgICAgYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBjaWVfd3JfY29uZihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MzIgZGV2Zm4sCisJCQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWlmIChwY2llX3ZhbGlkX2NvbmZpZyhidXMtPm51bWJlciwgUENJX1NMT1QoZGV2Zm4pKSA9PSAwKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaW9uNXhfcGNpZV9sb2NrLCBmbGFncyk7CisJcmV0ID0gb3Jpb25fcGNpZV93cl9jb25mKFBDSUVfQkFTRSwgYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3Jpb241eF9wY2llX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBwY2llX29wcyA9IHsKKwkucmVhZCA9IHBjaWVfcmRfY29uZiwKKwkud3JpdGUgPSBwY2llX3dyX2NvbmYsCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IHBjaWVfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBkZXY7CisKKwkvKgorCSAqIEdlbmVyaWMgUENJZSB1bml0IHNldHVwLgorCSAqLworCW9yaW9uX3BjaWVfc2V0dXAoUENJRV9CQVNFLCAmb3Jpb241eF9tYnVzX2RyYW1faW5mbyk7CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgdG8gYXBwbHkgT3Jpb24tMS9Pcmlvbi1OQVMgUENJZSBjb25maWcKKwkgKiByZWFkIHRyYW5zYWN0aW9uIHdvcmthcm91bmQuCisJICovCisJZGV2ID0gb3Jpb25fcGNpZV9kZXZfaWQoUENJRV9CQVNFKTsKKwlpZiAoZGV2ID09IE1WODhGNTE4MV9ERVZfSUQgfHwgZGV2ID09IE1WODhGNTE4Ml9ERVZfSUQpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJBcHBseWluZyBPcmlvbi0xL09yaW9uLU5BUyBQQ0llIGNvbmZpZyAiCisJCQkJICAgInJlYWQgdHJhbnNhY3Rpb24gd29ya2Fyb3VuZFxuIik7CisJCXBjaWVfb3BzLnJlYWQgPSBwY2llX3JkX2NvbmZfd2E7CisJfQorCisJLyoKKwkgKiBSZXF1ZXN0IHJlc291cmNlcy4KKwkgKi8KKwlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXMpCisJCXBhbmljKCJwY2llX3NldHVwIHVuYWJsZSB0byBhbGxvYyByZXNvdXJjZXMiKTsKKworCS8qCisJICogSU9SRVNPVVJDRV9JTworCSAqLworCXJlc1swXS5uYW1lID0gIlBDSWUgSS9PIFNwYWNlIjsKKwlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCXJlc1swXS5zdGFydCA9IE9SSU9ONVhfUENJRV9JT19CVVNfQkFTRTsKKwlyZXNbMF0uZW5kID0gcmVzWzBdLnN0YXJ0ICsgT1JJT041WF9QQ0lFX0lPX1NJWkUgLSAxOworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZyZXNbMF0pKQorCQlwYW5pYygiUmVxdWVzdCBQQ0llIElPIHJlc291cmNlIGZhaWxlZFxuIik7CisJc3lzLT5yZXNvdXJjZVswXSA9ICZyZXNbMF07CisKKwkvKgorCSAqIElPUkVTT1VSQ0VfTUVNCisJICovCisJcmVzWzFdLm5hbWUgPSAiUENJZSBNZW1vcnkgU3BhY2UiOworCXJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCXJlc1sxXS5zdGFydCA9IE9SSU9ONVhfUENJRV9NRU1fUEhZU19CQVNFOworCXJlc1sxXS5lbmQgPSByZXNbMV0uc3RhcnQgKyBPUklPTjVYX1BDSUVfTUVNX1NJWkUgLSAxOworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSkpCisJCXBhbmljKCJSZXF1ZXN0IFBDSWUgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7CisJc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07CisKKwlzeXMtPnJlc291cmNlWzJdID0gTlVMTDsKKwlzeXMtPmlvX29mZnNldCA9IDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQ0kgY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBDSV9NT0RFCQlPUklPTjVYX1BDSV9SRUcoMHhkMDApCisjZGVmaW5lIFBDSV9DTUQJCQlPUklPTjVYX1BDSV9SRUcoMHhjMDApCisjZGVmaW5lIFBDSV9QMlBfQ09ORgkJT1JJT041WF9QQ0lfUkVHKDB4MWQxNCkKKyNkZWZpbmUgUENJX0NPTkZfQUREUgkJT1JJT041WF9QQ0lfUkVHKDB4Yzc4KQorI2RlZmluZSBQQ0lfQ09ORl9EQVRBCQlPUklPTjVYX1BDSV9SRUcoMHhjN2MpCisKKy8qCisgKiBQQ0lfTU9ERSBiaXRzCisgKi8KKyNkZWZpbmUgUENJX01PREVfNjRCSVQJCQkoMSA8PCAyKQorI2RlZmluZSBQQ0lfTU9ERV9QQ0lYCQkJKCgxIDw8IDQpIHwgKDEgPDwgNSkpCisKKy8qCisgKiBQQ0lfQ01EIGJpdHMKKyAqLworI2RlZmluZSBQQ0lfQ01EX0hPU1RfUkVPUkRFUgkJKDEgPDwgMjkpCisKKy8qCisgKiBQQ0lfUDJQX0NPTkYgYml0cworICovCisjZGVmaW5lIFBDSV9QMlBfQlVTX09GRlMJCTE2CisjZGVmaW5lIFBDSV9QMlBfQlVTX01BU0sJCSgweGZmIDw8IFBDSV9QMlBfQlVTX09GRlMpCisjZGVmaW5lIFBDSV9QMlBfREVWX09GRlMJCTI0CisjZGVmaW5lIFBDSV9QMlBfREVWX01BU0sJCSgweDFmIDw8IFBDSV9QMlBfREVWX09GRlMpCisKKy8qCisgKiBQQ0lfQ09ORl9BRERSIGJpdHMKKyAqLworI2RlZmluZSBQQ0lfQ09ORl9SRUcocmVnKQkJKChyZWcpICYgMHhmYykKKyNkZWZpbmUgUENJX0NPTkZfRlVOQyhmdW5jKQkJKCgoZnVuYykgJiAweDMpIDw8IDgpCisjZGVmaW5lIFBDSV9DT05GX0RFVihkZXYpCQkoKChkZXYpICYgMHgxZikgPDwgMTEpCisjZGVmaW5lIFBDSV9DT05GX0JVUyhidXMpCQkoKChidXMpICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIFBDSV9DT05GX0FERFJfRU4JCSgxIDw8IDMxKQorCisvKgorICogSW50ZXJuYWwgY29uZmlndXJhdGlvbiBzcGFjZQorICovCisjZGVmaW5lIFBDSV9DT05GX0ZVTkNfU1RBVF9DTUQJCTAKKyNkZWZpbmUgUENJX0NPTkZfUkVHX1NUQVRfQ01ECQk0CisjZGVmaW5lIFBDSVhfU1RBVAkJCTB4NjQKKyNkZWZpbmUgUENJWF9TVEFUX0JVU19PRkZTCQk4CisjZGVmaW5lIFBDSVhfU1RBVF9CVVNfTUFTSwkJKDB4ZmYgPDwgUENJWF9TVEFUX0JVU19PRkZTKQorCisvKgorICogUENJIEFkZHJlc3MgRGVjb2RlIFdpbmRvd3MgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgUENJX0JBUl9TSVpFX0REUl9DUyhuKQkoKChuKSA9PSAwKSA/IE9SSU9ONVhfUENJX1JFRygweGMwOCkgOiBcCisJCQkJKChuKSA9PSAxKSA/IE9SSU9ONVhfUENJX1JFRygweGQwOCkgOiAgXAorCQkJCSgobikgPT0gMikgPyBPUklPTjVYX1BDSV9SRUcoMHhjMGMpIDogIFwKKwkJCQkoKG4pID09IDMpID8gT1JJT041WF9QQ0lfUkVHKDB4ZDBjKSA6IDApCisjZGVmaW5lIFBDSV9CQVJfUkVNQVBfRERSX0NTKG4pCSgoKG4pID09MCkgPyBPUklPTjVYX1BDSV9SRUcoMHhjNDgpIDogIFwKKwkJCQkoKG4pID09IDEpID8gT1JJT041WF9QQ0lfUkVHKDB4ZDQ4KSA6ICBcCisJCQkJKChuKSA9PSAyKSA/IE9SSU9ONVhfUENJX1JFRygweGM0YykgOiAgXAorCQkJCSgobikgPT0gMykgPyBPUklPTjVYX1BDSV9SRUcoMHhkNGMpIDogMCkKKyNkZWZpbmUgUENJX0JBUl9FTkFCTEUJCU9SSU9ONVhfUENJX1JFRygweGMzYykKKyNkZWZpbmUgUENJX0FERFJfREVDT0RFX0NUUkwJT1JJT041WF9QQ0lfUkVHKDB4ZDNjKQorCisvKgorICogUENJIGNvbmZpZ3VyYXRpb24gaGVscGVycyBmb3IgQkFSIHNldHRpbmdzCisgKi8KKyNkZWZpbmUgUENJX0NPTkZfRlVOQ19CQVJfQ1MobikJCSgobikgPj4gMSkKKyNkZWZpbmUgUENJX0NPTkZfUkVHX0JBUl9MT19DUyhuKQkoKChuKSAmIDEpID8gMHgxOCA6IDB4MTApCisjZGVmaW5lIFBDSV9DT05GX1JFR19CQVJfSElfQ1MobikJKCgobikgJiAxKSA/IDB4MWMgOiAweDE0KQorCisvKgorICogUENJIGNvbmZpZyBjeWNsZXMgYXJlIGRvbmUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBDSV9DT05GX0FERFIgcmVnaXN0ZXIKKyAqIGFuZCB0aGVuIHJlYWRpbmcgdGhlIFBDSV9DT05GX0RBVEEgcmVnaXN0ZXIuIE5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlCisgKiB0cmFuc2FjdGlvbnMgYXJlIGF0b21pYy4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhvcmlvbjV4X3BjaV9sb2NrKTsKKworaW50IG9yaW9uNXhfcGNpX2xvY2FsX2J1c19ucih2b2lkKQoreworCXUzMiBjb25mID0gb3Jpb241eF9yZWFkKFBDSV9QMlBfQ09ORik7CisJcmV0dXJuKChjb25mICYgUENJX1AyUF9CVVNfTUFTSykgPj4gUENJX1AyUF9CVVNfT0ZGUyk7Cit9CisKK3N0YXRpYyBpbnQgb3Jpb241eF9wY2lfaHdfcmRfY29uZihpbnQgYnVzLCBpbnQgZGV2LCB1MzIgZnVuYywKKwkJCQkJdTMyIHdoZXJlLCB1MzIgc2l6ZSwgdTMyICp2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3Jpb241eF9wY2lfbG9jaywgZmxhZ3MpOworCisJb3Jpb241eF93cml0ZShQQ0lfQ09ORl9BRERSLCBQQ0lfQ09ORl9CVVMoYnVzKSB8CisJCQlQQ0lfQ09ORl9ERVYoZGV2KSB8IFBDSV9DT05GX1JFRyh3aGVyZSkgfAorCQkJUENJX0NPTkZfRlVOQyhmdW5jKSB8IFBDSV9DT05GX0FERFJfRU4pOworCisJKnZhbCA9IG9yaW9uNXhfcmVhZChQQ0lfQ09ORl9EQVRBKTsKKworCWlmIChzaXplID09IDEpCisJCSp2YWwgPSAoKnZhbCA+PiAoOCood2hlcmUgJiAweDMpKSkgJiAweGZmOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJKnZhbCA9ICgqdmFsID4+ICg4Kih3aGVyZSAmIDB4MykpKSAmIDB4ZmZmZjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaW9uNXhfcGNpX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgb3Jpb241eF9wY2lfaHdfd3JfY29uZihpbnQgYnVzLCBpbnQgZGV2LCB1MzIgZnVuYywKKwkJCQkJdTMyIHdoZXJlLCB1MzIgc2l6ZSwgdTMyIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3Jpb241eF9wY2lfbG9jaywgZmxhZ3MpOworCisJb3Jpb241eF93cml0ZShQQ0lfQ09ORl9BRERSLCBQQ0lfQ09ORl9CVVMoYnVzKSB8CisJCQlQQ0lfQ09ORl9ERVYoZGV2KSB8IFBDSV9DT05GX1JFRyh3aGVyZSkgfAorCQkJUENJX0NPTkZfRlVOQyhmdW5jKSB8IFBDSV9DT05GX0FERFJfRU4pOworCisJaWYgKHNpemUgPT0gNCkgeworCQlfX3Jhd193cml0ZWwodmFsLCBQQ0lfQ09ORl9EQVRBKTsKKwl9IGVsc2UgaWYgKHNpemUgPT0gMikgeworCQlfX3Jhd193cml0ZXcodmFsLCBQQ0lfQ09ORl9EQVRBICsgKHdoZXJlICYgMHgzKSk7CisJfSBlbHNlIGlmIChzaXplID09IDEpIHsKKwkJX19yYXdfd3JpdGViKHZhbCwgUENJX0NPTkZfREFUQSArICh3aGVyZSAmIDB4MykpOworCX0gZWxzZSB7CisJCXJldCA9IFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlvbjV4X3BjaV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9yaW9uNXhfcGNpX3JkX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdTMyIGRldmZuLAorCQkJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCS8qCisJICogRG9uJ3QgZ28gb3V0IGZvciBsb2NhbCBkZXZpY2UKKwkgKi8KKwlpZiAoYnVzLT5udW1iZXIgPT0gb3Jpb241eF9wY2lfbG9jYWxfYnVzX25yKCkgJiYKKwkgICAgUENJX1NMT1QoZGV2Zm4pID09IDAgJiYgUENJX0ZVTkMoZGV2Zm4pICE9IDApIHsKKwkJKnZhbCA9IDB4ZmZmZmZmZmY7CisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJfQorCisJcmV0dXJuIG9yaW9uNXhfcGNpX2h3X3JkX2NvbmYoYnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSwKKwkJCQkJUENJX0ZVTkMoZGV2Zm4pLCB3aGVyZSwgc2l6ZSwgdmFsKTsKK30KKworc3RhdGljIGludCBvcmlvbjV4X3BjaV93cl9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKKwkJCQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCWlmIChidXMtPm51bWJlciA9PSBvcmlvbjV4X3BjaV9sb2NhbF9idXNfbnIoKSAmJgorCSAgICBQQ0lfU0xPVChkZXZmbikgPT0gMCAmJiBQQ0lfRlVOQyhkZXZmbikgIT0gMCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXJldHVybiBvcmlvbjV4X3BjaV9od193cl9jb25mKGJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXZmbiksCisJCQkJCVBDSV9GVU5DKGRldmZuKSwgd2hlcmUsIHNpemUsIHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBwY2lfb3BzID0geworCS5yZWFkID0gb3Jpb241eF9wY2lfcmRfY29uZiwKKwkud3JpdGUgPSBvcmlvbjV4X3BjaV93cl9jb25mLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9yaW9uNXhfcGNpX3NldF9idXNfbnIoaW50IG5yKQoreworCXUzMiBwMnAgPSBvcmlvbjV4X3JlYWQoUENJX1AyUF9DT05GKTsKKworCWlmIChvcmlvbjV4X3JlYWQoUENJX01PREUpICYgUENJX01PREVfUENJWCkgeworCQkvKgorCQkgKiBQQ0ktWCBtb2RlCisJCSAqLworCQl1MzIgcGNpeF9zdGF0dXMsIGJ1cywgZGV2OworCQlidXMgPSAocDJwICYgUENJX1AyUF9CVVNfTUFTSykgPj4gUENJX1AyUF9CVVNfT0ZGUzsKKwkJZGV2ID0gKHAycCAmIFBDSV9QMlBfREVWX01BU0spID4+IFBDSV9QMlBfREVWX09GRlM7CisJCW9yaW9uNXhfcGNpX2h3X3JkX2NvbmYoYnVzLCBkZXYsIDAsIFBDSVhfU1RBVCwgNCwgJnBjaXhfc3RhdHVzKTsKKwkJcGNpeF9zdGF0dXMgJj0gflBDSVhfU1RBVF9CVVNfTUFTSzsKKwkJcGNpeF9zdGF0dXMgfD0gKG5yIDw8IFBDSVhfU1RBVF9CVVNfT0ZGUyk7CisJCW9yaW9uNXhfcGNpX2h3X3dyX2NvbmYoYnVzLCBkZXYsIDAsIFBDSVhfU1RBVCwgNCwgcGNpeF9zdGF0dXMpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFBDSSBDb252ZW50aW9uYWwgbW9kZQorCQkgKi8KKwkJcDJwICY9IH5QQ0lfUDJQX0JVU19NQVNLOworCQlwMnAgfD0gKG5yIDw8IFBDSV9QMlBfQlVTX09GRlMpOworCQlvcmlvbjV4X3dyaXRlKFBDSV9QMlBfQ09ORiwgcDJwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvcmlvbjV4X3BjaV9tYXN0ZXJfc2xhdmVfZW5hYmxlKHZvaWQpCit7CisJaW50IGJ1c19uciwgZnVuYywgcmVnOworCXUzMiB2YWw7CisKKwlidXNfbnIgPSBvcmlvbjV4X3BjaV9sb2NhbF9idXNfbnIoKTsKKwlmdW5jID0gUENJX0NPTkZfRlVOQ19TVEFUX0NNRDsKKwlyZWcgPSBQQ0lfQ09ORl9SRUdfU1RBVF9DTUQ7CisJb3Jpb241eF9wY2lfaHdfcmRfY29uZihidXNfbnIsIDAsIGZ1bmMsIHJlZywgNCwgJnZhbCk7CisJdmFsIHw9IChQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUik7CisJb3Jpb241eF9wY2lfaHdfd3JfY29uZihidXNfbnIsIDAsIGZ1bmMsIHJlZywgNCwgdmFsIHwgMHg3KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9yaW9uNXhfc2V0dXBfcGNpX3dpbnMoc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbSkKK3sKKwl1MzIgd2luX2VuYWJsZTsKKwlpbnQgYnVzOworCWludCBpOworCisJLyoKKwkgKiBGaXJzdCwgZGlzYWJsZSB3aW5kb3dzLgorCSAqLworCXdpbl9lbmFibGUgPSAweGZmZmZmZmZmOworCW9yaW9uNXhfd3JpdGUoUENJX0JBUl9FTkFCTEUsIHdpbl9lbmFibGUpOworCisJLyoKKwkgKiBTZXR1cCB3aW5kb3dzIGZvciBERFIgYmFua3MuCisJICovCisJYnVzID0gb3Jpb241eF9wY2lfbG9jYWxfYnVzX25yKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHJhbS0+bnVtX2NzOyBpKyspIHsKKwkJc3RydWN0IG1idXNfZHJhbV93aW5kb3cgKmNzID0gZHJhbS0+Y3MgKyBpOworCQl1MzIgZnVuYyA9IFBDSV9DT05GX0ZVTkNfQkFSX0NTKGNzLT5jc19pbmRleCk7CisJCXUzMiByZWc7CisJCXUzMiB2YWw7CisKKwkJLyoKKwkJICogV3JpdGUgRFJBTSBiYW5rIGJhc2UgYWRkcmVzcyByZWdpc3Rlci4KKwkJICovCisJCXJlZyA9IFBDSV9DT05GX1JFR19CQVJfTE9fQ1MoY3MtPmNzX2luZGV4KTsKKwkJb3Jpb241eF9wY2lfaHdfcmRfY29uZihidXMsIDAsIGZ1bmMsIHJlZywgNCwgJnZhbCk7CisJCXZhbCA9IChjcy0+YmFzZSAmIDB4ZmZmZmYwMDApIHwgKHZhbCAmIDB4ZmZmKTsKKwkJb3Jpb241eF9wY2lfaHdfd3JfY29uZihidXMsIDAsIGZ1bmMsIHJlZywgNCwgdmFsKTsKKworCQkvKgorCQkgKiBXcml0ZSBEUkFNIGJhbmsgc2l6ZSByZWdpc3Rlci4KKwkJICovCisJCXJlZyA9IFBDSV9DT05GX1JFR19CQVJfSElfQ1MoY3MtPmNzX2luZGV4KTsKKwkJb3Jpb241eF9wY2lfaHdfd3JfY29uZihidXMsIDAsIGZ1bmMsIHJlZywgNCwgMCk7CisJCW9yaW9uNXhfd3JpdGUoUENJX0JBUl9TSVpFX0REUl9DUyhjcy0+Y3NfaW5kZXgpLAorCQkJCShjcy0+c2l6ZSAtIDEpICYgMHhmZmZmZjAwMCk7CisJCW9yaW9uNXhfd3JpdGUoUENJX0JBUl9SRU1BUF9ERFJfQ1MoY3MtPmNzX2luZGV4KSwKKwkJCQljcy0+YmFzZSAmIDB4ZmZmZmYwMDApOworCisJCS8qCisJCSAqIEVuYWJsZSBkZWNvZGUgd2luZG93IGZvciB0aGlzIGNoaXAgc2VsZWN0LgorCQkgKi8KKwkJd2luX2VuYWJsZSAmPSB+KDEgPDwgY3MtPmNzX2luZGV4KTsKKwl9CisKKwkvKgorCSAqIFJlLWVuYWJsZSBkZWNvZGUgd2luZG93cy4KKwkgKi8KKwlvcmlvbjV4X3dyaXRlKFBDSV9CQVJfRU5BQkxFLCB3aW5fZW5hYmxlKTsKKworCS8qCisJICogRGlzYWJsZSBhdXRvbWF0aWMgdXBkYXRlIG9mIGFkZHJlc3MgcmVtYXBpbmcgd2hlbiB3cml0aW5nIHRvIEJBUnMuCisJICovCisJb3Jpb241eF9zZXRiaXRzKFBDSV9BRERSX0RFQ09ERV9DVFJMLCAxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCS8qCisJICogUG9pbnQgUENJIHVuaXQgTUJVUyBkZWNvZGUgd2luZG93cyB0byBEUkFNIHNwYWNlLgorCSAqLworCW9yaW9uNXhfc2V0dXBfcGNpX3dpbnMoJm9yaW9uNXhfbWJ1c19kcmFtX2luZm8pOworCisJLyoKKwkgKiBNYXN0ZXIgKyBTbGF2ZSBlbmFibGUKKwkgKi8KKwlvcmlvbjV4X3BjaV9tYXN0ZXJfc2xhdmVfZW5hYmxlKCk7CisKKwkvKgorCSAqIEZvcmNlIG9yZGVyaW5nCisJICovCisJb3Jpb241eF9zZXRiaXRzKFBDSV9DTUQsIFBDSV9DTURfSE9TVF9SRU9SREVSKTsKKworCS8qCisJICogUmVxdWVzdCByZXNvdXJjZXMKKwkgKi8KKwlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXMpCisJCXBhbmljKCJwY2lfc2V0dXAgdW5hYmxlIHRvIGFsbG9jIHJlc291cmNlcyIpOworCisJLyoKKwkgKiBJT1JFU09VUkNFX0lPCisJICovCisJcmVzWzBdLm5hbWUgPSAiUENJIEkvTyBTcGFjZSI7CisJcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKKwlyZXNbMF0uc3RhcnQgPSBPUklPTjVYX1BDSV9JT19CVVNfQkFTRTsKKwlyZXNbMF0uZW5kID0gcmVzWzBdLnN0YXJ0ICsgT1JJT041WF9QQ0lfSU9fU0laRSAtIDE7CisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSkpCisJCXBhbmljKCJSZXF1ZXN0IFBDSSBJTyByZXNvdXJjZSBmYWlsZWRcbiIpOworCXN5cy0+cmVzb3VyY2VbMF0gPSAmcmVzWzBdOworCisJLyoKKwkgKiBJT1JFU09VUkNFX01FTQorCSAqLworCXJlc1sxXS5uYW1lID0gIlBDSSBNZW1vcnkgU3BhY2UiOworCXJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCXJlc1sxXS5zdGFydCA9IE9SSU9ONVhfUENJX01FTV9QSFlTX0JBU0U7CisJcmVzWzFdLmVuZCA9IHJlc1sxXS5zdGFydCArIE9SSU9ONVhfUENJX01FTV9TSVpFIC0gMTsKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMV0pKQorCQlwYW5pYygiUmVxdWVzdCBQQ0kgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7CisJc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07CisKKwlzeXMtPnJlc291cmNlWzJdID0gTlVMTDsKKwlzeXMtPmlvX29mZnNldCA9IDA7CisKKwlyZXR1cm4gMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgUENJZSArIFBDSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcmNfcGNpX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyoKKwkgKiBQcmV2ZW50IGVudW1lcmF0aW9uIG9mIHJvb3QgY29tcGxleC4KKwkgKi8KKwlpZiAoZGV2LT5idXMtPnBhcmVudCA9PSBOVUxMICYmIGRldi0+ZGV2Zm4gPT0gMCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKKwkJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSAwOworCQkJZGV2LT5yZXNvdXJjZVtpXS5lbmQgICA9IDA7CisJCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gMDsKKwkJfQorCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBDSV9BTllfSUQsIHJjX3BjaV9maXh1cCk7CisKK2ludCBfX2luaXQgb3Jpb241eF9wY2lfc3lzX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCWludCByZXQgPSAwOworCisJaWYgKG5yID09IDApIHsKKwkJb3Jpb25fcGNpZV9zZXRfbG9jYWxfYnVzX25yKFBDSUVfQkFTRSwgc3lzLT5idXNucik7CisJCXJldCA9IHBjaWVfc2V0dXAoc3lzKTsKKwl9IGVsc2UgaWYgKG5yID09IDEpIHsKKwkJb3Jpb241eF9wY2lfc2V0X2J1c19ucihzeXMtPmJ1c25yKTsKKwkJcmV0ID0gcGNpX3NldHVwKHN5cyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHBjaV9idXMgX19pbml0ICpvcmlvbjV4X3BjaV9zeXNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCit7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKworCWlmIChuciA9PSAwKSB7CisJCWJ1cyA9IHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmcGNpZV9vcHMsIHN5cyk7CisJfSBlbHNlIGlmIChuciA9PSAxKSB7CisJCWJ1cyA9IHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmcGNpX29wcywgc3lzKTsKKwl9IGVsc2UgeworCQlidXMgPSBOVUxMOworCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gYnVzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4Mi1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZThiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgyLXNldHVwLmMKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgyLXNldHVwLmMKKyAqCisgKiBNYXJ2ZWxsIE9yaW9uLU5BUyBSZWZlcmVuY2UgRGVzaWduIFNldHVwCisgKgorICogTWFpbnRhaW5lcjogUm9uZW4gU2hpdHJpdCA8cnNoaXRyaXRAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uNXguaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSRC04OEY1MTgyIEluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogNTEySyBOT1IgZmxhc2ggRGV2aWNlIGJ1cyBib290IGNoaXAgc2VsZWN0CisgKi8KKworI2RlZmluZSBSRDg4RjUxODJfTk9SX0JPT1RfQkFTRQkJMHhmNDAwMDAwMAorI2RlZmluZSBSRDg4RjUxODJfTk9SX0JPT1RfU0laRQkJU1pfNTEySworCisvKgorICogMTZNIE5PUiBmbGFzaCBvbiBEZXZpY2UgYnVzIGNoaXAgc2VsZWN0IDEKKyAqLworCisjZGVmaW5lIFJEODhGNTE4Ml9OT1JfQkFTRQkJMHhmYzAwMDAwMAorI2RlZmluZSBSRDg4RjUxODJfTk9SX1NJWkUJCVNaXzE2TQorCisvKgorICogUENJCisgKi8KKworI2RlZmluZSBSRDg4RjUxODJfUENJX1NMT1QwX09GRlMJNworI2RlZmluZSBSRDg4RjUxODJfUENJX1NMT1QwX0lSUV9BX1BJTgk3CisjZGVmaW5lIFJEODhGNTE4Ml9QQ0lfU0xPVDBfSVJRX0JfUElOCTYKKworLyoKKyAqIEdQSU8gRGVidWcgTEVECisgKi8KKworI2RlZmluZSBSRDg4RjUxODJfR1BJT19EQkdfTEVECQkwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMTZNIE5PUiBGbGFzaCBvbiBEZXZpY2UgYnVzIENTMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHJkODhmNTE4Ml9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmQ4OGY1MTgyX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJCT0gUkQ4OEY1MTgyX05PUl9CQVNFLAorCS5lbmQJCQk9IFJEODhGNTE4Ml9OT1JfQkFTRSArIFJEODhGNTE4Ml9OT1JfU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByZDg4ZjUxODJfbm9yX2ZsYXNoID0geworCS5uYW1lCQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZyZDg4ZjUxODJfbm9yX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwkJPSAxLAorCS5yZXNvdXJjZQkJPSAmcmQ4OGY1MTgyX25vcl9mbGFzaF9yZXNvdXJjZSwKK307CisKKyNpZmRlZiBDT05GSUdfTEVEUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVzZSBHUElPIGRlYnVnIGxlZCBhcyBDUFUgYWN0aXZlIGluZGljYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCByZDg4ZjUxODJfZGJnbGVkX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKK3sKKwlpbnQgdmFsOworCisJaWYgKGV2dCA9PSBsZWRfaWRsZV9lbmQpCisJCXZhbCA9IDE7CisJZWxzZSBpZiAoZXZ0ID09IGxlZF9pZGxlX3N0YXJ0KQorCQl2YWwgPSAwOworCWVsc2UKKwkJcmV0dXJuOworCisJZ3Bpb19zZXRfdmFsdWUoUkQ4OEY1MTgyX0dQSU9fREJHX0xFRCwgdmFsKTsKK30KKworc3RhdGljIGludCBfX2luaXQgcmQ4OGY1MTgyX2RiZ2xlZF9pbml0KHZvaWQpCit7CisJaW50IHBpbjsKKworCWlmIChtYWNoaW5lX2lzX3JkODhmNTE4MigpKSB7CisJCXBpbiA9IFJEODhGNTE4Ml9HUElPX0RCR19MRUQ7CisKKwkJaWYgKGdwaW9fcmVxdWVzdChwaW4sICJEQkdMRUQiKSA9PSAwKSB7CisJCQlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBpbiwgMCkgIT0gMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAicmQ4OGY1MTgyX2RiZ2xlZF9pbml0IGZhaWxlZCAiCisJCQkJCQkidG8gc2V0IG91dHB1dCBwaW4gJWRcbiIsIHBpbik7CisJCQkJZ3Bpb19mcmVlKHBpbik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJkODhmNTE4Ml9kYmdsZWRfaW5pdCBmYWlsZWQgIgorCQkJCQkidG8gcmVxdWVzdCBncGlvICVkXG4iLCBwaW4pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlsZWRzX2V2ZW50ID0gcmQ4OGY1MTgyX2RiZ2xlZF9ldmVudDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwocmQ4OGY1MTgyX2RiZ2xlZF9pbml0KTsKKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUENJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBfX2luaXQgcmQ4OGY1MTgyX3BjaV9wcmVpbml0KHZvaWQpCit7CisJaW50IHBpbjsKKworCS8qCisJICogQ29uZmlndXJlIFBDSSBHUElPIElSUSBwaW5zCisJICovCisJcGluID0gUkQ4OEY1MTgyX1BDSV9TTE9UMF9JUlFfQV9QSU47CisJaWYgKGdwaW9fcmVxdWVzdChwaW4sICJQQ0kgSW50QSIpID09IDApIHsKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbikgPT0gMCkgeworCQkJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHBpbiksIElSUVRfTE9XKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicmQ4OGY1MTgyX3BjaV9wcmVpbml0IGZhaWVsZCB0byAiCisJCQkJCSJzZXRfaXJxX3R5cGUgcGluICVkXG4iLCBwaW4pOworCQkJZ3Bpb19mcmVlKHBpbik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgInJkODhmNTE4Ml9wY2lfcHJlaW5pdCBmYWlsZWQgdG8gcmVxdWVzdCBncGlvICVkXG4iLCBwaW4pOworCX0KKworCXBpbiA9IFJEODhGNTE4Ml9QQ0lfU0xPVDBfSVJRX0JfUElOOworCWlmIChncGlvX3JlcXVlc3QocGluLCAiUENJIEludEIiKSA9PSAwKSB7CisJCWlmIChncGlvX2RpcmVjdGlvbl9pbnB1dChwaW4pID09IDApIHsKKwkJCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShwaW4pLCBJUlFUX0xPVyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJkODhmNTE4Ml9wY2lfcHJlaW5pdCBmYWllbGQgdG8gIgorCQkJCQkic2V0X2lycV90eXBlIHBpbiAlZFxuIiwgcGluKTsKKwkJCWdwaW9fZnJlZShwaW4pOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyZDg4ZjUxODJfcGNpX3ByZWluaXQgZmFpbGVkIHRvIGdwaW9fcmVxdWVzdCAlZFxuIiwgcGluKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHJkODhmNTE4Ml9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJLyoKKwkgKiBQQ0ktRSBpc24ndCB1c2VkIG9uIHRoZSBSRDIKKwkgKi8KKwlpZiAoZGV2LT5idXMtPm51bWJlciA9PSBvcmlvbjV4X3BjaWVfbG9jYWxfYnVzX25yKCkpCisJCXJldHVybiBJUlFfT1JJT041WF9QQ0lFMF9JTlQ7CisKKwkvKgorCSAqIFBDSSBJUlFzIGFyZSBjb25uZWN0ZWQgdmlhIEdQSU9zCisJICovCisJc3dpdGNoIChzbG90IC0gUkQ4OEY1MTgyX1BDSV9TTE9UMF9PRkZTKSB7CisJY2FzZSAwOgorCQlpZiAocGluID09IDEpCisJCQlyZXR1cm4gZ3Bpb190b19pcnEoUkQ4OEY1MTgyX1BDSV9TTE9UMF9JUlFfQV9QSU4pOworCQllbHNlCisJCQlyZXR1cm4gZ3Bpb190b19pcnEoUkQ4OEY1MTgyX1BDSV9TTE9UMF9JUlFfQl9QSU4pOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfcGNpIHJkODhmNTE4Ml9wY2kgX19pbml0ZGF0YSA9IHsKKwkubnJfY29udHJvbGxlcnMJPSAyLAorCS5wcmVpbml0CT0gcmQ4OGY1MTgyX3BjaV9wcmVpbml0LAorCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAorCS5zZXR1cAkJPSBvcmlvbjV4X3BjaV9zeXNfc2V0dXAsCisJLnNjYW4JCT0gb3Jpb241eF9wY2lfc3lzX3NjYW5fYnVzLAorCS5tYXBfaXJxCT0gcmQ4OGY1MTgyX3BjaV9tYXBfaXJxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcmQ4OGY1MTgyX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfcmQ4OGY1MTgyKCkpCisJCXBjaV9jb21tb25faW5pdCgmcmQ4OGY1MTgyX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKHJkODhmNTE4Ml9wY2lfaW5pdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXRoZXJuZXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgyX2V0aF9kYXRhID0geworCS5waHlfYWRkcgk9IDgsCisJLmZvcmNlX3BoeV9hZGRyID0gMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlRDIERTMTMzOCBvbiBJMkMgYnVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSByZDg4ZjUxODJfaTJjX3J0YyA9IHsKKwkuZHJpdmVyX25hbWUJPSAicnRjLWRzMTMwNyIsCisJLnR5cGUJCT0gImRzMTMzOCIsCisJLmFkZHIJCT0gMHg2OCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2F0YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODJfc2F0YV9kYXRhID0geworCS5uX3BvcnRzICAgICAgICA9IDIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcmQ4OGY1MTgyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZyZDg4ZjUxODJfbm9yX2ZsYXNoLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJkODhmNTE4Ml9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCW9yaW9uNXhfaW5pdCgpOworCisJLyoKKwkgKiBTZXR1cCB0aGUgQ1BVIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgZm9yIG91ciBkZXZpY2VzCisJICovCisJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oUkQ4OEY1MTgyX05PUl9CT09UX0JBU0UsCisJCQkJUkQ4OEY1MTgyX05PUl9CT09UX1NJWkUpOworCW9yaW9uNXhfc2V0dXBfZGV2MV93aW4oUkQ4OEY1MTgyX05PUl9CQVNFLCBSRDg4RjUxODJfTk9SX1NJWkUpOworCisJLyoKKwkgKiBPcGVuIGEgc3BlY2lhbCBhZGRyZXNzIGRlY29kZSB3aW5kb3dzIGZvciB0aGUgUENJRSBXQS4KKwkgKi8KKwlvcmlvbjV4X3NldHVwX3BjaWVfd2Ffd2luKE9SSU9ONVhfUENJRV9XQV9QSFlTX0JBU0UsCisJCQkJT1JJT041WF9QQ0lFX1dBX1NJWkUpOworCisJLyoKKwkgKiBTZXR1cCBNdWx0aXBsZXhpbmcgUGlucyAtLQorCSAqIE1QUFswXSBEZWJ1ZyBMZWQgKEdQSU8gLSBPdXQpCisJICogTVBQWzFdIERlYnVnIExlZCAoR1BJTyAtIE91dCkKKwkgKiBNUFBbMl0gTi9BCisJICogTVBQWzNdIFJUQ19JbnQgKEdQSU8gLSBJbikKKwkgKiBNUFBbNF0gR1BJTworCSAqIE1QUFs1XSBHUElPCisJICogTVBQWzZdIFBDSV9pbnRBIChHUElPIC0gSW4pCisJICogTVBQWzddIFBDSV9pbnRCIChHUElPIC0gSW4pCisJICogTVBQWzgtMTFdIE4vQQorCSAqIE1QUFsxMl0gU0FUQSAwIHByZXNlbmNlIEluZGljYXRpb24KKwkgKiBNUFBbMTNdIFNBVEEgMSBwcmVzZW5jZSBJbmRpY2F0aW9uCisJICogTVBQWzE0XSBTQVRBIDAgYWN0aXZlIEluZGljYXRpb24KKwkgKiBNUFBbMTVdIFNBVEEgMSBhY3RpdmUgaW5kaWNhdGlvbgorCSAqIE1QUFsxNi0xOV0gTm90IHVzZWQKKwkgKiBNUFBbMjBdIFBDSSBDbG9jayB0byBNVjg4RjUxODIKKwkgKiBNUFBbMjFdIFBDSSBDbG9jayB0byBtaW5pIFBDSSBDT04xMQorCSAqIE1QUFsyMl0gVVNCIDAgb3ZlciBjdXJyZW50IGluZGljYXRpb24KKwkgKiBNUFBbMjNdIFVTQiAxIG92ZXIgY3VycmVudCBpbmRpY2F0aW9uCisJICogTVBQWzI0XSBVU0IgMSBvdmVyIGN1cnJlbnQgZW5hYmxlCisJICogTVBQWzI1XSBVU0IgMCBvdmVyIGN1cnJlbnQgZW5hYmxlCisJICovCisKKwlvcmlvbjV4X3dyaXRlKE1QUF8wXzdfQ1RSTCwgMHgwMDAwMDAwMyk7CisJb3Jpb241eF93cml0ZShNUFBfOF8xNV9DVFJMLCAweDU1NTUwMDAwKTsKKwlvcmlvbjV4X3dyaXRlKE1QUF8xNl8xOV9DVFJMLCAweDU1NTUpOworCisJb3Jpb241eF9ncGlvX3NldF92YWxpZF9waW5zKDB4MDAwMDAwZmIpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocmQ4OGY1MTgyX2RldmljZXMsIEFSUkFZX1NJWkUocmQ4OGY1MTgyX2RldmljZXMpKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmcmQ4OGY1MTgyX2kyY19ydGMsIDEpOworCW9yaW9uNXhfZXRoX2luaXQoJnJkODhmNTE4Ml9ldGhfZGF0YSk7CisJb3Jpb241eF9zYXRhX2luaXQoJnJkODhmNTE4Ml9zYXRhX2RhdGEpOworfQorCitNQUNISU5FX1NUQVJUKFJEODhGNTE4MiwgIk1hcnZlbGwgT3Jpb24tTkFTIFJlZmVyZW5jZSBEZXNpZ24iKQorCS8qIE1haW50YWluZXI6IFJvbmVuIFNoaXRyaXQgPHJzaGl0cml0QG1hcnZlbGwuY29tPiAqLworCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSByZDg4ZjUxODJfaW5pdCwKKwkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czIwOS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0Mzg2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czIwOS1zZXR1cC5jCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICogUU5BUCBUUy0xMDkvVFMtMjA5IEJvYXJkIFNldHVwCisgKgorICogTWFpbnRhaW5lcjogQnlyb24gQnJhZGxleSA8Ynlyb24uYmJyYWRsZXlAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uNXguaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBRTkFQX1RTMjA5X05PUl9CT09UX0JBU0UgMHhmNDAwMDAwMAorI2RlZmluZSBRTkFQX1RTMjA5X05PUl9CT09UX1NJWkUgU1pfOE0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDhNaUIgTk9SIGZsYXNoLiBUaGUgc3RydWN0IG10ZF9wYXJ0aXRpb24gaXMgbm90IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQorICogICAgIHBhcnRpdGlvbnMgb24gdGhlIGRldmljZSBiZWNhdXNlIHdlIHdhbnQgdG8ga2VlcCBjb21wYXRhYmlsaXR5IHdpdGgKKyAqICAgICBleGlzdGluZyBRTkFQIGZpcm13YXJlLgorICoKKyAqIExheW91dCBhcyB1c2VkIGJ5IFFOQVA6CisgKiAgWzJdIDB4MDAwMDAwMDAtMHgwMDIwMDAwMCA6ICJLZXJuZWwiCisgKiAgWzNdIDB4MDAyMDAwMDAtMHgwMDYwMDAwMCA6ICJSb290RlMxIgorICogIFs0XSAweDAwNjAwMDAwLTB4MDA3MDAwMDAgOiAiUm9vdEZTMiIKKyAqICBbNl0gMHgwMDcwMDAwMC0weDAwNzYwMDAwIDogIk5BUyBDb25maWciIChyZWFkLW9ubHkpCisgKiAgWzVdIDB4MDA3NjAwMDAtMHgwMDc4MDAwMCA6ICJVLUJvb3QgQ29uZmlnIgorICogIFsxXSAweDAwNzgwMDAwLTB4MDA4MDAwMDAgOiAiVS1Cb290IiAocmVhZC1vbmx5KQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBxbmFwX3RzMjA5X3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgID0gIlUtQm9vdCIsCisJCS5zaXplICAgICAgID0gMHgwMDA4MDAwMCwKKwkJLm9mZnNldCAgICAgPSAweDAwNzgwMDAwLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCisJfSwgeworCQkubmFtZSAgID0gIktlcm5lbCIsCisJCS5zaXplICAgPSAweDAwMjAwMDAwLAorCQkub2Zmc2V0ID0gMCwKKwl9LCB7CisJCS5uYW1lICAgPSAiUm9vdEZTMSIsCisJCS5zaXplICAgPSAweDAwNDAwMDAwLAorCQkub2Zmc2V0ID0gMHgwMDIwMDAwMCwKKwl9LCB7CisJCS5uYW1lICAgPSAiUm9vdEZTMiIsCisJCS5zaXplICAgPSAweDAwMTAwMDAwLAorCQkub2Zmc2V0ID0gMHgwMDYwMDAwMCwKKwl9LCB7CisJCS5uYW1lICAgPSAiVS1Cb290IENvbmZpZyIsCisJCS5zaXplICAgPSAweDAwMDIwMDAwLAorCQkub2Zmc2V0ID0gMHgwMDc2MDAwMCwKKwl9LCB7CisJCS5uYW1lICAgICAgID0gIk5BUyBDb25maWciLAorCQkuc2l6ZSAgICAgICA9IDB4MDAwNjAwMDAsCisJCS5vZmZzZXQgICAgID0gMHgwMDcwMDAwMCwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHFuYXBfdHMyMDlfbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoICAgID0gMSwKKwkucGFydHMgICAgPSBxbmFwX3RzMjA5X3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzID0gQVJSQVlfU0laRShxbmFwX3RzMjA5X3BhcnRpdGlvbnMpCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHFuYXBfdHMyMDlfbm9yX2ZsYXNoX3Jlc291cmNlID0geworCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydCA9IFFOQVBfVFMyMDlfTk9SX0JPT1RfQkFTRSwKKwkuZW5kICAgPSBRTkFQX1RTMjA5X05PUl9CT09UX0JBU0UgKyBRTkFQX1RTMjA5X05PUl9CT09UX1NJWkUgLSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcW5hcF90czIwOV9ub3JfZmxhc2ggPSB7CisJLm5hbWUgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCisJLmlkICAgICAgICAgICAgPSAwLAorCS5kZXYgICAgICAgICAgID0geyAucGxhdGZvcm1fZGF0YSA9ICZxbmFwX3RzMjA5X25vcl9mbGFzaF9kYXRhLCB9LAorCS5yZXNvdXJjZSAgICAgID0gJnFuYXBfdHMyMDlfbm9yX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUENJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBRTkFQX1RTMjA5X1BDSV9TTE9UMF9PRkZTCTcKKyNkZWZpbmUgUU5BUF9UUzIwOV9QQ0lfU0xPVDBfSVJRX1BJTgk2CisjZGVmaW5lIFFOQVBfVFMyMDlfUENJX1NMT1QxX0lSUV9QSU4JNworCit2b2lkIF9faW5pdCBxbmFwX3RzMjA5X3BjaV9wcmVpbml0KHZvaWQpCit7CisJaW50IHBpbjsKKworCS8qCisJICogQ29uZmlndXJlIFBDSSBHUElPIElSUSBwaW5zCisJICovCisJcGluID0gUU5BUF9UUzIwOV9QQ0lfU0xPVDBfSVJRX1BJTjsKKwlpZiAoZ3Bpb19yZXF1ZXN0KHBpbiwgIlBDSSBJbnQxIikgPT0gMCkgeworCQlpZiAoZ3Bpb19kaXJlY3Rpb25faW5wdXQocGluKSA9PSAwKSB7CisJCQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEocGluKSwgSVJRVF9MT1cpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJxbmFwX3RzMjA5X3BjaV9wcmVpbml0IGZhaWxlZCB0byAiCisJCQkJCSJzZXRfaXJxX3R5cGUgcGluICVkXG4iLCBwaW4pOworCQkJZ3Bpb19mcmVlKHBpbik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgInFuYXBfdHMyMDlfcGNpX3ByZWluaXQgZmFpbGVkIHRvIGdwaW9fcmVxdWVzdCAiCisJCQkJIiVkXG4iLCBwaW4pOworCX0KKworCXBpbiA9IFFOQVBfVFMyMDlfUENJX1NMT1QxX0lSUV9QSU47CisJaWYgKGdwaW9fcmVxdWVzdChwaW4sICJQQ0kgSW50MiIpID09IDApIHsKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbikgPT0gMCkgeworCQkJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHBpbiksIElSUVRfTE9XKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicW5hcF90czIwOV9wY2lfcHJlaW5pdCBmYWlsZWQgIgorCQkJCQkidG8gc2V0X2lycV90eXBlIHBpbiAlZFxuIiwgcGluKTsKKwkJCWdwaW9fZnJlZShwaW4pOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJxbmFwX3RzMjA5X3BjaV9wcmVpbml0IGZhaWxlZCB0byBncGlvX3JlcXVlc3QgIgorCQkJCSIlZFxuIiwgcGluKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHFuYXBfdHMyMDlfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCS8qCisJICogUENJRSBJUlEgaXMgY29ubmVjdGVkIGludGVybmFsbHkgKG5vdCBHUElPKQorCSAqLworCWlmIChkZXYtPmJ1cy0+bnVtYmVyID09IG9yaW9uNXhfcGNpZV9sb2NhbF9idXNfbnIoKSkKKwkJcmV0dXJuIElSUV9PUklPTjVYX1BDSUUwX0lOVDsKKworCS8qCisJICogUENJIElSUXMgYXJlIGNvbm5lY3RlZCB2aWEgR1BJT3MKKwkgKi8KKwlzd2l0Y2ggKHNsb3QgLSBRTkFQX1RTMjA5X1BDSV9TTE9UMF9PRkZTKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gZ3Bpb190b19pcnEoUU5BUF9UUzIwOV9QQ0lfU0xPVDBfSVJRX1BJTik7CisJY2FzZSAxOgorCQlyZXR1cm4gZ3Bpb190b19pcnEoUU5BUF9UUzIwOV9QQ0lfU0xPVDFfSVJRX1BJTik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgcW5hcF90czIwOV9wY2kgX19pbml0ZGF0YSA9IHsKKwkubnJfY29udHJvbGxlcnMgPSAyLAorCS5wcmVpbml0ICAgICAgICA9IHFuYXBfdHMyMDlfcGNpX3ByZWluaXQsCisJLnN3aXp6bGUgICAgICAgID0gcGNpX3N0ZF9zd2l6emxlLAorCS5zZXR1cCAgICAgICAgICA9IG9yaW9uNXhfcGNpX3N5c19zZXR1cCwKKwkuc2NhbiAgICAgICAgICAgPSBvcmlvbjV4X3BjaV9zeXNfc2Nhbl9idXMsCisJLm1hcF9pcnEgICAgICAgID0gcW5hcF90czIwOV9wY2lfbWFwX2lycSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFuYXBfdHMyMDlfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc190c194MDkoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZxbmFwX3RzMjA5X3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKHFuYXBfdHMyMDlfcGNpX2luaXQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHFuYXBfdHMyMDlfZXRoX2RhdGEgPSB7CisJLnBoeV9hZGRyICAgICAgID0gOCwKKwkuZm9yY2VfcGh5X2FkZHIgPSAxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfaGV4X25pYmJsZShjaGFyIG4pCit7CisJaWYgKG4gPj0gJzAnICYmIG4gPD0gJzknKQorCQlyZXR1cm4gbiAtICcwJzsKKworCWlmIChuID49ICdBJyAmJiBuIDw9ICdGJykKKwkJcmV0dXJuIG4gLSAnQScgKyAxMDsKKworCWlmIChuID49ICdhJyAmJiBuIDw9ICdmJykKKwkJcmV0dXJuIG4gLSAnYScgKyAxMDsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfaGV4X2J5dGUoY29uc3QgY2hhciAqYikKK3sKKwlpbnQgaGk7CisJaW50IGxvOworCisJaGkgPSBwYXJzZV9oZXhfbmliYmxlKGJbMF0pOworCWxvID0gcGFyc2VfaGV4X25pYmJsZShiWzFdKTsKKworCWlmIChoaSA8IDAgfHwgbG8gPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gKGhpIDw8IDQpIHwgbG87Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNoZWNrX21hY19hZGRyKGNvbnN0IGNoYXIgKmFkZHJfc3RyKQoreworCXVfaW50OF90IGFkZHJbNl07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWludCBieXRlOworCisJCS8qCisJCSAqIEVuZm9yY2UgInh4Onh4Onh4Onh4Onh4Onh4XG4iIGZvcm1hdC4KKwkJICovCisJCWlmIChhZGRyX3N0clsoaSAqIDMpICsgMl0gIT0gKChpIDwgNSkgPyAnOicgOiAnXG4nKSkKKwkJCXJldHVybiAtMTsKKworCQlieXRlID0gcGFyc2VfaGV4X2J5dGUoYWRkcl9zdHIgKyAoaSAqIDMpKTsKKwkJaWYgKGJ5dGUgPCAwKQorCQkJcmV0dXJuIC0xOworCQlhZGRyW2ldID0gYnl0ZTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJ0czIwOTogZm91bmQgZXRoZXJuZXQgbWFjIGFkZHJlc3MgIik7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJcHJpbnRrKCIlLjJ4JXMiLCBhZGRyW2ldLCAoaSA8IDUpID8gIjoiIDogIi5cbiIpOworCisJbWVtY3B5KHFuYXBfdHMyMDlfZXRoX2RhdGEubWFjX2FkZHIsIGFkZHIsIDYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgJ05BUyBDb25maWcnIGZsYXNoIHBhcnRpdGlvbiBoYXMgYW4gZXh0MiBmaWxlc3lzdGVtIHdoaWNoCisgKiBjb250YWlucyBhIGZpbGUgdGhhdCBoYXMgdGhlIGV0aGVybmV0IE1BQyBhZGRyZXNzIGluIHBsYWluIHRleHQKKyAqIChmb3JtYXQgInh4Onh4Onh4Onh4Onh4Onh4XG4iLikKKyAqLworc3RhdGljIHZvaWQgX19pbml0IHRzMjA5X2ZpbmRfbWFjX2FkZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlmb3IgKGFkZHIgPSAweDAwNzAwMDAwOyBhZGRyIDwgMHgwMDc2MDAwMDsgYWRkciArPSAxMDI0KSB7CisJCWNoYXIgKm5vcl9wYWdlOworCQlpbnQgcmV0ID0gMDsKKworCQlub3JfcGFnZSA9IGlvcmVtYXAoUU5BUF9UUzIwOV9OT1JfQk9PVF9CQVNFICsgYWRkciwgMTAyNCk7CisJCWlmIChub3JfcGFnZSAhPSBOVUxMKSB7CisJCQlyZXQgPSBjaGVja19tYWNfYWRkcihub3JfcGFnZSk7CisJCQlpb3VubWFwKG5vcl9wYWdlKTsKKwkJfQorCisJCWlmIChyZXQgPT0gMCkKKwkJCWJyZWFrOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSVEMgUzM1MzkwQSBvbiBJMkMgYnVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUUzIwOV9SVENfR1BJTwkzCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBxbmFwX3RzMjA5X2kyY19ydGMgPSB7CisgICAgICAgLmRyaXZlcl9uYW1lID0gInJ0Yy1zMzUzOTBhIiwKKyAgICAgICAuYWRkciAgICAgICAgPSAweDMwLAorICAgICAgIC5pcnEgICAgICAgICA9IDAsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBBdHRhY2hlZCBLZXlzCisgKiAgICAgUG93ZXIgYnV0dG9uIGlzIGF0dGFjaGVkIHRvIHRoZSBQSUMgbWljcm9jb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBRTkFQX1RTMjA5X0dQSU9fS0VZX01FRElBCTEKKyNkZWZpbmUgUU5BUF9UUzIwOV9HUElPX0tFWV9SRVNFVAkyCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBxbmFwX3RzMjA5X2J1dHRvbnNbXSA9IHsKKwl7CisJCS5jb2RlCQk9IEtFWV9SRVNUQVJULAorCQkuZ3BpbwkJPSBRTkFQX1RTMjA5X0dQSU9fS0VZX01FRElBLAorCQkuZGVzYwkJPSAiVVNCIENvcHkgQnV0dG9uIiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCX0sCisJeworCQkuY29kZQkJPSBLRVlfUE9XRVIsCisJCS5ncGlvCQk9IFFOQVBfVFMyMDlfR1BJT19LRVlfUkVTRVQsCisJCS5kZXNjCQk9ICJSZXNldCBCdXR0b24iLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBxbmFwX3RzMjA5X2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0gcW5hcF90czIwOV9idXR0b25zLAorCS5uYnV0dG9ucyAgICAgICA9IEFSUkFZX1NJWkUocW5hcF90czIwOV9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHFuYXBfdHMyMDlfYnV0dG9uX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5kZXYJCT0geyAucGxhdGZvcm1fZGF0YSAgPSAmcW5hcF90czIwOV9idXR0b25fZGF0YSwgfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0FUQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBxbmFwX3RzMjA5X3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cyAgICAgICAgPSAyLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAqIEdlbmVyYWwgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcW5hcF90czIwOV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmcW5hcF90czIwOV9ub3JfZmxhc2gsCisJJnFuYXBfdHMyMDlfYnV0dG9uX2RldmljZSwKK307CisKKy8qCisgKiBRTkFQIFRTLVsxMl0wOSBzcGVjaWZpYyBwb3dlciBvZmYgbWV0aG9kIHZpYSBVQVJUMS1hdHRhY2hlZCBQSUMKKyAqLworCisjZGVmaW5lIFVBUlQxX1JFRyh4KSAgKFVBUlQxX1ZJUlRfQkFTRSArICgoVUFSVF8jI3gpIDw8IDIpKQorCitzdGF0aWMgdm9pZCBxbmFwX3RzMjA5X3Bvd2VyX29mZih2b2lkKQoreworCS8qIDE5MjAwIGJhdWQgZGl2aXNvciAqLworCWNvbnN0IHVuc2lnbmVkIGRpdmlzb3IgPSAoKE9SSU9ONVhfVENMSyArICg4ICogMTkyMDApKSAvICgxNiAqIDE5MjAwKSk7CisKKwlwcl9pbmZvKCIlczogdHJpZ2dlcmluZyBwb3dlci1vZmYuLi5cbiIsIF9fZnVuY19fKTsKKworCS8qIGhpamFjayB1YXJ0MSBhbmQgcmVzZXQgaW50byBzYW5lIHN0YXRlICgxOTIwMCw4bjEpICovCisJb3Jpb241eF93cml0ZShVQVJUMV9SRUcoTENSKSwgMHg4Myk7CisJb3Jpb241eF93cml0ZShVQVJUMV9SRUcoRExMKSwgZGl2aXNvciAmIDB4ZmYpOworCW9yaW9uNXhfd3JpdGUoVUFSVDFfUkVHKERMTSksIChkaXZpc29yID4+IDgpICYgMHhmZik7CisJb3Jpb241eF93cml0ZShVQVJUMV9SRUcoTENSKSwgMHgwMyk7CisJb3Jpb241eF93cml0ZShVQVJUMV9SRUcoSUVSKSwgMHgwMCk7CisJb3Jpb241eF93cml0ZShVQVJUMV9SRUcoRkNSKSwgMHgwMCk7CisJb3Jpb241eF93cml0ZShVQVJUMV9SRUcoTUNSKSwgMHgwMCk7CisKKwkvKiBzZW5kIHRoZSBwb3dlci1vZmYgY29tbWFuZCAnQScgdG8gUElDICovCisJb3Jpb241eF93cml0ZShVQVJUMV9SRUcoVFgpLCAnQScpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcW5hcF90czIwOV9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCW9yaW9uNXhfaW5pdCgpOworCisJLyoKKwkgKiBTZXR1cCBmbGFzaCBtYXBwaW5nCisJICovCisJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oUU5BUF9UUzIwOV9OT1JfQk9PVF9CQVNFLAorCQkJICAgIFFOQVBfVFMyMDlfTk9SX0JPT1RfU0laRSk7CisKKwkvKgorCSAqIE9wZW4gYSBzcGVjaWFsIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgZm9yIHRoZSBQQ0lFIFdBLgorCSAqLworCW9yaW9uNXhfc2V0dXBfcGNpZV93YV93aW4oT1JJT041WF9QQ0lFX1dBX1BIWVNfQkFTRSwKKwkJCQlPUklPTjVYX1BDSUVfV0FfU0laRSk7CisKKwkvKgorCSAqIFNldHVwIE11bHRpcGxleGluZyBQaW5zIC0tCisJICogTVBQWzBdIFJlc2VydmVkCisJICogTVBQWzFdIFVTQiBjb3B5IGJ1dHRvbiAoMCBhY3RpdmUpCisJICogTVBQWzJdIExvYWQgZGVmYXVsdHMgYnV0dG9uICgwIGFjdGl2ZSkKKwkgKiBNUFBbM10gR1BJTyBSVEMKKwkgKiBNUFBbNC01XSBSZXNlcnZlZAorCSAqIE1QUFs2XSBQQ0kgSW50IEEKKwkgKiBNUFBbN10gUENJIEludCBCCisJICogTVBQWzgtMTFdIFJlc2VydmVkCisJICogTVBQWzEyXSBTQVRBIDAgcHJlc2VuY2UKKwkgKiBNUFBbMTNdIFNBVEEgMSBwcmVzZW5jZQorCSAqIE1QUFsxNF0gU0FUQSAwIGFjdGl2ZQorCSAqIE1QUFsxNV0gU0FUQSAxIGFjdGl2ZQorCSAqIE1QUFsxNl0gVUFSVDEgUlhECisJICogTVBQWzE3XSBVQVJUMSBUWEQKKwkgKiBNUFBbMThdIFNXX1JTVCAoMCBhY3RpdmUpCisJICogTVBQWzE5XSBSZXNlcnZlZAorCSAqIE1QUFsyMF0gUENJIGNsb2NrIDAKKwkgKiBNUFBbMjFdIFBDSSBjbG9jayAxCisJICogTVBQWzIyXSBVU0IgMCBvdmVyIGN1cnJlbnQKKwkgKiBNUFBbMjMtMjVdIFJlc2VydmVkCisJICovCisJb3Jpb241eF93cml0ZShNUFBfMF83X0NUUkwsIDB4Myk7CisJb3Jpb241eF93cml0ZShNUFBfOF8xNV9DVFJMLCAweDU1NTUwMDAwKTsKKwlvcmlvbjV4X3dyaXRlKE1QUF8xNl8xOV9DVFJMLCAweDU1MDApOworCW9yaW9uNXhfZ3Bpb19zZXRfdmFsaWRfcGlucygweDNjYzBmZmYpOworCisJLyogcmVnaXN0ZXIgdHMyMDkgc3BlY2lmaWMgcG93ZXItb2ZmIG1ldGhvZCAqLworCXBtX3Bvd2VyX29mZiA9IHFuYXBfdHMyMDlfcG93ZXJfb2ZmOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocW5hcF90czIwOV9kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUocW5hcF90czIwOV9kZXZpY2VzKSk7CisKKwkvKiBHZXQgUlRDIElSUSBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KKwlpZiAoZ3Bpb19yZXF1ZXN0KFRTMjA5X1JUQ19HUElPLCAicnRjIikgPT0gMCkgeworCQlpZiAoZ3Bpb19kaXJlY3Rpb25faW5wdXQoVFMyMDlfUlRDX0dQSU8pID09IDApCisJCQlxbmFwX3RzMjA5X2kyY19ydGMuaXJxID0gZ3Bpb190b19pcnEoVFMyMDlfUlRDX0dQSU8pOworCQllbHNlCisJCQlncGlvX2ZyZWUoVFMyMDlfUlRDX0dQSU8pOworCX0KKwlpZiAocW5hcF90czIwOV9pMmNfcnRjLmlycSA9PSAwKQorCQlwcl93YXJuaW5nKCJxbmFwX3RzMjA5X2luaXQ6IGZhaWxlZCB0byBnZXQgUlRDIElSUVxuIik7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJnFuYXBfdHMyMDlfaTJjX3J0YywgMSk7CisKKwl0czIwOV9maW5kX21hY19hZGRyKCk7CisJb3Jpb241eF9ldGhfaW5pdCgmcW5hcF90czIwOV9ldGhfZGF0YSk7CisKKwlvcmlvbjV4X3NhdGFfaW5pdCgmcW5hcF90czIwOV9zYXRhX2RhdGEpOworfQorCitNQUNISU5FX1NUQVJUKFRTMjA5LCAiUU5BUCBUUy0xMDkvVFMtMjA5IikKKwkvKiBNYWludGFpbmVyOiAgQnlyb24gQnJhZGxleSA8Ynlyb24uYmJyYWRsZXlAZ21haWwuY29tPiAqLworCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBxbmFwX3RzMjA5X2luaXQsCisJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKKwkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKaW5kZXggZGFhOGQzZC4uYTUyNjhjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC05NzYsNyArOTc1LDcgQEAKIAkJCQkoKmNsa3ApLT5zZXRfcGFyZW50KCgqY2xrcCksICgqY2xrcCktPnBhcmVudCk7CiAJCX0KIAkJcHJfZGVidWcoIiVzOiBjbG9jayAlcywgcmF0ZSAlbGRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sICgqY2xrcCktPm5hbWUsICgqY2xrcCktPnJhdGUpOworCQkJX19mdW5jX18sICgqY2xrcCktPm5hbWUsICgqY2xrcCktPnJhdGUpOwogCX0KIAogCWxvY2FsX2Nsa191c2UoJmNrX3BsbDQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jCmluZGV4IGY3MDA5ZDguLmZlMTUyZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWlmICghZG1hX2NoYW5uZWxzW2NoXS5uYW1lKSB7CiAJCXByaW50ayhLRVJOX0NSSVQKIAkJICAgICAgICIlczogdHJ5aW5nIHRvIGZyZWUgY2hhbm5lbCAlZCB3aGljaCBpcyBhbHJlYWR5IGZyZWVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBjaCk7CisJCSAgICAgICBfX2Z1bmNfXywgY2gpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2dwaW8uYwppbmRleCAxYWI4NGNlLi5lZjE3OWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9ncGlvLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IDA5MDhiZWEuLjVkYTdhNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtMjMsNiArMjMsMTIgQEAKIGNob2ljZQogCXByb21wdCAiU2VsZWN0IHRhcmdldCBib2FyZCIKIAorY29uZmlnIEFSQ0hfR1VNU1RJWAorCWJvb2wgIkd1bXN0aXggWFNjYWxlIGJvYXJkcyIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEKKwkgIEd1bXN0aXggRnVsbCBGdW5jdGlvbiBNaW5hdHVyZSBDb21wdXRlci4KKwogY29uZmlnIEFSQ0hfTFVCQk9DSwogCWJvb2wgIkludGVsIERCUFhBMjUwIERldmVsb3BtZW50IFBsYXRmb3JtIgogCXNlbGVjdCBQWEEyNXgKQEAgLTE2MCw2ICsxNjYsMjAgQEAKIAogZW5kaWYKIAoraWYgQVJDSF9HVU1TVElYCisKK2Nob2ljZQorCXByb21wdCAiU2VsZWN0IHRhcmdldCBHdW1zdGl4IGJvYXJkIgorCitjb25maWcgTUFDSF9HVU1TVElYX0YKKwlib29sICJCYXNpeCwgQ29ubmV4LCB3cy0yMDBheCwgd3MtNDAwYXggc3lzdGVtcyIKKwlzZWxlY3QgUFhBMjV4CisKK2VuZGNob2ljZQorCitlbmRpZgorCisKIGlmIE1BQ0hfVFJJWkVQUzQKIAogY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IDZlMGM0ZjUuLjdjZGNiNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC01LDEzICs1LDE0IEBACiAjIENvbW1vbiBzdXBwb3J0IChtdXN0IGJlIGxpbmtlZCBiZWZvcmUgYm9hcmQgc3BlY2lmaWMgc3VwcG9ydCkKIG9iai15CQkJCSs9IGNsb2NrLm8gZGV2aWNlcy5vIGdlbmVyaWMubyBpcnEubyBkbWEubyBcCiAJCQkJICAgdGltZS5vIGdwaW8ubwotb2JqLSQoQ09ORklHX1BYQTI1eCkJCSs9IHB4YTI1eC5vCi1vYmotJChDT05GSUdfUFhBMjd4KQkJKz0gcHhhMjd4Lm8KLW9iai0kKENPTkZJR19QWEEzeHgpCQkrPSBweGEzeHgubyBtZnAubyBzbWVtYy5vCitvYmotJChDT05GSUdfUFhBMjV4KQkJKz0gcHhhMjV4Lm8gbWZwLXB4YTJ4eC5vCitvYmotJChDT05GSUdfUFhBMjd4KQkJKz0gcHhhMjd4Lm8gbWZwLXB4YTJ4eC5vCitvYmotJChDT05GSUdfUFhBM3h4KQkJKz0gcHhhM3h4Lm8gbWZwLXB4YTN4eC5vIHNtZW1jLm8KIG9iai0kKENPTkZJR19DUFVfUFhBMzAwKQkrPSBweGEzMDAubwogb2JqLSQoQ09ORklHX0NQVV9QWEEzMjApCSs9IHB4YTMyMC5vCiAKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAorb2JqLSQoQ09ORklHX0FSQ0hfR1VNU1RJWCkJKz0gZ3Vtc3RpeC5vCiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKSArPSBscGQyNzAubwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkrPSBtYWluc3RvbmUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKaW5kZXggODNlZjVlYy4uZTk3ZGM1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTIzLDE4ICsyNCwyNyBAQAogc3RhdGljIERFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja3NfbG9jayk7CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfbG9va3VwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkKKwkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiBwLT5kZXYgPT0gZGV2KQorCQkJcmV0dXJuIHA7CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewogCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwogCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJgotCQkgICAgKHAtPmRldiA9PSBOVUxMIHx8IHAtPmRldiA9PSBkZXYpKSB7Ci0JCQljbGsgPSBwOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJcCA9IGNsa19sb29rdXAoZGV2LCBpZCk7CisJaWYgKCFwKQorCQlwID0gY2xrX2xvb2t1cChOVUxMLCBpZCk7CisJaWYgKHApCisJCWNsayA9IHA7CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwogCiAJcmV0dXJuIGNsazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAtcGNpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLXBjaS5jCmluZGV4IDE1YzRlMGQuLmFjN2YwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC1wY2kuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NtLXgyNzAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pdDgxNTIuaD4KQEAgLTEwNCw3ICsxMDUsNyBAQAogewogCWludCBpcnE7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzbG90PSV4LCBwaW49JXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdCwgcGluKTsKKwlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzbG90PSV4LCBwaW49JXhcbiIsIF9fZnVuY19fLCBzbG90LCBwaW4pOwogCiAJaXJxID0gaXQ4MTUyX3BjaV9tYXBfaXJxKGRldiwgc2xvdCwgcGluKTsKIAlpZiAoaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCmluZGV4IDYwMTIxNzcuLjZkNDQxNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvb2hjaS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgpAQCAtNTA0LDExICs1MDUsMTEgQEAKIAlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAogCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9uXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9uXG4iLCBfX2Z1bmNfXyk7CiAJCUdQQ1IoMTA1KSA9IEdQSU9fYml0KDEwNSk7CiAJfSBlbHNlIHsKIAkJR1BTUigxMDUpID0gR1BJT19iaXQoMTA1KTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvZmZcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmXG4iLCBfX2Z1bmNfXyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMKaW5kZXggNmRiNTRlMy4uNDNiZjVhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmkuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbGlicmkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IDkyOTI1NzYuLjI1OWNhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jCmluZGV4IDM5MmMzODcuLjBhODVmNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfcG0uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb3JnaS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlICJzaGFycHNsLmgiCiAKICNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVk9MVCAgICAgICAgIDB4OTkgIC8qIDIuOVYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKaW5kZXggMzE3MDYyMi4uZWNjYzQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3NzcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNzcC5oPgogI2luY2x1ZGUgInNoYXJwc2wuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1LXB4YS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1LXB4YS5jCmluZGV4IGNiYzU4M2IuLjRiMjE0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdS1weGEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHUtcHhhLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAogI2lmZGVmIERFQlVHCiBzdGF0aWMgdW5zaWduZWQgaW50IGZyZXFfZGVidWc7Ci1NT0RVTEVfUEFSTShmcmVxX2RlYnVnLCAiaSIpOworbW9kdWxlX3BhcmFtKGZyZXFfZGVidWcsIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmcmVxX2RlYnVnLCAiU2V0IHRoZSBkZWJ1ZyBtZXNzYWdlcyB0byBvbj0xL29mZj0wIik7CiAjZWxzZQogI2RlZmluZSBmcmVxX2RlYnVnICAwCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnB4YV9mcmVxc190YWJsZTsKIAlweGFfZnJlcXNfdCAqcHhhX2ZyZXFfc2V0dGluZ3M7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7Ci0JaW50IGlkeDsKKwl1bnNpZ25lZCBpbnQgaWR4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHVudXNlZCwgcHJlc2V0X21kcmVmciwgcG9zdHNldF9tZHJlZnI7CiAJdm9pZCAqcmFtc3RhcnQgPSBwaHlzX3RvX3ZpcnQoMHhhMDAwMDAwMCk7CkBAIC0yMzMsNiArMjMzLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHhhX2NwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIGdldF9jbGtfZnJlcXVlbmN5X2toeigwKTsKK30KKwogc3RhdGljIGludCBweGFfY3B1ZnJlcV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCWludCBpOwpAQCAtMjY5LDYgKzI3NCw3IEBACiAJLnZlcmlmeQk9IHB4YV92ZXJpZnlfcG9saWN5LAogCS50YXJnZXQJPSBweGFfc2V0X3RhcmdldCwKIAkuaW5pdAk9IHB4YV9jcHVmcmVxX2luaXQsCisJLmdldAk9IHB4YV9jcHVmcmVxX2dldCwKIAkubmFtZQk9ICJQWEEyNXgiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IGJmY2NiODAuLmQ2YzA1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlIDxhc20vYXJjaC9pcmRhLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaTJjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvb2hjaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTI3eF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jYW1lcmEuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKIApAQCAtMzk2LDYgKzM5OCwzMSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhMjd4X3Jlc291cmNlX2tleXBhZFtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg0MTUwMDAwMCwKKwkJLmVuZAk9IDB4NDE1MDAwNGMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfS0VZUEFELAorCQkuZW5kCT0gSVJRX0tFWVBBRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9rZXlwYWQgPSB7CisJLm5hbWUJCT0gInB4YTI3eC1rZXlwYWQiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBweGEyN3hfcmVzb3VyY2Vfa2V5cGFkLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShweGEyN3hfcmVzb3VyY2Vfa2V5cGFkKSwKK307CisKK3ZvaWQgX19pbml0IHB4YV9zZXRfa2V5cGFkX2luZm8oc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqaW5mbykKK3sKKwlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEyN3hfZGV2aWNlX2tleXBhZCwgaW5mbyk7Cit9CisKIHN0YXRpYyB1NjQgcHhhMjd4X29oY2lfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTI3eF9yZXNvdXJjZV9vaGNpW10gPSB7CkBAIC01NDAsNiArNTY3LDM3IEBACiAJLnJlc291cmNlCT0gcHhhMjd4X3Jlc291cmNlX3NzcDMsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTI3eF9yZXNvdXJjZV9zc3AzKSwKIH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhMjd4X3Jlc291cmNlX2NhbWVyYVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg1MDAwMDAwMCwKKwkJLmVuZAk9IDB4NTAwMDBmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfQ0FNRVJBLAorCQkuZW5kCT0gSVJRX0NBTUVSQSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgcHhhMjd4X2RtYV9tYXNrX2NhbWVyYSA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTI3eF9kZXZpY2VfY2FtZXJhID0geworCS5uYW1lCQk9ICJweGEyN3gtY2FtZXJhIiwKKwkuaWQJCT0gMCwgLyogVGhpcyBpcyB1c2VkIHRvIHB1dCBjYW1lcmFzIG9uIHRoaXMgaW50ZXJmYWNlICovCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayAgICAgIAkJPSAmcHhhMjd4X2RtYV9tYXNrX2NhbWVyYSwKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShweGEyN3hfcmVzb3VyY2VfY2FtZXJhKSwKKwkucmVzb3VyY2UJPSBweGEyN3hfcmVzb3VyY2VfY2FtZXJhLAorfTsKKwordm9pZCBfX2luaXQgcHhhX3NldF9jYW1lcmFfaW5mbyhzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgKmluZm8pCit7CisJcHhhX3JlZ2lzdGVyX2RldmljZSgmcHhhMjd4X2RldmljZV9jYW1lcmEsIGluZm8pOworfQogI2VuZGlmIC8qIENPTkZJR19QWEEyN3ggfHwgQ09ORklHX1BYQTN4eCAqLwogCiAjaWZkZWYgQ09ORklHX1BYQTN4eApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oCmluZGV4IDk2YzdjODkuLmZjYWIwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9pMmNfcG93ZXI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEyN3hfZGV2aWNlX29oY2k7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEyN3hfZGV2aWNlX2tleXBhZDsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjV4X2RldmljZV9zc3A7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEyNXhfZGV2aWNlX25zc3A7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCmluZGV4IDkzYzRmMzEuLjMyMTUzMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCkBAIC04MSw3ICs4MSw3IEBACiAJaWYgKCFkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lKSB7CiAJCXByaW50ayAoS0VSTl9DUklUCiAJCQkiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZG1hX2NoKTsKKwkJCV9fZnVuY19fLCBkbWFfY2gpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKaW5kZXggM2QwYWQ1MC4uZWRjNGYwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KQEAgLTI2NCw3ICsyNjUsNyBAQAogCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlE6ICVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBlcnIpOworCQkgICAgICAgX19mdW5jX18sIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKaW5kZXggODA3MjFjNi4uMzMxZjI5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYwpAQCAtMTksMTQgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMTM0LDU5ICsxMjgsMyBAQAogCWlvdGFibGVfaW5pdChzdGFuZGFyZF9pb19kZXNjLCBBUlJBWV9TSVpFKHN0YW5kYXJkX2lvX2Rlc2MpKTsKIAlnZXRfY2xrX2ZyZXF1ZW5jeV9raHooMSk7CiB9Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ3Bscls0XTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2dwZHJbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9ncmVyWzRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ2Zlcls0XTsKLQotc3RhdGljIGludCBweGFfZ3Bpb19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlpbnQgaSwgZ3BpbzsKLQotCWZvciAoZ3BpbyA9IDAsIGkgPSAwOyBncGlvIDwgcHhhX2xhc3RfZ3BpbzsgZ3BpbyArPSAzMiwgaSsrKSB7Ci0JCXNhdmVkX2dwbHJbaV0gPSBHUExSKGdwaW8pOwotCQlzYXZlZF9ncGRyW2ldID0gR1BEUihncGlvKTsKLQkJc2F2ZWRfZ3JlcltpXSA9IEdSRVIoZ3Bpbyk7Ci0JCXNhdmVkX2dmZXJbaV0gPSBHRkVSKGdwaW8pOwotCi0JCS8qIENsZWFyIEdQSU8gdHJhbnNpdGlvbiBkZXRlY3QgYml0cyAqLwotCQlHRURSKGdwaW8pID0gR0VEUihncGlvKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHhhX2dwaW9fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JaW50IGksIGdwaW87Ci0KLQlmb3IgKGdwaW8gPSAwLCBpID0gMDsgZ3BpbyA8IHB4YV9sYXN0X2dwaW87IGdwaW8gKz0gMzIsIGkrKykgewotCQkvKiByZXN0b3JlIGxldmVsIHdpdGggc2V0L2NsZWFyICovCi0JCUdQU1IoZ3BpbykgPSBzYXZlZF9ncGxyW2ldOwotCQlHUENSKGdwaW8pID0gfnNhdmVkX2dwbHJbaV07Ci0KLQkJR1JFUihncGlvKSA9IHNhdmVkX2dyZXJbaV07Ci0JCUdGRVIoZ3BpbykgPSBzYXZlZF9nZmVyW2ldOwotCQlHUERSKGdwaW8pID0gc2F2ZWRfZ3BkcltpXTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotI2RlZmluZSBweGFfZ3Bpb19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhX2dwaW9fcmVzdW1lCQlOVUxMCi0jZW5kaWYKLQotc3RydWN0IHN5c2Rldl9jbGFzcyBweGFfZ3Bpb19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAiZ3BpbyIsCi0JLnN1c3BlbmQJPSBweGFfZ3Bpb19zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhX2dwaW9fcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcHhhX2dwaW9faW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnB4YV9ncGlvX3N5c2NsYXNzKTsKLX0KLQotY29yZV9pbml0Y2FsbChweGFfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaAppbmRleCBiM2QxMGIwLi41YmI3YWU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCkBAIC05LDE0ICs5LDEzIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCit0eXBlZGVmIGludCAoKnNldF93YWtlX3QpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKKwogc3RydWN0IHN5c190aW1lcjsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhX3RpbWVyOwotZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9pbml0X2lycV9sb3codm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhX2luaXRfaXJxX2hpZ2godm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhX2luaXRfaXJxX2dwaW8oaW50IGdwaW9fbnIpOwotZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9pbml0X2lycV9zZXRfd2FrZShpbnQgKCpzZXRfd2FrZSkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpKTsKLWV4dGVybiB2b2lkIF9faW5pdCBweGFfaW5pdF9ncGlvKGludCBncGlvX25yKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfaW5pdF9pcnEoaW50IGlycV9uciwgc2V0X3dha2VfdCBmbik7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhX2luaXRfZ3BpbyhpbnQgZ3Bpb19uciwgc2V0X3dha2VfdCBmbik7CiBleHRlcm4gdm9pZCBfX2luaXQgcHhhMjV4X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHB4YTI3eF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBweGEzeHhfaW5pdF9pcnEodm9pZCk7CkBAIC0zMCw2ICsyOSw4IEBACiAJbWktPmJhbmtbX19ucl0uc2l6ZSA9IChfX3NpemUpLCBcCiAJbWktPmJhbmtbX19ucl0ubm9kZSA9ICgoKHVuc2lnbmVkKShfX3N0YXJ0KSAtIFBIWVNfT0ZGU0VUKSA+PiAyNykKIAorI2RlZmluZSBBUlJBWV9BTkRfU0laRSh4KQkoeCksIEFSUkFZX1NJWkUoeCkKKwogI2lmZGVmIENPTkZJR19QWEEyNXgKIGV4dGVybiB1bnNpZ25lZCBweGEyNXhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7CiBleHRlcm4gdW5zaWduZWQgcHhhMjV4X2dldF9tZW1jbGtfZnJlcXVlbmN5XzEwa2h6KHZvaWQpOwpAQCAtNTYsMyArNTcsNCBAQAogCiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGFfaXJxX3N5c2NsYXNzOwogZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhX2dwaW9fc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGEzeHhfbWZwX3N5c2NsYXNzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jCmluZGV4IDg2MzhkZDcuLjdkM2UxNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9ncGlvLmMKQEAgLTE0LDExICsxNCwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTEyOSw2OSArMTMyLDI4MyBAQAogCQlfX3Jhd193cml0ZWwobWFzaywgcHhhLT5yZWdiYXNlICsgR1BDUl9PRkZTRVQpOwogfQogCisjZGVmaW5lIEdQSU9fQ0hJUChfbikJCQkJCQkJXAorCVtfbl0gPSB7CQkJCQkJCVwKKwkJLnJlZ2Jhc2UgPSBHUElPIyNfbiMjX0JBU0UsCQkJCVwKKwkJLmNoaXAgPSB7CQkJCQkJXAorCQkJLmxhYmVsCQkgID0gImdwaW8tIiAjX24sCQlcCisJCQkuZGlyZWN0aW9uX2lucHV0ICA9IHB4YV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwJXAorCQkJLmRpcmVjdGlvbl9vdXRwdXQgPSBweGFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAlcCisJCQkuZ2V0CQkgID0gcHhhX2dwaW9fZ2V0LAkJXAorCQkJLnNldAkJICA9IHB4YV9ncGlvX3NldCwJCVwKKwkJCS5iYXNlCQkgID0gKF9uKSAqIDMyLAkJCVwKKwkJCS5uZ3BpbwkJICA9IDMyLAkJCQlcCisJCX0sCQkJCQkJCVwKKwl9CisKIHN0YXRpYyBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCBweGFfZ3Bpb19jaGlwW10gPSB7Ci0JWzBdID0gewotCQkucmVnYmFzZSA9IEdQSU8wX0JBU0UsCi0JCS5jaGlwID0gewotCQkJLmxhYmVsICAgICAgICAgICAgPSAiZ3Bpby0wIiwKLQkJCS5kaXJlY3Rpb25faW5wdXQgID0gcHhhX2dwaW9fZGlyZWN0aW9uX2lucHV0LAotCQkJLmRpcmVjdGlvbl9vdXRwdXQgPSBweGFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAotCQkJLmdldCAgICAgICAgICAgICAgPSBweGFfZ3Bpb19nZXQsCi0JCQkuc2V0ICAgICAgICAgICAgICA9IHB4YV9ncGlvX3NldCwKLQkJCS5iYXNlICAgICAgICAgICAgID0gMCwKLQkJCS5uZ3BpbyAgICAgICAgICAgID0gMzIsCi0JCX0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5yZWdiYXNlID0gR1BJTzFfQkFTRSwKLQkJLmNoaXAgPSB7Ci0JCQkubGFiZWwgICAgICAgICAgICA9ICJncGlvLTEiLAotCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBweGFfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCi0JCQkuZGlyZWN0aW9uX291dHB1dCA9IHB4YV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCi0JCQkuZ2V0ICAgICAgICAgICAgICA9IHB4YV9ncGlvX2dldCwKLQkJCS5zZXQgICAgICAgICAgICAgID0gcHhhX2dwaW9fc2V0LAotCQkJLmJhc2UgICAgICAgICAgICAgPSAzMiwKLQkJCS5uZ3BpbyAgICAgICAgICAgID0gMzIsCi0JCX0sCi0JfSwKLQlbMl0gPSB7Ci0JCS5yZWdiYXNlID0gR1BJTzJfQkFTRSwKLQkJLmNoaXAgPSB7Ci0JCQkubGFiZWwgICAgICAgICAgICA9ICJncGlvLTIiLAotCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBweGFfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCi0JCQkuZGlyZWN0aW9uX291dHB1dCA9IHB4YV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCi0JCQkuZ2V0ICAgICAgICAgICAgICA9IHB4YV9ncGlvX2dldCwKLQkJCS5zZXQgICAgICAgICAgICAgID0gcHhhX2dwaW9fc2V0LAotCQkJLmJhc2UgICAgICAgICAgICAgPSA2NCwKLQkJCS5uZ3BpbyAgICAgICAgICAgID0gMzIsIC8qIDIxIGZvciBQWEEyNXggKi8KLQkJfSwKLQl9LAorCUdQSU9fQ0hJUCgwKSwKKwlHUElPX0NISVAoMSksCisJR1BJT19DSElQKDIpLAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBM3h4KQotCVszXSA9IHsKLQkJLnJlZ2Jhc2UgPSBHUElPM19CQVNFLAotCQkuY2hpcCA9IHsKLQkJCS5sYWJlbCAgICAgICAgICAgID0gImdwaW8tMyIsCi0JCQkuZGlyZWN0aW9uX2lucHV0ICA9IHB4YV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwKLQkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gcHhhX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKLQkJCS5nZXQgICAgICAgICAgICAgID0gcHhhX2dwaW9fZ2V0LAotCQkJLnNldCAgICAgICAgICAgICAgPSBweGFfZ3Bpb19zZXQsCi0JCQkuYmFzZSAgICAgICAgICAgICA9IDk2LAotCQkJLm5ncGlvICAgICAgICAgICAgPSAzMiwKLQkJfSwKLQl9LAorCUdQSU9fQ0hJUCgzKSwKICNlbmRpZgogfTsKIAotdm9pZCBfX2luaXQgcHhhX2luaXRfZ3BpbyhpbnQgZ3Bpb19ucikKKy8qCisgKiBQWEEgR1BJTyBlZGdlIGRldGVjdGlvbiBmb3IgSVJRczoKKyAqIElSUXMgYXJlIGdlbmVyYXRlZCBvbiBGYWxsaW5nLUVkZ2UsIFJpc2luZy1FZGdlLCBvciBib3RoLgorICogVXNlIHRoaXMgaW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIEdSRVIvR0ZFUi4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBHUElPX0lSUV9yaXNpbmdfZWRnZVs0XTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVs0XTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEdQSU9fSVJRX21hc2tbNF07CisKKy8qCisgKiBPbiBQWEEyNXggYW5kIFBYQTI3eCwgR0FGUnggYW5kIEdQRFJ4IHRvZ2V0aGVyIGRlY2lkZSB0aGUgYWx0ZXJuYXRlCisgKiBmdW5jdGlvbiBvZiBhIEdQSU8sIGFuZCBHUERSeCBjYW5ub3QgYmUgYWx0ZXJlZCBvbmNlIGNvbmZpZ3VyZWQuIEl0CisgKiBpcyBhdHRyaWJ1dGVkIGFzICJvY2N1cGllZCIgaGVyZSAoSSBrbm93IHRoaXMgdGVybWlub2xvZ3kgaXNuJ3QKKyAqIGFjY3VyYXRlLCB5b3UgYXJlIHdlbGNvbWUgdG8gcHJvcG9zZSBhIGJldHRlciBvbmUgOi0pCisgKi8KK3N0YXRpYyBpbnQgX19ncGlvX2lzX29jY3VwaWVkKHVuc2lnbmVkIGdwaW8pCiB7Ci0JaW50IGk7CisJaWYgKGNwdV9pc19weGEyNXgoKSB8fCBjcHVfaXNfcHhhMjd4KCkpCisJCXJldHVybiBHQUZSKGdwaW8pICYgKDB4MyA8PCAoKChncGlvKSAmIDB4ZikgKiAyKSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGFfZ3Bpb19pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlpbnQgZ3BpbywgaWR4OworCisJZ3BpbyA9IElSUV9UT19HUElPKGlycSk7CisJaWR4ID0gZ3BpbyA+PiA1OworCisJaWYgKHR5cGUgPT0gSVJRX1RZUEVfUFJPQkUpIHsKKwkJLyogRG9uJ3QgbWVzcyB3aXRoIGVuYWJsZWQgR1BJT3MgdXNpbmcgcHJlY29uZmlndXJlZCBlZGdlcyBvcgorCQkgKiBHUElPcyBzZXQgdG8gYWx0ZXJuYXRlIGZ1bmN0aW9uIG9yIHRvIG91dHB1dCBkdXJpbmcgcHJvYmUKKwkJICovCisJCWlmICgoR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSB8CisJCSAgICAgR1BJT19JUlFfZmFsbGluZ19lZGdlW2lkeF0gfAorCQkgICAgIEdQRFIoZ3BpbykpICYgR1BJT19iaXQoZ3BpbykpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoX19ncGlvX2lzX29jY3VwaWVkKGdwaW8pKQorCQkJcmV0dXJuIDA7CisKKwkJdHlwZSA9IElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HOworCX0KKworCUdQRFIoZ3BpbykgJj0gfkdQSU9fYml0KGdwaW8pOworCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJX19zZXRfYml0KGdwaW8sIEdQSU9fSVJRX3Jpc2luZ19lZGdlKTsKKwllbHNlCisJCV9fY2xlYXJfYml0KGdwaW8sIEdQSU9fSVJRX3Jpc2luZ19lZGdlKTsKKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQorCQlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfZmFsbGluZ19lZGdlKTsKKwllbHNlCisJCV9fY2xlYXJfYml0KGdwaW8sIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSk7CisKKwlHUkVSKGdwaW8pID0gR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSAmIEdQSU9fSVJRX21hc2tbaWR4XTsKKwlHRkVSKGdwaW8pID0gR1BJT19JUlFfZmFsbGluZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07CisKKwlwcl9kZWJ1ZygiJXM6IElSUSVkIChHUElPJWQpIC0gZWRnZSVzJXNcbiIsIF9fZnVuY19fLCBpcnEsIGdwaW8sCisJCSgodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKSAgPyAiIHJpc2luZyIgIDogIiIpLAorCQkoKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpID8gIiBmYWxsaW5nIiA6ICIiKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHUElPIElSUXMgbXVzdCBiZSBhY2tub3dsZWRnZWQuICBUaGlzIGlzIGZvciBHUElPIDAgYW5kIDEuCisgKi8KKworc3RhdGljIHZvaWQgcHhhX2Fja19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCUdFRFIwID0gKDEgPDwgKGlycSAtIElSUV9HUElPMCkpOworfQorCitzdGF0aWMgdm9pZCBweGFfbWFza19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCUlDTVIgJj0gfigxIDw8IChpcnEgLSBQWEFfSVJRKDApKSk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV91bm1hc2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlJQ01SIHw9IDEgPDwgKGlycSAtIFBYQV9JUlEoMCkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9sb3dfZ3Bpb19jaGlwID0geworCS5uYW1lCQk9ICJHUElPLWwiLAorCS5hY2sJCT0gcHhhX2Fja19sb3dfZ3BpbywKKwkubWFzawkJPSBweGFfbWFza19sb3dfZ3BpbywKKwkudW5tYXNrCQk9IHB4YV91bm1hc2tfbG93X2dwaW8sCisJLnNldF90eXBlCT0gcHhhX2dwaW9faXJxX3R5cGUsCit9OworCisvKgorICogRGVtdXggaGFuZGxlciBmb3IgR1BJTz49MiBlZGdlIGRldGVjdCBpbnRlcnJ1cHRzCisgKi8KKworI2RlZmluZSBHRURSX0JJVFMJKHNpemVvZihnZWRyKSAqIEJJVFNfUEVSX0JZVEUpCisKK3N0YXRpYyB2b2lkIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWludCBsb29wLCBiaXQsIG47CisJdW5zaWduZWQgbG9uZyBnZWRyWzRdOworCisJZG8geworCQlnZWRyWzBdID0gR0VEUjAgJiBHUElPX0lSUV9tYXNrWzBdICYgfjM7CisJCWdlZHJbMV0gPSBHRURSMSAmIEdQSU9fSVJRX21hc2tbMV07CisJCWdlZHJbMl0gPSBHRURSMiAmIEdQSU9fSVJRX21hc2tbMl07CisJCWdlZHJbM10gPSBHRURSMyAmIEdQSU9fSVJRX21hc2tbM107CisKKwkJR0VEUjAgPSBnZWRyWzBdOyBHRURSMSA9IGdlZHJbMV07CisJCUdFRFIyID0gZ2VkclsyXTsgR0VEUjMgPSBnZWRyWzNdOworCisJCWxvb3AgPSAwOworCQliaXQgPSBmaW5kX2ZpcnN0X2JpdChnZWRyLCBHRURSX0JJVFMpOworCQl3aGlsZSAoYml0IDwgR0VEUl9CSVRTKSB7CisJCQlsb29wID0gMTsKKworCQkJbiA9IFBYQV9HUElPX0lSUV9CQVNFICsgYml0OworCQkJZGVzY19oYW5kbGVfaXJxKG4sIGlycV9kZXNjICsgbik7CisKKwkJCWJpdCA9IGZpbmRfbmV4dF9iaXQoZ2VkciwgR0VEUl9CSVRTLCBiaXQgKyAxKTsKKwkJfQorCX0gd2hpbGUgKGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBweGFfYWNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKKwlHRURSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9tYXNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKKwlfX2NsZWFyX2JpdChncGlvLCBHUElPX0lSUV9tYXNrKTsKKwlHUkVSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKKwlHRkVSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKK30KKworc3RhdGljIHZvaWQgcHhhX3VubWFza19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW8gPSBpcnEgLSBJUlFfR1BJTygyKSArIDI7CisJaW50IGlkeCA9IGdwaW8gPj4gNTsKKwlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfbWFzayk7CisJR1JFUihncGlvKSA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07CisJR0ZFUihncGlvKSA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9tdXhlZF9ncGlvX2NoaXAgPSB7CisJLm5hbWUJCT0gIkdQSU8iLAorCS5hY2sJCT0gcHhhX2Fja19tdXhlZF9ncGlvLAorCS5tYXNrCQk9IHB4YV9tYXNrX211eGVkX2dwaW8sCisJLnVubWFzawkJPSBweGFfdW5tYXNrX211eGVkX2dwaW8sCisJLnNldF90eXBlCT0gcHhhX2dwaW9faXJxX3R5cGUsCit9OworCit2b2lkIF9faW5pdCBweGFfaW5pdF9ncGlvKGludCBncGlvX25yLCBzZXRfd2FrZV90IGZuKQoreworCWludCBpcnEsIGksIGdwaW87CisKKwlweGFfbGFzdF9ncGlvID0gZ3Bpb19uciAtIDE7CisKKwkvKiBjbGVhciBhbGwgR1BJTyBlZGdlIGRldGVjdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19ucjsgaSArPSAzMikgeworCQlHRkVSKGkpID0gMDsKKwkJR1JFUihpKSA9IDA7CisJCUdFRFIoaSkgPSBHRURSKGkpOworCX0KKworCS8qIEdQSU8gMCBhbmQgMSBtdXN0IGhhdmUgdGhlaXIgbWFzayBiaXQgYWx3YXlzIHNldCAqLworCUdQSU9fSVJRX21hc2tbMF0gPSAzOworCisJZm9yIChpcnEgPSBJUlFfR1BJTzA7IGlycSA8PSBJUlFfR1BJTzE7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZweGFfbG93X2dwaW9fY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJZm9yIChpcnEgPSBJUlFfR1BJTygyKTsgaXJxIDwgSVJRX0dQSU8oZ3Bpb19ucik7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZweGFfbXV4ZWRfZ3Bpb19jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cyAqLworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPXzJfeCwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7CisKKwlweGFfbG93X2dwaW9fY2hpcC5zZXRfd2FrZSA9IGZuOworCXB4YV9tdXhlZF9ncGlvX2NoaXAuc2V0X3dha2UgPSBmbjsKIAogCS8qIGFkZCBhIEdQSU8gY2hpcCBmb3IgZWFjaCByZWdpc3RlciBiYW5rLgogCSAqIHRoZSBsYXN0IFBYQTI1eCByZWdpc3RlciBvbmx5IGNvbnRhaW5zIDIxIEdQSU9zCiAJICovCi0JZm9yIChpID0gMDsgaSA8IGdwaW9fbnI7IGkgKz0gMzIpIHsKLQkJaWYgKGkrMzIgPiBncGlvX25yKQotCQkJcHhhX2dwaW9fY2hpcFtpLzMyXS5jaGlwLm5ncGlvID0gZ3Bpb19uciAtIGk7Ci0JCWdwaW9jaGlwX2FkZCgmcHhhX2dwaW9fY2hpcFtpLzMyXS5jaGlwKTsKKwlmb3IgKGdwaW8gPSAwLCBpID0gMDsgZ3BpbyA8IGdwaW9fbnI7IGdwaW8gKz0gMzIsIGkrKykgeworCQlpZiAoZ3BpbyArIDMyID4gZ3Bpb19ucikKKwkJCXB4YV9ncGlvX2NoaXBbaV0uY2hpcC5uZ3BpbyA9IGdwaW9fbnIgLSBncGlvOworCQlncGlvY2hpcF9hZGQoJnB4YV9ncGlvX2NoaXBbaV0uY2hpcCk7CiAJfQogfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2dwbHJbNF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9ncGRyWzRdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ3Jlcls0XTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2dmZXJbNF07CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50IGksIGdwaW87CisKKwlmb3IgKGdwaW8gPSAwLCBpID0gMDsgZ3BpbyA8IHB4YV9sYXN0X2dwaW87IGdwaW8gKz0gMzIsIGkrKykgeworCQlzYXZlZF9ncGxyW2ldID0gR1BMUihncGlvKTsKKwkJc2F2ZWRfZ3BkcltpXSA9IEdQRFIoZ3Bpbyk7CisJCXNhdmVkX2dyZXJbaV0gPSBHUkVSKGdwaW8pOworCQlzYXZlZF9nZmVyW2ldID0gR0ZFUihncGlvKTsKKworCQkvKiBDbGVhciBHUElPIHRyYW5zaXRpb24gZGV0ZWN0IGJpdHMgKi8KKwkJR0VEUihncGlvKSA9IEdFRFIoZ3Bpbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YV9ncGlvX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCWludCBpLCBncGlvOworCisJZm9yIChncGlvID0gMCwgaSA9IDA7IGdwaW8gPCBweGFfbGFzdF9ncGlvOyBncGlvICs9IDMyLCBpKyspIHsKKwkJLyogcmVzdG9yZSBsZXZlbCB3aXRoIHNldC9jbGVhciAqLworCQlHUFNSKGdwaW8pID0gc2F2ZWRfZ3BscltpXTsKKwkJR1BDUihncGlvKSA9IH5zYXZlZF9ncGxyW2ldOworCisJCUdSRVIoZ3BpbykgPSBzYXZlZF9ncmVyW2ldOworCQlHRkVSKGdwaW8pID0gc2F2ZWRfZ2ZlcltpXTsKKwkJR1BEUihncGlvKSA9IHNhdmVkX2dwZHJbaV07CisJfQorCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgcHhhX2dwaW9fc3VzcGVuZAlOVUxMCisjZGVmaW5lIHB4YV9ncGlvX3Jlc3VtZQkJTlVMTAorI2VuZGlmCisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgcHhhX2dwaW9fc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gImdwaW8iLAorCS5zdXNwZW5kCT0gcHhhX2dwaW9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YV9ncGlvX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YV9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGFfZ3Bpb19zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwocHhhX2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxZDE4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIEd1bXN0aXggbW90aGVyYm9hcmRzLgorICoKKyAqICBPcmlnaW5hbCBBdXRob3I6CUNyYWlnIEh1Z2hlcworICogIENyZWF0ZWQ6CUZlYiAxNCwgMjAwOAorICogIENvcHlyaWdodDoJQ3JhaWcgSHVnaGVzCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgSW1wbGVtZW50ZWQgYmFzZWQgb24gbHViYm9jay5jIGJ5IE5pY29sYXMgUGl0cmUgYW5kIGNvZGUgZnJvbSBDcmFpZworICogIEh1Z2hlcworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ndW1zdGl4Lmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1yZWdzLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gMHgwMDAwMDAwMCwKKwkuZW5kCT0gU1pfNjRNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBndW1zdGl4X3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0JCSJCb290bG9hZGVyIiwKKwkJLnNpemUgPQkJMHgwMDA0MDAwMCwKKwkJLm9mZnNldCA9CTAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSAsIHsKKwkJLm5hbWUgPQkJInJvb3RmcyIsCisJCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPQlNVERQQVJUX09GU19BUFBFTkQKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgZ3Vtc3RpeF9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS5wYXJ0cwkJPSBndW1zdGl4X3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShndW1zdGl4X3BhcnRpdGlvbnMpLAorCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ3Vtc3RpeF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ3Vtc3RpeF9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmZ3Vtc3RpeF9mbGFzaF9kZXZpY2UsCit9OworCisjaWZkZWYgQ09ORklHX01NQ19QWEEKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZ3Vtc3RpeF9tY2lfcGxhdGZvcm1fZGF0YTsKKworc3RhdGljIGludCBndW1zdGl4X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaW50LAorCQkJCXZvaWQgKmRhdGEpCit7CisJcHhhX2dwaW9fbW9kZShHUElPNl9NTUNDTEtfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUzX01NQ0NMS19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPOF9NTUNDUzBfTUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZ3Vtc3RpeF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQJCT0gZ3Vtc3RpeF9tY2lfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBndW1zdGl4X21tY19pbml0KHZvaWQpCit7CisJcHhhX3NldF9tY2lfaW5mbygmZ3Vtc3RpeF9tY2lfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGd1bXN0aXhfbW1jX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJHdW1zdGl4IG1tYyBkaXNhYmxlZFxuIik7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWAorc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBndW1zdGl4X3VkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLmdwaW9fdmJ1cwkJPSBHUElPX0dVTVNUSVhfVVNCX0dQSU9uLAorCS5ncGlvX3B1bGx1cAkJPSBHUElPX0dVTVNUSVhfVVNCX0dQSU94LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGd1bXN0aXhfdWRjX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X3VkY19pbmZvKCZndW1zdGl4X3VkY19pbmZvKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBndW1zdGl4X3VkY19pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiR3Vtc3RpeCB1ZGMgaXMgZGlzYWJsZWRcbiIpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9faW5pdCBndW1zdGl4X2luaXQodm9pZCkKK3sKKwlndW1zdGl4X3VkY19pbml0KCk7CisJZ3Vtc3RpeF9tbWNfaW5pdCgpOworCSh2b2lkKSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChHVU1TVElYLCAiR3Vtc3RpeCIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsIC8qIG1hdGNoIHUtYm9vdCBiaV9ib290X3BhcmFtcyAqLworCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGd1bXN0aXhfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCmluZGV4IDBhOTQzNDQuLjI2Mzc2MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaWRwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9iaXRmaWVsZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCAzNmM2YTY4Li5hOWEwYzNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKICAqCi0gKiAgR2VuZXJpYyBQWEEgSVJRIGhhbmRsaW5nLCBHUElPIElSUSBkZW11bHRpcGxleGluZywgZXRjLgorICogIEdlbmVyaWMgUFhBIElSUSBoYW5kbGluZwogICoKICAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKICAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKQEAgLTIxLDMwOCArMjEsNTggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCisjZGVmaW5lIElSUV9CSVQobikJKCgobikgLSBQWEFfSVJRKDApKSAmIDB4MWYpCisjZGVmaW5lIF9JQ01SKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNNUjIgOiAmSUNNUikpCisjZGVmaW5lIF9JQ0xSKG4pCSgqKCgoKG4pIC0gUFhBX0lSUSgwKSkgJiB+MHgxZikgPyAmSUNMUjIgOiAmSUNMUikpCiAKIC8qCiAgKiBUaGlzIGlzIGZvciBwZXJpcGhlcmFsIElSUXMgaW50ZXJuYWwgdG8gdGhlIFBYQSBjaGlwLgogICovCiAKLXN0YXRpYyB2b2lkIHB4YV9tYXNrX2xvd19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyBpbnQgcHhhX2ludGVybmFsX2lycV9ucjsKKworc3RhdGljIHZvaWQgcHhhX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JSUNNUiAmPSB+KDEgPDwgaXJxKTsKKwlfSUNNUihpcnEpICY9IH4oMSA8PCBJUlFfQklUKGlycSkpOwogfQogCi1zdGF0aWMgdm9pZCBweGFfdW5tYXNrX2xvd19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHB4YV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JSUNNUiB8PSAoMSA8PCBpcnEpOworCV9JQ01SKGlycSkgfD0gMSA8PCBJUlFfQklUKGlycSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcHhhX2ludGVybmFsX2NoaXBfbG93ID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfaW50ZXJuYWxfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCT0gIlNDIiwKLQkuYWNrCQk9IHB4YV9tYXNrX2xvd19pcnEsCi0JLm1hc2sJCT0gcHhhX21hc2tfbG93X2lycSwKLQkudW5tYXNrCQk9IHB4YV91bm1hc2tfbG93X2lycSwKKwkuYWNrCQk9IHB4YV9tYXNrX2lycSwKKwkubWFzawkJPSBweGFfbWFza19pcnEsCisJLnVubWFzawkJPSBweGFfdW5tYXNrX2lycSwKIH07CiAKLXZvaWQgX19pbml0IHB4YV9pbml0X2lycV9sb3codm9pZCkKK3ZvaWQgX19pbml0IHB4YV9pbml0X2lycShpbnQgaXJxX25yLCBzZXRfd2FrZV90IGZuKQogewogCWludCBpcnE7CiAKLQkvKiBkaXNhYmxlIGFsbCBJUlFzICovCi0JSUNNUiA9IDA7CisJcHhhX2ludGVybmFsX2lycV9uciA9IGlycV9ucjsKIAotCS8qIGFsbCBJUlFzIGFyZSBJUlEsIG5vdCBGSVEgKi8KLQlJQ0xSID0gMDsKKwlmb3IgKGlycSA9IDA7IGlycSA8IGlycV9ucjsgaXJxICs9IDMyKSB7CisJCV9JQ01SKGlycSkgPSAwOwkvKiBkaXNhYmxlIGFsbCBJUlFzICovCisJCV9JQ0xSKGlycSkgPSAwOwkvKiBhbGwgSVJRcyBhcmUgSVJRLCBub3QgRklRICovCisJfQogCiAJLyogb25seSB1bm1hc2tlZCBpbnRlcnJ1cHRzIGtpY2sgdXMgb3V0IG9mIGlkbGUgKi8KIAlJQ0NSID0gMTsKIAotCWZvciAoaXJxID0gUFhBX0lSUSgwKTsgaXJxIDw9IFBYQV9JUlEoMzEpOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXAoaXJxLCAmcHhhX2ludGVybmFsX2NoaXBfbG93KTsKKwlmb3IgKGlycSA9IFBYQV9JUlEoMCk7IGlycSA8IFBYQV9JUlEoaXJxX25yKTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJnB4YV9pbnRlcm5hbF9pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CiAJfQotfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCi0KLS8qCi0gKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIHNldCBvZiBpbnRlcm5hbCBJUlFzIGFzIGZvdW5kIG9uIHRoZSBQWEEyN3guCi0gKi8KLQotc3RhdGljIHZvaWQgcHhhX21hc2tfaGlnaF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlJQ01SMiAmPSB+KDEgPDwgKGlycSAtIDMyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV91bm1hc2tfaGlnaF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlJQ01SMiB8PSAoMSA8PCAoaXJxIC0gMzIpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfaW50ZXJuYWxfY2hpcF9oaWdoID0gewotCS5uYW1lCQk9ICJTQy1oaSIsCi0JLmFjawkJPSBweGFfbWFza19oaWdoX2lycSwKLQkubWFzawkJPSBweGFfbWFza19oaWdoX2lycSwKLQkudW5tYXNrCQk9IHB4YV91bm1hc2tfaGlnaF9pcnEsCi19OwotCi12b2lkIF9faW5pdCBweGFfaW5pdF9pcnFfaGlnaCh2b2lkKQotewotCWludCBpcnE7Ci0KLQlJQ01SMiA9IDA7Ci0JSUNMUjIgPSAwOwotCi0JZm9yIChpcnEgPSBQWEFfSVJRKDMyKTsgaXJxIDwgUFhBX0lSUSg2NCk7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZweGFfaW50ZXJuYWxfY2hpcF9oaWdoKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKLQl9Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFBYQSBHUElPIGVkZ2UgZGV0ZWN0aW9uIGZvciBJUlFzOgotICogSVJRcyBhcmUgZ2VuZXJhdGVkIG9uIEZhbGxpbmctRWRnZSwgUmlzaW5nLUVkZ2UsIG9yIGJvdGguCi0gKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGRpcmVjdGx5IHNldHRpbmcgR1JFUi9HRkVSLgotICovCi0KLXN0YXRpYyBsb25nIEdQSU9fSVJRX3Jpc2luZ19lZGdlWzRdOwotc3RhdGljIGxvbmcgR1BJT19JUlFfZmFsbGluZ19lZGdlWzRdOwotc3RhdGljIGxvbmcgR1BJT19JUlFfbWFza1s0XTsKLQotc3RhdGljIGludCBweGFfZ3Bpb19pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlpbnQgZ3BpbywgaWR4OwotCi0JZ3BpbyA9IElSUV9UT19HUElPKGlycSk7Ci0JaWR4ID0gZ3BpbyA+PiA1OwotCi0JaWYgKHR5cGUgPT0gSVJRVF9QUk9CRSkgewotCSAgICAvKiBEb24ndCBtZXNzIHdpdGggZW5hYmxlZCBHUElPcyB1c2luZyBwcmVjb25maWd1cmVkIGVkZ2VzIG9yCi0JICAgICAgIEdQSU9zIHNldCB0byBhbHRlcm5hdGUgZnVuY3Rpb24gb3IgdG8gb3V0cHV0IGR1cmluZyBwcm9iZSAqLwotCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gfCBHUElPX0lSUV9mYWxsaW5nX2VkZ2VbaWR4XSB8IEdQRFIoZ3BpbykpICYKLQkJICAgIEdQSU9fYml0KGdwaW8pKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChHQUZSKGdwaW8pICYgKDB4MyA8PCAoKChncGlvKSAmIDB4ZikqMikpKQotCQkJcmV0dXJuIDA7Ci0JCXR5cGUgPSBfX0lSUVRfUklTRURHRSB8IF9fSVJRVF9GQUxFREdFOwotCX0KLQotCS8qIHByaW50ayhLRVJOX0RFQlVHICJJUlElZCAoR1BJTyVkKTogIiwgaXJxLCBncGlvKTsgKi8KLQotCXB4YV9ncGlvX21vZGUoZ3BpbyB8IEdQSU9fSU4pOwotCi0JaWYgKHR5cGUgJiBfX0lSUVRfUklTRURHRSkgewotCQkvKiBwcmludGsoInJpc2luZyAiKTsgKi8KLQkJX19zZXRfYml0IChncGlvLCBHUElPX0lSUV9yaXNpbmdfZWRnZSk7Ci0JfSBlbHNlIHsKLQkJX19jbGVhcl9iaXQgKGdwaW8sIEdQSU9fSVJRX3Jpc2luZ19lZGdlKTsKLQl9Ci0KLQlpZiAodHlwZSAmIF9fSVJRVF9GQUxFREdFKSB7Ci0JCS8qIHByaW50aygiZmFsbGluZyAiKTsgKi8KLQkJX19zZXRfYml0IChncGlvLCBHUElPX0lSUV9mYWxsaW5nX2VkZ2UpOwotCX0gZWxzZSB7Ci0JCV9fY2xlYXJfYml0IChncGlvLCBHUElPX0lSUV9mYWxsaW5nX2VkZ2UpOwotCX0KLQotCS8qIHByaW50aygiZWRnZXNcbiIpOyAqLwotCi0JR1JFUihncGlvKSA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07Ci0JR0ZFUihncGlvKSA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOwotCXJldHVybiAwOwotfQotCi0vKgotICogR1BJTyBJUlFzIG11c3QgYmUgYWNrbm93bGVkZ2VkLiAgVGhpcyBpcyBmb3IgR1BJTyAwIGFuZCAxLgotICovCi0KLXN0YXRpYyB2b2lkIHB4YV9hY2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKLXsKLQlHRURSMCA9ICgxIDw8IChpcnEgLSBJUlFfR1BJTzApKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfbG93X2dwaW9fY2hpcCA9IHsKLQkubmFtZQkJPSAiR1BJTy1sIiwKLQkuYWNrCQk9IHB4YV9hY2tfbG93X2dwaW8sCi0JLm1hc2sJCT0gcHhhX21hc2tfbG93X2lycSwKLQkudW5tYXNrCQk9IHB4YV91bm1hc2tfbG93X2lycSwKLQkuc2V0X3R5cGUJPSBweGFfZ3Bpb19pcnFfdHlwZSwKLX07Ci0KLS8qCi0gKiBEZW11eCBoYW5kbGVyIGZvciBHUElPPj0yIGVkZ2UgZGV0ZWN0IGludGVycnVwdHMKLSAqLwotCi1zdGF0aWMgdm9pZCBweGFfZ3Bpb19kZW11eF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQlpbnQgbG9vcDsKLQotCWRvIHsKLQkJbG9vcCA9IDA7Ci0KLQkJbWFzayA9IEdFRFIwICYgR1BJT19JUlFfbWFza1swXSAmIH4zOwotCQlpZiAobWFzaykgewotCQkJR0VEUjAgPSBtYXNrOwotCQkJaXJxID0gSVJRX0dQSU8oMik7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCQltYXNrID4+PSAyOwotCQkJZG8gewotCQkJCWlmIChtYXNrICYgMSkKLQkJCQkJZGVzY19oYW5kbGVfaXJxKGlycSwgZGVzYyk7Ci0JCQkJaXJxKys7Ci0JCQkJZGVzYysrOwotCQkJCW1hc2sgPj49IDE7Ci0JCQl9IHdoaWxlIChtYXNrKTsKLQkJCWxvb3AgPSAxOwotCQl9Ci0KLQkJbWFzayA9IEdFRFIxICYgR1BJT19JUlFfbWFza1sxXTsKLQkJaWYgKG1hc2spIHsKLQkJCUdFRFIxID0gbWFzazsKLQkJCWlycSA9IElSUV9HUElPKDMyKTsKLQkJCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQkJCWRvIHsKLQkJCQlpZiAobWFzayAmIDEpCi0JCQkJCWRlc2NfaGFuZGxlX2lycShpcnEsIGRlc2MpOwotCQkJCWlycSsrOwotCQkJCWRlc2MrKzsKLQkJCQltYXNrID4+PSAxOwotCQkJfSB3aGlsZSAobWFzayk7Ci0JCQlsb29wID0gMTsKLQkJfQotCi0JCW1hc2sgPSBHRURSMiAmIEdQSU9fSVJRX21hc2tbMl07Ci0JCWlmIChtYXNrKSB7Ci0JCQlHRURSMiA9IG1hc2s7Ci0JCQlpcnEgPSBJUlFfR1BJTyg2NCk7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCQlkbyB7Ci0JCQkJaWYgKG1hc2sgJiAxKQotCQkJCQlkZXNjX2hhbmRsZV9pcnEoaXJxLCBkZXNjKTsKLQkJCQlpcnErKzsKLQkJCQlkZXNjKys7Ci0JCQkJbWFzayA+Pj0gMTsKLQkJCX0gd2hpbGUgKG1hc2spOwotCQkJbG9vcCA9IDE7Ci0JCX0KLQotCQltYXNrID0gR0VEUjMgJiBHUElPX0lSUV9tYXNrWzNdOwotCQlpZiAobWFzaykgewotCQkJR0VEUjMgPSBtYXNrOwotCQkJaXJxID0gSVJRX0dQSU8oOTYpOwotCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCQkJZG8gewotCQkJCWlmIChtYXNrICYgMSkKLQkJCQkJZGVzY19oYW5kbGVfaXJxKGlycSwgZGVzYyk7Ci0JCQkJaXJxKys7Ci0JCQkJZGVzYysrOwotCQkJCW1hc2sgPj49IDE7Ci0JCQl9IHdoaWxlIChtYXNrKTsKLQkJCWxvb3AgPSAxOwotCQl9Ci0JfSB3aGlsZSAobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV9hY2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBncGlvID0gaXJxIC0gSVJRX0dQSU8oMikgKyAyOwotCUdFRFIoZ3BpbykgPSBHUElPX2JpdChncGlvKTsKLX0KLQotc3RhdGljIHZvaWQgcHhhX21hc2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBncGlvID0gaXJxIC0gSVJRX0dQSU8oMikgKyAyOwotCV9fY2xlYXJfYml0KGdwaW8sIEdQSU9fSVJRX21hc2spOwotCUdSRVIoZ3BpbykgJj0gfkdQSU9fYml0KGdwaW8pOwotCUdGRVIoZ3BpbykgJj0gfkdQSU9fYml0KGdwaW8pOwotfQotCi1zdGF0aWMgdm9pZCBweGFfdW5tYXNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKLQlpbnQgaWR4ID0gZ3BpbyA+PiA1OwotCV9fc2V0X2JpdChncGlvLCBHUElPX0lSUV9tYXNrKTsKLQlHUkVSKGdwaW8pID0gR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSAmIEdQSU9fSVJRX21hc2tbaWR4XTsKLQlHRkVSKGdwaW8pID0gR1BJT19JUlFfZmFsbGluZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcHhhX211eGVkX2dwaW9fY2hpcCA9IHsKLQkubmFtZQkJPSAiR1BJTyIsCi0JLmFjawkJPSBweGFfYWNrX211eGVkX2dwaW8sCi0JLm1hc2sJCT0gcHhhX21hc2tfbXV4ZWRfZ3BpbywKLQkudW5tYXNrCQk9IHB4YV91bm1hc2tfbXV4ZWRfZ3BpbywKLQkuc2V0X3R5cGUJPSBweGFfZ3Bpb19pcnFfdHlwZSwKLX07Ci0KLXZvaWQgX19pbml0IHB4YV9pbml0X2lycV9ncGlvKGludCBncGlvX25yKQotewotCWludCBpcnEsIGk7Ci0KLQlweGFfbGFzdF9ncGlvID0gZ3Bpb19uciAtIDE7Ci0KLQkvKiBjbGVhciBhbGwgR1BJTyBlZGdlIGRldGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19ucjsgaSArPSAzMikgewotCQlHRkVSKGkpID0gMDsKLQkJR1JFUihpKSA9IDA7Ci0JCUdFRFIoaSkgPSBHRURSKGkpOwotCX0KLQotCS8qIEdQSU8gMCBhbmQgMSBtdXN0IGhhdmUgdGhlaXIgbWFzayBiaXQgYWx3YXlzIHNldCAqLwotCUdQSU9fSVJRX21hc2tbMF0gPSAzOwotCi0JZm9yIChpcnEgPSBJUlFfR1BJTzA7IGlycSA8PSBJUlFfR1BJTzE7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZweGFfbG93X2dwaW9fY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7Ci0JfQotCi0JZm9yIChpcnEgPSBJUlFfR1BJTygyKTsgaXJxIDwgSVJRX0dQSU8oZ3Bpb19ucik7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZweGFfbXV4ZWRfZ3Bpb19jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQl9Ci0KLQkvKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cyAqLwotCXNldF9pcnFfY2hpcChJUlFfR1BJT18yX3gsICZweGFfaW50ZXJuYWxfY2hpcF9sb3cpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPXzJfeCwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7Ci0KLQlweGFfaW5pdF9ncGlvKGdwaW9fbnIpOwotfQotCi12b2lkIF9faW5pdCBweGFfaW5pdF9pcnFfc2V0X3dha2UoaW50ICgqc2V0X3dha2UpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KSkKLXsKLQlweGFfaW50ZXJuYWxfY2hpcF9sb3cuc2V0X3dha2UgPSBzZXRfd2FrZTsKLSNpZmRlZiBDT05GSUdfUFhBMjd4Ci0JcHhhX2ludGVybmFsX2NoaXBfaGlnaC5zZXRfd2FrZSA9IHNldF93YWtlOwotI2VuZGlmCi0JcHhhX2xvd19ncGlvX2NoaXAuc2V0X3dha2UgPSBzZXRfd2FrZTsKLQlweGFfbXV4ZWRfZ3Bpb19jaGlwLnNldF93YWtlID0gc2V0X3dha2U7CisJcHhhX2ludGVybmFsX2lycV9jaGlwLnNldF93YWtlID0gZm47CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTMzMCwxOSArODAsMTEgQEAKIAogc3RhdGljIGludCBweGFfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN3aXRjaCAoZGV2LT5pZCkgewotCWNhc2UgMDoKLQkJc2F2ZWRfaWNtclswXSA9IElDTVI7Ci0JCUlDTVIgPSAwOwotCQlicmVhazsKLSNpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpIHx8IGRlZmluZWQoQ09ORklHX1BYQTN4eCkKLQljYXNlIDE6Ci0JCXNhdmVkX2ljbXJbMV0gPSBJQ01SMjsKLQkJSUNNUjIgPSAwOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCWludCBpLCBpcnEgPSBQWEFfSVJRKDApOworCisJZm9yIChpID0gMDsgaXJxIDwgUFhBX0lSUShweGFfaW50ZXJuYWxfaXJxX25yKTsgaSsrLCBpcnEgKz0gMzIpIHsKKwkJc2F2ZWRfaWNtcltpXSA9IF9JQ01SKGlycSk7CisJCV9JQ01SKGlycSkgPSAwOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzUwLDIyICs5MiwxNCBAQAogCiBzdGF0aWMgaW50IHB4YV9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7Ci0Jc3dpdGNoIChkZXYtPmlkKSB7Ci0JY2FzZSAwOgotCQlJQ01SID0gc2F2ZWRfaWNtclswXTsKLQkJSUNMUiA9IDA7Ci0JCUlDQ1IgPSAxOwotCQlicmVhazsKLSNpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpIHx8IGRlZmluZWQoQ09ORklHX1BYQTN4eCkKLQljYXNlIDE6Ci0JCUlDTVIyID0gc2F2ZWRfaWNtclsxXTsKLQkJSUNMUjIgPSAwOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCWludCBpLCBpcnEgPSBQWEFfSVJRKDApOworCisJZm9yIChpID0gMDsgaXJxIDwgUFhBX0lSUShweGFfaW50ZXJuYWxfaXJxX25yKTsgaSsrLCBpcnEgKz0gMzIpIHsKKwkJX0lDTVIoaXJxKSA9IHNhdmVkX2ljbXJbaV07CisJCV9JQ0xSKGlycSkgPSAwOwogCX0KIAorCUlDQ1IgPSAxOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtdHJpemVwczQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtdHJpemVwczQuYwppbmRleCAyMjcxZDIwLi4yMTg4MGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLXRyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy10cml6ZXBzNC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC90cml6ZXBzNC5oPgogCiAjaW5jbHVkZSAibGVkcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCAwYTRiNTRjLi4wMzM5NjA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMzcsMTIgKzM3LDExIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3NwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMjd4X2tleXBhZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2xpdHRsZXRvbi5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi0jZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQotCiAvKiBMaXR0bGV0b24gTUZQIGNvbmZpZ3VyYXRpb25zICovCiBzdGF0aWMgbWZwX2NmZ190IGxpdHRsZXRvbl9tZnBfY2ZnW10gX19pbml0ZGF0YSA9IHsKIAkvKiBMQ0QgKi8KQEAgLTc2LDYgKzc1LDIxIEBACiAKIAkvKiBEZWJ1ZyBFdGhlcm5ldCAqLwogCUdQSU85MF9HUElPLAorCisJLyogS2V5cGFkICovCisJR1BJTzEwN19LUF9ES0lOXzAsCisJR1BJTzEwOF9LUF9ES0lOXzEsCisJR1BJTzExNV9LUF9NS0lOXzAsCisJR1BJTzExNl9LUF9NS0lOXzEsCisJR1BJTzExN19LUF9NS0lOXzIsCisJR1BJTzExOF9LUF9NS0lOXzMsCisJR1BJTzExOV9LUF9NS0lOXzQsCisJR1BJTzEyMF9LUF9NS0lOXzUsCisJR1BJTzEyMV9LUF9NS09VVF8wLAorCUdQSU8xMjJfS1BfTUtPVVRfMSwKKwlHUElPMTIzX0tQX01LT1VUXzIsCisJR1BJTzEyNF9LUF9NS09VVF8zLAorCUdQSU8xMjVfS1BfTUtPVVRfNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewpAQCAtMzAwLDYgKzMxNCw1NCBAQAogc3RhdGljIGlubGluZSB2b2lkIGxpdHRsZXRvbl9pbml0X2xjZCh2b2lkKSB7fTsKICNlbmRpZiAvKiBDT05GSUdfRkJfUFhBIHx8IENPTkZJR19GQl9QWEFfTU9EVUxFUyAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFUykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGl0dGxldG9uX21hdHJpeF9rZXlfbWFwW10gPSB7CisJLyogS0VZKHJvdywgY29sLCBrZXlfY29kZSkgKi8KKwlLRVkoMSwgMywgS0VZXzApLCBLRVkoMCwgMCwgS0VZXzEpLCBLRVkoMSwgMCwgS0VZXzIpLCBLRVkoMiwgMCwgS0VZXzMpLAorCUtFWSgwLCAxLCBLRVlfNCksIEtFWSgxLCAxLCBLRVlfNSksIEtFWSgyLCAxLCBLRVlfNiksIEtFWSgwLCAyLCBLRVlfNyksCisJS0VZKDEsIDIsIEtFWV84KSwgS0VZKDIsIDIsIEtFWV85KSwKKworCUtFWSgwLCAzLCBLRVlfS1BBU1RFUklTSyksIAkvKiAqICovCisJS0VZKDIsIDMsIEtFWV9LUERPVCksIAkJLyogIyAqLworCisJS0VZKDUsIDQsIEtFWV9FTlRFUiksCisKKwlLRVkoNSwgMCwgS0VZX1VQKSwKKwlLRVkoNSwgMSwgS0VZX0RPV04pLAorCUtFWSg1LCAyLCBLRVlfTEVGVCksCisJS0VZKDUsIDMsIEtFWV9SSUdIVCksCisJS0VZKDMsIDIsIEtFWV9IT01FKSwKKwlLRVkoNCwgMSwgS0VZX0VORCksCisJS0VZKDMsIDMsIEtFWV9CQUNLKSwKKworCUtFWSg0LCAwLCBLRVlfU0VORCksCisJS0VZKDQsIDIsIEtFWV9WT0xVTUVVUCksCisJS0VZKDQsIDMsIEtFWV9WT0xVTUVET1dOKSwKKworCUtFWSgzLCAwLCBLRVlfRjIyKSwJLyogc29mdDEgKi8KKwlLRVkoMywgMSwgS0VZX0YyMyksCS8qIHNvZnQyICovCit9OworCitzdGF0aWMgc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBsaXR0bGV0b25fa2V5cGFkX2luZm8gPSB7CisJLm1hdHJpeF9rZXlfcm93cwk9IDYsCisJLm1hdHJpeF9rZXlfY29scwk9IDUsCisJLm1hdHJpeF9rZXlfbWFwCQk9IGxpdHRsZXRvbl9tYXRyaXhfa2V5X21hcCwKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUobGl0dGxldG9uX21hdHJpeF9rZXlfbWFwKSwKKworCS5lbmFibGVfcm90YXJ5MAkJPSAxLAorCS5yb3RhcnkwX3VwX2tleQkJPSBLRVlfVVAsCisJLnJvdGFyeTBfZG93bl9rZXkJPSBLRVlfRE9XTiwKKworCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDMwLAorfTsKK3N0YXRpYyB2b2lkIF9faW5pdCBsaXR0bGV0b25faW5pdF9rZXlwYWQodm9pZCkKK3sKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZsaXR0bGV0b25fa2V5cGFkX2luZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXR0bGV0b25faW5pdF9rZXlwYWQodm9pZCkge30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgbGl0dGxldG9uX2luaXQodm9pZCkKIHsKIAkvKiBpbml0aWFsaXplIE1GUCBjb25maWd1cmF0aW9ucyAqLwpAQCAtMzEyLDYgKzM3NCw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKIAogCWxpdHRsZXRvbl9pbml0X2xjZCgpOworCWxpdHRsZXRvbl9pbml0X2tleXBhZCgpOwogfQogCiBNQUNISU5FX1NUQVJUKExJVFRMRVRPTiwgIk1hcnZlbGwgRm9ybSBGYWN0b3IgRGV2ZWxvcG1lbnQgUGxhdGZvcm0gKGFrYSBMaXR0bGV0b24pIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKaW5kZXggYWZhNjJmZi4uYTIwZTRiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2xwZDI3MC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhZmIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwppbmRleCBlN2FlNGJiLi5jYTIwOWM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCkBAIC00Miw2ICs0Miw3IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTI1eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2x1YmJvY2suaD4KICNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcmRhLmg+CkBAIC01MSw2ICs1Miw0MCBAQAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGx1YmJvY2tfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzE1X25DU18xLAkvKiBDUzEgLSBGbGFzaCAqLworCUdQSU83OV9uQ1NfMywJLyogQ1MzIC0gU01DIGV0aGVybmV0ICovCisKKwkvKiBTU1AgZGF0YSBwaW5zICovCisJR1BJTzIzX1NTUDFfU0NMSywKKwlHUElPMjVfU1NQMV9UWEQsCisJR1BJTzI2X1NTUDFfUlhELAorCisJLyogQlRVQVJUICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBQQyBDYXJkICovCisJR1BJTzQ4X25QT0UsCisJR1BJTzQ5X25QV0UsCisJR1BJTzUwX25QSU9SLAorCUdQSU81MV9uUElPVywKKwlHUElPNTJfblBDRV8xLAorCUdQSU81M19uUENFXzIsCisJR1BJTzU0X25QU0tUU0VMLAorCUdQSU81NV9uUFJFRywKKwlHUElPNTZfblBXQUlULAorCUdQSU81N19uSU9JUzE2LAorCisJLyogTU1DICovCisJR1BJTzZfTU1DX0NMSywKKwlHUElPOF9NTUNfQ1MwLAorCisJLyogd2FrZXVwICovCisJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX1JJU0UsCit9OwogCiAjZGVmaW5lIExVQl9NSVNDX1dSCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDA4MCkKIApAQCAtMTg2LDI2ICsyMjEsNiBAQAogCS5yZXNvdXJjZQk9IHNhMTExMV9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lCT0gInNtYzkxeC1yZWdzIiwKLQkJLnN0YXJ0CT0gMHgwYzAwMGMwMCwKLQkJLmVuZAk9IDB4MGMwZmZmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBMVUJCT0NLX0VUSF9JUlEsCi0JCS5lbmQJPSBMVUJCT0NLX0VUSF9JUlEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UsCi0JfSwKLQlbMl0gPSB7Ci0JCS5uYW1lCT0gInNtYzkxeC1hdHRyaWIiLAotCQkuc3RhcnQJPSAweDBlMDAwMDAwLAotCQkuZW5kCT0gMHgwZTBmZmZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KIC8qIEFEUzc4NDYgaXMgY29ubmVjdGVkIHRocm91Z2ggU1NQIC4uLiBhbmQgaWYgeW91ciBib2FyZCBoYXMgSjUgcG9wdWxhdGVkLAogICogeW91IGNhbiBzZWxlY3QgaXQgdG8gcmVwbGFjZSB0aGUgdWNiMTQwMCBieSBzd2l0Y2hpbmcgdGhlIHRvdWNoc2NyZWVuIGNhYmxlCiAgKiAodG8gSjUpIGFuZCBwb2tpbmcgYm9hcmQgcmVnaXN0ZXJzIChhcyBkb25lIGJlbG93KS4gIEVsc2UgaXQncyBvbmx5IHVzZWZ1bApAQCAtMjYxLDYgKzI3NiwyNiBAQAogfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAic21jOTF4LXJlZ3MiLAorCQkuc3RhcnQJPSAweDBjMDAwYzAwLAorCQkuZW5kCT0gMHgwYzBmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IExVQkJPQ0tfRVRIX0lSUSwKKwkJLmVuZAk9IExVQkJPQ0tfRVRIX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAic21jOTF4LWF0dHJpYiIsCisJCS5zdGFydAk9IDB4MGUwMDAwMDAsCisJCS5lbmQJPSAweDBlMGZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gLTEsCkBAIC00MDQsMTAgKzQzOSw2IEBACiAJCWlycV9oYW5kbGVyX3QgZGV0ZWN0X2ludCwKIAkJdm9pZCAqZGF0YSkKIHsKLQkvKiBzZXR1cCBHUElPIGZvciBQWEEyNXggTU1DIGNvbnRyb2xsZXIJKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU82X01NQ0NMS19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPOF9NTUNDUzBfTUQpOwotCiAJLyogZGV0ZWN0IGNhcmQgaW5zZXJ0L2VqZWN0ICovCiAJbW1jX2RldGVjdF9pbnQgPSBkZXRlY3RfaW50OwogCWluaXRfdGltZXIoJm1tY190aW1lcik7CkBAIC00NTcsNiArNDg4LDggQEAKIHsKIAlpbnQgZmxhc2hib290ID0gKExVQl9DT05GX1NXSVRDSEVTICYgMSk7CiAKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShsdWJib2NrX3Bpbl9jb25maWcpKTsKKwogCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKIAlzZXRfcHhhX2ZiX2luZm8oJnNoYXJwX2xtOHYzMSk7CiAJcHhhX3NldF9tY2lfaW5mbygmbHViYm9ja19tY2lfcGxhdGZvcm1fZGF0YSk7CkBAIC00ODksNDYgKzUyMiw2IEBACiAJcHhhX21hcF9pbygpOwogCWlvdGFibGVfaW5pdChsdWJib2NrX2lvX2Rlc2MsIEFSUkFZX1NJWkUobHViYm9ja19pb19kZXNjKSk7CiAKLQkvKiBTU1AgZGF0YSBwaW5zICovCi0JcHhhX2dwaW9fbW9kZShHUElPMjNfU0NMS19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMjVfU1RYRF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMjZfU1JYRF9NRCk7Ci0KLQkvKiBUaGlzIGVuYWJsZXMgdGhlIEJUVUFSVCAqLwotCXB4YV9ncGlvX21vZGUoR1BJTzQyX0JUUlhEX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU80M19CVFRYRF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDRfQlRDVFNfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzQ1X0JUUlRTX01EKTsKLQotCUdQU1IoR1BJTzQ4X25QT0UpID0KLQkJR1BJT19iaXQoR1BJTzQ4X25QT0UpIHwKLQkJR1BJT19iaXQoR1BJTzQ5X25QV0UpIHwKLQkJR1BJT19iaXQoR1BJTzUwX25QSU9SKSB8Ci0JCUdQSU9fYml0KEdQSU81MV9uUElPVykgfAotCQlHUElPX2JpdChHUElPNTJfblBDRV8xKSB8Ci0JCUdQSU9fYml0KEdQSU81M19uUENFXzIpOwotCi0JcHhhX2dwaW9fbW9kZShHUElPNDhfblBPRV9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNDlfblBXRV9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTBfblBJT1JfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzUxX25QSU9XX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81Ml9uUENFXzFfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzUzX25QQ0VfMl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTRfcFNLVFNFTF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTVfblBSRUdfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU2X25QV0FJVF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTdfbklPSVMxNl9NRCk7Ci0KLQkvKiBUaGlzIGlzIGZvciB0aGUgU01DIGNoaXAgc2VsZWN0ICovCi0JcHhhX2dwaW9fbW9kZShHUElPNzlfbkNTXzNfTUQpOwotCi0JLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KLQlQV0VSICA9IDB4MDAwMDAwMDI7Ci0JUEZFUiAgPSAweDAwMDAwMDAwOwotCVBSRVIgID0gMHgwMDAwMDAwMjsKLQlQR1NSMCA9IDB4MDAwMDgwMDA7Ci0JUEdTUjEgPSAweDAwM0YwMjAyOwotCVBHU1IyID0gMHgwMDAxQzAwMDsKIAlQQ0ZSIHw9IFBDRlJfT1BERTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKaW5kZXggZDk4ZWY3YS4uZDcwYmU3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCkBAIC0xNiwyNCArMTYsMTA2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvaHRjLWVncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2h0Yy1wYXNpYzMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CiAKICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21hZ2ljaWFuLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTI3eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pMmMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcmRhLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvb2hjaS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWdpY2lhbl9waW5fY29uZmlnW10gPSB7CisKKwkvKiBTRFJBTSBhbmQgU3RhdGljIE1lbW9yeSBJL08gU2lnbmFscyAqLworCUdQSU8yMF9uU0RDU18yLAorCUdQSU8yMV9uU0RDU18zLAorCUdQSU8xNV9uQ1NfMSwKKwlHUElPNzhfbkNTXzIsICAgLyogUEFTSUMzICovCisJR1BJTzc5X25DU18zLCAgIC8qIEVHUElPIENQTEQgKi8KKwlHUElPODBfbkNTXzQsCisJR1BJTzMzX25DU181LAorCisJLyogSTJDICovCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKKworCS8qIFBXTSAwICovCisJR1BJTzE2X1BXTTBfT1VULAorCisJLyogSTJTICovCisJR1BJTzI4X0kyU19CSVRDTEtfT1VULAorCUdQSU8yOV9JMlNfU0RBVEFfSU4sCisJR1BJTzMxX0kyU19TWU5DLAorCUdQSU8xMTNfSTJTX1NZU0NMSywKKworCS8qIFNTUCAyICovCisJR1BJTzE5X1NTUDJfU0NMSywKKwlHUElPMTRfU1NQMl9TRlJNLAorCUdQSU84OV9TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKKwkvKiBNTUMgKi8KKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKKworCS8qIExDRCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJLyogUUNJICovCisJR1BJTzEyX0NJRl9ERF83LAorCUdQSU8xN19DSUZfRERfNiwKKwlHUElPNTBfQ0lGX0REXzMsCisJR1BJTzUxX0NJRl9ERF8yLAorCUdQSU81Ml9DSUZfRERfNCwKKwlHUElPNTNfQ0lGX01DTEssCisJR1BJTzU0X0NJRl9QQ0xLLAorCUdQSU81NV9DSUZfRERfMSwKKwlHUElPODFfQ0lGX0REXzAsCisJR1BJTzgyX0NJRl9ERF81LAorCUdQSU84NF9DSUZfRlYsCisJR1BJTzg1X0NJRl9MViwKK307CisKIC8qCiAgKiBJUkRBCiAgKi8KQEAgLTgzLDggKzE2NSw2NCBAQAogCS5pZCAgID0gLTEsCiB9OwogCisKIC8qCi0gKiBMQ0QgLSBUb3Bwb2x5IFREMDI4U1RFQjEKKyAqIEVHUElPIChYaWxpbnggQ1BMRCkKKyAqCisgKiA3IDMyLWJpdCBhbGlnbmVkIDgtYml0IHJlZ2lzdGVyczogM3ggb3V0cHV0LCAxeCBpcnEsIDN4IGlucHV0CisgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZ3Bpb19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFBYQV9DUzNfUEhZUywKKwkJLmVuZCAgID0gUFhBX0NTM19QSFlTICsgMHgyMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IGdwaW9fdG9faXJxKEdQSU8xM19NQUdJQ0lBTl9DUExEX0lSUSksCisJCS5lbmQgICA9IGdwaW9fdG9faXJxKEdQSU8xM19NQUdJQ0lBTl9DUExEX0lSUSksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGh0Y19lZ3Bpb19jaGlwIGVncGlvX2NoaXBzW10gPSB7CisJWzBdID0geworCQkucmVnX3N0YXJ0ID0gMCwKKwkJLmdwaW9fYmFzZSA9IE1BR0lDSUFOX0VHUElPKDAsIDApLAorCQkubnVtX2dwaW9zID0gMjQsCisJCS5kaXJlY3Rpb24gPSBIVENfRUdQSU9fT1VUUFVULAorCQkuaW5pdGlhbF92YWx1ZXMgPSAweDQwLCAvKiBFR1BJT19NQUdJQ0lBTl9HU01fUkVTRVQgKi8KKwl9LAorCVsxXSA9IHsKKwkJLnJlZ19zdGFydCA9IDQsCisJCS5ncGlvX2Jhc2UgPSBNQUdJQ0lBTl9FR1BJTyg0LCAwKSwKKwkJLm51bV9ncGlvcyA9IDI0LAorCQkuZGlyZWN0aW9uID0gSFRDX0VHUElPX0lOUFVULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGh0Y19lZ3Bpb19wbGF0Zm9ybV9kYXRhIGVncGlvX2luZm8gPSB7CisJLnJlZ193aWR0aCAgICA9IDgsCisJLmJ1c193aWR0aCAgICA9IDMyLAorCS5pcnFfYmFzZSAgICAgPSBJUlFfQk9BUkRfU1RBUlQsCisJLm51bV9pcnFzICAgICA9IDQsCisJLmFja19yZWdpc3RlciA9IDMsCisJLmNoaXAgICAgICAgICA9IGVncGlvX2NoaXBzLAorCS5udW1fY2hpcHMgICAgPSBBUlJBWV9TSVpFKGVncGlvX2NoaXBzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVncGlvID0geworCS5uYW1lICAgICAgICAgID0gImh0Yy1lZ3BpbyIsCisJLmlkICAgICAgICAgICAgPSAtMSwKKwkucmVzb3VyY2UgICAgICA9IGVncGlvX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZWdwaW9fcmVzb3VyY2VzKSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlZ3Bpb19pbmZvLAorCX0sCit9OworCisvKgorICogTENEIC0gVG9wcG9seSBURDAyOFNURUIxIG9yIFNhbXN1bmcgTFRQMjgwUVYKICAqLwogCiBzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyB0b3Bwb2x5X21vZGVzW10gPSB7CkBAIC0xMDMsMTIgKzI0MSw5OSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBzYW1zdW5nX21vZGVzW10gPSB7CisJeworCQkucGl4Y2xvY2sgICAgID0gOTYxNTMsCisJCS5icHAgICAgICAgICAgPSAxNiwKKwkJLnhyZXMgICAgICAgICA9IDI0MCwKKwkJLnlyZXMgICAgICAgICA9IDMyMCwKKwkJLmhzeW5jX2xlbiAgICA9IDgsCisJCS52c3luY19sZW4gICAgPSA0LAorCQkubGVmdF9tYXJnaW4gID0gOSwKKwkJLnVwcGVyX21hcmdpbiA9IDQsCisJCS5yaWdodF9tYXJnaW4gPSA5LAorCQkubG93ZXJfbWFyZ2luID0gNCwKKwkJLnN5bmMgICAgICAgICA9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCX0sCit9OworCitzdGF0aWMgdm9pZCB0b3Bwb2x5X2xjZF9wb3dlcihpbnQgb24sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqc2kpCit7CisJcHJfZGVidWcoIlRvcHBvbHkgTENEIHBvd2VyXG4iKTsKKworCWlmIChvbikgeworCQlwcl9kZWJ1Zygib25cbiIpOworCQlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9UT1BQT0xZX1BPV0VSLCAxKTsKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNl9NQUdJQ0lBTl9MQ0RfUE9XRVJfMywgMSk7CisJCXVkZWxheSgyMDAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fTENEX1BPV0VSLCAxKTsKKwkJdWRlbGF5KDIwMDApOworCQkvKiBGSVhNRTogZW5hYmxlIExDREMgaGVyZSAqLworCQl1ZGVsYXkoMjAwMCk7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDRfTUFHSUNJQU5fTENEX1BPV0VSXzEsIDEpOworCQl1ZGVsYXkoMjAwMCk7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfTUFHSUNJQU5fTENEX1BPV0VSXzIsIDEpOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJvZmZcbiIpOworCQltc2xlZXAoMTUpOworCQlncGlvX3NldF92YWx1ZShHUElPMTA1X01BR0lDSUFOX0xDRF9QT1dFUl8yLCAwKTsKKwkJdWRlbGF5KDUwMCk7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDRfTUFHSUNJQU5fTENEX1BPV0VSXzEsIDApOworCQl1ZGVsYXkoMTAwMCk7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDZfTUFHSUNJQU5fTENEX1BPV0VSXzMsIDApOworCQlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9MQ0RfUE9XRVIsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgc2Ftc3VuZ19sY2RfcG93ZXIoaW50IG9uLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnNpKQoreworCXByX2RlYnVnKCJTYW1zdW5nIExDRCBwb3dlclxuIik7CisKKwlpZiAob24pIHsKKwkJcHJfZGVidWcoIm9uXG4iKTsKKwkJaWYgKHN5c3RlbV9yZXYgPCAzKQorCQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzc1X01BR0lDSUFOX1NBTVNVTkdfUE9XRVIsIDEpOworCQllbHNlCisJCQlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9MQ0RfUE9XRVIsIDEpOworCQltZGVsYXkoMTApOworCQlncGlvX3NldF92YWx1ZShHUElPMTA2X01BR0lDSUFOX0xDRF9QT1dFUl8zLCAxKTsKKwkJbWRlbGF5KDEwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNF9NQUdJQ0lBTl9MQ0RfUE9XRVJfMSwgMSk7CisJCW1kZWxheSgzMCk7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfTUFHSUNJQU5fTENEX1BPV0VSXzIsIDEpOworCQltZGVsYXkoMTApOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJvZmZcbiIpOworCQltZGVsYXkoMTApOworCQlncGlvX3NldF92YWx1ZShHUElPMTA1X01BR0lDSUFOX0xDRF9QT1dFUl8yLCAwKTsKKwkJbWRlbGF5KDMwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNF9NQUdJQ0lBTl9MQ0RfUE9XRVJfMSwgMCk7CisJCW1kZWxheSgxMCk7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDZfTUFHSUNJQU5fTENEX1BPV0VSXzMsIDApOworCQltZGVsYXkoMTApOworCQlpZiAoc3lzdGVtX3JldiA8IDMpCisJCQlncGlvX3NldF92YWx1ZShHUElPNzVfTUFHSUNJQU5fU0FNU1VOR19QT1dFUiwgMCk7CisJCWVsc2UKKwkJCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX0xDRF9QT1dFUiwgMCk7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyB0b3Bwb2x5X2luZm8gPSB7Ci0JLm1vZGVzICAgICAgID0gdG9wcG9seV9tb2RlcywKLQkubnVtX21vZGVzICAgPSAxLAotCS5maXhlZF9tb2RlcyA9IDEsCi0JLmxjY3IwICAgICAgID0gTENDUjBfQ29sb3IgfCBMQ0NSMF9TbmdsIHwgTENDUjBfQWN0LAotCS5sY2NyMyAgICAgICA9IExDQ1IzX1BpeFJzRWRnLAorCS5tb2RlcyAgICAgICAgICAgPSB0b3Bwb2x5X21vZGVzLAorCS5udW1fbW9kZXMgICAgICAgPSAxLAorCS5maXhlZF9tb2RlcyAgICAgPSAxLAorCS5sY2NyMCAgICAgICAgICAgPSBMQ0NSMF9Db2xvciB8IExDQ1IwX1NuZ2wgfCBMQ0NSMF9BY3QsCisJLmxjY3IzICAgICAgICAgICA9IExDQ1IzX1BpeFJzRWRnLAorCS5weGFmYl9sY2RfcG93ZXIgPSB0b3Bwb2x5X2xjZF9wb3dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHNhbXN1bmdfaW5mbyA9IHsKKwkubW9kZXMgICAgICAgICAgID0gc2Ftc3VuZ19tb2RlcywKKwkubnVtX21vZGVzICAgICAgID0gMSwKKwkuZml4ZWRfbW9kZXMgICAgID0gMSwKKwkubGNjcjAgICAgICAgICAgID0gTENDUjBfTEREQUxUIHwgTENDUjBfQ29sb3IgfCBMQ0NSMF9TbmdsIHwgTENDUjBfQWN0LAorCS5sY2NyMyAgICAgICAgICAgPSBMQ0NSM19QaXhGbEVkZywKKwkucHhhZmJfbGNkX3Bvd2VyID0gc2Ftc3VuZ19sY2RfcG93ZXIsCiB9OwogCiAvKgpAQCAtMTIwLDkgKzM0NSwxOCBAQAogCWlmIChpbnRlbnNpdHkpIHsKIAkJUFdNX0NUUkwwID0gMTsKIAkJUFdNX1BFUlZBTDAgPSAweGM4OwotCQlQV01fUFdEVVRZMCA9IGludGVuc2l0eTsKKwkJaWYgKGludGVuc2l0eSA+IDB4YzcpIHsKKwkJCVBXTV9QV0RVVFkwID0gaW50ZW5zaXR5IC0gMHg0ODsKKwkJCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX0JMX1BPV0VSMiwgMSk7CisJCX0gZWxzZSB7CisJCQlQV01fUFdEVVRZMCA9IGludGVuc2l0eTsKKwkJCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX0JMX1BPV0VSMiwgMCk7CisJCX0KKwkJZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fQkxfUE9XRVIsIDEpOwogCQlweGFfc2V0X2NrZW4oQ0tFTl9QV00wLCAxKTsKIAl9IGVsc2UgeworCQkvKiBQV01fUFdEVVRZMCA9IGludGVuc2l0eTsgKi8KKwkJZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fQkxfUE9XRVIsIDApOwogCQlweGFfc2V0X2NrZW4oQ0tFTl9QV00wLCAwKTsKIAl9CiB9CkBAIC0xMzAsMTggKzM2NCwyMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2VuZXJpY19ibF9pbmZvIGJhY2tsaWdodF9pbmZvID0gewogCS5kZWZhdWx0X2ludGVuc2l0eSA9IDB4NjQsCiAJLmxpbWl0X21hc2sgICAgICAgID0gMHgwYiwKLQkubWF4X2ludGVuc2l0eSAgICAgPSAweGM3LAorCS5tYXhfaW50ZW5zaXR5ICAgICA9IDB4YzcrMHg0OCwKIAkuc2V0X2JsX2ludGVuc2l0eSAgPSBtYWdpY2lhbl9zZXRfYmxfaW50ZW5zaXR5LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmFja2xpZ2h0ID0gewotCS5uYW1lID0gImNvcmdpLWJsIiwKKwkubmFtZSA9ICJnZW5lcmljLWJsIiwKIAkuZGV2ICA9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmYmFja2xpZ2h0X2luZm8sCiAJfSwKIAkuaWQgICA9IC0xLAogfTsKIAorLyoKKyAqIExFRHMKKyAqLworCitzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJtYWdpY2lhbjo6dmlicmEiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gIm5vbmUiLAorCQkuZ3BpbyA9IEdQSU8yMl9NQUdJQ0lBTl9WSUJSQV9FTiwKKwl9LAorCXsKKwkJLm5hbWUgPSAibWFnaWNpYW46OnBob25lX2JsIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJub25lIiwKKwkJLmdwaW8gPSBHUElPMTAzX01BR0lDSUFOX0xFRF9LUCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGdwaW9fbGVkX2luZm8gPSB7CisJLmxlZHMgPSBncGlvX2xlZHMsCisJLm51bV9sZWRzID0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCS5uYW1lID0gImxlZHMtZ3BpbyIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ3Bpb19sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwYXNpYzNfbGVkIHBhc2ljM19sZWRzW10gPSB7CisJeworCQkubGVkID0geworCQkJLm5hbWUgICAgICAgICAgICA9ICJtYWdpY2lhbjpyZWQiLAorCQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkczI3NjAtYmF0dGVyeS4wLWNoYXJnaW5nIiwKKwkJfSwKKwkJLmh3X251bSA9IDAsCisJCS5iaXQyICAgPSBQQVNJQzNfQklUMl9MRUQwLAorCQkubWFzayAgID0gUEFTSUMzX01BU0tfTEVEMCwKKwl9LAorCXsKKwkJLmxlZCA9IHsKKwkJCS5uYW1lICAgICAgICAgICAgPSAibWFnaWNpYW46Z3JlZW4iLAorCQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkczI3NjAtYmF0dGVyeS4wLWNoYXJnaW5nLW9yLWZ1bGwiLAorCQl9LAorCQkuaHdfbnVtID0gMSwKKwkJLmJpdDIgICA9IFBBU0lDM19CSVQyX0xFRDEsCisJCS5tYXNrICAgPSBQQVNJQzNfTUFTS19MRUQxLAorCX0sCisJeworCQkubGVkID0geworCQkJLm5hbWUgICAgICAgICAgICA9ICJtYWdpY2lhbjpibHVlIiwKKwkJCS5kZWZhdWx0X3RyaWdnZXIgPSAiYmx1ZXRvb3RoIiwKKwkJfSwKKwkJLmh3X251bSA9IDIsCisJCS5iaXQyICAgPSBQQVNJQzNfQklUMl9MRUQyLAorCQkubWFzayAgID0gUEFTSUMzX01BU0tfTEVEMiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFzaWMzOworCitzdGF0aWMgc3RydWN0IHBhc2ljM19sZWRzX21hY2hpbmZvIF9fZGV2aW5pdCBwYXNpYzNfbGVkc19pbmZvID0geworCS5udW1fbGVkcyAgID0gQVJSQVlfU0laRShwYXNpYzNfbGVkcyksCisJLnBvd2VyX2dwaW8gPSBFR1BJT19NQUdJQ0lBTl9MRURfUE9XRVIsCisJLmxlZHMgICAgICAgPSBwYXNpYzNfbGVkcywKK307CisKKy8qCisgKiBQQVNJQzMgd2l0aCBEUzFXTQorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFzaWMzX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IFBYQV9DUzJfUEhZUywKKwkJLmVuZAk9IFBYQV9DUzJfUEhZUyArIDB4MWIsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qIE5vIElSUSBoYW5kbGVyIGluIHRoZSBQQVNJQzMsIERTMVdNIG5lZWRzIGFuIGV4dGVybmFsIElSUSAqLworCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IGdwaW9fdG9faXJxKEdQSU8xMDdfTUFHSUNJQU5fRFMxV01fSVJRKSwKKwkJLmVuZCAgICA9IGdwaW9fdG9faXJxKEdQSU8xMDdfTUFHSUNJQU5fRFMxV01fSVJRKSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwYXNpYzNfcGxhdGZvcm1fZGF0YSBwYXNpYzNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYnVzX3NoaWZ0ICA9IDIsCisJLmxlZF9wZGF0YSAgPSAmcGFzaWMzX2xlZHNfaW5mbywKKwkuY2xvY2tfcmF0ZSA9IDQwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYXNpYzMgPSB7CisJLm5hbWUJCT0gInBhc2ljMyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwYXNpYzNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBwYXNpYzNfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBhc2ljM19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCisvKgorICogRXh0ZXJuYWwgcG93ZXIKKyAqLworCitzdGF0aWMgaW50IG1hZ2ljaWFuX2lzX2FjX29ubGluZSh2b2lkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9DQUJMRV9TVEFURV9BQyk7Cit9CisKK3N0YXRpYyBpbnQgbWFnaWNpYW5faXNfdXNiX29ubGluZSh2b2lkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9DQUJMRV9TVEFURV9VU0IpOworfQorCitzdGF0aWMgdm9pZCBtYWdpY2lhbl9zZXRfY2hhcmdlKGludCBmbGFncykKK3sKKwlncGlvX3NldF92YWx1ZShHUElPMzBfTUFHSUNJQU5fbkNIQVJHRV9FTiwgIWZsYWdzKTsKKwlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9DSEFSR0VfRU4sIGZsYWdzKTsKK30KKworc3RhdGljIGNoYXIgKm1hZ2ljaWFuX3N1cHBsaWNhbnRzW10gPSB7CisJImRzMjc2MC1iYXR0ZXJ5LjAiLCAiYmFja3VwLWJhdHRlcnkiCit9OworCitzdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSBwb3dlcl9zdXBwbHlfaW5mbyA9IHsKKwkuaXNfYWNfb25saW5lICAgID0gbWFnaWNpYW5faXNfYWNfb25saW5lLAorCS5pc191c2Jfb25saW5lICAgPSBtYWdpY2lhbl9pc191c2Jfb25saW5lLAorCS5zZXRfY2hhcmdlICAgICAgPSBtYWdpY2lhbl9zZXRfY2hhcmdlLAorCS5zdXBwbGllZF90byAgICAgPSBtYWdpY2lhbl9zdXBwbGljYW50cywKKwkubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShtYWdpY2lhbl9zdXBwbGljYW50cyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBvd2VyX3N1cHBseV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lICA9ICJhYyIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfTUFHSUNJQU5fQUMsCisJCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9BQywKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgID0gInVzYiIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBJUlFfTUFHSUNJQU5fQUMsCisJCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9BQywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG93ZXJfc3VwcGx5ID0geworCS5uYW1lID0gInBkYS1wb3dlciIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcG93ZXJfc3VwcGx5X2luZm8sCisJfSwKKwkucmVzb3VyY2UgICAgICA9IHBvd2VyX3N1cHBseV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHBvd2VyX3N1cHBseV9yZXNvdXJjZXMpLAorfTsKKworCisvKgorICogTU1DL1NECisgKi8KKworc3RhdGljIGludCBtYWdpY2lhbl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLCB2b2lkICpkYXRhKQoreworCXJldHVybiByZXF1ZXN0X2lycShJUlFfTUFHSUNJQU5fU0QsIGRldGVjdF9pcnEsCisJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKKwkJCQkiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljaWFuX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX1NEX1BPV0VSLCAoMSA8PCB2ZGQpICYgcGRhdGEtPm9jcl9tYXNrKTsKK30KKworc3RhdGljIGludCBtYWdpY2lhbl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKCFncGlvX2dldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9uU0RfUkVBRE9OTFkpKTsKK30KKworc3RhdGljIHZvaWQgbWFnaWNpYW5fbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWFnaWNpYW5fbWNpX2luZm8gPSB7CisJLm9jcl9tYXNrID0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0ICAgICA9IG1hZ2ljaWFuX21jaV9pbml0LAorCS5nZXRfcm8gICA9IG1hZ2ljaWFuX21jaV9nZXRfcm8sCisJLnNldHBvd2VyID0gbWFnaWNpYW5fbWNpX3NldHBvd2VyLAorCS5leGl0ICAgICA9IG1hZ2ljaWFuX21jaV9leGl0LAorfTsKKwogCiAvKgogICogVVNCIE9IQ0kKQEAgLTE2Niw2ICs1OTcsMTEgQEAKICAqIFN0cmF0YUZsYXNoCiAgKi8KIAorc3RhdGljIHZvaWQgbWFnaWNpYW5fc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHZwcCkKK3sKKwlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9GTEFTSF9WUFAsIHZwcCk7Cit9CisKICNkZWZpbmUgUFhBX0NTX1NJWkUJCTB4MDQwMDAwMDAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdHJhdGFmbGFzaF9yZXNvdXJjZSA9IHsKQEAgLTE3NiwxMyArNjEyLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHN0cmF0YWZsYXNoX2RhdGEgPSB7CiAJLndpZHRoID0gNCwKKwkuc2V0X3ZwcCA9IG1hZ2ljaWFuX3NldF92cHAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdHJhdGFmbGFzaCA9IHsKIAkubmFtZSAgICAgICAgICA9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQgICAgICAgICAgICA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKIAkucmVzb3VyY2UgICAgICA9ICZzdHJhdGFmbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmc3RyYXRhZmxhc2hfZGF0YSwKIAl9LApAQCAtMTk0LDE2ICs2MzEsNDMgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZncGlvX2tleXMsCisJJmVncGlvLAogCSZiYWNrbGlnaHQsCisJJnBhc2ljMywKKwkmcG93ZXJfc3VwcGx5LAogCSZzdHJhdGFmbGFzaCwKKwkmbGVkc19ncGlvLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1hZ2ljaWFuX2luaXQodm9pZCkKIHsKKwl2b2lkIF9faW9tZW0gKmNwbGQ7CisJaW50IGxjZF9zZWxlY3Q7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShtYWdpY2lhbl9waW5fY29uZmlnKSk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCXB4YV9zZXRfbWNpX2luZm8oJm1hZ2ljaWFuX21jaV9pbmZvKTsKIAlweGFfc2V0X29oY2lfaW5mbygmbWFnaWNpYW5fb2hjaV9pbmZvKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmbWFnaWNpYW5fZmljcF9pbmZvKTsKLQlzZXRfcHhhX2ZiX2luZm8oJnRvcHBvbHlfaW5mbyk7CisKKwkvKiBDaGVjayBMQ0QgdHlwZSB3ZSBoYXZlICovCisJY3BsZCA9IGlvcmVtYXBfbm9jYWNoZShQWEFfQ1MzX1BIWVMsIDB4MTAwMCk7CisJaWYgKGNwbGQpIHsKKwkJdTggYm9hcmRfaWQgPSBfX3Jhd19yZWFkYihjcGxkKzB4MTQpOworCQlzeXN0ZW1fcmV2ID0gYm9hcmRfaWQgJiAweDc7CisJCWxjZF9zZWxlY3QgPSBib2FyZF9pZCAmIDB4ODsKKwkJaW91bm1hcChjcGxkKTsKKwkJcHJfaW5mbygiTENEIHR5cGU6ICVzXG4iLCBsY2Rfc2VsZWN0ID8gIlNhbXN1bmciIDogIlRvcHBvbHkiKTsKKwkJaWYgKGxjZF9zZWxlY3QgJiYgKHN5c3RlbV9yZXYgPCAzKSkKKwkJCXB4YV9ncGlvX21vZGUoR1BJTzc1X01BR0lDSUFOX1NBTVNVTkdfUE9XRVJfTUQpOworCQlweGFfZ3Bpb19tb2RlKEdQSU8xMDRfTUFHSUNJQU5fTENEX1BPV0VSXzFfTUQpOworCQlweGFfZ3Bpb19tb2RlKEdQSU8xMDVfTUFHSUNJQU5fTENEX1BPV0VSXzJfTUQpOworCQlweGFfZ3Bpb19tb2RlKEdQSU8xMDZfTUFHSUNJQU5fTENEX1BPV0VSXzNfTUQpOworCQlzZXRfcHhhX2ZiX2luZm8obGNkX3NlbGVjdCA/ICZzYW1zdW5nX2luZm8gOiAmdG9wcG9seV9pbmZvKTsKKwl9IGVsc2UKKwkJcHJfZXJyKCJMQ0QgZGV0ZWN0aW9uOiBDUExEIG1hcHBpbmcgZmFpbGVkXG4iKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IDM0NWMzZGUuLjE4ZDQ3Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDAsMTYgKzQyLDk0IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTI3eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21haW5zdG9uZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pMmMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcmRhLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvb2hjaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTI3eF9rZXlwYWQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1haW5zdG9uZV9waW5fY29uZmlnW10gPSB7CisJLyogQ2hpcCBTZWxlY3QgKi8KKwlHUElPMTVfbkNTXzEsCisKKwkvKiBMQ0QgLSAxNmJwcCBBY3RpdmUgVEZUICovCisJR1BJTzU4X0xDRF9MRERfMCwKKwlHUElPNTlfTENEX0xERF8xLAorCUdQSU82MF9MQ0RfTEREXzIsCisJR1BJTzYxX0xDRF9MRERfMywKKwlHUElPNjJfTENEX0xERF80LAorCUdQSU82M19MQ0RfTEREXzUsCisJR1BJTzY0X0xDRF9MRERfNiwKKwlHUElPNjVfTENEX0xERF83LAorCUdQSU82Nl9MQ0RfTEREXzgsCisJR1BJTzY3X0xDRF9MRERfOSwKKwlHUElPNjhfTENEX0xERF8xMCwKKwlHUElPNjlfTENEX0xERF8xMSwKKwlHUElPNzBfTENEX0xERF8xMiwKKwlHUElPNzFfTENEX0xERF8xMywKKwlHUElPNzJfTENEX0xERF8xNCwKKwlHUElPNzNfTENEX0xERF8xNSwKKwlHUElPNzRfTENEX0ZDTEssCisJR1BJTzc1X0xDRF9MQ0xLLAorCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPNzdfTENEX0JJQVMsCisJR1BJTzE2X1BXTTBfT1VULAkvKiBCYWNrbGlnaHQgKi8KKworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU8xMTJfTU1DX0NNRCwKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCisJLyogVVNCIEhvc3QgUG9ydCAxICovCisJR1BJTzg4X1VTQkgxX1BXUiwKKwlHUElPODlfVVNCSDFfUEVOLAorCisJLyogUEMgQ2FyZCAqLworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPNTRfblBDRV8yLAorCUdQSU83OV9QU0tUU0VMLAorCUdQSU81NV9uUFJFRywKKwlHUElPNTZfblBXQUlULAorCUdQSU81N19uSU9JUzE2LAorCisJLyogQUM5NyAqLworCUdQSU80NV9BQzk3X1NZU0NMSywKKworCS8qIEtleXBhZCAqLworCUdQSU85M19LUF9ES0lOXzAJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOTRfS1BfREtJTl8xCXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzk1X0tQX0RLSU5fMgl8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8xMDBfS1BfTUtJTl8wCXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMV9LUF9NS0lOXzEJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMTAyX0tQX01LSU5fMgl8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85N19LUF9NS0lOXzMJfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOThfS1BfTUtJTl80CXwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzk5X0tQX01LSU5fNQl8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8xMDNfS1BfTUtPVVRfMCwKKwlHUElPMTA0X0tQX01LT1VUXzEsCisJR1BJTzEwNV9LUF9NS09VVF8yLAorCUdQSU8xMDZfS1BfTUtPVVRfMywKKwlHUElPMTA3X0tQX01LT1VUXzQsCisJR1BJTzEwOF9LUF9NS09VVF81LAorCUdQSU85Nl9LUF9NS09VVF82LAorCisJLyogR1BJTyAqLworCUdQSU8xX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAorfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFpbnN0b25lX2lycV9lbmFibGVkOwogCkBAIC0yNzgsMTMgKzM1OCwxMyBAQAogCSAgICBibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKIAkJYnJpZ2h0bmVzcyA9IDA7CiAKLQlpZiAoYnJpZ2h0bmVzcyAhPSAwKSB7Ci0JCXB4YV9ncGlvX21vZGUoR1BJTzE2X1BXTTBfTUQpOworCWlmIChicmlnaHRuZXNzICE9IDApCiAJCXB4YV9zZXRfY2tlbihDS0VOX1BXTTAsIDEpOwotCX0KKwogCVBXTV9DVFJMMCA9IDA7CiAJUFdNX1BXRFVUWTAgPSBicmlnaHRuZXNzOwogCVBXTV9QRVJWQUwwID0gYmwtPnByb3BzLm1heF9icmlnaHRuZXNzOworCiAJaWYgKGJyaWdodG5lc3MgPT0gMCkKIAkJcHhhX3NldF9ja2VuKENLRU5fUFdNMCwgMCk7CiAJcmV0dXJuIDA7IC8qIHBvaW50bGVzcyByZXR1cm4gdmFsdWUgKi8KQEAgLTM2MiwxNiArNDQyLDYgQEAKIHsKIAlpbnQgZXJyOwogCi0JLyoKLQkgKiBzZXR1cCBHUElPIGZvciBQWEEyN3ggTU1DIGNvbnRyb2xsZXIKLQkgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU8zMl9NTUNDTEtfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzExMl9NTUNDTURfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzkyX01NQ0RBVDBfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzEwOV9NTUNEQVQxX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU8xMTBfTU1DREFUMl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMTExX01NQ0RBVDNfTUQpOwotCiAJLyogbWFrZSBzdXJlIFNEL01lbW9yeSBTdGljayBtdWx0aXBsZXhlcidzIHNpZ25hbHMKIAkgKiBhcmUgcm91dGVkIHRvIE1NQyBjb250cm9sbGVyCiAJICovCkBAIC0zOTAsMTEgKzQ2MCwxMSBAQAogCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9uXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9uXG4iLCBfX2Z1bmNfXyk7CiAJCU1TVF9NU0NXUjEgfD0gTVNUX01TQ1dSMV9NTUNfT047CiAJCU1TVF9NU0NXUjEgJj0gfk1TVF9NU0NXUjFfTVNfU0VMOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9mZlxuIiwgX19mdW5jX18pOwogCQlNU1RfTVNDV1IxICY9IH5NU1RfTVNDV1IxX01NQ19PTjsKIAl9CiB9CkBAIC00MzQsMTkgKzUwNCwzOSBAQAogCS50cmFuc2NlaXZlcl9tb2RlID0gbWFpbnN0b25lX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2tleXNfYnV0dG9uW10gPSB7CisJWzBdID0geworCQkuZGVzYwk9ICJ3YWtldXAiLAorCQkuY29kZQk9IEtFWV9TVVNQRU5ELAorCQkudHlwZQk9IEVWX0tFWSwKKwkJLmdwaW8JPSAxLAorCQkud2FrZXVwCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBtYWluc3RvbmVfZ3Bpb19rZXlzID0geworCS5idXR0b25zCT0gZ3Bpb19rZXlzX2J1dHRvbiwKKwkubmJ1dHRvbnMJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXN0X2dwaW9fa2V5c19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZtYWluc3RvbmVfZ3Bpb19rZXlzLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNtYzkxeF9kZXZpY2UsCiAJJm1zdF9hdWRpb19kZXZpY2UsCiAJJm1zdF9mbGFzaF9kZXZpY2VbMF0sCiAJJm1zdF9mbGFzaF9kZXZpY2VbMV0sCisJJm1zdF9ncGlvX2tleXNfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBtYWluc3RvbmVfb2hjaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQkvKiBzZXR1cCBQb3J0MSBHUElPIHBpbi4gKi8KLQlweGFfZ3Bpb19tb2RlKCA4OCB8IEdQSU9fQUxUX0ZOXzFfSU4pOwkvKiBVU0JIUFdSMSAqLwotCXB4YV9ncGlvX21vZGUoIDg5IHwgR1BJT19BTFRfRk5fMl9PVVQpOwkvKiBVU0JIUEVOMSAqLwotCiAJLyogU2V0IHRoZSBQb3dlciBDb250cm9sIFBvbGFyaXR5IExvdyBhbmQgUG93ZXIgU2Vuc2UKIAkgICBQb2xhcml0eSBMb3cgdG8gYWN0aXZlIGxvdy4gKi8KIAlVSENIUiA9IChVSENIUiB8IFVIQ0hSX1BDUEwgfCBVSENIUl9QU1BMKSAmCkBAIC00NjAsMTAgKzU1MCw2MyBAQAogCS5pbml0CQk9IG1haW5zdG9uZV9vaGNpX2luaXQsCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFUykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWFpbnN0b25lX21hdHJpeF9rZXlzW10gPSB7CisJS0VZKDAsIDAsIEtFWV9BKSwgS0VZKDEsIDAsIEtFWV9CKSwgS0VZKDIsIDAsIEtFWV9DKSwKKwlLRVkoMywgMCwgS0VZX0QpLCBLRVkoNCwgMCwgS0VZX0UpLCBLRVkoNSwgMCwgS0VZX0YpLAorCUtFWSgwLCAxLCBLRVlfRyksIEtFWSgxLCAxLCBLRVlfSCksIEtFWSgyLCAxLCBLRVlfSSksCisJS0VZKDMsIDEsIEtFWV9KKSwgS0VZKDQsIDEsIEtFWV9LKSwgS0VZKDUsIDEsIEtFWV9MKSwKKwlLRVkoMCwgMiwgS0VZX00pLCBLRVkoMSwgMiwgS0VZX04pLCBLRVkoMiwgMiwgS0VZX08pLAorCUtFWSgzLCAyLCBLRVlfUCksIEtFWSg0LCAyLCBLRVlfUSksIEtFWSg1LCAyLCBLRVlfUiksCisJS0VZKDAsIDMsIEtFWV9TKSwgS0VZKDEsIDMsIEtFWV9UKSwgS0VZKDIsIDMsIEtFWV9VKSwKKwlLRVkoMywgMywgS0VZX1YpLCBLRVkoNCwgMywgS0VZX1cpLCBLRVkoNSwgMywgS0VZX1gpLAorCUtFWSgyLCA0LCBLRVlfWSksIEtFWSgzLCA0LCBLRVlfWiksCisKKwlLRVkoMCwgNCwgS0VZX0RPVCksCS8qIC4gKi8KKwlLRVkoMSwgNCwgS0VZX0NMT1NFKSwJLyogQCAqLworCUtFWSg0LCA0LCBLRVlfU0xBU0gpLAorCUtFWSg1LCA0LCBLRVlfQkFDS1NMQVNIKSwKKwlLRVkoMCwgNSwgS0VZX0hPTUUpLAorCUtFWSgxLCA1LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoMiwgNSwgS0VZX1NQQUNFKSwKKwlLRVkoMywgNSwgS0VZX1NQQUNFKSwKKwlLRVkoNCwgNSwgS0VZX0VOVEVSKSwKKwlLRVkoNSwgNSwgS0VZX0JBQ0tTUEFDRSksCisKKwlLRVkoMCwgNiwgS0VZX1VQKSwKKwlLRVkoMSwgNiwgS0VZX0RPV04pLAorCUtFWSgyLCA2LCBLRVlfTEVGVCksCisJS0VZKDMsIDYsIEtFWV9SSUdIVCksCisJS0VZKDQsIDYsIEtFWV9TRUxFQ1QpLAorfTsKKworc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBtYWluc3RvbmVfa2V5cGFkX2luZm8gPSB7CisJLm1hdHJpeF9rZXlfcm93cwk9IDYsCisJLm1hdHJpeF9rZXlfY29scwk9IDcsCisJLm1hdHJpeF9rZXlfbWFwCQk9IG1haW5zdG9uZV9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUobWFpbnN0b25lX21hdHJpeF9rZXlzKSwKKworCS5lbmFibGVfcm90YXJ5MAkJPSAxLAorCS5yb3RhcnkwX3VwX2tleQkJPSBLRVlfVVAsCisJLnJvdGFyeTBfZG93bl9rZXkJPSBLRVlfRE9XTiwKKworCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDMwLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG1haW5zdG9uZV9pbml0X2tleXBhZCh2b2lkKQoreworCXB4YV9zZXRfa2V5cGFkX2luZm8oJm1haW5zdG9uZV9rZXlwYWRfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1haW5zdG9uZV9pbml0X2tleXBhZCh2b2lkKSB7fQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBtYWluc3RvbmVfaW5pdCh2b2lkKQogewogCWludCBTVzcgPSAwOyAgLyogRklYTUU6IGdldCBmcm9tIFNDUiAoTXN0IGRvYyBzZWN0aW9uIDMuMi4xLjEpICovCiAKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShtYWluc3RvbmVfcGluX2NvbmZpZykpOworCiAJbXN0X2ZsYXNoX2RhdGFbMF0ud2lkdGggPSAoQk9PVF9ERUYgJiAxKSA/IDIgOiA0OwogCW1zdF9mbGFzaF9kYXRhWzFdLndpZHRoID0gNDsKIApAQCAtNDgwLDMxICs2MjMsNiBAQAogCSAqLwogCUFSQl9DTlRSTCA9IEFSQl9DT1JFX1BBUksgfCAweDIzNDsKIAotCS8qCi0JICogT24gTWFpbnN0b25lLCB3ZSByb3V0ZSBBQzk3X1NZU0NMSyB2aWEgR1BJTzQ1IHRvCi0JICogdGhlIGF1ZGlvIGRhdWdodGVyIGNhcmQKLQkgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU80NV9TWVNDTEtfQUM5N19NRCk7Ci0KLQlHUFNSKEdQSU80OF9uUE9FKSA9Ci0JCUdQSU9fYml0KEdQSU80OF9uUE9FKSB8Ci0JCUdQSU9fYml0KEdQSU80OV9uUFdFKSB8Ci0JCUdQSU9fYml0KEdQSU81MF9uUElPUikgfAotCQlHUElPX2JpdChHUElPNTFfblBJT1cpIHwKLQkJR1BJT19iaXQoR1BJTzg1X25QQ0VfMSkgfAotCQlHUElPX2JpdChHUElPNTRfblBDRV8yKTsKLQotCXB4YV9ncGlvX21vZGUoR1BJTzQ4X25QT0VfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzQ5X25QV0VfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzUwX25QSU9SX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81MV9uUElPV19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPODVfblBDRV8xX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81NF9uUENFXzJfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzc5X3BTS1RTRUxfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU1X25QUkVHX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81Nl9uUFdBSVRfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU3X25JT0lTMTZfTUQpOwotCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKIAkvKiByZWFkaW5nIE1haW5zdG9uZSdzICJWaXJ0dWFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIiCkBAIC01MjAsNiArNjM4LDkgQEAKIAlweGFfc2V0X21jaV9pbmZvKCZtYWluc3RvbmVfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZtYWluc3RvbmVfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X29oY2lfaW5mbygmbWFpbnN0b25lX29oY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKworCW1haW5zdG9uZV9pbml0X2tleXBhZCgpOwogfQogCiAKQEAgLTUzNywyMyArNjU4LDkgQEAKIAlweGFfbWFwX2lvKCk7CiAJaW90YWJsZV9pbml0KG1haW5zdG9uZV9pb19kZXNjLCBBUlJBWV9TSVpFKG1haW5zdG9uZV9pb19kZXNjKSk7CiAKLQkvKiBpbml0aWFsaXplIHNsZWVwIG1vZGUgcmVncyAod2FrZS11cCBzb3VyY2VzLCBldGMpICovCi0JUEdTUjAgPSAweDAwMDA4ODAwOwotCVBHU1IxID0gMHgwMDAwMDAwMjsKLQlQR1NSMiA9IDB4MDAwMUZDMDA7Ci0JUEdTUjMgPSAweDAwMDAxRjgxOwotCVBXRVIgID0gMHhDMDAwMDAwMjsKLQlQUkVSICA9IDB4MDAwMDAwMDI7Ci0JUEZFUiAgPSAweDAwMDAwMDAyOwogIAkvKglmb3IgdXNlIEkgU1JBTSBhcyBmcmFtZWJ1ZmZlci4JKi8KICAJUFNMUiB8PSAweEYwNDsKICAJUENGUiA9IDB4NjY7Ci0gCS8qCUZvciBLZXlwYWQgd2FrZXVwLgkqLwotIAlLUEMgJj1+S1BDX0FTQUNUOwotIAlLUEMgfD1LUENfQVM7Ci0gCVBLV1IgID0gMHgwMDBGRDAwMDsKLSAJLyoJTmVlZCByZWFkIFBLV1IgYmFjayBhZnRlciBzZXQgaXQuCSovCi0gCVBLV1I7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoTUFJTlNUT05FLCAiSW50ZWwgSENEREJCVkEwIERldmVsb3BtZW50IFBsYXRmb3JtIChha2EgTWFpbnN0b25lKSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwOTdhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKKyAqCisgKiAgUFhBMnh4IHBpbiBtdXggY29uZmlndXJhdGlvbiBzdXBwb3J0CisgKgorICogIFRoZSBHUElPcyBvbiBQWEEyeHggY2FuIGJlIGNvbmZpZ3VyZWQgYXMgb25lIG9mIG1hbnkgYWx0ZXJuYXRlCisgKiAgZnVuY3Rpb25zLCB0aGlzIGlzIGJ5IGNvbmNlcHQgc2FtaWxhciB0byB0aGUgTUZQIGNvbmZpZ3VyYXRpb24KKyAqICBvbiBQWEEzeHgsICB3aGF0J3MgbW9yZSBpbXBvcnRhbnQsIHRoZSBsb3cgcG93ZXIgcGluIHN0YXRlIGFuZAorICogIHdha2V1cCBkZXRlY3Rpb24gYXJlIGFsc28gc3VwcG9ydGVkIGJ5IHRoZSBzYW1lIGZyYW1ld29yay4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTJ4eC5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjZGVmaW5lIFBHU1IoeCkJCV9fUkVHMigweDQwRjAwMDIwLCAoKHgpICYgMHg2MCkgPj4gMykKKworI2RlZmluZSBQV0VSX1dFMzUJKDEgPDwgMjQpCisKK3N0cnVjdCBncGlvX2Rlc2MgeworCXVuc2lnbmVkCXZhbGlkCQk6IDE7CisJdW5zaWduZWQJY2FuX3dha2V1cAk6IDE7CisJdW5zaWduZWQJa2V5cGFkX2dwaW8JOiAxOworCXVuc2lnbmVkIGludAltYXNrOyAvKiBiaXQgbWFzayBpbiBQV0VSIG9yIFBLV1IgKi8KKwl1bnNpZ25lZCBsb25nCWNvbmZpZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjIGdwaW9fZGVzY1tNRlBfUElOX0dQSU8xMjcgKyAxXTsKKworc3RhdGljIGludCBfX21mcF9jb25maWdfZ3Bpbyh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBsb25nIGMpCit7CisJdW5zaWduZWQgbG9uZyBnYWZyLCBtYXNrID0gR1BJT19iaXQoZ3Bpbyk7CisJaW50IGZuOworCisJZm4gPSBNRlBfQUYoYyk7CisJaWYgKGZuID4gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBhbHRlcm5hdGUgZnVuY3Rpb24gYW5kIGRpcmVjdGlvbiAqLworCWdhZnIgPSBHQUZSKGdwaW8pICYgfigweDMgPDwgKChncGlvICYgMHhmKSAqIDIpKTsKKwlHQUZSKGdwaW8pID0gZ2FmciB8ICAoZm4gIDw8ICgoZ3BpbyAmIDB4ZikgKiAyKSk7CisKKwlpZiAoYyAmIE1GUF9ESVJfT1VUKQorCQlHUERSKGdwaW8pIHw9IG1hc2s7CisJZWxzZQorCQlHUERSKGdwaW8pICY9IH5tYXNrOworCisJLyogbG93IHBvd2VyIHN0YXRlICovCisJc3dpdGNoIChjICYgTUZQX0xQTV9TVEFURV9NQVNLKSB7CisJY2FzZSBNRlBfTFBNX0RSSVZFX0hJR0g6CisJCVBHU1IoZ3BpbykgfD0gbWFzazsKKwkJYnJlYWs7CisJY2FzZSBNRlBfTFBNX0RSSVZFX0xPVzoKKwkJUEdTUihncGlvKSAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBNRlBfTFBNX0lOUFVUOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl93YXJuaW5nKCIlczogaW52YWxpZCBsb3cgcG93ZXIgc3RhdGUgZm9yIEdQSU8lZFxuIiwKKwkJCQlfX2Z1bmNfXywgZ3Bpbyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGdpdmUgZWFybHkgd2FybmluZyBpZiBNRlBfTFBNX0NBTl9XQUtFVVAgaXMgc2V0IG9uIHRoZQorCSAqIGNvbmZpZ3VyYXRpb25zIG9mIHRob3NlIHBpbnMgbm90IGFibGUgdG8gd2FrZXVwCisJICovCisJaWYgKChjICYgTUZQX0xQTV9DQU5fV0FLRVVQKSAmJiAhZ3Bpb19kZXNjW2dwaW9dLmNhbl93YWtldXApIHsKKwkJcHJfd2FybmluZygiJXM6IEdQSU8lZCB1bmFibGUgdG8gd2FrZXVwXG4iLAorCQkJCV9fZnVuY19fLCBncGlvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChjICYgTUZQX0xQTV9DQU5fV0FLRVVQKSAmJiAoYyAmIE1GUF9ESVJfT1VUKSkgeworCQlwcl93YXJuaW5nKCIlczogb3V0cHV0IEdQSU8lZCB1bmFibGUgdG8gd2FrZXVwXG4iLAorCQkJCV9fZnVuY19fLCBncGlvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcHhhMnh4X21mcF9jb25maWcodW5zaWduZWQgbG9uZyAqbWZwX2NmZ3MsIGludCBudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nICpjOworCWludCBpLCBncGlvOworCisJZm9yIChpID0gMCwgYyA9IG1mcF9jZmdzOyBpIDwgbnVtOyBpKyssIGMrKykgeworCisJCWdwaW8gPSBtZnBfdG9fZ3BpbyhNRlBfUElOKCpjKSk7CisKKwkJaWYgKCFncGlvX2Rlc2NbZ3Bpb10udmFsaWQpIHsKKwkJCXByX3dhcm5pbmcoIiVzOiBHUElPJWQgaXMgaW52YWxpZCBwaW5cbiIsCisJCQkJX19mdW5jX18sIGdwaW8pOworCQkJY29udGludWU7CisJCX0KKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJZ3Bpb19kZXNjW2dwaW9dLmNvbmZpZyA9ICpjOworCQlfX21mcF9jb25maWdfZ3BpbyhncGlvLCAqYyk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KK30KKworaW50IGdwaW9fc2V0X3dha2UodW5zaWduZWQgaW50IGdwaW8sIHVuc2lnbmVkIGludCBvbikKK3sKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpkOworCXVuc2lnbmVkIGxvbmcgYzsKKworCWlmIChncGlvID4gbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPMTI3KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkID0gJmdwaW9fZGVzY1tncGlvXTsKKwljID0gZC0+Y29uZmlnOworCisJaWYgKCFkLT52YWxpZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZC0+a2V5cGFkX2dwaW8pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGQtPmNhbl93YWtldXAgJiYgKGMgJiBNRlBfTFBNX0NBTl9XQUtFVVApKSB7CisJCWlmIChvbikgeworCQkJUFdFUiB8PSBkLT5tYXNrOworCisJCQlpZiAoYyAmIE1GUF9MUE1fRURHRV9SSVNFKQorCQkJCVBSRVIgfD0gZC0+bWFzazsKKwkJCWVsc2UKKwkJCQlQUkVSICY9IH5kLT5tYXNrOworCisJCQlpZiAoYyAmIE1GUF9MUE1fRURHRV9GQUxMKQorCQkJCVBGRVIgfD0gZC0+bWFzazsKKwkJCWVsc2UKKwkJCQlQRkVSICY9IH5kLT5tYXNrOworCQl9IGVsc2UgeworCQkJUFdFUiAmPSB+ZC0+bWFzazsKKwkJCVBSRVIgJj0gfmQtPm1hc2s7CisJCQlQRkVSICY9IH5kLT5tYXNrOworCQl9CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BYQTI1eAorc3RhdGljIGludCBfX2luaXQgcHhhMjV4X21mcF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoY3B1X2lzX3B4YTI1eCgpKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gODQ7IGkrKykKKwkJCWdwaW9fZGVzY1tpXS52YWxpZCA9IDE7CisKKwkJZm9yIChpID0gMDsgaSA8PSAxNTsgaSsrKSB7CisJCQlncGlvX2Rlc2NbaV0uY2FuX3dha2V1cCA9IDE7CisJCQlncGlvX2Rlc2NbaV0ubWFzayA9IEdQSU9fYml0KGkpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9Citwb3N0Y29yZV9pbml0Y2FsbChweGEyNXhfbWZwX2luaXQpOworI2VuZGlmIC8qIENPTkZJR19QWEEyNXggKi8KKworI2lmZGVmIENPTkZJR19QWEEyN3gKK3N0YXRpYyBpbnQgcHhhMjd4X3Brd3JfZ3Bpb1tdID0geworCTEzLCAxNiwgMTcsIDM0LCAzNiwgMzcsIDM4LCAzOSwgOTAsIDkxLCA5MywgOTQsCisJOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyCit9OworCitpbnQga2V5cGFkX3NldF93YWtlKHVuc2lnbmVkIGludCBvbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZ3BpbywgbWFzayA9IDA7CisKKwlpZiAoIW9uKSB7CisJCVBLV1IgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGEyN3hfcGt3cl9ncGlvKTsgaSsrKSB7CisKKwkJZ3BpbyA9IHB4YTI3eF9wa3dyX2dwaW9baV07CisKKwkJaWYgKGdwaW9fZGVzY1tncGlvXS5jb25maWcgJiBNRlBfTFBNX0NBTl9XQUtFVVApCisJCQltYXNrIHw9IGdwaW9fZGVzY1tncGlvXS5tYXNrOworCX0KKworCVBLV1IgPSBtYXNrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBweGEyN3hfbWZwX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgZ3BpbzsKKworCWlmIChjcHVfaXNfcHhhMjd4KCkpIHsKKwkJZm9yIChpID0gMDsgaSA8PSAxMjA7IGkrKykgeworCQkJLyogc2tpcCBHUElPMiwgNSwgNiwgNywgOCwgdGhleSBhcmUgbm90CisJCQkgKiB2YWxpZCBwaW5zIGFsbG93IGNvbmZpZ3VyYXRpb24KKwkJCSAqLworCQkJaWYgKGkgPT0gMiB8fCBpID09IDUgfHwgaSA9PSA2IHx8CisJCQkgICAgaSA9PSA3IHx8IGkgPT0gOCkKKwkJCQljb250aW51ZTsKKworCQkJZ3Bpb19kZXNjW2ldLnZhbGlkID0gMTsKKwkJfQorCisJCS8qIEtleXBhZCBHUElPcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGEyN3hfcGt3cl9ncGlvKTsgaSsrKSB7CisJCQlncGlvID0gcHhhMjd4X3Brd3JfZ3Bpb1tpXTsKKwkJCWdwaW9fZGVzY1tncGlvXS5jYW5fd2FrZXVwID0gMTsKKwkJCWdwaW9fZGVzY1tncGlvXS5rZXlwYWRfZ3BpbyA9IDE7CisJCQlncGlvX2Rlc2NbZ3Bpb10ubWFzayA9IDEgPDwgaTsKKwkJfQorCisJCS8qIE92ZXJ3cml0ZSBHUElPMTMgYXMgYSBQV0VSIHdha2V1cCBzb3VyY2UgKi8KKwkJZm9yIChpID0gMDsgaSA8PSAxNTsgaSsrKSB7CisJCQkvKiBza2lwIEdQSU8yLCA1LCA2LCA3LCA4ICovCisJCQlpZiAoR1BJT19iaXQoaSkgJiAweDFlNCkKKwkJCQljb250aW51ZTsKKworCQkJZ3Bpb19kZXNjW2ldLmNhbl93YWtldXAgPSAxOworCQkJZ3Bpb19kZXNjW2ldLm1hc2sgPSBHUElPX2JpdChpKTsKKwkJfQorCisJCWdwaW9fZGVzY1szNV0uY2FuX3dha2V1cCA9IDE7CisJCWdwaW9fZGVzY1szNV0ubWFzayA9IFBXRVJfV0UzNTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKHB4YTI3eF9tZnBfaW5pdCk7CisjZW5kaWYgLyogQ09ORklHX1BYQTI3eCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNWIwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9tZnAuYworICoKKyAqIFBYQTN4eCBNdWx0aS1GdW5jdGlvbiBQaW4gU3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNYXJ2ZWxsIEludGVybmF0aW9uIEx0ZC4KKyAqCisgKiAyMDA3LTA4LTIxOiBlcmljIG1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4KKyAqICAgICAgICAgICAgIGluaXRpYWwgdmVyc2lvbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTN4eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTN4eC1yZWdzLmg+CisKKy8qIG1mcF9zcGluX2xvY2sgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBNRlAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbgorICogKG1vc3QgbGlrZWx5IGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uKSBpcyBhdG9taWMsIGFuZCB0aGF0CisgKiBtZnBfdGFibGVbXSBpcyBjb25zaXN0ZW50CisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZwX3NwaW5fbG9jayk7CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1mcHJfbW1pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKSZfX1JFRyhNRlBSX0JBU0UpOworCitzdHJ1Y3QgcHhhM3h4X21mcF9waW4geworCXVuc2lnbmVkIGxvbmcJY29uZmlnOwkJLyogLTEgZm9yIG5vdCBjb25maWd1cmVkICovCisJdW5zaWduZWQgbG9uZwltZnByX29mZjsJLyogTUZQUnh4IFJlZ2lzdGVyIG9mZnNldCAqLworCXVuc2lnbmVkIGxvbmcJbWZwcl9ydW47CS8qIFJ1bi1Nb2RlIFJlZ2lzdGVyIFZhbHVlICovCisJdW5zaWduZWQgbG9uZwltZnByX2xwbTsJLyogTG93IFBvd2VyIE1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhM3h4X21mcF9waW4gbWZwX3RhYmxlW01GUF9QSU5fTUFYXTsKKworLyogbWFwcGluZyBvZiBNRlBfTFBNXyogZGVmaW5pdGlvbnMgdG8gTUZQUl9MUE1fKiByZWdpc3RlciBiaXRzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX2xwbVtdID0geworCU1GUFJfTFBNX0lOUFVULAorCU1GUFJfTFBNX0RSSVZFX0xPVywKKwlNRlBSX0xQTV9EUklWRV9ISUdILAorCU1GUFJfTFBNX1BVTExfTE9XLAorCU1GUFJfTFBNX1BVTExfSElHSCwKKwlNRlBSX0xQTV9GTE9BVCwKK307CisKKy8qIG1hcHBpbmcgb2YgTUZQX1BVTExfKiBkZWZpbml0aW9ucyB0byBNRlBSX1BVTExfKiByZWdpc3RlciBiaXRzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX3B1bGxbXSA9IHsKKwlNRlBSX1BVTExfTk9ORSwKKwlNRlBSX1BVTExfTE9XLAorCU1GUFJfUFVMTF9ISUdILAorCU1GUFJfUFVMTF9CT1RILAorfTsKKworLyogbWFwcGluZyBvZiBNRlBfTFBNX0VER0VfKiBkZWZpbml0aW9ucyB0byBNRlBSX0VER0VfKiByZWdpc3RlciBiaXRzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX2VkZ2VbXSA9IHsKKwlNRlBSX0VER0VfTk9ORSwKKwlNRlBSX0VER0VfUklTRSwKKwlNRlBSX0VER0VfRkFMTCwKKwlNRlBSX0VER0VfQk9USCwKK307CisKKyNkZWZpbmUgbWZwcl9yZWFkbChvZmYpCQkJXAorCV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgKG9mZikpCisKKyNkZWZpbmUgbWZwcl93cml0ZWwob2ZmLCB2YWwpCQlcCisJX19yYXdfd3JpdGVsKHZhbCwgbWZwcl9tbWlvX2Jhc2UgKyAob2ZmKSkKKworI2RlZmluZSBtZnBfY29uZmlndXJlZChwKQkoKHApLT5jb25maWcgIT0gLTEpCisKKy8qCisgKiBwZXJmb3JtIGEgcmVhZC1iYWNrIG9mIGFueSBNRlBSIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIHByZXZpb3VzIHdyaXRpbmdzIGFyZSBmaW5pc2hlZAorICovCisjZGVmaW5lIG1mcHJfc3luYygpCSh2b2lkKV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19ydW4oc3RydWN0IHB4YTN4eF9tZnBfcGluICpwKQoreworCWlmIChtZnBfY29uZmlndXJlZChwKSkKKwkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfcnVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19scG0oc3RydWN0IHB4YTN4eF9tZnBfcGluICpwKQoreworCWlmIChtZnBfY29uZmlndXJlZChwKSkgeworCQl1bnNpZ25lZCBsb25nIG1mcHJfY2xyID0gKHAtPm1mcHJfcnVuICYgfk1GUFJfRURHRV9CT1RIKSB8IE1GUFJfRURHRV9DTEVBUjsKKwkJaWYgKG1mcHJfY2xyICE9IHAtPm1mcHJfcnVuKQorCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIG1mcHJfY2xyKTsKKwkJaWYgKHAtPm1mcHJfbHBtICE9IG1mcHJfY2xyKQorCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfbHBtKTsKKwl9Cit9CisKK3ZvaWQgcHhhM3h4X21mcF9jb25maWcodW5zaWduZWQgbG9uZyAqbWZwX2NmZ3MsIGludCBudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIG1mcF9jZmdzKyspIHsKKwkJdW5zaWduZWQgbG9uZyB0bXAsIGMgPSAqbWZwX2NmZ3M7CisJCXN0cnVjdCBweGEzeHhfbWZwX3BpbiAqcDsKKwkJaW50IHBpbiwgYWYsIGRydiwgbHBtLCBlZGdlLCBwdWxsOworCisJCXBpbiA9IE1GUF9QSU4oYyk7CisJCUJVR19PTihwaW4gPj0gTUZQX1BJTl9NQVgpOworCQlwID0gJm1mcF90YWJsZVtwaW5dOworCisJCWFmICA9IE1GUF9BRihjKTsKKwkJZHJ2ID0gTUZQX0RTKGMpOworCQlscG0gPSBNRlBfTFBNX1NUQVRFKGMpOworCQllZGdlID0gTUZQX0xQTV9FREdFKGMpOworCQlwdWxsID0gTUZQX1BVTEwoYyk7CisKKwkJLyogcnVuLW1vZGUgcHVsbCBzZXR0aW5ncyB3aWxsIGNvbmZsaWN0IHdpdGggTUZQUiBiaXRzIG9mCisJCSAqIGxvdyBwb3dlciBtb2RlIHN0YXRlLCAgY2FsY3VsYXRlIG1mcHJfcnVuIGFuZCBtZnByX2xwbQorCQkgKiBpbmRpdmlkdWFsbHkgaWYgcHVsbCAhPSBNRlBfUFVMTF9OT05FCisJCSAqLworCQl0bXAgPSBNRlBSX0FGX1NFTChhZikgfCBNRlBSX0RSSVZFKGRydik7CisKKwkJaWYgKGxpa2VseShwdWxsID09IE1GUF9QVUxMX05PTkUpKSB7CisJCQlwLT5tZnByX3J1biA9IHRtcCB8IG1mcHJfbHBtW2xwbV0gfCBtZnByX2VkZ2VbZWRnZV07CisJCQlwLT5tZnByX2xwbSA9IHAtPm1mcHJfcnVuOworCQl9IGVsc2UgeworCQkJcC0+bWZwcl9scG0gPSB0bXAgfCBtZnByX2xwbVtscG1dIHwgbWZwcl9lZGdlW2VkZ2VdOworCQkJcC0+bWZwcl9ydW4gPSB0bXAgfCBtZnByX3B1bGxbcHVsbF07CisJCX0KKworCQlwLT5jb25maWcgPSBjOyBfX21mcF9jb25maWdfcnVuKHApOworCX0KKworCW1mcHJfc3luYygpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKK30KKwordW5zaWduZWQgbG9uZyBweGEzeHhfbWZwX3JlYWQoaW50IG1mcCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CisKKwlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisJdmFsID0gbWZwcl9yZWFkbChtZnBfdGFibGVbbWZwXS5tZnByX29mZik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHZhbDsKK30KKwordm9pZCBweGEzeHhfbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisJbWZwcl93cml0ZWwobWZwX3RhYmxlW21mcF0ubWZwcl9vZmYsIHZhbCk7CisJbWZwcl9zeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCit2b2lkIF9faW5pdCBweGEzeHhfbWZwX2luaXRfYWRkcihzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCAqbWFwKQoreworCXN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwICpwOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlmb3IgKHAgPSBtYXA7IHAtPnN0YXJ0ICE9IE1GUF9QSU5fSU5WQUxJRDsgcCsrKSB7CisJCW9mZnNldCA9IHAtPm9mZnNldDsKKwkJaSA9IHAtPnN0YXJ0OworCisJCWRvIHsKKwkJCW1mcF90YWJsZVtpXS5tZnByX29mZiA9IG9mZnNldDsKKwkJCW1mcF90YWJsZVtpXS5tZnByX3J1biA9IDA7CisJCQltZnBfdGFibGVbaV0ubWZwcl9scG0gPSAwOworCQkJb2Zmc2V0ICs9IDQ7IGkrKzsKKwkJfSB3aGlsZSAoKGkgPD0gcC0+ZW5kKSAmJiAocC0+ZW5kICE9IC0xKSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworfQorCit2b2lkIF9faW5pdCBweGEzeHhfaW5pdF9tZnAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IGkrKykKKwkJbWZwX3RhYmxlW2ldLmNvbmZpZyA9IC0xOworfQorCisjaWZkZWYgQ09ORklHX1BNCisvKgorICogQ29uZmlndXJlIHRoZSBNRlBzIGFwcHJvcHJpYXRlbHkgZm9yIHN1c3BlbmQvcmVzdW1lLgorICogRklYTUU6IHRoaXMgc2hvdWxkIHByb2JhYmx5IGRlcGVuZCBvbiB3aGljaCBzeXN0ZW0gc3RhdGUgd2UncmUKKyAqIGVudGVyaW5nIC0gZm9yIGluc3RhbmNlLCB3ZSBtaWdodCBub3Qgd2FudCB0byBwbGFjZSBNRlAgcGlucyBpbgorICogYSBwdWxsLWRvd24gbW9kZSBpZiB0aGV5J3JlIGFuIGFjdGl2ZSBsb3cgY2hpcCBzZWxlY3QsIGFuZCB3ZSdyZQorICoganVzdCBlbnRlcmluZyBzdGFuZGJ5LgorICovCitzdGF0aWMgaW50IHB4YTN4eF9tZnBfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZCwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWludCBwaW47CisKKwlmb3IgKHBpbiA9IDA7IHBpbiA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgcGluKyspIHsKKwkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwID0gJm1mcF90YWJsZVtwaW5dOworCQlfX21mcF9jb25maWdfbHBtKHApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGEzeHhfbWZwX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3sKKwlpbnQgcGluOworCisJZm9yIChwaW4gPSAwOyBwaW4gPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IHBpbisrKSB7CisJCXN0cnVjdCBweGEzeHhfbWZwX3BpbiAqcCA9ICZtZnBfdGFibGVbcGluXTsKKwkJX19tZnBfY29uZmlnX3J1bihwKTsKKwl9CisKKwkvKiBjbGVhciBSREggYml0IHdoZW4gTUZQIHNldHRpbmdzIGFyZSByZXN0b3JlZAorCSAqCisJICogTk9URTogdGhlIGxhc3QgMyBiaXRzIER4UyBhcmUgd3JpdGUtMS10by1jbGVhciBzbyBjYXJlZnVsbHkKKwkgKiBwcmVzZXJ2ZSB0aGVtIGhlcmUgaW4gY2FzZSB0aGV5IHdpbGwgYmUgcmVmZXJlbmNlZCBsYXRlcgorCSAqLworCUFTQ1IgJj0gfihBU0NSX1JESCB8IEFTQ1JfRDFTIHwgQVNDUl9EMlMgfCBBU0NSX0QzUyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHB4YTN4eF9tZnBfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHB4YTN4eF9tZnBfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YTN4eF9tZnBfc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gIm1mcCIsCisJLnN1c3BlbmQJPSBweGEzeHhfbWZwX3N1c3BlbmQsCisJLnJlc3VtZSAJPSBweGEzeHhfbWZwX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1mcF9pbml0X2RldmljZWZzKHZvaWQpCit7CisJaWYgKGNwdV9pc19weGEzeHgoKSkKKwkJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcHhhM3h4X21mcF9zeXNjbGFzcyk7CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKG1mcF9pbml0X2RldmljZWZzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21mcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODA5YWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL21mcC5jCi0gKgotICogUFhBM3h4IE11bHRpLUZ1bmN0aW9uIFBpbiBTdXBwb3J0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IE1hcnZlbGwgSW50ZXJuYXRpb24gTHRkLgotICoKLSAqIDIwMDctMDgtMjE6IGVyaWMgbWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPgotICogICAgICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9tZnAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhM3h4Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhM3h4LXJlZ3MuaD4KLQotLyogbWZwX3NwaW5fbG9jayBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IE1GUCByZWdpc3RlciBjb25maWd1cmF0aW9uCi0gKiAobW9zdCBsaWtlbHkgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24pIGlzIGF0b21pYywgYW5kIHRoYXQKLSAqIG1mcF90YWJsZVtdIGlzIGNvbnNpc3RlbnQKLSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhtZnBfc3Bpbl9sb2NrKTsKLQotc3RhdGljIHZvaWQgX19pb21lbSAqbWZwcl9tbWlvX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopJl9fUkVHKE1GUFJfQkFTRSk7Ci0KLXN0cnVjdCBweGEzeHhfbWZwX3BpbiB7Ci0JdW5zaWduZWQgbG9uZwljb25maWc7CQkvKiAtMSBmb3Igbm90IGNvbmZpZ3VyZWQgKi8KLQl1bnNpZ25lZCBsb25nCW1mcHJfb2ZmOwkvKiBNRlBSeHggUmVnaXN0ZXIgb2Zmc2V0ICovCi0JdW5zaWduZWQgbG9uZwltZnByX3J1bjsJLyogUnVuLU1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KLQl1bnNpZ25lZCBsb25nCW1mcHJfbHBtOwkvKiBMb3cgUG93ZXIgTW9kZSBSZWdpc3RlciBWYWx1ZSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBweGEzeHhfbWZwX3BpbiBtZnBfdGFibGVbTUZQX1BJTl9NQVhdOwotCi0vKiBtYXBwaW5nIG9mIE1GUF9MUE1fKiBkZWZpbml0aW9ucyB0byBNRlBSX0xQTV8qIHJlZ2lzdGVyIGJpdHMgKi8KLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIG1mcHJfbHBtW10gPSB7Ci0JTUZQUl9MUE1fSU5QVVQsCi0JTUZQUl9MUE1fRFJJVkVfTE9XLAotCU1GUFJfTFBNX0RSSVZFX0hJR0gsCi0JTUZQUl9MUE1fUFVMTF9MT1csCi0JTUZQUl9MUE1fUFVMTF9ISUdILAotCU1GUFJfTFBNX0ZMT0FULAotfTsKLQotLyogbWFwcGluZyBvZiBNRlBfUFVMTF8qIGRlZmluaXRpb25zIHRvIE1GUFJfUFVMTF8qIHJlZ2lzdGVyIGJpdHMgKi8KLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIG1mcHJfcHVsbFtdID0gewotCU1GUFJfUFVMTF9OT05FLAotCU1GUFJfUFVMTF9MT1csCi0JTUZQUl9QVUxMX0hJR0gsCi0JTUZQUl9QVUxMX0JPVEgsCi19OwotCi0vKiBtYXBwaW5nIG9mIE1GUF9MUE1fRURHRV8qIGRlZmluaXRpb25zIHRvIE1GUFJfRURHRV8qIHJlZ2lzdGVyIGJpdHMgKi8KLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIG1mcHJfZWRnZVtdID0gewotCU1GUFJfRURHRV9OT05FLAotCU1GUFJfRURHRV9SSVNFLAotCU1GUFJfRURHRV9GQUxMLAotCU1GUFJfRURHRV9CT1RILAotfTsKLQotI2RlZmluZSBtZnByX3JlYWRsKG9mZikJCQlcCi0JX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAob2ZmKSkKLQotI2RlZmluZSBtZnByX3dyaXRlbChvZmYsIHZhbCkJCVwKLQlfX3Jhd193cml0ZWwodmFsLCBtZnByX21taW9fYmFzZSArIChvZmYpKQotCi0jZGVmaW5lIG1mcF9jb25maWd1cmVkKHApCSgocCktPmNvbmZpZyAhPSAtMSkKLQotLyoKLSAqIHBlcmZvcm0gYSByZWFkLWJhY2sgb2YgYW55IE1GUFIgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQotICogcHJldmlvdXMgd3JpdGluZ3MgYXJlIGZpbmlzaGVkCi0gKi8KLSNkZWZpbmUgbWZwcl9zeW5jKCkJKHZvaWQpX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19tZnBfY29uZmlnX3J1bihzdHJ1Y3QgcHhhM3h4X21mcF9waW4gKnApCi17Ci0JaWYgKG1mcF9jb25maWd1cmVkKHApKQotCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgcC0+bWZwcl9ydW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19tZnBfY29uZmlnX2xwbShzdHJ1Y3QgcHhhM3h4X21mcF9waW4gKnApCi17Ci0JaWYgKG1mcF9jb25maWd1cmVkKHApKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWZwcl9jbHIgPSAocC0+bWZwcl9ydW4gJiB+TUZQUl9FREdFX0JPVEgpIHwgTUZQUl9FREdFX0NMRUFSOwotCQlpZiAobWZwcl9jbHIgIT0gcC0+bWZwcl9ydW4pCi0JCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgbWZwcl9jbHIpOwotCQlpZiAocC0+bWZwcl9scG0gIT0gbWZwcl9jbHIpCi0JCQltZnByX3dyaXRlbChwLT5tZnByX29mZiwgcC0+bWZwcl9scG0pOwotCX0KLX0KLQotdm9pZCBweGEzeHhfbWZwX2NvbmZpZyh1bnNpZ25lZCBsb25nICptZnBfY2ZncywgaW50IG51bSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgbWZwX2NmZ3MrKykgewotCQl1bnNpZ25lZCBsb25nIHRtcCwgYyA9ICptZnBfY2ZnczsKLQkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwOwotCQlpbnQgcGluLCBhZiwgZHJ2LCBscG0sIGVkZ2UsIHB1bGw7Ci0KLQkJcGluID0gTUZQX1BJTihjKTsKLQkJQlVHX09OKHBpbiA+PSBNRlBfUElOX01BWCk7Ci0JCXAgPSAmbWZwX3RhYmxlW3Bpbl07Ci0KLQkJYWYgID0gTUZQX0FGKGMpOwotCQlkcnYgPSBNRlBfRFMoYyk7Ci0JCWxwbSA9IE1GUF9MUE1fU1RBVEUoYyk7Ci0JCWVkZ2UgPSBNRlBfTFBNX0VER0UoYyk7Ci0JCXB1bGwgPSBNRlBfUFVMTChjKTsKLQotCQkvKiBydW4tbW9kZSBwdWxsIHNldHRpbmdzIHdpbGwgY29uZmxpY3Qgd2l0aCBNRlBSIGJpdHMgb2YKLQkJICogbG93IHBvd2VyIG1vZGUgc3RhdGUsICBjYWxjdWxhdGUgbWZwcl9ydW4gYW5kIG1mcHJfbHBtCi0JCSAqIGluZGl2aWR1YWxseSBpZiBwdWxsICE9IE1GUF9QVUxMX05PTkUKLQkJICovCi0JCXRtcCA9IE1GUFJfQUZfU0VMKGFmKSB8IE1GUFJfRFJJVkUoZHJ2KTsKLQotCQlpZiAobGlrZWx5KHB1bGwgPT0gTUZQX1BVTExfTk9ORSkpIHsKLQkJCXAtPm1mcHJfcnVuID0gdG1wIHwgbWZwcl9scG1bbHBtXSB8IG1mcHJfZWRnZVtlZGdlXTsKLQkJCXAtPm1mcHJfbHBtID0gcC0+bWZwcl9ydW47Ci0JCX0gZWxzZSB7Ci0JCQlwLT5tZnByX2xwbSA9IHRtcCB8IG1mcHJfbHBtW2xwbV0gfCBtZnByX2VkZ2VbZWRnZV07Ci0JCQlwLT5tZnByX3J1biA9IHRtcCB8IG1mcHJfcHVsbFtwdWxsXTsKLQkJfQotCi0JCXAtPmNvbmZpZyA9IGM7IF9fbWZwX2NvbmZpZ19ydW4ocCk7Ci0JfQotCi0JbWZwcl9zeW5jKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi11bnNpZ25lZCBsb25nIHB4YTN4eF9tZnBfcmVhZChpbnQgbWZwKQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKLQotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQl2YWwgPSBtZnByX3JlYWRsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi12b2lkIHB4YTN4eF9tZnBfd3JpdGUoaW50IG1mcCwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQltZnByX3dyaXRlbChtZnBfdGFibGVbbWZwXS5tZnByX29mZiwgdmFsKTsKLQltZnByX3N5bmMoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgX19pbml0IHB4YTN4eF9tZnBfaW5pdF9hZGRyKHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwICptYXApCi17Ci0Jc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgKnA7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQsIGZsYWdzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLQotCWZvciAocCA9IG1hcDsgcC0+c3RhcnQgIT0gTUZQX1BJTl9JTlZBTElEOyBwKyspIHsKLQkJb2Zmc2V0ID0gcC0+b2Zmc2V0OwotCQlpID0gcC0+c3RhcnQ7Ci0KLQkJZG8gewotCQkJbWZwX3RhYmxlW2ldLm1mcHJfb2ZmID0gb2Zmc2V0OwotCQkJbWZwX3RhYmxlW2ldLm1mcHJfcnVuID0gMDsKLQkJCW1mcF90YWJsZVtpXS5tZnByX2xwbSA9IDA7Ci0JCQlvZmZzZXQgKz0gNDsgaSsrOwotCQl9IHdoaWxlICgoaSA8PSBwLT5lbmQpICYmIChwLT5lbmQgIT0gLTEpKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgX19pbml0IHB4YTN4eF9pbml0X21mcCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgaSsrKQotCQltZnBfdGFibGVbaV0uY29uZmlnID0gLTE7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLS8qCi0gKiBDb25maWd1cmUgdGhlIE1GUHMgYXBwcm9wcmlhdGVseSBmb3Igc3VzcGVuZC9yZXN1bWUuCi0gKiBGSVhNRTogdGhpcyBzaG91bGQgcHJvYmFibHkgZGVwZW5kIG9uIHdoaWNoIHN5c3RlbSBzdGF0ZSB3ZSdyZQotICogZW50ZXJpbmcgLSBmb3IgaW5zdGFuY2UsIHdlIG1pZ2h0IG5vdCB3YW50IHRvIHBsYWNlIE1GUCBwaW5zIGluCi0gKiBhIHB1bGwtZG93biBtb2RlIGlmIHRoZXkncmUgYW4gYWN0aXZlIGxvdyBjaGlwIHNlbGVjdCwgYW5kIHdlJ3JlCi0gKiBqdXN0IGVudGVyaW5nIHN0YW5kYnkuCi0gKi8KLXN0YXRpYyBpbnQgcHhhM3h4X21mcF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JaW50IHBpbjsKLQotCWZvciAocGluID0gMDsgcGluIDwgQVJSQVlfU0laRShtZnBfdGFibGUpOyBwaW4rKykgewotCQlzdHJ1Y3QgcHhhM3h4X21mcF9waW4gKnAgPSAmbWZwX3RhYmxlW3Bpbl07Ci0JCV9fbWZwX2NvbmZpZ19scG0ocCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHB4YTN4eF9tZnBfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkKQotewotCWludCBwaW47Ci0KLQlmb3IgKHBpbiA9IDA7IHBpbiA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgcGluKyspIHsKLQkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwID0gJm1mcF90YWJsZVtwaW5dOwotCQlfX21mcF9jb25maWdfcnVuKHApOwotCX0KLQotCS8qIGNsZWFyIFJESCBiaXQgd2hlbiBNRlAgc2V0dGluZ3MgYXJlIHJlc3RvcmVkCi0JICoKLQkgKiBOT1RFOiB0aGUgbGFzdCAzIGJpdHMgRHhTIGFyZSB3cml0ZS0xLXRvLWNsZWFyIHNvIGNhcmVmdWxseQotCSAqIHByZXNlcnZlIHRoZW0gaGVyZSBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZWZlcmVuY2VkIGxhdGVyCi0JICovCi0JQVNDUiAmPSB+KEFTQ1JfUkRIIHwgQVNDUl9EMVMgfCBBU0NSX0QyUyB8IEFTQ1JfRDNTKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBtZnBfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gIm1mcCIsCi0JLnN1c3BlbmQJPSBweGEzeHhfbWZwX3N1c3BlbmQsCi0JLnJlc3VtZSAJPSBweGEzeHhfbWZwX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBtZnBfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJm1mcF9zeXNjbGFzcywKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1mcF9pbml0X2RldmljZWZzKHZvaWQpCi17Ci0Jc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZtZnBfc3lzY2xhc3MpOwotCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJm1mcF9kZXZpY2UpOwotfQotZGV2aWNlX2luaXRjYWxsKG1mcF9pbml0X2RldmljZWZzKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYwppbmRleCBjMTQ2OTZiOS4uM2I5NDVlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcGNtMDI3Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKaW5kZXggM2RkYTE2YS4uZTZiZTlkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwpAQCAtMjMsOCArMjMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKworI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaTJjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2FtZXJhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wY205OTBfYmFzZWJvYXJkLmg+CkBAIC0yNTgsNiArMjY2LDc2IEBACiB9OwogCiAvKgorICogUFhBMjd4IENhbWVyYSBzcGVjaWZpYyBzdHVmZgorICovCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19QWEEyN3hfTU9EVUxFKQorc3RhdGljIGludCBwY205OTBfcHhhY2FtZXJhX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXB4YV9ncGlvX21vZGUoR1BJTzk4X0NJRl9ERF8wX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMDVfQ0lGX0REXzFfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzEwNF9DSUZfRERfMl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMTAzX0NJRl9ERF8zX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU85NV9DSUZfRERfNF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPOTRfQ0lGX0REXzVfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzkzX0NJRl9ERF82X01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMDhfQ0lGX0REXzdfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzEwN19DSUZfRERfOF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMTA2X0NJRl9ERF85X01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU80Ml9DSUZfTUNMS19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNDVfQ0lGX1BDTEtfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQzX0NJRl9GVl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNDRfQ0lGX0xWX01EKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ0lDUjQ6IFBDTEtfRU46CVBpeGVsIGNsb2NrIGlzIHN1cHBsaWVkIGJ5IHRoZSBzZW5zb3IKKyAqCU1DTEtfRU46CU1hc3RlciBjbG9jayBpcyBnZW5lcmF0ZWQgYnkgUFhBCisgKglQQ1A6CQlEYXRhIHNhbXBsZWQgb24gdGhlIGZhbGxpbmcgZWRnZSBvZiBwaXhlbCBjbG9jaworICovCitzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgcGNtOTkwX3B4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhID0geworCS5pbml0CT0gcGNtOTkwX3B4YWNhbWVyYV9pbml0LAorCS5mbGFncyAgPSBQWEFfQ0FNRVJBX01BU1RFUiB8IFBYQV9DQU1FUkFfREFUQVdJRFRIXzggfCBQWEFfQ0FNRVJBX0RBVEFXSURUSF8xMCB8CisJCVBYQV9DQU1FUkFfUENMS19FTiB8IFBYQV9DQU1FUkFfTUNMS19FTi8qIHwgUFhBX0NBTUVSQV9QQ1AqLywKKwkubWNsa18xMGtoeiA9IDEwMDAsCit9OworCisjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KKworc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgcGNhOTUzNl9kYXRhID0geworCS5ncGlvX2Jhc2UJPSBOUl9CVUlMVElOX0dQSU8gKyAxLAorfTsKKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rW10gPSB7CisJeworCQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KKwkJLmdwaW8JPSBOUl9CVUlMVElOX0dQSU8gKyAxLAorCX0sIHsKKwkJLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEIGFib3ZlICovCisJfQorfTsKKworLyogQm9hcmQgSTJDIGRldmljZXMuICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcGNtOTkwX2kyY19kZXZpY2VzW10gPSB7CisJeworCQkvKiBNdXN0IGluaXRpYWxpemUgYmVmb3JlIHRoZSBjYW1lcmEocykgKi8KKwkJSTJDX0JPQVJEX0lORk8oInBjYTk1M3giLCAweDQxKSwKKwkJLnR5cGUgPSAicGNhOTUzNiIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjYTk1MzZfZGF0YSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCisJCS50eXBlID0gIm10OXYwMjIiLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmtbMF0sIC8qIFdpdGggZXh0ZW5kZXIgKi8KKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDltMDAxIiwgMHg1ZCksCisJCS50eXBlID0gIm10OW0wMDEiLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmtbMF0sIC8qIFdpdGggZXh0ZW5kZXIgKi8KKwl9LAorfTsKKyNlbmRpZiAvKiBDT05GSUdfVklERU9fUFhBMjd4IHx8Q09ORklHX1ZJREVPX1BYQTI3eF9NT0RVTEUgKi8KKworLyoKICAqIEFDOTcgc3VwcG9ydAogICogTm90ZTogVGhlIGNvbm5lY3RlZCBBQzk3IG1peGVyIGFsc28gcmVwb3J0cyBpbnRlcnJ1cHRzIGF0IFBDTTk5MF9BQzk3X0lSUQogICovCkBAIC0zMjYsNSArNDA0LDE0IEBACiAJLyogVVNCIGhvc3QgKi8KIAlweGFfc2V0X29oY2lfaW5mbygmcGNtOTkwX29oY2lfcGxhdGZvcm1fZGF0YSk7CiAKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19QWEEyN3hfTU9EVUxFKQorCXB4YV9zZXRfY2FtZXJhX2luZm8oJnBjbTk5MF9weGFjYW1lcmFfcGxhdGZvcm1fZGF0YSk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBwY205OTBfaTJjX2RldmljZXMsCisJCUFSUkFZX1NJWkUocGNtOTkwX2kyY19kZXZpY2VzKSk7CisjZW5kaWYKKwogCXByaW50ayhLRVJOX0lORk8iUENNLTk5MCBFdmFsdWF0aW9uIGJhc2Vib2FyZCBpbml0aWFsaXplZFxuIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IDIwOWVhYmYuLmNhNWFjMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdWRjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCA1OTllNTNmLi5kOWI1NDUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgogCkBAIC0xMjksNiArMTMwLDggQEAKIAlJTklUX0NLRU4oIlNTUENMSyIsIE5TU1AsIDM2ODY0MDAsIDAsICZweGEyNXhfZGV2aWNlX25zc3AuZGV2KSwKIAlJTklUX0NLRU4oIlNTUENMSyIsIEFTU1AsIDM2ODY0MDAsIDAsICZweGEyNXhfZGV2aWNlX2Fzc3AuZGV2KSwKIAorCUlOSVRfQ0tFTigiQUM5N0NMSyIsICAgICBBQzk3LCAgICAgMjQ1NzYwMDAsIDAsIE5VTEwpLAorCiAJLyoKIAlJTklUX0NLRU4oIlBXTUNMSyIsICBQV00wLCAzNjg2NDAwLCAgMCwgTlVMTCksCiAJSU5JVF9DS0VOKCJQV01DTEsiLCAgUFdNMCwgMzY4NjQwMCwgIDAsIE5VTEwpLApAQCAtMjI4LDI0ICsyMzEsMTAgQEAKIHN0YXRpYyBpbnQgcHhhMjV4X3NldF93YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKIHsKIAlpbnQgZ3BpbyA9IElSUV9UT19HUElPKGlycSk7Ci0JdWludDMyX3QgZ3Bpb19iaXQsIG1hc2sgPSAwOworCXVpbnQzMl90IG1hc2sgPSAwOwogCi0JaWYgKGdwaW8gPj0gMCAmJiBncGlvIDw9IDE1KSB7Ci0JCWdwaW9fYml0ID0gR1BJT19iaXQoZ3Bpbyk7Ci0JCW1hc2sgPSBncGlvX2JpdDsKLQkJaWYgKG9uKSB7Ci0JCQlpZiAoR1JFUihncGlvKSB8IGdwaW9fYml0KQotCQkJCVBSRVIgfD0gZ3Bpb19iaXQ7Ci0JCQllbHNlCi0JCQkJUFJFUiAmPSB+Z3Bpb19iaXQ7Ci0KLQkJCWlmIChHRkVSKGdwaW8pIHwgZ3Bpb19iaXQpCi0JCQkJUEZFUiB8PSBncGlvX2JpdDsKLQkJCWVsc2UKLQkJCQlQRkVSICY9IH5ncGlvX2JpdDsKLQkJfQotCQlnb3RvIHNldF9wd2VyOwotCX0KKwlpZiAoZ3BpbyA+PSAwICYmIGdwaW8gPCA4NSkKKwkJcmV0dXJuIGdwaW9fc2V0X3dha2UoZ3Bpbywgb24pOwogCiAJaWYgKGlycSA9PSBJUlFfUlRDQWxybSkgewogCQltYXNrID0gUFdFUl9SVEM7CkBAIC0yNjUsOSArMjU0LDggQEAKIAogdm9pZCBfX2luaXQgcHhhMjV4X2luaXRfaXJxKHZvaWQpCiB7Ci0JcHhhX2luaXRfaXJxX2xvdygpOwotCXB4YV9pbml0X2lycV9ncGlvKDg1KTsKLQlweGFfaW5pdF9pcnFfc2V0X3dha2UocHhhMjV4X3NldF93YWtlKTsKKwlweGFfaW5pdF9pcnEoMzIsIHB4YTI1eF9zZXRfd2FrZSk7CisJcHhhX2luaXRfZ3Bpbyg4NSwgcHhhMjV4X3NldF93YWtlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnB4YTI1eF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKQEAgLTMyNSw0ICszMTMsNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChweGEyNXhfaW5pdCk7Citwb3N0Y29yZV9pbml0Y2FsbChweGEyNXhfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCmluZGV4IDQ2YTk1MWMzLi43YTI0NDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWZwLXB4YTI3eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgpAQCAtMTUxLDEyICsxNTIsMTUgQEAKIAogCUlOSVRfQ0tFTigiVVNCQ0xLIiwgVVNCSE9TVCwgNDgwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX29oY2kuZGV2KSwKIAlJTklUX0NLRU4oIkkyQ0NMSyIsIFBXUkkyQywgMTMwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX2kyY19wb3dlci5kZXYpLAotCUlOSVRfQ0tFTigiS0JEQ0xLIiwgS0VZUEFELCAzMjc2OCwgMCwgTlVMTCksCisJSU5JVF9DS0VOKCJLQkRDTEsiLCBLRVlQQUQsIDMyNzY4LCAwLCAmcHhhMjd4X2RldmljZV9rZXlwYWQuZGV2KSwKIAogCUlOSVRfQ0tFTigiU1NQQ0xLIiwgU1NQMSwgMTMwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX3NzcDEuZGV2KSwKIAlJTklUX0NLRU4oIlNTUENMSyIsIFNTUDIsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9zc3AyLmRldiksCiAJSU5JVF9DS0VOKCJTU1BDTEsiLCBTU1AzLCAxMzAwMDAwMCwgMCwgJnB4YTI3eF9kZXZpY2Vfc3NwMy5kZXYpLAogCisJSU5JVF9DS0VOKCJBQzk3Q0xLIiwgICAgIEFDOTcsICAgICAyNDU3NjAwMCwgMCwgTlVMTCksCisJSU5JVF9DS0VOKCJBQzk3Q09ORkNMSyIsIEFDOTdDT05GLCAyNDU3NjAwMCwgMCwgTlVMTCksCisKIAkvKgogCUlOSVRfQ0tFTigiUFdNQ0xLIiwgIFBXTTAsIDEzMDAwMDAwLCAwLCBOVUxMKSwKIAlJTklUX0NLRU4oIk1TTENMSyIsICBNU0wsICA0ODAwMDAwMCwgMCwgTlVMTCksCkBAIC0yODMsMzcgKzI4NywxNiBAQAogLyogUFhBMjd4OiAgVmFyaW91cyBncGlvcyBjYW4gaXNzdWUgd2FrZXVwIGV2ZW50cy4gIFRoaXMgbG9naWMgb25seQogICogaGFuZGxlcyB0aGUgc2ltcGxlIGNhc2VzLCBub3QgdGhlIFdFTVVYMiBhbmQgV0VNVVgzIG9wdGlvbnMKICAqLwotI2RlZmluZSBQWEEyN3hfR1BJT19OT1dBS0VfTUFTSyBcCi0gICAgICAgICgoMSA8PCA4KSB8ICgxIDw8IDcpIHwgKDEgPDwgNikgfCAoMSA8PCA1KSB8ICgxIDw8IDIpKQotI2RlZmluZSBXQUtFTUFTSyhncGlvKSBcCi0gICAgICAgICgoKGdwaW8pIDw9IDE1KSBcCi0gICAgICAgICAgICAgICAgID8gKCgxIDw8IChncGlvKSkgJiB+UFhBMjd4X0dQSU9fTk9XQUtFX01BU0spIFwKLSAgICAgICAgICAgICAgICAgOiAoKGdwaW8gPT0gMzUpID8gKDEgPDwgMjQpIDogMCkpCi0KIHN0YXRpYyBpbnQgcHhhMjd4X3NldF93YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKIHsKIAlpbnQgZ3BpbyA9IElSUV9UT19HUElPKGlycSk7CiAJdWludDMyX3QgbWFzazsKIAotCWlmICgoZ3BpbyA+PSAwICYmIGdwaW8gPD0gMTUpIHx8IChncGlvID09IDM1KSkgewotCQlpZiAoV0FLRU1BU0soZ3BpbykgPT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOworCWlmIChncGlvID49IDAgJiYgZ3BpbyA8IDEyOCkKKwkJcmV0dXJuIGdwaW9fc2V0X3dha2UoZ3Bpbywgb24pOwogCi0JCW1hc2sgPSBXQUtFTUFTSyhncGlvKTsKLQotCQlpZiAob24pIHsKLQkJCWlmIChHUkVSKGdwaW8pIHwgR1BJT19iaXQoZ3BpbykpCi0JCQkJUFJFUiB8PSBtYXNrOwotCQkJZWxzZQotCQkJCVBSRVIgJj0gfm1hc2s7Ci0KLQkJCWlmIChHRkVSKGdwaW8pIHwgR1BJT19iaXQoZ3BpbykpCi0JCQkJUEZFUiB8PSBtYXNrOwotCQkJZWxzZQotCQkJCVBGRVIgJj0gfm1hc2s7Ci0JCX0KLQkJZ290byBzZXRfcHdlcjsKLQl9CisJaWYgKGlycSA9PSBJUlFfS0VZUEFEKQorCQlyZXR1cm4ga2V5cGFkX3NldF93YWtlKG9uKTsKIAogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlFfUlRDQWxybToKQEAgLTMyNiw3ICszMDksNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLXNldF9wd2VyOgogCWlmIChvbikKIAkJUFdFUiB8PSBtYXNrOwogCWVsc2UKQEAgLTMzNywxMCArMzE5LDggQEAKIAogdm9pZCBfX2luaXQgcHhhMjd4X2luaXRfaXJxKHZvaWQpCiB7Ci0JcHhhX2luaXRfaXJxX2xvdygpOwotCXB4YV9pbml0X2lycV9oaWdoKCk7Ci0JcHhhX2luaXRfaXJxX2dwaW8oMTI4KTsKLQlweGFfaW5pdF9pcnFfc2V0X3dha2UocHhhMjd4X3NldF93YWtlKTsKKwlweGFfaW5pdF9pcnEoMzQsIHB4YTI3eF9zZXRfd2FrZSk7CisJcHhhX2luaXRfZ3BpbygxMjgsIHB4YTI3eF9zZXRfd2FrZSk7CiB9CiAKIC8qCkBAIC0zODYsMTAgKzM2Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBweGEyN3hfc3lzZGV2W10gPSB7CiAJewotCQkuaWQJPSAwLAotCQkuY2xzCT0gJnB4YV9pcnFfc3lzY2xhc3MsCi0JfSwgewotCQkuaWQJPSAxLAogCQkuY2xzCT0gJnB4YV9pcnFfc3lzY2xhc3MsCiAJfSwgewogCQkuY2xzCT0gJnB4YV9ncGlvX3N5c2NsYXNzLApAQCAtNDIwLDQgKzM5Niw0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3Vic3lzX2luaXRjYWxsKHB4YTI3eF9pbml0KTsKK3Bvc3Rjb3JlX2luaXRjYWxsKHB4YTI3eF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggN2NkOWVmOC4uZGRlMzU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTExMCw2ICsxMTAsMjUgQEAKIH0KIAogLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCBBQzk3IGNsb2NrIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B4YTN4eF9hYzk3X2dldHJhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IDMxMjAwMDAwMDsKKwl1bnNpZ25lZCBsb25nIGFjOTdfZGl2OworCisJYWM5N19kaXYgPSBBQzk3X0RJVjsKKworCS8qIFRoaXMgbWF5IGxvb3NlIHByZWNpc2lvbiBmb3Igc29tZSByYXRlcyBidXQgd29uJ3QgZm9yIHRoZQorCSAqIHN0YW5kYXJkIDI0LjU3Nk1Iei4KKwkgKi8KKwlyYXRlIC89IChhYzk3X2RpdiA+PiAxMikgJiAweDdmZmY7CisJcmF0ZSAqPSAoYWM5N19kaXYgJiAweGZmZik7CisKKwlyZXR1cm4gcmF0ZTsKK30KKworLyoKICAqIFJldHVybiB0aGUgY3VycmVudCBIU0lPIGJ1cyBjbG9jayBmcmVxdWVuY3kKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B4YTN4eF9oc2lvX2dldHJhdGUoc3RydWN0IGNsayAqY2xrKQpAQCAtMTI5LDI4ICsxNDgsMjAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAxdWwgPDwgKGNsay0+Y2tlbiAmIDB4MWYpOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQogCWlmIChjbGstPmNrZW4gPCAzMikKIAkJQ0tFTkEgfD0gbWFzazsKIAllbHNlCiAJCUNLRU5CIHw9IG1hc2s7Ci0KLQlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsa19weGEzeHhfY2tlbl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAxdWwgPDwgKGNsay0+Y2tlbiAmIDB4MWYpOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQogCWlmIChjbGstPmNrZW4gPCAzMikKIAkJQ0tFTkEgJj0gfm1hc2s7CiAJZWxzZQogCQlDS0VOQiAmPSB+bWFzazsKLQotCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9ja2VuX29wcyA9IHsKQEAgLTE2NCw2ICsxNzUsMjcgQEAKIAkuZ2V0cmF0ZQk9IGNsa19weGEzeHhfaHNpb19nZXRyYXRlLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9hYzk3X29wcyA9IHsKKwkuZW5hYmxlCQk9IGNsa19weGEzeHhfY2tlbl9lbmFibGUsCisJLmRpc2FibGUJPSBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZSwKKwkuZ2V0cmF0ZQk9IGNsa19weGEzeHhfYWM5N19nZXRyYXRlLAorfTsKKworc3RhdGljIHZvaWQgY2xrX3BvdXRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlPU0NDIHw9IE9TQ0NfUEVOOworfQorCitzdGF0aWMgdm9pZCBjbGtfcG91dF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlPU0NDICY9IH5PU0NDX1BFTjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3BvdXRfb3BzID0geworCS5lbmFibGUJCT0gY2xrX3BvdXRfZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX3BvdXRfZGlzYWJsZSwKK307CisKICNkZWZpbmUgUFhBM3h4X0NLRU4oX25hbWUsIF9ja2VuLCBfcmF0ZSwgX2RlbGF5LCBfZGV2KQlcCiAJewkJCQkJCVwKIAkJLm5hbWUJPSBfbmFtZSwJCQlcCkBAIC0xODMsOCArMjE1LDE2IEBACiAJfQogCiBzdGF0aWMgc3RydWN0IGNsayBweGEzeHhfY2xrc1tdID0gewotCVBYQTN4eF9DSygiTENEQ0xLIiwgTENELCAgICAmY2xrX3B4YTN4eF9oc2lvX29wcywgJnB4YV9kZXZpY2VfZmIuZGV2KSwKLQlQWEEzeHhfQ0soIkNBTUNMSyIsIENBTUVSQSwgJmNsa19weGEzeHhfaHNpb19vcHMsIE5VTEwpLAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gIkNMS19QT1VUIiwKKwkJLm9wcyAgICAgICAgICAgID0gJmNsa19wb3V0X29wcywKKwkJLnJhdGUgICAgICAgICAgID0gMTMwMDAwMDAsCisJCS5kZWxheSAgICAgICAgICA9IDcwLAorCX0sCisKKwlQWEEzeHhfQ0soIkxDRENMSyIsICBMQ0QsICAgICZjbGtfcHhhM3h4X2hzaW9fb3BzLCAmcHhhX2RldmljZV9mYi5kZXYpLAorCVBYQTN4eF9DSygiQ0FNQ0xLIiwgIENBTUVSQSwgJmNsa19weGEzeHhfaHNpb19vcHMsIE5VTEwpLAorCVBYQTN4eF9DSygiQUM5N0NMSyIsIEFDOTcsICAgJmNsa19weGEzeHhfYWM5N19vcHMsIE5VTEwpLAogCiAJUFhBM3h4X0NLRU4oIlVBUlRDTEsiLCBGRlVBUlQsIDE0ODU3MDAwLCAxLCAmcHhhX2RldmljZV9mZnVhcnQuZGV2KSwKIAlQWEEzeHhfQ0tFTigiVUFSVENMSyIsIEJUVUFSVCwgMTQ4NTcwMDAsIDEsICZweGFfZGV2aWNlX2J0dWFydC5kZXYpLApAQCAtMTkzLDYgKzIzMyw3IEBACiAJUFhBM3h4X0NLRU4oIkkyQ0NMSyIsIEkyQywgIDMyODQyMDAwLCAwLCAmcHhhX2RldmljZV9pMmMuZGV2KSwKIAlQWEEzeHhfQ0tFTigiVURDQ0xLIiwgVURDLCAgNDgwMDAwMDAsIDUsICZweGFfZGV2aWNlX3VkYy5kZXYpLAogCVBYQTN4eF9DS0VOKCJVU0JDTEsiLCBVU0JILCA0ODAwMDAwMCwgMCwgJnB4YTI3eF9kZXZpY2Vfb2hjaS5kZXYpLAorCVBYQTN4eF9DS0VOKCJLQkRDTEsiLCBLRVlQQUQsICAzMjc2OCwgMCwgJnB4YTI3eF9kZXZpY2Vfa2V5cGFkLmRldiksCiAKIAlQWEEzeHhfQ0tFTigiU1NQQ0xLIiwgU1NQMSwgMTMwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX3NzcDEuZGV2KSwKIAlQWEEzeHhfQ0tFTigiU1NQQ0xLIiwgU1NQMiwgMTMwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX3NzcDIuZGV2KSwKQEAgLTMxMyw4ICszNTQsMTAgQEAKIAkvKgogCSAqIERvbid0IHNsZWVwIGlmIG5vIHdha2V1cCBzb3VyY2VzIGFyZSBkZWZpbmVkCiAJICovCi0JaWYgKHdha2V1cF9zcmMgPT0gMCkKKwlpZiAod2FrZXVwX3NyYyA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IHN1c3BlbmRpbmc6IG5vIHdha2V1cCBzb3VyY2VzXG4iKTsKIAkJcmV0dXJuOworCX0KIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKQEAgLTQ1NCwxNSArNDk3LDkgQEAKIAogCXJldHVybiAwOwogfQotCi1zdGF0aWMgdm9pZCBweGEzeHhfaW5pdF9pcnFfcG0odm9pZCkKLXsKLQlweGFfaW5pdF9pcnFfc2V0X3dha2UocHhhM3h4X3NldF93YWtlKTsKLX0KLQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBweGEzeHhfaW5pdF9wbSh2b2lkKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHB4YTN4eF9pbml0X2lycV9wbSh2b2lkKSB7fQorI2RlZmluZSBweGEzeHhfc2V0X3dha2UJTlVMTAogI2VuZGlmCiAKIHZvaWQgX19pbml0IHB4YTN4eF9pbml0X2lycSh2b2lkKQpAQCAtNDczLDEwICs1MTAsOCBAQAogCXZhbHVlIHw9ICgxIDw8IDYpOwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJtY3IgcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuIjogOiJyIih2YWx1ZSkpOwogCi0JcHhhX2luaXRfaXJxX2xvdygpOwotCXB4YV9pbml0X2lycV9oaWdoKCk7Ci0JcHhhX2luaXRfaXJxX2dwaW8oMTI4KTsKLQlweGEzeHhfaW5pdF9pcnFfcG0oKTsKKwlweGFfaW5pdF9pcnEoNTYsIHB4YTN4eF9zZXRfd2FrZSk7CisJcHhhX2luaXRfZ3BpbygxMjgsIE5VTEwpOwogfQogCiAvKgpAQCAtNDk4LDExICs1MzMsOSBAQAogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhM3h4X3N5c2RldltdID0gewogCXsKLQkJLmlkCT0gMCwKIAkJLmNscwk9ICZweGFfaXJxX3N5c2NsYXNzLAogCX0sIHsKLQkJLmlkCT0gMSwKLQkJLmNscwk9ICZweGFfaXJxX3N5c2NsYXNzLAorCQkuY2xzCT0gJnB4YTN4eF9tZnBfc3lzY2xhc3MsCiAJfSwgewogCQkuY2xzCT0gJnB4YV9ncGlvX3N5c2NsYXNzLAogCX0sCkBAIC01NDAsNCArNTczLDQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdWJzeXNfaW5pdGNhbGwocHhhM3h4X2luaXQpOworcG9zdGNvcmVfaW5pdGNhbGwocHhhM3h4X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCmluZGV4IGY5ZDFiNjEuLjM0Y2Q1ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3BtLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KICNpbmNsdWRlICJzaGFycHNsLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDllNzc3M2YuLjYyYTAyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJkYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL29oY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0el9wbS5jCmluZGV4IDc0NWE0ZGMuLjdhN2Y1ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zcGl0ei5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlICJzaGFycHNsLmgiCiAKICNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVk9MVCAgICAgICAgIDB4OTkgIC8qIDIuOVYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCBmOTkxMTJkLi42NDU4ZjZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KQEAgLTMyLDcgKzMzLDkgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcmRhLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaTJjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdWRjLmg+CiAKQEAgLTQ3LDYgKzUwLDExMCBAQAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvc2FfcGluX2NvbmZpZ1tdID0geworCUdQSU83OF9uQ1NfMiwgLyogU2Nvb3AgKi8KKwlHUElPODBfbkNTXzQsIC8qIHRnNjM5M3hiICovCisJR1BJTzMzX25DU181LCAvKiBTY29vcCAqLworCisJLy8gR1BJTzc2IENBUkRfVkNDX09OMQorCisJR1BJTzE5X0dQSU8sIC8qIFJlc2V0IG91dCAqLworCUdQSU8xX1JTVCB8IFdBS0VVUF9PTl9FREdFX0ZBTEwsCisKKwlHUElPMF9HUElPIHwgV0FLRVVQX09OX0VER0VfRkFMTCwgLyogV0FLRV9VUCAqLworCUdQSU8yX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILCAvKiBBQ19JTiAqLworCUdQSU8zX0dQSU8gfCBXQUtFVVBfT05fRURHRV9GQUxMLCAvKiBSRUNPUkQgKi8KKwlHUElPNF9HUElPIHwgV0FLRVVQX09OX0VER0VfRkFMTCwgLyogU1lOQyAqLworCUdQSU8yMF9HUElPLCAvKiBFQVJfSU4gKi8KKwlHUElPMjJfR1BJTywgLyogT24gKi8KKworCUdQSU81X0dQSU8sIC8qIFVTQl9JTiAqLworCUdQSU8zMl9HUElPLCAvKiBQZW4gSVJRICovCisKKwlHUElPN19HUElPLCAvKiBKYWNrZXQgRGV0ZWN0ICovCisJR1BJTzE0X0dQSU8sIC8qIEJBVDBfQ1JHICovCisJR1BJTzEyX0dQSU8sIC8qIEJBVDFfQ1JHICovCisJR1BJTzE3X0dQSU8sIC8qIEJBVDBfTE9XICovCisJR1BJTzg0X0dQSU8sIC8qIEJBVDFfTE9XICovCisJR1BJTzM4X0dQSU8sIC8qIEJBVF9MT0NLICovCisKKwlHUElPMTFfM182TUh6LAorCUdQSU8xNV9HUElPLCAvKiBUQzYzOTNYQiBJUlEgKi8KKwlHUElPMThfUkRZLAorCUdQSU8yN19HUElPLCAvKiBMQ0QgU3luYyAqLworCisJLyogTU1DICovCisJR1BJTzZfTU1DX0NMSywKKwlHUElPOF9NTUNfQ1MwLAorCUdQSU85X0dQSU8sIC8qIERldGVjdCAqLworCS8vIEdQSU8xMCBuU0RfSU5UCisKKwkvKiBDRiAqLworCUdQSU8xM19HUElPLCAvKiBDRF9JUlEgKi8KKwlHUElPMjFfR1BJTywgLyogTWFpbiBTbG90IElSUSAqLworCUdQSU8zNl9HUElPLCAvKiBKYWNrZXQgU2xvdCBJUlEgKi8KKwlHUElPNDhfblBPRSwKKwlHUElPNDlfblBXRSwKKwlHUElPNTBfblBJT1IsCisJR1BJTzUxX25QSU9XLAorCUdQSU81Ml9uUENFXzEsCisJR1BJTzUzX25QQ0VfMiwKKwlHUElPNTRfblBTS1RTRUwsCisJR1BJTzU1X25QUkVHLAorCUdQSU81Nl9uUFdBSVQsCisJR1BJTzU3X25JT0lTMTYsCisKKwkvKiBBQzk3ICovCisJR1BJTzMxX0FDOTdfU1lOQywKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJLy8gR1BJTzc5IG5BVURfSVJRCisKKwkvKiBGRlVBUlQgKi8KKwlHUElPMzRfRkZVQVJUX1JYRCwKKwlHUElPMzVfRkZVQVJUX0NUUywKKwlHUElPMzdfRkZVQVJUX0RTUiwKKwlHUElPMzlfRkZVQVJUX1RYRCwKKwlHUElPNDBfRkZVQVJUX0RUUiwKKwlHUElPNDFfRkZVQVJUX1JUUywKKworCS8qIEJUVUFSVCAqLworCUdQSU80Ml9CVFVBUlRfUlhELAorCUdQSU80M19CVFVBUlRfVFhELAorCUdQSU80NF9CVFVBUlRfQ1RTLAorCUdQSU80NV9CVFVBUlRfUlRTLAorCisJLyogSXJEQSAqLworCUdQSU80Nl9TVFVBUlRfUlhELAorCUdQSU80N19TVFVBUlRfVFhELAorCisJLyogS2V5YmQgKi8KKwlHUElPNThfR1BJTywKKwlHUElPNTlfR1BJTywKKwlHUElPNjBfR1BJTywKKwlHUElPNjFfR1BJTywKKwlHUElPNjJfR1BJTywKKwlHUElPNjNfR1BJTywKKwlHUElPNjRfR1BJTywKKwlHUElPNjVfR1BJTywKKwlHUElPNjZfR1BJTywKKwlHUElPNjdfR1BJTywKKwlHUElPNjhfR1BJTywKKwlHUElPNjlfR1BJTywKKwlHUElPNzBfR1BJTywKKwlHUElPNzFfR1BJTywKKwlHUElPNzJfR1BJTywKKwlHUElPNzNfR1BJTywKKwlHUElPNzRfR1BJTywKKwlHUElPNzVfR1BJTywKKworCS8qIFNQSSAqLworCUdQSU84MV9TU1AyX0NMS19PVVQsCisJR1BJTzgyX1NTUDJfRlJNX09VVCwKKwlHUElPODNfU1NQMl9UWEQsCit9OworCiAvKgogICogU0NPT1AgRGV2aWNlCiAgKi8KQEAgLTYwLDExICsxNjcsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBzY29vcF9jb25maWcgdG9zYV9zY29vcF9zZXR1cCA9IHsKIAkuaW9fZGlyIAk9IFRPU0FfU0NPT1BfSU9fRElSLAotCS5pb19vdXQJCT0gVE9TQV9TQ09PUF9JT19PVVQsCi0KKwkuZ3Bpb19iYXNlCT0gVE9TQV9TQ09PUF9HUElPX0JBU0UsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRvc2FzY29vcF9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0b3Nhc2Nvb3BfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaGFycC1zY29vcCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CkBAIC04OCwxMCArMTk0LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2Nvb3BfY29uZmlnIHRvc2Ffc2Nvb3BfamNfc2V0dXAgPSB7CiAJLmlvX2RpciAJPSBUT1NBX1NDT09QX0pDX0lPX0RJUiwKLQkuaW9fb3V0CQk9IFRPU0FfU0NPT1BfSkNfSU9fT1VULAorCS5ncGlvX2Jhc2UJPSBUT1NBX1NDT09QX0pDX0dQSU9fQkFTRSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG9zYXNjb29wX2pjX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRvc2FzY29vcF9qY19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoYXJwLXNjb29wIiwKIAkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKQEAgLTExOCw1MCArMjI0LDE2IEBACiB9LAogfTsKIAotc3RhdGljIHZvaWQgdG9zYV9wY21jaWFfaW5pdCh2b2lkKQotewotCS8qIFNldHVwIGRlZmF1bHQgc3RhdGUgb2YgR1BJTyBvdXRwdXRzCi0JICAgYmVmb3JlIHdlIGVuYWJsZSB0aGVtIGFzIG91dHB1dHMuICovCi0JR1BTUihHUElPNDhfblBPRSkgPSBHUElPX2JpdChHUElPNDhfblBPRSkgfAotCQlHUElPX2JpdChHUElPNDlfblBXRSkgfCBHUElPX2JpdChHUElPNTBfblBJT1IpIHwKLQkJR1BJT19iaXQoR1BJTzUxX25QSU9XKSB8IEdQSU9fYml0KEdQSU81Ml9uUENFXzEpIHwKLQkJR1BJT19iaXQoR1BJTzUzX25QQ0VfMik7Ci0KLQlweGFfZ3Bpb19tb2RlKEdQSU80OF9uUE9FX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU80OV9uUFdFX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81MF9uUElPUl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTFfblBJT1dfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU1X25QUkVHX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81Nl9uUFdBSVRfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzU3X25JT0lTMTZfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzUyX25QQ0VfMV9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTNfblBDRV8yX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81NF9wU0tUU0VMX01EKTsKLX0KLQogc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnIHRvc2FfcGNtY2lhX2NvbmZpZyA9IHsKIAkuZGV2cyAgICAgICAgID0gJnRvc2FfcGNtY2lhX3Njb29wWzBdLAogCS5udW1fZGV2cyAgICAgPSAyLAotCS5wY21jaWFfaW5pdCAgPSB0b3NhX3BjbWNpYV9pbml0LAogfTsKIAogLyoKICAqIFVTQiBEZXZpY2UgQ29udHJvbGxlcgogICovCi1zdGF0aWMgdm9pZCB0b3NhX3VkY19jb21tYW5kKGludCBjbWQpCi17Ci0Jc3dpdGNoKGNtZCkJewotCQljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6Ci0JCQlzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2pjX2RldmljZS5kZXYsVE9TQV9TQ09PUF9KQ19VU0JfUFVMTFVQKTsKLQkJCWJyZWFrOwotCQljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6Ci0JCQlyZXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfamNfZGV2aWNlLmRldixUT1NBX1NDT09QX0pDX1VTQl9QVUxMVVApOwotCQkJYnJlYWs7Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHVkY19pbmZvIF9faW5pdGRhdGEgPSB7Ci0JLnVkY19jb21tYW5kCQk9IHRvc2FfdWRjX2NvbW1hbmQsCisJLmdwaW9fcHVsbHVwCQk9IFRPU0FfR1BJT19VU0JfUFVMTFVQLAogCS5ncGlvX3ZidXMJCT0gVE9TQV9HUElPX1VTQl9JTiwKIAkuZ3Bpb192YnVzX2ludmVydGVkCT0gMSwKIH07CkBAIC0xNzUsMTkgKzI0Nyw0NCBAQAogewogCWludCBlcnI7CiAKLQkvKiBzZXR1cCBHUElPIGZvciBQWEEyNXggTU1DIGNvbnRyb2xsZXIgKi8KLQlweGFfZ3Bpb19tb2RlKEdQSU82X01NQ0NMS19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPOF9NTUNDUzBfTUQpOwotCXB4YV9ncGlvX21vZGUoVE9TQV9HUElPX25TRF9ERVRFQ1QgfCBHUElPX0lOKTsKLQogCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoVE9TQV9JUlFfR1BJT19uU0RfREVURUNULCB0b3NhX2RldGVjdF9pbnQsCiAJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkJIk1NQy9TRCBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKKwkJZ290byBlcnJfaXJxOworCX0KIAorCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fU0RfV1AsICJzZF93cCIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBjYW4ndCByZXF1ZXN0IFNEX1dQIGdwaW9cbiIpOworCQlnb3RvIGVycl9ncGlvX3dwOworCX0KKwllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChUT1NBX0dQSU9fU0RfV1ApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2dwaW9fd3BfZGlyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19QV1JfT04sICJzZF9wd3IiKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBTRF9QV1IgZ3Bpb1xuIik7CisJCWdvdG8gZXJyX2dwaW9fcHdyOworCX0KKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX1BXUl9PTiwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZ3Bpb19wd3JfZGlyOworCisJcmV0dXJuIDA7CisKK2Vycl9ncGlvX3B3cl9kaXI6CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19QV1JfT04pOworZXJyX2dwaW9fcHdyOgorZXJyX2dwaW9fd3BfZGlyOgorCWdwaW9fZnJlZShUT1NBX0dQSU9fU0RfV1ApOworZXJyX2dwaW9fd3A6CisJZnJlZV9pcnEoVE9TQV9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKK2Vycl9pcnE6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTk2LDE5ICsyOTMsMjEgQEAKIAlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAogCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKLQkJc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9kZXZpY2UuZGV2LFRPU0FfU0NPT1BfUFdSX09OKTsKKwkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1BXUl9PTiwgMSk7CiAJfSBlbHNlIHsKLQkJcmVzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2RldmljZS5kZXYsVE9TQV9TQ09PUF9QV1JfT04pOworCQlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fUFdSX09OLCAwKTsKIAl9CiB9CiAKIHN0YXRpYyBpbnQgdG9zYV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKHJlYWRfc2Nvb3BfcmVnKCZ0b3Nhc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUikmVE9TQV9TQ09PUF9TRF9XUCk7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFRPU0FfR1BJT19TRF9XUCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRvc2FfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogeworCWdwaW9fZnJlZShUT1NBX0dQSU9fUFdSX09OKTsKKwlncGlvX2ZyZWUoVE9TQV9HUElPX1NEX1dQKTsKIAlmcmVlX2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwogfQogCkBAIC0yMjMsMjEgKzMyMiwzNiBAQAogLyoKICAqIElyZGEKICAqLworc3RhdGljIGludCB0b3NhX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fSVJfUE9XRVJEV04sICJJckRBIHBvd2VyZG93biIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX0lSX1BPV0VSRFdOLCAwKTsKKwlpZiAocmV0KQorCQlncGlvX2ZyZWUoVE9TQV9HUElPX0lSX1BPV0VSRFdOKTsKKworCXJldHVybiByZXQ7CisJfQorCitzdGF0aWMgdm9pZCB0b3NhX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShUT1NBX0dQSU9fSVJfUE9XRVJEV04pOworfQorCiBzdGF0aWMgdm9pZCB0b3NhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQogewotCWlmIChtb2RlICYgSVJfT0ZGKSB7Ci0JCXJlc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9kZXZpY2UuZGV2LFRPU0FfU0NPT1BfSVJfUE9XRVJEV04pOwotCQlweGFfZ3Bpb19tb2RlKEdQSU80N19TVFRYRHxHUElPX0RGTFRfTE9XKTsKLQkJcHhhX2dwaW9fbW9kZShHUElPNDdfU1RUWER8R1BJT19PVVQpOwotCX0gZWxzZSB7Ci0JCXB4YV9ncGlvX21vZGUoR1BJTzQ3X1NUVFhEX01EKTsKLQkJc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9kZXZpY2UuZGV2LFRPU0FfU0NPT1BfSVJfUE9XRVJEV04pOwotCX0KKwlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fSVJfUE9XRVJEV04sICEobW9kZSAmIElSX09GRikpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSB0b3NhX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKIAkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9PRkYsCiAJLnRyYW5zY2VpdmVyX21vZGUgPSB0b3NhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuc3RhcnR1cCA9IHRvc2FfaXJkYV9zdGFydHVwLAorCS5zaHV0ZG93biA9IHRvc2FfaXJkYV9zaHV0ZG93biwKIH07CiAKIC8qCkBAIC0yNDksMTIgKzM2MywyOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHRvc2FfZ3Bpb19rZXlzW10gPSB7CisJLyoKKwkgKiBUd28gZm9sbG93aW5nIGtleXMgYXJlIGRpcmVjdGx5IHRpZWQgdG8gIk9OIiBidXR0b24gb2YgdG9zYS4gV2h5PworCSAqIFRoZSBmaXJzdCBvbmUgY2FuIGJlIHVzZWQgYXMgYSB3YWtldXAgc291cmNlLCB0aGUgc2Vjb25kIGNhbid0OworCSAqIGFsc28gdGhlIGZpcnN0IG9uZSBpcyBPUiBvZiBhY19wb3dlcmVkIGFuZCBvbl9idXR0b24uCisJICovCisJeworCQkudHlwZQk9IEVWX1BXUiwKKwkJLmNvZGUJPSBLRVlfUkVTRVJWRUQsCisJCS5ncGlvCT0gVE9TQV9HUElPX1BPV0VST04sCisJCS5kZXNjCT0gIlBvd2Vyb24iLAorCQkud2FrZXVwCT0gMSwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sCiAJewogCQkudHlwZQk9IEVWX1BXUiwKIAkJLmNvZGUJPSBLRVlfU1VTUEVORCwKIAkJLmdwaW8JPSBUT1NBX0dQSU9fT05fS0VZLAogCQkuZGVzYwk9ICJPbiBrZXkiLAotCQkud2FrZXVwCT0gMSwKKwkJLyoKKwkJICogY2FuJ3QgYmUgdXNlZCBhcyB3YWtldXAKKwkJICogLndha2V1cAk9IDEsCisJCSAqLwogCQkuYWN0aXZlX2xvdyA9IDEsCiAJfSwKIAl7CkBAIC0yOTEsOSArNDIxLDQwIEBACiAvKgogICogVG9zYSBMRURzCiAgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgdG9zYV9ncGlvX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAidG9zYTphbWJlcjpjaGFyZ2UiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1haW4tYmF0dGVyeS1jaGFyZ2luZyIsCisJCS5ncGlvCQkJPSBUT1NBX0dQSU9fQ0hSR19FUlJfTEVELAorCX0sCisJeworCQkubmFtZQkJCT0gInRvc2E6Z3JlZW46bWFpbCIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibmFuZC1kaXNrIiwKKwkJLmdwaW8JCQk9IFRPU0FfR1BJT19OT1RFX0xFRCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJ0b3NhOmR1YWw6d2xhbiIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJCS5ncGlvCQkJPSBUT1NBX0dQSU9fV0xBTl9MRUQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAidG9zYTpibHVlOmJsdWV0b290aCIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJCS5ncGlvCQkJPSBUT1NBX0dQSU9fQlRfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgdG9zYV9ncGlvX2xlZHNfcGxhdGZvcm1fZGF0YSA9IHsKKwkubGVkcwkJPSB0b3NhX2dwaW9fbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHRvc2FfZ3Bpb19sZWRzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRvc2FsZWRfZGV2aWNlID0gewotICAgIC5uYW1lICAgPSAidG9zYS1sZWQiLAotICAgIC5pZCAgICAgPSAtMSwKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfZ3Bpb19sZWRzX3BsYXRmb3JtX2RhdGEsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKQEAgLTMyNiwyMCArNDg3LDEzIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0b3NhX2luaXQodm9pZCkKIHsKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRSh0b3NhX3Bpbl9jb25maWcpKTsKKwlncGlvX3NldF93YWtlKE1GUF9QSU5fR1BJTzEsIDEpOworCS8qIFdlIGNhbid0IHBhc3MgdG8gZ3Bpby1rZXlzIHNpbmNlIGl0IHdpbGwgZHJvcCB0aGUgUmVzZXQgYWx0ZnVuYyAqLworCiAJcG1fcG93ZXJfb2ZmID0gdG9zYV9wb3dlcm9mZjsKIAlhcm1fcG1fcmVzdGFydCA9IHRvc2FfcmVzdGFydDsKIAotCXB4YV9ncGlvX21vZGUoVE9TQV9HUElPX09OX1JFU0VUIHwgR1BJT19JTik7Ci0JcHhhX2dwaW9fbW9kZShUT1NBX0dQSU9fVEM2MzkzX0lOVCB8IEdQSU9fSU4pOwotCXB4YV9ncGlvX21vZGUoVE9TQV9HUElPX1VTQl9JTiB8IEdQSU9fSU4pOwotCi0JLyogc2V0dXAgc2xlZXAgbW9kZSB2YWx1ZXMgKi8KLQlQV0VSICA9IDB4MDAwMDAwMDI7Ci0JUEZFUiAgPSAweDAwMDAwMDAwOwotCVBSRVIgID0gMHgwMDAwMDAwMjsKLQlQR1NSMCA9IDB4MDAwMDAwMDA7Ci0JUEdTUjEgPSAweDAwRkYwMDAyOwotCVBHU1IyID0gMHgwMDAxNDAwMDsKIAlQQ0ZSIHw9IFBDRlJfT1BERTsKIAogCS8qIGVuYWJsZSBiYXR0X2ZhdWx0ICovCkBAIC0zNDgsNiArNTAyLDcgQEAKIAlweGFfc2V0X21jaV9pbmZvKCZ0b3NhX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CiAJcHhhX3NldF9maWNwX2luZm8oJnRvc2FfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwogCXBsYXRmb3JtX3Njb29wX2NvbmZpZyA9ICZ0b3NhX3BjbWNpYV9jb25maWc7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCmluZGV4IDg1M2ZjOTQuLjkzMTg4NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdHJpemVwczQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdWRpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CkBAIC0yMTcsNyArMjE4LDcgQEAKIAkJQ29uWFNfQkNSID0gdHJpemVwc19jb254c19iY3I7CiAKIAl9Ci0JcHJfZGVidWcoIiVzOiBvJXMgMHgleFxuIiwgX19GVU5DVElPTl9fLCBwb3dlciA/ICJuIjogImZmIiwgdHJpemVwc19jb254c19iY3IpOworCXByX2RlYnVnKCIlczogbyVzIDB4JXhcbiIsIF9fZnVuY19fLCBwb3dlciA/ICJuIjogImZmIiwgdHJpemVwc19jb254c19iY3IpOwogfQogCiAvKiBiYWNrbGlnaHQgcG93ZXIgc3dpdGNoaW5nIGZvciBMQ0QgcGFuZWwgKi8KQEAgLTIyOCw3ICsyMjksNyBAQAogCX0gZWxzZSB7CiAJCXRyaXplcHNfY29ueHNfYmNyICY9IH5Db25YU19CQ1JfTF9ESVNQOwogCX0KLQlwcl9kZWJ1ZygiJXM6IG8lcyAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIG9uID8gIm4iIDogImZmIiwgdHJpemVwc19jb254c19iY3IpOworCXByX2RlYnVnKCIlczogbyVzIDB4JXhcbiIsIF9fZnVuY19fLCBvbiA/ICJuIiA6ICJmZiIsIHRyaXplcHNfY29ueHNfYmNyKTsKIAlDb25YU19CQ1IgPSB0cml6ZXBzX2NvbnhzX2JjcjsKIH0KIApAQCAtMjM4LDEwICsyMzksMTAgQEAKIAlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAogCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKLQkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19mdW5jX18pOwogCQkvKiBGSVhNRSBmaWxsIGluIHZhbHVlcyBoZXJlICovCiAJfSBlbHNlIHsKLQkJcHJfZGVidWcoIiVzOiBvZmZcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByX2RlYnVnKCIlczogb2ZmXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIEZJWE1FIGZpbGwgaW4gdmFsdWVzIGhlcmUgKi8KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYwppbmRleCA3NzMxZDUwLi5kYmI1NDYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3p5bG9uaXRlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMjd4X2tleXBhZC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC0zNSw2ICszNiw4IEBACiBpbnQgZ3Bpb19iYWNrbGlnaHQ7CiBpbnQgZ3Bpb19ldGhfaXJxOwogCitpbnQgd205NzEzX2lycTsKKwogaW50IGxjZF9pZDsKIGludCBsY2Rfb3JpZW50YXRpb247CiAKQEAgLTU4LDcgKzYxLDcgQEAKIAkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgKENPTkZJR19GQl9QWEFfTU9EVUxFUykKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCiBzdGF0aWMgdm9pZCB6eWxvbml0ZV9iYWNrbGlnaHRfcG93ZXIoaW50IG9uKQogewogCWdwaW9fc2V0X3ZhbHVlKGdwaW9fYmFja2xpZ2h0LCBvbik7CkBAIC0yNDksNiArMjUyLDcxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgenlsb25pdGVfaW5pdF9tbWModm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFUykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgenlsb25pdGVfbWF0cml4X2tleV9tYXBbXSA9IHsKKwkvKiBLRVkocm93LCBjb2wsIGtleV9jb2RlKSAqLworCUtFWSgwLCAwLCBLRVlfQSksIEtFWSgwLCAxLCBLRVlfQiksIEtFWSgwLCAyLCBLRVlfQyksIEtFWSgwLCA1LCBLRVlfRCksCisJS0VZKDEsIDAsIEtFWV9FKSwgS0VZKDEsIDEsIEtFWV9GKSwgS0VZKDEsIDIsIEtFWV9HKSwgS0VZKDEsIDUsIEtFWV9IKSwKKwlLRVkoMiwgMCwgS0VZX0kpLCBLRVkoMiwgMSwgS0VZX0opLCBLRVkoMiwgMiwgS0VZX0spLCBLRVkoMiwgNSwgS0VZX0wpLAorCUtFWSgzLCAwLCBLRVlfTSksIEtFWSgzLCAxLCBLRVlfTiksIEtFWSgzLCAyLCBLRVlfTyksIEtFWSgzLCA1LCBLRVlfUCksCisJS0VZKDUsIDAsIEtFWV9RKSwgS0VZKDUsIDEsIEtFWV9SKSwgS0VZKDUsIDIsIEtFWV9TKSwgS0VZKDUsIDUsIEtFWV9UKSwKKwlLRVkoNiwgMCwgS0VZX1UpLCBLRVkoNiwgMSwgS0VZX1YpLCBLRVkoNiwgMiwgS0VZX1cpLCBLRVkoNiwgNSwgS0VZX1gpLAorCUtFWSg3LCAxLCBLRVlfWSksIEtFWSg3LCAyLCBLRVlfWiksCisKKwlLRVkoNCwgNCwgS0VZXzApLCBLRVkoMSwgMywgS0VZXzEpLCBLRVkoNCwgMSwgS0VZXzIpLCBLRVkoMSwgNCwgS0VZXzMpLAorCUtFWSgyLCAzLCBLRVlfNCksIEtFWSg0LCAyLCBLRVlfNSksIEtFWSgyLCA0LCBLRVlfNiksIEtFWSgzLCAzLCBLRVlfNyksCisJS0VZKDQsIDMsIEtFWV84KSwgS0VZKDMsIDQsIEtFWV85KSwKKworCUtFWSg0LCA1LCBLRVlfU1BBQ0UpLAorCUtFWSg1LCAzLCBLRVlfS1BBU1RFUklTSyksIAkvKiAqICovCisJS0VZKDUsIDQsIEtFWV9LUERPVCksIAkJLyogIyIgKi8KKworCUtFWSgwLCA3LCBLRVlfVVApLAorCUtFWSgxLCA3LCBLRVlfRE9XTiksCisJS0VZKDIsIDcsIEtFWV9MRUZUKSwKKwlLRVkoMywgNywgS0VZX1JJR0hUKSwKKwlLRVkoMiwgNiwgS0VZX0hPTUUpLAorCUtFWSgzLCA2LCBLRVlfRU5EKSwKKwlLRVkoNiwgNCwgS0VZX0RFTEVURSksCisJS0VZKDYsIDYsIEtFWV9CQUNLKSwKKwlLRVkoNiwgMywgS0VZX0NBUFNMT0NLKSwJLyogS0VZX0xFRlRTSElGVCksICovCisKKwlLRVkoNCwgNiwgS0VZX0VOVEVSKSwJCS8qIHNjcm9sbCBwdXNoICovCisJS0VZKDUsIDcsIEtFWV9FTlRFUiksCQkvKiBrZXlwYWQgYWN0aW9uICovCisKKwlLRVkoMCwgNCwgS0VZX0VNQUlMKSwKKwlLRVkoNSwgNiwgS0VZX1NFTkQpLAorCUtFWSg0LCAwLCBLRVlfQ0FMRU5EQVIpLAorCUtFWSg3LCA2LCBLRVlfUkVDT1JEKSwKKwlLRVkoNiwgNywgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoNywgNywgS0VZX1ZPTFVNRURPV04pLAorCisJS0VZKDAsIDYsIEtFWV9GMjIpLAkvKiBzb2Z0MSAqLworCUtFWSgxLCA2LCBLRVlfRjIzKSwJLyogc29mdDIgKi8KKwlLRVkoMCwgMywgS0VZX0FVWCksCS8qIGNvbnRhY3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX2tleXBhZF9pbmZvID0geworCS5tYXRyaXhfa2V5X3Jvd3MJPSA4LAorCS5tYXRyaXhfa2V5X2NvbHMJPSA4LAorCS5tYXRyaXhfa2V5X21hcAkJPSB6eWxvbml0ZV9tYXRyaXhfa2V5X21hcCwKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoenlsb25pdGVfbWF0cml4X2tleV9tYXApLAorCisJLmVuYWJsZV9yb3RhcnkwCQk9IDEsCisJLnJvdGFyeTBfdXBfa2V5CQk9IEtFWV9VUCwKKwkucm90YXJ5MF9kb3duX2tleQk9IEtFWV9ET1dOLAorCisJLmRlYm91bmNlX2ludGVydmFsCT0gMzAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgenlsb25pdGVfaW5pdF9rZXlwYWQodm9pZCkKK3sKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZ6eWxvbml0ZV9rZXlwYWRfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHp5bG9uaXRlX2luaXRfa2V5cGFkKHZvaWQpIHt9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IHp5bG9uaXRlX2luaXQodm9pZCkKIHsKIAkvKiBib2FyZC1wcm9jZXNzb3Igc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KQEAgLTI2NSw2ICszMzMsNyBAQAogCiAJenlsb25pdGVfaW5pdF9sY2QoKTsKIAl6eWxvbml0ZV9pbml0X21tYygpOworCXp5bG9uaXRlX2luaXRfa2V5cGFkKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoWllMT05JVEUsICJQWEEzeHggUGxhdGZvcm0gRGV2ZWxvcG1lbnQgS2l0IChha2EgWnlsb25pdGUpIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlX3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKaW5kZXggNmFjMDRjMC4uMzI0ZmI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhMzAwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvenlsb25pdGUuaD4KIAotI2RlZmluZSBBUlJBWV9BTkRfU0laRSh4KQkoeCksIEFSUkFZX1NJWkUoeCkKKyNpbmNsdWRlICJnZW5lcmljLmgiCiAKIC8qIFBYQTMwMC9QWEEzMTAgY29tbW9uIGNvbmZpZ3VyYXRpb25zICovCiBzdGF0aWMgbWZwX2NmZ190IGNvbW1vbl9tZnBfY2ZnW10gX19pbml0ZGF0YSA9IHsKQEAgLTY5LDYgKzY5LDkgQEAKIAlHUElPMjdfQUM5N19TREFUQV9PVVQsCiAJR1BJTzI4X0FDOTdfU1lOQywKIAorCS8qIFdNOTcxMyBJUlEgKi8KKwlHUElPMjZfR1BJTywKKwogCS8qIEtleXBhZCAqLwogCUdQSU8xMDdfS1BfREtJTl8wIHwgTUZQX0xQTV9FREdFX0JPVEgsCiAJR1BJTzEwOF9LUF9ES0lOXzEgfCBNRlBfTFBNX0VER0VfQk9USCwKQEAgLTIwMyw2ICsyMDYsOSBAQAogCQkvKiBNTUMgY2FyZCBkZXRlY3QgJiB3cml0ZSBwcm90ZWN0IGZvciBjb250cm9sbGVyIDAgKi8KIAkJenlsb25pdGVfbW1jX3Nsb3RbMF0uZ3Bpb19jZCAgPSBFWFRfR1BJTygwKTsKIAkJenlsb25pdGVfbW1jX3Nsb3RbMF0uZ3Bpb193cCAgPSBFWFRfR1BJTygyKTsKKworCQkvKiBXTTk3MTMgSVJRICovCisJCXdtOTcxM19pcnEgPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yNik7CiAJfQogCiAJaWYgKGNwdV9pc19weGEzMDAoKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwppbmRleCBkZmE3OTk5Li4xOTNkMDc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEzMjAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC96eWxvbml0ZS5oPgogCi0jZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQorI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogc3RhdGljIG1mcF9jZmdfdCBtZnBfY2ZnW10gX19pbml0ZGF0YSA9IHsKIAkvKiBMQ0QgKi8KQEAgLTY4LDYgKzY4LDkgQEAKIAlHUElPMzlfQUM5N19CSVRDTEssCiAJR1BJTzQwX0FDOTdfbkFDUkVTRVQsCiAKKwkvKiBXTTk3MTMgSVJRICovCisJR1BJTzE1X0dQSU8sCisKIAkvKiBJMkMgKi8KIAlHUElPMzJfSTJDX1NDTCwKIAlHUElPMzNfSTJDX1NEQSwKQEAgLTE5MCw1ICsxOTMsOCBAQAogCQkvKiBNTUMgY2FyZCBkZXRlY3QgJiB3cml0ZSBwcm90ZWN0IGZvciBjb250cm9sbGVyIDAgKi8KIAkJenlsb25pdGVfbW1jX3Nsb3RbMF0uZ3Bpb19jZCAgPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8xKTsKIAkJenlsb25pdGVfbW1jX3Nsb3RbMF0uZ3Bpb193cCAgPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU81KTsKKworCQkvKiBXTTk3MTMgSVJRICovCisJCXdtOTcxM19pcnEgPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8xNSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCmluZGV4IDM5YjNiYjcuLjVjY2RlN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKQEAgLTEwLDcgKzEwLDYgQEAKIGNvbmZpZyBSRUFMVklFV19FQl9BUk0xMU1QCiAJYm9vbCAiU3VwcG9ydCBBUk0xMU1QQ29yZSB0aWxlIgogCWRlcGVuZHMgb24gTUFDSF9SRUFMVklFV19FQgotCXNlbGVjdCBDQUNIRV9MMlgwCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUk0xMU1QQ29yZSB0aWxlIG9uIHRoZSBSZWFsdmlldyBwbGF0Zm9ybS4KIApAQCAtMjQsNCArMjMsMTggQEAKIAkgIGtlcm5lbCBidWlsdCB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgaXMgbm90IGNvbXBhdGlibGUgd2l0aAogCSAgb3RoZXIgcmV2aXNpb25zIG9mIHRoZSBBUk0xMU1QQ29yZSB0aWxlLgogCitjb25maWcgTUFDSF9SRUFMVklFV19QQjExTVAKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCMTFNUENvcmUgcGxhdGZvcm0iCisJc2VsZWN0IEFSTV9HSUMKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgTVBDb3JlIFBsYXRmb3JtIEJhc2Vib2FyZC4KKwkgIFBCMTFNUENvcmUgaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIEFSTTExTVBDb3JlIGFuZCBoYXMKKwkgIHN1cHBvcnQgZm9yIFBDSS1FIGFuZCBDb21wYWN0IEZsYXNoLgorCitjb25maWcgTUFDSF9SRUFMVklFV19QQjExNzYKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCMTE3NiBwbGF0Zm9ybSIKKwlzZWxlY3QgQVJNX0dJQworCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBBUk0xMTc2IFBsYXRmb3JtIEJhc2Vib2FyZC4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUKaW5kZXggY2ExZTM5MC4uZDJhZTA3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlCkBAIC00LDUgKzQsNyBAQAogCiBvYmoteQkJCQkJOj0gY29yZS5vIGNsb2NrLm8KIG9iai0kKENPTkZJR19NQUNIX1JFQUxWSUVXX0VCKQkJKz0gcmVhbHZpZXdfZWIubworb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMU1QKQkrPSByZWFsdmlld19wYjExbXAubworb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMTc2KQkrPSByZWFsdmlld19wYjExNzYubwogb2JqLSQoQ09ORklHX1NNUCkJCQkrPSBwbGF0c21wLm8gaGVhZHNtcC5vIGxvY2FsdGltZXIubwogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkJKz0gaG90cGx1Zy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2Nsb2NrLmMKaW5kZXggMjEzMjVhNC4uM2U3MDZjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY2xvY2suYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3QzMDcuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IDk4YWVmYzkuLjEzMTk5MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0xMDksMjIgKzEwOSwyMSBAQAogCS5zZXRfdnBwCQk9IHJlYWx2aWV3X2ZsYXNoX3NldF92cHAsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAkJCT0gUkVBTFZJRVdfRkxBU0hfQkFTRSwKLQkuZW5kCQkJPSBSRUFMVklFV19GTEFTSF9CQVNFICsgUkVBTFZJRVdfRkxBU0hfU0laRSwKLQkuZmxhZ3MJCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQogc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19mbGFzaF9kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJhcm1mbGFzaCIsCiAJLmlkCQkJPSAwLAogCS5kZXYJCQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmcmVhbHZpZXdfZmxhc2hfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCQk9IDEsCi0JLnJlc291cmNlCQk9ICZyZWFsdmlld19mbGFzaF9yZXNvdXJjZSwKIH07CiAKK2ludCByZWFsdmlld19mbGFzaF9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIG51bSkKK3sKKwlyZWFsdmlld19mbGFzaF9kZXZpY2UucmVzb3VyY2UgPSByZXM7CisJcmVhbHZpZXdfZmxhc2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSBudW07CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZmxhc2hfZGV2aWNlKTsKK30KKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19pMmNfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IFJFQUxWSUVXX0kyQ19CQVNFLAogCS5lbmQJCT0gUkVBTFZJRVdfSTJDX0JBU0UgKyBTWl80SyAtIDEsCkBAIC00NDUsMTAgKzQ0NCwxMCBAQAogLyoKICAqIFdoZXJlIGlzIHRoZSB0aW1lciAoVkEpPwogICovCi0jZGVmaW5lIFRJTUVSMF9WQV9CQVNFCQkgX19pb19hZGRyZXNzKFJFQUxWSUVXX1RJTUVSMF8xX0JBU0UpCi0jZGVmaW5lIFRJTUVSMV9WQV9CQVNFCQkoX19pb19hZGRyZXNzKFJFQUxWSUVXX1RJTUVSMF8xX0JBU0UpICsgMHgyMCkKLSNkZWZpbmUgVElNRVIyX1ZBX0JBU0UJCSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfVElNRVIyXzNfQkFTRSkKLSNkZWZpbmUgVElNRVIzX1ZBX0JBU0UJCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfVElNRVIyXzNfQkFTRSkgKyAweDIwKQordm9pZCBfX2lvbWVtICp0aW1lcjBfdmFfYmFzZTsKK3ZvaWQgX19pb21lbSAqdGltZXIxX3ZhX2Jhc2U7Cit2b2lkIF9faW9tZW0gKnRpbWVyMl92YV9iYXNlOwordm9pZCBfX2lvbWVtICp0aW1lcjNfdmFfYmFzZTsKIAogLyoKICAqIEhvdyBsb25nIGlzIHRoZSB0aW1lciBpbnRlcnZhbD8KQEAgLTQ3NSw3ICs0NzQsNyBAQAogCiAJc3dpdGNoKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQl3cml0ZWwoVElNRVJfUkVMT0FELCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCQl3cml0ZWwoVElNRVJfUkVMT0FELCB0aW1lcjBfdmFfYmFzZSArIFRJTUVSX0xPQUQpOwogCiAJCWN0cmwgPSBUSU1FUl9DVFJMX1BFUklPRElDOwogCQljdHJsIHw9IFRJTUVSX0NUUkxfMzJCSVQgfCBUSU1FUl9DVFJMX0lFIHwgVElNRVJfQ1RSTF9FTkFCTEU7CkBAIC00OTEsMTYgKzQ5MCwxNiBAQAogCQljdHJsID0gMDsKIAl9CiAKLQl3cml0ZWwoY3RybCwgVElNRVIwX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoY3RybCwgdGltZXIwX3ZhX2Jhc2UgKyBUSU1FUl9DVFJMKTsKIH0KIAogc3RhdGljIGludCB0aW1lcl9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGV2dCwKIAkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICp1bnVzZWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBjdHJsID0gcmVhZGwoVElNRVIwX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl1bnNpZ25lZCBsb25nIGN0cmwgPSByZWFkbCh0aW1lcjBfdmFfYmFzZSArIFRJTUVSX0NUUkwpOwogCi0Jd3JpdGVsKGV2dCwgVElNRVIwX1ZBX0JBU0UgKyBUSU1FUl9MT0FEKTsKLQl3cml0ZWwoY3RybCB8IFRJTUVSX0NUUkxfRU5BQkxFLCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0NUUkwpOworCXdyaXRlbChldnQsIHRpbWVyMF92YV9iYXNlICsgVElNRVJfTE9BRCk7CisJd3JpdGVsKGN0cmwgfCBUSU1FUl9DVFJMX0VOQUJMRSwgdGltZXIwX3ZhX2Jhc2UgKyBUSU1FUl9DVFJMKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTM2LDcgKzUzNSw3IEBACiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnRpbWVyMF9jbG9ja2V2ZW50OwogCiAJLyogY2xlYXIgdGhlIGludGVycnVwdCAqLwotCXdyaXRlbCgxLCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0lOVENMUik7CisJd3JpdGVsKDEsIHRpbWVyMF92YV9iYXNlICsgVElNRVJfSU5UQ0xSKTsKIAogCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwogCkBAIC01NTEsNyArNTUwLDcgQEAKIAogc3RhdGljIGN5Y2xlX3QgcmVhbHZpZXdfZ2V0X2N5Y2xlcyh2b2lkKQogewotCXJldHVybiB+cmVhZGwoVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7CisJcmV0dXJuIH5yZWFkbCh0aW1lcjNfdmFfYmFzZSArIFRJTUVSX1ZBTFVFKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9yZWFsdmlldyA9IHsKQEAgLTU2NiwxMSArNTY1LDExIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewogCS8qIHNldHVwIHRpbWVyIDAgYXMgZnJlZS1ydW5uaW5nIGNsb2Nrc291cmNlICovCi0Jd3JpdGVsKDAsIFRJTUVSM19WQV9CQVNFICsgVElNRVJfQ1RSTCk7Ci0Jd3JpdGVsKDB4ZmZmZmZmZmYsIFRJTUVSM19WQV9CQVNFICsgVElNRVJfTE9BRCk7Ci0Jd3JpdGVsKDB4ZmZmZmZmZmYsIFRJTUVSM19WQV9CQVNFICsgVElNRVJfVkFMVUUpOworCXdyaXRlbCgwLCB0aW1lcjNfdmFfYmFzZSArIFRJTUVSX0NUUkwpOworCXdyaXRlbCgweGZmZmZmZmZmLCB0aW1lcjNfdmFfYmFzZSArIFRJTUVSX0xPQUQpOworCXdyaXRlbCgweGZmZmZmZmZmLCB0aW1lcjNfdmFfYmFzZSArIFRJTUVSX1ZBTFVFKTsKIAl3cml0ZWwoVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQywKLQkJVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwkJdGltZXIzX3ZhX2Jhc2UgKyBUSU1FUl9DVFJMKTsKIAogCWNsb2Nrc291cmNlX3JlYWx2aWV3Lm11bHQgPQogCQljbG9ja3NvdXJjZV9raHoybXVsdCgxMDAwLCBjbG9ja3NvdXJjZV9yZWFsdmlldy5zaGlmdCk7CkBAIC02MDcsMTAgKzYwNiwxMCBAQAogCS8qCiAJICogSW5pdGlhbGlzZSB0byBhIGtub3duIHN0YXRlIChhbGwgdGltZXJzIG9mZikKIAkgKi8KLQl3cml0ZWwoMCwgVElNRVIwX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKLQl3cml0ZWwoMCwgVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKLQl3cml0ZWwoMCwgVElNRVIyX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKLQl3cml0ZWwoMCwgVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgdGltZXIwX3ZhX2Jhc2UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgdGltZXIxX3ZhX2Jhc2UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgdGltZXIyX3ZhX2Jhc2UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgdGltZXIzX3ZhX2Jhc2UgKyBUSU1FUl9DVFJMKTsKIAogCS8qIAogCSAqIE1ha2UgaXJxcyBoYXBwZW4gZm9yIHRoZSBzeXN0ZW0gdGltZXIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKaW5kZXggNDkyYTE0Yy4uMzNkYmJiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKQEAgLTU1LDggKzU1LDEzIEBACiBleHRlcm4gdm9pZCBfX2lvbWVtICp0d2RfYmFzZV9hZGRyOwogZXh0ZXJuIHVuc2lnbmVkIGludCB0d2Rfc2l6ZTsKICNlbmRpZgorZXh0ZXJuIHZvaWQgX19pb21lbSAqdGltZXIwX3ZhX2Jhc2U7CitleHRlcm4gdm9pZCBfX2lvbWVtICp0aW1lcjFfdmFfYmFzZTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKnRpbWVyMl92YV9iYXNlOworZXh0ZXJuIHZvaWQgX19pb21lbSAqdGltZXIzX3ZhX2Jhc2U7CiAKIGV4dGVybiB2b2lkIHJlYWx2aWV3X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgbGVkZXZ0KTsKIGV4dGVybiB2b2lkIHJlYWx2aWV3X3RpbWVyX2luaXQodW5zaWduZWQgaW50IHRpbWVyX2lycSk7CitleHRlcm4gaW50IHJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgbnVtKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGRlMmI3MTUuLjNlNTc0MjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC0xNSwxMSArMTUsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV9zY3UuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQtZWIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC1wYjExbXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zY3UuaD4KKwogZXh0ZXJuIHZvaWQgcmVhbHZpZXdfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CiAKIC8qCkBAIC0zMSw5ICszNCwxNSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZ2V0X2NvcmVfY291bnQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgbmNvcmVzOworCXZvaWQgX19pb21lbSAqc2N1X2Jhc2UgPSAwOwogCi0JaWYgKG1hY2hpbmVfaXNfcmVhbHZpZXdfZWIoKSAmJiBjb3JlX3RpbGVfZWIxMW1wKCkpIHsKLQkJbmNvcmVzID0gX19yYXdfcmVhZGwoX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCMTFNUF9TQ1VfQkFTRSkgKyBTQ1VfQ09ORklHKTsKKwlpZiAobWFjaGluZV9pc19yZWFsdmlld19lYigpICYmIGNvcmVfdGlsZV9lYjExbXAoKSkKKwkJc2N1X2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUIxMU1QX1NDVV9CQVNFKTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X3BiMTFtcCgpKQorCQlzY3VfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19UQzExTVBfU0NVX0JBU0UpOworCisJaWYgKHNjdV9iYXNlKSB7CisJCW5jb3JlcyA9IF9fcmF3X3JlYWRsKHNjdV9iYXNlICsgU0NVX0NPTkZJRyk7CiAJCW5jb3JlcyA9IChuY29yZXMgJiAweDAzKSArIDE7CiAJfSBlbHNlCiAJCW5jb3JlcyA9IDE7CkBAIC00MSw2ICs1MCwyNiBAQAogCXJldHVybiBuY29yZXM7CiB9CiAKKy8qCisgKiBTZXR1cCB0aGUgU0NVCisgKi8KK3N0YXRpYyB2b2lkIHNjdV9lbmFibGUodm9pZCkKK3sKKwl1MzIgc2N1X2N0cmw7CisJdm9pZCBfX2lvbWVtICpzY3VfYmFzZTsKKworCWlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X2ViKCkgJiYgY29yZV90aWxlX2ViMTFtcCgpKQorCQlzY3VfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19FQjExTVBfU0NVX0JBU0UpOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfcmVhbHZpZXdfcGIxMW1wKCkpCisJCXNjdV9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9TQ1VfQkFTRSk7CisJZWxzZQorCQlCVUcoKTsKKworCXNjdV9jdHJsID0gX19yYXdfcmVhZGwoc2N1X2Jhc2UgKyBTQ1VfQ1RSTCk7CisJc2N1X2N0cmwgfD0gMTsKKwlfX3Jhd193cml0ZWwoc2N1X2N0cmwsIHNjdV9iYXNlICsgU0NVX0NUUkwpOworfQorCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJvb3RfbG9jayk7CiAKIHZvaWQgX19jcHVpbml0IHBsYXRmb3JtX3NlY29uZGFyeV9pbml0KHVuc2lnbmVkIGludCBjcHUpCkBAIC01Nyw3ICs4NiwxMCBAQAogCSAqIGNvcmUgKGUuZy4gdGltZXIgaXJxKSwgdGhlbiB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBlbmFibGVkCiAJICogZm9yIHVzOiBkbyBzbwogCSAqLwotCWdpY19jcHVfaW5pdCgwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUIxMU1QX0dJQ19DUFVfQkFTRSkpOworCWlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X2ViKCkgJiYgY29yZV90aWxlX2ViMTFtcCgpKQorCQlnaWNfY3B1X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCMTFNUF9HSUNfQ1BVX0JBU0UpKTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X3BiMTFtcCgpKQorCQlnaWNfY3B1X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9HSUNfQ1BVX0JBU0UpKTsKIAogCS8qCiAJICogbGV0IHRoZSBwcmltYXJ5IHByb2Nlc3NvciBrbm93IHdlJ3JlIG91dCBvZiB0aGUKQEAgLTE5OCw3ICsyMzAsOCBAQAogCSAqIGR1bW15ICghQ09ORklHX0xPQ0FMX1RJTUVSUyksIGl0IHdhcyBhbHJlYWR5IHJlZ2lzdGVycyBpbgogCSAqIHJlYWx2aWV3X3RpbWVyX2luaXQKIAkgKi8KLQlpZiAobWFjaGluZV9pc19yZWFsdmlld19lYigpICYmIGNvcmVfdGlsZV9lYjExbXAoKSkKKwlpZiAoKG1hY2hpbmVfaXNfcmVhbHZpZXdfZWIoKSAmJiBjb3JlX3RpbGVfZWIxMW1wKCkpIHx8CisJICAgIG1hY2hpbmVfaXNfcmVhbHZpZXdfcGIxMW1wKCkpCiAJCWxvY2FsX3RpbWVyX3NldHVwKGNwdSk7CiAjZW5kaWYKIApAQCAtMjEwLDExICsyNDMsMTQgQEAKIAkJY3B1X3NldChpLCBjcHVfcHJlc2VudF9tYXApOwogCiAJLyoKLQkgKiBEbyB3ZSBuZWVkIGFueSBtb3JlIENQVXM/IElmIHNvLCB0aGVuIGxldCB0aGVtIGtub3cgd2hlcmUKLQkgKiB0byBzdGFydC4gTm90ZSB0aGF0LCBvbiBtb2Rlcm4gdmVyc2lvbnMgb2YgTUlMTywgdGhlICJwb2tlIgotCSAqIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgZWFjaCBpbmRpdmlkdWFsIGNvcmUgaXMKLQkgKiBzZW50IGEgc29mdCBpbnRlcnJ1cHQgdG8gZ2V0IGl0IG91dCBvZiBXRkkKKwkgKiBJbml0aWFsaXNlIHRoZSBTQ1UgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQ1BVIGFuZCBsZXQKKwkgKiB0aGVtIGtub3cgd2hlcmUgdG8gc3RhcnQuIE5vdGUgdGhhdCwgb24gbW9kZXJuIHZlcnNpb25zIG9mCisJICogTUlMTywgdGhlICJwb2tlIiBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHVudGlsIGVhY2gKKwkgKiBpbmRpdmlkdWFsIGNvcmUgaXMgc2VudCBhIHNvZnQgaW50ZXJydXB0IHRvIGdldCBpdCBvdXQgb2YKKwkgKiBXRkkKIAkgKi8KLQlpZiAobWF4X2NwdXMgPiAxKQorCWlmIChtYXhfY3B1cyA+IDEpIHsKKwkJc2N1X2VuYWJsZSgpOwogCQlwb2tlX21pbG8oKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggNjBkOWViOC4uNTc4MmQ4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtNTEsMTMgKzUxLDEzIEBACiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19HSUNfQ1BVX0JBU0UpLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfR0lDX0NQVV9CQVNFKSwKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX0VCX0dJQ19DUFVfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19FQl9HSUNfQ1BVX0JBU0UpLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewotCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfR0lDX0RJU1RfQkFTRSksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19HSUNfRElTVF9CQVNFKSwKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX0VCX0dJQ19ESVNUX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfRUJfR0lDX0RJU1RfQkFTRSksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7CkBAIC02NiwyMCArNjYsMjAgQEAKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKLQkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1RJTUVSMF8xX0JBU0UpLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfVElNRVIwXzFfQkFTRSksCisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19FQl9USU1FUjBfMV9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX0VCX1RJTUVSMF8xX0JBU0UpLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewotCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfVElNRVIyXzNfQkFTRSksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19USU1FUjJfM19CQVNFKSwKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX0VCX1RJTUVSMl8zX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfRUJfVElNRVIyXzNfQkFTRSksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LAogI2lmZGVmIENPTkZJR19ERUJVR19MTAogCXsKLQkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1VBUlQwX0JBU0UpLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfVUFSVDBfQkFTRSksCisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19FQl9VQVJUMF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UpLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfQpAQCAtMTM2LDEyICsxMzYsMTIgQEAKIC8qCiAgKiBUaGVzZSBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIG11bHRpLWxheWVyIEFIQiBzd2l0Y2gKICAqLwotI2RlZmluZSBTTUNfSVJRCQl7IE5PX0lSUSwgTk9fSVJRIH0KLSNkZWZpbmUgU01DX0RNQQkJeyAwLCAwIH0KKyNkZWZpbmUgRUJfU01DX0lSUQl7IE5PX0lSUSwgTk9fSVJRIH0KKyNkZWZpbmUgRUJfU01DX0RNQQl7IDAsIDAgfQogI2RlZmluZSBNUE1DX0lSUQl7IE5PX0lSUSwgTk9fSVJRIH0KICNkZWZpbmUgTVBNQ19ETUEJeyAwLCAwIH0KLSNkZWZpbmUgQ0xDRF9JUlEJeyBJUlFfRUJfQ0xDRCwgTk9fSVJRIH0KLSNkZWZpbmUgQ0xDRF9ETUEJeyAwLCAwIH0KKyNkZWZpbmUgRUJfQ0xDRF9JUlEJeyBJUlFfRUJfQ0xDRCwgTk9fSVJRIH0KKyNkZWZpbmUgRUJfQ0xDRF9ETUEJeyAwLCAwIH0KICNkZWZpbmUgRE1BQ19JUlEJeyBJUlFfRUJfRE1BLCBOT19JUlEgfQogI2RlZmluZSBETUFDX0RNQQl7IDAsIDAgfQogCkBAIC0xNTAsNTMgKzE1MCw1MyBAQAogICovCiAjZGVmaW5lIFNDVExfSVJRCXsgTk9fSVJRLCBOT19JUlEgfQogI2RlZmluZSBTQ1RMX0RNQQl7IDAsIDAgfQotI2RlZmluZSBXQVRDSERPR19JUlEJeyBJUlFfRUJfV0RPRywgTk9fSVJRIH0KLSNkZWZpbmUgV0FUQ0hET0dfRE1BCXsgMCwgMCB9Ci0jZGVmaW5lIEdQSU8wX0lSUQl7IElSUV9FQl9HUElPMCwgTk9fSVJRIH0KLSNkZWZpbmUgR1BJTzBfRE1BCXsgMCwgMCB9CisjZGVmaW5lIEVCX1dBVENIRE9HX0lSUQl7IElSUV9FQl9XRE9HLCBOT19JUlEgfQorI2RlZmluZSBFQl9XQVRDSERPR19ETUEJeyAwLCAwIH0KKyNkZWZpbmUgRUJfR1BJTzBfSVJRCXsgSVJRX0VCX0dQSU8wLCBOT19JUlEgfQorI2RlZmluZSBFQl9HUElPMF9ETUEJeyAwLCAwIH0KICNkZWZpbmUgR1BJTzFfSVJRCXsgSVJRX0VCX0dQSU8xLCBOT19JUlEgfQogI2RlZmluZSBHUElPMV9ETUEJeyAwLCAwIH0KLSNkZWZpbmUgUlRDX0lSUQkJeyBJUlFfRUJfUlRDLCBOT19JUlEgfQotI2RlZmluZSBSVENfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBFQl9SVENfSVJRCXsgSVJRX0VCX1JUQywgTk9fSVJRIH0KKyNkZWZpbmUgRUJfUlRDX0RNQQl7IDAsIDAgfQogCiAvKgogICogVGhlc2UgZGV2aWNlcyBhcmUgY29ubmVjdGVkIHZpYSB0aGUgRE1BIEFQQiBicmlkZ2UKICAqLwogI2RlZmluZSBTQ0lfSVJRCQl7IElSUV9FQl9TQ0ksIE5PX0lSUSB9CiAjZGVmaW5lIFNDSV9ETUEJCXsgNywgNiB9Ci0jZGVmaW5lIFVBUlQwX0lSUQl7IElSUV9FQl9VQVJUMCwgTk9fSVJRIH0KLSNkZWZpbmUgVUFSVDBfRE1BCXsgMTUsIDE0IH0KLSNkZWZpbmUgVUFSVDFfSVJRCXsgSVJRX0VCX1VBUlQxLCBOT19JUlEgfQotI2RlZmluZSBVQVJUMV9ETUEJeyAxMywgMTIgfQotI2RlZmluZSBVQVJUMl9JUlEJeyBJUlFfRUJfVUFSVDIsIE5PX0lSUSB9Ci0jZGVmaW5lIFVBUlQyX0RNQQl7IDExLCAxMCB9Ci0jZGVmaW5lIFVBUlQzX0lSUQl7IElSUV9FQl9VQVJUMywgTk9fSVJRIH0KLSNkZWZpbmUgVUFSVDNfRE1BCXsgMHg4NiwgMHg4NyB9Ci0jZGVmaW5lIFNTUF9JUlEJCXsgSVJRX0VCX1NTUCwgTk9fSVJRIH0KLSNkZWZpbmUgU1NQX0RNQQkJeyA5LCA4IH0KKyNkZWZpbmUgRUJfVUFSVDBfSVJRCXsgSVJRX0VCX1VBUlQwLCBOT19JUlEgfQorI2RlZmluZSBFQl9VQVJUMF9ETUEJeyAxNSwgMTQgfQorI2RlZmluZSBFQl9VQVJUMV9JUlEJeyBJUlFfRUJfVUFSVDEsIE5PX0lSUSB9CisjZGVmaW5lIEVCX1VBUlQxX0RNQQl7IDEzLCAxMiB9CisjZGVmaW5lIEVCX1VBUlQyX0lSUQl7IElSUV9FQl9VQVJUMiwgTk9fSVJRIH0KKyNkZWZpbmUgRUJfVUFSVDJfRE1BCXsgMTEsIDEwIH0KKyNkZWZpbmUgRUJfVUFSVDNfSVJRCXsgSVJRX0VCX1VBUlQzLCBOT19JUlEgfQorI2RlZmluZSBFQl9VQVJUM19ETUEJeyAweDg2LCAweDg3IH0KKyNkZWZpbmUgRUJfU1NQX0lSUQl7IElSUV9FQl9TU1AsIE5PX0lSUSB9CisjZGVmaW5lIEVCX1NTUF9ETUEJeyA5LCA4IH0KIAogLyogRlBHQSBQcmltZWNlbGxzICovCiBBTUJBX0RFVklDRShhYWNpLCAgImZwZ2E6MDQiLCBBQUNJLCAgICAgTlVMTCk7CiBBTUJBX0RFVklDRShtbWMwLCAgImZwZ2E6MDUiLCBNTUNJMCwgICAgJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKIEFNQkFfREVWSUNFKGttaTAsICAiZnBnYTowNiIsIEtNSTAsICAgICBOVUxMKTsKIEFNQkFfREVWSUNFKGttaTEsICAiZnBnYTowNyIsIEtNSTEsICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQzLCAiZnBnYTowOSIsIFVBUlQzLCAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLCAiZnBnYTowOSIsIEVCX1VBUlQzLCBOVUxMKTsKIAogLyogRGV2Q2hpcCBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShzbWMsICAgImRldjowMCIsICBTTUMsICAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShjbGNkLCAgImRldjoyMCIsICBDTENELCAgICAgJmNsY2RfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKHNtYywgICAiZGV2OjAwIiwgIEVCX1NNQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsICAiZGV2OjIwIiwgIEVCX0NMQ0QsICAmY2xjZF9wbGF0X2RhdGEpOwogQU1CQV9ERVZJQ0UoZG1hYywgICJkZXY6MzAiLCAgRE1BQywgICAgIE5VTEwpOwogQU1CQV9ERVZJQ0Uoc2N0bCwgICJkZXY6ZTAiLCAgU0NUTCwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywgICJkZXY6ZTEiLCAgV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsICJkZXY6ZTQiLCAgR1BJTzAsICAgIE5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywgICJkZXY6ZTEiLCAgRUJfV0FUQ0hET0csIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsICJkZXY6ZTQiLCAgRUJfR1BJTzAsIE5VTEwpOwogQU1CQV9ERVZJQ0UoZ3BpbzEsICJkZXY6ZTUiLCAgR1BJTzEsICAgIE5VTEwpOwogQU1CQV9ERVZJQ0UoZ3BpbzIsICJkZXY6ZTYiLCAgR1BJTzIsICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UocnRjLCAgICJkZXY6ZTgiLCAgUlRDLCAgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UocnRjLCAgICJkZXY6ZTgiLCAgRUJfUlRDLCAgIE5VTEwpOwogQU1CQV9ERVZJQ0Uoc2NpMCwgICJkZXY6ZjAiLCAgU0NJLCAgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsICJkZXY6ZjEiLCAgVUFSVDAsICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDEsICJkZXY6ZjIiLCAgVUFSVDEsICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsICJkZXY6ZjMiLCAgVUFSVDIsICAgIE5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwgICJkZXY6ZjQiLCAgU1NQLCAgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsICJkZXY6ZjEiLCAgRUJfVUFSVDAsIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDEsICJkZXY6ZjIiLCAgRUJfVUFSVDEsIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDIsICJkZXY6ZjMiLCAgRUJfVUFSVDIsIE5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwgICJkZXY6ZjQiLCAgRUJfU1NQLCAgIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZkbWFjX2RldmljZSwKQEAgLTIyMywxMSArMjIzLDE2IEBACiAvKgogICogUmVhbFZpZXcgRUIgcGxhdGZvcm0gZGV2aWNlcwogICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X2ViX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJCT0gUkVBTFZJRVdfRUJfRkxBU0hfQkFTRSwKKwkuZW5kCQkJPSBSRUFMVklFV19FQl9GTEFTSF9CQVNFICsgUkVBTFZJRVdfRUJfRkxBU0hfU0laRSAtIDEsCisJLmZsYWdzCQkJPSBJT1JFU09VUkNFX01FTSwKK307CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVhbHZpZXdfZWJfc21jOTF4X3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19lYl9ldGhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJCT0gUkVBTFZJRVdfRVRIX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfRVRIX0JBU0UgKyBTWl82NEsgLSAxLAorCQkuc3RhcnQJCT0gUkVBTFZJRVdfRUJfRVRIX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfRUJfRVRIX0JBU0UgKyBTWl82NEsgLSAxLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC0yMzcsMTMgKzI0MiwzNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19lYl9zbWM5MXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MXgiLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfZWJfZXRoX2RldmljZSA9IHsKIAkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfZWJfc21jOTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gcmVhbHZpZXdfZWJfc21jOTF4X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfZWJfZXRoX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gcmVhbHZpZXdfZWJfZXRoX3Jlc291cmNlcywKIH07CiAKKy8qCisgKiBEZXRlY3QgYW5kIHJlZ2lzdGVyIHRoZSBjb3JyZWN0IEV0aGVybmV0IGRldmljZS4gUmVhbFZpZXcvRUIgcmV2IEQKKyAqIHBsYXRmb3JtcyB1c2UgdGhlIG5ld2VyIFNNU0MgTEFOOTExOCBFdGhlcm5ldCBjaGlwCisgKi8KK3N0YXRpYyBpbnQgZXRoX2RldmljZV9yZWdpc3Rlcih2b2lkKQoreworCXZvaWQgX19pb21lbSAqZXRoX2FkZHIgPSBpb3JlbWFwKFJFQUxWSUVXX0VCX0VUSF9CQVNFLCBTWl80Syk7CisJdTMyIGlkcmV2OworCisJaWYgKCFldGhfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZHJldiA9IHJlYWRsKGV0aF9hZGRyICsgMHg1MCk7CisJaWYgKChpZHJldiAmIDB4RkZGRjAwMDApID09IDB4MDExODAwMDApCisJCS8qIFNNU0MgTEFOOTExOCBjaGlwIHByZXNlbnQgKi8KKwkJcmVhbHZpZXdfZWJfZXRoX2RldmljZS5uYW1lID0gInNtYzkxMXgiOworCWVsc2UKKwkJLyogU01TQyA5MUMxMTEgY2hpcCBwcmVzZW50ICovCisJCXJlYWx2aWV3X2ViX2V0aF9kZXZpY2UubmFtZSA9ICJzbWM5MXgiOworCisJaW91bm1hcChldGhfYWRkcik7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZWJfZXRoX2RldmljZSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAlpZiAoY29yZV90aWxlX2ViMTFtcCgpKSB7CkBAIC0yNjMsMTQgKzI5MSwxNCBAQAogCiAjaWZuZGVmIENPTkZJR19SRUFMVklFV19FQl9BUk0xMU1QX1JFVkIKIAkJLyogYm9hcmQgR0lDLCBzZWNvbmRhcnkgKi8KLQkJZ2ljX2Rpc3RfaW5pdCgxLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfR0lDX0RJU1RfQkFTRSksIDY0KTsKLQkJZ2ljX2NwdV9pbml0KDEsIF9faW9fYWRkcmVzcyhSRUFMVklFV19HSUNfQ1BVX0JBU0UpKTsKKwkJZ2ljX2Rpc3RfaW5pdCgxLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfR0lDX0RJU1RfQkFTRSksIDY0KTsKKwkJZ2ljX2NwdV9pbml0KDEsIF9faW9fYWRkcmVzcyhSRUFMVklFV19FQl9HSUNfQ1BVX0JBU0UpKTsKIAkJZ2ljX2Nhc2NhZGVfaXJxKDEsIElSUV9FQjExTVBfRUJfSVJRMSk7CiAjZW5kaWYKIAl9IGVsc2UgewogCQkvKiBib2FyZCBHSUMsIHByaW1hcnkgKi8KLQkJZ2ljX2NwdV9iYXNlX2FkZHIgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfR0lDX0NQVV9CQVNFKTsKLQkJZ2ljX2Rpc3RfaW5pdCgwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfR0lDX0RJU1RfQkFTRSksIDI5KTsKKwkJZ2ljX2NwdV9iYXNlX2FkZHIgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfR0lDX0NQVV9CQVNFKTsKKwkJZ2ljX2Rpc3RfaW5pdCgwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfR0lDX0RJU1RfQkFTRSksIDI5KTsKIAkJZ2ljX2NwdV9pbml0KDAsIGdpY19jcHVfYmFzZV9hZGRyKTsKIAl9CiB9CkBAIC0zMDEsMTQgKzMyOSwxOSBAQAogCWttaTFfZGV2aWNlLmlycVswXQk9IElSUV9FQjExTVBfS01JMTsKIAogCS8qIHBsYXRmb3JtIGRldmljZXMgKi8KLQlyZWFsdmlld19lYl9zbWM5MXhfcmVzb3VyY2VzWzFdLnN0YXJ0CT0gSVJRX0VCMTFNUF9FVEg7Ci0JcmVhbHZpZXdfZWJfc21jOTF4X3Jlc291cmNlc1sxXS5lbmQJPSBJUlFfRUIxMU1QX0VUSDsKKwlyZWFsdmlld19lYl9ldGhfcmVzb3VyY2VzWzFdLnN0YXJ0CT0gSVJRX0VCMTFNUF9FVEg7CisJcmVhbHZpZXdfZWJfZXRoX3Jlc291cmNlc1sxXS5lbmQJPSBJUlFfRUIxMU1QX0VUSDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X2ViX3RpbWVyX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdGltZXJfaXJxOwogCisJdGltZXIwX3ZhX2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfVElNRVIwXzFfQkFTRSk7CisJdGltZXIxX3ZhX2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfVElNRVIwXzFfQkFTRSkgKyAweDIwOworCXRpbWVyMl92YV9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCX1RJTUVSMl8zX0JBU0UpOworCXRpbWVyM192YV9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCX1RJTUVSMl8zX0JBU0UpICsgMHgyMDsKKwogCWlmIChjb3JlX3RpbGVfZWIxMW1wKCkpIHsKICNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCiAJCXR3ZF9iYXNlX2FkZHIgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUIxMU1QX1RXRF9CQVNFKTsKQEAgLTMzMiwxNiArMzY1LDE4IEBACiAJaWYgKGNvcmVfdGlsZV9lYjExbXAoKSkgewogCQlyZWFsdmlld19lYjExbXBfZml4dXAoKTsKIAorI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiAJCS8qIDFNQiAoMTI4S0Ivd2F5KSwgOC13YXkgYXNzb2NpYXRpdml0eSwgZXZtb24vcGFyaXR5L3NoYXJlIGVuYWJsZWQKIAkJICogQml0czogIC4uLi4gLi4uMCAwMTExIDEwMDEgMDAwMCAuLi4uIC4uLi4gLi4uLiAqLwogCQlsMngwX2luaXQoX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCMTFNUF9MMjIwX0JBU0UpLCAweDAwNzkwMDAwLCAweGZlMDAwZmZmKTsKKyNlbmRpZgogCX0KIAogCWNsa19yZWdpc3RlcigmcmVhbHZpZXdfY2xjZF9jbGspOwogCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19mbGFzaF9kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZWJfc21jOTF4X2RldmljZSk7CisJcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIoJnJlYWx2aWV3X2ViX2ZsYXNoX3Jlc291cmNlLCAxKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOworCWV0aF9kZXZpY2VfcmVnaXN0ZXIoKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CkBAIC0zNTUsOCArMzkwLDggQEAKIAogTUFDSElORV9TVEFSVChSRUFMVklFV19FQiwgIkFSTS1SZWFsVmlldyBFQiIpCiAJLyogTWFpbnRhaW5lcjogQVJNIEx0ZC9EZWVwIEJsdWUgU29sdXRpb25zIEx0ZCAqLwotCS5waHlzX2lvCT0gUkVBTFZJRVdfVUFSVDBfQkFTRSwKLQkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLnBoeXNfaW8JPSBSRUFMVklFV19FQl9VQVJUMF9CQVNFLAorCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfZWJfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2Y1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0MzA3Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLXBiMTE3Ni5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHJlYWx2aWV3X3BiMTE3Nl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19TWVNfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19TWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19QQjExNzZfR0lDX0NQVV9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX1BCMTE3Nl9HSUNfQ1BVX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X0dJQ19ESVNUX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMTc2X0dJQ19ESVNUX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfREMxMTc2X0dJQ19DUFVfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19EQzExNzZfR0lDX0NQVV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX0RDMTE3Nl9HSUNfRElTVF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX0RDMTE3Nl9HSUNfRElTVF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1NDVExfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19TQ1RMX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1RJTUVSMF8xX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMTc2X1RJTUVSMF8xX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1RJTUVSMl8zX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMTc2X1RJTUVSMl8zX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X0wyMjBfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19QQjExNzZfTDIyMF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl84SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiMTE3Nl9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQocmVhbHZpZXdfcGIxMTc2X2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMTc2X2lvX2Rlc2MpKTsKK30KKworLyoKKyAqIFJlYWxWaWV3IFBCMTE3NiBBTUJBIGRldmljZXMKKyAqLworI2RlZmluZSBHUElPMl9JUlEJeyBJUlFfUEIxMTc2X0dQSU8yLCBOT19JUlEgfQorI2RlZmluZSBHUElPMl9ETUEJeyAwLCAwIH0KKyNkZWZpbmUgR1BJTzNfSVJRCXsgSVJRX1BCMTE3Nl9HUElPMywgTk9fSVJRIH0KKyNkZWZpbmUgR1BJTzNfRE1BCXsgMCwgMCB9CisjZGVmaW5lIEFBQ0lfSVJRCXsgSVJRX1BCMTE3Nl9BQUNJLCBOT19JUlEgfQorI2RlZmluZSBBQUNJX0RNQQl7IDB4ODAsIDB4ODEgfQorI2RlZmluZSBNTUNJMF9JUlEJeyBJUlFfUEIxMTc2X01NQ0kwQSwgSVJRX1BCMTE3Nl9NTUNJMEIgfQorI2RlZmluZSBNTUNJMF9ETUEJeyAweDg0LCAwIH0KKyNkZWZpbmUgS01JMF9JUlEJeyBJUlFfUEIxMTc2X0tNSTAsIE5PX0lSUSB9CisjZGVmaW5lIEtNSTBfRE1BCXsgMCwgMCB9CisjZGVmaW5lIEtNSTFfSVJRCXsgSVJRX1BCMTE3Nl9LTUkxLCBOT19JUlEgfQorI2RlZmluZSBLTUkxX0RNQQl7IDAsIDAgfQorI2RlZmluZSBQQjExNzZfU01DX0lSUQl7IE5PX0lSUSwgTk9fSVJRIH0KKyNkZWZpbmUgUEIxMTc2X1NNQ19ETUEJeyAwLCAwIH0KKyNkZWZpbmUgTVBNQ19JUlEJeyBOT19JUlEsIE5PX0lSUSB9CisjZGVmaW5lIE1QTUNfRE1BCXsgMCwgMCB9CisjZGVmaW5lIFBCMTE3Nl9DTENEX0lSUQl7IElSUV9EQzExNzZfQ0xDRCwgTk9fSVJRIH0KKyNkZWZpbmUgUEIxMTc2X0NMQ0RfRE1BCXsgMCwgMCB9CisjZGVmaW5lIERNQUNfSVJRCXsgSVJRX1BCMTE3Nl9ETUFDLCBOT19JUlEgfQorI2RlZmluZSBETUFDX0RNQQl7IDAsIDAgfQorI2RlZmluZSBTQ1RMX0lSUQl7IE5PX0lSUSwgTk9fSVJRIH0KKyNkZWZpbmUgU0NUTF9ETUEJeyAwLCAwIH0KKyNkZWZpbmUgUEIxMTc2X1dBVENIRE9HX0lSUQl7IElSUV9EQzExNzZfV0FUQ0hET0csIE5PX0lSUSB9CisjZGVmaW5lIFBCMTE3Nl9XQVRDSERPR19ETUEJeyAwLCAwIH0KKyNkZWZpbmUgUEIxMTc2X0dQSU8wX0lSUQl7IElSUV9QQjExNzZfR1BJTzAsIE5PX0lSUSB9CisjZGVmaW5lIFBCMTE3Nl9HUElPMF9ETUEJeyAwLCAwIH0KKyNkZWZpbmUgR1BJTzFfSVJRCXsgSVJRX1BCMTE3Nl9HUElPMSwgTk9fSVJRIH0KKyNkZWZpbmUgR1BJTzFfRE1BCXsgMCwgMCB9CisjZGVmaW5lIFBCMTE3Nl9SVENfSVJRCXsgSVJRX0RDMTE3Nl9SVEMsIE5PX0lSUSB9CisjZGVmaW5lIFBCMTE3Nl9SVENfRE1BCXsgMCwgMCB9CisjZGVmaW5lIFNDSV9JUlEJCXsgSVJRX1BCMTE3Nl9TQ0ksIE5PX0lSUSB9CisjZGVmaW5lIFNDSV9ETUEJCXsgNywgNiB9CisjZGVmaW5lIFBCMTE3Nl9VQVJUMF9JUlEJeyBJUlFfREMxMTc2X1VBUlQwLCBOT19JUlEgfQorI2RlZmluZSBQQjExNzZfVUFSVDBfRE1BCXsgMTUsIDE0IH0KKyNkZWZpbmUgUEIxMTc2X1VBUlQxX0lSUQl7IElSUV9EQzExNzZfVUFSVDEsIE5PX0lSUSB9CisjZGVmaW5lIFBCMTE3Nl9VQVJUMV9ETUEJeyAxMywgMTIgfQorI2RlZmluZSBQQjExNzZfVUFSVDJfSVJRCXsgSVJRX0RDMTE3Nl9VQVJUMiwgTk9fSVJRIH0KKyNkZWZpbmUgUEIxMTc2X1VBUlQyX0RNQQl7IDExLCAxMCB9CisjZGVmaW5lIFBCMTE3Nl9VQVJUM19JUlEJeyBJUlFfREMxMTc2X1VBUlQzLCBOT19JUlEgfQorI2RlZmluZSBQQjExNzZfVUFSVDNfRE1BCXsgMHg4NiwgMHg4NyB9CisjZGVmaW5lIFBCMTE3Nl9TU1BfSVJRCQl7IElSUV9QQjExNzZfU1NQLCBOT19JUlEgfQorI2RlZmluZSBQQjExNzZfU1NQX0RNQQkJeyA5LCA4IH0KKworLyogRlBHQSBQcmltZWNlbGxzICovCitBTUJBX0RFVklDRShhYWNpLAkiZnBnYTowNCIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOjA1IiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6MDYiLAlLTUkwLAkJTlVMTCk7CitBTUJBX0RFVklDRShrbWkxLAkiZnBnYTowNyIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTowOSIsCVBCMTE3Nl9VQVJUMywJTlVMTCk7CisKKy8qIERldkNoaXAgUHJpbWVjZWxscyAqLworQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEIxMTc2X1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCMTE3Nl9HUElPMCwJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJTlVMTCk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQjExNzZfUlRDLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OmYzIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQjExNzZfU1NQLAlOVUxMKTsKKworLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6MjAiLAlQQjExNzZfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKKy8vQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlQQjExNzZfRE1BQywJTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisvLwkmZG1hY19kZXZpY2UsCisJJnVhcnQwX2RldmljZSwKKwkmdWFydDFfZGV2aWNlLAorCSZ1YXJ0Ml9kZXZpY2UsCisJJnVhcnQzX2RldmljZSwKKwkmc21jX2RldmljZSwKKwkmY2xjZF9kZXZpY2UsCisJJnNjdGxfZGV2aWNlLAorCSZ3ZG9nX2RldmljZSwKKwkmZ3BpbzBfZGV2aWNlLAorCSZncGlvMV9kZXZpY2UsCisJJmdwaW8yX2RldmljZSwKKwkmcnRjX2RldmljZSwKKwkmc2NpMF9kZXZpY2UsCisJJnNzcDBfZGV2aWNlLAorCSZhYWNpX2RldmljZSwKKwkmbW1jMF9kZXZpY2UsCisJJmttaTBfZGV2aWNlLAorCSZrbWkxX2RldmljZSwKK307CisKKy8qCisgKiBSZWFsVmlldyBQQjExNzYgcGxhdGZvcm0gZGV2aWNlcworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiMTE3Nl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCQk9IFJFQUxWSUVXX1BCMTE3Nl9GTEFTSF9CQVNFLAorCS5lbmQJCQk9IFJFQUxWSUVXX1BCMTE3Nl9GTEFTSF9CQVNFICsgUkVBTFZJRVdfUEIxMTc2X0ZMQVNIX1NJWkUgLSAxLAorCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiMTE3Nl9zbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBSRUFMVklFV19QQjExNzZfRVRIX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEIxMTc2X0VUSF9CQVNFICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gSVJRX1BCMTE3Nl9FVEgsCisJCS5lbmQJCT0gSVJRX1BCMTE3Nl9FVEgsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfcGIxMTc2X3Ntc2M5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTExeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlYWx2aWV3X3BiMTE3Nl9zbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJlYWx2aWV3X3BiMTE3Nl9zbXNjOTExeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCit7CisJLyogQVJNMTE3NiBEZXZDaGlwIEdJQywgcHJpbWFyeSAqLworCWdpY19jcHVfYmFzZV9hZGRyID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX0RDMTE3Nl9HSUNfQ1BVX0JBU0UpOworCWdpY19kaXN0X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX0RDMTE3Nl9HSUNfRElTVF9CQVNFKSwgSVJRX0RDMTE3Nl9HSUNfU1RBUlQpOworCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisKKwkvKiBib2FyZCBHSUMsIHNlY29uZGFyeSAqLworCWdpY19kaXN0X2luaXQoMSwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCMTE3Nl9HSUNfRElTVF9CQVNFKSwgSVJRX1BCMTE3Nl9HSUNfU1RBUlQpOworCWdpY19jcHVfaW5pdCgxLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMTc2X0dJQ19DUFVfQkFTRSkpOworCWdpY19jYXNjYWRlX2lycSgxLCBJUlFfREMxMTc2X1BCX0lSUTEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMTc2X3RpbWVyX2luaXQodm9pZCkKK3sKKwl0aW1lcjBfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19QQjExNzZfVElNRVIwXzFfQkFTRSk7CisJdGltZXIxX3ZhX2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMTc2X1RJTUVSMF8xX0JBU0UpICsgMHgyMDsKKwl0aW1lcjJfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19QQjExNzZfVElNRVIyXzNfQkFTRSk7CisJdGltZXIzX3ZhX2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMTc2X1RJTUVSMl8zX0JBU0UpICsgMHgyMDsKKworCXJlYWx2aWV3X3RpbWVyX2luaXQoSVJRX0RDMTE3Nl9USU1FUjApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciByZWFsdmlld19wYjExNzZfdGltZXIgPSB7CisJLmluaXQJCT0gcmVhbHZpZXdfcGIxMTc2X3RpbWVyX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMTc2X2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCisJLyogMTI4S2IgKDE2S2Ivd2F5KSA4LXdheSBhc3NvY2lhdGl2aXR5LiBldm1vbi9wYXJpdHkvc2hhcmUgZW5hYmxlZC4gKi8KKwlsMngwX2luaXQoX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCMTE3Nl9MMjIwX0JBU0UpLCAweDAwNzMwMDAwLCAweGZlMDAwZmZmKTsKKyNlbmRpZgorCisJY2xrX3JlZ2lzdGVyKCZyZWFsdmlld19jbGNkX2Nsayk7CisKKwlyZWFsdmlld19mbGFzaF9yZWdpc3RlcigmcmVhbHZpZXdfcGIxMTc2X2ZsYXNoX3Jlc291cmNlLCAxKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X3BiMTE3Nl9zbXNjOTExeF9kZXZpY2UpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CisJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKKwkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoZCwgJmlvbWVtX3Jlc291cmNlKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfTEVEUworCWxlZHNfZXZlbnQgPSByZWFsdmlld19sZWRzX2V2ZW50OworI2VuZGlmCit9CisKK01BQ0hJTkVfU1RBUlQoUkVBTFZJRVdfUEIxMTc2LCAiQVJNLVJlYWxWaWV3IFBCMTE3NiIpCisJLyogTWFpbnRhaW5lcjogQVJNIEx0ZC9EZWVwIEJsdWUgU29sdXRpb25zIEx0ZCAqLworCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGIxMTc2X21hcF9pbywKKwkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZyZWFsdmlld19wYjExNzZfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHJlYWx2aWV3X3BiMTE3Nl9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Y2UxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0wLDAgKzEsMzQyIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0MzA3Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLXBiMTFtcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHJlYWx2aWV3X3BiMTFtcF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19TWVNfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19TWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19QQjExTVBfR0lDX0NQVV9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX1BCMTFNUF9HSUNfQ1BVX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX0dJQ19ESVNUX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMU1QX0dJQ19ESVNUX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfVEMxMU1QX0dJQ19DUFVfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19UQzExTVBfR0lDX0NQVV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1RDMTFNUF9HSUNfRElTVF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX1RDMTFNUF9HSUNfRElTVF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1NDVExfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19TQ1RMX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1RJTUVSMF8xX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMU1QX1RJTUVSMF8xX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1RJTUVSMl8zX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMU1QX1RJTUVSMl8zX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfVEMxMU1QX0wyMjBfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19UQzExTVBfTDIyMF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl84SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiMTFtcF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQocmVhbHZpZXdfcGIxMW1wX2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2lvX2Rlc2MpKTsKK30KKworLyoKKyAqIFJlYWxWaWV3IFBCMTFNUENvcmUgQU1CQSBkZXZpY2VzCisgKi8KKworI2RlZmluZSBHUElPMl9JUlEJCXsgSVJRX1BCMTFNUF9HUElPMiwgTk9fSVJRIH0KKyNkZWZpbmUgR1BJTzJfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBHUElPM19JUlEJCXsgSVJRX1BCMTFNUF9HUElPMywgTk9fSVJRIH0KKyNkZWZpbmUgR1BJTzNfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBBQUNJX0lSUQkJeyBJUlFfVEMxMU1QX0FBQ0ksIE5PX0lSUSB9CisjZGVmaW5lIEFBQ0lfRE1BCQl7IDB4ODAsIDB4ODEgfQorI2RlZmluZSBNTUNJMF9JUlEJCXsgSVJRX1RDMTFNUF9NTUNJMEEsIElSUV9UQzExTVBfTU1DSTBCIH0KKyNkZWZpbmUgTU1DSTBfRE1BCQl7IDB4ODQsIDAgfQorI2RlZmluZSBLTUkwX0lSUQkJeyBJUlFfVEMxMU1QX0tNSTAsIE5PX0lSUSB9CisjZGVmaW5lIEtNSTBfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBLTUkxX0lSUQkJeyBJUlFfVEMxMU1QX0tNSTEsIE5PX0lSUSB9CisjZGVmaW5lIEtNSTFfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBQQjExTVBfU01DX0lSUQkJeyBOT19JUlEsIE5PX0lSUSB9CisjZGVmaW5lIFBCMTFNUF9TTUNfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBNUE1DX0lSUQkJeyBOT19JUlEsIE5PX0lSUSB9CisjZGVmaW5lIE1QTUNfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBQQjExTVBfQ0xDRF9JUlEJCXsgSVJRX1BCMTFNUF9DTENELCBOT19JUlEgfQorI2RlZmluZSBQQjExTVBfQ0xDRF9ETUEJCXsgMCwgMCB9CisjZGVmaW5lIERNQUNfSVJRCQl7IElSUV9QQjExTVBfRE1BQywgTk9fSVJRIH0KKyNkZWZpbmUgRE1BQ19ETUEJCXsgMCwgMCB9CisjZGVmaW5lIFNDVExfSVJRCQl7IE5PX0lSUSwgTk9fSVJRIH0KKyNkZWZpbmUgU0NUTF9ETUEJCXsgMCwgMCB9CisjZGVmaW5lIFBCMTFNUF9XQVRDSERPR19JUlEJeyBJUlFfUEIxMU1QX1dBVENIRE9HLCBOT19JUlEgfQorI2RlZmluZSBQQjExTVBfV0FUQ0hET0dfRE1BCXsgMCwgMCB9CisjZGVmaW5lIFBCMTFNUF9HUElPMF9JUlEJeyBJUlFfUEIxMU1QX0dQSU8wLCBOT19JUlEgfQorI2RlZmluZSBQQjExTVBfR1BJTzBfRE1BCXsgMCwgMCB9CisjZGVmaW5lIEdQSU8xX0lSUQkJeyBJUlFfUEIxMU1QX0dQSU8xLCBOT19JUlEgfQorI2RlZmluZSBHUElPMV9ETUEJCXsgMCwgMCB9CisjZGVmaW5lIFBCMTFNUF9SVENfSVJRCQl7IElSUV9UQzExTVBfUlRDLCBOT19JUlEgfQorI2RlZmluZSBQQjExTVBfUlRDX0RNQQkJeyAwLCAwIH0KKyNkZWZpbmUgU0NJX0lSUQkJCXsgSVJRX1BCMTFNUF9TQ0ksIE5PX0lSUSB9CisjZGVmaW5lIFNDSV9ETUEJCQl7IDcsIDYgfQorI2RlZmluZSBQQjExTVBfVUFSVDBfSVJRCXsgSVJRX1RDMTFNUF9VQVJUMCwgTk9fSVJRIH0KKyNkZWZpbmUgUEIxMU1QX1VBUlQwX0RNQQl7IDE1LCAxNCB9CisjZGVmaW5lIFBCMTFNUF9VQVJUMV9JUlEJeyBJUlFfVEMxMU1QX1VBUlQxLCBOT19JUlEgfQorI2RlZmluZSBQQjExTVBfVUFSVDFfRE1BCXsgMTMsIDEyIH0KKyNkZWZpbmUgUEIxMU1QX1VBUlQyX0lSUQl7IElSUV9QQjExTVBfVUFSVDIsIE5PX0lSUSB9CisjZGVmaW5lIFBCMTFNUF9VQVJUMl9ETUEJeyAxMSwgMTAgfQorI2RlZmluZSBQQjExTVBfVUFSVDNfSVJRCXsgSVJRX1BCMTFNUF9VQVJUMywgTk9fSVJRIH0KKyNkZWZpbmUgUEIxMU1QX1VBUlQzX0RNQQl7IDB4ODYsIDB4ODcgfQorI2RlZmluZSBQQjExTVBfU1NQX0lSUQkJeyBJUlFfUEIxMU1QX1NTUCwgTk9fSVJRIH0KKyNkZWZpbmUgUEIxMU1QX1NTUF9ETUEJCXsgOSwgOCB9CisKKy8qIEZQR0EgUHJpbWVjZWxscyAqLworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQjExTVBfVUFSVDMsCU5VTEwpOworCisvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KK0FNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCMTFNUF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCU5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCU5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCU5VTEwpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEIxMU1QX1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OmY0IiwJUEIxMU1QX1NTUCwJTlVMTCk7CisKKy8qIFByaW1lY2VsbHMgb24gdGhlIE5FQyBJU1NQIGNoaXAgKi8KK0FNQkFfREVWSUNFKGNsY2QsCSJpc3NwOjIwIiwJUEIxMU1QX0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLAkiaXNzcDozMCIsCURNQUMsCQlOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmZG1hY19kZXZpY2UsCisJJnVhcnQwX2RldmljZSwKKwkmdWFydDFfZGV2aWNlLAorCSZ1YXJ0Ml9kZXZpY2UsCisJJnVhcnQzX2RldmljZSwKKwkmc21jX2RldmljZSwKKwkmY2xjZF9kZXZpY2UsCisJJnNjdGxfZGV2aWNlLAorCSZ3ZG9nX2RldmljZSwKKwkmZ3BpbzBfZGV2aWNlLAorCSZncGlvMV9kZXZpY2UsCisJJmdwaW8yX2RldmljZSwKKwkmcnRjX2RldmljZSwKKwkmc2NpMF9kZXZpY2UsCisJJnNzcDBfZGV2aWNlLAorCSZhYWNpX2RldmljZSwKKwkmbW1jMF9kZXZpY2UsCisJJmttaTBfZGV2aWNlLAorCSZrbWkxX2RldmljZSwKK307CisKKy8qCisgKiBSZWFsVmlldyBQQjExTVBDb3JlIHBsYXRmb3JtIGRldmljZXMKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYjExbXBfZmxhc2hfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBSRUFMVklFV19QQjExTVBfRkxBU0gwX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEIxMU1QX0ZMQVNIMF9CQVNFICsgUkVBTFZJRVdfUEIxMU1QX0ZMQVNIMF9TSVpFIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEIxMU1QX0ZMQVNIMV9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX1BCMTFNUF9GTEFTSDFfQkFTRSArIFJFQUxWSUVXX1BCMTFNUF9GTEFTSDFfU0laRSAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYjExbXBfc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEIxMU1QX0VUSF9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX1BCMTFNUF9FVEhfQkFTRSArIFNaXzY0SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IElSUV9UQzExTVBfRVRILAorCQkuZW5kCQk9IElSUV9UQzExTVBfRVRILAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X3BiMTFtcF9zbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxMXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZWFsdmlld19wYjExbXBfc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSByZWFsdmlld19wYjExbXBfc21zYzkxMXhfcmVzb3VyY2VzLAorfTsKKworc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiMTFtcF9jZl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBSRUFMVklFV19QQjExTVBfQ0ZfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19QQjExTVBfQ0ZfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEIxMU1QX0NGX01FTV9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX1BCMTFNUF9DRl9NRU1fQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJCT0gLTEsCQkvKiBGSVhNRTogRmluZCBjb3JyZWN0IGlycSAqLworCQkuZW5kCQk9IC0xLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfcGIxMW1wX2NmX2RldmljZSA9IHsKKwkubmFtZQkJPSAiY29tcGFjdGZsYXNoIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2NmX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gcmVhbHZpZXdfcGIxMW1wX2NmX3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGxkY3RybDsKKworCS8qIG5ldyBpcnEgbW9kZSB3aXRoIG5vIERDQyAqLworCXdyaXRlbCgweDAwMDBhMDVmLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0xPQ0spKTsKKwlwbGRjdHJsID0gcmVhZGwoX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKQkrIFJFQUxWSUVXX1BCMTFNUF9TWVNfUExEX0NUUkwxKTsKKwlwbGRjdHJsIHw9IDIgPDwgMjI7CisJd3JpdGVsKHBsZGN0cmwsIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyBSRUFMVklFV19QQjExTVBfU1lTX1BMRF9DVFJMMSk7CisJd3JpdGVsKDB4MDAwMDAwMDAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfTE9DSykpOworCisJLyogQVJNMTFNUENvcmUgdGVzdCBjaGlwIEdJQywgcHJpbWFyeSAqLworCWdpY19jcHVfYmFzZV9hZGRyID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9HSUNfQ1BVX0JBU0UpOworCWdpY19kaXN0X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9HSUNfRElTVF9CQVNFKSwgMjkpOworCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisKKwkvKiBib2FyZCBHSUMsIHNlY29uZGFyeSAqLworCWdpY19kaXN0X2luaXQoMSwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCMTFNUF9HSUNfRElTVF9CQVNFKSwgSVJRX1BCMTFNUF9HSUNfU1RBUlQpOworCWdpY19jcHVfaW5pdCgxLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMU1QX0dJQ19DUFVfQkFTRSkpOworCWdpY19jYXNjYWRlX2lycSgxLCBJUlFfVEMxMU1QX1BCX0lSUTEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQodm9pZCkKK3sKKwl0aW1lcjBfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19QQjExTVBfVElNRVIwXzFfQkFTRSk7CisJdGltZXIxX3ZhX2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMU1QX1RJTUVSMF8xX0JBU0UpICsgMHgyMDsKKwl0aW1lcjJfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19QQjExTVBfVElNRVIyXzNfQkFTRSk7CisJdGltZXIzX3ZhX2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMU1QX1RJTUVSMl8zX0JBU0UpICsgMHgyMDsKKworI2lmZGVmIENPTkZJR19MT0NBTF9USU1FUlMKKwl0d2RfYmFzZV9hZGRyID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9UV0RfQkFTRSk7CisJdHdkX3NpemUgPSBSRUFMVklFV19UQzExTVBfVFdEX1NJWkU7CisjZW5kaWYKKwlyZWFsdmlld190aW1lcl9pbml0KElSUV9UQzExTVBfVElNRVIwXzEpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciByZWFsdmlld19wYjExbXBfdGltZXIgPSB7CisJLmluaXQJCT0gcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMW1wX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCisJLyogMU1CICgxMjhLQi93YXkpLCA4LXdheSBhc3NvY2lhdGl2aXR5LCBldm1vbi9wYXJpdHkvc2hhcmUgZW5hYmxlZAorCSAqIEJpdHM6ICAuLi4uIC4uLjAgMDExMSAxMDAxIDAwMDAgLi4uLiAuLi4uIC4uLi4gKi8KKwlsMngwX2luaXQoX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9MMjIwX0JBU0UpLCAweDAwNzkwMDAwLCAweGZlMDAwZmZmKTsKKyNlbmRpZgorCisJY2xrX3JlZ2lzdGVyKCZyZWFsdmlld19jbGNkX2Nsayk7CisKKwlyZWFsdmlld19mbGFzaF9yZWdpc3RlcihyZWFsdmlld19wYjExbXBfZmxhc2hfcmVzb3VyY2UsCisJCQkJQVJSQVlfU0laRShyZWFsdmlld19wYjExbXBfZmxhc2hfcmVzb3VyY2UpKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X3BiMTFtcF9zbXNjOTExeF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfaTJjX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19wYjExbXBfY2ZfZGV2aWNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgeworCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CisJCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKGQsICZpb21lbV9yZXNvdXJjZSk7CisJfQorCisjaWZkZWYgQ09ORklHX0xFRFMKKwlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKKyNlbmRpZgorfQorCitNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCMTFNUCwgIkFSTS1SZWFsVmlldyBQQjExTVBDb3JlIikKKwkvKiBNYWludGFpbmVyOiBBUk0gTHRkL0RlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkICovCisJLnBoeXNfaW8JPSBSRUFMVklFV19QQjExTVBfVUFSVDBfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQjExTVBfVUFSVDBfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSByZWFsdmlld19wYjExbXBfbWFwX2lvLAorCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKKwkudGltZXIJCT0gJnJlYWx2aWV3X3BiMTFtcF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcmVhbHZpZXdfcGIxMW1wX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwppbmRleCBlMjA3OWNmLi5jZDNkYzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwpAQCAtOTcsNiArOTcsMTMgQEAKIAkgIFNheSBZCWhlcmUgdG8gZW5hYmxlIHRoZSBQQzEwNCBJUlEgcm91dGluZyBvbiB0aGUKIAkgIFNpbXRlYyBCQVNUIChFQjI0MTBJVFgpCiAKK2NvbmZpZyBNQUNIX1RDVF9IQU1NRVIKKwlib29sICJUQ1QgSGFtbWVyIEJvYXJkIgorCXNlbGVjdCBDUFVfUzNDMjQxMAorCWhlbHAKKwkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFRpbkNhblRvb2xzIEhhbW1lciBCb2FyZAorICAgICAgICAgICA8aHR0cDovL3d3dy50aW5jYW50b29scy5jb20+CisKIGNvbmZpZyBNQUNIX1ZSMTAwMAogCWJvb2wgIlRob3Jjb20gVlIxMDAwIgogCXNlbGVjdCBQTV9TSU1URUMgaWYgUE0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQppbmRleCAzZTdhODU1Li5jYWJjMTNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC0yNyw1ICsyNyw2IEBACiBvYmotJChDT05GSUdfTUFDSF9PVE9NKQkJKz0gbWFjaC1vdG9tLm8KIG9iai0kKENPTkZJR19NQUNIX0FNTF9NNTkwMCkJKz0gbWFjaC1hbWxtNTkwMC5vCiBvYmotJChDT05GSUdfQkFTVF9QQzEwNF9JUlEpCSs9IGJhc3QtaXJxLm8KK29iai0kKENPTkZJR19NQUNIX1RDVF9IQU1NRVIpCSs9IG1hY2gtdGN0X2hhbW1lci5vCiBvYmotJChDT05GSUdfTUFDSF9WUjEwMDApCSs9IG1hY2gtdnIxMDAwLm8gdXNiLXNpbXRlYy5vCiBvYmotJChDT05GSUdfTUFDSF9RVDI0MTApCSs9IG1hY2gtcXQyNDEwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwppbmRleCA2NjE3NTQ3Li42NjFhMjM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG05MDAwLmg+CkBAIC0yMzYsNiArMjM3LDM2IEBACiAKIC8qIE5BTkQgRmxhc2ggb24gQkFTVCBib2FyZCAqLwogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGJhc3RfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwkvKiBlbnN1cmUgdGhhdCBhbiBuUkVTRVQgaXMgbm90IGdlbmVyYXRlZCBvbiByZXN1bWUuICovCisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQTIxLCAxKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BBMjEsIFMzQzI0MTBfR1BBMjFfT1VUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJhc3RfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzZCkKK3sKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BBMjEsIFMzQzI0MTBfR1BBMjFfblJTVE9VVCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGJhc3RfcG1fc3VzcGVuZCBOVUxMCisjZGVmaW5lIGJhc3RfcG1fcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBiYXN0X3BtX3N5c2NsYXNzID0geworCS5uYW1lCQk9ICJtYWNoLWJhc3QiLAorCS5zdXNwZW5kCT0gYmFzdF9wbV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYmFzdF9wbV9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgYmFzdF9wbV9zeXNkZXYgPSB7CisJLmNscwkJPSAmYmFzdF9wbV9zeXNjbGFzcywKK307CiAKIHN0YXRpYyBpbnQgc21hcnRtZWRpYV9tYXBbXSA9IHsgMCB9Owogc3RhdGljIGludCBjaGlwMF9tYXBbXSA9IHsgMSB9OwpAQCAtNTYxLDEwICs1OTIsMTAgQEAKIHsKIAkvKiBpbml0aWFsaXNlIHRoZSBjbG9ja3MgKi8KIAotCXMzYzI0eHhfZGNsazAucGFyZW50ID0gTlVMTDsKKwlzM2MyNHh4X2RjbGswLnBhcmVudCA9ICZjbGtfdXBsbDsKIAlzM2MyNHh4X2RjbGswLnJhdGUgICA9IDEyKjEwMDAqMTAwMDsKIAotCXMzYzI0eHhfZGNsazEucGFyZW50ID0gTlVMTDsKKwlzM2MyNHh4X2RjbGsxLnBhcmVudCA9ICZjbGtfdXBsbDsKIAlzM2MyNHh4X2RjbGsxLnJhdGUgICA9IDI0KjEwMDAqMTAwMDsKIAogCXMzYzI0eHhfY2xrb3V0MC5wYXJlbnQgID0gJnMzYzI0eHhfZGNsazA7CkBAIC01ODYsNiArNjE3LDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGJhc3RfaW5pdCh2b2lkKQogeworCXN5c2Rldl9jbGFzc19yZWdpc3RlcigmYmFzdF9wbV9zeXNjbGFzcyk7CisJc3lzZGV2X3JlZ2lzdGVyKCZiYXN0X3BtX3N5c2Rldik7CisKIAlzM2MyNHh4X2ZiX3NldF9wbGF0ZGF0YSgmYmFzdF9mYl9pbmZvKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhiYXN0X2RldmljZXMsIEFSUkFZX1NJWkUoYmFzdF9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwZDQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYwpAQCAtMCwwICsxLDE2MCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdGN0X2hhbW1lci5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFRpbkNhblRvb2xzCisgKglEYXZpZCBBbmRlcnMgPGRhbmRlcnNAYW1sdGQuY29tPgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBASGlzdG9yeToKKyAqIGRlcml2ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMsIHdyaXR0ZW4gYnkKKyAqIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHRjdF9oYW1tZXJfbm9yX3Jlc291cmNlID0geworCQkuc3RhcnQgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgPSAweDAxMDAwMDAwIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gdGN0X2hhbW1lcl9tdGRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlN5c3RlbSIsCisJCS5zaXplCQk9IDB4MjQwMDAwLAorCQkub2Zmc2V0CQk9IDAsCisJCS5tYXNrX2ZsYWdzIAk9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lCQk9ICJKRkZTMiIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHRjdF9oYW1tZXJfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gdGN0X2hhbW1lcl9tdGRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHRjdF9oYW1tZXJfbXRkX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdGN0X2hhbW1lcl9kZXZpY2Vfbm9yID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmdGN0X2hhbW1lcl9mbGFzaF9kYXRhLAorCQl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmdGN0X2hhbW1lcl9ub3JfcmVzb3VyY2UsCit9OworCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB0Y3RfaGFtbWVyX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Cit9OworCisjZGVmaW5lIFVDT04gUzNDMjQxMF9VQ09OX0RFRkFVTFQKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHRjdF9oYW1tZXJfdWFydGNmZ3NbXSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfQorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdGN0X2hhbW1lcl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV9hZGMsCisJJnMzY19kZXZpY2Vfd2R0LAorCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2VfcnRjLAorCSZzM2NfZGV2aWNlX3VzYmdhZGdldCwKKwkmczNjX2RldmljZV9zZGksCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJJnRjdF9oYW1tZXJfZGV2aWNlX25vciwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRjdF9oYW1tZXJfbWFwX2lvKHZvaWQpCit7CisJczNjMjR4eF9pbml0X2lvKHRjdF9oYW1tZXJfaW9kZXNjLCBBUlJBWV9TSVpFKHRjdF9oYW1tZXJfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKKwlzM2MyNHh4X2luaXRfdWFydHModGN0X2hhbW1lcl91YXJ0Y2ZncywgQVJSQVlfU0laRSh0Y3RfaGFtbWVyX3VhcnRjZmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0Y3RfaGFtbWVyX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyh0Y3RfaGFtbWVyX2RldmljZXMsIEFSUkFZX1NJWkUodGN0X2hhbW1lcl9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoVENUX0hBTU1FUiwgIlRDVF9IQU1NRVIiKQorCS5waHlzX2lvCT0gUzNDMjQxMF9QQV9VQVJULAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0MyNFhYX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDAsCisJLm1hcF9pbwkJPSB0Y3RfaGFtbWVyX21hcF9pbywKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSB0Y3RfaGFtbWVyX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKaW5kZXggM2FhZGU3Yi4uYzU2NDIzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogewogCS8qIGluaXRpYWxpc2UgY2xvY2sgc291cmNlcyAqLwogCi0JczNjMjR4eF9kY2xrMC5wYXJlbnQgPSBOVUxMOworCXMzYzI0eHhfZGNsazAucGFyZW50ID0gJmNsa191cGxsOwogCXMzYzI0eHhfZGNsazAucmF0ZSAgID0gMTIqMTAwMCoxMDAwOwogCiAJczNjMjR4eF9kY2xrMS5wYXJlbnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKaW5kZXggYWJmMTU5OS4uOThhMGRlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkvKiB3b3JrIG91dCBjbG9jayBzY2FsaW5ncyAqLwogCiAJaGNsayA9IGZjbGsgLyAoKHRtcCAmIFMzQzI0MTJfQ0xLRElWTl9IRElWTl9NQVNLKSArIDEpOwotCWhjbGsgLz0gKCh0bXAgJiBTM0MyNDIxX0NMS0RJVk5fQVJNRElWTikgPyAyIDogMSk7CisJaGNsayAvPSAoKHRtcCAmIFMzQzI0MTJfQ0xLRElWTl9BUk1ESVZOKSA/IDIgOiAxKTsKIAlwY2xrID0gaGNsayAvICgodG1wICYgUzNDMjQxMl9DTEtESVZOX1BESVZOKSA/IDIgOiAxKTsKIAogCS8qIHByaW50IGJyaWVmdCBzdW1tYXJ5IG9mIGNsb2NrcywgZXRjICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hbnViaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCmluZGV4IDNkM2RmYTkuLjQ3MjU4OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCkBAIC00MTMsMTAgKzQxMywxMCBAQAogewogCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyAqLwogCi0JczNjMjR4eF9kY2xrMC5wYXJlbnQgPSBOVUxMOworCXMzYzI0eHhfZGNsazAucGFyZW50ID0gJmNsa191cGxsOwogCXMzYzI0eHhfZGNsazAucmF0ZSAgID0gMTIqMTAwMCoxMDAwOwogCi0JczNjMjR4eF9kY2xrMS5wYXJlbnQgPSBOVUxMOworCXMzYzI0eHhfZGNsazEucGFyZW50ID0gJmNsa191cGxsOwogCXMzYzI0eHhfZGNsazEucmF0ZSAgID0gMjQqMTAwMCoxMDAwOwogCiAJczNjMjR4eF9jbGtvdXQwLnBhcmVudCAgPSAmczNjMjR4eF9kY2xrMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKaW5kZXggNzhhZjc2Ni4uOGE4YWNkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMzQ0LDEwICszNDUsMTAgQEAKIAogCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyAqLwogCi0JczNjMjR4eF9kY2xrMC5wYXJlbnQgPSBOVUxMOworCXMzYzI0eHhfZGNsazAucGFyZW50ID0gJmNsa191cGxsOwogCXMzYzI0eHhfZGNsazAucmF0ZSAgID0gMTIqMTAwMCoxMDAwOwogCi0JczNjMjR4eF9kY2xrMS5wYXJlbnQgPSBOVUxMOworCXMzYzI0eHhfZGNsazEucGFyZW50ID0gJmNsa191cGxsOwogCXMzYzI0eHhfZGNsazEucmF0ZSAgID0gMjQqMTAwMCoxMDAwOwogCiAJczNjMjR4eF9jbGtvdXQwLnBhcmVudCAgPSAmczNjMjR4eF9kY2xrMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKaW5kZXggN2E2MWU4ZC4uOGUwMjQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGNsb2NrLm8gZ2VuZXJpYy5vIGlycS5vIGRtYS5vIHRpbWUubyAjbm1pLW9vcHNlci5vCitvYmoteSA6PSBjbG9jay5vIGdlbmVyaWMubyBncGlvLm8gaXJxLm8gZG1hLm8gdGltZS5vICNubWktb29wc2VyLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2JhZGdlNC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvYmFkZ2U0LmMKaW5kZXggZjYwYjdhNi4uODQyZDllNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvYmFkZ2U0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvYmFkZ2U0LmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlczogU0EtMTExMSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV0KTsKKwkJICAgICAgIF9fZnVuY19fLCByZXQpOwogCiAKIAkvKiBtYXliZSB0dXJuIG9uIDV2MCBmcm9tIHRoZSBzdGFydCAqLwpAQCAtMjQwLDExICsyNDAsMTEgQEAKIAkvKiBkZXRlY3Qgb24tPm9mZiBhbmQgb2ZmLT5vbiB0cmFuc2l0aW9ucyAqLwogCWlmICgoIW9sZF81Vl9iaXRtYXApICYmIChiYWRnZTRfNVZfYml0bWFwKSkgewogCQkvKiB3YXMgb2ZmLCBub3cgb24gKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuYWJsaW5nIDVWIHN1cHBseSByYWlsXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogZW5hYmxpbmcgNVYgc3VwcGx5IHJhaWxcbiIsIF9fZnVuY19fKTsKIAkJR1BTUiA9IEJBREdFNF9HUElPX1BDTUVONVY7CiAJfSBlbHNlIGlmICgob2xkXzVWX2JpdG1hcCkgJiYgKCFiYWRnZTRfNVZfYml0bWFwKSkgewogCQkvKiB3YXMgb24sIG5vdyBvZmYgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRpc2FibGluZyA1ViBzdXBwbHkgcmFpbFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRpc2FibGluZyA1ViBzdXBwbHkgcmFpbFxuIiwgX19mdW5jX18pOwogCQlHUENSID0gQkFER0U0X0dQSU9fUENNRU41VjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwppbmRleCBkNjg2MzBiLi4zNDMzNjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAogCWlmIChzZXR0aW5ncy0+c3BlZWQgPT0gMCkgewogCQlwYW5pYygiJXM6IGNvdWxkbid0IGZpbmQgZHJhbSBzZXR0aW5nIGZvciBzcGVlZCAlZFxuIiwKLQkJICAgICAgX19GVU5DVElPTl9fLCBuZXdfc3BlZWQpOworCQkgICAgICBfX2Z1bmNfXywgbmV3X3NwZWVkKTsKIAl9CiAKIAkvKiBObyByaXNrLCBubyBmdW46IHJ1biB3aXRoIGludGVycnVwdHMgb24hICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jCmluZGV4IDFmYmUwNTMuLmU1MDgwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIiVzOiB1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgZm9yICVzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBJUlFfRE1BMCArIGksIGRldmljZV9pZCk7CisJCSAgICAgICBfX2Z1bmNfXywgSVJRX0RNQTAgKyBpLCBkZXZpY2VfaWQpOwogCQlkbWEtPmRldmljZSA9IDA7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTY1LDEyICsxNjUsMTIgQEAKIAkJaWYgKHJlZ3MgPT0gKGRtYV9yZWdzX3QgKikmRERBUihpKSkKIAkJCWJyZWFrOwogCWlmIChpID49IFNBMTEwMF9ETUFfQ0hBTk5FTFMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIERNQSBpZGVudGlmaWVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgRE1BIGlkZW50aWZpZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghZG1hX2NoYW5baV0uZGV2aWNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFRyeWluZyB0byBmcmVlIGZyZWUgRE1BXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUcnlpbmcgdG8gZnJlZSBmcmVlIERNQVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJaWYgKHJlZ3MgPT0gKGRtYV9yZWdzX3QgKikmRERBUihpKSkKIAkJCWJyZWFrOwogCWlmIChpID49IFNBMTEwMF9ETUFfQ0hBTk5FTFMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIERNQSBpZGVudGlmaWVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgRE1BIGlkZW50aWZpZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCmluZGV4IDVjODRjNjAuLjBjMmZhMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMKQEAgLTEzOSwzNyArMTM5LDYgQEAKIAlyZXR1cm4gdjsKIH0KIAotaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChncGlvID4gR1BJT19NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCUdQRFIgJj0gfkdQSU9fR1BJTyhncGlvKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwotCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGdwaW8gPiBHUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotCUdQRFIgfD0gR1BJT19HUElPKGdwaW8pOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9vdXRwdXQpOwotCiAvKgogICogRGVmYXVsdCBwb3dlci1vZmYgZm9yIFNBMTEwMAogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmgKaW5kZXggZjA4NWQ2OC4uNzkzYzJlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuaApAQCAtOSw2ICs5LDcgQEAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNhMTEwMF90aW1lcjsKIGV4dGVybiB2b2lkIF9faW5pdCBzYTExMDBfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHNhMTEwMF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBzYTExMDBfaW5pdF9ncGlvKHZvaWQpOwogCiAjZGVmaW5lIFNFVF9CQU5LKF9fbnIsX19zdGFydCxfX3NpemUpIFwKIAltaS0+YmFua1tfX25yXS5zdGFydCA9IChfX3N0YXJ0KSwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MmYxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9ncGlvLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2dwaW8uYworICoKKyAqIEdlbmVyaWMgU0EtMTEwMCBHUElPIGhhbmRsaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJnZW5lcmljLmgiCisKK3N0YXRpYyBpbnQgc2ExMTAwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gR1BMUiAmIEdQSU9fR1BJTyhvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBzYTExMDBfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlKQorCQlHUFNSID0gR1BJT19HUElPKG9mZnNldCk7CisJZWxzZQorCQlHUENSID0gR1BJT19HUElPKG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTAwX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlHUERSICY9IH5HUElPX0dQSU8ob2Zmc2V0KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2ExMTAwX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzYTExMDBfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisJR1BEUiB8PSBHUElPX0dQSU8ob2Zmc2V0KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHNhMTEwMF9ncGlvX2NoaXAgPSB7CisJLmxhYmVsCQkJPSAiZ3BpbyIsCisJLmRpcmVjdGlvbl9pbnB1dAk9IHNhMTEwMF9kaXJlY3Rpb25faW5wdXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSBzYTExMDBfZGlyZWN0aW9uX291dHB1dCwKKwkuc2V0CQkJPSBzYTExMDBfZ3Bpb19zZXQsCisJLmdldAkJCT0gc2ExMTAwX2dwaW9fZ2V0LAorCS5iYXNlCQkJPSAwLAorCS5uZ3BpbwkJCT0gR1BJT19NQVggKyAxLAorfTsKKwordm9pZCBfX2luaXQgc2ExMTAwX2luaXRfZ3Bpbyh2b2lkKQoreworCWdwaW9jaGlwX2FkZCgmc2ExMTAwX2dwaW9fY2hpcCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYwppbmRleCBiNzJmZWUwLi44NDczYzM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKQEAgLTU5Niw3ICs1OTYsNyBAQAogCWNhc2UgSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQ6CiAJY2FzZSBJUEFRX0VHUElPX0FVRElPX09OOgogCWNhc2UgSVBBUV9FR1BJT19RTVVURToKLQkJcHJpbnRrKCIlczogZXJyb3IgLSBzaG91bGQgbm90IGJlIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKCIlczogZXJyb3IgLSBzaG91bGQgbm90IGJlIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAljYXNlIElQQVFfRUdQSU9fT1BUX05WUkFNX09OOgogCQlTRVRfQVNJQzIoR1BJTzJfT1BUX09OX05WUkFNKTsKQEAgLTYzOCw3ICs2MzgsNyBAQAogCXN0YXRpYyB1MTYgYXNpYzJfZGF0YTsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCXByaW50aygiJXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVxKTsKKwlwcmludGsoIiVzICVkXG4iLCBfX2Z1bmNfXywgcmVxKTsKIAogCXN3aXRjaCAocmVxKSB7CiAJY2FzZSBQTV9SRVNVTUU6CkBAIC02NjYsNyArNjY2LDcgQEAKIAkJYXNpYzJfZGF0YSA9IEgzODAwX0FTSUMyX0dQSU9QSU9EOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoIiVzOiB1bnJlY29nbml6ZWQgUE0gY2FsbGJhY2tcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50aygiJXM6IHVucmVjb2duaXplZCBQTSBjYWxsYmFja1xuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTcwNiw3ICs3MDYsNyBAQAogewogCWludCBpOwogCi0JaWYgKDApIHByaW50aygiJXM6IGludGVycnVwdCByZWNlaXZlZFxuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoMCkgcHJpbnRrKCIlczogaW50ZXJydXB0IHJlY2VpdmVkXG4iLCBfX2Z1bmNfXyk7CiAKIAlkZXNjLT5jaGlwLT5hY2soaXJxKTsKIApAQCAtNzE2LDIxICs3MTYsMjEgQEAKIAogCQkvKiBLUElPICovCiAJCWlycSA9IEgzODAwX0FTSUMyX0tQSUlOVEZMQUc7Ci0JCWlmICgwKSBwcmludGsoIiVzIEtQSU8gMHglMDhYXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJCWlmICgwKSBwcmludGsoIiVzIEtQSU8gMHglMDhYXG4iLCBfX2Z1bmNfXywgaXJxKTsKIAkJZm9yIChqID0gMDsgaiA8IEgzODAwX0tQSU9fSVJRX0NPVU5UOyBqKyspCiAJCQlpZiAoaXJxICYga3Bpb19pcnFfbWFza1tqXSkKIAkJCQloYW5kbGVfZWRnZV9pcnEoSDM4MDBfS1BJT19JUlFfQ09VTlQgKyBqLCBpcnFfZGVzYyArIEgzODAwX0tQSU9fSVJRX0NPVU5UICsgaik7CiAKIAkJLyogR1BJTzIgKi8KIAkJaXJxID0gSDM4MDBfQVNJQzJfR1BJSU5URkxBRzsKLQkJaWYgKDApIHByaW50aygiJXMgR1BJTyAweCUwOFhcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJaWYgKDApIHByaW50aygiJXMgR1BJTyAweCUwOFhcbiIsIF9fZnVuY19fLCBpcnEpOwogCQlmb3IgKGogPSAwOyBqIDwgSDM4MDBfR1BJT19JUlFfQ09VTlQ7IGorKykKIAkJCWlmIChpcnEgJiBncGlvX2lycV9tYXNrW2pdKQogCQkJCWhhbmRsZV9lZGdlX2lycShIMzgwMF9HUElPX0lSUV9DT1VOVCArIGosIGlycV9kZXNjICsgSDM4MDBfR1BJT19JUlFfQ09VTlQgKyBqKTsKIAl9CiAKIAlpZiAoaSA+PSBNQVhfQVNJQ19JU1JfTE9PUFMpCi0JCXByaW50aygiJXM6IGludGVycnVwdCBwcm9jZXNzaW5nIG92ZXJydW5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50aygiJXM6IGludGVycnVwdCBwcm9jZXNzaW5nIG92ZXJydW5cbiIsIF9fZnVuY19fKTsKIAogCS8qIEZvciBsZXZlbC1iYXNlZCBpbnRlcnJ1cHRzICovCiAJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jCmluZGV4IDNkYzE3ZDcuLmZhMDQwM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jCkBAIC0zNDcsNCArMzQ3LDYgQEAKIAkgKi8KIAlzZXRfaXJxX2NoaXAoSVJRX0dQSU8xMV8yNywgJnNhMTEwMF9ub3JtYWxfY2hpcCk7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU8xMV8yNywgc2ExMTAwX2hpZ2hfZ3Bpb19oYW5kbGVyKTsKKworCXNhMTEwMF9pbml0X2dwaW8oKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwppbmRleCBjMjY3NzM2OC4uYTk3OTljYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwpAQCAtMTMsNjcgKzEzLDY5IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAotI2RlZmluZSBSVENfREVGX0RJVklERVIJCSgzMjc2OCAtIDEpCi0jZGVmaW5lIFJUQ19ERUZfVFJJTSAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlOX09TQ1JfREVMVEEgMgogCi1zdGF0aWMgaW50IHNhMTEwMF9zZXRfcnRjKHZvaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2ExMTAwX29zdDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSA9IHh0aW1lLnR2X3NlYzsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjID0gZGV2X2lkOwogCi0JaWYgKFJUU1IgJiBSVFNSX0FMRSkgewotCQkvKiBtYWtlIHN1cmUgbm90IHRvIGZvcndhcmQgdGhlIGNsb2NrIG92ZXIgYW4gYWxhcm0gKi8KLQkJdW5zaWduZWQgbG9uZyBhbGFybSA9IFJUQVI7Ci0JCWlmIChjdXJyZW50X3RpbWUgPj0gYWxhcm0gJiYgYWxhcm0gPj0gUkNOUikKLQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQotCVJDTlIgPSBjdXJyZW50X3RpbWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5pdGlhbF9tYXRjaDsKLXN0YXRpYyBpbnQgbWF0Y2hfcG9zcG9uZWQ7Ci0jZW5kaWYKLQotc3RhdGljIGlycXJldHVybl90Ci1zYTExMDBfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgbmV4dF9tYXRjaDsKLQotI2lmZGVmIENPTkZJR19OT19JRExFX0haCi0JaWYgKG1hdGNoX3Bvc3BvbmVkKSB7Ci0JCW1hdGNoX3Bvc3BvbmVkID0gMDsKLQkJT1NNUjAgPSBpbml0aWFsX21hdGNoOwotCX0KLSNlbmRpZgotCi0JLyoKLQkgKiBMb29wIHVudGlsIHdlIGdldCBhaGVhZCBvZiB0aGUgZnJlZSBydW5uaW5nIHRpbWVyLgotCSAqIFRoaXMgZW5zdXJlcyBhbiBleGFjdCBjbG9jayB0aWNrIGNvdW50IGFuZCB0aW1lIGFjY3VyYWN5LgotCSAqIFNpbmNlIElSUXMgYXJlIGRpc2FibGVkIGF0IHRoaXMgcG9pbnQsIGNvaGVyZW5jZSBiZXR3ZWVuCi0JICogbG9zdF90aWNrcyh1cGRhdGVkIGluIGRvX3RpbWVyKCkpIGFuZCB0aGUgbWF0Y2ggcmVnIHZhbHVlIGlzCi0JICogZW5zdXJlZCwgaGVuY2Ugd2UgY2FuIHVzZSBkb19nZXR0aW1lb2ZkYXkoKSBmcm9tIGludGVycnVwdAotCSAqIGhhbmRsZXJzLgotCSAqLwotCWRvIHsKLQkJdGltZXJfdGljaygpOwotCQlPU1NSID0gT1NTUl9NMDsgIC8qIENsZWFyIG1hdGNoIG9uIHRpbWVyIDAgKi8KLQkJbmV4dF9tYXRjaCA9IChPU01SMCArPSBMQVRDSCk7Ci0JfSB3aGlsZSAoKHNpZ25lZCBsb25nKShuZXh0X21hdGNoIC0gT1NDUikgPD0gMCk7CisJLyogRGlzYXJtIHRoZSBjb21wYXJlL21hdGNoLCBzaWduYWwgdGhlIGV2ZW50LiAqLworCU9JRVIgJj0gfk9JRVJfRTA7CisJT1NTUiA9IE9TU1JfTTA7CisJYy0+ZXZlbnRfaGFuZGxlcihjKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gc2ExMTAwX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiU0ExMXh4IFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKLQkuaGFuZGxlcgk9IHNhMTEwMF90aW1lcl9pbnRlcnJ1cHQsCitzdGF0aWMgaW50CitzYTExMDBfb3NtcjBfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBuZXh0LCBvc2NyOworCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlPSUVSIHw9IE9JRVJfRTA7CisJbmV4dCA9IE9TQ1IgKyBkZWx0YTsKKwlPU01SMCA9IG5leHQ7CisJb3NjciA9IE9TQ1I7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAoc2lnbmVkKShuZXh0IC0gb3NjcikgPD0gTUlOX09TQ1JfREVMVEEgPyAtRVRJTUUgOiAwOworfQorCitzdGF0aWMgdm9pZAorc2ExMTAwX29zbXIwX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJT0lFUiAmPSB+T0lFUl9FMDsKKwkJT1NTUiA9IE9TU1JfTTA7CisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBja2V2dF9zYTExMDBfb3NtcjAgPSB7CisJLm5hbWUJCT0gIm9zbXIwIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zaGlmdAkJPSAzMiwKKwkucmF0aW5nCQk9IDIwMCwKKwkuY3B1bWFzawk9IENQVV9NQVNLX0NQVTAsCisJLnNldF9uZXh0X2V2ZW50CT0gc2ExMTAwX29zbXIwX3NldF9uZXh0X2V2ZW50LAorCS5zZXRfbW9kZQk9IHNhMTEwMF9vc21yMF9zZXRfbW9kZSwKIH07CiAKIHN0YXRpYyBjeWNsZV90IHNhMTEwMF9yZWFkX29zY3Iodm9pZCkKQEAgLTkwLDYyICs5MiwzNCBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHNhMTEwMF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIm9zdDAiLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IHNhMTEwMF9vc3QwX2ludGVycnVwdCwKKwkuZGV2X2lkCQk9ICZja2V2dF9zYTExMDBfb3NtcjAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgc2ExMTAwX3RpbWVyX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc2V0X3J0YyA9IHNhMTEwMF9zZXRfcnRjOwotCiAJT0lFUiA9IDA7CQkvKiBkaXNhYmxlIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCiAJT1NTUiA9IDB4ZjsJCS8qIGNsZWFyIHN0YXR1cyBvbiBhbGwgdGltZXJzICovCi0Jc2V0dXBfaXJxKElSUV9PU1QwLCAmc2ExMTAwX3RpbWVyX2lycSk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCU9JRVIgPSBPSUVSX0UwOwkJLyogZW5hYmxlIG1hdGNoIG9uIHRpbWVyIDAgdG8gY2F1c2UgaW50ZXJydXB0cyAqLwotCU9TTVIwID0gT1NDUiArIExBVENIOwkvKiBzZXQgaW5pdGlhbCBtYXRjaCAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWNrZXZ0X3NhMTEwMF9vc21yMC5tdWx0ID0KKwkJZGl2X3NjKDM2ODY0MDAsIE5TRUNfUEVSX1NFQywgY2tldnRfc2ExMTAwX29zbXIwLnNoaWZ0KTsKKwlja2V2dF9zYTExMDBfb3NtcjAubWF4X2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygweDdmZmZmZmZmLCAmY2tldnRfc2ExMTAwX29zbXIwKTsKKwlja2V2dF9zYTExMDBfb3NtcjAubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucyhNSU5fT1NDUl9ERUxUQSAqIDIsICZja2V2dF9zYTExMDBfb3NtcjApICsgMTsKIAogCWNrc3JjX3NhMTEwMF9vc2NyLm11bHQgPQogCQljbG9ja3NvdXJjZV9oejJtdWx0KENMT0NLX1RJQ0tfUkFURSwgY2tzcmNfc2ExMTAwX29zY3Iuc2hpZnQpOwogCisJc2V0dXBfaXJxKElSUV9PU1QwLCAmc2ExMTAwX3RpbWVyX2lycSk7CisKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2tzcmNfc2ExMTAwX29zY3IpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2tldnRfc2ExMTAwX29zbXIwKTsKIH0KIAotI2lmZGVmIENPTkZJR19OT19JRExFX0haCi1zdGF0aWMgaW50IHNhMTEwMF9keW5fdGlja19lbmFibGVfZGlzYWJsZSh2b2lkKQotewotCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2ExMTAwX2R5bl90aWNrX3JlcHJvZ3JhbSh1bnNpZ25lZCBsb25nIHRpY2tzKQotewotCWlmICh0aWNrcyA+IDEpIHsKLQkJaW5pdGlhbF9tYXRjaCA9IE9TTVIwOwotCQlPU01SMCA9IGluaXRpYWxfbWF0Y2ggKyB0aWNrcyAqIExBVENIOwotCQltYXRjaF9wb3Nwb25lZCA9IDE7Ci0JfQotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QKLXNhMTEwMF9keW5fdGlja19oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpZiAobWF0Y2hfcG9zcG9uZWQpIHsKLQkJbWF0Y2hfcG9zcG9uZWQgPSAwOwotCQlPU01SMCA9IGluaXRpYWxfbWF0Y2g7Ci0JCWlmICgoc2lnbmVkIGxvbmcpKGluaXRpYWxfbWF0Y2ggLSBPU0NSKSA8PSAwKQotCQkJcmV0dXJuIHNhMTEwMF90aW1lcl9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQpOwotCX0KLQlyZXR1cm4gSVJRX05PTkU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHluX3RpY2tfdGltZXIgc2ExMTAwX2R5bl90aWNrID0gewotCS5lbmFibGUJCT0gc2ExMTAwX2R5bl90aWNrX2VuYWJsZV9kaXNhYmxlLAotCS5kaXNhYmxlCT0gc2ExMTAwX2R5bl90aWNrX2VuYWJsZV9kaXNhYmxlLAotCS5yZXByb2dyYW0JPSBzYTExMDBfZHluX3RpY2tfcmVwcm9ncmFtLAotCS5oYW5kbGVyCT0gc2ExMTAwX2R5bl90aWNrX2hhbmRsZXIsCi19OwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUE0KIHVuc2lnbmVkIGxvbmcgb3Ntcls0XSwgb2llcjsKIApAQCAtMTgxLDcgKzE1NSw0IEBACiAJLmluaXQJCT0gc2ExMTAwX3RpbWVyX2luaXQsCiAJLnN1c3BlbmQJPSBzYTExMDBfdGltZXJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTEwMF90aW1lcl9yZXN1bWUsCi0jaWZkZWYgQ09ORklHX05PX0lETEVfSFoKLQkuZHluX3RpY2sJPSAmc2ExMTAwX2R5bl90aWNrLAotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmMKaW5kZXggOTg1OGM5Ni4uOTMzNjUwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaWNzdDMwNy5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IDc2MzQ4ZjAuLjc0NmNiYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTgsNiArMTgsNyBAQAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjMgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjMgaWYgTU1VCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKIAloZWxwCiAJICBUaGUgQVJNNjEwIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIEFSTTMgcHJvY2Vzc29yCiAJICBhbmQgd2FzIHByb2R1Y2VkIGJ5IFZMU0kgVGVjaG5vbG9neSBJbmMuCkBAIC00OSw2ICs1MCw3IEBACiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WMyBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WMyBpZiBNTVUKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTcgcHJvY2Vzc29yIGNvcmUKIAkgIGRlc2lnbmVkIGJ5IEFkdmFuY2VkIFJJU0MgTWFjaGluZXMgTHRkLiBUaGUgQVJNNzEwIGlzIHRoZQpAQCAtNjQsNiArNjYsNyBAQAogCWRlZmF1bHQgeSBpZiBBUkNIX0NMUFM3MTFYIHx8IEFSQ0hfTDcyMDAgfHwgQVJDSF9DREI4OTcxMiB8fCBBUkNIX0g3MjBYCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9MVjRUCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMTEzLDYgKzExNiw3IEBACiAJZGVmYXVsdCB5IGlmIENQVV9TM0MyNDEwIHx8IENQVV9TM0MyNDQwIHx8IENQVV9TM0MyNDQyIHx8IEFSQ0hfQVQ5MVJNOTIwMAogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAorCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMTM1LDYgKzEzOSw3IEBACiAJZGVmYXVsdCB5IGlmIEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0tTODY5NQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAorCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMTU1LDYgKzE2MCw3IEBACiAgCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAxNVhYCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0xNzUsNiArMTgxLDcgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9QTlg0MDA4IHx8IEFSQ0hfTkVUWCB8fCBDUFVfUzNDMjQxMiB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IEFSQ0hfQVQ5MVNBTTkyNjEgfHwgQVJDSF9BVDkxU0FNOTI2MyB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxQ0FQOSB8fCBBUkNIX05TOVhYWCB8fCBBUkNIX0RBVklOQ0kKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKQEAgLTIyNiw2ICsyMzMsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTI0NCw2ICsyNTIsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTI1Nyw2ICsyNjYsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUgIyBjYW4gcHJvYmFibHkgZG8gYmV0dGVyCkBAIC0yNzUsNiArMjg1LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUICMgQnV0IG5lZWQgSmF6ZWxsZSwgYnV0IEVWNVRKIGlnbm9yZXMgYml0IDEwCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VICMgY2FuIHByb2JhYmx5IGRvIGJldHRlcgpAQCAtMjkzLDYgKzMwNCw3IEBACiAJc2VsZWN0IENQVV8zMnYzIGlmIEFSQ0hfUlBDCiAJc2VsZWN0IENQVV8zMnY0IGlmICFBUkNIX1JQQwogCXNlbGVjdCBDUFVfQUJSVF9FVjQKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTMxNCw2ICszMjYsNyBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjQKKwlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTMyNiw2ICszMzksNyBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCkBAIC0zNDUsMTAgKzM1OSwxMSBAQAogIyBGZXJvY2VvbgogY29uZmlnIENQVV9GRVJPQ0VPTgogCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfT1JJT04KKwlkZXBlbmRzIG9uIEFSQ0hfT1JJT041WAogCWRlZmF1bHQgeQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCkBAIC0zNjYsMTEgKzM4MSwxMiBAQAogIyBBUk12NgogY29uZmlnIENQVV9WNgogCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IEFSQ0hfT01BUDIgfHwgQVJDSF9NWDMgfHwgQVJDSF9NU003WDAwQQorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgQVJDSF9PTUFQMiB8fCBBUkNIX01YMyB8fCBBUkNIX01TTTdYMDBBIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2CiAJZGVmYXVsdCB5IGlmIEFSQ0hfTVgzCiAJZGVmYXVsdCB5IGlmIEFSQ0hfTVNNN1gwMEEKIAlzZWxlY3QgQ1BVXzMydjYKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y2CiAJc2VsZWN0IENQVV9DQUNIRV9WSVBUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMzkzLDEwICs0MDksMTEgQEAKICMgQVJNdjcKIGNvbmZpZyBDUFVfVjcKIAlib29sICJTdXBwb3J0IEFSTSBWNyBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV8zMnY2SwogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKKwlzZWxlY3QgQ1BVX1BBQlJUX0lGQVIKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y3CiAJc2VsZWN0IENQVV9DQUNIRV9WSVBUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtNDU4LDYgKzQ3NSwxMiBAQAogY29uZmlnIENQVV9BQlJUX0VWNwogCWJvb2wKIAorY29uZmlnIENQVV9QQUJSVF9JRkFSCisJYm9vbAorCitjb25maWcgQ1BVX1BBQlJUX05PSUZBUgorCWJvb2wKKwogIyBUaGUgY2FjaGUgbW9kZWwKIGNvbmZpZyBDUFVfQ0FDSEVfVjMKIAlib29sCkBAIC01NzIsNiArNTk1LDEzIEBACiAKIAkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBhbGwgaXMsIHNheWluZyBZIGlzIGEgc2FmZSBjaG9pY2UuCiAKK2NvbmZpZyBBUk1fVEhVTUJFRQorCWJvb2wgIkVuYWJsZSBUaHVtYkVFIENQVSBleHRlbnNpb24iCisJZGVwZW5kcyBvbiBDUFVfVjcKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgQ1BVIHdpdGggdGhlIFRodW1iRUUgZXh0ZW5zaW9uIGFuZCBjb2RlIHRvCisJICBtYWtlIHVzZSBvZiBpdC4gU2F5IE4gZm9yIGNvZGUgdGhhdCBjYW4gcnVuIG9uIENQVXMgd2l0aG91dCBUaHVtYkVFLgorCiBjb25maWcgQ1BVX0JJR19FTkRJQU4KIAlib29sICJCdWlsZCBiaWctZW5kaWFuIGtlcm5lbCIKIAlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQklHX0VORElBTgpAQCAtNjcxLDUgKzcwMSw5IEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBDQUNIRV9MMlgwCi0JYm9vbAorCWJvb2wgIkVuYWJsZSB0aGUgTDJ4MCBvdXRlciBjYWNoZSBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gUkVBTFZJRVdfRUJfQVJNMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCMTE3NgorCWRlZmF1bHQgeQogCXNlbGVjdCBPVVRFUl9DQUNIRQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEwyeDAgUHJpbWVDZWxsLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IGVjMDBmMjYuLmI2NTdmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTQ4LDggKzQ4LDYgQEAKIAogCXByaW50aygiTWVtLWluZm86XG4iKTsKIAlzaG93X2ZyZWVfYXJlYXMoKTsKLQlwcmludGsoIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElGVC0xMCkpOwotCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlwZ19kYXRhX3QgKm4gPSBOT0RFX0RBVEEobm9kZSk7CiAJCXN0cnVjdCBwYWdlICptYXAgPSBuLT5ub2RlX21lbV9tYXAgLSBuLT5ub2RlX3N0YXJ0X3BmbjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCAyNzI4YjBlLi4zZjZkYzQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC0xMjAsNiArMTIwLDggQEAKICAqLwogaW50IHZhbGlkX3BoeXNfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQogeworCWlmIChhZGRyIDwgUEhZU19PRkZTRVQpCisJCXJldHVybiAwOwogCWlmIChhZGRyICsgc2l6ZSA+IF9fcGEoaGlnaF9tZW1vcnkpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcGdkLmMgYi9hcmNoL2FybS9tbS9wZ2QuYwppbmRleCA1MDBjOTYxLi5lMGYxOWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wZ2QuYworKysgYi9hcmNoL2FybS9tbS9wZ2QuYwpAQCAtNzUsNyArNzUsNyBAQAogdm9pZCBmcmVlX3BnZF9zbG93KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQogewogCXBtZF90ICpwbWQ7Ci0Jc3RydWN0IHBhZ2UgKnB0ZTsKKwlwZ3RhYmxlX3QgcHRlOwogCiAJaWYgKCFwZ2QpCiAJCXJldHVybjsKQEAgLTkwLDEwICs5MCw4IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQlwdGUgPSBwbWRfcGFnZSgqcG1kKTsKKwlwdGUgPSBwbWRfcGd0YWJsZSgqcG1kKTsKIAlwbWRfY2xlYXIocG1kKTsKLQlkZWNfem9uZV9wYWdlX3N0YXRlKHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZyAqKXBnZCksIE5SX1BBR0VUQUJMRSk7Ci0JcHRlX2xvY2tfZGVpbml0KHB0ZSk7CiAJcHRlX2ZyZWUobW0sIHB0ZSk7CiAJcG1kX2ZyZWUobW0sIHBtZCk7CiBmcmVlOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwppbmRleCA3MDBjMDRkLi4zMmZkN2VhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwpAQCAtNDc4LDYgKzQ3OCw3IEBACiAJLndvcmQJY3B1X2FybTEwMjBfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyMF9zZXRfcHRlX2V4dAorCS53b3JkCXBhYm9ydF9ub2lmYXIKIAkuc2l6ZQlhcm0xMDIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCmluZGV4IDFjYzIwNmEuLmZlMmIwYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTQ1OSw2ICs0NTksNyBAQAogCS53b3JkCWNwdV9hcm0xMDIwZV9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm0xMDIwZV9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyMGVfc2V0X3B0ZV9leHQKKwkud29yZAlwYWJvcnRfbm9pZmFyCiAJLnNpemUJYXJtMTAyMGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCBhZmYwZWEwLi4wNmRkZTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtNDQyLDYgKzQ0Miw3IEBACiAJLndvcmQJY3B1X2FybTEwMjJfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyMl9zZXRfcHRlX2V4dAorCS53b3JkCXBhYm9ydF9ub2lmYXIKIAkuc2l6ZQlhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCA2NWU0M2ExLi5mNTUwNmU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtNDM3LDYgKzQzNyw3IEBACiAJLndvcmQJY3B1X2FybTEwMjZfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyNl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyNl9zZXRfcHRlX2V4dAorCS53b3JkCXBhYm9ydF9ub2lmYXIKIAkuc2l6ZQlhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uIC5yb2RhdGEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IDEyM2E3ZGMuLjE0YjZhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtMzAwLDYgKzMwMCw3IEBACiAJCS53b3JkCWNwdV9hcm02X2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm02X3N3aXRjaF9tbQogCQkud29yZAljcHVfYXJtNl9zZXRfcHRlX2V4dAorCQkud29yZAlwYWJvcnRfbm9pZmFyCiAJCS5zaXplCWFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAvKgpAQCAtMzE2LDYgKzMxNyw3IEBACiAJCS53b3JkCWNwdV9hcm03X2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm03X3N3aXRjaF9tbQogCQkud29yZAljcHVfYXJtN19zZXRfcHRlX2V4dAorCQkud29yZAlwYWJvcnRfbm9pZmFyCiAJCS5zaXplCWFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKaW5kZXggZGM3NjNiZS4uY2E1ZTdhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCkBAIC0yMDUsNiArMjA1LDcgQEAKIAkJLndvcmQJY3B1X2FybTcyMF9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtNzIwX3N3aXRjaF9tbQogCQkud29yZAljcHVfYXJtNzIwX3NldF9wdGVfZXh0CisJCS53b3JkCXBhYm9ydF9ub2lmYXIKIAkJLnNpemUJYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggNzVjOTQ1ZS4uMDE3MGQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC00MjQsNiArNDI0LDcgQEAKIAkud29yZAljcHVfYXJtOTIwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTIwX3NldF9wdGVfZXh0CisJLndvcmQJcGFib3J0X25vaWZhcgogCS5zaXplCWFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggZmZiNzUxYi4uYjc5NTI0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC00MjgsNiArNDI4LDcgQEAKIAkud29yZAljcHVfYXJtOTIyX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyMl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTIyX3NldF9wdGVfZXh0CisJLndvcmQJcGFib3J0X25vaWZhcgogCS5zaXplCWFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggNDRjMmM5OS4uZTI5ODhlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC00OTEsNiArNDkxLDcgQEAKIAkud29yZAljcHVfYXJtOTI1X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyNV9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTI1X3NldF9wdGVfZXh0CisJLndvcmQJcGFib3J0X25vaWZhcgogCS5zaXplCWFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKaW5kZXggMTk0ZWY0OC4uNjJmN2QxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCkBAIC00NDQsNiArNDQ0LDcgQEAKIAkud29yZAljcHVfYXJtOTI2X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyNl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTI2X3NldF9wdGVfZXh0CisJLndvcmQJcGFib3J0X25vaWZhcgogCS5zaXplCWFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCmluZGV4IGZhMGRjN2UuLjJmMTY5YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKQEAgLTQzMCw2ICs0MzAsNyBAQAogCS53b3JkCWNwdV9mZXJvY2Vvbl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9mZXJvY2Vvbl9zd2l0Y2hfbW0KIAkud29yZAljcHVfZmVyb2Nlb25fc2V0X3B0ZV9leHQKKwkud29yZAlwYWJvcnRfbm9pZmFyCiAJLnNpemUJZmVyb2Nlb25fcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGZlcm9jZW9uX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IDZlMjI2ZTEuLjRkYjNkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTIyMyw2ICsyMjMsNyBAQAogCS53b3JkCWNwdV9zYTExMF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9zYTExMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfc2ExMTBfc2V0X3B0ZV9leHQKKwkud29yZAlwYWJvcnRfbm9pZmFyCiAJLnNpemUJc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggOWFmYjExZC4uM2NkZWYwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0yMzgsNiArMjM4LDcgQEAKIAkud29yZAljcHVfc2ExMTAwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3NhMTEwMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfc2ExMTAwX3NldF9wdGVfZXh0CisJLndvcmQJcGFib3J0X25vaWZhcgogCS5zaXplCXNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IGViNDJlNWIuLmJmNzYwZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTE3LDEwICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi0jaWZkZWYgQ09ORklHX1NNUAotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fc2N1Lmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKICNkZWZpbmUgRF9DQUNIRV9MSU5FX1NJWkUJMzIKQEAgLTE4NywyMCArMTgzLDEwIEBACiAgKi8KIF9fdjZfc2V0dXA6CiAjaWZkZWYgQ09ORklHX1NNUAotCS8qIFNldCB1cCB0aGUgU0NVIG9uIGNvcmUgMCBvbmx5ICovCi0JbXJjCXAxNSwgMCwgcjAsIGMwLCBjMCwgNQkJQCBDUFUgY29yZSBudW1iZXIKLQlhbmRzCXIwLCByMCwgIzE1Ci0JbGRyZXEJcjAsID1TQ1VfQkFTRQotCWxkcmVxCXI1LCBbcjAsICNTQ1VfQ1RSTF0KLQlvcnJlcQlyNSwgcjUsICMxCi0Jc3RyZXEJcjUsIFtyMCwgI1NDVV9DVFJMXQotCi0jaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIEVuYWJsZSBTTVAvbkFNUCBtb2RlCiAJb3JyCXIwLCByMCwgIzB4MjAKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCiAjZW5kaWYKLSNlbmRpZgogCiAJbW92CXIwLCAjMAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAwCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBjYWNoZQpAQCAtMjQwLDYgKzIyNiw3IEBACiAJLndvcmQJY3B1X3Y2X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3Y2X3N3aXRjaF9tbQogCS53b3JkCWNwdV92Nl9zZXRfcHRlX2V4dAorCS53b3JkCXBhYm9ydF9ub2lmYXIKIAkuc2l6ZQl2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IGUwYWNjNWEuLmExZDczMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTIxMiw2ICsyMTIsNyBAQAogCS53b3JkCWNwdV92N19kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV92N19zd2l0Y2hfbW0KIAkud29yZAljcHVfdjdfc2V0X3B0ZV9leHQKKwkud29yZAlwYWJvcnRfaWZhcgogCS5zaXplCXY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSB2N19wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkudHlwZQljcHVfYXJjaF9uYW1lLCAjb2JqZWN0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCBjMTU2ZGRhYi4uMWE2ZDg5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC0xMTQsNiArMTE0LDEwIEBACiAgKiBOb3RoaW5nIHRvbyBleGNpdGluZyBhdCB0aGUgbW9tZW50CiAgKi8KIEVOVFJZKGNwdV94c2NhbGVfcHJvY19pbml0KQorCUAgZW5hYmxlIHdyaXRlIGJ1ZmZlciBjb2FsZXNjaW5nLiBTb21lIGJvb3Rsb2FkZXIgZGlzYWJsZSBpdAorCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDEKKwliaWMJcjEsIHIxLCAjMQorCW1jcglwMTUsIDAsIHIxLCBjMSwgYzAsIDEKIAltb3YJcGMsIGxyCiAKIC8qCkBAIC01MzAsNiArNTM0LDcgQEAKIAkud29yZAljcHVfeHNjYWxlX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3hzY2FsZV9zd2l0Y2hfbW0KIAkud29yZAljcHVfeHNjYWxlX3NldF9wdGVfZXh0CisJLndvcmQJcGFib3J0X25vaWZhcgogCS5zaXplCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0geHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMgYi9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYwppbmRleCAyYjVhYTExLi5kOWJjMTVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYworKysgYi9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb3AzeHguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAvLyAjZGVmaW5lIERFQlVHCiAKQEAgLTIwOSw4ICsyMTAsMTEgQEAKIAlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKIAlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSk7CiAKLQlzeXMtPm1lbV9vZmZzZXQgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9QQSAtIElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBOwotCXN5cy0+aW9fb2Zmc2V0ICA9IElPUDNYWF9QQ0lfTE9XRVJfSU9fUEEgLSBJT1AzWFhfUENJX0xPV0VSX0lPX0JBOworCS8qCisJICogVXNlIHdoYXRldmVyIHRyYW5zbGF0aW9uIGlzIGFscmVhZHkgc2V0dXAuCisJICovCisJc3lzLT5tZW1fb2Zmc2V0ID0gSU9QM1hYX1BDSV9MT1dFUl9NRU1fUEEgLSAqSU9QM1hYX09NV1RWUjA7CisJc3lzLT5pb19vZmZzZXQgID0gSU9QM1hYX1BDSV9MT1dFUl9JT19QQSAtICpJT1AzWFhfT0lPV1RWUjsKIAogCXN5cy0+cmVzb3VyY2VbMF0gPSAmcmVzWzBdOwogCXN5cy0+cmVzb3VyY2VbMV0gPSAmcmVzWzFdOwpAQCAtMjUwLDExICsyNTQsMTEgQEAKIAkqSU9QM1hYX0lBVFZSMiA9IFBIWVNfT0ZGU0VUOwogCiAJLyogT3V0Ym91bmQgd2luZG93IDAgKi8KLQkqSU9QM1hYX09NV1RWUjAgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9QQTsKKwkqSU9QM1hYX09NV1RWUjAgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQTsKIAkqSU9QM1hYX09VTVdUVlIwID0gMDsKIAogCS8qIE91dGJvdW5kIHdpbmRvdyAxICovCi0JKklPUDNYWF9PTVdUVlIxID0gSU9QM1hYX1BDSV9MT1dFUl9NRU1fUEEgKyBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRTsKKwkqSU9QM1hYX09NV1RWUjEgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQSArIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFOwogCSpJT1AzWFhfT1VNV1RWUjEgPSAwOwogCiAJLyogQkFSIDMgKCBEaXNhYmxlZCApICovCkBAIC0yNjUsNyArMjY5LDcgQEAKIAogCS8qIFNldHVwIHRoZSBJL08gQmFyCiAJICovCi0JKklPUDNYWF9PSU9XVFZSID0gSU9QM1hYX1BDSV9MT1dFUl9JT19QQTs7CisJKklPUDNYWF9PSU9XVFZSID0gSU9QM1hYX1BDSV9MT1dFUl9JT19CQTsKIAogCS8qIEVuYWJsZSBpbmJvdW5kIGFuZCBvdXRib3VuZCBjeWNsZXMKIAkgKi8KQEAgLTMyMiwzMiArMzI2LDU3IEBACiAvKiBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBBVFUgaXMgaW5pdGlhbGl6ZWQgYW5kIHRoZSBQQ0kgYnVzIHNjYW5uZWQgKi8KIGludCBpbml0X2F0dTsKIAotdm9pZCBfX2luaXQgaW9wM3h4X3BjaV9wcmVpbml0KHZvaWQpCitpbnQgaW9wM3h4X2dldF9pbml0X2F0dSh2b2lkKSB7CisJLyogY2hlY2sgaWYgZGVmYXVsdCBoYXMgYmVlbiBvdmVycmlkZGVuICovCisJaWYgKGluaXRfYXR1ICE9IElPUDNYWF9JTklUX0FUVV9ERUZBVUxUKQorCQlyZXR1cm4gaW5pdF9hdHU7CisJZWxzZQorCQlyZXR1cm4gSU9QM1hYX0lOSVRfQVRVX0RJU0FCTEU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpb3AzeHhfYXR1X2RlYnVnKHZvaWQpCit7CisJREJHKCJQQ0k6IEludGVsIElPUDN4eCBQQ0kgaW5pdC5cbiIpOworCURCRygiUENJOiBPdXRib3VuZCBtZW1vcnkgd2luZG93IDA6IFBDSSAweCUwOHglMDh4XG4iLAorCQkqSU9QM1hYX09VTVdUVlIwLCAqSU9QM1hYX09NV1RWUjApOworCURCRygiUENJOiBPdXRib3VuZCBtZW1vcnkgd2luZG93IDE6IFBDSSAweCUwOHglMDh4XG4iLAorCQkqSU9QM1hYX09VTVdUVlIxLCAqSU9QM1hYX09NV1RWUjEpOworCURCRygiUENJOiBPdXRib3VuZCBJTyB3aW5kb3c6IFBDSSAweCUwOHhcbiIsCisJCSpJT1AzWFhfT0lPV1RWUik7CisKKwlEQkcoIlBDSTogSW5ib3VuZCBtZW1vcnkgd2luZG93IDA6IFBDSSAweCUwOHglMDh4IDB4JTA4eCAtPiAweCUwOHhcbiIsCisJCSpJT1AzWFhfSUFVQkFSMCwgKklPUDNYWF9JQUJBUjAsICpJT1AzWFhfSUFMUjAsICpJT1AzWFhfSUFUVlIwKTsKKwlEQkcoIlBDSTogSW5ib3VuZCBtZW1vcnkgd2luZG93IDE6IFBDSSAweCUwOHglMDh4IDB4JTA4eFxuIiwKKwkJKklPUDNYWF9JQVVCQVIxLCAqSU9QM1hYX0lBQkFSMSwgKklPUDNYWF9JQUxSMSk7CisJREJHKCJQQ0k6IEluYm91bmQgbWVtb3J5IHdpbmRvdyAyOiBQQ0kgMHglMDh4JTA4eCAweCUwOHggLT4gMHglMDh4XG4iLAorCQkqSU9QM1hYX0lBVUJBUjIsICpJT1AzWFhfSUFCQVIyLCAqSU9QM1hYX0lBTFIyLCAqSU9QM1hYX0lBVFZSMik7CisJREJHKCJQQ0k6IEluYm91bmQgbWVtb3J5IHdpbmRvdyAzOiBQQ0kgMHglMDh4JTA4eCAweCUwOHggLT4gMHglMDh4XG4iLAorCQkqSU9QM1hYX0lBVUJBUjMsICpJT1AzWFhfSUFCQVIzLCAqSU9QM1hYX0lBTFIzLCAqSU9QM1hYX0lBVFZSMyk7CisKKwlEQkcoIlBDSTogRXhwYW5zaW9uIFJPTSB3aW5kb3c6IFBDSSAweCUwOHglMDh4IDB4JTA4eCAtPiAweCUwOHhcbiIsCisJCTAsICpJT1AzWFhfRVJCQVIsICpJT1AzWFhfRVJMUiwgKklPUDNYWF9FUlRWUik7CisKKwlEQkcoIkFUVTogSU9QM1hYX0FUVUNNRD0weCUwNHhcbiIsICpJT1AzWFhfQVRVQ01EKTsKKwlEQkcoIkFUVTogSU9QM1hYX0FUVUNSPTB4JTA4eFxuIiwgKklPUDNYWF9BVFVDUik7CisKKwlob29rX2ZhdWx0X2NvZGUoMTYrNiwgaW9wM3h4X3BjaV9hYm9ydCwgU0lHQlVTLCAiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7Cit9CisKKy8qIGZvciBwbGF0Zm9ybXMgdGhhdCBtaWdodCBiZSBob3N0LWJ1cy1hZGFwdGVycyAqLwordm9pZCBfX2luaXQgaW9wM3h4X3BjaV9wcmVpbml0X2NvbmQodm9pZCkKIHsKIAlpZiAoaW9wM3h4X2dldF9pbml0X2F0dSgpID09IElPUDNYWF9JTklUX0FUVV9FTkFCTEUpIHsKIAkJaW9wM3h4X2F0dV9kaXNhYmxlKCk7CiAJCWlvcDN4eF9hdHVfc2V0dXAoKTsKKwkJaW9wM3h4X2F0dV9kZWJ1ZygpOwogCX0KK30KIAotCURCRygiUENJOiAgSW50ZWwgODAzeHggUENJIGluaXQgY29kZS5cbiIpOwotCURCRygiQVRVOiBJT1AzWFhfQVRVQ01EPTB4JTA0eFxuIiwgKklPUDNYWF9BVFVDTUQpOwotCURCRygiQVRVOiBJT1AzWFhfT01XVFZSMD0weCUwNHgsIElPUDNYWF9PSU9XVFZSPTB4JTA0eFxuIiwKLQkJCSpJT1AzWFhfT01XVFZSMCwKLQkJCSpJT1AzWFhfT0lPV1RWUik7Ci0JREJHKCJBVFU6IElPUDNYWF9BVFVDUj0weCUwOHhcbiIsICpJT1AzWFhfQVRVQ1IpOwotCURCRygiQVRVOiBJT1AzWFhfSUFCQVIwPTB4JTA4eCBJT1AzWFhfSUFMUjA9MHglMDh4IElPUDNYWF9JQVRWUjA9JTA4eFxuIiwKLQkJCSpJT1AzWFhfSUFCQVIwLCAqSU9QM1hYX0lBTFIwLCAqSU9QM1hYX0lBVFZSMCk7Ci0JREJHKCJBVFU6IElPUDNYWF9PTVdUVlIwPTB4JTA4eFxuIiwgKklPUDNYWF9PTVdUVlIwKTsKLQlEQkcoIkFUVTogSU9QM1hYX0lBQkFSMT0weCUwOHggSU9QM1hYX0lBTFIxPTB4JTA4eFxuIiwKLQkJCSpJT1AzWFhfSUFCQVIxLCAqSU9QM1hYX0lBTFIxKTsKLQlEQkcoIkFUVTogSU9QM1hYX0VSQkFSPTB4JTA4eCBJT1AzWFhfRVJMUj0weCUwOHggSU9QM1hYX0VSVFZSPSUwOHhcbiIsCi0JCQkqSU9QM1hYX0VSQkFSLCAqSU9QM1hYX0VSTFIsICpJT1AzWFhfRVJUVlIpOwotCURCRygiQVRVOiBJT1AzWFhfSUFCQVIyPTB4JTA4eCBJT1AzWFhfSUFMUjI9MHglMDh4IElPUDNYWF9JQVRWUjI9JTA4eFxuIiwKLQkJCSpJT1AzWFhfSUFCQVIyLCAqSU9QM1hYX0lBTFIyLCAqSU9QM1hYX0lBVFZSMik7Ci0JREJHKCJBVFU6IElPUDNYWF9JQUJBUjM9MHglMDh4IElPUDNYWF9JQUxSMz0weCUwOHggSU9QM1hYX0lBVFZSMz0lMDh4XG4iLAotCQkJKklPUDNYWF9JQUJBUjMsICpJT1AzWFhfSUFMUjMsICpJT1AzWFhfSUFUVlIzKTsKLQotCWhvb2tfZmF1bHRfY29kZSgxNis2LCBpb3AzeHhfcGNpX2Fib3J0LCBTSUdCVVMsICJpbXByZWNpc2UgZXh0ZXJuYWwgYWJvcnQiKTsKK3ZvaWQgX19pbml0IGlvcDN4eF9wY2lfcHJlaW5pdCh2b2lkKQoreworCWlvcDN4eF9hdHVfZGlzYWJsZSgpOworCWlvcDN4eF9hdHVfc2V0dXAoKTsKKwlpb3AzeHhfYXR1X2RlYnVnKCk7CiB9CiAKIC8qIGFsbG93IGluaXRfYXR1IHRvIGJlIHVzZXIgb3ZlcnJpZGRlbiAqLwpAQCAtMzcxLDcgKzQwMCw3IEBACiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX0RFQlVHICJcIiVzXCIgbWFsZm9ybWVkIGF0ICIKIAkJCQkJICAgICJjaGFyYWN0ZXI6IFwnJWNcJyIsCi0JCQkJCSAgICBfX0ZVTkNUSU9OX18sCisJCQkJCSAgICBfX2Z1bmNfXywKIAkJCQkJICAgICpzdHIpOwogCQkJCSooc3RyICsgMSkgPSAnXDAnOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKaW5kZXggMDNhNjVjMC4uYmI2ZTEyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCiBjaG9pY2UKIAlwcm9tcHQgIk1YQy9pTVggU3lzdGVtIFR5cGUiCi0JZGVmYXVsdCAwCisJZGVmYXVsdCBBUkNIX01YMwogCiBjb25maWcgQVJDSF9NWDMKIAlib29sICJNWDMtYmFzZWQiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCmluZGV4IDY2YWQ5YzIuLmY5NmRjMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCkBAIC00LDcgKzQsMyBAQAogCiAjIENvbW1vbiBzdXBwb3J0CiBvYmoteSA6PSBpcnEubwotCi1vYmotbSA6PQotb2JqLW4gOj0KLW9iai0gIDo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lycS5jCmluZGV4IDg3ZDI1M2IuLjJhZDVhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lycS5jCkBAIC0xOSwyMSArMTksMTMgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAotLyohCi0gKiBEaXNhYmxlIGludGVycnVwdCBudW1iZXIgImlycSIgaW4gdGhlIEFWSUMKLSAqCi0gKiBAcGFyYW0gIGlycSAgICAgICAgICBpbnRlcnJ1cHQgc291cmNlIG51bWJlcgotICovCisvKiBEaXNhYmxlIGludGVycnVwdCBudW1iZXIgImlycSIgaW4gdGhlIEFWSUMgKi8KIHN0YXRpYyB2b2lkIG14Y19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCV9fcmF3X3dyaXRlbChpcnEsIEFWSUNfSU5URElTTlVNKTsKIH0KIAotLyohCi0gKiBFbmFibGUgaW50ZXJydXB0IG51bWJlciAiaXJxIiBpbiB0aGUgQVZJQwotICoKLSAqIEBwYXJhbSAgaXJxICAgICAgICAgIGludGVycnVwdCBzb3VyY2UgbnVtYmVyCi0gKi8KKy8qIEVuYWJsZSBpbnRlcnJ1cHQgbnVtYmVyICJpcnEiIGluIHRoZSBBVklDICovCiBzdGF0aWMgdm9pZCBteGNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCV9fcmF3X3dyaXRlbChpcnEsIEFWSUNfSU5URU5OVU0pOwpAQCAtNDUsNyArMzcsNyBAQAogCS51bm1hc2sgPSBteGNfdW5tYXNrX2lycSwKIH07CiAKLS8qIQorLyoKICAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIEFWSUMgaGFyZHdhcmUgYW5kIGRpc2FibGVzIGFsbCB0aGUKICAqIGludGVycnVwdHMuIEl0IHJlZ2lzdGVycyB0aGUgaW50ZXJydXB0IGVuYWJsZSBhbmQgZGlzYWJsZSBmdW5jdGlvbnMKICAqIHRvIHRoZSBrZXJuZWwgZm9yIGVhY2ggaW50ZXJydXB0IHNvdXJjZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggYzFmN2U1YS4uYjkxNzIwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTExLDcgKzExLDYgQEAKIAogY29uZmlnIEFSQ0hfT01BUDEKIAlib29sICJUSSBPTUFQMSIKLQlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCiBjb25maWcgQVJDSF9PTUFQMgogCWJvb2wgIlRJIE9NQVAyIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCmluZGV4IGNlMTdkZjMuLmJjNjM5YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKQEAgLTksMTQgKzksMTcgQEAKIG9iai1uIDo9CiBvYmotICA6PQogCi1vYmotJChDT05GSUdfT01BUF8zMktfVElNRVIpCSs9IHRpbWVyMzJrLm8KLQogIyBPQ1BJIGludGVyY29ubmVjdCBzdXBwb3J0IGZvciAxNzEwLCAxNjEwIGFuZCA1OTEyCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMTZYWCkgKz0gb2NwaS5vCiAKK29iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKIG9iai0kKENPTkZJR19DUFVfRlJFUSkgKz0gY3B1LW9tYXAubwogb2JqLSQoQ09ORklHX09NQVBfRE1fVElNRVIpICs9IGRtdGltZXIubwogb2JqLSQoQ09ORklHX09NQVBfREVCVUdfREVWSUNFUykgKz0gZGVidWctZGV2aWNlcy5vCiBvYmotJChDT05GSUdfT01BUF9ERUJVR19MRURTKSArPSBkZWJ1Zy1sZWRzLm8KIG9iai0kKENPTkZJR19JMkNfT01BUCkgKz0gaTJjLm8KKworIyBPTUFQIG1haWxib3ggZnJhbWV3b3JrCitvYmotJChDT05GSUdfT01BUF9NQk9YX0ZXSykgKz0gbWFpbGJveC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggMGE2MDMyNC4uNzJkMzRhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAKQEAgLTMwNCw2ICszMDMsMjMgQEAKIAl9CiB9CiAKKy8qKgorICogcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MgLSByZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIGFsbCByb290IGNsb2NrcworICoKKyAqIFJlY2FsY3VsYXRlcyBhbGwgcm9vdCBjbG9ja3MgKGNsb2NrcyB3aXRoIG5vIHBhcmVudCksIHdoaWNoIGlmIHRoZQorICogY2xvY2sncyAucmVjYWxjIGlzIHNldCBjb3JyZWN0bHksIHNob3VsZCBhbHNvIHByb3BhZ2F0ZSB0aGVpciByYXRlcy4KKyAqIENhbGxlZCBhdCBpbml0LgorICovCit2b2lkIHJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrcCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAodW5saWtlbHkoIWNsa3AtPnBhcmVudCkgJiYgbGlrZWx5KCh1MzIpY2xrcC0+cmVjYWxjKSkKKwkJCWNsa3AtPnJlY2FsYyhjbGtwKTsKKwl9Cit9CisKIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKQEAgLTM1OCw2ICszNzQsMzAgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2FsbG93X2lkbGUpOwogCit2b2lkIGNsa19lbmFibGVfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tzLCBub2RlKSB7CisJCWlmIChjbGtwLT5mbGFncyAmIEVOQUJMRV9PTl9JTklUKQorCQkJY2xrX2VuYWJsZShjbGtwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGVfaW5pdF9jbG9ja3MpOworCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCit2b2lkIGNsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX2luaXRfY3B1ZnJlcV90YWJsZSkKKwkJYXJjaF9jbG9jay0+Y2xrX2luaXRfY3B1ZnJlcV90YWJsZSh0YWJsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19pbml0X2NwdWZyZXFfdGFibGUpOworI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKQEAgLTM5NiwzICs0MzYsNCBAQAogCiAJcmV0dXJuIDA7CiB9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCA0ZjBmOWM0Li5iZDFjZWYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCkBAIC0yNywxMSArMjcsMTYgQEAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorIyBpbmNsdWRlICIuLi9tYWNoLW9tYXAyL3NkcmMuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE5PX0xFTkdUSF9DSEVDSyAweGZmZmZmZmZmCiAKIHVuc2lnbmVkIGNoYXIgb21hcF9ib290bG9hZGVyX3RhZ1s1MTJdOwpAQCAtMTcxLDggKzE3Niw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkweGZmZmJjNDEwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQotI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkoT01BUDI0WFhfMzJLU1lOQ1RfQkFTRSArIDB4MTApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkoT01BUDJfMzJLU1lOQ1RfQkFTRSArIDB4MTApCiAjZW5kaWYKIAogI2lmZGVmCVRJTUVSXzMyS19TWU5DSFJPTklaRUQKQEAgLTE5MywxMiArMTk4LDM1IEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorLyoKKyAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgbnNlYy4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIG9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKHVuc2lnbmVkIGxvbmcgdGlja3NfMzJrKQoreworCXJldHVybiBjeWMybnMoJmNsb2Nrc291cmNlXzMyaywgdGlja3NfMzJrKTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCB0aW1lIGZyb20gYm9vdCBpbiBuc2Vjcy4gSXQncyBPSyBmb3IgdGhpcyB0byB3cmFwCisgKiBhcm91bmQgZm9yIG5vdywgYXMgaXQncyBqdXN0IGEgcmVsYXRpdmUgdGltZSBzdGFtcC4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIG9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKG9tYXBfMzJrX3JlYWQoKSk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsodm9pZCkKIHsKIAlzdGF0aWMgY2hhciBlcnJbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKIAkJCSIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2UhXG4iOwogCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9jbGFzc19pc19vbWFwMigpKSB7CisJCXN0cnVjdCBjbGsgKnN5bmNfMzJrX2ljazsKKworCQlzeW5jXzMya19pY2sgPSBjbGtfZ2V0KE5VTEwsICJvbWFwXzMya3N5bmNfaWNrIik7CisJCWlmIChzeW5jXzMya19pY2spCisJCQljbGtfZW5hYmxlKHN5bmNfMzJrX2ljayk7CisKIAkJY2xvY2tzb3VyY2VfMzJrLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KDMyNzY4LAogCQkJCQkgICAgY2xvY2tzb3VyY2VfMzJrLnNoaWZ0KTsKIApAQCAtMjEwLDMgKzIzOCwzMyBAQAogYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKTsKIAogI2VuZGlmCS8qIFRJTUVSXzMyS19TWU5DSFJPTklaRUQgKi8KKworLyogR2xvYmFsIGFkZHJlc3MgYmFzZSBzZXR1cCBjb2RlICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQordm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQyeCh2b2lkKQoreworCW9tYXAyX3NkcmNfYmFzZSA9IE9NQVAyNDIwX1NEUkNfQkFTRTsKKwlvbWFwMl9zbXNfYmFzZSA9IE9NQVAyNDIwX1NNU19CQVNFOworCW9tYXBfY3RybF9iYXNlX3NldChPTUFQMjQyMF9DVFJMX0JBU0UpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQordm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQzeCh2b2lkKQoreworCW9tYXAyX3NkcmNfYmFzZSA9IE9NQVAyNDNYX1NEUkNfQkFTRTsKKwlvbWFwMl9zbXNfYmFzZSA9IE9NQVAyNDNYX1NNU19CQVNFOworCW9tYXBfY3RybF9iYXNlX3NldChPTUFQMjQzWF9DVFJMX0JBU0UpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQordm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMzQzeCh2b2lkKQoreworCW9tYXAyX3NkcmNfYmFzZSA9IE9NQVAzNDNYX1NEUkNfQkFTRTsKKwlvbWFwMl9zbXNfYmFzZSA9IE9NQVAzNDNYX1NNU19CQVNFOworCW9tYXBfY3RybF9iYXNlX3NldChPTUFQMzQzWF9DVFJMX0JBU0UpOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKaW5kZXggYzBkNjNiMC4uZDcxOWMxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKQEAgLTMzLDQzICszMywzMyBAQAogI2RlZmluZSBNUFVfQ0xLCQkidmlydF9wcmNtX3NldCIKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IGNsayAqbXB1X2NsazsKKwogLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIFNEUkFNIHRpbWluZyBjaGFuZ2VzICovCiAKIGludCBvbWFwX3ZlcmlmeV9zcGVlZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlzdHJ1Y3QgY2xrICogbXB1X2NsazsKLQogCWlmIChwb2xpY3ktPmNwdSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAogCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKLQltcHVfY2xrID0gY2xrX2dldChOVUxMLCBNUFVfQ0xLKTsKLQlpZiAoSVNfRVJSKG1wdV9jbGspKQotCQlyZXR1cm4gUFRSX0VSUihtcHVfY2xrKTsKKwogCXBvbGljeS0+bWluID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgcG9saWN5LT5taW4gKiAxMDAwKSAvIDEwMDA7CiAJcG9saWN5LT5tYXggPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCBwb2xpY3ktPm1heCAqIDEwMDApIC8gMTAwMDsKIAljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAogCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKLQljbGtfcHV0KG1wdV9jbGspOwotCiAJcmV0dXJuIDA7CiB9CiAKIHVuc2lnbmVkIGludCBvbWFwX2dldHNwZWVkKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGNsayAqIG1wdV9jbGs7CiAJdW5zaWduZWQgbG9uZyByYXRlOwogCiAJaWYgKGNwdSkKIAkJcmV0dXJuIDA7CiAKLQltcHVfY2xrID0gY2xrX2dldChOVUxMLCBNUFVfQ0xLKTsKLQlpZiAoSVNfRVJSKG1wdV9jbGspKQotCQlyZXR1cm4gMDsKIAlyYXRlID0gY2xrX2dldF9yYXRlKG1wdV9jbGspIC8gMTAwMDsKLQljbGtfcHV0KG1wdV9jbGspOwotCiAJcmV0dXJuIHJhdGU7CiB9CiAKQEAgLTc3LDE0ICs2Nyw5IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7Ci0Jc3RydWN0IGNsayAqIG1wdV9jbGs7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJaW50IHJldCA9IDA7CiAKLQltcHVfY2xrID0gY2xrX2dldChOVUxMLCBNUFVfQ0xLKTsKLQlpZiAoSVNfRVJSKG1wdV9jbGspKQotCQlyZXR1cm4gUFRSX0VSUihtcHVfY2xrKTsKLQogCWZyZXFzLm9sZCA9IG9tYXBfZ2V0c3BlZWQoMCk7CiAJZnJlcXMubmV3ID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgdGFyZ2V0X2ZyZXEgKiAxMDAwKSAvIDEwMDA7CiAJZnJlcXMuY3B1ID0gMDsKQEAgLTkyLDE1ICs3NywxMiBAQAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAJcmV0ID0gY2xrX3NldF9yYXRlKG1wdV9jbGssIHRhcmdldF9mcmVxICogMTAwMCk7CiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7Ci0JY2xrX3B1dChtcHVfY2xrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0Jc3RydWN0IGNsayAqIG1wdV9jbGs7Ci0KIAltcHVfY2xrID0gY2xrX2dldChOVUxMLCBNUFVfQ0xLKTsKIAlpZiAoSVNfRVJSKG1wdV9jbGspKQogCQlyZXR1cm4gUFRSX0VSUihtcHVfY2xrKTsKQEAgLTExMSwxNyArOTMsMjMgQEAKIAlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCAwKSAvIDEwMDA7CiAJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgVkVSWV9ISV9SQVRFKSAvIDEwMDA7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IENQVUZSRVFfRVRFUk5BTDsKLQljbGtfcHV0KG1wdV9jbGspOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb21hcF9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljbGtfcHV0KG1wdV9jbGspOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIG9tYXBfZHJpdmVyID0gewogCS5mbGFncwkJPSBDUFVGUkVRX1NUSUNLWSwKIAkudmVyaWZ5CQk9IG9tYXBfdmVyaWZ5X3NwZWVkLAogCS50YXJnZXQJCT0gb21hcF90YXJnZXQsCiAJLmdldAkJPSBvbWFwX2dldHNwZWVkLAogCS5pbml0CQk9IG9tYXBfY3B1X2luaXQsCisJLmV4aXQJCT0gb21hcF9jcHVfZXhpdCwKIAkubmFtZQkJPSAib21hcCIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCBjNWRhYjFkLi40YTUzZjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTg5LDY4ICs4OSw2IEBACiAjZW5kaWYJLyogQ09ORklHX09NQVBfRFNQICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYJZGVmaW5lZChDT05GSUdfSTJDX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0kyQ19PTUFQX01PRFVMRSkKLQotI2RlZmluZQlPTUFQMV9JMkNfQkFTRQkJMHhmZmZiMzgwMAotI2RlZmluZSBPTUFQMl9JMkNfQkFTRTEJCTB4NDgwNzAwMDAKLSNkZWZpbmUgT01BUF9JMkNfU0laRQkJMHgzZgotI2RlZmluZSBPTUFQMV9JMkNfSU5UCQlJTlRfSTJDCi0jZGVmaW5lIE9NQVAyX0kyQ19JTlQxCQk1NgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXMxW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gMCwKLQkJLmVuZAkJPSAwLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSAwLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLS8qIERNQSBub3QgdXNlZDsgd29ya3MgYXJvdW5kIGVycmF0dW0gd3JpdGluZyB0byBub24tZW1wdHkgaTJjIGZpZm8gKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAotCS5pZCAgICAgICAgICAgICA9IDEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMxKSwKLQkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMSwKLX07Ci0KLS8qIFNlZSBhbHNvIGFyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGZvciBzZWNvbmQgSTJDIG9uIDI0eHggKi8KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKLXsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJaTJjX3Jlc291cmNlczFbMF0uc3RhcnQgPSBPTUFQMl9JMkNfQkFTRTE7Ci0JCWkyY19yZXNvdXJjZXMxWzBdLmVuZCA9IE9NQVAyX0kyQ19CQVNFMSArIE9NQVBfSTJDX1NJWkU7Ci0JCWkyY19yZXNvdXJjZXMxWzFdLnN0YXJ0ID0gT01BUDJfSTJDX0lOVDE7Ci0JfSBlbHNlIHsKLQkJaTJjX3Jlc291cmNlczFbMF0uc3RhcnQgPSBPTUFQMV9JMkNfQkFTRTsKLQkJaTJjX3Jlc291cmNlczFbMF0uZW5kID0gT01BUDFfSTJDX0JBU0UgKyBPTUFQX0kyQ19TSVpFOwotCQlpMmNfcmVzb3VyY2VzMVsxXS5zdGFydCA9IE9NQVAxX0kyQ19JTlQ7Ci0JfQotCi0JLyogRklYTUUgZGVmaW5lIGFuZCB1c2UgYSBib290IHRhZywgaW4gY2FzZSBvZiBib2FyZHMgdGhhdAotCSAqIGVpdGhlciBkb24ndCB3aXJlIHVwIEkyQywgb3IgY2hpcHMgdGhhdCBtdXggaXQgZGlmZmVyZW50bHkuLi4KLQkgKiBpdCBjYW4gaW5jbHVkZSBjbG9ja2luZyBhbmQgYWRkcmVzcyBpbmZvLCBtYXliZSBtb3JlLgotCSAqLwotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlvbWFwX2NmZ19yZWcoTTE5XzI0WFhfSTJDMV9TQ0wpOwotCQlvbWFwX2NmZ19yZWcoTDE1XzI0WFhfSTJDMV9TREEpOwotCX0gZWxzZSB7Ci0JCW9tYXBfY2ZnX3JlZyhJMkNfU0NMKTsKLQkJb21hcF9jZmdfcmVnKEkyQ19TREEpOwotCX0KLQotCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZTEpOwotfQotCi0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmCWRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVBfTU9EVUxFKQogCiBzdGF0aWMgdm9pZCBvbWFwX2luaXRfa3Aodm9pZCkKQEAgLTUwMSw3ICs0MzksNiBAQAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCiAJb21hcF9pbml0X2RzcCgpOwotCW9tYXBfaW5pdF9pMmMoKTsKIAlvbWFwX2luaXRfa3AoKTsKIAlvbWFwX2luaXRfbW1jKCk7CiAJb21hcF9pbml0X3V3aXJlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggYTQ2Njc2ZC4uNzkzNzQwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfZW5hYmxlX2NoYW5uZWxfaXJxKGludCBsY2gpOwogCiAjZGVmaW5lIFJFVklTSVRfMjRYWCgpCQlwcmludGsoS0VSTl9FUlIgIkZJWE1FOiBubyAlcyBvbiAyNHh4XG4iLCBcCi0JCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCQkJX19mdW5jX18pOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIC8qIFJldHVybnMgMSBpZiB0aGUgRE1BIG1vZHVsZSBpcyBpbiBPTUFQMTUxMC1jb21wYXRpYmxlIG1vZGUsIDAgb3RoZXJ3aXNlICovCkBAIC02OTksNyArNjk5LDcgQEAKIAl1MzIgcmVnOwogCiAJaWYgKCFjcHVfY2xhc3NfaXNfb21hcDIoKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkZJWE1FOiBubyAlcyBvbiAxNXh4LzE2eHhcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiRklYTUU6IG5vICVzIG9uIDE1eHgvMTZ4eFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDIwLDEyICsxMDIwLDEyIEBACiAJfQogCiAJdyA9IE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoX2hlYWQpOwotCXcgJj0gfigweDBmKTsKKwl3ICY9IH4oMHgxZik7CiAJdyB8PSBsY2hfcXVldWU7CiAJT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhsY2hfaGVhZCkgPSB3OwogCiAJdyA9IE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoX3F1ZXVlKTsKLQl3ICY9IH4oMHgwZik7CisJdyAmPSB+KDB4MWYpOwogCXcgfD0gKGRtYV9jaGFuW2xjaF9xdWV1ZV0ubmV4dF9saW5rZWRfY2gpOwogCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoX3F1ZXVlKSA9IHc7CiB9CkBAIC0xMjQ4LDcgKzEyNDgsNyBAQAogICogQHBhcmFtIGZyYW1lX2NvdW50CiAgKiBAcGFyYW0gY2FsbGJrX2RhdGEgLSBjaGFubmVsIGNhbGxiYWNrIHBhcmFtZXRlciBkYXRhLgogICoKLSAqIEByZXR1cm4gIC0gU3VjY2VzcyA6IHN0YXJ0X2RtYSBzdGF0dXMKKyAqIEByZXR1cm4gIC0gU3VjY2VzcyA6IDAKICAqIAkgICAgICBGYWlsdXJlOiAtRUlOVkFMLy1FQlVTWQogICovCiBpbnQgb21hcF9kbWFfY2hhaW5fYV90cmFuc2ZlcihpbnQgY2hhaW5faWQsIGludCBzcmNfc3RhcnQsIGludCBkZXN0X3N0YXJ0LApAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAkJCWRtYV9jaGFuW2xjaF0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOwogCQl9CiAJfQotCXJldHVybiBzdGFydF9kbWE7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX2NoYWluX2FfdHJhbnNmZXIpOwogCkBAIC0xNjYzLDYgKzE2NjMsNyBAQAogCWlmICghc3RhdHVzKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBETUEgSVJRIGZvciBsY2ggJWRcbiIsIGNoKTsKKwkJb21hcF93cml0ZWwoMSA8PCBjaCwgT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAodW5saWtlbHkoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkpIHsKQEAgLTE3MDUsMTQgKzE3MDYsOCBAQAogCQlzdGF0dXMgPSBPTUFQX0RNQV9DU1JfUkVHKGNoKTsKIAl9CiAKLQlpZiAobGlrZWx5KGRtYV9jaGFuW2NoXS5jYWxsYmFjayAhPSBOVUxMKSkgewotCQlpZiAoZG1hX2NoYW5bY2hdLmNoYWluX2lkICE9IC0xKQotCQkJZG1hX2NoYW5bY2hdLmNhbGxiYWNrKGRtYV9jaGFuW2NoXS5jaGFpbl9pZCwgc3RhdHVzLAotCQkJCQkgICAgICBkbWFfY2hhbltjaF0uZGF0YSk7Ci0JCWVsc2UKLQkJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgc3RhdHVzLCBkbWFfY2hhbltjaF0uZGF0YSk7Ci0KLQl9CisJaWYgKGxpa2VseShkbWFfY2hhbltjaF0uY2FsbGJhY2sgIT0gTlVMTCkpCisJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgc3RhdHVzLCBkbWFfY2hhbltjaF0uZGF0YSk7CiAKIAlPTUFQX0RNQV9DU1JfUkVHKGNoKSA9IHN0YXR1czsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKaW5kZXggZTcxOWQwZS4uMzAyYWQ4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlpZiAoaWQgPD0gMCB8fCBpZCA+IGRtX3RpbWVyX2NvdW50IHx8IGRtX3RpbWVyc1tpZC0xXS5yZXNlcnZlZCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbV90aW1lcl9sb2NrLCBmbGFncyk7CiAJCXByaW50aygiQlVHOiB3YXJuaW5nIGF0ICVzOiVkLyVzKCk6IHVuYWJsZSB0byBnZXQgdGltZXIgJWRcbiIsCi0JCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgaWQpOworCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgaWQpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDU2ZjRkMTMuLjE5MDNhMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMTM2LDcgKzEzNiw2IEBACiAJdTE2IGlycTsKIAl1MTYgdmlydHVhbF9pcnFfc3RhcnQ7CiAJaW50IG1ldGhvZDsKLQl1MzIgcmVzZXJ2ZWRfbWFwOwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJdTMyIHN1c3BlbmRfd2FrZXVwOwogCXUzMiBzYXZlZF93YWtldXA7CkBAIC0xNDksNyArMTQ4LDkgQEAKIAl1MzIgc2F2ZWRfZmFsbGluZ2RldGVjdDsKIAl1MzIgc2F2ZWRfcmlzaW5nZGV0ZWN0OwogI2VuZGlmCisJdTMyIGxldmVsX21hc2s7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKIH07CiAKICNkZWZpbmUgTUVUSE9EX01QVUlPCQkwCkBAIC0zMzMsMTMgKzMzNCwxNCBAQAogdm9pZCBvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihpbnQgZ3BpbywgaW50IGlzX2lucHV0KQogewogCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChjaGVja19ncGlvKGdwaW8pIDwgMCkKIAkJcmV0dXJuOwogCWJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOwotCXNwaW5fbG9jaygmYmFuay0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAlfc2V0X2dwaW9fZGlyZWN0aW9uKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBpc19pbnB1dCk7Ci0Jc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgX3NldF9ncGlvX2RhdGFvdXQoc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sIGludCBlbmFibGUpCkBAIC00MDYsMTMgKzQwOCwxNCBAQAogdm9pZCBvbWFwX3NldF9ncGlvX2RhdGFvdXQoaW50IGdwaW8sIGludCBlbmFibGUpCiB7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQogCQlyZXR1cm47CiAJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7Ci0Jc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCV9zZXRfZ3Bpb19kYXRhb3V0KGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBlbmFibGUpOwotCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiB9CiAKIGludCBvbWFwX2dldF9ncGlvX2RhdGFpbihpbnQgZ3BpbykKQEAgLTUzNiwxMCArNTM5LDkgQEAKIAkJCWJhbmstPmVuYWJsZWRfbm9uX3dha2V1cF9ncGlvcyAmPSB+Z3Bpb19iaXQ7CiAJfQogCi0JLyoKLQkgKiBGSVhNRTogUG9zc2libHkgZG8gJ3NldF9pcnFfaGFuZGxlcihqLCBoYW5kbGVfbGV2ZWxfaXJxKScgaWYgb25seQotCSAqIGxldmVsIHRyaWdnZXJpbmcgcmVxdWVzdGVkLgotCSAqLworCWJhbmstPmxldmVsX21hc2sgPQorCQlfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApIHwKKwkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxKTsKIH0KICNlbmRpZgogCkBAIC02MjQsNiArNjI2LDcgQEAKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOwogCXVuc2lnbmVkIGdwaW87CiAJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFjcHVfY2xhc3NfaXNfb21hcDIoKSAmJiBpcnEgPiBJSF9NUFVJT19CQVNFKQogCQlncGlvID0gT01BUF9NUFVJTyhpcnEgLSBJSF9NUFVJT19CQVNFKTsKQEAgLTY0MiwxMyArNjQ1LDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJYmFuayA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0Jc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCXJldHZhbCA9IF9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCB0eXBlKTsKIAlpZiAocmV0dmFsID09IDApIHsKIAkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9UWVBFX1NFTlNFX01BU0s7CiAJCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IHR5cGU7CiAJfQotCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CisKKwlpZiAodHlwZSAmIChJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKKwkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwllbHNlIGlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfRkFMTElORyB8IElSUV9UWVBFX0VER0VfUklTSU5HKSkKKwkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtODMwLDExICs4MzksMTMgQEAKICAqLwogc3RhdGljIGludCBfc2V0X2dwaW9fd2FrZXVwKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvLCBpbnQgZW5hYmxlKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiAJY2FzZSBNRVRIT0RfTVBVSU86CiAJY2FzZSBNRVRIT0RfR1BJT18xNjEwOgotCQlzcGluX2xvY2soJmJhbmstPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCQlpZiAoZW5hYmxlKSB7CiAJCQliYW5rLT5zdXNwZW5kX3dha2V1cCB8PSAoMSA8PCBncGlvKTsKIAkJCWVuYWJsZV9pcnFfd2FrZShiYW5rLT5pcnEpOwpAQCAtODQyLDcgKzg1Myw3IEBACiAJCQlkaXNhYmxlX2lycV93YWtlKGJhbmstPmlycSk7CiAJCQliYW5rLT5zdXNwZW5kX3dha2V1cCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCX0KLQkJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKQEAgLTg1Myw3ICs4NjQsNyBAQAogCQkJCQkoYmFuayAtIGdwaW9fYmFuaykgKiAzMiArIGdwaW8pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAkJaWYgKGVuYWJsZSkgewogCQkJYmFuay0+c3VzcGVuZF93YWtldXAgfD0gKDEgPDwgZ3Bpbyk7CiAJCQllbmFibGVfaXJxX3dha2UoYmFuay0+aXJxKTsKQEAgLTg2MSw3ICs4NzIsNyBAQAogCQkJZGlzYWJsZV9pcnFfd2FrZShiYW5rLT5pcnEpOwogCQkJYmFuay0+c3VzcGVuZF93YWtldXAgJj0gfigxIDw8IGdwaW8pOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKICNlbmRpZgogCWRlZmF1bHQ6CkBAIC04OTcsMTkgKzkwOCwxOCBAQAogaW50IG9tYXBfcmVxdWVzdF9ncGlvKGludCBncGlvKQogewogCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzOwogCiAJaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChncGlvLCBOVUxMKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwogCWJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOwotCXNwaW5fbG9jaygmYmFuay0+bG9jayk7Ci0JaWYgKHVubGlrZWx5KGJhbmstPnJlc2VydmVkX21hcCAmICgxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvbWFwLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCFcbiIsIGdwaW8pOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKLQkJcmV0dXJuIC0xOwotCX0KLQliYW5rLT5yZXNlcnZlZF9tYXAgfD0gKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTZXQgdHJpZ2dlciB0byBub25lLiBZb3UgbmVlZCB0byBlbmFibGUgdGhlIGRlc2lyZWQgdHJpZ2dlciB3aXRoCiAJICogcmVxdWVzdF9pcnEoKSBvciBzZXRfaXJxX3R5cGUoKS4KQEAgLTkyNSw3ICs5MzUsNyBAQAogCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocmVnKSB8ICgxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pKSwgcmVnKTsKIAl9CiAjZW5kaWYKLQlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzMsMTUgKzk0MywxNyBAQAogdm9pZCBvbWFwX2ZyZWVfZ3BpbyhpbnQgZ3BpbykKIHsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY2hlY2tfZ3BpbyhncGlvKSA8IDApCiAJCXJldHVybjsKIAliYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKLQlzcGluX2xvY2soJmJhbmstPmxvY2spOwotCWlmICh1bmxpa2VseSghKGJhbmstPnJlc2VydmVkX21hcCAmICgxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pKSkpKSB7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoIWdwaW9jaGlwX2lzX3JlcXVlc3RlZCgmYmFuay0+Y2hpcCwKKwkJCQlnZXRfZ3Bpb19pbmRleChncGlvKSkpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJvbWFwLWdwaW86IEdQSU8gJWQgd2Fzbid0IHJlc2VydmVkIVxuIiwgZ3Bpbyk7CiAJCWR1bXBfc3RhY2soKTsKLQkJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOwogCQlyZXR1cm47CiAJfQogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCkBAIC05NTgsOSArOTcwLDkgQEAKIAkJX19yYXdfd3JpdGVsKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHJlZyk7CiAJfQogI2VuZGlmCi0JYmFuay0+cmVzZXJ2ZWRfbWFwICY9IH4oMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSk7CiAJX3Jlc2V0X2dwaW8oYmFuaywgZ3Bpbyk7Ci0Jc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKKwlncGlvX2ZyZWUoZ3Bpbyk7CiB9CiAKIC8qCkBAIC0xMDE1LDEyICsxMDI3LDcgQEAKIAkJCWlzciAmPSAweDAwMDBmZmZmOwogCiAJCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewotCQkJbGV2ZWxfbWFzayA9Ci0JCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCi0JCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKSB8Ci0JCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCi0JCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxKTsKLQkJCWxldmVsX21hc2sgJj0gZW5hYmxlZDsKKwkJCWxldmVsX21hc2sgPSBiYW5rLT5sZXZlbF9tYXNrICYgZW5hYmxlZDsKIAkJfQogCiAJCS8qIGNsZWFyIGVkZ2Ugc2Vuc2l0aXZlIGludGVycnVwdHMgYmVmb3JlIGhhbmRsZXIocykgYXJlCkBAIC0xMDQ1LDUxICsxMDUyLDEzIEBACiAJCWdwaW9faXJxID0gYmFuay0+dmlydHVhbF9pcnFfc3RhcnQ7CiAJCWZvciAoOyBpc3IgIT0gMDsgaXNyID4+PSAxLCBncGlvX2lycSsrKSB7CiAJCQlzdHJ1Y3QgaXJxX2Rlc2MgKmQ7Ci0JCQlpbnQgaXJxX21hc2s7CisKIAkJCWlmICghKGlzciAmIDEpKQogCQkJCWNvbnRpbnVlOwogCQkJZCA9IGlycV9kZXNjICsgZ3Bpb19pcnE7Ci0JCQkvKiBEb24ndCBydW4gdGhlIGhhbmRsZXIgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcKLQkJCSAqIG9yIHdhcyBkaXNhYmxlZCBsYXplbHkuCi0JCQkgKi8KLQkJCWlmICh1bmxpa2VseSgoZC0+ZGVwdGggfHwKLQkJCQkgICAgICAoZC0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpKSkpIHsKLQkJCQlpcnFfbWFzayA9IDEgPDwKLQkJCQkJKGdwaW9faXJxIC0gYmFuay0+dmlydHVhbF9pcnFfc3RhcnQpOwotCQkJCS8qIFRoZSB1bm1hc2tpbmcgd2lsbCBiZSBkb25lIGJ5Ci0JCQkJICogZW5hYmxlX2lycSBpbiBjYXNlIGl0IGlzIGRpc2FibGVkIG9yCi0JCQkJICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIGhhbmRsZXIgaWYKLQkJCQkgKiBpdCdzIGFscmVhZHkgcnVubmluZy4KLQkJCQkgKi8KLQkJCQlfZW5hYmxlX2dwaW9faXJxYmFuayhiYW5rLCBpcnFfbWFzaywgMCk7Ci0JCQkJaWYgKCFkLT5kZXB0aCkgewotCQkJCQkvKiBMZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cwotCQkJCQkgKiB3b24ndCBldmVyIGJlIHJlZW50ZXJlZAotCQkJCQkgKi8KLQkJCQkJQlVHX09OKGxldmVsX21hc2sgJiBpcnFfbWFzayk7Ci0JCQkJCWQtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWRlc2NfaGFuZGxlX2lycShncGlvX2lycSwgZCk7Ci0KLQkJCWlmICh1bmxpa2VseSgoZC0+c3RhdHVzICYgSVJRX1BFTkRJTkcpICYmICFkLT5kZXB0aCkpIHsKLQkJCQlpcnFfbWFzayA9IDEgPDwKLQkJCQkJKGdwaW9faXJxIC0gYmFuay0+dmlydHVhbF9pcnFfc3RhcnQpOwotCQkJCWQtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7Ci0JCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXJxX21hc2ssIDEpOwotCQkJCXJldHJpZ2dlciB8PSBpcnFfbWFzazsKLQkJCX0KIAkJfQotCi0JCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewotCQkJLyogY2xlYXIgbGV2ZWwgc2Vuc2l0aXZlIGludGVycnVwdHMgYWZ0ZXIgaGFuZGxlcihzKSAqLwotCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyX3NhdmVkICYgbGV2ZWxfbWFzaywgMCk7Ci0JCQlfY2xlYXJfZ3Bpb19pcnFiYW5rKGJhbmssIGlzcl9zYXZlZCAmIGxldmVsX21hc2spOwotCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyX3NhdmVkICYgbGV2ZWxfbWFzaywgMSk7Ci0JCX0KLQogCX0KIAkvKiBpZiBiYW5rIGhhcyBhbnkgbGV2ZWwgc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdAogCWNvbmZpZ3VyZWQsIHdlIG11c3QgdW5tYXNrIHRoZSBiYW5rIGludGVycnVwdCBvbmx5IGFmdGVyCkBAIC0xMTI3LDEwICsxMDk2LDE3IEBACiBzdGF0aWMgdm9pZCBncGlvX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgZ3BpbyA9IGlycSAtIElIX0dQSU9fQkFTRTsKLQl1bnNpZ25lZCBpbnQgZ3Bpb19pZHggPSBnZXRfZ3Bpb19pbmRleChncGlvKTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBpbnQgaXJxX21hc2sgPSAxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pOwogCi0JX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvX2lkeCwgMSk7CisJLyogRm9yIGxldmVsLXRyaWdnZXJlZCBHUElPcywgdGhlIGNsZWFyaW5nIG11c3QgYmUgZG9uZSBhZnRlcgorCSAqIHRoZSBIVyBzb3VyY2UgaXMgY2xlYXJlZCwgdGh1cyBhZnRlciB0aGUgaGFuZGxlciBoYXMgcnVuICovCisJaWYgKGJhbmstPmxldmVsX21hc2sgJiBpcnFfbWFzaykgeworCQlfc2V0X2dwaW9faXJxZW5hYmxlKGJhbmssIGdwaW8sIDApOworCQlfY2xlYXJfZ3Bpb19pcnFzdGF0dXMoYmFuaywgZ3Bpbyk7CisJfQorCisJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0gewpAQCAtMTE5NCwxMSArMTE3MCwxMiBAQAogewogCXN0cnVjdCBncGlvX2JhbmsJKmJhbmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0JCSptYXNrX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCWJhbmstPnNhdmVkX3dha2V1cCA9IF9fcmF3X3JlYWRsKG1hc2tfcmVnKTsKIAlfX3Jhd193cml0ZWwoMHhmZmZmICYgfmJhbmstPnN1c3BlbmRfd2FrZXVwLCBtYXNrX3JlZyk7Ci0Jc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIwNywxMCArMTE4NCwxMSBAQAogewogCXN0cnVjdCBncGlvX2JhbmsJKmJhbmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0JCSptYXNrX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF93YWtldXAsIG1hc2tfcmVnKTsKLQlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjU4LDYgKzEyMzYsNTMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBSRVZJU0lUIHRoZXNlIGFyZSBzdHVwaWQgaW1wbGVtZW50YXRpb25zISAgcmVwbGFjZSBieSBvbmVzIHRoYXQKKyAqIGRvbid0IHN3aXRjaCBvbiBNRVRIT0RfKiBhbmQgd2hpY2ggbW9zdGx5IGF2b2lkIHNwaW5sb2NrcworICovCisKK3N0YXRpYyBpbnQgZ3Bpb19pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYmFuayA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZ3Bpb19iYW5rLCBjaGlwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOworCV9zZXRfZ3Bpb19kaXJlY3Rpb24oYmFuaywgb2Zmc2V0LCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiBvbWFwX2dldF9ncGlvX2RhdGFpbihjaGlwLT5iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBncGlvX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwliYW5rID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBncGlvX2JhbmssIGNoaXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CisJX3NldF9ncGlvX2RhdGFvdXQoYmFuaywgb2Zmc2V0LCB2YWx1ZSk7CisJX3NldF9ncGlvX2RpcmVjdGlvbihiYW5rLCBvZmZzZXQsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYmFuayA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZ3Bpb19iYW5rLCBjaGlwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOworCV9zZXRfZ3Bpb19kYXRhb3V0KGJhbmssIG9mZnNldCwgdmFsdWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IGluaXRpYWxpemVkOwogI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogc3RhdGljIHN0cnVjdCBjbGsgKiBncGlvX2ljazsKQEAgLTEyNzcsOSArMTMwMiwxNSBAQAogc3RhdGljIHN0cnVjdCBjbGsgKmdwaW9faWNsa3NbT01BUDM0WFhfTlJfR1BJT1NdOwogI2VuZGlmCiAKKy8qIFRoaXMgbG9jayBjbGFzcyB0ZWxscyBsb2NrZGVwIHRoYXQgR1BJTyBpcnFzIGFyZSBpbiBhIGRpZmZlcmVudAorICogY2F0ZWdvcnkgdGhhbiB0aGVpciBwYXJlbnRzLCBzbyBpdCB3b24ndCByZXBvcnQgZmFsc2UgcmVjdXJzaW9uLgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGdwaW9fbG9ja19jbGFzczsKKwogc3RhdGljIGludCBfX2luaXQgX29tYXBfZ3Bpb19pbml0KHZvaWQpCiB7CiAJaW50IGk7CisJaW50IGdwaW8gPSAwOwogCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAljaGFyIGNsa19uYW1lWzExXTsKQEAgLTE0MTAsNyArMTQ0MSw2IEBACiAJCWludCBqLCBncGlvX2NvdW50ID0gMTY7CiAKIAkJYmFuayA9ICZncGlvX2JhbmtbaV07Ci0JCWJhbmstPnJlc2VydmVkX21hcCA9IDA7CiAJCWJhbmstPmJhc2UgPSBJT19BRERSRVNTKGJhbmstPmJhc2UpOwogCQlzcGluX2xvY2tfaW5pdCgmYmFuay0+bG9jayk7CiAJCWlmIChiYW5rX2lzX21wdWlvKGJhbmspKQpAQCAtMTQ0OCw4ICsxNDc4LDI5IEBACiAJCQlncGlvX2NvdW50ID0gMzI7CiAJCX0KICNlbmRpZgorCisJCS8qIFJFVklTSVQgZXZlbnR1YWxseSBzd2l0Y2ggZnJvbSBPTUFQLXNwZWNpZmljIGdwaW8gc3RydWN0cworCQkgKiBvdmVyIHRvIHRoZSBnZW5lcmljIG9uZXMKKwkJICovCisJCWJhbmstPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gZ3Bpb19pbnB1dDsKKwkJYmFuay0+Y2hpcC5nZXQgPSBncGlvX2dldDsKKwkJYmFuay0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gZ3Bpb19vdXRwdXQ7CisJCWJhbmstPmNoaXAuc2V0ID0gZ3Bpb19zZXQ7CisJCWlmIChiYW5rX2lzX21wdWlvKGJhbmspKSB7CisJCQliYW5rLT5jaGlwLmxhYmVsID0gIm1wdWlvIjsKKwkJCWJhbmstPmNoaXAuYmFzZSA9IE9NQVBfTVBVSU8oMCk7CisJCX0gZWxzZSB7CisJCQliYW5rLT5jaGlwLmxhYmVsID0gImdwaW8iOworCQkJYmFuay0+Y2hpcC5iYXNlID0gZ3BpbzsKKwkJCWdwaW8gKz0gZ3Bpb19jb3VudDsKKwkJfQorCQliYW5rLT5jaGlwLm5ncGlvID0gZ3Bpb19jb3VudDsKKworCQlncGlvY2hpcF9hZGQoJmJhbmstPmNoaXApOworCiAJCWZvciAoaiA9IGJhbmstPnZpcnR1YWxfaXJxX3N0YXJ0OwogCQkgICAgIGogPCBiYW5rLT52aXJ0dWFsX2lycV9zdGFydCArIGdwaW9fY291bnQ7IGorKykgeworCQkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW2pdLmxvY2ssICZncGlvX2xvY2tfY2xhc3MpOwogCQkJc2V0X2lycV9jaGlwX2RhdGEoaiwgYmFuayk7CiAJCQlpZiAoYmFua19pc19tcHVpbyhiYW5rKSkKIAkJCQlzZXRfaXJxX2NoaXAoaiwgJm1wdWlvX2lycV9jaGlwKTsKQEAgLTE0ODksNiArMTU0MCw3IEBACiAJCXZvaWQgX19pb21lbSAqd2FrZV9zdGF0dXM7CiAJCXZvaWQgX19pb21lbSAqd2FrZV9jbGVhcjsKIAkJdm9pZCBfX2lvbWVtICp3YWtlX3NldDsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCkBAIC0xNTA5LDExICsxNTYxLDExIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXNwaW5fbG9jaygmYmFuay0+bG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJCWJhbmstPnNhdmVkX3dha2V1cCA9IF9fcmF3X3JlYWRsKHdha2Vfc3RhdHVzKTsKIAkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIHdha2VfY2xlYXIpOwogCQlfX3Jhd193cml0ZWwoYmFuay0+c3VzcGVuZF93YWtldXAsIHdha2Vfc2V0KTsKLQkJc3Bpbl91bmxvY2soJmJhbmstPmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTMwLDYgKzE1ODIsNyBAQAogCQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gJmdwaW9fYmFua1tpXTsKIAkJdm9pZCBfX2lvbWVtICp3YWtlX2NsZWFyOwogCQl2b2lkIF9faW9tZW0gKndha2Vfc2V0OworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKQEAgLTE1NDgsMTAgKzE2MDEsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc3Bpbl9sb2NrKCZiYW5rLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIHdha2VfY2xlYXIpOwogCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfd2FrZXVwLCB3YWtlX3NldCk7Ci0JCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTc0MSw4ICsxNzk0LDEwIEBACiAKIAkJZm9yIChqID0gMDsgaiA8IGJhbmt3aWR0aDsgaisrLCBncGlvKyssIG1hc2sgPDw9IDEpIHsKIAkJCXVuc2lnbmVkCWlycSwgdmFsdWUsIGlzX2luLCBpcnFzdGF0OworCQkJY29uc3QgY2hhcgkqbGFiZWw7CiAKLQkJCWlmICghKGJhbmstPnJlc2VydmVkX21hcCAmIG1hc2spKQorCQkJbGFiZWwgPSBncGlvY2hpcF9pc19yZXF1ZXN0ZWQoJmJhbmstPmNoaXAsIGopOworCQkJaWYgKCFsYWJlbCkKIAkJCQljb250aW51ZTsKIAogCQkJaXJxID0gYmFuay0+dmlydHVhbF9pcnFfc3RhcnQgKyBqOwpAQCAtMTc1MCwxMyArMTgwNSwxNiBAQAogCQkJaXNfaW4gPSBncGlvX2lzX2lucHV0KGJhbmssIG1hc2spOwogCiAJCQlpZiAoYmFua19pc19tcHVpbyhiYW5rKSkKLQkJCQlzZXFfcHJpbnRmKHMsICJNUFVJTyAlMmQ6ICIsIGopOworCQkJCXNlcV9wcmludGYocywgIk1QVUlPICUyZCAiLCBqKTsKIAkJCWVsc2UKLQkJCQlzZXFfcHJpbnRmKHMsICJHUElPICUzZDogIiwgZ3Bpbyk7Ci0JCQlzZXFfcHJpbnRmKHMsICIlcyAlcyIsCisJCQkJc2VxX3ByaW50ZihzLCAiR1BJTyAlM2QgIiwgZ3Bpbyk7CisJCQlzZXFfcHJpbnRmKHMsICIoJTEwcyk6ICVzICVzIiwKKwkJCQkJbGFiZWwsCiAJCQkJCWlzX2luID8gImluICIgOiAib3V0IiwKIAkJCQkJdmFsdWUgPyAiaGkiICA6ICJsbyIpOwogCisvKiBGSVhNRSBmb3IgYXQgbGVhc3Qgb21hcDIsIHNob3cgcHVsbHVwL3B1bGxkb3duIHN0YXRlICovCisKIAkJCWlycXN0YXQgPSBpcnFfZGVzY1tpcnFdLnN0YXR1czsKIAkJCWlmIChpc19pbiAmJiAoKGJhbmstPnN1c3BlbmRfd2FrZXVwICYgbWFzaykKIAkJCQkJfHwgaXJxc3RhdCAmIElSUV9UWVBFX1NFTlNFX01BU0spKSB7CkBAIC0xNzc5LDEwICsxODM3LDEwIEBACiAJCQkJCXRyaWdnZXIgPSAiaGlnaCI7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgSVJRX1RZUEVfTk9ORToKLQkJCQkJdHJpZ2dlciA9ICIodW5zcGVjaWZpZWQpIjsKKwkJCQkJdHJpZ2dlciA9ICIoPykiOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJc2VxX3ByaW50ZihzLCAiLCBpcnEtJWQgJXMlcyIsCisJCQkJc2VxX3ByaW50ZihzLCAiLCBpcnEtJWQgJS04cyVzIiwKIAkJCQkJCWlycSwgdHJpZ2dlciwKIAkJCQkJCShiYW5rLT5zdXNwZW5kX3dha2V1cCAmIG1hc2spCiAJCQkJCQkJPyAiIHdha2V1cCIgOiAiIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKaW5kZXggNzUyMTFmMi4uNmYzZjQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYwpAQCAtMyw5ICszLDkgQEAKICAqCiAgKiBVdGlsaXR5IHRvIHNldCB0aGUgT21hcCBNVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVycyBmcm9tIGEgdGFibGUgaW4gbXV4LmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzIsMjEgKzMyLDE3IEBACiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKIAotI2RlZmluZSBPTUFQMjRYWF9MNF9CQVNFCTB4NDgwMDAwMDAKLSNkZWZpbmUgT01BUDI0WFhfUFVMTF9FTkEJKDEgPDwgMykKLSNkZWZpbmUgT01BUDI0WFhfUFVMTF9VUAkoMSA8PCA0KQorc3RhdGljIHN0cnVjdCBvbWFwX211eF9jZmcgKm11eF9jZmc7CiAKLXN0YXRpYyBzdHJ1Y3QgcGluX2NvbmZpZyAqIHBpbl90YWJsZTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpbl90YWJsZV9zejsKLQotZXh0ZXJuIHN0cnVjdCBwaW5fY29uZmlnICogb21hcDczMF9waW5zOwotZXh0ZXJuIHN0cnVjdCBwaW5fY29uZmlnICogb21hcDF4eHhfcGluczsKLWV4dGVybiBzdHJ1Y3QgcGluX2NvbmZpZyAqIG9tYXAyNHh4X3BpbnM7Ci0KLWludCBfX2luaXQgb21hcF9tdXhfcmVnaXN0ZXIoc3RydWN0IHBpbl9jb25maWcgKiBwaW5zLCB1bnNpZ25lZCBsb25nIHNpemUpCitpbnQgX19pbml0IG9tYXBfbXV4X3JlZ2lzdGVyKHN0cnVjdCBvbWFwX211eF9jZmcgKmFyY2hfbXV4X2NmZykKIHsKLQlwaW5fdGFibGUgPSBwaW5zOwotCXBpbl90YWJsZV9zeiA9IHNpemU7CisJaWYgKCFhcmNoX211eF9jZmcgfHwgIWFyY2hfbXV4X2NmZy0+cGlucyB8fCBhcmNoX211eF9jZmctPnNpemUgPT0gMAorCQkJfHwgIWFyY2hfbXV4X2NmZy0+Y2ZnX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgcGluIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV4X2NmZyA9IGFyY2hfbXV4X2NmZzsKIAogCXJldHVybiAwOwogfQpAQCAtNTYsMTUyICs1MiwyNiBAQAogICovCiBpbnQgX19pbml0X29yX21vZHVsZSBvbWFwX2NmZ19yZWcoY29uc3QgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOworCXN0cnVjdCBwaW5fY29uZmlnICpyZWc7CiAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwaW5fY29uZmlnICpjZmc7Ci0JdW5zaWduZWQgaW50IHJlZ19vcmlnID0gMCwgcmVnID0gMCwgcHVfcGRfb3JpZyA9IDAsIHB1X3BkID0gMCwKLQkJcHVsbF9vcmlnID0gMCwgcHVsbCA9IDA7Ci0JdW5zaWduZWQgaW50IG1hc2ssIHdhcm4gPSAwOworCWlmIChtdXhfY2ZnID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQaW4gbXV4IHRhYmxlIG5vdCBpbml0aWFsaXplZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCWlmICghcGluX3RhYmxlKQotCQlCVUcoKTsKLQotCWlmIChpbmRleCA+PSBwaW5fdGFibGVfc3opIHsKKwlpZiAoaW5kZXggPj0gbXV4X2NmZy0+c2l6ZSkgewogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgcGluIG11eCBpbmRleDogJWx1ICglbHUpXG4iLAotCQkgICAgICAgaW5kZXgsIHBpbl90YWJsZV9zeik7CisJCSAgICAgICBpbmRleCwgbXV4X2NmZy0+c2l6ZSk7CiAJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2ZnID0gKHN0cnVjdCBwaW5fY29uZmlnICopJnBpbl90YWJsZVtpbmRleF07Ci0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCXU4IHJlZyA9IDA7CisJcmVnID0gKHN0cnVjdCBwaW5fY29uZmlnICopJm11eF9jZmctPnBpbnNbaW5kZXhdOwogCi0JCXJlZyB8PSBjZmctPm1hc2sgJiAweDc7Ci0JCWlmIChjZmctPnB1bGxfdmFsKQotCQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfRU5BOwotCQlpZihjZmctPnB1X3BkX3ZhbCkKLQkJCXJlZyB8PSBPTUFQMjRYWF9QVUxMX1VQOwotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYX0RFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX01VWF9XQVJOSU5HUykKLQkJewotCQkJdTggb3JpZyA9IG9tYXBfcmVhZGIoT01BUDI0WFhfTDRfQkFTRSArIGNmZy0+bXV4X3JlZyk7Ci0JCQl1OCBkZWJ1ZyA9IDA7CisJaWYgKCFtdXhfY2ZnLT5jZmdfcmVnKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotI2lmZGVmCUNPTkZJR19PTUFQX01VWF9ERUJVRwotCQkJZGVidWcgPSBjZmctPmRlYnVnOwotI2VuZGlmCi0JCQl3YXJuID0gKG9yaWcgIT0gcmVnKTsKLQkJCWlmIChkZWJ1ZyB8fCB3YXJuKQotCQkJCXByaW50aygiTVVYOiBzZXR1cCAlcyAoMHglMDh4KTogMHglMDJ4IC0+IDB4JTAyeFxuIiwKLQkJCQkJCWNmZy0+bmFtZSwKLQkJCQkJCU9NQVAyNFhYX0w0X0JBU0UgKyBjZmctPm11eF9yZWcsCi0JCQkJCQlvcmlnLCByZWcpOwotCQl9Ci0jZW5kaWYKLQkJb21hcF93cml0ZWIocmVnLCBPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBDaGVjayB0aGUgbXV4IHJlZ2lzdGVyIGluIHF1ZXN0aW9uICovCi0JaWYgKGNmZy0+bXV4X3JlZykgewotCQl1bnNpZ25lZAl0bXAxLCB0bXAyOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JCXJlZ19vcmlnID0gb21hcF9yZWFkbChjZmctPm11eF9yZWcpOwotCi0JCS8qIFRoZSBtdXggcmVnaXN0ZXJzIGFsd2F5cyBzZWVtIHRvIGJlIDMgYml0cyBsb25nICovCi0JCW1hc2sgPSAoMHg3IDw8IGNmZy0+bWFza19vZmZzZXQpOwotCQl0bXAxID0gcmVnX29yaWcgJiBtYXNrOwotCQlyZWcgPSByZWdfb3JpZyAmIH5tYXNrOwotCi0JCXRtcDIgPSAoY2ZnLT5tYXNrIDw8IGNmZy0+bWFza19vZmZzZXQpOwotCQlyZWcgfD0gdG1wMjsKLQotCQlpZiAodG1wMSAhPSB0bXAyKQotCQkJd2FybiA9IDE7Ci0KLQkJb21hcF93cml0ZWwocmVnLCBjZmctPm11eF9yZWcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIHB1bGwgdXAgb3IgcHVsbCBkb3duIHNlbGVjdGlvbiBvbiAxNjEwICovCi0JaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgewotCQlpZiAoY2ZnLT5wdV9wZF9yZWcgJiYgY2ZnLT5wdWxsX3ZhbCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKLQkJCXB1X3BkX29yaWcgPSBvbWFwX3JlYWRsKGNmZy0+cHVfcGRfcmVnKTsKLQkJCW1hc2sgPSAxIDw8IGNmZy0+cHVsbF9iaXQ7Ci0KLQkJCWlmIChjZmctPnB1X3BkX3ZhbCkgewotCQkJCWlmICghKHB1X3BkX29yaWcgJiBtYXNrKSkKLQkJCQkJd2FybiA9IDE7Ci0JCQkJLyogVXNlIHB1bGwgdXAgKi8KLQkJCQlwdV9wZCA9IHB1X3BkX29yaWcgfCBtYXNrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocHVfcGRfb3JpZyAmIG1hc2spCi0JCQkJCXdhcm4gPSAxOwotCQkJCS8qIFVzZSBwdWxsIGRvd24gKi8KLQkJCQlwdV9wZCA9IHB1X3BkX29yaWcgJiB+bWFzazsKLQkJCX0KLQkJCW9tYXBfd3JpdGVsKHB1X3BkLCBjZmctPnB1X3BkX3JlZyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JCX0KLQl9Ci0KLQkvKiBDaGVjayBmb3IgYW4gYXNzb2NpYXRlZCBwdWxsIGRvd24gcmVnaXN0ZXIgKi8KLQlpZiAoY2ZnLT5wdWxsX3JlZykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwotCQlwdWxsX29yaWcgPSBvbWFwX3JlYWRsKGNmZy0+cHVsbF9yZWcpOwotCQltYXNrID0gMSA8PCBjZmctPnB1bGxfYml0OwotCi0JCWlmIChjZmctPnB1bGxfdmFsKSB7Ci0JCQlpZiAocHVsbF9vcmlnICYgbWFzaykKLQkJCQl3YXJuID0gMTsKLQkJCS8qIExvdyBiaXQgPSBwdWxsIGVuYWJsZWQgKi8KLQkJCXB1bGwgPSBwdWxsX29yaWcgJiB+bWFzazsKLQkJfSBlbHNlIHsKLQkJCWlmICghKHB1bGxfb3JpZyAmIG1hc2spKQotCQkJCXdhcm4gPSAxOwotCQkJLyogSGlnaCBiaXQgPSBwdWxsIGRpc2FibGVkICovCi0JCQlwdWxsID0gcHVsbF9vcmlnIHwgbWFzazsKLQkJfQotCi0JCW9tYXBfd3JpdGVsKHB1bGwsIGNmZy0+cHVsbF9yZWcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKHdhcm4pIHsKLSNpZmRlZiBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTVVYOiBpbml0aWFsaXplZCAlc1xuIiwgY2ZnLT5uYW1lKTsKLSNlbmRpZgotCX0KLQotI2lmZGVmIENPTkZJR19PTUFQX01VWF9ERUJVRwotCWlmIChjZmctPmRlYnVnIHx8IHdhcm4pIHsKLQkJcHJpbnRrKCJNVVg6IFNldHRpbmcgcmVnaXN0ZXIgJXNcbiIsIGNmZy0+bmFtZSk7Ci0JCXByaW50aygiICAgICAgJXMgKDB4JTA4eCkgPSAweCUwOHggLT4gMHglMDh4XG4iLAotCQkgICAgICAgY2ZnLT5tdXhfcmVnX25hbWUsIGNmZy0+bXV4X3JlZywgcmVnX29yaWcsIHJlZyk7Ci0KLQkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJaWYgKGNmZy0+cHVfcGRfcmVnICYmIGNmZy0+cHVsbF92YWwpIHsKLQkJCQlwcmludGsoIiAgICAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKLQkJCQkgICAgICAgY2ZnLT5wdV9wZF9uYW1lLCBjZmctPnB1X3BkX3JlZywKLQkJCQkgICAgICAgcHVfcGRfb3JpZywgcHVfcGQpOwotCQkJfQotCQl9Ci0KLQkJaWYgKGNmZy0+cHVsbF9yZWcpCi0JCQlwcmludGsoIiAgICAgICVzICgweCUwOHgpID0gMHglMDh4IC0+IDB4JTA4eFxuIiwKLQkJCSAgICAgICBjZmctPnB1bGxfbmFtZSwgY2ZnLT5wdWxsX3JlZywgcHVsbF9vcmlnLCBwdWxsKTsKLQl9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19PTUFQX01VWF9FUlJPUlMKLQlyZXR1cm4gd2FybiA/IC1FVFhUQlNZIDogMDsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKKwlyZXR1cm4gbXV4X2NmZy0+Y2ZnX3JlZyhyZWcpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX2NmZ19yZWcpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3RpbWVyMzJrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNzZmMTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3RpbWVyMzJrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCi0gKgotICogT01BUCAzMksgVGltZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCi0gKiBQYXJ0aWFsIHRpbWVyIHJld3JpdGUgYW5kIGFkZGl0aW9uYWwgZHluYW1pYyB0aWNrIHRpbWVyIHN1cHBvcnQgYnkKLSAqIFRvbnkgTGluZGdlbiA8dG9ueUBhdG9taWRlLmNvbT4gYW5kCi0gKiBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KLSAqIE9NQVAgRHVhbC1tb2RlIHRpbWVyIGZyYW1ld29yayBzdXBwb3J0IGJ5IFRpbW8gVGVyYXMKLSAqCi0gKiBNUFUgdGltZXIgY29kZSBiYXNlZCBvbiB0aGUgb2xkZXIgTVBVIHRpbWVyIGNvZGUgZm9yIE9NQVAKLSAqIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgotICogQXV0aG9yOiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9sZWRzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9kbXRpbWVyLmg+Ci0KLXN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMzJLSHogT1MgdGltZXIKLSAqCi0gKiBUaGlzIGN1cnJlbnRseSB3b3JrcyBvbmx5IG9uIDE2eHgsIGFzIDE1MTAgZG9lcyBub3QgaGF2ZSB0aGUgY29udGludW91cwotICogMzJLSHogc3luY2hyb25vdXMgdGltZXIuIFRoZSAzMktIeiBzeW5jaHJvbm91cyB0aW1lciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sKLSAqIG9mIHRpbWUgaW4gYWRkaXRpb24gdG8gdGhlIDMyS0h6IE9TIHRpbWVyLiBVc2luZyBvbmx5IHRoZSAzMktIeiBPUyB0aW1lcgotICogb24gMTUxMCB3b3VsZCBiZSBwb3NzaWJsZSwgYnV0IHRoZSB0aW1lciB3b3VsZCBub3QgYmUgYXMgYWNjdXJhdGUgYXMKLSAqIHdpdGggdGhlIDMyS0h6IHN5bmNocm9uaXplZCB0aW1lci4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkweGZmZmJjNDEwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQotI2RlZmluZSBUSU1FUl8zMktfU1lOQ0hST05JWkVECQkoT01BUDI0WFhfMzJLU1lOQ1RfQkFTRSArIDB4MTApCi0jZWxzZQotI2Vycm9yIE9NQVAgMzJLSHogdGltZXIgZG9lcyBub3QgY3VycmVudGx5IHdvcmsgb24gMTVYWCEKLSNlbmRpZgotCi0vKiAxNnh4IHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0JBU0UJCTB4ZmZmYjkwMDAKLSNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX0NSCQkweDA4Ci0jZGVmaW5lIE9NQVAxXzMyS19USU1FUl9UVlIJCTB4MDAKLSNkZWZpbmUgT01BUDFfMzJLX1RJTUVSX1RDUgkJMHgwNAotCi0jZGVmaW5lIE9NQVBfMzJLX1RJQ0tTX1BFUl9TRUMJCSgzMjc2OCkKLQotLyoKLSAqIFRSTSBzYXlzIDEgLyBIWiA9ICggVFZSICsgMSkgLyAzMjc2OCwgc28gVFJWID0gKDMyNzY4IC8gSFopIC0gMQotICogc28gd2l0aCBIWiA9IDEyOCwgVFZSID0gMjU1LgotICovCi0jZGVmaW5lIE9NQVBfMzJLX1RJTUVSX1RJQ0tfUEVSSU9ECSgoT01BUF8zMktfVElDS1NfUEVSX1NFQyAvIEhaKSAtIDEpCi0KLSNkZWZpbmUgSklGRklFU19UT19IV19USUNLUyhucl9qaWZmaWVzLCBjbG9ja19yYXRlKQkJCVwKLQkJCQkoKChucl9qaWZmaWVzKSAqIChjbG9ja19yYXRlKSkgLyBIWikKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl93cml0ZShpbnQgdmFsLCBpbnQgcmVnKQotewotCW9tYXBfd3JpdGV3KHZhbCwgT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGltZXJfcmVhZChpbnQgcmVnKQotewotCXJldHVybiBvbWFwX3JlYWRsKE9NQVAxXzMyS19USU1FUl9CQVNFICsgcmVnKSAmIDB4ZmZmZmZmOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfc3RhcnQodW5zaWduZWQgbG9uZyBsb2FkX3ZhbCkKLXsKLQlpZiAoIWxvYWRfdmFsKQotCQlsb2FkX3ZhbCA9IDE7Ci0Jb21hcF8zMmtfdGltZXJfd3JpdGUobG9hZF92YWwsIE9NQVAxXzMyS19USU1FUl9UVlIpOwotCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MGYsIE9NQVAxXzMyS19USU1FUl9DUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdG9wKHZvaWQpCi17Ci0Jb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwLCBPTUFQMV8zMktfVElNRVJfQ1IpOwotfQotCi0jZGVmaW5lIG9tYXBfMzJrX3RpbWVyX2Fja19pcnEoKQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQotCi1zdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgKmdwdGltZXI7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQotewotCW9tYXBfZG1fdGltZXJfc2V0X2xvYWQoZ3B0aW1lciwgMSwgMHhmZmZmZmZmZiAtIGxvYWRfdmFsKTsKLQlvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKGdwdGltZXIsIE9NQVBfVElNRVJfSU5UX09WRVJGTE9XKTsKLQlvbWFwX2RtX3RpbWVyX3N0YXJ0KGdwdGltZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfc3RvcCh2b2lkKQotewotCW9tYXBfZG1fdGltZXJfc3RvcChncHRpbWVyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX2Fja19pcnEodm9pZCkKLXsKLQl1MzIgc3RhdHVzID0gb21hcF9kbV90aW1lcl9yZWFkX3N0YXR1cyhncHRpbWVyKTsKLQlvbWFwX2RtX3RpbWVyX3dyaXRlX3N0YXR1cyhncHRpbWVyLCBzdGF0dXMpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgb21hcF8zMmtfdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQlvbWFwXzMya190aW1lcl9zdG9wKCk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQlvbWFwXzMya190aW1lcl9zdGFydChPTUFQXzMyS19USU1FUl9USUNLX1BFUklPRCk7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja2V2ZW50XzMya190aW1lciA9IHsKLQkubmFtZQkJPSAiMzJrLXRpbWVyIiwKLQkuZmVhdHVyZXMgICAgICAgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKLQkuc2hpZnQJCT0gMzIsCi0JLnNldF9tb2RlCT0gb21hcF8zMmtfdGltZXJfc2V0X21vZGUsCi19OwotCi0vKgotICogVGhlIDMyS0h6IHN5bmNocm9uaXplZCB0aW1lciBpcyBhbiBhZGRpdGlvbmFsIHRpbWVyIG9uIDE2eHguCi0gKiBJdCBpcyBhbHdheXMgcnVubmluZy4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCh2b2lkKQotewotCXJldHVybiBvbWFwX3JlYWRsKFRJTUVSXzMyS19TWU5DSFJPTklaRUQpOwotfQotCi0vKgotICogUm91bmRzIGRvd24gdG8gbmVhcmVzdCB1c2VjLiBOb3RlIHRoYXQgdGhpcyB3aWxsIG92ZXJmbG93IGZvciBsYXJnZXIgdmFsdWVzLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGlja3NfdG9fdXNlY3ModW5zaWduZWQgbG9uZyB0aWNrc18zMmspCi17Ci0JcmV0dXJuICh0aWNrc18zMmsgKiA1KjUqNSo1KjUqNSkgPj4gOTsKLX0KLQotLyoKLSAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgbnNlYy4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcKLW9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKHVuc2lnbmVkIGxvbmcgdGlja3NfMzJrKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSB0aWNrc18zMmsgKiAxMDAwICogNSo1KjUqNSo1KjUgPj4gOTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCB0aW1lIGZyb20gYm9vdCBpbiBuc2Vjcy4gSXQncyBPSyBmb3IgdGhpcyB0byB3cmFwCi0gKiBhcm91bmQgZm9yIG5vdywgYXMgaXQncyBqdXN0IGEgcmVsYXRpdmUgdGltZSBzdGFtcC4KLSAqLwotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCi17Ci0JcmV0dXJuIG9tYXBfMzJrX3RpY2tzX3RvX25zZWNzKG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmNsb2NrZXZlbnRfMzJrX3RpbWVyOwotCW9tYXBfMzJrX3RpbWVyX2Fja19pcnEoKTsKLQotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwXzMya190aW1lcl9pcnEgPSB7Ci0JLm5hbWUJCT0gIjMyS0h6IHRpbWVyIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCi19OwotCi1zdGF0aWMgX19pbml0IHZvaWQgb21hcF9pbml0XzMya190aW1lcih2b2lkKQotewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJc2V0dXBfaXJxKElOVF9PU19USU1FUiwgJm9tYXBfMzJrX3RpbWVyX2lycSk7Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgotCS8qIFJFVklTSVQ6IENoZWNrIDI0eHggVElPQ1BfQ0ZHIHNldHRpbmdzIGFmdGVyIGlkbGUgd29ya3MgKi8KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJZ3B0aW1lciA9IG9tYXBfZG1fdGltZXJfcmVxdWVzdF9zcGVjaWZpYygxKTsKLQkJQlVHX09OKGdwdGltZXIgPT0gTlVMTCk7Ci0KLQkJb21hcF9kbV90aW1lcl9zZXRfc291cmNlKGdwdGltZXIsIE9NQVBfVElNRVJfU1JDXzMyX0tIWik7Ci0JCXNldHVwX2lycShvbWFwX2RtX3RpbWVyX2dldF9pcnEoZ3B0aW1lciksICZvbWFwXzMya190aW1lcl9pcnEpOwotCQlvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKGdwdGltZXIsCi0JCQlPTUFQX1RJTUVSX0lOVF9DQVBUVVJFIHwgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cgfAotCQkJT01BUF9USU1FUl9JTlRfTUFUQ0gpOwotCX0KLSNlbmRpZgotCi0JY2xvY2tldmVudF8zMmtfdGltZXIubXVsdCA9IGRpdl9zYyhPTUFQXzMyS19USUNLU19QRVJfU0VDLAotCQkJCQkgICBOU0VDX1BFUl9TRUMsCi0JCQkJCSAgIGNsb2NrZXZlbnRfMzJrX3RpbWVyLnNoaWZ0KTsKLQljbG9ja2V2ZW50XzMya190aW1lci5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50XzMya190aW1lcik7Ci0JY2xvY2tldmVudF8zMmtfdGltZXIubWluX2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygxLCAmY2xvY2tldmVudF8zMmtfdGltZXIpOwotCi0JY2xvY2tldmVudF8zMmtfdGltZXIuY3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xvY2tldmVudF8zMmtfdGltZXIpOwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaW1lciBpbml0aWFsaXphdGlvbgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfT01BUF9ETV9USU1FUgotCW9tYXBfZG1fdGltZXJfaW5pdCgpOwotI2VuZGlmCi0Jb21hcF9pbml0XzMya190aW1lcigpOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXIgPSB7Ci0JLmluaXQJCT0gb21hcF90aW1lcl9pbml0LAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwppbmRleCBhNWFlZGY5Li5hNjE5NDc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CkBAIC03Niw3ICs3Nyw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZglDT05GSUdfQVJDSF9PTUFQX09URworI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUF9PVEcpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX09URykKIAogc3RhdGljIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKnhjZWl2OwogCkBAIC0xMTAsMTIgKzExMSw0OCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQX09URykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKIAorc3RhdGljIHZvaWQgb21hcDJfdXNiX2RldmNvbmZfY2xlYXIodTggcG9ydCwgdTMyIG1hc2spCit7CisJdTMyIHI7CisKKwlyID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCXIgJj0gflVTQlRYV1JNT0RFSShwb3J0LCBtYXNrKTsKKwlvbWFwX2N0cmxfd3JpdGVsKHIsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl91c2JfZGV2Y29uZl9zZXQodTggcG9ydCwgdTMyIG1hc2spCit7CisJdTMyIHI7CisKKwlyID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCXIgfD0gVVNCVFhXUk1PREVJKHBvcnQsIG1hc2spOworCW9tYXBfY3RybF93cml0ZWwociwgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX3VzYjJfZGlzYWJsZV81cGluYml0bGwodm9pZCkKK3sKKwl1MzIgcjsKKworCXIgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CisJciAmPSB+KFVTQlRYV1JNT0RFSSgyLCBVU0JfQklESVJfVExMKSB8IFVTQlQyVExMNVBJKTsKKwlvbWFwX2N0cmxfd3JpdGVsKHIsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl91c2IyX2VuYWJsZV81cGludW5pdGxsKHZvaWQpCit7CisJdTMyIHI7CisKKwlyID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCXIgfD0gVVNCVFhXUk1PREVJKDIsIFVTQl9VTklESVJfVExMKSB8IFVTQlQyVExMNVBJOworCW9tYXBfY3RybF93cml0ZWwociwgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7Cit9CisKIHN0YXRpYyB1MzIgX19pbml0IG9tYXBfdXNiMF9pbml0KHVuc2lnbmVkIG53aXJlcywgdW5zaWduZWQgaXNfZGV2aWNlKQogewogCXUzMglzeXNjb24xID0gMDsKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJQ09OVFJPTF9ERVZDT05GX1JFRyAmPSB+VVNCVDBXUk1PREVJKFVTQl9CSURJUl9UTEwpOworCQlvbWFwMl91c2JfZGV2Y29uZl9jbGVhcigwLCBVU0JfQklESVJfVExMKTsKIAogCWlmIChud2lyZXMgPT0gMCkgewogCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgJiYgIWNwdV9pc19vbWFwMTV4eCgpKSB7CkBAIC0xODcsMTkgKzIyNCwxOSBAQAogCWNhc2UgMzoKIAkJc3lzY29uMSA9IDI7CiAJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDBXUk1PREVJKFVTQl9CSURJUik7CisJCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMCwgVVNCX0JJRElSKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgogCQlzeXNjb24xID0gMTsKIAkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQkJQ09OVFJPTF9ERVZDT05GX1JFRyB8PSBVU0JUMFdSTU9ERUkoVVNCX0JJRElSKTsKKwkJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgwLCBVU0JfQklESVIpOwogCQlicmVhazsKIAljYXNlIDY6CiAJCXN5c2NvbjEgPSAzOwogCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJCW9tYXBfY2ZnX3JlZyhKMTlfMjRYWF9VU0IwX1ZQKTsKIAkJCW9tYXBfY2ZnX3JlZyhLMjBfMjRYWF9VU0IwX1ZNKTsKLQkJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDBXUk1PREVJKFVTQl9VTklESVIpOworCQkJb21hcDJfdXNiX2RldmNvbmZfc2V0KDAsIFVTQl9VTklESVIpOwogCQl9IGVsc2UgewogCQkJb21hcF9jZmdfcmVnKEFBOV9VU0IwX1ZQKTsKIAkJCW9tYXBfY2ZnX3JlZyhSOV9VU0IwX1ZNKTsKQEAgLTIyMCw3ICsyNTcsNyBAQAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSAmJiAhY3B1X2lzX29tYXAxNXh4KCkgJiYgbndpcmVzICE9IDYpCiAJCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyAmPSB+Q09ORl9VU0IxX1VOSV9SOwogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJQ09OVFJPTF9ERVZDT05GX1JFRyAmPSB+VVNCVDFXUk1PREVJKFVTQl9CSURJUl9UTEwpOworCQlvbWFwMl91c2JfZGV2Y29uZl9jbGVhcigxLCBVU0JfQklESVJfVExMKTsKIAogCWlmIChud2lyZXMgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0yNjEsMTcgKzI5OCwxNyBAQAogCQkgKiB0aGlzIFRMTCBsaW5rIGlzIG5vdCB1c2luZyBEUC9ETQogCQkgKi8KIAkJc3lzY29uMSA9IDE7Ci0JCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDFXUk1PREVJKFVTQl9CSURJUl9UTEwpOworCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMSwgVVNCX0JJRElSX1RMTCk7CiAJCWJyZWFrOwogCWNhc2UgMzoKIAkJc3lzY29uMSA9IDI7CiAJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDFXUk1PREVJKFVTQl9CSURJUik7CisJCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMSwgVVNCX0JJRElSKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgogCQlzeXNjb24xID0gMTsKIAkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQkJQ09OVFJPTF9ERVZDT05GX1JFRyB8PSBVU0JUMVdSTU9ERUkoVVNCX0JJRElSKTsKKwkJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgxLCBVU0JfQklESVIpOwogCQlicmVhazsKIAljYXNlIDY6CiAJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKQEAgLTI5NSw4ICszMzIsNyBAQAogCXUzMglzeXNjb24xID0gMDsKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlDT05UUk9MX0RFVkNPTkZfUkVHICY9IH4oVVNCVDJXUk1PREVJKFVTQl9CSURJUl9UTEwpCi0JCQkJCXwgVVNCVDJUTEw1UEkpOworCQlvbWFwMl91c2IyX2Rpc2FibGVfNXBpbmJpdGxsKCk7CiAJCWFsdF9waW5ncm91cCA9IDA7CiAJfQogCkBAIC0zNDMsMTcgKzM3OSwxNyBAQAogCQkgKiB0aGlzIFRMTCBsaW5rIGlzIG5vdCB1c2luZyBEUC9ETQogCQkgKi8KIAkJc3lzY29uMSA9IDE7Ci0JCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDJXUk1PREVJKFVTQl9CSURJUl9UTEwpOworCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMiwgVVNCX0JJRElSX1RMTCk7CiAJCWJyZWFrOwogCWNhc2UgMzoKIAkJc3lzY29uMSA9IDI7CiAJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDJXUk1PREVJKFVTQl9CSURJUik7CisJCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMiwgVVNCX0JJRElSKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgogCQlzeXNjb24xID0gMTsKIAkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQkJQ09OVFJPTF9ERVZDT05GX1JFRyB8PSBVU0JUMldSTU9ERUkoVVNCX0JJRElSKTsKKwkJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgyLCBVU0JfQklESVIpOwogCQlicmVhazsKIAljYXNlIDU6CiAJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCkBAIC0zNjQsOCArNDAwLDcgQEAKIAkJICogc2V0IHVwIE9UR19TWVNDT04yLkhNQ19UTEx7QVRUQUNILFNQRUVEfQogCQkgKi8KIAkJc3lzY29uMSA9IDM7Ci0JCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDJXUk1PREVJKFVTQl9VTklESVJfVExMKQotCQkJCQl8IFVTQlQyVExMNVBJOworCQlvbWFwMl91c2IyX2VuYWJsZV81cGludW5pdGxsKCk7CiAJCWJyZWFrOwogCWNhc2UgNjoKIAkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4ZjNkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCitvYmoteQk6PSBpcnEubyBwY2llLm8gdGltZS5vCitvYmotbQk6PQorb2JqLW4JOj0KK29iai0JOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaXJxLmMgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjY2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2lycS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9yaW9uL2lycS5jCisgKgorICogTWFydmVsbCBPcmlvbiBTb0MgSVJRIGhhbmRsaW5nLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1vcmlvbi9pcnEuaD4KKworc3RhdGljIHZvaWQgb3Jpb25faXJxX21hc2sodTMyIGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKm1hc2thZGRyID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1MzIgbWFzazsKKworCW1hc2sgPSByZWFkbChtYXNrYWRkcik7CisJbWFzayAmPSB+KDEgPDwgKGlycSAmIDMxKSk7CisJd3JpdGVsKG1hc2ssIG1hc2thZGRyKTsKK30KKworc3RhdGljIHZvaWQgb3Jpb25faXJxX3VubWFzayh1MzIgaXJxKQoreworCXZvaWQgX19pb21lbSAqbWFza2FkZHIgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXUzMiBtYXNrOworCisJbWFzayA9IHJlYWRsKG1hc2thZGRyKTsKKwltYXNrIHw9IDEgPDwgKGlycSAmIDMxKTsKKwl3cml0ZWwobWFzaywgbWFza2FkZHIpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9yaW9uX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJvcmlvbl9pcnEiLAorCS5hY2sJCT0gb3Jpb25faXJxX21hc2ssCisJLm1hc2sJCT0gb3Jpb25faXJxX21hc2ssCisJLnVubWFzawkJPSBvcmlvbl9pcnFfdW5tYXNrLAorfTsKKwordm9pZCBfX2luaXQgb3Jpb25faXJxX2luaXQodW5zaWduZWQgaW50IGlycV9zdGFydCwgdm9pZCBfX2lvbWVtICptYXNrYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICogTWFzayBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkuCisJICovCisJd3JpdGVsKDAsIG1hc2thZGRyKTsKKworCS8qCisJICogUmVnaXN0ZXIgSVJRIHNvdXJjZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycSA9IGlycV9zdGFydCArIGk7CisKKwkJc2V0X2lycV9jaGlwKGlycSwgJm9yaW9uX2lycV9jaGlwKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBtYXNrYWRkcik7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9wY2llLmMgYi9hcmNoL2FybS9wbGF0LW9yaW9uL3BjaWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmZkYTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9wY2llLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9yaW9uL3BjaWUuYworICoKKyAqIE1hcnZlbGwgT3Jpb24gU29DIFBDSWUgaGFuZGxpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1vcmlvbi9wY2llLmg+CisKKy8qCisgKiBQQ0llIHVuaXQgcmVnaXN0ZXIgb2Zmc2V0cy4KKyAqLworI2RlZmluZSBQQ0lFX0RFVl9JRF9PRkYJCTB4MDAwMAorI2RlZmluZSBQQ0lFX0NNRF9PRkYJCTB4MDAwNAorI2RlZmluZSBQQ0lFX0RFVl9SRVZfT0ZGCTB4MDAwOAorI2RlZmluZSBQQ0lFX0JBUl9MT19PRkYobikJKDB4MDAxMCArICgobikgPDwgMykpCisjZGVmaW5lIFBDSUVfQkFSX0hJX09GRihuKQkoMHgwMDE0ICsgKChuKSA8PCAzKSkKKyNkZWZpbmUgUENJRV9IRUFERVJfTE9HXzRfT0ZGCTB4MDEyOAorI2RlZmluZSBQQ0lFX0JBUl9DVFJMX09GRihuKQkoMHgxODA0ICsgKChuIC0gMSkgKiA0KSkKKyNkZWZpbmUgUENJRV9XSU4wNF9DVFJMX09GRihuKQkoMHgxODIwICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgUENJRV9XSU4wNF9CQVNFX09GRihuKQkoMHgxODI0ICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgUENJRV9XSU4wNF9SRU1BUF9PRkYobikJKDB4MTgyYyArICgobikgPDwgNCkpCisjZGVmaW5lIFBDSUVfV0lONV9DVFJMX09GRgkweDE4ODAKKyNkZWZpbmUgUENJRV9XSU41X0JBU0VfT0ZGCTB4MTg4NAorI2RlZmluZSBQQ0lFX1dJTjVfUkVNQVBfT0ZGCTB4MTg4YworI2RlZmluZSBQQ0lFX0NPTkZfQUREUl9PRkYJMHgxOGY4CisjZGVmaW5lICBQQ0lFX0NPTkZfQUREUl9FTgkJMHg4MDAwMDAwMAorI2RlZmluZSAgUENJRV9DT05GX1JFRyhyKQkJKCgoKHIpICYgMHhmMDApIDw8IDE2KSB8ICgocikgJiAweGZjKSkKKyNkZWZpbmUgIFBDSUVfQ09ORl9CVVMoYikJCSgoKGIpICYgMHhmZikgPDwgMTYpCisjZGVmaW5lICBQQ0lFX0NPTkZfREVWKGQpCQkoKChkKSAmIDB4MWYpIDw8IDExKQorI2RlZmluZSAgUENJRV9DT05GX0ZVTkMoZikJCSgoKGYpICYgMHgzKSA8PCA4KQorI2RlZmluZSBQQ0lFX0NPTkZfREFUQV9PRkYJMHgxOGZjCisjZGVmaW5lIFBDSUVfTUFTS19PRkYJCTB4MTkxMAorI2RlZmluZSBQQ0lFX0NUUkxfT0ZGCQkweDFhMDAKKyNkZWZpbmUgUENJRV9TVEFUX09GRgkJMHgxYTA0CisjZGVmaW5lICBQQ0lFX1NUQVRfREVWX09GRlMJCTIwCisjZGVmaW5lICBQQ0lFX1NUQVRfREVWX01BU0sJCTB4MWYKKyNkZWZpbmUgIFBDSUVfU1RBVF9CVVNfT0ZGUwkJOAorI2RlZmluZSAgUENJRV9TVEFUX0JVU19NQVNLCQkweGZmCisjZGVmaW5lICBQQ0lFX1NUQVRfTElOS19ET1dOCQkxCisKKwordTMyIF9faW5pdCBvcmlvbl9wY2llX2Rldl9pZCh2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJcmV0dXJuIHJlYWRsKGJhc2UgKyBQQ0lFX0RFVl9JRF9PRkYpID4+IDE2OworfQorCit1MzIgX19pbml0IG9yaW9uX3BjaWVfcmV2KHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlyZXR1cm4gcmVhZGwoYmFzZSArIFBDSUVfREVWX1JFVl9PRkYpICYgMHhmZjsKK30KKworaW50IG9yaW9uX3BjaWVfbGlua191cCh2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJcmV0dXJuICEocmVhZGwoYmFzZSArIFBDSUVfU1RBVF9PRkYpICYgUENJRV9TVEFUX0xJTktfRE9XTik7Cit9CisKK2ludCBvcmlvbl9wY2llX2dldF9sb2NhbF9idXNfbnIodm9pZCBfX2lvbWVtICpiYXNlKQoreworCXUzMiBzdGF0ID0gcmVhZGwoYmFzZSArIFBDSUVfU1RBVF9PRkYpOworCisJcmV0dXJuIChzdGF0ID4+IFBDSUVfU1RBVF9CVVNfT0ZGUykgJiBQQ0lFX1NUQVRfQlVTX01BU0s7Cit9CisKK3ZvaWQgX19pbml0IG9yaW9uX3BjaWVfc2V0X2xvY2FsX2J1c19ucih2b2lkIF9faW9tZW0gKmJhc2UsIGludCBucikKK3sKKwl1MzIgc3RhdDsKKworCXN0YXQgPSByZWFkbChiYXNlICsgUENJRV9TVEFUX09GRik7CisJc3RhdCAmPSB+KFBDSUVfU1RBVF9CVVNfTUFTSyA8PCBQQ0lFX1NUQVRfQlVTX09GRlMpOworCXN0YXQgfD0gbnIgPDwgUENJRV9TVEFUX0JVU19PRkZTOworCXdyaXRlbChzdGF0LCBiYXNlICsgUENJRV9TVEFUX09GRik7Cit9CisKKy8qCisgKiBTZXR1cCBQQ0lFIEJBUnMgYW5kIEFkZHJlc3MgRGVjb2RlIFdpbnM6CisgKiBCQVJbMCwyXSAtPiBkaXNhYmxlZCwgQkFSWzFdIC0+IGNvdmVycyBhbGwgRFJBTSBiYW5rcworICogV0lOWzAtM10gLT4gRFJBTSBiYW5rWzAtM10KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG9yaW9uX3BjaWVfc2V0dXBfd2lucyh2b2lkIF9faW9tZW0gKmJhc2UsCisJCQkJCSBzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvICpkcmFtKQoreworCXUzMiBzaXplOworCWludCBpOworCisJLyoKKwkgKiBGaXJzdCwgZGlzYWJsZSBhbmQgY2xlYXIgQkFScyBhbmQgd2luZG93cy4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDw9IDI7IGkrKykgeworCQl3cml0ZWwoMCwgYmFzZSArIFBDSUVfQkFSX0NUUkxfT0ZGKGkpKTsKKwkJd3JpdGVsKDAsIGJhc2UgKyBQQ0lFX0JBUl9MT19PRkYoaSkpOworCQl3cml0ZWwoMCwgYmFzZSArIFBDSUVfQkFSX0hJX09GRihpKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQl3cml0ZWwoMCwgYmFzZSArIFBDSUVfV0lOMDRfQ1RSTF9PRkYoaSkpOworCQl3cml0ZWwoMCwgYmFzZSArIFBDSUVfV0lOMDRfQkFTRV9PRkYoaSkpOworCQl3cml0ZWwoMCwgYmFzZSArIFBDSUVfV0lOMDRfUkVNQVBfT0ZGKGkpKTsKKwl9CisKKwl3cml0ZWwoMCwgYmFzZSArIFBDSUVfV0lONV9DVFJMX09GRik7CisJd3JpdGVsKDAsIGJhc2UgKyBQQ0lFX1dJTjVfQkFTRV9PRkYpOworCXdyaXRlbCgwLCBiYXNlICsgUENJRV9XSU41X1JFTUFQX09GRik7CisKKwkvKgorCSAqIFNldHVwIHdpbmRvd3MgZm9yIEREUiBiYW5rcy4gIENvdW50IHRvdGFsIEREUiBzaXplIG9uIHRoZSBmbHkuCisJICovCisJc2l6ZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRyYW0tPm51bV9jczsgaSsrKSB7CisJCXN0cnVjdCBtYnVzX2RyYW1fd2luZG93ICpjcyA9IGRyYW0tPmNzICsgaTsKKworCQl3cml0ZWwoY3MtPmJhc2UgJiAweGZmZmYwMDAwLCBiYXNlICsgUENJRV9XSU4wNF9CQVNFX09GRihpKSk7CisJCXdyaXRlbCgwLCBiYXNlICsgUENJRV9XSU4wNF9SRU1BUF9PRkYoaSkpOworCQl3cml0ZWwoKChjcy0+c2l6ZSAtIDEpICYgMHhmZmZmMDAwMCkgfAorCQkJKGNzLT5tYnVzX2F0dHIgPDwgOCkgfAorCQkJKGRyYW0tPm1idXNfZHJhbV90YXJnZXRfaWQgPDwgNCkgfCAxLAorCQkJCWJhc2UgKyBQQ0lFX1dJTjA0X0NUUkxfT0ZGKGkpKTsKKworCQlzaXplICs9IGNzLT5zaXplOworCX0KKworCS8qCisJICogU2V0dXAgQkFSWzFdIHRvIGFsbCBEUkFNIGJhbmtzLgorCSAqLworCXdyaXRlbChkcmFtLT5jc1swXS5iYXNlLCBiYXNlICsgUENJRV9CQVJfTE9fT0ZGKDEpKTsKKwl3cml0ZWwoMCwgYmFzZSArIFBDSUVfQkFSX0hJX09GRigxKSk7CisJd3JpdGVsKCgoc2l6ZSAtIDEpICYgMHhmZmZmMDAwMCkgfCAxLCBiYXNlICsgUENJRV9CQVJfQ1RSTF9PRkYoMSkpOworfQorCit2b2lkIF9faW5pdCBvcmlvbl9wY2llX3NldHVwKHZvaWQgX19pb21lbSAqYmFzZSwKKwkJCSAgICAgc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbSkKK3sKKwl1MTYgY21kOworCXUzMiBtYXNrOworCisJLyoKKwkgKiBQb2ludCBQQ0llIHVuaXQgTUJVUyBkZWNvZGUgd2luZG93cyB0byBEUkFNIHNwYWNlLgorCSAqLworCW9yaW9uX3BjaWVfc2V0dXBfd2lucyhiYXNlLCBkcmFtKTsKKworCS8qCisJICogTWFzdGVyICsgc2xhdmUgZW5hYmxlLgorCSAqLworCWNtZCA9IHJlYWR3KGJhc2UgKyBQQ0lFX0NNRF9PRkYpOworCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKKwljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOworCWNtZCB8PSBQQ0lfQ09NTUFORF9NQVNURVI7CisJd3JpdGV3KGNtZCwgYmFzZSArIFBDSUVfQ01EX09GRik7CisKKwkvKgorCSAqIEVuYWJsZSBpbnRlcnJ1cHQgbGluZXMgQS1ELgorCSAqLworCW1hc2sgPSByZWFkbChiYXNlICsgUENJRV9NQVNLX09GRik7CisJbWFzayB8PSAweDBmMDAwMDAwOworCXdyaXRlbChtYXNrLCBiYXNlICsgUENJRV9NQVNLX09GRik7Cit9CisKK2ludCBvcmlvbl9wY2llX3JkX2NvbmYodm9pZCBfX2lvbWVtICpiYXNlLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkgICAgICAgdTMyIGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl3cml0ZWwoUENJRV9DT05GX0JVUyhidXMtPm51bWJlcikgfAorCQlQQ0lFX0NPTkZfREVWKFBDSV9TTE9UKGRldmZuKSkgfAorCQlQQ0lFX0NPTkZfRlVOQyhQQ0lfRlVOQyhkZXZmbikpIHwKKwkJUENJRV9DT05GX1JFRyh3aGVyZSkgfCBQQ0lFX0NPTkZfQUREUl9FTiwKKwkJCWJhc2UgKyBQQ0lFX0NPTkZfQUREUl9PRkYpOworCisJKnZhbCA9IHJlYWRsKGJhc2UgKyBQQ0lFX0NPTkZfREFUQV9PRkYpOworCisJaWYgKHNpemUgPT0gMSkKKwkJKnZhbCA9ICgqdmFsID4+ICg4ICogKHdoZXJlICYgMykpKSAmIDB4ZmY7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkqdmFsID0gKCp2YWwgPj4gKDggKiAod2hlcmUgJiAzKSkpICYgMHhmZmZmOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworaW50IG9yaW9uX3BjaWVfcmRfY29uZl90bHAodm9pZCBfX2lvbWVtICpiYXNlLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJICAgdTMyIGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl3cml0ZWwoUENJRV9DT05GX0JVUyhidXMtPm51bWJlcikgfAorCQlQQ0lFX0NPTkZfREVWKFBDSV9TTE9UKGRldmZuKSkgfAorCQlQQ0lFX0NPTkZfRlVOQyhQQ0lfRlVOQyhkZXZmbikpIHwKKwkJUENJRV9DT05GX1JFRyh3aGVyZSkgfCBQQ0lFX0NPTkZfQUREUl9FTiwKKwkJCWJhc2UgKyBQQ0lFX0NPTkZfQUREUl9PRkYpOworCisJKnZhbCA9IHJlYWRsKGJhc2UgKyBQQ0lFX0NPTkZfREFUQV9PRkYpOworCisJaWYgKGJ1cy0+bnVtYmVyICE9IG9yaW9uX3BjaWVfZ2V0X2xvY2FsX2J1c19ucihiYXNlKSB8fAorCSAgICBQQ0lfRlVOQyhkZXZmbikgIT0gMCkKKwkJKnZhbCA9IHJlYWRsKGJhc2UgKyBQQ0lFX0hFQURFUl9MT0dfNF9PRkYpOworCisJaWYgKHNpemUgPT0gMSkKKwkJKnZhbCA9ICgqdmFsID4+ICg4ICogKHdoZXJlICYgMykpKSAmIDB4ZmY7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkqdmFsID0gKCp2YWwgPj4gKDggKiAod2hlcmUgJiAzKSkpICYgMHhmZmZmOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworaW50IG9yaW9uX3BjaWVfcmRfY29uZl93YSh2b2lkIF9faW9tZW0gKndhX2Jhc2UsIHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkgIHUzMiBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJKnZhbCA9IHJlYWRsKHdhX2Jhc2UgKyAoUENJRV9DT05GX0JVUyhidXMtPm51bWJlcikgfAorCQkJCVBDSUVfQ09ORl9ERVYoUENJX1NMT1QoZGV2Zm4pKSB8CisJCQkJUENJRV9DT05GX0ZVTkMoUENJX0ZVTkMoZGV2Zm4pKSB8CisJCQkJUENJRV9DT05GX1JFRyh3aGVyZSkpKTsKKworCWlmIChzaXplID09IDEpCisJCSp2YWwgPSAoKnZhbCA+PiAoOCAqICh3aGVyZSAmIDMpKSkgJiAweGZmOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJKnZhbCA9ICgqdmFsID4+ICg4ICogKHdoZXJlICYgMykpKSAmIDB4ZmZmZjsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK2ludCBvcmlvbl9wY2llX3dyX2NvbmYodm9pZCBfX2lvbWVtICpiYXNlLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkgICAgICAgdTMyIGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCWludCByZXQgPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKKwl3cml0ZWwoUENJRV9DT05GX0JVUyhidXMtPm51bWJlcikgfAorCQlQQ0lFX0NPTkZfREVWKFBDSV9TTE9UKGRldmZuKSkgfAorCQlQQ0lFX0NPTkZfRlVOQyhQQ0lfRlVOQyhkZXZmbikpIHwKKwkJUENJRV9DT05GX1JFRyh3aGVyZSkgfCBQQ0lFX0NPTkZfQUREUl9FTiwKKwkJCWJhc2UgKyBQQ0lFX0NPTkZfQUREUl9PRkYpOworCisJaWYgKHNpemUgPT0gNCkgeworCQl3cml0ZWwodmFsLCBiYXNlICsgUENJRV9DT05GX0RBVEFfT0ZGKTsKKwl9IGVsc2UgaWYgKHNpemUgPT0gMikgeworCQl3cml0ZXcodmFsLCBiYXNlICsgUENJRV9DT05GX0RBVEFfT0ZGICsgKHdoZXJlICYgMykpOworCX0gZWxzZSBpZiAoc2l6ZSA9PSAxKSB7CisJCXdyaXRlYih2YWwsIGJhc2UgKyBQQ0lFX0NPTkZfREFUQV9PRkYgKyAod2hlcmUgJiAzKSk7CisJfSBlbHNlIHsKKwkJcmV0ID0gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjUyODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL3RpbWUuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vdGltZS5jCisgKgorICogTWFydmVsbCBPcmlvbiBTb0MgdGltZXIgaGFuZGxpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogVGltZXIgMCBpcyB1c2VkIGFzIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSwgd2hpbGUgdGltZXIgMSBpcworICogdXNlZCBhcyBjbG9ja19ldmVudF9kZXZpY2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIE51bWJlciBvZiB0aW1lciB0aWNrcyBwZXIgamlmZnkuCisgKi8KK3N0YXRpYyB1MzIgdGlja3NfcGVyX2ppZmZ5OworCisKKy8qCisgKiBUaW1lciBibG9jayByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgVElNRVJfQ1RSTAkJKFRJTUVSX1ZJUlRfQkFTRSArIDB4MDAwMCkKKyNkZWZpbmUgIFRJTUVSMF9FTgkJMHgwMDAxCisjZGVmaW5lICBUSU1FUjBfUkVMT0FEX0VOCTB4MDAwMgorI2RlZmluZSAgVElNRVIxX0VOCQkweDAwMDQKKyNkZWZpbmUgIFRJTUVSMV9SRUxPQURfRU4JMHgwMDA4CisjZGVmaW5lIFRJTUVSMF9SRUxPQUQJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMTApCisjZGVmaW5lIFRJTUVSMF9WQUwJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMTQpCisjZGVmaW5lIFRJTUVSMV9SRUxPQUQJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMTgpCisjZGVmaW5lIFRJTUVSMV9WQUwJCShUSU1FUl9WSVJUX0JBU0UgKyAweDAwMWMpCisKKworLyoKKyAqIENsb2Nrc291cmNlIGhhbmRsaW5nLgorICovCitzdGF0aWMgY3ljbGVfdCBvcmlvbl9jbGtzcmNfcmVhZCh2b2lkKQoreworCXJldHVybiAweGZmZmZmZmZmIC0gcmVhZGwoVElNRVIwX1ZBTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Ugb3Jpb25fY2xrc3JjID0geworCS5uYW1lCQk9ICJvcmlvbl9jbG9ja3NvdXJjZSIsCisJLnNoaWZ0CQk9IDIwLAorCS5yYXRpbmcJCT0gMzAwLAorCS5yZWFkCQk9IG9yaW9uX2Nsa3NyY19yZWFkLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKKworCisvKgorICogQ2xvY2tldmVudCBoYW5kbGluZy4KKyAqLworc3RhdGljIGludAorb3Jpb25fY2xrZXZ0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHU7CisKKwlpZiAoZGVsdGEgPT0gMCkKKwkJcmV0dXJuIC1FVElNRTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qCisJICogQ2xlYXIgYW5kIGVuYWJsZSBjbG9ja2V2ZW50IHRpbWVyIGludGVycnVwdC4KKwkgKi8KKwl3cml0ZWwofkJSSURHRV9JTlRfVElNRVIxLCBCUklER0VfQ0FVU0UpOworCisJdSA9IHJlYWRsKEJSSURHRV9NQVNLKTsKKwl1IHw9IEJSSURHRV9JTlRfVElNRVIxOworCXdyaXRlbCh1LCBCUklER0VfTUFTSyk7CisKKwkvKgorCSAqIFNldHVwIG5ldyBjbG9ja2V2ZW50IHRpbWVyIHZhbHVlLgorCSAqLworCXdyaXRlbChkZWx0YSwgVElNRVIxX1ZBTCk7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgdGltZXIuCisJICovCisJdSA9IHJlYWRsKFRJTUVSX0NUUkwpOworCXUgPSAodSAmIH5USU1FUjFfUkVMT0FEX0VOKSB8IFRJTUVSMV9FTjsKKwl3cml0ZWwodSwgVElNRVJfQ1RSTCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK29yaW9uX2Nsa2V2dF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAobW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQykgeworCQkvKgorCQkgKiBTZXR1cCB0aW1lciB0byBmaXJlIGF0IDEvSFogaW50ZXJ2YWxzLgorCQkgKi8KKwkJd3JpdGVsKHRpY2tzX3Blcl9qaWZmeSAtIDEsIFRJTUVSMV9SRUxPQUQpOworCQl3cml0ZWwodGlja3NfcGVyX2ppZmZ5IC0gMSwgVElNRVIxX1ZBTCk7CisKKwkJLyoKKwkJICogRW5hYmxlIHRpbWVyIGludGVycnVwdC4KKwkJICovCisJCXUgPSByZWFkbChCUklER0VfTUFTSyk7CisJCXdyaXRlbCh1IHwgQlJJREdFX0lOVF9USU1FUjEsIEJSSURHRV9NQVNLKTsKKworCQkvKgorCQkgKiBFbmFibGUgdGltZXIuCisJCSAqLworCQl1ID0gcmVhZGwoVElNRVJfQ1RSTCk7CisJCXdyaXRlbCh1IHwgVElNRVIxX0VOIHwgVElNRVIxX1JFTE9BRF9FTiwgVElNRVJfQ1RSTCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRGlzYWJsZSB0aW1lci4KKwkJICovCisJCXUgPSByZWFkbChUSU1FUl9DVFJMKTsKKwkJd3JpdGVsKHUgJiB+VElNRVIxX0VOLCBUSU1FUl9DVFJMKTsKKworCQkvKgorCQkgKiBEaXNhYmxlIHRpbWVyIGludGVycnVwdC4KKwkJICovCisJCXUgPSByZWFkbChCUklER0VfTUFTSyk7CisJCXdyaXRlbCh1ICYgfkJSSURHRV9JTlRfVElNRVIxLCBCUklER0VfTUFTSyk7CisKKwkJLyoKKwkJICogQUNLIHBlbmRpbmcgdGltZXIgaW50ZXJydXB0LgorCQkgKi8KKwkJd3JpdGVsKH5CUklER0VfSU5UX1RJTUVSMSwgQlJJREdFX0NBVVNFKTsKKworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIG9yaW9uX2Nsa2V2dCA9IHsKKwkubmFtZQkJPSAib3Jpb25fdGljayIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCB8IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5zaGlmdAkJPSAzMiwKKwkucmF0aW5nCQk9IDMwMCwKKwkuY3B1bWFzawk9IENQVV9NQVNLX0NQVTAsCisJLnNldF9uZXh0X2V2ZW50CT0gb3Jpb25fY2xrZXZ0X25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gb3Jpb25fY2xrZXZ0X21vZGUsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3Qgb3Jpb25fdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwkvKgorCSAqIEFDSyB0aW1lciBpbnRlcnJ1cHQgYW5kIGNhbGwgZXZlbnQgaGFuZGxlci4KKwkgKi8KKwl3cml0ZWwofkJSSURHRV9JTlRfVElNRVIxLCBCUklER0VfQ0FVU0UpOworCW9yaW9uX2Nsa2V2dC5ldmVudF9oYW5kbGVyKCZvcmlvbl9jbGtldnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvcmlvbl90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIm9yaW9uX3RpY2siLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuaGFuZGxlcgk9IG9yaW9uX3RpbWVyX2ludGVycnVwdAorfTsKKwordm9pZCBfX2luaXQgb3Jpb25fdGltZV9pbml0KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0Y2xrKQoreworCXUzMiB1OworCisJdGlja3NfcGVyX2ppZmZ5ID0gKHRjbGsgKyBIWi8yKSAvIEhaOworCisKKwkvKgorCSAqIFNldHVwIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSB0aW1lciAoaW50ZXJydXB0cworCSAqIGRpc2FibGVkLikKKwkgKi8KKwl3cml0ZWwoMHhmZmZmZmZmZiwgVElNRVIwX1ZBTCk7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIFRJTUVSMF9SRUxPQUQpOworCXUgPSByZWFkbChCUklER0VfTUFTSyk7CisJd3JpdGVsKHUgJiB+QlJJREdFX0lOVF9USU1FUjAsIEJSSURHRV9NQVNLKTsKKwl1ID0gcmVhZGwoVElNRVJfQ1RSTCk7CisJd3JpdGVsKHUgfCBUSU1FUjBfRU4gfCBUSU1FUjBfUkVMT0FEX0VOLCBUSU1FUl9DVFJMKTsKKwlvcmlvbl9jbGtzcmMubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQodGNsaywgb3Jpb25fY2xrc3JjLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcigmb3Jpb25fY2xrc3JjKTsKKworCisJLyoKKwkgKiBTZXR1cCBjbG9ja2V2ZW50IHRpbWVyIChpbnRlcnJ1cHQtZHJpdmVuLikKKwkgKi8KKwlzZXR1cF9pcnEoaXJxLCAmb3Jpb25fdGltZXJfaXJxKTsKKwlvcmlvbl9jbGtldnQubXVsdCA9IGRpdl9zYyh0Y2xrLCBOU0VDX1BFUl9TRUMsIG9yaW9uX2Nsa2V2dC5zaGlmdCk7CisJb3Jpb25fY2xrZXZ0Lm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZSwgJm9yaW9uX2Nsa2V2dCk7CisJb3Jpb25fY2xrZXZ0Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJm9yaW9uX2Nsa2V2dCk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZvcmlvbl9jbGtldnQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYwppbmRleCA5OWE0NDc0Li5kODQxNjdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYwpAQCAtMzMyLDYgKzMzMiw1OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNHh4X2NhbGNfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgZGl2OworCisJaWYgKChyYXRlID09IDApIHx8ICFjbGstPnBhcmVudCkKKwkJcmV0dXJuIDA7CisKKwlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKKwlpZiAoZGl2IDwgMikKKwkJZGl2ID0gMjsKKwllbHNlIGlmIChkaXYgPiAxNikKKwkJZGl2ID0gMTY7CisKKwlyZXR1cm4gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNHh4X3JvdW5kX2RjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCisJdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgZGl2ID0gczNjMjR4eF9jYWxjX2RpdihjbGssIHJhdGUpOworCisJaWYgKGRpdiA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfc2V0X2RjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2ssIGRhdGEsIGRpdiA9IHMzYzI0eHhfY2FsY19kaXYoY2xrLCByYXRlKTsKKworCWlmIChkaXYgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2xrID09ICZzM2MyNHh4X2RjbGswKSB7CisJCW1hc2sgPSBTM0MyNDEwX0RDTEtDT05fRENMSzBfRElWX01BU0sgfAorCQkJUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0NNUF9NQVNLOworCQlkYXRhID0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVihkaXYpIHwKKwkJCVMzQzI0MTBfRENMS0NPTl9EQ0xLMF9DTVAoKGRpdiArIDEpIC8gMik7CisJfSBlbHNlIGlmIChjbGsgPT0gJnMzYzI0eHhfZGNsazEpIHsKKwkJbWFzayA9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9ESVZfTUFTSyB8CisJCQlTM0MyNDEwX0RDTEtDT05fRENMSzFfQ01QX01BU0s7CisJCWRhdGEgPSBTM0MyNDEwX0RDTEtDT05fRENMSzFfRElWKGRpdikgfAorCQkJUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUCgoZGl2ICsgMSkgLyAyKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGstPnJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworCV9fcmF3X3dyaXRlbCgoKF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTikgJiB+bWFzaykgfCBkYXRhKSwKKwkJUzNDMjRYWF9EQ0xLQ09OKTsKKwlyZXR1cm4gY2xrLT5yYXRlOworfQogCiBzdGF0aWMgaW50IHMzYzI0eHhfY2xrb3V0X3NldHBhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKQEAgLTM3OCw2ICs0MzAsOCBAQAogCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4sCiAJLmVuYWJsZQkgICAgICAgID0gczNjMjR4eF9kY2xrX2VuYWJsZSwKIAkuc2V0X3BhcmVudAk9IHMzYzI0eHhfZGNsa19zZXRwYXJlbnQsCisJLnNldF9yYXRlCT0gczNjMjR4eF9zZXRfZGNsa19yYXRlLAorCS5yb3VuZF9yYXRlCT0gczNjMjR4eF9yb3VuZF9kY2xrX3JhdGUsCiB9OwogCiBzdHJ1Y3QgY2xrIHMzYzI0eHhfZGNsazEgPSB7CkBAIC0zODYsNiArNDQwLDggQEAKIAkuY3RybGJpdAk9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOLAogCS5lbmFibGUJCT0gczNjMjR4eF9kY2xrX2VuYWJsZSwKIAkuc2V0X3BhcmVudAk9IHMzYzI0eHhfZGNsa19zZXRwYXJlbnQsCisJLnNldF9yYXRlCT0gczNjMjR4eF9zZXRfZGNsa19yYXRlLAorCS5yb3VuZF9yYXRlCT0gczNjMjR4eF9yb3VuZF9kY2xrX3JhdGUsCiB9OwogCiBzdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwppbmRleCBmNTEzYWIwLi5mNTY5OWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCkBAIC0yOCwxNSArMjgsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c3RlbS1yZXNldC5oPgorCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CiAKQEAgLTIwMyw2ICsyMDcsMjcgQEAKICNlbmRpZgogfQogCisvKiBIb29rIGZvciBhcm1fcG1fcmVzdGFydCB0byBlbnN1cmUgd2UgZXhlY3V0ZSB0aGUgcmVzZXQgY29kZQorICogd2l0aCB0aGUgY2FjaGVzIGVuYWJsZWQuIEl0IHNlZW1zIGF0IGxlYXN0IHRoZSBTM0MyNDQwIGhhcyBhIHByb2JsZW0KKyAqIHJlc2V0dGluZyBpZiB0aGVyZSBpcyBidXMgYWN0aXZpdHkgaW50ZXJydXB0ZWQgYnkgdGhlIHJlc2V0LgorICovCitzdGF0aWMgdm9pZCBzM2MyNHh4X3BtX3Jlc3RhcnQoY2hhciBtb2RlKQoreworCWlmIChtb2RlICE9ICdzJykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJX19jcHVjX2ZsdXNoX2tlcm5fYWxsKCk7CisJCV9fY3B1Y19mbHVzaF91c2VyX2FsbCgpOworCisJCWFyY2hfcmVzZXQobW9kZSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKKwkvKiBmYWxsYmFjaywgb3IgdW5oYW5kbGVkICovCisJYXJtX21hY2hpbmVfcmVzdGFydChtb2RlKTsKK30KKwogdm9pZCBfX2luaXQgczNjMjR4eF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGlkY29kZSA9IDB4MDsKQEAgLTIzMCw2ICsyNTUsOCBAQAogCQlwYW5pYygiVW5zdXBwb3J0ZWQgUzNDMjRYWCBDUFUiKTsKIAl9CiAKKwlhcm1fcG1fcmVzdGFydCA9IHMzYzI0eHhfcG1fcmVzdGFydDsKKwogCShjcHUtPm1hcF9pbykobWFjaF9kZXNjLCBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCmluZGV4IGFjOWZmMTYuLjYwZjE2MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKQEAgLTEzMCw4ICsxMzAsOCBAQAogCWRtYWRiZ19kdW1wcmVncyhmbmFtZSwgbGluZSwgY2hhbiwgJnN0YXRlKTsKIH0KIAotI2RlZmluZSBkYmdfc2hvd3JlZ3MoY2hhbikgZG1hZGJnX3Nob3dyZWdzKF9fRlVOQ1RJT05fXywgX19MSU5FX18sIChjaGFuKSkKLSNkZWZpbmUgZGJnX3Nob3djaGFuKGNoYW4pIGRtYWRiZ19zaG93Y2hhbihfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAoY2hhbikpCisjZGVmaW5lIGRiZ19zaG93cmVncyhjaGFuKSBkbWFkYmdfc2hvd3JlZ3MoX19mdW5jX18sIF9fTElORV9fLCAoY2hhbikpCisjZGVmaW5lIGRiZ19zaG93Y2hhbihjaGFuKSBkbWFkYmdfc2hvd2NoYW4oX19mdW5jX18sIF9fTElORV9fLCAoY2hhbikpCiAjZWxzZQogI2RlZmluZSBkYmdfc2hvd3JlZ3MoY2hhbikgZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIGRiZ19zaG93Y2hhbihjaGFuKSBkbyB7IH0gd2hpbGUoMCkKQEAgLTQwMyw3ICs0MDMsNyBAQAogCiAJCQlpZiAoczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoY2hhbiwgX19MSU5FX18pID09IDApIHsKIAkJCQlwcl9kZWJ1ZygiJXM6IGJ1ZmYgbm90IHlldCBsb2FkZWQsIG5vIG1vcmUgdG9kb1xuIiwKLQkJCQkJIF9fRlVOQ1RJT05fXyk7CisJCQkJCSBfX2Z1bmNfXyk7CiAJCQl9IGVsc2UgewogCQkJCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkc7CiAJCQkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKQEAgLTQ2MywxNiArNDYzLDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJfZGVidWcoIiVzOiBpZD0lcCwgZGF0YT0lMDh4LCBzaXplPSVkXG4iLAotCQkgX19GVU5DVElPTl9fLCBpZCwgKHVuc2lnbmVkIGludClkYXRhLCBzaXplKTsKKwkJIF9fZnVuY19fLCBpZCwgKHVuc2lnbmVkIGludClkYXRhLCBzaXplKTsKIAogCWJ1ZiA9IGttZW1fY2FjaGVfYWxsb2MoZG1hX2ttZW0sIEdGUF9BVE9NSUMpOwogCWlmIChidWYgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygiJXM6IG91dCBvZiBtZW1vcnkgKCVsZCBhbGxvYylcbiIsCi0JCQkgX19GVU5DVElPTl9fLCAobG9uZylzaXplb2YoKmJ1ZikpOworCQkJIF9fZnVuY19fLCAobG9uZylzaXplb2YoKmJ1ZikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvL3ByX2RlYnVnKCIlczogbmV3IGJ1ZmZlciAlcFxuIiwgX19GVU5DVElPTl9fLCBidWYpOworCS8vcHJfZGVidWcoIiVzOiBuZXcgYnVmZmVyICVwXG4iLCBfX2Z1bmNfXywgYnVmKTsKIAkvL2RiZ19zaG93Y2hhbihjaGFuKTsKIAogCWJ1Zi0+bmV4dCAgPSBOVUxMOwpAQCAtNDg2LDE4ICs0ODYsMTggQEAKIAlpZiAoY2hhbi0+Y3VyciA9PSBOVUxMKSB7CiAJCS8qIHdlJ3ZlIGdvdCBub3RoaW5nIGxvYWRlZC4uLiAqLwogCQlwcl9kZWJ1ZygiJXM6IGJ1ZmZlciAlcCBxdWV1ZWQgb250byBlbXB0eSBjaGFubmVsXG4iLAotCQkJIF9fRlVOQ1RJT05fXywgYnVmKTsKKwkJCSBfX2Z1bmNfXywgYnVmKTsKIAogCQljaGFuLT5jdXJyID0gYnVmOwogCQljaGFuLT5lbmQgID0gYnVmOwogCQljaGFuLT5uZXh0ID0gTlVMTDsKIAl9IGVsc2UgewogCQlwcl9kZWJ1ZygiZG1hJWQ6ICVzOiBidWZmZXIgJXAgcXVldWVkIG9udG8gbm9uLWVtcHR5IGNoYW5uZWxcbiIsCi0JCQkgY2hhbi0+bnVtYmVyLCBfX0ZVTkNUSU9OX18sIGJ1Zik7CisJCQkgY2hhbi0+bnVtYmVyLCBfX2Z1bmNfXywgYnVmKTsKIAogCQlpZiAoY2hhbi0+ZW5kID09IE5VTEwpCiAJCQlwcl9kZWJ1ZygiZG1hJWQ6ICVzOiAlcCBub3QgZW1wdHksIGFuZCBjaGFuLT5lbmQ9PU5VTEw/XG4iLAotCQkJCSBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXywgY2hhbik7CisJCQkJIGNoYW4tPm51bWJlciwgX19mdW5jX18sIGNoYW4pOwogCiAJCWNoYW4tPmVuZC0+bmV4dCA9IGJ1ZjsKIAkJY2hhbi0+ZW5kID0gYnVmOwpAQCAtNTcyLDcgKzU3Miw3IEBACiAJCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgewogCQkJCS8qIGZsYWcgZXJyb3I/ICovCiAJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvYWQgKCVzKVxuIiwKLQkJCSAgICAgICBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgICAgY2hhbi0+bnVtYmVyLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC02NTgsNyArNjU4LDcgQEAKIAogCQlpZiAoYnVmLT5tYWdpYyAhPSBCVUZfTUFHSUMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6ICVzOiBidWYgJXAgaW5jb3JyZWN0IG1hZ2ljXG4iLAotCQkJICAgICAgIGNoYW4tPm51bWJlciwgX19GVU5DVElPTl9fLCBidWYpOworCQkJICAgICAgIGNoYW4tPm51bWJlciwgX19mdW5jX18sIGJ1Zik7CiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCX0KIApAQCAtNjkyLDcgKzY5Miw3IEBACiAJCQlpZiAoczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoY2hhbiwgX19MSU5FX18pID09IDApIHsKIAkJCQkvKiBmbGFnIGVycm9yPyAqLwogCQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRpbWVvdXQgd2FpdGluZyBmb3IgbG9hZCAoJXMpXG4iLAotCQkJCSAgICAgICBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICAgIGNoYW4tPm51bWJlciwgX19mdW5jX18pOwogCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCX0KIApAQCAtNzU5LDcgKzc1OSw3IEBACiAKIAlpZiAoIWNoYW4tPmlycV9jbGFpbWVkKSB7CiAJCXByX2RlYnVnKCJkbWElZDogJXMgOiByZXF1ZXN0aW5nIGlycSAlZFxuIiwKLQkJCSBjaGFubmVsLCBfX0ZVTkNUSU9OX18sIGNoYW4tPmlycSk7CisJCQkgY2hhbm5lbCwgX19mdW5jX18sIGNoYW4tPmlycSk7CiAKIAkJY2hhbi0+aXJxX2NsYWltZWQgPSAxOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC03ODYsNyArNzg2LDcgQEAKIAogCS8qIG5lZWQgdG8gc2V0dXAgKi8KIAotCXByX2RlYnVnKCIlczogY2hhbm5lbCBpbml0aWFsaXNlZCwgJXBcbiIsIF9fRlVOQ1RJT05fXywgY2hhbik7CisJcHJfZGVidWcoIiVzOiBjaGFubmVsIGluaXRpYWxpc2VkLCAlcFxuIiwgX19mdW5jX18sIGNoYW4pOwogCiAJcmV0dXJuIGNoYW4tPm51bWJlciB8IERNQUNIX0xPV19MRVZFTDsKIH0KQEAgLTgyMyw3ICs4MjMsNyBAQAogCiAJaWYgKGNoYW4tPnN0YXRlICE9IFMzQzI0MTBfRE1BX0lETEUpIHsKIAkJcHJfZGVidWcoIiVzOiBuZWVkIHRvIHN0b3AgZG1hIGNoYW5uZWwgJXBcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoYW4pOworCQkgICAgICAgX19mdW5jX18sIGNoYW4pOwogCiAJCS8qIHBvc3NpYmx5IGZsdXNoIHRoZSBjaGFubmVsICovCiAJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKQEAgLTg1Miw3ICs4NTIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKLQlwcl9kZWJ1ZygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlczpcbiIsIF9fZnVuY19fKTsKIAogCWRiZ19zaG93Y2hhbihjaGFuKTsKIApAQCAtOTA3LDE0ICs5MDcsMTQgQEAKIAlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWYsICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwcl9kZWJ1ZygiJXM6IGNoYW4gJXAgKCVkKVxuIiwgX19GVU5DVElPTl9fLCBjaGFuLCBjaGFuLT5udW1iZXIpOworCXByX2RlYnVnKCIlczogY2hhbiAlcCAoJWQpXG4iLCBfX2Z1bmNfXywgY2hhbiwgY2hhbi0+bnVtYmVyKTsKIAogCWRiZ19zaG93Y2hhbihjaGFuKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCWlmIChjaGFuLT5zdGF0ZSAhPSBTM0MyNDEwX0RNQV9JRExFKSB7Ci0JCXByX2RlYnVnKCIlczogc3RvcHBpbmcgY2hhbm5lbC4uLlxuIiwgX19GVU5DVElPTl9fICk7CisJCXByX2RlYnVnKCIlczogc3RvcHBpbmcgY2hhbm5lbC4uLlxuIiwgX19mdW5jX18gKTsKIAkJczNjMjQxMF9kbWFfY3RybChjaGFuLT5udW1iZXIsIFMzQzI0MTBfRE1BT1BfU1RPUCk7CiAJfQogCkBAIC05MjksNyArOTI5LDcgQEAKIAkJCW5leHQgPSBidWYtPm5leHQ7CiAKIAkJCXByX2RlYnVnKCIlczogZnJlZSBidWZmZXIgJXAsIG5leHQgJXBcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBidWYsIGJ1Zi0+bmV4dCk7CisJCQkgICAgICAgX19mdW5jX18sIGJ1ZiwgYnVmLT5uZXh0KTsKIAogCQkJczNjMjQxMF9kbWFfYnVmZmRvbmUoY2hhbiwgYnVmLCBTM0MyNDEwX1JFU19BQk9SVCk7CiAJCQlzM2MyNDEwX2RtYV9mcmVlYnVmKGJ1Zik7CkBAIC05NzYsNyArOTc2LDcgQEAKIAogCQkJaWYgKHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKGNoYW4sIF9fTElORV9fKSA9PSAwKSB7CiAJCQkJcHJfZGVidWcoIiVzOiBidWZmIG5vdCB5ZXQgbG9hZGVkLCBubyBtb3JlIHRvZG9cbiIsCi0JCQkJCSBfX0ZVTkNUSU9OX18pOworCQkJCQkgX19mdW5jX18pOwogCQkJfSBlbHNlIHsKIAkJCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HOwogCQkJCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7CkBAIC0xMDUwLDE2ICsxMDUwLDE2IEBACiAJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7CiAKIAlwcl9kZWJ1ZygiJXM6IGNoYW49JWQsIHhmZXJfdW5pdD0lZCwgZGNvbj0lMDh4XG4iLAotCQkgX19GVU5DVElPTl9fLCBjaGFubmVsLCB4ZmVydW5pdCwgZGNvbik7CisJCSBfX2Z1bmNfXywgY2hhbm5lbCwgeGZlcnVuaXQsIGRjb24pOwogCiAJaWYgKGNoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwcl9kZWJ1ZygiJXM6IEluaXRpYWwgZGNvbiBpcyAlMDh4XG4iLCBfX0ZVTkNUSU9OX18sIGRjb24pOworCXByX2RlYnVnKCIlczogSW5pdGlhbCBkY29uIGlzICUwOHhcbiIsIF9fZnVuY19fLCBkY29uKTsKIAogCWRjb24gfD0gY2hhbi0+ZGNvbiAmIGRtYV9zZWwuZGNvbl9tYXNrOwogCi0JcHJfZGVidWcoIiVzOiBOZXcgZGNvbiBpcyAlMDh4XG4iLCBfX0ZVTkNUSU9OX18sIGRjb24pOworCXByX2RlYnVnKCIlczogTmV3IGRjb24gaXMgJTA4eFxuIiwgX19mdW5jX18sIGRjb24pOwogCiAJc3dpdGNoICh4ZmVydW5pdCkgewogCWNhc2UgMToKQEAgLTEwNzUsMTQgKzEwNzUsMTQgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiJXM6IGJhZCB0cmFuc2ZlciBzaXplICVkXG4iLCBfX0ZVTkNUSU9OX18sIHhmZXJ1bml0KTsKKwkJcHJfZGVidWcoIiVzOiBiYWQgdHJhbnNmZXIgc2l6ZSAlZFxuIiwgX19mdW5jX18sIHhmZXJ1bml0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZGNvbiB8PSBTM0MyNDEwX0RDT05fSFdUUklHOwogCWRjb24gfD0gUzNDMjQxMF9EQ09OX0lOVFJFUTsKIAotCXByX2RlYnVnKCIlczogZGNvbiBub3cgJTA4eFxuIiwgX19GVU5DVElPTl9fLCBkY29uKTsKKwlwcl9kZWJ1ZygiJXM6IGRjb24gbm93ICUwOHhcbiIsIF9fZnVuY19fLCBkY29uKTsKIAogCWNoYW4tPmRjb24gPSBkY29uOwogCWNoYW4tPnhmZXJfdW5pdCA9IHhmZXJ1bml0OwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAlpZiAoY2hhbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXByX2RlYnVnKCIlczogY2hhbj0lcCwgZmxhZ3M9JTA4eFxuIiwgX19GVU5DVElPTl9fLCBjaGFuLCBmbGFncyk7CisJcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBmbGFncz0lMDh4XG4iLCBfX2Z1bmNfXywgY2hhbiwgZmxhZ3MpOwogCiAJY2hhbi0+ZmxhZ3MgPSBmbGFnczsKIApAQCAtMTEyMCw3ICsxMTIwLDcgQEAKIAlpZiAoY2hhbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXByX2RlYnVnKCIlczogY2hhbj0lcCwgb3AgcnRuPSVwXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIHJ0bik7CisJcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBvcCBydG49JXBcbiIsIF9fZnVuY19fLCBjaGFuLCBydG4pOwogCiAJY2hhbi0+b3BfZm4gPSBydG47CiAKQEAgLTExMzYsNyArMTEzNiw3IEBACiAJaWYgKGNoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwcl9kZWJ1ZygiJXM6IGNoYW49JXAsIGNhbGxiYWNrIHJ0bj0lcFxuIiwgX19GVU5DVElPTl9fLCBjaGFuLCBydG4pOworCXByX2RlYnVnKCIlczogY2hhbj0lcCwgY2FsbGJhY2sgcnRuPSVwXG4iLCBfX2Z1bmNfXywgY2hhbiwgcnRuKTsKIAogCWNoYW4tPmNhbGxiYWNrX2ZuID0gcnRuOwogCkBAIC0xMTcwLDcgKzExNzAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCIlczogc291cmNlPSVkLCBod2NmZz0lMDh4LCBkZXZhZGRyPSUwOGx4XG4iLAotCQkgX19GVU5DVElPTl9fLCAoaW50KXNvdXJjZSwgaHdjZmcsIGRldmFkZHIpOworCQkgX19mdW5jX18sIChpbnQpc291cmNlLCBod2NmZywgZGV2YWRkcik7CiAKIAljaGFuLT5zb3VyY2UgPSBzb3VyY2U7CiAJY2hhbi0+ZGV2X2FkZHIgPSBkZXZhZGRyOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKIAljYXNlIFMzQzI0MTBfRE1BU1JDX0hXOgogCQkvKiBzb3VyY2UgaXMgaGFyZHdhcmUgKi8KIAkJcHJfZGVidWcoIiVzOiBodyBzb3VyY2UsIGRldmFkZHI9JTA4bHgsIGh3Y2ZnPSVkXG4iLAotCQkJIF9fRlVOQ1RJT05fXywgZGV2YWRkciwgaHdjZmcpOworCQkJIF9fZnVuY19fLCBkZXZhZGRyLCBod2NmZyk7CiAJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESVNSQ0MsIGh3Y2ZnICYgMyk7CiAJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESVNSQywgIGRldmFkZHIpOwogCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElEU1RDLCAoMDw8MSkgfCAoMDw8MCkpOwpAQCAtMTE5MCw4ICsxMTkwLDggQEAKIAogCWNhc2UgUzNDMjQxMF9ETUFTUkNfTUVNOgogCQkvKiBzb3VyY2UgaXMgbWVtb3J5ICovCi0JCXByX2RlYnVnKCAiJXM6IG1lbSBzb3VyY2UsIGRldmFkZHI9JTA4bHgsIGh3Y2ZnPSVkXG4iLAotCQkJICBfX0ZVTkNUSU9OX18sIGRldmFkZHIsIGh3Y2ZnKTsKKwkJcHJfZGVidWcoIiVzOiBtZW0gc291cmNlLCBkZXZhZGRyPSUwOGx4LCBod2NmZz0lZFxuIiwKKwkJCSBfX2Z1bmNfXywgZGV2YWRkciwgaHdjZmcpOwogCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElTUkNDLCAoMDw8MSkgfCAoMDw8MCkpOwogCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElEU1QsICBkZXZhZGRyKTsKIAkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJRFNUQywgaHdjZmcgJiAzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDdlZDU4YzAuLjIwN2E4YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IFNhdCBKYW4gMjYgMTQ6NDU6MzQgMjAwOAorIyBMYXN0IHVwZGF0ZTogU2F0IEFwciAxOSAxMToyMzozOCAyMDA4CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTM4MSwxMyArMzgxLDEzIEBACiBzZTQwMDAJCQlBUkNIX1NFNDAwMAkJU0U0MDAwCQkJMzY0CiBxdWFkcmljZXBzCQlBUkNIX1FVQURSSUNFUFMJCVFVQURSSUNFUFMJCTM2NQogYnJvbmNvCQkJQVJDSF9CUk9OQ08JCUJST05DTwkJCTM2NgotZXNsX3dpcmVsZXNzX3RhYglBUkNIX0VTTF9XSVJFTEVTU19UQUJMRVRFU0xfV0lSRUxFU1NfVEFCTEVUCTM2NworZXNsX3dpcmVsZXNzX3RhYglBUkNIX0VTTF9XSVJFTEVTU19UQUIJRVNMX1dJUkVMRVNTX1RBQgkzNjcKIGVzbF9zb2Zjb21wCQlBUkNIX0VTTF9TT0ZDT01QCUVTTF9TT0ZDT01QCQkzNjgKIHM1YzczNzUJCQlBUkNIX1M1QzczNzUJCVM1QzczNzUJCQkzNjkKIHNwZWFyaGVhZAkJQVJDSF9TUEVBUkhFQUQJCVNQRUFSSEVBRAkJMzcwCiBwYW50ZXJhCQkJQVJDSF9QQU5URVJBCQlQQU5URVJBCQkJMzcxCiBwcmF5b2dsaXRlCQlBUkNIX1BSQVlPR0xJVEUJCVBSQVlPR0xJVEUJCTM3MgotZ3Vtc3RpeAkJCUFSQ0hfR1VNU1RJSwkJR1VNU1RJSwkJCTM3MworZ3Vtc3RpeAkJCUFSQ0hfR1VNU1RJWAkJR1VNU1RJWAkJCTM3MwogcmN1YmUJCQlBUkNIX1JDVUJFCQlSQ1VCRQkJCTM3NAogcmVhX29sdgkJCUFSQ0hfUkVBX09MVgkJUkVBX09MVgkJCTM3NQogcHhhX2lwaG9uZQkJQVJDSF9QWEFfSVBIT05FCQlQWEFfSVBIT05FCQkzNzYKQEAgLTE0NjMsNyArMTQ2Myw3IEBACiBodGN0aXRhbgkJTUFDSF9IVENUSVRBTgkJSFRDVElUQU4JCTE0NjMKIHFyYW5pdW0JCQlNQUNIX1FSQU5JVU0JCVFSQU5JVU0JCQkxNDY0CiBhZHhfd3NjMgkJTUFDSF9BRFhfV1NDMgkJQURYX1dTQzIJCTE0NjUKLWFkeF9tZWRpbmV0CQlNQUNIX0FEWF9NRURJTkVUCUFEWF9NRURJTkVUCQkxNDY2CithZHhfbWVkY29tCQlNQUNIX0FEWF9NRURJTkVUCUFEWF9NRURJTkVUCQkxNDY2CiBiYm9hcmQJCQlNQUNIX0JCT0FSRAkJQkJPQVJECQkJMTQ2NwogY2FtYnJpYQkJCU1BQ0hfQ0FNQlJJQQkJQ0FNQlJJQQkJCTE0NjgKIG10N3h4eAkJCU1BQ0hfTVQ3WFhYCQlNVDdYWFgJCQkxNDY5CkBAIC0xNjExLDMgKzE2MTEsMTEyIEBACiBtdDcxMDgJCQlNQUNIX01UNzEwOAkJTVQ3MTA4CQkJMTYxMwogc210cjI0NDAJCU1BQ0hfU01UUjI0NDAJCVNNVFIyNDQwCQkxNjE0CiBtYW5hbwkJCU1BQ0hfTUFOQU8JCU1BTkFPCQkJMTYxNQorY21feDMwMAkJCU1BQ0hfQ01fWDMwMAkJQ01fWDMwMAkJCTE2MTYKK2d1bGZzdHJlYW1fa3AJCU1BQ0hfR1VMRlNUUkVBTV9LUAlHVUxGU1RSRUFNX0tQCQkxNjE3CitsYW5yZWFkeWZuNTIyCQlNQUNIX0xBTlJFQURZRk41MjIJTEFOUkVBRFlGTjUyMgkJMTYxOAorYXJtYTM3CQkJTUFDSF9BUk1BMzcJCUFSTUEzNwkJCTE2MTkKK21lbmRlbAkJCU1BQ0hfTUVOREVMCQlNRU5ERUwJCQkxNjIwCitwZWxjb19pbGlhZAkJTUFDSF9QRUxDT19JTElBRAlQRUxDT19JTElBRAkJMTYyMQordW5pdDJwCQkJTUFDSF9VTklUMlAJCVVOSVQyUAkJCTE2MjIKK2luYzIwb3R0ZXIJCU1BQ0hfSU5DMjBPVFRFUgkJSU5DMjBPVFRFUgkJMTYyMworYXQ5MXNhbTlnMjBlawkJTUFDSF9BVDkxU0FNOUcyMEVLCUFUOTFTQU05RzIwRUsJCTE2MjQKK3NjX2dlMgkJCU1BQ0hfU1RPUkNFTlRFUgkJU1RPUkNFTlRFUgkJMTYyNQorc21kazY0MTAJCU1BQ0hfU01ESzY0MTAJCVNNREs2NDEwCQkxNjI2Cit1MzAwCQkJTUFDSF9VMzAwCQlVMzAwCQkJMTYyNwordTUwMAkJCU1BQ0hfVTUwMAkJVTUwMAkJCTE2MjgKK2RzOTI2MAkJCU1BQ0hfRFM5MjYwCQlEUzkyNjAJCQkxNjI5CityaXZlcnJvY2sJCU1BQ0hfUklWRVJST0NLCQlSSVZFUlJPQ0sJCTE2MzAKK3NjaWJhdGgJCQlNQUNIX1NDSUJBVEgJCVNDSUJBVEgJCQkxNjMxCithdDkxc2FtN3NlCQlNQUNIX0FUOTFTQU03U0U1MTJFSwlBVDkxU0FNN1NFNTEyRUsJCTE2MzIKK3dydDM1MG5fdjIJCU1BQ0hfV1JUMzUwTl9WMgkJV1JUMzUwTl9WMgkJMTYzMworbXVsdGltZWRpYQkJTUFDSF9NVUxUSU1FRElBCQlNVUxUSU1FRElBCQkxNjM0CittYXJ2aW4JCQlNQUNIX01BUlZJTgkJTUFSVklOCQkJMTYzNQoreDUwMAkJCU1BQ0hfWDUwMAkJWDUwMAkJCTE2MzYKK2F3bHVnNGxjdQkJTUFDSF9BV0xVRzRMQ1UJCUFXTFVHNExDVQkJMTYzNworcGFsZXJtb2MJCU1BQ0hfUEFMRVJNT0MJCVBBTEVSTU9DCQkxNjM4CitvbWFwX2xkcAkJTUFDSF9PTUFQX0xEUAkJT01BUF9MRFAJCTE2MzkKK2lwNTAwCQkJTUFDSF9JUDUwMAkJSVA1MDAJCQkxNjQwCitteDM1YWRzCQkJTUFDSF9NQUNIX01YMzVBRFMJTUFDSF9NWDM1QURTCQkxNjQxCithc2UyCQkJTUFDSF9BU0UyCQlBU0UyCQkJMTY0MgorbXgzNWV2YgkJCU1BQ0hfTVgzNUVWQgkJTVgzNUVWQgkJCTE2NDMKK2FtbF9tODA1MAkJTUFDSF9BTUxfTTgwNTAJCUFNTF9NODA1MAkJMTY0NAorbXgzNV8zZHMJCU1BQ0hfTVgzNV8zRFMJCU1YMzVfM0RTCQkxNjQ1CittYXJzCQkJTUFDSF9NQVJTCQlNQVJTCQkJMTY0NgorbnRvc2RfNjQ0eGEJCU1BQ0hfTlRPU0RfNjQ0WEEJTlRPU0RfNjQ0WEEJCTE2NDcKK2JhZGdlcgkJCU1BQ0hfQkFER0VSCQlCQURHRVIJCQkxNjQ4Cit0cml6ZXBzNHdsCQlNQUNIX1RSSVpFUFM0V0wJCVRSSVpFUFM0V0wJCTE2NDkKK3RyaXplcHM1CQlNQUNIX1RSSVpFUFM1CQlUUklaRVBTNQkJMTY1MAorbWFybGluCQkJTUFDSF9NQVJMSU4JCU1BUkxJTgkJCTE2NTEKK3RzNzgwMAkJCU1BQ0hfVFM3ODAwCQlUUzc4MDAJCQkxNjUyCitocGlwYXEyMTQJCU1BQ0hfSFBJUEFRMjE0CQlIUElQQVEyMTQJCTE2NTMKK2F0NTcyZDk0MGRjbQkJTUFDSF9BVDU3MkQ5NDBEQ00JQVQ1NzJEOTQwRENNCQkxNjU0CituZTFib2FyZAkJTUFDSF9ORTFCT0FSRAkJTkUxQk9BUkQJCTE2NTUKK3phbnRlCQkJTUFDSF9aQU5URQkJWkFOVEUJCQkxNjU2CitzZmZzZHIJCQlNQUNIX1NGRlNEUgkJU0ZGU0RSCQkJMTY1NwordHcyNjYyCQkJTUFDSF9UVzI2NjIJCVRXMjY2MgkJCTE2NTgKK3ZmMTB4eAkJCU1BQ0hfVkYxMFhYCQlWRjEwWFgJCQkxNjU5Cit6b3JhbjQzeHgJCU1BQ0hfWk9SQU40M1hYCQlaT1JBTjQzWFgJCTE2NjAKK3Nvbml4OTI2CQlNQUNIX1NPTklYOTI2CQlTT05JWDkyNgkJMTY2MQorY2VsZXN0aWFsc2VtaQkJTUFDSF9DRUxFU1RJQUxTRU1JCUNFTEVTVElBTFNFTUkJCTE2NjIKK2NjOW0yNDQzCQlNQUNIX0NDOU0yNDQzCQlDQzlNMjQ0MwkJMTY2MwordHc1MzM0CQkJTUFDSF9UVzUzMzQJCVRXNTMzNAkJCTE2NjQKK29tYXBfaHRjYXJ0ZW1pcwkJTUFDSF9IVENBUlRFTUlTCQlIVENBUlRFTUlTCQkxNjY1CituYWxfaGxpdGUJCU1BQ0hfTkFMX0hMSVRFCQlOQUxfSExJVEUJCTE2NjYKK2h0Y3ZvZ3VlCQlNQUNIX0hUQ1ZPR1VFCQlIVENWT0dVRQkJMTY2Nworc21hcnR3ZWIJCU1BQ0hfU01BUlRXRUIJCVNNQVJUV0VCCQkxNjY4Cittdjg2eHgJCQlNQUNIX01WODZYWAkJTVY4NlhYCQkJMTY2OQorbXY4N3h4CQkJTUFDSF9NVjg3WFgJCU1WODdYWAkJCTE2NzAKK3Nvbmd5b3VuZ2hvCQlNQUNIX1NPTkdZT1VOR0hPCVNPTkdZT1VOR0hPCQkxNjcxCit5b3VuZ2hvdGVtYQkJTUFDSF9ZT1VOR0hPVEVNQQlZT1VOR0hPVEVNQQkJMTY3MgorcGNtMDM3CQkJTUFDSF9QQ00wMzcJCVBDTTAzNwkJCTE2NzMKK21tdnAJCQlNQUNIX01NVlAJCU1NVlAJCQkxNjc0CittbWFwCQkJTUFDSF9NTUFQCQlNTUFQCQkJMTY3NQorcHRpZDI0MTAJCU1BQ0hfUFRJRDI0MTAJCVBUSUQyNDEwCQkxNjc2CitqYW1lc185MjYJCU1BQ0hfSkFNRVNfOTI2CQlKQU1FU185MjYJCTE2NzcKK2ZtNjAwMAkJCU1BQ0hfRk02MDAwCQlGTTYwMDAJCQkxNjc4CitkYjg4ZjYyODFfYnAJCU1BQ0hfREI4OEY2MjgxX0JQCURCODhGNjI4MV9CUAkJMTY4MAorcmQ4OGY2MTkyX25hcwkJTUFDSF9SRDg4RjYxOTJfTkFTCVJEODhGNjE5Ml9OQVMJCTE2ODEKK3JkODhmNjI4MQkJTUFDSF9SRDg4RjYyODEJCVJEODhGNjI4MQkJMTY4MgorZGI3OHgwMF9icAkJTUFDSF9EQjc4WDAwX0JQCQlEQjc4WDAwX0JQCQkxNjgzCitzbWRrMjQxNgkJTUFDSF9TTURLMjQxNgkJU01ESzI0MTYJCTE2ODUKK29jZV9zcGlkZXJfc2kJCU1BQ0hfT0NFX1NQSURFUl9TSQlPQ0VfU1BJREVSX1NJCQkxNjg2CitvY2Vfc3BpZGVyX3NrCQlNQUNIX09DRV9TUElERVJfU0sJT0NFX1NQSURFUl9TSwkJMTY4Nworcm92ZXJuNgkJCU1BQ0hfUk9WRVJONgkJUk9WRVJONgkJCTE2ODgKK3BlbGNvX2V2b2x1dGlvbgkJTUFDSF9QRUxDT19FVk9MVVRJT04JUEVMQ09fRVZPTFVUSU9OCQkxNjg5Cit3YmQxMTEJCQlNQUNIX1dCRDExMQkJV0JEMTExCQkJMTY5MAorZWxhcmFjcGUJCU1BQ0hfRUxBUkFDUEUJCUVMQVJBQ1BFCQkxNjkxCittYWJ2MwkJCU1BQ0hfTUFCVjMJCU1BQlYzCQkJMTY5MgorbXYyMTIwCQkJTUFDSF9NVjIxMjAJCU1WMjEyMAkJCTE2OTMKK2NzYjczNwkJCU1BQ0hfQ1NCNzM3CQlDU0I3MzcJCQkxNjk1CitteDUxXzNkcwkJTUFDSF9NWDUxXzNEUwkJTVg1MV8zRFMJCTE2OTYKK2c5MDAJCQlNQUNIX0c5MDAJCUc5MDAJCQkxNjk3CithcGYyNwkJCU1BQ0hfQVBGMjcJCUFQRjI3CQkJMTY5OAorZ2d1czIwMDAJCU1BQ0hfR0dVUzIwMDAJCUdHVVMyMDAwCQkxNjk5CitvbWFwXzI0MzBfbWltaWMJCU1BQ0hfT01BUF8yNDMwX01JTUlDCU9NQVBfMjQzMF9NSU1JQwkJMTcwMAoraW14MjdsaXRlCQlNQUNIX0lNWDI3TElURQkJSU1YMjdMSVRFCQkxNzAxCithbG1leAkJCU1BQ0hfQUxNRVgJCUFMTUVYCQkJMTcwMgorY29udHJvbAkJCU1BQ0hfQ09OVFJPTAkJQ09OVFJPTAkJCTE3MDMKK21iYTI0MTAJCQlNQUNIX01CQTI0MTAJCU1CQTI0MTAJCQkxNzA0Cit2b2xjYW5vCQkJTUFDSF9WT0xDQU5PCQlWT0xDQU5PCQkJMTcwNQoremVuaXRoCQkJTUFDSF9aRU5JVEgJCVpFTklUSAkJCTE3MDYKK211Y2hpcAkJCU1BQ0hfTVVDSElQCQlNVUNISVAJCQkxNzA3CittYWdlbGxhbgkJTUFDSF9NQUdFTExBTgkJTUFHRUxMQU4JCTE3MDgKK3VzYl9hOTI2MAkJTUFDSF9VU0JfQTkyNjAJCVVTQl9BOTI2MAkJMTcwOQordXNiX2E5MjYzCQlNQUNIX1VTQl9BOTI2MwkJVVNCX0E5MjYzCQkxNzEwCitxaWxfYTkyNjAJCU1BQ0hfUUlMX0E5MjYwCQlRSUxfQTkyNjAJCTE3MTEKK2NtZTkyMTAJCQlNQUNIX0NNRTkyMTAJCUNNRTkyMTAJCQkxNzEyCitoY3poNAkJCU1BQ0hfSENaSDQJCUhDWkg0CQkJMTcxMworc3BlYXJiYXNpYwkJTUFDSF9TUEVBUkJBU0lDCQlTUEVBUkJBU0lDCQkxNzE0CitkZXAyNDQwCQkJTUFDSF9ERVAyNDQwCQlERVAyNDQwCQkJMTcxNQoraGRsX2d4cgkJCU1BQ0hfSERMX0dYUgkJSERMX0dYUgkJCTE3MTYKK2hkbF9ndAkJCU1BQ0hfSERMX0dUCQlIRExfR1QJCQkxNzE3CitoZGxfNGcJCQlNQUNIX0hETF80RwkJSERMXzRHCQkJMTcxOAorczNjNjAwMAkJCU1BQ0hfUzNDNjAwMAkJUzNDNjAwMAkJCTE3MTkKK21tc3AyX21kawkJTUFDSF9NTVNQMl9NREsJCU1NU1AyX01ESwkJMTcyMAorbXB4MjIwCQkJTUFDSF9NUFgyMjAJCU1QWDIyMAkJCTE3MjEKK2t6bV9hcm0xMV8wMQkJTUFDSF9LWk1fQVJNMTFfMDEJS1pNX0FSTTExXzAxCQkxNzIyCitodGNfcG9sYXJpcwkJTUFDSF9IVENfUE9MQVJJUwlIVENfUE9MQVJJUwkJMTcyMworaHRjX2thaXNlcgkJTUFDSF9IVENfS0FJU0VSCQlIVENfS0FJU0VSCQkxNzI0CitsZ19rczIwCQkJTUFDSF9MR19LUzIwCQlMR19LUzIwCQkJMTcyNQoraGhncHMJCQlNQUNIX0hIR1BTCQlISEdQUwkJCTE3MjYKK25va2lhX244MTBfd2ltYXgJTUFDSF9OT0tJQV9OODEwX1dJTUFYCU5PS0lBX044MTBfV0lNQVgJMTcyNwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9LY29uZmlnCmluZGV4IGM3NWQ3MDguLjA5YWQ3OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvS2NvbmZpZworKysgYi9hcmNoL2F2cjMyL0tjb25maWcKQEAgLTEwLDcgKzEwLDYgQEAKIAkjIFdpdGggRU1CRURERUQ9biwgd2UgZ2V0IGxvdHMgb2Ygc3R1ZmYgYXV0b21hdGljYWxseSBzZWxlY3RlZAogCSMgdGhhdCB3ZSB1c3VhbGx5IGRvbid0IG5lZWQgb24gQVZSMzIuCiAJc2VsZWN0IEVNQkVEREVECi0Jc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCiAJaGVscApAQCAtNDgsNiArNDcsOSBAQAogY29uZmlnIEdFTkVSSUNfVElNRQogCWRlZl9ib29sIHkKIAorY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWRlZl9ib29sIG4KIApAQCAtNzEsNiArNzMsOCBAQAogCiBtZW51ICJTeXN0ZW0gVHlwZSBhbmQgZmVhdHVyZXMiCiAKK3NvdXJjZSAia2VybmVsL3RpbWUvS2NvbmZpZyIKKwogY29uZmlnIFNVQkFSQ0hfQVZSMzJCCiAJYm9vbAogY29uZmlnIE1NVQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jCmluZGV4IDVhNzcwMzAuLmU3NjVhODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDQuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDA0LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogI2lmZGVmIENPTkZJR19CT0FSRF9BVFNUSzEwMFhfU1BJMQogCWF0MzJfYWRkX2RldmljZV9zcGkoMSwgc3BpMV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHNwaTFfYm9hcmRfaW5mbykpOwogI2VuZGlmCi0jaWZuZGVmIENPTkZJR19CT0FSRF9BVFNUSzEwMDJfU1cyX0NVU1RPTQorI2lmbmRlZiBDT05GSUdfQk9BUkRfQVRTVEsxMDBYX1NXMl9DVVNUT00KIAlhdDMyX2FkZF9kZXZpY2VfbWNpKDApOwogI2VuZGlmCiAJYXQzMl9hZGRfZGV2aWNlX2xjZGMoMCwgJmF0c3RrMTAwMF9sY2RjX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXZyMzIva2VybmVsL01ha2VmaWxlCmluZGV4IGU0YjZkMTIuLjE4MjI5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBvYmotJChDT05GSUdfU1VCQVJDSF9BVlIzMkIpCSs9IGVudHJ5LWF2cjMyYi5vCiBvYmoteQkJCQkrPSBzeXNjYWxsX3RhYmxlLm8gc3lzY2FsbC1zdHVicy5vIGlycS5vCi1vYmoteQkJCQkrPSBzZXR1cC5vIHRyYXBzLm8gc2VtYXBob3JlLm8gb2NkLm8gcHRyYWNlLm8KK29iai15CQkJCSs9IHNldHVwLm8gdHJhcHMubyBvY2QubyBwdHJhY2Uubwogb2JqLXkJCQkJKz0gc2lnbmFsLm8gc3lzX2F2cjMyLm8gcHJvY2Vzcy5vIHRpbWUubwogb2JqLXkJCQkJKz0gaW5pdF90YXNrLm8gc3dpdGNoX3RvLm8gY3B1Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlLm8gYXZyMzJfa3N5bXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMgYi9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUwppbmRleCA4Y2YxNmQ3Li41ZjMxNzAyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUwpAQCAtNzQxLDI2ICs3NDEsNiBAQAogCiAJLnNlY3Rpb24gLmlycS50ZXh0LCJheCIsQHByb2diaXRzCiAKLS5nbG9iYWwgY3B1X2lkbGVfc2xlZXAKLWNwdV9pZGxlX3NsZWVwOgotCW1hc2tfaW50ZXJydXB0cwotCWdldF90aHJlYWRfaW5mbyByOAotCWxkLncJcjksIHI4W1RJX2ZsYWdzXQotCWJsZAlyOSwgVElGX05FRURfUkVTQ0hFRAotCWJyY3MJY3B1X2lkbGVfZW5hYmxlX2ludF9hbmRfZXhpdAotCXNicglyOSwgVElGX0NQVV9HT0lOR19UT19TTEVFUAotCXN0LncJcjhbVElfZmxhZ3NdLCByOQotCXVubWFza19pbnRlcnJ1cHRzCi0Jc2xlZXAgMAotY3B1X2lkbGVfc2tpcF9zbGVlcDoKLQltYXNrX2ludGVycnVwdHMKLQlsZC53CXI5LCByOFtUSV9mbGFnc10KLQljYnIJcjksIFRJRl9DUFVfR09JTkdfVE9fU0xFRVAKLQlzdC53CXI4W1RJX2ZsYWdzXSwgcjkKLWNwdV9pZGxlX2VuYWJsZV9pbnRfYW5kX2V4aXQ6Ci0JdW5tYXNrX2ludGVycnVwdHMKLQlyZXRhbAlyMTIKLQogCS5nbG9iYWwJaXJxX2xldmVsMAogCS5nbG9iYWwJaXJxX2xldmVsMQogCS5nbG9iYWwJaXJxX2xldmVsMgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGVhYWE2OWIuLjZjZjlkZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExLDE3ICsxMSwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXNyZWcuaD4KICNpbmNsdWRlIDxhc20vb2NkLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorCiB2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKSA9IE5VTEw7CiBFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CiAKLWV4dGVybiB2b2lkIGNwdV9pZGxlX3NsZWVwKHZvaWQpOwotCiAvKgogICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2YgcHJvY2VzcyBoYW5kbGluZy4uCiAgKi8KQEAgLTMwLDggKzMxLDEwIEBACiB7CiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgeworCQl0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKCk7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQljcHVfaWRsZV9zbGVlcCgpOworCQl0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKCk7CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKIAkJcHJlZW1wdF9kaXNhYmxlKCk7CkBAIC01MSw2ICs1NCw4IEBACiAKIHZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKIHsKKwlpZiAocG1fcG93ZXJfb2ZmKQorCQlwbV9wb3dlcl9vZmYoKTsKIH0KIAogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQpAQCAtMzQ1LDYgKzM1MCw3IEBACiAJcC0+dGhyZWFkLmNwdV9jb250ZXh0LmtzcCA9ICh1bnNpZ25lZCBsb25nKWNoaWxkcmVnczsKIAlwLT50aHJlYWQuY3B1X2NvbnRleHQucGMgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9mb3JrOwogCisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9ERUJVRyk7CiAJaWYgKChjbG9uZV9mbGFncyAmIENMT05FX1BUUkFDRSkgJiYgdGVzdF90aHJlYWRfZmxhZyhUSUZfREVCVUcpKQogCQlvY2RfZW5hYmxlKHApOwogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvYXZyMzIva2VybmVsL3NlbWFwaG9yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI3MDVhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBBVlIzMiBzZW1wYWhvcmUgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgQXRtZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBCYXNlZCBvbiBsaW51eC9hcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IExpbnVzIFRvcnZhbGRzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotLyoKLSAqIFNlbWFwaG9yZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgdHdvLXdheSBjb3VudGVyOgotICogVGhlICJjb3VudCIgdmFyaWFibGUgaXMgZGVjcmVtZW50ZWQgZm9yIGVhY2ggcHJvY2VzcwotICogdGhhdCB0cmllcyB0byBhY3F1aXJlIHRoZSBzZW1hcGhvcmUsIHdoaWxlIHRoZSAic2xlZXBpbmciCi0gKiB2YXJpYWJsZSBpcyBhIGNvdW50IG9mIHN1Y2ggYWNxdWlyZXMuCi0gKgotICogTm90YWJseSwgdGhlIGlubGluZSAidXAoKSIgYW5kICJkb3duKCkiIGZ1bmN0aW9ucyBjYW4KLSAqIGVmZmljaWVudGx5IHRlc3QgaWYgdGhleSBuZWVkIHRvIGRvIGFueSBleHRyYSB3b3JrICh1cAotICogbmVlZHMgdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQotICogdGhlIGluY3JlbWVudCBvcGVyYXRpb24uCi0gKgotICogInNsZWVwaW5nIiBhbmQgdGhlIGNvbnRlbnRpb24gcm91dGluZSBvcmRlcmluZyBpcyBwcm90ZWN0ZWQKLSAqIGJ5IHRoZSBzcGlubG9jayBpbiB0aGUgc2VtYXBob3JlJ3Mgd2FpdHF1ZXVlIGhlYWQuCi0gKgotICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcwotICogY29udGVudGlvbiBvbiB0aGUgbG9jaywgYW5kIGFzIHN1Y2ggYWxsIHRoaXMgaXMgdGhlCi0gKiAibm9uLWNyaXRpY2FsIiBwYXJ0IG9mIHRoZSB3aG9sZSBzZW1hcGhvcmUgYnVzaW5lc3MuIFRoZQotICogY3JpdGljYWwgcGFydCBpcyB0aGUgaW5saW5lIHN0dWZmIGluIDxhc20vc2VtYXBob3JlLmg+Ci0gKiB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkIGFueSBleHRyYSBqdW1wcyBhbmQgY2FsbHMuCi0gKi8KLQotLyoKLSAqIExvZ2ljOgotICogIC0gb25seSBvbiBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBkbyB3ZSBuZWVkIHRvIGNhcmUuIFdoZW4gd2UgZ28KLSAqICAgIGZyb20gYSBuZWdhdGl2ZSBjb3VudCB0byBhIG5vbi1uZWdhdGl2ZSwgd2Ugd2FrZSBwZW9wbGUgdXAuCi0gKiAgLSB3aGVuIHdlIGdvIGZyb20gYSBub24tbmVnYXRpdmUgY291bnQgdG8gYSBuZWdhdGl2ZSBkbyB3ZQotICogICAgKGEpIHN5bmNocm9uaXplIHdpdGggdGhlICJzbGVlcGVyIiBjb3VudCBhbmQgKGIpIG1ha2Ugc3VyZQotICogICAgdGhhdCB3ZSdyZSBvbiB0aGUgd2FrZXVwIGxpc3QgYmVmb3JlIHdlIHN5bmNocm9uaXplIHNvIHRoYXQKLSAqICAgIHdlIGNhbm5vdCBsb3NlIHdha2V1cCBldmVudHMuCi0gKi8KLQotdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotRVhQT1JUX1NZTUJPTChfX3VwKTsKLQotdm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotICAgICAgICBERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgICAgIHRzay0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKLSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0gICAgICAgIGFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZV9sb2NrZWQoJnNlbS0+d2FpdCwgJndhaXQpOwotCi0gICAgICAgIHNlbS0+c2xlZXBlcnMrKzsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIGludCBzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnM7Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0gICAgICAgICAgICAgICAgICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrIGluCi0gICAgICAgICAgICAgICAgICogdGhlIHdhaXRfcXVldWVfaGVhZC4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoYXRvbWljX2FkZF9yZXR1cm4oc2xlZXBlcnMgLSAxLCAmc2VtLT5jb3VudCkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VtLT5zbGVlcGVycyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2VtLT5zbGVlcGVycyA9IDE7ICAgICAgLyogdXMgLSBzZWUgLTEgYWJvdmUgKi8KLSAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCi0gICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKLQotICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgIHRzay0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZV9sb2NrZWQoJnNlbS0+d2FpdCwgJndhaXQpOwotICAgICAgICB3YWtlX3VwX2xvY2tlZCgmc2VtLT53YWl0KTsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLSAgICAgICAgdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLX0KLUVYUE9SVF9TWU1CT0woX19kb3duKTsKLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLSAgICAgICAgREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQotICAgICAgICB0c2stPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLSAgICAgICAgYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlX2xvY2tlZCgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLSAgICAgICAgc2VtLT5zbGVlcGVycysrOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgaW50IHNsZWVwZXJzID0gc2VtLT5zbGVlcGVyczsKLQotCQkvKgotCQkgKiBXaXRoIHNpZ25hbHMgcGVuZGluZywgdGhpcyB0dXJucyBpbnRvIHRoZSB0cnlsb2NrCi0JCSAqIGZhaWx1cmUgY2FzZSAtIHdlIHdvbid0IGJlIHNsZWVwaW5nLCBhbmQgd2UgY2FuJ3QKLQkJICogZ2V0IHRoZSBsb2NrIGFzIGl0IGhhcyBjb250ZW50aW9uLiBKdXN0IGNvcnJlY3QgdGhlCi0JCSAqIGNvdW50IGFuZCBleGl0LgotCQkgKi8KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVFI7Ci0JCQlzZW0tPnNsZWVwZXJzID0gMDsKLQkJCWF0b21pY19hZGQoc2xlZXBlcnMsICZzZW0tPmNvdW50KTsKLQkJCWJyZWFrOwotCQl9Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0gICAgICAgICAgICAgICAgICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrIGluCi0gICAgICAgICAgICAgICAgICogdGhlIHdhaXRfcXVldWVfaGVhZC4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoYXRvbWljX2FkZF9yZXR1cm4oc2xlZXBlcnMgLSAxLCAmc2VtLT5jb3VudCkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VtLT5zbGVlcGVycyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2VtLT5zbGVlcGVycyA9IDE7ICAgICAgLyogdXMgLSBzZWUgLTEgYWJvdmUgKi8KLSAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCi0gICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKLQotICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgIHRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWVfbG9ja2VkKCZzZW0tPndhaXQsICZ3YWl0KTsKLSAgICAgICAgd2FrZV91cF9sb2NrZWQoJnNlbS0+d2FpdCk7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0KLSAgICAgICAgdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZXR1cm4gcmV0dmFsOwotfQotRVhQT1JUX1NZTUJPTChfX2Rvd25faW50ZXJydXB0aWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvc2V0dXAuYwppbmRleCBlNjZhMDdhLi4yNjg3YjczIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3NldHVwLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCW5ldy0+c3RhcnQgPSBzdGFydDsKIAluZXctPmVuZCA9IGVuZDsKIAluZXctPm5hbWUgPSBuYW1lOworCW5ldy0+c2libGluZyA9IG5leHQ7CiAJbmV3LT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCiAJKnBwcmV2ID0gbmV3OwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvdGltZS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvdGltZS5jCmluZGV4IDM2YTQ2YzMuLjAwYTk4NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC90aW1lLmMKQEAgLTEsMTYgKzEsMTIgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgogICoKLSAqIEJhc2VkIG9uIE1JUFMgaW1wbGVtZW50YXRpb24gYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKLSAqICAgQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMjcsMjA3ICsyMywxMzMgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAotLyogaG93IG1hbnkgY291bnRlciBjeWNsZXMgaW4gYSBqaWZmeT8gKi8KLXN0YXRpYyB1MzIgY3ljbGVzX3Blcl9qaWZmeTsKKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgogCi0vKiB0aGUgY291bnQgdmFsdWUgZm9yIHRoZSBuZXh0IHRpbWVyIGludGVycnVwdCAqLwotc3RhdGljIHUzMiBleHBpcmVsbzsKIAotY3ljbGVfdCBfX3dlYWsgcmVhZF9jeWNsZV9jb3VudCh2b2lkKQorc3RhdGljIGN5Y2xlX3QgcmVhZF9jeWNsZV9jb3VudCh2b2lkKQogewogCXJldHVybiAoY3ljbGVfdClzeXNyZWdfcmVhZChDT1VOVCk7CiB9CiAKLXN0cnVjdCBjbG9ja3NvdXJjZSBfX3dlYWsgY2xvY2tzb3VyY2VfYXZyMzIgPSB7Ci0JLm5hbWUJCT0gImF2cjMyIiwKLQkucmF0aW5nCQk9IDM1MCwKKy8qCisgKiBUaGUgYXJjaGl0ZWN0dXJhbCBjeWNsZSBjb3VudCByZWdpc3RlcnMgYXJlIGEgZmluZSBjbG9ja3NvdXJjZSB1bmxlc3MKKyAqIHRoZSBzeXN0ZW0gaWRsZSBsb29wIHVzZSBzbGVlcCBzdGF0ZXMgbGlrZSAiaWRsZSI6ICB0aGUgQ1BVIGN5Y2xlcworICogbWVhc3VyZWQgYnkgQ09VTlQgKGFuZCBDT01QQVJFKSBkb24ndCBoYXBwZW4gZHVyaW5nIHNsZWVwIHN0YXRlcy4KKyAqIFRoZWlyIGR1cmF0aW9uIGFsc28gY2hhbmdlcyBpZiBjcHVmcmVxIGNoYW5nZXMgdGhlIENQVSBjbG9jayByYXRlLgorICogU28gd2UgcmF0ZSB0aGUgY2xvY2tzb3VyY2UgdXNpbmcgQ09VTlQgYXMgdmVyeSBsb3cgcXVhbGl0eS4KKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjb3VudGVyID0geworCS5uYW1lCQk9ICJhdnIzMl9jb3VudGVyIiwKKwkucmF0aW5nCQk9IDUwLAogCS5yZWFkCQk9IHJlYWRfY3ljbGVfY291bnQsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCiAJLnNoaWZ0CQk9IDE2LAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKLWlycXJldHVybl90IF9fd2VhayB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLQotc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnFhY3Rpb24gPSB7Ci0JLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCi0JLm5hbWUJCT0gInRpbWVyIiwKLX07Ci0KLS8qCi0gKiBCeSBkZWZhdWx0IHdlIHByb3ZpZGUgdGhlIG51bGwgUlRDIG9wcwotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBudWxsX3J0Y19nZXRfdGltZSh2b2lkKQorc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JcmV0dXJuIG1rdGltZSgyMDA3LCAxLCAxLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIGludCBudWxsX3J0Y19zZXRfdGltZSh1bnNpZ25lZCBsb25nIHNlYykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgKCpydGNfZ2V0X3RpbWUpKHZvaWQpID0gbnVsbF9ydGNfZ2V0X3RpbWU7Ci1zdGF0aWMgaW50ICgqcnRjX3NldF90aW1lKSh1bnNpZ25lZCBsb25nKSA9IG51bGxfcnRjX3NldF90aW1lOwotCi1zdGF0aWMgdm9pZCBhdnIzMl90aW1lcl9hY2sodm9pZCkKLXsKLQl1MzIgY291bnQ7Ci0KLQkvKiBBY2sgdGhpcyB0aW1lciBpbnRlcnJ1cHQgYW5kIHNldCB0aGUgbmV4dCBvbmUgKi8KLQlleHBpcmVsbyArPSBjeWNsZXNfcGVyX2ppZmZ5OwotCS8qIHNldHRpbmcgQ09NUEFSRSB0byAwIHN0b3BzIHRoZSBDT1VOVC1DT01QQVJFICovCi0JaWYgKGV4cGlyZWxvID09IDApIHsKLQkJc3lzcmVnX3dyaXRlKENPTVBBUkUsIGV4cGlyZWxvICsgMSk7Ci0JfSBlbHNlIHsKLQkJc3lzcmVnX3dyaXRlKENPTVBBUkUsIGV4cGlyZWxvKTsKLQl9Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBtaXNzZWQgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLQljb3VudCA9IHN5c3JlZ19yZWFkKENPVU5UKTsKLQlpZiAoKGNvdW50IC0gZXhwaXJlbG8pIDwgMHg3ZmZmZmZmZikgewotCQlleHBpcmVsbyA9IGNvdW50ICsgY3ljbGVzX3Blcl9qaWZmeTsKLQkJc3lzcmVnX3dyaXRlKENPTVBBUkUsIGV4cGlyZWxvKTsKLQl9Ci19Ci0KLWludCBfX3dlYWsgYXZyMzJfaHB0X2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgbXVsdCwgc2hpZnQsIGNvdW50X2h6OwotCi0JY291bnRfaHogPSBjbGtfZ2V0X3JhdGUoYm9vdF9jcHVfZGF0YS5jbGspOwotCXNoaWZ0ID0gY2xvY2tzb3VyY2VfYXZyMzIuc2hpZnQ7Ci0JbXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY291bnRfaHosIHNoaWZ0KTsKLQljbG9ja3NvdXJjZV9hdnIzMi5tdWx0ID0gbXVsdDsKLQotCXsKLQkJdTY0IHRtcDsKLQotCQl0bXAgPSBUSUNLX05TRUM7Ci0JCXRtcCA8PD0gc2hpZnQ7Ci0JCXRtcCArPSBtdWx0IC8gMjsKLQkJZG9fZGl2KHRtcCwgbXVsdCk7Ci0KLQkJY3ljbGVzX3Blcl9qaWZmeSA9IHRtcDsKLQl9Ci0KLQlyZXQgPSBzZXR1cF9pcnEoMCwgJnRpbWVyX2lycWFjdGlvbik7Ci0JaWYgKHJldCkgewotCQlwcl9kZWJ1ZygidGltZXI6IGNvdWxkIG5vdCByZXF1ZXN0IElSUSAwOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAidGltZXI6IEFUMzJBUCBDT1VOVC1DT01QQVJFIGF0IGlycSAwLCAiCi0JCQkiJWx1LiUwM2x1IE1IelxuIiwKLQkJCSgoY291bnRfaHogKyA1MDApIC8gMTAwMCkgLyAxMDAwLAotCQkJKChjb3VudF9oeiArIDUwMCkgLyAxMDAwKSAlIDEwMDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUYWtlbiBmcm9tIE1JUFMgYzBfaHB0X3RpbWVyX2luaXQoKS4KLSAqCi0gKiBUaGUgcmVhc29uIENPVU5UIGlzIHdyaXR0ZW4gdHdpY2UgaXMgcHJvYmFibHkgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhbnkKLSAqIHRpbWVyIGludGVycnVwdHMgd2hpbGUgd2UgYXJlIG1lc3Npbmcgd2l0aCB0aGUgY291bnRlci4KLSAqLwotaW50IF9fd2VhayBhdnIzMl9ocHRfc3RhcnQodm9pZCkKLXsKLQl1MzIgY291bnQgPSBzeXNyZWdfcmVhZChDT1VOVCk7Ci0JZXhwaXJlbG8gPSAoY291bnQgLyBjeWNsZXNfcGVyX2ppZmZ5ICsgMSkgKiBjeWNsZXNfcGVyX2ppZmZ5OwotCXN5c3JlZ193cml0ZShDT1VOVCwgZXhwaXJlbG8gLSBjeWNsZXNfcGVyX2ppZmZ5KTsKLQlzeXNyZWdfd3JpdGUoQ09NUEFSRSwgZXhwaXJlbG8pOwotCXN5c3JlZ193cml0ZShDT1VOVCwgY291bnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBsb2NhbF90aW1lcl9pbnRlcnJ1cHQoKSBkb2VzIHByb2ZpbGluZyBhbmQgcHJvY2VzcyBhY2NvdW50aW5nIG9uIGEKLSAqIHBlci1DUFUgYmFzaXMuCi0gKgotICogSW4gVVAgbW9kZSwgaXQgaXMgaW52b2tlZCBmcm9tIHRoZSAoZ2xvYmFsKSB0aW1lcl9pbnRlcnJ1cHQuCi0gKi8KLXZvaWQgbG9jYWxfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpZiAoY3VycmVudC0+cGlkKQotCQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7Ci0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKGdldF9pcnFfcmVncygpKSk7Ci19Ci0KLWlycXJldHVybl90IF9fd2VhayB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCS8qIGFjayB0aW1lciBpbnRlcnJ1cHQgYW5kIHRyeSB0byBzZXQgbmV4dCBpbnRlcnJ1cHQgKi8KLQlhdnIzMl90aW1lcl9hY2soKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldmRldiA9IGRldl9pZDsKIAogCS8qCi0JICogQ2FsbCB0aGUgZ2VuZXJpYyB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlcgotCSAqLwotCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwotCWRvX3RpbWVyKDEpOwotCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7Ci0KLQkvKgotCSAqIEluIFVQIG1vZGUsIHdlIGNhbGwgbG9jYWxfdGltZXJfaW50ZXJydXB0KCkgdG8gZG8gcHJvZmlsaW5nCi0JICogYW5kIHByb2Nlc3MgYWNjb3VudGluZy4KLQkgKgotCSAqIFNNUCBpcyBub3Qgc3VwcG9ydGVkIHlldC4KLQkgKi8KLQlsb2NhbF90aW1lcl9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi12b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBDT01QQVJFIGludGVycnVwdHMgYmVmb3JlIHdlIGNhbgotCSAqIGhhbmRsZSB0aGVtLgorCSAqIERpc2FibGUgdGhlIGludGVycnVwdCB1bnRpbCB0aGUgY2xvY2tldmVudCBzdWJzeXN0ZW0KKwkgKiByZXByb2dyYW1zIGl0LgogCSAqLwogCXN5c3JlZ193cml0ZShDT01QQVJFLCAwKTsKIAotCXh0aW1lLnR2X3NlYyA9IHJ0Y19nZXRfdGltZSgpOworCWV2ZGV2LT5ldmVudF9oYW5kbGVyKGV2ZGV2KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2lycWFjdGlvbiA9IHsKKwkuaGFuZGxlcgk9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gSVJRRl9USU1FUiB8IElSUUZfRElTQUJMRUQsCisJLm5hbWUJCT0gImF2cjMyX2NvbXBhcmF0b3IiLAorfTsKKworc3RhdGljIGludCBjb21wYXJhdG9yX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZkZXYpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBUaGUgdGltZSB0byByZWFkIENPVU5UIHRoZW4gdXBkYXRlIENPTVBBUkUgbXVzdCBiZSBsZXNzCisJICogdGhhbiB0aGUgbWluX2RlbHRhX25zIHZhbHVlIGZvciB0aGlzIGNsb2NrZXZlbnQgc291cmNlLgorCSAqLworCXN5c3JlZ193cml0ZShDT01QQVJFLCAoc3lzcmVnX3JlYWQoQ09VTlQpICsgZGVsdGEpID8gOiAxKTsKKworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29tcGFyYXRvcl9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldmRldikKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCXByX2RlYnVnKCIlczogc3RhcnRcbiIsIGV2ZGV2LT5uYW1lKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJY3B1X2Rpc2FibGVfaWRsZV9zbGVlcCgpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCQlzeXNyZWdfd3JpdGUoQ09NUEFSRSwgMCk7CisJCXByX2RlYnVnKCIlczogc3RvcFxuIiwgZXZkZXYtPm5hbWUpOworCQljcHVfZW5hYmxlX2lkbGVfc2xlZXAoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjb21wYXJhdG9yID0geworCS5uYW1lCQk9ICJhdnIzMl9jb21wYXJhdG9yIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zaGlmdAkJPSAxNiwKKwkucmF0aW5nCQk9IDUwLAorCS5jcHVtYXNrCT0gQ1BVX01BU0tfQ1BVMCwKKwkuc2V0X25leHRfZXZlbnQJPSBjb21wYXJhdG9yX25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gY29tcGFyYXRvcl9tb2RlLAorfTsKKwordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyX2h6OworCWludCByZXQ7CisKKwl4dGltZS50dl9zZWMgPSBta3RpbWUoMjAwNywgMSwgMSwgMCwgMCwgMCk7CiAJeHRpbWUudHZfbnNlYyA9IDA7CiAKIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCiAJCQkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwogCi0JcmV0ID0gYXZyMzJfaHB0X2luaXQoKTsKLQlpZiAocmV0KSB7Ci0JCXByX2RlYnVnKCJ0aW1lcjogZmFpbGVkIHNldHVwOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuOwotCX0KKwkvKiBmaWd1cmUgcmF0ZSBmb3IgY291bnRlciAqLworCWNvdW50ZXJfaHogPSBjbGtfZ2V0X3JhdGUoYm9vdF9jcHVfZGF0YS5jbGspOworCWNvdW50ZXIubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoY291bnRlcl9oeiwgY291bnRlci5zaGlmdCk7CiAKLQlyZXQgPSBjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfYXZyMzIpOworCXJldCA9IGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjb3VudGVyKTsKIAlpZiAocmV0KQogCQlwcl9kZWJ1ZygidGltZXI6IGNvdWxkIG5vdCByZWdpc3RlciBjbG9ja3NvdXJjZTogJWRcbiIsIHJldCk7CiAKLQlyZXQgPSBhdnIzMl9ocHRfc3RhcnQoKTsKLQlpZiAocmV0KSB7Ci0JCXByX2RlYnVnKCJ0aW1lcjogZmFpbGVkIHN0YXJ0aW5nOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuOworCS8qIHNldHVwIENPTVBBUkUgY2xvY2tldmVudCAqLworCWNvbXBhcmF0b3IubXVsdCA9IGRpdl9zYyhjb3VudGVyX2h6LCBOU0VDX1BFUl9TRUMsIGNvbXBhcmF0b3Iuc2hpZnQpOworCWNvbXBhcmF0b3IubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygodTMyKX4wLCAmY29tcGFyYXRvcik7CisJY29tcGFyYXRvci5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDUwLCAmY29tcGFyYXRvcikgKyAxOworCisJc3lzcmVnX3dyaXRlKENPTVBBUkUsIDApOworCXRpbWVyX2lycWFjdGlvbi5kZXZfaWQgPSAmY29tcGFyYXRvcjsKKworCXJldCA9IHNldHVwX2lycSgwLCAmdGltZXJfaXJxYWN0aW9uKTsKKwlpZiAocmV0KQorCQlwcl9kZWJ1ZygidGltZXI6IGNvdWxkIG5vdCByZXF1ZXN0IElSUSAwOiAlZFxuIiwgcmV0KTsKKwllbHNlIHsKKwkJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZjb21wYXJhdG9yKTsKKworCQlwcl9pbmZvKCIlczogaXJxIDAsICVsdS4lMDNsdSBNSHpcbiIsIGNvbXBhcmF0b3IubmFtZSwKKwkJCQkoKGNvdW50ZXJfaHogKyA1MDApIC8gMTAwMCkgLyAxMDAwLAorCQkJCSgoY291bnRlcl9oeiArIDUwMCkgLyAxMDAwKSAlIDEwMDApOwogCX0KIH0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgdGltZXJfY2xhc3MgPSB7Ci0JLm5hbWUgPSAidGltZXIiLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHRpbWVyX2RldmljZSA9IHsKLQkuaWQJPSAwLAotCS5jbHMJPSAmdGltZXJfY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3RpbWVyX3N5c2ZzKHZvaWQpCi17Ci0JaW50IGVyciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfY2xhc3MpOwotCWlmICghZXJyKQotCQllcnIgPSBzeXNkZXZfcmVnaXN0ZXIoJnRpbWVyX2RldmljZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotZGV2aWNlX2luaXRjYWxsKGluaXRfdGltZXJfc3lzZnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYXZyMzIva2VybmVsL3RyYXBzLmMKaW5kZXggY2Y2ZjY4Ni4uYjgzNWM0YyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19CVUcKIGludCBpc192YWxpZF9idWdhZGRyKHVuc2lnbmVkIGxvbmcgcGMpCiB7CiAJdW5zaWduZWQgc2hvcnQgb3Bjb2RlOwpAQCAtMTg5LDYgKzE5MCw3IEBACiAKIAlyZXR1cm4gb3Bjb2RlID09IEFWUjMyX0JVR19PUENPREU7CiB9CisjZW5kaWYKIAogYXNtbGlua2FnZSB2b2lkIGRvX2lsbGVnYWxfb3Bjb2RlKHVuc2lnbmVkIGxvbmcgZWNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTE5Nyw2ICsxOTksNyBAQAogCXZvaWQgX191c2VyICpwYzsKIAlsb25nIGNvZGU7CiAKKyNpZmRlZiBDT05GSUdfQlVHCiAJaWYgKCF1c2VyX21vZGUocmVncykgJiYgKGVjciA9PSBFQ1JfSUxMRUdBTF9PUENPREUpKSB7CiAJCWVudW0gYnVnX3RyYXBfdHlwZSB0eXBlOwogCkBAIC0yMTEsNiArMjE0LDcgQEAKIAkJCWRpZSgiS2VybmVsIEJVRyIsIHJlZ3MsIFNJR0tJTEwpOwogCQl9CiAJfQorI2VuZGlmCiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvTWFrZWZpbGUgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL01ha2VmaWxlCmluZGV4IDVlOWY4MjEuLmU4OTAwOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9NYWtlZmlsZQpAQCAtMSw0ICsxLDMgQEAKIG9iai15CQkJCSs9IGF0MzJhcC5vIGNsb2NrLm8gaW50Yy5vIGV4dGludC5vIHBpby5vIGhzbWMubwotb2JqLSQoQ09ORklHX0NQVV9BVDMyQVA3MDBYKQkrPSBhdDMyYXA3MDB4Lm8KLW9iai0kKENPTkZJR19DUFVfQVQzMkFQNzAwWCkJKz0gdGltZS10Yy5vCitvYmotJChDT05GSUdfQ1BVX0FUMzJBUDcwMFgpCSs9IGF0MzJhcDcwMHgubyBwbS1hdDMyYXA3MDB4Lm8KIG9iai0kKENPTkZJR19DUFVfRlJFUV9BVDMyQVApCSs9IGNwdWZyZXEubwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwppbmRleCA3Njc4ZmVlLi4wZjI0YjRmOCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKQEAgLTYsMTEgKzYsMTMgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXRtZWxfdXNiYV91ZGMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTk4LDYgKzEwMCw5IEBACiAJWzJdID0gMTIwMDAwMDAsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayBvc2MwOworc3RhdGljIHN0cnVjdCBjbGsgb3NjMTsKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgb3NjX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gYXQzMmFwNzAwMF9vc2NfcmF0ZXNbY2xrLT5pbmRleF07CkBAIC0xMDcsOSArMTEyLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGRpdiwgbXVsLCByYXRlOwogCi0JaWYgKCEoY29udHJvbCAmIFBNX0JJVChQTExFTikpKQotCQlyZXR1cm4gMDsKLQogCWRpdiA9IFBNX0JGRVhUKFBMTERJViwgY29udHJvbCkgKyAxOwogCW11bCA9IFBNX0JGRVhUKFBMTE1VTCwgY29udHJvbCkgKyAxOwogCkBAIC0xMjAsNiArMTIyLDcxIEBACiAJcmV0dXJuIHJhdGU7CiB9CiAKK3N0YXRpYyBsb25nIHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCSB1MzIgKnBsbF9jdHJsKQoreworCXVuc2lnbmVkIGxvbmcgbXVsOworCXVuc2lnbmVkIGxvbmcgbXVsX2Jlc3RfZml0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGRpdjsKKwl1bnNpZ25lZCBsb25nIGRpdl9taW47CisJdW5zaWduZWQgbG9uZyBkaXZfbWF4OworCXVuc2lnbmVkIGxvbmcgZGl2X2Jlc3RfZml0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJdW5zaWduZWQgbG9uZyBwbGxfaW47CisJdW5zaWduZWQgbG9uZyBhY3R1YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgcmF0ZV9lcnJvcjsKKwl1bnNpZ25lZCBsb25nIHJhdGVfZXJyb3JfcHJldiA9IH4wVUw7CisJdTMyIGN0cmw7CisKKwkvKiBSYXRlIG11c3QgYmUgYmV0d2VlbiA4MCBNSHogYW5kIDIwMCBNaHouICovCisJaWYgKHJhdGUgPCA4MDAwMDAwMFVMIHx8IHJhdGUgPiAyMDAwMDAwMDBVTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljdHJsID0gUE1fQkYoUExMT1BULCA0KTsKKwliYXNlID0gY2xrLT5wYXJlbnQtPmdldF9yYXRlKGNsay0+cGFyZW50KTsKKworCS8qIFBMTCBpbnB1dCBmcmVxdWVuY3kgbXVzdCBiZSBiZXR3ZWVuIDYgTUh6IGFuZCAzMiBNSHouICovCisJZGl2X21pbiA9IERJVl9ST1VORF9VUChiYXNlLCAzMjAwMDAwMFVMKTsKKwlkaXZfbWF4ID0gYmFzZSAvIDYwMDAwMDBVTDsKKworCWlmIChkaXZfbWF4IDwgZGl2X21pbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGRpdiA9IGRpdl9taW47IGRpdiA8PSBkaXZfbWF4OyBkaXYrKykgeworCQlwbGxfaW4gPSAoYmFzZSArIGRpdiAvIDIpIC8gZGl2OworCQltdWwgPSAocmF0ZSArIHBsbF9pbiAvIDIpIC8gcGxsX2luOworCisJCWlmIChtdWwgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWFjdHVhbCA9IHBsbF9pbiAqIG11bDsKKwkJcmF0ZV9lcnJvciA9IGFicyhhY3R1YWwgLSByYXRlKTsKKworCQlpZiAocmF0ZV9lcnJvciA8IHJhdGVfZXJyb3JfcHJldikgeworCQkJbXVsX2Jlc3RfZml0ID0gbXVsOworCQkJZGl2X2Jlc3RfZml0ID0gZGl2OworCQkJcmF0ZV9lcnJvcl9wcmV2ID0gcmF0ZV9lcnJvcjsKKwkJfQorCisJCWlmIChyYXRlX2Vycm9yID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoZGl2X2Jlc3RfZml0ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3RybCB8PSBQTV9CRihQTExNVUwsIG11bF9iZXN0X2ZpdCAtIDEpOworCWN0cmwgfD0gUE1fQkYoUExMRElWLCBkaXZfYmVzdF9maXQgLSAxKTsKKwljdHJsIHw9IFBNX0JGKFBMTENPVU5ULCAxNik7CisKKwlpZiAoY2xrLT5wYXJlbnQgPT0gJm9zYzEpCisJCWN0cmwgfD0gUE1fQklUKFBMTE9TQyk7CisKKwkqcGxsX2N0cmwgPSBjdHJsOworCisJcmV0dXJuIGFjdHVhbDsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsMF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIGNvbnRyb2w7CkBAIC0xMjksNiArMTk2LDQxIEBACiAJcmV0dXJuIHBsbF9nZXRfcmF0ZShjbGssIGNvbnRyb2wpOwogfQogCitzdGF0aWMgdm9pZCBwbGwxX21vZGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIHN0YXR1czsKKwl1MzIgY3RybDsKKworCWN0cmwgPSBwbV9yZWFkbChQTEwxKTsKKworCWlmIChlbmFibGVkKSB7CisJCWlmICghUE1fQkZFWFQoUExMTVVMLCBjdHJsKSAmJiAhUE1fQkZFWFQoUExMRElWLCBjdHJsKSkgeworCQkJcHJfZGVidWcoImNsayAlczogZmFpbGVkIHRvIGVuYWJsZSwgcmF0ZSBub3Qgc2V0XG4iLAorCQkJCQljbGstPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisKKwkJY3RybCB8PSBQTV9CSVQoUExMRU4pOworCQlwbV93cml0ZWwoUExMMSwgY3RybCk7CisKKwkJLyogV2FpdCBmb3IgUExMIGxvY2suICovCisJCWZvciAodGltZW91dCA9IDEwMDAwOyB0aW1lb3V0OyB0aW1lb3V0LS0pIHsKKwkJCXN0YXR1cyA9IHBtX3JlYWRsKElTUik7CisJCQlpZiAoc3RhdHVzICYgUE1fQklUKExPQ0sxKSkKKwkJCQlicmVhazsKKwkJCXVkZWxheSgxMCk7CisJCX0KKworCQlpZiAoIShzdGF0dXMgJiBQTV9CSVQoTE9DSzEpKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2xrICVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvY2tcbiIsCisJCQkJCWNsay0+bmFtZSk7CisJfSBlbHNlIHsKKwkJY3RybCAmPSB+UE1fQklUKFBMTEVOKTsKKwkJcG1fd3JpdGVsKFBMTDEsIGN0cmwpOworCX0KK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIGNvbnRyb2w7CkBAIC0xMzgsNiArMjQwLDQ5IEBACiAJcmV0dXJuIHBsbF9nZXRfcmF0ZShjbGssIGNvbnRyb2wpOwogfQogCitzdGF0aWMgbG9uZyBwbGwxX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLCBpbnQgYXBwbHkpCit7CisJdTMyIGN0cmwgPSAwOworCXVuc2lnbmVkIGxvbmcgYWN0dWFsX3JhdGU7CisKKwlhY3R1YWxfcmF0ZSA9IHBsbF9zZXRfcmF0ZShjbGssIHJhdGUsICZjdHJsKTsKKworCWlmIChhcHBseSkgeworCQlpZiAoYWN0dWFsX3JhdGUgIT0gcmF0ZSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY2xrLT51c2VycyA+IDApCisJCQlyZXR1cm4gLUVCVVNZOworCQlwcl9kZWJ1ZyhLRVJOX0lORk8gImNsayAlczogbmV3IHJhdGUgJWx1IChhY3R1YWwgcmF0ZSAlbHUpXG4iLAorCQkJCWNsay0+bmFtZSwgcmF0ZSwgYWN0dWFsX3JhdGUpOworCQlwbV93cml0ZWwoUExMMSwgY3RybCk7CisJfQorCisJcmV0dXJuIGFjdHVhbF9yYXRlOworfQorCitzdGF0aWMgaW50IHBsbDFfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgY3RybDsKKworCWlmIChjbGstPnVzZXJzID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWN0cmwgPSBwbV9yZWFkbChQTEwxKTsKKwlXQVJOX09OKGN0cmwgJiBQTV9CSVQoUExMRU4pKTsKKworCWlmIChwYXJlbnQgPT0gJm9zYzApCisJCWN0cmwgJj0gflBNX0JJVChQTExPU0MpOworCWVsc2UgaWYgKHBhcmVudCA9PSAmb3NjMSkKKwkJY3RybCB8PSBQTV9CSVQoUExMT1NDKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcG1fd3JpdGVsKFBMTDEsIGN0cmwpOworCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGUgQVQzMkFQNzAwMCBoYXMgZml2ZSBwcmltYXJ5IGNsb2NrIHNvdXJjZXM6IE9uZSAzMmtIegogICogb3NjaWxsYXRvciwgdHdvIGNyeXN0YWwgb3NjaWxsYXRvcnMgYW5kIHR3byBQTExzLgpAQCAtMTY2LDcgKzMxMSwxMCBAQAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBsbDEgPSB7CiAJLm5hbWUJCT0gInBsbDEiLAorCS5tb2RlCQk9IHBsbDFfbW9kZSwKIAkuZ2V0X3JhdGUJPSBwbGwxX2dldF9yYXRlLAorCS5zZXRfcmF0ZQk9IHBsbDFfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSBwbGwxX3NldF9wYXJlbnQsCiAJLnBhcmVudAkJPSAmb3NjMCwKIH07CiAKQEAgLTYwNSwxOSArNzUzLDMyIEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgU3lzdGVtIFRpbWVyL0NvdW50ZXIgKFRDKQorICogIFRpbWVyL0NvdW50ZXIgKFRDKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQzMl9zeXN0YzBfcmVzb3VyY2VbXSA9IHsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDMyX3RjYjBfcmVzb3VyY2VbXSA9IHsKIAlQQk1FTSgweGZmZjAwYzAwKSwKIAlJUlEoMjIpLAogfTsKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQzMl9zeXN0YzBfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzeXN0YyIsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDMyX3RjYjBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAogCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IGF0MzJfc3lzdGMwX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDMyX3N5c3RjMF9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gYXQzMl90Y2IwX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDMyX3RjYjBfcmVzb3VyY2UpLAogfTsKLURFVl9DTEsocGNsaywgYXQzMl9zeXN0YzAsIHBiYiwgMyk7CitERVZfQ0xLKHQwX2NsaywgYXQzMl90Y2IwLCBwYmIsIDMpOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF0MzJfdGNiMV9yZXNvdXJjZVtdID0geworCVBCTUVNKDB4ZmZmMDEwMDApLAorCUlSUSgyMyksCit9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQzMl90Y2IxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBhdDMyX3RjYjFfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF0MzJfdGNiMV9yZXNvdXJjZSksCit9OworREVWX0NMSyh0MF9jbGssIGF0MzJfdGNiMSwgcGJiLCA0KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBQSU8KQEAgLTY2OSw3ICs4MzAsOCBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGRjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbWFjYTBfZGV2aWNlKTsKIAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQzMl9zeXN0YzBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0MzJfdGNiMF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQzMl90Y2IxX2RldmljZSk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBpbzBfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBpbzFfZGV2aWNlKTsKQEAgLTk4OSw3ICsxMTUxLDkgQEAKIAkuaW5kZXgJCT0gMiwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBhdDMyX2FkZF9kZXZpY2VfdHdpKHVuc2lnbmVkIGludCBpZCkKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBhdDMyX2FkZF9kZXZpY2VfdHdpKHVuc2lnbmVkIGludCBpZCwKKwkJCQkJCSAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmIsCisJCQkJCQkgICAgdW5zaWduZWQgaW50IG4pCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIApAQCAtMTAwOSw2ICsxMTczLDkgQEAKIAogCWF0bWVsX3R3aTBfcGNsay5kZXYgPSAmcGRldi0+ZGV2OwogCisJaWYgKGIpCisJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKGlkLCBiLCBuKTsKKwogCXBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJcmV0dXJuIHBkZXY7CiAKQEAgLTEzNTEsOSArMTUxOCwzOSBAQAogCS5pbmRleAkJPSA2LAogfTsKIAorI2RlZmluZSBFUChuYW0sIGlkeCwgbWF4cGt0LCBtYXhiaywgZG1hLCBpc29jKQkJCVwKKwlbaWR4XSA9IHsJCQkJCQlcCisJCS5uYW1lCQk9IG5hbSwJCQkJXAorCQkuaW5kZXgJCT0gaWR4LAkJCQlcCisJCS5maWZvX3NpemUJPSBtYXhwa3QsCQkJXAorCQkubnJfYmFua3MJPSBtYXhiaywJCQlcCisJCS5jYW5fZG1hCT0gZG1hLAkJCQlcCisJCS5jYW5faXNvYwk9IGlzb2MsCQkJCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiYV9lcF9kYXRhIGF0MzJfdXNiYV9lcFtdIF9faW5pdGRhdGEgPSB7CisJRVAoImVwMCIsICAgICAwLCAgIDY0LCAxLCAwLCAwKSwKKwlFUCgiZXAxIiwgICAgIDEsICA1MTIsIDIsIDEsIDEpLAorCUVQKCJlcDIiLCAgICAgMiwgIDUxMiwgMiwgMSwgMSksCisJRVAoImVwMy1pbnQiLCAzLCAgIDY0LCAzLCAxLCAwKSwKKwlFUCgiZXA0LWludCIsIDQsICAgNjQsIDMsIDEsIDApLAorCUVQKCJlcDUiLCAgICAgNSwgMTAyNCwgMywgMSwgMSksCisJRVAoImVwNiIsICAgICA2LCAxMDI0LCAzLCAxLCAxKSwKK307CisKKyN1bmRlZiBFUAorCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQKIGF0MzJfYWRkX2RldmljZV91c2JhKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKKwkvKgorCSAqIHBkYXRhIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBhbnkgZW5kcG9pbnRzLCBzbyB3ZSBuZWVkIHRvCisJICogYXBwZW5kIHJvb20gZm9yIHRoZSBvbmVzIHdlIG5lZWQgcmlnaHQgYWZ0ZXIgaXQuCisJICovCisJc3RydWN0IHsKKwkJc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSBwZGF0YTsKKwkJc3RydWN0IHVzYmFfZXBfZGF0YSBlcFs3XTsKKwl9IHVzYmFfZGF0YTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCiAJaWYgKGlkICE9IDApCkBAIC0xMzY3LDEzICsxNTY0LDIwIEBACiAJCQkJCSAgQVJSQVlfU0laRSh1c2JhMF9yZXNvdXJjZSkpKQogCQlnb3RvIG91dF9mcmVlX3BkZXY7CiAKLQlpZiAoZGF0YSkgewotCQlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemVvZigqZGF0YSkpKQotCQkJZ290byBvdXRfZnJlZV9wZGV2OworCWlmIChkYXRhKQorCQl1c2JhX2RhdGEucGRhdGEudmJ1c19waW4gPSBkYXRhLT52YnVzX3BpbjsKKwllbHNlCisJCXVzYmFfZGF0YS5wZGF0YS52YnVzX3BpbiA9IC1FSU5WQUw7CiAKLQkJaWYgKGRhdGEtPnZidXNfcGluICE9IEdQSU9fUElOX05PTkUpCi0JCQlhdDMyX3NlbGVjdF9ncGlvKGRhdGEtPnZidXNfcGluLCAwKTsKLQl9CisJZGF0YSA9ICZ1c2JhX2RhdGEucGRhdGE7CisJZGF0YS0+bnVtX2VwID0gQVJSQVlfU0laRShhdDMyX3VzYmFfZXApOworCW1lbWNweShkYXRhLT5lcCwgYXQzMl91c2JhX2VwLCBzaXplb2YoYXQzMl91c2JhX2VwKSk7CisKKwlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemVvZih1c2JhX2RhdGEpKSkKKwkJZ290byBvdXRfZnJlZV9wZGV2OworCisJaWYgKGRhdGEtPnZidXNfcGluID49IDApCisJCWF0MzJfc2VsZWN0X2dwaW8oZGF0YS0+dmJ1c19waW4sIDApOwogCiAJdXNiYTBfcGNsay5kZXYgPSAmcGRldi0+ZGV2OwogCXVzYmEwX2hjbGsuZGV2ID0gJnBkZXYtPmRldjsKQEAgLTE2OTQsNyArMTg5OCw4IEBACiAJJnBpbzJfbWNrLAogCSZwaW8zX21jaywKIAkmcGlvNF9tY2ssCi0JJmF0MzJfc3lzdGMwX3BjbGssCisJJmF0MzJfdGNiMF90MF9jbGssCisJJmF0MzJfdGNiMV90MF9jbGssCiAJJmF0bWVsX3VzYXJ0MF91c2FydCwKIAkmYXRtZWxfdXNhcnQxX3VzYXJ0LAogCSZhdG1lbF91c2FydDJfdXNhcnQsCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCmluZGV4IDBiMjg2Y2QuLjA5N2NmNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxhc20vaW50Yy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAiaW50Yy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9wbS1hdDMyYXA3MDB4LlMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3BtLWF0MzJhcDcwMHguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDllMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9wbS1hdDMyYXA3MDB4LlMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIExvdy1sZXZlbCBQb3dlciBNYW5hZ2VtZW50IGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorCisJLnNlY3Rpb24gLmJzcywgIndhIiwgQG5vYml0cworCS5nbG9iYWwJZGlzYWJsZV9pZGxlX3NsZWVwCisJLnR5cGUJZGlzYWJsZV9pZGxlX3NsZWVwLCBAb2JqZWN0CitkaXNhYmxlX2lkbGVfc2xlZXA6CisJLmludAk0CisJLnNpemUJZGlzYWJsZV9pZGxlX3NsZWVwLCAuIC0gZGlzYWJsZV9pZGxlX3NsZWVwCisKKwkvKiBLZWVwIHRoaXMgY2xvc2UgdG8gdGhlIGlycSBoYW5kbGVycyAqLworCS5zZWN0aW9uIC5pcnEudGV4dCwgImF4IiwgQHByb2diaXRzCisKKwkvKgorCSAqIHZvaWQgY3B1X2VudGVyX2lkbGUodm9pZCkKKwkgKgorCSAqIFB1dCB0aGUgQ1BVIGludG8gImlkbGUiIG1vZGUsIGluIHdoaWNoIGl0IHdpbGwgY29uc3VtZQorCSAqIHNpZ25pZmljYW50bHkgbGVzcyBwb3dlci4KKwkgKgorCSAqIElmIGFuIGludGVycnVwdCBjb21lcyBhbG9uZyBpbiB0aGUgd2luZG93IGJldHdlZW4KKwkgKiB1bm1hc2tfaW50ZXJydXB0cyBhbmQgdGhlIHNsZWVwIGluc3RydWN0aW9uIGJlbG93LCB0aGUKKwkgKiBpbnRlcnJ1cHQgY29kZSB3aWxsIGFkanVzdCB0aGUgcmV0dXJuIGFkZHJlc3Mgc28gdGhhdCB3ZQorCSAqIG5ldmVyIGV4ZWN1dGUgdGhlIHNsZWVwIGluc3RydWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkCisJICogYmVjYXVzZSB0aGUgQVA3MDAwIGRvZXNuJ3QgdW5tYXNrIGludGVycnVwdHMgd2hlbiBlbnRlcmluZworCSAqIHNsZWVwIG1vZGVzOyBsYXRlciBDUFVzIG1heSBub3QgbmVlZCB0aGlzIHdvcmthcm91bmQuCisJICovCisJLmdsb2JhbAljcHVfZW50ZXJfaWRsZQorCS50eXBlCWNwdV9lbnRlcl9pZGxlLCBAZnVuY3Rpb24KK2NwdV9lbnRlcl9pZGxlOgorCW1hc2tfaW50ZXJydXB0cworCWdldF90aHJlYWRfaW5mbyByOAorCWxkLncJcjksIHI4W1RJX2ZsYWdzXQorCWJsZAlyOSwgVElGX05FRURfUkVTQ0hFRAorCWJyY3MJLkxyZXRfZnJvbV9zbGVlcAorCXNicglyOSwgVElGX0NQVV9HT0lOR19UT19TTEVFUAorCXN0LncJcjhbVElfZmxhZ3NdLCByOQorCXVubWFza19pbnRlcnJ1cHRzCisJc2xlZXAJQ1BVX1NMRUVQX0lETEUKKwkuc2l6ZQljcHVfaWRsZV9zbGVlcCwgLiAtIGNwdV9pZGxlX3NsZWVwCisKKwkvKgorCSAqIENvbW1vbiByZXR1cm4gcGF0aCBmb3IgUE0gZnVuY3Rpb25zIHRoYXQgZG9uJ3QgcnVuIGZyb20KKwkgKiBTUkFNLgorCSAqLworCS5nbG9iYWwgY3B1X2lkbGVfc2tpcF9zbGVlcAorCS50eXBlCWNwdV9pZGxlX3NraXBfc2xlZXAsIEBmdW5jdGlvbgorY3B1X2lkbGVfc2tpcF9zbGVlcDoKKwltYXNrX2ludGVycnVwdHMKKwlsZC53CXI5LCByOFtUSV9mbGFnc10KKwljYnIJcjksIFRJRl9DUFVfR09JTkdfVE9fU0xFRVAKKwlzdC53CXI4W1RJX2ZsYWdzXSwgcjkKKy5McmV0X2Zyb21fc2xlZXA6CisJdW5tYXNrX2ludGVycnVwdHMKKwlyZXRhbAlyMTIKKwkuc2l6ZQljcHVfaWRsZV9za2lwX3NsZWVwLCAuIC0gY3B1X2lkbGVfc2tpcF9zbGVlcApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC90aW1lLXRjLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3RpbWUtdGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAyNjU4Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3RpbWUtdGMuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXRtZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBCYXNlZCBvbiBNSVBTIGltcGxlbWVudGF0aW9uIGFyY2gvbWlwcy9rZXJuZWwvdGltZS5jCi0gKiAgIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotCi0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3JlZy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL2FyY2gvdGltZS5oPgotCi0vKiBob3cgbWFueSBjb3VudGVyIGN5Y2xlcyBpbiBhIGppZmZ5PyAqLwotc3RhdGljIHUzMiBjeWNsZXNfcGVyX2ppZmZ5OwotCi0vKiB0aGUgY291bnQgdmFsdWUgZm9yIHRoZSBuZXh0IHRpbWVyIGludGVycnVwdCAqLwotc3RhdGljIHUzMiBleHBpcmVsbzsKLQotLyogdGhlIEkvTyByZWdpc3RlcnMgb2YgdGhlIFRDIG1vZHVsZSAqLwotc3RhdGljIHZvaWQgX19pb21lbSAqaW9yZWdzOwotCi1jeWNsZV90IHJlYWRfY3ljbGVfY291bnQodm9pZCkKLXsKLQlyZXR1cm4gKGN5Y2xlX3QpdGltZXJfcmVhZChpb3JlZ3MsIDAsIENWKTsKLX0KLQotc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX2F2cjMyID0gewotCS5uYW1lCQk9ICJhdnIzMiIsCi0JLnJhdGluZwkJPSAzNDIsCi0JLnJlYWQJCT0gcmVhZF9jeWNsZV9jb3VudCwKLQkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDE2KSwKLQkuc2hpZnQJCT0gMTYsCi0JLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAotfTsKLQotc3RhdGljIHZvaWQgYXZyMzJfdGltZXJfYWNrKHZvaWQpCi17Ci0JdTE2IGNvdW50ID0gZXhwaXJlbG87Ci0KLQkvKiBBY2sgdGhpcyB0aW1lciBpbnRlcnJ1cHQgYW5kIHNldCB0aGUgbmV4dCBvbmUsIHVzZSBhIHUxNgotCSAqIHZhcmlhYmxlIHNvIGl0IHdpbGwgd3JhcCBhcm91bmQgY29ycmVjdGx5ICovCi0JY291bnQgKz0gY3ljbGVzX3Blcl9qaWZmeTsKLQlleHBpcmVsbyA9IGNvdW50OwotCXRpbWVyX3dyaXRlKGlvcmVncywgMCwgUkMsIGV4cGlyZWxvKTsKLQotCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIG1pc3NlZCBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwotCWNvdW50ID0gdGltZXJfcmVhZChpb3JlZ3MsIDAsIENWKTsKLQlpZiAoKGNvdW50IC0gZXhwaXJlbG8pIDwgMHg3ZmZmKSB7Ci0JCWV4cGlyZWxvID0gY291bnQgKyBjeWNsZXNfcGVyX2ppZmZ5OwotCQl0aW1lcl93cml0ZShpb3JlZ3MsIDAsIFJDLCBleHBpcmVsbyk7Ci0JfQotfQotCi11MzIgYXZyMzJfaHB0X3JlYWQodm9pZCkKLXsKLQlyZXR1cm4gdGltZXJfcmVhZChpb3JlZ3MsIDAsIENWKTsKLX0KLQotc3RhdGljIGludCBhdnIzMl90aW1lcl9jYWxjX2Rpdl9hbmRfc2V0X2ppZmZpZXMoc3RydWN0IGNsayAqcGNsaykKLXsKLQl1bnNpZ25lZCBpbnQgY3ljbGVzX21heCA9IChjbG9ja3NvdXJjZV9hdnIzMi5tYXNrICsgMSkgLyAyOwotCXVuc2lnbmVkIGludCBkaXZzW10gPSB7IDQsIDgsIDE2LCAzMiB9OwotCWludCBkaXZzX3NpemUgPSBBUlJBWV9TSVpFKGRpdnMpOwotCWludCBpID0gMDsKLQl1bnNpZ25lZCBsb25nIGNvdW50X2h6OwotCXVuc2lnbmVkIGxvbmcgc2hpZnQ7Ci0JdW5zaWduZWQgbG9uZyBtdWx0OwotCWludCBjbG9ja19kaXYgPSAtMTsKLQl1NjQgdG1wOwotCi0Jc2hpZnQgPSBjbG9ja3NvdXJjZV9hdnIzMi5zaGlmdDsKLQotCWRvIHsKLQkJY291bnRfaHogPSBjbGtfZ2V0X3JhdGUocGNsaykgLyBkaXZzW2ldOwotCQltdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjb3VudF9oeiwgc2hpZnQpOwotCQljbG9ja3NvdXJjZV9hdnIzMi5tdWx0ID0gbXVsdDsKLQotCQl0bXAgPSBUSUNLX05TRUM7Ci0JCXRtcCA8PD0gc2hpZnQ7Ci0JCXRtcCArPSBtdWx0IC8gMjsKLQkJZG9fZGl2KHRtcCwgbXVsdCk7Ci0KLQkJY3ljbGVzX3Blcl9qaWZmeSA9IHRtcDsKLQl9IHdoaWxlIChjeWNsZXNfcGVyX2ppZmZ5ID4gY3ljbGVzX21heCAmJiArK2kgPCBkaXZzX3NpemUpOwotCi0JY2xvY2tfZGl2ID0gaSArIDE7Ci0KLQlpZiAoY2xvY2tfZGl2ID4gZGl2c19zaXplKSB7Ci0JCXByX2RlYnVnKCJ0aW1lcjogY291bGQgbm90IGNhbGN1bGF0ZSBjbG9jayBkaXZpZGVyXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JLyogU2V0IHRoZSBjbG9jayBkaXZpZGVyICovCi0JdGltZXJfd3JpdGUoaW9yZWdzLCAwLCBDTVIsIFRJTUVSX0JGKENNUl9UQ0NMS1MsIGNsb2NrX2RpdikpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBhdnIzMl9ocHRfaW5pdCh1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZWdzOwotCXN0cnVjdCBjbGsgKnBjbGs7Ci0JaW50IGlycSA9IC0xOwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gLUVOWElPOwotCi0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycSgmYXQzMl9zeXN0YzBfZGV2aWNlLCAwKTsKLQlpZiAoaXJxIDwgMCkgewotCQlwcl9kZWJ1ZygidGltZXI6IGNvdWxkIG5vdCBnZXQgaXJxXG4iKTsKLQkJZ290byBvdXRfZXJyb3I7Ci0JfQotCi0JcGNsayA9IGNsa19nZXQoJmF0MzJfc3lzdGMwX2RldmljZS5kZXYsICJwY2xrIik7Ci0JaWYgKElTX0VSUihwY2xrKSkgewotCQlwcl9kZWJ1ZygidGltZXI6IGNvdWxkIG5vdCBnZXQgY2xrOiAlbGRcbiIsIFBUUl9FUlIocGNsaykpOwotCQlnb3RvIG91dF9lcnJvcjsKLQl9Ci0JY2xrX2VuYWJsZShwY2xrKTsKLQotCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoJmF0MzJfc3lzdGMwX2RldmljZSwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcmVncykgewotCQlwcl9kZWJ1ZygidGltZXI6IGNvdWxkIG5vdCBnZXQgcmVzb3VyY2VcbiIpOwotCQlnb3RvIG91dF9lcnJvcl9jbGs7Ci0JfQotCi0JaW9yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKLQlpZiAoIWlvcmVncykgewotCQlwcl9kZWJ1ZygidGltZXI6IGNvdWxkIG5vdCBnZXQgaW9yZWdzXG4iKTsKLQkJZ290byBvdXRfZXJyb3JfY2xrOwotCX0KLQotCXJldCA9IGF2cjMyX3RpbWVyX2NhbGNfZGl2X2FuZF9zZXRfamlmZmllcyhwY2xrKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9lcnJvcl9pbzsKLQotCXJldCA9IHNldHVwX2lycShpcnEsICZ0aW1lcl9pcnFhY3Rpb24pOwotCWlmIChyZXQpIHsKLQkJcHJfZGVidWcoInRpbWVyOiBjb3VsZCBub3QgcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLAotCQkJCWlycSwgcmV0KTsKLQkJZ290byBvdXRfZXJyb3JfaW87Ci0JfQotCi0JZXhwaXJlbG8gPSAodGltZXJfcmVhZChpb3JlZ3MsIDAsIENWKSAvIGN5Y2xlc19wZXJfamlmZnkgKyAxKQotCQkqIGN5Y2xlc19wZXJfamlmZnk7Ci0KLQkvKiBFbmFibGUgY2xvY2sgYW5kIGludGVycnVwdHMgb24gUkMgY29tcGFyZSAqLwotCXRpbWVyX3dyaXRlKGlvcmVncywgMCwgQ0NSLCBUSU1FUl9CSVQoQ0NSX0NMS0VOKSk7Ci0JdGltZXJfd3JpdGUoaW9yZWdzLCAwLCBJRVIsIFRJTUVSX0JJVChJRVJfQ1BDUykpOwotCS8qIFNldCBjeWNsZXMgdG8gZmlyc3QgaW50ZXJydXB0ICovCi0JdGltZXJfd3JpdGUoaW9yZWdzLCAwLCAgUkMsIGV4cGlyZWxvKTsKLQotCXByaW50ayhLRVJOX0lORk8gInRpbWVyOiBBVDMyQVAgc3lzdGVtIHRpbWVyL2NvdW50ZXIgYXQgMHglcCBpcnEgJWRcbiIsCi0JCQlpb3JlZ3MsIGlycSk7Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2Vycm9yX2lvOgotCWlvdW5tYXAoaW9yZWdzKTsKLW91dF9lcnJvcl9jbGs6Ci0JY2xrX3B1dChwY2xrKTsKLW91dF9lcnJvcjoKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYXZyMzJfaHB0X3N0YXJ0KHZvaWQpCi17Ci0JdGltZXJfd3JpdGUoaW9yZWdzLCAwLCBDQ1IsIFRJTUVSX0JJVChDQ1JfU1dUUkcpKTsKLQlyZXR1cm4gMDsKLX0KLQotaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgc3IgPSB0aW1lcl9yZWFkKGlvcmVncywgMCwgU1IpOwotCi0JaWYgKHNyICYgVElNRVJfQklUKFNSX0NQQ1MpKSB7Ci0JCS8qIGFjayB0aW1lciBpbnRlcnJ1cHQgYW5kIHRyeSB0byBzZXQgbmV4dCBpbnRlcnJ1cHQgKi8KLQkJYXZyMzJfdGltZXJfYWNrKCk7Ci0KLQkJLyoKLQkJICogQ2FsbCB0aGUgZ2VuZXJpYyB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlcgotCQkgKi8KLQkJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0JCWRvX3RpbWVyKDEpOwotCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwotCi0JCS8qCi0JCSAqIEluIFVQIG1vZGUsIHdlIGNhbGwgbG9jYWxfdGltZXJfaW50ZXJydXB0KCkgdG8gZG8gcHJvZmlsaW5nCi0JCSAqIGFuZCBwcm9jZXNzIGFjY291bnRpbmcuCi0JCSAqCi0JCSAqIFNNUCBpcyBub3Qgc3VwcG9ydGVkIHlldC4KLQkJICovCi0JCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCk7Ci0KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCXJldHVybiBJUlFfTk9ORTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYyBiL2FyY2gvYXZyMzIvbW0vZmF1bHQuYwppbmRleCA2NTYwY2IxLi5jZTRlNDI5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCkBAIC0xODksNiArMTg5LDggQEAKIAogCXBhZ2UgPSBzeXNyZWdfcmVhZChQVEJSKTsKIAlwcmludGsoS0VSTl9BTEVSVCAicHRiciA9ICUwOGx4IiwgcGFnZSk7CisJaWYgKGFkZHJlc3MgPj0gVEFTS19TSVpFKQorCQlwYWdlID0gKHVuc2lnbmVkIGxvbmcpc3dhcHBlcl9wZ19kaXI7CiAJaWYgKHBhZ2UpIHsKIAkJcGFnZSA9ICgodW5zaWduZWQgbG9uZyAqKXBhZ2UpW2FkZHJlc3MgPj4gMjJdOwogCQlwcmludGsoIiBwZ2QgPSAlMDhseCIsIHBhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9pbml0LmMgYi9hcmNoL2F2cjMyL21tL2luaXQuYwppbmRleCA0ODA3NjBiLi4wZTY0ZGRjIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21tL2luaXQuYworKysgYi9hcmNoL2F2cjMyL21tL2luaXQuYwpAQCAtMzQsOSArMzQsNiBAQAogICovCiB1bnNpZ25lZCBsb25nIG1tdV9jb250ZXh0X2NhY2hlID0gTk9fQ09OVEVYVDsKIAotI2RlZmluZSBTVEFSVF9QRk4JKE5PREVfREFUQSgwKS0+YmRhdGEtPm5vZGVfYm9vdF9zdGFydCA+PiBQQUdFX1NISUZUKQotI2RlZmluZSBNQVhfTE9XX1BGTgkoTk9ERV9EQVRBKDApLT5iZGF0YS0+bm9kZV9sb3dfcGZuKQotCiB2b2lkIHNob3dfbWVtKHZvaWQpCiB7CiAJaW50IHRvdGFsID0gMCwgcmVzZXJ2ZWQgPSAwLCBjYWNoZWQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9vcHJvZmlsZS9vcF9tb2RlbF9hdnIzMi5jIGIvYXJjaC9hdnIzMi9vcHJvZmlsZS9vcF9tb2RlbF9hdnIzMi5jCmluZGV4IGUyZjg3NmIuLmRmNDIzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvb3Byb2ZpbGUvb3BfbW9kZWxfYXZyMzIuYworKysgYi9hcmNoL2F2cjMyL29wcm9maWxlL29wX21vZGVsX2F2cjMyLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vaW50Yy5oPgogI2luY2x1ZGUgPGFzbS9zeXNyZWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCA1ODljNmFjLi4yZGQxZjMwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCkBAIC0zMSwxMCArMzEsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIFNFTUFQSE9SRV9TTEVFUEVSUwotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEdFTkVSSUNfRklORF9ORVhUX0JJVAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUgYi9hcmNoL2JsYWNrZmluL01ha2VmaWxlCmluZGV4IGZlMjU0ZjguLjc1ZWJhMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKKysrIGIvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQpAQCAtOTgsOCArOTgsMTEgQEAKICMJdGhlbSBjaGFuZ2VkLiAgV2UgdXNlIC5tYWNoIHRvIGluZGljYXRlIHdoZW4gdGhleSB3ZXJlIHVwZGF0ZWQKICMJbGFzdCwgb3RoZXJ3aXNlIG1ha2UgdXNlcyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBtdGltZS4KIAorICAgICAgIHNob3dfbWFjaF9zeW1saW5rID0gOgorIHF1aWV0X3Nob3dfbWFjaF9zeW1saW5rID0gZWNobyAnICBTWU1MSU5LIGluY2x1ZGUvYXNtLSQoQVJDSCkvbWFjaC0kKE1BQ0hJTkUpIC0+IGluY2x1ZGUvYXNtLSQoQVJDSCkvbWFjaCcKK3NpbGVudF9zaG93X21hY2hfc3ltbGluayA9IDoKIGluY2x1ZGUvYXNtLWJsYWNrZmluLy5tYWNoOiAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnL2FyY2gvKi5oKSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKLQlAZWNobyAnICBTWU1MSU5LIGluY2x1ZGUvYXNtLSQoQVJDSCkvbWFjaC0kKE1BQ0hJTkUpIC0+IGluY2x1ZGUvYXNtLSQoQVJDSCkvbWFjaCcKKwlAJCgkKHF1aWV0KXNob3dfbWFjaF9zeW1saW5rKQogaWZuZXEgKCQoS0JVSUxEX1NSQyksKQogCSQoUSlta2RpciAtcCBpbmNsdWRlL2FzbS0kKEFSQ0gpCiAJJChRKWxuIC1mc24gJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKEFSQ0gpL21hY2gtJChNQUNISU5FKSBpbmNsdWRlL2FzbS0kKEFSQ0gpL21hY2gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCmluZGV4IGQ1OWVlMTUuLmFlMzIwZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi4xNAotIyBUaHUgTm92IDI5IDE3OjMyOjQ3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi4xNgogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0xMTYsNyArMTE1LDEwIEBACiAjIFByb2Nlc3NvciBhbmQgQm9hcmQgU2V0dGluZ3MKICMKICMgQ09ORklHX0JGNTIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTI0IGlzIG5vdCBzZXQKICMgQ09ORklHX0JGNTI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTI2IGlzIG5vdCBzZXQKIENPTkZJR19CRjUyNz15CiAjIENPTkZJR19CRjUzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzMiBpcyBub3Qgc2V0CkBAIC0zMDYsNiArMzA4LDcgQEAKICMgQ09ORklHX0JGSU5fV0IgaXMgbm90IHNldAogQ09ORklHX0JGSU5fV1Q9eQogQ09ORklHX0wxX01BWF9QSUVDRT0xNgorIyBDT05GSUdfTVBVIGlzIG5vdCBzZXQKIAogIwogIyBBc3luY2hvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbgpAQCAtMzU0LDYgKzM1Nyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTQ5Niw3ICs1MDAsNiBAQAogIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9NVzMyMEQ9bQogQ09ORklHX01URF9SQU09eQogQ09ORklHX01URF9ST009bQogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CkBAIC01MDYsOSArNTA5LDYgQEAKICMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0JGNXh4PW0KLUNPTkZJR19CRklOX0ZMQVNIX1NJWkU9MHg0MDAwMDAKLUNPTkZJR19FQklVX0ZMQVNIX0JBU0U9MHgyMDAwMDAwMAogIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02ODQsNyArNjg0LDYgQEAKICMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjUzWF9QRkJVVFRPTlMgaXMgbm90IHNldAogIyBDT05GSUdfVFdJX0tFWVBBRCBpcyBub3Qgc2V0CiAKICMKQEAgLTcwMiwxMiArNzAxLDEyIEBACiAjIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TSU1QTEVfVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX09UUD15CisjIENPTkZJR19CRklOX09UUF9XUklURV9FTkFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1RJTUVSX0xBVEVOQ1kgaXMgbm90IHNldAogIyBDT05GSUdfVFdJX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRDUzMDQgaXMgbm90IHNldAotIyBDT05GSUdfQkY1eHhfVEVBNTc2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjV4eF9GQkRNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCkBAIC03NzIsNyArNzcxLDYgQEAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19JMkNfQkxBQ0tGSU5fR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0JMQUNLRklOX1RXST1tCiBDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9DTEtfS0haPTUwCiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZwppbmRleCA4MTE3MTFmLi45NjIxY2FhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKQEAgLTMyMiwxMCArMzIyLDkgQEAKICMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9XQUtFVVBfR1BJT19CWV9TSUNfSVdSPXkKK0NPTkZJR19QTV9CRklOX1NMRUVQX0RFRVBFUj15CisjIENPTkZJR19QTV9CRklOX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1dBS0VVUF9HUElPX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fV0FLRVVQX1NJQ19JV1I9MHg4MAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNjk3LDcgKzY5Niw2IEBACiAjIENPTkZJR19TRVJJQUxfQkZJTl9QSU8gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9CRklOX1VBUlQwPXkKICMgQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9CRklOX1VBUlQxIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCAxOThmNDEyLi5iNTFlNzZjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTMyMywxMCArMzIzLDkgQEAKICMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9XQUtFVVBfR1BJT19CWV9TSUNfSVdSPXkKK0NPTkZJR19QTV9CRklOX1NMRUVQX0RFRVBFUj15CisjIENPTkZJR19QTV9CRklOX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1dBS0VVUF9HUElPX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fV0FLRVVQX1NJQ19JV1I9MHg4MAogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwpAQCAtNzE0LDcgKzcxMyw2IEBACiAjIENPTkZJR19TRVJJQUxfQkZJTl9QSU8gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9CRklOX1VBUlQwPXkKICMgQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9CRklOX1VBUlQxIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZwppbmRleCBiMzdjY2M2Li5kNDVmYTUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKQEAgLTMzMCwxMCArMzMwLDkgQEAKICMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9XQUtFVVBfR1BJT19CWV9TSUNfSVdSPXkKK0NPTkZJR19QTV9CRklOX1NMRUVQX0RFRVBFUj15CisjIENPTkZJR19QTV9CRklOX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1dBS0VVUF9HUElPX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fV0FLRVVQX1NJQ19JV1I9MHg4CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC0xMDEzLDYgKzEwMTIsNyBAQAogQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQogQ09ORklHX1NORF9TT0M9bQogQ09ORklHX1NORF9CRjVYWF9TT0M9bQorQ09ORklHX1NORF9NTUFQX1NVUFBPUlQ9eQogQ09ORklHX1NORF9CRjVYWF9TT0NfQUM5Nz1tCiAjIENPTkZJR19TTkRfQkY1WFhfU09DX1dNODc1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQkY1WFhfU09DX1dNODczMSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZwppbmRleCBmZDcwMjE2Li5jOTcwN2Y3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKQEAgLTM5Niw2ICszOTYsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTEwNzUsNiArMTA3Niw3IEBACiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX0JGNVhYX1NPQz15CitDT05GSUdfU05EX01NQVBfU1VQUE9SVD15CiBDT05GSUdfU05EX0JGNVhYX1NPQ19BQzk3PXkKIENPTkZJR19TTkRfQkY1WFhfU09DX0JGNTQ4X0VaS0lUPXkKICMgQ09ORklHX1NORF9CRjVYWF9TT0NfV004NzUwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCmluZGV4IDg1NDY5OTQuLjRkOGE2MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwpAQCAtMzY3LDYgKzM2Nyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmtpbmcKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKaW5kZXggNTQ1M2JjMy4uOGZkNWQyMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKQEAgLTEwNSwxMyArMTA1LDE0IEBACiAJbXV0ZXhfdW5sb2NrKCYoZG1hX2NoW2NoYW5uZWxdLmRtYWxvY2spKTsKIAogI2lmZGVmIENPTkZJR19CRjU0eAotCWlmIChjaGFubmVsID49IENIX1VBUlQyX1JYICYmIGNoYW5uZWwgPD0gQ0hfVUFSVDNfVFggJiYKLQkJc3RybmNtcChkZXZpY2VfaWQsICJCRklOX1VBUlQiLCA5KSA9PSAwKQotCQlkbWFfY2hbY2hhbm5lbF0ucmVncy0+cGVyaXBoZXJhbF9tYXAgfD0KLQkJCShjaGFubmVsIC0gQ0hfVUFSVDJfUlggKyAweEMpOwotCWVsc2UKLQkJZG1hX2NoW2NoYW5uZWxdLnJlZ3MtPnBlcmlwaGVyYWxfbWFwIHw9Ci0JCQkoY2hhbm5lbCAtIENIX1VBUlQyX1JYICsgMHg2KTsKKwlpZiAoY2hhbm5lbCA+PSBDSF9VQVJUMl9SWCAmJiBjaGFubmVsIDw9IENIX1VBUlQzX1RYKSB7CisJCWlmIChzdHJuY21wKGRldmljZV9pZCwgIkJGSU5fVUFSVCIsIDkpID09IDApCisJCQlkbWFfY2hbY2hhbm5lbF0ucmVncy0+cGVyaXBoZXJhbF9tYXAgfD0KKwkJCQkoY2hhbm5lbCAtIENIX1VBUlQyX1JYICsgMHhDKTsKKwkJZWxzZQorCQkJZG1hX2NoW2NoYW5uZWxdLnJlZ3MtPnBlcmlwaGVyYWxfbWFwIHw9CisJCQkJKGNoYW5uZWwgLSBDSF9VQVJUMl9SWCArIDB4Nik7CisJfQogI2VuZGlmCiAKIAlkbWFfY2hbY2hhbm5lbF0uZGV2aWNlX2lkID0gZGV2aWNlX2lkOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9rc3ltcy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9rc3ltcy5jCmluZGV4IDBiZmJiMjYuLjA1M2VkZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fa3N5bXMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2tzeW1zLmMKQEAgLTQyLDExICs0Miw2IEBACiAKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKLUVYUE9SVF9TWU1CT0woX191cCk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bik7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwotCiBFWFBPUlRfU1lNQk9MKGlzX2luX3JvbSk7CiBFWFBPUlRfU1lNQk9MKGJmaW5fcmV0dXJuX2Zyb21fZXhjZXB0aW9uKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TCmluZGV4IDkwMjYyNjkuLjVlZDQ3MjI4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TCkBAIC0xMDEsOSArMTAxLDkgQEAKIAogLmFsaWduIDE2CiAJLyoKLQkgKiBBdG9taWMgaW9yLCAzMiBiaXQuCisJICogQXRvbWljIGFuZCwgMzIgYml0LgogCSAqIElucHV0czoJUDA6IG1lbW9yeSBhZGRyZXNzIHRvIHVzZQotCSAqCQlSMDogdmFsdWUgdG8gaW9yCisJICoJCVIwOiB2YWx1ZSB0byBhbmQKIAkgKiBPdXRwdXRzOglSMDogbmV3IGNvbnRlbnRzIG9mIHRoZSBtZW1vcnkgYWRkcmVzcy4KIAkgKgkJUjE6IHByZXZpb3VzIGNvbnRlbnRzIG9mIHRoZSBtZW1vcnkgYWRkcmVzcy4KIAkgKi8KQEAgLTExMiwxMyArMTEyLDEzIEBACiAJUjAgPSBSMSAmIFIwOwogCVtQMF0gPSBSMDsKIAlydHM7Ci1FTkRQUk9DIChfYXRvbWljX2lvcjMyKQorRU5EUFJPQyAoX2F0b21pY19hbmQzMikKIAogLmFsaWduIDE2CiAJLyoKLQkgKiBBdG9taWMgaW9yLCAzMiBiaXQuCisJICogQXRvbWljIHhvciwgMzIgYml0LgogCSAqIElucHV0czoJUDA6IG1lbW9yeSBhZGRyZXNzIHRvIHVzZQotCSAqCQlSMDogdmFsdWUgdG8gaW9yCisJICoJCVIwOiB2YWx1ZSB0byB4b3IKIAkgKiBPdXRwdXRzOglSMDogbmV3IGNvbnRlbnRzIG9mIHRoZSBtZW1vcnkgYWRkcmVzcy4KIAkgKgkJUjE6IHByZXZpb3VzIGNvbnRlbnRzIG9mIHRoZSBtZW1vcnkgYWRkcmVzcy4KIAkgKi8KQEAgLTEyNyw3ICsxMjcsNyBAQAogCVIwID0gUjEgXiBSMDsKIAlbUDBdID0gUjA7CiAJcnRzOwotRU5EUFJPQyAoX2F0b21pY19pb3IzMikKK0VORFBST0MgKF9hdG9taWNfeG9yMzIpCiAKIC5hbGlnbiAxNgogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9ncHRpbWVycy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZ3B0aW1lcnMuYwppbmRleCA1Y2Y0YmRiLi4xOTA0ZDhiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9ncHRpbWVycy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2dwdGltZXJzLmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogYmZpbl9ncHRpbWVycy5jIC0gZGVyaXZlZCBmcm9tIGJmNTN4X3RpbWVycy5jCi0gKiAgRHJpdmVyIGZvciBHZW5lcmFsIFB1cnBvc2UgVGltZXIgZnVuY3Rpb25zIG9uIHRoZSBCbGFja2ZpbiBwcm9jZXNzb3IKKyAqIGdwdGltZXJzLmMgLSBCbGFja2ZpbiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgY29yZSBBUEkKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEpvaG4gRGVIb3JpdHkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgSGVsbGEgQWdsYWlhIEdtYkggKGF3ZUBhZ2xhaWEtZ21iaC5kZSkKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBKb2huIERlSG9yaXR5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSGVsbGEgQWdsYWlhIEdtYkggKGF3ZUBhZ2xhaWEtZ21iaC5kZSkKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMdjIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCmluZGV4IDgyMjliMTAuLjIyNTVjMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwpAQCAtMzIsNiArMzIsNyBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKIAogdTE2IF9iZmluX3N3cnN0OworRVhQT1JUX1NZTUJPTChfYmZpbl9zd3JzdCk7CiAKIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kLCBwaHlzaWNhbF9tZW1fZW5kOwogdW5zaWduZWQgbG9uZyByZXNlcnZlZF9tZW1fZGNhY2hlX29uOwpAQCAtNTE0LDYgKzUxNSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiS2VybmVsIE1hbmFnZWQgTWVtb3J5OiAlbGRNQlxuIiwgX3JhbWVuZCA+PiAyMCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnkgbWFwOlxuIgorCQlLRVJOX0lORk8gIiAgZml4ZWRjb2RlID0gMHglcC0weCVwXG4iCiAJCUtFUk5fSU5GTyAiICB0ZXh0ICAgICAgPSAweCVwLTB4JXBcbiIKIAkJS0VSTl9JTkZPICIgIHJvZGF0YSAgICA9IDB4JXAtMHglcFxuIgogCQlLRVJOX0lORk8gIiAgYnNzICAgICAgID0gMHglcC0weCVwXG4iCkBAIC01MjcsNyArNTI5LDggQEAKICNpZiBETUFfVU5DQUNIRURfUkVHSU9OID4gMAogCQlLRVJOX0lORk8gIiAgRE1BIFpvbmUgID0gMHglcC0weCVwXG4iCiAjZW5kaWYKLQkJLCBfc3RleHQsIF9ldGV4dCwKKwkJLCAodm9pZCAqKUZJWEVEX0NPREVfU1RBUlQsICh2b2lkICopRklYRURfQ09ERV9FTkQsCisJCV9zdGV4dCwgX2V0ZXh0LAogCQlfX3N0YXJ0X3JvZGF0YSwgX19lbmRfcm9kYXRhLAogCQlfX2Jzc19zdGFydCwgX19ic3Nfc3RvcCwKIAkJX3NkYXRhLCBfZWRhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKaW5kZXggOWJkYzhmOS4uNzE1YjM5NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYwpAQCAtMzksOCArMzksNyBAQAogLyogVGhpcyBpcyBhbiBOVFAgc2V0dGluZyAqLwogI2RlZmluZQlUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCiAKLXN0YXRpYyB2b2lkIHRpbWVfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCgqdGltZXJfcm91dGluZSkKLQkJCShpbnQsIHZvaWQgKikpOworc3RhdGljIHZvaWQgdGltZV9zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgdGltZXJfcm91dGluZSk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXR0aW1lb2Zmc2V0KHZvaWQpOwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBiZmluX3RpbWVyX2lycSA9IHsKQEAgLTY0LDcgKzYzLDcgQEAKICNkZWZpbmUgVElNRV9TQ0FMRSAxCiAKIHN0YXRpYyB2b2lkCi10aW1lX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QoKnRpbWVyX3JvdXRpbmUpIChpbnQsIHZvaWQgKikpCit0aW1lX3NjaGVkX2luaXQoaXJxX2hhbmRsZXJfdCB0aW1lcl9yb3V0aW5lKQogewogCXUzMiB0Y291bnQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGFlZDgzMjUuLmNiMDFhOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTQ3LDQ0ICsxNDcsNjQgQEAKIAogCV9fbDFfbG1hX3N0YXJ0ID0gLjsKIAorI2lmIEwxX0NPREVfTEVOR1RICisjIGRlZmluZSBMRFNfTDFfQ09ERSAqKC5sMS50ZXh0KQorI2Vsc2UKKyMgZGVmaW5lIExEU19MMV9DT0RFCisjZW5kaWYKIAkudGV4dF9sMSBMMV9DT0RFX1NUQVJUIDogQVQoTE9BREFERFIoLmluaXQucmFtZnMpICsgU0laRU9GKC5pbml0LnJhbWZzKSkKIAl7CiAJCS4gPSBBTElHTig0KTsKIAkJX19zdGV4dF9sMSA9IC47Ci0JCSooLmwxLnRleHQpCi0KKwkJTERTX0wxX0NPREUKIAkJLiA9IEFMSUdOKDQpOwogCQlfX2V0ZXh0X2wxID0gLjsKIAl9CiAKKyNpZiBMMV9EQVRBX0FfTEVOR1RICisjIGRlZmluZSBMRFNfTDFfQV9EQVRBICAqKC5sMS5kYXRhKQorIyBkZWZpbmUgTERTX0wxX0FfQlNTICAgKigubDEuYnNzKQorIyBkZWZpbmUgTERTX0wxX0FfQ0FDSEUgKiguZGF0YV9sMS5jYWNoZWxpbmVfYWxpZ25lZCkKKyNlbHNlCisjIGRlZmluZSBMRFNfTDFfQV9EQVRBCisjIGRlZmluZSBMRFNfTDFfQV9CU1MKKyMgZGVmaW5lIExEU19MMV9BX0NBQ0hFCisjZW5kaWYKIAkuZGF0YV9sMSBMMV9EQVRBX0FfU1RBUlQgOiBBVChMT0FEQUREUigudGV4dF9sMSkgKyBTSVpFT0YoLnRleHRfbDEpKQogCXsKIAkJLiA9IEFMSUdOKDQpOwogCQlfX3NkYXRhX2wxID0gLjsKLQkJKigubDEuZGF0YSkKKwkJTERTX0wxX0FfREFUQQogCQlfX2VkYXRhX2wxID0gLjsKIAogCQkuID0gQUxJR04oNCk7CiAJCV9fc2Jzc19sMSA9IC47Ci0JCSooLmwxLmJzcykKKwkJTERTX0wxX0FfQlNTCiAKIAkJLiA9IEFMSUdOKDMyKTsKLQkJKiguZGF0YV9sMS5jYWNoZWxpbmVfYWxpZ25lZCkKKwkJTERTX0wxX0FfQ0FDSEUKIAogCQkuID0gQUxJR04oNCk7CiAJCV9fZWJzc19sMSA9IC47CiAJfQogCisjaWYgTDFfREFUQV9CX0xFTkdUSAorIyBkZWZpbmUgTERTX0wxX0JfREFUQSAgKigubDEuZGF0YS5CKQorIyBkZWZpbmUgTERTX0wxX0JfQlNTICAgKigubDEuYnNzLkIpCisjZWxzZQorIyBkZWZpbmUgTERTX0wxX0JfREFUQQorIyBkZWZpbmUgTERTX0wxX0JfQlNTCisjZW5kaWYKIAkuZGF0YV9iX2wxIEwxX0RBVEFfQl9TVEFSVCA6IEFUKExPQURBRERSKC5kYXRhX2wxKSArIFNJWkVPRiguZGF0YV9sMSkpCiAJewogCQkuID0gQUxJR04oNCk7CiAJCV9fc2RhdGFfYl9sMSA9IC47Ci0JCSooLmwxLmRhdGEuQikKKwkJTERTX0wxX0JfREFUQQogCQlfX2VkYXRhX2JfbDEgPSAuOwogCiAJCS4gPSBBTElHTig0KTsKIAkJX19zYnNzX2JfbDEgPSAuOwotCQkqKC5sMS5ic3MuQikKKwkJTERTX0wxX0JfQlNTCiAKIAkJLiA9IEFMSUdOKDQpOwogCQlfX2Vic3NfYl9sMSA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKaW5kZXggMzM3NTE1Zi4uY2Y0YmMwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwpAQCAtMTgwLDggKzE4MCw4IEBACiAJfSwKIAl7CiAJCS5uYW1lID0gIkZpbGUgU3lzdGVtIiwKLQkJLm9mZnNldCA9IDQgKiBTSVpFXzFNLAotCQkuc2l6ZSA9ICgyNTYgLSA0KSAqIFNJWkVfMU0sCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKIAl9LAogfTsKIApAQCAtNDIyLDExICs0MjIsMTEgQEAKIAl9LCB7CiAJCS5uYW1lID0gImtlcm5lbCIsCiAJCS5zaXplID0gMHhlMDAwMCwKLQkJLm9mZnNldCA9IDB4MjAwMDAKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKIAl9LCB7CiAJCS5uYW1lID0gImZpbGUgc3lzdGVtIiwKLQkJLnNpemUgPSAweDcwMDAwMCwKLQkJLm9mZnNldCA9IDB4MDAxMDAwMDAsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKIAl9CiB9OwogCkBAIC00ODQsMTMgKzQ4NCw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BRDUzMDQpIHx8IGRlZmluZWQoQ09ORklHX0FENTMwNF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgYWQ1MzA0X2NoaXBfaW5mbyA9IHsKLQkuZW5hYmxlX2RtYSA9IDAsCi0JLmJpdHNfcGVyX3dvcmQgPSAxNiwKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc3X2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsCkBAIC02MTEsMTcgKzYwNCw2IEBACiAJCS5tb2RlID0gU1BJX01PREVfMywKIAl9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQUQ1MzA0KSB8fCBkZWZpbmVkKENPTkZJR19BRDUzMDRfTU9EVUxFKQotCXsKLQkJLm1vZGFsaWFzID0gImFkNTMwNF9zcGkiLAotCQkubWF4X3NwZWVkX2h6ID0gMTI1MDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSAyLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmYWQ1MzA0X2NoaXBfaW5mbywKLQkJLm1vZGUgPSBTUElfTU9ERV8yLAotCX0sCi0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiAJewogCQkubW9kYWxpYXMJCT0gImFkNzg3NyIsCkBAIC04MTgsNiArODAwLDE5IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7CisJLnN0YXJ0ID0gMCwKKwkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7CisJLm5hbWUgPSAic2ltcGxlLWdwaW8iLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3RhbXBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQkY1WFgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0JGNVhYX01PRFVMRSkKIAkmYmY1eHhfbmFuZF9kZXZpY2UsCkBAIC04OTUsNiArODkwLDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKKworCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHN0YW1wX2luaXQodm9pZCkKQEAgLTkyMSwxMyArOTE4LDE4IEBACiAJCWJmaW5fZ3Bpb19yZXNldF9zcGkwX3NzZWwxKCk7CiB9CiAKLS8qCi0gKiBDdXJyZW50bHkgdGhlIE1BQyBhZGRyZXNzIGlzIHNhdmVkIGluIEZsYXNoIGJ5IFUtQm9vdAotICovCi0jZGVmaW5lIEZMQVNIX01BQwkweDIwM2YwMDAwCiB2b2lkIGJmaW5fZ2V0X2V0aGVyX2FkZHIoY2hhciAqYWRkcikKIHsKLQkqKHUzMiAqKSgmKGFkZHJbMF0pKSA9IGJmaW5fcmVhZDMyKEZMQVNIX01BQyk7Ci0JKih1MTYgKikoJihhZGRyWzRdKSkgPSBiZmluX3JlYWQxNihGTEFTSF9NQUMgKyA0KTsKKwkvKiB0aGUgTUFDIGlzIHN0b3JlZCBpbiBPVFAgbWVtb3J5IHBhZ2UgMHhERiAqLworCXUzMiByZXQ7CisJdTY0IG90cF9tYWM7CisJdTMyICgqb3RwX3JlYWQpKHUzMiBwYWdlLCB1MzIgZmxhZ3MsIHU2NCAqcGFnZV9jb250ZW50KSA9ICh2b2lkICopMHhFRjAwMDAxQTsKKworCXJldCA9IG90cF9yZWFkKDB4REYsIDB4MDAsICZvdHBfbWFjKTsKKwlpZiAoIShyZXQgJiAweDEpKSB7CisJCWNoYXIgKm90cF9tYWNfcCA9IChjaGFyICopJm90cF9tYWM7CisJCWZvciAocmV0ID0gMDsgcmV0IDwgNjsgKytyZXQpCisJCQlhZGRyW3JldF0gPSBvdHBfbWFjX3BbNSAtIHJldF07CisJfQogfQogRVhQT1JUX1NZTUJPTChiZmluX2dldF9ldGhlcl9hZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwppbmRleCAyYjA5YWEzLi4yNDFiNWEyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCkBAIC05OSwxMSArOTksMTEgQEAKIAl9LCB7CiAJCS5uYW1lID0gImtlcm5lbCIsCiAJCS5zaXplID0gMHhlMDAwMCwKLQkJLm9mZnNldCA9IDB4MjAwMDAKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKIAl9LCB7CiAJCS5uYW1lID0gImZpbGUgc3lzdGVtIiwKLQkJLnNpemUgPSAweDcwMDAwMCwKLQkJLm9mZnNldCA9IDB4MDAxMDAwMDAsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKIAl9CiB9OwogCkBAIC0yOTgsNiArMjk4LDE5IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7CisJLnN0YXJ0ID0gMCwKKwkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7CisJLm5hbWUgPSAic2ltcGxlLWdwaW8iLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC0zNTAsNiArMzYzLDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogCSZpMmNfZ3Bpb19kZXZpY2UsCiAjZW5kaWYKKworCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV6a2l0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYwppbmRleCBhNjQ1ZjZmLi5iMmFjNDgxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzdGFtcF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSAgID0gIkJvb3Rsb2FkZXIiLAotCQkuc2l6ZSAgID0gMHgyMDAwMCwKKwkJLnNpemUgICA9IDB4NDAwMDAsCiAJCS5vZmZzZXQgPSAwLAogCX0sIHsKIAkJLm5hbWUgICA9ICJLZXJuZWwiLApAQCAtMTYwLDE3ICsxNjAsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBiZmluX3NwaV9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSA9ICJib290bG9hZGVyIiwKLQkJLnNpemUgPSAweDAwMDIwMDAwLAorCQkuc2l6ZSA9IDB4MDAwNDAwMDAsCiAJCS5vZmZzZXQgPSAwLAogCQkubWFza19mbGFncyA9IE1URF9DQVBfUk9NCiAJfSwgewogCQkubmFtZSA9ICJrZXJuZWwiLAogCQkuc2l6ZSA9IDB4ZTAwMDAsCi0JCS5vZmZzZXQgPSAweDIwMDAwCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCiAJfSwgewogCQkubmFtZSA9ICJmaWxlIHN5c3RlbSIsCi0JCS5zaXplID0gMHg3MDAwMDAsCi0JCS5vZmZzZXQgPSAweDAwMTAwMDAwLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCiAJfQogfTsKIApAQCAtMjEyLDEzICsyMTIsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQUQ1MzA0KSB8fCBkZWZpbmVkKENPTkZJR19BRDUzMDRfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIGFkNTMwNF9jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAwLAotCS5iaXRzX3Blcl93b3JkID0gMTYsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDEsCkBAIC0zMDgsMTcgKzMwMSw2IEBACiAJfSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQUQ1MzA0KSB8fCBkZWZpbmVkKENPTkZJR19BRDUzMDRfTU9EVUxFKQotCXsKLQkJLm1vZGFsaWFzID0gImFkNTMwNF9zcGkiLAotCQkubWF4X3NwZWVkX2h6ID0gMTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KLQkJLmJ1c19udW0gPSAwLAotCQkuY2hpcF9zZWxlY3QgPSAyLAotCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmYWQ1MzA0X2NoaXBfaW5mbywKLQkJLm1vZGUgPSBTUElfTU9ERV8yLAotCX0sCi0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWKSB8fCBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWX01PRFVMRSkKIAl7CiAJCS5tb2RhbGlhcyA9ICJzcGlkZXYiLApAQCAtNDU3LDYgKzQzOSwxOSBAQAogfTsKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0geworCS5zdGFydCA9IDAsCisJLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0geworCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAorfTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KIApAQCAtNTE4LDYgKzUxMyw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKIAkmaTJjX2dwaW9fZGV2aWNlLAogI2VuZGlmCisKKwkmYmZpbl9ncGlvc19kZXZpY2UsCiAJJnN0YW1wX2ZsYXNoX2RldmljZSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZ2VuZXJpY19ib2FyZC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9nZW5lcmljX2JvYXJkLmMKaW5kZXggOGEzMzk3ZC4uYzk1Mzk1YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9nZW5lcmljX2JvYXJkLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9nZW5lcmljX2JvYXJkLmMKQEAgLTM3MSwxMyArMzcxLDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FENTMwNCkgfHwgZGVmaW5lZChDT05GSUdfQUQ1MzA0X01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBhZDUzMDRfY2hpcF9pbmZvID0gewotCS5lbmFibGVfZG1hID0gMCwKLQkuYml0c19wZXJfd29yZCA9IDE2LAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwKQEAgLTQ4MywxNyArNDc2LDYgQEAKIAkJLm1vZGUgPSBTUElfTU9ERV8zLAogCX0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BRDUzMDQpIHx8IGRlZmluZWQoQ09ORklHX0FENTMwNF9NT0RVTEUpCi0JewotCQkubW9kYWxpYXMgPSAiYWQ1MzA0X3NwaSIsCi0JCS5tYXhfc3BlZWRfaHogPSAxMjUwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwotCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDIsCi0JCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZhZDUzMDRfY2hpcF9pbmZvLAotCQkubW9kZSA9IFNQSV9NT0RFXzIsCi0JfSwKLSNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKIAl7CiAJCS5tb2RhbGlhcwkJPSAiYWQ3ODc3IiwKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwppbmRleCA5ZTIyNzdlLi5lYTgzMTQ4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCkBAIC0xMjgsNiArMTI4LDE5IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7CisJLnN0YXJ0ID0gMCwKKwkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7CisJLm5hbWUgPSAic2ltcGxlLWdwaW8iLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9DRlBDTUNJQSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9DRlBDTUNJQV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fcGNtY2lhX2NmX3Jlc291cmNlc1tdID0gewogCXsKQEAgLTM0Myw3ICszNTYsNyBAQAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHN0YW1wX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgID0gIkJvb3Rsb2FkZXIiLAotCQkuc2l6ZSAgICAgICA9IDB4MjAwMDAsCisJCS5zaXplICAgICAgID0gMHg0MDAwMCwKIAkJLm9mZnNldCAgICAgPSAwLAogCX0sIHsKIAkJLm5hbWUgICAgICAgPSAiS2VybmVsIiwKQEAgLTM1MSw3ICszNjQsNyBAQAogCQkub2Zmc2V0ICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKIAl9LCB7CiAJCS5uYW1lICAgICAgID0gIlJvb3RGUyIsCi0JCS5zaXplICAgICAgID0gMHg0MDAwMDAgLSAweDIwMDAwIC0gMHhFMDAwMCAtIDB4MTAwMDAsCisJCS5zaXplICAgICAgID0gMHg0MDAwMDAgLSAweDQwMDAwIC0gMHhFMDAwMCAtIDB4MTAwMDAsCiAJCS5vZmZzZXQgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAogCX0sIHsKIAkJLm5hbWUgICAgICAgPSAiTUFDIEFkZHJlc3MiLApAQCAtMzkxLDE3ICs0MDQsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBiZmluX3NwaV9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSA9ICJib290bG9hZGVyIiwKLQkJLnNpemUgPSAweDAwMDIwMDAwLAorCQkuc2l6ZSA9IDB4MDAwNDAwMDAsCiAJCS5vZmZzZXQgPSAwLAogCQkubWFza19mbGFncyA9IE1URF9DQVBfUk9NCiAJfSwgewogCQkubmFtZSA9ICJrZXJuZWwiLAogCQkuc2l6ZSA9IDB4ZTAwMDAsCi0JCS5vZmZzZXQgPSAweDIwMDAwCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCiAJfSwgewogCQkubmFtZSA9ICJmaWxlIHN5c3RlbSIsCi0JCS5zaXplID0gMHg3MDAwMDAsCi0JCS5vZmZzZXQgPSAweDAwMTAwMDAwLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCiAJfQogfTsKIApAQCAtNDU5LDEzICs0NzIsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQUQ1MzA0KSB8fCBkZWZpbmVkKENPTkZJR19BRDUzMDRfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIGFkNTMwNF9jaGlwX2luZm8gPSB7Ci0JLmVuYWJsZV9kbWEgPSAwLAotCS5iaXRzX3Blcl93b3JkID0gMTYsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLApAQCAtNTc4LDE3ICs1ODQsNiBAQAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJfSwKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FENTMwNCkgfHwgZGVmaW5lZChDT05GSUdfQUQ1MzA0X01PRFVMRSkKLQl7Ci0JCS5tb2RhbGlhcyA9ICJhZDUzMDRfc3BpIiwKLQkJLm1heF9zcGVlZF9oeiA9IDEyNTAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMiwKLQkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAotCQkuY29udHJvbGxlcl9kYXRhID0gJmFkNTMwNF9jaGlwX2luZm8sCi0JCS5tb2RlID0gU1BJX01PREVfMiwKLQl9LAotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQogCXsKIAkJLm1vZGFsaWFzCQk9ICJhZDc4NzciLApAQCAtODIxLDYgKzgxNiw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCiAJJmJmaW5fZGV2aWNlX2dwaW9rZXlzLAogI2VuZGlmCisKKwkmYmZpbl9ncGlvc19kZXZpY2UsCiAJJnN0YW1wX2ZsYXNoX2RldmljZSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCA5MTZlOTYzLi40MDg0NmFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC0yODUsOCArMjg1LDggQEAKIAl9LAogCXsKIAkJLm5hbWUgPSAiRmlsZSBTeXN0ZW0iLAotCQkub2Zmc2V0ID0gNCAqIFNJWkVfMU0sCi0JCS5zaXplID0gKDI1NiAtIDQpICogU0laRV8xTSwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAogCX0sCiB9OwogCkBAIC0zMjMsNyArMzIzLDcgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1NESF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TREhfQkZJTikKKyNpZiBkZWZpbmVkKENPTkZJR19TREhfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0RIX0JGSU5fTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmY1NHhfc2RoX2RldmljZSA9IHsKIAkubmFtZSA9ICJiZmluLXNkaCIsCiAJLmlkID0gMCwKQEAgLTMzMyw3ICszMzMsNyBAQAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGV6a2l0X3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgID0gIkJvb3Rsb2FkZXIiLAotCQkuc2l6ZSAgICAgICA9IDB4MjAwMDAsCisJCS5zaXplICAgICAgID0gMHg0MDAwMCwKIAkJLm9mZnNldCAgICAgPSAwLAogCX0sIHsKIAkJLm5hbWUgICAgICAgPSAiS2VybmVsIiwKQEAgLTM4MSw4ICszODEsOCBAQAogCQkubWFza19mbGFncyA9IE1URF9DQVBfUk9NCiAJfSwgewogCQkubmFtZSA9ICJsaW51eCBrZXJuZWwiLAotCQkuc2l6ZSA9IDB4MWMwMDAwLAotCQkub2Zmc2V0ID0gMHg0MDAwMAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCiAJfQogfTsKIApAQCAtNTk0LDYgKzU5NCwxOSBAQAogfTsKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0geworCS5zdGFydCA9IDAsCisJLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0geworCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmV6a2l0X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKIAkmcnRjX2RldmljZSwKQEAgLTYyMyw3ICs2MzYsNyBAQAogCSZiZjV4eF9uYW5kX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU0RIX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NESF9CRklOKQorI2lmIGRlZmluZWQoQ09ORklHX1NESF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TREhfQkZJTl9NT0RVTEUpCiAJJmJmNTR4X3NkaF9kZXZpY2UsCiAjZW5kaWYKIApAQCAtNjQ2LDYgKzY1OSw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCiAJJmJmaW5fZGV2aWNlX2dwaW9rZXlzLAogI2VuZGlmCisKKwkmYmZpbl9ncGlvc19kZXZpY2UsCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYwppbmRleCAzNzQ4MDNhLi5mNTQ3OTI5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCkBAIC0yNyw2ICsyNyw4IEBACiAgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKwogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9oZWFkLlMKaW5kZXggNzRmZTI1OC4uNDYyMjJhNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaGVhZC5TCkBAIC0yOCw2ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL3RyYWNlLmg+CiAjaWYgQ09ORklHX0JGSU5fS0VSTkVMX0NMT0NLCkBAIC00NCwxMCArNDUsOSBAQAogCiAjZGVmaW5lIElOSVRJQUxfU1RBQ0sgICAweEZGQjAxMDAwCiAKLS50ZXh0CitfX0lOSVQKIAogRU5UUlkoX19zdGFydCkKLUVOVFJZKF9fc3RleHQpCiAJLyogUjA6IGFyZ3VtZW50IG9mIGNvbW1hbmQgbGluZSBzdHJpbmcsIHBhc3NlZCBmcm9tIHVib290LCBzYXZlIGl0ICovCiAJUjcgPSBSMDsKIAkvKiBFbmFibGUgQ3ljbGUgQ291bnRlciBhbmQgTmVzdGluZyBPZiBJbnRlcnJ1cHRzICovCkBAIC0yMTMsNiArMjEzLDcgQEAKIAogLkxXQUlUX0hFUkU6CiAJanVtcCAuTFdBSVRfSEVSRTsKK0VORFBST0MoX19zdGFydCkKIAogRU5UUlkoX3JlYWxfc3RhcnQpCiAJWyAtLSBzcCBdID0gcmV0aTsKQEAgLTI4NSw2ICsyODYsOSBAQAogCWNhbGwgX3N0YXJ0X2tlcm5lbDsKIC5MX2V4aXQ6CiAJanVtcC5zCS5MX2V4aXQ7CitFTkRQUk9DKF9yZWFsX3N0YXJ0KQorCitfX0ZJTklUCiAKIC5zZWN0aW9uIC5sMS50ZXh0CiAjaWYgQ09ORklHX0JGSU5fS0VSTkVMX0NMT0NLCkBAIC00NTAsNiArNDU0LDcgQEAKIAlTU1lOQzsKIAogCVJUUzsKK0VORFBST0MoX3N0YXJ0X2RtYV9jb2RlKQogI2VuZGlmIC8qIENPTkZJR19CRklOX0tFUk5FTF9DTE9DSyAqLwogCiAuZGF0YQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCmluZGV4IDQzYzFiMDkuLmQzNTdmNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGV6a2l0X3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgID0gIkJvb3Rsb2FkZXIiLAotCQkuc2l6ZSAgICAgICA9IDB4MjAwMDAsCisJCS5zaXplICAgICAgID0gMHg0MDAwMCwKIAkJLm9mZnNldCAgICAgPSAwLAogCX0sIHsKIAkJLm5hbWUgICAgICAgPSAiS2VybmVsIiwKQEAgLTM4OSw2ICszODksMTkgQEAKIH07CiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKKwkuc3RhcnQgPSAwLAorCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKKwkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKK307CisKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ0Niw2ICs0NTksNyBAQAogCSZpc3AxMzYyX2hjZF9kZXZpY2UsCiAjZW5kaWYKIAorCSZiZmluX2dwaW9zX2RldmljZSwKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9kcG1jLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuUwppbmRleCBiODBkZGQ4Li45ZDQ1YWEzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuUwpAQCAtMzEsMTQwICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLS50ZXh0Ci0KLUVOVFJZKF91bm1hc2tfd2RvZ193YWtldXBfZXZ0KQotCVstLVNQXSA9ICggUjc6MCwgUDU6MCApOwotI2lmIGRlZmluZWQoQ09ORklHX0JGNTYxKQotCVAwLkggPSBoaShTSUNBX0lXUjEpOwotCVAwLkwgPSBsbyhTSUNBX0lXUjEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpIHx8IGRlZmluZWQoQ09ORklHX0JGNTJ4KQotCVAwLmggPSBISShTSUNfSVdSMCk7Ci0JUDAubCA9IExPKFNJQ19JV1IwKTsKLSNlbHNlCi0JUDAuaCA9IEhJKFNJQ19JV1IpOwotCVAwLmwgPSBMTyhTSUNfSVdSKTsKLSNlbmRpZgotCVI3ID0gW1AwXTsKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU2MSkKLQlCSVRTRVQoUjcsIDI3KTsKLSNlbHNlCi0JQklUU0VUKFI3LChJUlFfV0FUQ0ggLSBJVkc3KSk7Ci0jZW5kaWYKLQlbUDBdID0gUjc7Ci0JU1NZTkM7Ci0KLQkoIFI3OjAsIFA1OjAgKSA9IFtTUCsrXTsKLQlSVFM7Ci0KLS5MV1JJVEVfVE9fU1RBVDoKLQkvKiBXaGVuIHdhdGNoIGRvZyB0aW1lciBpcyBlbmFibGVkLCBhIHdyaXRlIHRvIFNUQVQgd2lsbCBsb2FkIHRoZQotCSAqIGNvbnRlbnRzIG9mIENOVCB0byBTVEFUCi0JICovCi0JUjcgPSAweDAwMDAoeik7Ci0jaWYgZGVmaW5lZChDT05GSUdfQkY1NjEpCi0JUDAuaCA9IEhJKFdET0dBX1NUQVQpOwotCVAwLmwgPSBMTyhXRE9HQV9TVEFUKTsKLSNlbHNlCi0JUDAuaCA9IEhJKFdET0dfU1RBVCk7Ci0JUDAubCA9IExPKFdET0dfU1RBVCk7Ci0jZW5kaWYKLQlbUDBdID0gUjc7Ci0JU1NZTkM7Ci0JSlVNUCAuTFNLSVBfV1JJVEVfVE9fU1RBVDsKLQotRU5UUlkoX3Byb2dyYW1fd2RvZ190aW1lcikKLQlbLS1TUF0gPSAoIFI3OjAsIFA1OjAgKTsKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU2MSkKLQlQMC5oID0gSEkoV0RPR0FfQ05UKTsKLQlQMC5sID0gTE8oV0RPR0FfQ05UKTsKLSNlbHNlCi0JUDAuaCA9IEhJKFdET0dfQ05UKTsKLQlQMC5sID0gTE8oV0RPR19DTlQpOwotI2VuZGlmCi0JW1AwXSA9IFIwOwotCVNTWU5DOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1NjEpCi0JUDAuaCA9IEhJKFdET0dBX0NUTCk7Ci0JUDAubCA9IExPKFdET0dBX0NUTCk7Ci0jZWxzZQotCVAwLmggPSBISShXRE9HX0NUTCk7Ci0JUDAubCA9IExPKFdET0dfQ1RMKTsKLSNlbmRpZgotCVI3ID0gV1tQMF0oWik7Ci0JQ0MgPSBCSVRUU1QoUjcsMSk7Ci0JaWYgIUNDIEpVTVAgLkxXUklURV9UT19TVEFUOwotCUNDID0gQklUVFNUKFI3LDIpOwotCWlmICFDQyBKVU1QIC5MV1JJVEVfVE9fU1RBVDsKLQotLkxTS0lQX1dSSVRFX1RPX1NUQVQ6Ci0jaWYgZGVmaW5lZChDT05GSUdfQkY1NjEpCi0JUDAuaCA9IEhJKFdET0dBX0NUTCk7Ci0JUDAubCA9IExPKFdET0dBX0NUTCk7Ci0jZWxzZQotCVAwLmggPSBISShXRE9HX0NUTCk7Ci0JUDAubCA9IExPKFdET0dfQ1RMKTsKLSNlbmRpZgotCVI3ID0gV1tQMF0oWik7Ci0JQklUQ0xSKFI3LDEpOyAgIC8qIEVuYWJsZSBHUCBldmVudCAqLwotCUJJVFNFVChSNywyKTsKLQlXW1AwXSA9IFI3Lkw7Ci0JU1NZTkM7Ci0JTk9QOwotCi0JUjcgPSBXW1AwXShaKTsKLQlCSVRDTFIoUjcsNCk7ICAgLyogRW5hYmxlIHRoZSB3ZG9nIGNvdW50ZXIgKi8KLQlXW1AwXSA9IFI3Lkw7Ci0JU1NZTkM7Ci0KLQkoIFI3OjAsIFA1OjAgKSA9IFtTUCsrXTsKLQlSVFM7Ci0KLUVOVFJZKF9jbGVhcl93ZG9nX3dha2V1cF9ldnQpCi0JWy0tU1BdID0gKCBSNzowLCBQNTowICk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19CRjU2MSkKLQlQMC5oID0gSEkoV0RPR0FfQ1RMKTsKLQlQMC5sID0gTE8oV0RPR0FfQ1RMKTsKLSNlbHNlCi0JUDAuaCA9IEhJKFdET0dfQ1RMKTsKLQlQMC5sID0gTE8oV0RPR19DVEwpOwotI2VuZGlmCi0JUjcgPSAweDBBRDYoWik7Ci0JV1tQMF0gPSBSNy5MOwotCVNTWU5DOwotCi0JUjcgPSBXW1AwXShaKTsKLQlCSVRTRVQoUjcsMTUpOwotCVdbUDBdID0gUjcuTDsKLQlTU1lOQzsKLQotCVI3ID0gV1tQMF0oWik7Ci0JQklUU0VUKFI3LDEpOwotCUJJVFNFVChSNywyKTsKLQlXW1AwXSA9IFI3Lkw7Ci0JU1NZTkM7Ci0KLQkoIFI3OjAsIFA1OjAgKSA9IFtTUCsrXTsKLQlSVFM7Ci0KLUVOVFJZKF9kaXNhYmxlX3dkb2dfdGltZXIpCi0JWy0tU1BdID0gKCBSNzowLCBQNTowICk7Ci0jaWYgZGVmaW5lZChDT05GSUdfQkY1NjEpCi0JUDAuaCA9IEhJKFdET0dBX0NUTCk7Ci0JUDAubCA9IExPKFdET0dBX0NUTCk7Ci0jZWxzZQotCVAwLmggPSBISShXRE9HX0NUTCk7Ci0JUDAubCA9IExPKFdET0dfQ1RMKTsKLSNlbmRpZgotCVI3ID0gMHhBRDYoWik7Ci0JV1tQMF0gPSBSNy5MOwotCVNTWU5DOwotCSggUjc6MCwgUDU6MCApID0gW1NQKytdOwotCVJUUzsKLQotI2lmICFkZWZpbmVkKENPTkZJR19CRjU2MSkKIAogLnNlY3Rpb24gLmwxLnRleHQKIApAQCAtNDU5LDEwICszMjUsMTIgQEAKIAlSVFM7CiAKIEVOVFJZKF9zZXRfcnRjX2lzdGF0KQorI2lmbmRlZiBDT05GSUdfQkY1NjEKIAlQMC5IID0gaGkoUlRDX0lTVEFUKTsKIAlQMC5MID0gbG8oUlRDX0lTVEFUKTsKIAl3W1AwXSA9IFIwLkw7CiAJU1NZTkM7CisjZW5kaWYKIAlSVFM7CiAKIEVOVFJZKF90ZXN0X3BsbF9sb2NrZWQpCkBAIC00NzMsNCArMzQxLDMgQEAKIAlDQyA9IEJJVFRTVChSMCw1KTsKIAlJRiAhQ0MgSlVNUCAxYjsKIAlSVFM7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCAyY2JiN2EwLi5jZWU1NGNlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0xMzY5LDcgKzEzNjksNyBAQAogCS5sb25nIF9zeXNfZXBvbGxfcHdhaXQKIAkubG9uZyBfc3lzX3V0aW1lbnNhdAogCS5sb25nIF9zeXNfc2lnbmFsZmQKLQkubG9uZyBfc3lzX25pX3N5c2NhbGwKKwkubG9uZyBfc3lzX3RpbWVyZmRfY3JlYXRlCiAJLmxvbmcgX3N5c19ldmVudGZkCS8qIDM1MCAqLwogCS5sb25nIF9zeXNfcHJlYWQ2NAogCS5sb25nIF9zeXNfcHdyaXRlNjQKQEAgLTEzNzgsNiArMTM3OCw5IEBACiAJLmxvbmcgX3N5c19nZXRfcm9idXN0X2xpc3QJLyogMzU1ICovCiAJLmxvbmcgX3N5c19mYWxsb2NhdGUKIAkubG9uZyBfc3lzX3NlbXRpbWVkb3AKKwkubG9uZyBfc3lzX3RpbWVyZmRfc2V0dGltZQorCS5sb25nIF9zeXNfdGltZXJmZF9nZXR0aW1lCisKIAkucmVwdCBOUl9zeXNjYWxscy0oLi1fc3lzX2NhbGxfdGFibGUpLzQKIAkubG9uZyBfc3lzX25pX3N5c2NhbGwKIAkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwppbmRleCA4ODA1OTVhLi4yMjVlZjE0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwpAQCAtNzQsNyArNzQsNyBAQAogI2VuZGlmCiAKIHN0cnVjdCBpdmd4IHsKLQkvKiBpcnEgbnVtYmVyIGZvciByZXF1ZXN0X2lycSwgYXZhaWxhYmxlIGluIG1hY2gtYmY1MzMvaXJxLmggKi8KKwkvKiBpcnEgbnVtYmVyIGZvciByZXF1ZXN0X2lycSwgYXZhaWxhYmxlIGluIG1hY2gtYmY1eHgvaXJxLmggKi8KIAl1bnNpZ25lZCBpbnQgaXJxbm87CiAJLyogY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIFNJQ19JU1IgcmVnaXN0ZXIgKi8KIAl1bnNpZ25lZCBpbnQgaXNyZmxhZzsKQEAgLTg2LDcgKzg2LDYgQEAKIAlzdHJ1Y3QgaXZneCAqaXN0b3A7CiB9IGl2ZzdfMTNbSVZHMTMgLSBJVkc3ICsgMV07CiAKLXN0YXRpYyB2b2lkIHNlYXJjaF9JQVIodm9pZCk7CiAKIC8qCiAgKiBTZWFyY2ggU0lDX0lBUiBhbmQgZmlsbCB0YWJsZXMgd2l0aCB0aGUgaXJxdmFsdWVzCkBAIC0xMjAsMTAgKzExOSwxMCBAQAogfQogCiAvKgotICogVGhpcyBpcyBmb3IgQkY1MzMgaW50ZXJuYWwgSVJRcworICogVGhpcyBpcyBmb3IgY29yZSBpbnRlcm5hbCBJUlFzCiAgKi8KIAotc3RhdGljIHZvaWQgYWNrX25vb3AodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGJmaW5fYWNrX25vb3AodW5zaWduZWQgaW50IGlycSkKIHsKIAkvKiBEdW1teSBmdW5jdGlvbi4gICovCiB9CkBAIC0xNTYsMTEgKzE1NSwxMSBAQAogewogI2lmZGVmIENPTkZJR19CRjUzeAogCWJmaW5fd3JpdGVfU0lDX0lNQVNLKGJmaW5fcmVhZF9TSUNfSU1BU0soKSAmCi0JCQkgICAgIH4oMSA8PCAoaXJxIC0gKElSUV9DT1JFVE1SICsgMSkpKSk7CisJCQkgICAgIH4oMSA8PCBTSUNfU1lTSVJRKGlycSkpKTsKICNlbHNlCiAJdW5zaWduZWQgbWFza19iYW5rLCBtYXNrX2JpdDsKLQltYXNrX2JhbmsgPSAoaXJxIC0gKElSUV9DT1JFVE1SICsgMSkpIC8gMzI7Ci0JbWFza19iaXQgPSAoaXJxIC0gKElSUV9DT1JFVE1SICsgMSkpICUgMzI7CisJbWFza19iYW5rID0gU0lDX1NZU0lSUShpcnEpIC8gMzI7CisJbWFza19iaXQgPSBTSUNfU1lTSVJRKGlycSkgJSAzMjsKIAliZmluX3dyaXRlX1NJQ19JTUFTSyhtYXNrX2JhbmssIGJmaW5fcmVhZF9TSUNfSU1BU0sobWFza19iYW5rKSAmCiAJCQkgICAgIH4oMSA8PCBtYXNrX2JpdCkpOwogI2VuZGlmCkBAIC0xNzEsMTEgKzE3MCwxMSBAQAogewogI2lmZGVmIENPTkZJR19CRjUzeAogCWJmaW5fd3JpdGVfU0lDX0lNQVNLKGJmaW5fcmVhZF9TSUNfSU1BU0soKSB8Ci0JCQkgICAgICgxIDw8IChpcnEgLSAoSVJRX0NPUkVUTVIgKyAxKSkpKTsKKwkJCSAgICAgKDEgPDwgU0lDX1NZU0lSUShpcnEpKSk7CiAjZWxzZQogCXVuc2lnbmVkIG1hc2tfYmFuaywgbWFza19iaXQ7Ci0JbWFza19iYW5rID0gKGlycSAtIChJUlFfQ09SRVRNUiArIDEpKSAvIDMyOwotCW1hc2tfYml0ID0gKGlycSAtIChJUlFfQ09SRVRNUiArIDEpKSAlIDMyOworCW1hc2tfYmFuayA9IFNJQ19TWVNJUlEoaXJxKSAvIDMyOworCW1hc2tfYml0ID0gU0lDX1NZU0lSUShpcnEpICUgMzI7CiAJYmZpbl93cml0ZV9TSUNfSU1BU0sobWFza19iYW5rLCBiZmluX3JlYWRfU0lDX0lNQVNLKG1hc2tfYmFuaykgfAogCQkJICAgICAoMSA8PCBtYXNrX2JpdCkpOwogI2VuZGlmCkBAIC0xODcsOCArMTg2LDggQEAKIHsKIAl1bnNpZ25lZCBiYW5rLCBiaXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQliYW5rID0gKGlycSAtIChJUlFfQ09SRVRNUiArIDEpKSAvIDMyOwotCWJpdCA9IChpcnEgLSAoSVJRX0NPUkVUTVIgKyAxKSkgJSAzMjsKKwliYW5rID0gU0lDX1NZU0lSUShpcnEpIC8gMzI7CisJYml0ID0gU0lDX1NZU0lSUShpcnEpICUgMzI7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTIwNCwxNSArMjAzLDE4IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiZmluX2NvcmVfaXJxY2hpcCA9IHsKLQkuYWNrID0gYWNrX25vb3AsCisJLmFjayA9IGJmaW5fYWNrX25vb3AsCiAJLm1hc2sgPSBiZmluX2NvcmVfbWFza19pcnEsCiAJLnVubWFzayA9IGJmaW5fY29yZV91bm1hc2tfaXJxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiZmluX2ludGVybmFsX2lycWNoaXAgPSB7Ci0JLmFjayA9IGFja19ub29wLAorCS5hY2sgPSBiZmluX2Fja19ub29wLAogCS5tYXNrID0gYmZpbl9pbnRlcm5hbF9tYXNrX2lycSwKIAkudW5tYXNrID0gYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxLAorCS5tYXNrX2FjayA9IGJmaW5faW50ZXJuYWxfbWFza19pcnEsCisJLmRpc2FibGUgPSBiZmluX2ludGVybmFsX21hc2tfaXJxLAorCS5lbmFibGUgPSBiZmluX2ludGVybmFsX3VubWFza19pcnEsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnNldF93YWtlID0gYmZpbl9pbnRlcm5hbF9zZXRfd2FrZSwKICNlbmRpZgpAQCAtMjIxLDM4ICsyMjMsMjMgQEAKICNpZmRlZiBCRjUzN19HRU5FUklDX0VSUk9SX0lOVF9ERU1VWAogc3RhdGljIGludCBlcnJvcl9pbnRfbWFzazsKIAotc3RhdGljIHZvaWQgYmZpbl9nZW5lcmljX2Vycm9yX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQotfQotCiBzdGF0aWMgdm9pZCBiZmluX2dlbmVyaWNfZXJyb3JfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAllcnJvcl9pbnRfbWFzayAmPSB+KDFMIDw8IChpcnEgLSBJUlFfUFBJX0VSUk9SKSk7CiAKLQlpZiAoIWVycm9yX2ludF9tYXNrKSB7Ci0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWJmaW5fd3JpdGVfU0lDX0lNQVNLKGJmaW5fcmVhZF9TSUNfSU1BU0soKSAmCi0JCQkJICAgICB+KDEgPDwgKElSUV9HRU5FUklDX0VSUk9SIC0KLQkJCQkJKElSUV9DT1JFVE1SICsgMSkpKSk7Ci0JCVNTWU5DKCk7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQl9CisJaWYgKCFlcnJvcl9pbnRfbWFzaykKKwkJYmZpbl9pbnRlcm5hbF9tYXNrX2lycShJUlFfR0VORVJJQ19FUlJPUik7CiB9CiAKIHN0YXRpYyB2b2lkIGJmaW5fZ2VuZXJpY19lcnJvcl91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQliZmluX3dyaXRlX1NJQ19JTUFTSyhiZmluX3JlYWRfU0lDX0lNQVNLKCkgfCAxIDw8Ci0JCQkgICAgIChJUlFfR0VORVJJQ19FUlJPUiAtIChJUlFfQ09SRVRNUiArIDEpKSk7Ci0JU1NZTkMoKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KKwliZmluX2ludGVybmFsX3VubWFza19pcnEoSVJRX0dFTkVSSUNfRVJST1IpOwogCWVycm9yX2ludF9tYXNrIHw9IDFMIDw8IChpcnEgLSBJUlFfUFBJX0VSUk9SKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiZmluX2dlbmVyaWNfZXJyb3JfaXJxY2hpcCA9IHsKLQkuYWNrID0gYmZpbl9nZW5lcmljX2Vycm9yX2Fja19pcnEsCisJLmFjayA9IGJmaW5fYWNrX25vb3AsCisJLm1hc2tfYWNrID0gYmZpbl9nZW5lcmljX2Vycm9yX21hc2tfaXJxLAogCS5tYXNrID0gYmZpbl9nZW5lcmljX2Vycm9yX21hc2tfaXJxLAogCS51bm1hc2sgPSBiZmluX2dlbmVyaWNfZXJyb3JfdW5tYXNrX2lycSwKIH07CkBAIC02MDgsNyArNTk1LDcgQEAKIAkoc3RydWN0IHBpbl9pbnRfdCAqKVBJTlQzX01BU0tfU0VULAogfTsKIAotdW5zaWduZWQgc2hvcnQgZ2V0X2lycV9iYXNlKHU4IGJhbmssIHU4IGJtYXApCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZ2V0X2lycV9iYXNlKHU4IGJhbmssIHU4IGJtYXApCiB7CiAKIAl1MTYgaXJxX2Jhc2U7CkBAIC05NjksMTcgKzk1NiwxMiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KSB8fCBkZWZpbmVkKENPTkZJR19CRjUyeCkgfHwgZGVmaW5lZChDT05GSUdfQkY1NjEpCiAJYmZpbl93cml0ZV9TSUNfSU1BU0swKFNJQ19VTk1BU0tfQUxMKTsKIAliZmluX3dyaXRlX1NJQ19JTUFTSzEoU0lDX1VOTUFTS19BTEwpOwotCWJmaW5fd3JpdGVfU0lDX0lXUjAoSVdSX0VOQUJMRV9BTEwpOwotCWJmaW5fd3JpdGVfU0lDX0lXUjEoSVdSX0VOQUJMRV9BTEwpOwogIyBpZmRlZiBDT05GSUdfQkY1NHgKIAliZmluX3dyaXRlX1NJQ19JTUFTSzIoU0lDX1VOTUFTS19BTEwpOwotCWJmaW5fd3JpdGVfU0lDX0lXUjIoSVdSX0VOQUJMRV9BTEwpOwogIyBlbmRpZgogI2Vsc2UKIAliZmluX3dyaXRlX1NJQ19JTUFTSyhTSUNfVU5NQVNLX0FMTCk7Ci0JYmZpbl93cml0ZV9TSUNfSVdSKElXUl9FTkFCTEVfQUxMKTsKICNlbmRpZgotCVNTWU5DKCk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCkBAIC0xMDAxLDkwICs5ODMsNTMgQEAKIAkJCXNldF9pcnFfY2hpcChpcnEsICZiZmluX2NvcmVfaXJxY2hpcCk7CiAJCWVsc2UKIAkJCXNldF9pcnFfY2hpcChpcnEsICZiZmluX2ludGVybmFsX2lycWNoaXApOwotI2lmZGVmIEJGNTM3X0dFTkVSSUNfRVJST1JfSU5UX0RFTVVYCi0JCWlmIChpcnEgIT0gSVJRX0dFTkVSSUNfRVJST1IpIHsKLSNlbmRpZgogCi0JCQlzd2l0Y2ggKGlycSkgeworCQlzd2l0Y2ggKGlycSkgewogI2lmIGRlZmluZWQoQ09ORklHX0JGNTN4KQotCQkJY2FzZSBJUlFfUFJPR19JTlRBOgotCQkJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSwKLQkJCQkJCQliZmluX2RlbXV4X2dwaW9faXJxKTsKLQkJCQlicmVhazsKKwkJY2FzZSBJUlFfUFJPR19JTlRBOgogIyBpZiBkZWZpbmVkKEJGNTM3X0ZBTUlMWSkgJiYgIShkZWZpbmVkKENPTkZJR19CRklOX01BQykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfTU9EVUxFKSkKLQkJCWNhc2UgSVJRX01BQ19SWDoKLQkJCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsCi0JCQkJCQkJYmZpbl9kZW11eF9ncGlvX2lycSk7Ci0JCQkJYnJlYWs7CisJCWNhc2UgSVJRX01BQ19SWDoKICMgZW5kaWYKICNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTR4KQotCQkJY2FzZSBJUlFfUElOVDA6Ci0JCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLAotCQkJCQkJCWJmaW5fZGVtdXhfZ3Bpb19pcnEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJUlFfUElOVDE6Ci0JCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLAotCQkJCQkJCWJmaW5fZGVtdXhfZ3Bpb19pcnEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJUlFfUElOVDI6Ci0JCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLAotCQkJCQkJCWJmaW5fZGVtdXhfZ3Bpb19pcnEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJUlFfUElOVDM6Ci0JCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLAotCQkJCQkJCWJmaW5fZGVtdXhfZ3Bpb19pcnEpOwotCQkJCWJyZWFrOworCQljYXNlIElSUV9QSU5UMDoKKwkJY2FzZSBJUlFfUElOVDE6CisJCWNhc2UgSVJRX1BJTlQyOgorCQljYXNlIElSUV9QSU5UMzoKICNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTJ4KQotCQkJY2FzZSBJUlFfUE9SVEZfSU5UQToKLQkJCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsCi0JCQkJCQkJYmZpbl9kZW11eF9ncGlvX2lycSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElSUV9QT1JUR19JTlRBOgotCQkJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSwKLQkJCQkJCQliZmluX2RlbXV4X2dwaW9faXJxKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVJRX1BPUlRIX0lOVEE6Ci0JCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLAotCQkJCQkJCWJmaW5fZGVtdXhfZ3Bpb19pcnEpOwotCQkJCWJyZWFrOworCQljYXNlIElSUV9QT1JURl9JTlRBOgorCQljYXNlIElSUV9QT1JUR19JTlRBOgorCQljYXNlIElSUV9QT1JUSF9JTlRBOgogI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1NjEpCi0JCQljYXNlIElSUV9QUk9HMF9JTlRBOgotCQkJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSwKLQkJCQkJCQliZmluX2RlbXV4X2dwaW9faXJxKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVJRX1BST0cxX0lOVEE6Ci0JCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLAotCQkJCQkJCWJmaW5fZGVtdXhfZ3Bpb19pcnEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJUlFfUFJPRzJfSU5UQToKLQkJCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsCi0JCQkJCQkJYmZpbl9kZW11eF9ncGlvX2lycSk7Ci0JCQkJYnJlYWs7CisJCWNhc2UgSVJRX1BST0cwX0lOVEE6CisJCWNhc2UgSVJRX1BST0cxX0lOVEE6CisJCWNhc2UgSVJRX1BST0cyX0lOVEE6CiAjZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX3NpbXBsZV9pcnEpOwotCQkJCWJyZWFrOwotCQkJfQotCisJCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsCisJCQkJCQliZmluX2RlbXV4X2dwaW9faXJxKTsKKwkJCWJyZWFrOwogI2lmZGVmIEJGNTM3X0dFTkVSSUNfRVJST1JfSU5UX0RFTVVYCi0JCX0gZWxzZSB7CisJCWNhc2UgSVJRX0dFTkVSSUNfRVJST1I6CiAJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBiZmluX2RlbXV4X2Vycm9yX2lycSk7CisKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfc2ltcGxlX2lycSk7CisJCQlicmVhazsKIAkJfQotI2VuZGlmCiAJfQorCiAjaWZkZWYgQkY1MzdfR0VORVJJQ19FUlJPUl9JTlRfREVNVVgKLQlmb3IgKGlycSA9IElSUV9QUElfRVJST1I7IGlycSA8PSBJUlFfVUFSVDFfRVJST1I7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZiZmluX2dlbmVyaWNfZXJyb3JfaXJxY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCX0KKwlmb3IgKGlycSA9IElSUV9QUElfRVJST1I7IGlycSA8PSBJUlFfVUFSVDFfRVJST1I7IGlycSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmYmZpbl9nZW5lcmljX2Vycm9yX2lycWNoaXAsCisJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKICNlbmRpZgogCi0JZm9yIChpcnEgPSBHUElPX0lSUV9CQVNFOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgeworCS8qIGlmIGNvbmZpZ3VyZWQgYXMgZWRnZSwgdGhlbiB3aWxsIGJlIGNoYW5nZWQgdG8gZG9fZWRnZV9JUlEgKi8KKwlmb3IgKGlycSA9IEdQSU9fSVJRX0JBU0U7IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmYmZpbl9ncGlvX2lycWNoaXAsCisJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAotCQlzZXRfaXJxX2NoaXAoaXJxLCAmYmZpbl9ncGlvX2lycWNoaXApOwotCQkvKiBpZiBjb25maWd1cmVkIGFzIGVkZ2UsIHRoZW4gd2lsbCBiZSBjaGFuZ2VkIHRvIGRvX2VkZ2VfSVJRICovCi0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCX0KIAogCWJmaW5fd3JpdGVfSU1BU0soMCk7CiAJQ1NZTkMoKTsKQEAgLTExMDYsNiArMTA1MSwxNiBAQAogCSAgICBJTUFTS19JVkcxNCB8IElNQVNLX0lWRzEzIHwgSU1BU0tfSVZHMTIgfCBJTUFTS19JVkcxMSB8CiAJICAgIElNQVNLX0lWRzEwIHwgSU1BU0tfSVZHOSB8IElNQVNLX0lWRzggfCBJTUFTS19JVkc3IHwgSU1BU0tfSVZHSFc7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkgfHwgZGVmaW5lZChDT05GSUdfQkY1MngpIHx8IGRlZmluZWQoQ09ORklHX0JGNTYxKQorCWJmaW5fd3JpdGVfU0lDX0lXUjAoSVdSX0VOQUJMRV9BTEwpOworCWJmaW5fd3JpdGVfU0lDX0lXUjEoSVdSX0VOQUJMRV9BTEwpOworIyBpZmRlZiBDT05GSUdfQkY1NHgKKwliZmluX3dyaXRlX1NJQ19JV1IyKElXUl9FTkFCTEVfQUxMKTsKKyMgZW5kaWYKKyNlbHNlCisJYmZpbl93cml0ZV9TSUNfSVdSKElXUl9FTkFCTEVfQUxMKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMjIsNyArMTA3Nyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpIHx8IGRlZmluZWQoQ09ORklHX0JGNTJ4KSB8fCBkZWZpbmVkKENPTkZJR19CRjU2MSkKIAkJdW5zaWduZWQgbG9uZyBzaWNfc3RhdHVzWzNdOwogCi0JCVNTWU5DKCk7CiAJCXNpY19zdGF0dXNbMF0gPSBiZmluX3JlYWRfU0lDX0lTUjAoKSAmIGJmaW5fcmVhZF9TSUNfSU1BU0swKCk7CiAJCXNpY19zdGF0dXNbMV0gPSBiZmluX3JlYWRfU0lDX0lTUjEoKSAmIGJmaW5fcmVhZF9TSUNfSU1BU0sxKCk7CiAjaWZkZWYgQ09ORklHX0JGNTR4CkBAIC0xMTM4LDcgKzEwOTIsNyBAQAogCQl9CiAjZWxzZQogCQl1bnNpZ25lZCBsb25nIHNpY19zdGF0dXM7Ci0JCVNTWU5DKCk7CisKIAkJc2ljX3N0YXR1cyA9IGJmaW5fcmVhZF9TSUNfSU1BU0soKSAmIGJmaW5fcmVhZF9TSUNfSVNSKCk7CiAKIAkJZm9yICg7OyBpdmcrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwppbmRleCAxZjUxNmM1Li5lYzMxNDFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2luaXQuYworKysgYi9hcmNoL2JsYWNrZmluL21tL2luaXQuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJfQogfQogCi1zdGF0aWMgX19pbml0IHZvaWQgZnJlZV9pbml0X3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIHZvaWQgX19pbml0IGZyZWVfaW5pdF9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJLyogbmV4dCB0byBjaGVjayB0aGF0IHRoZSBwYWdlIHdlIGZyZWUgaXMgbm90IGEgcGFydGlhbCBwYWdlICovCkBAIC0yMDMsNyArMjAzLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIF9faW5pdCBmcmVlX2luaXRtZW0odm9pZCkKK3ZvaWQgX19pbml0X3JlZm9rIGZyZWVfaW5pdG1lbSh2b2lkKQogewogI2lmIGRlZmluZWQgQ09ORklHX1JBTUtFUk5FTCAmJiAhZGVmaW5lZCBDT05GSUdfTVBVCiAJZnJlZV9pbml0X3BhZ2VzKCJ1bnVzZWQga2VybmVsIG1lbW9yeSIsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jCmluZGV4IDkzMTBhN2IuLjUyNTQ4M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3ZpbnRvLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9zdHJpbmcuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvc3RyaW5nLmMKaW5kZXggNzE2MWEyYi4uYzdiZDZlYiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9zdHJpbmcuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvbGliL3N0cmluZy5jCkBAIC0xLDU1ICsxLDU5IEBACi0vKiMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojKi8KLS8qIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgRlVOQ1RJT04gTkFNRTogbWVtY3B5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIFBBUkFNRVRFUlM6ICB2b2lkKiBkc3Q7ICAgRGVzdGluYXRpb24gYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgICAgICAgICAgICAgIHZvaWQqIHNyYzsgICBTb3VyY2UgYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyAgICAgICAgICAgICAgaW50ICAgbGVuOyAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LiAgICAgICAgICAgICAgICAgICAgICAqLwotLyojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgUkVUVVJOUzogICAgIGRzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIERFU0NSSVBUSU9OOiBDb3BpZXMgbGVuIGJ5dGVzIG9mIG1lbW9yeSBmcm9tIHNyYyB0byBkc3QuICBObyBndWFyYW50ZWVzICovCi0vKiMgICAgICAgICAgICAgIGFib3V0IGNvcHlpbmcgb2Ygb3ZlcmxhcHBpbmcgbWVtb3J5IGFyZWFzLiBUaGlzIHJvdXRpbmUgaXMgKi8KLS8qIyAgICAgICAgICAgICAgdmVyeSBzZW5zaXRpdmUgdG8gY29tcGlsZXIgY2hhbmdlcyBpbiByZWdpc3RlciBhbGxvY2F0aW9uLiAqLwotLyojICAgICAgICAgICAgICBTaG91bGQgcmVhbGx5IGJlIHJld3JpdHRlbiB0byBhdm9pZCB0aGlzIHByb2JsZW0uICAgICAgICAgICovCi0vKiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgSElTVE9SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIERBVEUgICAgICBOQU1FICAgICAgICAgICAgQ0hBTkdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgLS0tLSAgICAgIC0tLS0gICAgICAgICAgICAtLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyA5NDEwMDcgICAgS2VubnkgUiAgICAgICAgIENyZWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIDk0MTAxMSAgICBLZW5ueSBSICAgICAgICAgTG90cyBvZiBvcHRpbWl6YXRpb25zIGFuZCBpbmxpbmluZy4gICAgICAgICAgICovCi0vKiMgOTQxMTI5ICAgIFVsZiBBICAgICAgICAgICBBZGFwdGVkIGZvciB1c2UgaW4gbGliYy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyA5NTAyMTYgICAgSFAgICAgICAgICAgICAgIE49PTAgZm9yZ290dGVuIGlmIG5vbi1hbGlnbmVkIHNyYy9kc3QuICAgICAgICAqLwotLyojICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkZWQgc29tZSBvcHRpbWl6YXRpb25zLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgMDAxMDI1ICAgIEhQICAgICAgICAgICAgICBNYWtlIHNyYyBhbmQgZHN0IGNoYXIgKi4gIEFsaWduIGRzdCB0bwkgICAgKi8KLS8qIwkJCSAgICAgIGR3b3JkLCBub3QganVzdCB3b3JkLWlmLWJvdGgtc3JjLWFuZC1kc3QtCSAgICAqLwotLyojCQkJICAgICAgYXJlLW1pc2FsaWduZWQuCQkJCSAgICAqLwotLyojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEEgbWVtY3B5IGZvciBDUklTLgorICAgQ29weXJpZ2h0IChDKSAxOTk0LTIwMDUgQXhpcyBDb21tdW5pY2F0aW9ucy4KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CiAKLXZvaWQgKm1lbWNweSh2b2lkICpwZHN0LAotICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnBzcmMsCi0gICAgICAgICAgICAgc2l6ZV90IHBuKQorICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgMi4gTmVpdGhlciB0aGUgbmFtZSBvZiBBeGlzIENvbW11bmljYXRpb25zIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBWElTIENPTU1VTklDQVRJT05TIEFORCBJVFMgQ09OVFJJQlVUT1JTCisgICBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBWElTCisgICBDT01NVU5JQ0FUSU9OUyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAgIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICAgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICovCisKKy8qIEZJWE1FOiBUaGlzIGZpbGUgc2hvdWxkIHJlYWxseSBvbmx5IGJlIHVzZWQgZm9yIHJlZmVyZW5jZSwgYXMgdGhlCisgICByZXN1bHQgaXMgc29tZXdoYXQgZGVwZW5kaW5nIG9uIGdjYyBnZW5lcmF0aW5nIHdoYXQgd2UgZXhwZWN0IHJhdGhlcgorICAgdGhhbiB3aGF0IHdlIGRlc2NyaWJlLiAgQW4gYXNzZW1ibHkgZmlsZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiAgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBCcmVhayBldmVuIGJldHdlZW4gbW92ZW0gYW5kIG1vdmUxNiBpcyByZWFsbHkgYXQgMzguNyAqIDIsIGJ1dAorICAgbW9kdWxvIDQ0LCBzbyB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA0NCwgd2UgdXNlIG9yZGluYXJ5IGNvZGUuICAqLworI2RlZmluZSBNRU1DUFlfQllfQkxPQ0tfVEhSRVNIT0xEICg0NCAqIDIpCisKKy8qIE5vIG5hbWUgYW1iaWd1aXRpZXMgaW4gdGhpcyBmaWxlLiAgKi8KK19fYXNtX18gKCIuc3ludGF4IG5vX3JlZ2lzdGVyX3ByZWZpeCIpOworCit2b2lkICoKK21lbWNweSh2b2lkICpwZHN0LCBjb25zdCB2b2lkICpwc3JjLCBzaXplX3QgcG4pCiB7Ci0gIC8qIE9rLiAgTm93IHdlIHdhbnQgdGhlIHBhcmFtZXRlcnMgcHV0IGluIHNwZWNpYWwgcmVnaXN0ZXJzLgorICAvKiBOb3cgd2Ugd2FudCB0aGUgcGFyYW1ldGVycyBwdXQgaW4gc3BlY2lhbCByZWdpc3RlcnMuCiAgICAgIE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgaXMgYWJsZSB0byBtYWtlIHNvbWV0aGluZyB1c2VmdWwgb2YgdGhpcy4KLSAgICAgIEFzIGl0IGlzIG5vdzogcjEwIC0+IHIxMzsgcjExIC0+IHIxMSAobm9wKTsgcjEyIC0+IHIxMiAobm9wKS4KKyAgICAgQXMgaXQgaXMgbm93OiByMTAgLT4gcjEzOyByMTEgLT4gcjExIChub3ApOyByMTIgLT4gcjEyIChub3ApLgogCi0gICAgIElmIGdjYyB3YXMgYWxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubwotICAgICBzdGFjayBzcGFjZSB0byBzYXZlIHN0dWZmIG9uLiAqLworICAgICBJZiBnY2Mgd2FzIGFsbHJpZ2h0LCBpdCByZWFsbHkgd291bGQgbmVlZCBubyB0ZW1wb3JhcmllcywgYW5kIG5vCisgICAgIHN0YWNrIHNwYWNlIHRvIHNhdmUgc3R1ZmYgb24uICAqLwogCiAgIHJlZ2lzdGVyIHZvaWQgKnJldHVybl9kc3QgX19hc21fXyAoInIxMCIpID0gcGRzdDsKLSAgcmVnaXN0ZXIgY2hhciAqZHN0IF9fYXNtX18gKCJyMTMiKSA9IHBkc3Q7Ci0gIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnNyYyBfX2FzbV9fICgicjExIikgPSBwc3JjOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpkc3QgX19hc21fXyAoInIxMyIpID0gcGRzdDsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgY29uc3QgY2hhciAqc3JjIF9fYXNtX18gKCJyMTEiKSA9IHBzcmM7CiAgIHJlZ2lzdGVyIGludCBuIF9fYXNtX18gKCJyMTIiKSA9IHBuOwotICAKLSAKKwogICAvKiBXaGVuIHNyYyBpcyBhbGlnbmVkIGJ1dCBub3QgZHN0LCB0aGlzIG1ha2VzIGEgZmV3IGV4dHJhIG5lZWRsZXNzCiAgICAgIGN5Y2xlcy4gIEkgYmVsaWV2ZSBpdCB3b3VsZCB0YWtlIGFzIG1hbnkgdG8gY2hlY2sgdGhhdCB0aGUKICAgICAgcmUtYWxpZ25tZW50IHdhcyB1bm5lY2Vzc2FyeS4gICovCkBAIC01OSwxNjcgKzYzLDE3NCBAQAogICAgICAgJiYgbiA+PSAzKQogICB7CiAgICAgaWYgKCh1bnNpZ25lZCBsb25nKSBkc3QgJiAxKQotICAgIHsKLSAgICAgIG4tLTsKLSAgICAgICooY2hhciopZHN0ID0gKihjaGFyKilzcmM7Ci0gICAgICBzcmMrKzsKLSAgICAgIGRzdCsrOwotICAgIH0KKyAgICAgIHsKKwluLS07CisJKmRzdCA9ICpzcmM7CisJc3JjKys7CisJZHN0Kys7CisgICAgICB9CiAKICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIGRzdCAmIDIpCisgICAgICB7CisJbiAtPSAyOworCSooc2hvcnQgKikgZHN0ID0gKihzaG9ydCAqKSBzcmM7CisJc3JjICs9IDI7CisJZHN0ICs9IDI7CisgICAgICB9CisgIH0KKworICAvKiBEZWNpZGUgd2hpY2ggY29weWluZyBtZXRob2QgdG8gdXNlLiAgKi8KKyAgaWYgKG4gPj0gTUVNQ1BZX0JZX0JMT0NLX1RIUkVTSE9MRCkKICAgICB7Ci0gICAgICBuIC09IDI7Ci0gICAgICAqKHNob3J0Kilkc3QgPSAqKHNob3J0KilzcmM7Ci0gICAgICBzcmMgKz0gMjsKLSAgICAgIGRzdCArPSAyOwotICAgIH0KLSAgfQotCi0gIC8qIERlY2lkZSB3aGljaCBjb3B5aW5nIG1ldGhvZCB0byB1c2UuICovCi0gIGlmIChuID49IDQ0KjIpICAgICAgICAgICAgICAgIC8qIEJyZWFrIGV2ZW4gYmV0d2VlbiBtb3ZlbSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZTE2IGlzIGF0IDM4LjcqMiwgYnV0IG1vZHVsbyA0NC4gKi8KLSAgewotICAgIC8qIEZvciBsYXJnZSBjb3BpZXMgd2UgdXNlICdtb3ZlbScgKi8KLQotICAvKiBJdCBpcyBub3Qgb3B0aW1hbCB0byB0ZWxsIHRoZSBjb21waWxlciBhYm91dCBjbG9iYmVyaW5nIGFueQotICAgICByZWdpc3RlcnM7IHRoYXQgd2lsbCBtb3ZlIHRoZSBzYXZpbmcvcmVzdG9yaW5nIG9mIHRob3NlIHJlZ2lzdGVycwotICAgICB0byB0aGUgZnVuY3Rpb24gcHJvbG9ndWUvZXBpbG9ndWUsIGFuZCBtYWtlIG5vbi1tb3ZlbSBzaXplcwotICAgICBzdWJvcHRpbWFsLgotCi0gICAgICBUaGlzIG1ldGhvZCBpcyBub3QgZm9vbHByb29mOyBpdCBhc3N1bWVzIHRoYXQgdGhlICJhc20gcmVnIgotICAgICBkZWNsYXJhdGlvbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24gcmVhbGx5IGFyZSB1c2VkCi0gICAgIGhlcmUgKGJld2FyZTogdGhleSBtYXkgYmUgbW92ZWQgdG8gdGVtcG9yYXJ5IHJlZ2lzdGVycykuCi0gICAgICBUaGlzIHdheSwgd2UgZG8gbm90IGhhdmUgdG8gc2F2ZS9tb3ZlIHRoZSByZWdpc3RlcnMgYXJvdW5kIGludG8KLSAgICAgdGVtcG9yYXJpZXM7IHdlIGNhbiBzYWZlbHkgdXNlIHRoZW0gc3RyYWlnaHQgYXdheS4KLQotICAgICAgSWYgeW91IHdhbnQgdG8gY2hlY2sgdGhhdCB0aGUgYWxsb2NhdGlvbiB3YXMgcmlnaHQ7IHRoZW4KLSAgICAgIGNoZWNrIHRoZSBlcXVhbGl0aWVzIGluIHRoZSBmaXJzdCBjb21tZW50LiAgSXQgc2hvdWxkIHNheQotICAgICAgInIxMz1yMTMsIHIxMT1yMTEsIHIxMj1yMTIiICovCi0gICAgX19hc21fXyB2b2xhdGlsZSAoIlxuXAotCTs7IENoZWNrIHRoYXQgdGhlIGZvbGxvd2luZyBpcyB0cnVlIChzYW1lIHJlZ2lzdGVyIG5hbWVzIG9uCVxuXAotCTs7IGJvdGggc2lkZXMgb2YgZXF1YWwgc2lnbiwgYXMgaW4gcjg9cjgpOgkJCVxuXAotCTs7ICUwPXIxMywgJTE9cjExLCAlMj1yMTIJCQkJCVxuXAotCTs7CQkJCQkJCQlcblwKLQk7OyBTYXZlIHRoZSByZWdpc3RlcnMgd2UnbGwgdXNlIGluIHRoZSBtb3ZlbSBwcm9jZXNzCQlcblwKLQk7OyBvbiB0aGUgc3RhY2suCQkJCQkJXG5cCi0Jc3VicQkxMSo0LCRzcAkJCQkJCVxuXAotCW1vdmVtCSRyMTAsWyRzcF0JCQkJCQlcblwKKyAgICAgIC8qIEl0IGlzIG5vdCBvcHRpbWFsIHRvIHRlbGwgdGhlIGNvbXBpbGVyIGFib3V0IGNsb2JiZXJpbmcgYW55CisJIHJlZ2lzdGVyczsgdGhhdCB3aWxsIG1vdmUgdGhlIHNhdmluZy9yZXN0b3Jpbmcgb2YgdGhvc2UgcmVnaXN0ZXJzCisJIHRvIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS9lcGlsb2d1ZSwgYW5kIG1ha2Ugbm9uLW1vdmVtIHNpemVzCisJIHN1Ym9wdGltYWwuICAqLworICAgICAgX19hc21fXyB2b2xhdGlsZQorCSgiXAorCSA7OyBHQ0MgZG9lcyBwcm9taXNlIGNvcnJlY3QgcmVnaXN0ZXIgYWxsb2NhdGlvbnMsIGJ1dCBsZXQncwlcblwKKwkgOzsgbWFrZSBzdXJlIGl0IGtlZXBzIGl0cyBwcm9taXNlcy4JCQkJXG5cCisJIC5pZm5jICUwLSUxLSUyLCRyMTMtJHIxMS0kcjEyCQkJCQlcblwKKwkgLmVycm9yIFwiR0NDIHJlZyBhbGxvYyBidWc6ICUwLSUxLSU0ICE9ICRyMTMtJHIxMi0kcjExXCIJXG5cCisJIC5lbmRpZgkJCQkJCQkJXG5cCiAJCQkJCQkJCQlcblwKLQk7OyBOb3cgd2UndmUgZ290IHRoaXM6CQkJCQkJXG5cCi0JOzsgcjExIC0gc3JjCQkJCQkJCVxuXAotCTs7IHIxMyAtIGRzdAkJCQkJCQlcblwKLQk7OyByMTIgLSBuCQkJCQkJCVxuXAorCSA7OyBTYXZlIHRoZSByZWdpc3RlcnMgd2UnbGwgdXNlIGluIHRoZSBtb3ZlbSBwcm9jZXNzCQlcblwKKwkgOzsgb24gdGhlIHN0YWNrLgkJCQkJCVxuXAorCSBzdWJxCTExKjQsc3AJCQkJCQkJXG5cCisJIG1vdmVtCXIxMCxbc3BdCQkJCQkJXG5cCiAJCQkJCQkJCQlcblwKLQk7OyBVcGRhdGUgbiBmb3IgdGhlIGZpcnN0IGxvb3AJCQkJCVxuXAotCXN1YnEJNDQsJHIxMgkJCQkJCQlcblwKKwkgOzsgTm93IHdlJ3ZlIGdvdCB0aGlzOgkJCQkJCVxuXAorCSA7OyByMTEgLSBzcmMJCQkJCQkJXG5cCisJIDs7IHIxMyAtIGRzdAkJCQkJCQlcblwKKwkgOzsgcjEyIC0gbgkJCQkJCQlcblwKKwkJCQkJCQkJCVxuXAorCSA7OyBVcGRhdGUgbiBmb3IgdGhlIGZpcnN0IGxvb3AuCQkJCVxuXAorCSBzdWJxCSA0NCxyMTIJCQkJCQkJXG5cCiAwOgkJCQkJCQkJCVxuXAotCW1vdmVtCVskcjExK10sJHIxMAkJCQkJCVxuXAotCXN1YnEJNDQsJHIxMgkJCQkJCQlcblwKLQliZ2UJMGIJCQkJCQkJXG5cCi0JbW92ZW0JJHIxMCxbJHIxMytdCQkJCQkJXG5cCisiCisjaWZkZWYgX19hcmNoX2NvbW1vbl92MTBfdjMyCisJIC8qIENhdGVyIHRvIGJyYW5jaCBvZmZzZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHYzMiBhbmQgdjEwLiAgV2UKKwkgICAgYXNzdW1lIHRoZSBicmFuY2ggYmVsb3cgaGFzIGFuIDgtYml0IG9mZnNldC4gICovCisiCSBzZXRmXG4iCisjZW5kaWYKKyIJIG1vdmVtCVtyMTErXSxyMTAJCQkJCQlcblwKKwkgc3VicQk0NCxyMTIJCQkJCQkJXG5cCisJIGJnZQkgMGIJCQkJCQkJXG5cCisJIG1vdmVtCXIxMCxbcjEzK10JCQkJCQlcblwKIAkJCQkJCQkJCVxuXAotCWFkZHEJNDQsJHIxMiA7OyBjb21wZW5zYXRlIGZvciBsYXN0IGxvb3AgdW5kZXJmbG93aW5nIG4JXG5cCisJIDs7IENvbXBlbnNhdGUgZm9yIGxhc3QgbG9vcCB1bmRlcmZsb3dpbmcgbi4JCQlcblwKKwkgYWRkcQk0NCxyMTIJCQkJCQkJXG5cCiAJCQkJCQkJCQlcblwKLQk7OyBSZXN0b3JlIHJlZ2lzdGVycyBmcm9tIHN0YWNrCQkJCQlcblwKLQltb3ZlbQlbJHNwK10sJHIxMCIKKwkgOzsgUmVzdG9yZSByZWdpc3RlcnMgZnJvbSBzdGFjay4JCQkJXG5cCisJIG1vdmVtIFtzcCtdLHIxMCIKIAotICAgICAvKiBPdXRwdXRzICovIDogIj1yIiAoZHN0KSwgIj1yIiAoc3JjKSwgIj1yIiAobikgCi0gICAgIC8qIElucHV0cyAqLyA6ICIwIiAoZHN0KSwgIjEiIChzcmMpLCAiMiIgKG4pKTsKLSAgICAKLSAgfQorCSAvKiBPdXRwdXRzLiAgKi8KKwkgOiAiPXIiIChkc3QpLCAiPXIiIChzcmMpLCAiPXIiIChuKQogCi0gIC8qIEVpdGhlciB3ZSBkaXJlY3RseSBzdGFydHMgY29weWluZywgdXNpbmcgZHdvcmQgY29weWluZwotICAgICBpbiBhIGxvb3AsIG9yIHdlIGNvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aXRoICdtb3ZlbScgCi0gICAgIGFuZCB0aGVuIHRoZSBsYXN0IGJsb2NrICg8NDQgYnl0ZXMpIGlzIGNvcGllZCBoZXJlLgotICAgICBUaGlzIHdpbGwgd29yayBzaW5jZSAnbW92ZW0nIHdpbGwgaGF2ZSB1cGRhdGVkIHNyYyxkc3Qsbi4gKi8KKwkgLyogSW5wdXRzLiAgKi8KKwkgOiAiMCIgKGRzdCksICIxIiAoc3JjKSwgIjIiIChuKSk7CisgICAgfQogCi0gIHdoaWxlICggbiA+PSAxNiApCi0gIHsKLSAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgbiAtPSAxNjsKLSAgfQorICB3aGlsZSAobiA+PSAxNikKKyAgICB7CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OwogCi0gIC8qIEEgc3dpdGNoKCkgaXMgZGVmaW5pdGVseSB0aGUgZmFzdGVzdCBhbHRob3VnaCBpdCB0YWtlcyBhIExPVCBvZiBjb2RlLgotICAgKiBQYXJ0aWN1bGFybHkgaWYgeW91IGlubGluZSBjb2RlIHRoaXMuCi0gICAqLworICAgICAgbiAtPSAxNjsKKyAgICB9CisKICAgc3dpdGNoIChuKQotICB7CisgICAgewogICAgIGNhc2UgMDoKICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICooY2hhciopZHN0ID0gKihjaGFyKilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAqKHNob3J0Kilkc3QgPSAqKHNob3J0KilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAqKChzaG9ydCopZHN0KSsrID0gKigoc2hvcnQqKXNyYykrKzsKLSAgICAgICooY2hhciopZHN0ID0gKihjaGFyKilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDU6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA2OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKihzaG9ydCopZHN0ID0gKihzaG9ydCopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA3OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigoc2hvcnQqKWRzdCkrKyA9ICooKHNob3J0KilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA5OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKihjaGFyKilkc3QgPSAqKGNoYXIqKXNyYzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTA6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKHNob3J0Kilkc3QgPSAqKHNob3J0KilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDExOgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigoc2hvcnQqKWRzdCkrKyA9ICooKHNob3J0KilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxMjoKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTM6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxNDoKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooc2hvcnQqKWRzdCA9ICooc2hvcnQqKXNyYzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTU6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChzaG9ydCopZHN0KSsrID0gKigoc2hvcnQqKXNyYykrKzsKLSAgICAgICooY2hhciopZHN0ID0gKihjaGFyKilzcmM7Ci0gICAgICBicmVhazsKLSAgfQogCi0gIHJldHVybiByZXR1cm5fZHN0OyAvKiBkZXN0aW5hdGlvbiBwb2ludGVyLiAqLwotfSAvKiBtZW1jcHkoKSAqLworICAgIGNhc2UgMToKKyAgICAgICpkc3QgPSAqc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0OgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNToKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA2OgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICooc2hvcnQgKikgZHN0ID0gKihzaG9ydCAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNzoKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA4OgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDk6CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICpkc3QgPSAqc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDEwOgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDExOgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxMjoKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMTM6CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxNDoKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICooc2hvcnQgKikgZHN0ID0gKihzaG9ydCAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMTU6CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gcmV0dXJuX2RzdDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvdXNlcmNvcHkuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvdXNlcmNvcHkuYwppbmRleCBiOGU2YzA0Li5iMGE2MDhkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvbGliL3VzZXJjb3B5LmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi91c2VyY29weS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKICAgIGluYWNjZXNzaWJsZS4gICovCiAKIHVuc2lnbmVkIGxvbmcKLV9fY29weV91c2VyX3plcm9pbmcgKHZvaWQgX191c2VyICpwZHN0LCBjb25zdCB2b2lkICpwc3JjLCB1bnNpZ25lZCBsb25nIHBuKQorX19jb3B5X3VzZXJfemVyb2luZyh2b2lkICpwZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqcHNyYywgdW5zaWduZWQgbG9uZyBwbikKIHsKICAgLyogV2Ugd2FudCB0aGUgcGFyYW1ldGVycyBwdXQgaW4gc3BlY2lhbCByZWdpc3RlcnMuCiAgICAgIE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgaXMgYWJsZSB0byBtYWtlIHNvbWV0aGluZyB1c2VmdWwgb2YgdGhpcy4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvc3RyaW5nLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL3N0cmluZy5jCmluZGV4IDY3NDBiMmMuLmM3YmQ2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvc3RyaW5nLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9zdHJpbmcuYwpAQCAtMSw1NSArMSw1OSBAQAotLyojKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIyovCi0vKiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIEZVTkNUSU9OIE5BTUU6IG1lbWNweSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyBQQVJBTUVURVJTOiAgdm9pZCogZHN0OyAgIERlc3RpbmF0aW9uIGFkZHJlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojICAgICAgICAgICAgICB2b2lkKiBzcmM7ICAgU291cmNlIGFkZHJlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgICAgICAgICAgICAgIGludCAgIGxlbjsgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIFJFVFVSTlM6ICAgICBkc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyBERVNDUklQVElPTjogQ29waWVzIGxlbiBieXRlcyBvZiBtZW1vcnkgZnJvbSBzcmMgdG8gZHN0LiAgTm8gZ3VhcmFudGVlcyAqLwotLyojICAgICAgICAgICAgICBhYm91dCBjb3B5aW5nIG9mIG92ZXJsYXBwaW5nIG1lbW9yeSBhcmVhcy4gVGhpcyByb3V0aW5lIGlzICovCi0vKiMgICAgICAgICAgICAgIHZlcnkgc2Vuc2l0aXZlIHRvIGNvbXBpbGVyIGNoYW5nZXMgaW4gcmVnaXN0ZXIgYWxsb2NhdGlvbi4gKi8KLS8qIyAgICAgICAgICAgICAgU2hvdWxkIHJlYWxseSBiZSByZXdyaXR0ZW4gdG8gYXZvaWQgdGhpcyBwcm9ibGVtLiAgICAgICAgICAqLwotLyojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIEhJU1RPUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyBEQVRFICAgICAgTkFNRSAgICAgICAgICAgIENIQU5HRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojIC0tLS0gICAgICAtLS0tICAgICAgICAgICAgLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgOTQxMDA3ICAgIEtlbm55IFIgICAgICAgICBDcmVhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIyA5NDEwMTEgICAgS2VubnkgUiAgICAgICAgIExvdHMgb2Ygb3B0aW1pemF0aW9ucyBhbmQgaW5saW5pbmcuICAgICAgICAgICAqLwotLyojIDk0MTEyOSAgICBVbGYgQSAgICAgICAgICAgQWRhcHRlZCBmb3IgdXNlIGluIGxpYmMuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiMgOTUwMjE2ICAgIEhQICAgICAgICAgICAgICBOPT0wIGZvcmdvdHRlbiBpZiBub24tYWxpZ25lZCBzcmMvZHN0LiAgICAgICAgKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHNvbWUgb3B0aW1pemF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAqLwotLyojIDAwMTAyNSAgICBIUCAgICAgICAgICAgICAgTWFrZSBzcmMgYW5kIGRzdCBjaGFyICouICBBbGlnbiBkc3QgdG8JICAgICovCi0vKiMJCQkgICAgICBkd29yZCwgbm90IGp1c3Qgd29yZC1pZi1ib3RoLXNyYy1hbmQtZHN0LQkgICAgKi8KLS8qIwkJCSAgICAgIGFyZS1taXNhbGlnbmVkLgkJCQkgICAgKi8KLS8qIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBBIG1lbWNweSBmb3IgQ1JJUy4KKyAgIENvcHlyaWdodCAoQykgMTk5NC0yMDA1IEF4aXMgQ29tbXVuaWNhdGlvbnMuCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgogCi12b2lkICptZW1jcHkodm9pZCAqcGRzdCwKLSAgICAgICAgICAgICBjb25zdCB2b2lkICpwc3JjLAotICAgICAgICAgICAgIHNpemVfdCBwbikKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIDIuIE5laXRoZXIgdGhlIG5hbWUgb2YgQXhpcyBDb21tdW5pY2F0aW9ucyBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVhJUyBDT01NVU5JQ0FUSU9OUyBBTkQgSVRTIENPTlRSSUJVVE9SUworICAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVhJUworICAgQ09NTVVOSUNBVElPTlMgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAgIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAqLworCisvKiBGSVhNRTogVGhpcyBmaWxlIHNob3VsZCByZWFsbHkgb25seSBiZSB1c2VkIGZvciByZWZlcmVuY2UsIGFzIHRoZQorICAgcmVzdWx0IGlzIHNvbWV3aGF0IGRlcGVuZGluZyBvbiBnY2MgZ2VuZXJhdGluZyB3aGF0IHdlIGV4cGVjdCByYXRoZXIKKyAgIHRoYW4gd2hhdCB3ZSBkZXNjcmliZS4gIEFuIGFzc2VtYmx5IGZpbGUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogQnJlYWsgZXZlbiBiZXR3ZWVuIG1vdmVtIGFuZCBtb3ZlMTYgaXMgcmVhbGx5IGF0IDM4LjcgKiAyLCBidXQKKyAgIG1vZHVsbyA0NCwgc28gdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNDQsIHdlIHVzZSBvcmRpbmFyeSBjb2RlLiAgKi8KKyNkZWZpbmUgTUVNQ1BZX0JZX0JMT0NLX1RIUkVTSE9MRCAoNDQgKiAyKQorCisvKiBObyBuYW1lIGFtYmlndWl0aWVzIGluIHRoaXMgZmlsZS4gICovCitfX2FzbV9fICgiLnN5bnRheCBub19yZWdpc3Rlcl9wcmVmaXgiKTsKKwordm9pZCAqCittZW1jcHkodm9pZCAqcGRzdCwgY29uc3Qgdm9pZCAqcHNyYywgc2l6ZV90IHBuKQogewotICAvKiBPay4gIE5vdyB3ZSB3YW50IHRoZSBwYXJhbWV0ZXJzIHB1dCBpbiBzcGVjaWFsIHJlZ2lzdGVycy4KKyAgLyogTm93IHdlIHdhbnQgdGhlIHBhcmFtZXRlcnMgcHV0IGluIHNwZWNpYWwgcmVnaXN0ZXJzLgogICAgICBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGlzIGFibGUgdG8gbWFrZSBzb21ldGhpbmcgdXNlZnVsIG9mIHRoaXMuCi0gICAgICBBcyBpdCBpcyBub3c6IHIxMCAtPiByMTM7IHIxMSAtPiByMTEgKG5vcCk7IHIxMiAtPiByMTIgKG5vcCkuCisgICAgIEFzIGl0IGlzIG5vdzogcjEwIC0+IHIxMzsgcjExIC0+IHIxMSAobm9wKTsgcjEyIC0+IHIxMiAobm9wKS4KIAotICAgICBJZiBnY2Mgd2FzIGFscmlnaHQsIGl0IHJlYWxseSB3b3VsZCBuZWVkIG5vIHRlbXBvcmFyaWVzLCBhbmQgbm8KLSAgICAgc3RhY2sgc3BhY2UgdG8gc2F2ZSBzdHVmZiBvbi4gKi8KKyAgICAgSWYgZ2NjIHdhcyBhbGxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubworICAgICBzdGFjayBzcGFjZSB0byBzYXZlIHN0dWZmIG9uLiAgKi8KIAogICByZWdpc3RlciB2b2lkICpyZXR1cm5fZHN0IF9fYXNtX18gKCJyMTAiKSA9IHBkc3Q7Ci0gIHJlZ2lzdGVyIGNoYXIgKmRzdCBfX2FzbV9fICgicjEzIikgPSBwZHN0OwotICByZWdpc3RlciBjb25zdCBjaGFyICpzcmMgX19hc21fXyAoInIxMSIpID0gcHNyYzsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqZHN0IF9fYXNtX18gKCJyMTMiKSA9IHBkc3Q7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNvbnN0IGNoYXIgKnNyYyBfX2FzbV9fICgicjExIikgPSBwc3JjOwogICByZWdpc3RlciBpbnQgbiBfX2FzbV9fICgicjEyIikgPSBwbjsKIAotCiAgIC8qIFdoZW4gc3JjIGlzIGFsaWduZWQgYnV0IG5vdCBkc3QsIHRoaXMgbWFrZXMgYSBmZXcgZXh0cmEgbmVlZGxlc3MKICAgICAgY3ljbGVzLiAgSSBiZWxpZXZlIGl0IHdvdWxkIHRha2UgYXMgbWFueSB0byBjaGVjayB0aGF0IHRoZQogICAgICByZS1hbGlnbm1lbnQgd2FzIHVubmVjZXNzYXJ5LiAgKi8KQEAgLTU5LDE2MSArNjMsMTc0IEBACiAgICAgICAmJiBuID49IDMpCiAgIHsKICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIGRzdCAmIDEpCi0gICAgewotICAgICAgbi0tOwotICAgICAgKihjaGFyKilkc3QgPSAqKGNoYXIqKXNyYzsKLSAgICAgIHNyYysrOwotICAgICAgZHN0Kys7Ci0gICAgfQorICAgICAgeworCW4tLTsKKwkqZHN0ID0gKnNyYzsKKwlzcmMrKzsKKwlkc3QrKzsKKyAgICAgIH0KIAogICAgIGlmICgodW5zaWduZWQgbG9uZykgZHN0ICYgMikKKyAgICAgIHsKKwluIC09IDI7CisJKihzaG9ydCAqKSBkc3QgPSAqKHNob3J0ICopIHNyYzsKKwlzcmMgKz0gMjsKKwlkc3QgKz0gMjsKKyAgICAgIH0KKyAgfQorCisgIC8qIERlY2lkZSB3aGljaCBjb3B5aW5nIG1ldGhvZCB0byB1c2UuICAqLworICBpZiAobiA+PSBNRU1DUFlfQllfQkxPQ0tfVEhSRVNIT0xEKQogICAgIHsKLSAgICAgIG4gLT0gMjsKLSAgICAgICooc2hvcnQqKWRzdCA9ICooc2hvcnQqKXNyYzsKLSAgICAgIHNyYyArPSAyOwotICAgICAgZHN0ICs9IDI7Ci0gICAgfQotICB9Ci0KLSAgLyogRGVjaWRlIHdoaWNoIGNvcHlpbmcgbWV0aG9kIHRvIHVzZS4gIE1vdmVtIGlzIGRpcnQgY2hlYXAsIHNvIHRoZQotICAgICBvdmVyaGVhcCBpcyBsb3cgZW5vdWdoIHRvIGFsd2F5cyB1c2UgdGhlIG1pbmltdW0gYmxvY2sgc2l6ZSBhcyB0aGUKLSAgICAgdGhyZXNob2xkLiAgKi8KLSAgaWYgKG4gPj0gNDQpCi0gIHsKLSAgICAvKiBGb3IgbGFyZ2UgY29waWVzIHdlIHVzZSAnbW92ZW0nICovCi0KLSAgLyogSXQgaXMgbm90IG9wdGltYWwgdG8gdGVsbCB0aGUgY29tcGlsZXIgYWJvdXQgY2xvYmJlcmluZyBhbnkKLSAgICAgcmVnaXN0ZXJzOyB0aGF0IHdpbGwgbW92ZSB0aGUgc2F2aW5nL3Jlc3RvcmluZyBvZiB0aG9zZSByZWdpc3RlcnMKLSAgICAgdG8gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlL2VwaWxvZ3VlLCBhbmQgbWFrZSBub24tbW92ZW0gc2l6ZXMKLSAgICAgc3Vib3B0aW1hbC4gICovCi0gICAgX19hc21fXyB2b2xhdGlsZSAoIgkJCQkJCQlcblwKLSAgICAgICAgOzsgQ2hlY2sgdGhhdCB0aGUgcmVnaXN0ZXIgYXNtIGRlY2xhcmF0aW9uIGdvdCByaWdodC4JCVxuXAotICAgICAgICA7OyBUaGUgR0NDIG1hbnVhbCBleHBsaWNpdGx5IHNheXMgVFJUIHdpbGwgaGFwcGVuLgkJXG5cCi0JLmlmbmMgJTAtJTEtJTIsJHIxMy0kcjExLSRyMTIJCQkJCVxuXAotCS5lcnIJCQkJCQkJCVxuXAotCS5lbmRpZgkJCQkJCQkJXG5cCisgICAgICAvKiBJdCBpcyBub3Qgb3B0aW1hbCB0byB0ZWxsIHRoZSBjb21waWxlciBhYm91dCBjbG9iYmVyaW5nIGFueQorCSByZWdpc3RlcnM7IHRoYXQgd2lsbCBtb3ZlIHRoZSBzYXZpbmcvcmVzdG9yaW5nIG9mIHRob3NlIHJlZ2lzdGVycworCSB0byB0aGUgZnVuY3Rpb24gcHJvbG9ndWUvZXBpbG9ndWUsIGFuZCBtYWtlIG5vbi1tb3ZlbSBzaXplcworCSBzdWJvcHRpbWFsLiAgKi8KKyAgICAgIF9fYXNtX18gdm9sYXRpbGUKKwkoIlwKKwkgOzsgR0NDIGRvZXMgcHJvbWlzZSBjb3JyZWN0IHJlZ2lzdGVyIGFsbG9jYXRpb25zLCBidXQgbGV0J3MJXG5cCisJIDs7IG1ha2Ugc3VyZSBpdCBrZWVwcyBpdHMgcHJvbWlzZXMuCQkJCVxuXAorCSAuaWZuYyAlMC0lMS0lMiwkcjEzLSRyMTEtJHIxMgkJCQkJXG5cCisJIC5lcnJvciBcIkdDQyByZWcgYWxsb2MgYnVnOiAlMC0lMS0lNCAhPSAkcjEzLSRyMTItJHIxMVwiCVxuXAorCSAuZW5kaWYJCQkJCQkJCVxuXAogCQkJCQkJCQkJXG5cCi0JOzsgU2F2ZSB0aGUgcmVnaXN0ZXJzIHdlJ2xsIHVzZSBpbiB0aGUgbW92ZW0gcHJvY2VzcwkJXG5cCisJIDs7IFNhdmUgdGhlIHJlZ2lzdGVycyB3ZSdsbCB1c2UgaW4gdGhlIG1vdmVtIHByb2Nlc3MJCVxuXAorCSA7OyBvbiB0aGUgc3RhY2suCQkJCQkJXG5cCisJIHN1YnEJMTEqNCxzcAkJCQkJCQlcblwKKwkgbW92ZW0JcjEwLFtzcF0JCQkJCQlcblwKIAkJCQkJCQkJCVxuXAotCTs7IG9uIHRoZSBzdGFjay4JCQkJCQlcblwKLQlzdWJxIAkxMSo0LCRzcAkJCQkJCVxuXAotCW1vdmVtCSRyMTAsWyRzcF0JCQkJCQlcblwKKwkgOzsgTm93IHdlJ3ZlIGdvdCB0aGlzOgkJCQkJCVxuXAorCSA7OyByMTEgLSBzcmMJCQkJCQkJXG5cCisJIDs7IHIxMyAtIGRzdAkJCQkJCQlcblwKKwkgOzsgcjEyIC0gbgkJCQkJCQlcblwKIAkJCQkJCQkJCVxuXAotICAgICAgICA7OyBOb3cgd2UndmUgZ290IHRoaXM6CQkJCQkJXG5cCi0JOzsgcjExIC0gc3JjCQkJCQkJCVxuXAotCTs7IHIxMyAtIGRzdAkJCQkJCQlcblwKLQk7OyByMTIgLSBuCQkJCQkJCVxuXAotCQkJCQkJCQkJXG5cCi0gICAgICAgIDs7IFVwZGF0ZSBuIGZvciB0aGUgZmlyc3QgbG9vcAkJCQkJXG5cCi0gICAgICAgIHN1YnEgICAgNDQsJHIxMgkJCQkJCQlcblwKKwkgOzsgVXBkYXRlIG4gZm9yIHRoZSBmaXJzdCBsb29wLgkJCQlcblwKKwkgc3VicQkgNDQscjEyCQkJCQkJCVxuXAogMDoJCQkJCQkJCQlcblwKLQltb3ZlbQlbJHIxMStdLCRyMTAJCQkJCQlcblwKLSAgICAgICAgc3VicSAgIDQ0LCRyMTIJCQkJCQkJXG5cCi0gICAgICAgIGJnZSAgICAgMGIJCQkJCQkJXG5cCi0JbW92ZW0JJHIxMCxbJHIxMytdCQkJCQkJXG5cCisiCisjaWZkZWYgX19hcmNoX2NvbW1vbl92MTBfdjMyCisJIC8qIENhdGVyIHRvIGJyYW5jaCBvZmZzZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHYzMiBhbmQgdjEwLiAgV2UKKwkgICAgYXNzdW1lIHRoZSBicmFuY2ggYmVsb3cgaGFzIGFuIDgtYml0IG9mZnNldC4gICovCisiCSBzZXRmXG4iCisjZW5kaWYKKyIJIG1vdmVtCVtyMTErXSxyMTAJCQkJCQlcblwKKwkgc3VicQk0NCxyMTIJCQkJCQkJXG5cCisJIGJnZQkgMGIJCQkJCQkJXG5cCisJIG1vdmVtCXIxMCxbcjEzK10JCQkJCQlcblwKIAkJCQkJCQkJCVxuXAotICAgICAgICBhZGRxICAgNDQsJHIxMiAgOzsgY29tcGVuc2F0ZSBmb3IgbGFzdCBsb29wIHVuZGVyZmxvd2luZyBuCVxuXAorCSA7OyBDb21wZW5zYXRlIGZvciBsYXN0IGxvb3AgdW5kZXJmbG93aW5nIG4uCQkJXG5cCisJIGFkZHEJNDQscjEyCQkJCQkJCVxuXAogCQkJCQkJCQkJXG5cCi0JOzsgUmVzdG9yZSByZWdpc3RlcnMgZnJvbSBzdGFjawkJCQkJXG5cCi0gICAgICAgIG1vdmVtIFskc3ArXSwkcjEwIgorCSA7OyBSZXN0b3JlIHJlZ2lzdGVycyBmcm9tIHN0YWNrLgkJCQlcblwKKwkgbW92ZW0gW3NwK10scjEwIgogCi0gICAgIC8qIE91dHB1dHMgKi8gOiAiPXIiIChkc3QpLCAiPXIiIChzcmMpLCAiPXIiIChuKQotICAgICAvKiBJbnB1dHMgKi8gOiAiMCIgKGRzdCksICIxIiAoc3JjKSwgIjIiIChuKSk7CisJIC8qIE91dHB1dHMuICAqLworCSA6ICI9ciIgKGRzdCksICI9ciIgKHNyYyksICI9ciIgKG4pCiAKLSAgfQorCSAvKiBJbnB1dHMuICAqLworCSA6ICIwIiAoZHN0KSwgIjEiIChzcmMpLCAiMiIgKG4pKTsKKyAgICB9CiAKLSAgLyogRWl0aGVyIHdlIGRpcmVjdGx5IHN0YXJ0cyBjb3B5aW5nLCB1c2luZyBkd29yZCBjb3B5aW5nCi0gICAgIGluIGEgbG9vcCwgb3Igd2UgY29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGggJ21vdmVtJwotICAgICBhbmQgdGhlbiB0aGUgbGFzdCBibG9jayAoPDQ0IGJ5dGVzKSBpcyBjb3BpZWQgaGVyZS4KLSAgICAgVGhpcyB3aWxsIHdvcmsgc2luY2UgJ21vdmVtJyB3aWxsIGhhdmUgdXBkYXRlZCBzcmMsZHN0LG4uICovCisgIHdoaWxlIChuID49IDE2KQorICAgIHsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CiAKLSAgd2hpbGUgKCBuID49IDE2ICkKLSAgewotICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICBuIC09IDE2OwotICB9CisgICAgICBuIC09IDE2OworICAgIH0KIAotICAvKiBBIHN3aXRjaCgpIGlzIGRlZmluaXRlbHkgdGhlIGZhc3Rlc3QgYWx0aG91Z2ggaXQgdGFrZXMgYSBMT1Qgb2YgY29kZS4KLSAgICogUGFydGljdWxhcmx5IGlmIHlvdSBpbmxpbmUgY29kZSB0aGlzLgotICAgKi8KICAgc3dpdGNoIChuKQotICB7CisgICAgewogICAgIGNhc2UgMDoKICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICooY2hhciopZHN0ID0gKihjaGFyKilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAqKHNob3J0Kilkc3QgPSAqKHNob3J0KilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAqKChzaG9ydCopZHN0KSsrID0gKigoc2hvcnQqKXNyYykrKzsKLSAgICAgICooY2hhciopZHN0ID0gKihjaGFyKilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDU6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA2OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKihzaG9ydCopZHN0ID0gKihzaG9ydCopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA3OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigoc2hvcnQqKWRzdCkrKyA9ICooKHNob3J0KilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA5OgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKihjaGFyKilkc3QgPSAqKGNoYXIqKXNyYzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTA6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKHNob3J0Kilkc3QgPSAqKHNob3J0KilzcmM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDExOgotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigobG9uZyopZHN0KSsrID0gKigobG9uZyopc3JjKSsrOwotICAgICAgKigoc2hvcnQqKWRzdCkrKyA9ICooKHNob3J0KilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxMjoKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTM6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKGNoYXIqKWRzdCA9ICooY2hhciopc3JjOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxNDoKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooKGxvbmcqKWRzdCkrKyA9ICooKGxvbmcqKXNyYykrKzsKLSAgICAgICooc2hvcnQqKWRzdCA9ICooc2hvcnQqKXNyYzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTU6Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChsb25nKilkc3QpKysgPSAqKChsb25nKilzcmMpKys7Ci0gICAgICAqKChzaG9ydCopZHN0KSsrID0gKigoc2hvcnQqKXNyYykrKzsKLSAgICAgICooY2hhciopZHN0ID0gKihjaGFyKilzcmM7Ci0gICAgICBicmVhazsKLSAgfQogCi0gIHJldHVybiByZXR1cm5fZHN0OyAvKiBkZXN0aW5hdGlvbiBwb2ludGVyLiAqLwotfSAvKiBtZW1jcHkoKSAqLworICAgIGNhc2UgMToKKyAgICAgICpkc3QgPSAqc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0OgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNToKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA2OgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICooc2hvcnQgKikgZHN0ID0gKihzaG9ydCAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNzoKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA4OgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDk6CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICpkc3QgPSAqc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDEwOgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDExOgorICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxMjoKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMTM6CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxNDoKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICooc2hvcnQgKikgZHN0ID0gKihzaG9ydCAqKSBzcmM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMTU6CisgICAgICAqKGxvbmcgKikgZHN0ID0gKihsb25nICopIHNyYzsgZHN0ICs9IDQ7IHNyYyArPSA0OworICAgICAgKihsb25nICopIGRzdCA9ICoobG9uZyAqKSBzcmM7IGRzdCArPSA0OyBzcmMgKz0gNDsKKyAgICAgICoobG9uZyAqKSBkc3QgPSAqKGxvbmcgKikgc3JjOyBkc3QgKz0gNDsgc3JjICs9IDQ7CisgICAgICAqKHNob3J0ICopIGRzdCA9ICooc2hvcnQgKikgc3JjOyBkc3QgKz0gMjsgc3JjICs9IDI7CisgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gcmV0dXJuX2RzdDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvdXNlcmNvcHkuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvdXNlcmNvcHkuYwppbmRleCAwNGQwY2YzLi4wYjViNzBkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbGliL3VzZXJjb3B5LmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi91c2VyY29weS5jCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgIGluYWNjZXNzaWJsZS4gICovCiAKIHVuc2lnbmVkIGxvbmcKLV9fY29weV91c2VyX3plcm9pbmcgKHZvaWQgX191c2VyICpwZHN0LCBjb25zdCB2b2lkICpwc3JjLCB1bnNpZ25lZCBsb25nIHBuKQorX19jb3B5X3VzZXJfemVyb2luZyh2b2lkICpwZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqcHNyYywgdW5zaWduZWQgbG9uZyBwbikKIHsKICAgLyogV2Ugd2FudCB0aGUgcGFyYW1ldGVycyBwdXQgaW4gc3BlY2lhbCByZWdpc3RlcnMuCiAgICAgIE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgaXMgYWJsZSB0byBtYWtlIHNvbWV0aGluZyB1c2VmdWwgb2YgdGhpcy4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2NyaXMva2VybmVsL01ha2VmaWxlCmluZGV4IGM4ZThlYTUuLmVlN2JjZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9NYWtlZmlsZQpAQCAtNSw4ICs1LDcgQEAKIAogZXh0cmEteQk6PSB2bWxpbnV4LmxkcwogCi1vYmoteSAgIDo9IHByb2Nlc3MubyB0cmFwcy5vIGlycS5vIHB0cmFjZS5vIHNldHVwLm8gXAotCSAgIHRpbWUubyBzeXNfY3Jpcy5vIHNlbWFwaG9yZS5vCitvYmoteSAgIDo9IHByb2Nlc3MubyB0cmFwcy5vIGlycS5vIHB0cmFjZS5vIHNldHVwLm8gdGltZS5vIHN5c19jcmlzLm8KIAogb2JqLSQoQ09ORklHX01PRFVMRVMpICAgICs9IGNyaXNrc3ltcy5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJICs9IG1vZHVsZS5vCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jIGIvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYwppbmRleCA2MmYwZTc1Li43YWMwMDBmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CkBAIC00OSwxMiArNDgsNiBAQAogRVhQT1JUX1NZTUJPTChfX2lvcmVtYXApOwogRVhQT1JUX1NZTUJPTChpb3VubWFwKTsKIAotLyogU2VtYXBob3JlIGZ1bmN0aW9ucyAqLwotRVhQT1JUX1NZTUJPTChfX3VwKTsKLUVYUE9SVF9TWU1CT0woX19kb3duKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwotRVhQT1JUX1NZTUJPTChfX2Rvd25fdHJ5bG9jayk7Ci0KIC8qIFVzZXJzcGFjZSBhY2Nlc3MgZnVuY3Rpb25zICovCiBFWFBPUlRfU1lNQk9MKF9fY29weV91c2VyX3plcm9pbmcpOwogRVhQT1JUX1NZTUJPTChfX2NvcHlfdXNlcik7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9jcmlzL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzN2E0MzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9zZW1hcGhvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogIEdlbmVyaWMgc2VtYXBob3JlIGNvZGUuIEJ1eWVyIGJld2FyZS4gRG8geW91ciBvd24KLSAqIHNwZWNpZmljIGNoYW5nZXMgaW4gPGFzbS9zZW1hcGhvcmUtaGVscGVyLmg+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KLQotLyoKLSAqIFNlbWFwaG9yZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgdHdvLXdheSBjb3VudGVyOgotICogVGhlICJjb3VudCIgdmFyaWFibGUgaXMgZGVjcmVtZW50ZWQgZm9yIGVhY2ggcHJvY2VzcwotICogdGhhdCB0cmllcyB0byBzbGVlcCwgd2hpbGUgdGhlICJ3YWtpbmciIHZhcmlhYmxlIGlzCi0gKiBpbmNyZW1lbnRlZCB3aGVuIHRoZSAidXAoKSIgY29kZSBnb2VzIHRvIHdha2UgdXAgd2FpdGluZwotICogcHJvY2Vzc2VzLgotICoKLSAqIE5vdGFibHksIHRoZSBpbmxpbmUgInVwKCkiIGFuZCAiZG93bigpIiBmdW5jdGlvbnMgY2FuCi0gKiBlZmZpY2llbnRseSB0ZXN0IGlmIHRoZXkgbmVlZCB0byBkbyBhbnkgZXh0cmEgd29yayAodXAKLSAqIG5lZWRzIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqIHdha2luZ19ub25femVybygpIChmcm9tIGFzbS9zZW1hcGhvcmUuaCkgbXVzdCBleGVjdXRlCi0gKiBhdG9taWNhbGx5LgotICoKLSAqIFdoZW4gX191cCgpIGlzIGNhbGxlZCwgdGhlIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIGluY3JlbWVudGluZyBpdCwgYW5kIHdlIG5lZWQgdG8gd2FrZSB1cCBzb21lYm9keS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgYWRkcyBvbmUgdG8gdGhlIGNvdW50IG9mIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8KLSAqIHdha2UgdXAgYW5kIGV4aXQuICBBTEwgd2FpdGluZyBwcm9jZXNzZXMgYWN0dWFsbHkgd2FrZSB1cCBidXQKLSAqIG9ubHkgdGhlIG9uZSB0aGF0IGdldHMgdG8gdGhlICJ3YWtpbmciIGZpZWxkIGZpcnN0IHdpbGwgZ2F0ZQotICogdGhyb3VnaCBhbmQgYWNxdWlyZSB0aGUgc2VtYXBob3JlLiAgVGhlIG90aGVycyB3aWxsIGdvIGJhY2sKLSAqIHRvIHNsZWVwLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMKLSAqIGNvbnRlbnRpb24gb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZQotICogIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUgd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUKLSAqIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbiA8YXNtL3NlbWFwaG9yZS5oPgotICogd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXdha2Vfb25lX21vcmUoc2VtKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi0vKgotICogUGVyZm9ybSB0aGUgImRvd24iIGZ1bmN0aW9uLiAgUmV0dXJuIHplcm8gZm9yIHNlbWFwaG9yZSBhY3F1aXJlZCwKLSAqIHJldHVybiBuZWdhdGl2ZSBmb3Igc2lnbmFsbGVkIG91dCBvZiB0aGUgZnVuY3Rpb24uCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duLCB0aGUgcmV0dXJuIGlzIGlnbm9yZWQgYW5kIHRoZSB3YWl0IGxvb3AgaXMKLSAqIG5vdCBpbnRlcnJ1cHRpYmxlLiAgVGhpcyBtZWFucyB0aGF0IGEgdGFzayB3YWl0aW5nIG9uIGEgc2VtYXBob3JlCi0gKiB1c2luZyAiZG93bigpIiBjYW5ub3QgYmUga2lsbGVkIHVudGlsIHNvbWVvbmUgZG9lcyBhbiAidXAoKSIgb24KLSAqIHRoZSBzZW1hcGhvcmUuCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duX2ludGVycnVwdGlibGUsIHRoZSByZXR1cm4gdmFsdWUgZ2V0cyBjaGVja2VkCi0gKiB1cG9uIHJldHVybi4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbmVnYXRpdmUgdGhlbiB0aGUgdGFzayBjb250aW51ZXMKLSAqIHdpdGggdGhlIG5lZ2F0aXZlIHZhbHVlIGluIHRoZSByZXR1cm4gcmVnaXN0ZXIgKGl0IGNhbiBiZSB0ZXN0ZWQgYnkKLSAqIHRoZSBjYWxsZXIpLgotICoKLSAqIEVpdGhlciBmb3JtIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggInVwKCkiLgotICoKLSAqLwotCi0jZGVmaW5lIERPV05fVkFSCQkJCVwKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CVwKLQl3YWl0X3F1ZXVlX3Qgd2FpdDsJCQlcCi0JaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIHRzayk7Ci0KLSNkZWZpbmUgRE9XTl9IRUFEKHRhc2tfc3RhdGUpCQkJCQkJXAotCQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRzay0+c3RhdGUgPSAodGFza19zdGF0ZSk7CQkJCQlcCi0JYWRkX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwkJCQlcCi0JCQkJCQkJCQlcCi0JLyoJCQkJCQkJCVwKLQkgKiBPaywgd2UncmUgc2V0IHVwLiAgc2VtLT5jb3VudCBpcyBrbm93biB0byBiZSBsZXNzIHRoYW4gemVybwlcCi0JICogc28gd2UgbXVzdCB3YWl0LgkJCQkJCVwKLQkgKgkJCQkJCQkJXAotCSAqIFdlIGNhbiBsZXQgZ28gdGhlIGxvY2sgZm9yIHB1cnBvc2VzIG9mIHdhaXRpbmcuCQlcCi0JICogV2UgcmUtYWNxdWlyZSBpdCBhZnRlciBhd2FraW5nIHNvIGFzIHRvIHByb3RlY3QJCVwKLQkgKiBhbGwgc2VtYXBob3JlIG9wZXJhdGlvbnMuCQkJCQlcCi0JICoJCQkJCQkJCVwKLQkgKiBJZiAidXAoKSIgaXMgY2FsbGVkIGJlZm9yZSB3ZSBjYWxsIHdha2luZ19ub25femVybygpIHRoZW4JXAotCSAqIHdlIHdpbGwgY2F0Y2ggaXQgcmlnaHQgYXdheS4gIElmIGl0IGlzIGNhbGxlZCBsYXRlciB0aGVuCVwKLQkgKiB3ZSB3aWxsIGhhdmUgdG8gZ28gdGhyb3VnaCBhIHdha2V1cCBjeWNsZSB0byBjYXRjaCBpdC4JXAotCSAqCQkJCQkJCQlcCi0JICogTXVsdGlwbGUgd2FpdGVycyBjb250ZW5kIGZvciB0aGUgc2VtYXBob3JlIGxvY2sgdG8gc2VlCVwKLQkgKiB3aG8gZ2V0cyB0byBnYXRlIHRocm91Z2ggYW5kIHdobyBoYXMgdG8gd2FpdCBzb21lIG1vcmUuCVwKLQkgKi8JCQkJCQkJCVwKLQlmb3IgKDs7KSB7Ci0KLSNkZWZpbmUgRE9XTl9UQUlMKHRhc2tfc3RhdGUpCQkJXAotCQl0c2stPnN0YXRlID0gKHRhc2tfc3RhdGUpOwlcCi0JfQkJCQkJXAotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQlcCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCi12b2lkIF9fc2NoZWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JRE9XTl9WQVIKLQlET1dOX0hFQUQoVEFTS19VTklOVEVSUlVQVElCTEUpCi0JaWYgKHdha2luZ19ub25femVybyhzZW0pKQotCQlicmVhazsKLQlzY2hlZHVsZSgpOwotCURPV05fVEFJTChUQVNLX1VOSU5URVJSVVBUSUJMRSkKLX0KLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQlET1dOX1ZBUgotCURPV05fSEVBRChUQVNLX0lOVEVSUlVQVElCTEUpCi0KLQlyZXQgPSB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzZW0sIHRzayk7Ci0JaWYgKHJldCkKLQl7Ci0JCWlmIChyZXQgPT0gMSkKLQkJCS8qIHJldCAhPSAwIG9ubHkgaWYgd2UgZ2V0IGludGVycnVwdGVkIC1hcmNhICovCi0JCQlyZXQgPSAwOwotCQlicmVhazsKLQl9Ci0Jc2NoZWR1bGUoKTsKLQlET1dOX1RBSUwoVEFTS19JTlRFUlJVUFRJQkxFKQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJldHVybiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzZW0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL01ha2VmaWxlIGIvYXJjaC9mcnYva2VybmVsL01ha2VmaWxlCmluZGV4IGU4ZjczZWQuLmMzNmY3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2Zydi9rZXJuZWwvTWFrZWZpbGUKQEAgLTksNyArOSw3IEBACiAKIG9iai15IDo9ICQoaGVhZHMteSkgZW50cnkubyBlbnRyeS10YWJsZS5vIGJyZWFrLm8gc3dpdGNoX3RvLm8ga2VybmVsX3RocmVhZC5vIFwKIAkga2VybmVsX2V4ZWN2ZS5vIHByb2Nlc3MubyB0cmFwcy5vIHB0cmFjZS5vIHNpZ25hbC5vIGRtYS5vIFwKLQkgc3lzX2Zydi5vIHRpbWUubyBzZW1hcGhvcmUubyBzZXR1cC5vIGZydl9rc3ltcy5vIFwKKwkgc3lzX2Zydi5vIHRpbWUubyBzZXR1cC5vIGZydl9rc3ltcy5vIFwKIAkgZGVidWctc3R1Yi5vIGlycS5vIHNsZWVwLm8gdWFjY2Vzcy5vCiAKIG9iai0kKENPTkZJR19HREJTVFVCKQkJKz0gZ2RiLXN0dWIubyBnZGItaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LXRhYmxlLlMgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUwppbmRleCBkM2I5MjUzLi5iZjM1ZjMzIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUwpAQCAtMzE2LDggKzMxNiwxNCBAQAogCS5zZWN0aW9uCS50cmFwLnZlY3RvcgogCS5vcmcJCVRCUl9UVF9UUkFQMCA+PiAyCiAJLmxvbmcJCXN5c3RlbV9jYWxsCi0JLnJlcHQJCTEyNgorCS5yZXB0CQkxMTkKIAkubG9uZwkJX19lbnRyeV91bnN1cHBvcnRlZF90cmFwCiAJLmVuZHIKKworCSMgdXNlcnNwYWNlIGF0b21pYyBvcCBlbXVsYXRpb24sIHRyYXBzIDEyMC0xMjYKKwkucmVwdAkJNworCS5sb25nCQlfX2VudHJ5X2F0b21pY19vcAorCS5lbmRyCisJCiAJLm9yZwkJVEJSX1RUX0JSRUFLID4+IDIKIAkubG9uZwkJX19lbnRyeV9kZWJ1Z19leGNlcHRpb24KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKaW5kZXggY2E2YTM0NS4uYjhhNGI5NCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKQEAgLTY1Niw2ICs2NTYsMjYgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIworIyBoYW5kbGUgYXRvbWljIG9wZXJhdGlvbiBlbXVsYXRpb24gZm9yIHVzZXJzcGFjZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCS5nbG9ibAkJX19lbnRyeV9hdG9taWNfb3AKK19fZW50cnlfYXRvbWljX29wOgorCUxFRFMJCTB4NjAxMgorCXNldGhpLnAJCSVoaShhdG9taWNfb3BlcmF0aW9uKSxncjUKKwlzZXRsbwkJJWxvKGF0b21pY19vcGVyYXRpb24pLGdyNQorCW1vdnNnCQllc2ZyMSxncjgKKwltb3ZzZwkJZXBjcjAsZ3I5CisJbW92c2cJCWVzcjAsZ3IxMAorCisJIyBub3cgdGhhdCB3ZSd2ZSBhY2Nlc3NlZCB0aGUgZXhjZXB0aW9uIHJlZ3MsIHdlIGNhbiBlbmFibGUgZXhjZXB0aW9ucworCW1vdnNnCQlwc3IsZ3I0CisJb3JpCQlncjQsI1BTUl9FVCxncjQKKwltb3ZncwkJZ3I0LHBzcgorCWptcGwJCUAoZ3I1LGdyMCkJOyBjYWxsIGF0b21pY19vcGVyYXRpb24oZXNmcjEsZXBjcjAsZXNyMCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwogIyBoYW5kbGUgbWVkaWEgZXhjZXB0aW9uCiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xNDk0LDkgKzE1MTQsMTEgQEAKIAkubG9uZyBzeXNfZXBvbGxfcHdhaXQKIAkubG9uZyBzeXNfdXRpbWVuc2F0CQkvKiAzMjAgKi8KIAkubG9uZyBzeXNfc2lnbmFsZmQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAorCS5sb25nIHN5c190aW1lcmZkX2NyZWF0ZQogCS5sb25nIHN5c19ldmVudGZkCiAJLmxvbmcgc3lzX2ZhbGxvY2F0ZQorCS5sb25nIHN5c190aW1lcmZkX3NldHRpbWUJLyogMzI1ICovCisJLmxvbmcgc3lzX3RpbWVyZmRfZ2V0dGltZQogCiAKIHN5c2NhbGxfdGFibGVfc2l6ZSA9ICguIC0gc3lzX2NhbGxfdGFibGUpCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMgYi9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMKaW5kZXggZjc3MjcwNC4uMDMxNmIzYyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaGVhZC5pbmMgYi9hcmNoL2Zydi9rZXJuZWwvaGVhZC5pbmMKaW5kZXggZDQyNGNkMi4uYmZmNjY2MiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2hlYWQuaW5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLmluYwpAQCAtNDYsNSArNDYsNSBAQAogI2lmZGVmIENPTkZJR19NTVUKIF9fc2RyYW1fYmFzZSA9IDB4MDAwMDAwMDAJCS8qIGJhc2UgYWRkcmVzcyB0byB3aGljaCBTRFJBTSByZWxvY2F0ZWQgKi8KICNlbHNlCi1fX3NkcmFtX2Jhc2UgPSAweGMwMDAwMDAwCQkvKiBiYXNlIGFkZHJlc3MgdG8gd2hpY2ggU0RSQU0gcmVsb2NhdGVkICovCitfX3NkcmFtX2Jhc2UgPSBfX3BhZ2Vfb2Zmc2V0CQkvKiBiYXNlIGFkZHJlc3MgdG8gd2hpY2ggU0RSQU0gcmVsb2NhdGVkICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvZnJ2L2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlM2ExNC4uMDAwMDAwMAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyogc2VtYXBob3JlLmM6IEZSLVYgc2VtYXBob3JlcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKiAtIERlcml2ZWQgZnJvbSBsaWIvcndzZW0tc3BpbmxvY2suYwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCi1zdHJ1Y3Qgc2VtX3dhaXRlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKLX07Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCi12b2lkIHNlbXRyYWNlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqc3RyKQotewotCWlmIChzZW0tPmRlYnVnKQotCQlwcmludGsoIlslZF0gJXMoeyVkLCVkfSlcbiIsCi0JCSAgICAgICBjdXJyZW50LT5waWQsCi0JCSAgICAgICBzdHIsCi0JCSAgICAgICBzZW0tPmNvdW50ZXIsCi0JCSAgICAgICBsaXN0X2VtcHR5KCZzZW0tPndhaXRfbGlzdCkgPyAwIDogMSk7Ci19Ci0jZWxzZQotI2RlZmluZSBzZW10cmFjZShTRU0sU1RSKSBkbyB7IH0gd2hpbGUoMCkKLSNlbmRpZgotCi0vKgotICogd2FpdCBmb3IgYSB0b2tlbiB0byBiZSBncmFudGVkIGZyb20gYSBzZW1hcGhvcmUKLSAqIC0gZW50ZXJlZCB3aXRoIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZAotICovCi12b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXN0cnVjdCBzZW1fd2FpdGVyIHdhaXRlcjsKLQotCXNlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fZG93biIpOwotCi0JLyogc2V0IHVwIG15IG93biBzdHlsZSBvZiB3YWl0cXVldWUgKi8KLQl3YWl0ZXIudGFzayA9IHRzazsKLQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKLQotCWxpc3RfYWRkX3RhaWwoJndhaXRlci5saXN0LCAmc2VtLT53YWl0X2xpc3QpOwotCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgc2VtYXBob3JlIHN0cnVjdCBhbnltb3JlICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQotCS8qIHdhaXQgdG8gYmUgZ2l2ZW4gdGhlIHNlbWFwaG9yZSAqLwotCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCi0JZm9yICg7OykgewotCQlpZiAobGlzdF9lbXB0eSgmd2FpdGVyLmxpc3QpKQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCX0KLQotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0Jc2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX2Rvd24iKTsKLX0KLQotRVhQT1JUX1NZTUJPTChfX2Rvd24pOwotCi0vKgotICogaW50ZXJydXB0aWJseSB3YWl0IGZvciBhIHRva2VuIHRvIGJlIGdyYW50ZWQgZnJvbSBhIHNlbWFwaG9yZQotICogLSBlbnRlcmVkIHdpdGggbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkCi0gKi8KLWludCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXN0cnVjdCBzZW1fd2FpdGVyIHdhaXRlcjsKLQlpbnQgcmV0OwotCi0Jc2VtdHJhY2Uoc2VtLCJFbnRlcmluZyBfX2Rvd25faW50ZXJydXB0aWJsZSIpOwotCi0JLyogc2V0IHVwIG15IG93biBzdHlsZSBvZiB3YWl0cXVldWUgKi8KLQl3YWl0ZXIudGFzayA9IHRzazsKLQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKLQotCWxpc3RfYWRkX3RhaWwoJndhaXRlci5saXN0LCAmc2VtLT53YWl0X2xpc3QpOwotCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgc2VtYXBob3JlIHN0cnVjdCBhbnltb3JlICovCi0Jc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQotCS8qIHdhaXQgdG8gYmUgZ2l2ZW4gdGhlIHNlbWFwaG9yZSAqLwotCXJldCA9IDA7Ci0JZm9yICg7OykgewotCQlpZiAobGlzdF9lbXB0eSgmd2FpdGVyLmxpc3QpKQotCQkJYnJlYWs7Ci0JCWlmICh1bmxpa2VseShzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpCi0JCQlnb3RvIGludGVycnVwdGVkOwotCQlzY2hlZHVsZSgpOwotCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JfQotCi0gb3V0OgotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0Jc2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX2Rvd25faW50ZXJydXB0aWJsZSIpOwotCXJldHVybiByZXQ7Ci0KLSBpbnRlcnJ1cHRlZDoKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQotCWlmICghbGlzdF9lbXB0eSgmd2FpdGVyLmxpc3QpKSB7Ci0JCWxpc3RfZGVsKCZ3YWl0ZXIubGlzdCk7Ci0JCXJldCA9IC1FSU5UUjsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCWlmIChyZXQgPT0gLUVJTlRSKQotCQlwdXRfdGFza19zdHJ1Y3QoY3VycmVudCk7Ci0JZ290byBvdXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwotCi0vKgotICogcmVsZWFzZSBhIHNpbmdsZSB0b2tlbiBiYWNrIHRvIGEgc2VtYXBob3JlCi0gKiAtIGVudGVyZWQgd2l0aCBsb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQKLSAqLwotdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlzdHJ1Y3Qgc2VtX3dhaXRlciAqd2FpdGVyOwotCi0Jc2VtdHJhY2Uoc2VtLCJFbnRlcmluZyBfX3VwIik7Ci0KLQkvKiBncmFudCB0aGUgdG9rZW4gdG8gdGhlIHByb2Nlc3MgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZSAqLwotCXdhaXRlciA9IGxpc3RfZW50cnkoc2VtLT53YWl0X2xpc3QubmV4dCwgc3RydWN0IHNlbV93YWl0ZXIsIGxpc3QpOwotCi0JLyogV2UgbXVzdCBiZSBjYXJlZnVsIG5vdCB0byB0b3VjaCAnd2FpdGVyJyBhZnRlciB3ZSBzZXQgLT50YXNrID0gTlVMTC4KLQkgKiBJdCBpcyBhbGxvY2F0ZWQgb24gdGhlIHdhaXRlcidzIHN0YWNrIGFuZCBtYXkgYmVjb21lIGludmFsaWQgYXQKLQkgKiBhbnkgdGltZSBhZnRlciB0aGF0IHBvaW50IChkdWUgdG8gYSB3YWtldXAgZnJvbSBhbm90aGVyIHNvdXJjZSkuCi0JICovCi0JbGlzdF9kZWxfaW5pdCgmd2FpdGVyLT5saXN0KTsKLQl0c2sgPSB3YWl0ZXItPnRhc2s7Ci0JbWIoKTsKLQl3YWl0ZXItPnRhc2sgPSBOVUxMOwotCXdha2VfdXBfcHJvY2Vzcyh0c2spOwotCXB1dF90YXNrX3N0cnVjdCh0c2spOwotCi0Jc2VtdHJhY2Uoc2VtLCJMZWF2aW5nIF9fdXAiKTsKLX0KLQotRVhQT1JUX1NZTUJPTChfX3VwKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9zd2l0Y2hfdG8uUyBiL2FyY2gvZnJ2L2tlcm5lbC9zd2l0Y2hfdG8uUwppbmRleCBiNTI3NWZhLi5iMDY2Njg2IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvc3dpdGNoX3RvLlMKKysrIGIvYXJjaC9mcnYva2VybmVsL3N3aXRjaF90by5TCkBAIC0xMDIsMTMgKzEwMiw2IEBACiAJbW92Z3MJCWdyMTQsbHIKIAliYXIKIAotCXNybGkJCWdyMTUsIzI4LGdyNQotCXN1YmljYwkJZ3I1LCMweGMsZ3IwLGljYzAKLQliZXEJCWljYzAsIzAsMTExZgotCWJyZWFrCi0Jbm9wCi0xMTE6Ci0KIAkjIGp1bXAgdG8gX19zd2l0Y2hfYmFjayBvciByZXRfZnJvbV9mb3JrIGFzIGFwcHJvcHJpYXRlCiAJIyAtIG1vdmUgcHJldiB0byBHUjgKIAltb3ZncwkJZ3I0LHBzcgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2Zydi9rZXJuZWwvdHJhcHMuYwppbmRleCAyZTYwOThjLi43MDg5YzI0IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvdHJhcHMuYwpAQCAtNzMsNyArNzMsNyBAQAogCQkgICAgICBlcGNyMCwgZXNyMCwgZXNmcjEpOwogCiAJaW5mby5zaV9lcnJubwk9IDA7Ci0JaW5mby5zaV9hZGRyCT0gKHZvaWQgKikgKChlcGNyMCAmIEVQQ1IwX1BDKSA/IChlcGNyMCAmIEVQQ1IwX1BDKSA6IF9fZnJhbWUtPnBjKTsKKwlpbmZvLnNpX2FkZHIJPSAodm9pZCAqKSAoKGVwY3IwICYgRVBDUjBfVikgPyAoZXBjcjAgJiBFUENSMF9QQykgOiBfX2ZyYW1lLT5wYyk7CiAKIAlzd2l0Y2ggKF9fZnJhbWUtPnRiciAmIFRCUl9UVCkgewogCWNhc2UgVEJSX1RUX0lMTEVHQUxfSU5TVFI6CkBAIC0xMDIsNiArMTAyLDIzMyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgorICogaGFuZGxlIGF0b21pYyBvcGVyYXRpb25zIHdpdGggZXJyb3JzCisgKiAtIGFyZ3VtZW50cyBpbiBncjgsIGdyOSwgZ3IxMAorICogLSBvcmlnaW5hbCBtZW1vcnkgdmFsdWUgcGxhY2VkIGluIGdyNQorICogLSByZXBsYWNlbWVudCBtZW1vcnkgdmFsdWUgcGxhY2VkIGluIGdyOQorICovCithc21saW5rYWdlIHZvaWQgYXRvbWljX29wZXJhdGlvbih1bnNpZ25lZCBsb25nIGVzZnIxLCB1bnNpZ25lZCBsb25nIGVwY3IwLAorCQkJCSB1bnNpZ25lZCBsb25nIGVzcjApCit7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhhdG9taWNfb3BfbG9jayk7CisJdW5zaWduZWQgbG9uZyB4LCB5LCB6LCAqcDsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisJc2lnaW5mb190IGluZm87CisJaW50IHJldDsKKworCXkgPSAwOworCXogPSAwOworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlpZiAoIXVzZXJfbW9kZShfX2ZyYW1lKSkKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlzd2l0Y2ggKF9fZnJhbWUtPnRiciAmIFRCUl9UVCkgeworCQkvKiBUSVJBIGdyMCwjMTIwCisJCSAqIHUzMiBfX2F0b21pY191c2VyX2NtcHhjaGczMih1MzIgKnB0ciwgdTMyIHRlc3QsIHUzMiBuZXcpCisJCSAqLworCWNhc2UgVEJSX1RUX0FUT01JQ19DTVBYQ0hHMzI6CisJCXAgPSAodW5zaWduZWQgbG9uZyAqKSBfX2ZyYW1lLT5ncjg7CisJCXggPSBfX2ZyYW1lLT5ncjk7CisJCXkgPSBfX2ZyYW1lLT5ncjEwOworCisJCWZvciAoOzspIHsKKwkJCXJldCA9IGdldF91c2VyKHosIHApOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnJvcjsKKworCQkJaWYgKHogIT0geCkKKwkJCQlnb3RvIGRvbmU7CisKKwkJCXNwaW5fbG9ja19pcnEoJmF0b21pY19vcF9sb2NrKTsKKworCQkJaWYgKF9fZ2V0X3VzZXIoeiwgcCkgPT0gMCkgeworCQkJCWlmICh6ICE9IHgpCisJCQkJCWdvdG8gZG9uZTI7CisKKwkJCQlpZiAoX19wdXRfdXNlcih5LCBwKSA9PSAwKQorCQkJCQlnb3RvIGRvbmUyOworCQkJCWdvdG8gZXJyb3IyOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnEoJmF0b21pY19vcF9sb2NrKTsKKwkJfQorCisJCS8qIFRJUkEgZ3IwLCMxMjEKKwkJICogdTMyIF9fYXRvbWljX2tlcm5lbF94Y2hnMzIodm9pZCAqdiwgdTMyIG5ldykKKwkJICovCisJY2FzZSBUQlJfVFRfQVRPTUlDX1hDSEczMjoKKwkJcCA9ICh1bnNpZ25lZCBsb25nICopIF9fZnJhbWUtPmdyODsKKwkJeSA9IF9fZnJhbWUtPmdyOTsKKworCQlmb3IgKDs7KSB7CisJCQlyZXQgPSBnZXRfdXNlcih6LCBwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCXNwaW5fbG9ja19pcnEoJmF0b21pY19vcF9sb2NrKTsKKworCQkJaWYgKF9fZ2V0X3VzZXIoeiwgcCkgPT0gMCkgeworCQkJCWlmIChfX3B1dF91c2VyKHksIHApID09IDApCisJCQkJCWdvdG8gZG9uZTI7CisJCQkJZ290byBlcnJvcjI7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmYXRvbWljX29wX2xvY2spOworCQl9CisKKwkJLyogVElSQSBncjAsIzEyMgorCQkgKiB1bG9uZyBfX2F0b21pY19rZXJuZWxfWE9SX3JldHVybih1bG9uZyBpLCB1bG9uZyAqdikKKwkJICovCisJY2FzZSBUQlJfVFRfQVRPTUlDX1hPUjoKKwkJcCA9ICh1bnNpZ25lZCBsb25nICopIF9fZnJhbWUtPmdyODsKKwkJeCA9IF9fZnJhbWUtPmdyOTsKKworCQlmb3IgKDs7KSB7CisJCQlyZXQgPSBnZXRfdXNlcih6LCBwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCXNwaW5fbG9ja19pcnEoJmF0b21pY19vcF9sb2NrKTsKKworCQkJaWYgKF9fZ2V0X3VzZXIoeiwgcCkgPT0gMCkgeworCQkJCXkgPSB4IF4gejsKKwkJCQlpZiAoX19wdXRfdXNlcih5LCBwKSA9PSAwKQorCQkJCQlnb3RvIGRvbmUyOworCQkJCWdvdG8gZXJyb3IyOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnEoJmF0b21pY19vcF9sb2NrKTsKKwkJfQorCisJCS8qIFRJUkEgZ3IwLCMxMjMKKwkJICogdWxvbmcgX19hdG9taWNfa2VybmVsX09SX3JldHVybih1bG9uZyBpLCB1bG9uZyAqdikKKwkJICovCisJY2FzZSBUQlJfVFRfQVRPTUlDX09SOgorCQlwID0gKHVuc2lnbmVkIGxvbmcgKikgX19mcmFtZS0+Z3I4OworCQl4ID0gX19mcmFtZS0+Z3I5OworCisJCWZvciAoOzspIHsKKwkJCXJldCA9IGdldF91c2VyKHosIHApOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnJvcjsKKworCQkJc3Bpbl9sb2NrX2lycSgmYXRvbWljX29wX2xvY2spOworCisJCQlpZiAoX19nZXRfdXNlcih6LCBwKSA9PSAwKSB7CisJCQkJeSA9IHggXiB6OworCQkJCWlmIChfX3B1dF91c2VyKHksIHApID09IDApCisJCQkJCWdvdG8gZG9uZTI7CisJCQkJZ290byBlcnJvcjI7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmYXRvbWljX29wX2xvY2spOworCQl9CisKKwkJLyogVElSQSBncjAsIzEyNAorCQkgKiB1bG9uZyBfX2F0b21pY19rZXJuZWxfQU5EX3JldHVybih1bG9uZyBpLCB1bG9uZyAqdikKKwkJICovCisJY2FzZSBUQlJfVFRfQVRPTUlDX0FORDoKKwkJcCA9ICh1bnNpZ25lZCBsb25nICopIF9fZnJhbWUtPmdyODsKKwkJeCA9IF9fZnJhbWUtPmdyOTsKKworCQlmb3IgKDs7KSB7CisJCQlyZXQgPSBnZXRfdXNlcih6LCBwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCXNwaW5fbG9ja19pcnEoJmF0b21pY19vcF9sb2NrKTsKKworCQkJaWYgKF9fZ2V0X3VzZXIoeiwgcCkgPT0gMCkgeworCQkJCXkgPSB4ICYgejsKKwkJCQlpZiAoX19wdXRfdXNlcih5LCBwKSA9PSAwKQorCQkJCQlnb3RvIGRvbmUyOworCQkJCWdvdG8gZXJyb3IyOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnEoJmF0b21pY19vcF9sb2NrKTsKKwkJfQorCisJCS8qIFRJUkEgZ3IwLCMxMjUKKwkJICogaW50IF9fYXRvbWljX3VzZXJfc3ViX3JldHVybihhdG9taWNfdCAqdiwgaW50IGkpCisJCSAqLworCWNhc2UgVEJSX1RUX0FUT01JQ19TVUI6CisJCXAgPSAodW5zaWduZWQgbG9uZyAqKSBfX2ZyYW1lLT5ncjg7CisJCXggPSBfX2ZyYW1lLT5ncjk7CisKKwkJZm9yICg7OykgeworCQkJcmV0ID0gZ2V0X3VzZXIoeiwgcCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGVycm9yOworCisJCQlzcGluX2xvY2tfaXJxKCZhdG9taWNfb3BfbG9jayk7CisKKwkJCWlmIChfX2dldF91c2VyKHosIHApID09IDApIHsKKwkJCQl5ID0geiAtIHg7CisJCQkJaWYgKF9fcHV0X3VzZXIoeSwgcCkgPT0gMCkKKwkJCQkJZ290byBkb25lMjsKKwkJCQlnb3RvIGVycm9yMjsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2tfaXJxKCZhdG9taWNfb3BfbG9jayk7CisJCX0KKworCQkvKiBUSVJBIGdyMCwjMTI2CisJCSAqIGludCBfX2F0b21pY191c2VyX2FkZF9yZXR1cm4oYXRvbWljX3QgKnYsIGludCBpKQorCQkgKi8KKwljYXNlIFRCUl9UVF9BVE9NSUNfQUREOgorCQlwID0gKHVuc2lnbmVkIGxvbmcgKikgX19mcmFtZS0+Z3I4OworCQl4ID0gX19mcmFtZS0+Z3I5OworCisJCWZvciAoOzspIHsKKwkJCXJldCA9IGdldF91c2VyKHosIHApOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnJvcjsKKworCQkJc3Bpbl9sb2NrX2lycSgmYXRvbWljX29wX2xvY2spOworCisJCQlpZiAoX19nZXRfdXNlcih6LCBwKSA9PSAwKSB7CisJCQkJeSA9IHogKyB4OworCQkJCWlmIChfX3B1dF91c2VyKHksIHApID09IDApCisJCQkJCWdvdG8gZG9uZTI7CisJCQkJZ290byBlcnJvcjI7CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmYXRvbWljX29wX2xvY2spOworCQl9CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKK2RvbmUyOgorCXNwaW5fdW5sb2NrX2lycSgmYXRvbWljX29wX2xvY2spOworZG9uZToKKwlpZiAoIXVzZXJfbW9kZShfX2ZyYW1lKSkKKwkJc2V0X2ZzKG9sZGZzKTsKKwlfX2ZyYW1lLT5ncjUgPSB6OworCV9fZnJhbWUtPmdyOSA9IHk7CisJcmV0dXJuOworCitlcnJvcjI6CisJc3Bpbl91bmxvY2tfaXJxKCZhdG9taWNfb3BfbG9jayk7CitlcnJvcjoKKwlpZiAoIXVzZXJfbW9kZShfX2ZyYW1lKSkKKwkJc2V0X2ZzKG9sZGZzKTsKKwlfX2ZyYW1lLT5wYyAtPSA0OworCisJZGllX2lmX2tlcm5lbCgiLS0gQXRvbWljIE9wIEVycm9yIC0tXG4iKTsKKworCWluZm8uc2lfc2lnbm8JPSBTSUdTRUdWOworCWluZm8uc2lfY29kZQk9IFNFR1ZfQUNDRVJSOworCWluZm8uc2lfZXJybm8JPSAwOworCWluZm8uc2lfYWRkcgk9ICh2b2lkICopIF9fZnJhbWUtPnBjOworCisJZm9yY2Vfc2lnX2luZm8oaW5mby5zaV9zaWdubywgJmluZm8sIGN1cnJlbnQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgogICoKICAqLwogYXNtbGlua2FnZSB2b2lkIG1lZGlhX2V4Y2VwdGlvbih1bnNpZ25lZCBsb25nIG1zcjAsIHVuc2lnbmVkIGxvbmcgbXNyMSkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9mcnYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMTc3MjVhNS4uYjk1YzRlYSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9mcnYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTc2LDkgKzc2LDYgQEAKIAkgICooLmRhdGEuaW5pdF90YXNrKQogICB9CiAKLSAgLiA9IEFMSUdOKDQwOTYpOwotICAuZGF0YS5wYWdlX2FsaWduZWQgOiB7ICooLmRhdGEuaWR0KSB9Ci0KICAgLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKICAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7ICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuaCBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmgKaW5kZXggNzQ4MTc5Ny4uMGM3YmYzOSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuaAorKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5oCkBAIC0xNyw4ICsxNyw2IEBACiAjZGVmaW5lIFBDSV9QUk9CRV9CSU9TCQkweDAwMDEKICNkZWZpbmUgUENJX1BST0JFX0NPTkYxCQkweDAwMDIKICNkZWZpbmUgUENJX1BST0JFX0NPTkYyCQkweDAwMDQKLSNkZWZpbmUgUENJX05PX1NPUlQJCTB4MDEwMAotI2RlZmluZSBQQ0lfQklPU19TT1JUCQkweDAyMDAKICNkZWZpbmUgUENJX05PX0NIRUNLUwkJMHgwNDAwCiAjZGVmaW5lIFBDSV9BU1NJR05fUk9NUwkJMHgxMDAwCiAjZGVmaW5lIFBDSV9CSU9TX0lSUV9TQ0FOCTB4MjAwMApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS12ZGsuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMKaW5kZXggNmQ1MWYxMy4uZjAwM2NmYSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS12ZGsuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLXZkay5jCkBAIC0xOTksNTggKzE5OSw2IEBACiB9CiAKIC8qCi0gKiBTZXZlcmFsIGJ1Z2d5IG1vdGhlcmJvYXJkcyBhZGRyZXNzIG9ubHkgMTYgZGV2aWNlcyBhbmQgbWlycm9yCi0gKiB0aGVtIHRvIG5leHQgMTYgSURzLiBXZSB0cnkgdG8gZGV0ZWN0IHRoaXMgYGZlYXR1cmUnIG9uIGFsbAotICogcHJpbWFyeSBidXNlcyAodGhvc2UgY29udGFpbmluZyBob3N0IGJyaWRnZXMgYXMgdGhleSBhcmUKLSAqIGV4cGVjdGVkIHRvIGJlIHVuaXF1ZSkgYW5kIHJlbW92ZSB0aGUgZ2hvc3QgZGV2aWNlcy4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9naG9zdHMoc3RydWN0IHBjaV9idXMgKmIpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbG4sICptbjsKLQlzdHJ1Y3QgcGNpX2RldiAqZCwgKmU7Ci0JaW50IG1pcnJvciA9IFBDSV9ERVZGTigxNiwwKTsKLQlpbnQgc2Vlbl9ob3N0X2JyaWRnZSA9IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGxuPWItPmRldmljZXMubmV4dDsgbG4gIT0gJmItPmRldmljZXM7IGxuPWxuLT5uZXh0KSB7Ci0JCWQgPSBwY2lfZGV2X2IobG4pOwotCQlpZiAoKGQtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfSE9TVCkKLQkJCXNlZW5faG9zdF9icmlkZ2UrKzsKLQkJZm9yIChtbj1sbi0+bmV4dDsgbW4gIT0gJmItPmRldmljZXM7IG1uPW1uLT5uZXh0KSB7Ci0JCQllID0gcGNpX2Rldl9iKG1uKTsKLQkJCWlmIChlLT5kZXZmbiAhPSBkLT5kZXZmbiArIG1pcnJvciB8fAotCQkJICAgIGUtPnZlbmRvciAhPSBkLT52ZW5kb3IgfHwKLQkJCSAgICBlLT5kZXZpY2UgIT0gZC0+ZGV2aWNlIHx8Ci0JCQkgICAgZS0+Y2xhc3MgIT0gZC0+Y2xhc3MpCi0JCQkJY29udGludWU7Ci0JCQlmb3IoaT0wOyBpPFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspCi0JCQkJaWYgKGUtPnJlc291cmNlW2ldLnN0YXJ0ICE9IGQtPnJlc291cmNlW2ldLnN0YXJ0IHx8Ci0JCQkJICAgIGUtPnJlc291cmNlW2ldLmVuZCAhPSBkLT5yZXNvdXJjZVtpXS5lbmQgfHwKLQkJCQkgICAgZS0+cmVzb3VyY2VbaV0uZmxhZ3MgIT0gZC0+cmVzb3VyY2VbaV0uZmxhZ3MpCi0JCQkJCWNvbnRpbnVlOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG1uID09ICZiLT5kZXZpY2VzKQotCQkJcmV0dXJuOwotCX0KLQlpZiAoIXNlZW5faG9zdF9icmlkZ2UpCi0JCXJldHVybjsKLQlwcmludGsoIlBDSTogSWdub3JpbmcgZ2hvc3QgZGV2aWNlcyBvbiBidXMgJTAyeFxuIiwgYi0+bnVtYmVyKTsKLQotCWxuID0gJmItPmRldmljZXM7Ci0Jd2hpbGUgKGxuLT5uZXh0ICE9ICZiLT5kZXZpY2VzKSB7Ci0JCWQgPSBwY2lfZGV2X2IobG4tPm5leHQpOwotCQlpZiAoZC0+ZGV2Zm4gPj0gbWlycm9yKSB7Ci0JCQlsaXN0X2RlbCgmZC0+Z2xvYmFsX2xpc3QpOwotCQkJbGlzdF9kZWwoJmQtPmJ1c19saXN0KTsKLQkJCWtmcmVlKGQpOwotCQl9IGVsc2UKLQkJCWxuID0gbG4tPm5leHQ7Ci0JfQotfQotCi0vKgogICogRGlzY292ZXIgcmVtYWluaW5nIFBDSSBidXNlcyBpbiBjYXNlIHRoZXJlIGFyZSBwZWVyIGhvc3QgYnJpZGdlcy4KICAqIFdlIHVzZSB0aGUgbnVtYmVyIG9mIGxhc3QgUENJIGJ1cyBwcm92aWRlZCBieSB0aGUgUENJIEJJT1MuCiAgKi8KQEAgLTM1Niw3ICszMDQsNiBAQAogI2lmIDAKIAlwcmludGsoIiMjIyBQQ0lCSU9TX0ZJWFVQX0JVUyglZClcbiIsYnVzLT5udW1iZXIpOwogI2VuZGlmCi0JcGNpYmlvc19maXh1cF9naG9zdHMoYnVzKTsKIAlwY2lfcmVhZF9icmlkZ2VfYmFzZXMoYnVzKTsKIAogCWlmIChidXMtPm51bWJlciA9PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tbS9oaWdobWVtLmMgYi9hcmNoL2Zydi9tbS9oaWdobWVtLmMKaW5kZXggN2Y3N2RiNy4uZWFkZDA3NiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvZnJ2L21tL2hpZ2htZW0uYwpAQCAtMzYsNiArMzYsMyBAQAogewogCXJldHVybiB2aXJ0X3RvX3BhZ2UocHRyKTsKIH0KLQotCi1FWFBPUlRfU1lNQk9MKGttYXBfYXRvbWljX3RvX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9kZWZjb25maWcgYi9hcmNoL2g4MzAwL2RlZmNvbmZpZwppbmRleCA4ZjFlYzMyLi44OTAxY2RiIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2RlZmNvbmZpZworKysgYi9hcmNoL2g4MzAwL2RlZmNvbmZpZwpAQCAtMSw1MSArMSw5OCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExLXJjMQotIyBTdW4gSmFuIDE2IDE3OjI0OjM4IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzEKKyMgRnJpIEZlYiAxNSAxNzoxMzoxNCAyMDA4CiAjCiBDT05GSUdfSDgzMDA9eQogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX1RJTUVfTE9XX1JFUz15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX05PX0RNQT15CiBDT05GSUdfSVNBPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19DX1NZTUJPTF9QUkVGSVg9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfU0lHTkFMRkQgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJGRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVkVOVEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CitDT05GSUdfU0xPQj15CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX09QUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0xCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIElPIFNjaGVkdWxlcnMKICMKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCkBAIC02MiwxNCArMTA5LDI2IEBACiAjIERldGFpbCBTZWxlY3Rpb24KICMKICMgQ09ORklHX0g4MzAwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IODMwMDcgaXMgbm90IHNldAorQ09ORklHX0g4MzAwNz15CiAjIENPTkZJR19IODMwNDggaXMgbm90IHNldAotQ09ORklHX0g4MzA2OD15CisjIENPTkZJR19IODMwNjggaXMgbm90IHNldAogQ09ORklHX0NQVV9DTE9DSz0yMDAwMAotIyBDT05GSUdfUkFNS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ST01LRVJORUw9eQorQ09ORklHX1JBTUtFUk5FTD15CisjIENPTkZJR19ST01LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0NQVV9IODMwMEg9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19WSVJUX1RPX0JVUz15CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKQEAgLTc3LDM0ICsxMzYsNDIgQEAKIENPTkZJR19CSU5GTVRfRkxBVD15CiBDT05GSUdfQklORk1UX1pGTEFUPXkKICMgQ09ORklHX0JJTkZNVF9TSEFSRURfRkxBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIE5ldHdvcmtpbmcKKyMKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CiAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTEyOSw3ICsxOTYsOSBAQAogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1VDTElOVVg9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwpAQCAtMTM3LDcgKzIwNiw2IEBACiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2LDYzICsyMTQsMjcgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIEJsb2NrIGRldmljZXMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogCiAjCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi0KLSMKLSMgSW5wdXQgSS9PIGRyaXZlcnMKLSMKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtMjIzLDQ1ICsyNTUsMzEgQEAKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwogQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19GUz15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0yODAsMTEgKzI5OCwxMSBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLSMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMjk2LDEyICszMTQsMTMgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiAKQEAgLTMxMCwyMiArMzI5LDIzIEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0ZVTExERUJVRz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVTExERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIUFJPRklMRSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fS0VSTkVMX01TRz15CisjIENPTkZJR19OT19LRVJORUxfTVNHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NBTExfUFJJTlQgaXMgbm90IHNldAogIyBDT05GSUdfR0RCX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMzM3LDIwICszNTcsMTcgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0hBU19JT01FTT15CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaDgzMDAva2VybmVsL01ha2VmaWxlCmluZGV4IDg3NGY2YWUuLjZjMjQ4YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogZXh0cmEteSA6PSB2bWxpbnV4LmxkcwogCiBvYmoteSA6PSBwcm9jZXNzLm8gdHJhcHMubyBwdHJhY2UubyBpcnEubyBcCi0JIHN5c19oODMwMC5vIHRpbWUubyBzZW1hcGhvcmUubyBzaWduYWwubyBcCisJIHN5c19oODMwMC5vIHRpbWUubyBzaWduYWwubyBcCiAgICAgICAgICBzZXR1cC5vIGdwaW8ubyBpbml0X3Rhc2subyBzeXNjYWxscy5vIFwKIAkgZW50cnkubwogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYwppbmRleCBkMWIxNTI2Li42ODY2YmQ5IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwppbmRleCA1YTFiNGNmLi5lZjRmMDA0IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwpAQCAtMjYsNyArMjYsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyAqaW50ZXJydXB0X3JlZGlyZWN0X3RhYmxlOwogZXh0ZXJuIGNvbnN0IGludCBoODMwMF9zYXZlZF92ZWN0b3JzW107Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBoODMwMF90cmFwX3RhYmxlW107CitleHRlcm4gY29uc3QgaDgzMDBfdmVjdG9yIGg4MzAwX3RyYXBfdGFibGVbXTsKIGludCBoODMwMF9lbmFibGVfaXJxX3Bpbih1bnNpZ25lZCBpbnQgaXJxKTsKIHZvaWQgaDgzMDBfZGlzYWJsZV9pcnFfcGluKHVuc2lnbmVkIGludCBpcnEpOwogCkBAIC0xMTYsNyArMTE2LDcgQEAKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nICpyYW12ZWMsKnJhbXZlY19wOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnRyYXBfZW50cnk7CisJY29uc3QgaDgzMDBfdmVjdG9yICp0cmFwX2VudHJ5OwogCWNvbnN0IGludCAqc2F2ZWRfdmVjdG9yOwogCiAJcmFtdmVjID0gZ2V0X3ZlY3Rvcl9hZGRyZXNzKCk7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3NlbWFwaG9yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTJjYmJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAgR2VuZXJpYyBzZW1hcGhvcmUgY29kZS4gQnV5ZXIgYmV3YXJlLiBEbyB5b3VyIG93bgotICogc3BlY2lmaWMgY2hhbmdlcyBpbiA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KLQotI2lmbmRlZiBDT05GSUdfUk1XX0lOU05TCi1zcGlubG9ja190IHNlbWFwaG9yZV93YWtlX2xvY2s7Ci0jZW5kaWYKLQotLyoKLSAqIFNlbWFwaG9yZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgdHdvLXdheSBjb3VudGVyOgotICogVGhlICJjb3VudCIgdmFyaWFibGUgaXMgZGVjcmVtZW50ZWQgZm9yIGVhY2ggcHJvY2VzcwotICogdGhhdCB0cmllcyB0byBzbGVlcCwgd2hpbGUgdGhlICJ3YWtpbmciIHZhcmlhYmxlIGlzCi0gKiBpbmNyZW1lbnRlZCB3aGVuIHRoZSAidXAoKSIgY29kZSBnb2VzIHRvIHdha2UgdXAgd2FpdGluZwotICogcHJvY2Vzc2VzLgotICoKLSAqIE5vdGFibHksIHRoZSBpbmxpbmUgInVwKCkiIGFuZCAiZG93bigpIiBmdW5jdGlvbnMgY2FuCi0gKiBlZmZpY2llbnRseSB0ZXN0IGlmIHRoZXkgbmVlZCB0byBkbyBhbnkgZXh0cmEgd29yayAodXAKLSAqIG5lZWRzIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqIHdha2luZ19ub25femVybygpIChmcm9tIGFzbS9zZW1hcGhvcmUuaCkgbXVzdCBleGVjdXRlCi0gKiBhdG9taWNhbGx5LgotICoKLSAqIFdoZW4gX191cCgpIGlzIGNhbGxlZCwgdGhlIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIGluY3JlbWVudGluZyBpdCwgYW5kIHdlIG5lZWQgdG8gd2FrZSB1cCBzb21lYm9keS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgYWRkcyBvbmUgdG8gdGhlIGNvdW50IG9mIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8KLSAqIHdha2UgdXAgYW5kIGV4aXQuICBBTEwgd2FpdGluZyBwcm9jZXNzZXMgYWN0dWFsbHkgd2FrZSB1cCBidXQKLSAqIG9ubHkgdGhlIG9uZSB0aGF0IGdldHMgdG8gdGhlICJ3YWtpbmciIGZpZWxkIGZpcnN0IHdpbGwgZ2F0ZQotICogdGhyb3VnaCBhbmQgYWNxdWlyZSB0aGUgc2VtYXBob3JlLiAgVGhlIG90aGVycyB3aWxsIGdvIGJhY2sKLSAqIHRvIHNsZWVwLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMKLSAqIGNvbnRlbnRpb24gb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZQotICogIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUgd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUKLSAqIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbiA8YXNtL3NlbWFwaG9yZS5oPgotICogd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXdha2Vfb25lX21vcmUoc2VtKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi0vKgotICogUGVyZm9ybSB0aGUgImRvd24iIGZ1bmN0aW9uLiAgUmV0dXJuIHplcm8gZm9yIHNlbWFwaG9yZSBhY3F1aXJlZCwKLSAqIHJldHVybiBuZWdhdGl2ZSBmb3Igc2lnbmFsbGVkIG91dCBvZiB0aGUgZnVuY3Rpb24uCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duLCB0aGUgcmV0dXJuIGlzIGlnbm9yZWQgYW5kIHRoZSB3YWl0IGxvb3AgaXMKLSAqIG5vdCBpbnRlcnJ1cHRpYmxlLiAgVGhpcyBtZWFucyB0aGF0IGEgdGFzayB3YWl0aW5nIG9uIGEgc2VtYXBob3JlCi0gKiB1c2luZyAiZG93bigpIiBjYW5ub3QgYmUga2lsbGVkIHVudGlsIHNvbWVvbmUgZG9lcyBhbiAidXAoKSIgb24KLSAqIHRoZSBzZW1hcGhvcmUuCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duX2ludGVycnVwdGlibGUsIHRoZSByZXR1cm4gdmFsdWUgZ2V0cyBjaGVja2VkCi0gKiB1cG9uIHJldHVybi4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbmVnYXRpdmUgdGhlbiB0aGUgdGFzayBjb250aW51ZXMKLSAqIHdpdGggdGhlIG5lZ2F0aXZlIHZhbHVlIGluIHRoZSByZXR1cm4gcmVnaXN0ZXIgKGl0IGNhbiBiZSB0ZXN0ZWQgYnkKLSAqIHRoZSBjYWxsZXIpLgotICoKLSAqIEVpdGhlciBmb3JtIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggInVwKCkiLgotICoKLSAqLwotCi0KLSNkZWZpbmUgRE9XTl9IRUFEKHRhc2tfc3RhdGUpCQkJCQkJXAotCQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCWN1cnJlbnQtPnN0YXRlID0gKHRhc2tfc3RhdGUpOwkJCQkJXAotCWFkZF93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsJCQkJXAotCQkJCQkJCQkJXAotCS8qCQkJCQkJCQlcCi0JICogT2ssIHdlJ3JlIHNldCB1cC4gIHNlbS0+Y291bnQgaXMga25vd24gdG8gYmUgbGVzcyB0aGFuIHplcm8JXAotCSAqIHNvIHdlIG11c3Qgd2FpdC4JCQkJCQlcCi0JICoJCQkJCQkJCVwKLQkgKiBXZSBjYW4gbGV0IGdvIHRoZSBsb2NrIGZvciBwdXJwb3NlcyBvZiB3YWl0aW5nLgkJXAotCSAqIFdlIHJlLWFjcXVpcmUgaXQgYWZ0ZXIgYXdha2luZyBzbyBhcyB0byBwcm90ZWN0CQlcCi0JICogYWxsIHNlbWFwaG9yZSBvcGVyYXRpb25zLgkJCQkJXAotCSAqCQkJCQkJCQlcCi0JICogSWYgInVwKCkiIGlzIGNhbGxlZCBiZWZvcmUgd2UgY2FsbCB3YWtpbmdfbm9uX3plcm8oKSB0aGVuCVwKLQkgKiB3ZSB3aWxsIGNhdGNoIGl0IHJpZ2h0IGF3YXkuICBJZiBpdCBpcyBjYWxsZWQgbGF0ZXIgdGhlbglcCi0JICogd2Ugd2lsbCBoYXZlIHRvIGdvIHRocm91Z2ggYSB3YWtldXAgY3ljbGUgdG8gY2F0Y2ggaXQuCVwKLQkgKgkJCQkJCQkJXAotCSAqIE11bHRpcGxlIHdhaXRlcnMgY29udGVuZCBmb3IgdGhlIHNlbWFwaG9yZSBsb2NrIHRvIHNlZQlcCi0JICogd2hvIGdldHMgdG8gZ2F0ZSB0aHJvdWdoIGFuZCB3aG8gaGFzIHRvIHdhaXQgc29tZSBtb3JlLglcCi0JICovCQkJCQkJCQlcCi0JZm9yICg7OykgewotCi0jZGVmaW5lIERPV05fVEFJTCh0YXNrX3N0YXRlKQkJCVwKLQkJY3VycmVudC0+c3RhdGUgPSAodGFza19zdGF0ZSk7CVwKLQl9CQkJCQlcCi0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQlcCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCi12b2lkIF9fc2NoZWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlET1dOX0hFQUQoVEFTS19VTklOVEVSUlVQVElCTEUpCi0JaWYgKHdha2luZ19ub25femVybyhzZW0pKQotCQlicmVhazsKLQlzY2hlZHVsZSgpOwotCURPV05fVEFJTChUQVNLX1VOSU5URVJSVVBUSUJMRSkKLX0KLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlpbnQgcmV0ID0gMDsKLQotCURPV05fSEVBRChUQVNLX0lOVEVSUlVQVElCTEUpCi0KLQlyZXQgPSB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzZW0sIGN1cnJlbnQpOwotCWlmIChyZXQpCi0JewotCQlpZiAocmV0ID09IDEpCi0JCQkvKiByZXQgIT0gMCBvbmx5IGlmIHdlIGdldCBpbnRlcnJ1cHRlZCAtYXJjYSAqLwotCQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JfQotCXNjaGVkdWxlKCk7Ci0JRE9XTl9UQUlMKFRBU0tfSU5URVJSVVBUSUJMRSkKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlyZXR1cm4gd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc2VtKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9oODMwMC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNjJlYTEyZC4uY2YzNDcyZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvc2lnbmFsLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCQlyZXQgPSAodW5zaWduZWQgY2hhciAqKShrYS0+c2Euc2FfcmVzdG9yZXIpOwogCWVsc2UgewogCQkvKiBzdWIubCBlcjAsZXIwOyBtb3YuYiAjX19OUl9zaWdyZXR1cm4scjBsOyB0cmFwYSAjMCAqLwotCQllcnIgIT0gX19wdXRfdXNlcigweDFhODBmODAwICsgKF9fTlJfc2lncmV0dXJuICYgMHhmZiksCisJCWVyciB8PSBfX3B1dF91c2VyKDB4MWE4MGY4MDAgKyAoX19OUl9zaWdyZXR1cm4gJiAweGZmKSwKIAkJCQkgICh1bnNpZ25lZCBsb25nICopKGZyYW1lLT5yZXRjb2RlICsgMCkpOwogCQllcnIgfD0gX19wdXRfdXNlcigweDU3MDAsICh1bnNpZ25lZCBzaG9ydCAqKShmcmFtZS0+cmV0Y29kZSArIDQpKTsKIAl9CkBAIC00MjgsNyArNDI4LDcgQEAKIAkJcmV0ID0gKHVuc2lnbmVkIGNoYXIgKikoa2EtPnNhLnNhX3Jlc3RvcmVyKTsKIAllbHNlIHsKIAkJLyogc3ViLmwgZXIwLGVyMDsgbW92LmIgI19fTlJfc2lncmV0dXJuLHIwbDsgdHJhcGEgIzAgKi8KLQkJZXJyICE9IF9fcHV0X3VzZXIoMHgxYTgwZjgwMCArIChfX05SX3NpZ3JldHVybiAmIDB4ZmYpLAorCQllcnIgfD0gX19wdXRfdXNlcigweDFhODBmODAwICsgKF9fTlJfc2lncmV0dXJuICYgMHhmZiksCiAJCQkJICAodW5zaWduZWQgbG9uZyAqKShmcmFtZS0+cmV0Y29kZSArIDApKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoMHg1NzAwLCAodW5zaWduZWQgc2hvcnQgKikoZnJhbWUtPnJldGNvZGUgKyA0KSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9NYWtlZmlsZQppbmRleCBjNTA5NjM2Li40MjBmNzNiIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9NYWtlZmlsZQorKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKICMgUmV1c2UgYW55IGZpbGVzIHdlIGNhbiBmcm9tIHRoZSBIOC8zMDBICiAjCiAKLW9iai15IDo9IGlycV9waW4ubyBwdHJhY2VfaDgzMDBoLm8KK29iai15IDo9IGlycS5vIHB0cmFjZV9oODMwMGgubwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaXJxLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTc3MzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaXJxLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIEludGVycnVwdCBoYW5kbGluZyBIOC8zMDBIIGRlcGVuZC4KKyAqIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgorCitjb25zdCBpbnQgX19pbml0ZGF0YSBoODMwMF9zYXZlZF92ZWN0b3JzW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfR0RCX0RFQlVHKQorCVRSQVAzX1ZFQywJLyogVFJBUEEgIzMgaXMgR0RCIGJyZWFrcG9pbnQgKi8KKyNlbmRpZgorCS0xLAorfTsKKworY29uc3QgaDgzMDBfdmVjdG9yIF9faW5pdGRhdGEgaDgzMDBfdHJhcF90YWJsZVtdID0geworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJc3lzdGVtX2NhbGwsCisJMCwKKwkwLAorCXRyYWNlX2JyZWFrLAorfTsKKworaW50IGg4MzAwX2VuYWJsZV9pcnFfcGluKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGJpdG1hc2s7CisJaWYgKGlycSA8IEVYVF9JUlEwIHx8IGlycSA+IEVYVF9JUlE1KQorCQlyZXR1cm4gMDsKKworCS8qIGluaXRpYWxpemUgSVJRIHBpbiAqLworCWJpdG1hc2sgPSAxIDw8IChpcnEgLSBFWFRfSVJRMCk7CisJc3dpdGNoKGlycSkgeworCWNhc2UgRVhUX0lSUTA6CisJY2FzZSBFWFRfSVJRMToKKwljYXNlIEVYVF9JUlEyOgorCWNhc2UgRVhUX0lSUTM6CisJCWlmIChIODMwMF9HUElPX1JFU0VSVkUoSDgzMDBfR1BJT19QOCwgYml0bWFzaykgPT0gMCkKKwkJCXJldHVybiAtRUJVU1k7CisJCUg4MzAwX0dQSU9fRERSKEg4MzAwX0dQSU9fUDgsIGJpdG1hc2ssIEg4MzAwX0dQSU9fSU5QVVQpOworCQlicmVhazsKKwljYXNlIEVYVF9JUlE0OgorCWNhc2UgRVhUX0lSUTU6CisJCWlmIChIODMwMF9HUElPX1JFU0VSVkUoSDgzMDBfR1BJT19QOSwgYml0bWFzaykgPT0gMCkKKwkJCXJldHVybiAtRUJVU1k7CisJCUg4MzAwX0dQSU9fRERSKEg4MzAwX0dQSU9fUDksIGJpdG1hc2ssIEg4MzAwX0dQSU9fSU5QVVQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBoODMwMF9kaXNhYmxlX2lycV9waW4odW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgYml0bWFzazsKKwlpZiAoaXJxIDwgRVhUX0lSUTAgfHwgaXJxID4gRVhUX0lSUTUpCisJCXJldHVybjsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0ICYgcmVsZWFzZSBJUlEgcGluICovCisJYml0bWFzayA9IDEgPDwgKGlycSAtIEVYVF9JUlEwKTsKKwlzd2l0Y2goaXJxKSB7CisJY2FzZSBFWFRfSVJRMDoKKwljYXNlIEVYVF9JUlExOgorCWNhc2UgRVhUX0lSUTI6CisJY2FzZSBFWFRfSVJRMzoKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopSUVSICY9IH5iaXRtYXNrOworCQlIODMwMF9HUElPX0ZSRUUoSDgzMDBfR1BJT19QOCwgYml0bWFzayk7CisJCWJyZWFrIDsKKwljYXNlIEVYVF9JUlE0OgorCWNhc2UgRVhUX0lSUTU6CisJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUlFUiAmPSB+Yml0bWFzazsKKwkJSDgzMDBfR1BJT19GUkVFKEg4MzAwX0dQSU9fUDksIGJpdG1hc2spOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMTBiOTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzA0ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMKLSAqCi0gKiBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9yZ2UuanA+Ci0gKgotICogQmFzZWQgb24gbGludXgvYXJjaC8kKEFSQ0gpL3BsYXRmb3JtLyQoUExBVEZPUk0pL2ludHMuYwotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgMTk5NiBSb21hbiBaaXBwZWwKLSAqIENvcHlyaWdodCAxOTk5IEQuIEplZmYgRGlvbm5lIDxqZWZmQHJ0LWNvbnRyb2wuY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdHJhcHMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9yZWdzMjY3eC5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgaGFzIG9ubHkgNCBlbGVtZW50cyBmb3Igc3BlZWQgcmVhc29ucwotICovCi10eXBlZGVmIHN0cnVjdCBpcnFfaGFuZGxlciB7Ci0JaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Ci0JaW50ICAgICAgICAgZmxhZ3M7Ci0JaW50ICAgICAgICAgY291bnQ7Ci0Jdm9pZAkgICAgKmRldl9pZDsKLQljb25zdCBjaGFyICAqZGV2bmFtZTsKLX0gaXJxX2hhbmRsZXJfdDsKLQotc3RhdGljIGlycV9oYW5kbGVyX3QgKmlycV9saXN0W05SX0lSUVNdOwotCi0vKiBJUlEgcGluIGFzc2lnbm1lbnQgKi8KLXN0cnVjdCBpcnFfcGlucyB7Ci0JdW5zaWduZWQgY2hhciBwb3J0X25vOwotCXVuc2lnbmVkIGNoYXIgYml0X25vOwotfTsKLS8qIElTVFIgPSAwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlycV9waW5zIGlycV9hc3NpZ25fdGFibGUwWzE2XT17Ci0gICAgICAgIHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjB9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjF9LAotCXtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjJ9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjN9LAotCXtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjR9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjV9LAotCXtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjZ9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjd9LAotCXtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjB9LHtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjF9LAotCXtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjJ9LHtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjN9LAotCXtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjR9LHtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjV9LAotCXtIODMwMF9HUElPX1BGLEg4MzAwX0dQSU9fQjF9LHtIODMwMF9HUElPX1BGLEg4MzAwX0dQSU9fQjJ9LAotfTsKLS8qIElTVFIgPSAxICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlycV9waW5zIGlycV9hc3NpZ25fdGFibGUxWzE2XT17Ci0Je0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CMH0se0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CMX0sCi0Je0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CMn0se0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CM30sCi0Je0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CNH0se0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CNX0sCi0Je0g4MzAwX0dQSU9fUEgsSDgzMDBfR1BJT19CMn0se0g4MzAwX0dQSU9fUEgsSDgzMDBfR1BJT19CM30sCi0Je0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CMH0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CMX0sCi0Je0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CMn0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CM30sCi0Je0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CNH0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CNX0sCi0Je0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CNn0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CN30sCi19OwotCi1zdGF0aWMgc2hvcnQgdXNlX2ttYWxsb2MgPSAwOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyAqaW50ZXJydXB0X3JlZGlyZWN0X3RhYmxlOwotCi0jZGVmaW5lIENQVV9WRUNUT1IgKCh1bnNpZ25lZCBsb25nICopMHgwMDAwMDApCi0jZGVmaW5lIEFERFJfTUFTSyAoMHhmZmZmZmYpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqZ2V0X3ZlY3Rvcl9hZGRyZXNzKHZvaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcm9tX3ZlY3RvciA9IENQVV9WRUNUT1I7Ci0JdW5zaWduZWQgbG9uZyBiYXNlLHRtcDsKLQlpbnQgdmVjX25vOwotCi0JYmFzZSA9IHJvbV92ZWN0b3JbRVhUX0lSUTBdICYgQUREUl9NQVNLOwotCQotCS8qIGNoZWNrIHJvbXZlY3RvciBmb3JtYXQgKi8KLQlmb3IgKHZlY19ubyA9IEVYVF9JUlExOyB2ZWNfbm8gPD0gRVhUX0lSUTE1OyB2ZWNfbm8rKykgewotCQlpZiAoKGJhc2UrKHZlY19ubyAtIEVYVF9JUlEwKSo0KSAhPSAocm9tX3ZlY3Rvclt2ZWNfbm9dICYgQUREUl9NQVNLKSkKLQkJCXJldHVybiBOVUxMOwotCX0KLQotCS8qIHJhbXZlY3RvciBiYXNlIGFkZHJlc3MgKi8KLQliYXNlIC09IEVYVF9JUlEwKjQ7Ci0KLQkvKiB3cml0ZXJibGUgY2hlY2sgKi8KLQl0bXAgPSB+KCoodW5zaWduZWQgbG9uZyAqKWJhc2UpOwotCSgqKHVuc2lnbmVkIGxvbmcgKiliYXNlKSA9IHRtcDsKLQlpZiAoKCoodW5zaWduZWQgbG9uZyAqKWJhc2UpICE9IHRtcCkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nICopYmFzZTsKLX0KLQotdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19SQU1LRVJORUwpCi0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyAqcmFtdmVjLCpyYW12ZWNfcDsKLQl1bnNpZ25lZCBsb25nIGJyZWFrX3ZlYzsKLQotCXJhbXZlYyA9IGdldF92ZWN0b3JfYWRkcmVzcygpOwotCWlmIChyYW12ZWMgPT0gTlVMTCkKLQkJcGFuaWMoImludGVycnVwdCB2ZWN0b3Igc2VydXAgZmFpbGVkLiIpOwotCWVsc2UKLQkJcHJpbnRrKCJ2aXJ0dWFsIHZlY3RvciBhdCAweCUwOGx4XG4iLCh1bnNpZ25lZCBsb25nKXJhbXZlYyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19HREJfREVCVUcpCi0JLyogc2F2ZSBvcmlnaW5hbCBicmVhayB2ZWN0b3IgKi8KLQlicmVha192ZWMgPSByYW12ZWNbVFJBUDNfVkVDXTsKLSNlbHNlCi0JYnJlYWtfdmVjID0gVkVDVE9SKHRyYWNlX2JyZWFrKTsKLSNlbmRpZgotCi0JLyogY3JlYXRlIHJlZGlyZWN0IHRhYmxlICovCi0JZm9yIChyYW12ZWNfcCA9IHJhbXZlYywgaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCi0JCSpyYW12ZWNfcCsrID0gUkVESVJFQ1QoaW50ZXJydXB0X2VudHJ5KTsKLQotCS8qIHNldCBzcGVjaWFsIHZlY3RvciAqLwotCXJhbXZlY1tUUkFQMF9WRUNdID0gVkVDVE9SKHN5c3RlbV9jYWxsKTsKLQlyYW12ZWNbVFJBUDNfVkVDXSA9IGJyZWFrX3ZlYzsKLQlpbnRlcnJ1cHRfcmVkaXJlY3RfdGFibGUgPSByYW12ZWM7Ci0jaWZkZWYgRFVNUF9WRUNUT1IKLQlyYW12ZWNfcCA9IHJhbXZlYzsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCWlmICgoaSAlIDgpID09IDApCi0JCQlwcmludGsoIlxuJXA6ICIscmFtdmVjX3ApOwotCQlwcmludGsoIiVwICIsKnJhbXZlY19wKTsKLQkJcmFtdmVjX3ArKzsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0jZW5kaWYKLX0KLQotaW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCi0JCWlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKLXsKLQl1bnNpZ25lZCBzaG9ydCBwdG4gPSAxIDw8IChpcnEgLSBFWFRfSVJRMCk7Ci0JaXJxX2hhbmRsZXJfdCAqaXJxX2hhbmRsZTsKLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gTlJfSVJRUykgewotCQlwcmludGsoIkluY29ycmVjdCBJUlEgJWQgZnJvbSAlc1xuIiwgaXJxLCBkZXZuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChpcnFfbGlzdFtpcnFdKQotCQlyZXR1cm4gLUVCVVNZOyAvKiBhbHJlYWR5IHVzZWQgKi8KLQlpZiAoaXJxID49IEVYVF9JUlEwICYmIGlycSA8PSBFWFRfSVJRMTUpIHsKLQkJLyogaW5pdGlhbGl6ZSBJUlEgcGluICovCi0JCXVuc2lnbmVkIGludCBwb3J0X25vLGJpdF9ubzsKLQkJaWYgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJVFNSICYgcHRuKSB7Ci0JCQlwb3J0X25vID0gaXJxX2Fzc2lnbl90YWJsZTFbaXJxIC0gRVhUX0lSUTBdLnBvcnRfbm87Ci0JCQliaXRfbm8gPSBpcnFfYXNzaWduX3RhYmxlMVtpcnEgLSBFWFRfSVJRMF0uYml0X25vOwotCQl9IGVsc2UgewotCQkJcG9ydF9ubyA9IGlycV9hc3NpZ25fdGFibGUwW2lycSAtIEVYVF9JUlEwXS5wb3J0X25vOwotCQkJYml0X25vID0gaXJxX2Fzc2lnbl90YWJsZTBbaXJxIC0gRVhUX0lSUTBdLmJpdF9ubzsKLQkJfQotCQlpZiAoSDgzMDBfR1BJT19SRVNFUlZFKHBvcnRfbm8sIGJpdF9ubykgPT0gMCkKLQkJCXJldHVybiAtRUJVU1k7ICAgICAgICAgICAgICAgICAgIC8qIHBpbiBhbHJlYWR5IHVzZSAqLwotCQlIODMwMF9HUElPX0REUihwb3J0X25vLCBiaXRfbm8sIEg4MzAwX0dQSU9fSU5QVVQpOwotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSVNSICY9IH5wdG47IC8qIElTUiBjbGVhciAqLwotCX0JCQotCi0JaWYgKHVzZV9rbWFsbG9jKQotCQlpcnFfaGFuZGxlID0ga21hbGxvYyhzaXplb2YoaXJxX2hhbmRsZXJfdCksIEdGUF9BVE9NSUMpOwotCWVsc2UgewotCQkvKiB1c2UgYm9vdG1lbSBhbGxvY2F0b3IgKi8KLQkJaXJxX2hhbmRsZSA9IChpcnFfaGFuZGxlcl90ICopYWxsb2NfYm9vdG1lbShzaXplb2YoaXJxX2hhbmRsZXJfdCkpOwotCQlpcnFfaGFuZGxlID0gKGlycV9oYW5kbGVyX3QgKikoKHVuc2lnbmVkIGxvbmcpaXJxX2hhbmRsZSB8IDB4ODAwMDAwMDApOwotCX0KLQotCWlmIChpcnFfaGFuZGxlID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaXJxX2hhbmRsZS0+aGFuZGxlciA9IGhhbmRsZXI7Ci0JaXJxX2hhbmRsZS0+ZmxhZ3MgICA9IGZsYWdzOwotCWlycV9oYW5kbGUtPmNvdW50ICAgPSAwOwotCWlycV9oYW5kbGUtPmRldl9pZCAgPSBkZXZfaWQ7Ci0JaXJxX2hhbmRsZS0+ZGV2bmFtZSA9IGRldm5hbWU7Ci0JaXJxX2xpc3RbaXJxXSA9IGlycV9oYW5kbGU7Ci0JaWYgKGlycV9oYW5kbGUtPmZsYWdzICYgSVJRRl9TQU1QTEVfUkFORE9NKQotCQlyYW5kX2luaXRpYWxpemVfaXJxKGlycSk7Ci0JCi0JLyogZW5hYmxlIGludGVycnVwdCAqLwotCS8qIGNvbXBhdGlibGUgaTM4NiAgKi8KLQlpZiAoaXJxID49IEVYVF9JUlEwICYmIGlycSA8PSBFWFRfSVJRMTUpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJRVIgfD0gcHRuOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHJlcXVlc3RfaXJxKTsKLQotdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JaWYgKGlycSA+PSBOUl9JUlFTKQotCQlyZXR1cm47Ci0JaWYgKGlycV9saXN0W2lycV0tPmRldl9pZCAhPSBkZXZfaWQpCi0JCXByaW50aygiJXM6IFJlbW92aW5nIHByb2JhYmx5IHdyb25nIElSUSAlZCBmcm9tICVzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGlycV9saXN0W2lycV0tPmRldm5hbWUpOwotCWlmIChpcnEgPj0gRVhUX0lSUTAgJiYgaXJxIDw9IEVYVF9JUlExNSkgewotCQkvKiBkaXNhYmxlIGludGVycnVwdCAmIHJlbGVhc2UgSVJRIHBpbiAqLwotCQl1bnNpZ25lZCBzaG9ydCBwb3J0X25vLGJpdF9ubzsKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlTUiAmPSB+KDEgPDwgKGlycSAtIEVYVF9JUlEwKSk7Ci0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJRVIgfD0gMSA8PCAoaXJxIC0gRVhUX0lSUTApOwotCQlpZiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlUU1IgJiAoMSA8PCAoaXJxIC0gRVhUX0lSUTApKSkgewotCQkJcG9ydF9ubyA9IGlycV9hc3NpZ25fdGFibGUxW2lycSAtIEVYVF9JUlEwXS5wb3J0X25vOwotCQkJYml0X25vID0gaXJxX2Fzc2lnbl90YWJsZTFbaXJxIC0gRVhUX0lSUTBdLmJpdF9ubzsKLQkJfSBlbHNlIHsKLQkJCXBvcnRfbm8gPSBpcnFfYXNzaWduX3RhYmxlMFtpcnEgLSBFWFRfSVJRMF0ucG9ydF9ubzsKLQkJCWJpdF9ubyA9IGlycV9hc3NpZ25fdGFibGUwW2lycSAtIEVYVF9JUlEwXS5iaXRfbm87Ci0JCX0KLQkJSDgzMDBfR1BJT19GUkVFKHBvcnRfbm8sIGJpdF9ubyk7Ci0JfQotCWlmICgoKHVuc2lnbmVkIGxvbmcpaXJxX2xpc3RbaXJxXSAmIDB4ODAwMDAwMDApID09IDApIHsKLQkJa2ZyZWUoaXJxX2xpc3RbaXJxXSk7Ci0JCWlycV9saXN0W2lycV0gPSBOVUxMOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTChmcmVlX2lycSk7Ci0KLXVuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uICh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHByb2JlX2lycV9vbik7Ci0KLWludCBwcm9iZV9pcnFfb2ZmICh1bnNpZ25lZCBsb25nIGlycXMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0wocHJvYmVfaXJxX29mZik7Ci0KLXZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmIChpcnEgPj0gRVhUX0lSUTAgJiYgaXJxIDw9IEVYVF9JUlExNSkKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlFUiB8PSAxIDw8IChpcnEgLSBFWFRfSVJRMCk7Ci19Ci0KLXZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXJxID49IEVYVF9JUlEwICYmIGlycSA8PSBFWFRfSVJRMTUpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJRVIgJj0gfigxIDw8IChpcnEgLSBFWFRfSVJRMCkpOwotfQotCi1hc21saW5rYWdlIHZvaWQgcHJvY2Vzc19pbnQodW5zaWduZWQgbG9uZyB2ZWMsIHN0cnVjdCBwdF9yZWdzICpmcCkKLXsKLQlpcnFfZW50ZXIoKTsKLQkvKiBJU1IgY2xlYXIgICAgICAgKi8KLQkvKiBjb21wYXRpYmxlIGkzODYgKi8KLQlpZiAodmVjID49IEVYVF9JUlEwICYmIHZlYyA8PSBFWFRfSVJRMTUpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJU1IgJj0gfigxIDw8ICh2ZWMgLSBFWFRfSVJRMCkpOwotCWlmICh2ZWMgPCBOUl9JUlFTKSB7Ci0JCWlmIChpcnFfbGlzdFt2ZWNdKSB7Ci0JCQlpcnFfbGlzdFt2ZWNdLT5oYW5kbGVyKHZlYywgaXJxX2xpc3RbdmVjXS0+ZGV2X2lkLCBmcCk7Ci0JCQlpcnFfbGlzdFt2ZWNdLT5jb3VudCsrOwotCQkJaWYgKGlycV9saXN0W3ZlY10tPmZsYWdzICYgSVJRRl9TQU1QTEVfUkFORE9NKQotCQkJCWFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyh2ZWMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJQlVHKCk7Ci0JfQotCWlycV9leGl0KCk7Ci19Ci0KLWludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQotewotCWludCBpID0gKihsb2ZmX3QgKikgdjsKLQotCWlmICgoaSA8IE5SX0lSUVMpICYmIChpcnFfbGlzdFtpXSAhPU5VTEwpKSB7Ci0JCXNlcV9wcmludGYocCwgIiUzZDogJTEwdSAiLGksaXJxX2xpc3RbaV0tPmNvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiJXNcbiIsIGlycV9saXN0W2ldLT5kZXZuYW1lKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBpbml0X2lycV9wcm9jKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9rbWFsbG9jKHZvaWQpCi17Ci0JdXNlX2ttYWxsb2MgPSAxOwotCXJldHVybiAwOwotfQotY29yZV9pbml0Y2FsbChlbmFibGVfa21hbGxvYyk7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzX2g4cy5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50c19oOHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFhOGE0NS4uMDAwMDAwMAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzX2g4cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzX2g4cy5jCi0gKiBJbnRlcnJ1cHQgaGFuZGxpbmcgQ1BVIHZhcmlhbnRzCi0gKgotICogWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYXBzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ3MyNjd4Lmg+Ci0KLS8qIHNhdmVkIHZlY3RvciBsaXN0ICovCi1jb25zdCBpbnQgX19pbml0ZGF0YSBoODMwMF9zYXZlZF92ZWN0b3JzW109ewotI2lmIGRlZmluZWQoQ09ORklHX0dEQl9ERUJVRykKLQlUUkFDRV9WRUMsCi0JVFJBUDNfVkVDLAotI2VuZGlmCi0JLTEKLX07Ci0KLS8qIHRyYXAgZW50cnkgdGFibGUgKi8KLWNvbnN0IHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBoODMwMF90cmFwX3RhYmxlW05SX1RSQVBTXT17Ci0JMCwwLDAsMCwwLAotCSh1bnNpZ25lZCBsb25nKXRyYWNlX2JyZWFrLCAgLyogVFJBQ0UgKi8KLQkwLDAsCi0JKHVuc2lnbmVkIGxvbmcpc3lzdGVtX2NhbGwsICAvKiBUUkFQQSAjMCAqLwotCTAsMCwwLDAsMCwwLDAKLX07Ci0KLS8qIElSUSBwaW4gYXNzaWdubWVudCAqLwotc3RydWN0IGlycV9waW5zIHsKLQl1bnNpZ25lZCBjaGFyIHBvcnRfbm87Ci0JdW5zaWduZWQgY2hhciBiaXRfbm87Ci19IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMSkscGFja2VkKSk7Ci0vKiBJU1RSID0gMCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfcGlucyBpcnFfYXNzaWduX3RhYmxlMFsxNl09ewotICAgICAgICB7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0IwfSx7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0IxfSwKLQl7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0IyfSx7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0IzfSwKLQl7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0I0fSx7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0I1fSwKLQl7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0I2fSx7SDgzMDBfR1BJT19QNSxIODMwMF9HUElPX0I3fSwKLQl7SDgzMDBfR1BJT19QNixIODMwMF9HUElPX0IwfSx7SDgzMDBfR1BJT19QNixIODMwMF9HUElPX0IxfSwKLQl7SDgzMDBfR1BJT19QNixIODMwMF9HUElPX0IyfSx7SDgzMDBfR1BJT19QNixIODMwMF9HUElPX0IzfSwKLQl7SDgzMDBfR1BJT19QNixIODMwMF9HUElPX0I0fSx7SDgzMDBfR1BJT19QNixIODMwMF9HUElPX0I1fSwKLQl7SDgzMDBfR1BJT19QRixIODMwMF9HUElPX0IxfSx7SDgzMDBfR1BJT19QRixIODMwMF9HUElPX0IyfSwKLX07IAotLyogSVNUUiA9IDEgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX3BpbnMgaXJxX2Fzc2lnbl90YWJsZTFbMTZdPXsKLQl7SDgzMDBfR1BJT19QOCxIODMwMF9HUElPX0IwfSx7SDgzMDBfR1BJT19QOCxIODMwMF9HUElPX0IxfSwKLQl7SDgzMDBfR1BJT19QOCxIODMwMF9HUElPX0IyfSx7SDgzMDBfR1BJT19QOCxIODMwMF9HUElPX0IzfSwKLQl7SDgzMDBfR1BJT19QOCxIODMwMF9HUElPX0I0fSx7SDgzMDBfR1BJT19QOCxIODMwMF9HUElPX0I1fSwKLQl7SDgzMDBfR1BJT19QSCxIODMwMF9HUElPX0IyfSx7SDgzMDBfR1BJT19QSCxIODMwMF9HUElPX0IzfSwKLQl7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0IwfSx7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0IxfSwKLQl7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0IyfSx7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0IzfSwKLQl7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0I0fSx7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0I1fSwKLQl7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0I2fSx7SDgzMDBfR1BJT19QMixIODMwMF9HUElPX0I3fSwKLX07Ci0KLS8qIElSUSB0byBHUElPIHBpbiB0cmFuc2xhdGlvbiAqLwotI2RlZmluZSBJUlFfR1BJT19NQVAoaXJxYml0LGlycSxwb3J0LGJpdCkJCQkgIFwKLWRvIHsJCQkJCQkJCSAgXAotCWlmICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSVRTUiAmIGlycWJpdCkgewkgIFwKLQkJcG9ydCA9IGlycV9hc3NpZ25fdGFibGUxW2lycSAtIEVYVF9JUlEwXS5wb3J0X25vOyBcCi0JCWJpdCAgPSBpcnFfYXNzaWduX3RhYmxlMVtpcnEgLSBFWFRfSVJRMF0uYml0X25vOyAgXAotCX0gZWxzZSB7CQkJCQkJICBcCi0JCXBvcnQgPSBpcnFfYXNzaWduX3RhYmxlMFtpcnEgLSBFWFRfSVJRMF0ucG9ydF9ubzsgXAotCQliaXQgID0gaXJxX2Fzc2lnbl90YWJsZTBbaXJxIC0gRVhUX0lSUTBdLmJpdF9ubzsgIFwKLQl9CQkJCQkJCSAgXAotfSB3aGlsZSgwKQotCi1pbnQgaDgzMDBfZW5hYmxlX2lycV9waW4odW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXJxID49IEVYVF9JUlEwICYmIGlycSA8PSBFWFRfSVJRMTUpIHsKLQkJdW5zaWduZWQgc2hvcnQgcHRuID0gMSA8PCAoaXJxIC0gRVhUX0lSUTApOwotCQl1bnNpZ25lZCBpbnQgcG9ydF9ubyxiaXRfbm87Ci0JCUlSUV9HUElPX01BUChwdG4sIGlycSwgcG9ydF9ubywgYml0X25vKTsKLQkJaWYgKEg4MzAwX0dQSU9fUkVTRVJWRShwb3J0X25vLCBiaXRfbm8pID09IDApCi0JCQlyZXR1cm4gLUVCVVNZOyAgICAgICAgICAgICAgICAgICAvKiBwaW4gYWxyZWFkeSB1c2UgKi8KLQkJSDgzMDBfR1BJT19ERFIocG9ydF9ubywgYml0X25vLCBIODMwMF9HUElPX0lOUFVUKTsKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlTUiAmPSB+cHRuOyAvKiBJU1IgY2xlYXIgKi8KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBoODMwMF9kaXNhYmxlX2lycV9waW4odW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXJxID49IEVYVF9JUlEwICYmIGlycSA8PSBFWFRfSVJRMTUpIHsKLQkJLyogZGlzYWJsZSBpbnRlcnJ1cHQgJiByZWxlYXNlIElSUSBwaW4gKi8KLQkJdW5zaWduZWQgc2hvcnQgcHRuID0gMSA8PCAoaXJxIC0gRVhUX0lSUTApOwotCQl1bnNpZ25lZCBzaG9ydCBwb3J0X25vLGJpdF9ubzsKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlTUiAmPSB+cHRuOwotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSUVSICY9IH5wdG47Ci0JCUlSUV9HUElPX01BUChwdG4sIGlycSwgcG9ydF9ubywgYml0X25vKTsKLQkJSDgzMDBfR1BJT19GUkVFKHBvcnRfbm8sIGJpdF9ubyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaXJxLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgyZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaXJxLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzX2g4cy5jCisgKiBJbnRlcnJ1cHQgaGFuZGxpbmcgQ1BVIHZhcmlhbnRzCisgKgorICogWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL3JlZ3MyNjd4Lmg+CisKKy8qIHNhdmVkIHZlY3RvciBsaXN0ICovCitjb25zdCBpbnQgX19pbml0ZGF0YSBoODMwMF9zYXZlZF92ZWN0b3JzW109eworI2lmIGRlZmluZWQoQ09ORklHX0dEQl9ERUJVRykKKwlUUkFDRV9WRUMsCisJVFJBUDNfVkVDLAorI2VuZGlmCisJLTEKK307CisKKy8qIHRyYXAgZW50cnkgdGFibGUgKi8KK2NvbnN0IEg4MzAwX1ZFQ1RPUiBfX2luaXRkYXRhIGg4MzAwX3RyYXBfdGFibGVbXSA9IHsKKwkwLDAsMCwwLDAsCisJdHJhY2VfYnJlYWssICAvKiBUUkFDRSAqLworCTAsMCwKKwlzeXN0ZW1fY2FsbCwgIC8qIFRSQVBBICMwICovCisJMCwwLDAsMCwwLDAsMAorfTsKKworLyogSVJRIHBpbiBhc3NpZ25tZW50ICovCitzdHJ1Y3QgaXJxX3BpbnMgeworCXVuc2lnbmVkIGNoYXIgcG9ydF9ubzsKKwl1bnNpZ25lZCBjaGFyIGJpdF9ubzsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxKSxwYWNrZWQpKTsKKy8qIElTVFIgPSAwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9waW5zIGlycV9hc3NpZ25fdGFibGUwWzE2XT17CisgICAgICAgIHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjB9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjF9LAorCXtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjJ9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjN9LAorCXtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjR9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjV9LAorCXtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjZ9LHtIODMwMF9HUElPX1A1LEg4MzAwX0dQSU9fQjd9LAorCXtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjB9LHtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjF9LAorCXtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjJ9LHtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjN9LAorCXtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjR9LHtIODMwMF9HUElPX1A2LEg4MzAwX0dQSU9fQjV9LAorCXtIODMwMF9HUElPX1BGLEg4MzAwX0dQSU9fQjF9LHtIODMwMF9HUElPX1BGLEg4MzAwX0dQSU9fQjJ9LAorfTsKKy8qIElTVFIgPSAxICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9waW5zIGlycV9hc3NpZ25fdGFibGUxWzE2XT17CisJe0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CMH0se0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CMX0sCisJe0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CMn0se0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CM30sCisJe0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CNH0se0g4MzAwX0dQSU9fUDgsSDgzMDBfR1BJT19CNX0sCisJe0g4MzAwX0dQSU9fUEgsSDgzMDBfR1BJT19CMn0se0g4MzAwX0dQSU9fUEgsSDgzMDBfR1BJT19CM30sCisJe0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CMH0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CMX0sCisJe0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CMn0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CM30sCisJe0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CNH0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CNX0sCisJe0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CNn0se0g4MzAwX0dQSU9fUDIsSDgzMDBfR1BJT19CN30sCit9OworCisvKiBJUlEgdG8gR1BJTyBwaW4gdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgSVJRX0dQSU9fTUFQKGlycWJpdCxpcnEscG9ydCxiaXQpCQkJICBcCitkbyB7CQkJCQkJCQkgIFwKKwlpZiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlUU1IgJiBpcnFiaXQpIHsJICBcCisJCXBvcnQgPSBpcnFfYXNzaWduX3RhYmxlMVtpcnEgLSBFWFRfSVJRMF0ucG9ydF9ubzsgXAorCQliaXQgID0gaXJxX2Fzc2lnbl90YWJsZTFbaXJxIC0gRVhUX0lSUTBdLmJpdF9ubzsgIFwKKwl9IGVsc2UgewkJCQkJCSAgXAorCQlwb3J0ID0gaXJxX2Fzc2lnbl90YWJsZTBbaXJxIC0gRVhUX0lSUTBdLnBvcnRfbm87IFwKKwkJYml0ICA9IGlycV9hc3NpZ25fdGFibGUwW2lycSAtIEVYVF9JUlEwXS5iaXRfbm87ICBcCisJfQkJCQkJCQkgIFwKK30gd2hpbGUoMCkKKworaW50IGg4MzAwX2VuYWJsZV9pcnFfcGluKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGlycSA+PSBFWFRfSVJRMCAmJiBpcnEgPD0gRVhUX0lSUTE1KSB7CisJCXVuc2lnbmVkIHNob3J0IHB0biA9IDEgPDwgKGlycSAtIEVYVF9JUlEwKTsKKwkJdW5zaWduZWQgaW50IHBvcnRfbm8sYml0X25vOworCQlJUlFfR1BJT19NQVAocHRuLCBpcnEsIHBvcnRfbm8sIGJpdF9ubyk7CisJCWlmIChIODMwMF9HUElPX1JFU0VSVkUocG9ydF9ubywgYml0X25vKSA9PSAwKQorCQkJcmV0dXJuIC1FQlVTWTsgICAgICAgICAgICAgICAgICAgLyogcGluIGFscmVhZHkgdXNlICovCisJCUg4MzAwX0dQSU9fRERSKHBvcnRfbm8sIGJpdF9ubywgSDgzMDBfR1BJT19JTlBVVCk7CisJCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJU1IgJj0gfnB0bjsgLyogSVNSIGNsZWFyICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaDgzMDBfZGlzYWJsZV9pcnFfcGluKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGlycSA+PSBFWFRfSVJRMCAmJiBpcnEgPD0gRVhUX0lSUTE1KSB7CisJCS8qIGRpc2FibGUgaW50ZXJydXB0ICYgcmVsZWFzZSBJUlEgcGluICovCisJCXVuc2lnbmVkIHNob3J0IHB0biA9IDEgPDwgKGlycSAtIEVYVF9JUlEwKTsKKwkJdW5zaWduZWQgc2hvcnQgcG9ydF9ubyxiaXRfbm87CisJCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJU1IgJj0gfnB0bjsKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlFUiAmPSB+cHRuOworCQlJUlFfR1BJT19NQVAocHRuLCBpcnEsIHBvcnRfbm8sIGJpdF9ubyk7CisJCUg4MzAwX0dQSU9fRlJFRShwb3J0X25vLCBiaXRfbm8pOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggZGZmOWVkZi4uZWQyMTczNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTE4LDYgKzE4LDcgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0tQUk9CRVMKKwlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhlIEl0YW5pdW0gUHJvY2Vzc29yIEZhbWlseSBpcyBJbnRlbCdzIDY0LWJpdCBzdWNjZXNzb3IgdG8KQEAgLTE1NSw2ICsxNTYsOCBAQAogCiBjb25maWcgSUE2NF9TR0lfU04yCiAJYm9vbCAiU0dJLVNOMiIKKwlzZWxlY3QgTlVNQQorCXNlbGVjdCBBQ1BJX05VTUEKIAloZWxwCiAJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBvcHRpbWl6ZSB0aGUga2VybmVsIGZvciB1c2Ugb24gc24yIGJhc2VkCiAJICBzeXN0ZW1zLCBidXQgdGhlIHJlc3VsdGluZyBrZXJuZWwgYmluYXJ5IHdpbGwgbm90IHJ1biBvbiBvdGhlcgpAQCAtMjgwLDYgKzI4MywxNyBAQAogCWRlZmF1bHQgIjE3IiBpZiBIVUdFVExCX1BBR0UKIAlkZWZhdWx0ICIxMSIKIAorY29uZmlnIFZJUlRfQ1BVX0FDQ09VTlRJTkcKKwlib29sICJEZXRlcm1pbmlzdGljIHRhc2sgYW5kIENQVSB0aW1lIGFjY291bnRpbmciCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBtb3JlIGFjY3VyYXRlIHRhc2sgYW5kIENQVSB0aW1lCisJICBhY2NvdW50aW5nLiAgVGhpcyBpcyBkb25lIGJ5IHJlYWRpbmcgYSBDUFUgY291bnRlciBvbiBlYWNoCisJICBrZXJuZWwgZW50cnkgYW5kIGV4aXQgYW5kIG9uIHRyYW5zaXRpb25zIHdpdGhpbiB0aGUga2VybmVsCisJICBiZXR3ZWVuIHN5c3RlbSwgc29mdGlycSBhbmQgaGFyZGlycSBzdGF0ZSwgc28gdGhlcmUgaXMgYQorCSAgc21hbGwgcGVyZm9ybWFuY2UgaW1wYWN0LgorCSAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuCisKIGNvbmZpZyBTTVAKIAlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgogCWhlbHAKQEAgLTYwOCw2ICs2MjIsOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIElPTU1VX0hFTFBFUgorCWRlZl9ib29sIChJQTY0X0hQX1pYMSB8fCBJQTY0X0hQX1pYMV9TV0lPVExCIHx8IElBNjRfR0VORVJJQykKKwogc291cmNlICJhcmNoL2lhNjQvaHAvc2ltL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9pYTY0L0tjb25maWcuZGVidWciCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvTWFrZWZpbGUgYi9hcmNoL2lhNjQvTWFrZWZpbGUKaW5kZXggYjkxNmNjZi4uZjE2NDVjNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9NYWtlZmlsZQpAQCAtMTEsNiArMTEsOCBAQAogIyBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAjCiAKK0tCVUlMRF9ERUZDT05GSUcgOj0gZ2VuZXJpY19kZWZjb25maWcKKwogTk0gOj0gJChDUk9TU19DT01QSUxFKW5tIC1CCiBSRUFERUxGIDo9ICQoQ1JPU1NfQ09NUElMRSlyZWFkZWxmCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9pYTY0L2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKaW5kZXggOTRlNTcxMC4uOGY2YmNmZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKQEAgLTcxLDcgKzcxLDcgQEAKICNpZmRlZiBDT05GSUdfSUE2NF9HRU5FUklDCiAJCS8qIEJldHRlciB0byBoYXZlIG5vcm1hbCBETUEgdGhhbiBwYW5pYyAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgc29mdHdhcmUgSS9PIFRMQiwiCi0JCSAgICAgICAiIHJldmVydGluZyB0byBocHp4MSBwbGF0Zm9ybSB2ZWN0b3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICAiIHJldmVydGluZyB0byBocHp4MSBwbGF0Zm9ybSB2ZWN0b3JcbiIsIF9fZnVuY19fKTsKIAkJbWFjaHZlY19pbml0KCJocHp4MSIpOwogI2Vsc2UKIAkJcGFuaWMoIlVuYWJsZSB0byBpbml0aWFsaXplIHNvZnR3YXJlIEkvTyBUTEIgc2VydmljZXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IGE5NDQ0NTQuLjk0MDlkZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+ICAgICAgICAgLyogaHdlaWdodDY0KCkgKi8KICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUtaGVscGVyLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4JCS8qIGlhNjRfZ2V0X2l0YygpICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00NjAsNiArNDYxLDEzIEBACiAJcmV0dXJuIG9yZGVyOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwdHJfdG9fcGlkZShzdHJ1Y3QgaW9jICppb2MsIHVuc2lnbmVkIGxvbmcgKnJlc19wdHIsCisJCQkJIHVuc2lnbmVkIGludCBiaXRzaGlmdGNudCkKK3sKKwlyZXR1cm4gKCgodW5zaWduZWQgbG9uZylyZXNfcHRyIC0gKHVuc2lnbmVkIGxvbmcpaW9jLT5yZXNfbWFwKSA8PCAzKQorCQkrIGJpdHNoaWZ0Y250OworfQorCiAvKioKICAqIHNiYV9zZWFyY2hfYml0bWFwIC0gZmluZCBmcmVlIHNwYWNlIGluIElPIFBESVIgcmVzb3VyY2UgYml0bWFwCiAgKiBAaW9jOiBJTyBNTVUgc3RydWN0dXJlIHdoaWNoIG93bnMgdGhlIHBkaXIgd2UgYXJlIGludGVyZXN0ZWQgaW4uCkBAIC00NzEsMTUgKzQ3OSwyNSBAQAogICogQ29vbCBwZXJmIG9wdGltaXphdGlvbjogc2VhcmNoIGZvciBsb2cyKHNpemUpIGJpdHMgYXQgYSB0aW1lLgogICovCiBzdGF0aWMgU0JBX0lOTElORSB1bnNpZ25lZCBsb25nCi1zYmFfc2VhcmNoX2JpdG1hcChzdHJ1Y3QgaW9jICppb2MsIHVuc2lnbmVkIGxvbmcgYml0c193YW50ZWQsIGludCB1c2VfaGludCkKK3NiYV9zZWFyY2hfYml0bWFwKHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGRldmljZSAqZGV2LAorCQkgIHVuc2lnbmVkIGxvbmcgYml0c193YW50ZWQsIGludCB1c2VfaGludCkKIHsKIAl1bnNpZ25lZCBsb25nICpyZXNfcHRyOwogCXVuc2lnbmVkIGxvbmcgKnJlc19lbmQgPSAodW5zaWduZWQgbG9uZyAqKSAmKGlvYy0+cmVzX21hcFtpb2MtPnJlc19zaXplXSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgcGlkZSA9IH4wVUw7CisJdW5zaWduZWQgbG9uZyBmbGFncywgcGlkZSA9IH4wVUwsIHRwaWRlOworCXVuc2lnbmVkIGxvbmcgYm91bmRhcnlfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNoaWZ0OworCWludCByZXQ7CiAKIAlBU1NFUlQoKCh1bnNpZ25lZCBsb25nKSBpb2MtPnJlc19oaW50ICYgKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDFVTCkpID09IDApOwogCUFTU0VSVChyZXNfcHRyIDwgcmVzX2VuZCk7CiAKKwlib3VuZGFyeV9zaXplID0gKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfZ2V0X3NlZ19ib3VuZGFyeShkZXYpICsgMTsKKwlib3VuZGFyeV9zaXplID0gQUxJR04oYm91bmRhcnlfc2l6ZSwgMVVMTCA8PCBpb3ZwX3NoaWZ0KSA+PiBpb3ZwX3NoaWZ0OworCisJQlVHX09OKGlvYy0+aWJhc2UgJiB+aW92cF9tYXNrKTsKKwlzaGlmdCA9IGlvYy0+aWJhc2UgPj4gaW92cF9zaGlmdDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJlc19sb2NrLCBmbGFncyk7CiAKIAkvKiBBbGxvdyBjYWxsZXIgdG8gZm9yY2UgYSBzZWFyY2ggdGhyb3VnaCB0aGUgZW50aXJlIHJlc291cmNlIHNwYWNlICovCkBAIC01MDQsOSArNTIyLDcgQEAKIAkJCWlmIChsaWtlbHkoKnJlc19wdHIgIT0gfjBVTCkpIHsKIAkJCQliaXRzaGlmdGNudCA9IGZmeigqcmVzX3B0cik7CiAJCQkJKnJlc19wdHIgfD0gKDFVTCA8PCBiaXRzaGlmdGNudCk7Ci0JCQkJcGlkZSA9ICgodW5zaWduZWQgbG9uZylyZXNfcHRyIC0gKHVuc2lnbmVkIGxvbmcpaW9jLT5yZXNfbWFwKTsKLQkJCQlwaWRlIDw8PSAzOwkvKiBjb252ZXJ0IHRvIGJpdCBhZGRyZXNzICovCi0JCQkJcGlkZSArPSBiaXRzaGlmdGNudDsKKwkJCQlwaWRlID0gcHRyX3RvX3BpZGUoaW9jLCByZXNfcHRyLCBiaXRzaGlmdGNudCk7CiAJCQkJaW9jLT5yZXNfYml0c2hpZnQgPSBiaXRzaGlmdGNudCArIGJpdHNfd2FudGVkOwogCQkJCWdvdG8gZm91bmRfaXQ7CiAJCQl9CkBAIC01MjksMTcgKzU0NSwxOSBAQAogCQliYXNlX21hc2sgPSBSRVNNQVBfTUFTSyhiaXRzX3dhbnRlZCk7CiAJCW1hc2sgPSBiYXNlX21hc2sgPDwgYml0c2hpZnRjbnQ7CiAKLQkJREJHX1JFUygiJXMoKSBvICVsZCAlcCIsIF9fRlVOQ1RJT05fXywgbywgcmVzX3B0cik7CisJCURCR19SRVMoIiVzKCkgbyAlbGQgJXAiLCBfX2Z1bmNfXywgbywgcmVzX3B0cik7CiAJCWZvcig7IHJlc19wdHIgPCByZXNfZW5kIDsgcmVzX3B0cisrKQogCQl7IAogCQkJREJHX1JFUygiICAgICVwICVseCAlbHhcbiIsIHJlc19wdHIsIG1hc2ssICpyZXNfcHRyKTsKIAkJCUFTU0VSVCgwICE9IG1hc2spOwogCQkJZm9yICg7IG1hc2sgOyBtYXNrIDw8PSBvLCBiaXRzaGlmdGNudCArPSBvKSB7Ci0JCQkJaWYoMCA9PSAoKCpyZXNfcHRyKSAmIG1hc2spKSB7CisJCQkJdHBpZGUgPSBwdHJfdG9fcGlkZShpb2MsIHJlc19wdHIsIGJpdHNoaWZ0Y250KTsKKwkJCQlyZXQgPSBpb21tdV9pc19zcGFuX2JvdW5kYXJ5KHRwaWRlLCBiaXRzX3dhbnRlZCwKKwkJCQkJCQkgICAgIHNoaWZ0LAorCQkJCQkJCSAgICAgYm91bmRhcnlfc2l6ZSk7CisJCQkJaWYgKCgwID09ICgoKnJlc19wdHIpICYgbWFzaykpICYmICFyZXQpIHsKIAkJCQkJKnJlc19wdHIgfD0gbWFzazsgICAgIC8qIG1hcmsgcmVzb3VyY2VzIGJ1c3khICovCi0JCQkJCXBpZGUgPSAoKHVuc2lnbmVkIGxvbmcpcmVzX3B0ciAtICh1bnNpZ25lZCBsb25nKWlvYy0+cmVzX21hcCk7Ci0JCQkJCXBpZGUgPDw9IDM7CS8qIGNvbnZlcnQgdG8gYml0IGFkZHJlc3MgKi8KLQkJCQkJcGlkZSArPSBiaXRzaGlmdGNudDsKKwkJCQkJcGlkZSA9IHRwaWRlOwogCQkJCQlpb2MtPnJlc19iaXRzaGlmdCA9IGJpdHNoaWZ0Y250ICsgYml0c193YW50ZWQ7CiAJCQkJCWdvdG8gZm91bmRfaXQ7CiAJCQkJfQpAQCAtNTYwLDYgKzU3OCwxMSBAQAogCQllbmQgPSByZXNfZW5kIC0gcXdvcmRzOwogCiAJCWZvciAoOyByZXNfcHRyIDwgZW5kOyByZXNfcHRyKyspIHsKKwkJCXRwaWRlID0gcHRyX3RvX3BpZGUoaW9jLCByZXNfcHRyLCAwKTsKKwkJCXJldCA9IGlvbW11X2lzX3NwYW5fYm91bmRhcnkodHBpZGUsIGJpdHNfd2FudGVkLAorCQkJCQkJICAgICBzaGlmdCwgYm91bmRhcnlfc2l6ZSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gbmV4dF9wdHI7CiAJCQlmb3IgKGkgPSAwIDsgaSA8IHF3b3JkcyA7IGkrKykgewogCQkJCWlmIChyZXNfcHRyW2ldICE9IDApCiAJCQkJCWdvdG8gbmV4dF9wdHI7CkBAIC01NzIsOCArNTk1LDcgQEAKIAkJCQlyZXNfcHRyW2ldID0gfjBVTDsKIAkJCXJlc19wdHJbaV0gfD0gUkVTTUFQX01BU0soYml0cyk7CiAKLQkJCXBpZGUgPSAoKHVuc2lnbmVkIGxvbmcpcmVzX3B0ciAtICh1bnNpZ25lZCBsb25nKWlvYy0+cmVzX21hcCk7Ci0JCQlwaWRlIDw8PSAzOwkvKiBjb252ZXJ0IHRvIGJpdCBhZGRyZXNzICovCisJCQlwaWRlID0gdHBpZGU7CiAJCQlyZXNfcHRyICs9IHF3b3JkczsKIAkJCWlvYy0+cmVzX2JpdHNoaWZ0ID0gYml0czsKIAkJCWdvdG8gZm91bmRfaXQ7CkBAIC02MDUsNyArNjI3LDcgQEAKICAqIHJlc291cmNlIGJpdCBtYXAuCiAgKi8KIHN0YXRpYyBpbnQKLXNiYV9hbGxvY19yYW5nZShzdHJ1Y3QgaW9jICppb2MsIHNpemVfdCBzaXplKQorc2JhX2FsbG9jX3JhbmdlKHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfbmVlZGVkID0gc2l6ZSA+PiBpb3ZwX3NoaWZ0OwogI2lmZGVmIFBESVJfU0VBUkNIX1RJTUlORwpAQCAtNjIyLDkgKzY0NCw5IEBACiAJLyoKIAkqKiAic2VlayBhbmQgeWUgc2hhbGwgZmluZCIuLi5wcmF5aW5nIG5ldmVyIGh1cnRzIGVpdGhlci4uLgogCSovCi0JcGlkZSA9IHNiYV9zZWFyY2hfYml0bWFwKGlvYywgcGFnZXNfbmVlZGVkLCAxKTsKKwlwaWRlID0gc2JhX3NlYXJjaF9iaXRtYXAoaW9jLCBkZXYsIHBhZ2VzX25lZWRlZCwgMSk7CiAJaWYgKHVubGlrZWx5KHBpZGUgPj0gKGlvYy0+cmVzX3NpemUgPDwgMykpKSB7Ci0JCXBpZGUgPSBzYmFfc2VhcmNoX2JpdG1hcChpb2MsIHBhZ2VzX25lZWRlZCwgMCk7CisJCXBpZGUgPSBzYmFfc2VhcmNoX2JpdG1hcChpb2MsIGRldiwgcGFnZXNfbmVlZGVkLCAwKTsKIAkJaWYgKHVubGlrZWx5KHBpZGUgPj0gKGlvYy0+cmVzX3NpemUgPDwgMykpKSB7CiAjaWYgREVMQVlFRF9SRVNPVVJDRV9DTlQgPiAwCiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjUzLDcgKzY3NSw3IEBACiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhdmVkX2xvY2ssIGZsYWdzKTsKIAotCQkJcGlkZSA9IHNiYV9zZWFyY2hfYml0bWFwKGlvYywgcGFnZXNfbmVlZGVkLCAwKTsKKwkJCXBpZGUgPSBzYmFfc2VhcmNoX2JpdG1hcChpb2MsIGRldiwgcGFnZXNfbmVlZGVkLCAwKTsKIAkJCWlmICh1bmxpa2VseShwaWRlID49IChpb2MtPnJlc19zaXplIDw8IDMpKSkKIAkJCQlwYW5pYyhfX0ZJTEVfXyAiOiBJL08gTU1VIEAgJXAgaXMgb3V0IG9mIG1hcHBpbmcgcmVzb3VyY2VzXG4iLAogCQkJCSAgICAgIGlvYy0+aW9jX2hwYSk7CkBAIC02NzksNyArNzAxLDcgQEAKICNlbmRpZgogCiAJREJHX1JFUygiJXMoJXgpICVkIC0+ICVseCBoaW50ICV4LyV4XG4iLAotCQlfX0ZVTkNUSU9OX18sIHNpemUsIHBhZ2VzX25lZWRlZCwgcGlkZSwKKwkJX19mdW5jX18sIHNpemUsIHBhZ2VzX25lZWRlZCwgcGlkZSwKIAkJKHVpbnQpICgodW5zaWduZWQgbG9uZykgaW9jLT5yZXNfaGludCAtICh1bnNpZ25lZCBsb25nKSBpb2MtPnJlc19tYXApLAogCQlpb2MtPnJlc19iaXRzaGlmdCApOwogCkBAIC03MjIsOCArNzQ0LDggQEAKIAkJCW0gPSBSRVNNQVBfTUFTSyhiaXRzX25vdF93YW50ZWQpIDw8IChwaWRlICYgKEJJVFNfUEVSX0xPTkcgLSAxKSk7CiAJCQliaXRzX25vdF93YW50ZWQgPSAwOwogCi0JCQlEQkdfUkVTKCIlcyggLCV4LCV4KSAleC8lbHggJXggJXAgJWx4XG4iLCBfX0ZVTkNUSU9OX18sICh1aW50KSBpb3ZhLCBzaXplLAotCQkgICAgICAgIAliaXRzX25vdF93YW50ZWQsIG0sIHBpZGUsIHJlc19wdHIsICpyZXNfcHRyKTsKKwkJCURCR19SRVMoIiVzKCAsJXgsJXgpICV4LyVseCAleCAlcCAlbHhcbiIsIF9fZnVuY19fLCAodWludCkgaW92YSwgc2l6ZSwKKwkJCSAgICAgICAgYml0c19ub3Rfd2FudGVkLCBtLCBwaWRlLCByZXNfcHRyLCAqcmVzX3B0cik7CiAKIAkJCUFTU0VSVChtICE9IDApOwogCQkJQVNTRVJUKGJpdHNfbm90X3dhbnRlZCk7CkBAIC05MzYsMTIgKzk1OCwxMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKICNlbmRpZgogCi0JcGlkZSA9IHNiYV9hbGxvY19yYW5nZShpb2MsIHNpemUpOworCXBpZGUgPSBzYmFfYWxsb2NfcmFuZ2UoaW9jLCBkZXYsIHNpemUpOwogCiAJaW92cCA9IChkbWFfYWRkcl90KSBwaWRlIDw8IGlvdnBfc2hpZnQ7CiAKLQlEQkdfUlVOKCIlcygpIDB4JXAgLT4gMHglbHhcbiIsCi0JCV9fRlVOQ1RJT05fXywgYWRkciwgKGxvbmcpIGlvdnAgfCBvZmZzZXQpOworCURCR19SVU4oIiVzKCkgMHglcCAtPiAweCVseFxuIiwgX19mdW5jX18sIGFkZHIsIChsb25nKSBpb3ZwIHwgb2Zmc2V0KTsKIAogCXBkaXJfc3RhcnQgPSAmKGlvYy0+cGRpcl9iYXNlW3BpZGVdKTsKIApAQCAtMTAyOSw4ICsxMDUwLDcgQEAKICNlbmRpZgogCW9mZnNldCA9IGlvdmEgJiB+aW92cF9tYXNrOwogCi0JREJHX1JVTigiJXMoKSBpb3ZwIDB4JWx4LyV4XG4iLAotCQlfX0ZVTkNUSU9OX18sIChsb25nKSBpb3ZhLCBzaXplKTsKKwlEQkdfUlVOKCIlcygpIGlvdnAgMHglbHgvJXhcbiIsIF9fZnVuY19fLCAobG9uZykgaW92YSwgc2l6ZSk7CiAKIAlpb3ZhIF49IG9mZnNldDsgICAgICAgIC8qIGNsZWFyIG9mZnNldCBiaXRzICovCiAJc2l6ZSArPSBvZmZzZXQ7CkBAIC0xMzc1LDcgKzEzOTUsNyBAQAogCQlkbWFfbGVuID0gKGRtYV9sZW4gKyBkbWFfb2Zmc2V0ICsgfmlvdnBfbWFzaykgJiBpb3ZwX21hc2s7CiAJCUFTU0VSVChkbWFfbGVuIDw9IERNQV9DSFVOS19TSVpFKTsKIAkJZG1hX3NnLT5kbWFfYWRkcmVzcyA9IChkbWFfYWRkcl90KSAoUElERV9GTEFHCi0JCQl8IChzYmFfYWxsb2NfcmFuZ2UoaW9jLCBkbWFfbGVuKSA8PCBpb3ZwX3NoaWZ0KQorCQkJfCAoc2JhX2FsbG9jX3JhbmdlKGlvYywgZGV2LCBkbWFfbGVuKSA8PCBpb3ZwX3NoaWZ0KQogCQkJfCBkbWFfb2Zmc2V0KTsKIAkJbl9tYXBwaW5ncysrOwogCX0KQEAgLTE0MDQsNyArMTQyNCw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKICNlbmRpZgogCi0JREJHX1JVTl9TRygiJXMoKSBTVEFSVCAlZCBlbnRyaWVzXG4iLCBfX0ZVTkNUSU9OX18sIG5lbnRzKTsKKwlEQkdfUlVOX1NHKCIlcygpIFNUQVJUICVkIGVudHJpZXNcbiIsIF9fZnVuY19fLCBuZW50cyk7CiAJaW9jID0gR0VUX0lPQyhkZXYpOwogCUFTU0VSVChpb2MpOwogCkBAIC0xNDY4LDcgKzE0ODgsNyBAQAogI2VuZGlmCiAKIAlBU1NFUlQoY29hbGVzY2VkID09IGZpbGxlZCk7Ci0JREJHX1JVTl9TRygiJXMoKSBET05FICVkIG1hcHBpbmdzXG4iLCBfX0ZVTkNUSU9OX18sIGZpbGxlZCk7CisJREJHX1JVTl9TRygiJXMoKSBET05FICVkIG1hcHBpbmdzXG4iLCBfX2Z1bmNfXywgZmlsbGVkKTsKIAogCXJldHVybiBmaWxsZWQ7CiB9CkBAIC0xNDkxLDcgKzE1MTEsNyBAQAogI2VuZGlmCiAKIAlEQkdfUlVOX1NHKCIlcygpIFNUQVJUICVkIGVudHJpZXMsICAlcCwleFxuIiwKLQkJX19GVU5DVElPTl9fLCBuZW50cywgc2JhX3NnX2FkZHJlc3Moc2dsaXN0KSwgc2dsaXN0LT5sZW5ndGgpOworCQkgICBfX2Z1bmNfXywgbmVudHMsIHNiYV9zZ19hZGRyZXNzKHNnbGlzdCksIHNnbGlzdC0+bGVuZ3RoKTsKIAogI2lmZGVmIEFTU0VSVF9QRElSX1NBTklUWQogCWlvYyA9IEdFVF9JT0MoZGV2KTsKQEAgLTE1MDksNyArMTUyOSw3IEBACiAJCW5lbnRzLS07CiAJfQogCi0JREJHX1JVTl9TRygiJXMoKSBET05FIChuZW50cyAlZClcbiIsIF9fRlVOQ1RJT05fXywgIG5lbnRzKTsKKwlEQkdfUlVOX1NHKCIlcygpIERPTkUgKG5lbnRzICVkKVxuIiwgX19mdW5jX18sICBuZW50cyk7CiAKICNpZmRlZiBBU1NFUlRfUERJUl9TQU5JVFkKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yZXNfbG9jaywgZmxhZ3MpOwpAQCAtMTU0Niw3ICsxNTY2LDcgQEAKIAlpb2MtPmlvdl9zaXplID0gfmlvYy0+aW1hc2sgKyAxOwogCiAJREJHX0lOSVQoIiVzKCkgaHBhICVwIElPViBiYXNlIDB4JWx4IG1hc2sgMHglbHggKCVkTUIpXG4iLAotCQlfX0ZVTkNUSU9OX18sIGlvYy0+aW9jX2hwYSwgaW9jLT5pYmFzZSwgaW9jLT5pbWFzaywKKwkJX19mdW5jX18sIGlvYy0+aW9jX2hwYSwgaW9jLT5pYmFzZSwgaW9jLT5pbWFzaywKIAkJaW9jLT5pb3Zfc2l6ZSA+PiAyMCk7CiAKIAlzd2l0Y2ggKGlvdnBfc2l6ZSkgewpAQCAtMTU2OSw3ICsxNTg5LDcgQEAKIAogCW1lbXNldChpb2MtPnBkaXJfYmFzZSwgMCwgaW9jLT5wZGlyX3NpemUpOwogCi0JREJHX0lOSVQoIiVzKCkgSU9WIHBhZ2Ugc2l6ZSAlbGRLIHBkaXIgJXAgc2l6ZSAleFxuIiwgX19GVU5DVElPTl9fLAorCURCR19JTklUKCIlcygpIElPViBwYWdlIHNpemUgJWxkSyBwZGlyICVwIHNpemUgJXhcbiIsIF9fZnVuY19fLAogCQlpb3ZwX3NpemUgPj4gMTAsIGlvYy0+cGRpcl9iYXNlLCBpb2MtPnBkaXJfc2l6ZSk7CiAKIAlBU1NFUlQoQUxJR04oKHVuc2lnbmVkIGxvbmcpIGlvYy0+cGRpcl9iYXNlLCA0KjEwMjQpID09ICh1bnNpZ25lZCBsb25nKSBpb2MtPnBkaXJfYmFzZSk7CkBAIC0xNjEyLDcgKzE2MzIsNyBAQAogCiAJCXByZWZldGNoX3NwaWxsX3BhZ2UgPSB2aXJ0X3RvX3BoeXMoYWRkcik7CiAKLQkJREJHX0lOSVQoIiVzKCkgcHJlZmV0Y2ggc3BpbGwgYWRkcjogMHglbHhcbiIsIF9fRlVOQ1RJT05fXywgcHJlZmV0Y2hfc3BpbGxfcGFnZSk7CisJCURCR19JTklUKCIlcygpIHByZWZldGNoIHNwaWxsIGFkZHI6IDB4JWx4XG4iLCBfX2Z1bmNfXywgcHJlZmV0Y2hfc3BpbGxfcGFnZSk7CiAJfQogCS8qCiAgIAkqKiBTZXQgYWxsIHRoZSBQRElSIGVudHJpZXMgdmFsaWQgdy8gdGhlIHNwaWxsIHBhZ2UgYXMgdGhlIHRhcmdldApAQCAtMTY0MSw3ICsxNjYxLDcgQEAKIAkvKiByZXNvdXJjZSBtYXAgc2l6ZSBkaWN0YXRlZCBieSBwZGlyX3NpemUgKi8KIAlpb2MtPnJlc19zaXplID0gaW9jLT5wZGlyX3NpemUgLyBQRElSX0VOVFJZX1NJWkU7IC8qIGVudHJpZXMgKi8KIAlpb2MtPnJlc19zaXplID4+PSAzOyAgLyogY29udmVydCBiaXQgY291bnQgdG8gYnl0ZSBjb3VudCAqLwotCURCR19JTklUKCIlcygpIHJlc19zaXplIDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgaW9jLT5yZXNfc2l6ZSk7CisJREJHX0lOSVQoIiVzKCkgcmVzX3NpemUgMHgleFxuIiwgX19mdW5jX18sIGlvYy0+cmVzX3NpemUpOwogCiAJaW9jLT5yZXNfbWFwID0gKGNoYXIgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAogCQkJCQkJIGdldF9vcmRlcihpb2MtPnJlc19zaXplKSk7CkBAIC0xNjY0LDcgKzE2ODQsNyBAQAogCQkJCQkJCSAgICAgIHwgcHJlZmV0Y2hfc3BpbGxfcGFnZSk7CiAjZW5kaWYKIAotCURCR19JTklUKCIlcygpIHJlc19tYXAgJXggJXBcbiIsIF9fRlVOQ1RJT05fXywKKwlEQkdfSU5JVCgiJXMoKSByZXNfbWFwICV4ICVwXG4iLCBfX2Z1bmNfXywKIAkJIGlvYy0+cmVzX3NpemUsICh2b2lkICopIGlvYy0+cmVzX21hcCk7CiB9CiAKQEAgLTE3NjcsNyArMTc4Nyw3IEBACiAJaW92cF9zaXplID0gKDEgPDwgaW92cF9zaGlmdCk7CiAJaW92cF9tYXNrID0gfihpb3ZwX3NpemUgLSAxKTsKIAotCURCR19JTklUKCIlczogUEFHRV9TSVpFICVsZEssIGlvdnBfc2l6ZSAlbGRLXG4iLCBfX0ZVTkNUSU9OX18sCisJREJHX0lOSVQoIiVzOiBQQUdFX1NJWkUgJWxkSywgaW92cF9zaXplICVsZEtcbiIsIF9fZnVuY19fLAogCQlQQUdFX1NJWkUgPj4gMTAsIGlvdnBfc2l6ZSA+PiAxMCk7CiAKIAlpZiAoIWlvYy0+bmFtZSkgewpAQCAtMjEzNyw3ICsyMTU3LDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKCIlczogdW5rbm93bi91bnN1cHBvcnRlZCBpb21tdSBwYWdlIHNpemUgJWxkXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGFnZV9zaXplKTsKKwkJCSAgICAgICBfX2Z1bmNfXywgcGFnZV9zaXplKTsKIAl9CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbWV0aC5jCmluZGV4IDk4OThmZWIuLjNkNDc4MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1ldGguYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJfQogCiAJaWYgKChyYyA9IGFzc2lnbl9pcnFfdmVjdG9yKEFVVE9fQVNTSUdOKSkgPCAwKQotCQlwYW5pYygiJXM6IG91dCBvZiBpbnRlcnJ1cHQgdmVjdG9ycyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXBhbmljKCIlczogb3V0IG9mIGludGVycnVwdCB2ZWN0b3JzIVxuIiwgX19mdW5jX18pOwogCWRldi0+aXJxID0gcmM7CiAKIAkvKgpAQCAtMjk0LDcgKzI5NCw3IEBACiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAl9CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoIGV2ZW50ICE9IE5FVERFVl9VUCAmJiBldmVudCAhPSBORVRERVZfRE9XTiApIHJldHVybiBOT1RJRllfRE9ORTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zY3NpLmMKaW5kZXggNzY2MWJiMC4uM2EwNzhhZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1zY3NpLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zY3NpLmMKQEAgLTIwMSwyMiArMjAxLDYgQEAKIAlzaW1zY3NpX3NnX3JlYWR3cml0ZShzYywgbW9kZSwgb2Zmc2V0KTsKIH0KIAotc3RhdGljIHZvaWQgc2ltc2NzaV9maWxscmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKnNjLCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbikKLXsKLQotCWludCBpOwotCXVuc2lnbmVkIHRoaXNsZW47Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzbHA7Ci0KLQlzY3NpX2Zvcl9lYWNoX3NnKHNjLCBzbHAsIHNjc2lfc2dfY291bnQoc2MpLCBpKSB7Ci0JCWlmICghbGVuKQotCQkJYnJlYWs7Ci0JCXRoaXNsZW4gPSBtaW4obGVuLCBzbHAtPmxlbmd0aCk7Ci0JCW1lbWNweShzZ192aXJ0KHNscCksIGJ1ZiwgdGhpc2xlbik7Ci0JCWxlbiAtPSB0aGlzbGVuOwotCX0KLX0KLQogc3RhdGljIGludAogc2ltc2NzaV9xdWV1ZWNvbW1hbmQgKHN0cnVjdCBzY3NpX2NtbmQgKnNjLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKQEAgLTI1OCw3ICsyNDIsNyBAQAogCQkJYnVmWzZdID0gMDsJLyogcmVzZXJ2ZWQgKi8KIAkJCWJ1Zls3XSA9IDA7CS8qIHZhcmlvdXMgZmxhZ3MgKi8KIAkJCW1lbWNweShidWYgKyA4LCAiSFAgICAgICBTSU1VTEFURUQgRElTSyAgMC4wMCIsICAyOCk7Ci0JCQlzaW1zY3NpX2ZpbGxyZXN1bHQoc2MsIGJ1ZiwgMzYpOworCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjLCBidWYsIDM2KTsKIAkJCXNjLT5yZXN1bHQgPSBHT09EOwogCQkJYnJlYWs7CiAKQEAgLTMwNiwxNCArMjkwLDE1IEBACiAJCQlidWZbNV0gPSAwOwogCQkJYnVmWzZdID0gMjsKIAkJCWJ1Zls3XSA9IDA7Ci0JCQlzaW1zY3NpX2ZpbGxyZXN1bHQoc2MsIGJ1ZiwgOCk7CisJCQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoc2MsIGJ1ZiwgOCk7CiAJCQlzYy0+cmVzdWx0ID0gR09PRDsKIAkJCWJyZWFrOwogCiAJCSAgICAgIGNhc2UgTU9ERV9TRU5TRToKIAkJICAgICAgY2FzZSBNT0RFX1NFTlNFXzEwOgogCQkJLyogc2QuYyB1c2VzIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgZGlzayBkb2VzIHdyaXRlLWNhY2hpbmcuICovCi0JCQlzaW1zY3NpX2ZpbGxyZXN1bHQoc2MsIChjaGFyICopZW1wdHlfemVyb19wYWdlLCBzY3NpX2J1ZmZsZW4oc2MpKTsKKwkJCXNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihzYywgKGNoYXIgKillbXB0eV96ZXJvX3BhZ2UsCisJCQkJCQkgUEFHRV9TSVpFKTsKIAkJCXNjLT5yZXN1bHQgPSBHT09EOwogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jCmluZGV4IGVmMjUyZGYuLmViMGMzMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAkJaWYgKCFzdGF0ZS0+aXJxKSB7CiAJCQlpZiAoKHJjID0gYXNzaWduX2lycV92ZWN0b3IoQVVUT19BU1NJR04pKSA8IDApCiAJCQkJcGFuaWMoIiVzOiBvdXQgb2YgaW50ZXJydXB0IHZlY3RvcnMhXG4iLAotCQkJCSAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICAgX19mdW5jX18pOwogCQkJc3RhdGUtPmlycSA9IHJjOwogCQkJaWE2NF9zc2NfY29ubmVjdF9pcnEoS0VZQk9BUkRfSU5UUiwgc3RhdGUtPmlycSk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2VsZmNvcmUzMi5oIGIvYXJjaC9pYTY0L2lhMzIvZWxmY29yZTMyLmgKaW5kZXggNDQ2YzlhYS4uOWEzYWJmNTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2VsZmNvcmUzMi5oCisrKyBiL2FyY2gvaWE2NC9pYTMyL2VsZmNvcmUzMi5oCkBAIC0zMCw3ICszMCwxOSBAQAogCWludAlzaV9lcnJubzsJCQkvKiBlcnJubyAqLwogfTsKIAotI2RlZmluZSBqaWZmaWVzX3RvX3RpbWV2YWwoYSxiKSBkbyB7IChiKS0+dHZfdXNlYyA9IDA7IChiKS0+dHZfc2VjID0gKGEpL0haOyB9d2hpbGUoMCkKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworLyoKKyAqIEhhY2tzIGFyZSBoZXJlIHNpbmNlIHR5cGVzIGJldHdlZW4gY29tcGF0X3RpbWV2YWwgKD0gcGFpciBvZiBzMzIpIGFuZAorICogaWE2NC1uYXRpdmUgdGltZXZhbCAoPSBwYWlyIG9mIHM2NCkgYXJlIG5vdCBjb21wYXRpYmxlLCBhdCBsZWFzdCBhIGZpbGUKKyAqIGFyY2gvaWE2NC9pYTMyLy4uLy4uLy4uL2ZzL2JpbmZtdF9lbGYuYyB3aWxsIGdldCB3YXJuaW5ncyBmcm9tIGNvbXBpbGVyIG9uCisgKiB1c2Ugb2YgY3B1dGltZV90b190aW1ldmFsKCksIHdoaWNoIHVzdWFsbHkgYW4gYWxpYXMgb2YgamlmZmllc190b190aW1ldmFsKCkuCisgKi8KKyNkZWZpbmUgY3B1dGltZV90b190aW1ldmFsKGEsYikgXAorCWRvIHsgKGIpLT50dl91c2VjID0gMDsgKGIpLT50dl9zZWMgPSAoYSkvTlNFQ19QRVJfU0VDOyB9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBqaWZmaWVzX3RvX3RpbWV2YWwoYSxiKSBcCisJZG8geyAoYiktPnR2X3VzZWMgPSAwOyAoYiktPnR2X3NlYyA9IChhKS9IWjsgfSB3aGlsZSgwKQorI2VuZGlmCiAKIHN0cnVjdCBlbGZfcHJzdGF0dXMKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfc2lnbmFsLmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX3NpZ25hbC5jCmluZGV4IDg1ZTgyZjMuLjI1NmE3ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfc2lnbmFsLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9zaWduYWwuYwpAQCAtNzY2LDggKzc2NiwxOSBAQAogCiAJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCiAJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKLQkJaWYgKCFvbl9zaWdfc3RhY2soZXNwKSkKKwkJaW50IG9uc3RhY2sgPSBzYXNfc3NfZmxhZ3MoZXNwKTsKKworCQlpZiAob25zdGFjayA9PSAwKQogCQkJZXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CisJCWVsc2UgaWYgKG9uc3RhY2sgPT0gU1NfT05TVEFDSykgeworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSBvbiB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayBhbmQgd291bGQKKwkJCSAqIG92ZXJmbG93IGl0LCBkb24ndC4gUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzCisJCQkgKiBpbnN0ZWFkIHNvIHdlIHdpbGwgZGllIHdpdGggU0lHU0VHVi4KKwkJCSAqLworCQkJaWYgKCFsaWtlbHkob25fc2lnX3N0YWNrKGVzcCAtIGZyYW1lX3NpemUpKSkKKwkJCQlyZXR1cm4gKHZvaWQgX191c2VyICopIC0xTDsKKwkJfQogCX0KIAkvKiBMZWdhY3kgc3RhY2sgc3dpdGNoaW5nIG5vdCBzdXBwb3J0ZWQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKaW5kZXggZDAyNWEyMi4uN2UwMjhjZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCkBAIC0zMiwxNyArMzIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QveGRyLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzZC9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2V2ZW50cG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KQEAgLTIzOTIsMTYgKzIzODgsNDUgQEAKIAlyZXR1cm4gLUVTUkNIOwogfQogCitzdGF0aWMgdm9pZCBzZXRfdGxzX2Rlc2Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgaWR4LAorCQljb25zdCBzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgKmluZm8sIGludCBuKQoreworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJnAtPnRocmVhZDsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MgPSAmdC0+dGxzX2FycmF5W2lkeCAtIEdEVF9FTlRSWV9UTFNfTUlOXTsKKwlpbnQgY3B1OworCisJLyoKKwkgKiBXZSBtdXN0IG5vdCBnZXQgcHJlZW1wdGVkIHdoaWxlIG1vZGlmeWluZyB0aGUgVExTLgorCSAqLworCWNwdSA9IGdldF9jcHUoKTsKKworCXdoaWxlIChuLS0gPiAwKSB7CisJCWlmIChMRFRfZW1wdHkoaW5mbykpIHsKKwkJCWRlc2MtPmEgPSAwOworCQkJZGVzYy0+YiA9IDA7CisJCX0gZWxzZSB7CisJCQlkZXNjLT5hID0gTERUX2VudHJ5X2EoaW5mbyk7CisJCQlkZXNjLT5iID0gTERUX2VudHJ5X2IoaW5mbyk7CisJCX0KKworCQkrK2luZm87CisJCSsrZGVzYzsKKwl9CisKKwlpZiAodCA9PSAmY3VycmVudC0+dGhyZWFkKQorCQlsb2FkX1RMUyh0LCBjcHUpOworCisJcHV0X2NwdSgpOworfQorCiAvKgogICogU2V0IGEgZ2l2ZW4gVExTIGRlc2NyaXB0b3I6CiAgKi8KIGFzbWxpbmthZ2UgaW50CiBzeXMzMl9zZXRfdGhyZWFkX2FyZWEgKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyBfX3VzZXIgKnVfaW5mbykKIHsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZjdXJyZW50LT50aHJlYWQ7CiAJc3RydWN0IGlhMzJfdXNlcl9kZXNjIGluZm87Ci0Jc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjOwotCWludCBjcHUsIGlkeDsKKwlpbnQgaWR4OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCB1X2luZm8sIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjQyMSwxOCArMjQ0Niw3IEBACiAJaWYgKGlkeCA8IEdEVF9FTlRSWV9UTFNfTUlOIHx8IGlkeCA+IEdEVF9FTlRSWV9UTFNfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRlc2MgPSB0LT50bHNfYXJyYXkgKyBpZHggLSBHRFRfRU5UUllfVExTX01JTjsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChMRFRfZW1wdHkoJmluZm8pKSB7Ci0JCWRlc2MtPmEgPSAwOwotCQlkZXNjLT5iID0gMDsKLQl9IGVsc2UgewotCQlkZXNjLT5hID0gTERUX2VudHJ5X2EoJmluZm8pOwotCQlkZXNjLT5iID0gTERUX2VudHJ5X2IoJmluZm8pOwotCX0KLQlsb2FkX1RMUyh0LCBjcHUpOworCXNldF90bHNfZGVzYyhjdXJyZW50LCBpZHgsICZpbmZvLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ1Niw2ICsyNDcwLDIwIEBACiAjZGVmaW5lIEdFVF9QUkVTRU5UKGRlc2MpCSgoKGRlc2MpLT5iID4+IDE1KSAmIDEpCiAjZGVmaW5lIEdFVF9VU0VBQkxFKGRlc2MpCSgoKGRlc2MpLT5iID4+IDIwKSAmIDEpCiAKK3N0YXRpYyB2b2lkIGZpbGxfdXNlcl9kZXNjKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyAqaW5mbywgaW50IGlkeCwKKwkJY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQoreworCWluZm8tPmVudHJ5X251bWJlciA9IGlkeDsKKwlpbmZvLT5iYXNlX2FkZHIgPSBHRVRfQkFTRShkZXNjKTsKKwlpbmZvLT5saW1pdCA9IEdFVF9MSU1JVChkZXNjKTsKKwlpbmZvLT5zZWdfMzJiaXQgPSBHRVRfMzJCSVQoZGVzYyk7CisJaW5mby0+Y29udGVudHMgPSBHRVRfQ09OVEVOVFMoZGVzYyk7CisJaW5mby0+cmVhZF9leGVjX29ubHkgPSAhR0VUX1dSSVRBQkxFKGRlc2MpOworCWluZm8tPmxpbWl0X2luX3BhZ2VzID0gR0VUX0xJTUlUX1BBR0VTKGRlc2MpOworCWluZm8tPnNlZ19ub3RfcHJlc2VudCA9ICFHRVRfUFJFU0VOVChkZXNjKTsKKwlpbmZvLT51c2VhYmxlID0gR0VUX1VTRUFCTEUoZGVzYyk7Cit9CisKIGFzbWxpbmthZ2UgaW50CiBzeXMzMl9nZXRfdGhyZWFkX2FyZWEgKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyBfX3VzZXIgKnVfaW5mbykKIHsKQEAgLTI0NjksMjIgKzI0OTcsNTg4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGVzYyA9IGN1cnJlbnQtPnRocmVhZC50bHNfYXJyYXkgKyBpZHggLSBHRFRfRU5UUllfVExTX01JTjsKLQotCWluZm8uZW50cnlfbnVtYmVyID0gaWR4OwotCWluZm8uYmFzZV9hZGRyID0gR0VUX0JBU0UoZGVzYyk7Ci0JaW5mby5saW1pdCA9IEdFVF9MSU1JVChkZXNjKTsKLQlpbmZvLnNlZ18zMmJpdCA9IEdFVF8zMkJJVChkZXNjKTsKLQlpbmZvLmNvbnRlbnRzID0gR0VUX0NPTlRFTlRTKGRlc2MpOwotCWluZm8ucmVhZF9leGVjX29ubHkgPSAhR0VUX1dSSVRBQkxFKGRlc2MpOwotCWluZm8ubGltaXRfaW5fcGFnZXMgPSBHRVRfTElNSVRfUEFHRVMoZGVzYyk7Ci0JaW5mby5zZWdfbm90X3ByZXNlbnQgPSAhR0VUX1BSRVNFTlQoZGVzYyk7Ci0JaW5mby51c2VhYmxlID0gR0VUX1VTRUFCTEUoZGVzYyk7CisJZmlsbF91c2VyX2Rlc2MoJmluZm8sIGlkeCwgZGVzYyk7CiAKIAlpZiAoY29weV90b191c2VyKHVfaW5mbywgJmluZm8sIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQogCitzdHJ1Y3QgcmVnc2V0X2dldCB7CisJdm9pZCAqa2J1ZjsKKwl2b2lkIF9fdXNlciAqdWJ1ZjsKK307CisKK3N0cnVjdCByZWdzZXRfc2V0IHsKKwljb25zdCB2b2lkICprYnVmOworCWNvbnN0IHZvaWQgX191c2VyICp1YnVmOworfTsKKworc3RydWN0IHJlZ3NldF9nZXRzZXQgeworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0OworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0OworCXVuaW9uIHsKKwkJc3RydWN0IHJlZ3NldF9nZXQgZ2V0OworCQlzdHJ1Y3QgcmVnc2V0X3NldCBzZXQ7CisJfSB1OworCXVuc2lnbmVkIGludCBwb3M7CisJdW5zaWduZWQgaW50IGNvdW50OworCWludCByZXQ7Cit9OworCitzdGF0aWMgdm9pZCBnZXRmcHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZWdubywgaW50ICp2YWwpCit7CisJc3dpdGNoIChyZWdubyAvIHNpemVvZihpbnQpKSB7CisJY2FzZSAwOgorCQkqdmFsID0gdGFzay0+dGhyZWFkLmZjciAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqdmFsID0gdGFzay0+dGhyZWFkLmZzciAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdmFsID0gKHRhc2stPnRocmVhZC5mc3I+PjE2KSAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkqdmFsID0gdGFzay0+dGhyZWFkLmZpcjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqdmFsID0gKHRhc2stPnRocmVhZC5maXI+PjMyKSAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQkqdmFsID0gdGFzay0+dGhyZWFkLmZkcjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQkqdmFsID0gKHRhc2stPnRocmVhZC5mZHIgPj4gMzIpICYgMHhmZmZmOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldGZwcmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlZ25vLCBpbnQgdmFsKQoreworCXN3aXRjaCAocmVnbm8gLyBzaXplb2YoaW50KSkgeworCWNhc2UgMDoKKwkJdGFzay0+dGhyZWFkLmZjciA9ICh0YXNrLT50aHJlYWQuZmNyICYgKH4weDFmM2YpKQorCQkJfCAodmFsICYgMHgxZjNmKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0YXNrLT50aHJlYWQuZnNyID0gKHRhc2stPnRocmVhZC5mc3IgJiAofjB4ZmZmZikpIHwgdmFsOworCQlicmVhazsKKwljYXNlIDI6CisJCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmMDAwMCkpCisJCQl8ICh2YWwgPDwgMTYpOworCQlicmVhazsKKwljYXNlIDM6CisJCXRhc2stPnRocmVhZC5maXIgPSAodGFzay0+dGhyZWFkLmZpciAmICh+MHhmZmZmZmZmZikpIHwgdmFsOworCQlicmVhazsKKwljYXNlIDU6CisJCXRhc2stPnRocmVhZC5mZHIgPSAodGFzay0+dGhyZWFkLmZkciAmICh+MHhmZmZmZmZmZikpIHwgdmFsOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFjY2Vzc19mcHJlZ19pYTMyKGludCByZWdubywgdm9pZCAqcmVnLAorCQlzdHJ1Y3QgcHRfcmVncyAqcHQsIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3LAorCQlpbnQgdG9zLCBpbnQgd3JpdGUpCit7CisJdm9pZCAqZjsKKworCWlmICgocmVnbm8gKz0gdG9zKSA+PSA4KQorCQlyZWdubyAtPSA4OworCWlmIChyZWdubyA8IDQpCisJCWYgPSAmcHQtPmY4ICsgcmVnbm87CisJZWxzZSBpZiAocmVnbm8gPD0gNykKKwkJZiA9ICZzdy0+ZjEyICsgKHJlZ25vIC0gNCk7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAicmVnbm8gbXVzdCBiZSBsZXNzIHRoYW4gNyBcbiIpOworCQkgcmV0dXJuOworCX0KKworCWlmICh3cml0ZSkKKwkJbWVtY3B5KGYsIHJlZywgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOworCWVsc2UKKwkJbWVtY3B5KHJlZywgZiwgc2l6ZW9mKHN0cnVjdCBfZnByZWdfaWEzMikpOworfQorCitzdGF0aWMgdm9pZCBkb19mcHJlZ3NfZ2V0KHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQoreworCXN0cnVjdCByZWdzZXRfZ2V0c2V0ICpkc3QgPSBhcmc7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZHN0LT50YXJnZXQ7CisJc3RydWN0IHB0X3JlZ3MgKnB0OworCWludCBzdGFydCwgZW5kLCB0b3M7CisJY2hhciBidWZbODBdOworCisJaWYgKGRzdC0+Y291bnQgPT0gMCB8fCB1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQorCQlyZXR1cm47CisJaWYgKGRzdC0+cG9zIDwgNyAqIHNpemVvZihpbnQpKSB7CisJCWVuZCA9IG1pbigoZHN0LT5wb3MgKyBkc3QtPmNvdW50KSwKKwkJCSh1bnNpZ25lZCBpbnQpKDcgKiBzaXplb2YoaW50KSkpOworCQlmb3IgKHN0YXJ0ID0gZHN0LT5wb3M7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBzaXplb2YoaW50KSkKKwkJCWdldGZwcmVnKHRhc2ssIHN0YXJ0LCAoaW50ICopKGJ1ZiArIHN0YXJ0KSk7CisJCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCSZkc3QtPnUuZ2V0LmtidWYsICZkc3QtPnUuZ2V0LnVidWYsIGJ1ZiwKKwkJCQkwLCA3ICogc2l6ZW9mKGludCkpOworCQlpZiAoZHN0LT5yZXQgfHwgZHN0LT5jb3VudCA9PSAwKQorCQkJcmV0dXJuOworCX0KKwlpZiAoZHN0LT5wb3MgPCBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkpIHsKKwkJcHQgPSB0YXNrX3B0X3JlZ3ModGFzayk7CisJCXRvcyA9ICh0YXNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7CisJCWVuZCA9IG1pbihkc3QtPnBvcyArIGRzdC0+Y291bnQsCisJCQkodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkpKTsKKwkJc3RhcnQgPSAoZHN0LT5wb3MgLSA3ICogc2l6ZW9mKGludCkpIC8KKwkJCXNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOworCQllbmQgPSAoZW5kIC0gNyAqIHNpemVvZihpbnQpKSAvIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOworCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisJCQlhY2Nlc3NfZnByZWdfaWEzMihzdGFydCwKKwkJCQkoc3RydWN0IF9mcHJlZ19pYTMyICopYnVmICsgc3RhcnQsCisJCQkJcHQsIGluZm8tPnN3LCB0b3MsIDApOworCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkmZHN0LT51LmdldC5rYnVmLCAmZHN0LT51LmdldC51YnVmLAorCQkJCWJ1ZiwgNyAqIHNpemVvZihpbnQpLAorCQkJCXNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2kzODdfc3RydWN0KSk7CisJCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCisJCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBkb19mcHJlZ3Nfc2V0KHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQoreworCXN0cnVjdCByZWdzZXRfZ2V0c2V0ICpkc3QgPSBhcmc7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZHN0LT50YXJnZXQ7CisJc3RydWN0IHB0X3JlZ3MgKnB0OworCWNoYXIgYnVmWzgwXTsKKwlpbnQgZW5kLCBzdGFydCwgdG9zOworCisJaWYgKGRzdC0+Y291bnQgPT0gMCB8fCB1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQorCQlyZXR1cm47CisKKwlpZiAoZHN0LT5wb3MgPCA3ICogc2l6ZW9mKGludCkpIHsKKwkJc3RhcnQgPSBkc3QtPnBvczsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkmZHN0LT51LnNldC5rYnVmLCAmZHN0LT51LnNldC51YnVmLCBidWYsCisJCQkJMCwgNyAqIHNpemVvZihpbnQpKTsKKwkJaWYgKGRzdC0+cmV0KQorCQkJcmV0dXJuOworCQlmb3IgKDsgc3RhcnQgPCBkc3QtPnBvczsgc3RhcnQgKz0gc2l6ZW9mKGludCkpCisJCQlzZXRmcHJlZyh0YXNrLCBzdGFydCwgKigoaW50ICopKGJ1ZiArIHN0YXJ0KSkpOworCQlpZiAoZHN0LT5jb3VudCA9PSAwKQorCQkJcmV0dXJuOworCX0KKwlpZiAoZHN0LT5wb3MgPCBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkpIHsKKwkJc3RhcnQgPSAoZHN0LT5wb3MgLSA3ICogc2l6ZW9mKGludCkpIC8KKwkJCXNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOworCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCSZkc3QtPnUuc2V0LmtidWYsICZkc3QtPnUuc2V0LnVidWYsCisJCQkJYnVmLCA3ICogc2l6ZW9mKGludCksCisJCQkJc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfaTM4N19zdHJ1Y3QpKTsKKwkJaWYgKGRzdC0+cmV0KQorCQkJcmV0dXJuOworCQlwdCA9IHRhc2tfcHRfcmVncyh0YXNrKTsKKwkJdG9zID0gKHRhc2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKKwkJZW5kID0gKGRzdC0+cG9zIC0gNyAqIHNpemVvZihpbnQpKSAvIHNpemVvZihzdHJ1Y3QgX2ZwcmVnX2lhMzIpOworCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisJCQlhY2Nlc3NfZnByZWdfaWEzMihzdGFydCwKKwkJCQkoc3RydWN0IF9mcHJlZ19pYTMyICopYnVmICsgc3RhcnQsCisJCQkJcHQsIGluZm8tPnN3LCB0b3MsIDEpOworCQlpZiAoZHN0LT5jb3VudCA9PSAwKQorCQkJcmV0dXJuOworCX0KK30KKworI2RlZmluZSBPRkZTRVQobWVtYmVyKSAoKGludCkob2Zmc2V0b2Yoc3RydWN0IGlhMzJfdXNlcl9meHNyX3N0cnVjdCwgbWVtYmVyKSkpCitzdGF0aWMgdm9pZCBnZXRmcHhyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc3RhcnQsIGludCBlbmQsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgbWluX3ZhbDsKKworCW1pbl92YWwgPSBtaW4oZW5kLCBPRkZTRVQoZm9wKSk7CisJd2hpbGUgKHN0YXJ0IDwgbWluX3ZhbCkgeworCQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGN3ZCkpCisJCQkqKChzaG9ydCAqKWJ1ZikgPSB0YXNrLT50aHJlYWQuZmNyICYgMHhmZmZmOworCQllbHNlIGlmIChzdGFydCA9PSBPRkZTRVQoc3dkKSkKKwkJCSooKHNob3J0ICopYnVmKSA9IHRhc2stPnRocmVhZC5mc3IgJiAweGZmZmY7CisJCWVsc2UgaWYgKHN0YXJ0ID09IE9GRlNFVCh0d2QpKQorCQkJKigoc2hvcnQgKilidWYpID0gKHRhc2stPnRocmVhZC5mc3I+PjE2KSAmIDB4ZmZmZjsKKwkJYnVmICs9IDI7CisJCXN0YXJ0ICs9IDI7CisJfQorCS8qIHNraXAgZm9wIGVsZW1lbnQgKi8KKwlpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvcCkpIHsKKwkJc3RhcnQgKz0gMjsKKwkJYnVmICs9IDI7CisJfQorCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGZpcCkpCisJCQkqKChpbnQgKilidWYpID0gdGFzay0+dGhyZWFkLmZpcjsKKwkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZjcykpCisJCQkqKChpbnQgKilidWYpID0gKHRhc2stPnRocmVhZC5maXI+PjMyKSAmIDB4ZmZmZjsKKwkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvbykpCisJCQkqKChpbnQgKilidWYpID0gdGFzay0+dGhyZWFkLmZkcjsKKwkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvcykpCisJCQkqKChpbnQgKilidWYpID0gKHRhc2stPnRocmVhZC5mZHI+PjMyKSAmIDB4ZmZmZjsKKwkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKG14Y3NyKSkKKwkJCSooKGludCAqKWJ1ZikgPSAoKHRhc2stPnRocmVhZC5mY3I+PjMyKSAmIDB4ZmY4MCkKKwkJCQkJIHwgKCh0YXNrLT50aHJlYWQuZnNyPj4zMikgJiAweDNmKTsKKwkJYnVmICs9IDQ7CisJCXN0YXJ0ICs9IDQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRmcHhyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc3RhcnQsIGludCBlbmQsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgbWluX3ZhbCwgbnVtMzI7CisJc2hvcnQgbnVtOworCXVuc2lnbmVkIGxvbmcgbnVtNjQ7CisKKwltaW5fdmFsID0gbWluKGVuZCwgT0ZGU0VUKGZvcCkpOworCXdoaWxlIChzdGFydCA8IG1pbl92YWwpIHsKKwkJbnVtID0gKigoc2hvcnQgKilidWYpOworCQlpZiAoc3RhcnQgPT0gT0ZGU0VUKGN3ZCkpIHsKKwkJCXRhc2stPnRocmVhZC5mY3IgPSAodGFzay0+dGhyZWFkLmZjciAmICh+MHgxZjNmKSkKKwkJCQkJCXwgKG51bSAmIDB4MWYzZik7CisJCX0gZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKHN3ZCkpIHsKKwkJCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmKSkgfCBudW07CisJCX0gZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKHR3ZCkpIHsKKwkJCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmICh+MHhmZmZmMDAwMCkpCisJCQkJfCAoKChpbnQpbnVtKSA8PCAxNik7CisJCX0KKwkJYnVmICs9IDI7CisJCXN0YXJ0ICs9IDI7CisJfQorCS8qIHNraXAgZm9wIGVsZW1lbnQgKi8KKwlpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvcCkpIHsKKwkJc3RhcnQgKz0gMjsKKwkJYnVmICs9IDI7CisJfQorCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQludW0zMiA9ICooKGludCAqKWJ1Zik7CisJCWlmIChzdGFydCA9PSBPRkZTRVQoZmlwKSkKKwkJCXRhc2stPnRocmVhZC5maXIgPSAodGFzay0+dGhyZWFkLmZpciAmICh+MHhmZmZmZmZmZikpCisJCQkJCQkgfCBudW0zMjsKKwkJZWxzZSBpZiAoc3RhcnQgPT0gT0ZGU0VUKGZvbykpCisJCQl0YXNrLT50aHJlYWQuZmRyID0gKHRhc2stPnRocmVhZC5mZHIgJiAofjB4ZmZmZmZmZmYpKQorCQkJCQkJIHwgbnVtMzI7CisJCWVsc2UgaWYgKHN0YXJ0ID09IE9GRlNFVChteGNzcikpIHsKKwkJCW51bTY0ID0gbnVtMzIgJiAweGZmMTA7CisJCQl0YXNrLT50aHJlYWQuZmNyID0gKHRhc2stPnRocmVhZC5mY3IgJgorCQkJCSh+MHhmZjEwMDAwMDAwMDBVTCkpIHwgKG51bTY0PDwzMik7CisJCQludW02NCA9IG51bTMyICYgMHgzZjsKKwkJCXRhc2stPnRocmVhZC5mc3IgPSAodGFzay0+dGhyZWFkLmZzciAmCisJCQkJKH4weDNmMDAwMDAwMDBVTCkpIHwgKG51bTY0PDwzMik7CisJCX0KKwkJYnVmICs9IDQ7CisJCXN0YXJ0ICs9IDQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBkb19mcHhyZWdzX2dldChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmVnc2V0X2dldHNldCAqZHN0ID0gYXJnOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGRzdC0+dGFyZ2V0OworCXN0cnVjdCBwdF9yZWdzICpwdDsKKwljaGFyIGJ1ZlsxMjhdOworCWludCBzdGFydCwgZW5kLCB0b3M7CisKKwlpZiAoZHN0LT5jb3VudCA9PSAwIHx8IHVud191bndpbmRfdG9fdXNlcihpbmZvKSA8IDApCisJCXJldHVybjsKKwlpZiAoZHN0LT5wb3MgPCBPRkZTRVQoc3Rfc3BhY2VbMF0pKSB7CisJCWVuZCA9IG1pbihkc3QtPnBvcyArIGRzdC0+Y291bnQsICh1bnNpZ25lZCBpbnQpMzIpOworCQlnZXRmcHhyZWcodGFzaywgZHN0LT5wb3MsIGVuZCwgYnVmKTsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwgYnVmLAorCQkJCTAsIE9GRlNFVChzdF9zcGFjZVswXSkpOworCQlpZiAoZHN0LT5yZXQgfHwgZHN0LT5jb3VudCA9PSAwKQorCQkJcmV0dXJuOworCX0KKwlpZiAoZHN0LT5wb3MgPCBPRkZTRVQoeG1tX3NwYWNlWzBdKSkgeworCQlwdCA9IHRhc2tfcHRfcmVncyh0YXNrKTsKKwkJdG9zID0gKHRhc2stPnRocmVhZC5mc3IgPj4gMTEpICYgNzsKKwkJZW5kID0gbWluKGRzdC0+cG9zICsgZHN0LT5jb3VudCwKKwkJCQkodW5zaWduZWQgaW50KU9GRlNFVCh4bW1fc3BhY2VbMF0pKTsKKwkJc3RhcnQgPSAoZHN0LT5wb3MgLSBPRkZTRVQoc3Rfc3BhY2VbMF0pKSAvIDE2OworCQllbmQgPSAoZW5kIC0gT0ZGU0VUKHN0X3NwYWNlWzBdKSkgLyAxNjsKKwkJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQorCQkJYWNjZXNzX2ZwcmVnX2lhMzIoc3RhcnQsIGJ1ZiArIDE2ICogc3RhcnQsIHB0LAorCQkJCQkJaW5mby0+c3csIHRvcywgMCk7CisJCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCSZkc3QtPnUuZ2V0LmtidWYsICZkc3QtPnUuZ2V0LnVidWYsCisJCQkJYnVmLCBPRkZTRVQoc3Rfc3BhY2VbMF0pLCBPRkZTRVQoeG1tX3NwYWNlWzBdKSk7CisJCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCisJCQlyZXR1cm47CisJfQorCWlmIChkc3QtPnBvcyA8IE9GRlNFVChwYWRkaW5nWzBdKSkKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwKKwkJCQkmaW5mby0+c3ctPmYxNiwgT0ZGU0VUKHhtbV9zcGFjZVswXSksCisJCQkJT0ZGU0VUKHBhZGRpbmdbMF0pKTsKK30KKworc3RhdGljIHZvaWQgZG9fZnB4cmVnc19zZXQoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCit7CisJc3RydWN0IHJlZ3NldF9nZXRzZXQgKmRzdCA9IGFyZzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBkc3QtPnRhcmdldDsKKwljaGFyIGJ1ZlsxMjhdOworCWludCBzdGFydCwgZW5kOworCisJaWYgKGRzdC0+Y291bnQgPT0gMCB8fCB1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQorCQlyZXR1cm47CisKKwlpZiAoZHN0LT5wb3MgPCBPRkZTRVQoc3Rfc3BhY2VbMF0pKSB7CisJCXN0YXJ0ID0gZHN0LT5wb3M7CisJCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5zZXQua2J1ZiwgJmRzdC0+dS5zZXQudWJ1ZiwKKwkJCQlidWYsIDAsIE9GRlNFVChzdF9zcGFjZVswXSkpOworCQlpZiAoZHN0LT5yZXQpCisJCQlyZXR1cm47CisJCXNldGZweHJlZyh0YXNrLCBzdGFydCwgZHN0LT5wb3MsIGJ1Zik7CisJCWlmIChkc3QtPmNvdW50ID09IDApCisJCQlyZXR1cm47CisJfQorCWlmIChkc3QtPnBvcyA8IE9GRlNFVCh4bW1fc3BhY2VbMF0pKSB7CisJCXN0cnVjdCBwdF9yZWdzICpwdDsKKwkJaW50IHRvczsKKwkJcHQgPSB0YXNrX3B0X3JlZ3ModGFzayk7CisJCXRvcyA9ICh0YXNrLT50aHJlYWQuZnNyID4+IDExKSAmIDc7CisJCXN0YXJ0ID0gKGRzdC0+cG9zIC0gT0ZGU0VUKHN0X3NwYWNlWzBdKSkgLyAxNjsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkmZHN0LT51LnNldC5rYnVmLCAmZHN0LT51LnNldC51YnVmLAorCQkJCWJ1ZiwgT0ZGU0VUKHN0X3NwYWNlWzBdKSwgT0ZGU0VUKHhtbV9zcGFjZVswXSkpOworCQlpZiAoZHN0LT5yZXQpCisJCQlyZXR1cm47CisJCWVuZCA9IChkc3QtPnBvcyAtIE9GRlNFVChzdF9zcGFjZVswXSkpIC8gMTY7CisJCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKKwkJCWFjY2Vzc19mcHJlZ19pYTMyKHN0YXJ0LCBidWYgKyAxNiAqIHN0YXJ0LCBwdCwgaW5mby0+c3csCisJCQkJCQkgdG9zLCAxKTsKKwkJaWYgKGRzdC0+Y291bnQgPT0gMCkKKwkJCXJldHVybjsKKwl9CisJaWYgKGRzdC0+cG9zIDwgT0ZGU0VUKHBhZGRpbmdbMF0pKQorCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCSZkc3QtPnUuc2V0LmtidWYsICZkc3QtPnUuc2V0LnVidWYsCisJCQkJJmluZm8tPnN3LT5mMTYsIE9GRlNFVCh4bW1fc3BhY2VbMF0pLAorCQkJCSBPRkZTRVQocGFkZGluZ1swXSkpOworfQorI3VuZGVmIE9GRlNFVAorCitzdGF0aWMgaW50IGRvX3JlZ3NldF9jYWxsKHZvaWQgKCpjYWxsKShzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKiwgdm9pZCAqKSwKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCWNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCXN0cnVjdCByZWdzZXRfZ2V0c2V0IGluZm8gPSB7IC50YXJnZXQgPSB0YXJnZXQsIC5yZWdzZXQgPSByZWdzZXQsCisJCS5wb3MgPSBwb3MsIC5jb3VudCA9IGNvdW50LAorCQkudS5zZXQgPSB7IC5rYnVmID0ga2J1ZiwgLnVidWYgPSB1YnVmIH0sCisJCS5yZXQgPSAwIH07CisKKwlpZiAodGFyZ2V0ID09IGN1cnJlbnQpCisJCXVud19pbml0X3J1bm5pbmcoY2FsbCwgJmluZm8pOworCWVsc2UgeworCQlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gdWZpOworCQltZW1zZXQoJnVmaSwgMCwgc2l6ZW9mKHVmaSkpOworCQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdWZpLCB0YXJnZXQpOworCQkoKmNhbGwpKCZ1ZmksICZpbmZvKTsKKwl9CisKKwlyZXR1cm4gaW5mby5yZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWEzMl9mcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZnByZWdzX2dldCwgdGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsCisJCWtidWYsIHVidWYpOworfQorCitzdGF0aWMgaW50IGlhMzJfZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCXVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJcmV0dXJuIGRvX3JlZ3NldF9jYWxsKGRvX2ZwcmVnc19zZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAorCQlrYnVmLCB1YnVmKTsKK30KKworc3RhdGljIGludCBpYTMyX2ZweHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZnB4cmVnc19nZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAorCQlrYnVmLCB1YnVmKTsKK30KKworc3RhdGljIGludCBpYTMyX2ZweHJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQljb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZnB4cmVnc19zZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAorCQlrYnVmLCB1YnVmKTsKK30KKworc3RhdGljIGludCBpYTMyX2dlbnJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpZiAoa2J1ZikgeworCQl1MzIgKmtwID0ga2J1ZjsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJKmtwKysgPSBnZXRyZWcodGFyZ2V0LCBwb3MpOworCQkJcG9zICs9IDQ7CisJCQljb3VudCAtPSA0OworCQl9CisJfSBlbHNlIHsKKwkJdTMyIF9fdXNlciAqdXAgPSB1YnVmOworCQl3aGlsZSAoY291bnQgPiAwKSB7CisJCQlpZiAoX19wdXRfdXNlcihnZXRyZWcodGFyZ2V0LCBwb3MpLCB1cCsrKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXBvcyArPSA0OworCQkJY291bnQgLT0gNDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpYTMyX2dlbnJlZ3Nfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQljb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChrYnVmKSB7CisJCWNvbnN0IHUzMiAqa3AgPSBrYnVmOworCQl3aGlsZSAoIXJldCAmJiBjb3VudCA+IDApIHsKKwkJCXB1dHJlZyh0YXJnZXQsIHBvcywgKmtwKyspOworCQkJcG9zICs9IDQ7CisJCQljb3VudCAtPSA0OworCQl9CisJfSBlbHNlIHsKKwkJY29uc3QgdTMyIF9fdXNlciAqdXAgPSB1YnVmOworCQl1MzIgdmFsOworCQl3aGlsZSAoIXJldCAmJiBjb3VudCA+IDApIHsKKwkJCXJldCA9IF9fZ2V0X3VzZXIodmFsLCB1cCsrKTsKKwkJCWlmICghcmV0KQorCQkJCXB1dHJlZyh0YXJnZXQsIHBvcywgdmFsKTsKKwkJCXBvcyArPSA0OworCQkJY291bnQgLT0gNDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlhMzJfdGxzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQpCit7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmdGFyZ2V0LT50aHJlYWQ7CisJaW50IG4gPSBHRFRfRU5UUllfVExTX0VOVFJJRVM7CisJd2hpbGUgKG4gPiAwICYmIGRlc2NfZW1wdHkoJnQtPnRsc19hcnJheVtuIC0xXSkpCisJCS0tbjsKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBpYTMyX3Rsc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LCB1bnNpZ25lZCBpbnQgcG9zLAorCQl1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWNvbnN0IHN0cnVjdCBkZXNjX3N0cnVjdCAqdGxzOworCisJaWYgKHBvcyA+IEdEVF9FTlRSWV9UTFNfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpIHx8CisJCQkocG9zICUgc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpICE9IDAgfHwKKwkJCShjb3VudCAlIHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcyAvPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKTsKKwljb3VudCAvPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKTsKKworCXRscyA9ICZ0YXJnZXQtPnRocmVhZC50bHNfYXJyYXlbcG9zXTsKKworCWlmIChrYnVmKSB7CisJCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyAqaW5mbyA9IGtidWY7CisJCXdoaWxlIChjb3VudC0tID4gMCkKKwkJCWZpbGxfdXNlcl9kZXNjKGluZm8rKywgR0RUX0VOVFJZX1RMU19NSU4gKyBwb3MrKywKKwkJCQkJdGxzKyspOworCX0gZWxzZSB7CisJCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBfX3VzZXIgKnVfaW5mbyA9IHVidWY7CisJCXdoaWxlIChjb3VudC0tID4gMCkgeworCQkJc3RydWN0IGlhMzJfdXNlcl9kZXNjIGluZm87CisJCQlmaWxsX3VzZXJfZGVzYygmaW5mbywgR0RUX0VOVFJZX1RMU19NSU4gKyBwb3MrKywgdGxzKyspOworCQkJaWYgKF9fY29weV90b191c2VyKHVfaW5mbysrLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlhMzJfdGxzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsIHVuc2lnbmVkIGludCBwb3MsCisJCXVuc2lnbmVkIGludCBjb3VudCwgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJc3RydWN0IGlhMzJfdXNlcl9kZXNjIGluZm9idWZbR0RUX0VOVFJZX1RMU19FTlRSSUVTXTsKKwljb25zdCBzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MgKmluZm87CisKKwlpZiAocG9zID4gR0RUX0VOVFJZX1RMU19FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykgfHwKKwkJCShwb3MgJSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9kZXNjKSkgIT0gMCB8fAorCQkJKGNvdW50ICUgc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGtidWYpCisJCWluZm8gPSBrYnVmOworCWVsc2UgaWYgKF9fY29weV9mcm9tX3VzZXIoaW5mb2J1ZiwgdWJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwllbHNlCisJCWluZm8gPSBpbmZvYnVmOworCisJc2V0X3Rsc19kZXNjKHRhcmdldCwKKwkJR0RUX0VOVFJZX1RMU19NSU4gKyAocG9zIC8gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYykpLAorCQlpbmZvLCBjb3VudCAvIHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBzaG91bGQgbWF0Y2ggYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYzpuYXRpdmVfcmVnc2V0cy4KKyAqIFhYWCBpb3Blcm0/IHZtODY/CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgaWEzMl9yZWdzZXRzW10gPSB7CisJeworCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKKwkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMikvNCwKKwkJLnNpemUgPSA0LCAuYWxpZ24gPSA0LAorCQkuZ2V0ID0gaWEzMl9nZW5yZWdzX2dldCwgLnNldCA9IGlhMzJfZ2VucmVnc19zZXQKKwl9LAorCXsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJGUFJFRywKKwkJLm4gPSBzaXplb2Yoc3RydWN0IGlhMzJfdXNlcl9pMzg3X3N0cnVjdCkgLyA0LAorCQkuc2l6ZSA9IDQsIC5hbGlnbiA9IDQsCisJCS5nZXQgPSBpYTMyX2ZwcmVnc19nZXQsIC5zZXQgPSBpYTMyX2ZwcmVnc19zZXQKKwl9LAorCXsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJYRlBSRUcsCisJCS5uID0gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZnhzcl9zdHJ1Y3QpIC8gNCwKKwkJLnNpemUgPSA0LCAuYWxpZ24gPSA0LAorCQkuZ2V0ID0gaWEzMl9mcHhyZWdzX2dldCwgLnNldCA9IGlhMzJfZnB4cmVnc19zZXQKKwl9LAorCXsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfMzg2X1RMUywKKwkJLm4gPSBHRFRfRU5UUllfVExTX0VOVFJJRVMsCisJCS5iaWFzID0gR0RUX0VOVFJZX1RMU19NSU4sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyksCisJCS5hbGlnbiA9IHNpemVvZihzdHJ1Y3QgaWEzMl91c2VyX2Rlc2MpLAorCQkuYWN0aXZlID0gaWEzMl90bHNfYWN0aXZlLAorCQkuZ2V0ID0gaWEzMl90bHNfZ2V0LCAuc2V0ID0gaWEzMl90bHNfc2V0LAorCX0sCit9OworCitjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyB1c2VyX2lhMzJfdmlldyA9IHsKKwkubmFtZSA9ICJpMzg2IiwgLmVfbWFjaGluZSA9IEVNXzM4NiwKKwkucmVnc2V0cyA9IGlhMzJfcmVnc2V0cywgLm4gPSBBUlJBWV9TSVpFKGlhMzJfcmVnc2V0cykKK307CisKIGxvbmcgc3lzMzJfZmFkdmlzZTY0XzY0KGludCBmZCwgX191MzIgb2Zmc2V0X2xvdywgX191MzIgb2Zmc2V0X2hpZ2gsIAogCQkJX191MzIgbGVuX2xvdywgX191MzIgbGVuX2hpZ2gsIGludCBhZHZpY2UpCiB7IApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMzNlNWE1OS4uMTNmZDEwZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBvYmoteSA6PSBhY3BpLm8gZW50cnkubyBlZmkubyBlZmlfc3R1Yi5vIGdhdGUtZGF0YS5vIGZzeXMubyBpYTY0X2tzeW1zLm8gaXJxLm8gaXJxX2lhNjQubwlcCiAJIGlycV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1vbi5vIHB0cmFjZS5vIHNhbC5vCQlcCi0JIHNhbGluZm8ubyBzZW1hcGhvcmUubyBzZXR1cC5vIHNpZ25hbC5vIHN5c19pYTY0Lm8gdGltZS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8gXAorCSBzYWxpbmZvLm8gc2V0dXAubyBzaWduYWwubyBzeXNfaWE2NC5vIHRpbWUubyB0cmFwcy5vIHVuYWxpZ25lZC5vIFwKIAkgdW53aW5kLm8gbWNhLm8gbWNhX2FzbS5vIHRvcG9sb2d5Lm8KIAogb2JqLSQoQ09ORklHX0lBNjRfQlJMX0VNVSkJKz0gYnJsX2VtdS5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCmluZGV4IDc4ZjI4ZDguLmM3NDY3ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCkBAIC00MjMsNiArNDIzLDcgQEAKICNkZWZpbmUgcHhtX2JpdF9zZXQoYml0KQkoc2V0X2JpdChiaXQsKHZvaWQgKilweG1fZmxhZykpCiAjZGVmaW5lIHB4bV9iaXRfdGVzdChiaXQpCSh0ZXN0X2JpdChiaXQsKHZvaWQgKilweG1fZmxhZykpCiBzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfc2xpdCBfX2luaXRkYXRhICpzbGl0X3RhYmxlOworY3B1bWFza190IGVhcmx5X2NwdV9wb3NzaWJsZV9tYXAgPSBDUFVfTUFTS19OT05FOwogCiBzdGF0aWMgaW50IGdldF9wcm9jZXNzb3JfcHJveGltaXR5X2RvbWFpbihzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSAqcGEpCiB7CkBAIC00ODIsNiArNDgzLDcgQEAKIAkgICAgKHBhLT5hcGljX2lkIDw8IDgpIHwgKHBhLT5sb2NhbF9zYXBpY19laWQpOwogCS8qIG5pZCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBhcyBsb2dpY2FsIG5vZGUgaWQgbGF0ZXIgKi8KIAlub2RlX2NwdWlkW3NyYXRfbnVtX2NwdXNdLm5pZCA9IHB4bTsKKwljcHVfc2V0KHNyYXRfbnVtX2NwdXMsIGVhcmx5X2NwdV9wb3NzaWJsZV9tYXApOwogCXNyYXRfbnVtX2NwdXMrKzsKIH0KIApAQCAtNTU5LDcgKzU2MSw3IEBACiAJfQogCiAJLyogc2V0IGxvZ2ljYWwgbm9kZSBpZCBpbiBjcHUgc3RydWN0dXJlICovCi0JZm9yIChpID0gMDsgaSA8IHNyYXRfbnVtX2NwdXM7IGkrKykKKwlmb3JfZWFjaF9wb3NzaWJsZV9lYXJseV9jcHUoaSkKIAkJbm9kZV9jcHVpZFtpXS5uaWQgPSBweG1fdG9fbm9kZShub2RlX2NwdWlkW2ldLm5pZCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJOdW1iZXIgb2YgbG9naWNhbCBub2RlcyBpbiBzeXN0ZW0gPSAlZFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAwYWViYzZmLi4yMzBhNmY5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC03LDYgKzcsNyBAQAogI2RlZmluZSBBU01fT0ZGU0VUU19DIDEKIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGlkLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KIAogI2luY2x1ZGUgPGFzbS1pYTY0L3Byb2Nlc3Nvci5oPgpAQCAtMzQsMTcgKzM1LDI5IEBACiAJREVGSU5FKFNJR0ZSQU1FX1NJWkUsIHNpemVvZiAoc3RydWN0IHNpZ2ZyYW1lKSk7CiAJREVGSU5FKFVOV19GUkFNRV9JTkZPX1NJWkUsIHNpemVvZiAoc3RydWN0IHVud19mcmFtZV9pbmZvKSk7CiAKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1cGlkKSAhPSAzMik7CisJREVGSU5FKElBNjRfVVBJRF9TSElGVCwgNSk7CisKIAlCTEFOSygpOwogCiAJREVGSU5FKFRJX0ZMQUdTLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZsYWdzKSk7CiAJREVGSU5FKFRJX0NQVSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpKTsKIAlERUZJTkUoVElfUFJFX0NPVU5ULCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpKTsKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCURFRklORShUSV9BQ19TVEFNUCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBhY19zdGFtcCkpOworCURFRklORShUSV9BQ19MRUFWRSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBhY19sZWF2ZSkpOworCURFRklORShUSV9BQ19TVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBhY19zdGltZSkpOworCURFRklORShUSV9BQ19VVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBhY191dGltZSkpOworI2VuZGlmCiAKIAlCTEFOSygpOwogCiAJREVGSU5FKElBNjRfVEFTS19CTE9DS0VEX09GRlNFVCxvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCBibG9ja2VkKSk7CiAJREVGSU5FKElBNjRfVEFTS19DTEVBUl9DSElMRF9USURfT0ZGU0VULG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIGNsZWFyX2NoaWxkX3RpZCkpOwogCURFRklORShJQTY0X1RBU0tfR1JPVVBfTEVBREVSX09GRlNFVCwgb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgZ3JvdXBfbGVhZGVyKSk7CisJREVGSU5FKElBNjRfVEFTS19UR0lETElOS19PRkZTRVQsIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZHNbUElEVFlQRV9QSURdLnBpZCkpOworCURFRklORShJQTY0X1BJRF9MRVZFTF9PRkZTRVQsIG9mZnNldG9mIChzdHJ1Y3QgcGlkLCBsZXZlbCkpOworCURFRklORShJQTY0X1BJRF9VUElEX09GRlNFVCwgb2Zmc2V0b2YgKHN0cnVjdCBwaWQsIG51bWJlcnNbMF0pKTsKIAlERUZJTkUoSUE2NF9UQVNLX1BFTkRJTkdfT0ZGU0VULG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBlbmRpbmcpKTsKIAlERUZJTkUoSUE2NF9UQVNLX1BJRF9PRkZTRVQsIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZCkpOwogCURFRklORShJQTY0X1RBU0tfUkVBTF9QQVJFTlRfT0ZGU0VULCBvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCByZWFsX3BhcmVudCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaC5jCmluZGV4IGYxY2YyZGYuLjkwZWYzMzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoLmMKQEAgLTI0LDYgKzI0LDcgQEAKIHN0YXRpYyBhdG9taWNfdCBrZHVtcF9jcHVfZnJvemVuOwogYXRvbWljX3Qga2R1bXBfaW5fcHJvZ3Jlc3M7CiBzdGF0aWMgaW50IGtkdW1wX29uX2luaXQgPSAxOworc3RhdGljIGludCBrZHVtcF9vbl9mYXRhbF9tY2EgPSAxOwogCiBzdGF0aWMgaW5saW5lIEVsZjY0X1dvcmQKICphcHBlbmRfZWxmX25vdGUoRWxmNjRfV29yZCAqYnVmLCBjaGFyICpuYW1lLCB1bnNpZ25lZCB0eXBlLCB2b2lkICpkYXRhLApAQCAtMTE4LDYgKzExOSw3IEBACiBzdGF0aWMgdm9pZAogbWFjaGluZV9rZHVtcF9vbl9pbml0KHZvaWQpCiB7CisJY3Jhc2hfc2F2ZV92bWNvcmVpbmZvKCk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlrZXhlY19kaXNhYmxlX2lvc2FwaWMoKTsKIAltYWNoaW5lX2tleGVjKGlhNjRfa2ltYWdlKTsKQEAgLTE0OCwxNCArMTUwLDE0IEBACiAJc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgKm5kOwogCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IGRhdGE7CiAKLQlpZiAoIWtkdW1wX29uX2luaXQpCisJaWYgKCFrZHVtcF9vbl9pbml0ICYmICFrZHVtcF9vbl9mYXRhbF9tY2EpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmICghaWE2NF9raW1hZ2UpIHsKIAkJaWYgKHZhbCA9PSBESUVfSU5JVF9NT05BUkNIX0xFQVZFKQogCQkJaWE2NF9tY2FfcHJpbnRrKEtFUk5fTk9USUNFCiAJCQkJCSIlczoga2R1bXAgbm90IGNvbmZpZ3VyZWRcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCX0KIApAQCAtMTczLDMyICsxNzUsMzggQEAKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoICh2YWwpIHsKLQkJY2FzZSBESUVfSU5JVF9NT05BUkNIX1BST0NFU1M6CisJY2FzZSBESUVfSU5JVF9NT05BUkNIX1BST0NFU1M6CisJCWlmIChrZHVtcF9vbl9pbml0KSB7CiAJCQlhdG9taWNfc2V0KCZrZHVtcF9pbl9wcm9ncmVzcywgMSk7CiAJCQkqKG5kLT5tb25hcmNoX2NwdSkgPSAtMTsKLQkJCWJyZWFrOwotCQljYXNlIERJRV9JTklUX01PTkFSQ0hfTEVBVkU6CisJCX0KKwkJYnJlYWs7CisJY2FzZSBESUVfSU5JVF9NT05BUkNIX0xFQVZFOgorCQlpZiAoa2R1bXBfb25faW5pdCkKIAkJCW1hY2hpbmVfa2R1bXBfb25faW5pdCgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRElFX0lOSVRfU0xBVkVfTEVBVkU6Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmtkdW1wX2luX3Byb2dyZXNzKSkKLQkJCQl1bndfaW5pdF9ydW5uaW5nKGtkdW1wX2NwdV9mcmVlemUsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRElFX01DQV9SRU5EWlZPVVNfTEVBVkU6Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmtkdW1wX2luX3Byb2dyZXNzKSkKLQkJCQl1bndfaW5pdF9ydW5uaW5nKGtkdW1wX2NwdV9mcmVlemUsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRElFX01DQV9NT05BUkNIX0xFQVZFOgotCQkgICAgIC8qIGRpZV9yZWdpc3Rlci0+c2lnbnIgaW5kaWNhdGUgaWYgTUNBIGlzIHJlY292ZXJhYmxlICovCi0JCQlpZiAoIWFyZ3MtPnNpZ25yKQotCQkJCW1hY2hpbmVfa2R1bXBfb25faW5pdCgpOwotCQkJYnJlYWs7CisJCWJyZWFrOworCWNhc2UgRElFX0lOSVRfU0xBVkVfTEVBVkU6CisJCWlmIChhdG9taWNfcmVhZCgma2R1bXBfaW5fcHJvZ3Jlc3MpKQorCQkJdW53X2luaXRfcnVubmluZyhrZHVtcF9jcHVfZnJlZXplLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBESUVfTUNBX1JFTkRaVk9VU19MRUFWRToKKwkJaWYgKGF0b21pY19yZWFkKCZrZHVtcF9pbl9wcm9ncmVzcykpCisJCQl1bndfaW5pdF9ydW5uaW5nKGtkdW1wX2NwdV9mcmVlemUsIE5VTEwpOworCQlicmVhazsKKwljYXNlIERJRV9NQ0FfTU9OQVJDSF9MRUFWRToKKwkJLyogZGllX3JlZ2lzdGVyLT5zaWduciBpbmRpY2F0ZSBpZiBNQ0EgaXMgcmVjb3ZlcmFibGUgKi8KKwkJaWYgKGtkdW1wX29uX2ZhdGFsX21jYSAmJiAhYXJncy0+c2lnbnIpIHsKKwkJCWF0b21pY19zZXQoJmtkdW1wX2luX3Byb2dyZXNzLCAxKTsKKwkJCSoobmQtPm1vbmFyY2hfY3B1KSA9IC0xOworCQkJbWFjaGluZV9rZHVtcF9vbl9pbml0KCk7CisJCX0KKwkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyBjdGxfdGFibGUga2R1bXBfb25faW5pdF90YWJsZVtdID0geworc3RhdGljIGN0bF90YWJsZSBrZHVtcF9jdGxfdGFibGVbXSA9IHsKIAl7CiAJCS5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUgPSAia2R1bXBfb25faW5pdCIsCkBAIC0yMDcsNiArMjE1LDE0IEBACiAJCS5tb2RlID0gMDY0NCwKIAkJLnByb2NfaGFuZGxlciA9ICZwcm9jX2RvaW50dmVjLAogCX0sCisJeworCQkuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lID0gImtkdW1wX29uX2ZhdGFsX21jYSIsCisJCS5kYXRhID0gJmtkdW1wX29uX2ZhdGFsX21jYSwKKwkJLm1heGxlbiA9IHNpemVvZihpbnQpLAorCQkubW9kZSA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgPSAmcHJvY19kb2ludHZlYywKKwl9LAogCXsgLmN0bF9uYW1lID0gMCB9CiB9OwogCkBAIC0yMTUsNyArMjMxLDcgQEAKIAkgIC5jdGxfbmFtZSA9IENUTF9LRVJOLAogCSAgLnByb2NuYW1lID0gImtlcm5lbCIsCiAJICAubW9kZSA9IDA1NTUsCi0JICAuY2hpbGQgPSBrZHVtcF9vbl9pbml0X3RhYmxlLAorCSAgLmNoaWxkID0ga2R1bXBfY3RsX3RhYmxlLAogCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwppbmRleCA5MTkwNzBhLi5kNDVmMjE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbWNhLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKICNkZWZpbmUgRUZJX0RFQlVHCTAKIApAQCAtMzc5LDggKzM4MCw4IEBACiAJCSAqIGEgZGVkaWNhdGVkIElUUiBmb3IgdGhlIFBBTCBjb2RlLgogCQkgKi8KIAkJaWYgKCh2YWRkciAmIG1hc2spID09IChLRVJORUxfU1RBUlQgJiBtYXNrKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIG5lZWQgdG8gaW5zdGFsbCBJVFIgZm9yICIKLQkJCSAgICAgICAiUEFMIGNvZGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gbmVlZCB0byBpbnN0YWxsIElUUiBmb3IgUEFMIGNvZGVcbiIsCisJCQkgICAgICAgX19mdW5jX18pOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMzk5LDEwICs0MDAsNDUgQEAKIAkJcmV0dXJuIF9fdmEobWQtPnBoeXNfYWRkcik7CiAJfQogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyBQQUwtY29kZSBtZW1vcnktZGVzY3JpcHRvciBmb3VuZFxuIiwKLQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkgICAgICAgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQogCisKK3N0YXRpYyB1OCBfX2luaXQgcGFsb19jaGVja3N1bSh1OCAqYnVmZmVyLCB1MzIgbGVuZ3RoKQoreworCXU4IHN1bSA9IDA7CisJdTggKmVuZCA9IGJ1ZmZlciArIGxlbmd0aDsKKworCXdoaWxlIChidWZmZXIgPCBlbmQpCisJCXN1bSA9ICh1OCkgKHN1bSArICooYnVmZmVyKyspKTsKKworCXJldHVybiBzdW07Cit9CisKKy8qCisgKiBQYXJzZSBhbmQgaGFuZGxlIFBBTE8gdGFibGUgd2hpY2ggaXMgcHVibGlzaGVkIGF0OgorICogaHR0cDovL3d3dy5kaWc2NC5vcmcvaG9tZS9ESUc2NF9QQUxPX1IxXzAucGRmCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBoYW5kbGVfcGFsbyh1bnNpZ25lZCBsb25nIHBhbG9fcGh5cykKK3sKKwlzdHJ1Y3QgcGFsb190YWJsZSAqcGFsbyA9IF9fdmEocGFsb19waHlzKTsKKwl1OCAgY2hlY2tzdW07CisKKwlpZiAoc3RybmNtcChwYWxvLT5zaWduYXR1cmUsIFBBTE9fU0lHLCBzaXplb2YoUEFMT19TSUcpIC0gMSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUEFMTyBzaWduYXR1cmUgaW5jb3JyZWN0LlxuIik7CisJCXJldHVybjsKKwl9CisKKwljaGVja3N1bSA9IHBhbG9fY2hlY2tzdW0oKHU4ICopcGFsbywgcGFsby0+bGVuZ3RoKTsKKwlpZiAoY2hlY2tzdW0pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUEFMTyBjaGVja3N1bSBpbmNvcnJlY3QuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNldHVwX3B0Y2dfc2VtKHBhbG8tPm1heF90bGJfcHVyZ2VzLCBOUFRDR19GUk9NX1BBTE8pOworfQorCiB2b2lkCiBlZmlfbWFwX3BhbF9jb2RlICh2b2lkKQogewpAQCAtNDMyLDYgKzQ2OCw3IEBACiAJdTY0IGVmaV9kZXNjX3NpemU7CiAJY2hhciAqY3AsIHZlbmRvclsxMDBdID0gInVua25vd24iOwogCWludCBpOworCXVuc2lnbmVkIGxvbmcgcGFsb19waHlzOwogCiAJLyoKIAkgKiBJdCdzIHRvbyBlYXJseSB0byBiZSBhYmxlIHRvIHVzZSB0aGUgc3RhbmRhcmQga2VybmVsIGNvbW1hbmQgbGluZQpAQCAtNDk2LDYgKzUzMyw4IEBACiAJZWZpLmhjZHAgICAgICAgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSOwogCWVmaS51Z2EgICAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKIAorCXBhbG9fcGh5cyAgICAgID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKKwogCWZvciAoaSA9IDA7IGkgPCAoaW50KSBlZmkuc3lzdGFiLT5ucl90YWJsZXM7IGkrKykgewogCQlpZiAoZWZpX2d1aWRjbXAoY29uZmlnX3RhYmxlc1tpXS5ndWlkLCBNUFNfVEFCTEVfR1VJRCkgPT0gMCkgewogCQkJZWZpLm1wcyA9IGNvbmZpZ190YWJsZXNbaV0udGFibGU7CkBAIC01MTUsMTAgKzU1NCwxNyBAQAogCQl9IGVsc2UgaWYgKGVmaV9ndWlkY21wKGNvbmZpZ190YWJsZXNbaV0uZ3VpZCwgSENEUF9UQUJMRV9HVUlEKSA9PSAwKSB7CiAJCQllZmkuaGNkcCA9IGNvbmZpZ190YWJsZXNbaV0udGFibGU7CiAJCQlwcmludGsoIiBIQ0RQPTB4JWx4IiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CisJCX0gZWxzZSBpZiAoZWZpX2d1aWRjbXAoY29uZmlnX3RhYmxlc1tpXS5ndWlkLAorCQkJIFBST0NFU1NPUl9BQlNUUkFDVElPTl9MQVlFUl9PVkVSV1JJVEVfR1VJRCkgPT0gMCkgeworCQkJcGFsb19waHlzID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKKwkJCXByaW50aygiIFBBTE89MHglbHgiLCBjb25maWdfdGFibGVzW2ldLnRhYmxlKTsKIAkJfQogCX0KIAlwcmludGsoIlxuIik7CiAKKwlpZiAocGFsb19waHlzICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCisJCWhhbmRsZV9wYWxvKHBhbG9fcGh5cyk7CisKIAlydW50aW1lID0gX192YShlZmkuc3lzdGFiLT5ydW50aW1lKTsKIAllZmkuZ2V0X3RpbWUgPSBwaHlzX2dldF90aW1lOwogCWVmaS5zZXRfdGltZSA9IHBoeXNfc2V0X3RpbWU7CkBAIC01NDMsMTIgKzU4OSwzMCBAQAogCQlmb3IgKGkgPSAwLCBwID0gZWZpX21hcF9zdGFydDsgcCA8IGVmaV9tYXBfZW5kOwogCQkgICAgICsraSwgcCArPSBlZmlfZGVzY19zaXplKQogCQl7CisJCQljb25zdCBjaGFyICp1bml0OworCQkJdW5zaWduZWQgbG9uZyBzaXplOworCiAJCQltZCA9IHA7Ci0JCQlwcmludGsoIm1lbSUwMnU6IHR5cGU9JXUsIGF0dHI9MHglbHgsICIKLQkJCSAgICAgICAicmFuZ2U9WzB4JTAxNmx4LTB4JTAxNmx4KSAoJWx1TUIpXG4iLAorCQkJc2l6ZSA9IG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQ7CisKKwkJCWlmICgoc2l6ZSA+PiA0MCkgPiAwKSB7CisJCQkJc2l6ZSA+Pj0gNDA7CisJCQkJdW5pdCA9ICJUQiI7CisJCQl9IGVsc2UgaWYgKChzaXplID4+IDMwKSA+IDApIHsKKwkJCQlzaXplID4+PSAzMDsKKwkJCQl1bml0ID0gIkdCIjsKKwkJCX0gZWxzZSBpZiAoKHNpemUgPj4gMjApID4gMCkgeworCQkJCXNpemUgPj49IDIwOworCQkJCXVuaXQgPSAiTUIiOworCQkJfSBlbHNlIHsKKwkJCQlzaXplID4+PSAxMDsKKwkJCQl1bml0ID0gIktCIjsKKwkJCX0KKworCQkJcHJpbnRrKCJtZW0lMDJkOiB0eXBlPSUydSwgYXR0cj0weCUwMTZseCwgIgorCQkJICAgICAgICJyYW5nZT1bMHglMDE2bHgtMHglMDE2bHgpICglNGx1JXMpXG4iLAogCQkJICAgICAgIGksIG1kLT50eXBlLCBtZC0+YXR0cmlidXRlLCBtZC0+cGh5c19hZGRyLAotCQkJICAgICAgIG1kLT5waHlzX2FkZHIgKyBlZmlfbWRfc2l6ZShtZCksCi0JCQkgICAgICAgbWQtPm51bV9wYWdlcyA+PiAoMjAgLSBFRklfUEFHRV9TSElGVCkpOworCQkJICAgICAgIG1kLT5waHlzX2FkZHIgKyBlZmlfbWRfc2l6ZShtZCksIHNpemUsIHVuaXQpOwogCQl9CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggM2MzMzFjNC4uYjBiZTRhMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtNzEwLDYgKzcxMCwxNiBAQAogKHBVU3RrKQljbXAuZXEudW5jIHA2LHAwPXIwLHIwCQkvLyBwNiA8LSBwVVN0awogI2VuZGlmCiAud29ya19wcm9jZXNzZWRfc3lzY2FsbDoKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCWFkZHMgcjI9UFQoTE9BRFJTKSsxNixyMTIKKyhwVVN0aykJbW92Lm0gcjIyPWFyLml0YwkJCS8vIGZldGNoIHRpbWUgYXQgbGVhdmUKKwlhZGRzIHIxOD1USV9GTEFHUytJQTY0X1RBU0tfU0laRSxyMTMKKwk7OworKHA2KQlsZDQgcjMxPVtyMThdCQkJCS8vIGxvYWQgY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncworCWxkOCByMTk9W3IyXSxQVChCNiktUFQoTE9BRFJTKQkJLy8gbG9hZCBhci5yc2MgdmFsdWUgZm9yICJsb2FkcnMiCisJYWRkcyByMz1QVChBUl9CU1BTVE9SRSkrMTYscjEyCQkvLyBkZWZlcnJlZAorCTs7CisjZWxzZQogCWFkZHMgcjI9UFQoTE9BRFJTKSsxNixyMTIKIAlhZGRzIHIzPVBUKEFSX0JTUFNUT1JFKSsxNixyMTIKIAlhZGRzIHIxOD1USV9GTEFHUytJQTY0X1RBU0tfU0laRSxyMTMKQEAgLTcxOCw2ICs3MjgsNyBAQAogCWxkOCByMTk9W3IyXSxQVChCNiktUFQoTE9BRFJTKQkJLy8gbG9hZCBhci5yc2MgdmFsdWUgZm9yICJsb2FkcnMiCiAJbm9wLmkgMAogCTs7CisjZW5kaWYKIAltb3YgcjE2PWFyLmJzcAkJCQkvLyBNMiAgZ2V0IGV4aXN0aW5nIGJhY2tpbmcgc3RvcmUgcG9pbnRlcgogCWxkOCByMTg9W3IyXSxQVChSOSktUFQoQjYpCQkvLyBsb2FkIGI2CiAocDYpCWFuZCByMTU9VElGX1dPUktfTUFTSyxyMzEJCS8vIGFueSB3b3JrIG90aGVyIHRoYW4gVElGX1NZU0NBTExfVFJBQ0U/CkBAIC03MzcsMTIgKzc0OCwyMSBAQAogCiAJbGQ4IHIyOT1bcjJdLDE2CQkvLyBNMHwxIGxvYWQgY3IuaXBzcgogCWxkOCByMjg9W3IzXSwxNgkJLy8gTTB8MSBsb2FkIGNyLmlpcAorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisocFVTdGspIGFkZCByMTQ9VElfQUNfTEVBVkUrSUE2NF9UQVNLX1NJWkUscjEzCisJOzsKKwlsZDggcjMwPVtyMl0sMTYJCS8vIE0wfDEgbG9hZCBjci5pZnMKKwlsZDggcjI1PVtyM10sMTYJCS8vIE0wfDEgbG9hZCBhci51bmF0CisocFVTdGspIGFkZCByMTU9SUE2NF9UQVNLX1RIUkVBRF9PTl9VU1RBQ0tfT0ZGU0VULHIxMworCTs7CisjZWxzZQogCW1vdiByMjI9cjAJCS8vIEEgICAgY2xlYXIgcjIyCiAJOzsKIAlsZDggcjMwPVtyMl0sMTYJCS8vIE0wfDEgbG9hZCBjci5pZnMKIAlsZDggcjI1PVtyM10sMTYJCS8vIE0wfDEgbG9hZCBhci51bmF0CiAocFVTdGspIGFkZCByMTQ9SUE2NF9UQVNLX1RIUkVBRF9PTl9VU1RBQ0tfT0ZGU0VULHIxMwogCTs7CisjZW5kaWYKIAlsZDggcjI2PVtyMl0sUFQoQjApLVBUKEFSX1BGUykJLy8gTTB8MSBsb2FkIGFyLnBmcwogKHBLU3RrKQltb3YgcjIyPXBzcgkJCS8vIE0yICAgcmVhZCBQU1Igbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKIAlub3AgMApAQCAtNzU5LDcgKzc3OSwxMSBAQAogCWxkOC5maWxsIHIxPVtyM10sMTYJCQkvLyBNMHwxIGxvYWQgcjEKIChwVVN0aykgbW92IHIxNz0xCQkJCS8vIEEKIAk7OworI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisocFVTdGspIHN0MSBbcjE1XT1yMTcJCQkJLy8gTTJ8MworI2Vsc2UKIChwVVN0aykgc3QxIFtyMTRdPXIxNwkJCQkvLyBNMnwzCisjZW5kaWYKIAlsZDguZmlsbCByMTM9W3IzXSwxNgkJCS8vIE0wfDEKIAltb3YgZjg9ZjAJCQkJLy8gRiAgICBjbGVhciBmOAogCTs7CkBAIC03NzUsMTIgKzc5OSwyMiBAQAogCXNoci51IHIxOD1yMTksMTYJCS8vIEkwfDEgZ2V0IGJ5dGUgc2l6ZSBvZiBleGlzdGluZyAiZGlydHkiIHBhcnRpdGlvbgogCWNvdmVyCQkJCS8vIEIgICAgYWRkIGN1cnJlbnQgZnJhbWUgaW50byBkaXJ0eSBwYXJ0aXRpb24gJiBzZXQgY3IuaWZzCiAJOzsKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCW1vdiByMTk9YXIuYnNwCQkJLy8gTTIgICBnZXQgbmV3IGJhY2tpbmcgc3RvcmUgcG9pbnRlcgorCXN0OCBbcjE0XT1yMjIJCQkvLyBNCXNhdmUgdGltZSBhdCBsZWF2ZQorCW1vdiBmMTA9ZjAJCQkvLyBGICAgIGNsZWFyIGYxMAorCisJbW92IHIyMj1yMAkJCS8vIEEJY2xlYXIgcjIyCisJbW92bCByMTQ9X19rZXJuZWxfc3lzY2FsbF92aWFfZXBjIC8vIFgKKwk7OworI2Vsc2UKIAltb3YgcjE5PWFyLmJzcAkJCS8vIE0yICAgZ2V0IG5ldyBiYWNraW5nIHN0b3JlIHBvaW50ZXIKIAltb3YgZjEwPWYwCQkJLy8gRiAgICBjbGVhciBmMTAKIAogCW5vcC5tIDAKIAltb3ZsIHIxND1fX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMgLy8gWAogCTs7CisjZW5kaWYKIAltb3YubSBhci5jc2Q9cjAJCQkvLyBNMiAgIGNsZWFyIGFyLmNzZAogCW1vdi5tIGFyLmNjdj1yMAkJCS8vIE0yICAgY2xlYXIgYXIuY2N2CiAJbW92IGI3PXIxNAkJCS8vIEkwICAgY2xlYXIgYjcgKGhpbnQgd2l0aCBfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMpCkBAIC05MTMsMTAgKzk0NywxOCBAQAogCWFkZHMgcjE2PVBUKENSX0lQU1IpKzE2LHIxMgogCWFkZHMgcjE3PVBUKENSX0lJUCkrMTYscjEyCiAKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCS5wcmVkLnJlbC5tdXRleCBwVVN0ayxwS1N0aworKHBLU3RrKQltb3YgcjIyPXBzcgkJLy8gTTIgcmVhZCBQU1Igbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKyhwVVN0aykJbW92Lm0gcjIyPWFyLml0YwkvLyBNICBmZXRjaCB0aW1lIGF0IGxlYXZlCisJbm9wLmkgMAorCTs7CisjZWxzZQogKHBLU3RrKQltb3YgcjIyPXBzcgkJLy8gTTIgcmVhZCBQU1Igbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKIAlub3AuaSAwCiAJbm9wLmkgMAogCTs7CisjZW5kaWYKIAlsZDggcjI5PVtyMTZdLDE2CS8vIGxvYWQgY3IuaXBzcgogCWxkOCByMjg9W3IxN10sMTYJLy8gbG9hZCBjci5paXAKIAk7OwpAQCAtOTM4LDE1ICs5ODAsMzcgQEAKIAk7OwogCWxkOC5maWxsIHIxMj1bcjE2XSwxNgogCWxkOC5maWxsIHIxMz1bcjE3XSwxNgorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisocFVTdGspCWFkZHMgcjM9VElfQUNfTEVBVkUrSUE2NF9UQVNLX1NJWkUscjE4CisjZWxzZQogKHBVU3RrKQlhZGRzIHIxOD1JQTY0X1RBU0tfVEhSRUFEX09OX1VTVEFDS19PRkZTRVQscjE4CisjZW5kaWYKIAk7OwogCWxkOCByMjA9W3IxNl0sMTYJLy8gYXIuZnBzcgogCWxkOC5maWxsIHIxNT1bcjE3XSwxNgorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisocFVTdGspCWFkZHMgcjE4PUlBNjRfVEFTS19USFJFQURfT05fVVNUQUNLX09GRlNFVCxyMTgJLy8gZGVmZXJyZWQKKyNlbmRpZgogCTs7CiAJbGQ4LmZpbGwgcjE0PVtyMTZdLDE2CiAJbGQ4LmZpbGwgcjI9W3IxN10KIChwVVN0aykJbW92IHIxNz0xCiAJOzsKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCS8vICBtbWlfIDogIGxkOCBzdDEgc2hyOzsgICAgICAgICBtbWlfIDogc3Q4IHN0MSBzaHI7OworCS8vICBtaWIgIDogIG1vdiBhZGQgYnIgICAgICAgIC0+ICBtaWIgIDogbGQ4IGFkZCBicgorCS8vICBiYmJfIDogIGJyICBub3AgY292ZXI7OyAgICAgICBtYmJfIDogbW92IGJyICBjb3Zlcjs7CisJLy8KKwkvLyAgbm8gb25lIHJlcXVpcmUgYnNwIGluIHIxNiBpZiAocEtTdGspIGJyYW5jaCBpcyBzZWxlY3RlZC4KKyhwVVN0aykJc3Q4IFtyM109cjIyCQkvLyBzYXZlIHRpbWUgYXQgbGVhdmUKKyhwVVN0aykJc3QxIFtyMThdPXIxNwkJLy8gcmVzdG9yZSBjdXJyZW50LT50aHJlYWQub25fdXN0YWNrCisJc2hyLnUgcjE4PXIxOSwxNgkvLyBnZXQgYnl0ZSBzaXplIG9mIGV4aXN0aW5nICJkaXJ0eSIgcGFydGl0aW9uCisJOzsKKwlsZDguZmlsbCByMz1bcjE2XQkvLyBkZWZlcnJlZAorCUxPQURfUEhZU19TVEFDS19SRUdfU0laRShyMTcpCisocEtTdGspCWJyLmNvbmQuZHBudCBza2lwX3Jic19zd2l0Y2gKKwltb3YgcjE2PWFyLmJzcAkJLy8gZ2V0IGV4aXN0aW5nIGJhY2tpbmcgc3RvcmUgcG9pbnRlcgorI2Vsc2UKIAlsZDguZmlsbCByMz1bcjE2XQogKHBVU3RrKQlzdDEgW3IxOF09cjE3CQkvLyByZXN0b3JlIGN1cnJlbnQtPnRocmVhZC5vbl91c3RhY2sKIAlzaHIudSByMTg9cjE5LDE2CS8vIGdldCBieXRlIHNpemUgb2YgZXhpc3RpbmcgImRpcnR5IiBwYXJ0aXRpb24KQEAgLTk1NCw2ICsxMDE4LDcgQEAKIAltb3YgcjE2PWFyLmJzcAkJLy8gZ2V0IGV4aXN0aW5nIGJhY2tpbmcgc3RvcmUgcG9pbnRlcgogCUxPQURfUEhZU19TVEFDS19SRUdfU0laRShyMTcpCiAocEtTdGspCWJyLmNvbmQuZHBudCBza2lwX3Jic19zd2l0Y2gKKyNlbmRpZgogCiAJLyoKIAkgKiBSZXN0b3JlIHVzZXIgYmFja2luZyBzdG9yZS4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZnN5cy5TIGIvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMKaW5kZXggNDQ4NDE5Ny4uYzE2MjVjNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMKQEAgLTYxLDEzICs2MSwyOSBAQAogCS5wcm9sb2d1ZQogCS5hbHRycCBiNgogCS5ib2R5CisJYWRkIHIxNz1JQTY0X1RBU0tfR1JPVVBfTEVBREVSX09GRlNFVCxyMTYKKwk7OworCWxkOCByMTc9W3IxN10JCQkJLy8gcjE3ID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyCiAJYWRkIHI5PVRJX0ZMQUdTK0lBNjRfVEFTS19TSVpFLHIxNgogCTs7CiAJbGQ0IHI5PVtyOV0KLQlhZGQgcjg9SUE2NF9UQVNLX1RHSURfT0ZGU0VULHIxNgorCWFkZCByMTc9SUE2NF9UQVNLX1RHSURMSU5LX09GRlNFVCxyMTcKIAk7OwogCWFuZCByOT1USUZfQUxMV09SS19NQVNLLHI5Ci0JbGQ0IHI4PVtyOF0JCQkJLy8gcjggPSBjdXJyZW50LT50Z2lkCisJbGQ4IHIxNz1bcjE3XQkJCQkvLyByMTcgPSBjdXJyZW50LT5ncm91cF9sZWFkZXItPnBpZHNbUElEVFlQRV9QSURdLnBpZAorCTs7CisJYWRkIHI4PUlBNjRfUElEX0xFVkVMX09GRlNFVCxyMTcKKwk7OworCWxkNCByOD1bcjhdCQkJCS8vIHI4ID0gcGlkLT5sZXZlbAorCWFkZCByMTc9SUE2NF9QSURfVVBJRF9PRkZTRVQscjE3CS8vIHIxNyA9ICZwaWQtPm51bWJlcnNbMF0KKwk7OworCXNobCByOD1yOCxJQTY0X1VQSURfU0hJRlQKKwk7OworCWFkZCByMTc9cjE3LHI4CQkJCS8vIHIxNyA9ICZwaWQtPm51bWJlcnNbcGlkLT5sZXZlbF0KKwk7OworCWxkNCByOD1bcjE3XQkJCQkvLyByOCA9IHBpZC0+bnVtYmVyc1twaWQtPmxldmVsXS5ucgorCTs7CisJbW92IHIxNz0wCiAJOzsKIAljbXAubmUgcDgscDA9MCxyOQogKHA4KQlici5zcG50Lm1hbnkgZnN5c19mYWxsYmFja19zeXNjYWxsCkBAIC0xMjYsMTUgKzE0MiwyNSBAQAogCS5hbHRycCBiNgogCS5ib2R5CiAJYWRkIHI5PVRJX0ZMQUdTK0lBNjRfVEFTS19TSVpFLHIxNgorCWFkZCByMTc9SUE2NF9UQVNLX1RHSURMSU5LX09GRlNFVCxyMTYKIAk7OwogCWxkNCByOT1bcjldCiAJdG5hdC56IHA2LHA3PXIzMgkJLy8gY2hlY2sgYXJndW1lbnQgcmVnaXN0ZXIgZm9yIGJlaW5nIE5hVAorCWxkOCByMTc9W3IxN10JCQkJLy8gcjE3ID0gY3VycmVudC0+cGlkc1tQSURUWVBFX1BJRF0ucGlkCiAJOzsKIAlhbmQgcjk9VElGX0FMTFdPUktfTUFTSyxyOQotCWFkZCByOD1JQTY0X1RBU0tfUElEX09GRlNFVCxyMTYKKwlhZGQgcjg9SUE2NF9QSURfTEVWRUxfT0ZGU0VULHIxNwogCWFkZCByMTg9SUE2NF9UQVNLX0NMRUFSX0NISUxEX1RJRF9PRkZTRVQscjE2CiAJOzsKLQlsZDQgcjg9W3I4XQorCWxkNCByOD1bcjhdCQkJCS8vIHI4ID0gcGlkLT5sZXZlbAorCWFkZCByMTc9SUE2NF9QSURfVVBJRF9PRkZTRVQscjE3CS8vIHIxNyA9ICZwaWQtPm51bWJlcnNbMF0KKwk7OworCXNobCByOD1yOCxJQTY0X1VQSURfU0hJRlQKKwk7OworCWFkZCByMTc9cjE3LHI4CQkJCS8vIHIxNyA9ICZwaWQtPm51bWJlcnNbcGlkLT5sZXZlbF0KKwk7OworCWxkNCByOD1bcjE3XQkJCQkvLyByOCA9IHBpZC0+bnVtYmVyc1twaWQtPmxldmVsXS5ucgorCTs7CiAJY21wLm5lIHA4LHAwPTAscjkKIAltb3YgcjE3PS0xCiAJOzsKQEAgLTIxMCwyNyArMjM2LDI1IEBACiAJLy8gTm90ZSB0aGF0IGluc3RydWN0aW9ucyBhcmUgb3B0aW1pemVkIGZvciBNY0tpbmxleS4gTWNLaW5sZXkgY2FuCiAJLy8gcHJvY2VzcyB0d28gYnVuZGxlcyBzaW11bHRhbmVvdXNseSBhbmQgdGhlcmVmb3JlIHdlIGNvbnRpbnVvdXNseQogCS8vIHRyeSB0byBmZWVkIHRoZSBDUFUgdHdvIGJ1bmRsZXMgYW5kIHRoZW4gYSBzdG9wLgotCS8vCi0JLy8gQWRkaXRpb25hbCBub3RlIHRoYXQgY29kZSBoYXMgY2hhbmdlZCBhIGxvdC4gT3B0aW1pemF0aW9uIGlzIFRCRC4KLQkvLyBDb21tZW50cyBiZWdpbiB3aXRoICI/IiBhcmUgbWF5YmUgb3V0ZGF0ZWQuCi0JdG5hdC5ueiBwNixwMCA9IHIzMQkvLyA/IGJyYW5jaCBkZWZlcnJlZCB0byBmaXQgbGF0ZXIgYnVuZGxlCi0JbW92IHByID0gcjMwLDB4YzAwMAkvLyBTZXQgcHJlZGljYXRlcyBhY2NvcmRpbmcgdG8gZnVuY3Rpb24KKwogCWFkZCByMiA9IFRJX0ZMQUdTK0lBNjRfVEFTS19TSVpFLHIxNgorCXRuYXQubnogcDYscDAgPSByMzEJCS8vIGd1YXJkIGFnYWluc3QgTmF0IGFyZ3VtZW50CisocDYpCWJyLmNvbmQuc3BudC5mZXcgLmZhaWxfZWludmFsCiAJbW92bCByMjAgPSBmc3lzY2FsbF9ndG9kX2RhdGEgLy8gbG9hZCBmc3lzY2FsbCBnZXR0aW1lb2ZkYXkgZGF0YSBhZGRyZXNzCiAJOzsKKwlsZDQgcjIgPSBbcjJdCQkJLy8gcHJvY2VzcyB3b3JrIHBlbmRpbmcgZmxhZ3MKIAltb3ZsIHIyOSA9IGl0Y19qaXR0ZXJfZGF0YQkvLyBpdGNfaml0dGVyCiAJYWRkIHIyMiA9IElBNjRfR1RPRF9XQUxMX1RJTUVfT0ZGU0VULHIyMAkvLyB3YWxsX3RpbWUKLQlsZDQgcjIgPSBbcjJdCQkvLyBwcm9jZXNzIHdvcmsgcGVuZGluZyBmbGFncwotCTs7Ci0ocDE1KQlhZGQgcjIyID0gSUE2NF9HVE9EX01PTk9fVElNRV9PRkZTRVQscjIwCS8vIG1vbm90b25pY190aW1lCiAJYWRkIHIyMSA9IElBNjRfQ0xLU1JDX01NSU9fT0ZGU0VULHIyMAotCWFkZCByMTkgPSBJQTY0X0lUQ19MQVNUQ1lDTEVfT0ZGU0VULHIyOQotCWFuZCByMiA9IFRJRl9BTExXT1JLX01BU0sscjIKLShwNikgICAgYnIuY29uZC5zcG50LmZldyAuZmFpbF9laW52YWwJLy8gPyBkZWZlcnJlZCBicmFuY2gKKwltb3YgcHIgPSByMzAsMHhjMDAwCS8vIFNldCBwcmVkaWNhdGVzIGFjY29yZGluZyB0byBmdW5jdGlvbgogCTs7Ci0JYWRkIHIyNiA9IElBNjRfQ0xLU1JDX0NZQ0xFX0xBU1RfT0ZGU0VULHIyMCAvLyBjbGtzcmNfY3ljbGVfbGFzdAorCWFuZCByMiA9IFRJRl9BTExXT1JLX01BU0sscjIKKwlhZGQgcjE5ID0gSUE2NF9JVENfTEFTVENZQ0xFX09GRlNFVCxyMjkKKyhwMTUpCWFkZCByMjIgPSBJQTY0X0dUT0RfTU9OT19USU1FX09GRlNFVCxyMjAJLy8gbW9ub3RvbmljX3RpbWUKKwk7OworCWFkZCByMjYgPSBJQTY0X0NMS1NSQ19DWUNMRV9MQVNUX09GRlNFVCxyMjAJLy8gY2xrc3JjX2N5Y2xlX2xhc3QKIAljbXAubmUgcDYsIHAwID0gMCwgcjIJLy8gRmFsbGJhY2sgaWYgd29yayBpcyBzY2hlZHVsZWQKLShwNikgICAgYnIuY29uZC5zcG50Lm1hbnkgZnN5c19mYWxsYmFja19zeXNjYWxsCisocDYpCWJyLmNvbmQuc3BudC5tYW55IGZzeXNfZmFsbGJhY2tfc3lzY2FsbAogCTs7CiAJLy8gQmVnaW4gY3JpdGljYWwgc2VjdGlvbgogLnRpbWVfcmVkbzoKQEAgLTI1OCw3ICsyODIsNiBAQAogKHA4KQltb3YgcjIgPSBhci5pdGMJCS8vIENQVV9USU1FUi4gMzYgY2xvY2tzIGxhdGVuY3khISEKIChwOSkJbGQ4IHIyID0gW3IzMF0JCS8vIE1NSU9fVElNRVIuIENvdWxkIGFsc28gaGF2ZSBsYXRlbmN5IGlzc3Vlcy4uCiAocDEzKQlsZDggcjI1ID0gW3IxOV0JCS8vIGdldCBpdGNfbGFzdGN5Y2xlIHZhbHVlCi0JOzsJCS8vID8gY291bGQgYmUgcmVtb3ZlZCBieSBtb3ZpbmcgdGhlIGxhc3QgYWRkIHVwd2FyZAogCWxkOCByOSA9IFtyMjJdLElBNjRfVElNRVNQRUNfVFZfTlNFQ19PRkZTRVQJLy8gdHZfc2VjCiAJOzsKIAlsZDggcjggPSBbcjIyXSwtSUE2NF9USU1FU1BFQ19UVl9OU0VDX09GRlNFVAkvLyB0dl9uc2VjCkBAIC0yODUsMTMgKzMwOCwxMiBAQAogRVgoLmZhaWxfZWZhdWx0LCBwcm9iZS53LmZhdWx0IHIzMSwgMykKIAl4bXB5LmwgZjggPSBmOCxmNwkvLyBuc2VjX3Blcl9jeWMqKGNvdW50ZXItbGFzdF9jb3VudGVyKQogCTs7Ci0JLy8gPyBzaW11bGF0ZSB0Yml0Lm56Lm9yIHA3LHAwID0gcjI4LDAKIAlnZXRmLnNpZyByMiA9IGY4CiAJbWYKIAk7OwogCWxkNCByMTAgPSBbcjIwXQkJLy8gZ3RvZF9sb2NrLnNlcXVlbmNlCiAJc2hyLnUgcjIgPSByMixyMjMJLy8gc2hpZnQgYnkgZmFjdG9yCi0JOzsJCS8vID8gb3ZlcmxvYWRlZCAzIGJ1bmRsZXMhCisJOzsKIAlhZGQgcjggPSByOCxyMgkJLy8gQWRkIHh0aW1lLm5zZWNzCiAJY21wNC5uZSBwNyxwMCA9IHIyOCxyMTAKIChwNykJYnIuY29uZC5kcG50LmZldyAudGltZV9yZWRvCS8vIHNlcXVlbmNlIG51bWJlciBjaGFuZ2VkLCByZWRvCkBAIC0zMTksOSArMzQxLDkgQEAKIEVYKC5mYWlsX2VmYXVsdCwgcHJvYmUudy5mYXVsdCByMjMsIDMpCS8vIFRoaXMgYWxzbyBjb3N0cyA1IGN5Y2xlcwogKHAxNCkJeG1weS5odSBmOCA9IGY4LCBmNwkJLy8geG1weSBoYXMgNSBjeWNsZXMgbGF0ZW5jeSBzbyB1c2UgaXQKIAk7OwotCW1vdiByOCA9IHIwCiAocDE0KQlnZXRmLnNpZyByMiA9IGY4CiAJOzsKKwltb3YgcjggPSByMAogKHAxNCkJc2hyLnUgcjIxID0gcjIsIDQKIAk7OwogRVgoLmZhaWxfZWZhdWx0LCBzdDggW3IzMV0gPSByOSkKQEAgLTY2MCw3ICs2ODIsMTEgQEAKIAlub3AuaSAwCiAJOzsKIAltb3YgYXIucnNjPTAJCQkJLy8gTTIgICBzZXQgZW5mb3JjZWQgbGF6eSBtb2RlLCBwbCAwLCBMRSwgbG9hZHJzPTAKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCW1vdi5tIHIzMD1hci5pdGMJCQkvLyBNICAgIGdldCBjeWNsZSBmb3IgYWNjb3VudGluZworI2Vsc2UKIAlub3AubSAwCisjZW5kaWYKIAlub3AuaSAwCiAJOzsKIAltb3YgcjIzPWFyLmJzcHN0b3JlCQkJLy8gTTIgKDEyIGN5Yykgc2F2ZSBhci5ic3BzdG9yZQpAQCAtNjgyLDYgKzcwOCwyOCBAQAogCWNtcC5uZSBwS1N0ayxwVVN0az1yMCxyMAkJLy8gQSAgICBzZXQgcEtTdGsgPC0gMCwgcFVTdGsgPC0gMQogCWJyLmNhbGwuc3B0ay5tYW55IGI3PWlhNjRfc3lzY2FsbF9zZXR1cAkvLyBCCiAJOzsKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCS8vIG1vdi5tIHIzMD1hci5pdGMgaXMgY2FsbGVkIGluIGFkdmFuY2UKKwlhZGQgcjE2PVRJX0FDX1NUQU1QK0lBNjRfVEFTS19TSVpFLHIyCisJYWRkIHIxNz1USV9BQ19MRUFWRStJQTY0X1RBU0tfU0laRSxyMgorCTs7CisJbGQ4IHIxOD1bcjE2XSxUSV9BQ19TVElNRS1USV9BQ19TVEFNUAkvLyB0aW1lIGF0IGxhc3QgY2hlY2sgaW4ga2VybmVsCisJbGQ4IHIxOT1bcjE3XSxUSV9BQ19VVElNRS1USV9BQ19MRUFWRQkvLyB0aW1lIGF0IGxlYXZlIGtlcm5lbAorCTs7CisJbGQ4IHIyMD1bcjE2XSxUSV9BQ19TVEFNUC1USV9BQ19TVElNRQkvLyBjdW11bGF0ZWQgc3RpbWUKKwlsZDggcjIxPVtyMTddCQkJCS8vIGN1bXVsYXRlZCB1dGltZQorCXN1YiByMjI9cjE5LHIxOAkJCQkvLyBzdGltZSBiZWZvcmUgbGVhdmUga2VybmVsCisJOzsKKwlzdDggW3IxNl09cjMwLFRJX0FDX1NUSU1FLVRJX0FDX1NUQU1QCS8vIHVwZGF0ZSBzdGFtcAorCXN1YiByMTg9cjMwLHIxOQkJCQkvLyBlbGFwc2VkIHRpbWUgaW4gdXNlciBtb2RlCisJOzsKKwlhZGQgcjIwPXIyMCxyMjIJCQkJLy8gc3VtIHN0aW1lCisJYWRkIHIyMT1yMjEscjE4CQkJCS8vIHN1bSB1dGltZQorCTs7CisJc3Q4IFtyMTZdPXIyMAkJCQkvLyB1cGRhdGUgc3RpbWUKKwlzdDggW3IxN109cjIxCQkJCS8vIHVwZGF0ZSB1dGltZQorCTs7CisjZW5kaWYKIAltb3YgYXIucnNjPTB4MwkJCQkvLyBNMiAgIHNldCBlYWdlciBtb2RlLCBwbCAwLCBMRSwgbG9hZHJzPTAKIAltb3YgcnA9cjE0CQkJCS8vIEkwICAgc2V0IHRoZSByZWFsIHJldHVybiBhZGRyCiAJYW5kIHIzPV9USUZfU1lTQ0FMTF9UUkFDRUFVRElULHIzCS8vIEEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKaW5kZXggZDNhNDFkNS4uZGRlYWI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKQEAgLTEwMDIsNiArMTAwMiwyNiBAQAogCWJyLnJldC5zcHRrLm1hbnkgcnAKIEVORChzY2hlZF9jbG9jaykKIAorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCitHTE9CQUxfRU5UUlkoY3ljbGVfdG9fY3B1dGltZSkKKwlhbGxvYyByMTY9YXIucGZzLDEsMCwwLDAKKwlhZGRsIHI4PVRISVNfQ1BVKGNwdV9pbmZvKSArIElBNjRfQ1BVSU5GT19OU0VDX1BFUl9DWUNfT0ZGU0VULHIwCisJOzsKKwlsZGY4IGY4PVtyOF0KKwk7OworCXNldGYuc2lnIGY5PXIzMgorCTs7CisJeG1weS5sdSBmMTA9ZjksZjgJLy8gY2FsY3VsYXRlIGxvdyA2NCBiaXRzIG9mIDEyOC1iaXQgcHJvZHVjdAkoNCBjeWMpCisJeG1weS5odSBmMTE9ZjksZjgJLy8gY2FsY3VsYXRlIGhpZ2ggNjQgYml0cyBvZiAxMjgtYml0IHByb2R1Y3QKKwk7OworCWdldGYuc2lnIHI4PWYxMAkJLy8JCQkJCQkoNSBjeWMpCisJZ2V0Zi5zaWcgcjk9ZjExCisJOzsKKwlzaHJwIHI4PXI5LHI4LElBNjRfTlNFQ19QRVJfQ1lDX1NISUZUCisJYnIucmV0LnNwdGsubWFueSBycAorRU5EKGN5Y2xlX3RvX2NwdXRpbWUpCisjZW5kaWYgLyogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgKi8KKwogR0xPQkFMX0VOVFJZKHN0YXJ0X2tlcm5lbF90aHJlYWQpCiAJLnByb2xvZ3VlCiAJLnNhdmUgcnAsIHIwCQkJCS8vIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgY2FsbC1jaGFpbgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCA4ZTcxOTNkLi42ZGExZjIwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtMTksMTIgKzE5LDYgQEAKIEVYUE9SVF9TWU1CT0woaXBfZmFzdF9jc3VtKTsJCS8qIGhhbmQtY29kZWQgYXNzZW1ibHkgKi8KIEVYUE9SVF9TWU1CT0woY3N1bV9pcHY2X21hZ2ljKTsKIAotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLUVYUE9SVF9TWU1CT0woX19kb3duKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwotRVhQT1JUX1NZTUJPTChfX2Rvd25fdHJ5bG9jayk7Ci1FWFBPUlRfU1lNQk9MKF9fdXApOwotCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIEVYUE9SVF9TWU1CT0woY2xlYXJfcGFnZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKaW5kZXggMzk4ZTJmZC4uMDgyYzMxZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKQEAgLTM0NSw3ICszNDUsNyBAQAogCWlmIChjcHVzX2VtcHR5KG1hc2spKQogCQlyZXR1cm47CiAKLQlpZiAocmVhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGZpcnN0X2NwdShtYXNrKSkpCisJaWYgKGlycV9wcmVwYXJlX21vdmUoaXJxLCBmaXJzdF9jcHUobWFzaykpKQogCQlyZXR1cm47CiAKIAlkZXN0ID0gY3B1X3BoeXNpY2FsX2lkKGZpcnN0X2NwdShtYXNrKSk7CkBAIC0zOTcsNiArMzk3LDcgQEAKIAlzdHJ1Y3QgaW9zYXBpY19ydGVfaW5mbyAqcnRlOwogCWludCBkb191bm1hc2tfaXJxID0gMDsKIAorCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7CiAJaWYgKHVubGlrZWx5KGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKIAkJZG9fdW5tYXNrX2lycSA9IDE7CiAJCW1hc2tfaXJxKGlycSk7CkBAIC00NTAsNiArNDUxLDcgQEAKIHsKIAlpcnFfZGVzY190ICppZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCisJaXJxX2NvbXBsZXRlX21vdmUoaXJxKTsKIAltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKIAkvKgogCSAqIE9uY2Ugd2UgaGF2ZSByZWNvcmRlZCBJUlFfUEVORElORyBhbHJlYWR5LCB3ZSBjYW4gbWFzayB0aGUKQEAgLTUzMiw3ICs1MzQsNyBAQAogCWlmIChpb3NhcGljX2ludHJfaW5mb1tpcnFdLmNvdW50KSB7CiAJCW5ld19pcnEgPSBjcmVhdGVfaXJxKCk7CiAJCWlmIChuZXdfaXJxIDwgMCkKLQkJCXBhbmljKCIlczogb3V0IG9mIGludGVycnVwdCB2ZWN0b3JzIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXBhbmljKCIlczogb3V0IG9mIGludGVycnVwdCB2ZWN0b3JzIVxuIiwgX19mdW5jX18pOwogCQlwcmludGsoS0VSTl9JTkZPICJSZWFzc2lnbmluZyB2ZWN0b3IgJWQgdG8gJWRcbiIsCiAJCSAgICAgICBpcnFfdG9fdmVjdG9yKGlycSksIGlycV90b192ZWN0b3IobmV3X2lycSkpOwogCQltZW1jcHkoJmlvc2FwaWNfaW50cl9pbmZvW25ld19pcnFdLCAmaW9zYXBpY19pbnRyX2luZm9baXJxXSwKQEAgLTU5Nyw3ICs1OTksNyBAQAogCWluZGV4ID0gZmluZF9pb3NhcGljKGdzaSk7CiAJaWYgKGluZGV4IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gSU9TQVBJQyBmb3IgR1NJICV1XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBnc2kpOworCQkgICAgICAgX19mdW5jX18sIGdzaSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNjA2LDcgKzYwOCw3IEBACiAJCXJ0ZSA9IGlvc2FwaWNfYWxsb2NfcnRlKCk7CiAJCWlmICghcnRlKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKQEAgLTYyMyw3ICs2MjUsNyBAQAogCQkgICAgKGluZm8tPnRyaWdnZXIgIT0gdHJpZ2dlciB8fCBpbmZvLT5wb2xhcml0eSAhPSBwb2xhcml0eSkpewogCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKIAkJCQkiJXM6IGNhbm5vdCBvdmVycmlkZSB0aGUgaW50ZXJydXB0XG4iLAotCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJcnRlLT5yZWZjbnQrKzsKQEAgLTY0NSw3ICs2NDcsNyBAQAogCQlpZiAoaWRlc2MtPmNoaXAgIT0gJm5vX2lycV90eXBlKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICIlczogY2hhbmdpbmcgdmVjdG9yICVkIGZyb20gJXMgdG8gJXNcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnFfdG9fdmVjdG9yKGlycSksCisJCQkgICAgICAgX19mdW5jX18sIGlycV90b192ZWN0b3IoaXJxKSwKIAkJCSAgICAgICBpZGVzYy0+Y2hpcC0+bmFtZSwgaXJxX3R5cGUtPm5hbWUpOwogCQlpZGVzYy0+Y2hpcCA9IGlycV90eXBlOwogCX0KQEAgLTkxOCw3ICs5MjAsNyBAQAogCSAgICAgIGNhc2UgQUNQSV9JTlRFUlJVUFRfSU5JVDoKIAkJaXJxID0gY3JlYXRlX2lycSgpOwogCQlpZiAoaXJxIDwgMCkKLQkJCXBhbmljKCIlczogb3V0IG9mIGludGVycnVwdCB2ZWN0b3JzIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXBhbmljKCIlczogb3V0IG9mIGludGVycnVwdCB2ZWN0b3JzIVxuIiwgX19mdW5jX18pOwogCQl2ZWN0b3IgPSBpcnFfdG9fdmVjdG9yKGlycSk7CiAJCWRlbGl2ZXJ5ID0gSU9TQVBJQ19JTklUOwogCQlicmVhazsKQEAgLTkyOSw3ICs5MzEsNyBAQAogCQltYXNrID0gMTsKIAkJYnJlYWs7CiAJICAgICAgZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBpbnQgdHlwZSAweCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgaW50IHR5cGUgMHgleFxuIiwgX19mdW5jX18sCiAJCSAgICAgICBpbnRfdHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC05OTQsNyArOTk2LDcgQEAKIAkJICovCiAJCXByaW50ayhLRVJOX0lORk8KIAkJICAgICAgICIlczogRGlzYWJsaW5nIFBDLUFUIGNvbXBhdGlibGUgODI1OSBpbnRlcnJ1cHRzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJb3V0YigweGZmLCAweEExKTsKIAkJb3V0YigweGZmLCAweDIxKTsKIAl9CkBAIC0xMDA5LDcgKzEwMTEsNyBAQAogCQlpZiAoIWlvc2FwaWNfbGlzdHNbaW5kZXhdLmFkZHIpCiAJCQlyZXR1cm4gaW5kZXg7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGlvc2FwaWNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBpb3NhcGljXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xMTA3LDE0ICsxMTA5LDE0IEBACiAJaW5kZXggPSBmaW5kX2lvc2FwaWMoZ3NpX2Jhc2UpOwogCWlmIChpbmRleCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIElPU0FQSUMgZm9yIEdTSSBiYXNlICV1XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBnc2lfYmFzZSk7CisJCSAgICAgICBfX2Z1bmNfXywgZ3NpX2Jhc2UpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoaW9zYXBpY19saXN0c1tpbmRleF0ucnRlc19pbnVzZSkgewogCQllcnIgPSAtRUJVU1k7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJT1NBUElDIGZvciBHU0kgYmFzZSAldSBpcyBidXN5XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBnc2lfYmFzZSk7CisJCSAgICAgICBfX2Z1bmNfXywgZ3NpX2Jhc2UpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTExMzUsNyArMTEzNyw3IEBACiAJaW5kZXggPSBmaW5kX2lvc2FwaWMoZ3NpX2Jhc2UpOwogCWlmIChpbmRleCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIElPU0FQSUMgZm9yIEdTSSAldVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZ3NpX2Jhc2UpOworCQkgICAgICAgX19mdW5jX18sIGdzaV9iYXNlKTsKIAkJcmV0dXJuOwogCX0KIAlpb3NhcGljX2xpc3RzW2luZGV4XS5ub2RlID0gbm9kZTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYwppbmRleCAwYjUyZjE5Li41NTM4NDcxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCkBAIC0yNjAsNiArMjYwLDggQEAKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgKGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfSUE2NF9ESUcpKQorI2RlZmluZSBJQTY0X0lSUV9NT1ZFX1ZFQ1RPUglJQTY0X0RFRl9GSVJTVF9ERVZJQ0VfVkVDVE9SCisKIHN0YXRpYyBlbnVtIHZlY3Rvcl9kb21haW5fdHlwZSB7CiAJVkVDVE9SX0RPTUFJTl9OT05FLAogCVZFQ1RPUl9ET01BSU5fUEVSQ1BVCkBAIC0yNzIsNiArMjc0LDEwMSBAQAogCXJldHVybiBDUFVfTUFTS19BTEw7CiB9CiAKK3N0YXRpYyBpbnQgX19pcnFfcHJlcGFyZV9tb3ZlKGludCBpcnEsIGludCBjcHUpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9ICZpcnFfY2ZnW2lycV07CisJaW50IHZlY3RvcjsKKwljcHVtYXNrX3QgZG9tYWluOworCisJaWYgKGNmZy0+bW92ZV9pbl9wcm9ncmVzcyB8fCBjZmctPm1vdmVfY2xlYW51cF9jb3VudCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoY2ZnLT52ZWN0b3IgPT0gSVJRX1ZFQ1RPUl9VTkFTU0lHTkVEIHx8ICFjcHVfb25saW5lKGNwdSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjcHVfaXNzZXQoY3B1LCBjZmctPmRvbWFpbikpCisJCXJldHVybiAwOworCWRvbWFpbiA9IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUpOworCXZlY3RvciA9IGZpbmRfdW5hc3NpZ25lZF92ZWN0b3IoZG9tYWluKTsKKwlpZiAodmVjdG9yIDwgMCkKKwkJcmV0dXJuIC1FTk9TUEM7CisJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMTsKKwljZmctPm9sZF9kb21haW4gPSBjZmctPmRvbWFpbjsKKwljZmctPnZlY3RvciA9IElSUV9WRUNUT1JfVU5BU1NJR05FRDsKKwljZmctPmRvbWFpbiA9IENQVV9NQVNLX05PTkU7CisJQlVHX09OKF9fYmluZF9pcnFfdmVjdG9yKGlycSwgdmVjdG9yLCBkb21haW4pKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlycV9wcmVwYXJlX21vdmUoaW50IGlycSwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBfX2lycV9wcmVwYXJlX21vdmUoaXJxLCBjcHUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpcnEpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9ICZpcnFfY2ZnW2lycV07CisJY3B1bWFza190IGNsZWFudXBfbWFzazsKKwlpbnQgaTsKKworCWlmIChsaWtlbHkoIWNmZy0+bW92ZV9pbl9wcm9ncmVzcykpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjZmctPm9sZF9kb21haW4pKSkKKwkJcmV0dXJuOworCisJY3B1c19hbmQoY2xlYW51cF9tYXNrLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKKwljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IGNwdXNfd2VpZ2h0KGNsZWFudXBfbWFzayk7CisJZm9yX2VhY2hfY3B1X21hc2soaSwgY2xlYW51cF9tYXNrKQorCQlwbGF0Zm9ybV9zZW5kX2lwaShpLCBJQTY0X0lSUV9NT1ZFX1ZFQ1RPUiwgSUE2NF9JUElfRE1fSU5ULCAwKTsKKwljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWE2NF92ZWN0b3IgdmVjdG9yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmb3IgKHZlY3RvciA9IElBNjRfRklSU1RfREVWSUNFX1ZFQ1RPUjsKKwkgICAgIHZlY3RvciA8IElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SOyB2ZWN0b3IrKykgeworCQlpbnQgaXJxOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKKwkJaWYgKGlycSA8IDApCisJCQljb250aW51ZTsKKworCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJCWNmZyA9IGlycV9jZmcgKyBpcnE7CisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCWlmICghY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAoIWNwdV9pc3NldChtZSwgY2ZnLT5vbGRfZG9tYWluKSkKKwkJCWdvdG8gdW5sb2NrOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKKwkJY3B1X2NsZWFyKG1lLCB2ZWN0b3JfdGFibGVbdmVjdG9yXSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50LS07CisJdW5sb2NrOgorCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX21vdmVfaXJxYWN0aW9uID0geworCS5oYW5kbGVyID0Jc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0LAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCisJLm5hbWUgPQkJImlycV9tb3ZlIgorfTsKKwogc3RhdGljIGludCBfX2luaXQgcGFyc2VfdmVjdG9yX2RvbWFpbihjaGFyICphcmcpCiB7CiAJaWYgKCFhcmcpCkBAIC0zMDMsMzYgKzQwMCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBfX3JlYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gJmlycV9jZmdbaXJxXTsKLQlpbnQgdmVjdG9yOwotCWNwdW1hc2tfdCBkb21haW47Ci0KLQlpZiAoY2ZnLT52ZWN0b3IgPT0gSVJRX1ZFQ1RPUl9VTkFTU0lHTkVEIHx8ICFjcHVfb25saW5lKGNwdSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjcHVfaXNzZXQoY3B1LCBjZmctPmRvbWFpbikpCi0JCXJldHVybiAwOwotCWRvbWFpbiA9IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUpOwotCXZlY3RvciA9IGZpbmRfdW5hc3NpZ25lZF92ZWN0b3IoZG9tYWluKTsKLQlpZiAodmVjdG9yIDwgMCkKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JX19jbGVhcl9pcnFfdmVjdG9yKGlycSk7Ci0JQlVHX09OKF9fYmluZF9pcnFfdmVjdG9yKGlycSwgdmVjdG9yLCBkb21haW4pKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHJlYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX3JlYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjcHUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIER5bmFtaWMgaXJxIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRpb24gZm9yIE1TSQogICovCkBAIC00MDUsNyArNDcyLDcgQEAKIAkJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNvdW50OwogCQkJc3RhdGljIGxvbmcgbGFzdF90aW1lOwogCi0JCQlpZiAoamlmZmllcyAtIGxhc3RfdGltZSA+IDUqSFopCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X3RpbWUgKyA1ICogSFopKQogCQkJCWNvdW50ID0gMDsKIAkJCWlmICgrK2NvdW50IDwgNSkgewogCQkJCWxhc3RfdGltZSA9IGppZmZpZXM7CkBAIC00NDAsNyArNTA3LDcgQEAKIAkJCWlmICh1bmxpa2VseShpcnEgPCAwKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgaW50ZXJydXB0ICIKIAkJCQkgICAgICAgInZlY3RvciAlZCBvbiBDUFUgJWQgaXMgbm90IG1hcHBlZCAiCi0JCQkJICAgICAgICJ0byBhbnkgSVJRIVxuIiwgX19GVU5DVElPTl9fLCB2ZWN0b3IsCisJCQkJICAgICAgICJ0byBhbnkgSVJRIVxuIiwgX19mdW5jX18sIHZlY3RvciwKIAkJCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJCX0gZWxzZQogCQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwpAQCAtNTA1LDcgKzU3Miw3IEBACiAJCQlpZiAodW5saWtlbHkoaXJxIDwgMCkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIGludGVycnVwdCAiCiAJCQkJICAgICAgICJ2ZWN0b3IgJWQgb24gQ1BVICVkIG5vdCBiZWluZyBtYXBwZWQgIgotCQkJCSAgICAgICAidG8gYW55IElSUSEhXG4iLCBfX0ZVTkNUSU9OX18sIHZlY3RvciwKKwkJCQkgICAgICAgInRvIGFueSBJUlEhIVxuIiwgX19mdW5jX18sIHZlY3RvciwKIAkJCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJCX0gZWxzZSB7CiAJCQkJdmVjdG9yc19pbl9taWdyYXRpb25baXJxXT0wOwpAQCAtNTc4LDYgKzY0NSwxMyBAQAogCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9JUElfVkVDVE9SLCAmaXBpX2lycWFjdGlvbik7CiAJcmVnaXN0ZXJfcGVyY3B1X2lycShJQTY0X0lQSV9SRVNDSEVEVUxFLCAmcmVzY2hlZF9pcnFhY3Rpb24pOwogCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9JUElfTE9DQUxfVExCX0ZMVVNILCAmdGxiX2lycWFjdGlvbik7CisjaWYgZGVmaW5lZChDT05GSUdfSUE2NF9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0RJRykKKwlpZiAodmVjdG9yX2RvbWFpbl90eXBlICE9IFZFQ1RPUl9ET01BSU5fTk9ORSkgeworCQlCVUdfT04oSUE2NF9GSVJTVF9ERVZJQ0VfVkVDVE9SICE9IElBNjRfSVJRX01PVkVfVkVDVE9SKTsKKwkJSUE2NF9GSVJTVF9ERVZJQ0VfVkVDVE9SKys7CisJCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9JUlFfTU9WRV9WRUNUT1IsICZpcnFfbW92ZV9pcnFhY3Rpb24pOworCX0KKyNlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BFUkZNT04KIAlwZm1faW5pdF9wZXJjcHUoKTsKQEAgLTU5MiwxMSArNjY2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlwaV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgcGh5c19jcHVfaWQ7CiAKLSNpZmRlZiBDT05GSUdfU01QCiAJcGh5c19jcHVfaWQgPSBjcHVfcGh5c2ljYWxfaWQoY3B1KTsKLSNlbHNlCi0JcGh5c19jcHVfaWQgPSAoaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX0xJRCkgPj4gMTYpICYgMHhmZmZmOwotI2VuZGlmCiAKIAkvKgogCSAqIGNwdSBudW1iZXIgaXMgaW4gOGJpdCBJRCBhbmQgOGJpdCBFSUQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMgYi9hcmNoL2lhNjQva2VybmVsL2l2dC5TCmluZGV4IDM0ZjQ0ZDguLjY2NzhjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUwpAQCAtODA1LDggKzgwNSwxMyBAQAogCiAocDgpCWFkZHMgcjI4PTE2LHIyOAkJCQkvLyBBICAgIHN3aXRjaCBjci5paXAgdG8gbmV4dCBidW5kbGUKIChwOSkJYWRkcyByOD0xLHI4CQkJCS8vIEEgICAgaW5jcmVtZW50IGVpIHRvIG5leHQgc2xvdAorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisJOzsKKwltb3YgYjY9cjMwCQkJCS8vIEkwICAgc2V0dXAgc3lzY2FsbCBoYW5kbGVyIGJyYW5jaCByZWcgZWFybHkKKyNlbHNlCiAJbm9wLmkgMAogCTs7CisjZW5kaWYKIAogCW1vdi5tIHIyNT1hci51bmF0CQkJLy8gTTIgKDUgY3ljKQogCWRlcCByMjk9cjgscjI5LDQxLDIJCQkvLyBJMCAgIGluc2VydCBuZXcgZWkgaW50byBjci5pcHNyCkBAIC04MTcsNyArODIyLDExIEBACiAJLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAJc3QxIFtyMTZdPXIwCQkJCS8vIE0yfDMgY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnCisjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKKwltb3YubSByMzA9YXIuaXRjCQkJLy8gTSAgICBnZXQgY3ljbGUgZm9yIGFjY291bnRpbmcKKyNlbHNlCiAJbW92IGI2PXIzMAkJCQkvLyBJMCAgIHNldHVwIHN5c2NhbGwgaGFuZGxlciBicmFuY2ggcmVnIGVhcmx5CisjZW5kaWYKIAljbXAuZXEgcEtTdGsscFVTdGs9cjAscjE3CQkvLyBBICAgIHdlcmUgd2Ugb24ga2VybmVsIHN0YWNrcyBhbHJlYWR5PwogCiAJYW5kIHI5PV9USUZfU1lTQ0FMTF9UUkFDRUFVRElULHI5CS8vIEEgICAgbWFzayB0cmFjZSBvciBhdWRpdApAQCAtODI5LDYgKzgzOCwzMCBAQAogCWNtcC5lcSBwMTQscDA9cjkscjAJCQkvLyBBICAgIGFyZSBzeXNjYWxscyBiZWluZyB0cmFjZWQvYXVkaXRlZD8KIAlici5jYWxsLnNwdGsubWFueSBiNz1pYTY0X3N5c2NhbGxfc2V0dXAJLy8gQgogMToKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCS8vIG1vdi5tIHIzMD1hci5pdGMgaXMgY2FsbGVkIGluIGFkdmFuY2UsIGFuZCByMTMgaXMgY3VycmVudAorCWFkZCByMTY9VElfQUNfU1RBTVArSUE2NF9UQVNLX1NJWkUscjEzCS8vIEEKKwlhZGQgcjE3PVRJX0FDX0xFQVZFK0lBNjRfVEFTS19TSVpFLHIxMwkvLyBBCisocEtTdGspCWJyLmNvbmQuc3BudCAuc2tpcF9hY2NvdW50aW5nCQkvLyBCCXVubGlrZWx5IHNraXAKKwk7OworCWxkOCByMTg9W3IxNl0sVElfQUNfU1RJTUUtVElfQUNfU1RBTVAJLy8gTSAgZ2V0IGxhc3Qgc3RhbXAKKwlsZDggcjE5PVtyMTddLFRJX0FDX1VUSU1FLVRJX0FDX0xFQVZFCS8vIE0gIHRpbWUgYXQgbGVhdmUKKwk7OworCWxkOCByMjA9W3IxNl0sVElfQUNfU1RBTVAtVElfQUNfU1RJTUUJLy8gTSAgY3VtdWxhdGVkIHN0aW1lCisJbGQ4IHIyMT1bcjE3XQkJCQkvLyBNICBjdW11bGF0ZWQgdXRpbWUKKwlzdWIgcjIyPXIxOSxyMTgJCQkJLy8gQSAgc3RpbWUgYmVmb3JlIGxlYXZlCisJOzsKKwlzdDggW3IxNl09cjMwLFRJX0FDX1NUSU1FLVRJX0FDX1NUQU1QCS8vIE0gIHVwZGF0ZSBzdGFtcAorCXN1YiByMTg9cjMwLHIxOQkJCQkvLyBBICBlbGFwc2VkIHRpbWUgaW4gdXNlcgorCTs7CisJYWRkIHIyMD1yMjAscjIyCQkJCS8vIEEgIHN1bSBzdGltZQorCWFkZCByMjE9cjIxLHIxOAkJCQkvLyBBICBzdW0gdXRpbWUKKwk7OworCXN0OCBbcjE2XT1yMjAJCQkJLy8gTSAgdXBkYXRlIHN0aW1lCisJc3Q4IFtyMTddPXIyMQkJCQkvLyBNICB1cGRhdGUgdXRpbWUKKwk7OworLnNraXBfYWNjb3VudGluZzoKKyNlbmRpZgogCW1vdiBhci5yc2M9MHgzCQkJCS8vIE0yICAgc2V0IGVhZ2VyIG1vZGUsIHBsIDAsIExFLCBsb2FkcnM9MAogCW5vcCAwCiAJYnN3LjEJCQkJCS8vIEIgKDYgY3ljKSByZWdzIGFyZSBzYXZlZCwgc3dpdGNoIHRvIGJhbmsgMQpAQCAtOTI4LDYgKzk2MSw3IEBACiAJICoJLSByMjc6IHNhdmVkIGFyLnJzYwogCSAqCS0gcjI4OiBzYXZlZCBjci5paXAKIAkgKgktIHIyOTogc2F2ZWQgY3IuaXBzcgorCSAqCS0gcjMwOiBhci5pdGMgZm9yIGFjY291bnRpbmcgKGRvbid0IHRvdWNoKQogCSAqCS0gcjMxOiBzYXZlZCBwcgogCSAqCS0gIGIwOiBvcmlnaW5hbCBjb250ZW50cyAodG8gYmUgc2F2ZWQpCiAJICogT24gZXhpdDoKQEAgLTEwOTAsNiArMTEyNCw0MSBAQAogCURCR19GQVVMVCgxNikKIAlGQVVMVCgxNikKIAorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisJLyoKKwkgKiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjb2RlIHRvIGJlIGhlcmUsIG90aGVyIHRoYW4KKwkgKiB0aGF0IHRoZXJlIGhhcHBlbnMgdG8gYmUgc3BhY2UgaGVyZSB0aGF0IHdvdWxkIGdvIHVudXNlZCBvdGhlcndpc2UuCisJICogSWYgdGhpcyBmYXVsdCBldmVyIGdldHMgInVucmVzZXJ2ZWQiLCBzaW1wbHkgbW92ZWQgdGhlIGZvbGxvd2luZworCSAqIGNvZGUgdG8gYSBtb3JlIHN1aXRhYmxlIHNwb3QuLi4KKwkgKgorCSAqIGFjY291bnRfc3lzX2VudGVyIGlzIGNhbGxlZCBmcm9tIFNBVkVfTUlOKiBtYWNyb3MgaWYgYWNjb3VudGluZyBpcworCSAqIGVuYWJsZWQgYW5kIGlmIHRoZSBtYWNybyBpcyBlbnRlcmVkIGZyb20gdXNlciBtb2RlLgorCSAqLworRU5UUlkoYWNjb3VudF9zeXNfZW50ZXIpCisJLy8gbW92Lm0gcjIwPWFyLml0YyBpcyBjYWxsZWQgaW4gYWR2YW5jZSwgYW5kIHIxMyBpcyBjdXJyZW50CisJYWRkIHIxNj1USV9BQ19TVEFNUCtJQTY0X1RBU0tfU0laRSxyMTMKKwlhZGQgcjE3PVRJX0FDX0xFQVZFK0lBNjRfVEFTS19TSVpFLHIxMworCTs7CisJbGQ4IHIxOD1bcjE2XSxUSV9BQ19TVElNRS1USV9BQ19TVEFNUAkvLyB0aW1lIGF0IGxhc3QgY2hlY2sgaW4ga2VybmVsCisJbGQ4IHIxOT1bcjE3XSxUSV9BQ19VVElNRS1USV9BQ19MRUFWRQkvLyB0aW1lIGF0IGxlZnQgZnJvbSBrZXJuZWwKKyAgICAgICAgOzsKKwlsZDggcjIzPVtyMTZdLFRJX0FDX1NUQU1QLVRJX0FDX1NUSU1FCS8vIGN1bXVsYXRlZCBzdGltZQorCWxkOCByMjE9W3IxN10JCQkJLy8gY3VtdWxhdGVkIHV0aW1lCisJc3ViIHIyMj1yMTkscjE4CQkJCS8vIHN0aW1lIGJlZm9yZSBsZWF2ZSBrZXJuZWwKKwk7OworCXN0OCBbcjE2XT1yMjAsVElfQUNfU1RJTUUtVElfQUNfU1RBTVAJLy8gdXBkYXRlIHN0YW1wCisJc3ViIHIxOD1yMjAscjE5CQkJCS8vIGVsYXBzZWQgdGltZSBpbiB1c2VyIG1vZGUKKwk7OworCWFkZCByMjM9cjIzLHIyMgkJCQkvLyBzdW0gc3RpbWUKKwlhZGQgcjIxPXIyMSxyMTgJCQkJLy8gc3VtIHV0aW1lCisJOzsKKwlzdDggW3IxNl09cjIzCQkJCS8vIHVwZGF0ZSBzdGltZQorCXN0OCBbcjE3XT1yMjEJCQkJLy8gdXBkYXRlIHV0aW1lCisJOzsKKwlici5yZXQuc3B0ay5tYW55IHJwCitFTkQoYWNjb3VudF9zeXNfZW50ZXIpCisjZW5kaWYKKwogCS5vcmcgaWE2NF9pdnQrMHg0NDAwCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gMHg0NDAwIEVudHJ5IDE3IChzaXplIDY0IGJ1bmRsZXMpIFJlc2VydmVkCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGI2MTg0ODcuLjIzMzQzNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC03OCw2ICs3OCwyMCBAQAogICB7IHUsIHUsIHUgfSwgIAkJCS8qIDFGICovCiB9OwogCisvKiBJbnNlcnQgYSBsb25nIGJyYW5jaCBjb2RlICovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0X2JybF9pbnN0KHZvaWQgKmZyb20sIHZvaWQgKnRvKQoreworCXM2NCByZWwgPSAoKHM2NCkgdG8gLSAoczY0KSBmcm9tKSA+PiA0OworCWJ1bmRsZV90ICpicmw7CisJYnJsID0gKGJ1bmRsZV90ICopICgodTY0KSBmcm9tICYgfjB4Zik7CisJYnJsLT5xdWFkMC50ZW1wbGF0ZSA9IDB4MDU7CS8qIFtNTFhdKHN0b3ApICovCisJYnJsLT5xdWFkMC5zbG90MCA9IE5PUF9NX0lOU1Q7CS8qIG5vcC5tIDB4MCAqLworCWJybC0+cXVhZDAuc2xvdDFfcDAgPSAoKHJlbCA+PiAyMCkgJiAweDdmZmZmZmZmZmYpIDw8IDI7CisJYnJsLT5xdWFkMS5zbG90MV9wMSA9ICgoKHJlbCA+PiAyMCkgJiAweDdmZmZmZmZmZmYpIDw8IDIpID4+ICg2NCAtIDQ2KTsKKwkvKiBicmwuY29uZC5zcHRrLm1hbnkuY2xyIHJlbDw8NCAocXA9MCkgKi8KKwlicmwtPnF1YWQxLnNsb3QyID0gQlJMX0lOU1QocmVsID4+IDU5LCByZWwgJiAweGZmZmZmKTsKK30KKwogLyoKICAqIEluIHRoaXMgZnVuY3Rpb24gd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBpbnN0cnVjdGlvbgogICogaXMgSVAgcmVsYXRpdmUgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZSB0aGUga3Byb2JlCkBAIC00OTYsNiArNTEwLDc3IEBACiAJcmVncy0+YjAgPSAoKHN0cnVjdCBmbnB0ciAqKWtyZXRwcm9iZV90cmFtcG9saW5lKS0+aXA7CiB9CiAKKy8qIENoZWNrIHRoZSBpbnN0cnVjdGlvbiBpbiB0aGUgc2xvdCBpcyBicmVhayAqLworc3RhdGljIGludCBfX2twcm9iZXMgX19pc19pYTY0X2JyZWFrX2luc3QoYnVuZGxlX3QgKmJ1bmRsZSwgdWludCBzbG90KQoreworCXVuc2lnbmVkIGludCBtYWpvcl9vcGNvZGU7CisJdW5zaWduZWQgaW50IHRlbXBsYXRlID0gYnVuZGxlLT5xdWFkMC50ZW1wbGF0ZTsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9pbnN0OworCisJLyogTW92ZSB0byBzbG90IDIsIGlmIGJ1bmRsZSBpcyBNTFggdHlwZSBhbmQga3Byb2JlIHNsb3QgaXMgMSAqLworCWlmIChzbG90ID09IDEgJiYgYnVuZGxlX2VuY29kaW5nW3RlbXBsYXRlXVsxXSA9PSBMKQorCQlzbG90Kys7CisKKwkvKiBHZXQgS3Byb2JlIHByb2JlIGluc3RydWN0aW9uIGF0IGdpdmVuIHNsb3QqLworCWdldF9rcHJvYmVfaW5zdChidW5kbGUsIHNsb3QsICZrcHJvYmVfaW5zdCwgJm1ham9yX29wY29kZSk7CisKKwkvKiBGb3IgYnJlYWsgaW5zdHJ1Y3Rpb24sCisJICogQml0cyAzNzo0MCBNYWpvciBvcGNvZGUgdG8gYmUgemVybworCSAqIEJpdHMgMjc6MzIgWDYgdG8gYmUgemVybworCSAqIEJpdHMgMzI6MzUgWDMgdG8gYmUgemVybworCSAqLworCWlmIChtYWpvcl9vcGNvZGUgfHwgKChrcHJvYmVfaW5zdCA+PiAyNykgJiAweDFGRikpIHsKKwkJLyogTm90IGEgYnJlYWsgaW5zdHJ1Y3Rpb24gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogSXMgYSBicmVhayBpbnN0cnVjdGlvbiAqLworCXJldHVybiAxOworfQorCisvKgorICogSW4gdGhpcyBmdW5jdGlvbiwgd2UgY2hlY2sgd2hldGhlciB0aGUgdGFyZ2V0IGJ1bmRsZSBtb2RpZmllcyBJUCBvcgorICogaXQgdHJpZ2dlcnMgYW4gZXhjZXB0aW9uLiBJZiBzbywgaXQgY2Fubm90IGJlIGJvb3N0YWJsZS4KKyAqLworc3RhdGljIGludCBfX2twcm9iZXMgY2FuX2Jvb3N0KGJ1bmRsZV90ICpidW5kbGUsIHVpbnQgc2xvdCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJ1bmRsZV9hZGRyKQoreworCXVuc2lnbmVkIGludCB0ZW1wbGF0ZSA9IGJ1bmRsZS0+cXVhZDAudGVtcGxhdGU7CisKKwlkbyB7CisJCWlmIChzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhidW5kbGVfYWRkciArIHNsb3QpIHx8CisJCSAgICBfX2lzX2lhNjRfYnJlYWtfaW5zdChidW5kbGUsIHNsb3QpKQorCQkJcmV0dXJuIDA7CS8qIGV4Y2VwdGlvbiBtYXkgb2NjdXIgaW4gdGhpcyBidW5kbGUqLworCX0gd2hpbGUgKCgrK3Nsb3QpIDwgMyk7CisJdGVtcGxhdGUgJj0gMHgxZTsKKwlpZiAodGVtcGxhdGUgPj0gMHgxMCAvKiBpbmNsdWRpbmcgQiB1bml0ICovIHx8CisJICAgIHRlbXBsYXRlID09IDB4MDQgLyogaW5jbHVkaW5nIFggdW5pdCAqLyB8fAorCSAgICB0ZW1wbGF0ZSA9PSAweDA2KSAvKiB1bmRlZmluZWQgKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyogUHJlcGFyZSBsb25nIGp1bXAgYnVuZGxlIGFuZCBkaXNhYmxlcyBvdGhlciBib29zdGVycyBpZiBuZWVkICovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcHJlcGFyZV9ib29zdGVyKHN0cnVjdCBrcHJvYmUgKnApCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkciAmIH4weEZVTEw7CisJdW5zaWduZWQgaW50IHNsb3QgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyICYgMHhmOworCXN0cnVjdCBrcHJvYmUgKm90aGVyX2twOworCisJaWYgKGNhbl9ib29zdCgmcC0+YWluc24uaW5zblswXS5idW5kbGUsIHNsb3QsIGFkZHIpKSB7CisJCXNldF9icmxfaW5zdCgmcC0+YWluc24uaW5zblsxXS5idW5kbGUsIChidW5kbGVfdCAqKWFkZHIgKyAxKTsKKwkJcC0+YWluc24uaW5zdF9mbGFnIHw9IElOU1RfRkxBR19CT09TVEFCTEU7CisJfQorCisJLyogZGlzYWJsZXMgYm9vc3RlcnMgaW4gcHJldmlvdXMgc2xvdHMgKi8KKwlmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKXAtPmFkZHI7IGFkZHIrKykgeworCQlvdGhlcl9rcCA9IGdldF9rcHJvYmUoKHZvaWQgKilhZGRyKTsKKwkJaWYgKG90aGVyX2twKQorCQkJb3RoZXJfa3AtPmFpbnNuLmluc3RfZmxhZyAmPSB+SU5TVF9GTEFHX0JPT1NUQUJMRTsKKwl9Cit9CisKIGludCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwLT5hZGRyOwpAQCAtNTMwLDYgKzYxNSw4IEBACiAKIAlwcmVwYXJlX2JyZWFrX2luc3QodGVtcGxhdGUsIHNsb3QsIG1ham9yX29wY29kZSwga3Byb2JlX2luc3QsIHAsIHFwKTsKIAorCXByZXBhcmVfYm9vc3RlcihwKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01NDMsNyArNjMwLDkgQEAKIAlzcmMgPSAmcC0+b3Bjb2RlLmJ1bmRsZTsKIAogCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuLAotCQkJKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbiArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwkJCSAgICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24gKworCQkJICAgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkgKiBNQVhfSU5TTl9TSVpFKTsKKwogCXN3aXRjaCAocC0+YWluc24uc2xvdCkgewogCQljYXNlIDA6CiAJCQlkZXN0LT5xdWFkMC5zbG90MCA9IHNyYy0+cXVhZDAuc2xvdDA7CkBAIC01ODQsMTMgKzY3MywxMyBAQAogdm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CiAJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKLQlmcmVlX2luc25fc2xvdChwLT5haW5zbi5pbnNuLCAwKTsKKwlmcmVlX2luc25fc2xvdChwLT5haW5zbi5pbnNuLCBwLT5haW5zbi5pbnN0X2ZsYWcgJiBJTlNUX0ZMQUdfQk9PU1RBQkxFKTsKIAltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CiB9CiAvKgogICogV2UgYXJlIHJlc3VtaW5nIGV4ZWN1dGlvbiBhZnRlciBhIHNpbmdsZSBzdGVwIGZhdWx0LCBzbyB0aGUgcHRfcmVncwogICogc3RydWN0dXJlIHJlZmxlY3RzIHRoZSByZWdpc3RlciBzdGF0ZSBhZnRlciB3ZSBleGVjdXRlZCB0aGUgaW5zdHJ1Y3Rpb24KLSAqIGxvY2F0ZWQgaW4gdGhlIGtwcm9iZSAocC0+YWluc24uaW5zbi5idW5kbGUpLiAgV2Ugc3RpbGwgbmVlZCB0byBhZGp1c3QKKyAqIGxvY2F0ZWQgaW4gdGhlIGtwcm9iZSAocC0+YWluc24uaW5zbi0+YnVuZGxlKS4gIFdlIHN0aWxsIG5lZWQgdG8gYWRqdXN0CiAgKiB0aGUgaXAgdG8gcG9pbnQgYmFjayB0byB0aGUgb3JpZ2luYWwgc3RhY2sgYWRkcmVzcy4gVG8gc2V0IHRoZSBJUCBhZGRyZXNzCiAgKiB0byBvcmlnaW5hbCBzdGFjayBhZGRyZXNzLCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCB0byBmaXh1cCB0aGUKICAqIHJlbGF0aXZlIElQIGFkZHJlc3MgYW5kL29yIGZpeHVwIGJyYW5jaCByZWdpc3Rlci4KQEAgLTYwNyw3ICs2OTYsNyBAQAogCWlmIChzbG90ID09IDEgJiYgYnVuZGxlX2VuY29kaW5nW3RlbXBsYXRlXVsxXSA9PSBMKQogCQlzbG90ID0gMjsKIAotCWlmIChwLT5haW5zbi5pbnN0X2ZsYWcpIHsKKwlpZiAocC0+YWluc24uaW5zdF9mbGFnICYgfklOU1RfRkxBR19CT09TVEFCTEUpIHsKIAogCQlpZiAocC0+YWluc24uaW5zdF9mbGFnICYgSU5TVF9GTEFHX0ZJWF9SRUxBVElWRV9JUF9BRERSKSB7CiAJCQkvKiBGaXggcmVsYXRpdmUgSVAgYWRkcmVzcyAqLwpAQCAtNjg2LDMzICs3NzUsMTIgQEAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGlzX2lhNjRfYnJlYWtfaW5zdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgc2xvdCA9IGlhNjRfcHNyKHJlZ3MpLT5yaTsKLQl1bnNpZ25lZCBpbnQgdGVtcGxhdGUsIG1ham9yX29wY29kZTsKLQl1bnNpZ25lZCBsb25nIGtwcm9iZV9pbnN0OwogCXVuc2lnbmVkIGxvbmcgKmtwcm9iZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5jcl9paXA7CiAJYnVuZGxlX3QgYnVuZGxlOwogCiAJbWVtY3B5KCZidW5kbGUsIGtwcm9iZV9hZGRyLCBzaXplb2YoYnVuZGxlX3QpKTsKLQl0ZW1wbGF0ZSA9IGJ1bmRsZS5xdWFkMC50ZW1wbGF0ZTsKIAotCS8qIE1vdmUgdG8gc2xvdCAyLCBpZiBidW5kbGUgaXMgTUxYIHR5cGUgYW5kIGtwcm9iZSBzbG90IGlzIDEgKi8KLQlpZiAoc2xvdCA9PSAxICYmIGJ1bmRsZV9lbmNvZGluZ1t0ZW1wbGF0ZV1bMV0gPT0gTCkKLQkJc2xvdCsrOwotCi0JLyogR2V0IEtwcm9iZSBwcm9iZSBpbnN0cnVjdGlvbiBhdCBnaXZlbiBzbG90Ki8KLQlnZXRfa3Byb2JlX2luc3QoJmJ1bmRsZSwgc2xvdCwgJmtwcm9iZV9pbnN0LCAmbWFqb3Jfb3Bjb2RlKTsKLQotCS8qIEZvciBicmVhayBpbnN0cnVjdGlvbiwKLQkgKiBCaXRzIDM3OjQwIE1ham9yIG9wY29kZSB0byBiZSB6ZXJvCi0JICogQml0cyAyNzozMiBYNiB0byBiZSB6ZXJvCi0JICogQml0cyAzMjozNSBYMyB0byBiZSB6ZXJvCi0JICovCi0JaWYgKG1ham9yX29wY29kZSB8fCAoKGtwcm9iZV9pbnN0ID4+IDI3KSAmIDB4MUZGKSApIHsKLQkJLyogTm90IGEgYnJlYWsgaW5zdHJ1Y3Rpb24gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogSXMgYSBicmVhayBpbnN0cnVjdGlvbiAqLwotCXJldHVybiAxOworCXJldHVybiBfX2lzX2lhNjRfYnJlYWtfaW5zdCgmYnVuZGxlLCBzbG90KTsKIH0KIAogc3RhdGljIGludCBfX2twcm9iZXMgcHJlX2twcm9iZXNfaGFuZGxlcihzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MpCkBAIC04MDIsNiArODcwLDE5IEBACiAJCXJldHVybiAxOwogCiBzc19wcm9iZToKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfUE0pCisJaWYgKHAtPmFpbnNuLmluc3RfZmxhZyA9PSBJTlNUX0ZMQUdfQk9PU1RBQkxFICYmICFwLT5wb3N0X2hhbmRsZXIpIHsKKwkJLyogQm9vc3QgdXAgLS0gd2UgY2FuIGV4ZWN1dGUgY29waWVkIGluc3RydWN0aW9ucyBkaXJlY3RseSAqLworCQlpYTY0X3BzcihyZWdzKS0+cmkgPSBwLT5haW5zbi5zbG90OworCQlyZWdzLT5jcl9paXAgPSAodW5zaWduZWQgbG9uZykmcC0+YWluc24uaW5zbi0+YnVuZGxlICYgfjB4RlVMTDsKKwkJLyogdHVybiBzaW5nbGUgc3RlcHBpbmcgb2ZmICovCisJCWlhNjRfcHNyKHJlZ3MpLT5zcyA9IDA7CisKKwkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKIAlwcmVwYXJlX3NzKHAsIHJlZ3MpOwogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1M7CiAJcmV0dXJuIDE7CkBAIC04MzgsNyArOTE5LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotaW50IF9fa3Byb2JlcyBrcHJvYmVzX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCitpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC0xMDAxLDYgKzEwODIsMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyogaWE2NCBkb2VzIG5vdCBuZWVkIHRoaXMgKi8KK3ZvaWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm4odm9pZCkKK3sKK30KKwogaW50IF9fa3Byb2JlcyBsb25nam1wX2JyZWFrX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCA2ZTE3YWVkLi5lNTFiY2VkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTY5LDYgKzY5LDcgQEAKICAqIDIwMDctMDQtMjcgUnVzcyBBbmRlcnNvbiA8cmphQHNnaS5jb20+CiAgKgkgICAgICBTdXBwb3J0IG11bHRpcGxlIGNwdXMgZ29pbmcgdGhyb3VnaCBPU19NQ0EgaW4gdGhlIHNhbWUgZXZlbnQuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTk3LDYgKzk4LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgogCiAjaW5jbHVkZSAibWNhX2Rydi5oIgogI2luY2x1ZGUgImVudHJ5LmgiCkBAIC0xMTIsNiArMTE0LDcgQEAKIERFRklORV9QRVJfQ1BVKHU2NCwgaWE2NF9tY2FfcGVyX2NwdV9wdGUpOyAvKiBQVEUgdG8gbWFwIHBlci1DUFUgYXJlYSAqLwogREVGSU5FX1BFUl9DUFUodTY0LCBpYTY0X21jYV9wYWxfcHRlKTsJICAgIC8qIFBURSB0byBtYXAgUEFMIGNvZGUgKi8KIERFRklORV9QRVJfQ1BVKHU2NCwgaWE2NF9tY2FfcGFsX2Jhc2UpOyAgICAvKiB2YWRkciBQQUwgY29kZSBncmFudWxlICovCitERUZJTkVfUEVSX0NQVSh1NjQsIGlhNjRfbWNhX3RyX3JlbG9hZCk7ICAgLyogRmxhZyBmb3IgVFIgcmVsb2FkICovCiAKIHVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X21jYVtOUl9DUFVTXTsKIApAQCAtMjkzLDcgKzI5Niw4IEBACiAJaWYgKG1sb2didWZfZmluaXNoZWQpCiAJCXJldHVybjsKIAotCWlmIChtbG9nYnVmX3RpbWVzdGFtcCAmJiAobWxvZ2J1Zl90aW1lc3RhbXAgKyAzMCpIWiA+IGppZmZpZXMpKSB7CisJaWYgKG1sb2didWZfdGltZXN0YW1wICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCBtbG9nYnVmX3RpbWVzdGFtcCArIDMwICogSFopKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSU5JVDogbWxvZ2J1Zl9kdW1wIGlzIGludGVycnVwdGVkIGJ5IElOSVQgIgogCQkJIiBhbmQgdGhlIHN5c3RlbSBzZWVtcyB0byBiZSBtZXNzZWQgdXAuXG4iKTsKIAkJaWE2NF9tbG9nYnVmX2ZpbmlzaCgwKTsKQEAgLTQxMyw4ICs0MTcsOCBAQAogCQlJQTY0X0xPR19JTkRFWF9JTkMoc2FsX2luZm9fdHlwZSk7CiAJCUlBNjRfTE9HX1VOTE9DSyhzYWxfaW5mb190eXBlKTsKIAkJaWYgKGlycV9zYWZlKSB7Ci0JCQlJQTY0X01DQV9ERUJVRygiJXM6IFNBTCBlcnJvciByZWNvcmQgdHlwZSAlZCByZXRyaWV2ZWQuICIKLQkJCQkgICAgICAgIlJlY29yZCBsZW5ndGggPSAlbGRcbiIsIF9fRlVOQ1RJT05fXywgc2FsX2luZm9fdHlwZSwgdG90YWxfbGVuKTsKKwkJCUlBNjRfTUNBX0RFQlVHKCIlczogU0FMIGVycm9yIHJlY29yZCB0eXBlICVkIHJldHJpZXZlZC4gUmVjb3JkIGxlbmd0aCA9ICVsZFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sIHNhbF9pbmZvX3R5cGUsIHRvdGFsX2xlbik7CiAJCX0KIAkJKmJ1ZmZlciA9ICh1OCAqKSBsb2dfYnVmZmVyOwogCQlyZXR1cm4gdG90YWxfbGVuOwpAQCAtNTE4LDcgKzUyMiw3IEBACiAJc3RhdGljIERFRklORV9TUElOTE9DSyhjcGVfaGlzdG9yeV9sb2NrKTsKIAogCUlBNjRfTUNBX0RFQlVHKCIlczogcmVjZWl2ZWQgaW50ZXJydXB0IHZlY3RvciA9ICUjeCBvbiBDUFUgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGNwZV9pcnEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCSAgICAgICBfX2Z1bmNfXywgY3BlX2lycSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIFNBTCBzcGVjIHN0YXRlcyB0aGlzIHNob3VsZCBydW4gdy8gaW50ZXJydXB0cyBlbmFibGVkICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtNTk0LDcgKzU5OCw3IEBACiAJfQogCiAJSUE2NF9NQ0FfREVCVUcoIiVzOiBjb3JyZWN0ZWQgcGxhdGZvcm0gZXJyb3IgIgotCQkgICAgICAgInZlY3RvciAlI3ggcmVnaXN0ZXJlZFxuIiwgX19GVU5DVElPTl9fLCBjcGV2KTsKKwkJICAgICAgICJ2ZWN0b3IgJSN4IHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fLCBjcGV2KTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCkBAIC02MjEsMTIgKzYyNSwxMSBAQAogCWNtY3YuY21jdl92ZWN0b3IJPSBJQTY0X0NNQ19WRUNUT1I7CiAJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0NSX0NNQ1YsIGNtY3YuY21jdl9yZWd2YWwpOwogCi0JSUE2NF9NQ0FfREVCVUcoIiVzOiBDUFUgJWQgY29ycmVjdGVkICIKLQkJICAgICAgICJtYWNoaW5lIGNoZWNrIHZlY3RvciAlI3ggcmVnaXN0ZXJlZC5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgSUE2NF9DTUNfVkVDVE9SKTsKKwlJQTY0X01DQV9ERUJVRygiJXM6IENQVSAlZCBjb3JyZWN0ZWQgbWFjaGluZSBjaGVjayB2ZWN0b3IgJSN4IHJlZ2lzdGVyZWQuXG4iLAorCQkgICAgICAgX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgSUE2NF9DTUNfVkVDVE9SKTsKIAogCUlBNjRfTUNBX0RFQlVHKCIlczogQ1BVICVkIENNQ1YgPSAlIzAxNmx4XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9DTUNWKSk7CisJCSAgICAgICBfX2Z1bmNfXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpYTY0X2dldHJlZyhfSUE2NF9SRUdfQ1JfQ01DVikpOwogfQogCiAvKgpAQCAtNjUxLDkgKzY1NCw4IEBACiAJY21jdi5jbWN2X21hc2sgPSAxOyAvKiBNYXNrL2Rpc2FibGUgaW50ZXJydXB0ICovCiAJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0NSX0NNQ1YsIGNtY3YuY21jdl9yZWd2YWwpOwogCi0JSUE2NF9NQ0FfREVCVUcoIiVzOiBDUFUgJWQgY29ycmVjdGVkICIKLQkJICAgICAgICJtYWNoaW5lIGNoZWNrIHZlY3RvciAlI3ggZGlzYWJsZWQuXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNtY3YuY21jdl92ZWN0b3IpOworCUlBNjRfTUNBX0RFQlVHKCIlczogQ1BVICVkIGNvcnJlY3RlZCBtYWNoaW5lIGNoZWNrIHZlY3RvciAlI3ggZGlzYWJsZWQuXG4iLAorCQkgICAgICAgX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY21jdi5jbWN2X3ZlY3Rvcik7CiB9CiAKIC8qCkBAIC02NzgsOSArNjgwLDggQEAKIAljbWN2LmNtY3ZfbWFzayA9IDA7IC8qIFVubWFzay9lbmFibGUgaW50ZXJydXB0ICovCiAJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0NSX0NNQ1YsIGNtY3YuY21jdl9yZWd2YWwpOwogCi0JSUE2NF9NQ0FfREVCVUcoIiVzOiBDUFUgJWQgY29ycmVjdGVkICIKLQkJICAgICAgICJtYWNoaW5lIGNoZWNrIHZlY3RvciAlI3ggZW5hYmxlZC5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY21jdi5jbWN2X3ZlY3Rvcik7CisJSUE2NF9NQ0FfREVCVUcoIiVzOiBDUFUgJWQgY29ycmVjdGVkIG1hY2hpbmUgY2hlY2sgdmVjdG9yICUjeCBlbmFibGVkLlxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNtY3YuY21jdl92ZWN0b3IpOwogfQogCiAvKgpAQCAtNzY3LDcgKzc2OCw3IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0VOVEVSLCAiTUNBIiwgZ2V0X2lycV9yZWdzKCksCiAJCSAgICAgICAobG9uZykmbmQsIDAsIDApID09IE5PVElGWV9TVE9QKQotCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisJCWlhNjRfbWNhX3NwaW4oX19mdW5jX18pOwogCiAJaWE2NF9tY19pbmZvLmltaV9yZW5kZXpfY2hlY2tpbltjcHVdID0gSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fRE9ORTsKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSBTQUwgbW9uYXJjaCB0aGF0IHRoZSBzbGF2ZSBoYXMKQEAgLTc3Nyw3ICs3NzgsNyBAQAogCiAJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywgIk1DQSIsIGdldF9pcnFfcmVncygpLAogCQkgICAgICAgKGxvbmcpJm5kLCAwLCAwKSA9PSBOT1RJRllfU1RPUCkKLQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCQlpYTY0X21jYV9zcGluKF9fZnVuY19fKTsKIAogCS8qIFdhaXQgZm9yIHRoZSBtb25hcmNoIGNwdSB0byBleGl0LiAqLwogCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKQEAgLTc4NSw3ICs3ODYsNyBAQAogCiAJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfTEVBVkUsICJNQ0EiLCBnZXRfaXJxX3JlZ3MoKSwKIAkJICAgICAgIChsb25nKSZuZCwgMCwgMCkgPT0gTk9USUZZX1NUT1ApCi0JCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwkJaWE2NF9tY2Ffc3BpbihfX2Z1bmNfXyk7CiAKIAlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9OT1RET05FOwogCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwpAQCAtMTE4NSw2ICsxMTg2LDQ5IEBACiAJcmV0dXJuOwogfQogCisvKiAgbWNhX2luc2VydF90cgorICoKKyAqICBTd2l0Y2ggcmlkIHdoZW4gVFIgcmVsb2FkIGFuZCBuZWVkZWQhCisgKiAgaW9yZDogMTogaXRyLCAyOiBpdHI7CisgKgorKi8KK3N0YXRpYyB2b2lkIG1jYV9pbnNlcnRfdHIodTY0IGlvcmQpCit7CisKKwlpbnQgaTsKKwl1NjQgb2xkX3JyOworCXN0cnVjdCBpYTY0X3RyX2VudHJ5ICpwOworCXVuc2lnbmVkIGxvbmcgcHNyOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlwc3IgPSBpYTY0X2NsZWFyX2ljKCk7CisJZm9yIChpID0gSUE2NF9UUl9BTExPQ19CQVNFOyBpIDwgSUE2NF9UUl9BTExPQ19NQVg7IGkrKykgeworCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdW2lvcmQtMV1baV07CisJCWlmIChwLT5wdGUgJiAweDEpIHsKKwkJCW9sZF9yciA9IGlhNjRfZ2V0X3JyKHAtPmlmYSk7CisJCQlpZiAob2xkX3JyICE9IHAtPnJyKSB7CisJCQkJaWE2NF9zZXRfcnIocC0+aWZhLCBwLT5ycik7CisJCQkJaWE2NF9zcmx6X2QoKTsKKwkJCX0KKwkJCWlhNjRfcHRyKGlvcmQsIHAtPmlmYSwgcC0+aXRpciA+PiAyKTsKKwkJCWlhNjRfc3Jsel9pKCk7CisJCQlpZiAoaW9yZCAmIDB4MSkgeworCQkJCWlhNjRfaXRyKDB4MSwgaSwgcC0+aWZhLCBwLT5wdGUsIHAtPml0aXIgPj4gMik7CisJCQkJaWE2NF9zcmx6X2koKTsKKwkJCX0KKwkJCWlmIChpb3JkICYgMHgyKSB7CisJCQkJaWE2NF9pdHIoMHgyLCBpLCBwLT5pZmEsIHAtPnB0ZSwgcC0+aXRpciA+PiAyKTsKKwkJCQlpYTY0X3NybHpfaSgpOworCQkJfQorCQkJaWYgKG9sZF9yciAhPSBwLT5ycikgeworCQkJCWlhNjRfc2V0X3JyKHAtPmlmYSwgb2xkX3JyKTsKKwkJCQlpYTY0X3NybHpfZCgpOworCQkJfQorCQl9CisJfQorCWlhNjRfc2V0X3Bzcihwc3IpOworfQorCiAvKgogICogaWE2NF9tY2FfaGFuZGxlcgogICoKQEAgLTEyMzAsNyArMTI3NCw3IEBACiAKIAlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfRU5URVIsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKLQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCQlpYTY0X21jYV9zcGluKF9fZnVuY19fKTsKIAogCWlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY3B1XSA9IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX0NPTkNVUlJFTlRfTUNBOwogCWlmIChzb3MtPm1vbmFyY2gpIHsKQEAgLTEyNDYsNyArMTI5MCw3IEBACiAJCWlhNjRfbWNhX3dha2V1cF9hbGwoKTsKIAkJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX1BST0NFU1MsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCi0JCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisJCQlpYTY0X21jYV9zcGluKF9fZnVuY19fKTsKIAl9IGVsc2UgewogCQl3aGlsZSAoY3B1X2lzc2V0KGNwdSwgbWNhX2NwdSkpCiAJCQljcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIHdha2VzIHVzICovCkBAIC0xMjY5LDE1ICsxMzEzLDE2IEBACiAJfSBlbHNlIHsKIAkJLyogRHVtcCBidWZmZXJlZCBtZXNzYWdlIHRvIGNvbnNvbGUgKi8KIAkJaWE2NF9tbG9nYnVmX2ZpbmlzaCgxKTsKLSNpZmRlZiBDT05GSUdfS0VYRUMKLQkJYXRvbWljX3NldCgma2R1bXBfaW5fcHJvZ3Jlc3MsIDEpOwotCQltb25hcmNoX2NwdSA9IC0xOwotI2VuZGlmCiAJfQorCisJaWYgKF9fZ2V0X2NwdV92YXIoaWE2NF9tY2FfdHJfcmVsb2FkKSkgeworCQltY2FfaW5zZXJ0X3RyKDB4MSk7IC8qUmVsb2FkIGR5bmFtaWMgaXRycyovCisJCW1jYV9pbnNlcnRfdHIoMHgyKTsgLypSZWxvYWQgZHluYW1pYyBpdHJzKi8KKwl9CisKIAlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfTEVBVkUsICJNQ0EiLCByZWdzLCAobG9uZykmbmQsIDAsIHJlY292ZXIpCiAJCQk9PSBOT1RJRllfU1RPUCkKLQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwotCisJCWlhNjRfbWNhX3NwaW4oX19mdW5jX18pOwogCiAJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZtY2FfY291bnQpID4gMCkgewogCQlpbnQgaTsKQEAgLTEzMjgsNyArMTM3Myw3IEBACiAJc3RhdGljIERFRklORV9TUElOTE9DSyhjbWNfaGlzdG9yeV9sb2NrKTsKIAogCUlBNjRfTUNBX0RFQlVHKCIlczogcmVjZWl2ZWQgaW50ZXJydXB0IHZlY3RvciA9ICUjeCBvbiBDUFUgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGNtY19pcnEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCSAgICAgICBfX2Z1bmNfXywgY21jX2lycSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIFNBTCBzcGVjIHN0YXRlcyB0aGlzIHNob3VsZCBydW4gdy8gaW50ZXJydXB0cyBlbmFibGVkICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtMTYxNCw3ICsxNjU5LDcgQEAKIAkgKi8KIAlpZiAoIXNvcy0+bW9uYXJjaCAmJiBhdG9taWNfYWRkX3JldHVybigxLCAmc2xhdmVzKSA9PSBudW1fb25saW5lX2NwdXMoKSkgewogCQltcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFByb21vdGluZyBjcHUgJWQgdG8gbW9uYXJjaC5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGNwdSk7CisJCSAgICAgICAgX19mdW5jX18sIGNwdSk7CiAJCWF0b21pY19kZWMoJnNsYXZlcyk7CiAJCXNvcy0+bW9uYXJjaCA9IDE7CiAJfQpAQCAtMTYyNiw3ICsxNjcxLDcgQEAKIAkgKi8KIAlpZiAoc29zLT5tb25hcmNoICYmIGF0b21pY19hZGRfcmV0dXJuKDEsICZtb25hcmNocykgPiAxKSB7CiAJCW1wcmludGsoS0VSTl9XQVJOSU5HICIlczogRGVtb3RpbmcgY3B1ICVkIHRvIHNsYXZlLlxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNwdSk7CisJCQkgICAgICAgX19mdW5jX18sIGNwdSk7CiAJCWF0b21pY19kZWMoJm1vbmFyY2hzKTsKIAkJc29zLT5tb25hcmNoID0gMDsKIAl9CkBAIC0xNjM3LDE1ICsxNjgyLDE1IEBACiAJCSAgICAgICBjcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIGVudGVycyAqLwogCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCi0JCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisJCQlpYTY0X21jYV9zcGluKF9fZnVuY19fKTsKIAkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQkJPT0gTk9USUZZX1NUT1ApCi0JCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisJCQlpYTY0X21jYV9zcGluKF9fZnVuY19fKTsKIAkJd2hpbGUgKG1vbmFyY2hfY3B1ICE9IC0xKQogCQkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KIAkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfTEVBVkUsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJCT09IE5PVElGWV9TVE9QKQotCQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCQkJaWE2NF9tY2Ffc3BpbihfX2Z1bmNfXyk7CiAJCW1wcmludGsoIlNsYXZlIG9uIGNwdSAlZCByZXR1cm5pbmcgdG8gbm9ybWFsIHNlcnZpY2UuXG4iLCBjcHUpOwogCQlzZXRfY3Vycl90YXNrKGNwdSwgcHJldmlvdXNfY3VycmVudCk7CiAJCWlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY3B1XSA9IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX05PVERPTkU7CkBAIC0xNjU2LDcgKzE3MDEsNyBAQAogCW1vbmFyY2hfY3B1ID0gY3B1OwogCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfRU5URVIsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCi0JCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwkJaWE2NF9tY2Ffc3BpbihfX2Z1bmNfXyk7CiAKIAkvKgogCSAqIFdhaXQgZm9yIGEgYml0LiAgT24gc29tZSBtYWNoaW5lcyAoZS5nLiwgSFAncyB6eDIwMDAgYW5kIHp4NjAwMCwgSU5JVCBjYW4gYmUKQEAgLTE2NzMsMTAgKzE3MTgsMTAgQEAKIAkgKi8KIAlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsICJJTklUIiwgcmVncywgKGxvbmcpJm5kLCAwLCAwKQogCQkJPT0gTk9USUZZX1NUT1ApCi0JCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwkJaWE2NF9tY2Ffc3BpbihfX2Z1bmNfXyk7CiAJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApCiAJCQk9PSBOT1RJRllfU1RPUCkKLQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCQlpYTY0X21jYV9zcGluKF9fZnVuY19fKTsKIAltcHJpbnRrKCJcbklOSVQgZHVtcCBjb21wbGV0ZS4gIE1vbmFyY2ggb24gY3B1ICVkIHJldHVybmluZyB0byBub3JtYWwgc2VydmljZS5cbiIsIGNwdSk7CiAJYXRvbWljX2RlYygmbW9uYXJjaHMpOwogCXNldF9jdXJyX3Rhc2soY3B1LCBwcmV2aW91c19jdXJyZW50KTsKQEAgLTE4ODQsNyArMTkyOSw3IEBACiAJCS5wcmlvcml0eSA9IDAvKiB3ZSBuZWVkIHRvIG5vdGlmaWVkIGxhc3QgKi8KIAl9OwogCi0JSUE2NF9NQ0FfREVCVUcoIiVzOiBiZWdpblxuIiwgX19GVU5DVElPTl9fKTsKKwlJQTY0X01DQV9ERUJVRygiJXM6IGJlZ2luXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBDbGVhciB0aGUgUmVuZGV6IGNoZWNraW4gZmxhZyBmb3IgYWxsIGNwdXMgKi8KIAlmb3IoaSA9IDAgOyBpIDwgTlJfQ1BVUzsgaSsrKQpAQCAtMTkyOCw3ICsxOTczLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCUlBNjRfTUNBX0RFQlVHKCIlczogcmVnaXN0ZXJlZCBNQ0EgcmVuZGV6dm91cyBzcGlubG9vcCBhbmQgd2FrZXVwIG1lY2guXG4iLCBfX0ZVTkNUSU9OX18pOworCUlBNjRfTUNBX0RFQlVHKCIlczogcmVnaXN0ZXJlZCBNQ0EgcmVuZGV6dm91cyBzcGlubG9vcCBhbmQgd2FrZXVwIG1lY2guXG4iLCBfX2Z1bmNfXyk7CiAKIAlpYTY0X21jX2luZm8uaW1pX21jYV9oYW5kbGVyICAgICAgICA9IGlhNjRfdHBhKG1jYV9obGRscl9wdHItPmZwKTsKIAkvKgpAQCAtMTk0OSw3ICsxOTk0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCUlBNjRfTUNBX0RFQlVHKCIlczogcmVnaXN0ZXJlZCBPUyBNQ0EgaGFuZGxlciB3aXRoIFNBTCBhdCAweCVseCwgZ3AgPSAweCVseFxuIiwgX19GVU5DVElPTl9fLAorCUlBNjRfTUNBX0RFQlVHKCIlczogcmVnaXN0ZXJlZCBPUyBNQ0EgaGFuZGxlciB3aXRoIFNBTCBhdCAweCVseCwgZ3AgPSAweCVseFxuIiwgX19mdW5jX18sCiAJCSAgICAgICBpYTY0X21jX2luZm8uaW1pX21jYV9oYW5kbGVyLCBpYTY0X3RwYShtY2FfaGxkbHJfcHRyLT5ncCkpOwogCiAJLyoKQEAgLTE5NjEsNyArMjAwNiw3IEBACiAJaWE2NF9tY19pbmZvLmltaV9zbGF2ZV9pbml0X2hhbmRsZXIJCT0gaWE2NF90cGEoaW5pdF9obGRscl9wdHJfc2xhdmUtPmZwKTsKIAlpYTY0X21jX2luZm8uaW1pX3NsYXZlX2luaXRfaGFuZGxlcl9zaXplCT0gMDsKIAotCUlBNjRfTUNBX0RFQlVHKCIlczogT1MgSU5JVCBoYW5kbGVyIGF0ICVseFxuIiwgX19GVU5DVElPTl9fLAorCUlBNjRfTUNBX0RFQlVHKCIlczogT1MgSU5JVCBoYW5kbGVyIGF0ICVseFxuIiwgX19mdW5jX18sCiAJCSAgICAgICBpYTY0X21jX2luZm8uaW1pX21vbmFyY2hfaW5pdF9oYW5kbGVyKTsKIAogCS8qIFJlZ2lzdGVyIHRoZSBvcyBpbml0IGhhbmRsZXIgd2l0aCBTQUwgKi8KQEAgLTE5ODIsNyArMjAyNyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlJQTY0X01DQV9ERUJVRygiJXM6IHJlZ2lzdGVyZWQgT1MgSU5JVCBoYW5kbGVyIHdpdGggU0FMXG4iLCBfX0ZVTkNUSU9OX18pOworCUlBNjRfTUNBX0RFQlVHKCIlczogcmVnaXN0ZXJlZCBPUyBJTklUIGhhbmRsZXIgd2l0aCBTQUxcbiIsIF9fZnVuY19fKTsKIAogCS8qCiAJICogIENvbmZpZ3VyZSB0aGUgQ01DSS9QIHZlY3RvciBhbmQgaGFuZGxlci4gSW50ZXJydXB0cyBmb3IgQ01DIGFyZQpAQCAtMjA0Miw3ICsyMDg3LDcgQEAKIAljbWNfcG9sbGluZ19lbmFibGVkID0gMDsKIAlzY2hlZHVsZV93b3JrKCZjbWNfZW5hYmxlX3dvcmspOwogCi0JSUE2NF9NQ0FfREVCVUcoIiVzOiBDTUNJL1Agc2V0dXAgYW5kIGVuYWJsZWQuXG4iLCBfX0ZVTkNUSU9OX18pOworCUlBNjRfTUNBX0RFQlVHKCIlczogQ01DSS9QIHNldHVwIGFuZCBlbmFibGVkLlxuIiwgX19mdW5jX18pOwogCiAjaWZkZWYgQ09ORklHX0FDUEkKIAkvKiBTZXR1cCB0aGUgQ1BFSS9QIHZlY3RvciBhbmQgaGFuZGxlciAqLwpAQCAtMjA2NSwxNyArMjExMCwxNyBAQAogCQkJCWlhNjRfY3BlX2lycSA9IGlycTsKIAkJCQlpYTY0X21jYV9yZWdpc3Rlcl9jcGV2KGNwZV92ZWN0b3IpOwogCQkJCUlBNjRfTUNBX0RFQlVHKCIlczogQ1BFSS9QIHNldHVwIGFuZCBlbmFibGVkLlxuIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJX19mdW5jX18pOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGZpbmQgaXJxIGZvciBDUEUgIgogCQkJCQkiaW50ZXJydXB0IGhhbmRsZXIsIHZlY3RvciAlZFxuIiwKLQkJCQkJX19GVU5DVElPTl9fLCBjcGVfdmVjdG9yKTsKKwkJCQkJX19mdW5jX18sIGNwZV92ZWN0b3IpOwogCQl9CiAJCS8qIElmIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBDUEVJLCBnZXQgdGhlIHRpbWVyIGdvaW5nLiAqLwogCQlpZiAoY3BlX3BvbGxfZW5hYmxlZCkgewogCQkJaWE2NF9tY2FfY3BlX3BvbGwoMFVMKTsKLQkJCUlBNjRfTUNBX0RFQlVHKCIlczogQ1BFUCBzZXR1cCBhbmQgZW5hYmxlZC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJQTY0X01DQV9ERUJVRygiJXM6IENQRVAgc2V0dXAgYW5kIGVuYWJsZWQuXG4iLCBfX2Z1bmNfXyk7CiAJCX0KIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKaW5kZXggOGJjN2QyNS4uYTA2ZDQ2NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKQEAgLTIxOSw4ICsyMTksMTMgQEAKIAltb3YgcjIwPUlBNjRfVFJfQ1VSUkVOVF9TVEFDSwogCTs7CiAJaXRyLmQgZHRyW3IyMF09cjE2CisJR0VUX1RISVNfUEFERFIocjIsIGlhNjRfbWNhX3RyX3JlbG9hZCkKKwltb3YgcjE4ID0gMQogCTs7CiAJc3Jsei5kCisJOzsKKwlzdDggW3IyXSA9cjE4CisJOzsKIAogZG9uZV90bGJfcHVyZ2VfYW5kX3JlbG9hZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9taW5zdGF0ZS5oIGIvYXJjaC9pYTY0L2tlcm5lbC9taW5zdGF0ZS5oCmluZGV4IGM5YWM4YmEuLjdjNTQ4YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWluc3RhdGUuaAorKysgYi9hcmNoL2lhNjQva2VybmVsL21pbnN0YXRlLmgKQEAgLTMsNiArMywxOCBAQAogCiAjaW5jbHVkZSAiZW50cnkuaCIKIAorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisvKiByZWFkIGFyLml0YyBpbiBhZHZhbmNlLCBhbmQgdXNlIGl0IGJlZm9yZSBsZWF2aW5nIGJhbmsgMCAqLworI2RlZmluZSBBQ0NPVU5UX0dFVF9TVEFNUAkJCQlcCisocFVTdGspIG1vdi5tIHIyMD1hci5pdGM7CisjZGVmaW5lIEFDQ09VTlRfU1lTX0VOVEVSCQkJCVwKKyhwVVN0aykgYnIuY2FsbC5zcG50IHJwPWFjY291bnRfc3lzX2VudGVyCQlcCisJOzsKKyNlbHNlCisjZGVmaW5lIEFDQ09VTlRfR0VUX1NUQU1QCisjZGVmaW5lIEFDQ09VTlRfU1lTX0VOVEVSCisjZW5kaWYKKwogLyoKICAqIERPX1NBVkVfTUlOIHN3aXRjaGVzIHRvIHRoZSBrZXJuZWwgc3RhY2tzIChpZiBuZWNlc3NhcnkpIGFuZCBzYXZlcwogICogdGhlIG1pbmltdW0gc3RhdGUgbmVjZXNzYXJ5IHRoYXQgYWxsb3dzIHVzIHRvIHR1cm4gcHNyLmljIGJhY2sKQEAgLTEyMiwxMSArMTM0LDEzIEBACiAJOzsJCQkJCQkJCQkJCVwKIC5tZW0ub2Zmc2V0IDAsMDsgc3Q4LnNwaWxsIFtyMTZdPXIyLDE2OwkJCQkJCQkJXAogLm1lbS5vZmZzZXQgOCwwOyBzdDguc3BpbGwgW3IxN109cjMsMTY7CQkJCQkJCQlcCisJQUNDT1VOVF9HRVRfU1RBTVAJCQkJCQkJCQlcCiAJYWRkcyByMj1JQTY0X1BUX1JFR1NfUjE2X09GRlNFVCxyMTsJCQkJCQkJXAogCTs7CQkJCQkJCQkJCQlcCiAJRVhUUkE7CQkJCQkJCQkJCQlcCiAJbW92bCByMT1fX2dwOwkJLyogZXN0YWJsaXNoIGtlcm5lbCBnbG9iYWwgcG9pbnRlciAqLwkJCQlcCiAJOzsJCQkJCQkJCQkJCVwKKwlBQ0NPVU5UX1NZU19FTlRFUgkJCQkJCQkJCVwKIAlic3cuMTsJCQkvKiBzd2l0Y2ggYmFjayB0byBiYW5rIDEgKG11c3QgYmUgbGFzdCBpbiBpbnNuIGdyb3VwKSAqLwlcCiAJOzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZTU4ZjQzNi4uZTgzZTJlYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC00OTMsNyArNDkzLDcgQEAKIAltb2QtPmFyY2gub3BkLT5zaF9hZGRyYWxpZ24gPSA4OwogCW1vZC0+YXJjaC5vcGQtPnNoX3NpemUgPSBmZGVzY3MgKiBzaXplb2Yoc3RydWN0IGZkZXNjKTsKIAlERUJVR1AoIiVzOiBjb3JlLnBsdD0lbHgsIGluaXQucGx0PSVseCwgZ290PSVseCwgZmRlc2M9JWx4XG4iLAotCSAgICAgICBfX0ZVTkNUSU9OX18sIG1vZC0+YXJjaC5jb3JlX3BsdC0+c2hfc2l6ZSwgbW9kLT5hcmNoLmluaXRfcGx0LT5zaF9zaXplLAorCSAgICAgICBfX2Z1bmNfXywgbW9kLT5hcmNoLmNvcmVfcGx0LT5zaF9zaXplLCBtb2QtPmFyY2guaW5pdF9wbHQtPnNoX3NpemUsCiAJICAgICAgIG1vZC0+YXJjaC5nb3QtPnNoX3NpemUsIG1vZC0+YXJjaC5vcGQtPnNoX3NpemUpOwogCXJldHVybiAwOwogfQpAQCAtNTg1LDcgKzU4NSw3IEBACiAjaWYgQVJDSF9NT0RVTEVfREVCVUcKIAlpZiAocGx0X3RhcmdldChwbHQpICE9IHRhcmdldF9pcCkgewogCQlwcmludGsoIiVzOiBtaXN0YXJnZXRlZCBQTFQ6IHdhbnRlZCAlbHgsIGdvdCAlbHhcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHRhcmdldF9pcCwgcGx0X3RhcmdldChwbHQpKTsKKwkJICAgICAgIF9fZnVuY19fLCB0YXJnZXRfaXAsIHBsdF90YXJnZXQocGx0KSk7CiAJCSpva3AgPSAwOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03MDMsNyArNzAzLDcgQEAKIAkJaWYgKHJfdHlwZSA9PSBSX0lBNjRfUENSRUwyMUJJKSB7CiAJCQlpZiAoIWlzX2ludGVybmFsKG1vZCwgdmFsKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIHJlbG9jIGFnYWluc3Qgbm9uLWxvY2FsIHN5bWJvbCAoJWx4KVxuIiwKLQkJCQkgICAgICAgX19GVU5DVElPTl9fLCByZWxvY19uYW1lW3JfdHlwZV0sIHZhbCk7CisJCQkJICAgICAgIF9fZnVuY19fLCByZWxvY19uYW1lW3JfdHlwZV0sIHZhbCk7CiAJCQkJcmV0dXJuIC1FTk9FWEVDOwogCQkJfQogCQkJZm9ybWF0ID0gUkZfSU5TTjIxQjsKQEAgLTczNyw3ICs3MzcsNyBAQAogCQkgICAgICBjYXNlIFJfSUE2NF9MRFhNT1Y6CiAJCQlpZiAoZ3BfYWRkcmVzc2FibGUobW9kLCB2YWwpKSB7CiAJCQkJLyogdHVybiAibGQ4IiBpbnRvICJtb3YiOiAqLwotCQkJCURFQlVHUCgiJXM6IHBhdGNoaW5nIGxkOCBhdCAlcCB0byBtb3ZcbiIsIF9fRlVOQ1RJT05fXywgbG9jYXRpb24pOworCQkJCURFQlVHUCgiJXM6IHBhdGNoaW5nIGxkOCBhdCAlcCB0byBtb3ZcbiIsIF9fZnVuY19fLCBsb2NhdGlvbik7CiAJCQkJaWE2NF9wYXRjaCgodTY0KSBsb2NhdGlvbiwgMHgxZmZmODBmZTAwMFVMLCAweDEwMDAwMDAwMDAwVUwpOwogCQkJfQogCQkJcmV0dXJuIDA7CkBAIC03NzEsNyArNzcxLDcgQEAKIAlpZiAoIW9rKQogCQlyZXR1cm4gLUVOT0VYRUM7CiAKLQlERUJVR1AoIiVzOiBbJXBdPC0lMDE2bHggPSAlcyglbHgpXG4iLCBfX0ZVTkNUSU9OX18sIGxvY2F0aW9uLCB2YWwsCisJREVCVUdQKCIlczogWyVwXTwtJTAxNmx4ID0gJXMoJWx4KVxuIiwgX19mdW5jX18sIGxvY2F0aW9uLCB2YWwsCiAJICAgICAgIHJlbG9jX25hbWVbcl90eXBlXSA/IHJlbG9jX25hbWVbcl90eXBlXSA6ICI/Iiwgc3ltLT5zdF92YWx1ZSArIGFkZGVuZCk7CiAKIAlzd2l0Y2ggKGZvcm1hdCkgewpAQCAtODA3LDcgKzgwNyw3IEBACiAJRWxmNjRfU2hkciAqdGFyZ2V0X3NlYzsKIAlpbnQgcmV0OwogCi0JREVCVUdQKCIlczogYXBwbHlpbmcgc2VjdGlvbiAldSAoJXUgcmVsb2NzKSB0byAldVxuIiwgX19GVU5DVElPTl9fLAorCURFQlVHUCgiJXM6IGFwcGx5aW5nIHNlY3Rpb24gJXUgKCV1IHJlbG9jcykgdG8gJXVcbiIsIF9fZnVuY19fLAogCSAgICAgICByZWxzZWMsIG4sIHNlY2hkcnNbcmVsc2VjXS5zaF9pbmZvKTsKIAogCXRhcmdldF9zZWMgPSBzZWNoZHJzICsgc2VjaGRyc1tyZWxzZWNdLnNoX2luZm87CkBAIC04MzUsNyArODM1LDcgQEAKIAkJCWdwID0gbW9kLT5jb3JlX3NpemUgLyAyOwogCQlncCA9ICh1aW50NjRfdCkgbW9kLT5tb2R1bGVfY29yZSArICgoZ3AgKyA3KSAmIC04KTsKIAkJbW9kLT5hcmNoLmdwID0gZ3A7Ci0JCURFQlVHUCgiJXM6IHBsYWNpbmcgZ3AgYXQgMHglbHhcbiIsIF9fRlVOQ1RJT05fXywgZ3ApOworCQlERUJVR1AoIiVzOiBwbGFjaW5nIGdwIGF0IDB4JWx4XG4iLCBfX2Z1bmNfXywgZ3ApOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTkwMyw3ICs5MDMsNyBAQAogCQlpbml0ID0gc3RhcnQgKyBudW1fY29yZTsKIAl9CiAKLQlERUJVR1AoIiVzOiBuYW1lPSVzLCBncD0lbHgsIG51bV9pbml0PSVsdSwgbnVtX2NvcmU9JWx1XG4iLCBfX0ZVTkNUSU9OX18sCisJREVCVUdQKCIlczogbmFtZT0lcywgZ3A9JWx4LCBudW1faW5pdD0lbHUsIG51bV9jb3JlPSVsdVxuIiwgX19mdW5jX18sCiAJICAgICAgIG1vZC0+bmFtZSwgbW9kLT5hcmNoLmdwLCBudW1faW5pdCwgbnVtX2NvcmUpOwogCiAJLyoKQEAgLTkxMiwxMyArOTEyLDEzIEBACiAJaWYgKG51bV9jb3JlID4gMCkgewogCQltb2QtPmFyY2guY29yZV91bndfdGFibGUgPSB1bndfYWRkX3Vud2luZF90YWJsZShtb2QtPm5hbWUsIDAsIG1vZC0+YXJjaC5ncCwKIAkJCQkJCQkJY29yZSwgY29yZSArIG51bV9jb3JlKTsKLQkJREVCVUdQKCIlczogIGNvcmU6IGhhbmRsZT0lcCBbJXAtJXApXG4iLCBfX0ZVTkNUSU9OX18sCisJCURFQlVHUCgiJXM6ICBjb3JlOiBoYW5kbGU9JXAgWyVwLSVwKVxuIiwgX19mdW5jX18sCiAJCSAgICAgICBtb2QtPmFyY2guY29yZV91bndfdGFibGUsIGNvcmUsIGNvcmUgKyBudW1fY29yZSk7CiAJfQogCWlmIChudW1faW5pdCA+IDApIHsKIAkJbW9kLT5hcmNoLmluaXRfdW53X3RhYmxlID0gdW53X2FkZF91bndpbmRfdGFibGUobW9kLT5uYW1lLCAwLCBtb2QtPmFyY2guZ3AsCiAJCQkJCQkJCWluaXQsIGluaXQgKyBudW1faW5pdCk7Ci0JCURFQlVHUCgiJXM6ICBpbml0OiBoYW5kbGU9JXAgWyVwLSVwKVxuIiwgX19GVU5DVElPTl9fLAorCQlERUJVR1AoIiVzOiAgaW5pdDogaGFuZGxlPSVwIFslcC0lcClcbiIsIF9fZnVuY19fLAogCQkgICAgICAgbW9kLT5hcmNoLmluaXRfdW53X3RhYmxlLCBpbml0LCBpbml0ICsgbnVtX2luaXQpOwogCX0KIH0KQEAgLTkyNiw3ICs5MjYsNyBAQAogaW50CiBtb2R1bGVfZmluYWxpemUgKGNvbnN0IEVsZl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JREVCVUdQKCIlczogaW5pdDogZW50cnk9JXBcbiIsIF9fRlVOQ1RJT05fXywgbW9kLT5pbml0KTsKKwlERUJVR1AoIiVzOiBpbml0OiBlbnRyeT0lcFxuIiwgX19mdW5jX18sIG1vZC0+aW5pdCk7CiAJaWYgKG1vZC0+YXJjaC51bndpbmQpCiAJCXJlZ2lzdGVyX3Vud2luZF90YWJsZShtb2QpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCmluZGV4IGU4NmQwMjkuLjYwYzZlZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKQEAgLTU3LDcgKzU3LDcgQEAKIAlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuOwogCi0JaWYgKHJlYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjcHUpKQorCWlmIChpcnFfcHJlcGFyZV9tb3ZlKGlycSwgY3B1KSkKIAkJcmV0dXJuOwogCiAJcmVhZF9tc2lfbXNnKGlycSwgJm1zZyk7CkBAIC0xMTksNiArMTE5LDcgQEAKIAogc3RhdGljIHZvaWQgaWE2NF9hY2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogeworCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7CiAJbW92ZV9uYXRpdmVfaXJxKGlycSk7CiAJaWE2NF9lb2koKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbnVtYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9udW1hLmMKaW5kZXggYTc4YjQ1Zi4uYzkzNDIwYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9udW1hLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9udW1hLmMKQEAgLTczLDcgKzczLDcgQEAKIAlmb3Iobm9kZT0wOyBub2RlIDwgTUFYX05VTU5PREVTOyBub2RlKyspCiAJCWNwdXNfY2xlYXIobm9kZV90b19jcHVfbWFza1tub2RlXSk7CiAKLQlmb3IoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgKytjcHUpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9lYXJseV9jcHUoY3B1KSB7CiAJCW5vZGUgPSAtMTsKIAkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsraSkKIAkJCWlmIChjcHVfcGh5c2ljYWxfaWQoY3B1KSA9PSBub2RlX2NwdWlkW2ldLnBoeXNfaWQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGF0Y2guYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGF0Y2guYwppbmRleCAyY2I5NDI1Li5lMGRjYTg3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BhdGNoLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXRjaC5jCkBAIC0xMzUsMTAgKzEzNSwxMCBAQAogCiAJd2hpbGUgKG9mZnAgPCAoczMyICopIGVuZCkgewogCQl3cCA9ICh1NjQgKikgaWE2NF9pbXZhKChjaGFyICopIG9mZnAgKyAqb2ZmcCk7Ci0JCXdwWzBdID0gMHgwMDAwMDAwMTAwMDAwMDAwVUw7IC8qIG5vcC5tIDA7IG5vcC5pIDA7IG5vcC5pIDAgKi8KLQkJd3BbMV0gPSAweDAwMDQwMDAwMDAwMDAyMDBVTDsKLQkJd3BbMl0gPSAweDAwMDAwMDAxMDAwMDAwMTFVTDsgLyogbm9wLm0gMDsgbm9wLmkgMDsgYnIucmV0LnNwdGsubWFueSBiNiAqLwotCQl3cFszXSA9IDB4MDA4NDAwNjg4MDAwMDIwMFVMOworCQl3cFswXSA9IDB4MDAwMDAwMDEwMDAwMDAxMVVMOyAvKiBub3AubSAwOyBub3AuaSAwOyBici5yZXQuc3B0ay5tYW55IGI2ICovCisJCXdwWzFdID0gMHgwMDg0MDA2ODgwMDAwMjAwVUw7CisJCXdwWzJdID0gMHgwMDAwMDAwMTAwMDAwMDAwVUw7IC8qIG5vcC5tIDA7IG5vcC5pIDA7IG5vcC5pIDAgKi8KKwkJd3BbM10gPSAweDAwMDQwMDAwMDAwMDAyMDBVTDsKIAkJaWE2NF9mYyh3cCk7IGlhNjRfZmMod3AgKyAyKTsKIAkJKytvZmZwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKaW5kZXggZjZiOTk3MS4uZDFkMjRmNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKQEAgLTIyNywxMiArMjI3LDEyIEBACiAjaWZkZWYgUEZNX0RFQlVHR0lORwogI2RlZmluZSBEUFJJTlQoYSkgXAogCWRvIHsgXAotCQlpZiAodW5saWtlbHkocGZtX3N5c2N0bC5kZWJ1ZyA+MCkpIHsgcHJpbnRrKCIlcy4lZDogQ1BVJWQgWyVkXSAiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsgcHJpbnRrIGE7IH0gXAorCQlpZiAodW5saWtlbHkocGZtX3N5c2N0bC5kZWJ1ZyA+MCkpIHsgcHJpbnRrKCIlcy4lZDogQ1BVJWQgWyVkXSAiLCBfX2Z1bmNfXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgdGFza19waWRfbnIoY3VycmVudCkpOyBwcmludGsgYTsgfSBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBEUFJJTlRfb3ZmbChhKSBcCiAJZG8geyBcCi0JCWlmICh1bmxpa2VseShwZm1fc3lzY3RsLmRlYnVnID4gMCAmJiBwZm1fc3lzY3RsLmRlYnVnX292ZmwgPjApKSB7IHByaW50aygiJXMuJWQ6IENQVSVkIFslZF0gIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7IHByaW50ayBhOyB9IFwKKwkJaWYgKHVubGlrZWx5KHBmbV9zeXNjdGwuZGVidWcgPiAwICYmIHBmbV9zeXNjdGwuZGVidWdfb3ZmbCA+MCkpIHsgcHJpbnRrKCIlcy4lZDogQ1BVJWQgWyVkXSAiLCBfX2Z1bmNfXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgdGFza19waWRfbnIoY3VycmVudCkpOyBwcmludGsgYTsgfSBcCiAJfSB3aGlsZSAoMCkKICNlbmRpZgogCkBAIC00MjA0LDEwICs0MjA0LDEwIEBACiAJZG9fZWFjaF90aHJlYWQgKGcsIHQpIHsKIAkJaWYgKHQtPnRocmVhZC5wZm1fY29udGV4dCA9PSBjdHgpIHsKIAkJCXJldCA9IDA7Ci0JCQlicmVhazsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfSB3aGlsZV9lYWNoX3RocmVhZCAoZywgdCk7Ci0KK291dDoKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAKIAlEUFJJTlQoKCJwZm1fY2hlY2tfdGFza19leGlzdDogcmV0PSVkIGN0eD0lcFxuIiwgcmV0LCBjdHgpKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9kZWZhdWx0X3NtcGwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9kZWZhdWx0X3NtcGwuYwppbmRleCBhN2FmMWNiLi41ZjYzN2JiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jCkBAIC0yNCwxMiArMjQsMTIgQEAKICNpZmRlZiBERUZBVUxUX0RFQlVHCiAjZGVmaW5lIERQUklOVChhKSBcCiAJZG8geyBcCi0JCWlmICh1bmxpa2VseShwZm1fc3lzY3RsLmRlYnVnID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCAiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyBwcmludGsgYTsgfSBcCisJCWlmICh1bmxpa2VseShwZm1fc3lzY3RsLmRlYnVnID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCAiLCBfX2Z1bmNfXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSk7IHByaW50ayBhOyB9IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIERQUklOVF9vdmZsKGEpIFwKIAlkbyB7IFwKLQkJaWYgKHVubGlrZWx5KHBmbV9zeXNjdGwuZGVidWcgPiAwICYmIHBmbV9zeXNjdGwuZGVidWdfb3ZmbCA+MCkpIHsgcHJpbnRrKCIlcy4lZDogQ1BVJWQgIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgcHJpbnRrIGE7IH0gXAorCQlpZiAodW5saWtlbHkocGZtX3N5c2N0bC5kZWJ1ZyA+IDAgJiYgcGZtX3N5c2N0bC5kZWJ1Z19vdmZsID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCAiLCBfX2Z1bmNfXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSk7IHByaW50ayBhOyB9IFwKIAl9IHdoaWxlICgwKQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCA0OTkzN2EzLi5hNWVhODE3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjI1LDIxICs2MjUsNiBAQAogCWRvX2R1bXBfdGFza19mcHUoY3VycmVudCwgaW5mbywgYXJnKTsKIH0KIAotaW50Ci1kdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVsZl9ncmVnc2V0X3QgKnJlZ3MpCi17Ci0Jc3RydWN0IHVud19mcmFtZV9pbmZvIHRjb3JlX2luZm87Ci0KLQlpZiAoY3VycmVudCA9PSB0YXNrKSB7Ci0JCXVud19pbml0X3J1bm5pbmcoZG9fY29weV9yZWdzLCByZWdzKTsKLQl9IGVsc2UgewotCQltZW1zZXQoJnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29yZV9pbmZvKSk7Ci0JCXVud19pbml0X2Zyb21fYmxvY2tlZF90YXNrKCZ0Y29yZV9pbmZvLCB0YXNrKTsKLQkJZG9fY29weV90YXNrX3JlZ3ModGFzaywgJnRjb3JlX2luZm8sIHJlZ3MpOwotCX0KLQlyZXR1cm4gMTsKLX0KLQogdm9pZAogaWE2NF9lbGZfY29yZV9jb3B5X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpwdCwgZWxmX2dyZWdzZXRfdCBkc3QpCiB7CkBAIC02NDcsMjEgKzYzMiw2IEBACiB9CiAKIGludAotZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbGZfZnByZWdzZXRfdCAqZHN0KQotewotCXN0cnVjdCB1bndfZnJhbWVfaW5mbyB0Y29yZV9pbmZvOwotCi0JaWYgKGN1cnJlbnQgPT0gdGFzaykgewotCQl1bndfaW5pdF9ydW5uaW5nKGRvX2R1bXBfZnB1LCBkc3QpOwotCX0gZWxzZSB7Ci0JCW1lbXNldCgmdGNvcmVfaW5mbywgMCwgc2l6ZW9mKHRjb3JlX2luZm8pKTsKLQkJdW53X2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soJnRjb3JlX2luZm8sIHRhc2spOwotCQlkb19kdW1wX3Rhc2tfZnB1KHRhc2ssICZ0Y29yZV9pbmZvLCBkc3QpOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotaW50CiBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKnB0LCBlbGZfZnByZWdzZXRfdCBkc3QpCiB7CiAJdW53X2luaXRfcnVubmluZyhkb19kdW1wX2ZwdSwgZHN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IDMzMWQ2NzYuLjJhOTk0M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMyw2ICszLDkgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28KICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbnRlbCBDbworICogIDIwMDYtMDgtMTIJLSBJQTY0IE5hdGl2ZSBVdHJhY2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydCBhZGRlZCBieQorICoJQW5pbCBTIEtlc2hhdmFtdXJ0aHkgPGFuaWwucy5rZXNoYXZhbXVydGh5QGludGVsLmNvbT4KICAqCiAgKiBEZXJpdmVkIGZyb20gdGhlIHg4NiBhbmQgQWxwaGEgdmVyc2lvbnMuCiAgKi8KQEAgLTE3LDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTY5OCw1MiArNzAzLDYgQEAKIH0KIAogLyoKLSAqIEdEQiBhcHBhcmVudGx5IHdhbnRzIHRvIGJlIGFibGUgdG8gcmVhZCB0aGUgcmVnaXN0ZXItYmFja2luZyBzdG9yZQotICogb2YgYW55IHRocmVhZCB3aGVuIGF0dGFjaGVkIHRvIGEgZ2l2ZW4gcHJvY2Vzcy4gIElmIHdlIGFyZSBwZWVraW5nCi0gKiBvciBwb2tpbmcgYW4gYWRkcmVzcyB0aGF0IGhhcHBlbnMgdG8gcmVzaWRlIGluIHRoZSBrZXJuZWwtYmFja2luZwotICogc3RvcmUgb2YgYW5vdGhlciB0aHJlYWQsIHdlIG5lZWQgdG8gYXR0YWNoIHRvIHRoYXQgdGhyZWFkLCBiZWNhdXNlCi0gKiBvdGhlcndpc2Ugd2UgZW5kIHVwIGFjY2Vzc2luZyBzdGFsZSBkYXRhLgotICoKLSAqIHRhc2tfbGlzdF9sb2NrIG11c3QgYmUgcmVhZC1sb2NrZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyByb3V0aW5lIQotICovCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICoKLWZpbmRfdGhyZWFkX2Zvcl9hZGRyIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRoaXMsICpuZXh0OwotCWludCBtbV91c2VyczsKLQotCWlmICghKG1tID0gZ2V0X3Rhc2tfbW0oY2hpbGQpKSkKLQkJcmV0dXJuIGNoaWxkOwotCi0JLyogLTEgYmVjYXVzZSBvZiBvdXIgZ2V0X3Rhc2tfbW0oKTogKi8KLQltbV91c2VycyA9IGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpIC0gMTsKLQlpZiAobW1fdXNlcnMgPD0gMSkKLQkJZ290byBvdXQ7CQkvKiBub3QgbXVsdGktdGhyZWFkZWQgKi8KLQotCS8qCi0JICogVHJhdmVyc2UgdGhlIGN1cnJlbnQgcHJvY2VzcycgY2hpbGRyZW4gbGlzdC4gIEV2ZXJ5IHRhc2sgdGhhdAotCSAqIG9uZSBhdHRhY2hlcyB0byBiZWNvbWVzIGEgY2hpbGQuICBBbmQgaXQgaXMgb25seSBhdHRhY2hlZCBjaGlsZHJlbgotCSAqIG9mIHRoZSBkZWJ1Z2dlciB0aGF0IGFyZSBvZiBpbnRlcmVzdCAocHRyYWNlX2NoZWNrX2F0dGFjaCBjaGVja3MKLQkgKiBmb3IgdGhpcykuCi0JICovCi0gCWxpc3RfZm9yX2VhY2hfc2FmZSh0aGlzLCBuZXh0LCAmY3VycmVudC0+Y2hpbGRyZW4pIHsKLQkJcCA9IGxpc3RfZW50cnkodGhpcywgc3RydWN0IHRhc2tfc3RydWN0LCBzaWJsaW5nKTsKLQkJaWYgKHAtPnRnaWQgIT0gY2hpbGQtPnRnaWQpCi0JCQljb250aW51ZTsKLQkJaWYgKHRocmVhZF9tYXRjaGVzKHAsIGFkZHIpKSB7Ci0JCQljaGlsZCA9IHA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotICBvdXQ6Ci0JbW1wdXQobW0pOwotCXJldHVybiBjaGlsZDsKLX0KLQotLyoKICAqIFdyaXRlIGYzMi1mMTI3IGJhY2sgdG8gdGFzay0+dGhyZWFkLmZwaCBpZiBpdCBoYXMgYmVlbiBtb2RpZmllZC4KICAqLwogaW5saW5lIHZvaWQKQEAgLTc4NiwyNSArNzQ1LDYgQEAKIAlwc3ItPmRmaCA9IDE7CiB9CiAKLXN0YXRpYyBpbnQKLWFjY2Vzc19mciAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCBpbnQgcmVnbnVtLCBpbnQgaGksCi0JICAgdW5zaWduZWQgbG9uZyAqZGF0YSwgaW50IHdyaXRlX2FjY2VzcykKLXsKLQlzdHJ1Y3QgaWE2NF9mcHJlZyBmcHZhbDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdW53X2dldF9mcihpbmZvLCByZWdudW0sICZmcHZhbCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAod3JpdGVfYWNjZXNzKSB7Ci0JCWZwdmFsLnUuYml0c1toaV0gPSAqZGF0YTsKLQkJcmV0ID0gdW53X3NldF9mcihpbmZvLCByZWdudW0sIGZwdmFsKTsKLQl9IGVsc2UKLQkJKmRhdGEgPSBmcHZhbC51LmJpdHNbaGldOwotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBDaGFuZ2UgdGhlIG1hY2hpbmUtc3RhdGUgb2YgQ0hJTEQgc3VjaCB0aGF0IGl0IHdpbGwgcmV0dXJuIHZpYSB0aGUgbm9ybWFsCiAgKiBrZXJuZWwgZXhpdC1wYXRoLCByYXRoZXIgdGhhbiB0aGUgc3lzY2FsbC1leGl0IHBhdGguCkBAIC04MjYsMTQgKzc2NiwxNCBAQAogCQlpZiAoKGxvbmcpKCh1bnNpZ25lZCBsb25nKWNoaWxkICsgSUE2NF9TVEtfT0ZGU0VUIC0gc3ApCiAJCSAgICA8IElBNjRfUFRfUkVHU19TSVpFKSB7CiAJCQlkcHJpbnRrKCJwdHJhY2UuJXM6IHJhbiBvZmYgdGhlIHRvcCBvZiB0aGUga2VybmVsICIKLQkJCQkic3RhY2tcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJInN0YWNrXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKHVud19nZXRfcHIgKCZwcmV2X2luZm8sICZwcikgPCAwKSB7CiAJCQl1bndfZ2V0X3JwKCZwcmV2X2luZm8sICZpcCk7CiAJCQlkcHJpbnRrKCJwdHJhY2UuJXM6IGZhaWxlZCB0byByZWFkICIKIAkJCQkicHJlZGljYXRlIHJlZ2lzdGVyIChpcD0weCVseClcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBpcCk7CisJCQkJX19mdW5jX18sIGlwKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAodW53X2lzX2ludHJfZnJhbWUoJmluZm8pCkBAIC05MDYsMzMwICs4NDYsNyBAQAogCiBzdGF0aWMgaW50CiBhY2Nlc3NfdWFyZWEgKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkgICAgICB1bnNpZ25lZCBsb25nICpkYXRhLCBpbnQgd3JpdGVfYWNjZXNzKQotewotCXVuc2lnbmVkIGxvbmcgKnB0ciwgcmVnbnVtLCB1cmJzX2VuZCwgcm5hdF9hZGRyLCBjZm07Ci0Jc3RydWN0IHN3aXRjaF9zdGFjayAqc3c7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0OwotIwlkZWZpbmUgcHRfcmVnX2FkZHIocHQsIHJlZykJKCh2b2lkICopCQkJICAgIFwKLQkJCQkJICgodW5zaWduZWQgbG9uZykgKHB0KQkJICAgIFwKLQkJCQkJICArIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByZWcpKSkKLQotCi0JcHQgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOwotCXN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgKGNoaWxkLT50aHJlYWQua3NwICsgMTYpOwotCi0JaWYgKChhZGRyICYgMHg3KSAhPSAwKSB7Ci0JCWRwcmludGsoInB0cmFjZTogdW5hbGlnbmVkIHJlZ2lzdGVyIGFkZHJlc3MgMHglbHhcbiIsIGFkZHIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKGFkZHIgPCBQVF9GMTI3ICsgMTYpIHsKLQkJLyogYWNjZXNzaW5nIGZwaCAqLwotCQlpZiAod3JpdGVfYWNjZXNzKQotCQkJaWE2NF9zeW5jX2ZwaChjaGlsZCk7Ci0JCWVsc2UKLQkJCWlhNjRfZmx1c2hfZnBoKGNoaWxkKTsKLQkJcHRyID0gKHVuc2lnbmVkIGxvbmcgKikKLQkJCSgodW5zaWduZWQgbG9uZykgJmNoaWxkLT50aHJlYWQuZnBoICsgYWRkcik7Ci0JfSBlbHNlIGlmICgoYWRkciA+PSBQVF9GMTApICYmIChhZGRyIDwgUFRfRjExICsgMTYpKSB7Ci0JCS8qIHNjcmF0Y2ggcmVnaXN0ZXJzIHVudG91Y2hlZCBieSBrZXJuZWwgKHNhdmVkIGluIHB0X3JlZ3MpICovCi0JCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCBmMTApICsgKGFkZHIgLSBQVF9GMTApOwotCX0gZWxzZSBpZiAoYWRkciA+PSBQVF9GMTIgJiYgYWRkciA8IFBUX0YxNSArIDE2KSB7Ci0JCS8qCi0JCSAqIFNjcmF0Y2ggcmVnaXN0ZXJzIHVudG91Y2hlZCBieSBrZXJuZWwgKHNhdmVkIGluCi0JCSAqIHN3aXRjaF9zdGFjaykuCi0JCSAqLwotCQlwdHIgPSAodW5zaWduZWQgbG9uZyAqKSAoKGxvbmcpIHN3Ci0JCQkJCSArIChhZGRyIC0gUFRfTkFUX0JJVFMgLSAzMikpOwotCX0gZWxzZSBpZiAoYWRkciA8IFBUX0FSX0xDICsgOCkgewotCQkvKiBwcmVzZXJ2ZWQgc3RhdGU6ICovCi0JCXN0cnVjdCB1bndfZnJhbWVfaW5mbyBpbmZvOwotCQljaGFyIG5hdCA9IDA7Ci0JCWludCByZXQ7Ci0KLQkJdW53X2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soJmluZm8sIGNoaWxkKTsKLQkJaWYgKHVud191bndpbmRfdG9fdXNlcigmaW5mbykgPCAwKQotCQkJcmV0dXJuIC0xOwotCi0JCXN3aXRjaCAoYWRkcikgewotCQkgICAgICBjYXNlIFBUX05BVF9CSVRTOgotCQkJcmV0dXJuIGFjY2Vzc19uYXRfYml0cyhjaGlsZCwgcHQsICZpbmZvLAotCQkJCQkgICAgICAgZGF0YSwgd3JpdGVfYWNjZXNzKTsKLQotCQkgICAgICBjYXNlIFBUX1I0OiBjYXNlIFBUX1I1OiBjYXNlIFBUX1I2OiBjYXNlIFBUX1I3OgotCQkJaWYgKHdyaXRlX2FjY2VzcykgewotCQkJCS8qIHJlYWQgTmFUIGJpdCBmaXJzdDogKi8KLQkJCQl1bnNpZ25lZCBsb25nIGR1bW15OwotCi0JCQkJcmV0ID0gdW53X2dldF9ncigmaW5mbywgKGFkZHIgLSBQVF9SNCkvOCArIDQsCi0JCQkJCQkgJmR1bW15LCAmbmF0KTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCXJldHVybiB1bndfYWNjZXNzX2dyKCZpbmZvLCAoYWRkciAtIFBUX1I0KS84ICsgNCwgZGF0YSwKLQkJCQkJICAgICAmbmF0LCB3cml0ZV9hY2Nlc3MpOwotCi0JCSAgICAgIGNhc2UgUFRfQjE6IGNhc2UgUFRfQjI6IGNhc2UgUFRfQjM6Ci0JCSAgICAgIGNhc2UgUFRfQjQ6IGNhc2UgUFRfQjU6Ci0JCQlyZXR1cm4gdW53X2FjY2Vzc19icigmaW5mbywgKGFkZHIgLSBQVF9CMSkvOCArIDEsIGRhdGEsCi0JCQkJCSAgICAgd3JpdGVfYWNjZXNzKTsKLQotCQkgICAgICBjYXNlIFBUX0FSX0VDOgotCQkJcmV0dXJuIHVud19hY2Nlc3NfYXIoJmluZm8sIFVOV19BUl9FQywgZGF0YSwKLQkJCQkJICAgICB3cml0ZV9hY2Nlc3MpOwotCi0JCSAgICAgIGNhc2UgUFRfQVJfTEM6Ci0JCQlyZXR1cm4gdW53X2FjY2Vzc19hcigmaW5mbywgVU5XX0FSX0xDLCBkYXRhLAotCQkJCQkgICAgIHdyaXRlX2FjY2Vzcyk7Ci0KLQkJICAgICAgZGVmYXVsdDoKLQkJCWlmIChhZGRyID49IFBUX0YyICYmIGFkZHIgPCBQVF9GNSArIDE2KQotCQkJCXJldHVybiBhY2Nlc3NfZnIoJmluZm8sIChhZGRyIC0gUFRfRjIpLzE2ICsgMiwKLQkJCQkJCSAoYWRkciAmIDgpICE9IDAsIGRhdGEsCi0JCQkJCQkgd3JpdGVfYWNjZXNzKTsKLQkJCWVsc2UgaWYgKGFkZHIgPj0gUFRfRjE2ICYmIGFkZHIgPCBQVF9GMzEgKyAxNikKLQkJCQlyZXR1cm4gYWNjZXNzX2ZyKCZpbmZvLAotCQkJCQkJIChhZGRyIC0gUFRfRjE2KS8xNiArIDE2LAotCQkJCQkJIChhZGRyICYgOCkgIT0gMCwKLQkJCQkJCSBkYXRhLCB3cml0ZV9hY2Nlc3MpOwotCQkJZWxzZSB7Ci0JCQkJZHByaW50aygicHRyYWNlOiByZWplY3RpbmcgYWNjZXNzIHRvIHJlZ2lzdGVyICIKLQkJCQkJImFkZHJlc3MgMHglbHhcbiIsIGFkZHIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoYWRkciA8IFBUX0Y5KzE2KSB7Ci0JCS8qIHNjcmF0Y2ggc3RhdGUgKi8KLQkJc3dpdGNoIChhZGRyKSB7Ci0JCSAgICAgIGNhc2UgUFRfQVJfQlNQOgotCQkJLyoKLQkJCSAqIEJ5IGNvbnZlbnRpb24sIHdlIHVzZSBQVF9BUl9CU1AgdG8gcmVmZXIgdG8KLQkJCSAqIHRoZSBlbmQgb2YgdGhlIHVzZXItbGV2ZWwgYmFja2luZyBzdG9yZS4KLQkJCSAqIFVzZSBpYTY0X3JzZV9za2lwX3JlZ3MoUFRfQVJfQlNQLCAtQ0ZNLnNvZikKLQkJCSAqIHRvIGdldCB0aGUgcmVhbCB2YWx1ZSBvZiBhci5ic3AgYXQgdGhlIHRpbWUKLQkJCSAqIHRoZSBrZXJuZWwgd2FzIGVudGVyZWQuCi0JCQkgKgotCQkJICogRnVydGhlcm1vcmUsIHdoZW4gY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mCi0JCQkgKiBQVF9BUl9CU1AgKG9yIFBUX0NGTSkgd2UgTVVTVCBjb3B5IGFueQotCQkJICogdXNlcnMtbGV2ZWwgc3RhY2tlZCByZWdpc3RlcnMgdGhhdCBhcmUKLQkJCSAqIHN0b3JlZCBvbiB0aGUga2VybmVsIHN0YWNrIGJhY2sgdG8KLQkJCSAqIHVzZXItc3BhY2UgYmVjYXVzZSBvdGhlcndpc2UsIHdlIG1pZ2h0IGVuZAotCQkJICogdXAgY2xvYmJlcmluZyBrZXJuZWwgc3RhY2tlZCByZWdpc3RlcnMuCi0JCQkgKiBBbHNvLCBpZiB0aGlzIGhhcHBlbnMgd2hpbGUgdGhlIHRhc2sgaXMKLQkJCSAqIGJsb2NrZWQgaW4gYSBzeXN0ZW0gY2FsbCwgd2hpY2ggY29udmVydCB0aGUKLQkJCSAqIHN0YXRlIHN1Y2ggdGhhdCB0aGUgbm9uLXN5c3RlbS1jYWxsIGV4aXQKLQkJCSAqIHBhdGggaXMgdXNlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwcm9wZXIKLQkJCSAqIHN0YXRlIHdpbGwgYmUgcGlja2VkIHVwIHdoZW4gcmVzdW1pbmcKLQkJCSAqIGV4ZWN1dGlvbi4gIEhvd2V2ZXIsIGl0ICphbHNvKiBtZWFucyB0aGF0Ci0JCQkgKiBvbmNlIHdlIHdyaXRlIFBUX0FSX0JTUC9QVF9DRk0sIGl0IHdvbid0IGJlCi0JCQkgKiBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIHN5c2NhbGwgYXJndW1lbnRzIG9mCi0JCQkgKiB0aGUgcGVuZGluZyBzeXN0ZW0gY2FsbCBhbnkgbG9uZ2VyLiAgVGhpcwotCQkJICogc2hvdWxkbid0IGJlIGFuIGlzc3VlIGJlY2F1c2UgbW9kaWZ5aW5nCi0JCQkgKiBQVF9BUl9CU1AvUFRfQ0ZNIGdlbmVyYWxseSBpbXBsaWVzIHRoYXQKLQkJCSAqIHdlJ3JlIGVpdGhlciBhYmFuZG9uaW5nIHRoZSBwZW5kaW5nIHN5c3RlbQotCQkJICogY2FsbCBvciB0aGF0IHdlIGRlZmVyIGl0J3MgcmUtZXhlY3V0aW9uCi0JCQkgKiAoZS5nLiwgZHVlIHRvIEdEQiBkb2luZyBhbiBpbmZlcmlvcgotCQkJICogZnVuY3Rpb24gY2FsbCkuCi0JCQkgKi8KLQkJCXVyYnNfZW5kID0gaWE2NF9nZXRfdXNlcl9yYnNfZW5kKGNoaWxkLCBwdCwgJmNmbSk7Ci0JCQlpZiAod3JpdGVfYWNjZXNzKSB7Ci0JCQkJaWYgKCpkYXRhICE9IHVyYnNfZW5kKSB7Ci0JCQkJCWlmIChpYTY0X3N5bmNfdXNlcl9yYnMoY2hpbGQsIHN3LAotCQkJCQkJCSAgICAgICBwdC0+YXJfYnNwc3RvcmUsCi0JCQkJCQkJICAgICAgIHVyYnNfZW5kKSA8IDApCi0JCQkJCQlyZXR1cm4gLTE7Ci0JCQkJCWlmIChpbl9zeXNjYWxsKHB0KSkKLQkJCQkJCWNvbnZlcnRfdG9fbm9uX3N5c2NhbGwoY2hpbGQsCi0JCQkJCQkJCSAgICAgICBwdCwKLQkJCQkJCQkJICAgICAgIGNmbSk7Ci0JCQkJCS8qCi0JCQkJCSAqIFNpbXVsYXRlIHVzZXItbGV2ZWwgd3JpdGUKLQkJCQkJICogb2YgYXIuYnNwOgotCQkJCQkgKi8KLQkJCQkJcHQtPmxvYWRycyA9IDA7Ci0JCQkJCXB0LT5hcl9ic3BzdG9yZSA9ICpkYXRhOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCSpkYXRhID0gdXJic19lbmQ7Ci0JCQlyZXR1cm4gMDsKLQotCQkgICAgICBjYXNlIFBUX0NGTToKLQkJCXVyYnNfZW5kID0gaWE2NF9nZXRfdXNlcl9yYnNfZW5kKGNoaWxkLCBwdCwgJmNmbSk7Ci0JCQlpZiAod3JpdGVfYWNjZXNzKSB7Ci0JCQkJaWYgKCgoY2ZtIF4gKmRhdGEpICYgUEZNX01BU0spICE9IDApIHsKLQkJCQkJaWYgKGlhNjRfc3luY191c2VyX3JicyhjaGlsZCwgc3csCi0JCQkJCQkJICAgICAgIHB0LT5hcl9ic3BzdG9yZSwKLQkJCQkJCQkgICAgICAgdXJic19lbmQpIDwgMCkKLQkJCQkJCXJldHVybiAtMTsKLQkJCQkJaWYgKGluX3N5c2NhbGwocHQpKQotCQkJCQkJY29udmVydF90b19ub25fc3lzY2FsbChjaGlsZCwKLQkJCQkJCQkJICAgICAgIHB0LAotCQkJCQkJCQkgICAgICAgY2ZtKTsKLQkJCQkJcHQtPmNyX2lmcyA9ICgocHQtPmNyX2lmcyAmIH5QRk1fTUFTSykKLQkJCQkJCSAgICAgIHwgKCpkYXRhICYgUEZNX01BU0spKTsKLQkJCQl9Ci0JCQl9IGVsc2UKLQkJCQkqZGF0YSA9IGNmbTsKLQkJCXJldHVybiAwOwotCi0JCSAgICAgIGNhc2UgUFRfQ1JfSVBTUjoKLQkJCWlmICh3cml0ZV9hY2Nlc3MpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHRtcCA9ICpkYXRhOwotCQkJCS8qIHBzci5yaT09MyBpcyBhIHJlc2VydmVkIHZhbHVlOiBTRE0gMjoyNSAqLwotCQkJCWlmICgodG1wICYgSUE2NF9QU1JfUkkpID09IElBNjRfUFNSX1JJKQotCQkJCQl0bXAgJj0gfklBNjRfUFNSX1JJOwotCQkJCXB0LT5jcl9pcHNyID0gKCh0bXAgJiBJUFNSX01BU0spCi0JCQkJCSAgICAgICB8IChwdC0+Y3JfaXBzciAmIH5JUFNSX01BU0spKTsKLQkJCX0gZWxzZQotCQkJCSpkYXRhID0gKHB0LT5jcl9pcHNyICYgSVBTUl9NQVNLKTsKLQkJCXJldHVybiAwOwotCi0JCSAgICAgIGNhc2UgUFRfQVJfUlNDOgotCQkJaWYgKHdyaXRlX2FjY2VzcykKLQkJCQlwdC0+YXJfcnNjID0gKmRhdGEgfCAoMyA8PCAyKTsgLyogZm9yY2UgUEwzICovCi0JCQllbHNlCi0JCQkJKmRhdGEgPSBwdC0+YXJfcnNjOwotCQkJcmV0dXJuIDA7Ci0KLQkJICAgICAgY2FzZSBQVF9BUl9STkFUOgotCQkJdXJic19lbmQgPSBpYTY0X2dldF91c2VyX3Jic19lbmQoY2hpbGQsIHB0LCBOVUxMKTsKLQkJCXJuYXRfYWRkciA9IChsb25nKSBpYTY0X3JzZV9ybmF0X2FkZHIoKGxvbmcgKikKLQkJCQkJCQkgICAgICB1cmJzX2VuZCk7Ci0JCQlpZiAod3JpdGVfYWNjZXNzKQotCQkJCXJldHVybiBpYTY0X3Bva2UoY2hpbGQsIHN3LCB1cmJzX2VuZCwKLQkJCQkJCSBybmF0X2FkZHIsICpkYXRhKTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gaWE2NF9wZWVrKGNoaWxkLCBzdywgdXJic19lbmQsCi0JCQkJCQkgcm5hdF9hZGRyLCBkYXRhKTsKLQotCQkgICAgICBjYXNlIFBUX1IxOgotCQkJcHRyID0gcHRfcmVnX2FkZHIocHQsIHIxKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX1IyOiAgY2FzZSBQVF9SMzoKLQkJCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCByMikgKyAoYWRkciAtIFBUX1IyKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX1I4OiAgY2FzZSBQVF9SOTogIGNhc2UgUFRfUjEwOiBjYXNlIFBUX1IxMToKLQkJCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCByOCkgKyAoYWRkciAtIFBUX1I4KTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX1IxMjogY2FzZSBQVF9SMTM6Ci0JCQlwdHIgPSBwdF9yZWdfYWRkcihwdCwgcjEyKSArIChhZGRyIC0gUFRfUjEyKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX1IxNDoKLQkJCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCByMTQpOwotCQkJYnJlYWs7Ci0JCSAgICAgIGNhc2UgUFRfUjE1OgotCQkJcHRyID0gcHRfcmVnX2FkZHIocHQsIHIxNSk7Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSBQVF9SMTY6IGNhc2UgUFRfUjE3OiBjYXNlIFBUX1IxODogY2FzZSBQVF9SMTk6Ci0JCSAgICAgIGNhc2UgUFRfUjIwOiBjYXNlIFBUX1IyMTogY2FzZSBQVF9SMjI6IGNhc2UgUFRfUjIzOgotCQkgICAgICBjYXNlIFBUX1IyNDogY2FzZSBQVF9SMjU6IGNhc2UgUFRfUjI2OiBjYXNlIFBUX1IyNzoKLQkJICAgICAgY2FzZSBQVF9SMjg6IGNhc2UgUFRfUjI5OiBjYXNlIFBUX1IzMDogY2FzZSBQVF9SMzE6Ci0JCQlwdHIgPSBwdF9yZWdfYWRkcihwdCwgcjE2KSArIChhZGRyIC0gUFRfUjE2KTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0IwOgotCQkJcHRyID0gcHRfcmVnX2FkZHIocHQsIGIwKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0I2OgotCQkJcHRyID0gcHRfcmVnX2FkZHIocHQsIGI2KTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0I3OgotCQkJcHRyID0gcHRfcmVnX2FkZHIocHQsIGI3KTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0Y2OiAgY2FzZSBQVF9GNis4OiBjYXNlIFBUX0Y3OiBjYXNlIFBUX0Y3Kzg6Ci0JCSAgICAgIGNhc2UgUFRfRjg6ICBjYXNlIFBUX0Y4Kzg6IGNhc2UgUFRfRjk6IGNhc2UgUFRfRjkrODoKLQkJCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCBmNikgKyAoYWRkciAtIFBUX0Y2KTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0FSX0JTUFNUT1JFOgotCQkJcHRyID0gcHRfcmVnX2FkZHIocHQsIGFyX2JzcHN0b3JlKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0FSX1VOQVQ6Ci0JCQlwdHIgPSBwdF9yZWdfYWRkcihwdCwgYXJfdW5hdCk7Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSBQVF9BUl9QRlM6Ci0JCQlwdHIgPSBwdF9yZWdfYWRkcihwdCwgYXJfcGZzKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0FSX0NDVjoKLQkJCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCBhcl9jY3YpOwotCQkJYnJlYWs7Ci0JCSAgICAgIGNhc2UgUFRfQVJfRlBTUjoKLQkJCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCBhcl9mcHNyKTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFBUX0NSX0lJUDoKLQkJCXB0ciA9IHB0X3JlZ19hZGRyKHB0LCBjcl9paXApOwotCQkJYnJlYWs7Ci0JCSAgICAgIGNhc2UgUFRfUFI6Ci0JCQlwdHIgPSBwdF9yZWdfYWRkcihwdCwgcHIpOwotCQkJYnJlYWs7Ci0JCQkvKiBzY3JhdGNoIHJlZ2lzdGVyICovCi0KLQkJICAgICAgZGVmYXVsdDoKLQkJCS8qIGRpc2FsbG93IGFjY2Vzc2luZyBhbnl0aGluZyBlbHNlLi4uICovCi0JCQlkcHJpbnRrKCJwdHJhY2U6IHJlamVjdGluZyBhY2Nlc3MgdG8gcmVnaXN0ZXIgIgotCQkJCSJhZGRyZXNzIDB4JWx4XG4iLCBhZGRyKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0gZWxzZSBpZiAoYWRkciA8PSBQVF9BUl9TU0QpIHsKLQkJcHRyID0gcHRfcmVnX2FkZHIocHQsIGFyX2NzZCkgKyAoYWRkciAtIFBUX0FSX0NTRCk7Ci0JfSBlbHNlIHsKLQkJLyogYWNjZXNzIGRlYnVnIHJlZ2lzdGVycyAqLwotCi0JCWlmIChhZGRyID49IFBUX0lCUikgewotCQkJcmVnbnVtID0gKGFkZHIgLSBQVF9JQlIpID4+IDM7Ci0JCQlwdHIgPSAmY2hpbGQtPnRocmVhZC5pYnJbMF07Ci0JCX0gZWxzZSB7Ci0JCQlyZWdudW0gPSAoYWRkciAtIFBUX0RCUikgPj4gMzsKLQkJCXB0ciA9ICZjaGlsZC0+dGhyZWFkLmRiclswXTsKLQkJfQotCi0JCWlmIChyZWdudW0gPj0gOCkgewotCQkJZHByaW50aygicHRyYWNlOiByZWplY3RpbmcgYWNjZXNzIHRvIHJlZ2lzdGVyICIKLQkJCQkiYWRkcmVzcyAweCVseFxuIiwgYWRkcik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLSNpZmRlZiBDT05GSUdfUEVSRk1PTgotCQkvKgotCQkgKiBDaGVjayBpZiBkZWJ1ZyByZWdpc3RlcnMgYXJlIHVzZWQgYnkgcGVyZm1vbi4gVGhpcwotCQkgKiB0ZXN0IG11c3QgYmUgZG9uZSBvbmNlIHdlIGtub3cgdGhhdCB3ZSBjYW4gZG8gdGhlCi0JCSAqIG9wZXJhdGlvbiwgaS5lLiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgdmFsaWQsIGJ1dAotCQkgKiBiZWZvcmUgd2Ugc3RhcnQgbW9kaWZ5aW5nIHRoZSBzdGF0ZS4KLQkJICoKLQkJICogUGVyZm1vbiBuZWVkcyB0byBrZWVwIGEgY291bnQgb2YgaG93IG1hbnkgcHJvY2Vzc2VzCi0JCSAqIGFyZSB0cnlpbmcgdG8gbW9kaWZ5IHRoZSBkZWJ1ZyByZWdpc3RlcnMgZm9yIHN5c3RlbQotCQkgKiB3aWRlIG1vbml0b3Jpbmcgc2Vzc2lvbnMuCi0JCSAqCi0JCSAqIFdlIGFsc28gaW5jbHVkZSByZWFkIGFjY2VzcyBoZXJlLCBiZWNhdXNlIHRoZXkgbWF5Ci0JCSAqIGNhdXNlIHRoZSBQTVUtaW5zdGFsbGVkIGRlYnVnIHJlZ2lzdGVyIHN0YXRlCi0JCSAqIChkYnJbXSwgaWJyW10pIHRvIGJlIHJlc2V0LiBUaGUgdHdvIGFycmF5cyBhcmUgYWxzbwotCQkgKiB1c2VkIGJ5IHBlcmZtb24sIGJ1dCB3ZSBkbyBub3QgdXNlCi0JCSAqIElBNjRfVEhSRUFEX0RCR19WQUxJRC4gVGhlIHJlZ2lzdGVycyBhcmUgcmVzdG9yZWQKLQkJICogYnkgdGhlIFBNVSBjb250ZXh0IHN3aXRjaCBjb2RlLgotCQkgKi8KLQkJaWYgKHBmbV91c2VfZGVidWdfcmVnaXN0ZXJzKGNoaWxkKSkgcmV0dXJuIC0xOwotI2VuZGlmCi0KLQkJaWYgKCEoY2hpbGQtPnRocmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX0RCR19WQUxJRCkpIHsKLQkJCWNoaWxkLT50aHJlYWQuZmxhZ3MgfD0gSUE2NF9USFJFQURfREJHX1ZBTElEOwotCQkJbWVtc2V0KGNoaWxkLT50aHJlYWQuZGJyLCAwLAotCQkJICAgICAgIHNpemVvZihjaGlsZC0+dGhyZWFkLmRicikpOwotCQkJbWVtc2V0KGNoaWxkLT50aHJlYWQuaWJyLCAwLAotCQkJICAgICAgIHNpemVvZihjaGlsZC0+dGhyZWFkLmlicikpOwotCQl9Ci0KLQkJcHRyICs9IHJlZ251bTsKLQotCQlpZiAoKHJlZ251bSAmIDEpICYmIHdyaXRlX2FjY2VzcykgewotCQkJLyogZG9uJ3QgbGV0IHRoZSB1c2VyIHNldCBrZXJuZWwtbGV2ZWwgYnJlYWtwb2ludHM6ICovCi0JCQkqcHRyID0gKmRhdGEgJiB+KDdVTCA8PCA1Nik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlpZiAod3JpdGVfYWNjZXNzKQotCQkqcHRyID0gKmRhdGE7Ci0JZWxzZQotCQkqZGF0YSA9ICpwdHI7Ci0JcmV0dXJuIDA7Ci19CisJICAgICAgdW5zaWduZWQgbG9uZyAqZGF0YSwgaW50IHdyaXRlX2FjY2Vzcyk7CiAKIHN0YXRpYyBsb25nCiBwdHJhY2VfZ2V0cmVncyAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHB0X2FsbF91c2VyX3JlZ3MgX191c2VyICpwcHIpCkBAIC0xNTIxLDEzICsxMTM4LDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuLgotICoKLSAqIE1ha2Ugc3VyZSB0aGUgc2luZ2xlIHN0ZXAgYml0IGlzIG5vdCBzZXQuCi0gKi8KIHZvaWQKLXB0cmFjZV9kaXNhYmxlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQordXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAgKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJc3RydWN0IGlhNjRfcHNyICpjaGlsZF9wc3IgPSBpYTY0X3Bzcih0YXNrX3B0X3JlZ3MoY2hpbGQpKTsKKworCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKKwljaGlsZF9wc3ItPnNzID0gMTsKK30KKwordm9pZAordXNlcl9lbmFibGVfYmxvY2tfc3RlcCAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwlzdHJ1Y3QgaWE2NF9wc3IgKmNoaWxkX3BzciA9IGlhNjRfcHNyKHRhc2tfcHRfcmVncyhjaGlsZCkpOworCisJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NJTkdMRVNURVApOworCWNoaWxkX3Bzci0+dGIgPSAxOworfQorCit2b2lkCit1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAgKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJc3RydWN0IGlhNjRfcHNyICpjaGlsZF9wc3IgPSBpYTY0X3Bzcih0YXNrX3B0X3JlZ3MoY2hpbGQpKTsKIApAQCAtMTUzNywxOTkgKzExNjcsNjggQEAKIAljaGlsZF9wc3ItPnRiID0gMDsKIH0KIAotYXNtbGlua2FnZSBsb25nCi1zeXNfcHRyYWNlIChsb25nIHJlcXVlc3QsIHBpZF90IHBpZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGRhdGEpCisvKgorICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCisgKgorICogTWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4KKyAqLwordm9pZAorcHRyYWNlX2Rpc2FibGUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0Jc3RydWN0IHB0X3JlZ3MgKnB0OwotCXVuc2lnbmVkIGxvbmcgdXJic19lbmQsIHBlZWtfb3JfcG9rZTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOwotCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3OwotCWxvbmcgcmV0OwotCXN0cnVjdCB1bndfZnJhbWVfaW5mbyBpbmZvOworCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7Cit9CiAKLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IC1FUEVSTTsKLQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfVFJBQ0VNRSkgewotCQlyZXQgPSBwdHJhY2VfdHJhY2VtZSgpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwZWVrX29yX3Bva2UgPSAocmVxdWVzdCA9PSBQVFJBQ0VfUEVFS1RFWFQKLQkJCXx8IHJlcXVlc3QgPT0gUFRSQUNFX1BFRUtEQVRBCi0JCQl8fCByZXF1ZXN0ID09IFBUUkFDRV9QT0tFVEVYVAotCQkJfHwgcmVxdWVzdCA9PSBQVFJBQ0VfUE9LRURBVEEpOwotCXJldCA9IC1FU1JDSDsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCXsKLQkJY2hpbGQgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7Ci0JCWlmIChjaGlsZCkgewotCQkJaWYgKHBlZWtfb3JfcG9rZSkKLQkJCQljaGlsZCA9IGZpbmRfdGhyZWFkX2Zvcl9hZGRyKGNoaWxkLCBhZGRyKTsKLQkJCWdldF90YXNrX3N0cnVjdChjaGlsZCk7Ci0JCX0KLQl9Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCWlmICghY2hpbGQpCi0JCWdvdG8gb3V0OwotCXJldCA9IC1FUEVSTTsKLQlpZiAocGlkID09IDEpCQkvKiBubyBtZXNzaW5nIGFyb3VuZCB3aXRoIGluaXQhICovCi0JCWdvdG8gb3V0X3RzazsKLQotCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9BVFRBQ0gpIHsKLQkJcmV0ID0gcHRyYWNlX2F0dGFjaChjaGlsZCk7Ci0JCWlmICghcmV0KQotCQkJYXJjaF9wdHJhY2VfYXR0YWNoKGNoaWxkKTsKLQkJZ290byBvdXRfdHNrOwotCX0KLQotCXJldCA9IHB0cmFjZV9jaGVja19hdHRhY2goY2hpbGQsIHJlcXVlc3QgPT0gUFRSQUNFX0tJTEwpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF90c2s7Ci0KLQlwdCA9IHRhc2tfcHRfcmVncyhjaGlsZCk7Ci0Jc3cgPSAoc3RydWN0IHN3aXRjaF9zdGFjayAqKSAoY2hpbGQtPnRocmVhZC5rc3AgKyAxNik7Ci0KK2xvbmcKK2FyY2hfcHRyYWNlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQorewogCXN3aXRjaCAocmVxdWVzdCkgewotCSAgICAgIGNhc2UgUFRSQUNFX1BFRUtURVhUOgotCSAgICAgIGNhc2UgUFRSQUNFX1BFRUtEQVRBOgorCWNhc2UgUFRSQUNFX1BFRUtURVhUOgorCWNhc2UgUFRSQUNFX1BFRUtEQVRBOgogCQkvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkciAqLwotCQl1cmJzX2VuZCA9IGlhNjRfZ2V0X3VzZXJfcmJzX2VuZChjaGlsZCwgcHQsIE5VTEwpOwotCQlyZXQgPSBpYTY0X3BlZWsoY2hpbGQsIHN3LCB1cmJzX2VuZCwgYWRkciwgJmRhdGEpOwotCQlpZiAocmV0ID09IDApIHsKLQkJCXJldCA9IGRhdGE7Ci0JCQkvKiBlbnN1cmUgInJldCIgaXMgbm90IG1pc3Rha2VuIGFzIGFuIGVycm9yIGNvZGU6ICovCi0JCQlmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCk7Ci0JCX0KLQkJZ290byBvdXRfdHNrOwotCi0JICAgICAgY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6Ci0JICAgICAgY2FzZSBQVFJBQ0VfUE9LRURBVEE6Ci0JCS8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgKi8KLQkJdXJic19lbmQgPSBpYTY0X2dldF91c2VyX3Jic19lbmQoY2hpbGQsIHB0LCBOVUxMKTsKLQkJcmV0ID0gaWE2NF9wb2tlKGNoaWxkLCBzdywgdXJic19lbmQsIGFkZHIsIGRhdGEpOwotCi0JCS8qIE1ha2Ugc3VyZSB1c2VyIFJCUyBoYXMgdGhlIGxhdGVzdCBkYXRhICovCi0JCXVud19pbml0X2Zyb21fYmxvY2tlZF90YXNrKCZpbmZvLCBjaGlsZCk7Ci0JCWRvX3N5bmNfcmJzKCZpbmZvLCBpYTY0X3N5bmNfdXNlcl9yYnMpOwotCi0JCWdvdG8gb3V0X3RzazsKLQotCSAgICAgIGNhc2UgUFRSQUNFX1BFRUtVU1I6Ci0JCS8qIHJlYWQgdGhlIHdvcmQgYXQgYWRkciBpbiB0aGUgVVNFUiBhcmVhICovCi0JCWlmIChhY2Nlc3NfdWFyZWEoY2hpbGQsIGFkZHIsICZkYXRhLCAwKSA8IDApIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dF90c2s7Ci0JCX0KLQkJcmV0ID0gZGF0YTsKLQkJLyogZW5zdXJlICJyZXQiIGlzIG5vdCBtaXN0YWtlbiBhcyBhbiBlcnJvciBjb2RlICovCisJCWlmIChhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJmRhdGEsIHNpemVvZihkYXRhKSwgMCkKKwkJICAgICE9IHNpemVvZihkYXRhKSkKKwkJCXJldHVybiAtRUlPOworCQkvKiBlbnN1cmUgcmV0dXJuIHZhbHVlIGlzIG5vdCBtaXN0YWtlbiBmb3IgZXJyb3IgY29kZSAqLwogCQlmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCk7Ci0JCWdvdG8gb3V0X3RzazsKKwkJcmV0dXJuIGRhdGE7CiAKLQkgICAgICBjYXNlIFBUUkFDRV9QT0tFVVNSOgorCS8qIFBUUkFDRV9QT0tFVEVYVCBhbmQgUFRSQUNFX1BPS0VEQVRBIGlzIGhhbmRsZWQKKwkgKiBieSB0aGUgZ2VuZXJpYyBwdHJhY2VfcmVxdWVzdCgpLgorCSAqLworCisJY2FzZSBQVFJBQ0VfUEVFS1VTUjoKKwkJLyogcmVhZCB0aGUgd29yZCBhdCBhZGRyIGluIHRoZSBVU0VSIGFyZWEgKi8KKwkJaWYgKGFjY2Vzc191YXJlYShjaGlsZCwgYWRkciwgJmRhdGEsIDApIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQkvKiBlbnN1cmUgcmV0dXJuIHZhbHVlIGlzIG5vdCBtaXN0YWtlbiBmb3IgZXJyb3IgY29kZSAqLworCQlmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCk7CisJCXJldHVybiBkYXRhOworCisJY2FzZSBQVFJBQ0VfUE9LRVVTUjoKIAkJLyogd3JpdGUgdGhlIHdvcmQgYXQgYWRkciBpbiB0aGUgVVNFUiBhcmVhICovCi0JCWlmIChhY2Nlc3NfdWFyZWEoY2hpbGQsIGFkZHIsICZkYXRhLCAxKSA8IDApIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dF90c2s7Ci0JCX0KLQkJcmV0ID0gMDsKLQkJZ290byBvdXRfdHNrOworCQlpZiAoYWNjZXNzX3VhcmVhKGNoaWxkLCBhZGRyLCAmZGF0YSwgMSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOwogCi0JICAgICAgY2FzZSBQVFJBQ0VfT0xEX0dFVFNJR0lORk86CisJY2FzZSBQVFJBQ0VfT0xEX0dFVFNJR0lORk86CiAJCS8qIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSAqLwotCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgUFRSQUNFX0dFVFNJR0lORk8sIGFkZHIsIGRhdGEpOwotCQlnb3RvIG91dF90c2s7CisJCXJldHVybiBwdHJhY2VfcmVxdWVzdChjaGlsZCwgUFRSQUNFX0dFVFNJR0lORk8sIGFkZHIsIGRhdGEpOwogCi0JICAgICAgY2FzZSBQVFJBQ0VfT0xEX1NFVFNJR0lORk86CisJY2FzZSBQVFJBQ0VfT0xEX1NFVFNJR0lORk86CiAJCS8qIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSAqLwotCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgUFRSQUNFX1NFVFNJR0lORk8sIGFkZHIsIGRhdGEpOwotCQlnb3RvIG91dF90c2s7CisJCXJldHVybiBwdHJhY2VfcmVxdWVzdChjaGlsZCwgUFRSQUNFX1NFVFNJR0lORk8sIGFkZHIsIGRhdGEpOwogCi0JICAgICAgY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKLQkJLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KLQkgICAgICBjYXNlIFBUUkFDRV9DT05UOgotCQkvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlnb3RvIG91dF90c2s7Ci0JCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQotCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQllbHNlCi0JCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJY2FzZSBQVFJBQ0VfR0VUUkVHUzoKKwkJcmV0dXJuIHB0cmFjZV9nZXRyZWdzKGNoaWxkLAorCQkJCSAgICAgIChzdHJ1Y3QgcHRfYWxsX3VzZXJfcmVncyBfX3VzZXIgKikgZGF0YSk7CiAKLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcC90YWtlbi1icmFuY2ggdHJhcCBiaXRzCi0JCSAqIGFyZSBub3Qgc2V0OgotCQkgKi8KLQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7Ci0JCWlhNjRfcHNyKHB0KS0+c3MgPSAwOwotCQlpYTY0X3BzcihwdCktPnRiID0gMDsKKwljYXNlIFBUUkFDRV9TRVRSRUdTOgorCQlyZXR1cm4gcHRyYWNlX3NldHJlZ3MoY2hpbGQsCisJCQkJICAgICAgKHN0cnVjdCBwdF9hbGxfdXNlcl9yZWdzIF9fdXNlciAqKSBkYXRhKTsKIAotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dF90c2s7Ci0KLQkgICAgICBjYXNlIFBUUkFDRV9LSUxMOgotCQkvKgotCQkgKiBNYWtlIHRoZSBjaGlsZCBleGl0LiAgQmVzdCBJIGNhbiBkbyBpcyBzZW5kIGl0IGEKLQkJICogc2lna2lsbC4gIFBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzCi0JCSAqIHRoYXQgaXQgd2FudHMgdG8gZXhpdC4KLQkJICovCi0JCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkKLQkJCS8qIGFscmVhZHkgZGVhZCAqLwotCQkJZ290byBvdXRfdHNrOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gU0lHS0lMTDsKLQotCQlwdHJhY2VfZGlzYWJsZShjaGlsZCk7Ci0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3RzazsKLQotCSAgICAgIGNhc2UgUFRSQUNFX1NJTkdMRVNURVA6Ci0JCS8qIGxldCBjaGlsZCBleGVjdXRlIGZvciBvbmUgaW5zdHJ1Y3Rpb24gKi8KLQkgICAgICBjYXNlIFBUUkFDRV9TSU5HTEVCTE9DSzoKLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlnb3RvIG91dF90c2s7Ci0KLQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKLQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NJTkdMRVNURVApIHsKLQkJCWlhNjRfcHNyKHB0KS0+c3MgPSAxOwotCQl9IGVsc2UgewotCQkJaWE2NF9wc3IocHQpLT50YiA9IDE7Ci0JCX0KLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0KLQkJLyogZ2l2ZSBpdCBhIGNoYW5jZSB0byBydW4uICovCi0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3RzazsKLQotCSAgICAgIGNhc2UgUFRSQUNFX0RFVEFDSDoKLQkJLyogZGV0YWNoIGEgcHJvY2VzcyB0aGF0IHdhcyBhdHRhY2hlZC4gKi8KLQkJcmV0ID0gcHRyYWNlX2RldGFjaChjaGlsZCwgZGF0YSk7Ci0JCWdvdG8gb3V0X3RzazsKLQotCSAgICAgIGNhc2UgUFRSQUNFX0dFVFJFR1M6Ci0JCXJldCA9IHB0cmFjZV9nZXRyZWdzKGNoaWxkLAotCQkJCSAgICAgKHN0cnVjdCBwdF9hbGxfdXNlcl9yZWdzIF9fdXNlciAqKSBkYXRhKTsKLQkJZ290byBvdXRfdHNrOwotCi0JICAgICAgY2FzZSBQVFJBQ0VfU0VUUkVHUzoKLQkJcmV0ID0gcHRyYWNlX3NldHJlZ3MoY2hpbGQsCi0JCQkJICAgICAoc3RydWN0IHB0X2FsbF91c2VyX3JlZ3MgX191c2VyICopIGRhdGEpOwotCQlnb3RvIG91dF90c2s7Ci0KLQkgICAgICBkZWZhdWx0OgotCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7Ci0JCWdvdG8gb3V0X3RzazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCX0KLSAgb3V0X3RzazoKLQlwdXRfdGFza19zdHJ1Y3QoY2hpbGQpOwotICBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMTgxMSwzICsxMzEwLDg5MiBAQAogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1JTRSkpCiAJCWlhNjRfc3luY19rcmJzKCk7CiB9CisKKy8qIFV0cmFjZSBpbXBsZW1lbnRhdGlvbiBzdGFydHMgaGVyZSAqLworc3RydWN0IHJlZ3NldF9nZXQgeworCXZvaWQgKmtidWY7CisJdm9pZCBfX3VzZXIgKnVidWY7Cit9OworCitzdHJ1Y3QgcmVnc2V0X3NldCB7CisJY29uc3Qgdm9pZCAqa2J1ZjsKKwljb25zdCB2b2lkIF9fdXNlciAqdWJ1ZjsKK307CisKK3N0cnVjdCByZWdzZXRfZ2V0c2V0IHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldDsKKwljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldDsKKwl1bmlvbiB7CisJCXN0cnVjdCByZWdzZXRfZ2V0IGdldDsKKwkJc3RydWN0IHJlZ3NldF9zZXQgc2V0OworCX0gdTsKKwl1bnNpZ25lZCBpbnQgcG9zOworCXVuc2lnbmVkIGludCBjb3VudDsKKwlpbnQgcmV0OworfTsKKworc3RhdGljIGludAorYWNjZXNzX2VsZl9ncHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgKmRhdGEsIGludCB3cml0ZV9hY2Nlc3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKnB0OworCXVuc2lnbmVkIGxvbmcgKnB0ciA9IE5VTEw7CisJaW50IHJldDsKKwljaGFyIG5hdCA9IDA7CisKKwlwdCA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCXN3aXRjaCAoYWRkcikgeworCWNhc2UgRUxGX0dSX09GRlNFVCgxKToKKwkJcHRyID0gJnB0LT5yMTsKKwkJYnJlYWs7CisJY2FzZSBFTEZfR1JfT0ZGU0VUKDIpOgorCWNhc2UgRUxGX0dSX09GRlNFVCgzKToKKwkJcHRyID0gKHZvaWQgKikmcHQtPnIyICsgKGFkZHIgLSBFTEZfR1JfT0ZGU0VUKDIpKTsKKwkJYnJlYWs7CisJY2FzZSBFTEZfR1JfT0ZGU0VUKDQpIC4uLiBFTEZfR1JfT0ZGU0VUKDcpOgorCQlpZiAod3JpdGVfYWNjZXNzKSB7CisJCQkvKiByZWFkIE5hVCBiaXQgZmlyc3Q6ICovCisJCQl1bnNpZ25lZCBsb25nIGR1bW15OworCisJCQlyZXQgPSB1bndfZ2V0X2dyKGluZm8sIGFkZHIvOCwgJmR1bW15LCAmbmF0KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIHVud19hY2Nlc3NfZ3IoaW5mbywgYWRkci84LCBkYXRhLCAmbmF0LCB3cml0ZV9hY2Nlc3MpOworCWNhc2UgRUxGX0dSX09GRlNFVCg4KSAuLi4gRUxGX0dSX09GRlNFVCgxMSk6CisJCXB0ciA9ICh2b2lkICopJnB0LT5yOCArIGFkZHIgLSBFTEZfR1JfT0ZGU0VUKDgpOworCQlicmVhazsKKwljYXNlIEVMRl9HUl9PRkZTRVQoMTIpOgorCWNhc2UgRUxGX0dSX09GRlNFVCgxMyk6CisJCXB0ciA9ICh2b2lkICopJnB0LT5yMTIgKyBhZGRyIC0gRUxGX0dSX09GRlNFVCgxMik7CisJCWJyZWFrOworCWNhc2UgRUxGX0dSX09GRlNFVCgxNCk6CisJCXB0ciA9ICZwdC0+cjE0OworCQlicmVhazsKKwljYXNlIEVMRl9HUl9PRkZTRVQoMTUpOgorCQlwdHIgPSAmcHQtPnIxNTsKKwl9CisJaWYgKHdyaXRlX2FjY2VzcykKKwkJKnB0ciA9ICpkYXRhOworCWVsc2UKKwkJKmRhdGEgPSAqcHRyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithY2Nlc3NfZWxmX2JyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpkYXRhLCBpbnQgd3JpdGVfYWNjZXNzKQoreworCXN0cnVjdCBwdF9yZWdzICpwdDsKKwl1bnNpZ25lZCBsb25nICpwdHIgPSBOVUxMOworCisJcHQgPSB0YXNrX3B0X3JlZ3ModGFyZ2V0KTsKKwlzd2l0Y2ggKGFkZHIpIHsKKwljYXNlIEVMRl9CUl9PRkZTRVQoMCk6CisJCXB0ciA9ICZwdC0+YjA7CisJCWJyZWFrOworCWNhc2UgRUxGX0JSX09GRlNFVCgxKSAuLi4gRUxGX0JSX09GRlNFVCg1KToKKwkJcmV0dXJuIHVud19hY2Nlc3NfYnIoaW5mbywgKGFkZHIgLSBFTEZfQlJfT0ZGU0VUKDApKS84LAorCQkJCSAgICAgZGF0YSwgd3JpdGVfYWNjZXNzKTsKKwljYXNlIEVMRl9CUl9PRkZTRVQoNik6CisJCXB0ciA9ICZwdC0+YjY7CisJCWJyZWFrOworCWNhc2UgRUxGX0JSX09GRlNFVCg3KToKKwkJcHRyID0gJnB0LT5iNzsKKwl9CisJaWYgKHdyaXRlX2FjY2VzcykKKwkJKnB0ciA9ICpkYXRhOworCWVsc2UKKwkJKmRhdGEgPSAqcHRyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithY2Nlc3NfZWxmX2FyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpkYXRhLCBpbnQgd3JpdGVfYWNjZXNzKQoreworCXN0cnVjdCBwdF9yZWdzICpwdDsKKwl1bnNpZ25lZCBsb25nIGNmbSwgdXJic19lbmQ7CisJdW5zaWduZWQgbG9uZyAqcHRyID0gTlVMTDsKKworCXB0ID0gdGFza19wdF9yZWdzKHRhcmdldCk7CisJaWYgKGFkZHIgPj0gRUxGX0FSX1JTQ19PRkZTRVQgJiYgYWRkciA8PSBFTEZfQVJfU1NEX09GRlNFVCkgeworCQlzd2l0Y2ggKGFkZHIpIHsKKwkJY2FzZSBFTEZfQVJfUlNDX09GRlNFVDoKKwkJCS8qIGZvcmNlIFBMMyAqLworCQkJaWYgKHdyaXRlX2FjY2VzcykKKwkJCQlwdC0+YXJfcnNjID0gKmRhdGEgfCAoMyA8PCAyKTsKKwkJCWVsc2UKKwkJCQkqZGF0YSA9IHB0LT5hcl9yc2M7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBFTEZfQVJfQlNQX09GRlNFVDoKKwkJCS8qCisJCQkgKiBCeSBjb252ZW50aW9uLCB3ZSB1c2UgUFRfQVJfQlNQIHRvIHJlZmVyIHRvCisJCQkgKiB0aGUgZW5kIG9mIHRoZSB1c2VyLWxldmVsIGJhY2tpbmcgc3RvcmUuCisJCQkgKiBVc2UgaWE2NF9yc2Vfc2tpcF9yZWdzKFBUX0FSX0JTUCwgLUNGTS5zb2YpCisJCQkgKiB0byBnZXQgdGhlIHJlYWwgdmFsdWUgb2YgYXIuYnNwIGF0IHRoZSB0aW1lCisJCQkgKiB0aGUga2VybmVsIHdhcyBlbnRlcmVkLgorCQkJICoKKwkJCSAqIEZ1cnRoZXJtb3JlLCB3aGVuIGNoYW5naW5nIHRoZSBjb250ZW50cyBvZgorCQkJICogUFRfQVJfQlNQIChvciBQVF9DRk0pIHdoaWxlIHRoZSB0YXNrIGlzCisJCQkgKiBibG9ja2VkIGluIGEgc3lzdGVtIGNhbGwsIGNvbnZlcnQgdGhlIHN0YXRlCisJCQkgKiBzbyB0aGF0IHRoZSBub24tc3lzdGVtLWNhbGwgZXhpdAorCQkJICogcGF0aCBpcyB1c2VkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHByb3BlcgorCQkJICogc3RhdGUgd2lsbCBiZSBwaWNrZWQgdXAgd2hlbiByZXN1bWluZworCQkJICogZXhlY3V0aW9uLiAgSG93ZXZlciwgaXQgKmFsc28qIG1lYW5zIHRoYXQKKwkJCSAqIG9uY2Ugd2Ugd3JpdGUgUFRfQVJfQlNQL1BUX0NGTSwgaXQgd29uJ3QgYmUKKwkJCSAqIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgc3lzY2FsbCBhcmd1bWVudHMgb2YKKwkJCSAqIHRoZSBwZW5kaW5nIHN5c3RlbSBjYWxsIGFueSBsb25nZXIuICBUaGlzCisJCQkgKiBzaG91bGRuJ3QgYmUgYW4gaXNzdWUgYmVjYXVzZSBtb2RpZnlpbmcKKwkJCSAqIFBUX0FSX0JTUC9QVF9DRk0gZ2VuZXJhbGx5IGltcGxpZXMgdGhhdAorCQkJICogd2UncmUgZWl0aGVyIGFiYW5kb25pbmcgdGhlIHBlbmRpbmcgc3lzdGVtCisJCQkgKiBjYWxsIG9yIHRoYXQgd2UgZGVmZXIgaXQncyByZS1leGVjdXRpb24KKwkJCSAqIChlLmcuLCBkdWUgdG8gR0RCIGRvaW5nIGFuIGluZmVyaW9yCisJCQkgKiBmdW5jdGlvbiBjYWxsKS4KKwkJCSAqLworCQkJdXJic19lbmQgPSBpYTY0X2dldF91c2VyX3Jic19lbmQodGFyZ2V0LCBwdCwgJmNmbSk7CisJCQlpZiAod3JpdGVfYWNjZXNzKSB7CisJCQkJaWYgKCpkYXRhICE9IHVyYnNfZW5kKSB7CisJCQkJCWlmIChpbl9zeXNjYWxsKHB0KSkKKwkJCQkJCWNvbnZlcnRfdG9fbm9uX3N5c2NhbGwodGFyZ2V0LAorCQkJCQkJCQkgICAgICAgcHQsCisJCQkJCQkJCSAgICAgICBjZm0pOworCQkJCQkvKgorCQkJCQkgKiBTaW11bGF0ZSB1c2VyLWxldmVsIHdyaXRlCisJCQkJCSAqIG9mIGFyLmJzcDoKKwkJCQkJICovCisJCQkJCXB0LT5sb2FkcnMgPSAwOworCQkJCQlwdC0+YXJfYnNwc3RvcmUgPSAqZGF0YTsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQkqZGF0YSA9IHVyYnNfZW5kOworCQkJcmV0dXJuIDA7CisJCWNhc2UgRUxGX0FSX0JTUFNUT1JFX09GRlNFVDoKKwkJCXB0ciA9ICZwdC0+YXJfYnNwc3RvcmU7CisJCQlicmVhazsKKwkJY2FzZSBFTEZfQVJfUk5BVF9PRkZTRVQ6CisJCQlwdHIgPSAmcHQtPmFyX3JuYXQ7CisJCQlicmVhazsKKwkJY2FzZSBFTEZfQVJfQ0NWX09GRlNFVDoKKwkJCXB0ciA9ICZwdC0+YXJfY2N2OworCQkJYnJlYWs7CisJCWNhc2UgRUxGX0FSX1VOQVRfT0ZGU0VUOgorCQkJcHRyID0gJnB0LT5hcl91bmF0OworCQkJYnJlYWs7CisJCWNhc2UgRUxGX0FSX0ZQU1JfT0ZGU0VUOgorCQkJcHRyID0gJnB0LT5hcl9mcHNyOworCQkJYnJlYWs7CisJCWNhc2UgRUxGX0FSX1BGU19PRkZTRVQ6CisJCQlwdHIgPSAmcHQtPmFyX3BmczsKKwkJCWJyZWFrOworCQljYXNlIEVMRl9BUl9MQ19PRkZTRVQ6CisJCQlyZXR1cm4gdW53X2FjY2Vzc19hcihpbmZvLCBVTldfQVJfTEMsIGRhdGEsCisJCQkJCSAgICAgd3JpdGVfYWNjZXNzKTsKKwkJY2FzZSBFTEZfQVJfRUNfT0ZGU0VUOgorCQkJcmV0dXJuIHVud19hY2Nlc3NfYXIoaW5mbywgVU5XX0FSX0VDLCBkYXRhLAorCQkJCQkgICAgIHdyaXRlX2FjY2Vzcyk7CisJCWNhc2UgRUxGX0FSX0NTRF9PRkZTRVQ6CisJCQlwdHIgPSAmcHQtPmFyX2NzZDsKKwkJCWJyZWFrOworCQljYXNlIEVMRl9BUl9TU0RfT0ZGU0VUOgorCQkJcHRyID0gJnB0LT5hcl9zc2Q7CisJCX0KKwl9IGVsc2UgaWYgKGFkZHIgPj0gRUxGX0NSX0lJUF9PRkZTRVQgJiYgYWRkciA8PSBFTEZfQ1JfSVBTUl9PRkZTRVQpIHsKKwkJc3dpdGNoIChhZGRyKSB7CisJCWNhc2UgRUxGX0NSX0lJUF9PRkZTRVQ6CisJCQlwdHIgPSAmcHQtPmNyX2lpcDsKKwkJCWJyZWFrOworCQljYXNlIEVMRl9DRk1fT0ZGU0VUOgorCQkJdXJic19lbmQgPSBpYTY0X2dldF91c2VyX3Jic19lbmQodGFyZ2V0LCBwdCwgJmNmbSk7CisJCQlpZiAod3JpdGVfYWNjZXNzKSB7CisJCQkJaWYgKCgoY2ZtIF4gKmRhdGEpICYgUEZNX01BU0spICE9IDApIHsKKwkJCQkJaWYgKGluX3N5c2NhbGwocHQpKQorCQkJCQkJY29udmVydF90b19ub25fc3lzY2FsbCh0YXJnZXQsCisJCQkJCQkJCSAgICAgICBwdCwKKwkJCQkJCQkJICAgICAgIGNmbSk7CisJCQkJCXB0LT5jcl9pZnMgPSAoKHB0LT5jcl9pZnMgJiB+UEZNX01BU0spCisJCQkJCQkgICAgICB8ICgqZGF0YSAmIFBGTV9NQVNLKSk7CisJCQkJfQorCQkJfSBlbHNlCisJCQkJKmRhdGEgPSBjZm07CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBFTEZfQ1JfSVBTUl9PRkZTRVQ6CisJCQlpZiAod3JpdGVfYWNjZXNzKSB7CisJCQkJdW5zaWduZWQgbG9uZyB0bXAgPSAqZGF0YTsKKwkJCQkvKiBwc3Iucmk9PTMgaXMgYSByZXNlcnZlZCB2YWx1ZTogU0RNIDI6MjUgKi8KKwkJCQlpZiAoKHRtcCAmIElBNjRfUFNSX1JJKSA9PSBJQTY0X1BTUl9SSSkKKwkJCQkJdG1wICY9IH5JQTY0X1BTUl9SSTsKKwkJCQlwdC0+Y3JfaXBzciA9ICgodG1wICYgSVBTUl9NQVNLKQorCQkJCQkgICAgICAgfCAocHQtPmNyX2lwc3IgJiB+SVBTUl9NQVNLKSk7CisJCQl9IGVsc2UKKwkJCQkqZGF0YSA9IChwdC0+Y3JfaXBzciAmIElQU1JfTUFTSyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSBpZiAoYWRkciA9PSBFTEZfTkFUX09GRlNFVCkKKwkJcmV0dXJuIGFjY2Vzc19uYXRfYml0cyh0YXJnZXQsIHB0LCBpbmZvLAorCQkJCSAgICAgICBkYXRhLCB3cml0ZV9hY2Nlc3MpOworCWVsc2UgaWYgKGFkZHIgPT0gRUxGX1BSX09GRlNFVCkKKwkJcHRyID0gJnB0LT5wcjsKKwllbHNlCisJCXJldHVybiAtMTsKKworCWlmICh3cml0ZV9hY2Nlc3MpCisJCSpwdHIgPSAqZGF0YTsKKwllbHNlCisJCSpkYXRhID0gKnB0cjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithY2Nlc3NfZWxmX3JlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgKmRhdGEsIGludCB3cml0ZV9hY2Nlc3MpCit7CisJaWYgKGFkZHIgPj0gRUxGX0dSX09GRlNFVCgxKSAmJiBhZGRyIDw9IEVMRl9HUl9PRkZTRVQoMTUpKQorCQlyZXR1cm4gYWNjZXNzX2VsZl9ncHJlZyh0YXJnZXQsIGluZm8sIGFkZHIsIGRhdGEsIHdyaXRlX2FjY2Vzcyk7CisJZWxzZSBpZiAoYWRkciA+PSBFTEZfQlJfT0ZGU0VUKDApICYmIGFkZHIgPD0gRUxGX0JSX09GRlNFVCg3KSkKKwkJcmV0dXJuIGFjY2Vzc19lbGZfYnJlZyh0YXJnZXQsIGluZm8sIGFkZHIsIGRhdGEsIHdyaXRlX2FjY2Vzcyk7CisJZWxzZQorCQlyZXR1cm4gYWNjZXNzX2VsZl9hcmVnKHRhcmdldCwgaW5mbywgYWRkciwgZGF0YSwgd3JpdGVfYWNjZXNzKTsKK30KKwordm9pZCBkb19ncHJlZ3NfZ2V0KHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQoreworCXN0cnVjdCBwdF9yZWdzICpwdDsKKwlzdHJ1Y3QgcmVnc2V0X2dldHNldCAqZHN0ID0gYXJnOworCWVsZl9ncmVnX3QgdG1wWzE2XTsKKwl1bnNpZ25lZCBpbnQgaSwgaW5kZXgsIG1pbl9jb3B5OworCisJaWYgKHVud191bndpbmRfdG9fdXNlcihpbmZvKSA8IDApCisJCXJldHVybjsKKworCS8qCisJICogY29yZWR1bXAgZm9ybWF0OgorCSAqICAgICAgcjAtcjMxCisJICogICAgICBOYVQgYml0cyAoZm9yIHIwLXIzMTsgYml0IE4gPT0gMSBpZmYgck4gaXMgYSBOYVQpCisJICogICAgICBwcmVkaWNhdGUgcmVnaXN0ZXJzIChwMC1wNjMpCisJICogICAgICBiMC1iNworCSAqICAgICAgaXAgY2ZtIHVzZXItbWFzaworCSAqICAgICAgYXIucnNjIGFyLmJzcCBhci5ic3BzdG9yZSBhci5ybmF0CisJICogICAgICBhci5jY3YgYXIudW5hdCBhci5mcHNyIGFyLnBmcyBhci5sYyBhci5lYworCSAqLworCisKKwkvKiBTa2lwIHIwICovCisJaWYgKGRzdC0+Y291bnQgPiAwICYmIGRzdC0+cG9zIDwgRUxGX0dSX09GRlNFVCgxKSkgeworCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXRfemVybygmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCQkJICAgICAgJmRzdC0+dS5nZXQua2J1ZiwKKwkJCQkJCSAgICAgICZkc3QtPnUuZ2V0LnVidWYsCisJCQkJCQkgICAgICAwLCBFTEZfR1JfT0ZGU0VUKDEpKTsKKwkJaWYgKGRzdC0+cmV0IHx8IGRzdC0+Y291bnQgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBncjEgLSBncjE1ICovCisJaWYgKGRzdC0+Y291bnQgPiAwICYmIGRzdC0+cG9zIDwgRUxGX0dSX09GRlNFVCgxNikpIHsKKwkJaW5kZXggPSAoZHN0LT5wb3MgLSBFTEZfR1JfT0ZGU0VUKDEpKSAvIHNpemVvZihlbGZfZ3JlZ190KTsKKwkJbWluX2NvcHkgPSBFTEZfR1JfT0ZGU0VUKDE2KSA+IChkc3QtPnBvcyArIGRzdC0+Y291bnQpID8KKwkJCSAoZHN0LT5wb3MgKyBkc3QtPmNvdW50KSA6IEVMRl9HUl9PRkZTRVQoMTYpOworCQlmb3IgKGkgPSBkc3QtPnBvczsgaSA8IG1pbl9jb3B5OyBpICs9IHNpemVvZihlbGZfZ3JlZ190KSwKKwkJCQlpbmRleCsrKQorCQkJaWYgKGFjY2Vzc19lbGZfcmVnKGRzdC0+dGFyZ2V0LCBpbmZvLCBpLAorCQkJCQkJJnRtcFtpbmRleF0sIDApIDwgMCkgeworCQkJCWRzdC0+cmV0ID0gLUVJTzsKKwkJCQlyZXR1cm47CisJCQl9CisJCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCSZkc3QtPnUuZ2V0LmtidWYsICZkc3QtPnUuZ2V0LnVidWYsIHRtcCwKKwkJCQlFTEZfR1JfT0ZGU0VUKDEpLCBFTEZfR1JfT0ZGU0VUKDE2KSk7CisJCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCisJCQlyZXR1cm47CisJfQorCisJLyogcjE2LXIzMSAqLworCWlmIChkc3QtPmNvdW50ID4gMCAmJiBkc3QtPnBvcyA8IEVMRl9OQVRfT0ZGU0VUKSB7CisJCXB0ID0gdGFza19wdF9yZWdzKGRzdC0+dGFyZ2V0KTsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwgJnB0LT5yMTYsCisJCQkJRUxGX0dSX09GRlNFVCgxNiksIEVMRl9OQVRfT0ZGU0VUKTsKKwkJaWYgKGRzdC0+cmV0IHx8IGRzdC0+Y291bnQgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBuYXQsIHByLCBiMCAtIGI3ICovCisJaWYgKGRzdC0+Y291bnQgPiAwICYmIGRzdC0+cG9zIDwgRUxGX0NSX0lJUF9PRkZTRVQpIHsKKwkJaW5kZXggPSAoZHN0LT5wb3MgLSBFTEZfTkFUX09GRlNFVCkgLyBzaXplb2YoZWxmX2dyZWdfdCk7CisJCW1pbl9jb3B5ID0gRUxGX0NSX0lJUF9PRkZTRVQgPiAoZHN0LT5wb3MgKyBkc3QtPmNvdW50KSA/CisJCQkgKGRzdC0+cG9zICsgZHN0LT5jb3VudCkgOiBFTEZfQ1JfSUlQX09GRlNFVDsKKwkJZm9yIChpID0gZHN0LT5wb3M7IGkgPCBtaW5fY29weTsgaSArPSBzaXplb2YoZWxmX2dyZWdfdCksCisJCQkJaW5kZXgrKykKKwkJCWlmIChhY2Nlc3NfZWxmX3JlZyhkc3QtPnRhcmdldCwgaW5mbywgaSwKKwkJCQkJCSZ0bXBbaW5kZXhdLCAwKSA8IDApIHsKKwkJCQlkc3QtPnJldCA9IC1FSU87CisJCQkJcmV0dXJuOworCQkJfQorCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkmZHN0LT51LmdldC5rYnVmLCAmZHN0LT51LmdldC51YnVmLCB0bXAsCisJCQkJRUxGX05BVF9PRkZTRVQsIEVMRl9DUl9JSVBfT0ZGU0VUKTsKKwkJaWYgKGRzdC0+cmV0IHx8IGRzdC0+Y291bnQgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBpcCBjZm0gcHNyIGFyLnJzYyBhci5ic3AgYXIuYnNwc3RvcmUgYXIucm5hdAorCSAqIGFyLmNjdiBhci51bmF0IGFyLmZwc3IgYXIucGZzIGFyLmxjIGFyLmVjIGFyLmNzZCBhci5zc2QKKwkgKi8KKwlpZiAoZHN0LT5jb3VudCA+IDAgJiYgZHN0LT5wb3MgPCAoRUxGX0FSX0VORF9PRkZTRVQpKSB7CisJCWluZGV4ID0gKGRzdC0+cG9zIC0gRUxGX0NSX0lJUF9PRkZTRVQpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpOworCQltaW5fY29weSA9IEVMRl9BUl9FTkRfT0ZGU0VUID4gKGRzdC0+cG9zICsgZHN0LT5jb3VudCkgPworCQkJIChkc3QtPnBvcyArIGRzdC0+Y291bnQpIDogRUxGX0FSX0VORF9PRkZTRVQ7CisJCWZvciAoaSA9IGRzdC0+cG9zOyBpIDwgbWluX2NvcHk7IGkgKz0gc2l6ZW9mKGVsZl9ncmVnX3QpLAorCQkJCWluZGV4KyspCisJCQlpZiAoYWNjZXNzX2VsZl9yZWcoZHN0LT50YXJnZXQsIGluZm8sIGksCisJCQkJCQkmdG1wW2luZGV4XSwgMCkgPCAwKSB7CisJCQkJZHN0LT5yZXQgPSAtRUlPOworCQkJCXJldHVybjsKKwkJCX0KKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwgdG1wLAorCQkJCUVMRl9DUl9JSVBfT0ZGU0VULCBFTEZfQVJfRU5EX09GRlNFVCk7CisJfQorfQorCit2b2lkIGRvX2dwcmVnc19zZXQoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCit7CisJc3RydWN0IHB0X3JlZ3MgKnB0OworCXN0cnVjdCByZWdzZXRfZ2V0c2V0ICpkc3QgPSBhcmc7CisJZWxmX2dyZWdfdCB0bXBbMTZdOworCXVuc2lnbmVkIGludCBpLCBpbmRleDsKKworCWlmICh1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQorCQlyZXR1cm47CisKKwkvKiBTa2lwIHIwICovCisJaWYgKGRzdC0+Y291bnQgPiAwICYmIGRzdC0+cG9zIDwgRUxGX0dSX09GRlNFVCgxKSkgeworCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkJCSAgICAgICAmZHN0LT51LnNldC5rYnVmLAorCQkJCQkJICAgICAgICZkc3QtPnUuc2V0LnVidWYsCisJCQkJCQkgICAgICAgMCwgRUxGX0dSX09GRlNFVCgxKSk7CisJCWlmIChkc3QtPnJldCB8fCBkc3QtPmNvdW50ID09IDApCisJCQlyZXR1cm47CisJfQorCisJLyogZ3IxLWdyMTUgKi8KKwlpZiAoZHN0LT5jb3VudCA+IDAgJiYgZHN0LT5wb3MgPCBFTEZfR1JfT0ZGU0VUKDE2KSkgeworCQlpID0gZHN0LT5wb3M7CisJCWluZGV4ID0gKGRzdC0+cG9zIC0gRUxGX0dSX09GRlNFVCgxKSkgLyBzaXplb2YoZWxmX2dyZWdfdCk7CisJCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5zZXQua2J1ZiwgJmRzdC0+dS5zZXQudWJ1ZiwgdG1wLAorCQkJCUVMRl9HUl9PRkZTRVQoMSksIEVMRl9HUl9PRkZTRVQoMTYpKTsKKwkJaWYgKGRzdC0+cmV0KQorCQkJcmV0dXJuOworCQlmb3IgKCA7IGkgPCBkc3QtPnBvczsgaSArPSBzaXplb2YoZWxmX2dyZWdfdCksIGluZGV4KyspCisJCQlpZiAoYWNjZXNzX2VsZl9yZWcoZHN0LT50YXJnZXQsIGluZm8sIGksCisJCQkJCQkmdG1wW2luZGV4XSwgMSkgPCAwKSB7CisJCQkJZHN0LT5yZXQgPSAtRUlPOworCQkJCXJldHVybjsKKwkJCX0KKwkJaWYgKGRzdC0+Y291bnQgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBncjE2LWdyMzEgKi8KKwlpZiAoZHN0LT5jb3VudCA+IDAgJiYgZHN0LT5wb3MgPCBFTEZfTkFUX09GRlNFVCkgeworCQlwdCA9IHRhc2tfcHRfcmVncyhkc3QtPnRhcmdldCk7CisJCWRzdC0+cmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5zZXQua2J1ZiwgJmRzdC0+dS5zZXQudWJ1ZiwgJnB0LT5yMTYsCisJCQkJRUxGX0dSX09GRlNFVCgxNiksIEVMRl9OQVRfT0ZGU0VUKTsKKwkJaWYgKGRzdC0+cmV0IHx8IGRzdC0+Y291bnQgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBuYXQsIHByLCBiMCAtIGI3ICovCisJaWYgKGRzdC0+Y291bnQgPiAwICYmIGRzdC0+cG9zIDwgRUxGX0NSX0lJUF9PRkZTRVQpIHsKKwkJaSA9IGRzdC0+cG9zOworCQlpbmRleCA9IChkc3QtPnBvcyAtIEVMRl9OQVRfT0ZGU0VUKSAvIHNpemVvZihlbGZfZ3JlZ190KTsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkmZHN0LT51LnNldC5rYnVmLCAmZHN0LT51LnNldC51YnVmLCB0bXAsCisJCQkJRUxGX05BVF9PRkZTRVQsIEVMRl9DUl9JSVBfT0ZGU0VUKTsKKwkJaWYgKGRzdC0+cmV0KQorCQkJcmV0dXJuOworCQlmb3IgKDsgaSA8IGRzdC0+cG9zOyBpICs9IHNpemVvZihlbGZfZ3JlZ190KSwgaW5kZXgrKykKKwkJCWlmIChhY2Nlc3NfZWxmX3JlZyhkc3QtPnRhcmdldCwgaW5mbywgaSwKKwkJCQkJCSZ0bXBbaW5kZXhdLCAxKSA8IDApIHsKKwkJCQlkc3QtPnJldCA9IC1FSU87CisJCQkJcmV0dXJuOworCQkJfQorCQlpZiAoZHN0LT5jb3VudCA9PSAwKQorCQkJcmV0dXJuOworCX0KKworCS8qIGlwIGNmbSBwc3IgYXIucnNjIGFyLmJzcCBhci5ic3BzdG9yZSBhci5ybmF0CisJICogYXIuY2N2IGFyLnVuYXQgYXIuZnBzciBhci5wZnMgYXIubGMgYXIuZWMgYXIuY3NkIGFyLnNzZAorCSAqLworCWlmIChkc3QtPmNvdW50ID4gMCAmJiBkc3QtPnBvcyA8IChFTEZfQVJfRU5EX09GRlNFVCkpIHsKKwkJaSA9IGRzdC0+cG9zOworCQlpbmRleCA9IChkc3QtPnBvcyAtIEVMRl9DUl9JSVBfT0ZGU0VUKSAvIHNpemVvZihlbGZfZ3JlZ190KTsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkmZHN0LT51LnNldC5rYnVmLCAmZHN0LT51LnNldC51YnVmLCB0bXAsCisJCQkJRUxGX0NSX0lJUF9PRkZTRVQsIEVMRl9BUl9FTkRfT0ZGU0VUKTsKKwkJaWYgKGRzdC0+cmV0KQorCQkJcmV0dXJuOworCQlmb3IgKCA7IGkgPCBkc3QtPnBvczsgaSArPSBzaXplb2YoZWxmX2dyZWdfdCksIGluZGV4KyspCisJCQlpZiAoYWNjZXNzX2VsZl9yZWcoZHN0LT50YXJnZXQsIGluZm8sIGksCisJCQkJCQkmdG1wW2luZGV4XSwgMSkgPCAwKSB7CisJCQkJZHN0LT5yZXQgPSAtRUlPOworCQkJCXJldHVybjsKKwkJCX0KKwl9Cit9CisKKyNkZWZpbmUgRUxGX0ZQX09GRlNFVChpKQkoaSAqIHNpemVvZihlbGZfZnByZWdfdCkpCisKK3ZvaWQgZG9fZnByZWdzX2dldChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmVnc2V0X2dldHNldCAqZHN0ID0gYXJnOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGRzdC0+dGFyZ2V0OworCWVsZl9mcHJlZ190IHRtcFszMF07CisJaW50IGluZGV4LCBtaW5fY29weSwgaTsKKworCWlmICh1bndfdW53aW5kX3RvX3VzZXIoaW5mbykgPCAwKQorCQlyZXR1cm47CisKKwkvKiBTa2lwIHBvcyAwIGFuZCAxICovCisJaWYgKGRzdC0+Y291bnQgPiAwICYmIGRzdC0+cG9zIDwgRUxGX0ZQX09GRlNFVCgyKSkgeworCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXRfemVybygmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCQkJICAgICAgJmRzdC0+dS5nZXQua2J1ZiwKKwkJCQkJCSAgICAgICZkc3QtPnUuZ2V0LnVidWYsCisJCQkJCQkgICAgICAwLCBFTEZfRlBfT0ZGU0VUKDIpKTsKKwkJaWYgKGRzdC0+Y291bnQgPT0gMCB8fCBkc3QtPnJldCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBmcjItZnIzMSAqLworCWlmIChkc3QtPmNvdW50ID4gMCAmJiBkc3QtPnBvcyA8IEVMRl9GUF9PRkZTRVQoMzIpKSB7CisJCWluZGV4ID0gKGRzdC0+cG9zIC0gRUxGX0ZQX09GRlNFVCgyKSkgLyBzaXplb2YoZWxmX2ZwcmVnX3QpOworCisJCW1pbl9jb3B5ID0gbWluKCgodW5zaWduZWQgaW50KUVMRl9GUF9PRkZTRVQoMzIpKSwKKwkJCQlkc3QtPnBvcyArIGRzdC0+Y291bnQpOworCQlmb3IgKGkgPSBkc3QtPnBvczsgaSA8IG1pbl9jb3B5OyBpICs9IHNpemVvZihlbGZfZnByZWdfdCksCisJCQkJaW5kZXgrKykKKwkJCWlmICh1bndfZ2V0X2ZyKGluZm8sIGkgLyBzaXplb2YoZWxmX2ZwcmVnX3QpLAorCQkJCQkgJnRtcFtpbmRleF0pKSB7CisJCQkJZHN0LT5yZXQgPSAtRUlPOworCQkJCXJldHVybjsKKwkJCX0KKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwgdG1wLAorCQkJCUVMRl9GUF9PRkZTRVQoMiksIEVMRl9GUF9PRkZTRVQoMzIpKTsKKwkJaWYgKGRzdC0+Y291bnQgPT0gMCB8fCBkc3QtPnJldCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBmcGggKi8KKwlpZiAoZHN0LT5jb3VudCA+IDApIHsKKwkJaWE2NF9mbHVzaF9mcGgoZHN0LT50YXJnZXQpOworCQlpZiAodGFzay0+dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfRlBIX1ZBTElEKQorCQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KAorCQkJCSZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJJmRzdC0+dS5nZXQua2J1ZiwgJmRzdC0+dS5nZXQudWJ1ZiwKKwkJCQkmZHN0LT50YXJnZXQtPnRocmVhZC5mcGgsCisJCQkJRUxGX0ZQX09GRlNFVCgzMiksIC0xKTsKKwkJZWxzZQorCQkJLyogWmVybyBmaWxsIGluc3RlYWQuICAqLworCQkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0X3plcm8oCisJCQkJJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkmZHN0LT51LmdldC5rYnVmLCAmZHN0LT51LmdldC51YnVmLAorCQkJCUVMRl9GUF9PRkZTRVQoMzIpLCAtMSk7CisJfQorfQorCit2b2lkIGRvX2ZwcmVnc19zZXQoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCit7CisJc3RydWN0IHJlZ3NldF9nZXRzZXQgKmRzdCA9IGFyZzsKKwllbGZfZnByZWdfdCBmcHJlZywgdG1wWzMwXTsKKwlpbnQgaW5kZXgsIHN0YXJ0LCBlbmQ7CisKKwlpZiAodW53X3Vud2luZF90b191c2VyKGluZm8pIDwgMCkKKwkJcmV0dXJuOworCisJLyogU2tpcCBwb3MgMCBhbmQgMSAqLworCWlmIChkc3QtPmNvdW50ID4gMCAmJiBkc3QtPnBvcyA8IEVMRl9GUF9PRkZTRVQoMikpIHsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW5faWdub3JlKCZkc3QtPnBvcywgJmRzdC0+Y291bnQsCisJCQkJCQkgICAgICAgJmRzdC0+dS5zZXQua2J1ZiwKKwkJCQkJCSAgICAgICAmZHN0LT51LnNldC51YnVmLAorCQkJCQkJICAgICAgIDAsIEVMRl9GUF9PRkZTRVQoMikpOworCQlpZiAoZHN0LT5jb3VudCA9PSAwIHx8IGRzdC0+cmV0KQorCQkJcmV0dXJuOworCX0KKworCS8qIGZyMi1mcjMxICovCisJaWYgKGRzdC0+Y291bnQgPiAwICYmIGRzdC0+cG9zIDwgRUxGX0ZQX09GRlNFVCgzMikpIHsKKwkJc3RhcnQgPSBkc3QtPnBvczsKKwkJZW5kID0gbWluKCgodW5zaWduZWQgaW50KUVMRl9GUF9PRkZTRVQoMzIpKSwKKwkJCSBkc3QtPnBvcyArIGRzdC0+Y291bnQpOworCQlkc3QtPnJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmZHN0LT5wb3MsICZkc3QtPmNvdW50LAorCQkJCSZkc3QtPnUuc2V0LmtidWYsICZkc3QtPnUuc2V0LnVidWYsIHRtcCwKKwkJCQlFTEZfRlBfT0ZGU0VUKDIpLCBFTEZfRlBfT0ZGU0VUKDMyKSk7CisJCWlmIChkc3QtPnJldCkKKwkJCXJldHVybjsKKworCQlpZiAoc3RhcnQgJiAweEYpIHsgLyogb25seSB3cml0ZSBoaWdoIHBhcnQgKi8KKwkJCWlmICh1bndfZ2V0X2ZyKGluZm8sIHN0YXJ0IC8gc2l6ZW9mKGVsZl9mcHJlZ190KSwKKwkJCQkJICZmcHJlZykpIHsKKwkJCQlkc3QtPnJldCA9IC1FSU87CisJCQkJcmV0dXJuOworCQkJfQorCQkJdG1wW3N0YXJ0IC8gc2l6ZW9mKGVsZl9mcHJlZ190KSAtIDJdLnUuYml0c1swXQorCQkJCT0gZnByZWcudS5iaXRzWzBdOworCQkJc3RhcnQgJj0gfjB4RlVMOworCQl9CisJCWlmIChlbmQgJiAweEYpIHsgLyogb25seSB3cml0ZSBsb3cgcGFydCAqLworCQkJaWYgKHVud19nZXRfZnIoaW5mbywgZW5kIC8gc2l6ZW9mKGVsZl9mcHJlZ190KSwKKwkJCQkJJmZwcmVnKSkgeworCQkJCWRzdC0+cmV0ID0gLUVJTzsKKwkJCQlyZXR1cm47CisJCQl9CisJCQl0bXBbZW5kIC8gc2l6ZW9mKGVsZl9mcHJlZ190KSAtIDJdLnUuYml0c1sxXQorCQkJCT0gZnByZWcudS5iaXRzWzFdOworCQkJZW5kID0gKGVuZCArIDB4RikgJiB+MHhGVUw7CisJCX0KKworCQlmb3IgKCA7CXN0YXJ0IDwgZW5kIDsgc3RhcnQgKz0gc2l6ZW9mKGVsZl9mcHJlZ190KSkgeworCQkJaW5kZXggPSBzdGFydCAvIHNpemVvZihlbGZfZnByZWdfdCk7CisJCQlpZiAodW53X3NldF9mcihpbmZvLCBpbmRleCwgdG1wW2luZGV4IC0gMl0pKSB7CisJCQkJZHN0LT5yZXQgPSAtRUlPOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlpZiAoZHN0LT5yZXQgfHwgZHN0LT5jb3VudCA9PSAwKQorCQkJcmV0dXJuOworCX0KKworCS8qIGZwaCAqLworCWlmIChkc3QtPmNvdW50ID4gMCAmJiBkc3QtPnBvcyA8IEVMRl9GUF9PRkZTRVQoMTI4KSkgeworCQlpYTY0X3N5bmNfZnBoKGRzdC0+dGFyZ2V0KTsKKwkJZHN0LT5yZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJmRzdC0+cG9zLCAmZHN0LT5jb3VudCwKKwkJCQkJCSZkc3QtPnUuc2V0LmtidWYsCisJCQkJCQkmZHN0LT51LnNldC51YnVmLAorCQkJCQkJJmRzdC0+dGFyZ2V0LT50aHJlYWQuZnBoLAorCQkJCQkJRUxGX0ZQX09GRlNFVCgzMiksIC0xKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2RvX3JlZ3NldF9jYWxsKHZvaWQgKCpjYWxsKShzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKiwgdm9pZCAqKSwKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCXN0cnVjdCByZWdzZXRfZ2V0c2V0IGluZm8gPSB7IC50YXJnZXQgPSB0YXJnZXQsIC5yZWdzZXQgPSByZWdzZXQsCisJCQkJIC5wb3MgPSBwb3MsIC5jb3VudCA9IGNvdW50LAorCQkJCSAudS5zZXQgPSB7IC5rYnVmID0ga2J1ZiwgLnVidWYgPSB1YnVmIH0sCisJCQkJIC5yZXQgPSAwIH07CisKKwlpZiAodGFyZ2V0ID09IGN1cnJlbnQpCisJCXVud19pbml0X3J1bm5pbmcoY2FsbCwgJmluZm8pOworCWVsc2UgeworCQlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gdWZpOworCQltZW1zZXQoJnVmaSwgMCwgc2l6ZW9mKHVmaSkpOworCQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdWZpLCB0YXJnZXQpOworCQkoKmNhbGwpKCZ1ZmksICZpbmZvKTsKKwl9CisKKwlyZXR1cm4gaW5mby5yZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2dwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCSAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCXJldHVybiBkb19yZWdzZXRfY2FsbChkb19ncHJlZ3NfZ2V0LCB0YXJnZXQsIHJlZ3NldCwgcG9zLCBjb3VudCwKKwkJa2J1ZiwgdWJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZ3ByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCXVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJcmV0dXJuIGRvX3JlZ3NldF9jYWxsKGRvX2dwcmVnc19zZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAorCQlrYnVmLCB1YnVmKTsKK30KKworc3RhdGljIHZvaWQgZG9fZ3ByZWdzX3dyaXRlYmFjayhzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHZvaWQgKmFyZykKK3sKKwlkb19zeW5jX3JicyhpbmZvLCBpYTY0X3N5bmNfdXNlcl9yYnMpOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgdG8gd3JpdGUgYmFjayB0aGUgcmVnaXN0ZXIgYmFja2luZyBzdG9yZS4KKyAqIHB0cmFjZSBkb2VzIHRoaXMgYmVmb3JlIGl0IHN0b3BzLCBzbyB0aGF0IGEgdHJhY2VyIHJlYWRpbmcgdGhlIHVzZXIKKyAqIG1lbW9yeSBhZnRlciB0aGUgdGhyZWFkIHN0b3BzIHdpbGwgZ2V0IHRoZSBjdXJyZW50IHJlZ2lzdGVyIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQKK2dwcmVnc193cml0ZWJhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJIGludCBub3cpCit7CisJaWYgKHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcodGFyZ2V0LCBUSUZfUkVTVE9SRV9SU0UpKQorCQlyZXR1cm4gMDsKKwl0c2tfc2V0X25vdGlmeV9yZXN1bWUodGFyZ2V0KTsKKwlyZXR1cm4gZG9fcmVnc2V0X2NhbGwoZG9fZ3ByZWdzX3dyaXRlYmFjaywgdGFyZ2V0LCByZWdzZXQsIDAsIDAsCisJCU5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW50CitmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCkKK3sKKwlyZXR1cm4gKHRhcmdldC0+dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfRlBIX1ZBTElEKSA/IDEyOCA6IDMyOworfQorCitzdGF0aWMgaW50IGZwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCXZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCXJldHVybiBkb19yZWdzZXRfY2FsbChkb19mcHJlZ3NfZ2V0LCB0YXJnZXQsIHJlZ3NldCwgcG9zLCBjb3VudCwKKwkJa2J1ZiwgdWJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCXVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJcmV0dXJuIGRvX3JlZ3NldF9jYWxsKGRvX2ZwcmVnc19zZXQsIHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LAorCQlrYnVmLCB1YnVmKTsKK30KKworc3RhdGljIGludAorYWNjZXNzX3VhcmVhKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkgICAgICB1bnNpZ25lZCBsb25nICpkYXRhLCBpbnQgd3JpdGVfYWNjZXNzKQoreworCXVuc2lnbmVkIGludCBwb3MgPSAtMTsgLyogYW4gaW52YWxpZCB2YWx1ZSAqLworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyAqcHRyLCByZWdudW07CisKKwlpZiAoKGFkZHIgJiAweDcpICE9IDApIHsKKwkJZHByaW50aygicHRyYWNlOiB1bmFsaWduZWQgcmVnaXN0ZXIgYWRkcmVzcyAweCVseFxuIiwgYWRkcik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKChhZGRyID49IFBUX05BVF9CSVRTICsgOCAmJiBhZGRyIDwgUFRfRjIpIHx8CisJCShhZGRyID49IFBUX1I3ICsgOCAmJiBhZGRyIDwgUFRfQjEpIHx8CisJCShhZGRyID49IFBUX0FSX0xDICsgOCAmJiBhZGRyIDwgUFRfQ1JfSVBTUikgfHwKKwkJKGFkZHIgPj0gUFRfQVJfU1NEICsgOCAmJiBhZGRyIDwgUFRfREJSKSkgeworCQlkcHJpbnRrKCJwdHJhY2U6IHJlamVjdGluZyBhY2Nlc3MgdG8gcmVnaXN0ZXIgIgorCQkJCQkiYWRkcmVzcyAweCVseFxuIiwgYWRkcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzd2l0Y2ggKGFkZHIpIHsKKwljYXNlIFBUX0YzMiAuLi4gKFBUX0YxMjcgKyAxNSk6CisJCXBvcyA9IGFkZHIgLSBQVF9GMzIgKyBFTEZfRlBfT0ZGU0VUKDMyKTsKKwkJYnJlYWs7CisJY2FzZSBQVF9GMiAuLi4gKFBUX0Y1ICsgMTUpOgorCQlwb3MgPSBhZGRyIC0gUFRfRjIgKyBFTEZfRlBfT0ZGU0VUKDIpOworCQlicmVhazsKKwljYXNlIFBUX0YxMCAuLi4gKFBUX0YzMSArIDE1KToKKwkJcG9zID0gYWRkciAtIFBUX0YxMCArIEVMRl9GUF9PRkZTRVQoMTApOworCQlicmVhazsKKwljYXNlIFBUX0Y2IC4uLiAoUFRfRjkgKyAxNSk6CisJCXBvcyA9IGFkZHIgLSBQVF9GNiArIEVMRl9GUF9PRkZTRVQoNik7CisJCWJyZWFrOworCX0KKworCWlmIChwb3MgIT0gLTEpIHsKKwkJaWYgKHdyaXRlX2FjY2VzcykKKwkJCXJldCA9IGZwcmVnc19zZXQoY2hpbGQsIE5VTEwsIHBvcywKKwkJCQlzaXplb2YodW5zaWduZWQgbG9uZyksIGRhdGEsIE5VTEwpOworCQllbHNlCisJCQlyZXQgPSBmcHJlZ3NfZ2V0KGNoaWxkLCBOVUxMLCBwb3MsCisJCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBkYXRhLCBOVUxMKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGFkZHIpIHsKKwljYXNlIFBUX05BVF9CSVRTOgorCQlwb3MgPSBFTEZfTkFUX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQVF9SNCAuLi4gUFRfUjc6CisJCXBvcyA9IGFkZHIgLSBQVF9SNCArIEVMRl9HUl9PRkZTRVQoNCk7CisJCWJyZWFrOworCWNhc2UgUFRfQjEgLi4uIFBUX0I1OgorCQlwb3MgPSBhZGRyIC0gUFRfQjEgKyBFTEZfQlJfT0ZGU0VUKDEpOworCQlicmVhazsKKwljYXNlIFBUX0FSX0VDOgorCQlwb3MgPSBFTEZfQVJfRUNfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIFBUX0FSX0xDOgorCQlwb3MgPSBFTEZfQVJfTENfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIFBUX0NSX0lQU1I6CisJCXBvcyA9IEVMRl9DUl9JUFNSX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQVF9DUl9JSVA6CisJCXBvcyA9IEVMRl9DUl9JSVBfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIFBUX0NGTToKKwkJcG9zID0gRUxGX0NGTV9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUFRfQVJfVU5BVDoKKwkJcG9zID0gRUxGX0FSX1VOQVRfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIFBUX0FSX1BGUzoKKwkJcG9zID0gRUxGX0FSX1BGU19PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUFRfQVJfUlNDOgorCQlwb3MgPSBFTEZfQVJfUlNDX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQVF9BUl9STkFUOgorCQlwb3MgPSBFTEZfQVJfUk5BVF9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUFRfQVJfQlNQU1RPUkU6CisJCXBvcyA9IEVMRl9BUl9CU1BTVE9SRV9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUFRfUFI6CisJCXBvcyA9IEVMRl9QUl9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUFRfQjY6CisJCXBvcyA9IEVMRl9CUl9PRkZTRVQoNik7CisJCWJyZWFrOworCWNhc2UgUFRfQVJfQlNQOgorCQlwb3MgPSBFTEZfQVJfQlNQX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQVF9SMSAuLi4gUFRfUjM6CisJCXBvcyA9IGFkZHIgLSBQVF9SMSArIEVMRl9HUl9PRkZTRVQoMSk7CisJCWJyZWFrOworCWNhc2UgUFRfUjEyIC4uLiBQVF9SMTU6CisJCXBvcyA9IGFkZHIgLSBQVF9SMTIgKyBFTEZfR1JfT0ZGU0VUKDEyKTsKKwkJYnJlYWs7CisJY2FzZSBQVF9SOCAuLi4gUFRfUjExOgorCQlwb3MgPSBhZGRyIC0gUFRfUjggKyBFTEZfR1JfT0ZGU0VUKDgpOworCQlicmVhazsKKwljYXNlIFBUX1IxNiAuLi4gUFRfUjMxOgorCQlwb3MgPSBhZGRyIC0gUFRfUjE2ICsgRUxGX0dSX09GRlNFVCgxNik7CisJCWJyZWFrOworCWNhc2UgUFRfQVJfQ0NWOgorCQlwb3MgPSBFTEZfQVJfQ0NWX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQVF9BUl9GUFNSOgorCQlwb3MgPSBFTEZfQVJfRlBTUl9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUFRfQjA6CisJCXBvcyA9IEVMRl9CUl9PRkZTRVQoMCk7CisJCWJyZWFrOworCWNhc2UgUFRfQjc6CisJCXBvcyA9IEVMRl9CUl9PRkZTRVQoNyk7CisJCWJyZWFrOworCWNhc2UgUFRfQVJfQ1NEOgorCQlwb3MgPSBFTEZfQVJfQ1NEX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQVF9BUl9TU0Q6CisJCXBvcyA9IEVMRl9BUl9TU0RfT0ZGU0VUOworCQlicmVhazsKKwl9CisKKwlpZiAocG9zICE9IC0xKSB7CisJCWlmICh3cml0ZV9hY2Nlc3MpCisJCQlyZXQgPSBncHJlZ3Nfc2V0KGNoaWxkLCBOVUxMLCBwb3MsCisJCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBkYXRhLCBOVUxMKTsKKwkJZWxzZQorCQkJcmV0ID0gZ3ByZWdzX2dldChjaGlsZCwgTlVMTCwgcG9zLAorCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSwgZGF0YSwgTlVMTCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWNjZXNzIGRlYnVnIHJlZ2lzdGVycyAqLworCWlmIChhZGRyID49IFBUX0lCUikgeworCQlyZWdudW0gPSAoYWRkciAtIFBUX0lCUikgPj4gMzsKKwkJcHRyID0gJmNoaWxkLT50aHJlYWQuaWJyWzBdOworCX0gZWxzZSB7CisJCXJlZ251bSA9IChhZGRyIC0gUFRfREJSKSA+PiAzOworCQlwdHIgPSAmY2hpbGQtPnRocmVhZC5kYnJbMF07CisJfQorCisJaWYgKHJlZ251bSA+PSA4KSB7CisJCWRwcmludGsoInB0cmFjZTogcmVqZWN0aW5nIGFjY2VzcyB0byByZWdpc3RlciAiCisJCQkJImFkZHJlc3MgMHglbHhcbiIsIGFkZHIpOworCQlyZXR1cm4gLTE7CisJfQorI2lmZGVmIENPTkZJR19QRVJGTU9OCisJLyoKKwkgKiBDaGVjayBpZiBkZWJ1ZyByZWdpc3RlcnMgYXJlIHVzZWQgYnkgcGVyZm1vbi4gVGhpcworCSAqIHRlc3QgbXVzdCBiZSBkb25lIG9uY2Ugd2Uga25vdyB0aGF0IHdlIGNhbiBkbyB0aGUKKwkgKiBvcGVyYXRpb24sIGkuZS4gdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHZhbGlkLCBidXQKKwkgKiBiZWZvcmUgd2Ugc3RhcnQgbW9kaWZ5aW5nIHRoZSBzdGF0ZS4KKwkgKgorCSAqIFBlcmZtb24gbmVlZHMgdG8ga2VlcCBhIGNvdW50IG9mIGhvdyBtYW55IHByb2Nlc3NlcworCSAqIGFyZSB0cnlpbmcgdG8gbW9kaWZ5IHRoZSBkZWJ1ZyByZWdpc3RlcnMgZm9yIHN5c3RlbQorCSAqIHdpZGUgbW9uaXRvcmluZyBzZXNzaW9ucy4KKwkgKgorCSAqIFdlIGFsc28gaW5jbHVkZSByZWFkIGFjY2VzcyBoZXJlLCBiZWNhdXNlIHRoZXkgbWF5CisJICogY2F1c2UgdGhlIFBNVS1pbnN0YWxsZWQgZGVidWcgcmVnaXN0ZXIgc3RhdGUKKwkgKiAoZGJyW10sIGlicltdKSB0byBiZSByZXNldC4gVGhlIHR3byBhcnJheXMgYXJlIGFsc28KKwkgKiB1c2VkIGJ5IHBlcmZtb24sIGJ1dCB3ZSBkbyBub3QgdXNlCisJICogSUE2NF9USFJFQURfREJHX1ZBTElELiBUaGUgcmVnaXN0ZXJzIGFyZSByZXN0b3JlZAorCSAqIGJ5IHRoZSBQTVUgY29udGV4dCBzd2l0Y2ggY29kZS4KKwkgKi8KKwlpZiAocGZtX3VzZV9kZWJ1Z19yZWdpc3RlcnMoY2hpbGQpKQorCQlyZXR1cm4gLTE7CisjZW5kaWYKKworCWlmICghKGNoaWxkLT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9EQkdfVkFMSUQpKSB7CisJCWNoaWxkLT50aHJlYWQuZmxhZ3MgfD0gSUE2NF9USFJFQURfREJHX1ZBTElEOworCQltZW1zZXQoY2hpbGQtPnRocmVhZC5kYnIsIDAsCisJCQkJc2l6ZW9mKGNoaWxkLT50aHJlYWQuZGJyKSk7CisJCW1lbXNldChjaGlsZC0+dGhyZWFkLmliciwgMCwKKwkJCQlzaXplb2YoY2hpbGQtPnRocmVhZC5pYnIpKTsKKwl9CisKKwlwdHIgKz0gcmVnbnVtOworCisJaWYgKChyZWdudW0gJiAxKSAmJiB3cml0ZV9hY2Nlc3MpIHsKKwkJLyogZG9uJ3QgbGV0IHRoZSB1c2VyIHNldCBrZXJuZWwtbGV2ZWwgYnJlYWtwb2ludHM6ICovCisJCSpwdHIgPSAqZGF0YSAmIH4oN1VMIDw8IDU2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh3cml0ZV9hY2Nlc3MpCisJCSpwdHIgPSAqZGF0YTsKKwllbHNlCisJCSpkYXRhID0gKnB0cjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBuYXRpdmVfcmVnc2V0c1tdID0geworCXsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJTVEFUVVMsCisJCS5uID0gRUxGX05HUkVHLAorCQkuc2l6ZSA9IHNpemVvZihlbGZfZ3JlZ190KSwgLmFsaWduID0gc2l6ZW9mKGVsZl9ncmVnX3QpLAorCQkuZ2V0ID0gZ3ByZWdzX2dldCwgLnNldCA9IGdwcmVnc19zZXQsCisJCS53cml0ZWJhY2sgPSBncHJlZ3Nfd3JpdGViYWNrCisJfSwKKwl7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSRlBSRUcsCisJCS5uID0gRUxGX05GUFJFRywKKwkJLnNpemUgPSBzaXplb2YoZWxmX2ZwcmVnX3QpLCAuYWxpZ24gPSBzaXplb2YoZWxmX2ZwcmVnX3QpLAorCQkuZ2V0ID0gZnByZWdzX2dldCwgLnNldCA9IGZwcmVnc19zZXQsIC5hY3RpdmUgPSBmcHJlZ3NfYWN0aXZlCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyB1c2VyX2lhNjRfdmlldyA9IHsKKwkubmFtZSA9ICJpYTY0IiwKKwkuZV9tYWNoaW5lID0gRU1fSUFfNjQsCisJLnJlZ3NldHMgPSBuYXRpdmVfcmVnc2V0cywgLm4gPSBBUlJBWV9TSVpFKG5hdGl2ZV9yZWdzZXRzKQorfTsKKworY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnRhc2tfdXNlcl9yZWdzZXRfdmlldyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCisJZXh0ZXJuIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfaWEzMl92aWV3OworCWlmIChJU19JQTMyX1BST0NFU1ModGFza19wdF9yZWdzKHRzaykpKQorCQlyZXR1cm4gJnVzZXJfaWEzMl92aWV3OworI2VuZGlmCisJcmV0dXJuICZ1c2VyX2lhNjRfdmlldzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2FsLmMgYi9hcmNoL2lhNjQva2VybmVsL3NhbC5jCmluZGV4IGY0NGZlODQuLmEzMDIyZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2FsLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zYWwuYwpAQCAtMTA5LDYgKzEwOSwxMyBAQAogCQlzYWxfcmV2aXNpb24gPSBTQUxfVkVSU0lPTl9DT0RFKDIsIDgpOwogCQlzYWxfdmVyc2lvbiA9IFNBTF9WRVJTSU9OX0NPREUoMCwgMCk7CiAJfQorCisJaWYgKGlhNjRfcGxhdGZvcm1faXMoInNuMiIpICYmIChzYWxfcmV2aXNpb24gPT0gU0FMX1ZFUlNJT05fQ09ERSgyLCA5KSkpCisJCS8qCisJCSAqIFNHSSBBbHRpeCBoYXMgaGFyZC1jb2RlZCB2ZXJzaW9uIDIuOSBpbiB0aGVpciBwcm9tCisJCSAqIGJ1dCB0aGV5IGFjdHVhbGx5IGltcGxlbWVudCAzLjIsIHNvIGxldCdzIGZpeCBpdCBoZXJlLgorCQkgKi8KKwkJc2FsX3JldmlzaW9uID0gU0FMX1ZFUlNJT05fQ09ERSgzLCAyKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCmluZGV4IDc3OWMzY2MuLmIxMWJiNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCkBAIC00NCw4ICs0NCw4IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3NhbC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL2lhNjQva2VybmVsL3NlbWFwaG9yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzI0ZWYzLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIElBLTY0IHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiAoZGVyaXZlZCBmcm9tIHg4NiB2ZXJzaW9uKS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCwgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ28KLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KLSAqLwotCi0vKgotICogU2VtYXBob3JlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0d28td2F5IGNvdW50ZXI6IFRoZSAiY291bnQiCi0gKiB2YXJpYWJsZSBpcyBkZWNyZW1lbnRlZCBmb3IgZWFjaCBwcm9jZXNzIHRoYXQgdHJpZXMgdG8gYWNxdWlyZSB0aGUKLSAqIHNlbWFwaG9yZSwgd2hpbGUgdGhlICJzbGVlcGVycyIgdmFyaWFibGUgaXMgYSBjb3VudCBvZiBzdWNoCi0gKiBhY3F1aXJlcy4KLSAqCi0gKiBOb3RhYmx5LCB0aGUgaW5saW5lICJ1cCgpIiBhbmQgImRvd24oKSIgZnVuY3Rpb25zIGNhbiBlZmZpY2llbnRseQotICogdGVzdCBpZiB0aGV5IG5lZWQgdG8gZG8gYW55IGV4dHJhIHdvcmsgKHVwIG5lZWRzIHRvIGRvIHNvbWV0aGluZwotICogb25seSBpZiBjb3VudCB3YXMgbmVnYXRpdmUgYmVmb3JlIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqICJzbGVlcGluZyIgYW5kIHRoZSBjb250ZW50aW9uIHJvdXRpbmUgb3JkZXJpbmcgaXMgcHJvdGVjdGVkCi0gKiBieSB0aGUgc3BpbmxvY2sgaW4gdGhlIHNlbWFwaG9yZSdzIHdhaXRxdWV1ZSBoZWFkLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMgY29udGVudGlvbgotICogb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZSAibm9uLWNyaXRpY2FsIiBwYXJ0IG9mIHRoZQotICogd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgaW5saW5lIHN0dWZmIGluCi0gKiA8YXNtL3NlbWFwaG9yZS5oPiB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkIGFueSBleHRyYSBqdW1wcyBhbmQgY2FsbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLQotLyoKLSAqIExvZ2ljOgotICogIC0gT25seSBvbiBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBkbyB3ZSBuZWVkIHRvIGNhcmUuIFdoZW4gd2UgZ28KLSAqICAgIGZyb20gYSBuZWdhdGl2ZSBjb3VudCB0byBhIG5vbi1uZWdhdGl2ZSwgd2Ugd2FrZSBwZW9wbGUgdXAuCi0gKiAgLSBXaGVuIHdlIGdvIGZyb20gYSBub24tbmVnYXRpdmUgY291bnQgdG8gYSBuZWdhdGl2ZSBkbyB3ZQotICogICAgKGEpIHN5bmNocm9uaXplIHdpdGggdGhlICJzbGVlcGVycyIgY291bnQgYW5kIChiKSBtYWtlIHN1cmUKLSAqICAgIHRoYXQgd2UncmUgb24gdGhlIHdha2V1cCBsaXN0IGJlZm9yZSB3ZSBzeW5jaHJvbml6ZSBzbyB0aGF0Ci0gKiAgICB3ZSBjYW5ub3QgbG9zZSB3YWtldXAgZXZlbnRzLgotICovCi0KLXZvaWQKLV9fdXAgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi12b2lkIF9fc2NoZWQgX19kb3duIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXRzay0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmVfbG9ja2VkKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCXNlbS0+c2xlZXBlcnMrKzsKLQlmb3IgKDs7KSB7Ci0JCWludCBzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnM7Ci0KLQkJLyoKLQkJICogQWRkICJldmVyeWJvZHkgZWxzZSIgaW50byBpdC4gVGhleSBhcmVuJ3QKLQkJICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrIGluCi0JCSAqIHRoZSB3YWl0X3F1ZXVlX2hlYWQuCi0JCSAqLwotCQlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoc2xlZXBlcnMgLSAxLCAmc2VtLT5jb3VudCkpIHsKLQkJCXNlbS0+c2xlZXBlcnMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2VtLT5zbGVlcGVycyA9IDE7CS8qIHVzIC0gc2VlIC0xIGFib3ZlICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0KLQkJc2NoZWR1bGUoKTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQkJdHNrLT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwotCX0KLQlyZW1vdmVfd2FpdF9xdWV1ZV9sb2NrZWQoJnNlbS0+d2FpdCwgJndhaXQpOwotCXdha2VfdXBfbG9ja2VkKCZzZW0tPndhaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLX0KLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUgKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlX2xvY2tlZCgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQlzZW0tPnNsZWVwZXJzICsrOwotCWZvciAoOzspIHsKLQkJaW50IHNsZWVwZXJzID0gc2VtLT5zbGVlcGVyczsKLQotCQkvKgotCQkgKiBXaXRoIHNpZ25hbHMgcGVuZGluZywgdGhpcyB0dXJucyBpbnRvCi0JCSAqIHRoZSB0cnlsb2NrIGZhaWx1cmUgY2FzZSAtIHdlIHdvbid0IGJlCi0JCSAqIHNsZWVwaW5nLCBhbmQgd2UqIGNhbid0IGdldCB0aGUgbG9jayBhcwotCQkgKiBpdCBoYXMgY29udGVudGlvbi4gSnVzdCBjb3JyZWN0IHRoZSBjb3VudAotCQkgKiBhbmQgZXhpdC4KLQkJICovCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0dmFsID0gLUVJTlRSOwotCQkJc2VtLT5zbGVlcGVycyA9IDA7Ci0JCQlhdG9taWNfYWRkKHNsZWVwZXJzLCAmc2VtLT5jb3VudCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JCSAqIHBsYXlpbmcsIGJlY2F1c2Ugd2Ugb3duIHRoZSBzcGlubG9jayBpbgotCQkgKiB3YWl0X3F1ZXVlX2hlYWQuIFRoZSAiLTEiIGlzIGJlY2F1c2Ugd2UncmUKLQkJICogc3RpbGwgaG9waW5nIHRvIGdldCB0aGUgc2VtYXBob3JlLgotCQkgKi8KLQkJaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKHNsZWVwZXJzIC0gMSwgJnNlbS0+Y291bnQpKSB7Ci0JCQlzZW0tPnNsZWVwZXJzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNlbS0+c2xlZXBlcnMgPSAxOwkvKiB1cyAtIHNlZSAtMSBhYm92ZSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCi0JCXNjaGVkdWxlKCk7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlX2xvY2tlZCgmc2VtLT53YWl0LCAmd2FpdCk7Ci0Jd2FrZV91cF9sb2NrZWQoJnNlbS0+d2FpdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoKLSAqIFRyeWxvY2sgZmFpbGVkIC0gbWFrZSBzdXJlIHdlIGNvcnJlY3QgZm9yIGhhdmluZyBkZWNyZW1lbnRlZCB0aGUKLSAqIGNvdW50LgotICovCi1pbnQKLV9fZG93bl90cnlsb2NrIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc2xlZXBlcnM7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQlzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnMgKyAxOwotCXNlbS0+c2xlZXBlcnMgPSAwOwotCi0JLyoKLQkgKiBBZGQgImV2ZXJ5Ym9keSBlbHNlIiBhbmQgdXMgaW50byBpdC4gVGhleSBhcmVuJ3QKLQkgKiBwbGF5aW5nLCBiZWNhdXNlIHdlIG93biB0aGUgc3BpbmxvY2sgaW4gdGhlCi0JICogd2FpdF9xdWV1ZV9oZWFkLgotCSAqLwotCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZShzbGVlcGVycywgJnNlbS0+Y291bnQpKSB7Ci0JCXdha2VfdXBfbG9ja2VkKCZzZW0tPndhaXQpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggZWJkMWEwOS4uNTAxNWNhMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9ocHNpbS5oPgogCkBAIC0xNzYsNiArMTc3LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTaW1pbGFyIHRvICJmaWx0ZXJfcnN2ZF9tZW1vcnkoKSIsIGJ1dCB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJhbmdlcworICogYXJlIG5vdCBmaWx0ZXJlZCBvdXQuCisgKi8KK2ludCBfX2luaXQKK2ZpbHRlcl9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZykKK3sKKwl2b2lkICgqZnVuYykodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KTsKKworI2lmIElHTk9SRV9QRk4wCisJaWYgKHN0YXJ0ID09IFBBR0VfT0ZGU0VUKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIndhcm5pbmc6IHNraXBwaW5nIHBoeXNpY2FsIHBhZ2UgMFxuIik7CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJaWYgKHN0YXJ0ID49IGVuZCkKKwkJCXJldHVybiAwOworCX0KKyNlbmRpZgorCWZ1bmMgPSBhcmc7CisJaWYgKHN0YXJ0IDwgZW5kKQorCQljYWxsX3Blcm5vZGVfbWVtb3J5KF9fcGEoc3RhcnQpLCBlbmQgLSBzdGFydCwgZnVuYyk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdAogc29ydF9yZWdpb25zIChzdHJ1Y3QgcnN2ZF9yZWdpb24gKnJzdmRfcmVnaW9uLCBpbnQgbWF4KQogewpAQCAtNDkzLDYgKzUxNyw4IEBACiAJYWNwaV90YWJsZV9pbml0KCk7CiAjIGlmZGVmIENPTkZJR19BQ1BJX05VTUEKIAlhY3BpX251bWFfaW5pdCgpOworCXBlcl9jcHVfc2Nhbl9maW5hbGl6ZSgoY3B1c193ZWlnaHQoZWFybHlfY3B1X3Bvc3NpYmxlX21hcCkgPT0gMCA/CisJCTMyIDogY3B1c193ZWlnaHQoZWFybHlfY3B1X3Bvc3NpYmxlX21hcCkpLCBhZGRpdGlvbmFsX2NwdXMpOwogIyBlbmRpZgogI2Vsc2UKICMgaWZkZWYgQ09ORklHX1NNUApAQCAtNjkwLDcgKzcxNiw3IEBACiAJaWYgKG92ZXJmbG93KysgPT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiJXM6IFRhYmxlIG92ZXJmbG93LiBTb21lIHByb2Nlc3NvciBtb2RlbCBpbmZvcm1hdGlvbiB3aWxsIGJlIG1pc3NpbmdcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCXJldHVybiAiVW5rbm93biI7CiB9CiAKQEAgLTc4NSw3ICs4MTEsNyBAQAogICAgICAgICBzdGF0dXMgPSBpYTY0X3BhbF9jYWNoZV9zdW1tYXJ5KCZsZXZlbHMsICZ1bmlxdWVfY2FjaGVzKTsKICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogaWE2NF9wYWxfY2FjaGVfc3VtbWFyeSgpIGZhaWxlZCAoc3RhdHVzPSVsZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgbWF4ID0gU01QX0NBQ0hFX0JZVEVTOwogCQkvKiBTYWZlc3Qgc2V0dXAgZm9yICJmbHVzaF9pY2FjaGVfcmFuZ2UoKSIgKi8KIAkJaWE2NF9pX2NhY2hlX3N0cmlkZV9zaGlmdCA9IElfQ0FDSEVfU1RSSURFX1NISUZUOwpAQCAtNzk4LDcgKzgyNCw3IEBACiAJCWlmIChzdGF0dXMgIT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIiVzOiBpYTY0X3BhbF9jYWNoZV9jb25maWdfaW5mbyhsPSVsdSwgMikgZmFpbGVkIChzdGF0dXM9JWxkKVxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGwsIHN0YXR1cyk7CisJCQkgICAgICAgX19mdW5jX18sIGwsIHN0YXR1cyk7CiAJCQltYXggPSBTTVBfQ0FDSEVfQllURVM7CiAJCQkvKiBUaGUgc2FmZXN0IHNldHVwIGZvciAiZmx1c2hfaWNhY2hlX3JhbmdlKCkiICovCiAJCQljY2kucGNjaV9zdHJpZGUgPSBJX0NBQ0hFX1NUUklERV9TSElGVDsKQEAgLTgxNCw3ICs4NDAsNyBAQAogCQkJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIiVzOiBpYTY0X3BhbF9jYWNoZV9jb25maWdfaW5mbyhsPSVsdSwgMSkgZmFpbGVkIChzdGF0dXM9JWxkKVxuIiwKLQkJCQkJX19GVU5DVElPTl9fLCBsLCBzdGF0dXMpOworCQkJCQlfX2Z1bmNfXywgbCwgc3RhdHVzKTsKIAkJCQkvKiBUaGUgc2FmZXN0IHNldHVwIGZvciAiZmx1c2hfaWNhY2hlX3JhbmdlKCkiICovCiAJCQkJY2NpLnBjY2lfc3RyaWRlID0gSV9DQUNIRV9TVFJJREVfU0hJRlQ7CiAJCQl9CkBAIC05NDYsOSArOTcyLDEwIEBACiAjZW5kaWYKIAogCS8qIHNldCBpYTY0X2N0eC5tYXhfcmlkIHRvIHRoZSBtYXhpbXVtIFJJRCB0aGF0IGlzIHN1cHBvcnRlZCBieSBhbGwgQ1BVczogKi8KLQlpZiAoaWE2NF9wYWxfdm1fc3VtbWFyeShOVUxMLCAmdm1pKSA9PSAwKQorCWlmIChpYTY0X3BhbF92bV9zdW1tYXJ5KE5VTEwsICZ2bWkpID09IDApIHsKIAkJbWF4X2N0eCA9ICgxVSA8PCAodm1pLnBhbF92bV9pbmZvXzJfcy5yaWRfc2l6ZSAtIDMpKSAtIDE7Ci0JZWxzZSB7CisJCXNldHVwX3B0Y2dfc2VtKHZtaS5wYWxfdm1faW5mb18yX3MubWF4X3B1cmdlcywgTlBUQ0dfRlJPTV9QQUwpOworCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNwdV9pbml0OiBQQUwgVk0gc3VtbWFyeSBmYWlsZWQsIGFzc3VtaW5nIDE4IFJJRCBiaXRzXG4iKTsKIAkJbWF4X2N0eCA9ICgxVSA8PCAxNSkgLSAxOwkvKiB1c2UgYXJjaGl0ZWN0ZWQgbWluaW11bSAqLwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IDMwOWRhMzUuLjU3NDAyOTZjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKQEAgLTM0MiwxNSArMzQyLDMzIEBACiAKIAluZXdfc3AgPSBzY3ItPnB0LnIxMjsKIAl0cmFtcF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIF9fa2VybmVsX3NpZ3RyYW1wOwotCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYgc2FzX3NzX2ZsYWdzKG5ld19zcCkgPT0gMCkgewotCQluZXdfc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKLQkJLyoKLQkJICogV2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIHJlZ2lzdGVyIHN0YWNrIGJlaW5nIG9uIHRoZSBzaWduYWwgc3RhY2sKLQkJICogc2VwYXJhdGVseSwgYmVjYXVzZSBpdCdzIHN3aXRjaGVkIHNlcGFyYXRlbHkgKG1lbW9yeSBzdGFjayBpcyBzd2l0Y2hlZAotCQkgKiBpbiB0aGUga2VybmVsLCByZWdpc3RlciBzdGFjayBpcyBzd2l0Y2hlZCBpbiB0aGUgc2lnbmFsIHRyYW1wb2xpbmUpLgotCQkgKi8KLQkJaWYgKCFyYnNfb25fc2lnX3N0YWNrKHNjci0+cHQuYXJfYnNwc3RvcmUpKQotCQkJbmV3X3JicyA9IChjdXJyZW50LT5zYXNfc3Nfc3AgKyBzaXplb2YobG9uZykgLSAxKSAmIH4oc2l6ZW9mKGxvbmcpIC0gMSk7CisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKKwkJaW50IG9uc3RhY2sgPSBzYXNfc3NfZmxhZ3MobmV3X3NwKTsKKworCQlpZiAob25zdGFjayA9PSAwKSB7CisJCQluZXdfc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcmVnaXN0ZXIgc3RhY2sgYmVpbmcgb24gdGhlCisJCQkgKiBzaWduYWwgc3RhY2sgc2VwYXJhdGVseSwgYmVjYXVzZSBpdCdzIHN3aXRjaGVkCisJCQkgKiBzZXBhcmF0ZWx5IChtZW1vcnkgc3RhY2sgaXMgc3dpdGNoZWQgaW4gdGhlIGtlcm5lbCwKKwkJCSAqIHJlZ2lzdGVyIHN0YWNrIGlzIHN3aXRjaGVkIGluIHRoZSBzaWduYWwgdHJhbXBvbGluZSkuCisJCQkgKi8KKwkJCWlmICghcmJzX29uX3NpZ19zdGFjayhzY3ItPnB0LmFyX2JzcHN0b3JlKSkKKwkJCQluZXdfcmJzID0gQUxJR04oY3VycmVudC0+c2FzX3NzX3NwLAorCQkJCQkJc2l6ZW9mKGxvbmcpKTsKKwkJfSBlbHNlIGlmIChvbnN0YWNrID09IFNTX09OU1RBQ0spIHsKKwkJCXVuc2lnbmVkIGxvbmcgY2hlY2tfc3A7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkCisJCQkgKiBvdmVyZmxvdyBpdCwgZG9uJ3QuIFJldHVybiBhbiBhbHdheXMtYm9ndXMgYWRkcmVzcworCQkJICogaW5zdGVhZCBzbyB3ZSB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCisJCQkgKi8KKwkJCWNoZWNrX3NwID0gKG5ld19zcCAtIHNpemVvZigqZnJhbWUpKSAmIC1TVEFDS19BTElHTjsKKwkJCWlmICghbGlrZWx5KG9uX3NpZ19zdGFjayhjaGVja19zcCkpKQorCQkJCXJldHVybiBmb3JjZV9zaWdzZWd2X2luZm8oc2lnLCAodm9pZCBfX3VzZXIgKikKKwkJCQkJCQkgIGNoZWNrX3NwKTsKKwkJfQogCX0KIAlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSAoKG5ld19zcCAtIHNpemVvZigqZnJhbWUpKSAmIC1TVEFDS19BTElHTik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcC5jCmluZGV4IDRlNDQ2YWEuLjlhOWQ0YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYwpAQCAtMjEzLDYgKzIxMywxOSBAQAogICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCitzZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgb3ApCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgeworCQkJc2VuZF9JUElfc2luZ2xlKGNwdSwgb3ApOworCX0KK30KKworLyoKKyAqIENhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAogc2VuZF9JUElfYWxsIChpbnQgb3ApCiB7CiAJaW50IGk7CkBAIC00MDEsNiArNDE0LDc1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSk7CiAKKy8qKgorICogc21wX2NhbGxfZnVuY3Rpb25fbWFzaygpOiBSdW4gYSBmdW5jdGlvbiBvbiBhIHNldCBvZiBvdGhlciBDUFVzLgorICogPG1hc2s+CVRoZSBzZXQgb2YgY3B1cyB0byBydW4gb24uICBNdXN0IG5vdCBpbmNsdWRlIHRoZSBjdXJyZW50IGNwdS4KKyAqIDxmdW5jPiAJVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KKyAqIDxpbmZvPglBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KKyAqIDx3YWl0PglJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbgorICoJCWhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLgorICoKKyAqIElmIEB3YWl0IGlzIHRydWUsIHRoZW4gcmV0dXJucyBvbmNlIEBmdW5jIGhhcyByZXR1cm5lZDsgb3RoZXJ3aXNlCisgKiBpdCByZXR1cm5zIGp1c3QgYmVmb3JlIHRoZSB0YXJnZXQgY3B1IGNhbGxzIEBmdW5jLgorICoKKyAqIFlvdSBtdXN0IG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzIG9yIGZyb20gYQorICogaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIgb3IgZnJvbSBhIGJvdHRvbSBoYWxmIGhhbmRsZXIuCisgKi8KK2ludCBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdW1hc2tfdCBtYXNrLAorCQkJICAgdm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmluZm8sCisJCQkgICBpbnQgd2FpdCkKK3sKKwlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOworCWNwdW1hc2tfdCBhbGxidXRzZWxmOworCWludCBjcHVzOworCisJc3Bpbl9sb2NrKCZjYWxsX2xvY2spOworCWFsbGJ1dHNlbGYgPSBjcHVfb25saW5lX21hcDsKKwljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBhbGxidXRzZWxmKTsKKworCWNwdXNfYW5kKG1hc2ssIG1hc2ssIGFsbGJ1dHNlbGYpOworCWNwdXMgPSBjcHVzX3dlaWdodChtYXNrKTsKKwlpZiAoIWNwdXMpIHsKKwkJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7CisJCXJldHVybiAwOworCX0KKworCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KKwlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CisKKwlkYXRhLmZ1bmMgPSBmdW5jOworCWRhdGEuaW5mbyA9IGluZm87CisJYXRvbWljX3NldCgmZGF0YS5zdGFydGVkLCAwKTsKKwlkYXRhLndhaXQgPSB3YWl0OworCWlmICh3YWl0KQorCQlhdG9taWNfc2V0KCZkYXRhLmZpbmlzaGVkLCAwKTsKKworCWNhbGxfZGF0YSA9ICZkYXRhOworCW1iKCk7IC8qIGVuc3VyZSBzdG9yZSB0byBjYWxsX2RhdGEgcHJlY2VkZXMgc2V0dGluZyBvZiBJUElfQ0FMTF9GVU5DKi8KKworCS8qIFNlbmQgYSBtZXNzYWdlIHRvIG90aGVyIENQVXMgKi8KKwlpZiAoY3B1c19lcXVhbChtYXNrLCBhbGxidXRzZWxmKSkKKwkJc2VuZF9JUElfYWxsYnV0c2VsZihJUElfQ0FMTF9GVU5DKTsKKwllbHNlCisJCXNlbmRfSVBJX21hc2sobWFzaywgSVBJX0NBTExfRlVOQyk7CisKKwkvKiBXYWl0IGZvciByZXNwb25zZSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSAhPSBjcHVzKQorCQljcHVfcmVsYXgoKTsKKworCWlmICh3YWl0KQorCQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpICE9IGNwdXMpCisJCQljcHVfcmVsYXgoKTsKKwljYWxsX2RhdGEgPSBOVUxMOworCisJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7CisJcmV0dXJuIDA7CisKK30KK0VYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fbWFzayk7CisKIC8qCiAgKiB0aGlzIGZ1bmN0aW9uIHNlbmRzIGEgJ2dlbmVyaWMgY2FsbCBmdW5jdGlvbicgSVBJIHRvIGFsbCBvdGhlciBDUFVzCiAgKiBpbiB0aGUgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCAzMmVlNTk3Li4xNjQ4M2JlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtNDAwLDkgKzQwMCw5IEBACiAJLyogU2V0dXAgdGhlIHBlciBjcHUgaXJxIGhhbmRsaW5nIGRhdGEgc3RydWN0dXJlcyAqLwogCV9fc2V0dXBfdmVjdG9yX2lycShjcHVpZCk7CiAJY3B1X3NldChjcHVpZCwgY3B1X29ubGluZV9tYXApOwotCXVubG9ja19pcGlfY2FsbGxvY2soKTsKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1aWQpID0gQ1BVX09OTElORTsKIAlzcGluX3VubG9jaygmdmVjdG9yX2xvY2spOworCXVubG9ja19pcGlfY2FsbGxvY2soKTsKIAogCXNtcF9zZXR1cF9wZXJjcHVfdGltZXIoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwppbmRleCAxN2ZkYTUyLi40OGUxNWE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwpAQCAtNTksNiArNTksODQgQEAKIH07CiBzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlICppdGNfY2xvY2tzb3VyY2U7CiAKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKworZXh0ZXJuIGNwdXRpbWVfdCBjeWNsZV90b19jcHV0aW1lKHU2NCBjeWMpOworCisvKgorICogQ2FsbGVkIGZyb20gdGhlIGNvbnRleHQgc3dpdGNoIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgdG8gY2hhcmdlIGFsbAorICogYWNjdW11bGF0ZWQgdGltZXMgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcywgYW5kIHRvIHByZXBhcmUgYWNjb3VudGluZyBvbgorICogdGhlIG5leHQgcHJvY2Vzcy4KKyAqLwordm9pZCBpYTY0X2FjY291bnRfb25fc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqcGkgPSB0YXNrX3RocmVhZF9pbmZvKHByZXYpOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqbmkgPSB0YXNrX3RocmVhZF9pbmZvKG5leHQpOworCWNwdXRpbWVfdCBkZWx0YV9zdGltZSwgZGVsdGFfdXRpbWU7CisJX191NjQgbm93OworCisJbm93ID0gaWE2NF9nZXRfaXRjKCk7CisKKwlkZWx0YV9zdGltZSA9IGN5Y2xlX3RvX2NwdXRpbWUocGktPmFjX3N0aW1lICsgKG5vdyAtIHBpLT5hY19zdGFtcCkpOworCWFjY291bnRfc3lzdGVtX3RpbWUocHJldiwgMCwgZGVsdGFfc3RpbWUpOworCWFjY291bnRfc3lzdGVtX3RpbWVfc2NhbGVkKHByZXYsIGRlbHRhX3N0aW1lKTsKKworCWlmIChwaS0+YWNfdXRpbWUpIHsKKwkJZGVsdGFfdXRpbWUgPSBjeWNsZV90b19jcHV0aW1lKHBpLT5hY191dGltZSk7CisJCWFjY291bnRfdXNlcl90aW1lKHByZXYsIGRlbHRhX3V0aW1lKTsKKwkJYWNjb3VudF91c2VyX3RpbWVfc2NhbGVkKHByZXYsIGRlbHRhX3V0aW1lKTsKKwl9CisKKwlwaS0+YWNfc3RhbXAgPSBuaS0+YWNfc3RhbXAgPSBub3c7CisJbmktPmFjX3N0aW1lID0gbmktPmFjX3V0aW1lID0gMDsKK30KKworLyoKKyAqIEFjY291bnQgdGltZSBmb3IgYSB0cmFuc2l0aW9uIGJldHdlZW4gc3lzdGVtLCBoYXJkIGlycSBvciBzb2Z0IGlycSBzdGF0ZS4KKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4KKyAqLwordm9pZCBhY2NvdW50X3N5c3RlbV92dGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gdGFza190aHJlYWRfaW5mbyh0c2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY3B1dGltZV90IGRlbHRhX3N0aW1lOworCV9fdTY0IG5vdzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCW5vdyA9IGlhNjRfZ2V0X2l0YygpOworCisJZGVsdGFfc3RpbWUgPSBjeWNsZV90b19jcHV0aW1lKHRpLT5hY19zdGltZSArIChub3cgLSB0aS0+YWNfc3RhbXApKTsKKwlhY2NvdW50X3N5c3RlbV90aW1lKHRzaywgMCwgZGVsdGFfc3RpbWUpOworCWFjY291bnRfc3lzdGVtX3RpbWVfc2NhbGVkKHRzaywgZGVsdGFfc3RpbWUpOworCXRpLT5hY19zdGltZSA9IDA7CisKKwl0aS0+YWNfc3RhbXAgPSBub3c7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0aGUgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIgdG8gY2hhcmdlIGFjY3VtdWxhdGVkIHVzZXIgdGltZQorICogdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4gIE11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLwordm9pZCBhY2NvdW50X3Byb2Nlc3NfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB1c2VyX3RpY2spCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CisJY3B1dGltZV90IGRlbHRhX3V0aW1lOworCisJaWYgKHRpLT5hY191dGltZSkgeworCQlkZWx0YV91dGltZSA9IGN5Y2xlX3RvX2NwdXRpbWUodGktPmFjX3V0aW1lKTsKKwkJYWNjb3VudF91c2VyX3RpbWUocCwgZGVsdGFfdXRpbWUpOworCQlhY2NvdW50X3VzZXJfdGltZV9zY2FsZWQocCwgZGVsdGFfdXRpbWUpOworCQl0aS0+YWNfdXRpbWUgPSAwOworCX0KK30KKworI2VuZGlmIC8qIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HICovCisKIHN0YXRpYyBpcnFyZXR1cm5fdAogdGltZXJfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYwppbmRleCA1MmY3MGJiLi5mZjBlN2MxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqIDIwMDEvMDgvMTMJQ29ycmVjdCBzaXplIG9mIGV4dGVuZGVkIGZsb2F0cyAoZmxvYXRfZnN6KSBmcm9tIDE2IHRvIDEwIGJ5dGVzLgogICogMjAwMS8wMS8xNwlBZGQgc3VwcG9ydCBlbXVsYXRpb24gb2YgdW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3Nlcy4KICAqLworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpAQCAtMjgsNyArMjksNyBAQAogI3VuZGVmIERFQlVHX1VOQUxJR05FRF9UUkFQCiAKICNpZmRlZiBERUJVR19VTkFMSUdORURfVFJBUAotIyBkZWZpbmUgRFBSSU5UKGEuLi4pCWRvIHsgcHJpbnRrKCIlcyAldTogIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IHByaW50ayAoYSk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBEUFJJTlQoYS4uLikJZG8geyBwcmludGsoIiVzICV1OiAiLCBfX2Z1bmNfXywgX19MSU5FX18pOyBwcmludGsgKGEpOyB9IHdoaWxlICgwKQogIyBkZWZpbmUgRERVTVAoc3RyLHZwLGxlbikJZHVtcChzdHIsIHZwLCBsZW4pCiAKIHN0YXRpYyB2b2lkCkBAIC02NzQsNyArNjc1LDcgQEAKIAkgKiBqdXN0IGluIGNhc2UuCiAJICovCiAJaWYgKGxkLng2X29wID09IDEgfHwgbGQueDZfb3AgPT0gMykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWdpc3RlciB1cGRhdGUgb24gc3BlY3VsYXRpdmUgbG9hZCwgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZ2lzdGVyIHVwZGF0ZSBvbiBzcGVjdWxhdGl2ZSBsb2FkLCBlcnJvclxuIiwgX19mdW5jX18pOwogCQlpZiAoZGllX2lmX2tlcm5lbCgidW5hbGlnbmVkIHJlZmVyZW5jZSBvbiBzcGVjdWxhdGl2ZSBsb2FkIHdpdGggcmVnaXN0ZXIgdXBkYXRlXG4iLAogCQkJCSAgcmVncywgMzApKQogCQkJcmV0dXJuOwpAQCAtMTEwNCw3ICsxMTA1LDcgQEAKIAkJICovCiAJCWlmIChsZC54Nl9vcCA9PSAxIHx8IGxkLng2X29wID09IDMpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWdpc3RlciB1cGRhdGUgb24gc3BlY3VsYXRpdmUgbG9hZCBwYWlyLCBlcnJvclxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICAgIF9fZnVuY19fKTsKIAogCQlzZXRyZWcobGQucjMsIGlmYSwgMCwgcmVncyk7CiAJfQpAQCAtMTI5MCw3ICsxMjkxLDcgQEAKIHsKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudCwgbGFzdF90aW1lOwogCi0JaWYgKGppZmZpZXMgLSBsYXN0X3RpbWUgPiA1KkhaKQorCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfdGltZSArIDUgKiBIWikpCiAJCWNvdW50ID0gMDsKIAlpZiAoY291bnQgPCA1KSB7CiAJCWxhc3RfdGltZSA9IGppZmZpZXM7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Vud2luZC5jIGIvYXJjaC9pYTY0L2tlcm5lbC91bndpbmQuYwppbmRleCBjMWJkYjUxLi42NzgxMGI3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Vud2luZC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdW53aW5kLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCQlvZmYgPSB1bncucHRfcmVnc19vZmZzZXRzW3JlZ107CiAKIAlpZiAob2ZmIDwgMCkgewotCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGJhZCBzY3JhdGNoIHJlZyByJWx1XG4iLCBfX0ZVTkNUSU9OX18sIHJlZyk7CisJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogYmFkIHNjcmF0Y2ggcmVnIHIlbHVcbiIsIF9fZnVuY19fLCByZWcpOwogCQlvZmYgPSAwOwogCX0KIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIG9mZjsKQEAgLTI2OCwxMyArMjY4LDEzIEBACiB7CiAJaWYgKCFpbmZvLT5wdCkgewogCQkvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIHdpdGggdmFsaWQgdW53aW5kIGluZm8uICAqLwotCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGJhZCB1bndpbmQgaW5mbzogcmVzZXR0aW5nIGluZm8tPnB0XG4iLCBfX0ZVTkNUSU9OX18pOworCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGJhZCB1bndpbmQgaW5mbzogcmVzZXR0aW5nIGluZm8tPnB0XG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChpbmZvLT5mbGFncyAmIFVOV19GTEFHX0lOVEVSUlVQVF9GUkFNRSkKIAkJCWluZm8tPnB0ID0gKHVuc2lnbmVkIGxvbmcpICgoc3RydWN0IHB0X3JlZ3MgKikgaW5mby0+cHNwIC0gMSk7CiAJCWVsc2UKIAkJCWluZm8tPnB0ID0gaW5mby0+c3AgLSAxNjsKIAl9Ci0JVU5XX0RQUklOVCgzLCAidW53aW5kLiVzOiBzcCAweCVseCBwdCAweCVseFxuIiwgX19GVU5DVElPTl9fLCBpbmZvLT5zcCwgaW5mby0+cHQpOworCVVOV19EUFJJTlQoMywgInVud2luZC4lczogc3AgMHglbHggcHQgMHglbHhcbiIsIF9fZnVuY19fLCBpbmZvLT5zcCwgaW5mby0+cHQpOwogCXJldHVybiAoc3RydWN0IHB0X3JlZ3MgKikgaW5mby0+cHQ7CiB9CiAKQEAgLTI5NCw3ICsyOTQsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiB0cnlpbmcgdG8gYWNjZXNzIG5vbi1leGlzdGVudCByJXVcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIHJlZ251bSk7CisJCQkgICBfX2Z1bmNfXywgcmVnbnVtKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzQxLDcgKzM0MSw3IEBACiAJCQkJCXsKIAkJCQkJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogJXAgb3V0c2lkZSBvZiByZWdzdGsgIgogCQkJCQkJCSJbMHglbHgtMHglbHgpXG4iLAotCQkJCQkJCV9fRlVOQ1RJT05fXywgKHZvaWQgKikgYWRkciwKKwkJCQkJCQlfX2Z1bmNfXywgKHZvaWQgKikgYWRkciwKIAkJCQkJCQlpbmZvLT5yZWdzdGsubGltaXQsCiAJCQkJCQkJaW5mby0+cmVnc3RrLnRvcCk7CiAJCQkJCQlyZXR1cm4gLTE7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJICAgIHx8ICh1bnNpZ25lZCBsb25nKSBhZGRyID49IGluZm8tPnJlZ3N0ay50b3ApCiAJCXsKIAkJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogaWdub3JpbmcgYXR0ZW1wdCB0byBhY2Nlc3MgcmVnaXN0ZXIgb3V0c2lkZSAiCi0JCQkJICAgIm9mIHJic1xuIiwgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgIm9mIHJic1xuIiwgIF9fZnVuY19fKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpZiAoKHVuc2lnbmVkIGxvbmcpIG5hdF9hZGRyID49IGluZm8tPnJlZ3N0ay50b3ApCkBAIC0zODUsNyArMzg1LDcgQEAKIAlpZiAod3JpdGUpIHsKIAkJaWYgKHJlYWRfb25seShhZGRyKSkgewogCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBpZ25vcmluZyBhdHRlbXB0IHRvIHdyaXRlIHJlYWQtb25seSBsb2NhdGlvblxuIiwKLQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCV9fZnVuY19fKTsKIAkJfSBlbHNlIHsKIAkJCSphZGRyID0gKnZhbDsKIAkJCWlmICgqbmF0KQpAQCAtNDI3LDEzICs0MjcsMTMgQEAKIAogCSAgICAgIGRlZmF1bHQ6CiAJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogdHJ5aW5nIHRvIGFjY2VzcyBub24tZXhpc3RlbnQgYiV1XG4iLAotCQkJICAgX19GVU5DVElPTl9fLCByZWdudW0pOworCQkJICAgX19mdW5jX18sIHJlZ251bSk7CiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKHdyaXRlKQogCQlpZiAocmVhZF9vbmx5KGFkZHIpKSB7CiAJCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGlnbm9yaW5nIGF0dGVtcHQgdG8gd3JpdGUgcmVhZC1vbmx5IGxvY2F0aW9uXG4iLAotCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJX19mdW5jX18pOwogCQl9IGVsc2UKIAkJCSphZGRyID0gKnZhbDsKIAllbHNlCkBAIC00NTAsNyArNDUwLDcgQEAKIAogCWlmICgodW5zaWduZWQpIChyZWdudW0gLSAyKSA+PSAxMjYpIHsKIAkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiB0cnlpbmcgdG8gYWNjZXNzIG5vbi1leGlzdGVudCBmJXVcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIHJlZ251bSk7CisJCQkgICBfX2Z1bmNfXywgcmVnbnVtKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDgyLDcgKzQ4Miw3IEBACiAJaWYgKHdyaXRlKQogCQlpZiAocmVhZF9vbmx5KGFkZHIpKSB7CiAJCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGlnbm9yaW5nIGF0dGVtcHQgdG8gd3JpdGUgcmVhZC1vbmx5IGxvY2F0aW9uXG4iLAotCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJX19mdW5jX18pOwogCQl9IGVsc2UKIAkJCSphZGRyID0gKnZhbDsKIAllbHNlCkBAIC01NzIsMTQgKzU3MiwxNCBAQAogCiAJICAgICAgZGVmYXVsdDoKIAkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiB0cnlpbmcgdG8gYWNjZXNzIG5vbi1leGlzdGVudCBhciV1XG4iLAotCQkJICAgX19GVU5DVElPTl9fLCByZWdudW0pOworCQkJICAgX19mdW5jX18sIHJlZ251bSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAod3JpdGUpIHsKIAkJaWYgKHJlYWRfb25seShhZGRyKSkgewogCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBpZ25vcmluZyBhdHRlbXB0IHRvIHdyaXRlIHJlYWQtb25seSBsb2NhdGlvblxuIiwKLQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCV9fZnVuY19fKTsKIAkJfSBlbHNlCiAJCQkqYWRkciA9ICp2YWw7CiAJfSBlbHNlCkBAIC02MDAsNyArNjAwLDcgQEAKIAlpZiAod3JpdGUpIHsKIAkJaWYgKHJlYWRfb25seShhZGRyKSkgewogCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBpZ25vcmluZyBhdHRlbXB0IHRvIHdyaXRlIHJlYWQtb25seSBsb2NhdGlvblxuIiwKLQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCV9fZnVuY19fKTsKIAkJfSBlbHNlCiAJCQkqYWRkciA9ICp2YWw7CiAJfSBlbHNlCkBAIC02OTksNyArNjk5LDcgQEAKIAkgICAgICBkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBiYWQgYWJyZWc9MHgleFxuIiwgX19GVU5DVElPTl9fLCBhYnJlZyk7CisJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBiYWQgYWJyZWc9MHgleFxuIiwgX19mdW5jX18sIGFicmVnKTsKIAlyZXR1cm4gVU5XX1JFR19MQzsKIH0KIApAQCAtNzM5LDcgKzczOSw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBleGNlc3Mgc3BpbGwhXG4iLCAgX19GVU5DVElPTl9fKTsKKwlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGV4Y2VzcyBzcGlsbCFcbiIsICBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtODU1LDExICs4NTUsMTEgQEAKIHsKIAlpZiAoYWJpID09IDMgJiYgY29udGV4dCA9PSAnaScpIHsKIAkJc3ItPmZsYWdzIHw9IFVOV19GTEFHX0lOVEVSUlVQVF9GUkFNRTsKLQkJVU5XX0RQUklOVCgzLCAidW53aW5kLiVzOiBpbnRlcnJ1cHQgZnJhbWVcbiIsICBfX0ZVTkNUSU9OX18pOworCQlVTldfRFBSSU5UKDMsICJ1bndpbmQuJXM6IGludGVycnVwdCBmcmFtZVxuIiwgIF9fZnVuY19fKTsKIAl9CiAJZWxzZQogCQlVTldfRFBSSU5UKDAsICJ1bndpbmQlczogaWdub3JpbmcgdW53YWJpKGFiaT0weCV4LGNvbnRleHQ9MHgleClcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBhYmksIGNvbnRleHQpOworCQkJCV9fZnVuY19fLCBhYmksIGNvbnRleHQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTEzNDcsNyArMTM0Nyw3IEBACiB7CiAJaWYgKHNjcmlwdC0+Y291bnQgPj0gVU5XX01BWF9TQ1JJUFRfTEVOKSB7CiAJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogc2NyaXB0IGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICV1IGluc3RydWN0aW9ucyFcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIFVOV19NQVhfU0NSSVBUX0xFTik7CisJCQlfX2Z1bmNfXywgVU5XX01BWF9TQ1JJUFRfTEVOKTsKIAkJcmV0dXJuOwogCX0KIAlzY3JpcHQtPmluc25bc2NyaXB0LT5jb3VudCsrXSA9IGluc247CkBAIC0xMzg5LDcgKzEzODksNyBAQAogCiAJICAgICAgZGVmYXVsdDoKIAkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBkb24ndCBrbm93IGhvdyB0byBlbWl0IG5hdCBpbmZvIGZvciB3aGVyZSA9ICV1XG4iLAotCQkJICAgX19GVU5DVElPTl9fLCByLT53aGVyZSk7CisJCQkgICBfX2Z1bmNfXywgci0+d2hlcmUpOwogCQlyZXR1cm47CiAJfQogCWluc24ub3BjID0gb3BjOwpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAKIAkJCQl2YWwgPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZjYpICsgMTYqKHJ2YWwgLSA2KTsKIAkJCWVsc2UKIAkJCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGtlcm5lbCBtYXkgbm90IHRvdWNoIGYlbHVcbiIsCi0JCQkJCSAgIF9fRlVOQ1RJT05fXywgcnZhbCk7CisJCQkJCSAgIF9fZnVuY19fLCBydmFsKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKIAogCSAgICAgIGRlZmF1bHQ6CiAJCVVOV19EUFJJTlQoMCwgInVud2luZCVzOiByZWdpc3RlciAldSBoYXMgdW5leHBlY3RlZCBgd2hlcmUnIHZhbHVlIG9mICV1XG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBpLCByLT53aGVyZSk7CisJCQkgICBfX2Z1bmNfXywgaSwgci0+d2hlcmUpOwogCQlicmVhazsKIAl9CiAJaW5zbi5vcGMgPSBvcGM7CkBAIC0xNTQ3LDEwICsxNTQ3LDEwIEBACiAJCXItPndoZW4gPSBVTldfV0hFTl9ORVZFUjsKIAlzci5wcl92YWwgPSBpbmZvLT5wcjsKIAotCVVOV19EUFJJTlQoMywgInVud2luZC4lczogaXAgMHglbHhcbiIsIF9fRlVOQ1RJT05fXywgaXApOworCVVOV19EUFJJTlQoMywgInVud2luZC4lczogaXAgMHglbHhcbiIsIF9fZnVuY19fLCBpcCk7CiAJc2NyaXB0ID0gc2NyaXB0X25ldyhpcCk7CiAJaWYgKCFzY3JpcHQpIHsKLQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gY3JlYXRlIHVud2luZCBzY3JpcHRcbiIsICBfX0ZVTkNUSU9OX18pOworCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGZhaWxlZCB0byBjcmVhdGUgdW53aW5kIHNjcmlwdFxuIiwgIF9fZnVuY19fKTsKIAkJU1RBVCh1bncuc3RhdC5zY3JpcHQuYnVpbGRfdGltZSArPSBpYTY0X2dldF9pdGMoKSAtIHN0YXJ0KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTU2OSw3ICsxNTY5LDcgQEAKIAlpZiAoIWUpIHsKIAkJLyogbm8gaW5mbywgcmV0dXJuIGRlZmF1bHQgdW53aW5kZXIgKGxlYWYgcHJvYywgbm8gbWVtIHN0YWNrLCBubyBzYXZlZCByZWdzKSAgKi8KIAkJVU5XX0RQUklOVCgxLCAidW53aW5kLiVzOiBubyB1bndpbmQgaW5mbyBmb3IgaXA9MHglbHggKHByZXYgaXA9MHglbHgpXG4iLAotCQkJX19GVU5DVElPTl9fLCBpcCwgdW53LmNhY2hlW2luZm8tPnByZXZfc2NyaXB0XS5pcCk7CisJCQlfX2Z1bmNfXywgaXAsIHVudy5jYWNoZVtpbmZvLT5wcmV2X3NjcmlwdF0uaXApOwogCQlzci5jdXJyLnJlZ1tVTldfUkVHX1JQXS53aGVyZSA9IFVOV19XSEVSRV9CUjsKIAkJc3IuY3Vyci5yZWdbVU5XX1JFR19SUF0ud2hlbiA9IC0xOwogCQlzci5jdXJyLnJlZ1tVTldfUkVHX1JQXS52YWwgPSAwOwpAQCAtMTYxOCwxMyArMTYxOCwxMyBAQAogCQlzci5jdXJyLnJlZ1tVTldfUkVHX1JQXS53aGVuID0gLTE7CiAJCXNyLmN1cnIucmVnW1VOV19SRUdfUlBdLnZhbCA9IHNyLnJldHVybl9saW5rX3JlZzsKIAkJVU5XX0RQUklOVCgxLCAidW53aW5kLiVzOiB1c2luZyBkZWZhdWx0IGZvciBycCBhdCBpcD0weCVseCB3aGVyZT0lZCB2YWw9MHglbHhcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGlwLCBzci5jdXJyLnJlZ1tVTldfUkVHX1JQXS53aGVyZSwKKwkJCSAgIF9fZnVuY19fLCBpcCwgc3IuY3Vyci5yZWdbVU5XX1JFR19SUF0ud2hlcmUsCiAJCQkgICBzci5jdXJyLnJlZ1tVTldfUkVHX1JQXS52YWwpOwogCX0KIAogI2lmZGVmIFVOV19ERUJVRwogCVVOV19EUFJJTlQoMSwgInVud2luZC4lczogc3RhdGUgcmVjb3JkIGZvciBmdW5jIDB4JWx4LCB0PSV1OlxuIiwKLQkJX19GVU5DVElPTl9fLCB0YWJsZS0+c2VnbWVudF9iYXNlICsgZS0+c3RhcnRfb2Zmc2V0LCBzci53aGVuX3RhcmdldCk7CisJCV9fZnVuY19fLCB0YWJsZS0+c2VnbWVudF9iYXNlICsgZS0+c3RhcnRfb2Zmc2V0LCBzci53aGVuX3RhcmdldCk7CiAJZm9yIChyID0gc3IuY3Vyci5yZWc7IHIgPCBzci5jdXJyLnJlZyArIFVOV19OVU1fUkVHUzsgKytyKSB7CiAJCWlmIChyLT53aGVyZSAhPSBVTldfV0hFUkVfTk9ORSB8fCByLT53aGVuICE9IFVOV19XSEVOX05FVkVSKSB7CiAJCQlVTldfRFBSSU5UKDEsICIgICVzIDwtICIsIHVudy5wcmVnX25hbWVbciAtIHNyLmN1cnIucmVnXSk7CkBAIC0xNzQ2LDcgKzE3NDYsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlzW2RzdF0gPSAwOwogCQkJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogbm8gc3RhdGUtPnB0LCBkc3Q9JWxkLCB2YWw9JWxkXG4iLAotCQkJCQkgICBfX0ZVTkNUSU9OX18sIGRzdCwgdmFsKTsKKwkJCQkJICAgX19mdW5jX18sIGRzdCwgdmFsKTsKIAkJCX0KIAkJCWJyZWFrOwogCkBAIC0xNzU2LDcgKzE3NTYsNyBAQAogCQkJZWxzZSB7CiAJCQkJc1tkc3RdID0gMDsKIAkJCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IFVOV19JTlNOX01PVkVfQ09OU1QgYmFkIHZhbD0lbGRcbiIsCi0JCQkJCSAgIF9fRlVOQ1RJT05fXywgdmFsKTsKKwkJCQkJICAgX19mdW5jX18sIHZhbCk7CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMTc5MSw3ICsxNzkxLDcgQEAKIAkJCSAgICB8fCBzW3ZhbF0gPCBUQVNLX1NJWkUpCiAJCQl7CiAJCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiByZWplY3RpbmcgYmFkIHBzcD0weCVseFxuIiwKLQkJCQkJICAgX19GVU5DVElPTl9fLCBzW3ZhbF0pOworCQkJCQkgICBfX2Z1bmNfXywgc1t2YWxdKTsKIAkJCQlicmVhazsKIAkJCX0KICNlbmRpZgpAQCAtMTgyNSw3ICsxODI1LDcgQEAKIAlpZiAoKGluZm8tPmlwICYgKGxvY2FsX2NwdV9kYXRhLT51bmltcGxfdmFfbWFzayB8IDB4ZikpIHx8IGluZm8tPmlwIDwgVEFTS19TSVpFKSB7CiAJCS8qIGRvbid0IGxldCBvYnZpb3VzbHkgYmFkIGFkZHJlc3NlcyBwb2xsdXRlIHRoZSBjYWNoZSAqLwogCQkvKiBGSVhNRTogc2hvdWxkIHJlYWxseSBiZSBsZXZlbCAwIGJ1dCBpdCBvY2N1cnMgdG9vIG9mdGVuLiBLQU8gKi8KLQkJVU5XX0RQUklOVCgxLCAidW53aW5kLiVzOiByZWplY3RpbmcgYmFkIGlwPTB4JWx4XG4iLCBfX0ZVTkNUSU9OX18sIGluZm8tPmlwKTsKKwkJVU5XX0RQUklOVCgxLCAidW53aW5kLiVzOiByZWplY3RpbmcgYmFkIGlwPTB4JWx4XG4iLCBfX2Z1bmNfXywgaW5mby0+aXApOwogCQlpbmZvLT5ycF9sb2MgPSBOVUxMOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTgzOCw3ICsxODM4LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVudy5sb2NrLCBmbGFncyk7CiAJCQlVTldfRFBSSU5UKDAsCiAJCQkJICAgInVud2luZC4lczogZmFpbGVkIHRvIGxvY2F0ZS9idWlsZCB1bndpbmQgc2NyaXB0IGZvciBpcCAlbHhcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fLCBpbmZvLT5pcCk7CisJCQkJICAgX19mdW5jX18sIGluZm8tPmlwKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQloYXZlX3dyaXRlX2xvY2sgPSAxOwpAQCAtMTg4MiwyMSArMTg4MiwyMSBAQAogCWlmICghdW53X3ZhbGlkKGluZm8sIGluZm8tPnJwX2xvYykpIHsKIAkJLyogRklYTUU6IHNob3VsZCByZWFsbHkgYmUgbGV2ZWwgMCBidXQgaXQgb2NjdXJzIHRvbyBvZnRlbi4gS0FPICovCiAJCVVOV19EUFJJTlQoMSwgInVud2luZC4lczogZmFpbGVkIHRvIGxvY2F0ZSByZXR1cm4gbGluayAoaXA9MHglbHgpIVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgaW5mby0+aXApOworCQkJICAgX19mdW5jX18sIGluZm8tPmlwKTsKIAkJU1RBVCh1bncuc3RhdC5hcGkudW53aW5kX3RpbWUgKz0gaWE2NF9nZXRfaXRjKCkgLSBzdGFydDsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkvKiByZXN0b3JlIHRoZSBpcCAqLwogCWlwID0gaW5mby0+aXAgPSAqaW5mby0+cnBfbG9jOwogCWlmIChpcCA8IEdBVEVfQUREUikgewotCQlVTldfRFBSSU5UKDIsICJ1bndpbmQuJXM6IHJlYWNoZWQgdXNlci1zcGFjZSAoaXA9MHglbHgpXG4iLCBfX0ZVTkNUSU9OX18sIGlwKTsKKwkJVU5XX0RQUklOVCgyLCAidW53aW5kLiVzOiByZWFjaGVkIHVzZXItc3BhY2UgKGlwPTB4JWx4KVxuIiwgX19mdW5jX18sIGlwKTsKIAkJU1RBVCh1bncuc3RhdC5hcGkudW53aW5kX3RpbWUgKz0gaWE2NF9nZXRfaXRjKCkgLSBzdGFydDsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIHZhbGlkYXRlIHRoZSBwcmV2aW91cyBzdGFjayBmcmFtZSBwb2ludGVyICovCiAJaWYgKCF1bndfdmFsaWQoaW5mbywgaW5mby0+cGZzX2xvYykpIHsKLQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gbG9jYXRlIGFyLnBmcyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogZmFpbGVkIHRvIGxvY2F0ZSBhci5wZnMhXG4iLCBfX2Z1bmNfXyk7CiAJCVNUQVQodW53LnN0YXQuYXBpLnVud2luZF90aW1lICs9IGlhNjRfZ2V0X2l0YygpIC0gc3RhcnQ7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xOTEyLDEzICsxOTEyLDEzIEBACiAJCQludW1fcmVncyA9ICppbmZvLT5jZm1fbG9jICYgMHg3ZjsJCS8qIHNpemUgb2YgZnJhbWUgKi8KIAkJaW5mby0+cGZzX2xvYyA9CiAJCQkodW5zaWduZWQgbG9uZyAqKSAoaW5mby0+cHQgKyBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYXJfcGZzKSk7Ci0JCVVOV19EUFJJTlQoMywgInVud2luZC4lczogaW50ZXJydXB0X2ZyYW1lIHB0IDB4JWx4XG4iLCBfX0ZVTkNUSU9OX18sIGluZm8tPnB0KTsKKwkJVU5XX0RQUklOVCgzLCAidW53aW5kLiVzOiBpbnRlcnJ1cHRfZnJhbWUgcHQgMHglbHhcbiIsIF9fZnVuY19fLCBpbmZvLT5wdCk7CiAJfSBlbHNlCiAJCW51bV9yZWdzID0gKCppbmZvLT5jZm1fbG9jID4+IDcpICYgMHg3ZjsJLyogc2l6ZSBvZiBsb2NhbHMgKi8KIAlpbmZvLT5ic3AgPSAodW5zaWduZWQgbG9uZykgaWE2NF9yc2Vfc2tpcF9yZWdzKCh1bnNpZ25lZCBsb25nICopIGluZm8tPmJzcCwgLW51bV9yZWdzKTsKIAlpZiAoaW5mby0+YnNwIDwgaW5mby0+cmVnc3RrLmxpbWl0IHx8IGluZm8tPmJzcCA+IGluZm8tPnJlZ3N0ay50b3ApIHsKIAkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBic3AgKDB4JWx4KSBvdXQgb2YgcmFuZ2UgWzB4JWx4LTB4JWx4XVxuIiwKLQkJCV9fRlVOQ1RJT05fXywgaW5mby0+YnNwLCBpbmZvLT5yZWdzdGsubGltaXQsIGluZm8tPnJlZ3N0ay50b3ApOworCQkJX19mdW5jX18sIGluZm8tPmJzcCwgaW5mby0+cmVnc3RrLmxpbWl0LCBpbmZvLT5yZWdzdGsudG9wKTsKIAkJU1RBVCh1bncuc3RhdC5hcGkudW53aW5kX3RpbWUgKz0gaWE2NF9nZXRfaXRjKCkgLSBzdGFydDsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE5MjcsMTQgKzE5MjcsMTQgQEAKIAlpbmZvLT5zcCA9IGluZm8tPnBzcDsKIAlpZiAoaW5mby0+c3AgPCBpbmZvLT5tZW1zdGsudG9wIHx8IGluZm8tPnNwID4gaW5mby0+bWVtc3RrLmxpbWl0KSB7CiAJCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogc3AgKDB4JWx4KSBvdXQgb2YgcmFuZ2UgWzB4JWx4LTB4JWx4XVxuIiwKLQkJCV9fRlVOQ1RJT05fXywgaW5mby0+c3AsIGluZm8tPm1lbXN0ay50b3AsIGluZm8tPm1lbXN0ay5saW1pdCk7CisJCQlfX2Z1bmNfXywgaW5mby0+c3AsIGluZm8tPm1lbXN0ay50b3AsIGluZm8tPm1lbXN0ay5saW1pdCk7CiAJCVNUQVQodW53LnN0YXQuYXBpLnVud2luZF90aW1lICs9IGlhNjRfZ2V0X2l0YygpIC0gc3RhcnQ7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoaW5mby0+aXAgPT0gcHJldl9pcCAmJiBpbmZvLT5zcCA9PSBwcmV2X3NwICYmIGluZm8tPmJzcCA9PSBwcmV2X2JzcCkgewogCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGlwLCBzcCwgYnNwIHVuY2hhbmdlZDsgc3RvcHBpbmcgaGVyZSAoaXA9MHglbHgpXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBpcCk7CisJCQkgICBfX2Z1bmNfXywgaXApOwogCQlTVEFUKHVudy5zdGF0LmFwaS51bndpbmRfdGltZSArPSBpYTY0X2dldF9pdGMoKSAtIHN0YXJ0OyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncykpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTk2MSw3ICsxOTYxLDcgQEAKIAkJaWYgKChsb25nKSgodW5zaWduZWQgbG9uZylpbmZvLT50YXNrICsgSUE2NF9TVEtfT0ZGU0VUIC0gc3ApCiAJCSAgICA8IElBNjRfUFRfUkVHU19TSVpFKSB7CiAJCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IHJhbiBvZmYgdGhlIHRvcCBvZiB0aGUga2VybmVsIHN0YWNrXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHVud19pc19pbnRyX2ZyYW1lKGluZm8pICYmCkBAIC0xOTcxLDEzICsxOTcxLDEzIEBACiAJCQl1bndfZ2V0X3JwKGluZm8sICZpcCk7CiAJCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGZhaWxlZCB0byByZWFkICIKIAkJCQkgICAicHJlZGljYXRlIHJlZ2lzdGVyIChpcD0weCVseClcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBpcCk7CisJCQkJX19mdW5jX18sIGlwKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0gd2hpbGUgKHVud191bndpbmQoaW5mbykgPj0gMCk7CiAJdW53X2dldF9pcChpbmZvLCAmaXApOwogCVVOV19EUFJJTlQoMCwgInVud2luZC4lczogZmFpbGVkIHRvIHVud2luZCB0byB1c2VyLWxldmVsIChpcD0weCVseClcbiIsCi0JCSAgIF9fRlVOQ1RJT05fXywgaXApOworCQkgICBfX2Z1bmNfXywgaXApOwogCXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0wodW53X3Vud2luZF90b191c2VyKTsKQEAgLTIwMjgsNyArMjAyOCw3IEBACiAJCSAgICIgIHByICAgICAweCVseFxuIgogCQkgICAiICBzdyAgICAgMHglbHhcbiIKIAkJICAgIiAgc3AgICAgIDB4JWx4XG4iLAotCQkgICBfX0ZVTkNUSU9OX18sICh1bnNpZ25lZCBsb25nKSB0LCByYnNsaW1pdCwgcmJzdG9wLCBzdGt0b3AsIHN0a2xpbWl0LAorCQkgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpIHQsIHJic2xpbWl0LCByYnN0b3AsIHN0a3RvcCwgc3RrbGltaXQsCiAJCSAgIGluZm8tPnByLCAodW5zaWduZWQgbG9uZykgaW5mby0+c3csIGluZm8tPnNwKTsKIAlTVEFUKHVudy5zdGF0LmFwaS5pbml0X3RpbWUgKz0gaWE2NF9nZXRfaXRjKCkgLSBzdGFydDsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpKTsKIH0KQEAgLTIwNDcsNyArMjA0Nyw3IEBACiAJCSAgICIgIGJzcCAgICAweCVseFxuIgogCQkgICAiICBzb2wgICAgMHglbHhcbiIKIAkJICAgIiAgaXAgICAgIDB4JWx4XG4iLAotCQkgICBfX0ZVTkNUSU9OX18sIGluZm8tPmJzcCwgc29sLCBpbmZvLT5pcCk7CisJCSAgIF9fZnVuY19fLCBpbmZvLT5ic3AsIHNvbCwgaW5mby0+aXApOwogCWZpbmRfc2F2ZV9sb2NzKGluZm8pOwogfQogCkBAIC0yMDU4LDcgKzIwNTgsNyBAQAogewogCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgKHQtPnRocmVhZC5rc3AgKyAxNik7CiAKLQlVTldfRFBSSU5UKDEsICJ1bndpbmQuJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJVU5XX0RQUklOVCgxLCAidW53aW5kLiVzXG4iLCBfX2Z1bmNfXyk7CiAJdW53X2luaXRfZnJhbWVfaW5mbyhpbmZvLCB0LCBzdyk7CiB9CiBFWFBPUlRfU1lNQk9MKHVud19pbml0X2Zyb21fYmxvY2tlZF90YXNrKTsKQEAgLTIwODgsNyArMjA4OCw3IEBACiAKIAlpZiAoZW5kIC0gc3RhcnQgPD0gMCkgewogCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGlnbm9yaW5nIGF0dGVtcHQgdG8gaW5zZXJ0IGVtcHR5IHVud2luZCB0YWJsZVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjExOSwxNCArMjExOSwxNCBAQAogCiAJaWYgKCFoYW5kbGUpIHsKIAkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBpZ25vcmluZyBhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgdW53aW5kIHRhYmxlXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAogCXRhYmxlID0gaGFuZGxlOwogCWlmICh0YWJsZSA9PSAmdW53Lmtlcm5lbF90YWJsZSkgewogCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IHNvcnJ5LCBmcmVlaW5nIHRoZSBrZXJuZWwncyB1bndpbmQgdGFibGUgaXMgYSAiCi0JCQkgICAibm8tY2FuLWRvIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICJuby1jYW4tZG8hXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxMzksNyArMjEzOSw3IEBACiAJCQkJYnJlYWs7CiAJCWlmICghcHJldikgewogCQkJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gZmluZCB1bndpbmQgdGFibGUgJXBcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fLCAodm9pZCAqKSB0YWJsZSk7CisJCQkJICAgX19mdW5jX18sICh2b2lkICopIHRhYmxlKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVudy5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTIxODUsNyArMjE4NSw3IEBACiAJCX0KIAogCWlmICghcHVudykgewotCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCBnYXRlIERTTydzIHVud2luZCB0YWJsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIGdhdGUgRFNPJ3MgdW53aW5kIHRhYmxlIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIyMDIsNyArMjIwMiw3IEBACiAJdW53LmdhdGVfdGFibGUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghdW53LmdhdGVfdGFibGUpIHsKIAkJdW53LmdhdGVfdGFibGVfc2l6ZSA9IDA7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBjcmVhdGUgdW53aW5kIGRhdGEgZm9yIGdhdGUgcGFnZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBjcmVhdGUgdW53aW5kIGRhdGEgZm9yIGdhdGUgcGFnZSFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXVudy5nYXRlX3RhYmxlX3NpemUgPSBzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2NvbnRpZy5jCmluZGV4IDM0NGY2NGUuLjc5OGJmOTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9jb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKQEAgLTQ1LDggKzQ1LDYgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbS1pbmZvOlxuIik7CiAJc2hvd19mcmVlX2FyZWFzKCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiRnJlZSBzd2FwOiAgICAgICAlNmxka0JcbiIsCi0JICAgICAgIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiTm9kZSBtZW1vcnkgaW4gcGFnZXM6XG4iKTsKIAlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHsKIAkJdW5zaWduZWQgbG9uZyBwcmVzZW50OwpAQCAtMjU1LDcgKzI1Myw3IEBACiAJbWF4X3pvbmVfcGZuc1taT05FX05PUk1BTF0gPSBtYXhfbG93X3BmbjsKIAogI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKLQllZmlfbWVtbWFwX3dhbGsocmVnaXN0ZXJfYWN0aXZlX3JhbmdlcywgTlVMTCk7CisJZWZpX21lbW1hcF93YWxrKGZpbHRlcl9tZW1vcnksIHJlZ2lzdGVyX2FjdGl2ZV9yYW5nZXMpOwogCWVmaV9tZW1tYXBfd2FsayhmaW5kX2xhcmdlc3RfaG9sZSwgKHU2NCAqKSZtYXhfZ2FwKTsKIAlpZiAobWF4X2dhcCA8IExBUkdFX0dBUCkgewogCQl2bWVtX21hcCA9IChzdHJ1Y3QgcGFnZSAqKSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCmluZGV4IGVlNWU2OGIuLjU0NGRjNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogewogCWludCBjcHUsIG4gPSAwOwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKKwlmb3JfZWFjaF9wb3NzaWJsZV9lYXJseV9jcHUoY3B1KQogCQlpZiAobm9kZSA9PSBub2RlX2NwdWlkW2NwdV0ubmlkKQogCQkJbisrOwogCkBAIC0xMjQsNiArMTI0LDcgQEAKIAlwZXJub2Rlc2l6ZSArPSBub2RlICogTDFfQ0FDSEVfQllURVM7CiAJcGVybm9kZXNpemUgKz0gTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHBnX2RhdGFfdCkpOwogCXBlcm5vZGVzaXplICs9IEwxX0NBQ0hFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEpKTsKKwlwZXJub2Rlc2l6ZSArPSBMMV9DQUNIRV9BTElHTihzaXplb2YocGdfZGF0YV90KSk7CiAJcGVybm9kZXNpemUgPSBQQUdFX0FMSUdOKHBlcm5vZGVzaXplKTsKIAlyZXR1cm4gcGVybm9kZXNpemU7CiB9CkBAIC0xNDIsNyArMTQzLDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJaW50IGNwdTsKIAotCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9lYXJseV9jcHUoY3B1KSB7CiAJCWlmIChub2RlID09IG5vZGVfY3B1aWRbY3B1XS5uaWQpIHsKIAkJCW1lbWNweShfX3ZhKGNwdV9kYXRhKSwgX19waHlzX3Blcl9jcHVfc3RhcnQsCiAJCQkgICAgICAgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7CkBAIC0zNDUsNyArMzQ2LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAkvKiBTZXQgdGhlIG5vZGVfZGF0YSBwb2ludGVyIGZvciBlYWNoIHBlci1jcHUgc3RydWN0ICovCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2Vhcmx5X2NwdShjcHUpIHsKIAkJbm9kZSA9IG5vZGVfY3B1aWRbY3B1XS5uaWQ7CiAJCXBlcl9jcHUoY3B1X2luZm8sIGNwdSkubm9kZV9kYXRhID0gbWVtX2RhdGFbbm9kZV0ubm9kZV9kYXRhOwogCX0KQEAgLTQ0NCw3ICs0NDUsNyBAQAogCQkJbWVtX2RhdGFbbm9kZV0ubWluX3BmbiA9IH4wVUw7CiAJCX0KIAotCWVmaV9tZW1tYXBfd2FsayhyZWdpc3Rlcl9hY3RpdmVfcmFuZ2VzLCBOVUxMKTsKKwllZmlfbWVtbWFwX3dhbGsoZmlsdGVyX21lbW9yeSwgcmVnaXN0ZXJfYWN0aXZlX3Jhbmdlcyk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGJvb3QgbWVtb3J5IG1hcHMgaW4gcmV2ZXJzZSBvcmRlciBzaW5jZSB0aGF0J3MKQEAgLTQ5MywxMyArNDk0LDkgQEAKIAlpbnQgY3B1OwogCXN0YXRpYyBpbnQgZmlyc3RfdGltZSA9IDE7CiAKLQotCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCkKLQkJcmV0dXJuIF9fcGVyX2NwdV9zdGFydCArIF9fcGVyX2NwdV9vZmZzZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQogCWlmIChmaXJzdF90aW1lKSB7CiAJCWZpcnN0X3RpbWUgPSAwOwotCQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQorCQlmb3JfZWFjaF9wb3NzaWJsZV9lYXJseV9jcHUoY3B1KQogCQkJcGVyX2NwdShsb2NhbF9wZXJfY3B1X29mZnNldCwgY3B1KSA9IF9fcGVyX2NwdV9vZmZzZXRbY3B1XTsKIAl9CiAKQEAgLTUyMiw4ICs1MTksNiBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtLWluZm86XG4iKTsKIAlzaG93X2ZyZWVfYXJlYXMoKTsKLQlwcmludGsoS0VSTl9JTkZPICJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwKLQkgICAgICAgbnJfc3dhcF9wYWdlczw8KFBBR0VfU0hJRlQtMTApKTsKIAlwcmludGsoS0VSTl9JTkZPICJOb2RlIG1lbW9yeSBpbiBwYWdlczpcbiIpOwogCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQl1bnNpZ25lZCBsb25nIHByZXNlbnQ7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IDNlNjk4ODEuLjIzMDg4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC0yNiw3ICsyNiw3IEBACiAJaWYgKCF1c2VyX21vZGUocmVncykpIHsKIAkJLyoga3Byb2JlX3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KIAkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCWlmIChrcHJvYmVfcnVubmluZygpICYmIGtwcm9iZXNfZmF1bHRfaGFuZGxlcihyZWdzLCB0cmFwKSkKKwkJaWYgKGtwcm9iZV9ydW5uaW5nKCkgJiYga3Byb2JlX2ZhdWx0X2hhbmRsZXIocmVncywgdHJhcCkpCiAJCQlyZXQgPSAxOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDI1YWVmNjIuLjVjMWRlNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNTgsNyArNTgsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIG9yZGVyOwogCiAJcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7CiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwYWdlX2FkZHJlc3MocGFnZSk7CkBAIC02NiwxMiArNjUsNyBAQAogCWlmICh0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykpCiAJCXJldHVybjsJCQkJLyogaS1jYWNoZSBpcyBhbHJlYWR5IGNvaGVyZW50IHdpdGggZC1jYWNoZSAqLwogCi0JaWYgKFBhZ2VDb21wb3VuZChwYWdlKSkgewotCQlvcmRlciA9IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwotCQlmbHVzaF9pY2FjaGVfcmFuZ2UoYWRkciwgYWRkciArICgxVUwgPDwgb3JkZXIgPDwgUEFHRV9TSElGVCkpOwotCX0KLQllbHNlCi0JCWZsdXNoX2ljYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoYWRkciwgYWRkciArIChQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpKTsKIAlzZXRfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKTsJLyogbWFyayBwYWdlIGFzIGNsZWFuICovCiB9CiAKQEAgLTU1MywxMiArNTQ3LDEwIEBACiAjZW5kaWYgLyogQ09ORklHX1ZJUlRVQUxfTUVNX01BUCAqLwogCiBpbnQgX19pbml0Ci1yZWdpc3Rlcl9hY3RpdmVfcmFuZ2VzKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKQorcmVnaXN0ZXJfYWN0aXZlX3Jhbmdlcyh1NjQgc3RhcnQsIHU2NCBsZW4sIGludCBuaWQpCiB7Ci0JaW50IG5pZCA9IHBhZGRyX3RvX25pZChfX3BhKHN0YXJ0KSk7CisJdTY0IGVuZCA9IHN0YXJ0ICsgbGVuOwogCi0JaWYgKG5pZCA8IDApCi0JCW5pZCA9IDA7CiAjaWZkZWYgQ09ORklHX0tFWEVDCiAJaWYgKHN0YXJ0ID4gY3Jhc2hrX3Jlcy5zdGFydCAmJiBzdGFydCA8IGNyYXNoa19yZXMuZW5kKQogCQlzdGFydCA9IGNyYXNoa19yZXMuZW5kOwpAQCAtNzE0LDcgKzcwNiw3IEBACiAKIAlpZiAocmV0KQogCQlwcmludGsoIiVzOiBQcm9ibGVtIGVuY291bnRlcmVkIGluIF9fYWRkX3BhZ2VzKCkgYXMgcmV0PSVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCAgcmV0KTsKKwkJICAgICAgIF9fZnVuY19fLCAgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vbnVtYS5jIGIvYXJjaC9pYTY0L21tL251bWEuYwppbmRleCA3ODA3ZmM1Li5iNzNiZjE4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vbnVtYS5jCisrKyBiL2FyY2gvaWE2NC9tbS9udW1hLmMKQEAgLTI3LDcgKzI3LDkgQEAKICAqLwogaW50IG51bV9ub2RlX21lbWJsa3M7CiBzdHJ1Y3Qgbm9kZV9tZW1ibGtfcyBub2RlX21lbWJsa1tOUl9OT0RFX01FTUJMS1NdOwotc3RydWN0IG5vZGVfY3B1aWRfcyBub2RlX2NwdWlkW05SX0NQVVNdOworc3RydWN0IG5vZGVfY3B1aWRfcyBub2RlX2NwdWlkW05SX0NQVVNdID0KKwl7IFswIC4uLiBOUl9DUFVTLTFdID0geyAucGh5c19pZCA9IDAsIC5uaWQgPSBOVU1BX05PX05PREUgfSB9OworCiAvKgogICogVGhpcyBpcyBhIG1hdHJpeCB3aXRoICJkaXN0YW5jZXMiIGJldHdlZW4gbm9kZXMsIHRoZXkgc2hvdWxkIGJlCiAgKiBwcm9wb3J0aW9uYWwgdG8gdGhlIG1lbW9yeSBhY2Nlc3MgbGF0ZW5jeSByYXRpb3MuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggNjU1ZGEyNC4uZDUyZWM0ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtMTEsNiArMTEsOSBAQAogICogUm9oaXQgU2V0aCA8cm9oaXQuc2V0aEBpbnRlbC5jb20+CiAgKiBLZW4gQ2hlbiA8a2VubmV0aC53LmNoZW5AaW50ZWwuY29tPgogICogQ2hyaXN0b3BoZSBkZSBEaW5lY2hpbiA8ZGRkQGhwLmNvbT46IEF2b2lkIHB0Yy5lIG9uIG1lbW9yeSBhbGxvY2F0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycAorICoJRmVuZ2h1YSBZdSA8ZmVuZ2h1YS55dUBpbnRlbC5jb20+CisgKglBZGQgbXVsdGlwbGUgcHRjLmcvcHRjLmdhIGluc3RydWN0aW9uIHN1cHBvcnQgaW4gZ2xvYmFsIHRsYiBwdXJnZS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI2LDYgKzI5LDkgQEAKICNpbmNsdWRlIDxhc20vcGFsLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc2FsLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgogCiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CS8qIG1hc2sgb2Ygc3VwcG9ydGVkIHB1cmdlIHBhZ2Utc2l6ZXMgKi8KQEAgLTM5LDYgKzQ1LDEwIEBACiB9OwogCiBERUZJTkVfUEVSX0NQVSh1OCwgaWE2NF9uZWVkX3RsYl9mbHVzaCk7CitERUZJTkVfUEVSX0NQVSh1OCwgaWE2NF90cl9udW0pOyAgLypOdW1iZXIgb2YgVFIgc2xvdHMgaW4gY3VycmVudCBwcm9jZXNzb3IqLworREVGSU5FX1BFUl9DUFUodTgsIGlhNjRfdHJfdXNlZCk7IC8qTWF4IFNsb3QgbnVtYmVyIHVzZWQgYnkga2VybmVsKi8KKworc3RydWN0IGlhNjRfdHJfZW50cnkgX19wZXJfY3B1X2lkdHJzW05SX0NQVVNdWzJdW0lBNjRfVFJfQUxMT0NfTUFYXTsKIAogLyoKICAqIEluaXRpYWxpemVzIHRoZSBpYTY0X2N0eC5iaXRtYXAgYXJyYXkgYmFzZWQgb24gbWF4X2N0eCsxLgpAQCAtODQsMTQgKzk0LDE0MCBAQAogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAorLyoKKyAqIEltcGxlbWVudCAic3BpbmFwaG9yZXMiIC4uLiBsaWtlIGNvdW50aW5nIHNlbWFwaG9yZXMsIGJ1dCB0aGV5CisgKiBzcGluIGluc3RlYWQgb2Ygc2xlZXBpbmcuICBJZiB0aGVyZSBhcmUgZXZlciBhbnkgb3RoZXIgdXNlcnMgZm9yCisgKiB0aGlzIHByaW1pdGl2ZSBpdCBjYW4gYmUgbW92ZWQgdXAgdG8gYSBzcGluYXBob3JlLmggaGVhZGVyLgorICovCitzdHJ1Y3Qgc3BpbmFwaG9yZSB7CisJYXRvbWljX3QJY3VyOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIHNwaW5hcGhvcmVfaW5pdChzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MsIGludCB2YWwpCit7CisJYXRvbWljX3NldCgmc3MtPmN1ciwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRvd25fc3BpbihzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MpCit7CisJd2hpbGUgKHVubGlrZWx5KCFhdG9taWNfYWRkX3VubGVzcygmc3MtPmN1ciwgLTEsIDApKSkKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZzcy0+Y3VyKSA9PSAwKQorCQkJY3B1X3JlbGF4KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cF9zcGluKHN0cnVjdCBzcGluYXBob3JlICpzcykKK3sKKwlhdG9taWNfYWRkKDEsICZzcy0+Y3VyKTsKK30KKworc3RhdGljIHN0cnVjdCBzcGluYXBob3JlIHB0Y2dfc2VtOworc3RhdGljIHUxNiBucHRjZyA9IDE7CitzdGF0aWMgaW50IG5lZWRfcHRjZ19zZW0gPSAxOworc3RhdGljIGludCB0b29sYXRldG9jaGFuZ2VwdGNnc2VtID0gMDsKKworLyoKKyAqIEtlcm5lbCBwYXJhbWV0ZXIgIm5wdGNnPSIgb3ZlcnJpZGVzIG1heCBudW1iZXIgb2YgY29uY3VycmVudCBnbG9iYWwgVExCCisgKiBwdXJnZXMgd2hpY2ggaXMgcmVwb3J0ZWQgZnJvbSBlaXRoZXIgUEFMIG9yIFNBTCBQQUxPLgorICoKKyAqIFdlIGRvbid0IGhhdmUgc2FuaXR5IGNoZWNraW5nIGZvciBucHRjZyB2YWx1ZS4gSXQncyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5CisgKiBmb3IgdmFsaWQgbnB0Y2cgdmFsdWUgb24gdGhlIHBsYXRmb3JtLiBPdGhlcndpc2UsIGtlcm5lbCBtYXkgaGFuZyBpbiBzb21lCisgKiBjYXNlcy4KKyAqLworc3RhdGljIGludCBfX2luaXQKK3NldF9ucHRjZyhjaGFyICpzdHIpCit7CisJaW50IHZhbHVlID0gMDsKKworCWdldF9vcHRpb24oJnN0ciwgJnZhbHVlKTsKKwlzZXR1cF9wdGNnX3NlbSh2YWx1ZSwgTlBUQ0dfRlJPTV9LRVJORUxfUEFSQU1FVEVSKTsKKworCXJldHVybiAxOworfQorCitfX3NldHVwKCJucHRjZz0iLCBzZXRfbnB0Y2cpOworCisvKgorICogTWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHB0Yy5nIHB1cmdlcyBpbiB0aGUgc3lzdGVtIGNhbgorICogYmUgZGVmaW5lZCBieSBQQUxfVk1fU1VNTUFSWSAoaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgdGFrZQorICogdGhlIHNtYWxsZXN0IHZhbHVlIGZvciBhbnkgY3B1IGluIHRoZSBzeXN0ZW0pIG9yIGJ5IHRoZSBQQUwKKyAqIG92ZXJyaWRlIHRhYmxlIChpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBpZ25vcmUgdGhlIHZhbHVlIGZyb20KKyAqIFBBTF9WTV9TVU1NQVJZKS4KKyAqCisgKiBLZXJuZWwgcGFyYW1ldGVyICJucHRjZz0iIG92ZXJyaWRlcyBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVzb3VzIHB0Yy5nCisgKiBwdXJnZXMgZGVmaW5lZCBpbiBlaXRoZXIgUEFMX1ZNX1NVTU1BUlkgb3IgUEFMIG92ZXJyaWRlIHRhYmxlLiBJbiB0aGlzIGNhc2UsCisgKiB3ZSBzaG91bGQgaWdub3JlIHRoZSB2YWx1ZSBmcm9tIGVpdGhlciBQQUxfVk1fU1VNTUFSWSBvciBQQUwgb3ZlcnJpZGUgdGFibGUuCisgKgorICogQ29tcGxpY2F0aW5nIHRoZSBsb2dpYyBoZXJlIGlzIHRoZSBmYWN0IHRoYXQgbnVtX3Bvc3NpYmxlX2NwdXMoKQorICogaXNuJ3QgZnVsbHkgc2V0dXAgdW50aWwgd2Ugc3RhcnQgYnJpbmdpbmcgY3B1cyBvbmxpbmUuCisgKi8KK3ZvaWQKK3NldHVwX3B0Y2dfc2VtKGludCBtYXhfcHVyZ2VzLCBpbnQgbnB0Y2dfZnJvbSkKK3sKKwlzdGF0aWMgaW50IGtwX292ZXJyaWRlOworCXN0YXRpYyBpbnQgcGFsb19vdmVycmlkZTsKKwlzdGF0aWMgaW50IGZpcnN0Y3B1ID0gMTsKKworCWlmICh0b29sYXRldG9jaGFuZ2VwdGNnc2VtKSB7CisJCUJVR19PTihtYXhfcHVyZ2VzIDwgbnB0Y2cpOworCQlyZXR1cm47CisJfQorCisJaWYgKG5wdGNnX2Zyb20gPT0gTlBUQ0dfRlJPTV9LRVJORUxfUEFSQU1FVEVSKSB7CisJCWtwX292ZXJyaWRlID0gMTsKKwkJbnB0Y2cgPSBtYXhfcHVyZ2VzOworCQlnb3RvIHJlc2V0c2VtYTsKKwl9CisJaWYgKGtwX292ZXJyaWRlKSB7CisJCW5lZWRfcHRjZ19zZW0gPSBudW1fcG9zc2libGVfY3B1cygpID4gbnB0Y2c7CisJCXJldHVybjsKKwl9CisKKwlpZiAobnB0Y2dfZnJvbSA9PSBOUFRDR19GUk9NX1BBTE8pIHsKKwkJcGFsb19vdmVycmlkZSA9IDE7CisKKwkJLyogSW4gUEFMTyBtYXhfcHVyZ2VzID09IDAgcmVhbGx5IG1lYW5zIGl0ISAqLworCQlpZiAobWF4X3B1cmdlcyA9PSAwKQorCQkJcGFuaWMoIldob2EhIFBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgZ2xvYmFsIFRMQiBwdXJnZXMuXG4iKTsKKwkJbnB0Y2cgPSBtYXhfcHVyZ2VzOworCQlpZiAobnB0Y2cgPT0gUEFMT19NQVhfVExCX1BVUkdFUykgeworCQkJbmVlZF9wdGNnX3NlbSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwkJZ290byByZXNldHNlbWE7CisJfQorCWlmIChwYWxvX292ZXJyaWRlKSB7CisJCWlmIChucHRjZyAhPSBQQUxPX01BWF9UTEJfUFVSR0VTKQorCQkJbmVlZF9wdGNnX3NlbSA9IChudW1fcG9zc2libGVfY3B1cygpID4gbnB0Y2cpOworCQlyZXR1cm47CisJfQorCisJLyogSW4gUEFMX1ZNX1NVTU1BUlkgbWF4X3B1cmdlcyA9PSAwIGFjdHVhbGx5IG1lYW5zIDEgKi8KKwlpZiAobWF4X3B1cmdlcyA9PSAwKSBtYXhfcHVyZ2VzID0gMTsKKworCWlmIChmaXJzdGNwdSkgeworCQlucHRjZyA9IG1heF9wdXJnZXM7CisJCWZpcnN0Y3B1ID0gMDsKKwl9CisJaWYgKG1heF9wdXJnZXMgPCBucHRjZykKKwkJbnB0Y2cgPSBtYXhfcHVyZ2VzOworCWlmIChucHRjZyA9PSBQQUxfTUFYX1BVUkdFUykgeworCQluZWVkX3B0Y2dfc2VtID0gMDsKKwkJcmV0dXJuOworCX0gZWxzZQorCQluZWVkX3B0Y2dfc2VtID0gKG51bV9wb3NzaWJsZV9jcHVzKCkgPiBucHRjZyk7CisKK3Jlc2V0c2VtYToKKwlzcGluYXBob3JlX2luaXQoJnB0Y2dfc2VtLCBtYXhfcHVyZ2VzKTsKK30KKwogdm9pZAogaWE2NF9nbG9iYWxfdGxiX3B1cmdlIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIG5iaXRzKQogewotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRjZ19sb2NrKTsKLQogCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKIAorCXRvb2xhdGV0b2NoYW5nZXB0Y2dzZW0gPSAxOworCiAJaWYgKG1tICE9IGFjdGl2ZV9tbSkgewogCQkvKiBSZXN0b3JlIHJlZ2lvbiBJRHMgZm9yIG1tICovCiAJCWlmIChtbSAmJiBhY3RpdmVfbW0pIHsKQEAgLTEwMiwxOSArMjM4LDIwIEBACiAJCX0KIAl9CiAKLQkvKiBIVyByZXF1aXJlcyBnbG9iYWwgc2VyaWFsaXphdGlvbiBvZiBwdGMuZ2EuICAqLwotCXNwaW5fbG9jaygmcHRjZ19sb2NrKTsKLQl7Ci0JCWRvIHsKLQkJCS8qCi0JCQkgKiBGbHVzaCBBTEFUIGVudHJpZXMgYWxzby4KLQkJCSAqLwotCQkJaWE2NF9wdGNnYShzdGFydCwgKG5iaXRzPDwyKSk7Ci0JCQlpYTY0X3NybHpfaSgpOwotCQkJc3RhcnQgKz0gKDFVTCA8PCBuYml0cyk7Ci0JCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnB0Y2dfbG9jayk7CisJaWYgKG5lZWRfcHRjZ19zZW0pCisJCWRvd25fc3BpbigmcHRjZ19zZW0pOworCisJZG8geworCQkvKgorCQkgKiBGbHVzaCBBTEFUIGVudHJpZXMgYWxzby4KKwkJICovCisJCWlhNjRfcHRjZ2Eoc3RhcnQsIChuYml0cyA8PCAyKSk7CisJCWlhNjRfc3Jsel9pKCk7CisJCXN0YXJ0ICs9ICgxVUwgPDwgbmJpdHMpOworCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKKworCWlmIChuZWVkX3B0Y2dfc2VtKQorCQl1cF9zcGluKCZwdGNnX3NlbSk7CiAKICAgICAgICAgaWYgKG1tICE9IGFjdGl2ZV9tbSkgewogICAgICAgICAgICAgICAgIGFjdGl2YXRlX2NvbnRleHQoYWN0aXZlX21tKTsKQEAgLTE5MCw2ICszMjcsOSBAQAogCWlhNjRfcHRjZV9pbmZvX3QgdW5pbml0aWFsaXplZF92YXIocHRjZV9pbmZvKTsgLyogR0NDIGJlIHF1aWV0ICovCiAJdW5zaWduZWQgbG9uZyB0cl9wZ2JpdHM7CiAJbG9uZyBzdGF0dXM7CisJcGFsX3ZtX2luZm9fMV91X3Qgdm1faW5mb18xOworCXBhbF92bV9pbmZvXzJfdV90IHZtX2luZm9fMjsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKChzdGF0dXMgPSBpYTY0X3BhbF92bV9wYWdlX3NpemUoJnRyX3BnYml0cywgJnB1cmdlLm1hc2spKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUEFMX1ZNX1BBR0VfU0laRSBmYWlsZWQgd2l0aCBzdGF0dXM9JWxkOyAiCkBAIC0yMDYsNCArMzQ2LDE5MSBAQAogCWxvY2FsX2NwdV9kYXRhLT5wdGNlX3N0cmlkZVsxXSA9IHB0Y2VfaW5mby5zdHJpZGVbMV07CiAKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CS8qIG51a2UgbGVmdCBvdmVycyBmcm9tIGJvb3RzdHJhcHBpbmcuLi4gKi8KKwlzdGF0dXMgPSBpYTY0X3BhbF92bV9zdW1tYXJ5KCZ2bV9pbmZvXzEsICZ2bV9pbmZvXzIpOworCisJaWYgKHN0YXR1cykgeworCQlwcmludGsoS0VSTl9FUlIgImlhNjRfcGFsX3ZtX3N1bW1hcnk9JWxkXG4iLCBzdGF0dXMpOworCQlwZXJfY3B1KGlhNjRfdHJfbnVtLCBjcHUpID0gODsKKwkJcmV0dXJuOworCX0KKwlwZXJfY3B1KGlhNjRfdHJfbnVtLCBjcHUpID0gdm1faW5mb18xLnBhbF92bV9pbmZvXzFfcy5tYXhfaXRyX2VudHJ5KzE7CisJaWYgKHBlcl9jcHUoaWE2NF90cl9udW0sIGNwdSkgPgorCQkJCSh2bV9pbmZvXzEucGFsX3ZtX2luZm9fMV9zLm1heF9kdHJfZW50cnkrMSkpCisJCXBlcl9jcHUoaWE2NF90cl9udW0sIGNwdSkgPQorCQkJCXZtX2luZm9fMS5wYWxfdm1faW5mb18xX3MubWF4X2R0cl9lbnRyeSsxOworCWlmIChwZXJfY3B1KGlhNjRfdHJfbnVtLCBjcHUpID4gSUE2NF9UUl9BTExPQ19NQVgpIHsKKwkJcGVyX2NwdShpYTY0X3RyX251bSwgY3B1KSA9IElBNjRfVFJfQUxMT0NfTUFYOworCQlwcmludGsoS0VSTl9ERUJVRyAiVFIgcmVnaXN0ZXIgbnVtYmVyIGV4Y2VlZHMgSUE2NF9UUl9BTExPQ19NQVghIgorCQkJIklBNjRfVFJfQUxMT0NfTUFYIHNob3VsZCBiZSBleHRlbmRlZFxuIik7CisJfQogfQorCisvKgorICogaXNfdHJfb3ZlcmxhcAorICoKKyAqIENoZWNrIG92ZXJsYXAgd2l0aCBpbnNlcnRlZCBUUnMuCisgKi8KK3N0YXRpYyBpbnQgaXNfdHJfb3ZlcmxhcChzdHJ1Y3QgaWE2NF90cl9lbnRyeSAqcCwgdTY0IHZhLCB1NjQgbG9nX3NpemUpCit7CisJdTY0IHRyX2xvZ19zaXplOworCXU2NCB0cl9lbmQ7CisJdTY0IHZhX3JyID0gaWE2NF9nZXRfcnIodmEpOworCXU2NCB2YV9yaWQgPSBSUl9UT19SSUQodmFfcnIpOworCXU2NCB2YV9lbmQgPSB2YSArICgxPDxsb2dfc2l6ZSkgLSAxOworCisJaWYgKHZhX3JpZCAhPSBSUl9UT19SSUQocC0+cnIpKQorCQlyZXR1cm4gMDsKKwl0cl9sb2dfc2l6ZSA9IChwLT5pdGlyICYgMHhmZikgPj4gMjsKKwl0cl9lbmQgPSBwLT5pZmEgKyAoMTw8dHJfbG9nX3NpemUpIC0gMTsKKworCWlmICh2YSA+IHRyX2VuZCB8fCBwLT5pZmEgPiB2YV9lbmQpCisJCXJldHVybiAwOworCXJldHVybiAxOworCit9CisKKy8qCisgKiBpYTY0X2luc2VydF90ciBpbiB2aXJ0dWFsIG1vZGUuIEFsbG9jYXRlIGEgVFIgc2xvdAorICoKKyAqIHRhcmdldF9tYXNrIDogMHgxIDogaXRyLCAweDIgOiBkdHIsIDB4MyA6IGlkdHIKKyAqCisgKiB2YSAJOiB2aXJ0dWFsIGFkZHJlc3MuCisgKiBwdGUgCTogcHRlIGVudHJpZXMgaW5zZXJ0ZWQuCisgKiBsb2dfc2l6ZTogcmFuZ2UgdG8gYmUgY292ZXJlZC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICA8MCA6ICBlcnJvciBOby4KKyAqCisgKgkJICA+PTAgOiBzbG90IG51bWJlciBhbGxvY2F0ZWQgZm9yIFRSLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgorICovCitpbnQgaWE2NF9pdHJfZW50cnkodTY0IHRhcmdldF9tYXNrLCB1NjQgdmEsIHU2NCBwdGUsIHU2NCBsb2dfc2l6ZSkKK3sKKwlpbnQgaSwgcjsKKwl1bnNpZ25lZCBsb25nIHBzcjsKKwlzdHJ1Y3QgaWE2NF90cl9lbnRyeSAqcDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJciA9IC1FSU5WQUw7CisJLypDaGVjayBvdmVybGFwIHdpdGggZXhpc3RpbmcgVFIgZW50cmllcyovCisJaWYgKHRhcmdldF9tYXNrICYgMHgxKSB7CisJCXAgPSAmX19wZXJfY3B1X2lkdHJzW2NwdV1bMF1bMF07CisJCWZvciAoaSA9IElBNjRfVFJfQUxMT0NfQkFTRTsgaSA8PSBwZXJfY3B1KGlhNjRfdHJfdXNlZCwgY3B1KTsKKwkJCQkJCQkJaSsrLCBwKyspIHsKKwkJCWlmIChwLT5wdGUgJiAweDEpCisJCQkJaWYgKGlzX3RyX292ZXJsYXAocCwgdmEsIGxvZ19zaXplKSkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiT3ZlcmxhcHBlZCBFbnRyeSIKKwkJCQkJCSJJbnNlcnRlZCBmb3IgVFIgUmVpZ3N0ZXIhIVxuIik7CisJCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCWlmICh0YXJnZXRfbWFzayAmIDB4MikgeworCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdWzFdWzBdOworCQlmb3IgKGkgPSBJQTY0X1RSX0FMTE9DX0JBU0U7IGkgPD0gcGVyX2NwdShpYTY0X3RyX3VzZWQsIGNwdSk7CisJCQkJCQkJCWkrKywgcCsrKSB7CisJCQlpZiAocC0+cHRlICYgMHgxKQorCQkJCWlmIChpc190cl9vdmVybGFwKHAsIHZhLCBsb2dfc2l6ZSkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIk92ZXJsYXBwZWQgRW50cnkiCisJCQkJCQkiSW5zZXJ0ZWQgZm9yIFRSIFJlaWdzdGVyISFcbiIpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSBJQTY0X1RSX0FMTE9DX0JBU0U7IGkgPCBwZXJfY3B1KGlhNjRfdHJfbnVtLCBjcHUpOyBpKyspIHsKKwkJc3dpdGNoICh0YXJnZXRfbWFzayAmIDB4MykgeworCQljYXNlIDE6CisJCQlpZiAoIShfX3Blcl9jcHVfaWR0cnNbY3B1XVswXVtpXS5wdGUgJiAweDEpKQorCQkJCWdvdG8gZm91bmQ7CisJCQljb250aW51ZTsKKwkJY2FzZSAyOgorCQkJaWYgKCEoX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1baV0ucHRlICYgMHgxKSkKKwkJCQlnb3RvIGZvdW5kOworCQkJY29udGludWU7CisJCWNhc2UgMzoKKwkJCWlmICghKF9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdW2ldLnB0ZSAmIDB4MSkgJiYKKwkJCQkhKF9fcGVyX2NwdV9pZHRyc1tjcHVdWzFdW2ldLnB0ZSAmIDB4MSkpCisJCQkJZ290byBmb3VuZDsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KK2ZvdW5kOgorCWlmIChpID49IHBlcl9jcHUoaWE2NF90cl9udW0sIGNwdSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKlJlY29yZCB0ciBpbmZvIGZvciBtY2EgaGFuZGVyIHVzZSEqLworCWlmIChpID4gcGVyX2NwdShpYTY0X3RyX3VzZWQsIGNwdSkpCisJCXBlcl9jcHUoaWE2NF90cl91c2VkLCBjcHUpID0gaTsKKworCXBzciA9IGlhNjRfY2xlYXJfaWMoKTsKKwlpZiAodGFyZ2V0X21hc2sgJiAweDEpIHsKKwkJaWE2NF9pdHIoMHgxLCBpLCB2YSwgcHRlLCBsb2dfc2l6ZSk7CisJCWlhNjRfc3Jsel9pKCk7CisJCXAgPSAmX19wZXJfY3B1X2lkdHJzW2NwdV1bMF1baV07CisJCXAtPmlmYSA9IHZhOworCQlwLT5wdGUgPSBwdGU7CisJCXAtPml0aXIgPSBsb2dfc2l6ZSA8PCAyOworCQlwLT5yciA9IGlhNjRfZ2V0X3JyKHZhKTsKKwl9CisJaWYgKHRhcmdldF9tYXNrICYgMHgyKSB7CisJCWlhNjRfaXRyKDB4MiwgaSwgdmEsIHB0ZSwgbG9nX3NpemUpOworCQlpYTY0X3NybHpfaSgpOworCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdWzFdW2ldOworCQlwLT5pZmEgPSB2YTsKKwkJcC0+cHRlID0gcHRlOworCQlwLT5pdGlyID0gbG9nX3NpemUgPDwgMjsKKwkJcC0+cnIgPSBpYTY0X2dldF9ycih2YSk7CisJfQorCWlhNjRfc2V0X3Bzcihwc3IpOworCXIgPSBpOworb3V0OgorCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWE2NF9pdHJfZW50cnkpOworCisvKgorICogaWE2NF9wdXJnZV90cgorICoKKyAqIHRhcmdldF9tYXNrOiAweDE6IHB1cmdlIGl0ciwgMHgyIDogcHVyZ2UgZHRyLCAweDMgcHVyZ2UgaWR0ci4KKyAqIHNsb3Q6IHNsb3QgbnVtYmVyIHRvIGJlIGZyZWVkLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KKyAqLwordm9pZCBpYTY0X3B0cl9lbnRyeSh1NjQgdGFyZ2V0X21hc2ssIGludCBzbG90KQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGk7CisJc3RydWN0IGlhNjRfdHJfZW50cnkgKnA7CisKKwlpZiAoc2xvdCA8IElBNjRfVFJfQUxMT0NfQkFTRSB8fCBzbG90ID49IHBlcl9jcHUoaWE2NF90cl9udW0sIGNwdSkpCisJCXJldHVybjsKKworCWlmICh0YXJnZXRfbWFzayAmIDB4MSkgeworCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdW3Nsb3RdOworCQlpZiAoKHAtPnB0ZSYweDEpICYmIGlzX3RyX292ZXJsYXAocCwgcC0+aWZhLCBwLT5pdGlyPj4yKSkgeworCQkJcC0+cHRlID0gMDsKKwkJCWlhNjRfcHRyKDB4MSwgcC0+aWZhLCBwLT5pdGlyPj4yKTsKKwkJCWlhNjRfc3Jsel9pKCk7CisJCX0KKwl9CisKKwlpZiAodGFyZ2V0X21hc2sgJiAweDIpIHsKKwkJcCA9ICZfX3Blcl9jcHVfaWR0cnNbY3B1XVsxXVtzbG90XTsKKwkJaWYgKChwLT5wdGUgJiAweDEpICYmIGlzX3RyX292ZXJsYXAocCwgcC0+aWZhLCBwLT5pdGlyPj4yKSkgeworCQkJcC0+cHRlID0gMDsKKwkJCWlhNjRfcHRyKDB4MiwgcC0+aWZhLCBwLT5pdGlyPj4yKTsKKwkJCWlhNjRfc3Jsel9pKCk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSBwZXJfY3B1KGlhNjRfdHJfdXNlZCwgY3B1KTsgaSA+PSBJQTY0X1RSX0FMTE9DX0JBU0U7IGktLSkgeworCQlpZiAoKF9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdW2ldLnB0ZSAmIDB4MSkgfHwKKwkJCQkoX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1baV0ucHRlICYgMHgxKSkKKwkJCWJyZWFrOworCX0KKwlwZXJfY3B1KGlhNjRfdHJfdXNlZCwgY3B1KSA9IGk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpYTY0X3B0cl9lbnRyeSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL2ZpeHVwLmMgYi9hcmNoL2lhNjQvcGNpL2ZpeHVwLmMKaW5kZXggMjQ1ZGMxZi4uZjU5NTljMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9maXh1cC5jCisrKyBiL2FyY2gvaWE2NC9wY2kvZml4dXAuYwpAQCAtNjMsNyArNjMsNyBAQAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY29uZmlnKTsKIAlpZiAoY29uZmlnICYgKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgewogCQlwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyB8PSBJT1JFU09VUkNFX1JPTV9TSEFET1c7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJCb290IHZpZGVvIGRldmljZSBpcyAlc1xuIiwgcGNpX25hbWUocGRldikpOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJCb290IHZpZGVvIGRldmljZVxuIik7CiAJfQogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF92aWRlbyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCA4ZmQ3ZTgyLi43N2IxNWY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTM2Miw3ICszNjIsMTIgQEAKIAlpbmZvLm5hbWUgPSBuYW1lOwogCWFjcGlfd2Fsa19yZXNvdXJjZXMoZGV2aWNlLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19DUlMsIGFkZF93aW5kb3csCiAJCQkmaW5mbyk7Ci0KKwkvKgorCSAqIFNlZSBhcmNoL3g4Ni9wY2kvYWNwaS5jLgorCSAqIFRoZSBkZXNpcmVkIHBjaSBidXMgbWlnaHQgYWxyZWFkeSBiZSBzY2FubmVkIGluIGEgcXVpcmsuIFdlCisJICogc2hvdWxkIGhhbmRsZSB0aGUgY2FzZSBoZXJlLCBidXQgaXQgYXBwZWFycyB0aGF0IElBNjQgaGFzbid0CisJICogc3VjaCBxdWlyay4gU28gd2UganVzdCBpZ25vcmUgdGhlIGNhc2Ugbm93LgorCSAqLwogCXBidXMgPSBwY2lfc2Nhbl9idXNfcGFyZW50ZWQoTlVMTCwgYnVzLCAmcGNpX3Jvb3Rfb3BzLCBjb250cm9sbGVyKTsKIAlpZiAocGJ1cykKIAkJcGNpYmlvc19zZXR1cF9yb290X3dpbmRvd3MocGJ1cywgY29udHJvbGxlcik7CkBAIC00OTksNTQgKzUwNCwxMiBAQAogCS8qID8/PyBGSVhNRSAtLSByZWNvcmQgb2xkIHZhbHVlIGZvciBzaHV0ZG93bi4gICovCiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1wY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQotewotCXUxNiBjbWQsIG9sZF9jbWQ7Ci0JaW50IGlkeDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0JdW5zaWduZWQgbG9uZyB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQlvbGRfY21kID0gY21kOwotCWZvciAoaWR4PTA7IGlkeDxQQ0lfTlVNX1JFU09VUkNFUzsgaWR4KyspIHsKLQkJLyogT25seSBzZXQgdXAgdGhlIGRlc2lyZWQgcmVzb3VyY2VzLiAgKi8KLQkJaWYgKCEobWFzayAmICgxIDw8IGlkeCkpKQotCQkJY29udGludWU7Ci0KLQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07Ci0JCWlmICghKHItPmZsYWdzICYgdHlwZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKGlkeCA9PSBQQ0lfUk9NX1JFU09VUkNFKSAmJgotCQkJCSghKHItPmZsYWdzICYgSU9SRVNPVVJDRV9ST01fRU5BQkxFKSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFyLT5zdGFydCAmJiByLT5lbmQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJQQ0k6IERldmljZSAlcyBub3QgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgcmVzb3VyY2UgY29sbGlzaW9uc1xuIiwKLQkJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfSU87Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQl9Ci0JaWYgKGNtZCAhPSBvbGRfY21kKSB7Ci0JCXByaW50aygiUENJOiBFbmFibGluZyBkZXZpY2UgJXMgKCUwNHggLT4gJTA0eClcbiIsIHBjaV9uYW1lKGRldiksIG9sZF9jbWQsIGNtZCk7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogaW50CiBwY2liaW9zX2VuYWJsZV9kZXZpY2UgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoZGV2LCBtYXNrKTsKKwlyZXQgPSBwY2lfZW5hYmxlX3Jlc291cmNlcyhkZXYsIG1hc2spOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC03NjUsNyArNzI4LDcgQEAKIAlzdGF0dXMgPSBpYTY0X3BhbF9jYWNoZV9zdW1tYXJ5KCZsZXZlbHMsICZ1bmlxdWVfY2FjaGVzKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogaWE2NF9wYWxfY2FjaGVfc3VtbWFyeSgpIGZhaWxlZCAiCi0JCQkiKHN0YXR1cz0lbGQpXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQkiKHN0YXR1cz0lbGQpXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNzczLDcgKzczNiw3IEBACiAJCQkJLyogY2FjaGVfdHlwZSAoZGF0YV9vcl91bmlmaWVkKT0gKi8gMiwgJmNjaSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlhNjRfcGFsX2NhY2hlX2NvbmZpZ19pbmZvKCkgZmFpbGVkICIKLQkJCSIoc3RhdHVzPSVsZClcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCSIoc3RhdHVzPSVsZClcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCXBjaV9jYWNoZV9saW5lX3NpemUgPSAoMSA8PCBjY2kucGNjaV9saW5lX3NpemUpIC8gNDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaHViZXJyb3IuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaHViZXJyb3IuYwppbmRleCBiNjYzMTY4Li4wMTAxYzc5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2h1YmVycm9yLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9odWJlcnJvci5jCkBAIC0zNyw3ICszNyw3IEBACiAJCQkodTY0KSBuYXNpZCwgMCwgMCwgMCwgMCwgMCwgMCk7CiAKIAkJaWYgKChpbnQpcmV0X3N0dWZmLnYwKQotCQkJcGFuaWMoIiVzOiBGYXRhbCAlcyBFcnJvciIsIF9fRlVOQ1RJT05fXywKKwkJCXBhbmljKCIlczogRmF0YWwgJXMgRXJyb3IiLCBfX2Z1bmNfXywKIAkJCQkoKG5hc2lkICYgMSkgPyAiVElPIiA6ICJIVUJJSSIpKTsKIAogCQlpZiAoIShuYXNpZCAmIDEpKSAvKiBOb3QgYSBUSU8sIGhhbmRsZSBDUkIgZXJyb3JzICovCkBAIC00OCw3ICs0OCw3IEBACiAJCQkJKHU2NCkgbmFzaWQsIDAsIDAsIDAsIDAsIDAsIDApOwogCiAJCQlpZiAoKGludClyZXRfc3R1ZmYudjApCi0JCQkJcGFuaWMoIiVzOiBGYXRhbCBUSU8gRXJyb3IiLCBfX0ZVTkNUSU9OX18pOworCQkJCXBhbmljKCIlczogRmF0YWwgVElPIEVycm9yIiwgX19mdW5jX18pOwogCQl9IGVsc2UKIAkJCWJ0ZV9lcnJvcl9oYW5kbGVyKCh1bnNpZ25lZCBsb25nKU5PREVQREEobmFzaWRfdG9fY25vZGVpZChuYXNpZCkpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19hY3BpX2luaXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fYWNwaV9pbml0LmMKaW5kZXggM2M3MTc4Zi4uNjU2ODk0MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19hY3BpX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2FjcGlfaW5pdC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogIgogCQkgICAgICAgImFjcGlfZ2V0X3ZlbmRvcl9yZXNvdXJjZSgpIGZhaWxlZCAoMHgleCkgZm9yOiAiLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CiAJCWFjcGlfbnNfcHJpbnRfbm9kZV9wYXRobmFtZShoYW5kbGUsIE5VTEwpOwogCQlwcmludGsoIlxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJICAgICBzaXplb2Yoc3RydWN0IHBjaWJ1c19idXNzb2Z0ICopKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIiVzOiBJbnZhbGlkIHZlbmRvciBkYXRhIGxlbmd0aCAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgdmVuZG9yLT5ieXRlX2xlbmd0aCk7CisJCQlfX2Z1bmNfXywgdmVuZG9yLT5ieXRlX2xlbmd0aCk7CiAJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIiVzOiBhY3BpX2dldF92ZW5kb3JfcmVzb3VyY2UoKSBmYWlsZWQgKDB4JXgpIGZvcjogIiwKLQkJICAgICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCSAgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CiAJCWFjcGlfbnNfcHJpbnRfbm9kZV9wYXRobmFtZShoYW5kbGUsIE5VTEwpOwogCQlwcmludGsoIlxuIik7CiAJCXJldHVybiAxOwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJICAgIHNpemVvZihzdHJ1Y3QgcGNpX2RldmRldl9pbmZvICopKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIiVzOiBJbnZhbGlkIHZlbmRvciBkYXRhIGxlbmd0aDogJWQgZm9yOiAiLAotCQkgICAgICAgIF9fRlVOQ1RJT05fXywgdmVuZG9yLT5ieXRlX2xlbmd0aCk7CisJCSAgICAgICAgX19mdW5jX18sIHZlbmRvci0+Ynl0ZV9sZW5ndGgpOwogCQlhY3BpX25zX3ByaW50X25vZGVfcGF0aG5hbWUoaGFuZGxlLCBOVUxMKTsKIAkJcHJpbnRrKCJcbiIpOwogCQlyZXQgPSAxOwpAQCAtMjA1LDcgKzIwNSw3IEBACiAKIAlwY2lkZXZfcHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaWRldl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwY2lkZXZfcHRyKQotCQlwYW5pYygiJXM6IFVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIHBjaWRldl9pbmZvIiwgX19GVU5DVElPTl9fKTsKKwkJcGFuaWMoIiVzOiBVbmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBwY2lkZXZfaW5mbyIsIF9fZnVuY19fKTsKIAogCW1lbWNweSgmYWRkciwgdmVuZG9yLT5ieXRlX2RhdGEsIHNpemVvZihzdHJ1Y3QgcGNpZGV2X2luZm8gKikpOwogCXBjaWRldl9wcm9tX3B0ciA9IF9fdmEoYWRkcik7CkBAIC0yMTQsNyArMjE0LDcgQEAKIAkvKiBHZXQgdGhlIElSUSBpbmZvICovCiAJaXJxX2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlycV9pbmZvKQotCQkgcGFuaWMoIiVzOiBVbmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBzbl9pcnFfaW5mbyIsIF9fRlVOQ1RJT05fXyk7CisJCSBwYW5pYygiJXM6IFVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIHNuX2lycV9pbmZvIiwgX19mdW5jX18pOwogCiAJaWYgKHBjaWRldl9wdHItPnBkaV9zbl9pcnFfaW5mbykgewogCQlpcnFfaW5mb19wcm9tID0gX192YShwY2lkZXZfcHRyLT5wZGlfc25faXJxX2luZm8pOwpAQCAtMjQ5LDEwICsyNDksMTAgQEAKIAkJc3RhdHVzID0gYWNwaV9nZXRfcGFyZW50KGNoaWxkLCAmcGFyZW50KTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhY3BpX2dldF9wYXJlbnQoKSBmYWlsZWQgIgotCQkJICAgICAgICIoMHgleCkgZm9yOiAiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQkgICAgICAgIigweCV4KSBmb3I6ICIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQkJYWNwaV9uc19wcmludF9ub2RlX3BhdGhuYW1lKGNoaWxkLCBOVUxMKTsKIAkJCXByaW50aygiXG4iKTsKLQkJCXBhbmljKCIlczogVW5hYmxlIHRvIGZpbmQgaG9zdCBkZXZmblxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXBhbmljKCIlczogVW5hYmxlIHRvIGZpbmQgaG9zdCBkZXZmblxuIiwgX19mdW5jX18pOwogCQl9CiAJCWlmIChwYXJlbnQgPT0gcm9vdGJ1c19oYW5kbGUpCiAJCQlicmVhazsKQEAgLTI2MCw3ICsyNjAsNyBAQAogCX0KIAlpZiAoIWNoaWxkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBmaW5kIHJvb3QgYnVzIGZvcjogIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWFjcGlfbnNfcHJpbnRfbm9kZV9wYXRobmFtZShkZXZpY2VfaGFuZGxlLCBOVUxMKTsKIAkJcHJpbnRrKCJcbiIpOwogCQlCVUcoKTsKQEAgLTI2OSwxMCArMjY5LDEwIEBACiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGNoaWxkLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLCAmYWRyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGdldCBfQURSICgweCV4KSBmb3I6ICIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJYWNwaV9uc19wcmludF9ub2RlX3BhdGhuYW1lKGNoaWxkLCBOVUxMKTsKIAkJcHJpbnRrKCJcbiIpOwotCQlwYW5pYygiJXM6IFVuYWJsZSB0byBmaW5kIGhvc3QgZGV2Zm5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXBhbmljKCIlczogVW5hYmxlIHRvIGZpbmQgaG9zdCBkZXZmblxuIiwgX19mdW5jX18pOwogCX0KIAogCXNsb3QgPSAoYWRyID4+IDE2KSAmIDB4ZmZmZjsKQEAgLTMwOCw3ICszMDgsNyBAQAogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICIlczogYWNwaV9nZXRfcGFyZW50KCkgZmFpbGVkICgweCV4KSBmb3I6ICIsCi0JCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCQlhY3BpX25zX3ByaW50X25vZGVfcGF0aG5hbWUoaGFuZGxlLCBOVUxMKTsKIAkJCXByaW50aygiXG4iKTsKIAkJCXJldHVybiBBRV9PSzsKQEAgLTMxOCw3ICszMTgsNyBAQAogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAiJXM6IEZhaWxlZCB0byBmaW5kIF9CQk4gaW4gcGFyZW50IG9mOiAiLAotCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCQlfX2Z1bmNfXyk7CiAJCQlhY3BpX25zX3ByaW50X25vZGVfcGF0aG5hbWUoaGFuZGxlLCBOVUxMKTsKIAkJCXByaW50aygiXG4iKTsKIAkJCXJldHVybiBBRV9PSzsKQEAgLTM1OCwxNCArMzU4LDE0IEBACiAJCWlmIChzZWdtZW50ICE9IHBjaV9kb21haW5fbnIoZGV2KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIiVzOiBTZWdtZW50IG51bWJlciBtaXNtYXRjaCwgMHglbHggdnMgMHgleCBmb3I6ICIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBzZWdtZW50LCBwY2lfZG9tYWluX25yKGRldikpOworCQkJICAgICAgIF9fZnVuY19fLCBzZWdtZW50LCBwY2lfZG9tYWluX25yKGRldikpOwogCQkJYWNwaV9uc19wcmludF9ub2RlX3BhdGhuYW1lKHJvb3RidXNfaGFuZGxlLCBOVUxMKTsKIAkJCXByaW50aygiXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGdldCBfX1NFRyBmcm9tOiAiLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJYWNwaV9uc19wcmludF9ub2RlX3BhdGhuYW1lKHJvb3RidXNfaGFuZGxlLCBOVUxMKTsKIAkJcHJpbnRrKCJcbiIpOwogCQlyZXR1cm4gMTsKQEAgLTM4Niw3ICszODYsNyBAQAogCWlmICghcGNpZGV2X21hdGNoLmhhbmRsZSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlczogQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgQUNQSSBkZXZpY2UgZm9yICVzLlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUoZGV2KSk7CisJCSAgICAgICBfX2Z1bmNfXywgcGNpX25hbWUoZGV2KSk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNDIyLDcgKzQyMiw3IEBACiAKIAlpZiAoc25fYWNwaV9nZXRfcGNpZGV2X2luZm8oZGV2LCAmcGNpZGV2X2luZm8sICZzbl9pcnFfaW5mbykpIHsKIAkJcGFuaWMoIiVzOiAgRmFpbHVyZSBvYnRhaW5pbmcgcGNpZGV2X2luZm8gZm9yICVzXG4iLAotCQkgICAgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKGRldikpOworCQkgICAgICBfX2Z1bmNfXywgcGNpX25hbWUoZGV2KSk7CiAJfQogCiAJaWYgKHBjaWRldl9pbmZvLT5wZGlfcGlvX21hcHBlZF9hZGRyW1BDSV9ST01fUkVTT1VSQ0VdKSB7CkBAIC00NjMsNyArNDYzLDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICIlczogMHglMDR4OjB4JTAyeCBVbmFibGUgdG8gIgogCQkJICAgICAgICJvYnRhaW4gcHJvbV9idXNzb2Z0X3B0clxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIpOworCQkJICAgICAgIF9fZnVuY19fLCBwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyKTsKIAkJCXJldHVybjsKIAkJfQogCQlzbl9jb21tb25fYnVzX2ZpeHVwKGJ1cywgcHJvbV9idXNzb2Z0X3B0cik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwppbmRleCBjNGViODRmLi44YTkyNGE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKQEAgLTM2NCw3ICszNjQsNyBAQAogCiAJZWxlbWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeXNkYXRhX2VsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbGVtZW50KSB7Ci0JCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnkhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5IVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWVsZW1lbnQtPnN5c2RhdGEgPSBTTl9QQ0lERVZfSU5GTyhkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCA5MDZiOTM2Li5jM2FhODUxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwpAQCAtMjA5LDExICsyMDksMTEgQEAKIAogCXBjaWRldl9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaWRldl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwY2lkZXZfaW5mbykKLQkJcGFuaWMoIiVzOiBVbmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBwY2lkZXZfaW5mbyIsIF9fRlVOQ1RJT05fXyk7CisJCXBhbmljKCIlczogVW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3IgcGNpZGV2X2luZm8iLCBfX2Z1bmNfXyk7CiAKIAlzbl9pcnFfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbl9pcnFfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc25faXJxX2luZm8pCi0JCXBhbmljKCIlczogVW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3Igc25faXJxX2luZm8iLCBfX0ZVTkNUSU9OX18pOworCQlwYW5pYygiJXM6IFVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIHNuX2lycV9pbmZvIiwgX19mdW5jX18pOwogCiAJLyogQ2FsbCB0byByZXRyaWV2ZSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIG5lZWRlZCBieSBrZXJuZWwuICovCiAJc3RhdHVzID0gc2FsX2dldF9wY2lkZXZfaW5mbygodTY0KSBwY2lfZG9tYWluX25yKGRldiksCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9tY2EuYwppbmRleCA4NjhjOWFhLi4yNzc5M2Y3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvbWNhLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlpZiAoIW5ld2J1ZikgewogCQkJbXV0ZXhfdW5sb2NrKCZzbl9vZW1kYXRhX211dGV4KTsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBleHRlbmQgc25fb2VtZGF0YVxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCXZmcmVlKCpzbl9vZW1kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKaW5kZXggNGIwZDE1My4uOGNjMGM0NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc2FsLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKaW5kZXggODE3ODViNy4uOWUwYjE2NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAoc3RydWN0IHhwY19wYXJ0aXRpb24gKikgZGF0YTsKIAogCi0JREJVR19PTihqaWZmaWVzIDwgcGFydC0+ZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCk7CisJREJVR19PTih0aW1lX2JlZm9yZShqaWZmaWVzLCBwYXJ0LT5kaXNlbmdhZ2VfcmVxdWVzdF90aW1lb3V0KSk7CiAKIAkodm9pZCkgeHBjX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHBhcnQpOwogCkBAIC0yMzAsNyArMjMwLDcgQEAKIHsKIAl4cGNfdmFycy0+aGVhcnRiZWF0Kys7CiAKLQlpZiAoamlmZmllcyA+PSB4cGNfaGJfY2hlY2tfdGltZW91dCkgeworCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHhwY19oYl9jaGVja190aW1lb3V0KSkgewogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnhwY19hY3RfSVJRX3dxKTsKIAl9CiAKQEAgLTI3MCw3ICsyNzAsNyBAQAogCiAKIAkJLyogY2hlY2tpbmcgb2YgcmVtb3RlIGhlYXJ0YmVhdHMgaXMgc2tld2VkIGJ5IElSUSBoYW5kbGluZyAqLwotCQlpZiAoamlmZmllcyA+PSB4cGNfaGJfY2hlY2tfdGltZW91dCkgeworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB4cGNfaGJfY2hlY2tfdGltZW91dCkpIHsKIAkJCWRldl9kYmcoeHBjX3BhcnQsICJjaGVja2luZyByZW1vdGUgaGVhcnRiZWF0c1xuIik7CiAJCQl4cGNfY2hlY2tfcmVtb3RlX2hiKCk7CiAKQEAgLTMwNSw3ICszMDUsNyBAQAogCQkvKiB3YWl0IGZvciBJUlEgb3IgdGltZW91dCAqLwogCQkodm9pZCkgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHhwY19hY3RfSVJRX3dxLAogCQkJICAgIChsYXN0X0lSUV9jb3VudCA8IGF0b21pY19yZWFkKCZ4cGNfYWN0X0lSUV9yY3ZkKSB8fAotCQkJCQlqaWZmaWVzID49IHhwY19oYl9jaGVja190aW1lb3V0IHx8CisJCQkJCXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgeHBjX2hiX2NoZWNrX3RpbWVvdXQpIHx8CiAJCQkJCQkodm9sYXRpbGUgaW50KSB4cGNfZXhpdGluZykpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwppbmRleCA3YmE0MDMyLi45ZTk3YzI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwpAQCAtODc3LDcgKzg3Nyw3IEBACiAJZGlzZW5nYWdlZCA9ICh4cGNfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCkgPT0gMCk7CiAJaWYgKHBhcnQtPmRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQpIHsKIAkJaWYgKCFkaXNlbmdhZ2VkKSB7Ci0JCQlpZiAoamlmZmllcyA8IHBhcnQtPmRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQpIHsKKwkJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBwYXJ0LT5kaXNlbmdhZ2VfcmVxdWVzdF90aW1lb3V0KSkgewogCQkJCS8qIHRpbWVsaW1pdCBoYXNuJ3QgYmVlbiByZWFjaGVkIHlldCAqLwogCQkJCXJldHVybiAwOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYwppbmRleCA1MTFkYjJmLi4xOGI5NGI3OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCSpkbWFfaGFuZGxlID0gcHJvdmlkZXItPmRtYV9tYXBfY29uc2lzdGVudChwZGV2LCBwaHlzX2FkZHIsIHNpemUsCiAJCQkJCQkgICBTTl9ETUFfQUREUl9QSFlTKTsKIAlpZiAoISpkbWFfaGFuZGxlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBBVEVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgQVRFc1xuIiwgX19mdW5jX18pOwogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNwdWFkZHIsIGdldF9vcmRlcihzaXplKSk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTE3OSw3ICsxNzksNyBAQAogCXBoeXNfYWRkciA9IF9fcGEoY3B1X2FkZHIpOwogCWRtYV9hZGRyID0gcHJvdmlkZXItPmRtYV9tYXAocGRldiwgcGh5c19hZGRyLCBzaXplLCBTTl9ETUFfQUREUl9QSFlTKTsKIAlpZiAoIWRtYV9hZGRyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBBVEVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgQVRFc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIGRtYV9hZGRyOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCQkJCQkgICAgU05fRE1BX0FERFJfUEhZUyk7CiAKIAkJaWYgKCFzZy0+ZG1hX2FkZHJlc3MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBBVEVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIEFURXNcbiIsIF9fZnVuY19fKTsKIAogCQkJLyoKIAkJCSAqIEZyZWUgYW55IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgZW50cmllcy4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwppbmRleCBlZjA0OGE2Li41Mjk0NjJjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCkBAIC04OCw3ICs4OCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6ICBJbnZhbGlkIENBX0FQRVJBVFVSRV9TSVpFICIKLQkJICAgICAgICIweCVseFxuIiwgX19GVU5DVElPTl9fLCAodWxvbmcpIENBX0FQRVJBVFVSRV9TSVpFKTsKKwkJICAgICAgICIweCVseFxuIiwgX19mdW5jX18sICh1bG9uZykgQ0FfQVBFUkFUVVJFX1NJWkUpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlpZiAoIXRtcCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgQ291bGQgbm90IGFsbG9jYXRlICIKIAkJICAgICAgICIlbHUgYnl0ZXMgKG9yZGVyICVkKSBmb3IgR0FSVFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIF9fZnVuY19fLAogCQkgICAgICAgdGlvY2Ffa2Vybi0+Y2FfZ2FydF9zaXplLAogCQkgICAgICAgZ2V0X29yZGVyKHRpb2NhX2tlcm4tPmNhX2dhcnRfc2l6ZSkpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM0MSw3ICszNDEsNyBAQAogCiAJaWYgKG5vZGVfdXBwZXIgPiA2NCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgY29yZXRhbGsgYWRkciAweCVwIG5vZGUgaWQgb3V0ICIKLQkJICAgICAgICJvZiByYW5nZVxuIiwgX19GVU5DVElPTl9fLCAodm9pZCAqKWN0X2FkZHIpOworCQkgICAgICAgIm9mIHJhbmdlXG4iLCBfX2Z1bmNfXywgKHZvaWQgKiljdF9hZGRyKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlpZiAobm9kZV91cHBlciAhPSAoYWdwX2RtYV9leHRuID4+IENBX0FHUF9ETUFfTk9ERV9JRF9TSEZUKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgY29yZXRhbGsgdXBwZXIgbm9kZSAoJXUpICIKIAkJICAgICAgICJtaXNtYXRjaCB3aXRoIGNhX2FncF9kbWFfYWRkcl9leHRuICglbHUpXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLAorCQkgICAgICAgX19mdW5jX18sCiAJCSAgICAgICBub2RlX3VwcGVyLCAoYWdwX2RtYV9leHRuID4+IENBX0FHUF9ETUFfTk9ERV9JRF9TSEZUKSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTU5Nyw3ICs1OTcsNyBAQAogCWlmIChpc19zaHViMSgpICYmIHNuX3NhbF9yZXYoKSA8IDB4MDQwNikgewogCQlwcmludGsKIAkJICAgIChLRVJOX0VSUiAiJXM6ICBTR0kgcHJvbSByZXYgNC4wNiBvciBncmVhdGVyIHJlcXVpcmVkICIKLQkJICAgICAiZm9yIHRpb2NhIHN1cHBvcnRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgImZvciB0aW9jYSBzdXBwb3J0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNjUxLDcgKzY1MSw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlczogIFVuYWJsZSB0byBnZXQgaXJxICVkLiAgIgogCQkgICAgICAgIkVycm9yIGludGVycnVwdHMgd29uJ3QgYmUgcm91dGVkIGZvciBUSU9DQSBidXMgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIFNHSV9USU9DQV9FUlJPUiwKKwkJICAgICAgIF9fZnVuY19fLCBTR0lfVElPQ0FfRVJST1IsCiAJCSAgICAgICAoaW50KXRpb2NhX2NvbW1vbi0+Y2FfY29tbW9uLmJzX3BlcnNpc3RfYnVzbnVtKTsKIAogCXNuX3NldF9lcnJfaXJxX2FmZmluaXR5KFNHSV9USU9DQV9FUlJPUik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKaW5kZXggOTk5ZjE0Zi4uOWIzYzExMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCWlmICgmbWFwLT5jZV9kbWFtYXBfbGlzdCA9PSAmY2Vfa2Vybi0+Y2VfZG1hbWFwX2xpc3QpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiJXM6ICAlcyAtIG5vIG1hcCBmb3VuZCBmb3IgYnVzX2FkZHIgMHglbHhcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBwY2lfbmFtZShwZGV2KSwgYnVzX2FkZHIpOworCQkJICAgICAgIF9fZnVuY19fLCBwY2lfbmFtZShwZGV2KSwgYnVzX2FkZHIpOwogCQl9IGVsc2UgaWYgKC0tbWFwLT5yZWZjbnQgPT0gMCkgewogCQkJZm9yIChpID0gMDsgaSA8IG1hcC0+YXRlX2NvdW50OyBpKyspIHsKIAkJCQltYXAtPmF0ZV9zaGFkb3dbaV0gPSAwOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAKIAkJICAgICAgICIlczogIFVuYWJsZSB0byBnZXQgaXJxICVkLiAgIgogCQkgICAgICAgIkVycm9yIGludGVycnVwdHMgd29uJ3QgYmUgcm91dGVkIGZvciAiCiAJCSAgICAgICAiVElPQ0UgYnVzICUwNHg6JTAyeFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgU0dJX1BDSUFTSUNfRVJST1IsCisJCSAgICAgICBfX2Z1bmNfXywgU0dJX1BDSUFTSUNfRVJST1IsCiAJCSAgICAgICB0aW9jZV9jb21tb24tPmNlX3BjaWJ1cy5ic19wZXJzaXN0X3NlZ21lbnQsCiAJCSAgICAgICB0aW9jZV9jb21tb24tPmNlX3BjaWJ1cy5ic19wZXJzaXN0X2J1c251bSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL20zMnIva2VybmVsL01ha2VmaWxlCmluZGV4IGU5N2UyNmUuLjA5MjAwZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIGV4dHJhLXkJOj0gaGVhZC5vIGluaXRfdGFzay5vIHZtbGludXgubGRzCiAKIG9iai15CTo9IHByb2Nlc3MubyBlbnRyeS5vIHRyYXBzLm8gYWxpZ24ubyBpcnEubyBzZXR1cC5vIHRpbWUubyBcCi0JbTMycl9rc3ltcy5vIHN5c19tMzJyLm8gc2VtYXBob3JlLm8gc2lnbmFsLm8gcHRyYWNlLm8KKwltMzJyX2tzeW1zLm8gc3lzX20zMnIubyBzaWduYWwubyBwdHJhY2UubwogCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc21wYm9vdC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCmluZGV4IDQxYTRjOTUuLmU2NzA5ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgpAQCAtMjIsMTAgKzIxLDYgQEAKIEVYUE9SVF9TWU1CT0woX19pb3JlbWFwKTsKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwotRVhQT1JUX1NZTUJPTChfX2Rvd24pOwotRVhQT1JUX1NZTUJPTChfX2Rvd25faW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MKF9fdXApOwotRVhQT1JUX1NZTUJPTChfX2Rvd25fdHJ5bG9jayk7CiAKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogLyogRGVsYXkgbG9vcHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL20zMnIva2VybmVsL3NlbWFwaG9yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDBjMmQzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL20zMnIvc2VtYXBob3JlLmMKLSAqICAgIG9yaWcgOiBpMzg2IDIuNi40Ci0gKgotICogIE0zMlIgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgotICoKLSAqCUNvcHlyaWdodCAoYykgMjAwMiAtIDIwMDQgSGl0b3NoaSBZYW1hbW90bwotICovCi0KLS8qCi0gKiBpMzg2IHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMKLSAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgMTk5OSBSZWQgSGF0LCBJbmMuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBydyBzZW1hcGhvcmVzIGltcGxlbWVudGVkIE5vdmVtYmVyIDE5OTkgYnkgQmVuamFtaW4gTGFIYWlzZSA8YmNybEBrdmFjay5vcmc+Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0KLS8qCi0gKiBTZW1hcGhvcmVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhIHR3by13YXkgY291bnRlcjoKLSAqIFRoZSAiY291bnQiIHZhcmlhYmxlIGlzIGRlY3JlbWVudGVkIGZvciBlYWNoIHByb2Nlc3MKLSAqIHRoYXQgdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2VtYXBob3JlLCB3aGlsZSB0aGUgInNsZWVwaW5nIgotICogdmFyaWFibGUgaXMgYSBjb3VudCBvZiBzdWNoIGFjcXVpcmVzLgotICoKLSAqIE5vdGFibHksIHRoZSBpbmxpbmUgInVwKCkiIGFuZCAiZG93bigpIiBmdW5jdGlvbnMgY2FuCi0gKiBlZmZpY2llbnRseSB0ZXN0IGlmIHRoZXkgbmVlZCB0byBkbyBhbnkgZXh0cmEgd29yayAodXAKLSAqIG5lZWRzIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqICJzbGVlcGluZyIgYW5kIHRoZSBjb250ZW50aW9uIHJvdXRpbmUgb3JkZXJpbmcgaXMgcHJvdGVjdGVkCi0gKiBieSB0aGUgc3BpbmxvY2sgaW4gdGhlIHNlbWFwaG9yZSdzIHdhaXRxdWV1ZSBoZWFkLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMKLSAqIGNvbnRlbnRpb24gb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZQotICogIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUgd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUKLSAqIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbiA8YXNtL3NlbWFwaG9yZS5oPgotICogd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi0KLS8qCi0gKiBMb2dpYzoKLSAqICAtIG9ubHkgb24gYSBib3VuZGFyeSBjb25kaXRpb24gZG8gd2UgbmVlZCB0byBjYXJlLiBXaGVuIHdlIGdvCi0gKiAgICBmcm9tIGEgbmVnYXRpdmUgY291bnQgdG8gYSBub24tbmVnYXRpdmUsIHdlIHdha2UgcGVvcGxlIHVwLgotICogIC0gd2hlbiB3ZSBnbyBmcm9tIGEgbm9uLW5lZ2F0aXZlIGNvdW50IHRvIGEgbmVnYXRpdmUgZG8gd2UKLSAqICAgIChhKSBzeW5jaHJvbml6ZSB3aXRoIHRoZSAic2xlZXBlciIgY291bnQgYW5kIChiKSBtYWtlIHN1cmUKLSAqICAgIHRoYXQgd2UncmUgb24gdGhlIHdha2V1cCBsaXN0IGJlZm9yZSB3ZSBzeW5jaHJvbml6ZSBzbyB0aGF0Ci0gKiAgICB3ZSBjYW5ub3QgbG9zZSB3YWtldXAgZXZlbnRzLgotICovCi0KLWFzbWxpbmthZ2Ugdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi1hc21saW5rYWdlIHZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JdHNrLT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZV9sb2NrZWQoJnNlbS0+d2FpdCwgJndhaXQpOwotCi0Jc2VtLT5zbGVlcGVycysrOwotCWZvciAoOzspIHsKLQkJaW50IHNsZWVwZXJzID0gc2VtLT5zbGVlcGVyczsKLQotCQkvKgotCQkgKiBBZGQgImV2ZXJ5Ym9keSBlbHNlIiBpbnRvIGl0LiBUaGV5IGFyZW4ndAotCQkgKiBwbGF5aW5nLCBiZWNhdXNlIHdlIG93biB0aGUgc3BpbmxvY2sgaW4KLQkJICogdGhlIHdhaXRfcXVldWVfaGVhZC4KLQkJICovCi0JCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZShzbGVlcGVycyAtIDEsICZzZW0tPmNvdW50KSkgewotCQkJc2VtLT5zbGVlcGVycyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlzZW0tPnNsZWVwZXJzID0gMTsJLyogdXMgLSBzZWUgLTEgYWJvdmUgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQotCQlzY2hlZHVsZSgpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlX2xvY2tlZCgmc2VtLT53YWl0LCAmd2FpdCk7Ci0Jd2FrZV91cF9sb2NrZWQoJnNlbS0+d2FpdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOwotfQotCi1hc21saW5rYWdlIGludCBfX3NjaGVkIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlX2xvY2tlZCgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQlzZW0tPnNsZWVwZXJzKys7Ci0JZm9yICg7OykgewotCQlpbnQgc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzOwotCi0JCS8qCi0JCSAqIFdpdGggc2lnbmFscyBwZW5kaW5nLCB0aGlzIHR1cm5zIGludG8KLQkJICogdGhlIHRyeWxvY2sgZmFpbHVyZSBjYXNlIC0gd2Ugd29uJ3QgYmUKLQkJICogc2xlZXBpbmcsIGFuZCB3ZSogY2FuJ3QgZ2V0IHRoZSBsb2NrIGFzCi0JCSAqIGl0IGhhcyBjb250ZW50aW9uLiBKdXN0IGNvcnJlY3QgdGhlIGNvdW50Ci0JCSAqIGFuZCBleGl0LgotCQkgKi8KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVFI7Ci0JCQlzZW0tPnNsZWVwZXJzID0gMDsKLQkJCWF0b21pY19hZGQoc2xlZXBlcnMsICZzZW0tPmNvdW50KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogQWRkICJldmVyeWJvZHkgZWxzZSIgaW50byBpdC4gVGhleSBhcmVuJ3QKLQkJICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrIGluCi0JCSAqIHdhaXRfcXVldWVfaGVhZC4gVGhlICItMSIgaXMgYmVjYXVzZSB3ZSdyZQotCQkgKiBzdGlsbCBob3BpbmcgdG8gZ2V0IHRoZSBzZW1hcGhvcmUuCi0JCSAqLwotCQlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoc2xlZXBlcnMgLSAxLCAmc2VtLT5jb3VudCkpIHsKLQkJCXNlbS0+c2xlZXBlcnMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2VtLT5zbGVlcGVycyA9IDE7CS8qIHVzIC0gc2VlIC0xIGFib3ZlICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0KLQkJc2NoZWR1bGUoKTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQkJdHNrLT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWVfbG9ja2VkKCZzZW0tPndhaXQsICZ3YWl0KTsKLQl3YWtlX3VwX2xvY2tlZCgmc2VtLT53YWl0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCi0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKgotICogVHJ5bG9jayBmYWlsZWQgLSBtYWtlIHN1cmUgd2UgY29ycmVjdCBmb3IKLSAqIGhhdmluZyBkZWNyZW1lbnRlZCB0aGUgY291bnQuCi0gKgotICogV2UgY291bGQgaGF2ZSBkb25lIHRoZSB0cnlsb2NrIHdpdGggYQotICogc2luZ2xlICJjbXB4Y2hnIiB3aXRob3V0IGZhaWx1cmUgY2FzZXMsCi0gKiBidXQgdGhlbiBpdCB3b3VsZG4ndCB3b3JrIG9uIGEgMzg2LgotICovCi1hc21saW5rYWdlIGludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCBzbGVlcGVyczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0Jc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzICsgMTsKLQlzZW0tPnNsZWVwZXJzID0gMDsKLQotCS8qCi0JICogQWRkICJldmVyeWJvZHkgZWxzZSIgYW5kIHVzIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrIGluIHRoZQotCSAqIHdhaXRfcXVldWVfaGVhZC4KLQkgKi8KLQlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoc2xlZXBlcnMsICZzZW0tPmNvdW50KSkgewotCQl3YWtlX3VwX2xvY2tlZCgmc2VtLT53YWl0KTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCXJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL01ha2VmaWxlIGIvYXJjaC9tNjhrL01ha2VmaWxlCmluZGV4IDJjYmE2MDUuLmIxNTE3M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9NYWtlZmlsZQorKysgYi9hcmNoL202OGsvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDggQEAKICMgQ29weXJpZ2h0IChDKSAxOTk0IGJ5IEhhbWlzaCBNYWNkb25hbGQKICMKIAorS0JVSUxEX0RFRkNPTkZJRyA6PSBhbWlnYV9kZWZjb25maWcKKwogIyBvdmVycmlkZSB0b3AgbGV2ZWwgbWFrZWZpbGUKIEFTICs9IC1tNjgwMjAKIExERkxBR1MgOj0gLW0gbTY4a2VsZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0cmFtLmMgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwppbmRleCAwMDU1YTZjLi4wNGM2OWZmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvc3RyYW0uYworKysgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CiAjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjdW5kZWYgREVCVUcKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnCmluZGV4IDU2NDlmYmEuLmU0MTk1ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWcKQEAgLTEsNjMgKzEsMTExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM2LW02OGsKLSMgVHVlIEp1biAgNyAyMDozNDoyMyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM4CisjIFdlZCBBcHIgIDIgMjA6NDY6MDYgMjAwOAogIwogQ09ORklHX002OEs9eQogQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19USU1FX0xPV19SRVM9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorQ09ORklHX05PX0lPUE9SVD15CisjIENPTkZJR19OT19ETUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWFtaWdhIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQVVESVQ9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9PUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQlNHPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cApAQCAtODAsMTAgKzEyOCwyNCBAQAogQ09ORklHX002ODA0MD15CiBDT05GSUdfTTY4MDYwPXkKIENPTkZJR19NTVVfTU9UT1JPTEE9eQotQ09ORklHX002OEtGUFVfRU1VPXkKLUNPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUM9eQotIyBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19OT0RFU19TSElGVD0zCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTk3LDQ3ICsxNTksMjg4IEBACiBDT05GSUdfUFJPQ19IQVJEV0FSRT15CiBDT05GSUdfSVNBPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1pPTkVfRE1BPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19aT1JST19OQU1FUz15CiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfSVBfRENDUD1tCitDT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQorQ09ORklHX0lQX0RDQ1BfQUNLVkVDPXkKKworIworIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9EQ0NQX0NDSUQyPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCisjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIwogIyBEZXZpY2UgRHJpdmVycwogIwogCiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCiAjIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1BBUlBPUlQ9bQogIyBDT05GSUdfUEFSUE9SVF9QQyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSUE9SVF9OT1RfUEM9eQogQ09ORklHX1BBUlBPUlRfQU1JR0E9bQogQ09ORklHX1BBUlBPUlRfTUZDMz1tCiAjIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1BBUlBPUlRfMTI4ND15Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCitDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQogIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiBDT05GSUdfQU1JR0FfRkxPUFBZPXkKIENPTkZJR19BTUlHQV9aMlJBTT15Ci0jIENPTkZJR19QQVJJREUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCkBAIC0xNDUsNTYgKzQ0OCw2NiBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVUQVBFPW0KK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQogIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HQVlMRT15CiBDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSPXkKIENPTkZJR19CTEtfREVWX0JVRERIQT15Ci0jIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorCisjCisjIE90aGVyIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisKKyMKKyMgTm90ZTogbW9zdCBvZiB0aGVzZSBhbHNvIHJlcXVpcmUgc3BlY2lhbCBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzCisjCisjIENPTkZJR19CTEtfREVWXzREUklWRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFRDMjI3OCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hUNjU2MEIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9RRDY1WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUM4NjcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTIwNiw2ICs1MTksNyBAQAogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIAogIwogIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKQEAgLTIxMywzMCArNTI3LDM0IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCitDT05GSUdfU0NTSV9TUlBfVEdUX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKK0NPTkZJR19JU0NTSV9UQ1A9bQogIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MF9NTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CitDT05GSUdfNTNDNzAwX0JFX0JVUz15CiAjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKQEAgLTI0NCwyNDMgKzU2Miw0MiBAQAogQ09ORklHX0EzMDAwX1NDU0k9eQogQ09ORklHX0EyMDkxX1NDU0k9eQogQ09ORklHX0dWUDExX1NDU0k9eQotQ09ORklHX0NZQkVSU1RPUk1fU0NTST15Ci1DT05GSUdfQ1lCRVJTVE9STUlJX1NDU0k9eQotQ09ORklHX0JMWjIwNjBfU0NTST15Ci1DT05GSUdfQkxaMTIzMF9TQ1NJPXkKLUNPTkZJR19GQVNUTEFORV9TQ1NJPXkKLUNPTkZJR19PS1RBR09OX1NDU0k9eQotCi0jCi0jIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCi0jCi0jIENPTkZJR19DRF9OT19JREVTQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIworQ09ORklHX1NDU0lfQTQwMDBUPXkKK0NPTkZJR19TQ1NJX1pPUlJPN1hYPXkKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD1tCiBDT05GSUdfTURfTElORUFSPW0KIENPTkZJR19NRF9SQUlEMD1tCiBDT05GSUdfTURfUkFJRDE9bQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX1JBSUQ0NTY9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQogQ09ORklHX01EX01VTFRJUEFUSD1tCiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09bQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNX0NSWVBUPW0KIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9aRVJPPW0KIENPTkZJR19ETV9NVUxUSVBBVEg9bQogQ09ORklHX0RNX01VTFRJUEFUSF9FTUM9bQotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotQ09ORklHX05FVF9JUElQPW0KLUNPTkZJR19ORVRfSVBHUkU9bQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotQ09ORklHX0lORVRfQUg9bQotQ09ORklHX0lORVRfRVNQPW0KLUNPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lQX1RDUERJQUc9bQotQ09ORklHX0lQX1RDUERJQUdfSVBWNj15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PW0KLUNPTkZJR19JUFY2X1BSSVZBQ1k9eQotQ09ORklHX0lORVQ2X0FIPW0KLUNPTkZJR19JTkVUNl9FU1A9bQotQ09ORklHX0lORVQ2X0lQQ09NUD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JUFY2X1RVTk5FTD1tCi1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLSMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLUNPTkZJR19JUF9ORl9URlRQPW0KLUNPTkZJR19JUF9ORl9BTUFOREE9bQotQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQotQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15Ci1DT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQotQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQotQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KLUNPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotQ09ORklHX0lQNl9ORl9RVUVVRT1tCi1DT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09QVFM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVA2X05GX01BVENIX01BUks9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCi1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLUNPTkZJR19JUF9TQ1RQPW0KLSMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAotQ09ORklHX1NDVFBfSE1BQ19NRDU9eQotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPW0KLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotQ09ORklHX0lQWD1tCi0jIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFMSz1tCi0jIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfRE1fTVVMVElQQVRIX1JEQUM9bQorQ09ORklHX0RNX01VTFRJUEFUSF9IUD1tCisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CitDT05GSUdfRE1fVUVWRU5UPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfTUFDVkxBTj1tCiBDT05GSUdfRVFVQUxJWkVSPW0KICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKK0NPTkZJR19WRVRIPW0KICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJJQURORT1tCiBDT05GSUdfQTIwNjU9bQogQ09ORklHX0hZRFJBPW0KQEAgLTQ5MywzMiArNjEwLDI0IEBACiAjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgV2lyZWxlc3MgTEFOCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QTElQPW0KKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfRklMVEVSPXkKQEAgLTUyNiwyOCArNjM1LDI4IEBACiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0wyVFA9bQogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19TSEFQRVI9bQogQ09ORklHX05FVENPTlNPTEU9bQotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTU3LDcgKzY2Niw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNTcwLDYgKzY3OCw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FNSUdBPXkKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldApAQCAtNTc3LDcgKzY4Niw3IEBACiAjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKLUNPTkZJR19NT1VTRV9BTUlHQT15CitDT05GSUdfTU9VU0VfQU1JR0E9bQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQogIyBDT05GSUdfSk9ZU1RJQ0tfQU5BTE9HIGlzIG5vdCBzZXQKQEAgLTYwMywxNiArNzEyLDE2IEBACiAjIENPTkZJR19KT1lTVElDS19UVVJCT0dSQUZYIGlzIG5vdCBzZXQKIENPTkZJR19KT1lTVElDS19BTUlHQT1tCiAjIENPTkZJR19KT1lTVElDS19KT1lEVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9NNjhLX0JFRVA9bQorIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz1tCi1DT05GSUdfU0VSSU9fU0VSUE9SVD1tCi0jIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIxLDYgKzczMCw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX0EyMjMyPW0KIApAQCAtNjM4LDk0ICs3NDgsMTAyIEBACiBDT05GSUdfUFJJTlRFUj1tCiAjIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9bQogQ09ORklHX0dFTl9SVENfWD15CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBTUEkgc3VwcG9ydAogIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLUNPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DSVJSVVM9bQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCitDT05GSUdfRkJfQ0lSUlVTPXkKIENPTkZJR19GQl9BTUlHQT15CiBDT05GSUdfRkJfQU1JR0FfT0NTPXkKIENPTkZJR19GQl9BTUlHQV9FQ1M9eQogQ09ORklHX0ZCX0FNSUdBX0FHQT15CiBDT05GSUdfRkJfRk0yPXkKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19GT05UX1BFQVJMXzh4OD15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15CiBDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzMzLDI3ICs4NTEsMjEgQEAKIENPTkZJR19TT1VORD1tCiBDT05GSUdfRE1BU09VTkRfUEFVTEE9bQogQ09ORklHX0RNQVNPVU5EPW0KLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0hJRFJBVz15CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBVc2Vyc3BhY2UgSS9PCiAjCi0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTc2OCwxMCArODgwLDExIEBACiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlM9bQogIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKQEAgLTc4MiwyNSArODk1LDI5IEBACiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfTk9MT0NLPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KK0NPTkZJR19PQ0ZTMl9GUz1tCisjIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CisjIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUVVPVEFDVEw9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz1tCiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtODA4LDcgKzkyNSw2IEBACiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz15CiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtODI3LDE5ICs5NDMsMTggQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotQ09ORklHX0FGRlNfRlM9eQorQ09ORklHX0FGRlNfRlM9bQogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg0Nyw0MyArOTYyLDM5IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CiBDT05GSUdfSFBGU19GUz1tCiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZfRlM9bQogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX0xPQ0tEPW0KIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCiBDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfU1VOUlBDX0JJTkQzND15CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCiBDT05GSUdfU01CX05MU19ERUZBVUxUPXkKIENPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BfRlM9bQotIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05GU19OUz15Ci1DT05GSUdfTkNQRlNfT1MyX05TPXkKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BGU19OTFM9eQotIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09EQV9GUz1tCiAjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg5NCwxMCArMTAwNSw2IEBACiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTkzOCwzNSArMTA0NSw0MiBAQAogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KK0NPTkZJR19ETE09bQorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PW0KQEAgLTk3NSw5ICsxMDg5LDIxIEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fWFRTPW0KK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtOTg2LDIwICsxMTEyLDM1IEBACiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnCmluZGV4IDYzMDI0YjAuLmU2MTE5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZwpAQCAtMSw2MyArMSwxMTEgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzYtbTY4awotIyBUdWUgSnVuICA3IDIwOjM0OjI3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzgKKyMgV2VkIEFwciAgMiAyMDo0NjowNyAyMDA4CiAjCiBDT05GSUdfTTY4Sz15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX1RJTUVfTE9XX1JFUz15CitDT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfTk9fSU9QT1JUPXkKKyMgQ09ORklHX05PX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItYXBvbGxvIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQVVESVQ9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9PUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQlNHPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cApAQCAtODAsMTAgKzEyOCwyNCBAQAogQ09ORklHX002ODA0MD15CiBDT05GSUdfTTY4MDYwPXkKIENPTkZJR19NTVVfTU9UT1JPTEE9eQotQ09ORklHX002OEtGUFVfRU1VPXkKLUNPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUM9eQotIyBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19OT0RFU19TSElGVD0zCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTkzLDEzNCArMTU1LDExIEBACiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0hFQVJUQkVBVD15CiBDT05GSUdfUFJPQ19IQVJEV0FSRT15CitDT05GSUdfWk9ORV9ETUE9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPW0KLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci1DT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQotQ09ORklHX0NIUl9ERVZfU0c9bQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotQ09ORklHX0RNX01VTFRJUEFUSF9FTUM9bQotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQogCkBAIC0yMzAsMTAgKzE2OSwxNyBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CkBAIC0yNDUsMTQ1ICsxOTEsMTk5IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSVBfVENQRElBRz1tCi1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIworQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCitDT05GSUdfSVBfRENDUF9BQ0tWRUM9eQogCiAjCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKK0NPTkZJR19JUF9EQ0NQX0NDSUQyPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCiBDT05GSUdfSVBfU0NUUD1tCiAjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotQ09ORklHX0lQWD1tCi0jIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBTEs9bQogIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19ST1VURT15CiAKQEAgLTM5MSw0NiArMzkxLDE1NCBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfT1ZFUl9FVEg9bQorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CitDT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCitDT05GSUdfU0NTSV9TUlBfVEdUX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKK0NPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fTVVMVElQQVRIX0VNQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX1JEQUM9bQorQ09ORklHX0RNX01VTFRJUEFUSF9IUD1tCisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CitDT05GSUdfRE1fVUVWRU5UPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfTUFDVkxBTj1tCiBDT05GSUdfRVFVQUxJWkVSPW0KICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCitDT05GSUdfVkVUSD1tCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfQVBPTExPX0VMUExVUz15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgV2lyZWxlc3MgTEFOCiAjCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CkBAIC00MzksMjggKzU0NywyOCBAQAogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9MMlRQPW0KIENPTkZJR19TTElQPW0KIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQogQ09ORklHX1NMSVBfU01BUlQ9eQogQ09ORklHX1NMSVBfTU9ERV9TTElQNj15Ci1DT05GSUdfU0hBUEVSPW0KIENPTkZJR19ORVRDT05TT0xFPW0KLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTQ3MCw3ICs1NzgsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTQ4MywxMSArNTkwLDE5IEBACiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC00OTUsNyArNjEwLDcgQEAKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCiBDT05GSUdfU0VSSU89bQotQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPW0KICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CkBAIC01MDYsNiArNjIxLDcgQEAKIENPTkZJR19WVD15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUxOSw5MCArNjM1LDExNCBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9bQogQ09ORklHX0dFTl9SVENfWD15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBTUEkgc3VwcG9ydAogIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CisjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCitDT05GSUdfRkJfQVBPTExPPXkKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIworQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9bQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURSQVc9eQorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIFVzZXJzcGFjZSBJL08KICMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNjE1LDEwICs3NTUsMTEgQEAKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz1tCiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldApAQCAtNjI5LDI1ICs3NzAsMjkgQEAKICMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLQotIwotIyBYRlMgc3VwcG9ydAotIwogQ09ORklHX1hGU19GUz1tCi1DT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19NSU5JWF9GUz15Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorQ09ORklHX0dGUzJfRlM9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19OT0xPQ0s9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09bQorQ09ORklHX09DRlMyX0ZTPW0KKyMgQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0cgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQorQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKKyMgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiAjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19GVVNFX0ZTPW0KIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC02NTUsNyArODAwLDYgQEAKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfWklTT0ZTX0ZTPXkKIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC02NzQsMTMgKzgxOCwxMiBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNjk0LDQ0ICs4MzcsNDAgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKIENPTkZJR19IUEZTX0ZTPW0KICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKICMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15Ci1DT05GSUdfTkZTRF9WND15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ORlNEX1RDUD15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfU1VOUlBDX0JJTkQzND15CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCiBDT05GSUdfU01CX05MU19ERUZBVUxUPXkKIENPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BfRlM9bQotIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05GU19OUz15Ci1DT05GSUdfTkNQRlNfT1MyX05TPXkKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BGU19OTFM9eQotIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09EQV9GUz1tCiAjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc0MSwxMCArODgwLDYgQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTc4NSwzNSArOTIwLDQyIEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQorQ09ORklHX0RMTT1tCisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPW0KK0NPTkZJR19BU1lOQ19DT1JFPW0KK0NPTkZJR19BU1lOQ19NRU1DUFk9bQorQ09ORklHX0FTWU5DX1hPUj1tCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtODIyLDkgKzk2NCwyMSBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiBDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTgzMywyMCArOTg3LDM1IEBACiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZwppbmRleCA2NDMzZGEyLi5iYTdmOTcxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnCkBAIC0xLDYzICsxLDExMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNi1tNjhrCi0jIFR1ZSBKdW4gIDcgMjA6MzQ6MzIgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjOAorIyBXZWQgQXByICAyIDIwOjQ2OjA5IDIwMDgKICMKIENPTkZJR19NNjhLPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfVElNRV9MT1dfUkVTPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorIyBDT05GSUdfTk9fRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii1hdGFyaSIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FVRElUPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfT1BST0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0JTRz15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKQEAgLTgwLDEwICsxMjgsMjQgQEAKIENPTkZJR19NNjgwNDA9eQogQ09ORklHX002ODA2MD15CiBDT05GSUdfTU1VX01PVE9ST0xBPXkKLUNPTkZJR19NNjhLRlBVX0VNVT15Ci1DT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKLSMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAogIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfTk9ERVNfU0hJRlQ9MworQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC05NCwxNjYgKzE1NiwxMSBAQAogQ09ORklHX1NUUkFNX1BST0M9eQogQ09ORklHX0hFQVJUQkVBVD15CiBDT05GSUdfUFJPQ19IQVJEV0FSRT15CitDT05GSUdfWk9ORV9ETUE9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfUEFSUE9SVD1tCi0jIENPTkZJR19QQVJQT1JUX1BDIGlzIG5vdCBzZXQKLUNPTkZJR19QQVJQT1JUX05PVF9QQz15Ci1DT05GSUdfUEFSUE9SVF9BVEFSST1tCi0jIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSUE9SVF8xMjg0PXkKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi1DT05GSUdfQVRBUklfRkxPUFBZPXkKLSMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLUNPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCi1DT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9GQUxDT05fSURFPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfQ0hSX0RFVl9TVD1tCi0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9eQotQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKLUNPTkZJR19DSFJfREVWX1NHPW0KLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi1DT05GSUdfTUQ9eQotQ09ORklHX0JMS19ERVZfTUQ9bQotQ09ORklHX01EX0xJTkVBUj1tCi1DT05GSUdfTURfUkFJRDA9bQotQ09ORklHX01EX1JBSUQxPW0KLSMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0Ci1DT05GSUdfTURfUkFJRDU9bQotQ09ORklHX01EX1JBSUQ2PW0KLUNPTkZJR19NRF9NVUxUSVBBVEg9bQotIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0RNPW0KLUNPTkZJR19ETV9DUllQVD1tCi1DT05GSUdfRE1fU05BUFNIT1Q9bQotQ09ORklHX0RNX01JUlJPUj1tCi1DT05GSUdfRE1fWkVSTz1tCi1DT05GSUdfRE1fTVVMVElQQVRIPW0KLUNPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKIApAQCAtMjYzLDEwICsxNzAsMTcgQEAKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKICMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0lQSVA9bQogQ09ORklHX05FVF9JUEdSRT1tCkBAIC0yNzUsMTQ1ICsxODksMTk5IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSVBfVENQRElBRz1tCi1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIworQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCitDT05GSUdfSVBfRENDUF9BQ0tWRUM9eQogCiAjCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKK0NPTkZJR19JUF9EQ0NQX0NDSUQyPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCiBDT05GSUdfSVBfU0NUUD1tCiAjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotQ09ORklHX0lQWD1tCi0jIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBTEs9bQogIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19ST1VURT15CiAKQEAgLTQyMSw0NiArMzg5LDE4OSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPW0KLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0VRVUFMSVpFUj1tCi0jIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIyBXaXJlbGVzcwogIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUPW0KK0NPTkZJR19QQVJQT1JUX0FUQVJJPW0KKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF8xMjg0PXkKK0NPTkZJR19QQVJQT1JUX05PVF9QQz15CitDT05GSUdfQkxLX0RFVj15CitDT05GSUdfQVRBUklfRkxPUFBZPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0FUQV9PVkVSX0VUSD1tCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSFJfREVWX09TU1Q9bQorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCitDT05GSUdfU0NTSV9TUlBfVEdUX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKK0NPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRBUklfU0NTST15CisjIENPTkZJR19BVEFSSV9TQ1NJX1RPU0hJQkFfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfU0NTSV9SRVNFVF9CT09UIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUkRBQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX0hQPW0KKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9VRVZFTlQ9eQorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKK0NPTkZJR19WRVRIPW0KKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9bQogQ09ORklHX0FUQVJJTEFOQ0U9bQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgV2lyZWxlc3MgTEFOCiAjCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BMSVAgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCkBAIC00NzAsMjggKzU4MSwyOCBAQAogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9MMlRQPW0KIENPTkZJR19TTElQPW0KIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQogQ09ORklHX1NMSVBfU01BUlQ9eQogQ09ORklHX1NMSVBfTU9ERV9TTElQNj15Ci1DT05GSUdfU0hBUEVSPW0KIENPTkZJR19ORVRDT05TT0xFPW0KLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTUwMSw3ICs2MTIsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTUwOSwyNiArNjE5LDM3IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0FUQVJJX0tCRF9DT1JFPXkKK0NPTkZJR19LRVlCT0FSRF9BVEFSST15CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfQVRBUkk9bQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQogQ09ORklHX0lOUFVUX002OEtfQkVFUD1tCi1DT05GSUdfSU5QVVRfVUlOUFVUPW0KKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCiBDT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldApAQCAtNTQwLDYgKzY2MSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01NTYsODYgKzY3OCw5NyBAQAogQ09ORklHX1BSSU5URVI9bQogIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBBUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19OVlJBTT15Ci1DT05GSUdfR0VOX1JUQz15CitDT05GSUdfR0VOX1JUQz1tCiBDT05GSUdfR0VOX1JUQ19YPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFNQSSBzdXBwb3J0CiAjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworQ09ORklHX0ZCX0FUQVJJPXkKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogCiAjCiAjIFNvdW5kCkBAIC02NDMsMjcgKzc3NiwyMSBAQAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19ETUFTT1VORF9BVEFSST1tCiBDT05GSUdfRE1BU09VTkQ9bQotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIFVzZXJzcGFjZSBJL08KICMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNjgwLDM4ICs4MDcsNDQgQEAKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz1tCiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPPXkKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkZTX0ZTPW0KICMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCi1DT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19NSU5JWF9GUz15Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorQ09ORklHX0dGUzJfRlM9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19OT0xPQ0s9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09bQorQ09ORklHX09DRlMyX0ZTPW0KKyMgQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0cgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQorQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKKyMgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiAjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19GVVNFX0ZTPW0KIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC03MTksNyArODUyLDYgQEAKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfWklTT0ZTX0ZTPXkKIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC03MzgsMTMgKzg3MCwxMiBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzU4LDQyICs4ODksMzggQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKIENPTkZJR19IUEZTX0ZTPW0KICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19MT0NLRD1tCiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9bQorQ09ORklHX1NVTlJQQ19CSU5EMzQ9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCiBDT05GSUdfU01CX05MU19ERUZBVUxUPXkKIENPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BfRlM9bQotIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05GU19OUz15Ci1DT05GSUdfTkNQRlNfT1MyX05TPXkKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BGU19OTFM9eQotIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09EQV9GUz1tCiAjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgwNCwxMCArOTMxLDYgQEAKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBUklfUEFSVElUSU9OPXkKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtODQ4LDM1ICs5NzEsNDIgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCitDT05GSUdfRExNPW0KKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT1tCkBAIC04ODUsOSArMTAxNSwyMSBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTg5NiwyMCArMTAzOCwzNSBAQAogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fU0VFRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19MWk89bQorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWcKaW5kZXggZGEyYTIzYS4uZWQ5OGVmZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZwpAQCAtMSw2MyArMSwxMTEgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzYtbTY4awotIyBUdWUgSnVuICA3IDIwOjM0OjM3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzgKKyMgV2VkIEFwciAgMiAyMDo0NjoxMCAyMDA4CiAjCiBDT05GSUdfTTY4Sz15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX1RJTUVfTE9XX1JFUz15CitDT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfTk9fSU9QT1JUPXkKKyMgQ09ORklHX05PX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItYnZtZTYwMDAiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BVURJVD15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX09QUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9CU0c9eQorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCkBAIC04NSw2ICsxMzMsMjIgQEAKIENPTkZJR19NTVVfTU9UT1JPTEE9eQogIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAogIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfTk9ERVNfU0hJRlQ9MworQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC05MywxMzQgKzE1NywxMSBAQAogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfUFJPQ19IQVJEV0FSRT15CitDT05GSUdfWk9ORV9ETUE9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPW0KLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci1DT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQotQ09ORklHX0NIUl9ERVZfU0c9bQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotQ09ORklHX0RNX01VTFRJUEFUSF9FTUM9bQotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQogCkBAIC0yMzAsMTAgKzE3MSwxNyBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CkBAIC0yNDUsMTI2ICsxOTMsMTg2IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSVBfVENQRElBRz1tCi1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIworQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCitDT05GSUdfSVBfRENDUF9BQ0tWRUM9eQogCiAjCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKK0NPTkZJR19JUF9EQ0NQX0NDSUQyPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCiBDT05GSUdfSVBfU0NUUD1tCiAjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTM3NiwxMyArMzg0LDggQEAKICMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfUk9VVEU9eQogCkBAIC0zOTAsNzYgKzM5MywxODYgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKLSMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVRBX09WRVJfRVRIPW0KK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfUkFJRF9BVFRSUz1tCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorQ09ORklHX1NDU0lfVEdUPW0KKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorQ09ORklHX0NIUl9ERVZfT1NTVD1tCitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KK0NPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1JQX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NSUF9UR1RfQVRUUlM9eQorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorQ09ORklHX0lTQ1NJX1RDUD1tCitDT05GSUdfNTNDNzAwX0JFX0JVUz15CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CVk1FNjAwMF9TQ1NJPXkKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUkRBQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX0hQPW0KKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9VRVZFTlQ9eQogQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT1tCiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNWTEFOPW0KIENPTkZJR19FUVVBTElaRVI9bQogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKK0NPTkZJR19WRVRIPW0KKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKIENPTkZJR19CVk1FNjAwMF9ORVQ9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPTDJUUD1tCiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotQ09ORklHX1NIQVBFUj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCi0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKK0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC00NjksNyArNTgyLDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC00ODIsMTEgKzU5NCwxOSBAQAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD1tCiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNDk0LDcgKzYxNCw3IEBACiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwogQ09ORklHX1NFUklPPW0KLUNPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj1tCiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldApAQCAtNTA1LDYgKzYyNSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01MTgsNTkgKzYzOSw1NiBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9bQogQ09ORklHX0dFTl9SVENfWD15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBTUEkgc3VwcG9ydAogIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC01ODEsMjcgKzY5OSwyMCBAQAogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBVc2Vyc3BhY2UgSS9PCiAjCi0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTYxNCwxMCArNzI1LDExIEBACiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlM9bQogIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKQEAgLTYyOCwyNSArNzQwLDI5IEBACiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfTk9MT0NLPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KK0NPTkZJR19PQ0ZTMl9GUz1tCisjIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CisjIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUVVPVEFDVEw9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz1tCiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNjU0LDcgKzc3MCw2IEBACiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz15CiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtNjczLDEzICs3ODgsMTIgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTY5Myw0NCArODA3LDQwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CiBDT05GSUdfSFBGU19GUz1tCiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZfRlM9bQogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19CSU5EMzQ9eQogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CiBDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkNQX0ZTPW0KLSMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BGU19ORlNfTlM9eQotQ09ORklHX05DUEZTX09TMl9OUz15Ci0jIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkNQRlNfTkxTPXkKLSMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogQ09ORklHX0NPREFfRlM9bQogIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC03NDAsMTAgKzg1MCw3IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKK0NPTkZJR19TWVNWNjhfUEFSVElUSU9OPXkKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CkBAIC03ODQsMzUgKzg5MSw0MiBAQAogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KK0NPTkZJR19ETE09bQorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19TRVFJVj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTgyMSw5ICs5MzUsMjEgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19YVFM9bQorQ09ORklHX0NSWVBUT19DVFI9bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQogQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCkBAIC04MzIsMjAgKzk1OCwzNSBAQAogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fU0VFRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19MWk89bQorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT1tCiBDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj1tCisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPW0KKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcKaW5kZXggNTEyNTE4OC4uMzhiNjhjNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZwpAQCAtMSw2MyArMSwxMTEgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzYtbTY4awotIyBUdWUgSnVuICA3IDIwOjM0OjQxIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzgKKyMgV2VkIEFwciAgMiAyMDo0NjoxMiAyMDA4CiAjCiBDT05GSUdfTTY4Sz15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX1RJTUVfTE9XX1JFUz15CitDT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfTk9fSU9QT1JUPXkKKyMgQ09ORklHX05PX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItaHAzMDAiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BVURJVD15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX09QUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9CU0c9eQorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCkBAIC04MSwxMCArMTI5LDI0IEBACiBDT05GSUdfTTY4MDQwPXkKIENPTkZJR19NNjgwNjA9eQogQ09ORklHX01NVV9NT1RPUk9MQT15Ci1DT05GSUdfTTY4S0ZQVV9FTVU9eQotQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15Ci0jIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX002OEtGUFVfRU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX05PREVTX1NISUZUPTMKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtOTQsMTM0ICsxNTYsMTEgQEAKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfSEVBUlRCRUFUPXkKIENPTkZJR19QUk9DX0hBUkRXQVJFPXkKK0NPTkZJR19aT05FX0RNQT15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAKICMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQotQ09ORklHX0JMS19ERVZfTkJEPW0KLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15Ci1DT05GSUdfQ0hSX0RFVl9TRz1tCi0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPW0KLUNPTkZJR19NRF9MSU5FQVI9bQotQ09ORklHX01EX1JBSUQwPW0KLUNPTkZJR19NRF9SQUlEMT1tCi0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAotQ09ORklHX01EX1JBSUQ1PW0KLUNPTkZJR19NRF9SQUlENj1tCi1DT05GSUdfTURfTVVMVElQQVRIPW0KLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9ETT1tCi1DT05GSUdfRE1fQ1JZUFQ9bQotQ09ORklHX0RNX1NOQVBTSE9UPW0KLUNPTkZJR19ETV9NSVJST1I9bQotQ09ORklHX0RNX1pFUk89bQotQ09ORklHX0RNX01VTFRJUEFUSD1tCi1DT05GSUdfRE1fTVVMVElQQVRIX0VNQz1tCi0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CiAKQEAgLTIzMSwxMCArMTcwLDE3IEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKQEAgLTI0NiwxNDUgKzE5MiwxOTkgQEAKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JUF9UQ1BESUFHPW0KLUNPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVRfTFJPPW0KK0NPTkZJR19JTkVUX0RJQUc9bQorQ09ORklHX0lORVRfVENQX0RJQUc9bQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT049bQorQ09ORklHX0lQVjZfU0lUPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KKyMgQ09ORklHX05GX0NUX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9bQotQ09ORklHX0lQX05GX0lSQz1tCi1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KLSMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfUkFXPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogCiAjCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVA2X05GX01BVENIX01BUks9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQorQ09ORklHX0lQX0RDQ1A9bQorQ09ORklHX0lORVRfRENDUF9ESUFHPW0KK0NPTkZJR19JUF9EQ0NQX0FDS1ZFQz15CiAKICMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIworQ09ORklHX0lQX0RDQ1BfQ0NJRDI9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEMz1tCisjIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzX1JUTz0xMDAKK0NPTkZJR19JUF9EQ0NQX1RGUkNfTElCPW0KIENPTkZJR19JUF9TQ1RQPW0KICMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBYPW0KLSMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKIENPTkZJR19BVEFMSz1tCiAjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIApAQCAtMzkyLDQ2ICszOTIsMTU0IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMT1tCisjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0FUQV9PVkVSX0VUSD1tCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSFJfREVWX09TU1Q9bQorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KK0NPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1JQX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NSUF9UR1RfQVRUUlM9eQorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorQ09ORklHX0lTQ1NJX1RDUD1tCisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUkRBQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX0hQPW0KKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9VRVZFTlQ9eQogQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT1tCiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNWTEFOPW0KIENPTkZJR19FUVVBTElaRVI9bQogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKK0NPTkZJR19WRVRIPW0KKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKIENPTkZJR19IUExBTkNFPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBXaXJlbGVzcyBMQU4KICMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTQ0MCwyOCArNTQ4LDI4IEBACiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0wyVFA9bQogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19TSEFQRVI9bQogQ09ORklHX05FVENPTlNPTEU9bQotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNDcxLDcgKzU3OSw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNDg0LDE5ICs1OTEsMzUgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfSElMX09MRD15CitDT05GSUdfS0VZQk9BUkRfSElMPXkKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD1tCiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9ISUw9bQogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfTTY4S19CRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CitDT05GSUdfSFBfU0RDX1JUQz1tCiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89bQotQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0hQX1NEQz15CitDT05GSUdfSElMX01MQz15CiBDT05GSUdfU0VSSU9fTElCUFMyPW0KICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CkBAIC01MDcsNiArNjMwLDcgQEAKIENPTkZJR19WVD15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUyMCw5MCArNjQ0LDExNCBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9bQogQ09ORklHX0dFTl9SVENfWD15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBTUEkgc3VwcG9ydAogIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CisjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCitDT05GSUdfRkJfSFAzMDA9eQorIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiAKICMKICMgU291bmQKICMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0hJRFJBVz15CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMgVXNlcnNwYWNlIEkvTwogIwotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCkBAIC02MTQsMTAgKzc2MiwxMSBAQAogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1JFSVNFUkZTX0ZTPW0KICMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CkBAIC02MjgsMjUgKzc3NywyOSBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCiBDT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19YRlNfRVhQT1JUPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX01JTklYX0ZTPXkKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CitDT05GSUdfR0ZTMl9GUz1tCitDT05GSUdfR0ZTMl9GU19MT0NLSU5HX05PTE9DSz1tCitDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTT1tCitDT05GSUdfT0NGUzJfRlM9bQorIyBDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CitDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQorIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAogQ09ORklHX1FVT1RBQ1RMPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQorQ09ORklHX0ZVU0VfRlM9bQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTY1NCw3ICs4MDcsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9eQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTY3MywxMyArODI1LDEyIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC02OTMsNDQgKzg0NCw0MCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQogQ09ORklHX0hQRlNfRlM9bQogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKLUNPTkZJR19ORlNEX1Y0PXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19TVU5SUENfQklORDM0PXkKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KIENPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQogQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotQ09ORklHX05DUF9GUz1tCi0jIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkNQRlNfTkZTX05TPXkKLUNPTkZJR19OQ1BGU19PUzJfTlM9eQotIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05MUz15Ci0jIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DT0RBX0ZTPW0KICMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtNzQwLDEwICs4ODcsNiBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtNzg0LDM1ICs5MjcsNDIgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCitDT05GSUdfRExNPW0KKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fU0VRSVY9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC04MjEsOSArOTcxLDIxIEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fWFRTPW0KK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KIENPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtODMyLDIwICs5OTQsMzUgQEAKIENPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fTFpPPW0KKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKaW5kZXggZmY5ZGZmYS4uNzM4YmNhNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCkBAIC0xLDYzICsxLDExMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNi1tNjhrCi0jIFR1ZSBKdW4gIDcgMjA6MzQ6NDUgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjOAorIyBXZWQgQXByICAyIDIwOjQ2OjE0IDIwMDgKICMKIENPTkZJR19NNjhLPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfVElNRV9MT1dfUkVTPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorIyBDT05GSUdfTk9fRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii1tYWMiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BVURJVD15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX09QUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9CU0c9eQorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCkBAIC04MiwxMCArMTMwLDI0IEBACiBDT05GSUdfTTY4MDQwPXkKICMgQ09ORklHX002ODA2MCBpcyBub3Qgc2V0CiBDT05GSUdfTU1VX01PVE9ST0xBPXkKLUNPTkZJR19NNjhLRlBVX0VNVT15Ci1DT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKLSMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAogIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfTk9ERVNfU0hJRlQ9MworQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC05NSw2ICsxNTcsMjYzIEBACiBDT05GSUdfQklORk1UX01JU0M9bQogIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0hBUkRXQVJFPXkKK0NPTkZJR19aT05FX0RNQT15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfSVBfRENDUD1tCitDT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQorQ09ORklHX0lQX0RDQ1BfQUNLVkVDPXkKKworIworIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9EQ0NQX0NDSUQyPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCitDT05GSUdfREVWX0FQUExFVEFMSz1tCitDT05GSUdfSVBERFA9bQorQ09ORklHX0lQRERQX0VOQ0FQPXkKK0NPTkZJR19JUEREUF9ERUNBUD15CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMT1tCisjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTEwMywyOCArNDIyLDE1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCiAjIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCkBAIC0xMzIsNTMgKzQzOCw1MCBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKICMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15CiBDT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVUQVBFPW0KK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQogIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9NQUNfSURFPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTE5MCw2ICs0OTMsNyBAQAogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIAogIwogIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKQEAgLTE5Nyw1OCArNTAxLDQ4IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorQ09ORklHX1NDU0lfU0FTX0hPU1RfU01QPXkKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUlBfQVRUUlM9bQorQ09ORklHX1NDU0lfU1JQX1RHVF9BVFRSUz15CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CitDT05GSUdfSVNDU0lfVENQPW0KICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQ19TQ1NJPXkKLUNPTkZJR19TQ1NJX01BQ19FU1A9eQotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9bQogQ09ORklHX01EX0xJTkVBUj1tCiBDT05GSUdfTURfUkFJRDA9bQogQ09ORklHX01EX1JBSUQxPW0KICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0Ci1DT05GSUdfTURfUkFJRDU9bQotQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD1tCiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fWkVSTz1tCiBDT05GSUdfRE1fTVVMVElQQVRIPW0KIENPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycwotIworQ09ORklHX0RNX01VTFRJUEFUSF9SREFDPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfSFA9bQorIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAorQ09ORklHX0RNX1VFVkVOVD15CitDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQogQ09ORklHX0FEQj15CiBDT05GSUdfQURCX01BQ0lJPXkKIENPTkZJR19BREJfTUFDSUlTST15CkBAIC0yNTcsMjUzICs1NTEsNjUgQEAKIENPTkZJR19BREJfQ1VEQT15CiBDT05GSUdfSU5QVVRfQURCSElEPXkKIENPTkZJR19NQUNfRU1VTU9VU0VCVE49eQotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLUNPTkZJR19JTkVUX0FIPW0KLUNPTkZJR19JTkVUX0VTUD1tCi1DT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JUF9UQ1BESUFHPW0KLUNPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi1DT05GSUdfSVBWNl9QUklWQUNZPXkKLUNPTkZJR19JTkVUNl9BSD1tCi1DT05GSUdfSU5FVDZfRVNQPW0KLUNPTkZJR19JTkVUNl9JUENPTVA9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSVBWNl9UVU5ORUw9bQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9bQotQ09ORklHX0lQX05GX0lSQz1tCi1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9RVUVVRT1tCi1DT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9GSUxURVI9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQotQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KLUNPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQotQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCi1DT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLUNPTkZJR19JUDZfTkZfUVVFVUU9bQotQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCi1DT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQotQ09ORklHX0lQNl9ORl9GSUxURVI9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUDZfTkZfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi1DT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLUNPTkZJR19JUFg9bQotIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBTEs9bQotQ09ORklHX0RFVl9BUFBMRVRBTEs9eQotQ09ORklHX0lQRERQPW0KLUNPTkZJR19JUEREUF9FTkNBUD15Ci1DT05GSUdfSVBERFBfREVDQVA9eQotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfTUFDVkxBTj1tCiBDT05GSUdfRVFVQUxJWkVSPW0KICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCitDT05GSUdfVkVUSD1tCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiAjIENPTkZJR19NSUkgaXMgbm90IHNldAogQ09ORklHX01BQzgzOTA9eQotQ09ORklHX01BQzg5eDA9eQotQ09ORklHX01BQ1NPTklDPXkKK0NPTkZJR19NQUM4OXgwPW0KK0NPTkZJR19NQUNTT05JQz1tCiBDT05GSUdfTUFDTUFDRT15CiAjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgV2lyZWxlc3MgTEFOCiAjCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0ZJTFRFUj15Ci0jIENPTkZJR19QUFBfQVNZTkMgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9MMlRQPW0KIENPTkZJR19TTElQPW0KIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQogQ09ORklHX1NMSVBfU01BUlQ9eQogQ09ORklHX1NMSVBfTU9ERV9TTElQNj15Ci1DT05GSUdfU0hBUEVSPW0KIENPTkZJR19ORVRDT05TT0xFPW0KLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTUxMyw3ICs2MTksNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTUyNiwxOSArNjMxLDI5IEBACiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX002OEtfQkVFUD1tCisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwogQ09ORklHX1NFUklPPW0KLUNPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj1tCiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldApAQCAtNTQ5LDYgKzY2NCw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01NjIsMTE2ICs2NzgsMTE3IEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz1tCiBDT05GSUdfR0VOX1JUQ19YPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFNQSSBzdXBwb3J0CiAjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NQUNNT0RFUz15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIwogQ09ORklHX0ZCX1ZBTEtZUklFPXkKIENPTkZJR19GQl9NQUM9eQorIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0ZPTlRfNngxMT15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15CiBDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX0xPR09fTUFDX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBVc2Vyc3BhY2UgSS9PCiAjCi0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTY4NSwxMCArODAyLDExIEBACiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlM9bQogIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKQEAgLTY5OSwyNSArODE3LDI5IEBACiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfTk9MT0NLPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KK0NPTkZJR19PQ0ZTMl9GUz1tCisjIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CisjIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUVVPVEFDVEw9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz1tCiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNzI1LDcgKzg0Nyw2IEBACiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz15CiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtNzQ0LDEzICs4NjUsMTIgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTc2NCw0MyArODg0LDM5IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CiBDT05GSUdfSFBGU19GUz1tCiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZfRlM9bQogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX0xPQ0tEPW0KIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCiBDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfU1VOUlBDX0JJTkQzND15CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCiBDT05GSUdfU01CX05MU19ERUZBVUxUPXkKIENPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BfRlM9bQotIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05GU19OUz15Ci1DT05GSUdfTkNQRlNfT1MyX05TPXkKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BGU19OTFM9eQotIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09EQV9GUz1tCiAjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgwOCwyNyArOTI0LDkgQEAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BTUlHQV9QQVJUSVRJT049eQotQ09ORklHX0FUQVJJX1BBUlRJVElPTj15CisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01BQ19QQVJUSVRJT049eQogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfQlNEX0RJU0tMQUJFTD15Ci1DT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKLUNPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQotQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15Ci1DT05GSUdfTERNX1BBUlRJVElPTj15Ci1DT05GSUdfTERNX0RFQlVHPXkKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfU1VOX1BBUlRJVElPTj15Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTg2OSw0NiArOTY3LDY1IEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9eQorQ09ORklHX0RMTT1tCisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPW0KK0NPTkZJR19BU1lOQ19DT1JFPW0KK0NPTkZJR19BU1lOQ19NRU1DUFk9bQorQ09ORklHX0FTWU5DX1hPUj1tCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NRDU9bQogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19YVFM9bQorQ09ORklHX0NSWVBUT19DVFI9bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQogQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCkBAIC05MTcsMjAgKzEwMzQsMzUgQEAKIENPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fTFpPPW0KKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZwppbmRleCBmMGQ1NTM0Li5mNDBiMTcyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZwpAQCAtMSw2MyArMSwxMTEgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzYtbTY4awotIyBUdWUgSnVuICA3IDIwOjM0OjUwIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzgKKyMgV2VkIEFwciAgMiAyMDo0NjoxNyAyMDA4CiAjCiBDT05GSUdfTTY4Sz15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX1RJTUVfTE9XX1JFUz15CitDT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfTk9fSU9QT1JUPXkKKyMgQ09ORklHX05PX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItbXZtZTE0NyIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FVRElUPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfT1BST0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0JTRz15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKQEAgLTg1LDYgKzEzMywyMiBAQAogQ09ORklHX01NVV9NT1RPUk9MQT15CiAjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19OT0RFU19TSElGVD0zCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTkzLDEzNSArMTU3LDExIEBACiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19QUk9DX0hBUkRXQVJFPXkKK0NPTkZJR19aT05FX0RNQT15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAKICMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQotQ09ORklHX0JMS19ERVZfTkJEPW0KLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15Ci1DT05GSUdfQ0hSX0RFVl9TRz1tCi0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NVk1FMTQ3X1NDU0k9eQotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi1DT05GSUdfTUQ9eQotQ09ORklHX0JMS19ERVZfTUQ9bQotQ09ORklHX01EX0xJTkVBUj1tCi1DT05GSUdfTURfUkFJRDA9bQotQ09ORklHX01EX1JBSUQxPW0KLSMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0Ci1DT05GSUdfTURfUkFJRDU9bQotQ09ORklHX01EX1JBSUQ2PW0KLUNPTkZJR19NRF9NVUxUSVBBVEg9bQotIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0RNPW0KLUNPTkZJR19ETV9DUllQVD1tCi1DT05GSUdfRE1fU05BUFNIT1Q9bQotQ09ORklHX0RNX01JUlJPUj1tCi1DT05GSUdfRE1fWkVSTz1tCi1DT05GSUdfRE1fTVVMVElQQVRIPW0KLUNPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKIApAQCAtMjMxLDEwICsxNzEsMTcgQEAKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQpAQCAtMjQ2LDE0NSArMTkzLDE5OSBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lQX1RDUERJQUc9bQotQ09ORklHX0lQX1RDUERJQUdfSVBWNj15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVF9MUk89bQorQ09ORklHX0lORVRfRElBRz1tCitDT05GSUdfSU5FVF9UQ1BfRElBRz1tCisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKK0NPTkZJR19JUFY2X1JPVVRFX0lORk89eQorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorIyBDT05GSUdfTkZfQ1RfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLSMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLUNPTkZJR19JUF9ORl9URlRQPW0KLUNPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQotQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVA2X05GX01BVENIX01BQz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCi1DT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0FIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCitDT05GSUdfSVBfRENDUD1tCitDT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQorQ09ORklHX0lQX0RDQ1BfQUNLVkVDPXkKIAogIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCitDT05GSUdfSVBfRENDUF9DQ0lEMj1tCisjIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDNfUlRPPTEwMAorQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9bQogQ09ORklHX0lQX1NDVFA9bQogIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogQ09ORklHX0xMQz1tCiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLUNPTkZJR19JUFg9bQotIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAogQ09ORklHX0FUQUxLPW0KICMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfUk9VVEU9eQogCkBAIC0zOTIsNDYgKzM5MywxNTUgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKLSMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVRBX09WRVJfRVRIPW0KK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfUkFJRF9BVFRSUz1tCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorQ09ORklHX1NDU0lfVEdUPW0KKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorQ09ORklHX0NIUl9ERVZfT1NTVD1tCitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KK0NPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1JQX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NSUF9UR1RfQVRUUlM9eQorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorQ09ORklHX0lTQ1NJX1RDUD1tCisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVk1FMTQ3X1NDU0k9eQorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ0NTY9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorQ09ORklHX0RNX01VTFRJUEFUSF9FTUM9bQorQ09ORklHX0RNX01VTFRJUEFUSF9SREFDPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfSFA9bQorIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAorQ09ORklHX0RNX1VFVkVOVD15CiBDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPW0KICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorQ09ORklHX01BQ1ZMQU49bQogQ09ORklHX0VRVUFMSVpFUj1tCiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworQ09ORklHX1ZFVEg9bQorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCisjIENPTkZJR19NSUkgaXMgbm90IHNldAogQ09ORklHX01WTUUxNDdfTkVUPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBXaXJlbGVzcyBMQU4KICMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTQ0MCwyOCArNTUwLDI4IEBACiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0wyVFA9bQogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19TSEFQRVI9bQogQ09ORklHX05FVENPTlNPTEU9bQotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNDcxLDcgKzU4MSw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNDg0LDExICs1OTMsMTkgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9TRVJJQUw9bQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTQ5Niw3ICs2MTMsNyBAQAogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKIENPTkZJR19TRVJJTz1tCi1DT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9bQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKQEAgLTUwNyw2ICs2MjQsNyBAQAogQ09ORklHX1ZUPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTIwLDExMiArNjM4LDgwIEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz1tCiBDT05GSUdfR0VOX1JUQ19YPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFNQSSBzdXBwb3J0CiAjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBVc2Vyc3BhY2UgSS9PCiAjCi0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTYzOCwxMCArNzI0LDExIEBACiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlM9bQogIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKQEAgLTY1MiwyNSArNzM5LDI5IEBACiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfTk9MT0NLPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KK0NPTkZJR19PQ0ZTMl9GUz1tCisjIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CisjIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUVVPVEFDVEw9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz1tCiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNjc4LDcgKzc2OSw2IEBACiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz15CiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtNjk3LDE1ICs3ODcsMTIgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLSMgQ09ORklHX0RFVkZTX01PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03MTksNDQgKzgwNiw0MCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQogQ09ORklHX0hQRlNfRlM9bQogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKLUNPTkZJR19ORlNEX1Y0PXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19TVU5SUENfQklORDM0PXkKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KIENPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQogQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotQ09ORklHX05DUF9GUz1tCi0jIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19ORlNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfT1MyX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BGU19OTFM9eQotIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09EQV9GUz1tCiAjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc2NiwxMCArODQ5LDcgQEAKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIworQ09ORklHX1NZU1Y2OF9QQVJUSVRJT049eQogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTgxMCwzNSArODkwLDQyIEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQorQ09ORklHX0RMTT1tCisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPW0KK0NPTkZJR19BU1lOQ19DT1JFPW0KK0NPTkZJR19BU1lOQ19NRU1DUFk9bQorQ09ORklHX0FTWU5DX1hPUj1tCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtODQ3LDkgKzkzNCwyMSBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiBDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTg1OCwyMCArOTU3LDM1IEBACiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWcKaW5kZXggMWQ1YzQ2Zi4uZTljY2M3NyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWcKQEAgLTEsNjMgKzEsMTExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM2LW02OGsKLSMgVHVlIEp1biAgNyAyMDozNDo1MyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM4CisjIFdlZCBBcHIgIDIgMjA6NDY6MTkgMjAwOAogIwogQ09ORklHX002OEs9eQogQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19USU1FX0xPV19SRVM9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorQ09ORklHX05PX0lPUE9SVD15CisjIENPTkZJR19OT19ETUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLW12bWUxNngiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BVURJVD15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX09QUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9CU0c9eQorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCkBAIC04NSw2ICsxMzMsMjIgQEAKIENPTkZJR19NTVVfTU9UT1JPTEE9eQogIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAogIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfTk9ERVNfU0hJRlQ9MworQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC05MywxMzQgKzE1NywxMSBAQAogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfUFJPQ19IQVJEV0FSRT15CitDT05GSUdfWk9ORV9ETUE9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPW0KLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci1DT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQotQ09ORklHX0NIUl9ERVZfU0c9bQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotQ09ORklHX0RNX01VTFRJUEFUSF9FTUM9bQotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQogCkBAIC0yMzAsMTAgKzE3MSwxNyBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CkBAIC0yNDUsMTQ1ICsxOTMsMTk5IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSVBfVENQRElBRz1tCi1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIworQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCitDT05GSUdfSVBfRENDUF9BQ0tWRUM9eQogCiAjCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKK0NPTkZJR19JUF9EQ0NQX0NDSUQyPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCiBDT05GSUdfSVBfU0NUUD1tCiAjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotQ09ORklHX0lQWD1tCi0jIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBTEs9bQogIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19ST1VURT15CiAKQEAgLTM5MSw0NiArMzkzLDE1NiBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfT1ZFUl9FVEg9bQorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CitDT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorQ09ORklHX1NDU0lfU0FTX0hPU1RfU01QPXkKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUlBfQVRUUlM9bQorQ09ORklHX1NDU0lfU1JQX1RHVF9BVFRSUz15CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CitDT05GSUdfSVNDU0lfVENQPW0KK0NPTkZJR181M0M3MDBfQkVfQlVTPXkKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01WTUUxNnhfU0NTST15CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fTVVMVElQQVRIX0VNQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX1JEQUM9bQorQ09ORklHX0RNX01VTFRJUEFUSF9IUD1tCisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CitDT05GSUdfRE1fVUVWRU5UPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfTUFDVkxBTj1tCiBDT05GSUdfRVFVQUxJWkVSPW0KICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCitDT05GSUdfVkVUSD1tCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfTVZNRTE2eF9ORVQ9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldApAQCAtNDM5LDI4ICs1NTEsMjggQEAKIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPTDJUUD1tCiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotQ09ORklHX1NIQVBFUj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCi0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKK0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC00NzAsNyArNTgyLDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC00ODMsMTEgKzU5NCwxOSBAQAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD1tCiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNDk1LDcgKzYxNCw3IEBACiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwogQ09ORklHX1NFUklPPW0KLUNPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj1tCiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldApAQCAtNTA2LDYgKzYyNSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01MTksMTE2ICs2MzksODUgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPW0KIENPTkZJR19HRU5fUlRDX1g9eQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLQotIwotIyBJMkMgc3VwcG9ydAotIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgU1BJIHN1cHBvcnQKICMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TT0ZUX0NVUlNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIworQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9bQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURSQVc9eQorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIFVzZXJzcGFjZSBJL08KICMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIworQ09ORklHX1NFUklBTDE2Nz15CiBDT05GSUdfTVZNRTE2Ml9TQ0M9eQogQ09ORklHX1NFUklBTF9DT05TT0xFPXkKIApAQCAtNjM3LDEwICs3MjYsMTEgQEAKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz1tCiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldApAQCAtNjUxLDI1ICs3NDEsMjkgQEAKICMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLQotIwotIyBYRlMgc3VwcG9ydAotIwogQ09ORklHX1hGU19GUz1tCi1DT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19NSU5JWF9GUz15Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorQ09ORklHX0dGUzJfRlM9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19OT0xPQ0s9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09bQorQ09ORklHX09DRlMyX0ZTPW0KKyMgQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0cgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQorQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKKyMgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiAjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19GVVNFX0ZTPW0KIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC02NzcsNyArNzcxLDYgQEAKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfWklTT0ZTX0ZTPXkKIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC02OTYsMTUgKzc4OSwxMiBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfREVWRlNfRlM9eQotIyBDT05GSUdfREVWRlNfTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTcxOCw0NCArODA4LDQwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CiBDT05GSUdfSFBGU19GUz1tCiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZfRlM9bQogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19CSU5EMzQ9eQogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CiBDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkNQX0ZTPW0KLSMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05MUz15Ci0jIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DT0RBX0ZTPW0KICMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtNzY1LDEwICs4NTEsNyBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCitDT05GSUdfU1lTVjY4X1BBUlRJVElPTj15CiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtODA5LDM1ICs4OTIsNDIgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCitDT05GSUdfRExNPW0KKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fU0VRSVY9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC04NDYsOSArOTM2LDIxIEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fWFRTPW0KK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KIENPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtODU3LDIwICs5NTksMzUgQEAKIENPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fTFpPPW0KKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWcKaW5kZXggODU2MjM4Ni4uMTY1NjU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnCkBAIC0xLDYzICsxLDExMiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNi1tNjhrCi0jIFR1ZSBKdW4gIDcgMjA6MzQ6NTggMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjOAorIyBXZWQgQXByICAyIDIwOjQ2OjIwIDIwMDgKICMKIENPTkZJR19NNjhLPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfVElNRV9MT1dfUkVTPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfTk9fSU9QT1JUPXkKKyMgQ09ORklHX05PX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItcTQwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQVVESVQ9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9PUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQlNHPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cApAQCAtODAsMTAgKzEyOSwyNCBAQAogQ09ORklHX002ODA0MD15CiBDT05GSUdfTTY4MDYwPXkKIENPTkZJR19NTVVfTU9UT1JPTEE9eQotQ09ORklHX002OEtGUFVfRU1VPXkKLUNPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUM9eQotIyBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19OT0RFU19TSElGVD0zCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTkxLDE4MiArMTU0LDE1IEBACiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0hFQVJUQkVBVCBpcyBub3Qgc2V0CitDT05GSUdfSEVBUlRCRUFUPXkKIENPTkZJR19QUk9DX0hBUkRXQVJFPXkKIENPTkZJR19JU0E9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfWk9ORV9ETUE9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogCiAjCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCi1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLUNPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCi1DT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9RNDBJREU9eQotIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfQ0hSX0RFVl9TVD1tCi0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9eQotQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKLUNPTkZJR19DSFJfREVWX1NHPW0KLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODBfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgQ0QtUk9NIGRyaXZlcnMgKG5vdCBTQ1NJLCBub3QgSURFKQotIwotIyBDT05GSUdfQ0RfTk9fSURFU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotQ09ORklHX0RNX01VTFRJUEFUSF9FTUM9bQotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQogCkBAIC0yNzYsMTQgKzE3MiwxOCBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KICMgQ09ORklHX0FSUEQgaXMgbm90IHNldApAQCAtMjkxLDE0NSArMTkxLDE5OSBAQAogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lQX1RDUERJQUc9bQotQ09ORklHX0lQX1RDUERJQUdfSVBWNj15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVF9MUk89bQorQ09ORklHX0lORVRfRElBRz1tCitDT05GSUdfSU5FVF9UQ1BfRElBRz1tCisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKK0NPTkZJR19JUFY2X1JPVVRFX0lORk89eQorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorIyBDT05GSUdfTkZfQ1RfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLSMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLUNPTkZJR19JUF9ORl9URlRQPW0KLUNPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQotQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVA2X05GX01BVENIX01BQz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCi1DT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0FIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCitDT05GSUdfSVBfRENDUF9BQ0tWRUM9eQogCiAjCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKK0NPTkZJR19JUF9EQ0NQX0NDSUQyPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCitDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCiBDT05GSUdfSVBfU0NUUD1tCiAjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotQ09ORklHX0lQWD1tCi0jIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBTEs9bQogIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19ST1VURT15CiAKQEAgLTQzNywyOSArMzkxLDE5NSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19QTlAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfT1ZFUl9FVEg9bQorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUTQwSURFPXkKKworIworIyBPdGhlciBJREUgY2hpcHNldHMgc3VwcG9ydAorIworCisjCisjIE5vdGU6IG1vc3Qgb2YgdGhlc2UgYWxzbyByZXF1aXJlIHNwZWNpYWwga2VybmVsIGJvb3QgcGFyYW1ldGVycworIworIyBDT05GSUdfQkxLX0RFVl80RFJJVkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RUQzIyNzggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IVDY1NjBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUUQ2NVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1DODY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CitDT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCitDT05GSUdfU0NTSV9TUlBfVEdUX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKK0NPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUkRBQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX0hQPW0KKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9VRVZFTlQ9eQogQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT1tCiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNWTEFOPW0KIENPTkZJR19FUVVBTElaRVI9bQogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworQ09ORklHX1ZFVEg9bQogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKQEAgLTQ2OCwzMCArNTg4LDIxIEBACiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKIENPTkZJR19ORTIwMDA9bQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTUwMCwyOCArNjExLDI4IEBACiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0wyVFA9bQogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19TSEFQRVI9bQogQ09ORklHX05FVENPTlNPTEU9bQotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTMxLDcgKzY0Miw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNTQ0LDIyICs2NTQsMzIgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9TRVJJQUw9bQogIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9NNjhLX0JFRVA9bQorIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKIENPTkZJR19TRVJJTz1tCi1DT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19RNDBLQkQ9bQogQ09ORklHX1NFUklPX0xJQlBTMj1tCiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldApAQCAtNTcxLDYgKzY5MSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01ODQsMTE1ICs3MDUsMTE3IEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz1tCiBDT05GSUdfR0VOX1JUQ19YPXkKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFNQSSBzdXBwb3J0CiAjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiBDT05GSUdfRkJfUTQwPXkKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKIENPTkZJR19MT0dPX0xJTlVYX01PTk89eQogQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCi1DT05GSUdfU09VTkQ9eQotQ09ORklHX0RNQVNPVU5EX1E0MD15Ci1DT05GSUdfRE1BU09VTkQ9eQotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKK0NPTkZJR19TT1VORD1tCitDT05GSUdfRE1BU09VTkRfUTQwPW0KK0NPTkZJR19ETUFTT1VORD1tCitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0hJRFJBVz15CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMgVXNlcnNwYWNlIEkvTwogIwotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCkBAIC03MDMsMTAgKzgyNiwxMSBAQAogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1JFSVNFUkZTX0ZTPW0KICMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CkBAIC03MTcsMjUgKzg0MSwyOSBAQAogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCiBDT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19YRlNfRVhQT1JUPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX01JTklYX0ZTPXkKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CitDT05GSUdfR0ZTMl9GUz1tCitDT05GSUdfR0ZTMl9GU19MT0NLSU5HX05PTE9DSz1tCitDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTT1tCitDT05GSUdfT0NGUzJfRlM9bQorIyBDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CitDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQorIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAogQ09ORklHX1FVT1RBQ1RMPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQorQ09ORklHX0ZVU0VfRlM9bQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTc0Myw3ICs4NzEsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9eQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTc2MiwxMyArODg5LDEyIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03ODIsNDQgKzkwOCwzOSBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQogQ09ORklHX0hQRlNfRlM9bQogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQotQ09ORklHX1VGU19GU19XUklURT15Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19CSU5EMzQ9eQogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CiBDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkNQX0ZTPW0KLSMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05MUz15Ci0jIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DT0RBX0ZTPW0KICMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtODI5LDEwICs5NTAsNiBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtODczLDM1ICs5OTAsNDIgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCitDT05GSUdfRExNPW0KKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fU0VRSVY9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC05MTAsOSArMTAzNCwyMSBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiBDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTkyMSwyMCArMTA1NywzNSBAQAogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fU0VFRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19MWk89bQorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj1tCisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnCmluZGV4IGFmOTAzYjUuLmJkMmI5YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnCkBAIC0xLDYzICsxLDExMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNi1tNjhrCi0jIFR1ZSBKdW4gIDcgMjA6MzU6MDIgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjOAorIyBXZWQgQXByICAyIDIwOjQ2OjIyIDIwMDgKICMKIENPTkZJR19NNjhLPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfVElNRV9MT1dfUkVTPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX05PX0RNQT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItc3VuMyIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FVRElUPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfT1BST0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0JTRz15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKQEAgLTY5LDEwICsxMTcsMjQgQEAKICMKIENPTkZJR19NNjgwMjA9eQogQ09ORklHX01NVV9TVU4zPXkKLUNPTkZJR19NNjhLRlBVX0VNVT15Ci1DT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKLSMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfTTY4S0ZQVV9FTVUgaXMgbm90IHNldAogIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1NJTkdMRV9NRU1PUllfQ0hVTks9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTgxLDEzNCArMTQzLDExIEBACiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19QUk9DX0hBUkRXQVJFPXkKK0NPTkZJR19aT05FX0RNQT15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAKICMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQotQ09ORklHX0JMS19ERVZfTkJEPW0KLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15Ci1DT05GSUdfQ0hSX0RFVl9TRz1tCi0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPW0KLUNPTkZJR19NRF9MSU5FQVI9bQotQ09ORklHX01EX1JBSUQwPW0KLUNPTkZJR19NRF9SQUlEMT1tCi0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAotQ09ORklHX01EX1JBSUQ1PW0KLUNPTkZJR19NRF9SQUlENj1tCi1DT05GSUdfTURfTVVMVElQQVRIPW0KLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9ETT1tCi1DT05GSUdfRE1fQ1JZUFQ9bQotQ09ORklHX0RNX1NOQVBTSE9UPW0KLUNPTkZJR19ETV9NSVJST1I9bQotQ09ORklHX0RNX1pFUk89bQotQ09ORklHX0RNX01VTFRJUEFUSD1tCi1DT05GSUdfRE1fTVVMVElQQVRIX0VNQz1tCi0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CiAKQEAgLTIxOCwxMCArMTU3LDE3IEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKQEAgLTIzMywxNDUgKzE3OSwxOTkgQEAKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JUF9UQ1BESUFHPW0KLUNPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVRfTFJPPW0KK0NPTkZJR19JTkVUX0RJQUc9bQorQ09ORklHX0lORVRfVENQX0RJQUc9bQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CitDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT049bQorQ09ORklHX0lQVjZfU0lUPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KKyMgQ09ORklHX05GX0NUX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9bQotQ09ORklHX0lQX05GX0lSQz1tCi1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KLSMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfUkFXPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogCiAjCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVA2X05GX01BVENIX01BUks9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUD1tCitDT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQorQ09ORklHX0lQX0RDQ1BfQUNLVkVDPXkKIAogIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCitDT05GSUdfSVBfRENDUF9DQ0lEMj1tCisjIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzPW0KKyMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1BfQ0NJRDNfUlRPPTEwMAorQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9bQogQ09ORklHX0lQX1NDVFA9bQogIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogQ09ORklHX0xMQz1tCiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLUNPTkZJR19JUFg9bQotIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAogQ09ORklHX0FUQUxLPW0KICMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfUk9VVEU9eQogCkBAIC0zNzksNDcgKzM3OSwxNTYgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKLSMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVRBX09WRVJfRVRIPW0KK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfUkFJRF9BVFRSUz1tCitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorQ09ORklHX1NDU0lfU0FTX0hPU1RfU01QPXkKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUlBfQVRUUlM9bQorQ09ORklHX1NDU0lfU1JQX1RHVF9BVFRSUz15CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CitDT05GSUdfSVNDU0lfVENQPW0KKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NVTjNfU0NTST15CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fTVVMVElQQVRIX0VNQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX1JEQUM9bQorQ09ORklHX0RNX01VTFRJUEFUSF9IUD1tCisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CitDT05GSUdfRE1fVUVWRU5UPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfTUFDVkxBTj1tCiBDT05GSUdfRVFVQUxJWkVSPW0KICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCitDT05GSUdfVkVUSD1tCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfU1VOM0xBTkNFPXkKIENPTkZJR19TVU4zXzgyNTg2PXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBXaXJlbGVzcyBMQU4KICMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTQyOCwyOCArNTM3LDI4IEBACiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0wyVFA9bQogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19TSEFQRVI9bQogQ09ORklHX05FVENPTlNPTEU9bQotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNDU5LDcgKzU2OCw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNDcyLDExICs1ODAsMTkgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKIENPTkZJR19NT1VTRV9TRVJJQUw9bQogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTQ4NCw3ICs2MDAsNyBAQAogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKIENPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9bQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKQEAgLTQ5NSw2ICs2MTEsNyBAQAogQ09ORklHX1ZUPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTA4LDExMiArNjI1LDExMyBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9bQogQ09ORklHX0dFTl9SVENfWD15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBTUEkgc3VwcG9ydAogIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NPRlRfQ1VSU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15CiBDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBVc2Vyc3BhY2UgSS9PCiAjCi0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTYyNCwxMCArNzQyLDExIEBACiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlM9bQogIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKQEAgLTYzOCwyNSArNzU3LDI5IEBACiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfTk9MT0NLPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KK0NPTkZJR19PQ0ZTMl9GUz1tCisjIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CisjIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUVVPVEFDVEw9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz1tCiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNjY0LDcgKzc4Nyw2IEBACiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz15CiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtNjgzLDE1ICs4MDUsMTIgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLUNPTkZJR19ERVZGU19NT1VOVD15Ci0jIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzA1LDQ0ICs4MjQsNDAgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKIENPTkZJR19IUEZTX0ZTPW0KICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLUNPTkZJR19VRlNfRlNfV1JJVEU9eQotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKLUNPTkZJR19ORlNEX1Y0PXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19TVU5SUENfQklORDM0PXkKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KIENPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQogQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotQ09ORklHX05DUF9GUz1tCi0jIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19ORlNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfT1MyX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKLUNPTkZJR19OQ1BGU19OTFM9eQotIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09EQV9GUz1tCiAjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc1MywxMCArODY4LDYgQEAKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19TVU5fUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTc5NywzNSArOTA4LDQyIEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQorQ09ORklHX0RMTT1tCisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPW0KK0NPTkZJR19BU1lOQ19DT1JFPW0KK0NPTkZJR19BU1lOQ19NRU1DUFk9bQorQ09ORklHX0FTWU5DX1hPUj1tCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtODM0LDkgKzk1MiwyMSBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiBDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTg0NSwyMCArOTc1LDM0IEBACiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZwppbmRleCA5OTcxNDNiLi5mMTgxNTRmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnCkBAIC0xLDYzICsxLDExMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjNi1tNjhrCi0jIFR1ZSBKdW4gIDcgMjA6MzU6MDYgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjOAorIyBXZWQgQXByICAyIDIwOjQ2OjIzIDIwMDgKICMKIENPTkZJR19NNjhLPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfVElNRV9MT1dfUkVTPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorIyBDT05GSUdfTk9fRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii1zdW4zeCIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FVRElUPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfT1BST0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0JTRz15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKQEAgLTgwLDEwICsxMjgsMjQgQEAKICMgQ09ORklHX002ODA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NNjgwNjAgaXMgbm90IHNldAogQ09ORklHX01NVV9NT1RPUk9MQT15Ci1DT05GSUdfTTY4S0ZQVV9FTVU9eQotQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15Ci0jIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX002OEtGUFVfRU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX05PREVTX1NISUZUPTMKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtOTIsMTM1ICsxNTQsMTEgQEAKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX1BST0NfSEFSRFdBUkU9eQorQ09ORklHX1pPTkVfRE1BPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIAogIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9OQkQ9bQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfQ0hSX0RFVl9TVD1tCi0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU1I9eQotQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKLUNPTkZJR19DSFJfREVWX1NHPW0KLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NVTjNYX0VTUD15Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi1DT05GSUdfTURfUkFJRDY9bQotQ09ORklHX01EX01VTFRJUEFUSD1tCi0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotQ09ORklHX0RNX01VTFRJUEFUSF9FTUM9bQotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQogCkBAIC0yMzAsMTAgKzE2OCwxNyBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15CkBAIC0yNDUsMTQ1ICsxOTAsMTk5IEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSVBfVENQRElBRz1tCi1DT05GSUdfSVBfVENQRElBR19JUFY2PXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIworQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9ESUFHPW0KK0NPTkZJR19JTkVUX1RDUF9ESUFHPW0KKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorQ09ORklHX0lQX0RDQ1A9bQorQ09ORklHX0lORVRfRENDUF9ESUFHPW0KK0NPTkZJR19JUF9EQ0NQX0FDS1ZFQz15CiAKICMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIworQ09ORklHX0lQX0RDQ1BfQ0NJRDI9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEMz1tCisjIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzX1JUTz0xMDAKK0NPTkZJR19JUF9EQ0NQX1RGUkNfTElCPW0KIENPTkZJR19JUF9TQ1RQPW0KICMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19MTEM9bQogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBYPW0KLSMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKIENPTkZJR19BVEFMSz1tCiAjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIApAQCAtMzkxLDQ2ICszOTAsMTU1IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15Ci0jIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMT1tCisjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCitDT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQorIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0FUQV9PVkVSX0VUSD1tCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSFJfREVWX09TU1Q9bQorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCitDT05GSUdfU0NTSV9TUlBfVEdUX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKK0NPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1VOM1hfRVNQPXkKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfRU1DPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUkRBQz1tCitDT05GSUdfRE1fTVVMVElQQVRIX0hQPW0KKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9VRVZFTlQ9eQogQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWT1tCiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNWTEFOPW0KIENPTkZJR19FUVVBTElaRVI9bQogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKK0NPTkZJR19WRVRIPW0KKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKIENPTkZJR19TVU4zTEFOQ0U9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KICMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldApAQCAtNDM5LDI4ICs1NDcsMjggQEAKIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPTDJUUD1tCiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotQ09ORklHX1NIQVBFUj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCi0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKK0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC00NzAsNyArNTc4LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC00ODMsMTEgKzU5MCwxOSBAQAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD1tCiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNDk1LDcgKzYxMCw3IEBACiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwogQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj1tCiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldApAQCAtNTA2LDYgKzYyMSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC01MTksMTEyICs2MzUsMTEzIEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz1tCiBDT05GSUdfR0VOX1JUQ19YPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFNQSSBzdXBwb3J0CiAjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKIENPTkZJR19MT0dPX0xJTlVYX01PTk89eQogQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIworQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9bQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURSQVc9eQorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIFVzZXJzcGFjZSBJL08KICMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNjM1LDEwICs3NTIsMTEgQEAKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GUz1tCiAjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldApAQCAtNjQ5LDI1ICs3NjcsMjkgQEAKICMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLQotIwotIyBYRlMgc3VwcG9ydAotIwogQ09ORklHX1hGU19GUz1tCi1DT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19NSU5JWF9GUz15Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorQ09ORklHX0dGUzJfRlM9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19OT0xPQ0s9bQorQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09bQorQ09ORklHX09DRlMyX0ZTPW0KKyMgQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0cgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiBDT05GSUdfUVVPVEE9eQorQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKKyMgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CiAjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19GVVNFX0ZTPW0KIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC02NzUsNyArNzk3LDYgQEAKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfWklTT0ZTX0ZTPXkKIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC02OTQsMTUgKzgxNSwxMiBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfREVWRlNfRlM9eQotQ09ORklHX0RFVkZTX01PVU5UPXkKLSMgQ09ORklHX0RFVkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03MTYsNDQgKzgzNCw0MCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQogQ09ORklHX0hQRlNfRlM9bQogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQotQ09ORklHX1VGU19GU19XUklURT15Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19CSU5EMzQ9eQogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CiBDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkNQX0ZTPW0KLSMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAotQ09ORklHX05DUEZTX05MUz15Ci0jIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DT0RBX0ZTPW0KICMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtNzY0LDEwICs4NzgsNiBAQAogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX1NVTl9QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtODA4LDM1ICs5MTgsNDIgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCitDT05GSUdfRExNPW0KKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fU0VRSVY9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC04NDUsOSArOTYyLDIxIEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fWFRTPW0KK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KIENPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtODU2LDIwICs5ODUsMzUgQEAKIENPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fTFpPPW0KKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkOTM1ZTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDY1NyArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmM2LW02OGsKLSMgVHVlIEp1biAgNyAyMDozNDoxNyAyMDA1Ci0jCi1DT05GSUdfTTY4Sz15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCi0jCi0jIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKLUNPTkZJR19BTUlHQT15Ci0jIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUMgaXMgbm90IHNldAotIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RNDAgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciB0eXBlCi0jCi1DT05GSUdfTTY4MDIwPXkKLUNPTkZJR19NNjgwMzA9eQotQ09ORklHX002ODA0MD15Ci0jIENPTkZJR19NNjgwNjAgaXMgbm90IHNldAotQ09ORklHX01NVV9NT1RPUk9MQT15Ci0jIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19aT1JSTz15Ci0jIENPTkZJR19BTUlHQV9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0hBUkRXQVJFPXkKLSMgQ09ORklHX1pPUlJPX05BTUVTIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLUNPTkZJR19BTUlHQV9GTE9QUFk9eQotIyBDT05GSUdfQU1JR0FfWjJSQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DRFJPTV9QS1RDRFZEPXkKLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQTMwMDBfU0NTST15Ci1DT05GSUdfQTIwOTFfU0NTST15Ci1DT05GSUdfR1ZQMTFfU0NTST15Ci0jIENPTkZJR19DWUJFUlNUT1JNX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQ1lCRVJTVE9STUlJX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxaMjA2MF9TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMWjEyMzBfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVNUTEFORV9TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX09LVEFHT05fU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfQU1JR0EgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FNSUdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0EyMjMyIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi1DT05GSUdfRkI9eQotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TT0ZUX0NVUlNPUj15Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotQ09ORklHX0ZCX0FNSUdBPXkKLUNPTkZJR19GQl9BTUlHQV9PQ1M9eQotQ09ORklHX0ZCX0FNSUdBX0VDUz15Ci1DT05GSUdfRkJfQU1JR0FfQUdBPXkKLSMgQ09ORklHX0ZCX0ZNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfQU1JR0FfQlVJTFRJTl9TRVJJQUw9eQotIyBDT05GSUdfTVVMVElGQUNFX0lJSV9UVFkgaXMgbm90IHNldAotIyBDT05GSUdfR1ZQSU9FWFQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JTklYX0ZTPXkKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9eQotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLUNPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19BTUlHQV9QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL01ha2VmaWxlIGIvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZQppbmRleCBhODA2MjA4Li43YTYyYTcxIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDcgQEAKIGV4dHJhLXkJKz0gdm1saW51eC5sZHMKIAogb2JqLXkJOj0gZW50cnkubyBwcm9jZXNzLm8gdHJhcHMubyBpbnRzLm8gc2lnbmFsLm8gcHRyYWNlLm8gbW9kdWxlLm8gXAotCSAgIHN5c19tNjhrLm8gdGltZS5vIHNlbWFwaG9yZS5vIHNldHVwLm8gbTY4a19rc3ltcy5vIGRldnJlcy5vCisJICAgc3lzX202OGsubyB0aW1lLm8gc2V0dXAubyBtNjhrX2tzeW1zLm8gZGV2cmVzLm8KIAogZGV2cmVzLXkgPSAuLi8uLi8uLi9rZXJuZWwvaXJxL2RldnJlcy5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwppbmRleCA2ZGZhM2IzLi4xOGE5YzVmIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCkBAIC03NDIsNyArNzQyLDkgQEAKIAkubG9uZyBzeXNfZXBvbGxfcHdhaXQJCS8qIDMxNSAqLwogCS5sb25nIHN5c191dGltZW5zYXQKIAkubG9uZyBzeXNfc2lnbmFsZmQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAorCS5sb25nIHN5c190aW1lcmZkX2NyZWF0ZQogCS5sb25nIHN5c19ldmVudGZkCiAJLmxvbmcgc3lzX2ZhbGxvY2F0ZQkJLyogMzIwICovCisJLmxvbmcgc3lzX3RpbWVyZmRfc2V0dGltZQorCS5sb25nIHN5c190aW1lcmZkX2dldHRpbWUKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMgYi9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYwppbmRleCA2ZmM2OWM3Li5kOTAwZTc3IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYworKysgYi9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYwpAQCAtMSw1ICsxLDQgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKIGFzbWxpbmthZ2UgbG9uZyBsb25nIF9fYXNobGRpMyAobG9uZyBsb25nLCBpbnQpOwogYXNtbGlua2FnZSBsb25nIGxvbmcgX19hc2hyZGkzIChsb25nIGxvbmcsIGludCk7CkBAIC0xNSw4ICsxNCwzIEBACiBFWFBPUlRfU1lNQk9MKF9fbHNocmRpMyk7CiBFWFBPUlRfU1lNQk9MKF9fbXVsZGkzKTsKIAotRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0woX191cF93YWtldXApOwotCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEyY2JiZi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsva2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAgR2VuZXJpYyBzZW1hcGhvcmUgY29kZS4gQnV5ZXIgYmV3YXJlLiBEbyB5b3VyIG93bgotICogc3BlY2lmaWMgY2hhbmdlcyBpbiA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KLQotI2lmbmRlZiBDT05GSUdfUk1XX0lOU05TCi1zcGlubG9ja190IHNlbWFwaG9yZV93YWtlX2xvY2s7Ci0jZW5kaWYKLQotLyoKLSAqIFNlbWFwaG9yZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgdHdvLXdheSBjb3VudGVyOgotICogVGhlICJjb3VudCIgdmFyaWFibGUgaXMgZGVjcmVtZW50ZWQgZm9yIGVhY2ggcHJvY2VzcwotICogdGhhdCB0cmllcyB0byBzbGVlcCwgd2hpbGUgdGhlICJ3YWtpbmciIHZhcmlhYmxlIGlzCi0gKiBpbmNyZW1lbnRlZCB3aGVuIHRoZSAidXAoKSIgY29kZSBnb2VzIHRvIHdha2UgdXAgd2FpdGluZwotICogcHJvY2Vzc2VzLgotICoKLSAqIE5vdGFibHksIHRoZSBpbmxpbmUgInVwKCkiIGFuZCAiZG93bigpIiBmdW5jdGlvbnMgY2FuCi0gKiBlZmZpY2llbnRseSB0ZXN0IGlmIHRoZXkgbmVlZCB0byBkbyBhbnkgZXh0cmEgd29yayAodXAKLSAqIG5lZWRzIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqIHdha2luZ19ub25femVybygpIChmcm9tIGFzbS9zZW1hcGhvcmUuaCkgbXVzdCBleGVjdXRlCi0gKiBhdG9taWNhbGx5LgotICoKLSAqIFdoZW4gX191cCgpIGlzIGNhbGxlZCwgdGhlIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIGluY3JlbWVudGluZyBpdCwgYW5kIHdlIG5lZWQgdG8gd2FrZSB1cCBzb21lYm9keS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgYWRkcyBvbmUgdG8gdGhlIGNvdW50IG9mIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8KLSAqIHdha2UgdXAgYW5kIGV4aXQuICBBTEwgd2FpdGluZyBwcm9jZXNzZXMgYWN0dWFsbHkgd2FrZSB1cCBidXQKLSAqIG9ubHkgdGhlIG9uZSB0aGF0IGdldHMgdG8gdGhlICJ3YWtpbmciIGZpZWxkIGZpcnN0IHdpbGwgZ2F0ZQotICogdGhyb3VnaCBhbmQgYWNxdWlyZSB0aGUgc2VtYXBob3JlLiAgVGhlIG90aGVycyB3aWxsIGdvIGJhY2sKLSAqIHRvIHNsZWVwLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMKLSAqIGNvbnRlbnRpb24gb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZQotICogIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUgd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUKLSAqIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbiA8YXNtL3NlbWFwaG9yZS5oPgotICogd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXdha2Vfb25lX21vcmUoc2VtKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi0vKgotICogUGVyZm9ybSB0aGUgImRvd24iIGZ1bmN0aW9uLiAgUmV0dXJuIHplcm8gZm9yIHNlbWFwaG9yZSBhY3F1aXJlZCwKLSAqIHJldHVybiBuZWdhdGl2ZSBmb3Igc2lnbmFsbGVkIG91dCBvZiB0aGUgZnVuY3Rpb24uCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duLCB0aGUgcmV0dXJuIGlzIGlnbm9yZWQgYW5kIHRoZSB3YWl0IGxvb3AgaXMKLSAqIG5vdCBpbnRlcnJ1cHRpYmxlLiAgVGhpcyBtZWFucyB0aGF0IGEgdGFzayB3YWl0aW5nIG9uIGEgc2VtYXBob3JlCi0gKiB1c2luZyAiZG93bigpIiBjYW5ub3QgYmUga2lsbGVkIHVudGlsIHNvbWVvbmUgZG9lcyBhbiAidXAoKSIgb24KLSAqIHRoZSBzZW1hcGhvcmUuCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duX2ludGVycnVwdGlibGUsIHRoZSByZXR1cm4gdmFsdWUgZ2V0cyBjaGVja2VkCi0gKiB1cG9uIHJldHVybi4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbmVnYXRpdmUgdGhlbiB0aGUgdGFzayBjb250aW51ZXMKLSAqIHdpdGggdGhlIG5lZ2F0aXZlIHZhbHVlIGluIHRoZSByZXR1cm4gcmVnaXN0ZXIgKGl0IGNhbiBiZSB0ZXN0ZWQgYnkKLSAqIHRoZSBjYWxsZXIpLgotICoKLSAqIEVpdGhlciBmb3JtIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggInVwKCkiLgotICoKLSAqLwotCi0KLSNkZWZpbmUgRE9XTl9IRUFEKHRhc2tfc3RhdGUpCQkJCQkJXAotCQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCWN1cnJlbnQtPnN0YXRlID0gKHRhc2tfc3RhdGUpOwkJCQkJXAotCWFkZF93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsJCQkJXAotCQkJCQkJCQkJXAotCS8qCQkJCQkJCQlcCi0JICogT2ssIHdlJ3JlIHNldCB1cC4gIHNlbS0+Y291bnQgaXMga25vd24gdG8gYmUgbGVzcyB0aGFuIHplcm8JXAotCSAqIHNvIHdlIG11c3Qgd2FpdC4JCQkJCQlcCi0JICoJCQkJCQkJCVwKLQkgKiBXZSBjYW4gbGV0IGdvIHRoZSBsb2NrIGZvciBwdXJwb3NlcyBvZiB3YWl0aW5nLgkJXAotCSAqIFdlIHJlLWFjcXVpcmUgaXQgYWZ0ZXIgYXdha2luZyBzbyBhcyB0byBwcm90ZWN0CQlcCi0JICogYWxsIHNlbWFwaG9yZSBvcGVyYXRpb25zLgkJCQkJXAotCSAqCQkJCQkJCQlcCi0JICogSWYgInVwKCkiIGlzIGNhbGxlZCBiZWZvcmUgd2UgY2FsbCB3YWtpbmdfbm9uX3plcm8oKSB0aGVuCVwKLQkgKiB3ZSB3aWxsIGNhdGNoIGl0IHJpZ2h0IGF3YXkuICBJZiBpdCBpcyBjYWxsZWQgbGF0ZXIgdGhlbglcCi0JICogd2Ugd2lsbCBoYXZlIHRvIGdvIHRocm91Z2ggYSB3YWtldXAgY3ljbGUgdG8gY2F0Y2ggaXQuCVwKLQkgKgkJCQkJCQkJXAotCSAqIE11bHRpcGxlIHdhaXRlcnMgY29udGVuZCBmb3IgdGhlIHNlbWFwaG9yZSBsb2NrIHRvIHNlZQlcCi0JICogd2hvIGdldHMgdG8gZ2F0ZSB0aHJvdWdoIGFuZCB3aG8gaGFzIHRvIHdhaXQgc29tZSBtb3JlLglcCi0JICovCQkJCQkJCQlcCi0JZm9yICg7OykgewotCi0jZGVmaW5lIERPV05fVEFJTCh0YXNrX3N0YXRlKQkJCVwKLQkJY3VycmVudC0+c3RhdGUgPSAodGFza19zdGF0ZSk7CVwKLQl9CQkJCQlcCi0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQlcCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCi12b2lkIF9fc2NoZWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlET1dOX0hFQUQoVEFTS19VTklOVEVSUlVQVElCTEUpCi0JaWYgKHdha2luZ19ub25femVybyhzZW0pKQotCQlicmVhazsKLQlzY2hlZHVsZSgpOwotCURPV05fVEFJTChUQVNLX1VOSU5URVJSVVBUSUJMRSkKLX0KLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlpbnQgcmV0ID0gMDsKLQotCURPV05fSEVBRChUQVNLX0lOVEVSUlVQVElCTEUpCi0KLQlyZXQgPSB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzZW0sIGN1cnJlbnQpOwotCWlmIChyZXQpCi0JewotCQlpZiAocmV0ID09IDEpCi0JCQkvKiByZXQgIT0gMCBvbmx5IGlmIHdlIGdldCBpbnRlcnJ1cHRlZCAtYXJjYSAqLwotCQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JfQotCXNjaGVkdWxlKCk7Ci0JRE9XTl9UQUlMKFRBU0tfSU5URVJSVVBUSUJMRSkKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlyZXR1cm4gd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc2VtKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvTWFrZWZpbGUgYi9hcmNoL202OGsvbGliL01ha2VmaWxlCmluZGV4IDZiYmYxOWYuLmExOGFmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL2xpYi9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKIEVYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwKIAogbGliLXkJOj0gYXNobGRpMy5vIGFzaHJkaTMubyBsc2hyZGkzLm8gbXVsZGkzLm8gXAotCSAgIGNoZWNrc3VtLm8gc3RyaW5nLm8gc2VtYXBob3JlLm8gdWFjY2Vzcy5vCisJICAgY2hlY2tzdW0ubyBzdHJpbmcubyB1YWNjZXNzLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvc2VtYXBob3JlLlMgYi9hcmNoL202OGsvbGliL3NlbWFwaG9yZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE1NjI0Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvbGliL3NlbWFwaG9yZS5TCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL202OGsvbGliL3NlbWFwaG9yZS5TCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NiAgTGludXMgVG9ydmFsZHMKLSAqCi0gKiAgbTY4ayB2ZXJzaW9uIGJ5IEFuZHJlYXMgU2Nod2FiCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0KLS8qCi0gKiBUaGUgc2VtYXBob3JlIG9wZXJhdGlvbnMgaGF2ZSBhIHNwZWNpYWwgY2FsbGluZyBzZXF1ZW5jZSB0aGF0Ci0gKiBhbGxvdyB1cyB0byBkbyBhIHNpbXBsZXIgaW4tbGluZSB2ZXJzaW9uIG9mIHRoZW0uIFRoZXNlIHJvdXRpbmVzCi0gKiBuZWVkIHRvIGNvbnZlcnQgdGhhdCBzZXF1ZW5jZSBiYWNrIGludG8gdGhlIEMgc2VxdWVuY2Ugd2hlbgotICogdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgc2VtYXBob3JlLgotICovCi1FTlRSWShfX2Rvd25fZmFpbGVkKQotCW1vdmVtbCAlYTAvJWQwLyVkMSwtKCVzcCkKLQltb3ZlbCAlYTEsLSglc3ApCi0JamJzciBfX2Rvd24KLQltb3ZlbCAoJXNwKSssJWExCi0JbW92ZW1sICglc3ApKywlYTAvJWQwLyVkMQotCXJ0cwotCi1FTlRSWShfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUpCi0JbW92ZWwgJWEwLC0oJXNwKQotCW1vdmVsICVkMSwtKCVzcCkKLQltb3ZlbCAlYTEsLSglc3ApCi0JamJzciBfX2Rvd25faW50ZXJydXB0aWJsZQotCW1vdmVsICglc3ApKywlYTEKLQltb3ZlbCAoJXNwKSssJWQxCi0JbW92ZWwgKCVzcCkrLCVhMAotCXJ0cwotCi1FTlRSWShfX2Rvd25fZmFpbGVkX3RyeWxvY2spCi0JbW92ZWwgJWEwLC0oJXNwKQotCW1vdmVsICVkMSwtKCVzcCkKLQltb3ZlbCAlYTEsLSglc3ApCi0JamJzciBfX2Rvd25fdHJ5bG9jawotCW1vdmVsICglc3ApKywlYTEKLQltb3ZlbCAoJXNwKSssJWQxCi0JbW92ZWwgKCVzcCkrLCVhMAotCXJ0cwotCi1FTlRSWShfX3VwX3dha2V1cCkKLQltb3ZlbWwgJWEwLyVkMC8lZDEsLSglc3ApCi0JbW92ZWwgJWExLC0oJXNwKQotCWpic3IgX191cAotCW1vdmVsICglc3ApKywlYTEKLQltb3ZlbWwgKCVzcCkrLCVhMC8lZDAvJWQxCi0JcnRzCi0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2ludGVyc2lsLmMgYi9hcmNoL202OGsvc3VuMy9pbnRlcnNpbC5jCmluZGV4IGRiMzU5ZDcuLjAxMTZkMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL2ludGVyc2lsLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvaW50ZXJzaWwuYwpAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CiAjaW5jbHVkZSA8YXNtL2ludGVyc2lsLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2RlZmNvbmZpZyBiL2FyY2gvbTY4a25vbW11L2RlZmNvbmZpZwppbmRleCA2NDgxMTMwLi42NzBiMGE5IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIFRodSBPY3QgMTggMTM6MTc6MzggMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMworIyBNb24gRmViIDI1IDE1OjAzOjAwIDIwMDgKICMKIENPTkZJR19NNjhLPXkKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CkBAIC0xNSw4ICsxNSwxMCBAQAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfVElNRV9MT1dfUkVTPXkKIENPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0zMSwxMiArMzMsMTQgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTQ4LDE1ICs1MiwyMiBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJR05BTEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSRkQgaXMgbm90IHNldAogIyBDT05GSUdfRVZFTlRGRCBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9PUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKQEAgLTgzLDYgKzk0LDggQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCkBAIC0xMjEsNiArMTM0LDcgQEAKICMgQ09ORklHX01PRDUyNzIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVTQ0FMRT15CiBDT05GSUdfNEtTVEFDS1M9eQorQ09ORklHX0haPTEwMAogCiAjCiAjIFJBTSBjb25maWd1cmF0aW9uCkBAIC0xNDcsNiArMTYxLDcgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKQEAgLTE1OSwxMCArMTc0LDYgQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIAogIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0KLSMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRkxBVD15CkBAIC0yMDUsNiArMjE2LDcgQEAKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKQEAgLTIyOSwxMCArMjQxLDYgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKIAogIwpAQCAtMjQwLDYgKzI0OCw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTI4Myw2ICsyOTIsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTMzOSwxMCArMzQ5LDExIEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtMzYwLDkgKzM3MSwxNSBAQAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogQ09ORklHX0ZFQz15CiAjIENPTkZJR19GRUMyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKQEAgLTM3Nyw3ICszOTQsNyBAQAogQ09ORklHX1BQUD15CiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9eQogIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKQEAgLTM4Niw3ICs0MDMsNiBAQAogIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz15Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNDE4LDEyICs0MzQsMTYgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotQ09ORklHX1NFUklBTF9DT0xERklSRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0NPTERGSVJFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfTUNGPXkKK0NPTkZJR19TRVJJQUxfTUNGX0JBVURSQVRFPTE5MjAwCitDT05GSUdfU0VSSUFMX01DRl9DT05TT0xFPXkKICMgQ09ORklHX1VOSVg5OF9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CkBAIC00MzksNiArNDU5LDE0IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtNDUwLDIwICs0NzgsMjAgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNDcxLDIzICs0OTksMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCiAjIFVzZXJzcGFjZSBJL08KICMKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CkBAIC01MDUsMTEgKzUyMSw5IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC01MzUsNyArNTQ5LDYgQEAKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNTUxLDQyICs1NjQsMjcgQEAKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKQEAgLTU5NCw2ICs1OTIsNyBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVTExERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIUFJPRklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UUEFSQU0gaXMgbm90IHNldApAQCAtNjA1LDYgKzYwNCw3IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9NYWtlZmlsZQppbmRleCAxNTI0YjM5Li5mMGVhYjNkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogZXh0cmEteSA6PSB2bWxpbnV4LmxkcwogCiBvYmoteSArPSBkbWEubyBlbnRyeS5vIGluaXRfdGFzay5vIGlycS5vIG02OGtfa3N5bXMubyBwcm9jZXNzLm8gcHRyYWNlLm8gXAotCSBzZW1hcGhvcmUubyBzZXR1cC5vIHNpZ25hbC5vIHN5c2NhbGx0YWJsZS5vIHN5c19tNjhrLm8gdGltZS5vIHRyYXBzLm8KKwkgc2V0dXAubyBzaWduYWwubyBzeXNjYWxsdGFibGUubyBzeXNfbTY4ay5vIHRpbWUubyB0cmFwcy5vCiAKIG9iai0kKENPTkZJR19NT0RVTEVTKQkrPSBtb2R1bGUubwogb2JqLSQoQ09ORklHX0NPTUVNUENJKQkrPSBjb21lbXBjaS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYwppbmRleCA1M2ZhZDE0Li4zOWZlMGE3IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9tNjhrX2tzeW1zLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KIApAQCAtMzksMTEgKzM4LDYgQEAKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIAotRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0woX191cF93YWtldXApOwotCiAvKgogICogbGliZ2NjIGZ1bmN0aW9ucyAtIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHkgYnkgdGhlCiAgKiBjb21waWxlci4uLiAgKHByb3RvdHlwZXMgYXJlIG5vdCBjb3JyZWN0IHRob3VnaCwgYnV0IHRoYXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlMmJjNy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqICBHZW5lcmljIHNlbWFwaG9yZSBjb2RlLiBCdXllciBiZXdhcmUuIERvIHlvdXIgb3duCi0gKiBzcGVjaWZpYyBjaGFuZ2VzIGluIDxhc20vc2VtYXBob3JlLWhlbHBlci5oPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLWhlbHBlci5oPgotCi0jaWZuZGVmIENPTkZJR19STVdfSU5TTlMKLXNwaW5sb2NrX3Qgc2VtYXBob3JlX3dha2VfbG9jazsKLSNlbmRpZgotCi0vKgotICogU2VtYXBob3JlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0d28td2F5IGNvdW50ZXI6Ci0gKiBUaGUgImNvdW50IiB2YXJpYWJsZSBpcyBkZWNyZW1lbnRlZCBmb3IgZWFjaCBwcm9jZXNzCi0gKiB0aGF0IHRyaWVzIHRvIHNsZWVwLCB3aGlsZSB0aGUgIndha2luZyIgdmFyaWFibGUgaXMKLSAqIGluY3JlbWVudGVkIHdoZW4gdGhlICJ1cCgpIiBjb2RlIGdvZXMgdG8gd2FrZSB1cCB3YWl0aW5nCi0gKiBwcm9jZXNzZXMuCi0gKgotICogTm90YWJseSwgdGhlIGlubGluZSAidXAoKSIgYW5kICJkb3duKCkiIGZ1bmN0aW9ucyBjYW4KLSAqIGVmZmljaWVudGx5IHRlc3QgaWYgdGhleSBuZWVkIHRvIGRvIGFueSBleHRyYSB3b3JrICh1cAotICogbmVlZHMgdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQotICogdGhlIGluY3JlbWVudCBvcGVyYXRpb24uCi0gKgotICogd2FraW5nX25vbl96ZXJvKCkgKGZyb20gYXNtL3NlbWFwaG9yZS5oKSBtdXN0IGV4ZWN1dGUKLSAqIGF0b21pY2FsbHkuCi0gKgotICogV2hlbiBfX3VwKCkgaXMgY2FsbGVkLCB0aGUgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQotICogaW5jcmVtZW50aW5nIGl0LCBhbmQgd2UgbmVlZCB0byB3YWtlIHVwIHNvbWVib2R5LgotICoKLSAqIFRoaXMgcm91dGluZSBhZGRzIG9uZSB0byB0aGUgY291bnQgb2YgcHJvY2Vzc2VzIHRoYXQgbmVlZCB0bwotICogd2FrZSB1cCBhbmQgZXhpdC4gIEFMTCB3YWl0aW5nIHByb2Nlc3NlcyBhY3R1YWxseSB3YWtlIHVwIGJ1dAotICogb25seSB0aGUgb25lIHRoYXQgZ2V0cyB0byB0aGUgIndha2luZyIgZmllbGQgZmlyc3Qgd2lsbCBnYXRlCi0gKiB0aHJvdWdoIGFuZCBhY3F1aXJlIHRoZSBzZW1hcGhvcmUuICBUaGUgb3RoZXJzIHdpbGwgZ28gYmFjawotICogdG8gc2xlZXAuCi0gKgotICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcwotICogY29udGVudGlvbiBvbiB0aGUgbG9jaywgYW5kIGFzIHN1Y2ggYWxsIHRoaXMgaXMgdGhlCi0gKiAibm9uLWNyaXRpY2FsIiBwYXJ0IG9mIHRoZSB3aG9sZSBzZW1hcGhvcmUgYnVzaW5lc3MuIFRoZQotICogY3JpdGljYWwgcGFydCBpcyB0aGUgaW5saW5lIHN0dWZmIGluIDxhc20vc2VtYXBob3JlLmg+Ci0gKiB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkIGFueSBleHRyYSBqdW1wcyBhbmQgY2FsbHMuCi0gKi8KLXZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jd2FrZV9vbmVfbW9yZShzZW0pOwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIHRoZSAiZG93biIgZnVuY3Rpb24uICBSZXR1cm4gemVybyBmb3Igc2VtYXBob3JlIGFjcXVpcmVkLAotICogcmV0dXJuIG5lZ2F0aXZlIGZvciBzaWduYWxsZWQgb3V0IG9mIHRoZSBmdW5jdGlvbi4KLSAqCi0gKiBJZiBjYWxsZWQgZnJvbSBfX2Rvd24sIHRoZSByZXR1cm4gaXMgaWdub3JlZCBhbmQgdGhlIHdhaXQgbG9vcCBpcwotICogbm90IGludGVycnVwdGlibGUuICBUaGlzIG1lYW5zIHRoYXQgYSB0YXNrIHdhaXRpbmcgb24gYSBzZW1hcGhvcmUKLSAqIHVzaW5nICJkb3duKCkiIGNhbm5vdCBiZSBraWxsZWQgdW50aWwgc29tZW9uZSBkb2VzIGFuICJ1cCgpIiBvbgotICogdGhlIHNlbWFwaG9yZS4KLSAqCi0gKiBJZiBjYWxsZWQgZnJvbSBfX2Rvd25faW50ZXJydXB0aWJsZSwgdGhlIHJldHVybiB2YWx1ZSBnZXRzIGNoZWNrZWQKLSAqIHVwb24gcmV0dXJuLiAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBuZWdhdGl2ZSB0aGVuIHRoZSB0YXNrIGNvbnRpbnVlcwotICogd2l0aCB0aGUgbmVnYXRpdmUgdmFsdWUgaW4gdGhlIHJldHVybiByZWdpc3RlciAoaXQgY2FuIGJlIHRlc3RlZCBieQotICogdGhlIGNhbGxlcikuCi0gKgotICogRWl0aGVyIGZvcm0gbWF5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAidXAoKSIuCi0gKgotICovCi0KLQotI2RlZmluZSBET1dOX0hFQUQodGFza19zdGF0ZSkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JY3VycmVudC0+c3RhdGUgPSAodGFza19zdGF0ZSk7CQkJCQlcCi0JYWRkX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwkJCQlcCi0JCQkJCQkJCQlcCi0JLyoJCQkJCQkJCVwKLQkgKiBPaywgd2UncmUgc2V0IHVwLiAgc2VtLT5jb3VudCBpcyBrbm93biB0byBiZSBsZXNzIHRoYW4gemVybwlcCi0JICogc28gd2UgbXVzdCB3YWl0LgkJCQkJCVwKLQkgKgkJCQkJCQkJXAotCSAqIFdlIGNhbiBsZXQgZ28gdGhlIGxvY2sgZm9yIHB1cnBvc2VzIG9mIHdhaXRpbmcuCQlcCi0JICogV2UgcmUtYWNxdWlyZSBpdCBhZnRlciBhd2FraW5nIHNvIGFzIHRvIHByb3RlY3QJCVwKLQkgKiBhbGwgc2VtYXBob3JlIG9wZXJhdGlvbnMuCQkJCQlcCi0JICoJCQkJCQkJCVwKLQkgKiBJZiAidXAoKSIgaXMgY2FsbGVkIGJlZm9yZSB3ZSBjYWxsIHdha2luZ19ub25femVybygpIHRoZW4JXAotCSAqIHdlIHdpbGwgY2F0Y2ggaXQgcmlnaHQgYXdheS4gIElmIGl0IGlzIGNhbGxlZCBsYXRlciB0aGVuCVwKLQkgKiB3ZSB3aWxsIGhhdmUgdG8gZ28gdGhyb3VnaCBhIHdha2V1cCBjeWNsZSB0byBjYXRjaCBpdC4JXAotCSAqCQkJCQkJCQlcCi0JICogTXVsdGlwbGUgd2FpdGVycyBjb250ZW5kIGZvciB0aGUgc2VtYXBob3JlIGxvY2sgdG8gc2VlCVwKLQkgKiB3aG8gZ2V0cyB0byBnYXRlIHRocm91Z2ggYW5kIHdobyBoYXMgdG8gd2FpdCBzb21lIG1vcmUuCVwKLQkgKi8JCQkJCQkJCVwKLQlmb3IgKDs7KSB7Ci0KLSNkZWZpbmUgRE9XTl9UQUlMKHRhc2tfc3RhdGUpCQkJXAotCQljdXJyZW50LT5zdGF0ZSA9ICh0YXNrX3N0YXRlKTsJXAotCX0JCQkJCVwKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCVwKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLXZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCURPV05fSEVBRChUQVNLX1VOSU5URVJSVVBUSUJMRSkKLQlpZiAod2FraW5nX25vbl96ZXJvKHNlbSkpCi0JCWJyZWFrOwotCXNjaGVkdWxlKCk7Ci0JRE9XTl9UQUlMKFRBU0tfVU5JTlRFUlJVUFRJQkxFKQotfQotCi1pbnQgX19zY2hlZCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCWludCByZXQgPSAwOwotCi0JRE9XTl9IRUFEKFRBU0tfSU5URVJSVVBUSUJMRSkKLQotCXJldCA9IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHNlbSwgY3VycmVudCk7Ci0JaWYgKHJldCkKLQl7Ci0JCWlmIChyZXQgPT0gMSkKLQkJCS8qIHJldCAhPSAwIG9ubHkgaWYgd2UgZ2V0IGludGVycnVwdGVkIC1hcmNhICovCi0JCQlyZXQgPSAwOwotCQlicmVhazsKLQl9Ci0Jc2NoZWR1bGUoKTsKLQlET1dOX1RBSUwoVEFTS19JTlRFUlJVUFRJQkxFKQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJldHVybiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzZW0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDFiMDJiODguLmZjYTJlNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTMzNiw5ICszMzYsMTEgQEAKIAkubG9uZyBzeXNfZXBvbGxfcHdhaXQJCS8qIDMxNSAqLwogCS5sb25nIHN5c191dGltZW5zYXQKIAkubG9uZyBzeXNfc2lnbmFsZmQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAorCS5sb25nIHN5c190aW1lcmZkX2NyZWF0ZQogCS5sb25nIHN5c19ldmVudGZkCiAJLmxvbmcgc3lzX2ZhbGxvY2F0ZQkJLyogMzIwICovCisJLmxvbmcgc3lzX3RpbWVyZmRfc2V0dGltZQorCS5sb25nIHN5c190aW1lcmZkX2dldHRpbWUKIAogCS5yZXB0IE5SX3N5c2NhbGxzLSguLXN5c19jYWxsX3RhYmxlKS80CiAJCS5sb25nIHN5c19uaV9zeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9saWIvTWFrZWZpbGUgYi9hcmNoL202OGtub21tdS9saWIvTWFrZWZpbGUKaW5kZXggZTA1MWE3OS4uZDk0ZDcwOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4a25vbW11L2xpYi9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogbGliLXkJOj0gYXNobGRpMy5vIGFzaHJkaTMubyBsc2hyZGkzLm8gXAogCSAgIG11bGRpMy5vIG11bHNpMy5vIGRpdnNpMy5vIHVkaXZzaTMubyBtb2RzaTMubyB1bW9kc2kzLm8gXAotCSAgIGNoZWNrc3VtLm8gc2VtYXBob3JlLm8gbWVtY3B5Lm8gbWVtc2V0Lm8gZGVsYXkubworCSAgIGNoZWNrc3VtLm8gbWVtY3B5Lm8gbWVtc2V0Lm8gZGVsYXkubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbGliL3NlbWFwaG9yZS5TIGIvYXJjaC9tNjhrbm9tbXUvbGliL3NlbWFwaG9yZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2M3NDYwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4a25vbW11L2xpYi9zZW1hcGhvcmUuUworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTYgIExpbnVzIFRvcnZhbGRzCi0gKgotICogIG02OGsgdmVyc2lvbiBieSBBbmRyZWFzIFNjaHdhYgotICoKLSAqICBNQVIvMTk5OSAtLSBtb2RpZmllZCB0byBzdXBwb3J0IENvbGRGaXJlIChnZXJnQHNuYXBnZWFyLmNvbSkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLQotLyoKLSAqICJkb3duX2ZhaWxlZCIgaXMgY2FsbGVkIHdpdGggdGhlIGV2ZW50dWFsIHJldHVybiBhZGRyZXNzCi0gKiBpbiAlYTAsIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgc2VtYXBob3JlIGluICVhMS4gV2UgbmVlZAotICogdG8gaW5jcmVtZW50IHRoZSBudW1iZXIgb2Ygd2FpdGVycyBvbiB0aGUgc2VtYXBob3JlLAotICogY2FsbCAiX19kb3duKCkiLCBhbmQgdGhlbiBldmVudHVhbGx5IHJldHVybiB0byB0cnkgYWdhaW4uCi0gKi8KLUVOVFJZKF9fZG93bl9mYWlsZWQpCi0jaWZkZWYgQ09ORklHX0NPTERGSVJFCi0Jc3VibCAjMTIsJXNwCi0JbW92ZW1sICVhMC8lZDAvJWQxLCglc3ApCi0jZWxzZQotCW1vdmVtbCAlYTAvJWQwLyVkMSwtKCVzcCkKLSNlbmRpZgotCW1vdmVsICVhMSwtKCVzcCkKLQlqYnNyIF9fZG93bgotCW1vdmVsICglc3ApKywlYTEKLQltb3ZlbCAoJXNwKSssJWQwCi0JbW92ZWwgKCVzcCkrLCVkMQotCXJ0cwotCi1FTlRSWShfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUpCi0JbW92ZWwgJWEwLC0oJXNwKQotCW1vdmVsICVkMSwtKCVzcCkKLQltb3ZlbCAlYTEsLSglc3ApCi0JamJzciBfX2Rvd25faW50ZXJydXB0aWJsZQotCW1vdmVsICglc3ApKywlYTEKLQltb3ZlbCAoJXNwKSssJWQxCi0JcnRzCi0KLUVOVFJZKF9fdXBfd2FrZXVwKQotI2lmZGVmIENPTkZJR19DT0xERklSRQotCXN1YmwgIzEyLCVzcAotCW1vdmVtbCAlYTAvJWQwLyVkMSwoJXNwKQotI2Vsc2UKLQltb3ZlbWwgJWEwLyVkMC8lZDEsLSglc3ApCi0jZW5kaWYKLQltb3ZlbCAlYTEsLSglc3ApCi0JamJzciBfX3VwCi0JbW92ZWwgKCVzcCkrLCVhMQotCW1vdmVsICglc3ApKywlZDAKLQltb3ZlbCAoJXNwKSssJWQxCi0JcnRzCi0KLUVOVFJZKF9fZG93bl9mYWlsZWRfdHJ5bG9jaykKLQltb3ZlbCAlYTAsLSglc3ApCi0JbW92ZWwgJWQxLC0oJXNwKQotCW1vdmVsICVhMSwtKCVzcCkKLQlqYnNyIF9fZG93bl90cnlsb2NrCi0JbW92ZWwgKCVzcCkrLCVhMQotCW1vdmVsICglc3ApKywlZDEKLQltb3ZlbCAoJXNwKSssJWEwCi0JcnRzCi0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L3RpbWVycy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvdGltZXJzLmMKaW5kZXggOTE1OWZkMC4uNmJhZmVmYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvdGltZXJzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvdGltZXJzLmMKQEAgLTY3LDE2ICs2Nyw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBod190aWNrKGludCBpcnEsIHZvaWQgKmR1bW15KQotewotCS8qIFJlc2V0IFRpbWVyMSAqLwotCVRTVEFUICY9IDA7Ci0KLQlyZXR1cm4gYXJjaF90aW1lcl9pbnRlcnJ1cHQoaXJxLCBkdW1teSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG02ODMyOF90aW1lcl9pcnEgPSB7CiAJLm5hbWUJID0gInRpbWVyIiwKIAkuZmxhZ3MJID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGFkZTIzMGQuLjg3MjRlZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xODI0LDcgKzE4MjQsNyBAQAogCSBBbGxvd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRpbWVyIGZyZXF1ZW5jeS4KIAogCWNvbmZpZyBIWl80OAotCQlib29sICI0OCBIWiIgaWYgU1lTX1NVUFBPUlRTXzQ4SFoKKwkJYm9vbCAiNDggSFoiIGlmIFNZU19TVVBQT1JUU180OEhaIHx8IFNZU19TVVBQT1JUU19BUkJJVF9IWgogCiAJY29uZmlnIEhaXzEwMAogCQlib29sICIxMDAgSFoiIGlmIFNZU19TVVBQT1JUU18xMDBIWiB8fCBTWVNfU1VQUE9SVFNfQVJCSVRfSFoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCAzZmI3ZjMwLi4xYzYyMzgxZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMTIsNiArMTIsOCBAQAogIyBmb3IgImFyY2hjbGVhbiIgY2xlYW5pbmcgdXAgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogIwogCitLQlVJTERfREVGQ09ORklHIDo9IGlwMjJfZGVmY29uZmlnCisKIGNmbGFncy15IDo9CiAKICMKQEAgLTQ4MCwxMCArNDgyLDEzIEBACiAjIGJlIDE2a2IgYWxpZ25lZCBvciB0aGUgaGFuZGxpbmcgb2YgdGhlIGN1cnJlbnQgdmFyaWFibGUgd2lsbCBicmVhay4KICMgU2ltcGxpZmllZDogd2hhdCBJUDIyIGRvZXMgYXQgMTI4TUIrIGluIGtzZWdOLCBJUDI4IGRvZXMgYXQgNTEyTUIrIGluIHhrcGh5cwogIwotI2NvcmUtJChDT05GSUdfU0dJX0lQMjgpCQkrPSBhcmNoL21pcHMvc2dpLWlwMjIvIGFyY2gvbWlwcy9hcmMvYXJjX2Nvbi5vCitpZmRlZiBDT05GSUdfU0dJX0lQMjgKKyAgaWZlcSAoJChjYWxsIGNjLW9wdGlvbi15biwtbXIxMGstY2FjaGUtYmFycmllcj0xKSwgbikKKyAgICAgICQoZXJyb3IgZ2NjIGRvZXNuJ3Qgc3VwcG9ydCBuZWVkZWQgb3B0aW9uIC1tcjEway1jYWNoZS1iYXJyaWVyPTEpCisgIGVuZGlmCitlbmRpZgogY29yZS0kKENPTkZJR19TR0lfSVAyOCkJCSs9IGFyY2gvbWlwcy9zZ2ktaXAyMi8KIGNmbGFncy0kKENPTkZJR19TR0lfSVAyOCkJKz0gLW1yMTBrLWNhY2hlLWJhcnJpZXI9MSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI4Ci0jY2ZsYWdzLSQoQ09ORklHX1NHSV9JUDI4KQkrPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI4CiBsb2FkLSQoQ09ORklHX1NHSV9JUDI4KQkJKz0gMHhhODAwMDAwMDIwMDA0MDAwCiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2NwdXRhYmxlLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jcHV0YWJsZS5jCmluZGV4IGQ4ZGY1ZmQuLjVjMGQzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vY3B1dGFibGUuYwpAQCAtMjIsMjQgKzIyLDI0IEBACiAvKiBXaXRoIHNvbWUgdGhvdWdodCwgd2UgY2FuIHByb2JhYmx5IHVzZSB0aGUgbWFzayB0byByZWR1Y2UgdGhlCiAgKiBzaXplIG9mIHRoZSB0YWJsZS4KICAqLwotc3RydWN0IGNwdV9zcGVjCWNwdV9zcGVjc1tdID0gewotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDAzMDEwMCwgIkF1MTAwMCBEQSIsIDEsIDAgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAwMzAyMDEsICJBdTEwMDAgSEEiLCAxLCAwIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAwMDMwMjAyLCAiQXUxMDAwIEhCIiwgMSwgMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMDAzMDIwMywgIkF1MTAwMCBIQyIsIDEsIDEgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDAwMzAyMDQsICJBdTEwMDAgSEQiLCAxLCAxIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAxMDMwMjAwLCAiQXUxNTAwIEFCIiwgMSwgMSB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMTAzMDIwMSwgIkF1MTUwMCBBQyIsIDAsIDEgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDEwMzAyMDIsICJBdTE1MDAgQUQiLCAwLCAxIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAyMDMwMjAwLCAiQXUxMTAwIEFCIiwgMSwgMSB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMjAzMDIwMSwgIkF1MTEwMCBCQSIsIDEsIDEgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDIwMzAyMDIsICJBdTExMDAgQkMiLCAxLCAxIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDAyMDMwMjAzLCAiQXUxMTAwIEJEIiwgMCwgMSB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwMjAzMDIwNCwgIkF1MTEwMCBCRSIsIDAsIDEgfSwKLSAgICB7IDB4ZmZmZmZmZmYsIDB4MDMwMzAyMDAsICJBdTE1NTAgQUEiLCAwLCAxIH0sCi0gICAgeyAweGZmZmZmZmZmLCAweDA0MDMwMjAwLCAiQXUxMjAwIEFCIiwgMCwgMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwNDAzMDIwMSwgIkF1MTIwMCBBQyIsIDEsIDAgfSwKLSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsICJVbmtub3duIEF1MXh4eCIsIDEsIDAgfSwKK3N0cnVjdCBjcHVfc3BlYyBjcHVfc3BlY3NbXSA9IHsKKwl7IDB4ZmZmZmZmZmYsIDB4MDAwMzAxMDAsICJBdTEwMDAgREEiLCAxLCAwLCAxIH0sCisJeyAweGZmZmZmZmZmLCAweDAwMDMwMjAxLCAiQXUxMDAwIEhBIiwgMSwgMCwgMSB9LAorCXsgMHhmZmZmZmZmZiwgMHgwMDAzMDIwMiwgIkF1MTAwMCBIQiIsIDEsIDAsIDEgfSwKKwl7IDB4ZmZmZmZmZmYsIDB4MDAwMzAyMDMsICJBdTEwMDAgSEMiLCAxLCAxLCAwIH0sCisJeyAweGZmZmZmZmZmLCAweDAwMDMwMjA0LCAiQXUxMDAwIEhEIiwgMSwgMSwgMCB9LAorCXsgMHhmZmZmZmZmZiwgMHgwMTAzMDIwMCwgIkF1MTUwMCBBQiIsIDEsIDEsIDAgfSwKKwl7IDB4ZmZmZmZmZmYsIDB4MDEwMzAyMDEsICJBdTE1MDAgQUMiLCAwLCAxLCAwIH0sCisJeyAweGZmZmZmZmZmLCAweDAxMDMwMjAyLCAiQXUxNTAwIEFEIiwgMCwgMSwgMCB9LAorCXsgMHhmZmZmZmZmZiwgMHgwMjAzMDIwMCwgIkF1MTEwMCBBQiIsIDEsIDEsIDAgfSwKKwl7IDB4ZmZmZmZmZmYsIDB4MDIwMzAyMDEsICJBdTExMDAgQkEiLCAxLCAxLCAwIH0sCisJeyAweGZmZmZmZmZmLCAweDAyMDMwMjAyLCAiQXUxMTAwIEJDIiwgMSwgMSwgMCB9LAorCXsgMHhmZmZmZmZmZiwgMHgwMjAzMDIwMywgIkF1MTEwMCBCRCIsIDAsIDEsIDAgfSwKKwl7IDB4ZmZmZmZmZmYsIDB4MDIwMzAyMDQsICJBdTExMDAgQkUiLCAwLCAxLCAwIH0sCisJeyAweGZmZmZmZmZmLCAweDAzMDMwMjAwLCAiQXUxNTUwIEFBIiwgMCwgMSwgMCB9LAorCXsgMHhmZmZmZmZmZiwgMHgwNDAzMDIwMCwgIkF1MTIwMCBBQiIsIDAsIDAsIDAgfSwKKwl7IDB4ZmZmZmZmZmYsIDB4MDQwMzAyMDEsICJBdTEyMDAgQUMiLCAxLCAwLCAwIH0sCisJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAiVW5rbm93biBBdTF4eHgiLCAxLCAwLCAwIH0KIH07CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2RiZG1hLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmRtYS5jCmluZGV4IDQyOGVkMjcuLjU3ZjE3YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2RiZG1hLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vZGJkbWEuYwpAQCAtMTYxLDIyICsxNjEsMjIgQEAKIAl7IERTQ1JfQ01EMF9BTFdBWVMsIERFVl9GTEFHU19BTllVU0UsIDAsIDAsIDB4MDAwMDAwMDAsIDAsIDAgfSwKIAogCS8qIFByb3ZpZGUgMTYgdXNlciBkZWZpbmFibGUgZGV2aWNlIHR5cGVzICovCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyB+MCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCXsgfjAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IH4wLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyB+MCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCXsgfjAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IH4wLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyB+MCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCXsgfjAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IH4wLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyB+MCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCXsgfjAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IH4wLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyB+MCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCXsgfjAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IH4wLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyB+MCwgMCwgMCwgMCwgMCwgMCwgMCB9LAogfTsKIAogI2RlZmluZSBEQkRFVl9UQUJfU0laRQlBUlJBWV9TSVpFKGRiZGV2X3RhYikKQEAgLTIwOSw3ICsyMDksNyBAQAogCWRiZGV2X3RhYl90ICpwPU5VTEw7CiAJc3RhdGljIHUxNiBuZXdfaWQ9MHgxMDAwOwogCi0JcCA9IGZpbmRfZGJkZXZfaWQoMCk7CisJcCA9IGZpbmRfZGJkZXZfaWQofjApOwogCWlmICggTlVMTCAhPSBwICkKIAl7CiAJCW1lbWNweShwLCBkZXYsIHNpemVvZihkYmRldl90YWJfdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggODQxOTA0Yy4uMzlkNjgxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC0xODksNyArMTg5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXUxMjAwX2lkZTBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJCT0gQVUxWFhYX0FUQV9QSFlTX0FERFIsCi0JCS5lbmQgCQk9IEFVMVhYWF9BVEFfUEhZU19BRERSICsgQVUxWFhYX0FUQV9QSFlTX0xFTiwKKwkJLmVuZCAJCT0gQVUxWFhYX0FUQV9QSFlTX0FERFIgKyBBVTFYWFhfQVRBX1BIWVNfTEVOIC0gMSwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKaW5kZXggZDg4NWUzOC4uOWU0YWI4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCkBAIC01Nyw3ICs1Nyw3IEBACiB7CiAJc3RydWN0CWNwdV9zcGVjICpzcDsKIAljaGFyICphcmdwdHI7Ci0JdW5zaWduZWQgbG9uZyBwcmlkLCBjcHVwbGwsIGJjbGsgPSAxOworCXVuc2lnbmVkIGxvbmcgcHJpZCwgY3B1ZnJlcSwgYmNsayA9IDE7CiAKIAlzZXRfY3B1c3BlYygpOwogCXNwID0gY3VyX2NwdV9zcGVjWzBdOwpAQCAtNjUsOCArNjUsMTUgQEAKIAlib2FyZF9zZXR1cCgpOyAgLyogYm9hcmQgc3BlY2lmaWMgc2V0dXAgKi8KIAogCXByaWQgPSByZWFkX2MwX3ByaWQoKTsKLQljcHVwbGwgPSAoYXVfcmVhZGwoMHhCMTkwMDA2MCkgJiAweDNGKSAqIDEyOwotCXByaW50aygiKFBSSWQgJTA4bHgpIEAgJWxkTUhaXG4iLCBwcmlkLCBjcHVwbGwpOworCWlmIChzcC0+Y3B1X3BsbF93bykKKyNpZmRlZiBDT05GSUdfU09DX0FVMTAwMF9GUkVRVUVOQ1kKKwkJY3B1ZnJlcSA9IENPTkZJR19TT0NfQVUxMDAwX0ZSRVFVRU5DWSAvIDEwMDAwMDA7CisjZWxzZQorCQljcHVmcmVxID0gMzk2OworI2VuZGlmCisJZWxzZQorCQljcHVmcmVxID0gKGF1X3JlYWRsKFNZU19DUFVQTEwpICYgMHgzRikgKiAxMjsKKwlwcmludGsoS0VSTl9JTkZPICIoUFJJRCAlMDhseCkgQCAlbGQgTUh6XG4iLCBwcmlkLCBjcHVmcmVxKTsKIAogCWJjbGsgPSBzcC0+Y3B1X2JjbGs7CiAJaWYgKGJjbGspCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKaW5kZXggZjExM2I1MS4uZTEyMmJiYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYwpAQCAtMjA5LDE4ICsyMDksMjIgQEAKIAkJd2hpbGUgKGF1X3JlYWRsKFNZU19DT1VOVEVSX0NOVFJMKSAmIFNZU19DTlRSTF9DMVMpOwogCQlhdV93cml0ZWwoMCwgU1lTX1RPWVdSSVRFKTsKIAkJd2hpbGUgKGF1X3JlYWRsKFNZU19DT1VOVEVSX0NOVFJMKSAmIFNZU19DTlRSTF9DMVMpOwotCi0JCWNwdV9zcGVlZCA9IChhdV9yZWFkbChTWVNfQ1BVUExMKSAmIDB4MDAwMDAwM2YpICoKLQkJCUFVMTAwMF9TUkNfQ0xLOwotCX0KLQllbHNlIHsKLQkJLyogVGhlIDMyS0h6IG9zY2lsbGF0b3IgaXNuJ3QgcnVubmluZywgc28gYXNzdW1lIHRoZXJlCi0JCSAqIGlzbid0IG9uZSBhbmQgZ3JhYiB0aGUgcHJvY2Vzc29yIHNwZWVkIGZyb20gdGhlIFBMTC4KLQkJICogTk9URTogc29tZSBvbGQgc2lsaWNvbiBkb2Vzbid0IGFsbG93IHJlYWRpbmcgdGhlIFBMTC4KLQkJICovCi0JCWNwdV9zcGVlZCA9IChhdV9yZWFkbChTWVNfQ1BVUExMKSAmIDB4MDAwMDAwM2YpICogQVUxMDAwX1NSQ19DTEs7CisJfSBlbHNlCiAJCW5vX2F1MXh4eF8zMmtoeiA9IDE7Ci0JfQorCisJLyoKKwkgKiBPbiBlYXJseSBBdTEwMDAsIHN5c19jcHVwbGwgd2FzIHdyaXRlLW9ubHkuIFNpbmNlIHRoZXNlCisJICogc2lsaWNvbiB2ZXJzaW9ucyBvZiBBdTEwMDAgYXJlIG5vdCBzb2xkIGJ5IEFNRCwgd2UgZG9uJ3QgYmVuZAorCSAqIG92ZXIgYmFja3dhcmRzIHRyeWluZyB0byBkZXRlcm1pbmUgdGhlIGZyZXF1ZW5jeS4KKwkgKi8KKwlpZiAoY3VyX2NwdV9zcGVjWzBdLT5jcHVfcGxsX3dvKQorI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwX0ZSRVFVRU5DWQorCQljcHVfc3BlZWQgPSBDT05GSUdfU09DX0FVMTAwMF9GUkVRVUVOQ1k7CisjZWxzZQorCQljcHVfc3BlZWQgPSAzOTYwMDAwMDA7CisjZW5kaWYKKwllbHNlCisJCWNwdV9zcGVlZCA9IChhdV9yZWFkbChTWVNfQ1BVUExMKSAmIDB4MDAwMDAwM2YpICogQVUxMDAwX1NSQ19DTEs7CiAJbWlwc19ocHRfZnJlcXVlbmN5ID0gY3B1X3NwZWVkOwogCS8vIEVxdWF0aW9uOiBCYXVkcmF0ZSA9IENQVSAvIChTRCAqIDIgKiBDTEtESVYgKiAxNikKIAlzZXRfYXUxeDAwX3VhcnRfYmF1ZF9iYXNlKGNwdV9zcGVlZCAvICgyICogKChpbnQpKGF1X3JlYWRsKFNZU19QT1dFUkNUUkwpJjB4MDMpICsgMikgKiAxNikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC94eHMxNTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvYm9hcmRfc2V0dXAuYwppbmRleCBhOTIzN2Y0Li5iMmU0MTNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvYm9hcmRfc2V0dXAuYwpAQCAtMzMsMTEgKzMzLDEwIEBACiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20va2V5Ym9hcmQuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvaXJxbWFwLmMKaW5kZXggMzg5MzQ5MjkuLmEzNDNkYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAveHhzMTUwMC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvaXJxbWFwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAogc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCXsgQVUxNTAwX0dQSU9fMjA0LCBJTlRDX0lOVF9ISUdIX0xFVkVMLCAwfSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCmluZGV4IDFiNmIwZmEuLjhkMzZmMTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwpAQCAtOTIsMTcgKzkyLDE3IEBACiAJaXYtPnNwcm9tLnJldmlzaW9uID0gMzsKIAogCWlmIChjZmVfZ2V0ZW52KCJldDBtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKLQkJc3RyMmVhZGRyKGJ1ZiwgaXYtPnNwcm9tLnIxLmV0MG1hYyk7CisJCXN0cjJlYWRkcihidWYsIGl2LT5zcHJvbS5ldDBtYWMpOwogCWlmIChjZmVfZ2V0ZW52KCJldDFtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKLQkJc3RyMmVhZGRyKGJ1ZiwgaXYtPnNwcm9tLnIxLmV0MW1hYyk7CisJCXN0cjJlYWRkcihidWYsIGl2LT5zcHJvbS5ldDFtYWMpOwogCWlmIChjZmVfZ2V0ZW52KCJldDBwaHlhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKLQkJaXYtPnNwcm9tLnIxLmV0MHBoeWFkZHIgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwkJaXYtPnNwcm9tLmV0MHBoeWFkZHIgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAlpZiAoY2ZlX2dldGVudigiZXQxcGh5YWRkciIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApCi0JCWl2LT5zcHJvbS5yMS5ldDFwaHlhZGRyID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJCWl2LT5zcHJvbS5ldDFwaHlhZGRyID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAJaWYgKGNmZV9nZXRlbnYoImV0MG1kY3BvcnQiLCBidWYsIHNpemVvZihidWYpKSA+PSAwKQotCQlpdi0+c3Byb20ucjEuZXQwbWRjcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCQlpdi0+c3Byb20uZXQwbWRjcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCWlmIChjZmVfZ2V0ZW52KCJldDFtZGNwb3J0IiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKLQkJaXYtPnNwcm9tLnIxLmV0MW1kY3BvcnQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwkJaXYtPnNwcm9tLmV0MW1kY3BvcnQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCmluZGV4IDVhMDE3ZWEuLmQxZDkwYzllIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1iY200N3h4L2JjbTQ3eHguaD4KIApAQCAtNDMsNiArNDQsNjEgQEAKIAl9CiB9OwogCisKKy8qIDhNaUIgZmxhc2guIFRoZSBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBtYXRjaGVzIG9yaWdpbmFsIE5ldGdlYXIgV0dUNjM0VQorICAgZmlybXdhcmUuICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gd2d0NjM0dV9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJjZmUiLAorCQkub2Zmc2V0ICAgICA9IDAsCisJCS5zaXplICAgICAgID0gMHg2MDAwMCwJCS8qIDM4NGsgKi8KKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFIAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUgICA9ICJjb25maWciLAorCQkub2Zmc2V0ID0gMHg2MDAwMCwKKwkJLnNpemUgICA9IDB4MjAwMDAJCS8qIDEyOGsgKi8KKwl9LAorCXsKKwkJLm5hbWUgICA9ICJsaW51eCIsCisJCS5vZmZzZXQgPSAweDgwMDAwLAorCQkuc2l6ZSAgID0gMHgxNDAwMDAgCQkvKiAxMjgwayAqLworCX0sCisJeworCQkubmFtZSAgID0gImpmZnMiLAorCQkub2Zmc2V0ID0gMHgxYzAwMDAsCisJCS5zaXplICAgPSAweDYyMDAwMCAJCS8qIDYyNzJrICovCisJfSwKKwl7CisJCS5uYW1lICAgPSAibnZyYW0iLAorCQkub2Zmc2V0ID0gMHg3ZTAwMDAsCisJCS5zaXplICAgPSAweDIwMDAwCQkvKiAxMjhrICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHdndDYzNHVfZmxhc2hfZGF0YSA9IHsKKwkucGFydHMgICAgPSB3Z3Q2MzR1X3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzID0gQVJSQVlfU0laRSh3Z3Q2MzR1X3BhcnRpdGlvbnMpCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHdndDYzNHVfZmxhc2hfcmVzb3VyY2UgPSB7CisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3Z3Q2MzR1X2ZsYXNoID0geworCS5uYW1lICAgICAgICAgID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCAgICAgICAgICAgID0gMCwKKwkuZGV2ICAgICAgICAgICA9IHsgLnBsYXRmb3JtX2RhdGEgPSAmd2d0NjM0dV9mbGFzaF9kYXRhLCB9LAorCS5yZXNvdXJjZSAgICAgID0gJndndDYzNHVfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworLyogUGxhdGZvcm0gZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKndndDYzNHVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJndndDYzNHVfZmxhc2gsCisJJndndDYzNHVfZ3Bpb19sZWRzLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgd2d0NjM0dV9pbml0KHZvaWQpCiB7CiAJLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZWN0IHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gYSBXR1Q2MzRVCkBAIC01MCwxMyArMTA2LDIwIEBACiAJICogYmVlbiBhbGxvY2F0ZWQgcmFuZ2VzIDAwOjA5OjViOnh4Onh4Onh4IGFuZCAwMDowZjpiNTp4eDp4eDp4eC4KIAkgKi8KIAotCXU4ICpldDBtYWMgPSBzc2JfYmNtNDd4eC5zcHJvbS5yMS5ldDBtYWM7CisJdTggKmV0MG1hYyA9IHNzYl9iY200N3h4LnNwcm9tLmV0MG1hYzsKIAogCWlmIChldDBtYWNbMF0gPT0gMHgwMCAmJgogCSAgICAoKGV0MG1hY1sxXSA9PSAweDA5ICYmIGV0MG1hY1syXSA9PSAweDViKSB8fAotCSAgICAgKGV0MG1hY1sxXSA9PSAweDBmICYmIGV0MG1hY1syXSA9PSAweGI1KSkpCi0JCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndndDYzNHVfZ3Bpb19sZWRzKTsKLQllbHNlCisJICAgICAoZXQwbWFjWzFdID09IDB4MGYgJiYgZXQwbWFjWzJdID09IDB4YjUpKSkgeworCQlzdHJ1Y3Qgc3NiX21pcHNjb3JlICptY29yZSA9ICZzc2JfYmNtNDd4eC5taXBzY29yZTsKKwkJd2d0NjM0dV9mbGFzaF9kYXRhLndpZHRoID0gbWNvcmUtPmZsYXNoX2J1c3dpZHRoOworCQl3Z3Q2MzR1X2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gbWNvcmUtPmZsYXNoX3dpbmRvdzsKKwkJd2d0NjM0dV9mbGFzaF9yZXNvdXJjZS5lbmQgPSBtY29yZS0+Zmxhc2hfd2luZG93CisJCQkJCSAgICsgbWNvcmUtPmZsYXNoX3dpbmRvd19zaXplCisJCQkJCSAgIC0gMTsKKwkJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHdndDYzNHVfZGV2aWNlcywKKwkJCQkJICAgIEFSUkFZX1NJWkUod2d0NjM0dV9kZXZpY2VzKSk7CisJfSBlbHNlCiAJCXJldHVybiAtRU5PREVWOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTQyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE5MzkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzIKKyMgTW9uIEZlYiAxOCAxMTo1NToyNCAyMDA4CisjCitDT05GSUdfTUlQUz15CisKKyMKKyMgTWFjaGluZSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19CQ000N1hYPXkKKyMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0NFVlRfUjRLPXkKK0NPTkZJR19DU1JDX1I0Sz15CitDT05GSUdfQ0ZFPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX01JUFMzMl9SMT15CisjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQorQ09ORklHX0NQVV9NSVBTMzI9eQorQ09ORklHX0NQVV9NSVBTUjE9eQorQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorCisjCisjIEtlcm5lbCB0eXBlCisjCitDT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CitDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CisjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfTExTQz15CitDT05GSUdfQ1BVX0hBU19TWU5DPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MjUwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CitDT05GSUdfVEFTS19YQUNDVD15CitDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfTlM9eQorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorIyBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKK0NPTkZJR19MU0Y9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQorIworQ09ORklHX0hXX0hBU19QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorQ09ORklHX01NVT15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVRfTFJPPW0KK0NPTkZJR19JTkVUX0RJQUc9bQorQ09ORklHX0lORVRfVENQX0RJQUc9bQorQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPW0KK0NPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCitDT05GSUdfVENQX0NPTkdfSFRDUD1tCitDT05GSUdfVENQX0NPTkdfSFNUQ1A9bQorQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KK0NPTkZJR19UQ1BfQ09OR19WRUdBUz1tCitDT05GSUdfVENQX0NPTkdfU0NBTEFCTEU9bQorQ09ORklHX1RDUF9DT05HX0xQPW0KK0NPTkZJR19UQ1BfQ09OR19WRU5PPW0KK0NPTkZJR19UQ1BfQ09OR19ZRUFIPW0KK0NPTkZJR19UQ1BfQ09OR19JTExJTk9JUz1tCitDT05GSUdfREVGQVVMVF9CSUM9eQorIyBDT05GSUdfREVGQVVMVF9DVUJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0hUQ1AgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9WRUdBUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1dFU1RXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfUkVOTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iYmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfVlM9bQorIyBDT05GSUdfSVBfVlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCisKKyMKKyMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAorIworQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15CitDT05GSUdfSVBfVlNfUFJPVE9fVURQPXkKK0NPTkZJR19JUF9WU19QUk9UT19FU1A9eQorQ09ORklHX0lQX1ZTX1BST1RPX0FIPXkKKworIworIyBJUFZTIHNjaGVkdWxlcgorIworQ09ORklHX0lQX1ZTX1JSPW0KK0NPTkZJR19JUF9WU19XUlI9bQorQ09ORklHX0lQX1ZTX0xDPW0KK0NPTkZJR19JUF9WU19XTEM9bQorQ09ORklHX0lQX1ZTX0xCTEM9bQorQ09ORklHX0lQX1ZTX0xCTENSPW0KK0NPTkZJR19JUF9WU19ESD1tCitDT05GSUdfSVBfVlNfU0g9bQorQ09ORklHX0lQX1ZTX1NFRD1tCitDT05GSUdfSVBfVlNfTlE9bQorCisjCisjIElQVlMgYXBwbGljYXRpb24gaGVscGVyCisjCitDT05GSUdfSVBfVlNfRlRQPW0KK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKK0NPTkZJR19ORVRXT1JLX1NFQ01BUks9eQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCitDT05GSUdfSVA2X05GX1JBVz1tCisKKyMKKyMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQorQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQorQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQPW0KK0NPTkZJR19CUklER0VfRUJUX0xJTUlUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUks9bQorQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRT1tCitDT05GSUdfQlJJREdFX0VCVF9TVFA9bQorQ09ORklHX0JSSURHRV9FQlRfVkxBTj1tCitDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCitDT05GSUdfQlJJREdFX0VCVF9ETkFUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUktfVD1tCitDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCitDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KK0NPTkZJR19CUklER0VfRUJUX0xPRz1tCitDT05GSUdfQlJJREdFX0VCVF9VTE9HPW0KK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19JTkVUX0RDQ1BfRElBRz1tCitDT05GSUdfSVBfRENDUF9BQ0tWRUM9eQorCisjCisjIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX0RDQ1BfQ0NJRDI9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEMz1tCisjIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzX1JUTz0xMDAKK0NPTkZJR19JUF9EQ0NQX1RGUkNfTElCPW0KK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorQ09ORklHX1RJUEM9bQorQ09ORklHX1RJUENfQURWQU5DRUQ9eQorQ09ORklHX1RJUENfWk9ORVM9MworQ09ORklHX1RJUENfQ0xVU1RFUlM9MQorQ09ORklHX1RJUENfTk9ERVM9MjU1CitDT05GSUdfVElQQ19TTEFWRV9OT0RFUz0wCitDT05GSUdfVElQQ19QT1JUUz04MTkxCitDT05GSUdfVElQQ19MT0c9MAorIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRNPW0KK0NPTkZJR19BVE1fQ0xJUD1tCisjIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fTEFORT1tCitDT05GSUdfQVRNX01QT0E9bQorQ09ORklHX0FUTV9CUjI2ODQ9bQorIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIRUQ9eQorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCitDT05GSUdfTkVUX1NDSF9SUj1tCitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KK0NPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CitDT05GSUdfTkVUX0NMU19CQVNJQz1tCitDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFND1tCitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX0NMU19GVz1tCitDT05GSUdfTkVUX0NMU19VMzI9bQorQ09ORklHX0NMU19VMzJfUEVSRj15CitDT05GSUdfQ0xTX1UzMl9NQVJLPXkKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRU1BVENIPXkKK0NPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCitDT05GSUdfTkVUX0VNQVRDSF9DTVA9bQorQ09ORklHX05FVF9FTUFUQ0hfTkJZVEU9bQorQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KK0NPTkZJR19ORVRfRU1BVENIX01FVEE9bQorQ09ORklHX05FVF9FTUFUQ0hfVEVYVD1tCitDT05GSUdfTkVUX0NMU19BQ1Q9eQorQ09ORklHX05FVF9BQ1RfUE9MSUNFPW0KK0NPTkZJR19ORVRfQUNUX0dBQ1Q9bQorQ09ORklHX0dBQ1RfUFJPQj15CitDT05GSUdfTkVUX0FDVF9NSVJSRUQ9bQorQ09ORklHX05FVF9BQ1RfSVBUPW0KK0NPTkZJR19ORVRfQUNUX05BVD1tCitDT05GSUdfTkVUX0FDVF9QRURJVD1tCitDT05GSUdfTkVUX0FDVF9TSU1QPW0KK0NPTkZJR19ORVRfQ0xTX0lORD15CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCitDT05GSUdfSVJORVQ9bQorQ09ORklHX0lSQ09NTT1tCisjIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKKworIworIyBJckRBIG9wdGlvbnMKKyMKK0NPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15CitDT05GSUdfSVJEQV9GQVNUX1JSPXkKKyMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAorCisjCisjIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKKyMKKworIworIyBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19JUlRUWV9TSVI9bQorCisjCisjIERvbmdsZSBzdXBwb3J0CisjCitDT05GSUdfRE9OR0xFPXkKK0NPTkZJR19FU0lfRE9OR0xFPW0KK0NPTkZJR19BQ1RJU1lTX0RPTkdMRT1tCitDT05GSUdfVEVLUkFNX0RPTkdMRT1tCitDT05GSUdfVE9JTTMyMzJfRE9OR0xFPW0KK0NPTkZJR19MSVRFTElOS19ET05HTEU9bQorQ09ORklHX01BNjAwX0RPTkdMRT1tCitDT05GSUdfR0lSQklMX0RPTkdMRT1tCitDT05GSUdfTUNQMjEyMF9ET05HTEU9bQorQ09ORklHX09MRF9CRUxLSU5fRE9OR0xFPW0KK0NPTkZJR19BQ1QyMDBMX0RPTkdMRT1tCitDT05GSUdfS0lOR1NVTl9ET05HTEU9bQorQ09ORklHX0tTREFaWkxFX0RPTkdMRT1tCitDT05GSUdfS1M5NTlfRE9OR0xFPW0KKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfSVJEQT1tCitDT05GSUdfU0lHTUFURUxfRklSPW0KK0NPTkZJR19UT1NISUJBX0ZJUj1tCitDT05GSUdfVkxTSV9GSVI9bQorQ09ORklHX01DU19GSVI9bQorQ09ORklHX0JUPW0KKyMgQ09ORklHX0JUX0wyQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX1NDTyBpcyBub3Qgc2V0CisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJVVNCPW0KK0NPTkZJR19CVF9IQ0lVU0JfU0NPPXkKK0NPTkZJR19CVF9IQ0lVQVJUPW0KK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorQ09ORklHX0JUX0hDSVVBUlRfTEw9eQorQ09ORklHX0JUX0hDSUJDTTIwM1g9bQorQ09ORklHX0JUX0hDSUJQQTEwWD1tCitDT05GSUdfQlRfSENJQkZVU0I9bQorQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKK0NPTkZJR19DRkc4MDIxMT1tCitDT05GSUdfTkw4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19NQUM4MDIxMT1tCisKKyMKKyMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KKyMKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1NJTVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX05PTkUgaXMgbm90IHNldAorCisjCisjIFNlbGVjdGluZyAneScgZm9yIGFuIGFsZ29yaXRobSB3aWxsCisjCisKKyMKKyMgYnVpbGQgdGhlIGFsZ29yaXRobSBpbnRvIG1hYzgwMjExLgorIworQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKK0NPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfU0lNUExFIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9MRURTPXkKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KK0NPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkZLSUxMPW0KK0NPTkZJR19SRktJTExfSU5QVVQ9bQorQ09ORklHX1JGS0lMTF9MRURTPXkKK0NPTkZJR19ORVRfOVA9bQorQ09ORklHX05FVF85UF9GRD1tCisjIENPTkZJR19ORVRfOVBfREVCVUcgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ0ZJX1NUQUE9eQorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CitDT05GSUdfTVREX1JPTT15CitDT05GSUdfTVREX0FCU0VOVD15CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfT1ZFUl9FVEg9bQorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CitDT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPW0KK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCitDT05GSUdfQ0hSX0RFVl9TQ0g9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKK0NPTkZJR19JU0NTSV9UQ1A9bQorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGQiBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorQ09ORklHX1RVTj1tCitDT05GSUdfVkVUSD1tCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj1tCisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPW0KK0NPTkZJR19EQVZJQ09NX1BIWT1tCitDT05GSUdfUVNFTUlfUEhZPW0KK0NPTkZJR19MWFRfUEhZPW0KK0NPTkZJR19DSUNBREFfUEhZPW0KK0NPTkZJR19WSVRFU1NFX1BIWT1tCitDT05GSUdfU01TQ19QSFk9bQorQ09ORklHX0JST0FEQ09NX1BIWT1tCitDT05GSUdfSUNQTFVTX1BIWT1tCisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorQ09ORklHX01ESU9fQklUQkFORz1tCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CitDT05GSUdfQjQ0PXkKK0NPTkZJR19CNDRfUENJX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0NF9QQ0lDT1JFX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0NF9QQ0k9eQorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDMzU4MTUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAorIyBDT05GSUdfQURNODIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BVEg1Sz1tCisjIENPTkZJR19JV0w0OTY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTDM5NDUgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQzWFggaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfWkQxMjExUlc9bQorIyBDT05GSUdfWkQxMjExUldfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCitDT05GSUdfVVNCX05FVF9ETTk2MDE9bQorQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorQ09ORklHX1VTQl9ORVRfUExVU0I9bQorQ09ORklHX1VTQl9ORVRfTUNTNzgzMD1tCitDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPW0KK0NPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQorQ09ORklHX1VTQl9BTElfTTU2MzI9eQorQ09ORklHX1VTQl9BTjI3MjA9eQorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX0tDMjE5MD15CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fRFJJVkVSUz15CitDT05GSUdfQVRNX0RVTU1ZPW0KK0NPTkZJR19BVE1fVENQPW0KKyMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZPUkUyMDBFX01BWUJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0FUTT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CitDT05GSUdfU0xJUD1tCisjIENPTkZJR19TTElQX0NPTVBSRVNTRUQgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfU0xJUF9TTUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQX01PREVfU0xJUDYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfVzE9bQorQ09ORklHX1cxX0NPTj15CisKKyMKKyMgMS13aXJlIEJ1cyBNYXN0ZXJzCisjCitDT05GSUdfVzFfTUFTVEVSX01BVFJPWD1tCitDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MD1tCisjIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgMS13aXJlIFNsYXZlcworIworQ09ORklHX1cxX1NMQVZFX1RIRVJNPW0KK0NPTkZJR19XMV9TTEFWRV9TTUVNPW0KK0NPTkZJR19XMV9TTEFWRV9EUzI0MzM9bQorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzX0NSQyBpcyBub3Qgc2V0CitDT05GSUdfVzFfU0xBVkVfRFMyNzYwPW0KKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKK0NPTkZJR19TU0I9eQorQ09ORklHX1NTQl9QQ0lIT1NUX1BPU1NJQkxFPXkKK0NPTkZJR19TU0JfUENJSE9TVD15CisjIENPTkZJR19TU0JfU0lMRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1NFUklBTD15CitDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFX1BPU1NJQkxFPXkKK0NPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkU9eQorQ09ORklHX1NTQl9QQ0lDT1JFX0hPU1RNT0RFPXkKK0NPTkZJR19TU0JfRFJJVkVSX01JUFM9eQorQ09ORklHX1NTQl9EUklWRVJfRVhUSUY9eQorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CitDT05GSUdfVVNCX0RBQlVTQj1tCisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD1tCisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD1tCisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9IV0RFUD1tCitDT05GSUdfU05EX1JBV01JREk9bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCitDT05GSUdfU05EX0RVTU1ZPW0KK0NPTkZJR19TTkRfVklSTUlEST1tCisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgUENJIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKworIworIyBBTFNBIE1JUFMgZGV2aWNlcworIworCisjCisjIFVTQiBkZXZpY2VzCisjCitDT05GSUdfU05EX1VTQl9BVURJTz1tCisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0CisjCisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKworIworIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICisjCisKKyMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfU1NCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVTEzMl9IQ0Q9bQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD1tCisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCitDT05GSUdfVVNCX0FDTT1tCitDT05GSUdfVVNCX1BSSU5URVI9bQorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9VU0JBVD15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9BTEFVREE9eQorQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9LQVJNQT15CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKK0NPTkZJR19VU0JfTURDODAwPW0KK0NPTkZJR19VU0JfTUlDUk9URUs9bQorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworQ09ORklHX1VTQl9TRVJJQUw9bQorQ09ORklHX1VTQl9FWlVTQj15CitDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKK0NPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFPW0KK0NPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FPW0KK0NPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTY9bQorQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KK0NPTkZJR19VU0JfU0VSSUFMX0NIMzQxPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVD1tCitDT05GSUdfVVNCX1NFUklBTF9DUDIxMDE9bQorQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCitDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCitDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCitDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUPW0KK0NPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KK0NPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQorQ09ORklHX1VTQl9TRVJJQUxfSVI9bQorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCitDT05GSUdfVVNCX1NFUklBTF9JUFc9bQorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQorQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KK0NPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KK0NPTkZJR19VU0JfU0VSSUFMX01PUzc3MjA9bQorQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MD1tCitDT05GSUdfVVNCX1NFUklBTF9OQVZNQU49bQorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KK0NPTkZJR19VU0JfU0VSSUFMX09USTY4NTg9bQorQ09ORklHX1VTQl9TRVJJQUxfSFA0WD1tCitDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1M9bQorIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQorQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KK0NPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCitDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KK0NPTkZJR19VU0JfU0VSSUFMX0RFQlVHPW0KKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQURVVFVYPW0KK0NPTkZJR19VU0JfQVVFUlNXQUxEPW0KK0NPTkZJR19VU0JfUklPNTAwPW0KK0NPTkZJR19VU0JfTEVHT1RPV0VSPW0KK0NPTkZJR19VU0JfTENEPW0KK0NPTkZJR19VU0JfQkVSUllfQ0hBUkdFPW0KK0NPTkZJR19VU0JfTEVEPW0KK0NPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjM9bQorQ09ORklHX1VTQl9DWVRIRVJNPW0KK0NPTkZJR19VU0JfUEhJREdFVD1tCitDT05GSUdfVVNCX1BISURHRVRLSVQ9bQorQ09ORklHX1VTQl9QSElER0VUTU9UT1JDT05UUk9MPW0KK0NPTkZJR19VU0JfUEhJREdFVFNFUlZPPW0KK0NPTkZJR19VU0JfSURNT1VTRT1tCitDT05GSUdfVVNCX0ZURElfRUxBTj1tCisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0lTVVNCVkdBPW0KK0NPTkZJR19VU0JfTEQ9bQorQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUj1tCitDT05GSUdfVVNCX0lPV0FSUklPUj1tCitDT05GSUdfVVNCX1RFU1Q9bQorQ09ORklHX1VTQl9BVE09bQorQ09ORklHX1VTQl9TUEVFRFRPVUNIPW0KK0NPTkZJR19VU0JfQ1hBQ1JVPW0KK0NPTkZJR19VU0JfVUVBR0xFQVRNPW0KK0NPTkZJR19VU0JfWFVTQkFUTT1tCitDT05GSUdfVVNCX0dBREdFVD1tCisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX05FVDIyODA9eQorQ09ORklHX1VTQl9ORVQyMjgwPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKK0NPTkZJR19VU0JfWkVSTz1tCitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KK0NPTkZJR19VU0JfTUlESV9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworQ09ORklHX0xFRFNfR1BJTz15CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRlNfRlM9bQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorQ09ORklHX0pGU19TRUNVUklUWT15CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfUVVPVEE9eQorQ09ORklHX1hGU19TRUNVUklUWT15CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX1JUPXkKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfTk9MT0NLPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUUZNVF9WMT1tCitDT05GSUdfUUZNVF9WMj1tCitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworQ09ORklHX0FERlNfRlM9bQorIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KK0NPTkZJR19CRUZTX0ZTPW0KKyMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19KRkZTMl9GUz1tCitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKK0NPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19WWEZTX0ZTPW0KK0NPTkZJR19NSU5JWF9GUz1tCitDT05GSUdfSFBGU19GUz1tCitDT05GSUdfUU5YNEZTX0ZTPW0KK0NPTkZJR19ST01GU19GUz1tCitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YyX0FDTD15CitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WM19BQ0w9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfU1VOUlBDX0JJTkQzND15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KK0NPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05GU19OUz15CitDT05GSUdfTkNQRlNfT1MyX05TPXkKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorQ09ORklHX05DUEZTX0VYVFJBUz15CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR185UF9GUz1tCisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfS0FSTUFfUEFSVElUSU9OPXkKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fREVCVUc9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkU9IiIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fWFRTPW0KKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9bQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwppbmRleCBhYmY3MGQ3Li4zYjQyY2VhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKQEAgLTEsNTggKzEsNDggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjIyIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzcKKyMgTW9uIE1hciAzMSAwODoxMToxOSAyMDA4CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAogIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVNT1RFX0ZVTE9ORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0lCWVRFX0JJR1NVUj15Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorQ09ORklHX1NJQllURV9CSUdTVVI9eQogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiBDT05GSUdfU0lCWVRFX0JDTTF4ODA9eQogQ09ORklHX1NJQllURV9TQjF4eHhfU09DPXkKICMgQ09ORklHX0NQVV9TQjFfUEFTU18xIGlzIG5vdCBzZXQKQEAgLTY4LDkgKzU4LDExIEBACiAjIENPTkZJR19TSUJZVEVfQ0ZFX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0JVU19XQVRDSEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9UQlBST0YgaXMgbm90IHNldAorQ09ORklHX1NJQllURV9IQVNfWkJVU19QUk9GSUxJTkc9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKQEAgLTgxLDExICs3MywxNyBAQAogIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19DRVZUX0JDTTE0ODA9eQogQ09ORklHX0NTUkNfQkNNMTQ4MD15CitDT05GSUdfQ0ZFPXkKIENPTkZJR19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfQklHX0VORElBTj15CiAjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19TV0FQX0lPX1NQQUNFPXkKIENPTkZJR19CT09UX0VMRjMyPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKQEAgLTkzLDEwICs5MSw2IEBACiAjCiAjIENQVSBzZWxlY3Rpb24KICMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfQ1BVX0xPT05HU09OMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldApAQCAtMTM3LDE0ICsxMzEsMTUgQEAKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTUyLDEzICsxNDcsMTkgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX1NNUD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1NNUD15CiBDT05GSUdfTlJfQ1BVU19ERUZBVUxUXzQ9eQogQ09ORklHX05SX0NQVVM9NAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE3MSwzOCArMTcyLDQ1IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9CS0wgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorQ09ORklHX1RBU0tTVEFUUz15CitDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKK0NPTkZJR19UQVNLX1hBQ0NUPXkKK0NPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0FVRElUPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15Ci0jIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTIxMSwyNCArMjE5LDMzIEBACiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKQEAgLTIzNiwxMiArMjUzLDEwIEBACiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yNTUsNiArMjcwLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKQEAgLTI2MiwyMyArMjc4LDE5IEBACiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CiBDT05GSUdfUENJX0RFQlVHPXkKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfWk9ORV9ETUEzMj15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CkBAIC0yOTIsNyArMzA0LDYgQEAKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpAQCAtMzAyLDcgKzMxMyw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzEwLDEwICszMjAsMTEgQEAKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKIENPTkZJR19YRlJNX01JR1JBVEU9eQorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKIENPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKQEAgLTMyMiw0MSArMzMzLDE0MSBAQAogIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CiAjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogQ09ORklHX1RDUF9NRDVTSUc9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1ZTPW0KKyMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9WU19UQUJfQklUUz0xMgorCisjCisjIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19JUF9WU19QUk9UT19UQ1A9eQorQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15CitDT05GSUdfSVBfVlNfUFJPVE9fRVNQPXkKK0NPTkZJR19JUF9WU19QUk9UT19BSD15CisKKyMKKyMgSVBWUyBzY2hlZHVsZXIKKyMKK0NPTkZJR19JUF9WU19SUj1tCitDT05GSUdfSVBfVlNfV1JSPW0KK0NPTkZJR19JUF9WU19MQz1tCitDT05GSUdfSVBfVlNfV0xDPW0KK0NPTkZJR19JUF9WU19MQkxDPW0KK0NPTkZJR19JUF9WU19MQkxDUj1tCitDT05GSUdfSVBfVlNfREg9bQorQ09ORklHX0lQX1ZTX1NIPW0KK0NPTkZJR19JUF9WU19TRUQ9bQorQ09ORklHX0lQX1ZTX05RPW0KKworIworIyBJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcgorIworQ09ORklHX0lQX1ZTX0ZUUD1tCitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKK0NPTkZJR19JUFY2X1JPVVRFX0lORk89eQorQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSVBWNl9NSVA2PW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKIENPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRCBpcyBub3Qgc2V0CiAKICMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCisjIENPTkZJR19ORl9OQVRfVEZUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVRfU0lQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzY5LDEwICs0ODAsNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0zODAsOSArNDg3LDIxIEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zOTEsODUgKzUxMCw3MCBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX1NHSV9JT0M0PW0KICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIENPTkZJR19JREVfTUFYX0hXSUZTPTQKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRElTSz15CiAjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogQ09ORklHX0JMS19ERVZfSURFVEFQRT15CiBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwogQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CkBAIC00OTUsODcgKzU5OSwxOTYgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KICMgQ09ORklHX0JMS19ERVZfSURFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCiAjCi0jIENPTkZJR19BVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIAogIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKICMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTDI0PXkKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1NJTDY4MD15CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQogCiAjCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAorIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTU4NSw1MiArNzk4LDUzIEBACiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKK0NPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0hFTFNJT19UMz1tCisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPTDJUUD1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNjYwLDE3ICs4NzQsMTYgQEAKICMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLUNPTkZJR19NT1hBX1NNQVJUSU9fTkVXPW0KICMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKICMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX1NCMTI1MF9EVUFSVD15Ci1DT05GSUdfU0VSSUFMX1NCMTI1MF9EVUFSVF9DT05TT0xFPXkKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTY4MCwzOSArODkzLDI0IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKK0NPTkZJR19TRVJJQUxfU0IxMjUwX0RVQVJUPXkKK0NPTkZJR19TRVJJQUxfU0IxMjUwX0RVQVJUX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIAogIwpAQCAtNzM2LDI5ICs5MzQsMzAgQEAKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0lCWVRFPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotQ09ORklHX1NFTlNPUlNfRFMxMzM3PXkKLUNPTkZJR19TRU5TT1JTX0RTMTM3ND15CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKIENPTkZJR19TRU5TT1JTX1BDRjg1NzQ9eQotQ09ORklHX1NFTlNPUlNfUENBOTUzOT15CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1BDRjg1OTE9eQorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTUFYNjg3NT15CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CkBAIC03NjksNDMgKzk2OCw0OSBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIwogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CkBAIC04MTQsMTA0ICsxMDE5LDczIEBACiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCitDT05GSUdfUlRDX0xJQj15CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBVc2Vyc3BhY2UgSS9PCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwotQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlM9bQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CitDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQorIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPW0KK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19GVVNFX0ZTPW0KIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSVNPOTY2MF9GUz1tCitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CiAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPW0KKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05URlNfUlc9eQogCiAjCiAjIFBzZXVkbyBmaWxlc3lzdGVtcwpAQCAtOTIzLDcgKzEwOTcsNiBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKIENPTkZJR19DT05GSUdGU19GUz1tCiAKICMKQEAgLTkzOSwxNCArMTExMiwxMyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldApAQCAtOTU4LDYgKzExMzAsNyBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTY1LDM3ICsxMTM4LDYxIEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIworQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQogQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKQEAgLTEwMDMsOCArMTIwMCw4IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKQEAgLTEwMTQsMTUgKzEyMTEsMTkgQEAKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9IiIKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NCMVhYWF9DT1JFTElTIGlzIG5vdCBzZXQKQEAgLTEwMzQsMjMgKzEyMzUsMjIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9eQotQ09ORklHX0NSWVBUT19NRDQ9eQorQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPXkKLUNPTkZJR19DUllQVE9fU0hBMjU2PXkKLUNPTkZJR19DUllQVE9fU0hBNTEyPXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KIENPTkZJR19DUllQVE9fR0YxMjhNVUw9bQpAQCAtMTA1OCwzOSArMTI1OCw1MCBAQAogQ09ORklHX0NSWVBUT19DQkM9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KIENPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fWFRTPW0KK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fQ0NNPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9bQogQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD15Ci1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9eQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj15Ci1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQogQ09ORklHX0NSWVBUT19URUE9bQotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKK0NPTkZJR19DUllQVE9fU0VFRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyOF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDI4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzE4OGJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyOF9kZWZjb25maWcKQEAgLTAsMCArMSw4OTEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzEKKyMgTW9uIEZlYiAxMSAxNTo1ODo1NCAyMDA4CisjCitDT05GSUdfTUlQUz15CisKKyMKKyMgTWFjaGluZSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRU1PVEVfRlVMT05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NFQUQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorQ09ORklHX1NHSV9JUDI4PXkKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0FSQz15CitDT05GSUdfQ0VWVF9SNEs9eQorQ09ORklHX0NTUkNfUjRLPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAorQ09ORklHX0k4MjU5PXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU49eQorQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfU1dBUF9JT19TUEFDRT15CitDT05GSUdfU0dJX0hBU19EUzEyODY9eQorQ09ORklHX1NHSV9IQVNfSU5EWURPRz15CitDT05GSUdfU0dJX0hBU19TRUVRPXkKK0NPTkZJR19TR0lfSEFTX1dEOTM9eQorQ09ORklHX1NHSV9IQVNfWklMT0c9eQorQ09ORklHX1NHSV9IQVNfSTgwNDI9eQorQ09ORklHX0RFRkFVTFRfU0dJX1BBUlRJVElPTj15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD03CitDT05GSUdfQVJDX0NPTlNPTEU9eQorQ09ORklHX0FSQ19QUk9NTElCPXkKK0NPTkZJR19BUkM2ND15CitDT05GSUdfQk9PVF9FTEY2ND15CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfUjEwMDAwPXkKKyMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9SMTAwMDA9eQorQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQorCisjCisjIEtlcm5lbCB0eXBlCisjCisjIENPTkZJR18zMkJJVCBpcyBub3Qgc2V0CitDT05GSUdfNjRCSVQ9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CitDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CisjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfTExTQz15CitDT05GSUdfQ1BVX0hBU19TWU5DPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTI1MAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0lOU0FORV9MQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX0JMT0NLX0NPTVBBVD15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCisjCitDT05GSUdfSFdfSEFTX0VJU0E9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX0lTQT15CitDT05GSUdfRUlTQT15CitDT05GSUdfRUlTQV9OQU1FUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19JODI1Mz15CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTMzJfQ09NUEFUPXkKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKK0NPTkZJR19NSVBTMzJfTzMyPXkKK0NPTkZJR19NSVBTMzJfTjMyPXkKK0NPTkZJR19CSU5GTVRfRUxGMzI9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorQ09ORklHX1NHSVdEOTNfU0NTST15CisjIENPTkZJR19TQ1NJX0FIQTE3NDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0lNNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19TR0lTRUVRPXkKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9QUzJfQUxQUyBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CisjIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSyBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0lQMjJfWklMT0c9eQorQ09ORklHX1NFUklBTF9JUDIyX1pJTE9HX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfU0dJX0RTMTI4Nj15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19JTkRZRE9HPXkKKworIworIyBJU0EtYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTUlYQ09NV0QgaXMgbm90IHNldAorIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfU0dJX1BBUlRJVElPTj15CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSIiCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjYTE0Ny4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDgwMCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozOSAyMDA3Ci0jCi1DT05GSUdfTUlQUz15Ci0KLSMKLSMgTWFjaGluZSBzZWxlY3Rpb24KLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfU0VBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAotIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX0k4MjU5PXkKLUNPTkZJR19DUFVfQklHX0VORElBTj15Ci0jIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQotQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TV0FQX0lPX1NQQUNFPXkKLUNPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19IQVZFX1NURF9QQ19TRVJJQUxfUE9SVD15Ci0KLSMKLSMgQ1BVIHNlbGVjdGlvbgotIwotQ09ORklHX0NQVV9NSVBTMzJfUjE9eQotIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKLUNPTkZJR19DUFVfTUlQUzMyPXkKLUNPTkZJR19DUFVfTUlQU1IxPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLQotIwotIyBLZXJuZWwgdHlwZQotIwotQ09ORklHXzMyQklUPXkKLSMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX1NJWkVfNEtCPXkKLSMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQotQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfTExTQz15Ci1DT05GSUdfQ1BVX0hBU19TWU5DPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi0jIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwPXkKLSMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLSMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19FTEZfQ09SRT15Ci0jIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAotIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19USU5ZX1NITUVNPXkKLUNPTkZJR19CQVNFX1NNQUxMPTEKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX05PT1A9eQotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLQotIwotIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCi0jCi1DT05GSUdfSVNBPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1BDU1BFQUtFUj15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKLQotIwotIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX1RSQURfU0lHTkFMUz15Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi1DT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCi0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCi0jCi0jIENPTkZJR19DRF9OT19JREVTQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfSVNBPXkKLSMgQ09ORklHX0UyMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VXUkszIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFWFBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFWFBSRVNTX1BSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUExBTl9QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQNDg2RSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEgxNkkgaXMgbm90IHNldAotQ09ORklHX05FMjAwMD15Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCi0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLUNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCi0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlVTRV9GUz15Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU19ESVJFQ1RJTz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVmY29uZmlnIGIvYXJjaC9taXBzL2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY1ZTU2Yy4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTE1OCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMtcmMyCi0jIFR1ZSBBdWcgIDcgMTI6Mzk6NDkgMjAwNwotIwotQ09ORklHX01JUFM9eQotCi0jCi0jIE1hY2hpbmUgc2VsZWN0aW9uCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRU1PVEVfRlVMT05HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1NFQUQgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotQ09ORklHX1NHSV9JUDIyPXkKLSMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAotQ09ORklHX0FSQz15Ci1DT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKLUNPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BX1NVUFBPUlRfQlJPS0VOPXkKLUNPTkZJR19DUFVfQklHX0VORElBTj15Ci0jIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQotQ09ORklHX0lSUV9DUFU9eQotQ09ORklHX1NXQVBfSU9fU1BBQ0U9eQotQ09ORklHX0FSQzMyPXkKLUNPTkZJR19CT09UX0VMRjMyPXkKLUNPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19BUkNfQ09OU09MRT15Ci1DT05GSUdfQVJDX1BST01MSUI9eQotCi0jCi0jIENQVSBzZWxlY3Rpb24KLSMKLSMgQ09ORklHX0NQVV9MT09OR1NPTjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1I1MDAwPXkKLSMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfUjRYMDA9eQotQ09ORklHX1NZU19IQVNfQ1BVX1I1MDAwPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLQotIwotIyBLZXJuZWwgdHlwZQotIwotQ09ORklHXzMyQklUPXkKLSMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX1NJWkVfNEtCPXkKLSMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX0JPQVJEX1NDQUNIRT15Ci1DT05GSUdfSVAyMl9DUFVfU0NBQ0hFPXkKLUNPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKLUNPTkZJR19DUFVfSEFTX1NZTkM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQotIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCi0jCi1DT05GSUdfSFdfSEFTX0VJU0E9eQotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfRUlTQSBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfVFJBRF9TSUdOQUxTPXkKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLUNPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotQ09ORklHX0lORVRfQUg9bQotQ09ORklHX0lORVRfRVNQPW0KLUNPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLUNPTkZJR19JUF9WUz1tCi0jIENPTkZJR19JUF9WU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVlNfVEFCX0JJVFM9MTIKLQotIwotIyBJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfSVBfVlNfUFJPVE9fVENQPXkKLUNPTkZJR19JUF9WU19QUk9UT19VRFA9eQotQ09ORklHX0lQX1ZTX1BST1RPX0VTUD15Ci1DT05GSUdfSVBfVlNfUFJPVE9fQUg9eQotCi0jCi0jIElQVlMgc2NoZWR1bGVyCi0jCi1DT05GSUdfSVBfVlNfUlI9bQotQ09ORklHX0lQX1ZTX1dSUj1tCi1DT05GSUdfSVBfVlNfTEM9bQotQ09ORklHX0lQX1ZTX1dMQz1tCi1DT05GSUdfSVBfVlNfTEJMQz1tCi1DT05GSUdfSVBfVlNfTEJMQ1I9bQotQ09ORklHX0lQX1ZTX0RIPW0KLUNPTkZJR19JUF9WU19TSD1tCi1DT05GSUdfSVBfVlNfU0VEPW0KLUNPTkZJR19JUF9WU19OUT1tCi0KLSMKLSMgSVBWUyBhcHBsaWNhdGlvbiBoZWxwZXIKLSMKLUNPTkZJR19JUF9WU19GVFA9bQotQ09ORklHX0lQVjY9bQotQ09ORklHX0lQVjZfUFJJVkFDWT15Ci1DT05GSUdfSVBWNl9ST1VURVJfUFJFRj15Ci1DT05GSUdfSVBWNl9ST1VURV9JTkZPPXkKLUNPTkZJR19JUFY2X09QVElNSVNUSUNfREFEPXkKLUNPTkZJR19JTkVUNl9BSD1tCi1DT05GSUdfSU5FVDZfRVNQPW0KLUNPTkZJR19JTkVUNl9JUENPTVA9bQotQ09ORklHX0lQVjZfTUlQNj1tCi1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCi1DT05GSUdfSVBWNl9TSVQ9bQotQ09ORklHX0lQVjZfVFVOTkVMPW0KLUNPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15Ci1DT05GSUdfSVBWNl9TVUJUUkVFUz15Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9GSUxURVI9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVQ9bQotQ09ORklHX05GX05BVF9ORUVERUQ9eQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi1DT05GSUdfTkZfTkFUX1RGVFA9bQotQ09ORklHX05GX05BVF9BTUFOREE9bQotQ09ORklHX05GX05BVF9QUFRQPW0KLUNPTkZJR19ORl9OQVRfSDMyMz1tCi1DT05GSUdfTkZfTkFUX1NJUD1tCi1DT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KLUNPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KLUNPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KLUNPTkZJR19JUDZfTkZfUVVFVUU9bQotQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCi1DT05GSUdfSVA2X05GX01BVENIX0FIPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUg9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCi1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUDZfTkZfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KLUNPTkZJR19JUDZfTkZfUkFXPW0KLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotQ09ORklHX05FVF9TQ0hFRD15Ci1DT05GSUdfTkVUX1NDSF9GSUZPPXkKLQotIwotIyBRdWV1ZWluZy9TY2hlZHVsaW5nCi0jCi1DT05GSUdfTkVUX1NDSF9DQlE9bQotQ09ORklHX05FVF9TQ0hfSFRCPW0KLUNPTkZJR19ORVRfU0NIX0hGU0M9bQotQ09ORklHX05FVF9TQ0hfUFJJTz1tCi1DT05GSUdfTkVUX1NDSF9SUj1tCi1DT05GSUdfTkVUX1NDSF9SRUQ9bQotQ09ORklHX05FVF9TQ0hfU0ZRPW0KLUNPTkZJR19ORVRfU0NIX1RFUUw9bQotQ09ORklHX05FVF9TQ0hfVEJGPW0KLUNPTkZJR19ORVRfU0NIX0dSRUQ9bQotQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KLUNPTkZJR19ORVRfU0NIX05FVEVNPW0KLUNPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQotCi0jCi0jIENsYXNzaWZpY2F0aW9uCi0jCi1DT05GSUdfTkVUX0NMUz15Ci1DT05GSUdfTkVUX0NMU19CQVNJQz1tCi1DT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFND1tCi1DT05GSUdfTkVUX0NMU19ST1VURT15Ci1DT05GSUdfTkVUX0NMU19GVz1tCi1DT05GSUdfTkVUX0NMU19VMzI9bQotIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19SU1ZQPW0KLUNPTkZJR19ORVRfQ0xTX1JTVlA2PW0KLSMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfQUNUPXkKLUNPTkZJR19ORVRfQUNUX1BPTElDRT15Ci1DT05GSUdfTkVUX0FDVF9HQUNUPW0KLUNPTkZJR19HQUNUX1BST0I9eQotQ09ORklHX05FVF9BQ1RfTUlSUkVEPW0KLUNPTkZJR19ORVRfQUNUX0lQVD1tCi1DT05GSUdfTkVUX0FDVF9QRURJVD1tCi1DT05GSUdfTkVUX0FDVF9TSU1QPW0KLUNPTkZJR19ORVRfQ0xTX1BPTElDRT15Ci0jIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLUNPTkZJR19DRkc4MDIxMT1tCi1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19NQUM4MDIxMT1tCi0jIENPTkZJR19NQUM4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUkZLSUxMPW0KLUNPTkZJR19SRktJTExfSU5QVVQ9bQotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9bQotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1JBSURfQVRUUlM9bQotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLUNPTkZJR19TQ1NJX1RHVD1tCi0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPXkKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NDSD1tCi0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCi0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci1DT05GSUdfSVNDU0lfVENQPW0KLUNPTkZJR19TR0lXRDkzX1NDU0k9eQotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lGQiBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVk9bQotQ09ORklHX0JPTkRJTkc9bQotQ09ORklHX01BQ1ZMQU49bQotQ09ORklHX0VRVUFMSVpFUj1tCi1DT05GSUdfVFVOPW0KLUNPTkZJR19QSFlMSUI9bQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX1NHSVNFRVE9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLUNPTkZJR19XTEFOX1BSRTgwMjExPXkKLUNPTkZJR19TVFJJUD1tCi1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9TVEFQPW0KLSMgQ09ORklHX0hPU1RBUF9GSVJNV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9bQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9bQotIyBDT05GSUdfTU9VU0VfUFMyX0FMUFMgaXMgbm90IHNldAotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotIyBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfTElGRUJPT0sgaXMgbm90IHNldAotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9VU0VfU0VSSUFMPW0KLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLUNPTkZJR19TRVJJT19SQVc9bQotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9JUDIyX1pJTE9HPW0KLUNPTkZJR19TRVJJQUxfQ09SRT1tCi1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0lORFlET0c9bQotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0dJX0RTMTI4Nj1tCi0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci1DT05GSUdfUkFXX0RSSVZFUj1tCi1DT05GSUdfTUFYX1JBV19ERVZTPTI1NgotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0dJX05FV1BPUlRfQ09OU09MRT15Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRk9OVF84eDE2PXkKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19TR0lfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9bQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19YRlNfUVVPVEE9eQotQ09ORklHX1hGU19TRUNVUklUWT15Ci0jIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSU5JWF9GUz1tCi0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLUNPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKLUNPTkZJR19RRk1UX1YyPW0KLUNPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0lTTzk2NjBfRlM9bQotQ09ORklHX0pPTElFVD15Ci1DT05GSUdfWklTT0ZTPXkKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUZTX0ZTPW0KLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotQ09ORklHX1VGU19GUz1tCi0jIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz1tCi1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjNfQUNMPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjJfQUNMPXkKLUNPTkZJR19ORlNEX1YzPXkKLUNPTkZJR19ORlNEX1YzX0FDTD15Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfTE9DS0Q9bQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPW0KLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9bQotQ09ORklHX1NVTlJQQ19HU1M9bQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi1DT05GSUdfU01CX05MU19ERUZBVUxUPXkKLUNPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCi1DT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DT0RBX0ZTPW0KLSMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX1NHSV9QQVJUSVRJT049eQotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQotQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQotQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi1DT05GSUdfTkxTX0FTQ0lJPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KLUNPTkZJR19OTFNfSVNPODg1OV8yPW0KLUNPTkZJR19OTFNfSVNPODg1OV8zPW0KLUNPTkZJR19OTFNfSVNPODg1OV80PW0KLUNPTkZJR19OTFNfSVNPODg1OV81PW0KLUNPTkZJR19OTFNfSVNPODg1OV82PW0KLUNPTkZJR19OTFNfSVNPODg1OV83PW0KLUNPTkZJR19OTFNfSVNPODg1OV85PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQotQ09ORklHX05MU19JU084ODU5XzE1PW0KLUNPTkZJR19OTFNfS09JOF9SPW0KLUNPTkZJR19OTFNfS09JOF9VPW0KLUNPTkZJR19OTFNfVVRGOD1tCi0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCi0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotQ09ORklHX0tFWVM9eQotQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9bQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCi0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPW0KLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQppbmRleCBmZmEwODM2Li42ZmNkYjZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiBleHRyYS15CQk6PSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKIAogb2JqLXkJCSs9IGNwdS1wcm9iZS5vIGJyYW5jaC5vIGVudHJ5Lm8gZ2VuZXgubyBpcnEubyBwcm9jZXNzLm8gXAotCQkgICBwdHJhY2UubyByZXNldC5vIHNlbWFwaG9yZS5vIHNldHVwLm8gc2lnbmFsLm8gc3lzY2FsbC5vIFwKKwkJICAgcHRyYWNlLm8gcmVzZXQubyBzZXR1cC5vIHNpZ25hbC5vIHN5c2NhbGwubyBcCiAJCSAgIHRpbWUubyB0b3BvbG9neS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8KIAogb2JqLSQoQ09ORklHX0NFVlRfQkNNMTQ4MCkJKz0gY2V2dC1iY20xNDgwLm8KQEAgLTc2LDcgKzc2LDYgQEAKIG9iai0kKENPTkZJR182NEJJVCkJCSs9IGNwdS1idWdzNjQubwogCiBvYmotJChDT05GSUdfSTgyNTMpCQkrPSBpODI1My5vCi1vYmotJChDT05GSUdfUENTUEVBS0VSKQkJKz0gcGNzcGVha2VyLm8KIAogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vIHJlbG9jYXRlX2tlcm5lbC5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1idWdzNjQuYwppbmRleCA0MTdiYjNlLi5hMWI0OGFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1idWdzNjQuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1idWdzNjQuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJcGFuaWMoYnVnNjRoaXQsICFSNDAwMF9XQVIgPyByNGt3YXIgOiBub3dhcik7CiB9CiAKLXN0YXRpYyB2b2xhdGlsZSBpbnQgZGFkZGlfb3YgX19pbml0ZGF0YSA9IDA7CitzdGF0aWMgdm9sYXRpbGUgaW50IGRhZGRpX292IF9fY3B1aW5pdGRhdGEgPSAwOwogCiBhc21saW5rYWdlIHZvaWQgX19pbml0IGRvX2RhZGRpX292KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMjM5LDcgKzIzOSw3IEBACiAJcGFuaWMoYnVnNjRoaXQsICFEQURESV9XQVIgPyBkYWRkaXdhciA6IG5vd2FyKTsKIH0KIAotaW50IGRhZGRpdV9idWcgX19pbml0ZGF0YSA9IC0xOworaW50IGRhZGRpdV9idWcgX19jcHVpbml0ZGF0YSA9IC0xOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfZGFkZGl1KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCA1ODYxYTQzLi44OWMzMzA0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCX0KIH0KIAotc3RhdGljIGNoYXIgdW5rbm93bl9pc2FbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIgXAorc3RhdGljIGNoYXIgdW5rbm93bl9pc2FbXSBfX2NwdWluaXRkYXRhID0gS0VSTl9FUlIgXAogCSJVbnN1cHBvcnRlZCBJU0EgdHlwZSwgYzAuY29uZmlnMDogJWQuIjsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGVjb2RlX2NvbmZpZzAoc3RydWN0IGNwdWluZm9fbWlwcyAqYykKQEAgLTY1Niw3ICs2NTYsNyBAQAogCXJldHVybiBjb25maWczICYgTUlQU19DT05GX007CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkZWNvZGVfY29uZmlncyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGRlY29kZV9jb25maWdzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMpCiB7CiAJLyogTUlQUzMyIG9yIE1JUFM2NCBjb21wbGlhbnQgQ1BVLiAgKi8KIAljLT5vcHRpb25zID0gTUlQU19DUFVfNEtFWCB8IE1JUFNfQ1BVXzRLX0NBQ0hFIHwgTUlQU19DUFVfQ09VTlRFUiB8CkBAIC04MTQsNyArODE0LDcgQEAKIC8qCiAgKiBOYW1lIGEgQ1BVCiAgKi8KLXN0YXRpYyBfX2luaXQgY29uc3QgY2hhciAqY3B1X3RvX25hbWUoc3RydWN0IGNwdWluZm9fbWlwcyAqYykKK3N0YXRpYyBfX2NwdWluaXQgY29uc3QgY2hhciAqY3B1X3RvX25hbWUoc3RydWN0IGNwdWluZm9fbWlwcyAqYykKIHsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKIApAQCAtODk2LDcgKzg5Niw3IEBACiAJcmV0dXJuIG5hbWU7CiB9CiAKLV9faW5pdCB2b2lkIGNwdV9wcm9iZSh2b2lkKQorX19jcHVpbml0IHZvaWQgY3B1X3Byb2JlKHZvaWQpCiB7CiAJc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC05NTksNyArOTU5LDcgQEAKIAkJYy0+c3JzZXRzID0gMTsKIH0KIAotX19pbml0IHZvaWQgY3B1X3JlcG9ydCh2b2lkKQorX19jcHVpbml0IHZvaWQgY3B1X3JlcG9ydCh2b2lkKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXI0ay5jIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXI0ay5jCmluZGV4IDBlMmI1Y2QuLjg2ZTAyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1yNGsuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcjRrLmMKQEAgLTIyLDEyICsyMiwxNyBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKLXZvaWQgX19pbml0IGluaXRfbWlwc19jbG9ja3NvdXJjZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21pcHNfY2xvY2tzb3VyY2Uodm9pZCkKIHsKKwlpZiAoIWNwdV9oYXNfY291bnRlciB8fCAhbWlwc19ocHRfZnJlcXVlbmN5KQorCQlyZXR1cm4gLUVOWElPOworCiAJLyogQ2FsY2xhdGUgYSBzb21ld2hhdCByZWFzb25hYmxlIHJhdGluZyB2YWx1ZSAqLwogCWNsb2Nrc291cmNlX21pcHMucmF0aW5nID0gMjAwICsgbWlwc19ocHRfZnJlcXVlbmN5IC8gMTAwMDAwMDA7CiAKIAljbG9ja3NvdXJjZV9zZXRfY2xvY2soJmNsb2Nrc291cmNlX21pcHMsIG1pcHNfaHB0X2ZyZXF1ZW5jeSk7CiAKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbWlwcyk7CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYwppbmRleCAzMTkxYWZhLi4yNWY0ZWFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dkYi1zdHViLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItc3R1Yi5jCkBAIC0xMzksNyArMTM5LDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+CiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CiAKIC8qCiAgKiBleHRlcm5hbCBsb3ctbGV2ZWwgc3VwcG9ydCByb3V0aW5lcwpAQCAtNjU2LDYgKzY1NSw3IEBACiAJKmVwYyA9ICh1bnNpZ25lZCBsb25nKWFzeW5jX2JyZWFrcG9pbnQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCBrZ2RiX3dhaXQodm9pZCAqYXJnKQogewogCXVuc2lnbmVkIGZsYWdzOwpAQCAtNjY4LDYgKzY2OCw3IEBACiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CisjZW5kaWYKIAogLyoKICAqIEdEQiBzdHViIG5lZWRzIHRvIGNhbGwga2dkYl93YWl0IG9uIGFsbCBwcm9jZXNzb3Igd2l0aCBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCmluZGV4IGEyNGZiNzkuLjM2MTM2NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCkBAIC0xOTUsNyArMTk1LDcgQEAKIAlqCQlzdGFydF9rZXJuZWwKIAlFTkQoa2VybmVsX2VudHJ5KQogCi0JX19JTklUCisJX19DUFVJTklUCiAKICNpZmRlZiBDT05GSUdfU01QCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCmluZGV4IGZjNGFhMDcuLjM4ZmExYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogCiBERUZJTkVfU1BJTkxPQ0soaTgyNTNfbG9jayk7CitFWFBPUlRfU1lNQk9MKGk4MjUzX2xvY2spOwogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgUElUIHRpbWVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtcm03MDAwLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1ybTcwMDAuYwppbmRleCA5NzFhZGY2Li5mYjUwY2M3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1ybTcwMDAuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1ybTcwMDAuYwpAQCAtMzMsNiArMzMsNyBAQAogCS5tYXNrID0gbWFza19ybTdrX2lycSwKIAkubWFza19hY2sgPSBtYXNrX3JtN2tfaXJxLAogCS51bm1hc2sgPSB1bm1hc2tfcm03a19pcnEsCisJLmVvaQk9IHVubWFza19ybTdrX2lycQogfTsKIAogdm9pZCBfX2luaXQgcm03a19jcHVfaXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLXJtOTAwMC5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtcm05MDAwLmMKaW5kZXggN2IwNDU4My4uZWQ5ZmViZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtcm05MDAwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtcm05MDAwLmMKQEAgLTc1LDYgKzc1LDcgQEAKIAkubWFzayA9IG1hc2tfcm05a19pcnEsCiAJLm1hc2tfYWNrID0gbWFza19ybTlrX2lycSwKIAkudW5tYXNrID0gdW5tYXNrX3JtOWtfaXJxLAorCS5lb2kJPSB1bm1hc2tfcm05a19pcnEKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcm05a19wZXJmY291bnRlcl9pcnEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21pcHMtbXQtZnBhZmYuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwcy1tdC1mcGFmZi5jCmluZGV4IGJiNGYwMGMuLmRmNGQzZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbWlwcy1tdC1mcGFmZi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwcy1tdC1mcGFmZi5jCkBAIC0zNiw3ICszNiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZF90IHBpZCkKIHsKLQlyZXR1cm4gcGlkID8gZmluZF90YXNrX2J5X3BpZChwaWQpIDogY3VycmVudDsKKwlyZXR1cm4gcGlkID8gZmluZF90YXNrX2J5X3ZwaWQocGlkKSA6IGN1cnJlbnQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCmluZGV4IGY3OTgxMzkuLjA4YTljNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKQEAgLTY2Myw2ICs2NjMsOSBAQAogCXN5cwlzeXNfbmlfc3lzY2FsbAkJMAogCXN5cwlzeXNfZXZlbnRmZAkJMQogCXN5cwlzeXNfZmFsbG9jYXRlCQk2CS8qIDQzMjAgKi8KKwlzeXMJc3lzX3RpbWVyZmRfY3JlYXRlCTIKKwlzeXMJc3lzX3RpbWVyZmRfZ2V0dGltZQkyCisJc3lzCXN5c190aW1lcmZkX3NldHRpbWUJNAogCS5lbmRtCiAKIAkvKiBXZSBwcmUtY29tcHV0ZSB0aGUgbnVtYmVyIG9mIF9pbnN0cnVjdGlvbl8gYnl0ZXMgbmVlZGVkIHRvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IGE2MjZiZTYuLmRjNTk3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00NzgsNCArNDc4LDcgQEAKIAlQVFIJc3lzX25pX3N5c2NhbGwKIAlQVFIJc3lzX2V2ZW50ZmQKIAlQVFIJc3lzX2ZhbGxvY2F0ZQorCVBUUglzeXNfdGltZXJmZF9jcmVhdGUJCS8qIDUyODAgKi8KKwlQVFIJc3lzX3RpbWVyZmRfZ2V0dGltZQorCVBUUglzeXNfdGltZXJmZF9zZXR0aW1lCiAJLnNpemUJc3lzX2NhbGxfdGFibGUsLi1zeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IDlkNWJjYWYuLjEyOTQwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTQwNCw0ICs0MDQsNyBAQAogCVBUUglzeXNfbmlfc3lzY2FsbAogCVBUUglzeXNfZXZlbnRmZAogCVBUUglzeXNfZmFsbG9jYXRlCisJUFRSCXN5c190aW1lcmZkX2NyZWF0ZQorCVBUUglzeXNfdGltZXJmZF9nZXR0aW1lCQkvKiA1Mjg1ICovCisJUFRSCXN5c190aW1lcmZkX3NldHRpbWUKIAkuc2l6ZQlzeXNuMzJfY2FsbF90YWJsZSwuLXN5c24zMl9jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggZmQyMDE5Yy4uOWEyNzVlZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtNTI2LDQgKzUyNiw3IEBACiAJUFRSCXN5c19uaV9zeXNjYWxsCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5czMyX2ZhbGxvY2F0ZQkJCS8qIDQzMjAgKi8KKwlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCisJUFRSCXN5c190aW1lcmZkX2dldHRpbWUKKwlQVFIJc3lzX3RpbWVyZmRfc2V0dGltZQogCS5zaXplCXN5c19jYWxsX3RhYmxlLC4tc3lzX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL21pcHMva2VybmVsL3NlbWFwaG9yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjY1MzU4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIE1JUFMtc3BlY2lmaWMgc2VtYXBob3JlIGNvZGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IENvcnQgRG91Z2FuIDxjb3J0QGNzLm5tdC5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogQXByaWwgMjAwMSAtIFJld29ya2VkIGJ5IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgotICogdG8gZWxpbWluYXRlIHRoZSBTTVAgcmFjZXMgaW4gdGhlIG9sZCB2ZXJzaW9uIGJldHdlZW4gdGhlIHVwZGF0ZXMKLSAqIG9mIGBjb3VudCcgYW5kIGB3YWtpbmcnLiAgTm93IHdlIHVzZSBuZWdhdGl2ZSBgY291bnQnIHZhbHVlcyB0bwotICogaW5kaWNhdGUgdGhhdCBzb21lIHByb2Nlc3MoZXMpIGFyZSB3YWl0aW5nIGZvciB0aGUgc2VtYXBob3JlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxhc20vd2FyLmg+Ci0vKgotICogQXRvbWljYWxseSB1cGRhdGUgc2VtLT5jb3VudC4KLSAqIFRoaXMgZG9lcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgZm9sbG93aW5nOgotICoKLSAqCW9sZF9jb3VudCA9IHNlbS0+Y291bnQ7Ci0gKgl0bXAgPSBNQVgob2xkX2NvdW50LCAwKSArIGluY3I7Ci0gKglzZW0tPmNvdW50ID0gdG1wOwotICoJcmV0dXJuIG9sZF9jb3VudDsKLSAqCi0gKiBPbiBtYWNoaW5lcyB3aXRob3V0IGxsZC9zY2Qgd2UgbmVlZCBhIHNwaW5sb2NrIHRvIG1ha2UgdGhlIG1hbmlwdWxhdGlvbiBvZgotICogc2VtLT5jb3VudCBhbmQgc2VtLT53YWtpbmcgYXRvbWljLiAgU2NhbGFiaWxpdHkgaXNuJ3QgYW4gaXNzdWUgYmVjYXVzZQotICogdGhpcyBsb2NrIGlzIHVzZWQgb24gVVAgb25seSBzbyBpdCdzIGp1c3QgYW4gZW1wdHkgdmFyaWFibGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fc2VtX3VwZGF0ZV9jb3VudChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCBpbmNyKQotewotCWludCBvbGRfY291bnQsIHRtcDsKLQotCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCS5zZXQJbWlwczMJCQkJCVxuIgotCQkiMToJbGwJJTAsICUyCQkjIF9fc2VtX3VwZGF0ZV9jb3VudAlcbiIKLQkJIglzcmEJJTEsICUwLCAzMQkJCQlcbiIKLQkJIglub3QJJTEJCQkJCVxuIgotCQkiCWFuZAklMSwgJTAsICUxCQkJCVxuIgotCQkiCWFkZHUJJTEsICUxLCAlMwkJCQlcbiIKLQkJIglzYwklMSwgJTIJCQkJCVxuIgotCQkiCWJlcXpsCSUxLCAxYgkJCQkJXG4iCi0JCSIJLnNldAltaXBzMAkJCQkJXG4iCi0JCTogIj0mciIgKG9sZF9jb3VudCksICI9JnIiICh0bXApLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJyIiAoaW5jciksICJtIiAoc2VtLT5jb3VudCkpOwotCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiCS5zZXQJbWlwczMJCQkJCVxuIgotCQkiMToJbGwJJTAsICUyCQkjIF9fc2VtX3VwZGF0ZV9jb3VudAlcbiIKLQkJIglzcmEJJTEsICUwLCAzMQkJCQlcbiIKLQkJIglub3QJJTEJCQkJCVxuIgotCQkiCWFuZAklMSwgJTAsICUxCQkJCVxuIgotCQkiCWFkZHUJJTEsICUxLCAlMwkJCQlcbiIKLQkJIglzYwklMSwgJTIJCQkJCVxuIgotCQkiCWJlcXoJJTEsIDFiCQkJCQlcbiIKLQkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKLQkJOiAiPSZyIiAob2xkX2NvdW50KSwgIj0mciIgKHRtcCksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogInIiIChpbmNyKSwgIm0iIChzZW0tPmNvdW50KSk7Ci0JfSBlbHNlIHsKLQkJc3RhdGljIERFRklORV9TUElOTE9DSyhzZW1hcGhvcmVfbG9jayk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV9sb2NrLCBmbGFncyk7Ci0JCW9sZF9jb3VudCA9IGF0b21pY19yZWFkKCZzZW0tPmNvdW50KTsKLQkJdG1wID0gbWF4X3QoaW50LCBvbGRfY291bnQsIDApICsgaW5jcjsKLQkJYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdG1wKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX2xvY2ssIGZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gb2xkX2NvdW50OwotfQotCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCS8qCi0JICogTm90ZSB0aGF0IHdlIGluY3JlbWVudGVkIGNvdW50IGluIHVwKCkgYmVmb3JlIHdlIGNhbWUgaGVyZSwKLQkgKiBidXQgdGhhdCB3YXMgaW5lZmZlY3RpdmUgc2luY2UgdGhlIHJlc3VsdCB3YXMgPD0gMCwgYW5kCi0JICogYW55IG5lZ2F0aXZlIHZhbHVlIG9mIGNvdW50IGlzIGVxdWl2YWxlbnQgdG8gMC4KLQkgKiBUaGlzIGVuZHMgdXAgc2V0dGluZyBjb3VudCB0byAxLCB1bmxlc3MgY291bnQgaXMgbm93ID4gMAotCSAqIChpLmUuIGJlY2F1c2Ugc29tZSBvdGhlciBjcHUgaGFzIGNhbGxlZCB1cCgpIGluIHRoZSBtZWFudGltZSksCi0JICogaW4gd2hpY2ggY2FzZSB3ZSBqdXN0IGluY3JlbWVudCBjb3VudC4KLQkgKi8KLQlfX3NlbV91cGRhdGVfY291bnQoc2VtLCAxKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi1FWFBPUlRfU1lNQk9MKF9fdXApOwotCi0vKgotICogTm90ZSB0aGF0IHdoZW4gd2UgY29tZSBpbiB0byBfX2Rvd24gb3IgX19kb3duX2ludGVycnVwdGlibGUsCi0gKiB3ZSBoYXZlIGFscmVhZHkgZGVjcmVtZW50ZWQgY291bnQsIGJ1dCB0aGF0IGRlY3JlbWVudCB3YXMKLSAqIGluZWZmZWN0aXZlIHNpbmNlIHRoZSByZXN1bHQgd2FzIDwgMCwgYW5kIGFueSBuZWdhdGl2ZSB2YWx1ZQotICogb2YgY291bnQgaXMgZXF1aXZhbGVudCB0byAwLgotICogVGh1cyBpdCBpcyBvbmx5IHdoZW4gd2UgZGVjcmVtZW50IGNvdW50IGZyb20gc29tZSB2YWx1ZSA+IDAKLSAqIHRoYXQgd2UgaGF2ZSBhY3R1YWxseSBnb3QgdGhlIHNlbWFwaG9yZS4KLSAqLwotdm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0KLQlfX3NldF90YXNrX3N0YXRlKHRzaywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQkvKgotCSAqIFRyeSB0byBnZXQgdGhlIHNlbWFwaG9yZS4gIElmIHRoZSBjb3VudCBpcyA+IDAsIHRoZW4gd2UndmUKLQkgKiBnb3QgdGhlIHNlbWFwaG9yZTsgd2UgZGVjcmVtZW50IGNvdW50IGFuZCBleGl0IHRoZSBsb29wLgotCSAqIElmIHRoZSBjb3VudCBpcyAwIG9yIG5lZ2F0aXZlLCB3ZSBzZXQgaXQgdG8gLTEsIGluZGljYXRpbmcKLQkgKiB0aGF0IHdlIGFyZSBhc2xlZXAsIGFuZCB0aGVuIHNsZWVwLgotCSAqLwotCXdoaWxlIChfX3NlbV91cGRhdGVfY291bnQoc2VtLCAtMSkgPD0gMCkgewotCQlzY2hlZHVsZSgpOwotCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCV9fc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX1JVTk5JTkcpOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgYW55IG1vcmUgc2xlZXBlcnMsIHdha2Ugb25lIG9mIHRoZW0gdXAgc28KLQkgKiB0aGF0IGl0IGNhbiBlaXRoZXIgZ2V0IHRoZSBzZW1hcGhvcmUsIG9yIHNldCBjb3VudCB0byAtMQotCSAqIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgc3RpbGwgcHJvY2Vzc2VzIHNsZWVwaW5nLgotCSAqLwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19kb3duKTsKLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKLQotCV9fc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQl3aGlsZSAoX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgLTEpIDw9IDApIHsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkvKgotCQkJICogQSBzaWduYWwgaXMgcGVuZGluZyAtIGdpdmUgdXAgdHJ5aW5nLgotCQkJICogU2V0IHNlbS0+Y291bnQgdG8gMCBpZiBpdCBpcyBuZWdhdGl2ZSwKLQkJCSAqIHNpbmNlIHdlIGFyZSBubyBsb25nZXIgc2xlZXBpbmcuCi0JCQkgKi8KLQkJCV9fc2VtX3VwZGF0ZV9jb3VudChzZW0sIDApOwotCQkJcmV0dmFsID0gLUVJTlRSOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2NoZWR1bGUoKTsKLQkJc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCX0KLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0JX19zZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfUlVOTklORyk7Ci0KLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNpcml4LmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYwppbmRleCA2NzJmYmE4Li5jMzU3NzYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYwpAQCAtMTExLDcgKzExMSw3IEBACiAJCXByaW50aygiaXJpeF9wcmN0bFslczolZF06IFdhbnRzIFBSX0lTQkxPQ0tFRFxuIiwKIAkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCXRhc2sgPSBmaW5kX3Rhc2tfYnlfcGlkKHZhX2FyZyhhcmdzLCBwaWRfdCkpOworCQl0YXNrID0gZmluZF90YXNrX2J5X3ZwaWQodmFfYXJnKGFyZ3MsIHBpZF90KSk7CiAJCWVycm9yID0gLUVTUkNIOwogCQlpZiAoZXJyb3IpCiAJCQllcnJvciA9ICh0YXNrLT5ydW5fbGlzdC5uZXh0ICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwppbmRleCA5Zjg1ZDRjLi5iNDVhNzA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwpAQCAtMTU3LDYgKzE1Nyw2IEBACiB7CiAJcGxhdF90aW1lX2luaXQoKTsKIAotCWlmIChtaXBzX2Nsb2NrZXZlbnRfaW5pdCgpIHx8ICFjcHVfaGFzX21mYzBfY291bnRfYnVnKCkpCisJaWYgKCFtaXBzX2Nsb2NrZXZlbnRfaW5pdCgpIHx8ICFjcHVfaGFzX21mYzBfY291bnRfYnVnKCkpCiAJCWluaXRfbWlwc19jbG9ja3NvdXJjZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IGZjYWU2NjcuLjk4NGMwZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTUzNCw4ICs1MzQsNyBAQAogCiAvKgogICogU2ltdWxhdGUgdHJhcHBpbmcgJ3JkaHdyJyBpbnN0cnVjdGlvbnMgdG8gcHJvdmlkZSB1c2VyIGFjY2Vzc2libGUKLSAqIHJlZ2lzdGVycyBub3QgaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUuICBUaGUgb25seSBjdXJyZW50IHVzZSBvZiB0aGlzCi0gKiBpcyB0aGUgdGhyZWFkIGFyZWEgcG9pbnRlci4KKyAqIHJlZ2lzdGVycyBub3QgaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUuCiAgKi8KIHN0YXRpYyBpbnQgc2ltdWxhdGVfcmRod3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBvcGNvZGUpCiB7CkBAIC01NDUsMTEgKzU0NCwzMSBAQAogCQlpbnQgcmQgPSAob3Bjb2RlICYgUkQpID4+IDExOwogCQlpbnQgcnQgPSAob3Bjb2RlICYgUlQpID4+IDE2OwogCQlzd2l0Y2ggKHJkKSB7Ci0JCQljYXNlIDI5OgotCQkJCXJlZ3MtPnJlZ3NbcnRdID0gdGktPnRwX3ZhbHVlOwotCQkJCXJldHVybiAwOworCQljYXNlIDA6CQkvKiBDUFUgbnVtYmVyICovCisJCQlyZWdzLT5yZWdzW3J0XSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJCXJldHVybiAwOworCQljYXNlIDE6CQkvKiBTWU5DSSBsZW5ndGggKi8KKwkJCXJlZ3MtPnJlZ3NbcnRdID0gbWluKGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzeiwKKwkJCQkJICAgICBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS5saW5lc3opOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFJlYWQgY291bnQgcmVnaXN0ZXIgKi8KKwkJCXJlZ3MtPnJlZ3NbcnRdID0gcmVhZF9jMF9jb3VudCgpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMzoJCS8qIENvdW50IHJlZ2lzdGVyIHJlc29sdXRpb24gKi8KKwkJCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7CisJCQljYXNlIENQVV8yMEtDOgorCQkJY2FzZSBDUFVfMjVLRjoKKwkJCQlyZWdzLT5yZWdzW3J0XSA9IDE7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXJldHVybiAtMTsKKwkJCQlyZWdzLT5yZWdzW3J0XSA9IDI7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAyOToKKwkJCXJlZ3MtPnJlZ3NbcnRdID0gdGktPnRwX3ZhbHVlOworCQkJcmV0dXJuIDA7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CiAKQEAgLTEyODcsNyArMTMwNiw3IEBACiBpbnQgY3AwX3BlcmZjb3VudF9pcnE7CiBFWFBPUlRfU1lNQk9MX0dQTChjcDBfcGVyZmNvdW50X2lycSk7CiAKLXZvaWQgX19pbml0IHBlcl9jcHVfdHJhcF9pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgaW50IHN0YXR1c19zZXQgPSBTVDBfQ1UwOwpAQCAtMTQwNCwxMSArMTQyMywxMiBAQAogCWZsdXNoX2ljYWNoZV9yYW5nZShlYmFzZSArIG9mZnNldCwgZWJhc2UgKyBvZmZzZXQgKyBzaXplKTsKIH0KIAotc3RhdGljIGNoYXIgcGFuaWNfbnVsbF9jZXJyW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY2hhciBwYW5pY19udWxsX2NlcnJbXSBfX2NwdWluaXRkYXRhID0KIAkiVHJ5aW5nIHRvIHNldCBOVUxMIGNhY2hlIGVycm9yIGV4Y2VwdGlvbiBoYW5kbGVyIjsKIAogLyogSW5zdGFsbCB1bmNhY2hlZCBDUFUgZXhjZXB0aW9uIGhhbmRsZXIgKi8KLXZvaWQgX19pbml0IHNldF91bmNhY2hlZF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit2b2lkIF9fY3B1aW5pdCBzZXRfdW5jYWNoZWRfaGFuZGxlcih1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqYWRkciwKKwl1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAjaWZkZWYgQ09ORklHXzMyQklUCiAJdW5zaWduZWQgbG9uZyB1bmNhY2hlZF9lYmFzZSA9IEtTRUcxQUREUihlYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCBlZWQyZGM0Li4zOTgwNGM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTI2MiwxMyArMjYyLDIxIEBACiAvKiBGaW5kIHNvbWUgVlBFIHByb2dyYW0gc3BhY2UgICovCiBzdGF0aWMgdm9pZCAqYWxsb2NfcHJvZ21lbSh1bnNpZ25lZCBsb25nIGxlbikKIHsKKwl2b2lkICphZGRyOworCiAjaWZkZWYgQ09ORklHX01JUFNfVlBFX0xPQURFUl9UT00KLQkvKiB0aGlzIG1lYW5zIHlvdSBtdXN0IHRlbGwgbGludXggdG8gdXNlIGxlc3MgbWVtb3J5IHRoYW4geW91IHBoeXNpY2FsbHkgaGF2ZSAqLwotCXJldHVybiBwZm5fdG9fa2FkZHIobWF4X3Bmbik7CisJLyoKKwkgKiBUaGlzIG1lYW5zIHlvdSBtdXN0IHRlbGwgTGludXggdG8gdXNlIGxlc3MgbWVtb3J5IHRoYW4geW91CisJICogcGh5c2ljYWxseSBoYXZlLCBmb3IgZXhhbXBsZSBieSBwYXNzaW5nIGEgbWVtPSBib290IGFyZ3VtZW50LgorCSAqLworCWFkZHIgPSBwZm5fdG9fa2FkZHIobWF4X3Bmbik7CisJbWVtc2V0KGFkZHIsIDAsIGxlbik7CiAjZWxzZQotCS8vIHNpbXBsZSBncmFiIHNvbWUgbWVtIGZvciBub3cKLQlyZXR1cm4ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCS8qIHNpbXBsZSBncmFiIHNvbWUgbWVtIGZvciBub3cgKi8KKwlhZGRyID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogI2VuZGlmCisKKwlyZXR1cm4gYWRkcjsKIH0KIAogc3RhdGljIHZvaWQgcmVsZWFzZV9wcm9nbWVtKHZvaWQgKnB0cikKQEAgLTg4NCw5ICs4OTIsMTAgQEAKIAl9CiAKIAl2LT5sb2FkX2FkZHIgPSBhbGxvY19wcm9nbWVtKG1vZC5jb3JlX3NpemUpOwotCW1lbXNldCh2LT5sb2FkX2FkZHIsIDAsIG1vZC5jb3JlX3NpemUpOworCWlmICghdi0+bG9hZF9hZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaW50aygiVlBFIGxvYWRlcjogbG9hZGluZyB0byAlcFxuIiwgdi0+bG9hZF9hZGRyKTsKKwlwcl9pbmZvKCJWUEUgbG9hZGVyOiBsb2FkaW5nIHRvICVwXG4iLCB2LT5sb2FkX2FkZHIpOwogCiAJaWYgKHJlbG9jYXRlKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBoZHItPmVfc2hudW07IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi91Y21wZGkyLmMgYi9hcmNoL21pcHMvbGliL3VjbXBkaTIuYwppbmRleCBiMzNkODU2Li5iYjRjYjJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGliL3VjbXBkaTIuYworKysgYi9hcmNoL21pcHMvbGliL3VjbXBkaTIuYwpAQCAtMTcsMyArMTcsNSBAQAogCQlyZXR1cm4gMjsKIAlyZXR1cm4gMTsKIH0KKworRVhQT1JUX1NZTUJPTChfX3VjbXBkaTIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi91bmNhY2hlZC5jIGIvYXJjaC9taXBzL2xpYi91bmNhY2hlZC5jCmluZGV4IDI3YjAxMmQuLmE2ZDFjNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWIvdW5jYWNoZWQuYworKysgYi9hcmNoL21pcHMvbGliL3VuY2FjaGVkLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAqIHZhbHVlcywgc28gd2UgY2FuIGF2b2lkIHNoYXJpbmcgdGhlIHNhbWUgc3RhY2sgYXJlYSBiZXR3ZWVuIGEgY2FjaGVkCiAgKiBhbmQgdGhlIHVuY2FjaGVkIG1vZGUuCiAgKi8KLXVuc2lnbmVkIGxvbmcgX19pbml0IHJ1bl91bmNhY2hlZCh2b2lkICpmdW5jKQordW5zaWduZWQgbG9uZyBfX2NwdWluaXQgcnVuX3VuY2FjaGVkKHZvaWQgKmZ1bmMpCiB7CiAJcmVnaXN0ZXIgbG9uZyBzcCBfX2FzbV9fKCIkc3AiKTsKIAlyZWdpc3RlciBsb25nIHJldCBfX2FzbV9fKCIkMiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IGYwMmNlNjMuLmI1MGUwZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCX0KIH0KIAotdW5zaWduZWQgaW50IF9faW5pdCBnZXRfYzBfY29tcGFyZV9pbnQodm9pZCkKK3Vuc2lnbmVkIGludCBfX2NwdWluaXQgZ2V0X2MwX2NvbXBhcmVfaW50KHZvaWQpCiB7CiAjaWZkZWYgTVNDMDFFX0lOVF9CQVNFCiAJaWYgKGNwdV9oYXNfdmVpYykgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHNzaW0vc2ltX3RpbWUuYyBiL2FyY2gvbWlwcy9taXBzc2ltL3NpbV90aW1lLmMKaW5kZXggZTM5YmJlOS4uODgxZWNiYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHNzaW0vc2ltX3RpbWUuYworKysgYi9hcmNoL21pcHMvbWlwc3NpbS9zaW1fdGltZS5jCkBAIC04Myw3ICs4Myw3IEBACiB9CiAKIAotdW5zaWduZWQgX19pbml0IGdldF9jMF9jb21wYXJlX2ludCh2b2lkKQordW5zaWduZWQgX19jcHVpbml0IGdldF9jMF9jb21wYXJlX2ludCh2b2lkKQogewogI2lmZGVmIE1TQzAxRV9JTlRfQkFTRQogCWlmIChjcHVfaGFzX3ZlaWMpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXIzay5jIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKaW5kZXggNTYyYWJiNy4uNzY5MzVlMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjNrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCXIza19mbHVzaF9kY2FjaGVfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CiB9CiAKLXZvaWQgX19pbml0IHIza19jYWNoZV9pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCByM2tfY2FjaGVfaW5pdCh2b2lkKQogewogCWV4dGVybiB2b2lkIGJ1aWxkX2NsZWFyX3BhZ2Uodm9pZCk7CiAJZXh0ZXJuIHZvaWQgYnVpbGRfY29weV9wYWdlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjRrLmMgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwppbmRleCA1M2VjMDUyLi43N2FlZmI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwpAQCAtOTMsNyArOTMsNyBAQAogCWJsYXN0X2RjYWNoZTMyX3BhZ2UoYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCByNGtfYmxhc3RfZGNhY2hlX3BhZ2Vfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByNGtfYmxhc3RfZGNhY2hlX3BhZ2Vfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nICBkY19sc2l6ZSA9IGNwdV9kY2FjaGVfbGluZV9zaXplKCk7CiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBzdGF0aWMgdm9pZCAoKiByNGtfYmxhc3RfZGNhY2hlX3BhZ2VfaW5kZXhlZCkodW5zaWduZWQgbG9uZyBhZGRyKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHI0a19ibGFzdF9kY2FjaGVfcGFnZV9pbmRleGVkX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcjRrX2JsYXN0X2RjYWNoZV9wYWdlX2luZGV4ZWRfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGRjX2xzaXplID0gY3B1X2RjYWNoZV9saW5lX3NpemUoKTsKIApAQCAtMTIxLDcgKzEyMSw3IEBACiAKIHN0YXRpYyB2b2lkICgqIHI0a19ibGFzdF9kY2FjaGUpKHZvaWQpOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgcjRrX2JsYXN0X2RjYWNoZV9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHI0a19ibGFzdF9kY2FjaGVfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGRjX2xzaXplID0gY3B1X2RjYWNoZV9saW5lX3NpemUoKTsKIApAQCAtMjA2LDcgKzIwNiw3IEBACiAKIHN0YXRpYyB2b2lkICgqIHI0a19ibGFzdF9pY2FjaGVfcGFnZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHI0a19ibGFzdF9pY2FjaGVfcGFnZV9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHI0a19ibGFzdF9pY2FjaGVfcGFnZV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaWNfbHNpemUgPSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpOwogCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogc3RhdGljIHZvaWQgKCogcjRrX2JsYXN0X2ljYWNoZV9wYWdlX2luZGV4ZWQpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCByNGtfYmxhc3RfaWNhY2hlX3BhZ2VfaW5kZXhlZF9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHI0a19ibGFzdF9pY2FjaGVfcGFnZV9pbmRleGVkX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBpY19sc2l6ZSA9IGNwdV9pY2FjaGVfbGluZV9zaXplKCk7CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCiBzdGF0aWMgdm9pZCAoKiByNGtfYmxhc3RfaWNhY2hlKSh2b2lkKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHI0a19ibGFzdF9pY2FjaGVfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByNGtfYmxhc3RfaWNhY2hlX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBpY19sc2l6ZSA9IGNwdV9pY2FjaGVfbGluZV9zaXplKCk7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQAogCiBzdGF0aWMgdm9pZCAoKiByNGtfYmxhc3Rfc2NhY2hlX3BhZ2UpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCByNGtfYmxhc3Rfc2NhY2hlX3BhZ2Vfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByNGtfYmxhc3Rfc2NhY2hlX3BhZ2Vfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNjX2xzaXplID0gY3B1X3NjYWNoZV9saW5lX3NpemUoKTsKIApAQCAtMjg2LDcgKzI4Niw3IEBACiAKIHN0YXRpYyB2b2lkICgqIHI0a19ibGFzdF9zY2FjaGVfcGFnZV9pbmRleGVkKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgcjRrX2JsYXN0X3NjYWNoZV9wYWdlX2luZGV4ZWRfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByNGtfYmxhc3Rfc2NhY2hlX3BhZ2VfaW5kZXhlZF9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc2NfbHNpemUgPSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpOwogCkBAIC0zMDQsNyArMzA0LDcgQEAKIAogc3RhdGljIHZvaWQgKCogcjRrX2JsYXN0X3NjYWNoZSkodm9pZCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCByNGtfYmxhc3Rfc2NhY2hlX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcjRrX2JsYXN0X3NjYWNoZV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc2NfbHNpemUgPSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpOwogCkBAIC0zNjEsMjMgKzM2MSwzNiBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIHI0a19fZmx1c2hfY2FjaGVfdm1hcCh2b2lkKQoreworCXI0a19ibGFzdF9kY2FjaGUoKTsKK30KKworc3RhdGljIHZvaWQgcjRrX19mbHVzaF9jYWNoZV92dW5tYXAodm9pZCkKK3sKKwlyNGtfYmxhc3RfZGNhY2hlKCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcmFuZ2Uodm9pZCAqIGFyZ3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBhcmdzOworCWludCBleGVjID0gdm1hLT52bV9mbGFncyAmIFZNX0VYRUM7CiAKIAlpZiAoIShoYXNfdmFsaWRfYXNpZCh2bWEtPnZtX21tKSkpCiAJCXJldHVybjsKIAogCXI0a19ibGFzdF9kY2FjaGUoKTsKKwlpZiAoZXhlYykKKwkJcjRrX2JsYXN0X2ljYWNoZSgpOwogfQogCiBzdGF0aWMgdm9pZCByNGtfZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JaWYgKCFjcHVfaGFzX2RjX2FsaWFzZXMpCi0JCXJldHVybjsKKwlpbnQgZXhlYyA9IHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDOwogCi0JcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9yYW5nZSwgdm1hLCAxLCAxKTsKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzIHx8IChleGVjICYmICFjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMpKQorCQlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX3JhbmdlLCB2bWEsIDEsIDEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfcjRrX2ZsdXNoX2NhY2hlX21tKHZvaWQgKiBhcmdzKQpAQCAtNjg4LDExICs3MDEsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBjaGFyICp3YXlfc3RyaW5nW10gX19pbml0ZGF0YSA9IHsgTlVMTCwgImRpcmVjdCBtYXBwZWQiLCAiMi13YXkiLAorc3RhdGljIGNoYXIgKndheV9zdHJpbmdbXSBfX2NwdWluaXRkYXRhID0geyBOVUxMLCAiZGlyZWN0IG1hcHBlZCIsICIyLXdheSIsCiAJIjMtd2F5IiwgIjQtd2F5IiwgIjUtd2F5IiwgIjYtd2F5IiwgIjctd2F5IiwgIjgtd2F5IgogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IHByb2JlX3BjYWNoZSh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHByb2JlX3BjYWNoZSh2b2lkKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKQEAgLTEwMTMsNyArMTAyNiw3IEBACiAgKiBleGVjdXRlcyBpbiBLU0VHMSBzcGFjZSBvciBlbHNlIHlvdSB3aWxsIGNyYXNoIGFuZCBidXJuIGJhZGx5LiAgWW91IGhhdmUKICAqIGJlZW4gd2FybmVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBwcm9iZV9zY2FjaGUodm9pZCkKK3N0YXRpYyBpbnQgX19jcHVpbml0IHByb2JlX3NjYWNoZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFkZHIsIGJlZ2luLCBlbmQsIHBvdzI7CiAJdW5zaWduZWQgaW50IGNvbmZpZyA9IHJlYWRfYzBfY29uZmlnKCk7CkBAIC0xMDkyLDcgKzExMDUsNyBAQAogZXh0ZXJuIGludCBybTdrX3NjX2luaXQodm9pZCk7CiBleHRlcm4gaW50IG1pcHNfc2NfaW5pdCh2b2lkKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3NjYWNoZSh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHNldHVwX3NjYWNoZSh2b2lkKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKQEAgLTEyMDMsNyArMTIxNiw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgY29oZXJlbmN5X3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgY29oZXJlbmN5X3NldHVwKHZvaWQpCiB7CiAJY2hhbmdlX2MwX2NvbmZpZyhDT05GX0NNX0NNQVNLLCBDT05GX0NNX0RFRkFVTFQpOwogCkBAIC0xMjM1LDcgKzEyNDgsNyBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgcjRrX2NhY2hlX2luaXQodm9pZCkKK3ZvaWQgX19jcHVpbml0IHI0a19jYWNoZV9pbml0KHZvaWQpCiB7CiAJZXh0ZXJuIHZvaWQgYnVpbGRfY2xlYXJfcGFnZSh2b2lkKTsKIAlleHRlcm4gdm9pZCBidWlsZF9jb3B5X3BhZ2Uodm9pZCk7CkBAIC0xMjc4LDYgKzEyOTEsMTAgQEAKIAkJCQkJUEFHRV9TSVpFIC0gMSk7CiAJZWxzZQogCQlzaG1fYWxpZ25fbWFzayA9IFBBR0VfU0laRS0xOworCisJX19mbHVzaF9jYWNoZV92bWFwCT0gcjRrX19mbHVzaF9jYWNoZV92bWFwOworCV9fZmx1c2hfY2FjaGVfdnVubWFwCT0gcjRrX19mbHVzaF9jYWNoZV92dW5tYXA7CisKIAlmbHVzaF9jYWNoZV9hbGwJCT0gY2FjaGVfbm9vcDsKIAlfX2ZsdXNoX2NhY2hlX2FsbAk9IHI0a19fX2ZsdXNoX2NhY2hlX2FsbDsKIAlmbHVzaF9jYWNoZV9tbQkJPSByNGtfZmx1c2hfY2FjaGVfbW07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy10eDM5LmMgYi9hcmNoL21pcHMvbW0vYy10eDM5LmMKaW5kZXggOWVhMTIxZS4uYTlmN2YxZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtdHgzOS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXR4MzkuYwpAQCAtMTIyLDYgKzEyMiwxNiBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgdHgzOV9fZmx1c2hfY2FjaGVfdm1hcCh2b2lkKQoreworCXR4MzlfYmxhc3RfZGNhY2hlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHR4MzlfX2ZsdXNoX2NhY2hlX3Z1bm1hcCh2b2lkKQoreworCXR4MzlfYmxhc3RfZGNhY2hlKCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0eDM5X2ZsdXNoX2NhY2hlX2FsbCh2b2lkKQogewogCWlmICghY3B1X2hhc19kY19hbGlhc2VzKQpAQCAtMzI5LDcgKzMzOSw3IEBACiAJfQogfQogCi12b2lkIF9faW5pdCB0eDM5X2NhY2hlX2luaXQodm9pZCkKK3ZvaWQgX19jcHVpbml0IHR4MzlfY2FjaGVfaW5pdCh2b2lkKQogewogCWV4dGVybiB2b2lkIGJ1aWxkX2NsZWFyX3BhZ2Uodm9pZCk7CiAJZXh0ZXJuIHZvaWQgYnVpbGRfY29weV9wYWdlKHZvaWQpOwpAQCAtMzQ0LDYgKzM1NCw4IEBACiAJc3dpdGNoIChjdXJyZW50X2NwdV90eXBlKCkpIHsKIAljYXNlIENQVV9UWDM5MTI6CiAJCS8qIFRYMzkvSCBjb3JlICh3cml0ZXRocnUgZGlyZWN0LW1hcCBjYWNoZSkgKi8KKwkJX19mbHVzaF9jYWNoZV92bWFwCT0gdHgzOV9fZmx1c2hfY2FjaGVfdm1hcDsKKwkJX19mbHVzaF9jYWNoZV92dW5tYXAJPSB0eDM5X19mbHVzaF9jYWNoZV92dW5tYXA7CiAJCWZsdXNoX2NhY2hlX2FsbAk9IHR4MzloX2ZsdXNoX2ljYWNoZV9hbGw7CiAJCV9fZmx1c2hfY2FjaGVfYWxsCT0gdHgzOWhfZmx1c2hfaWNhY2hlX2FsbDsKIAkJZmx1c2hfY2FjaGVfbW0JCT0gKHZvaWQgKikgdHgzOWhfZmx1c2hfaWNhY2hlX2FsbDsKQEAgLTM2OSw2ICszODEsOSBAQAogCQl3cml0ZV9jMF93aXJlZCgwKTsJLyogc2V0IDggb24gcmVzZXQuLi4gKi8KIAkJLyogYm9hcmQtZGVwZW5kZW50IGluaXQgY29kZSBtYXkgc2V0IFdCT04gKi8KIAorCQlfX2ZsdXNoX2NhY2hlX3ZtYXAJPSB0eDM5X19mbHVzaF9jYWNoZV92bWFwOworCQlfX2ZsdXNoX2NhY2hlX3Z1bm1hcAk9IHR4MzlfX2ZsdXNoX2NhY2hlX3Z1bm1hcDsKKwogCQlmbHVzaF9jYWNoZV9hbGwgPSB0eDM5X2ZsdXNoX2NhY2hlX2FsbDsKIAkJX19mbHVzaF9jYWNoZV9hbGwgPSB0eDM5X19fZmx1c2hfY2FjaGVfYWxsOwogCQlmbHVzaF9jYWNoZV9tbSA9IHR4MzlfZmx1c2hfY2FjaGVfbW07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2FjaGUuYyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCmluZGV4IDgxZjMwYWMuLmY1OTAzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCkBAIC0zMCw2ICszMCw5IEBACiAJdW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCAoKmZsdXNoX2ljYWNoZV9yYW5nZSkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCit2b2lkICgqX19mbHVzaF9jYWNoZV92bWFwKSh2b2lkKTsKK3ZvaWQgKCpfX2ZsdXNoX2NhY2hlX3Z1bm1hcCkodm9pZCk7CisKIC8qIE1JUFMgc3BlY2lmaWMgY2FjaGUgb3BlcmF0aW9ucyAqLwogdm9pZCAoKmZsdXNoX2NhY2hlX3NpZ3RyYW1wKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCAoKmxvY2FsX2ZsdXNoX2RhdGFfY2FjaGVfcGFnZSkodm9pZCAqIGFkZHIpOwpAQCAtOTIsMTIgKzk1LDE3IEBACiAKIHZvaWQgX19mbHVzaF9hbm9uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogewotCWlmIChwYWdlc19kb19hbGlhcygodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSksIHZtYWRkcikpIHsKLQkJdm9pZCAqa2FkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAotCQlrYWRkciA9IGttYXBfY29oZXJlbnQocGFnZSwgdm1hZGRyKTsKLQkJZmx1c2hfZGF0YV9jYWNoZV9wYWdlKCh1bnNpZ25lZCBsb25nKWthZGRyKTsKLQkJa3VubWFwX2NvaGVyZW50KCk7CisJaWYgKHBhZ2VzX2RvX2FsaWFzKGFkZHIsIHZtYWRkcikpIHsKKwkJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpICYmICFQYWdlX2RjYWNoZV9kaXJ0eShwYWdlKSkgeworCQkJdm9pZCAqa2FkZHI7CisKKwkJCWthZGRyID0ga21hcF9jb2hlcmVudChwYWdlLCB2bWFkZHIpOworCQkJZmx1c2hfZGF0YV9jYWNoZV9wYWdlKCh1bnNpZ25lZCBsb25nKWthZGRyKTsKKwkJCWt1bm1hcF9jb2hlcmVudCgpOworCQl9IGVsc2UKKwkJCWZsdXNoX2RhdGFfY2FjaGVfcGFnZShhZGRyKTsKIAl9CiB9CiAKQEAgLTEyMiw5ICsxMzAsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBjaGFyIGNhY2hlX3BhbmljW10gX19pbml0ZGF0YSA9ICJZZWVlLCB1bnN1cHBvcnRlZCBjYWNoZSBhcmNoaXRlY3R1cmUuIjsKK3N0YXRpYyBjaGFyIGNhY2hlX3BhbmljW10gX19jcHVpbml0ZGF0YSA9CisJIlllZWUsIHVuc3VwcG9ydGVkIGNhY2hlIGFyY2hpdGVjdHVyZS4iOwogCi12b2lkIF9faW5pdCBjcHVfY2FjaGVfaW5pdCh2b2lkKQordm9pZCBfX2RldmluaXQgY3B1X2NhY2hlX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2hhc18za19jYWNoZSkgewogCQlleHRlcm4gdm9pZCBfX3dlYWsgcjNrX2NhY2hlX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2V4LXNiMS5TIGIvYXJjaC9taXBzL21tL2NleC1zYjEuUwppbmRleCBlNTRhNjJmLi4yZDA4MjY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2V4LXNiMS5TCisrKyBiL2FyY2gvbWlwcy9tbS9jZXgtc2IxLlMKQEAgLTM0LDggKzM0LDYgQEAKIAkgKiBpcyBjaGFuZ2VkLgogCSAqLwogCi0gICAgICAgIF9fSU5JVAotCiAJLnNldAltaXBzNjQKIAkuc2V0CW5vcmVvcmRlcgogCS5zZXQJbm9hdApAQCAtNTEsNiArNDksOCBAQAogCSAqICgweDE3MC0weDE3ZikgYXJlIHVzZWQgdG8gcHJlc2VydmUgazAsIGsxLCBhbmQgcmEuCiAJICovCiAKKwlfX0NQVUlOSVQKKwogTEVBRihleGNlcHRfdmVjMl9zYjEpCiAJLyoKIAkgKiBJZiB0aGlzIGVycm9yIGlzIHJlY292ZXJhYmxlLCB3ZSBuZWVkIHRvIGV4aXQgdGhlIGhhbmRsZXIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDQ4MGRlYzAuLmM3YWVkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL21tL2luaXQuYwpAQCAtMjExLDcgKzIxMSw4IEBACiAJdm9pZCAqdmZyb20sICp2dG87CiAKIAl2dG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjEpOwotCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMgJiYgcGFnZV9tYXBwZWQoZnJvbSkpIHsKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzICYmCisJICAgIHBhZ2VfbWFwcGVkKGZyb20pICYmICFQYWdlX2RjYWNoZV9kaXJ0eShmcm9tKSkgewogCQl2ZnJvbSA9IGttYXBfY29oZXJlbnQoZnJvbSwgdmFkZHIpOwogCQljb3B5X3BhZ2UodnRvLCB2ZnJvbSk7CiAJCWt1bm1hcF9jb2hlcmVudCgpOwpAQCAtMjM0LDcgKzIzNSw4IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAogCXVuc2lnbmVkIGxvbmcgbGVuKQogewotCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMgJiYgcGFnZV9tYXBwZWQocGFnZSkpIHsKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzICYmCisJICAgIHBhZ2VfbWFwcGVkKHBhZ2UpICYmICFQYWdlX2RjYWNoZV9kaXJ0eShwYWdlKSkgewogCQl2b2lkICp2dG8gPSBrbWFwX2NvaGVyZW50KHBhZ2UsIHZhZGRyKSArICh2YWRkciAmIH5QQUdFX01BU0spOwogCQltZW1jcHkodnRvLCBzcmMsIGxlbik7CiAJCWt1bm1hcF9jb2hlcmVudCgpOwpAQCAtMjUzLDcgKzI1NSw4IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAogCXVuc2lnbmVkIGxvbmcgbGVuKQogewotCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMgJiYgcGFnZV9tYXBwZWQocGFnZSkpIHsKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzICYmCisJICAgIHBhZ2VfbWFwcGVkKHBhZ2UpICYmICFQYWdlX2RjYWNoZV9kaXJ0eShwYWdlKSkgewogCQl2b2lkICp2ZnJvbSA9IGttYXBfY29oZXJlbnQocGFnZSwgdmFkZHIpICsgKHZhZGRyICYgflBBR0VfTUFTSyk7CiAJCW1lbWNweShkc3QsIHZmcm9tLCBsZW4pOwogCQlrdW5tYXBfY29oZXJlbnQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9wZy1yNGsuYwppbmRleCA5MTg1ZmJmLi40NTVkZWRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGctcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3BnLXI0ay5jCkBAIC02NiwyMSArNjYsMjEgQEAKICAqIHdpdGggNjQtYml0IGtlcm5lbHMuICBUaGUgcHJlZmV0Y2ggb2Zmc2V0cyBoYXZlIGJlZW4gZXhwZXJpbWVudGFsbHkgdHVuZWQKICAqIGFuIE9yaWdpbiAyMDAuCiAgKi8KLXN0YXRpYyBpbnQgcHJlZl9vZmZzZXRfY2xlYXIgX19pbml0ZGF0YSA9IDUxMjsKLXN0YXRpYyBpbnQgcHJlZl9vZmZzZXRfY29weSAgX19pbml0ZGF0YSA9IDI1NjsKK3N0YXRpYyBpbnQgcHJlZl9vZmZzZXRfY2xlYXIgX19jcHVpbml0ZGF0YSA9IDUxMjsKK3N0YXRpYyBpbnQgcHJlZl9vZmZzZXRfY29weSAgX19jcHVpbml0ZGF0YSA9IDI1NjsKIAotc3RhdGljIHVuc2lnbmVkIGludCBwcmVmX3NyY19tb2RlIF9faW5pdGRhdGE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHByZWZfZHN0X21vZGUgX19pbml0ZGF0YTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHJlZl9zcmNfbW9kZSBfX2NwdWluaXRkYXRhOworc3RhdGljIHVuc2lnbmVkIGludCBwcmVmX2RzdF9tb2RlIF9fY3B1aW5pdGRhdGE7CiAKLXN0YXRpYyBpbnQgbG9hZF9vZmZzZXQgX19pbml0ZGF0YTsKLXN0YXRpYyBpbnQgc3RvcmVfb2Zmc2V0IF9faW5pdGRhdGE7CitzdGF0aWMgaW50IGxvYWRfb2Zmc2V0IF9fY3B1aW5pdGRhdGE7CitzdGF0aWMgaW50IHN0b3JlX29mZnNldCBfX2NwdWluaXRkYXRhOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgKmRlc3QsICplcGM7CitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdGRhdGEgKmRlc3QsICplcGM7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5zdHJ1Y3Rpb25fcGVuZGluZzsKIHN0YXRpYyB1bmlvbiBtaXBzX2luc3RydWN0aW9uIGRlbGF5ZWRfbWk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlbWl0X2luc3RydWN0aW9uKHVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gbWkpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgZW1pdF9pbnN0cnVjdGlvbih1bmlvbiBtaXBzX2luc3RydWN0aW9uIG1pKQogewogCWlmIChpbnN0cnVjdGlvbl9wZW5kaW5nKQogCQkqZXBjKysgPSBkZWxheWVkX21pLndvcmQ7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAllbWl0X2luc3RydWN0aW9uKG1pKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IF9fYnVpbGRfc3RvcmVfcmVnKGludCByZWcpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgX19idWlsZF9zdG9yZV9yZWcoaW50IHJlZykKIHsKIAl1bmlvbiBtaXBzX2luc3RydWN0aW9uIG1pOwogCXVuc2lnbmVkIGludCB3aWR0aDsKQEAgLTMzOSw3ICszMzksNyBAQAogCWZsdXNoX2RlbGF5X3Nsb3Rfb3Jfbm9wKCk7CiB9CiAKLXZvaWQgX19pbml0IGJ1aWxkX2NsZWFyX3BhZ2Uodm9pZCkKK3ZvaWQgX19jcHVpbml0IGJ1aWxkX2NsZWFyX3BhZ2Uodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgbG9vcF9zdGFydDsKIAl1bnNpZ25lZCBsb25nIG9mZjsKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCXByX2RlYnVnKCJcdC5zZXQgcG9wXG4iKTsKIH0KIAotdm9pZCBfX2luaXQgYnVpbGRfY29weV9wYWdlKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBidWlsZF9jb3B5X3BhZ2Uodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgbG9vcF9zdGFydDsKIAl1bnNpZ25lZCBsb25nIG9mZjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZy1zYjEuYyBiL2FyY2gvbWlwcy9tbS9wZy1zYjEuYwppbmRleCBhM2U5OGMyLi40OWUyODlkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGctc2IxLmMKKysrIGIvYXJjaC9taXBzL21tL3BnLXNiMS5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBETV9OVU1fQ0hBTk5FTFM7IGkrKykgewotCQljb25zdCB1NjQgYmFzZV92YWwgPSBDUEhZU0FERFIoJnBhZ2VfZGVzY3JbaV0pIHwKKwkJY29uc3QgdTY0IGJhc2VfdmFsID0gQ1BIWVNBRERSKCh1bnNpZ25lZCBsb25nKSZwYWdlX2Rlc2NyW2ldKSB8CiAJCQkJICAgICBWX0RNX0RTQ1JfQkFTRV9SSU5HU1ooMSk7CiAJCXZvaWQgKmJhc2VfcmVnID0gSU9BRERSKEFfRE1fUkVHSVNURVIoaSwgUl9ETV9EU0NSX0JBU0UpKTsKIApAQCAtMjI4LDExICsyMjgsMTEgQEAKIAogdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCiB7Ci0JdTY0IHRvX3BoeXMgPSBDUEhZU0FERFIocGFnZSk7CisJdTY0IHRvX3BoeXMgPSBDUEhZU0FERFIoKHVuc2lnbmVkIGxvbmcpcGFnZSk7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIGlmIHRoZSBwYWdlIGlzIG5vdCBpbiBLU0VHMCwgdXNlIG9sZCB3YXkgKi8KLQlpZiAoKGxvbmcpS1NFR1gocGFnZSkgIT0gKGxvbmcpQ0tTRUcwKQorCWlmICgobG9uZylLU0VHWCgodW5zaWduZWQgbG9uZylwYWdlKSAhPSAobG9uZylDS1NFRzApCiAJCXJldHVybiBjbGVhcl9wYWdlX2NwdShwYWdlKTsKIAogCXBhZ2VfZGVzY3JbY3B1XS5kc2NyX2EgPSB0b19waHlzIHwgTV9ETV9EU0NSQV9aRVJPX01FTSB8CkBAIC0yNTIsMTMgKzI1MiwxMyBAQAogCiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKIHsKLQl1NjQgZnJvbV9waHlzID0gQ1BIWVNBRERSKGZyb20pOwotCXU2NCB0b19waHlzID0gQ1BIWVNBRERSKHRvKTsKKwl1NjQgZnJvbV9waHlzID0gQ1BIWVNBRERSKCh1bnNpZ25lZCBsb25nKWZyb20pOworCXU2NCB0b19waHlzID0gQ1BIWVNBRERSKCh1bnNpZ25lZCBsb25nKXRvKTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogaWYgYW55IHBhZ2UgaXMgbm90IGluIEtTRUcwLCB1c2Ugb2xkIHdheSAqLwotCWlmICgobG9uZylLU0VHWCh0bykgIT0gKGxvbmcpQ0tTRUcwCi0JICAgIHx8IChsb25nKUtTRUdYKGZyb20pICE9IChsb25nKUNLU0VHMCkKKwlpZiAoKGxvbmcpS1NFR1goKHVuc2lnbmVkIGxvbmcpdG8pICE9IChsb25nKUNLU0VHMAorCSAgICB8fCAobG9uZylLU0VHWCgodW5zaWduZWQgbG9uZylmcm9tKSAhPSAobG9uZylDS1NFRzApCiAJCXJldHVybiBjb3B5X3BhZ2VfY3B1KHRvLCBmcm9tKTsKIAogCXBhZ2VfZGVzY3JbY3B1XS5kc2NyX2EgPSB0b19waHlzIHwgTV9ETV9EU0NSQV9MMkNfREVTVCB8CkBAIC0yOTMsMTAgKzI5MywxMCBAQAogRVhQT1JUX1NZTUJPTChjbGVhcl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woY29weV9wYWdlKTsKIAotdm9pZCBfX2luaXQgYnVpbGRfY2xlYXJfcGFnZSh2b2lkKQordm9pZCBfX2NwdWluaXQgYnVpbGRfY2xlYXJfcGFnZSh2b2lkKQogewogfQogCi12b2lkIF9faW5pdCBidWlsZF9jb3B5X3BhZ2Uodm9pZCkKK3ZvaWQgX19jcHVpbml0IGJ1aWxkX2NvcHlfcGFnZSh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3NjLWlwMjIuYyBiL2FyY2gvbWlwcy9tbS9zYy1pcDIyLmMKaW5kZXggZDIzNmNmOC4uMWY2MDJhMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3NjLWlwMjIuYworKysgYi9hcmNoL21pcHMvbW0vc2MtaXAyMi5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkuYmNfaW52ID0gaW5keV9zY193YmFja19pbnZhbGlkYXRlCiB9OwogCi12b2lkIF9faW5pdCBpbmR5X3NjX2luaXQodm9pZCkKK3ZvaWQgX19jcHVpbml0IGluZHlfc2NfaW5pdCh2b2lkKQogewogCWlmIChpbmR5X3NjX3Byb2JlKCkpIHsKIAkJaW5keV9zY19lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMgYi9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCmluZGV4IGMxMzE3MGIuLmI1NWMyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLW1pcHMuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBfX2luaXQgbWlwc19zY19pbml0KHZvaWQpCitpbnQgX19jcHVpbml0IG1pcHNfc2NfaW5pdCh2b2lkKQogewogCWludCBmb3VuZCA9IG1pcHNfc2NfcHJvYmUoKTsKIAlpZiAoZm91bmQpIHsKQEAgLTEwOSw0ICsxMDksMyBAQAogCX0KIAlyZXR1cm4gZm91bmQ7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1yNWsuYyBiL2FyY2gvbWlwcy9tbS9zYy1yNWsuYwppbmRleCBkMzViNmMxLi5mMzMwZDM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vc2MtcjVrLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLXI1ay5jCkBAIC05OSw3ICs5OSw3IEBACiAJLmJjX2ludiA9IHI1a19kbWFfY2FjaGVfaW52X3NjCiB9OwogCi12b2lkIF9faW5pdCByNWtfc2NfaW5pdCh2b2lkKQordm9pZCBfX2NwdWluaXQgcjVrX3NjX2luaXQodm9pZCkKIHsKIAlpZiAocjVrX3NjX3Byb2JlKCkpIHsKIAkJcjVrX3NjX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3NjLXJtN2suYyBiL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMKaW5kZXggMzFlYzczMC4uZmMyMjdmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3NjLXJtN2suYworKysgYi9hcmNoL21pcHMvbW0vc2Mtcm03ay5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkuYmNfaW52ID0gcm03a19zY19pbnYKIH07CiAKLXZvaWQgX19pbml0IHJtN2tfc2NfaW5pdCh2b2lkKQordm9pZCBfX2NwdWluaXQgcm03a19zY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwogCXVuc2lnbmVkIGludCBjb25maWcgPSByZWFkX2MwX2NvbmZpZygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yM2suYyBiL2FyY2gvbWlwcy9tbS90bGItcjNrLmMKaW5kZXggNzk0OGU5YS4uYTc4MjU0OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yM2suYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXIzay5jCkBAIC0yODEsNyArMjgxLDcgQEAKIAl9CiB9CiAKLXZvaWQgX19pbml0IHRsYl9pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCB0bGJfaW5pdCh2b2lkKQogewogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggNzRhZTAzNC4uNjMwNjVkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC0zODgsNyArMzg4LDcgQEAKICAqIGxpZmV0aW1lIG9mIHRoZSBzeXN0ZW0KICAqLwogCi1zdGF0aWMgaW50IHRlbXBfdGxiX2VudHJ5IF9faW5pdGRhdGE7CitzdGF0aWMgaW50IHRlbXBfdGxiX2VudHJ5IF9fY3B1aW5pdGRhdGE7CiAKIF9faW5pdCBpbnQgYWRkX3RlbXBvcmFyeV9lbnRyeSh1bnNpZ25lZCBsb25nIGVudHJ5bG8wLCB1bnNpZ25lZCBsb25nIGVudHJ5bG8xLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW50cnloaSwgdW5zaWduZWQgbG9uZyBwYWdlbWFzaykKQEAgLTQyNyw3ICs0MjcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwcm9iZV90bGIodW5zaWduZWQgbG9uZyBjb25maWcpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcHJvYmVfdGxiKHVuc2lnbmVkIGxvbmcgY29uZmlnKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgcmVnOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJYy0+dGxic2l6ZSA9ICgocmVnID4+IDI1KSAmIDB4M2YpICsgMTsKIH0KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG50bGIgPSAwOworc3RhdGljIGludCBfX2NwdWluaXRkYXRhIG50bGIgPSAwOwogc3RhdGljIGludCBfX2luaXQgc2V0X250bGIoY2hhciAqc3RyKQogewogCWdldF9vcHRpb24oJnN0ciwgJm50bGIpOwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAKIF9fc2V0dXAoIm50bGI9Iiwgc2V0X250bGIpOwogCi12b2lkIF9faW5pdCB0bGJfaW5pdCh2b2lkKQordm9pZCBfX2NwdWluaXQgdGxiX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKIApAQCAtNDczLDcgKzQ3Myw3IEBACiAJICogICAtIE9uIFI0NjAwIDEuNyB0aGUgdGxicCBuZXZlciBoaXRzIGZvciBwYWdlcyBzbWFsbGVyIHRoYW4KIAkgKiAgICAgdGhlIHZhbHVlIGluIHRoZSBjMF9wYWdlbWFzayByZWdpc3Rlci4KIAkgKiAgIC0gVGhlIGVudGlyZSBtbSBoYW5kbGluZyBhc3N1bWVzIHRoZSBjMF9wYWdlbWFzayByZWdpc3RlciB0bwotCSAqICAgICBiZSBzZXQgZm9yIDRrYiBwYWdlcy4KKwkgKiAgICAgYmUgc2V0IHRvIGZpeGVkLXNpemUgcGFnZXMuCiAJICovCiAJcHJvYmVfdGxiKGNvbmZpZyk7CiAJd3JpdGVfYzBfcGFnZW1hc2soUE1fREVGQVVMVF9NQVNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjhrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI4ay5jCmluZGV4IGJkODQwOWQuLjRmMDFhM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjhrLmMKKysrIGIvYXJjaC9taXBzL21tL3RsYi1yOGsuYwpAQCAtMjE0LDE0ICsyMTQsMTQgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwcm9iZV90bGIodW5zaWduZWQgbG9uZyBjb25maWcpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcHJvYmVfdGxiKHVuc2lnbmVkIGxvbmcgY29uZmlnKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIAogCWMtPnRsYnNpemUgPSAzICogMTI4OwkJLyogMyBzZXRzIGVhY2ggMTI4IGVudHJpZXMgKi8KIH0KIAotdm9pZCBfX2luaXQgdGxiX2luaXQodm9pZCkKK3ZvaWQgX19jcHVpbml0IHRsYl9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNvbmZpZyA9IHJlYWRfYzBfY29uZmlnKCk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IDIxOGE2Y2MuLjM4MjczOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC02MCw3ICs2MCw3IEBACiAgKiB3aHk7IGl0J3Mgbm90IGFuIGlzc3VlIGNhdXNlZCBieSB0aGUgY29yZSBSVEwuCiAgKgogICovCi1zdGF0aWMgaW50IF9faW5pdCBtNGtjX3RsYnBfd2FyKHZvaWQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBtNGtjX3RsYnBfd2FyKHZvaWQpCiB7CiAJcmV0dXJuIChjdXJyZW50X2NwdV9kYXRhLnByb2Nlc3Nvcl9pZCAmIDB4ZmZmZjAwKSA9PQogCSAgICAgICAoUFJJRF9DT01QX01JUFMgfCBQUklEX0lNUF80S0MpOwpAQCAtMTQ0LDE2ICsxNDQsMTYgQEAKICAqIFdlIGRlbGliZXJhdGVseSBjaG9zZSBhIGJ1ZmZlciBzaXplIG9mIDEyOCwgc28gd2Ugd29uJ3Qgc2NyaWJibGUKICAqIG92ZXIgYW55dGhpbmcgaW1wb3J0YW50IG9uIG92ZXJmbG93IGJlZm9yZSB3ZSBwYW5pYy4KICAqLwotc3RhdGljIHUzMiB0bGJfaGFuZGxlclsxMjhdIF9faW5pdGRhdGE7CitzdGF0aWMgdTMyIHRsYl9oYW5kbGVyWzEyOF0gX19jcHVpbml0ZGF0YTsKIAogLyogc2ltcGx5IGFzc3VtZSB3b3JzdCBjYXNlIHNpemUgZm9yIGxhYmVscyBhbmQgcmVsb2NzICovCi1zdGF0aWMgc3RydWN0IHVhc21fbGFiZWwgbGFiZWxzWzEyOF0gX19pbml0ZGF0YTsKLXN0YXRpYyBzdHJ1Y3QgdWFzbV9yZWxvYyByZWxvY3NbMTI4XSBfX2luaXRkYXRhOworc3RhdGljIHN0cnVjdCB1YXNtX2xhYmVsIGxhYmVsc1sxMjhdIF9fY3B1aW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IHVhc21fcmVsb2MgcmVsb2NzWzEyOF0gX19jcHVpbml0ZGF0YTsKIAogLyoKICAqIFRoZSBSMzAwMCBUTEIgaGFuZGxlciBpcyBzaW1wbGUuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9yMzAwMF90bGJfcmVmaWxsX2hhbmRsZXIodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBidWlsZF9yMzAwMF90bGJfcmVmaWxsX2hhbmRsZXIodm9pZCkKIHsKIAlsb25nIHBnZGMgPSAobG9uZylwZ2RfY3VycmVudDsKIAl1MzIgKnA7CkBAIC0xOTcsNyArMTk3LDcgQEAKICAqIG90aGVyIG9uZS5UbyBrZWVwIHRoaW5ncyBzaW1wbGUsIHdlIGZpcnN0IGFzc3VtZSBsaW5lYXIgc3BhY2UsCiAgKiB0aGVuIHdlIHJlbG9jYXRlIGl0IHRvIHRoZSBmaW5hbCBoYW5kbGVyIGxheW91dCBhcyBuZWVkZWQuCiAgKi8KLXN0YXRpYyB1MzIgZmluYWxfaGFuZGxlcls2NF0gX19pbml0ZGF0YTsKK3N0YXRpYyB1MzIgZmluYWxfaGFuZGxlcls2NF0gX19jcHVpbml0ZGF0YTsKIAogLyoKICAqIEhhemFyZHMKQEAgLTIyMSw3ICsyMjEsNyBAQAogICoKICAqIEFzIGlmIHdlIE1JUFMgaGFja2VycyB3b3VsZG4ndCBrbm93IGhvdyB0byBub3AgcGlwZWxpbmVzIGhhcHB5IC4uLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQgYnVpbGRfdGxiX3Byb2JlX2VudHJ5KHUzMiAqKnApCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgX19tYXliZV91bnVzZWQgYnVpbGRfdGxiX3Byb2JlX2VudHJ5KHUzMiAqKnApCiB7CiAJc3dpdGNoIChjdXJyZW50X2NwdV90eXBlKCkpIHsKIAkvKiBGb3VuZCBieSBleHBlcmltZW50OiBSNDYwMCB2Mi4wIG5lZWRzIHRoaXMsIHRvby4gICovCkBAIC0yNDUsNyArMjQ1LDcgQEAKICAqLwogZW51bSB0bGJfd3JpdGVfZW50cnkgeyB0bGJfcmFuZG9tLCB0bGJfaW5kZXhlZCB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfdGxiX3dyaXRlX2VudHJ5KHUzMiAqKnAsIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBidWlsZF90bGJfd3JpdGVfZW50cnkodTMyICoqcCwgc3RydWN0IHVhc21fbGFiZWwgKipsLAogCQkJCQkgc3RydWN0IHVhc21fcmVsb2MgKipyLAogCQkJCQkgZW51bSB0bGJfd3JpdGVfZW50cnkgd21vZGUpCiB7CkBAIC0zMDcsNiArMzA3LDcgQEAKIAljYXNlIENQVV9SMTIwMDA6CiAJY2FzZSBDUFVfUjE0MDAwOgogCWNhc2UgQ1BVXzRLQzoKKwljYXNlIENQVV80S0VDOgogCWNhc2UgQ1BVX1NCMToKIAljYXNlIENQVV9TQjFBOgogCWNhc2UgQ1BVXzRLU0M6CkBAIC0zODksNyArMzkwLDcgQEAKICAqIFRNUCBhbmQgUFRSIGFyZSBzY3JhdGNoLgogICogVE1QIHdpbGwgYmUgY2xvYmJlcmVkLCBQVFIgd2lsbCBob2xkIHRoZSBwbWQgZW50cnkuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19jcHVpbml0CiBidWlsZF9nZXRfcG1kZTY0KHUzMiAqKnAsIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwgc3RydWN0IHVhc21fcmVsb2MgKipyLAogCQkgdW5zaWduZWQgaW50IHRtcCwgdW5zaWduZWQgaW50IHB0cikKIHsKQEAgLTQ1MCw3ICs0NTEsNyBAQAogICogQlZBRERSIGlzIHRoZSBmYXVsdGluZyBhZGRyZXNzLCBQVFIgaXMgc2NyYXRjaC4KICAqIFBUUiB3aWxsIGhvbGQgdGhlIHBnZCBmb3Igdm1hbGxvYy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0CitzdGF0aWMgdm9pZCBfX2NwdWluaXQKIGJ1aWxkX2dldF9wZ2Rfdm1hbGxvYzY0KHUzMiAqKnAsIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwgc3RydWN0IHVhc21fcmVsb2MgKipyLAogCQkJdW5zaWduZWQgaW50IGJ2YWRkciwgdW5zaWduZWQgaW50IHB0cikKIHsKQEAgLTUyMiw3ICs1MjMsNyBAQAogICogVE1QIGFuZCBQVFIgYXJlIHNjcmF0Y2guCiAgKiBUTVAgd2lsbCBiZSBjbG9iYmVyZWQsIFBUUiB3aWxsIGhvbGQgdGhlIHBnZCBlbnRyeS4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgX19tYXliZV91bnVzZWQKIGJ1aWxkX2dldF9wZ2RlMzIodTMyICoqcCwgdW5zaWduZWQgaW50IHRtcCwgdW5zaWduZWQgaW50IHB0cikKIHsKIAlsb25nIHBnZGMgPSAobG9uZylwZ2RfY3VycmVudDsKQEAgLTU1Nyw3ICs1NTgsNyBAQAogCiAjZW5kaWYgLyogIUNPTkZJR182NEJJVCAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfYWRqdXN0X2NvbnRleHQodTMyICoqcCwgdW5zaWduZWQgaW50IGN0eCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBidWlsZF9hZGp1c3RfY29udGV4dCh1MzIgKipwLCB1bnNpZ25lZCBpbnQgY3R4KQogewogCXVuc2lnbmVkIGludCBzaGlmdCA9IDQgLSAoUFRFX1RfTE9HMiArIDEpICsgUEFHRV9TSElGVCAtIDEyOwogCXVuc2lnbmVkIGludCBtYXNrID0gKFBUUlNfUEVSX1BURSAvIDIgLSAxKSA8PCAoUFRFX1RfTE9HMiArIDEpOwpAQCAtNTgzLDcgKzU4NCw3IEBACiAJdWFzbV9pX2FuZGkocCwgY3R4LCBjdHgsIG1hc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfZ2V0X3B0ZXAodTMyICoqcCwgdW5zaWduZWQgaW50IHRtcCwgdW5zaWduZWQgaW50IHB0cikKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBidWlsZF9nZXRfcHRlcCh1MzIgKipwLCB1bnNpZ25lZCBpbnQgdG1wLCB1bnNpZ25lZCBpbnQgcHRyKQogewogCS8qCiAJICogQnVnIHdvcmthcm91bmQgZm9yIHRoZSBOZXZhZGEuIEl0IHNlZW1zIGFzIGlmIHVuZGVyIGNlcnRhaW4KQEAgLTYwOCw3ICs2MDksNyBAQAogCVVBU01faV9BRERVKHAsIHB0ciwgcHRyLCB0bXApOyAvKiBhZGQgaW4gb2Zmc2V0ICovCiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF91cGRhdGVfZW50cmllcyh1MzIgKipwLCB1bnNpZ25lZCBpbnQgdG1wLAorc3RhdGljIHZvaWQgX19jcHVpbml0IGJ1aWxkX3VwZGF0ZV9lbnRyaWVzKHUzMiAqKnAsIHVuc2lnbmVkIGludCB0bXAsCiAJCQkJCXVuc2lnbmVkIGludCBwdGVwKQogewogCS8qCkBAIC02NTEsNyArNjUyLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfcjQwMDBfdGxiX3JlZmlsbF9oYW5kbGVyKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYnVpbGRfcjQwMDBfdGxiX3JlZmlsbF9oYW5kbGVyKHZvaWQpCiB7CiAJdTMyICpwID0gdGxiX2hhbmRsZXI7CiAJc3RydWN0IHVhc21fbGFiZWwgKmwgPSBsYWJlbHM7CkBAIC03ODMsNyArNzg0LDcgQEAKIHUzMiBoYW5kbGVfdGxic1tGQVNUUEFUSF9TSVpFXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogdTMyIGhhbmRsZV90bGJtW0ZBU1RQQVRIX1NJWkVdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiAKLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19jcHVpbml0CiBpUFRFX0xXKHUzMiAqKnAsIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwgdW5zaWduZWQgaW50IHB0ZSwgdW5zaWduZWQgaW50IHB0cikKIHsKICNpZmRlZiBDT05GSUdfU01QCkBAIC04MDMsNyArODA0LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdAogaVBURV9TVyh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCBwdGUsIHVuc2lnbmVkIGludCBwdHIsCiAJdW5zaWduZWQgaW50IG1vZGUpCiB7CkBAIC04NjMsNyArODY0LDcgQEAKICAqIHRoZSBwYWdlIHRhYmxlIHdoZXJlIHRoaXMgUFRFIGlzIGxvY2F0ZWQsIFBURSB3aWxsIGJlIHJlLWxvYWRlZAogICogd2l0aCBpdCdzIG9yaWdpbmFsIHZhbHVlLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdAogYnVpbGRfcHRlX3ByZXNlbnQodTMyICoqcCwgc3RydWN0IHVhc21fbGFiZWwgKipsLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCiAJCSAgdW5zaWduZWQgaW50IHB0ZSwgdW5zaWduZWQgaW50IHB0ciwgZW51bSBsYWJlbF9pZCBsaWQpCiB7CkBAIC04NzQsNyArODc1LDcgQEAKIH0KIAogLyogTWFrZSBQVEUgdmFsaWQsIHN0b3JlIHJlc3VsdCBpbiBQVFIuICovCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdAogYnVpbGRfbWFrZV92YWxpZCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCBwdGUsCiAJCSB1bnNpZ25lZCBpbnQgcHRyKQogewpAQCAtODg3LDcgKzg4OCw3IEBACiAgKiBDaGVjayBpZiBQVEUgY2FuIGJlIHdyaXR0ZW4gdG8sIGlmIG5vdCBicmFuY2ggdG8gTEFCRUwuIFJlZ2FyZGxlc3MKICAqIHJlc3RvcmUgUFRFIHdpdGggdmFsdWUgZnJvbSBQVFIgd2hlbiBkb25lLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdAogYnVpbGRfcHRlX3dyaXRhYmxlKHUzMiAqKnAsIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwgc3RydWN0IHVhc21fcmVsb2MgKipyLAogCQkgICB1bnNpZ25lZCBpbnQgcHRlLCB1bnNpZ25lZCBpbnQgcHRyLCBlbnVtIGxhYmVsX2lkIGxpZCkKIHsKQEAgLTkwMCw3ICs5MDEsNyBAQAogLyogTWFrZSBQVEUgd3JpdGFibGUsIHVwZGF0ZSBzb2Z0d2FyZSBzdGF0dXMgYml0cyBhcyB3ZWxsLCB0aGVuIHN0b3JlCiAgKiBhdCBQVFIuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19jcHVpbml0CiBidWlsZF9tYWtlX3dyaXRlKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHB0ZSwKIAkJIHVuc2lnbmVkIGludCBwdHIpCiB7CkBAIC05MTQsNyArOTE1LDcgQEAKICAqIENoZWNrIGlmIFBURSBjYW4gYmUgbW9kaWZpZWQsIGlmIG5vdCBicmFuY2ggdG8gTEFCRUwuIFJlZ2FyZGxlc3MKICAqIHJlc3RvcmUgUFRFIHdpdGggdmFsdWUgZnJvbSBQVFIgd2hlbiBkb25lLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdAogYnVpbGRfcHRlX21vZGlmaWFibGUodTMyICoqcCwgc3RydWN0IHVhc21fbGFiZWwgKipsLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCiAJCSAgICAgdW5zaWduZWQgaW50IHB0ZSwgdW5zaWduZWQgaW50IHB0ciwgZW51bSBsYWJlbF9pZCBsaWQpCiB7CkBAIC05MzEsNyArOTMyLDcgQEAKICAqIFRoaXMgcGxhY2VzIHRoZSBwdGUgaW50byBFTlRSWUxPMCBhbmQgd3JpdGVzIGl0IHdpdGggdGxid2kuCiAgKiBUaGVuIGl0IHJldHVybnMuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19jcHVpbml0CiBidWlsZF9yMzAwMF9wdGVfcmVsb2FkX3RsYndpKHUzMiAqKnAsIHVuc2lnbmVkIGludCBwdGUsIHVuc2lnbmVkIGludCB0bXApCiB7CiAJdWFzbV9pX210YzAocCwgcHRlLCBDMF9FTlRSWUxPMCk7IC8qIGNwMCBkZWxheSAqLwpAQCAtOTQ3LDcgKzk0OCw3IEBACiAgKiBtYXkgaGF2ZSB0aGUgcHJvYmUgZmFpbCBiaXQgc2V0IGFzIGEgcmVzdWx0IG9mIGEgdHJhcCBvbiBhCiAgKiBrc2VnMiBhY2Nlc3MsIGkuZS4gd2l0aG91dCByZWZpbGwuICBUaGVuIGl0IHJldHVybnMuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19jcHVpbml0CiBidWlsZF9yMzAwMF90bGJfcmVsb2FkX3dyaXRlKHUzMiAqKnAsIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwKIAkJCSAgICAgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcHRlLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdG1wKQpAQCAtOTY1LDcgKzk2Niw3IEBACiAJdWFzbV9pX3JmZShwKTsgLyogYnJhbmNoIGRlbGF5ICovCiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19jcHVpbml0CiBidWlsZF9yMzAwMF90bGJjaGFuZ2VfaGFuZGxlcl9oZWFkKHUzMiAqKnAsIHVuc2lnbmVkIGludCBwdGUsCiAJCQkJICAgdW5zaWduZWQgaW50IHB0cikKIHsKQEAgLTk4NSw3ICs5ODYsNyBAQAogCXVhc21faV90bGJwKHApOyAvKiBsb2FkIGRlbGF5ICovCiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9yMzAwMF90bGJfbG9hZF9oYW5kbGVyKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYnVpbGRfcjMwMDBfdGxiX2xvYWRfaGFuZGxlcih2b2lkKQogewogCXUzMiAqcCA9IGhhbmRsZV90bGJsOwogCXN0cnVjdCB1YXNtX2xhYmVsICpsID0gbGFiZWxzOwpAQCAtMTAxNSw3ICsxMDE2LDcgQEAKIAlkdW1wX2hhbmRsZXIoaGFuZGxlX3RsYmwsIEFSUkFZX1NJWkUoaGFuZGxlX3RsYmwpKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX3IzMDAwX3RsYl9zdG9yZV9oYW5kbGVyKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYnVpbGRfcjMwMDBfdGxiX3N0b3JlX2hhbmRsZXIodm9pZCkKIHsKIAl1MzIgKnAgPSBoYW5kbGVfdGxiczsKIAlzdHJ1Y3QgdWFzbV9sYWJlbCAqbCA9IGxhYmVsczsKQEAgLTEwNDUsNyArMTA0Niw3IEBACiAJZHVtcF9oYW5kbGVyKGhhbmRsZV90bGJzLCBBUlJBWV9TSVpFKGhhbmRsZV90bGJzKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9yMzAwMF90bGJfbW9kaWZ5X2hhbmRsZXIodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBidWlsZF9yMzAwMF90bGJfbW9kaWZ5X2hhbmRsZXIodm9pZCkKIHsKIAl1MzIgKnAgPSBoYW5kbGVfdGxibTsKIAlzdHJ1Y3QgdWFzbV9sYWJlbCAqbCA9IGxhYmVsczsKQEAgLTEwNzgsNyArMTA3OSw3IEBACiAvKgogICogUjQwMDAgc3R5bGUgVExCIGxvYWQvc3RvcmUvbW9kaWZ5IGhhbmRsZXJzLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdAogYnVpbGRfcjQwMDBfdGxiY2hhbmdlX2hhbmRsZXJfaGVhZCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9sYWJlbCAqKmwsCiAJCQkJICAgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcHRlLAogCQkJCSAgIHVuc2lnbmVkIGludCBwdHIpCkBAIC0xMTAzLDcgKzExMDQsNyBAQAogCQlidWlsZF90bGJfcHJvYmVfZW50cnkocCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19jcHVpbml0CiBidWlsZF9yNDAwMF90bGJjaGFuZ2VfaGFuZGxlcl90YWlsKHUzMiAqKnAsIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwKIAkJCQkgICBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCB0bXAsCiAJCQkJICAgdW5zaWduZWQgaW50IHB0cikKQEAgLTExMjAsNyArMTEyMSw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX3I0MDAwX3RsYl9sb2FkX2hhbmRsZXIodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBidWlsZF9yNDAwMF90bGJfbG9hZF9oYW5kbGVyKHZvaWQpCiB7CiAJdTMyICpwID0gaGFuZGxlX3RsYmw7CiAJc3RydWN0IHVhc21fbGFiZWwgKmwgPSBsYWJlbHM7CkBAIC0xMTYwLDcgKzExNjEsNyBAQAogCWR1bXBfaGFuZGxlcihoYW5kbGVfdGxibCwgQVJSQVlfU0laRShoYW5kbGVfdGxibCkpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfcjQwMDBfdGxiX3N0b3JlX2hhbmRsZXIodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBidWlsZF9yNDAwMF90bGJfc3RvcmVfaGFuZGxlcih2b2lkKQogewogCXUzMiAqcCA9IGhhbmRsZV90bGJzOwogCXN0cnVjdCB1YXNtX2xhYmVsICpsID0gbGFiZWxzOwpAQCAtMTE5MSw3ICsxMTkyLDcgQEAKIAlkdW1wX2hhbmRsZXIoaGFuZGxlX3RsYnMsIEFSUkFZX1NJWkUoaGFuZGxlX3RsYnMpKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX3I0MDAwX3RsYl9tb2RpZnlfaGFuZGxlcih2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGJ1aWxkX3I0MDAwX3RsYl9tb2RpZnlfaGFuZGxlcih2b2lkKQogewogCXUzMiAqcCA9IGhhbmRsZV90bGJtOwogCXN0cnVjdCB1YXNtX2xhYmVsICpsID0gbGFiZWxzOwpAQCAtMTIyMyw3ICsxMjI0LDcgQEAKIAlkdW1wX2hhbmRsZXIoaGFuZGxlX3RsYm0sIEFSUkFZX1NJWkUoaGFuZGxlX3RsYm0pKTsKIH0KIAotdm9pZCBfX2luaXQgYnVpbGRfdGxiX3JlZmlsbF9oYW5kbGVyKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBidWlsZF90bGJfcmVmaWxsX2hhbmRsZXIodm9pZCkKIHsKIAkvKgogCSAqIFRoZSByZWZpbGwgaGFuZGxlciBpcyBnZW5lcmF0ZWQgcGVyLUNQVSwgbXVsdGktbm9kZSBzeXN0ZW1zCkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgZmx1c2hfdGxiX2hhbmRsZXJzKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBmbHVzaF90bGJfaGFuZGxlcnModm9pZCkKIHsKIAlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpaGFuZGxlX3RsYmwsCiAJCQkgICAodW5zaWduZWQgbG9uZyloYW5kbGVfdGxibCArIHNpemVvZihoYW5kbGVfdGxibCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3Vhc20uYyBiL2FyY2gvbWlwcy9tbS91YXNtLmMKaW5kZXggZTNmNzRlZC4uMWE2Zjc3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3Vhc20uYworKysgYi9hcmNoL21pcHMvbW0vdWFzbS5jCkBAIC04Miw3ICs4Miw3IEBACiAJIHwgKGUpIDw8IFJFX1NICQkJCQkJXAogCSB8IChmKSA8PCBGVU5DX1NIKQogCi1zdGF0aWMgc3RydWN0IGluc24gaW5zbl90YWJsZVtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGluc24gaW5zbl90YWJsZVtdIF9fY3B1aW5pdGRhdGEgPSB7CiAJeyBpbnNuX2FkZGl1LCBNKGFkZGl1X29wLCAwLCAwLCAwLCAwLCAwKSwgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fYWRkdSwgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBhZGR1X29wKSwgUlMgfCBSVCB8IFJEIH0sCiAJeyBpbnNuX2FuZCwgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBhbmRfb3ApLCBSUyB8IFJUIHwgUkQgfSwKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiAjdW5kZWYgTQogCi1zdGF0aWMgaW5saW5lIF9faW5pdCB1MzIgYnVpbGRfcnModTMyIGFyZykKK3N0YXRpYyBpbmxpbmUgX19jcHVpbml0IHUzMiBidWlsZF9ycyh1MzIgYXJnKQogewogCWlmIChhcmcgJiB+UlNfTUFTSykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTWljcm8tYXNzZW1ibGVyIGZpZWxkIG92ZXJmbG93XG4iKTsKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXJldHVybiAoYXJnICYgUlNfTUFTSykgPDwgUlNfU0g7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19pbml0IHUzMiBidWlsZF9ydCh1MzIgYXJnKQorc3RhdGljIGlubGluZSBfX2NwdWluaXQgdTMyIGJ1aWxkX3J0KHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5SVF9NQVNLKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJcmV0dXJuIChhcmcgJiBSVF9NQVNLKSA8PCBSVF9TSDsKIH0KIAotc3RhdGljIGlubGluZSBfX2luaXQgdTMyIGJ1aWxkX3JkKHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fY3B1aW5pdCB1MzIgYnVpbGRfcmQodTMyIGFyZykKIHsKIAlpZiAoYXJnICYgflJEX01BU0spCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1pY3JvLWFzc2VtYmxlciBmaWVsZCBvdmVyZmxvd1xuIik7CkBAIC0xNTksNyArMTU5LDcgQEAKIAlyZXR1cm4gKGFyZyAmIFJEX01BU0spIDw8IFJEX1NIOwogfQogCi1zdGF0aWMgaW5saW5lIF9faW5pdCB1MzIgYnVpbGRfcmUodTMyIGFyZykKK3N0YXRpYyBpbmxpbmUgX19jcHVpbml0IHUzMiBidWlsZF9yZSh1MzIgYXJnKQogewogCWlmIChhcmcgJiB+UkVfTUFTSykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTWljcm8tYXNzZW1ibGVyIGZpZWxkIG92ZXJmbG93XG4iKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCXJldHVybiAoYXJnICYgUkVfTUFTSykgPDwgUkVfU0g7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19pbml0IHUzMiBidWlsZF9zaW1tKHMzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fY3B1aW5pdCB1MzIgYnVpbGRfc2ltbShzMzIgYXJnKQogewogCWlmIChhcmcgPiAweDdmZmYgfHwgYXJnIDwgLTB4ODAwMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTWljcm8tYXNzZW1ibGVyIGZpZWxkIG92ZXJmbG93XG4iKTsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCXJldHVybiBhcmcgJiAweGZmZmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19pbml0IHUzMiBidWlsZF91aW1tKHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fY3B1aW5pdCB1MzIgYnVpbGRfdWltbSh1MzIgYXJnKQogewogCWlmIChhcmcgJiB+SU1NX01BU0spCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1pY3JvLWFzc2VtYmxlciBmaWVsZCBvdmVyZmxvd1xuIik7CkBAIC0xODMsNyArMTgzLDcgQEAKIAlyZXR1cm4gYXJnICYgSU1NX01BU0s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19pbml0IHUzMiBidWlsZF9iaW1tKHMzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fY3B1aW5pdCB1MzIgYnVpbGRfYmltbShzMzIgYXJnKQogewogCWlmIChhcmcgPiAweDFmZmZmIHx8IGFyZyA8IC0weDIwMDAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJNaWNyby1hc3NlbWJsZXIgZmllbGQgb3ZlcmZsb3dcbiIpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJcmV0dXJuICgoYXJnIDwgMCkgPyAoMSA8PCAxNSkgOiAwKSB8ICgoYXJnID4+IDIpICYgMHg3ZmZmKTsKIH0KIAotc3RhdGljIGlubGluZSBfX2luaXQgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZykKK3N0YXRpYyBpbmxpbmUgX19jcHVpbml0IHUzMiBidWlsZF9qaW1tKHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH4oKEpJTU1fTUFTSykgPDwgMikpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1pY3JvLWFzc2VtYmxlciBmaWVsZCBvdmVyZmxvd1xuIik7CkBAIC0yMDIsNyArMjAyLDcgQEAKIAlyZXR1cm4gKGFyZyA+PiAyKSAmIEpJTU1fTUFTSzsKIH0KIAotc3RhdGljIGlubGluZSBfX2luaXQgdTMyIGJ1aWxkX2Z1bmModTMyIGFyZykKK3N0YXRpYyBpbmxpbmUgX19jcHVpbml0IHUzMiBidWlsZF9mdW5jKHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5GVU5DX01BU0spCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1pY3JvLWFzc2VtYmxlciBmaWVsZCBvdmVyZmxvd1xuIik7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAlyZXR1cm4gYXJnICYgRlVOQ19NQVNLOwogfQogCi1zdGF0aWMgaW5saW5lIF9faW5pdCB1MzIgYnVpbGRfc2V0KHUzMiBhcmcpCitzdGF0aWMgaW5saW5lIF9fY3B1aW5pdCB1MzIgYnVpbGRfc2V0KHUzMiBhcmcpCiB7CiAJaWYgKGFyZyAmIH5TRVRfTUFTSykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTWljcm8tYXNzZW1ibGVyIGZpZWxkIG92ZXJmbG93XG4iKTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogICogVGhlIG9yZGVyIG9mIG9wY29kZSBhcmd1bWVudHMgaXMgaW1wbGljaXRseSBsZWZ0IHRvIHJpZ2h0LAogICogc3RhcnRpbmcgd2l0aCBSUyBhbmQgZW5kaW5nIHdpdGggRlVOQyBvciBJTU0uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9pbnNuKHUzMiAqKmJ1ZiwgZW51bSBvcGNvZGUgb3BjLCAuLi4pCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYnVpbGRfaW5zbih1MzIgKipidWYsIGVudW0gb3Bjb2RlIG9wYywgLi4uKQogewogCXN0cnVjdCBpbnNuICppcCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0zNzUsMTQgKzM3NSwxNCBAQAogSV91MnUxdTMoX3hvcmkpCiAKIC8qIEhhbmRsZSBsYWJlbHMuICovCi12b2lkIF9faW5pdCB1YXNtX2J1aWxkX2xhYmVsKHN0cnVjdCB1YXNtX2xhYmVsICoqbGFiLCB1MzIgKmFkZHIsIGludCBsaWQpCit2b2lkIF9fY3B1aW5pdCB1YXNtX2J1aWxkX2xhYmVsKHN0cnVjdCB1YXNtX2xhYmVsICoqbGFiLCB1MzIgKmFkZHIsIGludCBsaWQpCiB7CiAJKCpsYWIpLT5hZGRyID0gYWRkcjsKIAkoKmxhYiktPmxhYiA9IGxpZDsKIAkoKmxhYikrKzsKIH0KIAotaW50IF9faW5pdCB1YXNtX2luX2NvbXBhdF9zcGFjZV9wKGxvbmcgYWRkcikKK2ludCBfX2NwdWluaXQgdWFzbV9pbl9jb21wYXRfc3BhY2VfcChsb25nIGFkZHIpCiB7CiAJLyogSXMgdGhpcyBhZGRyZXNzIGluIDMyYml0IGNvbXBhdCBzcGFjZT8gKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKQEAgLTM5Miw3ICszOTIsNyBAQAogI2VuZGlmCiB9CiAKLWludCBfX2luaXQgdWFzbV9yZWxfaGlnaGVzdChsb25nIHZhbCkKK2ludCBfX2NwdWluaXQgdWFzbV9yZWxfaGlnaGVzdChsb25nIHZhbCkKIHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlyZXR1cm4gKCgoKHZhbCArIDB4ODAwMDgwMDA4MDAwTCkgPj4gNDgpICYgMHhmZmZmKSBeIDB4ODAwMCkgLSAweDgwMDA7CkBAIC00MDEsNyArNDAxLDcgQEAKICNlbmRpZgogfQogCi1pbnQgX19pbml0IHVhc21fcmVsX2hpZ2hlcihsb25nIHZhbCkKK2ludCBfX2NwdWluaXQgdWFzbV9yZWxfaGlnaGVyKGxvbmcgdmFsKQogewogI2lmZGVmIENPTkZJR182NEJJVAogCXJldHVybiAoKCgodmFsICsgMHg4MDAwODAwMEwpID4+IDMyKSAmIDB4ZmZmZikgXiAweDgwMDApIC0gMHg4MDAwOwpAQCAtNDEwLDE3ICs0MTAsMTcgQEAKICNlbmRpZgogfQogCi1pbnQgX19pbml0IHVhc21fcmVsX2hpKGxvbmcgdmFsKQoraW50IF9fY3B1aW5pdCB1YXNtX3JlbF9oaShsb25nIHZhbCkKIHsKIAlyZXR1cm4gKCgoKHZhbCArIDB4ODAwMEwpID4+IDE2KSAmIDB4ZmZmZikgXiAweDgwMDApIC0gMHg4MDAwOwogfQogCi1pbnQgX19pbml0IHVhc21fcmVsX2xvKGxvbmcgdmFsKQoraW50IF9fY3B1aW5pdCB1YXNtX3JlbF9sbyhsb25nIHZhbCkKIHsKIAlyZXR1cm4gKCh2YWwgJiAweGZmZmYpIF4gMHg4MDAwKSAtIDB4ODAwMDsKIH0KIAotdm9pZCBfX2luaXQgVUFTTV9pX0xBX21vc3RseSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywgbG9uZyBhZGRyKQordm9pZCBfX2NwdWluaXQgVUFTTV9pX0xBX21vc3RseSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywgbG9uZyBhZGRyKQogewogCWlmICghdWFzbV9pbl9jb21wYXRfc3BhY2VfcChhZGRyKSkgewogCQl1YXNtX2lfbHVpKGJ1ZiwgcnMsIHVhc21fcmVsX2hpZ2hlc3QoYWRkcikpOwpAQCAtNDM2LDcgKzQzNiw3IEBACiAJCXVhc21faV9sdWkoYnVmLCBycywgdWFzbV9yZWxfaGkoYWRkcikpOwogfQogCi12b2lkIF9faW5pdCBVQVNNX2lfTEEodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgcnMsIGxvbmcgYWRkcikKK3ZvaWQgX19jcHVpbml0IFVBU01faV9MQSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywgbG9uZyBhZGRyKQogewogCVVBU01faV9MQV9tb3N0bHkoYnVmLCBycywgYWRkcik7CiAJaWYgKHVhc21fcmVsX2xvKGFkZHIpKSB7CkBAIC00NDgsNyArNDQ4LDcgQEAKIH0KIAogLyogSGFuZGxlIHJlbG9jYXRpb25zLiAqLwotdm9pZCBfX2luaXQKK3ZvaWQgX19jcHVpbml0CiB1YXNtX3JfbWlwc19wYzE2KHN0cnVjdCB1YXNtX3JlbG9jICoqcmVsLCB1MzIgKmFkZHIsIGludCBsaWQpCiB7CiAJKCpyZWwpLT5hZGRyID0gYWRkcjsKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCSgqcmVsKSsrOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0CitzdGF0aWMgaW5saW5lIHZvaWQgX19jcHVpbml0CiBfX3Jlc29sdmVfcmVsb2NzKHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHN0cnVjdCB1YXNtX2xhYmVsICpsYWIpCiB7CiAJbG9uZyBsYWRkciA9IChsb25nKWxhYi0+YWRkcjsKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQKK3ZvaWQgX19jcHVpbml0CiB1YXNtX3Jlc29sdmVfcmVsb2NzKHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHN0cnVjdCB1YXNtX2xhYmVsICpsYWIpCiB7CiAJc3RydWN0IHVhc21fbGFiZWwgKmw7CkBAIC00ODUsNyArNDg1LDcgQEAKIAkJCQlfX3Jlc29sdmVfcmVsb2NzKHJlbCwgbCk7CiB9CiAKLXZvaWQgX19pbml0Cit2b2lkIF9fY3B1aW5pdAogdWFzbV9tb3ZlX3JlbG9jcyhzdHJ1Y3QgdWFzbV9yZWxvYyAqcmVsLCB1MzIgKmZpcnN0LCB1MzIgKmVuZCwgbG9uZyBvZmYpCiB7CiAJZm9yICg7IHJlbC0+bGFiICE9IFVBU01fTEFCRUxfSU5WQUxJRDsgcmVsKyspCkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCXJlbC0+YWRkciArPSBvZmY7CiB9CiAKLXZvaWQgX19pbml0Cit2b2lkIF9fY3B1aW5pdAogdWFzbV9tb3ZlX2xhYmVscyhzdHJ1Y3QgdWFzbV9sYWJlbCAqbGFiLCB1MzIgKmZpcnN0LCB1MzIgKmVuZCwgbG9uZyBvZmYpCiB7CiAJZm9yICg7IGxhYi0+bGFiICE9IFVBU01fTEFCRUxfSU5WQUxJRDsgbGFiKyspCkBAIC01MDEsNyArNTAxLDcgQEAKIAkJCWxhYi0+YWRkciArPSBvZmY7CiB9CiAKLXZvaWQgX19pbml0Cit2b2lkIF9fY3B1aW5pdAogdWFzbV9jb3B5X2hhbmRsZXIoc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgc3RydWN0IHVhc21fbGFiZWwgKmxhYiwgdTMyICpmaXJzdCwKIAkJICB1MzIgKmVuZCwgdTMyICp0YXJnZXQpCiB7CkBAIC01MTMsNyArNTEzLDcgQEAKIAl1YXNtX21vdmVfbGFiZWxzKGxhYiwgZmlyc3QsIGVuZCwgb2ZmKTsKIH0KIAotaW50IF9faW5pdCB1YXNtX2luc25faGFzX2JkZWxheShzdHJ1Y3QgdWFzbV9yZWxvYyAqcmVsLCB1MzIgKmFkZHIpCitpbnQgX19jcHVpbml0IHVhc21faW5zbl9oYXNfYmRlbGF5KHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHUzMiAqYWRkcikKIHsKIAlmb3IgKDsgcmVsLT5sYWIgIT0gVUFTTV9MQUJFTF9JTlZBTElEOyByZWwrKykgewogCQlpZiAocmVsLT5hZGRyID09IGFkZHIKQEAgLTUyNiw0OSArNTI2LDQ5IEBACiB9CiAKIC8qIENvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgbGFiZWxlZCBicmFuY2hlcy4gKi8KLXZvaWQgX19pbml0Cit2b2lkIF9fY3B1aW5pdAogdWFzbV9pbF9ibHR6KHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCkKIHsKIAl1YXNtX3JfbWlwc19wYzE2KHIsICpwLCBsaWQpOwogCXVhc21faV9ibHR6KHAsIHJlZywgMCk7CiB9CiAKLXZvaWQgX19pbml0Cit2b2lkIF9fY3B1aW5pdAogdWFzbV9pbF9iKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgaW50IGxpZCkKIHsKIAl1YXNtX3JfbWlwc19wYzE2KHIsICpwLCBsaWQpOwogCXVhc21faV9iKHAsIDApOwogfQogCi12b2lkIF9faW5pdAordm9pZCBfX2NwdWluaXQKIHVhc21faWxfYmVxeih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpCiB7CiAJdWFzbV9yX21pcHNfcGMxNihyLCAqcCwgbGlkKTsKIAl1YXNtX2lfYmVxeihwLCByZWcsIDApOwogfQogCi12b2lkIF9faW5pdAordm9pZCBfX2NwdWluaXQKIHVhc21faWxfYmVxemwodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKQogewogCXVhc21fcl9taXBzX3BjMTYociwgKnAsIGxpZCk7CiAJdWFzbV9pX2JlcXpsKHAsIHJlZywgMCk7CiB9CiAKLXZvaWQgX19pbml0Cit2b2lkIF9fY3B1aW5pdAogdWFzbV9pbF9ibmV6KHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCkKIHsKIAl1YXNtX3JfbWlwc19wYzE2KHIsICpwLCBsaWQpOwogCXVhc21faV9ibmV6KHAsIHJlZywgMCk7CiB9CiAKLXZvaWQgX19pbml0Cit2b2lkIF9fY3B1aW5pdAogdWFzbV9pbF9iZ2V6bCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpCiB7CiAJdWFzbV9yX21pcHNfcGMxNihyLCAqcCwgbGlkKTsKIAl1YXNtX2lfYmdlemwocCwgcmVnLCAwKTsKIH0KIAotdm9pZCBfX2luaXQKK3ZvaWQgX19jcHVpbml0CiB1YXNtX2lsX2JnZXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKQogewogCXVhc21fcl9taXBzX3BjMTYociwgKnAsIGxpZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdWFzbS5oIGIvYXJjaC9taXBzL21tL3Vhc20uaAppbmRleCBhMTBmYzExLi5mZTA1NzRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdWFzbS5oCisrKyBiL2FyY2gvbWlwcy9tbS91YXNtLmgKQEAgLTExLDM4ICsxMSwzOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgSXBfdTF1MnUzKG9wKQkJCQkJCQlcCi12b2lkIF9faW5pdAkJCQkJCQkJXAordm9pZCBfX2NwdWluaXQJCQkJCQkJCVwKIHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQogCiAjZGVmaW5lIElwX3UydTF1MyhvcCkJCQkJCQkJXAotdm9pZCBfX2luaXQJCQkJCQkJCVwKK3ZvaWQgX19jcHVpbml0CQkJCQkJCQlcCiB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykKIAogI2RlZmluZSBJcF91M3UxdTIob3ApCQkJCQkJCVwKLXZvaWQgX19pbml0CQkJCQkJCQlcCit2b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAogdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCiAKICNkZWZpbmUgSXBfdTF1MnMzKG9wKQkJCQkJCQlcCi12b2lkIF9faW5pdAkJCQkJCQkJXAordm9pZCBfX2NwdWluaXQJCQkJCQkJCVwKIHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHNpZ25lZCBpbnQgYykKIAogI2RlZmluZSBJcF91MnMzdTEob3ApCQkJCQkJCVwKLXZvaWQgX19pbml0CQkJCQkJCQlcCit2b2lkIF9fY3B1aW5pdAkJCQkJCQkJXAogdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQogCiAjZGVmaW5lIElwX3UydTFzMyhvcCkJCQkJCQkJXAotdm9pZCBfX2luaXQJCQkJCQkJCVwKK3ZvaWQgX19jcHVpbml0CQkJCQkJCQlcCiB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCiAKICNkZWZpbmUgSXBfdTF1MihvcCkJCQkJCQkJXAotdm9pZCBfX2luaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3ZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCiAKICNkZWZpbmUgSXBfdTFzMihvcCkJCQkJCQkJXAotdm9pZCBfX2luaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCit2b2lkIF9fY3B1aW5pdCB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKIAotI2RlZmluZSBJcF91MShvcCkgdm9pZCBfX2luaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhKQorI2RlZmluZSBJcF91MShvcCkgdm9pZCBfX2NwdWluaXQgdWFzbV9pIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhKQogCi0jZGVmaW5lIElwXzAob3ApIHZvaWQgX19pbml0IHVhc21faSMjb3AodTMyICoqYnVmKQorI2RlZmluZSBJcF8wKG9wKSB2b2lkIF9fY3B1aW5pdCB1YXNtX2kjI29wKHUzMiAqKmJ1ZikKIAogSXBfdTJ1MXMzKF9hZGRpdSk7CiBJcF91M3UxdTIoX2FkZHUpOwpAQCAtOTgsMTkgKzk4LDE5IEBACiAJaW50IGxhYjsKIH07CiAKLXZvaWQgX19pbml0IHVhc21fYnVpbGRfbGFiZWwoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkciwgaW50IGxpZCk7Cit2b2lkIF9fY3B1aW5pdCB1YXNtX2J1aWxkX2xhYmVsKHN0cnVjdCB1YXNtX2xhYmVsICoqbGFiLCB1MzIgKmFkZHIsIGludCBsaWQpOwogI2lmZGVmIENPTkZJR182NEJJVAotaW50IF9faW5pdCB1YXNtX2luX2NvbXBhdF9zcGFjZV9wKGxvbmcgYWRkcik7Ci1pbnQgX19pbml0IHVhc21fcmVsX2hpZ2hlc3QobG9uZyB2YWwpOwotaW50IF9faW5pdCB1YXNtX3JlbF9oaWdoZXIobG9uZyB2YWwpOworaW50IHVhc21faW5fY29tcGF0X3NwYWNlX3AobG9uZyBhZGRyKTsKK2ludCB1YXNtX3JlbF9oaWdoZXN0KGxvbmcgdmFsKTsKK2ludCB1YXNtX3JlbF9oaWdoZXIobG9uZyB2YWwpOwogI2VuZGlmCi1pbnQgX19pbml0IHVhc21fcmVsX2hpKGxvbmcgdmFsKTsKLWludCBfX2luaXQgdWFzbV9yZWxfbG8obG9uZyB2YWwpOwotdm9pZCBfX2luaXQgVUFTTV9pX0xBX21vc3RseSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywgbG9uZyBhZGRyKTsKLXZvaWQgX19pbml0IFVBU01faV9MQSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywgbG9uZyBhZGRyKTsKK2ludCB1YXNtX3JlbF9oaShsb25nIHZhbCk7CitpbnQgdWFzbV9yZWxfbG8obG9uZyB2YWwpOwordm9pZCBVQVNNX2lfTEFfbW9zdGx5KHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IHJzLCBsb25nIGFkZHIpOwordm9pZCBVQVNNX2lfTEEodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgcnMsIGxvbmcgYWRkcik7CiAKICNkZWZpbmUgVUFTTV9MX0xBKGxiKQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHVhc21fbCMjbGIoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkcikgXAorc3RhdGljIGlubGluZSB2b2lkIF9fY3B1aW5pdCB1YXNtX2wjI2xiKHN0cnVjdCB1YXNtX2xhYmVsICoqbGFiLCB1MzIgKmFkZHIpIFwKIHsJCQkJCQkJCQlcCiAJdWFzbV9idWlsZF9sYWJlbChsYWIsIGFkZHIsIGxhYmVsIyNsYik7CQkJCVwKIH0KQEAgLTE2NCwyOSArMTY0LDE5IEBACiAvKiBUaGlzIGlzIHplcm8gc28gd2UgY2FuIHVzZSB6ZXJvZWQgbGFiZWwgYXJyYXlzLiAqLwogI2RlZmluZSBVQVNNX0xBQkVMX0lOVkFMSUQgMAogCi12b2lkIF9faW5pdCB1YXNtX3JfbWlwc19wYzE2KHN0cnVjdCB1YXNtX3JlbG9jICoqcmVsLCB1MzIgKmFkZHIsIGludCBsaWQpOwotdm9pZCBfX2luaXQKLXVhc21fcmVzb2x2ZV9yZWxvY3Moc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgc3RydWN0IHVhc21fbGFiZWwgKmxhYik7Ci12b2lkIF9faW5pdAotdWFzbV9tb3ZlX3JlbG9jcyhzdHJ1Y3QgdWFzbV9yZWxvYyAqcmVsLCB1MzIgKmZpcnN0LCB1MzIgKmVuZCwgbG9uZyBvZmYpOwotdm9pZCBfX2luaXQKLXVhc21fbW92ZV9sYWJlbHMoc3RydWN0IHVhc21fbGFiZWwgKmxhYiwgdTMyICpmaXJzdCwgdTMyICplbmQsIGxvbmcgb2ZmKTsKLXZvaWQgX19pbml0Ci11YXNtX2NvcHlfaGFuZGxlcihzdHJ1Y3QgdWFzbV9yZWxvYyAqcmVsLCBzdHJ1Y3QgdWFzbV9sYWJlbCAqbGFiLCB1MzIgKmZpcnN0LAotCQkgIHUzMiAqZW5kLCB1MzIgKnRhcmdldCk7Ci1pbnQgX19pbml0IHVhc21faW5zbl9oYXNfYmRlbGF5KHN0cnVjdCB1YXNtX3JlbG9jICpyZWwsIHUzMiAqYWRkcik7Cit2b2lkIHVhc21fcl9taXBzX3BjMTYoc3RydWN0IHVhc21fcmVsb2MgKipyZWwsIHUzMiAqYWRkciwgaW50IGxpZCk7Cit2b2lkIHVhc21fcmVzb2x2ZV9yZWxvY3Moc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgc3RydWN0IHVhc21fbGFiZWwgKmxhYik7Cit2b2lkIHVhc21fbW92ZV9yZWxvY3Moc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgdTMyICpmaXJzdCwgdTMyICplbmQsIGxvbmcgb2ZmKTsKK3ZvaWQgdWFzbV9tb3ZlX2xhYmVscyhzdHJ1Y3QgdWFzbV9sYWJlbCAqbGFiLCB1MzIgKmZpcnN0LCB1MzIgKmVuZCwgbG9uZyBvZmYpOwordm9pZCB1YXNtX2NvcHlfaGFuZGxlcihzdHJ1Y3QgdWFzbV9yZWxvYyAqcmVsLCBzdHJ1Y3QgdWFzbV9sYWJlbCAqbGFiLAorCXUzMiAqZmlyc3QsIHUzMiAqZW5kLCB1MzIgKnRhcmdldCk7CitpbnQgdWFzbV9pbnNuX2hhc19iZGVsYXkoc3RydWN0IHVhc21fcmVsb2MgKnJlbCwgdTMyICphZGRyKTsKIAogLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBsYWJlbGVkIGJyYW5jaGVzLiAqLwotdm9pZCBfX2luaXQKLXVhc21faWxfYmx0eih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwotdm9pZCBfX2luaXQgdWFzbV9pbF9iKHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgaW50IGxpZCk7Ci12b2lkIF9faW5pdAotdWFzbV9pbF9iZXF6KHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCk7Ci12b2lkIF9faW5pdAotdWFzbV9pbF9iZXF6bCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwotdm9pZCBfX2luaXQKLXVhc21faWxfYm5leih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwotdm9pZCBfX2luaXQKLXVhc21faWxfYmdlemwodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKLXZvaWQgX19pbml0Ci11YXNtX2lsX2JnZXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKK3ZvaWQgdWFzbV9pbF9ibHR6KHUzMiAqKnAsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgaW50IGxpZCk7Cit2b2lkIHVhc21faWxfYih1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIGludCBsaWQpOwordm9pZCB1YXNtX2lsX2JlcXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKK3ZvaWQgdWFzbV9pbF9iZXF6bCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwordm9pZCB1YXNtX2lsX2JuZXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKK3ZvaWQgdWFzbV9pbF9iZ2V6bCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsIGludCBsaWQpOwordm9pZCB1YXNtX2lsX2JnZXoodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBpbnQgbGlkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYwppbmRleCAzMGVkMzYxLi44N2UyYzhmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtMTQ4MC5jCkBAIC0xODUsOCArMTg1LDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiY20xNDgwX2lvX3Jlc291cmNlID0gewogCS5uYW1lCT0gIkJDTTE0ODAgUENJIEkvTyIsCi0JLnN0YXJ0CT0gMHgyYzAwMDAwMFVMLAotCS5lbmQJPSAweDJkZmZmZmZmVUwsCisJLnN0YXJ0CT0gQV9CQ00xNDgwX1BIWVNfUENJX0lPX01BVENIX0JZVEVTLAorCS5lbmQJPSBBX0JDTTE0ODBfUEhZU19QQ0lfSU9fTUFUQ0hfQllURVMgKyAweDFmZmZmZmZVTCwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogfTsKIApAQCAtMTk0LDYgKzE5NCw3IEBACiAJLnBjaV9vcHMJPSAmYmNtMTQ4MF9wY2lfb3BzLAogCS5tZW1fcmVzb3VyY2UJPSAmYmNtMTQ4MF9tZW1fcmVzb3VyY2UsCiAJLmlvX3Jlc291cmNlCT0gJmJjbTE0ODBfaW9fcmVzb3VyY2UsCisJLmlvX29mZnNldCAgICAgID0gQV9CQ00xNDgwX1BIWVNfUENJX0lPX01BVENIX0JZVEVTLAogfTsKIAogCkBAIC0yNDksOCArMjUwLDEwIEBACiAJICogWFhYIGVoczogU2hvdWxkIHRoaXMgaGFwcGVuIGluIFBDSSBEZXZpY2UgbW9kZT8KIAkgKi8KIAotCXNldF9pb19wb3J0X2Jhc2UoKHVuc2lnbmVkIGxvbmcpCi0JCWlvcmVtYXAoQV9CQ00xNDgwX1BIWVNfUENJX0lPX01BVENIX0JZVEVTLCA2NTUzNikpOworCWJjbTE0ODBfY29udHJvbGxlci5pb19tYXBfYmFzZSA9ICh1bnNpZ25lZCBsb25nKQorCQlpb3JlbWFwKEFfQkNNMTQ4MF9QSFlTX1BDSV9JT19NQVRDSF9CWVRFUywgNjU1MzYpOworCWJjbTE0ODBfY29udHJvbGxlci5pb19tYXBfYmFzZSAtPSBiY20xNDgwX2NvbnRyb2xsZXIuaW9fb2Zmc2V0OworCXNldF9pb19wb3J0X2Jhc2UoYmNtMTQ4MF9jb250cm9sbGVyLmlvX21hcF9iYXNlKTsKIAlpc2Ffc2xvdF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZykKIAkJaW9yZW1hcChBX0JDTTE0ODBfUEhZU19QQ0lfTUVNX01BVENIX0JZVEVTLCAxMDI0KjEwMjQpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwaHQuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCmluZGV4IDAwNWU3ZmUuLmY1NGY0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCkBAIC0xODAsOCArMTgwLDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiY20xNDgwaHRfaW9fcmVzb3VyY2UgPSB7CiAJLm5hbWUJPSAiQkNNMTQ4MCBIVCBJL08iLAotCS5zdGFydAk9IDB4MDAwMDAwMDBVTCwKLQkuZW5kCT0gMHgwMWZmZmZmZlVMLAorCS5zdGFydAk9IEFfQkNNMTQ4MF9QSFlTX0hUX0lPX01BVENIX0JZVEVTLAorCS5lbmQJPSBBX0JDTTE0ODBfUEhZU19IVF9JT19NQVRDSF9CWVRFUyArIDB4MDFmZmZmZmZVTCwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogfTsKIApAQCAtMTkxLDI5ICsxOTEsMjIgQEAKIAkuaW9fcmVzb3VyY2UJPSAmYmNtMTQ4MGh0X2lvX3Jlc291cmNlLAogCS5pbmRleAkJPSAxLAogCS5nZXRfYnVzbm8JPSBiY20xNDgwaHRfcGNpYmlvc19nZXRfYnVzbm8sCisJLmlvX29mZnNldCAgICAgID0gQV9CQ00xNDgwX1BIWVNfSFRfSU9fTUFUQ0hfQllURVMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBiY20xNDgwaHRfcGNpYmlvc19pbml0KHZvaWQpCiB7Ci0JdWludDMyX3QgY21kcmVnOwotCiAJaHRfY2ZnX3NwYWNlID0gaW9yZW1hcChBX0JDTTE0ODBfUEhZU19IVF9DRkdfTUFUQ0hfQklUUywgMTYqMTAyNCoxMDI0KTsKIAotCS8qCi0JICogU2VlIGlmIHRoZSBQQ0kgYnVzIGhhcyBiZWVuIGNvbmZpZ3VyZWQgYnkgdGhlIGZpcm13YXJlLgotCSAqLwotCWNtZHJlZyA9IFJFQURDRkczMihDRkdPRkZTRVQoMCwgUENJX0RFVkZOKFBDSV9CUklER0VfREVWSUNFLCAwKSwKLQkJCQkgICAgIFBDSV9DT01NQU5EKSk7Ci0JaWYgKCEoY21kcmVnICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgewotCQlwcmludGsoIkhUOiBTa2lwcGluZyBIVCBwcm9iZS4gQnVzIGlzIG5vdCBpbml0aWFsaXplZC5cbiIpOwotCQlpb3VubWFwKGh0X2NmZ19zcGFjZSk7Ci0JCXJldHVybiAxOyAvKiBYWFggKi8KLQl9CisJLyogQ0ZFIGRvZXNuJ3QgYWx3YXlzIGluaXQgYWxsIEhUIHBhdGhzLCBzbyB3ZSBhbHdheXMgc2NhbiAqLwogCWJjbTE0ODBodF9idXNfc3RhdHVzIHw9IFBDSV9CVVNfRU5BQkxFRDsKIAogCWh0X2VvaV9zcGFjZSA9ICh1bnNpZ25lZCBsb25nKQogCQlpb3JlbWFwKEFfQkNNMTQ4MF9QSFlTX0hUX1NQRUNJQUxfTUFUQ0hfQllURVMsCiAJCQk0ICogMTAyNCAqIDEwMjQpOworCWJjbTE0ODBodF9jb250cm9sbGVyLmlvX21hcF9iYXNlID0gKHVuc2lnbmVkIGxvbmcpCisJCWlvcmVtYXAoQV9CQ00xNDgwX1BIWVNfSFRfSU9fTUFUQ0hfQllURVMsIDY1NTM2KTsKKwliY20xNDgwaHRfY29udHJvbGxlci5pb19tYXBfYmFzZSAtPSBiY20xNDgwaHRfY29udHJvbGxlci5pb19vZmZzZXQ7CiAKIAlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmYmNtMTQ4MGh0X2NvbnRyb2xsZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1pcDI3LmMgYi9hcmNoL21pcHMvcGNpL3BjaS1pcDI3LmMKaW5kZXggYTMyMjU0My4uYmI2NDgyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktaXAyNy5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWlwMjcuYwpAQCAtNDAsNyArNDAsNyBAQAogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgYnJpZGdlX3BjaV9vcHM7CiAKLWludCBfX2luaXQgYnJpZGdlX3Byb2JlKG5hc2lkX3QgbmFzaWQsIGludCB3aWRnZXRfaWQsIGludCBtYXN0ZXJ3aWQpCitpbnQgX19jcHVpbml0IGJyaWRnZV9wcm9iZShuYXNpZF90IG5hc2lkLCBpbnQgd2lkZ2V0X2lkLCBpbnQgbWFzdGVyd2lkKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gTk9ERV9PRkZTRVQobmFzaWQpOwogCXN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqYmM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS5jIGIvYXJjaC9taXBzL3BjaS9wY2kuYwppbmRleCA2ZTY5ODFmLi4zNThhZDYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKQEAgLTE3Nyw4ICsxNzcsMTUgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCQlpZiAoIShyLT5mbGFncyAmIChJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0pKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGlkeCA9PSBQQ0lfUk9NX1JFU09VUkNFKSAmJgorCQkJCSghKHItPmZsYWdzICYgSU9SRVNPVVJDRV9ST01fRU5BQkxFKSkpCisJCQljb250aW51ZTsKIAkJaWYgKCFyLT5zdGFydCAmJiByLT5lbmQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBEZXZpY2UgJXMgbm90IGF2YWlsYWJsZSBiZWNhdXNlIG9mIHJlc291cmNlIGNvbGxpc2lvbnNcbiIsIHBjaV9uYW1lKGRldikpOworCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IERldmljZSAlcyBub3QgYXZhaWxhYmxlICIKKwkJCSAgICAgICAiYmVjYXVzZSBvZiByZXNvdXJjZSBjb2xsaXNpb25zXG4iLAorCQkJICAgICAgIHBjaV9uYW1lKGRldikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKQEAgLTE4NiwxMCArMTkzLDkgQEAKIAkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCiAJCQljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOwogCX0KLQlpZiAoZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCkKLQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKIAlpZiAoY21kICE9IG9sZF9jbWQpIHsKLQkJcHJpbnRrKCJQQ0k6IEVuYWJsaW5nIGRldmljZSAlcyAoJTA0eCAtPiAlMDR4KVxuIiwgcGNpX25hbWUoZGV2KSwgb2xkX2NtZCwgY21kKTsKKwkJcHJpbnRrKCJQQ0k6IEVuYWJsaW5nIGRldmljZSAlcyAoJTA0eCAtPiAlMDR4KVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIG9sZF9jbWQsIGNtZCk7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI1NCw3ICsyNjAsNyBAQAogCX0KIH0KIAotdm9pZCBwY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQordm9pZCBfX2RldmluaXQgcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAkvKiBQcm9wYWdhdGUgaG9zZSBpbmZvIGludG8gdGhlIHN1Ym9yZGluYXRlIGRldmljZXMuICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NtcC5jCmluZGV4IDY1M2YzZWMuLjNhN2RmNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NtcC5jCkBAIC03LDEwICs3LDEwIEBACiAKICNkZWZpbmUgTEFVTkNIU1RBQ0tfU0laRSAyNTYKIAotc3RhdGljIF9faW5pdGRhdGEgREVGSU5FX1NQSU5MT0NLKGxhdW5jaF9sb2NrKTsKK3N0YXRpYyBfX2NwdWluaXRkYXRhIERFRklORV9TUElOTE9DSyhsYXVuY2hfbG9jayk7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlY29uZGFyeV9zcCBfX2luaXRkYXRhOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X2dwIF9faW5pdGRhdGE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZWNvbmRhcnlfc3AgX19jcHVpbml0ZGF0YTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlY29uZGFyeV9ncCBfX2NwdWluaXRkYXRhOwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBsYXVuY2hzdGFja1tMQVVOQ0hTVEFDS19TSVpFXSBfX2luaXRkYXRhCiAJX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyICogc2l6ZW9mKGxvbmcpKSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctY29uc29sZS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctY29uc29sZS5jCmluZGV4IDNiYTgzMDYuLjk4NGU1NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWNvbnNvbGUuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1jb25zb2xlLmMKQEAgLTgsNyArOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWIuaD4KICNpbmNsdWRlIDxhc20vc24va2xjb25maWcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWluaXQuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWluaXQuYwppbmRleCBhNDllN2M4Li43MDkzZTdjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaW5pdC5jCkBAIC01Myw3ICs1Myw3IEBACiAKIGV4dGVybiB2b2lkIHh0YWxrX3Byb2JlX25vZGUoY25vZGVpZF90IG5pZCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwZXJfaHViX2luaXQoY25vZGVpZF90IGNub2RlKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHBlcl9odWJfaW5pdChjbm9kZWlkX3QgY25vZGUpCiB7CiAJc3RydWN0IGh1Yl9kYXRhICpodWIgPSBodWJfZGF0YShjbm9kZSk7CiAJbmFzaWRfdCBuYXNpZCA9IENPTVBBQ1RfVE9fTkFTSURfTk9ERUlEKGNub2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IDA4ZDQ1MzYuLjI1ZDNiYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJc2V0X2MwX3N0YXR1cyhTUkJfVElNT0NMSyk7CiB9CiAKLXZvaWQgX19pbml0IGh1Yl9ydGNfaW5pdChjbm9kZWlkX3QgY25vZGUpCit2b2lkIF9fY3B1aW5pdCBodWJfcnRjX2luaXQoY25vZGVpZF90IGNub2RlKQogewogCS8qCiAJICogV2Ugb25seSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGN1cnJlbnQgbm9kZS4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXh0YWxrLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy14dGFsay5jCmluZGV4IGZjODJmMzQuLjZhZTY0ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXh0YWxrLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcteHRhbGsuYwpAQCAtMjIsNyArMjIsNyBAQAogCiBleHRlcm4gaW50IGJyaWRnZV9wcm9iZShuYXNpZF90IG5hc2lkLCBpbnQgd2lkZ2V0LCBpbnQgbWFzdGVyd2lkKTsKIAotc3RhdGljIGludCBfX2luaXQgcHJvYmVfb25lX3BvcnQobmFzaWRfdCBuYXNpZCwgaW50IHdpZGdldCwgaW50IG1hc3RlcndpZCkKK3N0YXRpYyBpbnQgX19jcHVpbml0IHByb2JlX29uZV9wb3J0KG5hc2lkX3QgbmFzaWQsIGludCB3aWRnZXQsIGludCBtYXN0ZXJ3aWQpCiB7CiAJd2lkZ2V0cmVnX3QgCQl3aWRnZXRfaWQ7CiAJeHdpZGdldF9wYXJ0X251bV90CXBhcnRudW07CkBAIC00Niw3ICs0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHhib3dfcHJvYmUobmFzaWRfdCBuYXNpZCkKK3N0YXRpYyBpbnQgX19jcHVpbml0IHhib3dfcHJvYmUobmFzaWRfdCBuYXNpZCkKIHsKIAlsYm9hcmRfdCAqYnJkOwogCWtseGJvd190ICp4Ym93X3A7CkBAIC05OSw3ICs5OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19pbml0IHh0YWxrX3Byb2JlX25vZGUoY25vZGVpZF90IG5pZCkKK3ZvaWQgX19jcHVpbml0IHh0YWxrX3Byb2JlX25vZGUoY25vZGVpZF90IG5pZCkKIHsKIAl2b2xhdGlsZSB1NjQgCQlodWJyZWc7CiAJbmFzaWRfdAkgCQluYXNpZDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYwppbmRleCAxODNjNDYwLi5iZDllZWI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvc21wLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NtcC5jCkBAIC0xMTAsNyArMTEwLDYgQEAKIAogCXNiMTQ4MF9jbG9ja2V2ZW50X2luaXQoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JYmNtMTQ4MF9zbXBfZmluaXNoKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvS2NvbmZpZyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCmluZGV4IGVlZGMzYTUuLjZhNjQwOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9LY29uZmlnCisrKyBiL2FyY2gvbW4xMDMwMC9LY29uZmlnCkBAIC02Myw2ICs2MywxMCBAQAogY29uZmlnIEhPVFBMVUdfQ1BVCiAJZGVmX2Jvb2wgbgogCitjb25maWcgSFoKKwlpbnQKKwlkZWZhdWx0IDEwMDAKKwogbWFpbm1lbnUgIk1hdHN1c2hpdGEgTU4xMDMwMC9BTTMzIEtlcm5lbCBDb25maWd1cmF0aW9uIgogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9jb25maWdzL2FzYjIzMDNfZGVmY29uZmlnIGIvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjMwM19kZWZjb25maWcKaW5kZXggY2E5ODc2YS4uM2FhODkwNiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjMwM19kZWZjb25maWcKKysrIGIvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjMwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmMyCi0jIEZyaSBOb3YgMTYgMTM6MzY6MzggMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMgorIyBUdWUgRmViIDE5IDE4OjUyOjI0IDIwMDgKICMKIENPTkZJR19NTjEwMzAwPXkKIENPTkZJR19BTTMzPXkKQEAgLTIxLDYgKzIxLDcgQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiAjIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzgsMTUgKzM5LDE2IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTU3LDIyICs1OSwzMyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorIyBDT05GSUdfSEFWRV9PUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogCiAjCiAjIE1hdHN1c2hpdGEgTU4xMDMwMCBzeXN0ZW0gc2V0dXAKQEAgLTIwNiw2ICsyMTksNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC0zMTEsNiArMzI1LDggQEAKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC0zNDUsNyArMzYxLDYgQEAKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNDA1LDYgKzQyMCw3IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTQ0NCw2ICs0NjAsNyBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKQEAgLTQ1NSwxMCArNDcyLDEwIEBACiAjCiAjIEZpbGUgc3lzdGVtcwogIworQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTU1NCw1ICs1NzEsMyBAQAogIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZWYwN2M5NS4uMjNmMmFiNiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21uMTAzMDAva2VybmVsL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogZXh0cmEteSA6PSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKIAotb2JqLXkgICA6PSBwcm9jZXNzLm8gc2VtYXBob3JlLm8gc2lnbmFsLm8gZW50cnkubyBmcHUubyB0cmFwcy5vIGlycS5vIFwKK29iai15ICAgOj0gcHJvY2Vzcy5vIHNpZ25hbC5vIGVudHJ5Lm8gZnB1Lm8gdHJhcHMubyBpcnEubyBcCiAJICAgcHRyYWNlLm8gc2V0dXAubyB0aW1lLm8gc3lzX21uMTAzMDAubyBpby5vIGt0aHJlYWQubyBcCiAJICAgc3dpdGNoX3RvLm8gbW4xMDMwMF9rc3ltcy5vIGtlcm5lbF9leGVjdmUubwogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL2dkYi1pby10dHlzbS5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9nZGItaW8tdHR5c20uYwppbmRleCBjNTQ1MTU5Li5lOTRjMjVlIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2dkYi1pby10dHlzbS5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvZ2RiLWlvLXR0eXNtLmMKQEAgLTE5Niw2ICsxOTYsNyBAQAogdHJ5X2FnYWluOgogCS8qIHB1bGwgY2hhcnMgb3V0IG9mIHRoZSBidWZmZXIgKi8KIAlpeCA9IGdkYnN0dWJfcnhfb3V0cDsKKwliYXJyaWVyKCk7CiAJaWYgKGl4ID09IGdkYnN0dWJfcnhfaW5wKSB7CiAJCWlmIChub25ibG9jaykKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtMjA3LDYgKzIwOCw3IEBACiAKIAljaCA9IGdkYnN0dWJfcnhfYnVmZmVyW2l4KytdOwogCXN0ID0gZ2Ric3R1Yl9yeF9idWZmZXJbaXgrK107CisJYmFycmllcigpOwogCWdkYnN0dWJfcnhfb3V0cCA9IGl4ICYgKFBBR0VfU0laRSAtIDEpOwogCiAJc3QgJj0gU0MwMVNUUl9SWEYgfCBTQzAxU1RSX1JCRiB8IFNDMDFTVFJfRkVGIHwgU0MwMVNUUl9QRUYgfApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvc2VtYXBob3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNTNjNDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9zZW1hcGhvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKiBNTjEwMzAwIFNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCi1zdHJ1Y3Qgc2VtX3dhaXRlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKLX07Ci0KLSNpZiBTRU1BUEhPUkVfREVCVUcKLXZvaWQgc2VtdHJhY2Uoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBjb25zdCBjaGFyICpzdHIpCi17Ci0JaWYgKHNlbS0+ZGVidWcpCi0JCXByaW50ayhLRVJOX0RFQlVHICJbJWRdICVzKHslZCwlZH0pXG4iLAotCQkgICAgICAgY3VycmVudC0+cGlkLAotCQkgICAgICAgc3RyLAotCQkgICAgICAgYXRvbWljX3JlYWQoJnNlbS0+Y291bnQpLAotCQkgICAgICAgbGlzdF9lbXB0eSgmc2VtLT53YWl0X2xpc3QpID8gMCA6IDEpOwotfQotI2Vsc2UKLSNkZWZpbmUgc2VtdHJhY2UoU0VNLCBTVFIpIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKgotICogd2FpdCBmb3IgYSB0b2tlbiB0byBiZSBncmFudGVkIGZyb20gYSBzZW1hcGhvcmUKLSAqIC0gZW50ZXJlZCB3aXRoIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZAotICovCi12b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXN0cnVjdCBzZW1fd2FpdGVyIHdhaXRlcjsKLQotCXNlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fZG93biIpOwotCi0JLyogc2V0IHVwIG15IG93biBzdHlsZSBvZiB3YWl0cXVldWUgKi8KLQl3YWl0ZXIudGFzayA9IHRzazsKLQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKLQotCWxpc3RfYWRkX3RhaWwoJndhaXRlci5saXN0LCAmc2VtLT53YWl0X2xpc3QpOwotCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgc2VtYXBob3JlIHN0cnVjdCBhbnltb3JlICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQotCS8qIHdhaXQgdG8gYmUgZ2l2ZW4gdGhlIHNlbWFwaG9yZSAqLwotCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCi0JZm9yICg7OykgewotCQlpZiAoIXdhaXRlci50YXNrKQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCX0KLQotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0Jc2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX2Rvd24iKTsKLX0KLUVYUE9SVF9TWU1CT0woX19kb3duKTsKLQotLyoKLSAqIGludGVycnVwdGlibHkgd2FpdCBmb3IgYSB0b2tlbiB0byBiZSBncmFudGVkIGZyb20gYSBzZW1hcGhvcmUKLSAqIC0gZW50ZXJlZCB3aXRoIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZAotICovCi1pbnQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlzdHJ1Y3Qgc2VtX3dhaXRlciB3YWl0ZXI7Ci0JaW50IHJldDsKLQotCXNlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fZG93bl9pbnRlcnJ1cHRpYmxlIik7Ci0KLQkvKiBzZXQgdXAgbXkgb3duIHN0eWxlIG9mIHdhaXRxdWV1ZSAqLwotCXdhaXRlci50YXNrID0gdHNrOwotCWdldF90YXNrX3N0cnVjdCh0c2spOwotCi0JbGlzdF9hZGRfdGFpbCgmd2FpdGVyLmxpc3QsICZzZW0tPndhaXRfbGlzdCk7Ci0KLQkvKiB3ZSBkb24ndCBuZWVkIHRvIHRvdWNoIHRoZSBzZW1hcGhvcmUgc3RydWN0IGFueW1vcmUgKi8KLQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCi0JLyogd2FpdCB0byBiZSBnaXZlbiB0aGUgc2VtYXBob3JlICovCi0JcmV0ID0gMDsKLQlmb3IgKDs7KSB7Ci0JCWlmICghd2FpdGVyLnRhc2spCi0JCQlicmVhazsKLQkJaWYgKHVubGlrZWx5KHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSkKLQkJCWdvdG8gaW50ZXJydXB0ZWQ7Ci0JCXNjaGVkdWxlKCk7Ci0JCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl9Ci0KLSBvdXQ6Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlzZW10cmFjZShzZW0sICJMZWF2aW5nIF9fZG93bl9pbnRlcnJ1cHRpYmxlIik7Ci0JcmV0dXJuIHJldDsKLQotIGludGVycnVwdGVkOgotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZ3YWl0ZXIubGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQotCXJldCA9IDA7Ci0JaWYgKCF3YWl0ZXIudGFzaykgewotCQlwdXRfdGFza19zdHJ1Y3QoY3VycmVudCk7Ci0JCXJldCA9IC1FSU5UUjsKLQl9Ci0JZ290byBvdXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl9pbnRlcnJ1cHRpYmxlKTsKLQotLyoKLSAqIHJlbGVhc2UgYSBzaW5nbGUgdG9rZW4gYmFjayB0byBhIHNlbWFwaG9yZQotICogLSBlbnRlcmVkIHdpdGggbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkCi0gKi8KLXZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7Ci0Jc3RydWN0IHNlbV93YWl0ZXIgKndhaXRlcjsKLQotCXNlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fdXAiKTsKLQotCS8qIGdyYW50IHRoZSB0b2tlbiB0byB0aGUgcHJvY2VzcyBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlICovCi0Jd2FpdGVyID0gbGlzdF9lbnRyeShzZW0tPndhaXRfbGlzdC5uZXh0LCBzdHJ1Y3Qgc2VtX3dhaXRlciwgbGlzdCk7Ci0KLQkvKiBXZSBtdXN0IGJlIGNhcmVmdWwgbm90IHRvIHRvdWNoICd3YWl0ZXInIGFmdGVyIHdlIHNldCAtPnRhc2sgPSBOVUxMLgotCSAqIEl0IGlzIGFuIGFsbG9jYXRlZCBvbiB0aGUgd2FpdGVyJ3Mgc3RhY2sgYW5kIG1heSBiZWNvbWUgaW52YWxpZCBhdAotCSAqIGFueSB0aW1lIGFmdGVyIHRoYXQgcG9pbnQgKGR1ZSB0byBhIHdha2V1cCBmcm9tIGFub3RoZXIgc291cmNlKS4KLQkgKi8KLQlsaXN0X2RlbF9pbml0KCZ3YWl0ZXItPmxpc3QpOwotCXRzayA9IHdhaXRlci0+dGFzazsKLQlzbXBfbWIoKTsKLQl3YWl0ZXItPnRhc2sgPSBOVUxMOwotCXdha2VfdXBfcHJvY2Vzcyh0c2spOwotCXB1dF90YXNrX3N0cnVjdCh0c2spOwotCi0Jc2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX3VwIik7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fdXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC90aW1lLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYwppbmRleCBmZjQ5MmUzLi5iYWJiN2MyIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYwpAQCAtODQsMTEgKzg0LDEzIEBACiAJCS8qIGFkdmFuY2UgdGhlIGtlcm5lbCdzIHRpbWUgdHJhY2tpbmcgc3lzdGVtICovCiAJCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKIAkJZG9fdGltZXIoMSk7Ci0JCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOwogCQljaGVja19ydGNfdGltZSgpOwogCX0KIAogCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jCmluZGV4IDhiOWRjNmQuLmZjYjlhMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3RyYXBzLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCWlmIChjb2RlID09IEVYQ0VQX1NZU0NBTEwxNSAmJiAhdXNlcl9tb2RlKHJlZ3MpKSB7CiAJCWlmIChyZXBvcnRfYnVnKHJlZ3MtPnBjLCByZWdzKSA9PSBCVUdfVFJBUF9UWVBFX0JVRykgewogI2lmZGVmIENPTkZJR19HREJTVFVCCi0JCQlfX2dkYnN0dWJfYnVnX3RyYXAoKTsKKwkJCWdkYnN0dWJfaW50ZXJjZXB0KHJlZ3MsIGNvZGUpOwogI2VuZGlmCiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmggYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmgKaW5kZXggODQ2MzRmYS4uOTc2M2QxYyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuaApAQCAtMjMsOCArMjMsNiBAQAogI2RlZmluZSBQQ0lfUFJPQkVfQklPUyAxCiAjZGVmaW5lIFBDSV9QUk9CRV9DT05GMSAyCiAjZGVmaW5lIFBDSV9QUk9CRV9DT05GMiA0Ci0jZGVmaW5lIFBDSV9OT19TT1JUIDB4MTAwCi0jZGVmaW5lIFBDSV9CSU9TX1NPUlQgMHgyMDAKICNkZWZpbmUgUENJX05PX0NIRUNLUyAweDQwMAogI2RlZmluZSBQQ0lfQVNTSUdOX1JPTVMgMHgxMDAwCiAjZGVmaW5lIFBDSV9CSU9TX0lSUV9TQ0FOIDB4MjAwMApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvTWFrZWZpbGUgYi9hcmNoL3BhcmlzYy9NYWtlZmlsZQppbmRleCBlNTc0ZGU0Li41ZGRhZDdiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9NYWtlZmlsZQorKysgYi9hcmNoL3BhcmlzYy9NYWtlZmlsZQpAQCAtMTYsNiArMTYsOSBAQAogIyBNb2RpZmllZCBmb3IgUEEtUklTQyBMaW51eCBieSBQYXVsIExhaGFpZSwgQWxleCBkZVZyaWVzLCAKICMgTWlrZSBTaGF2ZXIsIEhlbGdlIERlbGxlciBhbmQgTWFydGluIEsuIFBldGVyc2VuCiAjCisKK0tCVUlMRF9ERUZDT05GSUcgOj0gZGVmYXVsdF9kZWZjb25maWcKKwogTk0JCT0gc2ggJChzcmN0cmVlKS9hcmNoL3BhcmlzYy9ubQogQ0hFQ0tGTEFHUwkrPSAtRF9faHBwYV9fPTEKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvZGVmY29uZmlnIGIvYXJjaC9wYXJpc2MvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wYXJpc2MvZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL3BhcmlzYy9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMjc4MjdiYy4uMWY2NTg1YSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9NYWtlZmlsZQpAQCAtOSw3ICs5LDcgQEAKIAogb2JqLXkJICAgICAJOj0gY2FjaGUubyBwYWNhY2hlLm8gc2V0dXAubyB0cmFwcy5vIHRpbWUubyBpcnEubyBcCiAJCSAgIHBhNzMwMGxjLm8gc3lzY2FsbC5vIGVudHJ5Lm8gc3lzX3BhcmlzYy5vIGZpcm13YXJlLm8gXAotCQkgICBwdHJhY2UubyBoYXJkd2FyZS5vIGludmVudG9yeS5vIGRyaXZlcnMubyBzZW1hcGhvcmUubyBcCisJCSAgIHB0cmFjZS5vIGhhcmR3YXJlLm8gaW52ZW50b3J5Lm8gZHJpdmVycy5vIFwKIAkJICAgc2lnbmFsLm8gaHBtYy5vIHJlYWwyLm8gcGFyaXNjX2tzeW1zLm8gdW5hbGlnbmVkLm8gXAogCQkgICBwcm9jZXNzLm8gcHJvY2Vzc29yLm8gcGRjX2NvbnMubyBwZGNfY2hhc3Npcy5vIHVud2luZC5vIFwKIAkJICAgdG9wb2xvZ3kubwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCA0YWI4M2Q1Li43MTc3YTZjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtMTA4MCw2ICsxMDgwLDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfbG9jaywgZmxhZ3MpOwogfQogCisvKiBsb2NrZWQgYnkgcGRjX2NvbnNvbGVfbG9jayAqLworc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgICBpb2RjX3JldGJ1ZlszMl07CitzdGF0aWMgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpIGlvZGNfZGJ1Zls0MDk2XTsKIAogLyoqCiAgKiBwZGNfaW9kY19wcmludCAtIENvbnNvbGUgcHJpbnQgdXNpbmcgSU9EQy4KQEAgLTEwOTEsMjQgKzEwOTQsMjAgQEAKICAqIFNpbmNlIHRoZSBIUCBjb25zb2xlIHJlcXVpcmVzIENSK0xGIHRvIHBlcmZvcm0gYSAnbmV3bGluZScsIHdlIHRyYW5zbGF0ZQogICogIlxuIiB0byAiXHJcbiIuCiAgKi8KLWludCBwZGNfaW9kY19wcmludCh1bnNpZ25lZCBjaGFyICpzdHIsIHVuc2lnbmVkIGNvdW50KQoraW50IHBkY19pb2RjX3ByaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpCiB7Ci0JLyogWFhYIFNob3VsZCB3ZSBzcGlubG9jayBwb3N4IHVzYWdlICovCiAJc3RhdGljIGludCBwb3N4OyAgICAgICAgLyogZm9yIHNpbXBsZSBUQUItU2ltdWxhdGlvbi4uLiAqLwotCWludCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgICBpb2RjX3JldGJ1ZlszMl07Ci0JY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpIGlvZGNfZGJ1Zls0MDk2XTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbWVtc2V0KGlvZGNfZGJ1ZiwgMCwgNDA5Nik7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50ICYmIGkgPCAyMDQ4OykgeworCWZvciAoaSA9IDA7IGkgPCBjb3VudCAmJiBpIDwgNzk7KSB7CiAJCXN3aXRjaChzdHJbaV0pIHsKIAkJY2FzZSAnXG4nOgogCQkJaW9kY19kYnVmW2krMF0gPSAnXHInOwogCQkJaW9kY19kYnVmW2krMV0gPSAnXG4nOwogCQkJaSArPSAyOwogCQkJcG9zeCA9IDA7Ci0JCQlicmVhazsKKwkJCWdvdG8gcHJpbnQ7CiAJCWNhc2UgJ1x0JzoKIAkJCXdoaWxlIChwb3N4ICYgNykgewogCQkJCWlvZGNfZGJ1ZltpXSA9ICcgJzsKQEAgLTExMjQsNiArMTEyMywxNiBAQAogCQl9CiAJfQogCisJLyogaWYgd2UncmUgYXQgdGhlIGVuZCBvZiBsaW5lLCBhbmQgbm90IGFscmVhZHkgaW5zZXJ0aW5nIGEgbmV3bGluZSwKKwkgKiBpbnNlcnQgb25lIGFueXdheS4gaW9kYyBjb25zb2xlIGRvZXNuJ3QgY2xhaW0gdG8gc3VwcG9ydCA+NzkgY2hhcgorCSAqIGxpbmVzLiBkb24ndCBhY2NvdW50IGZvciB0aGlzIGluIHRoZSByZXR1cm4gdmFsdWUuCisJICovCisJaWYgKGkgPT0gNzkgJiYgaW9kY19kYnVmW2ktMV0gIT0gJ1xuJykgeworCQlpb2RjX2RidWZbaSswXSA9ICdccic7CisJCWlvZGNfZGJ1ZltpKzFdID0gJ1xuJzsKKwl9CisKK3ByaW50OgogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcGRjX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcmVhbDMyX2NhbGwoUEFHRTAtPm1lbV9jb25zLmlvZGNfaW8sCiAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKVBBR0UwLT5tZW1fY29ucy5ocGEsIEVOVFJZX0lPX0NPVVQsCkBAIC0xMTQyLDExICsxMTUxLDkgQEAKICAqLwogaW50IHBkY19pb2RjX2dldGModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICBzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSAgIGlvZGNfcmV0YnVmWzMyXTsKLSAgICAgICAgc3RhdGljIGNoYXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKSBpb2RjX2RidWZbNDA5Nl07CiAJaW50IGNoOwogCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIEJhaWwgaWYgbm8gY29uc29sZSBpbnB1dCBkZXZpY2UuICovCiAJaWYgKCFQQUdFMC0+bWVtX2tiZC5pb2RjX2lvKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2hhcmR3YXJlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGFyZHdhcmUuYwppbmRleCA4NGI5NjExLi5mNDhhNjQwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGFyZHdhcmUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGFyZHdhcmUuYwpAQCAtMjc0LDcgKzI3NCwxOCBAQAogCXtIUEhXX05QUk9DLDB4ODg3LDB4NCwweDkxLCJTdG9ybSBQZWFrIFNsb3cifSwKIAl7SFBIV19OUFJPQywweDg4OCwweDQsMHg5MSwiU3Rvcm0gUGVhayBGYXN0IERDLSJ9LAogCXtIUEhXX05QUk9DLDB4ODg5LDB4NCwweDkxLCJTdG9ybSBQZWFrIEZhc3QifSwKLQl7SFBIV19OUFJPQywweDg4QSwweDQsMHg5MSwiQ3Jlc3RvbmUgUGVhayJ9LAorCXtIUEhXX05QUk9DLDB4ODhBLDB4NCwweDkxLCJDcmVzdG9uZSBQZWFrIFNsb3cifSwKKwl7SFBIV19OUFJPQywweDg4QywweDQsMHg5MSwiT3JjYSBNYWtvKyJ9LAorCXtIUEhXX05QUk9DLDB4ODhELDB4NCwweDkxLCJSYWluaWVyL01lZGVsIE1ha28rIFNsb3cifSwKKwl7SFBIV19OUFJPQywweDg4RSwweDQsMHg5MSwiUmFpbmllci9NZWRlbCBNYWtvKyBGYXN0In0sCisJe0hQSFdfTlBST0MsMHg4OTQsMHg0LDB4OTEsIk10LiBIYW1pbHRvbiBGYXN0IE1ha28rIn0sCisJe0hQSFdfTlBST0MsMHg4OTUsMHg0LDB4OTEsIlN0b3JtIFBlYWsgU2xvdyBNYWtvKyJ9LAorCXtIUEhXX05QUk9DLDB4ODk2LDB4NCwweDkxLCJTdG9ybSBQZWFrIEZhc3QgTWFrbysifSwKKwl7SFBIV19OUFJPQywweDg5NywweDQsMHg5MSwiU3Rvcm0gUGVhayBEQy0gU2xvdyBNYWtvKyJ9LAorCXtIUEhXX05QUk9DLDB4ODk4LDB4NCwweDkxLCJTdG9ybSBQZWFrIERDLSBGYXN0IE1ha28rIn0sCisJe0hQSFdfTlBST0MsMHg4OTksMHg0LDB4OTEsIk10LiBIYW1pbHRvbiBTbG93IE1ha28rIn0sCisJe0hQSFdfTlBST0MsMHg4OUIsMHg0LDB4OTEsIkNyZXN0b25lIFBlYWsgTWFrbysgU2xvdyJ9LAorCXtIUEhXX05QUk9DLDB4ODlDLDB4NCwweDkxLCJDcmVzdG9uZSBQZWFrIE1ha28rIEZhc3QifSwKIAl7SFBIV19BX0RJUkVDVCwgMHgwMDQsIDB4MDAwMEQsIDB4MDAsICJBcnJha2lzIE1VWCJ9LCAKIAl7SFBIV19BX0RJUkVDVCwgMHgwMDUsIDB4MDAwMEQsIDB4MDAsICJEeXVuIEtpdWggTVVYIn0sIAogCXtIUEhXX0FfRElSRUNULCAweDAwNiwgMHgwMDAwRCwgMHgwMCwgIkJhYXQgS2l1aCBBUC9NVVggKDQwMjk5QikifSwgCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUwppbmRleCBhN2I4ODU5Li5lYzI0ODJkYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCkBAIC0yMCwxMCArMjAsMTEgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogCS5sZXZlbAlMRVZFTAogCi0JLmRhdGEKKwlfX0lOSVREQVRBCiBFTlRSWShib290X2FyZ3MpCiAJLndvcmQgMCAvKiBhcmcwICovCiAJLndvcmQgMCAvKiBhcmcxICovCkBAIC0zMSw3ICszMiw3IEBACiAJLndvcmQgMCAvKiBhcmczICovCiBFTkQoYm9vdF9hcmdzKQogCi0JLnRleHQKKwkuc2VjdGlvbiAudGV4dC5oZWFkCiAJLmFsaWduCTQKIAkuaW1wb3J0IGluaXRfdGhyZWFkX3VuaW9uLGRhdGEKIAkuaW1wb3J0IGZhdWx0X3ZlY3Rvcl8yMCxjb2RlICAgIC8qIElWQSBwYXJpc2MgMi4wIDMyIGJpdCAqLwpAQCAtMzQzLDcgKzM0NCw3IEBACiBFTkRQUk9DKHN0ZXh0KQogCiAjaWZuZGVmIENPTkZJR182NEJJVAotCS5kYXRhCisJLnNlY3Rpb24gLmRhdGEucmVhZF9tb3N0bHkKIAogCS5hbGlnbgk0CiAJLmV4cG9ydAkkZ2xvYmFsJCxkYXRhCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKaW5kZXggN2FjYTcwNC4uNWI3ZmM0YSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYwpAQCAtNjksMTEgKzY5LDYgQEAKIEVYUE9SVF9TWU1CT0wobWVtY3B5X2Zyb21pbyk7CiBFWFBPUlRfU1lNQk9MKG1lbXNldF9pbyk7CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci1FWFBPUlRfU1lNQk9MKF9fdXApOwotRVhQT1JUX1NZTUJPTChfX2Rvd25faW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bik7Ci0KIGV4dGVybiB2b2lkICQkZGl2SSh2b2lkKTsKIGV4dGVybiB2b2lkICQkZGl2VSh2b2lkKTsKIGV4dGVybiB2b2lkICQkcmVtSSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYwppbmRleCA1MDdkMGFjLi42OTM2Mzg2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCkBAIC0yODcsMjMgKzI4NywxNSBAQAogICovCiBpbnQgcGNpYmlvc19lbmFibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQogewotCXUxNiBjbWQ7Ci0JaW50IGlkeDsKKwlpbnQgZXJyOworCXUxNiBjbWQsIG9sZF9jbWQ7CisKKwllcnIgPSBwY2lfZW5hYmxlX3Jlc291cmNlcyhkZXYsIG1hc2spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaWR4KyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKLQotCQkvKiBvbmx5IHNldHVwIHJlcXVlc3RlZCByZXNvdXJjZXMgKi8KLQkJaWYgKCEobWFzayAmICgxPDxpZHgpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfSU87Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQl9CisJb2xkX2NtZCA9IGNtZDsKIAogCWNtZCB8PSAoUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX1BBUklUWSk7CiAKQEAgLTMxMiw4ICszMDQsMTIgQEAKIAlpZiAoZGV2LT5idXMtPmJyaWRnZV9jdGwgJiBQQ0lfQlJJREdFX0NUTF9GQVNUX0JBQ0spCiAJCWNtZCB8PSBQQ0lfQ09NTUFORF9GQVNUX0JBQ0s7CiAjZW5kaWYKLQlEQkdDKCJQQ0lCSU9TOiBFbmFibGluZyBkZXZpY2UgJXMgY21kIDB4JTA0eFxuIiwgcGNpX25hbWUoZGV2KSwgY21kKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKKworCWlmIChjbWQgIT0gb2xkX2NtZCkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJlbmFibGluZyBTRVJSIGFuZCBQQVJJVFkgKCUwNHggLT4gJTA0eClcbiIsCisJCQlvbGRfY21kLCBjbWQpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY29ucy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKaW5kZXggMzNiMWY4NC4uY2NiNjgwOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKQEAgLTUyLDI4ICs1MiwzMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGFzbS9wZGMuaD4JCS8qIGZvciBpb2RjX2NhbGwoKSBwcm90byBhbmQgZnJpZW5kcyAqLwogCitzdGF0aWMgc3BpbmxvY2tfdCBwZGNfY29uc29sZV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwogCiBzdGF0aWMgdm9pZCBwZGNfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQogewotCXBkY19pb2RjX3ByaW50KHMsIGNvdW50KTsKLX0KKwlpbnQgaSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotdm9pZCBwZGNfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQljaGFyIGJ1ZlsxMDI0XTsKLQlpbnQgaSwgbGVuOwotCi0JdmFfc3RhcnQoYXJncywgZm10KTsKLQlsZW4gPSB2c2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCi0JcGRjX2lvZGNfcHJpbnQoYnVmLCBsZW4pOworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGNfY29uc29sZV9sb2NrLCBmbGFncyk7CisJZG8geworCQlpICs9IHBkY19pb2RjX3ByaW50KHMgKyBpLCBjb3VudCAtIGkpOworCX0gd2hpbGUgKGkgPCBjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRjX2NvbnNvbGVfbG9jaywgZmxhZ3MpOwogfQogCiBpbnQgcGRjX2NvbnNvbGVfcG9sbF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQogewotCXJldHVybiBwZGNfaW9kY19nZXRjKCk7CisJaW50IGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGNfY29uc29sZV9sb2NrLCBmbGFncyk7CisJYyA9IHBkY19pb2RjX2dldGMoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGNfY29uc29sZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gYzsKIH0KIAogc3RhdGljIGludCBwZGNfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2VtYXBob3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlODA2YmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBTZW1hcGhvcmUgaW1wbGVtZW50YXRpb24gQ29weXJpZ2h0IChjKSAyMDAxIE1hdHRoZXcgV2lsY294LCBIZXdsZXR0LVBhY2thcmQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0vKgotICogU2VtYXBob3JlcyBhcmUgY29tcGxleCBhcyB3ZSB3aXNoIHRvIGF2b2lkIHVzaW5nIHR3byB2YXJpYWJsZXMuCi0gKiBgY291bnQnIGhhcyBtdWx0aXBsZSByb2xlcywgZGVwZW5kaW5nIG9uIGl0cyB2YWx1ZS4gIElmIGl0IGlzIHBvc2l0aXZlCi0gKiBvciB6ZXJvLCB0aGVyZSBhcmUgbm8gd2FpdGVycy4gIFRoZSBmdW5jdGlvbnMgaGVyZSB3aWxsIG5ldmVyIGJlCi0gKiBjYWxsZWQ7IHNlZSA8YXNtL3NlbWFwaG9yZS5oPgotICoKLSAqIFdoZW4gY291bnQgaXMgLTEgaXQgaW5kaWNhdGVzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB0YXNrIHdhaXRpbmcKLSAqIGZvciB0aGUgc2VtYXBob3JlLgotICoKLSAqIFdoZW4gY291bnQgaXMgbGVzcyB0aGFuIHRoYXQsIHRoZXJlIGFyZSAnLSBjb3VudCAtIDEnIHdha2V1cHMKLSAqIHBlbmRpbmcuICBpZSBpZiBpdCBoYXMgdmFsdWUgLTMsIHRoZXJlIGFyZSAyIHdha2V1cHMgcGVuZGluZy4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGlzIGNvbnRlbnRpb24KLSAqIG9uIHRoZSBsb2NrLCBhbmQgYXMgc3VjaCBhbGwgdGhpcyBpcyB0aGUgIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUKLSAqIHdob2xlIHNlbWFwaG9yZSBidXNpbmVzcy4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbgotICogPGFzbS9zZW1hcGhvcmUuaD4gd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbS0+Y291bnQtLTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi0jZGVmaW5lIHdha2Vycyhjb3VudCkgKC0xIC0gY291bnQpCi0KLSNkZWZpbmUgRE9XTl9IRUFECQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwkJCQlcCi0JCQkJCQkJCQlcCi0JLyogTm90ZSB0aGF0IHNvbWVvbmUgaXMgd2FpdGluZyAqLwkJCQlcCi0JaWYgKHNlbS0+Y291bnQgPT0gMCkJCQkJCQlcCi0JCXNlbS0+Y291bnQgPSAtMTsJCQkJCVwKLQkJCQkJCQkJCVwKLQkvKiBwcm90ZWN0ZWQgYnkgdGhlIHNlbnRyeSBzdGlsbCAtLSB1c2UgdW5sb2NrZWQgdmVyc2lvbiAqLwlcCi0Jd2FpdC5mbGFncyA9IFdRX0ZMQUdfRVhDTFVTSVZFOwkJCQkJXAotCV9fYWRkX3dhaXRfcXVldWVfdGFpbCgmc2VtLT53YWl0LCAmd2FpdCk7CQkJXAotIGxvc3RfcmFjZToJCQkJCQkJCVwKLQlzcGluX3VubG9ja19pcnEoJnNlbS0+c2VudHJ5KTsJCQkJCVwKLQotI2RlZmluZSBET1dOX1RBSUwJCQkJCQkJXAotCXNwaW5fbG9ja19pcnEoJnNlbS0+c2VudHJ5KTsJCQkJCVwKLQlpZiAod2FrZXJzKHNlbS0+Y291bnQpID09IDAgJiYgcmV0ID09IDApCQkJXAotCQlnb3RvIGxvc3RfcmFjZTsJLyogU29tZW9uZSBzdG9sZSBvdXIgd2FrZXVwICovCQlcCi0JX19yZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7CQkJCVwKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCQkJCVwKLQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnNlbS0+d2FpdCkgJiYgKHNlbS0+Y291bnQgPCAwKSkJCVwKLQkJc2VtLT5jb3VudCA9IHdha2VycyhzZW0tPmNvdW50KTsKLQotI2RlZmluZSBVUERBVEVfQ09VTlQJCQkJCQkJXAotCXNlbS0+Y291bnQgKz0gKHNlbS0+Y291bnQgPCAwKSA/IDEgOiAtIDE7Ci0JCi0KLXZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlET1dOX0hFQUQKLQotCWZvcig7OykgewotCQlzZXRfdGFza19zdGF0ZShjdXJyZW50LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCS8qIHdlIGNhbiBfcmVhZF8gdGhpcyB3aXRob3V0IHRoZSBzZW50cnkgKi8KLQkJaWYgKHNlbS0+Y291bnQgIT0gLTEpCi0JCQlicmVhazsKLSAJCXNjaGVkdWxlKCk7Ci0gCX0KLQotCURPV05fVEFJTAotCVVQREFURV9DT1VOVAotfQotCi1pbnQgX19zY2hlZCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCURPV05fSEVBRAotCi0JZm9yKDs7KSB7Ci0JCXNldF90YXNrX3N0YXRlKGN1cnJlbnQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCS8qIHdlIGNhbiBfcmVhZF8gdGhpcyB3aXRob3V0IHRoZSBzZW50cnkgKi8KLQkJaWYgKHNlbS0+Y291bnQgIT0gLTEpCi0JCQlicmVhazsKLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldCA9IC1FSU5UUjsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCi0JRE9XTl9UQUlMCi0KLQlpZiAoIXJldCkgewotCQlVUERBVEVfQ09VTlQKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCmluZGV4IDU4ZmNjYzkuLjA2MjEzZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTUzNCw3ICs1MzQsOCBAQAogCQkgKiBGbHVzaGluZyBvbmUgY2FjaGVsaW5lIGlzIGNoZWFwLgogCQkgKiAic3luYyIgb24gYmlnZ2VyICg+IDQgd2F5KSBib3hlcyBpcyBub3QuCiAJCSAqLwotCQlmbHVzaF9pY2FjaGVfcmFuZ2UocmVncy0+Z3JbMzBdLCByZWdzLT5nclszMF0gKyA0KTsKKwkJZmx1c2hfdXNlcl9kY2FjaGVfcmFuZ2UocmVncy0+Z3JbMzBdLCByZWdzLT5nclszMF0gKyA0KTsKKwkJZmx1c2hfdXNlcl9pY2FjaGVfcmFuZ2UocmVncy0+Z3JbMzBdLCByZWdzLT5nclszMF0gKyA0KTsKIAogCQlyZWdzLT5nclszMV0gPSByZWdzLT5nclszMF0gKyA4OwogCQkvKiBQcmVzZXJ2ZSBvcmlnaW5hbCByMjguICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKaW5kZXggNTBiYmYzMy4uNzFlZmQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYwpAQCAtNDksNyArNDksNiBAQAogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKICNpbmNsdWRlICJzeXMzMi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggMTE3NDM4ZS4uNmI1YWMzOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC00MDEsOSArNDAxLDEyIEBACiAJRU5UUllfQ09NUChrZXhlY19sb2FkKQkJLyogMzAwICovCiAJRU5UUllfQ09NUCh1dGltZW5zYXQpCiAJRU5UUllfQ09NUChzaWduYWxmZCkKLQlFTlRSWV9DT01QKHRpbWVyZmQpCisJRU5UUllfU0FNRShuaV9zeXNjYWxsKQkJLyogd2FzIHRpbWVyZmQgKi8KIAlFTlRSWV9TQU1FKGV2ZW50ZmQpCiAJRU5UUllfQ09NUChmYWxsb2NhdGUpCQkvKiAzMDUgKi8KKwlFTlRSWV9TQU1FKHRpbWVyZmRfY3JlYXRlKQorCUVOVFJZX0NPTVAodGltZXJmZF9zZXR0aW1lKQorCUVOVFJZX0NPTVAodGltZXJmZF9nZXR0aW1lKQogCiAJLyogTm90aGluZyB5ZXQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwppbmRleCA5OWZkNTY5Li45ZGM2ZGM0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwpAQCAtNTEsNiArNTEsOSBAQAogREVGSU5FX1NQSU5MT0NLKHBhX2RiaXRfbG9jayk7CiAjZW5kaWYKIAordm9pZCBwYXJpc2Nfc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHVuc2lnbmVkIGxvbmcgKnNwLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwogc3RhdGljIGludCBwcmludGJpbmFyeShjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgeCwgaW50IG5iaXRzKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IDFVTCA8PCAobmJpdHMgLSAxKTsKQEAgLTE0OCw2ICsxNTEsOCBAQAogCXByaW50X3N5bWJvbCgiIElBT1FbMV06ICVzXG4iLCByZWdzLT5pYW9xWzFdKTsKIAlwcmludGsobGV2ZWwpOwogCXByaW50X3N5bWJvbCgiIFJQKHIyKTogJXNcbiIsIHJlZ3MtPmdyWzJdKTsKKworCXBhcmlzY19zaG93X3N0YWNrKGN1cnJlbnQsIE5VTEwsIHJlZ3MpOwogfQogCiAKQEAgLTE4MSwxMSArMTg2LDE5IEBACiAJcHJpbnRrKCJcbiIpOwogfQogCi12b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzKQordm9pZCBwYXJpc2Nfc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyBpbmZvOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAotCWlmICghdGFzaykgeworCXQgPSB0YXNrID8gdGFzayA6IGN1cnJlbnQ7CisJaWYgKHJlZ3MpIHsKKwkJdW53aW5kX2ZyYW1lX2luaXQoJmluZm8sIHQsIHJlZ3MpOworCQlnb3RvIHNob3dfc3RhY2s7CisJfQorCisJaWYgKHQgPT0gY3VycmVudCkgewogCQl1bnNpZ25lZCBsb25nIHNwOwogCiBIRVJFOgpAQCAtMjAxLDEyICsyMTQsMTggQEAKIAkJCXVud2luZF9mcmFtZV9pbml0KCZpbmZvLCBjdXJyZW50LCAmcik7CiAJCX0KIAl9IGVsc2UgewotCQl1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmaW5mbywgdGFzayk7CisJCXVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKCZpbmZvLCB0KTsKIAl9CiAKK3Nob3dfc3RhY2s6CiAJZG9fc2hvd19zdGFjaygmaW5mbyk7CiB9CiAKK3ZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHVuc2lnbmVkIGxvbmcgKnNwKQoreworCXJldHVybiBwYXJpc2Nfc2hvd19zdGFjayh0LCBzcCwgTlVMTCk7Cit9CisKIGludCBpc192YWxpZF9idWdhZGRyKHVuc2lnbmVkIGxvbmcgaWFvcSkKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggNWI4ZDgzOC4uNGJiMmU5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTQ5LDYgKzQ5LDE5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWJvb2wKKwlkZXBlbmRzIG9uIFBQQzY0CisJZGVmYXVsdCB5CisKK2NvbmZpZyBMT0NLREVQX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCiAJYm9vbAogCkBAIC04MSw2ICs5NCwxMSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfR1BJTworCWJvb2wKKwloZWxwCisJICBHZW5lcmljIEdQSU8gQVBJIHN1cHBvcnQKKwogY29uZmlnIEFSQ0hfTk9fVklSVF9UT19CVVMKIAlkZWZfYm9vbCBQUEM2NAogCkBAIC05MCw2ICsxMDgsOCBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfS1BST0JFUworCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9MTUIKIAogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wKQEAgLTIwOSwxNSArMjI5LDYgQEAKIHNvdXJjZSBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0CiBzb3VyY2UgImZzL0tjb25maWcuYmluZm10IgogCi0jIFdlIG9wdGltaXN0aWNhbGx5IGFsbG9jYXRlIGxhcmdlcGFnZXMgZnJvbSB0aGUgVk0sIHNvIG1ha2UgdGhlIGxpbWl0Ci0jIGxhcmdlIGVub3VnaCAoMTZNQikuIFRoaXMgYmFkbHkgbmFtZWQgY29uZmlnIG9wdGlvbiBpcyBhY3R1YWxseQotIyBtYXggb3JkZXIgKyAxCi1jb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgotCWludAotCWRlcGVuZHMgb24gUFBDNjQKLQlkZWZhdWx0ICI5IiBpZiBQUENfNjRLX1BBR0VTCi0JZGVmYXVsdCAiMTMiCi0KIGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRQogCWJvb2wKIAlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRQpAQCAtMzA2LDYgKzMxNywxNiBAQAogCiAJICBEb24ndCBjaGFuZ2UgdGhpcyB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogCitjb25maWcgUEhZUF9EVU1QCisJYm9vbCAiSHlwZXJ2aXNvci1hc3Npc3RlZCBkdW1wIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSHlwZXJ2aXNvci1hc3Npc3RlZCBkdW1wIGlzIG1lYW50IHRvIGJlIGEga2R1bXAgcmVwbGFjZW1lbnQKKwkgIG9mZmVyaW5nIHJvYnVzdG5lc3MgYW5kIHNwZWVkIG5vdCBwb3NzaWJsZSB3aXRob3V0IHN5c3RlbQorCSAgaHlwZXJ2aXNvciBhc3Npc3RlbmNlLgorCisJICBJZiB1bnN1cmUsIHNheSAiTiIKKwogY29uZmlnIFBQQ0JVR19OVlJBTQogCWJvb2wgIkVuYWJsZSByZWFkaW5nIFBQQ0JVRyBOVlJBTSBkdXJpbmcgYm9vdCIgaWYgUFBMVVMgfHwgTE9QRUMKIAlkZWZhdWx0IHkgaWYgUFBDX1BSRVAKQEAgLTM4MCw2ICs0MDEsMjYgQEAKIAkgIHdoaWxlIG9uIGhhcmR3YXJlIHdpdGggc3VjaCBzdXBwb3J0LCBpdCB3aWxsIGJlIHVzZWQgdG8gbWFwCiAJICBub3JtYWwgYXBwbGljYXRpb24gcGFnZXMuCiAKK2NvbmZpZyBGT1JDRV9NQVhfWk9ORU9SREVSCisJaW50ICJNYXhpbXVtIHpvbmUgb3JkZXIiCisJZGVmYXVsdCAiOSIgaWYgUFBDXzY0S19QQUdFUworCWRlZmF1bHQgIjEzIiBpZiBQUEM2NCAmJiAhUFBDXzY0S19QQUdFUworCWRlZmF1bHQgIjExIgorCWhlbHAKKwkgIFRoZSBrZXJuZWwgbWVtb3J5IGFsbG9jYXRvciBkaXZpZGVzIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkKKwkgIGJsb2NrcyBpbnRvICJ6b25lcyIsIHdoZXJlIGVhY2ggem9uZSBpcyBhIHBvd2VyIG9mIHR3byBudW1iZXIgb2YKKwkgIHBhZ2VzLiAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgbGFyZ2VzdCBwb3dlciBvZiB0d28gdGhhdCB0aGUga2VybmVsCisJICBrZWVwcyBpbiB0aGUgbWVtb3J5IGFsbG9jYXRvci4gIElmIHlvdSBuZWVkIHRvIGFsbG9jYXRlIHZlcnkgbGFyZ2UKKwkgIGJsb2NrcyBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LCB0aGVuIHlvdSBtYXkgbmVlZCB0bworCSAgaW5jcmVhc2UgdGhpcyB2YWx1ZS4KKworCSAgVGhpcyBjb25maWcgb3B0aW9uIGlzIGFjdHVhbGx5IG1heGltdW0gb3JkZXIgcGx1cyBvbmUuIEZvciBleGFtcGxlLAorCSAgYSB2YWx1ZSBvZiAxMSBtZWFucyB0aGF0IHRoZSBsYXJnZXN0IGZyZWUgbWVtb3J5IGJsb2NrIGlzIDJeMTAgcGFnZXMuCisKKwkgIFRoZSBwYWdlIHNpemUgaXMgbm90IG5lY2Vzc2FyaWx5IDRLQi4gIEZvciBleGFtcGxlLCBvbiA2NC1iaXQKKwkgIHN5c3RlbXMsIDY0S0IgcGFnZXMgY2FuIGJlIGVuYWJsZWQgdmlhIENPTkZJR19QUENfNjRLX1BBR0VTLiAgS2VlcAorCSAgdGhpcyBpbiBtaW5kIHdoZW4gY2hvb3NpbmcgYSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24uCisKIGNvbmZpZyBQUENfU1VCUEFHRV9QUk9UCiAJYm9vbCAiU3VwcG9ydCBzZXR0aW5nIHByb3RlY3Rpb25zIGZvciA0ayBzdWJwYWdlcyIKIAlkZXBlbmRzIG9uIFBQQ182NEtfUEFHRVMKQEAgLTQ4OSw2ICs1MzAsMTQgQEAKICAJYm9vbAogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCiAKK2NvbmZpZyA0eHhfU09DCisJYm9vbAorCitjb25maWcgRlNMX0xCQworCWJvb2wKKwloZWxwCisJICBGcmVlc2NhbGUgTG9jYWxidXMgc3VwcG9ydAorCiAjIFllcyBNQ0EgUlMvNjAwMHMgZXhpc3QgYnV0IExpbnV4LVBQQyBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhbnkKIGNvbmZpZyBNQ0EKIAlib29sCkBAIC02NjIsMjIgKzcxMSw2IEBACiAJaGV4ICJTaXplIG9mIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wiIGlmIENPTlNJU1RFTlRfU0laRV9CT09MCiAJZGVmYXVsdCAiMHgwMDIwMDAwMCIgaWYgTk9UX0NPSEVSRU5UX0NBQ0hFCiAKLWNvbmZpZyBCT09UX0xPQURfQk9PTAotCWJvb2wgIlNldCB0aGUgYm9vdCBsaW5rL2xvYWQgYWRkcmVzcyIKLQlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgIVBQQ19NVUxUSVBMQVRGT1JNCi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIGluaXRpYWwgbG9hZCBhZGRyZXNzIG9mIHRoZSB6SW1hZ2UKLQkgIG9yIHpJbWFnZS5pbml0cmQgZmlsZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgYXJlIG9uIGEgYm9hcmQKLQkgIHdoaWNoIGhhcyBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkuCi0KLQkgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KLQotY29uZmlnIEJPT1RfTE9BRAotCWhleCAiTGluay9sb2FkIGFkZHJlc3MgZm9yIGJvb3RpbmciIGlmIEJPT1RfTE9BRF9CT09MCi0JZGVmYXVsdCAiMHgwMDQwMDAwMCIgaWYgNDB4IHx8IDh4eCB8fCA4MjYwCi0JZGVmYXVsdCAiMHgwMTAwMDAwMCIgaWYgNDR4Ci0JZGVmYXVsdCAiMHgwMDgwMDAwMCIKLQogY29uZmlnIFBJTl9UTEIKIAlib29sICJQaW5uZWQgS2VybmVsIFRMQnMgKDg2MCBPTkxZKSIKIAlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgOHh4CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCmluZGV4IGRiN2NjMzQuLmE4NmQ4ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCkBAIC0yNjksNyArMjY5LDcgQEAKIAloZXggIkNQTSBVQVJUIGVhcmx5IGRlYnVnIHRyYW5zbWl0IGRlc2NyaXB0b3IgYWRkcmVzcyIKIAlkZXBlbmRzIG9uIFBQQ19FQVJMWV9ERUJVR19DUE0KIAlkZWZhdWx0ICIweGZhMjAyMDA4IiBpZiBQUENfRVA4OFhDCi0JZGVmYXVsdCAiMHhmMDAwMDAwOCIgaWYgQ1BNMgorCWRlZmF1bHQgIjB4ZjAwMDFmZjgiIGlmIENQTTIKIAlkZWZhdWx0ICIweGZmMDAyMDA4IiBpZiBDUE0xCiAJaGVscAogCSAgVGhpcyBzcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQppbmRleCA2ODQ1NDgyLi5lMmVjNGE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC03MSwxMyArNzEsMTEgQEAKIAogTERGTEFHU192bWxpbnV4CTo9IC1Cc3RhdGljCiAKLUNQUEZMQUdTLSQoQ09ORklHX1BQQzMyKSA6PSAtSWFyY2gvJChBUkNIKQotQUZMQUdTLSQoQ09ORklHX1BQQzMyKQk6PSAtSWFyY2gvJChBUkNIKQogQ0ZMQUdTLSQoQ09ORklHX1BQQzY0KQk6PSAtbW1pbmltYWwtdG9jIC1tdHJhY2ViYWNrPW5vbmUgIC1tY2FsbC1haXhkZXNjCi1DRkxBR1MtJChDT05GSUdfUFBDMzIpCTo9IC1JYXJjaC8kKEFSQ0gpIC1mZml4ZWQtcjIgLW1tdWx0aXBsZQotS0JVSUxEX0NQUEZMQUdTCSs9ICQoQ1BQRkxBR1MteSkKLUtCVUlMRF9BRkxBR1MJKz0gJChBRkxBR1MteSkKLUtCVUlMRF9DRkxBR1MJKz0gLW1zb2Z0LWZsb2F0IC1waXBlICQoQ0ZMQUdTLXkpCitDRkxBR1MtJChDT05GSUdfUFBDMzIpCTo9IC1mZml4ZWQtcjIgLW1tdWx0aXBsZQorS0JVSUxEX0NQUEZMQUdTCSs9IC1JYXJjaC8kKEFSQ0gpCitLQlVJTERfQUZMQUdTCSs9IC1JYXJjaC8kKEFSQ0gpCitLQlVJTERfQ0ZMQUdTCSs9IC1tc29mdC1mbG9hdCAtcGlwZSAtSWFyY2gvJChBUkNIKSAkKENGTEFHUy15KQogQ1BQCQk9ICQoQ0MpIC1FICQoS0JVSUxEX0NGTEFHUykKIAogQ0hFQ0tGTEFHUwkrPSAtbSQoQ09ORklHX1dPUkRfU0laRSkgLURfX3Bvd2VycGNfXyAtRF9fcG93ZXJwYyQoQ09ORklHX1dPUkRfU0laRSlfXwpAQCAtMTU1LDcgKzE1Myw3IEBACiAKIENQUEZMQUdTX3ZtbGludXgubGRzCTo9IC1VcG93ZXJwYwogCi1CT09UX1RBUkdFVFMgPSB6SW1hZ2UgekltYWdlLmluaXRyZCB1SW1hZ2UgdHJlZUltYWdlLiUgY3VJbWFnZS4lCitCT09UX1RBUkdFVFMgPSB6SW1hZ2UgekltYWdlLmluaXRyZCB1SW1hZ2UgekltYWdlJSBkdGJJbWFnZSUgdHJlZUltYWdlLiUgY3VJbWFnZS4lCiAKIFBIT05ZICs9ICQoQk9PVF9UQVJHRVRTKQogCkBAIC0xNjQsNyArMTYyLDcgQEAKICQoQk9PVF9UQVJHRVRTKTogdm1saW51eAogCSQoUSkkKE1BS0UpIEFSQ0g9cHBjNjQgJChidWlsZCk9JChib290KSAkKHBhdHN1YnN0ICUsJChib290KS8lLCRAKQogCi1ib290d3JhcHBlcl9pbnN0YWxsOgorYm9vdHdyYXBwZXJfaW5zdGFsbCAlLmR0YjoKIAkkKFEpJChNQUtFKSBBUkNIPXBwYzY0ICQoYnVpbGQpPSQoYm9vdCkgJChwYXRzdWJzdCAlLCQoYm9vdCkvJSwkQCkKIAogZGVmaW5lIGFyY2hoZWxwCkBAIC0xNzYsNyArMTc0LDcgQEAKICAgQGVjaG8gJyAgKl9kZWZjb25maWcgICAgIC0gU2VsZWN0IGRlZmF1bHQgY29uZmlnIGZyb20gYXJjaC8kKEFSQ0gpL2NvbmZpZ3MnCiBlbmRlZgogCi1pbnN0YWxsOiB2ZHNvX2luc3RhbGwKK2luc3RhbGw6CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBpbnN0YWxsCiAKIHZkc29faW5zdGFsbDoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggNjNkMDdjYy4uNWJhNTBjNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTM1LDExICszNSwxMiBAQAogCiBCT09UQ0ZMQUdTCSs9IC1JJChvYmopIC1JJChzcmN0cmVlKS8kKG9iaikgLUkkKHNyY3RyZWUpLyQoc3JjKS9saWJmZHQKIAotJChvYmopLzR4eC5vOiBCT09UQ0ZMQUdTICs9IC1tY3B1PTQ0MAotJChvYmopL2Vib255Lm86IEJPT1RDRkxBR1MgKz0gLW1jcHU9NDQwCi0kKG9iaikvY3Vib290LXRhaXNoYW4ubzogQk9PVENGTEFHUyArPSAtbWNwdT00NDAKLSQob2JqKS9jdWJvb3Qta2F0bWFpLm86IEJPT1RDRkxBR1MgKz0gLW1jcHU9NDQwCiskKG9iaikvNHh4Lm86IEJPT1RDRkxBR1MgKz0gLW1jcHU9NDA1CiskKG9iaikvZWJvbnkubzogQk9PVENGTEFHUyArPSAtbWNwdT00MDUKKyQob2JqKS9jdWJvb3QtdGFpc2hhbi5vOiBCT09UQ0ZMQUdTICs9IC1tY3B1PTQwNQorJChvYmopL2N1Ym9vdC1rYXRtYWkubzogQk9PVENGTEFHUyArPSAtbWNwdT00MDUKICQob2JqKS90cmVlYm9vdC13YWxudXQubzogQk9PVENGTEFHUyArPSAtbWNwdT00MDUKKyQob2JqKS92aXJ0ZXg0MDUtaGVhZC5vOiBCT09UQ0ZMQUdTICs9IC1tY3B1PTQwNQogCiAKIHpsaWIgICAgICAgOj0gaW5mZmFzdC5jIGluZmxhdGUuYyBpbmZ0cmVlcy5jCkBAIC02NCw3ICs2NSw4IEBACiAJCWN1Ym9vdC1iYW1ib28uYyBjdWJvb3QtbXBjNzQ0OGhwYzIuYyBjdWJvb3QtdGFpc2hhbi5jIFwKIAkJZml4ZWQtaGVhZC5TIGVwODh4Yy5jIGVwNDA1LmMgXAogCQljdWJvb3Qta2F0bWFpLmMgY3Vib290LXJhaW5pZXIuYyByZWRib290LTh4eC5jIGVwODI0OGUuYyBcCi0JCWN1Ym9vdC13YXJwLmMgY3Vib290LTg1eHgtY3BtMi5jCisJCWN1Ym9vdC13YXJwLmMgY3Vib290LTg1eHgtY3BtMi5jIGN1Ym9vdC15b3NlbWl0ZS5jIHNpbXBsZWJvb3QuYyBcCisJCXZpcnRleDQwNS1oZWFkLlMKIHNyYy1ib290IDo9ICQoc3JjLXdsaWIpICQoc3JjLXBsYXQpIGVtcHR5LmMKIAogc3JjLWJvb3QgOj0gJChhZGRwcmVmaXggJChvYmopLywgJChzcmMtYm9vdCkpCkBAIC0xODYsMTMgKzE4OCwxMyBAQAogaW1hZ2UtJChDT05GSUdfUFBDX1BTRVJJRVMpCQkrPSB6SW1hZ2UucHNlcmllcwogaW1hZ2UtJChDT05GSUdfUFBDX01BUExFKQkJKz0gekltYWdlLnBzZXJpZXMKIGltYWdlLSQoQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSkJKz0gekltYWdlLnBzZXJpZXMKLWltYWdlLSQoQ09ORklHX1BQQ19QUzMpCQkJKz0gekltYWdlLWR0Yi5wczMKK2ltYWdlLSQoQ09ORklHX1BQQ19QUzMpCQkJKz0gZHRiSW1hZ2UucHMzCiBpbWFnZS0kKENPTkZJR19QUENfQ0VMTEVCKQkJKz0gekltYWdlLnBzZXJpZXMKIGltYWdlLSQoQ09ORklHX1BQQ19DSFJQKQkJKz0gekltYWdlLmNocnAKIGltYWdlLSQoQ09ORklHX1BQQ19FRklLQSkJCSs9IHpJbWFnZS5jaHJwCiBpbWFnZS0kKENPTkZJR19QUENfUE1BQykJCSs9IHpJbWFnZS5wbWFjCiBpbWFnZS0kKENPTkZJR19QUENfSE9MTFkpCQkrPSB6SW1hZ2UuaG9sbHkKLWltYWdlLSQoQ09ORklHX1BQQ19QUlBNQzI4MDApCQkrPSB6SW1hZ2UucHJwbWMyODAwCitpbWFnZS0kKENPTkZJR19QUENfUFJQTUMyODAwKQkJKz0gZHRiSW1hZ2UucHJwbWMyODAwCiBpbWFnZS0kKENPTkZJR19QUENfSVNFUklFUykJCSs9IHpJbWFnZS5pc2VyaWVzCiBpbWFnZS0kKENPTkZJR19ERUZBVUxUX1VJTUFHRSkJCSs9IHVJbWFnZQogCkBAIC0yMDUsNyArMjA3LDcgQEAKICMKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vNDB4L0tjb25maWcKLWltYWdlLSQoQ09ORklHX0VQNDA1KQkJCSs9IHpJbWFnZS1kdGIuZXA0MDUKK2ltYWdlLSQoQ09ORklHX0VQNDA1KQkJCSs9IGR0YkltYWdlLmVwNDA1CiBpbWFnZS0kKENPTkZJR19XQUxOVVQpCQkJKz0gdHJlZUltYWdlLndhbG51dAogCiAjIEJvYXJkIHBvcnRzIGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS80NHgvS2NvbmZpZwpAQCAtMjE2LDEzICsyMTgsMTQgQEAKIGltYWdlLSQoQ09ORklHX1RBSVNIQU4pCQkJKz0gY3VJbWFnZS50YWlzaGFuCiBpbWFnZS0kKENPTkZJR19LQVRNQUkpCQkJKz0gY3VJbWFnZS5rYXRtYWkKIGltYWdlLSQoQ09ORklHX1dBUlApCQkJKz0gY3VJbWFnZS53YXJwCitpbWFnZS0kKENPTkZJR19ZT1NFTUlURSkJCSs9IGN1SW1hZ2UueW9zZW1pdGUKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vOHh4L0tjb25maWcKIGltYWdlLSQoQ09ORklHX1BQQ19NUEM4NlhBRFMpCQkrPSBjdUltYWdlLm1wYzg2NmFkcwogaW1hZ2UtJChDT05GSUdfUFBDX01QQzg4NUFEUykJCSs9IGN1SW1hZ2UubXBjODg1YWRzCi1pbWFnZS0kKENPTkZJR19QUENfRVA4OFhDKQkJKz0gekltYWdlLWR0Yi5lcDg4eGMKK2ltYWdlLSQoQ09ORklHX1BQQ19FUDg4WEMpCQkrPSBkdGJJbWFnZS5lcDg4eGMKIGltYWdlLSQoQ09ORklHX1BQQ19BRERFUjg3NSkJCSs9IGN1SW1hZ2UuYWRkZXI4NzUtdWJvb3QgXAotCQkJCQkgICB6SW1hZ2UtZHRiLmFkZGVyODc1LXJlZGJvb3QKKwkJCQkJICAgZHRiSW1hZ2UuYWRkZXI4NzUtcmVkYm9vdAogCiAjIEJvYXJkIHBvcnRzIGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS81Mnh4L0tjb25maWcKIGltYWdlLSQoQ09ORklHX1BQQ19MSVRFNTIwMCkJCSs9IGN1SW1hZ2UubGl0ZTUyMDAgY3VJbWFnZS5saXRlNTIwMGIKQEAgLTIzMCw3ICsyMzMsNyBAQAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vODJ4eC9LY29uZmlnCiBpbWFnZS0kKENPTkZJR19NUEM4MjcyX0FEUykJCSs9IGN1SW1hZ2UubXBjODI3MmFkcwogaW1hZ2UtJChDT05GSUdfUFEyRkFEUykJCQkrPSBjdUltYWdlLnBxMmZhZHMKLWltYWdlLSQoQ09ORklHX0VQODI0OEUpCQkJKz0gekltYWdlLWR0Yi5lcDgyNDhlCitpbWFnZS0kKENPTkZJR19FUDgyNDhFKQkJCSs9IGR0YkltYWdlLmVwODI0OGUKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vODN4eC9LY29uZmlnCiBpbWFnZS0kKENPTkZJR19NUEM4MzJ4X01EUykJCSs9IGN1SW1hZ2UubXBjODMyeF9tZHMKQEAgLTI1Myw4ICsyNTYsOSBAQAogaW1hZ2UtJChDT05GSUdfVFFNODU0MSkJCQkrPSBjdUltYWdlLnRxbTg1NDEKIGltYWdlLSQoQ09ORklHX1RRTTg1NTUpCQkJKz0gY3VJbWFnZS50cW04NTU1CiBpbWFnZS0kKENPTkZJR19UUU04NTYwKQkJCSs9IGN1SW1hZ2UudHFtODU2MAotaW1hZ2UtJChDT05GSUdfU0JDODU0OCkJCQkrPSBjdUltYWdlLnRxbTg1NDgKLWltYWdlLSQoQ09ORklHX1NCQzg1NjApCQkJKz0gY3VJbWFnZS50cW04NTYwCitpbWFnZS0kKENPTkZJR19TQkM4NTQ4KQkJCSs9IGN1SW1hZ2Uuc2JjODU0OAoraW1hZ2UtJChDT05GSUdfU0JDODU2MCkJCQkrPSBjdUltYWdlLnNiYzg1NjAKK2ltYWdlLSQoQ09ORklHX0tTSTg1NjApCQkJKz0gY3VJbWFnZS5rc2k4NTYwCiAKICMgQm9hcmQgcG9ydHMgaW4gYXJjaC9wb3dlcnBjL3BsYXRmb3JtL2VtYmVkZGVkNnh4L0tjb25maWcKIGltYWdlLSQoQ09ORklHX1NUT1JDRU5URVIpCQkrPSBjdUltYWdlLnN0b3JjZW50ZXIKQEAgLTI2OCw3ICsyNzIsOCBAQAogCiBpbml0cmQtICA6PSAkKHBhdHN1YnN0IHpJbWFnZSUsIHpJbWFnZS5pbml0cmQlLCAkKGltYWdlLW4pICQoaW1hZ2UtKSkKIGluaXRyZC15IDo9ICQocGF0c3Vic3QgekltYWdlJSwgekltYWdlLmluaXRyZCUsIFwKLQkJJChwYXRzdWJzdCB0cmVlSW1hZ2UlLCB0cmVlSW1hZ2UuaW5pdHJkJSwgJChpbWFnZS15KSkpCisJCSQocGF0c3Vic3QgZHRiSW1hZ2UlLCBkdGJJbWFnZS5pbml0cmQlLCBcCisJCSQocGF0c3Vic3QgdHJlZUltYWdlJSwgdHJlZUltYWdlLmluaXRyZCUsICQoaW1hZ2UteSkpKSkKIGluaXRyZC15IDo9ICQoZmlsdGVyLW91dCAkKGltYWdlLXkpLCAkKGluaXRyZC15KSkKIHRhcmdldHMJKz0gJChpbWFnZS15KSAkKGluaXRyZC15KQogCkBAIC0yODMsMTEgKzI4OCwxMiBAQAogJChvYmopL3pJbWFnZS4lOiB2bWxpbnV4ICQod3JhcHBlcmJpdHMpCiAJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCwkKikKIAotJChvYmopL3pJbWFnZS1kdGIuaW5pdHJkLiU6IHZtbGludXggJCh3cmFwcGVyYml0cykgJChkdHN0cmVlKS8lLmR0cwotCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsJCosJChkdHN0cmVlKS8kKi5kdHMsLCQob2JqKS9yYW1kaXNrLmltYWdlLmd6KQorIyBkdGJJbWFnZSUgLSBhIGR0YkltYWdlIGlzIGEgekltYWdlIHdpdGggYW4gZW1iZWRkZWQgZGV2aWNlIHRyZWUgYmxvYgorJChvYmopL2R0YkltYWdlLmluaXRyZC4lOiB2bWxpbnV4ICQod3JhcHBlcmJpdHMpICQob2JqKS8lLmR0YgorCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsJCosLCQob2JqKS8kKi5kdGIsJChvYmopL3JhbWRpc2suaW1hZ2UuZ3opCiAKLSQob2JqKS96SW1hZ2UtZHRiLiU6IHZtbGludXggJCh3cmFwcGVyYml0cykgJChkdHN0cmVlKS8lLmR0cwotCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsJCosJChkdHN0cmVlKS8kKi5kdHMpCiskKG9iaikvZHRiSW1hZ2UuJTogdm1saW51eCAkKHdyYXBwZXJiaXRzKSAkKG9iaikvJS5kdGIKKwkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLCQqLCwkKG9iaikvJCouZHRiKQogCiAjIFRoaXMgY2Fubm90IGJlIGluIHRoZSByb290IG9mICQoc3JjKSBhcyB0aGUgekltYWdlIHJ1bGUgYWx3YXlzIGFkZHMgYSAkKG9iaikKICMgcHJlZml4CkBAIC0zMDAsMTQgKzMwNiwyNCBAQAogJChvYmopL3VJbWFnZTogdm1saW51eCAkKHdyYXBwZXJiaXRzKQogCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsdWJvb3QpCiAKLSQob2JqKS9jdUltYWdlLiU6IHZtbGludXggJChkdHN0cmVlKS8lLmR0cyAkKHdyYXBwZXJiaXRzKQotCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsY3Vib290LSQqLCQoZHRzdHJlZSkvJCouZHRzKQorJChvYmopL2N1SW1hZ2UuJTogdm1saW51eCAkKG9iaikvJS5kdGIgJCh3cmFwcGVyYml0cykKKwkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLGN1Ym9vdC0kKiwsJChvYmopLyQqLmR0YikKIAotJChvYmopL3RyZWVJbWFnZS5pbml0cmQuJTogdm1saW51eCAkKGR0c3RyZWUpLyUuZHRzICQod3JhcHBlcmJpdHMpCi0JJChjYWxsIGlmX2NoYW5nZWQsd3JhcCx0cmVlYm9vdC0kKiwkKGR0c3RyZWUpLyQqLmR0cywsJChvYmopL3JhbWRpc2suaW1hZ2UuZ3opCiskKG9iaikvc2ltcGxlSW1hZ2UuaW5pdHJkLiU6IHZtbGludXggJChvYmopLyUuZHRiICQod3JhcHBlcmJpdHMpCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCxzaW1wbGVib290LSQqLCwkKG9iaikvJCouZHRiLCQob2JqKS9yYW1kaXNrLmltYWdlLmd6KQogCi0kKG9iaikvdHJlZUltYWdlLiU6IHZtbGludXggJChkdHN0cmVlKS8lLmR0cyAkKHdyYXBwZXJiaXRzKQotCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsdHJlZWJvb3QtJCosJChkdHN0cmVlKS8kKi5kdHMpCiskKG9iaikvc2ltcGxlSW1hZ2UuJTogdm1saW51eCAkKG9iaikvJS5kdGIgJCh3cmFwcGVyYml0cykKKwkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLHNpbXBsZWJvb3QtJCosLCQob2JqKS8kKi5kdGIpCisKKyQob2JqKS90cmVlSW1hZ2UuaW5pdHJkLiU6IHZtbGludXggJChvYmopLyUuZHRiICQod3JhcHBlcmJpdHMpCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCx0cmVlYm9vdC0kKiwsJChvYmopLyQqLmR0YiwkKG9iaikvcmFtZGlzay5pbWFnZS5neikKKworJChvYmopL3RyZWVJbWFnZS4lOiB2bWxpbnV4ICQob2JqKS8lLmR0YiAkKHdyYXBwZXJiaXRzKQorCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsdHJlZWJvb3QtJCosLCQob2JqKS8kKi5kdGIpCisKKyMgUnVsZSB0byBidWlsZCBkZXZpY2UgdHJlZSBibG9icworJChvYmopLyUuZHRiOiAkKGR0c3RyZWUpLyUuZHRzICQob2JqKS9kdGMKKwkkKG9iaikvZHRjIC1PIGR0YiAtbyAkKG9iaikvJCouZHRiIC1iIDAgJChEVFNfRkxBR1MpICQoZHRzdHJlZSkvJCouZHRzCiAKICMgSWYgdGhlcmUgaXNuJ3QgYSBwbGF0Zm9ybSBzZWxlY3RlZCB0aGVuIGp1c3Qgc3RyaXAgdGhlIHZtbGludXguCiBpZmVxICgsJChpbWFnZS15KSkKQEAgLTMyNCw3ICszNDAsNyBAQAogCiAjIGFueXRoaW5nIG5vdCBpbiAkKHRhcmdldHMpCiBjbGVhbi1maWxlcyArPSAkKGltYWdlLSkgJChpbml0cmQtKSB6SW1hZ2UgekltYWdlLmluaXRyZCBjdUltYWdlLiogdHJlZUltYWdlLiogXAotCW90aGVyb3MuYmxkCisJb3RoZXJvcy5ibGQgKi5kdGIKIAogIyBjbGVhbiB1cCBmaWxlcyBjYWNoZWQgYnkgd3JhcHBlcgogY2xlYW4ta2VybmVsIDo9IHZtbGludXguc3RyaXAgdm1saW51eC5iaW4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2JhbWJvby5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvYmFtYm9vLmMKaW5kZXggNTRiMzNmMS4uYjgyY2FjYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvYmFtYm9vLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvYmFtYm9vLmMKQEAgLTMzLDcgKzMzLDggQEAKIAlpYm00NDBlcF9maXh1cF9jbG9ja3Moc3lzY2xrLCAxMTA1OTIwMCwgMjUwMDAwMDApOwogCWlibTR4eF9zZHJhbV9maXh1cF9tZW1zaXplKCk7CiAJaWJtNHh4X3F1aWVzY2VfZXRoKCh1MzIgKikweGVmNjAwZTAwLCAodTMyICopMHhlZjYwMGYwMCk7Ci0JZHRfZml4dXBfbWFjX2FkZHJlc3NlcyhiYW1ib29fbWFjMCwgYmFtYm9vX21hYzEpOworCWR0X2ZpeHVwX21hY19hZGRyZXNzX2J5X2FsaWFzKCJldGhlcm5ldDAiLCBiYW1ib29fbWFjMCk7CisJZHRfZml4dXBfbWFjX2FkZHJlc3NfYnlfYWxpYXMoImV0aGVybmV0MSIsIGJhbWJvb19tYWMxKTsKIH0KIAogdm9pZCBiYW1ib29faW5pdCh2b2lkICptYWMwLCB2b2lkICptYWMxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3BtLXNlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3BtLXNlcmlhbC5jCmluZGV4IDI4Mjk2ZmEuLjE5ZGMxNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2NwbS1zZXJpYWwuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jcG0tc2VyaWFsLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgImlvLmgiCiAjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAicGFnZS5oIgogCiBzdHJ1Y3QgY3BtX3NjYyB7CiAJdTMyIGdzbXJsOwpAQCAtNDIsNiArNDMsMjIgQEAKIAl1MTYgdGJhc2U7CiAJdTggcmZjcjsKIAl1OCB0ZmNyOworCXUxNiBtcmJscjsKKwl1MzIgcnN0YXRlOworCXU4IHJlczFbNF07CisJdTE2IHJicHRyOworCXU4IHJlczJbNl07CisJdTMyIHRzdGF0ZTsKKwl1OCByZXMzWzRdOworCXUxNiB0YnB0cjsKKwl1OCByZXM0WzZdOworCXUxNiBtYXhpZGw7CisJdTE2IGlkbGM7CisJdTE2IGJya2xuOworCXUxNiBicmtlYzsKKwl1MTYgYnJrY3I7CisJdTE2IHJtYXNrOworCXU4IHJlczVbNF07CiB9OwogCiBzdHJ1Y3QgY3BtX2JkIHsKQEAgLTU0LDEwICs3MSwxMCBAQAogc3RhdGljIHN0cnVjdCBjcG1fcGFyYW0gKnBhcmFtOwogc3RhdGljIHN0cnVjdCBjcG1fc21jICpzbWM7CiBzdGF0aWMgc3RydWN0IGNwbV9zY2MgKnNjYzsKLXN0cnVjdCBjcG1fYmQgKnRiZGYsICpyYmRmOworc3RhdGljIHN0cnVjdCBjcG1fYmQgKnRiZGYsICpyYmRmOwogc3RhdGljIHUzMiBjcG1fY21kOwotc3RhdGljIHU4ICptdXJhbV9zdGFydDsKLXN0YXRpYyB1MzIgbXVyYW1fb2Zmc2V0Oworc3RhdGljIHZvaWQgKmNiZF9hZGRyOworc3RhdGljIHUzMiBjYmRfb2Zmc2V0OwogCiBzdGF0aWMgdm9pZCAoKmRvX2NtZCkoaW50IG9wKTsKIHN0YXRpYyB2b2lkICgqZW5hYmxlX3BvcnQpKHZvaWQpOwpAQCAtMTE5LDIwICsxMzYsMjUgQEAKIAogCW91dF84KCZwYXJhbS0+cmZjciwgMHgxMCk7CiAJb3V0XzgoJnBhcmFtLT50ZmNyLCAweDEwKTsKKwlvdXRfYmUxNigmcGFyYW0tPm1yYmxyLCAxKTsKKwlvdXRfYmUxNigmcGFyYW0tPm1heGlkbCwgMCk7CisJb3V0X2JlMTYoJnBhcmFtLT5icmtlYywgMCk7CisJb3V0X2JlMTYoJnBhcmFtLT5icmtsbiwgMCk7CisJb3V0X2JlMTYoJnBhcmFtLT5icmtjciwgMCk7CiAKLQlyYmRmID0gKHN0cnVjdCBjcG1fYmQgKiltdXJhbV9zdGFydDsKLQlyYmRmLT5hZGRyID0gKHU4ICopKHJiZGYgKyAyKTsKKwlyYmRmID0gY2JkX2FkZHI7CisJcmJkZi0+YWRkciA9ICh1OCAqKXJiZGYgLSAxOwogCXJiZGYtPnNjID0gMHhhMDAwOwogCXJiZGYtPmxlbiA9IDE7CiAKIAl0YmRmID0gcmJkZiArIDE7Ci0JdGJkZi0+YWRkciA9ICh1OCAqKShyYmRmICsgMikgKyAxOworCXRiZGYtPmFkZHIgPSAodTggKilyYmRmIC0gMjsKIAl0YmRmLT5zYyA9IDB4MjAwMDsKIAl0YmRmLT5sZW4gPSAxOwogCiAJc3luYygpOwotCW91dF9iZTE2KCZwYXJhbS0+cmJhc2UsIG11cmFtX29mZnNldCk7Ci0Jb3V0X2JlMTYoJnBhcmFtLT50YmFzZSwgbXVyYW1fb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBjcG1fYmQpKTsKKwlvdXRfYmUxNigmcGFyYW0tPnJiYXNlLCBjYmRfb2Zmc2V0KTsKKwlvdXRfYmUxNigmcGFyYW0tPnRiYXNlLCBjYmRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBjcG1fYmQpKTsKIAogCWRvX2NtZChDUE1fQ01EX0lOSVRfUlhfVFgpOwogCkBAIC0xNzUsMTAgKzE5NywxMiBAQAogCiBpbnQgY3BtX2NvbnNvbGVfaW5pdCh2b2lkICpkZXZwLCBzdHJ1Y3Qgc2VyaWFsX2NvbnNvbGVfZGF0YSAqc2NkcCkKIHsKLQl2b2lkICpyZWdfdmlydFsyXTsKLQlpbnQgaXNfc21jID0gMCwgaXNfY3BtMiA9IDAsIG47Ci0JdW5zaWduZWQgbG9uZyByZWdfcGh5czsKKwl2b2lkICp2cmVnWzJdOworCXUzMiByZWdbMl07CisJaW50IGlzX3NtYyA9IDAsIGlzX2NwbTIgPSAwOwogCXZvaWQgKnBhcmVudCwgKm11cmFtOworCXZvaWQgKm11cmFtX2FkZHI7CisJdW5zaWduZWQgbG9uZyBtdXJhbV9vZmZzZXQsIG11cmFtX3NpemU7CiAKIAlpZiAoZHRfaXNfY29tcGF0aWJsZShkZXZwLCAiZnNsLGNwbTEtc21jLXVhcnQiKSkgewogCQlpc19zbWMgPSAxOwpAQCAtMjAyLDYzICsyMjYsNjQgQEAKIAllbHNlCiAJCWRvX2NtZCA9IGNwbTFfY21kOwogCi0JbiA9IGdldHByb3AoZGV2cCwgImZzbCxjcG0tY29tbWFuZCIsICZjcG1fY21kLCA0KTsKLQlpZiAobiA8IDQpCisJaWYgKGdldHByb3AoZGV2cCwgImZzbCxjcG0tY29tbWFuZCIsICZjcG1fY21kLCA0KSA8IDQpCiAJCXJldHVybiAtMTsKIAotCW4gPSBnZXRwcm9wKGRldnAsICJ2aXJ0dWFsLXJlZyIsIHJlZ192aXJ0LCBzaXplb2YocmVnX3ZpcnQpKTsKLQlpZiAobiA8IChpbnQpc2l6ZW9mKHJlZ192aXJ0KSkgewotCQlmb3IgKG4gPSAwOyBuIDwgMjsgbisrKSB7Ci0JCQlpZiAoIWR0X3hsYXRlX3JlZyhkZXZwLCBuLCAmcmVnX3BoeXMsIE5VTEwpKQotCQkJCXJldHVybiAtMTsKLQotCQkJcmVnX3ZpcnRbbl0gPSAodm9pZCAqKXJlZ19waHlzOwotCQl9Ci0JfQorCWlmIChkdF9nZXRfdmlydHVhbF9yZWcoZGV2cCwgdnJlZywgMikgPCAyKQorCQlyZXR1cm4gLTE7CiAKIAlpZiAoaXNfc21jKQotCQlzbWMgPSByZWdfdmlydFswXTsKKwkJc21jID0gdnJlZ1swXTsKIAllbHNlCi0JCXNjYyA9IHJlZ192aXJ0WzBdOworCQlzY2MgPSB2cmVnWzBdOwogCi0JcGFyYW0gPSByZWdfdmlydFsxXTsKKwlwYXJhbSA9IHZyZWdbMV07CiAKIAlwYXJlbnQgPSBnZXRfcGFyZW50KGRldnApOwogCWlmICghcGFyZW50KQogCQlyZXR1cm4gLTE7CiAKLQluID0gZ2V0cHJvcChwYXJlbnQsICJ2aXJ0dWFsLXJlZyIsIHJlZ192aXJ0LCBzaXplb2YocmVnX3ZpcnQpKTsKLQlpZiAobiA8IChpbnQpc2l6ZW9mKHJlZ192aXJ0KSkgewotCQlpZiAoIWR0X3hsYXRlX3JlZyhwYXJlbnQsIDAsICZyZWdfcGh5cywgTlVMTCkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJcmVnX3ZpcnRbMF0gPSAodm9pZCAqKXJlZ19waHlzOwotCX0KLQotCWNwY3IgPSByZWdfdmlydFswXTsKKwlpZiAoZHRfZ2V0X3ZpcnR1YWxfcmVnKHBhcmVudCwgJmNwY3IsIDEpIDwgMSkKKwkJcmV0dXJuIC0xOwogCiAJbXVyYW0gPSBmaW5kZGV2aWNlKCIvc29jL2NwbS9tdXJhbS9kYXRhIik7CiAJaWYgKCFtdXJhbSkKIAkJcmV0dXJuIC0xOwogCiAJLyogRm9yIGJvb3R3cmFwcGVyLWNvbXBhdGlibGUgZGV2aWNlIHRyZWVzLCB3ZSBhc3N1bWUgdGhhdCB0aGUgZmlyc3QKLQkgKiBlbnRyeSBoYXMgYXQgbGVhc3QgMTggYnl0ZXMsIGFuZCB0aGF0ICNhZGRyZXNzLWNlbGxzLyNkYXRhLWNlbGxzCisJICogZW50cnkgaGFzIGF0IGxlYXN0IDEyOCBieXRlcywgYW5kIHRoYXQgI2FkZHJlc3MtY2VsbHMvI2RhdGEtY2VsbHMKIAkgKiBpcyBvbmUgZm9yIGJvdGggcGFyZW50IGFuZCBjaGlsZC4KIAkgKi8KIAotCW4gPSBnZXRwcm9wKG11cmFtLCAidmlydHVhbC1yZWciLCByZWdfdmlydCwgc2l6ZW9mKHJlZ192aXJ0KSk7Ci0JaWYgKG4gPCAoaW50KXNpemVvZihyZWdfdmlydCkpIHsKLQkJaWYgKCFkdF94bGF0ZV9yZWcobXVyYW0sIDAsICZyZWdfcGh5cywgTlVMTCkpCi0JCQlyZXR1cm4gLTE7CisJaWYgKGR0X2dldF92aXJ0dWFsX3JlZyhtdXJhbSwgJm11cmFtX2FkZHIsIDEpIDwgMSkKKwkJcmV0dXJuIC0xOwogCi0JCXJlZ192aXJ0WzBdID0gKHZvaWQgKilyZWdfcGh5czsKKwlpZiAoZ2V0cHJvcChtdXJhbSwgInJlZyIsIHJlZywgOCkgPCA4KQorCQlyZXR1cm4gLTE7CisKKwltdXJhbV9vZmZzZXQgPSByZWdbMF07CisJbXVyYW1fc2l6ZSA9IHJlZ1sxXTsKKworCS8qIFN0b3JlIHRoZSBidWZmZXIgZGVzY3JpcHRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgZmlyc3QgbXVyYW0gY2h1bmsuCisJICogRm9yIFNNQyBwb3J0cyBvbiBDUE0yLWJhc2VkIHBsYXRmb3JtcywgcmVsb2NhdGUgdGhlIHBhcmFtZXRlciBSQU0KKwkgKiBqdXN0IGJlZm9yZSB0aGUgYnVmZmVyIGRlc2NyaXB0b3JzLgorCSAqLworCisJY2JkX29mZnNldCA9IG11cmFtX29mZnNldCArIG11cmFtX3NpemUgLSAyICogc2l6ZW9mKHN0cnVjdCBjcG1fYmQpOworCisJaWYgKGlzX2NwbTIgJiYgaXNfc21jKSB7CisJCXUxNiAqc21jX2Jhc2UgPSAodTE2ICopcGFyYW07CisJCXUxNiBwcmFtX29mZnNldDsKKworCQlwcmFtX29mZnNldCA9IGNiZF9vZmZzZXQgLSA2NDsKKwkJcHJhbV9vZmZzZXQgPSBfQUxJR05fRE9XTihwcmFtX29mZnNldCwgNjQpOworCisJCWRpc2FibGVfcG9ydCgpOworCQlvdXRfYmUxNihzbWNfYmFzZSwgcHJhbV9vZmZzZXQpOworCQlwYXJhbSA9IG11cmFtX2FkZHIgLSBtdXJhbV9vZmZzZXQgKyBwcmFtX29mZnNldDsKIAl9CiAKLQltdXJhbV9zdGFydCA9IHJlZ192aXJ0WzBdOwotCi0JbiA9IGdldHByb3AobXVyYW0sICJyZWciLCAmbXVyYW1fb2Zmc2V0LCA0KTsKLQlpZiAobiA8IDQpCi0JCXJldHVybiAtMTsKKwljYmRfYWRkciA9IG11cmFtX2FkZHIgLSBtdXJhbV9vZmZzZXQgKyBjYmRfb2Zmc2V0OwogCiAJc2NkcC0+b3BlbiA9IGNwbV9zZXJpYWxfb3BlbjsKIAlzY2RwLT5wdXRjID0gY3BtX3NlcmlhbF9wdXRjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWJhbWJvby5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWJhbWJvby5jCmluZGV4IDkwMGM3ZmYuLmI1YzMwZjc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtYmFtYm9vLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWJhbWJvby5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiNDR4LmgiCiAjaW5jbHVkZSAiY3Vib290LmgiCiAKKyNkZWZpbmUgVEFSR0VUXzR4eAogI2RlZmluZSBUQVJHRVRfNDR4CiAjaW5jbHVkZSAicHBjYm9vdC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtZWJvbnkuYyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1lYm9ueS5jCmluZGV4IGM1ZjM3Y2UuLjU2NTY0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1lYm9ueS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1lYm9ueS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiNDR4LmgiCiAjaW5jbHVkZSAiY3Vib290LmgiCiAKKyNkZWZpbmUgVEFSR0VUXzR4eAogI2RlZmluZSBUQVJHRVRfNDR4CiAjaW5jbHVkZSAicHBjYm9vdC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3Qta2F0bWFpLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3Qta2F0bWFpLmMKaW5kZXggYzAyMTE2Ny4uNTQzNGQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWthdG1haS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1rYXRtYWkuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIjQ0eC5oIgogI2luY2x1ZGUgImN1Ym9vdC5oIgogCisjZGVmaW5lIFRBUkdFVF80eHgKICNkZWZpbmUgVEFSR0VUXzQ0eAogI2luY2x1ZGUgInBwY2Jvb3QuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LXBxMi5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LXBxMi5jCmluZGV4IGY1NmFjNmMuLjljN2QxMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1wcTIuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtcHEyLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCXU4ICpzb2NfcmVnczsKIAlpbnQgaSwgbGVuOwogCXZvaWQgKm5vZGUsICpwYXJlbnRfbm9kZTsKLQl1MzIgbmFkZHIsIG5zaXplLCBtZW1fbG9nMjsKKwl1MzIgbmFkZHIsIG5zaXplLCBtZW1fcG93MiwgbWVtX21hc2s7CiAKIAlub2RlID0gZmluZGRldmljZSgiL3BjaSIpOwogCWlmICghbm9kZSB8fCAhZHRfaXNfY29tcGF0aWJsZShub2RlLCAiZnNsLHBxMi1wY2kiKSkKQEAgLTE0MSw3ICsxNDEsNyBAQAogCiAJc29jX3JlZ3MgPSAodTggKilmc2xfZ2V0X2ltbXIoKTsKIAlpZiAoIXNvY19yZWdzKQotCQlnb3RvIGVycjsKKwkJZ290byB1bmhhbmRsZWQ7CiAKIAlkdF9nZXRfcmVnX2Zvcm1hdChub2RlLCAmbmFkZHIsICZuc2l6ZSk7CiAJaWYgKG5hZGRyICE9IDMgfHwgbnNpemUgIT0gMikKQEAgLTE1Myw3ICsxNTMsNyBAQAogCiAJZHRfZ2V0X3JlZ19mb3JtYXQocGFyZW50X25vZGUsICZuYWRkciwgJm5zaXplKTsKIAlpZiAobmFkZHIgIT0gMSB8fCBuc2l6ZSAhPSAxKQotCQlnb3RvIGVycjsKKwkJZ290byB1bmhhbmRsZWQ7CiAKIAlsZW4gPSBnZXRwcm9wKG5vZGUsICJyYW5nZXMiLCBwY2lfcmFuZ2VzX2J1ZiwKIAkgICAgICAgICAgICAgIHNpemVvZihwY2lfcmFuZ2VzX2J1ZikpOwpAQCAtMTcwLDE0ICsxNzAsMjAgQEAKIAl9CiAKIAlpZiAoIW1lbSB8fCAhbW1pbyB8fCAhaW8pCi0JCWdvdG8gZXJyOworCQlnb3RvIHVuaGFuZGxlZDsKKwlpZiAobWVtLT5zaXplWzFdICE9IG1taW8tPnNpemVbMV0pCisJCWdvdG8gdW5oYW5kbGVkOworCWlmIChtZW0tPnNpemVbMV0gJiAobWVtLT5zaXplWzFdIC0gMSkpCisJCWdvdG8gdW5oYW5kbGVkOworCWlmIChpby0+c2l6ZVsxXSAmIChpby0+c2l6ZVsxXSAtIDEpKQorCQlnb3RvIHVuaGFuZGxlZDsKIAogCWlmIChtZW0tPnBoeXNfYWRkciArIG1lbS0+c2l6ZVsxXSA9PSBtbWlvLT5waHlzX2FkZHIpCiAJCW1lbV9iYXNlID0gbWVtOwogCWVsc2UgaWYgKG1taW8tPnBoeXNfYWRkciArIG1taW8tPnNpemVbMV0gPT0gbWVtLT5waHlzX2FkZHIpCiAJCW1lbV9iYXNlID0gbW1pbzsKIAllbHNlCi0JCWdvdG8gZXJyOworCQlnb3RvIHVuaGFuZGxlZDsKIAogCW91dF9iZTMyKCZwY2lfcmVnc1sxXVswXSwgbWVtX2Jhc2UtPnBoeXNfYWRkciB8IDEpOwogCW91dF9iZTMyKCZwY2lfcmVnc1syXVswXSwgfihtZW0tPnNpemVbMV0gKyBtbWlvLT5zaXplWzFdIC0gMSkpOwpAQCAtMjAxLDggKzIwNyw5IEBACiAJb3V0X2xlMzIoJnBjaV9yZWdzWzBdWzU4XSwgMCk7CiAJb3V0X2xlMzIoJnBjaV9yZWdzWzBdWzYwXSwgMCk7CiAKLQltZW1fbG9nMiA9IDEgPDwgKF9faWxvZzJfdTMyKGJkLmJpX21lbXNpemUgLSAxKSArIDEpOwotCW91dF9sZTMyKCZwY2lfcmVnc1swXVs2Ml0sIDB4YTAwMDAwMDAgfCB+KCgxIDw8IChtZW1fbG9nMiAtIDEyKSkgLSAxKSk7CisJbWVtX3BvdzIgPSAxIDw8IChfX2lsb2cyX3UzMihiZC5iaV9tZW1zaXplIC0gMSkgKyAxKTsKKwltZW1fbWFzayA9IH4obWVtX3BvdzIgLSAxKSA+PiAxMjsKKwlvdXRfbGUzMigmcGNpX3JlZ3NbMF1bNjJdLCAweGEwMDAwMDAwIHwgbWVtX21hc2spOwogCiAJLyogSWYgUENJIGlzIGRpc2FibGVkLCBkcml2ZSBSU1QgaGlnaCB0byBlbmFibGUuICovCiAJaWYgKCEoaW5fbGUzMigmcGNpX3JlZ3NbMF1bMzJdKSAmIDEpKSB7CkBAIC0yMjgsNyArMjM1LDExIEBACiAJcmV0dXJuOwogCiBlcnI6Ci0JcHJpbnRmKCJCYWQgUENJIG5vZGVcclxuIik7CisJcHJpbnRmKCJCYWQgUENJIG5vZGUgLS0gdXNpbmcgZXhpc3RpbmcgZmlybXdhcmUgc2V0dXAuXHJcbiIpOworCXJldHVybjsKKwordW5oYW5kbGVkOgorCXByaW50ZigiVW5zdXBwb3J0ZWQgUENJIG5vZGUgLS0gdXNpbmcgZXhpc3RpbmcgZmlybXdhcmUgc2V0dXAuXHJcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBwcTJfcGxhdGZvcm1fZml4dXBzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtcmFpbmllci5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LXJhaW5pZXIuYwppbmRleCBjZjQ1MmI2Li4wYTNmZGRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtcmFpbmllci5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1yYWluaWVyLmMKQEAgLTQyLDcgKzQyLDggQEAKIAlpYm00NDBlcF9maXh1cF9jbG9ja3Moc3lzY2xrLCAxMTA1OTIwMCwgNTAwMDAwMDApOwogCWlibTR4eF9maXh1cF9lYmNfcmFuZ2VzKCIvcGxiL29wYi9lYmMiKTsKIAlpYm00eHhfZGVuYWxpX2ZpeHVwX21lbXNpemUoKTsKLQlkdF9maXh1cF9tYWNfYWRkcmVzc2VzKCZiZC5iaV9lbmV0YWRkciwgJmJkLmJpX2VuZXQxYWRkcik7CisJZHRfZml4dXBfbWFjX2FkZHJlc3NfYnlfYWxpYXMoImV0aGVybmV0MCIsIGJkLmJpX2VuZXRhZGRyKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQxIiwgYmQuYmlfZW5ldDFhZGRyKTsKIH0KIAogdm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3Qtc2VxdW9pYS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LXNlcXVvaWEuYwppbmRleCBmNTU1NTc1Li5jYWY4ZjJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3Qtc2VxdW9pYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1zZXF1b2lhLmMKQEAgLTQyLDcgKzQyLDggQEAKIAlpYm00NDBlcF9maXh1cF9jbG9ja3Moc3lzY2xrLCAxMTA1OTIwMCwgNTAwMDAwMDApOwogCWlibTR4eF9maXh1cF9lYmNfcmFuZ2VzKCIvcGxiL29wYi9lYmMiKTsKIAlpYm00eHhfZGVuYWxpX2ZpeHVwX21lbXNpemUoKTsKLQlkdF9maXh1cF9tYWNfYWRkcmVzc2VzKCZiZC5iaV9lbmV0YWRkciwgJmJkLmJpX2VuZXQxYWRkcik7CisJZHRfZml4dXBfbWFjX2FkZHJlc3NfYnlfYWxpYXMoImV0aGVybmV0MCIsIGJkLmJpX2VuZXRhZGRyKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQxIiwgYmQuYmlfZW5ldDFhZGRyKTsKIH0KIAogdm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtdGFpc2hhbi5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LXRhaXNoYW4uYwppbmRleCBmNjY0NTVhLi45YmM5MDZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtdGFpc2hhbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC10YWlzaGFuLmMKQEAgLTIxLDcgKzIxLDkgQEAKICNpbmNsdWRlICJkY3IuaCIKICNpbmNsdWRlICI0eHguaCIKIAorI2RlZmluZSBUQVJHRVRfNHh4CiAjZGVmaW5lIFRBUkdFVF80NHgKKyNkZWZpbmUgVEFSR0VUXzQ0MEdYCiAjaW5jbHVkZSAicHBjYm9vdC5oIgogCiBzdGF0aWMgYmRfdCBiZDsKQEAgLTM4LDcgKzQwLDggQEAKIAogCWlibTR4eF9zZHJhbV9maXh1cF9tZW1zaXplKCk7CiAKLQlkdF9maXh1cF9tYWNfYWRkcmVzc2VzKGJkLmJpX2VuZXRhZGRyLCBiZC5iaV9lbmV0MWFkZHIpOworCWR0X2ZpeHVwX21hY19hZGRyZXNzX2J5X2FsaWFzKCJldGhlcm5ldDAiLCBiZC5iaV9lbmV0YWRkcik7CisJZHRfZml4dXBfbWFjX2FkZHJlc3NfYnlfYWxpYXMoImV0aGVybmV0MSIsIGJkLmJpX2VuZXQxYWRkcik7CiAKIAlpYm00eHhfZml4dXBfZWJjX3JhbmdlcygiL3BsYi9vcGIvZWJjIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3Qtd2FycC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LXdhcnAuYwppbmRleCBiZGVkZWJlLi5lYjEwOGE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3Qtd2FycC5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC13YXJwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlICI0eHguaCIKICNpbmNsdWRlICJjdWJvb3QuaCIKIAorI2RlZmluZSBUQVJHRVRfNHh4CiAjZGVmaW5lIFRBUkdFVF80NHgKICNpbmNsdWRlICJwcGNib290LmgiCiAKQEAgLTIzLDcgKzI0LDcgQEAKIAlpYm00NDBlcF9maXh1cF9jbG9ja3Moc3lzY2xrLCAxMTA1OTIwMCwgNTAwMDAwMDApOwogCWlibTR4eF9zZHJhbV9maXh1cF9tZW1zaXplKCk7CiAJaWJtNHh4X2ZpeHVwX2ViY19yYW5nZXMoIi9wbGIvb3BiL2ViYyIpOwotCWR0X2ZpeHVwX21hY19hZGRyZXNzZXMoJmJkLmJpX2VuZXRhZGRyKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQwIiwgYmQuYmlfZW5ldGFkZHIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC15b3NlbWl0ZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LXlvc2VtaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ZTMzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC15b3NlbWl0ZS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBPbGQgVS1ib290IGNvbXBhdGliaWxpdHkgZm9yIFlvc2VtaXRlCisgKgorICogQXV0aG9yOiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvcHMuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgIjR4eC5oIgorI2luY2x1ZGUgIjQ0eC5oIgorI2luY2x1ZGUgImN1Ym9vdC5oIgorCisjZGVmaW5lIFRBUkdFVF80eHgKKyNkZWZpbmUgVEFSR0VUXzQ0eAorI2luY2x1ZGUgInBwY2Jvb3QuaCIKKworc3RhdGljIGJkX3QgYmQ7CisKK3N0YXRpYyB2b2lkIHlvc2VtaXRlX2ZpeHVwcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3lzY2xrID0gNjY2NjY2NjY7CisKKwlpYm00NDBlcF9maXh1cF9jbG9ja3Moc3lzY2xrLCAxMTA1OTIwMCwgNTAwMDAwMDApOworCWlibTR4eF9zZHJhbV9maXh1cF9tZW1zaXplKCk7CisJaWJtNHh4X3F1aWVzY2VfZXRoKCh1MzIgKikweGVmNjAwZTAwLCAodTMyICopMHhlZjYwMGYwMCk7CisJZHRfZml4dXBfbWFjX2FkZHJlc3NfYnlfYWxpYXMoImV0aGVybmV0MCIsIGJkLmJpX2VuZXRhZGRyKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQxIiwgYmQuYmlfZW5ldDFhZGRyKTsKK30KKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJQ1VCT09UX0lOSVQoKTsKKwlwbGF0Zm9ybV9vcHMuZml4dXBzID0geW9zZW1pdGVfZml4dXBzOworCXBsYXRmb3JtX29wcy5leGl0ID0gaWJtNDR4X2RiY3JfcmVzZXQ7CisJZmR0X2luaXQoX2R0Yl9zdGFydCk7CisJc2VyaWFsX2NvbnNvbGVfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZGV2dHJlZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZGV2dHJlZS5jCmluZGV4IDYwZjU2MWUuLjVkMTIzMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2RldnRyZWUuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kZXZ0cmVlLmMKQEAgLTM1MCwzICszNTAsMjMgQEAKIAogCXJldHVybiAwOwogfQorCitpbnQgZHRfZ2V0X3ZpcnR1YWxfcmVnKHZvaWQgKm5vZGUsIHZvaWQgKiphZGRyLCBpbnQgbnJlcykKK3sKKwl1bnNpZ25lZCBsb25nIHhhZGRyOworCWludCBuOworCisJbiA9IGdldHByb3Aobm9kZSwgInZpcnR1YWwtcmVnIiwgYWRkciwgbnJlcyAqIDQpOworCWlmIChuID4gMCkKKwkJcmV0dXJuIG4gLyA0OworCisJZm9yIChuID0gMDsgbiA8IG5yZXM7IG4rKykgeworCQlpZiAoIWR0X3hsYXRlX3JlZyhub2RlLCBuLCAmeGFkZHIsIE5VTEwpKQorCQkJYnJlYWs7CisKKwkJYWRkcltuXSA9ICh2b2lkICopeGFkZHI7CisJfQorCisJcmV0dXJuIG47Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9iYW1ib28uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2JhbWJvby5kdHMKaW5kZXggMjlmMWE2Zi4uYmEyNTIxYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2JhbWJvby5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2JhbWJvby5kdHMKQEAgLTE4NSw3ICsxODUsNiBAQAogCSAgIAkJfTsKIAogCQkJSUlDMDogaTJjQGVmNjAwNzAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcCIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDxlZjYwMDcwMCAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CkBAIC0xOTMsNyArMTkyLDYgQEAKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZXAiLCAiaWJtLGlpYy00NDBncCIsICJpYm0saWljIjsKIAkJCQlyZWcgPSA8ZWY2MDA4MDAgMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwpAQCAtMjAxLDEzICsxOTksMTEgQEAKIAkJCX07CiAKIAkJCVpNSUkwOiBlbWFjLXptaWlAZWY2MDBkMDAgewotCQkJCWRldmljZV90eXBlID0gInptaWktaW50ZXJmYWNlIjsKIAkJCQljb21wYXRpYmxlID0gImlibSx6bWlpLTQ0MGVwIiwgImlibSx6bWlpLTQ0MGdwIiwgImlibSx6bWlpIjsKIAkJCQlyZWcgPSA8ZWY2MDBkMDAgYz47CiAJCQl9OwogCiAJCQlFTUFDMDogZXRoZXJuZXRAZWY2MDBlMDAgewotCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBlcCIsICJpYm0sZW1hYy00NDBncCIsICJpYm0sZW1hYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CkBAIC0yMjgsNyArMjI0LDYgQEAKIAkJCX07CiAKIAkJCUVNQUMxOiBldGhlcm5ldEBlZjYwMGYwMCB7Ci0JCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MGVwIiwgImlibSxlbWFjLTQ0MGdwIiwgImlibSxlbWFjIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2QzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBBTUNDIENhbnlvbmxhbmRzICg0NjBFWCkKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbW9kZWwgPSAiYW1jYyxjYW55b25sYW5kcyI7CisJY29tcGF0aWJsZSA9ICJhbWNjLGNhbnlvbmxhbmRzIjsKKwlkY3ItcGFyZW50ID0gPCYvY3B1cy9jcHVAMD47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJkVNQUMwOworCQlldGhlcm5ldDEgPSAmRU1BQzE7CisJCXNlcmlhbDAgPSAmVUFSVDA7CisJCXNlcmlhbDEgPSAmVUFSVDE7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW1vZGVsID0gIlBvd2VyUEMsNDYwRVgiOworCQkJcmVnID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDIwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDIwPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsKKwkJCWRjci1jb250cm9sbGVyOworCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMCAwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCX07CisKKwlVSUMwOiBpbnRlcnJ1cHQtY29udHJvbGxlcjAgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwZXgiLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCWRjci1yZWcgPSA8MGMwIDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJVUlDMTogaW50ZXJydXB0LWNvbnRyb2xsZXIxIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGV4IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDE+OworCQlkY3ItcmVnID0gPDBkMCAwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MWUgNCAxZiA0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJVUlDMjogaW50ZXJydXB0LWNvbnRyb2xsZXIyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGV4IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDI+OworCQlkY3ItcmVnID0gPDBlMCAwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8YSA0IGIgND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzM6IGludGVycnVwdC1jb250cm9sbGVyMyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBleCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwzPjsKKwkJZGNyLXJlZyA9IDwwZjAgMDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDEwIDQgMTEgND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVNEUjA6IHNkciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHNkci00NjBleCI7CisJCWRjci1yZWcgPSA8MDBlIDAwMj47CisJfTsKKworCUNQUjA6IGNwciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwci00NjBleCI7CisJCWRjci1yZWcgPSA8MDBjIDAwMj47CisJfTsKKworCXBsYiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi00NjBleCIsICJpYm0scGxiNCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQlTRFJBTTA6IHNkcmFtIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHNkcmFtLTQ2MGV4IiwgImlibSxzZHJhbS00MDVncCI7CisJCQlkY3ItcmVnID0gPDAxMCAyPjsKKwkJfTsKKworCQlNQUwwOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBleCIsICJpYm0sbWNtYWwyIjsKKwkJCWRjci1yZWcgPSA8MTgwIDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDwyPjsKKwkJCW51bS1yeC1jaGFucyA9IDwxMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQlpbnRlcnJ1cHRzID0gPAkvKlRYRU9CKi8gNiA0CisJCQkJCS8qUlhFT0IqLyA3IDQKKwkJCQkJLypTRVJSKi8gIDMgNAorCQkJCQkvKlRYREUqLyAgNCA0CisJCQkJCS8qUlhERSovICA1IDQ+OworCQl9OworCisJCVBPQjA6IG9wYiB7CisJCQljb21wYXRpYmxlID0gImlibSxvcGItNDYwZXgiLCAiaWJtLG9wYiI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPGIwMDAwMDAwIDQgYjAwMDAwMDAgNTAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJCUVCQzA6IGViYyB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZWJjLTQ2MGV4IiwgImlibSxlYmMiOworCQkJCWRjci1yZWcgPSA8MDEyIDI+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8NiA0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCX07CisKKwkJCVVBUlQwOiBzZXJpYWxAZWY2MDAzMDAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8ZWY2MDAzMDAgOD47CisJCQkJdmlydHVhbC1yZWcgPSA8ZWY2MDAzMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEgND47CisJCQl9OworCisJCQlVQVJUMTogc2VyaWFsQGVmNjAwNDAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPGVmNjAwNDAwIDg+OworCQkJCXZpcnR1YWwtcmVnID0gPGVmNjAwNDAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwxIDQ+OworCQkJfTsKKworCQkJVUFSVDI6IHNlcmlhbEBlZjYwMDUwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDxlZjYwMDUwMCA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDxlZjYwMDUwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJCWludGVycnVwdHMgPSA8MWQgND47CisJCQl9OworCisJCQlVQVJUMzogc2VyaWFsQGVmNjAwNjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPGVmNjAwNjAwIDg+OworCQkJCXZpcnR1YWwtcmVnID0gPGVmNjAwNjAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQkJaW50ZXJydXB0cyA9IDwxZSA0PjsKKwkJCX07CisKKwkJCUlJQzA6IGkyY0BlZjYwMDcwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ2MGV4IiwgImlibSxpaWMiOworCQkJCXJlZyA9IDxlZjYwMDcwMCAxND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwyIDQ+OworCQkJfTsKKworCQkJSUlDMTogaTJjQGVmNjAwODAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDYwZXgiLCAiaWJtLGlpYyI7CisJCQkJcmVnID0gPGVmNjAwODAwIDE0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMgND47CisJCQl9OworCisJCQlaTUlJMDogZW1hYy16bWlpQGVmNjAwZDAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSx6bWlpLTQ2MGV4IiwgImlibSx6bWlpIjsKKwkJCQlyZWcgPSA8ZWY2MDBkMDAgYz47CisJCQl9OworCisJCQlSR01JSTA6IGVtYWMtcmdtaWlAZWY2MDE1MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHJnbWlpLTQ2MGV4IiwgImlibSxyZ21paSI7CisJCQkJcmVnID0gPGVmNjAxNTAwIDg+OworCQkJCWhhcy1tZGlvOworCQkJfTsKKworCQkJVEFIMDogZW1hYy10YWhAZWY2MDEzNTAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHRhaC00NjBleCIsICJpYm0sdGFoIjsKKwkJCQlyZWcgPSA8ZWY2MDEzNTAgMzA+OworCQkJfTsKKworCQkJVEFIMTogZW1hYy10YWhAZWY2MDE0NTAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHRhaC00NjBleCIsICJpYm0sdGFoIjsKKwkJCQlyZWcgPSA8ZWY2MDE0NTAgMzA+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwZTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGV4IiwgImlibSxlbWFjNCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzA+OworCQkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAwICZVSUMyIDEwIDQKKwkJCQkJCSAvKldha2UqLyAgIDEgJlVJQzIgMTQgND47CisJCQkJcmVnID0gPGVmNjAwZTAwIDcwPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDwyMzI4PjsKKwkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CisJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MDAwMDAwMDA+OworCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkwPjsKKwkJCQlyZ21paS1jaGFubmVsID0gPDA+OworCQkJCXRhaC1kZXZpY2UgPSA8JlRBSDA+OworCQkJCXRhaC1jaGFubmVsID0gPDA+OworCQkJCWhhcy1pbnZlcnRlZC1zdGFjci1vYzsKKwkJCQloYXMtbmV3LXN0YWNyLXN0YW9wYzsKKwkJCX07CisKKwkJCUVNQUMxOiBldGhlcm5ldEBlZjYwMGYwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBleCIsICJpYm0sZW1hYzQiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwID0gPC8qU3RhdHVzKi8gMCAmVUlDMiAxMSA0CisJCQkJCQkgLypXYWtlKi8gICAxICZVSUMyIDE1IDQ+OworCQkJCXJlZyA9IDxlZjYwMGYwMCA3MD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDE+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDg+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MjMyOD47CisJCQkJcngtZmlmby1zaXplID0gPDEwMDA+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDw4MDA+OworCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKKwkJCQlwaHktbWFwID0gPDAwMDAwMDAwPjsKKwkJCQlyZ21paS1kZXZpY2UgPSA8JlJHTUlJMD47CisJCQkJcmdtaWktY2hhbm5lbCA9IDwxPjsKKwkJCQl0YWgtZGV2aWNlID0gPCZUQUgxPjsKKwkJCQl0YWgtY2hhbm5lbCA9IDwxPjsKKwkJCQloYXMtaW52ZXJ0ZWQtc3RhY3Itb2M7CisJCQkJaGFzLW5ldy1zdGFjci1zdGFvcGM7CisJCQkJbWRpby1kZXZpY2UgPSA8JkVNQUMwPjsKKwkJCX07CisJCX07CisKKwkJUENJWDA6IHBjaUBjMGVjMDAwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJpYm0scGxiLXBjaXgtNDYwZXgiLCAiaWJtLHBsYi1wY2l4IjsKKwkJCXByaW1hcnk7CisJCQlsYXJnZS1pbmJvdW5kLXdpbmRvd3M7CisJCQllbmFibGUtbXNpLWhvbGU7CisJCQlyZWcgPSA8YyAwZWMwMDAwMCAgIDgJLyogQ29uZmlnIHNwYWNlIGFjY2VzcyAqLworCQkJICAgICAgIDAgMCAwCQkvKiBubyBJQUNLIGN5Y2xlcyAqLworCQkJICAgICAgIGMgMGVkMDAwMDAgICA0ICAgLyogU3BlY2lhbCBjeWNsZXMgKi8KKwkJCSAgICAgICBjIDBlYzgwMDAwIDEwMAkvKiBJbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJCSAgICAgICBjIDBlYzgwMTAwICBmYz47CS8qIEludGVybmFsIG1lc3NhZ2luZyByZWdpc3RlcnMgKi8KKworCQkJLyogT3V0Ym91bmQgcmFuZ2VzLCBvbmUgbWVtb3J5IGFuZCBvbmUgSU8sCisJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAorCQkJICovCisJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCAwMDAwMDAwZCA4MDAwMDAwMCAwIDgwMDAwMDAwCisJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIDAwMDAwMDBjIDA4MDAwMDAwIDAgMDAwMTAwMDA+OworCisJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCisJCQlkbWEtcmFuZ2VzID0gPDQyMDAwMDAwIDAgMCAwIDAgMCA4MDAwMDAwMD47CisKKwkJCS8qIFRoaXMgZHJpdmVzIGJ1c3NlcyAwIHRvIDB4M2YgKi8KKwkJCWJ1cy1yYW5nZSA9IDwwIDNmPjsKKworCQkJLyogQWxsIFBDSSBpbnRlcnJ1cHRzIGFyZSByb3V0ZWQgdG8gZXh0IElSUSAyIC0+IFVJQzEtMCAqLworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAwMDAgMCAwIDA+OworCQkJaW50ZXJydXB0LW1hcCA9IDwgMDAwMCAwIDAgMCAmVUlDMSAwIDggPjsKKwkJfTsKKworCQlQQ0lFMDogcGNpZXhAZDAwMDAwMDAwIHsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi1wY2lleC00NjBleCIsICJpYm0scGxiLXBjaWV4IjsKKwkJCXByaW1hcnk7CisJCQlwb3J0ID0gPDA+OyAvKiBwb3J0IG51bWJlciAqLworCQkJcmVnID0gPGQgMDAwMDAwMDAgMjAwMDAwMDAJLyogQ29uZmlnIHNwYWNlIGFjY2VzcyAqLworCQkJICAgICAgIGMgMDgwMTAwMDAgMDAwMDEwMDA+OwkvKiBSZWdpc3RlcnMgKi8KKwkJCWRjci1yZWcgPSA8MTAwIDAyMD47CisJCQlzZHItYmFzZSA9IDwzMDA+OworCisJCQkvKiBPdXRib3VuZCByYW5nZXMsIG9uZSBtZW1vcnkgYW5kIG9uZSBJTywKKwkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCisJCQkgKi8KKwkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwIDAwMDAwMDBlIDAwMDAwMDAwIDAgODAwMDAwMDAKKwkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgMDAwMDAwMGYgODAwMDAwMDAgMCAwMDAxMDAwMD47CisKKwkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KKwkJCWRtYS1yYW5nZXMgPSA8NDIwMDAwMDAgMCAwIDAgMCAwIDgwMDAwMDAwPjsKKworCQkJLyogVGhpcyBkcml2ZXMgYnVzc2VzIDQwIHRvIDB4N2YgKi8KKwkJCWJ1cy1yYW5nZSA9IDw0MCA3Zj47CisKKwkJCS8qIExlZ2FjeSBpbnRlcnJ1cHRzIChub3RlIHRoZSB3ZWlyZCBwb2xhcml0eSwgdGhlIGJyaWRnZSBzZWVtcworCQkJICogdG8gaW52ZXJ0IFBDSWUgbGVnYWN5IGludGVycnVwdHMpLgorCQkJICogV2UgYXJlIGRlLXN3aXp6bGluZyBoZXJlIGJlY2F1c2UgdGhlIG51bWJlcnMgYXJlIGFjdHVhbGx5IGZvcgorCQkJICogcG9ydCBvZiB0aGUgcm9vdCBjb21wbGV4IHZpcnR1YWwgUDJQIGJyaWRnZS4gQnV0IEkgd2FudAorCQkJICogdG8gYXZvaWQgcHV0dGluZyBhIG5vZGUgZm9yIGl0IGluIHRoZSB0cmVlLCBzbyB0aGUgbnVtYmVycworCQkJICogYmVsb3cgYXJlIGJhc2ljYWxseSBkZS1zd2l6emxlZCBudW1iZXJzLgorCQkJICogVGhlIHJlYWwgc2xvdCBpcyBvbiBpZHNlbCAwLCBzbyB0aGUgc3dpenpsaW5nIGlzIDE6MQorCQkJICovCisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MDAwMCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCTAwMDAgMCAwIDEgJlVJQzMgYyA0IC8qIHN3aXp6bGVkIGludCBBICovCisJCQkJMDAwMCAwIDAgMiAmVUlDMyBkIDQgLyogc3dpenpsZWQgaW50IEIgKi8KKwkJCQkwMDAwIDAgMCAzICZVSUMzIGUgNCAvKiBzd2l6emxlZCBpbnQgQyAqLworCQkJCTAwMDAgMCAwIDQgJlVJQzMgZiA0IC8qIHN3aXp6bGVkIGludCBEICovPjsKKwkJfTsKKworCQlQQ0lFMTogcGNpZXhAZDIwMDAwMDAwIHsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi1wY2lleC00NjBleCIsICJpYm0scGxiLXBjaWV4IjsKKwkJCXByaW1hcnk7CisJCQlwb3J0ID0gPDE+OyAvKiBwb3J0IG51bWJlciAqLworCQkJcmVnID0gPGQgMjAwMDAwMDAgMjAwMDAwMDAJLyogQ29uZmlnIHNwYWNlIGFjY2VzcyAqLworCQkJICAgICAgIGMgMDgwMTEwMDAgMDAwMDEwMDA+OwkvKiBSZWdpc3RlcnMgKi8KKwkJCWRjci1yZWcgPSA8MTIwIDAyMD47CisJCQlzZHItYmFzZSA9IDwzNDA+OworCisJCQkvKiBPdXRib3VuZCByYW5nZXMsIG9uZSBtZW1vcnkgYW5kIG9uZSBJTywKKwkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCisJCQkgKi8KKwkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwIDAwMDAwMDBlIDgwMDAwMDAwIDAgODAwMDAwMDAKKwkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgMDAwMDAwMGYgODAwMTAwMDAgMCAwMDAxMDAwMD47CisKKwkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KKwkJCWRtYS1yYW5nZXMgPSA8NDIwMDAwMDAgMCAwIDAgMCAwIDgwMDAwMDAwPjsKKworCQkJLyogVGhpcyBkcml2ZXMgYnVzc2VzIDgwIHRvIDB4YmYgKi8KKwkJCWJ1cy1yYW5nZSA9IDw4MCBiZj47CisKKwkJCS8qIExlZ2FjeSBpbnRlcnJ1cHRzIChub3RlIHRoZSB3ZWlyZCBwb2xhcml0eSwgdGhlIGJyaWRnZSBzZWVtcworCQkJICogdG8gaW52ZXJ0IFBDSWUgbGVnYWN5IGludGVycnVwdHMpLgorCQkJICogV2UgYXJlIGRlLXN3aXp6bGluZyBoZXJlIGJlY2F1c2UgdGhlIG51bWJlcnMgYXJlIGFjdHVhbGx5IGZvcgorCQkJICogcG9ydCBvZiB0aGUgcm9vdCBjb21wbGV4IHZpcnR1YWwgUDJQIGJyaWRnZS4gQnV0IEkgd2FudAorCQkJICogdG8gYXZvaWQgcHV0dGluZyBhIG5vZGUgZm9yIGl0IGluIHRoZSB0cmVlLCBzbyB0aGUgbnVtYmVycworCQkJICogYmVsb3cgYXJlIGJhc2ljYWxseSBkZS1zd2l6emxlZCBudW1iZXJzLgorCQkJICogVGhlIHJlYWwgc2xvdCBpcyBvbiBpZHNlbCAwLCBzbyB0aGUgc3dpenpsaW5nIGlzIDE6MQorCQkJICovCisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MDAwMCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCTAwMDAgMCAwIDEgJlVJQzMgMTAgNCAvKiBzd2l6emxlZCBpbnQgQSAqLworCQkJCTAwMDAgMCAwIDIgJlVJQzMgMTEgNCAvKiBzd2l6emxlZCBpbnQgQiAqLworCQkJCTAwMDAgMCAwIDMgJlVJQzMgMTIgNCAvKiBzd2l6emxlZCBpbnQgQyAqLworCQkJCTAwMDAgMCAwIDQgJlVJQzMgMTMgNCAvKiBzd2l6emxlZCBpbnQgRCAqLz47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCmluZGV4IDMwNzM3ZWEuLmM2Y2E2MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCkBAIC0yMTIsMTMgKzIxMiwzMCBAQAogCQlldGhlcm5ldEAzMDAwIHsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKLQkJCXJlZyA9IDwzMDAwIDgwMD47CisJCQlyZWcgPSA8MzAwMCA0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDMwMDAgNDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJcmVnID0gPDA+OworCQkJfTsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8M2Q0MCA0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTAgMD47CkBAIC0yMzEsNCArMjQ4LDIyIEBACiAJCQlyZWcgPSA8ODAwMCA0MDAwPjsKIAkJfTsKIAl9OworCisJbHBiIHsKKwkJbW9kZWwgPSAiZnNsLGxwYiI7CisJCWNvbXBhdGlibGUgPSAiZnNsLGxwYiI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMCBmYzAwMDAwMCAyMDAwMDAwPjsKKworCQkvLyAxNi1iaXQgZmxhc2ggZGV2aWNlIGF0IExvY2FsUGx1cyBCdXMgQ1MwCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDIwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZWJvbnkuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2Vib255LmR0cwppbmRleCA3YWFkMTM1Li41MDc5ZGM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZWJvbnkuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9lYm9ueS5kdHMKQEAgLTIxNiw3ICsyMTYsNiBAQAogCiAJCQlJSUMwOiBpMmNANDAwMDA0MDAgewogCQkJCS8qIEZJWE1FICovCi0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDQwMDAwNDAwIDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKQEAgLTIyNCw3ICsyMjMsNiBAQAogCQkJfTsKIAkJCUlJQzE6IGkyY0A0MDAwMDUwMCB7CiAJCQkJLyogRklYTUUgKi8KLQkJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBncCIsICJpYm0saWljIjsKIAkJCQlyZWcgPSA8NDAwMDA1MDAgMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwpAQCAtMjQzLDcgKzI0MSw2IEBACiAJCQl9OwogCiAJCQlFTUFDMDogZXRoZXJuZXRANDAwMDA4MDAgewotCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBncCIsICJpYm0sZW1hYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CkBAIC0yNjMsNyArMjYwLDYgQEAKIAkJCQl6bWlpLWNoYW5uZWwgPSA8MD47CiAJCQl9OwogCQkJRU1BQzE6IGV0aGVybmV0QDQwMDAwOTAwIHsKLQkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OwogCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDQwZ3AiLCAiaWJtLGVtYWMiOwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VwODI0OGUuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VwODI0OGUuZHRzCmluZGV4IDVkMmZiNzYuLjc1Njc1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9lcDgyNDhlLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZXA4MjQ4ZS5kdHMKQEAgLTEyMSw4ICsxMjEsNyBAQAogCiAJCQkJZGF0YUAwIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtLWRhdGEiOwotCQkJCQlyZWcgPSA8MCAweDExMDAgMHgxMTQwCi0JCQkJCSAgICAgICAweGVjMCAweDk4MDAgMHg4MDA+OworCQkJCQlyZWcgPSA8MCAweDIwMDAgMHg5ODAwIDB4ODAwPjsKIAkJCQl9OwogCQkJfTsKIApAQCAtMTM4LDcgKzEzNyw3IEBACiAJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjQ4LXNtYy11YXJ0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLXNtYy11YXJ0IjsKLQkJCQlyZWcgPSA8MHgxMWE4MCAweDIwIDB4MTEwMCAweDQwPjsKKwkJCQlyZWcgPSA8MHgxMWE4MCAweDIwIDB4ODdmYyAyPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQgOD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDw3PjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9lcDg4eGMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VwODh4Yy5kdHMKaW5kZXggMDI3MDVmMi4uYWU1N2Q2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VwODh4Yy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VwODh4Yy5kdHMKQEAgLTIsNyArMiw3IEBACiAgKiBFUDg4eEMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgogICogQ29weXJpZ2h0IDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTAsNiArMTAsNyBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisvZHRzLXYxLzsKIAogLyB7CiAJbW9kZWwgPSAiRVA4OHhDIjsKQEAgLTIzLDQ0ICsyNCw0NCBAQAogCiAJCVBvd2VyUEMsODg1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwwPjsKLQkJCWQtY2FjaGUtbGluZS1zaXplID0gPGQjMTY+OwotCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8ZCMxNj47Ci0JCQlkLWNhY2hlLXNpemUgPSA8ZCM4MTkyPjsKLQkJCWktY2FjaGUtc2l6ZSA9IDxkIzgxOTI+OworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwxNj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwxNj47CisJCQlkLWNhY2hlLXNpemUgPSA8ODE5Mj47CisJCQlpLWNhY2hlLXNpemUgPSA8ODE5Mj47CiAJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CiAJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDxmIDI+OwkvLyBkZWNyZW1lbnRlciBpbnRlcnJ1cHQKKwkJCWludGVycnVwdHMgPSA8MTUgMj47CS8vIGRlY3JlbWVudGVyIGludGVycnVwdAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJfTsKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAgMD47CisJCXJlZyA9IDwweDAgMHgwPjsKIAl9OwogCiAJbG9jYWxidXNAZmEyMDAxMDAgewogCQljb21wYXRpYmxlID0gImZzbCxtcGM4ODUtbG9jYWxidXMiLCAiZnNsLHBxMS1sb2NhbGJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPGZhMjAwMTAwIDQwPjsKKwkJcmVnID0gPDB4ZmEyMDAxMDAgMHg0MD47CiAKIAkJcmFuZ2VzID0gPAotCQkJMCAwIGZjMDAwMDAwIDA0MDAwMDAwCi0JCQkzIDAgZmEwMDAwMDAgMDEwMDAwMDAKKwkJCTB4MCAweDAgMHhmYzAwMDAwMCAweDQwMDAwMDAKKwkJCTB4MyAweDAgMHhmYTAwMDAwMCAweDEwMDAwMDAKIAkJPjsKIAogCQlmbGFzaEAwLDIwMDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOwotCQkJcmVnID0gPDAgMjAwMDAwMCAyMDAwMDAwPjsKKwkJCXJlZyA9IDwweDAgMHgyMDAwMDAwIDB4MjAwMDAwMD47CiAJCQliYW5rLXdpZHRoID0gPDQ+OwogCQkJZGV2aWNlLXdpZHRoID0gPDI+OwogCQl9OwogCiAJCWJvYXJkLWNvbnRyb2xAMyw0MDAwMDAgewotCQkJcmVnID0gPDMgNDAwMDAwIDEwPjsKKwkJCXJlZyA9IDwweDMgMHg0MDAwMDAgMHgxMD47CiAJCQljb21wYXRpYmxlID0gImZzbCxlcDg4eGMtYmNzciI7CiAJCX07CiAJfTsKQEAgLTcwLDI1ICs3MSwyNSBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7Ci0JCXJhbmdlcyA9IDwwIGZhMjAwMDAwIDAwMDA0MDAwPjsKKwkJcmFuZ2VzID0gPDB4MCAweGZhMjAwMDAwIDB4NDAwMD47CiAJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAKIAkJLy8gVGVtcG9yYXJ5IC0tIHdpbGwgZ28gYXdheSBvbmNlIGtlcm5lbCB1c2VzIHJhbmdlcyBmb3IgZ2V0X2ltbXJiYXNlKCkuCi0JCXJlZyA9IDxmYTIwMDAwMCA0MDAwPjsKKwkJcmVnID0gPDB4ZmEyMDAwMDAgMHg0MDAwPjsKIAogCQltZGlvQGUwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4ODUtZmVjLW1kaW8iLCAiZnNsLHBxMS1mZWMtbWRpbyI7Ci0JCQlyZWcgPSA8ZTAwIDE4OD47CisJCQlyZWcgPSA8MHhlMDAgMHgxODg+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAogCQkJUEhZMDogZXRoZXJuZXQtcGh5QDAgewotCQkJCXJlZyA9IDwwPjsKKwkJCQlyZWcgPSA8MHgwPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAogCQkJUEhZMTogZXRoZXJuZXQtcGh5QDEgewotCQkJCXJlZyA9IDwxPjsKKwkJCQlyZWcgPSA8MHgxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJfTsKQEAgLTk3LDcgKzk4LDcgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODg1LWZlYy1lbmV0IiwKIAkJCSAgICAgICAgICAgICAiZnNsLHBxMS1mZWMtZW5ldCI7Ci0JCQlyZWcgPSA8ZTAwIDE4OD47CisJCQlyZWcgPSA8MHhlMDAgMHgxODg+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwpAQCAtMTA5LDcgKzExMCw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1mZWMtZW5ldCIsCiAJCQkgICAgICAgICAgICAgImZzbCxwcTEtZmVjLWVuZXQiOwotCQkJcmVnID0gPDFlMDAgMTg4PjsKKwkJCXJlZyA9IDwweDFlMDAgMHgxODg+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDcgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwpAQCAtMTIwLDcgKzEyMSw3IEBACiAJCVBJQzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMCB7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8MCAyND47CisJCQlyZWcgPSA8MHgwIDB4MjQ+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODg1LXBpYyIsICJmc2wscHExLXBpYyI7CiAJCX07CiAKQEAgLTEzMCwyOSArMTMxLDI5IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHBxLXBjbWNpYSI7CiAJCQlkZXZpY2VfdHlwZSA9ICJwY21jaWEiOwotCQkJcmVnID0gPDgwIDgwPjsKKwkJCXJlZyA9IDwweDgwIDB4ODA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKLQkJCWludGVycnVwdHMgPSA8ZCAxPjsKKwkJCWludGVycnVwdHMgPSA8MTMgMT47CiAJCX07CiAKIAkJY3BtQDljMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODg1LWNwbSIsICJmc2wsY3BtMSI7Ci0JCQljb21tYW5kLXByb2MgPSA8OWMwPjsKKwkJCWNvbW1hbmQtcHJvYyA9IDwweDljMD47CiAJCQlpbnRlcnJ1cHRzID0gPDA+OwkvLyBjcG0gZXJyb3IgaW50ZXJydXB0CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKLQkJCXJlZyA9IDw5YzAgNDA+OworCQkJcmVnID0gPDB4OWMwIDB4NDA+OwogCQkJcmFuZ2VzOwogCiAJCQltdXJhbUAyMDAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyYW5nZXMgPSA8MCAyMDAwIDIwMDA+OworCQkJCXJhbmdlcyA9IDwweDAgMHgyMDAwIDB4MjAwMD47CiAKIAkJCQlkYXRhQDAgewogCQkJCQljb21wYXRpYmxlID0gImZzbCxjcG0tbXVyYW0tZGF0YSI7Ci0JCQkJCXJlZyA9IDwwIDFjMDA+OworCQkJCQlyZWcgPSA8MHgwIDB4MWMwMD47CiAJCQkJfTsKIAkJCX07CiAKQEAgLTE2MCw3ICsxNjEsNyBAQAogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1icmciLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtYnJnIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKLQkJCQlyZWcgPSA8OWYwIDEwPjsKKwkJCQlyZWcgPSA8MHg5ZjAgMHgxMD47CiAJCQl9OwogCiAJCQlDUE1fUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckA5MzAgewpAQCAtMTY4LDcgKzE2OSw3IEBACiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDUgMiAwIDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47Ci0JCQkJcmVnID0gPDkzMCAyMD47CisJCQkJcmVnID0gPDB4OTMwIDB4MjA+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1jcG0tcGljIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLXBpYyI7CiAJCQl9OwpAQCAtMTc4LDExICsxNzksMTEgQEAKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1zbWMtdWFydCIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtMS1zbWMtdWFydCI7Ci0JCQkJcmVnID0gPGE4MCAxMCAzZTgwIDQwPjsKKwkJCQlyZWcgPSA8MHhhODAgMHgxMCAweDNlODAgMHg0MD47CiAJCQkJaW50ZXJydXB0cyA9IDw0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDwxPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MDA5MD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4OTA+OwogCQkJCWxpbnV4LHBsYW5ldGNvcmUtbGFiZWwgPSAiU01DMSI7CiAJCQl9OwogCkBAIC0xOTEsMTEgKzE5MiwxMSBAQAogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODg1LXNjYy11YXJ0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLXNjYy11YXJ0IjsKLQkJCQlyZWcgPSA8YTIwIDIwIDNkMDAgODA+OwotCQkJCWludGVycnVwdHMgPSA8MWQ+OworCQkJCXJlZyA9IDwweGEyMCAweDIwIDB4M2QwMCAweDgwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDI5PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDwyPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MDA0MD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4NDA+OwogCQkJCWxpbnV4LHBsYW5ldGNvcmUtbGFiZWwgPSAiU0NDMiI7CiAJCQl9OwogCkBAIC0yMDQsOSArMjA1LDkgQEAKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4ODUtdXNiIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLXVzYiI7Ci0JCQkJcmVnID0gPGEwMCAxOCAxYzAwIDgwPjsKKwkJCQlyZWcgPSA8MHhhMDAgMHgxOCAweDFjMDAgMHg4MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQ1BNX1BJQz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxZT47CisJCQkJaW50ZXJydXB0cyA9IDwzMD47CiAJCQkJZnNsLGNwbS1jb21tYW5kID0gPDAwMDA+OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThhNWNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCkBAIC0wLDAgKzEsNDY3IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBBTUNDIEdsYWNpZXIgKDQ2MEdUKQorICoKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dAorICogYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwltb2RlbCA9ICJhbWNjLGdsYWNpZXIiOworCWNvbXBhdGlibGUgPSAiYW1jYyxnbGFjaWVyIiwgImFtY2MsY2FueW9ubGFuZHMiOworCWRjci1wYXJlbnQgPSA8Ji9jcHVzL2NwdUAwPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmRU1BQzA7CisJCWV0aGVybmV0MSA9ICZFTUFDMTsKKwkJZXRoZXJuZXQyID0gJkVNQUMyOworCQlldGhlcm5ldDMgPSAmRU1BQzM7CisJCXNlcmlhbDAgPSAmVUFSVDA7CisJCXNlcmlhbDEgPSAmVUFSVDE7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW1vZGVsID0gIlBvd2VyUEMsNDYwR1QiOworCQkJcmVnID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDIwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDIwPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsKKwkJCWRjci1jb250cm9sbGVyOworCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMCAwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCX07CisKKwlVSUMwOiBpbnRlcnJ1cHQtY29udHJvbGxlcjAgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwZ3QiLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCWRjci1yZWcgPSA8MGMwIDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJVUlDMTogaW50ZXJydXB0LWNvbnRyb2xsZXIxIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDE+OworCQlkY3ItcmVnID0gPDBkMCAwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MWUgNCAxZiA0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJVUlDMjogaW50ZXJydXB0LWNvbnRyb2xsZXIyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDI+OworCQlkY3ItcmVnID0gPDBlMCAwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8YSA0IGIgND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzM6IGludGVycnVwdC1jb250cm9sbGVyMyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBndCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwzPjsKKwkJZGNyLXJlZyA9IDwwZjAgMDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDEwIDQgMTEgND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVNEUjA6IHNkciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHNkci00NjBndCI7CisJCWRjci1yZWcgPSA8MDBlIDAwMj47CisJfTsKKworCUNQUjA6IGNwciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwci00NjBndCI7CisJCWRjci1yZWcgPSA8MDBjIDAwMj47CisJfTsKKworCXBsYiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi00NjBndCIsICJpYm0scGxiNCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQlTRFJBTTA6IHNkcmFtIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHNkcmFtLTQ2MGd0IiwgImlibSxzZHJhbS00MDVncCI7CisJCQlkY3ItcmVnID0gPDAxMCAyPjsKKwkJfTsKKworCQlNQUwwOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBndCIsICJpYm0sbWNtYWwyIjsKKwkJCWRjci1yZWcgPSA8MTgwIDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDw0PjsKKwkJCW51bS1yeC1jaGFucyA9IDwyMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQlpbnRlcnJ1cHRzID0gPAkvKlRYRU9CKi8gNiA0CisJCQkJCS8qUlhFT0IqLyA3IDQKKwkJCQkJLypTRVJSKi8gIDMgNAorCQkJCQkvKlRYREUqLyAgNCA0CisJCQkJCS8qUlhERSovICA1IDQ+OworCQkJZGVzYy1iYXNlLWFkZHItaGlnaCA9IDw4PjsKKwkJfTsKKworCQlQT0IwOiBvcGIgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sb3BiLTQ2MGd0IiwgImlibSxvcGIiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlcyA9IDxiMDAwMDAwMCA0IGIwMDAwMDAwIDUwMDAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCisJCQlFQkMwOiBlYmMgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGViYy00NjBndCIsICJpYm0sZWJjIjsKKwkJCQlkY3ItcmVnID0gPDAxMiAyPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHRzID0gPDYgND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQl9OworCisJCQlVQVJUMDogc2VyaWFsQGVmNjAwMzAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPGVmNjAwMzAwIDg+OworCQkJCXZpcnR1YWwtcmVnID0gPGVmNjAwMzAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQkJaW50ZXJydXB0cyA9IDwxIDQ+OworCQkJfTsKKworCQkJVUFSVDE6IHNlcmlhbEBlZjYwMDQwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDxlZjYwMDQwMCA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDxlZjYwMDQwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MSA0PjsKKwkJCX07CisKKwkJCVVBUlQyOiBzZXJpYWxAZWY2MDA1MDAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8ZWY2MDA1MDAgOD47CisJCQkJdmlydHVhbC1yZWcgPSA8ZWY2MDA1MDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDFkIDQ+OworCQkJfTsKKworCQkJVUFSVDM6IHNlcmlhbEBlZjYwMDYwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDxlZjYwMDYwMCA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDxlZjYwMDYwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJCWludGVycnVwdHMgPSA8MWUgND47CisJCQl9OworCisJCQlJSUMwOiBpMmNAZWY2MDA3MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NjBndCIsICJpYm0saWljIjsKKwkJCQlyZWcgPSA8ZWY2MDA3MDAgMTQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MiA0PjsKKwkJCX07CisKKwkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ2MGd0IiwgImlibSxpaWMiOworCQkJCXJlZyA9IDxlZjYwMDgwMCAxND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwzIDQ+OworCQkJfTsKKworCQkJWk1JSTA6IGVtYWMtem1paUBlZjYwMGQwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sem1paS00NjBndCIsICJpYm0sem1paSI7CisJCQkJcmVnID0gPGVmNjAwZDAwIGM+OworCQkJfTsKKworCQkJUkdNSUkwOiBlbWFjLXJnbWlpQGVmNjAxNTAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxyZ21paS00NjBndCIsICJpYm0scmdtaWkiOworCQkJCXJlZyA9IDxlZjYwMTUwMCA4PjsKKwkJCQloYXMtbWRpbzsKKwkJCX07CisKKwkJCVJHTUlJMTogZW1hYy1yZ21paUBlZjYwMTYwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0scmdtaWktNDYwZ3QiLCAiaWJtLHJnbWlpIjsKKwkJCQlyZWcgPSA8ZWY2MDE2MDAgOD47CisJCQkJaGFzLW1kaW87CisJCQl9OworCisJCQlUQUgwOiBlbWFjLXRhaEBlZjYwMTM1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sdGFoLTQ2MGd0IiwgImlibSx0YWgiOworCQkJCXJlZyA9IDxlZjYwMTM1MCAzMD47CisJCQl9OworCisJCQlUQUgxOiBlbWFjLXRhaEBlZjYwMTQ1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sdGFoLTQ2MGd0IiwgImlibSx0YWgiOworCQkJCXJlZyA9IDxlZjYwMTQ1MCAzMD47CisJCQl9OworCisJCQlFTUFDMDogZXRoZXJuZXRAZWY2MDBlMDAgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0IjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDE+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDAgJlVJQzIgMTAgNAorCQkJCQkJIC8qV2FrZSovICAgMSAmVUlDMiAxNCA0PjsKKwkJCQlyZWcgPSA8ZWY2MDBlMDAgNzA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwwPjsKKwkJCQltYWwtcngtY2hhbm5lbCA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDIzMjg+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKKwkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKKwkJCQlwaHktbW9kZSA9ICJyZ21paSI7CisJCQkJcGh5LW1hcCA9IDwwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MD47CisJCQkJdGFoLWRldmljZSA9IDwmVEFIMD47CisJCQkJdGFoLWNoYW5uZWwgPSA8MD47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJfTsKKworCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwZjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzE+OworCQkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAwICZVSUMyIDExIDQKKwkJCQkJCSAvKldha2UqLyAgIDEgJlVJQzIgMTUgND47CisJCQkJcmVnID0gPGVmNjAwZjAwIDcwPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8OD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDwyMzI4PjsKKwkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CisJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MDAwMDAwMDA+OworCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkwPjsKKwkJCQlyZ21paS1jaGFubmVsID0gPDE+OworCQkJCXRhaC1kZXZpY2UgPSA8JlRBSDE+OworCQkJCXRhaC1jaGFubmVsID0gPDE+OworCQkJCWhhcy1pbnZlcnRlZC1zdGFjci1vYzsKKwkJCQloYXMtbmV3LXN0YWNyLXN0YW9wYzsKKwkJCQltZGlvLWRldmljZSA9IDwmRU1BQzA+OworCQkJfTsKKworCQkJRU1BQzI6IGV0aGVybmV0QGVmNjAxMTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzI+OworCQkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAwICZVSUMyIDEyIDQKKwkJCQkJCSAvKldha2UqLyAgIDEgJlVJQzIgMTYgND47CisJCQkJcmVnID0gPGVmNjAxMTAwIDcwPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mj47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MTA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MjMyOD47CisJCQkJcngtZmlmby1zaXplID0gPDEwMDA+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDw4MDA+OworCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKKwkJCQlwaHktbWFwID0gPDAwMDAwMDAwPjsKKwkJCQlyZ21paS1kZXZpY2UgPSA8JlJHTUlJMT47CisJCQkJcmdtaWktY2hhbm5lbCA9IDwwPjsKKwkJCQloYXMtaW52ZXJ0ZWQtc3RhY3Itb2M7CisJCQkJaGFzLW5ldy1zdGFjci1zdGFvcGM7CisJCQkJbWRpby1kZXZpY2UgPSA8JkVNQUMwPjsKKwkJCX07CisKKwkJCUVNQUMzOiBldGhlcm5ldEBlZjYwMTIwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMzPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwID0gPC8qU3RhdHVzKi8gMCAmVUlDMiAxMyA0CisJCQkJCQkgLypXYWtlKi8gICAxICZVSUMyIDE3IDQ+OworCQkJCXJlZyA9IDxlZjYwMTIwMCA3MD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDM+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDE4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDIzMjg+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKKwkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKKwkJCQlwaHktbW9kZSA9ICJyZ21paSI7CisJCQkJcGh5LW1hcCA9IDwwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTE+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MT47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJCW1kaW8tZGV2aWNlID0gPCZFTUFDMD47CisJCQl9OworCQl9OworCisJCVBDSVgwOiBwY2lAYzBlYzAwMDAwIHsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi1wY2l4LTQ2MGd0IiwgImlibSxwbGItcGNpeCI7CisJCQlwcmltYXJ5OworCQkJbGFyZ2UtaW5ib3VuZC13aW5kb3dzOworCQkJZW5hYmxlLW1zaS1ob2xlOworCQkJcmVnID0gPGMgMGVjMDAwMDAgICA4CS8qIENvbmZpZyBzcGFjZSBhY2Nlc3MgKi8KKwkJCSAgICAgICAwIDAgMAkJLyogbm8gSUFDSyBjeWNsZXMgKi8KKwkJCSAgICAgICBjIDBlZDAwMDAwICAgNCAgIC8qIFNwZWNpYWwgY3ljbGVzICovCisJCQkgICAgICAgYyAwZWM4MDAwMCAxMDAJLyogSW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCQkgICAgICAgYyAwZWM4MDEwMCAgZmM+OwkvKiBJbnRlcm5hbCBtZXNzYWdpbmcgcmVnaXN0ZXJzICovCisKKwkJCS8qIE91dGJvdW5kIHJhbmdlcywgb25lIG1lbW9yeSBhbmQgb25lIElPLAorCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQKKwkJCSAqLworCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgODAwMDAwMDAgMDAwMDAwMGQgODAwMDAwMDAgMCA4MDAwMDAwMAorCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCAwMDAwMDAwYyAwODAwMDAwMCAwIDAwMDEwMDAwPjsKKworCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLworCQkJZG1hLXJhbmdlcyA9IDw0MjAwMDAwMCAwIDAgMCAwIDAgODAwMDAwMDA+OworCisJCQkvKiBUaGlzIGRyaXZlcyBidXNzZXMgMCB0byAweDNmICovCisJCQlidXMtcmFuZ2UgPSA8MCAzZj47CisKKwkJCS8qIEFsbCBQQ0kgaW50ZXJydXB0cyBhcmUgcm91dGVkIHRvIGV4dCBJUlEgMiAtPiBVSUMxLTAgKi8KKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDwwMDAwIDAgMCAwPjsKKwkJCWludGVycnVwdC1tYXAgPSA8IDAwMDAgMCAwIDAgJlVJQzEgMCA4ID47CisJCX07CisKKwkJUENJRTA6IHBjaWV4QGQwMDAwMDAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImlibSxwbGItcGNpZXgtNDYwZXgiLCAiaWJtLHBsYi1wY2lleCI7CisJCQlwcmltYXJ5OworCQkJcG9ydCA9IDwwPjsgLyogcG9ydCBudW1iZXIgKi8KKwkJCXJlZyA9IDxkIDAwMDAwMDAwIDIwMDAwMDAwCS8qIENvbmZpZyBzcGFjZSBhY2Nlc3MgKi8KKwkJCSAgICAgICBjIDA4MDEwMDAwIDAwMDAxMDAwPjsJLyogUmVnaXN0ZXJzICovCisJCQlkY3ItcmVnID0gPDEwMCAwMjA+OworCQkJc2RyLWJhc2UgPSA8MzAwPjsKKworCQkJLyogT3V0Ym91bmQgcmFuZ2VzLCBvbmUgbWVtb3J5IGFuZCBvbmUgSU8sCisJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAorCQkJICovCisJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCAwMDAwMDAwZSAwMDAwMDAwMCAwIDgwMDAwMDAwCisJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIDAwMDAwMDBmIDgwMDAwMDAwIDAgMDAwMTAwMDA+OworCisJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCisJCQlkbWEtcmFuZ2VzID0gPDQyMDAwMDAwIDAgMCAwIDAgMCA4MDAwMDAwMD47CisKKwkJCS8qIFRoaXMgZHJpdmVzIGJ1c3NlcyA0MCB0byAweDdmICovCisJCQlidXMtcmFuZ2UgPSA8NDAgN2Y+OworCisJCQkvKiBMZWdhY3kgaW50ZXJydXB0cyAobm90ZSB0aGUgd2VpcmQgcG9sYXJpdHksIHRoZSBicmlkZ2Ugc2VlbXMKKwkJCSAqIHRvIGludmVydCBQQ0llIGxlZ2FjeSBpbnRlcnJ1cHRzKS4KKwkJCSAqIFdlIGFyZSBkZS1zd2l6emxpbmcgaGVyZSBiZWNhdXNlIHRoZSBudW1iZXJzIGFyZSBhY3R1YWxseSBmb3IKKwkJCSAqIHBvcnQgb2YgdGhlIHJvb3QgY29tcGxleCB2aXJ0dWFsIFAyUCBicmlkZ2UuIEJ1dCBJIHdhbnQKKwkJCSAqIHRvIGF2b2lkIHB1dHRpbmcgYSBub2RlIGZvciBpdCBpbiB0aGUgdHJlZSwgc28gdGhlIG51bWJlcnMKKwkJCSAqIGJlbG93IGFyZSBiYXNpY2FsbHkgZGUtc3dpenpsZWQgbnVtYmVycy4KKwkJCSAqIFRoZSByZWFsIHNsb3QgaXMgb24gaWRzZWwgMCwgc28gdGhlIHN3aXp6bGluZyBpcyAxOjEKKwkJCSAqLworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAwMDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkwMDAwIDAgMCAxICZVSUMzIGMgNCAvKiBzd2l6emxlZCBpbnQgQSAqLworCQkJCTAwMDAgMCAwIDIgJlVJQzMgZCA0IC8qIHN3aXp6bGVkIGludCBCICovCisJCQkJMDAwMCAwIDAgMyAmVUlDMyBlIDQgLyogc3dpenpsZWQgaW50IEMgKi8KKwkJCQkwMDAwIDAgMCA0ICZVSUMzIGYgNCAvKiBzd2l6emxlZCBpbnQgRCAqLz47CisJCX07CisKKwkJUENJRTE6IHBjaWV4QGQyMDAwMDAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImlibSxwbGItcGNpZXgtNDYwZXgiLCAiaWJtLHBsYi1wY2lleCI7CisJCQlwcmltYXJ5OworCQkJcG9ydCA9IDwxPjsgLyogcG9ydCBudW1iZXIgKi8KKwkJCXJlZyA9IDxkIDIwMDAwMDAwIDIwMDAwMDAwCS8qIENvbmZpZyBzcGFjZSBhY2Nlc3MgKi8KKwkJCSAgICAgICBjIDA4MDExMDAwIDAwMDAxMDAwPjsJLyogUmVnaXN0ZXJzICovCisJCQlkY3ItcmVnID0gPDEyMCAwMjA+OworCQkJc2RyLWJhc2UgPSA8MzQwPjsKKworCQkJLyogT3V0Ym91bmQgcmFuZ2VzLCBvbmUgbWVtb3J5IGFuZCBvbmUgSU8sCisJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAorCQkJICovCisJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCAwMDAwMDAwZSA4MDAwMDAwMCAwIDgwMDAwMDAwCisJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIDAwMDAwMDBmIDgwMDEwMDAwIDAgMDAwMTAwMDA+OworCisJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCisJCQlkbWEtcmFuZ2VzID0gPDQyMDAwMDAwIDAgMCAwIDAgMCA4MDAwMDAwMD47CisKKwkJCS8qIFRoaXMgZHJpdmVzIGJ1c3NlcyA4MCB0byAweGJmICovCisJCQlidXMtcmFuZ2UgPSA8ODAgYmY+OworCisJCQkvKiBMZWdhY3kgaW50ZXJydXB0cyAobm90ZSB0aGUgd2VpcmQgcG9sYXJpdHksIHRoZSBicmlkZ2Ugc2VlbXMKKwkJCSAqIHRvIGludmVydCBQQ0llIGxlZ2FjeSBpbnRlcnJ1cHRzKS4KKwkJCSAqIFdlIGFyZSBkZS1zd2l6emxpbmcgaGVyZSBiZWNhdXNlIHRoZSBudW1iZXJzIGFyZSBhY3R1YWxseSBmb3IKKwkJCSAqIHBvcnQgb2YgdGhlIHJvb3QgY29tcGxleCB2aXJ0dWFsIFAyUCBicmlkZ2UuIEJ1dCBJIHdhbnQKKwkJCSAqIHRvIGF2b2lkIHB1dHRpbmcgYSBub2RlIGZvciBpdCBpbiB0aGUgdHJlZSwgc28gdGhlIG51bWJlcnMKKwkJCSAqIGJlbG93IGFyZSBiYXNpY2FsbHkgZGUtc3dpenpsZWQgbnVtYmVycy4KKwkJCSAqIFRoZSByZWFsIHNsb3QgaXMgb24gaWRzZWwgMCwgc28gdGhlIHN3aXp6bGluZyBpcyAxOjEKKwkJCSAqLworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAwMDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkwMDAwIDAgMCAxICZVSUMzIDEwIDQgLyogc3dpenpsZWQgaW50IEEgKi8KKwkJCQkwMDAwIDAgMCAyICZVSUMzIDExIDQgLyogc3dpenpsZWQgaW50IEIgKi8KKwkJCQkwMDAwIDAgMCAzICZVSUMzIDEyIDQgLyogc3dpenpsZWQgaW50IEMgKi8KKwkJCQkwMDAwIDAgMCA0ICZVSUMzIDEzIDQgLyogc3dpenpsZWQgaW50IEQgKi8+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2hhbGVha2FsYS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvaGFsZWFrYWxhLmR0cwppbmRleCA1ZGQzZDE1Li5iNWQ5NWFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvaGFsZWFrYWxhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvaGFsZWFrYWxhLmR0cwpAQCAtMTIsNyArMTIsNyBAQAogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwogCW1vZGVsID0gImFtY2MsaGFsZWFrYWxhIjsKLQljb21wYXRpYmxlID0gImFtY2Msa2lsYXVlYSI7CisJY29tcGF0aWJsZSA9ICJhbWNjLGhhbGVha2FsYSIsICJhbWNjLGtpbGF1ZWEiOwogCWRjci1wYXJlbnQgPSA8Ji9jcHVzL2NwdUAwPjsKIAogCWFsaWFzZXMgewpAQCAtMjE4LDcgKzIxOCw3IEBACiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CiAJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MD47CiAJCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQltYXgtZnJhbWUtc2l6ZSA9IDw1ZGM+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDIzMjg+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKIAkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQkJY29tcGF0aWJsZSA9ICJpYm0scGxiLXBjaWV4LTQwNWV4ciIsICJpYm0scGxiLXBjaWV4IjsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi1wY2lleC00MDVleCIsICJpYm0scGxiLXBjaWV4IjsKIAkJCXByaW1hcnk7CiAJCQlwb3J0ID0gPDA+OyAvKiBwb3J0IG51bWJlciAqLwogCQkJcmVnID0gPGEwMDAwMDAwIDIwMDAwMDAwCS8qIENvbmZpZyBzcGFjZSBhY2Nlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKaW5kZXggOWJkZmMwZi4uY2MyODczYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKQEAgLTM4LDggKzM4LDggQEAKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLwogCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwogCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwotCQkJaS1jYWNoZS1zaXplID0gPDIwMDAwPjsKLQkJCWQtY2FjaGUtc2l6ZSA9IDwyMDAwMD47CisJCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CisJCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CiAJCQlkY3ItY29udHJvbGxlcjsKIAkJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CiAJCX07CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogCQl9OwogCiAJCVBPQjA6IG9wYiB7Ci0JCSAgCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00NDBzcGUiLCAiaWJtLG9wYi00NDBncCIsICJpYm0sb3BiIjsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00NDBzcGUiLCAiaWJtLG9wYi00NDBncCIsICJpYm0sb3BiIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCSAgCXJhbmdlcyA9IDwwMDAwMDAwMCA0IGUwMDAwMDAwIDIwMDAwMDAwPjsKLQkJICAJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisJCQlyYW5nZXMgPSA8MDAwMDAwMDAgNCBlMDAwMDAwMCAyMDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KIAogCQkJRUJDMDogZWJjIHsKIAkJCQljb21wYXRpYmxlID0gImlibSxlYmMtNDQwc3BlIiwgImlibSxlYmMtNDQwZ3AiLCAiaWJtLGViYyI7CkBAIC0xNTMsNDEgKzE1Myw0MCBAQAogCQkJfTsKIAogCQkJVUFSVDA6IHNlcmlhbEAxMDAwMDIwMCB7Ci0JCSAgIAkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJICAgCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkgICAJCXJlZyA9IDwxMDAwMDIwMCA4PjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPDEwMDAwMjAwIDg+OwogCQkJCXZpcnR1YWwtcmVnID0gPGEwMDAwMjAwPjsKLQkJICAgCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KLQkJICAgCQljdXJyZW50LXNwZWVkID0gPDFjMjAwPjsKLQkJICAgCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKLQkJICAgCQlpbnRlcnJ1cHRzID0gPDAgND47Ci0JICAgCQl9OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MWMyMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MCA0PjsKKwkJCX07CiAKIAkJCVVBUlQxOiBzZXJpYWxAMTAwMDAzMDAgewotCQkgICAJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCSAgIAkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJICAgCQlyZWcgPSA8MTAwMDAzMDAgOD47CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwxMDAwMDMwMCA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDxhMDAwMDMwMD47Ci0JCSAgIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkgICAJCWN1cnJlbnQtc3BlZWQgPSA8MD47Ci0JCSAgIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47Ci0JCSAgIAkJaW50ZXJydXB0cyA9IDwxIDQ+OwotCSAgIAkJfTsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEgND47CisJCQl9OwogCiAKIAkJCVVBUlQyOiBzZXJpYWxAMTAwMDA2MDAgewotCQkgICAJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCSAgIAkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJICAgCQlyZWcgPSA8MTAwMDA2MDAgOD47CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwxMDAwMDYwMCA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDxhMDAwMDYwMD47Ci0JCSAgIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkgICAJCWN1cnJlbnQtc3BlZWQgPSA8MD47Ci0JCSAgIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47Ci0JCSAgIAkJaW50ZXJydXB0cyA9IDw1IDQ+OwotCSAgIAkJfTsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDUgND47CisJCQl9OwogCiAJCQlJSUMwOiBpMmNAMTAwMDA0MDAgewotCQkJCWRldmljZV90eXBlID0gImkyYyI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MHNwZSIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDwxMDAwMDQwMCAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CkBAIC0xOTUsNyArMTk0LDYgQEAKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0AxMDAwMDUwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwc3BlIiwgImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDEwMDAwNTAwIDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKQEAgLTIxNCw3ICsyMTIsNyBAQAogCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OwogCQkJCW1hbC1yeC1jaGFubmVsID0gPDA+OwogCQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQkJbWF4LWZyYW1lLXNpemUgPSA8NWRjPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDwyMzI4PjsKIAkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CiAJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CiAJCQkJcGh5LW1vZGUgPSAiZ21paSI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKaW5kZXggNjdjN2VhMS4uNDhjOWE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwpAQCAtMTgyLDcgKzE4Miw2IEBACiAJCQl9OwogCiAJCQlJSUMwOiBpMmNAZWY2MDA0MDAgewotCQkJCWRldmljZV90eXBlID0gImkyYyI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQwNWV4IiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDxlZjYwMDQwMCAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CkBAIC0xOTAsNyArMTg5LDYgQEAKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDUwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDA1ZXgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPGVmNjAwNTAwIDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKQEAgLTE5OSw3ICsxOTcsNiBAQAogCiAKIAkJCVJHTUlJMDogZW1hYy1yZ21paUBlZjYwMGIwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAicmdtaWktaW50ZXJmYWNlIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxyZ21paS00MDVleCIsICJpYm0scmdtaWkiOwogCQkJCXJlZyA9IDxlZjYwMGIwMCAxMDQ+OwogCQkJCWhhcy1tZGlvOwpAQCAtMjIyLDcgKzIxOSw3IEBACiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CiAJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MD47CiAJCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQltYXgtZnJhbWUtc2l6ZSA9IDw1ZGM+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDIzMjg+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKIAkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CkBAIC0yNTAsNyArMjQ3LDcgQEAKIAkJCQltYWwtdHgtY2hhbm5lbCA9IDwxPjsKIAkJCQltYWwtcngtY2hhbm5lbCA9IDwxPjsKIAkJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJCW1heC1mcmFtZS1zaXplID0gPDVkYz47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MjMyOD47CiAJCQkJcngtZmlmby1zaXplID0gPDEwMDA+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDw4MDA+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rc2k4NTYwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rc2k4NTYwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODY5Y2UzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rc2k4NTYwLmR0cwpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgRW1lcnNvbiBLU0k4NTYwCisgKgorICogQXV0aG9yOiBBbGV4YW5kciBTbWlybm92IDxhc21pcm5vdkBydS5tdmlzdGEuY29tPgorICoKKyAqIEJhc2VkIG9uIG1wYzg1NjBhZHMuZHRzCisgKgorICogMjAwOCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIktTSTg1NjAiOworCWNvbXBhdGlibGUgPSAiZW1lcnNvbixLU0k4NTYwIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZW5ldDA7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKwkJZXRoZXJuZXQyID0gJmVuZXQyOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODU2MEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8qIEwxLCAzMksgKi8KKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLyogTDEsIDMySyAqLworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkJLyogRnJvbSBVLWJvb3QgKi8KKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkJLyogRnJvbSBVLWJvb3QgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCQkvKiBGcm9tIFUtYm9vdCAqLworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDEwMDAwMDAwPjsJCQkvKiBGaXhlZCBieSBib290d3JhcHBlciAqLworCX07CisKKwlzb2NAZmRmMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCXJhbmdlcyA9IDwweDAwMDAwMDAwIDB4ZmRmMDAwMDAgMHgwMDEwMDAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkJCS8qIEZpeGVkIGJ5IGJvb3R3cmFwcGVyICovCisKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCw4NTQwLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jk1QSUM+OworCQkJaW50ZXJydXB0cyA9IDwweDEyIDB4Mj47CisJCX07CisKKwkJbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCw4NTQwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwweDIwPjsJCS8qIDMyIGJ5dGVzICovCisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OwkJCS8qIEwyLCAyNTZLICovCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZNUElDPjsKKwkJCWludGVycnVwdHMgPSA8MHgxMCAweDI+OworCQl9OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZNUElDPjsKKwkJCWRmc3JyOworCQl9OworCisJCW1kaW9AMjQ1MjAgewkJCQkJLyogRm9yIFRTRUNzICovCisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OworCisJCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmTVBJQz47CisJCQkJcmVnID0gPDB4MT47CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCX07CisKKwkJCVBIWTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZNUElDPjsKKwkJCQlyZWcgPSA8MHgyPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJLyogTWFjIGFkZHJlc3MgZmlsbGVkIGluIGJ5IGJvb3R3cmFwcGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MHgxZCAweDIgMHgxZSAweDIgMHgyMiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmTVBJQz47CisJCQlwaHktaGFuZGxlID0gPCZQSFkxPjsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJLyogTWFjIGFkZHJlc3MgZmlsbGVkIGluIGJ5IGJvb3R3cmFwcGVyICovCisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MHgyMyAweDIgMHgyNCAweDIgMHgyOCAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmTVBJQz47CisJCQlwaHktaGFuZGxlID0gPCZQSFkyPjsKKwkJfTsKKworCQlNUElDOiBwaWNANDAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQljcG1AOTE5YzAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtY3BtIiwgImZzbCxjcG0yIjsKKwkJCXJlZyA9IDwweDkxOWMwIDB4MzA+OworCQkJcmFuZ2VzOworCisJCQltdXJhbUA4MDAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmFuZ2VzID0gPDB4MCAweDgwMDAwIDB4MTAwMDA+OworCisJCQkJZGF0YUAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtLWRhdGEiOworCQkJCQlyZWcgPSA8MHgwIDB4NDAwMCAweDkwMDAgMHgyMDAwPjsKKwkJCQl9OworCQkJfTsKKworCQkJYnJnQDkxOWYwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTYwLWJyZyIsCisJCQkJCSAgICAgImZzbCxjcG0yLWJyZyIsCisJCQkJCSAgICAgImZzbCxjcG0tYnJnIjsKKwkJCQlyZWcgPSA8MHg5MTlmMCAweDEwIDB4OTE1ZjAgMHgxMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE2NTAwMDAwMD47CS8qIDE2Nk1IeiAqLworCQkJfTsKKworCQkJQ1BNUElDOiBwaWNAOTBjMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJaW50ZXJydXB0cyA9IDwweDJlIDB4Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmTVBJQz47CisJCQkJcmVnID0gPDB4OTBjMDAgMHg4MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2MC1jcG0tcGljIiwgImZzbCxjcG0yLXBpYyI7CisJCQl9OworCisJCQlzZXJpYWxAOTFhMDAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2MC1zY2MtdWFydCIsCisJCQkJCSAgICAgImZzbCxjcG0yLXNjYy11YXJ0IjsKKwkJCQlyZWcgPSA8MHg5MWEwMCAweDIwIDB4ODgwMDAgMHgxMDA+OworCQkJCWZzbCxjcG0tYnJnID0gPDE+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDgwMDAwMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwweDFjMjAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MjggMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1QSUM+OworCQkJfTsKKworCQkJc2VyaWFsQDkxYTIwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtc2NjLXVhcnQiLAorCQkJCQkgICAgICJmc2wsY3BtMi1zY2MtdWFydCI7CisJCQkJcmVnID0gPDB4OTFhMjAgMHgyMCAweDg4MTAwIDB4MTAwPjsKKwkJCQlmc2wsY3BtLWJyZyA9IDwyPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHg0YTAwMDAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDB4MWMyMDA+OworCQkJCWludGVycnVwdHMgPSA8MHgyOSAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTVBJQz47CisJCQl9OworCisJCQltZGlvQDkwZDAwIHsJCQkJLyogRm9yIEZDQ3MgKi8KKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxjcG0yLW1kaW8tYml0YmFuZyI7CisJCQkJcmVnID0gPDB4OTBkMDAgMHgxND47CisJCQkJZnNsLG1kaW8tcGluID0gPDI0PjsKKwkJCQlmc2wsbWRjLXBpbiA9IDwyNT47CisKKwkJCQlQSFkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jk1QSUM+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJfTsKKworCQkJZW5ldDI6IGV0aGVybmV0QDkxMzAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTYwLWZjYy1lbmV0IiwKKwkJCQkJICAgICAiZnNsLGNwbTItZmNjLWVuZXQiOworCQkJCXJlZyA9IDwweDkxMzAwIDB4MjAgMHg4ODQwMCAweDEwMCAweDkxMzkwIDB4MT47CisJCQkJLyogTWFjIGFkZHJlc3MgZmlsbGVkIGluIGJ5IGJvb3R3cmFwcGVyICovCisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4MTIwMDAzMDA+OworCQkJCWludGVycnVwdHMgPSA8MHgyMCAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTVBJQz47CisJCQkJcGh5LWhhbmRsZSA9IDwmUEhZMD47CisJCQl9OworCQl9OworCX07CisKKwlsb2NhbGJ1c0BmZGYwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2MC1sb2NhbGJ1cyI7CisJCXJlZyA9IDwweGZkZjA1MDAwIDB4Njg+OworCisJCXJhbmdlcyA9IDwweDAgMHgwIDB4ZTAwMDAwMDAgMHgwMDgwMDAwMAorCQkJICAweDQgMHgwIDB4ZTgwODAwMDAgMHgwMDA4MDAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImplZGVjLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4ODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8MHgyPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIlByaW1hcnkgS2VybmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4MTgwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJQcmltYXJ5IEZpbGVzeXN0ZW0iOworCQkJCXJlZyA9IDwweDE4MDAwMCAweDU4MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDcwMDAwMCB7CisJCQkJbGFiZWwgPSAiTW9uaXRvciI7CisJCQkJcmVnID0gPDB4MzAwMDAwIDB4MTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCWNwbGRANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZW1lcnNvbixLU0k4NTYwLWNwbGQiOworCQkJcmVnID0gPDB4NCAweDAgMHg4MDAwMD47CisJCX07CisJfTsKKworCisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3NvYy9jcG0vc2VyaWFsQDkxYTAwIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEQuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRC5kdHMKaW5kZXggNDQ2OTU4OC4uMmU1YTFhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRC5kdHMKQEAgLTcsNiArNyw3IEBACiAgKiBCYXNlZCBvbiBzYW5kcG9pbnQuZHRzCiAgKgogICogMjAwNiAoYykgRy4gTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKiBDb3B5cmlnaHQgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgogICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KQEAgLTE3LDYgKzE4LDggQEAKIAogICovCiAKKy9kdHMtdjEvOworCiAvIHsKIAltb2RlbCA9ICJLdXJvYm94SEQiOwogCWNvbXBhdGlibGUgPSAibGlua3N0YXRpb24iOwpAQCAtMzUsMTkgKzM4LDE5IEBACiAKIAkJUG93ZXJQQyw2MDNlIHsgLyogUmVhbGx5IDgyNDEgKi8KIAkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8YmViYzIwMD47CS8qIEZpeGVkIGJ5IGJvb3Rsb2FkZXIgKi8KLQkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwxNzQzMDAwPjsgLyogRml4ZWQgYnkgYm9vdGxvYWRlciAqLworCQkJcmVnID0gPDB4MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsJLyogRml4ZWQgYnkgYm9vdGxvYWRlciAqLworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDI0MzkxNjgwPjsgLyogRml4ZWQgYnkgYm9vdGxvYWRlciAqLwogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZpeGVkIGJ5IGJvb3Rsb2FkZXIgKi8KIAkJCS8qIEZvbGxvd2luZyByZXF1aXJlZCBieSBkdGMgYnV0IG5vdCB1c2VkICovCi0JCQlpLWNhY2hlLXNpemUgPSA8NDAwMD47Ci0JCQlkLWNhY2hlLXNpemUgPSA8NDAwMD47CisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MDAwMDAwMDAgMDQwMDAwMDA+OworCQlyZWcgPSA8MHgwIDB4NDAwMDAwMD47CiAJfTsKIAogCXNvYzEweCB7IC8qIEFGQUlDVCBuZWVkIHRvIG1ha2Ugc29jIGZvciA4MjQ1J3MgdWFydHMgdG8gYmUgZGVmaW5lZCAqLwpAQCAtNTYsMjYgKzU5LDI2IEBACiAJCWRldmljZV90eXBlID0gInNvYyI7CiAJCWNvbXBhdGlibGUgPSAibXBjMTB4IjsKIAkJc3RvcmUtZ2F0aGVyaW5nID0gPDA+OyAvKiAwID09IG9mZiwgITAgPT0gb24gKi8KLQkJcmVnID0gPDgwMDAwMDAwIDAwMTAwMDAwPjsKLQkJcmFuZ2VzID0gPDgwMDAwMDAwIDgwMDAwMDAwIDcwMDAwMDAwCS8qIHBjaSBtZW0gc3BhY2UgKi8KLQkJCSAgZmMwMDAwMDAgZmMwMDAwMDAgMDAxMDAwMDAJLyogRVVNQiAqLwotCQkJICBmZTAwMDAwMCBmZTAwMDAwMCAwMGMwMDAwMAkvKiBwY2kgaS9vIHNwYWNlICovCi0JCQkgIGZlYzAwMDAwIGZlYzAwMDAwIDAwMzAwMDAwCS8qIHBjaSBjZmcgcmVncyAqLwotCQkJICBmZWYwMDAwMCBmZWYwMDAwMCAwMDEwMDAwMD47CS8qIHBjaSBpYWNrICovCisJCXJlZyA9IDwweDgwMDAwMDAwIDB4MTAwMDAwPjsKKwkJcmFuZ2VzID0gPDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDcwMDAwMDAwCS8qIHBjaSBtZW0gc3BhY2UgKi8KKwkJCSAgMHhmYzAwMDAwMCAweGZjMDAwMDAwIDB4MTAwMDAwCS8qIEVVTUIgKi8KKwkJCSAgMHhmZTAwMDAwMCAweGZlMDAwMDAwIDB4YzAwMDAwCS8qIHBjaSBpL28gc3BhY2UgKi8KKwkJCSAgMHhmZWMwMDAwMCAweGZlYzAwMDAwIDB4MzAwMDAwCS8qIHBjaSBjZmcgcmVncyAqLworCQkJICAweGZlZjAwMDAwIDB4ZmVmMDAwMDAgMHgxMDAwMDA+OwkvKiBwY2kgaWFjayAqLwogCiAJCWkyY0A4MDAwMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8ODAwMDMwMDAgMTAwMD47CisJCQlyZWcgPSA8MHg4MDAwMzAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw1IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAKIAkJCXJ0Y0AzMiB7CiAJCQkJZGV2aWNlX3R5cGUgPSAicnRjIjsKIAkJCQljb21wYXRpYmxlID0gInJpY29oLHJzNWMzNzJhIjsKLQkJCQlyZWcgPSA8MzI+OworCQkJCXJlZyA9IDwweDMyPjsKIAkJCX07CiAJCX07CiAKQEAgLTgzLDkgKzg2LDkgQEAKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCXJlZyA9IDw4MDAwNDUwMCA4PjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1ZDA4ZDg4PjsKLQkJCWN1cnJlbnQtc3BlZWQgPSA8MjU4MD47CisJCQlyZWcgPSA8MHg4MDAwNDUwMCAweDg+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDk3NTUzODAwPjsKKwkJCWN1cnJlbnQtc3BlZWQgPSA8OTYwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKQEAgLTk0LDEwICs5NywxMCBAQAogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDgwMDA0NjAwIDg+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDVkMDhkODg+OwotCQkJY3VycmVudC1zcGVlZCA9IDxlMTAwPjsKLQkJCWludGVycnVwdHMgPSA8YSAwPjsKKwkJCXJlZyA9IDwweDgwMDA0NjAwIDB4OD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8OTc1NTM4MDA+OworCQkJY3VycmVudC1zcGVlZCA9IDw1NzYwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEwIDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKQEAgLTEwNyw3ICsxMTAsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJcmVnID0gPDgwMDQwMDAwIDQwMDAwPjsKKwkJCXJlZyA9IDwweDgwMDQwMDAwIDB4NDAwMDA+OwogCQl9OwogCiAJCXBjaTA6IHBjaUBmZWMwMDAwMCB7CkBAIC0xMTYsMjkgKzExOSwyOSBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7CiAJCQljb21wYXRpYmxlID0gIm1wYzEweC1wY2kiOwotCQkJcmVnID0gPGZlYzAwMDAwIDQwMDAwMD47Ci0JCQlyYW5nZXMgPSA8MDEwMDAwMDAgMCAgICAgICAgMCBmZTAwMDAwMCAwIDAwYzAwMDAwCi0JCQkJICAwMjAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwIDAgNzAwMDAwMDA+OwotCQkJYnVzLXJhbmdlID0gPDAgZmY+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDdmMjgxNTU+OworCQkJcmVnID0gPDB4ZmVjMDAwMDAgMHg0MDAwMDA+OworCQkJcmFuZ2VzID0gPDB4MTAwMDAwMCAweDAgICAgICAgIDB4MCAweGZlMDAwMDAwIDB4MCAweGMwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4NzAwMDAwMDA+OworCQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAJCQkJLyogSURTRUwgMTEgLSBJUlEwIEVUSCAqLwotCQkJCTU4MDAgMCAwIDEgJm1waWMgMCAxCi0JCQkJNTgwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCQk1ODAwIDAgMCAzICZtcGljIDIgMQotCQkJCTU4MDAgMCAwIDQgJm1waWMgMyAxCisJCQkJMHg1ODAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCQkweDU4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJCTB4NTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkJMHg1ODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAkJCQkvKiBJRFNFTCAxMiAtIElSUTEgSURFMCAqLwotCQkJCTYwMDAgMCAwIDEgJm1waWMgMSAxCi0JCQkJNjAwMCAwIDAgMiAmbXBpYyAyIDEKLQkJCQk2MDAwIDAgMCAzICZtcGljIDMgMQotCQkJCTYwMDAgMCAwIDQgJm1waWMgMCAxCisJCQkJMHg2MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MSAweDEKKwkJCQkweDYwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgyIDB4MQorCQkJCTB4NjAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkJMHg2MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MCAweDEKIAkJCQkvKiBJRFNFTCAxNCAtIElSUTMgVVNCMi4wICovCi0JCQkJNzAwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCQk3MDAwIDAgMCAyICZtcGljIDMgMQotCQkJCTcwMDAgMCAwIDMgJm1waWMgMyAxCi0JCQkJNzAwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCQkweDcwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJCTB4NzAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkJMHg3MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MyAweDEKKwkJCQkweDcwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCQkJPjsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3Vyb2JveEhHLmR0cwppbmRleCA4NDQzYzg1Li5lNDkxNmU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3Vyb2JveEhHLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3Vyb2JveEhHLmR0cwpAQCAtNyw2ICs3LDcgQEAKICAqIEJhc2VkIG9uIHNhbmRwb2ludC5kdHMKICAqCiAgKiAyMDA2IChjKSBHLiBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqIENvcHlyaWdodCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCiAgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQpAQCAtMTcsNiArMTgsOCBAQAogCiAgKi8KIAorL2R0cy12MS87CisKIC8gewogCW1vZGVsID0gIkt1cm9ib3hIRyI7CiAJY29tcGF0aWJsZSA9ICJsaW5rc3RhdGlvbiI7CkBAIC0zNSwxOSArMzgsMTkgQEAKIAogCQlQb3dlclBDLDYwM2UgeyAvKiBSZWFsbHkgODI0MSAqLwogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDxmZGFkNjgwPjsJLyogRml4ZWQgYnkgYm9vdGxvYWRlciAqLwotCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDFGMDQwMDA+OyAvKiBGaXhlZCBieSBib290bG9hZGVyICovCisJCQlyZWcgPSA8MHgwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNjYwMDAwMDA+OwkvKiBGaXhlZCBieSBib290bG9hZGVyICovCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MzI1MjIyNDA+OyAvKiBGaXhlZCBieSBib290bG9hZGVyICovCiAJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLyogRml4ZWQgYnkgYm9vdGxvYWRlciAqLwogCQkJLyogRm9sbG93aW5nIHJlcXVpcmVkIGJ5IGR0YyBidXQgbm90IHVzZWQgKi8KLQkJCWktY2FjaGUtc2l6ZSA9IDw0MDAwPjsKLQkJCWQtY2FjaGUtc2l6ZSA9IDw0MDAwPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CiAJCX07CiAJfTsKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CisJCXJlZyA9IDwweDAgMHg4MDAwMDAwPjsKIAl9OwogCiAJc29jMTB4IHsgLyogQUZBSUNUIG5lZWQgdG8gbWFrZSBzb2MgZm9yIDgyNDUncyB1YXJ0cyB0byBiZSBkZWZpbmVkICovCkBAIC01NiwyNiArNTksMjYgQEAKIAkJZGV2aWNlX3R5cGUgPSAic29jIjsKIAkJY29tcGF0aWJsZSA9ICJtcGMxMHgiOwogCQlzdG9yZS1nYXRoZXJpbmcgPSA8MD47IC8qIDAgPT0gb2ZmLCAhMCA9PSBvbiAqLwotCQlyZWcgPSA8ODAwMDAwMDAgMDAxMDAwMDA+OwotCQlyYW5nZXMgPSA8ODAwMDAwMDAgODAwMDAwMDAgNzAwMDAwMDAJLyogcGNpIG1lbSBzcGFjZSAqLwotCQkJICBmYzAwMDAwMCBmYzAwMDAwMCAwMDEwMDAwMAkvKiBFVU1CICovCi0JCQkgIGZlMDAwMDAwIGZlMDAwMDAwIDAwYzAwMDAwCS8qIHBjaSBpL28gc3BhY2UgKi8KLQkJCSAgZmVjMDAwMDAgZmVjMDAwMDAgMDAzMDAwMDAJLyogcGNpIGNmZyByZWdzICovCi0JCQkgIGZlZjAwMDAwIGZlZjAwMDAwIDAwMTAwMDAwPjsJLyogcGNpIGlhY2sgKi8KKwkJcmVnID0gPDB4ODAwMDAwMDAgMHgxMDAwMDA+OworCQlyYW5nZXMgPSA8MHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4NzAwMDAwMDAJLyogcGNpIG1lbSBzcGFjZSAqLworCQkJICAweGZjMDAwMDAwIDB4ZmMwMDAwMDAgMHgxMDAwMDAJLyogRVVNQiAqLworCQkJICAweGZlMDAwMDAwIDB4ZmUwMDAwMDAgMHhjMDAwMDAJLyogcGNpIGkvbyBzcGFjZSAqLworCQkJICAweGZlYzAwMDAwIDB4ZmVjMDAwMDAgMHgzMDAwMDAJLyogcGNpIGNmZyByZWdzICovCisJCQkgIDB4ZmVmMDAwMDAgMHhmZWYwMDAwMCAweDEwMDAwMD47CS8qIHBjaSBpYWNrICovCiAKIAkJaTJjQDgwMDAzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDw4MDAwMzAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDgwMDAzMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDUgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAogCQkJcnRjQDMyIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJydGMiOwogCQkJCWNvbXBhdGlibGUgPSAicmljb2gscnM1YzM3MmEiOwotCQkJCXJlZyA9IDwzMj47CisJCQkJcmVnID0gPDB4MzI+OwogCQkJfTsKIAkJfTsKIApAQCAtODMsOSArODYsOSBAQAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDgwMDA0NTAwIDg+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDdjMDQ0YTg+OwotCQkJY3VycmVudC1zcGVlZCA9IDwyNTgwPjsKKwkJCXJlZyA9IDwweDgwMDA0NTAwIDB4OD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMwMDQxMDAwPjsKKwkJCWN1cnJlbnQtc3BlZWQgPSA8OTYwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKQEAgLTk0LDEwICs5NywxMCBAQAogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDgwMDA0NjAwIDg+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDdjMDQ0YTg+OwotCQkJY3VycmVudC1zcGVlZCA9IDxlMTAwPjsKLQkJCWludGVycnVwdHMgPSA8YSAwPjsKKwkJCXJlZyA9IDwweDgwMDA0NjAwIDB4OD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMwMDQxMDAwPjsKKwkJCWN1cnJlbnQtc3BlZWQgPSA8NTc2MDA+OworCQkJaW50ZXJydXB0cyA9IDwxMCAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCkBAIC0xMDcsNyArMTEwLDcgQEAKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKIAkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCXJlZyA9IDw4MDA0MDAwMCA0MDAwMD47CisJCQlyZWcgPSA8MHg4MDA0MDAwMCAweDQwMDAwPjsKIAkJfTsKIAogCQlwY2kwOiBwY2lAZmVjMDAwMDAgewpAQCAtMTE2LDI5ICsxMTksMjkgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQkJY29tcGF0aWJsZSA9ICJtcGMxMHgtcGNpIjsKLQkJCXJlZyA9IDxmZWMwMDAwMCA0MDAwMDA+OwotCQkJcmFuZ2VzID0gPDAxMDAwMDAwIDAgICAgICAgIDAgZmUwMDAwMDAgMCAwMGMwMDAwMAotCQkJCSAgMDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDcwMDAwMDAwPjsKLQkJCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3ZjI4MTU1PjsKKwkJCXJlZyA9IDwweGZlYzAwMDAwIDB4NDAwMDAwPjsKKwkJCXJhbmdlcyA9IDwweDEwMDAwMDAgMHgwICAgICAgICAweDAgMHhmZTAwMDAwMCAweDAgMHhjMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDcwMDAwMDAwPjsKKwkJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJCS8qIElEU0VMIDExIC0gSVJRMCBFVEggKi8KLQkJCQk1ODAwIDAgMCAxICZtcGljIDAgMQotCQkJCTU4MDAgMCAwIDIgJm1waWMgMSAxCi0JCQkJNTgwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCQk1ODAwIDAgMCA0ICZtcGljIDMgMQorCQkJCTB4NTgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkJMHg1ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCQkweDU4MDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJCTB4NTgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAJCQkJLyogSURTRUwgMTIgLSBJUlExIElERTAgKi8KLQkJCQk2MDAwIDAgMCAxICZtcGljIDEgMQotCQkJCTYwMDAgMCAwIDIgJm1waWMgMiAxCi0JCQkJNjAwMCAwIDAgMyAmbXBpYyAzIDEKLQkJCQk2MDAwIDAgMCA0ICZtcGljIDAgMQorCQkJCTB4NjAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDEgMHgxCisJCQkJMHg2MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCQkweDYwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgzIDB4MQorCQkJCTB4NjAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDAgMHgxCiAJCQkJLyogSURTRUwgMTQgLSBJUlEzIFVTQjIuMCAqLwotCQkJCTcwMDAgMCAwIDEgJm1waWMgMyAxCi0JCQkJNzAwMCAwIDAgMiAmbXBpYyAzIDEKLQkJCQk3MDAwIDAgMCAzICZtcGljIDMgMQotCQkJCTcwMDAgMCAwIDQgJm1waWMgMyAxCisJCQkJMHg3MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCQkweDcwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJCTB4NzAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkJMHg3MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAkJCT47CiAJCX07CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCmluZGV4IDBkNzAxYzEuLjA5YjRlMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwpAQCAtMjU4LDYgKzI1OCwyMSBAQAogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwzMDAwIDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJCQlwaHkwOmV0aGVybmV0LXBoeUAxIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCXJlZyA9IDwxPjsKKwkJCX07CiAJCX07CiAKIAkJYXRhQDNhMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwppbmRleCA1NzFiYTAyLi4yZTliYzM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCW1kaW9AMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwgImZzbCxtcGM1MjAwLW1kaW8iOwogCQkJcmVnID0gPDMwMDAgNDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWFrYWx1LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tYWthbHUuZHRzCmluZGV4IGJkZDcwZTQuLjg0Y2M1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tYWthbHUuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tYWthbHUuZHRzCkBAIC0xODIsNyArMTgyLDYgQEAKIAkJCX07CiAKIAkJCUlJQzA6IGkyY0BlZjYwMDQwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDA1ZXgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPGVmNjAwNDAwIDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKQEAgLTE5MCw3ICsxODksNiBAQAogCQkJfTsKIAogCQkJSUlDMTogaTJjQGVmNjAwNTAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00MDVleCIsICJpYm0saWljIjsKIAkJCQlyZWcgPSA8ZWY2MDA1MDAgMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwpAQCAtMTk5LDcgKzE5Nyw2IEBACiAKIAogCQkJUkdNSUkwOiBlbWFjLXJnbWlpQGVmNjAwYjAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJyZ21paS1pbnRlcmZhY2UiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLHJnbWlpLTQwNWV4IiwgImlibSxyZ21paSI7CiAJCQkJcmVnID0gPGVmNjAwYjAwIDEwND47CiAJCQkJaGFzLW1kaW87CkBAIC0yMjIsNyArMjE5LDcgQEAKIAkJCQltYWwtdHgtY2hhbm5lbCA9IDwwPjsKIAkJCQltYWwtcngtY2hhbm5lbCA9IDwwPjsKIAkJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJCW1heC1mcmFtZS1zaXplID0gPDVkYz47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MjMyOD47CiAJCQkJcngtZmlmby1zaXplID0gPDEwMDA+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDw4MDA+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKQEAgLTI1MCw3ICsyNDcsNyBAQAogCQkJCW1hbC10eC1jaGFubmVsID0gPDE+OwogCQkJCW1hbC1yeC1jaGFubmVsID0gPDE+OwogCQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQkJbWF4LWZyYW1lLXNpemUgPSA8NWRjPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDwyMzI4PjsKIAkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CiAJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwppbmRleCA3Njk1MWFiLi4yYjBkZGUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKLQogCQlzcGlAZjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CiAJCQlyZWcgPSA8ZjAwIDIwPjsKQEAgLTIwOSwxMCArMjA4LDI1IEBACiAJCWV0aGVybmV0QDMwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOwotCQkJcmVnID0gPDMwMDAgODAwPjsKKwkJCXJlZyA9IDwzMDAwIDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MzAwMCA0MDA+OyAgICAgICAvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAgIC8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMiB7CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQlyZWcgPSA8Mj47CisJCQl9OwogCQl9OwogCiAJCWF0YUAzYTAwIHsKQEAgLTIyMywxMSArMjM3LDE5IEBACiAJCX07CiAKIAkJaTJjQDNkNDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDNkNDAgNDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEwIDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKKworCQkJcnRjQDY4IHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJydGMiOworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CisJCQkJcmVnID0gPDY4PjsKKwkJCX07CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKQEAgLTI0MCw3ICsyNjIsOCBAQAogCQljb21wYXRpYmxlID0gImZzbCxscGIiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJhbmdlcyA9IDwxIDAgNTAwMDAwMDAgMDAwMTAwMDAKKwkJcmFuZ2VzID0gPDAgMCBmZjAwMDAwMCAwMTAwMDAwMAorCQkJICAxIDAgNTAwMDAwMDAgMDAwMTAwMDAKIAkJCSAgMiAwIDUwMDEwMDAwIDAwMDEwMDAwCiAJCQkgIDMgMCA1MDAyMDAwMCAwMDAxMDAwMD47CiAKQEAgLTI3MSwzMSArMjk0LDE1IEBACiAJCQljb21wYXRpYmxlID0gInByb21lc3MscHJvX21vZHVsZV9kaW8iOwogCQkJcmVnID0gPDMgODAwIDI+OwogCQl9OwotCX07CiAKLQlwY2lAZjAwMDBkMDAgewotCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwyPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCWRldmljZV90eXBlID0gInBjaSI7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBjaSIsImZzbCxtcGM1MjAwLXBjaSI7Ci0JCXJlZyA9IDxmMDAwMGQwMCAxMDA+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47Ci0JCWludGVycnVwdC1tYXAgPSA8YzAwMCAwIDAgMSAmbXBjNTIwMF9waWMgMCAwIDMgLy8gMXN0IHNsb3QKLQkJCQkgYzAwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAxIDMKLQkJCQkgYzAwMCAwIDAgMyAmbXBjNTIwMF9waWMgMSAyIDMKLQkJCQkgYzAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMSAzIDMKLQotCQkJCSBjODAwIDAgMCAxICZtcGM1MjAwX3BpYyAxIDEgMyAvLyAybmQgc2xvdAotCQkJCSBjODAwIDAgMCAyICZtcGM1MjAwX3BpYyAxIDIgMwotCQkJCSBjODAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDMgMwotCQkJCSBjODAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgotCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgYSAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwotCQlidXMtcmFuZ2UgPSA8MCAwPjsKLQkJcmFuZ2VzID0gPDQyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAotCQkJICAwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMTAwMDAwMDAKLQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBiMDAwMDAwMCAwIDAxMDAwMDAwPjsKKwkJLy8gMTYtYml0IGZsYXNoIGRldmljZSBhdCBMb2NhbFBsdXMgQnVzIENTMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAwMTAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM3NDQ4aHBjMi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNzQ0OGhwYzIuZHRzCmluZGV4IDhmYjU0MjMuLjQ5MzYzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM3NDQ4aHBjMi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzc0NDhocGMyLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM3NDQ4SFBDMiAoVGFpZ2EpIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqIDIwMDYgUm95IFphbmcgPFJveSBaYW5nIGF0IGZyZWVzY2FsZS5jb20+LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTAsNiArMTAsNyBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisvZHRzLXYxLzsKIAogLyB7CiAJbW9kZWwgPSAibXBjNzQ0OGhwYzIiOwpAQCAtMjMsMTEgKzI0LDExIEBACiAJCQkJCiAJCVBvd2VyUEMsNzQ0OEAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLIGJ5dGVzCi0JCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLIGJ5dGVzCisJCQlyZWcgPSA8MHgwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySyBieXRlcworCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLIGJ5dGVzCiAJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIDMzIE1IeiwgZnJvbSB1Ym9vdAogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSBVLUJvb3QKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIFUtQm9vdApAQCAtMzYsNyArMzcsNyBAQAogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAwMDAwMDAwIDIwMDAwMDAwCS8vIEREUjIgICA1MTJNIGF0IDAKKwkJcmVnID0gPDB4MCAweDIwMDAwMDAwCS8vIEREUjIgICA1MTJNIGF0IDAKIAkJICAgICAgID47CiAJfTsKIApAQCAtNDQsMTQgKzQ1LDE0IEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJZGV2aWNlX3R5cGUgPSAidHNpLWJyaWRnZSI7Ci0JCXJhbmdlcyA9IDwwMDAwMDAwMCBjMDAwMDAwMCAwMDAxMDAwMD47Ci0JCXJlZyA9IDxjMDAwMDAwMCAwMDAxMDAwMD47CisJCXJhbmdlcyA9IDwweDAgMHhjMDAwMDAwMCAweDEwMDAwPjsKKwkJcmVnID0gPDB4YzAwMDAwMDAgMHgxMDAwMD47CiAJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAKIAkJaTJjQDcwMDAgewogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPEUgMD47Ci0JCQlyZWcgPSA8NzAwMCA0MDA+OworCQkJaW50ZXJydXB0cyA9IDwxNCAwPjsKKwkJCXJlZyA9IDwweDcwMDAgMHg0MDA+OwogCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCWNvbXBhdGlibGUgID0gInRzaTEwOC1pMmMiOwogCQl9OwpAQCAtNTksMjAgKzYwLDIwIEBACiAJCU1ESU86IG1kaW9ANjAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKIAkJCWNvbXBhdGlibGUgPSAidHNpMTA4LW1kaW8iOwotCQkJcmVnID0gPDYwMDAgNTA+OworCQkJcmVnID0gPDB4NjAwMCAweDUwPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAKIAkJCXBoeTg6IGV0aGVybmV0LXBoeUA4IHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIgMT47Ci0JCQkJcmVnID0gPDg+OworCQkJCXJlZyA9IDwweDg+OwogCQkJfTsKIAogCQkJcGh5OTogZXRoZXJuZXQtcGh5QDkgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MiAxPjsKLQkJCQlyZWcgPSA8OT47CisJCQkJcmVnID0gPDB4OT47CiAJCQl9OwogCiAJCX07CkBAIC04Miw5ICs4Myw5IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJ0c2kxMDgtZXRoZXJuZXQiOwotCQkJcmVnID0gPDYwMDAgMjAwPjsKKwkJCXJlZyA9IDwweDYwMDAgMHgyMDA+OwogCQkJYWRkcmVzcyA9IFsgMDAgMDYgRDIgMDAgMDAgMDEgXTsKLQkJCWludGVycnVwdHMgPSA8MTAgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQltZGlvLWhhbmRsZSA9IDwmTURJTz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHk4PjsKQEAgLTk2LDkgKzk3LDkgQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInRzaTEwOC1ldGhlcm5ldCI7Ci0JCQlyZWcgPSA8NjQwMCAyMDA+OworCQkJcmVnID0gPDB4NjQwMCAweDIwMD47CiAJCQlhZGRyZXNzID0gWyAwMCAwNiBEMiAwMCAwMCAwMiBdOwotCQkJaW50ZXJydXB0cyA9IDwxMSAyPjsKKwkJCWludGVycnVwdHMgPSA8MTcgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCW1kaW8taGFuZGxlID0gPCZNRElPPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTk+OwpAQCAtMTA3LDE4ICsxMDgsMTggQEAKIAkJc2VyaWFsQDc4MDggewogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NzgwOCAyMDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmNmI1YTAwPjsKLQkJCWludGVycnVwdHMgPSA8YyAwPjsKKwkJCXJlZyA9IDwweDc4MDggMHgyMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwNjQwMDAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwxMiAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCXNlcmlhbEA3YzA4IHsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDdjMDggMjAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjZiNWEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPGQgMD47CisJCQlyZWcgPSA8MHg3YzA4IDB4MjAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDY0MDAwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTMgMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIApAQCAtMTI3LDcgKzEyOCw3IEBACiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCXJlZyA9IDw3NDAwIDQwMD47CisJCQlyZWcgPSA8MHg3NDAwIDB4NDAwPjsKIAkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAgICAgICAgICAgICAgICAgICAgICAgIAliaWctZW5kaWFuOwpAQCAtMTM4LDM5ICsxMzksMzkgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQkJcmVnID0gPDEwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwMD47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKLQkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGUwMDAwMDAwIGUwMDAwMDAwIDAgMUEwMDAwMDAJCi0JCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGZhMDAwMDAwIDAgMDAwMTAwMDA+OwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDdmMjgxNTQ+OworCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhlMDAwMDAwMCAweGUwMDAwMDAwIDB4MCAweDFhMDAwMDAwCQorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAgMHhmYTAwMDAwMCAweDAgMHgxMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKLQkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCQkvKiBJRFNFTCAweDExICovCi0JCQkJMDgwMCAwIDAgMSAmUlQwIDI0IDAKLQkJCQkwODAwIDAgMCAyICZSVDAgMjUgMAotCQkJCTA4MDAgMCAwIDMgJlJUMCAyNiAwCi0JCQkJMDgwMCAwIDAgNCAmUlQwIDI3IDAKKwkJCQkweDgwMCAweDAgMHgwIDB4MSAmUlQwIDB4MjQgMHgwCisJCQkJMHg4MDAgMHgwIDB4MCAweDIgJlJUMCAweDI1IDB4MAorCQkJCTB4ODAwIDB4MCAweDAgMHgzICZSVDAgMHgyNiAweDAKKwkJCQkweDgwMCAweDAgMHgwIDB4NCAmUlQwIDB4MjcgMHgwCiAKIAkJCQkvKiBJRFNFTCAweDEyICovCi0JCQkJMTAwMCAwIDAgMSAmUlQwIDI1IDAKLQkJCQkxMDAwIDAgMCAyICZSVDAgMjYgMAotCQkJCTEwMDAgMCAwIDMgJlJUMCAyNyAwCi0JCQkJMTAwMCAwIDAgNCAmUlQwIDI0IDAKKwkJCQkweDEwMDAgMHgwIDB4MCAweDEgJlJUMCAweDI1IDB4MAorCQkJCTB4MTAwMCAweDAgMHgwIDB4MiAmUlQwIDB4MjYgMHgwCisJCQkJMHgxMDAwIDB4MCAweDAgMHgzICZSVDAgMHgyNyAweDAKKwkJCQkweDEwMDAgMHgwIDB4MCAweDQgJlJUMCAweDI0IDB4MAogCiAJCQkJLyogSURTRUwgMHgxMyAqLwotCQkJCTE4MDAgMCAwIDEgJlJUMCAyNiAwCi0JCQkJMTgwMCAwIDAgMiAmUlQwIDI3IDAKLQkJCQkxODAwIDAgMCAzICZSVDAgMjQgMAotCQkJCTE4MDAgMCAwIDQgJlJUMCAyNSAwCisJCQkJMHgxODAwIDB4MCAweDAgMHgxICZSVDAgMHgyNiAweDAKKwkJCQkweDE4MDAgMHgwIDB4MCAweDIgJlJUMCAweDI3IDB4MAorCQkJCTB4MTgwMCAweDAgMHgwIDB4MyAmUlQwIDB4MjQgMHgwCisJCQkJMHgxODAwIDB4MCAweDAgMHg0ICZSVDAgMHgyNSAweDAKIAogCQkJCS8qIElEU0VMIDB4MTQgKi8KLQkJCQkyMDAwIDAgMCAxICZSVDAgMjcgMAotCQkJCTIwMDAgMCAwIDIgJlJUMCAyNCAwCi0JCQkJMjAwMCAwIDAgMyAmUlQwIDI1IDAKLQkJCQkyMDAwIDAgMCA0ICZSVDAgMjYgMAorCQkJCTB4MjAwMCAweDAgMHgwIDB4MSAmUlQwIDB4MjcgMHgwCisJCQkJMHgyMDAwIDB4MCAweDAgMHgyICZSVDAgMHgyNCAweDAKKwkJCQkweDIwMDAgMHgwIDB4MCAweDMgJlJUMCAweDI1IDB4MAorCQkJCTB4MjAwMCAweDAgMHgwIDB4NCAmUlQwIDB4MjYgMHgwCiAJCQkJPjsKIAogCQkJUlQwOiByb3V0ZXJAMTE4MCB7CkBAIC0xODAsNyArMTgxLDcgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJCWJpZy1lbmRpYW47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MjcyYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MjcyYWRzLmR0cwppbmRleCA3Mjg1Y2ExLi40NmUyZGEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODI3MmFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgyNzJhZHMuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE1QQzgyNzIgQURTIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC05LDYgKzksOCBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisvZHRzLXYxLzsKKwogLyB7CiAJbW9kZWwgPSAiTVBDODI3MkFEUyI7CiAJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI3MmFkcyI7CkBAIC0yMSwxMSArMjMsMTEgQEAKIAogCQlQb3dlclBDLDgyNzJAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDA+OwotCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8ZCMzMj47Ci0JCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDxkIzMyPjsKLQkJCWQtY2FjaGUtc2l6ZSA9IDxkIzE2Mzg0PjsKLQkJCWktY2FjaGUtc2l6ZSA9IDxkIzE2Mzg0PjsKKwkJCXJlZyA9IDwweDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDE2Mzg0PjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwxNjM4ND47CiAJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CiAJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwpAQCAtMzQsNyArMzYsNyBAQAogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAgMD47CisJCXJlZyA9IDwweDAgMHgwPjsKIAl9OwogCiAJbG9jYWxidXNAZjAwMTAxMDAgewpAQCAtNDIsMjEgKzQ0LDIxIEBACiAJCSAgICAgICAgICAgICAiZnNsLHBxMi1sb2NhbGJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPGYwMDEwMTAwIDQwPjsKKwkJcmVnID0gPDB4ZjAwMTAxMDAgMHg0MD47CiAKLQkJcmFuZ2VzID0gPDAgMCBmZTAwMDAwMCAwMjAwMDAwMAotCQkgICAgICAgICAgMSAwIGY0NTAwMDAwIDAwMDA4MDAwCi0JCSAgICAgICAgICAzIDAgZjgyMDAwMDAgMDAwMDgwMDA+OworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGZlMDAwMDAwIDB4MjAwMDAwMAorCQkgICAgICAgICAgMHgxIDB4MCAweGY0NTAwMDAwIDB4ODAwMAorCQkgICAgICAgICAgMHgzIDB4MCAweGY4MjAwMDAwIDB4ODAwMD47CiAKIAkJZmxhc2hAMCwwIHsKIAkJCWNvbXBhdGlibGUgPSAiamVkZWMtZmxhc2giOwotCQkJcmVnID0gPDAgMCAyMDAwMDAwPjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MjAwMDAwMD47CiAJCQliYW5rLXdpZHRoID0gPDQ+OwogCQkJZGV2aWNlLXdpZHRoID0gPDE+OwogCQl9OwogCiAJCWJvYXJkLWNvbnRyb2xAMSwwIHsKLQkJCXJlZyA9IDwxIDAgMjA+OworCQkJcmVnID0gPDB4MSAweDAgMHgyMD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjcyYWRzLWJjc3IiOwogCQl9OwogCkBAIC02NSw0NiArNjcsNDYgQEAKIAkJCSAgICAgICAgICAgICAiZnNsLHBxMmFkcy1wY2ktcGljIjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCXJlZyA9IDwzIDAgOD47CisJCQlyZWcgPSA8MHgzIDB4MCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKLQkJCWludGVycnVwdHMgPSA8MTQgOD47CisJCQlpbnRlcnJ1cHRzID0gPDIwIDg+OwogCQl9OwogCX07CiAKIAogCXBjaUBmMDAxMDgwMCB7CiAJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCXJlZyA9IDxmMDAxMDgwMCAxMGMgZjAwMTAxYWMgOCBmMDAxMDFjNCA4PjsKKwkJcmVnID0gPDB4ZjAwMTA4MDAgMHgxMGMgMHhmMDAxMDFhYyAweDggMHhmMDAxMDFjNCAweDg+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjcyLXBjaSIsICJmc2wscHEyLXBjaSI7CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPGQjNjY2NjY2NjY+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkgICAgICAgICAgICAgICAgIC8qIElEU0VMIDB4MTYgKi8KLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCAxICZQQ0lfUElDIDAKLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCAyICZQQ0lfUElDIDEKLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCAzICZQQ0lfUElDIDIKLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCA0ICZQQ0lfUElDIDMKKwkJICAgICAgICAgICAgICAgICAweGIwMDAgMHgwIDB4MCAweDEgJlBDSV9QSUMgMAorCQkgICAgICAgICAgICAgICAgIDB4YjAwMCAweDAgMHgwIDB4MiAmUENJX1BJQyAxCisJCSAgICAgICAgICAgICAgICAgMHhiMDAwIDB4MCAweDAgMHgzICZQQ0lfUElDIDIKKwkJICAgICAgICAgICAgICAgICAweGIwMDAgMHgwIDB4MCAweDQgJlBDSV9QSUMgMwogCiAJCSAgICAgICAgICAgICAgICAgLyogSURTRUwgMHgxNyAqLwotCQkgICAgICAgICAgICAgICAgIGI4MDAgMCAwIDEgJlBDSV9QSUMgNAotCQkgICAgICAgICAgICAgICAgIGI4MDAgMCAwIDIgJlBDSV9QSUMgNQotCQkgICAgICAgICAgICAgICAgIGI4MDAgMCAwIDMgJlBDSV9QSUMgNgotCQkgICAgICAgICAgICAgICAgIGI4MDAgMCAwIDQgJlBDSV9QSUMgNworCQkgICAgICAgICAgICAgICAgIDB4YjgwMCAweDAgMHgwIDB4MSAmUENJX1BJQyA0CisJCSAgICAgICAgICAgICAgICAgMHhiODAwIDB4MCAweDAgMHgyICZQQ0lfUElDIDUKKwkJICAgICAgICAgICAgICAgICAweGI4MDAgMHgwIDB4MCAweDMgJlBDSV9QSUMgNgorCQkgICAgICAgICAgICAgICAgIDB4YjgwMCAweDAgMHgwIDB4NCAmUENJX1BJQyA3CiAKIAkJICAgICAgICAgICAgICAgICAvKiBJRFNFTCAweDE4ICovCi0JCSAgICAgICAgICAgICAgICAgYzAwMCAwIDAgMSAmUENJX1BJQyA4Ci0JCSAgICAgICAgICAgICAgICAgYzAwMCAwIDAgMiAmUENJX1BJQyA5Ci0JCSAgICAgICAgICAgICAgICAgYzAwMCAwIDAgMyAmUENJX1BJQyBhCi0JCSAgICAgICAgICAgICAgICAgYzAwMCAwIDAgNCAmUENJX1BJQyBiPjsKKwkJICAgICAgICAgICAgICAgICAweGMwMDAgMHgwIDB4MCAweDEgJlBDSV9QSUMgOAorCQkgICAgICAgICAgICAgICAgIDB4YzAwMCAweDAgMHgwIDB4MiAmUENJX1BJQyA5CisJCSAgICAgICAgICAgICAgICAgMHhjMDAwIDB4MCAweDAgMHgzICZQQ0lfUElDIDEwCisJCSAgICAgICAgICAgICAgICAgMHhjMDAwIDB4MCAweDAgMHg0ICZQQ0lfUElDIDExPjsKIAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwotCQlpbnRlcnJ1cHRzID0gPDEyIDg+OwotCQlyYW5nZXMgPSA8NDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCi0JCSAgICAgICAgICAwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMjAwMDAwMDAKLQkJICAgICAgICAgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZjYwMDAwMDAgMCAwMjAwMDAwMD47CisJCWludGVycnVwdHMgPSA8MTggOD47CisJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJICAgICAgICAgIDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCSAgICAgICAgICAweDEwMDAwMDAgMHgwIDB4MCAweGY2MDAwMDAwIDB4MCAweDIwMDAwMDA+OwogCX07CiAKIAlzb2NAZjAwMDAwMDAgewpAQCAtMTEyLDI2ICsxMTQsMjYgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNzIiLCAiZnNsLHBxMi1zb2MiOwotCQlyYW5nZXMgPSA8MDAwMDAwMDAgZjAwMDAwMDAgMDAwNTMwMDA+OworCQlyYW5nZXMgPSA8MHgwIDB4ZjAwMDAwMDAgMHg1MzAwMD47CiAKIAkJLy8gVGVtcG9yYXJ5IC0tIHdpbGwgZ28gYXdheSBvbmNlIGtlcm5lbCB1c2VzIHJhbmdlcyBmb3IgZ2V0X2ltbXJiYXNlKCkuCi0JCXJlZyA9IDxmMDAwMDAwMCAwMDA1MzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4NTMwMDA+OwogCiAJCWNwbUAxMTljMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI3Mi1jcG0iLCAiZnNsLGNwbTIiOwotCQkJcmVnID0gPDExOWMwIDMwPjsKKwkJCXJlZyA9IDwweDExOWMwIDB4MzA+OwogCQkJcmFuZ2VzOwogCiAJCQltdXJhbUAwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyYW5nZXMgPSA8MCAwIDEwMDAwPjsKKwkJCQlyYW5nZXMgPSA8MHgwIDB4MCAweDEwMDAwPjsKIAogCQkJCWRhdGFAMCB7CiAJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKLQkJCQkJcmVnID0gPDAgMjAwMCA5ODAwIDgwMD47CisJCQkJCXJlZyA9IDwweDAgMHgyMDAwIDB4OTgwMCAweDgwMD47CiAJCQkJfTsKIAkJCX07CiAKQEAgLTEzOSwyOSArMTQxLDI5IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI3Mi1icmciLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItYnJnIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKLQkJCQlyZWcgPSA8MTE5ZjAgMTAgMTE1ZjAgMTA+OworCQkJCXJlZyA9IDwweDExOWYwIDB4MTAgMHgxMTVmMCAweDEwPjsKIAkJCX07CiAKIAkJCXNlcmlhbEAxMWEwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjcyLXNjYy11YXJ0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLXNjYy11YXJ0IjsKLQkJCQlyZWcgPSA8MTFhMDAgMjAgODAwMCAxMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjggOD47CisJCQkJcmVnID0gPDB4MTFhMDAgMHgyMCAweDgwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8NDAgOD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDwxPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MDA4MDAwMDA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDgwMDAwMD47CiAJCQl9OwogCiAJCQlzZXJpYWxAMTFhNjAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI3Mi1zY2MtdWFydCIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1zY2MtdWFydCI7Ci0JCQkJcmVnID0gPDExYTYwIDIwIDgzMDAgMTAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDJiIDg+OworCQkJCXJlZyA9IDwweDExYTYwIDB4MjAgMHg4MzAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQzIDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CiAJCQkJZnNsLGNwbS1icmcgPSA8ND47Ci0JCQkJZnNsLGNwbS1jb21tYW5kID0gPDBjZTAwMDAwPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHhjZTAwMDAwPjsKIAkJCX07CiAKIAkJCW1kaW9AMTBkNDAgewpAQCAtMTY5LDIzICsxNzEsMjMgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjcyYWRzLW1kaW8tYml0YmFuZyIsCiAJCQkJICAgICAgICAgICAgICJmc2wsbXBjODI3Mi1tZGlvLWJpdGJhbmciLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItbWRpby1iaXRiYW5nIjsKLQkJCQlyZWcgPSA8MTBkNDAgMTQ+OworCQkJCXJlZyA9IDwweDEwZDQwIDB4MTQ+OwogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWZzbCxtZGlvLXBpbiA9IDwxMj47Ci0JCQkJZnNsLG1kYy1waW4gPSA8MTM+OworCQkJCWZzbCxtZGlvLXBpbiA9IDwxOD47CisJCQkJZnNsLG1kYy1waW4gPSA8MTk+OwogCiAJCQkJUEhZMDogZXRoZXJuZXQtcGh5QDAgewogCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDg+OwotCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdHMgPSA8MjMgOD47CisJCQkJCXJlZyA9IDwweDA+OwogCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCX07CiAKIAkJCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7CiAJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47Ci0JCQkJCWludGVycnVwdHMgPSA8MTcgOD47Ci0JCQkJCXJlZyA9IDwzPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMyA4PjsKKwkJCQkJcmVnID0gPDB4Mz47CiAJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJfTsKIAkJCX07CkBAIC0xOTQsMzMgKzE5NiwzMyBAQAogCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNzItZmNjLWVuZXQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItZmNjLWVuZXQiOwotCQkJCXJlZyA9IDwxMTMwMCAyMCA4NDAwIDEwMCAxMTM5MCAxPjsKKwkJCQlyZWcgPSA8MHgxMTMwMCAweDIwIDB4ODQwMCAweDEwMCAweDExMzkwIDB4MT47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQkJaW50ZXJydXB0cyA9IDwyMCA4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMyIDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CiAJCQkJcGh5LWhhbmRsZSA9IDwmUEhZMD47CiAJCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwwPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MTIwMDAzMDA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDEyMDAwMzAwPjsKIAkJCX07CiAKIAkJCWV0aGVybmV0QDExMzIwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjcyLWZjYy1lbmV0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLWZjYy1lbmV0IjsKLQkJCQlyZWcgPSA8MTEzMjAgMjAgODUwMCAxMDAgMTEzYjAgMT47CisJCQkJcmVnID0gPDB4MTEzMjAgMHgyMCAweDg1MDAgMHgxMDAgMHgxMTNiMCAweDE+OwogCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJCWludGVycnVwdHMgPSA8MjEgOD47CisJCQkJaW50ZXJydXB0cyA9IDwzMyA4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQkJCXBoeS1oYW5kbGUgPSA8JlBIWTE+OwogCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47Ci0JCQkJZnNsLGNwbS1jb21tYW5kID0gPDE2MjAwMzAwPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHgxNjIwMDMwMD47CiAJCQl9OwogCQl9OwogCiAJCVBJQzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTBjMDAgewogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJcmVnID0gPDEwYzAwIDgwPjsKKwkJCXJlZyA9IDwweDEwYzAwIDB4ODA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI3Mi1waWMiLCAiZnNsLGNwbTItcGljIjsKIAkJfTsKIApAQCAtMjMyLDE0ICsyMzQsMTQgQEAKIAkJCSAgICAgICAgICAgICAiZnNsLHRhbGl0b3Mtc2VjMiIsCiAJCQkgICAgICAgICAgICAgImZzbCx0YWxpdG9zIiwKIAkJCSAgICAgICAgICAgICAidGFsaXRvcyI7Ci0JCQlyZWcgPSA8MzAwMDAgMTAwMDA+OwotCQkJaW50ZXJydXB0cyA9IDxiIDg+OworCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDExIDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJCW51bS1jaGFubmVscyA9IDw0PjsKLQkJCWNoYW5uZWwtZmlmby1sZW4gPSA8MTg+OwotCQkJZXhlYy11bml0cy1tYXNrID0gPDAwMDAwMDdlPjsKKwkJCWNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OworCQkJZXhlYy11bml0cy1tYXNrID0gPDB4N2U+OwogLyogZGVzYyBtYXNrIGlzIGZvciByZXYxLngsIHdlIG5lZWQgcnVudGltZSBmaXh1cCBmb3IgPj0yLnggKi8KLQkJCWRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwwMTAxMGViZj47CisJCQlkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgxMDEwZWJmPjsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cwppbmRleCA5YmI0MDgzLi41MzllMDJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKQEAgLTI1NSw5ICsyNTUsNyBAQAogCQllbmV0MDogdWNjQDIyMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKLQkJCW1vZGVsID0gIlVDQyI7CiAJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJZGV2aWNlLWlkID0gPDM+OwogCQkJcmVnID0gPDB4MjIwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDM0PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OwpAQCAtMjcxLDkgKzI2OSw3IEBACiAJCWVuZXQxOiB1Y2NAMzIwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX2dldGgiOwotCQkJbW9kZWwgPSAiVUNDIjsKIAkJCWNlbGwtaW5kZXggPSA8ND47Ci0JCQlkZXZpY2UtaWQgPSA8ND47CiAJCQlyZWcgPSA8MHgzMjAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8MzU+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcWVpYz47CkBAIC0yODcsOCArMjgzLDcgQEAKIAkJdWNjQDI0MDAgewogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX3VhcnQiOwotCQkJbW9kZWwgPSAiVUNDIjsKLQkJCWRldmljZS1pZCA9IDw1PjsJLyogVGhlIFVDQyBudW1iZXIsIDEtNyovCisJCQljZWxsLWluZGV4ID0gPDU+OwkvKiBUaGUgVUNDIG51bWJlciwgMS03Ki8KIAkJCXBvcnQtbnVtYmVyID0gPDA+OwkvKiBXaGljaCB0dHlRRXggZGV2aWNlICovCiAJCQlzb2Z0LXVhcnQ7CQkvKiBXZSBuZWVkIFNvZnQtVUFSVCAqLwogCQkJcmVnID0gPDB4MjQwMCAweDIwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cwppbmRleCA5NGY5M2QyLi4xNzljODFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMKQEAgLTIwOCw5ICsyMDgsNyBAQAogCQllbmV0MDogdWNjQDMwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKLQkJCW1vZGVsID0gIlVDQyI7CiAJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJZGV2aWNlLWlkID0gPDI+OwogCQkJcmVnID0gPDB4MzAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDMzPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OwpAQCAtMjI0LDkgKzIyMiw3IEBACiAJCWVuZXQxOiB1Y2NAMjIwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX2dldGgiOwotCQkJbW9kZWwgPSAiVUNDIjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQlkZXZpY2UtaWQgPSA8Mz47CiAJCQlyZWcgPSA8MHgyMjAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8MzQ+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcWVpYz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cwppbmRleCA1NWYwM2U4Li44MTYwZmYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKQEAgLTI1Nyw5ICsyNTcsNyBAQAogCQllbmV0MDogdWNjQDIwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKLQkJCW1vZGVsID0gIlVDQyI7CiAJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlLWlkID0gPDE+OwogCQkJcmVnID0gPDB4MjAwMCAweDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDMyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OwpAQCAtMjc0LDkgKzI3Miw3IEBACiAJCWVuZXQxOiB1Y2NAMzAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX2dldGgiOwotCQkJbW9kZWwgPSAiVUNDIjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQlkZXZpY2UtaWQgPSA8Mj47CiAJCQlyZWcgPSA8MHgzMDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8MzM+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcWVpYz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cwppbmRleCBhMzYzN2ZmLi5lYWM4ZTFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKQEAgLTQ3LDYgKzQ3LDcyIEBACiAJCXJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OwkvLyA1MTJNQiBhdCAwCiAJfTsKIAorCWxvY2FsYnVzQGUwMDA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGUwMDA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8NzcgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisKKwkJLy8gYm9vdGluZyBmcm9tIE5PUiBmbGFzaAorCQlyYW5nZXMgPSA8MCAweDAgMHhmZTAwMDAwMCAweDAyMDAwMDAwCisJCSAgICAgICAgICAxIDB4MCAweGY4MDAwMDAwIDB4MDAwMDgwMDAKKwkJICAgICAgICAgIDMgMHgwIDB4ZTA2MDAwMDAgMHgwMDAwODAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAweDAgMHgyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisKKwkJCXUtYm9vdEAwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlmc0AxMDAwMDAgeworCQkJCXJlZyA9IDwweDEwMDAwMCAweDgwMDAwMD47CisJCQl9OworCisJCQlrZXJuZWxAMWQwMDAwMCB7CisJCQkJcmVnID0gPDB4MWQwMDAwMCAweDIwMDAwMD47CisJCQl9OworCisJCQlkdGJAMWYwMDAwMCB7CisJCQkJcmVnID0gPDB4MWYwMDAwMCAweDEwMDAwMD47CisJCQl9OworCQl9OworCisJCWJjc3JAMSwwIHsKKwkJCXJlZyA9IDwxIDB4MCAweDgwMDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3eG1kcy1iY3NyIjsKKwkJfTsKKworCQluYW5kQDMsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1mY20tbmFuZCIsCisJCQkgICAgICAgICAgICAgImZzbCxlbGJjLWZjbS1uYW5kIjsKKwkJCXJlZyA9IDwzIDB4MCAweDgwMDA+OworCisJCQl1LWJvb3RAMCB7CisJCQkJcmVnID0gPDB4MCAweDEwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJa2VybmVsQDEwMDAwMCB7CisJCQkJcmVnID0gPDB4MTAwMDAwIDB4MzAwMDAwPjsKKwkJCX07CisKKwkJCWZzQDQwMDAwMCB7CisJCQkJcmVnID0gPDB4NDAwMDAwIDB4MWMwMDAwMD47CisJCQl9OworCQl9OworCX07CisKIAlzb2NAZTAwMDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC05MSw3ICsxNTcsNiBAQAogCQkJbW9kZSA9ICJjcHUiOwogCQl9OwogCi0JCS8qIHBoeSB0eXBlIChVTFBJLCBVVE1JLCBVVE1JX1dJREUsIFNFUklBTCkgKi8KIAkJdXNiQDIzMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwogCQkJcmVnID0gPDB4MjMwMDAgMHgxMDAwPjsKQEAgLTk5LDcgKzE2NCw4IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwotCQkJcGh5X3R5cGUgPSAidXRtaV93aWRlIjsKKwkJCWRyX21vZGUgPSAiaG9zdCI7CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAogCQltZGlvQDI0NTIwIHsKQEAgLTE4OSwxNCArMjU1LDE0IEBACiAJCX07CiAKIAkJc2F0YUAxODAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXNhdGEiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1zYXRhIiwgImZzbCxwcS1zYXRhIjsKIAkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktc2F0YSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXNhdGEiLCAiZnNsLHBxLXNhdGEiOwogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKaW5kZXggNDQwYWE0ZC4uNWJjMDlhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCkBAIC0xNDMsNyArMTQzLDYgQEAKIAkJCW1vZGUgPSAiY3B1IjsKIAkJfTsKIAotCQkvKiBwaHkgdHlwZSAoVUxQSSwgVVRNSSwgVVRNSV9XSURFLCBTRVJJQUwpICovCiAJCXVzYkAyMzAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKIAkJCXJlZyA9IDwweDIzMDAwIDB4MTAwMD47CkBAIC0xNTEsNyArMTUwLDcgQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47Ci0JCQlwaHlfdHlwZSA9ICJ1dG1pIjsKKwkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCiAJCW1kaW9AMjQ1MjAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKaW5kZXggNTMzZTliMC4uMWQ2ZWEwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCkBAIC00Nyw2ICs0Nyw3MiBAQAogCQlyZWcgPSA8MHgwMDAwMDAwMCAweDIwMDAwMDAwPjsJLy8gNTEyTUIgYXQgMAogCX07CiAKKwlsb2NhbGJ1c0BlMDAwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhlMDAwNTAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDc3IDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCisJCS8vIGJvb3RpbmcgZnJvbSBOT1IgZmxhc2gKKwkJcmFuZ2VzID0gPDAgMHgwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkgICAgICAgICAgMSAweDAgMHhmODAwMDAwMCAweDAwMDA4MDAwCisJCSAgICAgICAgICAzIDB4MCAweGUwNjAwMDAwIDB4MDAwMDgwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMHgwIDB4MjAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCisJCQl1LWJvb3RAMCB7CisJCQkJcmVnID0gPDB4MCAweDEwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJZnNAMTAwMDAwIHsKKwkJCQlyZWcgPSA8MHgxMDAwMDAgMHg4MDAwMDA+OworCQkJfTsKKworCQkJa2VybmVsQDFkMDAwMDAgeworCQkJCXJlZyA9IDwweDFkMDAwMDAgMHgyMDAwMDA+OworCQkJfTsKKworCQkJZHRiQDFmMDAwMDAgeworCQkJCXJlZyA9IDwweDFmMDAwMDAgMHgxMDAwMDA+OworCQkJfTsKKwkJfTsKKworCQliY3NyQDEsMCB7CisJCQlyZWcgPSA8MSAweDAgMHg4MDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzN3htZHMtYmNzciI7CisJCX07CisKKwkJbmFuZEAzLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZmNtLW5hbmQiLAorCQkJICAgICAgICAgICAgICJmc2wsZWxiYy1mY20tbmFuZCI7CisJCQlyZWcgPSA8MyAweDAgMHg4MDAwPjsKKworCQkJdS1ib290QDAgeworCQkJCXJlZyA9IDwweDAgMHgxMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWtlcm5lbEAxMDAwMDAgeworCQkJCXJlZyA9IDwweDEwMDAwMCAweDMwMDAwMD47CisJCQl9OworCisJCQlmc0A0MDAwMDAgeworCQkJCXJlZyA9IDwweDQwMDAwMCAweDFjMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworCiAJc29jQGUwMDAwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtOTEsNyArMTU3LDYgQEAKIAkJCW1vZGUgPSAiY3B1IjsKIAkJfTsKIAotCQkvKiBwaHkgdHlwZSAoVUxQSSwgVVRNSSwgVVRNSV9XSURFLCBTRVJJQUwpICovCiAJCXVzYkAyMzAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKIAkJCXJlZyA9IDwweDIzMDAwIDB4MTAwMD47CkBAIC05OSw3ICsxNjQsOCBAQAogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKLQkJCXBoeV90eXBlID0gInV0bWlfd2lkZSI7CisJCQlkcl9tb2RlID0gImhvc3QiOworCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKIAkJbWRpb0AyNDUyMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwppbmRleCA5MjcxMTUzLi43MTFmOWEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKQEAgLTE0Myw3ICsxNDMsNiBAQAogCQkJbW9kZSA9ICJjcHUiOwogCQl9OwogCi0JCS8qIHBoeSB0eXBlIChVTFBJLCBVVE1JLCBVVE1JX1dJREUsIFNFUklBTCkgKi8KIAkJdXNiQDIzMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwogCQkJcmVnID0gPDB4MjMwMDAgMHgxMDAwPjsKQEAgLTE1MSw3ICsxNTAsNyBAQAogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKLQkJCXBoeV90eXBlID0gInV0bWkiOworCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKIAkJbWRpb0AyNDUyMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cwppbmRleCBjMjcwNjg1Li42Zjc4YTlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKQEAgLTQ3LDYgKzQ3LDcyIEBACiAJCXJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OwkvLyA1MTJNQiBhdCAwCiAJfTsKIAorCWxvY2FsYnVzQGUwMDA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGUwMDA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8NzcgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisKKwkJLy8gYm9vdGluZyBmcm9tIE5PUiBmbGFzaAorCQlyYW5nZXMgPSA8MCAweDAgMHhmZTAwMDAwMCAweDAyMDAwMDAwCisJCSAgICAgICAgICAxIDB4MCAweGY4MDAwMDAwIDB4MDAwMDgwMDAKKwkJICAgICAgICAgIDMgMHgwIDB4ZTA2MDAwMDAgMHgwMDAwODAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAweDAgMHgyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisKKwkJCXUtYm9vdEAwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlmc0AxMDAwMDAgeworCQkJCXJlZyA9IDwweDEwMDAwMCAweDgwMDAwMD47CisJCQl9OworCisJCQlrZXJuZWxAMWQwMDAwMCB7CisJCQkJcmVnID0gPDB4MWQwMDAwMCAweDIwMDAwMD47CisJCQl9OworCisJCQlkdGJAMWYwMDAwMCB7CisJCQkJcmVnID0gPDB4MWYwMDAwMCAweDEwMDAwMD47CisJCQl9OworCQl9OworCisJCWJjc3JAMSwwIHsKKwkJCXJlZyA9IDwxIDB4MCAweDgwMDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3eG1kcy1iY3NyIjsKKwkJfTsKKworCQluYW5kQDMsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1mY20tbmFuZCIsCisJCQkgICAgICAgICAgICAgImZzbCxlbGJjLWZjbS1uYW5kIjsKKwkJCXJlZyA9IDwzIDB4MCAweDgwMDA+OworCisJCQl1LWJvb3RAMCB7CisJCQkJcmVnID0gPDB4MCAweDEwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJa2VybmVsQDEwMDAwMCB7CisJCQkJcmVnID0gPDB4MTAwMDAwIDB4MzAwMDAwPjsKKwkJCX07CisKKwkJCWZzQDQwMDAwMCB7CisJCQkJcmVnID0gPDB4NDAwMDAwIDB4MWMwMDAwMD47CisJCQl9OworCQl9OworCX07CisKIAlzb2NAZTAwMDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC05MSw3ICsxNTcsNiBAQAogCQkJbW9kZSA9ICJjcHUiOwogCQl9OwogCi0JCS8qIHBoeSB0eXBlIChVTFBJLCBVVE1JLCBVVE1JX1dJREUsIFNFUklBTCkgKi8KIAkJdXNiQDIzMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwogCQkJcmVnID0gPDB4MjMwMDAgMHgxMDAwPjsKQEAgLTk5LDcgKzE2NCw4IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwotCQkJcGh5X3R5cGUgPSAidXRtaV93aWRlIjsKKwkJCWRyX21vZGUgPSAiaG9zdCI7CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAogCQltZGlvQDI0NTIwIHsKQEAgLTE4OSwyOCArMjU1LDI4IEBACiAJCX07CiAKIAkJc2F0YUAxODAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXNhdGEiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1zYXRhIiwgImZzbCxwcS1zYXRhIjsKIAkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktc2F0YSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXNhdGEiLCAiZnNsLHBxLXNhdGEiOwogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQl9OwogCiAJCXNhdGFAMWEwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1zYXRhIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktc2F0YSIsICJmc2wscHEtc2F0YSI7CiAJCQlyZWcgPSA8MHgxYTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCX07CiAKIAkJc2F0YUAxYjAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXNhdGEiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1zYXRhIiwgImZzbCxwcS1zYXRhIjsKIAkJCXJlZyA9IDwweDFiMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCmluZGV4IDBkZGEyZmMuLmMxMWNlYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cwpAQCAtMTQzLDcgKzE0Myw2IEBACiAJCQltb2RlID0gImNwdSI7CiAJCX07CiAKLQkJLyogcGh5IHR5cGUgKFVMUEksIFVUTUksIFVUTUlfV0lERSwgU0VSSUFMKSAqLwogCQl1c2JAMjMwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CiAJCQlyZWcgPSA8MHgyMzAwMCAweDEwMDA+OwpAQCAtMTUxLDcgKzE1MCw3IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwotCQkJcGh5X3R5cGUgPSAidXRtaSI7CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAogCQltZGlvQDI0NTIwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cwppbmRleCA5NzUyNDg0Li4xODAzM2VkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE1QQzg1NDAgQURTIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtOSw2ICs5LDcgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorL2R0cy12MS87CiAKIC8gewogCW1vZGVsID0gIk1QQzg1NDBBRFMiOwpAQCAtMzEsMTEgKzMyLDExIEBACiAKIAkJUG93ZXJQQyw4NTQwQDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwwPjsKLQkJCWQtY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWktY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKLQkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXJlZyA9IDwweDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gIDMzIE1IeiwgZnJvbSB1Ym9vdAogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJLy8gMTY2IE1IegogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkvLyA4MjUgTUh6LCBmcm9tIHVib290CkBAIC00NCwzMSArNDUsMzEgQEAKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CS8vIDEyOE0gYXQgMHgwCisJCXJlZyA9IDwweDAgMHg4MDAwMDAwPjsJLy8gMTI4TSBhdCAweDAKIAl9OwogCiAJc29jODU0MEBlMDAwMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJcmFuZ2VzID0gPDAgZTAwMDAwMDAgMDAxMDAwMDA+OwotCQlyZWcgPSA8ZTAwMDAwMDAgMDAxMDAwMDA+OwkvLyBDQ1NSQkFSIDFNCisJCXJhbmdlcyA9IDwweDAgMHhlMDAwMDAwMCAweDEwMDAwMD47CisJCXJlZyA9IDwweGUwMDAwMDAwIDB4MTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQogCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MC1tZW1vcnktY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MjAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxMiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCX07CiAKIAkJbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCw4NTQwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDIwMDAwIDEwMDA+OwotCQkJY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWNhY2hlLXNpemUgPSA8NDAwMDA+OwkvLyBMMiwgMjU2SworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OwkvLyBMMiwgMjU2SwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDEwIDI+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKIAkJfTsKIAogCQlpMmNAMzAwMCB7CkBAIC03Niw4ICs3Nyw4IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDMwMDAgMTAwPjsKLQkJCWludGVycnVwdHMgPSA8MmIgMj47CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwpAQCAtODYsMjQgKzg3LDI0IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwyNDUyMCAyMD47CisJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MD47CisJCQkJcmVnID0gPDB4MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwxPjsKKwkJCQlyZWcgPSA8MHgxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcgMT47Ci0JCQkJcmVnID0gPDM+OworCQkJCXJlZyA9IDwweDM+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQl9OwpAQCAtMTEzLDkgKzExNCw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MWQgMiAxZSAyIDIyIDI+OworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwpAQCAtMTI1LDkgKzEyNiw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNTAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MjMgMiAyNCAyIDI4IDI+OworCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQl9OwpAQCAtMTM3LDkgKzEzOCw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIkZFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDI2MDAwIDEwMDA+OworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwyOSAyPjsKKwkJCWludGVycnVwdHMgPSA8NDEgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQl9OwpAQCAtMTQ4LDkgKzE0OSw5IEBACiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDUwMCAxMDA+OyAJLy8gcmVnIGJhc2UsIHNpemUKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OyAJLy8gcmVnIGJhc2UsIHNpemUKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PwotCQkJaW50ZXJydXB0cyA9IDwyYSAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIApAQCAtMTU4LDkgKzE1OSw5IEBACiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDYwMCAxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQorCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CS8vIHJlZyBiYXNlLCBzaXplCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KLQkJCWludGVycnVwdHMgPSA8MmEgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAJCW1waWM6IHBpY0A0MDAwMCB7CkBAIC0xNjgsNyArMTY5LDcgQEAKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDQwMDAwIDQwMDAwPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwogCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKIAkJCWJpZy1lbmRpYW47CkBAIC0xNzcsOTAgKzE3OCw5MCBAQAogCiAJcGNpMDogcGNpQGUwMDA4MDAwIHsKIAkJY2VsbC1pbmRleCA9IDwwPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJLyogSURTRUwgMHgwMiAqLwotCQkJMTAwMCAwIDAgMSAmbXBpYyAxIDEKLQkJCTEwMDAgMCAwIDIgJm1waWMgMiAxCi0JCQkxMDAwIDAgMCAzICZtcGljIDMgMQotCQkJMTAwMCAwIDAgNCAmbXBpYyA0IDEKKwkJCTB4MTAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDEgMHgxCisJCQkweDEwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgyIDB4MQorCQkJMHgxMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MyAweDEKKwkJCTB4MTAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDQgMHgxCiAKIAkJCS8qIElEU0VMIDB4MDMgKi8KLQkJCTE4MDAgMCAwIDEgJm1waWMgNCAxCi0JCQkxODAwIDAgMCAyICZtcGljIDEgMQotCQkJMTgwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTE4MDAgMCAwIDQgJm1waWMgMyAxCisJCQkweDE4MDAgMHgwIDB4MCAweDEgJm1waWMgMHg0IDB4MQorCQkJMHgxODAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4MTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDE4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCiAJCQkvKiBJRFNFTCAweDA0ICovCi0JCQkyMDAwIDAgMCAxICZtcGljIDMgMQotCQkJMjAwMCAwIDAgMiAmbXBpYyA0IDEKLQkJCTIwMDAgMCAwIDMgJm1waWMgMSAxCi0JCQkyMDAwIDAgMCA0ICZtcGljIDIgMQorCQkJMHgyMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4MjAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDIwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHgyMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKIAogCQkJLyogSURTRUwgMHgwNSAqLwotCQkJMjgwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCTI4MDAgMCAwIDIgJm1waWMgMyAxCi0JCQkyODAwIDAgMCAzICZtcGljIDQgMQotCQkJMjgwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4MjgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDI4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHgyODAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4MjgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MGMgKi8KLQkJCTYwMDAgMCAwIDEgJm1waWMgMSAxCi0JCQk2MDAwIDAgMCAyICZtcGljIDIgMQotCQkJNjAwMCAwIDAgMyAmbXBpYyAzIDEKLQkJCTYwMDAgMCAwIDQgJm1waWMgNCAxCisJCQkweDYwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgxIDB4MQorCQkJMHg2MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCTB4NjAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkweDYwMDAgMHgwIDB4MCAweDQgJm1waWMgMHg0IDB4MQogCiAJCQkvKiBJRFNFTCAweDBkICovCi0JCQk2ODAwIDAgMCAxICZtcGljIDQgMQotCQkJNjgwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCTY4MDAgMCAwIDMgJm1waWMgMiAxCi0JCQk2ODAwIDAgMCA0ICZtcGljIDMgMQorCQkJMHg2ODAwIDB4MCAweDAgMHgxICZtcGljIDB4NCAweDEKKwkJCTB4NjgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDY4MDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHg2ODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAogCQkJLyogSURTRUwgMHgwZSAqLwotCQkJNzAwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTcwMDAgMCAwIDIgJm1waWMgNCAxCi0JCQk3MDAwIDAgMCAzICZtcGljIDEgMQotCQkJNzAwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4NzAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDcwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg3MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4NzAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MGYgKi8KLQkJCTc4MDAgMCAwIDEgJm1waWMgMiAxCi0JCQk3ODAwIDAgMCAyICZtcGljIDMgMQotCQkJNzgwMCAwIDAgMyAmbXBpYyA0IDEKLQkJCTc4MDAgMCAwIDQgJm1waWMgMSAxCisJCQkweDc4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg3ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4NzgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDc4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQogCiAJCQkvKiBJRFNFTCAweDEyICovCi0JCQk5MDAwIDAgMCAxICZtcGljIDEgMQotCQkJOTAwMCAwIDAgMiAmbXBpYyAyIDEKLQkJCTkwMDAgMCAwIDMgJm1waWMgMyAxCi0JCQk5MDAwIDAgMCA0ICZtcGljIDQgMQorCQkJMHg5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MSAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDIgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgzIDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NCAweDEKIAogCQkJLyogSURTRUwgMHgxMyAqLwotCQkJOTgwMCAwIDAgMSAmbXBpYyA0IDEKLQkJCTk4MDAgMCAwIDIgJm1waWMgMSAxCi0JCQk5ODAwIDAgMCAzICZtcGljIDIgMQotCQkJOTgwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCTB4OTgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkweDk4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMHg5ODAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTB4OTgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTQgKi8KLQkJCWEwMDAgMCAwIDEgJm1waWMgMyAxCi0JCQlhMDAwIDAgMCAyICZtcGljIDQgMQotCQkJYTAwMCAwIDAgMyAmbXBpYyAxIDEKLQkJCWEwMDAgMCAwIDQgJm1waWMgMiAxCisJCQkweGEwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHhhMDAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4YTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweGEwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQogCiAJCQkvKiBJRFNFTCAweDE1ICovCi0JCQlhODAwIDAgMCAxICZtcGljIDIgMQotCQkJYTgwMCAwIDAgMiAmbXBpYyAzIDEKLQkJCWE4MDAgMCAwIDMgJm1waWMgNCAxCi0JCQlhODAwIDAgMCA0ICZtcGljIDEgMT47CisJCQkweGE4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MT47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQlpbnRlcnJ1cHRzID0gPDI0IDI+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyMDAwMDAwIDAgMDAxMDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8M2Y5NDBhYT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyMDAwMDAwIDB4MCAweDEwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPGUwMDA4MDAwIDEwMDA+OworCQlyZWcgPSA8MHhlMDAwODAwMCAweDEwMDA+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLXBjaXgiLCAiZnNsLG1wYzg1NDAtcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCmluZGV4IGZhOGQ5YWEuLjY2M2M3YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTVBDODU0MSBDRFMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDYsIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC05LDYgKzksNyBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisvZHRzLXYxLzsKIAogLyB7CiAJbW9kZWwgPSAiTVBDODU0MUNEUyI7CkBAIC0zMSwxMSArMzIsMTEgQEAKIAogCQlQb3dlclBDLDg1NDFAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDA+OwotCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySwotCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySwogCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyAgMzMgTUh6LCBmcm9tIHVib290CiAJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkvLyAxNjYgTUh6CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CS8vIDgyNSBNSHosIGZyb20gdWJvb3QKQEAgLTQ0LDMxICs0NSwzMSBAQAogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAwMDAwMDAwIDA4MDAwMDAwPjsJLy8gMTI4TSBhdCAweDAKKwkJcmVnID0gPDB4MCAweDgwMDAwMDA+OwkvLyAxMjhNIGF0IDB4MAogCX07CiAKIAlzb2M4NTQxQGUwMDAwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCQlyYW5nZXMgPSA8MCBlMDAwMDAwMCAwMDEwMDAwMD47Ci0JCXJlZyA9IDxlMDAwMDAwMCAwMDAwMTAwMD47CS8vIENDU1JCQVIgMU0KKwkJcmFuZ2VzID0gPDB4MCAweGUwMDAwMDAwIDB4MTAwMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDAwMDAgMHgxMDAwPjsJLy8gQ0NTUkJBUiAxTQogCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MS1tZW1vcnktY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MjAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxMiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCX07CiAKIAkJbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCw4NTQxLWwyLWNhY2hlLWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDIwMDAwIDEwMDA+OwotCQkJY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWNhY2hlLXNpemUgPSA8NDAwMDA+OwkvLyBMMiwgMjU2SworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OwkvLyBMMiwgMjU2SwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDEwIDI+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKIAkJfTsKIAogCQlpMmNAMzAwMCB7CkBAIC03Niw4ICs3Nyw4IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDMwMDAgMTAwPjsKLQkJCWludGVycnVwdHMgPSA8MmIgMj47CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwpAQCAtODYsMTggKzg3LDE4IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwyNDUyMCAyMD47CisJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MD47CisJCQkJcmVnID0gPDB4MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwxPjsKKwkJCQlyZWcgPSA8MHgxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJfTsKQEAgLTEwNyw5ICsxMDgsOSBAQAogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MjQwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDFkIDIgMWUgMiAyMiAyPjsKKwkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKQEAgLTExOSw5ICsxMjAsOSBAQAogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MjUwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDIzIDIgMjQgMiAyOCAyPjsKKwkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJfTsKQEAgLTEzMCw5ICsxMzEsOSBAQAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDQ1MDAgMTAwPjsgCS8vIHJlZyBiYXNlLCBzaXplCisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsgCS8vIHJlZyBiYXNlLCBzaXplCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KLQkJCWludGVycnVwdHMgPSA8MmEgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKQEAgLTE0MCw5ICsxNDEsOSBAQAogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDQ2MDAgMTAwPjsJLy8gcmVnIGJhc2UsIHNpemUKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/Ci0JCQlpbnRlcnJ1cHRzID0gPDJhIDI+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCkBAIC0xNTEsNyArMTUyLDcgQEAKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDQwMDAwIDQwMDAwPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwogCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJpZy1lbmRpYW47CkBAIC0xNjEsMTcgKzE2MiwxNyBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDEtY3BtIiwgImZzbCxjcG0yIjsKLQkJCXJlZyA9IDw5MTljMCAzMD47CisJCQlyZWcgPSA8MHg5MTljMCAweDMwPjsKIAkJCXJhbmdlczsKIAogCQkJbXVyYW1AODAwMDAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJhbmdlcyA9IDwwIDgwMDAwIDEwMDAwPjsKKwkJCQlyYW5nZXMgPSA8MHgwIDB4ODAwMDAgMHgxMDAwMD47CiAKIAkJCQlkYXRhQDAgewogCQkJCQljb21wYXRpYmxlID0gImZzbCxjcG0tbXVyYW0tZGF0YSI7Ci0JCQkJCXJlZyA9IDwwIDIwMDAgOTAwMCAxMDAwPjsKKwkJCQkJcmVnID0gPDB4MCAweDIwMDAgMHg5MDAwIDB4MTAwMD47CiAJCQkJfTsKIAkJCX07CiAKQEAgLTE3OSwxNiArMTgwLDE2IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MS1icmciLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItYnJnIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKLQkJCQlyZWcgPSA8OTE5ZjAgMTAgOTE1ZjAgMTA+OworCQkJCXJlZyA9IDwweDkxOWYwIDB4MTAgMHg5MTVmMCAweDEwPjsKIAkJCX07CiAKIAkJCWNwbXBpYzogcGljQDkwYzAwIHsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJCWludGVycnVwdHMgPSA8MmUgMj47CisJCQkJaW50ZXJydXB0cyA9IDw0NiAyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlyZWcgPSA8OTBjMDAgODA+OworCQkJCXJlZyA9IDwweDkwYzAwIDB4ODA+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDEtY3BtLXBpYyIsICJmc2wsY3BtMi1waWMiOwogCQkJfTsKIAkJfTsKQEAgLTE5Niw2OCArMTk3LDY4IEBACiAKIAlwY2kwOiBwY2lAZTAwMDgwMDAgewogCQljZWxsLWluZGV4ID0gPDA+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MWY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHgxZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCS8qIElEU0VMIDB4MTAgKi8KLQkJCTA4MDAwIDAgMCAxICZtcGljIDAgMQotCQkJMDgwMDAgMCAwIDIgJm1waWMgMSAxCi0JCQkwODAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTA4MDAwIDAgMCA0ICZtcGljIDMgMQorCQkJMHg4MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4ODAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDgwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHg4MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAogCQkJLyogSURTRUwgMHgxMSAqLwotCQkJMDg4MDAgMCAwIDEgJm1waWMgMCAxCi0JCQkwODgwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCTA4ODAwIDAgMCAzICZtcGljIDIgMQotCQkJMDg4MDAgMCAwIDQgJm1waWMgMyAxCisJCQkweDg4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCiAJCQkvKiBJRFNFTCAweDEyIChTbG90IDEpICovCi0JCQkwOTAwMCAwIDAgMSAmbXBpYyAwIDEKLQkJCTA5MDAwIDAgMCAyICZtcGljIDEgMQotCQkJMDkwMDAgMCAwIDMgJm1waWMgMiAxCi0JCQkwOTAwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTMgKFNsb3QgMikgKi8KLQkJCTA5ODAwIDAgMCAxICZtcGljIDEgMQotCQkJMDk4MDAgMCAwIDIgJm1waWMgMiAxCi0JCQkwOTgwMCAwIDAgMyAmbXBpYyAzIDEKLQkJCTA5ODAwIDAgMCA0ICZtcGljIDAgMQorCQkJMHg5ODAwIDB4MCAweDAgMHgxICZtcGljIDB4MSAweDEKKwkJCTB4OTgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDIgMHgxCisJCQkweDk4MDAgMHgwIDB4MCAweDMgJm1waWMgMHgzIDB4MQorCQkJMHg5ODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MCAweDEKIAogCQkJLyogSURTRUwgMHgxNCAoU2xvdCAzKSAqLwotCQkJMGEwMDAgMCAwIDEgJm1waWMgMiAxCi0JCQkwYTAwMCAwIDAgMiAmbXBpYyAzIDEKLQkJCTBhMDAwIDAgMCAzICZtcGljIDAgMQotCQkJMGEwMDAgMCAwIDQgJm1waWMgMSAxCisJCQkweGEwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHhhMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4YTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDAgMHgxCisJCQkweGEwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQogCiAJCQkvKiBJRFNFTCAweDE1IChTbG90IDQpICovCi0JCQkwYTgwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTBhODAwIDAgMCAyICZtcGljIDAgMQotCQkJMGE4MDAgMCAwIDMgJm1waWMgMSAxCi0JCQkwYTgwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgwIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIEJ1cyAxIChUdW5kcmEgQnJpZGdlKSAqLwogCQkJLyogSURTRUwgMHgxMiAoSVNBIGJyaWRnZSkgKi8KLQkJCTE5MDAwIDAgMCAxICZtcGljIDAgMQotCQkJMTkwMDAgMCAwIDIgJm1waWMgMSAxCi0JCQkxOTAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTE5MDAwIDAgMCA0ICZtcGljIDMgMT47CisJCQkweDE5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4MTkwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMHgxOTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDE5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDE+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKKwkJaW50ZXJydXB0cyA9IDwyNCAyPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47Ci0JCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwIDAgMjAwMDAwMDAKLQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMjAwMDAwMCAwIDAwMTAwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmOTQwYWE+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAgMHhlMjAwMDAwMCAweDAgMHgxMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDxlMDAwODAwMCAxMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDgwMDAgMHgxMDAwPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCiAJCWk4MjU5QDE5MDAwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDE5MDAwIDAgMCAwIDE+OworCQkJcmVnID0gPDB4MTkwMDAgMHgwIDB4MCAweDAgMHgxPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCWNvbXBhdGlibGUgPSAiY2hycCxpaWMiOwpAQCAtMjY4LDI0ICsyNjksMjQgQEAKIAogCXBjaTE6IHBjaUBlMDAwOTAwMCB7CiAJCWNlbGwtaW5kZXggPSA8MT47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCS8qIElEU0VMIDB4MTUgKi8KLQkJCWE4MDAgMCAwIDEgJm1waWMgYiAxCi0JCQlhODAwIDAgMCAyICZtcGljIGIgMQotCQkJYTgwMCAwIDAgMyAmbXBpYyBiIDEKLQkJCWE4MDAgMCAwIDQgJm1waWMgYiAxPjsKKwkJCTB4YTgwMCAweDAgMHgwIDB4MSAmbXBpYyAweGIgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDIgJm1waWMgMHhiIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHgzICZtcGljIDB4YiAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4NCAmbXBpYyAweGIgMHgxPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdHMgPSA8MjUgMj47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwotCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBhMDAwMDAwMCBhMDAwMDAwMCAwIDIwMDAwMDAwCi0JCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTMwMDAwMDAgMCAwMDEwMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwIDB4ZTMwMDAwMDAgMHgwIDB4MTAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8ZTAwMDkwMDAgMTAwMD47CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MTAwMD47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cwppbmRleCA2ODhhZjlkLi42YTBkOGRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM4NTQ0IERTIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtOSw2ICs5LDcgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorL2R0cy12MS87CiAvIHsKIAltb2RlbCA9ICJNUEM4NTQ0RFMiOwogCWNvbXBhdGlibGUgPSAiTVBDODU0NERTIiwgIk1QQzg1eHhEUyI7CkBAIC0yNywxNyArMjgsMTYgQEAKIAl9OwogCiAJY3B1cyB7Ci0JCSNjcHVzID0gPDE+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAKIAkJUG93ZXJQQyw4NTQ0QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwwPjsKLQkJCWQtY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWktY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKLQkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXJlZyA9IDwweDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CkBAIC00Niw3ICs0Niw3IEBACiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MDAwMDAwMDAgMDAwMDAwMDA+OwkvLyBGaWxsZWQgYnkgVS1Cb290CisJCXJlZyA9IDwweDAgMHgwPjsJLy8gRmlsbGVkIGJ5IFUtQm9vdAogCX07CiAKIAlzb2M4NTQ0QGUwMDAwMDAwIHsKQEAgLTU0LDI0ICs1NCwyNCBAQAogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJZGV2aWNlX3R5cGUgPSAic29jIjsKIAotCQlyYW5nZXMgPSA8MDAwMDAwMDAgZTAwMDAwMDAgMDAxMDAwMDA+OwotCQlyZWcgPSA8ZTAwMDAwMDAgMDAwMDEwMDA+OwkvLyBDQ1NSQkFSIDFNCisJCXJhbmdlcyA9IDwweDAgMHhlMDAwMDAwMCAweDEwMDAwMD47CisJCXJlZyA9IDwweGUwMDAwMDAwIDB4MTAwMD47CS8vIENDU1JCQVIgMU0KIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCiAKIAkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCw4NTQ0LW1lbW9yeS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwyMDAwIDEwMDA+OworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDEyIDI+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKIAkJfTsKIAogCQlsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDQtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MjAwMDAgMTAwMD47Ci0JCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJY2FjaGUtc2l6ZSA9IDw0MDAwMD47CS8vIEwyLCAyNTZLCisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47CS8vIEwyLCAyNTZLCiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTAgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwogCQl9OwogCiAJCWkyY0AzMDAwIHsKQEAgLTc5LDggKzc5LDggQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MzAwMCAxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAJCX07CkBAIC05MCw4ICs5MCw4IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDMxMDAgMTAwPjsKLQkJCWludGVycnVwdHMgPSA8MmIgMj47CisJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwpAQCAtMTAwLDMwICsxMDAsNzEgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDI0NTIwIDIwPjsKKwkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDxhIDE+OwotCQkJCXJlZyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCXJlZyA9IDwweDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8YSAxPjsKLQkJCQlyZWcgPSA8MT47CisJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQlyZWcgPSA8MHgxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJfTsKIAorCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKwogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgewogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDI0MDAwIDEwMDA+OworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwxZCAyIDFlIDIgMjIgMj47CisJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKQEAgLTEzNCw5ICsxNzUsOSBAQAogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MjYwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDFmIDIgMjAgMiAyMSAyPjsKKwkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwpAQCAtMTQ2LDkgKzE4Nyw5IEBACiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDUwMCAxMDA+OworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDJhIDI+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCkBAIC0xNTYsMTUgKzE5NywxNSBAQAogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDQ2MDAgMTAwPjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDwyYSAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiOwotCQkJcmVnID0gPGUwMDAwIDEwMDA+OworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKIAkJCWZzbCxoYXMtcnN0Y3I7CiAJCX07CiAKQEAgLTE3Myw3ICsyMTQsNyBAQAogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8NDAwMDAgNDAwMDA+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CiAJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQkJYmlnLWVuZGlhbjsKQEAgLTE4NCwzMiArMjI1LDMyIEBACiAJCWNlbGwtaW5kZXggPSA8MD47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJLyogSURTRUwgMHgxMSBKMTcgU2xvdCAxICovCi0JCQk4ODAwIDAgMCAxICZtcGljIDIgMQotCQkJODgwMCAwIDAgMiAmbXBpYyAzIDEKLQkJCTg4MDAgMCAwIDMgJm1waWMgNCAxCi0JCQk4ODAwIDAgMCA0ICZtcGljIDEgMQorCQkJMHg4ODAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKIAogCQkJLyogSURTRUwgMHgxMiBKMTYgU2xvdCAyICovCiAKLQkJCTkwMDAgMCAwIDEgJm1waWMgMyAxCi0JCQk5MDAwIDAgMCAyICZtcGljIDQgMQotCQkJOTAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTkwMDAgMCAwIDQgJm1waWMgMSAxPjsKKwkJCTB4OTAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxPjsKIAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKLQkJYnVzLXJhbmdlID0gPDAgZmY+OwotCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBjMDAwMDAwMCBjMDAwMDAwMCAwIDIwMDAwMDAwCi0JCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTEwMDAwMDAgMCAwMDAxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKKwkJaW50ZXJydXB0cyA9IDwyNCAyPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAweGMwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwIDB4ZTEwMDAwMDAgMHgwIDB4MTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDxlMDAwODAwMCAxMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDgwMDAgMHgxMDAwPjsKIAl9OwogCiAJcGNpMTogcGNpZUBlMDAwOTAwMCB7CkBAIC0yMTksMzMgKzI2MCwzMyBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDxlMDAwOTAwMCAxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgZmY+OwotCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCi0JCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTEwMTAwMDAgMCAwMDAxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwxZmNhMDU1PjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwIDB4ZTEwMTAwMDAgMHgwIDB4MTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwxYSAyPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHRzID0gPDI2IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MCAqLwotCQkJMDAwMCAwIDAgMSAmbXBpYyA0IDEKLQkJCTAwMDAgMCAwIDIgJm1waWMgNSAxCi0JCQkwMDAwIDAgMCAzICZtcGljIDYgMQotCQkJMDAwMCAwIDAgNCAmbXBpYyA3IDEKKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHg0IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDUgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4NiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHg3IDB4MQogCQkJPjsKIAkJcGNpZUAwIHsKLQkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMAotCQkJCSAgMDIwMDAwMDAgMCA4MDAwMDAwMAotCQkJCSAgMCAyMDAwMDAwMAorCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAogCi0JCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJICAwIDAwMDEwMDAwPjsKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDA+OwogCQl9OwogCX07CiAKQEAgLTI1NiwzMyArMjk3LDMzIEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPGUwMDBhMDAwIDEwMDA+OwotCQlidXMtcmFuZ2UgPSA8MCBmZj47Ci0JCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMTAwMDAwMDAKLQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMTAyMDAwMCAwIDAwMDEwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDFmY2EwNTU+OworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAgMHhlMTAyMDAwMCAweDAgMHgxMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCWludGVycnVwdHMgPSA8MjUgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJLyogSURTRUwgMHgwICovCi0JCQkwMDAwIDAgMCAxICZtcGljIDAgMQotCQkJMDAwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCTAwMDAgMCAwIDMgJm1waWMgMiAxCi0JCQkwMDAwIDAgMCA0ICZtcGljIDMgMQorCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAJCQk+OwogCQlwY2llQDAgewotCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwCi0JCQkJICAwMjAwMDAwMCAwIGEwMDAwMDAwCi0JCQkJICAwIDEwMDAwMDAwCisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MCAweDEwMDAwMDAwCiAKLQkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAKLQkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAKLQkJCQkgIDAgMDAwMTAwMDA+OworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMD47CiAJCX07CiAJfTsKIApAQCAtMjkzLDcyICszMzQsNzIgQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8ZTAwMGIwMDAgMTAwMD47Ci0JCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYjAwMDAwMDAgYjAwMDAwMDAgMCAwMDEwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGIwMTAwMDAwIDAgMDAxMDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MWZjYTA1NT47CisJCXJlZyA9IDwweGUwMDBiMDAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YjAwMDAwMDAgMHhiMDAwMDAwMCAweDAgMHgxMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAgMHhiMDEwMDAwMCAweDAgMHgxMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwxYiAyPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGZmMDAgMCAwIDE+OworCQlpbnRlcnJ1cHRzID0gPDI3IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHgxPjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8vIElEU0VMIDB4MWMgIFVTQgotCQkJZTAwMCAwIDAgMSAmaTgyNTkgYyAyCi0JCQllMTAwIDAgMCAyICZpODI1OSA5IDIKLQkJCWUyMDAgMCAwIDMgJmk4MjU5IGEgMgotCQkJZTMwMCAwIDAgNCAmaTgyNTkgYiAyCisJCQkweGUwMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4YyAweDIKKwkJCTB4ZTEwMCAweDAgMHgwIDB4MiAmaTgyNTkgMHg5IDB4MgorCQkJMHhlMjAwIDB4MCAweDAgMHgzICZpODI1OSAweGEgMHgyCisJCQkweGUzMDAgMHgwIDB4MCAweDQgJmk4MjU5IDB4YiAweDIKIAogCQkJLy8gSURTRUwgMHgxZCAgQXVkaW8KLQkJCWU4MDAgMCAwIDEgJmk4MjU5IDYgMgorCQkJMHhlODAwIDB4MCAweDAgMHgxICZpODI1OSAweDYgMHgyCiAKIAkJCS8vIElEU0VMIDB4MWUgTGVnYWN5Ci0JCQlmMDAwIDAgMCAxICZpODI1OSA3IDIKLQkJCWYxMDAgMCAwIDEgJmk4MjU5IDcgMgorCQkJMHhmMDAwIDB4MCAweDAgMHgxICZpODI1OSAweDcgMHgyCisJCQkweGYxMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4NyAweDIKIAogCQkJLy8gSURTRUwgMHgxZiBJREUvU0FUQQotCQkJZjgwMCAwIDAgMSAmaTgyNTkgZSAyCi0JCQlmOTAwIDAgMCAxICZpODI1OSA1IDIKKwkJCTB4ZjgwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHhlIDB4MgorCQkJMHhmOTAwIDB4MCAweDAgMHgxICZpODI1OSAweDUgMHgyCiAJCT47CiAKIAkJcGNpZUAwIHsKLQkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBiMDAwMDAwMAotCQkJCSAgMDIwMDAwMDAgMCBiMDAwMDAwMAotCQkJCSAgMCAwMDEwMDAwMAorCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhiMDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweGIwMDAwMDAwCisJCQkJICAweDAgMHgxMDAwMDAKIAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMCAwMDEwMDAwMD47CisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwMD47CiAKIAkJCXVsaTE1NzVAMCB7Ci0JCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGIwMDAwMDAwCi0JCQkJCSAgMDIwMDAwMDAgMCBiMDAwMDAwMAotCQkJCQkgIDAgMDAxMDAwMDAKKwkJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGIwMDAwMDAwCisJCQkJCSAgMHgyMDAwMDAwIDB4MCAweGIwMDAwMDAwCisJCQkJCSAgMHgwIDB4MTAwMDAwCiAKLQkJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCQkgIDAgMDAxMDAwMDA+OworCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkJICAweDAgMHgxMDAwMDA+OwogCQkJCWlzYUAxZSB7CiAJCQkJCWRldmljZV90eXBlID0gImlzYSI7CiAJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKLQkJCQkJcmVnID0gPGYwMDAgMCAwIDAgMD47Ci0JCQkJCXJhbmdlcyA9IDwxIDAKLQkJCQkJCSAgMDEwMDAwMDAgMCAwCi0JCQkJCQkgIDAwMDAxMDAwPjsKKwkJCQkJcmVnID0gPDB4ZjAwMCAweDAgMHgwIDB4MCAweDA+OworCQkJCQlyYW5nZXMgPSA8MHgxIDB4MAorCQkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCQkJICAweDEwMDA+OwogCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpODI1OT47CiAKIAkJCQkJaTgyNTk6IGludGVycnVwdC1jb250cm9sbGVyQDIwIHsKLQkJCQkJCXJlZyA9IDwxIDIwIDIKLQkJCQkJCSAgICAgICAxIGEwIDIKLQkJCQkJCSAgICAgICAxIDRkMCAyPjsKKwkJCQkJCXJlZyA9IDwweDEgMHgyMCAweDIKKwkJCQkJCSAgICAgICAweDEgMHhhMCAweDIKKwkJCQkJCSAgICAgICAweDEgMHg0ZDAgMHgyPjsKIAkJCQkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOwogCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CkBAIC0zNzEsMjggKzQxMiwyOCBAQAogCQkJCQlpODA0MkA2MCB7CiAJCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCQkJcmVnID0gPDEgNjAgMSAxIDY0IDE+OwotCQkJCQkJaW50ZXJydXB0cyA9IDwxIDMgYyAzPjsKKwkJCQkJCXJlZyA9IDwweDEgMHg2MCAweDEgMHgxIDB4NjQgMHgxPjsKKwkJCQkJCWludGVycnVwdHMgPSA8MSAzIDEyIDM+OwogCQkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaTgyNTk+OwogCiAJCQkJCQlrZXlib2FyZEAwIHsKLQkJCQkJCQlyZWcgPSA8MD47CisJCQkJCQkJcmVnID0gPDB4MD47CiAJCQkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsMzAzIjsKIAkJCQkJCX07CiAKIAkJCQkJCW1vdXNlQDEgewotCQkJCQkJCXJlZyA9IDwxPjsKKwkJCQkJCQlyZWcgPSA8MHgxPjsKIAkJCQkJCQljb21wYXRpYmxlID0gInBucFBOUCxmMDMiOwogCQkJCQkJfTsKIAkJCQkJfTsKIAogCQkJCQlydGNANzAgewogCQkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsYjAwIjsKLQkJCQkJCXJlZyA9IDwxIDcwIDI+OworCQkJCQkJcmVnID0gPDB4MSAweDcwIDB4Mj47CiAJCQkJCX07CiAKIAkJCQkJZ3Bpb0A0MDAgewotCQkJCQkJcmVnID0gPDEgNDAwIDgwPjsKKwkJCQkJCXJlZyA9IDwweDEgMHg0MDAgMHg4MD47CiAJCQkJCX07CiAJCQkJfTsKIAkJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKaW5kZXggMWY0NzBjNi4uZmEyOThhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM4NTQ4IENEUyBEZXZpY2UgVHJlZSBTb3VyY2UKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNiwgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTksNiArOSw3IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKy9kdHMtdjEvOwogCiAvIHsKIAltb2RlbCA9ICJNUEM4NTQ4Q0RTIjsKQEAgLTM2LDExICszNywxMSBAQAogCiAJCVBvd2VyUEMsODU0OEAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCi0JCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQlyZWcgPSA8MHgwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCiAJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vICAzMyBNSHosIGZyb20gdWJvb3QKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CS8vIDE2NiBNSHoKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJLy8gODI1IE1IeiwgZnJvbSB1Ym9vdApAQCAtNDksMzEgKzUwLDMxIEBACiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MDAwMDAwMDAgMDgwMDAwMDA+OwkvLyAxMjhNIGF0IDB4MAorCQlyZWcgPSA8MHgwIDB4ODAwMDAwMD47CS8vIDEyOE0gYXQgMHgwCiAJfTsKIAogCXNvYzg1NDhAZTAwMDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7Ci0JCXJhbmdlcyA9IDwwMDAwMDAwMCBlMDAwMDAwMCAwMDEwMDAwMD47Ci0JCXJlZyA9IDxlMDAwMDAwMCAwMDAwMTAwMD47CS8vIENDU1JCQVIKKwkJcmFuZ2VzID0gPDB4MCAweGUwMDAwMDAwIDB4MTAwMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDAwMDAgMHgxMDAwPjsJLy8gQ0NTUkJBUgogCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0OC1tZW1vcnktY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MjAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxMiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCX07CiAKIAkJbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCw4NTQ4LWwyLWNhY2hlLWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDIwMDAwIDEwMDA+OwotCQkJY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWNhY2hlLXNpemUgPSA8ODAwMDA+OwkvLyBMMiwgNTEySworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OwkvLyBMMiwgNTEySwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDEwIDI+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKIAkJfTsKIAogCQlpMmNAMzAwMCB7CkBAIC04MSw4ICs4Miw4IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDMwMDAgMTAwPjsKLQkJCWludGVycnVwdHMgPSA8MmIgMj47CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwpAQCAtOTIsOCArOTMsOCBAQAogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwzMTAwIDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDJiIDI+OworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAkJfTsKQEAgLTEwMiwzMCArMTAzLDMwIEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwyNDUyMCAyMD47CisJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MD47CisJCQkJcmVnID0gPDB4MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwxPjsKKwkJCQlyZWcgPSA8MHgxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDI+OworCQkJCXJlZyA9IDwweDI+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8Mz47CisJCQkJcmVnID0gPDB4Mz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCX07CkBAIC0xMzUsOSArMTM2LDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MWQgMiAxZSAyIDIyIDI+OworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwpAQCAtMTQ3LDkgKzE0OCw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MjUwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDIzIDIgMjQgMiAyOCAyPjsKKwkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJfTsKQEAgLTE2MCw5ICsxNjEsOSBAQAogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDI2MDAwIDEwMDA+OworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwxZiAyIDIwIDIgMjEgMj47CisJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CiAJCX07CkBAIC0xNzIsOSArMTczLDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNzAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MjUgMiAyNiAyIDI3IDI+OworCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQl9OwpAQCAtMTg0LDkgKzE4NSw5IEBACiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDUwMCAxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQorCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CS8vIHJlZyBiYXNlLCBzaXplCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PwotCQkJaW50ZXJydXB0cyA9IDwyYSAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIApAQCAtMTk0LDE1ICsxOTUsMTUgQEAKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCXJlZyA9IDw0NjAwIDEwMD47CS8vIHJlZyBiYXNlLCBzaXplCisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsJLy8gcmVnIGJhc2UsIHNpemUKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/Ci0JCQlpbnRlcnJ1cHRzID0gPDJhIDI+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgcmVnCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiOwotCQkJcmVnID0gPGUwMDAwIDEwMDA+OworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKIAkJCWZzbCxoYXMtcnN0Y3I7CiAJCX07CiAKQEAgLTIxMSw3ICsyMTIsNyBAQAogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8NDAwMDAgNDAwMDA+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CiAJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogICAgICAgICAgICAgICAgICAgICAgICAgYmlnLWVuZGlhbjsKQEAgLTIyMCwxMzkgKzIyMSwxMzkgQEAKIAogCXBjaTA6IHBjaUBlMDAwODAwMCB7CiAJCWNlbGwtaW5kZXggPSA8MD47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkvKiBJRFNFTCAweDQgKFBDSVggU2xvdCAyKSAqLwotCQkJMDIwMDAgMCAwIDEgJm1waWMgMCAxCi0JCQkwMjAwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCTAyMDAwIDAgMCAzICZtcGljIDIgMQotCQkJMDIwMDAgMCAwIDQgJm1waWMgMyAxCisJCQkweDIwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHgyMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4MjAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDIwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCiAJCQkvKiBJRFNFTCAweDUgKFBDSVggU2xvdCAzKSAqLwotCQkJMDI4MDAgMCAwIDEgJm1waWMgMSAxCi0JCQkwMjgwMCAwIDAgMiAmbXBpYyAyIDEKLQkJCTAyODAwIDAgMCAzICZtcGljIDMgMQotCQkJMDI4MDAgMCAwIDQgJm1waWMgMCAxCisJCQkweDI4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgxIDB4MQorCQkJMHgyODAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCTB4MjgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkweDI4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgwIDB4MQogCiAJCQkvKiBJRFNFTCAweDYgKFBDSVggU2xvdCA0KSAqLwotCQkJMDMwMDAgMCAwIDEgJm1waWMgMiAxCi0JCQkwMzAwMCAwIDAgMiAmbXBpYyAzIDEKLQkJCTAzMDAwIDAgMCAzICZtcGljIDAgMQotCQkJMDMwMDAgMCAwIDQgJm1waWMgMSAxCisJCQkweDMwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHgzMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4MzAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDAgMHgxCisJCQkweDMwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQogCiAJCQkvKiBJRFNFTCAweDggKFBDSVggU2xvdCA1KSAqLwotCQkJMDQwMDAgMCAwIDEgJm1waWMgMCAxCi0JCQkwNDAwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCTA0MDAwIDAgMCAzICZtcGljIDIgMQotCQkJMDQwMDAgMCAwIDQgJm1waWMgMyAxCisJCQkweDQwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHg0MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4NDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDQwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCiAJCQkvKiBJRFNFTCAweEMgKFRzaTMxMCBicmlkZ2UpICovCi0JCQkwNjAwMCAwIDAgMSAmbXBpYyAwIDEKLQkJCTA2MDAwIDAgMCAyICZtcGljIDEgMQotCQkJMDYwMDAgMCAwIDMgJm1waWMgMiAxCi0JCQkwNjAwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCTB4NjAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkweDYwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMHg2MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTB4NjAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTQgKFNsb3QgMikgKi8KLQkJCTBhMDAwIDAgMCAxICZtcGljIDAgMQotCQkJMGEwMDAgMCAwIDIgJm1waWMgMSAxCi0JCQkwYTAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTBhMDAwIDAgMCA0ICZtcGljIDMgMQorCQkJMHhhMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4YTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweGEwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHhhMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAogCQkJLyogSURTRUwgMHgxNSAoU2xvdCAzKSAqLwotCQkJMGE4MDAgMCAwIDEgJm1waWMgMSAxCi0JCQkwYTgwMCAwIDAgMiAmbXBpYyAyIDEKLQkJCTBhODAwIDAgMCAzICZtcGljIDMgMQotCQkJMGE4MDAgMCAwIDQgJm1waWMgMCAxCisJCQkweGE4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgxIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgwIDB4MQogCiAJCQkvKiBJRFNFTCAweDE2IChTbG90IDQpICovCi0JCQkwYjAwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCTBiMDAwIDAgMCAyICZtcGljIDMgMQotCQkJMGIwMDAgMCAwIDMgJm1waWMgMCAxCi0JCQkwYjAwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4YjAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweGIwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHhiMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MCAweDEKKwkJCTB4YjAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTggKFNsb3QgNSkgKi8KLQkJCTBjMDAwIDAgMCAxICZtcGljIDAgMQotCQkJMGMwMDAgMCAwIDIgJm1waWMgMSAxCi0JCQkwYzAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTBjMDAwIDAgMCA0ICZtcGljIDMgMQorCQkJMHhjMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4YzAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweGMwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHhjMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAogCQkJLyogSURTRUwgMHgxQyAoVHNpMzEwIGJyaWRnZSBQQ0kgcHJpbWFyeSkgKi8KLQkJCTBFMDAwIDAgMCAxICZtcGljIDAgMQotCQkJMEUwMDAgMCAwIDIgJm1waWMgMSAxCi0JCQkwRTAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTBFMDAwIDAgMCA0ICZtcGljIDMgMT47CisJCQkweGUwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHhlMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4ZTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweGUwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MT47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTggMj47CisJCWludGVycnVwdHMgPSA8MjQgMj47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwotCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDEwMDAwMDAwCi0JCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTIwMDAwMDAgMCAwMDgwMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwIDB4ZTIwMDAwMDAgMHgwIDB4ODAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8ZTAwMDgwMDAgMTAwMD47CisJCXJlZyA9IDwweGUwMDA4MDAwIDB4MTAwMD47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtcGNpeCIsICJmc2wsbXBjODU0MC1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCiAJCXBjaV9icmlkZ2VAMWMgewotCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCiAJCQkJLyogSURTRUwgMHgwMCAoUHJQTUMgU2l0ZSkgKi8KLQkJCQkwMDAwIDAgMCAxICZtcGljIDAgMQotCQkJCTAwMDAgMCAwIDIgJm1waWMgMSAxCi0JCQkJMDAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCQkwMDAwIDAgMCA0ICZtcGljIDMgMQorCQkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCiAJCQkJLyogSURTRUwgMHgwNCAoVklBIGNoaXApICovCi0JCQkJMjAwMCAwIDAgMSAmbXBpYyAwIDEKLQkJCQkyMDAwIDAgMCAyICZtcGljIDEgMQotCQkJCTIwMDAgMCAwIDMgJm1waWMgMiAxCi0JCQkJMjAwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCQkweDIwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJCTB4MjAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkJMHgyMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCQkweDIwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCiAJCQkJLyogSURTRUwgMHgwNSAoODEzOSkgKi8KLQkJCQkyODAwIDAgMCAxICZtcGljIDEgMQorCQkJCTB4MjgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDEgMHgxCiAKIAkJCQkvKiBJRFNFTCAweDA2IChTbG90IDYpICovCi0JCQkJMzAwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCQkzMDAwIDAgMCAyICZtcGljIDMgMQotCQkJCTMwMDAgMCAwIDMgJm1waWMgMCAxCi0JCQkJMzAwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCQkweDMwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJCTB4MzAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkJMHgzMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MCAweDEKKwkJCQkweDMwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQogCiAJCQkJLyogSURFU0wgMHgwNyAoU2xvdCA3KSAqLwotCQkJCTM4MDAgMCAwIDEgJm1waWMgMyAxCi0JCQkJMzgwMCAwIDAgMiAmbXBpYyAwIDEKLQkJCQkzODAwIDAgMCAzICZtcGljIDEgMQotCQkJCTM4MDAgMCAwIDQgJm1waWMgMiAxPjsKKwkJCQkweDM4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJCTB4MzgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDAgMHgxCisJCQkJMHgzODAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCQkweDM4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MT47CiAKLQkJCXJlZyA9IDxlMDAwIDAgMCAwIDA+OworCQkJcmVnID0gPDB4ZTAwMCAweDAgMHgwIDB4MCAweDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMAotCQkJCSAgMDIwMDAwMDAgMCA4MDAwMDAwMAotCQkJCSAgMCAyMDAwMDAwMAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMCAwMDA4MDAwMD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MWZjYTA1NT47CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDgwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAKIAkJCWlzYUA0IHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOwogCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCQkJcmVnID0gPDIwMDAgMCAwIDAgMD47Ci0JCQkJcmFuZ2VzID0gPDEgMCAwMTAwMDAwMCAwIDAgMDAwMDEwMDA+OworCQkJCXJlZyA9IDwweDIwMDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCQlyYW5nZXMgPSA8MHgxIDB4MCAweDEwMDAwMDAgMHgwIDB4MCAweDEwMDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jmk4MjU5PjsKIAogCQkJCWk4MjU5OiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMCB7CiAJCQkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7Ci0JCQkJCXJlZyA9IDwxIDIwIDIKLQkJCQkJICAgICAgIDEgYTAgMgotCQkJCQkgICAgICAgMSA0ZDAgMj47CisJCQkJCXJlZyA9IDwweDEgMHgyMCAweDIKKwkJCQkJICAgICAgIDB4MSAweGEwIDB4MgorCQkJCQkgICAgICAgMHgxIDB4NGQwIDB4Mj47CiAJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJCQljb21wYXRpYmxlID0gImNocnAsaWljIjsKQEAgLTM2Miw3ICszNjMsNyBAQAogCiAJCQkJcnRjQDcwIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsYjAwIjsKLQkJCQkJcmVnID0gPDEgNzAgMj47CisJCQkJCXJlZyA9IDwweDEgMHg3MCAweDI+OwogCQkJCX07CiAJCQl9OwogCQl9OwpAQCAtMzcwLDY0ICszNzEsNjQgQEAKIAogCXBjaTE6IHBjaUBlMDAwOTAwMCB7CiAJCWNlbGwtaW5kZXggPSA8MT47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCS8qIElEU0VMIDB4MTUgKi8KLQkJCWE4MDAgMCAwIDEgJm1waWMgYiAxCi0JCQlhODAwIDAgMCAyICZtcGljIDEgMQotCQkJYTgwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCWE4MDAgMCAwIDQgJm1waWMgMyAxPjsKKwkJCTB4YTgwMCAweDAgMHgwIDB4MSAmbXBpYyAweGIgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxPjsKIAogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0cyA9IDwyNSAyPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47Ci0JCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDkwMDAwMDAwIDkwMDAwMDAwIDAgMTAwMDAwMDAKLQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMjgwMDAwMCAwIDAwODAwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmOTQwYWE+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAgMHhlMjgwMDAwMCAweDAgMHg4MDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDxlMDAwOTAwMCAxMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgxMDAwPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CiAKIAlwY2kyOiBwY2llQGUwMDBhMDAwIHsKIAkJY2VsbC1pbmRleCA9IDwyPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJLyogSURTRUwgMHgwIChQRVgpICovCi0JCQkwMDAwMCAwIDAgMSAmbXBpYyAwIDEKLQkJCTAwMDAwIDAgMCAyICZtcGljIDEgMQotCQkJMDAwMDAgMCAwIDMgJm1waWMgMiAxCi0JCQkwMDAwMCAwIDAgNCAmbXBpYyAzIDE+OworCQkJMDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMDAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMDAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MT47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MWEgMj47Ci0JCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAyMDAwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUzMDAwMDAwIDAgMDgwMDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MWZjYTA1NT47CisJCWludGVycnVwdHMgPSA8MjYgMj47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUzMDAwMDAwIDB4MCAweDgwMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDxlMDAwYTAwMCAxMDAwPjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgxMDAwPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJcGNpZUAwIHsKLQkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBhMDAwMDAwMAotCQkJCSAgMDIwMDAwMDAgMCBhMDAwMDAwMAotCQkJCSAgMCAyMDAwMDAwMAorCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAogCi0JCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJICAwIDA4MDAwMDAwPjsKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4ODAwMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKaW5kZXggNDUzOGYzYy4uYjAyNWM1NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM4NTU1IENEUyBEZXZpY2UgVHJlZSBTb3VyY2UKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNiwgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTksNiArOSw3IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKy9kdHMtdjEvOwogCiAvIHsKIAltb2RlbCA9ICJNUEM4NTU1Q0RTIjsKQEAgLTMxLDExICszMiwxMSBAQAogCiAJCVBvd2VyUEMsODU1NUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCi0JCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQlyZWcgPSA8MHgwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCiAJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vICAzMyBNSHosIGZyb20gdWJvb3QKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CS8vIDE2NiBNSHoKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJLy8gODI1IE1IeiwgZnJvbSB1Ym9vdApAQCAtNDQsMzEgKzQ1LDMxIEBACiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MDAwMDAwMDAgMDgwMDAwMDA+OwkvLyAxMjhNIGF0IDB4MAorCQlyZWcgPSA8MHgwIDB4ODAwMDAwMD47CS8vIDEyOE0gYXQgMHgwCiAJfTsKIAogCXNvYzg1NTVAZTAwMDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7Ci0JCXJhbmdlcyA9IDwwIGUwMDAwMDAwIDAwMTAwMDAwPjsKLQkJcmVnID0gPGUwMDAwMDAwIDAwMDAxMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlyYW5nZXMgPSA8MHgwIDB4ZTAwMDAwMDAgMHgxMDAwMDA+OworCQlyZWcgPSA8MHhlMDAwMDAwMCAweDEwMDA+OwkvLyBDQ1NSQkFSIDFNCiAJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAKIAkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCw4NTU1LW1lbW9yeS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwyMDAwIDEwMDA+OworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDEyIDI+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKIAkJfTsKIAogCQlsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NTUtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MjAwMDAgMTAwMD47Ci0JCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJY2FjaGUtc2l6ZSA9IDw0MDAwMD47CS8vIEwyLCAyNTZLCisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47CS8vIEwyLCAyNTZLCiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTAgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwogCQl9OwogCiAJCWkyY0AzMDAwIHsKQEAgLTc2LDggKzc3LDggQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MzAwMCAxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAJCX07CkBAIC04NiwxOCArODcsMTggQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDI0NTIwIDIwPjsKKwkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwwPjsKKwkJCQlyZWcgPSA8MHgwPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDE+OworCQkJCXJlZyA9IDwweDE+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQl9OwpAQCAtMTA3LDkgKzEwOCw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MWQgMiAxZSAyIDIyIDI+OworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwpAQCAtMTE5LDkgKzEyMCw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNTAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MjMgMiAyNCAyIDI4IDI+OworCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQl9OwpAQCAtMTMwLDkgKzEzMSw5IEBACiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDUwMCAxMDA+OyAJLy8gcmVnIGJhc2UsIHNpemUKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OyAJLy8gcmVnIGJhc2UsIHNpemUKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PwotCQkJaW50ZXJydXB0cyA9IDwyYSAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIApAQCAtMTQwLDkgKzE0MSw5IEBACiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDYwMCAxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQorCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CS8vIHJlZyBiYXNlLCBzaXplCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KLQkJCWludGVycnVwdHMgPSA8MmEgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKQEAgLTE1MSw3ICsxNTIsNyBAQAogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8NDAwMDAgNDAwMDA+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CiAJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogICAgICAgICAgICAgICAgICAgICAgICAgYmlnLWVuZGlhbjsKQEAgLTE2MSwxNyArMTYyLDE3IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU1NS1jcG0iLCAiZnNsLGNwbTIiOwotCQkJcmVnID0gPDkxOWMwIDMwPjsKKwkJCXJlZyA9IDwweDkxOWMwIDB4MzA+OwogCQkJcmFuZ2VzOwogCiAJCQltdXJhbUA4MDAwMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQkJcmFuZ2VzID0gPDAgODAwMDAgMTAwMDA+OworCQkJCXJhbmdlcyA9IDwweDAgMHg4MDAwMCAweDEwMDAwPjsKIAogCQkJCWRhdGFAMCB7CiAJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKLQkJCQkJcmVnID0gPDAgMjAwMCA5MDAwIDEwMDA+OworCQkJCQlyZWcgPSA8MHgwIDB4MjAwMCAweDkwMDAgMHgxMDAwPjsKIAkJCQl9OwogCQkJfTsKIApAQCAtMTc5LDE2ICsxODAsMTYgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTU1LWJyZyIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1icmciLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbS1icmciOwotCQkJCXJlZyA9IDw5MTlmMCAxMCA5MTVmMCAxMD47CisJCQkJcmVnID0gPDB4OTE5ZjAgMHgxMCAweDkxNWYwIDB4MTA+OwogCQkJfTsKIAogCQkJY3BtcGljOiBwaWNAOTBjMDAgewogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJaW50ZXJydXB0cyA9IDwyZSAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQ2IDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCXJlZyA9IDw5MGMwMCA4MD47CisJCQkJcmVnID0gPDB4OTBjMDAgMHg4MD47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU1NS1jcG0tcGljIiwgImZzbCxjcG0yLXBpYyI7CiAJCQl9OwogCQl9OwpAQCAtMTk2LDY4ICsxOTcsNjggQEAKIAogCXBjaTA6IHBjaUBlMDAwODAwMCB7CiAJCWNlbGwtaW5kZXggPSA8MD47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDwxZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweDFmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJLyogSURTRUwgMHgxMCAqLwotCQkJMDgwMDAgMCAwIDEgJm1waWMgMCAxCi0JCQkwODAwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCTA4MDAwIDAgMCAzICZtcGljIDIgMQotCQkJMDgwMDAgMCAwIDQgJm1waWMgMyAxCisJCQkweDgwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHg4MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4ODAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDgwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQogCiAJCQkvKiBJRFNFTCAweDExICovCi0JCQkwODgwMCAwIDAgMSAmbXBpYyAwIDEKLQkJCTA4ODAwIDAgMCAyICZtcGljIDEgMQotCQkJMDg4MDAgMCAwIDMgJm1waWMgMiAxCi0JCQkwODgwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgKFNsb3QgMSkgKi8KLQkJCTA5MDAwIDAgMCAxICZtcGljIDAgMQotCQkJMDkwMDAgMCAwIDIgJm1waWMgMSAxCi0JCQkwOTAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTA5MDAwIDAgMCA0ICZtcGljIDMgMQorCQkJMHg5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAogCQkJLyogSURTRUwgMHgxMyAoU2xvdCAyKSAqLwotCQkJMDk4MDAgMCAwIDEgJm1waWMgMSAxCi0JCQkwOTgwMCAwIDAgMiAmbXBpYyAyIDEKLQkJCTA5ODAwIDAgMCAzICZtcGljIDMgMQotCQkJMDk4MDAgMCAwIDQgJm1waWMgMCAxCisJCQkweDk4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgxIDB4MQorCQkJMHg5ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCTB4OTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkweDk4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgwIDB4MQogCiAJCQkvKiBJRFNFTCAweDE0IChTbG90IDMpICovCi0JCQkwYTAwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCTBhMDAwIDAgMCAyICZtcGljIDMgMQotCQkJMGEwMDAgMCAwIDMgJm1waWMgMCAxCi0JCQkwYTAwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4YTAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweGEwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHhhMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MCAweDEKKwkJCTB4YTAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTUgKFNsb3QgNCkgKi8KLQkJCTBhODAwIDAgMCAxICZtcGljIDMgMQotCQkJMGE4MDAgMCAwIDIgJm1waWMgMCAxCi0JCQkwYTgwMCAwIDAgMyAmbXBpYyAxIDEKLQkJCTBhODAwIDAgMCA0ICZtcGljIDIgMQorCQkJMHhhODAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDAgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKIAogCQkJLyogQnVzIDEgKFR1bmRyYSBCcmlkZ2UpICovCiAJCQkvKiBJRFNFTCAweDEyIChJU0EgYnJpZGdlKSAqLwotCQkJMTkwMDAgMCAwIDEgJm1waWMgMCAxCi0JCQkxOTAwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCTE5MDAwIDAgMCAzICZtcGljIDIgMQotCQkJMTkwMDAgMCAwIDQgJm1waWMgMyAxPjsKKwkJCTB4MTkwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHgxOTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDE5MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTB4MTkwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MT47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQlpbnRlcnJ1cHRzID0gPDI0IDI+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyMDAwMDAwIDAgMDAxMDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8M2Y5NDBhYT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyMDAwMDAwIDB4MCAweDEwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPGUwMDA4MDAwIDEwMDA+OworCQlyZWcgPSA8MHhlMDAwODAwMCAweDEwMDA+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAKIAkJaTgyNTlAMTkwMDAgewogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MTkwMDAgMCAwIDAgMT47CisJCQlyZWcgPSA8MHgxOTAwMCAweDAgMHgwIDB4MCAweDE+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJY29tcGF0aWJsZSA9ICJjaHJwLGlpYyI7CkBAIC0yNjgsMjQgKzI2OSwyNCBAQAogCiAJcGNpMTogcGNpQGUwMDA5MDAwIHsKIAkJY2VsbC1pbmRleCA9IDwxPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJLyogSURTRUwgMHgxNSAqLwotCQkJYTgwMCAwIDAgMSAmbXBpYyBiIDEKLQkJCWE4MDAgMCAwIDIgJm1waWMgYiAxCi0JCQlhODAwIDAgMCAzICZtcGljIGIgMQotCQkJYTgwMCAwIDAgNCAmbXBpYyBiIDE+OworCQkJMHhhODAwIDB4MCAweDAgMHgxICZtcGljIDB4YiAweDEKKwkJCTB4YTgwMCAweDAgMHgwIDB4MiAmbXBpYyAweGIgMHgxCisJCQkweGE4MDAgMHgwIDB4MCAweDMgJm1waWMgMHhiIDB4MQorCQkJMHhhODAwIDB4MCAweDAgMHg0ICZtcGljIDB4YiAweDE+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0cyA9IDwyNSAyPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47Ci0JCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMjAwMDAwMDAKLQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMzAwMDAwMCAwIDAwMTAwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmOTQwYWE+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAgMHhlMzAwMDAwMCAweDAgMHgxMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDxlMDAwOTAwMCAxMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgxMDAwPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKaW5kZXggNjM5Y2U4YS4uMGNjMTZhYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM4NTYwIEFEUyBEZXZpY2UgVHJlZSBTb3VyY2UKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNiwgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTksNiArOSw3IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKy9kdHMtdjEvOwogCiAvIHsKIAltb2RlbCA9ICJNUEM4NTYwQURTIjsKQEAgLTMyLDc0ICszMyw3NCBAQAogCiAJCVBvd2VyUEMsODU2MEAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCi0JCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCi0JCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MDRlYWQ5YTA+OwotCQkJYnVzLWZyZXF1ZW5jeSA9IDwxM2FiNjY4MD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MzEyYzgwNDA+OworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDgyNTAwMDAwPjsKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MzMwMDAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw4MjUwMDAwMDA+OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MDAwMDAwMDAgMTAwMDAwMDA+OworCQlyZWcgPSA8MHgwIDB4MTAwMDAwMDA+OwogCX07CiAKIAlzb2M4NTYwQGUwMDAwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCQlyYW5nZXMgPSA8MCBlMDAwMDAwMCAwMDEwMDAwMD47Ci0JCXJlZyA9IDxlMDAwMDAwMCAwMDAwMDIwMD47Ci0JCWJ1cy1mcmVxdWVuY3kgPSA8MTNhYjY2ODA+OworCQlyYW5nZXMgPSA8MHgwIDB4ZTAwMDAwMDAgMHgxMDAwMDA+OworCQlyZWcgPSA8MHhlMDAwMDAwMCAweDIwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MzMwMDAwMDAwPjsKIAogCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDAtbWVtb3J5LWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDIwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTIgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwogCQl9OwogCiAJCWwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MC1sMi1jYWNoZS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwyMDAwMCAxMDAwPjsKLQkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQljYWNoZS1zaXplID0gPDQwMDAwPjsJLy8gTDIsIDI1NksKKwkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDwweDQwMDAwPjsJLy8gTDIsIDI1NksKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxMCAyPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CiAJCX07CiAKIAkJbWRpb0AyNDUyMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwyNDUyMCAyMD47CisJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MD47CisJCQkJcmVnID0gPDB4MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwxPjsKKwkJCQlyZWcgPSA8MHgxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcgMT47Ci0JCQkJcmVnID0gPDI+OworCQkJCXJlZyA9IDwweDI+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NyAxPjsKLQkJCQlyZWcgPSA8Mz47CisJCQkJcmVnID0gPDB4Mz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCX07CkBAIC0xMDksOSArMTEwLDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDI0MDAwIDEwMDA+OworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwxZCAyIDFlIDIgMjIgMj47CisJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CkBAIC0xMjEsOSArMTIyLDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDI1MDAwIDEwMDA+OworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwyMyAyIDI0IDIgMjggMj47CisJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCX07CkBAIC0xMzIsNyArMTMzLDcgQEAKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDQwMDAwIDQwMDAwPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCkBAIC0xNDAsMTcgKzE0MSwxNyBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtY3BtIiwgImZzbCxjcG0yIjsKLQkJCXJlZyA9IDw5MTljMCAzMD47CisJCQlyZWcgPSA8MHg5MTljMCAweDMwPjsKIAkJCXJhbmdlczsKIAogCQkJbXVyYW1AODAwMDAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJhbmdlcyA9IDwwIDgwMDAwIDEwMDAwPjsKKwkJCQlyYW5nZXMgPSA8MHgwIDB4ODAwMDAgMHgxMDAwMD47CiAKIAkJCQlkYXRhQDAgewogCQkJCQljb21wYXRpYmxlID0gImZzbCxjcG0tbXVyYW0tZGF0YSI7Ci0JCQkJCXJlZyA9IDwwIDQwMDAgOTAwMCAyMDAwPjsKKwkJCQkJcmVnID0gPDB4MCAweDQwMDAgMHg5MDAwIDB4MjAwMD47CiAJCQkJfTsKIAkJCX07CiAKQEAgLTE1OCwxNyArMTU5LDE3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2MC1icmciLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItYnJnIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKLQkJCQlyZWcgPSA8OTE5ZjAgMTAgOTE1ZjAgMTA+OwotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDxkIzE2NTAwMDAwMD47CisJCQkJcmVnID0gPDB4OTE5ZjAgMHgxMCAweDkxNWYwIDB4MTA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxNjUwMDAwMDA+OwogCQkJfTsKIAogCQkJY3BtcGljOiBwaWNAOTBjMDAgewogCQkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQkJaW50ZXJydXB0cyA9IDwyZSAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQ2IDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCXJlZyA9IDw5MGMwMCA4MD47CisJCQkJcmVnID0gPDB4OTBjMDAgMHg4MD47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2MC1jcG0tcGljIiwgImZzbCxjcG0yLXBpYyI7CiAJCQl9OwogCkBAIC0xNzYsMTEgKzE3NywxMSBAQAogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2MC1zY2MtdWFydCIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1zY2MtdWFydCI7Ci0JCQkJcmVnID0gPDkxYTAwIDIwIDg4MDAwIDEwMD47CisJCQkJcmVnID0gPDB4OTFhMDAgMHgyMCAweDg4MDAwIDB4MTAwPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDwxPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MDA4MDAwMDA+OwotCQkJCWN1cnJlbnQtc3BlZWQgPSA8MWMyMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjggOD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4ODAwMDAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MCA4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZjcG1waWM+OwogCQkJfTsKIApAQCAtMTg4LDExICsxODksMTEgQEAKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtc2NjLXVhcnQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItc2NjLXVhcnQiOwotCQkJCXJlZyA9IDw5MWEyMCAyMCA4ODEwMCAxMDA+OworCQkJCXJlZyA9IDwweDkxYTIwIDB4MjAgMHg4ODEwMCAweDEwMD47CiAJCQkJZnNsLGNwbS1icmcgPSA8Mj47Ci0JCQkJZnNsLGNwbS1jb21tYW5kID0gPDA0YTAwMDAwPjsKLQkJCQljdXJyZW50LXNwZWVkID0gPDFjMjAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDI5IDg+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDRhMDAwMDA+OworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MTE1MjAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQxIDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwbXBpYz47CiAJCQl9OwogCkBAIC0yMDAsMTAgKzIwMSwxMCBAQAogCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtZmNjLWVuZXQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItZmNjLWVuZXQiOwotCQkJCXJlZyA9IDw5MTMyMCAyMCA4ODUwMCAxMDAgOTEzYjAgMT47CisJCQkJcmVnID0gPDB4OTEzMjAgMHgyMCAweDg4NTAwIDB4MTAwIDB4OTEzYjAgMHgxPjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MTYyMDAzMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjEgOD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4MTYyMDAzMDA+OworCQkJCWludGVycnVwdHMgPSA8MzMgOD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmY3BtcGljPjsKIAkJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKIAkJCX07CkBAIC0yMTIsMTAgKzIxMywxMCBAQAogCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtZmNjLWVuZXQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItZmNjLWVuZXQiOwotCQkJCXJlZyA9IDw5MTM0MCAyMCA4ODYwMCAxMDAgOTEzZDAgMT47CisJCQkJcmVnID0gPDB4OTEzNDAgMHgyMCAweDg4NjAwIDB4MTAwIDB4OTEzZDAgMHgxPjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MWE0MDAzMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjIgOD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4MWE0MDAzMDA+OworCQkJCWludGVycnVwdHMgPSA8MzQgOD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmY3BtcGljPjsKIAkJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKIAkJCX07CkBAIC0yMjksODcgKzIzMCw4NyBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2l4IiwgImZzbCxtcGM4NTQwLXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCXJlZyA9IDxlMDAwODAwMCAxMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmOTQwYWE+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCXJlZyA9IDwweGUwMDA4MDAwIDB4MTAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCiAJCQkJLyogSURTRUwgMHgyICovCi0JCQkJIDEwMDAgMCAwIDEgJm1waWMgMSAxCi0JCQkJIDEwMDAgMCAwIDIgJm1waWMgMiAxCi0JCQkJIDEwMDAgMCAwIDMgJm1waWMgMyAxCi0JCQkJIDEwMDAgMCAwIDQgJm1waWMgNCAxCisJCQkJIDB4MTAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDEgMHgxCisJCQkJIDB4MTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDIgMHgxCisJCQkJIDB4MTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDMgMHgxCisJCQkJIDB4MTAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDQgMHgxCiAKIAkJCQkvKiBJRFNFTCAweDMgKi8KLQkJCQkgMTgwMCAwIDAgMSAmbXBpYyA0IDEKLQkJCQkgMTgwMCAwIDAgMiAmbXBpYyAxIDEKLQkJCQkgMTgwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCQkgMTgwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCQkgMHgxODAwIDB4MCAweDAgMHgxICZtcGljIDB4NCAweDEKKwkJCQkgMHgxODAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCQkgMHgxODAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCQkgMHgxODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAogCQkJCS8qIElEU0VMIDB4NCAqLwotCQkJCSAyMDAwIDAgMCAxICZtcGljIDMgMQotCQkJCSAyMDAwIDAgMCAyICZtcGljIDQgMQotCQkJCSAyMDAwIDAgMCAzICZtcGljIDEgMQotCQkJCSAyMDAwIDAgMCA0ICZtcGljIDIgMQorCQkJCSAweDIwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJCSAweDIwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJCSAweDIwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJCSAweDIwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQogCiAJCQkJLyogSURTRUwgMHg1ICAqLwotCQkJCSAyODAwIDAgMCAxICZtcGljIDIgMQotCQkJCSAyODAwIDAgMCAyICZtcGljIDMgMQotCQkJCSAyODAwIDAgMCAzICZtcGljIDQgMQotCQkJCSAyODAwIDAgMCA0ICZtcGljIDEgMQorCQkJCSAweDI4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJCSAweDI4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJCSAweDI4MDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJCSAweDI4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQogCiAJCQkJLyogSURTRUwgMTIgKi8KLQkJCQkgNjAwMCAwIDAgMSAmbXBpYyAxIDEKLQkJCQkgNjAwMCAwIDAgMiAmbXBpYyAyIDEKLQkJCQkgNjAwMCAwIDAgMyAmbXBpYyAzIDEKLQkJCQkgNjAwMCAwIDAgNCAmbXBpYyA0IDEKKwkJCQkgMHg2MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MSAweDEKKwkJCQkgMHg2MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCQkgMHg2MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MyAweDEKKwkJCQkgMHg2MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NCAweDEKIAogCQkJCS8qIElEU0VMIDEzICovCi0JCQkJIDY4MDAgMCAwIDEgJm1waWMgNCAxCi0JCQkJIDY4MDAgMCAwIDIgJm1waWMgMSAxCi0JCQkJIDY4MDAgMCAwIDMgJm1waWMgMiAxCi0JCQkJIDY4MDAgMCAwIDQgJm1waWMgMyAxCisJCQkJIDB4NjgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkJIDB4NjgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkJIDB4NjgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkJIDB4NjgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAKIAkJCQkvKiBJRFNFTCAxNCovCi0JCQkJIDcwMDAgMCAwIDEgJm1waWMgMyAxCi0JCQkJIDcwMDAgMCAwIDIgJm1waWMgNCAxCi0JCQkJIDcwMDAgMCAwIDMgJm1waWMgMSAxCi0JCQkJIDcwMDAgMCAwIDQgJm1waWMgMiAxCisJCQkJIDB4NzAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkJIDB4NzAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkJIDB4NzAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkJIDB4NzAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCQkvKiBJRFNFTCAxNSAqLwotCQkJCSA3ODAwIDAgMCAxICZtcGljIDIgMQotCQkJCSA3ODAwIDAgMCAyICZtcGljIDMgMQotCQkJCSA3ODAwIDAgMCAzICZtcGljIDQgMQotCQkJCSA3ODAwIDAgMCA0ICZtcGljIDEgMQorCQkJCSAweDc4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJCSAweDc4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJCSAweDc4MDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJCSAweDc4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQogCiAJCQkJLyogSURTRUwgMTggKi8KLQkJCQkgOTAwMCAwIDAgMSAmbXBpYyAxIDEKLQkJCQkgOTAwMCAwIDAgMiAmbXBpYyAyIDEKLQkJCQkgOTAwMCAwIDAgMyAmbXBpYyAzIDEKLQkJCQkgOTAwMCAwIDAgNCAmbXBpYyA0IDEKKwkJCQkgMHg5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MSAweDEKKwkJCQkgMHg5MDAwIDB4MCAweDAgMHgyICZtcGljIDB4MiAweDEKKwkJCQkgMHg5MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MyAweDEKKwkJCQkgMHg5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NCAweDEKIAogCQkJCS8qIElEU0VMIDE5ICovCi0JCQkJIDk4MDAgMCAwIDEgJm1waWMgNCAxCi0JCQkJIDk4MDAgMCAwIDIgJm1waWMgMSAxCi0JCQkJIDk4MDAgMCAwIDMgJm1waWMgMiAxCi0JCQkJIDk4MDAgMCAwIDQgJm1waWMgMyAxCisJCQkJIDB4OTgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkJIDB4OTgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkJIDB4OTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkJIDB4OTgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCiAKIAkJCQkvKiBJRFNFTCAyMCAqLwotCQkJCSBhMDAwIDAgMCAxICZtcGljIDMgMQotCQkJCSBhMDAwIDAgMCAyICZtcGljIDQgMQotCQkJCSBhMDAwIDAgMCAzICZtcGljIDEgMQotCQkJCSBhMDAwIDAgMCA0ICZtcGljIDIgMQorCQkJCSAweGEwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJCSAweGEwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJCSAweGEwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJCSAweGEwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQogCiAJCQkJLyogSURTRUwgMjEgKi8KLQkJCQkgYTgwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCQkgYTgwMCAwIDAgMiAmbXBpYyAzIDEKLQkJCQkgYTgwMCAwIDAgMyAmbXBpYyA0IDEKLQkJCQkgYTgwMCAwIDAgNCAmbXBpYyAxIDE+OworCQkJCSAweGE4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJCSAweGE4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJCSAweGE4MDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJCSAweGE4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MT47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTggMj47CisJCWludGVycnVwdHMgPSA8MjQgMj47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwotCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCi0JCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTIwMDAwMDAgMCAwMTAwMDAwMD47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyMDAwMDAwIDB4MCAweDEwMDAwMDA+OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCmluZGV4IDk3YmMwNDguLmEwMjVhOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTVBDODU2OEUgTURTIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtOSwxMCArOSw3IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLQotLyoKLS9tZW1yZXNlcnZlLwkwMDAwMDAwMCAxMDAwMDAwOwotKi8KKy9kdHMtdjEvOwogCiAvIHsKIAltb2RlbCA9ICJNUEM4NTY4RU1EUyI7CkBAIC0zNywxMSArMzQsMTEgQEAKIAogCQlQb3dlclBDLDg1NjhAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDA+OwotCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySwotCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySwogCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKQEAgLTUwLDM2ICs0NywzNiBAQAogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAwMDAwMDAwIDEwMDAwMDAwPjsKKwkJcmVnID0gPDB4MCAweDEwMDAwMDAwPjsKIAl9OwogCiAJYmNzckBmODAwMDAwMCB7CiAJCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOwotCQlyZWcgPSA8ZjgwMDAwMDAgODAwMD47CisJCXJlZyA9IDwweGY4MDAwMDAwIDB4ODAwMD47CiAJfTsKIAogCXNvYzg1NjhAZTAwMDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7Ci0JCXJhbmdlcyA9IDwwIGUwMDAwMDAwIDAwMTAwMDAwPjsKLQkJcmVnID0gPGUwMDAwMDAwIDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MCAweGUwMDAwMDAwIDB4MTAwMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDAwMDAgMHgxMDAwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAogCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NjgtbWVtb3J5LWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDIwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTIgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwogCQl9OwogCiAJCWwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsODU2OC1sMi1jYWNoZS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwyMDAwMCAxMDAwPjsKLQkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCi0JCQljYWNoZS1zaXplID0gPDgwMDAwPjsJLy8gTDIsIDUxMksKKwkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDwweDgwMDAwPjsJLy8gTDIsIDUxMksKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxMCAyPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CiAJCX07CiAKIAkJaTJjQDMwMDAgewpAQCAtODcsMTQgKzg0LDE0IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDMwMDAgMTAwPjsKLQkJCWludGVycnVwdHMgPSA8MmIgMj47CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7Ci0JCQkJcmVnID0gPDY4PjsKKwkJCQlyZWcgPSA8MHg2OD47CiAJCQl9OwogCQl9OwogCkBAIC0xMDMsOCArMTAwLDggQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MzEwMCAxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAJCX07CkBAIC0xMTMsMzAgKzExMCwzMCBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MjQ1MjAgMjA+OworCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47CiAKIAkJCXBoeTA6IGV0aGVybmV0LXBoeUA3IHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDEgMT47Ci0JCQkJcmVnID0gPDc+OworCQkJCXJlZyA9IDwweDc+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MiAxPjsKLQkJCQlyZWcgPSA8MT47CisJCQkJcmVnID0gPDB4MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwxIDE+OwotCQkJCXJlZyA9IDwyPjsKKwkJCQlyZWcgPSA8MHgyPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIgMT47Ci0JCQkJcmVnID0gPDM+OworCQkJCXJlZyA9IDwweDM+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQl9OwpAQCAtMTQ2LDkgKzE0Myw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MjQwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0gCQkJaW50ZXJydXB0cyA9IDwxZCAyIDFlIDIgMjIgMj47CisgCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQl9OwpAQCAtMTU4LDkgKzE1NSw5IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MjUwMDAgMTAwMD47CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0gCQkJaW50ZXJydXB0cyA9IDwyMyAyIDI0IDIgMjggMj47CisgCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQl9OwpAQCAtMTY5LDE1ICsxNjYsMTUgQEAKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCXJlZyA9IDw0NTAwIDEwMD47CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8MmEgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIjsKLQkJCXJlZyA9IDxlMDAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CiAJCQlmc2wsaGFzLXJzdGNyOwogCQl9OwogCkBAIC0xODUsOSArMTgyLDkgQEAKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCXJlZyA9IDw0NjAwIDEwMD47CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8MmEgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKQEAgLTE5NSwxMyArMTkyLDEzIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJjcnlwdG8iOwogCQkJbW9kZWwgPSAiU0VDMiI7CiAJCQljb21wYXRpYmxlID0gInRhbGl0b3MiOwotCQkJcmVnID0gPDMwMDAwIGYwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyZCAyPjsKKwkJCXJlZyA9IDwweDMwMDAwIDB4ZjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ1IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQludW0tY2hhbm5lbHMgPSA8ND47Ci0JCQljaGFubmVsLWZpZm8tbGVuID0gPDE4PjsKLQkJCWV4ZWMtdW5pdHMtbWFzayA9IDwwMDAwMDBmZT47Ci0JCQlkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MDEyYjBlYmY+OworCQkJY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CisJCQlleGVjLXVuaXRzLW1hc2sgPSA8MHhmZT47CisJCQlkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgxMmIwZWJmPjsKIAkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewpAQCAtMjA5LDczICsyMDYsNzMgQEAKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDQwMDAwIDQwMDAwPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwogCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJpZy1lbmRpYW47CiAJCX07CiAKIAkJcGFyX2lvQGUwMTAwIHsKLQkJCXJlZyA9IDxlMDEwMCAxMDA+OworCQkJcmVnID0gPDB4ZTAxMDAgMHgxMDA+OwogCQkJZGV2aWNlX3R5cGUgPSAicGFyX2lvIjsKIAkJCW51bS1wb3J0cyA9IDw3PjsKIAogCQkJcGlvMTogdWNjX3BpbkAwMSB7CiAJCQkJcGlvLW1hcCA9IDwKIAkJCS8qIHBvcnQgIHBpbiAgZGlyICBvcGVuX2RyYWluICBhc3NpZ25tZW50ICBoYXNfaXJxICovCi0JCQkJCTQgIDBhICAxICAwICAyICAwIAkvKiBUeEQwICovCi0JCQkJCTQgIDA5ICAxICAwICAyICAwIAkvKiBUeEQxICovCi0JCQkJCTQgIDA4ICAxICAwICAyICAwIAkvKiBUeEQyICovCi0JCQkJCTQgIDA3ICAxICAwICAyICAwIAkvKiBUeEQzICovCi0JCQkJCTQgIDE3ICAxICAwICAyICAwIAkvKiBUeEQ0ICovCi0JCQkJCTQgIDE2ICAxICAwICAyICAwIAkvKiBUeEQ1ICovCi0JCQkJCTQgIDE1ICAxICAwICAyICAwIAkvKiBUeEQ2ICovCi0JCQkJCTQgIDE0ICAxICAwICAyICAwIAkvKiBUeEQ3ICovCi0JCQkJCTQgIDBmICAyICAwICAyICAwIAkvKiBSeEQwICovCi0JCQkJCTQgIDBlICAyICAwICAyICAwIAkvKiBSeEQxICovCi0JCQkJCTQgIDBkICAyICAwICAyICAwIAkvKiBSeEQyICovCi0JCQkJCTQgIDBjICAyICAwICAyICAwIAkvKiBSeEQzICovCi0JCQkJCTQgIDFkICAyICAwICAyICAwIAkvKiBSeEQ0ICovCi0JCQkJCTQgIDFjICAyICAwICAyICAwIAkvKiBSeEQ1ICovCi0JCQkJCTQgIDFiICAyICAwICAyICAwIAkvKiBSeEQ2ICovCi0JCQkJCTQgIDFhICAyICAwICAyICAwIAkvKiBSeEQ3ICovCi0JCQkJCTQgIDBiICAxICAwICAyICAwIAkvKiBUWF9FTiAqLwotCQkJCQk0ICAxOCAgMSAgMCAgMiAgMCAJLyogVFhfRVIgKi8KLQkJCQkJNCAgMTAgIDIgIDAgIDIgIDAgCS8qIFJYX0RWICovCi0JCQkJCTQgIDFlICAyICAwICAyICAwIAkvKiBSWF9FUiAqLwotCQkJCQk0ICAxMSAgMiAgMCAgMiAgMCAJLyogUlhfQ0xLICovCi0JCQkJCTQgIDEzICAxICAwICAyICAwIAkvKiBHVFhfQ0xLICovCi0JCQkJCTEgIDFmICAyICAwICAzICAwPjsJLyogR1RYMTI1ICovCisJCQkJCTB4NCAgMHhhICAweDEgIDB4MCAgMHgyICAweDAgCS8qIFR4RDAgKi8KKwkJCQkJMHg0ICAweDkgIDB4MSAgMHgwICAweDIgIDB4MCAJLyogVHhEMSAqLworCQkJCQkweDQgIDB4OCAgMHgxICAweDAgIDB4MiAgMHgwIAkvKiBUeEQyICovCisJCQkJCTB4NCAgMHg3ICAweDEgIDB4MCAgMHgyICAweDAgCS8qIFR4RDMgKi8KKwkJCQkJMHg0ICAweDE3ICAweDEgIDB4MCAgMHgyICAweDAgCS8qIFR4RDQgKi8KKwkJCQkJMHg0ICAweDE2ICAweDEgIDB4MCAgMHgyICAweDAgCS8qIFR4RDUgKi8KKwkJCQkJMHg0ICAweDE1ICAweDEgIDB4MCAgMHgyICAweDAgCS8qIFR4RDYgKi8KKwkJCQkJMHg0ICAweDE0ICAweDEgIDB4MCAgMHgyICAweDAgCS8qIFR4RDcgKi8KKwkJCQkJMHg0ICAweGYgIDB4MiAgMHgwICAweDIgIDB4MCAJLyogUnhEMCAqLworCQkJCQkweDQgIDB4ZSAgMHgyICAweDAgIDB4MiAgMHgwIAkvKiBSeEQxICovCisJCQkJCTB4NCAgMHhkICAweDIgIDB4MCAgMHgyICAweDAgCS8qIFJ4RDIgKi8KKwkJCQkJMHg0ICAweGMgIDB4MiAgMHgwICAweDIgIDB4MCAJLyogUnhEMyAqLworCQkJCQkweDQgIDB4MWQgIDB4MiAgMHgwICAweDIgIDB4MCAJLyogUnhENCAqLworCQkJCQkweDQgIDB4MWMgIDB4MiAgMHgwICAweDIgIDB4MCAJLyogUnhENSAqLworCQkJCQkweDQgIDB4MWIgIDB4MiAgMHgwICAweDIgIDB4MCAJLyogUnhENiAqLworCQkJCQkweDQgIDB4MWEgIDB4MiAgMHgwICAweDIgIDB4MCAJLyogUnhENyAqLworCQkJCQkweDQgIDB4YiAgMHgxICAweDAgIDB4MiAgMHgwIAkvKiBUWF9FTiAqLworCQkJCQkweDQgIDB4MTggIDB4MSAgMHgwICAweDIgIDB4MCAJLyogVFhfRVIgKi8KKwkJCQkJMHg0ICAweDEwICAweDIgIDB4MCAgMHgyICAweDAgCS8qIFJYX0RWICovCisJCQkJCTB4NCAgMHgxZSAgMHgyICAweDAgIDB4MiAgMHgwIAkvKiBSWF9FUiAqLworCQkJCQkweDQgIDB4MTEgIDB4MiAgMHgwICAweDIgIDB4MCAJLyogUlhfQ0xLICovCisJCQkJCTB4NCAgMHgxMyAgMHgxICAweDAgIDB4MiAgMHgwIAkvKiBHVFhfQ0xLICovCisJCQkJCTB4MSAgMHgxZiAgMHgyICAweDAgIDB4MyAgMHgwPjsJLyogR1RYMTI1ICovCiAJCQl9OwogCiAJCQlwaW8yOiB1Y2NfcGluQDAyIHsKIAkJCQlwaW8tbWFwID0gPAogCQkJLyogcG9ydCAgcGluICBkaXIgIG9wZW5fZHJhaW4gIGFzc2lnbm1lbnQgIGhhc19pcnEgKi8KLQkJCQkJNSAgMGEgMSAgMCAgMiAgMCAgIC8qIFR4RDAgKi8KLQkJCQkJNSAgMDkgMSAgMCAgMiAgMCAgIC8qIFR4RDEgKi8KLQkJCQkJNSAgMDggMSAgMCAgMiAgMCAgIC8qIFR4RDIgKi8KLQkJCQkJNSAgMDcgMSAgMCAgMiAgMCAgIC8qIFR4RDMgKi8KLQkJCQkJNSAgMTcgMSAgMCAgMiAgMCAgIC8qIFR4RDQgKi8KLQkJCQkJNSAgMTYgMSAgMCAgMiAgMCAgIC8qIFR4RDUgKi8KLQkJCQkJNSAgMTUgMSAgMCAgMiAgMCAgIC8qIFR4RDYgKi8KLQkJCQkJNSAgMTQgMSAgMCAgMiAgMCAgIC8qIFR4RDcgKi8KLQkJCQkJNSAgMGYgMiAgMCAgMiAgMCAgIC8qIFJ4RDAgKi8KLQkJCQkJNSAgMGUgMiAgMCAgMiAgMCAgIC8qIFJ4RDEgKi8KLQkJCQkJNSAgMGQgMiAgMCAgMiAgMCAgIC8qIFJ4RDIgKi8KLQkJCQkJNSAgMGMgMiAgMCAgMiAgMCAgIC8qIFJ4RDMgKi8KLQkJCQkJNSAgMWQgMiAgMCAgMiAgMCAgIC8qIFJ4RDQgKi8KLQkJCQkJNSAgMWMgMiAgMCAgMiAgMCAgIC8qIFJ4RDUgKi8KLQkJCQkJNSAgMWIgMiAgMCAgMiAgMCAgIC8qIFJ4RDYgKi8KLQkJCQkJNSAgMWEgMiAgMCAgMiAgMCAgIC8qIFJ4RDcgKi8KLQkJCQkJNSAgMGIgMSAgMCAgMiAgMCAgIC8qIFRYX0VOICovCi0JCQkJCTUgIDE4IDEgIDAgIDIgIDAgICAvKiBUWF9FUiAqLwotCQkJCQk1ICAxMCAyICAwICAyICAwICAgLyogUlhfRFYgKi8KLQkJCQkJNSAgMWUgMiAgMCAgMiAgMCAgIC8qIFJYX0VSICovCi0JCQkJCTUgIDExIDIgIDAgIDIgIDAgICAvKiBSWF9DTEsgKi8KLQkJCQkJNSAgMTMgMSAgMCAgMiAgMCAgIC8qIEdUWF9DTEsgKi8KLQkJCQkJMSAgMWYgMiAgMCAgMyAgMCAgIC8qIEdUWDEyNSAqLwotCQkJCQk0ICAwNiAzICAwICAyICAwICAgLyogTURJTyAqLwotCQkJCQk0ICAwNSAxICAwICAyICAwPjsgLyogTURDICovCisJCQkJCTB4NSAgMHhhIDB4MSAgMHgwICAweDIgIDB4MCAgIC8qIFR4RDAgKi8KKwkJCQkJMHg1ICAweDkgMHgxICAweDAgIDB4MiAgMHgwICAgLyogVHhEMSAqLworCQkJCQkweDUgIDB4OCAweDEgIDB4MCAgMHgyICAweDAgICAvKiBUeEQyICovCisJCQkJCTB4NSAgMHg3IDB4MSAgMHgwICAweDIgIDB4MCAgIC8qIFR4RDMgKi8KKwkJCQkJMHg1ICAweDE3IDB4MSAgMHgwICAweDIgIDB4MCAgIC8qIFR4RDQgKi8KKwkJCQkJMHg1ICAweDE2IDB4MSAgMHgwICAweDIgIDB4MCAgIC8qIFR4RDUgKi8KKwkJCQkJMHg1ICAweDE1IDB4MSAgMHgwICAweDIgIDB4MCAgIC8qIFR4RDYgKi8KKwkJCQkJMHg1ICAweDE0IDB4MSAgMHgwICAweDIgIDB4MCAgIC8qIFR4RDcgKi8KKwkJCQkJMHg1ICAweGYgMHgyICAweDAgIDB4MiAgMHgwICAgLyogUnhEMCAqLworCQkJCQkweDUgIDB4ZSAweDIgIDB4MCAgMHgyICAweDAgICAvKiBSeEQxICovCisJCQkJCTB4NSAgMHhkIDB4MiAgMHgwICAweDIgIDB4MCAgIC8qIFJ4RDIgKi8KKwkJCQkJMHg1ICAweGMgMHgyICAweDAgIDB4MiAgMHgwICAgLyogUnhEMyAqLworCQkJCQkweDUgIDB4MWQgMHgyICAweDAgIDB4MiAgMHgwICAgLyogUnhENCAqLworCQkJCQkweDUgIDB4MWMgMHgyICAweDAgIDB4MiAgMHgwICAgLyogUnhENSAqLworCQkJCQkweDUgIDB4MWIgMHgyICAweDAgIDB4MiAgMHgwICAgLyogUnhENiAqLworCQkJCQkweDUgIDB4MWEgMHgyICAweDAgIDB4MiAgMHgwICAgLyogUnhENyAqLworCQkJCQkweDUgIDB4YiAweDEgIDB4MCAgMHgyICAweDAgICAvKiBUWF9FTiAqLworCQkJCQkweDUgIDB4MTggMHgxICAweDAgIDB4MiAgMHgwICAgLyogVFhfRVIgKi8KKwkJCQkJMHg1ICAweDEwIDB4MiAgMHgwICAweDIgIDB4MCAgIC8qIFJYX0RWICovCisJCQkJCTB4NSAgMHgxZSAweDIgIDB4MCAgMHgyICAweDAgICAvKiBSWF9FUiAqLworCQkJCQkweDUgIDB4MTEgMHgyICAweDAgIDB4MiAgMHgwICAgLyogUlhfQ0xLICovCisJCQkJCTB4NSAgMHgxMyAweDEgIDB4MCAgMHgyICAweDAgICAvKiBHVFhfQ0xLICovCisJCQkJCTB4MSAgMHgxZiAweDIgIDB4MCAgMHgzICAweDAgICAvKiBHVFgxMjUgKi8KKwkJCQkJMHg0ICAweDYgMHgzICAweDAgIDB4MiAgMHgwICAgLyogTURJTyAqLworCQkJCQkweDQgIDB4NSAweDEgIDB4MCAgMHgyICAweDA+OyAvKiBNREMgKi8KIAkJCX07CiAJCX07CiAJfTsKQEAgLTI4NSwyOCArMjgyLDI4IEBACiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlkZXZpY2VfdHlwZSA9ICJxZSI7CiAJCWNvbXBhdGlibGUgPSAiZnNsLHFlIjsKLQkJcmFuZ2VzID0gPDAgZTAwODAwMDAgMDAwNDAwMDA+OwotCQlyZWcgPSA8ZTAwODAwMDAgNDgwPjsKKwkJcmFuZ2VzID0gPDB4MCAweGUwMDgwMDAwIDB4NDAwMDA+OworCQlyZWcgPSA8MHhlMDA4MDAwMCAweDQ4MD47CiAJCWJyZy1mcmVxdWVuY3kgPSA8MD47Ci0JCWJ1cy1mcmVxdWVuY3kgPSA8MTc5QTdCMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDM5NjAwMDAwMD47CiAKIAkJbXVyYW1AMTAwMDAgewogIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wscWUtbXVyYW0iLCAiZnNsLGNwbS1tdXJhbSI7Ci0JCQlyYW5nZXMgPSA8MCAwMDAxMDAwMCAwMDAwYzAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MTAwMDAgMHgxMDAwMD47CiAKIAkJCWRhdGEtb25seUAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxxZS1tdXJhbS1kYXRhIiwKIAkJCQkJICAgICAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKLQkJCQlyZWcgPSA8MCBjMDAwPjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDA+OwogCQkJfTsKIAkJfTsKIAogCQlzcGlANGMwIHsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxzcGkiOwotCQkJcmVnID0gPDRjMCA0MD47CisJCQlyZWcgPSA8MHg0YzAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcWVpYz47CiAJCQltb2RlID0gImNwdSI7CkBAIC0zMTUsNyArMzEyLDcgQEAKIAkJc3BpQDUwMCB7CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsc3BpIjsKLQkJCXJlZyA9IDw1MDAgNDA+OworCQkJcmVnID0gPDB4NTAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OwogCQkJbW9kZSA9ICJjcHUiOwpAQCAtMzI0LDExICszMjEsOSBAQAogCQllbmV0MjogdWNjQDIwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKLQkJCW1vZGVsID0gIlVDQyI7CiAJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlLWlkID0gPDE+OwotCQkJcmVnID0gPDIwMDAgMjAwPjsKLQkJCWludGVycnVwdHMgPSA8MjA+OworCQkJcmVnID0gPDB4MjAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPDMyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlyeC1jbG9jay1uYW1lID0gIm5vbmUiOwpAQCAtMzQxLDExICszMzYsOSBAQAogCQllbmV0MzogdWNjQDMwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKLQkJCW1vZGVsID0gIlVDQyI7CiAJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJZGV2aWNlLWlkID0gPDI+OwotCQkJcmVnID0gPDMwMDAgMjAwPjsKLQkJCWludGVycnVwdHMgPSA8MjE+OworCQkJcmVnID0gPDB4MzAwMCAweDIwMD47CisJCQlpbnRlcnJ1cHRzID0gPDMzPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlyeC1jbG9jay1uYW1lID0gIm5vbmUiOwpAQCAtMzU4LDcgKzM1MSw3IEBACiAJCW1kaW9AMjEyMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJcmVnID0gPDIxMjAgMTg+OworCQkJcmVnID0gPDB4MjEyMCAweDE4PjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHVjYy1tZGlvIjsKIAogCQkJLyogVGhlc2UgYXJlIHRoZSBzYW1lIFBIWXMgYXMgb24KQEAgLTM2NiwyNSArMzU5LDI1IEBACiAJCQlxZV9waHkwOiBldGhlcm5ldC1waHlAMDcgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MSAxPjsKLQkJCQlyZWcgPSA8Nz47CisJCQkJcmVnID0gPDB4Nz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlxZV9waHkxOiBldGhlcm5ldC1waHlAMDEgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MiAxPjsKLQkJCQlyZWcgPSA8MT47CisJCQkJcmVnID0gPDB4MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlxZV9waHkyOiBldGhlcm5ldC1waHlAMDIgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MSAxPjsKLQkJCQlyZWcgPSA8Mj47CisJCQkJcmVnID0gPDB4Mj47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCQlxZV9waHkzOiBldGhlcm5ldC1waHlAMDMgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MiAxPjsKLQkJCQlyZWcgPSA8Mz47CisJCQkJcmVnID0gPDB4Mz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07CiAJCX07CkBAIC0zOTQsOSArMzg3LDkgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHFlLWljIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJCXJlZyA9IDw4MCA4MD47CisJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCWJpZy1lbmRpYW47Ci0JCQlpbnRlcnJ1cHRzID0gPDJlIDIgMmUgMj47IC8vaGlnaDozMCBsb3c6MzAKKwkJCWludGVycnVwdHMgPSA8NDYgMiA0NiAyPjsgLy9oaWdoOjMwIGxvdzozMAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKQEAgLTQwNCwzMCArMzk3LDMwIEBACiAKIAlwY2kwOiBwY2lAZTAwMDgwMDAgewogCQljZWxsLWluZGV4ID0gPDA+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJLyogSURTRUwgMHgxMiBBRDE4ICovCi0JCQk5MDAwIDAgMCAxICZtcGljIDUgMQotCQkJOTAwMCAwIDAgMiAmbXBpYyA2IDEKLQkJCTkwMDAgMCAwIDMgJm1waWMgNyAxCi0JCQk5MDAwIDAgMCA0ICZtcGljIDQgMQorCQkJMHg5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4NSAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDYgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDMgJm1waWMgMHg3IDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NCAweDEKIAogCQkJLyogSURTRUwgMHgxMyBBRDE5ICovCi0JCQk5ODAwIDAgMCAxICZtcGljIDYgMQotCQkJOTgwMCAwIDAgMiAmbXBpYyA3IDEKLQkJCTk4MDAgMCAwIDMgJm1waWMgNCAxCi0JCQk5ODAwIDAgMCA0ICZtcGljIDUgMT47CisJCQkweDk4MDAgMHgwIDB4MCAweDEgJm1waWMgMHg2IDB4MQorCQkJMHg5ODAwIDB4MCAweDAgMHgyICZtcGljIDB4NyAweDEKKwkJCTB4OTgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDk4MDAgMHgwIDB4MCAweDQgJm1waWMgMHg1IDB4MT47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTggMj47Ci0JCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyMDAwMDAwIDAgMDA4MDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8M2Y5NDBhYT47CisJCWludGVycnVwdHMgPSA8MjQgMj47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyMDAwMDAwIDB4MCAweDgwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPGUwMDA4MDAwIDEwMDA+OworCQlyZWcgPSA8MHhlMDAwODAwMCAweDEwMDA+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKQEAgLTQzNSwzOSArNDI4LDM5IEBACiAJLyogUENJIEV4cHJlc3MgKi8KIAlwY2kxOiBwY2llQGUwMDBhMDAwIHsKIAkJY2VsbC1pbmRleCA9IDwyPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJLyogSURTRUwgMHgwIChQRVgpICovCi0JCQkwMDAwMCAwIDAgMSAmbXBpYyAwIDEKLQkJCTAwMDAwIDAgMCAyICZtcGljIDEgMQotCQkJMDAwMDAgMCAwIDMgJm1waWMgMiAxCi0JCQkwMDAwMCAwIDAgNCAmbXBpYyAzIDE+OworCQkJMDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMDAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMDAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MT47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MWEgMj47Ci0JCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAxMDAwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyODAwMDAwIDAgMDA4MDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MWZjYTA1NT47CisJCWludGVycnVwdHMgPSA8MjYgMj47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgxMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGUyODAwMDAwIDB4MCAweDgwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPGUwMDBhMDAwIDEwMDA+OworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDEwMDA+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQlwY2llQDAgewotCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwCi0JCQkJICAwMjAwMDAwMCAwIGEwMDAwMDAwCi0JCQkJICAwIDEwMDAwMDAwCisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MCAweDEwMDAwMDAwCiAKLQkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAKLQkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAKLQkJCQkgIDAgMDA4MDAwMDA+OworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHg4MDAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzLmR0cwppbmRleCBkYjM3MjE0Li42NmYyN2FiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM4NTcyIERTIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtOSw2ICs5LDcgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorL2R0cy12MS87CiAvIHsKIAltb2RlbCA9ICJmc2wsTVBDODU3MkRTIjsKIAljb21wYXRpYmxlID0gImZzbCxNUEM4NTcyRFMiOwpAQCAtMzMsMTEgKzM0LDExIEBACiAKIAkJUG93ZXJQQyw4NTcyQDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwwPjsKLQkJCWQtY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWktY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKLQkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKLQkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXJlZyA9IDwweDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CkBAIC00NSwxMSArNDYsMTEgQEAKIAogCQlQb3dlclBDLDg1NzJAMSB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDE+OwotCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySwotCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJcmVnID0gPDB4MT47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySwogCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKQEAgLTU4LDM4ICs1OSwzOCBAQAogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAwMDAwMDAwIDAwMDAwMDAwPjsJLy8gRmlsbGVkIGJ5IFUtQm9vdAorCQlyZWcgPSA8MHgwIDB4MD47CS8vIEZpbGxlZCBieSBVLUJvb3QKIAl9OwogCiAJc29jODU3MkBmZmUwMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJcmFuZ2VzID0gPDAwMDAwMDAwIGZmZTAwMDAwIDAwMTAwMDAwPjsKLQkJcmVnID0gPGZmZTAwMDAwIDAwMDAxMDAwPjsJLy8gQ0NTUkJBUiAmIHNvYyByZWdzLCByZW1vdmUgb25jZSBwYXJzZSBjb2RlIGZvciBpbW1yYmFzZSBmaXhlZAorCQlyYW5nZXMgPSA8MHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OworCQlyZWcgPSA8MHhmZmUwMDAwMCAweDEwMDA+OwkvLyBDQ1NSQkFSICYgc29jIHJlZ3MsIHJlbW92ZSBvbmNlIHBhcnNlIGNvZGUgZm9yIGltbXJiYXNlIGZpeGVkCiAJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1tZW1vcnktY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MjAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxMiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCX07CiAKIAkJbWVtb3J5LWNvbnRyb2xsZXJANjAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLW1lbW9yeS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDw2MDAwIDEwMDA+OworCQkJcmVnID0gPDB4NjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDEyIDI+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKIAkJfTsKIAogCQlsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MjAwMDAgMTAwMD47Ci0JCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcwotCQkJY2FjaGUtc2l6ZSA9IDw4MDAwMD47CS8vIEwyLCA1MTJLCisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8MHg4MDAwMD47CS8vIEwyLCA1MTJLCiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTAgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwogCQl9OwogCiAJCWkyY0AzMDAwIHsKQEAgLTk3LDggKzk4LDggQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MzAwMCAxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAJCX07CkBAIC0xMDgsOCArMTA5LDggQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MzEwMCAxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAJCX07CkBAIC0xMTgsMjcgKzExOSwyNyBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MjQ1MjAgMjA+OworCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47CiAKIAkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPGEgMT47Ci0JCQkJcmVnID0gPDA+OworCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJcmVnID0gPDB4MD47CiAJCQl9OwogCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8YSAxPjsKLQkJCQlyZWcgPSA8MT47CisJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQlyZWcgPSA8MHgxPjsKIAkJCX07CiAJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDxhIDE+OwotCQkJCXJlZyA9IDwyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCXJlZyA9IDwweDI+OwogCQkJfTsKIAkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPGEgMT47Ci0JCQkJcmVnID0gPDM+OworCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJcmVnID0gPDB4Mz47CiAJCQl9OwogCQl9OwogCkBAIC0xNDcsOSArMTQ4LDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MWQgMiAxZSAyIDIyIDI+OworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CkBAIC0xNjAsOSArMTYxLDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNTAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MjMgMiAyNCAyIDI4IDI+OworCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CkBAIC0xNzMsOSArMTc0LDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNjAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MWYgMiAyMCAyIDIxIDI+OworCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CkBAIC0xODYsOSArMTg3LDkgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwyNzAwMCAxMDAwPjsKKwkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MjUgMiAyNiAyIDI3IDI+OworCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CkBAIC0xOTgsOSArMTk5LDkgQEAKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCXJlZyA9IDw0NTAwIDEwMD47CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8MmEgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKQEAgLTIwOCwxNSArMjA5LDE1IEBACiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8NDYwMCAxMDA+OworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDJhIDI+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3V0cyI7Ci0JCQlyZWcgPSA8ZTAwMDAgMTAwMD47CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OwogCQkJZnNsLGhhcy1yc3RjcjsKIAkJfTsKIApAQCAtMjI1LDcgKzIyNiw3IEBACiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCXJlZyA9IDw0MDAwMCA0MDAwMD47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKIAkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCQliaWctZW5kaWFuOwpAQCAtMjM5LDE2NyArMjQwLDE2NyBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDxmZmUwODAwMCAxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgZmY+OwotCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCi0JCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZmZjMDAwMDAgMCAwMDAxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwxZmNhMDU1PjsKKwkJcmVnID0gPDB4ZmZlMDgwMDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwIDB4ZmZjMDAwMDAgMHgwIDB4MTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGZmMDAgMCAwIDc+OworCQlpbnRlcnJ1cHRzID0gPDI0IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyAwIC0gUENJIHNsb3QgMSAqLwotCQkJODgwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCTg4MDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4ODAwIDAgMCAzICZtcGljIDQgMQotCQkJODgwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyAxIC0gUENJIHNsb3QgMSAqLwotCQkJODkwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCTg5MDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4OTAwIDAgMCAzICZtcGljIDQgMQotCQkJODkwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4ODkwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDg5MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4OTAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4ODkwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyAyIC0gUENJIHNsb3QgMSAqLwotCQkJOGEwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCThhMDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4YTAwIDAgMCAzICZtcGljIDQgMQotCQkJOGEwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4OGEwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhhMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4YTAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGEwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyAzIC0gUENJIHNsb3QgMSAqLwotCQkJOGIwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCThiMDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4YjAwIDAgMCAzICZtcGljIDQgMQotCQkJOGIwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4OGIwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhiMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4YjAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGIwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyA0IC0gUENJIHNsb3QgMSAqLwotCQkJOGMwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCThjMDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4YzAwIDAgMCAzICZtcGljIDQgMQotCQkJOGMwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4OGMwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhjMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4YzAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGMwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyA1IC0gUENJIHNsb3QgMSAqLwotCQkJOGQwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCThkMDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4ZDAwIDAgMCAzICZtcGljIDQgMQotCQkJOGQwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4OGQwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhkMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ZDAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGQwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyA2IC0gUENJIHNsb3QgMSAqLwotCQkJOGUwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCThlMDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4ZTAwIDAgMCAzICZtcGljIDQgMQotCQkJOGUwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4OGUwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhlMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ZTAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGUwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTEgZnVuYyA3IC0gUENJIHNsb3QgMSAqLwotCQkJOGYwMCAwIDAgMSAmbXBpYyAyIDEKLQkJCThmMDAgMCAwIDIgJm1waWMgMyAxCi0JCQk4ZjAwIDAgMCAzICZtcGljIDQgMQotCQkJOGYwMCAwIDAgNCAmbXBpYyAxIDEKKwkJCTB4OGYwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhmMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ZjAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGYwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyAwIC0gUENJIHNsb3QgMiAqLwotCQkJOTAwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTkwMDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5MDAwIDAgMCAzICZtcGljIDEgMQotCQkJOTAwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyAxIC0gUENJIHNsb3QgMiAqLwotCQkJOTEwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTkxMDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5MTAwIDAgMCAzICZtcGljIDEgMQotCQkJOTEwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTEwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkxMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MTAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTEwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyAyIC0gUENJIHNsb3QgMiAqLwotCQkJOTIwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTkyMDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5MjAwIDAgMCAzICZtcGljIDEgMQotCQkJOTIwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTIwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkyMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MjAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTIwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyAzIC0gUENJIHNsb3QgMiAqLwotCQkJOTMwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTkzMDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5MzAwIDAgMCAzICZtcGljIDEgMQotCQkJOTMwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTMwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkzMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MzAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTMwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyA0IC0gUENJIHNsb3QgMiAqLwotCQkJOTQwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTk0MDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5NDAwIDAgMCAzICZtcGljIDEgMQotCQkJOTQwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTQwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk0MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NDAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTQwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyA1IC0gUENJIHNsb3QgMiAqLwotCQkJOTUwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTk1MDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5NTAwIDAgMCAzICZtcGljIDEgMQotCQkJOTUwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTUwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk1MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NTAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTUwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyA2IC0gUENJIHNsb3QgMiAqLwotCQkJOTYwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTk2MDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5NjAwIDAgMCAzICZtcGljIDEgMQotCQkJOTYwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTYwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk2MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NjAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTYwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8qIElEU0VMIDB4MTIgZnVuYyA3IC0gUENJIHNsb3QgMiAqLwotCQkJOTcwMCAwIDAgMSAmbXBpYyAzIDEKLQkJCTk3MDAgMCAwIDIgJm1waWMgNCAxCi0JCQk5NzAwIDAgMCAzICZtcGljIDEgMQotCQkJOTcwMCAwIDAgNCAmbXBpYyAyIDEKKwkJCTB4OTcwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk3MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NzAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTcwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCiAKIAkJCS8vIElEU0VMIDB4MWMgIFVTQgotCQkJZTAwMCAwIDAgMSAmaTgyNTkgYyAyCi0JCQllMTAwIDAgMCAyICZpODI1OSA5IDIKLQkJCWUyMDAgMCAwIDMgJmk4MjU5IGEgMgotCQkJZTMwMCAwIDAgNCAmaTgyNTkgYiAyCisJCQkweGUwMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4YyAweDIKKwkJCTB4ZTEwMCAweDAgMHgwIDB4MiAmaTgyNTkgMHg5IDB4MgorCQkJMHhlMjAwIDB4MCAweDAgMHgzICZpODI1OSAweGEgMHgyCisJCQkweGUzMDAgMHgwIDB4MCAweDQgJmk4MjU5IDB4YiAweDIKIAogCQkJLy8gSURTRUwgMHgxZCAgQXVkaW8KLQkJCWU4MDAgMCAwIDEgJmk4MjU5IDYgMgorCQkJMHhlODAwIDB4MCAweDAgMHgxICZpODI1OSAweDYgMHgyCiAKIAkJCS8vIElEU0VMIDB4MWUgTGVnYWN5Ci0JCQlmMDAwIDAgMCAxICZpODI1OSA3IDIKLQkJCWYxMDAgMCAwIDEgJmk4MjU5IDcgMgorCQkJMHhmMDAwIDB4MCAweDAgMHgxICZpODI1OSAweDcgMHgyCisJCQkweGYxMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4NyAweDIKIAogCQkJLy8gSURTRUwgMHgxZiBJREUvU0FUQQotCQkJZjgwMCAwIDAgMSAmaTgyNTkgZSAyCi0JCQlmOTAwIDAgMCAxICZpODI1OSA1IDIKKwkJCTB4ZjgwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHhlIDB4MgorCQkJMHhmOTAwIDB4MCAweDAgMHgxICZpODI1OSAweDUgMHgyCiAKIAkJCT47CiAKIAkJcGNpZUAwIHsKLQkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMAotCQkJCSAgMDIwMDAwMDAgMCA4MDAwMDAwMAotCQkJCSAgMCAyMDAwMDAwMAorCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAogCi0JCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJICAwIDAwMTAwMDAwPjsKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDAwPjsKIAkJCXVsaTE1NzVAMCB7Ci0JCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwCi0JCQkJCSAgMDIwMDAwMDAgMCA4MDAwMDAwMAotCQkJCQkgIDAgMjAwMDAwMDAKKwkJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJCSAgMHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJCSAgMHgwIDB4MjAwMDAwMDAKIAotCQkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAKLQkJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwCi0JCQkJCSAgMCAwMDEwMDAwMD47CisJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCQkgIDB4MCAweDEwMDAwMD47CiAJCQkJaXNhQDFlIHsKIAkJCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKIAkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwotCQkJCQlyZWcgPSA8ZjAwMCAwIDAgMCAwPjsKLQkJCQkJcmFuZ2VzID0gPDEgMCAwMTAwMDAwMCAwIDAKLQkJCQkJCSAgMDAwMDEwMDA+OworCQkJCQlyZWcgPSA8MHhmMDAwIDB4MCAweDAgMHgwIDB4MD47CisJCQkJCXJhbmdlcyA9IDwweDEgMHgwIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJCQkgIDB4MTAwMD47CiAJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jmk4MjU5PjsKIAogCQkJCQlpODI1OTogaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAgewotCQkJCQkJcmVnID0gPDEgMjAgMgotCQkJCQkJICAgICAgIDEgYTAgMgotCQkJCQkJICAgICAgIDEgNGQwIDI+OworCQkJCQkJcmVnID0gPDB4MSAweDIwIDB4MgorCQkJCQkJICAgICAgIDB4MSAweGEwIDB4MgorCQkJCQkJICAgICAgIDB4MSAweDRkMCAweDI+OwogCQkJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CiAJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKQEAgLTQxMiwyOSArNDEzLDI5IEBACiAJCQkJCWk4MDQyQDYwIHsKIAkJCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJCQlyZWcgPSA8MSA2MCAxIDEgNjQgMT47Ci0JCQkJCQlpbnRlcnJ1cHRzID0gPDEgMyBjIDM+OworCQkJCQkJcmVnID0gPDB4MSAweDYwIDB4MSAweDEgMHg2NCAweDE+OworCQkJCQkJaW50ZXJydXB0cyA9IDwxIDMgMTIgMz47CiAJCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0KIAkJCQkJCQk8Jmk4MjU5PjsKIAogCQkJCQkJa2V5Ym9hcmRAMCB7Ci0JCQkJCQkJcmVnID0gPDA+OworCQkJCQkJCXJlZyA9IDwweDA+OwogCQkJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDMwMyI7CiAJCQkJCQl9OwogCiAJCQkJCQltb3VzZUAxIHsKLQkJCQkJCQlyZWcgPSA8MT47CisJCQkJCQkJcmVnID0gPDB4MT47CiAJCQkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsZjAzIjsKIAkJCQkJCX07CiAJCQkJCX07CiAKIAkJCQkJcnRjQDcwIHsKIAkJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGIwMCI7Ci0JCQkJCQlyZWcgPSA8MSA3MCAyPjsKKwkJCQkJCXJlZyA9IDwweDEgMHg3MCAweDI+OwogCQkJCQl9OwogCiAJCQkJCWdwaW9ANDAwIHsKLQkJCQkJCXJlZyA9IDwxIDQwMCA4MD47CisJCQkJCQlyZWcgPSA8MHgxIDB4NDAwIDB4ODA+OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwpAQCAtNDQ5LDMzICs0NTAsMzMgQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8ZmZlMDkwMDAgMTAwMD47Ci0JCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAyMDAwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGZmYzEwMDAwIDAgMDAwMTAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MWZjYTA1NT47CisJCXJlZyA9IDwweGZmZTA5MDAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGZmYzEwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MWEgMj47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0cyA9IDwyNiAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkvKiBJRFNFTCAweDAgKi8KLQkJCTAwMDAgMCAwIDEgJm1waWMgNCAxCi0JCQkwMDAwIDAgMCAyICZtcGljIDUgMQotCQkJMDAwMCAwIDAgMyAmbXBpYyA2IDEKLQkJCTAwMDAgMCAwIDQgJm1waWMgNyAxCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4NCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg1IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDYgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NyAweDEKIAkJCT47CiAJCXBjaWVAMCB7Ci0JCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAKLQkJCQkgIDAyMDAwMDAwIDAgYTAwMDAwMDAKLQkJCQkgIDAgMjAwMDAwMDAKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKIAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMCAwMDEwMDAwMD47CisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwMD47CiAJCX07CiAJfTsKIApAQCAtNDg2LDMzICs0ODcsMzMgQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8ZmZlMGEwMDAgMTAwMD47Ci0JCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYzAwMDAwMDAgYzAwMDAwMDAgMCAyMDAwMDAwMAotCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGZmYzIwMDAwIDAgMDAwMTAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MWZjYTA1NT47CisJCXJlZyA9IDwweGZmZTBhMDAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMHhjMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MCAweGZmYzIwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MWIgMj47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0cyA9IDwyNyAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkvKiBJRFNFTCAweDAgKi8KLQkJCTAwMDAgMCAwIDEgJm1waWMgMCAxCi0JCQkwMDAwIDAgMCAyICZtcGljIDEgMQotCQkJMDAwMCAwIDAgMyAmbXBpYyAyIDEKLQkJCTAwMDAgMCAwIDQgJm1waWMgMyAxCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKIAkJCT47CiAJCXBjaWVAMCB7Ci0JCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYzAwMDAwMDAKLQkJCQkgIDAyMDAwMDAwIDAgYzAwMDAwMDAKLQkJCQkgIDAgMjAwMDAwMDAKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKIAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMAotCQkJCSAgMCAwMDEwMDAwMD47CisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY0MV9ocGNuLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzCmluZGV4IDc5Mzg1YmMuLjdmOWI5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzCkBAIC0xMyw3ICsxMyw3IEBACiAKIC8gewogCW1vZGVsID0gIk1QQzg2NDFIUENOIjsKLQljb21wYXRpYmxlID0gIm1wYzg2eHgiOworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDFocGNuIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NmFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY2YWRzLmR0cwppbmRleCBkYWY5NDMzLi43NjVlNDNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY2YWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY2YWRzLmR0cwpAQCAtMiw2ICsyLDcgQEAKICAqIE1QQzg2NiBBRFMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgogICogQ29weXJpZ2h0IDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtOSw2ICsxMCw3IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKy9kdHMtdjEvOwogCiAvIHsKIAltb2RlbCA9ICJNUEM4NjZBRFMiOwpAQCAtMjIsMzcgKzI0LDM3IEBACiAKIAkJUG93ZXJQQyw4NjZAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDA+OwotCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MTA+OwkvLyAxNiBieXRlcwotCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MTA+OwkvLyAxNiBieXRlcwotCQkJZC1jYWNoZS1zaXplID0gPDIwMDA+OwkJLy8gTDEsIDhLCi0JCQlpLWNhY2hlLXNpemUgPSA8NDAwMD47CQkvLyBMMSwgMTZLCisJCQlyZWcgPSA8MHgwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDE2PjsJLy8gMTYgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDE2PjsJLy8gMTYgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDIwMDA+OwkJLy8gTDEsIDhLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJCS8vIEwxLCAxNksKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47Ci0JCQlpbnRlcnJ1cHRzID0gPGYgMj47CS8vIGRlY3JlbWVudGVyIGludGVycnVwdAorCQkJaW50ZXJydXB0cyA9IDwxNSAyPjsJLy8gZGVjcmVtZW50ZXIgaW50ZXJydXB0CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MDAwMDAwMDAgODAwMDAwPjsKKwkJcmVnID0gPDB4MCAweDgwMDAwMD47CiAJfTsKIAogCWxvY2FsYnVzQGZmMDAwMTAwIHsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY2LWxvY2FsYnVzIiwgImZzbCxwcTEtbG9jYWxidXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDxmZjAwMDEwMCA0MD47CisJCXJlZyA9IDwweGZmMDAwMTAwIDB4NDA+OwogCiAJCXJhbmdlcyA9IDwKLQkJCTEgMCBmZjA4MDAwMCAwMDAwODAwMAotCQkJNSAwIGZmMGEwMDAwIDAwMDA4MDAwCisJCQkweDEgMHgwIDB4ZmYwODAwMDAgMHg4MDAwCisJCQkweDUgMHgwIDB4ZmYwYTAwMDAgMHg4MDAwCiAJCT47CiAKIAkJYm9hcmQtY29udHJvbEAxLDAgewotCQkJcmVnID0gPDEgMCAyMCA1IDMwMCA0PjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4MjAgMHg1IDB4MzAwIDB4ND47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjZhZHMtYmNzciI7CiAJCX07CiAJfTsKQEAgLTYxLDE3ICs2MywxNyBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7Ci0JCXJhbmdlcyA9IDwwIGZmMDAwMDAwIDAwMTAwMDAwPjsKLQkJcmVnID0gPGZmMDAwMDAwIDAwMDAwMjAwPjsKKwkJcmFuZ2VzID0gPDB4MCAweGZmMDAwMDAwIDB4MTAwMDAwPjsKKwkJcmVnID0gPDB4ZmYwMDAwMDAgMHgyMDA+OwogCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCiAJCW1kaW9AZTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2Ni1mZWMtbWRpbyIsICJmc2wscHExLWZlYy1tZGlvIjsKLQkJCXJlZyA9IDxlMDAgMTg4PjsKKwkJCXJlZyA9IDwweGUwMCAweDE4OD47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJUEhZOiBldGhlcm5ldC1waHlAZiB7Ci0JCQkJcmVnID0gPGY+OworCQkJCXJlZyA9IDwweGY+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQl9OwpAQCAtODAsNyArODIsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjYtZmVjLWVuZXQiLAogCQkJICAgICAgICAgICAgICJmc2wscHExLWZlYy1lbmV0IjsKLQkJCXJlZyA9IDxlMDAgMTg4PjsKKwkJCXJlZyA9IDwweGUwMCAweDE4OD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MyAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CkBAIC05MSw3ICs5Myw3IEBACiAJCVBJQzogcGljQDAgewogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDAgMjQ+OworCQkJcmVnID0gPDB4MCAweDI0PjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2Ni1waWMiLCAiZnNsLHBxMS1waWMiOwogCQl9OwogCkBAIC0xMDAsNyArMTAyLDcgQEAKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY2LWNwbSIsICJmc2wsY3BtMSI7CiAJCQlyYW5nZXM7Ci0JCQlyZWcgPSA8OWMwIDQwPjsKKwkJCXJlZyA9IDwweDljMCAweDQwPjsKIAkJCWJyZy1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDAgMj47CS8vIGNwbSBlcnJvciBpbnRlcnJ1cHQKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OwpAQCAtMTA4LDExICsxMTAsMTEgQEAKIAkJCW11cmFtQDIwMDAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJhbmdlcyA9IDwwIDIwMDAgMjAwMD47CisJCQkJcmFuZ2VzID0gPDB4MCAweDIwMDAgMHgyMDAwPjsKIAogCQkJCWRhdGFAMCB7CiAJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKLQkJCQkJcmVnID0gPDAgMWMwMD47CisJCQkJCXJlZyA9IDwweDAgMHgxYzAwPjsKIAkJCQl9OwogCQkJfTsKIApAQCAtMTIwLDcgKzEyMiw3IEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY2LWJyZyIsCiAJCQkJCSAgICAgImZzbCxjcG0xLWJyZyIsCiAJCQkJCSAgICAgImZzbCxjcG0tYnJnIjsKLQkJCQlyZWcgPSA8OWYwIDEwPjsKKwkJCQlyZWcgPSA8MHg5ZjAgMHgxMD47CiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIApAQCAtMTMwLDcgKzEzMiw3IEBACiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDUgMiAwIDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47Ci0JCQkJcmVnID0gPDkzMCAyMD47CisJCQkJcmVnID0gPDB4OTMwIDB4MjA+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2Ni1jcG0tcGljIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLXBpYyI7CiAJCQl9OwpAQCAtMTQwLDMxICsxNDIsMzEgQEAKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2Ni1zbWMtdWFydCIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtMS1zbWMtdWFydCI7Ci0JCQkJcmVnID0gPGE4MCAxMCAzZTgwIDQwPjsKKwkJCQlyZWcgPSA8MHhhODAgMHgxMCAweDNlODAgMHg0MD47CiAJCQkJaW50ZXJydXB0cyA9IDw0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDwxPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MDA5MD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4OTA+OwogCQkJfTsKIAogCQkJc2VyaWFsQGE5MCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjYtc21jLXVhcnQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtc21jLXVhcnQiOwotCQkJCXJlZyA9IDxhOTAgMTAgM2Y4MCA0MD47CisJCQkJcmVnID0gPDB4YTkwIDB4MTAgMHgzZjgwIDB4NDA+OwogCQkJCWludGVycnVwdHMgPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQ1BNX1BJQz47CiAJCQkJZnNsLGNwbS1icmcgPSA8Mj47Ci0JCQkJZnNsLGNwbS1jb21tYW5kID0gPDAwZDA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweGQwPjsKIAkJCX07CiAKIAkJCWV0aGVybmV0QGEwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY2LXNjYy1lbmV0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLXNjYy1lbmV0IjsKLQkJCQlyZWcgPSA8YTAwIDE4IDNjMDAgMTAwPjsKKwkJCQlyZWcgPSA8MHhhMDAgMHgxOCAweDNjMDAgMHgxMDA+OwogCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJCWludGVycnVwdHMgPSA8MWU+OworCQkJCWludGVycnVwdHMgPSA8MzA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OwogCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwwMDAwPjsKIAkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg4NWFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODg1YWRzLmR0cwppbmRleCBkODRhMDEyLi45ODk1MDQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODg1YWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODg1YWRzLmR0cwpAQCAtMiw3ICsyLDcgQEAKICAqIE1QQzg4NSBBRFMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgogICogQ29weXJpZ2h0IDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTAsNiArMTAsNyBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisvZHRzLXYxLzsKIAogLyB7CiAJbW9kZWwgPSAiTVBDODg1QURTIjsKQEAgLTIzLDQ1ICsyNCw0NSBAQAogCiAJCVBvd2VyUEMsODg1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwwPjsKLQkJCWQtY2FjaGUtbGluZS1zaXplID0gPGQjMTY+OwotCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8ZCMxNj47Ci0JCQlkLWNhY2hlLXNpemUgPSA8ZCM4MTkyPjsKLQkJCWktY2FjaGUtc2l6ZSA9IDxkIzgxOTI+OworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwxNj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwxNj47CisJCQlkLWNhY2hlLXNpemUgPSA8ODE5Mj47CisJCQlpLWNhY2hlLXNpemUgPSA8ODE5Mj47CiAJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CiAJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDxmIDI+OwkvLyBkZWNyZW1lbnRlciBpbnRlcnJ1cHQKKwkJCWludGVycnVwdHMgPSA8MTUgMj47CS8vIGRlY3JlbWVudGVyIGludGVycnVwdAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJfTsKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAgMD47CisJCXJlZyA9IDwweDAgMHgwPjsKIAl9OwogCiAJbG9jYWxidXNAZmYwMDAxMDAgewogCQljb21wYXRpYmxlID0gImZzbCxtcGM4ODUtbG9jYWxidXMiLCAiZnNsLHBxMS1sb2NhbGJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmVnID0gPGZmMDAwMTAwIDQwPjsKKwkJcmVnID0gPDB4ZmYwMDAxMDAgMHg0MD47CiAKIAkJcmFuZ2VzID0gPAotCQkJMCAwIGZlMDAwMDAwIDAwODAwMDAwCi0JCQkxIDAgZmYwODAwMDAgMDAwMDgwMDAKLQkJCTUgMCBmZjBhMDAwMCAwMDAwODAwMAorCQkJMHgwIDB4MCAweGZlMDAwMDAwIDB4ODAwMDAwCisJCQkweDEgMHgwIDB4ZmYwODAwMDAgMHg4MDAwCisJCQkweDUgMHgwIDB4ZmYwYTAwMDAgMHg4MDAwCiAJCT47CiAKIAkJZmxhc2hAMCwwIHsKIAkJCWNvbXBhdGlibGUgPSAiamVkZWMtZmxhc2giOwotCQkJcmVnID0gPDAgMCA4MDAwMDA+OworCQkJcmVnID0gPDB4MCAweDAgMHg4MDAwMDA+OwogCQkJYmFuay13aWR0aCA9IDw0PjsKIAkJCWRldmljZS13aWR0aCA9IDwxPjsKIAkJfTsKIAogCQlib2FyZC1jb250cm9sQDEsMCB7Ci0JCQlyZWcgPSA8MSAwIDIwIDUgMzAwIDQ+OworCQkJcmVnID0gPDB4MSAweDAgMHgyMCAweDUgMHgzMDAgMHg0PjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NWFkcy1iY3NyIjsKIAkJfTsKIAl9OwpAQCAtNzEsMzAgKzcyLDMwIEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJcmFuZ2VzID0gPDAgZmYwMDAwMDAgMDAwMDQwMDA+OworCQlyYW5nZXMgPSA8MHgwIDB4ZmYwMDAwMDAgMHg0MDAwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAogCQkvLyBUZW1wb3JhcnkgLS0gd2lsbCBnbyBhd2F5IG9uY2Uga2VybmVsIHVzZXMgcmFuZ2VzIGZvciBnZXRfaW1tcmJhc2UoKS4KLQkJcmVnID0gPGZmMDAwMDAwIDQwMDA+OworCQlyZWcgPSA8MHhmZjAwMDAwMCAweDQwMDA+OwogCiAJCW1kaW9AZTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1mZWMtbWRpbyIsICJmc2wscHExLWZlYy1tZGlvIjsKLQkJCXJlZyA9IDxlMDAgMTg4PjsKKwkJCXJlZyA9IDwweGUwMCAweDE4OD47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCiAJCQlQSFkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJcmVnID0gPDA+OworCQkJCXJlZyA9IDwweDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCiAJCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJcmVnID0gPDE+OworCQkJCXJlZyA9IDwweDE+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCiAJCQlQSFkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJcmVnID0gPDI+OworCQkJCXJlZyA9IDwweDI+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwogCQl9OwpAQCAtMTAzLDcgKzEwNCw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1mZWMtZW5ldCIsCiAJCQkgICAgICAgICAgICAgImZzbCxwcTEtZmVjLWVuZXQiOwotCQkJcmVnID0gPGUwMCAxODg+OworCQkJcmVnID0gPDB4ZTAwIDB4MTg4PjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzIDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKQEAgLTExNSw3ICsxMTYsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4ODUtZmVjLWVuZXQiLAogCQkJICAgICAgICAgICAgICJmc2wscHExLWZlYy1lbmV0IjsKLQkJCXJlZyA9IDwxZTAwIDE4OD47CisJCQlyZWcgPSA8MHgxZTAwIDB4MTg4PjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDw3IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKQEAgLTEyNiw3ICsxMjcsNyBAQAogCQlQSUM6IGludGVycnVwdC1jb250cm9sbGVyQDAgewogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDAgMjQ+OworCQkJcmVnID0gPDB4MCAweDI0PjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1waWMiLCAiZnNsLHBxMS1waWMiOwogCQl9OwogCkBAIC0xMzYsMjkgKzEzNywyOSBAQAogCQkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCQljb21wYXRpYmxlID0gImZzbCxwcS1wY21jaWEiOwogCQkJZGV2aWNlX3R5cGUgPSAicGNtY2lhIjsKLQkJCXJlZyA9IDw4MCA4MD47CisJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47Ci0JCQlpbnRlcnJ1cHRzID0gPGQgMT47CisJCQlpbnRlcnJ1cHRzID0gPDEzIDE+OwogCQl9OwogCiAJCWNwbUA5YzAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1jcG0iLCAiZnNsLGNwbTEiOwotCQkJY29tbWFuZC1wcm9jID0gPDljMD47CisJCQljb21tYW5kLXByb2MgPSA8MHg5YzA+OwogCQkJaW50ZXJydXB0cyA9IDwwPjsJLy8gY3BtIGVycm9yIGludGVycnVwdAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQ1BNX1BJQz47Ci0JCQlyZWcgPSA8OWMwIDQwPjsKKwkJCXJlZyA9IDwweDljMCAweDQwPjsKIAkJCXJhbmdlczsKIAogCQkJbXVyYW1AMjAwMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQkJcmFuZ2VzID0gPDAgMjAwMCAyMDAwPjsKKwkJCQlyYW5nZXMgPSA8MHgwIDB4MjAwMCAweDIwMDA+OwogCiAJCQkJZGF0YUAwIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtLWRhdGEiOwotCQkJCQlyZWcgPSA8MCAxYzAwPjsKKwkJCQkJcmVnID0gPDB4MCAweDFjMDA+OwogCQkJCX07CiAJCQl9OwogCkBAIC0xNjcsNyArMTY4LDcgQEAKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLWJyZyIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtLWJyZyI7CiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJCXJlZyA9IDw5ZjAgMTA+OworCQkJCXJlZyA9IDwweDlmMCAweDEwPjsKIAkJCX07CiAKIAkJCUNQTV9QSUM6IGludGVycnVwdC1jb250cm9sbGVyQDkzMCB7CkBAIC0xNzUsNyArMTc2LDcgQEAKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkJCWludGVycnVwdHMgPSA8NSAyIDAgMj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKLQkJCQlyZWcgPSA8OTMwIDIwPjsKKwkJCQlyZWcgPSA8MHg5MzAgMHgyMD47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODg1LWNwbS1waWMiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtcGljIjsKIAkJCX07CkBAIC0xODQsMzQgKzE4NSwzNCBAQAogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODg1LXNtYy11YXJ0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLXNtYy11YXJ0IjsKLQkJCQlyZWcgPSA8YTgwIDEwIDNlODAgNDA+OworCQkJCXJlZyA9IDwweGE4MCAweDEwIDB4M2U4MCAweDQwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkNQTV9QSUM+OwogCQkJCWZzbCxjcG0tYnJnID0gPDE+OwotCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwwMDkwPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHg5MD47CiAJCQl9OwogCiAJCQlzZXJpYWxAYTkwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg4NS1zbWMtdWFydCIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtMS1zbWMtdWFydCI7Ci0JCQkJcmVnID0gPGE5MCAxMCAzZjgwIDQwPjsKKwkJCQlyZWcgPSA8MHhhOTAgMHgxMCAweDNmODAgMHg0MD47CiAJCQkJaW50ZXJydXB0cyA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDwyPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MDBkMD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4ZDA+OwogCQkJfTsKIAogCQkJZXRoZXJuZXRAYTQwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4ODUtc2NjLWVuZXQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTEtc2NjLWVuZXQiOwotCQkJCXJlZyA9IDxhNDAgMTggM2UwMCAxMDA+OworCQkJCXJlZyA9IDwweGE0MCAweDE4IDB4M2UwMCAweDEwMD47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQkJaW50ZXJydXB0cyA9IDwxYz47CisJCQkJaW50ZXJydXB0cyA9IDwyOD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQ1BNX1BJQz47CiAJCQkJcGh5LWhhbmRsZSA9IDwmUEhZMj47Ci0JCQkJZnNsLGNwbS1jb21tYW5kID0gPDAwODA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDgwPjsKIAkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDI+OwogCQkJfTsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wcTJmYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wcTJmYWRzLmR0cwppbmRleCAyZDU2NDkyMS4uYjJkNjEwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BxMmZhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wcTJmYWRzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEZXZpY2UgVHJlZSBmb3IgdGhlIFBRMkZBRFMtWlUgYm9hcmQgd2l0aCBhbiBNUEM4MjgwIGNoaXAuCiAgKgotICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDcsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTksNiArOSw4IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKy9kdHMtdjEvOworCiAvIHsKIAltb2RlbCA9ICJwcTJmYWRzIjsKIAljb21wYXRpYmxlID0gImZzbCxwcTJmYWRzIjsKQEAgLTIxLDExICsyMywxMSBAQAogCiAJCWNwdUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MD47Ci0JCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDxkIzMyPjsKLQkJCWktY2FjaGUtbGluZS1zaXplID0gPGQjMzI+OwotCQkJZC1jYWNoZS1zaXplID0gPGQjMTYzODQ+OwotCQkJaS1jYWNoZS1zaXplID0gPGQjMTYzODQ+OworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MTYzODQ+OworCQkJaS1jYWNoZS1zaXplID0gPDE2Mzg0PjsKIAkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJfTsKQEAgLTMzLDcgKzM1LDcgQEAKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCXJlZyA9IDwwIDA+OworCQlyZWcgPSA8MHgwIDB4MD47CiAJfTsKIAogCWxvY2FsYnVzQGYwMDEwMTAwIHsKQEAgLTQxLDY3ICs0Myw2NyBAQAogCQkgICAgICAgICAgICAgImZzbCxwcTItbG9jYWxidXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJlZyA9IDxmMDAxMDEwMCA2MD47CisJCXJlZyA9IDwweGYwMDEwMTAwIDB4NjA+OwogCi0JCXJhbmdlcyA9IDwwIDAgZmUwMDAwMDAgMDA4MDAwMDAKLQkJICAgICAgICAgIDEgMCBmNDUwMDAwMCAwMDAwODAwMAotCQkgICAgICAgICAgOCAwIGY4MjAwMDAwIDAwMDA4MDAwPjsKKwkJcmFuZ2VzID0gPDB4MCAweDAgMHhmZTAwMDAwMCAweDgwMDAwMAorCQkgICAgICAgICAgMHgxIDB4MCAweGY0NTAwMDAwIDB4ODAwMAorCQkgICAgICAgICAgMHg4IDB4MCAweGY4MjAwMDAwIDB4ODAwMD47CiAKIAkJZmxhc2hAMCwwIHsKIAkJCWNvbXBhdGlibGUgPSAiamVkZWMtZmxhc2giOwotCQkJcmVnID0gPDAgMCA4MDAwMDA+OworCQkJcmVnID0gPDB4MCAweDAgMHg4MDAwMDA+OwogCQkJYmFuay13aWR0aCA9IDw0PjsKIAkJCWRldmljZS13aWR0aCA9IDwxPjsKIAkJfTsKIAogCQliY3NyQDEsMCB7Ci0JCQlyZWcgPSA8MSAwIDIwPjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4MjA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wscHEyZmFkcy1iY3NyIjsKIAkJfTsKIAogCQlQQ0lfUElDOiBwaWNAOCwwIHsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCXJlZyA9IDw4IDAgOD47CisJCQlyZWcgPSA8MHg4IDB4MCAweDg+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wscHEyYWRzLXBjaS1waWMiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKLQkJCWludGVycnVwdHMgPSA8MTggOD47CisJCQlpbnRlcnJ1cHRzID0gPDI0IDg+OwogCQl9OwogCX07CiAKIAlwY2lAZjAwMTA4MDAgewogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQlyZWcgPSA8ZjAwMTA4MDAgMTBjIGYwMDEwMWFjIDggZjAwMTAxYzQgOD47CisJCXJlZyA9IDwweGYwMDEwODAwIDB4MTBjIDB4ZjAwMTAxYWMgMHg4IDB4ZjAwMTAxYzQgMHg4PjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI4MC1wY2kiLCAiZnNsLHBxMi1wY2kiOwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDxkIzY2MDAwMDAwPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjYwMDAwMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJICAgICAgICAgICAgICAgIC8qIElEU0VMIDB4MTYgKi8KLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCAxICZQQ0lfUElDIDAKLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCAyICZQQ0lfUElDIDEKLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCAzICZQQ0lfUElDIDIKLQkJICAgICAgICAgICAgICAgICBiMDAwIDAgMCA0ICZQQ0lfUElDIDMKKwkJICAgICAgICAgICAgICAgICAweGIwMDAgMHgwIDB4MCAweDEgJlBDSV9QSUMgMAorCQkgICAgICAgICAgICAgICAgIDB4YjAwMCAweDAgMHgwIDB4MiAmUENJX1BJQyAxCisJCSAgICAgICAgICAgICAgICAgMHhiMDAwIDB4MCAweDAgMHgzICZQQ0lfUElDIDIKKwkJICAgICAgICAgICAgICAgICAweGIwMDAgMHgwIDB4MCAweDQgJlBDSV9QSUMgMwogCiAJCSAgICAgICAgICAgICAgICAvKiBJRFNFTCAweDE3ICovCi0JCSAgICAgICAgICAgICAgICAgYjgwMCAwIDAgMSAmUENJX1BJQyA0Ci0JCSAgICAgICAgICAgICAgICAgYjgwMCAwIDAgMiAmUENJX1BJQyA1Ci0JCSAgICAgICAgICAgICAgICAgYjgwMCAwIDAgMyAmUENJX1BJQyA2Ci0JCSAgICAgICAgICAgICAgICAgYjgwMCAwIDAgNCAmUENJX1BJQyA3CisJCSAgICAgICAgICAgICAgICAgMHhiODAwIDB4MCAweDAgMHgxICZQQ0lfUElDIDQKKwkJICAgICAgICAgICAgICAgICAweGI4MDAgMHgwIDB4MCAweDIgJlBDSV9QSUMgNQorCQkgICAgICAgICAgICAgICAgIDB4YjgwMCAweDAgMHgwIDB4MyAmUENJX1BJQyA2CisJCSAgICAgICAgICAgICAgICAgMHhiODAwIDB4MCAweDAgMHg0ICZQQ0lfUElDIDcKIAogCQkgICAgICAgICAgICAgICAgLyogSURTRUwgMHgxOCAqLwotCQkgICAgICAgICAgICAgICAgIGMwMDAgMCAwIDEgJlBDSV9QSUMgOAotCQkgICAgICAgICAgICAgICAgIGMwMDAgMCAwIDIgJlBDSV9QSUMgOQotCQkgICAgICAgICAgICAgICAgIGMwMDAgMCAwIDMgJlBDSV9QSUMgYQotCQkgICAgICAgICAgICAgICAgIGMwMDAgMCAwIDQgJlBDSV9QSUMgYj47CisJCSAgICAgICAgICAgICAgICAgMHhjMDAwIDB4MCAweDAgMHgxICZQQ0lfUElDIDgKKwkJICAgICAgICAgICAgICAgICAweGMwMDAgMHgwIDB4MCAweDIgJlBDSV9QSUMgOQorCQkgICAgICAgICAgICAgICAgIDB4YzAwMCAweDAgMHgwIDB4MyAmUENJX1BJQyAxMAorCQkgICAgICAgICAgICAgICAgIDB4YzAwMCAweDAgMHgwIDB4NCAmUENJX1BJQyAxMT47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKLQkJaW50ZXJydXB0cyA9IDwxMiA4PjsKLQkJcmFuZ2VzID0gPDQyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAotCQkgICAgICAgICAgMDIwMDAwMDAgMCBhMDAwMDAwMCBhMDAwMDAwMCAwIDIwMDAwMDAwCi0JCSAgICAgICAgICAwMTAwMDAwMCAwIDAwMDAwMDAwIGY2MDAwMDAwIDAgMDIwMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE4IDg+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCSAgICAgICAgICAweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkgICAgICAgICAgMHgxMDAwMDAwIDB4MCAweDAgMHhmNjAwMDAwMCAweDAgMHgyMDAwMDAwPjsKIAl9OwogCiAJc29jQGYwMDAwMDAwIHsKQEAgLTEwOSwyNyArMTExLDI3IEBACiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjgwIiwgImZzbCxwcTItc29jIjsKLQkJcmFuZ2VzID0gPDAwMDAwMDAwIGYwMDAwMDAwIDAwMDUzMDAwPjsKKwkJcmFuZ2VzID0gPDB4MCAweGYwMDAwMDAwIDB4NTMwMDA+OwogCiAJCS8vIFRlbXBvcmFyeSAtLSB3aWxsIGdvIGF3YXkgb25jZSBrZXJuZWwgdXNlcyByYW5nZXMgZm9yIGdldF9pbW1yYmFzZSgpLgotCQlyZWcgPSA8ZjAwMDAwMDAgMDAwNTMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDUzMDAwPjsKIAogCQljcG1AMTE5YzAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjgwLWNwbSIsICJmc2wsY3BtMiI7Ci0JCQlyZWcgPSA8MTE5YzAgMzA+OworCQkJcmVnID0gPDB4MTE5YzAgMHgzMD47CiAJCQlyYW5nZXM7CiAKIAkJCW11cmFtQDAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJhbmdlcyA9IDwwIDAgMTAwMDA+OworCQkJCXJhbmdlcyA9IDwweDAgMHgwIDB4MTAwMDA+OwogCiAJCQkJZGF0YUAwIHsKIAkJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtLW11cmFtLWRhdGEiOwotCQkJCQlyZWcgPSA8MCAyMDAwIDk4MDAgODAwPjsKKwkJCQkJcmVnID0gPDB4MCAweDIwMDAgMHg5ODAwIDB4ODAwPjsKIAkJCQl9OwogCQkJfTsKIApAQCAtMTM3LDUzICsxMzksNTMgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjgwLWJyZyIsCiAJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1icmciLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbS1icmciOwotCQkJCXJlZyA9IDwxMTlmMCAxMCAxMTVmMCAxMD47CisJCQkJcmVnID0gPDB4MTE5ZjAgMHgxMCAweDExNWYwIDB4MTA+OwogCQkJfTsKIAogCQkJc2VyaWFsQDExYTAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyODAtc2NjLXVhcnQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItc2NjLXVhcnQiOwotCQkJCXJlZyA9IDwxMWEwMCAyMCA4MDAwIDEwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwyOCA4PjsKKwkJCQlyZWcgPSA8MHgxMWEwMCAweDIwIDB4ODAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MCA4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQkJCWZzbCxjcG0tYnJnID0gPDE+OwotCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwwMDgwMDAwMD47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4ODAwMDAwPjsKIAkJCX07CiAKIAkJCXNlcmlhbEAxMWEyMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjgwLXNjYy11YXJ0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLXNjYy11YXJ0IjsKLQkJCQlyZWcgPSA8MTFhMjAgMjAgODEwMCAxMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjkgOD47CisJCQkJcmVnID0gPDB4MTFhMjAgMHgyMCAweDgxMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8NDEgOD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJCQlmc2wsY3BtLWJyZyA9IDwyPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MDRhMDAwMDA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDRhMDAwMDA+OwogCQkJfTsKIAogCQkJZXRoZXJuZXRAMTEzMjAgewogCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyODAtZmNjLWVuZXQiLAogCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItZmNjLWVuZXQiOwotCQkJCXJlZyA9IDwxMTMyMCAyMCA4NTAwIDEwMCAxMTNiMCAxPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIxIDg+OworCQkJCXJlZyA9IDwweDExMzIwIDB4MjAgMHg4NTAwIDB4MTAwIDB4MTEzYjAgMHgxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMzIDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CiAJCQkJcGh5LWhhbmRsZSA9IDwmUEhZMD47CiAJCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwwPjsKLQkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MTYyMDAzMDA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDE2MjAwMzAwPjsKIAkJCX07CiAKIAkJCWV0aGVybmV0QDExMzQwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjgwLWZjYy1lbmV0IiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLWZjYy1lbmV0IjsKLQkJCQlyZWcgPSA8MTEzNDAgMjAgODYwMCAxMDAgMTEzZDAgMT47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMiA4PjsKKwkJCQlyZWcgPSA8MHgxMTM0MCAweDIwIDB4ODYwMCAweDEwMCAweDExM2QwIDB4MT47CisJCQkJaW50ZXJydXB0cyA9IDwzNCA4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQkJCXBoeS1oYW5kbGUgPSA8JlBIWTE+OwogCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47Ci0JCQkJZnNsLGNwbS1jb21tYW5kID0gPDFhNDAwMzAwPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHgxYTQwMDMwMD47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAgZTAgMGMgMDAgNzkgMDFdOwogCQkJfTsKIApAQCAtMTk0LDIxICsxOTYsMjEgQEAKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLW1kaW8tYml0YmFuZyI7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQkJcmVnID0gPDEwZDQwIDE0PjsKKwkJCQlyZWcgPSA8MHgxMGQ0MCAweDE0PjsKIAkJCQlmc2wsbWRpby1waW4gPSA8OT47Ci0JCQkJZnNsLG1kYy1waW4gPSA8YT47CisJCQkJZnNsLG1kYy1waW4gPSA8MTA+OwogCiAJCQkJUEhZMDogZXRoZXJuZXQtcGh5QDAgewogCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwotCQkJCQlyZWcgPSA8MD47CisJCQkJCWludGVycnVwdHMgPSA8MjUgMj47CisJCQkJCXJlZyA9IDwweDA+OwogCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCX07CiAKIAkJCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7CiAJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47Ci0JCQkJCWludGVycnVwdHMgPSA8MTkgMj47Ci0JCQkJCXJlZyA9IDwzPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyNSAyPjsKKwkJCQkJcmVnID0gPDB4Mz47CiAJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJfTsKIAkJCX07CkBAIC0yMTgsMTcgKzIyMCwxNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyODAtdXNiIiwKIAkJCQkgICAgICAgICAgICAgImZzbCxjcG0yLXVzYiI7Ci0JCQkJcmVnID0gPDExYjYwIDE4IDhiMDAgMTAwPjsKKwkJCQlyZWcgPSA8MHgxMWI2MCAweDE4IDB4OGIwMCAweDEwMD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKLQkJCQlpbnRlcnJ1cHRzID0gPGIgOD47Ci0JCQkJZnNsLGNwbS1jb21tYW5kID0gPDJlNjAwMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDExIDg+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDJlNjAwMDAwPjsKIAkJCX07CiAJCX07CiAKIAkJUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMGMwMCB7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQlyZWcgPSA8MTBjMDAgODA+OworCQkJcmVnID0gPDB4MTBjMDAgMHg4MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjgwLXBpYyIsICJmc2wsY3BtMi1waWMiOwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcHJwbWMyODAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wcnBtYzI4MDAuZHRzCmluZGV4IDI5N2RmYTUuLjFlZTZmZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wcnBtYzI4MDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wcnBtYzI4MDAuZHRzCkBAIC0xMSw2ICsxMSw4IEBACiAgKiBpZiBpdCBjYW4gZGV0ZXJtaW5lIHRoZSBleGFjdCBQclBNQyB0eXBlLgogICovCiAKKy9kdHMtdjEvOworCiAvIHsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKQEAgLTI1LDQ2ICsyNyw0NiBAQAogCQlQb3dlclBDLDc0NDcgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKIAkJCXJlZyA9IDwwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyYmIwYjE0MD47CS8qIERlZmF1bHQgKDczMyBNSHopICovCi0JCQlidXMtZnJlcXVlbmN5ID0gPDdmMjgxNTU+OwkvKiAxMzMuMzMzMzMzIE1IeiAqLwotCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDFmY2EwNTU+OwkvKiAzMy4zMzMzMzMgTUh6ICovCi0JCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47Ci0JCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47Ci0JCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47Ci0JCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NzMzMzMzMzMzPjsJLyogRGVmYXVsdCAqLworCQkJYnVzLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MDAwMDAwMDAgMjAwMDAwMDA+OwkvKiBEZWZhdWx0ICg1MTJNQikgKi8KKwkJcmVnID0gPDB4MCAweDIwMDAwMDAwPjsJCQkvKiBEZWZhdWx0ICg1MTJNQikgKi8KIAl9OwogCi0JbXY2NHg2MEBmMTAwMDAwMCB7IC8qIE1hcnZlbGwgRGlzY292ZXJ5ICovCisJc3lzdGVtLWNvbnRyb2xsZXJAZjEwMDAwMDAgeyAvKiBNYXJ2ZWxsIERpc2NvdmVyeSBtdjY0MzYwICovCiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJbW9kZWwgPSAibXY2NDM2MCI7CQkJLyogRGVmYXVsdCAqLwotCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MCI7Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDw3ZjI4MTU1PjsJCS8qIDEzMy4zMzMzMzMgTUh6ICovCi0JCXJlZyA9IDxmMTAwMDAwMCAwMDAxMDAwMD47Ci0JCXZpcnR1YWwtcmVnID0gPGYxMDAwMDAwPjsKLQkJcmFuZ2VzID0gPDg4MDAwMDAwIDg4MDAwMDAwIDAxMDAwMDAwCS8qIFBDSSAwIEkvTyBTcGFjZSAqLwotCQkJICA4MDAwMDAwMCA4MDAwMDAwMCAwODAwMDAwMAkvKiBQQ0kgMCBNRU0gU3BhY2UgKi8KLQkJCSAgYTAwMDAwMDAgYTAwMDAwMDAgMDQwMDAwMDAJLyogVXNlciBGTEFTSCAqLwotCQkJICAwMDAwMDAwMCBmMTAwMDAwMCAwMDAxMDAwMAkvKiBCcmlkZ2UncyByZWdzICovCi0JCQkgIGYyMDAwMDAwIGYyMDAwMDAwIDAwMDQwMDAwPjsJLyogSW50ZWdyYXRlZCBTUkFNICovCisJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMzMzMzMzMz47CisJCXJlZyA9IDwweGYxMDAwMDAwIDB4MTAwMDA+OworCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDAwMDAwPjsKKwkJcmFuZ2VzID0gPDB4ODgwMDAwMDAgMHg4ODAwMDAwMCAweDEwMDAwMDAgLyogUENJIDAgSS9PIFNwYWNlICovCisJCQkgIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDgwMDAwMDAgLyogUENJIDAgTUVNIFNwYWNlICovCisJCQkgIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDQwMDAwMDAgLyogVXNlciBGTEFTSCAqLworCQkJICAweDAwMDAwMDAwIDB4ZjEwMDAwMDAgMHgwMDEwMDAwIC8qIEJyaWRnZSdzIHJlZ3MgKi8KKwkJCSAgMHhmMjAwMDAwMCAweGYyMDAwMDAwIDB4MDA0MDAwMD47LyogSW50ZWdyYXRlZCBTUkFNICovCiAKIAkJZmxhc2hAYTAwMDAwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAicm9tIjsKIAkJCWNvbXBhdGlibGUgPSAiZGlyZWN0LW1hcHBlZCI7Ci0JCQlyZWcgPSA8YTAwMDAwMDAgNDAwMDAwMD47IC8qIERlZmF1bHQgKDY0TUIpICovCisJCQlyZWcgPSA8MHhhMDAwMDAwMCAweDQwMDAwMDA+OyAvKiBEZWZhdWx0ICg2NE1CKSAqLwogCQkJcHJvYmUtdHlwZSA9ICJDRkkiOwogCQkJYmFuay13aWR0aCA9IDw0PjsKLQkJCXBhcnRpdGlvbnMgPSA8MDAwMDAwMDAgMDAxMDAwMDAgLyogUk8gKi8KLQkJCQkgICAgICAwMDEwMDAwMCAwMDA0MDAwMSAvKiBSVyAqLwotCQkJCSAgICAgIDAwMTQwMDAwIDAwNDAwMDAwIC8qIFJPICovCi0JCQkJICAgICAgMDA1NDAwMDAgMDM5YzAwMDAgLyogUk8gKi8KLQkJCQkgICAgICAwM2YwMDAwMCAwMDEwMDAwMD47IC8qIFJPICovCisJCQlwYXJ0aXRpb25zID0gPDB4MDAwMDAwMDAgMHgwMDEwMDAwMCAvKiBSTyAqLworCQkJCSAgICAgIDB4MDAxMDAwMDAgMHgwMDA0MDAwMSAvKiBSVyAqLworCQkJCSAgICAgIDB4MDAxNDAwMDAgMHgwMDQwMDAwMCAvKiBSTyAqLworCQkJCSAgICAgIDB4MDA1NDAwMDAgMHgwMzljMDAwMCAvKiBSTyAqLworCQkJCSAgICAgIDB4MDNmMDAwMDAgMHgwMDEwMDAwMD47IC8qIFJPICovCiAJCQlwYXJ0aXRpb24tbmFtZXMgPSAiRlcgSW1hZ2UgQSIsICJGVyBDb25maWcgRGF0YSIsICJLZXJuZWwgSW1hZ2UiLCAiRmlsZXN5c3RlbSIsICJGVyBJbWFnZSBCIjsKIAkJfTsKIApAQCAtNzIsMTcxICs3NCwxNTMgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLW1kaW8iOwotCQkJZXRoZXJuZXQtcGh5QDEgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtbWRpbyI7CisJCQlQSFkwOiBldGhlcm5ldC1waHlAMSB7CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0MjEiOwotCQkJCWludGVycnVwdHMgPSA8NGM+OwkvKiBHUFAgMTIgKi8KLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQkJCWludGVycnVwdHMgPSA8NzY+OwkvKiBHUFAgMTIgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQkJCXJlZyA9IDwxPjsKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMyB7CisJCQlQSFkxOiBldGhlcm5ldC1waHlAMyB7CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0MjEiOwotCQkJCWludGVycnVwdHMgPSA8NGM+OwkvKiBHUFAgMTIgKi8KLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQkJCWludGVycnVwdHMgPSA8NzY+OwkvKiBHUFAgMTIgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQkJCXJlZyA9IDwzPjsKIAkJCX07CiAJCX07CiAKLQkJZXRoZXJuZXRAMjAwMCB7Ci0JCQlyZWcgPSA8MjAwMCAyMDAwPjsKLQkJCWV0aDAgeworCQlldGhlcm5ldC1ncm91cEAyMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1ldGgtZ3JvdXAiOworCQkJcmVnID0gPDB4MjAwMCAweDIwMDA+OworCQkJZXRoZXJuZXRAMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtZXRoIjsKLQkJCQlibG9jay1pbmRleCA9IDwwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OwotCQkJCXBoeSA9IDwmL212NjR4NjAvbWRpby9ldGhlcm5ldC1waHlAMT47CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtZXRoIjsKKwkJCQlyZWcgPSA8MD47CisJCQkJaW50ZXJydXB0cyA9IDwzMj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlwaHkgPSA8JlBIWTA+OwogCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJfTsKLQkJCWV0aDEgeworCQkJZXRoZXJuZXRAMSB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtZXRoIjsKLQkJCQlibG9jay1pbmRleCA9IDwxPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OwotCQkJCXBoeSA9IDwmL212NjR4NjAvbWRpby9ldGhlcm5ldC1waHlAMz47CisJCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtZXRoIjsKKwkJCQlyZWcgPSA8MT47CisJCQkJaW50ZXJydXB0cyA9IDwzMz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlwaHkgPSA8JlBIWTE+OwogCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJfTsKIAkJfTsKIAotCQlzZG1hQDQwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiZG1hIjsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLXNkbWEiOwotCQkJcmVnID0gPDQwMDAgYzE4PjsKLQkJCXZpcnR1YWwtcmVnID0gPGYxMDA0MDAwPjsKLQkJCWludGVycnVwdC1iYXNlID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDwyND47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQlTRE1BMDogc2RtYUA0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXNkbWEiOworCQkJcmVnID0gPDB4NDAwMCAweGMxOD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA0MDAwPjsKKwkJCWludGVycnVwdHMgPSA8MzY+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJfTsKIAotCQlzZG1hQDYwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiZG1hIjsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLXNkbWEiOwotCQkJcmVnID0gPDYwMDAgYzE4PjsKLQkJCXZpcnR1YWwtcmVnID0gPGYxMDA2MDAwPjsKLQkJCWludGVycnVwdC1iYXNlID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDwyNj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQlTRE1BMTogc2RtYUA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXNkbWEiOworCQkJcmVnID0gPDB4NjAwMCAweGMxOD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA2MDAwPjsKKwkJCWludGVycnVwdHMgPSA8Mzg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJfTsKIAotCQlicmdAYjIwMCB7Ci0JCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1icmciOwotCQkJcmVnID0gPGIyMDAgOD47CisJCUJSRzA6IGJyZ0BiMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLWJyZyI7CisJCQlyZWcgPSA8MHhiMjAwIDB4OD47CiAJCQljbG9jay1zcmMgPSA8OD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8N2VkNmI0MD47Ci0JCQljdXJyZW50LXNwZWVkID0gPDI1ODA+OwotCQkJYmNyID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMzMzMzMzMz47CisJCQljdXJyZW50LXNwZWVkID0gPDk2MDA+OwogCQl9OwogCi0JCWJyZ0BiMjA4IHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLWJyZyI7Ci0JCQlyZWcgPSA8YjIwOCA4PjsKKwkJQlJHMTogYnJnQGIyMDggeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtYnJnIjsKKwkJCXJlZyA9IDwweGIyMDggMHg4PjsKIAkJCWNsb2NrLXNyYyA9IDw4PjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3ZWQ2YjQwPjsKLQkJCWN1cnJlbnQtc3BlZWQgPSA8MjU4MD47Ci0JCQliY3IgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKKwkJCWN1cnJlbnQtc3BlZWQgPSA8OTYwMD47CiAJCX07CiAKLQkJY3VuaXRAZjIwMCB7Ci0JCQlyZWcgPSA8ZjIwMCAyMDA+OworCQlDVU5JVDogY3VuaXRAZjIwMCB7CisJCQlyZWcgPSA8MHhmMjAwIDB4MjAwPjsKIAkJfTsKIAotCQltcHNjcm91dGluZ0BiNDAwIHsKLQkJCXJlZyA9IDxiNDAwIGM+OworCQlNUFNDUk9VVElORzogbXBzY3JvdXRpbmdAYjQwMCB7CisJCQlyZWcgPSA8MHhiNDAwIDB4Yz47CiAJCX07CiAKLQkJbXBzY2ludHJAYjgwMCB7Ci0JCQlyZWcgPSA8YjgwMCAxMDA+OwotCQkJdmlydHVhbC1yZWcgPSA8ZjEwMGI4MDA+OworCQlNUFNDSU5UUjogbXBzY2ludHJAYjgwMCB7CisJCQlyZWcgPSA8MHhiODAwIDB4MTAwPjsKKwkJCXZpcnR1YWwtcmVnID0gPDB4ZjEwMGI4MDA+OwogCQl9OwogCi0JCW1wc2NAODAwMCB7CisJCU1QU0MwOiBtcHNjQDgwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtcHNjIjsKLQkJCXJlZyA9IDw4MDAwIDM4PjsKLQkJCXZpcnR1YWwtcmVnID0gPGYxMDA4MDAwPjsKLQkJCXNkbWEgPSA8Ji9tdjY0eDYwL3NkbWFANDAwMD47Ci0JCQlicmcgPSA8Ji9tdjY0eDYwL2JyZ0BiMjAwPjsKLQkJCWN1bml0ID0gPCYvbXY2NHg2MC9jdW5pdEBmMjAwPjsKLQkJCW1wc2Nyb3V0aW5nID0gPCYvbXY2NHg2MC9tcHNjcm91dGluZ0BiNDAwPjsKLQkJCW1wc2NpbnRyID0gPCYvbXY2NHg2MC9tcHNjaW50ckBiODAwPjsKLQkJCWJsb2NrLWluZGV4ID0gPDA+OwotCQkJbWF4X2lkbGUgPSA8Mjg+OwotCQkJY2hyXzEgPSA8MD47Ci0JCQljaHJfMiA9IDwwPjsKLQkJCWNocl8xMCA9IDwzPjsKLQkJCW1wY3IgPSA8MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDI4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1tcHNjIjsKKwkJCXJlZyA9IDwweDgwMDAgMHgzOD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA4MDAwPjsKKwkJCXNkbWEgPSA8JlNETUEwPjsKKwkJCWJyZyA9IDwmQlJHMD47CisJCQljdW5pdCA9IDwmQ1VOSVQ+OworCQkJbXBzY3JvdXRpbmcgPSA8Jk1QU0NST1VUSU5HPjsKKwkJCW1wc2NpbnRyID0gPCZNUFNDSU5UUj47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQl9OwogCi0JCW1wc2NAOTAwMCB7CisJCU1QU0MxOiBtcHNjQDkwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtcHNjIjsKLQkJCXJlZyA9IDw5MDAwIDM4PjsKLQkJCXZpcnR1YWwtcmVnID0gPGYxMDA5MDAwPjsKLQkJCXNkbWEgPSA8Ji9tdjY0eDYwL3NkbWFANjAwMD47Ci0JCQlicmcgPSA8Ji9tdjY0eDYwL2JyZ0BiMjA4PjsKLQkJCWN1bml0ID0gPCYvbXY2NHg2MC9jdW5pdEBmMjAwPjsKLQkJCW1wc2Nyb3V0aW5nID0gPCYvbXY2NHg2MC9tcHNjcm91dGluZ0BiNDAwPjsKLQkJCW1wc2NpbnRyID0gPCYvbXY2NHg2MC9tcHNjaW50ckBiODAwPjsKLQkJCWJsb2NrLWluZGV4ID0gPDE+OwotCQkJbWF4X2lkbGUgPSA8Mjg+OwotCQkJY2hyXzEgPSA8MD47Ci0JCQljaHJfMiA9IDwwPjsKLQkJCWNocl8xMCA9IDwzPjsKLQkJCW1wY3IgPSA8MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDJhPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1tcHNjIjsKKwkJCXJlZyA9IDwweDkwMDAgMHgzOD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA5MDAwPjsKKwkJCXNkbWEgPSA8JlNETUExPjsKKwkJCWJyZyA9IDwmQlJHMT47CisJCQljdW5pdCA9IDwmQ1VOSVQ+OworCQkJbXBzY3JvdXRpbmcgPSA8Jk1QU0NST1VUSU5HPjsKKwkJCW1wc2NpbnRyID0gPCZNUFNDSU5UUj47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJaW50ZXJydXB0cyA9IDw0Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQl9OwogCiAJCXdkdEBiNDEwIHsJCQkvKiB3YXRjaGRvZyB0aW1lciAqLwotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtd2R0IjsKLQkJCXJlZyA9IDxiNDEwIDg+OwotCQkJdGltZW91dCA9IDxhPjsJCS8qIHdkdCB0aW1lb3V0IGluIHNlY29uZHMgKi8KKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0MzYwLXdkdCI7CisJCQlyZWcgPSA8MHhiNDEwIDB4OD47CiAJCX07CiAKIAkJaTJjQGMwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLWkyYyI7Ci0JCQlyZWcgPSA8YzAwMCAyMD47Ci0JCQl2aXJ0dWFsLXJlZyA9IDxmMTAwYzAwMD47Ci0JCQlmcmVxX20gPSA8OD47Ci0JCQlmcmVxX24gPSA8Mz47Ci0JCQl0aW1lb3V0ID0gPDNlOD47CQkvKiAxMDAwID0gMSBzZWNvbmQgKi8KLQkJCXJldHJpZXMgPSA8MT47Ci0JCQlpbnRlcnJ1cHRzID0gPDI1PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1pMmMiOworCQkJcmVnID0gPDB4YzAwMCAweDIwPjsKKwkJCXZpcnR1YWwtcmVnID0gPDB4ZjEwMGMwMDA+OworCQkJaW50ZXJydXB0cyA9IDwzNz47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQl9OwogCi0JCXBpYyB7CisJCVBJQzogcGljIHsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLXBpYyI7Ci0JCQlyZWcgPSA8MDAwMCA4OD47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1waWMiOworCQkJcmVnID0gPDB4MCAweDg4PjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQl9OwogCiAJCW1wcEBmMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLW1wcCI7Ci0JCQlyZWcgPSA8ZjAwMCAxMD47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1tcHAiOworCQkJcmVnID0gPDB4ZjAwMCAweDEwPjsKIAkJfTsKIAogCQlncHBAZjEwMCB7Ci0JCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1ncHAiOwotCQkJcmVnID0gPGYxMDAgMjA+OworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtZ3BwIjsKKwkJCXJlZyA9IDwweGYxMDAgMHgyMD47CiAJCX07CiAKIAkJcGNpQDgwMDAwMDAwIHsKQEAgLTI0NCw3MyArMjI4LDc1IEBACiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtcGNpIjsKLQkJCXJlZyA9IDwwY2Y4IDg+OwotCQkJcmFuZ2VzID0gPDAxMDAwMDAwIDAgICAgICAgIDAgODgwMDAwMDAgMCAwMTAwMDAwMAotCQkJCSAgMDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDA4MDAwMDAwPjsKLQkJCWJ1cy1yYW5nZSA9IDwwIGZmPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzRUYxNDgwPjsKLQkJCWludGVycnVwdC1wY2ktaWFjayA9IDwwYzM0PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47Ci0JCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1wY2kiOworCQkJcmVnID0gPDB4Y2Y4IDB4OD47CisJCQlyYW5nZXMgPSA8MHgwMTAwMDAwMCAweDAgICAgICAgIDB4MAorCQkJCQkweDg4MDAwMDAwIDB4MCAweDAxMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAJMHg4MDAwMDAwMCAweDAgMHgwODAwMDAwMD47CisJCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDY2MDAwMDAwPjsKKwkJCWludGVycnVwdC1wY2ktaWFjayA9IDwweGMzND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJCS8qIElEU0VMIDB4MGEgKi8KLQkJCQk1MDAwIDAgMCAxICYvbXY2NHg2MC9waWMgNTAKLQkJCQk1MDAwIDAgMCAyICYvbXY2NHg2MC9waWMgNTEKLQkJCQk1MDAwIDAgMCAzICYvbXY2NHg2MC9waWMgNWIKLQkJCQk1MDAwIDAgMCA0ICYvbXY2NHg2MC9waWMgNWQKKwkJCQkweDUwMDAgMCAwIDEgJlBJQyA4MAorCQkJCTB4NTAwMCAwIDAgMiAmUElDIDgxCisJCQkJMHg1MDAwIDAgMCAzICZQSUMgOTEKKwkJCQkweDUwMDAgMCAwIDQgJlBJQyA5MwogCiAJCQkJLyogSURTRUwgMHgwYiAqLwotCQkJCTU4MDAgMCAwIDEgJi9tdjY0eDYwL3BpYyA1YgotCQkJCTU4MDAgMCAwIDIgJi9tdjY0eDYwL3BpYyA1ZAotCQkJCTU4MDAgMCAwIDMgJi9tdjY0eDYwL3BpYyA1MAotCQkJCTU4MDAgMCAwIDQgJi9tdjY0eDYwL3BpYyA1MQorCQkJCTB4NTgwMCAwIDAgMSAmUElDIDkxCisJCQkJMHg1ODAwIDAgMCAyICZQSUMgOTMKKwkJCQkweDU4MDAgMCAwIDMgJlBJQyA4MAorCQkJCTB4NTgwMCAwIDAgNCAmUElDIDgxCiAKIAkJCQkvKiBJRFNFTCAweDBjICovCi0JCQkJNjAwMCAwIDAgMSAmL212NjR4NjAvcGljIDViCi0JCQkJNjAwMCAwIDAgMiAmL212NjR4NjAvcGljIDVkCi0JCQkJNjAwMCAwIDAgMyAmL212NjR4NjAvcGljIDUwCi0JCQkJNjAwMCAwIDAgNCAmL212NjR4NjAvcGljIDUxCisJCQkJMHg2MDAwIDAgMCAxICZQSUMgOTEKKwkJCQkweDYwMDAgMCAwIDIgJlBJQyA5MworCQkJCTB4NjAwMCAwIDAgMyAmUElDIDgwCisJCQkJMHg2MDAwIDAgMCA0ICZQSUMgODEKIAogCQkJCS8qIElEU0VMIDB4MGQgKi8KLQkJCQk2ODAwIDAgMCAxICYvbXY2NHg2MC9waWMgNWQKLQkJCQk2ODAwIDAgMCAyICYvbXY2NHg2MC9waWMgNTAKLQkJCQk2ODAwIDAgMCAzICYvbXY2NHg2MC9waWMgNTEKLQkJCQk2ODAwIDAgMCA0ICYvbXY2NHg2MC9waWMgNWIKKwkJCQkweDY4MDAgMCAwIDEgJlBJQyA5MworCQkJCTB4NjgwMCAwIDAgMiAmUElDIDgwCisJCQkJMHg2ODAwIDAgMCAzICZQSUMgODEKKwkJCQkweDY4MDAgMCAwIDQgJlBJQyA5MQogCQkJPjsKIAkJfTsKIAogCQljcHUtZXJyb3JAMDA3MCB7Ci0JCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1jcHUtZXJyb3IiOwotCQkJcmVnID0gPDAwNzAgMTAgMDEyOCAyOD47Ci0JCQlpbnRlcnJ1cHRzID0gPDAzPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1jcHUtZXJyb3IiOworCQkJcmVnID0gPDB4NzAgMHgxMCAweDEyOCAweDI4PjsKKwkJCWludGVycnVwdHMgPSA8Mz47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQl9OwogCiAJCXNyYW0tY3RybEAwMzgwIHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLXNyYW0tY3RybCI7Ci0JCQlyZWcgPSA8MDM4MCA4MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDBkPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NDM2MC1zcmFtLWN0cmwiOworCQkJcmVnID0gPDB4MzgwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwxMz47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQl9OwogCiAJCXBjaS1lcnJvckAxZDQwIHsKLQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLXBjaS1lcnJvciI7Ci0JCQlyZWcgPSA8MWQ0MCA0MCAwYzI4IDQ+OwotCQkJaW50ZXJydXB0cyA9IDwwYz47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtcGNpLWVycm9yIjsKKwkJCXJlZyA9IDwweDFkNDAgMHg0MCAweGMyOCAweDQ+OworCQkJaW50ZXJydXB0cyA9IDwxMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OwogCQl9OwogCiAJCW1lbS1jdHJsQDE0MDAgewotCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtbWVtLWN0cmwiOwotCQkJcmVnID0gPDE0MDAgNjA+OwotCQkJaW50ZXJydXB0cyA9IDwxMT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjQzNjAtbWVtLWN0cmwiOworCQkJcmVnID0gPDB4MTQwMCAweDYwPjsKKwkJCWludGVycnVwdHMgPSA8MTc+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKIAkJfTsKIAl9OwogCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiaXA9b24iOwotCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvbXY2NHg2MEBmMTAwMDAwMC9tcHNjQDgwMDAiOworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZNUFNDMDsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9yYWluaWVyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9yYWluaWVyLmR0cwppbmRleCBkM2MyYWMzLi42YThmYTcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmFpbmllci5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3JhaW5pZXIuZHRzCkBAIC0yMjksNyArMjI5LDYgQEAKIAkgICAJCX07CiAKIAkJCUlJQzA6IGkyY0BlZjYwMDcwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZ3J4IiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDxlZjYwMDcwMCAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CkBAIC0yMzcsNyArMjM2LDYgQEAKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZ3J4IiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDxlZjYwMDgwMCAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CkBAIC0yNDUsMjAgKzI0MywxNyBAQAogCQkJfTsKIAogCQkJWk1JSTA6IGVtYWMtem1paUBlZjYwMGQwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiem1paS1pbnRlcmZhY2UiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLHptaWktNDQwZ3J4IiwgImlibSx6bWlpIjsKIAkJCQlyZWcgPSA8ZWY2MDBkMDAgYz47CiAJCQl9OwogCiAJCQlSR01JSTA6IGVtYWMtcmdtaWlAZWY2MDEwMDAgewotCQkJCWRldmljZV90eXBlID0gInJnbWlpLWludGVyZmFjZSI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0scmdtaWktNDQwZ3J4IiwgImlibSxyZ21paSI7CiAJCQkJcmVnID0gPGVmNjAxMDAwIDg+OwogCQkJCWhhcy1tZGlvOwogCQkJfTsKIAogCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwZTAwIHsKLQkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDQwZ3J4IiwgImlibSxlbWFjLTQ0MGVweCIsICJpYm0sZW1hYzQiOwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMwPjsKQEAgLTI3NCw3ICsyNjksNyBAQAogCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OwogCQkJCW1hbC1yeC1jaGFubmVsID0gPDA+OwogCQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQkJbWF4LWZyYW1lLXNpemUgPSA8NWRjPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDwyMzI4PjsKIAkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CiAJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CiAJCQkJcGh5LW1vZGUgPSAicmdtaWkiOwpAQCAtMjg4LDcgKzI4Myw2IEBACiAJCQl9OwogCiAJCQlFTUFDMTogZXRoZXJuZXRAZWY2MDBmMDAgewotCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBncngiLCAiaWJtLGVtYWMtNDQwZXB4IiwgImlibSxlbWFjNCI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzE+OwpAQCAtMzA0LDcgKzI5OCw3IEBACiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CiAJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MT47CiAJCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCQltYXgtZnJhbWUtc2l6ZSA9IDw1ZGM+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDIzMjg+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKIAkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKaW5kZXggMTRiZTM4YS4uYjg2ZTY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cwpAQCAtMTg0LDExICsxODQsMTcgQEAKIAkJY2VsbC1pbmRleCA9IDwwPjsKIAkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8Ci0JCQkvKiBJRFNFTCAweDAxIChQQ0ktWCBzbG90KSAqLwotCQkJMHgwODAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKLQkJCTB4MDgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCi0JCQkweDA4MDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQotCQkJMHgwODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDE+OworCQkJLyogSURTRUwgMHgwMSAoUENJLVggc2xvdCkgQDY2TUh6ICovCisJCQkweDA4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHgwODAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4MDgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDA4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIChQQ0ksIDMuM1YgMzJiaXQpIEAzM01IeiAqLworCQkJMHg4ODAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDE+OwogCiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQlpbnRlcnJ1cHRzID0gPDB4MTggMHgyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NjQxZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWJlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzCkBAIC0wLDAgKzEsMzUyIEBACisvKgorICogU0JDODY0MUQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggV2luZCBSaXZlciBTeXN0ZW1zIEluYy4KKyAqCisgKiBQYXVsIEdvcnRtYWtlciAoc2VlIE1BSU5UQUlORVJTIGZvciBjb250YWN0IGluZm9ybWF0aW9uKQorICoKKyAqIEJhc2VkIGxhcmdlbHkgb24gdGhlIG1wYzg2NDFfaHBjbi5kdHMgYnkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIlNCQzg2NDFEIjsKKwljb21wYXRpYmxlID0gIndpbmQsc2JjODY0MSI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCWV0aGVybmV0MiA9ICZlbmV0MjsKKwkJZXRoZXJuZXQzID0gJmVuZXQzOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NjQxQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMQorCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIEZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCX07CisJCVBvd2VyUEMsODY0MUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MT47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgyMDAwMDAwMD47CS8vIDUxMk0gYXQgMHgwCisJfTsKKworCWxvY2FsYnVzQGY4MDA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWxvY2FsYnVzIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhmODAwNTAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMAkvLyAxNk1CIEJvb3QgZmxhc2gKKwkJCSAgMSAwIDB4ZjAwMDAwMDAgMHgwMDAxMDAwMAkvLyA2NEtCIEVFUFJPTQorCQkJICAyIDAgMHhmMTAwMDAwMCAweDAwMTAwMDAwCS8vIEVQTEQgKDFNQikKKwkJCSAgMyAwIDB4ZTAwMDAwMDAgMHgwNDAwMDAwMAkvLyA2NE1CIExCIFNEUkFNIChDUzMpCisJCQkgIDQgMCAweGU0MDAwMDAwIDB4MDQwMDAwMDAJLy8gNjRNQiBMQiBTRFJBTSAoQ1M0KQorCQkJICA2IDAgMHhmNDAwMDAwMCAweDAwMTAwMDAwCS8vIExDRCBkaXNwbGF5ICgxTUIpCisJCQkgIDcgMCAweGU4MDAwMDAwIDB4MDQwMDAwMDA+OwkvLyA2NE1CIE9uZU5BTkQKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImR0YiI7CisJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDEwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzMDAwMDAgeworCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJcmVnID0gPDB4MDAxMDAwMDAgMHgwMDQwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJCWxhYmVsID0gImZzIjsKKwkJCQlyZWcgPSA8MHgwMDUwMDAwMCAweDAwYTAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4MDBmMDAwMDAgMHgwMDEwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKworCQllcGxkQDIsMCB7CisJCQljb21wYXRpYmxlID0gIndycyxlcGxkLWxvY2FsYnVzIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MiAwIDB4MTAwMDAwPjsKKwkJCXJhbmdlcyA9IDwwIDAgNSAwIDEJLy8gVXNlciBzd2l0Y2hlcworCQkJCSAgMSAwIDUgMSAxCS8vIEJvYXJkIElEL1JldgorCQkJCSAgMyAwIDUgMyAxPjsJLy8gTEVEcworCQl9OworCX07CisKKwlzb2NAZjgwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAwMDAwMDAwIDB4ZjgwMDAwMDAgMHgwMDEwMDAwMD47CisJCXJlZyA9IDwweGY4MDAwMDAwIDB4MDAwMDEwMDA+OwkvLyBDQ1NSQkFSCisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCW1kaW9AMjQ1MjAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDFmIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCXJlZyA9IDwweDFmPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCXJlZyA9IDwwPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCXJlZyA9IDwxPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJCXBoeTM6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCXJlZyA9IDwyPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwICAyIDM0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKwkJfTsKKworCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisJCX07CisKKwkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwyOCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJCWJpZy1lbmRpYW47CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZjgwMDgwMDAgeworCQljZWxsLWluZGV4ID0gPDA+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGY4MDA4MDAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHhmZj47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjQgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGZmMDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkweDAwMDAgMCAwIDEgJm1waWMgMCAxCisJCQkweDAwMDAgMCAwIDIgJm1waWMgMSAxCisJCQkweDAwMDAgMCAwIDMgJm1waWMgMiAxCisJCQkweDAwMDAgMCAwIDQgJm1waWMgMyAxCisJCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MCAweDAwMTAwMDAwPjsKKwkJfTsKKworCX07CisKKwlwY2kxOiBwY2llQGY4MDA5MDAwIHsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmODAwOTAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTMwMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNSAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTB4MDAwMCAwIDAgMSAmbXBpYyA0IDEKKwkJCTB4MDAwMCAwIDAgMiAmbXBpYyA1IDEKKwkJCTB4MDAwMCAwIDAgMyAmbXBpYyA2IDEKKwkJCTB4MDAwMCAwIDAgNCAmbXBpYyA3IDEKKwkJCT47CisKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwIDB4MDAxMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NlcXVvaWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NlcXVvaWEuZHRzCmluZGV4IDVjMTNkNDYuLmExYWU0ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zZXF1b2lhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2VxdW9pYS5kdHMKQEAgLTI0NCw3ICsyNDQsNiBAQAogCSAgIAkJfTsKIAogCQkJSUlDMDogaTJjQGVmNjAwNzAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcHgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPGVmNjAwNzAwIDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKQEAgLTI1Miw3ICsyNTEsNiBAQAogCQkJfTsKIAogCQkJSUlDMTogaTJjQGVmNjAwODAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcHgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPGVmNjAwODAwIDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKQEAgLTI2MCwyMCArMjU4LDE3IEBACiAJCQl9OwogCiAJCQlaTUlJMDogZW1hYy16bWlpQGVmNjAwZDAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ6bWlpLWludGVyZmFjZSI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sem1paS00NDBlcHgiLCAiaWJtLHptaWkiOwogCQkJCXJlZyA9IDxlZjYwMGQwMCBjPjsKIAkJCX07CiAKIAkJCVJHTUlJMDogZW1hYy1yZ21paUBlZjYwMTAwMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAicmdtaWktaW50ZXJmYWNlIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxyZ21paS00NDBlcHgiLCAiaWJtLHJnbWlpIjsKIAkJCQlyZWcgPSA8ZWY2MDEwMDAgOD47CiAJCQkJaGFzLW1kaW87CiAJCQl9OwogCiAJCQlFTUFDMDogZXRoZXJuZXRAZWY2MDBlMDAgewotCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBlcHgiLCAiaWJtLGVtYWM0IjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CkBAIC0yODksNyArMjg0LDcgQEAKIAkJCQltYWwtdHgtY2hhbm5lbCA9IDwwPjsKIAkJCQltYWwtcngtY2hhbm5lbCA9IDwwPjsKIAkJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJCW1heC1mcmFtZS1zaXplID0gPDVkYz47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MjMyOD47CiAJCQkJcngtZmlmby1zaXplID0gPDEwMDA+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDw4MDA+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKQEAgLTMwMyw3ICsyOTgsNiBAQAogCQkJfTsKIAogCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwZjAwIHsKLQkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OwogCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDQwZXB4IiwgImlibSxlbWFjNCI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzE+OwpAQCAtMzE5LDcgKzMxMyw3IEBACiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CiAJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MT47CiAJCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCQltYXgtZnJhbWUtc2l6ZSA9IDw1ZGM+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDIzMjg+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKIAkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdGFpc2hhbi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdGFpc2hhbi5kdHMKaW5kZXggMDcwNmE0YS4uZTgwOGUxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RhaXNoYW4uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90YWlzaGFuLmR0cwpAQCAtMTA0LDYgKzEwNCwxNiBAQAogCQkvLyBGSVhNRTogYW55dGhpbmcgZWxzZT8KIAl9OwogCisJTDJDMDogbDJjIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sbDItY2FjaGUtNDQwZ3giLCAiaWJtLGwyLWNhY2hlIjsKKwkJZGNyLXJlZyA9IDwyMCA4CQkJLyogSW50ZXJuYWwgU1JBTSBEQ1IncyAqLworCQkJICAgMzAgOD47CQkvKiBMMiBjYWNoZSBEQ1IncyAqLworCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkJLyogMzIgYnl0ZXMgKi8KKwkJY2FjaGUtc2l6ZSA9IDw0MDAwMD47CQkvKiBMMiwgMjU2SyAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMyPjsKKwkJaW50ZXJydXB0cyA9IDwxNyAxPjsKKwl9OworCiAJcGxiIHsKIAkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ0MGd4IiwgImlibSxwbGI0IjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CkBAIC0yMDMsNyArMjEzLDYgQEAKIAogCQkJSUlDMDogaTJjQDQwMDAwNDAwIHsKIAkJCQkvKiBGSVhNRSAqLwotCQkJCWRldmljZV90eXBlID0gImkyYyI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDw0MDAwMDQwMCAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CkBAIC0yMTEsNyArMjIwLDYgQEAKIAkJCX07CiAJCQlJSUMxOiBpMmNANDAwMDA1MDAgewogCQkJCS8qIEZJWE1FICovCi0JCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDQwMDAwNTAwIDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKQEAgLTIyNSwyMSArMjMzLDI3IEBACiAJCQl9OwogCiAJCQlaTUlJMDogZW1hYy16bWlpQDQwMDAwNzgwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ6Z21paS1pbnRlcmZhY2UiOwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLHptaWktNDQwZ3giLCAiaWJtLHptaWkiOwogCQkJCXJlZyA9IDw0MDAwMDc4MCBjPjsKIAkJCX07CiAKIAkJCVJHTUlJMDogZW1hYy1yZ21paUA0MDAwMDc5MCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAicmdtaWktaW50ZXJmYWNlIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxyZ21paSI7CiAJCQkJcmVnID0gPDQwMDAwNzkwIDg+OwogCQkJfTsKIAorCQkJVEFIMDogZW1hYy10YWhANDAwMDBiNTAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHRhaC00NDBneCIsICJpYm0sdGFoIjsKKwkJCQlyZWcgPSA8NDAwMDBiNTAgMzA+OworCQkJfTsKKworCQkJVEFIMTogZW1hYy10YWhANDAwMDBkNTAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHRhaC00NDBneCIsICJpYm0sdGFoIjsKKwkJCQlyZWcgPSA8NDAwMDBkNTAgMzA+OworCQkJfTsKIAogCQkJRU1BQzA6IGV0aGVybmV0QDQwMDAwODAwIHsKIAkJCQl1bnVzZWQgPSA8MT47Ci0JCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwyPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MGd4IiwgImlibSxlbWFjNCI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CkBAIC0yNjAsNyArMjc0LDYgQEAKIAkJCX07CiAJCSAJRU1BQzE6IGV0aGVybmV0QDQwMDAwOTAwIHsKIAkJCQl1bnVzZWQgPSA8MT47Ci0JCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwzPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MGd4IiwgImlibSxlbWFjNCI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CkBAIC0yODEsNyArMjk0LDYgQEAKIAkJCX07CiAKIAkJIAlFTUFDMjogZXRoZXJuZXRANDAwMDBjMDAgewotCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBneCIsICJpYm0sZW1hYzQiOwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OwpAQCAtMjkyLDcgKzMwNCw3IEBACiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mj47CiAJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8Mj47CiAJCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCQltYXgtZnJhbWUtc2l6ZSA9IDw1ZGM+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDIzMjg+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKIAkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKIAkJCQlwaHktbW9kZSA9ICJyZ21paSI7CkBAIC0zMDEsMTAgKzMxMywxMSBAQAogCQkJCXJnbWlpLWNoYW5uZWwgPSA8MD47CiAgCQkJCXptaWktZGV2aWNlID0gPCZaTUlJMD47CiAJCQkJem1paS1jaGFubmVsID0gPDI+OworCQkJCXRhaC1kZXZpY2UgPSA8JlRBSDA+OworCQkJCXRhaC1jaGFubmVsID0gPDA+OwogCQkJfTsKIAogCQkgCUVNQUMzOiBldGhlcm5ldEA0MDAwMGUwMCB7Ci0JCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MGd4IiwgImlibSxlbWFjNCI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CkBAIC0zMTUsNyArMzI4LDcgQEAKIAkJCQltYWwtdHgtY2hhbm5lbCA9IDwzPjsKIAkJCQltYWwtcngtY2hhbm5lbCA9IDwzPjsKIAkJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJCW1heC1mcmFtZS1zaXplID0gPDVkYz47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MjMyOD47CiAJCQkJcngtZmlmby1zaXplID0gPDEwMDA+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDw4MDA+OwogCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKQEAgLTMyNCw2ICszMzcsOCBAQAogCQkJCXJnbWlpLWNoYW5uZWwgPSA8MT47CiAgCQkJCXptaWktZGV2aWNlID0gPCZaTUlJMD47CiAJCQkJem1paS1jaGFubmVsID0gPDM+OworCQkJCXRhaC1kZXZpY2UgPSA8JlRBSDE+OworCQkJCXRhaC1jaGFubmVsID0gPDA+OwogCQkJfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKaW5kZXggYzg2NDY0Zi4uNjViY2VhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cwpAQCAtMTI3LDEwICsxMjcsMjUgQEAKIAkJZXRoZXJuZXRAMzAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIjsKLQkJCXJlZyA9IDwzMDAwIDgwMD47CisJCQlyZWcgPSA8MzAwMCA0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDMwMDAgNDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJcmVnID0gPDA+OworCQkJfTsKIAkJfTsKIAogCQlhdGFAM2EwMCB7CkBAIC0xNDEsMTEgKzE1NiwxOSBAQAogCQl9OwogCiAJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDNkNDAgNDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEwIDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKKworCQkJIHJ0Y0A2OCB7CisJCQkJZGV2aWNlX3R5cGUgPSAicnRjIjsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMDciOworCQkJCXJlZyA9IDw2OD47CisJCQl9OwogCQl9OwogCiAJCXNyYW1AODAwMCB7CkBAIC0xNTQsNiArMTc3LDIzIEBACiAJCX07CiAJfTsKIAorCWxwYiB7CisJCW1vZGVsID0gImZzbCxscGIiOworCQljb21wYXRpYmxlID0gImZzbCxscGIiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDAgZmMwMDAwMDAgMDIwMDAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDAyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQl9OworCX07CisKIAlwY2lAZjAwMDBkMDAgewogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy93YWxudXQuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhbG51dC5kdHMKaW5kZXggZGNjMjFiMC4uYTMyODYwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhbG51dC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhbG51dC5kdHMKQEAgLTEyNSw3ICsxMjUsNiBAQAogCQkJfTsKIAogCQkJRU1BQzogZXRoZXJuZXRAZWY2MDA4MDAgewotCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00MDVncCIsICJpYm0sZW1hYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2FycC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2FycC5kdHMKaW5kZXggZGMxNDk5ZC4uYjA0YTUyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy93YXJwLmR0cwpAQCAtMjA0LDcgKzIwNCw2IEBACiAJCQl9OwogCiAJCQlFTUFDMDogZXRoZXJuZXRAZWY2MDBlMDAgewotCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBlcCIsICJpYm0sZW1hYy00NDBncCIsICJpYm0sZW1hYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMveW9zZW1pdGUuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDZkMzMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBZb3NlbWl0ZQorICoKKyAqIENvcHlyaWdodCAyMDA4IElCTSBDb3JwLgorICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbW9kZWwgPSAiYW1jYyx5b3NlbWl0ZSI7CisJY29tcGF0aWJsZSA9ICJhbWNjLHlvc2VtaXRlIiwiYW1jYyxiYW1ib28iOworCWRjci1wYXJlbnQgPSA8Ji9jcHVzL2NwdUAwPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmRU1BQzA7CisJCWV0aGVybmV0MSA9ICZFTUFDMTsKKwkJc2VyaWFsMCA9ICZVQVJUMDsKKwkJc2VyaWFsMSA9ICZVQVJUMTsKKwkJc2VyaWFsMiA9ICZVQVJUMjsKKwkJc2VyaWFsMyA9ICZVQVJUMzsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJbW9kZWwgPSAiUG93ZXJQQyw0NDBFUCI7CisJCQlyZWcgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OworCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OworCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OworCQkJZGNyLWNvbnRyb2xsZXI7CisJCQlkY3ItYWNjZXNzLW1ldGhvZCA9ICJuYXRpdmUiOworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MCAwIDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisJfTsKKworCVVJQzA6IGludGVycnVwdC1jb250cm9sbGVyMCB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NDBlcCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwwPjsKKwkJZGNyLXJlZyA9IDwwYzAgMDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlVSUMxOiBpbnRlcnJ1cHQtY29udHJvbGxlcjEgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDQwZXAiLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MT47CisJCWRjci1yZWcgPSA8MGQwIDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwxZSA0IDFmIDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlTRFIwOiBzZHIgeworCQljb21wYXRpYmxlID0gImlibSxzZHItNDQwZXAiOworCQlkY3ItcmVnID0gPDAwZSAwMDI+OworCX07CisKKwlDUFIwOiBjcHIgeworCQljb21wYXRpYmxlID0gImlibSxjcHItNDQwZXAiOworCQlkY3ItcmVnID0gPDAwYyAwMDI+OworCX07CisKKwlwbGIgeworCQljb21wYXRpYmxlID0gImlibSxwbGItNDQwZXAiLCAiaWJtLHBsYi00NDBncCIsICJpYm0scGxiNCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KKworCQlTRFJBTTA6IHNkcmFtIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHNkcmFtLTQ0MGVwIiwgImlibSxzZHJhbS00MDVncCI7CisJCQlkY3ItcmVnID0gPDAxMCAyPjsKKwkJfTsKKworCQlETUEwOiBkbWEgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sZG1hLTQ0MGVwIiwgImlibSxkbWEtNDQwZ3AiOworCQkJZGNyLXJlZyA9IDwxMDAgMDI3PjsKKwkJfTsKKworCQlNQUwwOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NDBlcCIsICJpYm0sbWNtYWwtNDQwZ3AiLCAiaWJtLG1jbWFsIjsKKwkJCWRjci1yZWcgPSA8MTgwIDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDw0PjsKKwkJCW51bS1yeC1jaGFucyA9IDwyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jk1BTDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEgMiAzIDQ+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtbWFwID0gPC8qVFhFT0IqLyAwICZVSUMwIGEgNAorCQkJCQkvKlJYRU9CKi8gMSAmVUlDMCBiIDQKKwkJCQkJLypTRVJSKi8gIDIgJlVJQzEgMCA0CisJCQkJCS8qVFhERSovICAzICZVSUMxIDEgNAorCQkJCQkvKlJYREUqLyAgNCAmVUlDMSAyIDQ+OworCQl9OworCisJCVBPQjA6IG9wYiB7CisJCQljb21wYXRpYmxlID0gImlibSxvcGItNDQwZXAiLCAiaWJtLG9wYi00NDBncCIsICJpYm0sb3BiIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkvKiBCYW1ib28gaXMgb2RkYmFsbCBpbiB0aGUgNDR4IHdvcmxkIGFuZCBkb2Vzbid0IHVzZSB0aGUgRVJQTgorCQkJICogYml0cy4KKwkJCSAqLworCQkJcmFuZ2VzID0gPDAwMDAwMDAwIDAgMDAwMDAwMDAgODAwMDAwMDAKKwkJCSAgICAgICAgICA4MDAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJaW50ZXJydXB0cyA9IDw3IDQ+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisKKwkJCUVCQzA6IGViYyB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZWJjLTQ0MGVwIiwgImlibSxlYmMtNDQwZ3AiLCAiaWJtLGViYyI7CisJCQkJZGNyLXJlZyA9IDwwMTIgMj47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJfTsKKworCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDMwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDxlZjYwMDMwMCA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDxlZjYwMDMwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwxYzIwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDQ+OworCQkJfTsKKworCQkJVUFSVDE6IHNlcmlhbEBlZjYwMDQwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDxlZjYwMDQwMCA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDxlZjYwMDQwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwxIDQ+OworCQkJfTsKKworCQkJVUFSVDI6IHNlcmlhbEBlZjYwMDUwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDxlZjYwMDUwMCA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDxlZjYwMDUwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwzIDQ+OworCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCQl9OworCisJCQlVQVJUMzogc2VyaWFsQGVmNjAwNjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPGVmNjAwNjAwIDg+OworCQkJCXZpcnR1YWwtcmVnID0gPGVmNjAwNjAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQgND47CisJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJCX07CisKKwkJCUlJQzA6IGkyY0BlZjYwMDcwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MGVwIiwgImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7CisJCQkJcmVnID0gPGVmNjAwNzAwIDE0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIgND47CisJCQl9OworCisJCQlJSUMxOiBpMmNAZWY2MDA4MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcCIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOworCQkJCXJlZyA9IDxlZjYwMDgwMCAxND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDw3IDQ+OworCQkJfTsKKworCQkJc3BpQGVmNjAwOTAwIHsKKwkJCQljb21wYXRpYmxlID0gImFtY2Msc3BpLTQ0MGVwIjsKKwkJCQlyZWcgPSA8ZWY2MDA5MDAgNj47CisJCQkJaW50ZXJydXB0cyA9IDw4IDQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJfTsKKworCQkJWk1JSTA6IGVtYWMtem1paUBlZjYwMGQwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sem1paS00NDBlcCIsICJpYm0sem1paS00NDBncCIsICJpYm0sem1paSI7CisJCQkJcmVnID0gPGVmNjAwZDAwIGM+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwZTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MGVwIiwgImlibSxlbWFjLTQ0MGdwIiwgImlibSxlbWFjIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDFjIDQgMWQgND47CisJCQkJcmVnID0gPGVmNjAwZTAwIDcwPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDAgMT47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDw1ZGM+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDwxMDAwPjsKKwkJCQl0eC1maWZvLXNpemUgPSA8ODAwPjsKKwkJCQlwaHktbW9kZSA9ICJybWlpIjsKKwkJCQlwaHktbWFwID0gPDAwMDAwMDAwPjsKKwkJCQl6bWlpLWRldmljZSA9IDwmWk1JSTA+OworCQkJCXptaWktY2hhbm5lbCA9IDwwPjsKKwkJCX07CisKKwkJCUVNQUMxOiBldGhlcm5ldEBlZjYwMGYwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBlcCIsICJpYm0sZW1hYy00NDBncCIsICJpYm0sZW1hYyI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQkJaW50ZXJydXB0cyA9IDwxZSA0IDFmIDQ+OworCQkJCXJlZyA9IDxlZjYwMGYwMCA3MD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsKKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwyIDM+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDE+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8NWRjPjsKKwkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CisJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CisJCQkJcGh5LW1vZGUgPSAicm1paSI7CisJCQkJcGh5LW1hcCA9IDwwMDAwMDAwMD47CisJCQkJem1paS1kZXZpY2UgPSA8JlpNSUkwPjsKKwkJCQl6bWlpLWNoYW5uZWwgPSA8MT47CisJCQl9OworCisJCQl1c2JAZWY2MDEwMDAgeworCQkJCWNvbXBhdGlibGUgPSAib2hjaS1iZSI7CisJCQkJcmVnID0gPGVmNjAxMDAwIDgwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDggNCA5IDQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZVSUMxID47CisJCQl9OworCQl9OworCisJCVBDSTA6IHBjaUBlYzAwMDAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImlibSxwbGI0NDBlcC1wY2kiLCAiaWJtLHBsYi1wY2kiOworCQkJcHJpbWFyeTsKKwkJCXJlZyA9IDwwIGVlYzAwMDAwIDgJLyogQ29uZmlnIHNwYWNlIGFjY2VzcyAqLworCQkJICAgICAgIDAgZWVkMDAwMDAgNAkvKiBJQUNLICovCisJCQkgICAgICAgMCBlZWQwMDAwMCA0CS8qIFNwZWNpYWwgY3ljbGUgKi8KKwkJCSAgICAgICAwIGVmNDAwMDAwIDQwPjsJLyogSW50ZXJuYWwgcmVnaXN0ZXJzICovCisKKwkJCS8qIE91dGJvdW5kIHJhbmdlcywgb25lIG1lbW9yeSBhbmQgb25lIElPLAorCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQuIENoaXAgc3VwcG9ydHMgYSBzZWNvbmQKKwkJCSAqIElPIHJhbmdlIGJ1dCB3ZSBkb24ndCB1c2UgaXQgZm9yIG5vdworCQkJICovCisJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBhMDAwMDAwMCAwIGEwMDAwMDAwIDAgMjAwMDAwMDAKKwkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgMCBlODAwMDAwMCAwIDAwMDEwMDAwPjsKKworCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLworCQkJZG1hLXJhbmdlcyA9IDw0MjAwMDAwMCAwIDAgMCAwIDAgODAwMDAwMDA+OworCisJCQkvKiBCYW1ib28gaGFzIGFsbCA0IElSUSBwaW5zIHRpZWQgdG9nZXRoZXIgcGVyIHNsb3QgKi8KKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCAwPjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSURTRUwgMSAqLworCQkJCTA4MDAgMCAwIDAgJlVJQzAgMWMgOAorCisJCQkJLyogSURTRUwgMiAqLworCQkJCTEwMDAgMCAwIDAgJlVJQzAgMWIgOAorCisJCQkJLyogSURTRUwgMyAqLworCQkJCTE4MDAgMCAwIDAgJlVJQzAgMWEgOAorCisJCQkJLyogSURTRUwgNCAqLworCQkJCTIwMDAgMCAwIDAgJlVJQzAgMTkgOAorCQkJPjsKKwkJfTsKKwl9OworCisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQGVmNjAwMzAwIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2Vib255LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9lYm9ueS5jCmluZGV4IGY2MTM2NGMuLjU1MzJhYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2Vib255LmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZWJvbnkuYwpAQCAtNzUsNyArNzUsOCBAQAogCiAJaWJtNDQwZ3BfZml4dXBfY2xvY2tzKHN5c2NsaywgNiAqIDE4NDMyMDApOwogCWlibTR4eF9zZHJhbV9maXh1cF9tZW1zaXplKCk7Ci0JZHRfZml4dXBfbWFjX2FkZHJlc3NlcyhlYm9ueV9tYWMwLCBlYm9ueV9tYWMxKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQwIiwgZWJvbnlfbWFjMCk7CisJZHRfZml4dXBfbWFjX2FkZHJlc3NfYnlfYWxpYXMoImV0aGVybmV0MSIsIGVib255X21hYzEpOwogCWlibTR4eF9maXh1cF9lYmNfcmFuZ2VzKCIvcGxiL29wYi9lYmMiKTsKIAllYm9ueV9mbGFzaHNlbF9maXh1cCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0LXdyYXBwZXIuYyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC13cmFwcGVyLmMKaW5kZXggNTkwMTZiZS4uYzU0MWZkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0LXdyYXBwZXIuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQtd3JhcHBlci5jCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIGNoZWNrX2VycihlcnIpIFwKIAkoeyBcCiAJCWlmIChCQURfRVJST1IoZXJyKSB8fCAoKGVyciA8IDApICYmIERFQlVHKSkgXAotCQkJcHJpbnRmKCIlcygpOiVkICAlc1xuXHIiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBcCisJCQlwcmludGYoIiVzKCk6JWQgICVzXG5cciIsIF9fZnVuY19fLCBfX0xJTkVfXywgXAogCQkJICAgICAgIGZkdF9zdHJlcnJvcihlcnIpKTsgXAogCQlpZiAoQkFEX0VSUk9SKGVycikpIFwKIAkJCWV4aXQoKTsgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbXBjNTJ4eC1wc2MuYyBiL2FyY2gvcG93ZXJwYy9ib290L21wYzUyeHgtcHNjLmMKaW5kZXggMTA3NDYyNi4uZDRjYjRlNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbXBjNTJ4eC1wc2MuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9tcGM1Mnh4LXBzYy5jCkBAIC01MSwxNCArNTEsOSBAQAogCiBpbnQgbXBjNTIwMF9wc2NfY29uc29sZV9pbml0KHZvaWQgKmRldnAsIHN0cnVjdCBzZXJpYWxfY29uc29sZV9kYXRhICpzY2RwKQogewotCWludCBuOwotCiAJLyogR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHBzYyByZWdpc3RlcnMgKi8KLQluID0gZ2V0cHJvcChkZXZwLCAidmlydHVhbC1yZWciLCAmcHNjLCBzaXplb2YocHNjKSk7Ci0JaWYgKG4gIT0gc2l6ZW9mKHBzYykpIHsKLQkJaWYgKCFkdF94bGF0ZV9yZWcoZGV2cCwgMCwgKHZvaWQgKikmcHNjLCBOVUxMKSkKLQkJCXJldHVybiAtMTsKLQl9CisJaWYgKGR0X2dldF92aXJ0dWFsX3JlZyhkZXZwLCAmcHNjLCAxKSA8IDEpCisJCXJldHVybiAtMTsKIAogCXNjZHAtPm9wZW4gPSBwc2Nfb3BlbjsKIAlzY2RwLT5wdXRjID0gcHNjX3B1dGM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9tcHNjLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9tcHNjLmMKaW5kZXggODAyZWE1My4uNDI1YWQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbXBzYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L21wc2MuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJaWYgKG1wc2NpbnRyX2Jhc2UgPT0gTlVMTCkKIAkJZ290byBlcnJfb3V0OwogCi0JbiA9IGdldHByb3AoZGV2cCwgImJsb2NrLWluZGV4IiwgJnYsIHNpemVvZih2KSk7CisJbiA9IGdldHByb3AoZGV2cCwgImNlbGwtaW5kZXgiLCAmdiwgc2l6ZW9mKHYpKTsKIAlpZiAobiAhPSBzaXplb2YodikpCiAJCWdvdG8gZXJyX291dDsKIAlyZWdfc2V0ID0gKGludCl2OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbXY2NHg2MC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbXY2NHg2MC5jCmluZGV4IGI0MzI1OTQuLmQ5YmIzMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L212NjR4NjAuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9tdjY0eDYwLmMKQEAgLTUzNSw3ICs1MzUsNyBAQAogCXUzMiB2WzJdOwogCXZvaWQgKmRldnA7CiAKLQlkZXZwID0gZmluZGRldmljZSgiL212NjR4NjAiKTsKKwlkZXZwID0gZmluZF9ub2RlX2J5X2NvbXBhdGlibGUoTlVMTCwgIm1hcnZlbGwsbXY2NDM2MCIpOwogCWlmIChkZXZwID09IE5VTEwpCiAJCWdvdG8gZXJyX291dDsKIAlpZiAoZ2V0cHJvcChkZXZwLCAicmVnIiwgdiwgc2l6ZW9mKHYpKSAhPSBzaXplb2YodikpCkBAIC01NTMsNyArNTUzLDcgQEAKIAl1MzIgdjsKIAl2b2lkICpkZXZwOwogCi0JZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwIik7CisJZGV2cCA9IGZpbmRfbm9kZV9ieV9jb21wYXRpYmxlKE5VTEwsICJtYXJ2ZWxsLG12NjQzNjAiKTsKIAlpZiAoZGV2cCA9PSBOVUxMKQogCQlnb3RvIGVycl9vdXQ7CiAJaWYgKGdldHByb3AoZGV2cCwgInZpcnR1YWwtcmVnIiwgJnYsIHNpemVvZih2KSkgIT0gc2l6ZW9mKHYpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbXY2NHg2MF9pMmMuYyBiL2FyY2gvcG93ZXJwYy9ib290L212NjR4NjBfaTJjLmMKaW5kZXggZDA4NTM3Ny4uNTJhMzIxMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbXY2NHg2MF9pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9tdjY0eDYwX2kyYy5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAl1MzIgdjsKIAl2b2lkICpkZXZwOwogCi0JZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwL2kyYyIpOworCWRldnAgPSBmaW5kX25vZGVfYnlfY29tcGF0aWJsZShOVUxMLCAibWFydmVsbCxtdjY0MzYwLWkyYyIpOwogCWlmIChkZXZwID09IE5VTEwpCiAJCWdvdG8gZXJyX291dDsKIAlpZiAoZ2V0cHJvcChkZXZwLCAidmlydHVhbC1yZWciLCAmdiwgc2l6ZW9mKHYpKSAhPSBzaXplb2YodikpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9uczE2NTUwLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9uczE2NTUwLmMKaW5kZXggZjhmMWIyZi4uYWVmM2JkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbnMxNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L25zMTY1NTAuYwpAQCAtNTUsMTUgKzU1LDkgQEAKIGludCBuczE2NTUwX2NvbnNvbGVfaW5pdCh2b2lkICpkZXZwLCBzdHJ1Y3Qgc2VyaWFsX2NvbnNvbGVfZGF0YSAqc2NkcCkKIHsKIAlpbnQgbjsKLQl1bnNpZ25lZCBsb25nIHJlZ19waHlzOwogCi0JbiA9IGdldHByb3AoZGV2cCwgInZpcnR1YWwtcmVnIiwgJnJlZ19iYXNlLCBzaXplb2YocmVnX2Jhc2UpKTsKLQlpZiAobiAhPSBzaXplb2YocmVnX2Jhc2UpKSB7Ci0JCWlmICghZHRfeGxhdGVfcmVnKGRldnAsIDAsICZyZWdfcGh5cywgTlVMTCkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJcmVnX2Jhc2UgPSAodm9pZCAqKXJlZ19waHlzOwotCX0KKwlpZiAoZHRfZ2V0X3ZpcnR1YWxfcmVnKGRldnAsICh2b2lkICoqKSZyZWdfYmFzZSwgMSkgPCAxKQorCQlyZXR1cm4gLTE7CiAKIAluID0gZ2V0cHJvcChkZXZwLCAicmVnLXNoaWZ0IiwgJnJlZ19zaGlmdCwgc2l6ZW9mKHJlZ19zaGlmdCkpOwogCWlmIChuICE9IHNpemVvZihyZWdfc2hpZnQpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvb3BzLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9vcHMuaAppbmRleCA0YjA1NDRiLi4zMjFlMmY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9vcHMuaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9vcHMuaApAQCAtOTUsNiArOTUsNyBAQAogaW50IGR0X3hsYXRlX2FkZHIodm9pZCAqbm9kZSwgdTMyICpidWYsIGludCBidWZsZW4sIHVuc2lnbmVkIGxvbmcgKnhsYXRlZF9hZGRyKTsKIGludCBkdF9pc19jb21wYXRpYmxlKHZvaWQgKm5vZGUsIGNvbnN0IGNoYXIgKmNvbXBhdCk7CiB2b2lkIGR0X2dldF9yZWdfZm9ybWF0KHZvaWQgKm5vZGUsIHUzMiAqbmFkZHIsIHUzMiAqbnNpemUpOworaW50IGR0X2dldF92aXJ0dWFsX3JlZyh2b2lkICpub2RlLCB2b2lkICoqYWRkciwgaW50IG5yZXMpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmZpbmRkZXZpY2UoY29uc3QgY2hhciAqbmFtZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3BycG1jMjgwMC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHJwbWMyODAwLmMKaW5kZXggMDVjMzI0NS4uZGEzMWQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvcHJwbWMyODAwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHJwbWMyODAwLmMKQEAgLTM0NCwyMCArMzQ0LDIwIEBACiAJCQlhY2NfYml0cyk7CiAKIAkvKiBHZXQgdGhlIGNwdSAtPiBwY2kgaS9vICYgbWVtIG1hcHBpbmdzIGZyb20gdGhlIGRldmljZSB0cmVlICovCi0JZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwL3BjaUA4MDAwMDAwMCIpOworCWRldnAgPSBmaW5kX25vZGVfYnlfY29tcGF0aWJsZShOVUxMLCAibWFydmVsbCxtdjY0MzYwLXBjaSIpOwogCWlmIChkZXZwID09IE5VTEwpCi0JCWZhdGFsKCJFcnJvcjogTWlzc2luZyAvbXY2NHg2MC9wY2lAODAwMDAwMDAiCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBtYXJ2ZWxsLG12NjQzNjAtcGNpIgogCQkJCSIgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKIAogCXJjID0gZ2V0cHJvcChkZXZwLCAicmFuZ2VzIiwgdiwgc2l6ZW9mKHYpKTsKIAlpZiAocmMgIT0gc2l6ZW9mKHYpKQotCQlmYXRhbCgiRXJyb3I6IENhbid0IGZpbmQgL212NjR4NjAvcGNpQDgwMDAwMDAwL3JhbmdlcyIKKwkJZmF0YWwoIkVycm9yOiBDYW4ndCBmaW5kIG1hcnZlbGwsbXY2NDM2MC1wY2kgcmFuZ2VzIgogCQkJCSIgcHJvcGVydHlcblxyIik7CiAKIAkvKiBHZXQgdGhlIGNwdSAtPiBwY2kgaS9vICYgbWVtIG1hcHBpbmdzIGZyb20gdGhlIGRldmljZSB0cmVlICovCi0JZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwIik7CisJZGV2cCA9IGZpbmRfbm9kZV9ieV9jb21wYXRpYmxlKE5VTEwsICJtYXJ2ZWxsLG12NjQzNjAiKTsKIAlpZiAoZGV2cCA9PSBOVUxMKQotCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgL212NjR4NjAgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIG1hcnZlbGwsbXY2NDM2MCBkZXZpY2UgdHJlZSBub2RlXG5cciIpOwogCiAJZW5hYmxlcyA9IGluX2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfQ1BVX0JBUl9FTkFCTEUpKTsKIAllbmFibGVzIHw9IDB4MDAwN2ZlMDA7IC8qIERpc2FibGUgYWxsIGNwdS0+cGNpIHdpbmRvd3MgKi8KQEAgLTQyOSw5ICs0MjksOSBAQAogCXNldHByb3AoZGV2cCwgIm1vZGVsIiwgbW9kZWwsIGwpOwogCiAJLyogU2V0IC9jcHVzL1Bvd2VyUEMsNzQ0Ny9jbG9jay1mcmVxdWVuY3kgKi8KLQlkZXZwID0gZmluZGRldmljZSgiL2NwdXMvUG93ZXJQQyw3NDQ3Iik7CisJZGV2cCA9IGZpbmRfbm9kZV9ieV9wcm9wX3ZhbHVlX3N0cihOVUxMLCAiZGV2aWNlX3R5cGUiLCAiY3B1Iik7CiAJaWYgKGRldnAgPT0gTlVMTCkKLQkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIHByb3BlciAvY3B1cyBkZXZpY2UgdHJlZSBub2RlXG5cciIpOworCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgcHJvcGVyIGNwdSBkZXZpY2UgdHJlZSBub2RlXG5cciIpOwogCXZbMF0gPSBiaXAtPmNvcmVfc3BlZWQ7CiAJc2V0cHJvcChkZXZwLCAiY2xvY2stZnJlcXVlbmN5IiwgJnZbMF0sIHNpemVvZih2WzBdKSk7CiAKQEAgLTQ0MywxNiArNDQzLDE3IEBACiAJdlsxXSA9IGJpcC0+bWVtX3NpemU7CiAJc2V0cHJvcChkZXZwLCAicmVnIiwgdiwgc2l6ZW9mKHYpKTsKIAotCS8qIFVwZGF0ZSAvbXY2NHg2MC9tb2RlbCwgaWYgdGhpcyBpcyBhIG12NjQzNjIgKi8KKwkvKiBVcGRhdGUgbW9kZWwsIGlmIHRoaXMgaXMgYSBtdjY0MzYyICovCiAJaWYgKGJpcC0+YnJpZGdlX3R5cGUgPT0gQlJJREdFX1RZUEVfTVY2NDM2MikgewotCQlkZXZwID0gZmluZGRldmljZSgiL212NjR4NjAiKTsKKwkJZGV2cCA9IGZpbmRfbm9kZV9ieV9jb21wYXRpYmxlKE5VTEwsICJtYXJ2ZWxsLG12NjQzNjAiKTsKIAkJaWYgKGRldnAgPT0gTlVMTCkKLQkJCWZhdGFsKCJFcnJvcjogTWlzc2luZyAvbXY2NHg2MCBkZXZpY2UgdHJlZSBub2RlXG5cciIpOworCQkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIG1hcnZlbGwsbXY2NDM2MCIKKwkJCQkJIiBkZXZpY2UgdHJlZSBub2RlXG5cciIpOwogCQlzZXRwcm9wKGRldnAsICJtb2RlbCIsICJtdjY0MzYyIiwgc3RybGVuKCJtdjY0MzYyIikgKyAxKTsKIAl9CiAKIAkvKiBTZXQgVXNlciBGTEFTSCBzaXplICovCi0JZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwL2ZsYXNoQGEwMDAwMDAwIik7CisJZGV2cCA9IGZpbmRfbm9kZV9ieV9jb21wYXRpYmxlKE5VTEwsICJkaXJlY3QtbWFwcGVkIik7CiAJaWYgKGRldnAgPT0gTlVMTCkKIAkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIFVzZXIgRkxBU0ggZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKIAlyYyA9IGdldHByb3AoZGV2cCwgInJlZyIsIHYsIHNpemVvZih2KSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9wczMtaGVhZC5TIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHMzLWhlYWQuUwppbmRleCBhNTVjMjczLi5iNmZjYmFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9wczMtaGVhZC5TCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3BzMy1oZWFkLlMKQEAgLTI3LDggKzI3LDkgQEAKIC8qCiAgKiBfX3N5c3RlbV9yZXNldF9vdmVybGF5IC0gVGhlIFBTMyBmaXJzdCBzdGFnZSBlbnRyeS4KICAqCi0gKiBUaGUgYm9vdHdyYXBlciBidWlsZCBzY3JpcHQgY29waWVzIHRoZSAweDEwMCBieXRlcyBhdCBzeW1ib2wKLSAqIF9fc3lzdGVtX3Jlc2V0X292ZXJsYXkgdG8gb2Zmc2V0IDB4MTAwIG9mIHRoZSByb20gaW1hZ2UuCisgKiBUaGUgYm9vdHdyYXBlciBidWlsZCBzY3JpcHQgY29waWVzIHRoZSA1MTIgYnl0ZXMgYXQgc3ltYm9sCisgKiBfX3N5c3RlbV9yZXNldF9vdmVybGF5IHRvIG9mZnNldCAweDEwMCBvZiB0aGUgcm9tIGltYWdlLiAgVGhpcyBzeW1ib2wKKyAqIG11c3Qgb2NjdXB5IDUxMiBvciBsZXNzIGJ5dGVzLgogICoKICAqIFRoZSBQUzMgaGFzIGEgc2luZ2xlIHByb2Nlc3NvciB3aXRoIHR3byB0aHJlYWRzLgogICovCkBAIC00Nyw4ICs0OCw2IEBACiAKIAltZnNwcglyMywgMHg4OAogCWNudGx6dy4JcjMsIHIzCi0JbGkJcjQsIDAKLQlsaQlyNSwgMAogCWJlcQkxZgogCiAJLyogU2Vjb25kYXJ5IGdvZXMgdG8gX19zZWNvbmRhcnlfaG9sZCBpbiBrZXJuZWwuICovCkBAIC01Nyw4ICs1NiwxNCBAQAogCW10Y3RyCXI0CiAJYmN0cgogCi0JLyogUHJpbWFyeSBkZWxheXMgdGhlbiBnb2VzIHRvIF96aW1hZ2Vfc3RhcnQgaW4gd3JhcHBlci4gKi8KIDE6CisJLyogU2F2ZSB0aGUgdmFsdWUgYXQgYWRkciB6ZXJvIGZvciBhIG51bGwgcG9pbnRlciB3cml0ZSBjaGVjayBsYXRlci4gKi8KKworCWxpCXI0LCAwCisJbHd6CXIzLCAwKHI0KQorCisJLyogUHJpbWFyeSBkZWxheXMgdGhlbiBnb2VzIHRvIF96aW1hZ2Vfc3RhcnQgaW4gd3JhcHBlci4gKi8KKwogCW9yCTMxLCAzMSwgMzEgLyogZGIxNmN5YyAqLwogCW9yCTMxLCAzMSwgMzEgLyogZGIxNmN5YyAqLwogCkBAIC02NywxNiArNzIsMTggQEAKIAltdGN0cglyNAogCWJjdHIKIAorCS4gPSBfX3N5c3RlbV9yZXNldF9vdmVybGF5ICsgNTEyCisKIC8qCiAgKiBfX3N5c3RlbV9yZXNldF9rZXJuZWwgLSBQbGFjZSBob2xkZXIgZm9yIHRoZSBrZXJuZWwgcmVzZXQgdmVjdG9yLgogICoKLSAqIFRoZSBib290d3JhcHBlciBidWlsZCBzY3JpcHQgY29waWVzIDB4MTAwIGJ5dGVzIGZyb20gb2Zmc2V0IDB4MTAwCisgKiBUaGUgYm9vdHdyYXBwZXIgYnVpbGQgc2NyaXB0IGNvcGllcyA1MTIgYnl0ZXMgZnJvbSBvZmZzZXQgMHgxMDAKICAqIG9mIHRoZSByb20gaW1hZ2UgdG8gdGhlIHN5bWJvbCBfX3N5c3RlbV9yZXNldF9rZXJuZWwuICBBdCBydW50aW1lCi0gKiB0aGUgYm9vdHdyYXBwZXIgcHJvZ3JhbSBjb3BpZXMgdGhlIDB4MTAwIGJ5dGVzIGF0IF9fc3lzdGVtX3Jlc2V0X2tlcm5lbAotICogdG8gcmFtIGFkZHJlc3MgMHgxMDAuICBUaGlzIHN5bWJvbCBtdXN0IG9jY3VweSAweDEwMCBieXRlcy4KKyAqIHRoZSBib290d3JhcHBlciBwcm9ncmFtIGNvcGllcyB0aGUgNTEyIGJ5dGVzIGF0IF9fc3lzdGVtX3Jlc2V0X2tlcm5lbAorICogdG8gcmFtIGFkZHJlc3MgMHgxMDAuICBUaGlzIHN5bWJvbCBtdXN0IG9jY3VweSA1MTIgYnl0ZXMuCiAgKi8KIAogCS5nbG9ibCBfX3N5c3RlbV9yZXNldF9rZXJuZWwKIF9fc3lzdGVtX3Jlc2V0X2tlcm5lbDoKIAotCS4gPSBfX3N5c3RlbV9yZXNldF9rZXJuZWwgKyAweDEwMAorCS4gPSBfX3N5c3RlbV9yZXNldF9rZXJuZWwgKyA1MTIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3BzMy5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHMzLmMKaW5kZXggM2IwYWM0ZC4uOTk1NGQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvcHMzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHMzLmMKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgInBhZ2UuaCIKICNpbmNsdWRlICJvcHMuaCIKIAotZXh0ZXJuIHM2NCBsdjFfcGFuaWModTY0IGluXzEpOwotZXh0ZXJuIHM2NCBsdjFfZ2V0X2xvZ2ljYWxfcGFydGl0aW9uX2lkKHU2NCAqb3V0XzEpOwotZXh0ZXJuIHM2NCBsdjFfZ2V0X2xvZ2ljYWxfcHBlX2lkKHU2NCAqb3V0XzEpOwotZXh0ZXJuIHM2NCBsdjFfZ2V0X3JlcG9zaXRvcnlfbm9kZV92YWx1ZSh1NjQgaW5fMSwgdTY0IGluXzIsIHU2NCBpbl8zLAorZXh0ZXJuIGludCBsdjFfcGFuaWModTY0IGluXzEpOworZXh0ZXJuIGludCBsdjFfZ2V0X2xvZ2ljYWxfcGFydGl0aW9uX2lkKHU2NCAqb3V0XzEpOworZXh0ZXJuIGludCBsdjFfZ2V0X2xvZ2ljYWxfcHBlX2lkKHU2NCAqb3V0XzEpOworZXh0ZXJuIGludCBsdjFfZ2V0X3JlcG9zaXRvcnlfbm9kZV92YWx1ZSh1NjQgaW5fMSwgdTY0IGluXzIsIHU2NCBpbl8zLAogCXU2NCBpbl80LCB1NjQgaW5fNSwgdTY0ICpvdXRfMSwgdTY0ICpvdXRfMik7CiAKICNpZmRlZiBERUJVRwpAQCAtNDYsNiArNDYsNyBAQAogICogZWRpdCB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZCB0byB2bWxpbnV4IChieSBzZXR0aW5nIC9jaG9zZW4vYm9vdGFyZ3MpLgogICogVGhlIGJ1ZmZlciBpcyBwdXQgaW4gaXQncyBvd24gc2VjdGlvbiBzbyB0aGF0IHRvb2xzIG1heSBsb2NhdGUgaXQgZWFzaWVyLgogICovCisKIHN0YXRpYyBjaGFyIGNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkVdCiAJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIl9fYnVpbHRpbl9jbWRsaW5lIikpKTsKIApAQCAtNzUsNyArNzYsNyBAQAogCiBzdGF0aWMgaW50IHBzM19yZXBvc2l0b3J5X3JlYWRfcm1fc2l6ZSh1NjQgKnJtX3NpemUpCiB7Ci0JczY0IHJlc3VsdDsKKwlpbnQgcmVzdWx0OwogCXU2NCBscGFyX2lkOwogCXU2NCBwcGVfaWQ7CiAJdTY0IHYyOwpAQCAtMTE0LDE2ICsxMTUsMTcgQEAKIHsKIAlleHRlcm4gY2hhciBfX3N5c3RlbV9yZXNldF9rZXJuZWxbXTsKIAotCW1lbWNweSgodm9pZCAqKTB4MTAwLCBfX3N5c3RlbV9yZXNldF9rZXJuZWwsIDB4MTAwKTsKLQlmbHVzaF9jYWNoZSgodm9pZCAqKTB4MTAwLCAweDEwMCk7CisJbWVtY3B5KCh2b2lkICopMHgxMDAsIF9fc3lzdGVtX3Jlc2V0X2tlcm5lbCwgNTEyKTsKKwlmbHVzaF9jYWNoZSgodm9pZCAqKTB4MTAwLCA1MTIpOwogfQogCi12b2lkIHBsYXRmb3JtX2luaXQodm9pZCkKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIG51bGxfY2hlY2spCiB7CiAJY29uc3QgdTMyIGhlYXBzaXplID0gMHgxMDAwMDAwIC0gKHUzMilfZW5kOyAvKiAxNk1pQiAqLwogCXZvaWQgKmNob3NlbjsKIAl1bnNpZ25lZCBsb25nIGZ0X2FkZHI7CiAJdTY0IHJtX3NpemU7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAljb25zb2xlX29wcy53cml0ZSA9IHBzM19jb25zb2xlX3dyaXRlOwogCXBsYXRmb3JtX29wcy5leGl0ID0gcHMzX2V4aXQ7CkBAIC0xNTEsNiArMTUzLDExIEBACiAKIAlwcmludGYoIiBmbGF0IHRyZWUgYXQgMHglbHhcblxyIiwgZnRfYWRkcik7CiAKKwl2YWwgPSAqKHVuc2lnbmVkIGxvbmcgKikwOworCisJaWYgKHZhbCAhPSBudWxsX2NoZWNrKQorCQlwcmludGYoIm51bGwgY2hlY2sgZmFpbGVkOiAlbHggIT0gJWx4XG5cciIsIHZhbCwgbnVsbF9jaGVjayk7CisKIAkoKGtlcm5lbF9lbnRyeV90KTApKGZ0X2FkZHIsIDAsIE5VTEwpOwogCiAJcHMzX2V4aXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKaW5kZXggOTk2MDQyMS4uOGIzNjA3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCiAJaWYgKGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgIm5zMTY1NTAiKSkKIAkJcmMgPSBuczE2NTUwX2NvbnNvbGVfaW5pdChkZXZwLCAmc2VyaWFsX2NkKTsKLQllbHNlIGlmIChkdF9pc19jb21wYXRpYmxlKGRldnAsICJtYXJ2ZWxsLG1wc2MiKSkKKwllbHNlIGlmIChkdF9pc19jb21wYXRpYmxlKGRldnAsICJtYXJ2ZWxsLG12NjQzNjAtbXBzYyIpKQogCQlyYyA9IG1wc2NfY29uc29sZV9pbml0KGRldnAsICZzZXJpYWxfY2QpOwogCWVsc2UgaWYgKGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgImZzbCxjcG0xLXNjYy11YXJ0IikgfHwKIAkgICAgICAgICBkdF9pc19jb21wYXRpYmxlKGRldnAsICJmc2wsY3BtMS1zbWMtdWFydCIpIHx8CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9zaW1wbGVib290LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9zaW1wbGVib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjZDI4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3NpbXBsZWJvb3QuYwpAQCAtMCwwICsxLDg0IEBACisvKgorICogVGhlIHNpbXBsZSBwbGF0Zm9ybSAtLSBmb3IgYm9vdGluZyB3aGVuIGZpcm13YXJlIGRvZXNuJ3Qgc3VwcGx5IGEgZGV2aWNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgb3IgYW55IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBkYXRhIGlzIGV4dHJhY3RlZCBmcm9tIGFuIGVtYmVkZGVkIGRldmljZSB0cmVlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IuCisgKgorICogQXV0aG9yczogU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CisgKiAgICAgICAgICBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgIm9wcy5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgImxpYmZkdC9saWJmZHQuaCIKKworQlNTX1NUQUNLKDQqMTAyNCk7CisKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3KQoreworCWNvbnN0IHUzMiAqbmEsICpucywgKnJlZywgKnRpbWViYXNlOworCXU2NCBtZW1zaXplNjQ7CisJaW50IG5vZGUsIHNpemUsIGk7CisKKwkvKiBNYWtlIHN1cmUgRkRUIGJsb2IgaXMgc2FuZSAqLworCWlmIChmZHRfY2hlY2tfaGVhZGVyKF9kdGJfc3RhcnQpICE9IDApCisJCWZhdGFsKCJJbnZhbGlkIGRldmljZSB0cmVlIGJsb2JcbiIpOworCisJLyogRmluZCB0aGUgI2FkZHJlc3MtY2VsbHMgYW5kICNzaXplLWNlbGxzIHByb3BlcnRpZXMgKi8KKwlub2RlID0gZmR0X3BhdGhfb2Zmc2V0KF9kdGJfc3RhcnQsICIvIik7CisJaWYgKG5vZGUgPCAwKQorCQlmYXRhbCgiQ2Fubm90IGZpbmQgcm9vdCBub2RlXG4iKTsKKwluYSA9IGZkdF9nZXRwcm9wKF9kdGJfc3RhcnQsIG5vZGUsICIjYWRkcmVzcy1jZWxscyIsICZzaXplKTsKKwlpZiAoIW5hIHx8IChzaXplICE9IDQpKQorCQlmYXRhbCgiQ2Fubm90IGZpbmQgI2FkZHJlc3MtY2VsbHMgcHJvcGVydHkiKTsKKwlucyA9IGZkdF9nZXRwcm9wKF9kdGJfc3RhcnQsIG5vZGUsICIjc2l6ZS1jZWxscyIsICZzaXplKTsKKwlpZiAoIW5zIHx8IChzaXplICE9IDQpKQorCQlmYXRhbCgiQ2Fubm90IGZpbmQgI3NpemUtY2VsbHMgcHJvcGVydHkiKTsKKworCS8qIEZpbmQgdGhlIG1lbW9yeSByYW5nZSAqLworCW5vZGUgPSBmZHRfbm9kZV9vZmZzZXRfYnlfcHJvcF92YWx1ZShfZHRiX3N0YXJ0LCAtMSwgImRldmljZV90eXBlIiwKKwkJCQkJICAgICAibWVtb3J5Iiwgc2l6ZW9mKCJtZW1vcnkiKSk7CisJaWYgKG5vZGUgPCAwKQorCQlmYXRhbCgiQ2Fubm90IGZpbmQgbWVtb3J5IG5vZGVcbiIpOworCXJlZyA9IGZkdF9nZXRwcm9wKF9kdGJfc3RhcnQsIG5vZGUsICJyZWciLCAmc2l6ZSk7CisJaWYgKHNpemUgPCAoKm5hKypucykgKiBzaXplb2YodTMyKSkKKwkJZmF0YWwoImNhbm5vdCBnZXQgbWVtb3J5IHJhbmdlXG4iKTsKKworCS8qIE9ubHkgaW50ZXJlc3RlZCBpbiBtZW1vcnkgYmFzZWQgYXQgMCAqLworCWZvciAoaSA9IDA7IGkgPCAqbmE7IGkrKykKKwkJaWYgKCpyZWcrKyAhPSAwKQorCQkJZmF0YWwoIk1lbW9yeSByYW5nZSBpcyBub3QgYmFzZWQgYXQgYWRkcmVzcyAwXG4iKTsKKworCS8qIGdldCB0aGUgbWVtc2l6ZSBhbmQgdHJ1Y2F0ZSBpdCB0byB1bmRlciA0RyBvbiAzMiBiaXQgbWFjaGluZXMgKi8KKwltZW1zaXplNjQgPSAwOworCWZvciAoaSA9IDA7IGkgPCAqbnM7IGkrKykKKwkJbWVtc2l6ZTY0ID0gKG1lbXNpemU2NCA8PCAzMikgfCAqcmVnKys7CisJaWYgKHNpemVvZih2b2lkICopID09IDQgJiYgbWVtc2l6ZTY0ID49IDB4MTAwMDAwMDAwVUxMKQorCQltZW1zaXplNjQgPSAweGZmZmZmZmZmOworCisJLyogZmluYWxseSwgc2V0dXAgdGhlIHRpbWViYXNlICovCisJbm9kZSA9IGZkdF9ub2RlX29mZnNldF9ieV9wcm9wX3ZhbHVlKF9kdGJfc3RhcnQsIC0xLCAiZGV2aWNlX3R5cGUiLAorCQkJCQkgICAgICJjcHUiLCBzaXplb2YoImNwdSIpKTsKKwlpZiAoIW5vZGUpCisJCWZhdGFsKCJDYW5ub3QgZmluZCBjcHUgbm9kZVxuIik7CisJdGltZWJhc2UgPSBmZHRfZ2V0cHJvcChfZHRiX3N0YXJ0LCBub2RlLCAidGltZWJhc2UtZnJlcXVlbmN5IiwgJnNpemUpOworCWlmICh0aW1lYmFzZSAmJiAoc2l6ZSA9PSA0KSkKKwkJdGltZWJhc2VfcGVyaW9kX25zID0gMTAwMDAwMDAwMCAvICp0aW1lYmFzZTsKKworCS8qIE5vdyB3ZSBoYXZlIHRoZSBtZW1vcnkgc2l6ZTsgaW5pdGlhbGl6ZSB0aGUgaGVhcCAqLworCXNpbXBsZV9hbGxvY19pbml0KF9lbmQsIG1lbXNpemU2NCAtICh1bnNpZ25lZCBsb25nKV9lbmQsIDMyLCA2NCk7CisKKwkvKiBwcmVwYXJlIHRoZSBkZXZpY2UgdHJlZSBhbmQgZmluZCB0aGUgY29uc29sZSAqLworCWZkdF9pbml0KF9kdGJfc3RhcnQpOworCXNlcmlhbF9jb25zb2xlX2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3RyZWVib290LXdhbG51dC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvdHJlZWJvb3Qtd2FsbnV0LmMKaW5kZXggNDcyZTM2Ni4uMDk3OTc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvdHJlZWJvb3Qtd2FsbnV0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvdHJlZWJvb3Qtd2FsbnV0LmMKQEAgLTY4LDcgKzY4LDcgQEAKIAlpYm00eHhfcXVpZXNjZV9ldGgoKHUzMiAqKTB4ZWY2MDA4MDAsIE5VTEwpOwogCWlibTR4eF9maXh1cF9lYmNfcmFuZ2VzKCIvcGxiL2ViYyIpOwogCXdhbG51dF9mbGFzaHNlbF9maXh1cCgpOwotCWR0X2ZpeHVwX21hY19hZGRyZXNzZXMoKHU4ICopIFdBTE5VVF9PUEVOQklPU19NQUNfT0ZGKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQwIiwgKHU4ICopIFdBTE5VVF9PUEVOQklPU19NQUNfT0ZGKTsKIH0KIAogdm9pZCBwbGF0Zm9ybV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC92aXJ0ZXg0MDUtaGVhZC5TIGIvYXJjaC9wb3dlcnBjL2Jvb3QvdmlydGV4NDA1LWhlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWRiMTNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvdmlydGV4NDA1LWhlYWQuUwpAQCAtMCwwICsxLDMwIEBACisjaW5jbHVkZSAicHBjX2FzbS5oIgorCisJLnRleHQKKwkuZ2xvYmFsIF96aW1hZ2Vfc3RhcnQKK196aW1hZ2Vfc3RhcnQ6CisKKwkvKiBQUEMgZXJyYXRhIDIxMzogbmVlZGVkIGJ5IFZpcnRleC00IEZYICovCisJbWZjY3IwICAwCisJb3JpcyAgICAwLDAsMHg1MDAwMDAwMEBoCisJbXRjY3IwICAwCisKKwkvKgorCSAqIEludmFsaWRhdGUgdGhlIGRhdGEgY2FjaGUgaWYgdGhlIGRhdGEgY2FjaGUgaXMgdHVybmVkIG9mZi4KKwkgKiAtIFRoZSA0MDUgY29yZSBkb2VzIG5vdCBpbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIG9uIHBvd2VyLXVwCisJICogICBvciByZXNldCBidXQgZG9lcyB0dXJuIG9mZiB0aGUgZGF0YSBjYWNoZS4gV2UgY2Fubm90IGFzc3VtZQorCSAqICAgdGhhdCB0aGUgY2FjaGUgY29udGVudHMgYXJlIHZhbGlkLgorCSAqIC0gSWYgdGhlIGRhdGEgY2FjaGUgaXMgdHVybmVkIG9uIHRoaXMgbXVzdCBoYXZlIGJlZW4gZG9uZSBieQorCSAqICAgYSBib290bG9hZGVyIGFuZCB3ZSBhc3N1bWUgdGhhdCB0aGUgY2FjaGUgY29udGVudHMgYXJlCisJICogICB2YWxpZC4KKwkgKi8KKwltZmRjY3IJcjkKKwljbXBsd2kJcjksMAorCWJuZQkyZgorCWxpcwlyOSwwCisJbGkJcjgsMjU2CisJbXRjdHIJcjgKKzE6CWRjY2NpCXIwLHI5CisJYWRkaQlyOSxyOSwweDIwCisJYmRuegkxYgorMjoJYglfemltYWdlX3N0YXJ0X2xpYgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlciBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKaW5kZXggYzMxNzgxNS4uZDZjOTZkOSAxMDA3NTUKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCkBAIC0xNzQsMTAgKzE3NCwxMCBAQAogICAgICotbXBjODMqKQogICAgICAgICBwbGF0Zm9ybW89JG9iamVjdC9jdWJvb3QtODN4eC5vCiAgICAgICAgIDs7Ci0gICAgKi10cW04NTQxfCotbXBjODU2MCp8Ki10cW04NTYwfCotdHFtODU1NSopCisgICAgKi10cW04NTQxfCotbXBjODU2MCp8Ki10cW04NTYwfCotdHFtODU1NXwqLWtzaTg1NjAqKQogICAgICAgICBwbGF0Zm9ybW89JG9iamVjdC9jdWJvb3QtODV4eC1jcG0yLm8KICAgICAgICAgOzsKLSAgICAqLW1wYzg1KikKKyAgICAqLW1wYzg1KnwqLXRxbTg1NDB8Ki1zYmM4NSopCiAgICAgICAgIHBsYXRmb3Jtbz0kb2JqZWN0L2N1Ym9vdC04NXh4Lm8KICAgICAgICAgOzsKICAgICBlc2FjCkBAIC0xOTEsMTAgKzE5MSwxOCBAQAogICAgIGtzZWN0aW9uPS5rZXJuZWw6dm1saW51eC5iaW4KICAgICBpc2VjdGlvbj0ua2VybmVsOmluaXRyZAogICAgIDs7Ci1lcDg4eGN8ZXA0MDV8cmVkYm9vdCp8ZXA4MjQ4ZSkKK2VwODh4Y3xlcDQwNXxlcDgyNDhlKQogICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9maXhlZC1oZWFkLm8gJG9iamVjdC8kcGxhdGZvcm0ubyIKICAgICBiaW5hcnk9eQogICAgIDs7CithZGRlcjg3NS1yZWRib290KQorICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9maXhlZC1oZWFkLm8gJG9iamVjdC9yZWRib290LTh4eC5vIgorICAgIGJpbmFyeT15CisgICAgOzsKK3NpbXBsZWJvb3QtdmlydGV4NDA1LSopCisgICAgcGxhdGZvcm1vPSIkb2JqZWN0L3ZpcnRleDQwNS1oZWFkLm8gJG9iamVjdC9zaW1wbGVib290Lm8iCisgICAgYmluYXJ5PXkKKyAgICA7OwogZXNhYwogCiB2bXo9IiR0bXBkaXIvYGJhc2VuYW1lIFwiJGtlcm5lbFwiYC4kZXh0IgpAQCAtMjIyLDEwICsyMzAsMTMgQEAKICAgICB1Ym9vdF92ZXJzaW9uPSItbiBMaW51eC0kdmVyc2lvbiIKIGZpCiAKKyMgcGh5c2ljYWwgb2Zmc2V0IG9mIGtlcm5lbCBpbWFnZQorbWVtYmFzZT1gJHtDUk9TU31vYmpkdW1wIC1wICIka2VybmVsIiB8IGdyZXAgLW0gMSBMT0FEIHwgYXdrICd7cHJpbnQgJDd9J2AKKwogY2FzZSAiJHBsYXRmb3JtIiBpbgogdWJvb3QpCiAgICAgcm0gLWYgIiRvZmlsZSIKLSAgICBta2ltYWdlIC1BIHBwYyAtTyBsaW51eCAtVCBrZXJuZWwgLUMgZ3ppcCAtYSAwMDAwMDAwMCAtZSAwMDAwMDAwMCBcCisgICAgbWtpbWFnZSAtQSBwcGMgLU8gbGludXggLVQga2VybmVsIC1DIGd6aXAgLWEgJG1lbWJhc2UgLWUgJG1lbWJhc2UgXAogCSR1Ym9vdF92ZXJzaW9uIC1kICIkdm16IiAiJG9maWxlIgogICAgIGlmIFsgLXogIiRjYWNoZWl0IiBdOyB0aGVuCiAJcm0gLWYgIiR2bXoiCkBAIC0yOTQsMTUgKzMwNSwxNiBAQAogICAgIGV4aXQgMAogICAgIDs7CiBwczMpCi0gICAgIyBUaGUgcHMzJ3MgbG9hZGVyIHN1cHBvcnRzIGxvYWRpbmcgZ3ppcHBlZCBiaW5hcnkgaW1hZ2VzIGZyb20gZmxhc2gKLSAgICAjIHJvbSB0byBhZGRyIHplcm8uIFRoZSBsb2FkZXIgZW50ZXJzIHRoZSBpbWFnZSBhdCBhZGRyIDB4MTAwLiAgQQotICAgICMgYm9vdHdyYXBwZXIgb3ZlcmxheSBpcyB1c2UgdG8gYXJyYW5nZSBmb3IgdGhlIGtlcm5lbCB0byBiZSBsb2FkZWQKLSAgICAjIHRvIGFkZHIgemVybyBhbmQgdG8gaGF2ZSBhIHN1aXRhYmxlIGJvb3R3cmFwcGVyIGVudHJ5IGF0IDB4MTAwLgotICAgICMgVG8gY29uc3RydWN0IHRoZSByb20gaW1hZ2UsIDB4MTAwIGJ5dGVzIGZyb20gb2Zmc2V0IDB4MTAwIGluIHRoZQotICAgICMga2VybmVsIGlzIGNvcGllZCB0byB0aGUgYm9vdHdyYXBwZXIgc3ltYm9sIF9fc3lzdGVtX3Jlc2V0X2tlcm5lbC4KLSAgICAjIFRoZSAweDEwMCBieXRlcyBhdCB0aGUgYm9vdHdyYXBwZXIgc3ltYm9sIF9fc3lzdGVtX3Jlc2V0X292ZXJsYXkgaXMKLSAgICAjIHRoZW4gY29waWVkIHRvIG9mZnNldCAweDEwMC4gIEF0IHJ1bnRpbWUgdGhlIGJvb3R3cmFwcGVyIHByb2dyYW0KLSAgICAjIGNvcGllcyB0aGUgMHgxMDAgYnl0ZXMgYXQgX19zeXN0ZW1fcmVzZXRfa2VybmVsIHRvIGFkZHIgMHgxMDAuCisgICAgIyBUaGUgcHMzJ3MgbG9hZGVyIHN1cHBvcnRzIGxvYWRpbmcgYSBnemlwcGVkIGJpbmFyeSBpbWFnZSBmcm9tIGZsYXNoCisgICAgIyByb20gdG8gcmFtIGFkZHIgemVyby4gVGhlIGxvYWRlciB0aGVuIGVudGVycyB0aGUgc3lzdGVtIHJlc2V0CisgICAgIyB2ZWN0b3IgYXQgYWRkciAweDEwMC4gIEEgYm9vdHdyYXBwZXIgb3ZlcmxheSBpcyB1c2VkIHRvIGFycmFuZ2UgZm9yCisgICAgIyBhIGJpbmFyeSBpbWFnZSBvZiB0aGUga2VybmVsIHRvIGJlIGF0IGFkZHIgemVybywgYW5kIHlldCBoYXZlIGEKKyAgICAjIHN1aXRhYmxlIGJvb3R3cmFwcGVyIGVudHJ5IGF0IDB4MTAwLiAgVG8gY29uc3RydWN0IHRoZSBmaW5hbCByb20KKyAgICAjIGltYWdlIDUxMiBieXRlcyBmcm9tIG9mZnNldCAweDEwMCBpcyBjb3BpZWQgdG8gdGhlIGJvb3R3cmFwcGVyCisgICAgIyBwbGFjZSBob2xkZXIgYXQgc3ltYm9sIF9fc3lzdGVtX3Jlc2V0X2tlcm5lbC4gIFRoZSA1MTIgYnl0ZXMgb2YgdGhlCisgICAgIyBib290d3JhcHBlciBlbnRyeSBjb2RlIGF0IHN5bWJvbCBfX3N5c3RlbV9yZXNldF9vdmVybGF5IGlzIHRoZW4KKyAgICAjIGNvcGllZCB0byBvZmZzZXQgMHgxMDAuICBBdCBydW50aW1lIHRoZSBib290d3JhcHBlciBwcm9ncmFtIGNvcGllcworICAgICMgdGhlIGRhdGEgYXQgX19zeXN0ZW1fcmVzZXRfa2VybmVsIGJhY2sgdG8gYWRkciAweDEwMC4KIAogICAgIHN5c3RlbV9yZXNldF9vdmVybGF5PTB4YCR7Q1JPU1N9bm0gIiRvZmlsZSIgXAogICAgICAgICB8IGdyZXAgJyBfX3N5c3RlbV9yZXNldF9vdmVybGF5JCcgICAgICAgXApAQCAtMzEzLDcgKzMyNSw3IEBACiAgICAgICAgIHwgY3V0IC1kJyAnIC1mMWAKICAgICBzeXN0ZW1fcmVzZXRfa2VybmVsPWBwcmludGYgIiVkIiAkc3lzdGVtX3Jlc2V0X2tlcm5lbGAKICAgICBvdmVybGF5X2Rlc3Q9IjI1NiIKLSAgICBvdmVybGF5X3NpemU9IjI1NiIKKyAgICBvdmVybGF5X3NpemU9IjUxMiIKIAogICAgICR7Q1JPU1N9b2JqY29weSAtTyBiaW5hcnkgIiRvZmlsZSIgIiRvZmlsZS5iaW4iCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDI0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTY4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmMyCisjIEZyaSBGZWIgMTUgMjE6NTA6MDkgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CitDT05GSUdfNDB4PXkKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR180eHg9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX0VQNDA1PXkKKyMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfVklSVEVYX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAorQ09ORklHXzQwNUdQPXkKK0NPTkZJR19JQk00MDVfRVJSNzc9eQorQ09ORklHX0lCTTQwNV9FUlI1MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA0MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0NzUzOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZwpAQCAtMCwwICsxLDgzOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMgorIyBGcmkgRmViIDE1IDIxOjUxOjQzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorQ09ORklHXzQweD15CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNHh4PXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQNDA1IGlzIG5vdCBzZXQKK0NPTkZJR19LSUxBVUVBPXkKKyMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1ZJUlRFWF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR180MDVFWD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA0MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUM9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1RYQj0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCisjIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L21ha2FsdV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvbWFrYWx1X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY0ZDhhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L21ha2FsdV9kZWZjb25maWcKQEAgLTAsMCArMSw4MzkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzIKKyMgRnJpIEZlYiAxNSAyMTo1MjozMCAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKK0NPTkZJR180MHg9eQorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHXzR4eD15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKK0NPTkZJR19NQUtBTFU9eQorIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfNDA1RVg9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVFJBQ0U9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwNDAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPW0KK0NPTkZJR19NVERfQkxPQ0s9bQorIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyNjg5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmlnCkBAIC0wLDAgKzEsODg3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmMyCisjIEZyaSBGZWIgMTUgMjE6NTQ6MTIgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CitDT05GSUdfNDB4PXkKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR180eHg9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAorIyBDT05GSUdfS0lMQVVFQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUtBTFUgaXMgbm90IHNldAorQ09ORklHX1dBTE5VVD15CisjIENPTkZJR19YSUxJTlhfVklSVEVYX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAorQ09ORklHXzQwNUdQPXkKK0NPTkZJR19JQk00MDVfRVJSNzc9eQorQ09ORklHX0lCTTQwNV9FUlI1MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKK0NPTkZJR19PRl9SVEM9eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDQwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz1tCitDT05GSUdfTVREX0JMT0NLPW0KKyMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JhbWJvb19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0ZGI1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnCkBAIC0wLDAgKzEsODE1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmMyCisjIEZyaSBGZWIgMTUgMjE6MzY6MzkgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorQ09ORklHXzQ0eD15CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR180eHg9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QVEVfNjRCSVQ9eQorQ09ORklHX1BIWVNfNjRCSVQ9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19CQU1CT089eQorIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAorIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBUlAgaXMgbm90IHNldAorQ09ORklHXzQ0MEVQPXkKK0NPTkZJR19JQk00NDBFUF9FUlI0Mj15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSIiCitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDEwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX0RFQlVHR0VSPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I3NjNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwpAQCAtMCwwICsxLDcyMSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMQorIyBUaHUgRmViIDIxIDE0OjI5OjI4IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorIyBDT05GSUdfTE9HQlVGRkVSIGlzIG5vdCBzZXQKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0CisjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAorIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAorIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0CitDT05GSUdfQ0FOWU9OTEFORFM9eQorQ09ORklHXzQ2MEVYPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9IiIKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CitDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfVEFIPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdHRVI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M4ZDRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMgorIyBGcmkgRmViIDE1IDIxOjUwOjQ0IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0CitDT05GSUdfRUJPTlk9eQorIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBUlAgaXMgbm90IHNldAorQ09ORklHXzQ0MEdQPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorQ09ORklHX09GX1JUQz15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVFJBQ0U9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDEwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCisjIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9rYXRtYWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9jb25maWdzL2thdG1haV9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjMThjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMgorIyBGcmkgRmViIDE1IDIxOjUzOjEwIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19CQU1CT08gaXMgbm90IHNldAorIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAorIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0CitDT05GSUdfUkFJTklFUj15CisjIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKK0NPTkZJR180NDBHUlg9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVFJBQ0U9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9IiIKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKKyMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CitDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdHRVI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19QQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUEFTX1JFQUxNT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4PXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTTE9XPTB4ZWY2MDAzMDAKK0NPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4X1BIWVNISUdIPTB4MQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDVkNjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NlcXVvaWFfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTE2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmMyCisjIEZyaSBGZWIgMTUgMjE6NTM6NDYgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorQ09ORklHXzQ0eD15CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR180eHg9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QVEVfNjRCSVQ9eQorQ09ORklHX1BIWVNfNjRCSVQ9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKK0NPTkZJR19TRVFVT0lBPXkKKyMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAorIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAorIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0CitDT05GSUdfNDQwRVBYPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9IiIKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCisjIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX0RFQlVHR0VSPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eD15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19DUE0gaXMgbm90IHNldAorQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0xPVz0weGVmNjAwMzAwCitDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTSElHSD0weDEKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3YWVkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZwpAQCAtMCwwICsxLDgxNSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMgorIyBGcmkgRmViIDE1IDIxOjQwOjQ0IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19CQU1CT08gaXMgbm90IHNldAorIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAorIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0CitDT05GSUdfVEFJU0hBTj15CisjIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKK0NPTkZJR180NDBHWD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSIiCitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDEwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15CisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAorIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCisjIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdHRVI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzEzYzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTExMCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjMgorIyBGcmkgRmViIDE1IDIxOjU0OjQzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1waWthIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19CQU1CT08gaXMgbm90IHNldAorIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAorIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKK0NPTkZJR19XQVJQPXkKK0NPTkZJR180NDBFUD15CitDT05GSUdfSUJNNDQwRVBfRVJSNDI9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImlwPW9uIgorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPXkKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09PUFM9bQorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0VDQ19TTUM9eQorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPW0KK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CRElfU1dJVENIPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDE4NDQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKQEAgLTAsMCArMSwxMzk1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIEZyaSBBcHIgMTEgMTE6MTA6MDkgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX0ZTTF9FTUJfUEVSRk1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODN4eD15CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4M3h4PXkKK0NPTkZJR19NUEM4MzF4X1JEQj15CisjIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4Mzd4X1JEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDODMxeD15CitDT05GSUdfSVBJQz15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9PRl9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCisjIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfTElORUFSPXkKK0NPTkZJR19NRF9SQUlEMD15CitDT05GSUdfTURfUkFJRDE9eQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAorIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQ0lDQURBX1BIWT15CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQklUQkFORz15CitDT05GSUdfU1BJX01QQzgzeHg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHXzgzeHhfV0RUPXkKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1VTQl9VSENJX0hDRD15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwPXkKK0NPTkZJR19VU0JfTkVUMjI4MD15CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1NzQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTQ1MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBNb24gTWFyIDI0IDA4OjQ4OjE1IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzgzeHg9eQorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODN4eD15CitDT05GSUdfTVBDODMxeF9SREI9eQorIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODM0eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzgzMXg9eQorQ09ORklHX0lQSUM9eQorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9GU0xfRUxCQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworIyBDT05GSUdfQkxLX0RFVl9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9GU0w9eQorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9MSU5FQVI9eQorQ09ORklHX01EX1JBSUQwPXkKK0NPTkZJR19NRF9SQUlEMT15CisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorQ09ORklHX1NQSV9NUEM4M3h4PXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR184M3h4X1dEVD15CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfRlNMPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MD15CitDT05GSUdfVVNCX05FVDIyODA9eQorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKK0NPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjY2VkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA4MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNworIyBNb24gTWFyIDMxIDExOjM2OjUxIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzgzeHg9eQorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODN4eD15CisjIENPTkZJR19NUEM4MzF4X1JEQiBpcyBub3Qgc2V0CitDT05GSUdfTVBDODMyeF9NRFM9eQorIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODM0eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzgzMng9eQorQ09ORklHX0lQSUM9eQorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX1FVSUNDX0VOR0lORT15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKKyMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfREFWSUNPTV9QSFk9eQorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKK0NPTkZJR19VQ0NfR0VUSD15CisjIENPTkZJR19VR0VUSF9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VR0VUSF9GSUxURVJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1FFIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR184M3h4X1dEVD15CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfRFMxMzc0PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorQ09ORklHX1VDQ19GQVNUPXkKK0NPTkZJR19VQ0M9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTEzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyMzMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODoxNiAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184M3h4PXkKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzgzeHg9eQorIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAorQ09ORklHX01QQzgzMnhfUkRCPXkKKyMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEM4MzJ4PXkKK0NPTkZJR19JUElDPXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19RVUlDQ19FTkdJTkU9eQorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX0lDUExVU19QSFk9eQorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorIyBDT05GSUdfRTEwMDBfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CitDT05GSUdfVUNDX0dFVEg9eQorQ09ORklHX1VHRVRIX05BUEk9eQorIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VHRVRIX0ZJTFRFUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfUUUgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9CSVRCQU5HPXkKK0NPTkZJR19TUElfTVBDODN4eD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfODN4eF9XRFQ9eQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1dCU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9eQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CitDT05GSUdfTERNX1BBUlRJVElPTj15CisjIENPTkZJR19MRE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5Xzg9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CitDT05GSUdfVUNDX0ZBU1Q9eQorQ09ORklHX1VDQz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRlMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKQEAgLTAsMCArMSwxMjk1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MTcgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX0ZTTF9FTUJfUEVSRk1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODN4eD15CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4M3h4PXkKKyMgQ09ORklHX01QQzgzMXhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4MzR4X0lUWD15CisjIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4Mzd4X1JEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDODM0eD15CitDT05GSUdfSVBJQz15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDEwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CisjIENPTkZJR19CTEtfREVWX0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMPXkKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1BMQVRGT1JNPXkKK0NPTkZJR19QQVRBX09GX1BMQVRGT1JNPXkKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfTElORUFSPXkKK0NPTkZJR19NRF9SQUlEMD15CitDT05GSUdfTURfUkFJRDE9eQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAorIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQ0lDQURBX1BIWT15CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfUENGODU3ND15CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9CSVRCQU5HPXkKK0NPTkZJR19TUElfTVBDODN4eD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfODN4eF9XRFQ9eQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKK0NPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGUzOWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyMjIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODoxOCAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184M3h4PXkKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzgzeHg9eQorIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAorQ09ORklHX01QQzgzNHhfSVRYPXkKKyMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEM4MzR4PXkKK0NPTkZJR19JUElDPXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorIyBDT05GSUdfTVREX0JMS0RFVlMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4ODAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorQ09ORklHX0NJQ0FEQV9QSFk9eQorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1BDRjg1NzQ9eQorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQklUQkFORz15CitDT05GSUdfU1BJX01QQzgzeHg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHXzgzeHhfV0RUPXkKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKK0NPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTgyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwMjEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzcKKyMgTW9uIE1hciAzMSAxMTozNjo1NiAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184M3h4PXkKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzgzeHg9eQorIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAorQ09ORklHX01QQzgzNHhfTURTPXkKKyMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEM4MzR4PXkKK0NPTkZJR19JUElDPXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX0dGQVJfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfODN4eF9XRFQ9eQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0RTMTM3ND15CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBhOTZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKQEAgLTAsMCArMSwxMDc5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM3CisjIE1vbiBNYXIgMzEgMTE6MzY6NTcgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX0ZTTF9FTUJfUEVSRk1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODN4eD15CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4M3h4PXkKKyMgQ09ORklHX01QQzgzMXhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4MzZ4X01EUz15CisjIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4Mzd4X1JEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKK0NPTkZJR19JUElDPXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19RVUlDQ19FTkdJTkU9eQorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKKyMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKK0NPTkZJR19VQ0NfR0VUSD15CisjIENPTkZJR19VR0VUSF9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VR0VUSF9GSUxURVJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1FFIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR184M3h4X1dEVD15CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfRFMxMzc0PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorQ09ORklHX1VDQ19GQVNUPXkKK0NPTkZJR19VQ0M9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNzdjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBNb24gTWFyIDI0IDA4OjQ4OjIzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzgzeHg9eQorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODN4eD15CisjIENPTkZJR19NUEM4MzF4X1JEQiBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODM3eF9NRFM9eQorIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODM0eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzgzN3g9eQorQ09ORklHX0lQSUM9eQorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX0ZTTD15CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX0dGQVJfTkFQSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHXzgzeHhfV0RUPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzMzE3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTMwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MjQgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX0ZTTF9FTUJfUEVSRk1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODN4eD15CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4M3h4PXkKKyMgQ09ORklHX01QQzgzMXhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4Mzd4X1JEQj15CisjIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDODM3eD15CitDT05GSUdfSVBJQz15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX0ZTTD15CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD15CisjIENPTkZJR19NRF9MSU5FQVIgaXMgbm90IHNldAorIyBDT05GSUdfTURfUkFJRDAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQxPXkKKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDQ1Nj15CitDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CisjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfODN4eF9XRFQ9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPXkKK0NPTkZJR19BU1lOQ19DT1JFPXkKK0NPTkZJR19BU1lOQ19NRU1DUFk9eQorQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxNTE4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKQEAgLTAsMCArMSw4MjggQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODozOCAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODN4eD15CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4M3h4PXkKKyMgQ09ORklHX01QQzgzMXhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKK0NPTkZJR19TQkM4MzR4PXkKK0NPTkZJR19QUENfTVBDODM0eD15CitDT05GSUdfSVBJQz15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorQ09ORklHX0JST0FEQ09NX1BIWT15CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX0dGQVJfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfODN4eF9XRFQ9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDBkZWJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0CisjIE1vbiBGZWIgMTEgMTY6MjU6MTkgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4PXkKKyMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorQ09ORklHX0tTSTg1NjA9eQorIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNMj15CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVFJBQ0U9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0ZTTF9TT0M9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSURFPXkKK0NPTkZJR19JREVfTUFYX0hXSUZTPTQKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfRlNfRU5FVD15CisjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAorQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CitDT05GSUdfRlNfRU5FVF9NRElPX0ZDQz15CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NQTV9TQ0MxPXkKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU01DMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NNQzIgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTk4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKQEAgLTAsMCArMSw3OTYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODoyNSAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg1eHg9eQorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX0U1MDA9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19GU0xfQk9PS0U9eQorQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19TUEU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1eHg9eQorQ09ORklHX01QQzg1NDBfQURTPXkKKyMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfRlNMX1NPQz15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0NF9kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDRfZHNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjExM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDRfZHNfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTU2NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNworIyBNb24gTWFyIDMxIDExOjM3OjAzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfRTUwMD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eD15CisjIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eF9EUz15CisjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorQ09ORklHX0ZTTF9VTEkxNTc1PXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD15CitDT05GSUdfTkVUX0lQR1JFPXkKK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CitDT05GSUdfQVJQRD15CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD15CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9BSENJPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX0FMST15CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorQ09ORklHX1ZJVEVTU0VfUEhZPXkKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX05WUkFNPXkKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX0RWQl9DT1JFPW0KKyMgQ09ORklHX0RWQl9DT1JFX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CisKKyMKKyMgU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzCisjCisjIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JVREdFVF9DT1JFIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVFVTQl9CVURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RUVVNCX0RFQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ0lORVJHWVQyIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycworIworIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEJUODc4IEFkYXB0ZXJzCisjCisKKyMKKyMgU3VwcG9ydGVkIFBsdXRvMiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1BMVVRPMiBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKKyMKKworIworIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfU1RWMDI5OSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyNDEyMyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODA4MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTVQzMTIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1ZFUzFYOTMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDg2IGlzIG5vdCBzZXQKKworIworIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1NQODg3MCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1A4ODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDIyNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDIyNzAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9MNjQ3ODEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9OWFQ2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9NVDM1MiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfWkwxMDM1MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCMzAwME1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUIzMDAwTUMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjcwMDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUI3MDAwUCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9WRVMxODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAorCisjCisjIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDA5IGlzIG5vdCBzZXQKKworIworIyBUdW5lcnMvUExMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTgyN1ggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTE4MjcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9RVDEwMTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfTVQyMjY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX1hDNTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBkZXZpY2VzCisjCisjIENPTkZJR19EVkJfTE5CUDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVUE2MTAwIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9eQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIFBDSSBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfSU5URUw4WDA9eQorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKKworIworIyBBTFNBIFBvd2VyTWFjIGRldmljZXMKKyMKKworIworIyBBTFNBIFBvd2VyUEMgZGV2aWNlcworIworCisjCisjIFVTQiBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAorIworIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisKKyMKKyMgU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFN1cGVySAorIworCisjCisjIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcworIworCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9eQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfRlNMX0RNQT15CisjIENPTkZJR19GU0xfRE1BX1NFTEZURVNUIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFfRU5HSU5FPXkKKworIworIyBETUEgQ2xpZW50cworIworIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworQ09ORklHX0FERlNfRlM9bQorIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KK0NPTkZJR19CRUZTX0ZTPW0KKyMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19DUkFNRlM9eQorQ09ORklHX1ZYRlNfRlM9bQorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorQ09ORklHX0hQRlNfRlM9bQorQ09ORklHX1FOWDRGU19GUz1tCisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTFhYzkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKQEAgLTAsMCArMSw4ODUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODoyNyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg1eHg9eQorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX0U1MDA9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19GU0xfQk9PS0U9eQorQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19TUEU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1eHg9eQorIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1NjBfQURTPXkKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNMj15CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CitDT05GSUdfUENJX0RFQlVHPXkKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfRlNfRU5FVD15CisjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAorQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CisjIENPTkZJR19GU19FTkVUX01ESU9fRkNDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorQ09ORklHX0UxMDAwX05BUEk9eQorIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NQTV9TQ0MxPXkKK0NPTkZJR19TRVJJQUxfQ1BNX1NDQzI9eQorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TTUMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tHREJfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTY4bWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2OG1kc19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4NjZiMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2OG1kc19kZWZjb25maWcKQEAgLTAsMCArMSwxMTE3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM3CisjIE1vbiBNYXIgMzEgMTE6Mzc6MDUgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eD15CisjIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eF9NRFM9eQorIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDAgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19RVUlDQ19FTkdJTkU9eQorIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCisjIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CisjIENPTkZJR19VQ0NfR0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1FFIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT0tFX1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfRFMxMzc0PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR0dFUj15CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTcyX2RzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU3Ml9kc19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhYTZmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU3Ml9kc19kZWZjb25maWcKQEAgLTAsMCArMSwxNTQ5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM3CisjIE1vbiBNYXIgMzEgMTE6Mzc6MDYgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4PXkKKyMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4X0RTPXkKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorQ09ORklHX0ZTTF9VTEkxNTc1PXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPXkKK0NPTkZJR19ORVRfSVBHUkU9eQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKK0NPTkZJR19BUlBEPXkKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX0FIQ0k9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX1BBVEFfQUxJPXkKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfVklURVNTRV9QSFk9eQorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CitDT05GSUdfTlZSQU09eQorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NPUkU9bQorIyBDT05GSUdfRFZCX0NPUkVfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfQ0FQVFVSRV9EUklWRVJTPXkKKworIworIyBTdXBwb3J0ZWQgU0FBNzE0NiBiYXNlZCBQQ0kgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1RUUENJX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQlVER0VUX0NPUkUgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RUVVNCX0JVREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFRVU0JfREVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DSU5FUkdZVDIgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgQlQ4NzggQWRhcHRlcnMKKyMKKworIworIyBTdXBwb3J0ZWQgUGx1dG8yIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfUExVVE8yIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworCisjCisjIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRkVfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKKworIworIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9TVFYwMjk5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDI0MTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9NVDMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVkVTMVg5MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfUzVIMTQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwODYgaXMgbm90IHNldAorCisjCisjIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfU1A4ODcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TUDg4N1ggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjI3MDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjI3MDIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0w2NDc4MSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX05YVDYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX01UMzUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9aTDEwMzUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUIzMDAwTUIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjMwMDBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCNzAwME0gaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjcwMDBQIGlzIG5vdCBzZXQKKworIworIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1ZFUzE4MjAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RWMDI5NyBpcyBub3Qgc2V0CisKKyMKKyMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfTlhUMjAwWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQkNNMzUxMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MDkgaXMgbm90IHNldAorCisjCisjIFR1bmVycy9QTEwgc3VwcG9ydAorIworIyBDT05GSUdfRFZCX1BMTCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODI2WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTgyNzEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX1FUMTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfTVQyMDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9NVDIyNjYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX01UMjEzMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfRElCMDA3MCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfWEM1MDAwIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGRldmljZXMKKyMKKyMgQ09ORklHX0RWQl9MTkJQMjEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0lTTDY0MjEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVQTYxMDAgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworQ09ORklHX1NORF9BQzk3X0NPREVDPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgUENJIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorQ09ORklHX1NORF9JTlRFTDhYMD15CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAorCisjCisjIEFMU0EgUG93ZXJNYWMgZGV2aWNlcworIworCisjCisjIEFMU0EgUG93ZXJQQyBkZXZpY2VzCisjCisKKyMKKyMgVVNCIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0CisjCisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKworIworIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICisjCisKKyMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz15CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfQURGU19GUz1tCisjIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorQ09ORklHX0JFRlNfRlM9bQorIyBDT05GSUdfQkVGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQkZTX0ZTPW0KK0NPTkZJR19FRlNfRlM9bQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfVlhGU19GUz1tCisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCitDT05GSUdfUU5YNEZTX0ZTPW0KKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD15CisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPW0KKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2OWZlOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTM1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MzAgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4PXkKKyMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4X0NEUz15CisjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKK0NPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKK0NPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKK0NPTkZJR19FMTAwMF9OQVBJPXkKKyMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2Y2Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDgxMiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBNb24gTWFyIDI0IDA4OjQ4OjM5IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfRTUwMD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eD15CisjIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0CitDT05GSUdfU0JDODU0OD15CisjIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjYwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsODMwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MzkgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eD15CisjIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKK0NPTkZJR19TQkM4NTYwPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0ZTTF9TT0M9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NNDhUNTk9eQorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzMDNjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKQEAgLTAsMCArMSwxMjUzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6NDIgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1eHg9eQorIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CitDT05GSUdfU1RYX0dQMz15CisjIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNMj15CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GSUxURVI9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPXkKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX1BBUlBPUlQ9bQorQ09ORklHX1BBUlBPUlRfUEM9bQorIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF8xMjg0IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPW0KK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPW0KKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTI4MAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTEwMjQKK0NPTkZJR19JTlBVVF9KT1lERVY9bQorQ09ORklHX0lOUFVUX0VWREVWPW0KKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzEgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DUE1fU0NDMj15CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU01DMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NNQzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX1BSSU5URVI9bQorIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD1tCisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfQUdQPW0KK0NPTkZJR19EUk09bQorIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKKyMgQ09ORklHX1NORCBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9eQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KKyMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tHREJfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfQkRJX1NXSVRDSD15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTElCX1JIRUFQPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOWVlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA5NyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBNb24gTWFyIDI0IDA4OjQ4OjQzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfRTUwMD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1eHg9eQorIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKK0NPTkZJR19UUU04NTQwPXkKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0CitDT05GSUdfVFFNODV4eD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HPXkKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CitDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CitDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTc1PXkKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmNmFkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKQEAgLTAsMCArMSwxMTA5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6NDQgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eD15CisjIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0CitDT05GSUdfVFFNODU0MT15CisjIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKK0NPTkZJR19UUU04NXh4PXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19DUE0yPXkKK0NPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HPXkKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKK0NPTkZJR19DUE09eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUF9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKK0NPTkZJR19JREVfTUFYX0hXSUZTPTQKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKK0NPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKK0NPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMD15CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ1BNPXkKK0NPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE1fU0NDMT15CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TTUMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03NT15CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmZmOTYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwpAQCAtMCwwICsxLDExMDkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODo0NCAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg1eHg9eQorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX0U1MDA9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19GU0xfQk9PS0U9eQorQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19TUEU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4PXkKKyMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAorQ09ORklHX1RRTTg1NTU9eQorIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NjAgaXMgbm90IHNldAorQ09ORklHX1RRTTg1eHg9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX0NQTTI9eQorQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkc9eQorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorQ09ORklHX0NQTT15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQorQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NQTV9TQ0MxPXkKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU01DMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NNQzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTc1PXkKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tHREJfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTElCX1JIRUFQPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzVlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTEwOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBNb24gTWFyIDI0IDA4OjQ4OjQ1IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfRTUwMD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1eHg9eQorIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDAgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKK0NPTkZJR19UUU04NTYwPXkKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0CitDT05GSUdfVFFNODV4eD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNMj15CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CitDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CitDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NQTT15CitDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ1BNX1NDQzE9eQorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TTUMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU01DMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNNzU9eQorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0dEQl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzUtcmVkYm9vdF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NS1yZWRib290X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiNWY5Yi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NS1yZWRib290X2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDc5OCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIFRodSBKYW4gMTcgMTY6MTc6MzggMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR182eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotQ09ORklHX1BQQ184eHg9eQotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184eHg9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkVEQk9PVD15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLSMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MQotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0xPXkKLSMgQ09ORklHX01QQzhYWEZBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg4NUFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRVA4OFhDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQURERVI4NzU9eQotCi0jCi0jIE1QQzh4eCBDUE0gT3B0aW9ucwotIwotCi0jCi0jIEdlbmVyaWMgTVBDOHh4IE9wdGlvbnMKLSMKLUNPTkZJR184eHhfQ09QWUJBQ0s9eQotIyBDT05GSUdfOHh4X0NQVTYgaXMgbm90IHNldAotQ09ORklHXzh4eF9DUFUxNT15Ci1DT05GSUdfTk9fVUNPREVfUEFUQ0g9eQotIyBDT05GSUdfVVNCX1NPRl9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19IWj0xMDAwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfOFhYX01JTklNQUxfRlBFTVUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJhZGRlcjg3NS1yZWRib290LmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfRlNMX1NPQz15Ci0jIENPTkZJR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1FTUEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZkMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMDQwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfQ0ZJX0ZMQUdBRE0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotQ09ORklHX0RBVklDT01fUEhZPXkKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfRU5FVD15Ci0jIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAotQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15Ci1DT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NQTT15Ci1DT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9DUE1fU0NDMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU0NDNCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NQTV9TTUMxPXkKLUNPTkZJR19TRVJJQUxfQ1BNX1NNQzI9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1LXVib290X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1LXVib290X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZhZjdlZi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NS11Ym9vdF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3OTggKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNgotIyBUaHUgSmFuIDE3IDE2OjE3OjE4IDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfOHh4PXkKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfOHh4PXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci0jIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX1JFREJPT1Q9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci0jIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAotIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLSMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTEKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMT15Ci0jIENPTkZJR19NUEM4WFhGQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg2WEFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4ODVBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VQODhYQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0FEREVSODc1PXkKLQotIwotIyBNUEM4eHggQ1BNIE9wdGlvbnMKLSMKLQotIwotIyBHZW5lcmljIE1QQzh4eCBPcHRpb25zCi0jCi1DT05GSUdfOHh4X0NPUFlCQUNLPXkKLSMgQ09ORklHXzh4eF9DUFU2IGlzIG5vdCBzZXQKLUNPTkZJR184eHhfQ1BVMTU9eQotQ09ORklHX05PX1VDT0RFX1BBVENIPXkKLSMgQ09ORklHX1VTQl9TT0ZfVUNPREVfUEFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NQSV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkc9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci0jIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iYWRkZXI4NzUtdWJvb3QuZHRzIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19GU0xfU09DPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfUVNQQU4gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmQwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwNDAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9DRklfRkxBR0FETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci1DT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19GU19FTkVUPXkKLSMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKLUNPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ1BNPXkKLUNPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU0NDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ1BNX1NNQzE9eQotQ09ORklHX1NFUklBTF9DUE1fU01DMj15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci0jIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzY2M5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKQEAgLTAsMCArMSw4MTMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzIKKyMgV2VkIEZlYiAyMCAxMjoyNjowNyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzh4eD15CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHXzh4eD15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SRURCT09UPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0xCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUE0xPXkKKyMgQ09ORklHX01QQzhYWEZBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg4NUFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRVA4OFhDIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQURERVI4NzU9eQorCisjCisjIE1QQzh4eCBDUE0gT3B0aW9ucworIworCisjCisjIEdlbmVyaWMgTVBDOHh4IE9wdGlvbnMKKyMKK0NPTkZJR184eHhfQ09QWUJBQ0s9eQorIyBDT05GSUdfOHh4X0NQVTYgaXMgbm90IHNldAorQ09ORklHXzh4eF9DUFUxNT15CitDT05GSUdfTk9fVUNPREVfUEFUQ0g9eQorIyBDT05GSUdfVVNCX1NPRl9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVFJBQ0U9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfOFhYX01JTklNQUxfRlBFTVUgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfRlNMX1NPQz15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1FTUEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZkMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDQwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0NGSV9GTEFHQURNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfREFWSUNPTV9QSFk9eQorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19GU19FTkVUPXkKKyMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CitDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKK0NPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DUE1fU01DMT15CitDT05GSUdfU0VSSUFMX0NQTV9TTUMyPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBJL08KKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9iYW1ib29fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYmFtYm9vX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkOWFmYy4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9iYW1ib29fZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNzkwICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgTW9uIERlYyAyNCAxMDo0OTo1MCAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci1DT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX0JBTUJPTz15Ci0jIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotQ09ORklHXzQ0MEVQPXkKLUNPTkZJR19JQk00NDBFUF9FUlI0Mj15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJiYW1ib28uZHRzIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAxMDAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUM9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MTI4Ci1DT05GSUdfSUJNX05FV19FTUFDX1RYQj02NAotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHR0VSPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCBmM2JkZThjLi5jNDIwZTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODowNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjAgMTA6MzE6MDQgMjAwOAogIwogQ09ORklHX1BQQzY0PXkKIApAQCAtMjgsNiArMjgsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTY5LDggKzcwLDYgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQpAQCAtNzksMTMgKzc4LDIwIEBACiAjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKIENPTkZJR19DUFVTRVRTPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQX0NQVUFDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX1BST0NfUElEX0NQVVNFVD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTk5LDExICsxMDUsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTExMSw2ICsxMTksMTUgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPW0KK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMzgsNiArMTU1LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTE0OCw4ICsxNjYsOCBAQAogIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldApAQCAtMTYyLDE0ICsxODAsMTQgQEAKICMgQ09ORklHX1BTM19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfUFMzX0hUQUJfU0laRT0yMAogIyBDT05GSUdfUFMzX0RZTkFNSUNfRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19QUzNfVVNFX0xQQVJfQUREUj15CiBDT05GSUdfUFMzX1ZVQVJUPXkKIENPTkZJR19QUzNfUFMzQVY9eQotQ09ORklHX1BTM19TWVNfTUFOQUdFUj1tCitDT05GSUdfUFMzX1NZU19NQU5BR0VSPXkKIENPTkZJR19QUzNfU1RPUkFHRT15CiBDT05GSUdfUFMzX0RJU0s9eQogQ09ORklHX1BTM19ST009bQogQ09ORklHX1BTM19GTEFTSD1tCitDT05GSUdfUFMzX0xQTT1tCiBDT05GSUdfUFBDX0NFTEw9eQogQ09ORklHX1BQQ19DRUxMX05BVElWRT15CiBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFPXkKQEAgLTE4MywxMCArMjAxLDEyIEBACiBDT05GSUdfQ0JFX1RIRVJNPW0KIENPTkZJR19DQkVfQ1BVRlJFUT1tCiBDT05GSUdfQ0JFX0NQVUZSRVFfUE1JPW0KK0NPTkZJR19PUFJPRklMRV9DRUxMPXkKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEU9eQogQ09ORklHX1BQQ19VREJHX0JFQVQ9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0yMTksNyArMjM5LDYgQEAKICMKICMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCiAjCi0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKIENPTkZJR19BWE9OX1JBTT1tCiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiAKQEAgLTIzNSwxNiArMjU0LDIwIEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX0JLTD15CiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiAjIENPTkZJR19JT01NVV9WTUVSR0UgaXMgbm90IHNldAorQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CkBAIC0yNjcsNiArMjkwLDcgQEAKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKQEAgLTI3NiwxMiArMzAwLDEyIEBACiBDT05GSUdfTk9ERVNfU1BBTl9PVEhFUl9OT0RFUz15CiBDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CiBDT05GSUdfUFBDXzY0S19QQUdFUz15CisjIENPTkZJR19QUENfU1VCUEFHRV9QUk9UIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQotIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0zMTgsNiArMzQyLDcgQEAKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMzY4LDYgKzM5Myw3IEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzc1LDcgKzQwMSw2IEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCkBAIC0zODMsMjAgKzQwOCwyNSBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVA9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KQEAgLTQxMSwyMCArNDQxLDE2IEBACiAjCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfTkZfUkFXPW0KQEAgLTQzMyw3ICs0NTksNyBAQAogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogCiAjCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTQ1OSw2ICs0ODUsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00NjcsNyArNDk0LDcgQEAKICMgV2lyZWxlc3MKICMKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApAQCAtNTA1LDcgKzUzMiw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC01MTMsMTEgKzU0MCwxMyBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKQEAgLTUzNCwxMiArNTYzLDEyIEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15CiBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQpAQCAtNTcxLDcgKzYwMCw2IEBACiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0NFTExFQj15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiBDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTYzNyw2ICs2NjUsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNjg5LDYgKzcxOCw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTcwMyw2ICs3MzMsNyBAQAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQ0MgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPW0KQEAgLTc0OCw3ICs3NzksNiBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49eQogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTc3Myw2ICs4MDMsOSBAQAogQ09ORklHX0UxMDAwX05BUEk9eQogIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC03ODgsNiArODIxLDcgQEAKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX1NQSURFUl9ORVQ9eQogQ09ORklHX0dFTElDX05FVD1tCitDT05GSUdfR0VMSUNfV0lSRUxFU1M9eQogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQpAQCAtODAyLDYgKzgzNiw3IEBACiAjIENPTkZJR19QQVNFTUlfTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC04MjQsNyArODU5LDYgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtODgzLDE2ICs5MTcsMTcgQEAKICMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfU01BUlRJT19ORVcgaXMgbm90IHNldAogIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktfR1QgaXMgbm90IHNldAogIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTk3NiwxMyArMTAxMSwxMiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtOTk4LDYgKzEwMzIsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTA4Miw2ICsxMTE3LDcgQEAKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPW0KICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTEwOTUsMTAgKzExMzEsMTAgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQpAQCAtMTE0OSwxMCArMTE4NSw2IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3OCwxNiArMTIxMCw5IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORD1tCiBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRD1tCkBAIC0xMTk4LDYgKzEyMjMsNyBAQAogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQogIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQogIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CkBAIC0xMjExLDcgKzEyMzcsOSBAQAogIwogIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKK0NPTkZJR19FREFDX0NFTEw9eQogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTEyMzksMTIgKzEyNjcsMTAgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTI5Myw4ICsxMzE5LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTM4Miw3ICsxNDEwLDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xNDA0LDExICsxNDMxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT1tCi0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNDI3LDYgKzE0NDksNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTQzOSw5ICsxNDYyLDkgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKQEAgLTE0NjQsNyArMTQ4Nyw5IEBACiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQpAQCAtMTQ4Myw2ICsxNTA4LDkgQEAKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz1tCiAjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKQEAgLTE0OTcsMTEgKzE1MjUsMTQgQEAKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxlYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnCmluZGV4IDllZDJlMDkuLjliYTNjNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxlYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODowNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjAgMTA6MzI6NDUgMjAwOAogIwogQ09ORklHX1BQQzY0PXkKIApAQCAtMjgsNiArMjgsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTY5LDE2ICs3MCwyMiBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtOTIsMTEgKzk5LDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDQsNiArMTEzLDE0IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEzMSw2ICsxNDgsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTQxLDggKzE1OSw4IEBACiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CkBAIC0xNjQsNiArMTgyLDcgQEAKIENPTkZJR19QUENfTkFUSVZFPXkKIENPTkZJR19VREJHX1JUQVNfQ09OU09MRT15CiBDT05GSUdfUFBDX1VEQkdfQkVBVD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE3Nyw3ICsxOTYsNiBAQAogQ09ORklHX1BQQ19JTkRJUkVDVF9JTz15CiBDT05GSUdfR0VORVJJQ19JT01BUD15CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIAogIwpAQCAtMTkyLDE2ICsyMTAsMjAgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfQktMPXkKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiAjIENPTkZJR19JT01NVV9WTUVSR0UgaXMgbm90IHNldAorQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CkBAIC0yMjMsNiArMjQ1LDcgQEAKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CisjIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQpAQCAtMjM3LDcgKzI2MCw2IEBACiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQotIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yNzMsNiArMjk1LDcgQEAKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMzIwLDEyICszNDMsMTMgQEAKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKIApAQCAtMzM3LDcgKzM2MSw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogCiAjCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM2Miw2ICszODYsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00MDgsNyArNDMzLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTQxNiwxNiArNDQxLDE5IEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQogQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CiBDT05GSUdfQkxLX0RFVl9JREVDRD1tCitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKQEAgLTQzNywxMiArNDY1LDEyIEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15CiBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQpAQCAtNDc0LDcgKzUwMiw2IEBACiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0NFTExFQj15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiBDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTU0MCw2ICs1NjcsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CkBAIC01ODksNyArNjE3LDYgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTYxMiw2ICs2MzksOSBAQAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTYzOCw2ICs2NjgsNyBAQAogIyBDT05GSUdfUEFTRU1JX01BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjYwLDcgKzY5MSw2IEBACiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTcxOSwxNiArNzQ5LDE3IEBACiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX1NNQVJUSU9fTkVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKICMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC04MDIsMTMgKzgzMywxMiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtODI0LDYgKzg1NCw3IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05MDUsNiArOTM2LDcgQEAKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTkxOCwxMCArOTUwLDEwIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogQ09ORklHX1VTQl9FSENJX0hDRD1tCi0jIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTz15CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldApAQCAtOTY5LDEwICsxMDAxLDYgQEAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC05OTgsMjAgKzEwMjYsMTQgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtMTA0MSwxMiArMTA2MywxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEwOTUsOCArMTExNSwxMCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTExODgsNyArMTIxMCw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTIwNiwxMCArMTIyNyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEyMjgsNiArMTI0NSw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMjQwLDkgKzEyNTgsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldApAQCAtMTI2NSw3ICsxMjgzLDkgQEAKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xMjg0LDYgKzEzMDQsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPW0KICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTI5OSwxMSArMTMyMiwxMyBAQAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fVEVTVD1tCi0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jaHJwMzJfZGVmY29uZmlnCmluZGV4IDU5ODliNWQuLmQ3ZmQyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODowOSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjcgMTM6NTU6MzcgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zMCw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02NywxNiArNjgsMjAgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTkwLDExICs5NSwxMyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQpAQCAtMTAyLDYgKzEwOSwxNCBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMzAsNiArMTQ1LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTE0MCwxNiArMTU2LDE3IEBACiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiBDT05GSUdfQ0xBU1NJQzMyPXkKIENPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUZJS0EgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0xJVEU1MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ19OQVRJVkU9eQogIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSTgyNTk9eQpAQCAtMTYzLDcgKzE4MCw2IEBACiAjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIAogIwpAQCAtMTc5LDEzICsxOTUsMTYgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfQktMPXkKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTIwNyw3ICsyMjYsNiBAQAogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKLSMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjIzLDcgKzI0MSw3IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQogIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldApAQCAtMjg2LDc0ICszMDQsMzIgQEAKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX05GX0NUX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMyBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9UT1MgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCkBAIC0zNjEsMjAgKzMzNywxNCBAQAogQ09ORklHX05GX05BVD1tCiBDT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKIENPTkZJR19ORl9OQVRfRlRQPW0KIENPTkZJR19ORl9OQVRfSVJDPW0KLUNPTkZJR19ORl9OQVRfVEZUUD1tCisjIENPTkZJR19ORl9OQVRfVEZUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKIENPTkZJR19ORl9OQVRfU0lQPW0KICMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICszNjYsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00NDUsNyArNDE2LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC00NTMsMTYgKzQyNCwxOSBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKIENPTkZJR19JREVESVNLX01VTFRJX01PREU9eQogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CkBAIC00NzQsMTIgKzQ0OCwxMiBAQAogIwogQ09ORklHX0lERV9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CiAKICMKICMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CiAjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQogQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKQEAgLTUxMCw3ICs0ODQsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiAKICMKICMgT3RoZXIgSURFIGNoaXBzZXRzIHN1cHBvcnQKQEAgLTU5OSw2ICs1NzIsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CkBAIC02MDcsNyArNTgxLDYgQEAKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAogQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQogIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldApAQCAtNjQwLDcgKzYxMyw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC02ODgsNiArNjYwLDcgQEAKICMgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlUT09fODEyOSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5X09MRF9SWF9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC03MDEsNiArNjc0LDkgQEAKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC03MjYsNiArNzAyLDcgQEAKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNzU4LDcgKzczNSw2IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKIENPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtODM4LDYgKzgxNCw3IEBACiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTkxNywxNCArODk0LDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC05NDAsNiArOTE1LDcgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA4Myw2ICsxMDU5LDcgQEAKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTEwOTYsOSArMTA3Myw5IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogQ09ORklHX1VTQl9FSENJX0hDRD1tCi0jIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKQEAgLTExNDcsMTAgKzExMjQsNiBAQAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzYsMjAgKzExNDksMTQgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtMTIxNSwxMiArMTE4MiwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNjcsOCArMTIzMiwxMCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTEzNDIsNyArMTMwOSw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTM2MCwxMCArMTMyNiw3IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9MTUI9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMzgyLDYgKzEzNDUsNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTM5NSw5ICsxMzU5LDkgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CkBAIC0xNDIwLDYgKzEzODQsNyBAQAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST1tCiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKQEAgLTE0MzcsNiArMTQwMiw5IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKQEAgLTE0NTEsMTEgKzE0MTksMTMgQEAKICMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2Vib255X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Vib255X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y4NjBmMS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lYm9ueV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw4NjkgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNgotIyBNb24gRGVjIDI0IDExOjE2OjI2IDIwMDcKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLUNPTkZJR180NHg9eQotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfUFRFXzY0QklUPXkKLUNPTkZJR19QSFlTXzY0QklUPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotQ09ORklHX1BPU0lYX01RVUVVRT15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0Ci1DT05GSUdfRUJPTlk9eQotIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKLUNPTkZJR180NDBHUD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9ImVib255LmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDQwNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDQwNV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MjljOTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA0MDVfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOTUyICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgTW9uIERlYyAyNCAxMToxNzoxMyAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLUNPTkZJR180MHg9eQotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzR4eD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRVA0MDU9eQotIyBDT05GSUdfS0lMQVVFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUtBTFUgaXMgbm90IHNldAotIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfNDA1R1A9eQotQ09ORklHX0lCTTQwNV9FUlI3Nz15Ci1DT05GSUdfSUJNNDA1X0VSUjUxPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJlcDQwNS5kdHMiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA0MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9bQotQ09ORklHX01URF9CTE9DSz1tCi0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUM9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MTI4Ci1DT05GSUdfSUJNX05FV19FTUFDX1RYQj02NAotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BDST15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwppbmRleCAwMWFkNTk1Li4yYjE1MDRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgRnJpIEphbiAxMSAxNDowMjowNiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MDkgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02OSwxMSArNzAsMTQgQEAKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKQEAgLTg1LDE3ICs4OSwyNiBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTExNyw2ICsxMzAsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xMjUsOCArMTM5LDggQEAKIENPTkZJR19QUENfODJ4eD15CiAjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODI3Ml9BRFMgaXMgbm90IHNldApAQCAtMTM1LDYgKzE0OSw3IEBACiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHXzgyNjA9eQogQ09ORklHXzgyNzI9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE2MywxMiArMTc4LDE2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMTgzLDExICsyMDIsNyBAQAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJlcDgyNDhlLmR0cyIKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI3MiwxMiArMjg3LDEzIEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKQEAgLTI4Nyw2ICszMDMsMTMgQEAKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CkBAIC0zMDAsNiArMzIzLDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogCkBAIC0zMDgsNiArMzMyLDcgQEAKICMKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDE1LDYgKzQ0MCw3IEBACiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ0OCw2ICs0NzQsNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19NRElPX0JJVEJBTkc9eQogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC00NjIsNiArNDg5LDggQEAKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQogIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwpAQCAtNTMyLDYgKzU2MSw3IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTU3MSw4ICs2MDEsMTAgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtNTkzLDEyICs2MjUsMTAgQEAKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC02MjYsNiArNjU2LDcgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC02MzQsOCArNjY1LDEwIEBACiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtNzE1LDcgKzc0OCw2IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC03MzEsOSArNzYzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTc2NCw4ICs3OTMsOCBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CkBAIC03ODQsNiArODEzLDcgQEAKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC03OTcsNiArODI3LDkgQEAKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fUENCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtODE2LDYgKzg0OSw3IEBACiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKaW5kZXggYTFmOTgyMC4uMTI1YjQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ4OjEzIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODoxMCAyMDA4CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTI2LDYgKzI2LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTYzLDE1ICs2NCwxOSBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CiAjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQpAQCAtODQsMTEgKzg5LDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CkBAIC05Niw2ICsxMDMsMTMgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldApAQCAtMTE3LDEyICsxMzEsMTMgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUE0xPXkKQEAgLTEzMCw2ICsxNDUsNyBAQAogIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg4NUFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0VQODhYQz15CisjIENPTkZJR19QUENfQURERVI4NzUgaXMgbm90IHNldAogCiAjCiAjIE1QQzh4eCBDUE0gT3B0aW9ucwpAQCAtMTQ2LDYgKzE2Miw3IEBACiAjIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE1Niw3ICsxNzMsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BNPXkKQEAgLTE3NCw2ICsxOTAsNyBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0xODEsNyArMTk4LDEwIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIwMCwxMSArMjIwLDcgQEAKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iZXA4OHhjLmR0cyIKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTMwMSw2ICszMTcsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00MDcsNiArNDI0LDcgQEAKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ0MSw2ICs0NTksNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQ2NSw3ICs0ODQsNiBAQAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC01MjgsNiArNTQ2LDcgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtNTY3LDkgKzU4NiwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTU4OCwxMSArNjA5LDkgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtNjM1LDggKzY1NCwxMCBAQAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTY4Myw3ICs3MDQsNiBAQAogIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC02OTgsNyArNzE4LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtNzE3LDYgKzczNiw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKQEAgLTcyNyw4ICs3NDcsOCBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKaW5kZXggMzY3M2RkMi4uYTIwNTAxZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODoxNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjcgMTM6NTU6NDMgMjAwOAogIwogQ09ORklHX1BQQzY0PXkKIApAQCAtMjcsNiArMjcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTQ4LDcgKzQ5LDkgQEAKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNjRfU1dTVVNQPXkKK0NPTkZJR19ISUJFUk5BVEVfNjQ9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CkBAIC02OCwxOCArNzEsMjAgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CkBAIC05MywxMSArOTgsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTEwNSw2ICsxMTIsMTUgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMzIsNiArMTQ4LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTE0Miw4ICsxNTksOCBAQAogIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogQ09ORklHX1BQQ19QTUFDPXkKIENPTkZJR19QUENfUE1BQzY0PXkKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CkBAIC0xNTUsNiArMTcyLDcgQEAKICMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ19OQVRJVkU9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0xODUsNyArMjAzLDYgQEAKICMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCiAjCiBDT05GSUdfQ1BVX0ZSRVFfUE1BQzY0PXkKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0yMDAsMTcgKzIxNywyMSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX0JLTCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiBDT05GSUdfSU9NTVVfVk1FUkdFPXkKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKQEAgLTIzNiwxMSArMjU3LDkgQEAKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UU19GUkVFWkVSX0NPTlRST0w9eQogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfU01QX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9TTVBfUE9TU0lCTEU9eQogQ09ORklHX1NFQ0NPTVA9eQotIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yNTUsNyArMjc0LDcgQEAKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CiBDT05GSUdfUENJX01TST15Ci1DT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldApAQCAtMjc2LDYgKzI5NSw3IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zMTAsMTIgKzMzMCwxNCBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiAjIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CkBAIC0zMzEsNiArMzUzLDcgQEAKICMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKIAogIwpAQCAtMzYzLDYgKzM4Niw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTQwOSw3ICs0MzMsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CkBAIC00MTksMTYgKzQ0MywxOSBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKQEAgLTQ0MCwxMiArNDY3LDEyIEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldApAQCAtNDc4LDcgKzUwNSw2IEBACiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQz15CiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQ19BVEExMDBGSVJTVD15CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUE1BQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiBDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTU0NCw2ICs1NzAsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTk2LDYgKzYyMyw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTYxMCw2ICs2MzgsNyBAQAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKIENPTkZJR19NRF9MSU5FQVI9eQpAQCAtNjc2LDcgKzcwNSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzAxLDYgKzcyOSw5IEBACiAjIENPTkZJR19FMTAwMF9OQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNzI2LDYgKzc1Nyw3IEBACiAjIENPTkZJR19QQVNFTUlfTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogQ09ORklHX1RSPXkKIENPTkZJR19JQk1PTD15CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CkBAIC03NzEsNyArODAzLDYgQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogQ09ORklHX1NMSEM9bQogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC04MzQsNiArODY1LDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtOTAxLDEzICs5MzMsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTkyMyw2ICs5NTQsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMDgzLDYgKzExMTUsNyBAQAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKQEAgLTExMDgsNiArMTE0MSw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC0xMTI1LDYgKzExNTksNyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIApAQCAtMTE2Niw2ICsxMjAxLDEwIEBACiAjCiAKICMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKQEAgLTExOTIsNiArMTIzMSw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC0xMjA1LDkgKzEyNDUsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQpAQCAtMTI1OSwxMSArMTI5OSw4IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiBDT05GSUdfVVNCX1NFUklBTD1tCitDT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKQEAgLTEyODQsNiArMTMyMSw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9UST1tCiBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU49bQogQ09ORklHX1VTQl9TRVJJQUxfSVBXPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFI9eQpAQCAtMTMxNiw3ICsxMzU0LDYgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQogIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VaVVNCPXkKIAogIwogIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCkBAIC0xMzQxLDIwICsxMzc4LDE0IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTEzOTMsMTIgKzE0MjQsMTAgQEAKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz1tCiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTQ0Nyw4ICsxNDc2LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTE1NDYsNyArMTU3Nyw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE1NjQsMTEgKzE1OTQsNyBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9MTUI9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNTg3LDYgKzE2MTMsNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTU5OSw5ICsxNjI2LDkgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CkBAIC0xNjIxLDcgKzE2NDgsOSBAQAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKQEAgLTE2NDAsNiArMTY2OSw5IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xNjU1LDExICsxNjg3LDEzIEBACiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19URVNUPW0KLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwppbmRleCA0YTg3NzQ1Li5iMzEyOGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzMKLSMgV2VkIE5vdiAyMSAxMToxOTo1OSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjcgMTM6NTU6NDUgMjAwOAogIwogQ09ORklHX1BQQzY0PXkKIApAQCAtMjgsNiArMjgsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTY4LDggKzY5LDYgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0FVRElUX1RSRUU9eQpAQCAtNzcsMTEgKzc2LDE1IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtOTUsMTEgKzk4LDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDcsNiArMTEyLDE0IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEzNCw2ICsxNDcsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTUzLDggKzE2Nyw4IEBACiBDT05GSUdfVklPQ0Q9bQogQ09ORklHX1ZJT1RBUEU9bQogQ09ORklHX1ZJT1BBVEg9eQotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldApAQCAtMTY0LDYgKzE3OCw3IEBACiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldApAQCAtMTc2LDcgKzE5MSw2IEBACiBDT05GSUdfUFBDX0lORElSRUNUX0lPPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0xOTEsMTUgKzIwNSwxOSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX0JLTCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19JT01NVV9WTUVSR0U9eQorQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CkBAIC0yMjcsNyArMjQ1LDYgQEAKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI0Miw3ICsyNTksNyBAQAogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKICMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKQEAgLTI2Myw2ICsyODAsNyBAQAogQ09ORklHX1hGUk1fVVNFUj1tCiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZPXkKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTI5NywxMiArMzE1LDE0IEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLPW0KICMgQ09ORklHX05GX0NUX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKQEAgLTMxOCw2ICszMzgsNyBAQAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KQEAgLTMyNiw4ICszNDcsMTAgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQgaXMgbm90IHNldApAQCAtMzM3LDE0ICszNjAsMTcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSBpcyBub3Qgc2V0CkBAIC0zNjIsMTMgKzM4OCwxMCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KICMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KQEAgLTM3OSw3ICs0MDIsNiBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KICMgQ09ORklHX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKIENPTkZJR19ORl9OQVRfRlRQPW0KIENPTkZJR19ORl9OQVRfSVJDPW0KQEAgLTM4OSw3ICs0MTEsNiBAQAogIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAogIyBDT05GSUdfTkZfTkFUX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KQEAgLTQyNSw2ICs0NDYsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00NzAsNyArNDkyLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQpAQCAtNDc4LDYgKzUwMCw4IEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE4LDYgKzU0Miw3IEBACiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KK0NPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CiBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHPXkKIENPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CkBAIC01NDMsNiArNTY4LDcgQEAKIENPTkZJR19TQ1NJX0lCTVZTQ1NJPW0KICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldApAQCAtNTg5LDcgKzYxNSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNjE4LDYgKzY0Myw3IEBACiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC02MzEsNiArNjU3LDkgQEAKICMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC02NTYsNiArNjg1LDcgQEAKICMgQ09ORklHX1BBU0VNSV9NQUMgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiBDT05GSUdfVFI9eQogQ09ORklHX0lCTU9MPXkKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKQEAgLTY4Myw3ICs3MTMsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKICMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUUE9MTD15CkBAIC03MzQsNiArNzYzLDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzcyLDYgKzgwMiw3IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTgyMSwxMCArODUyLDEyIEBACiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC04NjksMTIgKzkwMiwxMCBAQAogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19OT0xPQ0s9bQogQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09bQogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC05MjQsOCArOTU1LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTEwMDksNyArMTA0Miw2IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiBDT05GSUdfRExNPW0KICMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTAzMSwxMCArMTA2Myw3IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9MTUI9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDUzLDYgKzEwODIsNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTA2NSw5ICsxMDk1LDkgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CkBAIC0xMDg5LDYgKzExMTksNyBAQAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xMTA3LDYgKzExMzgsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTEyMiwxMSArMTE1NiwxMyBAQAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19TRUVEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9raWxhdWVhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2tpbGF1ZWFfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGNhM2Q0Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2tpbGF1ZWFfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODEyICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgVGh1IEphbiAgMyAxNDoyMTozMSAyMDA4Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLUNPTkZJR180MHg9eQotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzR4eD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAotQ09ORklHX0tJTEFVRUE9eQotIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfVklSVEVYX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAotQ09ORklHXzQwNUVYPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJraWxhdWVhLmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMDQwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz1tCi1DT05GSUdfTVREX0JMT0NLPW0KLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCmluZGV4IDdiNDI4MDguLjIyYTk0M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDg6MjIgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBNb24gTWFyIDI0IDA4OjQ4OjEwIDIwMDgKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjksNiArMjksNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNjYsMTYgKzY3LDI0IEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTg5LDExICs5OCwxMyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTEwMSw2ICsxMTIsMTQgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTI4LDYgKzE0Nyw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xMzgsMjIgKzE1OCwyNCBAQAogIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogQ09ORklHX0NMQVNTSUMzMj15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUZJS0EgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0xJVEU1MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKIENPTkZJR19MSU5LU1RBVElPTj15CisjIENPTkZJR19TVE9SQ0VOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzc0NDhIUEMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19IT0xMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFJQTUMyODAwIGlzIG5vdCBzZXQKIENPTkZJR19NUEMxMFhfQlJJREdFPXkKIENPTkZJR19NUEMxMFhfT1BFTlBJQz15CiAjIENPTkZJR19NUEMxMFhfU1RPUkVfR0FUSEVSSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogQ09ORklHX01QSUM9eQogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldApAQCAtMTY1LDcgKzE4Nyw2IEBACiAjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIAogIwpAQCAtMTgxLDEyICsyMDIsMTYgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0xMDAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKQEAgLTIwNiwxMCArMjMxLDcgQEAKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15CiBDT05GSUdfU0VDQ09NUD15Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI1OSw2ICsyODEsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yOTUsMTIgKzMxOCwxMyBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDSz1tCiAjIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKQEAgLTMxNyw2ICszNDEsNyBAQAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KKyMgQ09ORklHX05GX0NUX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0CkBAIC0zMjUsOCArMzUwLDEwIEBACiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQgaXMgbm90IHNldApAQCAtMzM2LDE0ICszNjMsMTcgQEAKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQpAQCAtMzYxLDEzICszOTEsMTAgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLSMgQ09ORklHX0lQX05GX01BVENIX1RPUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KICMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KQEAgLTM3OCw3ICs0MDUsNiBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogIyBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfU0FNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCiBDT05GSUdfTkZfTkFUX0ZUUD1tCkBAIC0zODksNyArNDE1LDYgQEAKIENPTkZJR19ORl9OQVRfSDMyMz1tCiBDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KICMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQ0Myw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTQ1OSw2ICs0ODUsNyBAQAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTU1NCw3ICs1ODEsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0yCiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQpAQCAtNTYyLDYgKzU4OSw4IEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI2LDYgKzY1NSw3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02NTYsNiArNjg2LDcgQEAKICMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldApAQCAtNjc5LDYgKzcxMCw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTY5Myw2ICs3MjUsNyBAQAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIApAQCAtNzExLDcgKzc0NCw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzQyLDYgKzc3NCw5IEBACiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNzU0LDYgKzc4OSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldApAQCAtNzY4LDYgKzgwNCw3IEBACiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTc5MCw3ICs4MjcsNiBAQAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUQ09OU09MRT15CiAjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAogQ09ORklHX05FVFBPTEw9eQpAQCAtODUxLDYgKzg4Nyw3IEBACiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTkyNCwxNCArOTYxLDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0VFUFJPTT1tCiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtOTU2LDYgKzk5MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldApAQCAtOTg1LDYgKzEwMjEsNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldApAQCAtOTk0LDkgKzEwMzEsMTEgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjMsNiArMTEwMiw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC0xMDc2LDkgKzExMTYsMTAgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQpAQCAtMTEzMCwxMiArMTE3MSw5IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiBDT05GSUdfVVNCX1NFUklBTD15CiBDT05GSUdfVVNCX1NFUklBTF9DT05TT0xFPXkKKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKQEAgLTExNTYsNiArMTE5NCw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CkBAIC0xMTk5LDE2ICsxMjM4LDkgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CkBAIC0xMjQwLDYgKzEyNzIsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTI0OSw5ICsxMjgyLDEwIEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldApAQCAtMTI1OSw2ICsxMjkzLDcgQEAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC0xMjg4LDEyICsxMzIzLDEwIEBACiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtMTM0NCw4ICsxMzc3LDEwIEBACiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CkBAIC0xNDI3LDcgKzE0NjIsNiBAQAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9bQogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xNDQ3LDcgKzE0ODEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNDY2LDYgKzE0OTksNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTQ3OCw5ICsxNTEyLDkgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CkBAIC0xNTAwLDYgKzE1MzQsNyBAQAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKQEAgLTE1MTcsNiArMTU1Miw5IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xNTMyLDExICsxNTcwLDE0IEBACiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFrYWx1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21ha2FsdV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZGIwMjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFrYWx1X2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDgxMiArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIE1vbiBEZWMgMjQgMTE6MTg6MzIgMjAwNwotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR182eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci1DT05GSUdfNDB4PXkKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR180eHg9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQNDA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAotQ09ORklHX01BS0FMVT15Ci0jIENPTkZJR19XQUxOVVQgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1ZJUlRFWF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR180MDVFWD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0ia2lsYXVlYS5kdHMiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA0MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9bQotQ09ORklHX01URF9CTE9DSz1tCi0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZwppbmRleCA4YjgxMGQwLi43YTE2NmEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tYXBsZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCkBAIC0zMzMsNyArMzMzLDcgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTM3NCw2ICszNzQsNyBAQAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfSURFX1RBU0tfSU9DVEw9eQogQ09ORklHX0lERV9QUk9DX0ZTPXkKIApAQCAtNDI3LDEwICs0MjgsMTI5IEBACiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0lQUj15CitDT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQorQ09ORklHX1NDU0lfSVBSX0RVTVA9eQorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKK0NPTkZJR19BVEFfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKQEAgLTUzNiw2ICs2NTYsNyBAQAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldApAQCAtNzgzLDEyICs5MDQsMTQgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIworIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCmluZGV4IGIwMjY2ZGUuLmEzZDUyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODoyOCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MTEgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02NiwxNSArNjcsMTkgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTg3LDExICs5MiwxMyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTk5LDYgKzEwNiwxMyBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTIxLDYgKzEzNSw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xMzEsMjAgKzE0NiwyMiBAQAogIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogQ09ORklHX0NMQVNTSUMzMj15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUZJS0EgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0xJVEU1MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKICMgQ09ORklHX0xJTktTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUT1JDRU5URVIgaXMgbm90IHNldAogQ09ORklHX01QQzc0NDhIUEMyPXkKICMgQ09ORklHX1BQQ19IT0xMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFJQTUMyODAwIGlzIG5vdCBzZXQKIENPTkZJR19UU0kxMDhfQlJJREdFPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogQ09ORklHX01QSUM9eQogQ09ORklHX01QSUNfV0VJUkQ9eQogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE1Niw3ICsxNzMsNiBAQAogIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiAKICMKQEAgLTE3MiwxMiArMTg4LDE2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQpAQCAtMTk3LDExICsyMTcsNyBAQAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yNDksNiArMjY1LDcgQEAKIENPTkZJR19YRlJNX1VTRVI9eQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTMwNCw2ICszMjEsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC0zNDgsNyArMzY2LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTM1Niw2ICszNzQsOCBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQxOSw2ICs0MzksNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNDcyLDYgKzQ5Myw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTUwNSw3ICs1MjcsNiBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15CiAKQEAgLTUyMSw2ICs1NDIsNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTU1Miw2ICs1NzQsNyBAQAogIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKQEAgLTU2Myw2ICs1ODYsOSBAQAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTU4OSw2ICs2MTUsNyBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02MDIsNyArNjI5LDYgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjQ1LDYgKzY3MSw3IEBACiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzAzLDYgKzczMCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTc1NSwxNiArNzgzLDE0IEBACiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtNzkwLDEyICs4MTYsMTAgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC04MzcsOCArODYxLDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtODgzLDcgKzkwOSw2IEBACiAjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTg5OSw3ICs5MjQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC05MTMsNiArOTM3LDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CkBAIC05MjQsNSArOTQ5LDQ5IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IDVlYWUzMDUyLi4wMjY0YzU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNQotIyBUaHUgRGVjIDEzIDIyOjQwOjU3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODoxMyAyMDA4CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTI4LDYgKzI4LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTY5LDkgKzcwLDE0IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CkBAIC04MywxMSArODksMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC05NSw2ICsxMDMsMTMgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTExNiw2ICsxMzEsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTI0LDE2ICsxNDAsMTggQEAKIENPTkZJR19QUENfODJ4eD15CiAjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogQ09ORklHX01QQzgyNzJfQURTPXkKICMgQ09ORklHX1BRMkZBRFMgaXMgbm90IHNldAorIyBDT05GSUdfRVA4MjQ4RSBpcyBub3Qgc2V0CiBDT05GSUdfUFEyQURTPXkKIENPTkZJR184MjYwPXkKIENPTkZJR184MjcyPXkKIENPTkZJR19QUTJfQURTX1BDSV9QSUM9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE2MiwxMiArMTgwLDE2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMTgyLDExICsyMDQsNyBAQAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKIENPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0ibXBjODI3MmFkcy5kdHMiCiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yMDUsNiArMjIzLDcgQEAKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEFkdmFuY2VkIHNldHVwCkBAIC0yNzcsMTIgKzI5NiwxMyBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAogCkBAIC0yOTIsNiArMzEyLDEzIEBACiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldApAQCAtMzA1LDYgKzMzMiw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIApAQCAtMzEzLDYgKzM0MSw3IEBACiAjCiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQyNyw2ICs0NTYsNyBAQAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00NzIsNiArNTAyLDcgQEAKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfTURJT19CSVRCQU5HPXkKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNDk3LDYgKzUyOCw4IEBACiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKQEAgLTUwNyw2ICs1NDAsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNTE5LDYgKzU1Myw3IEBACiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY0Miw2ICs2NzcsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC02ODQsOSArNzIwLDExIEBACiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtNzEwLDEyICs3NDgsMTAgQEAKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtNzQzLDYgKzc3OSw3IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzUxLDggKzc4OCwxMCBAQAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTgzMyw3ICs4NzIsNiBAQAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODUxLDcgKzg4OSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTg3MCw2ICs5MDcsNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtODgyLDggKzkyMCw4IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKQEAgLTkwMiw2ICs5NDAsNyBAQAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTkxNSw2ICs5NTQsOSBAQAogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC05MzQsNiArOTc2LDcgQEAKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzEzX3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzEzX3JkYl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMjlhYzUuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTM1OSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIFRodSBKYW4gMTcgMTY6MzU6NTUgMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4PXkKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4MzF4X1JEQj15Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzgzMXg9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9IiIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi0jIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfTUQ9eQotQ09ORklHX0JMS19ERVZfTUQ9eQotQ09ORklHX01EX0xJTkVBUj15Ci1DT05GSUdfTURfUkFJRDA9eQotQ09ORklHX01EX1JBSUQxPXkKLSMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19DSUNBREFfUEhZPXkKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLUNPTkZJR19HRkFSX05BUEk9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLUNPTkZJR19TUEk9eQotIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1NQSV9CSVRCQU5HPXkKLUNPTkZJR19TUElfTVBDODN4eD15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4X1dEVD15Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfRlNMPXkKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19VU0JfVUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0dBREdFVD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX05FVDIyODA9eQotQ09ORklHX1VTQl9ORVQyMjgwPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVRIPXkKLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMxNV9yZGJfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWRmN2Y5Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzMTVfcmRiX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0MTcgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjOAotIyBXZWQgSmFuIDIzIDIwOjAyOjI1IDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODN4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci0jIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184M3h4PXkKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX01QQzgzMXhfUkRCPXkKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDODMxeD15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX0ZTTD15Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD15Ci1DT05GSUdfTURfTElORUFSPXkKLUNPTkZJR19NRF9SQUlEMD15Ci1DT05GSUdfTURfUkFJRDE9eQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfR0lBTkZBUj15Ci1DT05GSUdfR0ZBUl9OQVBJPXkKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi1DT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19TUElfQklUQkFORz15Ci1DT05GSUdfU1BJX01QQzgzeHg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfODN4eF9XRFQ9eQotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0ZTTD15Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci1DT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwPXkKLUNPTkZJR19VU0JfTkVUMjI4MD15Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLUNPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLUNPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzMnhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzMnhfbWRzX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ4OTUxYi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQ1ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODozMyAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR182eHg9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzgzeHg9eQotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184M3h4PXkKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMxM19SREIgaXMgbm90IHNldAotQ09ORklHX01QQzgzMnhfTURTPXkKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDODMyeD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci1DT05GSUdfUVVJQ0NfRU5HSU5FPXkKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotIyBDT05GSUdfQkxLX0RFVl9TRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotQ09ORklHX0RBVklDT01fUEhZPXkKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAotQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VHRVRIX0ZJTFRFUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfODN4eF9XRFQ9eQotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLUNPTkZJR19SVENfRFJWX0RTMTM3ND15Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKLUNPTkZJR19VQ0NfRkFTVD15Ci1DT05GSUdfVUNDPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4X3JkYl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MTcxOGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMyeF9yZGJfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTIwMyArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDg6MzUgMjAwNwotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4PXkKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMTNfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4MzJ4X1JEQj15Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzgzMng9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotQ09ORklHX1FVSUNDX0VOR0lORT15Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9IiIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19JQ1BMVVNfUEhZPXkKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKLUNPTkZJR19VQ0NfR0VUSD15Ci1DT05GSUdfVUdFVEhfTkFQST15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAotIyBDT05GSUdfVUdFVEhfRklMVEVSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1NQSV9CSVRCQU5HPXkKLUNPTkZJR19TUElfTVBDODN4eD15Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4X1dEVD15Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX1NQST15Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTERNX1BBUlRJVElPTj15Ci0jIENPTkZJR19MRE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotQ09ORklHX05MU19JU084ODU5Xzg9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci1DT05GSUdfVUNDX0ZBU1Q9eQotQ09ORklHX1VDQz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfSVRVX1Q9eQotQ09ORklHX0NSQzMyPXkKLUNPTkZJR19DUkM3PXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X2l0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X2l0eF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmU0ZTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9pdHhfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTI2NiArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDg6MzcgMjAwNwotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4PXkKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMTNfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4MzR4X0lUWD15Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODM0eD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLSMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDEwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgotIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci0jIENPTkZJR19CTEtfREVWX0lERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEX09OTFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1NJTD15Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLUNPTkZJR19QQVRBX1BMQVRGT1JNPXkKLUNPTkZJR19QQVRBX09GX1BMQVRGT1JNPXkKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD15Ci1DT05GSUdfTURfTElORUFSPXkKLUNPTkZJR19NRF9SQUlEMD15Ci1DT05GSUdfTURfUkFJRDE9eQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotQ09ORklHX0NJQ0FEQV9QSFk9eQotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX0dJQU5GQVI9eQotQ09ORklHX0dGQVJfTkFQST15Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PXkKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19TUElfQklUQkFORz15Ci1DT05GSUdfU1BJX01QQzgzeHg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4X1dEVD15Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0ZTTD15Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLUNPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLUNPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2NiMDljLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTE5NSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDg6MzkgMjAwNwotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4PXkKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMTNfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4MzR4X0lUWD15Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODM0eD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLSMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDgwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCi0jIENPTkZJR19NVERfUEhZU01BUF9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotQ09ORklHX0NJQ0FEQV9QSFk9eQotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX0dJQU5GQVI9eQotQ09ORklHX0dGQVJfTkFQST15Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PXkKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19TUElfQklUQkFORz15Ci1DT05GSUdfU1BJX01QQzgzeHg9eQotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4X1dEVD15Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfRlNMPXkKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9VSENJX0hDRD15Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfbWRzX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE3NTM5Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X21kc19kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw5ODggKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ4OjQxIDIwMDcKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODN4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci0jIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzgzeHg9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzEzX1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODM0eF9NRFM9eQotIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAotQ09ORklHX01QQzgzNHg9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9IiIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUFSVkVMTF9QSFk9eQotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAotQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19HRkFSX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHXzgzeHhfV0RUPXkKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKLUNPTkZJR19VU0JfRUhDSV9GU0w9eQotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9EUzEzNzQ9eQotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM2eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM2eF9tZHNfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDRmYzU2Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNnhfbWRzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEwNDQgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ4OjQzIDIwMDcKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODN4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci0jIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzgzeHg9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzEzX1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODM2eF9NRFM9eQotQ09ORklHX1BQQ19NUEM4MzZ4PXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLUNPTkZJR19RVUlDQ19FTkdJTkU9eQotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9IiIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKLUNPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9OQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VR0VUSF9GSUxURVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHXzgzeHhfV0RUPXkKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9EUzEzNzQ9eQotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci1DT05GSUdfVUNDX0ZBU1Q9eQotQ09ORklHX1VDQz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM3eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM3eF9tZHNfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjQ5YWVlLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzN3hfbWRzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDg3OCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMKLSMgV2VkIE9jdCAxMCAxNjozMTozOSAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR182eHg9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzgzeHg9eQotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184M3h4PXkKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMxM19SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAotQ09ORklHX01QQzgzN3hfTURTPXkKLUNPTkZJR19QUENfTVBDODM3eD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfU0VSREVTPXkKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX0ZTTD15Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUFSVkVMTF9QSFk9eQotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19HRkFSX05BUEkgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHXzgzeHhfV0RUPXkKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLQotIwotIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzN3hfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzN3hfcmRiX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFkMjkxZS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Mzd4X3JkYl9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw4ODcgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjOAotIyBUaHUgSmFuIDI0IDIwOjA0OjM5IDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODN4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184M3h4PXkKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAotQ09ORklHX01QQzgzN3hfUkRCPXkKLUNPTkZJR19QUENfTVBDODM3eD15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX1NBVEFfRlNMPXkKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPXkKLSMgQ09ORklHX01EX0xJTkVBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9SQUlEMCBpcyBub3Qgc2V0Ci1DT05GSUdfTURfUkFJRDE9eQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENDU2PXkKLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKLSMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9ETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUFSVkVMTF9QSFk9eQotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfR0lBTkZBUj15Ci1DT05GSUdfR0ZBUl9OQVBJPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHXzgzeHhfV0RUPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci0jIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19YT1JfQkxPQ0tTPXkKLUNPTkZJR19BU1lOQ19DT1JFPXkKLUNPTkZJR19BU1lOQ19NRU1DUFk9eQotQ09ORklHX0FTWU5DX1hPUj15Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwppbmRleCBhOTgwN2YwLi45ZTBkZDgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzgKLSMgTW9uIEphbiAyOCAxMzoxNDoxOSAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM5CisjIFR1ZSBBcHIgMTUgMTg6MDc6MzYgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNSw2ICsxNSw3IEBACiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKQEAgLTI4LDYgKzI5LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTY1LDE3ICs2NywxOSBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtODgsMTcgKzkyLDI2IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKQEAgLTEyNyw2ICsxNDAsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTM1LDggKzE0OSw4IEBACiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CkBAIC0xODEsMTMgKzE5NSwxOCBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMDYsMTEgKzIyNSw3IEBACiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQogQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yNTUsNiArMjcwLDcgQEAKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTMxMCw2ICszMjYsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC0zMzcsNyArMzU0LDkwIEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9GU0xfRUxCQz15CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CkBAIC0zNDYsMTQgKzQ0NiwxNyBAQAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTM5OCw2ICs1MDEsNyBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX0ZTTD15CiAjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKQEAgLTQyNCw2ICs1MjgsNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKIENPTkZJR19JQ1BMVVNfUEhZPXkKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC00MzQsOSArNTM5LDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiBDT05GSUdfR0lBTkZBUj15CiAjIENPTkZJR19HRkFSX05BUEkgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKKyMgQ09ORklHX1VHRVRIX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VHRVRIX0ZJTFRFUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAKICMKQEAgLTQ0NCwxMCArNTU0LDE4IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC01MzksMTggKzY1NywxNyBAQAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtNTc1LDYgKzY5Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtNjAyLDYgKzcyMCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CkBAIC02MDksOSArNzI4LDExIEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNjIyLDYgKzc0MywxMSBAQAogQ09ORklHXzgzeHhfV0RUPXkKIAogIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwogQ09ORklHX1NTQl9QT1NTSUJMRT15CkBAIC02MzgsNiArNzY0LDcgQEAKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTY2MCwyNiArNzg3LDk5IEBACiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKKyMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTcwNSwxMiArOTA1LDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtNzUwLDEwICs5NDgsMTMgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CkBAIC04MDEsNiArMTAwMiw4IEBACiAjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorQ09ORklHX1VDQ19GQVNUPXkKK0NPTkZJR19VQ0M9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTgxNiwxMCArMTAxOSw3IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9MTUI9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC04NDUsNiArMTA0NSw3IEBACiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldApAQCAtODYyLDYgKzEwNjMsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtODc2LDEyICsxMDgwLDE0IEBACiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU0MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU0MF9hZHNfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzkxZTI5Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NDBfYWRzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDcyOSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDg6NDQgMjAwNwotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR182eHggaXMgbm90IHNldAotQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184NXh4PXkKLUNPTkZJR19FNTAwPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX01QQzg1NDBfQURTPXkKLSMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotQ09ORklHX01QQzg1NDA9eQotQ09ORklHX01QQzg1eHg9eQotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci0jIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX0dJQU5GQVI9eQotQ09ORklHX0dGQVJfTkFQST15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NDRfZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU0NF9kc19kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NjIzYTguLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU0NF9kc19kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNTA1ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODo0NiAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzg1eHg9eQotQ09ORklHX0U1MDA9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19GU0xfQk9PS0U9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BFPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotQ09ORklHX0FVRElUPXkKLSMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotQ09ORklHX01QQzg1eHhfRFM9eQotQ09ORklHX01QQzg1eHg9eQotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfVUxJMTU3NT15Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLUNPTkZJR19ISUdITUVNPXkKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9IiIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKLUNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQotQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotQ09ORklHX05FVF9JUElQPXkKLUNPTkZJR19ORVRfSVBHUkU9eQotQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQotQ09ORklHX0lQX01ST1VURT15Ci1DT05GSUdfSVBfUElNU01fVjE9eQotQ09ORklHX0lQX1BJTVNNX1YyPXkKLUNPTkZJR19BUlBEPXkKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9TQ1RQPW0KLSMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAotQ09ORklHX1NDVFBfSE1BQ19NRDU9eQotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9OQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPXkKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9HR0lORz15Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLUNPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX0FIQ0k9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotQ09ORklHX1BBVEFfQUxJPXkKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci1DT05GSUdfVklURVNTRV9QSFk9eQotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLUNPTkZJR19HRkFSX05BUEk9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX05WUkFNPXkKLUNPTkZJR19HRU5fUlRDPXkKLUNPTkZJR19HRU5fUlRDX1g9eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX0VFUFJPTT15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX0RWQl9DT1JFPW0KLSMgQ09ORklHX0RWQl9DT1JFX0FUVEFDSCBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15Ci0KLSMKLSMgU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzCi0jCi0KLSMKLSMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFRVU0JfQlVER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVFVTQl9ERUMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NJTkVSR1lUMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKLSMKLSMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycwotIwotCi0jCi0jIFN1cHBvcnRlZCBQbHV0bzIgQWRhcHRlcnMKLSMKLSMgQ09ORklHX0RWQl9QTFVUTzIgaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCi0jCi0KLSMKLSMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAotCi0jCi0jIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX1NUVjAyOTkgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjQxMTAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjQxMjMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgwODMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9WRVMxWDkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TNUgxNDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9TUDg4NzAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NQODg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyMjcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTDY0NzgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTlhUNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTVQzNTIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1pMMTAzNTMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjMwMDBNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCMzAwME1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUI3MDAwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCNzAwMFAgaXMgbm90IHNldAotCi0jCi0jIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfVkVTMTgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwMjEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TVFYwMjk3IGlzIG5vdCBzZXQKLQotIwotIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9OWFQyMDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9PUjUxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9PUjUxMTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9CQ00zNTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9MR0RUMzMwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfUzVIMTQwOSBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVuZXJzL1BMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EVkJfUExMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREE4MjZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREE4MjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVU5FUl9RVDEwMTAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfTVQyMjY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZGV2aWNlcwotIwotIyBDT05GSUdfRFZCX0xOQlAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfSVNMNjQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVBNjEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfSU5URUw4WDA9eQotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgUG93ZXJNYWMgZGV2aWNlcwotIwotCi0jCi0jIEFMU0EgUG93ZXJQQyBkZXZpY2VzCi0jCi0KLSMKLSMgVVNCIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCi0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz15Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi1DT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BDST15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLUNPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0lTTzk2NjBfRlM9bQotQ09ORklHX0pPTElFVD15Ci1DT05GSUdfWklTT0ZTPXkKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLUNPTkZJR19OVEZTX0ZTPXkKLSMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfQURGU19GUz1tCi0jIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKLUNPTkZJR19BRkZTX0ZTPW0KLUNPTkZJR19IRlNfRlM9bQotQ09ORklHX0hGU1BMVVNfRlM9bQotQ09ORklHX0JFRlNfRlM9bQotIyBDT05GSUdfQkVGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQkZTX0ZTPW0KLUNPTkZJR19FRlNfRlM9bQotQ09ORklHX0NSQU1GUz15Ci1DT05GSUdfVlhGU19GUz1tCi1DT05GSUdfSFBGU19GUz1tCi1DT05GSUdfUU5YNEZTX0ZTPW0KLUNPTkZJR19TWVNWX0ZTPW0KLUNPTkZJR19VRlNfRlM9bQotIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD15Ci0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1RDUD15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU2MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU2MF9hZHNfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWY5NjkzLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NjBfYWRzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDgxMyArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDg6NDggMjAwNwotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR182eHggaXMgbm90IHNldAotQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184NXh4PXkKLUNPTkZJR19FNTAwPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotQ09ORklHX01QQzg1NjBfQURTPXkKLSMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotQ09ORklHX01QQzg1NjA9eQotQ09ORklHX01QQzg1eHg9eQotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0yPXkKLUNPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HPXkKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLUNPTkZJR19DUE09eQotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLUNPTkZJR19QQ0lfREVCVUc9eQotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NQVJWRUxMX1BIWT15Ci1DT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX0ZTX0VORVQ9eQotIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKLUNPTkZJR19GU19FTkVUX0hBU19GQ0M9eQotIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotQ09ORklHX0UxMDAwPXkKLUNPTkZJR19FMTAwMF9OQVBJPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX0dJQU5GQVI9eQotQ09ORklHX0dGQVJfTkFQST15Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NQTT15Ci1DT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ1BNX1NDQzE9eQotQ09ORklHX1NFUklBTF9DUE1fU0NDMj15Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU01DMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NNQzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tHREJfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NjhtZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU2OG1kc19kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MWI1OGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU2OG1kc19kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMDc2ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODo1MCAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzg1eHg9eQotQ09ORklHX0U1MDA9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19GU0xfQk9PS0U9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BFPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotQ09ORklHX01QQzg1eHhfTURTPXkKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotQ09ORklHX01QQzg1eHg9eQotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLUNPTkZJR19RVUlDQ19FTkdJTkU9eQotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotIyBDT05GSUdfQkxLX0RFVl9TRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX01BUlZFTExfUEhZPXkKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLUNPTkZJR19HRkFSX05BUEk9eQotIyBDT05GSUdfVUNDX0dFVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT0tFX1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotQ09ORklHX1JUQ19EUlZfRFMxMzc0PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHR0VSPXkKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUEFTX1JFQUxNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU3Ml9kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTcyX2RzX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQwODAyZC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTcyX2RzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE1MDUgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ4OjUyIDIwMDcKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODV4eD15Ci1DT05GSUdfRTUwMD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVQ9eQotIyBDT05GSUdfQVVESVRTWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODV4eF9EUz15Ci1DT05GSUdfTVBDODV4eD15Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSTgyNTk9eQotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotQ09ORklHX0ZTTF9VTEkxNTc1PXkKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0tFWT1tCi0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15Ci1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci1DT05GSUdfTkVUX0lQSVA9eQotQ09ORklHX05FVF9JUEdSRT15Ci1DT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15Ci1DT05GSUdfSVBfTVJPVVRFPXkKLUNPTkZJR19JUF9QSU1TTV9WMT15Ci1DT05GSUdfSVBfUElNU01fVjI9eQotQ09ORklHX0FSUEQ9eQotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX1NBVEFfQUhDST15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci1DT05GSUdfUEFUQV9BTEk9eQotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19WSVRFU1NFX1BIWT15Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX0dJQU5GQVI9eQotQ09ORklHX0dGQVJfTkFQST15Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfTlZSQU09eQotQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX0dFTl9SVENfWD15Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0NPUkU9bQotIyBDT05GSUdfRFZCX0NPUkVfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfQ0FQVFVSRV9EUklWRVJTPXkKLQotIwotIyBTdXBwb3J0ZWQgU0FBNzE0NiBiYXNlZCBQQ0kgQWRhcHRlcnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19EVkJfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVFVTQl9CVURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RUVVNCX0RFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ0lORVJHWVQyIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIEJUODc4IEFkYXB0ZXJzCi0jCi0KLSMKLSMgU3VwcG9ydGVkIFBsdXRvMiBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX1BMVVRPMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKLSMKLQotIwotIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfU1RWMDI5OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyNDEyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBODA4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTVQzMTIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1ZFUzFYOTMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDg2IGlzIG5vdCBzZXQKLQotIwotIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX1NQODg3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU1A4ODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDIyNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDIyNzAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9MNjQ3ODEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9OWFQ2MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9NVDM1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfWkwxMDM1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCMzAwME1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUIzMDAwTUMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjcwMDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUI3MDAwUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9WRVMxODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAotCi0jCi0jIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TNUgxNDA5IGlzIG5vdCBzZXQKLQotIwotIyBUdW5lcnMvUExMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgyN1ggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX1FUMTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfTVQyMDYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVU5FUl9NVDIyNjYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX01UMjEzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfRElCMDA3MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBkZXZpY2VzCi0jCi0jIENPTkZJR19EVkJfTE5CUDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVUE2MTAwIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi1DT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIwotQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIFBDSSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotQ09ORklHX1NORF9JTlRFTDhYMD15Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBQb3dlck1hYyBkZXZpY2VzCi0jCi0KLSMKLSMgQUxTQSBQb3dlclBDIGRldmljZXMKLSMKLQotIwotIyBVU0IgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPXkKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotQ09ORklHX1JUQ19EUlZfQ01PUz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfSVNPOTY2MF9GUz1tCi1DT05GSUdfSk9MSUVUPXkKLUNPTkZJR19aSVNPRlM9eQotQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotQ09ORklHX05URlNfRlM9eQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19BREZTX0ZTPW0KLSMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAotQ09ORklHX0FGRlNfRlM9bQotQ09ORklHX0hGU19GUz1tCi1DT05GSUdfSEZTUExVU19GUz1tCi1DT05GSUdfQkVGU19GUz1tCi0jIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19CRlNfRlM9bQotQ09ORklHX0VGU19GUz1tCi1DT05GSUdfQ1JBTUZTPXkKLUNPTkZJR19WWEZTX0ZTPW0KLUNPTkZJR19IUEZTX0ZTPW0KLUNPTkZJR19RTlg0RlNfRlM9bQotQ09ORklHX1NZU1ZfRlM9bQotQ09ORklHX1VGU19GUz1tCi0jIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPXkKLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotQ09ORklHX05GU0RfVENQPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2Nkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2Nkc19kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOWFkNTguLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9jZHNfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODY0ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODo1NCAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzg1eHg9eQotQ09ORklHX0U1MDA9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19GU0xfQk9PS0U9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BFPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODV4eF9DRFM9eQotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODU0MD15Ci1DT05GSUdfTVBDODV4eD15Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSTgyNTk9eQotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci0jIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVESVNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLUNPTkZJR19HRkFSX05BUEk9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwppbmRleCA5MGUzOGJhLi4yMDc1NzIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzgKLSMgTW9uIEphbiAyOCAxMzoxMjowNyAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM3CisjIE1vbiBNYXIgMzEgMTE6Mzc6MDggMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNyw2ICsxNyw3IEBACiBDT05GSUdfRTUwMD15CiBDT05GSUdfQk9PS0U9eQogQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTY3LDE3ICs2OSwyMSBAQAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKICMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC05MSwxMSArOTcsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDMsNiArMTExLDEzIEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKQEAgLTEzMSwxMiArMTQ2LDEzIEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CkBAIC0xODQsMTMgKzIwMCwxNyBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMDksMTEgKzIyOSw3IEBACiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQogQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yNjQsNiArMjgwLDcgQEAKIENPTkZJR19YRlJNX1VTRVI9eQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTM0Nyw2ICszNjQsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC0zOTUsNyArNDEzLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTQwMyw2ICs0MjEsOCBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2OCw2ICs0ODgsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTIyLDYgKzU0Myw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTU3MCw2ICs1OTIsNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTU5Miw3ICs2MTUsOSBAQAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs2NDUsNyBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02NDIsNyArNjY4LDYgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjkzLDYgKzcxOCw3IEBACiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTcyNCw4ICs3NTAsNyBAQAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQotQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzczLDE0ICs3OTgsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC03OTYsNiArODE5LDcgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtODIwLDYgKzg0NCw4IEBACiAjCiAjIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycwogIworIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9CVURHRVRfQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycwpAQCAtOTA1LDExICs5MzEsMTMgQEAKICMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1REQTgyN1ggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTE4MjcxIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9UVU5FUl9RVDEwMTAgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfVFVORVJfTVQyMjY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX1hDNTAwMCBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBkZXZpY2VzCkBAIC05ODcsNiArMTAxNSw3IEBACiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldApAQCAtMTAxMiw2ICsxMDQxLDcgQEAKICMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAogQ09ORklHX1NORF9JTlRFTDhYMD15CkBAIC0xMDI5LDYgKzEwNTksNyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldApAQCAtMTA1OCw2ICsxMDg5LDEwIEBACiAjCiAKICMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKQEAgLTEwODAsNiArMTExNSw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC0xMDkzLDkgKzExMjksMTAgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQpAQCAtMTE0NiwxMCArMTE4Myw2IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3NSwxNiArMTIwOCw5IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldApAQCAtMTIxNiw2ICsxMjQyLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMjUsOSArMTI1MiwxMCBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CkBAIC0xMjM1LDYgKzEyNjMsNyBAQAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTEyNjAsMTIgKzEyODksMTAgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xMzE3LDggKzEzNDQsMTAgQEAKIENPTkZJR19FRlNfRlM9bQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfVlhGU19GUz1tCisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSFBGU19GUz1tCiBDT05GSUdfUU5YNEZTX0ZTPW0KKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKQEAgLTE0MjYsNyArMTQ1NSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE0NDUsNiArMTQ3Myw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNDU4LDkgKzE0ODcsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKQEAgLTE0ODAsNiArMTUwOSw3IEBACiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xNDk4LDYgKzE1MjgsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTUxMiwxMiArMTU0NSwxNSBAQAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTElCX1JIRUFQPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2MTBfaHBjZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmluZGV4IDI1MDBlZjQuLjkyNzBhZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2MTBfaHBjZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODYxMF9ocGNkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODo1NiAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MzMgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02NSwxNiArNjYsMjAgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC04OCwxMSArOTMsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTEwMCw2ICsxMDcsMTMgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEyMiw2ICsxMzYsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xMzAsMTQgKzE0NSwxNSBAQAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184Nnh4PXkKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4NjEwX0hQQ0Q9eQogQ09ORklHX01QQzg2MTA9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0xNDgsNyArMTY0LDYgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0xNjQsMTIgKzE3OSwxNiBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19IWj0xMDAwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0xODgsMTAgKzIwNyw3IEBACiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI0Myw2ICsyNTksNyBAQAogQ09ORklHX1hGUk1fVVNFUj15CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0zMTEsNiArMzI4LDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtMzU3LDcgKzM3NSw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC0zNjUsNiArMzgzLDggQEAKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIENPTkZJR19JREVfTUFYX0hXSUZTPTQKICMgQ09ORklHX0JMS19ERVZfSURFIGlzIG5vdCBzZXQKQEAgLTQzMiw2ICs0NTIsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNDYyLDYgKzQ4Myw3IEBACiAjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CkBAIC00ODUsNiArNTA3LDcgQEAKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldApAQCAtNTE4LDcgKzU0MSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKIApAQCAtNTM0LDYgKzU1Niw3IEBACiAjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNTc0LDYgKzU5Nyw3IEBACiAjIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAogIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldApAQCAtNTg1LDYgKzYwOSw5IEBACiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNjEwLDYgKzYzNyw3IEBACiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTYyMyw3ICs2NTEsNiBAQAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC02NzQsNiArNzAxLDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzQ4LDE0ICs3NzYsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTc3MSw2ICs3OTcsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC04NTksNiArODg2LDcgQEAKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CkBAIC04ODQsNiArOTEyLDcgQEAKICMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKQEAgLTkwMSw2ICs5MzAsNyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIApAQCAtOTI5LDYgKzk1OSwxMCBAQAogQ09ORklHX1NORF9TT0NfQ1M0MjcwPXkKIENPTkZJR19TTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQT15CiAKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NDIsMTYgKzk3NiwxNCBAQAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTk3NywxMSArMTAwOSw5IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMjMsOCArMTA1MywxMCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTExMTQsNyArMTE0Niw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTEzMCw3ICsxMTYxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTE0OSw2ICsxMTc5LDcgQEAKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTExNjIsOCArMTE5Myw4IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKQEAgLTExNzksNSArMTIxMCw0OSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjQxX2hwY25fZGVmY29uZmlnCmluZGV4IGZmMDkyZmMuLmQwMWRjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODo1OCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM3CisjIE1vbiBNYXIgMzEgMTE6Mzc6MTEgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zMCw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02OCwxNyArNjksMjEgQEAKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15CiAjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CiAjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtOTIsMTEgKzk3LDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQpAQCAtMTA0LDYgKzExMSwxNCBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMzIsNiArMTQ3LDcgQEAKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xNDAsMTQgKzE1NiwxNSBAQAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184Nnh4PXkKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX01QQzg2NDFfSFBDTj15CiAjIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAogQ09ORklHX01QQzg2NDE9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSTgyNTk9eQpAQCAtMTU4LDcgKzE3NSw2IEBACiAjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKIENPTkZJR19GU0xfVUxJMTU3NT15CiAKICMKQEAgLTE3NCwxMyArMTkwLDE2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX0haPTEwMDAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfQktMPXkKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKQEAgLTIwMSw3ICsyMjAsNiBAQAogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKLSMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjUyLDYgKzI3MCw3IEBACiBDT05GSUdfWEZSTV9VU0VSPXkKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0zMzUsNiArMzU0LDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtMzgzLDcgKzQwMyw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC0zOTEsNiArNDExLDggQEAKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00NTYsNiArNDc4LDcgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTQ4Niw2ICs1MDksNyBAQAogIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldApAQCAtNTA5LDYgKzUzMyw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTU0Miw3ICs1NjcsNiBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15CiAKQEAgLTU1OCw2ICs1ODIsNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTU3OSw2ICs2MDQsOSBAQAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTYwNSw2ICs2MzMsNyBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02MjcsNyArNjU2LDYgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjc4LDYgKzcwNiw3IEBACiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTcwNyw4ICs3MzYsNyBAQAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQotQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzU2LDE0ICs3ODQsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC03NzksNiArODA1LDcgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtODAzLDYgKzgzMCw4IEBACiAjCiAjIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycwogIworIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9CVURHRVRfQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycwpAQCAtODg4LDExICs5MTcsMTMgQEAKICMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1REQTgyNlggaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1REQTgyN1ggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTE4MjcxIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9UVU5FUl9RVDEwMTAgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfVFVORVJfTVQyMjY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX1hDNTAwMCBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBkZXZpY2VzCkBAIC05NzAsNiArMTAwMSw3IEBACiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldApAQCAtOTk1LDYgKzEwMjcsNyBAQAogIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0lOVEVMOFgwPXkKQEAgLTEwMTIsNiArMTA0NSw3IEBACiAjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CkBAIC0xMDQxLDYgKzEwNzUsMTAgQEAKICMKIAogIworIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKKyMKKworIwogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldApAQCAtMTA2Myw2ICsxMTAxLDcgQEAKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTEwNzYsOSArMTExNSwxMCBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CkBAIC0xMTI5LDEwICsxMTY5LDYgQEAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMTU4LDE2ICsxMTk0LDkgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CkBAIC0xMTk5LDYgKzEyMjgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTIwOCw5ICsxMjM4LDEwIEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKQEAgLTEyMTgsNiArMTI0OSw3IEBACiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtMTI0MywxMiArMTI3NSwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEzMDAsOCArMTMzMCwxMCBAQAogQ09ORklHX0VGU19GUz1tCiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19WWEZTX0ZTPW0KKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19IUEZTX0ZTPW0KIENPTkZJR19RTlg0RlNfRlM9bQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZfRlM9bQogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldApAQCAtMTM5Myw3ICsxNDI1LDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTQxMCw3ICsxNDQxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTQyOSw2ICsxNDU5LDcgQEAKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE0NDIsOSArMTQ3Myw5IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldApAQCAtMTQ2Myw2ICsxNDk0LDcgQEAKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKQEAgLTE0ODEsNiArMTUxMyw5IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xNDk1LDExICsxNTMwLDE0IEBACiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwppbmRleCBhN2VmMjMxLi4yZDgzMWRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODo1OSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MzUgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yNiw2ICsyNiw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02MiwxNSArNjMsMTkgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTgyLDExICs4NywxMyBAQAogQ09ORklHX1BSSU5USz15CiAjIENPTkZJR19CVUcgaXMgbm90IHNldAogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldApAQCAtOTQsNiArMTAxLDEzIEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0xCkBAIC0xMTYsMTIgKzEzMCwxMyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUE0xPXkKQEAgLTEyOSw2ICsxNDQsNyBAQAogQ09ORklHX01QQzg2WEFEUz15CiAjIENPTkZJR19NUEM4ODVBRFMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VQODhYQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQURERVI4NzUgaXMgbm90IHNldAogCiAjCiAjIE1QQzh4eCBDUE0gT3B0aW9ucwpAQCAtMTQ1LDYgKzE2MSw3IEBACiAjIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE1NSw3ICsxNzIsNyBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BNPXkKIApAQCAtMTcyLDEzICsxODksMTcgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTE5NywxMSArMjE4LDcgQEAKICMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0yNDYsNiArMjYzLDcgQEAKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMzAxLDYgKzMxOSw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTM0MCw2ICszNTksOCBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtMzc0LDExICszOTUsOCBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogQ09ORklHX0ZJWEVEX1BIWT15Ci1DT05GSUdfRklYRURfTUlJXzEwX0ZEWD15Ci1DT05GSUdfRklYRURfTUlJXzEwMF9GRFg9eQotIyBDT05GSUdfRklYRURfTUlJXzEwMDBfRkRYIGlzIG5vdCBzZXQKLUNPTkZJR19GSVhFRF9NSUlfQU1OVD0xCiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKQEAgLTM5Miw2ICs0MTAsOCBAQAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiBDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIAogIwpAQCAtNDAyLDcgKzQyMiw2IEBACiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTUxOSw2ICs1MzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC01NjgsMTUgKzU4OCwxMyBAQAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC02MDQsMTIgKzYyMiwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTY1MSw4ICs2NjcsMTAgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtNjk5LDcgKzcxNyw2IEBACiAjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTcxNiw3ICs3MzMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC03MzAsNiArNzQ2LDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTczOSw2ICs3NTYsNDkgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCmluZGV4IDIyZjgxNzEuLjgyMTUxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBUaHUgRGVjICA2IDE2OjQ5OjAxIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgTW9uIE1hciAyNCAwODo0ODozNSAyMDA4CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTI2LDYgKzI2LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTYzLDE1ICs2NCwxOSBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CiAjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQpAQCAtODQsMTEgKzg5LDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CkBAIC05Niw2ICsxMDMsMTMgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldApAQCAtMTE3LDEyICsxMzEsMTMgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUE0xPXkKQEAgLTEzMCw2ICsxNDUsNyBAQAogIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4ODVBRFM9eQogIyBDT05GSUdfUFBDX0VQODhYQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQURERVI4NzUgaXMgbm90IHNldAogCiAjCiAjIEZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW9ucwpAQCAtMTUzLDYgKzE2OSw3IEBACiAjIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE2Myw3ICsxODAsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BNPXkKQEAgLTE4MSw2ICsxOTcsNyBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0xODgsNyArMjA1LDEwIEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIwNywxMSArMjI3LDcgQEAKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0ibXBjODg1YWRzLmR0cyIKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTMwOCw2ICszMjQsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDM1LDcgQEAKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ1Miw2ICs0NzAsNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQ3Niw3ICs0OTUsNiBAQAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC01MzksNiArNTU3LDcgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc4LDkgKzU5NywxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTU5OSwxMSArNjIwLDkgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtNjQ2LDggKzY2NSwxMCBAQAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTY5NCw3ICs3MTUsNiBAQAogIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC03MDksNyArNzI5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtNzI4LDYgKzc0Nyw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKQEAgLTczOCw4ICs3NTgsOCBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwppbmRleCA3OTdmMGRmLi4wOWYzMDYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIFR1ZSBKYW4gMTUgMTA6MjY6MTAgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBUdWUgTWFyIDI1IDEwOjI1OjQ4IDIwMDgKICMKIENPTkZJR19QUEM2ND15CiAKQEAgLTI3LDYgKzI3LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02NywxNyArNjgsMTkgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC05MSwxMSArOTQsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDMsNiArMTA4LDE1IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMTMwLDYgKzE0NCw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xNDAsOCArMTU1LDggQEAKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1BBU0VNST15CkBAIC0xNTksNiArMTc0LDcgQEAKICMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ19OQVRJVkU9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0xODksNyArMjA1LDYgQEAKICMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCiAjCiBDT05GSUdfUFBDX1BBU0VNSV9DUFVGUkVRPXkKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0yMDQsMTYgKzIxOSwyMCBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19IWj0xMDAwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfQktMIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05CiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEU9eQogQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldApAQCAtMjM2LDEyICsyNTUsMTIgQEAKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQogQ09ORklHX1BQQ182NEtfUEFHRVM9eQorIyBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5UX0RFVklDRV9UUkVFIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTI5MCw2ICszMDksNyBAQAogQ09ORklHX1hGUk1fVVNFUj15CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CiAjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtMzQ2LDYgKzM2Niw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKQEAgLTQ0MSw4ICs0NjIsMTAgQEAKIENPTkZJR19NVERfTkFORF9JRFM9eQogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QQVNFTUk9eQogIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9GU0xfRUxCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2NSw3ICs0ODgsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC00NzMsMTEgKzQ5NiwxMyBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKQEAgLTQ4NSw2ICs1MTAsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFU0NTST15CkBAIC01MDAsNyArNTI2LDYgQEAKICMKICMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CiAjCi0jIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKQEAgLTUyOCw3ICs1NTMsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNTkzLDYgKzYxNyw3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02NDYsNiArNjcxLDcgQEAKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldApAQCAtNjk5LDcgKzcyNSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKIApAQCAtNzE1LDYgKzc0MCw3IEBACiAjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzQyLDYgKzc2OCw3IEBACiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC03NTQsNiArNzgxLDkgQEAKIENPTkZJR19FMTAwMF9OQVBJPXkKICMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNzc5LDYgKzgwOSw3IEBACiBDT05GSUdfUEFTRU1JX01BQz15CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtODAyLDcgKzgzMyw2IEBACiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTg2MSw2ICs4OTEsNyBAQAogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC04ODYsOCArOTE3LDcgQEAKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKIENPTkZJR19IV19SQU5ET01fUEFTRU1JPXkKLUNPTkZJR19HRU5fUlRDPXkKLUNPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAKQEAgLTg5Nyw2ICs5MjcsNyBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19NQVhfUkFXX0RFVlM9MjU2CiAjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldApAQCAtOTQ0LDEzICs5NzUsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC05NzUsNiArMTAwNSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldApAQCAtMTAwNCw2ICsxMDM1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKQEAgLTEwMTMsOSArMTA0NSwxMSBAQAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4Myw2ICsxMjE3LDcgQEAKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CkBAIC0xMjA4LDYgKzEyNDMsNyBAQAogIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldApAQCAtMTIyNSw2ICsxMjYxLDcgQEAKICMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKQEAgLTEyNTksNiArMTI5NiwxMCBAQAogIwogCiAjCisjIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcworIworCisjCiAjIE9wZW4gU291bmQgU3lzdGVtCiAjCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CkBAIC0xMjgwLDYgKzEzMjEsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtMTI5MywxNyArMTMzNSwxNCBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKIENPTkZJR19VU0JfU0w4MTFfSENEPXkKQEAgLTEzNDgsMTAgKzEzODcsNiBAQAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzcsMTYgKzE0MTIsOSBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiBDT05GSUdfRURBQz15CkBAIC0xNDI1LDYgKzE0NTMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQzNCw5ICsxNDYzLDEwIEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldApAQCAtMTQ0NCw2ICsxNDc0LDcgQEAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC0xNDcxLDEyICsxNTAyLDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xNTM2LDggKzE1NjUsMTAgQEAKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTE2MjksNyArMTY2MCw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTY0NywxMSArMTY3Nyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTY3MCw2ICsxNjk1LDcgQEAKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2ODIsOSArMTcwOCw5IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CkBAIC0xNzEwLDcgKzE3MzYsOSBAQAogQ09ORklHX0FTWU5DX1hPUj15CiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQpAQCAtMTcyOSw2ICsxNzU3LDkgQEAKICMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTc0MywxMSArMTc3NCwxNCBAQAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZwppbmRleCA1NDE2YmU0Li5mY2ExMTQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDk6MDUgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBUaHUgTWFyIDI3IDEzOjU2OjIxIDIwMDgKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjksNiArMjksNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNDksNiArNTAsOSBAQAogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfSElCRVJOQVRFXzMyPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC02NywxOCArNzEsMjAgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTkyLDExICs5OCwxMyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQpAQCAtMTA0LDYgKzExMiwxNSBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEzMSw2ICsxNDgsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTQxLDE2ICsxNTksMTcgQEAKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKIENPTkZJR19DTEFTU0lDMzI9eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VGSUtBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19MSVRFNTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE4MSw3ICsyMDAsNiBAQAogQ09ORklHX0NQVV9GUkVRX1BNQUM9eQogQ09ORklHX1BQQzYwMV9TWU5DX0ZJWD15CiAjIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiAKICMKQEAgLTE5NywxMiArMjE1LDE2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQpAQCAtMjIxLDE5ICsyNDMsMTkgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UU19GUkVFWkVSX0NPTlRST0w9eQogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CiBDT05GSUdfUE1fREVCVUc9eQogIyBDT05GSUdfUE1fVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfQ0FOX1BNX1RSQUNFPXkKIENPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15CiBDT05GSUdfU1VTUEVORD15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiBDT05GSUdfSElCRVJOQVRJT049eQogQ09ORklHX1BNX1NURF9QQVJUSVRJT049IiIKIENPTkZJR19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TRUNDT01QPXkKLSMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjQ4LDcgKzI3MCw3IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQogIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPW0KICMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zMDAsNiArMzIyLDcgQEAKIENPTkZJR19YRlJNX1VTRVI9eQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTMzNCwxMiArMzU3LDE0IEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLPW0KICMgQ09ORklHX05GX0NUX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksgaXMgbm90IHNldApAQCAtMzU1LDYgKzM4MCw3IEBACiAjIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0tfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0CkBAIC0zNjMsOCArMzg5LDEwIEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVA9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVMgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQpAQCAtMzc0LDE0ICs0MDIsMTcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldApAQCAtMzk5LDEzICs0MzAsMTAgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCkBAIC00MTYsNyArNDQ0LDYgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCiAjIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkZfTkFUX0ZUUD1tCiBDT05GSUdfTkZfTkFUX0lSQz1tCkBAIC00MjYsNyArNDUzLDYgQEAKICMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX05BVF9TSVAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiAjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKQEAgLTQ0NCw5ICs0NzAsOSBAQAogQ09ORklHX0lQX0RDQ1BfQ0NJRDI9bQogIyBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRENDUF9DQ0lEMz1tCi1DT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCiAjIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JUF9EQ0NQX0NDSUQzX1JUTz0xMDAKK0NPTkZJR19JUF9EQ0NQX1RGUkNfTElCPW0KIAogIwogIyBEQ0NQIEtlcm5lbCBIYWNraW5nCkBAIC00NzQsNiArNTAwLDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPW0KIAogIwpAQCAtNTA5LDE1ICs1MzYsNiBAQAogIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKIAogIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCi0KLSMKICMgRklSIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0CkBAIC01NjMsOCArNTgxLDI2IEBACiBDT05GSUdfTkw4MDIxMT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19NQUM4MDIxMT1tCi1DT05GSUdfTUFDODAyMTFfUkNTSU1QTEU9eQorCisjCisjIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCisjCitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9TSU1QTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9OT05FIGlzIG5vdCBzZXQKKworIworIyBTZWxlY3RpbmcgJ3knIGZvciBhbiBhbGdvcml0aG0gd2lsbAorIworCisjCisjIGJ1aWxkIHRoZSBhbGdvcml0aG0gaW50byBtYWM4MDIxMS4KKyMKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCitDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX1NJTVBMRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfTEVEUz15CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTE9bQogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYxMCw3ICs2NDYsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTYxOCwxMSArNjU0LDEzIEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQpAQCAtNjMwLDYgKzY2OCw3IEBACiBDT05GSUdfQkxLX0RFVl9JREVDUz1tCiAjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPXkKIENPTkZJR19CTEtfREVWX0lERVNDU0k9eQpAQCAtNjQxLDEyICs2ODAsMTIgQEAKICMKICMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CiAKICMKICMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CiAjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQogQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKQEAgLTY4MCw3ICs3MTksNiBAQAogQ09ORklHX0JMS19ERVZfSURFX1BNQUM9eQogQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQVRBMTAwRklSU1Q9eQogQ09ORklHX0JMS19ERVZfSURFRE1BX1BNQUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC03NTQsNiArNzkyLDcgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCkBAIC04NDgsNyArODg3LDYgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC04ODAsNiArOTE4LDcgQEAKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKQEAgLTg5MSw2ICs5MzAsOSBAQAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTkxNiw2ICs5NTgsNyBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC05NDEsMTIgKzk4NCwxNiBAQAogIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJU001ND1tCiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAogIyBDT05GSUdfQURNODIxMSBpcyBub3Qgc2V0CiBDT05GSUdfUDU0X0NPTU1PTj1tCiAjIENPTkZJR19QNTRfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1A1NF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEg1SyBpcyBub3Qgc2V0CisjIENPTkZJR19JV0w0OTY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTDM5NDUgaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIENPTkZJR19CNDM9bQogQ09ORklHX0I0M19QQ0lfQVVUT1NFTEVDVD15CkBAIC05NTQsMjAgKzEwMDEsMTcgQEAKICMgQ09ORklHX0I0M19QQ01DSUEgaXMgbm90IHNldAogQ09ORklHX0I0M19MRURTPXkKICMgQ09ORklHX0I0M19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQjQzX0RNQT15Ci1DT05GSUdfQjQzX1BJTz15Ci1DT05GSUdfQjQzX0RNQV9BTkRfUElPX01PREU9eQotIyBDT05GSUdfQjQzX0RNQV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M19QSU9fTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQjQzTEVHQUNZPW0KIENPTkZJR19CNDNMRUdBQ1lfUENJX0FVVE9TRUxFQ1Q9eQogQ09ORklHX0I0M0xFR0FDWV9QQ0lDT1JFX0FVVE9TRUxFQ1Q9eQorQ09ORklHX0I0M0xFR0FDWV9MRURTPXkKIENPTkZJR19CNDNMRUdBQ1lfREVCVUc9eQogQ09ORklHX0I0M0xFR0FDWV9ETUE9eQogQ09ORklHX0I0M0xFR0FDWV9QSU89eQogQ09ORklHX0I0M0xFR0FDWV9ETUFfQU5EX1BJT19NT0RFPXkKICMgQ09ORklHX0I0M0xFR0FDWV9ETUFfTU9ERSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDNMRUdBQ1lfUElPX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNSw3ICsxMDQ5LDYgQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogQ09ORklHX1NMSEM9eQogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC0xMDY4LDYgKzExMTEsNyBAQAogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC0xMTA1LDYgKzExNDksNyBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15CkBAIC0xMTUxLDE0ICsxMTk2LDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTc5LDYgKzEyMjIsNyBAQAogIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAogQ09ORklHX0JBVFRFUllfUE1VPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMTg4LDYgKzEyMzIsNyBAQAogQ09ORklHX1NTQj1tCiBDT05GSUdfU1NCX1BDSUhPU1RfUE9TU0lCTEU9eQogQ09ORklHX1NTQl9QQ0lIT1NUPXkKK0NPTkZJR19TU0JfQjQzX1BDSV9CUklER0U9eQogQ09ORklHX1NTQl9QQ01DSUFIT1NUX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQl9QQ01DSUFIT1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTQl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMzcyLDYgKzE0MTcsNyBAQAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKQEAgLTEzOTcsNiArMTQ0Myw3IEBACiAjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CkBAIC0xNDE0LDYgKzE0NjEsNyBAQAogIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIApAQCAtMTQ2MSw2ICsxNTA5LDEwIEBACiAjCiAKICMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKQEAgLTE0ODIsNiArMTUzNCw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC0xNDk3LDkgKzE1NTAsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQotQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTz15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKQEAgLTE1NDcsMTEgKzE2MDAsOCBAQAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogQ09ORklHX1VTQl9TRVJJQUw9bQorQ09ORklHX1VTQl9FWlVTQj15CiAjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKQEAgLTE1NzIsNiArMTYyMiw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFI9eQpAQCAtMTYwMyw3ICsxNjU0LDYgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRVpVU0I9eQogCiAjCiAjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKQEAgLTE2MjgsMTYgKzE2NzgsOSBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTY1NSw2ICsxNjk4LDcgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtMTY4MCwxMiArMTcyNCwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQpAQCAtMTczMyw4ICsxNzc1LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTgyOCw3ICsxODcyLDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PW0KICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTg1MCwxMSArMTg5Myw3IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0xNQj15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE4NzMsNiArMTkxMiw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xODg1LDkgKzE5MjUsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldApAQCAtMTkwOCw3ICsxOTQ4LDkgQEAKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xOTI3LDYgKzE5NjksOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTk0MiwxMSArMTk4NywxNCBAQAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDE0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsODk2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM5CisjIFR1ZSBBcHIgMTUgMDg6NDY6NDQgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CitDT05GSUdfNDB4PXkKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR180eHg9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX0VQNDA1PXkKK0NPTkZJR19LSUxBVUVBPXkKK0NPTkZJR19NQUtBTFU9eQorQ09ORklHX1dBTE5VVD15CitDT05GSUdfWElMSU5YX1ZJUlRFWF9HRU5FUklDX0JPQVJEPXkKK0NPTkZJR180MDVHUD15CitDT05GSUdfNDA1RVg9eQorQ09ORklHX1hJTElOWF9WSVJURVg9eQorQ09ORklHX1hJTElOWF9WSVJURVhfSUlfUFJPPXkKK0NPTkZJR19YSUxJTlhfVklSVEVYXzRfRlg9eQorQ09ORklHX0lCTTQwNV9FUlI3Nz15CitDT05GSUdfSUJNNDA1X0VSUjUxPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorQ09ORklHX09GX1JUQz15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR180eHhfU09DPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA0MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUM9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MTI4CitDT05GSUdfSUJNX05FV19FTUFDX1RYQj02NAorQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfWElMSU5YX0hXSUNBUD1tCisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjliNWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTEwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFNhdCBBcHIgIDUgMDk6MzU6NDggMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorQ09ORklHXzQ0eD15CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR180eHg9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QVEVfNjRCSVQ9eQorQ09ORklHX1BIWVNfNjRCSVQ9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX0JBTUJPTz15CitDT05GSUdfRUJPTlk9eQorQ09ORklHX1NFUVVPSUE9eQorQ09ORklHX1RBSVNIQU49eQorQ09ORklHX0tBVE1BST15CitDT05GSUdfUkFJTklFUj15CitDT05GSUdfV0FSUD15CitDT05GSUdfQ0FOWU9OTEFORFM9eQorQ09ORklHX1lPU0VNSVRFPXkKK0NPTkZJR180NDBFUD15CitDT05GSUdfNDQwRVBYPXkKK0NPTkZJR180NDBHUlg9eQorQ09ORklHXzQ0MEdQPXkKK0NPTkZJR180NDBHWD15CitDT05GSUdfNDQwU1BlPXkKK0NPTkZJR180NjBFWD15CitDT05GSUdfSUJNNDQwRVBfRVJSNDI9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfUlRDPXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHXzR4eF9TT0M9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDEwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCisjIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwppbmRleCA3Njk1YTRjLi45NzAyODJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBGcmkgRGVjIDIxIDE0OjQ3OjI5IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKKyMgVGh1IE1hciAyNyAxMzo1NjoyNCAyMDA4CiAjCiBDT05GSUdfUFBDNjQ9eQogCkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNDksNyArNTAsOSBAQAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM2NF9TV1NVU1A9eQorQ09ORklHX0hJQkVSTkFURV82ND15CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRENSX01NSU89eQogQ09ORklHX1BQQ19EQ1I9eQpAQCAtNzIsOCArNzUsNiBAQAogQ09ORklHX1RBU0tTVEFUUz15CiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKICMgQ09ORklHX1RBU0tfWEFDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKQEAgLTgyLDEzICs4MywxOCBAQAogIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVU0VUUz15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQogQ09ORklHX1JFTEFZPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtMTAyLDExICsxMDgsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTExNCw2ICsxMjIsMTUgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xNDEsNiArMTU4LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTE2Myw4ICsxODEsOCBAQAogQ09ORklHX1ZJT0NEPW0KIENPTkZJR19WSU9UQVBFPW0KIENPTkZJR19WSU9QQVRIPXkKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUE1BQz15CiBDT05GSUdfUFBDX1BNQUM2ND15CiBDT05GSUdfUFBDX01BUExFPXkKQEAgLTE3Niw3ICsxOTQsNiBAQAogQ09ORklHX1BQQ19QQVNFTUlfSU9NTVU9eQogIyBDT05GSUdfUFBDX1BBU0VNSV9JT01NVV9ETUFfRk9SQ0UgaXMgbm90IHNldAogQ09ORklHX1BQQ19QQVNFTUlfTURJTz15Ci1DT05GSUdfRUxFQ1RSQV9JREU9eQogQ09ORklHX1BQQ19DRUxMRUI9eQogIyBDT05GSUdfUFBDX1BTMyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0NFTEw9eQpAQCAtMTkzLDExICsyMTAsMTMgQEAKIENPTkZJR19DQkVfVEhFUk09bQogQ09ORklHX0NCRV9DUFVGUkVRPW0KIENPTkZJR19DQkVfQ1BVRlJFUV9QTUk9bQorQ09ORklHX09QUk9GSUxFX0NFTEw9eQogIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTkFUSVZFPXkKIENPTkZJR19VREJHX1JUQVNfQ09OU09MRT15CiBDT05GSUdfUFBDX1VEQkdfQkVBVD15CiBDT05GSUdfWElDUz15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogQ09ORklHX1BQQ19JODI1OT15CkBAIC0yMzYsNyArMjU1LDYgQEAKICMKIENPTkZJR19DUFVfRlJFUV9QTUFDNjQ9eQogQ09ORklHX1BQQ19QQVNFTUlfQ1BVRlJFUT15Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKIENPTkZJR19BWE9OX1JBTT1tCiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiAKQEAgLTI1MiwxOSArMjcwLDI0IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfQktMIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiBDT05GSUdfSU9NTVVfVk1FUkdFPXkKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX0hPVFBMVUdfQ1BVPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfUEhZUF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI5NCwxMSArMzE3LDkgQEAKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UU19GUkVFWkVSX0NPTlRST0w9eQogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfU01QX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9TTVBfUE9TU0lCTEU9eQogQ09ORklHX1NFQ0NPTVA9eQotIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCkBAIC0zMTMsNyArMzM0LDcgQEAKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CiBDT05GSUdfUENJX01TST15Ci1DT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKICMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zNTIsNiArMzczLDcgQEAKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTM3NSw3ICszOTcsNyBAQAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0xSTz1tCitDT05GSUdfSU5FVF9MUk89eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0zODksMTQgKzQxMSwxNCBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz15CitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KIENPTkZJR19ORl9DT05OVFJBQ0s9bQogQ09ORklHX05GX0NUX0FDQ1Q9eQogQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKQEAgLTQyMiw4ICs0NDQsMTAgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQpAQCAtNDMzLDE0ICs0NTcsMTcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCkBAIC00NTgsMTMgKzQ4NSwxMCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCkBAIC00NzUsNyArNDk5LDYgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCiBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQogQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQogQ09ORklHX05GX05BVF9GVFA9bQpAQCAtNDg2LDcgKzUwOSw2IEBACiBDT05GSUdfTkZfTkFUX0gzMjM9bQogQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCkBAIC01MTcsNiArNTM5LDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtNTYzLDcgKzU4Niw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTU3MSwxMSArNTk0LDEzIEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQpAQCAtNTgzLDYgKzYwOCw3IEBACiAjIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldApAQCAtNTk0LDEyICs2MjAsMTIgQEAKICMKIENPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CkBAIC02MzQsNyArNjYwLDYgQEAKIENPTkZJR19CTEtfREVWX0lERV9QTUFDPXkKIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0FUQTEwMEZJUlNUPXkKIENPTkZJR19CTEtfREVWX0lERURNQV9QTUFDPXkKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNzAxLDYgKzcyNiw3IEBACiBDT05GSUdfU0NTSV9JQk1WU0NTST15CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MApAQCAtNzYwLDYgKzc4Niw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTc3Niw2ICs4MDMsNyBAQAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogQ09ORklHX1BBVEFfV0lOQk9ORD15CiBDT05GSUdfUEFUQV9QTEFURk9STT15CisjIENPTkZJR19QQVRBX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1NDQz15CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQpAQCAtODQ3LDcgKzg3NSw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15CiAKQEAgLTg2MywxMSArODkwLDggQEAKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19CUk9BRENPTV9QSFk9bQogIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci1DT05GSUdfRklYRURfUEhZPW0KLUNPTkZJR19GSVhFRF9NSUlfMTBfRkRYPXkKLUNPTkZJR19GSVhFRF9NSUlfMTAwX0ZEWD15Ci0jIENPTkZJR19GSVhFRF9NSUlfMTAwMF9GRFggaXMgbm90IHNldAotQ09ORklHX0ZJWEVEX01JSV9BTU5UPTEKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKQEAgLTg5OSw2ICs5MjMsNyBAQAogIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldApAQCAtOTEyLDYgKzkzNyw5IEBACiAjIENPTkZJR19FMTAwMF9OQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtOTQwLDYgKzk2OCw3IEBACiBDT05GSUdfUEFTRU1JX01BQz15CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKIENPTkZJR19UUj15CiBDT05GSUdfSUJNT0w9eQogIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldApAQCAtOTc3LDcgKzEwMDYsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKICMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUUE9MTD15CkBAIC0xMDU2LDYgKzEwODQsNyBAQAogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC0xMTAzLDYgKzExMzIsNyBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19NQVhfUkFXX0RFVlM9MjU2CiAjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldApAQCAtMTE1MSwxMyArMTE4MSwxMiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtMTE3Myw2ICsxMjAyLDcgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMzNyw2ICsxMzY3LDcgQEAKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CkBAIC0xMzYyLDYgKzEzOTMsNyBAQAogIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldApAQCAtMTM3OSw2ICsxNDExLDcgQEAKICMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKQEAgLTE0MjYsNiArMTQ1OSwxMCBAQAogIwogCiAjCisjIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcworIworCisjCiAjIE9wZW4gU291bmQgU3lzdGVtCiAjCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CkBAIC0xNDQ3LDYgKzE0ODQsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtMTQ2MCwxMCArMTQ5OCwxMCBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CkBAIC0xNTEyLDEwICsxNTUwLDYgQEAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xNTQxLDE2ICsxNTc1LDkgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KICMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldApAQCAtMTU2Miw2ICsxNTg5LDcgQEAKIENPTkZJR19JTkZJTklCQU5EX0VIQ0E9bQogIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQogIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CkBAIC0xNTc2LDggKzE2MDQsMTMgQEAKICMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0VEQUNfTU1fRURBQz15CiBDT05GSUdfRURBQ19QQVNFTUk9eQorIyBDT05GSUdfRURBQ19DRUxMIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQorCisjCisjIENvbmZsaWN0aW5nIFJUQyBvcHRpb24gaGFzIGJlZW4gc2VsZWN0ZWQsIGNoZWNrIEdFTl9SVEMgYW5kIFJUQworIwogQ09ORklHX1JUQ19IQ1RPU1lTPXkKIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCiAjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldApAQCAtMTYwNCw2ICsxNjM3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE2MTMsOSArMTY0NywxMCBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKQEAgLTE2MjMsNiArMTY1OCw3IEBACiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtMTY2NSwxMiArMTcwMSwxMCBAQAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC0xNzE5LDggKzE3NTMsMTAgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTgyMSw3ICsxODU3LDYgQEAKIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE4MzUsNiArMTg3MCw4IEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCiBDT05GSUdfVEVYVFNFQVJDSD15CiBDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQogQ09ORklHX1RFWFRTRUFSQ0hfQk09bQpAQCAtMTg0MywxMSArMTg4MCw3IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0xNQj15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE4NjYsNiArMTg5OSw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xODc4LDkgKzE5MTIsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CkBAIC0xOTA4LDcgKzE5NDIsOSBAQAogQ09ORklHX0FTWU5DX1hPUj15CiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKQEAgLTE5MjEsMTIgKzE5NTcsMTUgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTk0MiwxMSArMTk4MSwxMyBAQAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fTFpPPW0KICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwppbmRleCBhM2JmYmI2Li4xMzgzZWI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzUKLSMgVGh1IERlYyAxMyAyMjozOToxOCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIE1vbiBNYXIgMjQgMDg6NDg6MzYgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02OSw5ICs3MCwxNCBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19TWVNDVEw9eQpAQCAtODQsMTEgKzkwLDEzIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQpAQCAtOTYsNiArMTA0LDEzIEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMTcsNiArMTMyLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTEyNSwxNSArMTQxLDE3IEBACiBDT05GSUdfUFBDXzgyeHg9eQogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzgyNzJfQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUTJGQURTPXkKKyMgQ09ORklHX0VQODI0OEUgaXMgbm90IHNldAogQ09ORklHX1BRMkFEUz15CiBDT05GSUdfODI2MD15CiBDT05GSUdfUFEyX0FEU19QQ0lfUElDPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0xNjIsMTIgKzE4MCwxNiBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTE4MiwxMSArMjA0LDcgQEAKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15CiBDT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9InBxMmZhZHMuZHRzIgogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjA2LDYgKzIyNCw3IEBACiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBBZHZhbmNlZCBzZXR1cApAQCAtMjc4LDEyICsyOTcsMTMgQEAKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKIApAQCAtMjkzLDYgKzMxMywxMyBAQAogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKQEAgLTMwNiw2ICszMzMsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAKQEAgLTMxNCw2ICszNDIsNyBAQAogIwogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MzEsMTcgKzQ2MCwyMCBAQAogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIENPTkZJR19JREVfTUFYX0hXSUZTPTQKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRElTSz15CiAjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAogQ09ORklHX0lERV9QUk9DX0ZTPXkKQEAgLTQ1NSw3ICs0ODcsNiBAQAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKLSMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldApAQCAtNDgxLDcgKzUxMiw2IEBACiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC01MjksNiArNTU5LDcgQEAKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfTURJT19CSVRCQU5HPXkKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNTU0LDYgKzU4NSw4IEBACiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKQEAgLTU2NCw2ICs1OTcsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNTc2LDYgKzYxMCw3IEBACiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTcwMCw2ICs3MzUsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC03NDksMTAgKzc4NSw2IEBACiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKIENPTkZJR19VU0JfR0FER0VUPXkKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQpAQCAtNzc2LDEwICs4MDgsMTMgQEAKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBVc2Vyc3BhY2UgSS9PCkBAIC04MDMsMTIgKzgzOCwxMCBAQAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC04MzYsNiArODY5LDcgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04NDQsOCArODc4LDEwIEBACiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtOTI2LDcgKzk2Miw2IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC05NDQsNyArOTc5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtOTYzLDYgKzk5Nyw3IEBACiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC05NzUsOCArMTAxMCw4IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKQEAgLTk5NSw2ICsxMDMwLDcgQEAKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC0xMDA4LDYgKzEwNDQsOSBAQAogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xMDI3LDYgKzEwNjYsOCBAQAogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwppbmRleCA0NmIyNTc5Li5mOTEyMTY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDk6MTEgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNworIyBNb24gTWFyIDMxIDExOjM3OjE1IDIwMDgKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzEsNiArMzEsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQpAQCAtNjgsMTUgKzY5LDIzIEBACiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CiAjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC04OSwxMSArOTgsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC0xMDEsNiArMTEyLDEzIEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC0xMjMsNiArMTQxLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTEzMywyMCArMTUyLDIyIEBACiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiBDT05GSUdfQ0xBU1NJQzMyPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQogIyBDT05GSUdfTElOS1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1RPUkNFTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM3NDQ4SFBDMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSE9MTFkgaXMgbm90IHNldAogQ09ORklHX1BQQ19QUlBNQzI4MDA9eQogQ09ORklHX01WNjRYNjA9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTE1OCw3ICsxNzksNiBAQAogIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiAKICMKQEAgLTE3NCwxMiArMTk0LDE2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQpAQCAtMTk5LDExICsyMjMsNyBAQAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJwcnBtYzI4MDAuZHRzIgogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjUzLDYgKzI3Myw3IEBACiBDT05GSUdfWEZSTV9VU0VSPXkKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zMDgsNiArMzI5LDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtMzQxLDYgKzM2Myw3IEBACiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDI4LDcgKzQ1MSw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC00MzYsMTEgKzQ1OSwxMyBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKQEAgLTQ1NywxMiArNDgyLDEyIEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CkBAIC00OTMsNyArNTE4LDYgQEAKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC01NTksNiArNTgzLDcgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYxMiw2ICs2MzcsNyBAQAogIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CkBAIC02MjYsNiArNjUyLDcgQEAKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKQEAgLTY0Niw3ICs2NzMsNiBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15CiAKQEAgLTY2Miw2ICs2ODgsNyBAQAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTY5Myw2ICs3MjAsNyBAQAogIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKQEAgLTcwNiw2ICs3MzQsOSBAQAogIyBDT05GSUdfRTEwMDBfTkFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTczMSw2ICs3NjIsNyBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC03NTMsNyArNzg1LDYgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtODAyLDYgKzgzMyw3IEBACiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTgyMyw4ICs4NTUsNyBAQAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTg3MiwxNCArOTAzLDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC05MDQsNiArOTMzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CkBAIC05MzMsNiArOTYzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKQEAgLTk0Miw5ICs5NzMsMTEgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDksNiArMTA0Miw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC0xMDIyLDkgKzEwNTYsOSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldApAQCAtMTA2MSwxMCArMTA5NSw2IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5MCwxNiArMTEyMCw5IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldApAQCAtMTEzMSw2ICsxMTU0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTExNDAsOSArMTE2NCwxMCBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKQEAgLTExNTAsNiArMTE3NSw3IEBACiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtMTE3NSwxMiArMTIwMSwxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMjMsOCArMTI0NywxMCBAQAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTI2OSw3ICsxMjk1LDYgQEAKICMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTI4NSw3ICsxMzEwLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTI5OSw2ICsxMzIzLDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldApAQCAtMTMxMCw1ICsxMzM1LDQ5IEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKaW5kZXggNzk5NDk1NWMuLjdhNjRjNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzgKLSMgV2VkIEphbiAxNiAxNDozMToyMSAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM2CisjIFRodSBNYXIgMjAgMTE6MDc6MDQgMjAwOAogIwogQ09ORklHX1BQQzY0PXkKIApAQCAtMjgsNiArMjgsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKQEAgLTUxLDcgKzUyLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTY4LDE3ICs2OCwyMSBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtOTIsMTcgKzk2LDI3IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldApAQCAtMTMxLDYgKzE0NSw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0xNDEsOCArMTU2LDggQEAKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUEFTRU1JIGlzIG5vdCBzZXQKQEAgLTE3Myw2ICsxODgsNyBAQAogQ09ORklHX1NQVV9GUz15CiBDT05GSUdfU1BVX0JBU0U9eQogIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0xODQsNyArMjAwLDYgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0xOTksMTUgKzIxNCwxOSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX0JLTCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiAjIENPTkZJR19JT01NVV9WTUVSR0UgaXMgbm90IHNldAorQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CkBAIC0yNDEsNyArMjYwLDYgQEAKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjcxLDYgKzI4OSw3IEBACiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMzM4LDYgKzM1Nyw3IEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQpAQCAtNDA1LDExICs0MjUsMTMgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM1Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNDcyLDcgKzQ5NCw5IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiBDT05GSUdfR0VMSUNfTkVUPXkKK0NPTkZJR19HRUxJQ19XSVJFTEVTUz15CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCiAjCkBAIC00ODIsOSArNTA2LDggQEAKIENPTkZJR19XTEFOXzgwMjExPXkKICMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci1DT05GSUdfWkQxMjExUlc9bQotIyBDT05GSUdfWkQxMjExUldfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC01MDcsNyArNTMwLDYgQEAKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjA2LDYgKzYyOCw3IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKQEAgLTc0Miw2ICs3NjUsMTAgQEAKICMKIAogIworIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKKyMKKworIwogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldApAQCAtNzY5LDYgKzc5Niw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj1tCiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCkBAIC03ODIsMTAgKzgxMCwxMCBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU89eQorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKQEAgLTgzMywxMCArODYxLDYgQEAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC04NjIsMTkgKzg4NiwxMyBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIEkvTwpAQCAtOTAwLDggKzkxOCw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CkBAIC05MTAsNyArOTI3LDYgQEAKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQogQ09ORklHX1FVT1RBQ1RMPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC05NTksOCArOTc1LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQpAQCAtMTAzNiw3ICsxMDU0LDYgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMDQ4LDE1ICsxMDY1LDEyIEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQogQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT1tCi0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDg3LDkgKzExMDEsOSBAQAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xJU1Q9eQogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQpAQCAtMTEwOCw3ICsxMTIyLDkgQEAKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fU0VRSVY9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKQEAgLTExMjAsMTIgKzExMzYsMTUgQEAKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NUUj1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTE0MCwxMSArMTE1OSwxMyBAQAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTFpPPW0KIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKaW5kZXggOTJiYmY1MS4uM2UyNTkzYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM0Ci0jIFRodSBEZWMgIDYgMTY6NDk6MTUgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBUaHUgTWFyIDI3IDEzOjU2OjI4IDIwMDgKICMKIENPTkZJR19QUEM2ND15CiAKQEAgLTI4LDYgKzI4LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC03MSw4ICs3Miw2IEBACiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKIENPTkZJR19UQVNLX1hBQ0NUPXkKIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0FVRElUX1RSRUU9eQpAQCAtODMsMTMgKzgyLDE4IEBACiAjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUF9OUz15CiBDT05GSUdfQ1BVU0VUUz15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX1VTRVJfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBfQ1BVQUNDVD15CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtMTAzLDExICsxMDcsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQEAgLTExNSw2ICsxMjEsMTYgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19NQVJLRVJTPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfS1BST0JFUz15CitDT05GSUdfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE0Miw2ICsxNTgsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydApAQCAtMTU2LDggKzE3Myw4IEBACiBDT05GSUdfU0NBTkxPRz1tCiBDT05GSUdfTFBBUkNGRz15CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CkBAIC0xNzAsNiArMTg3LDcgQEAKIENPTkZJR19QUENfTkFUSVZFPXkKICMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19YSUNTPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogQ09ORklHX01QSUM9eQogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0k4MjU5PXkKQEAgLTE4Niw3ICsyMDQsNiBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiAKICMKQEAgLTIwMSwxOSArMjE4LDI0IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfQktMIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15CiBDT05GSUdfSU9NTVVfVk1FUkdFPXkKK0NPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX0hPVFBMVUdfQ1BVPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfUEhZUF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX05VTUE9eQogQ09ORklHX05PREVTX1NISUZUPTQKQEAgLTI0NSw5ICsyNjcsNyBAQAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfU01QX1BPU1NJQkxFPXkKIENPTkZJR19TRUNDT01QPXkKLSMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwpAQCAtMjYyLDcgKzI4Miw3IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQogQ09ORklHX1BDSV9NU0k9eQotQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHX1BDST1tCkBAIC0yODgsNiArMzA4LDcgQEAKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTMyMiwxNCArMzQzLDE0IEBACiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPXkKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfTkZfQ1RfQUNDVD15CiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQpAQCAtMzUxLDYgKzM3Miw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KQEAgLTM2MSwxNCArMzgzLDE3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQpAQCAtMzg2LDEzICs0MTEsMTAgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQpAQCAtNDAzLDcgKzQyNSw2IEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQogQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KIENPTkZJR19ORl9OQVRfRlRQPW0KIENPTkZJR19ORl9OQVRfSVJDPW0KQEAgLTQzOSw2ICs0NjAsNyBAQAogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtNDkzLDcgKzUxNSw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKQEAgLTUwMSwxNiArNTIzLDE5IEBACiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQogIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldApAQCAtNTIyLDEyICs1NDcsMTIgQEAKICMKIENPTkZJR19JREVfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQogCiAjCiAjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CkBAIC01NTgsNyArNTgzLDYgQEAKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkBAIC02MjcsNiArNjUxLDcgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCkBAIC02ODUsNiArNzEwLDcgQEAKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldApAQCAtNjk5LDYgKzcyNSw3IEBACiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9XSU5CT05EPXkKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKIENPTkZJR19NRF9MSU5FQVI9eQpAQCAtNzM3LDcgKzc2NCw2IEBACiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzY5LDYgKzc5NSw3IEBACiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CkBAIC03ODMsNiArODEwLDkgQEAKICMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC04MTEsNiArODQxLDcgQEAKICMgQ09ORklHX1BBU0VNSV9NQUMgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiBDT05GSUdfVFI9eQogQ09ORklHX0lCTU9MPXkKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKQEAgLTg0Nyw3ICs4NzgsNiBAQAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKICMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUUE9MTD15CkBAIC05MjcsNiArOTU3LDcgQEAKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtOTUxLDcgKzk4Miw2IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAogQ09ORklHX0hWQ19EUklWRVI9eQogQ09ORklHX0hWQ19DT05TT0xFPXkKIENPTkZJR19IVkNfUlRBUz15CkBAIC0xMDA5LDEzICsxMDM5LDEyIEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMxLDYgKzEwNjAsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMTY2LDYgKzExOTYsNyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwpAQCAtMTE3OSw5ICsxMjEwLDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldApAQCAtMTIzMCwxMCArMTI2MSw2IEBACiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKICMgQ09ORklHX1VTQl9VU1M3MjAgaXMgbm90IHNldAotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMjU5LDE2ICsxMjg2LDkgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEPW0KQEAgLTEyODEsNiArMTMwMSw3IEBACiBDT05GSUdfSU5GSU5JQkFORF9FSENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQpAQCAtMTI4OSw2ICsxMzEwLDcgQEAKICMgQ09ORklHX0lORklOSUJBTkRfSVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogCiAjCkBAIC0xMzM0LDEyICsxMzU2LDEwIEBACiBDT05GSUdfT0NGUzJfRlM9bQogQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQogIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQpAQCAtMTM4OCw4ICsxNDA4LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTE0NzMsNyArMTQ5NSw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTQ4Nyw2ICsxNTA4LDggQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KIENPTkZJR19URVhUU0VBUkNIPXkKIENPTkZJR19URVhUU0VBUkNIX0tNUD1tCiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCkBAIC0xNDk1LDExICsxNTE4LDcgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfS1BST0JFUz15Ci1DT05GSUdfTUFSS0VSUz15CitDT05GSUdfSEFWRV9MTUI9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNTE4LDYgKzE1MzcsNyBAQAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTUzMCw5ICsxNTUwLDEwIEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldApAQCAtMTU1Nyw3ICsxNTc4LDkgQEAKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fU0VRSVY9bQogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQpAQCAtMTU3MCwxMiArMTU5MywxNSBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ1RSPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fQ0NNPW0KICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CkBAIC0xNTkxLDExICsxNjE3LDEzIEBACiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCiAjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fVEVTVD1tCi0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19MWk89bQogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9yYWluaWVyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3JhaW5pZXJfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk1MDAxLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3JhaW5pZXJfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODczICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgTW9uIERlYyAyNCAxMToyMjo0MCAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci1DT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAotQ09ORklHX1JBSU5JRVI9eQotQ09ORklHXzQ0MEdSWD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLUNPTkZJR19DTURMSU5FX0JPT0w9eQotQ09ORklHX0NNRExJTkU9IiIKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0icmFpbmllci5kdHMiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDEwMDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci0jIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci1DT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15Ci0jIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAotIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHR0VSPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRUFSTFlfREVCVUc9eQotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX1BBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19QQVNfUkVBTE1PREUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0JFQVQgaXMgbm90IHNldAotQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHg9eQotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfQ1BNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4X1BIWVNMT1c9MHhlZjYwMDMwMAotQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0hJR0g9MHgxCi0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODM0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zYmM4MzR4X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0NWJjYy4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zYmM4MzR4X2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDgwMCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM4Ci0jIFRodSBKYW4gMjQgMTU6NTQ6MjcgMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184M3h4PXkKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzgzeHg9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzEzX1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0JDODM0eD15Ci1DT05GSUdfTVBDODM0eD15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9IiIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9BRENPTV9QSFk9eQotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19HRkFSX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfODN4eF9XRFQ9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3NiYzg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODU0OF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiN2ZhNTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODU0OF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3NDEgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjOAotIyBUaHUgSmFuIDI0IDE1OjE5OjEyIDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODV4eD15Ci1DT05GSUdfRTUwMD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotQ09ORklHX1NCQzg1NDg9eQotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODU0MD15Ci1DT05GSUdfTVBDODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9BRENPTV9QSFk9eQotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLUNPTkZJR19HRkFSX05BUEk9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3NiYzg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODU2MF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4OWZjZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODU2MF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3NjQgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNAotIyBXZWQgSmFuIDIzIDE0OjU5OjIwIDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODV4eD15Ci1DT05GSUdfRTUwMD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotQ09ORklHX1NCQzg1NjA9eQotQ09ORklHX01QQzg1NjA9eQotQ09ORklHX01QQzg1eHg9eQotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSIiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0ZTTF9TT0M9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci1DT05GSUdfQlJPQURDT01fUEhZPXkKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX0dJQU5GQVI9eQotQ09ORklHX0dGQVJfTkFQST15Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9NNDhUNTk9eQotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUEFTX1JFQUxNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3NiYzg2NDFkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3NiYzg2NDFkX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTgwMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODY0MWRfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTM0MiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNgorIyBUaHUgQXByIDEwIDE4OjAzOjI1IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAorQ09ORklHX1NCQzg2NDFEPXkKKyMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODY0MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BTkdMRT1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfUkFXPW0KKworIworIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKK0NPTkZJR19USVBDPW0KKyMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAorIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRNPW0KK0NPTkZJR19BVE1fQ0xJUD1tCisjIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fTEFORT1tCitDT05GSUdfQVRNX01QT0E9bQorQ09ORklHX0FUTV9CUjI2ODQ9bQorIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0FOX1JPVVRFUj1tCitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfQVRNPW0KK0NPTkZJR19ORVRfU0NIX1BSSU89bQorIyBDT05GSUdfTkVUX1NDSF9SUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFND1tCitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX0NMU19GVz1tCitDT05GSUdfTkVUX0NMU19VMzI9bQorIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19SU1ZQPW0KK0NPTkZJR19ORVRfQ0xTX1JTVlA2PW0KKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfSU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKKyMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKK0NPTkZJR19NRF9SQUlEMTA9eQorIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPXkKK0NPTkZJR19NRF9GQVVMVFk9eQorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RNX0NSWVBUPXkKK0NPTkZJR19ETV9TTkFQU0hPVD15CitDT05GSUdfRE1fTUlSUk9SPXkKK0NPTkZJR19ETV9aRVJPPXkKKyMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorQ09ORklHX0JST0FEQ09NX1BIWT15CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX0dGQVJfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX0FUTV9EUklWRVJTPXkKKyMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZPUkUyMDBFX01BWUJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPQVRNPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworQ09ORklHX1NPRlRfV0FUQ0hET0c9bQorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgSS9PCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CitDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19PQ0ZTMl9GUz1tCitDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRz15CisjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9bQorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX05GU19ESVJFQ1RJTz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX0RFQlVHR0VSPXkKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQorIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fVEVTVD1tCitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zZXF1b2lhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3NlcXVvaWFfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmJmZWQ2Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3NlcXVvaWFfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODg1ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgTW9uIERlYyAyNCAxMToyMzoyMiAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci1DT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLUNPTkZJR19TRVFVT0lBPXkKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotQ09ORklHXzQ0MEVQWD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJzZXF1b2lhLmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLSMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHR0VSPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRUFSTFlfREVCVUc9eQotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX1BBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19QQVNfUkVBTE1PREUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0JFQVQgaXMgbm90IHNldAotQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHg9eQotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfQ1BNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4X1BIWVNMT1c9MHhlZjYwMDMwMAotQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0hJR0g9MHgxCi0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwppbmRleCBhMDM0YTVlLi5mZGJmZDM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgVHVlIEphbiAgOCAwOTozMzo1NCAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUtcmM3CisjIE1vbiBNYXIgMzEgMTE6Mzc6MTkgMjAwOAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CkBAIC02NiwxNyArNjcsMTkgQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CkBAIC04NywxMSArOTAsMTMgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CkBAIC05OSw2ICsxMDQsMTMgQEAKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTEyNiw2ICsxMzgsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTEzNiwxMCArMTQ5LDEwIEBACiAjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiBDT05GSUdfQ0xBU1NJQzMyPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKQEAgLTE1Myw2ICsxNjYsNyBAQAogQ09ORklHX01QQzEwWF9CUklER0U9eQogQ09ORklHX01QQzEwWF9PUEVOUElDPXkKICMgQ09ORklHX01QQzEwWF9TVE9SRV9HQVRIRVJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQz15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0xNjQsNyArMTc4LDYgQEAKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogCiAjCkBAIC0xODAsMTIgKzE5MywxNiBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKQEAgLTIwNiwxMSArMjIzLDcgQEAKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIgogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJzdG9yY2VudGVyLmR0cyIKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKQEAgLTMxMCw2ICszMjMsNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CkBAIC0zNDMsNiArMzU3LDcgQEAKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00MzgsMTIgKzQ1MywxNCBAQAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKQEAgLTQ2MCwxMiArNDc3LDEyIEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKIAogIwogIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKICMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldApAQCAtNDk1LDcgKzUxMiw2IEBACiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQogIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiBDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTU2Myw2ICs1NzksNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CkBAIC02MDMsNyArNjIwLDYgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQpAQCAtNjExLDYgKzYyNyw5IEBACiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNjIzLDYgKzY0Miw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldApAQCAtNjQ5LDcgKzY2OSw2IEBACiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY3Miw2ICs2OTEsNyBAQAogIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTY5Nyw4ICs3MTcsNyBAQAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009bQogQ09ORklHX05WUkFNPXkKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzQ2LDE0ICs3NjUsMTIgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTc2OSw2ICs3ODYsNyBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC04MTQsNiArODMyLDcgQEAKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKQEAgLTgyNyw5ICs4NDYsMTAgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CkBAIC04NzcsMTAgKzg5Nyw2IEBACiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtOTA2LDE2ICs5MjIsOSBAQAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKQEAgLTk0Nyw2ICs5NTYsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtOTU2LDkgKzk2NiwxMCBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKQEAgLTk2Niw2ICs5NzcsNyBAQAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBJL08KQEAgLTk5NSwxMiArMTAwNywxMCBAQAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNTMsOCArMTA2MywxMCBAQAogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CkBAIC0xMTIxLDcgKzExMzMsNiBAQAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMTM5LDkgKzExNTAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTE1NSw2ICsxMTYzLDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdHhfZ3AzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0eF9ncDNfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODEzN2E4Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0eF9ncDNfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTE4MyArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM4Ci0jIFRodSBKYW4gMjQgMDI6MDI6MzAgMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR182eHggaXMgbm90IHNldAotQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184NXh4PXkKLUNPTkZJR19FNTAwPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RYX0dQMz15Ci1DT05GSUdfTVBDODU2MD15Ci1DT05GSUdfTVBDODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMj15Ci1DT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotQ09ORklHX0hJR0hNRU09eQotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0ic3R4X2dwM184NTYwLmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1RPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1RUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRklMVEVSPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi1DT05GSUdfTkVUX1BLVEdFTj15Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX1BBUlBPUlQ9bQotQ09ORklHX1BBUlBPUlRfUEM9bQotIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF8xMjg0IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ0Q9bQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9bQotQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci1DT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUFSVkVMTF9QSFk9eQotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLUNPTkZJR19HRkFSX05BUEk9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEyODAKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0xMDI0Ci1DT05GSUdfSU5QVVRfSk9ZREVWPW0KLUNPTkZJR19JTlBVVF9FVkRFVj1tCi0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DUE09eQotQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzEgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DUE1fU0NDMj15Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU01DMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NNQzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotQ09ORklHX1BSSU5URVI9bQotIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPW0KLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj1tCi0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD1tCi0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotQ09ORklHX0FHUD1tCi1DT05GSUdfRFJNPW0KLSMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLUNPTkZJR19TT1VORD1tCi0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCi0jIENPTkZJR19TTkQgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfSVNPOTY2MF9GUz1tCi0jIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0JESV9TV0lUQ0g9eQotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdGFpc2hhbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy90YWlzaGFuX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlODRiOS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy90YWlzaGFuX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDc5MCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIE1vbiBEZWMgMjQgMTE6MjM6MzkgMjAwNwotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR182eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotQ09ORklHXzQ0eD15Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR180eHg9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19QVEVfNjRCSVQ9eQotQ09ORklHX1BIWVNfNjRCSVQ9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKLUNPTkZJR19UQUlTSEFOPXkKLSMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKLUNPTkZJR180NDBHWD15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJ0YWlzaGFuLmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQotIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUM9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MTI4Ci1DT05GSUdfSUJNX05FV19FTUFDX1RYQj02NAotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JST15Ci1DT05GSUdfSUJNX05FV19FTUFDX1RBSD15Ci1DT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHR0VSPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtODU0MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04NTQwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMyZGUzNC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04NTQwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEwMzIgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjOAotIyBGcmkgSmFuIDI1IDAxOjMyOjA1IDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODV4eD15Ci1DT05GSUdfRTUwMD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAotQ09ORklHX1RRTTg1NDA9eQotIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAotQ09ORklHX1RRTTg1eHg9eQotQ09ORklHX01QQzg1eHg9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9InRxbTg1NDAuZHRzIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfR0lBTkZBUj15Ci1DT05GSUdfR0ZBUl9OQVBJPXkKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotQ09ORklHX1NFTlNPUlNfRFMxMzM3PXkKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19MTTc1PXkKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04NTQxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTg1NDFfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWZmMzVmLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTg1NDFfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTA0NCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM4Ci0jIEZyaSBKYW4gMjUgMDE6MzE6MjggMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR182eHggaXMgbm90IHNldAotQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184NXh4PXkKLUNPTkZJR19FNTAwPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci0jIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKLUNPTkZJR19UUU04NTQxPXkKLSMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0Ci1DT05GSUdfVFFNODV4eD15Ci1DT05GSUdfTVBDODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMj15Ci1DT05GSUdfUFBDX0NQTV9ORVdfQklORElORz15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0idHFtODU0MS5kdHMiCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUF9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotQ09ORklHX0lERV9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfU0hBUkVfSVJRPXkKLUNPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKLSMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQ9eQotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwPXkKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX0dJQU5GQVI9eQotQ09ORklHX0dGQVJfTkFQST15Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NQTT15Ci1DT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ1BNX1NDQzE9eQotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU0NDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TTUMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU01DMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLUNPTkZJR19TRU5TT1JTX0RTMTMzNz15Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfTE03NT15Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0dEQl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTg1NTVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtODU1NV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYWYyMjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtODU1NV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQ0ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzgKLSMgRnJpIEphbiAyNSAwMToxNToyNCAyMDA4Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzg1eHg9eQotQ09ORklHX0U1MDA9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19GU0xfQk9PS0U9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BFPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDAgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0Ci1DT05GSUdfVFFNODU1NT15Ci0jIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKLUNPTkZJR19UUU04NXh4PXkKLUNPTkZJR19NUEM4NXh4PXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0yPXkKLUNPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HPXkKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLUNPTkZJR19DUE09eQotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci1DT05GSUdfSElCRVJOQVRJT05fVVBfUE9TU0lCTEU9eQotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX1dBTlRfREVWSUNFX1RSRUU9eQotQ09ORklHX0RFVklDRV9UUkVFPSJ0cW04NTU1LmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQotQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci1DT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVD15Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAotQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfR0lBTkZBUj15Ci1DT05GSUdfR0ZBUl9OQVBJPXkKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ1BNPXkKLUNPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DUE1fU0NDMT15Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU0NDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TTUMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotQ09ORklHX1NFTlNPUlNfRFMxMzM3PXkKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19MTTc1PXkKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0lOU1RSVU1FTlRBVElPTj15Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04NTYwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzMmU4OS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04NTYwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEwNDQgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjOAotIyBUaHUgSmFuIDI0IDIzOjUwOjQyIDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfODV4eD15Ci1DT05GSUdfRTUwMD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAotQ09ORklHX1RRTTg1NjA9eQotQ09ORklHX1RRTTg1eHg9eQotQ09ORklHX01QQzg1eHg9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotQ09ORklHX0NQTTI9eQotQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkc9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9InRxbTg1NjAuZHRzIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1NIQVJFX0lSUT15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLUNPTkZJR19HRkFSX05BUEk9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DUE09eQotQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NQTV9TQ0MxPXkKLSMgQ09ORklHX1NFUklBTF9DUE1fU0NDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NDQzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9DUE1fU01DMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfQ1BNX1NNQzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VOU09SU19EUzEzMzc9eQotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX0xNNzU9eQotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIEkvTwotIwotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tHREJfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy93YWxudXRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2FsbnV0X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzMTEyOC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy93YWxudXRfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODYwICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgTW9uIERlYyAyNCAxMToyMzo1OCAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLUNPTkZJR180MHg9eQotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzR4eD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0Ci1DT05GSUdfV0FMTlVUPXkKLSMgQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfNDA1R1A9eQotQ09ORklHX0lCTTQwNV9FUlI3Nz15Ci1DT05GSUdfSUJNNDA1X0VSUjUxPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX0hJQkVSTkFUSU9OX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0id2FsbnV0LmR0cyIKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAotQ09ORklHX0JPT1RfTE9BRD0weDAwNDAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPW0KLUNPTkZJR19NVERfQkxPQ0s9bQotIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci1DT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3dhcnBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2FycF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMjU1N2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2FycF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMDU3ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzYKLSMgVHVlIEphbiAgOCAxMjoyMzoyMyAyMDA4Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci1DT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSItcGlrYSIKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAotIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FSUD15Ci1DT05GSUdfNDQwRVA9eQotQ09ORklHX0lCTTQ0MEVQX0VSUjQyPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQotQ09ORklHX0haPTEwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0iaXA9b24iCi1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15Ci1DT05GSUdfREVWSUNFX1RSRUU9IndhcnAuZHRzIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKLUNPTkZJR19CT09UX0xPQUQ9MHgwMTAwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotQ09ORklHX1ZMQU5fODAyMVE9eQotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfT09QUz1tCi0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotQ09ORklHX01URF9OQU5EX05ERkM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1dBSVRfU0NBTiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUM9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MTI4Ci1DT05GSUdfSUJNX05FV19FTUFDX1RYQj02NAotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLUNPTkZJR19JMkNfSUJNX0lJQz15Ci0jIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfQUQ3NDE0PXkKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotQ09ORklHX01NQz1tCi0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9bQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgSS9PCi0jCi0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0FTQ0lJPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotQ09ORklHX05MU19JU084ODU5XzE1PXkKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CRElfU1dJVENIPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IGMxYmFmOWQuLmNlMWU4ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogQ0ZMQUdTX2J0ZXh0Lm8JCSs9IC1mUElDCiBlbmRpZgogCi1vYmoteQkJCQk6PSBzZW1hcGhvcmUubyBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXAorb2JqLXkJCQkJOj0gY3B1dGFibGUubyBwdHJhY2UubyBzeXNjYWxscy5vIFwKIAkJCQkgICBpcnEubyBhbGlnbi5vIHNpZ25hbF8zMi5vIHBtYy5vIHZkc28ubyBcCiAJCQkJICAgaW5pdF90YXNrLm8gcHJvY2Vzcy5vIHN5c3RibC5vIGlkbGUubyBcCiAJCQkJICAgc2lnbmFsLm8KQEAgLTY3LDYgKzY3LDcgQEAKIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KIG9iai0kKENPTkZJR19QUENfVURCR18xNjU1MCkJKz0gbGVnYWN5X3NlcmlhbC5vIHVkYmdfMTY1NTAubworb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2UubwogCiBwY2k2NC0kKENPTkZJR19QUEM2NCkJCSs9IHBjaV9kbi5vIGlzYS1icmlkZ2Uubwogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaV8kKENPTkZJR19XT1JEX1NJWkUpLm8gJChwY2k2NC15KSBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNGI3NDljNC4uMjkyYzZkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjYsOCArMjYsNiBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ2LDYgKzQ0LDkgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCisjaW5jbHVkZSA8YXNtL2lzZXJpZXMvYWxwYWNhLmg+CisjZW5kaWYKIAogI2RlZmluZSBERUZJTkUoc3ltLCB2YWwpIFwKIAlhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsKSkKQEAgLTYwLDcgKzYxLDYgQEAKIAlERUZJTkUoQVVESVRDT05URVhULCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGF1ZGl0X2NvbnRleHQpKTsKICNlbHNlCiAJREVGSU5FKFRIUkVBRF9JTkZPLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrKSk7Ci0JREVGSU5FKFBUUkFDRSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2UpKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCURFRklORShLU1AsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBrc3ApKTsKQEAgLTgwLDcgKzgwLDYgQEAKIAlERUZJTkUoUEdESVIsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBwZ2RpcikpOwogI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCiAJREVGSU5FKFRIUkVBRF9EQkNSMCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGRiY3IwKSk7Ci0JREVGSU5FKFBUX1BUUkFDRUQsIFBUX1BUUkFDRUQpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NQRQogCURFRklORShUSFJFQURfRVZSMCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGV2clswXSkpOwpAQCAtMzI1LDYgKzMyNCw5IEBACiAJREVGSU5FKFBBR0VfT0ZGU0VUX1ZTSUQsIEtFUk5FTF9WU0lEKFBBR0VfT0ZGU0VUKSk7CiAJREVGSU5FKFZNQUxMT0NfU1RBUlRfRVNJRCwgR0VUX0VTSUQoVk1BTExPQ19TVEFSVCkpOwogCURFRklORShWTUFMTE9DX1NUQVJUX1ZTSUQsIEtFUk5FTF9WU0lEKFZNQUxMT0NfU1RBUlQpKTsKKworCS8qIGFscGFjYSAqLworCURFRklORShBTFBBQ0FfU0laRSwgc2l6ZW9mKHN0cnVjdCBhbHBhY2EpKTsKICNlbmRpZgogCiAJREVGSU5FKFBHRF9UQUJMRV9TSVpFLCBQR0RfVEFCTEVfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKaW5kZXggODBlMmVlZi4uOWY5Mzc3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpAQCAtMTUsNyArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9sbWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzQ0eC5TCmluZGV4IDYyNTA0NDMuLjU0NjVlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzQ0eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzQ0eC5TCkBAIC0zLDcgKzMsNyBAQAogICogVmFsZW50aW5lIEJhcnNoYWsgPHZiYXJzaGFrQHJ1Lm12aXN0YS5jb20+CiAgKiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMgKGMpIDIwMDcKICAqCi0gKiBCYXNlZCBvbiBjcHVfc2V0dXBfNnh4IGNvZGUgYnkgCisgKiBCYXNlZCBvbiBjcHVfc2V0dXBfNnh4IGNvZGUgYnkKICAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMiw2ICszMiw5IEBACiAJYmwJX19maXh1cF80NDBBX21jaGVjawogCW10bHIJcjQKIAlibHIKK19HTE9CQUwoX19zZXR1cF9jcHVfNDYwZXgpCitfR0xPQkFMKF9fc2V0dXBfY3B1XzQ2MGd0KQorCWIJX19pbml0X2ZwdV80NHgKIF9HTE9CQUwoX19zZXR1cF9jcHVfNDQwZ3gpCiBfR0xPQkFMKF9fc2V0dXBfY3B1XzQ0MHNwZSkKIAliCV9fZml4dXBfNDQwQV9tY2hlY2sKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAyYThmNWNjLi4yNmZmYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0zNiw2ICszNiw4IEBACiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NDBneCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGdyeCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MHNwZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKK2V4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ2MGV4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDYwZ3QodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV83NTAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CkBAIC0xMzk3LDYgKzEzOTksMzAgQEAKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja180NDBBLAogCQkucGxhdGZvcm0JCT0gInBwYzQ0MCIsCiAJfSwKKwl7IC8qIDQ2MEVYICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAyLAorCQkucHZyX3ZhbHVlCQk9IDB4MTMwMjAwMDIsCisJCS5jcHVfbmFtZQkJPSAiNDYwRVgiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQ0WCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfQk9PS0UgfCBQUENfRkVBVFVSRV9IQVNfRlBVLAorCQkuaWNhY2hlX2JzaXplCQk9IDMyLAorCQkuZGNhY2hlX2JzaXplCQk9IDMyLAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1XzQ2MGV4LAorCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrXzQ0MEEsCisJCS5wbGF0Zm9ybQkJPSAicHBjNDQwIiwKKwl9LAorCXsgLyogNDYwR1QgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDIsCisJCS5wdnJfdmFsdWUJCT0gMHgxMzAyMDAwMCwKKwkJLmNwdV9uYW1lCQk9ICI0NjBHVCIsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfNDRYLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSB8IFBQQ19GRUFUVVJFX0hBU19GUFUsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNDYwZ3QsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAorCX0sCiAjZW5kaWYgLyogQ09ORklHXzQ0eCAqLwogI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKICNpZmRlZiBDT05GSUdfRTIwMApAQCAtMTUxMiw3ICsxNTM4LDcgQEAKIAkJCQkqdCA9ICpzOwogCQkJKlBUUlJFTE9DKCZjdXJfY3B1X3NwZWMpID0gJnRoZV9jcHVfc3BlYzsKICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCQkvKiBwcGM2NCBhbmQgYm9va2UgZXhwZWN0IGlkZW50aWZ5X2NwdSB0byBhbHNvIGNhbGwgCisJCQkvKiBwcGM2NCBhbmQgYm9va2UgZXhwZWN0IGlkZW50aWZ5X2NwdSB0byBhbHNvIGNhbGwKIAkJCSAqIHNldHVwX2NwdSBmb3IgdGhhdCBwcm9jZXNzb3IuIEkgd2lsbCBjb25zb2xpZGF0ZQogCQkJICogdGhhdCBhdCBhIGxhdGVyIHRpbWUsIGZvciBub3csIGp1c3QgdXNlICNpZmRlZi4KIAkJCSAqIHdlIGFsc28gZG9uJ3QgbmVlZCB0byBQVFJSRUxPQyB0aGUgZnVuY3Rpb24gcG9pbnRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCmluZGV4IDU3MTEzMmUuLmVhZTQwMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKQEAgLTI0LDEyICsyNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAjaW5jbHVkZSA8YXNtL2tkdW1wLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggMjlmZjc3Yy4uOWVlM2M1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTEzLDggKzEzLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAjaW5jbHVkZSA8YXNtL2tkdW1wLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDY5YTkxYmQuLjg0Yzg2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKQEAgLTExMCw5ICsxMTAsOSBAQAogCXN0dwlyMTEsUFRfUkVHUyhyMTIpCiAjaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGRiY3IwIHJlZ2lzdGVyIGlzIHNldCB1cCB0byBkZWJ1Zy4gIFVzZSB0aGUKLQkgICBzaW5nbGUtc3RlcCBiaXQgdG8gZG8gdGhpcy4gKi8KKwkgICBpbnRlcm5hbCBkZWJ1ZyBtb2RlIGJpdCB0byBkbyB0aGlzLiAqLwogCWx3eglyMTIsVEhSRUFEX0RCQ1IwKHIxMikKLQlhbmRpcy4JcjEyLHIxMixEQkNSMF9JQ0BoCisJYW5kaXMuCXIxMixyMTIsREJDUjBfSURNQGgKIAliZXErCTNmCiAJLyogRnJvbSB1c2VyIGFuZCB0YXNrIGlzIHB0cmFjZWQgLSBsb2FkIHVwIGdsb2JhbCBkYmNyMCAqLwogCWxpCXIxMiwtMQkJCS8qIGNsZWFyIGFsbCBwZW5kaW5nIGRlYnVnIGV2ZW50cyAqLwpAQCAtMTIwLDYgKzEyMCwxMiBAQAogCWxpcwlyMTEsZ2xvYmFsX2RiY3IwQGhhCiAJdG9waHlzKHIxMSxyMTEpCiAJYWRkaQlyMTEscjExLGdsb2JhbF9kYmNyMEBsCisjaWZkZWYgQ09ORklHX1NNUAorCXJsd2lubQlyOSxyMSwwLDAsKDMxLVRIUkVBRF9TSElGVCkKKwlsd3oJcjksVElfQ1BVKHI5KQorCXNsd2kJcjkscjksMworCWFkZAlyMTEscjExLHI5CisjZW5kaWYKIAlsd3oJcjEyLDAocjExKQogCW10c3ByCVNQUk5fREJDUjAscjEyCiAJbHd6CXIxMiw0KHIxMSkKQEAgLTIzOCwxMCArMjQ0LDEwIEBACiAJc3R3CXIxMSxfQ0NSKHIxKQogc3lzY2FsbF9leGl0X2NvbnQ6CiAjaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKLQkvKiBJZiB0aGUgcHJvY2VzcyBoYXMgaXRzIG93biBEQkNSMCB2YWx1ZSwgbG9hZCBpdCB1cC4gIFRoZSBzaW5nbGUKLQkgICBzdGVwIGJpdCB0ZWxscyB1cyB0aGF0IGRiY3IwIHNob3VsZCBiZSBsb2FkZWQuICovCisJLyogSWYgdGhlIHByb2Nlc3MgaGFzIGl0cyBvd24gREJDUjAgdmFsdWUsIGxvYWQgaXQgdXAuICBUaGUgaW50ZXJuYWwKKwkgICBkZWJ1ZyBtb2RlIGJpdCB0ZWxscyB1cyB0aGF0IGRiY3IwIHNob3VsZCBiZSBsb2FkZWQuICovCiAJbHd6CXIwLFRIUkVBRCtUSFJFQURfREJDUjAocjIpCi0JYW5kaXMuCXIxMCxyMCxEQkNSMF9JQ0BoCisJYW5kaXMuCXIxMCxyMCxEQkNSMF9JRE1AaAogCWJuZWwtCWxvYWRfZGJjcjAKICNlbmRpZgogI2lmZGVmIENPTkZJR180NHgKQEAgLTY2NiwxMCArNjcyLDEwIEBACiAKIHJlc3RvcmVfdXNlcjoKICNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQotCS8qIENoZWNrIHdoZXRoZXIgdGhpcyBwcm9jZXNzIGhhcyBpdHMgb3duIERCQ1IwIHZhbHVlLiAgVGhlIHNpbmdsZQotCSAgIHN0ZXAgYml0IHRlbGxzIHVzIHRoYXQgZGJjcjAgc2hvdWxkIGJlIGxvYWRlZC4gKi8KKwkvKiBDaGVjayB3aGV0aGVyIHRoaXMgcHJvY2VzcyBoYXMgaXRzIG93biBEQkNSMCB2YWx1ZS4gIFRoZSBpbnRlcm5hbAorCSAgIGRlYnVnIG1vZGUgYml0IHRlbGxzIHVzIHRoYXQgZGJjcjAgc2hvdWxkIGJlIGxvYWRlZC4gKi8KIAlsd3oJcjAsVEhSRUFEK1RIUkVBRF9EQkNSMChyMikKLQlhbmRpcy4JcjEwLHIwLERCQ1IwX0lDQGgKKwlhbmRpcy4JcjEwLHIwLERCQ1IwX0lETUBoCiAJYm5lbC0JbG9hZF9kYmNyMAogI2VuZGlmCiAKQEAgLTg3OSw2ICs4ODUsMTIgQEAKIAltZnNwcglyMTAsU1BSTl9EQkNSMAogCWxpcwlyMTEsZ2xvYmFsX2RiY3IwQGhhCiAJYWRkaQlyMTEscjExLGdsb2JhbF9kYmNyMEBsCisjaWZkZWYgQ09ORklHX1NNUAorCXJsd2lubQlyOSxyMSwwLDAsKDMxLVRIUkVBRF9TSElGVCkKKwlsd3oJcjksVElfQ1BVKHI5KQorCXNsd2kJcjkscjksMworCWFkZAlyMTEscjExLHI5CisjZW5kaWYKIAlzdHcJcjEwLDAocjExKQogCW10c3ByCVNQUk5fREJDUjAscjAKIAlsd3oJcjEwLDQocjExKQpAQCAtODkxLDcgKzkwMyw3IEBACiAJLnNlY3Rpb24gLmJzcwogCS5hbGlnbgk0CiBnbG9iYWxfZGJjcjA6Ci0JLnNwYWNlCTgKKwkuc3BhY2UJOCpOUl9DUFVTCiAJLnByZXZpb3VzCiAjZW5kaWYgLyogIShDT05GSUdfNHh4IHx8IENPTkZJR19CT09LRSkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDE0OGEzNTQuLmMwZGI1YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgogCiAvKgogICogU3lzdGVtIGNhbGxzLgpAQCAtMzksNyArNDEsNyBAQAogCiAvKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gbWFyayBleGNlcHRpb24gZnJhbWVzIG9uIHRoZSBzdGFjay4gKi8KIGV4Y2VwdGlvbl9tYXJrZXI6Ci0JLnRjCUlEXzcyNjU2NzczXzY4NjU3MjY1W1RDXSwweDcyNjU2NzczNjg2NTcyNjUKKwkudGMJSURfRVhDX01BUktFUltUQ10sU1RBQ0tfRlJBTUVfUkVHU19NQVJLRVIKIAogCS5zZWN0aW9uCSIudGV4dCIKIAkuYWxpZ24gNwpAQCAtODgsNiArOTAsMTQgQEAKIAlhZGRpCXI5LHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJbGQJcjExLGV4Y2VwdGlvbl9tYXJrZXJAdG9jKHIyKQogCXN0ZAlyMTEsLTE2KHI5KQkJLyogInJlZ3NoZXJlIiBtYXJrZXIgKi8KKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlibAkudHJhY2VfaGFyZGlycXNfb24KKwlSRVNUX0dQUigwLHIxKQorCVJFU1RfNEdQUlMoMyxyMSkKKwlSRVNUXzJHUFJTKDcscjEpCisJYWRkaQlyOSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWxkCXIxMixfTVNSKHIxKQorI2VuZGlmIC8qIENPTkZJR19UUkFDRV9JUlFGTEFHUyAqLwogCWxpCXIxMCwxCiAJc3RiCXIxMCxQQUNBU09GVElSUUVOKHIxMykKIAlzdGIJcjEwLFBBQ0FIQVJESVJRRU4ocjEzKQpAQCAtMTAyLDcgKzExMiw3IEBACiAJYgloYXJkd2FyZV9pbnRlcnJ1cHRfZW50cnkKIDI6CiBFTkRfRldfRlRSX1NFQ1RJT05fSUZTRVQoRldfRkVBVFVSRV9JU0VSSUVTKQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAJbWZtc3IJcjExCiAJb3JpCXIxMSxyMTEsTVNSX0VFCiAJbXRtc3JkCXIxMSwxCkBAIC01MDQsNiArNTE0LDEwIEBACiAKIAlsaQlyMywwCiAJc3RiCXIzLFBBQ0FTT0ZUSVJRRU4ocjEzKQkvKiBlbnN1cmUgd2UgYXJlIHNvZnQtZGlzYWJsZWQgKi8KKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlibAkudHJhY2VfaGFyZGlycXNfb2ZmCisJbWZtc3IJcjEwCisjZW5kaWYKIAlvcmkJcjEwLHIxMCxNU1JfRUUKIAltdG1zcmQJcjEwCQkJLyogaGFyZC1lbmFibGUgYWdhaW4gKi8KIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECkBAIC01MTIsNyArNTI2LDcgQEAKIDQ6CiBFTkRfRldfRlRSX1NFQ1RJT05fSUZTRVQoRldfRkVBVFVSRV9JU0VSSUVTKQogI2VuZGlmCi0Jc3RiCXI1LFBBQ0FTT0ZUSVJRRU4ocjEzKQorCVRSQUNFX0FORF9SRVNUT1JFX0lSUShyNSk7CiAKIAkvKiBleHRyYWN0IEVFIGJpdCBhbmQgdXNlIGl0IHRvIHJlc3RvcmUgcGFjYS0+aGFyZF9lbmFibGVkICovCiAJbGQJcjMsX01TUihyMSkKQEAgLTU4MCw2ICs1OTQsMTYgQEAKIAlibmUJcmVzdG9yZQogCS8qIGhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzayAqLwogMToKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlibAkudHJhY2VfaGFyZGlycXNfb24KKwkvKiBOb3RlOiB3ZSBqdXN0IGNsb2JiZXJlZCByMTAgd2hpY2ggdXNlZCB0byBjb250YWluIHRoZSBwcmV2aW91cworCSAqIE1TUiBiZWZvcmUgdGhlIGhhcmQtZGlzYWJsaW5nIGRvbmUgYnkgdGhlIGNhbGxlciBvZiBkb193b3JrLgorCSAqIFdlIGRvbid0IGhhdmUgdGhhdCB2YWx1ZSBhbnltb3JlLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgYXMKKwkgKiB3ZSB3aWxsIGhhcmQtZW5hYmxlIHVuY29uZGl0aW9uYWxseSwgd2UgY2FuIGp1c3QgcmVsb2FkIHRoZQorCSAqIGN1cnJlbnQgTVNSIGludG8gcjEwCisJICovCisJbWZtc3IJcjEwCisjZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCiAJbGkJcjAsMQogCXN0YglyMCxQQUNBU09GVElSUUVOKHIxMykKIAlzdGIJcjAsUEFDQUhBUkRJUlFFTihyMTMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDBmNGZhYzUuLjc4NWFmOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKIC8qIDYwMSBvbmx5IGhhdmUgSUJBVDsgY3IwLmVxIGlzIHNldCBvbiA2MDEgd2hlbiB1c2luZyB0aGlzIG1hY3JvICovCiAjZGVmaW5lIExPQURfQkFUKG4sIHJlZywgUkEsIFJCKQlcCkBAIC0yNjgsOCArMjY5LDggQEAKIAlsaQlyMTAsTVNSX0tFUk5FTCAmIH4oTVNSX0lSfE1TUl9EUik7IC8qIGNhbiB0YWtlIGV4Y2VwdGlvbnMgKi8gXAogCU1UTVNSRChyMTApOwkJCS8qIChleGNlcHQgZm9yIG1hY2ggY2hlY2sgaW4gcnRhcykgKi8gXAogCXN0dwlyMCxHUFIwKHIxMSk7CVwKLQlsaXMJcjEwLDB4NzI2NTsJCS8qIHB1dCBleGNlcHRpb24gZnJhbWUgbWFya2VyICovIFwKLQlhZGRpCXIxMCxyMTAsMHg2NzczOwlcCisJbGlzCXIxMCxTVEFDS19GUkFNRV9SRUdTX01BUktFUkBoYTsgLyogZXhjZXB0aW9uIGZyYW1lIG1hcmtlciAqLyBcCisJYWRkaQlyMTAscjEwLFNUQUNLX0ZSQU1FX1JFR1NfTUFSS0VSQGw7IFwKIAlzdHcJcjEwLDgocjExKTsJXAogCVNBVkVfNEdQUlMoMywgcjExKTsJXAogCVNBVkVfMkdQUlMoNywgcjExKQpAQCAtNzYzLDIzICs3NjQsNiBAQAogCWIJZmFzdF9leGNlcHRpb25fcmV0dXJuCiAKIC8qCi0gKiBBbHRpVmVjIHVuYXZhaWxhYmxlIHRyYXAgZnJvbSBrZXJuZWwgLSBwcmludCBhIG1lc3NhZ2UsIGJ1dCBsZXQKLSAqIHRoZSB0YXNrIHVzZSBBbHRpVmVjIGluIHRoZSBrZXJuZWwgdW50aWwgaXQgcmV0dXJucyB0byB1c2VyIG1vZGUuCi0gKi8KLUtlcm5lbEFsdGlWZWM6Ci0JbHd6CXIzLF9NU1IocjEpCi0Jb3JpcwlyMyxyMyxNU1JfVkVDQGgKLQlzdHcJcjMsX01TUihyMSkJLyogZW5hYmxlIHVzZSBvZiBBbHRpVmVjIGFmdGVyIHJldHVybiAqLwotCWxpcwlyMyw4N2ZAaAotCW9yaQlyMyxyMyw4N2ZAbAotCW1yCXI0LHIyCQkvKiBjdXJyZW50ICovCi0JbHd6CXI1LF9OSVAocjEpCi0JYmwJcHJpbnRrCi0JYglyZXRfZnJvbV9leGNlcHQKLTg3Ogkuc3RyaW5nCSJBbHRpVmVjIHVzZWQgaW4ga2VybmVsICAodGFzaz0lcCwgcGM9JXgpICBcbiIKLQkuYWxpZ24JNCwwCi0KLS8qCiAgKiBnaXZldXBfYWx0aXZlYyh0c2spCiAgKiBEaXNhYmxlIEFsdGlWZWMgZm9yIHRoZSB0YXNrIGdpdmVuIGFzIHRoZSBhcmd1bWVudCwKICAqIGFuZCBzYXZlIHRoZSBBbHRpVmVjIHJlZ2lzdGVycyBpbiBpdHMgdGhyZWFkX3N0cnVjdC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUwppbmRleCBhZDA3MWExLi5iODRlYzZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCkBAIC0yMTEsNyArMjExLDcgQEAKIAlTRVRfSVZPUigxMiwgV2F0Y2hkb2dUaW1lcik7CiAJU0VUX0lWT1IoMTMsIERhdGFUTEJFcnJvcik7CiAJU0VUX0lWT1IoMTQsIEluc3RydWN0aW9uVExCRXJyb3IpOwotCVNFVF9JVk9SKDE1LCBEZWJ1Zyk7CisJU0VUX0lWT1IoMTUsIERlYnVnQ3JpdCk7CiAKIAkvKiBFc3RhYmxpc2ggdGhlIGludGVycnVwdCB2ZWN0b3IgYmFzZSAqLwogCWxpcwlyNCxpbnRlcnJ1cHRfYmFzZUBoCS8qIElWUFIgb25seSB1c2VzIHRoZSBoaWdoIDE2LWJpdHMgKi8KQEAgLTU3OCw3ICs1NzgsNyBAQAogCWIJSW5zdHJ1Y3Rpb25TdG9yYWdlCiAKIAkvKiBEZWJ1ZyBJbnRlcnJ1cHQgKi8KLQlERUJVR19FWENFUFRJT04KKwlERUJVR19DUklUX0VYQ0VQVElPTgogCiAvKgogICogTG9jYWwgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDExYjRmNmQuLjIxNTk3M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC0zNiw4ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2VfNjQuaD4KICNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLmg+Ci0KLSNkZWZpbmUgRE9fU09GVF9ESVNBQkxFCisjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CiAKIC8qCiAgKiBXZSBsYXlvdXQgcGh5c2ljYWwgbWVtb3J5IGFzIGZvbGxvd3M6CkBAIC00NTAsOCArNDQ5LDggQEAKICAqLwogZmFzdF9leGNfcmV0dXJuX2lycToJCQkvKiByZXN0b3JlcyBpcnEgc3RhdGUgdG9vICovCiAJbGQJcjMsU09GVEUocjEpCisJVFJBQ0VfQU5EX1JFU1RPUkVfSVJRKHIzKTsKIAlsZAlyMTIsX01TUihyMSkKLQlzdGIJcjMsUEFDQVNPRlRJUlFFTihyMTMpCS8qIHJlc3RvcmUgcGFjYS0+c29mdF9lbmFibGVkICovCiAJcmxkaWNsCXI0LHIxMiw0OSw2MwkJLyogZ2V0IE1TUl9FRSB0byBMU0IgKi8KIAlzdGIJcjQsUEFDQUhBUkRJUlFFTihyMTMpCS8qIHJlc3RvcmUgcGFjYS0+aGFyZF9lbmFibGVkICovCiAJYgkxZgpAQCAtNjIxLDcgKzYyMCw3IEBACiAJbXRscglyMTAKIAogCWFuZGkuCXIxMCxyMTIsTVNSX1JJCS8qIGNoZWNrIGZvciB1bnJlY292ZXJhYmxlIGV4Y2VwdGlvbiAqLwotCWJlcS0JdW5yZWNvdl9zbGIKKwliZXEtCTJmCiAKIC5tYWNoaW5lCXB1c2gKIC5tYWNoaW5lCSJwb3dlcjQiCkBAIC02NDMsNiArNjQyLDIyIEBACiAJcmZpZAogCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwogCisyOgorI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworQkVHSU5fRldfRlRSX1NFQ1RJT04KKwliCXVucmVjb3Zfc2xiCitFTkRfRldfRlRSX1NFQ1RJT05fSUZTRVQoRldfRkVBVFVSRV9JU0VSSUVTKQorI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLworCW1mc3ByCXIxMSxTUFJOX1NSUjAKKwljbHJyZGkJcjEwLHIxMywzMgorCUxPQURfSEFORExFUihyMTAsdW5yZWNvdl9zbGIpCisJbXRzcHIJU1BSTl9TUlIwLHIxMAorCW1mbXNyCXIxMAorCW9yaQlyMTAscjEwLE1TUl9JUnxNU1JfRFJ8TVNSX1JJCisJbXRzcHIJU1BSTl9TUlIxLHIxMAorCXJmaWQKKwliCS4KKwogdW5yZWNvdl9zbGI6CiAJRVhDRVBUSU9OX1BST0xPR19DT01NT04oMHg0MTAwLCBQQUNBX0VYU0xCKQogCURJU0FCTEVfSU5UUwpAQCAtODA4LDcgKzgyMyw3IEBACiAgKiBIYXNoIHRhYmxlIHN0dWZmCiAgKi8KIAkuYWxpZ24JNwotX0dMT0JBTChkb19oYXNoX3BhZ2UpCitfU1RBVElDKGRvX2hhc2hfcGFnZSkKIAlzdGQJcjMsX0RBUihyMSkKIAlzdGQJcjQsX0RTSVNSKHIxKQogCkBAIC04MjAsNiArODM1LDI3IEBACiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TTEIpCiAKIAkvKgorCSAqIE9uIGlTZXJpZXMsIHdlIHNvZnQtZGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUsIHRoZW4KKwkgKiBoYXJkLWVuYWJsZSBpbnRlcnJ1cHRzIHNvIHRoYXQgdGhlIGhhc2hfcGFnZSBjb2RlIGNhbiBzcGluIG9uCisJICogdGhlIGhhc2hfdGFibGVfbG9jayB3aXRob3V0IHByb2JsZW1zIG9uIGEgc2hhcmVkIHByb2Nlc3Nvci4KKwkgKi8KKwlESVNBQkxFX0lOVFMKKworCS8qCisJICogQ3VycmVudGx5LCB0cmFjZV9oYXJkaXJxc19vZmYoKSB3aWxsIGJlIGNhbGxlZCBieSBESVNBQkxFX0lOVFMKKwkgKiBhbmQgd2lsbCBjbG9iYmVyIHZvbGF0aWxlIHJlZ2lzdGVycyB3aGVuIGlycSB0cmFjaW5nIGlzIGVuYWJsZWQKKwkgKiBzbyB3ZSBuZWVkIHRvIHJlbG9hZCB0aGVtLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gYmUgc21hcnRlciBoZXJlCisJICogYW5kIG1vdmUgdGhlIGlycSB0cmFjaW5nIGVsc2V3aGVyZSBidXQgbGV0J3Mga2VlcCBpdCBzaW1wbGUgZm9yCisJICogbm93CisJICovCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJbGQJcjMsX0RBUihyMSkKKwlsZAlyNCxfRFNJU1IocjEpCisJbGQJcjUsX1RSQVAocjEpCisJbGQJcjEyLF9NU1IocjEpCisJY2xycmRpCXI1LHI1LDQKKyNlbmRpZiAvKiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MgKi8KKwkvKgogCSAqIFdlIG5lZWQgdG8gc2V0IHRoZSBfUEFHRV9VU0VSIGJpdCBpZiBNU1JfUFIgaXMgc2V0IG9yIGlmIHdlIGFyZQogCSAqIGFjY2Vzc2luZyBhIHVzZXJzcGFjZSBzZWdtZW50IChldmVuIGZyb20gdGhlIGtlcm5lbCkuIFdlIGFzc3VtZQogCSAqIGtlcm5lbCBhZGRyZXNzZXMgYWx3YXlzIGhhdmUgdGhlIGhpZ2ggYml0IHNldC4KQEAgLTgzMiwxMyArODY4LDYgQEAKIAlybHdpbWkJcjQscjUsMjIrMiwzMS0yLDMxLTIJLyogU2V0IF9QQUdFX0VYRUMgaWYgdHJhcCBpcyAweDQwMCAqLwogCiAJLyoKLQkgKiBPbiBpU2VyaWVzLCB3ZSBzb2Z0LWRpc2FibGUgaW50ZXJydXB0cyBoZXJlLCB0aGVuCi0JICogaGFyZC1lbmFibGUgaW50ZXJydXB0cyBzbyB0aGF0IHRoZSBoYXNoX3BhZ2UgY29kZSBjYW4gc3BpbiBvbgotCSAqIHRoZSBoYXNoX3RhYmxlX2xvY2sgd2l0aG91dCBwcm9ibGVtcyBvbiBhIHNoYXJlZCBwcm9jZXNzb3IuCi0JICovCi0JRElTQUJMRV9JTlRTCi0KLQkvKgogCSAqIHIzIGNvbnRhaW5zIHRoZSBmYXVsdGluZyBhZGRyZXNzCiAJICogcjQgY29udGFpbnMgdGhlIHJlcXVpcmVkIGFjY2VzcyBwZXJtaXNzaW9ucwogCSAqIHI1IGNvbnRhaW5zIHRoZSB0cmFwIG51bWJlcgpAQCAtODQ4LDcgKzg3Nyw2IEBACiAJYmwJLmhhc2hfcGFnZQkJLyogYnVpbGQgSFBURSBpZiBwb3NzaWJsZSAqLwogCWNtcGRpCXIzLDAJCQkvKiBzZWUgaWYgaGFzaF9wYWdlIHN1Y2NlZWRlZCAqLwogCi0jaWZkZWYgRE9fU09GVF9ESVNBQkxFCiBCRUdJTl9GV19GVFJfU0VDVElPTgogCS8qCiAJICogSWYgd2UgaGFkIGludGVycnVwdHMgc29mdC1lbmFibGVkIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUKQEAgLTg2MCw3ICs4ODgsNyBAQAogCSAqLwogCWJlcQkxM2YKIEVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCi0jZW5kaWYKKwogQkVHSU5fRldfRlRSX1NFQ1RJT04KIAkvKgogCSAqIEhlcmUgd2UgaGF2ZSBpbnRlcnJ1cHRzIGhhcmQtZGlzYWJsZWQsIHNvIGl0IGlzIHN1ZmZpY2llbnQKQEAgLTg3NCwxMSArOTAyLDEyIEBACiAKIAkvKgogCSAqIGhhc2hfcGFnZSBjb3VsZG4ndCBoYW5kbGUgaXQsIHNldCBzb2Z0IGludGVycnVwdCBlbmFibGUgYmFjawotCSAqIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUgdHJhcC4gIE5vdGUgdGhhdCAubG9jYWxfaXJxX3Jlc3RvcmUKKwkgKiB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhlIHRyYXAuICBOb3RlIHRoYXQgLnJhd19sb2NhbF9pcnFfcmVzdG9yZQogCSAqIGhhbmRsZXMgYW55IGludGVycnVwdHMgcGVuZGluZyBhdCB0aGlzIHBvaW50LgogCSAqLwogCWxkCXIzLFNPRlRFKHIxKQotCWJsCS5sb2NhbF9pcnFfcmVzdG9yZQorCVRSQUNFX0FORF9SRVNUT1JFX0lSUV9QQVJUSUFMKHIzLCAxMWYpCisJYmwJLnJhd19sb2NhbF9pcnFfcmVzdG9yZQogCWIJMTFmCiAKIC8qIEhlcmUgd2UgaGF2ZSBhIHBhZ2UgZmF1bHQgdGhhdCBoYXNoX3BhZ2UgY2FuJ3QgaGFuZGxlLiAqLwpAQCAtMTM4NywxMiArMTQxNiwxNCBAQAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogQkVHSU5fRldfRlRSX1NFQ1RJT04KIAlvcmkJcjQscjQsTVNSX0VFCisJbGkJcjgsMQorCXN0YglyOCxQQUNBSEFSRElSUUVOKHIxMykKIEVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCiAjZW5kaWYKIEJFR0lOX0ZXX0ZUUl9TRUNUSU9OCi0Jc3RiCXI3LFBBQ0FTT0ZUSVJRRU4ocjEzKQogCXN0YglyNyxQQUNBSEFSRElSUUVOKHIxMykKIEVORF9GV19GVFJfU0VDVElPTl9JRkNMUihGV19GRUFUVVJFX0lTRVJJRVMpCisJc3RiCXI3LFBBQ0FTT0ZUSVJRRU4ocjEzKQogCiAJbXRzcHIJU1BSTl9TUlIwLHIzCiAJbXRzcHIJU1BSTl9TUlIxLHI0CkBAIC0xNDc1LDYgKzE1MDYsMTAgQEAKIAlhZGRpCXIyLHIyLDB4NDAwMAogCWFkZAlyMixyMixyMjYKIAorCS8qIFNldCBpbml0aWFsIHB0ciB0byBjdXJyZW50ICovCisJTE9BRF9SRUdfSU1NRURJQVRFKHI0LCBpbml0X3Rhc2spCisJc3RkCXI0LFBBQ0FDVVJSRU5UKHIxMykKKwogCS8qIERvIHZlcnkgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9ucywgaW5jbHVkaW5nIGluaXRpYWwgaGFzaCB0YWJsZSwKIAkgKiBzdGFiIGFuZCBzbGIgc2V0dXAgYmVmb3JlIHdlIHR1cm4gb24gcmVsb2NhdGlvbi4JKi8KIApAQCAtMTUwMywxMCArMTUzOCw2IEBACiAJbGkJcjAsMAogCXN0ZHUJcjAsLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIxKQogCi0JLyogcHRyIHRvIGN1cnJlbnQgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjQsIGluaXRfdGFzaykKLQlzdGQJcjQsUEFDQUNVUlJFTlQocjEzKQotCiAJLyogTG9hZCB0aGUgVE9DICovCiAJbGQJcjIsUEFDQVRPQyhyMTMpCiAJc3RkCXIxLFBBQ0FLU0FWRShyMTMpCkBAIC0xNTIwLDE1ICsxNTUxLDE0IEBACiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiBCRUdJTl9GV19GVFJfU0VDVElPTgogCW1mbXNyCXI1Ci0Jb3JpCXI1LHI1LE1TUl9FRQkJLyogSGFyZCBFbmFibGVkICovCisJb3JpCXI1LHI1LE1TUl9FRQkJLyogSGFyZCBFbmFibGVkIG9uIGlTZXJpZXMqLwogCW10bXNyZAlyNQorCWxpCXI1LDEKIEVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCiAjZW5kaWYKLUJFR0lOX0ZXX0ZUUl9TRUNUSU9OCi0Jc3RiCXI1LFBBQ0FIQVJESVJRRU4ocjEzKQotRU5EX0ZXX0ZUUl9TRUNUSU9OX0lGQ0xSKEZXX0ZFQVRVUkVfSVNFUklFUykKKwlzdGIJcjUsUEFDQUhBUkRJUlFFTihyMTMpCS8qIEhhcmQgRGlzYWJsZWQgb24gb3RoZXJzICovCiAKLQlibCAuc3RhcnRfa2VybmVsCisJYmwJLnN0YXJ0X2tlcm5lbAogCiAJLyogTm90IHJlYWNoZWQgKi8KIAlCVUdfT1BDT0RFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMKaW5kZXggZjc0NTgzOS4uM2M5NDUyZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUwpAQCAtMzMyLDggKzMzMiwxOCBAQAogCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJLyogLi4uLmFuZCBnZXQgdGhlIHB0ZSBhZGRyZXNzICovCiAJbHd6CXIxMCwgMChyMTEpCS8qIEdldCB0aGUgcHRlICovCiAKKyNpZmRlZiBDT05GSUdfU1dBUAorCS8qIGRvIG5vdCBzZXQgdGhlIF9QQUdFX0FDQ0VTU0VEIGJpdCBvZiBhIG5vbi1wcmVzZW50IHBhZ2UgKi8KKwlhbmRpLglyMTEsIHIxMCwgX1BBR0VfUFJFU0VOVAorCWJlcQk0ZgorCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKKwltZnNwcglyMTEsIFNQUk5fTURfVFdDCS8qIGdldCB0aGUgcHRlIGFkZHJlc3MgYWdhaW4gKi8KKwlzdHcJcjEwLCAwKHIxMSkKKzQ6CisjZWxzZQogCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKIAlzdHcJcjEwLCAwKHIxMSkKKyNlbmRpZgogCiAJLyogVGhlIExpbnV4IFBURSB3b24ndCBnbyBleGFjdGx5IGludG8gdGhlIE1NVSBUTEIuCiAJICogU29mdHdhcmUgaW5kaWNhdG9yIGJpdHMgMjEsIDIyIGFuZCAyOCBtdXN0IGJlIGNsZWFyLgpAQCAtMzk4LDggKzQwOCwxNyBAQAogCURPXzh4eF9DUFU2KDB4M2I4MCwgcjMpCiAJbXRzcHIJU1BSTl9NRF9UV0MsIHIxMQogCi0JbWZzcHIJcjExLCBTUFJOX01EX1RXQwkvKiBnZXQgdGhlIHB0ZSBhZGRyZXNzIGFnYWluICovCisjaWZkZWYgQ09ORklHX1NXQVAKKwkvKiBkbyBub3Qgc2V0IHRoZSBfUEFHRV9BQ0NFU1NFRCBiaXQgb2YgYSBub24tcHJlc2VudCBwYWdlICovCisJYW5kaS4JcjExLCByMTAsIF9QQUdFX1BSRVNFTlQKKwliZXEJNGYKIAlvcmkJcjEwLCByMTAsIF9QQUdFX0FDQ0VTU0VECis0OgorCS8qIGFuZCB1cGRhdGUgcHRlIGluIHRhYmxlICovCisjZWxzZQorCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKKyNlbmRpZgorCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJLyogZ2V0IHRoZSBwdGUgYWRkcmVzcyBhZ2FpbiAqLwogCXN0dwlyMTAsIDAocjExKQogCiAJLyogVGhlIExpbnV4IFBURSB3b24ndCBnbyBleGFjdGx5IGludG8gdGhlIE1NVSBUTEIuCkBAIC01MDcsNyArNTI2LDE2IEBACiAKIAkvKiBVcGRhdGUgJ2NoYW5nZWQnLCBhbW9uZyBvdGhlcnMuCiAJKi8KKyNpZmRlZiBDT05GSUdfU1dBUAorCW9yaQlyMTAsIHIxMCwgX1BBR0VfRElSVFl8X1BBR0VfSFdXUklURQorCS8qIGRvIG5vdCBzZXQgdGhlIF9QQUdFX0FDQ0VTU0VEIGJpdCBvZiBhIG5vbi1wcmVzZW50IHBhZ2UgKi8KKwlhbmRpLglyMTEsIHIxMCwgX1BBR0VfUFJFU0VOVAorCWJlcQk0ZgorCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKKzQ6CisjZWxzZQogCW9yaQlyMTAsIHIxMCwgX1BBR0VfRElSVFl8X1BBR0VfQUNDRVNTRUR8X1BBR0VfSFdXUklURQorI2VuZGlmCiAJbWZzcHIJcjExLCBTUFJOX01EX1RXQwkJLyogR2V0IHB0ZSBhZGRyZXNzIGFnYWluICovCiAJc3R3CXIxMCwgMChyMTEpCQkvKiBhbmQgdXBkYXRlIHB0ZSBpbiB0YWJsZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IGJhOTM5M2YuLmFlZmFmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCkBAIC01Niw4ICs1NiwxNyBAQAogICogaXMgbmVjZXNzYXJ5IHNpbmNlIHRoZSBNTVUgaXMgYWx3YXlzIG9uLCBmb3IgQm9vay1FIHBhcnRzLCBhbmQgdGhlIHN0YWNrcwogICogYXJlIG9mZnNldCBmcm9tIEtFUk5FTEJBU0UuCiAgKgorICogVGhlcmUgaXMgc29tZSBzcGFjZSBvcHRpbWl6YXRpb24gdG8gYmUgaGFkIGhlcmUgaWYgZGVzaXJlZC4gIEhvd2V2ZXIKKyAqIHRvIGFsbG93IGZvciBhIGNvbW1vbiBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciBkZWJ1ZyBleGNlcHRpb25zIGVpdGhlcgorICogZ29pbmcgdG8gY3JpdGljYWwgb3IgdGhlaXIgb3duIGRlYnVnIGxldmVsIHdlIGFyZW4ndCBjdXJyZW50bHkKKyAqIHByb3ZpZGluZyBjb25maWd1cmF0aW9ucyB0aGF0IG1pY3JvLW9wdGltaXplIHNwYWNlIHVzYWdlLgogICovCi0jZGVmaW5lIEJPT0tFX0VYQ0VQVElPTl9TVEFDS19TSVpFCSg4MTkyKQorI2lmZGVmIENPTkZJR180NHgKKyNkZWZpbmUgTlVNX0VYQ0VQVElPTl9MVkxTCTIKKyNlbHNlCisjZGVmaW5lIE5VTV9FWENFUFRJT05fTFZMUwkzCisjZW5kaWYKKyNkZWZpbmUgQk9PS0VfRVhDRVBUSU9OX1NUQUNLX1NJWkUJKDQwOTYgKiBOVU1fRVhDRVBUSU9OX0xWTFMpCiAKIC8qIENSSVRfU1BSRyBvbmx5IHVzZWQgaW4gY3JpdGljYWwgZXhjZXB0aW9uIGhhbmRsaW5nICovCiAjZGVmaW5lIENSSVRfU1BSRwlTUFJOX1NQUkcyCkBAIC02OCw3ICs3Nyw3IEBACiAjZGVmaW5lIENSSVRfU1RBQ0tfVE9QCQkoZXhjZXB0aW9uX3N0YWNrX3RvcCkKIAogLyogb25seSBvbiBlMjAwIGZvciBub3cgKi8KLSNkZWZpbmUgREVCVUdfU1RBQ0tfVE9QCQkoZXhjZXB0aW9uX3N0YWNrX3RvcCAtIDQwOTYpCisjZGVmaW5lIERFQlVHX1NUQUNLX1RPUAkJKGV4Y2VwdGlvbl9zdGFja190b3AgLSA4MTkyKQogI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc2VwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjEyLDkgKzIyMSw4IEBACiAgKiBzYXZlIChhbmQgbGF0ZXIgcmVzdG9yZSkgdGhlIE1TUiB2aWEgU1BSTl9DU1JSMSwgd2hpY2ggd2lsbCBzdGlsbCBoYXZlCiAgKiB0aGUgTVNSX0RFIGJpdCBzZXQuCiAgKi8KLSNpZmRlZiBDT05GSUdfRTIwMAotI2RlZmluZSBERUJVR19FWENFUFRJT04JCQkJCQkJICAgICAgXAotCVNUQVJUX0VYQ0VQVElPTihEZWJ1Zyk7CQkJCQkJICAgICAgXAorI2RlZmluZSBERUJVR19ERUJVR19FWENFUFRJT04JCQkJCQkgICAgICBcCisJU1RBUlRfRVhDRVBUSU9OKERlYnVnRGVidWcpOwkJCQkJICAgICAgXAogCURFQlVHX0VYQ0VQVElPTl9QUk9MT0c7CQkJCQkJICAgICAgXAogCQkJCQkJCQkJICAgICAgXAogCS8qCQkJCQkJCQkgICAgICBcCkBAIC0yMzQsOCArMjQyLDggQEAKIAljbXBsdwlyMTIscjEwOwkJCQkJCSAgICAgIFwKIAlibHQrCTJmOwkJCS8qIGFkZHIgYmVsb3cgZXhjZXB0aW9uIHZlY3RvcnMgKi8gICAgXAogCQkJCQkJCQkJICAgICAgXAotCWxpcwlyMTAsRGVidWdAaDsJCQkJCQkgICAgICBcCi0Jb3JpCXIxMCxyMTAsRGVidWdAbDsJCQkJCSAgICAgIFwKKwlsaXMJcjEwLERlYnVnRGVidWdAaDsJCQkJCSAgICAgIFwKKwlvcmkJcjEwLHIxMCxEZWJ1Z0RlYnVnQGw7CQkJCQkgICAgICBcCiAJY21wbHcJcjEyLHIxMDsJCQkJCQkgICAgICBcCiAJYmd0KwkyZjsJCQkvKiBhZGRyIGFib3ZlIGV4Y2VwdGlvbiB2ZWN0b3JzICovICAgIFwKIAkJCQkJCQkJCSAgICAgIFwKQEAgLTI2NSw5ICsyNzMsOSBAQAogMjoJbWZzcHIJcjQsU1BSTl9EQlNSOwkJCQkJCSAgICAgIFwKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJCQkgICAgICBcCiAJRVhDX1hGRVJfVEVNUExBVEUoRGVidWdFeGNlcHRpb24sIDB4MjAwMiwgKE1TUl9LRVJORUwgJiB+KE1TUl9NRXxNU1JfREV8TVNSX0NFKSksIE5PQ09QWSwgZGVidWdfdHJhbnNmZXJfdG9faGFuZGxlciwgcmV0X2Zyb21fZGVidWdfZXhjKQotI2Vsc2UKLSNkZWZpbmUgREVCVUdfRVhDRVBUSU9OCQkJCQkJCSAgICAgIFwKLQlTVEFSVF9FWENFUFRJT04oRGVidWcpOwkJCQkJCSAgICAgIFwKKworI2RlZmluZSBERUJVR19DUklUX0VYQ0VQVElPTgkJCQkJCSAgICAgIFwKKwlTVEFSVF9FWENFUFRJT04oRGVidWdDcml0KTsJCQkJCSAgICAgIFwKIAlDUklUSUNBTF9FWENFUFRJT05fUFJPTE9HOwkJCQkJICAgICAgXAogCQkJCQkJCQkJICAgICAgXAogCS8qCQkJCQkJCQkgICAgICBcCkBAIC0yODcsOCArMjk1LDggQEAKIAljbXBsdwlyMTIscjEwOwkJCQkJCSAgICAgIFwKIAlibHQrCTJmOwkJCS8qIGFkZHIgYmVsb3cgZXhjZXB0aW9uIHZlY3RvcnMgKi8gICAgXAogCQkJCQkJCQkJICAgICAgXAotCWxpcwlyMTAsRGVidWdAaDsJCQkJCQkgICAgICBcCi0Jb3JpCXIxMCxyMTAsRGVidWdAbDsJCQkJCSAgICAgIFwKKwlsaXMJcjEwLERlYnVnQ3JpdEBoOwkJCQkJCSAgICAgIFwKKwlvcmkJcjEwLHIxMCxEZWJ1Z0NyaXRAbDsJCQkJCSAgICAgIFwKIAljbXBsdwlyMTIscjEwOwkJCQkJCSAgICAgIFwKIAliZ3QrCTJmOwkJCS8qIGFkZHIgYWJvdmUgZXhjZXB0aW9uIHZlY3RvcnMgKi8gICAgXAogCQkJCQkJCQkJICAgICAgXApAQCAtMzE4LDcgKzMyNiw2IEBACiAyOgltZnNwcglyNCxTUFJOX0RCU1I7CQkJCQkJICAgICAgXAogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKIAlFWENfWEZFUl9URU1QTEFURShEZWJ1Z0V4Y2VwdGlvbiwgMHgyMDAyLCAoTVNSX0tFUk5FTCAmIH4oTVNSX01FfE1TUl9ERXxNU1JfQ0UpKSwgTk9DT1BZLCBjcml0X3RyYW5zZmVyX3RvX2hhbmRsZXIsIHJldF9mcm9tX2NyaXRfZXhjKQotI2VuZGlmCiAKICNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkFHRV9FWENFUFRJT04JCQkJCSAgICAgIFwKIAlTVEFSVF9FWENFUFRJT04oSW5zdHJ1Y3Rpb25TdG9yYWdlKQkJCQkgICAgICBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKaW5kZXggZDljYzJjMi4uNGZmNzQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwpAQCAtNjgsNyArNjgsOSBAQAogCW1yCXIyOSxyNQogCW1yCXIyOCxyNgogCW1yCXIyNyxyNworCWxpCXIyNSwwCQkvKiBwaHlzIGtlcm5lbCBzdGFydCAobG93KSAqLwogCWxpCXIyNCwwCQkvKiBDUFUgbnVtYmVyICovCisJbGkJcjIzLDAJCS8qIHBoeXMga2VybmVsIHN0YXJ0IChoaWdoKSAqLwogCiAvKiBXZSB0cnkgdG8gbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgYm9vdCBsb2FkZXIKICAqIHNldHVwIG9yIHVzZWQgdGhlIFRMQnMuICBXZSBpbnZhbGlkYXRlIGFsbCBtYXBwaW5ncyBmcm9tIHRoZQpAQCAtMTY3LDcgKzE2OSwyOCBAQAogCW10c3ByCVNQUk5fTUFTMCxyNwogCXRsYnJlCiAKLQkvKiBKdXN0IG1vZGlmeSB0aGUgZW50cnkgSUQsIEVQTiBhbmQgUlBOIGZvciB0aGUgdGVtcCBtYXBwaW5nICovCisJLyogZ3JhYiBhbmQgZml4dXAgdGhlIFJQTiAqLworCW1mc3ByCXI2LFNQUk5fTUFTMQkvKiBleHRyYWN0IE1BUzFbU0laRV0gKi8KKwlybHdpbm0JcjYscjYsMjUsMjcsMzAKKwlsaQlyOCwtMQorCWFkZGkJcjYscjYsMTAKKwlzbHcJcjYscjgscjYJLyogY29udmVydCB0byBtYXNrICovCisKKwlibAkxZgkJLyogRmluZCBvdXIgYWRkcmVzcyAqLworMToJbWZscglyNworCisJbWZzcHIJcjgsU1BSTl9NQVMzCisjaWZkZWYgQ09ORklHX1BIWVNfNjRCSVQKKwltZnNwcglyMjMsU1BSTl9NQVM3CisjZW5kaWYKKwlhbmQJcjgscjYscjgKKwlzdWJmaWMJcjkscjYsLTQwOTYKKwlhbmQJcjkscjkscjcKKworCW9yCXIyNSxyOCxyOQorCW9yaQlyOCxyMjUsKE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSKQorCisJLyogSnVzdCBtb2RpZnkgdGhlIGVudHJ5IElEIGFuZCBFUE4gZm9yIHRoZSB0ZW1wIG1hcHBpbmcgKi8KIAlsaXMJcjcsMHgxMDAwCS8qIFNldCBNQVMwKFRMQlNFTCkgPSAxICovCiAJcmx3aW1pCXI3LHI1LDE2LDQsMTUJLyogU2V0dXAgTUFTMCA9IFRMQlNFTCB8IEVTRUwocjUpICovCiAJbXRzcHIJU1BSTl9NQVMwLHI3CkBAIC0xNzcsMTIgKzIwMCwxMCBAQAogCW9yaQlyNixyNiwoTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspKUBsCiAJbXRzcHIJU1BSTl9NQVMxLHI2CiAJbWZzcHIJcjYsU1BSTl9NQVMyCi0JbGlzCXI3LFBIWVNJQ0FMX1NUQVJUQGgKKwlsaQlyNywwCQkvKiB0ZW1wIEVQTiA9IDAgKi8KIAlybHdpbWkJcjcscjYsMCwyMCwzMQogCW10c3ByCVNQUk5fTUFTMixyNwotCW1mc3ByCXI2LFNQUk5fTUFTMwotCXJsd2ltaQlyNyxyNiwwLDIwLDMxCi0JbXRzcHIJU1BSTl9NQVMzLHI3CisJbXRzcHIJU1BSTl9NQVMzLHI4CiAJdGxid2UKIAogCXhvcmkJcjYscjQsMQpAQCAtMjMyLDggKzI1Myw3IEBACiAJb3JpCXI2LHI2LFBBR0VfT0ZGU0VUQGwKIAlybHdpbWkJcjYscjcsMCwyMCwzMQogCW10c3ByCVNQUk5fTUFTMixyNgotCWxpCXI3LChNQVMzX1NYfE1BUzNfU1d8TUFTM19TUikKLQltdHNwcglTUFJOX01BUzMscjcKKwltdHNwcglTUFJOX01BUzMscjgKIAl0bGJ3ZQogCiAvKiA3LiBKdW1wIHRvIEtFUk5FTEJBU0UgbWFwcGluZyAqLwpAQCAtMjgzLDcgKzMwMywxMCBAQAogCVNFVF9JVk9SKDEyLCBXYXRjaGRvZ1RpbWVyKTsKIAlTRVRfSVZPUigxMywgRGF0YVRMQkVycm9yKTsKIAlTRVRfSVZPUigxNCwgSW5zdHJ1Y3Rpb25UTEJFcnJvcik7Ci0JU0VUX0lWT1IoMTUsIERlYnVnKTsKKwlTRVRfSVZPUigxNSwgRGVidWdEZWJ1Zyk7CisjaWYgZGVmaW5lZChDT05GSUdfRTUwMCkKKwlTRVRfSVZPUigxNSwgRGVidWdDcml0KTsKKyNlbmRpZgogCVNFVF9JVk9SKDMyLCBTUEVVbmF2YWlsYWJsZSk7CiAJU0VUX0lWT1IoMzMsIFNQRUZsb2F0aW5nUG9pbnREYXRhKTsKIAlTRVRfSVZPUigzNCwgU1BFRmxvYXRpbmdQb2ludFJvdW5kKTsKQEAgLTcxOCw3ICs3NDEsMTAgQEAKIAogCiAJLyogRGVidWcgSW50ZXJydXB0ICovCi0JREVCVUdfRVhDRVBUSU9OCisJREVCVUdfREVCVUdfRVhDRVBUSU9OCisjaWYgZGVmaW5lZChDT05GSUdfRTUwMCkKKwlERUJVR19DUklUX0VYQ0VQVElPTgorI2VuZGlmCiAKIC8qCiAgKiBMb2NhbCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKaW5kZXggMmY1MGJiNS4uOTk3MTE1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCQlyZXQgPSBpYm1lYnVzX2NyZWF0ZV9kZXZpY2UoY2hpbGQpOwogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIGRldmljZSAoJWkpIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisJCQkgICAgICAgX19mdW5jX18sIHJldCk7CiAJCQlvZl9ub2RlX3B1dChjaGlsZCk7CiAJCQlicmVhazsKIAkJfQpAQCAtMjY5LDcgKzI2OSw3IEBACiAJaWYgKGJ1c19maW5kX2RldmljZSgmaWJtZWJ1c19idXNfdHlwZSwgTlVMTCwgcGF0aCwKIAkJCSAgICBpYm1lYnVzX21hdGNoX3BhdGgpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBoYXMgYWxyZWFkeSBiZWVuIHByb2JlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGF0aCk7CisJCSAgICAgICBfX2Z1bmNfXywgcGF0aCk7CiAJCXJjID0gLUVFWElTVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjc5LDcgKzI3OSw3IEBACiAJCW9mX25vZGVfcHV0KGRuKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbm8gc3VjaCBkZXZpY2Ugbm9kZTogJXNcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHBhdGgpOworCQkgICAgICAgX19mdW5jX18sIHBhdGgpOwogCQlyYyA9IC1FTk9ERVY7CiAJfQogCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkJcmV0dXJuIGNvdW50OwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBub3Qgb24gdGhlIGJ1c1xuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGF0aCk7CisJCSAgICAgICBfX2Z1bmNfXywgcGF0aCk7CiAKIAkJa2ZyZWUocGF0aCk7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzM3LDE0ICszMzcsMTQgQEAKIAllcnIgPSBvZl9idXNfdHlwZV9pbml0KCZpYm1lYnVzX2J1c190eXBlLCAiaWJtZWJ1cyIpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElCTSBlQnVzLlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZpYm1lYnVzX2J1c19kZXZpY2UpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRldmljZV9yZWdpc3RlciByZXR1cm5lZCAlaVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJICAgICAgIF9fZnVuY19fLCBlcnIpOwogCQlidXNfdW5yZWdpc3RlcigmaWJtZWJ1c19idXNfdHlwZSk7CiAKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwppbmRleCA4ZjFmNGU1Li4wYzY2MzY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAl1bnNpZ25lZCBpbnQgb3JkZXI7CiAKIAlpZiAoIXRibCB8fCAhdGJsLT5pdF9tYXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXhwZWN0ZWQgVENFIG1hcCBmb3IgJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXhwZWN0ZWQgVENFIG1hcCBmb3IgJXNcbiIsIF9fZnVuY19fLAogCQkJCW5vZGVfbmFtZSk7CiAJCXJldHVybjsKIAl9CkBAIC01MzAsNyArNTMwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKHRibC0+aXRfc2l6ZS82NCk7IGkrKykgewogCQlpZiAodGJsLT5pdF9tYXBbaV0gIT0gMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuZXhwZWN0ZWQgVENFcyBmb3IgJXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBub2RlX25hbWUpOworCQkJCV9fZnVuY19fLCBub2RlX25hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCBiMGU1ZGViLi40MjU2MTZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCTogOiAiciIgKGVuYWJsZSksICJpIiAob2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzb2Z0X2VuYWJsZWQpKSk7CiB9CiAKLXZvaWQgbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBlbikKK3ZvaWQgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgZW4pCiB7CiAJLyoKIAkgKiBnZXRfcGFjYSgpLT5zb2Z0X2VuYWJsZWQgPSBlbjsKQEAgLTE0Myw3ICsxNDMsNiBAQAogCQkgKi8KIAkJaWYgKGxvY2FsX3BhY2EtPmxwcGFjYV9wdHItPmludF9kd29yZC5hbnlfaW50KQogCQkJaXNlcmllc19oYW5kbGVfaW50ZXJydXB0cygpOwotCQlyZXR1cm47CiAJfQogCiAJLyoKQEAgLTE3NSw2ICsxNzQsNyBAQAogCiAJX19oYXJkX2lycV9lbmFibGUoKTsKIH0KK0VYUE9SVF9TWU1CT0wocmF3X2xvY2FsX2lycV9yZXN0b3JlKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCkBAIC0zMTEsOCArMzExLDIxIEBACiAJCQkJaGFuZGxlciA9ICZfX2RvX0lSUTsKIAkJCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7CiAJCQlpcnF0cC0+ZmxhZ3MgPSAwOworCisJCQkvKiBDb3B5IHRoZSBzb2Z0aXJxIGJpdHMgaW4gcHJlZW1wdF9jb3VudCBzbyB0aGF0IHRoZQorCQkJICogc29mdGlycSBjaGVja3Mgd29yayBpbiB0aGUgaGFyZGlycSBjb250ZXh0LgorCQkJICovCisJCQlpcnF0cC0+cHJlZW1wdF9jb3VudCA9CisJCQkJKGlycXRwLT5wcmVlbXB0X2NvdW50ICYgflNPRlRJUlFfTUFTSykgfAorCQkJCShjdXJ0cC0+cHJlZW1wdF9jb3VudCAmIFNPRlRJUlFfTUFTSyk7CisKIAkJCWNhbGxfaGFuZGxlX2lycShpcnEsIGRlc2MsIGlycXRwLCBoYW5kbGVyKTsKIAkJCWlycXRwLT50YXNrID0gTlVMTDsKKworCisJCQkvKiBTZXQgYW55IGZsYWcgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBvbiB0aGUKKwkJCSAqIGFsdGVybmF0ZSBzdGFjaworCQkJICovCiAJCQlpZiAoaXJxdHAtPmZsYWdzKQogCQkJCXNldF9iaXRzKGlycXRwLT5mbGFncywgJmN1cnRwLT5mbGFncyk7CiAJCX0gZWxzZQpAQCAtMzU4LDcgKzM3MSw3IEBACiAJCW1lbXNldCgodm9pZCAqKXNvZnRpcnFfY3R4W2ldLCAwLCBUSFJFQURfU0laRSk7CiAJCXRwID0gc29mdGlycV9jdHhbaV07CiAJCXRwLT5jcHUgPSBpOwotCQl0cC0+cHJlZW1wdF9jb3VudCA9IFNPRlRJUlFfT0ZGU0VUOworCQl0cC0+cHJlZW1wdF9jb3VudCA9IDA7CiAKIAkJbWVtc2V0KCh2b2lkICopaGFyZGlycV9jdHhbaV0sIDAsIFRIUkVBRF9TSVpFKTsKIAkJdHAgPSBoYXJkaXJxX2N0eFtpXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXNhLWJyaWRnZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pc2EtYnJpZGdlLmMKaW5kZXggZWUxNzJhYS4uMjg5YWYzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pc2EtYnJpZGdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pc2EtYnJpZGdlLmMKQEAgLTgwLDEzICs4MCwxMyBAQAogCSAqCQkJKHNpemUgZGVwZW5kaW5nIG9uIGRldi0+bl9hZGRyX2NlbGxzKQogCSAqICAgY2VsbCA1OgkJdGhlIHNpemUgb2YgdGhlIHJhbmdlCiAJICovCi0JaWYgKChyYW5nZS0+aXNhX2FkZHIuYV9oaSAmJiBJU0FfU1BBQ0VfTUFTSykgIT0gSVNBX1NQQUNFX0lPKSB7CisJaWYgKChyYW5nZS0+aXNhX2FkZHIuYV9oaSAmIElTQV9TUEFDRV9NQVNLKSAhPSBJU0FfU1BBQ0VfSU8pIHsKIAkJcmFuZ2UrKzsKIAkJcmxlbiAtPSBzaXplb2Yoc3RydWN0IGlzYV9yYW5nZSk7CiAJCWlmIChybGVuIDwgc2l6ZW9mKHN0cnVjdCBpc2FfcmFuZ2UpKQogCQkJZ290byBpbnZhbF9yYW5nZTsKIAl9Ci0JaWYgKChyYW5nZS0+aXNhX2FkZHIuYV9oaSAmJiBJU0FfU1BBQ0VfTUFTSykgIT0gSVNBX1NQQUNFX0lPKQorCWlmICgocmFuZ2UtPmlzYV9hZGRyLmFfaGkgJiBJU0FfU1BBQ0VfTUFTSykgIT0gSVNBX1NQQUNFX0lPKQogCQlnb3RvIGludmFsX3JhbmdlOwogCiAJaXNhX2FkZHIgPSByYW5nZS0+aXNhX2FkZHIuYV9sbzsKQEAgLTk5LDcgKzk5LDcgQEAKIAkgKi8KIAlpZiAoKHBjaV9hZGRyICE9IDApIHx8IChpc2FfYWRkciAhPSAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgInVuZXhwZWN0ZWQgaXNhIHRvIHBjaSBtYXBwaW5nOiAlc1xuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNTMzOGU0OC4uYzE3NmM1MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogICogCS0gV2hlbiB0aGUgcHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgcHJvYmUKICAqIAkJY2F1c2VzIHRoZSBoYW5kbGVycyB0byBmaXJlCiAgKi8KLXZvaWQga3JldHByb2JlX3RyYW1wb2xpbmVfaG9sZGVyKHZvaWQpCitzdGF0aWMgdm9pZCBfX3VzZWQga3JldHByb2JlX3RyYW1wb2xpbmVfaG9sZGVyKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlKCIuZ2xvYmFsIGtyZXRwcm9iZV90cmFtcG9saW5lXG4iCiAJCQkia3JldHByb2JlX3RyYW1wb2xpbmU6XG4iCkBAIC0yODQsNyArMjg0LDggQEAKIC8qCiAgKiBDYWxsZWQgd2hlbiB0aGUgcHJvYmUgYXQga3JldHByb2JlIHRyYW1wb2xpbmUgaXMgaGl0CiAgKi8KLWludCBfX2twcm9iZXMgdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCBfX2twcm9iZXMgdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsCisJCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSA9IE5VTEw7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIGVtcHR5X3JwOwpAQCAtNTE3LDEyICs1MTgsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBfX2twcm9iZXMganByb2JlX3JldHVybih2b2lkKQordm9pZCBfX3VzZWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm4odm9pZCkKIHsKIAlhc20gdm9sYXRpbGUoInRyYXAiIDo6OiAibWVtb3J5Iik7CiB9CiAKLXZvaWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpCitzdGF0aWMgdm9pZCBfX3VzZWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpCiB7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCmluZGV4IGRjYjg5YTguLjFmZmFjYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpsb2NhbF9idWZmZXIgPSBrbWFsbG9jKFNQTFBBUl9NQVhMRU5HVEgsIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWxfYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAotCQkgICAgICAgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI0MywxNCArMjQzLDE0IEBACiAJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgIiVzICVzIEVycm9yIGNhbGxpbmcgZ2V0LXN5c3RlbS1wYXJhbWV0ZXIgKDB4JXgpXG4iLAotCQkgICAgICAgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgY2FsbF9zdGF0dXMpOworCQkgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBjYWxsX3N0YXR1cyk7CiAJfSBlbHNlIHsKIAkJaW50IHNwbHBhcl9zdHJsZW47CiAJCWludCBpZHgsIHdfaWR4OwogCQljaGFyICp3b3JrYnVmZmVyID0ga3phbGxvYyhTUExQQVJfTUFYTEVOR1RILCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF3b3JrYnVmZmVyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkIFxuIiwKLQkJCSAgICAgICBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCQkgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCQlrZnJlZShsb2NhbF9idWZmZXIpOwogCQkJcmV0dXJuOwogCQl9CkBAIC00ODQsMTAgKzQ4NCwxMCBAQAogCWN1cnJlbnRfd2VpZ2h0ID0gKHJlc291cmNlID4+IDUgKiA4KSAmIDB4RkY7CiAKIAlwcl9kZWJ1ZygiJXM6IGN1cnJlbnRfZW50aXRsZWQgPSAlbHUsIGN1cnJlbnRfd2VpZ2h0ID0gJXVcbiIsCi0JCSBfX0ZVTkNUSU9OX18sIGN1cnJlbnRfZW50aXRsZWQsIGN1cnJlbnRfd2VpZ2h0KTsKKwkJIF9fZnVuY19fLCBjdXJyZW50X2VudGl0bGVkLCBjdXJyZW50X3dlaWdodCk7CiAKIAlwcl9kZWJ1ZygiJXM6IG5ld19lbnRpdGxlZCA9ICVsdSwgbmV3X3dlaWdodCA9ICV1XG4iLAotCQkgX19GVU5DVElPTl9fLCAqbmV3X2VudGl0bGVkX3B0ciwgKm5ld193ZWlnaHRfcHRyKTsKKwkJIF9fZnVuY19fLCAqbmV3X2VudGl0bGVkX3B0ciwgKm5ld193ZWlnaHRfcHRyKTsKIAogCXJldHZhbCA9IHBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9QUFAsICpuZXdfZW50aXRsZWRfcHRyLAogCQkJCSAgICAqbmV3X3dlaWdodF9wdHIpOwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlY2VpdmVkIHVua25vd24gaHYgcmV0dXJuIGNvZGUgJWxkIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJICAgICAgIF9fZnVuY19fLCByZXR2YWwpOwogCQlyZXR2YWwgPSAtRUlPOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCBjMGM4ZThjLi4yZDIwMmYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMTIsOCArMTIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKIHZvaWQgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKaW5kZXggNWMyZTI1My4uOWQyYzU2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKQEAgLTc4NSw2ICs3ODUsMjEgQEAKIAlvcglyNCxyNCxyNwkjIExTVyB8PSB0MgogCWJscgogCisvKgorICogNjQtYml0IGNvbXBhcmlzb246IF9fdWNtcGRpMih1NjQgYSwgdTY0IGIpCisgKiBSZXR1cm5zIDAgaWYgYSA8IGIsIDEgaWYgYSA9PSBiLCAyIGlmIGEgPiBiLgorICovCitfR0xPQkFMKF9fdWNtcGRpMikKKwljbXBsdwlyMyxyNQorCWxpCXIzLDEKKwlibmUJMWYKKwljbXBsdwlyNCxyNgorCWJlcWxyCisxOglsaQlyMywwCisJYmx0bHIKKwlsaQlyMywyCisJYmxyCisKIF9HTE9CQUwoYWJzKQogCXNyYXdpCXI0LHIzLDMxCiAJeG9yCXIzLHIzLHI0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCmluZGV4IDU1ZjFhMjUuLmFjMTYzYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgotI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3JlZ19zYXZlLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKQEAgLTI1LDEzICsyNCwxMyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX190b2Nfc3RhcnQ7CiAKIC8qCi0gKiBpU2VyaWVzIHN0cnVjdHVyZSB3aGljaCB0aGUgaHlwZXJ2aXNvciBrbm93cyBhYm91dCAtIHRoaXMgc3RydWN0dXJlCisgKiBUaGUgc3RydWN0dXJlIHdoaWNoIHRoZSBoeXBlcnZpc29yIGtub3dzIGFib3V0IC0gdGhpcyBzdHJ1Y3R1cmUKICAqIHNob3VsZCBub3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LiAgVGhlIHZwYV9pbml0L3JlZ2lzdGVyX3ZwYSBjYWxsCiAgKiBpcyBub3cga25vd24gdG8gZmFpbCBpZiB0aGUgbHBwYWNhIHN0cnVjdHVyZSBjcm9zc2VzIGEgcGFnZQotICogYm91bmRhcnkuICBUaGUgbHBwYWNhIGlzIGFsc28gdXNlZCBvbiBQT1dFUjUgcFNlcmllcyBib3hlcy4gIFRoZQotICogbHBwYWNhIGlzIDY0MCBieXRlcyBsb25nLCBhbmQgY2Fubm90IHJlYWRpbHkgY2hhbmdlIHNpbmNlIHRoZQotICogaHlwZXJ2aXNvciBrbm93cyBpdHMgbGF5b3V0LCBzbyBhIDFrQiBhbGlnbm1lbnQgd2lsbCBzdWZmaWNlIHRvCi0gKiBlbnN1cmUgdGhhdCBpdCBkb2Vzbid0IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAqIGJvdW5kYXJ5LiAgVGhlIGxwcGFjYSBpcyBhbHNvIHVzZWQgb24gbGVnYWN5IGlTZXJpZXMgYW5kIFBPV0VSNQorICogcFNlcmllcyBib3hlcy4gIFRoZSBscHBhY2EgaXMgNjQwIGJ5dGVzIGxvbmcsIGFuZCBjYW5ub3QgcmVhZGlseQorICogY2hhbmdlIHNpbmNlIHRoZSBoeXBlcnZpc29yIGtub3dzIGl0cyBsYXlvdXQsIHNvIGEgMWtCIGFsaWdubWVudAorICogd2lsbCBzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXNuJ3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LgogICovCiBzdHJ1Y3QgbHBwYWNhIGxwcGFjYVtdID0gewogCVswIC4uLiAoTlJfQ1BVUy0xKV0gPSB7CkBAIC02NiwzMiArNjUsMTcgQEAKICAqIHByb2Nlc3NvcnMuICBUaGUgcHJvY2Vzc29yIFZQRCBhcnJheSBuZWVkcyBvbmUgZW50cnkgcGVyIHBoeXNpY2FsCiAgKiBwcm9jZXNzb3IgKG5vdCB0aHJlYWQpLgogICovCi0jZGVmaW5lIFBBQ0FfSU5JVF9DT01NT04obnVtYmVyKQkJCQkJICAgIFwKKyNkZWZpbmUgUEFDQV9JTklUKG51bWJlcikJCQkJCQkgICAgXAorewkJCQkJCQkJCSAgICBcCiAJLmxwcGFjYV9wdHIgPSAmbHBwYWNhW251bWJlcl0sCQkJCQkgICAgXAogCS5sb2NrX3Rva2VuID0gMHg4MDAwLAkJCQkJCSAgICBcCiAJLnBhY2FfaW5kZXggPSAobnVtYmVyKSwJCS8qIFBhY2EgSW5kZXggKi8JCSAgICBcCiAJLmtlcm5lbF90b2MgPSAodW5zaWduZWQgbG9uZykoJl9fdG9jX3N0YXJ0KSArIDB4ODAwMFVMLAkJICAgIFwKIAkuaHdfY3B1X2lkID0gMHhmZmZmLAkJCQkJCSAgICBcCi0JLnNsYl9zaGFkb3dfcHRyID0gJnNsYl9zaGFkb3dbbnVtYmVyXSwKLQotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotI2RlZmluZSBQQUNBX0lOSVRfSVNFUklFUyhudW1iZXIpCQkJCQkgICAgXAotCS5yZWdfc2F2ZV9wdHIgPSAmaXNlcmllc19yZWdfc2F2ZVtudW1iZXJdLAotCi0jZGVmaW5lIFBBQ0FfSU5JVChudW1iZXIpCQkJCQkJICAgIFwKLXsJCQkJCQkJCQkgICAgXAotCVBBQ0FfSU5JVF9DT01NT04obnVtYmVyKQkJCQkJICAgIFwKLQlQQUNBX0lOSVRfSVNFUklFUyhudW1iZXIpCQkJCQkgICAgXAorCS5zbGJfc2hhZG93X3B0ciA9ICZzbGJfc2hhZG93W251bWJlcl0sCQkJCSAgICBcCisJLl9fY3VycmVudCA9ICZpbml0X3Rhc2ssCQkJCQkgICAgXAogfQogCi0jZWxzZQotI2RlZmluZSBQQUNBX0lOSVQobnVtYmVyKQkJCQkJCSAgICBcCi17CQkJCQkJCQkJICAgIFwKLQlQQUNBX0lOSVRfQ09NTU9OKG51bWJlcikJCQkJCSAgICBcCi19Ci0KLSNlbmRpZgotCiBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgcGFjYVtdID0gewogCVBBQ0FfSU5JVCgwKSwKICNpZiBOUl9DUFVTID4gMQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCA5ODBmZTMyLi4wNjNjZGQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtNzQ4LDcgKzc0OCwxMyBAQAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2UgKyBpOwogCQlpZiAoIXJlcy0+ZmxhZ3MpCiAJCQljb250aW51ZTsKLQkJaWYgKHJlcy0+ZW5kID09IDB4ZmZmZmZmZmYpIHsKKwkJLyogT24gcGxhdGZvcm1zIHRoYXQgaGF2ZSBQUENfUENJX1BST0JFX09OTFkgc2V0LCB3ZSBkb24ndAorCQkgKiBjb25zaWRlciAwIGFzIGFuIHVuYXNzaWduZWQgQkFSIHZhbHVlLiBJdCdzIHRlY2huaWNhbGx5CisJCSAqIGEgdmFsaWQgdmFsdWUsIGJ1dCBsaW51eCBkb2Vzbid0IGxpa2UgaXQuLi4gc28gd2hlbiB3ZSBjYW4KKwkJICogcmUtYXNzaWduIHRoaW5ncywgd2UgZG8gc28sIGJ1dCBpZiB3ZSBjYW4ndCwgd2Uga2VlcCBpdAorCQkgKiBhcm91bmQgYW5kIGhvcGUgZm9yIHRoZSBiZXN0Li4uCisJCSAqLworCQlpZiAocmVzLT5zdGFydCA9PSAwICYmICEocHBjX3BjaV9mbGFncyAmIFBQQ19QQ0lfUFJPQkVfT05MWSkpIHsKIAkJCXByX2RlYnVnKCJQQ0k6JXMgUmVzb3VyY2UgJWQgJTAxNmxseC0lMDE2bGx4IFsleF0gaXMgdW5hc3NpZ25lZFxuIiwKIAkJCQkgcGNpX25hbWUoZGV2KSwgaSwKIAkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LApAQCAtMTE1NSw0MSArMTE2MSw5IEBACiAKIGludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCiB7Ci0JdTE2IGNtZCwgb2xkX2NtZDsKLQlpbnQgaWR4OwotCXN0cnVjdCByZXNvdXJjZSAqcjsKLQogCWlmIChwcGNfbWQucGNpYmlvc19lbmFibGVfZGV2aWNlX2hvb2spCiAJCWlmIChwcGNfbWQucGNpYmlvc19lbmFibGVfZGV2aWNlX2hvb2soZGV2KSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0Jb2xkX2NtZCA9IGNtZDsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpZHgrKykgewotCQkvKiBPbmx5IHNldCB1cCB0aGUgcmVxdWVzdGVkIHN0dWZmICovCi0JCWlmICghKG1hc2sgJiAoMSA8PCBpZHgpKSkKLQkJCWNvbnRpbnVlOwotCQlyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKLQkJaWYgKCEoci0+ZmxhZ3MgJiAoSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNKSkpCi0JCQljb250aW51ZTsKLQkJaWYgKChpZHggPT0gUENJX1JPTV9SRVNPVVJDRSkgJiYKLQkJCQkoIShyLT5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSkpKQotCQkJY29udGludWU7Ci0JCWlmIChyLT5wYXJlbnQgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IERldmljZSAlcyBub3QgYXZhaWxhYmxlIGJlY2F1c2UiCi0JCQkgICAgICAgIiBvZiByZXNvdXJjZSBjb2xsaXNpb25zXG4iLCBwY2lfbmFtZShkZXYpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfSU87Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQl9Ci0JaWYgKGNtZCAhPSBvbGRfY21kKSB7Ci0JCXByaW50aygiUENJOiBFbmFibGluZyBkZXZpY2UgJXMgKCUwNHggLT4gJTA0eClcbiIsCi0JCSAgICAgICBwY2lfbmFtZShkZXYpLCBvbGRfY21kLCBjbWQpOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBjaV9lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzayk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjMzIuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjMzIuaAppbmRleCA5MGU1NjI3Li5mZGEwNWUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwYzMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGMzMi5oCkBAIC0xMzUsNCArMTM1LDYgQEAKIAlzdHJ1Y3QgbWNvbnRleHQzMgl1Y19tY29udGV4dDsKIH07CiAKK2V4dGVybiBpbnQgY29weV9zaWdpbmZvX3RvX3VzZXIzMihzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gX191c2VyICpkLCBzaWdpbmZvX3QgKnMpOworCiAjZW5kaWYgIC8qIF9QUEM2NF9QUEMzMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCBhYTlmZjM1Li4wOWZjYjUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00NSwxMCArNDQsNiBAQAogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vZGNyLmg+CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKLUVYUE9SVF9TWU1CT0wobG9jYWxfaXJxX3Jlc3RvcmUpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUFBDMzIKIGV4dGVybiB2b2lkIHRyYW5zZmVyX3RvX2hhbmRsZXIodm9pZCk7CiBleHRlcm4gdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtNzgsNiArNzMsNyBAQAogRVhQT1JUX1NZTUJPTChzdHJjYXQpOwogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwogRVhQT1JUX1NZTUJPTChzdHJjbXApOworRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKIAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKTsKQEAgLTE0OSw2ICsxNDUsOCBAQAogRVhQT1JUX1NZTUJPTChfX2FzaHJkaTMpOwogRVhQT1JUX1NZTUJPTChfX2FzaGxkaTMpOwogRVhQT1JUX1NZTUJPTChfX2xzaHJkaTMpOworaW50IF9fdWNtcGRpMih1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CitFWFBPUlRfU1lNQk9MKF9fdWNtcGRpMik7CiAjZW5kaWYKIAogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwpAQCAtMTg5LDMgKzE4Nyw0IEBACiBFWFBPUlRfU1lNQk9MKF9fbXRkY3IpOwogRVhQT1JUX1NZTUJPTChfX21mZGNyKTsKICNlbmRpZgorRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCA0ODQ2YmY1Li43MDMxMDBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjQxLDggKzI0MSwxMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGN1cnJlbnRfZGFicik7CisKIGludCBzZXRfZGFicih1bnNpZ25lZCBsb25nIGRhYnIpCiB7CisJX19nZXRfY3B1X3ZhcihjdXJyZW50X2RhYnIpID0gZGFicjsKKwogI2lmZGVmIENPTkZJR19QUENfTUVSR0UJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKHBwY19tZC5zZXRfZGFicikKIAkJcmV0dXJuIHBwY19tZC5zZXRfZGFicihkYWJyKTsKQEAgLTI1OSw4ICsyNjMsNiBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV91c2FnZSwgY3B1X3VzYWdlX2FycmF5KTsKICNlbmRpZgogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgY3VycmVudF9kYWJyKTsKLQogc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJc3RydWN0IHRhc2tfc3RydWN0ICpuZXcpCiB7CkBAIC0zMjUsMTAgKzMyNyw4IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLQlpZiAodW5saWtlbHkoX19nZXRfY3B1X3ZhcihjdXJyZW50X2RhYnIpICE9IG5ldy0+dGhyZWFkLmRhYnIpKSB7CisJaWYgKHVubGlrZWx5KF9fZ2V0X2NwdV92YXIoY3VycmVudF9kYWJyKSAhPSBuZXctPnRocmVhZC5kYWJyKSkKIAkJc2V0X2RhYnIobmV3LT50aHJlYWQuZGFicik7Ci0JCV9fZ2V0X2NwdV92YXIoY3VycmVudF9kYWJyKSA9IG5ldy0+dGhyZWFkLmRhYnI7Ci0JfQogCiAJbmV3X3RocmVhZCA9ICZuZXctPnRocmVhZDsKIAlvbGRfdGhyZWFkID0gJmN1cnJlbnQtPnRocmVhZDsKQEAgLTM1Myw2ICszNTMsMTIgQEAKIAlhY2NvdW50X3Byb2Nlc3NfdnRpbWUoY3VycmVudCk7CiAJY2FsY3VsYXRlX3N0ZWFsX3RpbWUoKTsKIAorCS8qCisJICogV2UgY2FuJ3QgdGFrZSBhIFBNVSBleGNlcHRpb24gaW5zaWRlIF9zd2l0Y2goKSBzaW5jZSB0aGVyZSBpcyBhCisJICogd2luZG93IHdoZXJlIHRoZSBrZXJuZWwgc3RhY2sgU0xCIGFuZCB0aGUga2VybmVsIHN0YWNrIGFyZSBvdXQKKwkgKiBvZiBzeW5jLiBIYXJkIGRpc2FibGUgaGVyZS4KKwkgKi8KKwloYXJkX2lycV9kaXNhYmxlKCk7CiAJbGFzdCA9IF9zd2l0Y2gob2xkX3RocmVhZCwgbmV3X3RocmVhZCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC04NjIsMTEgKzg2OCw2IEBACiAJZmx1c2hfc3BlX3RvX3RocmVhZChjdXJyZW50KTsKIAllcnJvciA9IGRvX2V4ZWN2ZShmaWxlbmFtZSwgKGNoYXIgX191c2VyICogX191c2VyICopIGExLAogCQkJICAoY2hhciBfX3VzZXIgKiBfX3VzZXIgKikgYTIsIHJlZ3MpOwotCWlmIChlcnJvciA9PSAwKSB7Ci0JCXRhc2tfbG9jayhjdXJyZW50KTsKLQkJY3VycmVudC0+cHRyYWNlICY9IH5QVF9EVFJBQ0U7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCX0KIAlwdXRuYW1lKGZpbGVuYW1lKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CkBAIC05MTMsMjAgKzkxNCw2IEBACiAJcmV0dXJuIHZhbGlkX2lycV9zdGFjayhzcCwgcCwgbmJ5dGVzKTsKIH0KIAotI2lmZGVmIENPTkZJR19QUEM2NAotI2RlZmluZSBNSU5fU1RBQ0tfRlJBTUUJMTEyCS8qIHNhbWUgYXMgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQsIGluIGZhY3QgKi8KLSNkZWZpbmUgRlJBTUVfTFJfU0FWRQkyCi0jZGVmaW5lIElOVF9GUkFNRV9TSVpFCShzaXplb2Yoc3RydWN0IHB0X3JlZ3MpICsgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyAyODgpCi0jZGVmaW5lIFJFR1NfTUFSS0VSCTB4NzI2NTY3NzM2ODY1NzI2NXVsCi0jZGVmaW5lIEZSQU1FX01BUktFUgkxMgotI2Vsc2UKLSNkZWZpbmUgTUlOX1NUQUNLX0ZSQU1FCTE2Ci0jZGVmaW5lIEZSQU1FX0xSX1NBVkUJMQotI2RlZmluZSBJTlRfRlJBTUVfU0laRQkoc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSArIFNUQUNLX0ZSQU1FX09WRVJIRUFEKQotI2RlZmluZSBSRUdTX01BUktFUgkweDcyNjU2NzczdWwKLSNkZWZpbmUgRlJBTUVfTUFSS0VSCTIKLSNlbmRpZgotCiBFWFBPUlRfU1lNQk9MKHZhbGlkYXRlX3NwKTsKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtOTM4LDE1ICs5MjUsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAlzcCA9IHAtPnRocmVhZC5rc3A7Ci0JaWYgKCF2YWxpZGF0ZV9zcChzcCwgcCwgTUlOX1NUQUNLX0ZSQU1FKSkKKwlpZiAoIXZhbGlkYXRlX3NwKHNwLCBwLCBTVEFDS19GUkFNRV9PVkVSSEVBRCkpCiAJCXJldHVybiAwOwogCiAJZG8gewogCQlzcCA9ICoodW5zaWduZWQgbG9uZyAqKXNwOwotCQlpZiAoIXZhbGlkYXRlX3NwKHNwLCBwLCBNSU5fU1RBQ0tfRlJBTUUpKQorCQlpZiAoIXZhbGlkYXRlX3NwKHNwLCBwLCBTVEFDS19GUkFNRV9PVkVSSEVBRCkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKGNvdW50ID4gMCkgewotCQkJaXAgPSAoKHVuc2lnbmVkIGxvbmcgKilzcClbRlJBTUVfTFJfU0FWRV07CisJCQlpcCA9ICgodW5zaWduZWQgbG9uZyAqKXNwKVtTVEFDS19GUkFNRV9MUl9TQVZFXTsKIAkJCWlmICghaW5fc2NoZWRfZnVuY3Rpb25zKGlwKSkKIAkJCQlyZXR1cm4gaXA7CiAJCX0KQEAgLTk3NSwxMiArOTYyLDEyIEBACiAJbHIgPSAwOwogCXByaW50aygiQ2FsbCBUcmFjZTpcbiIpOwogCWRvIHsKLQkJaWYgKCF2YWxpZGF0ZV9zcChzcCwgdHNrLCBNSU5fU1RBQ0tfRlJBTUUpKQorCQlpZiAoIXZhbGlkYXRlX3NwKHNwLCB0c2ssIFNUQUNLX0ZSQU1FX09WRVJIRUFEKSkKIAkJCXJldHVybjsKIAogCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIHNwOwogCQluZXdzcCA9IHN0YWNrWzBdOwotCQlpcCA9IHN0YWNrW0ZSQU1FX0xSX1NBVkVdOworCQlpcCA9IHN0YWNrW1NUQUNLX0ZSQU1FX0xSX1NBVkVdOwogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICIsIHNwLCBpcCk7CiAJCQlwcmludF9zeW1ib2woIiVzIiwgaXApOwpAQCAtOTk0LDggKzk4MSw4IEBACiAJCSAqIFNlZSBpZiB0aGlzIGlzIGFuIGV4Y2VwdGlvbiBmcmFtZS4KIAkJICogV2UgbG9vayBmb3IgdGhlICJyZWdzaGVyZSIgbWFya2VyIGluIHRoZSBjdXJyZW50IGZyYW1lLgogCQkgKi8KLQkJaWYgKHZhbGlkYXRlX3NwKHNwLCB0c2ssIElOVF9GUkFNRV9TSVpFKQotCQkgICAgJiYgc3RhY2tbRlJBTUVfTUFSS0VSXSA9PSBSRUdTX01BUktFUikgeworCQlpZiAodmFsaWRhdGVfc3Aoc3AsIHRzaywgU1RBQ0tfSU5UX0ZSQU1FX1NJWkUpCisJCSAgICAmJiBzdGFja1tTVEFDS19GUkFNRV9NQVJLRVJdID09IFNUQUNLX0ZSQU1FX1JFR1NfTUFSS0VSKSB7CiAJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKQogCQkJCShzcCArIFNUQUNLX0ZSQU1FX09WRVJIRUFEKTsKIAkJCXByaW50aygiLS0tIEV4Y2VwdGlvbjogJWx4IiwgcmVncy0+dHJhcCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDhiNWVmYmMuLjNiZmU3ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC0zMSwxMCArMzEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9waHlwX2R1bXAuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KIAogI2lmZGVmIERFQlVHCkBAIC00MzYsNyArNDM3LDcgQEAKICAqIFRoZSBkZXZpY2UgdHJlZSBtYXkgYmUgYWxsb2NhdGVkIGJleW9uZCBvdXIgbWVtb3J5IGxpbWl0LCBvciBpbnNpZGUgdGhlCiAgKiBjcmFzaCBrZXJuZWwgcmVnaW9uIGZvciBrZHVtcC4gSWYgc28sIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkuCiAgKi8KLXN0YXRpYyB2b2lkIG1vdmVfZGV2aWNlX3RyZWUodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBtb3ZlX2RldmljZV90cmVlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZTsKIAl2b2lkICpwOwpAQCAtODY1LDEyICs4NjYsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGR0X21lbV9uZXh0X2NlbGwoaW50IHMsIGNlbGxfdCAqKmNlbGxwKQorc3RhdGljIHU2NCBfX2luaXQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgY2VsbF90ICoqY2VsbHApCiB7CiAJY2VsbF90ICpwID0gKmNlbGxwOwogCiAJKmNlbGxwID0gcCArIHM7Ci0JcmV0dXJuIG9mX3JlYWRfdWxvbmcocCwgcyk7CisJcmV0dXJuIG9mX3JlYWRfbnVtYmVyKHAsIHMpOwogfQogCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCkBAIC04ODMsOCArODg0LDggQEAKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSkKIHsKIAljZWxsX3QgKmRtLCAqbHM7Ci0JdW5zaWduZWQgbG9uZyBsLCBuOwotCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZSwgbG1iX3NpemUsIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbCwgbiwgZmxhZ3M7CisJdTY0IGJhc2UsIHNpemUsIGxtYl9zaXplOwogCiAJbHMgPSAoY2VsbF90ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGxtYi1zaXplIiwgJmwpOwogCWlmIChscyA9PSBOVUxMIHx8IGwgPCBkdF9yb290X3NpemVfY2VsbHMgKiBzaXplb2YoY2VsbF90KSkKQEAgLTk1OSwxNCArOTYwLDE1IEBACiAJICAgIHVuYW1lLCBsLCByZWdbMF0sIHJlZ1sxXSwgcmVnWzJdLCByZWdbM10pOwogCiAJd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgewotCQl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemU7CisJCXU2NCBiYXNlLCBzaXplOwogCiAJCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJnJlZyk7CiAJCXNpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnJlZyk7CiAKIAkJaWYgKHNpemUgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQlEQkcoIiAtICVseCAsICAlbHhcbiIsIGJhc2UsIHNpemUpOworCQlEQkcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKICNpZmRlZiBDT05GSUdfUFBDNjQKIAkJaWYgKGlvbW11X2lzX29mZikgewogCQkJaWYgKGJhc2UgPj0gMHg4MDAwMDAwMHVsKQpAQCAtMTAzOSw2ICsxMDQxLDg3IEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKKy8qKgorICogcGh5cF9kdW1wX2NhbGN1bGF0ZV9yZXNlcnZlX3NpemUoKSAtIHJlc2VydmUgdmFyaWFibGUgYm9vdCBhcmVhIDUlIG9yIGFyZworICoKKyAqIEZ1bmN0aW9uIHRvIGZpbmQgdGhlIGxhcmdlc3Qgc2l6ZSB3ZSBuZWVkIHRvIHJlc2VydmUKKyAqIGR1cmluZyBlYXJseSBib290IHByb2Nlc3MuCisgKgorICogSXQgZWl0aGVyIGxvb2tzIGZvciBib290IHBhcmFtIGFuZCByZXR1cm5zIHRoYXQgT1IKKyAqIHJldHVybnMgbGFyZ2VyIG9mIDI1NiBvciA1JSByb3VuZGVkIGRvd24gdG8gbXVsdGlwbGVzIG9mIDI1Nk1CLgorICoKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBoeXBfZHVtcF9jYWxjdWxhdGVfcmVzZXJ2ZV9zaXplKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAocGh5cF9kdW1wX2luZm8tPnJlc2VydmVfYm9vdHZhcikKKwkJcmV0dXJuIHBoeXBfZHVtcF9pbmZvLT5yZXNlcnZlX2Jvb3R2YXI7CisKKwkvKiBkaXZpZGUgYnkgMjAgdG8gZ2V0IDUlIG9mIHZhbHVlICovCisJdG1wID0gbG1iX2VuZF9vZl9EUkFNKCk7CisJZG9fZGl2KHRtcCwgMjApOworCisJLyogcm91bmQgaXQgZG93biBpbiBtdWx0aXBsZXMgb2YgMjU2ICovCisJdG1wID0gdG1wICYgfjB4MEZGRkZGRkZVTDsKKworCXJldHVybiAodG1wID4gUEhZUF9EVU1QX1JNUl9FTkQgPyB0bXAgOiBQSFlQX0RVTVBfUk1SX0VORCk7Cit9CisKKy8qKgorICogcGh5cF9kdW1wX3Jlc2VydmVfbWVtKCkgLSByZXNlcnZlIGFsbCBub3QteWV0LWR1bXBlZCBtbWVtb3J5CisgKgorICogVGhpcyByb3V0aW5lIG1heSByZXNlcnZlIG1lbW9yeSByZWdpb25zIGluIHRoZSBrZXJuZWwgb25seQorICogaWYgdGhlIHN5c3RlbSBpcyBzdXBwb3J0ZWQgYW5kIGEgZHVtcCB3YXMgdGFrZW4gaW4gbGFzdAorICogYm9vdCBpbnN0YW5jZSBvciBpZiB0aGUgaGFyZHdhcmUgaXMgc3VwcG9ydGVkIGFuZCB0aGUKKyAqIHNjcmF0Y2ggYXJlYSBuZWVkcyB0byBiZSBzZXR1cC4gSW4gb3RoZXIgaW5zdGFuY2VzIGl0IHJldHVybnMKKyAqIHdpdGhvdXQgcmVzZXJ2aW5nIGFueXRoaW5nLiBUaGUgbWVtb3J5IGluIGNhc2Ugb2YgZHVtcCBiZWluZworICogYWN0aXZlIGlzIGZyZWVkIHdoZW4gdGhlIGR1bXAgaXMgY29sbGVjdGVkIChieSB1c2VybGFuZCB0b29scykuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwaHlwX2R1bXBfcmVzZXJ2ZV9tZW0odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemU7CisJdW5zaWduZWQgbG9uZyB2YXJpYWJsZV9yZXNlcnZlX3NpemU7CisKKwlpZiAoIXBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfY29uZmlndXJlZCkgeworCQlwcmludGsoS0VSTl9FUlIgIlBoeXAtZHVtcCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgaGFyZHdhcmVcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2F0X2Jvb3QpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUGh5cC1kdW1wIGRpc2FibGVkIGF0IGJvb3QgdGltZVxuIik7CisJCXJldHVybjsKKwl9CisKKwl2YXJpYWJsZV9yZXNlcnZlX3NpemUgPSBwaHlwX2R1bXBfY2FsY3VsYXRlX3Jlc2VydmVfc2l6ZSgpOworCisJaWYgKHBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfaXNfYWN0aXZlKSB7CisJCS8qIFJlc2VydmUgKmV2ZXJ5dGhpbmcqIGFib3ZlIFJNUi5BcmVhIGZyZWVkIGJ5IHVzZXJsYW5kIHRvb2xzKi8KKwkJYmFzZSA9IHZhcmlhYmxlX3Jlc2VydmVfc2l6ZTsKKwkJc2l6ZSA9IGxtYl9lbmRfb2ZfRFJBTSgpIC0gYmFzZTsKKworCQkvKiBYWFggY3Jhc2hlZF9yYW1fZW5kIGlzIHdyb25nLCBzaW5jZSBpdCBtYXkgYmUgYmV5b25kCisJCSAqIHRoZSBtZW1vcnlfbGltaXQsIGl0IHdpbGwgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KKwkJbG1iX3Jlc2VydmUoYmFzZSwgc2l6ZSk7CisKKwkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zdGFydCA9IGJhc2U7CisJCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc2l6ZSA9IHNpemU7CisJfSBlbHNlIHsKKwkJc2l6ZSA9IHBoeXBfZHVtcF9pbmZvLT5jcHVfc3RhdGVfc2l6ZSArCisJCQlwaHlwX2R1bXBfaW5mby0+aHB0ZV9yZWdpb25fc2l6ZSArCisJCQl2YXJpYWJsZV9yZXNlcnZlX3NpemU7CisJCWJhc2UgPSBsbWJfZW5kX29mX0RSQU0oKSAtIHNpemU7CisJCWxtYl9yZXNlcnZlKGJhc2UsIHNpemUpOworCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ID0gYmFzZTsKKwkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zaXplID0gc2l6ZTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwaHlwX2R1bXBfcmVzZXJ2ZV9tZW0odm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfUEhZUF9EVU1QICAmJiBDT05GSUdfUFBDX1JUQVMgKi8KKworCiB2b2lkIF9faW5pdCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqcGFyYW1zKQogewogCURCRygiIC0+IGVhcmx5X2luaXRfZGV2dHJlZSglcClcbiIsIHBhcmFtcyk7CkBAIC0xMDUxLDYgKzExMzQsMTEgQEAKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX3J0YXMsIE5VTEwpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUEhZUF9EVU1QCisJLyogc2NhbiB0cmVlIHRvIHNlZSBpZiBkdW1wIG9jY3VyZWQgZHVyaW5nIGxhc3QgYm9vdCAqLworCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fcGh5cF9kdW1wLCBOVUxMKTsKKyNlbmRpZgorCiAJLyogUmV0cmlldmUgdmFyaW91cyBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgL2Nob3NlbiBub2RlIG9mIHRoZQogCSAqIGRldmljZS10cmVlLCBpbmNsdWRpbmcgdGhlIHBsYXRmb3JtIHR5cGUsIGluaXRyZCBsb2NhdGlvbiBhbmQKIAkgKiBzaXplLCBUQ0UgcmVzZXJ2ZSwgYW5kIG1vcmUgLi4uCkBAIC0xMDcxLDYgKzExNTksNyBAQAogCXJlc2VydmVfa2R1bXBfdHJhbXBvbGluZSgpOwogCXJlc2VydmVfY3Jhc2hrZXJuZWwoKTsKIAllYXJseV9yZXNlcnZlX21lbSgpOworCXBoeXBfZHVtcF9yZXNlcnZlX21lbSgpOwogCiAJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbW9yeV9saW1pdCk7CiAJbG1iX2FuYWx5emUoKTsKQEAgLTEyNDMsMTIgKzEzMzIsMTQgQEAKICAqLwogdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCXdyaXRlX2xvY2soJmRldnRyZWVfbG9jayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CiAJbnAtPnNpYmxpbmcgPSBucC0+cGFyZW50LT5jaGlsZDsKIAlucC0+YWxsbmV4dCA9IGFsbG5vZGVzOwogCW5wLT5wYXJlbnQtPmNoaWxkID0gbnA7CiAJYWxsbm9kZXMgPSBucDsKLQl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTI1OSw4ICsxMzUwLDkgQEAKIHZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jd3JpdGVfbG9jaygmZGV2dHJlZV9sb2NrKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwogCiAJcGFyZW50ID0gbnAtPnBhcmVudDsKIAlpZiAoIXBhcmVudCkKQEAgLTEyOTEsNyArMTM4Myw3IEBACiAJb2Zfbm9kZV9zZXRfZmxhZyhucCwgT0ZfREVUQUNIRUQpOwogCiBvdXRfdW5sb2NrOgotCXdyaXRlX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKQEAgLTEzNzIsMjAgKzE0NjQsMjEgQEAKIGludCBwcm9tX2FkZF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wLCBzdHJ1Y3QgcHJvcGVydHkqIHByb3ApCiB7CiAJc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJvcC0+bmV4dCA9IE5VTEw7CQotCXdyaXRlX2xvY2soJmRldnRyZWVfbG9jayk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKIAluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwogCXdoaWxlICgqbmV4dCkgewogCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsICgqbmV4dCktPm5hbWUpID09IDApIHsKIAkJCS8qIGR1cGxpY2F0ZSAhIGRvbid0IGluc2VydCBpdCAqLwotCQkJd3JpdGVfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOworCQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKIAl9CiAJKm5leHQgPSBwcm9wOwotCXdyaXRlX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCiAJLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCkBAIC0xNDA1LDkgKzE0OTgsMTAgQEAKIGludCBwcm9tX3JlbW92ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCiB7CiAJc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmb3VuZCA9IDA7CiAKLQl3cml0ZV9sb2NrKCZkZXZ0cmVlX2xvY2spOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CiAJbmV4dCA9ICZucC0+cHJvcGVydGllczsKIAl3aGlsZSAoKm5leHQpIHsKIAkJaWYgKCpuZXh0ID09IHByb3ApIHsKQEAgLTE0MjAsNyArMTUxNCw3IEBACiAJCX0KIAkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwogCX0KLQl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNDQ2LDkgKzE1NDAsMTAgQEAKIAkJCSBzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApCiB7CiAJc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmb3VuZCA9IDA7CiAKLQl3cml0ZV9sb2NrKCZkZXZ0cmVlX2xvY2spOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CiAJbmV4dCA9ICZucC0+cHJvcGVydGllczsKIAl3aGlsZSAoKm5leHQpIHsKIAkJaWYgKCpuZXh0ID09IG9sZHByb3ApIHsKQEAgLTE0NjIsNyArMTU1Nyw3IEBACiAJCX0KIAkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwogCX0KLQl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA1YWI0Yzg0Li42ZDZkZjFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTIyNDAsNiArMjI0MCwxNCBAQAogCWlmIChydiAhPSBQUk9NX0VSUk9SICYmIChzdHJjbXAocHJvcCwgImNocnAiKSA9PSAwKSkKIAkJcHJvbV9zZXRwcm9wKG5vZGUsICIvIiwgImRldmljZV90eXBlIiwgImVmaWthIiwgc2l6ZW9mKCJlZmlrYSIpKTsKIAorCS8qIENPREVHRU4sZGVzY3JpcHRpb24gaXMgZXhwb3NlZCBpbiAvcHJvYy9jcHVpbmZvIHNvCisJICAgZml4IHRoYXQgdG9vICovCisJcnYgPSBwcm9tX2dldHByb3Aobm9kZSwgIkNPREVHRU4sZGVzY3JpcHRpb24iLCBwcm9wLCBzaXplb2YocHJvcCkpOworCWlmIChydiAhPSBQUk9NX0VSUk9SICYmIChzdHJzdHIocHJvcCwgIkNIUlAiKSkpCisJCXByb21fc2V0cHJvcChub2RlLCAiLyIsICJDT0RFR0VOLGRlc2NyaXB0aW9uIiwKKwkJCSAgICAgIkVmaWthIDUyMDBCIFBvd2VyUEMgU3lzdGVtIiwKKwkJCSAgICAgc2l6ZW9mKCJFZmlrYSA1MjAwQiBQb3dlclBDIFN5c3RlbSIpKTsKKwogCS8qIEZpeHVwIGJlc3Rjb21tIGludGVycnVwdHMgcHJvcGVydHkgKi8KIAlub2RlID0gY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgQUREUigiL2J1aWx0aW4vYmVzdGNvbW0iKSk7CiAJaWYgKFBIQU5ETEVfVkFMSUQobm9kZSkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IDc2NzNlOTguLjJhOWZlOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTMwLDE1ICs1MzAsMjEgQEAKIAkJLS1jb3VudDsKIAl9CiAKLQlpZiAoa2J1ZikKKwlpZiAoa2J1ZikgewogCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8PSBQVF9NQVhfUFVUX1JFRzsgLS1jb3VudCkKIAkJCXJlZ3NbcG9zKytdID0gKmsrKzsKLQllbHNlCisJCWZvciAoOyBjb3VudCA+IDAgJiYgcG9zIDwgUFRfVFJBUDsgLS1jb3VudCwgKytwb3MpCisJCQkrK2s7CisJfSBlbHNlIHsKIAkJZm9yICg7IGNvdW50ID4gMCAmJiBwb3MgPD0gUFRfTUFYX1BVVF9SRUc7IC0tY291bnQpIHsKIAkJCWlmIChfX2dldF91c2VyKHJlZywgdSsrKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJlZ3NbcG9zKytdID0gcmVnOwogCQl9CisJCWZvciAoOyBjb3VudCA+IDAgJiYgcG9zIDwgUFRfVFJBUDsgLS1jb3VudCwgKytwb3MpCisJCQlpZiAoX19nZXRfdXNlcihyZWcsIHUrKykpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCiAJaWYgKGNvdW50ID4gMCAmJiBwb3MgPT0gUFRfVFJBUCkgewogCQlpZiAoa2J1ZikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlMzIuYwppbmRleCA0YzFkZTZhLi45ZDMwZTEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZTMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UzMi5jCkBAIC0yOSwxMiArMjksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCisjaW5jbHVkZSAicHBjMzIuaCIKKwogLyoKICAqIGRvZXMgbm90IHlldCBjYXRjaCBzaWduYWxzIHNlbnQgd2hlbiB0aGUgY2hpbGQgZGllcy4KICAqIGluIGV4aXQuYyBvciBpbiBzaWduYWwuYy4KQEAgLTY0LDYgKzY3LDI3IEBACiAJcmV0dXJuIC1FUEVSTTsKIH0KIAorc3RhdGljIGludCBjb21wYXRfcHRyYWNlX2dldHNpZ2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgY29tcGF0X3NpZ2luZm9fdCBfX3VzZXIgKmRhdGEpCit7CisJc2lnaW5mb190IGxhc3RpbmZvOworCWludCBlcnJvciA9IC1FU1JDSDsKKworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJaWYgKGxpa2VseShjaGlsZC0+c2lnaGFuZCAhPSBOVUxMKSkgeworCQllcnJvciA9IC1FSU5WQUw7CisJCXNwaW5fbG9ja19pcnEoJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJaWYgKGxpa2VseShjaGlsZC0+bGFzdF9zaWdpbmZvICE9IE5VTEwpKSB7CisJCQlsYXN0aW5mbyA9ICpjaGlsZC0+bGFzdF9zaWdpbmZvOworCQkJZXJyb3IgPSAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCX0KKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJaWYgKCFlcnJvcikKKwkJcmV0dXJuIGNvcHlfc2lnaW5mb190b191c2VyMzIoZGF0YSwgJmxhc3RpbmZvKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGxvbmcgY29tcGF0X2FyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGNvbXBhdF9sb25nX3QgcmVxdWVzdCwKIAkJCWNvbXBhdF91bG9uZ190IGNhZGRyLCBjb21wYXRfdWxvbmdfdCBjZGF0YSkKIHsKQEAgLTI4Miw2ICszMDYsOSBAQAogCQkJMCwgUFRfUkVHU19DT1VOVCAqIHNpemVvZihjb21wYXRfbG9uZ190KSwKIAkJCWNvbXBhdF9wdHIoZGF0YSkpOwogCisJY2FzZSBQVFJBQ0VfR0VUU0lHSU5GTzoKKwkJcmV0dXJuIGNvbXBhdF9wdHJhY2VfZ2V0c2lnaW5mbyhjaGlsZCwgY29tcGF0X3B0cihkYXRhKSk7CisKIAljYXNlIFBUUkFDRV9HRVRGUFJFR1M6CiAJY2FzZSBQVFJBQ0VfU0VURlBSRUdTOgogCWNhc2UgUFRSQUNFX0dFVFZSUkVHUzoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggNTJlOTVjMi4uMzQ4NDNjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTIyLDExICsyMiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpAQCAtNTA3LDcgKzUwNiw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuZXhwZWN0ZWQgUlRBUyBlcnJvciAlZFxuIiwKLQkJCQkJX19GVU5DVElPTl9fLCBydGFzX3JjKTsKKwkJCQkJX19mdW5jX18sIHJ0YXNfcmMpOwogCQkJcmMgPSAtRVJBTkdFOwogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwppbmRleCBmMjI3NjU5Li42MjdmMTI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAKIAkvKiBFbmZvcmNlIGV4Y2x1c2l2ZSBvcGVuIHdpdGggdXNlIGNvdW50IG9mIFBERSAqLwogCXNwaW5fbG9jaygmZmxhc2hfZmlsZV9vcGVuX2xvY2spOwotCWlmIChhdG9taWNfcmVhZCgmZHAtPmNvdW50KSA+IDEpIHsKKwlpZiAoYXRvbWljX3JlYWQoJmRwLT5jb3VudCkgPiAyKSB7CiAJCXNwaW5fdW5sb2NrKCZmbGFzaF9maWxlX29wZW5fbG9jayk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtODA3LDcgKzgwNyw3IEBACiAJCQkJcnRhc19ibG9ja19jdG9yKTsKIAlpZiAoIWZsYXNoX2Jsb2NrX2NhY2hlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgYmxvY2sgY2FjaGVcbiIsCi0JCQkJX19GVU5DVElPTl9fKTsKKwkJCQlfX2Z1bmNfXyk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBjbGVhbnVwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYwppbmRleCA0MzNhMGEwLi4zYWI4OGE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX3BjaS5jCkBAIC01NiwyMSArNTYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9mX2RldmljZV9hdmFpbGFibGUoc3RydWN0IGRldmljZV9ub2RlICogZG4pCi17Ci0gICAgICAgIGNvbnN0IGNoYXIgKnN0YXR1czsKLQotICAgICAgICBzdGF0dXMgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJzdGF0dXMiLCBOVUxMKTsKLQotICAgICAgICBpZiAoIXN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBpZiAoIXN0cmNtcChzdGF0dXMsICJva2F5IikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KIGludCBydGFzX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCiB7CiAJaW50IHJldHVybnZhbCA9IC0xOwpAQCAtMTE3LDcgKzEwMiw3IEBACiAJZm9yIChkbiA9IGJ1c2RuLT5jaGlsZDsgZG47IGRuID0gZG4tPnNpYmxpbmcpIHsKIAkJc3RydWN0IHBjaV9kbiAqcGRuID0gUENJX0ROKGRuKTsKIAkJaWYgKHBkbiAmJiBwZG4tPmRldmZuID09IGRldmZuCi0JCSAgICAmJiBvZl9kZXZpY2VfYXZhaWxhYmxlKGRuKSkKKwkJICAgICYmIG9mX2RldmljZV9pc19hdmFpbGFibGUoZG4pKQogCQkJcmV0dXJuIHJ0YXNfcmVhZF9jb25maWcocGRuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKIAl9CiAKQEAgLTE2NCw3ICsxNDksNyBAQAogCWZvciAoZG4gPSBidXNkbi0+Y2hpbGQ7IGRuOyBkbiA9IGRuLT5zaWJsaW5nKSB7CiAJCXN0cnVjdCBwY2lfZG4gKnBkbiA9IFBDSV9ETihkbik7CiAJCWlmIChwZG4gJiYgcGRuLT5kZXZmbiA9PSBkZXZmbgotCQkgICAgJiYgb2ZfZGV2aWNlX2F2YWlsYWJsZShkbikpCisJCSAgICAmJiBvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGRuKSkKIAkJCXJldHVybiBydGFzX3dyaXRlX2NvbmZpZyhwZG4sIHdoZXJlLCBzaXplLCB2YWwpOwogCX0KIAlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwpAQCAtMzI2LDcgKzMxMSw3IEBACiAKIAlyZXMgPSBiLT5yZXNvdXJjZVswXTsKIAlpZiAoIXJlcy0+ZmxhZ3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gSU8gcmVzb3VyY2UgZm9yIFBIQiAlc1xuIiwgX19GVU5DVElPTl9fLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBJTyByZXNvdXJjZSBmb3IgUEhCICVzXG4iLCBfX2Z1bmNfXywKIAkJCQliLT5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMzM0LDEzICszMTksMTMgQEAKIAlyYyA9IHBjaWJpb3NfdW5tYXBfaW9fc3BhY2UoYik7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byB1bm1hcCBJTyBvbiBidXMgJXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGItPm5hbWUpOworCQkJX19mdW5jX18sIGItPm5hbWUpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAocmVsZWFzZV9yZXNvdXJjZShyZXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWxlYXNlIElPIG9uIGJ1cyAlc1xuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGItPm5hbWUpOworCQkJCV9fZnVuY19fLCBiLT5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zNDgsMTMgKzMzMywxMyBAQAogCQlyZXMgPSBiLT5yZXNvdXJjZVtpXTsKIAkJaWYgKCFyZXMtPmZsYWdzICYmIGkgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gTUVNIHJlc291cmNlIGZvciBQSEIgJXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBiLT5uYW1lKTsKKwkJCQlfX2Z1bmNfXywgYi0+bmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpZiAocmVzLT5mbGFncyAmJiByZWxlYXNlX3Jlc291cmNlKHJlcykpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICIlczogZmFpbGVkIHRvIHJlbGVhc2UgSU8gJWQgb24gYnVzICVzXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgaSwgYi0+bmFtZSk7CisJCQkJX19mdW5jX18sIGksIGItPm5hbWUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4YzNjOS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBQb3dlclBDLXNwZWNpZmljIHNlbWFwaG9yZSBjb2RlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBDb3J0IERvdWdhbiA8Y29ydEBjcy5ubXQuZWR1PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogQXByaWwgMjAwMSAtIFJld29ya2VkIGJ5IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgotICogdG8gZWxpbWluYXRlIHRoZSBTTVAgcmFjZXMgaW4gdGhlIG9sZCB2ZXJzaW9uIGJldHdlZW4gdGhlIHVwZGF0ZXMKLSAqIG9mIGBjb3VudCcgYW5kIGB3YWtpbmcnLiAgTm93IHdlIHVzZSBuZWdhdGl2ZSBgY291bnQnIHZhbHVlcyB0bwotICogaW5kaWNhdGUgdGhhdCBzb21lIHByb2Nlc3MoZXMpIGFyZSB3YWl0aW5nIGZvciB0aGUgc2VtYXBob3JlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLS8qCi0gKiBBdG9taWNhbGx5IHVwZGF0ZSBzZW0tPmNvdW50LgotICogVGhpcyBkb2VzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBmb2xsb3dpbmc6Ci0gKgotICoJb2xkX2NvdW50ID0gc2VtLT5jb3VudDsKLSAqCXRtcCA9IE1BWChvbGRfY291bnQsIDApICsgaW5jcjsKLSAqCXNlbS0+Y291bnQgPSB0bXA7Ci0gKglyZXR1cm4gb2xkX2NvdW50OwotICovCi1zdGF0aWMgaW5saW5lIGludCBfX3NlbV91cGRhdGVfY291bnQoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgaW5jcikKLXsKLQlpbnQgb2xkX2NvdW50LCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG4iCi0iMToJbHdhcngJJTAsMCwlM1xuIgotIglzcmF3aQklMSwlMCwzMVxuIgotIglhbmRjCSUxLCUwLCUxXG4iCi0iCWFkZAklMSwlMSwlNFxuIgotCVBQQzQwNV9FUlI3NygwLCUzKQotIglzdHdjeC4JJTEsMCwlM1xuIgotIglibmUJMWIiCi0JOiAiPSZyIiAob2xkX2NvdW50KSwgIj0mciIgKHRtcCksICI9bSIgKHNlbS0+Y291bnQpCi0JOiAiciIgKCZzZW0tPmNvdW50KSwgInIiIChpbmNyKSwgIm0iIChzZW0tPmNvdW50KQotCTogImNjIik7Ci0KLQlyZXR1cm4gb2xkX2NvdW50OwotfQotCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCS8qCi0JICogTm90ZSB0aGF0IHdlIGluY3JlbWVudGVkIGNvdW50IGluIHVwKCkgYmVmb3JlIHdlIGNhbWUgaGVyZSwKLQkgKiBidXQgdGhhdCB3YXMgaW5lZmZlY3RpdmUgc2luY2UgdGhlIHJlc3VsdCB3YXMgPD0gMCwgYW5kCi0JICogYW55IG5lZ2F0aXZlIHZhbHVlIG9mIGNvdW50IGlzIGVxdWl2YWxlbnQgdG8gMC4KLQkgKiBUaGlzIGVuZHMgdXAgc2V0dGluZyBjb3VudCB0byAxLCB1bmxlc3MgY291bnQgaXMgbm93ID4gMAotCSAqIChpLmUuIGJlY2F1c2Ugc29tZSBvdGhlciBjcHUgaGFzIGNhbGxlZCB1cCgpIGluIHRoZSBtZWFudGltZSksCi0JICogaW4gd2hpY2ggY2FzZSB3ZSBqdXN0IGluY3JlbWVudCBjb3VudC4KLQkgKi8KLQlfX3NlbV91cGRhdGVfY291bnQoc2VtLCAxKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotRVhQT1JUX1NZTUJPTChfX3VwKTsKLQotLyoKLSAqIE5vdGUgdGhhdCB3aGVuIHdlIGNvbWUgaW4gdG8gX19kb3duIG9yIF9fZG93bl9pbnRlcnJ1cHRpYmxlLAotICogd2UgaGF2ZSBhbHJlYWR5IGRlY3JlbWVudGVkIGNvdW50LCBidXQgdGhhdCBkZWNyZW1lbnQgd2FzCi0gKiBpbmVmZmVjdGl2ZSBzaW5jZSB0aGUgcmVzdWx0IHdhcyA8IDAsIGFuZCBhbnkgbmVnYXRpdmUgdmFsdWUKLSAqIG9mIGNvdW50IGlzIGVxdWl2YWxlbnQgdG8gMC4KLSAqIFRodXMgaXQgaXMgb25seSB3aGVuIHdlIGRlY3JlbWVudCBjb3VudCBmcm9tIHNvbWUgdmFsdWUgPiAwCi0gKiB0aGF0IHdlIGhhdmUgYWN0dWFsbHkgZ290IHRoZSBzZW1hcGhvcmUuCi0gKi8KLXZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCi0JX19zZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoJnNlbS0+d2FpdCwgJndhaXQpOwotCi0JLyoKLQkgKiBUcnkgdG8gZ2V0IHRoZSBzZW1hcGhvcmUuICBJZiB0aGUgY291bnQgaXMgPiAwLCB0aGVuIHdlJ3ZlCi0JICogZ290IHRoZSBzZW1hcGhvcmU7IHdlIGRlY3JlbWVudCBjb3VudCBhbmQgZXhpdCB0aGUgbG9vcC4KLQkgKiBJZiB0aGUgY291bnQgaXMgMCBvciBuZWdhdGl2ZSwgd2Ugc2V0IGl0IHRvIC0xLCBpbmRpY2F0aW5nCi0JICogdGhhdCB3ZSBhcmUgYXNsZWVwLCBhbmQgdGhlbiBzbGVlcC4KLQkgKi8KLQl3aGlsZSAoX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgLTEpIDw9IDApIHsKLQkJc2NoZWR1bGUoKTsKLQkJc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQlfX3NldF90YXNrX3N0YXRlKHRzaywgVEFTS19SVU5OSU5HKTsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGFueSBtb3JlIHNsZWVwZXJzLCB3YWtlIG9uZSBvZiB0aGVtIHVwIHNvCi0JICogdGhhdCBpdCBjYW4gZWl0aGVyIGdldCB0aGUgc2VtYXBob3JlLCBvciBzZXQgY291bnQgdG8gLTEKLQkgKiBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIHN0aWxsIHByb2Nlc3NlcyBzbGVlcGluZy4KLQkgKi8KLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotRVhQT1JUX1NZTUJPTChfX2Rvd24pOwotCi1pbnQgX19zY2hlZCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCi0JX19zZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCXdoaWxlIChfX3NlbV91cGRhdGVfY291bnQoc2VtLCAtMSkgPD0gMCkgewotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCS8qCi0JCQkgKiBBIHNpZ25hbCBpcyBwZW5kaW5nIC0gZ2l2ZSB1cCB0cnlpbmcuCi0JCQkgKiBTZXQgc2VtLT5jb3VudCB0byAwIGlmIGl0IGlzIG5lZ2F0aXZlLAotCQkJICogc2luY2Ugd2UgYXJlIG5vIGxvbmdlciBzbGVlcGluZy4KLQkJCSAqLwotCQkJX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgMCk7Ci0JCQlyZXR2YWwgPSAtRUlOVFI7Ci0JCQlicmVhazsKLQkJfQotCQlzY2hlZHVsZSgpOwotCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQlfX3NldF90YXNrX3N0YXRlKHRzaywgVEFTS19SVU5OSU5HKTsKLQotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggNmFkYjVhMS4uZGI1NDBlYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC01Niw3ICs1Nyw2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRocmVhZHMuaD4KIApAQCAtMTY3LDYgKzE2Nyw4IEBACiAJdW5zaWduZWQgc2hvcnQgbWluOwogCiAJaWYgKGNwdV9pZCA9PSBOUl9DUFVTKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKKwkJY29uc3QgY2hhciAqbW9kZWwgPSBOVUxMOwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiAJCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7CiAJCWludCBpOwpAQCAtMTc4LDYgKzE4MCwxMyBAQAogCQlzZXFfcHJpbnRmKG0sICJ0aW1lYmFzZVx0OiAlbHVcbiIsIHBwY190Yl9mcmVxKTsKIAkJaWYgKHBwY19tZC5uYW1lKQogCQkJc2VxX3ByaW50ZihtLCAicGxhdGZvcm1cdDogJXNcbiIsIHBwY19tZC5uYW1lKTsKKwkJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisJCWlmIChyb290KQorCQkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwgTlVMTCk7CisJCWlmIChtb2RlbCkKKwkJCXNlcV9wcmludGYobSwgIm1vZGVsXHRcdDogJXNcbiIsIG1vZGVsKTsKKwkJb2Zfbm9kZV9wdXQocm9vdCk7CisKIAkJaWYgKHBwY19tZC5zaG93X2NwdWluZm8gIT0gTlVMTCkKIAkJCXBwY19tZC5zaG93X2NwdWluZm8obSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCBjZDg3MGE4Li4zNmY2Nzc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0xMCw5ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KLSNpZiBkZWZpbmVkKENPTkZJR19JREUpIHx8IGRlZmluZWQoQ09ORklHX0lERV9NT0RVTEUpCi0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTUxLDExICs0OCw2IEBACiAKIGV4dGVybiB2b2lkIGJvb3R4X2luaXQodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyBwaHlzKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi1zdHJ1Y3QgaWRlX21hY2hkZXBfY2FsbHMgcHBjX2lkZV9tZDsKLUVYUE9SVF9TWU1CT0wocHBjX2lkZV9tZCk7Ci0jZW5kaWYKLQogaW50IGJvb3RfY3B1aWQ7CiBFWFBPUlRfU1lNQk9MX0dQTChib290X2NwdWlkKTsKIGludCBib290X2NwdWlkX3BoeXM7CkBAIC0xNzIsNiArMTY0LDE4IEBACiB9CiBfX3NldHVwKCJsMmNyPSIsIHBwY19zZXR1cF9sMmNyKTsKIAorLyogQ2hlY2tzICJsM2NyPXh4eHgiIGNvbW1hbmQtbGluZSBvcHRpb24gKi8KK2ludCBfX2luaXQgcHBjX3NldHVwX2wzY3IoY2hhciAqc3RyKQoreworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9MM0NSKSkgeworCQl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7CisJCXByaW50ayhLRVJOX0lORk8gImwzY3Igc2V0IHRvICVseFxuIiwgdmFsKTsKKwkJX3NldF9MM0NSKHZhbCk7CQkvKiBhbmQgZW5hYmxlIGl0ICovCisJfQorCXJldHVybiAxOworfQorX19zZXR1cCgibDNjcj0iLCBwcGNfc2V0dXBfbDNjcik7CisKICNpZmRlZiBDT05GSUdfR0VORVJJQ19OVlJBTQogCiAvKiBHZW5lcmljIG52cmFtIGhvb2tzIHVzZWQgYnkgZHJpdmVycy9jaGFyL2dlbl9udnJhbS5jICovCkBAIC0yNzcsNyArMjgxLDcgQEAKIAlpZiAocHBjX21kLnBhbmljKQogCQlzZXR1cF9wYW5pYygpOwogCi0JaW5pdF9tbS5zdGFydF9jb2RlID0gUEFHRV9PRkZTRVQ7CisJaW5pdF9tbS5zdGFydF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0OwogCWluaXRfbW0uZW5kX2NvZGUgPSAodW5zaWduZWQgbG9uZykgX2V0ZXh0OwogCWluaXRfbW0uZW5kX2RhdGEgPSAodW5zaWduZWQgbG9uZykgX2VkYXRhOwogCWluaXRfbW0uYnJrID0ga2xpbWl0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDNiMTUyOWMuLjMxYWRhOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2tkdW1wLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTU1LDcgKzU3LDYgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgpAQCAtMTc4LDYgKzE3OSw5IEBACiAJLyogRW5hYmxlIGVhcmx5IGRlYnVnZ2luZyBpZiBhbnkgc3BlY2lmaWVkIChzZWUgdWRiZy5oKSAqLwogCXVkYmdfZWFybHlfaW5pdCgpOwogCisJLyogSW5pdGlhbGl6ZSBsb2NrZGVwIGVhcmx5IG9yIGVsc2Ugc3BpbmxvY2tzIHdpbGwgYmxvdyAqLworCWxvY2tkZXBfaW5pdCgpOworCiAgCURCRygiIC0+IGVhcmx5X3NldHVwKCksIGR0X3B0cjogMHglbHhcbiIsIGR0X3B0cik7CiAKIAkvKgpAQCAtNTEwLDcgKzUxNCw3IEBACiAJaWYgKHBwY19tZC5wYW5pYykKIAkJc2V0dXBfcGFuaWMoKTsKIAotCWluaXRfbW0uc3RhcnRfY29kZSA9IFBBR0VfT0ZGU0VUOworCWluaXRfbW0uc3RhcnRfY29kZSA9ICh1bnNpZ25lZCBsb25nKV9zdGV4dDsKIAlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpIF9ldGV4dDsKIAlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKIAlpbml0X21tLmJyayA9IGtsaW1pdDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IGQ4NDBiYzcuLmFkNjk0MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtNjIxLDYgKzYyMSwxOCBAQAogCiAjZGVmaW5lIGNvcHlfc2lnaW5mb190b191c2VyCWNvcHlfc2lnaW5mb190b191c2VyMzIKIAoraW50IGNvcHlfc2lnaW5mb19mcm9tX3VzZXIzMihzaWdpbmZvX3QgKnRvLCBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gX191c2VyICpmcm9tKQoreworCW1lbXNldCh0bywgMCwgc2l6ZW9mICp0byk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIodG8sIGZyb20sIDMqc2l6ZW9mKGludCkpIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKHRvLT5fc2lmaWVsZHMuX3BhZCwKKwkJCSAgIGZyb20tPl9zaWZpZWxkcy5fcGFkLCBTSV9QQURfU0laRTMyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIE5vdGU6IGl0IGlzIG5lY2Vzc2FyeSB0byB0cmVhdCBwaWQgYW5kIHNpZyBhcyB1bnNpZ25lZCBpbnRzLCB3aXRoIHRoZQogICogY29ycmVzcG9uZGluZyBjYXN0IHRvIGEgc2lnbmVkIGludCB0byBpbnN1cmUgdGhhdCB0aGUgcHJvcGVyIGNvbnZlcnNpb24KQEAgLTYzNCw5ICs2NDYsMTAgQEAKIAlpbnQgcmV0OwogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKIAotCWlmIChjb3B5X2Zyb21fdXNlciAoJmluZm8sIHVpbmZvLCAzKnNpemVvZihpbnQpKSB8fAotCSAgICBjb3B5X2Zyb21fdXNlciAoaW5mby5fc2lmaWVsZHMuX3BhZCwgdWluZm8tPl9zaWZpZWxkcy5fcGFkLCBTSV9QQURfU0laRTMyKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0ID0gY29weV9zaWdpbmZvX2Zyb21fdXNlcjMyKCZpbmZvLCB1aW5mbyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQ7CisKIAlzZXRfZnMgKEtFUk5FTF9EUyk7CiAJLyogVGhlIF9fdXNlciBwb2ludGVyIGNhc3QgaXMgdmFsaWQgYmVjYXN1c2Ugb2YgdGhlIHNldF9mcygpICovCiAJcmV0ID0gc3lzX3J0X3NpZ3F1ZXVlaW5mbygoaW50KXBpZCwgKGludClzaWcsIChzaWdpbmZvX3QgX191c2VyICopICZpbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zdGFja3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2MzhlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBTdGFjayB0cmFjZSB1dGlsaXR5CisgKgorICogQ29weXJpZ2h0IDIwMDggQ2hyaXN0b3BoIEhlbGx3aWcsIElCTSBDb3JwLgorICoKKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworLyoKKyAqIFNhdmUgc3RhY2stYmFja3RyYWNlIGFkZHJlc3NlcyBpbnRvIGEgc3RhY2tfdHJhY2UgYnVmZmVyLgorICovCit2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwl1bnNpZ25lZCBsb25nIHNwOworCisJYXNtKCJtciAlMCwxIiA6ICI9ciIgKHNwKSk7CisKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgc3A7CisJCXVuc2lnbmVkIGxvbmcgbmV3c3AsIGlwOworCisJCWlmICghdmFsaWRhdGVfc3Aoc3AsIGN1cnJlbnQsIFNUQUNLX0ZSQU1FX09WRVJIRUFEKSkKKwkJCXJldHVybjsKKworCQluZXdzcCA9IHN0YWNrWzBdOworCQlpcCA9IHN0YWNrW1NUQUNLX0ZSQU1FX0xSX1NBVkVdOworCisJCWlmICghdHJhY2UtPnNraXApCisJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGlwOworCQllbHNlCisJCQl0cmFjZS0+c2tpcC0tOworCisJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCisJCQlyZXR1cm47CisKKwkJc3AgPSBuZXdzcDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwppbmRleCA0YTRmNWM2Li43MDlmOGNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgpAQCAtMzY4LDExICszNjcsNiBAQAogCiAJZXJyb3IgPSBjb21wYXRfZG9fZXhlY3ZlKGZpbGVuYW1lLCBjb21wYXRfcHRyKGExKSwgY29tcGF0X3B0cihhMiksIHJlZ3MpOwogCi0JaWYgKGVycm9yID09IDApIHsKLQkJdGFza19sb2NrKGN1cnJlbnQpOwotCQljdXJyZW50LT5wdHJhY2UgJj0gflBUX0RUUkFDRTsKLQkJdGFza191bmxvY2soY3VycmVudCk7Ci0JfQogCXB1dG5hbWUoZmlsZW5hbWUpOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzLmMKaW5kZXggM2IxZDVkZC4uZTcyMmE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKaW5kZXggZDM0MzdjNC4uYzIxYTYyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKQEAgLTIxLDEzICsyMSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggZjk4ODY3MjUuLmI3N2Y4YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKi8KIGludCB2aW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB2aW9fZHJpdmVyICp2aW9kcnYpCiB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcml2ZXIgJXMgcmVnaXN0ZXJpbmdcbiIsIF9fRlVOQ1RJT05fXywKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyaXZlciAlcyByZWdpc3RlcmluZ1xuIiwgX19mdW5jX18sCiAJCXZpb2Rydi0+ZHJpdmVyLm5hbWUpOwogCiAJLyogZmlsbCBpbiAnc3RydWN0IGRyaXZlcicgZmllbGRzICovCkBAIC0xODQsNyArMTg0LDcgQEAKIAkvKiB3ZSBuZWVkIHRoZSAnZGV2aWNlX3R5cGUnIHByb3BlcnR5LCBpbiBvcmRlciB0byBtYXRjaCB3aXRoIGRyaXZlcnMgKi8KIAlpZiAob2Zfbm9kZS0+dHlwZSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBub2RlICVzIG1pc3NpbmcgJ2RldmljZV90eXBlJ1xuIiwKLQkJCQlfX0ZVTkNUSU9OX18sCisJCQkJX19mdW5jX18sCiAJCQkJb2Zfbm9kZS0+bmFtZSA/IG9mX25vZGUtPm5hbWUgOiAiPHVua25vd24+Iik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTE5Miw3ICsxOTIsNyBAQAogCXVuaXRfYWRkcmVzcyA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicmVnIiwgTlVMTCk7CiAJaWYgKHVuaXRfYWRkcmVzcyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBub2RlICVzIG1pc3NpbmcgJ3JlZydcbiIsCi0JCQkJX19GVU5DVElPTl9fLAorCQkJCV9fZnVuY19fLAogCQkJCW9mX25vZGUtPm5hbWUgPyBvZl9ub2RlLT5uYW1lIDogIjx1bmtub3duPiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0yMjcsNyArMjI3LDcgQEAKIAkvKiByZWdpc3RlciB3aXRoIGdlbmVyaWMgZGV2aWNlIGZyYW1ld29yayAqLwogCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnZpb2Rldi0+ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlICVzXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgdmlvZGV2LT5kZXYuYnVzX2lkKTsKKwkJCQlfX2Z1bmNfXywgdmlvZGV2LT5kZXYuYnVzX2lkKTsKIAkJLyogWFhYIGZyZWUgVENFIHRhYmxlICovCiAJCWtmcmVlKHZpb2Rldik7CiAJCXJldHVybiBOVUxMOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZ2aW9fYnVzX2RldmljZS5kZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRldmljZV9yZWdpc3RlciByZXR1cm5lZCAlaVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGVycik7CisJCQkJX19mdW5jX18sIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMGFmYjllMy4uMGMzMDAwYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSwxMSArMSw5IEBACiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNkZWZpbmUgUFJPVklERTMyKHgpCVBST1ZJREUoX191bnVzZWRfXyMjeCkKICNlbHNlCi0jZGVmaW5lIFBBR0VfU0laRQk0MDk2Ci0jZGVmaW5lIEtFUk5FTEJBU0UJQ09ORklHX0tFUk5FTF9TVEFSVAogI2RlZmluZSBQUk9WSURFMzIoeCkJUFJPVklERSh4KQogI2VuZGlmCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCkBAIC0zMyw3ICszMSw3IEBACiAgKi8KIAogCS8qIFRleHQgYW5kIGdvdHMgKi8KLQkudGV4dCA6IHsKKwkudGV4dCA6IEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJQUxJR05fRlVOQ1RJT04oKTsKIAkJKigudGV4dC5oZWFkKQogCQlfdGV4dCA9IC47CkBAIC01OCw3ICs1Niw3IEBACiAJUk9EQVRBCiAKIAkvKiBFeGNlcHRpb24gJiBidWcgdGFibGVzICovCi0JX19leF90YWJsZSA6IHsKKwlfX2V4X3RhYmxlIDogQVQoQUREUihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKSB7CiAJCV9fc3RhcnRfX19leF90YWJsZSA9IC47CiAJCSooX19leF90YWJsZSkKIAkJX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtNzQsNyArNzIsNyBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9faW5pdF9iZWdpbiA9IC47CiAKLQkuaW5pdC50ZXh0IDogeworCS5pbml0LnRleHQgOiBBVChBRERSKC5pbml0LnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX3Npbml0dGV4dCA9IC47CiAJCUlOSVRfVEVYVAogCQlfZWluaXR0ZXh0ID0gLjsKQEAgLTgzLDExICs4MSwxMSBAQAogCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZGVkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsCiAJICogdG8gZGVhbCB3aXRoIHJlZmVyZW5jZXMgZnJvbSBfX2J1Z190YWJsZQogCSAqLwotCS5leGl0LnRleHQgOiB7CisJLmV4aXQudGV4dCA6IEFUKEFERFIoLmV4aXQudGV4dCkgLSBMT0FEX09GRlNFVCkgewogCQlFWElUX1RFWFQKIAl9CiAKLQkuaW5pdC5kYXRhIDogeworCS5pbml0LmRhdGEgOiBBVChBRERSKC5pbml0LmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsKIAkJSU5JVF9EQVRBCiAJCV9fdnRvcF90YWJsZV9iZWdpbiA9IC47CiAJCSooLnZ0b3BfZml4dXApOwpAQCAtMTAzLDE5ICsxMDEsMTkgQEAKIAl9CiAKIAkuID0gQUxJR04oMTYpOwotCS5pbml0LnNldHVwIDogeworCS5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5zZXR1cCkgLSBMT0FEX09GRlNFVCkgewogCQlfX3NldHVwX3N0YXJ0ID0gLjsKIAkJKiguaW5pdC5zZXR1cCkKIAkJX19zZXR1cF9lbmQgPSAuOwogCX0KIAotCS5pbml0Y2FsbC5pbml0IDogeworCS5pbml0Y2FsbC5pbml0IDogQVQoQUREUiguaW5pdGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkgewogCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAkJSU5JVENBTExTCiAJCV9faW5pdGNhbGxfZW5kID0gLjsKIAkJfQogCi0JLmNvbl9pbml0Y2FsbC5pbml0IDogeworCS5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7CiAJCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAkJKiguY29uX2luaXRjYWxsLmluaXQpCiAJCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CkBAIC0xMjQsMTQgKzEyMiwxNCBAQAogCVNFQ1VSSVRZX0lOSVQKIAogCS4gPSBBTElHTig4KTsKLQlfX2Z0cl9maXh1cCA6IHsKKwlfX2Z0cl9maXh1cCA6IEFUKEFERFIoX19mdHJfZml4dXApIC0gTE9BRF9PRkZTRVQpIHsKIAkJX19zdGFydF9fX2Z0cl9maXh1cCA9IC47CiAJCSooX19mdHJfZml4dXApCiAJCV9fc3RvcF9fX2Z0cl9maXh1cCA9IC47CiAJfQogI2lmZGVmIENPTkZJR19QUEM2NAogCS4gPSBBTElHTig4KTsKLQlfX2Z3X2Z0cl9maXh1cCA6IHsKKwlfX2Z3X2Z0cl9maXh1cCA6IEFUKEFERFIoX19md19mdHJfZml4dXApIC0gTE9BRF9PRkZTRVQpIHsKIAkJX19zdGFydF9fX2Z3X2Z0cl9maXh1cCA9IC47CiAJCSooX19md19mdHJfZml4dXApCiAJCV9fc3RvcF9fX2Z3X2Z0cl9maXh1cCA9IC47CkBAIC0xMzksMTQgKzEzNywxNCBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQucmFtZnMgOiB7CisJLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7CiAJCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKIAkJKiguaW5pdC5yYW1mcykKIAkJX19pbml0cmFtZnNfZW5kID0gLjsKIAl9CiAjZW5kaWYKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wZXJjcHUgOiB7CisJLmRhdGEucGVyY3B1ICA6IEFUKEFERFIoLmRhdGEucGVyY3B1KSAtIExPQURfT0ZGU0VUKSB7CiAJCV9fcGVyX2NwdV9zdGFydCA9IC47CiAJCSooLmRhdGEucGVyY3B1KQogCQkqKC5kYXRhLnBlcmNwdS5zaGFyZWRfYWxpZ25lZCkKQEAgLTE1NCw3ICsxNTIsNyBAQAogCX0KIAogCS4gPSBBTElHTig4KTsKLQkubWFjaGluZS5kZXNjIDogeworCS5tYWNoaW5lLmRlc2MgOiBBVChBRERSKC5tYWNoaW5lLmRlc2MpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX19tYWNoaW5lX2Rlc2Nfc3RhcnQgPSAuIDsKIAkJKigubWFjaGluZS5kZXNjKQogCQlfX21hY2hpbmVfZGVzY19lbmQgPSAuIDsKQEAgLTE3MiwyNSArMTcwLDI0IEBACiAJX3NkYXRhID0gLjsKIAogI2lmZGVmIENPTkZJR19QUEMzMgotCS5kYXRhICAgIDoKLQl7CisJLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAJCURBVEFfREFUQQogCQkqKC5zZGF0YSkKIAkJKiguZ290LnBsdCkgKiguZ290KQogCX0KICNlbHNlCi0JLmRhdGEgOiB7CisJLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAJCURBVEFfREFUQQogCQkqKC5kYXRhLnJlbCopCiAJCSooLnRvYzEpCiAJCSooLmJyYW5jaF9sdCkKIAl9CiAKLQkub3BkIDogeworCS5vcGQgOiBBVChBRERSKC5vcGQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJKigub3BkKQogCX0KIAotCS5nb3QgOiB7CisJLmdvdCA6IEFUKEFERFIoLmdvdCkgLSBMT0FEX09GRlNFVCkgewogCQlfX3RvY19zdGFydCA9IC47CiAJCSooLmdvdCkKIAkJKigudG9jKQpAQCAtMjA3LDI2ICsyMDQsMjYgQEAKICNlbHNlCiAJLiA9IEFMSUdOKDE2Mzg0KTsKICNlbmRpZgotCS5kYXRhLmluaXRfdGFzayA6IHsKKwkuZGF0YS5pbml0X3Rhc2sgOiBBVChBRERSKC5kYXRhLmluaXRfdGFzaykgLSBMT0FEX09GRlNFVCkgewogCQkqKC5kYXRhLmluaXRfdGFzaykKIAl9CiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wYWdlX2FsaWduZWQgOiB7CisJLmRhdGEucGFnZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJKiguZGF0YS5wYWdlX2FsaWduZWQpCiAJfQogCi0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7CisJLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7CiAJCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCiAJfQogCiAJLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKLQkuZGF0YS5yZWFkX21vc3RseSA6IHsKKwkuZGF0YS5yZWFkX21vc3RseSA6IEFUKEFERFIoLmRhdGEucmVhZF9tb3N0bHkpIC0gTE9BRF9PRkZTRVQpIHsKIAkJKiguZGF0YS5yZWFkX21vc3RseSkKIAl9CiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlfX2RhdGFfbm9zYXZlIDogeworCS5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7CiAJCV9fbm9zYXZlX2JlZ2luID0gLjsKIAkJKiguZGF0YS5ub3NhdmUpCiAJCS4gPSBBTElHTihQQUdFX1NJWkUpOwpAQCAtMjM3LDcgKzIzNCw3IEBACiAgKiBBbmQgZmluYWxseSB0aGUgYnNzCiAgKi8KIAotCS5ic3MgOiB7CisJLmJzcyA6IEFUKEFERFIoLmJzcykgLSBMT0FEX09GRlNFVCkgewogCQlfX2Jzc19zdGFydCA9IC47CiAJCSooLnNic3MpICooLnNjb21tb24pCiAJCSooLmR5bmJzcykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvcmhlYXAuYyBiL2FyY2gvcG93ZXJwYy9saWIvcmhlYXAuYwppbmRleCAyMmMzYjRmLi4yOWIyOTQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jCkBAIC01NCw3ICs1NCw3IEBACiAKIAluZXdfYmxvY2tzID0gbWF4X2Jsb2NrcyAtIGluZm8tPm1heF9ibG9ja3M7CiAKLQlibG9jayA9IGttYWxsb2Moc2l6ZW9mKHJoX2Jsb2NrX3QpICogbWF4X2Jsb2NrcywgR0ZQX0tFUk5FTCk7CisJYmxvY2sgPSBrbWFsbG9jKHNpemVvZihyaF9ibG9ja190KSAqIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpOwogCWlmIChibG9jayA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjU4LDcgKzI1OCw3IEBACiAJaWYgKChhbGlnbm1lbnQgJiAoYWxpZ25tZW50IC0gMSkpICE9IDApCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvc3RyaW5nLlMgYi9hcmNoL3Bvd2VycGMvbGliL3N0cmluZy5TCmluZGV4IGM0YzYyMmQuLjQ5ZWIxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvc3RyaW5nLlMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9zdHJpbmcuUwpAQCAtNzUsNiArNzUsMjAgQEAKIAliZXEJMWIKIAlibHIKIAorX0dMT0JBTChzdHJuY21wKQorCVBQQ19MQ01QSSByNSwwCisJYmVxbHIKKwltdGN0cglyNQorCWFkZGkJcjUscjMsLTEKKwlhZGRpCXI0LHI0LC0xCisxOglsYnp1CXIzLDEocjUpCisJY21wd2kJMSxyMywwCisJbGJ6dQlyMCwxKHI0KQorCXN1YmYuCXIzLHIwLHIzCisJYmVxbHIJMQorCWJkbnp0CWVxLDFiCisJYmxyCisKIF9HTE9CQUwoc3RybGVuKQogCWFkZGkJcjQscjMsLTEKIDE6CWxienUJcjAsMShyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWJzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFicy5jCmluZGV4IDQxZjA2MTcuLjU0OWJhYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWJzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZhYnMuYwpAQCAtOSw3ICs5LDcgQEAKIAlmckRbMV0gPSBmckJbMV07CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6IEQgJXAsIEIgJXA6ICIsIF9fRlVOQ1RJT05fXywgZnJELCBmckIpOworCXByaW50aygiJXM6IEQgJXAsIEIgJXA6ICIsIF9fZnVuY19fLCBmckQsIGZyQik7CiAJZHVtcF9kb3VibGUoZnJEKTsKIAlwcmludGsoIlxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZC5jCmluZGV4IGZjODgzNjQuLjdiZWZiYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZhZGQuYwpAQCAtMTQsNyArMTQsNyBAQAogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQSwgZnJCKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkcy5jCmluZGV4IDkzMDI1YjYuLjJiMzQ2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkcy5jCkBAIC0xNSw3ICsxNSw3IEBACiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJBLCBmckIpOworCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAogCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wby5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXBvLmMKaW5kZXggNGVmYWMzOS4uMzZkNjg5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXBvLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXBvLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgKCUwOHgpICVkICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGNjciwgKmNjciwgY3JmRCwgZnJBLCBmckIpOworCXByaW50aygiJXM6ICVwICglMDh4KSAlZCAlcCAlcFxuIiwgX19mdW5jX18sIGNjciwgKmNjciwgY3JmRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcHUuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wdS5jCmluZGV4IGI3ZTMzMTcuLjUzZDkzODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wdS5jCkBAIC0xNCw3ICsxNCw3IEBACiAJbG9uZyBjbXA7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICglMDh4KSAlZCAlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBjY3IsICpjY3IsIGNyZkQsIGZyQSwgZnJCKTsKKwlwcmludGsoIiVzOiAlcCAoJTA4eCkgJWQgJXAgJXBcbiIsIF9fZnVuY19fLCBjY3IsICpjY3IsIGNyZkQsIGZyQSwgZnJCKTsKICNlbmRpZgogCiAJX19GUF9VTlBBQ0tfRChBLCBmckEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXcuYwppbmRleCAzYjNjOThiLi5mY2Q3YTk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXcuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXcuYwpAQCAtMTYsNyArMTYsNyBAQAogCWZyRFsxXSA9IHI7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6IEQgJXAsIEIgJXA6ICIsIF9fRlVOQ1RJT05fXywgZnJELCBmckIpOworCXByaW50aygiJXM6IEQgJXAsIEIgJXA6ICIsIF9fZnVuY19fLCBmckQsIGZyQik7CiAJZHVtcF9kb3VibGUoZnJEKTsKIAlwcmludGsoIlxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpd3ouYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpd3ouYwppbmRleCA3NzE3ZWI2Li4xNTE0ZDU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXd6LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3ei5jCkBAIC0yMyw3ICsyMyw3IEBACiAJX19GUFVfRlBTQ1IgPSBmcHNjcjsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogRCAlcCwgQiAlcDogIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQik7CisJcHJpbnRrKCIlczogRCAlcCwgQiAlcDogIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKIAlkdW1wX2RvdWJsZShmckQpOwogCXByaW50aygiXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXYuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2LmMKaW5kZXggZjJmYmE4Mi4uMThhMjBmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXYuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdi5jCkBAIC0xNCw3ICsxNCw3IEBACiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJBLCBmckIpOworCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAogCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKQEAgLTI4LDEzICsyOCwxMyBAQAogCWlmIChBX2MgPT0gRlBfQ0xTX1pFUk8gJiYgQl9jID09IEZQX0NMU19aRVJPKSB7CiAJCXJldCB8PSBFRkxBR19WWFpEWjsKICNpZmRlZiBERUJVRwotCQlwcmludGsoIiVzOiBGUFNDUl9WWFpEWiByYWlzZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50aygiJXM6IEZQU0NSX1ZYWkRaIHJhaXNlZFxuIiwgX19mdW5jX18pOwogI2VuZGlmCiAJfQogCWlmIChBX2MgPT0gRlBfQ0xTX0lORiAmJiBCX2MgPT0gRlBfQ0xTX0lORikgewogCQlyZXQgfD0gRUZMQUdfVlhJREk7CiAjaWZkZWYgREVCVUcKLQkJcHJpbnRrKCIlczogRlBTQ1JfVlhJREkgcmFpc2VkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoIiVzOiBGUFNDUl9WWElESSByYWlzZWRcbiIsIF9fZnVuY19fKTsKICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXZzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdnMuYwppbmRleCBiOTcxMTk2Li4yNGZlZWQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdnMuYwpAQCAtMTUsNyArMTUsNyBAQAogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQSwgZnJCKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CkBAIC0yOSwxMyArMjksMTMgQEAKIAlpZiAoQV9jID09IEZQX0NMU19aRVJPICYmIEJfYyA9PSBGUF9DTFNfWkVSTykgewogCQlyZXQgfD0gRUZMQUdfVlhaRFo7CiAjaWZkZWYgREVCVUcKLQkJcHJpbnRrKCIlczogRlBTQ1JfVlhaRFogcmFpc2VkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoIiVzOiBGUFNDUl9WWFpEWiByYWlzZWRcbiIsIF9fZnVuY19fKTsKICNlbmRpZgogCX0KIAlpZiAoQV9jID09IEZQX0NMU19JTkYgJiYgQl9jID09IEZQX0NMU19JTkYpIHsKIAkJcmV0IHw9IEVGTEFHX1ZYSURJOwogI2lmZGVmIERFQlVHCi0JCXByaW50aygiJXM6IEZQU0NSX1ZYSURJIHJhaXNlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKCIlczogRlBTQ1JfVlhJREkgcmFpc2VkXG4iLCBfX2Z1bmNfXyk7CiAjZW5kaWYKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKaW5kZXggMGExZGJjZS4uZGVkYjQ2NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckEsIGZyQiwgZnJDKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAogCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZHMuYwppbmRleCAwZjcwYmJhLi42YmJiNTZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkcy5jCkBAIC0xNyw3ICsxNyw3IEBACiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CisJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1yLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1yLmMKaW5kZXggMjhkZjcwMC4uYmQ1NTM4NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztci5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXIuYwpAQCAtOSw3ICs5LDcgQEAKIAlmckRbMV0gPSBmckJbMV07CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6IEQgJXAsIEIgJXA6ICIsIF9fRlVOQ1RJT05fXywgZnJELCBmckIpOworCXByaW50aygiJXM6IEQgJXAsIEIgJXA6ICIsIF9fZnVuY19fLCBmckQsIGZyQik7CiAJZHVtcF9kb3VibGUoZnJEKTsKIAlwcmludGsoIlxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3ViLmMKaW5kZXggMjAzZmQ0OC4uZjMxMWUyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3ViLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3ViLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckEsIGZyQiwgZnJDKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAogCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1YnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1YnMuYwppbmRleCA4Y2U2ODYyLi44MWE3MTZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1zdWJzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3Vicy5jCkBAIC0xNyw3ICsxNyw3IEBACiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CisJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWwuYwppbmRleCA2NmM3ZTc5Li4yZjNkMzI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVsLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckEsIGZyQik7CisJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCiAJX19GUF9VTlBBQ0tfRChBLCBmckEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWxzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bHMuYwppbmRleCAyNmJjNDI3Li45NjJiNTg4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bHMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bHMuYwpAQCAtMTUsNyArMTUsNyBAQAogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQSwgZnJCKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5hYnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbmFicy5jCmluZGV4IGM2YjkxM2QuLmE3ZDM0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbmFicy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbmFicy5jCkBAIC05LDcgKzksNyBAQAogCWZyRFsxXSA9IGZyQlsxXTsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogRCAlcCwgQiAlcDogIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQik7CisJcHJpbnRrKCIlczogRCAlcCwgQiAlcDogIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKIAlkdW1wX2RvdWJsZShmckQpOwogCXByaW50aygiXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZuZWcuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbmVnLmMKaW5kZXggZmU5YTk4ZC4uMWU5ODhjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZuZWcuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5lZy5jCkBAIC05LDcgKzksNyBAQAogCWZyRFsxXSA9IGZyQlsxXTsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogRCAlcCwgQiAlcDogIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQik7CisJcHJpbnRrKCIlczogRCAlcCwgQiAlcDogIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKIAlkdW1wX2RvdWJsZShmckQpOwogCXByaW50aygiXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZC5jCmluZGV4IDdmMzEyMjcuLjhjZjc4MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckEsIGZyQiwgZnJDKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAogCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGRzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkcy5jCmluZGV4IDY1NDU0YzkuLmYxYzRmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZHMuYwpAQCAtMTcsNyArMTcsNyBAQAogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQSwgZnJCLCBmckMpOworCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCiAJX19GUF9VTlBBQ0tfRChBLCBmckEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1Yi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1Yi5jCmluZGV4IGYxY2E3NDguLjk4OTQ0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWIuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3ViLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckEsIGZyQiwgZnJDKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAogCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWJzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3Vicy5jCmluZGV4IDVjOWEwOWEuLmIyMGY0ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWJzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1YnMuYwpAQCAtMTcsNyArMTcsNyBAQAogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQSwgZnJCLCBmckMpOworCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCiAJX19GUF9VTlBBQ0tfRChBLCBmckEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZyZXMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mcmVzLmMKaW5kZXggZWMxMWU0Ni4uMTBlY2JkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZyZXMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJlcy5jCkBAIC02LDcgKzYsNyBAQAogZnJlcyh2b2lkICpmckQsIHZvaWQgKmZyQikKIHsKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJCKTsKKwlwcmludGsoIiVzOiAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKICNlbmRpZgogCXJldHVybiAtRU5PU1lTOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Zyc3AuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mcnNwLmMKaW5kZXggZDg3OWIyYS4uNzI0Y2NiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Zyc3AuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJzcC5jCkBAIC0xMiw3ICsxMiw3IEBACiAJRlBfREVDTF9EKEIpOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiBEICVwLCBCICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJCKTsKKwlwcmludGsoIiVzOiBEICVwLCBCICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckIpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJzcXJ0ZS5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Zyc3FydGUuYwppbmRleCBhMTFhZTE4Li4xZDBhM2EwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJzcXJ0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mcnNxcnRlLmMKQEAgLTYsNyArNiw3IEBACiBmcnNxcnRlKHZvaWQgKmZyRCwgdm9pZCAqZnJCKQogewogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckIpOworCXByaW50aygiJXM6ICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckIpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNlbC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzZWwuYwppbmRleCBlMzZlNmU3Li5lY2I1ZjI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNlbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc2VsLmMKQEAgLTExLDcgKzExLDcgQEAKIAlGUF9ERUNMX0QoQSk7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CisJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnQuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydC5jCmluZGV4IDZmODMxOWYuLjM4ZWMyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydC5jCkBAIC0xMyw3ICsxMyw3IEBACiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJCKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKICNlbmRpZgogCiAJX19GUF9VTlBBQ0tfRChCLCBmckIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0cy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0cy5jCmluZGV4IDNiMmIxY2YuLjMzNTI2M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydHMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnRzLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckIpOworCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckIpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1Yi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWIuYwppbmRleCA5NTY2NzkwLi4yMDhkMjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1Yi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3ViLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZnJELCBmckEsIGZyQik7CisJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCiAJX19GUF9VTlBBQ0tfRChBLCBmckEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWJzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1YnMuYwppbmRleCAzNDI4MTE3Li4wZTYxYjgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1YnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1YnMuYwpAQCAtMTUsNyArMTUsNyBAQAogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBmckQsIGZyQSwgZnJCKTsKKwlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKIAlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZkLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZkLmMKaW5kZXggN2QzODEwMS4uNmVjOTBiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZmQuYwpAQCAtMTEsNyArMTEsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihmckQsIGVhLCBzaXplb2YoZG91YmxlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogRCAlcCwgZWEgJXA6ICIsIF9fRlVOQ1RJT05fXywgZnJELCBlYSk7CisJcHJpbnRrKCIlczogRCAlcCwgZWEgJXA6ICIsIF9fZnVuY19fLCBmckQsIGVhKTsKIAlkdW1wX2RvdWJsZShmckQpOwogCXByaW50aygiXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmcy5jCmluZGV4IGM4NmRlZTMuLjZmMThlYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZzLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAlmbG9hdCBmOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiBEICVwLCBlYSAlcFxuIiwgX19GVU5DVElPTl9fLCBmckQsIGVhKTsKKwlwcmludGsoIiVzOiBEICVwLCBlYSAlcFxuIiwgX19mdW5jX18sIGZyRCwgZWEpOwogI2VuZGlmCiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmYsIGVhLCBzaXplb2YoZmxvYXQpKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tY3Jmcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21jcmZzLmMKaW5kZXggMTA2ZGQ5MS4uNDFiYTI0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21jcmZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21jcmZzLmMKQEAgLTEwLDcgKzEwLDcgQEAKIAl1MzIgdmFsdWUsIGNsZWFyOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlcCAoJTA4eCkgJWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgY2NyLCAqY2NyLCBjcmZELCBjcmZTKTsKKwlwcmludGsoIiVzOiAlcCAoJTA4eCkgJWQgJWRcbiIsIF9fZnVuY19fLCBjY3IsICpjY3IsIGNyZkQsIGNyZlMpOwogI2VuZGlmCiAKIAljbGVhciA9IDE1IDw8ICgoNyAtIGNyZlMpIDw8IDIpOwpAQCAtMjQsNyArMjQsNyBAQAogCSpjY3IgfD0gKHZhbHVlIDw8ICgoNyAtIGNyZkQpIDw8IDIpKTsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJDUjogJTA4eFxuIiwgX19GVU5DVElPTl9fLCAqY2NyKTsKKwlwcmludGsoIkNSOiAlMDh4XG4iLCBfX2Z1bmNfXywgKmNjcik7CiAjZW5kaWYKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21mZnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tZmZzLmMKaW5kZXggZjQ3N2M5MS4uYjBlMjEwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21mZnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWZmcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAJZnJEWzFdID0gX19GUFVfRlBTQ1I7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6IGZyRCAlcDogJTA4eC4lMDh4XG4iLCBfX0ZVTkNUSU9OX18sIGZyRCwgZnJEWzBdLCBmckRbMV0pOworCXByaW50aygiJXM6IGZyRCAlcDogJTA4eC4lMDh4XG4iLCBfX2Z1bmNfXywgZnJELCBmckRbMF0sIGZyRFsxXSk7CiAjZW5kaWYKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMC5jCmluZGV4IDk5YmZkODAuLmQzMDYyMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjAuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IwLmMKQEAgLTExLDcgKzExLDcgQEAKIAkJX19GUFVfRlBTQ1IgJj0gfigxIDw8ICgzMSAtIGNyYkQpKTsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJWQgJTA4bHhcbiIsIF9fRlVOQ1RJT05fXywgY3JiRCwgX19GUFVfRlBTQ1IpOworCXByaW50aygiJXM6ICVkICUwOGx4XG4iLCBfX2Z1bmNfXywgY3JiRCwgX19GUFVfRlBTQ1IpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjEuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjEuYwppbmRleCAzZDllN2VkLi4yZTk0ODcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IxLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMS5jCkBAIC0xMSw3ICsxMSw3IEBACiAJCV9fRlBVX0ZQU0NSIHw9ICgxIDw8ICgzMSAtIGNyYkQpKTsKIAogI2lmZGVmIERFQlVHCi0JcHJpbnRrKCIlczogJWQgJTA4bHhcbiIsIF9fRlVOQ1RJT05fXywgY3JiRCwgX19GUFVfRlBTQ1IpOworCXByaW50aygiJXM6ICVkICUwOGx4XG4iLCBfX2Z1bmNfXywgY3JiRCwgX19GUFVfRlBTQ1IpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmLmMKaW5kZXggZDcwY2Y3MS4uNDgwMTRkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlfX0ZQVV9GUFNDUiB8PSAoZnJCWzFdICYgbWFzayk7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICUwMnggJXA6ICUwOGx4XG4iLCBfX0ZVTkNUSU9OX18sIEZNLCBmckIsIF9fRlBVX0ZQU0NSKTsKKwlwcmludGsoIiVzOiAlMDJ4ICVwOiAlMDhseFxuIiwgX19mdW5jX18sIEZNLCBmckIsIF9fRlBVX0ZQU0NSKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2ZpLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2ZpLmMKaW5kZXggNzFkZjg1NC4uMDMxZTIwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZmkuYwpAQCAtMTYsNyArMTYsNyBAQAogCV9fRlBVX0ZQU0NSIHw9IChJTU0gJiAweGYpIDw8ICgoNyAtIGNyZkQpIDw8IDIpOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIiVzOiAlZCAleDogJTA4bHhcbiIsIF9fRlVOQ1RJT05fXywgY3JmRCwgSU1NLCBfX0ZQVV9GUFNDUik7CisJcHJpbnRrKCIlczogJWQgJXg6ICUwOGx4XG4iLCBfX2Z1bmNfXywgY3JmRCwgSU1NLCBfX0ZQVV9GUFNDUik7CiAjZW5kaWYKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0ZmQuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZkLmMKaW5kZXggM2Y4YzI1NS4uMzNhMTY1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0ZmQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc3RmZC5jCkBAIC03LDcgKzcsNyBAQAogewogI2lmIDAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6IFMgJXAsIGVhICVwOiAiLCBfX0ZVTkNUSU9OX18sIGZyUywgZWEpOworCXByaW50aygiJXM6IFMgJXAsIGVhICVwOiAiLCBfX2Z1bmNfXywgZnJTLCBlYSk7CiAJZHVtcF9kb3VibGUoZnJTKTsKIAlwcmludGsoIlxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZpd3guYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZpd3guYwppbmRleCA5NWNhYWVlLi5mMTVhMzVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc3RmaXd4LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0Zml3eC5jCkBAIC02LDcgKzYsNyBAQAogc3RmaXd4KHUzMiAqZnJTLCB2b2lkICplYSkKIHsKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6ICVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyUywgZWEpOworCXByaW50aygiJXM6ICVwICVwXG4iLCBfX2Z1bmNfXywgZnJTLCBlYSk7CiAjZW5kaWYKIAogCWlmIChjb3B5X3RvX3VzZXIoZWEsICZmclNbMV0sIHNpemVvZihmclNbMV0pKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc3Rmcy5jCmluZGV4IGU4N2NhMjMuLjg2ODlhYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0ZnMuYwpAQCAtMTUsNyArMTUsNyBAQAogCWludCBlcnI7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiJXM6IFMgJXAsIGVhICVwXG4iLCBfX0ZVTkNUSU9OX18sIGZyUywgZWEpOworCXByaW50aygiJXM6IFMgJXAsIGVhICVwXG4iLCBfX2Z1bmNfXywgZnJTLCBlYSk7CiAjZW5kaWYKIAogCV9fRlBfVU5QQUNLX0QoQSwgZnJTKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCmluZGV4IDM4OTllYTkuLmNlY2JiYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwpAQCAtOTcsNyArOTcsNyBAQAogCXBoeXNfYWRkcl90IHA7CiAKIAl2ID0gS0VSTkVMQkFTRTsKLQlwID0gUFBDX01FTVNUQVJUOworCXAgPSAwOwogCXMgPSB0b3RhbF9sb3dtZW07CiAKIAlpZiAoX19tYXBfd2l0aG91dF9sdGxicykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDR4X21tdS5jCmluZGV4IDA0ZGMwODcuLjk1M2ZiOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQ0eF9tbXUuYwpAQCAtNjcsNyArNjcsNyBAQAogCiAJLyogUGluIGluIGVub3VnaCBUTEJzIHRvIGNvdmVyIGFueSBsb3dtZW0gbm90IGNvdmVyZWQgYnkgdGhlCiAJICogaW5pdGlhbCAyNTZNIG1hcHBpbmcgZXN0YWJsaXNoZWQgaW4gaGVhZF80NHguUyAqLwotCWZvciAoYWRkciA9IFBQQ19QSU5fU0laRTsgYWRkciA8IHRvdGFsX2xvd21lbTsKKwlmb3IgKGFkZHIgPSBQUENfUElOX1NJWkU7IGFkZHIgPCBsb3dtZW1fZW5kX2FkZHI7CiAJICAgICBhZGRyICs9IFBQQ19QSU5fU0laRSkKIAkJcHBjNDR4X3Bpbl90bGIoYWRkciArIFBBR0VfT0ZGU0VULCBhZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCmluZGV4IDQxNjQ5YTVkLi4xYzAwZTAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogRVhUUkFfQ0ZMQUdTCSs9IC1tbm8tbWluaW1hbC10b2MKIGVuZGlmCiAKLW9iai15CQkJCTo9IGZhdWx0Lm8gbWVtLm8gbG1iLm8gXAorb2JqLXkJCQkJOj0gZmF1bHQubyBtZW0ubyBcCiAJCQkJICAgaW5pdF8kKENPTkZJR19XT1JEX1NJWkUpLm8gXAogCQkJCSAgIHBndGFibGVfJChDT05GSUdfV09SRF9TSVpFKS5vIFwKIAkJCQkgICBtbXVfY29udGV4dF8kKENPTkZJR19XT1JEX1NJWkUpLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCmluZGV4IGM5M2E5NjYuLmFkYTI0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwpAQCAtNDksMTggKzQ5LDE1IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9ib290eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKKyNpbmNsdWRlICJtbXVfZGVjbC5oIgorCiBleHRlcm4gdm9pZCBsb2FkY2FtX2VudHJ5KHVuc2lnbmVkIGludCBpbmRleCk7CiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4OwogdW5zaWduZWQgaW50IG51bV90bGJjYW1fZW50cmllczsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fY2FtMCwgX19jYW0xLCBfX2NhbTI7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbF9sb3dtZW07Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX21heF9sb3dfbWVtb3J5OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0aWFsX21lbW9yeV9saW1pdDsKLSNkZWZpbmUgTUFYX0xPV19NRU0JQ09ORklHX0xPV01FTV9TSVpFCiAKICNkZWZpbmUgTlVNX1RMQkNBTVMJKDE2KQogCkBAIC0xNjUsMTUgKzE2MiwxNSBAQAogdm9pZCBfX2luaXQgY2FtX21hcGluX3JhbSh1bnNpZ25lZCBsb25nIGNhbTAsIHVuc2lnbmVkIGxvbmcgY2FtMSwKIAkJdW5zaWduZWQgbG9uZyBjYW0yKQogewotCXNldHRsYmNhbSgwLCBQQUdFX09GRlNFVCwgUFBDX01FTVNUQVJULCBjYW0wLCBfUEFHRV9LRVJORUwsIDApOworCXNldHRsYmNhbSgwLCBQQUdFX09GRlNFVCwgbWVtc3RhcnRfYWRkciwgY2FtMCwgX1BBR0VfS0VSTkVMLCAwKTsKIAl0bGJjYW1faW5kZXgrKzsKIAlpZiAoY2FtMSkgewogCQl0bGJjYW1faW5kZXgrKzsKLQkJc2V0dGxiY2FtKDEsIFBBR0VfT0ZGU0VUK2NhbTAsIFBQQ19NRU1TVEFSVCtjYW0wLCBjYW0xLCBfUEFHRV9LRVJORUwsIDApOworCQlzZXR0bGJjYW0oMSwgUEFHRV9PRkZTRVQrY2FtMCwgbWVtc3RhcnRfYWRkcitjYW0wLCBjYW0xLCBfUEFHRV9LRVJORUwsIDApOwogCX0KIAlpZiAoY2FtMikgewogCQl0bGJjYW1faW5kZXgrKzsKLQkJc2V0dGxiY2FtKDIsIFBBR0VfT0ZGU0VUK2NhbTArY2FtMSwgUFBDX01FTVNUQVJUK2NhbTArY2FtMSwgY2FtMiwgX1BBR0VfS0VSTkVMLCAwKTsKKwkJc2V0dGxiY2FtKDIsIFBBR0VfT0ZGU0VUK2NhbTArY2FtMSwgbWVtc3RhcnRfYWRkcitjYW0wK2NhbTEsIGNhbTIsIF9QQUdFX0tFUk5FTCwgMCk7CiAJfQogfQogCkBAIC0xOTYsMzUgKzE5MywzMiBAQAogdm9pZCBfX2luaXQKIGFkanVzdF90b3RhbF9sb3dtZW0odm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG1heF9sb3dfbWVtID0gTUFYX0xPV19NRU07Ci0JdW5zaWduZWQgbG9uZyBjYW1fbWF4ID0gMHgxMDAwMDAwMDsKLQl1bnNpZ25lZCBsb25nIHJhbTsKKwlwaHlzX2FkZHJfdCBtYXhfbG93bWVtX3NpemUgPSBfX21heF9sb3dfbWVtb3J5OworCXBoeXNfYWRkcl90IGNhbV9tYXhfc2l6ZSA9IDB4MTAwMDAwMDA7CisJcGh5c19hZGRyX3QgcmFtOwogCi0JLyogYWRqdXN0IENBTSBzaXplIHRvIG1heF9sb3dfbWVtICovCi0JaWYgKG1heF9sb3dfbWVtIDwgY2FtX21heCkKLQkJY2FtX21heCA9IG1heF9sb3dfbWVtOworCS8qIGFkanVzdCBDQU0gc2l6ZSB0byBtYXhfbG93bWVtX3NpemUgKi8KKwlpZiAobWF4X2xvd21lbV9zaXplIDwgY2FtX21heF9zaXplKQorCQljYW1fbWF4X3NpemUgPSBtYXhfbG93bWVtX3NpemU7CiAKLQkvKiBhZGp1c3QgbG93bWVtIHNpemUgdG8gbWF4X2xvd19tZW0gKi8KLQlpZiAobWF4X2xvd19tZW0gPCB0b3RhbF9sb3dtZW0pCi0JCXJhbSA9IG1heF9sb3dfbWVtOwotCWVsc2UKLQkJcmFtID0gdG90YWxfbG93bWVtOworCS8qIGFkanVzdCBsb3dtZW0gc2l6ZSB0byBtYXhfbG93bWVtX3NpemUgKi8KKwlyYW0gPSBtaW4obWF4X2xvd21lbV9zaXplLCB0b3RhbF9sb3dtZW0pOwogCiAJLyogQ2FsY3VsYXRlIENBTSB2YWx1ZXMgKi8KIAlfX2NhbTAgPSAxVUwgPDwgMiAqIChfX2lsb2cyKHJhbSkgLyAyKTsKLQlpZiAoX19jYW0wID4gY2FtX21heCkKLQkJX19jYW0wID0gY2FtX21heDsKKwlpZiAoX19jYW0wID4gY2FtX21heF9zaXplKQorCQlfX2NhbTAgPSBjYW1fbWF4X3NpemU7CiAJcmFtIC09IF9fY2FtMDsKIAlpZiAocmFtKSB7CiAJCV9fY2FtMSA9IDFVTCA8PCAyICogKF9faWxvZzIocmFtKSAvIDIpOwotCQlpZiAoX19jYW0xID4gY2FtX21heCkKLQkJCV9fY2FtMSA9IGNhbV9tYXg7CisJCWlmIChfX2NhbTEgPiBjYW1fbWF4X3NpemUpCisJCQlfX2NhbTEgPSBjYW1fbWF4X3NpemU7CiAJCXJhbSAtPSBfX2NhbTE7CiAJfQogCWlmIChyYW0pIHsKIAkJX19jYW0yID0gMVVMIDw8IDIgKiAoX19pbG9nMihyYW0pIC8gMik7Ci0JCWlmIChfX2NhbTIgPiBjYW1fbWF4KQotCQkJX19jYW0yID0gY2FtX21heDsKKwkJaWYgKF9fY2FtMiA+IGNhbV9tYXhfc2l6ZSkKKwkJCV9fY2FtMiA9IGNhbV9tYXhfc2l6ZTsKIAkJcmFtIC09IF9fY2FtMjsKIAl9CiAKQEAgLTIzMiw2ICsyMjYsNiBAQAogCQkJIiBDQU0yPSVsZE1iIHJlc2lkdWFsOiAlbGRNYlxuIiwKIAkJCV9fY2FtMCA+PiAyMCwgX19jYW0xID4+IDIwLCBfX2NhbTIgPj4gMjAsCiAJCQkodG90YWxfbG93bWVtIC0gX19jYW0wIC0gX19jYW0xIC0gX19jYW0yKSA+PiAyMCk7Ci0JX19tYXhfbG93X21lbW9yeSA9IG1heF9sb3dfbWVtID0gX19jYW0wICsgX19jYW0xICsgX19jYW0yOwotCV9faW5pdGlhbF9tZW1vcnlfbGltaXQgPSBfX21heF9sb3dfbWVtb3J5OworCV9fbWF4X2xvd19tZW1vcnkgPSBfX2NhbTAgKyBfX2NhbTEgKyBfX2NhbTI7CisJX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyID0gbWVtc3RhcnRfYWRkciArIF9fbWF4X2xvd19tZW1vcnk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCmluZGV4IDdmODMwYTQuLmUxMGQ3NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCkBAIC00NCw2ICs0NCw5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCS50ZXh0CiBfR0xPQkFMKGhhc2hfcGFnZV9zeW5jKQorCW1mbXNyICAgcjEwCisJcmx3aW5tICByMCxyMTAsMCwxNywxNSAgICAgICAgICAvKiBjbGVhciBiaXQgMTYgKE1TUl9FRSkgKi8KKwltdG1zciAgIHIwCiAJbGlzCXI4LG1tdV9oYXNoX2xvY2tAaAogCW9yaQlyOCxyOCxtbXVfaGFzaF9sb2NrQGwKIAlsaXMJcjAsMHgwZmZmCkBAIC02MCw4ICs2Myw5IEBACiAJZWllaW8KIAlsaQlyMCwwCiAJc3R3CXIwLDAocjgpCi0JYmxyCQotI2VuZGlmCisJbXRtc3IJcjEwCisJYmxyCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgogICogTG9hZCBhIFBURSBpbnRvIHRoZSBoYXNoIHRhYmxlLCBpZiBwb3NzaWJsZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDMyZjQxNjEuLjJiNWEzOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC00MSw3ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE5MSw2ICsxOTIsMjkgQEAKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKK3N0YXRpYyBpbnQgaHRhYl9yZW1vdmVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHZzdGFydCwgdW5zaWduZWQgbG9uZyB2ZW5kLAorCQkgICAgICBpbnQgcHNpemUsIGludCBzc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCXVuc2lnbmVkIGludCBzdGVwLCBzaGlmdDsKKworCXNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OworCXN0ZXAgPSAxIDw8IHNoaWZ0OworCisJaWYgKCFwcGNfbWQuaHB0ZV9yZW1vdmVib2x0ZWQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGxhdGZvcm0gZG9lc24ndCBpbXBsZW1lbnQgIgorCQkJCSJocHRlX3JlbW92ZWJvbHRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAodmFkZHIgPSB2c3RhcnQ7IHZhZGRyIDwgdmVuZDsgdmFkZHIgKz0gc3RlcCkKKwkJcHBjX21kLmhwdGVfcmVtb3ZlYm9sdGVkKHZhZGRyLCBwc2l6ZSwgc3NpemUpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCisKIHN0YXRpYyBpbnQgX19pbml0IGh0YWJfZHRfc2Nhbl9zZWdfc2l6ZXModW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKIAkJCQkJIHZvaWQgKmRhdGEpCkBAIC0zNTEsOSArMzc1LDE0IEBACiAJCW1tdV92bWFsbG9jX3BzaXplID0gTU1VX1BBR0VfNjRLOwogCQlpZiAobW11X2xpbmVhcl9wc2l6ZSA9PSBNTVVfUEFHRV80SykKIAkJCW1tdV9saW5lYXJfcHNpemUgPSBNTVVfUEFHRV82NEs7Ci0JCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKSkKLQkJCW1tdV9pb19wc2l6ZSA9IE1NVV9QQUdFXzY0SzsKLQkJZWxzZQorCQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkpIHsKKwkJCS8qCisJCQkgKiBEb24ndCB1c2UgNjRrIHBhZ2VzIGZvciBpb3JlbWFwIG9uIHBTZXJpZXMsIHNpbmNlCisJCQkgKiB0aGF0IHdvdWxkIHN0b3AgdXMgYWNjZXNzaW5nIHRoZSBIRUEgZXRoZXJuZXQuCisJCQkgKi8KKwkJCWlmICghbWFjaGluZV9pcyhwc2VyaWVzKSkKKwkJCQltbXVfaW9fcHNpemUgPSBNTVVfUEFHRV82NEs7CisJCX0gZWxzZQogCQkJbW11X2NpX3Jlc3RyaWN0aW9ucyA9IDE7CiAJfQogI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCkBAIC00MjksNiArNDU4LDEyIEBACiAJCQlfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQ09IRVJFTlQgfCBQUF9SV1hYLAogCQkJbW11X2xpbmVhcl9wc2l6ZSwgbW11X2tlcm5lbF9zc2l6ZSkpOwogfQorCitpbnQgcmVtb3ZlX3NlY3Rpb25fbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlyZXR1cm4gaHRhYl9yZW1vdmVfbWFwcGluZyhzdGFydCwgZW5kLCBtbXVfbGluZWFyX3BzaXplLAorCQkJbW11X2tlcm5lbF9zc2l6ZSk7Cit9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX2JsKHVuc2lnbmVkIGludCAqaW5zbl9hZGRyLCB2b2lkICpmdW5jKQpAQCAtNTA2LDEwICs1NDEsMTAgQEAKIAl9IGVsc2UgewogCQkvKiBGaW5kIHN0b3JhZ2UgZm9yIHRoZSBIUFQuICBNdXN0IGJlIGNvbnRpZ3VvdXMgaW4KIAkJICogdGhlIGFic29sdXRlIGFkZHJlc3Mgc3BhY2UuIE9uIGNlbGwgd2Ugd2FudCBpdCB0byBiZQotCQkgKiBpbiB0aGUgZmlyc3QgMSBHaWcuCisJCSAqIGluIHRoZSBmaXJzdCAyIEdpZyBzbyB3ZSBjYW4gdXNlIGl0IGZvciBJT01NVSBoYWNrcy4KIAkJICovCiAJCWlmIChtYWNoaW5lX2lzKGNlbGwpKQotCQkJbGltaXQgPSAweDQwMDAwMDAwOworCQkJbGltaXQgPSAweDgwMDAwMDAwOwogCQllbHNlCiAJCQlsaW1pdCA9IDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IDk3N2NiMWUuLjQ3MzI1ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vYnRleHQuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjaW5jbHVkZSAibW11X2RlY2wuaCIKQEAgLTU5LDggKzU5LDggQEAKIHVuc2lnbmVkIGxvbmcgdG90YWxfbWVtb3J5OwogdW5zaWduZWQgbG9uZyB0b3RhbF9sb3dtZW07CiAKLXVuc2lnbmVkIGxvbmcgcHBjX21lbXN0YXJ0OwotdW5zaWduZWQgbG9uZyBwcGNfbWVtb2Zmc2V0ID0gUEFHRV9PRkZTRVQ7CitwaHlzX2FkZHJfdCBtZW1zdGFydF9hZGRyOworcGh5c19hZGRyX3QgbG93bWVtX2VuZF9hZGRyOwogCiBpbnQgYm9vdF9tYXBzaXplOwogI2lmZGVmIENPTkZJR19QUENfUE1BQwpAQCAtOTUsMTAgKzk1LDEwIEBACiB1bnNpZ25lZCBsb25nIF9fbWF4X2xvd19tZW1vcnkgPSBNQVhfTE9XX01FTTsKIAogLyoKLSAqIGxpbWl0IG9mIHdoYXQgaXMgYWNjZXNzaWJsZSB3aXRoIGluaXRpYWwgTU1VIHNldHVwIC0KKyAqIGFkZHJlc3Mgb2YgdGhlIGxpbWl0IG9mIHdoYXQgaXMgYWNjZXNzaWJsZSB3aXRoIGluaXRpYWwgTU1VIHNldHVwIC0KICAqIDI1Nk1CIHVzdWFsbHksIGJ1dCBvbmx5IDE2TUIgb24gNjAxLgogICovCi11bnNpZ25lZCBsb25nIF9faW5pdGlhbF9tZW1vcnlfbGltaXQgPSAweDEwMDAwMDAwOworcGh5c19hZGRyX3QgX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyID0gKHBoeXNfYWRkcl90KTB4MTAwMDAwMDA7CiAKIC8qCiAgKiBDaGVjayBmb3IgY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCBhZmZlY3Qgd2hhdCBNTVVfaW5pdCB3aWxsIGRvLgpAQCAtMTMxLDEwICsxMzEsMTAgQEAKIAogCS8qIDYwMSBjYW4gb25seSBhY2Nlc3MgMTZNQiBhdCB0aGUgbW9tZW50ICovCiAJaWYgKFBWUl9WRVIobWZzcHIoU1BSTl9QVlIpKSA9PSAxKQotCQlfX2luaXRpYWxfbWVtb3J5X2xpbWl0ID0gMHgwMTAwMDAwMDsKKwkJX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyID0gMHgwMTAwMDAwMDsKIAkvKiA4eHggY2FuIG9ubHkgYWNjZXNzIDhNQiBhdCB0aGUgbW9tZW50ICovCiAJaWYgKFBWUl9WRVIobWZzcHIoU1BSTl9QVlIpKSA9PSAweDUwKQotCQlfX2luaXRpYWxfbWVtb3J5X2xpbWl0ID0gMHgwMDgwMDAwMDsKKwkJX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyID0gMHgwMDgwMDAwMDsKIAogCS8qIHBhcnNlIGFyZ3MgZnJvbSBjb21tYW5kIGxpbmUgKi8KIAlNTVVfc2V0dXAoKTsKQEAgLTE0NSw4ICsxNDUsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJPbmx5IHVzaW5nIGZpcnN0IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiIpOwogCX0KIAotCXRvdGFsX21lbW9yeSA9IGxtYl9lbmRfb2ZfRFJBTSgpOwotCXRvdGFsX2xvd21lbSA9IHRvdGFsX21lbW9yeTsKKwl0b3RhbF9sb3dtZW0gPSB0b3RhbF9tZW1vcnkgPSBsbWJfZW5kX29mX0RSQU0oKSAtIG1lbXN0YXJ0X2FkZHI7CisJbG93bWVtX2VuZF9hZGRyID0gbWVtc3RhcnRfYWRkciArIHRvdGFsX2xvd21lbTsKIAogI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKIAkvKiBGcmVlc2NhbGUgQm9vay1FIHBhcnRzIGV4cGVjdCBsb3dtZW0gdG8gYmUgbWFwcGVkIGJ5IGZpeGVkIFRMQgpAQCAtMTU3LDkgKzE1NywxMCBAQAogCiAJaWYgKHRvdGFsX2xvd21lbSA+IF9fbWF4X2xvd19tZW1vcnkpIHsKIAkJdG90YWxfbG93bWVtID0gX19tYXhfbG93X21lbW9yeTsKKwkJbG93bWVtX2VuZF9hZGRyID0gbWVtc3RhcnRfYWRkciArIHRvdGFsX2xvd21lbTsKICNpZm5kZWYgQ09ORklHX0hJR0hNRU0KIAkJdG90YWxfbWVtb3J5ID0gdG90YWxfbG93bWVtOwotCQlsbWJfZW5mb3JjZV9tZW1vcnlfbGltaXQodG90YWxfbG93bWVtKTsKKwkJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxvd21lbV9lbmRfYWRkcik7CiAJCWxtYl9hbmFseXplKCk7CiAjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KIAl9CkBAIC0xODQsOCArMTg1LDYgQEAKIAkvKiBNYXAgaW4gSS9PIHJlc291cmNlcyAqLwogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygiTU1VOnNldGlvIiwgMHgzMDIpOwotCWlmIChwcGNfbWQuc2V0dXBfaW9fbWFwcGluZ3MpCi0JCXBwY19tZC5zZXR1cF9pb19tYXBwaW5ncygpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHN0dWZmICovCiAJbW11X2NvbnRleHRfaW5pdCgpOwpAQCAtMjA4LDcgKzIwNyw3IEBACiAJCXAgPSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAJfSBlbHNlIHsKIAkJcCA9IF9fdmEobG1iX2FsbG9jX2Jhc2UoUEFHRV9TSVpFLCBQQUdFX1NJWkUsCi0JCQkJCV9faW5pdGlhbF9tZW1vcnlfbGltaXQpKTsKKwkJCQkJX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyKSk7CiAJfQogCXJldHVybiBwOwogfQpAQCAtMjc2LDcgKzI3NSw3IEBACiAKIAkJa2NvcmVfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtjb3JlX2xpc3QpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFrY29yZV9tZW0pCi0JCQlwYW5pYygiJXM6IGttYWxsb2MgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcGFuaWMoIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCiAJCS8qIG11c3Qgc3RheSB1bmRlciAzMiBiaXRzICovCiAJCWlmICggMHhmZmZmZmZmZnVsIC0gKHVuc2lnbmVkIGxvbmcpX192YShiYXNlKSA8IHNpemUpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IGMwZjVjZmYuLjY5OGJkMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMzgsMTEgKzM4LDExIEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2lzb24uaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtNzIsOCArNzIsNyBAQAogI3dhcm5pbmcgVEFTS19TSVpFIGlzIHNtYWxsZXIgdGhhbiBpdCBuZWVkcyB0byBiZS4KICNlbmRpZgogCi0vKiBtYXggYW1vdW50IG9mIFJBTSB0byB1c2UgKi8KLXVuc2lnbmVkIGxvbmcgX19tYXhfbWVtb3J5OworcGh5c19hZGRyX3QgbWVtc3RhcnRfYWRkcjsKIAogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKIHsKQEAgLTEyMiw3ICsxMjEsNyBAQAogCQkvKiBHRlBfQVRPTUlDIHRvIGF2b2lkIG1pZ2h0X3NsZWVwIHdhcm5pbmdzIGR1cmluZyBib290ICovCiAJCWtjb3JlX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrY29yZV9saXN0KSwgR0ZQX0FUT01JQyk7CiAJCWlmICgha2NvcmVfbWVtKQotCQkJcGFuaWMoIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXBhbmljKCIlczoga21hbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAogCQlrY2xpc3RfYWRkKGtjb3JlX21lbSwgX192YShiYXNlKSwgc2l6ZSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2xtYi5jIGIvYXJjaC9wb3dlcnBjL21tL2xtYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2UyM2JjLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9sbWIuYworKysgL2Rldi9udWxsCkBAIC0xLDM1NyArMCwwIEBACi0vKgotICogUHJvY2VkdXJlcyBmb3IgbWFpbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgbG9naWNhbCBtZW1vcnkgYmxvY2tzLgotICoKLSAqIFBldGVyIEJlcmduZXIsIElCTSBDb3JwLglKdW5lIDIwMDEuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgQmVyZ25lci4KLSAqIAotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9sbWIuaD4KLSNpZmRlZiBDT05GSUdfUFBDMzIKLSNpbmNsdWRlICJtbXVfZGVjbC5oIgkJLyogZm9yIF9fbWF4X2xvd19tZW1vcnkgKi8KLSNlbmRpZgotCi0jdW5kZWYgREVCVUcKLQotI2lmZGVmIERFQlVHCi0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNkZWZpbmUgREJHKGZtdC4uLikgdWRiZ19wcmludGYoZm10KQotI2Vsc2UKLSNkZWZpbmUgREJHKGZtdC4uLikKLSNlbmRpZgotCi0jZGVmaW5lIExNQl9BTExPQ19BTllXSEVSRQkwCi0KLXN0cnVjdCBsbWIgbG1iOwotCi12b2lkIGxtYl9kdW1wX2FsbCh2b2lkKQotewotI2lmZGVmIERFQlVHCi0JdW5zaWduZWQgbG9uZyBpOwotCi0JREJHKCJsbWJfZHVtcF9hbGw6XG4iKTsKLQlEQkcoIiAgICBtZW1vcnkuY250CQkgID0gMHglbHhcbiIsIGxtYi5tZW1vcnkuY250KTsKLQlEQkcoIiAgICBtZW1vcnkuc2l6ZQkJICA9IDB4JWx4XG4iLCBsbWIubWVtb3J5LnNpemUpOwotCWZvciAoaT0wOyBpIDwgbG1iLm1lbW9yeS5jbnQgO2krKykgewotCQlEQkcoIiAgICBtZW1vcnkucmVnaW9uWzB4JXhdLmJhc2UgICAgICAgPSAweCVseFxuIiwKLQkJCSAgICBpLCBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlKTsKLQkJREJHKCIJCSAgICAgIC5zaXplICAgICA9IDB4JWx4XG4iLAotCQkJICAgIGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemUpOwotCX0KLQotCURCRygiXG4gICAgcmVzZXJ2ZWQuY250CSAgPSAweCVseFxuIiwgbG1iLnJlc2VydmVkLmNudCk7Ci0JREJHKCIgICAgcmVzZXJ2ZWQuc2l6ZQkgID0gMHglbHhcbiIsIGxtYi5yZXNlcnZlZC5zaXplKTsKLQlmb3IgKGk9MDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQgO2krKykgewotCQlEQkcoIiAgICByZXNlcnZlZC5yZWdpb25bMHgleF0uYmFzZSAgICAgICA9IDB4JWx4XG4iLAotCQkJICAgIGksIGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSk7Ci0JCURCRygiCQkgICAgICAuc2l6ZSAgICAgPSAweCVseFxuIiwKLQkJCSAgICBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemUpOwotCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgbG1iX2FkZHJzX292ZXJsYXAodW5zaWduZWQgbG9uZyBiYXNlMSwKLQkJdW5zaWduZWQgbG9uZyBzaXplMSwgdW5zaWduZWQgbG9uZyBiYXNlMiwgdW5zaWduZWQgbG9uZyBzaXplMikKLXsKLQlyZXR1cm4gKChiYXNlMSA8IChiYXNlMitzaXplMikpICYmIChiYXNlMiA8IChiYXNlMStzaXplMSkpKTsKLX0KLQotc3RhdGljIGxvbmcgX19pbml0IGxtYl9hZGRyc19hZGphY2VudCh1bnNpZ25lZCBsb25nIGJhc2UxLCB1bnNpZ25lZCBsb25nIHNpemUxLAotCQl1bnNpZ25lZCBsb25nIGJhc2UyLCB1bnNpZ25lZCBsb25nIHNpemUyKQotewotCWlmIChiYXNlMiA9PSBiYXNlMSArIHNpemUxKQotCQlyZXR1cm4gMTsKLQllbHNlIGlmIChiYXNlMSA9PSBiYXNlMiArIHNpemUyKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGxvbmcgX19pbml0IGxtYl9yZWdpb25zX2FkamFjZW50KHN0cnVjdCBsbWJfcmVnaW9uICpyZ24sCi0JCXVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpCi17Ci0JdW5zaWduZWQgbG9uZyBiYXNlMSA9IHJnbi0+cmVnaW9uW3IxXS5iYXNlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTEgPSByZ24tPnJlZ2lvbltyMV0uc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGJhc2UyID0gcmduLT5yZWdpb25bcjJdLmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBzaXplMiA9IHJnbi0+cmVnaW9uW3IyXS5zaXplOwotCi0JcmV0dXJuIGxtYl9hZGRyc19hZGphY2VudChiYXNlMSwgc2l6ZTEsIGJhc2UyLCBzaXplMik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBsbWJfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLCB1bnNpZ25lZCBsb25nIHIpCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0JZm9yIChpID0gcjsgaSA8IHJnbi0+Y250IC0gMTsgaSsrKSB7Ci0JCXJnbi0+cmVnaW9uW2ldLmJhc2UgPSByZ24tPnJlZ2lvbltpICsgMV0uYmFzZTsKLQkJcmduLT5yZWdpb25baV0uc2l6ZSA9IHJnbi0+cmVnaW9uW2kgKyAxXS5zaXplOwotCX0KLQlyZ24tPmNudC0tOwotfQotCi0vKiBBc3N1bXB0aW9uOiBiYXNlIGFkZHIgb2YgcmVnaW9uIDEgPCBiYXNlIGFkZHIgb2YgcmVnaW9uIDIgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBsbWJfY29hbGVzY2VfcmVnaW9ucyhzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLAotCQl1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKQotewotCXJnbi0+cmVnaW9uW3IxXS5zaXplICs9IHJnbi0+cmVnaW9uW3IyXS5zaXplOwotCWxtYl9yZW1vdmVfcmVnaW9uKHJnbiwgcjIpOwotfQotCi0vKiBUaGlzIHJvdXRpbmUgY2FsbGVkIHdpdGggcmVsb2NhdGlvbiBkaXNhYmxlZC4gKi8KLXZvaWQgX19pbml0IGxtYl9pbml0KHZvaWQpCi17Ci0JLyogQ3JlYXRlIGEgZHVtbXkgemVybyBzaXplIExNQiB3aGljaCB3aWxsIGdldCBjb2FsZXNjZWQgYXdheSBsYXRlci4KLQkgKiBUaGlzIHNpbXBsaWZpZXMgdGhlIGxtYl9hZGQoKSBjb2RlIGJlbG93Li4uCi0JICovCi0JbG1iLm1lbW9yeS5yZWdpb25bMF0uYmFzZSA9IDA7Ci0JbG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZSA9IDA7Ci0JbG1iLm1lbW9yeS5jbnQgPSAxOwotCi0JLyogRGl0dG8uICovCi0JbG1iLnJlc2VydmVkLnJlZ2lvblswXS5iYXNlID0gMDsKLQlsbWIucmVzZXJ2ZWQucmVnaW9uWzBdLnNpemUgPSAwOwotCWxtYi5yZXNlcnZlZC5jbnQgPSAxOwotfQotCi0vKiBUaGlzIHJvdXRpbmUgbWF5IGJlIGNhbGxlZCB3aXRoIHJlbG9jYXRpb24gZGlzYWJsZWQuICovCi12b2lkIF9faW5pdCBsbWJfYW5hbHl6ZSh2b2lkKQotewotCWludCBpOwotCi0JbG1iLm1lbW9yeS5zaXplID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBsbWIubWVtb3J5LmNudDsgaSsrKQotCQlsbWIubWVtb3J5LnNpemUgKz0gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKLX0KLQotLyogVGhpcyByb3V0aW5lIGNhbGxlZCB3aXRoIHJlbG9jYXRpb24gZGlzYWJsZWQuICovCi1zdGF0aWMgbG9uZyBfX2luaXQgbG1iX2FkZF9yZWdpb24oc3RydWN0IGxtYl9yZWdpb24gKnJnbiwgdW5zaWduZWQgbG9uZyBiYXNlLAotCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgY29hbGVzY2VkID0gMDsKLQlsb25nIGFkamFjZW50LCBpOwotCi0JLyogRmlyc3QgdHJ5IGFuZCBjb2FsZXNjZSB0aGlzIExNQiB3aXRoIGFub3RoZXIuICovCi0JZm9yIChpPTA7IGkgPCByZ24tPmNudDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcmduYmFzZSA9IHJnbi0+cmVnaW9uW2ldLmJhc2U7Ci0JCXVuc2lnbmVkIGxvbmcgcmduc2l6ZSA9IHJnbi0+cmVnaW9uW2ldLnNpemU7Ci0KLQkJaWYgKChyZ25iYXNlID09IGJhc2UpICYmIChyZ25zaXplID09IHNpemUpKQotCQkJLyogQWxyZWFkeSBoYXZlIHRoaXMgcmVnaW9uLCBzbyB3ZSdyZSBkb25lICovCi0JCQlyZXR1cm4gMDsKLQotCQlhZGphY2VudCA9IGxtYl9hZGRyc19hZGphY2VudChiYXNlLHNpemUscmduYmFzZSxyZ25zaXplKTsKLQkJaWYgKCBhZGphY2VudCA+IDAgKSB7Ci0JCQlyZ24tPnJlZ2lvbltpXS5iYXNlIC09IHNpemU7Ci0JCQlyZ24tPnJlZ2lvbltpXS5zaXplICs9IHNpemU7Ci0JCQljb2FsZXNjZWQrKzsKLQkJCWJyZWFrOwotCQl9Ci0JCWVsc2UgaWYgKCBhZGphY2VudCA8IDAgKSB7Ci0JCQlyZ24tPnJlZ2lvbltpXS5zaXplICs9IHNpemU7Ci0JCQljb2FsZXNjZWQrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKChpIDwgcmduLT5jbnQtMSkgJiYgbG1iX3JlZ2lvbnNfYWRqYWNlbnQocmduLCBpLCBpKzEpICkgewotCQlsbWJfY29hbGVzY2VfcmVnaW9ucyhyZ24sIGksIGkrMSk7Ci0JCWNvYWxlc2NlZCsrOwotCX0KLQotCWlmIChjb2FsZXNjZWQpCi0JCXJldHVybiBjb2FsZXNjZWQ7Ci0JaWYgKHJnbi0+Y250ID49IE1BWF9MTUJfUkVHSU9OUykKLQkJcmV0dXJuIC0xOwotCi0JLyogQ291bGRuJ3QgY29hbGVzY2UgdGhlIExNQiwgc28gYWRkIGl0IHRvIHRoZSBzb3J0ZWQgdGFibGUuICovCi0JZm9yIChpID0gcmduLT5jbnQtMTsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKGJhc2UgPCByZ24tPnJlZ2lvbltpXS5iYXNlKSB7Ci0JCQlyZ24tPnJlZ2lvbltpKzFdLmJhc2UgPSByZ24tPnJlZ2lvbltpXS5iYXNlOwotCQkJcmduLT5yZWdpb25baSsxXS5zaXplID0gcmduLT5yZWdpb25baV0uc2l6ZTsKLQkJfSBlbHNlIHsKLQkJCXJnbi0+cmVnaW9uW2krMV0uYmFzZSA9IGJhc2U7Ci0JCQlyZ24tPnJlZ2lvbltpKzFdLnNpemUgPSBzaXplOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmduLT5jbnQrKzsKLQotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIHJvdXRpbmUgbWF5IGJlIGNhbGxlZCB3aXRoIHJlbG9jYXRpb24gZGlzYWJsZWQuICovCi1sb25nIF9faW5pdCBsbWJfYWRkKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXN0cnVjdCBsbWJfcmVnaW9uICpfcmduID0gJihsbWIubWVtb3J5KTsKLQotCS8qIE9uIHBTZXJpZXMgTFBBUiBzeXN0ZW1zLCB0aGUgZmlyc3QgTE1CIGlzIG91ciBSTU8gcmVnaW9uLiAqLwotCWlmIChiYXNlID09IDApCi0JCWxtYi5ybW9fc2l6ZSA9IHNpemU7Ci0KLQlyZXR1cm4gbG1iX2FkZF9yZWdpb24oX3JnbiwgYmFzZSwgc2l6ZSk7Ci0KLX0KLQotbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0Jc3RydWN0IGxtYl9yZWdpb24gKl9yZ24gPSAmKGxtYi5yZXNlcnZlZCk7Ci0KLQlCVUdfT04oMCA9PSBzaXplKTsKLQotCXJldHVybiBsbWJfYWRkX3JlZ2lvbihfcmduLCBiYXNlLCBzaXplKTsKLX0KLQotbG9uZyBfX2luaXQgbG1iX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLCB1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkJdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWZvciAoaT0wOyBpIDwgcmduLT5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHJnbmJhc2UgPSByZ24tPnJlZ2lvbltpXS5iYXNlOwotCQl1bnNpZ25lZCBsb25nIHJnbnNpemUgPSByZ24tPnJlZ2lvbltpXS5zaXplOwotCQlpZiAoIGxtYl9hZGRyc19vdmVybGFwKGJhc2Usc2l6ZSxyZ25iYXNlLHJnbnNpemUpICkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKGkgPCByZ24tPmNudCkgPyBpIDogLTE7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCi17Ci0JcmV0dXJuIGxtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBMTUJfQUxMT0NfQU5ZV0hFUkUpOwotfQotCi11bnNpZ25lZCBsb25nIF9faW5pdCBsbWJfYWxsb2NfYmFzZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgbWF4X2FkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyBhbGxvYzsKLQotCWFsbG9jID0gX19sbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgbWF4X2FkZHIpOwotCi0JaWYgKGFsbG9jID09IDApCi0JCXBhbmljKCJFUlJPUjogRmFpbGVkIHRvIGFsbG9jYXRlIDB4JWx4IGJ5dGVzIGJlbG93IDB4JWx4LlxuIiwKLQkJCQlzaXplLCBtYXhfYWRkcik7Ci0KLQlyZXR1cm4gYWxsb2M7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IF9fbG1iX2FsbG9jX2Jhc2UodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIG1heF9hZGRyKQotewotCWxvbmcgaSwgajsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSAwOwotCi0JQlVHX09OKDAgPT0gc2l6ZSk7Ci0KLSNpZmRlZiBDT05GSUdfUFBDMzIKLQkvKiBPbiAzMi1iaXQsIG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBsb3dtZW0gKi8KLQlpZiAobWF4X2FkZHIgPT0gTE1CX0FMTE9DX0FOWVdIRVJFKQotCQltYXhfYWRkciA9IF9fbWF4X2xvd19tZW1vcnk7Ci0jZW5kaWYKLQlmb3IgKGkgPSBsbWIubWVtb3J5LmNudC0xOyBpID49IDA7IGktLSkgewotCQl1bnNpZ25lZCBsb25nIGxtYmJhc2UgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOwotCQl1bnNpZ25lZCBsb25nIGxtYnNpemUgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplOwotCi0JCWlmIChtYXhfYWRkciA9PSBMTUJfQUxMT0NfQU5ZV0hFUkUpCi0JCQliYXNlID0gX0FMSUdOX0RPV04obG1iYmFzZSArIGxtYnNpemUgLSBzaXplLCBhbGlnbik7Ci0JCWVsc2UgaWYgKGxtYmJhc2UgPCBtYXhfYWRkcikgewotCQkJYmFzZSA9IG1pbihsbWJiYXNlICsgbG1ic2l6ZSwgbWF4X2FkZHIpOwotCQkJYmFzZSA9IF9BTElHTl9ET1dOKGJhc2UgLSBzaXplLCBhbGlnbik7Ci0JCX0gZWxzZQotCQkJY29udGludWU7Ci0KLQkJd2hpbGUgKChsbWJiYXNlIDw9IGJhc2UpICYmCi0JCSAgICAgICAoKGogPSBsbWJfb3ZlcmxhcHNfcmVnaW9uKCZsbWIucmVzZXJ2ZWQsIGJhc2UsIHNpemUpKSA+PSAwKSApCi0JCQliYXNlID0gX0FMSUdOX0RPV04obG1iLnJlc2VydmVkLnJlZ2lvbltqXS5iYXNlIC0gc2l6ZSwKLQkJCQkJICAgYWxpZ24pOwotCi0JCWlmICgoYmFzZSAhPSAwKSAmJiAobG1iYmFzZSA8PSBiYXNlKSkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQlsbWJfYWRkX3JlZ2lvbigmbG1iLnJlc2VydmVkLCBiYXNlLCBzaXplKTsKLQotCXJldHVybiBiYXNlOwotfQotCi0vKiBZb3UgbXVzdCBjYWxsIGxtYl9hbmFseXplKCkgYmVmb3JlIHRoaXMuICovCi11bnNpZ25lZCBsb25nIF9faW5pdCBsbWJfcGh5c19tZW1fc2l6ZSh2b2lkKQotewotCXJldHVybiBsbWIubWVtb3J5LnNpemU7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9lbmRfb2ZfRFJBTSh2b2lkKQotewotCWludCBpZHggPSBsbWIubWVtb3J5LmNudCAtIDE7Ci0KLQlyZXR1cm4gKGxtYi5tZW1vcnkucmVnaW9uW2lkeF0uYmFzZSArIGxtYi5tZW1vcnkucmVnaW9uW2lkeF0uc2l6ZSk7Ci19Ci0KLS8qIFlvdSBtdXN0IGNhbGwgbG1iX2FuYWx5emUoKSBhZnRlciB0aGlzLiAqLwotdm9pZCBfX2luaXQgbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHVuc2lnbmVkIGxvbmcgbWVtb3J5X2xpbWl0KQotewotCXVuc2lnbmVkIGxvbmcgaSwgbGltaXQ7Ci0Jc3RydWN0IGxtYl9wcm9wZXJ0eSAqcDsKLQotCWlmICghIG1lbW9yeV9saW1pdCkKLQkJcmV0dXJuOwotCi0JLyogVHJ1bmNhdGUgdGhlIGxtYiByZWdpb25zIHRvIHNhdGlzZnkgdGhlIG1lbW9yeSBsaW1pdC4gKi8KLQlsaW1pdCA9IG1lbW9yeV9saW1pdDsKLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewotCQlpZiAobGltaXQgPiBsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplKSB7Ci0JCQlsaW1pdCAtPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplID0gbGltaXQ7Ci0JCWxtYi5tZW1vcnkuY250ID0gaSArIDE7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChsbWIubWVtb3J5LnJlZ2lvblswXS5zaXplIDwgbG1iLnJtb19zaXplKQotCQlsbWIucm1vX3NpemUgPSBsbWIubWVtb3J5LnJlZ2lvblswXS5zaXplOwotCi0JLyogQW5kIHRydW5jYXRlIGFueSByZXNlcnZlcyBhYm92ZSB0aGUgbGltaXQgYWxzby4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7Ci0JCXAgPSAmbG1iLnJlc2VydmVkLnJlZ2lvbltpXTsKLQotCQlpZiAocC0+YmFzZSA+IG1lbW9yeV9saW1pdCkKLQkJCXAtPnNpemUgPSAwOwotCQllbHNlIGlmICgocC0+YmFzZSArIHAtPnNpemUpID4gbWVtb3J5X2xpbWl0KQotCQkJcC0+c2l6ZSA9IG1lbW9yeV9saW1pdCAtIHAtPmJhc2U7Ci0KLQkJaWYgKHAtPnNpemUgPT0gMCkgewotCQkJbG1iX3JlbW92ZV9yZWdpb24oJmxtYi5yZXNlcnZlZCwgaSk7Ci0JCQlpLS07Ci0JCX0KLQl9Ci19Ci0KLWludCBfX2luaXQgbG1iX2lzX3Jlc2VydmVkKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBsbWIucmVzZXJ2ZWQuY250OyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyB1cHBlciA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSArCi0JCQkJICAgICAgbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5zaXplIC0gMTsKLQkJaWYgKChhZGRyID49IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSkgJiYgKGFkZHIgPD0gdXBwZXIpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IGJlNWM1MDYuLjE2ZGVmNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2J0ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgotI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vdmRzby5oPgogCkBAIC0xMTEsNyArMTExLDcgQEAKIH0KICNlbmRpZgogCi1pbnQgX19kZXZpbml0IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplKQoraW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXRhOwogCXN0cnVjdCB6b25lICp6b25lOwpAQCAtMTc1LDcgKzE3NSw2IEBACiAKIAlwcmludGsoIk1lbS1pbmZvOlxuIik7CiAJc2hvd19mcmVlX2FyZWFzKCk7Ci0JcHJpbnRrKCJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwgbnJfc3dhcF9wYWdlczw8KFBBR0VfU0hJRlQtMTApKTsKIAlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJcGdkYXRfcmVzaXplX2xvY2socGdkYXQsICZmbGFncyk7CkBAIC0yMTcsOSArMjE2LDExIEBACiAJdW5zaWduZWQgbG9uZyB0b3RhbF9wYWdlczsKIAlpbnQgYm9vdF9tYXBzaXplOwogCi0JbWF4X3BmbiA9IHRvdGFsX3BhZ2VzID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKKwltYXhfcGZuID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKKwl0b3RhbF9wYWdlcyA9IChsbWJfZW5kX29mX0RSQU0oKSAtIG1lbXN0YXJ0X2FkZHIpID4+IFBBR0VfU0hJRlQ7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAl0b3RhbF9wYWdlcyA9IHRvdGFsX2xvd21lbSA+PiBQQUdFX1NISUZUOworCW1heF9sb3dfcGZuID0gbG93bWVtX2VuZF9hZGRyID4+IFBBR0VfU0hJRlQ7CiAjZW5kaWYKIAogCS8qCkBAIC0yNDUsMTggKzI0NiwxOCBAQAogCSAqIHByZXNlbnQuCiAJICovCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucygwLCB0b3RhbF9sb3dtZW0gPj4gUEFHRV9TSElGVCk7CisJZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCwgbG93bWVtX2VuZF9hZGRyID4+IFBBR0VfU0hJRlQpOwogCiAJLyogcmVzZXJ2ZSB0aGUgc2VjdGlvbnMgd2UncmUgYWxyZWFkeSB1c2luZyAqLwogCWZvciAoaSA9IDA7IGkgPCBsbWIucmVzZXJ2ZWQuY250OyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlICsKIAkJCQkgICAgIGxtYl9zaXplX2J5dGVzKCZsbWIucmVzZXJ2ZWQsIGkpIC0gMTsKLQkJaWYgKGFkZHIgPCB0b3RhbF9sb3dtZW0pCisJCWlmIChhZGRyIDwgbG93bWVtX2VuZF9hZGRyKQogCQkJcmVzZXJ2ZV9ib290bWVtKGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSwKIAkJCQkJbG1iX3NpemVfYnl0ZXMoJmxtYi5yZXNlcnZlZCwgaSksCiAJCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0JCWVsc2UgaWYgKGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSA8IHRvdGFsX2xvd21lbSkgewotCQkJdW5zaWduZWQgbG9uZyBhZGp1c3RlZF9zaXplID0gdG90YWxfbG93bWVtIC0KKwkJZWxzZSBpZiAobG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlIDwgbG93bWVtX2VuZF9hZGRyKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkanVzdGVkX3NpemUgPSBsb3dtZW1fZW5kX2FkZHIgLQogCQkJCSAgICAgIGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZTsKIAkJCXJlc2VydmVfYm9vdG1lbShsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UsCiAJCQkJCWFkanVzdGVkX3NpemUsIEJPT1RNRU1fREVGQVVMVCk7CkBAIC0zMjYsNyArMzI3LDcgQEAKIAkgICAgICAgKHRvcF9vZl9yYW0gLSB0b3RhbF9yYW0pID4+IDIwKTsKIAltZW1zZXQobWF4X3pvbmVfcGZucywgMCwgc2l6ZW9mKG1heF96b25lX3BmbnMpKTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCW1heF96b25lX3BmbnNbWk9ORV9ETUFdID0gdG90YWxfbG93bWVtID4+IFBBR0VfU0hJRlQ7CisJbWF4X3pvbmVfcGZuc1taT05FX0RNQV0gPSBsb3dtZW1fZW5kX2FkZHIgPj4gUEFHRV9TSElGVDsKIAltYXhfem9uZV9wZm5zW1pPTkVfSElHSE1FTV0gPSB0b3Bfb2ZfcmFtID4+IFBBR0VfU0hJRlQ7CiAjZWxzZQogCW1heF96b25lX3BmbnNbWk9ORV9ETUFdID0gdG9wX29mX3JhbSA+PiBQQUdFX1NISUZUOwpAQCAtMzgxLDcgKzM4Miw3IEBACiAJewogCQl1bnNpZ25lZCBsb25nIHBmbiwgaGlnaG1lbV9tYXBucjsKIAotCQloaWdobWVtX21hcG5yID0gdG90YWxfbG93bWVtID4+IFBBR0VfU0hJRlQ7CisJCWhpZ2htZW1fbWFwbnIgPSBsb3dtZW1fZW5kX2FkZHIgPj4gUEFHRV9TSElGVDsKIAkJZm9yIChwZm4gPSBoaWdobWVtX21hcG5yOyBwZm4gPCBtYXhfbWFwbnI7ICsrcGZuKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJCQlpZiAobG1iX2lzX3Jlc2VydmVkKHBmbiA8PCBQQUdFX1NISUZUKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oIGIvYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmgKaW5kZXggZWJmZDEzZC4uMDQ4MDIyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmgKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmgKQEAgLTQ4LDkgKzQ4LDExIEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGlvcmVtYXBfYm90OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tYXhfbG93X21lbW9yeTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdGlhbF9tZW1vcnlfbGltaXQ7CitleHRlcm4gcGh5c19hZGRyX3QgX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxfbWVtb3J5OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxfbG93bWVtOworZXh0ZXJuIHBoeXNfYWRkcl90IG1lbXN0YXJ0X2FkZHI7CitleHRlcm4gcGh5c19hZGRyX3QgbG93bWVtX2VuZF9hZGRyOwogCiAvKiAuLi5hbmQgbm93IHRob3NlIHRoaW5ncyB0aGF0IG1heSBiZSBzbGlnaHRseSBkaWZmZXJlbnQgYmV0d2VlbiBwcm9jZXNzb3IKICAqIGFyY2hpdGVjdHVyZXMuICAtLSBEYW4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGEzMDBkMjUuLjFlZmQ2MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTcsOCArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KICNpbmNsdWRlIDxhc20vc3BhcnNlbWVtLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggYWMzMzkwZi4uNjRjNDRiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC0yODEsMTIgKzI4MSwxMyBAQAogICovCiB2b2lkIF9faW5pdCBtYXBpbl9yYW0odm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHYsIHAsIHMsIGY7CisJdW5zaWduZWQgbG9uZyB2LCBzLCBmOworCXBoeXNfYWRkcl90IHA7CiAJaW50IGt0ZXh0OwogCiAJcyA9IG1tdV9tYXBpbl9yYW0oKTsKIAl2ID0gS0VSTkVMQkFTRSArIHM7Ci0JcCA9IFBQQ19NRU1TVEFSVCArIHM7CisJcCA9IG1lbXN0YXJ0X2FkZHIgKyBzOwogCWZvciAoOyBzIDwgdG90YWxfbG93bWVtOyBzICs9IFBBR0VfU0laRSkgewogCQlrdGV4dCA9ICgoY2hhciAqKSB2ID49IF9zdGV4dCAmJiAoY2hhciAqKSB2IDwgZXRleHQpOwogCQlmID0ga3RleHQgP19QQUdFX1JBTV9URVhUIDogX1BBR0VfUkFNOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKaW5kZXggNWM0NWQ0Ny4uY2VmOWYxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9sbWIuaD4KIAogI2luY2x1ZGUgIm1tdV9kZWNsLmgiCiAKQEAgLTgyLDcgKzgyLDYgQEAKICNlbHNlCiAJdW5zaWduZWQgbG9uZyB0b3QsIGJsLCBkb25lOwogCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUgPSAoMjU2PDwyMCk7Ci0JdW5zaWduZWQgbG9uZyBhbGlnbjsKIAogCWlmIChfX21hcF93aXRob3V0X2JhdHMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlJBTSBtYXBwZWQgd2l0aG91dCBCQVRzXG4iKTsKQEAgLTkzLDE5ICs5MiwxMyBAQAogCiAJLyogTWFrZSBzdXJlIHdlIGRvbid0IG1hcCBhIGJsb2NrIGxhcmdlciB0aGFuIHRoZQogCSAgIHNtYWxsZXN0IGFsaWdubWVudCBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcy4gKi8KLQkvKiBhbGlnbm1lbnQgb2YgUFBDX01FTVNUQVJUICovCi0JYWxpZ24gPSB+KFBQQ19NRU1TVEFSVC0xKSAmIFBQQ19NRU1TVEFSVDsKLQkvKiBzZXQgQkFUIGJsb2NrIHNpemUgdG8gTUlOKG1heF9zaXplLCBhbGlnbikgKi8KLQlpZiAoYWxpZ24gJiYgYWxpZ24gPCBtYXhfc2l6ZSkKLQkJbWF4X3NpemUgPSBhbGlnbjsKLQogCXRvdCA9IHRvdGFsX2xvd21lbTsKIAlmb3IgKGJsID0gMTI4PDwxMDsgYmwgPCBtYXhfc2l6ZTsgYmwgPDw9IDEpIHsKIAkJaWYgKGJsICogMiA+IHRvdCkKIAkJCWJyZWFrOwogCX0KIAotCXNldGJhdCgyLCBLRVJORUxCQVNFLCBQUENfTUVNU1RBUlQsIGJsLCBfUEFHRV9SQU0pOworCXNldGJhdCgyLCBLRVJORUxCQVNFLCAwLCBibCwgX1BBR0VfUkFNKTsKIAlkb25lID0gKHVuc2lnbmVkIGxvbmcpYmF0X2FkZHJzWzJdLmxpbWl0IC0gS0VSTkVMQkFTRSArIDE7CiAJaWYgKChkb25lIDwgdG90KSAmJiAhYmF0X2FkZHJzWzNdLmxpbWl0KSB7CiAJCS8qIHVzZSBCQVQzIHRvIGNvdmVyIGEgYml0IG1vcmUgKi8KQEAgLTExMyw3ICsxMDYsNyBAQAogCQlmb3IgKGJsID0gMTI4PDwxMDsgYmwgPCBtYXhfc2l6ZTsgYmwgPDw9IDEpCiAJCQlpZiAoYmwgKiAyID4gdG90KQogCQkJCWJyZWFrOwotCQlzZXRiYXQoMywgS0VSTkVMQkFTRStkb25lLCBQUENfTUVNU1RBUlQrZG9uZSwgYmwsIF9QQUdFX1JBTSk7CisJCXNldGJhdCgzLCBLRVJORUxCQVNFK2RvbmUsIGRvbmUsIGJsLCBfUEFHRV9SQU0pOwogCQlkb25lID0gKHVuc2lnbmVkIGxvbmcpYmF0X2FkZHJzWzNdLmxpbWl0IC0gS0VSTkVMQkFTRSArIDE7CiAJfQogCkBAIC0yNDAsNyArMjMzLDcgQEAKIAkgKi8KIAlpZiAoIHBwY19tZC5wcm9ncmVzcyApIHBwY19tZC5wcm9ncmVzcygiaGFzaDpmaW5kIHBpZWNlIiwgMHgzMjIpOwogCUhhc2ggPSBfX3ZhKGxtYl9hbGxvY19iYXNlKEhhc2hfc2l6ZSwgSGFzaF9zaXplLAotCQkJCSAgIF9faW5pdGlhbF9tZW1vcnlfbGltaXQpKTsKKwkJCQkgICBfX2luaXRpYWxfbWVtb3J5X2xpbWl0X2FkZHIpKTsKIAljYWNoZWFibGVfbWVtemVybyhIYXNoLCBIYXNoX3NpemUpOwogCV9TRFIxID0gX19wYShIYXNoKSB8IFNEUjFfTE9XX0JJVFM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGIuYyBiL2FyY2gvcG93ZXJwYy9tbS9zbGIuYwppbmRleCA0N2IwNmJhLi45MDZkYWVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYi5jCkBAIC0xMjQsNiArMTI0LDEyIEBACiAJCWtzcF92c2lkX2RhdGEgPSBnZXRfc2xiX3NoYWRvdygpLT5zYXZlX2FyZWFbMl0udnNpZDsKIAl9CiAKKwkvKgorCSAqIFdlIGNhbid0IHRha2UgYSBQTVUgZXhjZXB0aW9uIGluIHRoZSBmb2xsb3dpbmcgY29kZSwgc28gaGFyZAorCSAqIGRpc2FibGUgaW50ZXJydXB0cy4KKwkgKi8KKwloYXJkX2lycV9kaXNhYmxlKCk7CisKIAkvKiBXZSBuZWVkIHRvIGRvIHRoaXMgYWxsIGluIGFzbSwgc28gd2UncmUgc3VyZSB3ZSBkb24ndCB0b3VjaAogCSAqIHRoZSBzdGFjayBiZXR3ZWVuIHRoZSBzbGJpYSBhbmQgcmVib2x0aW5nIGl0LiAqLwogCWFzbSB2b2xhdGlsZSgiaXN5bmNcbiIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCmluZGV4IDUwNDQ4ZDUuLmVmYmJkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwpAQCAtMTIsMTIgKzEyLDE0IEBACiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgorCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9jYWxsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC9zcHVfdGFza19zeW5jLmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC9zcHVfdGFza19zeW5jLmMKaW5kZXggMjU3YjEzYy4uMmE5YjRhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvc3B1X3Rhc2tfc3luYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3NwdV90YXNrX3N5bmMuYwpAQCAtNjgsNyArNjgsNyBAQAogCWlmIChzcHVfbnVtID49IG51bV9zcHVfbm9kZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgogCQkgICAgICAgIiVzLCBsaW5lICVkOiBJbnZhbGlkIGluZGV4ICVkIGludG8gc3B1IGluZm8gY2FjaGVcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBzcHVfbnVtKTsKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgc3B1X251bSk7CiAJCXJldF9pbmZvID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTE1LDcgKzExNSw3IEBACiAJaWYgKCFpbmZvKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU1BVX1BST0Y6ICIKIAkJICAgICAgICIlcywgbGluZSAlZDogY3JlYXRlIHZtYV9tYXAgZmFpbGVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvYzsKIAl9CkBAIC0xMjMsNyArMTIzLDcgQEAKIAlpZiAoIW5ld19tYXApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgogCQkgICAgICAgIiVzLCBsaW5lICVkOiBjcmVhdGUgdm1hX21hcCBmYWlsZWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KQEAgLTE3MSw3ICsxNzEsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgogCQkJCSIlcywgbGluZSAlZDogIgogCQkJCSJJbnZhbGlkIGluZGV4ICVkIGludG8gc3B1IGluZm8gY2FjaGVcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywgc3B1X2luZGV4KTsKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHNwdV9pbmRleCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCQllbmQgPSBzcHVfaW5kZXggKyAxOwpAQCAtMjczLDcgKzI3Myw3IEBACiAKIAlwcmludGsoS0VSTl9FUlIgIlNQVV9QUk9GOiAiCiAJCSIlcywgbGluZSAlZDogQ2Fubm90IGZpbmQgZGNvb2tpZSBmb3IgU1BVIGJpbmFyeVxuIiwKLQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCV9fZnVuY19fLCBfX0xJTkVfXyk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgogCQkJIiVzLCBsaW5lICVkOiBzcHVfc3dpdGNoX2V2ZW50X3VucmVnaXN0ZXIgcmV0dXJuZWQgJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fLCByZXQpOworCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3ZtYV9tYXAuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3ZtYV9tYXAuYwppbmRleCA3NmVjMWQxLi5mZmY2NjY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC92bWFfbWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvdm1hX21hcC5jCkBAIC03Miw3ICs3Miw3IEBACiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWFfdG9fZmlsZW9mZnNldF9tYXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ldykgewogCQlwcmludGsoS0VSTl9FUlIgIlNQVV9QUk9GOiAlcywgbGluZSAlZDogbWFsbG9jIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJdm1hX21hcF9mcmVlKG1hcCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTkyLDcgKzkyLDcgQEAKICAqIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgdm1hX21hcCBpbiB0aGUgZ2VuZXJhdGVkIGxpc3QKICAqIG9mIHZtYV9tYXBzIGlzIHJldHVybmVkLiAgKi8KIHN0cnVjdCB2bWFfdG9fZmlsZW9mZnNldF9tYXAgKmNyZWF0ZV92bWFfbWFwKGNvbnN0IHN0cnVjdCBzcHUgKmFTcHUsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzcHVfZWxmX3N0YXJ0KQorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgX19zcHVfZWxmX3N0YXJ0KQogewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGV4cGVjdGVkW0VJX1BBRF0gPSB7CiAJCVtFSV9NQUcwXSA9IEVMRk1BRzAsCkBAIC0xMDcsOSArMTA3LDExIEBACiAKIAlpbnQgZ3JkX3ZhbDsKIAlzdHJ1Y3Qgdm1hX3RvX2ZpbGVvZmZzZXRfbWFwICptYXAgPSBOVUxMOworCXZvaWQgX191c2VyICpzcHVfZWxmX3N0YXJ0ID0gKHZvaWQgX191c2VyICopX19zcHVfZWxmX3N0YXJ0OwogCXN0cnVjdCBzcHVfb3ZlcmxheV9pbmZvIG92bHk7CiAJdW5zaWduZWQgaW50IG92ZXJsYXlfdGJsX29mZnNldCA9IC0xOwotCXVuc2lnbmVkIGxvbmcgcGhkcl9zdGFydCwgc2hkcl9zdGFydDsKKwlFbGYzMl9QaGRyIF9fdXNlciAqcGhkcl9zdGFydDsKKwlFbGYzMl9TaGRyIF9fdXNlciAqc2hkcl9zdGFydDsKIAlFbGYzMl9FaGRyIGVoZHI7CiAJRWxmMzJfUGhkciBwaGRyOwogCUVsZjMyX1NoZHIgc2hkciwgc2hkcl9zdHI7CkBAIC0xMjEsMzAgKzEyMywzMCBAQAogCXVuc2lnbmVkIGludCBvdmx5X2J1Zl90YWJsZV9zeW0gPSAwOwogCXVuc2lnbmVkIGludCBvdmx5X3RhYmxlX2VuZF9zeW0gPSAwOwogCXVuc2lnbmVkIGludCBvdmx5X2J1Zl90YWJsZV9lbmRfc3ltID0gMDsKLQl1bnNpZ25lZCBsb25nIG92bHlfdGFibGU7CisJc3RydWN0IHNwdV9vdmVybGF5X2luZm8gX191c2VyICpvdmx5X3RhYmxlOwogCXVuc2lnbmVkIGludCBuX292bHlzOwogCiAJLyogR2V0IGFuZCB2YWxpZGF0ZSBFTEYgaGVhZGVyLgkgKi8KIAotCWlmIChjb3B5X2Zyb21fdXNlcigmZWhkciwgKHZvaWQgKikgc3B1X2VsZl9zdGFydCwgc2l6ZW9mIChlaGRyKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZlaGRyLCBzcHVfZWxmX3N0YXJ0LCBzaXplb2YgKGVoZHIpKSkKIAkJZ290byBmYWlsOwogCiAJaWYgKG1lbWNtcChlaGRyLmVfaWRlbnQsIGV4cGVjdGVkLCBFSV9QQUQpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgogCQkgICAgICAgIiVzLCBsaW5lICVkOiBVbmV4cGVjdGVkIGVfaWRlbnQgcGFyc2luZyBTUFUgRUxGXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmIChlaGRyLmVfbWFjaGluZSAhPSBFTV9TUFUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTUFVfUFJPRjogIgogCQkgICAgICAgIiVzLCBsaW5lICVkOiBVbmV4cGVjdGVkIGVfbWFjaGluZSBwYXJzaW5nIFNQVSBFTEZcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sICBfX0xJTkVfXyk7CisJCSAgICAgICBfX2Z1bmNfXywgIF9fTElORV9fKTsKIAkJZ290byBmYWlsOwogCX0KIAlpZiAoZWhkci5lX3R5cGUgIT0gRVRfRVhFQykgewogCQlwcmludGsoS0VSTl9FUlIgIlNQVV9QUk9GOiAiCiAJCSAgICAgICAiJXMsIGxpbmUgJWQ6IFVuZXhwZWN0ZWQgZV90eXBlIHBhcnNpbmcgU1BVIEVMRlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJZ290byBmYWlsOwogCX0KIAlwaGRyX3N0YXJ0ID0gc3B1X2VsZl9zdGFydCArIGVoZHIuZV9waG9mZjsKQEAgLTE1Miw5ICsxNTQsNyBAQAogCiAJLyogVHJhdmVyc2UgcHJvZ3JhbSBoZWFkZXJzLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZWhkci5lX3BobnVtOyBpKyspIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwaGRyLAotCQkJCSAgICh2b2lkICopIChwaGRyX3N0YXJ0ICsgaSAqIHNpemVvZihwaGRyKSksCi0JCQkJICAgc2l6ZW9mKHBoZHIpKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwaGRyLCBwaGRyX3N0YXJ0ICsgaSwgc2l6ZW9mKHBoZHIpKSkKIAkJCWdvdG8gZmFpbDsKIAogCQlpZiAocGhkci5wX3R5cGUgIT0gUFRfTE9BRCkKQEAgLTE3MSw5ICsxNzEsNyBAQAogCXByX2RlYnVnKCJTUFVfUFJPRjogQ3JlYXRlZCBub24tb3ZlcmxheSBtYXBzXG4iKTsKIAkvKiBUcmF2ZXJzZSBzZWN0aW9uIHRhYmxlIGFuZCBzZWFyY2ggZm9yIG92ZXJsYXktcmVsYXRlZCBzeW1ib2xzLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZWhkci5lX3NobnVtOyBpKyspIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzaGRyLAotCQkJCSAgICh2b2lkICopIChzaGRyX3N0YXJ0ICsgaSAqIHNpemVvZihzaGRyKSksCi0JCQkJICAgc2l6ZW9mKHNoZHIpKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzaGRyLCBzaGRyX3N0YXJ0ICsgaSwgc2l6ZW9mKHNoZHIpKSkKIAkJCWdvdG8gZmFpbDsKIAogCQlpZiAoc2hkci5zaF90eXBlICE9IFNIVF9TWU1UQUIpCkBAIC0xODIsOCArMTgwLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmc2hkcl9zdHIsCi0JCQkJICAgKHZvaWQgKikgKHNoZHJfc3RhcnQgKyBzaGRyLnNoX2xpbmsgKgotCQkJCQkgICAgIHNpemVvZihzaGRyKSksCisJCQkJICAgc2hkcl9zdGFydCArIHNoZHIuc2hfbGluaywKIAkJCQkgICBzaXplb2Yoc2hkcikpKQogCQkJZ290byBmYWlsOwogCkBAIC0xOTEsMTUgKzE4OCwxNSBAQAogCQkJZ290byBmYWlsOzsKIAogCQlmb3IgKGogPSAwOyBqIDwgc2hkci5zaF9zaXplIC8gc2l6ZW9mIChzeW0pOyBqKyspIHsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmc3ltLCAodm9pZCAqKSAoc3B1X2VsZl9zdGFydCArCi0JCQkJCQkgICAgICAgc2hkci5zaF9vZmZzZXQgKyBqICoKLQkJCQkJCQkgICBzaXplb2YgKHN5bSkpLAorCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzeW0sIHNwdV9lbGZfc3RhcnQgKworCQkJCQkJIHNoZHIuc2hfb2Zmc2V0ICsKKwkJCQkJCSBqICogc2l6ZW9mIChzeW0pLAogCQkJCQkgICBzaXplb2YgKHN5bSkpKQogCQkJCWdvdG8gZmFpbDsKIAotCQkJaWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsICh2b2lkICopCi0JCQkJCSAgIChzcHVfZWxmX3N0YXJ0ICsgc2hkcl9zdHIuc2hfb2Zmc2V0ICsKLQkJCQkJICAgIHN5bS5zdF9uYW1lKSwKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCAKKwkJCQkJICAgc3B1X2VsZl9zdGFydCArIHNoZHJfc3RyLnNoX29mZnNldCArCisJCQkJCSAgIHN5bS5zdF9uYW1lLAogCQkJCQkgICAyMCkpCiAJCQkJZ290byBmYWlsOwogCkBAIC0yMzUsNyArMjMyLDcgQEAKIAlpZiAob3ZlcmxheV90Ymxfb2Zmc2V0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlNQVV9QUk9GOiAiCiAJCSAgICAgICAiJXMsIGxpbmUgJWQ6IEVycm9yIGZpbmRpbmcgU1BVIG92ZXJsYXkgdGFibGVcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCWdvdG8gZmFpbDsKIAl9CiAJb3ZseV90YWJsZSA9IHNwdV9lbGZfc3RhcnQgKyBvdmVybGF5X3RibF9vZmZzZXQ7CkBAIC0yNDUsOSArMjQyLDcgQEAKIAogCS8qIFRyYXZlcnNlIG92ZXJsYXkgdGFibGUuICAqLwogCWZvciAoaSA9IDA7IGkgPCBuX292bHlzOyBpKyspIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZvdmx5LCAodm9pZCAqKQotCQkJCSAgIChvdmx5X3RhYmxlICsgaSAqIHNpemVvZiAob3ZseSkpLAotCQkJCSAgIHNpemVvZiAob3ZseSkpKQorCQlpZiAoY29weV9mcm9tX3VzZXIoJm92bHksIG92bHlfdGFibGUgKyBpLCBzaXplb2YgKG92bHkpKSkKIAkJCWdvdG8gZmFpbDsKIAogCQkvKiBUaGUgb3ZseS52bWEvc2l6ZS9vZmZzZXQgYXJndW1lbnRzIGFyZSBhbmFsb2dvdXMgdG8gdGhlIHNhbWUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jCmluZGV4IDEzOTI5NzcuLjVmZjRkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCSAqIGZhaWx1cmUgdG8gc3RvcCBPUHJvZmlsZS4KIAkJICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBydGFzIHJldHVybmVkOiAlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV0KTsKKwkJICAgICAgIF9fZnVuY19fLCByZXQpOwogfQogCiBzdGF0aWMgaW50IHBtX3J0YXNfYWN0aXZhdGVfc2lnbmFscyh1MzIgbm9kZSwgdTMyIGNvdW50KQpAQCAtMjU1LDcgKzI1NSw3IEBACiAKIAkJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBydGFzIHJldHVybmVkOiAlZFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisJCQkgICAgICAgX19mdW5jX18sIHJldCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KQEAgLTU2MCw3ICs1NjAsNyBAQAogCQlpZiAodW5saWtlbHkoc3B1X3J0YXNfdG9rZW4gPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IHJ0YXMgdG9rZW4gaWJtLGNiZS1zcHUtcGVyZnRvb2xzIHVua25vd25cbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KQEAgLTU3Niw3ICs1NzYsNyBAQAogCWlmICh1bmxpa2VseShwbV9ydGFzX3Rva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlczogcnRhcyB0b2tlbiBpYm0sY2JlLXBlcmZ0b29scyB1bmtub3duXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC04NTMsNyArODUzLDcgQEAKIAogCWlmICh1bmxpa2VseShyZXQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBydGFzIHJldHVybmVkOiAlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV0KTsKKwkJICAgICAgIF9fZnVuY19fLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTk0OSw3ICs5NDksNyBAQAogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IHJ0YXMgY2FsbCBpYm0sY2JlLXNwdS1wZXJmdG9vbHMgZmFpbGVkLCByZXR1cm4gPSAlZFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisJCQkgICAgICAgX19mdW5jX18sIHJldCk7CiAJCQlydGFzX2Vycm9yID0gLUVJTzsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCQlpZiAodW5saWtlbHkocnRuX3ZhbHVlICE9IDApKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IHJ0YXMgY2FsbCBpYm0sY2JlLXNwdS1wZXJmdG9vbHMgZmFpbGVkLCByZXR1cm4gPSAlZFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJ0bl92YWx1ZSk7CisJCQkgICAgICAgX19mdW5jX18sIHJ0bl92YWx1ZSk7CiAJCX0KIAogCQkvKiBEZWFjdGl2YXRlIHRoZSBzaWduYWxzICovCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJCWlmICgoaW50ZXJydXB0X21hc2sgJiBDQkVfUE1fQ1RSX09WRVJGTE9XX0lOVFIoaSkpCiAJCQkgICAgJiYgY3RyW2ldLmVuYWJsZWQpIHsKLQkJCQlvcHJvZmlsZV9hZGRfcGMocGMsIGlzX2tlcm5lbCwgaSk7CisJCQkJb3Byb2ZpbGVfYWRkX2V4dF9zYW1wbGUocGMsIHJlZ3MsIGksIGlzX2tlcm5lbCk7CiAJCQkJY2JlX3dyaXRlX2N0cihjcHUsIGksIHJlc2V0X3ZhbHVlW2ldKTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvZXA0MDUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L2VwNDA1LmMKaW5kZXggMTNkMTM0NS4uYWUyZTdmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvZXA0MDUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9lcDQwNS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vdWljLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmJjc3Jfbm9kZTsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmJjc3JfcmVnczsKQEAgLTExOSw1ICsxMjAsNiBAQAogCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAogCS5pbml0X0lSUQkJPSB1aWNfaW5pdF90cmVlLAogCS5nZXRfaXJxCQk9IHVpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgva2lsYXVlYS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgva2lsYXVlYS5jCmluZGV4IGY5MjA2YTcuLjFkZDI0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L2tpbGF1ZWEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9raWxhdWVhLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogS2lsYXVlYSBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwogICoKLSAqIENvcHlyaWdodCAyMDA3IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgogICoKICAqIEJhc2VkIG9uIHRoZSBXYWxudXQgY29kZSBieQogICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+CkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vdWljLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CiAKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQga2lsYXVlYV9vZl9idXNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKQEAgLTU0LDUgKzU1LDYgQEAKIAkucHJvZ3Jlc3MgCQkJPSB1ZGJnX3Byb2dyZXNzLAogCS5pbml0X0lSUSAJCQk9IHVpY19pbml0X3RyZWUsCiAJLmdldF9pcnEgCQkJPSB1aWNfZ2V0X2lycSwKKwkucmVzdGFydAkJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKIAkuY2FsaWJyYXRlX2RlY3IJCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvbWFrYWx1LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9tYWthbHUuYwppbmRleCA0ZTRkZjcyLi5hNmExZDYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9tYWthbHUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9tYWthbHUuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3VpYy5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgogCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1ha2FsdV9vZl9idXNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKQEAgLTU0LDUgKzU1LDYgQEAKIAkucHJvZ3Jlc3MgCQkJPSB1ZGJnX3Byb2dyZXNzLAogCS5pbml0X0lSUSAJCQk9IHVpY19pbml0X3RyZWUsCiAJLmdldF9pcnEgCQkJPSB1aWNfZ2V0X2lycSwKKwkucmVzdGFydAkJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKIAkuY2FsaWJyYXRlX2RlY3IJCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvdmlydGV4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC92aXJ0ZXguYwppbmRleCAwNDIyNTkwLi5mYzdmYjAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC92aXJ0ZXguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC92aXJ0ZXguYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20veGlsaW54X2ludGMuaD4KKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhpbGlueF9vZl9idXNfaWRzW10gX19pbml0ZGF0YSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInhsbngscGxiLXY0Ni0xLjAwLmEiLCB9LApAQCAtNDgsNSArNDksNiBAQAogCS5wcm9iZQkJCT0gdmlydGV4X3Byb2JlLAogCS5pbml0X0lSUQkJPSB4aWxpbnhfaW50Y19pbml0X3RyZWUsCiAJLmdldF9pcnEJCT0geGlsaW54X2ludGNfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAogCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L3dhbG51dC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvd2FsbnV0LmMKaW5kZXggYjhiMjU3ZS4uMzM1ZGY5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvd2FsbnV0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvd2FsbnV0LmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS91aWMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KIAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCB3YWxudXRfb2ZfYnVzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiMyIsIH0sCkBAIC02MSw1ICs2Miw2IEBACiAJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCiAJLmluaXRfSVJRCQk9IHVpY19pbml0X3RyZWUsCiAJLmdldF9pcnEJCT0gdWljX2dldF9pcnEsCi0JLmNhbGlicmF0ZV9kZWNyCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucmVzdGFydAkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4LzQ0eC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvNDR4LmgKaW5kZXggNDJlYWJmOC4uZGJjNGQyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvNDR4LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvNDR4LmgKQEAgLTMsNiArMyw1IEBACiAKIGV4dGVybiB1OCBhczFfcmVhZGIodm9sYXRpbGUgdTggX19pb21lbSAgKmFkZHIpOwogZXh0ZXJuIHZvaWQgYXMxX3dyaXRlYih1OCBkYXRhLCB2b2xhdGlsZSB1OCBfX2lvbWVtICphZGRyKTsKLWV4dGVybiB2b2lkIHBwYzQ0eF9yZXNldF9zeXN0ZW0oY2hhciAqY21kKTsKIAogI2VuZGlmIC8qIF9fUE9XRVJQQ19QTEFURk9STVNfNDRYXzQ0WF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwppbmRleCBjMDYyYzRjLi42YWJlOTEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTYxLDEyICs2MSwzMSBAQAogCXNlbGVjdCA0NDBFUAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFBJS0EgV2FycCh0bSkgQXBwbGlhbmNlLiBUaGUgV2FycAotICAgICAgICAgIGlzIGEgc21hbGwgY29tcHV0ZXIgcmVwbGFjZW1lbnQgd2l0aCB1cCB0byA5IHBvcnRzIG9mIEZYTy9GWFMgcGx1cyBWT0lQCisJICBpcyBhIHNtYWxsIGNvbXB1dGVyIHJlcGxhY2VtZW50IHdpdGggdXAgdG8gOSBwb3J0cyBvZiBGWE8vRlhTIHBsdXMgVk9JUAogCSAgc3RhdGlvbnMgYW5kIHRydW5rcy4KIAogCSAgU2VlIGh0dHA6Ly93d3cucGlrYXRlY2hub2xvZ2llcy5jb20vIGFuZCBmb2xsb3cgdGhlICJQSUtBIGZvciBDb21wdXRlcgogCSAgVGVsZXBob255IERldmVsb3BlcnMiIGxpbmsgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBDQU5ZT05MQU5EUworCWJvb2wgIkNhbnlvbmxhbmRzIgorCWRlcGVuZHMgb24gNDR4CisJZGVmYXVsdCBuCisJc2VsZWN0IDQ2MEVYCisJc2VsZWN0IFBDSQorCXNlbGVjdCBQUEM0eHhfUENJX0VYUFJFU1MKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MEVYIGV2YWx1YXRpb24gYm9hcmQuCisKK2NvbmZpZyBZT1NFTUlURQorCWJvb2wgIllvc2VtaXRlIgorCWRlcGVuZHMgb24gNDR4CisJZGVmYXVsdCBuCisJc2VsZWN0IDQ0MEVQCisJc2VsZWN0IFBDSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDQwRVAgZXZhbHVhdGlvbiBib2FyZC4KKwogI2NvbmZpZyBMVUFOCiAjCWJvb2wgIkx1YW4iCiAjCWRlcGVuZHMgb24gNDR4CkBAIC0xMTAsMTcgKzEyOSwyNSBAQAogCiBjb25maWcgNDQwR1gKIAlib29sCi0gICAgICAgIHNlbGVjdCBJQk1fTkVXX0VNQUNfRU1BQzQKKwlzZWxlY3QgSUJNX05FV19FTUFDX0VNQUM0CiAJc2VsZWN0IElCTV9ORVdfRU1BQ19SR01JSQotICAgICAgICBzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkgI3Rlc3Qgb25seQotICAgICAgICBzZWxlY3QgSUJNX05FV19FTUFDX1RBSCAgI3Rlc3Qgb25seQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfWk1JSSAjdGVzdCBvbmx5CisJc2VsZWN0IElCTV9ORVdfRU1BQ19UQUggICN0ZXN0IG9ubHkKIAogY29uZmlnIDQ0MFNQCiAJYm9vbAogCiBjb25maWcgNDQwU1BlCi0gICAgICAgIHNlbGVjdCBJQk1fTkVXX0VNQUNfRU1BQzQKIAlib29sCisJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAorCitjb25maWcgNDYwRVgKKwlib29sCisJc2VsZWN0IFBQQ19GUFUKKwlzZWxlY3QgSUJNX05FV19FTUFDX0VNQUM0CisJc2VsZWN0IElCTV9ORVdfRU1BQ19SR01JSQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfWk1JSQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfVEFICiAKICMgNDR4IGVycmF0YS93b3JrYXJvdW5kIGNvbmZpZyBzeW1ib2xzLCBzZWxlY3RlZCBieSB0aGUgQ1BVIG1vZGVscyBhYm92ZQogY29uZmlnIElCTTQ0MEVQX0VSUjQyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlCmluZGV4IDA4NjRkNGYuLjc3NDE2NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlCkBAIC0xLDkgKzEsMTEgQEAKLW9iai0kKENPTkZJR180NHgpCTo9IG1pc2NfNDR4Lm8KK29iai0kKENPTkZJR180NHgpCTo9IG1pc2NfNDR4Lm8gaWRsZS5vCiBvYmotJChDT05GSUdfRUJPTlkpCSs9IGVib255Lm8KIG9iai0kKENPTkZJR19UQUlTSEFOKQkrPSB0YWlzaGFuLm8KIG9iai0kKENPTkZJR19CQU1CT08pCSs9IGJhbWJvby5vCitvYmotJChDT05GSUdfWU9TRU1JVEUpCSs9IGJhbWJvby5vCiBvYmotJChDT05GSUdfU0VRVU9JQSkJKz0gc2VxdW9pYS5vCiBvYmotJChDT05GSUdfS0FUTUFJKQkrPSBrYXRtYWkubwogb2JqLSQoQ09ORklHX1JBSU5JRVIpCSs9IHJhaW5pZXIubwogb2JqLSQoQ09ORklHX1dBUlApCSs9IHdhcnAubwogb2JqLSQoQ09ORklHX1dBUlApCSs9IHdhcnAtbmFuZC5vCitvYmotJChDT05GSUdfQ0FOWU9OTEFORFMpICs9IGNhbnlvbmxhbmRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2JhbWJvby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvYmFtYm9vLmMKaW5kZXggZmI5YTIyYS4uY2VmMTY5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvYmFtYm9vLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvYmFtYm9vLmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS91aWMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotCi0jaW5jbHVkZSAiNDR4LmgiCisjaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgogCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJhbWJvb19vZl9idXNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKQEAgLTUzLDExICs1MiwxMSBAQAogfQogCiBkZWZpbmVfbWFjaGluZShiYW1ib28pIHsKLQkubmFtZSAJCQkJPSAiQmFtYm9vIiwKLQkucHJvYmUgCQkJCT0gYmFtYm9vX3Byb2JlLAotCS5wcm9ncmVzcyAJCQk9IHVkYmdfcHJvZ3Jlc3MsCi0JLmluaXRfSVJRIAkJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQkJPSBwcGM0NHhfcmVzZXRfc3lzdGVtLAorCS5uYW1lIAkJCT0gIkJhbWJvbyIsCisJLnByb2JlIAkJCT0gYmFtYm9vX3Byb2JlLAorCS5wcm9ncmVzcyAJCT0gdWRiZ19wcm9ncmVzcywKKwkuaW5pdF9JUlEgCQk9IHVpY19pbml0X3RyZWUsCisJLmdldF9pcnEgCQk9IHVpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCiAJLmNhbGlicmF0ZV9kZWNyIAk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvY2FueW9ubGFuZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2NhbnlvbmxhbmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0OTI4OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2NhbnlvbmxhbmRzLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENhbnlvbmxhbmRzIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICoKKyAqIEJhc2VkIG9uIHRoZSBLYXRtYWkgY29kZSBieQorICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAuCisgKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VpYy5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNhbnlvbmxhbmRzX29mX2J1c1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNhbnlvbmxhbmRzX2RldmljZV9wcm9iZSh2b2lkKQoreworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBjYW55b25sYW5kc19vZl9idXMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChjYW55b25sYW5kcywgY2FueW9ubGFuZHNfZGV2aWNlX3Byb2JlKTsKKworc3RhdGljIGludCBfX2luaXQgY2FueW9ubGFuZHNfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxjYW55b25sYW5kcyIpKQorCQlyZXR1cm4gMDsKKworCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOworCisJcmV0dXJuIDE7Cit9CisKK2RlZmluZV9tYWNoaW5lKGNhbnlvbmxhbmRzKSB7CisJLm5hbWUgCQkJCT0gIkNhbnlvbmxhbmRzIiwKKwkucHJvYmUgCQkJCT0gY2FueW9ubGFuZHNfcHJvYmUsCisJLnByb2dyZXNzIAkJCT0gdWRiZ19wcm9ncmVzcywKKwkuaW5pdF9JUlEgCQkJPSB1aWNfaW5pdF90cmVlLAorCS5nZXRfaXJxIAkJCT0gdWljX2dldF9pcnEsCisJLnJlc3RhcnQJCQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCisJLmNhbGlicmF0ZV9kZWNyCQkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2Vib255LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9lYm9ueS5jCmluZGV4IDFhOGQ0NjcuLmEwZThmZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2Vib255LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvZWJvbnkuYwpAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3VpYy5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0KLSNpbmNsdWRlICI0NHguaCIKKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CiAKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgZWJvbnlfb2ZfYnVzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCkBAIC02Niw2ICs2NSw2IEBACiAJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCiAJLmluaXRfSVJRCQk9IHVpY19pbml0X3RyZWUsCiAJLmdldF9pcnEJCT0gdWljX2dldF9pcnEsCi0JLnJlc3RhcnQJCT0gcHBjNDR4X3Jlc2V0X3N5c3RlbSwKKwkucmVzdGFydAkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAogCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2lkbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2lkbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTgxZjkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaWRsZS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBJQk0gQ29ycC4gCisgKgorICogQmFzZWQgb24gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaWRsZS5jOiAKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IFBBIFNlbWksIEluYworICoKKyAqIEFkZGVkIGJ5OiBKZXJvbmUgWW91bmcgPGp5b3VuZzVAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworc3RhdGljIGludCBtb2RlX3NwaW47CisKK3N0YXRpYyB2b2lkIHBwYzQ0eF9pZGxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBtc3Jfc2F2ZTsKKworCW1zcl9zYXZlID0gbWZtc3IoKTsKKwkvKiBzZXQgd2FpdCBzdGF0ZSBNU1IgKi8KKwltdG1zcihtc3Jfc2F2ZXxNU1JfV0V8TVNSX0VFfE1TUl9DRXxNU1JfREUpOworCWlzeW5jKCk7CisJLyogcmV0dXJuIHRvIGluaXRpYWwgc3RhdGUgKi8KKwltdG1zcihtc3Jfc2F2ZSk7CisJaXN5bmMoKTsKK30KKworaW50IF9faW5pdCBwcGM0NHhfaWRsZV9pbml0KHZvaWQpCit7CisJaWYgKCFtb2RlX3NwaW4pIHsKKwkJLyogSWYgd2UgYXJlIG5vdCBzZXR0aW5nIHNwaW4gbW9kZSAKKyAgICAgICAgICAgICAgICAgICB0aGVuIHdlIHNldCB0byB3YWl0IG1vZGUgKi8KKwkJcHBjX21kLnBvd2VyX3NhdmUgPSAmcHBjNDR4X2lkbGU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwocHBjNDR4X2lkbGVfaW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGlkbGVfcGFyYW0oY2hhciAqcCkKK3sgCisKKwlpZiAoIXN0cmNtcCgic3BpbiIsIHApKSB7CisJCW1vZGVfc3BpbiA9IDE7CisJCXBwY19tZC5wb3dlcl9zYXZlID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oImlkbGUiLCBpZGxlX3BhcmFtKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2thdG1haS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgva2F0bWFpLmMKaW5kZXggMTExMzQxMi4uNDRmNGIzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgva2F0bWFpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgva2F0bWFpLmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS91aWMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotCi0jaW5jbHVkZSAiNDR4LmgiCisjaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgogCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGthdG1haV9vZl9idXNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKQEAgLTU4LDYgKzU3LDYgQEAKIAkucHJvZ3Jlc3MgCQkJPSB1ZGJnX3Byb2dyZXNzLAogCS5pbml0X0lSUSAJCQk9IHVpY19pbml0X3RyZWUsCiAJLmdldF9pcnEgCQkJPSB1aWNfZ2V0X2lycSwKLQkucmVzdGFydAkJCT0gcHBjNDR4X3Jlc2V0X3N5c3RlbSwKKwkucmVzdGFydAkJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKIAkuY2FsaWJyYXRlX2RlY3IJCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvbWlzY180NHguUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L21pc2NfNDR4LlMKaW5kZXggM2JjZTcxZC4uZGMxMmI4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvbWlzY180NHguUworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9taXNjXzQ0eC5TCkBAIC00NCwxNCArNDQsMyBAQAogCXN5bmMKIAlpc3luYwogCWJscgotCi0vKgotICogdm9pZCBwcGM0NHhfcmVzZXRfc3lzdGVtKGNoYXIgKmNtZCkKLSAqCi0gKiBBdCBwcmVzZW50LCB0aGlzIHJvdXRpbmUganVzdCBhcHBsaWVzIGEgc3lzdGVtIHJlc2V0LgotICovCi1fR0xPQkFMKHBwYzQ0eF9yZXNldF9zeXN0ZW0pCi0JbWZzcHIJcjEzLFNQUk5fREJDUjAKLQlvcmlzCXIxMyxyMTMsREJDUjBfUlNUX1NZU1RFTUBoCi0JbXRzcHIJU1BSTl9EQkNSMCxyMTMKLQliCS4JCQkvKiBKdXN0IGluIGNhc2UgdGhlIHJlc2V0IGRvZXNuJ3Qgd29yayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcmFpbmllci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcmFpbmllci5jCmluZGV4IGE3ZmFlMWMuLjRmMWZmODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3JhaW5pZXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9yYWluaWVyLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS91aWMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgIjQ0eC5oIgorI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KIAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCByYWluaWVyX29mX2J1c1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LApAQCAtNTcsNiArNTcsNiBAQAogCS5wcm9ncmVzcyAJCQk9IHVkYmdfcHJvZ3Jlc3MsCiAJLmluaXRfSVJRIAkJCT0gdWljX2luaXRfdHJlZSwKIAkuZ2V0X2lycSAJCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQkJPSBwcGM0NHhfcmVzZXRfc3lzdGVtLAorCS5yZXN0YXJ0CQkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAogCS5jYWxpYnJhdGVfZGVjcgkJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9zZXF1b2lhLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9zZXF1b2lhLmMKaW5kZXggZDI3OWRiNC4uNDllYjczZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvc2VxdW9pYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3NlcXVvaWEuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS91aWMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogCi0jaW5jbHVkZSAiNDR4LmgiCisjaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgogCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNlcXVvaWFfb2ZfYnVzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCkBAIC01OCw2ICs1OCw2IEBACiAJLnByb2dyZXNzIAkJCT0gdWRiZ19wcm9ncmVzcywKIAkuaW5pdF9JUlEgCQkJPSB1aWNfaW5pdF90cmVlLAogCS5nZXRfaXJxIAkJCT0gdWljX2dldF9pcnEsCi0JLnJlc3RhcnQJCQk9IHBwYzQ0eF9yZXNldF9zeXN0ZW0sCisJLnJlc3RhcnQJCQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCiAJLmNhbGlicmF0ZV9kZWNyCQkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3RhaXNoYW4uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3RhaXNoYW4uYwppbmRleCAyOGFiN2UyLi40OWM3OGIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC90YWlzaGFuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvdGFpc2hhbi5jCkBAIC0yOSw4ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vdWljLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLQotI2luY2x1ZGUgIjQ0eC5oIgorI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KIAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCB0YWlzaGFuX29mX2J1c1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LApAQCAtNjgsNiArNjcsNiBAQAogCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAogCS5pbml0X0lSUQkJPSB1aWNfaW5pdF90cmVlLAogCS5nZXRfaXJxCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQk9IHBwYzQ0eF9yZXNldF9zeXN0ZW0sCisJLnJlc3RhcnQJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC93YXJwLW5hbmQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3dhcnAtbmFuZC5jCmluZGV4IDg0YWI3OGYuLjkxNTAzMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3dhcnAtbmFuZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3dhcnAtbmFuZC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uZGZjLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KIAogI2lmZGVmIENPTkZJR19NVERfTkFORF9OREZDCiAKQEAgLTEwMCw2ICsxMDEsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1kZXZpY2VfaW5pdGNhbGwod2FycF9zZXR1cF9uYW5kX2ZsYXNoKTsKK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHdhcnAsIHdhcnBfc2V0dXBfbmFuZF9mbGFzaCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvd2FycC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvd2FycC5jCmluZGV4IGRhNWI3YjcuLjM5Y2Y2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3dhcnAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC93YXJwLmMKQEAgLTE4LDkgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3VpYy5oPgotCi0jaW5jbHVkZSAiNDR4LmgiCi0KKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CiAKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgd2FycF9vZl9idXNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKQEAgLTQ5LDcgKzQ3LDcgQEAKIAkucHJvZ3Jlc3MgCT0gdWRiZ19wcm9ncmVzcywKIAkuaW5pdF9JUlEgCT0gdWljX2luaXRfdHJlZSwKIAkuZ2V0X2lycSAJPSB1aWNfZ2V0X2lycSwKLQkucmVzdGFydAk9IHBwYzQ0eF9yZXNldF9zeXN0ZW0sCisJLnJlc3RhcnQJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAogCS5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMC5jCmluZGV4IDk1NmY0NTkuLjZkNTg0ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMC5jCkBAIC02Myw3ICs2Myw3IEBACiAJb2Zfbm9kZV9wdXQobnApOwogCWlmICghY2RtKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQ7IGV4cGVjdCBhYm5vcm1hbCBiZWhhdmlvdXJcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC05OCw3ICs5OCw3IEBACiAJb2Zfbm9kZV9wdXQobnApOwogCWlmICghZ3BpbykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkLiBleHBlY3QgYWJub3JtYWwgYmVoYXZpb3JcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCmluZGV4IDlhYTQ0MjUuLjRkNWZkMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCkBAIC0xOTksNiArMTk5LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChtcGM1Mnh4X3NldF9wc2NfY2xrZGl2KTsKIAogLyoqCiAgKiBtcGM1Mnh4X3Jlc3RhcnQ6IHBwY19tZC0+cmVzdGFydCBob29rIGZvciBtcGM1MjAwIHVzaW5nIHRoZSB3YXRjaGRvZyB0aW1lcgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZwppbmRleCA0ZmFkNmM3Li45MTdhYzg4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZwpAQCAtMTEsNyArMTEsNiBAQAogCXNlbGVjdCA4MjYwCiAJc2VsZWN0IEZTTF9TT0MKIAlzZWxlY3QgUFEyX0FEU19QQ0lfUElDIGlmIFBDSQotCXNlbGVjdCBQUENfQ1BNX05FV19CSU5ESU5HCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODI3MiBBRFMgYm9hcmQKIApAQCAtMjIsNyArMjEsNiBAQAogCXNlbGVjdCA4MjYwCiAJc2VsZWN0IEZTTF9TT0MKIAlzZWxlY3QgUFEyX0FEU19QQ0lfUElDIGlmIFBDSQotCXNlbGVjdCBQUENfQ1BNX05FV19CSU5ESU5HCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUFEyRkFEUyBib2FyZAogCkBAIC0zMSw3ICsyOSw2IEBACiAJc2VsZWN0IDgyNzIKIAlzZWxlY3QgODI2MAogCXNlbGVjdCBGU0xfU09DCi0Jc2VsZWN0IFBQQ19DUE1fTkVXX0JJTkRJTkcKIAlzZWxlY3QgTURJT19CSVRCQU5HCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBFbWJlZGRlZCBQbGFuZXQgRVA4MjQ4RSBib2FyZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCmluZGV4IGJhOTNkOGEuLmQ1NzcwZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAlidXMtPm5hbWUgPSAiZXA4MjQ4ZS1tZGlvLWJpdGJhbmciOwogCWJ1cy0+ZGV2ID0gJm9mZGV2LT5kZXY7Ci0JYnVzLT5pZCA9IHJlcy5zdGFydDsKKwlzbnByaW50ZihidXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHJlcy5zdGFydCk7CiAKIAlyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihidXMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYwppbmRleCA4YTljMjY5Li42NGQxN2IwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYwpAQCAtMzksMTIgKzM5LDkgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCS8qIE1hcCBCQ1NSIGFyZWEgKi8KLQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJiY3NyIik7CisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzgzN3htZHMtYmNzciIpOwogCWlmIChucCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCi0JCW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOwotCQliY3NyX3JlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgcmVzLmVuZCAtIHJlcy5zdGFydCArIDEpOworCQliY3NyX3JlZ3MgPSBvZl9pb21hcChucCwgMCk7CiAJCW9mX25vZGVfcHV0KG5wKTsKIAl9CiAJaWYgKCFiY3NyX3JlZ3MpCkBAIC05Niw2ICs5Myw3IEBACiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM4Mzd4X2lkc1tdID0gewogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKaW5kZXggMjI5M2FlNS4uYzAwMzU2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzgzN3hfaWRzW10gPSB7CiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmgKaW5kZXggNjgwNjVlNi4uODhhM2I1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODN4eC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjZGVmaW5lIE1QQzgzWFhfU0NDUl9VU0JfRFJDTV8xMCAgIDB4MDAyMDAwMDAKICNkZWZpbmUgTVBDODMxNV9TQ0NSX1VTQl9NQVNLICAgICAgMHgwMGMwMDAwMAogI2RlZmluZSBNUEM4MzE1X1NDQ1JfVVNCX0RSQ01fMTEgICAweDAwYzAwMDAwCisjZGVmaW5lIE1QQzgzMTVfU0NDUl9VU0JfRFJDTV8wMSAgIDB4MDA0MDAwMDAKICNkZWZpbmUgTVBDODM3WF9TQ0NSX1VTQl9EUkNNXzExICAgMHgwMGMwMDAwMAogCiAvKiBzeXN0ZW0gaS9vIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgbG93ICovCkBAIC0zNyw2ICszOCw3IEBACiAvKiBVU0IgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBGU0xfVVNCMl9DT05UUk9MX09GRlMgICAgICAweDUwMAogI2RlZmluZSBDT05UUk9MX1VUTUlfUEhZX0VOICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENPTlRST0xfUkVGU0VMXzI0TUhaICAgICAgIDB4MDAwMDAwNDAKICNkZWZpbmUgQ09OVFJPTF9SRUZTRUxfNDhNSFogICAgICAgMHgwMDAwMDA4MAogI2RlZmluZSBDT05UUk9MX1BIWV9DTEtfU0VMX1VMUEkgICAweDAwMDAwNDAwCiAjZGVmaW5lIENPTlRST0xfT1RHX1BPUlQgICAgICAgICAgIDB4MDAwMDAwMjAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYwppbmRleCA0NzFmZGQ4Li42NGJjZjBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlpZiAoaW1tcl9ub2RlICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGltbXJfbm9kZSwgImZzbCxtcGM4MzE1LWltbXIiKSkKIAkJY2xyc2V0Yml0c19iZTMyKGltbWFwICsgTVBDODNYWF9TQ0NSX09GRlMsCiAJCSAgICAgICAgICAgICAgICBNUEM4MzE1X1NDQ1JfVVNCX01BU0ssCi0JCSAgICAgICAgICAgICAgICBNUEM4MzE1X1NDQ1JfVVNCX0RSQ01fMTEpOworCQkgICAgICAgICAgICAgICAgTVBDODMxNV9TQ0NSX1VTQl9EUkNNXzAxKTsKIAllbHNlCiAJCWNscnNldGJpdHNfYmUzMihpbW1hcCArIE1QQzgzWFhfU0NDUl9PRkZTLAogCQkgICAgICAgICAgICAgICAgTVBDODNYWF9TQ0NSX1VTQl9NQVNLLApAQCAtMTY0LDkgKzE2NCwxNSBAQAogCS8qIFVzaW5nIG9uLWNoaXAgUEhZICovCiAJaWYgKHByb3AgJiYgKCFzdHJjbXAocHJvcCwgInV0bWlfd2lkZSIpIHx8CiAJCSAgICAgIXN0cmNtcChwcm9wLCAidXRtaSIpKSkgewotCQkvKiBTZXQgVVRNSV9QSFlfRU4sIFJFRlNFTCB0byA0OE1IWiAqLworCQl1MzIgcmVmc2VsOworCisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbW1yX25vZGUsICJmc2wsbXBjODMxNS1pbW1yIikpCisJCQlyZWZzZWwgPSBDT05UUk9MX1JFRlNFTF8yNE1IWjsKKwkJZWxzZQorCQkJcmVmc2VsID0gQ09OVFJPTF9SRUZTRUxfNDhNSFo7CisJCS8qIFNldCBVVE1JX1BIWV9FTiBhbmQgUkVGU0VMICovCiAJCW91dF9iZTMyKHVzYl9yZWdzICsgRlNMX1VTQjJfQ09OVFJPTF9PRkZTLAotCQkJCUNPTlRST0xfVVRNSV9QSFlfRU4gfCBDT05UUk9MX1JFRlNFTF80OE1IWik7CisJCQkJQ09OVFJPTF9VVE1JX1BIWV9FTiB8IHJlZnNlbCk7CiAJLyogVXNpbmcgZXh0ZXJuYWwgVVBMSSBQSFkgKi8KIAl9IGVsc2UgaWYgKHByb3AgJiYgIXN0cmNtcChwcm9wLCAidWxwaSIpKSB7CiAJCS8qIFNldCBQSFlfQ0xLX1NFTCB0byBVTFBJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IDdlNzZkZGIuLjdmZjI5ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC0xOSw3ICsxOSw2IEBACiBjb25maWcgTVBDODU2MF9BRFMKIAlib29sICJGcmVlc2NhbGUgTVBDODU2MCBBRFMiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFBQQ19DUE1fTkVXX0JJTkRJTkcKIAlzZWxlY3QgQ1BNMgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1QQyA4NTYwIEFEUyBib2FyZApAQCAtNDYsNiArNDUsMTIgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NXh4IERTIChNUEM4NTQ0IERTKSBib2FyZAogCitjb25maWcgS1NJODU2MAorICAgICAgICBib29sICJFbWVyc29uIEtTSTg1NjAiCisgICAgICAgIHNlbGVjdCBERUZBVUxUX1VJTUFHRQorICAgICAgICBoZWxwCisgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRW1lcnNvbiBLU0k4NTYwIGJvYXJkCisKIGNvbmZpZyBTVFhfR1AzCiAJYm9vbCAiU2lsaWNvbiBUdXJua2V5IEV4cHJlc3MgR1AzIgogCWhlbHAKQEAgLTUzLDE0ICs1OCwxMiBAQAogCSAgYm9hcmQuCiAJc2VsZWN0IENQTTIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUFBDX0NQTV9ORVdfQklORElORwogCiBjb25maWcgVFFNODU0MAogCWJvb2wgIlRRIENvbXBvbmVudHMgVFFNODU0MCIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBUUSBDb21wb25lbnRzIFRRTTg1NDAgYm9hcmQuCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFBQQ19DUE1fTkVXX0JJTkRJTkcKIAlzZWxlY3QgVFFNODV4eAogCiBjb25maWcgVFFNODU0MQpAQCAtNjgsNyArNzEsNiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFRRIENvbXBvbmVudHMgVFFNODU0MSBib2FyZC4KIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUFBDX0NQTV9ORVdfQklORElORwogCXNlbGVjdCBUUU04NXh4CiAJc2VsZWN0IENQTTIKIApAQCAtNzcsNyArNzksNiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFRRIENvbXBvbmVudHMgVFFNODU1NSBib2FyZC4KIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUFBDX0NQTV9ORVdfQklORElORwogCXNlbGVjdCBUUU04NXh4CiAJc2VsZWN0IENQTTIKIApAQCAtODYsNyArODcsNiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFRRIENvbXBvbmVudHMgVFFNODU2MCBib2FyZC4KIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUFBDX0NQTV9ORVdfQklORElORwogCXNlbGVjdCBUUU04NXh4CiAJc2VsZWN0IENQTTIKIApAQCAtOTksNyArOTksNiBAQAogY29uZmlnIFNCQzg1NjAKIAlib29sICJXaW5kIFJpdmVyIFNCQzg1NjAiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFBQQ19DUE1fTkVXX0JJTkRJTkcgaWYgQ1BNMgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFdpbmQgUml2ZXIgU0JDODU2MCBib2FyZAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKaW5kZXggY2I3YWY0ZS4uNmNlYTE4NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQpAQCAtMTAsMyArMTAsNCBAQAogb2JqLSQoQ09ORklHX1RRTTg1eHgpCSAgKz0gdHFtODV4eC5vCiBvYmotJChDT05GSUdfU0JDODU2MCkgICAgICs9IHNiYzg1NjAubwogb2JqLSQoQ09ORklHX1NCQzg1NDgpICAgICArPSBzYmM4NTQ4Lm8KK29iai0kKENPTkZJR19LU0k4NTYwKQkgICs9IGtzaTg1NjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE0NWFkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgdGhlIEVtZXJzb24gS1NJODU2MAorICoKKyAqIEF1dGhvcjogQWxleGFuZHIgU21pcm5vdiA8YXNtaXJub3ZAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBtcGM4NXh4X2Fkcy5jIG1haW50YWluZWQgYnkgS3VtYXIgR2FsYQorICoKKyAqIDIwMDggKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KKyNpbmNsdWRlIDxzeXNkZXYvY3BtMl9waWMuaD4KKworCisjZGVmaW5lIEtTSTg1NjBfQ1BMRF9IVlIJCTB4MDQgLyogSGFyZHdhcmUgVmVyc2lvbiBSZWdpc3RlciAqLworI2RlZmluZSBLU0k4NTYwX0NQTERfUFZSCQkweDA4IC8qIFBMRCBWZXJzaW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTSTg1NjBfQ1BMRF9SQ1IxCQkweDMwIC8qIFJlc2V0IENvbW1hbmQgUmVnaXN0ZXIgMSAqLworCisjZGVmaW5lIEtTSTg1NjBfQ1BMRF9SQ1IxX0NQVUhSCQkweDgwIC8qIENQVSBIYXJkIFJlc2V0ICovCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNwbGRfYmFzZSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpjbWQpCit7CisJaWYgKGNwbGRfYmFzZSkKKwkJb3V0XzgoY3BsZF9iYXNlICsgS1NJODU2MF9DUExEX1JDUjEsIEtTSTg1NjBfQ1BMRF9SQ1IxX0NQVUhSKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCBDUExEIGJhc2UsIGhhbmcgZm9yZXZlclxuIik7CisKKwlmb3IgKDs7KTsKK30KKworc3RhdGljIHZvaWQgY3BtMl9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlpbnQgY2FzY2FkZV9pcnE7CisKKwl3aGlsZSAoKGNhc2NhZGVfaXJxID0gY3BtMl9nZXRfaXJxKCkpID49IDApCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CisKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGtzaTg1NjBfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworI2lmZGVmIENPTkZJR19DUE0yCisJaW50IGlycTsKKyNlbmRpZgorCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAib3Blbi1waWMiKTsKKworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgb3Blbi1waWMgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IG1hcCBtcGljIHJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOLAorCQkJMCwgMjU2LCAiIE9wZW5QSUMgICIpOworCUJVR19PTihtcGljID09IE5VTEwpOworCW9mX25vZGVfcHV0KG5wKTsKKworCW1waWNfaW5pdChtcGljKTsKKworI2lmZGVmIENPTkZJR19DUE0yCisJLyogU2V0dXAgQ1BNMiBQSUMgKi8KKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsY3BtMi1waWMiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlBJQyBpbml0OiBjYW4gbm90IGZpbmQgZnNsLGNwbTItcGljIG5vZGVcbiIpOworCQlyZXR1cm47CisJfQorCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKworCWNwbTJfcGljX2luaXQobnApOworCW9mX25vZGVfcHV0KG5wKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsIGNwbTJfY2FzY2FkZSk7CisKKwlzZXR1cF9pcnEoMCwgTlVMTCk7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19DUE0yCisvKgorICogU2V0dXAgSS9PIHBvcnRzCisgKi8KK3N0cnVjdCBjcG1fcGluIHsKKwlpbnQgcG9ydCwgcGluLCBmbGFnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3BtX3BpbiBfX2luaXRkYXRhIGtzaTg1NjBfcGluc1tdID0geworCS8qIFNDQzEgKi8KKwl7MywgMjksIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MywgMzAsIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LAorCXszLCAzMSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisKKwkvKiBTQ0MyICovCisJezMsIDI2LCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezMsIDI3LCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezMsIDI4LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKworCS8qIEZDQzEgKi8KKwl7MCwgMTQsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXswLCAxNSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDE2LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MCwgMTcsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXswLCAxOCwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXswLCAxOSwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXswLCAyMCwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXswLCAyMSwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXswLCAyNiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwKKwl7MCwgMjcsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWX0sCisJezAsIDI4LCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwKKwl7MCwgMjksIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LAorCXswLCAzMCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwKKwl7MCwgMzEsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWX0sCisJezIsIDIzLCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwgLyogQ0xLOSAqLworCXsyLCAyMiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sIC8qIENMSzEwICovCisKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2lvcG9ydHModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtzaTg1NjBfcGlucyk7IGkrKykgeworCQlzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJmtzaTg1NjBfcGluc1tpXTsKKwkJY3BtMl9zZXRfcGluKHBpbi0+cG9ydCwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOworCX0KKworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMSwgQ1BNX0JSRzEsIENQTV9DTEtfUlgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMSwgQ1BNX0JSRzEsIENQTV9DTEtfVFgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMiwgQ1BNX0JSRzIsIENQTV9DTEtfUlgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMiwgQ1BNX0JSRzIsIENQTV9DTEtfVFgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfRkNDMSwgQ1BNX0NMSzksIENQTV9DTEtfUlgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfRkNDMSwgQ1BNX0NMSzEwLCBDUE1fQ0xLX1RYKTsKK30KKyNlbmRpZgorCisvKgorICogU2V0dXAgdGhlIGFyY2hpdGVjdHVyZQorICovCitzdGF0aWMgdm9pZCBfX2luaXQga3NpODU2MF9zZXR1cF9hcmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpjcGxkOworCisJY3BsZCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJlbWVyc29uLEtTSTg1NjAtY3BsZCIpOworCWlmIChjcGxkKQorCQljcGxkX2Jhc2UgPSBvZl9pb21hcChjcGxkLCAwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCBDUExEIGluIGRldmljZSB0cmVlXG4iKTsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygia3NpODU2MF9zZXR1cF9hcmNoKCkiLCAwKTsKKworI2lmZGVmIENPTkZJR19DUE0yCisJY3BtMl9yZXNldCgpOworCWluaXRfaW9wb3J0cygpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGtzaTg1NjBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwl1aW50IHB2aWQsIHN2aWQsIHBoaWQxOworCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKKworCXB2aWQgPSBtZnNwcihTUFJOX1BWUik7CisJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKKworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEVtZXJzb24gTmV0d29yayBQb3dlclxuIik7CisJc2VxX3ByaW50ZihtLCAiQm9hcmRcdFx0OiBLU0k4NTYwXG4iKTsKKworCWlmIChjcGxkX2Jhc2UpIHsKKwkJc2VxX3ByaW50ZihtLCAiSGFyZHdhcmUgcmV2XHQ6ICVkXG4iLAorCQkJCQlpbl84KGNwbGRfYmFzZSArIEtTSTg1NjBfQ1BMRF9IVlIpKTsKKwkJc2VxX3ByaW50ZihtLCAiQ1BMRCByZXZcdDogJWRcbiIsCisJCQkJCWluXzgoY3BsZF9iYXNlICsgS1NJODU2MF9DUExEX1BWUikpOworCX0gZWxzZQorCQlzZXFfcHJpbnRmKG0sICJVbmtub3duIEhhcmR3YXJlIGFuZCBDUExEIHJldnNcbiIpOworCisJc2VxX3ByaW50ZihtLCAiUFZSXHRcdDogMHgleFxuIiwgcHZpZCk7CisJc2VxX3ByaW50ZihtLCAiU1ZSXHRcdDogMHgleFxuIiwgc3ZpZCk7CisKKwkvKiBEaXNwbGF5IGNwdSBQbGwgc2V0dGluZyAqLworCXBoaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKKwlzZXFfcHJpbnRmKG0sICJQTEwgc2V0dGluZ1x0OiAweCV4XG4iLCAoKHBoaWQxID4+IDI0KSAmIDB4M2YpKTsKKworCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KKwlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKKwl7IC50eXBlID0gInNvYyIsIH0sCisJeyAubmFtZSA9ICJjcG0iLCB9LAorCXsgLm5hbWUgPSAibG9jYWxidXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChrc2k4NTYwLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGtzaTg1NjBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlyZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJlbWVyc29uLEtTSTg1NjAiKTsKK30KKworZGVmaW5lX21hY2hpbmUoa3NpODU2MCkgeworCS5uYW1lCQkJPSAiS1NJODU2MCIsCisJLnByb2JlCQkJPSBrc2k4NTYwX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IGtzaTg1NjBfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0ga3NpODU2MF9waWNfaW5pdCwKKwkuc2hvd19jcHVpbmZvCQk9IGtzaTg1NjBfc2hvd19jcHVpbmZvLAorCS5nZXRfaXJxCQk9IG1waWNfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBtYWNoaW5lX3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwppbmRleCA0ZTAzMDUwLi4zNTgyYzg0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtcGM4NTYwX2Fkc19waW5zKTsgaSsrKSB7Ci0JCXN0cnVjdCBjcG1fcGluICpwaW4gPSAmbXBjODU2MF9hZHNfcGluc1tpXTsKKwkJY29uc3Qgc3RydWN0IGNwbV9waW4gKnBpbiA9ICZtcGM4NTYwX2Fkc19waW5zW2ldOwogCQljcG0yX3NldF9waW4ocGluLT5wb3J0LCBwaW4tPnBpbiwgcGluLT5mbGFncyk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYwppbmRleCBiZGIzZDBiLi5kZmQ4YjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpAQCAtMzYsNyArMzcsNyBAQAogI3VuZGVmIERFQlVHCiAKICNpZmRlZiBERUJVRwotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCwgX19GVU5DVElPTl9fLCAjIyBhcmdzKQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKQogI2VuZGlmCkBAIC0xODMsNiArMTg0LDE4IEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM4NXh4ZHNfaWRzW10gPSB7CisJeyAudHlwZSA9ICJzb2MiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhkc19wdWJsaXNoX2RldmljZXModm9pZCkKK3sKKwlyZXR1cm4gb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG1wYzg1eHhkc19pZHMsIE5VTEwpOworfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwobXBjODU0NF9kcywgbXBjODV4eGRzX3B1Ymxpc2hfZGV2aWNlcyk7CisKIC8qCiAgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwppbmRleCAyMWQxMTM1Li43NDQyYzU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwpAQCAtMTEsNiArMTEsMTIgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjQxIEhQQ04gYm9hcmQuCiAKK2NvbmZpZyBTQkM4NjQxRAorCWJvb2wgIldpbmQgUml2ZXIgU0JDODY0MUQiCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgV1JTIFNCQzg2NDFEIGJvYXJkLgorCiBjb25maWcgTVBDODYxMF9IUENECiAJYm9vbCAiRnJlZXNjYWxlIE1QQzg2MTAgSFBDRCIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKQEAgLTI0LDcgKzMwLDcgQEAKIAlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgTVBJQwotCWRlZmF1bHQgeSBpZiBNUEM4NjQxX0hQQ04KKwlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFECiAKIGNvbmZpZyBNUEM4NjEwCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCmluZGV4IGM5NjcwNjMuLjFiOWI0YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKQEAgLTQsNCArNCw1IEBACiAKIG9iai0kKENPTkZJR19TTVApCQkrPSBtcGM4Nnh4X3NtcC5vCiBvYmotJChDT05GSUdfTVBDODY0MV9IUENOKQkrPSBtcGM4Nnh4X2hwY24ubworb2JqLSQoQ09ORklHX1NCQzg2NDFEKQkJKz0gc2JjODY0MWQubwogb2JqLSQoQ09ORklHX01QQzg2MTBfSFBDRCkJKz0gbXBjODYxMF9ocGNkLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYwppbmRleCAwYjA3NDg1Li4xOGI4ZWJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCkBAIC01Miw3ICs1Miw3IEBACiB9CiBtYWNoaW5lX2RldmljZV9pbml0Y2FsbChtcGM4Nnh4X2hwY2QsIG1wYzg2MTBfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKIAotdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9faW5pdAogbXBjODZ4eF9ocGNkX2luaXRfaXJxKHZvaWQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMxOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWxvbmcgX19pbml0CitzdGF0aWMgbG9uZyBfX2luaXQKIG1wYzg2eHhfdGltZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHRlbXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKaW5kZXggY2ZiZThjNS4uZjk0N2Y1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYwpAQCAtNTUsNyArNTUsNyBAQAogfQogI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KIAotdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9faW5pdAogbXBjODZ4eF9ocGNuX2luaXRfaXJxKHZvaWQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMxOwpAQCAtMTYyLDcgKzE2Miw3IEBACiB9CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIG1wYzg2eHhfaHBjbl9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKQEAgLTE5MCwxMyArMTkwLDE5IEBACiB7CiAJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwogCi0JaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAibXBjODZ4eCIpKQorCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImZzbCxtcGM4NjQxaHBjbiIpKQogCQlyZXR1cm4gMTsJLyogTG9va3MgZ29vZCAqLwogCisJLyogQmUgbmljZSBhbmQgZG9uJ3QgZ2l2ZSBzaWxlbnQgYm9vdCBkZWF0aC4gIERlbGV0ZSB0aGlzIGluIDIuNi4yNyAqLworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIm1wYzg2eHgiKSkgeworCQlwcl93YXJuaW5nKCJXQVJOSU5HOiB5b3VyIGR0cy9kdGIgaXMgb2xkLiBZb3UgbXVzdCB1cGRhdGUgYmVmb3JlIHRoZSBuZXh0IGtlcm5lbCByZWxlYXNlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLWxvbmcgX19pbml0CitzdGF0aWMgbG9uZyBfX2luaXQKIG1wYzg2eHhfdGltZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHRlbXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMGEwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIFNCQzg2NDFEIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IDIwMDggV2luZCBSaXZlciBTeXN0ZW1zIEluYy4KKyAqCisgKiBCeSBQYXVsIEdvcnRtYWtlciAoc2VlIE1BSU5UQUlORVJTIGZvciBjb250YWN0IGluZm9ybWF0aW9uKQorICoKKyAqIEJhc2VkIGxhcmdlbHkgb24gdGhlIDg2NDEgSFBDTiBzdXBwb3J0IGJ5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vbXBjODZ4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSA8YXNtL21waWMuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworI2luY2x1ZGUgIm1wYzg2eHguaCIKKworc3RhdGljIHZvaWQgX19pbml0CitzYmM4NjQxX2luaXRfaXJxKHZvaWQpCit7CisJc3RydWN0IG1waWMgKm1waWMxOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHJlc291cmNlIHJlczsKKworCS8qIERldGVybWluZSBQSUMgYWRkcmVzcy4gKi8KKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmIChucCA9PSBOVUxMKQorCQlyZXR1cm47CisJb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7CisKKwkvKiBBbGxvYyBtcGljIHN0cnVjdHVyZSBhbmQgcGVyIGlzdSBoYXMgMTYgSU5UIGVudHJpZXMuICovCisJbXBpYzEgPSBtcGljX2FsbG9jKG5wLCByZXMuc3RhcnQsCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOLAorCQkJMCwgMjU2LCAiIE1QSUMgICAgICIpOworCW9mX25vZGVfcHV0KG5wKTsKKwlCVUdfT04obXBpYzEgPT0gTlVMTCk7CisKKwltcGljX2luaXQobXBpYzEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3NiYzg2NDFfc2V0dXBfYXJjaCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworI2VuZGlmCisKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoInNiYzg2NDFfc2V0dXBfYXJjaCgpIiwgMCk7CisKKyNpZmRlZiBDT05GSUdfUENJCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4NjQxLXBjaWUiKQorCQlmc2xfYWRkX2JyaWRnZShucCwgMCk7CisjZW5kaWYKKworCXByaW50aygiU0JDODY0MSBib2FyZCBmcm9tIFdpbmQgUml2ZXJcbiIpOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNlbmRpZgorfQorCisKK3N0YXRpYyB2b2lkCitzYmM4NjQxX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290OworCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKKwljb25zdCBjaGFyICptb2RlbCA9ICIiOworCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKKworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFdpbmQgUml2ZXIgU3lzdGVtc1xuIik7CisKKwlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlpZiAocm9vdCkKKwkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwgTlVMTCk7CisJc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6ICVzXG4iLCBtb2RlbCk7CisJb2Zfbm9kZV9wdXQocm9vdCk7CisKKwlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKwlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOworfQorCisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgc2JjODY0MV9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIndpbmQsc2JjODY0MSIpKQorCQlyZXR1cm4gMTsJLyogTG9va3MgZ29vZCAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdAorbXBjODZ4eF90aW1lX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKworCS8qIFNldCB0aGUgdGltZSBiYXNlIHRvIHplcm8gKi8KKwltdHNwcihTUFJOX1RCV0wsIDApOworCW10c3ByKFNQUk5fVEJXVSwgMCk7CisKKwl0ZW1wID0gbWZzcHIoU1BSTl9ISUQwKTsKKwl0ZW1wIHw9IEhJRDBfVEJFTjsKKwltdHNwcihTUFJOX0hJRDAsIHRlbXApOworCWFzbSB2b2xhdGlsZSgiaXN5bmMiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChzYmM4NjQxLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShzYmM4NjQxKSB7CisJLm5hbWUJCQk9ICJTQkM4NjQxRCIsCisJLnByb2JlCQkJPSBzYmM4NjQxX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IHNiYzg2NDFfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0gc2JjODY0MV9pbml0X2lycSwKKwkuc2hvd19jcHVpbmZvCQk9IHNiYzg2NDFfc2hvd19jcHVpbmZvLAorCS5nZXRfaXJxCQk9IG1waWNfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBmc2xfcnN0Y3JfcmVzdGFydCwKKwkudGltZV9pbml0CQk9IG1wYzg2eHhfdGltZV9pbml0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorI2lmZGVmIENPTkZJR19QQ0kKKwkucGNpYmlvc19maXh1cF9idXMJPSBmc2xfcGNpYmlvc19maXh1cF9idXMsCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZwppbmRleCA3ZmQyMjRjLi42ZmM4NDllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWcKQEAgLTE4LDcgKzE4LDYgQEAKIGNvbmZpZyBNUEM4NlhBRFMKIAlib29sICJNUEM4NlhBRFMiCiAJc2VsZWN0IENQTTEKLQlzZWxlY3QgUFBDX0NQTV9ORVdfQklORElORwogCWhlbHAKIAkgIE1QQzg2eCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTeXN0ZW0gYnkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCiAJICBUaGUgTVBDODZ4QURTIGlzIG1lYW50IHRvIHNlcnZlIGFzIGEgcGxhdGZvcm0gZm9yIHMvdyBhbmQgaC93CkBAIC0yNyw3ICsyNiw2IEBACiBjb25maWcgTVBDODg1QURTCiAJYm9vbCAiTVBDODg1QURTIgogCXNlbGVjdCBDUE0xCi0Jc2VsZWN0IFBQQ19DUE1fTkVXX0JJTkRJTkcKIAloZWxwCiAJICBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBNUEM4ODUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU3lzdGVtIChBRFMpLgogCSAgQWxzbyBrbm93biBhcyBEVUVULgpAQCAtMzcsNyArMzUsNiBAQAogY29uZmlnIFBQQ19FUDg4WEMKIAlib29sICJFbWJlZGRlZCBQbGFuZXQgRVA4OHhDIChhLmsuYS4gQ1dILVBQQy04ODVYTi1WRSkiCiAJc2VsZWN0IENQTTEKLQlzZWxlY3QgUFBDX0NQTV9ORVdfQklORElORwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRW1iZWRkZWQgUGxhbmV0IEVQODh4QyBib2FyZC4KIApAQCAtNDcsNyArNDQsNiBAQAogY29uZmlnIFBQQ19BRERFUjg3NQogCWJvb2wgIkFuYWxvZ3VlICYgTWljcm8gQWRkZXIgODc1IgogCXNlbGVjdCBDUE0xCi0Jc2VsZWN0IFBQQ19DUE1fTkVXX0JJTkRJTkcKIAlzZWxlY3QgUkVEQk9PVAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQW5hbG9ndWUgJiBNaWNybyBBZGRlciA4NzUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYwppbmRleCAxODRmOTk4Li4wZDlmNzVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jCkBAIC0xMTEsMTcgKzExMSwxMiBAQAogCiAJLyogUHJvY2Vzc29yIGZyZXF1ZW5jeSBpcyBNSHouCiAJICovCi0JcHBjX3RiX2ZyZXEgPSA1MDAwMDAwMDsKLQlpZiAoIWdldF9mcmVxKCJidXMtZnJlcXVlbmN5IiwgJnBwY190Yl9mcmVxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IEVzdGltYXRpbmcgZGVjcmVtZW50ZXIgZnJlcXVlbmN5ICIKLQkJICAgICAgICAgICAgICAgICIobm90IGZvdW5kKVxuIik7Ci0JfQotCXBwY190Yl9mcmVxIC89IDE2OwogCXBwY19wcm9jX2ZyZXEgPSA1MDAwMDAwMDsKIAlpZiAoIWdldF9mcmVxKCJjbG9jay1mcmVxdWVuY3kiLCAmcHBjX3Byb2NfZnJlcSkpCiAJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogRXN0aW1hdGluZyBwcm9jZXNzb3IgZnJlcXVlbmN5ICIKIAkJICAgICAgICAgICAgICAgICIobm90IGZvdW5kKVxuIik7CiAKKwlwcGNfdGJfZnJlcSA9IHBwY19wcm9jX2ZyZXEgLyAxNjsKIAlwcmludGsoIkRlY3JlbWVudGVyIEZyZXF1ZW5jeSA9IDB4JWx4XG4iLCBwcGNfdGJfZnJlcSk7CiAKIAkvKiBQZXJmb3JtIHNvbWUgbW9yZSB0aW1lci90aW1lYmFzZSBpbml0aWFsaXphdGlvbi4gIFRoaXMgdXNlZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCmluZGV4IDBhZmQyMjUuLmYzOGM1MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKIAlzZWxlY3QgRlNMX1NPQwogCXNlbGVjdCBNUEM4M3h4CiAJc2VsZWN0IElQSUMKLQlzZWxlY3QgRlNMX0VNQl9QRVJGTU9OCiAKIGNvbmZpZyBQUENfODZ4eAogCWJvb2wgIkZyZWVzY2FsZSA4Nnh4IgpAQCAtMjkxLDEzICsyOTAsNyBAQAogY29uZmlnIFBQQ19DUE1fTkVXX0JJTkRJTkcKIAlib29sCiAJZGVwZW5kcyBvbiBDUE0xIHx8IENQTTIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3VyIGJvYXJkIGhhcyBiZWVuIGNvbnZlcnRlZCB0byB1c2UgdGhlIG5ldwotCSAgZGV2aWNlIHRyZWUgYmluZGluZ3MgZm9yIENQTSwgYW5kIG5vIGxvbmdlciBuZWVkcyB0aGUKLQkgIGlvcG9ydCBjYWxsYmFja3Mgb3IgdGhlIHBsYXRmb3JtIGRldmljZSBnbHVlIGNvZGUuCi0KLQkgIFRoZSBmc19lbmV0IGFuZCBjcG1fdWFydCBkcml2ZXJzIHdpbGwgYmUgYnVpbHQgYXMKLQkgIG9mX3BsYXRmb3JtIGRldmljZXMuCisJZGVmYXVsdCB5CiAKIGNvbmZpZyBBWE9OX1JBTQogCXRyaXN0YXRlICJBeG9uIEREUjIgbWVtb3J5IGRldmljZSBkcml2ZXIiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCmluZGV4IDczZDgxY2UuLjVmYzdmYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC00MSwxMSArNDEsMTMgQEAKIAlib29sICJBTUNDIDQweCIKIAlzZWxlY3QgUFBDX0RDUl9OQVRJVkUKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKKwlzZWxlY3QgNHh4X1NPQwogCiBjb25maWcgNDR4CiAJYm9vbCAiQU1DQyA0NHgiCiAJc2VsZWN0IFBQQ19EQ1JfTkFUSVZFCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCisJc2VsZWN0IDR4eF9TT0MKIAogY29uZmlnIEUyMDAKIAlib29sICJGcmVlc2NhbGUgZTIwMCIKQEAgLTExMyw3ICsxMTUsMTIgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIEZTTF9FTUJfUEVSRk1PTgotCWJvb2wKKwlib29sICJGcmVlc2NhbGUgRW1iZWRkZWQgUGVyZm1vbiIKKwlkZXBlbmRzIG9uIEU1MDAgfHwgUFBDXzgzeHgKKwloZWxwCisJICBUaGlzIGlzIHRoZSBQZXJmb3JtYW5jZSBNb25pdG9yIHN1cHBvcnQgZm91bmQgb24gdGhlIGU1MDAgY29yZQorCSAgYW5kIHNvbWUgZTMwMCBjb3JlcyAoYzMgYW5kIGM0KS4gIFNlbGVjdCB0aGlzIG9ubHkgaWYgeW91cgorCSAgY29yZSBzdXBwb3J0cyB0aGUgRW1iZWRkZWQgUGVyZm9ybWFuY2UgTW9uaXRvciBBUFUKIAogY29uZmlnIFBURV82NEJJVAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggZWRhYjYzMS4uNDU2NDZiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTI4LDEzICsyOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2NlbGwtcmVncy5oPgogCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogLyogSU9NTVUgc2l6aW5nICovCiAjZGVmaW5lIElPX1NFR01FTlRfU0hJRlQJMjgKLSNkZWZpbmUgSU9fUEFHRU5PX0JJVFMJCShJT19TRUdNRU5UX1NISUZUIC0gSU9NTVVfUEFHRV9TSElGVCkKKyNkZWZpbmUgSU9fUEFHRU5PX0JJVFMoc2hpZnQpCShJT19TRUdNRU5UX1NISUZUIC0gKHNoaWZ0KSkKIAogLyogVGhlIGhpZ2ggYml0IG5lZWRzIHRvIGJlIHNldCBvbiBldmVyeSBETUEgYWRkcmVzcyAqLwogI2RlZmluZSBTUElERVJfRE1BX09GRlNFVAkweDgwMDAwMDAwdWwKQEAgLTEyMyw3ICsxMjMsNiBAQAogCXN0cnVjdCBjYmVfaW9tbXUgKmlvbW11OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIHB0ZV9vZmZzZXQ7CiAJdW5zaWduZWQgaW50IGlvaWQ7CiAJc3RydWN0IGlvbW11X3RhYmxlIHRhYmxlOwogfTsKQEAgLTIwMCw3ICsxOTksNyBAQAogCQkod2luZG93LT5pb2lkICYgSU9QVEVfSU9JRF9NYXNrKTsKICNlbmRpZgogCi0JaW9fcHRlID0gKHVuc2lnbmVkIGxvbmcgKil0YmwtPml0X2Jhc2UgKyAoaW5kZXggLSB3aW5kb3ctPnB0ZV9vZmZzZXQpOworCWlvX3B0ZSA9ICh1bnNpZ25lZCBsb25nICopdGJsLT5pdF9iYXNlICsgKGluZGV4IC0gdGJsLT5pdF9vZmZzZXQpOwogCiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrLCB1YWRkciArPSBJT01NVV9QQUdFX1NJWkUpCiAJCWlvX3B0ZVtpXSA9IGJhc2VfcHRlIHwgKF9fcGEodWFkZHIpICYgSU9QVEVfUlBOX01hc2spOwpAQCAtMjMyLDcgKzIzMSw3IEBACiAJCXwgKHdpbmRvdy0+aW9pZCAmIElPUFRFX0lPSURfTWFzayk7CiAjZW5kaWYKIAotCWlvX3B0ZSA9ICh1bnNpZ25lZCBsb25nICopdGJsLT5pdF9iYXNlICsgKGluZGV4IC0gd2luZG93LT5wdGVfb2Zmc2V0KTsKKwlpb19wdGUgPSAodW5zaWduZWQgbG9uZyAqKXRibC0+aXRfYmFzZSArIChpbmRleCAtIHRibC0+aXRfb2Zmc2V0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykKIAkJaW9fcHRlW2ldID0gcHRlOwpAQCAtMzA3LDc2ICszMDYsODQgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHZvaWQgY2VsbF9pb21tdV9zZXR1cF9wYWdlX3RhYmxlcyhzdHJ1Y3QgY2JlX2lvbW11ICppb21tdSwKK3N0YXRpYyB2b2lkIGNlbGxfaW9tbXVfc2V0dXBfc3RhYihzdHJ1Y3QgY2JlX2lvbW11ICppb21tdSwKIAkJCQl1bnNpZ25lZCBsb25nIGRiYXNlLCB1bnNpZ25lZCBsb25nIGRzaXplLAogCQkJCXVuc2lnbmVkIGxvbmcgZmJhc2UsIHVuc2lnbmVkIGxvbmcgZnNpemUpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyByZWcsIHNlZ21lbnRzLCBwYWdlc19wZXJfc2VnbWVudCwgcHRhYl9zaXplLCBzdGFiX3NpemUsCi0JCSAgICAgIG5fcHRlX3BhZ2VzLCBiYXNlOwotCi0JYmFzZSA9IGRiYXNlOwotCWlmIChmc2l6ZSAhPSAwKQotCQliYXNlID0gbWluKGZiYXNlLCBkYmFzZSk7CisJdW5zaWduZWQgbG9uZyBzZWdtZW50cywgc3RhYl9zaXplOwogCiAJc2VnbWVudHMgPSBtYXgoZGJhc2UgKyBkc2l6ZSwgZmJhc2UgKyBmc2l6ZSkgPj4gSU9fU0VHTUVOVF9TSElGVDsKLQlwYWdlc19wZXJfc2VnbWVudCA9IDF1bGwgPDwgSU9fUEFHRU5PX0JJVFM7CiAKLQlwcl9kZWJ1ZygiJXM6IGlvbW11WyVkXTogc2VnbWVudHM6ICVsdSwgcGFnZXMgcGVyIHNlZ21lbnQ6ICVsdVxuIiwKLQkJCV9fRlVOQ1RJT05fXywgaW9tbXUtPm5pZCwgc2VnbWVudHMsIHBhZ2VzX3Blcl9zZWdtZW50KTsKKwlwcl9kZWJ1ZygiJXM6IGlvbW11WyVkXTogc2VnbWVudHM6ICVsdVxuIiwKKwkJCV9fZnVuY19fLCBpb21tdS0+bmlkLCBzZWdtZW50cyk7CiAKIAkvKiBzZXQgdXAgdGhlIHNlZ21lbnQgdGFibGUgKi8KIAlzdGFiX3NpemUgPSBzZWdtZW50cyAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKIAlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShpb21tdS0+bmlkLCBHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc3RhYl9zaXplKSk7CiAJQlVHX09OKCFwYWdlKTsKIAlpb21tdS0+c3RhYiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQljbGVhcl9wYWdlKGlvbW11LT5zdGFiKTsKKwltZW1zZXQoaW9tbXUtPnN0YWIsIDAsIHN0YWJfc2l6ZSk7Cit9CiAKLQkvKiAuLi4gYW5kIHRoZSBwYWdlIHRhYmxlcy4gU2luY2UgdGhlc2UgYXJlIGNvbnRpZ3VvdXMsIHdlIGNhbiB0cmVhdAotCSAqIHRoZSBwYWdlIHRhYmxlcyBhcyBvbmUgYXJyYXkgb2YgcHRlcywgbGlrZSBwU2VyaWVzIGRvZXMuCi0JICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqY2VsbF9pb21tdV9hbGxvY19wdGFiKHN0cnVjdCBjYmVfaW9tbXUgKmlvbW11LAorCQl1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBnYXBfYmFzZSwKKwkJdW5zaWduZWQgbG9uZyBnYXBfc2l6ZSwgdW5zaWduZWQgbG9uZyBwYWdlX3NoaWZ0KQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgcmVnLCBzZWdtZW50cywgcGFnZXNfcGVyX3NlZ21lbnQsIHB0YWJfc2l6ZSwKKwkJICAgICAgbl9wdGVfcGFnZXMsIHN0YXJ0X3NlZywgKnB0YWI7CisKKwlzdGFydF9zZWcgPSBiYXNlID4+IElPX1NFR01FTlRfU0hJRlQ7CisJc2VnbWVudHMgID0gc2l6ZSA+PiBJT19TRUdNRU5UX1NISUZUOworCXBhZ2VzX3Blcl9zZWdtZW50ID0gMXVsbCA8PCBJT19QQUdFTk9fQklUUyhwYWdlX3NoaWZ0KTsKKwkvKiBQVEVzIGZvciBlYWNoIHNlZ21lbnQgbXVzdCBzdGFydCBvbiBhIDRLIGJvdW5kYXkgKi8KKwlwYWdlc19wZXJfc2VnbWVudCA9IG1heChwYWdlc19wZXJfc2VnbWVudCwKKwkJCQkoMSA8PCAxMikgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOworCiAJcHRhYl9zaXplID0gc2VnbWVudHMgKiBwYWdlc19wZXJfc2VnbWVudCAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQlwcl9kZWJ1ZygiJXM6IGlvbW11WyVkXTogcHRhYl9zaXplOiAlbHUsIG9yZGVyOiAlZFxuIiwgX19GVU5DVElPTl9fLAorCXByX2RlYnVnKCIlczogaW9tbXVbJWRdOiBwdGFiX3NpemU6ICVsdSwgb3JkZXI6ICVkXG4iLCBfX2Z1bmNfXywKIAkJCWlvbW11LT5uaWQsIHB0YWJfc2l6ZSwgZ2V0X29yZGVyKHB0YWJfc2l6ZSkpOwogCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKGlvbW11LT5uaWQsIEdGUF9LRVJORUwsIGdldF9vcmRlcihwdGFiX3NpemUpKTsKIAlCVUdfT04oIXBhZ2UpOwogCi0JaW9tbXUtPnB0YWIgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JbWVtc2V0KGlvbW11LT5wdGFiLCAwLCBwdGFiX3NpemUpOworCXB0YWIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJbWVtc2V0KHB0YWIsIDAsIHB0YWJfc2l6ZSk7CiAKLQkvKiBhbGxvY2F0ZSBhIGJvZ3VzIHBhZ2UgZm9yIHRoZSBlbmQgb2YgZWFjaCBtYXBwaW5nICovCi0JcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUoaW9tbXUtPm5pZCwgR0ZQX0tFUk5FTCwgMCk7Ci0JQlVHX09OKCFwYWdlKTsKLQlpb21tdS0+cGFkX3BhZ2UgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JY2xlYXJfcGFnZShpb21tdS0+cGFkX3BhZ2UpOwotCi0JLyogbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCBmb3IgYSBwYWdlIHRhYmxlICovCi0Jbl9wdGVfcGFnZXMgPSAocGFnZXNfcGVyX3NlZ21lbnQgKgotCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSA+PiBJT01NVV9QQUdFX1NISUZUOworCS8qIG51bWJlciBvZiA0SyBwYWdlcyBuZWVkZWQgZm9yIGEgcGFnZSB0YWJsZSAqLworCW5fcHRlX3BhZ2VzID0gKHBhZ2VzX3Blcl9zZWdtZW50ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSA+PiAxMjsKIAogCXByX2RlYnVnKCIlczogaW9tbXVbJWRdOiBzdGFiIGF0ICVwLCBwdGFiIGF0ICVwLCBuX3B0ZV9wYWdlczogJWx1XG4iLAotCQkJX19GVU5DVElPTl9fLCBpb21tdS0+bmlkLCBpb21tdS0+c3RhYiwgaW9tbXUtPnB0YWIsCisJCQlfX2Z1bmNfXywgaW9tbXUtPm5pZCwgaW9tbXUtPnN0YWIsIHB0YWIsCiAJCQluX3B0ZV9wYWdlcyk7CiAKIAkvKiBpbml0aWFsaXNlIHRoZSBTVEVzICovCiAJcmVnID0gSU9TVEVfViB8ICgobl9wdGVfcGFnZXMgLSAxKSA8PCA1KTsKIAotCWlmIChJT01NVV9QQUdFX1NJWkUgPT0gMHgxMDAwKQotCQlyZWcgfD0gSU9TVEVfUFNfNEs7Ci0JZWxzZSBpZiAoSU9NTVVfUEFHRV9TSVpFID09IDB4MTAwMDApCi0JCXJlZyB8PSBJT1NURV9QU182NEs7Ci0JZWxzZSB7Ci0JCWV4dGVybiB2b2lkIF9fdW5rbm93bl9wYWdlX3NpemVfZXJyb3Iodm9pZCk7Ci0JCV9fdW5rbm93bl9wYWdlX3NpemVfZXJyb3IoKTsKKwlzd2l0Y2ggKHBhZ2Vfc2hpZnQpIHsKKwljYXNlIDEyOiByZWcgfD0gSU9TVEVfUFNfNEs7ICBicmVhazsKKwljYXNlIDE2OiByZWcgfD0gSU9TVEVfUFNfNjRLOyBicmVhazsKKwljYXNlIDIwOiByZWcgfD0gSU9TVEVfUFNfMU07ICBicmVhazsKKwljYXNlIDI0OiByZWcgfD0gSU9TVEVfUFNfMTZNOyBicmVhazsKKwlkZWZhdWx0OiBCVUcoKTsKIAl9CiAKKwlnYXBfYmFzZSA9IGdhcF9iYXNlID4+IElPX1NFR01FTlRfU0hJRlQ7CisJZ2FwX3NpemUgPSBnYXBfc2l6ZSA+PiBJT19TRUdNRU5UX1NISUZUOworCiAJcHJfZGVidWcoIlNldHRpbmcgdXAgSU9NTVUgc3RhYjpcbiIpOwotCWZvciAoaSA9IGJhc2UgPj4gSU9fU0VHTUVOVF9TSElGVDsgaSA8IHNlZ21lbnRzOyBpKyspIHsKLQkJaW9tbXUtPnN0YWJbaV0gPSByZWcgfAotCQkJKF9fcGEoaW9tbXUtPnB0YWIpICsgbl9wdGVfcGFnZXMgKiBJT01NVV9QQUdFX1NJWkUgKiBpKTsKKwlmb3IgKGkgPSBzdGFydF9zZWc7IGkgPCAoc3RhcnRfc2VnICsgc2VnbWVudHMpOyBpKyspIHsKKwkJaWYgKGkgPj0gZ2FwX2Jhc2UgJiYgaSA8IChnYXBfYmFzZSArIGdhcF9zaXplKSkgeworCQkJcHJfZGVidWcoIlx0b3ZlcmxhcCBhdCAlZCwgc2tpcHBpbmdcbiIsIGkpOworCQkJY29udGludWU7CisJCX0KKwkJaW9tbXUtPnN0YWJbaV0gPSByZWcgfCAoX19wYShwdGFiKSArIChuX3B0ZV9wYWdlcyA8PCAxMikgKgorCQkJCQkoaSAtIHN0YXJ0X3NlZykpOwogCQlwcl9kZWJ1ZygiXHRbJWRdIDB4JTAxNmx4XG4iLCBpLCBpb21tdS0+c3RhYltpXSk7CiAJfQorCisJcmV0dXJuIHB0YWI7CiB9CiAKIHN0YXRpYyB2b2lkIGNlbGxfaW9tbXVfZW5hYmxlX2hhcmR3YXJlKHN0cnVjdCBjYmVfaW9tbXUgKmlvbW11KQpAQCAtMzg3LDcgKzM5NCw3IEBACiAKIAlpZiAoY2VsbF9pb21tdV9maW5kX2lvYyhpb21tdS0+bmlkLCAmeGxhdGVfYmFzZSkpCiAJCXBhbmljKCIlczogbWlzc2luZyBJT0MgcmVnaXN0ZXIgbWFwcGluZ3MgZm9yIG5vZGUgJWRcbiIsCi0JCSAgICAgIF9fRlVOQ1RJT05fXywgaW9tbXUtPm5pZCk7CisJCSAgICAgIF9fZnVuY19fLCBpb21tdS0+bmlkKTsKIAogCWlvbW11LT54bGF0ZV9yZWdzID0gaW9yZW1hcCh4bGF0ZV9iYXNlLCBJT0NfUmVnX1NpemUpOwogCWlvbW11LT5jbWRfcmVncyA9IGlvbW11LT54bGF0ZV9yZWdzICsgSU9DX0lPQ21kX09mZnNldDsKQEAgLTQyMyw3ICs0MzAsOSBAQAogc3RhdGljIHZvaWQgY2VsbF9pb21tdV9zZXR1cF9oYXJkd2FyZShzdHJ1Y3QgY2JlX2lvbW11ICppb21tdSwKIAl1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQljZWxsX2lvbW11X3NldHVwX3BhZ2VfdGFibGVzKGlvbW11LCBiYXNlLCBzaXplLCAwLCAwKTsKKwljZWxsX2lvbW11X3NldHVwX3N0YWIoaW9tbXUsIGJhc2UsIHNpemUsIDAsIDApOworCWlvbW11LT5wdGFiID0gY2VsbF9pb21tdV9hbGxvY19wdGFiKGlvbW11LCBiYXNlLCBzaXplLCAwLCAwLAorCQkJCQkgICAgSU9NTVVfUEFHRV9TSElGVCk7CiAJY2VsbF9pb21tdV9lbmFibGVfaGFyZHdhcmUoaW9tbXUpOwogfQogCkBAIC00NjQsNiArNDczLDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgcHRlX29mZnNldCkKIHsKIAlzdHJ1Y3QgaW9tbXVfd2luZG93ICp3aW5kb3c7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTMyIGlvaWQ7CiAKIAlpb2lkID0gY2VsbF9pb21tdV9nZXRfaW9pZChucCk7CkBAIC00NzUsMTMgKzQ4NSwxMSBAQAogCXdpbmRvdy0+c2l6ZSA9IHNpemU7CiAJd2luZG93LT5pb2lkID0gaW9pZDsKIAl3aW5kb3ctPmlvbW11ID0gaW9tbXU7Ci0Jd2luZG93LT5wdGVfb2Zmc2V0ID0gcHRlX29mZnNldDsKIAogCXdpbmRvdy0+dGFibGUuaXRfYmxvY2tzaXplID0gMTY7CiAJd2luZG93LT50YWJsZS5pdF9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9tbXUtPnB0YWI7CiAJd2luZG93LT50YWJsZS5pdF9pbmRleCA9IGlvbW11LT5uaWQ7Ci0Jd2luZG93LT50YWJsZS5pdF9vZmZzZXQgPSAob2Zmc2V0ID4+IElPTU1VX1BBR0VfU0hJRlQpICsKLQkJd2luZG93LT5wdGVfb2Zmc2V0OworCXdpbmRvdy0+dGFibGUuaXRfb2Zmc2V0ID0gKG9mZnNldCA+PiBJT01NVV9QQUdFX1NISUZUKSArIHB0ZV9vZmZzZXQ7CiAJd2luZG93LT50YWJsZS5pdF9zaXplID0gc2l6ZSA+PiBJT01NVV9QQUdFX1NISUZUOwogCiAJaW9tbXVfaW5pdF90YWJsZSgmd2luZG93LT50YWJsZSwgaW9tbXUtPm5pZCk7CkBAIC01MDQsNiArNTEyLDExIEBACiAJICogVGhpcyBjb2RlIGFsc28gYXNzdW1lcyB0aGF0IHdlIGhhdmUgYSB3aW5kb3cgdGhhdCBzdGFydHMgYXQgMCwKIAkgKiB3aGljaCBpcyB0aGUgY2FzZSBvbiBhbGwgc3BpZGVyIGJhc2VkIGJsYWRlcy4KIAkgKi8KKwlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShpb21tdS0+bmlkLCBHRlBfS0VSTkVMLCAwKTsKKwlCVUdfT04oIXBhZ2UpOworCWlvbW11LT5wYWRfcGFnZSA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwljbGVhcl9wYWdlKGlvbW11LT5wYWRfcGFnZSk7CisKIAlfX3NldF9iaXQoMCwgd2luZG93LT50YWJsZS5pdF9tYXApOwogCXRjZV9idWlsZF9jZWxsKCZ3aW5kb3ctPnRhYmxlLCB3aW5kb3ctPnRhYmxlLml0X29mZnNldCwgMSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nKWlvbW11LT5wYWRfcGFnZSwgRE1BX1RPX0RFVklDRSk7CkBAIC01NDksNyArNTYyLDcgQEAKIAlhcmNoZGF0YS0+ZG1hX2RhdGEgPSAmd2luZG93LT50YWJsZTsKIH0KIAotc3RhdGljIHZvaWQgY2VsbF9kbWFfZGV2X3NldHVwX3N0YXRpYyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgY2VsbF9kbWFfZGV2X3NldHVwX2ZpeGVkKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIHN0YXRpYyB2b2lkIGNlbGxfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC01NTcsNyArNTcwLDcgQEAKIAogCS8qIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCB0aGVzZSBhcmUgbm90IG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwogCWlmIChnZXRfZG1hX29wcyhkZXYpID09ICZkbWFfaW9tbXVfZml4ZWRfb3BzKQotCQljZWxsX2RtYV9kZXZfc2V0dXBfc3RhdGljKGRldik7CisJCWNlbGxfZG1hX2Rldl9zZXR1cF9maXhlZChkZXYpOwogCWVsc2UgaWYgKGdldF9wY2lfZG1hX29wcygpID09ICZkbWFfaW9tbXVfb3BzKQogCQljZWxsX2RtYV9kZXZfc2V0dXBfaW9tbXUoZGV2KTsKIAllbHNlIGlmIChnZXRfcGNpX2RtYV9vcHMoKSA9PSAmZG1hX2RpcmVjdF9vcHMpCkBAIC03ODksMTcgKzgwMiwyNCBAQAogCiBzdGF0aWMgdTY0IGNlbGxfaW9tbXVfZ2V0X2ZpeGVkX2FkZHJlc3Moc3RydWN0IGRldmljZSAqZGV2KQogewotCXU2NCBjcHVfYWRkciwgc2l6ZSwgYmVzdF9zaXplLCBwY2lfYWRkciA9IE9GX0JBRF9BRERSOworCXU2NCBjcHVfYWRkciwgc2l6ZSwgYmVzdF9zaXplLCBkZXZfYWRkciA9IE9GX0JBRF9BRERSOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJY29uc3QgdTMyICpyYW5nZXMgPSBOVUxMOwotCWludCBpLCBsZW4sIGJlc3Q7CisJaW50IGksIGxlbiwgYmVzdCwgbmFkZHIsIG5zaXplLCBwbmEsIHJhbmdlX3NpemU7CiAKIAlucCA9IG9mX25vZGVfZ2V0KGRldi0+YXJjaGRhdGEub2Zfbm9kZSk7Ci0Jd2hpbGUgKG5wKSB7Ci0JCXJhbmdlcyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRtYS1yYW5nZXMiLCAmbGVuKTsKLQkJaWYgKHJhbmdlcykKLQkJCWJyZWFrOworCXdoaWxlICgxKSB7CisJCW5hZGRyID0gb2Zfbl9hZGRyX2NlbGxzKG5wKTsKKwkJbnNpemUgPSBvZl9uX3NpemVfY2VsbHMobnApOwogCQlucCA9IG9mX2dldF9uZXh0X3BhcmVudChucCk7CisJCWlmICghbnApCisJCQlicmVhazsKKworCQlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkbWEtcmFuZ2VzIiwgJmxlbik7CisKKwkJLyogSWdub3JlIGVtcHR5IHJhbmdlcywgdGhleSBpbXBseSBubyB0cmFuc2xhdGlvbiByZXF1aXJlZCAqLworCQlpZiAocmFuZ2VzICYmIGxlbiA+IDApCisJCQlicmVhazsKIAl9CiAKIAlpZiAoIXJhbmdlcykgewpAQCAtODA5LDE1ICs4MjksMTcgQEAKIAogCWxlbiAvPSBzaXplb2YodTMyKTsKIAorCXBuYSA9IG9mX25fYWRkcl9jZWxscyhucCk7CisJcmFuZ2Vfc2l6ZSA9IG5hZGRyICsgbnNpemUgKyBwbmE7CisKIAkvKiBkbWEtcmFuZ2VzIGZvcm1hdDoKLQkgKiAxIGNlbGw6ICBwY2kgc3BhY2UKLQkgKiAyIGNlbGxzOiBwY2kgYWRkcmVzcwotCSAqIDIgY2VsbHM6IHBhcmVudCBhZGRyZXNzCi0JICogMiBjZWxsczogc2l6ZQorCSAqIGNoaWxkIGFkZHIJOiBuYWRkciBjZWxscworCSAqIHBhcmVudCBhZGRyCTogcG5hIGNlbGxzCisJICogc2l6ZQkJOiBuc2l6ZSBjZWxscwogCSAqLwotCWZvciAoaSA9IDAsIGJlc3QgPSAtMSwgYmVzdF9zaXplID0gMDsgaSA8IGxlbjsgaSArPSA3KSB7Ci0JCWNwdV9hZGRyID0gb2ZfdHJhbnNsYXRlX2RtYV9hZGRyZXNzKG5wLCByYW5nZXMgK2kgKyAzKTsKLQkJc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlcyArIGkgKyA1LCAyKTsKKwlmb3IgKGkgPSAwLCBiZXN0ID0gLTEsIGJlc3Rfc2l6ZSA9IDA7IGkgPCBsZW47IGkgKz0gcmFuZ2Vfc2l6ZSkgeworCQljcHVfYWRkciA9IG9mX3RyYW5zbGF0ZV9kbWFfYWRkcmVzcyhucCwgcmFuZ2VzICsgaSArIG5hZGRyKTsKKwkJc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlcyArIGkgKyBuYWRkciArIHBuYSwgbnNpemUpOwogCiAJCWlmIChjcHVfYWRkciA9PSAwICYmIHNpemUgPiBiZXN0X3NpemUpIHsKIAkJCWJlc3QgPSBpOwpAQCAtODI1LDE1ICs4NDcsMTUgQEAKIAkJfQogCX0KIAotCWlmIChiZXN0ID49IDApCi0JCXBjaV9hZGRyID0gb2ZfcmVhZF9udW1iZXIocmFuZ2VzICsgYmVzdCArIDEsIDIpOwotCWVsc2UKKwlpZiAoYmVzdCA+PSAwKSB7CisJCWRldl9hZGRyID0gb2ZfcmVhZF9udW1iZXIocmFuZ2VzICsgYmVzdCwgbmFkZHIpOworCX0gZWxzZQogCQlkZXZfZGJnKGRldiwgImlvbW11OiBubyBzdWl0YWJsZSByYW5nZSBmb3VuZCFcbiIpOwogCiBvdXQ6CiAJb2Zfbm9kZV9wdXQobnApOwogCi0JcmV0dXJuIHBjaV9hZGRyOworCXJldHVybiBkZXZfYWRkcjsKIH0KIAogc3RhdGljIGludCBkbWFfc2V0X21hc2tfYW5kX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKQEAgLTg1OCw3ICs4ODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjZWxsX2RtYV9kZXZfc2V0dXBfc3RhdGljKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGNlbGxfZG1hX2Rldl9zZXR1cF9maXhlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldl9hcmNoZGF0YSAqYXJjaGRhdGEgPSAmZGV2LT5hcmNoZGF0YTsKIAl1NjQgYWRkcjsKQEAgLTg2OSwzNSArODkxLDQ1IEBACiAJZGV2X2RiZyhkZXYsICJpb21tdTogZml4ZWQgYWRkciA9ICVseFxuIiwgYWRkcik7CiB9CiAKK3N0YXRpYyB2b2lkIGluc2VydF8xNk1fcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqcHRhYiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYmFzZV9wdGUpCit7CisJdW5zaWduZWQgbG9uZyBzZWdtZW50LCBvZmZzZXQ7CisKKwlzZWdtZW50ID0gYWRkciA+PiBJT19TRUdNRU5UX1NISUZUOworCW9mZnNldCA9IChhZGRyID4+IDI0KSAtIChzZWdtZW50IDw8IElPX1BBR0VOT19CSVRTKDI0KSk7CisJcHRhYiA9IHB0YWIgKyAoc2VnbWVudCAqICgxIDw8IDEyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwlwcl9kZWJ1ZygiaW9tbXU6IGFkZHIgJWx4IHB0YWIgJXAgc2VnbWVudCAlbHggb2Zmc2V0ICVseFxuIiwKKwkJICBhZGRyLCBwdGFiLCBzZWdtZW50LCBvZmZzZXQpOworCisJcHRhYltvZmZzZXRdID0gYmFzZV9wdGUgfCAoX19wYShhZGRyKSAmIElPUFRFX1JQTl9NYXNrKTsKK30KKwogc3RhdGljIHZvaWQgY2VsbF9pb21tdV9zZXR1cF9maXhlZF9wdGFiKHN0cnVjdCBjYmVfaW9tbXUgKmlvbW11LAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHVuc2lnbmVkIGxvbmcgZGJhc2UsIHVuc2lnbmVkIGxvbmcgZHNpemUsCiAJdW5zaWduZWQgbG9uZyBmYmFzZSwgdW5zaWduZWQgbG9uZyBmc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGJhc2VfcHRlLCB1YWRkciwgKmlvX3B0ZTsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGJhc2VfcHRlLCB1YWRkciwgaW9hZGRyLCAqcHRhYjsKKworCXB0YWIgPSBjZWxsX2lvbW11X2FsbG9jX3B0YWIoaW9tbXUsIGZiYXNlLCBmc2l6ZSwgZGJhc2UsIGRzaXplLCAyNCk7CiAKIAlkbWFfaW9tbXVfZml4ZWRfYmFzZSA9IGZiYXNlOwogCi0JLyogY29udmVydCBmcm9tIGJ5dGVzIGludG8gcGFnZSB0YWJsZSBpbmRpY2VzICovCi0JZGJhc2UgPSBkYmFzZSA+PiBJT01NVV9QQUdFX1NISUZUOwotCWRzaXplID0gZHNpemUgPj4gSU9NTVVfUEFHRV9TSElGVDsKLQlmYmFzZSA9IGZiYXNlID4+IElPTU1VX1BBR0VfU0hJRlQ7Ci0JZnNpemUgPSBmc2l6ZSA+PiBJT01NVV9QQUdFX1NISUZUOwotCiAJcHJfZGVidWcoImlvbW11OiBtYXBwaW5nIDB4JWx4IHBhZ2VzIGZyb20gMHglbHhcbiIsIGZzaXplLCBmYmFzZSk7CiAKLQlpb19wdGUgPSBpb21tdS0+cHRhYjsKIAliYXNlX3B0ZSA9IElPUFRFX1BQX1cgfCBJT1BURV9QUF9SIHwgSU9QVEVfTSB8IElPUFRFX1NPX1JXCiAJCSAgICB8IChjZWxsX2lvbW11X2dldF9pb2lkKG5wKSAmIElPUFRFX0lPSURfTWFzayk7CiAKLQl1YWRkciA9IDA7Ci0JZm9yIChpID0gZmJhc2U7IGkgPCBmYmFzZSArIGZzaXplOyBpKyssIHVhZGRyICs9IElPTU1VX1BBR0VfU0laRSkgeworCWZvciAodWFkZHIgPSAwOyB1YWRkciA8IGZzaXplOyB1YWRkciArPSAoMSA8PCAyNCkpIHsKIAkJLyogRG9uJ3QgdG91Y2ggdGhlIGR5bmFtaWMgcmVnaW9uICovCi0JCWlmIChpID49IGRiYXNlICYmIGkgPCAoZGJhc2UgKyBkc2l6ZSkpIHsKLQkJCXByX2RlYnVnKCJpb21tdTogc3RhdGljL2R5bmFtaWMgb3ZlcmxhcCwgc2tpcHBpbmdcbiIpOworCQlpb2FkZHIgPSB1YWRkciArIGZiYXNlOworCQlpZiAoaW9hZGRyID49IGRiYXNlICYmIGlvYWRkciA8IChkYmFzZSArIGRzaXplKSkgeworCQkJcHJfZGVidWcoImlvbW11OiBmaXhlZC9keW5hbWljIG92ZXJsYXAsIHNraXBwaW5nXG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlvX3B0ZVtpXSA9IGJhc2VfcHRlIHwgKF9fcGEodWFkZHIpICYgSU9QVEVfUlBOX01hc2spOworCisJCWluc2VydF8xNk1fcHRlKHVhZGRyLCBwdGFiLCBiYXNlX3B0ZSk7CiAJfQogCiAJbWIoKTsKQEAgLTk5NSw3ICsxMDI3LDkgQEAKIAkJCSJmaXhlZCB3aW5kb3cgMHglbHgtMHglbHhcbiIsIGlvbW11LT5uaWQsIGRiYXNlLAogCQkJIGRiYXNlICsgZHNpemUsIGZiYXNlLCBmYmFzZSArIGZzaXplKTsKIAotCQljZWxsX2lvbW11X3NldHVwX3BhZ2VfdGFibGVzKGlvbW11LCBkYmFzZSwgZHNpemUsIGZiYXNlLCBmc2l6ZSk7CisJCWNlbGxfaW9tbXVfc2V0dXBfc3RhYihpb21tdSwgZGJhc2UsIGRzaXplLCBmYmFzZSwgZnNpemUpOworCQlpb21tdS0+cHRhYiA9IGNlbGxfaW9tbXVfYWxsb2NfcHRhYihpb21tdSwgZGJhc2UsIGRzaXplLCAwLCAwLAorCQkJCQkJICAgIElPTU1VX1BBR0VfU0hJRlQpOwogCQljZWxsX2lvbW11X3NldHVwX2ZpeGVkX3B0YWIoaW9tbXUsIG5wLCBkYmFzZSwgZHNpemUsCiAJCQkJCSAgICAgZmJhc2UsIGZzaXplKTsKIAkJY2VsbF9pb21tdV9lbmFibGVfaGFyZHdhcmUoaW9tbXUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BlcnZhc2l2ZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BlcnZhc2l2ZS5jCmluZGV4IDAzMDQ1ODkuLjhhMzYzMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wZXJ2YXNpdmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcGVydmFzaXZlLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVua25vd24gY29uZmlndXJhdGlvblxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCX0KIAltdHNwcihTUFJOX1RTQ19DRUxMLCB0aHJlYWRfc3dpdGNoX2NvbnRyb2wpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCmluZGV4IGU0MzAyNGMuLjY1NTcwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCQkJCSh1bnNpZ25lZCBpbnQpKGFkZHIgPj4gMzIpLAogCQkJCSh1bnNpZ25lZCBpbnQpKGFkZHIgJiAweGZmZmZmZmZmKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgZW5hYmxpbmcgUFRDQUwgb24gbm9kZSAlZCFcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBuaWQpOworCQkJCV9fZnVuY19fLCBuaWQpOwogCQlnb3RvIG91dF9mcmVlX3BhZ2VzOwogCX0KIApAQCAtMTYyLDcgKzE2Miw3IEBACiAJaWYgKCFzaXplKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByX2RlYnVnKCIlczogZW5hYmxpbmcgUFRDQUwsIHNpemUgPSAweCV4XG4iLCBfX0ZVTkNUSU9OX18sICpzaXplKTsKKwlwcl9kZWJ1ZygiJXM6IGVuYWJsaW5nIFBUQ0FMLCBzaXplID0gMHgleFxuIiwgX19mdW5jX18sICpzaXplKTsKIAlvcmRlciA9IGdldF9vcmRlcigqc2l6ZSk7CiAJb2Zfbm9kZV9wdXQobnApOwogCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJY29uc3QgdTMyICpuaWQgPSBvZl9nZXRfcHJvcGVydHkobnAsICJub2RlLWlkIiwgTlVMTCk7CiAJCWlmICghbmlkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub2RlICVzIGlzIG1pc3Npbmcgbm9kZS1pZD9cbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgbnAtPmZ1bGxfbmFtZSk7CisJCQkJCV9fZnVuY19fLCBucC0+ZnVsbF9uYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWNiZV9wdGNhbF9lbmFibGVfb25fbm9kZSgqbmlkLCBvcmRlcik7CkBAIC0xOTUsMTMgKzE5NSwxMyBAQAogCXN0cnVjdCBwdGNhbF9hcmVhICphcmVhLCAqdG1wOwogCWludCByZXQgPSAwOwogCi0JcHJfZGVidWcoIiVzOiBkaXNhYmxpbmcgUFRDQUxcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzOiBkaXNhYmxpbmcgUFRDQUxcbiIsIF9fZnVuY19fKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhcmVhLCB0bXAsICZwdGNhbF9saXN0LCBsaXN0KSB7CiAJCS8qIGRpc2FibGUgcHRjYWwgb24gdGhpcyBub2RlICovCiAJCWlmIChydGFzX2NhbGwocHRjYWxfc3RvcF90b2ssIDEsIDEsIE5VTEwsIGFyZWEtPm5pZCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGRpc2FibGluZyBQVENBTCAiCi0JCQkJCSJvbiBub2RlICVkIVxuIiwgX19GVU5DVElPTl9fLAorCQkJCQkib24gbm9kZSAlZCFcbiIsIF9fZnVuY19fLAogCQkJCQlhcmVhLT5uaWQpOwogCQkJcmV0ID0gLUVJTzsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYwppbmRleCBhN2Y2MDliLi41YzUzMWU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYwpAQCAtODEsNiArODEsNDIgQEAKIAlwcmludGsoIioqKiAlMDR4IDogJXNcbiIsIGhleCwgcyA/IHMgOiAiIik7CiB9CiAKK3N0YXRpYyB2b2lkIGNlbGxfZml4dXBfcGNpZV9yb290Y29tcGxleChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKwljb25zdCBjaGFyICpzOworCWludCBpOworCisJaWYgKCFtYWNoaW5lX2lzKGNlbGwpKQorCQlyZXR1cm47CisKKwkvKiBXZSdyZSBzZWFyY2hpbmcgZm9yIGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBQSEIgKi8KKwlpZiAoZGV2LT5idXMtPnNlbGYgIT0gTlVMTCB8fCBkZXYtPmRldmZuICE9IDApCisJCXJldHVybjsKKworCWhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOworCWlmIChob3NlID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIE9ubHkgb24gUENJRSAqLworCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaG9zZS0+ZG4sICJwY2lleCIpKQorCQlyZXR1cm47CisKKwkvKiBBbmQgb25seSBvbiBheG9uICovCisJcyA9IG9mX2dldF9wcm9wZXJ0eShob3NlLT5kbiwgIm1vZGVsIiwgTlVMTCk7CisJaWYgKCFzIHx8IHN0cmNtcChzLCAiQXhvbiIpICE9IDApCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaSsrKSB7CisJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSBkZXYtPnJlc291cmNlW2ldLmVuZCA9IDA7CisJCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSAwOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IEhpZGluZyByZXNvdXJjZXMgb24gQXhvbiBQQ0lFIFJDICVzXG4iLAorCSAgICAgICBwY2lfbmFtZShkZXYpKTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBjZWxsX2ZpeHVwX3BjaWVfcm9vdGNvbXBsZXgpOworCiBzdGF0aWMgaW50IF9faW5pdCBjZWxsX3B1Ymxpc2hfZGV2aWNlcyh2b2lkKQogewogCWludCBub2RlOwpAQCAtMTQ5LDYgKzE4NSwxMSBAQAogCW1waWNfaW5pdF9JUlEoKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGNlbGxfc2V0X2RhYnJ4KHZvaWQpCit7CisJbXRzcHIoU1BSTl9EQUJSWCwgREFCUlhfS0VSTkVMIHwgREFCUlhfVVNFUik7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjZWxsX3NldHVwX2FyY2godm9pZCkKIHsKICNpZmRlZiBDT05GSUdfU1BVX0JBU0UKQEAgLTE1OCw2ICsxOTksOCBAQAogCiAJY2JlX3JlZ3NfaW5pdCgpOwogCisJY2VsbF9zZXRfZGFicngoKTsKKwogI2lmZGVmIENPTkZJR19DQkVfUkFTCiAJY2JlX3Jhc19pbml0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKaW5kZXggZTQ1Y2ZhOC4uNmJhYjQ0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKQEAgLTgxLDkgKzgxLDEyIEBACiB2b2lkIHNwdV9pbnZhbGlkYXRlX3NsYnMoc3RydWN0IHNwdSAqc3B1KQogewogCXN0cnVjdCBzcHVfcHJpdjIgX19pb21lbSAqcHJpdjIgPSBzcHUtPnByaXYyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3B1LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7CiAJaWYgKHNwdV9tZmNfc3IxX2dldChzcHUpICYgTUZDX1NUQVRFMV9SRUxPQ0FURV9NQVNLKQogCQlvdXRfYmU2NCgmcHJpdjItPnNsYl9pbnZhbGlkYXRlX2FsbF9XLCAwVUwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwdS0+cmVnaXN0ZXJfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3B1X2ludmFsaWRhdGVfc2xicyk7CiAKQEAgLTE0OCw3ICsxNTEsMTEgQEAKIAkJCV9fZnVuY19fLCBzbGJlLCBzbGItPnZzaWQsIHNsYi0+ZXNpZCk7CiAKIAlvdXRfYmU2NCgmcHJpdjItPnNsYl9pbmRleF9XLCBzbGJlKTsKKwkvKiBzZXQgaW52YWxpZCBiZWZvcmUgd3JpdGluZyB2c2lkICovCisJb3V0X2JlNjQoJnByaXYyLT5zbGJfZXNpZF9SVywgMCk7CisJLyogbm93IGl0J3Mgc2FmZSB0byB3cml0ZSB0aGUgdnNpZCAqLwogCW91dF9iZTY0KCZwcml2Mi0+c2xiX3ZzaWRfUlcsIHNsYi0+dnNpZCk7CisJLyogc2V0dGluZyB0aGUgbmV3IGVzaWQgbWFrZXMgdGhlIGVudHJ5IHZhbGlkIGFnYWluICovCiAJb3V0X2JlNjQoJnByaXYyLT5zbGJfZXNpZF9SVywgc2xiLT5lc2lkKTsKIH0KIApAQCAtMTU4LDE1ICsxNjUsOCBAQAogCXN0cnVjdCBzcHVfc2xiIHNsYjsKIAlpbnQgcHNpemU7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAodGVzdF9iaXQoU1BVX0NPTlRFWFRfU1dJVENIX0FDVElWRSwgJnNwdS0+ZmxhZ3MpKSB7Ci0JCS8qIFNMQnMgYXJlIHByZS1sb2FkZWQgZm9yIGNvbnRleHQgc3dpdGNoLCBzbwotCQkgKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUhCi0JCSAqLwotCQlwcmludGsoIiVzOiBpbnZhbGlkIGFjY2VzcyBkdXJpbmcgc3dpdGNoIVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gMTsKLQl9CiAJc2xiLmVzaWQgPSAoZWEgJiBFU0lEX01BU0spIHwgU0xCX0VTSURfVjsKIAogCXN3aXRjaChSRUdJT05fSUQoZWEpKSB7CkBAIC0yMTUsNyArMjE1LDcgQEAKIGV4dGVybiBpbnQgaGFzaF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgYWNjZXNzLCB1bnNpZ25lZCBsb25nIHRyYXApOyAvL1hYWAogc3RhdGljIGludCBfX3NwdV90cmFwX2RhdGFfbWFwKHN0cnVjdCBzcHUgKnNwdSwgdW5zaWduZWQgbG9uZyBlYSwgdTY0IGRzaXNyKQogewotCXByX2RlYnVnKCIlcywgJWx4LCAlbHhcbiIsIF9fRlVOQ1RJT05fXywgZHNpc3IsIGVhKTsKKwlwcl9kZWJ1ZygiJXMsICVseCwgJWx4XG4iLCBfX2Z1bmNfXywgZHNpc3IsIGVhKTsKIAogCS8qIEhhbmRsZSBrZXJuZWwgc3BhY2UgaGFzaCBmYXVsdHMgaW1tZWRpYXRlbHkuCiAJICAgVXNlciBoYXNoIGZhdWx0cyBuZWVkIHRvIGJlIGRlZmVycmVkIHRvIHByb2Nlc3MgY29udGV4dC4gKi8KQEAgLTIyNiwxMSArMjI2LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHRlc3RfYml0KFNQVV9DT05URVhUX1NXSVRDSF9BQ1RJVkUsICZzcHUtPmZsYWdzKSkgewotCQlwcmludGsoIiVzOiBpbnZhbGlkIGFjY2VzcyBkdXJpbmcgc3dpdGNoIVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gMTsKLQl9Ci0KIAlzcHUtPmNsYXNzXzBfcGVuZGluZyA9IDA7CiAJc3B1LT5kYXIgPSBlYTsKIAlzcHUtPmRzaXNyID0gZHNpc3I7CkBAIC0zMDIsOSArMjk3LDExIEBACiAJCW5yX3NsYnMrKzsKIAl9CiAKKwlzcGluX2xvY2tfaXJxKCZzcHUtPnJlZ2lzdGVyX2xvY2spOwogCS8qIEFkZCB0aGUgc2V0IG9mIFNMQnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnJfc2xiczsgaSsrKQogCQlzcHVfbG9hZF9zbGIoc3B1LCBpLCAmc2xic1tpXSk7CisJc3Bpbl91bmxvY2tfaXJxKCZzcHUtPnJlZ2lzdGVyX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3B1X3NldHVwX2tlcm5lbF9zbGJzKTsKIApAQCAtMzQ5LDEzICszNDYsMTQgQEAKIAlpZiAoc3RhdCAmIENMQVNTMV9TVE9SQUdFX0ZBVUxUX0lOVFIpCiAJCXNwdV9tZmNfZHNpc3Jfc2V0KHNwdSwgMHVsKTsKIAlzcHVfaW50X3N0YXRfY2xlYXIoc3B1LCAxLCBzdGF0KTsKLQlzcGluX3VubG9jaygmc3B1LT5yZWdpc3Rlcl9sb2NrKTsKLQlwcl9kZWJ1ZygiJXM6ICVseCAlbHggJWx4ICVseFxuIiwgX19GVU5DVElPTl9fLCBtYXNrLCBzdGF0LAotCQkJZGFyLCBkc2lzcik7CiAKIAlpZiAoc3RhdCAmIENMQVNTMV9TRUdNRU5UX0ZBVUxUX0lOVFIpCiAJCV9fc3B1X3RyYXBfZGF0YV9zZWcoc3B1LCBkYXIpOwogCisJc3Bpbl91bmxvY2soJnNwdS0+cmVnaXN0ZXJfbG9jayk7CisJcHJfZGVidWcoIiVzOiAlbHggJWx4ICVseCAlbHhcbiIsIF9fZnVuY19fLCBtYXNrLCBzdGF0LAorCQkJZGFyLCBkc2lzcik7CisKIAlpZiAoc3RhdCAmIENMQVNTMV9TVE9SQUdFX0ZBVUxUX0lOVFIpCiAJCV9fc3B1X3RyYXBfZGF0YV9tYXAoc3B1LCBkYXIsIGRzaXNyKTsKIApAQCAtNzI4LDcgKzcyNiw3IEBACiAKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgaW5pdGlhbGl6aW5nIHNwdXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18pOworCQkJX19mdW5jX18pOwogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3N5c2Rldl9jbGFzczsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2NhbGxiYWNrcy5jCmluZGV4IGRjZWI4YjYuLjE5ZjZiZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfY2FsbGJhY2tzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9jYWxsYmFja3MuYwpAQCAtNTQsNyArNTQsNyBAQAogCWxvbmcgKCpzeXNjYWxsKSh1NjQgYTEsIHU2NCBhMiwgdTY0IGEzLCB1NjQgYTQsIHU2NCBhNSwgdTY0IGE2KTsKIAogCWlmIChzLT5ucl9yZXQgPj0gQVJSQVlfU0laRShzcHVfc3lzY2FsbF90YWJsZSkpIHsKLQkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIHN5c2NhbGwgIyVsZCIsIF9fRlVOQ1RJT05fXywgcy0+bnJfcmV0KTsKKwkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIHN5c2NhbGwgIyVsZCIsIF9fZnVuY19fLCBzLT5ucl9yZXQpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jCmluZGV4IGQzNTFiZGUuLjRjNTA2YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9tYW5hZ2UuYwpAQCAtOTIsNyArOTIsNyBAQAogCiAJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLT5wYXJlbnQtPnBhcmVudCwgIm5vZGUtaWQiLCBOVUxMKTsKIAlpZiAoIXRtcCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgZmluZCBub2RlLWlkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgZmluZCBub2RlLWlkXG4iLCBfX2Z1bmNfXyk7CiAJCW5pZCA9IHNwdS0+bm9kZTsKIAl9IGVsc2UKIAkJbmlkID0gdG1wWzBdOwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCXJldCA9IGZuKG5vZGUpOwogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgaW5pdGlhbGl6aW5nICVzXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgbm9kZS0+bmFtZSk7CisJCQkJX19mdW5jX18sIG5vZGUtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAkJbisrOwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJCWlmICghbGVnYWN5X21hcCkgewogCQkJbGVnYWN5X21hcCA9IDE7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTGVnYWN5IGRldmljZSB0cmVlIGZvdW5kLCAiCi0JCQkJInRyeWluZyB0byBtYXAgb2xkIHN0eWxlXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCSJ0cnlpbmcgdG8gbWFwIG9sZCBzdHlsZVxuIiwgX19mdW5jX18pOwogCQl9CiAJCXJldCA9IHNwdV9tYXBfZGV2aWNlX29sZChzcHUpOwogCQlpZiAocmV0KSB7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAkJaWYgKCFsZWdhY3lfaXJxKSB7CiAJCQlsZWdhY3lfaXJxID0gMTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBMZWdhY3kgZGV2aWNlIHRyZWUgZm91bmQsICIKLQkJCQkidHJ5aW5nIG9sZCBzdHlsZSBpcnFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJInRyeWluZyBvbGQgc3R5bGUgaXJxXG4iLCBfX2Z1bmNfXyk7CiAJCX0KIAkJcmV0ID0gc3B1X21hcF9pbnRlcnJ1cHRzX29sZChzcHUsIHNwZSk7CiAJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jCmluZGV4IDEzMzk5NWUuLjBhZDgzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYwpAQCAtMTA5LDEzICsxMDksMTIgQEAKIAogCS8qCiAJICogVGhpcyBpcyBiYXNpY2FsbHkgYW4gb3Blbi1jb2RlZCBzcHVfYWNxdWlyZV9zYXZlZCwgZXhjZXB0IHRoYXQKLQkgKiB3ZSBkb24ndCBhY3F1aXJlIHRoZSBzdGF0ZSBtdXRleCBpbnRlcnJ1cHRpYmxlLgorCSAqIHdlIGRvbid0IGFjcXVpcmUgdGhlIHN0YXRlIG11dGV4IGludGVycnVwdGlibGUsIGFuZCB3ZSBkb24ndAorCSAqIHdhbnQgdGhpcyBjb250ZXh0IHRvIGJlIHJlc2NoZWR1bGVkIG9uIHJlbGVhc2UuCiAJICovCiAJbXV0ZXhfbG9jaygmY3R4LT5zdGF0ZV9tdXRleCk7Ci0JaWYgKGN0eC0+c3RhdGUgIT0gU1BVX1NUQVRFX1NBVkVEKSB7Ci0JCXNldF9iaXQoU1BVX1NDSEVEX1dBU19BQ1RJVkUsICZjdHgtPnNjaGVkX2ZsYWdzKTsKKwlpZiAoY3R4LT5zdGF0ZSAhPSBTUFVfU1RBVEVfU0FWRUQpCiAJCXNwdV9kZWFjdGl2YXRlKGN0eCk7Ci0JfQogCiAJbW0gPSBjdHgtPm93bmVyOwogCWN0eC0+b3duZXIgPSBOVUxMOwpAQCAtMTcxLDcgKzE3MCw4IEBACiB7CiAJQlVHX09OKGN0eC0+c3RhdGUgIT0gU1BVX1NUQVRFX1NBVkVEKTsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1BVX1NDSEVEX1dBU19BQ1RJVkUsICZjdHgtPnNjaGVkX2ZsYWdzKSkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNQVV9TQ0hFRF9XQVNfQUNUSVZFLCAmY3R4LT5zY2hlZF9mbGFncykgJiYKKwkJCXRlc3RfYml0KFNQVV9TQ0hFRF9TUFVfUlVOLCAmY3R4LT5zY2hlZF9mbGFncykpCiAJCXNwdV9hY3RpdmF0ZShjdHgsIDApOwogCiAJc3B1X3JlbGVhc2UoY3R4KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMKaW5kZXggMGM2YTk2YjguLmI5NjJjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jCkBAIC0xMzMsOCArMTMzLDYgQEAKIAkJaWYgKGN0eC0+ZmxhZ3MgJiBTUFVfQ1JFQVRFX05PU0NIRUQpCiAJCQljb250aW51ZTsKIAotCQkvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lIHdlJ3JlIGNhbGxlZCAqLwotCQkoKmZkKSsrOwogCQlicmVhazsKIAl9CiAKQEAgLTE1Nyw2ICsxNTUsOSBAQAogCQkJYnJlYWs7CiAKIAkJc2l6ZSArPSByYzsKKworCQkvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovCisJCWZkKys7CiAJfQogCiAJcmV0dXJuIHNpemU7CkBAIC0yMzksNiArMjQwLDkgQEAKIAkJfQogCiAJCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7CisKKwkJLyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqLworCQlmZCsrOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggYzY2YzM3NS4uMDhmNDRkMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3NwdS5oPgogI2luY2x1ZGUgPGFzbS9zcHVfaW5mby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zNjcsNiArMzY2LDEzIEBACiAJCXJldHVybiBOT1BGTl9TSUdCVVM7CiAKIAkvKgorCSAqIEJlY2F1c2Ugd2UgcmVsZWFzZSB0aGUgbW1hcF9zZW0sIHRoZSBjb250ZXh0IG1heSBiZSBkZXN0cm95ZWQgd2hpbGUKKwkgKiB3ZSdyZSBpbiBzcHVfd2FpdC4gR3JhYiBhbiBleHRyYSByZWZlcmVuY2Ugc28gaXQgaXNuJ3QgZGVzdHJveWVkCisJICogaW4gdGhlIG1lYW50aW1lLgorCSAqLworCWdldF9zcHVfY29udGV4dChjdHgpOworCisJLyoKIAkgKiBXZSBoYXZlIHRvIHdhaXQgZm9yIGNvbnRleHQgdG8gYmUgbG9hZGVkIGJlZm9yZSB3ZSBoYXZlCiAJICogcGFnZXMgdG8gaGFuZCBvdXQgdG8gdGhlIHVzZXIsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHdhaXQKIAkgKiB3aXRoIHRoZSBtbWFwX3NlbSBoZWxkLgpAQCAtMzc1LDcgKzM4MSw3IEBACiAJICogaGFuZ2VkLgogCSAqLwogCWlmIChzcHVfYWNxdWlyZShjdHgpKQotCQlyZXR1cm4gTk9QRk5fUkVGQVVMVDsKKwkJZ290byByZWZhdWx0OwogCiAJaWYgKGN0eC0+c3RhdGUgPT0gU1BVX1NUQVRFX1NBVkVEKSB7CiAJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CkBAIC0zOTEsNiArMzk3LDkgQEAKIAogCWlmICghcmV0KQogCQlzcHVfcmVsZWFzZShjdHgpOworCityZWZhdWx0OgorCXB1dF9zcHVfY29udGV4dChjdHgpOwogCXJldHVybiBOT1BGTl9SRUZBVUxUOwogfQogCkBAIC0xMzI3LDcgKzEzMzYsNyBAQAogCXJldHVybiBjdHgtPm9wcy0+c2lnbmFsMV90eXBlX2dldChjdHgpOwogfQogREVGSU5FX1NQVUZTX0FUVFJJQlVURShzcHVmc19zaWduYWwxX3R5cGUsIHNwdWZzX3NpZ25hbDFfdHlwZV9nZXQsCi0JCSAgICAgICBzcHVmc19zaWduYWwxX3R5cGVfc2V0LCAiJWxsdSIsIFNQVV9BVFRSX0FDUVVJUkUpOworCQkgICAgICAgc3B1ZnNfc2lnbmFsMV90eXBlX3NldCwgIiVsbHVcbiIsIFNQVV9BVFRSX0FDUVVJUkUpOwogCiAKIHN0YXRpYyBpbnQgc3B1ZnNfc2lnbmFsMl90eXBlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQpAQCAtMTM0OSw3ICsxMzU4LDcgQEAKIAlyZXR1cm4gY3R4LT5vcHMtPnNpZ25hbDJfdHlwZV9nZXQoY3R4KTsKIH0KIERFRklORV9TUFVGU19BVFRSSUJVVEUoc3B1ZnNfc2lnbmFsMl90eXBlLCBzcHVmc19zaWduYWwyX3R5cGVfZ2V0LAotCQkgICAgICAgc3B1ZnNfc2lnbmFsMl90eXBlX3NldCwgIiVsbHUiLCBTUFVfQVRUUl9BQ1FVSVJFKTsKKwkJICAgICAgIHNwdWZzX3NpZ25hbDJfdHlwZV9zZXQsICIlbGx1XG4iLCBTUFVfQVRUUl9BQ1FVSVJFKTsKIAogI2lmIFNQVUZTX01NQVBfNEsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNwdWZzX21zc19tbWFwX25vcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtMTU0Niw3ICsxNTU1LDcgQEAKIAogCXdha2VfdXBfYWxsKCZjdHgtPm1mY193cSk7CiAKLQlwcl9kZWJ1ZygiJXMgJXNcbiIsIF9fRlVOQ1RJT05fXywgc3B1LT5uYW1lKTsKKwlwcl9kZWJ1ZygiJXMgJXNcbiIsIF9fZnVuY19fLCBzcHUtPm5hbWUpOwogCWlmIChjdHgtPm1mY19mYXN5bmMpIHsKIAkJdTMyIGZyZWVfZWxlbWVudHMsIHRhZ3N0YXR1czsKIAkJdW5zaWduZWQgaW50IG1hc2s7CkBAIC0xNzgwLDcgKzE3ODksNyBAQAogCWlmICh0YWdzdGF0dXMgJiBjdHgtPnRhZ3dhaXQpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAotCXByX2RlYnVnKCIlczogZnJlZSAlZCB0YWdzdGF0dXMgJWQgdGFnd2FpdCAlZFxuIiwgX19GVU5DVElPTl9fLAorCXByX2RlYnVnKCIlczogZnJlZSAlZCB0YWdzdGF0dXMgJWQgdGFnd2FpdCAlZFxuIiwgX19mdW5jX18sCiAJCWZyZWVfZWxlbWVudHMsIHRhZ3N0YXR1cywgY3R4LT50YWd3YWl0KTsKIAogCXJldHVybiBtYXNrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwppbmRleCA2ZDEyMjhjLi4wYzMyYTA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3NwdS5oPgogI2luY2x1ZGUgPGFzbS9zcHVfcHJpdjEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCmluZGV4IGZjYTIyZTEuLjk2YmY3YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJCSE9IE1GQ19DTlRMX1BVUkdFX0RNQV9DT01QTEVURSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dCBmbHVzaGluZyBNRkMgRE1BIHF1ZXVlXG4iLAotCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCQlfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRUlPOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTEyNCw3ICsxMjQsNyBAQAogCQkJCXN0YXR1c19sb2FkaW5nKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvYWRlclxuIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJX19mdW5jX18pOwogCQkJcmV0ID0gLUVJTzsKIAkJCWdvdG8gb3V0X2Ryb3BfcHJpdjsKIAkJfQpAQCAtMTM0LDcgKzEzNCw3IEBACiAJaWYgKCEoc3RhdHVzICYgU1BVX1NUQVRVU19SVU5OSU5HKSkgewogCQkvKiBJZiBpc29sYXRlZCBMT0FEIGhhcyBmYWlsZWQ6IHJ1biBTUFUsIHdlIHdpbGwgZ2V0IGEgc3RvcC1hbmQKIAkJICogc2lnbmFsIGxhdGVyLiAqLwotCQlwcl9kZWJ1ZygiJXM6IGlzb2xhdGVkIExPQUQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcl9kZWJ1ZygiJXM6IGlzb2xhdGVkIExPQUQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWN0eC0+b3BzLT5ydW5jbnRsX3dyaXRlKGN0eCwgU1BVX1JVTkNOVExfUlVOTkFCTEUpOwogCQlyZXQgPSAtRUFDQ0VTOwogCQlnb3RvIG91dF9kcm9wX3ByaXY7CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogCWlmICghKHN0YXR1cyAmIFNQVV9TVEFUVVNfSVNPTEFURURfU1RBVEUpKSB7CiAJCS8qIFRoaXMgaXNuJ3QgYWxsb3dlZCBieSB0aGUgQ0JFQSwgYnV0IGNoZWNrIGFueXdheSAqLwotCQlwcl9kZWJ1ZygiJXM6IFNQVSBmZWxsIG91dCBvZiBpc29sYXRlZCBtb2RlP1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJfZGVidWcoIiVzOiBTUFUgZmVsbCBvdXQgb2YgaXNvbGF0ZWQgbW9kZT9cbiIsIF9fZnVuY19fKTsKIAkJY3R4LT5vcHMtPnJ1bmNudGxfd3JpdGUoY3R4LCBTUFVfUlVOQ05UTF9TVE9QKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZHJvcF9wcml2OwpAQCAtMjIwLDYgKzIyMCw3IEBACiAJCX0KIAl9CiAKKwlzZXRfYml0KFNQVV9TQ0hFRF9TUFVfUlVOLCAmY3R4LT5zY2hlZF9mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNCw2ICsyMzUsNyBAQAogCSpucGMgPSBjdHgtPm9wcy0+bnBjX3JlYWQoY3R4KTsKIAogCXNwdWN0eF9zd2l0Y2hfc3RhdGUoY3R4LCBTUFVfVVRJTF9JRExFX0xPQURFRCk7CisJY2xlYXJfYml0KFNQVV9TQ0hFRF9TUFVfUlVOLCAmY3R4LT5zY2hlZF9mbGFncyk7CiAJc3B1X3JlbGVhc2UoY3R4KTsKIAogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTI4MCw3ICsyODIsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5leHBlY3RlZCByZXR1cm4gY29kZSAlbGRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sICpzcHVfcmV0KTsKKwkJCV9fZnVuY19fLCAqc3B1X3JldCk7CiAJCXJldCA9IDA7CiAJfQogCXJldHVybiByZXQ7CkBAIC0zMjEsNiArMzIzLDEwIEBACiAJCQlyZXR1cm4gLUVJTlRSOwogCX0KIAorCS8qIG5lZWQgdG8gcmUtZ2V0IHRoZSBscywgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZCB3aGVuIHdlIHJlbGVhc2VkIHRoZQorCSAqIHNwdSAqLworCWxzID0gKHZvaWQgX19pb21lbSAqKWN0eC0+b3BzLT5nZXRfbHMoY3R4KTsKKwogCS8qIHdyaXRlIHJlc3VsdCwganVtcCBvdmVyIGluZGlyZWN0IHBvaW50ZXIgKi8KIAltZW1jcHlfdG9pbyhscyArIGxzX3BvaW50ZXIsICZzcHVfcmV0LCBzaXplb2Yoc3B1X3JldCkpOwogCWN0eC0+b3BzLT5ucGNfd3JpdGUoY3R4LCBucGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCA1OTE1MzQzLi4wMDUyOGVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJc3B1X3N3aXRjaF9ub3RpZnkoc3B1LCBjdHgpOwogCWN0eC0+c3RhdGUgPSBTUFVfU1RBVEVfUlVOTkFCTEU7CiAKLQlzcHVjdHhfc3dpdGNoX3N0YXRlKGN0eCwgU1BVX1VUSUxfSURMRV9MT0FERUQpOworCXNwdWN0eF9zd2l0Y2hfc3RhdGUoY3R4LCBTUFVfVVRJTF9VU0VSKTsKIH0KIAogLyoKQEAgLTg1NiwyMSArODU2LDE4IEBACiB7CiAJc3RydWN0IHNwdV9jb250ZXh0ICpuZXcgPSBOVUxMOwogCXN0cnVjdCBzcHUgKnNwdSA9IE5VTEw7Ci0JdTMyIHN0YXR1czsKIAogCWlmIChzcHVfYWNxdWlyZShjdHgpKQogCQlCVUcoKTsJLyogYSBrZXJuZWwgdGhyZWFkIG5ldmVyIGhhcyBzaWduYWxzIHBlbmRpbmcgKi8KIAogCWlmIChjdHgtPnN0YXRlICE9IFNQVV9TVEFURV9SVU5OQUJMRSkKIAkJZ290byBvdXQ7Ci0JaWYgKHNwdV9zdG9wcGVkKGN0eCwgJnN0YXR1cykpCi0JCWdvdG8gb3V0OwogCWlmIChjdHgtPmZsYWdzICYgU1BVX0NSRUFURV9OT1NDSEVEKQogCQlnb3RvIG91dDsKIAlpZiAoY3R4LT5wb2xpY3kgPT0gU0NIRURfRklGTykKIAkJZ290byBvdXQ7CiAKLQlpZiAoLS1jdHgtPnRpbWVfc2xpY2UpCisJaWYgKC0tY3R4LT50aW1lX3NsaWNlICYmIHRlc3RfYml0KFNQVV9TQ0hFRF9TUFVfUlVOLCAmY3R4LT5zY2hlZF9mbGFncykpCiAJCWdvdG8gb3V0OwogCiAJc3B1ID0gY3R4LT5zcHU7CkBAIC04ODAsNyArODc3LDggQEAKIAluZXcgPSBncmFiX3J1bm5hYmxlX2NvbnRleHQoY3R4LT5wcmlvICsgMSwgc3B1LT5ub2RlKTsKIAlpZiAobmV3KSB7CiAJCXNwdV91bnNjaGVkdWxlKHNwdSwgY3R4KTsKLQkJc3B1X2FkZF90b19ycShjdHgpOworCQlpZiAodGVzdF9iaXQoU1BVX1NDSEVEX1NQVV9SVU4sICZjdHgtPnNjaGVkX2ZsYWdzKSkKKwkJCXNwdV9hZGRfdG9fcnEoY3R4KTsKIAl9IGVsc2UgewogCQlzcHVfY29udGV4dF9ub3NwdV90cmFjZShzcHVzY2hlZF90aWNrX19uZXdzbGljZSwgY3R4KTsKIAkJY3R4LT50aW1lX3NsaWNlKys7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCmluZGV4IDJjMmZlM2MuLmNkYzUxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCkBAIC00NCw2ICs0NCw3IEBACiBlbnVtIHsKIAlTUFVfU0NIRURfTk9USUZZX0FDVElWRSwKIAlTUFVfU0NIRURfV0FTX0FDVElWRSwJLyogd2FzIGFjdGl2ZSB1cG9uIHNwdV9hY3F1aXJlX3NhdmVkKCkgICovCisJU1BVX1NDSEVEX1NQVV9SVU4sCS8qIGNvbnRleHQgaXMgd2l0aGluIHNwdV9ydW4gKi8KIH07CiAKIHN0cnVjdCBzcHVfY29udGV4dCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1dHJhY2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHV0cmFjZS5jCmluZGV4IDAxOTc0ZjcuLjc5YWE3NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHV0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHV0cmFjZS5jCkBAIC01OCwxMiArNTgsMTIgQEAKIAkJa3RpbWVfdG9fdGltZXNwZWMoa3RpbWVfc3ViKHQtPnRzdGFtcCwgc3B1dHJhY2Vfc3RhcnQpKTsKIAogCXJldHVybiBzbnByaW50Zih0YnVmLCBuLAotCQkiWyVsdS4lMDlsdV0gJWQ6ICVzICh0aHJlYWQgPSAlZCwgc3B1ID0gJWQpXG4iLAorCQkiWyVsdS4lMDlsdV0gJWQ6ICVzIChjdHh0aHJlYWQgPSAlZCwgc3B1ID0gJWQpXG4iLAogCQkodW5zaWduZWQgbG9uZykgdHYudHZfc2VjLAogCQkodW5zaWduZWQgbG9uZykgdHYudHZfbnNlYywKLQkJdC0+b3duZXJfdGlkLAotCQl0LT5uYW1lLAogCQl0LT5jdXJyX3RpZCwKKwkJdC0+bmFtZSwKKwkJdC0+b3duZXJfdGlkLAogCQl0LT5udW1iZXIpOwogfQogCkBAIC0xODgsNiArMTg4LDcgQEAKIAl7ICJzcHVmc19wc19ub3Bmbl9faW5zZXJ0IiwgIiVwICVwIiwgc3B1X2NvbnRleHRfZXZlbnQgfSwKIAl7ICJzcHVfYWNxdWlyZV9zYXZlZF9fZW50ZXIiLCAiJXAiLCBzcHVfY29udGV4dF9ub3NwdV9ldmVudCB9LAogCXsgImRlc3Ryb3lfc3B1X2NvbnRleHRfX2VudGVyIiwgIiVwIiwgc3B1X2NvbnRleHRfbm9zcHVfZXZlbnQgfSwKKwl7ICJzcHVmc19zdG9wX2NhbGxiYWNrX19lbnRlciIsICIlcCAlcCIsIHNwdV9jb250ZXh0X2V2ZW50IH0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzcHV0cmFjZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3dpdGNoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3dpdGNoLmMKaW5kZXggNjA2M2M4OC4uZDJhMTI0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N3aXRjaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYwpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMTE3LDYgKzExOCw4IEBACiAJICogICAgIFdyaXRlIElOVF9NQVNLX2NsYXNzMSB3aXRoIHZhbHVlIG9mIDAuCiAJICogICAgIFNhdmUgSU5UX01hc2tfY2xhc3MyIGluIENTQS4KIAkgKiAgICAgV3JpdGUgSU5UX01BU0tfY2xhc3MyIHdpdGggdmFsdWUgb2YgMC4KKwkgKiAgICAgU3luY2hyb25pemUgYWxsIHRocmVlIGludGVycnVwdHMgdG8gYmUgc3VyZQorCSAqICAgICB3ZSBubyBsb25nZXIgZXhlY3V0ZSBhIGhhbmRsZXIgb24gYW5vdGhlciBDUFUuCiAJICovCiAJc3Bpbl9sb2NrX2lycSgmc3B1LT5yZWdpc3Rlcl9sb2NrKTsKIAlpZiAoY3NhKSB7CkBAIC0xMjksNiArMTMyLDkgQEAKIAlzcHVfaW50X21hc2tfc2V0KHNwdSwgMiwgMHVsKTsKIAllaWVpbygpOwogCXNwaW5fdW5sb2NrX2lycSgmc3B1LT5yZWdpc3Rlcl9sb2NrKTsKKwlzeW5jaHJvbml6ZV9pcnEoc3B1LT5pcnFzWzBdKTsKKwlzeW5jaHJvbml6ZV9pcnEoc3B1LT5pcnFzWzFdKTsKKwlzeW5jaHJvbml6ZV9pcnEoc3B1LT5pcnFzWzJdKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF93YXRjaGRvZ190aW1lcihzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EsIHN0cnVjdCBzcHUgKnNwdSkKQEAgLTcyMCw4ICs3MjYsOSBAQAogCSAqIFJlc3RvcmUsIFN0ZXAgMjMuCiAJICogICAgIENoYW5nZSB0aGUgc29mdHdhcmUgY29udGV4dCBzd2l0Y2ggcGVuZGluZyBmbGFnCiAJICogICAgIHRvIGNvbnRleHQgc3dpdGNoIGFjdGl2ZS4KKwkgKgorCSAqICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHVzZXMgYSBzd2l0Y2ggYWN0aXZlIGZsYWcuCiAJICovCi0Jc2V0X2JpdChTUFVfQ09OVEVYVF9TV0lUQ0hfQUNUSVZFLCAmc3B1LT5mbGFncyk7CiAJY2xlYXJfYml0KFNQVV9DT05URVhUX1NXSVRDSF9QRU5ESU5HLCAmc3B1LT5mbGFncyk7CiAJbWIoKTsKIH0KQEAgLTE3MzksOSArMTc0Niw4IEBACiB7CiAJLyogUmVzdG9yZSwgU3RlcCA3NDoKIAkgKiAgICAgUmVzZXQgdGhlICJjb250ZXh0IHN3aXRjaCBhY3RpdmUiIGZsYWcuCisJICogICAgIE5vdCBwZXJmb3JtZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4KIAkgKi8KLQljbGVhcl9iaXQoU1BVX0NPTlRFWFRfU1dJVENIX0FDVElWRSwgJnNwdS0+ZmxhZ3MpOwotCW1iKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWVuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSwgc3RydWN0IHNwdSAqc3B1KQpAQCAtMTgwOSw2ICsxODE1LDcgQEAKIAlzYXZlX21mY19jc3JfYXRvKHByZXYsIHNwdSk7CS8qIFN0ZXAgMjQuICovCiAJc2F2ZV9tZmNfdGNsYXNzX2lkKHByZXYsIHNwdSk7CS8qIFN0ZXAgMjUuICovCiAJc2V0X21mY190Y2xhc3NfaWQocHJldiwgc3B1KTsJLyogU3RlcCAyNi4gKi8KKwlzYXZlX21mY19jbWQocHJldiwgc3B1KTsJLyogU3RlcCAyNmEgLSBtb3ZlZCBmcm9tIDQ0LiAqLwogCXB1cmdlX21mY19xdWV1ZShwcmV2LCBzcHUpOwkvKiBTdGVwIDI3LiAqLwogCXdhaXRfcHVyZ2VfY29tcGxldGUocHJldiwgc3B1KTsJLyogU3RlcCAyOC4gKi8KIAlzZXR1cF9tZmNfc3IxKHByZXYsIHNwdSk7CS8qIFN0ZXAgMzAuICovCkBAIC0xODI1LDcgKzE4MzIsNiBAQAogCXNhdmVfcHB1aW50X21iKHByZXYsIHNwdSk7CS8qIFN0ZXAgNDEuICovCiAJc2F2ZV9jaF9wYXJ0MShwcmV2LCBzcHUpOwkvKiBTdGVwIDQyLiAqLwogCXNhdmVfc3B1X21iKHByZXYsIHNwdSk7CSAgICAgICAgLyogU3RlcCA0My4gKi8KLQlzYXZlX21mY19jbWQocHJldiwgc3B1KTsJLyogU3RlcCA0NC4gKi8KIAlyZXNldF9jaChwcmV2LCBzcHUpOwkgICAgICAgIC8qIFN0ZXAgNDUuICovCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL2JlYXQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL2JlYXQuYwppbmRleCA5M2ViYjdkLi5iNjRiMTcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9iZWF0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvYmVhdC5jCkBAIC00OCw2ICs0OCw3IEBACiB9CiAKIHU2NCBiZWF0X2hhbHRfY29kZSA9IDB4MTAwMDAwMDAwMDAwMDAwMFVMOworRVhQT1JUX1NZTUJPTChiZWF0X2hhbHRfY29kZSk7CiAKIHZvaWQgYmVhdF9oYWx0KHZvaWQpCiB7CkBAIC05NCw5ICs5NSw4IEBACiAJCWxlbiA9IGNvdW50OwogCQlpZiAobGVuID4gQkVBVF9OVlJXX0NOVCkKIAkJCWxlbiA9IEJFQVRfTlZSV19DTlQ7Ci0JCWlmIChiZWF0X2VlcHJvbV9yZWFkKGksIGxlbiwgcCkpIHsKKwkJaWYgKGJlYXRfZWVwcm9tX3JlYWQoaSwgbGVuLCBwKSkKIAkJCXJldHVybiAtRUlPOwotCQl9CiAKIAkJcCArPSBsZW47CiAJCWkgKz0gbGVuOwpAQCAtMTIxLDkgKzEyMSw4IEBACiAJCWxlbiA9IGNvdW50OwogCQlpZiAobGVuID4gQkVBVF9OVlJXX0NOVCkKIAkJCWxlbiA9IEJFQVRfTlZSV19DTlQ7Ci0JCWlmIChiZWF0X2VlcHJvbV93cml0ZShpLCBsZW4sIHApKSB7CisJCWlmIChiZWF0X2VlcHJvbV93cml0ZShpLCBsZW4sIHApKQogCQkJcmV0dXJuIC1FSU87Ci0JCX0KIAogCQlwICs9IGxlbjsKIAkJaSArPSBsZW47CkBAIC0xNDksMTMgKzE0OCwxNCBAQAogCXU2NCBkYlsyXTsKIAlzNjQgcmV0OwogCi0JcmV0ID0gYmVhdF9nZXRfY2hhcmFjdGVyc19mcm9tX2NvbnNvbGUodnRlcm0sIGxlbiwgKHU4KilkYik7CisJcmV0ID0gYmVhdF9nZXRfY2hhcmFjdGVyc19mcm9tX2NvbnNvbGUodnRlcm0sIGxlbiwgKHU4ICopZGIpOwogCWlmIChyZXQgPT0gMCkgewogCQkqdDEgPSBkYlswXTsKIAkJKnQyID0gZGJbMV07CiAJfQogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGJlYXRfZ2V0X3Rlcm1fY2hhcik7CiAKIGludDY0X3QgYmVhdF9wdXRfdGVybV9jaGFyKHU2NCB2dGVybSwgdTY0IGxlbiwgdTY0IHQxLCB1NjQgdDIpCiB7CkBAIC0xNjMsOCArMTYzLDkgQEAKIAogCWRiWzBdID0gdDE7CiAJZGJbMV0gPSB0MjsKLQlyZXR1cm4gYmVhdF9wdXRfY2hhcmFjdGVyc190b19jb25zb2xlKHZ0ZXJtLCBsZW4sICh1OCopZGIpOworCXJldHVybiBiZWF0X3B1dF9jaGFyYWN0ZXJzX3RvX2NvbnNvbGUodnRlcm0sIGxlbiwgKHU4ICopZGIpOwogfQorRVhQT1JUX1NZTUJPTChiZWF0X3B1dF90ZXJtX2NoYXIpOwogCiB2b2lkIGJlYXRfcG93ZXJfc2F2ZSh2b2lkKQogewpAQCAtMjYxLDcgKzI2MiwzIEBACiB9CiAKIGRldmljZV9pbml0Y2FsbChiZWF0X2V2ZW50X2luaXQpOwotCi1FWFBPUlRfU1lNQk9MKGJlYXRfZ2V0X3Rlcm1fY2hhcik7Ci1FWFBPUlRfU1lNQk9MKGJlYXRfcHV0X3Rlcm1fY2hhcik7Ci1FWFBPUlRfU1lNQk9MKGJlYXRfaGFsdF9jb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL2JlYXQuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL2JlYXQuaAppbmRleCBiMmUyOTJkLi4zMmM4ZWZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9iZWF0LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvYmVhdC5oCkBAIC0yMSwxMSArMjEsOCBAQAogI2lmbmRlZiBfQ0VMTEVCX0JFQVRfSAogI2RlZmluZSBfQ0VMTEVCX0JFQVRfSAogCi0jZGVmaW5lIERBQlJYX0tFUk5FTAkJKDFVTDw8MSkKLSNkZWZpbmUgREFCUlhfVVNFUgkJKDFVTDw8MCkKLQotaW50NjRfdCBiZWF0X2dldF90ZXJtX2NoYXIodWludDY0X3QsdWludDY0X3QqLHVpbnQ2NF90Kix1aW50NjRfdCopOwotaW50NjRfdCBiZWF0X3B1dF90ZXJtX2NoYXIodWludDY0X3QsdWludDY0X3QsdWludDY0X3QsdWludDY0X3QpOworaW50NjRfdCBiZWF0X2dldF90ZXJtX2NoYXIodWludDY0X3QsIHVpbnQ2NF90ICosIHVpbnQ2NF90ICosIHVpbnQ2NF90ICopOworaW50NjRfdCBiZWF0X3B1dF90ZXJtX2NoYXIodWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QpOwogaW50NjRfdCBiZWF0X3JlcG9zaXRvcnlfZW5jb2RlKGludCwgY29uc3QgY2hhciAqLCB1aW50NjRfdFs0XSk7CiB2b2lkIGJlYXRfcmVzdGFydChjaGFyICopOwogdm9pZCBiZWF0X3Bvd2VyX29mZih2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL2JlYXRfd3JhcHBlci5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvYmVhdF93cmFwcGVyLmgKaW5kZXggY2JjMTQ4Ny4uYjQ3ZGZkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvYmVhdF93cmFwcGVyLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvYmVhdF93cmFwcGVyLmgKQEAgLTE5Nyw3ICsxOTcsOCBAQAogCXU2NCBiWzJdOwogCiAJbWVtY3B5KGIsIGJ1ZmZlciwgbGVuKTsKLQlyZXR1cm4gYmVhdF9oY2FsbF9ub3JldHMoSFZfcHV0X2NoYXJhY3RlcnNfdG9fY29uc29sZSwgdGVybW5vLCBsZW4sCQkJCQkgYlswXSwgYlsxXSk7CisJcmV0dXJuIGJlYXRfaGNhbGxfbm9yZXRzKEhWX3B1dF9jaGFyYWN0ZXJzX3RvX2NvbnNvbGUsIHRlcm1ubywgbGVuLAorCQliWzBdLCBiWzFdKTsKIH0KIAogc3RhdGljIGlubGluZSBzNjQgYmVhdF9nZXRfc3BlX3ByaXZpbGVnZWRfc3RhdGVfMV9yZWdpc3RlcnMoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9odGFiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9odGFiLmMKaW5kZXggZmJmMjdjNy4uODE0NjdmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL2h0YWIuYwpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgImJlYXRfd3JhcHBlci5oIgogCiAjaWZkZWYgREVCVUdfTE9XCi0jZGVmaW5lIERCR19MT1coZm10Li4uKSBkbyB7IHVkYmdfcHJpbnRmKGZtdCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgREJHX0xPVyhmbXQuLi4pIGRvIHsgdWRiZ19wcmludGYoZm10KTsgfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIERCR19MT1coZm10Li4uKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgREJHX0xPVyhmbXQuLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJlYXRfaHRhYl9sb2NrKTsKQEAgLTExNiw3ICsxMTYsOCBAQAogCQlocHRlX3IgJj0gfl9QQUdFX0NPSEVSRU5UOwogCiAJc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7Ci0JaWYgKChscGFyX3JjID0gYmVhdF9yZWFkX21hc2soaHB0ZV9ncm91cCkpID09IDApIHsKKwlscGFyX3JjID0gYmVhdF9yZWFkX21hc2soaHB0ZV9ncm91cCk7CisJaWYgKGxwYXJfcmMgPT0gMCkgewogCQlpZiAoISh2ZmxhZ3MgJiBIUFRFX1ZfQk9MVEVEKSkKIAkJCURCR19MT1coIiBmdWxsXG4iKTsKIAkJc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvaW50ZXJydXB0LmMKaW5kZXggYzdjNjhjYS4uNjk1NjJhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvaW50ZXJydXB0LmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfZW5hYmxlWyhNQVhfSVJRUysyNTUpLzY0XTsKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfYWNrWyhNQVhfSVJRUysyNTUpLzY0XTsKIAotc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqYmVhdGljX2hvc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqYmVhdGljX2hvc3Q7CiAKIC8qCiAgKiBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCAidmlycSIgPT0gIklSUSBwbHVnIG51bWJlciIsCkBAIC00OSwxMyArNDksMTMgQEAKIAogCW9mZiA9IChpcnFfcGx1ZyAvIDI1NikgKiA0OwogCW1hc2tzWzBdID0gYmVhdGljX2lycV9tYXNrX2VuYWJsZVtvZmYgKyAwXQotCSAgICAgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW29mZiArIDBdOworCQkmIGJlYXRpY19pcnFfbWFza19hY2tbb2ZmICsgMF07CiAJbWFza3NbMV0gPSBiZWF0aWNfaXJxX21hc2tfZW5hYmxlW29mZiArIDFdCi0JICAgICAgICAgICAmIGJlYXRpY19pcnFfbWFza19hY2tbb2ZmICsgMV07CisJCSYgYmVhdGljX2lycV9tYXNrX2Fja1tvZmYgKyAxXTsKIAltYXNrc1syXSA9IGJlYXRpY19pcnFfbWFza19lbmFibGVbb2ZmICsgMl0KLQkgICAgICAgICAgICYgYmVhdGljX2lycV9tYXNrX2Fja1tvZmYgKyAyXTsKKwkJJiBiZWF0aWNfaXJxX21hc2tfYWNrW29mZiArIDJdOwogCW1hc2tzWzNdID0gYmVhdGljX2lycV9tYXNrX2VuYWJsZVtvZmYgKyAzXQotCSAgICAgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW29mZiArIDNdOworCQkmIGJlYXRpY19pcnFfbWFza19hY2tbb2ZmICsgM107CiAJaWYgKGJlYXRfc2V0X2ludGVycnVwdF9tYXNrKGlycV9wbHVnJn4yNTVVTCwKIAkJbWFza3NbMF0sIG1hc2tzWzFdLCBtYXNrc1syXSwgbWFza3NbM10pICE9IDApCiAJCXBhbmljKCJGYWlsZWQgdG8gc2V0IG1hc2sgSVJRISIpOwpAQCAtOTYsNyArOTYsOCBAQAogCXM2NCBlcnI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICgoZXJyID0gYmVhdF9kb3duY291bnRfb2ZfaW50ZXJydXB0KGlycV9wbHVnKSkgIT0gMCkgeworCWVyciA9IGJlYXRfZG93bmNvdW50X29mX2ludGVycnVwdChpcnFfcGx1Zyk7CisJaWYgKGVyciAhPSAwKSB7CiAJCWlmICgoZXJyICYgMHhGRkZGRkZGRikgIT0gMHhGRkZGRkZGNSkgLyogLTExOiB3cm9uZyBzdGF0ZSAqLwogCQkJcGFuaWMoIkZhaWxlZCB0byBkb3duY291bnQgSVJRISBFcnJvciA9ICUxNmx4IiwgZXJyKTsKIApAQCAtMTM4LDcgKzEzOSw4IEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOwogCWludDY0X3QJZXJyOwogCi0JaWYgKChlcnIgPSBiZWF0X2NvbnN0cnVjdF9hbmRfY29ubmVjdF9pcnFfcGx1Zyh2aXJxLCBodykpIDwgMCkKKwllcnIgPSBiZWF0X2NvbnN0cnVjdF9hbmRfY29ubmVjdF9pcnFfcGx1Zyh2aXJxLCBodyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiAtRUlPOwogCiAJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKQEAgLTIwMiwyMiArMjA0LDIyIEBACiAJCWJlYXRfZGV0ZWN0X3BlbmRpbmdfaW50ZXJydXB0cyhpLCBwZW5kaW5nKTsKIAkJX19hc21fXyAoImNudGx6ZCAlMCwlMSI6Ij1yIih1Yik6CiAJCQkiciIocGVuZGluZ1swXSAmIGJlYXRpY19pcnFfbWFza19lbmFibGVbaS82NCswXQotCQkJICAgICAgICAgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW2kvNjQrMF0pKTsKKwkJCQkgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW2kvNjQrMF0pKTsKIAkJaWYgKHViICE9IDY0KQogCQkJcmV0dXJuIGkgKyB1YiArIDA7CiAJCV9fYXNtX18gKCJjbnRsemQgJTAsJTEiOiI9ciIodWIpOgogCQkJInIiKHBlbmRpbmdbMV0gJiBiZWF0aWNfaXJxX21hc2tfZW5hYmxlW2kvNjQrMV0KLQkJCSAgICAgICAgICAgICAgICYgYmVhdGljX2lycV9tYXNrX2Fja1tpLzY0KzFdKSk7CisJCQkJICAgICAgICYgYmVhdGljX2lycV9tYXNrX2Fja1tpLzY0KzFdKSk7CiAJCWlmICh1YiAhPSA2NCkKIAkJCXJldHVybiBpICsgdWIgKyA2NDsKIAkJX19hc21fXyAoImNudGx6ZCAlMCwlMSI6Ij1yIih1Yik6CiAJCQkiciIocGVuZGluZ1syXSAmIGJlYXRpY19pcnFfbWFza19lbmFibGVbaS82NCsyXQotCQkJICAgICAgICAgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW2kvNjQrMl0pKTsKKwkJCQkgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW2kvNjQrMl0pKTsKIAkJaWYgKHViICE9IDY0KQogCQkJcmV0dXJuIGkgKyB1YiArIDEyODsKIAkJX19hc21fXyAoImNudGx6ZCAlMCwlMSI6Ij1yIih1Yik6CiAJCQkiciIocGVuZGluZ1szXSAmIGJlYXRpY19pcnFfbWFza19lbmFibGVbaS82NCszXQotCQkJICAgICAgICAgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW2kvNjQrM10pKTsKKwkJCQkgICAgICAgJiBiZWF0aWNfaXJxX21hc2tfYWNrW2kvNjQrM10pKTsKIAkJaWYgKHViICE9IDY0KQogCQkJcmV0dXJuIGkgKyB1YiArIDE5MjsKIAl9CkBAIC0yNTAsNyArMjUyLDcgQEAKIAogCS8qIEFsbG9jYXRlIGFuIGlycSBob3N0ICovCiAJYmVhdGljX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChOVUxMLCBJUlFfSE9TVF9NQVBfTk9NQVAsIDAsCi0JCQkJCSAmYmVhdGljX3BpY19ob3N0X29wcywKKwkJCQkgICAgICZiZWF0aWNfcGljX2hvc3Rfb3BzLAogCQkJCQkgMCk7CiAJQlVHX09OKGJlYXRpY19ob3N0ID09IE5VTEwpOwogCWlycV9zZXRfZGVmYXVsdF9ob3N0KGJlYXRpY19ob3N0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3NjY19lcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zY2NfZXBjaS5jCmluZGV4IGEzYzdjZmIuLmE5OTliMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3NjY19lcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2NjX2VwY2kuYwpAQCAtMTYxLDkgKzE2MSw5IEBACiAJaWYgKGJ1cyAhPSBob3NlLT5idXMpCiAJCWFkZHIgPSBjZWxsZWJfZXBjaV9nZXRfZXBjaV9jZmcoaG9zZSkgKwogCQkgICAgICAgKCgoYnVzLT5udW1iZXIgJiAweGZmKSA8PCAxNikKLQkJICAgICAgICB8ICgoZGV2Zm4gJiAweGZmKSA8PCA4KQotCQkgICAgICAgIHwgKHdoZXJlICYgMHhmZikKLQkJICAgICAgICB8IDB4MDEwMDAwMDApOworCQkJfCAoKGRldmZuICYgMHhmZikgPDwgOCkKKwkJCXwgKHdoZXJlICYgMHhmZikKKwkJCXwgMHgwMTAwMDAwMCk7CiAJZWxzZQogCQlhZGRyID0gY2VsbGViX2VwY2lfZ2V0X2VwY2lfY2ZnKGhvc2UpICsKIAkJICAgICAgICgoKGRldmZuICYgMHhmZikgPDwgOCkgfCAod2hlcmUgJiAweGZmKSk7CkBAIC0xNzQsNyArMTc0LDcgQEAKIH0KIAogc3RhdGljIGludCBjZWxsZWJfZXBjaV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAotCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKiB2YWwpCisJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQogewogCVBDSV9JT19BRERSIGVwY2lfYmFzZTsKIAlQQ0lfSU9fQUREUiBhZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2NjX3Npby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2NjX3Npby5jCmluZGV4IDYxMDAwODIuLjNhMTZjNWIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zY2Nfc2lvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2NjX3Npby5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qIHNpbyBpcnEwPTB4YjAwMDEwMDIyIGlycTA9MHhiMDAwMTAwMjMgaXJxMj0weGIwMDAxMDAyNAogICAgIG1taW89MHhmZmYwMDAtMHgxMDAwLDB4ZmYyMDAwLTB4MTAwMCAqLwotc3RhdGljIGludCB0eHg5X3NlcmlhbF9iaXRtYXAgX19pbml0ZGF0YSA9IDA7CitzdGF0aWMgaW50IHR4eDlfc2VyaWFsX2JpdG1hcCBfX2luaXRkYXRhOwogCiBzdGF0aWMgc3RydWN0IHsKIAl1aW50MzJfdCBvZmZzZXQ7CkBAIC04NCw3ICs4NCw3IEBACiAJaW50CWk7CiAKIAlmb3IgKDs7KSB7Ci0JCXN3aXRjaChnZXRfb3B0aW9uKCZwdHIsICZpKSkgeworCQlzd2l0Y2ggKGdldF9vcHRpb24oJnB0ciwgJmkpKSB7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSAyOgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc3B1X3ByaXYxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zcHVfcHJpdjEuYwppbmRleCAyYmY2NzAwLi5iY2MxN2Y3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zcHVfcHJpdjEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zcHVfcHJpdjEuYwpAQCAtMTgzLDggKzE4Myw3IEBACiAJcmV0dXJuIGVuYWJsZTsKIH0KIAotY29uc3Qgc3RydWN0IHNwdV9wcml2MV9vcHMgc3B1X3ByaXYxX2JlYXRfb3BzID0KLXsKK2NvbnN0IHN0cnVjdCBzcHVfcHJpdjFfb3BzIHNwdV9wcml2MV9iZWF0X29wcyA9IHsKIAkuaW50X21hc2tfYW5kID0gaW50X21hc2tfYW5kLAogCS5pbnRfbWFza19vciA9IGludF9tYXNrX29yLAogCS5pbnRfbWFza19zZXQgPSBpbnRfbWFza19zZXQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi91ZGJnX2JlYXQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3VkYmdfYmVhdC5jCmluZGV4IGQ4ODhjNDYuLjZiNDE4ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3VkYmdfYmVhdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3VkYmdfYmVhdC5jCkBAIC01NCw3ICs1NCw4IEBACiAJaWYgKGluYnVmbGVuID09IDApIHsKIAkJLyogZ2V0IHNvbWUgbW9yZSBjaGFycy4gKi8KIAkJaW5idWZsZW4gPSAwOwotCQlyYyA9IGJlYXRfZ2V0X3Rlcm1fY2hhcihjZWxsZWJfdnRlcm1ubywgJmluYnVmbGVuLCBpbmJ1ZiswLCBpbmJ1ZisxKTsKKwkJcmMgPSBiZWF0X2dldF90ZXJtX2NoYXIoY2VsbGViX3Z0ZXJtbm8sICZpbmJ1ZmxlbiwKKwkJCQkJaW5idWYrMCwgaW5idWYrMSk7CiAJCWlmIChyYyAhPSAwKQogCQkJaW5idWZsZW4gPSAwOwkvKiBvdGhlcndpc2UgaW5idWZsZW4gaXMgZ2FyYmFnZSAqLwogCX0KQEAgLTc4LDcgKzc5LDcgQEAKIAkJaWYgKGNoID09IC0xKSB7CiAJCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQuLi5idXQuLi4gKi8KIAkJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGVsYXk7Ci0JCQlmb3IgKGRlbGF5PTA7IGRlbGF5IDwgMjAwMDAwMDsgZGVsYXkrKykKKwkJCWZvciAoZGVsYXkgPSAwOyBkZWxheSA8IDIwMDAwMDA7IGRlbGF5KyspCiAJCQkJOwogCQl9IGVsc2UgewogCQkJcmV0dXJuIGNoOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMKaW5kZXggZDRmOGJmNS4uODRlMmQ3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCkBAIC0xMTcsMTEgKzExNywxMSBAQAogCX0KIAogCWlmIChtcGljX3BhZGRyID09IDApIHsKLQkJcHJpbnRrKCIlczogTm8gdHNpMTA4IFBJQyBmb3VuZCAhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoIiVzOiBObyB0c2kxMDggUElDIGZvdW5kICFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCURCRygiJXM6IHRzaTEwOCBwaWMgcGh5c19hZGRyID0gMHgleFxuIiwgX19GVU5DVElPTl9fLAorCURCRygiJXM6IHRzaTEwOCBwaWMgcGh5c19hZGRyID0gMHgleFxuIiwgX19mdW5jX18sCiAJICAgICh1MzIpIG1waWNfcGFkZHIpOwogCiAJbXBpYyA9IG1waWNfYWxsb2ModHNpX3BpYywgbXBpY19wYWRkciwKQEAgLTE0MCwxNyArMTQwLDE3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogCXRzaV9wY2kgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAicGNpIik7CiAJaWYgKHRzaV9wY2kgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBObyB0c2kxMDggcGNpIG5vZGUgZm91bmQgIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKCIlczogTm8gdHNpMTA4IHBjaSBub2RlIGZvdW5kICFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAljYXNjYWRlX25vZGUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAicGljLXJvdXRlciIpOwogCWlmIChjYXNjYWRlX25vZGUgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBObyB0c2kxMDggcGNpIGNhc2NhZGUgbm9kZSBmb3VuZCAhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoIiVzOiBObyB0c2kxMDggcGNpIGNhc2NhZGUgbm9kZSBmb3VuZCAhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAljYXNjYWRlX3BjaV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcCh0c2lfcGNpLCAwKTsKLQlEQkcoIiVzOiB0c2kxMDggY2FzY2FkZV9wY2lfaXJxID0gMHgleFxuIiwgX19GVU5DVElPTl9fLAorCURCRygiJXM6IHRzaTEwOCBjYXNjYWRlX3BjaV9pcnEgPSAweCV4XG4iLCBfX2Z1bmNfXywKIAkgICAgKHUzMikgY2FzY2FkZV9wY2lfaXJxKTsKIAl0c2kxMDhfcGNpX2ludF9pbml0KGNhc2NhZGVfbm9kZSk7CiAJc2V0X2lycV9kYXRhKGNhc2NhZGVfcGNpX2lycSwgbXBpYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3BycG1jMjgwMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9wcnBtYzI4MDAuYwppbmRleCA2NTNhNWViLi41YTE5YjlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L3BycG1jMjgwMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvcHJwbWMyODAwLmMKQEAgLTQ5LDEzICs0OSwxMyBAQAogCSAqIGlvcmVtYXAgbXBwIGFuZCBncHAgcmVnaXN0ZXJzIGluIGNhc2UgdGhleSBhcmUgbGF0ZXIKIAkgKiBuZWVkZWQgYnkgcHJwbWMyODAwX3Jlc2V0X2JvYXJkKCkuCiAJICovCi0JbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibWFydmVsbCxtdjY0eDYwLW1wcCIpOworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIm1hcnZlbGwsbXY2NDM2MC1tcHAiKTsKIAlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKIAlwYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCByZWcpOwogCW9mX25vZGVfcHV0KG5wKTsKIAltdjY0eDYwX21wcF9yZWdfYmFzZSA9IGlvcmVtYXAocGFkZHIsIHJlZ1sxXSk7CiAKLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG12NjR4NjAtZ3BwIik7CisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibWFydmVsbCxtdjY0MzYwLWdwcCIpOwogCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwogCXBhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIHJlZyk7CiAJb2Zfbm9kZV9wdXQobnApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCmluZGV4IDUzODEwMzguLmM3NzVjZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKQEAgLTM4LDExICszOCwxOSBAQAogCiAJLmdsb2JsIHN5c3RlbV9yZXNldF9pU2VyaWVzCiBzeXN0ZW1fcmVzZXRfaVNlcmllczoKLQltZnNwcglyMTMsU1BSTl9TUFJHMwkJLyogR2V0IHBhY2EgYWRkcmVzcyAqLworCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBHZXQgYWxwYWNhIGFkZHJlc3MgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjIzLCBhbHBhY2EpCisJbGkJcjAsQUxQQUNBX1NJWkUKKwlzdWIJcjIzLHIxMyxyMjMKKwlkaXZkdQlyMjMscjIzLHIwCQkvKiByMjMgaGFzIGNwdSBudW1iZXIgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjEzLCBwYWNhKQorCW11bGxpCXIwLHIyMyxQQUNBX1NJWkUKKwlhZGQJcjEzLHIxMyxyMAorCW10c3ByCVNQUk5fU1BSRzMscjEzCQkvKiBTYXZlIGl0IGF3YXkgZm9yIHRoZSBmdXR1cmUgKi8KIAltZm1zcglyMjQKIAlvcmkJcjI0LHIyNCxNU1JfUkkKIAltdG1zcmQJcjI0CQkJLyogUkkgb24gKi8KLQlsaHoJcjI0LFBBQ0FQQUNBSU5ERVgocjEzKQkvKiBHZXQgcHJvY2Vzc29yICMgKi8KKwltcglyMjQscjIzCiAJY21wd2kJMCxyMjQsMAkJCS8qIEFyZSB3ZSBwcm9jZXNzb3IgMD8gKi8KIAlibmUJMWYKIAliCS5fX3N0YXJ0X2luaXRpYWxpemF0aW9uX2lTZXJpZXMJLyogU3RhcnQgdXAgdGhlIGZpcnN0IHByb2Nlc3NvciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lwbF9wYXJtcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lwbF9wYXJtcy5oCmluZGV4IDc3YzEzNWQuLjgzZTRjYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcGxfcGFybXMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXBsX3Bhcm1zLmgKQEAgLTY1LDYgKzY1LDQgQEAKIAl1NjQJeFJzdmQxMzsJCS8vIFJlc2VydmVkCQkJeDM4LXgzRgogfTsKIAotZXh0ZXJuIHN0cnVjdCBJdElwbFBhcm1zUmVhbAl4SXRJcGxQYXJtc1JlYWw7Ci0KICNlbmRpZiAvKiBfSVNFUklFU19JUExfUEFSTVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwYXJkYXRhLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBhcmRhdGEuYwppbmRleCA4MTYyMDQ5Li45OGJkMmQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBhcmRhdGEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBhcmRhdGEuYwpAQCAtMTQsMTAgKzE0LDEwIEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KLSNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9yZWdfc2F2ZS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvbHBhcl9tYXAuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9xdWV1ZS5oPgorI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2FscGFjYS5oPgogCiAjaW5jbHVkZSAibmFjYS5oIgogI2luY2x1ZGUgInZwZF9hcmVhcy5oIgpAQCAtMzEsNyArMzEsNyBAQAogLyogVGhlIEh2UmVsZWFzZURhdGEgaXMgdGhlIHJvb3Qgb2YgdGhlIGluZm9ybWF0aW9uIHNoYXJlZCBiZXR3ZWVuCiAgKiB0aGUgaHlwZXJ2aXNvciBhbmQgTGludXguCiAgKi8KLXN0cnVjdCBIdlJlbGVhc2VEYXRhIGh2UmVsZWFzZURhdGEgPSB7Citjb25zdCBzdHJ1Y3QgSHZSZWxlYXNlRGF0YSBodlJlbGVhc2VEYXRhID0gewogCS54RGVzYyA9IDB4YzhhNWQ5YzQsCS8qICJIdlJEIiBlYmNkaWMgKi8KIAkueFNpemUgPSBzaXplb2Yoc3RydWN0IEh2UmVsZWFzZURhdGEpLAogCS54VnBkQXJlYXNQdHJPZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbmFjYV9zdHJ1Y3QsIHhJdFZwZEFyZWFzKSwKQEAgLTYxLDYgKzYxLDYzIEBACiAJLnhSYW1EaXNrU2l6ZSA9IDAsCiB9OwogCitzdHJ1Y3QgSXRMcFJlZ1NhdmUgeworCXUzMgl4RGVzYzsJCS8vIEV5ZSBjYXRjaGVyICAiTHBSUyIgZWJjZGljCTAwMC0wMDMKKwl1MTYJeFNpemU7CQkvLyBTaXplIG9mIHRoaXMgY2xhc3MJCTAwNC0wMDUKKwl1OAl4SW5Vc2U7ICAgICAgICAgLy8gQXJlYSBpcyBsaXZlICAgICAgICAgICAgICAgICAwMDYtMDA3CisJdTgJeFJzdmQxWzldOwkvLyBSZXNlcnZlZAkJCTAwNy0wMEYKKworCXU4ICAgICAgeEZpeGVkUmVnU2F2ZVszNTJdOyAvLyBGaXhlZCBSZWdpc3RlciBTYXZlIEFyZWEgMDEwLTE2RgorCXUzMgl4Q1RSTDsJCS8vIENvbnRyb2wgUmVnaXN0ZXIJCTE3MC0xNzMKKwl1MzIJeERFQzsJCS8vIERlY3JlbWVudGVyCQkJMTc0LTE3NworCXUzMgl4RlBTQ1I7CQkvLyBGUCBTdGF0dXMgYW5kIENvbnRyb2wgUmVnCTE3OC0xN0IKKwl1MzIJeFBWUjsJCS8vIFByb2Nlc3NvciBWZXJzaW9uIE51bWJlcgkxN0MtMTdGCisKKwl1NjQJeE1NQ1IwOwkJLy8gTW9uaXRvciBNb2RlIENvbnRyb2wgUmVnIDAJMTgwLTE4NworCXUzMgl4UE1DMTsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDEJMTg4LTE4QgorCXUzMgl4UE1DMjsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDIJMThDLTE4RgorCXUzMgl4UE1DMzsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDMJMTkwLTE5MworCXUzMgl4UE1DNDsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDQJMTk0LTE5NworCXUzMgl4UElSOwkJLy8gUHJvY2Vzc29yIElEIFJlZwkJMTk4LTE5QgorCisJdTMyCXhNTUNSMTsJCS8vIE1vbml0b3IgTW9kZSBDb250cm9sIFJlZyAxCTE5Qy0xOUYKKwl1MzIJeE1NQ1JBOwkJLy8gTW9uaXRvciBNb2RlIENvbnRyb2wgUmVnIEEJMUEwLTFBMworCXUzMgl4UE1DNTsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDUJMUE0LTFBNworCXUzMgl4UE1DNjsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDYJMUE4LTFBQgorCXUzMgl4UE1DNzsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDcJMUFDLTFBRgorCXUzMgl4UE1DODsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDgJMUIwLTFCMworCXUzMgl4VFNDOwkJLy8gVGhyZWFkIFN3aXRjaCBDb250cm9sCTFCNC0xQjcKKwl1MzIJeFRTVDsJCS8vIFRocmVhZCBTd2l0Y2ggVGltZW91dAkxQjgtMUJCCisJdTMyCXhSc3ZkOyAgICAgICAgICAvLyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIDFCQy0xQkYKKworCXU2NAl4QUNDUjsJCS8vIEFkZHJlc3MgQ29tcGFyZSBDb250cm9sIFJlZwkxQzAtMUM3CisJdTY0CXhJTVI7CQkvLyBJbnN0cnVjdGlvbiBNYXRjaCBSZWdpc3RlcgkxQzgtMUNGCisJdTY0CXhTRFIxOwkJLy8gU3RvcmFnZSBEZXNjcmlwdGlvbiBSZWcgMQkxRDAtMUQ3CisJdTY0CXhTUFJHMDsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDAJMUQ4LTFERgorCXU2NAl4U1BSRzE7CQkvLyBTcGVjaWFsIFB1cnBvc2UgUmVnIEdlbmVyYWwxCTFFMC0xRTcKKwl1NjQJeFNQUkcyOwkJLy8gU3BlY2lhbCBQdXJwb3NlIFJlZyBHZW5lcmFsMgkxRTgtMUVGCisJdTY0CXhTUFJHMzsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDMJMUYwLTFGNworCXU2NAl4VEI7CQkvLyBUaW1lIEJhc2UgUmVnaXN0ZXIJCTFGOC0xRkYKKworCXU2NAl4RlBSWzMyXTsJLy8gRmxvYXRpbmcgUG9pbnQgUmVnaXN0ZXJzCTIwMC0yRkYKKworCXU2NAl4TVNSOwkJLy8gTWFjaGluZSBTdGF0ZSBSZWdpc3RlcgkzMDAtMzA3CisJdTY0CXhOSUE7CQkvLyBOZXh0IEluc3RydWN0aW9uIEFkZHJlc3MJMzA4LTMwRgorCisJdTY0CXhEQUJSOwkJLy8gRGF0YSBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnCTMxMC0zMTcKKwl1NjQJeElBQlI7CQkvLyBJbnN0IEFkZHJlc3MgQnJlYWtwb2ludCBSZWcJMzE4LTMxRgorCisJdTY0CXhISUQwOwkJLy8gSFcgSW1wbGVtZW50YXRpb24gRGVwZW5kZW50MAkzMjAtMzI3CisKKwl1NjQJeEhJRDQ7CQkvLyBIVyBJbXBsZW1lbnRhdGlvbiBEZXBlbmRlbnQ0CTMyOC0zMkYKKwl1NjQJeFNDT01kOwkJLy8gU0NPTiBEYXRhIFJlZyAoU1BSRzQpCTMzMC0zMzcKKwl1NjQJeFNDT01jOwkJLy8gU0NPTiBDb21tYW5kIFJlZyAoU1BSRzUpCTMzOC0zM0YKKwl1NjQJeFNEQVI7CQkvLyBTYW1wbGUgRGF0YSBBZGRyZXNzIFJlZ2lzdGVyCTM0MC0zNDcKKwl1NjQJeFNJQVI7CQkvLyBTYW1wbGUgSW5zdCBBZGRyZXNzIFJlZ2lzdGVyCTM0OC0zNEYKKworCXU4CXhSc3ZkM1sxNzZdOwkvLyBSZXNlcnZlZAkJCTM1MC0zRkYKK307CisKIGV4dGVybiB2b2lkIHN5c3RlbV9yZXNldF9pU2VyaWVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFjaGluZV9jaGVja19pU2VyaWVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgZGF0YV9hY2Nlc3NfaVNlcmllcyh2b2lkKTsKQEAgLTEyOSw3ICsxODYsNyBAQAogfTsKIAogLyogTWF5IGJlIGZpbGxlZCBpbiBieSB0aGUgaHlwZXJ2aXNvciBzbyBjYW5ub3QgZW5kIHVwIGluIHRoZSBCU1MgKi8KLXN0cnVjdCBJdElwbFBhcm1zUmVhbCB4SXRJcGxQYXJtc1JlYWwgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhIikpKTsKK3N0YXRpYyBzdHJ1Y3QgSXRJcGxQYXJtc1JlYWwgeEl0SXBsUGFybXNSZWFsIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YSIpKSk7CiAKIC8qIE1heSBiZSBmaWxsZWQgaW4gYnkgdGhlIGh5cGVydmlzb3Igc28gY2Fubm90IGVuZCB1cCBpbiB0aGUgQlNTICovCiBzdHJ1Y3QgSXRFeHRWcGRQYW5lbCB4SXRFeHRWcGRQYW5lbCBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpOwpAQCAtMTUyLDEzICsyMDksNTQgQEAKIAogLyogU3BhY2UgZm9yIFJlY292ZXJ5IExvZyBCdWZmZXIgKi8KIC8qIE1heSBiZSBmaWxsZWQgaW4gYnkgdGhlIGh5cGVydmlzb3Igc28gY2Fubm90IGVuZCB1cCBpbiB0aGUgQlNTICovCi11NjQgICAgeFJlY292ZXJ5TG9nQnVmZmVyWzMyXSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpOworc3RhdGljIHU2NCAgICB4UmVjb3ZlcnlMb2dCdWZmZXJbMzJdIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YSIpKSk7CiAKLXN0cnVjdCBTcENvbW1BcmVhIHhTcENvbW1BcmVhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBTcENvbW1BcmVhIHhTcENvbW1BcmVhID0gewogCS54RGVzYyA9IDB4RTJEN0MzQzIsCiAJLnhGb3JtYXQgPSAxLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBJdExwUmVnU2F2ZSBpc2VyaWVzX3JlZ19zYXZlW10gPSB7CisJWzAgLi4uIChOUl9DUFVTLTEpXSA9IHsKKwkJLnhEZXNjID0gMHhkMzk3ZDllMiwJLyogIkxwUlMiICovCisJCS54U2l6ZSA9IHNpemVvZihzdHJ1Y3QgSXRMcFJlZ1NhdmUpLAorCX0sCit9OworCisjZGVmaW5lIEFMUEFDQV9JTklUKG51bWJlcikJCQkJCQlcCit7CQkJCQkJCQkJXAorCS5scHBhY2FfcHRyID0gJmxwcGFjYVtudW1iZXJdLAkJCQkJXAorCS5yZWdfc2F2ZV9wdHIgPSAmaXNlcmllc19yZWdfc2F2ZVtudW1iZXJdLAkJCVwKK30KKworY29uc3Qgc3RydWN0IGFscGFjYSBhbHBhY2FbXSA9IHsKKwlBTFBBQ0FfSU5JVCggMCksCisjaWYgTlJfQ1BVUyA+IDEKKwlBTFBBQ0FfSU5JVCggMSksIEFMUEFDQV9JTklUKCAyKSwgQUxQQUNBX0lOSVQoIDMpLAorI2lmIE5SX0NQVVMgPiA0CisJQUxQQUNBX0lOSVQoIDQpLCBBTFBBQ0FfSU5JVCggNSksIEFMUEFDQV9JTklUKCA2KSwgQUxQQUNBX0lOSVQoIDcpLAorI2lmIE5SX0NQVVMgPiA4CisJQUxQQUNBX0lOSVQoIDgpLCBBTFBBQ0FfSU5JVCggOSksIEFMUEFDQV9JTklUKDEwKSwgQUxQQUNBX0lOSVQoMTEpLAorCUFMUEFDQV9JTklUKDEyKSwgQUxQQUNBX0lOSVQoMTMpLCBBTFBBQ0FfSU5JVCgxNCksIEFMUEFDQV9JTklUKDE1KSwKKwlBTFBBQ0FfSU5JVCgxNiksIEFMUEFDQV9JTklUKDE3KSwgQUxQQUNBX0lOSVQoMTgpLCBBTFBBQ0FfSU5JVCgxOSksCisJQUxQQUNBX0lOSVQoMjApLCBBTFBBQ0FfSU5JVCgyMSksIEFMUEFDQV9JTklUKDIyKSwgQUxQQUNBX0lOSVQoMjMpLAorCUFMUEFDQV9JTklUKDI0KSwgQUxQQUNBX0lOSVQoMjUpLCBBTFBBQ0FfSU5JVCgyNiksIEFMUEFDQV9JTklUKDI3KSwKKwlBTFBBQ0FfSU5JVCgyOCksIEFMUEFDQV9JTklUKDI5KSwgQUxQQUNBX0lOSVQoMzApLCBBTFBBQ0FfSU5JVCgzMSksCisjaWYgTlJfQ1BVUyA+IDMyCisJQUxQQUNBX0lOSVQoMzIpLCBBTFBBQ0FfSU5JVCgzMyksIEFMUEFDQV9JTklUKDM0KSwgQUxQQUNBX0lOSVQoMzUpLAorCUFMUEFDQV9JTklUKDM2KSwgQUxQQUNBX0lOSVQoMzcpLCBBTFBBQ0FfSU5JVCgzOCksIEFMUEFDQV9JTklUKDM5KSwKKwlBTFBBQ0FfSU5JVCg0MCksIEFMUEFDQV9JTklUKDQxKSwgQUxQQUNBX0lOSVQoNDIpLCBBTFBBQ0FfSU5JVCg0MyksCisJQUxQQUNBX0lOSVQoNDQpLCBBTFBBQ0FfSU5JVCg0NSksIEFMUEFDQV9JTklUKDQ2KSwgQUxQQUNBX0lOSVQoNDcpLAorCUFMUEFDQV9JTklUKDQ4KSwgQUxQQUNBX0lOSVQoNDkpLCBBTFBBQ0FfSU5JVCg1MCksIEFMUEFDQV9JTklUKDUxKSwKKwlBTFBBQ0FfSU5JVCg1MiksIEFMUEFDQV9JTklUKDUzKSwgQUxQQUNBX0lOSVQoNTQpLCBBTFBBQ0FfSU5JVCg1NSksCisJQUxQQUNBX0lOSVQoNTYpLCBBTFBBQ0FfSU5JVCg1NyksIEFMUEFDQV9JTklUKDU4KSwgQUxQQUNBX0lOSVQoNTkpLAorCUFMUEFDQV9JTklUKDYwKSwgQUxQQUNBX0lOSVQoNjEpLCBBTFBBQ0FfSU5JVCg2MiksIEFMUEFDQV9JTklUKDYzKSwKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorfTsKKwogLyogVGhlIExwYXJNYXAgZGF0YSBpcyBub3cgbG9jYXRlZCBhdCBvZmZzZXQgMHg2MDAwIGluIGhlYWQuUwogICogSXQgd2FzIHB1dCB0aGVyZSBzbyB0aGF0IHRoZSBIdlJlbGVhc2VEYXRhIGNvdWxkIGFkZHJlc3MgaXQKICAqIHdpdGggYSAzMi1iaXQgb2Zmc2V0IGFzIHJlcXVpcmVkIGJ5IHRoZSBpU2VyaWVzIGh5cGVydmlzb3IKQEAgLTE2Nyw3ICsyNjUsNyBAQAogICogdGhlIE5hY2EgdmlhIHRoZSBIdlJlbGVhc2VEYXRhIGFyZWEuICBUaGUgSHZSZWxlYXNlRGF0YSBoYXMgdGhlCiAgKiBvZmZzZXQgaW50byB0aGUgTmFjYSBvZiB0aGUgcG9pbnRlciB0byB0aGUgSXRWcGRBcmVhcy4KICAqLwotc3RydWN0IEl0VnBkQXJlYXMgaXRWcGRBcmVhcyA9IHsKK2NvbnN0IHN0cnVjdCBJdFZwZEFyZWFzIGl0VnBkQXJlYXMgPSB7CiAJLnhTbGljRGVzYyA9IDB4YzlhM2U1YzEsCQkvKiAiSXRWQSIgKi8KIAkueFNsaWNTaXplID0gc2l6ZW9mKHN0cnVjdCBJdFZwZEFyZWFzKSwKIAkueFNsaWNWcGRFbnRyaWVzID0gSXRWcGRNYXhFbnRyaWVzLAkvKiAjIFZQRCBhcnJheSBlbnRyaWVzICovCkBAIC0xODUsNyArMjgzLDcgQEAKIAkueFNsaWNWcGRMZW5zID0gewkJCS8qIFZQRCBsZW5ndGhzICovCiAJICAgICAgICAwLDAsMCwJCSAgICAgICAgLyogIDAgLSAyICovCiAJCXNpemVvZih4SXRFeHRWcGRQYW5lbCksIC8qICAgICAgIDMgRXh0ZW5kZWQgVlBEICAgKi8KLQkJc2l6ZW9mKHN0cnVjdCBwYWNhX3N0cnVjdCksCS8qICAgICAgIDQgbGVuZ3RoIG9mIFBhY2EgICovCisJCXNpemVvZihzdHJ1Y3QgYWxwYWNhKSwJLyogICAgICAgNCBsZW5ndGggb2YgKGZha2UpIFBhY2EgICovCiAJCTAsCQkJLyogICAgICAgNSAqLwogCQlzaXplb2Yoc3RydWN0IEl0SXBsUGFybXNSZWFsKSwvKiA2IGxlbmd0aCBvZiBJUEwgcGFybXMgKi8KIAkJMjY5OTIsCQkJLyoJIDcgbGVuZ3RoIG9mIE1TIFZQRCAqLwpAQCAtMjAzLDcgKzMwMSw3IEBACiAJLnhTbGljVnBkQWRycyA9IHsJCQkvKiBWUEQgYWRkcmVzc2VzICovCiAJCTAsMCwwLAkJCS8qCSAwIC0gIDIgKi8KIAkJJnhJdEV4dFZwZFBhbmVsLCAgICAgICAgLyogICAgICAgMyBFeHRlbmRlZCBWUEQgKi8KLQkJJnBhY2FbMF0sCQkvKiAgICAgICA0IGZpcnN0IFBhY2EgKi8KKwkJJmFscGFjYVswXSwJCS8qICAgICAgIDQgZmlyc3QgKGZha2UpIFBhY2EgKi8KIAkJMCwJCQkvKiAgICAgICA1ICovCiAJCSZ4SXRJcGxQYXJtc1JlYWwsCS8qCSA2IElQTCBwYXJtcyAqLwogCQkmeE1zVnBkLAkJLyoJIDcgTVMgVnBkICovCkBAIC0yMTksMTAgKzMxNywzIEBACiAJCTAsMAogCX0KIH07Ci0KLXN0cnVjdCBJdExwUmVnU2F2ZSBpc2VyaWVzX3JlZ19zYXZlW10gPSB7Ci0JWzAgLi4uIChOUl9DUFVTLTEpXSA9IHsKLQkJLnhEZXNjID0gMHhkMzk3ZDllMiwJLyogIkxwUlMiICovCi0JCS54U2l6ZSA9IHNpemVvZihzdHJ1Y3QgSXRMcFJlZ1NhdmUpLAotCX0sCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL25hY2EuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9uYWNhLmgKaW5kZXggYWIyMzcyZS4uZjAxNzA4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL25hY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbmFjYS5oCkBAIC0xNCw3ICsxNCw3IEBACiAKIHN0cnVjdCBuYWNhX3N0cnVjdCB7CiAJLyogS2VybmVsIG9ubHkgZGF0YSAtIHVuZGVmaW5lZCBmb3IgdXNlciBzcGFjZSAqLwotCXZvaWQgKnhJdFZwZEFyZWFzOyAgICAgICAgICAgICAgLyogVlBEIERhdGEgICAgICAgICAgICAgICAgICAweDAwICovCisJY29uc3Qgdm9pZCAqeEl0VnBkQXJlYXM7CS8qIFZQRCBEYXRhICAgICAgICAgICAgICAgICAgMHgwMCAqLwogCXZvaWQgKnhSYW1EaXNrOyAgICAgICAgICAgICAgICAgLyogaVNlcmllcyByYW1kaXNrICAgICAgICAgICAweDA4ICovCiAJdTY0ICAgeFJhbURpc2tTaXplOwkJLyogSW4gcGFnZXMgICAgICAgICAgICAgICAgICAweDEwICovCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3BjaS5jCmluZGV4IGNjNTYyZTQuLjAyYTYzNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcGNpLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI3VuZGVmIERFQlVHCiAKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNTg2LDcgKzU4Nyw3IEBACiAJCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfamlmZmllczsKIAkJc3RhdGljIGludCBudW1fcHJpbnRlZDsKIAotCQlpZiAoKGppZmZpZXMgLSBsYXN0X2ppZmZpZXMpID4gNjAgKiBIWikgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X2ppZmZpZXMgKyA2MCAqIEhaKSkgewogCQkJbGFzdF9qaWZmaWVzID0gamlmZmllczsKIAkJCW51bV9wcmludGVkID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3JlbGVhc2VfZGF0YS5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3JlbGVhc2VfZGF0YS5oCmluZGV4IDY2MTg5ZmQuLjZhZDdkODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9yZWxlYXNlX2RhdGEuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcmVsZWFzZV9kYXRhLmgKQEAgLTU4LDYgKzU4LDYgQEAKIAljaGFyCXhSc3ZkM1syMF07CS8qIFJlc2VydmVkCQkJeDJDLXgzRiAqLwogfTsKIAotZXh0ZXJuIHN0cnVjdCBIdlJlbGVhc2VEYXRhCWh2UmVsZWFzZURhdGE7CitleHRlcm4gY29uc3Qgc3RydWN0IEh2UmVsZWFzZURhdGEJaHZSZWxlYXNlRGF0YTsKIAogI2VuZGlmIC8qIF9JU0VSSUVTX1JFTEVBU0VfREFUQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc3Bjb21tX2FyZWEuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zcGNvbW1fYXJlYS5oCmluZGV4IDZlM2I2ODUuLjU5OGI3YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zcGNvbW1fYXJlYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zcGNvbW1fYXJlYS5oCkBAIC0zMSw2ICszMSw0IEBACiAJdTgJeFJzdmQyWzgwXTsJCS8vIFJlc2VydmVkCQkJCTAzMC0wN0YKIH07CiAKLWV4dGVybiBzdHJ1Y3QgU3BDb21tQXJlYSB4U3BDb21tQXJlYTsKLQogI2VuZGlmIC8qIF9JU0VSSUVTX1NQQ09NTV9BUkVBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92cGRfYXJlYXMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92cGRfYXJlYXMuaAppbmRleCA2MDFlNmRkLi5mZWIwMDFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdnBkX2FyZWFzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3ZwZF9hcmVhcy5oCkBAIC04MCw5ICs4MCw5IEBACiAJdTMyCXhQbGljRG1hTGVuc1tJdERtYU1heEVudHJpZXNdOy8vIEFycmF5IG9mIERNQSBsZW5ndGhzCTA4MC0wQTcKIAl1MzIJeFBsaWNEbWFUb2tzW0l0RG1hTWF4RW50cmllc107Ly8gQXJyYXkgb2YgRE1BIHRva2VucwkwQTgtMENGCiAJdTMyCXhTbGljVnBkTGVuc1tJdFZwZE1heEVudHJpZXNdOy8vIEFycmF5IG9mIFZQRCBsZW5ndGhzCTBEMC0xMkYKLQl2b2lkCSp4U2xpY1ZwZEFkcnNbSXRWcGRNYXhFbnRyaWVzXTsvLyBBcnJheSBvZiBWUEQgYnVmZmVycwkxMzAtMUVGCisJY29uc3Qgdm9pZCAqeFNsaWNWcGRBZHJzW0l0VnBkTWF4RW50cmllc107Ly8gQXJyYXkgb2YgVlBEIGJ1ZmZlcnMgMTMwLTFFRgogfTsKIAotZXh0ZXJuIHN0cnVjdCBJdFZwZEFyZWFzCWl0VnBkQXJlYXM7CitleHRlcm4gY29uc3Qgc3RydWN0IEl0VnBkQXJlYXMJaXRWcGRBcmVhczsKIAogI2VuZGlmIC8qIF9JU0VSSUVTX1ZQRF9BUkVBU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwppbmRleCAzZmZhMGFjLi4zMDE4NTUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKQEAgLTU5Miw1MCArNTkyLDMgQEAKIAl9CiAJcmV0dXJuIGlycTsKIH0KLQotLyogWFhYOiBUbyByZW1vdmUgb25jZSBhbGwgZmlybXdhcmVzIGFyZSBvayAqLwotc3RhdGljIHZvaWQgZml4dXBfbWFwbGVfaWRlKHN0cnVjdCBwY2lfZGV2KiBkZXYpCi17Ci0JaWYgKCFtYWNoaW5lX2lzKG1hcGxlKSkKLQkJcmV0dXJuOwotCi0jaWYgMCAvKiBFbmFibGUgdGhpcyB0byBlbmFibGUgSURFIHBvcnQgMCAqLwotCXsKLQkJdTggdjsKLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NDAsICZ2KTsKLQkJdiB8PSAyOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQwLCB2KTsKLQl9Ci0jZW5kaWYKLSNpZiAwIC8qIGZpeCBidXMgbWFzdGVyIGJhc2UgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgyMCwgMHhjYzAxKTsKLQlwcmludGsoIm9sZCBpZGUgcmVzb3VyY2U6ICVseCAtPiAlbHggXG4iLAotCSAgICAgICBkZXYtPnJlc291cmNlWzRdLnN0YXJ0LCBkZXYtPnJlc291cmNlWzRdLmVuZCk7Ci0JZGV2LT5yZXNvdXJjZVs0XS5zdGFydCA9IDB4Y2MwMDsKLQlkZXYtPnJlc291cmNlWzRdLmVuZCA9IDB4Y2MxMDsKLSNlbmRpZgotI2lmIDAgLyogRW5hYmxlIHRoaXMgdG8gZml4dXAgSURFIHNlbnNlL3BvbGFyaXR5IG9mIGlycXMgaW4gSU8tQVBJQ3MgKi8KLQl7Ci0JCXN0cnVjdCBwY2lfZGV2ICphcGljZGV2OwotCQl1MzIgdjsKLQotCQlhcGljZGV2ID0gcGNpX2dldF9zbG90IChkZXYtPmJ1cywgUENJX0RFVkZOKDUsMCkpOwotCQlpZiAoYXBpY2RldiA9PSBOVUxMKQotCQkJcHJpbnRrKCJJREUgRml4dXAgSVJROiBDYW4ndCBmaW5kIElPLUFQSUMgIVxuIik7Ci0JCWVsc2UgewotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGFwaWNkZXYsIDB4ZjIsIDB4MTAgKyAyKjE0KTsKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhcGljZGV2LCAweGY0LCAmdik7Ci0JCQl2ICY9IH4weDAwMDAwMDIyOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhcGljZGV2LCAweGY0LCB2KTsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShhcGljZGV2LCAweGYyLCAweDEwICsgMioxNSk7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYXBpY2RldiwgMHhmNCwgJnYpOwotCQkJdiAmPSB+MHgwMDAwMDAyMjsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYXBpY2RldiwgMHhmNCwgdik7Ci0JCQlwY2lfZGV2X3B1dChhcGljZGV2KTsKLQkJfQotCX0KLSNlbmRpZgotfQotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0lERSwKLQkJCSBmaXh1cF9tYXBsZV9pZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCmluZGV4IDNjZTJkNzMuLjM2NDcxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KQEAgLTU3LDcgKzU4LDYgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL21waWMuaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CkBAIC0zMTksNyArMzE5LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotZGVmaW5lX21hY2hpbmUobWFwbGVfbWQpIHsKK2RlZmluZV9tYWNoaW5lKG1hcGxlKSB7CiAJLm5hbWUJCQk9ICJNYXBsZSIsCiAJLnByb2JlCQkJPSBtYXBsZV9wcm9iZSwKIAkuc2V0dXBfYXJjaAkJPSBtYXBsZV9zZXR1cF9hcmNoLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9NYWtlZmlsZQppbmRleCA4ZjUyZDc1Li5jZTZkNzg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKLW9iai15CSs9IHNldHVwLm8gcGNpLm8gdGltZS5vIGlkbGUubyBwb3dlcnNhdmUubyBpb21tdS5vIGRtYV9saWIubworb2JqLXkJKz0gc2V0dXAubyBwY2kubyB0aW1lLm8gaWRsZS5vIHBvd2Vyc2F2ZS5vIGlvbW11Lm8gZG1hX2xpYi5vIG1pc2Mubwogb2JqLSQoQ09ORklHX1BQQ19QQVNFTUlfTURJTykJKz0gZ3Bpb19tZGlvLm8KIG9iai0kKENPTkZJR19QUENfUEFTRU1JX0NQVUZSRVEpICs9IGNwdWZyZXEubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZG1hX2xpYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZG1hX2xpYi5jCmluZGV4IGM1MjlkOGQuLjIxN2FmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2RtYV9saWIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9kbWFfbGliLmMKQEAgLTE3LDYgKzE3LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yNiw2ICsyNyw4IEBACiAKICNkZWZpbmUgTUFYX1RYQ0ggNjQKICNkZWZpbmUgTUFYX1JYQ0ggNjQKKyNkZWZpbmUgTUFYX0ZMQUdTIDY0CisjZGVmaW5lIE1BWF9GVU4gOAogCiBzdGF0aWMgc3RydWN0IHBhc2RtYV9zdGF0dXMgKmRtYV9zdGF0dXM7CiAKQEAgLTQzLDYgKzQ2LDggQEAKIAogc3RhdGljIERFQ0xBUkVfQklUTUFQKHR4Y2hfZnJlZSwgTUFYX1RYQ0gpOwogc3RhdGljIERFQ0xBUkVfQklUTUFQKHJ4Y2hfZnJlZSwgTUFYX1JYQ0gpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGZsYWdzX2ZyZWUsIE1BWF9GTEFHUyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZnVuX2ZyZWUsIE1BWF9GVU4pOwogCiAvKiBwYXNlbWlfcmVhZF9pb2JfcmVnIC0gcmVhZCBJT0IgcmVnaXN0ZXIKICAqIEByZWc6IFJlZ2lzdGVyIHRvIHJlYWQgKG9mZnNldCBpbnRvIFBDSSBDRkcgc3BhY2UpCkBAIC0zNzMsNiArMzc4LDEwNiBAQAogfQogRVhQT1JUX1NZTUJPTChwYXNlbWlfZG1hX2ZyZWVfYnVmKTsKIAorLyogcGFzZW1pX2RtYV9hbGxvY19mbGFnIC0gQWxsb2NhdGUgYSBmbGFnIChldmVudCkgZm9yIGNoYW5uZWwgc3luY3Jvbml6YXRpb24KKyAqCisgKiBBbGxvY2F0ZXMgYSBmbGFnIGZvciB1c2Ugd2l0aCBjaGFubmVsIHN5bmNyb25pemF0aW9uIChldmVudCBkZXNjcmlwdG9ycykuCisgKiBSZXR1cm5zIGFsbG9jYXRlZCBmbGFnICgwLTYzKSwgPCAwIG9uIGVycm9yLgorICovCitpbnQgcGFzZW1pX2RtYV9hbGxvY19mbGFnKHZvaWQpCit7CisJaW50IGJpdDsKKworcmV0cnk6CisJYml0ID0gZmluZF9uZXh0X2JpdChmbGFnc19mcmVlLCBNQVhfRkxBR1MsIDApOworCWlmIChiaXQgPj0gTUFYX0ZMQUdTKQorCQlyZXR1cm4gLUVOT1NQQzsKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChiaXQsIGZsYWdzX2ZyZWUpKQorCQlnb3RvIHJldHJ5OworCisJcmV0dXJuIGJpdDsKK30KK0VYUE9SVF9TWU1CT0wocGFzZW1pX2RtYV9hbGxvY19mbGFnKTsKKworCisvKiBwYXNlbWlfZG1hX2ZyZWVfZmxhZyAtIERlYWxsb2NhdGVzIGEgZmxhZyAoZXZlbnQpCisgKiBAZmxhZzogRmxhZyBudW1iZXIgdG8gZGVhbGxvY2F0ZQorICoKKyAqIEZyZWVzIHVwIGEgZmxhZyBzbyBpdCBjYW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KKyAqLwordm9pZCBwYXNlbWlfZG1hX2ZyZWVfZmxhZyhpbnQgZmxhZykKK3sKKwlCVUdfT04odGVzdF9iaXQoZmxhZywgZmxhZ3NfZnJlZSkpOworCUJVR19PTihmbGFnID49IE1BWF9GTEFHUyk7CisJc2V0X2JpdChmbGFnLCBmbGFnc19mcmVlKTsKK30KK0VYUE9SVF9TWU1CT0wocGFzZW1pX2RtYV9mcmVlX2ZsYWcpOworCisKKy8qIHBhc2VtaV9kbWFfc2V0X2ZsYWcgLSBTZXRzIGEgZmxhZyAoZXZlbnQpIHRvIDEKKyAqIEBmbGFnOiBGbGFnIG51bWJlciB0byBzZXQgYWN0aXZlCisgKgorICogU2V0cyB0aGUgZmxhZyBwcm92aWRlZCB0byAxLgorICovCit2b2lkIHBhc2VtaV9kbWFfc2V0X2ZsYWcoaW50IGZsYWcpCit7CisJQlVHX09OKGZsYWcgPj0gTUFYX0ZMQUdTKTsKKwlpZiAoZmxhZyA8IDMyKQorCQlwYXNlbWlfd3JpdGVfZG1hX3JlZyhQQVNfRE1BX1RYRl9TRkxHMCwgMSA8PCBmbGFnKTsKKwllbHNlCisJCXBhc2VtaV93cml0ZV9kbWFfcmVnKFBBU19ETUFfVFhGX1NGTEcxLCAxIDw8IGZsYWcpOworfQorRVhQT1JUX1NZTUJPTChwYXNlbWlfZG1hX3NldF9mbGFnKTsKKworLyogcGFzZW1pX2RtYV9jbGVhcl9mbGFnIC0gU2V0cyBhIGZsYWcgKGV2ZW50KSB0byAwCisgKiBAZmxhZzogRmxhZyBudW1iZXIgdG8gc2V0IGluYWN0aXZlCisgKgorICogU2V0cyB0aGUgZmxhZyBwcm92aWRlZCB0byAwLgorICovCit2b2lkIHBhc2VtaV9kbWFfY2xlYXJfZmxhZyhpbnQgZmxhZykKK3sKKwlCVUdfT04oZmxhZyA+PSBNQVhfRkxBR1MpOworCWlmIChmbGFnIDwgMzIpCisJCXBhc2VtaV93cml0ZV9kbWFfcmVnKFBBU19ETUFfVFhGX0NGTEcwLCAxIDw8IGZsYWcpOworCWVsc2UKKwkJcGFzZW1pX3dyaXRlX2RtYV9yZWcoUEFTX0RNQV9UWEZfQ0ZMRzEsIDEgPDwgZmxhZyk7Cit9CitFWFBPUlRfU1lNQk9MKHBhc2VtaV9kbWFfY2xlYXJfZmxhZyk7CisKKy8qIHBhc2VtaV9kbWFfYWxsb2NfZnVuIC0gQWxsb2NhdGUgYSBmdW5jdGlvbiBlbmdpbmUKKyAqCisgKiBBbGxvY2F0ZXMgYSBmdW5jdGlvbiBlbmdpbmUgdG8gdXNlIGZvciBjcnlwdG8vY2hlY2tzdW0gb2ZmbG9hZAorICogUmV0dXJucyBhbGxvY2F0ZWQgZW5naW5lICgwLTgpLCA8IDAgb24gZXJyb3IuCisgKi8KK2ludCBwYXNlbWlfZG1hX2FsbG9jX2Z1bih2b2lkKQoreworCWludCBiaXQ7CisKK3JldHJ5OgorCWJpdCA9IGZpbmRfbmV4dF9iaXQoZnVuX2ZyZWUsIE1BWF9GTEFHUywgMCk7CisJaWYgKGJpdCA+PSBNQVhfRkxBR1MpCisJCXJldHVybiAtRU5PU1BDOworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgZnVuX2ZyZWUpKQorCQlnb3RvIHJldHJ5OworCisJcmV0dXJuIGJpdDsKK30KK0VYUE9SVF9TWU1CT0wocGFzZW1pX2RtYV9hbGxvY19mdW4pOworCisKKy8qIHBhc2VtaV9kbWFfZnJlZV9mdW4gLSBEZWFsbG9jYXRlcyBhIGZ1bmN0aW9uIGVuZ2luZQorICogQGZsYWc6IEVuZ2luZSBudW1iZXIgdG8gZGVhbGxvY2F0ZQorICoKKyAqIEZyZWVzIHVwIGEgZnVuY3Rpb24gZW5naW5lIHNvIGl0IGNhbiBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KKyAqLwordm9pZCBwYXNlbWlfZG1hX2ZyZWVfZnVuKGludCBmdW4pCit7CisJQlVHX09OKHRlc3RfYml0KGZ1biwgZnVuX2ZyZWUpKTsKKwlCVUdfT04oZnVuID49IE1BWF9GTEFHUyk7CisJc2V0X2JpdChmdW4sIGZ1bl9mcmVlKTsKK30KK0VYUE9SVF9TWU1CT0wocGFzZW1pX2RtYV9mcmVlX2Z1bik7CisKKwogc3RhdGljIHZvaWQgKm1hcF9vbmVkZXYoc3RydWN0IHBjaV9kZXYgKnAsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwpAQCAtNDEwLDYgKzUxNSw3IEBACiAJc3RydWN0IHJlc291cmNlIHJlczsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCWludCBpLCBpbnRmLCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1MzIgdG1wOwogCiAJaWYgKCFtYWNoaW5lX2lzKHBhc2VtaSkpCkBAIC00NzgsNiArNTg0LDQ0IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9SWENIOyBpKyspCiAJCV9fc2V0X2JpdChpLCByeGNoX2ZyZWUpOwogCisJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKKwlwYXNlbWlfd3JpdGVfZG1hX3JlZyhQQVNfRE1BX0NPTV9SWENNRCwgMCk7CisJd2hpbGUgKHBhc2VtaV9yZWFkX2RtYV9yZWcoUEFTX0RNQV9DT01fUlhTVEEpICYgMSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcHJfd2FybmluZygiV2FybmluZzogQ291bGQgbm90IGRpc2FibGUgUlggc2VjdGlvblxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXRpbWVvdXQgPSBqaWZmaWVzICsgSFo7CisJcGFzZW1pX3dyaXRlX2RtYV9yZWcoUEFTX0RNQV9DT01fVFhDTUQsIDApOworCXdoaWxlIChwYXNlbWlfcmVhZF9kbWFfcmVnKFBBU19ETUFfQ09NX1RYU1RBKSAmIDEpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXByX3dhcm5pbmcoIldhcm5pbmc6IENvdWxkIG5vdCBkaXNhYmxlIFRYIHNlY3Rpb25cbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBzZXR1cCByZXNvdXJjZSBhbGxvY2F0aW9ucyBmb3IgdGhlIGRpZmZlcmVudCBETUEgc2VjdGlvbnMgKi8KKwl0bXAgPSBwYXNlbWlfcmVhZF9kbWFfcmVnKFBBU19ETUFfQ09NX0NGRyk7CisJcGFzZW1pX3dyaXRlX2RtYV9yZWcoUEFTX0RNQV9DT01fQ0ZHLCB0bXAgfCAweDE4MDAwMDAwKTsKKworCS8qIGVuYWJsZSB0eCBzZWN0aW9uICovCisJcGFzZW1pX3dyaXRlX2RtYV9yZWcoUEFTX0RNQV9DT01fVFhDTUQsIFBBU19ETUFfQ09NX1RYQ01EX0VOKTsKKworCS8qIGVuYWJsZSByeCBzZWN0aW9uICovCisJcGFzZW1pX3dyaXRlX2RtYV9yZWcoUEFTX0RNQV9DT01fUlhDTUQsIFBBU19ETUFfQ09NX1JYQ01EX0VOKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRkxBR1M7IGkrKykKKwkJX19zZXRfYml0KGksIGZsYWdzX2ZyZWUpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9GVU47IGkrKykKKwkJX19zZXRfYml0KGksIGZ1bl9mcmVlKTsKKworCS8qIGNsZWFyIGFsbCBzdGF0dXMgZmxhZ3MgKi8KKwlwYXNlbWlfd3JpdGVfZG1hX3JlZyhQQVNfRE1BX1RYRl9DRkxHMCwgMHhmZmZmZmZmZik7CisJcGFzZW1pX3dyaXRlX2RtYV9yZWcoUEFTX0RNQV9UWEZfQ0ZMRzEsIDB4ZmZmZmZmZmYpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiUEEgU2VtaSBQV1JmaWNpZW50IERNQSBsaWJyYXJ5IGluaXRpYWxpemVkICIKIAkJIiglZCB0eCwgJWQgcnggY2hhbm5lbHMpXG4iLCBudW1fdHhjaCwgbnVtX3J4Y2gpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jCmluZGV4IGI0NjU0MjkuLmFiNjk1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAluZXdfYnVzLT5yZXNldCA9ICZncGlvX21kaW9fcmVzZXQ7CiAKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7Ci0JbmV3X2J1cy0+aWQgPSAqcHJvcDsKKwlzbnByaW50ZihuZXdfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCAqcHJvcCk7CiAJbmV3X2J1cy0+cHJpdiA9IHByaXY7CiAKIAluZXdfYnVzLT5waHlfbWFzayA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwppbmRleCA1ODAzZjExLi44Njk2N2JkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcsIFBBIFNlbWksIEluYworICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDgsIFBBIFNlbWksIEluYwogICoKICAqIE1haW50YWluZWQgYnk6IE9sb2YgSm9oYW5zc29uIDxvbG9mQGxpeG9tLm5ldD4KICAqCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAKLQogI2RlZmluZSBJT0JNQVBfUEFHRV9TSElGVAkxMgogI2RlZmluZSBJT0JNQVBfUEFHRV9TSVpFCSgxIDw8IElPQk1BUF9QQUdFX1NISUZUKQogI2RlZmluZSBJT0JNQVBfUEFHRV9NQVNLCShJT0JNQVBfUEFHRV9TSVpFIC0gMSkKQEAgLTM1LDEzICszNCwxMyBAQAogI2RlZmluZSBJT0JfQkFTRQkJMHhlMDAwMDAwMAogI2RlZmluZSBJT0JfU0laRQkJMHgzMDAwCiAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwotI2RlZmluZSBJT0JDQVBfUkVHCQkweDEwCi0jZGVmaW5lIElPQkNPTV9SRUcJCTB4NDAKKyNkZWZpbmUgSU9CQ0FQX1JFRwkJMHg0MAorI2RlZmluZSBJT0JDT01fUkVHCQkweDEwMAogLyogRW5hYmxlIElPQiBhZGRyZXNzIHRyYW5zbGF0aW9uICovCiAjZGVmaW5lIElPQkNPTV9BVEVOCQkweDAwMDAwMTAwCiAKIC8qIEFkZHJlc3MgZGVjb2RlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgSU9CX0FEX1JFRwkJMHg1MworI2RlZmluZSBJT0JfQURfUkVHCQkweDE0YwogLyogSU9CQ09NX0FEX1JFRyBmaWVsZHMgKi8KICNkZWZpbmUgSU9CX0FEX1ZHUFJUCQkweDAwMDAwZTAwCiAjZGVmaW5lIElPQl9BRF9WR0FFTgkJMHgwMDAwMDEwMApAQCAtNTYsMTMgKzU1LDEzIEBACiAjZGVmaW5lIElPQl9BRF9UUk5HXzJHCQkweDAwMDAwMDAxCiAjZGVmaW5lIElPQl9BRF9UUk5HXzEyOEcJMHgwMDAwMDAwMwogCi0jZGVmaW5lIElPQl9UQUJMRUJBU0VfUkVHCTB4NTUKKyNkZWZpbmUgSU9CX1RBQkxFQkFTRV9SRUcJMHgxNTQKIAogLyogQmFzZSBvZiB0aGUgNjQgNC1ieXRlIEwxIHJlZ2lzdGVycyAqLwotI2RlZmluZSBJT0JfWExUX0wxX1JFR0JBU0UJMHhhYzAKKyNkZWZpbmUgSU9CX1hMVF9MMV9SRUdCQVNFCTB4MmIwMAogCiAvKiBSZWdpc3RlciB0byBpbnZhbGlkYXRlIFRMQiBlbnRyaWVzICovCi0jZGVmaW5lIElPQl9BVF9JTlZBTF9UTEJfUkVHCTB4YjQwCisjZGVmaW5lIElPQl9BVF9JTlZBTF9UTEJfUkVHCTB4MmQwMAogCiAvKiBUaGUgdG9wIHR3byBiaXRzIG9mIHRoZSBsZXZlbCAxIGVudHJ5IGNvbnRhaW5zIHZhbGlkIGFuZCB0eXBlIGZsYWdzICovCiAjZGVmaW5lIElPQk1BUF9MMUVfVgkJMHg0MDAwMDAwMApAQCAtNzYsNyArNzUsNyBAQAogI2RlZmluZSBJT0JNQVBfTDJFX1YJCTB4ODAwMDAwMDAKICNkZWZpbmUgSU9CTUFQX0wyRV9WX0NBQ0hFRAkweGMwMDAwMDAwCiAKLXN0YXRpYyB1MzIgX19pb21lbSAqaW9iOworc3RhdGljIHZvaWQgX19pb21lbSAqaW9iOwogc3RhdGljIHUzMiBpb2JfbDFfZW1wdHl2YWw7CiBzdGF0aWMgdTMyIGlvYl9sMl9lbXB0eXZhbDsKIHN0YXRpYyB1MzIgKmlvYl9sMl9iYXNlOwpAQCAtMjE5LDcgKzIxOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKIAkJLyogRWFjaCBMMSBjb3ZlcnMgMzJNQiwgaS5lLiA4SyBlbnRyaWVzID0gMzJLIG9mIHJhbSAqLwogCQlyZWd3b3JkID0gSU9CTUFQX0wxRV9WIHwgKF9fcGEoaW9iX2wyX2Jhc2UgKyBpKjB4MjAwMCkgPj4gMTIpOwotCQlvdXRfbGUzMihpb2IrSU9CX1hMVF9MMV9SRUdCQVNFK2ksIHJlZ3dvcmQpOworCQlvdXRfbGUzMihpb2IrSU9CX1hMVF9MMV9SRUdCQVNFK2kqNCwgcmVnd29yZCk7CiAJfQogCiAJLyogc2V0IDJHQiB0cmFuc2xhdGlvbiB3aW5kb3csIGJhc2VkIGF0IDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL21pc2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWQ3ZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvbWlzYy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUEEgU2VtaSwgSW5jCisgKgorICogUGFydHMgYmFzZWQgb24gYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmM6CisgKgorICogMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2lmZGVmIENPTkZJR19JMkNfQk9BUkRJTkZPCisvKiBUaGUgYmVsb3cgaXMgZnJvbSBmc2xfc29jLmMuICBJdCdzIGNvcGllZCBiZWNhdXNlIHNpbmNlIHRoZXJlIGFyZSBubworICogb2ZmaWNpYWwgYnVzIGJpbmRpbmdzIGF0IHRoaXMgdGltZSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gc2hhcmUgYWNyb3NzCisgKiB0aGUgcGxhdGZvcm1zLCBldmVuIHRob3VnaCB0aGV5IGhhcHBlbiB0byBiZSBjb21tb24uCisgKi8KK3N0cnVjdCBpMmNfZHJpdmVyX2RldmljZSB7CisJY2hhciAgICAqb2ZfZGV2aWNlOworCWNoYXIgICAgKmkyY19kcml2ZXI7CisJY2hhciAgICAqaTJjX3R5cGU7Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXJfZGV2aWNlIGkyY19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwl7ImRhbGxhcyxkczEzMzgiLCAgInJ0Yy1kczEzMDciLCAgImRzMTMzOCJ9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZmluZF9pMmNfZHJpdmVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGkyY19kZXZpY2VzKTsgaSsrKSB7CisJCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgaTJjX2RldmljZXNbaV0ub2ZfZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RybGNweShpbmZvLT5kcml2ZXJfbmFtZSwgaTJjX2RldmljZXNbaV0uaTJjX2RyaXZlciwKKwkJCSAgICBLT0JKX05BTUVfTEVOKSA+PSBLT0JKX05BTUVfTEVOIHx8CisJCSAgICBzdHJsY3B5KGluZm8tPnR5cGUsIGkyY19kZXZpY2VzW2ldLmkyY190eXBlLAorCQkJICAgIEkyQ19OQU1FX1NJWkUpID49IEkyQ19OQU1FX1NJWkUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwYXNlbWlfcmVnaXN0ZXJfaTJjX2RldmljZXModm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFkYXBfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisKKwlwZGV2ID0gTlVMTDsKKwl3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1BBU0VNSSwgMHhhMDAzLCBwZGV2KSkpIHsKKwkJYWRhcF9ub2RlID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOworCisJCWlmICghYWRhcF9ub2RlKQorCQkJY29udGludWU7CisKKwkJbm9kZSA9IE5VTEw7CisJCXdoaWxlICgobm9kZSA9IG9mX2dldF9uZXh0X2NoaWxkKGFkYXBfbm9kZSwgbm9kZSkpKSB7CisJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbyA9IHt9OworCQkJY29uc3QgdTMyICphZGRyOworCQkJaW50IGxlbjsKKworCQkJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAicmVnIiwgJmxlbik7CisJCQlpZiAoIWFkZHIgfHwgbGVuIDwgc2l6ZW9mKGludCkgfHwKKwkJCSAgICAqYWRkciA+ICgxIDw8IDEwKSAtIDEpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSJwYXNlbWlfcmVnaXN0ZXJfaTJjX2RldmljZXM6ICIKKwkJCQkJImludmFsaWQgaTJjIGRldmljZSBlbnRyeVxuIik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWluZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CisJCQlpZiAoaW5mby5pcnEgPT0gTk9fSVJRKQorCQkJCWluZm8uaXJxID0gLTE7CisKKwkJCWlmIChmaW5kX2kyY19kcml2ZXIobm9kZSwgJmluZm8pIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJaW5mby5hZGRyID0gKmFkZHI7CisKKwkJCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKFBDSV9GVU5DKHBkZXYtPmRldmZuKSwgJmluZm8sCisJCQkJCQkxKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChwYXNlbWlfcmVnaXN0ZXJfaTJjX2RldmljZXMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwppbmRleCAxYzU4ZGI5Li5iY2Y1MGQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKQEAgLTExNDQsMjggKzExNDQsNiBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSogbmQ7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREUKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQotCS8qIE9GIGZhaWxzIHRvIGluaXRpYWxpemUgSURFIGNvbnRyb2xsZXJzIG9uIG1hY3MKLQkgKiAoYW5kIG1heWJlIG90aGVyIG1hY2hpbmVzKQotCSAqCi0JICogSWRlYWxseSwgdGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIElERSBsYXllciwgYnV0IHdlIG5lZWQKLQkgKiB0byBjaGVjayBzcGVjaWZpY2FsbHkgd2l0aCBBbmRyZSBIZWRyaWNrIGhvdyB0byBkbyBpdCBjbGVhbmx5Ci0JICogc2luY2UgdGhlIGNvbW1vbiBJREUgY29kZSBzZWVtIHRvIGNhcmUgYWJvdXQgdGhlIGZhY3QgdGhhdCB0aGUKLQkgKiBCSU9TIG1heSBoYXZlIGRpc2FibGVkIGEgY29udHJvbGxlci4KLQkgKgotCSAqIC0tIEJlbkgKLQkgKi8KLQlmb3JfZWFjaF9wY2lfZGV2KGRldikgewotCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYpICE9IFBDSV9CQVNFX0NMQVNTX1NUT1JBR0UpCi0JCQljb250aW51ZTsKLQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgInBjaTogRmFpbGVkIHRvIGVuYWJsZSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERSAqLwotCiAJZm9yX2VhY2hfbm9kZV9ieV9uYW1lKG5kLCAiZmlyZXdpcmUiKSB7CiAJCWlmIChuZC0+cGFyZW50ICYmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShuZCwgInBjaTEwNmIsMTgiKSB8fAogCQkJCSAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5kLCAicGNpMTA2YiwzMCIpIHx8CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jCmluZGV4IDg1NDM0MjMxLi45NmQ1Y2U1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcG1hY19wZnVuYy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCA0MDczNjQwLi44MjliOGIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTYxOCw5ICs2MTgsOSBAQAogCWlmIChucCA9PSBOVUxMKQogCQlnb3RvIG5vdF9mb3VuZDsKIAl2aWFpbnQgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7OwotI2VuZGlmIC8qIENPTkZJR19BREJfUE1VICovCiAKIG5vdF9mb3VuZDoKKyNlbmRpZiAvKiBDT05GSUdfQURCX1BNVSAqLwogCXJldHVybiB2aWFpbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcG1hYy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wbWFjLmgKaW5kZXggYjNhYmFhZi4uMzM2MmU3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wbWFjLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wbWFjLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9fUE1BQ19IX18KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAvKgpAQCAtMzUsMTAgKzM0LDYgQEAKIAogZXh0ZXJuIHZvaWQgcG1hY19zZXR1cF9zbXAodm9pZCk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBtYWNfaWRlX2dldF9iYXNlKGludCBpbmRleCk7Ci1leHRlcm4gdm9pZCBwbWFjX2lkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICpodywKLQl1bnNpZ25lZCBsb25nIGRhdGFfcG9ydCwgdW5zaWduZWQgbG9uZyBjdHJsX3BvcnQsIGludCAqaXJxKTsKLQogZXh0ZXJuIGludCBwbWFjX252cmFtX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBwbWFjX3BpY19pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggMzZmZjFiNi4uYmY0NGM1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgpAQCAtNzQsNyArNzUsNiBAQAogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9zbXUuaD4KICNpbmNsdWRlIDxhc20vcG1jLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKICNpbmNsdWRlICJwbWFjLmgiCkBAIC01NzQsMTQgKzU3NCw2IEBACiAJSVNBX0RNQV9USFJFU0hPTEQgPSB+MEw7CiAJRE1BX01PREVfUkVBRCA9IDE7CiAJRE1BX01PREVfV1JJVEUgPSAyOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREUpIHx8IGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFX01PRFVMRSkKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQwotICAgICAgICBwcGNfaWRlX21kLmlkZV9pbml0X2h3aWYJPSBwbWFjX2lkZV9pbml0X2h3aWZfcG9ydHM7Ci0gICAgICAgIHBwY19pZGVfbWQuZGVmYXVsdF9pb19iYXNlCT0gcG1hY19pZGVfZ2V0X2Jhc2U7Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFX1BNQUMgKi8KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfTU9EVUxFKSAqLwotCiAjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCiAKICNpZmRlZiBDT05GSUdfUE1BQ19TTVUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2RldmljZS1pbml0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9kZXZpY2UtaW5pdC5jCmluZGV4IDlkMjUxZDAuLjM4NjZkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2RldmljZS1pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvZGV2aWNlLWluaXQuYwpAQCAtNDk5LDQxICs0OTksMTQgQEAKIH0KIAogLyoqCi0gKiBwczNfcmVnaXN0ZXJfcmVwb3NpdG9yeV9kZXZpY2UgLSBSZWdpc3RlciBhIGRldmljZSBmcm9tIHRoZSByZXBvc2l0aW9yeSBpbmZvLgotICoKKyAqIHBzM19zZXR1cF9keW5hbWljX2RldmljZSAtIFNldHVwIGEgZHluYW1pYyBkZXZpY2UgZnJvbSB0aGUgcmVwb3NpdG9yeQogICovCiAKLXN0YXRpYyBpbnQgcHMzX3JlZ2lzdGVyX3JlcG9zaXRvcnlfZGV2aWNlKAotCWNvbnN0IHN0cnVjdCBwczNfcmVwb3NpdG9yeV9kZXZpY2UgKnJlcG8pCitzdGF0aWMgaW50IHBzM19zZXR1cF9keW5hbWljX2RldmljZShjb25zdCBzdHJ1Y3QgcHMzX3JlcG9zaXRvcnlfZGV2aWNlICpyZXBvKQogewogCWludCByZXN1bHQ7CiAKIAlzd2l0Y2ggKHJlcG8tPmRldl90eXBlKSB7Ci0JY2FzZSBQUzNfREVWX1RZUEVfU0JfR0VMSUM6Ci0JCXJlc3VsdCA9IHBzM19zZXR1cF9nZWxpY19kZXZpY2UocmVwbyk7Ci0JCWlmIChyZXN1bHQpIHsKLQkJCXByX2RlYnVnKCIlczolZCBwczNfc2V0dXBfZ2VsaWNfZGV2aWNlIGZhaWxlZFxuIiwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgUFMzX0RFVl9UWVBFX1NCX1VTQjoKLQotCQkvKiBFYWNoIFVTQiBkZXZpY2UgaGFzIGJvdGggYW4gRUhDSSBhbmQgYW4gT0hDSSBIQyAqLwotCi0JCXJlc3VsdCA9IHBzM19zZXR1cF9laGNpX2RldmljZShyZXBvKTsKLQotCQlpZiAocmVzdWx0KSB7Ci0JCQlwcl9kZWJ1ZygiJXM6JWQgcHMzX3NldHVwX2VoY2lfZGV2aWNlIGZhaWxlZFxuIiwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQl9Ci0KLQkJcmVzdWx0ID0gcHMzX3NldHVwX29oY2lfZGV2aWNlKHJlcG8pOwotCi0JCWlmIChyZXN1bHQpIHsKLQkJCXByX2RlYnVnKCIlczolZCBwczNfc2V0dXBfb2hjaV9kZXZpY2UgZmFpbGVkXG4iLAotCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCX0KLQkJYnJlYWs7CiAJY2FzZSBQUzNfREVWX1RZUEVfU1RPUl9ESVNLOgogCQlyZXN1bHQgPSBwczNfc2V0dXBfc3RvcmFnZV9kZXYocmVwbywgUFMzX01BVENIX0lEX1NUT1JfRElTSyk7CiAKQEAgLTU3Miw2ICs1NDUsNDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKioKKyAqIHBzM19zZXR1cF9zdGF0aWNfZGV2aWNlIC0gU2V0dXAgYSBzdGF0aWMgZGV2aWNlIGZyb20gdGhlIHJlcG9zaXRvcnkKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBwczNfc2V0dXBfc3RhdGljX2RldmljZShjb25zdCBzdHJ1Y3QgcHMzX3JlcG9zaXRvcnlfZGV2aWNlICpyZXBvKQoreworCWludCByZXN1bHQ7CisKKwlzd2l0Y2ggKHJlcG8tPmRldl90eXBlKSB7CisJY2FzZSBQUzNfREVWX1RZUEVfU0JfR0VMSUM6CisJCXJlc3VsdCA9IHBzM19zZXR1cF9nZWxpY19kZXZpY2UocmVwbyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByX2RlYnVnKCIlczolZCBwczNfc2V0dXBfZ2VsaWNfZGV2aWNlIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQl9CisJCWJyZWFrOworCWNhc2UgUFMzX0RFVl9UWVBFX1NCX1VTQjoKKworCQkvKiBFYWNoIFVTQiBkZXZpY2UgaGFzIGJvdGggYW4gRUhDSSBhbmQgYW4gT0hDSSBIQyAqLworCisJCXJlc3VsdCA9IHBzM19zZXR1cF9laGNpX2RldmljZShyZXBvKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQlwcl9kZWJ1ZygiJXM6JWQgcHMzX3NldHVwX2VoY2lfZGV2aWNlIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQl9CisKKwkJcmVzdWx0ID0gcHMzX3NldHVwX29oY2lfZGV2aWNlKHJlcG8pOworCisJCWlmIChyZXN1bHQpIHsKKwkJCXByX2RlYnVnKCIlczolZCBwczNfc2V0dXBfb2hjaV9kZXZpY2UgZmFpbGVkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gcHMzX3NldHVwX2R5bmFtaWNfZGV2aWNlKHJlcG8pOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyB2b2lkIHBzM19maW5kX2FuZF9hZGRfZGV2aWNlKHU2NCBidXNfaWQsIHU2NCBkZXZfaWQpCiB7CiAJc3RydWN0IHBzM19yZXBvc2l0b3J5X2RldmljZSByZXBvOwpAQCAtNjAxLDcgKzYxNiw3IEBACiAJCXByX2RlYnVnKCIlczoldTogZGV2aWNlICVsdTolbHUgZm91bmQgYWZ0ZXIgJXUgcmV0cmllc1xuIiwKIAkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGJ1c19pZCwgZGV2X2lkLCByZXRyaWVzKTsKIAotCXBzM19yZWdpc3Rlcl9yZXBvc2l0b3J5X2RldmljZSgmcmVwbyk7CisJcHMzX3NldHVwX2R5bmFtaWNfZGV2aWNlKCZyZXBvKTsKIAlyZXR1cm47CiB9CiAKQEAgLTkwNSw4ICs5MjAsNyBAQAogCiAJcHMzX3JlZ2lzdGVyX2dyYXBoaWNzX2RldmljZXMoKTsKIAotCXBzM19yZXBvc2l0b3J5X2ZpbmRfZGV2aWNlcyhQUzNfQlVTX1RZUEVfU0IsCi0JCXBzM19yZWdpc3Rlcl9yZXBvc2l0b3J5X2RldmljZSk7CisJcHMzX3JlcG9zaXRvcnlfZmluZF9kZXZpY2VzKFBTM19CVVNfVFlQRV9TQiwgcHMzX3NldHVwX3N0YXRpY19kZXZpY2UpOwogCiAJcHMzX3JlZ2lzdGVyX3NvdW5kX2RldmljZXMoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaHRhYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaHRhYi5jCmluZGV4IDczODJmMTkuLjFjZjkwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2h0YWIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9odGFiLmMKQEAgLTE5LDkgKzE5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3BzM2ZiLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jCmluZGV4IDNhNmRiMDQuLmExNGU1Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jCkBAIC03MDksNyArNzA5LDcgQEAKIAlhc20gdm9sYXRpbGUoImNudGx6ZCAlMCwlMSIgOiAiPXIiIChwbHVnKSA6ICJyIiAoeCkpOwogCXBsdWcgJj0gMHgzZjsKIAotCWlmICh1bmxpa2VseShwbHVnKSA9PSBOT19JUlEpIHsKKwlpZiAodW5saWtlbHkocGx1ZyA9PSBOT19JUlEpKSB7CiAJCXByX2RlYnVnKCIlczolZDogbm8gcGx1ZyBmb3VuZDogdGhyZWFkX2lkICVsdVxuIiwgX19mdW5jX18sCiAJCQlfX0xJTkVfXywgcGQtPnRocmVhZF9pZCk7CiAJCWR1bXBfYm1wKCZwZXJfY3B1KHBzM19wcml2YXRlLCAwKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYwppbmRleCA2ODkwMDQ3Li41YjNmYjJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKQEAgLTIxLDkgKzIxLDEwIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5X2hvdHBsdWcuaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9sbWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvb3MtYXJlYS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvb3MtYXJlYS5jCmluZGV4IGI5ZWEwOWQuLmM3MzM3OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMKQEAgLTI0LDggKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KIAotI2luY2x1ZGUgPGFzbS9sbWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogCiAjaW5jbHVkZSAicGxhdGZvcm0uaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMKaW5kZXggNWMyY2JiMC4uYTQxM2FiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jCkBAIC05NSw2ICs5NSwxNCBAQAogCXBzM19zeXNfbWFuYWdlcl9wb3dlcl9vZmYoKTsgLyogbmV2ZXIgcmV0dXJucyAqLwogfQogCitzdGF0aWMgdm9pZCBwczNfaGFsdCh2b2lkKQoreworCURCRygiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlzbXBfc2VuZF9zdG9wKCk7CisJcHMzX3N5c19tYW5hZ2VyX2hhbHQoKTsgLyogbmV2ZXIgcmV0dXJucyAqLworfQorCiBzdGF0aWMgdm9pZCBwczNfcGFuaWMoY2hhciAqc3RyKQogewogCURCRygiJXM6JWQgJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgc3RyKTsKQEAgLTEwNSw3ICsxMTMsOCBAQAogCXByaW50aygiICAgUGxlYXNlIHByZXNzIFBPV0VSIGJ1dHRvbi5cbiIpOwogCXByaW50aygiXG4iKTsKIAotCXdoaWxlKDEpOworCXdoaWxlKDEpCisJCWx2MV9wYXVzZSgxKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BTMykgfHwgZGVmaW5lZChDT05GSUdfRkJfUFMzX01PRFVMRSkgfHwgXApAQCAtMTE3LDcgKzEyNiw3IEBACiAKIAlwLT5hZGRyZXNzID0gX19hbGxvY19ib290bWVtKHAtPnNpemUsIHAtPmFsaWduLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogCWlmICghcC0+YWRkcmVzcykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlICVzXG4iLCBfX2Z1bmNfXywKIAkJICAgICAgIHAtPm5hbWUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjY2LDYgKzI3NSw3IEBACiAJLnByb2dyZXNzCQkJPSBwczNfcHJvZ3Jlc3MsCiAJLnJlc3RhcnQJCQk9IHBzM19yZXN0YXJ0LAogCS5wb3dlcl9vZmYJCQk9IHBzM19wb3dlcl9vZmYsCisJLmhhbHQJCQkJPSBwczNfaGFsdCwKICNpZiBkZWZpbmVkKENPTkZJR19LRVhFQykKIAkua2V4ZWNfY3B1X2Rvd24JCQk9IHBzM19rZXhlY19jcHVfZG93biwKIAkubWFjaGluZV9rZXhlYwkJCT0gZGVmYXVsdF9tYWNoaW5lX2tleGVjLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3B1LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zcHUuYwppbmRleCA1YWQ0MTE4Li5kMTM1Y2VmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zcHUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zcHUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9zcHUuaD4KICNpbmNsdWRlIDxhc20vc3B1X3ByaXYxLmg+CiAjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KKyNpbmNsdWRlIDxhc20vcHMzLmg+CiAKICNpbmNsdWRlICIuLi9jZWxsL3NwdWZzL3NwdWZzLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0uaCIKQEAgLTE0MCw2ICsxNDEsMTIgQEAKIAlwcl9kZWJ1ZygiJXM6JWQ6IHNoYWRvdzogICVseGhcbiIsIGZ1bmMsIGxpbmUsIHNoYWRvdyk7CiB9CiAKK2lubGluZSB1NjQgcHMzX2dldF9zcGVfaWQodm9pZCAqYXJnKQoreworCXJldHVybiBzcHVfcGRhdGEoYXJnKS0+c3BlX2lkOworfQorRVhQT1JUX1NZTUJPTF9HUEwocHMzX2dldF9zcGVfaWQpOworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdmFzX2lkKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBpZDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCA5OTJiYTY3Li5iZGFlMDRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC0xOCwzICsxOCw0IEBACiBvYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y29uc29sZS5vCiBvYmotJChDT05GSUdfSFZDUykJCSs9IGh2Y3NlcnZlci5vCiBvYmotJChDT05GSUdfSENBTExfU1RBVFMpCSs9IGh2Q2FsbF9pbnN0Lm8KK29iai0kKENPTkZJR19QSFlQX0RVTVApCSs9IHBoeXBfZHVtcC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKaW5kZXggOWViNTM5ZS4uNTUwYjJmN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTk0NSw3ICs5NDUsNiBAQAogCXVuc2lnbmVkIGludCByZXRzWzNdOwogCXN0cnVjdCBlZWhfZWFybHlfZW5hYmxlX2luZm8gKmluZm8gPSBkYXRhOwogCWludCByZXQ7Ci0JY29uc3QgY2hhciAqc3RhdHVzID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAic3RhdHVzIiwgTlVMTCk7CiAJY29uc3QgdTMyICpjbGFzc19jb2RlID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiY2xhc3MtY29kZSIsIE5VTEwpOwogCWNvbnN0IHUzMiAqdmVuZG9yX2lkID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAidmVuZG9yLWlkIiwgTlVMTCk7CiAJY29uc3QgdTMyICpkZXZpY2VfaWQgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJkZXZpY2UtaWQiLCBOVUxMKTsKQEAgLTk1OSw4ICs5NTgsOCBAQAogCXBkbi0+ZWVoX2ZyZWV6ZV9jb3VudCA9IDA7CiAJcGRuLT5lZWhfZmFsc2VfcG9zaXRpdmVzID0gMDsKIAotCWlmIChzdGF0dXMgJiYgc3RybmNtcChzdGF0dXMsICJvayIsIDIpICE9IDApCi0JCXJldHVybiBOVUxMOwkvKiBpZ25vcmUgZGV2aWNlcyB3aXRoIGJhZCBzdGF0dXMgKi8KKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoZG4pKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qIElnbm9yZSBiYWQgbm9kZXMuICovCiAJaWYgKCFjbGFzc19jb2RlIHx8ICF2ZW5kb3JfaWQgfHwgIWRldmljZV9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDlhNDU1ZDQuLjkyMzVjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCisjaW5jbHVkZSAicHNlcmllcy5oIgogCiAjaWZkZWYgREVCVUdfTE9XCiAjZGVmaW5lIERCR19MT1coZm10Li4uKSBkbyB7IHVkYmdfcHJpbnRmKGZtdCk7IH0gd2hpbGUoMCkKQEAgLTIwMyw3ICsyMDQsNiBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3Rkb3V0X25vZGU7CiAJY29uc3QgdTMyICp0ZXJtbm87CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgYWRkX2NvbnNvbGU7CiAKIAkvKiBmaW5kIHRoZSBib290IGNvbnNvbGUgZnJvbSAvY2hvc2VuL3N0ZG91dCAqLwogCWlmICghb2ZfY2hvc2VuKQpAQCAtMjE5LDggKzIxOSw2IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInN0ZG91dCBub2RlIG1pc3NpbmcgJ25hbWUnIHByb3BlcnR5IVxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQkvKiBUaGUgdXNlciBoYXMgcmVxdWVzdGVkIGEgY29uc29sZSBzbyB0aGlzIGlzIGFscmVhZHkgc2V0IHVwLiAqLwotCWFkZF9jb25zb2xlID0gIXN0cnN0cihjbWRfbGluZSwgImNvbnNvbGU9Iik7CiAKIAkvKiBDaGVjayBpZiBpdCdzIGEgdmlydHVhbCB0ZXJtaW5hbCAqLwogCWlmIChzdHJuY21wKG5hbWUsICJ2dHkiLCAzKSAhPSAwKQpAQCAtMjM0LDE1ICsyMzIsMTMgQEAKIAkJdWRiZ19wdXRjID0gdWRiZ19wdXRjTFA7CiAJCXVkYmdfZ2V0YyA9IHVkYmdfZ2V0Y0xQOwogCQl1ZGJnX2dldGNfcG9sbCA9IHVkYmdfZ2V0Y19wb2xsTFA7Ci0JCWlmIChhZGRfY29uc29sZSkKLQkJCWFkZF9wcmVmZXJyZWRfY29uc29sZSgiaHZjIiwgdGVybW5vWzBdICYgMHhmZiwgTlVMTCk7CisJCWFkZF9wcmVmZXJyZWRfY29uc29sZSgiaHZjIiwgdGVybW5vWzBdICYgMHhmZiwgTlVMTCk7CiAJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzdGRvdXRfbm9kZSwgImh2dGVybS1wcm90b2NvbCIpKSB7CiAJCXZ0ZXJtbm8gPSB0ZXJtbm9bMF07CiAJCXVkYmdfcHV0YyA9IHVkYmdfaHZzaV9wdXRjOwogCQl1ZGJnX2dldGMgPSB1ZGJnX2h2c2lfZ2V0YzsKIAkJdWRiZ19nZXRjX3BvbGwgPSB1ZGJnX2h2c2lfZ2V0Y19wb2xsOwotCQlpZiAoYWRkX2NvbnNvbGUpCi0JCQlhZGRfcHJlZmVycmVkX2NvbnNvbGUoImh2c2kiLCB0ZXJtbm9bMF0gJiAweGZmLCBOVUxMKTsKKwkJYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJodnNpIiwgdGVybW5vWzBdICYgMHhmZiwgTlVMTCk7CiAJfQogb3V0OgogCW9mX25vZGVfcHV0KHN0ZG91dF9ub2RlKTsKQEAgLTUyMCw2ICs1MTYsMjAgQEAKIAlCVUdfT04obHBhcl9yYyAhPSBIX1NVQ0NFU1MpOwogfQogCitzdGF0aWMgdm9pZCBwU2VyaWVzX2xwYXJfaHB0ZV9yZW1vdmVib2x0ZWQodW5zaWduZWQgbG9uZyBlYSwKKwkJCQkJICAgaW50IHBzaXplLCBpbnQgc3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBzbG90LCB2c2lkLCB2YTsKKworCXZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoZWEsIHNzaXplKTsKKwl2YSA9IGhwdF92YShlYSwgdnNpZCwgc3NpemUpOworCisJc2xvdCA9IHBTZXJpZXNfbHBhcl9ocHRlX2ZpbmQodmEsIHBzaXplLCBzc2l6ZSk7CisJQlVHX09OKHNsb3QgPT0gLTEpOworCisJcFNlcmllc19scGFyX2hwdGVfaW52YWxpZGF0ZShzbG90LCB2YSwgcHNpemUsIHNzaXplLCAwKTsKK30KKwogLyogRmxhZyBiaXRzIGZvciBIX0JVTEtfUkVNT1ZFICovCiAjZGVmaW5lIEhCUl9SRVFVRVNUCTB4NDAwMDAwMDAwMDAwMDAwMFVMCiAjZGVmaW5lIEhCUl9SRVNQT05TRQkweDgwMDAwMDAwMDAwMDAwMDBVTApAQCAtNTk3LDYgKzYwNyw3IEBACiAJcHBjX21kLmhwdGVfdXBkYXRlYm9sdGVkcHAgPSBwU2VyaWVzX2xwYXJfaHB0ZV91cGRhdGVib2x0ZWRwcDsKIAlwcGNfbWQuaHB0ZV9pbnNlcnQJPSBwU2VyaWVzX2xwYXJfaHB0ZV9pbnNlcnQ7CiAJcHBjX21kLmhwdGVfcmVtb3ZlCT0gcFNlcmllc19scGFyX2hwdGVfcmVtb3ZlOworCXBwY19tZC5ocHRlX3JlbW92ZWJvbHRlZCA9IHBTZXJpZXNfbHBhcl9ocHRlX3JlbW92ZWJvbHRlZDsKIAlwcGNfbWQuZmx1c2hfaGFzaF9yYW5nZQk9IHBTZXJpZXNfbHBhcl9mbHVzaF9oYXNoX3JhbmdlOwogCXBwY19tZC5ocHRlX2NsZWFyX2FsbCAgID0gcFNlcmllc19scGFyX2hwdGFiX2NsZWFyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCmluZGV4IDVhNWExOWUuLjIxYTZkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKQEAgLTg4LDExICs4OCw4IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotCQkvKgotCQkgKiBTa2lwIGFscmVhZHktcHJlc2VudCBkZXZpY2VzICh3aGljaCBhcmUgb24gdGhlCi0JCSAqIGdsb2JhbCBkZXZpY2UgbGlzdC4pCi0JCSAqLwotCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5nbG9iYWxfbGlzdCkpIHsKKwkJLyogU2tpcCBhbHJlYWR5LWFkZGVkIGRldmljZXMgKi8KKwkJaWYgKCFkZXYtPmlzX2FkZGVkKSB7CiAJCQlpbnQgaTsKIAogCQkJLyogRmlsbCBkZXZpY2UgYXJjaGRhdGEgYW5kIHNldHVwIGlvbW11IHRhYmxlICovCkBAIC0xMjMsNyArMTIwLDcgQEAKIAkvKiBBZGQgdG8gY2hpbGRyZW4gb2YgUENJIGJyaWRnZSBkZXYtPmJ1cyAqLwogCWNoaWxkX2J1cyA9IHBjaV9hZGRfbmV3X2J1cyhkZXYtPmJ1cywgZGV2LCBzZWNfYnVzbm8pOwogCWlmICghY2hpbGRfYnVzKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWRkIHNlY29uZCBidXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWRkIHNlY29uZCBidXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXNwcmludGYoY2hpbGRfYnVzLT5uYW1lLCAiUENJIEJ1cyAjJTAyeCIsIGNoaWxkX2J1cy0+bnVtYmVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGJjMDEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogSHlwZXJ2aXNvci1hc3Npc3RlZCBkdW1wCisgKgorICogTGluYXMgVmVwc3RhcywgTWFuaXNoIEFodWphIDIwMDgKKyAqIENvcHlyaWdodCAyMDA4IElCTSBDb3JwLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGh5cF9kdW1wLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9ydGFzLmg+CisKKy8qIFZhcmlhYmxlcywgdXNlZCB0byBjb21tdW5pY2F0ZSBkYXRhIGJldHdlZW4gZWFybHkgYm9vdCBhbmQgbGF0ZSBib290ICovCitzdGF0aWMgc3RydWN0IHBoeXBfZHVtcCBwaHlwX2R1bXBfdmFyczsKK3N0cnVjdCBwaHlwX2R1bXAgKnBoeXBfZHVtcF9pbmZvID0gJnBoeXBfZHVtcF92YXJzOworCitzdGF0aWMgaW50IGlibV9jb25maWd1cmVfa2VybmVsX2R1bXA7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBSVEFTIGludGVyZmFjZXMgdG8gZGVjbGFyZSB0aGUgZHVtcCByZWdpb25zICovCisKK3N0cnVjdCBkdW1wX3NlY3Rpb24geworCXUzMiBkdW1wX2ZsYWdzOworCXUxNiBzb3VyY2VfdHlwZTsKKwl1MTYgZXJyb3JfZmxhZ3M7CisJdTY0IHNvdXJjZV9hZGRyZXNzOworCXU2NCBzb3VyY2VfbGVuZ3RoOworCXU2NCBsZW5ndGhfY29waWVkOworCXU2NCBkZXN0aW5hdGlvbl9hZGRyZXNzOworfTsKKworc3RydWN0IHBoeXBfZHVtcF9oZWFkZXIgeworCXUzMiB2ZXJzaW9uOworCXUxNiBudW1fb2Zfc2VjdGlvbnM7CisJdTE2IHN0YXR1czsKKworCXUzMiBmaXJzdF9vZmZzZXRfc2VjdGlvbjsKKwl1MzIgZHVtcF9kaXNrX3NlY3Rpb247CisJdTY0IGJsb2NrX251bV9kZDsKKwl1NjQgbnVtX29mX2Jsb2Nrc19kZDsKKwl1MzIgb2Zmc2V0X2RkOworCXUzMiBtYXh0aW1lX3RvX2F1dG87CisJLyogTm8gZHVtcCBkaXNrIHBhdGggc3RyaW5nIHVzZWQgKi8KKworCXN0cnVjdCBkdW1wX3NlY3Rpb24gY3B1X2RhdGE7CisJc3RydWN0IGR1bXBfc2VjdGlvbiBocHRlX2RhdGE7CisJc3RydWN0IGR1bXBfc2VjdGlvbiBrZXJuZWxfZGF0YTsKK307CisKKy8qIFRoZSBkdW1wIGhlYWRlciAqbXVzdCBiZSogaW4gbG93IG1lbW9yeSwgc28gLmJzcyBpdCAqLworc3RhdGljIHN0cnVjdCBwaHlwX2R1bXBfaGVhZGVyIHBoZHI7CisKKyNkZWZpbmUgTlVNX0RVTVBfU0VDVElPTlMJMworI2RlZmluZSBEVU1QX0hFQURFUl9WRVJTSU9OCTB4MQorI2RlZmluZSBEVU1QX1JFUVVFU1RfRkxBRwkweDEKKyNkZWZpbmUgRFVNUF9TT1VSQ0VfQ1BVCQkweDAwMDEKKyNkZWZpbmUgRFVNUF9TT1VSQ0VfSFBURQkweDAwMDIKKyNkZWZpbmUgRFVNUF9TT1VSQ0VfUk1PCQkweDAwMTEKKyNkZWZpbmUgRFVNUF9FUlJPUl9GTEFHCQkweDIwMDAKKyNkZWZpbmUgRFVNUF9UUklHR0VSRUQJCTB4NDAwMAorI2RlZmluZSBEVU1QX1BFUkZPUk1FRAkJMHg4MDAwCisKKworLyoqCisgKiBpbml0X2R1bXBfaGVhZGVyKCkgLSBpbml0aWFsaXplIHRoZSBoZWFkZXIgZGVjbGFyaW5nIGEgZHVtcAorICogUmV0dXJuczogbGVuZ3RoIG9mIGR1bXAgc2F2ZSBhcmVhLgorICoKKyAqIFdoZW4gdGhlIGh5cGVydmlzb3Igc2F2ZXMgY3Jhc2hlZCBzdGF0ZSwgaXQgbmVlZHMgdG8gcHV0CisgKiBpdCBzb21ld2hlcmUuIFRoZSBkdW1wIGhlYWRlciB0ZWxscyB0aGUgaHlwZXJ2aXNvciB3aGVyZQorICogdGhlIGRhdGEgY2FuIGJlIHNhdmVkLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbml0X2R1bXBfaGVhZGVyKHN0cnVjdCBwaHlwX2R1bXBfaGVhZGVyICpwaCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJfb2Zmc2V0ID0gMDsKKworCS8qIFNldCB1cCB0aGUgZHVtcCBoZWFkZXIgKi8KKwlwaC0+dmVyc2lvbiA9IERVTVBfSEVBREVSX1ZFUlNJT047CisJcGgtPm51bV9vZl9zZWN0aW9ucyA9IE5VTV9EVU1QX1NFQ1RJT05TOworCXBoLT5zdGF0dXMgPSAwOworCisJcGgtPmZpcnN0X29mZnNldF9zZWN0aW9uID0KKwkJKHUzMilvZmZzZXRvZihzdHJ1Y3QgcGh5cF9kdW1wX2hlYWRlciwgY3B1X2RhdGEpOworCXBoLT5kdW1wX2Rpc2tfc2VjdGlvbiA9IDA7CisJcGgtPmJsb2NrX251bV9kZCA9IDA7CisJcGgtPm51bV9vZl9ibG9ja3NfZGQgPSAwOworCXBoLT5vZmZzZXRfZGQgPSAwOworCisJcGgtPm1heHRpbWVfdG9fYXV0byA9IDA7IC8qIGRpc2FibGVkICovCisKKwkvKiBUaGUgZmlyc3QgdHdvIHNlY3Rpb25zIGFyZSBtYW5kYXRvcnkgKi8KKwlwaC0+Y3B1X2RhdGEuZHVtcF9mbGFncyA9IERVTVBfUkVRVUVTVF9GTEFHOworCXBoLT5jcHVfZGF0YS5zb3VyY2VfdHlwZSA9IERVTVBfU09VUkNFX0NQVTsKKwlwaC0+Y3B1X2RhdGEuc291cmNlX2FkZHJlc3MgPSAwOworCXBoLT5jcHVfZGF0YS5zb3VyY2VfbGVuZ3RoID0gcGh5cF9kdW1wX2luZm8tPmNwdV9zdGF0ZV9zaXplOworCXBoLT5jcHVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzID0gYWRkcl9vZmZzZXQ7CisJYWRkcl9vZmZzZXQgKz0gcGh5cF9kdW1wX2luZm8tPmNwdV9zdGF0ZV9zaXplOworCisJcGgtPmhwdGVfZGF0YS5kdW1wX2ZsYWdzID0gRFVNUF9SRVFVRVNUX0ZMQUc7CisJcGgtPmhwdGVfZGF0YS5zb3VyY2VfdHlwZSA9IERVTVBfU09VUkNFX0hQVEU7CisJcGgtPmhwdGVfZGF0YS5zb3VyY2VfYWRkcmVzcyA9IDA7CisJcGgtPmhwdGVfZGF0YS5zb3VyY2VfbGVuZ3RoID0gcGh5cF9kdW1wX2luZm8tPmhwdGVfcmVnaW9uX3NpemU7CisJcGgtPmhwdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzID0gYWRkcl9vZmZzZXQ7CisJYWRkcl9vZmZzZXQgKz0gcGh5cF9kdW1wX2luZm8tPmhwdGVfcmVnaW9uX3NpemU7CisKKwkvKiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBsb3cga2VybmVsIHJlZ2lvbiAqLworCXBoLT5rZXJuZWxfZGF0YS5kdW1wX2ZsYWdzID0gRFVNUF9SRVFVRVNUX0ZMQUc7CisJcGgtPmtlcm5lbF9kYXRhLnNvdXJjZV90eXBlID0gRFVNUF9TT1VSQ0VfUk1POworCXBoLT5rZXJuZWxfZGF0YS5zb3VyY2VfYWRkcmVzcyA9IFBIWVBfRFVNUF9STVJfU1RBUlQ7CisJcGgtPmtlcm5lbF9kYXRhLnNvdXJjZV9sZW5ndGggPSBQSFlQX0RVTVBfUk1SX0VORDsKKwlwaC0+a2VybmVsX2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyA9IGFkZHJfb2Zmc2V0OworCWFkZHJfb2Zmc2V0ICs9IHBoLT5rZXJuZWxfZGF0YS5zb3VyY2VfbGVuZ3RoOworCisJcmV0dXJuIGFkZHJfb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBwcmludF9kdW1wX2hlYWRlcihjb25zdCBzdHJ1Y3QgcGh5cF9kdW1wX2hlYWRlciAqcGgpCit7CisjaWZkZWYgREVCVUcKKwlwcmludGsoS0VSTl9JTkZPICJkdW1wIGhlYWRlcjpcbiIpOworCS8qIHNldHVwIHNvbWUgcGgtPnNlY3Rpb25zIHJlcXVpcmVkICovCisJcHJpbnRrKEtFUk5fSU5GTyAidmVyc2lvbiA9ICVkXG4iLCBwaC0+dmVyc2lvbik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2VjdGlvbnMgPSAlZFxuIiwgcGgtPm51bV9vZl9zZWN0aW9ucyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU3RhdHVzID0gMHgleFxuIiwgcGgtPnN0YXR1cyk7CisKKwkvKiBObyBwaC0+ZGlzaywgc28gYWxsIHNob3VsZCBiZSBzZXQgdG8gMCAqLworCXByaW50ayhLRVJOX0lORk8gIk9mZnNldCB0byBmaXJzdCBzZWN0aW9uIDB4JXhcbiIsCisJCXBoLT5maXJzdF9vZmZzZXRfc2VjdGlvbik7CisJcHJpbnRrKEtFUk5fSU5GTyAiZHVtcCBkaXNrIHNlY3Rpb25zIHNob3VsZCBiZSB6ZXJvXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJkdW1wIGRpc2sgc2VjdGlvbiA9ICVkXG4iLCBwaC0+ZHVtcF9kaXNrX3NlY3Rpb24pOworCXByaW50ayhLRVJOX0lORk8gImJsb2NrIG51bSA9ICVsZFxuIiwgcGgtPmJsb2NrX251bV9kZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAibnVtYmVyIG9mIGJsb2NrcyA9ICVsZFxuIiwgcGgtPm51bV9vZl9ibG9ja3NfZGQpOworCXByaW50ayhLRVJOX0lORk8gImR1bXAgZGlzayBvZmZzZXQgPSAlZFxuIiwgcGgtPm9mZnNldF9kZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTWF4IGF1dG8gdGltZT0gJWRcbiIsIHBoLT5tYXh0aW1lX3RvX2F1dG8pOworCisJLypzZXQgY3B1IHN0YXRlIGFuZCBocHRlIHN0YXRlcyBhcyB3ZWxsIHNjcmF0Y2ggcGFkIGFyZWEgKi8KKwlwcmludGsoS0VSTl9JTkZPICIgQ1BVIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJjcHUgZHVtcF9mbGFncyA9JWRcbiIsIHBoLT5jcHVfZGF0YS5kdW1wX2ZsYWdzKTsKKwlwcmludGsoS0VSTl9JTkZPICJjcHUgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuc291cmNlX3R5cGUpOworCXByaW50ayhLRVJOX0lORk8gImNwdSBlcnJvcl9mbGFncyA9JWRcbiIsIHBoLT5jcHVfZGF0YS5lcnJvcl9mbGFncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IHNvdXJjZV9hZGRyZXNzID0lbHhcbiIsCisJCXBoLT5jcHVfZGF0YS5zb3VyY2VfYWRkcmVzcyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IHNvdXJjZV9sZW5ndGggPSVseFxuIiwKKwkJcGgtPmNwdV9kYXRhLnNvdXJjZV9sZW5ndGgpOworCXByaW50ayhLRVJOX0lORk8gImNwdSBsZW5ndGhfY29waWVkID0lbHhcbiIsCisJCXBoLT5jcHVfZGF0YS5sZW5ndGhfY29waWVkKTsKKworCXByaW50ayhLRVJOX0lORk8gIiBIUFRFIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJIUFRFIGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLmR1bXBfZmxhZ3MpOworCXByaW50ayhLRVJOX0lORk8gIkhQVEUgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLnNvdXJjZV90eXBlKTsKKwlwcmludGsoS0VSTl9JTkZPICJIUFRFIGVycm9yX2ZsYWdzID0lZFxuIiwgcGgtPmhwdGVfZGF0YS5lcnJvcl9mbGFncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiSFBURSBzb3VyY2VfYWRkcmVzcyA9JWx4XG4iLAorCQlwaC0+aHB0ZV9kYXRhLnNvdXJjZV9hZGRyZXNzKTsKKwlwcmludGsoS0VSTl9JTkZPICJIUFRFIHNvdXJjZV9sZW5ndGggPSVseFxuIiwKKwkJcGgtPmhwdGVfZGF0YS5zb3VyY2VfbGVuZ3RoKTsKKwlwcmludGsoS0VSTl9JTkZPICJIUFRFIGxlbmd0aF9jb3BpZWQgPSVseFxuIiwKKwkJcGgtPmhwdGVfZGF0YS5sZW5ndGhfY29waWVkKTsKKworCXByaW50ayhLRVJOX0lORk8gIiBTUlNEIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJTUlNEIGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuZHVtcF9mbGFncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBzb3VyY2VfdHlwZSA9JWRcbiIsIHBoLT5rZXJuZWxfZGF0YS5zb3VyY2VfdHlwZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBlcnJvcl9mbGFncyA9JWRcbiIsIHBoLT5rZXJuZWxfZGF0YS5lcnJvcl9mbGFncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBzb3VyY2VfYWRkcmVzcyA9JWx4XG4iLAorCQlwaC0+a2VybmVsX2RhdGEuc291cmNlX2FkZHJlc3MpOworCXByaW50ayhLRVJOX0lORk8gIlNSU0Qgc291cmNlX2xlbmd0aCA9JWx4XG4iLAorCQlwaC0+a2VybmVsX2RhdGEuc291cmNlX2xlbmd0aCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBsZW5ndGhfY29waWVkID0lbHhcbiIsCisJCXBoLT5rZXJuZWxfZGF0YS5sZW5ndGhfY29waWVkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3BoeXBfZHVtcF9hY3RpdmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKworCS8qIGNyZWF0ZSBmaWxlc3lzdGVtIGVudHJ5IHNvIGtkdW1wIGlzIHBoeXAtZHVtcCBhd2FyZSAqLworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgcGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9hdF9ib290KTsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwZGwgPSBfX0FUVFIocGh5cF9kdW1wX2FjdGl2ZSwgMDYwMCwKKwkJCQkJc2hvd19waHlwX2R1bXBfYWN0aXZlLAorCQkJCQlOVUxMKTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfZHVtcF9hcmVhKHN0cnVjdCBwaHlwX2R1bXBfaGVhZGVyICpwaCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCByYzsKKworCS8qIEFkZCBhZGRyIHZhbHVlIGlmIG5vdCBpbml0aWFsaXplZCBiZWZvcmUgKi8KKwlpZiAocGgtPmNwdV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgPT0gMCkgeworCQlwaC0+Y3B1X2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyArPSBhZGRyOworCQlwaC0+aHB0ZV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgKz0gYWRkcjsKKwkJcGgtPmtlcm5lbF9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgKz0gYWRkcjsKKwl9CisKKwkvKiBUb0RvIEludmFsaWRhdGUga2R1bXAgYW5kIGZyZWUgbWVtb3J5IHJhbmdlLiAqLworCisJZG8geworCQlyYyA9IHJ0YXNfY2FsbChpYm1fY29uZmlndXJlX2tlcm5lbF9kdW1wLCAzLCAxLCBOVUxMLAorCQkJCTEsIHBoLCBzaXplb2Yoc3RydWN0IHBoeXBfZHVtcF9oZWFkZXIpKTsKKwl9IHdoaWxlIChydGFzX2J1c3lfZGVsYXkocmMpKTsKKworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgInBoeXAtZHVtcDogdW5leHBlY3RlZCBlcnJvciAoJWQpIG9uICIKKwkJCQkJCSJyZWdpc3RlclxuIiwgcmMpOworCQlwcmludF9kdW1wX2hlYWRlcihwaCk7CisJCXJldHVybjsKKwl9CisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9maWxlKGtlcm5lbF9rb2JqLCAmcGRsLmF0dHIpOworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fRVJSICJwaHlwLWR1bXA6IHVuYWJsZSB0byBjcmVhdGUgc3lzZnMiCisJCQkJIiBmaWxlICglZClcbiIsIHJjKTsKK30KKworc3RhdGljCit2b2lkIGludmFsaWRhdGVfbGFzdF9kdW1wKHN0cnVjdCBwaHlwX2R1bXBfaGVhZGVyICpwaCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCByYzsKKworCS8qIEFkZCBhZGRyIHZhbHVlIGlmIG5vdCBpbml0aWFsaXplZCBiZWZvcmUgKi8KKwlpZiAocGgtPmNwdV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgPT0gMCkgeworCQlwaC0+Y3B1X2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcyArPSBhZGRyOworCQlwaC0+aHB0ZV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgKz0gYWRkcjsKKwkJcGgtPmtlcm5lbF9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MgKz0gYWRkcjsKKwl9CisKKwlkbyB7CisJCXJjID0gcnRhc19jYWxsKGlibV9jb25maWd1cmVfa2VybmVsX2R1bXAsIDMsIDEsIE5VTEwsCisJCQkJMiwgcGgsIHNpemVvZihzdHJ1Y3QgcGh5cF9kdW1wX2hlYWRlcikpOworCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyYykpOworCisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGh5cC1kdW1wOiB1bmV4cGVjdGVkIGVycm9yICglZCkgIgorCQkJCQkJIm9uIGludmFsaWRhdGVcbiIsIHJjKTsKKwkJcHJpbnRfZHVtcF9oZWFkZXIocGgpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoqCisgKiByZWxlYXNlX21lbW9yeV9yYW5nZSAtLSByZWxlYXNlIG1lbW9yeSBwcmV2aW91c2x5IGxtYl9yZXNlcnZlZAorICogQHN0YXJ0X3Bmbjogc3RhcnRpbmcgcGh5c2ljYWwgZnJhbWUgbnVtYmVyCisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIHJlbGVhc2UgbWVtb3J5IHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICogbG1iX3Jlc2VydmVkIGluIGVhcmx5IGJvb3QuIFRoZSByZWxlYXNlZCBtZW1vcnkgYmVjb21lcworICogYXZhaWxhYmxlIGZvciBnZW5yZWFsIHVzZS4KKyAqLworc3RhdGljIHZvaWQgcmVsZWFzZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCXN0cnVjdCBwYWdlICpycGFnZTsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm47CisJbG9uZyBpOworCisJZW5kX3BmbiA9IHN0YXJ0X3BmbiArIG5yX3BhZ2VzOworCisJZm9yIChpID0gc3RhcnRfcGZuOyBpIDw9IGVuZF9wZm47IGkrKykgeworCQlycGFnZSA9IHBmbl90b19wYWdlKGkpOworCQlpZiAoUGFnZVJlc2VydmVkKHJwYWdlKSkgeworCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocnBhZ2UpOworCQkJaW5pdF9wYWdlX2NvdW50KHJwYWdlKTsKKwkJCV9fZnJlZV9wYWdlKHJwYWdlKTsKKwkJCXRvdGFscmFtX3BhZ2VzKys7CisJCX0KKwl9Cit9CisKKy8qKgorICogdHJhY2tfZnJlZWRfcmFuZ2UgLS0gQ291bnRzIHRoZSByYW5nZSBiZWluZyBmcmVlZC4KKyAqIE9uY2UgdGhlIGNvdW50ZXIgZ29lcyB0byB6ZXJvLCBpdCByZS1yZWdpc3RlcnMgZHVtcCBmb3IKKyAqIGZ1dHVyZSB1c2UuCisgKi8KK3N0YXRpYyB2b2lkCit0cmFja19mcmVlZF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIHNjcmF0Y2hfYXJlYV9zaXplLCByZXNlcnZlZF9hcmVhX3NpemU7CisKKwlpZiAoYWRkciA8IHBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc3RhcnQpCisJCXJldHVybjsKKworCWlmICgoYWRkciA+PSBwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0KSAmJgorCSAgICAoYWRkciA8PSBwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ICsKKwkgICAgIHBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc2l6ZSkpCisJCXJlc2VydmVkX2FyZWFfc2l6ZSArPSBsZW5ndGg7CisKKwlpZiAoKGFkZHIgPj0gcGh5cF9kdW1wX2luZm8tPnJlc2VydmVkX3NjcmF0Y2hfYWRkcikgJiYKKwkgICAgKGFkZHIgPD0gcGh5cF9kdW1wX2luZm8tPnJlc2VydmVkX3NjcmF0Y2hfYWRkciArCisJICAgICBwaHlwX2R1bXBfaW5mby0+cmVzZXJ2ZWRfc2NyYXRjaF9zaXplKSkKKwkJc2NyYXRjaF9hcmVhX3NpemUgKz0gbGVuZ3RoOworCisJaWYgKChyZXNlcnZlZF9hcmVhX3NpemUgPT0gcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zaXplKSAmJgorCSAgICAoc2NyYXRjaF9hcmVhX3NpemUgPT0gcGh5cF9kdW1wX2luZm8tPnJlc2VydmVkX3NjcmF0Y2hfc2l6ZSkpIHsKKworCQlpbnZhbGlkYXRlX2xhc3RfZHVtcCgmcGhkciwKKwkJCQlwaHlwX2R1bXBfaW5mby0+cmVzZXJ2ZWRfc2NyYXRjaF9hZGRyKTsKKwkJcmVnaXN0ZXJfZHVtcF9hcmVhKCZwaGRyLAorCQkJCXBoeXBfZHVtcF9pbmZvLT5yZXNlcnZlZF9zY3JhdGNoX2FkZHIpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoqCisgKiBzeXNmc19yZWxlYXNlX3JlZ2lvbiAtLSBzeXNmcyBpbnRlcmZhY2UgdG8gcmVsZWFzZSBtZW1vcnkgcmFuZ2UuCisgKgorICogVXNhZ2U6CisgKiAgICJlY2hvIDxzdGFydCBhZGRyPiA8bGVuZ3RoPiA+IC9zeXMva2VybmVsL3JlbGVhc2VfcmVnaW9uIgorICoKKyAqIEV4YW1wbGU6CisgKiAgICJlY2hvIDB4NDAwMDAwMDAgMHgxMDAwMDAwMCA+IC9zeXMva2VybmVsL3JlbGVhc2VfcmVnaW9uIgorICoKKyAqIHdpbGwgcmVsZWFzZSAyNTZNQiBzdGFydGluZyBhdCAxR0IuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3JlbGVhc2VfcmVnaW9uKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsIGxlbmd0aCwgZW5kX2FkZHI7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG5yX3BhZ2VzOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiVseCAlbHgiLCAmc3RhcnRfYWRkciwgJmxlbmd0aCk7CisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRyYWNrX2ZyZWVkX3JhbmdlKHN0YXJ0X2FkZHIsIGxlbmd0aCk7CisKKwkvKiBSYW5nZS1jaGVjayAtIGRvbid0IGZyZWUgYW55IHJlc2VydmVkIG1lbW9yeSB0aGF0CisJICogd2Fzbid0IHJlc2VydmVkIGZvciBwaHlwLWR1bXAgKi8KKwlpZiAoc3RhcnRfYWRkciA8IHBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc3RhcnQpCisJCXN0YXJ0X2FkZHIgPSBwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0OworCisJZW5kX2FkZHIgPSBwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ICsKKwkJCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc2l6ZTsKKwlpZiAoc3RhcnRfYWRkcitsZW5ndGggPiBlbmRfYWRkcikKKwkJbGVuZ3RoID0gZW5kX2FkZHIgLSBzdGFydF9hZGRyOworCisJLyogUmVsZWFzZSB0aGUgcmVnaW9uIG9mIG1lbW9yeSBhc3NlZCBpbiBieSB1c2VyICovCisJc3RhcnRfcGZuID0gUEZOX0RPV04oc3RhcnRfYWRkcik7CisJbnJfcGFnZXMgPSBQRk5fRE9XTihsZW5ndGgpOworCXJlbGVhc2VfbWVtb3J5X3JhbmdlKHN0YXJ0X3BmbiwgbnJfcGFnZXMpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3JlbGVhc2VfcmVnaW9uKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJdTY0IHNlY29uZF9hZGRyX3JhbmdlOworCisJLyogdG90YWwgcmVzZXJ2ZWQgc2l6ZSAtIHN0YXJ0IG9mIHNjcmF0Y2ggYXJlYSAqLworCXNlY29uZF9hZGRyX3JhbmdlID0gcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zaXplIC0KKwkJCQlwaHlwX2R1bXBfaW5mby0+cmVzZXJ2ZWRfc2NyYXRjaF9zaXplOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIkNQVToweCVseC0weCVseDogSFBURToweCVseC0weCVseDoiCisJCQkgICAgIiBEVU1QOjB4JWx4LTB4JWx4LCAweCVseC0weCVseDpcbiIsCisJCXBoZHIuY3B1X2RhdGEuZGVzdGluYXRpb25fYWRkcmVzcywKKwkJcGhkci5jcHVfZGF0YS5sZW5ndGhfY29waWVkLAorCQlwaGRyLmhwdGVfZGF0YS5kZXN0aW5hdGlvbl9hZGRyZXNzLAorCQlwaGRyLmhwdGVfZGF0YS5sZW5ndGhfY29waWVkLAorCQlwaGRyLmtlcm5lbF9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3MsCisJCXBoZHIua2VybmVsX2RhdGEubGVuZ3RoX2NvcGllZCwKKwkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zdGFydCwKKwkJc2Vjb25kX2FkZHJfcmFuZ2UpOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHJyID0gX19BVFRSKHJlbGVhc2VfcmVnaW9uLCAwNjAwLAorCQkJCQlzaG93X3JlbGVhc2VfcmVnaW9uLAorCQkJCQlzdG9yZV9yZWxlYXNlX3JlZ2lvbik7CisKK3N0YXRpYyBpbnQgX19pbml0IHBoeXBfZHVtcF9zZXR1cCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcnRhczsKKwljb25zdCBzdHJ1Y3QgcGh5cF9kdW1wX2hlYWRlciAqZHVtcF9oZWFkZXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZHVtcF9hcmVhX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgZHVtcF9hcmVhX2xlbmd0aDsKKwlpbnQgaGVhZGVyX2xlbiA9IDA7CisJaW50IHJjOworCisJLyogSWYgbm8gbWVtb3J5IHdhcyByZXNlcnZlZCBpbiBlYXJseSBib290LCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvICovCisJaWYgKHBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIFJldHVybiBpZiBwaHlwIGR1bXAgbm90IHN1cHBvcnRlZCAqLworCWlmICghcGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9jb25maWd1cmVkKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCS8qIElzIHRoZXJlIGR1bXAgZGF0YSB3YWl0aW5nIGZvciB1cz8gSWYgdGhlcmUgaXNuJ3QsCisJICogdGhlbiByZWdpc3RlciBhIG5ldyBkdW1wIGFyZWEsIGFuZCByZWxlYXNlIGFsbCBvZgorCSAqIHRoZSByZXN0IG9mIHRoZSByZXNlcnZlZCByYW0uCisJICoKKwkgKiBUaGUgL3J0YXMvaWJtLGtlcm5lbC1kdW1wIHJ0YXMgbm9kZSBpcyBwcmVzZW50IG9ubHkKKwkgKiBpZiB0aGVyZSBpcyBkdW1wIGRhdGEgd2FpdGluZyBmb3IgdXMuCisJICovCisJcnRhcyA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvcnRhcyIpOworCWlmIChydGFzKSB7CisJCWR1bXBfaGVhZGVyID0gb2ZfZ2V0X3Byb3BlcnR5KHJ0YXMsICJpYm0sa2VybmVsLWR1bXAiLAorCQkJCQkJJmhlYWRlcl9sZW4pOworCQlvZl9ub2RlX3B1dChydGFzKTsKKwl9CisKKwlwcmludF9kdW1wX2hlYWRlcihkdW1wX2hlYWRlcik7CisJZHVtcF9hcmVhX2xlbmd0aCA9IGluaXRfZHVtcF9oZWFkZXIoJnBoZHIpOworCS8qIGFsaWduIGRvd24gKi8KKwlkdW1wX2FyZWFfc3RhcnQgPSBwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ICYgUEFHRV9NQVNLOworCisJaWYgKGR1bXBfaGVhZGVyID09IE5VTEwpIHsKKwkJcmVnaXN0ZXJfZHVtcF9hcmVhKCZwaGRyLCBkdW1wX2FyZWFfc3RhcnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiByZS1yZWdpc3RlciB0aGUgZHVtcCBhcmVhLCBpZiBvbGQgZHVtcCB3YXMgaW52YWxpZCAqLworCWlmICgoZHVtcF9oZWFkZXIpICYmIChkdW1wX2hlYWRlci0+c3RhdHVzICYgRFVNUF9FUlJPUl9GTEFHKSkgeworCQlpbnZhbGlkYXRlX2xhc3RfZHVtcCgmcGhkciwgZHVtcF9hcmVhX3N0YXJ0KTsKKwkJcmVnaXN0ZXJfZHVtcF9hcmVhKCZwaGRyLCBkdW1wX2FyZWFfc3RhcnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZHVtcF9oZWFkZXIpIHsKKwkJcGh5cF9kdW1wX2luZm8tPnJlc2VydmVkX3NjcmF0Y2hfYWRkciA9CisJCQkJZHVtcF9oZWFkZXItPmNwdV9kYXRhLmRlc3RpbmF0aW9uX2FkZHJlc3M7CisJCXBoeXBfZHVtcF9pbmZvLT5yZXNlcnZlZF9zY3JhdGNoX3NpemUgPQorCQkJCWR1bXBfaGVhZGVyLT5jcHVfZGF0YS5zb3VyY2VfbGVuZ3RoICsKKwkJCQlkdW1wX2hlYWRlci0+aHB0ZV9kYXRhLnNvdXJjZV9sZW5ndGggKworCQkJCWR1bXBfaGVhZGVyLT5rZXJuZWxfZGF0YS5zb3VyY2VfbGVuZ3RoOworCX0KKworCS8qIFNob3VsZCB3ZSBjcmVhdGUgYSBkdW1wX3N1YnN5cywgYW5hbG9nb3VzIHRvIHMzOTAvaXBsLmMgPyAqLworCXJjID0gc3lzZnNfY3JlYXRlX2ZpbGUoa2VybmVsX2tvYmosICZyci5hdHRyKTsKKwlpZiAocmMpCisJCXByaW50ayhLRVJOX0VSUiAicGh5cC1kdW1wOiB1bmFibGUgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgKCVkKVxuIiwKKwkJCQkJCQkJCXJjKTsKKworCS8qIFRvRG86IHJlLXJlZ2lzdGVyIHRoZSBkdW1wIGFyZWEsIGZvciBuZXh0IHRpbWUuICovCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX3N1YnN5c19pbml0Y2FsbChwc2VyaWVzLCBwaHlwX2R1bXBfc2V0dXApOworCitpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9waHlwX2R1bXAodW5zaWduZWQgbG9uZyBub2RlLAorCQljb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQoreworCWNvbnN0IHVuc2lnbmVkIGludCAqc2l6ZXM7CisKKwlwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2NvbmZpZ3VyZWQgPSAwOworCXBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfaXNfYWN0aXZlID0gMDsKKworCWlmIChkZXB0aCAhPSAxIHx8IHN0cmNtcCh1bmFtZSwgInJ0YXMiKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sY29uZmlndXJlLWtlcm5lbC1kdW1wIiwgTlVMTCkpCisJCXBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfY29uZmlndXJlZCsrOworCisJaWYgKG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxkdW1wLWtlcm5lbCIsIE5VTEwpKQorCQlwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2lzX2FjdGl2ZSsrOworCisJc2l6ZXMgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sY29uZmlndXJlLWtlcm5lbC1kdW1wLXNpemVzIiwKKwkJCQkgICAgTlVMTCk7CisJaWYgKCFzaXplcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2l6ZXNbMF0gPT0gMSkKKwkJcGh5cF9kdW1wX2luZm8tPmNwdV9zdGF0ZV9zaXplID0gKigodW5zaWduZWQgbG9uZyAqKSZzaXplc1sxXSk7CisKKwlpZiAoc2l6ZXNbM10gPT0gMikKKwkJcGh5cF9kdW1wX2luZm8tPmhwdGVfcmVnaW9uX3NpemUgPQorCQkJCQkJKigodW5zaWduZWQgbG9uZyAqKSZzaXplc1s0XSk7CisJcmV0dXJuIDE7Cit9CisKKy8qIExvb2sgZm9yIHBoeXBfZHVtcD0gY21kbGluZSBvcHRpb24gKi8KK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BoeXBfZHVtcF9lbmFibGVkKGNoYXIgKnApCit7CisJcGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9hdF9ib290ID0gMTsKKworICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKHN0cm5jbXAocCwgIjEiLCAxKSA9PSAwKQorCQlwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2F0X2Jvb3QgPSAxOworICAgICAgICBlbHNlIGlmIChzdHJuY21wKHAsICIwIiwgMSkgPT0gMCkKKwkJcGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9hdF9ib290ID0gMDsKKworICAgICAgICByZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJwaHlwX2R1bXAiLCBlYXJseV9waHlwX2R1bXBfZW5hYmxlZCk7CisKKy8qIExvb2sgZm9yIHBoeXBfZHVtcF9yZXNlcnZlX3NpemU9IGNtZGxpbmUgb3B0aW9uICovCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9waHlwX2R1bXBfcmVzZXJ2ZV9zaXplKGNoYXIgKnApCit7CisgICAgICAgIGlmIChwKQorCQlwaHlwX2R1bXBfaW5mby0+cmVzZXJ2ZV9ib290dmFyID0gbWVtcGFyc2UocCwgJnApOworCisgICAgICAgIHJldHVybiAwOworfQorZWFybHlfcGFyYW0oInBoeXBfZHVtcF9yZXNlcnZlX3NpemUiLCBlYXJseV9waHlwX2R1bXBfcmVzZXJ2ZV9zaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wb3dlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Bvd2VyLmMKaW5kZXggZTk1ZmMxNS4uNmQ2MjY2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Bvd2VyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Bvd2VyLmMKQEAgLTc1LDcgKzc1LDcgQEAKICNlbHNlCiBzdGF0aWMgaW50IF9faW5pdCBhcG9fcG1faW5pdCh2b2lkKQogewotCXJldHVybiAoc3lzZnNfY3JlYXRlX2ZpbGUocG93ZXJfa29iaiwgJmF1dG9fcG93ZXJvbl9hdHRyKSk7CisJcmV0dXJuIChzeXNmc19jcmVhdGVfZmlsZShwb3dlcl9rb2JqLCAmYXV0b19wb3dlcm9uX2F0dHIuYXR0cikpOwogfQogX19pbml0Y2FsbChhcG9fcG1faW5pdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wc2VyaWVzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcHNlcmllcy5oCmluZGV4IDYxMTM2ZDAuLjllMTdjMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wc2VyaWVzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BzZXJpZXMuaApAQCAtMzgsNCArMzgsNiBAQAogLyogUG93ZXJvbiBmbGFnIHVzZWQgZm9yIGVuYWJsaW5nIGF1dG8gdXBzIHJlc3RhcnQgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHJ0YXNfcG93ZXJvbl9hdXRvOwogCitleHRlcm4gdm9pZCBmaW5kX3VkYmdfdnRlcm0odm9pZCk7CisKICNlbmRpZiAvKiBfUFNFUklFU19QU0VSSUVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggMjgwMGZjZS4uYWM3NWMxMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTIyMiwxNCArMjIyLDE0IEBACiAJdG1wID0gc3RyY2hyKGJ1ZiwgJyAnKTsKIAlpZiAoIXRtcCkgewogCQlwcmludGsoS0VSTl9FUlIgInByb3BlcnR5IHBhcnNlIGZhaWxlZCBpbiAlcyBhdCBsaW5lICVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJKnRtcCA9ICdcMCc7CiAKIAlpZiAoKyt0bXAgPj0gZW5kKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicHJvcGVydHkgcGFyc2UgZmFpbGVkIGluICVzIGF0IGxpbmUgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjM4LDEyICsyMzgsMTIgQEAKIAkqbGVuZ3RoID0gc2ltcGxlX3N0cnRvdWwodG1wLCAmdG1wLCAxMCk7CiAJaWYgKCpsZW5ndGggPT0gLTEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwcm9wZXJ0eSBwYXJzZSBmYWlsZWQgaW4gJXMgYXQgbGluZSAlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWlmICgqdG1wICE9ICcgJyB8fCArK3RtcCA+PSBlbmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwcm9wZXJ0eSBwYXJzZSBmYWlsZWQgaW4gJXMgYXQgbGluZSAlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yNTIsMTIgKzI1MiwxMiBAQAogCXRtcCArPSAqbGVuZ3RoOwogCWlmICh0bXAgPiBlbmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwcm9wZXJ0eSBwYXJzZSBmYWlsZWQgaW4gJXMgYXQgbGluZSAlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWVsc2UgaWYgKHRtcCA8IGVuZCAmJiAqdG1wICE9ICcgJyAmJiAqdG1wICE9ICdcMCcpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwcm9wZXJ0eSBwYXJzZSBmYWlsZWQgaW4gJXMgYXQgbGluZSAlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXRtcCsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NjYW5sb2cuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMKaW5kZXggOGUxZWYxNi4uZTViMGVhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NjYW5sb2cuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2NhbmxvZy5jCkBAIC0xOTUsMzEgKzE5NSwzMCBAQAogc3RhdGljIGludCBfX2luaXQgc2NhbmxvZ19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CisJdm9pZCAqZGF0YTsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlibV9zY2FuX2xvZ19kdW1wID0gcnRhc190b2tlbigiaWJtLHNjYW4tbG9nLWR1bXAiKTsKLQlpZiAoaWJtX3NjYW5fbG9nX2R1bXAgPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzY2FuLWxvZy1kdW1wIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHN5c3RlbVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlpZiAoaWJtX3NjYW5fbG9nX2R1bXAgPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCisJCXJldHVybiAtRU5PREVWOwogCi0gICAgICAgIGVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwcGM2NC9ydGFzL3NjYW4tbG9nLWR1bXAiLCAgU19JUlVTUiwgTlVMTCk7Ci0JaWYgKGVudCkgewotCQllbnQtPnByb2NfZm9wcyA9ICZzY2FubG9nX2ZvcHM7Ci0JCS8qIElkZWFsbHkgd2UgY291bGQgYWxsb2NhdGUgYSBidWZmZXIgPCA0RyAqLwotCQllbnQtPmRhdGEgPSBrbWFsbG9jKFJUQVNfREFUQV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZW50LT5kYXRhKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlclxuIik7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeSgic2Nhbi1sb2ctZHVtcCIsIGVudC0+cGFyZW50KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCSgodW5zaWduZWQgaW50ICopZW50LT5kYXRhKVswXSA9IDA7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRlIHBwYzY0L3NjYW4tbG9nLWR1bXAgcHJvYyBlbnRyeVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KKwkvKiBJZGVhbGx5IHdlIGNvdWxkIGFsbG9jYXRlIGEgYnVmZmVyIDwgNEcgKi8KKwlkYXRhID0ga3phbGxvYyhSVEFTX0RBVEFfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJZ290byBlcnI7CisKKwllbnQgPSBwcm9jX2NyZWF0ZSgicHBjNjQvcnRhcy9zY2FuLWxvZy1kdW1wIiwgU19JUlVTUiwgTlVMTCwKKwkJCSAgJnNjYW5sb2dfZm9wcyk7CisJaWYgKCFlbnQpCisJCWdvdG8gZXJyOworCisJZW50LT5kYXRhID0gZGF0YTsKIAlwcm9jX3BwYzY0X3NjYW5fbG9nX2R1bXAgPSBlbnQ7CiAKIAlyZXR1cm4gMDsKK2VycjoKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2NhbmxvZ19jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IGZkYjliMWMuLmY2NmFhOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC03Niw5ICs3Niw2IEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAotLyogbW92ZSB0aG9zZSBhd2F5IHRvIGEgLmggKi8KLWV4dGVybiB2b2lkIGZpbmRfdWRiZ192dGVybSh2b2lkKTsKLQogaW50IGZ3bm1pX2FjdGl2ZTsgIC8qIFRSVUUgaWYgYW4gRldOTUkgaGFuZGxlciBpcyBwcmVzZW50ICovCiAKIHN0YXRpYyB2b2lkIHBzZXJpZXNfc2hhcmVkX2lkbGVfc2xlZXAodm9pZCk7CkBAIC0xMjcsMTQgKzEyNCw2MCBAQAogCWRlc2MtPmNoaXAtPmVvaShpcnEpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgcHNlcmllc19zZXR1cF9pODI1OV9jYXNjYWRlKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCwgKm9sZCwgKmZvdW5kID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZTsKKwljb25zdCB1MzIgKmFkZHJwOworCXVuc2lnbmVkIGxvbmcgaW50YWNrID0gMDsKKwlpbnQgbmFkZHI7CisKKwlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgeworCQkJZm91bmQgPSBucDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZvdW5kID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInBpYzogbm8gSVNBIGludGVycnVwdCBjb250cm9sbGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNhc2NhZGUgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChmb3VuZCwgMCk7CisJaWYgKGNhc2NhZGUgPT0gTk9fSVJRKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGljOiBmYWlsZWQgdG8gbWFwIGNhc2NhZGUgaW50ZXJydXB0Iik7CisJCXJldHVybjsKKwl9CisJcHJfZGVidWcoInBpYzogY2FzY2FkZSBtYXBwZWQgdG8gaXJxICVkXG4iLCBjYXNjYWRlKTsKKworCWZvciAob2xkID0gb2Zfbm9kZV9nZXQoZm91bmQpOyBvbGQgIT0gTlVMTCA7IG9sZCA9IG5wKSB7CisJCW5wID0gb2ZfZ2V0X3BhcmVudChvbGQpOworCQlvZl9ub2RlX3B1dChvbGQpOworCQlpZiAobnAgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoc3RyY21wKG5wLT5uYW1lLCAicGNpIikgIT0gMCkKKwkJCWNvbnRpbnVlOworCQlhZGRycCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwgTlVMTCk7CisJCWlmIChhZGRycCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCW5hZGRyID0gb2Zfbl9hZGRyX2NlbGxzKG5wKTsKKwkJaW50YWNrID0gYWRkcnBbbmFkZHItMV07CisJCWlmIChuYWRkciA+IDEpCisJCQlpbnRhY2sgfD0gKCh1bnNpZ25lZCBsb25nKWFkZHJwW25hZGRyLTJdKSA8PCAzMjsKKwl9CisJaWYgKGludGFjaykKKwkJcHJpbnRrKEtFUk5fREVCVUcgInBpYzogUENJIDgyNTkgaW50YWNrIGF0IDB4JTAxNmx4XG4iLCBpbnRhY2spOworCWk4MjU5X2luaXQoZm91bmQsIGludGFjayk7CisJb2Zfbm9kZV9wdXQoZm91bmQpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGUsIHBzZXJpZXNfODI1OV9jYXNjYWRlKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHBzZXJpZXNfbXBpY19pbml0X0lSUSh2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpvbGQsICpjYXNjYWRlID0gTlVMTDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICphZGRycDsKLQl1bnNpZ25lZCBsb25nIGludGFjayA9IDA7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAljb25zdCB1bnNpZ25lZCBpbnQgKm9wcHJvcDsKIAl1bnNpZ25lZCBsb25nIG9wZW5waWNfYWRkciA9IDA7Ci0JdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOwogCWludCBuYWRkciwgbiwgaSwgb3BwbGVuOwogCXN0cnVjdCBtcGljICptcGljOwogCkBAIC0xNjcsNDMgKzIxMCwxMyBAQAogCW1waWNfaW5pdChtcGljKTsKIAogCS8qIExvb2sgZm9yIGNhc2NhZGUgKi8KLQlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCi0JCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKLQkJCWNhc2NhZGUgPSBucDsKLQkJCWJyZWFrOwotCQl9Ci0JaWYgKGNhc2NhZGUgPT0gTlVMTCkKLQkJcmV0dXJuOworCXBzZXJpZXNfc2V0dXBfaTgyNTlfY2FzY2FkZSgpOworfQogCi0JY2FzY2FkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjYXNjYWRlLCAwKTsKLQlpZiAoY2FzY2FkZV9pcnEgPT0gTk9fSVJRKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXBpYzogZmFpbGVkIHRvIG1hcCBjYXNjYWRlIGludGVycnVwdCIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogQ2hlY2sgQUNLIHR5cGUgKi8KLQlmb3IgKG9sZCA9IG9mX25vZGVfZ2V0KGNhc2NhZGUpOyBvbGQgIT0gTlVMTCA7IG9sZCA9IG5wKSB7Ci0JCW5wID0gb2ZfZ2V0X3BhcmVudChvbGQpOwotCQlvZl9ub2RlX3B1dChvbGQpOwotCQlpZiAobnAgPT0gTlVMTCkKLQkJCWJyZWFrOwotCQlpZiAoc3RyY21wKG5wLT5uYW1lLCAicGNpIikgIT0gMCkKLQkJCWNvbnRpbnVlOwotCQlhZGRycCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwKLQkJCQkJICAgIE5VTEwpOwotCQlpZiAoYWRkcnAgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQluYWRkciA9IG9mX25fYWRkcl9jZWxscyhucCk7Ci0JCWludGFjayA9IGFkZHJwW25hZGRyLTFdOwotCQlpZiAobmFkZHIgPiAxKQotCQkJaW50YWNrIHw9ICgodW5zaWduZWQgbG9uZylhZGRycFtuYWRkci0yXSkgPDwgMzI7Ci0JfQotCWlmIChpbnRhY2spCi0JCXByaW50ayhLRVJOX0RFQlVHICJtcGljOiBQQ0kgODI1OSBpbnRhY2sgYXQgMHglMDE2bHhcbiIsCi0JCSAgICAgICBpbnRhY2spOwotCWk4MjU5X2luaXQoY2FzY2FkZSwgaW50YWNrKTsKLQlvZl9ub2RlX3B1dChjYXNjYWRlKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihjYXNjYWRlX2lycSwgcHNlcmllc184MjU5X2Nhc2NhZGUpOworc3RhdGljIHZvaWQgX19pbml0IHBzZXJpZXNfeGljc19pbml0X0lSUSh2b2lkKQoreworCXhpY3NfaW5pdF9JUlEoKTsKKwlwc2VyaWVzX3NldHVwX2k4MjU5X2Nhc2NhZGUoKTsKIH0KIAogc3RhdGljIHZvaWQgcHNlcmllc19scGFyX2VuYWJsZV9wbWNzKHZvaWQpCkBAIC0yMzUsNyArMjQ4LDcgQEAKIAkJCXNtcF9pbml0X3BzZXJpZXNfbXBpYygpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYgKHN0cnN0cih0eXBlcCwgInBwYy14aWNwIikpIHsKLQkJCXBwY19tZC5pbml0X0lSUSAgICAgICA9IHhpY3NfaW5pdF9JUlE7CisJCQlwcGNfbWQuaW5pdF9JUlEgICAgICAgPSBwc2VyaWVzX3hpY3NfaW5pdF9JUlE7CiAJCQlzZXR1cF9rZXhlY19jcHVfZG93bl94aWNzKCk7CiAJCQlzbXBfaW5pdF9wc2VyaWVzX3hpY3MoKTsKIAkJCXJldHVybjsKQEAgLTM5Myw2ICs0MDYsNyBAQAogeyAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfc25vb3plOworCXVuc2lnbmVkIGxvbmcgaW5fcHVyciwgb3V0X3B1cnI7CiAKIAkvKgogCSAqIEluZGljYXRlIHRvIHRoZSBIViB0aGF0IHdlIGFyZSBpZGxlLiBOb3cgd291bGQgYmUKQEAgLTQwMCw2ICs0MTQsNyBAQAogCSAqLwogCWdldF9scHBhY2EoKS0+aWRsZSA9IDE7CiAJZ2V0X2xwcGFjYSgpLT5kb25hdGVfZGVkaWNhdGVkX2NwdSA9IDE7CisJaW5fcHVyciA9IG1mc3ByKFNQUk5fUFVSUik7CiAKIAkvKgogCSAqIFdlIGNvbWUgaW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBhbmQgbmVlZF9yZXNjaGVkKCkKQEAgLTQzMiw2ICs0NDcsOCBAQAogCiBvdXQ6CiAJSE1UX21lZGl1bSgpOworCW91dF9wdXJyID0gbWZzcHIoU1BSTl9QVVJSKTsKKwlnZXRfbHBwYWNhKCktPndhaXRfc3RhdGVfY3ljbGVzICs9IG91dF9wdXJyIC0gaW5fcHVycjsKIAlnZXRfbHBwYWNhKCktPmRvbmF0ZV9kZWRpY2F0ZWRfY3B1ID0gMDsKIAlnZXRfbHBwYWNhKCktPmlkbGUgPSAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggY2E1MmI1OC4uNDNkZjUzYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC01MTYsNiArNTE2LDggQEAKIAkuc2V0X2FmZmluaXR5ID0geGljc19zZXRfYWZmaW5pdHkKIH07CiAKKy8qIFBvaW50cyB0byB0aGUgaXJxX2NoaXAgd2UncmUgYWN0dWFsbHkgdXNpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgKnhpY3NfaXJxX2NoaXA7CiAKIHN0YXRpYyBpbnQgeGljc19ob3N0X21hdGNoKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewpAQCAtNTI2LDIzICs1MjgsMTMgQEAKIAlyZXR1cm4gIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJjaHJwLGlpYyIpOwogfQogCi1zdGF0aWMgaW50IHhpY3NfaG9zdF9tYXBfZGlyZWN0KHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCi0JCQkJaXJxX2h3X251bWJlcl90IGh3KQorc3RhdGljIGludCB4aWNzX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgaXJxX2h3X251bWJlcl90IGh3KQogewotCXByX2RlYnVnKCJ4aWNzOiBtYXBfZGlyZWN0IHZpcnEgJWQsIGh3aXJxIDB4JWx4XG4iLCB2aXJxLCBodyk7CisJcHJfZGVidWcoInhpY3M6IG1hcCB2aXJxICVkLCBod2lycSAweCVseFxuIiwgdmlycSwgaHcpOwogCiAJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmeGljc19waWNfZGlyZWN0LCBoYW5kbGVfZmFzdGVvaV9pcnEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHhpY3NfaG9zdF9tYXBfbHBhcihzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAotCQkJICAgICAgaXJxX2h3X251bWJlcl90IGh3KQotewotCXByX2RlYnVnKCJ4aWNzOiBtYXBfZGlyZWN0IHZpcnEgJWQsIGh3aXJxIDB4JWx4XG4iLCB2aXJxLCBodyk7Ci0KLQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZ4aWNzX3BpY19scGFyLCBoYW5kbGVfZmFzdGVvaV9pcnEpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCB4aWNzX2lycV9jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOwogCXJldHVybiAwOwogfQogCkBAIC01NjEsMjcgKzU1MywyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyB4aWNzX2hvc3RfZGlyZWN0X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHhpY3NfaG9zdF9vcHMgPSB7CiAJLm1hdGNoID0geGljc19ob3N0X21hdGNoLAotCS5tYXAgPSB4aWNzX2hvc3RfbWFwX2RpcmVjdCwKLQkueGxhdGUgPSB4aWNzX2hvc3RfeGxhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyB4aWNzX2hvc3RfbHBhcl9vcHMgPSB7Ci0JLm1hdGNoID0geGljc19ob3N0X21hdGNoLAotCS5tYXAgPSB4aWNzX2hvc3RfbWFwX2xwYXIsCisJLm1hcCA9IHhpY3NfaG9zdF9tYXAsCiAJLnhsYXRlID0geGljc19ob3N0X3hsYXRlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHhpY3NfaW5pdF9ob3N0KHZvaWQpCiB7Ci0Jc3RydWN0IGlycV9ob3N0X29wcyAqb3BzOwotCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCW9wcyA9ICZ4aWNzX2hvc3RfbHBhcl9vcHM7CisJCXhpY3NfaXJxX2NoaXAgPSAmeGljc19waWNfbHBhcjsKIAllbHNlCi0JCW9wcyA9ICZ4aWNzX2hvc3RfZGlyZWN0X29wczsKLQl4aWNzX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChOVUxMLCBJUlFfSE9TVF9NQVBfVFJFRSwgMCwgb3BzLAorCQl4aWNzX2lycV9jaGlwID0gJnhpY3NfcGljX2RpcmVjdDsKKworCXhpY3NfaG9zdCA9IGlycV9hbGxvY19ob3N0KE5VTEwsIElSUV9IT1NUX01BUF9UUkVFLCAwLCAmeGljc19ob3N0X29wcywKIAkJCQkgICBYSUNTX0lSUV9TUFVSSU9VUyk7CiAJQlVHX09OKHhpY3NfaG9zdCA9PSBOVUxMKTsKIAlpcnFfc2V0X2RlZmF1bHRfaG9zdCh4aWNzX2hvc3QpOwpAQCAtNjU1LDUyICs2NDAsNiBAQAogCX0KIH0KIAotCi1zdGF0aWMgdm9pZCBfX2luaXQgeGljc19zZXR1cF84MjU5X2Nhc2NhZGUodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqb2xkLCAqZm91bmQgPSBOVUxMOwotCWludCBjYXNjYWRlLCBuYWRkcjsKLQljb25zdCB1MzIgKmFkZHJwOwotCXVuc2lnbmVkIGxvbmcgaW50YWNrID0gMDsKLQotCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgImludGVycnVwdC1jb250cm9sbGVyIikKLQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgewotCQkJZm91bmQgPSBucDsKLQkJCWJyZWFrOwotCQl9Ci0JaWYgKGZvdW5kID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInhpY3M6IG5vIElTQSBpbnRlcnJ1cHQgY29udHJvbGxlclxuIik7Ci0JCXJldHVybjsKLQl9Ci0JY2FzY2FkZSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGZvdW5kLCAwKTsKLQlpZiAoY2FzY2FkZSA9PSBOT19JUlEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzOiBmYWlsZWQgdG8gbWFwIGNhc2NhZGUgaW50ZXJydXB0Iik7Ci0JCXJldHVybjsKLQl9Ci0JcHJfZGVidWcoInhpY3M6IGNhc2NhZGUgbWFwcGVkIHRvIGlycSAlZFxuIiwgY2FzY2FkZSk7Ci0KLQlmb3IgKG9sZCA9IG9mX25vZGVfZ2V0KGZvdW5kKTsgb2xkICE9IE5VTEwgOyBvbGQgPSBucCkgewotCQlucCA9IG9mX2dldF9wYXJlbnQob2xkKTsKLQkJb2Zfbm9kZV9wdXQob2xkKTsKLQkJaWYgKG5wID09IE5VTEwpCi0JCQlicmVhazsKLQkJaWYgKHN0cmNtcChucC0+bmFtZSwgInBjaSIpICE9IDApCi0JCQljb250aW51ZTsKLQkJYWRkcnAgPSBvZl9nZXRfcHJvcGVydHkobnAsICI4MjU5LWludGVycnVwdC1hY2tub3dsZWRnZSIsIE5VTEwpOwotCQlpZiAoYWRkcnAgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQluYWRkciA9IG9mX25fYWRkcl9jZWxscyhucCk7Ci0JCWludGFjayA9IGFkZHJwW25hZGRyLTFdOwotCQlpZiAobmFkZHIgPiAxKQotCQkJaW50YWNrIHw9ICgodW5zaWduZWQgbG9uZylhZGRycFtuYWRkci0yXSkgPDwgMzI7Ci0JfQotCWlmIChpbnRhY2spCi0JCXByaW50ayhLRVJOX0RFQlVHICJ4aWNzOiBQQ0kgODI1OSBpbnRhY2sgYXQgMHglMDE2bHhcbiIsIGludGFjayk7Ci0JaTgyNTlfaW5pdChmb3VuZCwgaW50YWNrKTsKLQlvZl9ub2RlX3B1dChmb3VuZCk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZSwgcHNlcmllc184MjU5X2Nhc2NhZGUpOwotfQotCiB2b2lkIF9faW5pdCB4aWNzX2luaXRfSVJRKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTczMyw4ICs2NzIsNiBAQAogCiAJeGljc19zZXR1cF9jcHUoKTsKIAotCXhpY3Nfc2V0dXBfODI1OV9jYXNjYWRlKCk7Ci0KIAlwcGM2NF9ib290X21zZygweDIxLCAiWElDUyBEb25lIik7CiB9CiAKQEAgLTc2Myw3ICs3MDAsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotdm9pZCB4aWNzX3RlYXJkb3duX2NwdSgpCit2b2lkIHhpY3NfdGVhcmRvd25fY3B1KHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmgKaW5kZXggYzI2YmNmZi4uMWM1MzIxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oCkBAIC0yOCw3ICsyOCw0IEBACiAKIGV4dGVybiBzdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKIAotc3RydWN0IGlycV9kZXNjOwotZXh0ZXJuIHZvaWQgcHNlcmllc184MjU5X2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKLQogI2VuZGlmIC8qIF9QT1dFUlBDX0tFUk5FTF9YSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCmluZGV4IDE1ZjNlODUuLjZkMzg2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQAogb2JqLSQoQ09ORklHX01NSU9fTlZSQU0pCSs9IG1taW9fbnZyYW0ubwogb2JqLSQoQ09ORklHX0ZTTF9TT0MpCQkrPSBmc2xfc29jLm8KIG9iai0kKENPTkZJR19GU0xfUENJKQkJKz0gZnNsX3BjaS5vCitvYmotJChDT05GSUdfRlNMX0xCQykJCSs9IGZzbF9sYmMubwogb2JqLSQoQ09ORklHX1JBUElESU8pCQkrPSBmc2xfcmlvLm8KIG9iai0kKENPTkZJR19UU0kxMDhfQlJJREdFKQkrPSB0c2kxMDhfcGNpLm8gdHNpMTA4X2Rldi5vCiBvYmotJChDT05GSUdfUVVJQ0NfRU5HSU5FKQkrPSBxZV9saWIvCkBAIC0yNyw2ICsyOCw3IEBACiBvYmotJChDT05GSUdfUFBDX0k4MjU5KQkJKz0gaTgyNTkubwogb2JqLSQoQ09ORklHX0lQSUMpCQkrPSBpcGljLm8KIG9iai0kKENPTkZJR180eHgpCQkrPSB1aWMubworb2JqLSQoQ09ORklHXzR4eF9TT0MpCQkrPSBwcGM0eHhfc29jLm8KIG9iai0kKENPTkZJR19YSUxJTlhfVklSVEVYKQkrPSB4aWxpbnhfaW50Yy5vCiBvYmotJChDT05GSUdfT0ZfUlRDKQkJKz0gb2ZfcnRjLm8KIGlmZXEgKCQoQ09ORklHX1BDSSkseSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uYwppbmRleCBmNTg5OTk5Li42NGVjN2Q2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbS5jCkBAIC01Miw2ICs1MiwxMCBAQAogCWludCBpLCB0YXNrbnVtID0gLTE7CiAJc3RydWN0IGJjb21fdGFzayAqdHNrOwogCisJLyogRG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGlmIGJlc3Rjb21tIGluaXQgZmFpbGVkICovCisJaWYgKCFiY29tX2VuZykKKwkJcmV0dXJuIE5VTEw7CisKIAkvKiBHZXQgYW5kIHJlc2VydmUgYSB0YXNrIG51bSAqLwogCXNwaW5fbG9jaygmYmNvbV9lbmctPmxvY2spOwogCkBAIC00ODQsOCArNDg4LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9iY29tX29mX21hdGNoW10gPSB7Ci0JeyAudHlwZSA9ICJkbWEtY29udHJvbGxlciIsIC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWJlc3Rjb21tIiwgfSwKLQl7IC50eXBlID0gImRtYS1jb250cm9sbGVyIiwgLmNvbXBhdGlibGUgPSAibXBjNTIwMC1iZXN0Y29tbSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1iZXN0Y29tbSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtcGM1MjAwLWJlc3Rjb21tIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKaW5kZXggZGY4YmQyYi4uNTgyOTJhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKQEAgLTQ0LDkgKzQ0LDYgQEAKIAogI2RlZmluZSBDUE1fTUFQX1NJWkUgICAgKDB4NDAwMCkKIAotI2lmbmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORwotc3RhdGljIHZvaWQgbTh4eF9jcG1fZHBpbml0KHZvaWQpOwotI2VuZGlmCiBjcG04eHhfdCBfX2lvbWVtICpjcG1wOyAgLyogUG9pbnRlciB0byBjb21tIHByb2Nlc3NvciBzcGFjZSAqLwogaW1tYXBfdCBfX2lvbWVtICptcGM4eHhfaW1tcjsKIHN0YXRpYyBjcGljOHh4X3QgX19pb21lbSAqY3BpY19yZWc7CkBAIC0yMjksMTIgKzIyNiw3IEBACiAJb3V0X2JlMzIoJnNpdV9jb25mLT5zY19zZGNyLCAxKTsKIAlpbW1yX3VubWFwKHNpdV9jb25mKTsKIAotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCiAJY3BtX211cmFtX2luaXQoKTsKLSNlbHNlCi0JLyogUmVjbGFpbSB0aGUgRFAgbWVtb3J5IGZvciBvdXIgdXNlLiAqLwotCW04eHhfY3BtX2RwaW5pdCgpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY21kX2xvY2spOwpAQCAtMjU3LDcgKzI0OSw3IEBACiAJCWlmICgoaW5fYmUxNigmY3BtcC0+Y3BfY3BjcikgJiBDUE1fQ1JfRkxHKSA9PSAwKQogCQkJZ290byBvdXQ7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IE5vdCBhYmxlIHRvIGlzc3VlIENQTSBjb21tYW5kXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0VSUiAiJXMoKTogTm90IGFibGUgdG8gaXNzdWUgQ1BNIGNvbW1hbmRcbiIsIF9fZnVuY19fKTsKIAlyZXQgPSAtRUlPOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZF9sb2NrLCBmbGFncyk7CkBAIC0yOTMsMTEwICsyODUsNiBAQAogCQkJICAgICAgQ1BNX0JSR19FTiB8IENQTV9CUkdfRElWMTYpOwogfQogCi0jaWZuZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi0vKgotICogZHBhbGxvYyAvIGRwZnJlZSBiaXRzLgotICovCi1zdGF0aWMgc3BpbmxvY2tfdCBjcG1fZHBtZW1fbG9jazsKLS8qCi0gKiAxNiBibG9ja3Mgc2hvdWxkIGJlIGVub3VnaCB0byBzYXRpc2Z5IGFsbCByZXF1ZXN0cwotICogdW50aWwgdGhlIG1lbW9yeSBzdWJzeXN0ZW0gZ29lcyB1cC4uLgotICovCi1zdGF0aWMgcmhfYmxvY2tfdCBjcG1fYm9vdF9kcG1lbV9yaF9ibG9ja1sxNl07Ci1zdGF0aWMgcmhfaW5mb190IGNwbV9kcG1lbV9pbmZvOwotCi0jZGVmaW5lIENQTV9EUE1FTV9BTElHTk1FTlQJOAotc3RhdGljIHU4IF9faW9tZW0gKmRwcmFtX3ZiYXNlOwotc3RhdGljIHBoeXNfYWRkcl90IGRwcmFtX3BiYXNlOwotCi1zdGF0aWMgdm9pZCBtOHh4X2NwbV9kcGluaXQodm9pZCkKLXsKLQlzcGluX2xvY2tfaW5pdCgmY3BtX2RwbWVtX2xvY2spOwotCi0JZHByYW1fdmJhc2UgPSBjcG1wLT5jcF9kcG1lbTsKLQlkcHJhbV9wYmFzZSA9IGdldF9pbW1yYmFzZSgpICsgb2Zmc2V0b2YoaW1tYXBfdCwgaW1fY3BtLmNwX2RwbWVtKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIGluZm8gaGVhZGVyICovCi0JcmhfaW5pdCgmY3BtX2RwbWVtX2luZm8sIENQTV9EUE1FTV9BTElHTk1FTlQsCi0JCQlzaXplb2YoY3BtX2Jvb3RfZHBtZW1fcmhfYmxvY2spIC8KLQkJCXNpemVvZihjcG1fYm9vdF9kcG1lbV9yaF9ibG9ja1swXSksCi0JCQljcG1fYm9vdF9kcG1lbV9yaF9ibG9jayk7Ci0KLQkvKgotCSAqIEF0dGFjaCB0aGUgdXNhYmxlIGRwbWVtIGFyZWEuCi0JICogWFhYOiBUaGlzIGlzIGFjdHVhbGx5IGNyYXAuICBDUE1fREFUQU9OTFlfQkFTRSBhbmQKLQkgKiBDUE1fREFUQU9OTFlfU0laRSBhcmUgYSBzdWJzZXQgb2YgdGhlIGF2YWlsYWJsZSBkcGFybS4gIEl0IHZhcmllcwotCSAqIHdpdGggdGhlIHByb2Nlc3NvciBhbmQgdGhlIG1pY3JvY29kZSBwYXRjaGVzIGFwcGxpZWQgLyBhY3RpdmF0ZWQuCi0JICogQnV0IHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGF0IGxlYXN0IHNhZmUuCi0JICovCi0JcmhfYXR0YWNoX3JlZ2lvbigmY3BtX2RwbWVtX2luZm8sIENQTV9EQVRBT05MWV9CQVNFLCBDUE1fREFUQU9OTFlfU0laRSk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIHNpemUgd29ydGggb2YgRFAgbWVtb3J5LgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9mZnNldCBpbnRvIHRoZSBEUFJBTSBhcmVhLgotICogVXNlIGNwbV9kcHJhbV9hZGRyKCkgdG8gZ2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGFyZWEuCi0gKi8KLXVuc2lnbmVkIGxvbmcgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCWNwbV9kcG1lbV9pbmZvLmFsaWdubWVudCA9IGFsaWduOwotCXN0YXJ0ID0gcmhfYWxsb2MoJmNwbV9kcG1lbV9pbmZvLCBzaXplLCAiY29tbXByb2MiKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuICh1aW50KXN0YXJ0OwotfQotRVhQT1JUX1NZTUJPTChjcG1fZHBhbGxvYyk7Ci0KLWludCBjcG1fZHBmcmVlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCXJldCA9IHJoX2ZyZWUoJmNwbV9kcG1lbV9pbmZvLCBvZmZzZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChjcG1fZHBmcmVlKTsKLQotdW5zaWduZWQgbG9uZyBjcG1fZHBhbGxvY19maXhlZCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludCBzaXplLCB1aW50IGFsaWduKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCWNwbV9kcG1lbV9pbmZvLmFsaWdubWVudCA9IGFsaWduOwotCXN0YXJ0ID0gcmhfYWxsb2NfZml4ZWQoJmNwbV9kcG1lbV9pbmZvLCBvZmZzZXQsIHNpemUsICJjb21tcHJvYyIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gc3RhcnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGNwbV9kcGFsbG9jX2ZpeGVkKTsKLQotdm9pZCBjcG1fZHBkdW1wKHZvaWQpCi17Ci0JcmhfZHVtcCgmY3BtX2RwbWVtX2luZm8pOwotfQotRVhQT1JUX1NZTUJPTChjcG1fZHBkdW1wKTsKLQotdm9pZCAqY3BtX2RwcmFtX2FkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0JcmV0dXJuICh2b2lkICopKGRwcmFtX3ZiYXNlICsgb2Zmc2V0KTsKLX0KLUVYUE9SVF9TWU1CT0woY3BtX2RwcmFtX2FkZHIpOwotCi11aW50IGNwbV9kcHJhbV9waHlzKHU4ICphZGRyKQotewotCXJldHVybiAoZHByYW1fcGJhc2UgKyAodWludCkoYWRkciAtIGRwcmFtX3ZiYXNlKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNwbV9kcHJhbV9waHlzKTsKLSNlbmRpZiAvKiAhQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcgKi8KLQogc3RydWN0IGNwbV9pb3BvcnQxNiB7CiAJX19iZTE2IGRpciwgcGFyLCBvZHJfc29yLCBkYXQsIGludHI7CiAJX19iZTE2IHJlc1szXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yLmMKaW5kZXggN2JlNzExMi4uNWE2YzVkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yLmMKQEAgLTQ2LDEwICs0Niw2IEBACiAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgogCi0jaWZuZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCi1zdGF0aWMgdm9pZCBjcG0yX2RwaW5pdCh2b2lkKTsKLSNlbmRpZgotCiBjcG1fY3BtMl90IF9faW9tZW0gKmNwbXA7IC8qIFBvaW50ZXIgdG8gY29tbSBwcm9jZXNzb3Igc3BhY2UgKi8KIAogLyogV2UgYWxsb2NhdGUgdGhpcyBoZXJlIGJlY2F1c2UgaXQgaXMgdXNlZCBhbG1vc3QgZXhjbHVzaXZlbHkgZm9yCkBAIC03MSwxNSArNjcsMTcgQEAKIAogCS8qIFJlY2xhaW0gdGhlIERQIG1lbW9yeSBmb3Igb3VyIHVzZS4KIAkgKi8KLSNpZmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORwogCWNwbV9tdXJhbV9pbml0KCk7Ci0jZWxzZQotCWNwbTJfZHBpbml0KCk7Ci0jZW5kaWYKIAogCS8qIFRlbGwgZXZlcnlvbmUgd2hlcmUgdGhlIGNvbW0gcHJvY2Vzc29yIHJlc2lkZXMuCiAJICovCiAJY3BtcCA9ICZjcG0yX2ltbXItPmltX2NwbTsKKworI2lmbmRlZiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTQorCS8qIFJlc2V0IHRoZSBDUE0uCisJICovCisJY3BtX2NvbW1hbmQoQ1BNX0NSX1JTVCwgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhjbWRfbG9jayk7CkBAIC05OSw3ICs5Nyw3IEBACiAJCWlmICgoaW5fYmUzMigmY3BtcC0+Y3BfY3BjcikgJiBDUE1fQ1JfRkxHKSA9PSAwKQogCQkJZ290byBvdXQ7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IE5vdCBhYmxlIHRvIGlzc3VlIENQTSBjb21tYW5kXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0VSUiAiJXMoKTogTm90IGFibGUgdG8gaXNzdWUgQ1BNIGNvbW1hbmRcbiIsIF9fZnVuY19fKTsKIAlyZXQgPSAtRUlPOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZF9sb2NrLCBmbGFncyk7CkBAIC0yNDAsNiArMjM4LDcgQEAKIAljYXNlIENQTV9DTEtfU0NDMToKIAkJcmVnID0gJmltX2NwbXV4LT5jbXhfc2NyOwogCQlzaGlmdCA9IDI0OworCQlicmVhazsKIAljYXNlIENQTV9DTEtfU0NDMjoKIAkJcmVnID0gJmltX2NwbXV4LT5jbXhfc2NyOwogCQlzaGlmdCA9IDE2OwpAQCAtMzQ2LDk1ICszNDUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZm5kZWYgQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcKLS8qCi0gKiBkcGFsbG9jIC8gZHBmcmVlIGJpdHMuCi0gKi8KLXN0YXRpYyBzcGlubG9ja190IGNwbV9kcG1lbV9sb2NrOwotLyogMTYgYmxvY2tzIHNob3VsZCBiZSBlbm91Z2ggdG8gc2F0aXNmeSBhbGwgcmVxdWVzdHMKLSAqIHVudGlsIHRoZSBtZW1vcnkgc3Vic3lzdGVtIGdvZXMgdXAuLi4gKi8KLXN0YXRpYyByaF9ibG9ja190IGNwbV9ib290X2RwbWVtX3JoX2Jsb2NrWzE2XTsKLXN0YXRpYyByaF9pbmZvX3QgY3BtX2RwbWVtX2luZm87Ci1zdGF0aWMgdTggX19pb21lbSAqaW1fZHByYW1iYXNlOwotCi1zdGF0aWMgdm9pZCBjcG0yX2RwaW5pdCh2b2lkKQotewotCXNwaW5fbG9ja19pbml0KCZjcG1fZHBtZW1fbG9jayk7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSBpbmZvIGhlYWRlciAqLwotCXJoX2luaXQoJmNwbV9kcG1lbV9pbmZvLCAxLAotCQkJc2l6ZW9mKGNwbV9ib290X2RwbWVtX3JoX2Jsb2NrKSAvCi0JCQlzaXplb2YoY3BtX2Jvb3RfZHBtZW1fcmhfYmxvY2tbMF0pLAotCQkJY3BtX2Jvb3RfZHBtZW1fcmhfYmxvY2spOwotCi0JaW1fZHByYW1iYXNlID0gY3BtMl9pbW1yOwotCi0JLyogQXR0YWNoIHRoZSB1c2FibGUgZHBtZW0gYXJlYSAqLwotCS8qIFhYWDogVGhpcyBpcyBhY3R1YWxseSBjcmFwLiBDUE1fREFUQU9OTFlfQkFTRSBhbmQKLQkgKiBDUE1fREFUQU9OTFlfU0laRSBpcyBvbmx5IGEgc3Vic2V0IG9mIHRoZSBhdmFpbGFibGUgZHByYW0uIEl0Ci0JICogdmFyaWVzIHdpdGggdGhlIHByb2Nlc3NvciBhbmQgdGhlIG1pY3JvY29kZSBwYXRjaGVzIGFjdGl2YXRlZC4KLQkgKiBCdXQgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgYXQgbGVhc3Qgc2FmZS4KLQkgKi8KLQlyaF9hdHRhY2hfcmVnaW9uKCZjcG1fZHBtZW1faW5mbywgQ1BNX0RBVEFPTkxZX0JBU0UsIENQTV9EQVRBT05MWV9TSVpFKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGluZGV4IGludG8gdGhlIERQUkFNIGFyZWEuCi0gKi8KLXVuc2lnbmVkIGxvbmcgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCWNwbV9kcG1lbV9pbmZvLmFsaWdubWVudCA9IGFsaWduOwotCXN0YXJ0ID0gcmhfYWxsb2MoJmNwbV9kcG1lbV9pbmZvLCBzaXplLCAiY29tbXByb2MiKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuICh1aW50KXN0YXJ0OwotfQotRVhQT1JUX1NZTUJPTChjcG1fZHBhbGxvYyk7Ci0KLWludCBjcG1fZHBmcmVlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCXJldCA9IHJoX2ZyZWUoJmNwbV9kcG1lbV9pbmZvLCBvZmZzZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChjcG1fZHBmcmVlKTsKLQotLyogbm90IHN1cmUgaWYgdGhpcyBpcyBldmVyIG5lZWRlZCAqLwotdW5zaWduZWQgbG9uZyBjcG1fZHBhbGxvY19maXhlZCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludCBzaXplLCB1aW50IGFsaWduKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCWNwbV9kcG1lbV9pbmZvLmFsaWdubWVudCA9IGFsaWduOwotCXN0YXJ0ID0gcmhfYWxsb2NfZml4ZWQoJmNwbV9kcG1lbV9pbmZvLCBvZmZzZXQsIHNpemUsICJjb21tcHJvYyIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gc3RhcnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGNwbV9kcGFsbG9jX2ZpeGVkKTsKLQotdm9pZCBjcG1fZHBkdW1wKHZvaWQpCi17Ci0JcmhfZHVtcCgmY3BtX2RwbWVtX2luZm8pOwotfQotRVhQT1JUX1NZTUJPTChjcG1fZHBkdW1wKTsKLQotdm9pZCAqY3BtX2RwcmFtX2FkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0JcmV0dXJuICh2b2lkICopKGltX2RwcmFtYmFzZSArIG9mZnNldCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNwbV9kcHJhbV9hZGRyKTsKLSNlbmRpZiAvKiAhQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcgKi8KLQogc3RydWN0IGNwbTJfaW9wb3J0cyB7CiAJdTMyIGRpciwgcGFyLCBzb3IsIG9kciwgZGF0OwogCXUzMiByZXNbM107CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCmluZGV4IDE2NTk4MWMuLmNiN2RmMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCkBAIC01OCw3ICs1OCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HCiBzdGF0aWMgc3BpbmxvY2tfdCBjcG1fbXVyYW1fbG9jazsKIHN0YXRpYyByaF9ibG9ja190IGNwbV9ib290X211cmFtX3JoX2Jsb2NrWzE2XTsKIHN0YXRpYyByaF9pbmZvX3QgY3BtX211cmFtX2luZm87CkBAIC0xOTksNSArMTk4LDMgQEAKIAlyZXR1cm4gbXVyYW1fcGJhc2UgKyAoKHU4IF9faW9tZW0gKilhZGRyIC0gbXVyYW1fdmJhc2UpOwogfQogRVhQT1JUX1NZTUJPTChjcG1fbXVyYW1fZG1hKTsKLQotI2VuZGlmIC8qIENPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCmluZGV4IGUwZTI0YjAuLjAwNWMyZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CkBAIC00NCw3ICs0NSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgogCiAjaW5jbHVkZSAiZGFydC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJjOGZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBGcmVlc2NhbGUgTEJDIGFuZCBVUE0gcm91dGluZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8YXNtL2ZzbF9sYmMuaD4KKworc3BpbmxvY2tfdCBmc2xfbGJjX2xvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChmc2xfbGJjX2xvY2spOworCitzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmZzbF9sYmNfcmVnczsKK0VYUE9SVF9TWU1CT0woZnNsX2xiY19yZWdzKTsKKworc3RhdGljIGNoYXIgX19pbml0ZGF0YSAqY29tcGF0X2xiY1tdID0geworCSJmc2wscHEyLWxvY2FsYnVzIiwKKwkiZnNsLHBxMnByby1sb2NhbGJ1cyIsCisJImZzbCxwcTMtbG9jYWxidXMiLAorCSJmc2wsZWxiYyIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmc2xfbGJjX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxidXM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21wYXRfbGJjKTsgaSsrKSB7CisJCWxidXMgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCBjb21wYXRfbGJjW2ldKTsKKwkJaWYgKGxidXMpCisJCQlnb3RvIGZvdW5kOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKKworZm91bmQ6CisJZnNsX2xiY19yZWdzID0gb2ZfaW9tYXAobGJ1cywgMCk7CisJb2Zfbm9kZV9wdXQobGJ1cyk7CisJaWYgKCFmc2xfbGJjX3JlZ3MpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChmc2xfbGJjX2luaXQpOworCisvKioKKyAqIGZzbF9sYmNfZmluZCAtIGZpbmQgTG9jYWxidXMgYmFuaworICogQGFkZHJfYmFzZToJYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgYmFuaworICoKKyAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgTEJDIGJhbmtzIGNvbXBhcmluZyAiQmFzZSBhZGRyZXNzIiBmaWVsZCBvZiB0aGUgQlIKKyAqIHJlZ2lzdGVycyB3aXRoIHRoZSBzdXBwbGllZCBhZGRyX2Jhc2UgYXJndW1lbnQuIFdoZW4gYmFzZXMgbWF0Y2ggdGhpcworICogZnVuY3Rpb24gcmV0dXJucyBiYW5rIG51bWJlciAoc3RhcnRpbmcgd2l0aCAwKSwgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGFwcHJvcHJpYXRlIGVycm5vIHZhbHVlLgorICovCitpbnQgZnNsX2xiY19maW5kKHBoeXNfYWRkcl90IGFkZHJfYmFzZSkKK3sKKwlpbnQgaTsKKworCWlmICghZnNsX2xiY19yZWdzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZzbF9sYmNfcmVncy0+YmFuayk7IGkrKykgeworCQlfX2JlMzIgYnIgPSBpbl9iZTMyKCZmc2xfbGJjX3JlZ3MtPmJhbmtbaV0uYnIpOworCQlfX2JlMzIgb3IgPSBpbl9iZTMyKCZmc2xfbGJjX3JlZ3MtPmJhbmtbaV0ub3IpOworCisJCWlmIChiciAmIEJSX1YgJiYgKGJyICYgb3IgJiBCUl9CQSkgPT0gYWRkcl9iYXNlKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MKGZzbF9sYmNfZmluZCk7CisKKy8qKgorICogZnNsX3VwbV9maW5kIC0gZmluZCBwcmUtcHJvZ3JhbW1lZCBVUE0gdmlhIGJhc2UgYWRkcmVzcworICogQGFkZHJfYmFzZToJYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgYmFuayBjb250cm9sbGVkIGJ5IHRoZSBVUE0KKyAqIEB1cG06CXBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmc2xfdXBtIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgZnNsX3VwbSBzdHJ1Y3R1cmUgc28geW91IGNhbiB1c2UgaXQgd2l0aCB0aGUgcmVzdCBvZgorICogVVBNIEFQSS4gT24gc3VjY2VzcyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGFwcHJvcHJpYXRlIGVycm5vIHZhbHVlLgorICovCitpbnQgZnNsX3VwbV9maW5kKHBoeXNfYWRkcl90IGFkZHJfYmFzZSwgc3RydWN0IGZzbF91cG0gKnVwbSkKK3sKKwlpbnQgYmFuazsKKwlfX2JlMzIgYnI7CisKKwliYW5rID0gZnNsX2xiY19maW5kKGFkZHJfYmFzZSk7CisJaWYgKGJhbmsgPCAwKQorCQlyZXR1cm4gYmFuazsKKworCWJyID0gaW5fYmUzMigmZnNsX2xiY19yZWdzLT5iYW5rW2JhbmtdLmJyKTsKKworCXN3aXRjaCAoYnIgJiBCUl9NU0VMKSB7CisJY2FzZSBCUl9NU19VUE1BOgorCQl1cG0tPm14bXIgPSAmZnNsX2xiY19yZWdzLT5tYW1yOworCQlicmVhazsKKwljYXNlIEJSX01TX1VQTUI6CisJCXVwbS0+bXhtciA9ICZmc2xfbGJjX3JlZ3MtPm1ibXI7CisJCWJyZWFrOworCWNhc2UgQlJfTVNfVVBNQzoKKwkJdXBtLT5teG1yID0gJmZzbF9sYmNfcmVncy0+bWNtcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChiciAmIEJSX1BTKSB7CisJY2FzZSBCUl9QU184OgorCQl1cG0tPndpZHRoID0gODsKKwkJYnJlYWs7CisJY2FzZSBCUl9QU18xNjoKKwkJdXBtLT53aWR0aCA9IDE2OworCQlicmVhazsKKwljYXNlIEJSX1BTXzMyOgorCQl1cG0tPndpZHRoID0gMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChmc2xfdXBtX2ZpbmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwppbmRleCAyYzUzODhjLi41YzFiMjQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwpAQCAtNzUsNiArNzUsMzMgQEAKIAogRVhQT1JUX1NZTUJPTChnZXRfaW1tcmJhc2UpOwogCitzdGF0aWMgdTMyIHN5c2ZyZXEgPSAtMTsKKwordTMyIGZzbF9nZXRfc3lzX2ZyZXEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNvYzsKKwljb25zdCB1MzIgKnByb3A7CisJaW50IHNpemU7CisKKwlpZiAoc3lzZnJlcSAhPSAtMSkKKwkJcmV0dXJuIHN5c2ZyZXE7CisKKwlzb2MgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAic29jIik7CisJaWYgKCFzb2MpCisJCXJldHVybiAtMTsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoc29jLCAiY2xvY2stZnJlcXVlbmN5IiwgJnNpemUpOworCWlmICghcHJvcCB8fCBzaXplICE9IHNpemVvZigqcHJvcCkgfHwgKnByb3AgPT0gMCkKKwkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShzb2MsICJidXMtZnJlcXVlbmN5IiwgJnNpemUpOworCisJaWYgKHByb3AgJiYgc2l6ZSA9PSBzaXplb2YoKnByb3ApKQorCQlzeXNmcmVxID0gKnByb3A7CisKKwlvZl9ub2RlX3B1dChzb2MpOworCXJldHVybiBzeXNmcmVxOworfQorRVhQT1JUX1NZTUJPTChmc2xfZ2V0X3N5c19mcmVxKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0NQTTIpIHx8IGRlZmluZWQoQ09ORklHX1FVSUNDX0VOR0lORSkgfHwgZGVmaW5lZChDT05GSUdfOHh4KQogCiBzdGF0aWMgdTMyIGJyZ2ZyZXEgPSAtMTsKQEAgLTM0MSw3ICszNjgsNyBAQAogCQkJCWdvdG8gdW5yZWc7CiAJCQl9CiAKLQkJCWdmYXJfZGF0YS5idXNfaWQgPSAwOworCQkJc25wcmludGYoZ2Zhcl9kYXRhLmJ1c19pZCwgTUlJX0JVU19JRF9TSVpFLCAiMCIpOwogCQkJZ2Zhcl9kYXRhLnBoeV9pZCA9IGZpeGVkX2xpbmtbMF07CiAJCX0gZWxzZSB7CiAJCQlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwpAQCAtMzYyLDcgKzM4OSw4IEBACiAJCQl9CiAKIAkJCWdmYXJfZGF0YS5waHlfaWQgPSAqaWQ7Ci0JCQlnZmFyX2RhdGEuYnVzX2lkID0gcmVzLnN0YXJ0OworCQkJc25wcmludGYoZ2Zhcl9kYXRhLmJ1c19pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLAorCQkJCQlyZXMuc3RhcnQpOwogCiAJCQlvZl9ub2RlX3B1dChwaHkpOwogCQkJb2Zfbm9kZV9wdXQobWRpbyk7CkBAIC01MTYsOSArNTQ0LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IG1wYzgzeHhfd2R0X2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgcjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNvYywgKm5wOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OwotCWNvbnN0IHVuc2lnbmVkIGludCAqZnJlcTsKKwl1MzIgZnJlcSA9IGZzbF9nZXRfc3lzX2ZyZXEoKTsKIAlpbnQgcmV0OwogCiAJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCAid2F0Y2hkb2ciLCAibXBjODN4eF93ZHQiKTsKQEAgLTUyOCwxOSArNTU2LDYgQEAKIAkJZ290byBub2RldjsKIAl9CiAKLQlzb2MgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAic29jIik7Ci0KLQlpZiAoIXNvYykgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG5vc29jOwotCX0KLQotCWZyZXEgPSBvZl9nZXRfcHJvcGVydHkoc29jLCAiYnVzLWZyZXF1ZW5jeSIsIE5VTEwpOwotCWlmICghZnJlcSkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycjsKLQl9Ci0KIAltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CiAKIAlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcik7CkBAIC01NTMsMjAgKzU2OCwxNiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoZGV2LCBmcmVxLCBzaXplb2YoaW50KSk7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGRldiwgJmZyZXEsIHNpemVvZihmcmVxKSk7CiAJaWYgKHJldCkKIAkJZ290byB1bnJlZzsKIAotCW9mX25vZGVfcHV0KHNvYyk7CiAJb2Zfbm9kZV9wdXQobnApOwotCiAJcmV0dXJuIDA7CiAKIHVucmVnOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldik7CiBlcnI6Ci0Jb2Zfbm9kZV9wdXQoc29jKTsKLW5vc29jOgogCW9mX25vZGVfcHV0KG5wKTsKIG5vZGV2OgogCXJldHVybiByZXQ7CkBAIC03MzUsNTQ3ICs3NDYsNiBAQAogCiBhcmNoX2luaXRjYWxsKGZzbF91c2Jfb2ZfaW5pdCk7CiAKLSNpZm5kZWYgQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcKLSNpZmRlZiBDT05GSUdfQ1BNMgotCi1leHRlcm4gdm9pZCBpbml0X3NjY19pb3BvcnRzKHN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8qKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgZmNjX3JlZ3NbXSA9ICJmY2NfcmVncyI7Ci1zdGF0aWMgY29uc3QgY2hhciBmY2NfcmVnc19jW10gPSAiZmNjX3JlZ3NfYyI7Ci1zdGF0aWMgY29uc3QgY2hhciBmY2NfcHJhbVtdID0gImZjY19wcmFtIjsKLXN0YXRpYyBjaGFyIGJ1c19pZFs5XVtCVVNfSURfU0laRV07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZzX2VuZXRfb2ZfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZnNfZW5ldF9kZXY7Ci0Jc3RydWN0IHJlc291cmNlIHJlczsKLQlpbnQgcmV0OwotCi0JZm9yIChucCA9IE5VTEwsIGkgPSAwOwotCSAgICAgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJuZXR3b3JrIiwgImZzX2VuZXQiKSkgIT0gTlVMTDsKLQkgICAgIGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2Ugcls0XTsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwaHksICptZGlvOwotCQlzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBmc19lbmV0X2RhdGE7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCAqaWQsICpwaHlfYWRkciwgKnBoeV9pcnE7Ci0JCWNvbnN0IHZvaWQgKm1hY19hZGRyOwotCQljb25zdCBwaGFuZGxlICpwaDsKLQkJY29uc3QgY2hhciAqbW9kZWw7Ci0KLQkJbWVtc2V0KHIsIDAsIHNpemVvZihyKSk7Ci0JCW1lbXNldCgmZnNfZW5ldF9kYXRhLCAwLCBzaXplb2YoZnNfZW5ldF9kYXRhKSk7Ci0KLQkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJbMF0pOwotCQlpZiAocmV0KQotCQkJZ290byBlcnI7Ci0JCXJbMF0ubmFtZSA9IGZjY19yZWdzOwotCi0JCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDEsICZyWzFdKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCQlyWzFdLm5hbWUgPSBmY2NfcHJhbTsKLQotCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAyLCAmclsyXSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKLQkJclsyXS5uYW1lID0gZmNjX3JlZ3NfYzsKLQkJZnNfZW5ldF9kYXRhLmZjY19yZWdzX2MgPSByWzJdLnN0YXJ0OwotCi0JCW9mX2lycV90b19yZXNvdXJjZShucCwgMCwgJnJbM10pOwotCi0JCWZzX2VuZXRfZGV2ID0KLQkJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImZzbC1jcG0tZmNjIiwgaSwgJnJbMF0sIDQpOwotCi0JCWlmIChJU19FUlIoZnNfZW5ldF9kZXYpKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGZzX2VuZXRfZGV2KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkobnAsICJtb2RlbCIsIE5VTEwpOwotCQlpZiAobW9kZWwgPT0gTlVMTCkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWdvdG8gdW5yZWc7Ci0JCX0KLQotCQltYWNfYWRkciA9IG9mX2dldF9tYWNfYWRkcmVzcyhucCk7Ci0JCWlmIChtYWNfYWRkcikKLQkJCW1lbWNweShmc19lbmV0X2RhdGEubWFjYWRkciwgbWFjX2FkZHIsIDYpOwotCi0JCXBoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWhhbmRsZSIsIE5VTEwpOwotCQlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwotCi0JCWlmIChwaHkgPT0gTlVMTCkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWdvdG8gdW5yZWc7Ci0JCX0KLQotCQlwaHlfYWRkciA9IG9mX2dldF9wcm9wZXJ0eShwaHksICJyZWciLCBOVUxMKTsKLQkJZnNfZW5ldF9kYXRhLnBoeV9hZGRyID0gKnBoeV9hZGRyOwotCi0JCXBoeV9pcnEgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAiaW50ZXJydXB0cyIsIE5VTEwpOwotCi0JCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7Ci0JCWZzX2VuZXRfZGF0YS5mc19ubyA9ICppZDsKLQkJc3RyY3B5KGZzX2VuZXRfZGF0YS5mc190eXBlLCBtb2RlbCk7Ci0KLQkJbWRpbyA9IG9mX2dldF9wYXJlbnQocGh5KTsKLSAgICAgICAgICAgICAgICByZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG1kaW8sIDAsICZyZXMpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mX25vZGVfcHV0KHBoeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChtZGlvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5yZWc7Ci0gICAgICAgICAgICAgICAgfQotCi0JCWZzX2VuZXRfZGF0YS5jbGtfcnggPSAqKCh1MzIgKilvZl9nZXRfcHJvcGVydHkobnAsCi0JCQkJCQkicngtY2xvY2siLCBOVUxMKSk7Ci0JCWZzX2VuZXRfZGF0YS5jbGtfdHggPSAqKCh1MzIgKilvZl9nZXRfcHJvcGVydHkobnAsCi0JCQkJCQkidHgtY2xvY2siLCBOVUxMKSk7Ci0KLQkJaWYgKHN0cnN0cihtb2RlbCwgIkZDQyIpKSB7Ci0JCQlpbnQgZmNjX2luZGV4ID0gKmlkIC0gMTsKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1kaW9fYmJfcHJvcDsKLQotCQkJZnNfZW5ldF9kYXRhLmRwcmFtX29mZnNldCA9ICh1MzIpY3BtX2RwcmFtX2FkZHIoMCk7Ci0JCQlmc19lbmV0X2RhdGEucnhfcmluZyA9IDMyOwotCQkJZnNfZW5ldF9kYXRhLnR4X3JpbmcgPSAzMjsKLQkJCWZzX2VuZXRfZGF0YS5yeF9jb3B5YnJlYWsgPSAyNDA7Ci0JCQlmc19lbmV0X2RhdGEudXNlX25hcGkgPSAwOwotCQkJZnNfZW5ldF9kYXRhLm5hcGlfd2VpZ2h0ID0gMTc7Ci0JCQlmc19lbmV0X2RhdGEubWVtX29mZnNldCA9IEZDQ19NRU1fT0ZGU0VUKGZjY19pbmRleCk7Ci0JCQlmc19lbmV0X2RhdGEuY3BfcGFnZSA9IENQTV9DUl9GQ0NfUEFHRShmY2NfaW5kZXgpOwotCQkJZnNfZW5ldF9kYXRhLmNwX2Jsb2NrID0gQ1BNX0NSX0ZDQ19TQkxPQ0soZmNjX2luZGV4KTsKLQotCQkJc25wcmludGYoKGNoYXIqKSZidXNfaWRbKCppZCldLCBCVVNfSURfU0laRSwgIiV4OiUwMngiLAotCQkJCQkJCSh1MzIpcmVzLnN0YXJ0LCBmc19lbmV0X2RhdGEucGh5X2FkZHIpOwotCQkJZnNfZW5ldF9kYXRhLmJ1c19pZCA9IChjaGFyKikmYnVzX2lkWygqaWQpXTsKLQkJCWZzX2VuZXRfZGF0YS5pbml0X2lvcG9ydHMgPSBpbml0X2ZjY19pb3BvcnRzOwotCi0JCQltZGlvX2JiX3Byb3AgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAiYml0YmFuZyIsIE5VTEwpOwotCQkJaWYgKG1kaW9fYmJfcHJvcCkgewotCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZzX2VuZXRfbWRpb19iYl9kZXY7Ci0JCQkJc3RydWN0IGZzX21paV9iYl9wbGF0Zm9ybV9pbmZvIGZzX2VuZXRfbWRpb19iYl9kYXRhOwotCi0JCQkJZnNfZW5ldF9tZGlvX2JiX2RldiA9Ci0JCQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImZzbC1iYi1tZGlvIiwKLQkJCQkJCQlpLCBOVUxMLCAwKTsKLQkJCQltZW1zZXQoJmZzX2VuZXRfbWRpb19iYl9kYXRhLCAwLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBmc19taWlfYmJfcGxhdGZvcm1faW5mbykpOwotCQkJCWZzX2VuZXRfbWRpb19iYl9kYXRhLm1kaW9fZGF0LmJpdCA9Ci0JCQkJCW1kaW9fYmJfcHJvcFswXTsKLQkJCQlmc19lbmV0X21kaW9fYmJfZGF0YS5tZGlvX2Rpci5iaXQgPQotCQkJCQltZGlvX2JiX3Byb3BbMV07Ci0JCQkJZnNfZW5ldF9tZGlvX2JiX2RhdGEubWRjX2RhdC5iaXQgPQotCQkJCQltZGlvX2JiX3Byb3BbMl07Ci0JCQkJZnNfZW5ldF9tZGlvX2JiX2RhdGEubWRpb19wb3J0ID0KLQkJCQkJbWRpb19iYl9wcm9wWzNdOwotCQkJCWZzX2VuZXRfbWRpb19iYl9kYXRhLm1kY19wb3J0ID0KLQkJCQkJbWRpb19iYl9wcm9wWzRdOwotCQkJCWZzX2VuZXRfbWRpb19iYl9kYXRhLmRlbGF5ID0KLQkJCQkJbWRpb19iYl9wcm9wWzVdOwotCi0JCQkJZnNfZW5ldF9tZGlvX2JiX2RhdGEuaXJxWzBdID0gcGh5X2lycVswXTsKLQkJCQlmc19lbmV0X21kaW9fYmJfZGF0YS5pcnFbMV0gPSAtMTsKLQkJCQlmc19lbmV0X21kaW9fYmJfZGF0YS5pcnFbMl0gPSAtMTsKLQkJCQlmc19lbmV0X21kaW9fYmJfZGF0YS5pcnFbM10gPSBwaHlfaXJxWzBdOwotCQkJCWZzX2VuZXRfbWRpb19iYl9kYXRhLmlycVszMV0gPSAtMTsKLQotCQkJCWZzX2VuZXRfbWRpb19iYl9kYXRhLm1kaW9fZGF0Lm9mZnNldCA9Ci0JCQkJCSh1MzIpJmNwbTJfaW1tci0+aW1faW9wb3J0LmlvcF9wZGF0YzsKLQkJCQlmc19lbmV0X21kaW9fYmJfZGF0YS5tZGlvX2Rpci5vZmZzZXQgPQotCQkJCQkodTMyKSZjcG0yX2ltbXItPmltX2lvcG9ydC5pb3BfcGRpcmM7Ci0JCQkJZnNfZW5ldF9tZGlvX2JiX2RhdGEubWRjX2RhdC5vZmZzZXQgPQotCQkJCQkodTMyKSZjcG0yX2ltbXItPmltX2lvcG9ydC5pb3BfcGRhdGM7Ci0KLQkJCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoCi0JCQkJCQlmc19lbmV0X21kaW9fYmJfZGV2LAotCQkJCQkJJmZzX2VuZXRfbWRpb19iYl9kYXRhLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBmc19taWlfYmJfcGxhdGZvcm1faW5mbykpOwotCQkJCWlmIChyZXQpCi0JCQkJCWdvdG8gdW5yZWc7Ci0JCQl9Ci0KLQkJCW9mX25vZGVfcHV0KHBoeSk7Ci0JCQlvZl9ub2RlX3B1dChtZGlvKTsKLQotCQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGZzX2VuZXRfZGV2LCAmZnNfZW5ldF9kYXRhLAotCQkJCQkJICAgICBzaXplb2Yoc3RydWN0Ci0JCQkJCQkJICAgIGZzX3BsYXRmb3JtX2luZm8pKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byB1bnJlZzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLQotdW5yZWc6Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnNfZW5ldF9kZXYpOwotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoZnNfZW5ldF9vZl9pbml0KTsKLQotc3RhdGljIGNvbnN0IGNoYXIgc2NjX3JlZ3NbXSA9ICJyZWdzIjsKLXN0YXRpYyBjb25zdCBjaGFyIHNjY19wcmFtW10gPSAicHJhbSI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNwbV91YXJ0X29mX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNwbV91YXJ0X2RldjsKLQlpbnQgcmV0OwotCi0JZm9yIChucCA9IE5VTEwsIGkgPSAwOwotCSAgICAgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJzZXJpYWwiLCAiY3BtX3VhcnQiKSkgIT0gTlVMTDsKLQkgICAgIGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgclszXTsKLQkJc3RydWN0IGZzX3VhcnRfcGxhdGZvcm1faW5mbyBjcG1fdWFydF9kYXRhOwotCQljb25zdCBpbnQgKmlkOwotCQljb25zdCBjaGFyICptb2RlbDsKLQotCQltZW1zZXQociwgMCwgc2l6ZW9mKHIpKTsKLQkJbWVtc2V0KCZjcG1fdWFydF9kYXRhLCAwLCBzaXplb2YoY3BtX3VhcnRfZGF0YSkpOwotCi0JCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCi0JCXJbMF0ubmFtZSA9IHNjY19yZWdzOwotCi0JCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDEsICZyWzFdKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCQlyWzFdLm5hbWUgPSBzY2NfcHJhbTsKLQotCQlvZl9pcnFfdG9fcmVzb3VyY2UobnAsIDAsICZyWzJdKTsKLQotCQljcG1fdWFydF9kZXYgPQotCQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZnNsLWNwbS1zY2M6dWFydCIsIGksICZyWzBdLCAzKTsKLQotCQlpZiAoSVNfRVJSKGNwbV91YXJ0X2RldikpIHsKLQkJCXJldCA9IFBUUl9FUlIoY3BtX3VhcnRfZGV2KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJaWQgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKLQkJY3BtX3VhcnRfZGF0YS5mc19ubyA9ICppZDsKLQotCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGVsIiwgTlVMTCk7Ci0JCXN0cmNweShjcG1fdWFydF9kYXRhLmZzX3R5cGUsIG1vZGVsKTsKLQotCQljcG1fdWFydF9kYXRhLnVhcnRfY2xrID0gcHBjX3Byb2NfZnJlcTsKLQotCQljcG1fdWFydF9kYXRhLnR4X251bV9maWZvID0gNDsKLQkJY3BtX3VhcnRfZGF0YS50eF9idWZfc2l6ZSA9IDMyOwotCQljcG1fdWFydF9kYXRhLnJ4X251bV9maWZvID0gNDsKLQkJY3BtX3VhcnRfZGF0YS5yeF9idWZfc2l6ZSA9IDMyOwotCQljcG1fdWFydF9kYXRhLmNsa19yeCA9ICooKHUzMiAqKW9mX2dldF9wcm9wZXJ0eShucCwKLQkJCQkJCSJyeC1jbG9jayIsIE5VTEwpKTsKLQkJY3BtX3VhcnRfZGF0YS5jbGtfdHggPSAqKCh1MzIgKilvZl9nZXRfcHJvcGVydHkobnAsCi0JCQkJCQkidHgtY2xvY2siLCBOVUxMKSk7Ci0KLQkJcmV0ID0KLQkJICAgIHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShjcG1fdWFydF9kZXYsICZjcG1fdWFydF9kYXRhLAotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QKLQkJCQkJCSAgICBmc191YXJ0X3BsYXRmb3JtX2luZm8pKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gdW5yZWc7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLXVucmVnOgotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNwbV91YXJ0X2Rldik7Ci1lcnI6Ci0JcmV0dXJuIHJldDsKLX0KLQotYXJjaF9pbml0Y2FsbChjcG1fdWFydF9vZl9pbml0KTsKLSNlbmRpZiAvKiBDT05GSUdfQ1BNMiAqLwotCi0jaWZkZWYgQ09ORklHXzh4eAotCi1leHRlcm4gdm9pZCBpbml0X3NjY19pb3BvcnRzKHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvKik7Ci1leHRlcm4gaW50IHBsYXRmb3JtX2RldmljZV9za2lwKGNvbnN0IGNoYXIgKm1vZGVsLCBpbnQgaWQpOwotCi1zdGF0aWMgaW50IF9faW5pdCBmc19lbmV0X21kaW9fb2ZfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWRpb19kZXY7Ci0Jc3RydWN0IHJlc291cmNlIHJlczsKLQlpbnQgcmV0OwotCi0JZm9yIChucCA9IE5VTEwsIGkgPSAwOwotCSAgICAgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJtZGlvIiwgImZzX2VuZXQiKSkgIT0gTlVMTDsKLQkgICAgIGkrKykgewotCQlzdHJ1Y3QgZnNfbWlpX2ZlY19wbGF0Zm9ybV9pbmZvIG1kaW9fZGF0YTsKLQotCQltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOwotCQltZW1zZXQoJm1kaW9fZGF0YSwgMCwgc2l6ZW9mKG1kaW9fZGF0YSkpOwotCi0JCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnI7Ci0KLQkJbWRpb19kZXYgPQotCQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZnNsLWNwbS1mZWMtbWRpbyIsCi0JCQkJCQkgICAgcmVzLnN0YXJ0LCAmcmVzLCAxKTsKLQkJaWYgKElTX0VSUihtZGlvX2RldikpIHsKLQkJCXJldCA9IFBUUl9FUlIobWRpb19kZXYpOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQltZGlvX2RhdGEubWlpX3NwZWVkID0gKCgoKHBwY19wcm9jX2ZyZXEgKyA0OTk5OTk5KSAvIDI1MDAwMDApIC8gMikgJiAweDNGKSA8PCAxOwotCi0JCXJldCA9Ci0JCSAgICBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEobWRpb19kZXYsICZtZGlvX2RhdGEsCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmc19taWlfZmVjX3BsYXRmb3JtX2luZm8pKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gdW5yZWc7Ci0JfQotCXJldHVybiAwOwotCi11bnJlZzoKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtZGlvX2Rldik7Ci1lcnI6Ci0JcmV0dXJuIHJldDsKLX0KLQotYXJjaF9pbml0Y2FsbChmc19lbmV0X21kaW9fb2ZfaW5pdCk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICplbmV0X3JlZ3MgPSAicmVncyI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZW5ldF9wcmFtID0gInByYW0iOwotc3RhdGljIGNvbnN0IGNoYXIgKmVuZXRfaXJxID0gImludGVycnVwdCI7Ci1zdGF0aWMgY2hhciBidXNfaWRbOV1bQlVTX0lEX1NJWkVdOwotCi1zdGF0aWMgaW50IF9faW5pdCBmc19lbmV0X29mX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZzX2VuZXRfZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCWludCByZXQ7Ci0KLQlmb3IgKG5wID0gTlVMTCwgaSA9IDA7Ci0JICAgICAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwgIm5ldHdvcmsiLCAiZnNfZW5ldCIpKSAhPSBOVUxMOwotCSAgICAgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSByWzRdOwotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeSA9IE5VTEwsICptZGlvID0gTlVMTDsKLQkJc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gZnNfZW5ldF9kYXRhOwotCQljb25zdCB1bnNpZ25lZCBpbnQgKmlkOwotCQljb25zdCB1bnNpZ25lZCBpbnQgKnBoeV9hZGRyOwotCQljb25zdCB2b2lkICptYWNfYWRkcjsKLQkJY29uc3QgcGhhbmRsZSAqcGg7Ci0JCWNvbnN0IGNoYXIgKm1vZGVsOwotCi0JCW1lbXNldChyLCAwLCBzaXplb2YocikpOwotCQltZW1zZXQoJmZzX2VuZXRfZGF0YSwgMCwgc2l6ZW9mKGZzX2VuZXRfZGF0YSkpOwotCi0JCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibW9kZWwiLCBOVUxMKTsKLQkJaWYgKG1vZGVsID09IE5VTEwpIHsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlnb3RvIHVucmVnOwotCQl9Ci0KLQkJaWQgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKLQkJZnNfZW5ldF9kYXRhLmZzX25vID0gKmlkOwotCi0JCWlmIChwbGF0Zm9ybV9kZXZpY2Vfc2tpcChtb2RlbCwgKmlkKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCQlyWzBdLm5hbWUgPSBlbmV0X3JlZ3M7Ci0KLQkJbWFjX2FkZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3MobnApOwotCQlpZiAobWFjX2FkZHIpCi0JCQltZW1jcHkoZnNfZW5ldF9kYXRhLm1hY2FkZHIsIG1hY19hZGRyLCA2KTsKLQotCQlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKLQkJaWYgKHBoICE9IE5VTEwpCi0JCQlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwotCi0JCWlmIChwaHkgIT0gTlVMTCkgewotCQkJcGh5X2FkZHIgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7Ci0JCQlmc19lbmV0X2RhdGEucGh5X2FkZHIgPSAqcGh5X2FkZHI7Ci0JCQlmc19lbmV0X2RhdGEuaGFzX3BoeSA9IDE7Ci0KLQkJCW1kaW8gPSBvZl9nZXRfcGFyZW50KHBoeSk7Ci0JCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG1kaW8sIDAsICZyZXMpOwotCQkJaWYgKHJldCkgewotCQkJCW9mX25vZGVfcHV0KHBoeSk7Ci0JCQkJb2Zfbm9kZV9wdXQobWRpbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5yZWc7Ci0JCQl9Ci0JCX0KLQotCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGVsIiwgTlVMTCk7Ci0JCXN0cmNweShmc19lbmV0X2RhdGEuZnNfdHlwZSwgbW9kZWwpOwotCi0JCWlmIChzdHJzdHIobW9kZWwsICJGRUMiKSkgewotCQkJclsxXS5zdGFydCA9IHJbMV0uZW5kID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwotCQkJclsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwotCQkJclsxXS5uYW1lID0gZW5ldF9pcnE7Ci0KLQkJCWZzX2VuZXRfZGV2ID0KLQkJCQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZnNsLWNwbS1mZWMiLCBpLCAmclswXSwgMik7Ci0KLQkJCWlmIChJU19FUlIoZnNfZW5ldF9kZXYpKSB7Ci0JCQkJcmV0ID0gUFRSX0VSUihmc19lbmV0X2Rldik7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCWZzX2VuZXRfZGF0YS5yeF9yaW5nID0gMTI4OwotCQkJZnNfZW5ldF9kYXRhLnR4X3JpbmcgPSAxNjsKLQkJCWZzX2VuZXRfZGF0YS5yeF9jb3B5YnJlYWsgPSAyNDA7Ci0JCQlmc19lbmV0X2RhdGEudXNlX25hcGkgPSAxOwotCQkJZnNfZW5ldF9kYXRhLm5hcGlfd2VpZ2h0ID0gMTc7Ci0KLQkJCXNucHJpbnRmKChjaGFyKikmYnVzX2lkW2ldLCBCVVNfSURfU0laRSwgIiV4OiUwMngiLAotCQkJCQkJCSh1MzIpcmVzLnN0YXJ0LCBmc19lbmV0X2RhdGEucGh5X2FkZHIpOwotCQkJZnNfZW5ldF9kYXRhLmJ1c19pZCA9IChjaGFyKikmYnVzX2lkW2ldOwotCQkJZnNfZW5ldF9kYXRhLmluaXRfaW9wb3J0cyA9IGluaXRfZmVjX2lvcG9ydHM7Ci0JCX0KLQkJaWYgKHN0cnN0cihtb2RlbCwgIlNDQyIpKSB7Ci0JCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAxLCAmclsxXSk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXJyOwotCQkJclsxXS5uYW1lID0gZW5ldF9wcmFtOwotCi0JCQlyWzJdLnN0YXJ0ID0gclsyXS5lbmQgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0JCQlyWzJdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7Ci0JCQlyWzJdLm5hbWUgPSBlbmV0X2lycTsKLQotCQkJZnNfZW5ldF9kZXYgPQotCQkJCSAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJmc2wtY3BtLXNjYyIsIGksICZyWzBdLCAzKTsKLQotCQkJaWYgKElTX0VSUihmc19lbmV0X2RldikpIHsKLQkJCQlyZXQgPSBQVFJfRVJSKGZzX2VuZXRfZGV2KTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJZnNfZW5ldF9kYXRhLnJ4X3JpbmcgPSA2NDsKLQkJCWZzX2VuZXRfZGF0YS50eF9yaW5nID0gODsKLQkJCWZzX2VuZXRfZGF0YS5yeF9jb3B5YnJlYWsgPSAyNDA7Ci0JCQlmc19lbmV0X2RhdGEudXNlX25hcGkgPSAxOwotCQkJZnNfZW5ldF9kYXRhLm5hcGlfd2VpZ2h0ID0gMTc7Ci0KLQkJCXNucHJpbnRmKChjaGFyKikmYnVzX2lkW2ldLCBCVVNfSURfU0laRSwgIiVzIiwgImZpeGVkQDEwOjEiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZzX2VuZXRfZGF0YS5idXNfaWQgPSAoY2hhciopJmJ1c19pZFtpXTsKLQkJCWZzX2VuZXRfZGF0YS5pbml0X2lvcG9ydHMgPSBpbml0X3NjY19pb3BvcnRzOwotCQl9Ci0KLQkJb2Zfbm9kZV9wdXQocGh5KTsKLQkJb2Zfbm9kZV9wdXQobWRpbyk7Ci0KLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGZzX2VuZXRfZGV2LCAmZnNfZW5ldF9kYXRhLAotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QKLQkJCQkJCSAgICBmc19wbGF0Zm9ybV9pbmZvKSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIHVucmVnOwotCX0KLQlyZXR1cm4gMDsKLQotdW5yZWc6Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnNfZW5ldF9kZXYpOwotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoZnNfZW5ldF9vZl9pbml0KTsKLQotc3RhdGljIGludCBfX2luaXQgZnNsX3BjbWNpYV9vZl9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQkvKgotCSAqIFJlZ2lzdGVyIGFsbCB0aGUgZGV2aWNlcyB3aGljaCB0eXBlIGlzICJwY21jaWEiCi0JICovCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNtY2lhIiwgImZzbCxwcS1wY21jaWEiKQotCQlvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wLCAibTh4eC1wY21jaWEiLCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotYXJjaF9pbml0Y2FsbChmc2xfcGNtY2lhX29mX2luaXQpOwotCi1zdGF0aWMgY29uc3QgY2hhciAqc21jX3JlZ3MgPSAicmVncyI7Ci1zdGF0aWMgY29uc3QgY2hhciAqc21jX3ByYW0gPSAicHJhbSI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNwbV9zbWNfdWFydF9vZl9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjcG1fdWFydF9kZXY7Ci0JaW50IHJldDsKLQotCWZvciAobnAgPSBOVUxMLCBpID0gMDsKLQkgICAgIChucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLCAic2VyaWFsIiwgImNwbV91YXJ0IikpICE9IE5VTEw7Ci0JICAgICBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlIHJbM107Ci0JCXN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gY3BtX3VhcnRfZGF0YTsKLQkJY29uc3QgaW50ICppZDsKLQkJY29uc3QgY2hhciAqbW9kZWw7Ci0KLQkJbWVtc2V0KHIsIDAsIHNpemVvZihyKSk7Ci0JCW1lbXNldCgmY3BtX3VhcnRfZGF0YSwgMCwgc2l6ZW9mKGNwbV91YXJ0X2RhdGEpKTsKLQotCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmclswXSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKLQotCQlyWzBdLm5hbWUgPSBzbWNfcmVnczsKLQotCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAxLCAmclsxXSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKLQkJclsxXS5uYW1lID0gc21jX3ByYW07Ci0KLQkJclsyXS5zdGFydCA9IHJbMl0uZW5kID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwotCQlyWzJdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7Ci0KLQkJY3BtX3VhcnRfZGV2ID0KLQkJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImZzbC1jcG0tc21jOnVhcnQiLCBpLCAmclswXSwgMyk7Ci0KLQkJaWYgKElTX0VSUihjcG1fdWFydF9kZXYpKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGNwbV91YXJ0X2Rldik7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibW9kZWwiLCBOVUxMKTsKLQkJc3RyY3B5KGNwbV91YXJ0X2RhdGEuZnNfdHlwZSwgbW9kZWwpOwotCi0JCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7Ci0JCWNwbV91YXJ0X2RhdGEuZnNfbm8gPSAqaWQ7Ci0JCWNwbV91YXJ0X2RhdGEudWFydF9jbGsgPSBwcGNfcHJvY19mcmVxOwotCi0JCWNwbV91YXJ0X2RhdGEudHhfbnVtX2ZpZm8gPSA0OwotCQljcG1fdWFydF9kYXRhLnR4X2J1Zl9zaXplID0gMzI7Ci0JCWNwbV91YXJ0X2RhdGEucnhfbnVtX2ZpZm8gPSA0OwotCQljcG1fdWFydF9kYXRhLnJ4X2J1Zl9zaXplID0gMzI7Ci0KLQkJcmV0ID0KLQkJICAgIHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShjcG1fdWFydF9kZXYsICZjcG1fdWFydF9kYXRhLAotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QKLQkJCQkJCSAgICBmc191YXJ0X3BsYXRmb3JtX2luZm8pKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gdW5yZWc7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLXVucmVnOgotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNwbV91YXJ0X2Rldik7Ci1lcnI6Ci0JcmV0dXJuIHJldDsKLX0KLQotYXJjaF9pbml0Y2FsbChjcG1fc21jX3VhcnRfb2ZfaW5pdCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfOHh4ICovCi0jZW5kaWYgLyogQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkcgKi8KLQogc3RhdGljIGludCBfX2luaXQgb2ZfZnNsX3NwaV9wcm9iZShjaGFyICp0eXBlLCBjaGFyICpjb21wYXRpYmxlLCB1MzIgc3lzY2xrLAogCQkJCSAgIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYm9hcmRfaW5mb3MsCiAJCQkJICAgdW5zaWduZWQgaW50IG51bV9ib2FyZF9pbmZvcywKQEAgLTEzNzEsMjUgKzg0MSw5IEBACiAJc3lzY2xrID0gZ2V0X2JyZ2ZyZXEoKTsKICNlbmRpZgogCWlmIChzeXNjbGsgPT0gLTEpIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQkJY29uc3QgdTMyICpmcmVxOwotCQlpbnQgc2l6ZTsKLQotCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJzb2MiKTsKLQkJaWYgKCFucCkKKwkJc3lzY2xrID0gZnNsX2dldF9zeXNfZnJlcSgpOworCQlpZiAoc3lzY2xrID09IC0xKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJZnJlcSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZzaXplKTsKLQkJaWYgKCFmcmVxIHx8IHNpemUgIT0gc2l6ZW9mKCpmcmVxKSB8fCAqZnJlcSA9PSAwKSB7Ci0JCQlmcmVxID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiYnVzLWZyZXF1ZW5jeSIsICZzaXplKTsKLQkJCWlmICghZnJlcSB8fCBzaXplICE9IHNpemVvZigqZnJlcSkgfHwgKmZyZXEgPT0gMCkgewotCQkJCW9mX25vZGVfcHV0KG5wKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCX0KLQkJfQotCi0JCXN5c2NsayA9ICpmcmVxOwotCQlvZl9ub2RlX3B1dChucCk7CiAJfQogCiAJcmV0ID0gb2ZfZnNsX3NwaV9wcm9iZShOVUxMLCAiZnNsLHNwaSIsIHN5c2NsaywgYm9hcmRfaW5mb3MsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oCmluZGV4IDYzZTdkYjMwLi43NGM0YTk2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaApAQCAtNyw2ICs3LDcgQEAKIGV4dGVybiBwaHlzX2FkZHJfdCBnZXRfaW1tcmJhc2Uodm9pZCk7CiBleHRlcm4gdTMyIGdldF9icmdmcmVxKHZvaWQpOwogZXh0ZXJuIHUzMiBnZXRfYmF1ZHJhdGUodm9pZCk7CitleHRlcm4gdTMyIGZzbF9nZXRfc3lzX2ZyZXEodm9pZCk7CiAKIHN0cnVjdCBzcGlfYm9hcmRfaW5mbzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCBhZTBkYmY0Li4wZjJkZmIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtOTA2LDcgKzkwNiw3IEBACiB7CiAJaW50IHJjOwogCi0JaWYgKCFwcmltYXJ5X2lwaWMtPnJlZ3MpCisJaWYgKCFwcmltYXJ5X2lwaWMgfHwgIXByaW1hcnlfaXBpYy0+cmVncykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcHJpbnRrKEtFUk5fREVCVUcgIlJlZ2lzdGVyaW5nIGlwaWMgd2l0aCBzeXNmcy4uLlxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggNmZmZGRhMi4uODYxOWYyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTE3NSwxMyArMTc1LDE2IEBACiAJc3dpdGNoKHR5cGUpIHsKICNpZmRlZiBDT05GSUdfUFBDX0RDUgogCWNhc2UgbXBpY19hY2Nlc3NfZGNyOgotCQlyZXR1cm4gZGNyX3dyaXRlKHJiLT5kaG9zdCwgcmVnLCB2YWx1ZSk7CisJCWRjcl93cml0ZShyYi0+ZGhvc3QsIHJlZywgdmFsdWUpOworCQlicmVhazsKICNlbmRpZgogCWNhc2UgbXBpY19hY2Nlc3NfbW1pb19iZToKLQkJcmV0dXJuIG91dF9iZTMyKHJiLT5iYXNlICsgKHJlZyA+PiAyKSwgdmFsdWUpOworCQlvdXRfYmUzMihyYi0+YmFzZSArIChyZWcgPj4gMiksIHZhbHVlKTsKKwkJYnJlYWs7CiAJY2FzZSBtcGljX2FjY2Vzc19tbWlvX2xlOgogCWRlZmF1bHQ6Ci0JCXJldHVybiBvdXRfbGUzMihyYi0+YmFzZSArIChyZWcgPj4gMiksIHZhbHVlKTsKKwkJb3V0X2xlMzIocmItPmJhc2UgKyAocmVnID4+IDIpLCB2YWx1ZSk7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTAwMCw3ICsxMDAzLDcgQEAKIAkJCQljb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBtcGljCSptcGljOwotCXUzMgkJcmVnOworCXUzMgkJZ3JlZ19mZWF0dXJlOwogCWNvbnN0IGNoYXIJKnZlcnM7CiAJaW50CQlpOwogCWludAkJaW50dmVjX3RvcDsKQEAgLTEwNjQsNyArMTA2Nyw4IEBACiAKIAkvKiBMb29rIGZvciBwcm90ZWN0ZWQgc291cmNlcyAqLwogCWlmIChub2RlKSB7Ci0JCXVuc2lnbmVkIGludCBwc2l6ZSwgYml0cywgbWFwc2l6ZTsKKwkJaW50IHBzaXplOworCQl1bnNpZ25lZCBpbnQgYml0cywgbWFwc2l6ZTsKIAkJY29uc3QgdTMyICpwc3JjID0KIAkJCW9mX2dldF9wcm9wZXJ0eShub2RlLCAicHJvdGVjdGVkLXNvdXJjZXMiLCAmcHNpemUpOwogCQlpZiAocHNyYykgewpAQCAtMTEwNyw4ICsxMTExLDcgQEAKIAkgKiBpbiwgdHJ5IHRvIG9idGFpbiBvbmUKIAkgKi8KIAlpZiAocGFkZHIgPT0gMCAmJiAhKG1waWMtPmZsYWdzICYgTVBJQ19VU0VTX0RDUikpIHsKLQkJY29uc3QgdTMyICpyZWc7Ci0JCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAicmVnIiwgTlVMTCk7CisJCWNvbnN0IHUzMiAqcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKIAkJQlVHX09OKHJlZyA9PSBOVUxMKTsKIAkJcGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhub2RlLCByZWcpOwogCQlCVUdfT04ocGFkZHIgPT0gT0ZfQkFEX0FERFIpOwpAQCAtMTEzNywxMiArMTE0MCwxMyBAQAogCSAqIE1QSUNzLCBudW0gc291cmNlcyBhcyB3ZWxsLiBPbiBJU1UgTVBJQ3MsIHNvdXJjZXMgYXJlIGNvdW50ZWQKIAkgKiBhcyBJU1VzIGFyZSBhZGRlZAogCSAqLwotCXJlZyA9IG1waWNfcmVhZChtcGljLT5ncmVncywgTVBJQ19JTkZPKEdSRUdfRkVBVFVSRV8wKSk7Ci0JbXBpYy0+bnVtX2NwdXMgPSAoKHJlZyAmIE1QSUNfR1JFR19GRUFUVVJFX0xBU1RfQ1BVX01BU0spCisJZ3JlZ19mZWF0dXJlID0gbXBpY19yZWFkKG1waWMtPmdyZWdzLCBNUElDX0lORk8oR1JFR19GRUFUVVJFXzApKTsKKwltcGljLT5udW1fY3B1cyA9ICgoZ3JlZ19mZWF0dXJlICYgTVBJQ19HUkVHX0ZFQVRVUkVfTEFTVF9DUFVfTUFTSykKIAkJCSAgPj4gTVBJQ19HUkVHX0ZFQVRVUkVfTEFTVF9DUFVfU0hJRlQpICsgMTsKIAlpZiAoaXN1X3NpemUgPT0gMCkKLQkJbXBpYy0+bnVtX3NvdXJjZXMgPSAoKHJlZyAmIE1QSUNfR1JFR19GRUFUVVJFX0xBU1RfU1JDX01BU0spCi0JCQkJICAgICA+PiBNUElDX0dSRUdfRkVBVFVSRV9MQVNUX1NSQ19TSElGVCkgKyAxOworCQltcGljLT5udW1fc291cmNlcyA9CisJCQkoKGdyZWdfZmVhdHVyZSAmIE1QSUNfR1JFR19GRUFUVVJFX0xBU1RfU1JDX01BU0spCisJCQkgPj4gTVBJQ19HUkVHX0ZFQVRVUkVfTEFTVF9TUkNfU0hJRlQpICsgMTsKIAogCS8qIE1hcCB0aGUgcGVyLUNQVSByZWdpc3RlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX2NwdXM7IGkrKykgewpAQCAtMTE2MSw3ICsxMTY1LDcgQEAKIAltcGljLT5pc3VfbWFzayA9ICgxIDw8IG1waWMtPmlzdV9zaGlmdCkgLSAxOwogCiAJLyogRGlzcGxheSB2ZXJzaW9uICovCi0Jc3dpdGNoIChyZWcgJiBNUElDX0dSRUdfRkVBVFVSRV9WRVJTSU9OX01BU0spIHsKKwlzd2l0Y2ggKGdyZWdfZmVhdHVyZSAmIE1QSUNfR1JFR19GRUFUVVJFX1ZFUlNJT05fTUFTSykgewogCWNhc2UgMToKIAkJdmVycyA9ICIxLjAiOwogCQlicmVhazsKQEAgLTEzMjEsNyArMTMyNSw3IEBACiAKIHZvaWQgbXBpY19pcnFfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmkpCiB7Ci0JaW50IGlzX2lwaTsKKwl1bnNpZ25lZCBpbnQgaXNfaXBpOwogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19maW5kKGlycSwgJmlzX2lwaSk7CiAJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNDQsNyArMTM0OCw3IEBACiAKIHVuc2lnbmVkIGludCBtcGljX2lycV9nZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgaXNfaXBpOworCXVuc2lnbmVkIGludCBpc19pcGk7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2ZpbmQoaXJxLCAmaXNfaXBpKTsKIAl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQwNiwxMSArMTQxMCw2IEBACiAJbXBpY19jcHVfd3JpdGUoTVBJQ19JTkZPKENQVV9DVVJSRU5UX1RBU0tfUFJJKSwgcHJpbyk7CiB9CiAKLS8qCi0gKiBYWFg6IHNvbWVvbmUgd2hvIGtub3dzIG1waWMgc2hvdWxkIGNoZWNrIHRoaXMuCi0gKiBkbyB3ZSBuZWVkIHRvIGVvaSB0aGUgaXBpIGluY2x1ZGluZyBmb3Iga2V4ZWMgY3B1IGhlcmUgKHNlZSB4aWNzIGNvbW1lbnRzKT8KLSAqIG9yIGNhbiB3ZSByZXNldCB0aGUgbXBpYyBpbiB0aGUgbmV3IGtlcm5lbD8KLSAqLwogdm9pZCBtcGljX3RlYXJkb3duX3RoaXNfY3B1KGludCBzZWNvbmRhcnkpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX3ByaW1hcnk7CkBAIC0xNDMwLDYgKzE0MjksMTAgQEAKIAogCS8qIFNldCBjdXJyZW50IHByb2Nlc3NvciBwcmlvcml0eSB0byBtYXggKi8KIAltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAweGYpOworCS8qIFdlIG5lZWQgdG8gRU9JIHRoZSBJUEkgc2luY2Ugbm90IGFsbCBwbGF0Zm9ybXMgcmVzZXQgdGhlIE1QSUMKKwkgKiBvbiBib290IGFuZCBuZXcgaW50ZXJydXB0cyB3b3VsZG4ndCBnZXQgZGVsaXZlcmVkIG90aGVyd2lzZS4KKwkgKi8KKwltcGljX2VvaShtcGljKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKaW5kZXggZDZiZmRhMy4uMzNjYmZiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCkBAIC05NSw3ICs5NSw2IEBACiAJdW5zaWduZWQgaW50IHZpcnE7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JdTY0IGFkZHI7CiAKIAlwcl9kZWJ1ZygicGFzZW1pX21zaV9zZXR1cF9tc2lfaXJxcywgcGRldiAlcCBudmVjICVkIHR5cGUgJWRcbiIsCiAJCSBwZGV2LCBudmVjLCB0eXBlKTsKQEAgLTEzMiw4ICsxMzEsOCBAQAogCQlzZXRfaXJxX2NoaXAodmlycSwgJm1waWNfcGFzZW1pX21zaV9jaGlwKTsKIAkJc2V0X2lycV90eXBlKHZpcnEsIElSUV9UWVBFX0VER0VfUklTSU5HKTsKIAotCQlwcl9kZWJ1ZygicGFzZW1pX21zaTogYWxsb2NhdGVkIHZpcnEgMHgleCAoaHcgMHglbHgpIGFkZHIgMHglbHhcbiIsCi0JCQkgIHZpcnEsIGh3aXJxLCBhZGRyKTsKKwkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JWx4KSBhZGRyIDB4JXhcbiIsCisJCQkgIHZpcnEsIGh3aXJxLCBtc2cuYWRkcmVzc19sbyk7CiAKIAkJLyogTGlrZXdpc2UsIHRoZSBkZXZpY2Ugd3JpdGVzIFswLi4uNTExXSBpbnRvIHRoZSB0YXJnZXQKIAkJICogcmVnaXN0ZXIgdG8gZ2VuZXJhdGUgTVNJIFs1MTIuLi4xMDIzXQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCmluZGV4IGVmZGEwMDIuLjA0N2IzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiYmxvY2staW5kZXgiLCBOVUxMKTsKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOwogCWlmICghcHJvcCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcG9ydF9udW1iZXIgPSAqKGludCAqKXByb3A7CkBAIC0xMzYsNiArMTM2LDcgQEAKIAogCXBkYXRhLmNhY2hlX21nbXQgPSAxOyAvKiBBbGwgY3VycmVudCByZXZzIG5lZWQgdGhpcyBzZXQgKi8KIAorCXBkYXRhLm1heF9pZGxlID0gNDA7IC8qIGRlZmF1bHQgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibWF4X2lkbGUiLCBOVUxMKTsKIAlpZiAocHJvcCkKIAkJcGRhdGEubWF4X2lkbGUgPSAqcHJvcDsKQEAgLTIwNSwzMCArMjA2LDI0IEBACiAvKgogICogQ3JlYXRlIG12NjR4NjBfZXRoIHBsYXRmb3JtIGRldmljZXMKICAqLwotc3RhdGljIGludCBfX2luaXQgZXRoX3JlZ2lzdGVyX3NoYXJlZF9wZGV2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIF9faW5pdCBtdjY0eDYwX2V0aF9yZWdpc3Rlcl9zaGFyZWRfcGRldigKKwkJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCByZXNvdXJjZSByWzFdOwogCWludCBlcnI7CiAKLQlucCA9IG9mX2dldF9wYXJlbnQobnApOwotCWlmICghbnApCi0JCXJldHVybiAtRU5PREVWOwotCiAJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJbMF0pOwotCW9mX25vZGVfcHV0KG5wKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoTVY2NDNYWF9FVEhfU0hBUkVEX05BTUUsIDAsCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoTVY2NDNYWF9FVEhfU0hBUkVEX05BTUUsIGlkLAogCQkJCQkgICAgICAgciwgMSk7Ci0JaWYgKElTX0VSUihwZGV2KSkKLQkJcmV0dXJuIFBUUl9FUlIocGRldik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGRldjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbXY2NHg2MF9ldGhfZGV2aWNlX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpZCkKK3N0YXRpYyBpbnQgX19pbml0IG12NjR4NjBfZXRoX2RldmljZV9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaWQsCisJCQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoYXJlZF9wZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSByWzFdOwogCXN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHBkYXRhOwpAQCAtMjM5LDE2ICsyMzQsMTIgQEAKIAljb25zdCBwaGFuZGxlICpwaDsKIAlpbnQgZXJyOwogCi0JLyogb25seSByZWdpc3RlciB0aGUgc2hhcmVkIHBsYXRmb3JtIGRldmljZSB0aGUgZmlyc3QgdGltZSB0aHJvdWdoICovCi0JaWYgKGlkID09IDAgJiYgKGVyciA9IGV0aF9yZWdpc3Rlcl9zaGFyZWRfcGRldihucCkpKQotCQlyZXR1cm4gZXJyOwotCiAJbWVtc2V0KHIsIDAsIHNpemVvZihyKSk7CiAJb2ZfaXJxX3RvX3Jlc291cmNlKG5wLCAwLCAmclswXSk7CiAKIAltZW1zZXQoJnBkYXRhLCAwLCBzaXplb2YocGRhdGEpKTsKIAotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJibG9jay1pbmRleCIsIE5VTEwpOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKIAlpZiAoIXByb3ApCiAJCXJldHVybiAtRU5PREVWOwogCXBkYXRhLnBvcnRfbnVtYmVyID0gKnByb3A7CkBAIC0zMDEsNyArMjkyLDcgQEAKIAogCW9mX25vZGVfcHV0KHBoeSk7CiAKLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKE1WNjQzWFhfRVRIX05BTUUsIHBkYXRhLnBvcnRfbnVtYmVyKTsKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKE1WNjQzWFhfRVRIX05BTUUsIGlkKTsKIAlpZiAoIXBkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNDUsMjEgKzMzNiwxOSBAQAogCiAJbWVtc2V0KCZwZGF0YSwgMCwgc2l6ZW9mKHBkYXRhKSk7CiAKKwlwZGF0YS5mcmVxX20gPSA4OwkvKiBkZWZhdWx0ICovCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZyZXFfbSIsIE5VTEwpOwogCWlmICghcHJvcCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcGRhdGEuZnJlcV9tID0gKnByb3A7CiAKKwlwZGF0YS5mcmVxX20gPSAzOwkvKiBkZWZhdWx0ICovCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZyZXFfbiIsIE5VTEwpOwogCWlmICghcHJvcCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcGRhdGEuZnJlcV9uID0gKnByb3A7CiAKLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAidGltZW91dCIsIE5VTEwpOwotCWlmIChwcm9wKQotCQlwZGF0YS50aW1lb3V0ID0gKnByb3A7Ci0JZWxzZQotCQlwZGF0YS50aW1lb3V0ID0gMTAwMDsJLyogMSBzZWNvbmQgKi8KKwlwZGF0YS50aW1lb3V0ID0gMTAwMDsJCQkJLyogZGVmYXVsdDogMSBzZWNvbmQgKi8KIAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLCBpZCk7CiAJaWYgKCFwZGV2KQpAQCAtNDAxLDEwICszOTAsNyBAQAogCiAJbWVtc2V0KCZwZGF0YSwgMCwgc2l6ZW9mKHBkYXRhKSk7CiAKLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAidGltZW91dCIsIE5VTEwpOwotCWlmICghcHJvcCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JcGRhdGEudGltZW91dCA9ICpwcm9wOworCXBkYXRhLnRpbWVvdXQgPSAxMDsJCQkvKiBEZWZhdWx0OiAxMCBzZWNvbmRzICovCiAKIAlucCA9IG9mX2dldF9wYXJlbnQobnApOwogCWlmICghbnApCkBAIC00NDEsMjcgKzQyNyw0MyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtdjY0eDYwX2RldmljZV9zZXR1cCh2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOwotCWludCBpZDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqbnAyOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IGlkLCBpZDI7CiAJaW50IGVycjsKIAogCWlkID0gMDsKLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJzZXJpYWwiLCAibWFydmVsbCxtcHNjIikKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJzZXJpYWwiLCAibWFydmVsbCxtdjY0MzYwLW1wc2MiKQogCQlpZiAoKGVyciA9IG12NjR4NjBfbXBzY19kZXZpY2Vfc2V0dXAobnAsIGlkKyspKSkKIAkJCWdvdG8gZXJyb3I7CiAKIAlpZCA9IDA7Ci0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAibmV0d29yayIsICJtYXJ2ZWxsLG12NjR4NjAtZXRoIikKLQkJaWYgKChlcnIgPSBtdjY0eDYwX2V0aF9kZXZpY2Vfc2V0dXAobnAsIGlkKyspKSkKKwlpZDIgPSAwOworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgIm1hcnZlbGwsbXY2NDM2MC1ldGgtZ3JvdXAiKSB7CisJCXBkZXYgPSBtdjY0eDYwX2V0aF9yZWdpc3Rlcl9zaGFyZWRfcGRldihucCwgaWQrKyk7CisJCWlmIChJU19FUlIocGRldikpIHsKKwkJCWVyciA9IFBUUl9FUlIocGRldik7CiAJCQlnb3RvIGVycm9yOworCQl9CisJCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIG5wMikgeworCQkJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucDIsCisJCQkJCSJtYXJ2ZWxsLG12NjQzNjAtZXRoIikpCisJCQkJY29udGludWU7CisJCQllcnIgPSBtdjY0eDYwX2V0aF9kZXZpY2Vfc2V0dXAobnAyLCBpZDIrKywgcGRldik7CisJCQlpZiAoZXJyKSB7CisJCQkJb2Zfbm9kZV9wdXQobnAyKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9CisJfQogCiAJaWQgPSAwOwotCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgImkyYyIsICJtYXJ2ZWxsLG12NjR4NjAtaTJjIikKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJpMmMiLCAibWFydmVsbCxtdjY0MzYwLWkyYyIpCiAJCWlmICgoZXJyID0gbXY2NHg2MF9pMmNfZGV2aWNlX3NldHVwKG5wLCBpZCsrKSkpCiAJCQlnb3RvIGVycm9yOwogCiAJLyogc3VwcG9ydCB1cCB0byBvbmUgd2F0Y2hkb2cgdGltZXIgKi8KLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAibWFydmVsbCxtdjY0eDYwLXdkdCIpOworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJtYXJ2ZWxsLG12NjQzNjAtd2R0Iik7CiAJaWYgKG5wKSB7CiAJCWlmICgoZXJyID0gbXY2NHg2MF93ZHRfZGV2aWNlX3NldHVwKG5wLCBpZCkpKQogCQkJZ290byBlcnJvcjsKQEAgLTQ4OSwxMCArNDkxLDEwIEBACiAJaWYgKCFucCkKIAkJZ290byBub3RfbXBzYzsKIAotCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJtYXJ2ZWxsLG1wc2MiKSkKKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAibWFydmVsbCxtdjY0MzYwLW1wc2MiKSkKIAkJZ290byBub3RfbXBzYzsKIAotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJibG9jay1pbmRleCIsIE5VTEwpOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjZWxsLWluZGV4IiwgTlVMTCk7CiAJaWYgKCFwcm9wKQogCQlnb3RvIG5vdF9tcHNjOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGNpLmMKaW5kZXggZDIxYWI4Zi4uMTQ1NjAxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9wY2kuYwpAQCAtODYsMTQgKzg2LDE0IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAljb25zdCB1bnNpZ25lZCBpbnQgKnByb3A7CiAKLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG12NjR4NjAiKTsKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG12NjQzNjAiKTsKIAlpZiAoIW5wKQogCQlyZXR1cm4gMDsKIAogCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJoc19yZWdfdmFsaWQiLCBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CiAKLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWFydmVsbCxtdjY0eDYwIiwgMCwgTlVMTCwgMCk7CisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1hcnZlbGwsbXY2NDM2MCIsIDAsIE5VTEwsIDApOwogCWlmIChJU19FUlIocGRldikpCiAJCXJldHVybiBQVFJfRVJSKHBkZXYpOwogCkBAIC0xNjYsNiArMTY2LDYgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgIm1hcnZlbGwsbXY2NHg2MC1wY2kiKQorCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJtYXJ2ZWxsLG12NjQzNjAtcGNpIikKIAkJbXY2NHg2MF9hZGRfYnJpZGdlKG5wKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYwppbmRleCAxOWU2ZWYyLi4yYWE0ZWQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BpYy5jCkBAIC0yMzgsMTMgKzIzOCwxMyBAQAogCWNvbnN0IHVuc2lnbmVkIGludCAqcmVnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG12NjR4NjAtZ3BwIik7CisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibWFydmVsbCxtdjY0MzYwLWdwcCIpOwogCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsICZzaXplKTsKIAlwYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCByZWcpOwogCW12NjR4NjBfZ3BwX3JlZ19iYXNlID0gaW9yZW1hcChwYWRkciwgcmVnWzFdKTsKIAlvZl9ub2RlX3B1dChucCk7CiAKLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG12NjR4NjAtcGljIik7CisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibWFydmVsbCxtdjY0MzYwLXBpYyIpOwogCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsICZzaXplKTsKIAlwYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCByZWcpOwogCW12NjR4NjBfaXJxX3JlZ19iYXNlID0gaW9yZW1hcChwYWRkciwgcmVnWzFdKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF91ZGJnLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfdWRiZy5jCmluZGV4IDM1Yzc3YzcuLmNjZGIzYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF91ZGJnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3VkYmcuYwpAQCAtODUsNyArODUsNyBAQAogCWlmICghc3Rkb3V0KQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJzZXJpYWwiLCAibWFydmVsbCxtcHNjIikgeworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInNlcmlhbCIsICJtYXJ2ZWxsLG12NjQzNjAtbXBzYyIpIHsKIAkJaWYgKG5wID09IHN0ZG91dCkKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKaW5kZXggNWFiZmNkMS4uMTgxNGFkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKQEAgLTUyNyw2ICs1MjcsNyBAQAogICoKICAqIGlibSxwbGItcGNpZXgtNDQwc3BlCiAgKiBpYm0scGxiLXBjaWV4LTQwNWV4CisgKiBpYm0scGxiLXBjaWV4LTQ2MGV4CiAgKgogICogQW55dGhpbmcgZWxzZSB3aWxsIGJlIHJlamVjdGVkIGZvciBub3cgYXMgdGhleSBhcmUgYWxsIHN1YnRseQogICogZGlmZmVyZW50IHVuZm9ydHVuYXRlbHkuCkBAIC02NDUsNyArNjQ2LDcgQEAKIAlpbnQgdGltZV9vdXQgPSAyMDsKIAogCS8qIFNldCBQTEwgY2xvY2sgcmVjZWl2ZXIgdG8gTFZQRUNMICovCi0JbXRkY3JpKFNEUjAsIFBFU0RSMF9QTExMQ1QxLCBtZmRjcmkoU0RSMCwgUEVTRFIwX1BMTExDVDEpIHwgMSA8PCAyOCk7CisJZGNyaV9jbHJzZXQoU0RSMCwgUEVTRFIwX1BMTExDVDEsIDAsIDEgPDwgMjgpOwogCiAJLyogU2hvdWxkbid0IHdlIGRvIGFsbCB0aGUgY2FsaWJyYXRpb24gc3R1ZmYgZXRjLi4uIGhlcmUgPyAqLwogCWlmIChwcGM0NDBzcGVfcGNpZXhfY2hlY2tfcmVzZXQobnApKQpAQCAtNjU5LDggKzY2MCw3IEBACiAJfQogCiAJLyogRGUtYXNzZXJ0IHJlc2V0IG9mIFBDSWUgUExMLCB3YWl0IGZvciBsb2NrICovCi0JbXRkY3JpKFNEUjAsIFBFU0RSMF9QTExMQ1QxLAotCSAgICAgICBtZmRjcmkoU0RSMCwgUEVTRFIwX1BMTExDVDEpICYgfigxIDw8IDI0KSk7CisJZGNyaV9jbHJzZXQoU0RSMCwgUEVTRFIwX1BMTExDVDEsIDEgPDwgMjQsIDApOwogCXVkZWxheSgzKTsKIAogCXdoaWxlICh0aW1lX291dCkgewpAQCAtNzEyLDkgKzcxMiw4IEBACiAJCW10ZGNyaShTRFIwLCBwb3J0LT5zZHJfYmFzZSArIFBFU0RSbl80NDBTUEVfSFNTTDdTRVQxLAogCQkgICAgICAgMHgzNTAwMDAwMCk7CiAJfQotCXZhbCA9IG1mZGNyaShTRFIwLCBwb3J0LT5zZHJfYmFzZSArIFBFU0RSbl9SQ1NTRVQpOwotCW10ZGNyaShTRFIwLCBwb3J0LT5zZHJfYmFzZSArIFBFU0RSbl9SQ1NTRVQsCi0JICAgICAgICh2YWwgJiB+KDEgPDwgMjQgfCAxIDw8IDE2KSkgfCAxIDw8IDEyKTsKKwlkY3JpX2NscnNldChTRFIwLCBwb3J0LT5zZHJfYmFzZSArIFBFU0RSbl9SQ1NTRVQsCisJCQkoMSA8PCAyNCkgfCAoMSA8PCAxNiksIDEgPDwgMTIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NzUsNiArNzc0LDExNSBAQAogCS5zZXR1cF91dGwJPSBwcGM0NDBzcGVCX3BjaWV4X2luaXRfdXRsLAogfTsKIAorc3RhdGljIGludCBfX2luaXQgcHBjNDYwZXhfcGNpZXhfY29yZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJLyogTm90aGluZyB0byBkbywgcmV0dXJuIDIgcG9ydHMgKi8KKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwcGM0NjBleF9wY2lleF9pbml0X3BvcnRfaHcoc3RydWN0IHBwYzR4eF9wY2lleF9wb3J0ICpwb3J0KQoreworCXUzMiB2YWw7CisJdTMyIHV0bHNldDE7CisKKwlpZiAocG9ydC0+ZW5kcG9pbnQpCisJCXZhbCA9IFBUWVBFX0xFR0FDWV9FTkRQT0lOVCA8PCAyMDsKKwllbHNlCisJCXZhbCA9IFBUWVBFX1JPT1RfUE9SVCA8PCAyMDsKKworCWlmIChwb3J0LT5pbmRleCA9PSAwKSB7CisJCXZhbCB8PSBMTktXX1gxIDw8IDEyOworCQl1dGxzZXQxID0gMHgyMDAwMDAwMDsKKwl9IGVsc2UgeworCQl2YWwgfD0gTE5LV19YNCA8PCAxMjsKKwkJdXRsc2V0MSA9IDB4MjAxMDExMDE7CisJfQorCisJbXRkY3JpKFNEUjAsIHBvcnQtPnNkcl9iYXNlICsgUEVTRFJuX0RMUFNFVCwgdmFsKTsKKwltdGRjcmkoU0RSMCwgcG9ydC0+c2RyX2Jhc2UgKyBQRVNEUm5fVVRMU0VUMSwgdXRsc2V0MSk7CisJbXRkY3JpKFNEUjAsIHBvcnQtPnNkcl9iYXNlICsgUEVTRFJuX1VUTFNFVDIsIDB4MDEyMTAwMDApOworCisJc3dpdGNoIChwb3J0LT5pbmRleCkgeworCWNhc2UgMDoKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMF80NjBFWF9MMENEUkNUTCwgMHgwMDAwMzIzMCk7CisJCW10ZGNyaShTRFIwLCBQRVNEUjBfNDYwRVhfTDBEUlYsIDB4MDAwMDAxMzYpOworCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX0wwQ0xLLCAweDAwMDAwMDA2KTsKKworCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX1BIWV9DVExfUlNULDB4MTAwMDAwMDApOworCQlicmVhazsKKworCWNhc2UgMToKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMENEUkNUTCwgMHgwMDAwMzIzMCk7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDFDRFJDVEwsIDB4MDAwMDMyMzApOworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wyQ0RSQ1RMLCAweDAwMDAzMjMwKTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MM0NEUkNUTCwgMHgwMDAwMzIzMCk7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDBEUlYsIDB4MDAwMDAxMzYpOworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wxRFJWLCAweDAwMDAwMTM2KTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMkRSViwgMHgwMDAwMDEzNik7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDNEUlYsIDB4MDAwMDAxMzYpOworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wwQ0xLLCAweDAwMDAwMDA2KTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMUNMSywgMHgwMDAwMDAwNik7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDJDTEssIDB4MDAwMDAwMDYpOworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wzQ0xLLCAweDAwMDAwMDA2KTsKKworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX1BIWV9DVExfUlNULDB4MTAwMDAwMDApOworCQlicmVhazsKKwl9CisKKwltdGRjcmkoU0RSMCwgcG9ydC0+c2RyX2Jhc2UgKyBQRVNEUm5fUkNTU0VULAorCSAgICAgICBtZmRjcmkoU0RSMCwgcG9ydC0+c2RyX2Jhc2UgKyBQRVNEUm5fUkNTU0VUKSB8CisJICAgICAgIChQRVNEUnhfUkNTU0VUX1JTVEdVIHwgUEVTRFJ4X1JDU1NFVF9SU1RQWU4pKTsKKworCS8qIFBvbGwgZm9yIFBIWSByZXNldCAqLworCS8qIFhYWCBGSVhNRSBhZGQgdGltZW91dCAqLworCXN3aXRjaCAocG9ydC0+aW5kZXgpIHsKKwljYXNlIDA6CisJCXdoaWxlICghKG1mZGNyaShTRFIwLCBQRVNEUjBfNDYwRVhfUlNUU1RBKSAmIDB4MSkpCisJCQl1ZGVsYXkoMTApOworCQlicmVhazsKKwljYXNlIDE6CisJCXdoaWxlICghKG1mZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfUlNUU1RBKSAmIDB4MSkpCisJCQl1ZGVsYXkoMTApOworCQlicmVhazsKKwl9CisKKwltdGRjcmkoU0RSMCwgcG9ydC0+c2RyX2Jhc2UgKyBQRVNEUm5fUkNTU0VULAorCSAgICAgICAobWZkY3JpKFNEUjAsIHBvcnQtPnNkcl9iYXNlICsgUEVTRFJuX1JDU1NFVCkgJgorCQl+KFBFU0RSeF9SQ1NTRVRfUlNUR1UgfCBQRVNEUnhfUkNTU0VUX1JTVERMKSkgfAorCSAgICAgICBQRVNEUnhfUkNTU0VUX1JTVFBZTik7CisKKwlwb3J0LT5oYXNfaWJwcmUgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHBjNDYwZXhfcGNpZXhfaW5pdF91dGwoc3RydWN0IHBwYzR4eF9wY2lleF9wb3J0ICpwb3J0KQoreworCWRjcl93cml0ZShwb3J0LT5kY3JzLCBEQ1JPX1BFR1BMX1NQRUNJQUwsIDB4MCk7CisKKwkvKgorCSAqIFNldCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIHRoZW4gYXNzZXJ0IFZSQiBhbmQgVFhFLgorCSAqLworCW91dF9iZTMyKHBvcnQtPnV0bF9iYXNlICsgUEVVVExfUEJDVEwsCTB4MDgwMDAwMGMpOworCW91dF9iZTMyKHBvcnQtPnV0bF9iYXNlICsgUEVVVExfT1VUVFIsCTB4MDgwMDAwMDApOworCW91dF9iZTMyKHBvcnQtPnV0bF9iYXNlICsgUEVVVExfSU5UUiwJMHgwMjAwMDAwMCk7CisJb3V0X2JlMzIocG9ydC0+dXRsX2Jhc2UgKyBQRVVUTF9PUERCU1osCTB4MDQwMDAwMDApOworCW91dF9iZTMyKHBvcnQtPnV0bF9iYXNlICsgUEVVVExfUEJCU1osCTB4MDAwMDAwMDApOworCW91dF9iZTMyKHBvcnQtPnV0bF9iYXNlICsgUEVVVExfSVBIQlNaLAkweDAyMDAwMDAwKTsKKwlvdXRfYmUzMihwb3J0LT51dGxfYmFzZSArIFBFVVRMX0lQREJTWiwJMHgwNDAwMDAwMCk7CisJb3V0X2JlMzIocG9ydC0+dXRsX2Jhc2UgKyBQRVVUTF9SQ0lSUUVOLDB4MDBmMDAwMDApOworCW91dF9iZTMyKHBvcnQtPnV0bF9iYXNlICsgUEVVVExfUENUTCwJMHg4MDgwMDA2Nik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwcGM0eHhfcGNpZXhfaHdvcHMgcHBjNDYwZXhfcGNpZV9od29wcyBfX2luaXRkYXRhID0KK3sKKwkuY29yZV9pbml0CT0gcHBjNDYwZXhfcGNpZXhfY29yZV9pbml0LAorCS5wb3J0X2luaXRfaHcJPSBwcGM0NjBleF9wY2lleF9pbml0X3BvcnRfaHcsCisJLnNldHVwX3V0bAk9IHBwYzQ2MGV4X3BjaWV4X2luaXRfdXRsLAorfTsKKwogI2VuZGlmIC8qIENPTkZJR180NHggKi8KIAogI2lmZGVmIENPTkZJR180MHgKQEAgLTgzMCwxNyArOTM4LDkgQEAKIAkgKiBQQ0llIGJvYXJkcyBkb24ndCBzaG93IHRoaXMgcHJvYmxlbS4KIAkgKiBUaGlzIGhhcyB0byBiZSByZS10ZXN0ZWQgYW5kIGZpeGVkIGluIGEgbGF0ZXIgcmVsZWFzZSEKIAkgKi8KLSNpZiAwIC8qIFhYWCBGSVhNRTogTm90IHJlc2V0dGluZyB0aGUgUEhZIHdpbGwgbGVhdmUgYWxsIHJlc291cmNlcwotICAgICAgICogY29uZmlndXJlZCBhcyBkb25lIHByZXZpb3VzbHkgYnkgVS1Cb290LiBUaGVuIExpbnV4IHdpbGwgY3VycmVudGx5Ci0gICAgICAgKiBub3QgcmVhc3NpZ24gdGhlbS4gU28gdGhlIFBIWSByZXNldCBpcyBub3cgZG9uZSBhbHdheXMuIFRoaXMgd2lsbAotICAgICAgICogbGVhZCB0byBwcm9ibGVtcyB3aXRoIHRoZSBBdGhlcm9zIFBDSWUgYm9hcmQgYWdhaW4uCi0gICAgICAgKi8KIAl2YWwgPSBtZmRjcmkoU0RSMCwgcG9ydC0+c2RyX2Jhc2UgKyBQRVNEUm5fTE9PUCk7CiAJaWYgKCEodmFsICYgMHgwMDAwMTAwMCkpCiAJCXBwYzQwNWV4X3BjaWVfcGh5X3Jlc2V0KHBvcnQpOwotI2Vsc2UKLQlwcGM0MDVleF9wY2llX3BoeV9yZXNldChwb3J0KTsKLSNlbmRpZgogCiAJZGNyX3dyaXRlKHBvcnQtPmRjcnMsIERDUk9fUEVHUExfQ0ZHLCAweDEwMDAwMDAwKTsgIC8qIGd1YXJkZWQgb24gKi8KIApAQCAtODk2LDYgKzk5Niw4IEBACiAJCWVsc2UKIAkJCXBwYzR4eF9wY2lleF9od29wcyA9ICZwcGM0NDBzcGVCX3BjaWVfaHdvcHM7CiAJfQorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxwbGItcGNpZXgtNDYwZXgiKSkKKwkJcHBjNHh4X3BjaWV4X2h3b3BzID0gJnBwYzQ2MGV4X3BjaWVfaHdvcHM7CiAjZW5kaWYgLyogQ09ORklHXzQ0eCAgICAqLwogI2lmZGVmIENPTkZJR180MHgKIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0scGxiLXBjaWV4LTQwNWV4IikpCkBAIC0xMDQyLDggKzExNDQsNyBAQAogCQlwb3J0LT5saW5rID0gMDsKIAl9CiAKLQltdGRjcmkoU0RSMCwgcG9ydC0+c2RyX2Jhc2UgKyBQRVNEUm5fUkNTU0VULAotCSAgICAgICBtZmRjcmkoU0RSMCwgcG9ydC0+c2RyX2Jhc2UgKyBQRVNEUm5fUkNTU0VUKSB8IDEgPDwgMjApOworCWRjcmlfY2xyc2V0KFNEUjAsIHBvcnQtPnNkcl9iYXNlICsgUEVTRFJuX1JDU1NFVCwgMCwgMSA8PCAyMCk7CiAJbXNsZWVwKDEwMCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmgKaW5kZXggMWMwNzkwOC4uZDA0ZTQwYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmgKQEAgLTI3MSw2ICsyNzEsNTkgQEAKICNkZWZpbmUgUEVTRFIxXzQwNUVYX1BIWVNUQQkJMHgwNDRDCiAKIC8qCisgKiA0NjBFWCBhZGRpdGlvbmFsIERDUnMKKyAqLworI2RlZmluZSBQRVNEUjBfNDYwRVhfTDBCSVNUCQkweDAzMDgKKyNkZWZpbmUgUEVTRFIwXzQ2MEVYX0wwQklTVFNUUwkJMHgwMzA5CisjZGVmaW5lIFBFU0RSMF80NjBFWF9MMENEUkNUTAkJMHgwMzBBCisjZGVmaW5lIFBFU0RSMF80NjBFWF9MMERSVgkJMHgwMzBCCisjZGVmaW5lIFBFU0RSMF80NjBFWF9MMFJFQwkJMHgwMzBDCisjZGVmaW5lIFBFU0RSMF80NjBFWF9MMExQQgkJMHgwMzBECisjZGVmaW5lIFBFU0RSMF80NjBFWF9MMENMSwkJMHgwMzBFCisjZGVmaW5lIFBFU0RSMF80NjBFWF9QSFlfQ1RMX1JTVAkweDAzMEYKKyNkZWZpbmUgUEVTRFIwXzQ2MEVYX1JTVFNUQQkJMHgwMzEwCisjZGVmaW5lIFBFU0RSMF80NjBFWF9PQlMJCTB4MDMxMQorI2RlZmluZSBQRVNEUjBfNDYwRVhfTDBFUlJDCQkweDAzMjAKKworI2RlZmluZSBQRVNEUjFfNDYwRVhfTDBCSVNUCQkweDAzNDgKKyNkZWZpbmUgUEVTRFIxXzQ2MEVYX0wxQklTVAkJMHgwMzQ5CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMkJJU1QJCTB4MDM0QQorI2RlZmluZSBQRVNEUjFfNDYwRVhfTDNCSVNUCQkweDAzNEIKKyNkZWZpbmUgUEVTRFIxXzQ2MEVYX0wwQklTVFNUUwkJMHgwMzRDCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMUJJU1RTVFMJCTB4MDM0RAorI2RlZmluZSBQRVNEUjFfNDYwRVhfTDJCSVNUU1RTCQkweDAzNEUKKyNkZWZpbmUgUEVTRFIxXzQ2MEVYX0wzQklTVFNUUwkJMHgwMzRGCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMENEUkNUTAkJMHgwMzUwCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMUNEUkNUTAkJMHgwMzUxCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMkNEUkNUTAkJMHgwMzUyCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MM0NEUkNUTAkJMHgwMzUzCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMERSVgkJMHgwMzU0CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMURSVgkJMHgwMzU1CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMkRSVgkJMHgwMzU2CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MM0RSVgkJMHgwMzU3CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMFJFQwkJMHgwMzU4CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMVJFQwkJMHgwMzU5CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMlJFQwkJMHgwMzVBCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MM1JFQwkJMHgwMzVCCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMExQQgkJMHgwMzVDCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMUxQQgkJMHgwMzVECisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMkxQQgkJMHgwMzVFCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MM0xQQgkJMHgwMzVGCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMENMSwkJMHgwMzYwCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMUNMSwkJMHgwMzYxCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMkNMSwkJMHgwMzYyCisjZGVmaW5lIFBFU0RSMV80NjBFWF9MM0NMSwkJMHgwMzYzCisjZGVmaW5lIFBFU0RSMV80NjBFWF9QSFlfQ1RMX1JTVAkweDAzNjQKKyNkZWZpbmUgUEVTRFIxXzQ2MEVYX1JTVFNUQQkJMHgwMzY1CisjZGVmaW5lIFBFU0RSMV80NjBFWF9PQlMJCTB4MDM2NgorI2RlZmluZSBQRVNEUjFfNDYwRVhfTDBFUlJDCQkweDAzNjgKKyNkZWZpbmUgUEVTRFIxXzQ2MEVYX0wxRVJSQwkJMHgwMzY5CisjZGVmaW5lIFBFU0RSMV80NjBFWF9MMkVSUkMJCTB4MDM2QQorI2RlZmluZSBQRVNEUjFfNDYwRVhfTDNFUlJDCQkweDAzNkIKKyNkZWZpbmUgUEVTRFIwXzQ2MEVYX0lIUzEJCTB4MDM2QworI2RlZmluZSBQRVNEUjBfNDYwRVhfSUhTMgkJMHgwMzZECisKKy8qCiAgKiBPZiB0aGUgYWJvdmUsIHNvbWUgYXJlIGNvbW1vbiBvZmZzZXRzIGZyb20gdGhlIGJhc2UKICAqLwogI2RlZmluZSBQRVNEUm5fVVRMU0VUMQkJCTB4MDAKQEAgLTM1Myw2ICs0MDYsMTIgQEAKICNkZWZpbmUgUEVDRkdfUE9NMkxBTAkJMHgzOTAKICNkZWZpbmUgUEVDRkdfUE9NMkxBSAkJMHgzOTQKIAorLyogU0RSIEJpdCBNYXBwaW5ncyAqLworI2RlZmluZSBQRVNEUnhfUkNTU0VUX0hMRFBMQgkweDEwMDAwMDAwCisjZGVmaW5lIFBFU0RSeF9SQ1NTRVRfUlNUR1UJMHgwMTAwMDAwMAorI2RlZmluZSBQRVNEUnhfUkNTU0VUX1JEWSAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFBFU0RSeF9SQ1NTRVRfUlNUREwgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUEVTRFJ4X1JDU1NFVF9SU1RQWU4gICAgMHgwMDAwMTAwMAogCiBlbnVtCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3NvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMzJhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIElCTS9BTUNDIFBQQzR4eCBTb0Mgc2V0dXAgY29kZQorICoKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyAqCisgKiBMMiBjYWNoZSByb3V0aW5lcyBjbG9uZWQgZnJvbSBhcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMgd2hpY2ggaXM6CisgKiAgIEV1Z2VuZSBTdXJvdmVnaW4gPGV1Z2VuZS5zdXJvdmVnaW5AenVsdHlzLmNvbT4gb3IgPGVic0BlYnNob21lLm5ldD4KKyAqICAgQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwNiBadWx0eXMgVGVjaG5vbG9naWVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9kY3IuaD4KKyNpbmNsdWRlIDxhc20vZGNyLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisKK3N0YXRpYyB1MzIgZGNyYmFzZV9sMmM7CisKKy8qCisgKiBMMi1jYWNoZQorICovCisKKy8qIElzc3VlIEwyQyBkaWFnbm9zdGljIGNvbW1hbmQgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGwyY19kaWFnKHUzMiBhZGRyKQoreworCW10ZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX0FERFIsIGFkZHIpOworCW10ZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX0NNRCwgTDJDX0NNRF9ESUFHKTsKKwl3aGlsZSAoIShtZmRjcihkY3JiYXNlX2wyYyArIERDUk5fTDJDMF9TUikgJiBMMkNfU1JfQ0MpKQorCQk7CisKKwlyZXR1cm4gbWZkY3IoZGNyYmFzZV9sMmMgKyBEQ1JOX0wyQzBfREFUQSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsMmNfZXJyb3JfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJdTMyIHNyID0gbWZkY3IoZGNyYmFzZV9sMmMgKyBEQ1JOX0wyQzBfU1IpOworCisJaWYgKHNyICYgTDJDX1NSX0NQRSkgeworCQkvKiBSZWFkIGNhY2hlIHRyYXBwZWQgYWRkcmVzcyAqLworCQl1MzIgYWRkciA9IGwyY19kaWFnKDB4NDIwMDAwMDApOworCQlwcmludGsoS0VSTl9FTUVSRyAiTDJDOiBDYWNoZSBQYXJpdHkgRXJyb3IsIGFkZHJbMTY6MjZdID0gMHglMDh4XG4iLAorCQkgICAgICAgYWRkcik7CisJfQorCWlmIChzciAmIEwyQ19TUl9UUEUpIHsKKwkJLyogUmVhZCB0YWcgdHJhcHBlZCBhZGRyZXNzICovCisJCXUzMiBhZGRyID0gbDJjX2RpYWcoMHg4MjAwMDAwMCkgPj4gMTY7CisJCXByaW50ayhLRVJOX0VNRVJHICJMMkM6IFRhZyBQYXJpdHkgRXJyb3IsIGFkZHJbMTY6MjZdID0gMHglMDh4XG4iLAorCQkgICAgICAgYWRkcik7CisJfQorCisJLyogQ2xlYXIgcGFyaXR5IGVycm9ycyAqLworCWlmIChzciAmIChMMkNfU1JfQ1BFIHwgTDJDX1NSX1RQRSkpeworCQltdGRjcihkY3JiYXNlX2wyYyArIERDUk5fTDJDMF9BRERSLCAwKTsKKwkJbXRkY3IoZGNyYmFzZV9sMmMgKyBEQ1JOX0wyQzBfQ01ELCBMMkNfQ01EX0NDUCB8IEwyQ19DTURfQ1RFKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FTUVSRyAiTDJDOiBMUlUgZXJyb3JcbiIpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2luaXQgcHBjNHh4X2wyY19wcm9iZSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdTMyIHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaXJxOworCWNvbnN0IHUzMiAqZGNycmVnOworCXUzMiBkY3JiYXNlX2lzcmFtOworCWludCBsZW47CisJY29uc3QgdTMyICpwcm9wOworCXUzMiBsMl9zaXplOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiaWJtLGwyLWNhY2hlIik7CisJaWYgKCFucCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHZXQgbDIgY2FjaGUgc2l6ZSAqLworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjYWNoZS1zaXplIiwgTlVMTCk7CisJaWYgKHByb3AgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBnZXQgY2FjaGUtc2l6ZSFcbiIsIG5wLT5mdWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlsMl9zaXplID0gcHJvcFswXTsKKworCS8qIE1hcCBEQ1JzICovCisJZGNycmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGNyLXJlZyIsICZsZW4pOworCWlmICghZGNycmVnIHx8IChsZW4gIT0gNCAqIHNpemVvZih1MzIpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBnZXQgRENSIHJlZ2lzdGVyIGJhc2UgISIsCisJCSAgICAgICBucC0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGNyYmFzZV9pc3JhbSA9IGRjcnJlZ1swXTsKKwlkY3JiYXNlX2wyYyA9IGRjcnJlZ1syXTsKKworCS8qIEdldCBhbmQgbWFwIGlycSBudW1iZXIgZnJvbSBkZXZpY2UgdHJlZSAqLworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwlpZiAoaXJxID09IE5PX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgImlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogSW5zdGFsbCBlcnJvciBoYW5kbGVyICovCisJaWYgKHJlcXVlc3RfaXJxKGlycSwgbDJjX2Vycm9yX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsICJMMkMiLCAwKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgaW5zdGFsbCBMMkMgZXJyb3IgaGFuZGxlciIKKwkJICAgICAgICIsIGNhY2hlIGlzIG5vdCBlbmFibGVkXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJYXNtIHZvbGF0aWxlICgic3luYyIgOjo6ICJtZW1vcnkiKTsKKworCS8qIERpc2FibGUgU1JBTSAqLworCW10ZGNyKGRjcmJhc2VfaXNyYW0gKyBEQ1JOX1NSQU0wX0RQQywKKwkgICAgICBtZmRjcihkY3JiYXNlX2lzcmFtICsgRENSTl9TUkFNMF9EUEMpICYgflNSQU1fRFBDX0VOQUJMRSk7CisJbXRkY3IoZGNyYmFzZV9pc3JhbSArIERDUk5fU1JBTTBfU0IwQ1IsCisJICAgICAgbWZkY3IoZGNyYmFzZV9pc3JhbSArIERDUk5fU1JBTTBfU0IwQ1IpICYgflNSQU1fU0JDUl9CVV9NQVNLKTsKKwltdGRjcihkY3JiYXNlX2lzcmFtICsgRENSTl9TUkFNMF9TQjFDUiwKKwkgICAgICBtZmRjcihkY3JiYXNlX2lzcmFtICsgRENSTl9TUkFNMF9TQjFDUikgJiB+U1JBTV9TQkNSX0JVX01BU0spOworCW10ZGNyKGRjcmJhc2VfaXNyYW0gKyBEQ1JOX1NSQU0wX1NCMkNSLAorCSAgICAgIG1mZGNyKGRjcmJhc2VfaXNyYW0gKyBEQ1JOX1NSQU0wX1NCMkNSKSAmIH5TUkFNX1NCQ1JfQlVfTUFTSyk7CisJbXRkY3IoZGNyYmFzZV9pc3JhbSArIERDUk5fU1JBTTBfU0IzQ1IsCisJICAgICAgbWZkY3IoZGNyYmFzZV9pc3JhbSArIERDUk5fU1JBTTBfU0IzQ1IpICYgflNSQU1fU0JDUl9CVV9NQVNLKTsKKworCS8qIEVuYWJsZSBMMl9NT0RFIHdpdGhvdXQgSUNVL0RDVSAqLworCXIgPSBtZmRjcihkY3JiYXNlX2wyYyArIERDUk5fTDJDMF9DRkcpICYKKwkJfihMMkNfQ0ZHX0lDVSB8IEwyQ19DRkdfRENVIHwgTDJDX0NGR19TU19NQVNLKTsKKwlyIHw9IEwyQ19DRkdfTDJNIHwgTDJDX0NGR19TU18yNTY7CisJbXRkY3IoZGNyYmFzZV9sMmMgKyBEQ1JOX0wyQzBfQ0ZHLCByKTsKKworCW10ZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX0FERFIsIDApOworCisJLyogSGFyZHdhcmUgQ2xlYXIgQ29tbWFuZCAqLworCW10ZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX0NNRCwgTDJDX0NNRF9IQ0MpOworCXdoaWxlICghKG1mZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX1NSKSAmIEwyQ19TUl9DQykpCisJCTsKKworCS8qIENsZWFyIENhY2hlIFBhcml0eSBhbmQgVGFnIEVycm9ycyAqLworCW10ZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX0NNRCwgTDJDX0NNRF9DQ1AgfCBMMkNfQ01EX0NURSk7CisKKwkvKiBFbmFibGUgNjRHIHNub29wIHJlZ2lvbiBzdGFydGluZyBhdCAwICovCisJciA9IG1mZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX1NOUDApICYKKwkJfihMMkNfU05QX0JBX01BU0sgfCBMMkNfU05QX1NTUl9NQVNLKTsKKwlyIHw9IEwyQ19TTlBfU1NSXzMyRyB8IEwyQ19TTlBfRVNSOworCW10ZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX1NOUDAsIHIpOworCisJciA9IG1mZGNyKGRjcmJhc2VfbDJjICsgRENSTl9MMkMwX1NOUDEpICYKKwkJfihMMkNfU05QX0JBX01BU0sgfCBMMkNfU05QX1NTUl9NQVNLKTsKKwlyIHw9IDB4ODAwMDAwMDAgfCBMMkNfU05QX1NTUl8zMkcgfCBMMkNfU05QX0VTUjsKKwltdGRjcihkY3JiYXNlX2wyYyArIERDUk5fTDJDMF9TTlAxLCByKTsKKworCWFzbSB2b2xhdGlsZSAoInN5bmMiIDo6OiAibWVtb3J5Iik7CisKKwkvKiBFbmFibGUgSUNVL0RDVSBwb3J0cyAqLworCXIgPSBtZmRjcihkY3JiYXNlX2wyYyArIERDUk5fTDJDMF9DRkcpOworCXIgJj0gfihMMkNfQ0ZHX0RDV19NQVNLIHwgTDJDX0NGR19QTVVYX01BU0sgfCBMMkNfQ0ZHX1BNSU0KKwkgICAgICAgfCBMMkNfQ0ZHX1RQRUkgfCBMMkNfQ0ZHX0NQRUkgfCBMMkNfQ0ZHX05BTSB8IEwyQ19DRkdfTkJSTSk7CisJciB8PSBMMkNfQ0ZHX0lDVSB8IEwyQ19DRkdfRENVIHwgTDJDX0NGR19UUEMgfCBMMkNfQ0ZHX0NQQyB8IEwyQ19DRkdfRlJBTgorCQl8IEwyQ19DRkdfQ1BJTSB8IEwyQ19DRkdfVFBJTSB8IEwyQ19DRkdfTElNIHwgTDJDX0NGR19TTUNNOworCisJLyogQ2hlY2sgZm9yIDQ2MEVYL0dUIHNwZWNpYWwgaGFuZGxpbmcgKi8KKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sbDItY2FjaGUtNDYwZXgiKSkKKwkJciB8PSBMMkNfQ0ZHX1JEQlc7CisKKwltdGRjcihkY3JiYXNlX2wyYyArIERDUk5fTDJDMF9DRkcsIHIpOworCisJYXNtIHZvbGF0aWxlICgic3luYzsgaXN5bmMiIDo6OiAibWVtb3J5Iik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJWRrIEwyLWNhY2hlIGVuYWJsZWRcbiIsIGwyX3NpemUgPj4gMTApOworCisJb2Zfbm9kZV9wdXQobnApOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwcGM0eHhfbDJjX3Byb2JlKTsKKworLyoKKyAqIEF0IHByZXNlbnQsIHRoaXMgcm91dGluZSBqdXN0IGFwcGxpZXMgYSBzeXN0ZW0gcmVzZXQuCisgKi8KK3ZvaWQgcHBjNHh4X3Jlc2V0X3N5c3RlbShjaGFyICpjbWQpCit7CisJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9SU1RfU1lTVEVNKTsKKwl3aGlsZSAoMSkKKwkJOwkvKiBKdXN0IGluIGNhc2UgdGhlIHJlc2V0IGRvZXNuJ3Qgd29yayAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKaW5kZXggNmVmYmQ1ZS4uY2ZmNTUwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCkBAIC01NSw3ICs1NSw3IEBACiAvKiBXZSBhbGxvY2F0ZSB0aGlzIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkIGFsbW9zdCBleGNsdXNpdmVseSBmb3IKICAqIHRoZSBjb21tdW5pY2F0aW9uIHByb2Nlc3NvciBkZXZpY2VzLgogICovCi1zdHJ1Y3QgcWVfaW1tYXAgKnFlX2ltbXIgPSBOVUxMOworc3RydWN0IHFlX2ltbWFwIF9faW9tZW0gKnFlX2ltbXI7CiBFWFBPUlRfU1lNQk9MKHFlX2ltbXIpOwogCiBzdGF0aWMgc3RydWN0IHFlX3NudW0gc251bXNbUUVfTlVNX09GX1NOVU1dOwkvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgU05VTXMgKi8KQEAgLTE1Niw3ICsxNTYsNyBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGJyZ19jbGsgPSAwOwogCi11bnNpZ25lZCBpbnQgZ2V0X2JyZ19jbGsodm9pZCkKK3Vuc2lnbmVkIGludCBxZV9nZXRfYnJnX2Nsayh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcWU7CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xODAsNiArMTgwLDcgQEAKIAogCXJldHVybiBicmdfY2xrOwogfQorRVhQT1JUX1NZTUJPTChxZV9nZXRfYnJnX2Nsayk7CiAKIC8qIFByb2dyYW0gdGhlIEJSRyB0byB0aGUgZ2l2ZW4gc2FtcGxpbmcgcmF0ZSBhbmQgbXVsdGlwbGllcgogICoKQEAgLTE5Nyw3ICsxOTgsNyBAQAogCWlmICgoYnJnIDwgUUVfQlJHMSkgfHwgKGJyZyA+IFFFX0JSRzE2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkaXZpc29yID0gZ2V0X2JyZ19jbGsoKSAvIChyYXRlICogbXVsdGlwbGllcik7CisJZGl2aXNvciA9IHFlX2dldF9icmdfY2xrKCkgLyAocmF0ZSAqIG11bHRpcGxpZXIpOwogCiAJaWYgKGRpdmlzb3IgPiBRRV9CUkdDX0RJVklTT1JfTUFYICsgMSkgewogCQlkaXYxNiA9IFFFX0JSR0NfRElWMTY7CkBAIC00MTUsMTIgKzQxNiw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHFlX211cmFtX2R1bXApOwogCi12b2lkICpxZV9tdXJhbV9hZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXJldHVybiAodm9pZCAqKSZxZV9pbW1yLT5tdXJhbVtvZmZzZXRdOwotfQotRVhQT1JUX1NZTUJPTChxZV9tdXJhbV9hZGRyKTsKLQogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIFJJU0NzIHdlIHN1cHBvcnQgKi8KICNkZWZpbmUgTUFYX1FFX1JJU0MgICAgIDIKIApAQCAtNTA5LDcgKzUwNCw3IEBACiAJfQogCiAJLyogVmFsaWRhdGUgc29tZSBvZiB0aGUgZmllbGRzICovCi0JaWYgKChmaXJtd2FyZS0+Y291bnQgPCAxKSB8fCAoZmlybXdhcmUtPmNvdW50ID49IE1BWF9RRV9SSVNDKSkgeworCWlmICgoZmlybXdhcmUtPmNvdW50IDwgMSkgfHwgKGZpcm13YXJlLT5jb3VudCA+IE1BWF9RRV9SSVNDKSkgewogCQlwcmludGsoS0VSTl9FUlIgInFlLWZpcm13YXJlOiBpbnZhbGlkIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC02MDksNyArNjA0LDEwIEBACiAJICogSWYgd2UgaGF2ZW4ndCBjaGVja2VkIHlldCwgYW5kIGEgZHJpdmVyIGhhc24ndCB1cGxvYWRlZCBhIGZpcm13YXJlCiAJICogeWV0LCB0aGVuIGNoZWNrIHRoZSBkZXZpY2UgdHJlZSBmb3IgaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKGluaXRpYWxpemVkIHx8IHFlX2Zpcm13YXJlX3VwbG9hZGVkKQorCWlmIChxZV9maXJtd2FyZV91cGxvYWRlZCkKKwkJcmV0dXJuICZxZV9maXJtd2FyZV9pbmZvOworCisJaWYgKGluaXRpYWxpemVkKQogCQlyZXR1cm4gTlVMTDsKIAogCWluaXRpYWxpemVkID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pby5jCmluZGV4IGU1M2VhNGQuLjkzOTE2YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaW8uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3FlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgogCkBAIC00MSw3ICs0Miw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcG9ydF9yZWdzICpwYXJfaW8gPSBOVUxMOworc3RhdGljIHN0cnVjdCBwb3J0X3JlZ3MgX19pb21lbSAqcGFyX2lvOwogc3RhdGljIGludCBudW1fcGFyX2lvX3BvcnRzID0gMDsKIAogaW50IHBhcl9pb19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCkBAIC0xNjUsNyArMTY2LDcgQEAKIAl9CiAKIAlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBpby1oYW5kbGUiLCBOVUxMKTsKLQlpZiAocGggPT0gMCkgeworCWlmIChwaCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicGlvLWhhbmRsZSBub3QgYXZhaWxhYmxlIFxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMDAsNyArMjAxLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBwYXJfaW89JXBcbiIsIF9fRlVOQ1RJT05fXywgcGFyX2lvKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcGFyX2lvPSVwXG4iLCBfX2Z1bmNfXywgcGFyX2lvKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Bhcl9pb19wb3J0czsgaSsrKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIgljcG9kclsldV09JTA4eFxuIiwgaSwKIAkJCWluX2JlMzIoJnBhcl9pb1tpXS5jcG9kcikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMKaW5kZXggMzIyM2FjYi4uYmNmODhlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2NfZmFzdC5jCkBAIC0xNDgsNTcgKzE0OCw1NyBAQAogCiAJLyogY2hlY2sgaWYgdGhlIFVDQyBwb3J0IG51bWJlciBpcyBpbiByYW5nZS4gKi8KIAlpZiAoKHVmX2luZm8tPnVjY19udW0gPCAwKSB8fCAodWZfaW5mby0+dWNjX251bSA+IFVDQ19NQVhfTlVNIC0gMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWxsZWdhbCBVQ0MgbnVtYmVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIFVDQyBudW1iZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCAnbWF4X3J4X2J1Zl9sZW5ndGgnIGlzIHByb3Blcmx5IGFsaWduZWQgKDQpLiAqLwogCWlmICh1Zl9pbmZvLT5tYXhfcnhfYnVmX2xlbmd0aCAmIChVQ0NfRkFTVF9NUkJMUl9BTElHTk1FTlQgLSAxKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtYXhfcnhfYnVmX2xlbmd0aCBub3QgYWxpZ25lZFxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIFZhbGlkYXRlIFZpcnR1YWwgRmlmbyByZWdpc3RlciB2YWx1ZXMgKi8KIAlpZiAodWZfaW5mby0+dXJmcyA8IFVDQ19GQVNUX1VSRlNfTUlOX1ZBTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1cmZzIGlzIHRvbyBzbWFsbFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdXJmcyBpcyB0b28gc21hbGxcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHVmX2luZm8tPnVyZnMgJiAoVUNDX0ZBU1RfVklSVF9GSUZPX1JFR1NfQUxJR05NRU5UIC0gMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdXJmcyBpcyBub3QgYWxpZ25lZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdXJmcyBpcyBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAodWZfaW5mby0+dXJmZXQgJiAoVUNDX0ZBU1RfVklSVF9GSUZPX1JFR1NfQUxJR05NRU5UIC0gMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdXJmZXQgaXMgbm90IGFsaWduZWQuXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1cmZldCBpcyBub3QgYWxpZ25lZC5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHVmX2luZm8tPnVyZnNldCAmIChVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQgLSAxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1cmZzZXQgaXMgbm90IGFsaWduZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVyZnNldCBpcyBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAodWZfaW5mby0+dXRmcyAmIChVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQgLSAxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1dGZzIGlzIG5vdCBhbGlnbmVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1dGZzIGlzIG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh1Zl9pbmZvLT51dGZldCAmIChVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQgLSAxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1dGZldCBpcyBub3QgYWxpZ25lZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdXRmZXQgaXMgbm90IGFsaWduZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHVmX2luZm8tPnV0ZnR0ICYgKFVDQ19GQVNUX1ZJUlRfRklGT19SRUdTX0FMSUdOTUVOVCAtIDEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHV0ZnR0IGlzIG5vdCBhbGlnbmVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1dGZ0dCBpcyBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAl1Y2NmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVjY19mYXN0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVjY2YpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YVxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjA3LDcgKzIwNyw3IEBACiAJLyogU2V0IHRoZSBQSFkgYmFzZSBhZGRyZXNzICovCiAJdWNjZi0+dWZfcmVncyA9IGlvcmVtYXAodWZfaW5mby0+cmVncywgc2l6ZW9mKHN0cnVjdCB1Y2NfZmFzdCkpOwogCWlmICh1Y2NmLT51Zl9yZWdzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBVQ0MgcmVnaXN0ZXJzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIFVDQyByZWdpc3RlcnNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yMzAsNyArMjMwLDcgQEAKIAkvKiBTZXQgVUNDIHRvIGZhc3QgdHlwZSAqLwogCXJldCA9IHVjY19zZXRfdHlwZSh1Zl9pbmZvLT51Y2NfbnVtLCBVQ0NfU1BFRURfVFlQRV9GQVNUKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzZXQgVUNDIHR5cGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzZXQgVUNDIHR5cGVcbiIsIF9fZnVuY19fKTsKIAkJdWNjX2Zhc3RfZnJlZSh1Y2NmKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0yNzAsNyArMjcwLDcgQEAKIAkgICAgcWVfbXVyYW1fYWxsb2ModWZfaW5mby0+dXRmcywgVUNDX0ZBU1RfVklSVF9GSUZPX1JFR1NfQUxJR05NRU5UKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKHVjY2YtPnVjY19mYXN0X3R4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIE1VUkFNIGZvciBUWCBGSUZPXG4iLAotCQkJX19GVU5DVElPTl9fKTsKKwkJCV9fZnVuY19fKTsKIAkJdWNjZi0+dWNjX2Zhc3RfdHhfdmlydHVhbF9maWZvX2Jhc2Vfb2Zmc2V0ID0gMDsKIAkJdWNjX2Zhc3RfZnJlZSh1Y2NmKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yODMsNyArMjgzLDcgQEAKIAkJCSAgIFVDQ19GQVNUX1ZJUlRfRklGT19SRUdTX0FMSUdOTUVOVCk7CiAJaWYgKElTX0VSUl9WQUxVRSh1Y2NmLT51Y2NfZmFzdF9yeF92aXJ0dWFsX2ZpZm9fYmFzZV9vZmZzZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSBNVVJBTSBmb3IgUlggRklGT1xuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJCXVjY2YtPnVjY19mYXN0X3J4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldCA9IDA7CiAJCXVjY19mYXN0X2ZyZWUodWNjZik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJCSAgICB1Y2Nfc2V0X3FlX211eF9yeHR4KHVmX2luZm8tPnVjY19udW0sIHVmX2luZm8tPnJ4X2Nsb2NrLAogCQkJCQlDT01NX0RJUl9SWCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlsbGVnYWwgdmFsdWUgZm9yIFJYIGNsb2NrXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgICAgX19mdW5jX18pOwogCQkJdWNjX2Zhc3RfZnJlZSh1Y2NmKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJICAgIHVjY19zZXRfcWVfbXV4X3J4dHgodWZfaW5mby0+dWNjX251bSwgdWZfaW5mby0+dHhfY2xvY2ssCiAJCQkJCUNPTU1fRElSX1RYKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWxsZWdhbCB2YWx1ZSBmb3IgVFggY2xvY2tcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQl1Y2NfZmFzdF9mcmVlKHVjY2YpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19zbG93LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2Nfc2xvdy5jCmluZGV4IGIyODcwYjIuLmE1NzhiYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19zbG93LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX3Nsb3cuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAKIAkvKiBjaGVjayBpZiB0aGUgVUNDIHBvcnQgbnVtYmVyIGlzIGluIHJhbmdlLiAqLwogCWlmICgodXNfaW5mby0+dWNjX251bSA8IDApIHx8ICh1c19pbmZvLT51Y2NfbnVtID4gVUNDX01BWF9OVU0gLSAxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIFVDQyBudW1iZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlsbGVnYWwgVUNDIG51bWJlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXVjY3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWNjX3Nsb3dfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghdWNjcykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhXG4iLAotCQkJX19GVU5DVElPTl9fKTsKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkvKiBTZXQgdGhlIFBIWSBiYXNlIGFkZHJlc3MgKi8KIAl1Y2NzLT51c19yZWdzID0gaW9yZW1hcCh1c19pbmZvLT5yZWdzLCBzaXplb2Yoc3RydWN0IHVjY19zbG93KSk7CiAJaWYgKHVjY3MtPnVzX3JlZ3MgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIFVDQyByZWdpc3RlcnNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgVUNDIHJlZ2lzdGVyc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE4OSw3ICsxODksNyBAQAogCXVjY3MtPnVzX3ByYW1fb2Zmc2V0ID0KIAkJcWVfbXVyYW1fYWxsb2MoVUNDX1NMT1dfUFJBTV9TSVpFLCBBTElHTk1FTlRfT0ZfVUNDX1NMT1dfUFJBTSk7CiAJaWYgKElTX0VSUl9WQUxVRSh1Y2NzLT51c19wcmFtX29mZnNldCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIE1VUkFNIGZvciBQUkFNIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIE1VUkFNIGZvciBQUkFNIiwgX19mdW5jX18pOwogCQl1Y2Nfc2xvd19mcmVlKHVjY3MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yMDIsNyArMjAyLDcgQEAKIAkvKiBTZXQgVUNDIHRvIHNsb3cgdHlwZSAqLwogCXJldCA9IHVjY19zZXRfdHlwZSh1c19pbmZvLT51Y2NfbnVtLCBVQ0NfU1BFRURfVFlQRV9TTE9XKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzZXQgVUNDIHR5cGUiLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3Qgc2V0IFVDQyB0eXBlIiwgX19mdW5jX18pOwogCQl1Y2Nfc2xvd19mcmVlKHVjY3MpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTIxNiw3ICsyMTYsNyBAQAogCQlxZV9tdXJhbV9hbGxvYyh1c19pbmZvLT5yeF9iZF9yaW5nX2xlbiAqIHNpemVvZihzdHJ1Y3QgcWVfYmQpLAogCQkJCVFFX0FMSUdOTUVOVF9PRl9CRCk7CiAJaWYgKElTX0VSUl9WQUxVRSh1Y2NzLT5yeF9iYXNlX29mZnNldCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlICV1IFJYIEJEc1xuIiwgX19GVU5DVElPTl9fLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgYWxsb2NhdGUgJXUgUlggQkRzXG4iLCBfX2Z1bmNfXywKIAkJCXVzX2luZm8tPnJ4X2JkX3JpbmdfbGVuKTsKIAkJdWNjcy0+cnhfYmFzZV9vZmZzZXQgPSAwOwogCQl1Y2Nfc2xvd19mcmVlKHVjY3MpOwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCXFlX211cmFtX2FsbG9jKHVzX2luZm8tPnR4X2JkX3JpbmdfbGVuICogc2l6ZW9mKHN0cnVjdCBxZV9iZCksCiAJCQlRRV9BTElHTk1FTlRfT0ZfQkQpOwogCWlmIChJU19FUlJfVkFMVUUodWNjcy0+dHhfYmFzZV9vZmZzZXQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSBUWCBCRHMiLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgYWxsb2NhdGUgVFggQkRzIiwgX19mdW5jX18pOwogCQl1Y2NzLT50eF9iYXNlX29mZnNldCA9IDA7CiAJCXVjY19zbG93X2ZyZWUodWNjcyk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJCWlmICh1Y2Nfc2V0X3FlX211eF9yeHR4KHVzX2luZm8tPnVjY19udW0sIHVzX2luZm8tPnJ4X2Nsb2NrLAogCQkJCQlDT01NX0RJUl9SWCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlsbGVnYWwgdmFsdWUgZm9yIFJYIGNsb2NrXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgICAgX19mdW5jX18pOwogCQkJdWNjX3Nsb3dfZnJlZSh1Y2NzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJaWYgKHVjY19zZXRfcWVfbXV4X3J4dHgodXNfaW5mby0+dWNjX251bSwgdXNfaW5mby0+dHhfY2xvY2ssCiAJCQkJCUNPTU1fRElSX1RYKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWxsZWdhbCB2YWx1ZSBmb3IgVFggY2xvY2tcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQl1Y2Nfc2xvd19mcmVlKHVjY3MpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcnRjX2Ntb3Nfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcnRjX2Ntb3Nfc2V0dXAuYwppbmRleCAwYzlhYzdlLi5jMDlkZGMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3J0Y19jbW9zX3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9ydGNfY21vc19zZXR1cC5jCkBAIC01NiwzICs1Niw1IEBACiAJcmV0dXJuIDA7CiB9CiBmc19pbml0Y2FsbChhZGRfcnRjKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfZGV2LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwppbmRleCBiZTI4MDhhLi5kNGQxNWFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwpAQCAtODQsNyArODQsNyBAQAogCiAJCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKIAkJREJHKCIlczogbmFtZTpzdGFydC0+ZW5kID0gJXM6MHglbHgtPiAweCVseFxuIiwKLQkJCV9fRlVOQ1RJT05fXyxyWzBdLm5hbWUsIHJbMF0uc3RhcnQsIHJbMF0uZW5kKTsKKwkJCV9fZnVuY19fLHJbMF0ubmFtZSwgclswXS5zdGFydCwgclswXS5lbmQpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAKQEAgLTkzLDcgKzkzLDcgQEAKIAkJclsxXS5lbmQgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CiAJCXJbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAkJREJHKCIlczogbmFtZTpzdGFydC0+ZW5kID0gJXM6MHglbHgtPiAweCVseFxuIiwKLQkJCV9fRlVOQ1RJT05fXyxyWzFdLm5hbWUsIHJbMV0uc3RhcnQsIHJbMV0uZW5kKTsKKwkJCV9fZnVuY19fLHJbMV0ubmFtZSwgclsxXS5zdGFydCwgclsxXS5lbmQpOwogCiAJCXRzaV9ldGhfZGV2ID0KIAkJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInRzaS1ldGhlcm5ldCIsIGkrKywgJnJbMF0sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X3BjaS5jCmluZGV4IDMxZDNkMzMuLmFjMWE3MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X3BjaS5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkvKiBQQ0kgQ29uZmlnIG1hcHBpbmcgKi8KIAl0c2kxMDhfcGNpX2NmZ19iYXNlID0gKHUzMilpb3JlbWFwKGNmZ19waHlzLCBUU0kxMDhfUENJX0NGR19TSVpFKTsKIAl0c2kxMDhfcGNpX2NmZ19waHlzID0gY2ZnX3BoeXM7Ci0JREJHKCJUU0lfUENJOiAlcyB0c2kxMDhfcGNpX2NmZ19iYXNlPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywKKwlEQkcoIlRTSV9QQ0k6ICVzIHRzaTEwOF9wY2lfY2ZnX2Jhc2U9MHgleFxuIiwgX19mdW5jX18sCiAJICAgIHRzaTEwOF9wY2lfY2ZnX2Jhc2UpOwogCiAJLyogRmV0Y2ggaG9zdCBicmlkZ2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KQEAgLTM5NSw3ICszOTUsNyBAQAogc3RhdGljIGludCBwY2lfaXJxX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQkgIGlycV9od19udW1iZXJfdCBodykKIHsJdW5zaWduZWQgaW50IGlycTsKLQlEQkcoIiVzKCVkLCAweCVseClcbiIsIF9fRlVOQ1RJT05fXywgdmlycSwgaHcpOworCURCRygiJXMoJWQsIDB4JWx4KVxuIiwgX19mdW5jX18sIHZpcnEsIGh3KTsKIAlpZiAoKHZpcnEgPj0gMSkgJiYgKHZpcnEgPD0gNCkpewogCQlpcnEgPSB2aXJxICsgSVJRX1BDSV9JTlRBRF9CQVNFIC0gMTsKIAkJZ2V0X2lycV9kZXNjKGlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggYTM0MTcyZC4uNTJjNzQ3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtNDUsNyArNDUsNiBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgotI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3JlZ19zYXZlLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCkBAIC0xMjQ0LDE1ICsxMjQzLDEyIEBACiAKIHN0YXRpYyBpbnQgeG1vbl9kZXB0aF90b19wcmludCA9IDY0OwogCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIExSU0FWRV9PRkZTRVQJCTB4MTAKLSNkZWZpbmUgUkVHX0ZSQU1FX01BUktFUgkweDcyNjU2NzczNjg2NTcyNjV1bAkvKiAicmVnc2hlcmUiICovCi0jZGVmaW5lIE1BUktFUl9PRkZTRVQJCTB4NjAKKyNkZWZpbmUgTFJTQVZFX09GRlNFVAkJKFNUQUNLX0ZSQU1FX0xSX1NBVkUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisjZGVmaW5lIE1BUktFUl9PRkZTRVQJCShTVEFDS19GUkFNRV9NQVJLRVIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIFJFR1NfT0ZGU0VUCQkweDcwCiAjZWxzZQotI2RlZmluZSBMUlNBVkVfT0ZGU0VUCQk0Ci0jZGVmaW5lIFJFR19GUkFNRV9NQVJLRVIJMHg3MjY1Njc3MwotI2RlZmluZSBNQVJLRVJfT0ZGU0VUCQk4CiAjZGVmaW5lIFJFR1NfT0ZGU0VUCQkxNgogI2VuZGlmCiAKQEAgLTEzMTgsNyArMTMxNCw3IEBACiAJCS8qIExvb2sgZm9yICJyZWdzaGVyZSIgbWFya2VyIHRvIHNlZSBpZiB0aGlzIGlzCiAJCSAgIGFuIGV4Y2VwdGlvbiBmcmFtZS4gKi8KIAkJaWYgKG1yZWFkKHNwICsgTUFSS0VSX09GRlNFVCwgJm1hcmtlciwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCQkgICAgJiYgbWFya2VyID09IFJFR19GUkFNRV9NQVJLRVIpIHsKKwkJICAgICYmIG1hcmtlciA9PSBTVEFDS19GUkFNRV9SRUdTX01BUktFUikgewogCQkJaWYgKG1yZWFkKHNwICsgUkVHU19PRkZTRVQsICZyZWdzLCBzaXplb2YocmVncykpCiAJCQkgICAgIT0gc2l6ZW9mKHJlZ3MpKSB7CiAJCQkJcHJpbnRmKCJDb3VsZG4ndCByZWFkIHJlZ2lzdGVycyBhdCAlbHhcbiIsCkBAIC0xNTk4LDcgKzE1OTQsNiBAQAogCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkgewogCQkJc3RydWN0IHBhY2Ffc3RydWN0ICpwdHJQYWNhOwogCQkJc3RydWN0IGxwcGFjYSAqcHRyTHBQYWNhOwotCQkJc3RydWN0IEl0THBSZWdTYXZlICpwdHJMcFJlZ1NhdmU7CiAKIAkJCS8qIER1bXAgb3V0IHJlbGV2YW50IFBhY2EgZGF0YSBhcmVhcy4gKi8KIAkJCXByaW50ZigiUGFjYTogXG4iKTsKQEAgLTE2MTEsMTUgKzE2MDYsNiBAQAogCQkJcHJpbnRmKCIgICAgU2F2ZWQgR3ByMz0lLjE2bHggIFNhdmVkIEdwcjQ9JS4xNmx4IFxuIiwKIAkJCSAgICAgICBwdHJMcFBhY2EtPnNhdmVkX2dwcjMsIHB0ckxwUGFjYS0+c2F2ZWRfZ3ByNCk7CiAJCQlwcmludGYoIiAgICBTYXZlZCBHcHI1PSUuMTZseCBcbiIsIHB0ckxwUGFjYS0+c2F2ZWRfZ3ByNSk7Ci0KLQkJCXByaW50ZigiICBMb2NhbCBQcm9jZXNzb3IgUmVnaXN0ZXIgU2F2ZSBBcmVhIChMcFJlZ1NhdmUpOiBcbiIpOwotCQkJcHRyTHBSZWdTYXZlID0gcHRyUGFjYS0+cmVnX3NhdmVfcHRyOwotCQkJcHJpbnRmKCIgICAgU2F2ZWQgU3ByZzA9JS4xNmx4ICBTYXZlZCBTcHJnMT0lLjE2bHggXG4iLAotCQkJICAgICAgIHB0ckxwUmVnU2F2ZS0+eFNQUkcwLCBwdHJMcFJlZ1NhdmUtPnhTUFJHMCk7Ci0JCQlwcmludGYoIiAgICBTYXZlZCBTcHJnMj0lLjE2bHggIFNhdmVkIFNwcmczPSUuMTZseCBcbiIsCi0JCQkgICAgICAgcHRyTHBSZWdTYXZlLT54U1BSRzIsIHB0ckxwUmVnU2F2ZS0+eFNQUkczKTsKLQkJCXByaW50ZigiICAgIFNhdmVkIE1zciAgPSUuMTZseCAgU2F2ZWQgTmlhICA9JS4xNmx4IFxuIiwKLQkJCSAgICAgICBwdHJMcFJlZ1NhdmUtPnhNU1IsIHB0ckxwUmVnU2F2ZS0+eE5JQSk7CiAJCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy84eHhfaW8vY29tbXByb2MuYyBiL2FyY2gvcHBjLzh4eF9pby9jb21tcHJvYy5jCmluZGV4IDlkNjU2ZGUuLjc1MjQ0M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjLzh4eF9pby9jb21tcHJvYy5jCisrKyBiL2FyY2gvcHBjLzh4eF9pby9jb21tcHJvYy5jCkBAIC00Myw3ICs0Myw3IEBACiAoewkJCQkJCQkJCVwKIAl1MzIgb2Zmc2V0ID0gb2Zmc2V0b2YoaW1tYXBfdCwgbWVtYmVyKTsJCQkJXAogCXZvaWQgKmFkZHIgPSBpb3JlbWFwIChJTUFQX0FERFIgKyBvZmZzZXQsCQkJXAotCQkJICAgICAgc2l6ZW9mKCAoKGltbWFwX3QqKTApLT5tZW1iZXIpKTsJCVwKKwkJCSAgICAgIEZJRUxEX1NJWkVPRihpbW1hcF90LCBtZW1iZXIpKTsJCVwKIAlhZGRyOwkJCQkJCQkJXAogfSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvOHh4X2lvL2ZlYy5jIGIvYXJjaC9wcGMvOHh4X2lvL2ZlYy5jCmluZGV4IDExYjBhYTYuLjJjNjA0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjLzh4eF9pby9mZWMuYworKysgYi9hcmNoL3BwYy84eHhfaW8vZmVjLmMKQEAgLTE5OSw3ICsxOTksNiBAQAogI2lmZGVmCUNPTkZJR19VU0VfTURJTwogc3RhdGljIHZvaWQgZmVjX2VuZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCS8qIENPTkZJR19VU0VfTURJTyAqLwotc3RhdGljIGlycXJldHVybl90IGZlY19lbmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICogZGV2X2lkKTsKICNpZmRlZiBDT05GSUdfRkVDX1BBQ0tFVEhPT0sKIHN0YXRpYyB2b2lkICBmZWNfZW5ldF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3UzMiByZWd2YWwpOwogc3RhdGljIHZvaWQgIGZlY19lbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTMyIHJlZ3ZhbCk7CkBAIC00NzIsNyArNDcxLDcgQEAKICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIE1QQyBjb3JlIGludGVycnVwdC4KICAqLwogc3RhdGljCWlycXJldHVybl90Ci1mZWNfZW5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqIGRldl9pZCkKK2ZlY19lbmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0CW5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKIAl2b2xhdGlsZSBmZWNfdAkqZmVjcDsKQEAgLTUyMCw3ICs1MTksNyBAQAogI2lmZGVmCUNPTkZJR19VU0VfTURJTwogCQkJZmVjX2VuZXRfbWlpKGRldik7CiAjZWxzZQotcHJpbnRrKCIlc1slZF0gJXM6IHVuZXhwZWN0ZWQgRkVDX0VORVRfTUlJIGV2ZW50XG4iLCBfX0ZJTEVfXyxfX0xJTkVfXyxfX0ZVTkNUSU9OX18pOworcHJpbnRrKCIlc1slZF0gJXM6IHVuZXhwZWN0ZWQgRkVDX0VORVRfTUlJIGV2ZW50XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKICNlbmRpZgkvKiBDT05GSUdfVVNFX01ESU8gKi8KIAkJfQogCkBAIC0xNDQxLDcgKzE0NDAsNyBAQAogCQlmZWNwLT5mZWNfZWNudHJsID0gZWNudHJsOwkvKiByZXN0b3JlIG9sZCBzZXR0aW5ncyAqLwogCX0KICNlbHNlCi1wcmludGsoIiVzWyVkXSAlczogdW5leHBlY3RlZCBMaW5rIGludGVycnVwdFxuIiwgX19GSUxFX18sX19MSU5FX18sX19GVU5DVElPTl9fKTsKK3ByaW50aygiJXNbJWRdICVzOiB1bmV4cGVjdGVkIExpbmsgaW50ZXJydXB0XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKICNlbmRpZgkvKiBDT05GSUdfVVNFX01ESU8gKi8KIAogI2lmbmRlZiBDT05GSUdfUlBYQ0xBU1NJQwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvY29uZmlncy9zYW5kcG9pbnRfZGVmY29uZmlnIGIvYXJjaC9wcGMvY29uZmlncy9zYW5kcG9pbnRfZGVmY29uZmlnCmluZGV4IGZiNDkzYTYuLjk1MjVlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2NvbmZpZ3Mvc2FuZHBvaW50X2RlZmNvbmZpZworKysgYi9hcmNoL3BwYy9jb25maWdzL3NhbmRwb2ludF9kZWZjb25maWcKQEAgLTE4OSw3ICsxODksNyBAQAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorQ09ORklHX0JMS19ERVZfU0w4MkMxMDU9eQogIyBDT05GSUdfQkxLX0RFVl9JREVQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAogIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2hlYWQuUyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMKaW5kZXggMWIwZWM3Mi4uZTdlNjQyYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZC5TCkBAIC03MDEsMjMgKzcwMSw2IEBACiAJYglmYXN0X2V4Y2VwdGlvbl9yZXR1cm4KIAogLyoKLSAqIEFsdGlWZWMgdW5hdmFpbGFibGUgdHJhcCBmcm9tIGtlcm5lbCAtIHByaW50IGEgbWVzc2FnZSwgYnV0IGxldAotICogdGhlIHRhc2sgdXNlIEFsdGlWZWMgaW4gdGhlIGtlcm5lbCB1bnRpbCBpdCByZXR1cm5zIHRvIHVzZXIgbW9kZS4KLSAqLwotS2VybmVsQWx0aVZlYzoKLQlsd3oJcjMsX01TUihyMSkKLQlvcmlzCXIzLHIzLE1TUl9WRUNAaAotCXN0dwlyMyxfTVNSKHIxKQkvKiBlbmFibGUgdXNlIG9mIEFsdGlWZWMgYWZ0ZXIgcmV0dXJuICovCi0JbGlzCXIzLDg3ZkBoCi0Jb3JpCXIzLHIzLDg3ZkBsCi0JbXIJcjQscjIJCS8qIGN1cnJlbnQgKi8KLQlsd3oJcjUsX05JUChyMSkKLQlibAlwcmludGsKLQliCXJldF9mcm9tX2V4Y2VwdAotODc6CS5zdHJpbmcJIkFsdGlWZWMgdXNlZCBpbiBrZXJuZWwgICh0YXNrPSVwLCBwYz0leCkgIFxuIgotCS5hbGlnbgk0LDAKLQotLyoKICAqIGdpdmV1cF9hbHRpdmVjKHRzaykKICAqIERpc2FibGUgQWx0aVZlYyBmb3IgdGhlIHRhc2sgZ2l2ZW4gYXMgdGhlIGFyZ3VtZW50LAogICogYW5kIHNhdmUgdGhlIEFsdGlWZWMgcmVnaXN0ZXJzIGluIGl0cyB0aHJlYWRfc3RydWN0LgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF84eHguUwppbmRleCBlYjhkMjZmLi4zMjFiZGEyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF84eHguUworKysgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF84eHguUwpAQCAtMzI5LDggKzMyOSwxOCBAQAogCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJLyogLi4uLmFuZCBnZXQgdGhlIHB0ZSBhZGRyZXNzICovCiAJbHd6CXIxMCwgMChyMTEpCS8qIEdldCB0aGUgcHRlICovCiAKKyNpZmRlZiBDT05GSUdfU1dBUAorCS8qIGRvIG5vdCBzZXQgdGhlIF9QQUdFX0FDQ0VTU0VEIGJpdCBvZiBhIG5vbi1wcmVzZW50IHBhZ2UgKi8KKwlhbmRpLglyMTEsIHIxMCwgX1BBR0VfUFJFU0VOVAorCWJlcQk0ZgorCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKKwltZnNwcglyMTEsIFNQUk5fTURfVFdDCS8qIGdldCB0aGUgcHRlIGFkZHJlc3MgYWdhaW4gKi8KKwlzdHcJcjEwLCAwKHIxMSkKKzQ6CisjZWxzZQogCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKIAlzdHcJcjEwLCAwKHIxMSkKKyNlbmRpZgogCiAJLyogVGhlIExpbnV4IFBURSB3b24ndCBnbyBleGFjdGx5IGludG8gdGhlIE1NVSBUTEIuCiAJICogU29mdHdhcmUgaW5kaWNhdG9yIGJpdHMgMjEsIDIyIGFuZCAyOCBtdXN0IGJlIGNsZWFyLgpAQCAtMzk1LDggKzQwNSwxNyBAQAogCURPXzh4eF9DUFU2KDB4M2I4MCwgcjMpCiAJbXRzcHIJU1BSTl9NRF9UV0MsIHIxMQogCi0JbWZzcHIJcjExLCBTUFJOX01EX1RXQwkvKiBnZXQgdGhlIHB0ZSBhZGRyZXNzIGFnYWluICovCisjaWZkZWYgQ09ORklHX1NXQVAKKwkvKiBkbyBub3Qgc2V0IHRoZSBfUEFHRV9BQ0NFU1NFRCBiaXQgb2YgYSBub24tcHJlc2VudCBwYWdlICovCisJYW5kaS4JcjExLCByMTAsIF9QQUdFX1BSRVNFTlQKKwliZXEJNGYKIAlvcmkJcjEwLCByMTAsIF9QQUdFX0FDQ0VTU0VECis0OgorCS8qIGFuZCB1cGRhdGUgcHRlIGluIHRhYmxlICovCisjZWxzZQorCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKKyNlbmRpZgorCW1mc3ByCXIxMSwgU1BSTl9NRF9UV0MJLyogZ2V0IHRoZSBwdGUgYWRkcmVzcyBhZ2FpbiAqLwogCXN0dwlyMTAsIDAocjExKQogCiAJLyogVGhlIExpbnV4IFBURSB3b24ndCBnbyBleGFjdGx5IGludG8gdGhlIE1NVSBUTEIuCkBAIC01NzUsNyArNTk0LDE2IEBACiAKIAkvKiBVcGRhdGUgJ2NoYW5nZWQnLCBhbW9uZyBvdGhlcnMuCiAJKi8KKyNpZmRlZiBDT05GSUdfU1dBUAorCW9yaQlyMTAsIHIxMCwgX1BBR0VfRElSVFl8X1BBR0VfSFdXUklURQorCS8qIGRvIG5vdCBzZXQgdGhlIF9QQUdFX0FDQ0VTU0VEIGJpdCBvZiBhIG5vbi1wcmVzZW50IHBhZ2UgKi8KKwlhbmRpLglyMTEsIHIxMCwgX1BBR0VfUFJFU0VOVAorCWJlcQk0ZgorCW9yaQlyMTAsIHIxMCwgX1BBR0VfQUNDRVNTRUQKKzQ6CisjZWxzZQogCW9yaQlyMTAsIHIxMCwgX1BBR0VfRElSVFl8X1BBR0VfQUNDRVNTRUR8X1BBR0VfSFdXUklURQorI2VuZGlmCiAJbWZzcHIJcjExLCBTUFJOX01EX1RXQwkJLyogR2V0IHB0ZSBhZGRyZXNzIGFnYWluICovCiAJc3R3CXIxMCwgMChyMTEpCQkvKiBhbmQgdXBkYXRlIHB0ZSBpbiB0YWJsZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKaW5kZXggYzJlYzEzYi4uNTBjZTgzZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wY2kuYwpAQCAtNTc4LDM5ICs1NzgsNiBAQAogfQogCiAKLWludAotcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQotewotCXUxNiBjbWQsIG9sZF9jbWQ7Ci0JaW50IGlkeDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQlvbGRfY21kID0gY21kOwotCWZvciAoaWR4PTA7IGlkeDw2OyBpZHgrKykgewotCQkvKiBPbmx5IHNldCB1cCB0aGUgcmVxdWVzdGVkIHN0dWZmICovCi0JCWlmICghKG1hc2sgJiAoMTw8aWR4KSkpCi0JCQljb250aW51ZTsKLQkKLQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfVU5TRVQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBEZXZpY2UgJXMgbm90IGF2YWlsYWJsZSBiZWNhdXNlIG9mIHJlc291cmNlIGNvbGxpc2lvbnNcbiIsIHBjaV9uYW1lKGRldikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKLQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOwotCX0KLQlpZiAoZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCkKLQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQlpZiAoY21kICE9IG9sZF9jbWQpIHsKLQkJcHJpbnRrKCJQQ0k6IEVuYWJsaW5nIGRldmljZSAlcyAoJTA0eCAtPiAlMDR4KVxuIiwgcGNpX25hbWUoZGV2KSwgb2xkX2NtZCwgY21kKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG5leHRfY29udHJvbGxlcl9pbmRleDsKIAogc3RydWN0IHBjaV9jb250cm9sbGVyICogX19pbml0CkBAIC03ODUsMzMgKzc1MiwxMSBAQAogCiBpbnQgcGNpYmlvc19lbmFibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQogewotCXUxNiBjbWQsIG9sZF9jbWQ7Ci0JaW50IGlkeDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0KIAlpZiAocHBjX21kLnBjaWJpb3NfZW5hYmxlX2RldmljZV9ob29rKQogCQlpZiAocHBjX21kLnBjaWJpb3NfZW5hYmxlX2RldmljZV9ob29rKGRldiwgMCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0Jb2xkX2NtZCA9IGNtZDsKLQlmb3IgKGlkeD0wOyBpZHg8NjsgaWR4KyspIHsKLQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfVU5TRVQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBEZXZpY2UgJXMgbm90IGF2YWlsYWJsZSBiZWNhdXNlIG9mIHJlc291cmNlIGNvbGxpc2lvbnNcbiIsIHBjaV9uYW1lKGRldikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKLQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOwotCX0KLQlpZiAoY21kICE9IG9sZF9jbWQpIHsKLQkJcHJpbnRrKCJQQ0k6IEVuYWJsaW5nIGRldmljZSAlcyAoJTA0eCAtPiAlMDR4KVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKGRldiksIG9sZF9jbWQsIGNtZCk7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCX0KLQlyZXR1cm4gMDsKKworCXJldHVybiBwY2lfZW5hYmxlX3Jlc291cmNlcyhkZXYsIG1hc2spOwogfQogCiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggYzM1MzUwMi4uMmJhNjU5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIApAQCAtMTI0LDEwICsxMjMsNiBAQAogRVhQT1JUX1NZTUJPTChpb3VubWFwKTsKIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9ib3QpOwkvKiBha2EgVk1BTExPQ19FTkQgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi1FWFBPUlRfU1lNQk9MKHBwY19pZGVfbWQpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUENJCiBFWFBPUlRfU1lNQk9MKGlzYV9pb19iYXNlKTsKIEVYUE9SVF9TWU1CT0woaXNhX21lbV9iYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvcHBjL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlNDI5Yi4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIFBvd2VyUEMtc3BlY2lmaWMgc2VtYXBob3JlIGNvZGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IENvcnQgRG91Z2FuIDxjb3J0QGNzLm5tdC5lZHU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBBcHJpbCAyMDAxIC0gUmV3b3JrZWQgYnkgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+Ci0gKiB0byBlbGltaW5hdGUgdGhlIFNNUCByYWNlcyBpbiB0aGUgb2xkIHZlcnNpb24gYmV0d2VlbiB0aGUgdXBkYXRlcwotICogb2YgYGNvdW50JyBhbmQgYHdha2luZycuICBOb3cgd2UgdXNlIG5lZ2F0aXZlIGBjb3VudCcgdmFsdWVzIHRvCi0gKiBpbmRpY2F0ZSB0aGF0IHNvbWUgcHJvY2VzcyhlcykgYXJlIHdhaXRpbmcgZm9yIHRoZSBzZW1hcGhvcmUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLS8qCi0gKiBBdG9taWNhbGx5IHVwZGF0ZSBzZW0tPmNvdW50LgotICogVGhpcyBkb2VzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBmb2xsb3dpbmc6Ci0gKgotICoJb2xkX2NvdW50ID0gc2VtLT5jb3VudDsKLSAqCXRtcCA9IE1BWChvbGRfY291bnQsIDApICsgaW5jcjsKLSAqCXNlbS0+Y291bnQgPSB0bXA7Ci0gKglyZXR1cm4gb2xkX2NvdW50OwotICovCi1zdGF0aWMgaW5saW5lIGludCBfX3NlbV91cGRhdGVfY291bnQoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgaW5jcikKLXsKLQlpbnQgb2xkX2NvdW50LCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXG4iCi0iMToJbHdhcngJJTAsMCwlM1xuIgotIglzcmF3aQklMSwlMCwzMVxuIgotIglhbmRjCSUxLCUwLCUxXG4iCi0iCWFkZAklMSwlMSwlNFxuIgotCVBQQzQwNV9FUlI3NygwLCUzKQotIglzdHdjeC4JJTEsMCwlM1xuIgotIglibmUJMWIiCi0JOiAiPSZyIiAob2xkX2NvdW50KSwgIj0mciIgKHRtcCksICI9bSIgKHNlbS0+Y291bnQpCi0JOiAiciIgKCZzZW0tPmNvdW50KSwgInIiIChpbmNyKSwgIm0iIChzZW0tPmNvdW50KQotCTogImNjIik7Ci0KLQlyZXR1cm4gb2xkX2NvdW50OwotfQotCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCS8qCi0JICogTm90ZSB0aGF0IHdlIGluY3JlbWVudGVkIGNvdW50IGluIHVwKCkgYmVmb3JlIHdlIGNhbWUgaGVyZSwKLQkgKiBidXQgdGhhdCB3YXMgaW5lZmZlY3RpdmUgc2luY2UgdGhlIHJlc3VsdCB3YXMgPD0gMCwgYW5kCi0JICogYW55IG5lZ2F0aXZlIHZhbHVlIG9mIGNvdW50IGlzIGVxdWl2YWxlbnQgdG8gMC4KLQkgKiBUaGlzIGVuZHMgdXAgc2V0dGluZyBjb3VudCB0byAxLCB1bmxlc3MgY291bnQgaXMgbm93ID4gMAotCSAqIChpLmUuIGJlY2F1c2Ugc29tZSBvdGhlciBjcHUgaGFzIGNhbGxlZCB1cCgpIGluIHRoZSBtZWFudGltZSksCi0JICogaW4gd2hpY2ggY2FzZSB3ZSBqdXN0IGluY3JlbWVudCBjb3VudC4KLQkgKi8KLQlfX3NlbV91cGRhdGVfY291bnQoc2VtLCAxKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi0vKgotICogTm90ZSB0aGF0IHdoZW4gd2UgY29tZSBpbiB0byBfX2Rvd24gb3IgX19kb3duX2ludGVycnVwdGlibGUsCi0gKiB3ZSBoYXZlIGFscmVhZHkgZGVjcmVtZW50ZWQgY291bnQsIGJ1dCB0aGF0IGRlY3JlbWVudCB3YXMKLSAqIGluZWZmZWN0aXZlIHNpbmNlIHRoZSByZXN1bHQgd2FzIDwgMCwgYW5kIGFueSBuZWdhdGl2ZSB2YWx1ZQotICogb2YgY291bnQgaXMgZXF1aXZhbGVudCB0byAwLgotICogVGh1cyBpdCBpcyBvbmx5IHdoZW4gd2UgZGVjcmVtZW50IGNvdW50IGZyb20gc29tZSB2YWx1ZSA+IDAKLSAqIHRoYXQgd2UgaGF2ZSBhY3R1YWxseSBnb3QgdGhlIHNlbWFwaG9yZS4KLSAqLwotdm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0KLQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQlzbXBfd21iKCk7Ci0KLQkvKgotCSAqIFRyeSB0byBnZXQgdGhlIHNlbWFwaG9yZS4gIElmIHRoZSBjb3VudCBpcyA+IDAsIHRoZW4gd2UndmUKLQkgKiBnb3QgdGhlIHNlbWFwaG9yZTsgd2UgZGVjcmVtZW50IGNvdW50IGFuZCBleGl0IHRoZSBsb29wLgotCSAqIElmIHRoZSBjb3VudCBpcyAwIG9yIG5lZ2F0aXZlLCB3ZSBzZXQgaXQgdG8gLTEsIGluZGljYXRpbmcKLQkgKiB0aGF0IHdlIGFyZSBhc2xlZXAsIGFuZCB0aGVuIHNsZWVwLgotCSAqLwotCXdoaWxlIChfX3NlbV91cGRhdGVfY291bnQoc2VtLCAtMSkgPD0gMCkgewotCQlzY2hlZHVsZSgpOwotCQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgYW55IG1vcmUgc2xlZXBlcnMsIHdha2Ugb25lIG9mIHRoZW0gdXAgc28KLQkgKiB0aGF0IGl0IGNhbiBlaXRoZXIgZ2V0IHRoZSBzZW1hcGhvcmUsIG9yIHNldCBjb3VudCB0byAtMQotCSAqIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgc3RpbGwgcHJvY2Vzc2VzIHNsZWVwaW5nLgotCSAqLwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLWludCBfX3NjaGVkIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0KLQl0c2stPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0Jc21wX3dtYigpOwotCi0Jd2hpbGUgKF9fc2VtX3VwZGF0ZV9jb3VudChzZW0sIC0xKSA8PSAwKSB7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJLyoKLQkJCSAqIEEgc2lnbmFsIGlzIHBlbmRpbmcgLSBnaXZlIHVwIHRyeWluZy4KLQkJCSAqIFNldCBzZW0tPmNvdW50IHRvIDAgaWYgaXQgaXMgbmVnYXRpdmUsCi0JCQkgKiBzaW5jZSB3ZSBhcmUgbm8gbG9uZ2VyIHNsZWVwaW5nLgotCQkJICovCi0JCQlfX3NlbV91cGRhdGVfY291bnQoc2VtLCAwKTsKLQkJCXJldHZhbCA9IC1FSU5UUjsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjaGVkdWxlKCk7Ci0JCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JfQotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKaW5kZXggMjk0MDU1OS4uYmZkZGZkZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC01Nyw3ICs1Niw2IEBACiBleHRlcm4gdm9pZCBwb3dlcjRfaWRsZSh2b2lkKTsKIAogZXh0ZXJuIGJvb3RfaW5mb3NfdCAqYm9vdF9pbmZvczsKLXN0cnVjdCBpZGVfbWFjaGRlcF9jYWxscyBwcGNfaWRlX21kOwogCiAvKiBVc2VkIHdpdGggdGhlIEJJX01FTVNJWkUgYm9vdGluZm8gcGFyYW1ldGVyIHRvIHN0b3JlIHRoZSBtZW1vcnkKICAgIHNpemUgdmFsdWUgcmVwb3J0ZWQgYnkgdGhlIGJvb3QgbG9hZGVyLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vaW5pdC5jIGIvYXJjaC9wcGMvbW0vaW5pdC5jCmluZGV4IDc0NDRkZjMuLjFhNjM3MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2luaXQuYworKysgYi9hcmNoL3BwYy9tbS9pbml0LmMKQEAgLTEwOSw3ICsxMDksNiBAQAogCiAJcHJpbnRrKCJNZW0taW5mbzpcbiIpOwogCXNob3dfZnJlZV9hcmVhcygpOwotCXByaW50aygiRnJlZSBzd2FwOiAgICAgICAlNmxka0JcbiIsIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7CiAJaSA9IG1heF9tYXBucjsKIAl3aGlsZSAoaS0tID4gMCkgewogCQl0b3RhbCsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYmFtYm9vLmMKaW5kZXggMDE3NjIzYy4uMDFmMjBmNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jCmluZGV4IDQ1MzY0M2EuLjgwMjdhMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2Vib255LmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmMKaW5kZXggMWZlZDY2My4uMGRlOTE1MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBlcC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZXAuYwpAQCAtMTcyLDExICsxNzIsMTEgQEAKIC8qIFBvbGFyaXR5IGFuZCB0cmlnZ2VyaW5nIHNldHRpbmdzIGZvciBpbnRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyAqLwogc3RydWN0IHBwYzR4eF91aWNfc2V0dGluZ3MgcHBjNHh4X2NvcmVfdWljX2NmZ1tdIF9faW5pdGRhdGEgPSB7CiAJeyAucG9sYXJpdHkJPSAweGZmYmZmZTAzLAotCSAgLnRyaWdnZXJpbmcgICA9IDB4ZmZmZmZlMDAsCisJICAudHJpZ2dlcmluZyAgID0gMHgwMDAwMDAwMCwKIAkgIC5leHRfaXJxX21hc2sgPSAweDAwMDAwMWZjLAkvKiBJUlEwIC0gSVJRNiAqLwogCX0sCi0JeyAucG9sYXJpdHkJPSAweGZmZmZjNmVmLAotCSAgLnRyaWdnZXJpbmcJPSAweGZmZmZjN2ZmLAorCXsgLnBvbGFyaXR5CT0gMHhmZmZmYzZhZiwKKwkgIC50cmlnZ2VyaW5nCT0gMHgwNjAwMDE0MCwKIAkgIC5leHRfaXJxX21hc2sgPSAweDAwMDAzODAwLAkvKiBJUlE3IC0gSVJROSAqLwogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYwppbmRleCBiNzllYmI4Li5mNmQ4YzJlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCmluZGV4IDI4YTcxMmMuLjMwODM4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvdGFpc2hhbi5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC90YWlzaGFuLmMKaW5kZXggZjZhMGM2Ni4uMTE1Njk0MiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC90YWlzaGFuLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC90YWlzaGFuLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmMKaW5kZXggNjZhNDRmZi4uZjZjZmQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveXVjY2EuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaGVzdG51dC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKaW5kZXggZGNkNjA3MC4uMjdjMTQwZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NwY2k2OTAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jcGNpNjkwLmMKaW5kZXggZTc4YmNjZi4uMDdmNjcyZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NwY2k2OTAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTY5MC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MjYwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDI2MC5jCmluZGV4IGMxZjc3ZTEuLmY1MjJiMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MjYwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQyNjAuYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2hkcHUuYwppbmRleCBjYTVkZTEzLi45MDRiNTE4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZHB1LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKQEAgLTYwNCw0MSArNjAzLDYgQEAKIAl9CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfTU9EVUxFKQotc3RhdGljIHZvaWQKLWhkcHVfaWRlX3JlcXVlc3RfcmVnaW9uKGlkZV9pb3JlZ190IGZyb20sIHVuc2lnbmVkIGludCBleHRlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JcmVxdWVzdF9yZWdpb24oZnJvbSwgZXh0ZW50LCBuYW1lKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGhkcHVfaWRlX3JlbGVhc2VfcmVnaW9uKGlkZV9pb3JlZ190IGZyb20sIHVuc2lnbmVkIGludCBleHRlbnQpCi17Ci0JcmVsZWFzZV9yZWdpb24oZnJvbSwgZXh0ZW50KTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotaGRwdV9pZGVfcGNpX2luaXRfaHdpZl9wb3J0cyhod19yZWdzX3QgKiBodywgaWRlX2lvcmVnX3QgZGF0YV9wb3J0LAotCQkJICAgICBpZGVfaW9yZWdfdCBjdHJsX3BvcnQsIGludCAqaXJxKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0KLQlwY2lfZm9yX2VhY2hfZGV2KGRldikgewotCQlpZiAoKChkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19TVE9SQUdFX0lERSkgfHwKLQkJICAgICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEKSkgewotCQkJaHctPmlycSA9IGRldi0+aXJxOwotCi0JCQlpZiAoaXJxICE9IE5VTEwpIHsKLQkJCQkqaXJxID0gZGV2LT5pcnE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm47Ci19Ci0jZW5kaWYKLQogdm9pZCBoZHB1X2hlYXJ0YmVhdCh2b2lkKQogewogCWlmIChtdjY0eDYwX3JlYWQoJmJoLCBNVjY0eDYwX0dQUF9WQUxVRSkgJiAoMSA8PCA1KSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2xvcGVjLmMKaW5kZXggYjk0N2M3Ny4uMWUzYWE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2xvcGVjLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2xvcGVjLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgpAQCAtMTY4LDg1ICsxNjcsNiBAQAogCWxvcGVjX2hhbHQoKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi1pbnQgbG9wZWNfaWRlX3BvcnRzX2tub3duID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvcGVjX2lkZV9yZWdiYXNlW01BWF9IV0lGU107Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb3BlY19pZGVfY3RsX3JlZ2Jhc2VbTUFYX0hXSUZTXTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvcGVjX2lkZWRtYV9yZWdiYXNlOwotCi1zdGF0aWMgdm9pZAotbG9wZWNfaWRlX3Byb2JlKHZvaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfV0lOQk9ORCwKLQkJCQkJICAgICAgUENJX0RFVklDRV9JRF9XSU5CT05EXzgyQzEwNSwKLQkJCQkJICAgICAgTlVMTCk7Ci0JbG9wZWNfaWRlX3BvcnRzX2tub3duID0gMTsKLQotCWlmIChkZXYpIHsKLQkJbG9wZWNfaWRlX3JlZ2Jhc2VbMF0gPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCQlsb3BlY19pZGVfcmVnYmFzZVsxXSA9IGRldi0+cmVzb3VyY2VbMl0uc3RhcnQ7Ci0JCWxvcGVjX2lkZV9jdGxfcmVnYmFzZVswXSA9IGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7Ci0JCWxvcGVjX2lkZV9jdGxfcmVnYmFzZVsxXSA9IGRldi0+cmVzb3VyY2VbM10uc3RhcnQ7Ci0JCWxvcGVjX2lkZWRtYV9yZWdiYXNlID0gZGV2LT5yZXNvdXJjZVs0XS5zdGFydDsKLQkJcGNpX2Rldl9wdXQoZGV2KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLWxvcGVjX2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0JaWYgKGxvcGVjX2lkZV9wb3J0c19rbm93biA9PSAwKQotCQlsb3BlY19pZGVfcHJvYmUoKTsKLQotCWlmIChiYXNlID09IGxvcGVjX2lkZV9yZWdiYXNlWzBdKQotCQlyZXR1cm4gMTQ7Ci0JZWxzZSBpZiAoYmFzZSA9PSBsb3BlY19pZGVfcmVnYmFzZVsxXSkKLQkJcmV0dXJuIDE1OwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1sb3BlY19pZGVfZGVmYXVsdF9pb19iYXNlKGludCBpbmRleCkKLXsKLQlpZiAobG9wZWNfaWRlX3BvcnRzX2tub3duID09IDApCi0JCWxvcGVjX2lkZV9wcm9iZSgpOwotCXJldHVybiBsb3BlY19pZGVfcmVnYmFzZVtpbmRleF07Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotbG9wZWNfaWRlX2luaXRfaHdpZl9wb3J0cyhod19yZWdzX3QgKmh3LCB1bnNpZ25lZCBsb25nIGRhdGEsCi0JCQkgIHVuc2lnbmVkIGxvbmcgY3RsLCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IGRhdGE7Ci0JdWludCBhbHRfc3RhdHVzX2Jhc2U7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBJREVfREFUQV9PRkZTRVQ7IGkgPD0gSURFX1NUQVRVU19PRkZTRVQ7IGkrKykKLQkJaHctPmlvX3BvcnRzW2ldID0gcmVnKys7Ci0KLQlpZiAoZGF0YSA9PSBsb3BlY19pZGVfcmVnYmFzZVswXSkgewotCQlhbHRfc3RhdHVzX2Jhc2UgPSBsb3BlY19pZGVfY3RsX3JlZ2Jhc2VbMF0gKyAyOwotCQlody0+aXJxID0gMTQ7Ci0JfSBlbHNlIGlmIChkYXRhID09IGxvcGVjX2lkZV9yZWdiYXNlWzFdKSB7Ci0JCWFsdF9zdGF0dXNfYmFzZSA9IGxvcGVjX2lkZV9jdGxfcmVnYmFzZVsxXSArIDI7Ci0JCWh3LT5pcnEgPSAxNTsKLQl9IGVsc2UgewotCQlhbHRfc3RhdHVzX2Jhc2UgPSAwOwotCQlody0+aXJxID0gMDsKLQl9Ci0KLQlpZiAoY3RsKQotCQlody0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9IGN0bDsKLQllbHNlCi0JCWh3LT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gYWx0X3N0YXR1c19iYXNlOwotCi0JaWYgKGlycSAhPSBOVUxMKQotCQkqaXJxID0gaHctPmlycTsKLQotfQotI2VuZGlmIC8qIEJMS19ERVZfSURFICovCi0KIHN0YXRpYyB2b2lkIF9faW5pdAogbG9wZWNfaW5pdF9JUlEodm9pZCkKIHsKQEAgLTM4NCwxMSArMzA0LDYgQEAKIAlwcGNfbWQubnZyYW1fcmVhZF92YWwgPSB0b2RjX2RpcmVjdF9yZWFkX3ZhbDsKIAlwcGNfbWQubnZyYW1fd3JpdGVfdmFsID0gdG9kY19kaXJlY3Rfd3JpdGVfdmFsOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREUpIHx8IGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFX01PRFVMRSkKLQlwcGNfaWRlX21kLmRlZmF1bHRfaXJxID0gbG9wZWNfaWRlX2RlZmF1bHRfaXJxOwotCXBwY19pZGVfbWQuZGVmYXVsdF9pb19iYXNlID0gbG9wZWNfaWRlX2RlZmF1bHRfaW9fYmFzZTsKLQlwcGNfaWRlX21kLmlkZV9pbml0X2h3aWYgPSBsb3BlY19pZGVfaW5pdF9od2lmX3BvcnRzOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHCiAJcHBjX21kLnByb2dyZXNzID0gZ2VuNTUwX3Byb2dyZXNzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXZtZTUxMDAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCmluZGV4IGJiOGQ0YTQuLjA1M2I1NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3Bvd2VycG1jMjUwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG93ZXJwbWMyNTAuYwppbmRleCA0ZDQ2NjUwLi4xNjJkYzg1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG93ZXJwbWMyNTAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG93ZXJwbWMyNTAuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcGx1cy5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BwbHVzLmMKaW5kZXggOGExNzg4Yy4uY2JjYWM4NSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BwbHVzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BwbHVzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogCkBAIC02NjgsNTcgKzY2Nyw2IEBACiAJCXBwY19tZC5wcm9ncmVzcygiaW5pdF9pcnE6IGV4aXQiLCAwKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi0vKgotICogSURFIHN0dWZmLgotICovCi1zdGF0aWMgaW50IHBwbHVzX2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0Jc3dpdGNoIChiYXNlKSB7Ci0JY2FzZSAweDFmMDoKLQkJcmV0dXJuIDE0OwotCWNhc2UgMHgxNzA6Ci0JCXJldHVybiAxNTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBwbHVzX2lkZV9kZWZhdWx0X2lvX2Jhc2UoaW50IGluZGV4KQotewotCXN3aXRjaCAoaW5kZXgpIHsKLQljYXNlIDA6Ci0JCXJldHVybiAweDFmMDsKLQljYXNlIDE6Ci0JCXJldHVybiAweDE3MDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotcHBsdXNfaWRlX2luaXRfaHdpZl9wb3J0cyhod19yZWdzX3QgKiBodywgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsCi0JCQkgIHVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IGRhdGFfcG9ydDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IElERV9EQVRBX09GRlNFVDsgaSA8PSBJREVfU1RBVFVTX09GRlNFVDsgaSsrKSB7Ci0JCWh3LT5pb19wb3J0c1tpXSA9IHJlZzsKLQkJcmVnICs9IDE7Ci0JfQotCi0JaWYgKGN0cmxfcG9ydCkKLQkJaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBjdHJsX3BvcnQ7Ci0JZWxzZQotCQlody0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9Ci0JCSAgICBody0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSArIDB4MjA2OwotCi0JaWYgKGlycSAhPSBOVUxMKQotCQkqaXJxID0gcHBsdXNfaWRlX2RlZmF1bHRfaXJxKGRhdGFfcG9ydCk7Ci19Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIC8qIFBvd2VyUGx1cyAoTVRYKSBzdXBwb3J0ICovCiBzdGF0aWMgaW50IF9faW5pdCBzbXBfcHBsdXNfcHJvYmUodm9pZCkKQEAgLTg4NCwxMiArODMyLDYgQEAKIAlwcGNfbWQuZmluZF9lbmRfb2ZfbWVtb3J5ID0gcHBsdXNfZmluZF9lbmRfb2ZfbWVtb3J5OwogCXBwY19tZC5zZXR1cF9pb19tYXBwaW5ncyA9IHBwbHVzX21hcF9pbzsKIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi0JcHBjX2lkZV9tZC5kZWZhdWx0X2lycSA9IHBwbHVzX2lkZV9kZWZhdWx0X2lycTsKLQlwcGNfaWRlX21kLmRlZmF1bHRfaW9fYmFzZSA9IHBwbHVzX2lkZV9kZWZhdWx0X2lvX2Jhc2U7Ci0JcHBjX2lkZV9tZC5pZGVfaW5pdF9od2lmID0gcHBsdXNfaWRlX2luaXRfaHdpZl9wb3J0czsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHCiAJcHBjX21kLnByb2dyZXNzID0gZ2VuNTUwX3Byb2dyZXNzOwogI2VuZGlmCQkJCS8qIENPTkZJR19TRVJJQUxfVEVYVF9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKaW5kZXggMzg0NDk4NS4uNDY1YjY1OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogCkBAIC04OTQsMzggKzg5Myw2IEBACiAJCWk4MjU5X2luaXQoTVBDMTBYX01BUEFfUENJX0lOVEFDS19BRERSLCAwKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi0vKgotICogSURFIHN0dWZmLgotICovCi1zdGF0aWMgaW50Ci1wcmVwX2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0Jc3dpdGNoIChiYXNlKSB7Ci0JCWNhc2UgMHgxZjA6IHJldHVybiAxMzsKLQkJY2FzZSAweDE3MDogcmV0dXJuIDEzOwotCQljYXNlIDB4MWU4OiByZXR1cm4gMTE7Ci0JCWNhc2UgMHgxNjg6IHJldHVybiAxMDsKLQkJY2FzZSAweGZmZjA6IHJldHVybiAxNDsJCS8qIE1DUChOKTc1MCBpZGUwICovCi0JCWNhc2UgMHhmZmUwOiByZXR1cm4gMTU7CQkvKiBNQ1AoTik3NTAgaWRlMSAqLwotCQlkZWZhdWx0OiByZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1wcmVwX2lkZV9kZWZhdWx0X2lvX2Jhc2UoaW50IGluZGV4KQotewotCXN3aXRjaCAoaW5kZXgpIHsKLQkJY2FzZSAwOiByZXR1cm4gMHgxZjA7Ci0JCWNhc2UgMTogcmV0dXJuIDB4MTcwOwotCQljYXNlIDI6IHJldHVybiAweDFlODsKLQkJY2FzZSAzOiByZXR1cm4gMHgxNjg7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKLQl9Ci19Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIC8qIFBSZVAgKE1UWCkgc3VwcG9ydCAqLwogc3RhdGljIGludCBfX2luaXQKQEAgLTEwNzAsMTEgKzEwMzcsNiBAQAogCiAJcHBjX21kLnNldHVwX2lvX21hcHBpbmdzID0gcHJlcF9tYXBfaW87CiAKLSNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfTU9EVUxFKQotCXBwY19pZGVfbWQuZGVmYXVsdF9pcnEgPSBwcmVwX2lkZV9kZWZhdWx0X2lycTsKLQlwcGNfaWRlX21kLmRlZmF1bHRfaW9fYmFzZSA9IHByZXBfaWRlX2RlZmF1bHRfaW9fYmFzZTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1NNUAogCXNtcF9vcHMJCQkgPSAmcHJlcF9zbXBfb3BzOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BycG1jNzUwLmMKaW5kZXggZmNhYjUxMy4uOTNiZDU5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzgwMC5jCmluZGV4IGY0YWRlNWMuLjViY2RhN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzgwMC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzgwMC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcnJpZXJfZGVmcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5jCmluZGV4IDQ0ZDQzOTguLmYxZGVlMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpAQCAtNTEyLDcgKzUxMSw3IEBACiB7CiAJaW50IGlycTsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAlpODI1OV9pbml0KDAsIDApOwogCW12NjQzNjBfaW5pdF9pcnEoKTsKIApAQCAtNTY5LDcgKzU2OCw3IEBACiAJfTsKIAljb25zdCBsb25nIG1pbl9pZHNlbCA9IDEwLCBtYXhfaWRzZWwgPSAxNCwgaXJxc19wZXJfc2xvdCA9IDQ7CiAKLQlwcl9kZWJ1ZygiJXM6ICUwNHgvJTA0eC8leDogaWRzZWw9JWh4IHBpbj0laHVcbiIsIF9fRlVOQ1RJT05fXywKKwlwcl9kZWJ1ZygiJXM6ICUwNHgvJTA0eC8leDogaWRzZWw9JWh4IHBpbj0laHVcbiIsIF9fZnVuY19fLAogCQkgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlLCBQQ0lfRlVOQyhkZXYtPmRldmZuKSwgaWRzZWwsIHBpbik7CiAKIAlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVA7CkBAIC0xMzAwLDcgKzEyOTksNyBAQAogCXUzMiBkYXRhOwogCXU4IGRhdGE4OwogCi0JcHJfZGVidWcoIiVzOiBlbnRlclxuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXM6IGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBXYWl0IGZvciBkZWJ1Z2dlcj8gKi8KIAlpZiAocHBjN2Rfd2FpdF9kZWJ1Z2dlcikgewpAQCAtMTMzMyw3ICsxMzMyLDcgQEAKICAgICAgICAgcHBjX21kLnNldF9ydGNfdGltZSA9IHBwYzdkX3NldF9ydGNfdGltZTsKICAgICAgICAgcHBjX21kLmdldF9ydGNfdGltZSA9IHBwYzdkX2dldF9ydGNfdGltZTsKIAotCXByX2RlYnVnKCIlczogZXhpdFxuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXM6IGV4aXRcbiIsIF9fZnVuY19fKTsKIH0KIAogLyogQ2FsbGVkIGZyb20gbWFjaGluZV9pbml0KCksIGVhcmx5LCBiZWZvcmUgYW55IG9mIHRoZSBfX2luaXQgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmVzaWR1YWwuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yZXNpZHVhbC5jCmluZGV4IGM5OTExNjAuLjE4NDk1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9yZXNpZHVhbC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yZXNpZHVhbC5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogCiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5jCmluZGV4IDMzNTJmYWUuLmI0ODk3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmMKQEAgLTcxLDcgKzcxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CkBAIC01NTksOTMgKzU1OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfTU9EVUxFKQotLyoKLSAqIElERSBzdXBwb3J0LgotICovCi1zdGF0aWMgaW50CQlzYW5kcG9pbnRfaWRlX3BvcnRzX2tub3duID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nCXNhbmRwb2ludF9pZGVfcmVnYmFzZVtNQVhfSFdJRlNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJc2FuZHBvaW50X2lkZV9jdGxfcmVnYmFzZVtNQVhfSFdJRlNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJc2FuZHBvaW50X2lkZWRtYV9yZWdiYXNlOwotCi1zdGF0aWMgdm9pZAotc2FuZHBvaW50X2lkZV9wcm9iZSh2b2lkKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9XSU5CT05ELAotCQkJUENJX0RFVklDRV9JRF9XSU5CT05EXzgyQzEwNSwgTlVMTCk7Ci0KLQlpZiAocGRldikgewotCQlzYW5kcG9pbnRfaWRlX3JlZ2Jhc2VbMF09cGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7Ci0JCXNhbmRwb2ludF9pZGVfcmVnYmFzZVsxXT1wZGV2LT5yZXNvdXJjZVsyXS5zdGFydDsKLQkJc2FuZHBvaW50X2lkZV9jdGxfcmVnYmFzZVswXT1wZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKLQkJc2FuZHBvaW50X2lkZV9jdGxfcmVnYmFzZVsxXT1wZGV2LT5yZXNvdXJjZVszXS5zdGFydDsKLQkJc2FuZHBvaW50X2lkZWRtYV9yZWdiYXNlPXBkZXYtPnJlc291cmNlWzRdLnN0YXJ0OwotCQlwY2lfZGV2X3B1dChwZGV2KTsKLQl9Ci0KLQlzYW5kcG9pbnRfaWRlX3BvcnRzX2tub3duID0gMTsKLX0KLQotc3RhdGljIGludAotc2FuZHBvaW50X2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0JaWYgKHNhbmRwb2ludF9pZGVfcG9ydHNfa25vd24gPT0gMCkKLQkJc2FuZHBvaW50X2lkZV9wcm9iZSgpOwotCi0JaWYgKGJhc2UgPT0gc2FuZHBvaW50X2lkZV9yZWdiYXNlWzBdKQotCQlyZXR1cm4gU0FORFBPSU5UX0lERV9JTlQwOwotCWVsc2UgaWYgKGJhc2UgPT0gc2FuZHBvaW50X2lkZV9yZWdiYXNlWzFdKQotCQlyZXR1cm4gU0FORFBPSU5UX0lERV9JTlQxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1zYW5kcG9pbnRfaWRlX2RlZmF1bHRfaW9fYmFzZShpbnQgaW5kZXgpCi17Ci0JaWYgKHNhbmRwb2ludF9pZGVfcG9ydHNfa25vd24gPT0gMCkKLQkJc2FuZHBvaW50X2lkZV9wcm9iZSgpOwotCi0JcmV0dXJuIHNhbmRwb2ludF9pZGVfcmVnYmFzZVtpbmRleF07Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2FuZHBvaW50X2lkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICpodywgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsCi0JCXVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IGRhdGFfcG9ydDsKLQl1aW50CWFsdF9zdGF0dXNfYmFzZTsKLQlpbnQJaTsKLQotCWZvciAoaSA9IElERV9EQVRBX09GRlNFVDsgaSA8PSBJREVfU1RBVFVTX09GRlNFVDsgaSsrKSB7Ci0JCWh3LT5pb19wb3J0c1tpXSA9IHJlZysrOwotCX0KLQotCWlmIChkYXRhX3BvcnQgPT0gc2FuZHBvaW50X2lkZV9yZWdiYXNlWzBdKSB7Ci0JCWFsdF9zdGF0dXNfYmFzZSA9IHNhbmRwb2ludF9pZGVfY3RsX3JlZ2Jhc2VbMF0gKyAyOwotCQlody0+aXJxID0gMTQ7Ci0JfQotCWVsc2UgaWYgKGRhdGFfcG9ydCA9PSBzYW5kcG9pbnRfaWRlX3JlZ2Jhc2VbMV0pIHsKLQkJYWx0X3N0YXR1c19iYXNlID0gc2FuZHBvaW50X2lkZV9jdGxfcmVnYmFzZVsxXSArIDI7Ci0JCWh3LT5pcnEgPSAxNTsKLQl9Ci0JZWxzZSB7Ci0JCWFsdF9zdGF0dXNfYmFzZSA9IDA7Ci0JCWh3LT5pcnEgPSAwOwotCX0KLQotCWlmIChjdHJsX3BvcnQpIHsKLQkJaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBjdHJsX3BvcnQ7Ci0JfSBlbHNlIHsKLQkJaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBhbHRfc3RhdHVzX2Jhc2U7Ci0JfQotCi0JaWYgKGlycSAhPSBOVUxMKSB7Ci0JCSppcnEgPSBody0+aXJxOwotCX0KLX0KLSNlbmRpZgotCiAvKgogICogU2V0IEJBVCAzIHRvIG1hcCAweGY4MDAwMDAwIHRvIGVuZCBvZiBwaHlzaWNhbCBtZW1vcnkgc3BhY2UgMS10by0xLgogICovCkBAIC03MzYsMTAgKzY0OCw0IEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHCiAJcHBjX21kLnByb2dyZXNzID0gZ2VuNTUwX3Byb2dyZXNzOwogI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfTU9EVUxFKQotCXBwY19pZGVfbWQuZGVmYXVsdF9pcnEgPSBzYW5kcG9pbnRfaWRlX2RlZmF1bHRfaXJxOwotCXBwY19pZGVfbWQuZGVmYXVsdF9pb19iYXNlID0gc2FuZHBvaW50X2lkZV9kZWZhdWx0X2lvX2Jhc2U7Ci0JcHBjX2lkZV9tZC5pZGVfaW5pdF9od2lmID0gc2FuZHBvaW50X2lkZV9pbml0X2h3aWZfcG9ydHM7Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuaAppbmRleCAzYjY0ZTY0Li5lZDgzNzU5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5oCkBAIC0yOCw5ICsyOCw2IEBACiAgKi8KICNkZWZpbmUgU0FORFBPSU5UX0lERV9JTlQwCQkyMwkvKiBFUElDIDcgKi8KICNkZWZpbmUgU0FORFBPSU5UX0lERV9JTlQxCQkyNAkvKiBFUElDIDggKi8KLSNlbHNlCi0jZGVmaW5lIFNBTkRQT0lOVF9JREVfSU5UMAkJMTQJLyogODI1OSBUZXN0ICovCi0jZGVmaW5lIFNBTkRQT0lOVF9JREVfSU5UMQkJMTUJLyogODI1OSBUZXN0ICovCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYmM4Mnh4LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc2JjODJ4eC5jCmluZGV4IGNjMDkzNWMuLjBkZjZhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYmM4Mnh4LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NiYzgyeHguYwpAQCAtMTIxLDggKzEyMSwxMCBAQAogCS5lbmQgPSBzYmM4Mnh4X2k4MjU5X2VuZF9pcnEsCiB9OwogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2JjODJ4eF9pODI1OV9kZW11eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2JjODJ4eF9pODI1OV9kZW11eChpbnQgZHVtbXksIHZvaWQgKmRldl9pZCkKIHsKKwlpbnQgaXJxOworCiAJc3Bpbl9sb2NrKCZzYmM4Mnh4X2k4MjU5X2xvY2spOwogCiAJc2JjODJ4eF9pODI1OV9tYXBbMF0gPSAweDBjOwkvKiBPQ1czOiBSZWFkIElSIHJlZ2lzdGVyIG9uIFJEIyBwdWxzZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3NwcnVjZS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NwcnVjZS5jCmluZGV4IGY0ZGU1MGIuLmEzNDQxMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zcHJ1Y2UuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc3BydWNlLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbTh4eF9zZXR1cC5jIGIvYXJjaC9wcGMvc3lzbGliL204eHhfc2V0dXAuYwppbmRleCA5Y2FmODUwLi4xOTc0OWU5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbTh4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tOHh4X3NldHVwLmMKQEAgLTg3LDggKzg3LDYgQEAKIAogdW5zaWduZWQgY2hhciBfX3Jlc1tzaXplb2YoYmRfdCldOwogCi1leHRlcm4gdm9pZCBtOHh4X2lkZV9pbml0KHZvaWQpOwotCiBleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX2F2YWlsYWJsZV9tZW1vcnkodm9pZCk7CiBleHRlcm4gdm9pZCBtOHh4X2NwbV9yZXNldCh2b2lkKTsKIGV4dGVybiB2b2lkIG04eHhfd2R0X2hhbmRsZXJfaW5zdGFsbChiZF90ICpicCk7CkBAIC00NzQsOCArNDcyLDQgQEAKIAogCXBwY19tZC5maW5kX2VuZF9vZl9tZW1vcnkJPSBtOHh4X2ZpbmRfZW5kX29mX21lbW9yeTsKIAlwcGNfbWQuc2V0dXBfaW9fbWFwcGluZ3MJPSBtOHh4X21hcF9pbzsKLQotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfTVBDOHh4X0lERSkKLQltOHh4X2lkZV9pbml0KCk7Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9zZXR1cC5jCmluZGV4IDlmNTA0ZmMuLmFiMGNmNGNlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3NldHVwLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCiBpbnQgbXBjNTJ4eF9zZXRfcHNjX2Nsa2RpdihpbnQgcHNjX2lkLCBpbnQgY2xrZGl2KQogewotCXN0YXRpYyBzcGlubG9ja190IGxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKIAlzdHJ1Y3QgbXBjNTJ4eF9jZG0gX19pb21lbSAqY2RtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IG1jbGtlbl9kaXY7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvb2NwLmMgYi9hcmNoL3BwYy9zeXNsaWIvb2NwLmMKaW5kZXggYWM4MDM3MC4uYTZmYjdkYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL29jcC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9vY3AuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9vY3AuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKIC8vI2RlZmluZSBEQkcoeCkJcHJpbnRrIHgKICNkZWZpbmUgREJHKHgpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMKaW5kZXggZGViZTE0Yy4uMzUzZDc0NiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2V0dXAuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIApAQCAtMTg5LDI0ICsxODgsNiBAQAogCW10c3ByKFNQUk5fUElULCB0Yl90aWNrc19wZXJfamlmZnkpOwogfQogCi0vKgotICogSURFIHN0dWZmLgotICogc2hvdWxkIGJlIGdlbmVyaWMgZm9yIGV2ZXJ5IElERSBQQ0kgY2hpcHNldAotICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19JREUpCi1zdGF0aWMgdm9pZAotcHBjNHh4X2lkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICogaHcsIHVuc2lnbmVkIGxvbmcgZGF0YV9wb3J0LAotCQkJICAgdW5zaWduZWQgbG9uZyBjdHJsX3BvcnQsIGludCAqaXJxKQotewotCWludCBpOwotCi0JZm9yIChpID0gSURFX0RBVEFfT0ZGU0VUOyBpIDw9IElERV9TVEFUVVNfT0ZGU0VUOyArK2kpCi0JCWh3LT5pb19wb3J0c1tpXSA9IGRhdGFfcG9ydCArIGkgLSBJREVfREFUQV9PRkZTRVQ7Ci0KLQlody0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9IGN0cmxfcG9ydDsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX0lERSkgKi8KLQogVE9EQ19BTExPQygpOwogCiAvKgpAQCAtMjcxLDEwICsyNTIsNiBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfVEVYVF9ERUJVRwogCXBwY19tZC5wcm9ncmVzcyA9IGdlbjU1MF9wcm9ncmVzczsKICNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19JREUpCi0JcHBjX2lkZV9tZC5pZGVfaW5pdF9od2lmID0gcHBjNHh4X2lkZV9pbml0X2h3aWZfcG9ydHM7Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19JREUpICovCiB9CiAKIC8qIENhbGxlZCBmcm9tIG1hY2hpbmVfY2hlY2tfZXhjZXB0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDkyYTRmN2IuLmY2YTY4ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0zLDYgKzMsMTAgQEAKICMgc2VlIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0LgogIwogCitjb25maWcgU0NIRURfTUMKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBTTVAKKwogY29uZmlnIE1NVQogCWRlZl9ib29sIHkKIApAQCAtMzksNiArNDMsOSBAQAogY29uZmlnIEdFTkVSSUNfVElNRQogCWRlZl9ib29sIHkKIAorY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBHRU5FUklDX0JVRwogCWJvb2wKIAlkZXBlbmRzIG9uIEJVRwpAQCAtNjEsNiArNjgsNyBAQAogCWRlZl9ib29sIHkKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0tQUk9CRVMKKwlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCkBAIC02OCw2ICs3Niw4IEBACiAKIGNvbW1lbnQgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAorc291cmNlICJrZXJuZWwvdGltZS9LY29uZmlnIgorCiBjb25maWcgNjRCSVQKIAlib29sICI2NCBiaXQga2VybmVsIgogCWhlbHAKQEAgLTEwMCw3ICsxMTAsOCBAQAogCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi02NCkiCiAJcmFuZ2UgMiA2NAogCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCAiMzIiCisJZGVmYXVsdCAiMzIiIGlmICE2NEJJVAorCWRlZmF1bHQgIjY0IiBpZiA2NEJJVAogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBDUFVzIHdoaWNoIHRoaXMKIAkgIGtlcm5lbCB3aWxsIHN1cHBvcnQuICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgaXMgNjQgYW5kIHRoZQpAQCAtMjk5LDEwICszMTAsNyBAQAogCXRyaXN0YXRlICJRRElPIHN1cHBvcnQiCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgdGhlIFF1ZXVlZCBEaXJlY3QgSS9PIGJhc2Ugc3VwcG9ydCBmb3IKLQkgIElCTSBtYWluZnJhbWVzLgotCi0JICBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgSUJNIGF0Ci0JICA8aHR0cDovL3d3dzEwLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saW51eDM5MD4KKwkgIElCTSBTeXN0ZW0gei4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcWRpby4KQEAgLTM0OSw2ICszNTcsMTAgQEAKIAogc291cmNlICJmcy9LY29uZmlnLmJpbmZtdCIKIAorY29uZmlnIEZPUkNFX01BWF9aT05FT1JERVIKKwlpbnQKKwlkZWZhdWx0ICI5IgorCiBjb25maWcgUFJPQ0VTU19ERUJVRwogCWJvb2wgIlNob3cgY3Jhc2hlZCB1c2VyIHByb2Nlc3MgaW5mbyIKIAloZWxwCkBAIC00ODAsMjUgKzQ5Miw2IEBACiAKIHNvdXJjZSBrZXJuZWwvS2NvbmZpZy5oegogCi1jb25maWcgTk9fSURMRV9IWgotCWJvb2wgIk5vIEhaIHRpbWVyIHRpY2tzIGluIGlkbGUiCi0JaGVscAotCSAgU3dpdGNoZXMgdGhlIHJlZ3VsYXIgSFogdGltZXIgb2ZmIHdoZW4gdGhlIHN5c3RlbSBpcyBnb2luZyBpZGxlLgotCSAgVGhpcyBoZWxwcyB6L1ZNIHRvIGRldGVjdCB0aGF0IHRoZSBMaW51eCBzeXN0ZW0gaXMgaWRsZS4gVk0gY2FuCi0JICB0aGVuICJzd2FwLW91dCIgdGhpcyBndWVzdCB3aGljaCByZWR1Y2VzIG1lbW9yeSB1c2FnZS4gSXQgYWxzbwotCSAgcmVkdWNlcyB0aGUgb3ZlcmhlYWQgb2YgaWRsZSBzeXN0ZW1zLgotCi0JICBUaGUgSFogdGltZXIgY2FuIGJlIHN3aXRjaGVkIG9uL29mZiB2aWEgL3Byb2Mvc3lzL2tlcm5lbC9oel90aW1lci4KLQkgIGh6X3RpbWVyPTAgbWVhbnMgSFogdGltZXIgaXMgZGlzYWJsZWQuIGh6X3RpbWVyPTEgbWVhbnMgSFoKLQkgIHRpbWVyIGlzIGFjdGl2ZS4KLQotY29uZmlnIE5PX0lETEVfSFpfSU5JVAotCWJvb2wgIkhaIHRpbWVyIGluIGlkbGUgb2ZmIGJ5IGRlZmF1bHQiCi0JZGVwZW5kcyBvbiBOT19JRExFX0haCi0JaGVscAotCSAgVGhlIEhaIHRpbWVyIGlzIHN3aXRjaGVkIG9mZiBpbiBpZGxlIGJ5IGRlZmF1bHQuIFRoYXQgbWVhbnMgdGhlCi0JICBIWiB0aW1lciBpcyBhbHJlYWR5IGRpc2FibGVkIGF0IGJvb3QgdGltZS4KLQogY29uZmlnIFMzOTBfSFlQRlNfRlMKIAlib29sICJzMzkwIGh5cGVydmlzb3IgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlzZWxlY3QgU1lTX0hZUEVSVklTT1IKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vTWFrZWZpbGUgYi9hcmNoL3MzOTAvY3J5cHRvL01ha2VmaWxlCmluZGV4IDE0ZTU1MmMuLjZhMTE1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9NYWtlZmlsZQpAQCAtMiw4ICsyLDkgQEAKICMgQ3J5cHRvZ3JhcGhpYyBBUEkKICMKIAotb2JqLSQoQ09ORklHX0NSWVBUT19TSEExX1MzOTApICs9IHNoYTFfczM5MC5vCi1vYmotJChDT05GSUdfQ1JZUFRPX1NIQTI1Nl9TMzkwKSArPSBzaGEyNTZfczM5MC5vCitvYmotJChDT05GSUdfQ1JZUFRPX1NIQTFfUzM5MCkgKz0gc2hhMV9zMzkwLm8gc2hhX2NvbW1vbi5vCitvYmotJChDT05GSUdfQ1JZUFRPX1NIQTI1Nl9TMzkwKSArPSBzaGEyNTZfczM5MC5vIHNoYV9jb21tb24ubworb2JqLSQoQ09ORklHX0NSWVBUT19TSEE1MTJfUzM5MCkgKz0gc2hhNTEyX3MzOTAubyBzaGFfY29tbW9uLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVTX1MzOTApICs9IGRlc19zMzkwLm8gZGVzX2NoZWNrX2tleS5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0FFU19TMzkwKSArPSBhZXNfczM5MC5vCiBvYmotJChDT05GSUdfUzM5MF9QUk5HKSArPSBwcm5nLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwppbmRleCBhM2Y2N2Y4Li5lMzNmMzJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCkBAIC00OTksNyArNDk5LDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBhZXNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWVzX3MzOTBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKQEAgLTU0MiwxNSArNTQyLDE1IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBhZXNfZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGFlc19zMzkwX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc19hbGcpOwogfQogCi1tb2R1bGVfaW5pdChhZXNfaW5pdCk7Ci1tb2R1bGVfZXhpdChhZXNfZmluaSk7Cittb2R1bGVfaW5pdChhZXNfczM5MF9pbml0KTsKK21vZHVsZV9leGl0KGFlc19zMzkwX2ZpbmkpOwogCiBNT0RVTEVfQUxJQVMoImFlcyIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2NyeXB0X3MzOTAuaCBiL2FyY2gvczM5MC9jcnlwdG8vY3J5cHRfczM5MC5oCmluZGV4IDk1ZjUxNjAuLjk5OTJmOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vY3J5cHRfczM5MC5oCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vY3J5cHRfczM5MC5oCkBAIC04Miw2ICs4Miw3IEBACiAJS0lNRF9RVUVSWSAgID0gQ1JZUFRfUzM5MF9LSU1EIHwgMCwKIAlLSU1EX1NIQV8xICAgPSBDUllQVF9TMzkwX0tJTUQgfCAxLAogCUtJTURfU0hBXzI1NiA9IENSWVBUX1MzOTBfS0lNRCB8IDIsCisJS0lNRF9TSEFfNTEyID0gQ1JZUFRfUzM5MF9LSU1EIHwgMywKIH07CiAKIC8qCkBAIC05Miw2ICs5Myw3IEBACiAJS0xNRF9RVUVSWSAgID0gQ1JZUFRfUzM5MF9LTE1EIHwgMCwKIAlLTE1EX1NIQV8xICAgPSBDUllQVF9TMzkwX0tMTUQgfCAxLAogCUtMTURfU0hBXzI1NiA9IENSWVBUX1MzOTBfS0xNRCB8IDIsCisJS0xNRF9TSEFfNTEyID0gQ1JZUFRfUzM5MF9LTE1EIHwgMywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMKaW5kZXggZWEyMjcwNy4uNGFiYTgzYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vZGVzX3MzOTAuYwpAQCAtNTUwLDcgKzU1MCw3IEBACiAJfQogfTsKIAotc3RhdGljIGludCBpbml0KHZvaWQpCitzdGF0aWMgaW50IGRlc19zMzkwX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNjEyLDcgKzYxMiw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZGVzX3MzOTBfZmluaSh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2RlczNfMTkyX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM18xOTJfYWxnKTsKQEAgLTYyNSw4ICs2MjUsOCBAQAogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzX2FsZyk7CiB9CiAKLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Cittb2R1bGVfaW5pdChkZXNfczM5MF9pbml0KTsKK21vZHVsZV9leGl0KGRlc19zMzkwX2ZpbmkpOwogCiBNT0RVTEVfQUxJQVMoImRlcyIpOwogTU9EVUxFX0FMSUFTKCJkZXMzX2VkZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGEuaCBiL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlYWZhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIHMzOTAgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0hBIFNlY3VyZSBIYXNoIEFsZ29yaXRobXMuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiBBdXRob3Iocyk6IEphbiBHbGF1YmVyIChqYW5nQGRlLmlibS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpZm5kZWYgX0NSWVBUT19BUkNIX1MzOTBfU0hBX0gKKyNkZWZpbmUgX0NSWVBUT19BUkNIX1MzOTBfU0hBX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KKworLyogbXVzdCBiZSBiaWcgZW5vdWdoIGZvciB0aGUgbGFyZ2VzdCBTSEEgdmFyaWFudCAqLworI2RlZmluZSBTSEFfTUFYX1NUQVRFX1NJWkUJMTYKKyNkZWZpbmUgU0hBX01BWF9CTE9DS19TSVpFICAgICAgU0hBNTEyX0JMT0NLX1NJWkUKKworc3RydWN0IHMzOTBfc2hhX2N0eCB7CisJdTY0IGNvdW50OyAgICAgICAgICAgICAgLyogbWVzc2FnZSBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1MzIgc3RhdGVbU0hBX01BWF9TVEFURV9TSVpFXTsKKwl1OCBidWZbMiAqIFNIQV9NQVhfQkxPQ0tfU0laRV07CisJaW50IGZ1bmM7CQkvKiBLSU1EIGZ1bmN0aW9uIHRvIHVzZSAqLworfTsKKwordm9pZCBzMzkwX3NoYV91cGRhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOwordm9pZCBzMzkwX3NoYV9maW5hbChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYwppbmRleCA1YTgzNGY2Li5iM2NiNWE4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKQEAgLTI5LDE2ICsyOSwxMSBAQAogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KIAogI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKLQotc3RydWN0IHMzOTBfc2hhMV9jdHggewotCXU2NCBjb3VudDsJCS8qIG1lc3NhZ2UgbGVuZ3RoICovCi0JdTMyIHN0YXRlWzVdOwotCXU4IGJ1ZlsyICogU0hBMV9CTE9DS19TSVpFXTsKLX07CisjaW5jbHVkZSAic2hhLmgiCiAKIHN0YXRpYyB2b2lkIHNoYTFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewotCXN0cnVjdCBzMzkwX3NoYTFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMV9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTFfSDE7CkBAIC00Niw3OSArNDEsNyBAQAogCXNjdHgtPnN0YXRlWzNdID0gU0hBMV9IMzsKIAlzY3R4LT5zdGF0ZVs0XSA9IFNIQTFfSDQ7CiAJc2N0eC0+Y291bnQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBzaGExX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwKLQkJCXVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc3RydWN0IHMzOTBfc2hhMV9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXVuc2lnbmVkIGludCBpbmRleDsKLQlpbnQgcmV0OwotCi0JLyogaG93IG11Y2ggaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyPyAqLwotCWluZGV4ID0gc2N0eC0+Y291bnQgJiAweDNmOwotCi0Jc2N0eC0+Y291bnQgKz0gbGVuOwotCi0JaWYgKGluZGV4ICsgbGVuIDwgU0hBMV9CTE9DS19TSVpFKQotCQlnb3RvIHN0b3JlOwotCi0JLyogcHJvY2VzcyBvbmUgc3RvcmVkIGJsb2NrICovCi0JaWYgKGluZGV4KSB7Ci0JCW1lbWNweShzY3R4LT5idWYgKyBpbmRleCwgZGF0YSwgU0hBMV9CTE9DS19TSVpFIC0gaW5kZXgpOwotCQlyZXQgPSBjcnlwdF9zMzkwX2tpbWQoS0lNRF9TSEFfMSwgc2N0eC0+c3RhdGUsIHNjdHgtPmJ1ZiwKLQkJCQkgICAgICBTSEExX0JMT0NLX1NJWkUpOwotCQlCVUdfT04ocmV0ICE9IFNIQTFfQkxPQ0tfU0laRSk7Ci0JCWRhdGEgKz0gU0hBMV9CTE9DS19TSVpFIC0gaW5kZXg7Ci0JCWxlbiAtPSBTSEExX0JMT0NLX1NJWkUgLSBpbmRleDsKLQl9Ci0KLQkvKiBwcm9jZXNzIGFzIG1hbnkgYmxvY2tzIGFzIHBvc3NpYmxlICovCi0JaWYgKGxlbiA+PSBTSEExX0JMT0NLX1NJWkUpIHsKLQkJcmV0ID0gY3J5cHRfczM5MF9raW1kKEtJTURfU0hBXzEsIHNjdHgtPnN0YXRlLCBkYXRhLAotCQkJCSAgICAgIGxlbiAmIH4oU0hBMV9CTE9DS19TSVpFIC0gMSkpOwotCQlCVUdfT04ocmV0ICE9IChsZW4gJiB+KFNIQTFfQkxPQ0tfU0laRSAtIDEpKSk7Ci0JCWRhdGEgKz0gcmV0OwotCQlsZW4gLT0gcmV0OwotCX0KLQotc3RvcmU6Ci0JLyogYW55dGhpbmcgbGVmdD8gKi8KLQlpZiAobGVuKQotCQltZW1jcHkoc2N0eC0+YnVmICsgaW5kZXggLCBkYXRhLCBsZW4pOwotfQotCi0vKiBBZGQgcGFkZGluZyBhbmQgcmV0dXJuIHRoZSBtZXNzYWdlIGRpZ2VzdC4gKi8KLXN0YXRpYyB2b2lkIHNoYTFfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCkKLXsKLQlzdHJ1Y3QgczM5MF9zaGExX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdTY0IGJpdHM7Ci0JdW5zaWduZWQgaW50IGluZGV4LCBlbmQ7Ci0JaW50IHJldDsKLQotCS8qIG11c3QgcGVyZm9ybSBtYW51YWwgcGFkZGluZyAqLwotCWluZGV4ID0gc2N0eC0+Y291bnQgJiAweDNmOwotCWVuZCA9ICAoaW5kZXggPCA1NikgPyBTSEExX0JMT0NLX1NJWkUgOiAoMiAqIFNIQTFfQkxPQ0tfU0laRSk7Ci0KLQkvKiBzdGFydCBwYWQgd2l0aCAxICovCi0Jc2N0eC0+YnVmW2luZGV4XSA9IDB4ODA7Ci0KLQkvKiBwYWQgd2l0aCB6ZXJvcyAqLwotCWluZGV4Kys7Ci0JbWVtc2V0KHNjdHgtPmJ1ZiArIGluZGV4LCAweDAwLCBlbmQgLSBpbmRleCAtIDgpOwotCi0JLyogYXBwZW5kIG1lc3NhZ2UgbGVuZ3RoICovCi0JYml0cyA9IHNjdHgtPmNvdW50ICogODsKLQltZW1jcHkoc2N0eC0+YnVmICsgZW5kIC0gOCwgJmJpdHMsIHNpemVvZihiaXRzKSk7Ci0KLQlyZXQgPSBjcnlwdF9zMzkwX2tpbWQoS0lNRF9TSEFfMSwgc2N0eC0+c3RhdGUsIHNjdHgtPmJ1ZiwgZW5kKTsKLQlCVUdfT04ocmV0ICE9IGVuZCk7Ci0KLQkvKiBjb3B5IGRpZ2VzdCB0byBvdXQgKi8KLQltZW1jcHkob3V0LCBzY3R4LT5zdGF0ZSwgU0hBMV9ESUdFU1RfU0laRSk7Ci0KLQkvKiB3aXBlIGNvbnRleHQgKi8KLQltZW1zZXQoc2N0eCwgMCwgc2l6ZW9mICpzY3R4KTsKKwlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKQEAgLTEyNywzMyArNTAsMzEgQEAKIAkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKIAkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhMV9jdHgpLAorCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKIAkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCiAJLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKIAkuZGlhX2RpZ2VzdHNpemUJPQlTSEExX0RJR0VTVF9TSVpFLAogCS5kaWFfaW5pdAk9CXNoYTFfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXNoYTFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzaGExX2ZpbmFsIH0gfQorCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAorCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNoYTFfczM5MF9pbml0KHZvaWQpCiB7CiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzEpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaGExX3MzOTBfZmluaSh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KHNoYTFfczM5MF9pbml0KTsKK21vZHVsZV9leGl0KHNoYTFfczM5MF9maW5pKTsKIAogTU9EVUxFX0FMSUFTKCJzaGExIik7Ci0KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU0hBMSBTZWN1cmUgSGFzaCBBbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYwppbmRleCBjY2Y4NjMzLi4xOWMwM2ZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCkBAIC0yMiwxNiArMjIsMTEgQEAKICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CiAKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCi0KLXN0cnVjdCBzMzkwX3NoYTI1Nl9jdHggewotCXU2NCBjb3VudDsJCS8qIG1lc3NhZ2UgbGVuZ3RoICovCi0JdTMyIHN0YXRlWzhdOwotCXU4IGJ1ZlsyICogU0hBMjU2X0JMT0NLX1NJWkVdOwotfTsKKyNpbmNsdWRlICJzaGEuaCIKIAogc3RhdGljIHZvaWQgc2hhMjU2X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKLQlzdHJ1Y3QgczM5MF9zaGEyNTZfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMjU2X0gwOwogCXNjdHgtPnN0YXRlWzFdID0gU0hBMjU2X0gxOwpAQCAtNDIsNzkgKzM3LDcgQEAKIAlzY3R4LT5zdGF0ZVs2XSA9IFNIQTI1Nl9INjsKIAlzY3R4LT5zdGF0ZVs3XSA9IFNIQTI1Nl9INzsKIAlzY3R4LT5jb3VudCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNoYTI1Nl91cGRhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmRhdGEsCi0JCQkgIHVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc3RydWN0IHMzOTBfc2hhMjU2X2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCWludCByZXQ7Ci0KLQkvKiBob3cgbXVjaCBpcyBhbHJlYWR5IGluIHRoZSBidWZmZXI/ICovCi0JaW5kZXggPSBzY3R4LT5jb3VudCAmIDB4M2Y7Ci0KLQlzY3R4LT5jb3VudCArPSBsZW47Ci0KLQlpZiAoKGluZGV4ICsgbGVuKSA8IFNIQTI1Nl9CTE9DS19TSVpFKQotCQlnb3RvIHN0b3JlOwotCi0JLyogcHJvY2VzcyBvbmUgc3RvcmVkIGJsb2NrICovCi0JaWYgKGluZGV4KSB7Ci0JCW1lbWNweShzY3R4LT5idWYgKyBpbmRleCwgZGF0YSwgU0hBMjU2X0JMT0NLX1NJWkUgLSBpbmRleCk7Ci0JCXJldCA9IGNyeXB0X3MzOTBfa2ltZChLSU1EX1NIQV8yNTYsIHNjdHgtPnN0YXRlLCBzY3R4LT5idWYsCi0JCQkJICAgICAgU0hBMjU2X0JMT0NLX1NJWkUpOwotCQlCVUdfT04ocmV0ICE9IFNIQTI1Nl9CTE9DS19TSVpFKTsKLQkJZGF0YSArPSBTSEEyNTZfQkxPQ0tfU0laRSAtIGluZGV4OwotCQlsZW4gLT0gU0hBMjU2X0JMT0NLX1NJWkUgLSBpbmRleDsKLQl9Ci0KLQkvKiBwcm9jZXNzIGFzIG1hbnkgYmxvY2tzIGFzIHBvc3NpYmxlICovCi0JaWYgKGxlbiA+PSBTSEEyNTZfQkxPQ0tfU0laRSkgewotCQlyZXQgPSBjcnlwdF9zMzkwX2tpbWQoS0lNRF9TSEFfMjU2LCBzY3R4LT5zdGF0ZSwgZGF0YSwKLQkJCQkgICAgICBsZW4gJiB+KFNIQTI1Nl9CTE9DS19TSVpFIC0gMSkpOwotCQlCVUdfT04ocmV0ICE9IChsZW4gJiB+KFNIQTI1Nl9CTE9DS19TSVpFIC0gMSkpKTsKLQkJZGF0YSArPSByZXQ7Ci0JCWxlbiAtPSByZXQ7Ci0JfQotCi1zdG9yZToKLQkvKiBhbnl0aGluZyBsZWZ0PyAqLwotCWlmIChsZW4pCi0JCW1lbWNweShzY3R4LT5idWYgKyBpbmRleCAsIGRhdGEsIGxlbik7Ci19Ci0KLS8qIEFkZCBwYWRkaW5nIGFuZCByZXR1cm4gdGhlIG1lc3NhZ2UgZGlnZXN0ICovCi1zdGF0aWMgdm9pZCBzaGEyNTZfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCkKLXsKLQlzdHJ1Y3QgczM5MF9zaGEyNTZfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1NjQgYml0czsKLQl1bnNpZ25lZCBpbnQgaW5kZXgsIGVuZDsKLQlpbnQgcmV0OwotCi0JLyogbXVzdCBwZXJmb3JtIG1hbnVhbCBwYWRkaW5nICovCi0JaW5kZXggPSBzY3R4LT5jb3VudCAmIDB4M2Y7Ci0JZW5kID0gKGluZGV4IDwgNTYpID8gU0hBMjU2X0JMT0NLX1NJWkUgOiAoMiAqIFNIQTI1Nl9CTE9DS19TSVpFKTsKLQotCS8qIHN0YXJ0IHBhZCB3aXRoIDEgKi8KLQlzY3R4LT5idWZbaW5kZXhdID0gMHg4MDsKLQotCS8qIHBhZCB3aXRoIHplcm9zICovCi0JaW5kZXgrKzsKLQltZW1zZXQoc2N0eC0+YnVmICsgaW5kZXgsIDB4MDAsIGVuZCAtIGluZGV4IC0gOCk7Ci0KLQkvKiBhcHBlbmQgbWVzc2FnZSBsZW5ndGggKi8KLQliaXRzID0gc2N0eC0+Y291bnQgKiA4OwotCW1lbWNweShzY3R4LT5idWYgKyBlbmQgLSA4LCAmYml0cywgc2l6ZW9mKGJpdHMpKTsKLQotCXJldCA9IGNyeXB0X3MzOTBfa2ltZChLSU1EX1NIQV8yNTYsIHNjdHgtPnN0YXRlLCBzY3R4LT5idWYsIGVuZCk7Ci0JQlVHX09OKHJldCAhPSBlbmQpOwotCi0JLyogY29weSBkaWdlc3QgdG8gb3V0ICovCi0JbWVtY3B5KG91dCwgc2N0eC0+c3RhdGUsIFNIQTI1Nl9ESUdFU1RfU0laRSk7Ci0KLQkvKiB3aXBlIGNvbnRleHQgKi8KLQltZW1zZXQoc2N0eCwgMCwgc2l6ZW9mICpzY3R4KTsKKwlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMjU2OwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewpAQCAtMTIzLDE3ICs0NiwxNyBAQAogCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAogCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAogCS5jcmFfYmxvY2tzaXplCT0JU0hBMjU2X0JMT0NLX1NJWkUsCi0JLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYTI1Nl9jdHgpLAorCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKIAkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCiAJLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKIAkuZGlhX2RpZ2VzdHNpemUJPQlTSEEyNTZfRElHRVNUX1NJWkUsCiAJLmRpYV9pbml0CT0Jc2hhMjU2X2luaXQsCi0JLmRpYV91cGRhdGUJPQlzaGEyNTZfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzaGEyNTZfZmluYWwgfSB9CisJLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCisJLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQogfTsKIAotc3RhdGljIGludCBpbml0KHZvaWQpCitzdGF0aWMgaW50IHNoYTI1Nl9zMzkwX2luaXQodm9pZCkKIHsKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMjU2KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTQxLDE1ICs2NCwxNCBAQAogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNoYTI1Nl9zMzkwX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Cittb2R1bGVfaW5pdChzaGEyNTZfczM5MF9pbml0KTsKK21vZHVsZV9leGl0KHNoYTI1Nl9zMzkwX2ZpbmkpOwogCiBNT0RVTEVfQUxJQVMoInNoYTI1NiIpOwotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNIQTI1NiBTZWN1cmUgSGFzaCBBbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2M3ODYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogczM5MCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0hBNTEyIGFuZCBTSEEzOCBTZWN1cmUgSGFzaCBBbGdvcml0aG0uCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiBBdXRob3Iocyk6IEphbiBHbGF1YmVyIChqYW5nQGRlLmlibS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisKKyNpbmNsdWRlICJzaGEuaCIKKyNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCisKK3N0YXRpYyB2b2lkIHNoYTUxMl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCSooX191NjQgKikmY3R4LT5zdGF0ZVswXSA9IDB4NmEwOWU2NjdmM2JjYzkwOFVMTDsKKwkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMl0gPSAweGJiNjdhZTg1ODRjYWE3M2JVTEw7CisJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzRdID0gMHgzYzZlZjM3MmZlOTRmODJiVUxMOworCSooX191NjQgKikmY3R4LT5zdGF0ZVs2XSA9IDB4YTU0ZmY1M2E1ZjFkMzZmMVVMTDsKKwkqKF9fdTY0ICopJmN0eC0+c3RhdGVbOF0gPSAweDUxMGU1MjdmYWRlNjgyZDFVTEw7CisJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzEwXSA9IDB4OWIwNTY4OGMyYjNlNmMxZlVMTDsKKwkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMTJdID0gMHgxZjgzZDlhYmZiNDFiZDZiVUxMOworCSooX191NjQgKikmY3R4LT5zdGF0ZVsxNF0gPSAweDViZTBjZDE5MTM3ZTIxNzlVTEw7CisJY3R4LT5jb3VudCA9IDA7CisJY3R4LT5mdW5jID0gS0lNRF9TSEFfNTEyOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhNTEyX2FsZyA9IHsKKwkuY3JhX25hbWUJPQkic2hhNTEyIiwKKwkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTUxMi1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKKwkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTUxMl9CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKHNoYTUxMl9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7CisJLmRpYV9kaWdlc3RzaXplCT0JU0hBNTEyX0RJR0VTVF9TSVpFLAorCS5kaWFfaW5pdAk9CXNoYTUxMl9pbml0LAorCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAorCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK307CisKK01PRFVMRV9BTElBUygic2hhNTEyIik7CisKK3N0YXRpYyB2b2lkIHNoYTM4NF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCSooX191NjQgKikmY3R4LT5zdGF0ZVswXSA9IDB4Y2JiYjlkNWRjMTA1OWVkOFVMTDsKKwkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMl0gPSAweDYyOWEyOTJhMzY3Y2Q1MDdVTEw7CisJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzRdID0gMHg5MTU5MDE1YTMwNzBkZDE3VUxMOworCSooX191NjQgKikmY3R4LT5zdGF0ZVs2XSA9IDB4MTUyZmVjZDhmNzBlNTkzOVVMTDsKKwkqKF9fdTY0ICopJmN0eC0+c3RhdGVbOF0gPSAweDY3MzMyNjY3ZmZjMDBiMzFVTEw7CisJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzEwXSA9IDB4OGViNDRhODc2ODU4MTUxMVVMTDsKKwkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMTJdID0gMHhkYjBjMmUwZDY0Zjk4ZmE3VUxMOworCSooX191NjQgKikmY3R4LT5zdGF0ZVsxNF0gPSAweDQ3YjU0ODFkYmVmYTRmYTRVTEw7CisJY3R4LT5jb3VudCA9IDA7CisJY3R4LT5mdW5jID0gS0lNRF9TSEFfNTEyOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhMzg0X2FsZyA9IHsKKwkuY3JhX25hbWUJPQkic2hhMzg0IiwKKwkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTM4NC1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKKwkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTM4NF9CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKHNoYTM4NF9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7CisJLmRpYV9kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAorCS5kaWFfaW5pdAk9CXNoYTM4NF9pbml0LAorCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAorCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK307CisKK01PRFVMRV9BTElBUygic2hhMzg0Iik7CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzUxMikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnNoYTUxMl9hbGcpKSA8IDApCisJCWdvdG8gb3V0OworCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhMzg0X2FsZykpIDwgMCkKKwkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGE1MTJfYWxnKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEE1MTIgYW5kIFNIQS0zODQgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNmViOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogczM5MCBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTSEEgU2VjdXJlIEhhc2ggQWxnb3JpdGhtcy4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKKyAqIEF1dGhvcihzKTogSmFuIEdsYXViZXIgKGphbmdAZGUuaWJtLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSAic2hhLmgiCisjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgorCit2b2lkIHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXVuc2lnbmVkIGludCBic2l6ZSA9IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pOworCXVuc2lnbmVkIGludCBpbmRleDsKKwlpbnQgcmV0OworCisJLyogaG93IG11Y2ggaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyPyAqLworCWluZGV4ID0gY3R4LT5jb3VudCAmIChic2l6ZSAtIDEpOworCWN0eC0+Y291bnQgKz0gbGVuOworCisJaWYgKChpbmRleCArIGxlbikgPCBic2l6ZSkKKwkJZ290byBzdG9yZTsKKworCS8qIHByb2Nlc3Mgb25lIHN0b3JlZCBibG9jayAqLworCWlmIChpbmRleCkgeworCQltZW1jcHkoY3R4LT5idWYgKyBpbmRleCwgZGF0YSwgYnNpemUgLSBpbmRleCk7CisJCXJldCA9IGNyeXB0X3MzOTBfa2ltZChjdHgtPmZ1bmMsIGN0eC0+c3RhdGUsIGN0eC0+YnVmLCBic2l6ZSk7CisJCUJVR19PTihyZXQgIT0gYnNpemUpOworCQlkYXRhICs9IGJzaXplIC0gaW5kZXg7CisJCWxlbiAtPSBic2l6ZSAtIGluZGV4OworCX0KKworCS8qIHByb2Nlc3MgYXMgbWFueSBibG9ja3MgYXMgcG9zc2libGUgKi8KKwlpZiAobGVuID49IGJzaXplKSB7CisJCXJldCA9IGNyeXB0X3MzOTBfa2ltZChjdHgtPmZ1bmMsIGN0eC0+c3RhdGUsIGRhdGEsCisJCQkJICAgICAgbGVuICYgfihic2l6ZSAtIDEpKTsKKwkJQlVHX09OKHJldCAhPSAobGVuICYgfihic2l6ZSAtIDEpKSk7CisJCWRhdGEgKz0gcmV0OworCQlsZW4gLT0gcmV0OworCX0KK3N0b3JlOgorCWlmIChsZW4pCisJCW1lbWNweShjdHgtPmJ1ZiArIGluZGV4ICwgZGF0YSwgbGVuKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzOTBfc2hhX3VwZGF0ZSk7CisKK3ZvaWQgczM5MF9zaGFfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCkKK3sKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXVuc2lnbmVkIGludCBic2l6ZSA9IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pOworCXU2NCBiaXRzOworCXVuc2lnbmVkIGludCBpbmRleCwgZW5kLCBwbGVuOworCWludCByZXQ7CisKKwkvKiBTSEEtNTEyIHVzZXMgMTI4IGJpdCBwYWRkaW5nIGxlbmd0aCAqLworCXBsZW4gPSAoYnNpemUgPiBTSEEyNTZfQkxPQ0tfU0laRSkgPyAxNiA6IDg7CisKKwkvKiBtdXN0IHBlcmZvcm0gbWFudWFsIHBhZGRpbmcgKi8KKwlpbmRleCA9IGN0eC0+Y291bnQgJiAoYnNpemUgLSAxKTsKKwllbmQgPSAoaW5kZXggPCBic2l6ZSAtIHBsZW4pID8gYnNpemUgOiAoMiAqIGJzaXplKTsKKworCS8qIHN0YXJ0IHBhZCB3aXRoIDEgKi8KKwljdHgtPmJ1ZltpbmRleF0gPSAweDgwOworCWluZGV4Kys7CisKKwkvKiBwYWQgd2l0aCB6ZXJvcyAqLworCW1lbXNldChjdHgtPmJ1ZiArIGluZGV4LCAweDAwLCBlbmQgLSBpbmRleCAtIDgpOworCisJLyoKKwkgKiBBcHBlbmQgbWVzc2FnZSBsZW5ndGguIFdlbGwsIFNIQS01MTIgd2FudHMgYSAxMjggYml0IGxlbmdodCB2YWx1ZSwKKwkgKiBuZXZlcnRoZWxlc3Mgd2UgdXNlIHU2NCwgc2hvdWxkIGJlIGVub3VnaCBmb3Igbm93Li4uCisJICovCisJYml0cyA9IGN0eC0+Y291bnQgKiA4OworCW1lbWNweShjdHgtPmJ1ZiArIGVuZCAtIDgsICZiaXRzLCBzaXplb2YoYml0cykpOworCisJcmV0ID0gY3J5cHRfczM5MF9raW1kKGN0eC0+ZnVuYywgY3R4LT5zdGF0ZSwgY3R4LT5idWYsIGVuZCk7CisJQlVHX09OKHJldCAhPSBlbmQpOworCisJLyogY29weSBkaWdlc3QgdG8gb3V0ICovCisJbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShjcnlwdG9faGFzaF9jYXN0KHRmbSkpKTsKKwkvKiB3aXBlIGNvbnRleHQgKi8KKwltZW1zZXQoY3R4LCAwLCBzaXplb2YgKmN0eCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV9maW5hbCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiczM5MCBTSEEgY2lwaGVyIGNvbW1vbiBmdW5jdGlvbnMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IDM5OTIxZjMuLmE3MmYyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtMSw4ICsxLDkgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAotIyBTYXQgRmViICA5IDEyOjEzOjAxIDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzQKKyMgV2VkIE1hciAgNSAxMToyMjo1OSAyMDA4CiAjCitDT05GSUdfU0NIRURfTUM9eQogQ09ORklHX01NVT15CiBDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC00MywxMiArNDQsMTUgQEAKICMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX05TPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19OQU1FU1BBQ0VTPXkKIENPTkZJR19VVFNfTlM9eQpAQCAtODUsNyArODksOSBAQAogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CitDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xODUsNiArMTkxLDcgQEAKIENPTkZJR19JUExfVk09eQogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKICMgQ09ORklHX1BST0NFU1NfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BGQVVMVD15CiAjIENPTkZJR19TSEFSRURfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTQzNSw2ICs0NDIsNyBAQAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CkBAIC01MzAsMTEgKzUzOCw5IEBACiAjIENPTkZJR19TTVNHSVVDViBpcyBub3Qgc2V0CiAjIENPTkZJR19DTEFXIGlzIG5vdCBzZXQKIENPTkZJR19RRVRIPXkKLQotIwotIyBHaWdhYml0IEV0aGVybmV0IGRlZmF1bHQgc2V0dGluZ3MKLSMKLSMgQ09ORklHX1FFVEhfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfUUVUSF9MMj15CitDT05GSUdfUUVUSF9MMz15CitDT05GSUdfUUVUSF9JUFY2PXkKIENPTkZJR19DQ1dHUk9VUD15CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC01OTMsNiArNTk5LDcgQEAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC03NTAsNyArNzU3LDYgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKQEAgLTc1OSw2ICs3NjUsNyBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU0FNUExFUz15CiAjIENPTkZJR19TQU1QTEVfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVfS1BST0JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCBiM2I2NTBhLi43NzA1MWNkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTQsOSArNCwxNCBAQAogCiBFWFRSQV9BRkxBR1MJOj0gLXRyYWRpdGlvbmFsCiAKKyMKKyMgUGFzc2luZyBudWxsIHBvaW50ZXJzIGlzIG9rIGZvciBzbXAgY29kZSwgc2luY2Ugd2UgYWNjZXNzIHRoZSBsb3djb3JlIGhlcmUuCisjCitDRkxBR1Nfc21wLm8JOj0gLVduby1ub25udWxsCisKIG9iai15CTo9ICBiaXRtYXAubyB0cmFwcy5vIHRpbWUubyBwcm9jZXNzLm8gYmFzZS5vIGVhcmx5Lm8gXAogICAgICAgICAgICAgc2V0dXAubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAotCSAgICBzZW1hcGhvcmUubyBzMzkwX2V4dC5vIGRlYnVnLm8gaXJxLm8gaXBsLm8gZGlzLm8gZGlhZy5vCisJICAgIHMzOTBfZXh0Lm8gZGVidWcubyBpcnEubyBpcGwubyBkaXMubyBkaWFnLm8KIAogb2JqLXkJKz0gJChpZiAkKENPTkZJR182NEJJVCksZW50cnk2NC5vLGVudHJ5Lm8pCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxyZWlwbDY0Lm8scmVpcGwubykKQEAgLTE0LDcgKzE5LDcgQEAKIGV4dHJhLXkJCQkJKz0gaGVhZC5vIGluaXRfdGFzay5vIHZtbGludXgubGRzCiAKIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gczM5MF9rc3ltcy5vIG1vZHVsZS5vCi1vYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyB0b3BvbG9neS5vCiAKIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0Lm8KIGNvbXBhdC1vYmotJChDT05GSUdfQVVESVQpCSs9IGNvbXBhdF9hdWRpdC5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwppbmRleCA1MGI4NWQwLi5kN2YyMjIyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKQEAgLTYyLDcgKzYyLDYgQEAKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8bmV0L3NjbS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaAppbmRleCBlODlmOGMwLi4yMDcyM2EwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmgKQEAgLTE2Miw0ICsxNjIsNzcgQEAKIAljb21wYXRfc2lnc2V0X3QJCXVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwogfTsKIAorc3RydWN0IF9fc3lzY3RsX2FyZ3MzMjsKK3N0cnVjdCBzdGF0NjRfZW11MzE7CitzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0X2VtdTMxOworc3RydWN0IGZhZHZpc2U2NF82NF9hcmdzOworc3RydWN0IG9sZF9zaWdhY3Rpb24zMjsKK3N0cnVjdCBvbGRfc2lnYWN0aW9uMzI7CisKK2xvbmcgc3lzMzJfY2hvd24xNihjb25zdCBjaGFyIF9fdXNlciAqIGZpbGVuYW1lLCB1MTYgdXNlciwgdTE2IGdyb3VwKTsKK2xvbmcgc3lzMzJfbGNob3duMTYoY29uc3QgY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwgdTE2IHVzZXIsIHUxNiBncm91cCk7Citsb25nIHN5czMyX2ZjaG93bjE2KHVuc2lnbmVkIGludCBmZCwgdTE2IHVzZXIsIHUxNiBncm91cCk7Citsb25nIHN5czMyX3NldHJlZ2lkMTYodTE2IHJnaWQsIHUxNiBlZ2lkKTsKK2xvbmcgc3lzMzJfc2V0Z2lkMTYodTE2IGdpZCk7Citsb25nIHN5czMyX3NldHJldWlkMTYodTE2IHJ1aWQsIHUxNiBldWlkKTsKK2xvbmcgc3lzMzJfc2V0dWlkMTYodTE2IHVpZCk7Citsb25nIHN5czMyX3NldHJlc3VpZDE2KHUxNiBydWlkLCB1MTYgZXVpZCwgdTE2IHN1aWQpOworbG9uZyBzeXMzMl9nZXRyZXN1aWQxNih1MTYgX191c2VyICpydWlkLCB1MTYgX191c2VyICpldWlkLCB1MTYgX191c2VyICpzdWlkKTsKK2xvbmcgc3lzMzJfc2V0cmVzZ2lkMTYodTE2IHJnaWQsIHUxNiBlZ2lkLCB1MTYgc2dpZCk7Citsb25nIHN5czMyX2dldHJlc2dpZDE2KHUxNiBfX3VzZXIgKnJnaWQsIHUxNiBfX3VzZXIgKmVnaWQsIHUxNiBfX3VzZXIgKnNnaWQpOworbG9uZyBzeXMzMl9zZXRmc3VpZDE2KHUxNiB1aWQpOworbG9uZyBzeXMzMl9zZXRmc2dpZDE2KHUxNiBnaWQpOworbG9uZyBzeXMzMl9nZXRncm91cHMxNihpbnQgZ2lkc2V0c2l6ZSwgdTE2IF9fdXNlciAqZ3JvdXBsaXN0KTsKK2xvbmcgc3lzMzJfc2V0Z3JvdXBzMTYoaW50IGdpZHNldHNpemUsIHUxNiBfX3VzZXIgKmdyb3VwbGlzdCk7Citsb25nIHN5czMyX2dldHVpZDE2KHZvaWQpOworbG9uZyBzeXMzMl9nZXRldWlkMTYodm9pZCk7Citsb25nIHN5czMyX2dldGdpZDE2KHZvaWQpOworbG9uZyBzeXMzMl9nZXRlZ2lkMTYodm9pZCk7Citsb25nIHN5czMyX2lwYyh1MzIgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgdGhpcmQsIHUzMiBwdHIpOworbG9uZyBzeXMzMl90cnVuY2F0ZTY0KGNvbnN0IGNoYXIgX191c2VyICogcGF0aCwgdW5zaWduZWQgbG9uZyBoaWdoLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGxvdyk7Citsb25nIHN5czMyX2Z0cnVuY2F0ZTY0KHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgbG9uZyBoaWdoLCB1bnNpZ25lZCBsb25nIGxvdyk7Citsb25nIHN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbChjb21wYXRfcGlkX3QgcGlkLAorCQkJCSBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqaW50ZXJ2YWwpOworbG9uZyBzeXMzMl9ydF9zaWdwcm9jbWFzayhpbnQgaG93LCBjb21wYXRfc2lnc2V0X3QgX191c2VyICpzZXQsCisJCQkgIGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKm9zZXQsIHNpemVfdCBzaWdzZXRzaXplKTsKK2xvbmcgc3lzMzJfcnRfc2lncGVuZGluZyhjb21wYXRfc2lnc2V0X3QgX191c2VyICpzZXQsIHNpemVfdCBzaWdzZXRzaXplKTsKK2xvbmcgc3lzMzJfcnRfc2lncXVldWVpbmZvKGludCBwaWQsIGludCBzaWcsIGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp1aW5mbyk7Citsb25nIHN5czMyX2V4ZWN2ZSh2b2lkKTsKK2xvbmcgc3lzMzJfaW5pdF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVhcmdzKTsKK2xvbmcgc3lzMzJfZGVsZXRlX21vZHVsZShjb25zdCBjaGFyIF9fdXNlciAqbmFtZV91c2VyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworbG9uZyBzeXMzMl9nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCisJCQlzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eik7Citsb25nIHN5czMyX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKKwkJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KTsKK2xvbmcgc3lzMzJfcGF1c2Uodm9pZCk7Citsb25nIHN5czMyX3ByZWFkNjQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNvdW50LAorCQkgICB1MzIgcG9zaGksIHUzMiBwb3Nsbyk7Citsb25nIHN5czMyX3B3cml0ZTY0KHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgICBzaXplX3QgY291bnQsIHUzMiBwb3NoaSwgdTMyIHBvc2xvKTsKK2NvbXBhdF9zc2l6ZV90IHN5czMyX3JlYWRhaGVhZChpbnQgZmQsIHUzMiBvZmZoaSwgdTMyIG9mZmxvLCBzMzIgY291bnQpOworbG9uZyBzeXMzMl9zZW5kZmlsZShpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIGNvbXBhdF9vZmZfdCBfX3VzZXIgKm9mZnNldCwKKwkJICAgIHNpemVfdCBjb3VudCk7Citsb25nIHN5czMyX3NlbmRmaWxlNjQoaW50IG91dF9mZCwgaW50IGluX2ZkLCBjb21wYXRfbG9mZl90IF9fdXNlciAqb2Zmc2V0LAorCQkgICAgICBzMzIgY291bnQpOworbG9uZyBzeXMzMl9zeXNjdGwoc3RydWN0IF9fc3lzY3RsX2FyZ3MzMiBfX3VzZXIgKmFyZ3MpOworbG9uZyBzeXMzMl9zdGF0NjQoY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwgc3RydWN0IHN0YXQ2NF9lbXUzMSBfX3VzZXIgKiBzdGF0YnVmKTsKK2xvbmcgc3lzMzJfbHN0YXQ2NChjaGFyIF9fdXNlciAqIGZpbGVuYW1lLAorCQkgICBzdHJ1Y3Qgc3RhdDY0X2VtdTMxIF9fdXNlciAqIHN0YXRidWYpOworbG9uZyBzeXMzMl9mc3RhdDY0KHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBzdGF0NjRfZW11MzEgX191c2VyICogc3RhdGJ1Zik7Citsb25nIHN5czMyX2ZzdGF0YXQ2NCh1bnNpZ25lZCBpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCSAgICAgc3RydWN0IHN0YXQ2NF9lbXUzMSBfX3VzZXIqIHN0YXRidWYsIGludCBmbGFnKTsKK3Vuc2lnbmVkIGxvbmcgb2xkMzJfbW1hcChzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0X2VtdTMxIF9fdXNlciAqYXJnKTsKK2xvbmcgc3lzMzJfbW1hcDIoc3RydWN0IG1tYXBfYXJnX3N0cnVjdF9lbXUzMSBfX3VzZXIgKmFyZyk7Citsb25nIHN5czMyX3JlYWQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK2xvbmcgc3lzMzJfd3JpdGUodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK2xvbmcgc3lzMzJfY2xvbmUodm9pZCk7Citsb25nIHN5czMyX2ZhZHZpc2U2NChpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBsZW4sIGludCBhZHZpc2UpOworbG9uZyBzeXMzMl9mYWR2aXNlNjRfNjQoc3RydWN0IGZhZHZpc2U2NF82NF9hcmdzIF9fdXNlciAqYXJncyk7Citsb25nIHN5czMyX3NpZ2FjdGlvbihpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyIF9fdXNlciAqYWN0LAorCQkgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uMzIgX191c2VyICpvYWN0KTsKK2xvbmcgc3lzMzJfcnRfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKKwkJCXN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKm9hY3QsIHNpemVfdCBzaWdzZXRzaXplKTsKK2xvbmcgc3lzMzJfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdDMyIF9fdXNlciAqdXNzLCBzdGFja190MzIgX191c2VyICp1b3NzKTsKICNlbmRpZiAvKiBfQVNNX1MzOTBYX1MzOTBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwppbmRleCBhNTY5MmM0Li5jN2YwMmU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSAiY29tcGF0X2xpbnV4LmgiCiAjaW5jbHVkZSAiY29tcGF0X3B0cmFjZS5oIgorI2luY2x1ZGUgImVudHJ5LmgiCiAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKQEAgLTQyOCw2ICs0MjksMTAgQEAKIAkvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjayAqLwogCXNwID0gKHVuc2lnbmVkIGxvbmcpIEEocmVncy0+Z3Byc1sxNV0pOwogCisJLyogT3ZlcmZsb3cgb24gYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayBnaXZlcyBTSUdTRUdWLiAqLworCWlmIChvbl9zaWdfc3RhY2soc3ApICYmICFvbl9zaWdfc3RhY2soKHNwIC0gZnJhbWVfc2l6ZSkgJiAtOFVMKSkKKwkJcmV0dXJuICh2b2lkIF9fdXNlciAqKSAtMVVMOworCiAJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCiAJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKIAkJaWYgKCEgc2FzX3NzX2ZsYWdzKHNwKSkKQEAgLTQ2MSw2ICs0NjYsOSBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnJhbWUsIHNpemVvZihzaWdmcmFtZTMyKSkpCiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCisJaWYgKGZyYW1lID09ICh2b2lkIF9fdXNlciAqKSAtMVVMKQorCQlnb3RvIGdpdmVfc2lnc2VndjsKKwogCWlmIChfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnNjLm9sZG1hc2ssICZzZXQtPnNpZywgX1NJR01BU0tfQ09QWV9TSVpFMzIpKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKIApAQCAtNTE0LDYgKzUyMiw5IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKHJ0X3NpZ2ZyYW1lMzIpKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKKwlpZiAoZnJhbWUgPT0gKHZvaWQgX191c2VyICopIC0xVUwpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCiAJaWYgKGNvcHlfc2lnaW5mb190b191c2VyMzIoJmZyYW1lLT5pbmZvLCBpbmZvKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwppbmRleCAxYjJmNWNlLi5kZmYwNTY4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTczLDcgKzcyLDcgQEAKIHN0YXRpYyBpbnQgZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBkZWJ1Z19pbmZvX3QqICBkZWJ1Z19pbmZvX2NyZWF0ZShjaGFyICpuYW1lLCBpbnQgcGFnZXNfcGVyX2FyZWEsCi0JCQlpbnQgbnJfYXJlYXMsIGludCBidWZfc2l6ZSk7CisJCQlpbnQgbnJfYXJlYXMsIGludCBidWZfc2l6ZSwgbW9kZV90IG1vZGUpOwogc3RhdGljIHZvaWQgZGVidWdfaW5mb19nZXQoZGVidWdfaW5mb190ICopOwogc3RhdGljIHZvaWQgZGVidWdfaW5mb19wdXQoZGVidWdfaW5mb190ICopOwogc3RhdGljIGludCBkZWJ1Z19wcm9sb2dfbGV2ZWxfZm4oZGVidWdfaW5mb190ICogaWQsCkBAIC0xNTcsNyArMTU2LDcgQEAKIH07CiAKIC8qIHVzZWQgYnkgZHVtcCBhbmFseXNpcyB0b29scyB0byBkZXRlcm1pbmUgdmVyc2lvbiBvZiBkZWJ1ZyBmZWF0dXJlICovCi11bnNpZ25lZCBpbnQgZGVidWdfZmVhdHVyZV92ZXJzaW9uID0gX19ERUJVR19GRUFUVVJFX1ZFUlNJT047CitzdGF0aWMgdW5zaWduZWQgaW50IF9fdXNlZCBkZWJ1Z19mZWF0dXJlX3ZlcnNpb24gPSBfX0RFQlVHX0ZFQVRVUkVfVkVSU0lPTjsKIAogLyogc3RhdGljIGdsb2JhbHMgKi8KIApAQCAtMzI3LDcgKzMyNiw4IEBACiAgKi8KIAogc3RhdGljIGRlYnVnX2luZm9fdCoKLWRlYnVnX2luZm9fY3JlYXRlKGNoYXIgKm5hbWUsIGludCBwYWdlc19wZXJfYXJlYSwgaW50IG5yX2FyZWFzLCBpbnQgYnVmX3NpemUpCitkZWJ1Z19pbmZvX2NyZWF0ZShjaGFyICpuYW1lLCBpbnQgcGFnZXNfcGVyX2FyZWEsIGludCBucl9hcmVhcywgaW50IGJ1Zl9zaXplLAorCQkgIG1vZGVfdCBtb2RlKQogewogCWRlYnVnX2luZm9fdCogcmM7CiAKQEAgLTMzNiw2ICszMzYsOCBAQAogICAgICAgICBpZighcmMpIAogCQlnb3RvIG91dDsKIAorCXJjLT5tb2RlID0gbW9kZSAmIH5TX0lGTVQ7CisKIAkvKiBjcmVhdGUgcm9vdCBkaXJlY3RvcnkgKi8KICAgICAgICAgcmMtPmRlYnVnZnNfcm9vdF9lbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihyYy0+bmFtZSwKIAkJCQkJZGVidWdfZGVidWdmc19yb290X2VudHJ5KTsKQEAgLTY3NiwyMyArNjc4LDMwIEBACiB9CiAKIC8qCi0gKiBkZWJ1Z19yZWdpc3RlcjoKLSAqIC0gY3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgZGVidWcgYXJlYSBmb3IgdGhlIGNhbGxlcgotICogLSByZXR1cm5zIGhhbmRsZSBmb3IgZGVidWcgYXJlYQorICogZGVidWdfcmVnaXN0ZXJfbW9kZToKKyAqIC0gQ3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgZGVidWcgYXJlYSBmb3IgdGhlIGNhbGxlcgorICogICBUaGUgbW9kZSBwYXJhbWV0ZXIgYWxsb3dzIHRvIHNwZWNpZnkgYWNjZXNzIHJpZ2h0cyBmb3IgdGhlIHMzOTBkYmYgZmlsZXMKKyAqIC0gUmV0dXJucyBoYW5kbGUgZm9yIGRlYnVnIGFyZWEKICAqLwogCi1kZWJ1Z19pbmZvX3QqCi1kZWJ1Z19yZWdpc3RlciAoY2hhciAqbmFtZSwgaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMsIGludCBidWZfc2l6ZSkKK2RlYnVnX2luZm9fdCAqZGVidWdfcmVnaXN0ZXJfbW9kZShjaGFyICpuYW1lLCBpbnQgcGFnZXNfcGVyX2FyZWEsIGludCBucl9hcmVhcywKKwkJCQkgIGludCBidWZfc2l6ZSwgbW9kZV90IG1vZGUsIHVpZF90IHVpZCwKKwkJCQkgIGdpZF90IGdpZCkKIHsKIAlkZWJ1Z19pbmZvX3QgKnJjID0gTlVMTDsKIAorCS8qIFNpbmNlIGRlYnVnZnMgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgdWlkL2dpZCBvdGhlciB0aGFuIHJvb3QsICovCisJLyogd2UgZG8gbm90IGFsbG93IGdpZC91aWQgIT0gMCB1bnRpbCB3ZSBnZXQgc3VwcG9ydCBmb3IgdGhhdC4gKi8KKwlpZiAoKHVpZCAhPSAwKSB8fCAoZ2lkICE9IDApKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJkZWJ1ZzogV2FybmluZyAtIEN1cnJlbnRseSBvbmx5IHVpZC9naWQgIgorCQkgICAgICAgIj0gMCBhcmUgc3VwcG9ydGVkLiBVc2luZyByb290IGFzIG93bmVyIG5vdyEiKTsKIAlpZiAoIWluaXRpYWxpemVkKQogCQlCVUcoKTsKIAltdXRleF9sb2NrKCZkZWJ1Z19tdXRleCk7CiAKICAgICAgICAgLyogY3JlYXRlIG5ldyBkZWJ1Z19pbmZvICovCiAKLQlyYyA9IGRlYnVnX2luZm9fY3JlYXRlKG5hbWUsIHBhZ2VzX3Blcl9hcmVhLCBucl9hcmVhcywgYnVmX3NpemUpOworCXJjID0gZGVidWdfaW5mb19jcmVhdGUobmFtZSwgcGFnZXNfcGVyX2FyZWEsIG5yX2FyZWFzLCBidWZfc2l6ZSwgbW9kZSk7CiAJaWYoIXJjKSAKIAkJZ290byBvdXQ7CiAJZGVidWdfcmVnaXN0ZXJfdmlldyhyYywgJmRlYnVnX2xldmVsX3ZpZXcpOwpAQCAtNzA1LDYgKzcxNCwyMCBAQAogCW11dGV4X3VubG9jaygmZGVidWdfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0woZGVidWdfcmVnaXN0ZXJfbW9kZSk7CisKKy8qCisgKiBkZWJ1Z19yZWdpc3RlcjoKKyAqIC0gY3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgZGVidWcgYXJlYSBmb3IgdGhlIGNhbGxlcgorICogLSByZXR1cm5zIGhhbmRsZSBmb3IgZGVidWcgYXJlYQorICovCisKK2RlYnVnX2luZm9fdCAqZGVidWdfcmVnaXN0ZXIoY2hhciAqbmFtZSwgaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMsCisJCQkgICAgIGludCBidWZfc2l6ZSkKK3sKKwlyZXR1cm4gZGVidWdfcmVnaXN0ZXJfbW9kZShuYW1lLCBwYWdlc19wZXJfYXJlYSwgbnJfYXJlYXMsIGJ1Zl9zaXplLAorCQkJCSAgIFNfSVJVU1IgfCBTX0lXVVNSLCAwLCAwKTsKK30KIAogLyoKICAqIGRlYnVnX3VucmVnaXN0ZXI6CkBAIC0xMDczLDE1ICsxMDk2LDE2IEBACiAJaW50IHJjID0gMDsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCW1vZGVfdCBtb2RlID0gU19JRlJFRzsKKwltb2RlX3QgbW9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpwZGU7CiAKIAlpZiAoIWlkKQogCQlnb3RvIG91dDsKLQlpZiAodmlldy0+cHJvbG9nX3Byb2MgfHwgdmlldy0+Zm9ybWF0X3Byb2MgfHwgdmlldy0+aGVhZGVyX3Byb2MpCi0JCW1vZGUgfD0gU19JUlVTUjsKLQlpZiAodmlldy0+aW5wdXRfcHJvYykKLQkJbW9kZSB8PSBTX0lXVVNSOworCW1vZGUgPSAoaWQtPm1vZGUgfCBTX0lGUkVHKSAmIH5TX0lYVUdPOworCWlmICghKHZpZXctPnByb2xvZ19wcm9jIHx8IHZpZXctPmZvcm1hdF9wcm9jIHx8IHZpZXctPmhlYWRlcl9wcm9jKSkKKwkJbW9kZSAmPSB+KFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCk7CisJaWYgKCF2aWV3LT5pbnB1dF9wcm9jKQorCQltb2RlICY9IH4oU19JV1VTUiB8IFNfSVdHUlAgfCBTX0lXT1RIKTsKIAlwZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHZpZXctPm5hbWUsIG1vZGUsIGlkLT5kZWJ1Z2ZzX3Jvb3RfZW50cnksCiAJCQkJaWQgLCAmZGVidWdfZmlsZV9vcHMpOwogCWlmICghcGRlKXsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwppbmRleCA5ZjdiNzNiLi41NDBhNjdmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2NwY21kLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KKyNpbmNsdWRlICJlbnRyeS5oIgogCiAvKgogICogQ3JlYXRlIGEgS2VybmVsIE5TUyBpZiB0aGUgU0FWRVNZUz0gcGFyYW1ldGVyIGlzIGRlZmluZWQKQEAgLTg4LDEzICs4OSwxNyBAQAogCiAJX19jcGNtZChkZWZzeXNfY21kLCBOVUxMLCAwLCAmcmVzcG9uc2UpOwogCi0JaWYgKHJlc3BvbnNlICE9IDApCisJaWYgKHJlc3BvbnNlICE9IDApIHsKKwkJa2VybmVsX25zc19uYW1lWzBdID0gJ1wwJzsKIAkJcmV0dXJuOworCX0KIAogCV9fY3BjbWQoc2F2ZXN5c19jbWQsIE5VTEwsIDAsICZyZXNwb25zZSk7CiAKLQlpZiAocmVzcG9uc2UgIT0gc3RybGVuKHNhdmVzeXNfY21kKSkKKwlpZiAocmVzcG9uc2UgIT0gc3RybGVuKHNhdmVzeXNfY21kKSkgeworCQlrZXJuZWxfbnNzX25hbWVbMF0gPSAnXDAnOwogCQlyZXR1cm47CisJfQogCiAJaXBsX2ZsYWdzID0gSVBMX05TU19WQUxJRDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaCBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjE4OTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgX0VOVFJZX0gKKyNkZWZpbmUgX0VOVFJZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCit0eXBlZGVmIHZvaWQgcGdtX2NoZWNrX2hhbmRsZXJfdChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2V4dGVybiBwZ21fY2hlY2tfaGFuZGxlcl90ICpwZ21fY2hlY2tfdGFibGVbMTI4XTsKK3BnbV9jaGVja19oYW5kbGVyX3QgZG9fcHJvdGVjdGlvbl9leGNlcHRpb247CitwZ21fY2hlY2tfaGFuZGxlcl90IGRvX2RhdF9leGNlcHRpb247CisKK2V4dGVybiBpbnQgc3lzY3RsX3VzZXJwcm9jZXNzX2RlYnVnOworCit2b2lkIGRvX3NpbmdsZV9zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3ZvaWQgc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVudHJ5ZXhpdCk7Cit2b2lkIGtlcm5lbF9zdGFja19vdmVyZmxvdyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwordm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50IGhhbmRsZV9zaWduYWwzMih1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKKwkJICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCit2b2lkIGRvX2V4dGludChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgc2hvcnQgY29kZSk7CitpbnQgX19jcHVpbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICpjcHV2b2lkKTsKK3ZvaWQgX19pbml0IHN0YXJ0dXBfaW5pdCh2b2lkKTsKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnIpOworCitzdHJ1Y3QgbmV3X3V0c25hbWU7CitzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0Oworc3RydWN0IGZhZHZpc2U2NF82NF9hcmdzOworc3RydWN0IG9sZF9zaWdhY3Rpb247CitzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3Q7CisKK2xvbmcgc3lzX3BpcGUodW5zaWduZWQgbG9uZyBfX3VzZXIgKmZpbGRlcyk7Citsb25nIHN5c19tbWFwMihzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IF9fdXNlciAgKmFyZyk7Citsb25nIG9sZF9tbWFwKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpOworbG9uZyBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCB1bnNpZ25lZCBsb25nIHNlY29uZCwKKwkgICAgIHVuc2lnbmVkIGxvbmcgdGhpcmQsIHZvaWQgX191c2VyICpwdHIpOworbG9uZyBzMzkweF9uZXd1bmFtZShzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICpuYW1lKTsKK2xvbmcgczM5MHhfcGVyc29uYWxpdHkodW5zaWduZWQgbG9uZyBwZXJzb25hbGl0eSk7Citsb25nIHMzOTBfZmFkdmlzZTY0KGludCBmZCwgdTMyIG9mZnNldF9oaWdoLCB1MzIgb2Zmc2V0X2xvdywKKwkJICAgIHNpemVfdCBsZW4sIGludCBhZHZpY2UpOworbG9uZyBzMzkwX2ZhZHZpc2U2NF82NChzdHJ1Y3QgZmFkdmlzZTY0XzY0X2FyZ3MgX191c2VyICphcmdzKTsKK2xvbmcgczM5MF9mYWxsb2NhdGUoaW50IGZkLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgdTMyIGxlbl9oaWdoLCB1MzIgbGVuX2xvdyk7Citsb25nIHN5c19mb3JrKHZvaWQpOworbG9uZyBzeXNfY2xvbmUodm9pZCk7Citsb25nIHN5c192Zm9yayh2b2lkKTsKK3ZvaWQgZXhlY3ZlX3RhaWwodm9pZCk7Citsb25nIHN5c19leGVjdmUodm9pZCk7CitpbnQgc3lzX3NpZ3N1c3BlbmQoaW50IGhpc3RvcnkwLCBpbnQgaGlzdG9yeTEsIG9sZF9zaWdzZXRfdCBtYXNrKTsKK2xvbmcgc3lzX3NpZ2FjdGlvbihpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwkJICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICpvYWN0KTsKK2xvbmcgc3lzX3NpZ2FsdHN0YWNrKGNvbnN0IHN0YWNrX3QgX191c2VyICp1c3MsIHN0YWNrX3QgX191c2VyICp1b3NzKTsKK2xvbmcgc3lzX3NpZ3JldHVybih2b2lkKTsKK2xvbmcgc3lzX3J0X3NpZ3JldHVybih2b2lkKTsKK2xvbmcgc3lzMzJfc2lncmV0dXJuKHZvaWQpOworbG9uZyBzeXMzMl9ydF9zaWdyZXR1cm4odm9pZCk7Citsb25nIG9sZF9zZWxlY3Qoc3RydWN0IHNlbF9hcmdfc3RydWN0IF9fdXNlciAqYXJnKTsKK2xvbmcgc3lzX3B0cmFjZShsb25nIHJlcXVlc3QsIGxvbmcgcGlkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7CisKKyNlbmRpZiAvKiBfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCBlZmRlNmUxLi5jZDk1OWMwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtNDc1LDYgKzQ3NSw3IEBACiBwZ21fbm9fdnRpbWU6CiAjZW5kaWYKIAlsZwklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKKwltdmMJU1BfQVJHUyg4LCVyMTUpLF9fTENfTEFTVF9CUkVBSwogCVRSQUNFX0lSUVNfT0ZGCiAJbGdmCSVyMyxfX0xDX1BHTV9JTEMJIyBsb2FkIHByb2dyYW0gaW50ZXJydXB0aW9uIGNvZGUKIAlsZ2hpCSVyOCwweDdmCkBAIC04NDcsNiArODQ4LDcgQEAKIAlqZQkwZgogCWxhCSVyMSxfX0xDX1NBVkVfQVJFQSszMgogMDoJbXZjCVNQX1IxMigzMiwlcjE1KSwwKCVyMSkJIyBtb3ZlICVyMTItJXIxNSB0byBzdGFjaworCW12YwlTUF9BUkdTKDgsJXIxNSksX19MQ19MQVNUX0JSRUFLCiAJeGMJX19TRl9CQUNLQ0hBSU4oOCwlcjE1KSxfX1NGX0JBQ0tDSEFJTiglcjE1KSAjIGNsZWFyIGJhY2sgY2hhaW4KIAlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCiAJamcJa2VybmVsX3N0YWNrX292ZXJmbG93CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwppbmRleCA2MGFjZGMyLi41MzI1NDI0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTY1NSw3ICs2NTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGtzZXQgKnJlaXBsX2tzZXQ7CiAKLXZvaWQgcmVpcGxfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQorc3RhdGljIHZvaWQgcmVpcGxfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQogewogCXN0cnVjdCBjY3dfZGV2X2lkIGRldmlkOwogCXN0YXRpYyBjaGFyIGJ1ZlsxMDBdOwpAQCAtNzA0LDYgKzcwNCw3IEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWlwbF9wcm9iZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYwppbmRleCBjNTU0OWEyLi5lZDA0ZDEzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAgKgktIFdoZW4gdGhlIHByb2JlZCBmdW5jdGlvbiByZXR1cm5zLCB0aGlzIHByb2JlCiAgKgkJY2F1c2VzIHRoZSBoYW5kbGVycyB0byBmaXJlCiAgKi8KLXZvaWQga3JldHByb2JlX3RyYW1wb2xpbmVfaG9sZGVyKHZvaWQpCitzdGF0aWMgdm9pZCBfX3VzZWQga3JldHByb2JlX3RyYW1wb2xpbmVfaG9sZGVyKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlKCIuZ2xvYmFsIGtyZXRwcm9iZV90cmFtcG9saW5lXG4iCiAJCSAgICAgImtyZXRwcm9iZV90cmFtcG9saW5lOiBiY3IgMCwwXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYTZhNDcyOS4uYzFhZmYxOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CisjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC00NCw2ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlICJlbnRyeS5oIgogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBhc20gKCJyZXRfZnJvbV9mb3JrIik7CiAKQEAgLTc2LDYgKzc5LDcgQEAKICAqIE5lZWQgdG8ga25vdyBhYm91dCBDUFVzIGdvaW5nIGlkbGU/CiAgKi8KIHN0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChpZGxlX2NoYWluKTsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBzMzkwX2lkbGVfZGF0YSwgczM5MF9pZGxlKTsKIAogaW50IHJlZ2lzdGVyX2lkbGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKQEAgLTg5LDkgKzkzLDMzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfaWRsZV9ub3RpZmllcik7CiAKLXZvaWQgZG9fbW9uaXRvcl9jYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGludGVycnVwdGlvbl9jb2RlKQorc3RhdGljIGludCBzMzkwX2lkbGVfZW50ZXIodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfU01QCisJc3RydWN0IHMzOTBfaWRsZV9kYXRhICppZGxlOworCWludCBucl9jYWxscyA9IDA7CisJdm9pZCAqaGNwdTsKKwlpbnQgcmM7CisKKwloY3B1ID0gKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCk7CisJcmMgPSBfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpZGxlX2NoYWluLCBTMzkwX0NQVV9JRExFLCBoY3B1LCAtMSwKKwkJCQkJICAmbnJfY2FsbHMpOworCWlmIChyYyA9PSBOT1RJRllfQkFEKSB7CisJCW5yX2NhbGxzLS07CisJCV9fYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmlkbGVfY2hhaW4sIFMzOTBfQ1BVX05PVF9JRExFLAorCQkJCQkgICAgIGhjcHUsIG5yX2NhbGxzLCBOVUxMKTsKKwkJcmV0dXJuIHJjOworCX0KKwlpZGxlID0gJl9fZ2V0X2NwdV92YXIoczM5MF9pZGxlKTsKKwlzcGluX2xvY2soJmlkbGUtPmxvY2spOworCWlkbGUtPmlkbGVfY291bnQrKzsKKwlpZGxlLT5pbl9pZGxlID0gMTsKKwlpZGxlLT5pZGxlX2VudGVyID0gZ2V0X2Nsb2NrKCk7CisJc3Bpbl91bmxvY2soJmlkbGUtPmxvY2spOworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3ZvaWQgczM5MF9pZGxlX2xlYXZlKHZvaWQpCit7CiAJc3RydWN0IHMzOTBfaWRsZV9kYXRhICppZGxlOwogCiAJaWRsZSA9ICZfX2dldF9jcHVfdmFyKHMzOTBfaWRsZSk7CkBAIC05OSwxMCArMTI3LDYgQEAKIAlpZGxlLT5pZGxlX3RpbWUgKz0gZ2V0X2Nsb2NrKCkgLSBpZGxlLT5pZGxlX2VudGVyOwogCWlkbGUtPmluX2lkbGUgPSAwOwogCXNwaW5fdW5sb2NrKCZpZGxlLT5sb2NrKTsKLSNlbmRpZgotCS8qIGRpc2FibGUgbW9uaXRvciBjYWxsIGNsYXNzIDAgKi8KLQlfX2N0bF9jbGVhcl9iaXQoOCwgMTUpOwotCiAJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmlkbGVfY2hhaW4sIFMzOTBfQ1BVX05PVF9JRExFLAogCQkJCSAgICh2b2lkICopKGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CkBAIC0xMTMsNTQgKzEzNywzMCBAQAogICovCiBzdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKLQlpbnQgY3B1LCByYzsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc3RydWN0IHMzOTBfaWRsZV9kYXRhICppZGxlOwotI2VuZGlmCi0KIAkvKiBDUFUgaXMgZ29pbmcgaWRsZS4gKi8KLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWlmIChuZWVkX3Jlc2NoZWQoKSkgewogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCXJldHVybjsKIAl9Ci0KLQlyYyA9IGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpZGxlX2NoYWluLAotCQkJCQlTMzkwX0NQVV9JRExFLCAodm9pZCAqKShsb25nKSBjcHUpOwotCWlmIChyYyAhPSBOT1RJRllfT0sgJiYgcmMgIT0gTk9USUZZX0RPTkUpCi0JCUJVRygpOwotCWlmIChyYyAhPSBOT1RJRllfT0spIHsKKwlpZiAoczM5MF9pZGxlX2VudGVyKCkgPT0gTk9USUZZX0JBRCkgewogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCXJldHVybjsKIAl9Ci0KLQkvKiBlbmFibGUgbW9uaXRvciBjYWxsIGNsYXNzIDAgKi8KLQlfX2N0bF9zZXRfYml0KDgsIDE1KTsKLQogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKSB7CisJaWYgKGNwdV9pc19vZmZsaW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHsKIAkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQljcHVfZGllKCk7CiAJfQogI2VuZGlmCi0KIAlsb2NhbF9tY2NrX2Rpc2FibGUoKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKSkgewogCQlsb2NhbF9tY2NrX2VuYWJsZSgpOworCQlzMzkwX2lkbGVfbGVhdmUoKTsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQlzMzkwX2hhbmRsZV9tY2NrKCk7CiAJCXJldHVybjsKIAl9Ci0jaWZkZWYgQ09ORklHX1NNUAotCWlkbGUgPSAmX19nZXRfY3B1X3ZhcihzMzkwX2lkbGUpOwotCXNwaW5fbG9jaygmaWRsZS0+bG9jayk7Ci0JaWRsZS0+aWRsZV9jb3VudCsrOwotCWlkbGUtPmluX2lkbGUgPSAxOwotCWlkbGUtPmlkbGVfZW50ZXIgPSBnZXRfY2xvY2soKTsKLQlzcGluX3VubG9jaygmaWRsZS0+bG9jayk7Ci0jZW5kaWYKIAl0cmFjZV9oYXJkaXJxc19vbigpOwogCS8qIFdhaXQgZm9yIGV4dGVybmFsLCBJL08gb3IgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHQuICovCiAJX19sb2FkX3Bzd19tYXNrKHBzd19rZXJuZWxfYml0cyB8IFBTV19NQVNLX1dBSVQgfApAQCAtMTcwLDkgKzE3MCwxMCBAQAogdm9pZCBjcHVfaWRsZSh2b2lkKQogewogCWZvciAoOzspIHsKKwkJdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljaygpOwogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQogCQkJZGVmYXVsdF9pZGxlKCk7Ci0KKwkJdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljaygpOwogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtMTk0LDYgKzE5NSw3IEBACiAJLyogU2hvdyBzdGFjayBiYWNrdHJhY2UgaWYgcHRfcmVncyBpcyBmcm9tIGtlcm5lbCBtb2RlICovCiAJaWYgKCEocmVncy0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpKQogCQlzaG93X3RyYWNlKE5VTEwsICh1bnNpZ25lZCBsb25nICopIHJlZ3MtPmdwcnNbMTVdKTsKKwlzaG93X2xhc3RfYnJlYWtpbmdfZXZlbnQocmVncyk7CiB9CiAKIGV4dGVybiB2b2lkIGtlcm5lbF90aHJlYWRfc3RhcnRlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDZlMDM2YmEuLjU4YTA2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlICJlbnRyeS5oIgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2luY2x1ZGUgImNvbXBhdF9wdHJhY2UuaCIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9leHQuYyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9leHQuYwppbmRleCBhY2Y5M2RiLi5lMDE5YjQxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfZXh0LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2V4dC5jCkBAIC0xMywxMSArMTMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSAiZW50cnkuaCIKIAogLyoKICAqIGV4dF9pbnRfaGFzaFtpbmRleF0gaXMgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IGZvciBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0cwpAQCAtMTE5LDEzICsxMjAsMTAgQEAKIAogCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCWlycV9lbnRlcigpOwotCWFzbSB2b2xhdGlsZSAoIm1jIDAsMCIpOwotCWlmIChTMzkwX2xvd2NvcmUuaW50X2Nsb2NrID49IFMzOTBfbG93Y29yZS5qaWZmeV90aW1lcikKLQkJLyoqCi0JCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBpL28gaW50ZXJydXB0IGRpZCBub3QgIm92ZXJ0YWtlIgotCQkgKiB0aGUgbGFzdCBIWiB0aW1lciBpbnRlcnJ1cHQuCi0JCSAqLwotCQlhY2NvdW50X3RpY2tzKFMzOTBfbG93Y29yZS5pbnRfY2xvY2spOworCXMzOTBfaWRsZV9jaGVjaygpOworCWlmIChTMzkwX2xvd2NvcmUuaW50X2Nsb2NrID49IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKQorCQkvKiBTZXJ2ZSB0aW1lciBpbnRlcnJ1cHRzIGZpcnN0LiAqLworCQljbG9ja19jb21wYXJhdG9yX3dvcmsoKTsKIAlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVEVSTkFMX0lOVEVSUlVQVF0rKzsKICAgICAgICAgaW5kZXggPSBleHRfaGFzaChjb2RlKTsKIAlmb3IgKHAgPSBleHRfaW50X2hhc2hbaW5kZXhdOyBwOyBwID0gcC0+bmV4dCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwppbmRleCA3MjM0YzczLi40ODIzOGExIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwpAQCAtMjcsMTMgKzI3LDYgQEAKIEVYUE9SVF9TWU1CT0woX3NiX2ZpbmRtYXApOwogCiAvKgotICogc2VtYXBob3JlIG9wcwotICovCi1FWFBPUlRfU1lNQk9MKF9fdXApOwotRVhQT1JUX1NZTUJPTChfX2Rvd24pOwotRVhQT1JUX1NZTUJPTChfX2Rvd25faW50ZXJydXB0aWJsZSk7Ci0KLS8qCiAgKiBiaW5mbXRfZWxmIGxvYWRlciAKICAqLwogZXh0ZXJuIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzMzkwX2ZwX3JlZ3MgKmZwcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxMzAzZi4uMDAwMDAwMAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9zMzkwL2tlcm5lbC9zZW1hcGhvcmUuYwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kKLSAqCi0gKiAgRGVyaXZlZCBmcm9tICJsaW51eC9hcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTksIExpbnVzIFRvcnZhbGRzCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLQotLyoKLSAqIEF0b21pY2FsbHkgdXBkYXRlIHNlbS0+Y291bnQuIEVxdWl2YWxlbnQgdG86Ci0gKiAgIG9sZF92YWwgPSBzZW0tPmNvdW50LmNvdW50ZXI7Ci0gKiAgIG5ld192YWwgPSAoKG9sZF92YWwgPj0gMCkgPyBvbGRfdmFsIDogMCkgKyBpbmNyOwotICogICBzZW0tPmNvdW50LmNvdW50ZXIgPSBuZXdfdmFsOwotICogICByZXR1cm4gb2xkX3ZhbDsKLSAqLwotc3RhdGljIGlubGluZSBpbnQgX19zZW1fdXBkYXRlX2NvdW50KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IGluY3IpCi17Ci0JaW50IG9sZF92YWwsIG5ld192YWw7Ci0KLQlhc20gdm9sYXRpbGUoCi0JCSIJbAklMCwwKCUzKVxuIgotCQkiMDoJbHRyCSUxLCUwXG4iCi0JCSIJamhlCTFmXG4iCi0JCSIJbGhpCSUxLDBcbiIKLQkJIjE6CWFyCSUxLCU0XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKLQkJIglqbAkwYlxuIgotCQk6ICI9JmQiIChvbGRfdmFsKSwgIj0mZCIgKG5ld192YWwpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAiZCIgKGluY3IpLCAibSIgKHNlbS0+Y291bnQpCi0JCTogImNjIik7Ci0JcmV0dXJuIG9sZF92YWw7Ci19Ci0KLS8qCi0gKiBUaGUgaW5saW5lIGZ1bmN0aW9uIHVwKCkgaW5jcmVtZW50ZWQgY291bnQgYnV0IHRoZSByZXN1bHQKLSAqIHdhcyA8PSAwLiBUaGlzIGluZGljYXRlcyB0aGF0IHNvbWUgcHJvY2VzcyBpcyB3YWl0aW5nIG9uCi0gKiB0aGUgc2VtYXBob3JlLiBUaGUgc2VtYXBob3JlIGlzIGZyZWUgYW5kIHdlJ2xsIHdha2UgdGhlCi0gKiBmaXJzdCBzbGVlcGluZyBwcm9jZXNzLCBzbyB3ZSBzZXQgY291bnQgdG8gMSB1bmxlc3Mgc29tZQotICogb3RoZXIgY3B1IGhhcyBjYWxsZWQgdXAgaW4gdGhlIG1lYW50aW1lIGluIHdoaWNoIGNhc2UKLSAqIHdlIGp1c3QgaW5jcmVtZW50IGNvdW50IGJ5IDEuCi0gKi8KLXZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgMSk7Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLX0KLQotLyoKLSAqIFRoZSBpbmxpbmUgZnVuY3Rpb24gZG93bigpIGRlY3JlbWVudGVkIGNvdW50IGFuZCB0aGUgcmVzdWx0Ci0gKiB3YXMgPCAwLiBUaGUgd2FpdCBsb29wIHdpbGwgYXRvbWljYWxseSB0ZXN0IGFuZCB1cGRhdGUgdGhlCi0gKiBzZW1hcGhvcmUgY291bnRlciBmb2xsb3dpbmcgdGhlIHJ1bGVzOgotICogICBjb3VudCA+IDA6IGRlY3JlbWVudCBjb3VudCwgd2FrZSB1cCBxdWV1ZSBhbmQgZXhpdC4KLSAqICAgY291bnQgPD0gMDogc2V0IGNvdW50IHRvIC0xLCBnbyB0byBzbGVlcC4KLSAqLwotdm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCi0JX19zZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoJnNlbS0+d2FpdCwgJndhaXQpOwotCXdoaWxlIChfX3NlbV91cGRhdGVfY291bnQoc2VtLCAtMSkgPD0gMCkgewotCQlzY2hlZHVsZSgpOwotCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCV9fc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX1JVTk5JTkcpOwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLS8qCi0gKiBTYW1lIGFzIF9fZG93bigpIHdpdGggYW4gYWRkaXRpb25hbCB0ZXN0IGZvciBzaWduYWxzLgotICogSWYgYSBzaWduYWwgaXMgcGVuZGluZyB0aGUgY291bnQgaXMgdXBkYXRlZCBhcyBmb2xsb3dzOgotICogICBjb3VudCA+IDA6IHdha2UgdXAgcXVldWUgYW5kIGV4aXQuCi0gKiAgIGNvdW50IDw9IDA6IHNldCBjb3VudCB0byAwLCB3YWtlIHVwIHF1ZXVlIGFuZCBleGl0LgotICovCi1pbnQgX19zY2hlZCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCi0JX19zZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQl3aGlsZSAoX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgLTEpIDw9IDApIHsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlfX3NlbV91cGRhdGVfY291bnQoc2VtLCAwKTsKLQkJCXJldHZhbCA9IC1FSU5UUjsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjaGVkdWxlKCk7Ci0JCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCV9fc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX1JVTk5JTkcpOwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IDI5MGU1MDQuLjcxNDExNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAKICNpbmNsdWRlIDxhc20vaXBsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQyNyw3ICs0MjgsNyBAQAogCWxjLT5pb19uZXdfcHN3Lm1hc2sgPSBwc3dfa2VybmVsX2JpdHM7CiAJbGMtPmlvX25ld19wc3cuYWRkciA9IFBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIGlvX2ludF9oYW5kbGVyOwogCWxjLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7Ci0JbGMtPmppZmZ5X3RpbWVyID0gLTFMTDsKKwlsYy0+Y2xvY2tfY29tcGFyYXRvciA9IC0xVUxMOwogCWxjLT5rZXJuZWxfc3RhY2sgPSAoKHVuc2lnbmVkIGxvbmcpICZpbml0X3RocmVhZF91bmlvbikgKyBUSFJFQURfU0laRTsKIAlsYy0+YXN5bmNfc3RhY2sgPSAodW5zaWduZWQgbG9uZykKIAkJX19hbGxvY19ib290bWVtKEFTWU5DX1NJWkUsIEFTWU5DX1NJWkUsIDApICsgQVNZTkNfU0laRTsKQEAgLTY4Nyw3ICs2ODgsNyBAQAogCXJldHVybiBTMzkwX2xvd2NvcmUuc3RmbF9mYWNfbGlzdDsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgc3RmbGUodW5zaWduZWQgbG9uZyBsb25nICpsaXN0LCBpbnQgZG91Ymxld29yZHMpCitzdGF0aWMgaW50IF9faW5pdCBfX3N0ZmxlKHVuc2lnbmVkIGxvbmcgbG9uZyAqbGlzdCwgaW50IGRvdWJsZXdvcmRzKQogewogCXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIF9bZG91Ymxld29yZHNdOyB9IGFkZHJ0eXBlOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19uciBhc20oIjAiKSA9IGRvdWJsZXdvcmRzIC0gMTsKQEAgLTY5Nyw2ICs2OTgsMTMgQEAKIAlyZXR1cm4gX19uciArIDE7CiB9CiAKK2ludCBfX2luaXQgc3RmbGUodW5zaWduZWQgbG9uZyBsb25nICpsaXN0LCBpbnQgZG91Ymxld29yZHMpCit7CisJaWYgKCEoc3RmbCgpICYgKDFVTCA8PCAyNCkpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIF9fc3RmbGUobGlzdCwgZG91Ymxld29yZHMpOworfQorCiAvKgogICogU2V0dXAgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLgogICovCkBAIC03NDEsNyArNzQ5LDcgQEAKIAkgKiAgIEhXQ0FQX1MzOTBfREZQIGJpdCA2LgogCSAqLwogCWlmICgoZWxmX2h3Y2FwICYgKDFVTCA8PCAyKSkgJiYKLQkgICAgc3RmbGUoJmZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQsIDEpID4gMCkgeworCSAgICBfX3N0ZmxlKCZmYWNpbGl0eV9saXN0X2V4dGVuZGVkLCAxKSA+IDApIHsKIAkJaWYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjQgLSA0MykpKQogCQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA2OwogCX0KQEAgLTgyMyw2ICs4MzEsNyBAQAogCiAgICAgICAgIGNwdV9pbml0KCk7CiAgICAgICAgIF9fY3B1X2xvZ2ljYWxfbWFwWzBdID0gUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyOworCXMzOTBfaW5pdF9jcHVfdG9wb2xvZ3koKTsKIAogCS8qCiAJICogU2V0dXAgY2FwYWJpbGl0aWVzIChFTEZfSFdDQVAgJiBFTEZfUExBVEZPUk0pLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNDQ0OWJmMy4uYjk3NjgyMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorI2luY2x1ZGUgImVudHJ5LmgiCiAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKQEAgLTIzNSw2ICsyMzYsMTAgQEAKIAkvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjayAqLwogCXNwID0gcmVncy0+Z3Byc1sxNV07CiAKKwkvKiBPdmVyZmxvdyBvbiBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGdpdmVzIFNJR1NFR1YuICovCisJaWYgKG9uX3NpZ19zdGFjayhzcCkgJiYgIW9uX3NpZ19zdGFjaygoc3AgLSBmcmFtZV9zaXplKSAmIC04VUwpKQorCQlyZXR1cm4gKHZvaWQgX191c2VyICopIC0xVUw7CisKIAkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KIAlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgewogCQlpZiAoISBzYXNfc3NfZmxhZ3Moc3ApKQpAQCAtMjcwLDYgKzI3NSw5IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKHNpZ2ZyYW1lKSkpCiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCisJaWYgKGZyYW1lID09ICh2b2lkIF9fdXNlciAqKSAtMVVMKQorCQlnb3RvIGdpdmVfc2lnc2VndjsKKwogCWlmIChfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnNjLm9sZG1hc2ssICZzZXQtPnNpZywgX1NJR01BU0tfQ09QWV9TSVpFKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKQEAgLTMyNyw2ICszMzUsOSBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnJhbWUsIHNpemVvZihydF9zaWdmcmFtZSkpKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKIAorCWlmIChmcmFtZSA9PSAodm9pZCBfX3VzZXIgKikgLTFVTCkKKwkJZ290byBnaXZlX3NpZ3NlZ3Y7CisKIAlpZiAoY29weV9zaWdpbmZvX3RvX3VzZXIoJmZyYW1lLT5pbmZvLCBpbmZvKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKQEAgLTQ3NCwxMSArNDg1LDYgQEAKIAkJaW50IHJldDsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCkpIHsKLQkJCWV4dGVybiBpbnQgaGFuZGxlX3NpZ25hbDMyKHVuc2lnbmVkIGxvbmcgc2lnLAotCQkJCQkJICAgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKLQkJCQkJCSAgIHNpZ2luZm9fdCAqaW5mbywKLQkJCQkJCSAgIHNpZ3NldF90ICpvbGRzZXQsCi0JCQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAJCQlyZXQgPSBoYW5kbGVfc2lnbmFsMzIoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncyk7CiAJICAgICAgICB9CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDg1MDYwNjUuLjBkZmE5ODggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSAiZW50cnkuaCIKIAogLyoKICAqIEFuIGFycmF5IHdpdGggYSBwb2ludGVyIHRoZSBsb3djb3JlIG9mIGV2ZXJ5IENQVS4KQEAgLTY3LDEzICs2OCwxMiBAQAogCUNQVV9TVEFURV9DT05GSUdVUkVELAogfTsKIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIERFRklORV9NVVRFWChzbXBfY3B1X3N0YXRlX211dGV4KTsKLSNlbmRpZgorREVGSU5FX01VVEVYKHNtcF9jcHVfc3RhdGVfbXV0ZXgpOworaW50IHNtcF9jcHVfcG9sYXJpemF0aW9uW05SX0NQVVNdOwogc3RhdGljIGludCBzbXBfY3B1X3N0YXRlW05SX0NQVVNdOworc3RhdGljIGludCBjcHVfbWFuYWdlbWVudDsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKLURFRklORV9QRVJfQ1BVKHN0cnVjdCBzMzkwX2lkbGVfZGF0YSwgczM5MF9pZGxlKTsKIAogc3RhdGljIHZvaWQgc21wX2V4dF9iaXRjYWxsKGludCwgZWNfYml0X3NpZyk7CiAKQEAgLTI5OCw3ICsyOTgsNyBAQAogLyoKICAqIHRoaXMgZnVuY3Rpb24gc2VuZHMgYSAncHVyZ2UgdGxiJyBzaWduYWwgdG8gYW5vdGhlciBDUFUuCiAgKi8KLXZvaWQgc21wX3B0bGJfY2FsbGJhY2sodm9pZCAqaW5mbykKK3N0YXRpYyB2b2lkIHNtcF9wdGxiX2NhbGxiYWNrKHZvaWQgKmluZm8pCiB7CiAJX190bGJfZmx1c2hfbG9jYWwoKTsKIH0KQEAgLTQ1Niw2ICs0NTYsNyBAQAogCQlpZiAoY3B1X2tub3duKGNwdV9pZCkpCiAJCQljb250aW51ZTsKIAkJX19jcHVfbG9naWNhbF9tYXBbbG9naWNhbF9jcHVdID0gY3B1X2lkOworCQlzbXBfY3B1X3BvbGFyaXphdGlvbltsb2dpY2FsX2NwdV0gPSBQT0xBUklaQVRJT05fVU5LTldOOwogCQlpZiAoIWNwdV9zdG9wcGVkKGxvZ2ljYWxfY3B1KSkKIAkJCWNvbnRpbnVlOwogCQljcHVfc2V0KGxvZ2ljYWxfY3B1LCBjcHVfcHJlc2VudF9tYXApOwpAQCAtNDg5LDYgKzQ5MCw3IEBACiAJCWlmIChjcHVfa25vd24oY3B1X2lkKSkKIAkJCWNvbnRpbnVlOwogCQlfX2NwdV9sb2dpY2FsX21hcFtsb2dpY2FsX2NwdV0gPSBjcHVfaWQ7CisJCXNtcF9jcHVfcG9sYXJpemF0aW9uW2xvZ2ljYWxfY3B1XSA9IFBPTEFSSVpBVElPTl9VTktOV047CiAJCWNwdV9zZXQobG9naWNhbF9jcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJCWlmIChjcHUgPj0gaW5mby0+Y29uZmlndXJlZCkKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX1NUQU5EQlk7CkBAIC02MjYsMTMgKzYyOCwxMSBAQAogCWlmICghbG93Y29yZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJYXN5bmNfc3RhY2sgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIEFTWU5DX09SREVSKTsKLQlpZiAoIWFzeW5jX3N0YWNrKQotCQlnb3RvIG91dF9hc3luY19zdGFjazsKIAlwYW5pY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIXBhbmljX3N0YWNrKQotCQlnb3RvIG91dF9wYW5pY19zdGFjazsKLQotCSpsb3djb3JlID0gUzM5MF9sb3djb3JlOworCWlmICghcGFuaWNfc3RhY2sgfHwgIWFzeW5jX3N0YWNrKQorCQlnb3RvIG91dDsKKwltZW1jcHkobG93Y29yZSwgJlMzOTBfbG93Y29yZSwgNTEyKTsKKwltZW1zZXQoKGNoYXIgKilsb3djb3JlICsgNTEyLCAwLCBzaXplb2YoKmxvd2NvcmUpIC0gNTEyKTsKIAlsb3djb3JlLT5hc3luY19zdGFjayA9IGFzeW5jX3N0YWNrICsgQVNZTkNfU0laRTsKIAlsb3djb3JlLT5wYW5pY19zdGFjayA9IHBhbmljX3N0YWNrICsgUEFHRV9TSVpFOwogCkBAIC02NTMsOSArNjUzLDggQEAKIG91dF9zYXZlX2FyZWE6CiAJZnJlZV9wYWdlKHBhbmljX3N0YWNrKTsKICNlbmRpZgotb3V0X3BhbmljX3N0YWNrOgorb3V0OgogCWZyZWVfcGFnZXMoYXN5bmNfc3RhY2ssIEFTWU5DX09SREVSKTsKLW91dF9hc3luY19zdGFjazoKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC03MTksOCArNzE4LDggQEAKIAljcHVfbG93Y29yZS0+cGVyY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXRbY3B1XTsKIAljcHVfbG93Y29yZS0+Y3VycmVudF90YXNrID0gKHVuc2lnbmVkIGxvbmcpIGlkbGU7CiAJY3B1X2xvd2NvcmUtPmNwdV9kYXRhLmNwdV9uciA9IGNwdTsKLQljcHVfbG93Y29yZS0+c29mdGlycV9wZW5kaW5nID0gMDsKLQljcHVfbG93Y29yZS0+ZXh0X2NhbGxfZmFzdCA9IDA7CisJY3B1X2xvd2NvcmUtPmtlcm5lbF9hc2NlID0gUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlOworCWNwdV9sb3djb3JlLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJZWllaW8oKTsKIAogCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9yZXN0YXJ0KSA9PSBzaWdwX2J1c3kpCkBAIC03OTcsMjMgKzc5Niw0MyBAQAogCiB2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJdW5zaWduZWQgbG9uZyBzYXZlX2FyZWEgPSAwOworI2VuZGlmCisJdW5zaWduZWQgbG9uZyBhc3luY19zdGFjaywgcGFuaWNfc3RhY2s7CisJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwogCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGxjX29yZGVyOwogCiAJc21wX2RldGVjdF9jcHVzKCk7CiAKIAkvKiByZXF1ZXN0IHRoZSAweDEyMDEgZW1lcmdlbmN5IHNpZ25hbCBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KIAlpZiAocmVnaXN0ZXJfZXh0ZXJuYWxfaW50ZXJydXB0KDB4MTIwMSwgZG9fZXh0X2NhbGxfaW50ZXJydXB0KSAhPSAwKQogCQlwYW5pYygiQ291bGRuJ3QgcmVxdWVzdCBleHRlcm5hbCBpbnRlcnJ1cHQgMHgxMjAxIik7Ci0JbWVtc2V0KGxvd2NvcmVfcHRyLCAwLCBzaXplb2YobG93Y29yZV9wdHIpKTsKIAlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKLQlzbXBfYWxsb2NfbG93Y29yZShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCisJLyogUmVhbGxvY2F0ZSBjdXJyZW50IGxvd2NvcmUsIGJ1dCBrZWVwIGl0cyBjb250ZW50cy4gKi8KKwlsY19vcmRlciA9IHNpemVvZihsb25nKSA9PSA4ID8gMSA6IDA7CisJbG93Y29yZSA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsIGxjX29yZGVyKTsKKwlwYW5pY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlhc3luY19zdGFjayA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVNZTkNfT1JERVIpOwogI2lmbmRlZiBDT05GSUdfNjRCSVQKIAlpZiAoTUFDSElORV9IQVNfSUVFRSkKLQkJY3RsX3NldF9iaXQoMTQsIDI5KTsgLyogZW5hYmxlIGV4dGVuZGVkIHNhdmUgYXJlYSAqLworCQlzYXZlX2FyZWEgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAjZW5kaWYKLQlzZXRfcHJlZml4KCh1MzIpKHVuc2lnbmVkIGxvbmcpIGxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwotCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9tY2NrX2Rpc2FibGUoKTsKKwlsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldID0gbG93Y29yZTsKKwkqbG93Y29yZSA9IFMzOTBfbG93Y29yZTsKKwlsb3djb3JlLT5wYW5pY19zdGFjayA9IHBhbmljX3N0YWNrICsgUEFHRV9TSVpFOworCWxvd2NvcmUtPmFzeW5jX3N0YWNrID0gYXN5bmNfc3RhY2sgKyBBU1lOQ19TSVpFOworI2lmbmRlZiBDT05GSUdfNjRCSVQKKwlpZiAoTUFDSElORV9IQVNfSUVFRSkKKwkJbG93Y29yZS0+ZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHIgPSAodTMyKSBzYXZlX2FyZWE7CisjZW5kaWYKKwlzZXRfcHJlZml4KCh1MzIpKHVuc2lnbmVkIGxvbmcpIGxvd2NvcmUpOworCWxvY2FsX21jY2tfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCWlmIChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQkJc21wX2NyZWF0ZV9pZGxlKGNwdSk7CkBAIC04MjksNiArODQ4LDcgQEAKIAlTMzkwX2xvd2NvcmUucGVyY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXRbMF07CiAJY3VycmVudF9zZXRbMF0gPSBjdXJyZW50OwogCXNtcF9jcHVfc3RhdGVbMF0gPSBDUFVfU1RBVEVfQ09ORklHVVJFRDsKKwlzbXBfY3B1X3BvbGFyaXphdGlvblswXSA9IFBPTEFSSVpBVElPTl9VTktOV047CiAJc3Bpbl9sb2NrX2luaXQoJigmX19nZXRfY3B1X3ZhcihzMzkwX2lkbGUpKS0+bG9jayk7CiB9CiAKQEAgLTg4MCwxNSArOTAwLDE5IEBACiAJY2FzZSAwOgogCQlpZiAoc21wX2NwdV9zdGF0ZVtjcHVdID09IENQVV9TVEFURV9DT05GSUdVUkVEKSB7CiAJCQlyYyA9IHNjbHBfY3B1X2RlY29uZmlndXJlKF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0pOwotCQkJaWYgKCFyYykKKwkJCWlmICghcmMpIHsKIAkJCQlzbXBfY3B1X3N0YXRlW2NwdV0gPSBDUFVfU1RBVEVfU1RBTkRCWTsKKwkJCQlzbXBfY3B1X3BvbGFyaXphdGlvbltjcHVdID0gUE9MQVJJWkFUSU9OX1VOS05XTjsKKwkJCX0KIAkJfQogCQlicmVhazsKIAljYXNlIDE6CiAJCWlmIChzbXBfY3B1X3N0YXRlW2NwdV0gPT0gQ1BVX1NUQVRFX1NUQU5EQlkpIHsKIAkJCXJjID0gc2NscF9jcHVfY29uZmlndXJlKF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0pOwotCQkJaWYgKCFyYykKKwkJCWlmICghcmMpIHsKIAkJCQlzbXBfY3B1X3N0YXRlW2NwdV0gPSBDUFVfU1RBVEVfQ09ORklHVVJFRDsKKwkJCQlzbXBfY3B1X3BvbGFyaXphdGlvbltjcHVdID0gUE9MQVJJWkFUSU9OX1VOS05XTjsKKwkJCX0KIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTAyLDYgKzkyNiwzNCBAQAogc3RhdGljIFNZU0RFVl9BVFRSKGNvbmZpZ3VyZSwgMDY0NCwgY3B1X2NvbmZpZ3VyZV9zaG93LCBjcHVfY29uZmlndXJlX3N0b3JlKTsKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAorc3RhdGljIHNzaXplX3QgY3B1X3BvbGFyaXphdGlvbl9zaG93KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgY3B1ID0gZGV2LT5pZDsKKwlzc2l6ZV90IGNvdW50OworCisJbXV0ZXhfbG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7CisJc3dpdGNoIChzbXBfY3B1X3BvbGFyaXphdGlvbltjcHVdKSB7CisJY2FzZSBQT0xBUklaQVRJT05fSFJaOgorCQljb3VudCA9IHNwcmludGYoYnVmLCAiaG9yaXpvbnRhbFxuIik7CisJCWJyZWFrOworCWNhc2UgUE9MQVJJWkFUSU9OX1ZMOgorCQljb3VudCA9IHNwcmludGYoYnVmLCAidmVydGljYWw6bG93XG4iKTsKKwkJYnJlYWs7CisJY2FzZSBQT0xBUklaQVRJT05fVk06CisJCWNvdW50ID0gc3ByaW50ZihidWYsICJ2ZXJ0aWNhbDptZWRpdW1cbiIpOworCQlicmVhazsKKwljYXNlIFBPTEFSSVpBVElPTl9WSDoKKwkJY291bnQgPSBzcHJpbnRmKGJ1ZiwgInZlcnRpY2FsOmhpZ2hcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb3VudCA9IHNwcmludGYoYnVmLCAidW5rbm93blxuIik7CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJnNtcF9jcHVfc3RhdGVfbXV0ZXgpOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBTWVNERVZfQVRUUihwb2xhcml6YXRpb24sIDA0NDQsIGNwdV9wb2xhcml6YXRpb25fc2hvdywgTlVMTCk7CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfY3B1X2FkZHJlc3Moc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBfX2NwdV9sb2dpY2FsX21hcFtkZXYtPmlkXSk7CkBAIC05MTQsNiArOTY2LDcgQEAKIAkmYXR0cl9jb25maWd1cmUuYXR0ciwKICNlbmRpZgogCSZhdHRyX2FkZHJlc3MuYXR0ciwKKwkmYXR0cl9wb2xhcml6YXRpb24uYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMTA1OCwxMSArMTExMSw0OCBAQAogb3V0OgogCXB1dF9vbmxpbmVfY3B1cygpOwogCW11dGV4X3VubG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7CisJaWYgKCFjcHVzX2VtcHR5KG5ld2NwdXMpKQorCQl0b3BvbG9neV9zY2hlZHVsZV91cGRhdGUoKTsKIAlyZXR1cm4gcmMgPyByYyA6IGNvdW50OwogfQogc3RhdGljIFNZU0RFVl9BVFRSKHJlc2NhbiwgMDIwMCwgTlVMTCwgcmVzY2FuX3N0b3JlKTsKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAorc3RhdGljIHNzaXplX3QgZGlzcGF0Y2hpbmdfc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3NpemVfdCBjb3VudDsKKworCW11dGV4X2xvY2soJnNtcF9jcHVfc3RhdGVfbXV0ZXgpOworCWNvdW50ID0gc3ByaW50ZihidWYsICIlZFxuIiwgY3B1X21hbmFnZW1lbnQpOworCW11dGV4X3VubG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBkaXNwYXRjaGluZ19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCisJCQkJIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgdmFsLCByYzsKKwljaGFyIGRlbGltOworCisJaWYgKHNzY2FuZihidWYsICIlZCAlYyIsICZ2YWwsICZkZWxpbSkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZhbCAhPSAwICYmIHZhbCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyYyA9IDA7CisJbXV0ZXhfbG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7CisJZ2V0X29ubGluZV9jcHVzKCk7CisJaWYgKGNwdV9tYW5hZ2VtZW50ID09IHZhbCkKKwkJZ290byBvdXQ7CisJcmMgPSB0b3BvbG9neV9zZXRfY3B1X21hbmFnZW1lbnQodmFsKTsKKwlpZiAoIXJjKQorCQljcHVfbWFuYWdlbWVudCA9IHZhbDsKK291dDoKKwlwdXRfb25saW5lX2NwdXMoKTsKKwltdXRleF91bmxvY2soJnNtcF9jcHVfc3RhdGVfbXV0ZXgpOworCXJldHVybiByYyA/IHJjIDogY291bnQ7Cit9CitzdGF0aWMgU1lTREVWX0FUVFIoZGlzcGF0Y2hpbmcsIDA2NDQsIGRpc3BhdGNoaW5nX3Nob3csIGRpc3BhdGNoaW5nX3N0b3JlKTsKKwogc3RhdGljIGludCBfX2luaXQgdG9wb2xvZ3lfaW5pdCh2b2lkKQogewogCWludCBjcHU7CkBAIC0xMDc2LDYgKzExNjYsMTAgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKICNlbmRpZgorCXJjID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmNwdV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAorCQkJICAgICAgICZhdHRyX2Rpc3BhdGNoaW5nLmF0dHIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewogCQlyYyA9IHNtcF9hZGRfcHJlc2VudF9jcHUoY3B1KTsKIAkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNfczM5MC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNfczM5MC5jCmluZGV4IGZlZmVlOTkuLjk4OGQwZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzX3MzOTAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c19zMzkwLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgotCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJlbnRyeS5oIgogCiAvKgogICogc3lzX3BpcGUoKSBpcyB0aGUgbm9ybWFsIEMgY2FsbGluZyBzdGFuZGFyZCBmb3IgY3JlYXRpbmcKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggM2JiYWMxMi4uN2FlYzY3NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9zMzkwX2V4dC5oPgpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9ldHIuaD4KKyNpbmNsdWRlIDxhc20vY2lvLmg+CiAKIC8qIGNoYW5nZSB0aGlzIGlmIHlvdSBoYXZlIHNvbWUgY29uc3RhbnQgdGltZSBkcmlmdCAqLwogI2RlZmluZSBVU0VDU19QRVJfSklGRlkgICAgICgodW5zaWduZWQgbG9uZykgMTAwMDAwMC9IWikKQEAgLTU3LDE2ICs1OCwxNiBAQAogCiBzdGF0aWMgZXh0X2ludF9pbmZvX3QgZXh0X2ludF9pbmZvX2NjOwogc3RhdGljIGV4dF9pbnRfaW5mb190IGV4dF9pbnRfZXRyX2NjOwotc3RhdGljIHU2NCBpbml0X3RpbWVyX2NjOwogc3RhdGljIHU2NCBqaWZmaWVzX3RpbWVyX2NjOwotc3RhdGljIHU2NCB4dGltZV9jYzsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGNvbXBhcmF0b3JzKTsKIAogLyoKICAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW1lIGluIG5hbm9zZWMgdW5pdHMuCiAgKi8KIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQogewotCXJldHVybiAoKGdldF9jbG9jaygpIC0gamlmZmllc190aW1lcl9jYykgKiAxMjUpID4+IDk7CisJcmV0dXJuICgoZ2V0X2Nsb2NrX3h0KCkgLSBqaWZmaWVzX3RpbWVyX2NjKSAqIDEyNSkgPj4gOTsKIH0KIAogLyoKQEAgLTk1LDE2NCArOTYsNDAgQEAKICNkZWZpbmUgczM5MF9kb19wcm9maWxlKCkJZG8geyA7IH0gd2hpbGUoMCkKICNlbmRpZiAvKiBDT05GSUdfUFJPRklMSU5HICovCiAKLS8qCi0gKiBBZHZhbmNlIHRoZSBwZXIgY3B1IHRpY2sgY291bnRlciB1cCB0byB0aGUgdGltZSBnaXZlbiB3aXRoIHRoZQotICogInRpbWUiIGFyZ3VtZW50LiBUaGUgcGVyIGNwdSB1cGRhdGUgY29uc2lzdHMgb2YgYWNjb3VudGluZwotICogdGhlIHZpcnR1YWwgY3B1IHRpbWUsIGNhbGxpbmcgdXBkYXRlX3Byb2Nlc3NfdGltZXMgYW5kIGNhbGxpbmcKLSAqIHRoZSBwcm9maWxpbmcgaG9vay4gSWYgeHRpbWUgaXMgYmVmb3JlIHRpbWUgaXQgaXMgYWR2YW5jZWQgYXMgd2VsbC4KLSAqLwotdm9pZCBhY2NvdW50X3RpY2tzKHU2NCB0aW1lKQordm9pZCBjbG9ja19jb21wYXJhdG9yX3dvcmsodm9pZCkKIHsKLQlfX3UzMiB0aWNrczsKLQlfX3U2NCB0bXA7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7CiAKLQkvKiBDYWxjdWxhdGUgaG93IG1hbnkgdGlja3MgaGF2ZSBwYXNzZWQuICovCi0JaWYgKHRpbWUgPCBTMzkwX2xvd2NvcmUuamlmZnlfdGltZXIpCi0JCXJldHVybjsKLQl0bXAgPSB0aW1lIC0gUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyOwotCWlmICh0bXAgPj0gMipDTEtfVElDS1NfUEVSX0pJRkZZKSB7ICAvKiBtb3JlIHRoYW4gdHdvIHRpY2tzID8gKi8KLQkJdGlja3MgPSBfX2Rpdih0bXAsIENMS19USUNLU19QRVJfSklGRlkpICsgMTsKLQkJUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyICs9Ci0JCQlDTEtfVElDS1NfUEVSX0pJRkZZICogKF9fdTY0KSB0aWNrczsKLQl9IGVsc2UgaWYgKHRtcCA+PSBDTEtfVElDS1NfUEVSX0pJRkZZKSB7Ci0JCXRpY2tzID0gMjsKLQkJUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyICs9IDIqQ0xLX1RJQ0tTX1BFUl9KSUZGWTsKLQl9IGVsc2UgewotCQl0aWNrcyA9IDE7Ci0JCVMzOTBfbG93Y29yZS5qaWZmeV90aW1lciArPSBDTEtfVElDS1NfUEVSX0pJRkZZOwotCX0KLQotI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIERvIG5vdCByZWx5IG9uIHRoZSBib290IGNwdSB0byBkbyB0aGUgY2FsbHMgdG8gZG9fdGltZXIuCi0JICogU3ByZWFkIGl0IG92ZXIgYWxsIGNwdXMgaW5zdGVhZC4KLQkgKi8KLQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQlpZiAoUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyID4geHRpbWVfY2MpIHsKLQkJX191MzIgeHRpY2tzOwotCQl0bXAgPSBTMzkwX2xvd2NvcmUuamlmZnlfdGltZXIgLSB4dGltZV9jYzsKLQkJaWYgKHRtcCA+PSAyKkNMS19USUNLU19QRVJfSklGRlkpIHsKLQkJCXh0aWNrcyA9IF9fZGl2KHRtcCwgQ0xLX1RJQ0tTX1BFUl9KSUZGWSk7Ci0JCQl4dGltZV9jYyArPSAoX191NjQpIHh0aWNrcyAqIENMS19USUNLU19QRVJfSklGRlk7Ci0JCX0gZWxzZSB7Ci0JCQl4dGlja3MgPSAxOwotCQkJeHRpbWVfY2MgKz0gQ0xLX1RJQ0tTX1BFUl9KSUZGWTsKLQkJfQotCQlkb190aW1lcih4dGlja3MpOwotCX0KLQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwotI2Vsc2UKLQlkb190aW1lcih0aWNrcyk7Ci0jZW5kaWYKLQotCXdoaWxlICh0aWNrcy0tKQotCQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKLQorCVMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID0gLTFVTEw7CisJc2V0X2Nsb2NrX2NvbXBhcmF0b3IoUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpOworCWNkID0gJl9fZ2V0X2NwdV92YXIoY29tcGFyYXRvcnMpOworCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKIAlzMzkwX2RvX3Byb2ZpbGUoKTsKIH0KIAotI2lmZGVmIENPTkZJR19OT19JRExFX0haCi0KLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWl9JTklUCi1pbnQgc3lzY3RsX2h6X3RpbWVyID0gMDsKLSNlbHNlCi1pbnQgc3lzY3RsX2h6X3RpbWVyID0gMTsKLSNlbmRpZgotCiAvKgotICogU3RvcCB0aGUgSFogdGljayBvbiB0aGUgY3VycmVudCBDUFUuCi0gKiBPbmx5IGNwdV9pZGxlIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24uCisgKiBGaXh1cCB0aGUgY2xvY2sgY29tcGFyYXRvci4KICAqLwotc3RhdGljIHZvaWQgc3RvcF9oel90aW1lcih2b2lkKQorc3RhdGljIHZvaWQgZml4dXBfY2xvY2tfY29tcGFyYXRvcih1bnNpZ25lZCBsb25nIGxvbmcgZGVsdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHNlcSwgbmV4dDsKLQlfX3U2NCB0aW1lciwgdG9kdmFsOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoc3lzY3RsX2h6X3RpbWVyICE9IDApCisJLyogSWYgbm9ib2R5IGlzIHdhaXRpbmcgdGhlcmUncyBub3RoaW5nIHRvIGZpeC4gKi8KKwlpZiAoUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IgPT0gLTFVTEwpCiAJCXJldHVybjsKLQotCWNwdV9zZXQoY3B1LCBub2h6X2NwdV9tYXNrKTsKLQotCS8qCi0JICogTGVhdmUgdGhlIGNsb2NrIGNvbXBhcmF0b3Igc2V0IHVwIGZvciB0aGUgbmV4dCB0aW1lcgotCSAqIHRpY2sgaWYgZWl0aGVyIHJjdSBvciBhIHNvZnRpcnEgaXMgcGVuZGluZy4KLQkgKi8KLQlpZiAocmN1X25lZWRzX2NwdShjcHUpIHx8IGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKSB7Ci0JCWNwdV9jbGVhcihjcHUsIG5vaHpfY3B1X21hc2spOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBUaGlzIGNwdSBpcyBnb2luZyByZWFsbHkgaWRsZS4gU2V0IHVwIHRoZSBjbG9jayBjb21wYXJhdG9yCi0JICogZm9yIHRoZSBuZXh0IGV2ZW50LgotCSAqLwotCW5leHQgPSBuZXh0X3RpbWVyX2ludGVycnVwdCgpOwotCWRvIHsKLQkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JCXRpbWVyID0gKChfX3U2NCkgbmV4dCkgLSAoKF9fdTY0KSBqaWZmaWVzKSArIGppZmZpZXNfNjQ7Ci0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7Ci0JdG9kdmFsID0gLTFVTEw7Ci0JLyogQmUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvd3MuICovCi0JaWYgKHRpbWVyIDwgKC0xVUxMIC8gQ0xLX1RJQ0tTX1BFUl9KSUZGWSkpIHsKLQkJdGltZXIgPSBqaWZmaWVzX3RpbWVyX2NjICsgdGltZXIgKiBDTEtfVElDS1NfUEVSX0pJRkZZOwotCQlpZiAodGltZXIgPj0gamlmZmllc190aW1lcl9jYykKLQkJCXRvZHZhbCA9IHRpbWVyOwotCX0KLQlzZXRfY2xvY2tfY29tcGFyYXRvcih0b2R2YWwpOworCVMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yICs9IGRlbHRhOworCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKIH0KIAotLyoKLSAqIFN0YXJ0IHRoZSBIWiB0aWNrIG9uIHRoZSBjdXJyZW50IENQVS4KLSAqIE9ubHkgY3B1X2lkbGUgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgc3RhcnRfaHpfdGltZXIodm9pZCkKK3N0YXRpYyBpbnQgczM5MF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JQlVHX09OKCFpbl9pbnRlcnJ1cHQoKSk7Ci0KLQlpZiAoIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5vaHpfY3B1X21hc2spKQotCQlyZXR1cm47Ci0JYWNjb3VudF90aWNrcyhnZXRfY2xvY2soKSk7Ci0Jc2V0X2Nsb2NrX2NvbXBhcmF0b3IoUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyICsgQ1BVX0RFVklBVElPTik7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbm9oel9jcHVfbWFzayk7CisJUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IgPSBnZXRfY2xvY2soKSArIGRlbHRhOworCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBub2h6X2lkbGVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3N0YXRpYyB2b2lkIHMzOTBfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKIHsKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgUzM5MF9DUFVfSURMRToKLQkJc3RvcF9oel90aW1lcigpOwotCQlicmVhazsKLQljYXNlIFMzOTBfQ1BVX05PVF9JRExFOgotCQlzdGFydF9oel90aW1lcigpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIE5PVElGWV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBub2h6X2lkbGVfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBub2h6X2lkbGVfbm90aWZ5LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG5vaHpfaW5pdCh2b2lkKQotewotCWlmIChyZWdpc3Rlcl9pZGxlX25vdGlmaWVyKCZub2h6X2lkbGVfbmIpKQotCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgaWRsZSBub3RpZmllciIpOwotfQotCi0jZW5kaWYKLQotLyoKLSAqIFNldCB1cCBwZXIgY3B1IGppZmZ5IHRpbWVyIGFuZCBzZXQgdGhlIGNsb2NrIGNvbXBhcmF0b3IuCi0gKi8KLXN0YXRpYyB2b2lkIHNldHVwX2ppZmZ5X3RpbWVyKHZvaWQpCi17Ci0JLyogU2V0IHVwIGNsb2NrIGNvbXBhcmF0b3IgdG8gbmV4dCBqaWZmeS4gKi8KLQlTMzkwX2xvd2NvcmUuamlmZnlfdGltZXIgPQotCQlqaWZmaWVzX3RpbWVyX2NjICsgKGppZmZpZXNfNjQgKyAxKSAqIENMS19USUNLU19QRVJfSklGRlk7Ci0Jc2V0X2Nsb2NrX2NvbXBhcmF0b3IoUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyICsgQ1BVX0RFVklBVElPTik7CiB9CiAKIC8qCkBAIC0yNjEsNyArMTM4LDI2IEBACiAgKi8KIHZvaWQgaW5pdF9jcHVfdGltZXIodm9pZCkKIHsKLQlzZXR1cF9qaWZmeV90aW1lcigpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkOworCWludCBjcHU7CisKKwlTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvciA9IC0xVUxMOworCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljZCA9ICZwZXJfY3B1KGNvbXBhcmF0b3JzLCBjcHUpOworCWNkLT5uYW1lCQk9ICJjb21wYXJhdG9yIjsKKwljZC0+ZmVhdHVyZXMJCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKKwljZC0+bXVsdAkJPSAxNjc3NzsKKwljZC0+c2hpZnQJCT0gMTI7CisJY2QtPm1pbl9kZWx0YV9ucwk9IDE7CisJY2QtPm1heF9kZWx0YV9ucwk9IExPTkdfTUFYOworCWNkLT5yYXRpbmcJCT0gNDAwOworCWNkLT5jcHVtYXNrCQk9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJY2QtPnNldF9uZXh0X2V2ZW50CT0gczM5MF9uZXh0X2V2ZW50OworCWNkLT5zZXRfbW9kZQkJPSBzMzkwX3NldF9tb2RlOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNkKTsKIAogCS8qIEVuYWJsZSBjbG9jayBjb21wYXJhdG9yIHRpbWVyIGludGVycnVwdC4gKi8KIAlfX2N0bF9zZXRfYml0KDAsMTEpOwpAQCAtMjcyLDggKzE2OCw2IEBACiAKIHN0YXRpYyB2b2lkIGNsb2NrX2NvbXBhcmF0b3JfaW50ZXJydXB0KF9fdTE2IGNvZGUpCiB7Ci0JLyogc2V0IGNsb2NrIGNvbXBhcmF0b3IgZm9yIG5leHQgdGljayAqLwotCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5qaWZmeV90aW1lciArIENQVV9ERVZJQVRJT04pOwogfQogCiBzdGF0aWMgdm9pZCBldHJfcmVzZXQodm9pZCk7CkBAIC0zMTgsOCArMjEyLDkgQEAKICAqLwogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CisJdTY0IGluaXRfdGltZXJfY2M7CisKIAlpbml0X3RpbWVyX2NjID0gcmVzZXRfdG9kX2Nsb2NrKCk7Ci0JeHRpbWVfY2MgPSBpbml0X3RpbWVyX2NjICsgQ0xLX1RJQ0tTX1BFUl9KSUZGWTsKIAlqaWZmaWVzX3RpbWVyX2NjID0gaW5pdF90aW1lcl9jYyAtIGppZmZpZXNfNjQgKiBDTEtfVElDS1NfUEVSX0pJRkZZOwogCiAJLyogc2V0IHh0aW1lICovCkBAIC0zNDQsMTAgKzIzOSw2IEBACiAJLyogRW5hYmxlIFRPRCBjbG9jayBpbnRlcnJ1cHRzIG9uIHRoZSBib290IGNwdS4gKi8KIAlpbml0X2NwdV90aW1lcigpOwogCi0jaWZkZWYgQ09ORklHX05PX0lETEVfSFoKLQlub2h6X2luaXQoKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1ZJUlRfVElNRVIKIAl2dGltZV9pbml0KCk7CiAjZW5kaWYKQEAgLTcwMSw1NCArNTkyLDQ5IEBACiB9CiAKIC8qCi0gKiBUaGUgdGltZSBpcyAiY2xvY2siLiB4dGltZSBpcyB3aGF0IHdlIHRoaW5rIHRoZSB0aW1lIGlzLgorICogVGhlIHRpbWUgaXMgImNsb2NrIi4gb2xkIGlzIHdoYXQgd2UgdGhpbmsgdGhlIHRpbWUgaXMuCiAgKiBBZGp1c3QgdGhlIHZhbHVlIGJ5IGEgbXVsdGlwbGUgb2YgamlmZmllcyBhbmQgYWRkIHRoZSBkZWx0YSB0byBudHAuCiAgKiAiZGVsYXkiIGlzIGFuIGFwcHJveGltYXRpb24gaG93IGxvbmcgdGhlIHN5bmNocm9uaXphdGlvbiB0b29rLiBJZgogICogdGhlIHRpbWUgY29ycmVjdGlvbiBpcyBwb3NpdGl2ZSwgdGhlbiAiZGVsYXkiIGlzIHN1YnRyYWN0ZWQgZnJvbQogICogdGhlIHRpbWUgZGlmZmVyZW5jZSBhbmQgb25seSB0aGUgcmVtYWluaW5nIHBhcnQgaXMgcGFzc2VkIHRvIG50cC4KICAqLwotc3RhdGljIHZvaWQgZXRyX2FkanVzdF90aW1lKHVuc2lnbmVkIGxvbmcgbG9uZyBjbG9jaywgdW5zaWduZWQgbG9uZyBsb25nIGRlbGF5KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBldHJfYWRqdXN0X3RpbWUodW5zaWduZWQgbG9uZyBsb25nIG9sZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2ssCisJCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nIGRlbGF5KQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBkZWx0YSwgdGlja3M7CiAJc3RydWN0IHRpbWV4IGFkanVzdDsKIAotCS8qCi0JICogV2UgZG9uJ3QgaGF2ZSB0byB0YWtlIHRoZSB4dGltZSBsb2NrIGJlY2F1c2UgdGhlIGNwdQotCSAqIGV4ZWN1dGluZyBldHJfYWRqdXN0X3RpbWUgaXMgcnVubmluZyBkaXNhYmxlZCBpbgotCSAqIHRhc2tsZXQgY29udGV4dCBhbmQgYWxsIG90aGVyIGNwdXMgYXJlIGxvb3BpbmcgaW4KLQkgKiBldHJfc3luY19jcHVfc3RhcnQuCi0JICovCi0JaWYgKGNsb2NrID4geHRpbWVfY2MpIHsKKwlpZiAoY2xvY2sgPiBvbGQpIHsKIAkJLyogSXQgaXMgbGF0ZXIgdGhhbiB3ZSB0aG91Z2h0LiAqLwotCQlkZWx0YSA9IHRpY2tzID0gY2xvY2sgLSB4dGltZV9jYzsKKwkJZGVsdGEgPSB0aWNrcyA9IGNsb2NrIC0gb2xkOwogCQlkZWx0YSA9IHRpY2tzID0gKGRlbHRhIDwgZGVsYXkpID8gMCA6IGRlbHRhIC0gZGVsYXk7CiAJCWRlbHRhIC09IGRvX2Rpdih0aWNrcywgQ0xLX1RJQ0tTX1BFUl9KSUZGWSk7Ci0JCWluaXRfdGltZXJfY2MgPSBpbml0X3RpbWVyX2NjICsgZGVsdGE7Ci0JCWppZmZpZXNfdGltZXJfY2MgPSBqaWZmaWVzX3RpbWVyX2NjICsgZGVsdGE7Ci0JCXh0aW1lX2NjID0geHRpbWVfY2MgKyBkZWx0YTsKIAkJYWRqdXN0Lm9mZnNldCA9IHRpY2tzICogKDEwMDAwMDAgLyBIWik7CiAJfSBlbHNlIHsKIAkJLyogSXQgaXMgZWFybGllciB0aGFuIHdlIHRob3VnaHQuICovCi0JCWRlbHRhID0gdGlja3MgPSB4dGltZV9jYyAtIGNsb2NrOworCQlkZWx0YSA9IHRpY2tzID0gb2xkIC0gY2xvY2s7CiAJCWRlbHRhIC09IGRvX2Rpdih0aWNrcywgQ0xLX1RJQ0tTX1BFUl9KSUZGWSk7Ci0JCWluaXRfdGltZXJfY2MgPSBpbml0X3RpbWVyX2NjIC0gZGVsdGE7Ci0JCWppZmZpZXNfdGltZXJfY2MgPSBqaWZmaWVzX3RpbWVyX2NjIC0gZGVsdGE7Ci0JCXh0aW1lX2NjID0geHRpbWVfY2MgLSBkZWx0YTsKKwkJZGVsdGEgPSAtZGVsdGE7CiAJCWFkanVzdC5vZmZzZXQgPSAtdGlja3MgKiAoMTAwMDAwMCAvIEhaKTsKIAl9CisJamlmZmllc190aW1lcl9jYyArPSBkZWx0YTsKIAlpZiAoYWRqdXN0Lm9mZnNldCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiZXRyOiB0aW1lIGFkanVzdGVkIGJ5ICVsaSBtaWNyby1zZWNvbmRzXG4iLAogCQkgICAgICAgYWRqdXN0Lm9mZnNldCk7CiAJCWFkanVzdC5tb2RlcyA9IEFESl9PRkZTRVRfU0lOR0xFU0hPVDsKIAkJZG9fYWRqdGltZXgoJmFkanVzdCk7CiAJfQorCXJldHVybiBkZWx0YTsKIH0KIAotI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBpbl9zeW5jOworCXVuc2lnbmVkIGxvbmcgbG9uZyBmaXh1cF9jYzsKK30gZXRyX3N5bmM7CisKIHN0YXRpYyB2b2lkIGV0cl9zeW5jX2NwdV9zdGFydCh2b2lkICpkdW1teSkKIHsKLQlpbnQgKmluX3N5bmMgPSBkdW1teTsKLQogCWV0cl9lbmFibGVfc3luY19jbG9jaygpOwogCS8qCiAJICogVGhpcyBsb29rcyBsaWtlIGEgYnVzeSB3YWl0IGxvb3AgYnV0IGl0IGlzbid0LiBldHJfc3luY19jcHVzCkBAIC03NTYsNyArNjQyLDcgQEAKIAkgKiBfX3VkZWxheSB3aWxsIHN0b3AgdGhlIGNwdSBvbiBhbiBlbmFibGVkIHdhaXQgcHN3IHVudGlsIHRoZQogCSAqIFRPRCBpcyBydW5uaW5nIGFnYWluLgogCSAqLwotCXdoaWxlICgqaW5fc3luYyA9PSAwKSB7CisJd2hpbGUgKGV0cl9zeW5jLmluX3N5bmMgPT0gMCkgewogCQlfX3VkZWxheSgxKTsKIAkJLyoKIAkJICogQSBkaWZmZXJlbnQgY3B1IGNoYW5nZXMgKmluX3N5bmMuIFRoZXJlZm9yZSB1c2UKQEAgLTc2NCwyMCArNjUwLDE5IEBACiAJCSAqLwogCQliYXJyaWVyKCk7CiAJfQotCWlmICgqaW5fc3luYyAhPSAxKQorCWlmIChldHJfc3luYy5pbl9zeW5jICE9IDEpCiAJCS8qIERpZG4ndCB3b3JrLiBDbGVhciBwZXItY3B1IGluIHN5bmMgYml0IGFnYWluLiAqLwogCQlldHJfZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCS8qCiAJICogVGhpcyByb3VuZCBvZiBUT0Qgc3luY2luZyBpcyBkb25lLiBTZXQgdGhlIGNsb2NrIGNvbXBhcmF0b3IKIAkgKiB0byB0aGUgbmV4dCB0aWNrIGFuZCBsZXQgdGhlIHByb2Nlc3NvciBjb250aW51ZS4KIAkgKi8KLQlzZXR1cF9qaWZmeV90aW1lcigpOworCWZpeHVwX2Nsb2NrX2NvbXBhcmF0b3IoZXRyX3N5bmMuZml4dXBfY2MpOwogfQogCiBzdGF0aWMgdm9pZCBldHJfc3luY19jcHVfZW5kKHZvaWQgKmR1bW15KQogewogfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogLyoKICAqIFN5bmMgdGhlIFRPRCBjbG9jayB1c2luZyB0aGUgcG9ydCByZWZlcmVkIHRvIGJ5IGFpYnAuIFRoaXMgcG9ydApAQCAtNzg3LDggKzY3Miw4IEBACiBzdGF0aWMgaW50IGV0cl9zeW5jX2Nsb2NrKHN0cnVjdCBldHJfYWliICphaWIsIGludCBwb3J0KQogewogCXN0cnVjdCBldHJfYWliICpzeW5jX3BvcnQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGNsb2NrLCBkZWxheTsKLQlpbnQgaW5fc3luYywgZm9sbG93czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2ssIG9sZF9jbG9jaywgZGVsYXksIGRlbHRhOworCWludCBmb2xsb3dzOwogCWludCByYzsKIAogCS8qIENoZWNrIGlmIHRoZSBjdXJyZW50IGFpYiBpcyBhZGphY2VudCB0byB0aGUgc3luYyBwb3J0IGFpYi4gKi8KQEAgLTgwMyw5ICs2ODgsOSBAQAogCSAqIHN1Y2Nlc3NmdWxseSBzeW5jZWQgdGhlIGNsb2NrLiBzbXBfY2FsbF9mdW5jdGlvbiB3aWxsCiAJICogcmV0dXJuIGFmdGVyIGFsbCBvdGhlciBjcHVzIGFyZSBpbiBldHJfc3luY19jcHVfc3RhcnQuCiAJICovCi0JaW5fc3luYyA9IDA7CisJbWVtc2V0KCZldHJfc3luYywgMCwgc2l6ZW9mKGV0cl9zeW5jKSk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jc21wX2NhbGxfZnVuY3Rpb24oZXRyX3N5bmNfY3B1X3N0YXJ0LCZpbl9zeW5jLDAsMCk7CisJc21wX2NhbGxfZnVuY3Rpb24oZXRyX3N5bmNfY3B1X3N0YXJ0LCBOVUxMLCAwLCAwKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWV0cl9lbmFibGVfc3luY19jbG9jaygpOwogCkBAIC04MTMsNiArNjk4LDcgQEAKIAlfX2N0bF9zZXRfYml0KDE0LCAyMSk7CiAJX19jdGxfc2V0X2JpdCgwLCAyOSk7CiAJY2xvY2sgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZykgKGFpYi0+ZWRmMi5ldHYgKyAxKSkgPDwgMzI7CisJb2xkX2Nsb2NrID0gZ2V0X2Nsb2NrKCk7CiAJaWYgKHNldF9jbG9jayhjbG9jaykgPT0gMCkgewogCQlfX3VkZWxheSgxKTsJLyogV2FpdCBmb3IgdGhlIGNsb2NrIHRvIHN0YXJ0LiAqLwogCQlfX2N0bF9jbGVhcl9iaXQoMCwgMjkpOwpAQCAtODIxLDE2ICs3MDcsMTcgQEAKIAkJLyogQWRqdXN0IExpbnV4IHRpbWluZyB2YXJpYWJsZXMuICovCiAJCWRlbGF5ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykKIAkJCShhaWItPmVkZjIuZXR2IC0gc3luY19wb3J0LT5lZGYyLmV0dikgPDwgMzI7Ci0JCWV0cl9hZGp1c3RfdGltZShjbG9jaywgZGVsYXkpOwotCQlzZXR1cF9qaWZmeV90aW1lcigpOworCQlkZWx0YSA9IGV0cl9hZGp1c3RfdGltZShvbGRfY2xvY2ssIGNsb2NrLCBkZWxheSk7CisJCWV0cl9zeW5jLmZpeHVwX2NjID0gZGVsdGE7CisJCWZpeHVwX2Nsb2NrX2NvbXBhcmF0b3IoZGVsdGEpOwogCQkvKiBWZXJpZnkgdGhhdCB0aGUgY2xvY2sgaXMgcHJvcGVybHkgc2V0LiAqLwogCQlpZiAoIWV0cl9haWJfZm9sbG93cyhzeW5jX3BvcnQsIGFpYiwgcG9ydCkpIHsKIAkJCS8qIERpZG4ndCB3b3JrLiAqLwogCQkJZXRyX2Rpc2FibGVfc3luY19jbG9jayhOVUxMKTsKLQkJCWluX3N5bmMgPSAtRUFHQUlOOworCQkJZXRyX3N5bmMuaW5fc3luYyA9IC1FQUdBSU47CiAJCQlyYyA9IC1FQUdBSU47CiAJCX0gZWxzZSB7Ci0JCQlpbl9zeW5jID0gMTsKKwkJCWV0cl9zeW5jLmluX3N5bmMgPSAxOwogCQkJcmMgPSAwOwogCQl9CiAJfSBlbHNlIHsKQEAgLTgzOCw3ICs3MjUsNyBAQAogCQlfX2N0bF9jbGVhcl9iaXQoMCwgMjkpOwogCQlfX2N0bF9jbGVhcl9iaXQoMTQsIDIxKTsKIAkJZXRyX2Rpc2FibGVfc3luY19jbG9jayhOVUxMKTsKLQkJaW5fc3luYyA9IC1FQUdBSU47CisJCWV0cl9zeW5jLmluX3N5bmMgPSAtRUFHQUlOOwogCQlyYyA9IC1FQUdBSU47CiAJfQogCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmIzOWIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiAgICBBdXRob3Iocyk6IEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KKyNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgorCisjZGVmaW5lIENQVV9CSVRTIDY0CisjZGVmaW5lIE5SX01BRyA2CisKKyNkZWZpbmUgUFRGX0hPUklaT05UQUwJKDBVTCkKKyNkZWZpbmUgUFRGX1ZFUlRJQ0FMCSgxVUwpCisjZGVmaW5lIFBURl9DSEVDSwkoMlVMKQorCitzdHJ1Y3QgdGxfY3B1IHsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMFs0XTsKKwl1bnNpZ25lZCBjaGFyIDo2OworCXVuc2lnbmVkIGNoYXIgcHA6MjsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMTsKKwl1bnNpZ25lZCBzaG9ydCBvcmlnaW47CisJdW5zaWduZWQgbG9uZyBtYXNrW0NQVV9CSVRTIC8gQklUU19QRVJfTE9OR107Cit9OworCitzdHJ1Y3QgdGxfY29udGFpbmVyIHsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzhdOworfTsKKwordW5pb24gdGxfZW50cnkgeworCXVuc2lnbmVkIGNoYXIgbmw7CisJc3RydWN0IHRsX2NwdSBjcHU7CisJc3RydWN0IHRsX2NvbnRhaW5lciBjb250YWluZXI7Cit9OworCitzdHJ1Y3QgdGxfaW5mbyB7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDBbMl07CisJdW5zaWduZWQgc2hvcnQgbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgbWFnW05SX01BR107CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDE7CisJdW5zaWduZWQgY2hhciBtbmVzdDsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMls0XTsKKwl1bmlvbiB0bF9lbnRyeSB0bGVbMF07Cit9OworCitzdHJ1Y3QgY29yZV9pbmZvIHsKKwlzdHJ1Y3QgY29yZV9pbmZvICpuZXh0OworCWNwdW1hc2tfdCBtYXNrOworfTsKKworc3RhdGljIHZvaWQgdG9wb2xvZ3lfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHN0cnVjdCB0bF9pbmZvICp0bF9pbmZvOworc3RhdGljIHN0cnVjdCBjb3JlX2luZm8gY29yZV9pbmZvOworc3RhdGljIGludCBtYWNoaW5lX2hhc190b3BvbG9neTsKK3N0YXRpYyBpbnQgbWFjaGluZV9oYXNfdG9wb2xvZ3lfaXJxOworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHRvcG9sb2d5X3RpbWVyOworc3RhdGljIHZvaWQgc2V0X3RvcG9sb2d5X3RpbWVyKHZvaWQpOworc3RhdGljIERFQ0xBUkVfV09SSyh0b3BvbG9neV93b3JrLCB0b3BvbG9neV93b3JrX2ZuKTsKKworY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGNvcmVfaW5mbyAqY29yZSA9ICZjb3JlX2luZm87CisJY3B1bWFza190IG1hc2s7CisKKwljcHVzX2NsZWFyKG1hc2spOworCWlmICghbWFjaGluZV9oYXNfdG9wb2xvZ3kpCisJCXJldHVybiBjcHVfcHJlc2VudF9tYXA7CisJbXV0ZXhfbG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7CisJd2hpbGUgKGNvcmUpIHsKKwkJaWYgKGNwdV9pc3NldChjcHUsIGNvcmUtPm1hc2spKSB7CisJCQltYXNrID0gY29yZS0+bWFzazsKKwkJCWJyZWFrOworCQl9CisJCWNvcmUgPSBjb3JlLT5uZXh0OworCX0KKwltdXRleF91bmxvY2soJnNtcF9jcHVfc3RhdGVfbXV0ZXgpOworCWlmIChjcHVzX2VtcHR5KG1hc2spKQorCQltYXNrID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHZvaWQgYWRkX2NwdXNfdG9fY29yZShzdHJ1Y3QgdGxfY3B1ICp0bF9jcHUsIHN0cnVjdCBjb3JlX2luZm8gKmNvcmUpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvciAoY3B1ID0gZmluZF9maXJzdF9iaXQoJnRsX2NwdS0+bWFza1swXSwgQ1BVX0JJVFMpOworCSAgICAgY3B1IDwgQ1BVX0JJVFM7CisJICAgICBjcHUgPSBmaW5kX25leHRfYml0KCZ0bF9jcHUtPm1hc2tbMF0sIENQVV9CSVRTLCBjcHUgKyAxKSkKKwl7CisJCXVuc2lnbmVkIGludCByY3B1LCBsY3B1OworCisJCXJjcHUgPSBDUFVfQklUUyAtIDEgLSBjcHUgKyB0bF9jcHUtPm9yaWdpbjsKKwkJZm9yX2VhY2hfcHJlc2VudF9jcHUobGNwdSkgeworCQkJaWYgKF9fY3B1X2xvZ2ljYWxfbWFwW2xjcHVdID09IHJjcHUpIHsKKwkJCQljcHVfc2V0KGxjcHUsIGNvcmUtPm1hc2spOworCQkJCXNtcF9jcHVfcG9sYXJpemF0aW9uW2xjcHVdID0gdGxfY3B1LT5wcDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY2xlYXJfY29yZXModm9pZCkKK3sKKwlzdHJ1Y3QgY29yZV9pbmZvICpjb3JlID0gJmNvcmVfaW5mbzsKKworCXdoaWxlIChjb3JlKSB7CisJCWNwdXNfY2xlYXIoY29yZS0+bWFzayk7CisJCWNvcmUgPSBjb3JlLT5uZXh0OworCX0KK30KKworc3RhdGljIHVuaW9uIHRsX2VudHJ5ICpuZXh0X3RsZSh1bmlvbiB0bF9lbnRyeSAqdGxlKQoreworCWlmICh0bGUtPm5sKQorCQlyZXR1cm4gKHVuaW9uIHRsX2VudHJ5ICopKChzdHJ1Y3QgdGxfY29udGFpbmVyICopdGxlICsgMSk7CisJZWxzZQorCQlyZXR1cm4gKHVuaW9uIHRsX2VudHJ5ICopKChzdHJ1Y3QgdGxfY3B1ICopdGxlICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRsX3RvX2NvcmVzKHN0cnVjdCB0bF9pbmZvICppbmZvKQoreworCXVuaW9uIHRsX2VudHJ5ICp0bGUsICplbmQ7CisJc3RydWN0IGNvcmVfaW5mbyAqY29yZSA9ICZjb3JlX2luZm87CisKKwltdXRleF9sb2NrKCZzbXBfY3B1X3N0YXRlX211dGV4KTsKKwljbGVhcl9jb3JlcygpOworCXRsZSA9IGluZm8tPnRsZTsKKwllbmQgPSAodW5pb24gdGxfZW50cnkgKikoKHVuc2lnbmVkIGxvbmcpaW5mbyArIGluZm8tPmxlbmd0aCk7CisJd2hpbGUgKHRsZSA8IGVuZCkgeworCQlzd2l0Y2ggKHRsZS0+bmwpIHsKKwkJY2FzZSA1OgorCQljYXNlIDQ6CisJCWNhc2UgMzoKKwkJY2FzZSAyOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWNvcmUgPSBjb3JlLT5uZXh0OworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWFkZF9jcHVzX3RvX2NvcmUoJnRsZS0+Y3B1LCBjb3JlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY2xlYXJfY29yZXMoKTsKKwkJCW1hY2hpbmVfaGFzX3RvcG9sb2d5ID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQl0bGUgPSBuZXh0X3RsZSh0bGUpOworCX0KKwltdXRleF91bmxvY2soJnNtcF9jcHVfc3RhdGVfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB0b3BvbG9neV91cGRhdGVfcG9sYXJpemF0aW9uX3NpbXBsZSh2b2lkKQoreworCWludCBjcHU7CisKKwltdXRleF9sb2NrKCZzbXBfY3B1X3N0YXRlX211dGV4KTsKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCisJCXNtcF9jcHVfcG9sYXJpemF0aW9uW2NwdV0gPSBQT0xBUklaQVRJT05fSFJaOworCW11dGV4X3VubG9jaygmc21wX2NwdV9zdGF0ZV9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcHRmKHVuc2lnbmVkIGxvbmcgZmMpCit7CisJaW50IHJjOworCisJYXNtIHZvbGF0aWxlKAorCQkiCS5pbnNuCXJyZSwweGI5YTIwMDAwLCUxLCUxXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCisJCTogIj1kIiAocmMpCisJCTogImQiIChmYykgIDogImNjIik7CisJcmV0dXJuIHJjOworfQorCitpbnQgdG9wb2xvZ3lfc2V0X2NwdV9tYW5hZ2VtZW50KGludCBmYykKK3sKKwlpbnQgY3B1OworCWludCByYzsKKworCWlmICghbWFjaGluZV9oYXNfdG9wb2xvZ3kpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpZiAoZmMpCisJCXJjID0gcHRmKFBURl9WRVJUSUNBTCk7CisJZWxzZQorCQlyYyA9IHB0ZihQVEZfSE9SSVpPTlRBTCk7CisJaWYgKHJjKQorCQlyZXR1cm4gLUVCVVNZOworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKKwkJc21wX2NwdV9wb2xhcml6YXRpb25bY3B1XSA9IFBPTEFSSVpBVElPTl9VTktOV047CisJcmV0dXJuIHJjOworfQorCit2b2lkIGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKQoreworCXN0cnVjdCB0bF9pbmZvICppbmZvID0gdGxfaW5mbzsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OworCWludCBjcHU7CisKKwlpZiAoIW1hY2hpbmVfaGFzX3RvcG9sb2d5KSB7CisJCXRvcG9sb2d5X3VwZGF0ZV9wb2xhcml6YXRpb25fc2ltcGxlKCk7CisJCXJldHVybjsKKwl9CisJc3RzaShpbmZvLCAxNSwgMSwgMik7CisJdGxfdG9fY29yZXMoaW5mbyk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJc3lzZGV2ID0gZ2V0X2NwdV9zeXNkZXYoY3B1KTsKKwkJa29iamVjdF91ZXZlbnQoJnN5c2Rldi0+a29iaiwgS09CSl9DSEFOR0UpOworCX0KK30KKworc3RhdGljIHZvaWQgdG9wb2xvZ3lfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJYXJjaF9yZWluaXRfc2NoZWRfZG9tYWlucygpOworfQorCit2b2lkIHRvcG9sb2d5X3NjaGVkdWxlX3VwZGF0ZSh2b2lkKQoreworCXNjaGVkdWxlX3dvcmsoJnRvcG9sb2d5X3dvcmspOworfQorCitzdGF0aWMgdm9pZCB0b3BvbG9neV90aW1lcl9mbih1bnNpZ25lZCBsb25nIGlnbm9yZWQpCit7CisJaWYgKHB0ZihQVEZfQ0hFQ0spKQorCQl0b3BvbG9neV9zY2hlZHVsZV91cGRhdGUoKTsKKwlzZXRfdG9wb2xvZ3lfdGltZXIoKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3RvcG9sb2d5X3RpbWVyKHZvaWQpCit7CisJdG9wb2xvZ3lfdGltZXIuZnVuY3Rpb24gPSB0b3BvbG9neV90aW1lcl9mbjsKKwl0b3BvbG9neV90aW1lci5kYXRhID0gMDsKKwl0b3BvbG9neV90aW1lci5leHBpcmVzID0gamlmZmllcyArIDYwICogSFo7CisJYWRkX3RpbWVyKCZ0b3BvbG9neV90aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkIHRvcG9sb2d5X2ludGVycnVwdChfX3UxNiBjb2RlKQoreworCXNjaGVkdWxlX3dvcmsoJnRvcG9sb2d5X3dvcmspOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3RvcG9sb2d5X3VwZGF0ZSh2b2lkKQoreworCWludCByYzsKKworCWlmICghbWFjaGluZV9oYXNfdG9wb2xvZ3kpIHsKKwkJdG9wb2xvZ3lfdXBkYXRlX3BvbGFyaXphdGlvbl9zaW1wbGUoKTsKKwkJcmV0dXJuIDA7CisJfQorCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmdG9wb2xvZ3lfdGltZXIpOworCWlmIChtYWNoaW5lX2hhc190b3BvbG9neV9pcnEpIHsKKwkJcmMgPSByZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgyMDA1LCB0b3BvbG9neV9pbnRlcnJ1cHQpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJCWN0bF9zZXRfYml0KDAsIDgpOworCX0KKwllbHNlCisJCXNldF90b3BvbG9neV90aW1lcigpOworCXJldHVybiAwOworfQorX19pbml0Y2FsbChpbml0X3RvcG9sb2d5X3VwZGF0ZSk7CisKK3ZvaWQgX19pbml0IHMzOTBfaW5pdF9jcHVfdG9wb2xvZ3kodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZmFjaWxpdHlfYml0czsKKwlzdHJ1Y3QgdGxfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgY29yZV9pbmZvICpjb3JlOworCWludCBucl9jb3JlczsKKwlpbnQgaTsKKworCWlmIChzdGZsZSgmZmFjaWxpdHlfYml0cywgMSkgPD0gMCkKKwkJcmV0dXJuOworCWlmICghKGZhY2lsaXR5X2JpdHMgJiAoMVVMTCA8PCA1MikpIHx8ICEoZmFjaWxpdHlfYml0cyAmICgxVUxMIDw8IDYxKSkpCisJCXJldHVybjsKKwltYWNoaW5lX2hhc190b3BvbG9neSA9IDE7CisKKwlpZiAoZmFjaWxpdHlfYml0cyAmICgxVUxMIDw8IDUxKSkKKwkJbWFjaGluZV9oYXNfdG9wb2xvZ3lfaXJxID0gMTsKKworCXRsX2luZm8gPSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CisJaWYgKCF0bF9pbmZvKQorCQlnb3RvIGVycm9yOworCWluZm8gPSB0bF9pbmZvOworCXN0c2koaW5mbywgMTUsIDEsIDIpOworCisJbnJfY29yZXMgPSBpbmZvLT5tYWdbTlJfTUFHIC0gMl07CisJZm9yIChpID0gMDsgaSA8IGluZm8tPm1uZXN0IC0gMjsgaSsrKQorCQlucl9jb3JlcyAqPSBpbmZvLT5tYWdbTlJfTUFHIC0gMyAtIGldOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIHRvcG9sb2d5OiIpOworCWZvciAoaSA9IDA7IGkgPCBOUl9NQUc7IGkrKykKKwkJcHJpbnRrKCIgJWQiLCBpbmZvLT5tYWdbaV0pOworCXByaW50aygiIC8gJWRcbiIsIGluZm8tPm1uZXN0KTsKKworCWNvcmUgPSAmY29yZV9pbmZvOworCWZvciAoaSA9IDA7IGkgPCBucl9jb3JlczsgaSsrKSB7CisJCWNvcmUtPm5leHQgPSBhbGxvY19ib290bWVtKHNpemVvZihzdHJ1Y3QgY29yZV9pbmZvKSk7CisJCWNvcmUgPSBjb3JlLT5uZXh0OworCQlpZiAoIWNvcmUpCisJCQlnb3RvIGVycm9yOworCX0KKwlyZXR1cm47CitlcnJvcjoKKwltYWNoaW5lX2hhc190b3BvbG9neSA9IDA7CisJbWFjaGluZV9oYXNfdG9wb2xvZ3lfaXJxID0gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA2MGY3MjhhLi41N2I2MDdiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC00MiwxMSArNDIsOCBAQAogI2luY2x1ZGUgPGFzbS9zMzkwX2V4dC5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisjaW5jbHVkZSAiZW50cnkuaCIKIAotLyogQ2FsbGVkIGZyb20gZW50cnkuUyBvbmx5ICovCi1leHRlcm4gdm9pZCBoYW5kbGVfcGVyX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLXR5cGVkZWYgdm9pZCBwZ21fY2hlY2tfaGFuZGxlcl90KHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwogcGdtX2NoZWNrX2hhbmRsZXJfdCAqcGdtX2NoZWNrX3RhYmxlWzEyOF07CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC01OSw3ICs1Niw2IEBACiAKIGV4dGVybiBwZ21fY2hlY2tfaGFuZGxlcl90IGRvX3Byb3RlY3Rpb25fZXhjZXB0aW9uOwogZXh0ZXJuIHBnbV9jaGVja19oYW5kbGVyX3QgZG9fZGF0X2V4Y2VwdGlvbjsKLWV4dGVybiBwZ21fY2hlY2tfaGFuZGxlcl90IGRvX21vbml0b3JfY2FsbDsKIGV4dGVybiBwZ21fY2hlY2tfaGFuZGxlcl90IGRvX2FzY2VfZXhjZXB0aW9uOwogCiAjZGVmaW5lIHN0YWNrX3BvaW50ZXIgKHsgdm9pZCAqKnNwOyBhc20oImxhICUwLDAoMTUpIiA6ICI9JmQiIChzcCkpOyBzcDsgfSkKQEAgLTEzOCw3ICsxMzQsNiBAQAogCWVsc2UKIAkJX19zaG93X3RyYWNlKHNwLCBTMzkwX2xvd2NvcmUudGhyZWFkX2luZm8sCiAJCQkgICAgIFMzOTBfbG93Y29yZS50aHJlYWRfaW5mbyArIFRIUkVBRF9TSVpFKTsKLQlwcmludGsoIlxuIik7CiAJaWYgKCF0YXNrKQogCQl0YXNrID0gY3VycmVudDsKIAlkZWJ1Z19zaG93X2hlbGRfbG9ja3ModGFzayk7CkBAIC0xNjYsNiArMTYxLDE1IEBACiAJc2hvd190cmFjZSh0YXNrLCBzcCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKK3ZvaWQgc2hvd19sYXN0X2JyZWFraW5nX2V2ZW50KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXByaW50aygiTGFzdCBCcmVha2luZy1FdmVudC1BZGRyZXNzOlxuIik7CisJcHJpbnRrKCIgWzwlMDE2bHg+XSAiLCByZWdzLT5hcmdzWzBdICYgUFNXX0FERFJfSU5TTik7CisJcHJpbnRfc3ltYm9sKCIlc1xuIiwgcmVncy0+YXJnc1swXSAmIFBTV19BRERSX0lOU04pOworfQorI2VuZGlmCisKIC8qCiAgKiBUaGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGR1bXBfc3RhY2sgZ2VuZXJhdG9yCiAgKi8KQEAgLTczOSw2ICs3NDMsNSBAQAogICAgICAgICBwZ21fY2hlY2tfdGFibGVbMHgxNV0gPSAmb3BlcmFuZF9leGNlcHRpb247CiAgICAgICAgIHBnbV9jaGVja190YWJsZVsweDFDXSA9ICZzcGFjZV9zd2l0Y2hfZXhjZXB0aW9uOwogICAgICAgICBwZ21fY2hlY2tfdGFibGVbMHgxRF0gPSAmaGZwX3NxcnRfZXhjZXB0aW9uOwotCXBnbV9jaGVja190YWJsZVsweDQwXSA9ICZkb19tb25pdG9yX2NhbGw7CiAJcGZhdWx0X2lycV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKaW5kZXggNzBmMmE4Ni4uZWFlMjFhOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jCisrKyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwpAQCAtMzQsNyArMzQsNyBAQAogICovCiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCiB7Ci0JdTY0IGVuZCwgdGltZSwgamlmZnlfdGltZXIgPSAwOworCXU2NCBlbmQsIHRpbWUsIG9sZF9jYyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgY3IwLCBtYXNrLCBkdW1teTsKIAlpbnQgaXJxX2NvbnRleHQ7CiAKQEAgLTQzLDggKzQzLDggQEAKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlpZiAocmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpKSB7Ci0JCWppZmZ5X3RpbWVyID0gUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyOwotCQlTMzkwX2xvd2NvcmUuamlmZnlfdGltZXIgPSAtMVVMTCAtICg0MDk2IDw8IDEyKTsKKwkJb2xkX2NjID0gUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3I7CisJCVMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID0gLTFVTEw7CiAJCV9fY3RsX3N0b3JlKGNyMCwgMCwgMCk7CiAJCWR1bW15ID0gKGNyMCAmIDB4ZmZmZjAwZTApIHwgMHgwMDAwMDgwMDsKIAkJX19jdGxfbG9hZChkdW1teSAsIDAsIDApOwpAQCAtNTUsOCArNTUsOCBAQAogCiAJZW5kID0gZ2V0X2Nsb2NrKCkgKyAoKHU2NCkgdXNlY3MgPDwgMTIpOwogCWRvIHsKLQkJdGltZSA9IGVuZCA8IFMzOTBfbG93Y29yZS5qaWZmeV90aW1lciA/Ci0JCQllbmQgOiBTMzkwX2xvd2NvcmUuamlmZnlfdGltZXI7CisJCXRpbWUgPSBlbmQgPCBTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvciA/CisJCQllbmQgOiBTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcjsKIAkJc2V0X2Nsb2NrX2NvbXBhcmF0b3IodGltZSk7CiAJCXRyYWNlX2hhcmRpcnFzX29uKCk7CiAJCV9fbG9hZF9wc3dfbWFzayhtYXNrKTsKQEAgLTY1LDEwICs2NSwxMCBAQAogCiAJaWYgKHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSkgewogCQlfX2N0bF9sb2FkKGNyMCwgMCwgMCk7Ci0JCVMzOTBfbG93Y29yZS5qaWZmeV90aW1lciA9IGppZmZ5X3RpbWVyOworCQlTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvciA9IG9sZF9jYzsKIAl9CiAJaWYgKCFpcnFfY29udGV4dCkKIAkJX2xvY2FsX2JoX2VuYWJsZSgpOwotCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5qaWZmeV90aW1lcik7CisJc2V0X2Nsb2NrX2NvbXBhcmF0b3IoUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19wdC5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKaW5kZXggN2U4ZWZhYS4uZDY2MjE1YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKQEAgLTMwMiw2ICszMDIsMTAgQEAKIAlwdGVfdCAqcHRlX2Zyb20sICpwdGVfdG87CiAJaW50IHdyaXRlX3VzZXI7CiAKKwlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkgeworCQltZW1jcHkoKHZvaWQgX19mb3JjZSAqKSB0bywgKHZvaWQgX19mb3JjZSAqKSBmcm9tLCBuKTsKKwkJcmV0dXJuIDA7CisJfQogCWRvbmUgPSAwOwogcmV0cnk6CiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKQEAgLTM2MSwxOCArMzY1LDEwIEBACiAJCSAgICAgOiAiMCIgKC1FRkFVTFQpLCAiZCIgKG9wYXJnKSwgImEiICh1YWRkciksCQlcCiAJCSAgICAgICAibSIgKCp1YWRkcikgOiAiY2MiICk7CiAKLWludCBmdXRleF9hdG9taWNfb3BfcHQoaW50IG9wLCBpbnQgX191c2VyICp1YWRkciwgaW50IG9wYXJnLCBpbnQgKm9sZCkKK3N0YXRpYyBpbnQgX19mdXRleF9hdG9taWNfb3BfcHQoaW50IG9wLCBpbnQgX191c2VyICp1YWRkciwgaW50IG9wYXJnLCBpbnQgKm9sZCkKIHsKIAlpbnQgb2xkdmFsID0gMCwgbmV3dmFsLCByZXQ7CiAKLQlzcGluX2xvY2soJmN1cnJlbnQtPm1tLT5wYWdlX3RhYmxlX2xvY2spOwotCXVhZGRyID0gKGludCBfX3VzZXIgKikgX19kYXRfdXNlcl9hZGRyKCh1bnNpZ25lZCBsb25nKSB1YWRkcik7Ci0JaWYgKCF1YWRkcikgewotCQlzcGluX3VubG9jaygmY3VycmVudC0+bW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UodWFkZHIpKTsKLQlzcGluX3VubG9jaygmY3VycmVudC0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJc3dpdGNoIChvcCkgewogCWNhc2UgRlVURVhfT1BfU0VUOgogCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTVcbiIsCkBAIC0zOTcsMTUgKzM5MywxNyBAQAogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9TWVM7CiAJfQotCXB1dF9wYWdlKHZpcnRfdG9fcGFnZSh1YWRkcikpOwotCSpvbGQgPSBvbGR2YWw7CisJaWYgKHJldCA9PSAwKQorCQkqb2xkID0gb2xkdmFsOwogCXJldHVybiByZXQ7CiB9CiAKLWludCBmdXRleF9hdG9taWNfY21weGNoZ19wdChpbnQgX191c2VyICp1YWRkciwgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCkKK2ludCBmdXRleF9hdG9taWNfb3BfcHQoaW50IG9wLCBpbnQgX191c2VyICp1YWRkciwgaW50IG9wYXJnLCBpbnQgKm9sZCkKIHsKIAlpbnQgcmV0OwogCisJaWYgKHNlZ21lbnRfZXEoZ2V0X2ZzKCksIEtFUk5FTF9EUykpCisJCXJldHVybiBfX2Z1dGV4X2F0b21pY19vcF9wdChvcCwgdWFkZHIsIG9wYXJnLCBvbGQpOwogCXNwaW5fbG9jaygmY3VycmVudC0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJdWFkZHIgPSAoaW50IF9fdXNlciAqKSBfX2RhdF91c2VyX2FkZHIoKHVuc2lnbmVkIGxvbmcpIHVhZGRyKTsKIAlpZiAoIXVhZGRyKSB7CkBAIC00MTQsMTMgKzQxMiw0MCBAQAogCX0KIAlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UodWFkZHIpKTsKIAlzcGluX3VubG9jaygmY3VycmVudC0+bW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JYXNtIHZvbGF0aWxlKCIgICBjcyAgICUxLCU0LDAoJTUpXG4iCi0JCSAgICAgIjA6IGxyICAgJTAsJTFcbiIKLQkJICAgICAiMTpcbiIKLQkJICAgICBFWF9UQUJMRSgwYiwxYikKKwlyZXQgPSBfX2Z1dGV4X2F0b21pY19vcF9wdChvcCwgdWFkZHIsIG9wYXJnLCBvbGQpOworCXB1dF9wYWdlKHZpcnRfdG9fcGFnZSh1YWRkcikpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19mdXRleF9hdG9taWNfY21weGNoZ19wdChpbnQgX191c2VyICp1YWRkciwgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCkKK3sKKwlpbnQgcmV0OworCisJYXNtIHZvbGF0aWxlKCIwOiBjcyAgICUxLCU0LDAoJTUpXG4iCisJCSAgICAgIjE6IGxyICAgJTAsJTFcbiIKKwkJICAgICAiMjpcbiIKKwkJICAgICBFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoMWIsMmIpCiAJCSAgICAgOiAiPWQiIChyZXQpLCAiK2QiIChvbGR2YWwpLCAiPW0iICgqdWFkZHIpCiAJCSAgICAgOiAiMCIgKC1FRkFVTFQpLCAiZCIgKG5ld3ZhbCksICJhIiAodWFkZHIpLCAibSIgKCp1YWRkcikKIAkJICAgICA6ICJjYyIsICJtZW1vcnkiICk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGZ1dGV4X2F0b21pY19jbXB4Y2hnX3B0KGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQoreworCWludCByZXQ7CisKKwlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkKKwkJcmV0dXJuIF9fZnV0ZXhfYXRvbWljX2NtcHhjaGdfcHQodWFkZHIsIG9sZHZhbCwgbmV3dmFsKTsKKwlzcGluX2xvY2soJmN1cnJlbnQtPm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXVhZGRyID0gKGludCBfX3VzZXIgKikgX19kYXRfdXNlcl9hZGRyKCh1bnNpZ25lZCBsb25nKSB1YWRkcik7CisJaWYgKCF1YWRkcikgeworCQlzcGluX3VubG9jaygmY3VycmVudC0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UodWFkZHIpKTsKKwlzcGluX3VubG9jaygmY3VycmVudC0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcmV0ID0gX19mdXRleF9hdG9taWNfY21weGNoZ19wdCh1YWRkciwgb2xkdmFsLCBuZXd2YWwpOwogCXB1dF9wYWdlKHZpcnRfdG9fcGFnZSh1YWRkcikpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKaW5kZXggMjhjNDUwMC4uZDJmZmJhZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwpAQCAtMjkzLDEwICsyOTMsMTAgQEAKIAogCWFzbSB2b2xhdGlsZSgKIAkJIiAgIHNhY2YgMjU2XG4iCi0JCSIgICBjcyAgICUxLCU0LDAoJTUpXG4iCi0JCSIwOiBsciAgICUwLCUxXG4iCi0JCSIxOiBzYWNmIDBcbiIKLQkJRVhfVEFCTEUoMGIsMWIpCisJCSIwOiBjcyAgICUxLCU0LDAoJTUpXG4iCisJCSIxOiBsciAgICUwLCUxXG4iCisJCSIyOiBzYWNmIDBcbiIKKwkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDFiLDJiKQogCQk6ICI9ZCIgKHJldCksICIrZCIgKG9sZHZhbCksICI9bSIgKCp1YWRkcikKIAkJOiAiMCIgKC1FRkFVTFQpLCAiZCIgKG5ld3ZhbCksICJhIiAodWFkZHIpLCAibSIgKCp1YWRkcikKIAkJOiAiY2MiLCAibWVtb3J5IiApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dG1lbS5jIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCmluZGV4IDg4MGIwZWIuLmVkMmFmMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9leHRtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKQEAgLTI4OSwyMiArMjg5LDggQEAKIAogCXJjID0gYWRkX3NoYXJlZF9tZW1vcnkoc2VnLT5zdGFydF9hZGRyLCBzZWctPmVuZCAtIHNlZy0+c3RhcnRfYWRkciArIDEpOwogCi0Jc3dpdGNoIChyYykgewotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PU1BDOgotCQlQUklOVF9XQVJOKCJzZWdtZW50X2xvYWQ6IG5vdCBsb2FkaW5nIHNlZ21lbnQgJXMgLSBvdmVybGFwcyAiCi0JCQkgICAic3RvcmFnZS9zZWdtZW50XG4iLCBuYW1lKTsKKwlpZiAocmMpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JY2FzZSAtRVJBTkdFOgotCQlQUklOVF9XQVJOKCJzZWdtZW50X2xvYWQ6IG5vdCBsb2FkaW5nIHNlZ21lbnQgJXMgLSBleGNlZWRzICIKLQkJCSAgICJrZXJuZWwgbWFwcGluZyByYW5nZVxuIiwgbmFtZSk7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigic2VnbWVudF9sb2FkOiBub3QgbG9hZGluZyBzZWdtZW50ICVzIChyYzogJWQpXG4iLAotCQkJICAgbmFtZSwgcmMpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KIAogCXNlZy0+cmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNlZy0+cmVzID09IE5VTEwpIHsKQEAgLTU4Miw4ICs1NjgsNTkgQEAKIAltdXRleF91bmxvY2soJmRjc3NfbG9jayk7CiB9CiAKKy8qCisgKiBwcmludCBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGZvciBzZWdtZW50X2xvYWQoKS9zZWdtZW50X3R5cGUoKQorICogcmV0dXJuIGNvZGUKKyAqLwordm9pZCBzZWdtZW50X3dhcm5pbmcoaW50IHJjLCBjaGFyICpzZWdfbmFtZSkKK3sKKwlzd2l0Y2ggKHJjKSB7CisJY2FzZSAtRU5PRU5UOgorCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCAiCisJCQkgICAiZG9lcyBub3QgZXhpc3RcbiIsIHNlZ19uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSAtRU5PU1lTOgorCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCAiCisJCQkgICAibm90IHJ1bm5pbmcgb24gVk1cbiIsIHNlZ19uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSAtRUlPOgorCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCAiCisJCQkgICAiaGFyZHdhcmUgZXJyb3JcbiIsIHNlZ19uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSAtRU5PVFNVUFA6CisJCVBSSU5UX1dBUk4oImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsICIKKwkJCSAgICJpcyBhIG11bHRpLXBhcnQgc2VnbWVudFxuIiwgc2VnX25hbWUpOworCQlicmVhazsKKwljYXNlIC1FTk9TUEM6CisJCVBSSU5UX1dBUk4oImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsICIKKwkJCSAgICJvdmVybGFwcyB3aXRoIHN0b3JhZ2VcbiIsIHNlZ19uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSAtRUJVU1k6CisJCVBSSU5UX1dBUk4oImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsICIKKwkJCSAgICJvdmVybGFwcyB3aXRoIGFscmVhZHkgbG9hZGVkIGRjc3NcbiIsIHNlZ19uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSAtRVBFUk06CisJCVBSSU5UX1dBUk4oImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsICIKKwkJCSAgICJhbHJlYWR5IGxvYWRlZCBpbiBpbmNvbXBhdGlibGUgbW9kZVxuIiwgc2VnX25hbWUpOworCQlicmVhazsKKwljYXNlIC1FTk9NRU06CisJCVBSSU5UX1dBUk4oImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsICIKKwkJCSAgICJvdXQgb2YgbWVtb3J5XG4iLCBzZWdfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgLUVSQU5HRToKKwkJUFJJTlRfV0FSTigiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgIgorCQkJICAgImV4Y2VlZHMga2VybmVsIG1hcHBpbmcgcmFuZ2VcbiIsIHNlZ19uYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUFJJTlRfV0FSTigiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgIgorCQkJICAgInJldHVybiB2YWx1ZSAlaVxuIiwgc2VnX25hbWUsIHJjKTsKKwkJYnJlYWs7CisJfQorfQorCiBFWFBPUlRfU1lNQk9MKHNlZ21lbnRfbG9hZCk7CiBFWFBPUlRfU1lNQk9MKHNlZ21lbnRfdW5sb2FkKTsKIEVYUE9SVF9TWU1CT0woc2VnbWVudF9zYXZlKTsKIEVYUE9SVF9TWU1CT0woc2VnbWVudF90eXBlKTsKIEVYUE9SVF9TWU1CT0woc2VnbWVudF9tb2RpZnlfc2hhcmVkKTsKK0VYUE9SVF9TWU1CT0woc2VnbWVudF93YXJuaW5nKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggZWQxM2Q0MjkuLjI2NTBmNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLQogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zMzkwX2V4dC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgIi4uL2tlcm5lbC9lbnRyeS5oIgogCiAjaWZuZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBfX0ZBSUxfQUREUl9NQVNLIDB4N2ZmZmYwMDAKQEAgLTUwLDggKzUwLDYgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3VzZXJwcm9jZXNzX2RlYnVnOwogI2VuZGlmCiAKLWV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICosc3RydWN0IHB0X3JlZ3MgKixsb25nKTsKLQogI2lmZGVmIENPTkZJR19LUFJPQkVTCiBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCiB7CkBAIC0yNDUsMTEgKzI0Myw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUzM5MF9FWEVDX1BST1RFQ1QKLWV4dGVybiBsb25nIHN5c19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGxvbmcgc3lzX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gbG9uZyBzeXMzMl9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGxvbmcgc3lzMzJfcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQogc3RhdGljIGludCBzaWduYWxfcmV0dXJuKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKIHsKQEAgLTI3MCwxNSArMjYzLDE1IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCWNvbXBhdCA9IHRlc3RfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl8zMUJJVCk7CiAJaWYgKGNvbXBhdCAmJiBpbnN0cnVjdGlvbiA9PSAweDBhNzcpCi0JCXN5czMyX3NpZ3JldHVybihyZWdzKTsKKwkJc3lzMzJfc2lncmV0dXJuKCk7CiAJZWxzZSBpZiAoY29tcGF0ICYmIGluc3RydWN0aW9uID09IDB4MGFhZCkKLQkJc3lzMzJfcnRfc2lncmV0dXJuKHJlZ3MpOworCQlzeXMzMl9ydF9zaWdyZXR1cm4oKTsKIAllbHNlCiAjZW5kaWYKIAlpZiAoaW5zdHJ1Y3Rpb24gPT0gMHgwYTc3KQotCQlzeXNfc2lncmV0dXJuKHJlZ3MpOworCQlzeXNfc2lncmV0dXJuKCk7CiAJZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gMHgwYWFkKQotCQlzeXNfcnRfc2lncmV0dXJuKHJlZ3MpOworCQlzeXNfcnRfc2lncmV0dXJuKCk7CiAJZWxzZSB7CiAJCWN1cnJlbnQtPnRocmVhZC5wcm90X2FkZHIgPSBhZGRyZXNzOwogCQljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IGVycm9yX2NvZGU7CkBAIC00MjQsNyArNDE3LDcgQEAKIH0KIAogdm9pZCBfX2twcm9iZXMgZG9fcHJvdGVjdGlvbl9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKKwkJCQkgICAgICAgbG9uZyBlcnJvcl9jb2RlKQogewogCS8qIFByb3RlY3Rpb24gZXhjZXB0aW9uIGlzIHN1cHJlc3NpbmcsIGRlY3JlbWVudCBwc3cgYWRkcmVzcy4gKi8KIAlyZWdzLT5wc3cuYWRkciAtPSAoZXJyb3JfY29kZSA+PiAxNik7CkBAIC00NDAsNyArNDMzLDcgQEAKIAlkb19leGNlcHRpb24ocmVncywgNCwgMSk7CiB9CiAKLXZvaWQgX19rcHJvYmVzIGRvX2RhdF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKK3ZvaWQgX19rcHJvYmVzIGRvX2RhdF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIHsKIAlkb19leGNlcHRpb24ocmVncywgZXJyb3JfY29kZSAmIDB4ZmYsIDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggODA1MzI0NS4uMjAyYzk1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC01MCw3ICs1MCw2IEBACiAKIAlwcmludGsoIk1lbS1pbmZvOlxuIik7CiAJc2hvd19mcmVlX2FyZWFzKCk7Ci0JcHJpbnRrKCJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwgbnJfc3dhcF9wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSk7CiAJaSA9IG1heF9tYXBucjsKIAl3aGlsZSAoaS0tID4gMCkgewogCQlpZiAoIXBmbl92YWxpZChpKSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBiMzQwMGI1Li42YTY3OWMzIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC03Miw5ICs3Miw2IEBACiBjb25maWcgU1lTX1NVUFBPUlRTX1BDSQogCWJvb2wKIAotY29uZmlnIEFSQ0hfTUFZX0hBVkVfUENfRkRDCi0JYm9vbAotCiBjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCiAJZGVmX2Jvb2wgeQogCkBAIC0xNzAsNiArMTY3LDEyIEBACiAJc2VsZWN0IENQVV9TSDJBCiAJc2VsZWN0IENQVV9IQVNfRlBVCiAKK2NvbmZpZyBDUFVfU1VCVFlQRV9NWEcKKwlib29sICJTdXBwb3J0IE1YLUcgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0gyQQorCWhlbHAKKwkgIFNlbGVjdCBNWC1HIGlmIHJ1bm5pbmcgb24gYW4gUjhBMDMwMjJCRyBwYXJ0LgorCiAjIFNILTMgUHJvY2Vzc29yIFN1cHBvcnQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzcwNQpAQCAtMjczLDYgKzI3NiwxNSBAQAogCiAjIFNILTRBIFByb2Nlc3NvciBTdXBwb3J0CiAKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc3MjMKKwlib29sICJTdXBwb3J0IFNINzcyMyBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDRBCisJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCWhlbHAKKwkgIFNlbGVjdCBTSDc3MjMgaWYgeW91IGhhdmUgYW4gU0gtTW9iaWxlUjIgQ1BVLgorCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzYzCiAJYm9vbCAiU3VwcG9ydCBTSDc3NjMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QQpAQCAtMzMwLDYgKzM0Miw3IEBACiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDVfMTAzCiAJYm9vbCAiU3VwcG9ydCBTSDUtMTAzIHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NINQogCiBlbmRjaG9pY2UKIApAQCAtMzY4LDYgKzM4MSwxNCBAQAogCSAgU2VsZWN0IDc2MTkgU29sdXRpb25FbmdpbmUgaWYgY29uZmlndXJpbmcgZm9yIGEgSGl0YWNoaSBTSDc2MTkKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAJCitjb25maWcgU0hfNzcyMV9TT0xVVElPTl9FTkdJTkUKKwlib29sICJTb2x1dGlvbkVuZ2luZTc3MjEiCisJc2VsZWN0IFNPTFVUSU9OX0VOR0lORQorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIxCisJaGVscAorCSAgU2VsZWN0IDc3MjEgU29sdXRpb25FbmdpbmUgaWYgY29uZmlndXJpbmcgZm9yIGEgSGl0YWNoaSBTSDc3MjEKKwkgIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF83NzIyX1NPTFVUSU9OX0VOR0lORQogCWJvb2wgIlNvbHV0aW9uRW5naW5lNzcyMiIKIAlzZWxlY3QgU09MVVRJT05fRU5HSU5FCkBAIC00NTUsMTMgKzQ3Niw2IEBACiAJICBUaGlzIGluY2x1ZGVzIGJvdGggdGhlIE9FTSBTZWN1cmVFZGdlIHByb2R1Y3RzIGFzIHdlbGwgYXMgdGhlCiAJICBTTUUgcHJvZHVjdCBsaW5lLgogCi1jb25maWcgU0hfNzcxMFZPSVBHVwotCWJvb2wgIlNINzcxMC1WT0lQLUdXIgotCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzEwCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGJ1aWxkIGEga2VybmVsIGZvciB0aGUgU0g3NzEwIGJhc2VkCi0JICBWT0lQIEdXLgotCiBjb25maWcgU0hfUlRTNzc1MVIyRAogCWJvb2wgIlJUUzc3NTFSMkQiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NTFSCkBAIC01NjksNyArNTgzLDcgQEAKIGNvbmZpZyBTSF9DTVQKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJDTVQgdGltZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENQVV9TSDIKKwlkZXBlbmRzIG9uIENQVV9TSDIgJiYgIUNQVV9TVUJUWVBFX01YRwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBDTVQgYXMgdGhlIHN5c3RlbSB0aW1lci4KIApAQCAtNTg2LDYgKzYwMCw4IEBACiAJCQlDUFVfU1VCVFlQRV9TSDc3NjMKIAlkZWZhdWx0ICI4NiIgaWYgQ1BVX1NVQlRZUEVfU0g3NjE5CiAJZGVmYXVsdCAiMTQwIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDYKKwlkZWZhdWx0ICIxNDIiIGlmIENQVV9TVUJUWVBFX1NINzIwMworCWRlZmF1bHQgIjIzOCIgaWYgQ1BVX1NVQlRZUEVfTVhHCiAJZGVmYXVsdCAiMTYiCiAKIGNvbmZpZyBTSF9QQ0xLX0ZSRVEKQEAgLTU5MywxMCArNjA5LDEwIEBACiAJZGVmYXVsdCAiMjcwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzM0MwogCWRlZmF1bHQgIjMxMjUwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc2MTkKIAlkZWZhdWx0ICIzMjAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzIyCi0JZGVmYXVsdCAiMzMzMzMzMzMiIGlmIENQVV9TVUJUWVBFX1NINzc3MCB8fCBcCisJZGVmYXVsdCAiMzMzMzMzMzMiIGlmIENQVV9TVUJUWVBFX1NINzc3MCB8fCBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgXAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3NzYwIHx8IENQVV9TVUJUWVBFX1NINzcwNSB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDMgfHwgQ1BVX1NVQlRZUEVfU0g3MjA2IHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzI2MworCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IENQVV9TVUJUWVBFX01YRwogCWRlZmF1bHQgIjYwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgogCWRlZmF1bHQgIjY2MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDRfMjAyCiAJZGVmYXVsdCAiNTAwMDAwMDAiCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggNWRjYjc0Yi4uZDlkMjhmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwpAQCAtMjksMTYgKzI5LDE3IEBACiBjb25maWcgRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQKIAloZXgKIAlkZXBlbmRzIG9uIEVBUkxZX1NDSUZfQ09OU09MRQotCWRlZmF1bHQgIjB4ZmZlMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3NjMKLQlkZWZhdWx0ICIweGZmZTAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3MjIgfHwgQ1BVX1NVQlRZUEVfU0g3MzY2CisJZGVmYXVsdCAiMHhhNDQwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzEyIHx8IENQVV9TVUJUWVBFX1NINzcwNQorCWRlZmF1bHQgIjB4YTQ0MzAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzcyMCB8fCBDUFVfU1VCVFlQRV9TSDc3MjEKKwlkZWZhdWx0ICIweGY4NDIwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc2MTkKKwlkZWZhdWx0ICIweGZmODA0MDAwIiBpZiBDUFVfU1VCVFlQRV9NWEcKKwlkZWZhdWx0ICIweGZmYzMwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSFgzCisJZGVmYXVsdCAiMHhmZmUwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc2MyB8fCBcCisJCQkJQ1BVX1NVQlRZUEVfU0g3NzIyIHx8IENQVV9TVUJUWVBFX1NINzM2NgorCWRlZmF1bHQgIjB4ZmZlODAwMDAiIGlmIENQVV9TSDQKIAlkZWZhdWx0ICIweGZmZWEwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3ODUKIAlkZWZhdWx0ICIweGZmZmU4MDAwIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDMKIAlkZWZhdWx0ICIweGZmZmU5ODAwIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDYgfHwgQ1BVX1NVQlRZUEVfU0g3MjYzCi0JZGVmYXVsdCAiMHhmODQyMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NjE5Ci0JZGVmYXVsdCAiMHhhNDQwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzEyIHx8IENQVV9TVUJUWVBFX1NINzcwNQotCWRlZmF1bHQgIjB4YTQ0MzAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzcyMCB8fCBDUFVfU1VCVFlQRV9TSDc3MjEKLQlkZWZhdWx0ICIweGZmYzMwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSFgzCi0JZGVmYXVsdCAiMHhmZmU4MDAwMCIgaWYgQ1BVX1NINAogCWRlZmF1bHQgIjB4MDAwMDAwMDAiCiAKIGNvbmZpZyBFQVJMWV9QUklOVEsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDgxMzgxZTUuLmJiMDZmODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTA3LDYgKzEwNyw3IEBACiBtYWNoZGlyLSQoQ09ORklHX1NIXzc3NTFfU09MVVRJT05fRU5HSU5FKQkrPSBzZS83NzUxCiBtYWNoZGlyLSQoQ09ORklHX1NIXzc3ODBfU09MVVRJT05fRU5HSU5FKQkrPSBzZS83NzgwCiBtYWNoZGlyLSQoQ09ORklHX1NIXzczNDNfU09MVVRJT05fRU5HSU5FKQkrPSBzZS83MzQzCittYWNoZGlyLSQoQ09ORklHX1NIXzc3MjFfU09MVVRJT05fRU5HSU5FKQkrPSBzZS83NzIxCiBtYWNoZGlyLSQoQ09ORklHX1NIX0hQNlhYKQkJCSs9IGhwNnh4CiBtYWNoZGlyLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJCQkrPSBkcmVhbWNhc3QKIG1hY2hkaXItJChDT05GSUdfU0hfTVBDMTIxMSkJCQkrPSBtcGMxMjExCkBAIC0xMTgsNyArMTE5LDYgQEAKIG1hY2hkaXItJChDT05GSUdfU0hfSElHSExBTkRFUikJCQkrPSByZW5lc2FzL3I3NzgwcnAKIG1hY2hkaXItJChDT05GSUdfU0hfTUlHT1IpCQkJKz0gcmVuZXNhcy9taWdvcgogbWFjaGRpci0kKENPTkZJR19TSF9TREs3NzgwKQkJCSs9IHJlbmVzYXMvc2RrNzc4MAotbWFjaGRpci0kKENPTkZJR19TSF83NzEwVk9JUEdXKQkJCSs9IHJlbmVzYXMvc2g3NzEwdm9pcGd3CiBtYWNoZGlyLSQoQ09ORklHX1NIX1gzUFJPVE8pCQkJKz0gcmVuZXNhcy94M3Byb3RvCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NINDIwMl9NSUNST0RFVikJCSs9IHN1cGVyaC9taWNyb2RldgogbWFjaGRpci0kKENPTkZJR19TSF9MQU5ESVNLKQkJCSs9IGxhbmRpc2sKQEAgLTE1NSw3ICsxNTUsMTEgQEAKIAogYm9vdCA6PSBhcmNoL3NoL2Jvb3QKIAoraWZuZXEgKCQoS0JVSUxEX1NSQyksKQogaW5jZGlyLXByZWZpeAk6PSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLXNoLworZWxzZQoraW5jZGlyLXByZWZpeAk6PQorZW5kaWYKIAogIwlVcGRhdGUgbWFjaGluZSBhcmNoIGFuZCBwcm9jIHN5bWxpbmtzIGlmIHNvbWV0aGluZyB3aGljaCBhZmZlY3RzCiAjCXRoZW0gY2hhbmdlZC4gIFdlIHVzZSAuYXJjaCBhbmQgLm1hY2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IHdlcmUKQEAgLTE4Myw3ICsxODcsNyBAQAogCSQoUSlpZiBbICEgLWQgaW5jbHVkZS9hc20tc2ggXTsgdGhlbiBta2RpciAtcCBpbmNsdWRlL2FzbS1zaDsgZmkKIAkkKFEpcm0gLWYgaW5jbHVkZS9hc20tc2gvbWFjaAogCSQoUSlmb3IgaSBpbiAkKGluY2Rpci15KTsgZG8gXAotCWlmIFsgLWQgJChpbmNkaXItcHJlZml4KSQkaSBdOyB0aGVuIFwKKwlpZiBbIC1kICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tc2gvJCRpIF07IHRoZW4gXAogCQllY2hvIC1uICcgIFNZTUxJTksgaW5jbHVkZS9hc20tc2gvbWFjaCAtPiAnOyBcCiAJCWVjaG8gLWUgImluY2x1ZGUvYXNtLXNoLyQkaSI7IFwKIAkJbG4gLWZzbiAkKGluY2Rpci1wcmVmaXgpJCRpIFwKQEAgLTE5Miw3ICsxOTYsNyBAQAogCQlpZiBbICEgLWQgaW5jbHVkZS9hc20tc2gvbWFjaCBdOyB0aGVuIFwKIAkJCWVjaG8gLW4gJyAgU1lNTElOSyBpbmNsdWRlL2FzbS1zaC9tYWNoIC0+ICc7IFwKIAkJCWVjaG8gLWUgJ2luY2x1ZGUvYXNtLXNoJzsgXAotCQkJbG4gLWZzbiAkKGluY2Rpci1wcmVmaXgpIGluY2x1ZGUvYXNtLXNoL21hY2g7IFwKKwkJCWxuIC1mc24gJChpbmNkaXItcHJlZml4KS4uL2FzbS1zaCBpbmNsdWRlL2FzbS1zaC9tYWNoOyBcCiAJCWZpOyBcCiAJZmk7IFwKIAlkb25lCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9ocDZ4eF9hcG0uYyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNnh4X2FwbS5jCmluZGV4IDY0MGNhMmEuLjE3N2Y0ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNnh4X2FwbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNnh4X2FwbS5jCkBAIC0yLDYgKzIsNyBAQAogICogYmlvcy1sZXNzIEFQTSBkcml2ZXIgZm9yIGhwNjgwCiAgKgogICogQ29weXJpZ2h0IDIwMDUgKGMpIEFuZHJpeSBTa3VseXNoIDxhc2t1bHlzaEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCAoYykgS3Jpc3RvZmZlciBFcmljc29uIDxrcmlzdG9mZmVyLmVyaWNzb25AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgpAQCAtMTUsMTcgKzE2LDE5IEBACiAjaW5jbHVkZSA8YXNtL2FkYy5oPgogI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgogCi0jZGVmaW5lIFNINzcwOV9QR0RSCQkJMHhhNDAwMDEyYwotCisvKiBwZXJjZW50YWdlIHZhbHVlcyAqLwogI2RlZmluZSBBUE1fQ1JJVElDQUwJCQkxMAogI2RlZmluZSBBUE1fTE9XCQkJCTMwCiAKKy8qIHJlc29uYWJseSBzYW5lIHZhbHVlcyAqLwogI2RlZmluZSBIUDY4MF9CQVRURVJZX01BWAkJODk4CiAjZGVmaW5lIEhQNjgwX0JBVFRFUllfTUlOCQk0ODYKICNkZWZpbmUgSFA2ODBfQkFUVEVSWV9BQ19PTgkJMTAyMwogCiAjZGVmaW5lIE1PRE5BTUUgImhwNngwX2FwbSIKIAorI2RlZmluZSBQR0RSCTB4YTQwMDAxMmMKKwogc3RhdGljIHZvaWQgaHA2eDBfYXBtX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IGFwbV9wb3dlcl9pbmZvICppbmZvKQogewogCWludCBiYXR0ZXJ5LCBiYWNrdXAsIGNoYXJnaW5nLCBwZXJjZW50YWdlOwpAQCAtMzgsMTcgKzQxLDI2IEBACiAJcGVyY2VudGFnZSA9IDEwMCAqIChiYXR0ZXJ5IC0gSFA2ODBfQkFUVEVSWV9NSU4pIC8KIAkJCSAgIChIUDY4MF9CQVRURVJZX01BWCAtIEhQNjgwX0JBVFRFUllfTUlOKTsKIAorCS8qICUgb2YgZnVsbCBiYXR0ZXJ5ICovCisJaW5mby0+YmF0dGVyeV9saWZlID0gcGVyY2VudGFnZTsKKworCS8qIFdlIHdhbnQgb3VyIGVzdGltYXRlcyBpbiBtaW51dGVzICovCisJaW5mby0+dW5pdHMgPSAwOworCisJLyogRXh0cmVtZWx5KCEhKSByb3VnaCBlc3RpbWF0ZSwgd2Ugd2lsbCByZXBsYWNlIHRoaXMgd2l0aCBhIGRhdGFsaXN0IGxhdGVyIG9uICovCisJaW5mby0+dGltZSA9ICgyICogYmF0dGVyeSk7CisKIAlpbmZvLT5hY19saW5lX3N0YXR1cyA9IChiYXR0ZXJ5ID4gSFA2ODBfQkFUVEVSWV9BQ19PTikgPwogCQkJIEFQTV9BQ19PTkxJTkUgOiBBUE1fQUNfT0ZGTElORTsKIAotCXBnZHIgPSBjdHJsX2luYihTSDc3MDlfUEdEUik7CisJcGdkciA9IGN0cmxfaW5iKFBHRFIpOwogCWlmIChwZ2RyICYgUEdEUl9NQUlOX0JBVFRFUllfT1VUKSB7CiAJCWluZm8tPmJhdHRlcnlfc3RhdHVzCT0gQVBNX0JBVFRFUllfU1RBVFVTX05PVF9QUkVTRU5UOwogCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcJPSAweDgwOwogCX0gZWxzZSBpZiAoY2hhcmdpbmcgPCA4KSB7CiAJCWluZm8tPmJhdHRlcnlfc3RhdHVzCT0gQVBNX0JBVFRFUllfU1RBVFVTX0NIQVJHSU5HOwogCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcJPSAweDA4OwotCQlpbmZvLT5hY19saW5lX3N0YXR1cyA9IDB4ZmY7CisJCWluZm8tPmFjX2xpbmVfc3RhdHVzCT0gMHgwMTsKIAl9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPD0gQVBNX0NSSVRJQ0FMKSB7CiAJCWluZm8tPmJhdHRlcnlfc3RhdHVzCT0gQVBNX0JBVFRFUllfU1RBVFVTX0NSSVRJQ0FMOwogCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcJPSAweDA0OwpAQCAtNTksOCArNzEsNiBAQAogCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cwk9IEFQTV9CQVRURVJZX1NUQVRVU19ISUdIOwogCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcJPSAweDAxOwogCX0KLQotCWluZm8tPnVuaXRzID0gMDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGhwNngwX2FwbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9taWdvci9zZXR1cC5jCmluZGV4IDIxYWI4YzguLjAwZDUyYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL21pZ29yL3NldHVwLmMKQEAgLTEwLDggKzEwLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NoX2tleXNjLmg+CisjaW5jbHVkZSA8YXNtL21pZ29yLmg+CiAKIC8qIEFkZHJlc3MgICAgIElSUSAgU2l6ZSAgQnVzICBEZXNjcmlwdGlvbgogICogMHgwMDAwMDAwMCAgICAgICA2NE1CICAxNiAgIE5PUiBGbGFzaCAoU1AyOVBMMjU2TikKQEAgLTIzLDkgKzI5LDkgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfZXRoX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLm5hbWUgICA9ICJzbWM5MXgtcmVncyIgLAotCQkuc3RhcnQgID0gUDJTRUdBRERSKDB4MTAwMDAzMDApLAotCQkuZW5kICAgID0gUDJTRUdBRERSKDB4MTAwMDAzMGYpLAorCQkubmFtZSAgID0gIlNNQzkxQzExMSIgLAorCQkuc3RhcnQgID0gMHgxMDAwMDMwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAzMGYsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTQwLDE5ICs0NiwyMDIgQEAKIAkucmVzb3VyY2UgICAgICAgPSBzbWM5MXhfZXRoX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBzaF9rZXlzY19pbmZvID0geworCS5tb2RlID0gU0hfS0VZU0NfTU9ERV8yLCAvKiBLRVlPVVQwLT40LCBLRVlJTjEtPjUgKi8KKwkuc2Nhbl90aW1pbmcgPSAzLAorCS5kZWxheSA9IDUsCisJLmtleWNvZGVzID0geworCQkwLCBLRVlfVVAsIEtFWV9ET1dOLCBLRVlfTEVGVCwgS0VZX1JJR0hULCBLRVlfRU5URVIsCisJCTAsIEtFWV9GLCBLRVlfQywgS0VZX0QsCUtFWV9ILCBLRVlfMSwKKwkJMCwgS0VZXzIsIEtFWV8zLCBLRVlfNCwJS0VZXzUsIEtFWV82LAorCQkwLCBLRVlfNywgS0VZXzgsIEtFWV85LCBLRVlfUywgS0VZXzAsCisJCTAsIEtFWV9QLCBLRVlfU1RPUCwgS0VZX1JFV0lORCwgS0VZX1BMQVksIEtFWV9GQVNURk9SV0FSRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9rZXlzY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAweDA0NGIwMDAwLAorCQkuZW5kICAgID0gMHgwNDRiMDAwZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gNzksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hfa2V5c2NfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaF9rZXlzYyIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaF9rZXlzY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNoX2tleXNjX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzaF9rZXlzY19pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbWlnb3Jfbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9Cit7CisJeworCQkubmFtZSA9ICJ1Ym9vdCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSA9ICgxICogMTAyNCAqIDEwMjQpLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZSA9ICJyb290ZnMiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgxNSAqIDEwMjQgKiAxMDI0KSwKKwl9LAorCXsKKwkJLm5hbWUgPSAib3RoZXIiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pZ29yX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBtaWdvcl9ub3JfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG1pZ29yX25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWlnb3Jfbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gIk5PUiBGbGFzaCIsCisJCS5zdGFydAkJPSAweDAwMDAwMDAwLAorCQkuZW5kCQk9IDB4MDNmZmZmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWdvcl9ub3JfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkucmVzb3VyY2UJPSBtaWdvcl9ub3JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtaWdvcl9ub3JfZmxhc2hfcmVzb3VyY2VzKSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbWlnb3Jfbm9yX2ZsYXNoX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBtaWdvcl9uYW5kX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJuYW5kZGF0YTEiLAorCQkub2Zmc2V0CQk9IDB4MCwKKwkJLnNpemUJCT0gNTEyICogMTAyNCAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJuYW5kZGF0YTIiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gNTEyICogMTAyNCAqIDEwMjQsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIG1pZ29yX25hbmRfZmxhc2hfY21kX2N0bChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKKworCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyArIDB4MDA0MDAwMDApOworCWVsc2UgaWYgKGN0cmwgJiBOQU5EX0FMRSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XICsgMHgwMDgwMDAwMCk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOworfQorCitzdGF0aWMgaW50IG1pZ29yX25hbmRfZmxhc2hfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIGN0cmxfaW5iKFBPUlRfUEFEUikgJiAweDAyOyAvKiBQVEExICovCit9CisKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgbWlnb3JfbmFuZF9mbGFzaF9kYXRhID0geworCS5jaGlwID0geworCQkubnJfY2hpcHMgPSAxLAorCQkucGFydGl0aW9ucyA9IG1pZ29yX25hbmRfZmxhc2hfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKG1pZ29yX25hbmRfZmxhc2hfcGFydGl0aW9ucyksCisJCS5jaGlwX2RlbGF5ID0gMjAsCisJCS5wYXJ0X3Byb2JlX3R5cGVzID0gKGNvbnN0IGNoYXIgKltdKSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfSwKKwl9LAorCS5jdHJsID0geworCQkuZGV2X3JlYWR5ID0gbWlnb3JfbmFuZF9mbGFzaF9yZWFkeSwKKwkJLmNtZF9jdHJsID0gbWlnb3JfbmFuZF9mbGFzaF9jbWRfY3RsLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1pZ29yX25hbmRfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAiTkFORCBGbGFzaCIsCisJCS5zdGFydAkJPSAweDE4MDAwMDAwLAorCQkuZW5kCQk9IDB4MThmZmZmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWlnb3JfbmFuZF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdlbl9uYW5kIiwKKwkucmVzb3VyY2UJPSBtaWdvcl9uYW5kX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobWlnb3JfbmFuZF9mbGFzaF9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZtaWdvcl9uYW5kX2ZsYXNoX2RhdGEsCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1pZ29yX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzbWM5MXhfZXRoX2RldmljZSwKKwkmc2hfa2V5c2NfZGV2aWNlLAorCSZtaWdvcl9ub3JfZmxhc2hfZGV2aWNlLAorCSZtaWdvcl9uYW5kX2ZsYXNoX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtaWdvcl9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInJ0Yy1yczVjMzcyIiwgMHgzMiksCisJCS50eXBlICAgPSAicnM1YzM3MmIiLAorCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygibWlnb3JfdHMiLCAweDUxKSwKKwkJLmlycSA9IDM4LCAvKiBJUlE2ICovCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pZ29yX2RldmljZXNfc2V0dXAodm9pZCkKIHsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtaWdvcl9pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG1pZ29yX2kyY19kZXZpY2VzKSk7CisgCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKG1pZ29yX2RldmljZXMsIEFSUkFZX1NJWkUobWlnb3JfZGV2aWNlcykpOwogfQogX19pbml0Y2FsbChtaWdvcl9kZXZpY2VzX3NldHVwKTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1pZ29yX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JY3RybF9vdXR3KDB4MTAwMCwgMHhhNDA1MDExMCk7IC8qIEVuYWJsZSBJUlEwIGluIFBKQ1IgKi8KKwkvKiBTTUM5MUMxMTEgLSBFbmFibGUgSVJRMCAqLworCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BKQ1IpICYgfjB4MDAwMywgUE9SVF9QSkNSKTsKKworCS8qIEtFWVNDICovCisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFlDUikgJiB+MHgwZmZmLCBQT1JUX1BZQ1IpOworCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4MGZmMCwgUE9SVF9QWkNSKTsKKwljdHJsX291dHcoY3RybF9pbncoUE9SVF9QU0VMQSkgJiB+MHg0MTAwLCBQT1JUX1BTRUxBKTsKKwljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkEpICYgfjB4NDAwMCwgUE9SVF9ISVpDUkEpOworCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQykgJiB+MHhjMDAwLCBQT1JUX0hJWkNSQyk7CisJY3RybF9vdXRsKGN0cmxfaW5sKE1TVFBDUjIpICYgfjB4MDAwMDQwMDAsIE1TVFBDUjIpOworCisJLyogTkFORCBGbGFzaCAqLworCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BYQ1IpICYgMHgwZmZmLCBQT1JUX1BYQ1IpOworCWN0cmxfb3V0bCgoY3RybF9pbmwoQlNDX0NTNkFCQ1IpICYgfjB4MDAwMDA2MDApIHwgMHgwMDAwMDIwMCwKKwkJICBCU0NfQ1M2QUJDUik7CisKKwkvKiBJMkMgKi8KKwljdHJsX291dGwoY3RybF9pbmwoTVNUUENSMSkgJiB+MHgwMDAwMDIwMCwgTVNUUENSMSk7CisKKwkvKiBUb3VjaCBQYW5lbCAtIEVuYWJsZSBJUlE2ICovCisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFpDUikgJiB+MHhjLCBQT1JUX1BaQ1IpOworCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMQSkgfCAweDgwMDApLCBQT1JUX1BTRUxBKTsKKwljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfSElaQ1JDKSAmIH4weDQwMDApLCBQT1JUX0hJWkNSQyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfbWlnb3IgX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaXJxLXI3NzgwbXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pcnEtcjc3ODBtcC5jCmluZGV4IDFmOGYwNzMuLjY4ZjBhZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pcnEtcjc3ODBtcC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pcnEtcjc3ODBtcC5jCkBAIC0xOCwzMSArMTgsNDQgQEAKIAlVTlVTRUQgPSAwLAogCiAJLyogYm9hcmQgc3BlY2lmaWMgaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlBWDg4Nzk2LCAgICAgICAgICAvKiBFdGhlcm5ldCBjb250cm9sbGVyICovCi0JQ0YsICAgICAgICAgICAgICAgLyogQ29tcGFjdCBGbGFzaCAqLwotCVBTVywgICAgICAgICAgICAgIC8qIFB1c2ggU3dpdGNoICovCi0JRVhUMSwgICAgICAgICAgICAgLyogRVhUMW4gSVJRICovCi0JRVhUNCwgICAgICAgICAgICAgLyogRVhUNG4gSVJRICovCisJQ0YsCQkvKiBDb21wYWN0IEZsYXNoICovCisJVFAsCQkvKiBUb3VjaCBwYW5lbCAqLworCVNDSUYxLAkJLyogRlBHQSBTQ0lGMSAqLworCVNDSUYwLAkJLyogRlBHQSBTQ0lGMCAqLworCVNNQlVTLAkJLyogU01CVVMgKi8KKwlSVEMsCQkvKiBSVEMgQWxhcm0gKi8KKwlBWDg4Nzk2LAkvKiBFdGhlcm5ldCBjb250cm9sbGVyICovCisJUFNXLAkJLyogUHVzaCBTd2l0Y2ggKi8KKworCS8qIGV4dGVybmFsIGJ1cyBjb25uZWN0b3IgKi8KKwlFWFQxLCBFWFQyLCBFWFQ0LCBFWFQ1LCBFWFQ2LAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19JUlEoQ0YsIElSUV9DRiksCi0JSU5UQ19JUlEoUFNXLCBJUlFfUFNXKSwKKwlJTlRDX0lSUShUUCwgSVJRX1RQKSwKKwlJTlRDX0lSUShTQ0lGMSwgSVJRX1NDSUYxKSwKKwlJTlRDX0lSUShTQ0lGMCwgSVJRX1NDSUYwKSwKKwlJTlRDX0lSUShTTUJVUywgSVJRX1NNQlVTKSwKKwlJTlRDX0lSUShSVEMsIElSUV9SVEMpLAogCUlOVENfSVJRKEFYODg3OTYsIElSUV9BWDg4Nzk2KSwKLQlJTlRDX0lSUShFWFQxLCBJUlFfRVhUMSksCi0JSU5UQ19JUlEoRVhUNCwgSVJRX0VYVDQpLAorCUlOVENfSVJRKFBTVywgSVJRX1BTVyksCisKKwlJTlRDX0lSUShFWFQxLCBJUlFfRVhUMSksIElOVENfSVJRKEVYVDIsIElSUV9FWFQyKSwKKwlJTlRDX0lSUShFWFQ0LCBJUlFfRVhUNCksIElOVENfSVJRKEVYVDUsIElSUV9FWFQ1KSwKKwlJTlRDX0lSUShFWFQ2LCBJUlFfRVhUNiksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhhNDAwMDAwMCwgMCwgMTYsIC8qIElSTE1TSyAqLwotCSAgeyAwLCAwLCAwLCAwLCBDRiwgMCwgMCwgMCwKLQkgICAgMCwgMCwgMCwgRVhUNCwgMCwgRVhUMSwgUFNXLCBBWDg4Nzk2IH0gfSwKKwkgIHsgU0NJRjAsIFNDSUYxLCBSVEMsIDAsIENGLCAwLCBUUCwgU01CVVMsCisJICAgIDAsIEVYVDYsIEVYVDUsIEVYVDQsIEVYVDIsIEVYVDEsIFBTVywgQVg4ODc5NiB9IH0sCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBpcmwyaXJxW0hMX05SX0lSTF0gX19pbml0ZGF0YSA9IHsKLQkwLCBJUlFfQ0YsIDAsIDAsCi0JMCwgMCwgMCwgMCwKLQkwLCBJUlFfRVhUNCwgMCwgSVJRX0VYVDEsCisJMCwgSVJRX0NGLCBJUlFfVFAsIElSUV9TQ0lGMSwKKwlJUlFfU0NJRjAsIElSUV9TTUJVUywgSVJRX1JUQywgSVJRX0VYVDYsCisJSVJRX0VYVDUsIElSUV9FWFQ0LCBJUlFfRVhUMiwgSVJRX0VYVDEsCiAJMCwgSVJRX0FYODg3OTYsIElSUV9QU1csCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCmluZGV4IDJmNjhiZWEuLmE1YzVlOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCkBAIC00LDcgKzQsNyBAQAogICogUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciBTdXBwb3J0LgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDcgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOCBQYXVsIE11bmR0CiAgKgogICogVGhpcyBjb250YWlucyBzdXBwb3J0IGZvciB0aGUgUjc3ODBSUC0xLCBSNzc4ME1QLCBhbmQgUjc3ODVSUAogICogSGlnaGxhbmRlciBtb2R1bGVzLgpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bmV0L2F4ODg3OTYuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CkBAIC0xNzYsMTEgKzE3NywzOCBAQAogCS5yZXNvdXJjZSAgICAgICA9IGF4ODg3OTZfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBBX1NNQ1IsCisJCS5lbmQJPSBQQV9TTUNSICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NNQlVTLAorCQkuZW5kCT0gSVJRX1NNQlVTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21idXNfZGV2aWNlID0geworCS5uYW1lCQk9ICJpMmMtaGlnaGxhbmRlciIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYnVzX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21idXNfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGhpZ2hsYW5kZXJfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtcnM1YzM3MiIsIDB4MzIpLAorCQkudHlwZQk9ICJyMjAyNXNkIiwKKwl9LAorfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnI3NzgwcnBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnI4YTY2NTk3X3VzYl9ob3N0X2RldmljZSwKIAkmbTY2NTkyX3VzYl9wZXJpcGhlcmFsX2RldmljZSwKIAkmaGVhcnRiZWF0X2RldmljZSwKKwkmc21idXNfZGV2aWNlLAogI2lmbmRlZiBDT05GSUdfU0hfUjc3ODBSUAogCSZheDg4Nzk2X2RldmljZSwKICNlbmRpZgpAQCAtMTk5LDEyICsyMjcsMjAgQEAKIAogc3RhdGljIGludCBfX2luaXQgcjc3ODBycF9kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisJaW50IHJldCA9IDA7CisKICNpZm5kZWYgQ09ORklHX1NIX1I3NzgwUlAKIAlpZiAocmVnaXN0ZXJfdHJhcHBlZF9pbygmY2ZfdHJhcHBlZF9pbykgPT0gMCkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjZl9pZGVfZGV2aWNlKTsKKwkJcmV0IHw9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY2ZfaWRlX2RldmljZSk7CiAjZW5kaWYKLQlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocjc3ODBycF9kZXZpY2VzLAorCisJcmV0IHw9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHI3NzgwcnBfZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShyNzc4MHJwX2RldmljZXMpKTsKKworCXJldCB8PSBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBoaWdobGFuZGVyX2kyY19kZXZpY2VzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGhpZ2hsYW5kZXJfaTJjX2RldmljZXMpKTsKKworCXJldHVybiByZXQ7CiB9CiBkZXZpY2VfaW5pdGNhbGwocjc3ODBycF9kZXZpY2VzX3NldHVwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zaDc3MTB2b2lwZ3cvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcwMzc1Ni4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai15CSA6PSBzZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zaDc3MTB2b2lwZ3cvc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ1NmZkOC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIFJlbmVzYXMgVGVjaG5vbG9neSBTSDc3MTAgVm9JUCBHYXRld2F5Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2ICBSYW5qaXQgRGVzaHBhbmRlCi0gKiBLZW5hdGkgVGVjaG5vbG9naWVzIEluYy4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2g3NzEwdm9pcGd3X2lwcl9tYXBbXSA9IHsKLQl7IFRJTUVSMl9JUlEsIFRJTUVSMl9JUFJfQUREUiwgVElNRVIyX0lQUl9QT1MsIFRJTUVSMl9QUklPUklUWSB9LAotCXsgV0RUX0lSUSwgV0RUX0lQUl9BRERSLCBXRFRfSVBSX1BPUywgV0RUX1BSSU9SSVRZIH0sCi0KLQkvKiBTQ0lGMCAqLwotCXsgU0NJRjBfRVJJX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsIFNDSUYwX1BSSU9SSVRZIH0sCi0JeyBTQ0lGMF9SWElfSVJRLCBTQ0lGMF9JUFJfQUREUiwgU0NJRjBfSVBSX1BPUywgU0NJRjBfUFJJT1JJVFkgfSwKLQl7IFNDSUYwX0JSSV9JUlEsIFNDSUYwX0lQUl9BRERSLCBTQ0lGMF9JUFJfUE9TLCBTQ0lGMF9QUklPUklUWSB9LAotCXsgU0NJRjBfVFhJX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsIFNDSUYwX1BSSU9SSVRZIH0sCi0KLQkvKiBETUFDLTEgKi8KLQl7IERNVEUwX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCi0JeyBETVRFMV9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAotCXsgRE1URTJfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKLQl7IERNVEUzX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCi0KLQkvKiBETUFDLTIgKi8KLQl7IERNVEU0X0lSUSwgRE1BMl9JUFJfQUREUiwgRE1BMl9JUFJfUE9TLCBETUEyX1BSSU9SSVRZIH0sCi0JeyBETVRFNF9JUlEsIERNQTJfSVBSX0FERFIsIERNQTJfSVBSX1BPUywgRE1BMl9QUklPUklUWSB9LAotCi0JLyogSVBTRUMgKi8KLQl7IElQU0VDX0lSUSwgSVBTRUNfSVBSX0FERFIsIElQU0VDX0lQUl9QT1MsIElQU0VDX1BSSU9SSVRZIH0sCi0KLQkvKiBFRE1BQyAqLwotCXsgRURNQUMwX0lSUSwgRURNQUMwX0lQUl9BRERSLCBFRE1BQzBfSVBSX1BPUywgRURNQUMwX1BSSU9SSVRZIH0sCi0JeyBFRE1BQzFfSVJRLCBFRE1BQzFfSVBSX0FERFIsIEVETUFDMV9JUFJfUE9TLCBFRE1BQzFfUFJJT1JJVFkgfSwKLQl7IEVETUFDMl9JUlEsIEVETUFDMl9JUFJfQUREUiwgRURNQUMyX0lQUl9QT1MsIEVETUFDMl9QUklPUklUWSB9LAotCi0JLyogU0lPRjAgKi8KLQl7IFNJT0YwX0VSSV9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSB9LAotCXsgU0lPRjBfVFhJX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsIFNJT0YwX1BSSU9SSVRZIH0sCi0JeyBTSU9GMF9SWElfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywgU0lPRjBfUFJJT1JJVFkgfSwKLQl7IFNJT0YwX0NDSV9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSB9LAotCi0JLyogU0lPRjEgKi8KLQl7IFNJT0YxX0VSSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLCBTSU9GMV9QUklPUklUWSB9LAotCXsgU0lPRjFfVFhJX0lSUSwgU0lPRjFfSVBSX0FERFIsIFNJT0YxX0lQUl9QT1MsIFNJT0YxX1BSSU9SSVRZIH0sCi0JeyBTSU9GMV9SWElfSVJRLCBTSU9GMV9JUFJfQUREUiwgU0lPRjFfSVBSX1BPUywgU0lPRjFfUFJJT1JJVFkgfSwKLQl7IFNJT0YxX0NDSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLCBTSU9GMV9QUklPUklUWSB9LAotCi0JLyogU0xJQyBJUlEncyAqLwotCXsgSVJRMV9JUlEsIElSUTFfSVBSX0FERFIsIElSUTFfSVBSX1BPUywgSVJRMV9QUklPUklUWSB9LAotCXsgSVJRMl9JUlEsIElSUTJfSVBSX0FERFIsIElSUTJfSVBSX1BPUywgSVJRMl9QUklPUklUWSB9LAotfTsKLQotLyoKLSAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHNoNzcxMHZvaXBnd19pbml0X2lycSh2b2lkKQotewotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgaW4gSVBSIHJlZ2lzdGVycyAqLwotCWN0cmxfb3V0dygweDAsIElOVENfSVBSQSk7Ci0JY3RybF9vdXR3KDB4MCwgSU5UQ19JUFJCKTsKLQljdHJsX291dHcoMHgwLCBJTlRDX0lQUkMpOwotCWN0cmxfb3V0dygweDAsIElOVENfSVBSRCk7Ci0JY3RybF9vdXR3KDB4MCwgSU5UQ19JUFJFKTsKLQljdHJsX291dHcoMHgwLCBJTlRDX0lQUkYpOwotCWN0cmxfb3V0dygweDAsIElOVENfSVBSRyk7Ci0JY3RybF9vdXR3KDB4MCwgSU5UQ19JUFJIKTsKLQljdHJsX291dHcoMHgwLCBJTlRDX0lQUkkpOwotCi0JLyogQWNrIGFsbCBpbnRlcnJ1cHQgc291cmNlcyBpbiB0aGUgSVJSMCByZWdpc3RlciAqLwotCWN0cmxfb3V0YigweDNmLCBJTlRDX0lSUjApOwotCi0JLyogVXNlIElSUTAgLSBJUlEzIGFzIGFjdGl2ZSBsb3cgaW50ZXJydXB0IGxpbmVzIGkuZS4gZGlzYWJsZQotCSAqIElSTCBtb2RlLgotCSAqLwotCWN0cmxfb3V0dygweDJhYSwgSU5UQ19JQ1IxKTsKLQotCW1ha2VfaXByX2lycShzaDc3MTB2b2lwZ3dfaXByX21hcCwgQVJSQVlfU0laRShzaDc3MTB2b2lwZ3dfaXByX21hcCkpOwotfQotCi0vKgotICogVGhlIE1hY2hpbmUgVmVjdG9yCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2g3NzEwdm9pcGd3IF9faW5pdG12ID0gewotCS5tdl9uYW1lCQk9ICJTSDc3MTAgVm9JUCBHYXRld2F5IiwKLQkubXZfbnJfaXJxcwkJPSAxMDQsCi0JLm12X2luaXRfaXJxCQk9IHNoNzcxMHZvaXBnd19pbml0X2lycSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3gzcHJvdG8vaWxzZWwuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMveDNwcm90by9pbHNlbC5jCmluZGV4IDZkNDQ1NGYuLmI1YzY3M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMveDNwcm90by9pbHNlbC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMveDNwcm90by9pbHNlbC5jCkBAIC02OCw3ICs2OCw3IEBACiAJc2hpZnQgPSBta19pbHNlbF9zaGlmdChiaXQpOwogCiAJcHJfZGVidWcoIiVzOiBiaXQjJWQ6IGFkZHIgLSAweCUwOGx4IChzaGlmdCAlZCwgc2V0ICVkKVxuIiwKLQkJIF9fRlVOQ1RJT05fXywgYml0LCBhZGRyLCBzaGlmdCwgc2V0KTsKKwkJIF9fZnVuY19fLCBiaXQsIGFkZHIsIHNoaWZ0LCBzZXQpOwogCiAJdG1wID0gY3RybF9pbncoYWRkcik7CiAJdG1wICY9IH4oMHhmIDw8IHNoaWZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MjEvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzIxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMDkwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzIxL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15CSA6PSBzZXR1cC5vIGlycS5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83NzIxL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcyMS9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGZkZDYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcyMS9pcnEuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogbGludXgvYXJjaC9zaC9ib2FyZHMvc2UvNzcyMS9pcnEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9zZTc3MjEuaD4KKworZW51bSB7CisJVU5VU0VEID0gMCwKKworCS8qIGJvYXJkIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2VzICovCisJTVJTSFBDLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19JUlEoTVJTSFBDLCBNUlNIUENfSVJRMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgRlBHQV9JTFNSNiwgMCwgOCwgNCwgLyogSVJMTVNLICovCisJICB7IDAsIE1SU0hQQyB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAiU0U3NzIxIiwgdmVjdG9ycywKKwkJCSBOVUxMLCBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CisKKy8qCisgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCisgKi8KK3ZvaWQgX19pbml0IGluaXRfc2U3NzIxX0lSUSh2b2lkKQoreworCS8qIFBQQ1IgKi8KKwljdHJsX291dHcoY3RybF9pbncoMHhhNDA1MDExOCkgJiB+MHgwMGZmLCAweGE0MDUwMTE4KTsKKworCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKKwlpbnRjX3NldF9wcmlvcml0eShNUlNIUENfSVJRMCwgMHhmIC0gTVJTSFBDX0lSUTApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcyMS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcyMS9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTNlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzIxL3NldHVwLmMKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL3NlLzc3MjEvc2V0dXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIEhpdGFjaGkgVUwgU29sdXRpb25FbmdpbmUgNzcyMSBTdXBwb3J0LgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9zZTc3MjEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYXJ0YmVhdF9iaXRfcG9zW10gPSB7IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfTsKKworc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKKwkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAorCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCisJLnJlZ3NpemUJPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUEFfTEVELAorCQkuZW5kCT0gUEFfTEVELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiaGVhcnRiZWF0IiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfaWRlX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUEFfTVJTSFBDX0lPICsgMHgxZjAsCisJCS5lbmQJPSBQQV9NUlNIUENfSU8gKyAweDFmMCArIDggLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBQQV9NUlNIUENfSU8gKyAweDFmMCArIDB4MjA2LAorCQkuZW5kCT0gUEFfTVJTSFBDX0lPICsgMHgxZjAgKyA4ICsgMHgyMDYgKyA4LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgID0gTVJTSFBDX0lSUTAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2ZfaWRlX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGF0YV9wbGF0Zm9ybSIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZl9pZGVfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBjZl9pZGVfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNlNzcyMV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY2ZfaWRlX2RldmljZSwKKwkmaGVhcnRiZWF0X2RldmljZQorfTsKKworc3RhdGljIGludCBfX2luaXQgc2U3NzIxX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2U3NzIxX2RldmljZXMsCisJCUFSUkFZX1NJWkUoc2U3NzIxX2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbChzZTc3MjFfZGV2aWNlc19zZXR1cCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZTc3MjFfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwkvKiBmb3IgVVNCICovCisJY3RybF9vdXR3KDB4MDAwMCwgMHhBNDA1MDEwQyk7CS8qIFBHQ1IgKi8KKwljdHJsX291dHcoMHgwMDAwLCAweEE0MDUwMTBFKTsJLyogUEhDUiAqLworCWN0cmxfb3V0dygweDAwQUEsIDB4QTQwNTAxMTgpOwkvKiBQUENSICovCisJY3RybF9vdXR3KDB4MDAwMCwgMHhBNDA1MDEyNCk7CS8qIFBTRUxBICovCit9CisKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKKyAqLworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NlNzcyMSBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiU29sdXRpb24gRW5naW5lIDc3MjEiLAorCS5tdl9zZXR1cAkJPSBzZTc3MjFfc2V0dXAsCisJLm12X25yX2lycXMJCT0gMTA5LAorCS5tdl9pbml0X2lycQkJPSBpbml0X3NlNzcyMV9JUlEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcyMi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcyMi9zZXR1cC5jCmluZGV4IGIxYTNkOWQuLjMzZjZlZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MjIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzIyL3NldHVwLmMKQEAgLTEzLDEwICsxMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3NlNzcyMi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KKyNpbmNsdWRlIDxhc20vc2hfa2V5c2MuaD4KIAogLyogSGVhcnRiZWF0ICovCiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewpAQCAtOTIsMTAgKzk0LDQ3IEBACiAJLnJlc291cmNlICAgICAgID0gY2ZfaWRlX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBzaF9rZXlzY19pbmZvID0geworCS5tb2RlID0gU0hfS0VZU0NfTU9ERV8xLCAvKiBLRVlPVVQwLT41LCBLRVlJTjAtPjQgKi8KKwkuc2Nhbl90aW1pbmcgPSAzLAorCS5kZWxheSA9IDUsCisJLmtleWNvZGVzID0geyAvKiBTVzEgLT4gU1czMCAqLworCQlLRVlfQSwgS0VZX0IsIEtFWV9DLCBLRVlfRCwgS0VZX0UsCisJCUtFWV9GLCBLRVlfRywgS0VZX0gsIEtFWV9JLCBLRVlfSiwKKwkJS0VZX0ssIEtFWV9MLCBLRVlfTSwgS0VZX04sIEtFWV9PLAorCQlLRVlfUCwgS0VZX1EsIEtFWV9SLCBLRVlfUywgS0VZX1QsCisJCUtFWV9VLCBLRVlfViwgS0VZX1csIEtFWV9YLCBLRVlfWSwKKwkJS0VZX1osCisJCUtFWV9IT01FLCBLRVlfU0xFRVAsIEtFWV9XQUtFVVAsIEtFWV9DT0ZGRUUsIC8qIGxpZmUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9rZXlzY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAweDA0NGIwMDAwLAorCQkuZW5kICAgID0gMHgwNDRiMDAwZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gNzksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hfa2V5c2NfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaF9rZXlzYyIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaF9rZXlzY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNoX2tleXNjX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzaF9rZXlzY19pbmZvLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2U3NzIyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZoZWFydGJlYXRfZGV2aWNlLAogCSZzbWM5MXhfZXRoX2RldmljZSwKIAkmY2ZfaWRlX2RldmljZSwKKwkmc2hfa2V5c2NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2U3NzIyX2RldmljZXNfc2V0dXAodm9pZCkKQEAgLTEzNiw2ICsxNzUsOCBAQAogCWN0cmxfb3V0dygweDBBMTAsIFBPUlRfUFNFTEEpOyAvKiBCUyxTSEhJRDIgKi8KIAljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BZQ1IpOwogCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFpDUik7CisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKKwljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaW8uYwppbmRleCBiNzA0ZTIwLi45ZjhhNTQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaW8uYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCQkgKglzYWZlIGRlZmF1bHQuCiAJCQkgKi8KIAkJcHJpbnRrKCJXYXJuaW5nOiB1bmV4cGVjdGVkIHBvcnQgaW4gJXMoIG9mZnNldCA9IDB4JWx4IClcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIG9mZnNldCk7CisJCSAgICAgICBfX2Z1bmNfXywgb2Zmc2V0KTsKIAkJcmVzdWx0ID0gUFZSOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IDU5ZjU1MmMuLjg5YjQwODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTMyLDE5ICszMiwxOSBAQAogJChvYmopL2NvbXByZXNzZWQvdm1saW51eDogRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvY29tcHJlc3NlZCAkQAogCi1LRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCU4eCIgXAorS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKIAkJCSQoQ09ORklHX01FTU9SWV9TVEFSVCkgKyBcCiAJCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKV0nKQogCi1LRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglOHgiIFwKK0tFUk5FTF9FTlRSWQk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpKzB4MTAwMF0nKQogCiBxdWlldF9jbWRfdWltYWdlID0gVUlNQUdFICAkQAogICAgICAgY21kX3VpbWFnZSA9ICQoQ09ORklHX1NIRUxMKSAkKE1LSU1BR0UpIC1BIHNoIC1PIGxpbnV4IC1UIGtlcm5lbCBcCi0JCSAgIC1DIG5vbmUgLWEgJChLRVJORUxfTE9BRCkgLWUgJChLRVJORUxfRU5UUlkpIFwKKwkJICAgLUMgZ3ppcCAtYSAkKEtFUk5FTF9MT0FEKSAtZSAkKEtFUk5FTF9FTlRSWSkgXAogCQkgICAtbiAnTGludXgtJChLRVJORUxSRUxFQVNFKScgLWQgJDwgJEAKIAogJChvYmopL3VJbWFnZTogJChvYmopL3ZtbGludXguYmluLmd6IEZPUkNFCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKaW5kZXggYTgzOTliMC4uMDZhYzMxZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwpAQCAtNyw3ICs3LDYgQEAKIAogLnRleHQKIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAJLmdsb2JhbAlzdGFydHVwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggMWQ0ZWNiZi4uZjcyYzE5OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUwpAQCAtMTMsNyArMTMsNiBAQAogICogTW9kaWZpY2F0aW9uIGZvciBjb21wcmVzc2VkIGxvYWRlcjoKICAqICAgQ29weXJpZ2h0IChDKSAyMDAyIFN0dWFydCBNZW5lZnkgKHN0dWFydC5tZW5lZnlAc3QuY29tKQogICovCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9jcHUvbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY3B1L3JlZ2lzdGVycy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCmluZGV4IDJhZDgwNGUuLjFhMDcyNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKQEAgLTEsOSArMSwxMCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjMgotIyBUdWUgTm92IDEzIDIwOjMyOjM5IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzQKKyMgVGh1IE1hciAgNiAxNTozOTo1OSAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0xOSw2ICsyMCw4IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzcsMTcgKzQwLDIwIEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTYxLDE3ICs2NywyNyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKIENPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT1tCitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CkBAIC05OCw2ICsxMTQsOCBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTA1LDcgKzEyMyw5IEBACiBDT05GSUdfQ1BVX1NIND15CiBDT05GSUdfQ1BVX1NINEE9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKQEAgLTExNCw2ICsxMzQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CkBAIC0xMjIsMTIgKzE0MywxNiBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCkBAIC0xMzcsNyArMTYyLDggQEAKIENPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCi0jIENPTkZJR18zMkJJVCBpcyBub3Qgc2V0CitDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTE1Myw2ICsxNzksNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMk1CIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTE5MCw2ICsyMTcsNyBAQAogIyBCb2FyZCBzdXBwb3J0CiAjCiAjIENPTkZJR19TSF83NzgwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TREs3NzgwIGlzIG5vdCBzZXQKIENPTkZJR19TSF9ISUdITEFOREVSPXkKICMgQ09ORklHX1NIX1I3NzgwUlAgaXMgbm90IHNldAogQ09ORklHX1NIX1I3NzgwTVA9eQpAQCAtMjM0LDEyICsyNjIsMTMgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1BSRUVNUFRfQktMPXkKK0NPTkZJR19SQ1VfVFJBQ0U9eQogQ09ORklHX0dVU0E9eQogCiAjCkBAIC0yODQsNiArMzEzLDcgQEAKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzc0LDcgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldApAQCAtMzg2LDcgKzQxNyw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQpAQCAtMzk0LDYgKzQyNSw4IEBACiBDT05GSUdfRUVQUk9NXzkzQ1g2PXkKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ1Myw2ICs0ODYsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTA2LDYgKzU0MCw3IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKQEAgLTUzOCw3ICs1NzMsNiBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNTUxLDcgKzU4NSw2IEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNTc2LDYgKzYwOSw3IEBACiAjIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfODEzOVRPT184MTI5PXkKICMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKQEAgLTU5MSw2ICs2MjUsOSBAQAogIyBDT05GSUdfRTEwMDBfTkFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAogIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKQEAgLTYxNiw2ICs2NTMsNyBAQAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02MjksNyArNjY3LDYgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjg2LDYgKzcyMyw3IEBACiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzIyLDYgKzc2MCw3IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTczNiw2ICs3NzUsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwpAQCAtODAwLDEyICs4NDAsOSBAQAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKQEAgLTgzMCw5ICs4NjcsMTAgQEAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKQEAgLTg2NywxMiArOTA1LDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9eQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCkBAIC05MjAsOCArOTU2LDEwIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTk5NywxMCArMTAzNSw2IEBACiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPW0KLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDM1LDkgKzEwNjksOSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKQEAgLTEwNTksNiArMTA5Myw3IEBACiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CkBAIC0xMDc3LDYgKzExMTIsOSBAQAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldApAQCAtMTA5MSwxMyArMTEyOSwxNiBAQAogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkNGNhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA4NSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNQorIyBGcmkgTWFyIDIxIDEyOjA1OjMxIDIwMDgKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKKyMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19USU5ZX1NITUVNPXkKK0NPTkZJR19CQVNFX1NNQUxMPTEKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0gzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDAyMDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0ZQVV9FTVUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0FEQyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfRFNQPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCitDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKK0NPTkZJR19TSF83NzIxX1NPTFVUSU9OX0VOR0lORT15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGEyIgorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfQ0ZfRU5BQkxFUj15CisjIENPTkZJR19DRl9BUkVBNSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZfQVJFQTY9eQorQ09ORklHX0NGX0JBU0VfQUREUj0weGI4MDAwMDAwCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9eQorQ09ORklHX0lORVRfRVNQPXkKK0NPTkZJR19JTkVUX0lQQ09NUD15CitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD15CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hFRD15CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworQ09ORklHX05FVF9TQ0hfQ0JRPXkKK0NPTkZJR19ORVRfU0NIX0hUQj15CitDT05GSUdfTkVUX1NDSF9IRlNDPXkKK0NPTkZJR19ORVRfU0NIX1BSSU89eQorIyBDT05GSUdfTkVUX1NDSF9SUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9SRUQ9eQorQ09ORklHX05FVF9TQ0hfU0ZRPXkKK0NPTkZJR19ORVRfU0NIX1RFUUw9eQorQ09ORklHX05FVF9TQ0hfVEJGPXkKK0NPTkZJR19ORVRfU0NIX0dSRUQ9eQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPXkKK0NPTkZJR19ORVRfU0NIX05FVEVNPXkKKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19UQ0lOREVYPXkKK0NPTkZJR19ORVRfQ0xTX1JPVVRFND15CitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX0NMU19GVz15CisjIENPTkZJR19ORVRfQ0xTX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JTVlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19SU1ZQNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19JTkQ9eQorQ09ORklHX05FVF9TQ0hfRklGTz15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1BMQVRGT1JNPXkKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKKyMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIEkvTworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0tHREIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPXkKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKaW5kZXggZjY4NzQzZC4uMzBmNWVlNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKQEAgLTEsOSArMSwxMCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxLXJjMwotIyBUaHUgTWFyIDE1IDE0OjA2OjIwIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzMKKyMgVGh1IEZlYiAyOCAxMDoxODowNCAyMDA4CiAjCiBDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19CVUc9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0xMSwzOCArMTIsNDQgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwogIyBHZW5lcmFsIHNldHVwCiAjCisjIENPTkZJR19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKQEAgLTUyLDMxICs1OSwzNiBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCkBAIC05MSw2OCArMTAzLDI3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSB0eXBlCiAjCi1DT05GSUdfU09MVVRJT05fRU5HSU5FPXkKLSMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfNzc4MF9TT0xVVElPTl9FTkdJTkU9eQotIyBDT05GSUdfU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzM0M19TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIXzc3NTFfU1lTVEVNSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TQVRVUk4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfRFJFQU1DQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0gwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzEwVk9JUEdXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAotIyBDT05GSUdfU0hfSElHSExBTkRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9FRE9TSzc3MDUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAotIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0hNSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzYxOV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfVU5LTk9XTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHNlbGVjdGlvbgotIwogQ09ORklHX0NQVV9TSDQ9eQogQ09ORklHX0NQVV9TSDRBPXkKLQotIwotIyBTSC0yIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKLQotIwotIyBTSC0yQSBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0gtNCBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTE2MSw1MiArMTMyLDU4IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLQotIwotIyBTVDQwIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwR1gxIGlzIG5vdCBzZXQKLQotIwotIyBTSC00QSBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfUVVJQ0tMSVNUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKLUNPTkZJR18zMkJJVD15CitDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfU0hfT0NSQU0gaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgZmVhdHVyZXMKQEAgLTIxNCwyMCArMTkxLDI5IEBACiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1NIX0ZQVT15Ci0jIENPTkZJR19TSF9EU1AgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0lOVEVWVD15Ci1DT05GSUdfQ1BVX0hBU19JTlRDMl9JUlE9eQotQ09ORklHX0NQVV9IQVNfSU5UQ19JUlE9eQogQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCitDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKK0NPTkZJR19TSF83NzgwX1NPTFVUSU9OX0VOR0lORT15CisjIENPTkZJR19TSF9TREs3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0hJR0hMQU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVE1VPXkKIENPTkZJR19TSF9USU1FUl9JUlE9MjgKLSMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCkBAIC0yNDIsNyArMjI4LDYgQEAKICMKICMgQ29tcGFuaW9uIENoaXBzCiAjCi0jIENPTkZJR19IRDY0NDZYX1NFUklFUyBpcyBub3Qgc2V0CiAKICMKICMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKQEAgLTI1OCw0MCArMjQzLDM2IEBACiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCi0jIENPTkZJR19TTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19HVVNBPXkKIAogIwogIyBCb290IG9wdGlvbnMKICMKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MTAwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLjExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwogIyBCdXMgb3B0aW9ucwogIworIyBDT05GSUdfQ0ZfRU5BQkxFUiBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX1BDSV9BVVRPPXkKIENPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTMwMiw3ICsyODMsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzI5LDYgKzMwOSw3IEBACiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0zNDksMTYgKzMzMCwxMyBAQAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAogIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTM2Niw5ICszNDQsMTggQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM4MCwxNSArMzY3LDcgQEAKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CkBAIC00MDcsNiArMzg2LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00MzcsMTMgKzQxNywxMyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JPTT15CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2MSwzMSArNDQxLDE1IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CkBAIC00OTcsMTUgKzQ2MSwxMiBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIworQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC01MTMsNiArNDc0LDcgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNTMzLDYgKzQ5NSw3IEBACiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC01NDAsMTIgKzUwMyw5IEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKQEAgLTU1NSw3ICs1MTUsNiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKQEAgLTU2Niw2ICs1MjUsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTc3LDEwICs1MzcsNiBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CkBAIC01OTcsNjIgKzU1Myw0OCBAQAogIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBBbiBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eQorIwogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15CiAKICMKQEAgLTY2Niw4NSArNjA4LDU5IEBACiAjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfU01TQ19QSFk9eQogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgV2lyZWxlc3MgTEFOCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIAogIwotIyBXYW4gaW50ZXJmYWNlcworIyBVU0IgTmV0d29yayBBZGFwdGVycwogIworIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CkBAIC03NTIsMTUgKzY2OCw3IEBACiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY4LDYgKzY3Niw3IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NzcsNyArNjg2LDYgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03ODcsNiArNjk1LDcgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtODIxLDMxICs3MzAsMTIgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCitDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCkBAIC04NTMsMTggKzc0MywyNyBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtODc1LDIzICs3NzQsMjcgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtODk5LDE0ICs4MDIsMTMgQEAKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiAKICMKLSMgRnJhbWJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCiAjCiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9FUFNPTjEzNTUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldApAQCAtOTIwLDIyICs4MjIsMjcgQEAKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CkBAIC05NTgsMzkgKzg2NSwzOCBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLSMgQ09ORklHX09CU09MRVRFX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9JQ0ggaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKK0NPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldApAQCAtOTk4LDYgKzkwNCw3IEBACiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEwMTUsNDkgKzkyMiwyMCBAQAogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCiAjCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNzgsNjcgKzk1NiwxNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBVc2Vyc3BhY2UgSS9PCiAjCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTE1MSwxMiArOTc5LDExIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTExODEsMTQgKzEwMDgsMTQgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci0jIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19QUk9DX1NZU0NUTD15Ci0jIENPTkZJR19TWVNGUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTE5NywxNCArMTAyNCwxMyBAQAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldApAQCAtMTIyNSwxMCArMTA1MSw2IEBACiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKQEAgLTEyNzUsMTMgKzEwOTcsMTUgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKQEAgLTEyOTAsMTEgKzExMTQsNDggQEAKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMzAyLDkgKzExNjMsMTIgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcxMHZvaXBnd19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwppbmRleCA5MzgwYzMyLi4zN2U0OWE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwpAQCAtMSw0MCArMSw1NSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4Ci0jIFR1ZSBPY3QgIDMgMTI6NDg6NTYgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI1LXJjNAorIyBUaHUgTWFyICA2IDE2OjAyOjI5IDIwMDgKICMKIENPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CkBAIC00NiwzMyArNjEsMzkgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CitDT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfSEFWRV9LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1JFVFBST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19USU5ZX1NITUVNPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTg2LDU5ICsxMDcsMjYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIHR5cGUKICMKLSMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzAwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzQzX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0hQNlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0VDMzEwNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TQVRVUk4gaXMgbm90IHNldAotIyBDT05GSUdfU0hfRFJFQU1DQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9NUEMxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX1NIMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAotIyBDT05GSUdfU0hfSFM3NzUxUlZPSVAgaXMgbm90IHNldAotQ09ORklHX1NIXzc3MTBWT0lQR1c9eQotIyBDT05GSUdfU0hfUlRTNzc1MVIyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9SNzc4MFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYgaXMgbm90IHNldAotIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9TSE1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc2VsZWN0aW9uCi0jCiBDT05GSUdfQ1BVX1NIMz15Ci0KLSMKLSMgU0gtMiBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0IGlzIG5vdCBzZXQKLQotIwotIyBTSC0zIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMD15Ci0KLSMKLSMgU0gtNCBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKQEAgLTE0Nyw2NSArMTM1LDg0IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKLQotIwotIyBTVDQwIFByb2Nlc3NvciBTdXBwb3J0Ci0jCi0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwR1gxIGlzIG5vdCBzZXQKLQotIwotIyBTSC00QSBQcm9jZXNzb3IgU3VwcG9ydAotIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAotCi0jCi0jIFNINEFMLURTUCBQcm9jZXNzb3IgU3VwcG9ydAotIwotIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKICMKK0NPTkZJR19RVUlDS0xJU1Q9eQogQ09ORklHX01NVT15CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwMDgwMDAwMAorQ09ORklHXzI5QklUPXkKIENPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAotIyBDT05GSUdfU0hfT0NSQU0gaXMgbm90IHNldAorQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CisjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgZmVhdHVyZXMKICMKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9GUFVfRU1VIGlzIG5vdCBzZXQKIENPTkZJR19TSF9EU1A9eQogIyBDT05GSUdfU0hfQURDIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0lOVEVWVD15CiBDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19EU1A9eQogCiAjCi0jIFRpbWVyIHN1cHBvcnQKKyMgQm9hcmQgc3VwcG9ydAorIworIyBDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTMyNzY4MDAwCisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTIyMCw1NiArMjI3LDUxIEBACiAjCiAjIENvbXBhbmlvbiBDaGlwcwogIwotIyBDT05GSUdfSEQ2NDQ2WF9TRVJJRVMgaXMgbm90IHNldAorCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBmZWF0dXJlcwogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX1RSQUNFPXkKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwogIwogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCiAjCi0jIENPTkZJR19QQ0kgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwotCi0jCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNzcsMTMgKzI3OSwxNCBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTMwMSwxNCArMzA0LDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMTYsNDQgKzMxOCwyNCBAQAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQogCiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz15Ci0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLSMgQ09ORklHX0lQX05GX0lSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RGVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQU1BTkRBIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9QUFRQPW0KLSMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2NiwxNCArMzQ4LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwogQ09ORklHX05FVF9TQ0hFRD15Ci1DT05GSUdfTkVUX1NDSF9DTEtfSklGRklFUz15Ci0jIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKIAogIwogIyBRdWV1ZWluZy9TY2hlZHVsaW5nCkBAIC0zODIsNiArMzU3LDcgQEAKICMgQ09ORklHX05FVF9TQ0hfSFRCIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfSEZTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX1BSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9SUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX1NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX1RFUUwgaXMgbm90IHNldApAQCAtMzg5LDcgKzM2NSw2IEBACiAjIENPTkZJR19ORVRfU0NIX0dSRUQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9EU01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9ORVRFTSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKIAogIwogIyBDbGFzc2lmaWNhdGlvbgpAQCAtNDA1LDIwICszODAsMzEgQEAKICMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfQ0xTX1JTVlAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0NMU19SU1ZQNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19QT0xJQ0U9eQogIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAotQ09ORklHX05FVF9FU1RJTUFUT1I9eQorQ09ORklHX05FVF9TQ0hfRklGTz15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDI3LDE5ICs0MTMsMTIgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CkBAIC00NTEsMTIgKzQzMCwxNCBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00ODIsNyArNDYzLDYgQEAKIENPTkZJR19NVERfUkFNPXkKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTUwNSw0MCArNDg1LDI1IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTU0NiwxMDQgKzUxMSw1OSBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogQ09ORklHX1BIT05FPXkKLSMgQ09ORklHX1BIT05FX0lYSiBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTY1Myw2ICs1NzMsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC02ODQsMzUgKzYwNSwxMSBAQAogIyBDT05GSUdfVU5JWDk4X1BUWVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwpAQCAtNzIwLDExOSArNjE3LDg2IEBACiAjCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfVEhFUk1BTD15CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIwogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBVc2Vyc3BhY2UgSS9PCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTg2MSw3ICs3MjUsNiBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODc0LDI2ICs3MzcsMjYgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTkwMSw1NSArNzY0LDk3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiAjIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0dEQiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCmluZGV4IDVjMzM1OTcuLjcxZmYzZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwpAQCAtOTAsNyArOTAsNyBAQAogCiBzdGF0aWMgaW50IHNoX2RtYWNfcmVxdWVzdF9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWlmICh1bmxpa2VseSghY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpKQorCWlmICh1bmxpa2VseSghKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKSkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIHJlcXVlc3RfaXJxKGdldF9kbXRlX2lycShjaGFuLT5jaGFuKSwgZG1hX3RlaSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYyBiL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYwppbmRleCBiNzZhMTRmLi5hYjc3YjBlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2hlYXJ0YmVhdC5jCkBAIC05Myw3ICs5Myw3IEBACiAJfQogCiAJaGQtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7Ci0JaWYgKCF1bmxpa2VseShoZC0+YmFzZSkpIHsKKwlpZiAodW5saWtlbHkoIWhkLT5iYXNlKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CiAKIAkJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtZHJlYW1jYXN0LmMKaW5kZXggMGRhYzg3Yi4uZTEyODRmYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtZHJlYW1jYXN0LmMKQEAgLTgzLDkgKzgzLDkgQEAKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAogCXN3aXRjaCAoc2l6ZSkgewotCQljYXNlIDE6ICp2YWwgPSBjdHJsX2luYihHQVBTUENJX0JCQV9DT05GSUcrd2hlcmUpOyBicmVhazsKLQkJY2FzZSAyOiAqdmFsID0gY3RybF9pbncoR0FQU1BDSV9CQkFfQ09ORklHK3doZXJlKTsgYnJlYWs7Ci0JCWNhc2UgNDogKnZhbCA9IGN0cmxfaW5sKEdBUFNQQ0lfQkJBX0NPTkZJRyt3aGVyZSk7IGJyZWFrOworCQljYXNlIDE6ICp2YWwgPSBpbmIoR0FQU1BDSV9CQkFfQ09ORklHK3doZXJlKTsgYnJlYWs7CisJCWNhc2UgMjogKnZhbCA9IGludyhHQVBTUENJX0JCQV9DT05GSUcrd2hlcmUpOyBicmVhazsKKwkJY2FzZSA0OiAqdmFsID0gaW5sKEdBUFNQQ0lfQkJBX0NPTkZJRyt3aGVyZSk7IGJyZWFrOwogCX0JCiAKICAgICAgICAgcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKQEAgLTk3LDkgKzk3LDkgQEAKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAogCXN3aXRjaCAoc2l6ZSkgewotCQljYXNlIDE6IGN0cmxfb3V0YigoIHU4KXZhbCwgR0FQU1BDSV9CQkFfQ09ORklHK3doZXJlKTsgYnJlYWs7Ci0JCWNhc2UgMjogY3RybF9vdXR3KCh1MTYpdmFsLCBHQVBTUENJX0JCQV9DT05GSUcrd2hlcmUpOyBicmVhazsKLQkJY2FzZSA0OiBjdHJsX291dGwoKHUzMil2YWwsIEdBUFNQQ0lfQkJBX0NPTkZJRyt3aGVyZSk7IGJyZWFrOworCQljYXNlIDE6IG91dGIoKCB1OCl2YWwsIEdBUFNQQ0lfQkJBX0NPTkZJRyt3aGVyZSk7IGJyZWFrOworCQljYXNlIDI6IG91dHcoKHUxNil2YWwsIEdBUFNQQ0lfQkJBX0NPTkZJRyt3aGVyZSk7IGJyZWFrOworCQljYXNlIDQ6IG91dGwoKHUzMil2YWwsIEdBUFNQQ0lfQkJBX0NPTkZJRyt3aGVyZSk7IGJyZWFrOwogCX0KIAogICAgICAgICByZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwpAQCAtMTI3LDM2ICsxMjcsMzYgQEAKIAkgKi8KIAogCWZvciAoaT0wOyBpPDE2OyBpKyspCi0JCWlkYnVmW2ldID0gY3RybF9pbmIoR0FQU1BDSV9SRUdTK2kpOworCQlpZGJ1ZltpXSA9IGluYihHQVBTUENJX1JFR1MraSk7CiAKIAlpZiAoc3RybmNtcChpZGJ1ZiwgIkdBUFNQQ0lfQlJJREdFXzIiLCAxNikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY3RybF9vdXRsKDB4NWExNGE1MDEsIEdBUFNQQ0lfUkVHUysweDE4KTsKKwlvdXRsKDB4NWExNGE1MDEsIEdBUFNQQ0lfUkVHUysweDE4KTsKIAogCWZvciAoaT0wOyBpPDEwMDAwMDA7IGkrKykKIAkJOwogCi0JaWYgKGN0cmxfaW5sKEdBUFNQQ0lfUkVHUysweDE4KSAhPSAxKQorCWlmIChpbmwoR0FQU1BDSV9SRUdTKzB4MTgpICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3RybF9vdXRsKDB4MDEwMDAwMDAsIEdBUFNQQ0lfUkVHUysweDIwKTsKLQljdHJsX291dGwoMHgwMTAwMDAwMCwgR0FQU1BDSV9SRUdTKzB4MjQpOworCW91dGwoMHgwMTAwMDAwMCwgR0FQU1BDSV9SRUdTKzB4MjApOworCW91dGwoMHgwMTAwMDAwMCwgR0FQU1BDSV9SRUdTKzB4MjQpOwogCi0JY3RybF9vdXRsKEdBUFNQQ0lfRE1BX0JBU0UsIEdBUFNQQ0lfUkVHUysweDI4KTsKLQljdHJsX291dGwoR0FQU1BDSV9ETUFfQkFTRStHQVBTUENJX0RNQV9TSVpFLCBHQVBTUENJX1JFR1MrMHgyYyk7CisJb3V0bChHQVBTUENJX0RNQV9CQVNFLCBHQVBTUENJX1JFR1MrMHgyOCk7CisJb3V0bChHQVBTUENJX0RNQV9CQVNFK0dBUFNQQ0lfRE1BX1NJWkUsIEdBUFNQQ0lfUkVHUysweDJjKTsKIAotCWN0cmxfb3V0bCgxLCBHQVBTUENJX1JFR1MrMHgxNCk7Ci0JY3RybF9vdXRsKDEsIEdBUFNQQ0lfUkVHUysweDM0KTsKKwlvdXRsKDEsIEdBUFNQQ0lfUkVHUysweDE0KTsKKwlvdXRsKDEsIEdBUFNQQ0lfUkVHUysweDM0KTsKIAogCS8qIFNldHRpbmcgQnJvYWRiYW5kIEFkYXB0ZXIgKi8KLQljdHJsX291dHcoMHhmOTAwLCBHQVBTUENJX0JCQV9DT05GSUcrMHgwNik7Ci0JY3RybF9vdXRsKDB4MDAwMDAwMDAsIEdBUFNQQ0lfQkJBX0NPTkZJRysweDMwKTsKLQljdHJsX291dGIoMHgwMCwgR0FQU1BDSV9CQkFfQ09ORklHKzB4M2MpOwotCWN0cmxfb3V0YigweGYwLCBHQVBTUENJX0JCQV9DT05GSUcrMHgwZCk7Ci0JY3RybF9vdXR3KDB4MDAwNiwgR0FQU1BDSV9CQkFfQ09ORklHKzB4MDQpOwotCWN0cmxfb3V0bCgweDAwMDAyMDAxLCBHQVBTUENJX0JCQV9DT05GSUcrMHgxMCk7Ci0JY3RybF9vdXRsKDB4MDEwMDAwMDAsIEdBUFNQQ0lfQkJBX0NPTkZJRysweDE0KTsKKwlvdXR3KDB4ZjkwMCwgR0FQU1BDSV9CQkFfQ09ORklHKzB4MDYpOworCW91dGwoMHgwMDAwMDAwMCwgR0FQU1BDSV9CQkFfQ09ORklHKzB4MzApOworCW91dGIoMHgwMCwgR0FQU1BDSV9CQkFfQ09ORklHKzB4M2MpOworCW91dGIoMHhmMCwgR0FQU1BDSV9CQkFfQ09ORklHKzB4MGQpOworCW91dHcoMHgwMDA2LCBHQVBTUENJX0JCQV9DT05GSUcrMHgwNCk7CisJb3V0bCgweDAwMDAyMDAxLCBHQVBTUENJX0JCQV9DT05GSUcrMHgxMCk7CisJb3V0bCgweDAxMDAwMDAwLCBHQVBTUENJX0JCQV9DT05GSUcrMHgxNCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKaW5kZXggMDdlMjk1MC4uYTgzZGNmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKQEAgLTE1LDggKzE1LDYgQEAKICNkZWZpbmUgUENJX1BST0JFX0JJT1MJCTEKICNkZWZpbmUgUENJX1BST0JFX0NPTkYxCQkyCiAjZGVmaW5lIFBDSV9QUk9CRV9DT05GMgkJNAotI2RlZmluZSBQQ0lfTk9fU09SVAkJMHgxMDAKLSNkZWZpbmUgUENJX0JJT1NfU09SVAkJMHgyMDAKICNkZWZpbmUgUENJX05PX0NIRUNLUwkJMHg0MDAKICNkZWZpbmUgUENJX0FTU0lHTl9ST01TCQkweDEwMDAKICNkZWZpbmUgUENJX0JJT1NfSVJRX1NDQU4JMHgyMDAwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMiBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCmluZGV4IDYyYmYzNzMuLjRiYmRjZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzMyCkBAIC01LDcgKzUsNyBAQAogZXh0cmEteQk6PSBoZWFkXzMyLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKIAogb2JqLXkJOj0gZGVidWd0cmFwcy5vIGlvLm8gaW9fZ2VuZXJpYy5vIGlycS5vIG1hY2h2ZWMubyBwcm9jZXNzXzMyLm8gXAotCSAgIHB0cmFjZV8zMi5vIHNlbWFwaG9yZS5vIHNldHVwLm8gc2lnbmFsXzMyLm8gc3lzX3NoLm8gc3lzX3NoMzIubyBcCisJICAgcHRyYWNlXzMyLm8gc2V0dXAubyBzaWduYWxfMzIubyBzeXNfc2gubyBzeXNfc2gzMi5vIFwKIAkgICBzeXNjYWxsc18zMi5vIHRpbWVfMzIubyB0b3BvbG9neS5vIHRyYXBzLm8gdHJhcHNfMzIubwogCiBvYmoteQkJCQkrPSBjcHUvIHRpbWVycy8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzY0IGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKaW5kZXggZTAxMjgzZC4uNmVkZjUzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKQEAgLTEsNyArMSw3IEBACiBleHRyYS15CTo9IGhlYWRfNjQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteQk6PSBkZWJ1Z3RyYXBzLm8gaW8ubyBpb19nZW5lcmljLm8gaXJxLm8gbWFjaHZlYy5vIHByb2Nlc3NfNjQubyBcCi0JICAgcHRyYWNlXzY0Lm8gc2VtYXBob3JlLm8gc2V0dXAubyBzaWduYWxfNjQubyBzeXNfc2gubyBzeXNfc2g2NC5vIFwKKwkgICBwdHJhY2VfNjQubyBzZXR1cC5vIHNpZ25hbF82NC5vIHN5c19zaC5vIHN5c19zaDY0Lm8gXAogCSAgIHN5c2NhbGxzXzY0Lm8gdGltZV82NC5vIHRvcG9sb2d5Lm8gdHJhcHMubyB0cmFwc182NC5vCiAKIG9iai15CQkJCSs9IGNwdS8gdGltZXJzLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY2YtZW5hYmxlci5jIGIvYXJjaC9zaC9rZXJuZWwvY2YtZW5hYmxlci5jCmluZGV4IDFjM2I5OTYuLjAxZmY0ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NmLWVuYWJsZXIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jZi1lbmFibGVyLmMKQEAgLTgzLDYgKzgzLDggQEAKICNpbmNsdWRlIDxhc20vc2UuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX1NIXzc3MjJfU09MVVRJT05fRU5HSU5FKQogI2luY2x1ZGUgPGFzbS9zZTc3MjIuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIXzc3MjFfU09MVVRJT05fRU5HSU5FKQorI2luY2x1ZGUgPGFzbS9zZTc3MjEuaD4KICNlbmRpZgogCiAvKgpAQCAtOTksNyArMTAxLDkgQEAKICAqIDB4QjA2MDAwMDAgOiBJL08KICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FKSB8fCBkZWZpbmVkKENPTkZJR19TSF83NzIyX1NPTFVUSU9OX0VOR0lORSkgCisjaWYgZGVmaW5lZChDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfU0hfNzcyMl9TT0xVVElPTl9FTkdJTkUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19TSF83NzIxX1NPTFVUSU9OX0VOR0lORSkKIHN0YXRpYyBpbnQgX19pbml0IGNmX2luaXRfc2Uodm9pZCkKIHsKIAlpZiAoKGN0cmxfaW53KE1SU0hQQ19DU1IpICYgMHgwMDBjKSAhPSAwKQpAQCAtMTEyLDcgKzExNiw3IEBACiAJfQogCiAJLyoKLQkgKiAgUEMtQ2FyZCB3aW5kb3cgb3BlbiAKKwkgKiAgUEMtQ2FyZCB3aW5kb3cgb3BlbgogCSAqICBmbGFnID09IENPTU1PTi9BVFRSSUJVVEUvSU8KIAkgKi8KIAkvKiBjb21tb24gd2luZG93IG9wZW4gKi8KQEAgLTEyMiw3ICsxMjYsNyBAQAogCQljdHJsX291dHcoMHgwYjAwLCBNUlNIUENfTVcwQ1IyKTsKIAllbHNlCiAJCS8qIGNvbW1vbiBtb2RlICYgYnVzIHdpZHRoIDE2Yml0IFNXQVAgPSAwKi8KLQkJY3RybF9vdXR3KDB4MDMwMCwgTVJTSFBDX01XMENSMik7IAorCQljdHJsX291dHcoMHgwMzAwLCBNUlNIUENfTVcwQ1IyKTsKIAogCS8qIGF0dHJpYnV0ZSB3aW5kb3cgb3BlbiAqLwogCWN0cmxfb3V0dygweDhhODUsIE1SU0hQQ19NVzFDUjEpOwpAQCAtMTU1LDEwICsxNTksOSBAQAogCiBpbnQgX19pbml0IGNmX2luaXQodm9pZCkKIHsKLQlpZiggbWFjaF9pc19zZSgpIHx8IG1hY2hfaXNfNzcyMnNlKCkgKXsKKwlpZiAobWFjaF9pc19zZSgpIHx8IG1hY2hfaXNfNzcyMnNlKCkgfHwgbWFjaF9pc183NzIxc2UoKSkKIAkJcmV0dXJuIGNmX2luaXRfc2UoKTsKLQl9Ci0JCisKIAlyZXR1cm4gY2ZfaW5pdF9kZWZhdWx0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCmluZGV4IDgwYTMxMzIuLjc1ZmIwM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAgKiBhbmQgY2FjaGUgY29uZmlndXJhdGlvbiBpbiBkZXRlY3RfY3B1X2FuZF9jYWNoZV9zeXN0ZW0oKS4KICAqLwogCi1hc21saW5rYWdlIHZvaWQgX19jcHVpbml0IHNoX2NwdV9pbml0KHZvaWQpCithc21saW5rYWdlIHZvaWQgX19pbml0IHNoX2NwdV9pbml0KHZvaWQpCiB7CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9lbnRyeS5TCmluZGV4IDdhMjY1NjkuLjBmYzg5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2VudHJ5LlMKQEAgLTI2Nyw3ICsyNjcsNiBAQAogCiBFTlRSWShhZGRyZXNzX2Vycm9yX3RyYXBfaGFuZGxlcikKIAltb3YJcjE1LHI0CQkJCSEgcmVncwotCWFkZAkjNCxyNAogCW1vdgkjT0ZGX1BDLHIwCiAJbW92LmwJQChyMCxyMTUpLHI2CQkJISBwYwogCW1vdi5sCTFmLHIwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwppbmRleCBiMjMwZWIyLi5jYzUzMGY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKaW5kZXggYjI3OWNkYy4uN2UyYjkwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBACiAKIG9iai0kKENPTkZJR19TSF9GUFUpCSs9IGZwdS5vCiAKLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYpICs9IHNldHVwLXNoNzIwNi5vIGNsb2NrLXNoNzIwNi5vCi1vYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKSArPSBzZXR1cC1zaDcyMDMubyBjbG9jay1zaDcyMDMubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MykgKz0gc2V0dXAtc2g3MjAzLm8gY2xvY2stc2g3MjAzLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYpCSs9IHNldHVwLXNoNzIwNi5vIGNsb2NrLXNoNzIwNi5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKQkrPSBzZXR1cC1zaDcyMDMubyBjbG9jay1zaDcyMDMubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MykJKz0gc2V0dXAtc2g3MjAzLm8gY2xvY2stc2g3MjAzLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9NWEcpCQkrPSBzZXR1cC1teGcubyBjbG9jay1zaDcyMDYubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYwppbmRleCAzZmViOTVhNC4uZmI3ODEzMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlIDxhc20vZnJlcS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1jb25zdCBzdGF0aWMgaW50IHBsbDFyYXRlW109ezgsMTIsMTYsMH07Ci1jb25zdCBzdGF0aWMgaW50IHBmY19kaXZpc29yc1tdPXsxLDIsMyw0LDYsOCwxMn07CitzdGF0aWMgY29uc3QgaW50IHBsbDFyYXRlW109ezgsMTIsMTYsMH07CitzdGF0aWMgY29uc3QgaW50IHBmY19kaXZpc29yc1tdPXsxLDIsMyw0LDYsOCwxMn07CiAjZGVmaW5lIGlmY19kaXZpc29ycyBwZmNfZGl2aXNvcnMKIAogI2lmIChDT05GSUdfU0hfQ0xLX01EID09IDApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCmluZGV4IGZmOTk1NjIuLjU2MjdjMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KIAogLyogVGhlIFBSIChwcmVjaXNpb24pIGJpdCBpbiB0aGUgRlAgU3RhdHVzIFJlZ2lzdGVyIG11c3QgYmUgY2xlYXIgd2hlbgogICogYW4gZnJjaGcgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQsIG90aGVyd2lzZSB0aGUgaW5zdHJ1Y3Rpb24gaXMgdW5kZWZpbmVkLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Byb2JlLmMKaW5kZXggNjkxMGUyNi4uNmU3OTEzMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9wcm9iZS5jCkBAIC0yOSw2ICsyOSw5IEBACiAJYm9vdF9jcHVfZGF0YS50eXBlCQkJPSBDUFVfU0g3MjA2OwogCS8qIFdoaWxlIFNINzIwNiBoYXMgYSBEU1AuLiAqLwogCWJvb3RfY3B1X2RhdGEuZmxhZ3MJCQl8PSBDUFVfSEFTX0RTUDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX01YRykKKwlib290X2NwdV9kYXRhLnR5cGUJCQk9IENQVV9NWEc7CisJYm9vdF9jcHVfZGF0YS5mbGFncwkJCXw9IENQVV9IQVNfRFNQOwogI2VuZGlmCiAKIAlib290X2NwdV9kYXRhLmRjYWNoZS53YXlzCQk9IDQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MTFkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYwpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIFJlbmVzYXMgTVgtRyAoUjhBMDMwMjJCRykgU2V0dXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgorCitlbnVtIHsKKwlVTlVTRUQgPSAwLAorCisJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KKwlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAorCUlSUTgsIElSUTksIElSUTEwLCBJUlExMSwgSVJRMTIsIElSUTEzLCBJUlExNCwgSVJRMTUsCisKKwlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCisKKwlTSU5UOCwgU0lOVDcsIFNJTlQ2LCBTSU5UNSwgU0lOVDQsIFNJTlQzLCBTSU5UMiwgU0lOVDEsCisKKwlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCisJU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAorCisJTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKKwlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAorCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCisJTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKKwlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAorCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCisJTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VywKKworCS8qIGludGVycnVwdCBncm91cHMgKi8KKwlQSU5ULCBTQ0lGMCwgU0NJRjEsCisJTVRVMl9HUk9VUDEsIE1UVTJfR1JPVVAyLCBNVFUyX0dST1VQMywgTVRVMl9HUk9VUDQsIE1UVTJfR1JPVVA1Cit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX0lSUShJUlEwLCA2NCksIElOVENfSVJRKElSUTEsIDY1KSwKKwlJTlRDX0lSUShJUlEyLCA2NiksIElOVENfSVJRKElSUTMsIDY3KSwKKwlJTlRDX0lSUShJUlE0LCA2OCksIElOVENfSVJRKElSUTUsIDY5KSwKKwlJTlRDX0lSUShJUlE2LCA3MCksIElOVENfSVJRKElSUTcsIDcxKSwKKwlJTlRDX0lSUShJUlE4LCA3MiksIElOVENfSVJRKElSUTksIDczKSwKKwlJTlRDX0lSUShJUlExMCwgNzQpLCBJTlRDX0lSUShJUlExMSwgNzUpLAorCUlOVENfSVJRKElSUTEyLCA3NiksIElOVENfSVJRKElSUTEzLCA3NyksCisJSU5UQ19JUlEoSVJRMTQsIDc4KSwgSU5UQ19JUlEoSVJRMTUsIDc5KSwKKworCUlOVENfSVJRKFBJTlQwLCA4MCksIElOVENfSVJRKFBJTlQxLCA4MSksCisJSU5UQ19JUlEoUElOVDIsIDgyKSwgSU5UQ19JUlEoUElOVDMsIDgzKSwKKwlJTlRDX0lSUShQSU5UNCwgODQpLCBJTlRDX0lSUShQSU5UNSwgODUpLAorCUlOVENfSVJRKFBJTlQ2LCA4NiksIElOVENfSVJRKFBJTlQ3LCA4NyksCisKKwlJTlRDX0lSUShTSU5UOCwgOTQpLCBJTlRDX0lSUShTSU5UNywgOTUpLAorCUlOVENfSVJRKFNJTlQ2LCA5NiksIElOVENfSVJRKFNJTlQ1LCA5NyksCisJSU5UQ19JUlEoU0lOVDQsIDk4KSwgSU5UQ19JUlEoU0lOVDMsIDk5KSwKKwlJTlRDX0lSUShTSU5UMiwgMTAwKSwgSU5UQ19JUlEoU0lOVDEsIDEwMSksCisKKwlJTlRDX0lSUShTQ0lGMF9SWEksIDIyMCksIElOVENfSVJRKFNDSUYwX1RYSSwgMjIxKSwKKwlJTlRDX0lSUShTQ0lGMF9CUkksIDIyMiksIElOVENfSVJRKFNDSUYwX0VSSSwgMjIzKSwKKwlJTlRDX0lSUShTQ0lGMV9SWEksIDIyNCksIElOVENfSVJRKFNDSUYxX1RYSSwgMjI1KSwKKwlJTlRDX0lSUShTQ0lGMV9CUkksIDIyNiksIElOVENfSVJRKFNDSUYxX0VSSSwgMjI3KSwKKworCUlOVENfSVJRKE1UVTJfVEdJMEEsIDIyOCksIElOVENfSVJRKE1UVTJfVEdJMEIsIDIyOSksCisJSU5UQ19JUlEoTVRVMl9UR0kwQywgMjMwKSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMjMxKSwKKwlJTlRDX0lSUShNVFUyX1RDSTBWLCAyMzIpLCBJTlRDX0lSUShNVFUyX1RHSTBFLCAyMzMpLAorCisJSU5UQ19JUlEoTVRVMl9UR0kwRiwgMjM0KSwgSU5UQ19JUlEoTVRVMl9UR0kxQSwgMjM1KSwKKwlJTlRDX0lSUShNVFUyX1RHSTFCLCAyMzYpLCBJTlRDX0lSUShNVFUyX1RDSTFWLCAyMzcpLAorCUlOVENfSVJRKE1UVTJfVENJMVUsIDIzOCksIElOVENfSVJRKE1UVTJfVEdJMkEsIDIzOSksCisKKwlJTlRDX0lSUShNVFUyX1RHSTJCLCAyNDApLCBJTlRDX0lSUShNVFUyX1RDSTJWLCAyNDEpLAorCUlOVENfSVJRKE1UVTJfVENJMlUsIDI0MiksIElOVENfSVJRKE1UVTJfVEdJM0EsIDI0MyksCisKKwlJTlRDX0lSUShNVFUyX1RHSTNCLCAyNDQpLAorCUlOVENfSVJRKE1UVTJfVEdJM0MsIDI0NSksCisKKwlJTlRDX0lSUShNVFUyX1RHSTNELCAyNDYpLCBJTlRDX0lSUShNVFUyX1RDSTNWLCAyNDcpLAorCUlOVENfSVJRKE1UVTJfVEdJNEEsIDI0OCksIElOVENfSVJRKE1UVTJfVEdJNEIsIDI0OSksCisJSU5UQ19JUlEoTVRVMl9UR0k0QywgMjUwKSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMjUxKSwKKworCUlOVENfSVJRKE1UVTJfVENJNFYsIDI1MiksIElOVENfSVJRKE1UVTJfVEdJNVUsIDI1MyksCisJSU5UQ19JUlEoTVRVMl9UR0k1ViwgMjU0KSwgSU5UQ19JUlEoTVRVMl9UR0k1VywgMjU1KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0geworCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCisJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKKwlJTlRDX0dST1VQKE1UVTJfR1JPVVAxLCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBELAorCQkgICBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFKSwKKwlJTlRDX0dST1VQKE1UVTJfR1JPVVAyLCBNVFUyX1RHSTBGLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLAorCQkgICBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLCBNVFUyX1RHSTJBKSwKKwlJTlRDX0dST1VQKE1UVTJfR1JPVVAzLCBNVFUyX1RHSTJCLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVLAorCQkgICBNVFUyX1RHSTNBKSwKKwlJTlRDX0dST1VQKE1UVTJfR1JPVVA0LCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLCBNVFUyX1RHSTRBLAorCQkgICBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTREKSwKKwlJTlRDX0dST1VQKE1UVTJfR1JPVVA1LCBNVFUyX1RDSTRWLCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKKwlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAorCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZmZkOTQxOCwgMCwgMTYsIDQsIC8qIElQUjAxICovIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMyB9IH0sCisJeyAweGZmZmQ5NDFhLCAwLCAxNiwgNCwgLyogSVBSMDIgKi8geyBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKKwl7IDB4ZmZmZDk0MWMsIDAsIDE2LCA0LCAvKiBJUFIwMyAqLyB7IElSUTgsIElSUTksIElSUTEwLCBJUlExMSB9IH0sCisJeyAweGZmZmQ5NDFlLCAwLCAxNiwgNCwgLyogSVBSMDQgKi8geyBJUlExMiwgSVJRMTMsIElSUTE0LCBJUlExNSB9IH0sCisJeyAweGZmZmQ5NDIwLCAwLCAxNiwgNCwgLyogSVBSMDUgKi8geyBQSU5ULCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZmZDk4MDAsIDAsIDE2LCA0LCAvKiBJUFIwNiAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MDIsIDAsIDE2LCA0LCAvKiBJUFIwNyAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MDQsIDAsIDE2LCA0LCAvKiBJUFIwOCAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MDYsIDAsIDE2LCA0LCAvKiBJUFIwOSAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MDgsIDAsIDE2LCA0LCAvKiBJUFIxMCAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MGEsIDAsIDE2LCA0LCAvKiBJUFIxMSAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MGMsIDAsIDE2LCA0LCAvKiBJUFIxMiAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MGUsIDAsIDE2LCA0LCAvKiBJUFIxMyAqLyB7IH0gfSwKKwl7IDB4ZmZmZDk4MTAsIDAsIDE2LCA0LCAvKiBJUFIxNCAqLyB7IDAsIDAsIDAsIFNDSUYwIH0gfSwKKwl7IDB4ZmZmZDk4MTIsIDAsIDE2LCA0LCAvKiBJUFIxNSAqLworCQl7IFNDSUYxLCBNVFUyX0dST1VQMSwgTVRVMl9HUk9VUDIsIE1UVTJfR1JPVVAzIH0gfSwKKwl7IDB4ZmZmZDk4MTQsIDAsIDE2LCA0LCAvKiBJUFIxNiAqLworCQl7IE1UVTJfVEdJM0IsIE1UVTJfVEdJM0MsIE1UVTJfR1JPVVA0LCBNVFUyX0dST1VQNSB9IH0sCit9OworCitzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZmZkOTQwOCwgMCwgMTYsIC8qIFBJTlRFUiAqLworCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICBQSU5UNywgUElOVDYsIFBJTlQ1LCBQSU5UNCwgUElOVDMsIFBJTlQyLCBQSU5UMSwgUElOVDAgfSB9LAorfTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgIm14ZyIsIHZlY3RvcnMsIGdyb3VwcywKKwkJCSBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZjgwNDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgMjIzLCAyMjAsIDIyMSwgMjIyIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXhnX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhnX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMobXhnX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUobXhnX2RldmljZXMpKTsKK30KK19faW5pdGNhbGwobXhnX2RldmljZXNfc2V0dXApOworCit2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQoreworCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMKaW5kZXggZGI2ZWY1Yy4uZTk4ZGM0NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKaW5kZXggYTU2NDQyNS4uZTZkNGVjNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYwppbmRleCBmY2M4MGJiLi4xMGYyYTc2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCkBAIC05NCw5ICs5NCw5IEBACiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTMpOwogCQlib290X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrCT0gMHgxZmYwOwogCQlib290X2NwdV9kYXRhLmRjYWNoZS5zZXRzCT0gNTEyOwotCQljdHJsX291dGwoQ0NSX0NBQ0hFXzMyS0IsIENDUjMpOworCQljdHJsX291dGwoQ0NSX0NBQ0hFXzMyS0IsIENDUjNfUkVHKTsKICNlbHNlCi0JCWN0cmxfb3V0bChDQ1JfQ0FDSEVfMTZLQiwgQ0NSMyk7CisJCWN0cmxfb3V0bChDQ1JfQ0FDSEVfMTZLQiwgQ0NSM19SRUcpOwogI2VuZGlmCiAjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYwppbmRleCBkZDBhMjBhLi5mNTgxNTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKaW5kZXggOTY5ODA0Yi4uZDM3MzNiMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKQEAgLTEyMywxNSArMTIzLDE1IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0JewotCQkuc3RhcnQgID0gMjAsCisJCS5zdGFydCAgPSAyMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIAlbMl0gPQl7Ci0JCS5zdGFydAk9IDIxLAorCQkuc3RhcnQJPSAyMiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIAlbM10gPQl7Ci0JCS5zdGFydAk9IDIyLAorCQkuc3RhcnQJPSAyMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKaW5kZXggMGNjMGUyYi4uNzQwNmM5YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGFzbS9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCmluZGV4IDM4NTVlYTQuLjgwMjgwODIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogCiAjZGVmaW5lIElOVENfSUNSMQkweEE0MTQwMDEwVUwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCmluZGV4IDgxN2Y5OTMuLjgwMjA3OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHUvZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKIC8qIFRoZSBQUiAocHJlY2lzaW9uKSBiaXQgaW4gdGhlIEZQIFN0YXR1cyBSZWdpc3RlciBtdXN0IGJlIGNsZWFyIHdoZW4KICAqIGFuIGZyY2hnIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkLCBvdGhlcndpc2UgdGhlIGluc3RydWN0aW9uIGlzIHVuZGVmaW5lZC4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCA5ZTg5OTg0Li5lYmNlYjBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC01Myw3ICs1Myw3IEBACiAJLyoKIAkgKiBTZXR1cCBzb21lIGdlbmVyaWMgZmxhZ3Mgd2UgY2FuIHByb2JlIG9uIFNILTRBIHBhcnRzCiAJICovCi0JaWYgKCgocHZyID4+IDE2KSAmIDB4ZmYpID09IDB4MTApIHsKKwlpZiAoKChwdnIgPj4gMjQpICYgMHhmZikgPT0gMHgxMCkgewogCQlpZiAoKGN2ciAmIDB4MTAwMDAwMDApID09IDApCiAJCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRFNQOwogCkBAIC0xMjYsMTcgKzEyNiwyMiBAQAogCQkJCQkgIENQVV9IQVNfTExTQzsKIAkJYnJlYWs7CiAJY2FzZSAweDMwMDg6Ci0JCWlmIChwcnIgPT0gMHhhMCB8fCBwcnIgPT0gMHhhMSkgewotCQkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzcyMjsKLQkJCWJvb3RfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OwotCQkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7Ci0JCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfTExTQzsKLQkJfQotCQllbHNlIGlmIChwcnIgPT0gMHg3MCkgeworCQlib290X2NwdV9kYXRhLmljYWNoZS53YXlzID0gNDsKKwkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CisJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19MTFNDOworCisJCXN3aXRjaCAocHJyKSB7CisJCWNhc2UgMHg1MDoKKwkJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3MjM7CisJCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19MMl9DQUNIRTsKKwkJCWJyZWFrOworCQljYXNlIDB4NzA6CiAJCQlib290X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3MzY2OwotCQkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7Ci0JCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKLQkJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19MTFNDOworCQkJYnJlYWs7CisJCWNhc2UgMHhhMDoKKwkJY2FzZSAweGExOgorCQkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzcyMjsKKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHg0MDAwOgkvKiAxc3QgY3V0ICovCkBAIC0yMTUsNiArMjIwLDEyIEBACiAJICogU0gtNEEncyBoYXZlIGFuIG9wdGlvbmFsIFBJUFQgTDIuCiAJICovCiAJaWYgKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0wyX0NBQ0hFKSB7CisJCS8qIEJ1ZyBpZiB3ZSBjYW4ndCBkZWNvZGUgdGhlIEwyIGluZm8gKi8KKwkJQlVHX09OKCEoY3ZyICYgMHhmKSk7CisKKwkJLyogU2lsaWNvbiBhbmQgc3BlY2lmaWNhdGlvbnMgaGF2ZSBjbGVhcmx5IG5ldmVyIG1ldC4uICovCisJCWN2ciBePSAweGY7CisKIAkJLyoKIAkJICogU2l6ZSBjYWxjdWxhdGlvbiBpcyBtdWNoIG1vcmUgc2Vuc2libGUKIAkJICogdGhhbiBpdCBpcyBmb3IgdGhlIEwxLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwppbmRleCBkYWIxOTMyLi43MzcxYWJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBhZTM2MDNhLi5lYzg4NDAzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwppbmRleCA4NWY4MTU3Li4yNTRjNWM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwppbmRleCA4MjUwZTAxLi45NTYxYjAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAogCWlmICh1bmxpa2VseSghbWFwKSkgewogCQlwcmludGsoIiVzOiBiYWQgc3RvcmUgcXVldWUgYWRkcmVzcyAweCUwOGx4XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCB2YWRkcik7CisJCSAgICAgICBfX2Z1bmNfXywgdmFkZHIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMzMsNyArMjMzLDcgQEAKIAkJdm1hID0gcmVtb3ZlX3ZtX2FyZWEoKHZvaWQgKikobWFwLT5zcV9hZGRyICYgUEFHRV9NQVNLKSk7CiAJCWlmICghdm1hKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgYWRkcmVzcyAweCUwOGx4XG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgbWFwLT5zcV9hZGRyKTsKKwkJCSAgICAgICBfX2Z1bmNfXywgbWFwLT5zcV9hZGRyKTsKIAkJCXJldHVybjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKaW5kZXggNWQ4OTBhYy4uYTg4MGU3OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQkrPSBzZXR1cC1zaDc3ODUubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJKz0gc2V0dXAtc2g3MzQzLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCSs9IHNldHVwLXNoNzcyMi5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQkrPSBzZXR1cC1zaDc3MjMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NikJKz0gc2V0dXAtc2g3MzY2Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQkJKz0gc2V0dXAtc2h4My5vCiAKQEAgLTIyLDYgKzIzLDcgQEAKIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gY2xvY2stc2g3Nzg1Lm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJOj0gY2xvY2stc2g3MzQzLm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJOj0gY2xvY2stc2g3NzIyLm8KK2Nsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykJOj0gY2xvY2stc2g3NzIyLm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NikJOj0gY2xvY2stc2g3NzIyLm8KIGNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCTo9IGNsb2NrLXNoeDMubwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCmluZGV4IGMwYTNmMDcuLjZkNGY1MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGFzbS9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKaW5kZXggOTY3ZThiNi4uZjI2YjVjZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCA3M2M3NzhkLi4wNjkzMTQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtMTAsMTkgKzEwLDE4IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KLSNpbmNsdWRlIDxhc20vc2NpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiZl9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5uYW1lCT0gIm02NjU5Ml91ZGMiLAotCQkuc3RhcnQJPSAweEE0NDgwMDAwLAotCQkuZW5kCT0gMHhBNDQ4MDBGRiwKKwkJLm5hbWUJPSAiVVNCRiIsCisJCS5zdGFydAk9IDB4MDQ0ODAwMDAsCisJCS5lbmQJPSAweDA0NDgwMEZGLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLm5hbWUJPSAibTY2NTkyX3VkYyIsCiAJCS5zdGFydAk9IDY1LAogCQkuZW5kCT0gNjUsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLApAQCAtNDAsNiArMzksMjYgQEAKIAkucmVzb3VyY2UJPSB1c2JmX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaWljX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSUlDIiwKKwkJLnN0YXJ0ICA9IDB4MDQ0NzAwMDAsCisJCS5lbmQgICAgPSAweDA0NDcwMDE3LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSA5NiwKKwkJLmVuZCAgICA9IDk5LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisgICAgICAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlpY19kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gImkyYy1zaF9tb2JpbGUiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaWljX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaWljX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtNzQsNiArOTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzIyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZ1c2JmX2RldmljZSwKKwkmaWljX2RldmljZSwKIAkmc2NpX2RldmljZSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5MjVjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMy5jCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogU0g3NzIzIFNldHVwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgorI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IDB4YTRlMzAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0ksCisJCS5pcnFzCQk9IHsgNTYsIDU2LCA1NiwgNTYgfSwKKwl9LHsKKwkJLm1hcGJhc2UJPSAweGE0ZTQwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJLAorCQkuaXJxcwkJPSB7IDg4LCA4OCwgODgsIDg4IH0sCisJfSx7CisJCS5tYXBiYXNlCT0gMHhhNGU1MDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSSwKKwkJLmlycXMJCT0geyAxMDksIDEwOSwgMTA5LCAxMDkgfSwKKwl9LCB7CisJCS5mbGFncyA9IDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhhNDY1ZmVjMCwKKwkJLmVuZAk9IDB4YTQ2NWZlYzAgKyAweDU4IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LAorCVsxXSA9IHsKKwkJLyogUGVyaW9kIElSUSAqLworCQkuc3RhcnQJPSA2OSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS8qIENhcnJ5IElSUSAqLworCQkuc3RhcnQJPSA3MCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbM10gPSB7CisJCS8qIEFsYXJtIElSUSAqLworCQkuc3RhcnQJPSA2OCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXJ0YyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydGNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBydGNfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyM19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKKwkmcnRjX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzcyM19kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzcyM19kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHNoNzcyM19kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNoNzcyM19kZXZpY2VzX3NldHVwKTsKKworZW51bSB7CisJVU5VU0VEPTAsCisKKwkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLworCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCisJSFVESSwKKwlETUFDMUFfREVJMCxETUFDMUFfREVJMSxETUFDMUFfREVJMixETUFDMUFfREVJMywKKwlfMkRHX1RSSSxfMkRHX0lOSSxfMkRHX0NFSSwKKwlETUFDMEFfREVJMCxETUFDMEFfREVJMSxETUFDMEFfREVJMixETUFDMEFfREVJMywKKwlWSU9fQ0VVSSxWSU9fQkVVSSxWSU9fVkVVMkhJLFZJT19WT1VJLAorCVNDSUZBX1NDSUZBMCwKKwlWUFVfVlBVSSwKKwlUUFVfVFBVSSwKKwlBRENfQURJLAorCVVTQl9VU0kwLAorCVJUQ19BVEksUlRDX1BSSSxSVENfQ1VJLAorCURNQUMxQl9ERUk0LERNQUMxQl9ERUk1LERNQUMxQl9EQURFUlIsCisJRE1BQzBCX0RFSTQsRE1BQzBCX0RFSTUsRE1BQzBCX0RBREVSUiwKKwlLRVlTQ19LRVlJLAorCVNDSUZfU0NJRjAsU0NJRl9TQ0lGMSxTQ0lGX1NDSUYyLAorCU1TSU9GX01TSU9GSTAsTVNJT0ZfTVNJT0ZJMSwKKwlTQ0lGQV9TQ0lGQTEsCisJRkxDVExfRkxTVEVJLEZMQ1RMX0ZMVEVOREksRkxDVExfRkxUUkVRMEksRkxDVExfRkxUUkVRMUksCisJSTJDX0FMSSxJMkNfVEFDS0ksSTJDX1dBSVRJLEkyQ19EVEVJLAorCVNESEkwX1NESElJMCxTREhJMF9TREhJSTEsU0RISTBfU0RISUkyLAorCUNNVF9DTVRJLAorCVRTSUZfVFNJRkksCisJU0lVX1NJVUksCisJU0NJRkFfU0NJRkEyLAorCVRNVTBfVFVOSTAsIFRNVTBfVFVOSTEsIFRNVTBfVFVOSTIsCisJSVJEQV9JUkRBSSwKKwlBVEFQSV9BVEFQSUksCisJU0RISTFfU0RISUkwLFNESEkxX1NESElJMSxTREhJMV9TREhJSTIsCisJVkVVMkgxX1ZFVTJISSwKKwlMQ0RDX0xDRENJLAorCVRNVTFfVFVOSTAsVE1VMV9UVU5JMSxUTVUxX1RVTkkyLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyAqLworCURNQUMxQSwgRE1BQzBBLCBWSU8sIERNQUMwQiwgRkxDVEwsIEkyQywgXzJERywKKwlTREhJMSwgUlRDLCBETUFDMUIsIFNESEkwLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSUTAsIDB4NjAwKSwgSU5UQ19WRUNUKElSUTEsIDB4NjIwKSwKKwlJTlRDX1ZFQ1QoSVJRMiwgMHg2NDApLCBJTlRDX1ZFQ1QoSVJRMywgMHg2NjApLAorCUlOVENfVkVDVChJUlE0LCAweDY4MCksIElOVENfVkVDVChJUlE1LCAweDZhMCksCisJSU5UQ19WRUNUKElSUTYsIDB4NmMwKSwgSU5UQ19WRUNUKElSUTcsIDB4NmUwKSwKKworCUlOVENfVkVDVChETUFDMUFfREVJMCwweDcwMCksCisJSU5UQ19WRUNUKERNQUMxQV9ERUkxLDB4NzIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFBX0RFSTIsMHg3NDApLAorCUlOVENfVkVDVChETUFDMUFfREVJMywweDc2MCksCisKKwlJTlRDX1ZFQ1QoXzJER19UUkksIDB4NzgwKSwKKwlJTlRDX1ZFQ1QoXzJER19JTkksIDB4N0EwKSwKKwlJTlRDX1ZFQ1QoXzJER19DRUksIDB4N0MwKSwKKworCUlOVENfVkVDVChETUFDMEFfREVJMCwweDgwMCksCisJSU5UQ19WRUNUKERNQUMwQV9ERUkxLDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBBX0RFSTIsMHg4NDApLAorCUlOVENfVkVDVChETUFDMEFfREVJMywweDg2MCksCisKKwlJTlRDX1ZFQ1QoVklPX0NFVUksMHg4ODApLAorCUlOVENfVkVDVChWSU9fQkVVSSwweDhBMCksCisJSU5UQ19WRUNUKFZJT19WRVUySEksMHg4QzApLAorCUlOVENfVkVDVChWSU9fVk9VSSwweDhFMCksCisKKwlJTlRDX1ZFQ1QoU0NJRkFfU0NJRkEwLDB4OTAwKSwKKwlJTlRDX1ZFQ1QoVlBVX1ZQVUksMHg5MjApLAorCUlOVENfVkVDVChUUFVfVFBVSSwweDlBMCksCisJSU5UQ19WRUNUKEFEQ19BREksMHg5RTApLAorCUlOVENfVkVDVChVU0JfVVNJMCwweEEyMCksCisKKwlJTlRDX1ZFQ1QoUlRDX0FUSSwweEE4MCksCisJSU5UQ19WRUNUKFJUQ19QUkksMHhBQTApLAorCUlOVENfVkVDVChSVENfQ1VJLDB4QUMwKSwKKworCUlOVENfVkVDVChETUFDMUJfREVJNCwweEIwMCksCisJSU5UQ19WRUNUKERNQUMxQl9ERUk1LDB4QjIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFCX0RBREVSUiwweEI0MCksCisKKwlJTlRDX1ZFQ1QoRE1BQzBCX0RFSTQsMHhCODApLAorCUlOVENfVkVDVChETUFDMEJfREVJNSwweEJBMCksCisJSU5UQ19WRUNUKERNQUMwQl9EQURFUlIsMHhCQzApLAorCisJSU5UQ19WRUNUKEtFWVNDX0tFWUksMHhCRTApLAorCUlOVENfVkVDVChTQ0lGX1NDSUYwLDB4QzAwKSwKKwlJTlRDX1ZFQ1QoU0NJRl9TQ0lGMSwweEMyMCksCisJSU5UQ19WRUNUKFNDSUZfU0NJRjIsMHhDNDApLAorCUlOVENfVkVDVChNU0lPRl9NU0lPRkkwLDB4QzgwKSwKKwlJTlRDX1ZFQ1QoTVNJT0ZfTVNJT0ZJMSwweENBMCksCisJSU5UQ19WRUNUKFNDSUZBX1NDSUZBMSwweEQwMCksCisKKwlJTlRDX1ZFQ1QoRkxDVExfRkxTVEVJLDB4RDgwKSwKKwlJTlRDX1ZFQ1QoRkxDVExfRkxURU5ESSwweERBMCksCisJSU5UQ19WRUNUKEZMQ1RMX0ZMVFJFUTBJLDB4REMwKSwKKwlJTlRDX1ZFQ1QoRkxDVExfRkxUUkVRMUksMHhERTApLAorCisJSU5UQ19WRUNUKEkyQ19BTEksMHhFMDApLAorCUlOVENfVkVDVChJMkNfVEFDS0ksMHhFMjApLAorCUlOVENfVkVDVChJMkNfV0FJVEksMHhFNDApLAorCUlOVENfVkVDVChJMkNfRFRFSSwweEU2MCksCisKKwlJTlRDX1ZFQ1QoU0RISTBfU0RISUkwLDB4RTgwKSwKKwlJTlRDX1ZFQ1QoU0RISTBfU0RISUkxLDB4RUEwKSwKKwlJTlRDX1ZFQ1QoU0RISTBfU0RISUkyLDB4RUMwKSwKKworCUlOVENfVkVDVChDTVRfQ01USSwweEYwMCksCisJSU5UQ19WRUNUKFRTSUZfVFNJRkksMHhGMjApLAorCUlOVENfVkVDVChTSVVfU0lVSSwweEY4MCksCisJSU5UQ19WRUNUKFNDSUZBX1NDSUZBMiwweEZBMCksCisKKwlJTlRDX1ZFQ1QoVE1VMF9UVU5JMCwweDQwMCksCisJSU5UQ19WRUNUKFRNVTBfVFVOSTEsMHg0MjApLAorCUlOVENfVkVDVChUTVUwX1RVTkkyLDB4NDQwKSwKKworCUlOVENfVkVDVChJUkRBX0lSREFJLDB4NDgwKSwKKwlJTlRDX1ZFQ1QoQVRBUElfQVRBUElJLDB4NEEwKSwKKworCUlOVENfVkVDVChTREhJMV9TREhJSTAsMHg0RTApLAorCUlOVENfVkVDVChTREhJMV9TREhJSTEsMHg1MDApLAorCUlOVENfVkVDVChTREhJMV9TREhJSTIsMHg1MjApLAorCisJSU5UQ19WRUNUKFZFVTJIMV9WRVUySEksMHg1NjApLAorCUlOVENfVkVDVChMQ0RDX0xDRENJLDB4NTgwKSwKKworCUlOVENfVkVDVChUTVUxX1RVTkkwLDB4OTIwKSwKKwlJTlRDX1ZFQ1QoVE1VMV9UVU5JMSwweDk0MCksCisJSU5UQ19WRUNUKFRNVTFfVFVOSTIsMHg5NjApLAorCit9OworCitzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX0dST1VQKERNQUMxQSxETUFDMUFfREVJMCxETUFDMUFfREVJMSxETUFDMUFfREVJMixETUFDMUFfREVJMyksCisJSU5UQ19HUk9VUChETUFDMEEsRE1BQzBBX0RFSTAsRE1BQzBBX0RFSTEsRE1BQzBBX0RFSTIsRE1BQzBBX0RFSTMpLAorCUlOVENfR1JPVVAoVklPLCBWSU9fQ0VVSSxWSU9fQkVVSSxWSU9fVkVVMkhJLFZJT19WT1VJKSwKKwlJTlRDX0dST1VQKERNQUMwQiwgRE1BQzBCX0RFSTQsRE1BQzBCX0RFSTUsRE1BQzBCX0RBREVSUiksCisJSU5UQ19HUk9VUChGTENUTCxGTENUTF9GTFNURUksRkxDVExfRkxURU5ESSxGTENUTF9GTFRSRVEwSSxGTENUTF9GTFRSRVExSSksCisJSU5UQ19HUk9VUChJMkMsSTJDX0FMSSxJMkNfVEFDS0ksSTJDX1dBSVRJLEkyQ19EVEVJKSwKKwlJTlRDX0dST1VQKF8yREcsIF8yREdfVFJJLF8yREdfSU5JLF8yREdfQ0VJKSwKKwlJTlRDX0dST1VQKFNESEkxLCBTREhJMV9TREhJSTAsU0RISTFfU0RISUkxLFNESEkxX1NESElJMiksCisJSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksUlRDX1BSSSxSVENfQ1VJKSwKKwlJTlRDX0dST1VQKERNQUMxQiwgRE1BQzFCX0RFSTQsRE1BQzFCX0RFSTUsRE1BQzFCX0RBREVSUiksCisJSU5UQ19HUk9VUChTREhJMCxTREhJMF9TREhJSTAsU0RISTBfU0RISUkxLFNESEkwX1NESElJMiksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhhNDA4MDA4MCwgMHhhNDA4MDBjMCwgOCwgLyogSU1SMCAvIElNQ1IwICovCisJICB7IDAsICBUTVUxX1RVTkkyLFRNVTFfVFVOSTEsVE1VMV9UVU5JMCwwLFNESEkxX1NESElJMixTREhJMV9TREhJSTEsU0RISTFfU0RISUkwfSB9LAorCXsgMHhhNDA4MDA4NCwgMHhhNDA4MDBjNCwgOCwgLyogSU1SMSAvIElNQ1IxICovCisJICB7IFZJT19WT1VJLCBWSU9fVkVVMkhJLFZJT19CRVVJLFZJT19DRVVJLERNQUMwQV9ERUkzLERNQUMwQV9ERUkyLERNQUMwQV9ERUkxLERNQUMwQV9ERUkwIH0gfSwKKwl7IDB4YTQwODAwODgsIDB4YTQwODAwYzgsIDgsIC8qIElNUjIgLyBJTUNSMiAqLworCSAgeyAwLCAwLCAwLCBWUFVfVlBVSSwwLDAsMCxTQ0lGQV9TQ0lGQTAgfSB9LAorCXsgMHhhNDA4MDA4YywgMHhhNDA4MDBjYywgOCwgLyogSU1SMyAvIElNQ1IzICovCisJICB7IERNQUMxQV9ERUkzLERNQUMxQV9ERUkyLERNQUMxQV9ERUkxLERNQUMxQV9ERUkwLDAsMCwwLElSREFfSVJEQUkgfSB9LAorCXsgMHhhNDA4MDA5MCwgMHhhNDA4MDBkMCwgOCwgLyogSU1SNCAvIElNQ1I0ICovCisJICB7IDAsVE1VMF9UVU5JMixUTVUwX1RVTkkxLFRNVTBfVFVOSTAsVkVVMkgxX1ZFVTJISSwwLDAsTENEQ19MQ0RDSSB9IH0sCisJeyAweGE0MDgwMDk0LCAweGE0MDgwMGQ0LCA4LCAvKiBJTVI1IC8gSU1DUjUgKi8KKwkgIHsgS0VZU0NfS0VZSSxETUFDMEJfREFERVJSLERNQUMwQl9ERUk1LERNQUMwQl9ERUk0LDAsU0NJRl9TQ0lGMixTQ0lGX1NDSUYxLFNDSUZfU0NJRjAgfSB9LAorCXsgMHhhNDA4MDA5OCwgMHhhNDA4MDBkOCwgOCwgLyogSU1SNiAvIElNQ1I2ICovCisJICB7IDAsMCwwLFNDSUZBX1NDSUZBMSxBRENfQURJLDAsTVNJT0ZfTVNJT0ZJMSxNU0lPRl9NU0lPRkkwIH0gfSwKKwl7IDB4YTQwODAwOWMsIDB4YTQwODAwZGMsIDgsIC8qIElNUjcgLyBJTUNSNyAqLworCSAgeyBJMkNfRFRFSSwgSTJDX1dBSVRJLCBJMkNfVEFDS0ksIEkyQ19BTEksCisJICAgIEZMQ1RMX0ZMVFJFUTFJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxTVEVJIH0gfSwKKwl7IDB4YTQwODAwYTAsIDB4YTQwODAwZTAsIDgsIC8qIElNUjggLyBJTUNSOCAqLworCSAgeyAwLFNESEkwX1NESElJMixTREhJMF9TREhJSTEsU0RISTBfU0RISUkwLDAsMCxTQ0lGQV9TQ0lGQTIsU0lVX1NJVUkgfSB9LAorCXsgMHhhNDA4MDBhNCwgMHhhNDA4MDBlNCwgOCwgLyogSU1SOSAvIElNQ1I5ICovCisJICB7IDAsIDAsIDAsIENNVF9DTVRJLCAwLCAwLCBVU0JfVVNJMCwwIH0gfSwKKwl7IDB4YTQwODAwYTgsIDB4YTQwODAwZTgsIDgsIC8qIElNUjEwIC8gSU1DUjEwICovCisJICB7IDAsIERNQUMxQl9EQURFUlIsRE1BQzFCX0RFSTUsRE1BQzFCX0RFSTQsMCxSVENfQVRJLFJUQ19QUkksUlRDX0NVSSB9IH0sCisJeyAweGE0MDgwMGFjLCAweGE0MDgwMGVjLCA4LCAvKiBJTVIxMSAvIElNQ1IxMSAqLworCSAgeyAwLF8yREdfQ0VJLF8yREdfSU5JLF8yREdfVFJJLDAsVFBVX1RQVUksMCxUU0lGX1RTSUZJIH0gfSwKKwl7IDB4YTQwODAwYjAsIDB4YTQwODAwZjAsIDgsIC8qIElNUjEyIC8gSU1DUjEyICovCisJICB7IDAsMCwwLDAsMCwwLDAsQVRBUElfQVRBUElJIH0gfSwKKwl7IDB4YTQxNDAwNDQsIDB4YTQxNDAwNjQsIDgsIC8qIElOVE1TSzAwIC8gSU5UTVNLQ0xSMDAgKi8KKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCit9OworCitzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhhNDA4MDAwMCwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwX1RVTkkwLCBUTVUwX1RVTkkxLCBUTVUwX1RVTkkyLCBJUkRBX0lSREFJIH0gfSwKKwl7IDB4YTQwODAwMDQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgVkVVMkgxX1ZFVTJISSwgTENEQ19MQ0RDSSwgRE1BQzFBLCAwfSB9LAorCXsgMHhhNDA4MDAwOCwgMCwgMTYsIDQsIC8qIElQUkMgKi8geyBUTVUxX1RVTkkwLCBUTVUxX1RVTkkxLCBUTVUxX1RVTkkyLCAwfSB9LAorCXsgMHhhNDA4MDAwYywgMCwgMTYsIDQsIC8qIElQUkQgKi8geyB9IH0sCisJeyAweGE0MDgwMDEwLCAwLCAxNiwgNCwgLyogSVBSRSAqLyB7IERNQUMwQSwgVklPLCBTQ0lGQV9TQ0lGQTAsIFZQVV9WUFVJIH0gfSwKKwl7IDB4YTQwODAwMTQsIDAsIDE2LCA0LCAvKiBJUFJGICovIHsgS0VZU0NfS0VZSSwgRE1BQzBCLCBVU0JfVVNJMCwgQ01UX0NNVEkgfSB9LAorCXsgMHhhNDA4MDAxOCwgMCwgMTYsIDQsIC8qIElQUkcgKi8geyBTQ0lGX1NDSUYwLCBTQ0lGX1NDSUYxLCBTQ0lGX1NDSUYyLDAgfSB9LAorCXsgMHhhNDA4MDAxYywgMCwgMTYsIDQsIC8qIElQUkggKi8geyBNU0lPRl9NU0lPRkkwLE1TSU9GX01TSU9GSTEsIEZMQ1RMLCBJMkMgfSB9LAorCXsgMHhhNDA4MDAyMCwgMCwgMTYsIDQsIC8qIElQUkkgKi8geyBTQ0lGQV9TQ0lGQTEsMCxUU0lGX1RTSUZJLF8yREcgfSB9LAorCXsgMHhhNDA4MDAyNCwgMCwgMTYsIDQsIC8qIElQUkogKi8geyBBRENfQURJLDAsU0lVX1NJVUksU0RISTEgfSB9LAorCXsgMHhhNDA4MDAyOCwgMCwgMTYsIDQsIC8qIElQUksgKi8geyBSVEMsRE1BQzFCLDAsU0RISTAgfSB9LAorCXsgMHhhNDA4MDAyYywgMCwgMTYsIDQsIC8qIElQUkwgKi8geyBTQ0lGQV9TQ0lGQTIsMCxUUFVfVFBVSSxBVEFQSV9BVEFQSUkgfSB9LAorCXsgMHhhNDE0MDAxMCwgMCwgMzIsIDQsIC8qIElOVFBSSTAwICovCisJICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3NlbnNlX3JlZyBzZW5zZV9yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhhNDE0MDAxYywgMTYsIDIsIC8qIElDUjEgKi8KKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCit9OworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzIzIiwgdmVjdG9ycywgZ3JvdXBzLAorCQkJIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzKTsKKwordm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKK3sKKwlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCit7CisJLyogUmVnaXN0ZXIgdGhlIFVSQU0gc3BhY2UgYXMgTm9kZSAxICovCisJc2V0dXBfYm9vdG1lbV9ub2RlKDEsIDB4MDU1ZjAwMDAsIDB4MDU2MTAwMDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwppbmRleCBlYWJkNTM4Li5hZTJiMjIyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTIzMSwxMiArMjMxLDYgQEAKIAlJTlRDX0dST1VQKEdQSU8sIEdQSU9fQ0gwLCBHUElPX0NIMSwgR1BJT19DSDIsIEdQSU9fQ0gzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvIHByaW9yaXRpZXNbXSBfX2luaXRkYXRhID0gewotCUlOVENfUFJJTyhTQ0lGMCwgMyksCi0JSU5UQ19QUklPKFNDSUYxLCAzKSwKLQlJTlRDX1BSSU8oU0NJRjIsIDMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZkNDAwMzgsIDB4ZmZkNDAwM2MsIDMyLCAvKiBJTlQyTVNLUiAvIElOVDJNU0tDUiAqLwogCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCBHUElPLCAwLApAQCAtMjcwLDExICsyNjQsMTAgQEAKIAl7IDB4ZmZkNDAwYjQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTMgKi8geyAwLCAwLCBTVElGMSwgU1RJRjAgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc2MyIsIHZlY3RvcnMsIGdyb3VwcywgcHJpb3JpdGllcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3NjMiLCB2ZWN0b3JzLCBncm91cHMsCiAJCQkgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogLyogU3VwcG9ydCBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHBpbnMgaW4gSVJRIG1vZGUgKi8KLQogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgaXJxX3ZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCUlOVENfVkVDVChJUlEwLCAweDI0MCksIElOVENfVkVDVChJUlExLCAweDI4MCksCiAJSU5UQ19WRUNUKElSUTIsIDB4MmMwKSwgSU5UQ19WRUNUKElSUTMsIDB4MzAwKSwKQEAgLTMwMiw3ICsyOTUsNiBAQAogCQkJIGlycV9zZW5zZV9yZWdpc3RlcnMpOwogCiAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgcGlucyBpbiBJUkwgbW9kZSAqLwotCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCBpcmxfdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19WRUNUKElSTF9MTExMLCAweDIwMCksIElOVENfVkVDVChJUkxfTExMSCwgMHgyMjApLAogCUlOVENfVkVDVChJUkxfTExITCwgMHgyNDApLCBJTlRDX1ZFQ1QoSVJMX0xMSEgsIDB4MjYwKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKaW5kZXggMzJmNGY1OS4uYjczNTc4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0g3NzcwIFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDggIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CkBAIC0yOSw2ICsyOSw0MSBAQAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCiAJCS5pcnFzCQk9IHsgNjMsIDYzLCA2MywgNjMgfSwKIAl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyNjAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjQsIDY0LCA2NCwgNjQgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyNzAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjUsIDY1LCA2NSwgNjUgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyODAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjYsIDY2LCA2NiwgNjYgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyOTAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjcsIDY3LCA2NywgNjcgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyYTAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjgsIDY4LCA2OCwgNjggfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyYjAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjksIDY5LCA2OSwgNjkgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyYzAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNzAsIDcwLCA3MCwgNzAgfSwKKwl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggMjkzMDA0Yi4uMThkYmJlMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IDc0YjYwZTkuLjYyMWU3MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0xMCwxMCArMTAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+Ci0jaW5jbHVkZSA8YXNtL3NjaS5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaHgzLmMKaW5kZXggNGRjOTU4Yi4uYmQzNWYzMjUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaHgzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2h4My5jCkBAIC0xMCw5ICsxMCw5IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KLSNpbmNsdWRlIDxhc20vc2NpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jCmluZGV4IDMwYjc2YTkuLmRkNGY1MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KIAogLyoKICAqIEluaXRpYWxseSBsb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L3Vud2luZC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS91bndpbmQuYwppbmRleCAxMTljMjBhLi5iMjA1YjI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L3Vud2luZC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvdW53aW5kLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCQkJaWYgKGRlc3QgPj0gNjMpIHsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnZhbGlkIGRlc3QgcmVnICVkICIKIAkJCQkgICAgICAgInNwZWNpZmllZCBpbiBtb3ZpIGhhbmRsZXIuIEZhaWxlZCAiCi0JCQkJICAgICAgICJvcGNvZGUgd2FzIDB4JWx4OiAiLCBfX0ZVTkNUSU9OX18sCisJCQkJICAgICAgICJvcGNvZGUgd2FzIDB4JWx4OiAiLCBfX2Z1bmNfXywKIAkJCQkgICAgICAgZGVzdCwgb3ApOwogCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9kdW1wX3Rhc2suYyBiL2FyY2gvc2gva2VybmVsL2R1bXBfdGFzay5jCmluZGV4IDRhOGE0MDguLjFkYjdjZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R1bXBfdGFzay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2R1bXBfdGFzay5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KIAogLyoKICAqIENhcHR1cmUgdGhlIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGlmIHRoZSB0YXNrIGlzIG5vdCBydW5uaW5nIChpbiB1c2VyIHNwYWNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jCmluZGV4IDg2YTY2NWQuLjM5Y2Q3ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNlbmRpZgogc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFwcGVkX2xvY2spOwogCi1pbnQgX19pbml0IHJlZ2lzdGVyX3RyYXBwZWRfaW8oc3RydWN0IHRyYXBwZWRfaW8gKnRpb3ApCitpbnQgcmVnaXN0ZXJfdHJhcHBlZF9pbyhzdHJ1Y3QgdHJhcHBlZF9pbyAqdGlvcCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBsb25nIGxlbiA9IDAsIGZsYWdzID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCA5YWIxOTI2Li5iOThlMzdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3ViYy5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KIAogc3RhdGljIGludCBobHRfY291bnRlcjsKIGludCB1YmNfdXNlcmNudCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggMDQ2OTk5Yi4uMDI4M2Q4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFzdF90YXNrX3VzZWRfbWF0aCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKaW5kZXggZjZmYmRmYS4uZDQ1M2M0NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KIAogLyogVGhpcyBtYXNrIGRlZmluZXMgdGhlIGJpdHMgb2YgdGhlIFNSIHdoaWNoIHRoZSB1c2VyIGlzIG5vdCBhbGxvd2VkIHRvCiAgICBjaGFuZ2UsIHdoaWNoIGFyZSBldmVyeXRoaW5nIGV4Y2VwdCBTLCBRLCBNLCBQUiwgU1osIEZSLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL3NoL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg0MTE5ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZW1hcGhvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogSnVzdCB0YWtlbiBmcm9tIGFscGhhIGltcGxlbWVudGF0aW9uLgotICogVGhpcyBjYW4ndCB3b3JrIHdlbGwsIHBlcmhhcHMuCi0gKi8KLS8qCi0gKiAgR2VuZXJpYyBzZW1hcGhvcmUgY29kZS4gQnV5ZXIgYmV3YXJlLiBEbyB5b3VyIG93bgotICogc3BlY2lmaWMgY2hhbmdlcyBpbiA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUtaGVscGVyLmg+Ci0KLURFRklORV9TUElOTE9DSyhzZW1hcGhvcmVfd2FrZV9sb2NrKTsKLQotLyoKLSAqIFNlbWFwaG9yZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgdHdvLXdheSBjb3VudGVyOgotICogVGhlICJjb3VudCIgdmFyaWFibGUgaXMgZGVjcmVtZW50ZWQgZm9yIGVhY2ggcHJvY2VzcwotICogdGhhdCB0cmllcyB0byBzbGVlcCwgd2hpbGUgdGhlICJ3YWtpbmciIHZhcmlhYmxlIGlzCi0gKiBpbmNyZW1lbnRlZCB3aGVuIHRoZSAidXAoKSIgY29kZSBnb2VzIHRvIHdha2UgdXAgd2FpdGluZwotICogcHJvY2Vzc2VzLgotICoKLSAqIE5vdGFibHksIHRoZSBpbmxpbmUgInVwKCkiIGFuZCAiZG93bigpIiBmdW5jdGlvbnMgY2FuCi0gKiBlZmZpY2llbnRseSB0ZXN0IGlmIHRoZXkgbmVlZCB0byBkbyBhbnkgZXh0cmEgd29yayAodXAKLSAqIG5lZWRzIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqIHdha2luZ19ub25femVybygpIChmcm9tIGFzbS9zZW1hcGhvcmUuaCkgbXVzdCBleGVjdXRlCi0gKiBhdG9taWNhbGx5LgotICoKLSAqIFdoZW4gX191cCgpIGlzIGNhbGxlZCwgdGhlIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIGluY3JlbWVudGluZyBpdCwgYW5kIHdlIG5lZWQgdG8gd2FrZSB1cCBzb21lYm9keS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgYWRkcyBvbmUgdG8gdGhlIGNvdW50IG9mIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8KLSAqIHdha2UgdXAgYW5kIGV4aXQuICBBTEwgd2FpdGluZyBwcm9jZXNzZXMgYWN0dWFsbHkgd2FrZSB1cCBidXQKLSAqIG9ubHkgdGhlIG9uZSB0aGF0IGdldHMgdG8gdGhlICJ3YWtpbmciIGZpZWxkIGZpcnN0IHdpbGwgZ2F0ZQotICogdGhyb3VnaCBhbmQgYWNxdWlyZSB0aGUgc2VtYXBob3JlLiAgVGhlIG90aGVycyB3aWxsIGdvIGJhY2sKLSAqIHRvIHNsZWVwLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMKLSAqIGNvbnRlbnRpb24gb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZQotICogIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUgd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUKLSAqIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbiA8YXNtL3NlbWFwaG9yZS5oPgotICogd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXdha2Vfb25lX21vcmUoc2VtKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi0vKgotICogUGVyZm9ybSB0aGUgImRvd24iIGZ1bmN0aW9uLiAgUmV0dXJuIHplcm8gZm9yIHNlbWFwaG9yZSBhY3F1aXJlZCwKLSAqIHJldHVybiBuZWdhdGl2ZSBmb3Igc2lnbmFsbGVkIG91dCBvZiB0aGUgZnVuY3Rpb24uCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duLCB0aGUgcmV0dXJuIGlzIGlnbm9yZWQgYW5kIHRoZSB3YWl0IGxvb3AgaXMKLSAqIG5vdCBpbnRlcnJ1cHRpYmxlLiAgVGhpcyBtZWFucyB0aGF0IGEgdGFzayB3YWl0aW5nIG9uIGEgc2VtYXBob3JlCi0gKiB1c2luZyAiZG93bigpIiBjYW5ub3QgYmUga2lsbGVkIHVudGlsIHNvbWVvbmUgZG9lcyBhbiAidXAoKSIgb24KLSAqIHRoZSBzZW1hcGhvcmUuCi0gKgotICogSWYgY2FsbGVkIGZyb20gX19kb3duX2ludGVycnVwdGlibGUsIHRoZSByZXR1cm4gdmFsdWUgZ2V0cyBjaGVja2VkCi0gKiB1cG9uIHJldHVybi4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbmVnYXRpdmUgdGhlbiB0aGUgdGFzayBjb250aW51ZXMKLSAqIHdpdGggdGhlIG5lZ2F0aXZlIHZhbHVlIGluIHRoZSByZXR1cm4gcmVnaXN0ZXIgKGl0IGNhbiBiZSB0ZXN0ZWQgYnkKLSAqIHRoZSBjYWxsZXIpLgotICoKLSAqIEVpdGhlciBmb3JtIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggInVwKCkiLgotICoKLSAqLwotCi0jZGVmaW5lIERPV05fVkFSCQkJCVwKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CVwKLQl3YWl0X3F1ZXVlX3Qgd2FpdDsJCQlcCi0JaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIHRzayk7Ci0KLSNkZWZpbmUgRE9XTl9IRUFEKHRhc2tfc3RhdGUpCQkJCQkJXAotCQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRzay0+c3RhdGUgPSAodGFza19zdGF0ZSk7CQkJCQlcCi0JYWRkX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwkJCQlcCi0JCQkJCQkJCQlcCi0JLyoJCQkJCQkJCVwKLQkgKiBPaywgd2UncmUgc2V0IHVwLiAgc2VtLT5jb3VudCBpcyBrbm93biB0byBiZSBsZXNzIHRoYW4gemVybwlcCi0JICogc28gd2UgbXVzdCB3YWl0LgkJCQkJCVwKLQkgKgkJCQkJCQkJXAotCSAqIFdlIGNhbiBsZXQgZ28gdGhlIGxvY2sgZm9yIHB1cnBvc2VzIG9mIHdhaXRpbmcuCQlcCi0JICogV2UgcmUtYWNxdWlyZSBpdCBhZnRlciBhd2FraW5nIHNvIGFzIHRvIHByb3RlY3QJCVwKLQkgKiBhbGwgc2VtYXBob3JlIG9wZXJhdGlvbnMuCQkJCQlcCi0JICoJCQkJCQkJCVwKLQkgKiBJZiAidXAoKSIgaXMgY2FsbGVkIGJlZm9yZSB3ZSBjYWxsIHdha2luZ19ub25femVybygpIHRoZW4JXAotCSAqIHdlIHdpbGwgY2F0Y2ggaXQgcmlnaHQgYXdheS4gIElmIGl0IGlzIGNhbGxlZCBsYXRlciB0aGVuCVwKLQkgKiB3ZSB3aWxsIGhhdmUgdG8gZ28gdGhyb3VnaCBhIHdha2V1cCBjeWNsZSB0byBjYXRjaCBpdC4JXAotCSAqCQkJCQkJCQlcCi0JICogTXVsdGlwbGUgd2FpdGVycyBjb250ZW5kIGZvciB0aGUgc2VtYXBob3JlIGxvY2sgdG8gc2VlCVwKLQkgKiB3aG8gZ2V0cyB0byBnYXRlIHRocm91Z2ggYW5kIHdobyBoYXMgdG8gd2FpdCBzb21lIG1vcmUuCVwKLQkgKi8JCQkJCQkJCVwKLQlmb3IgKDs7KSB7Ci0KLSNkZWZpbmUgRE9XTl9UQUlMKHRhc2tfc3RhdGUpCQkJXAotCQl0c2stPnN0YXRlID0gKHRhc2tfc3RhdGUpOwlcCi0JfQkJCQkJXAotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQlcCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCi12b2lkIF9fc2NoZWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JRE9XTl9WQVIKLQlET1dOX0hFQUQoVEFTS19VTklOVEVSUlVQVElCTEUpCi0JaWYgKHdha2luZ19ub25femVybyhzZW0pKQotCQlicmVhazsKLQlzY2hlZHVsZSgpOwotCURPV05fVEFJTChUQVNLX1VOSU5URVJSVVBUSUJMRSkKLX0KLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQlET1dOX1ZBUgotCURPV05fSEVBRChUQVNLX0lOVEVSUlVQVElCTEUpCi0KLQlyZXQgPSB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzZW0sIHRzayk7Ci0JaWYgKHJldCkKLQl7Ci0JCWlmIChyZXQgPT0gMSkKLQkJCS8qIHJldCAhPSAwIG9ubHkgaWYgd2UgZ2V0IGludGVycnVwdGVkIC1hcmNhICovCi0JCQlyZXQgPSAwOwotCQlicmVhazsKLQl9Ci0Jc2NoZWR1bGUoKTsKLQlET1dOX1RBSUwoVEFTS19JTlRFUlJVUFRJQkxFKQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJldHVybiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzZW0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggZmY0ZjU0YS4uMjg0ZjY2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMzMzLDYgKzMzNSw3IEBACiAJW0NQVV9TSDczNDNdCT0gIlNINzM0MyIsCVtDUFVfU0g3Nzg1XQk9ICJTSDc3ODUiLAogCVtDUFVfU0g3NzIyXQk9ICJTSDc3MjIiLAlbQ1BVX1NIWDNdCT0gIlNILVgzIiwKIAlbQ1BVX1NINV8xMDFdCT0gIlNINS0xMDEiLAlbQ1BVX1NINV8xMDNdCT0gIlNINS0xMDMiLAorCVtDUFVfTVhHXQk9ICJNWC1HIiwJW0NQVV9TSDc3MjNdCT0gIlNINzcyMyIsCiAJW0NQVV9TSDczNjZdCT0gIlNINzM2NiIsCVtDUFVfU0hfTk9ORV0JPSAiVW5rbm93biIKIH07CiAKQEAgLTQ0MywzICs0NDYsMTUgQEAKIAkuc2hvdwk9IHNob3dfY3B1aW5mbywKIH07CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKworc3RydWN0IGRlbnRyeSAqc2hfZGVidWdmc19yb290OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwlzaF9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNoIiwgTlVMTCk7CisJaWYgKElTX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpKQorCQlyZXR1cm4gUFRSX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHNoX2RlYnVnZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwppbmRleCBlMWE2ZGU5Li42ZDQwNTQ2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgpAQCAtNDgsMTIgKzQ3LDYgQEAKIEVYUE9SVF9TWU1CT0woZ2V0X3ZtX2FyZWEpOwogI2VuZGlmCiAKLS8qIHNlbWFwaG9yZSBleHBvcnRzICovCi1FWFBPUlRfU1lNQk9MKF9fdXApOwotRVhQT1JUX1NZTUJPTChfX2Rvd24pOwotRVhQT1JUX1NZTUJPTChfX2Rvd25faW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl90cnlsb2NrKTsKLQogRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CiBFWFBPUlRfU1lNQk9MKF9fbmRlbGF5KTsKIEVYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOwpAQCAtMTExLDkgKzEwNCw5IEBACiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTEyX2k0KTsKIAotI2lmIChfX0dOVUNfTUlOT1JfXyA9PSAyIHx8IGRlZmluZWQoX19HTlVDX1NUTV9SRUxFQVNFX18pKQorI2lmIChfX0dOVUNfTUlOT1JfXyA+PSAyIHx8IGRlZmluZWQoX19HTlVDX1NUTV9SRUxFQVNFX18pKQogLyoKLSAqIEdDQyA0LjIgZW1pdHMgdGhlc2UgZm9yIGRpdmlzaW9uLCBhcyBkbyBHQ0MgNC4xLnggdmVyc2lvbnMgb2YgdGhlIFNUCisgKiBHQ0MgPj0gNC4yIGVtaXRzIHRoZXNlIGZvciBkaXZpc2lvbiwgYXMgZG8gR0NDIDQuMS54IHZlcnNpb25zIG9mIHRoZSBTVAogICogY29tcGlsZXIgd2hpY2ggaW5jbHVkZSBiYWNrcG9ydGVkIHBhdGNoZXMuCiAgKi8KIERFQ0xBUkVfRVhQT1JUKF9fc2RpdnNpM19pNGkpOwpAQCAtMTQ2LDUgKzEzOSw3IEBACiBFWFBPUlRfU1lNQk9MKGNzdW1faXB2Nl9tYWdpYyk7CiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woY2xlYXJfcGFnZSk7CitFWFBPUlRfU1lNQk9MKGNvcHlfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKF9fY2xlYXJfdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9lYnNzKTsKK0VYUE9SVF9TWU1CT0woZW1wdHlfemVyb19wYWdlKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc182NC5jCmluZGV4IDgwMDRjMzguLmEzMTBjOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfNjQuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgpAQCAtMzcsMTIgKzM2LDExIEBACiBFWFBPUlRfU1lNQk9MKHNjcmVlbl9pbmZvKTsKICNlbmRpZgogCi1FWFBPUlRfU1lNQk9MKF9fZG93bik7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0woX191cCk7CiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfYXNtX2wpOwogRVhQT1JUX1NZTUJPTChfX2dldF91c2VyX2FzbV9sKTsKK0VYUE9SVF9TWU1CT0woY29weV9wYWdlKTsKIEVYUE9SVF9TWU1CT0woX19jb3B5X3VzZXIpOworRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CiBFWFBPUlRfU1lNQk9MKF9fbmRlbGF5KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggZjZiNWZiZi4uZjMxMTU1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggODBiZGUxOS4uNTUyZWI4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKICNkZWZpbmUgUkVHX1JFVCA5CiAjZGVmaW5lIFJFR19BUkcxIDIKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NtcC5jIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKaW5kZXggOTQwNzVlMS4uNWQwMzlkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTE3OSw3ICsxNzksNyBAQAogfQogCiBzdHJ1Y3Qgc21wX2ZuX2NhbGxfc3RydWN0IHNtcF9mbl9jYWxsID0gewotCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChzbXBfZm5fY2FsbC5sb2NrKSwKIAkuZmluaXNoZWQJPSBBVE9NSUNfSU5JVCgwKSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYwppbmRleCA3MTMxMjMyNC4uZDIwYzhjMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYwpAQCAtNzcsNyArNzcsNyBAQAogCQkJCWNvdW50IC09IExBVENIOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoIiVzICgpOiBoYXJkd2FyZSB0aW1lciBwcm9ibGVtP1xuIiwKLQkJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICAgICAgX19mdW5jX18pOwogCQkJfQogCQl9CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYwppbmRleCBhZGU5ZDZlLi5mZTQ1M2MwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCQljb3VudCAtPSBMQVRDSDsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKCIlcyAoKTogaGFyZHdhcmUgdGltZXIgcHJvYmxlbT9cbiIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCX0KIAkJfQogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggOWI1ODQ0YS4uMDgzODk0MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYworKysgYi9hcmNoL3NoL2tlcm5lbC90b3BvbG9neS5jCkBAIC0yOSw3ICsyOSw3IEBACiAJCXJldCA9IHJlZ2lzdGVyX2NwdSgmcGVyX2NwdShjcHVfZGV2aWNlcywgaSksIGkpOwogCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWdpc3Rlcl9jcHUgJWQgZmFpbGVkICglZClcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBpLCByZXQpOworCQkJICAgICAgIF9fZnVuY19fLCBpLCByZXQpOwogCX0KIAogI2lmIGRlZmluZWQoQ09ORklHX05VTUEpICYmICFkZWZpbmVkKENPTkZJR19TTVApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwppbmRleCBiYWE0ZmEzLi5lMDhiM2JmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKICNpZmRlZiBDT05GSUdfU0hfS0dEQgogI2luY2x1ZGUgPGFzbS9rZ2RiLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfNjQuYwppbmRleCBhNTVhYzgxLi5hODU4MzFjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2ZwdS5oPgogCiAjdW5kZWYgREVCVUdfRVhDRVBUSU9OCiAjaWZkZWYgREVCVUdfRVhDRVBUSU9OCkBAIC0yMzgsNyArMjM5LDcgQEAKIC8qIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KIGFzbWxpbmthZ2Ugdm9pZCBkb19leGNlcHRpb25fZXJyb3IodW5zaWduZWQgbG9uZyBleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc2hvd19leGNwX3JlZ3MoX19GVU5DVElPTl9fLCAtMSwgLTEsIHJlZ3MpOworCXNob3dfZXhjcF9yZWdzKF9fZnVuY19fLCAtMSwgLTEsIHJlZ3MpOwogCWRpZV9pZl9rZXJuZWwoImV4Y2VwdGlvbiIsIHJlZ3MsIGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvY2xlYXJfcGFnZS5TIGIvYXJjaC9zaC9saWIvY2xlYXJfcGFnZS5TCmluZGV4IDM1MzkxMjMuLjgzNDJiZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2NsZWFyX3BhZ2UuUworKysgYi9hcmNoL3NoL2xpYi9jbGVhcl9wYWdlLlMKQEAgLTI3LDExICsyNywxMSBAQAogCW1vdgkjMCxyMAogCSEKIDE6Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykKLQltb3YubAlyMCxAcjQKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKIAltb3ZjYS5sCXIwLEByNAogCW1vdglyNCxyMQorI2Vsc2UKKwltb3YubAlyMCxAcjQKICNlbmRpZgogCWFkZAkjMzIscjQKIAltb3YubAlyMCxALXI0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYi9jb3B5X3BhZ2UuUyBiL2FyY2gvc2gvbGliL2NvcHlfcGFnZS5TCmluZGV4IGUwMDJiOTEuLjVkMTJlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2NvcHlfcGFnZS5TCisrKyBiL2FyY2gvc2gvbGliL2NvcHlfcGFnZS5TCkBAIC00MSwxMSArNDEsMTEgQEAKIAltb3YubAlAcjExKyxyNQogCW1vdi5sCUByMTErLHI2CiAJbW92LmwJQHIxMSsscjcKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKQotCW1vdi5sCXIwLEByMTAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKIAltb3ZjYS5sCXIwLEByMTAKIAltb3YJcjEwLHIwCisjZWxzZQorCW1vdi5sCXIwLEByMTAKICNlbmRpZgogCWFkZAkjMzIscjEwCiAJbW92LmwJcjcsQC1yMTAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliNjQvYy1jaGVja3N1bS5jIGIvYXJjaC9zaC9saWI2NC9jLWNoZWNrc3VtLmMKaW5kZXggNWRmYmQ4Yi4uNWMyODRlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9saWI2NC9jLWNoZWNrc3VtLmMKKysrIGIvYXJjaC9zaC9saWI2NC9jLWNoZWNrc3VtLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXJlc3VsdCA9IChyZXN1bHQgJiAweGZmZmZmZmZmKSArIChyZXN1bHQgPj4gMzIpOwogCiAJcHJfZGVidWcoIiVzIHNhZGRyICV4IGRhZGRyICV4IGxlbiAleCBwcm90byAleCBzdW0gJXggcmVzdWx0ICUwOEx4XG4iLAotCQlfX0ZVTkNUSU9OX18sIHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtLCByZXN1bHQpOworCQlfX2Z1bmNfXywgc2FkZHIsIGRhZGRyLCBsZW4sIHByb3RvLCBzdW0sIHJlc3VsdCk7CiAKIAlyZXR1cm4gKF9fd3N1bSlyZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYjY0L3VkZWxheS5jIGIvYXJjaC9zaC9saWI2NC91ZGVsYXkuYwppbmRleCAyM2M3ZDE3Li5kNzZiZDgwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYjY0L3VkZWxheS5jCisrKyBiL2FyY2gvc2gvbGliNjQvdWRlbGF5LmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqIGEgMUdIeiBib3gsIHRoYXQncyBhYm91dCAyIHNlY29uZHMuCiAgKi8KIAotdm9pZCBfX2RlbGF5KGludCBsb29wcykKK3ZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQogewogCWxvbmcgbG9uZyBkdW1teTsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZ2V0dHIJdHIwLCAlMVxuXHQiCkBAIC0zMywyNCArMzMsMTcgQEAKIAkJCSAgICAgOiIwIihsb29wcykpOwogfQogCi12b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VjcywgdW5zaWduZWQgbG9uZyBscGopCitpbmxpbmUgdm9pZCBfX2NvbnN0X3VkZWxheSh1bnNpZ25lZCBsb25nIHhsb29wcykKIHsKLQl1c2VjcyAqPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIEhaIDw8IDMyKSAvIDEwMDAwMDApICogbHBqOwotCV9fZGVsYXkoKGxvbmcgbG9uZykgdXNlY3MgPj4gMzIpOworCV9fZGVsYXkoeGxvb3BzICogKEhaICogY3B1X2RhdGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0ubG9vcHNfcGVyX2ppZmZ5KSk7CiB9CiAKLXZvaWQgX19uZGVsYXkodW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLCB1bnNpZ25lZCBsb25nIGxwaikKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKIHsKLQluc2VjcyAqPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIEhaIDw8IDMyKSAvIDEwMDAwMDAwMDApICogbHBqOwotCV9fZGVsYXkoKGxvbmcgbG9uZykgbnNlY3MgPj4gMzIpOworCV9fY29uc3RfdWRlbGF5KHVzZWNzICogMHgwMDAwMTBjNik7ICAvKiAyKiozMiAvIDEwMDAwMDAgKi8KIH0KIAotdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKK3ZvaWQgX19uZGVsYXkodW5zaWduZWQgbG9uZyBuc2VjcykKIHsKLQlfX3VkZWxheSh1c2VjcywgY3B1X2RhdGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0ubG9vcHNfcGVyX2ppZmZ5KTsKLX0KLQotdm9pZCBuZGVsYXkodW5zaWduZWQgbG9uZyBuc2VjcykKLXsKLQlfX25kZWxheShuc2VjcywgY3B1X2RhdGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0ubG9vcHNfcGVyX2ppZmZ5KTsKKwlfX2NvbnN0X3VkZWxheShuc2VjcyAqIDB4MDAwMDAwMDUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IGY1NDliOGMuLjVmZDIxODQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKIAogY29uZmlnIFBNQgogCWJvb2wgIlN1cHBvcnQgMzItYml0IHBoeXNpY2FsIGFkZHJlc3NpbmcgdGhyb3VnaCBQTUIiCi0JZGVwZW5kcyBvbiBNTVUgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUpCisJZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIChDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1KQogCXNlbGVjdCAzMkJJVAogCWRlZmF1bHQgeQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKaW5kZXggZGI2ZDk1MC4uYzViNTZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKQEAgLTEyNywxMyArMTI3LDEzIEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZGNhY2hlX2RlbnRyeSwgKmljYWNoZV9kZW50cnk7CiAKLQlkY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGNhY2hlIiwgU19JUlVTUiwgTlVMTCwKKwlkY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGNhY2hlIiwgU19JUlVTUiwgc2hfZGVidWdmc19yb290LAogCQkJCQkgICAgKHVuc2lnbmVkIGludCAqKUNBQ0hFX1RZUEVfRENBQ0hFLAogCQkJCQkgICAgJmNhY2hlX2RlYnVnZnNfZm9wcyk7CiAJaWYgKElTX0VSUihkY2FjaGVfZGVudHJ5KSkKIAkJcmV0dXJuIFBUUl9FUlIoZGNhY2hlX2RlbnRyeSk7CiAKLQlpY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaWNhY2hlIiwgU19JUlVTUiwgTlVMTCwKKwlpY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaWNhY2hlIiwgU19JUlVTUiwgc2hfZGVidWdmc19yb290LAogCQkJCQkgICAgKHVuc2lnbmVkIGludCAqKUNBQ0hFX1RZUEVfSUNBQ0hFLAogCQkJCQkgICAgJmNhY2hlX2RlYnVnZnNfZm9wcyk7CiAJaWYgKElTX0VSUihpY2FjaGVfZGVudHJ5KSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCBlMmVkNmRkLi41M2RkZTA2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJLyogV2Ugb25seSBoYXZlIFpPTkVfTk9STUFMLCBzbyB0aGlzIGlzIGVhc3kuLiAqLwogCXJldCA9IF9fYWRkX3BhZ2VzKHBnZGF0LT5ub2RlX3pvbmVzICsgWk9ORV9OT1JNQUwsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogCWlmICh1bmxpa2VseShyZXQpKQotCQlwcmludGsoIiVzOiBGYWlsZWQsIF9fYWRkX3BhZ2VzKCkgPT0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwkJcHJpbnRrKCIlczogRmFpbGVkLCBfX2FkZF9wYWdlcygpID09ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IDBjN2I3ZTMuLjg4MmEzMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAogCXAgPSByZW1vdmVfdm1fYXJlYSgodm9pZCAqKSh2YWRkciAmIFBBR0VfTUFTSykpOwogCWlmICghcCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgYWRkcmVzcyAlcFxuIiwgX19GVU5DVElPTl9fLCBhZGRyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIGFkZHJlc3MgJXBcbiIsIF9fZnVuY19fLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYwppbmRleCBlMjdkMTY1Li5jZWEyMjRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmludGVkX2Z1bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiJXM6IGRvbmUgd2l0aCBzdGF0aWNzLCBzd2l0Y2hpbmcgdG8ga21hbGxvY1xuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICAgIF9fZnVuY19fKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZWRfZnVsbCA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRsZW4gPSBzdHJsZW4obmFtZSk7CkBAIC0zNTIsNyArMzUyLDcgQEAKIAlyZXMgPSBzaG1lZGlhX2ZpbmRfcmVzb3VyY2UoJnNobWVkaWFfaW9tYXAsIHZhZGRyKTsKIAlpZiAoIXJlcykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gZnJlZSAweCUwOGx4XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCB2YWRkcik7CisJCSAgICAgICBfX2Z1bmNfXywgdmFkZHIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BnLXNoNzcwNS5jIGIvYXJjaC9zaC9tbS9wZy1zaDc3MDUuYwppbmRleCBhNGIwMTVmLi43Zjg4NWI3IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BnLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gvbW0vcGctc2g3NzA1LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggYWI4MWM2MC4uMGIwZWM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwbWIiLCBTX0lGUkVHIHwgU19JUlVHTywKLQkJCQkgICAgIE5VTEwsIE5VTEwsICZwbWJfZGVidWdmc19mb3BzKTsKKwkJCQkgICAgIHNoX2RlYnVnZnNfcm9vdCwgTlVMTCwgJnBtYl9kZWJ1Z2ZzX2ZvcHMpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCmluZGV4IDJhOThjOWUuLjc4NzY5OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfNjQuYworKysgYi9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogI2lmZGVmIERFQlVHX0ZBVUxUCiAJCXByaW50X3Rhc2sodHNrKTsKIAkJcHJpbnRrKCIlczolZCBmYXVsdCwgYWRkcmVzcyBpcyAweCUwOHggUEMgJTAxNkx4IHRleHRhY2Nlc3MgJWQgd3JpdGVhY2Nlc3MgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sX19MSU5FX18sCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCiAJCSAgICAgICBhZGRyZXNzLHJlZ3MtPnBjLHRleHRhY2Nlc3Msd3JpdGVhY2Nlc3MpOwogCQlzaG93X3JlZ3MocmVncyk7CiAjZW5kaWYKQEAgLTE0NSw3ICsxNDUsNyBAQAogI2lmZGVmIERFQlVHX0ZBVUxUCiAJCXByaW50X3Rhc2sodHNrKTsKIAkJcHJpbnRrKCIlczolZCBmYXVsdCwgYWRkcmVzcyBpcyAweCUwOHggUEMgJTAxNkx4IHRleHRhY2Nlc3MgJWQgd3JpdGVhY2Nlc3MgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sX19MSU5FX18sCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCiAJCSAgICAgICBhZGRyZXNzLHJlZ3MtPnBjLHRleHRhY2Nlc3Msd3JpdGVhY2Nlc3MpOwogCQlzaG93X3JlZ3MocmVncyk7CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogI2lmZGVmIERFQlVHX0ZBVUxUCiAJCXByaW50X3Rhc2sodHNrKTsKIAkJcHJpbnRrKCIlczolZCBmYXVsdCwgYWRkcmVzcyBpcyAweCUwOHggUEMgJTAxNkx4IHRleHRhY2Nlc3MgJWQgd3JpdGVhY2Nlc3MgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sX19MSU5FX18sCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCiAJCSAgICAgICBhZGRyZXNzLHJlZ3MtPnBjLHRleHRhY2Nlc3Msd3JpdGVhY2Nlc3MpOwogCQlzaG93X3JlZ3MocmVncyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwppbmRleCA2Nzk5N2FmLi45ODdjNjY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC0yMSw4ICsyMSw5IEBACiA3MjA2U0UJCQlTSF83MjA2X1NPTFVUSU9OX0VOR0lORQogNzM0M1NFCQkJU0hfNzM0M19TT0xVVElPTl9FTkdJTkUKIDc2MTlTRQkJCVNIXzc2MTlfU09MVVRJT05fRU5HSU5FCi03NzIyU0UJCQlTSF83NzIyX1NPTFVUSU9OX0VOR0lORQkJCi03NzUxU0UJCQlTSF83NzUxX1NPTFVUSU9OX0VOR0lORQkJCis3NzIxU0UJCQlTSF83NzIxX1NPTFVUSU9OX0VOR0lORQorNzcyMlNFCQkJU0hfNzcyMl9TT0xVVElPTl9FTkdJTkUKKzc3NTFTRQkJCVNIXzc3NTFfU09MVVRJT05fRU5HSU5FCiA3NzgwU0UJCQlTSF83NzgwX1NPTFVUSU9OX0VOR0lORQogNzc1MVNZU1RFTUgJCVNIXzc3NTFfU1lTVEVNSAogSFA2WFgJCQlTSF9IUDZYWApAQCAtMzgsNyArMzksNiBAQAogUjc3ODVSUAkJCVNIX1I3Nzg1UlAKIFRJVEFOCQkJU0hfVElUQU4KIFNITUlOCQkJU0hfU0hNSU4KLTc3MTBWT0lQR1cJCVNIXzc3MTBWT0lQR1cKIExCT1hSRTIJCQlTSF9MQk9YX1JFMgogWDNQUk9UTwkJCVNIX1gzUFJPVE8KIE1BR0lDUEFORUxSMgkJU0hfTUFHSUNfUEFORUxfUjIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCBjNDAzNDNjLi40OTU5MGY4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0yNyw5ICsyNyw2IEBACiBjb25maWcgT0YKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBIWgogCWludAogCWRlZmF1bHQgMTAwCkBAIC0yNTcsMTUgKzI1NCw2IEBACiAKIHNvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCiAKLWNvbmZpZyBTVU5PU19FTVVMCi0JYm9vbCAiU3VuT1MgYmluYXJ5IGVtdWxhdGlvbiIKLQloZWxwCi0JICBUaGlzIGFsbG93cyB5b3UgdG8gcnVuIG1vc3QgU3VuT1MgYmluYXJpZXMuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzLAotCSAgc2F5IFkgaGVyZSBhbmQgcGxhY2UgYXBwcm9wcmlhdGUgZmlsZXMgaW4gL3Vzci9nbmVtdWwvc3Vub3MuIFNlZQotCSAgPGh0dHA6Ly93d3cudWx0cmFsaW51eC5vcmcvZmFxLmh0bWw+IGZvciBtb3JlIGluZm9ybWF0aW9uLiAgSWYgeW91Ci0JICB3YW50IHRvIHJ1biBTdW5PUyBiaW5hcmllcyBvbiBhbiBVbHRyYSB5b3UgbXVzdCBhbHNvIHNheSBZIHRvCi0JICAiS2VybmVsIHN1cHBvcnQgZm9yIDMyLWJpdCBhLm91dCBiaW5hcmllcyIgYWJvdmUuCi0KIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9kZWZjb25maWcgYi9hcmNoL3NwYXJjL2RlZmNvbmZpZwppbmRleCBmN2E1MDkxLi42YTJjNTdhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2RlZmNvbmZpZworKysgYi9hcmNoL3NwYXJjL2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMy1yYzEKLSMgV2VkIEp1bCAyNSAxNTozMDoyMSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjUKKyMgU3VuIEFwciAyMCAwMTo0OTo1MSAyMDA4CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19ISUdITUVNPXkKQEAgLTksMTggKzksMTUgQEAKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX09GPXkKK0NPTkZJR19IWj0xMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CkBAIC0yOSwxMiArMjYsMjMgQEAKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtNDksNiArNTcsNyBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtNjEsNiArNzAsMTMgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCkBAIC04OCw2ICsxMDQsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQogCiAjCiAjIEdlbmVyYWwgbWFjaGluZSBzZXR1cApAQCAtMTEzLDE0ICsxMzAsMTMgQEAKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9TWVNDQUxMPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19ETUEgaXMgbm90IHNldAogQ09ORklHX1NVTl9PUEVOUFJPTUZTPW0KICMgQ09ORklHX1NQQVJDX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQklORk1UX0FPVVQ9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19TVU5PU19FTVVMPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTEyOCw2ICsxNDQsNyBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQpAQCAtMTQ4LDYgKzE2NSw3IEBACiBDT05GSUdfWEZSTV9VU0VSPW0KICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC0xNzAsNiArMTg4LDcgQEAKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTE5MSw4ICsyMTAsMTAgQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKIENPTkZJR19JUFY2X1RVTk5FTD1tCiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldApAQCAtMjE0LDEwICsyMzUsNiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0yMjUsNiArMjQyLDcgQEAKICMKIENPTkZJR19ORVRfUEtUR0VOPW0KICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19BRl9SWFJQQz1tCkBAIC0yNDgsNiArMjY2LDcgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0yNzEsNyArMjkwLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CkBAIC0yNzksNiArMjk4LDggQEAKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC0zMTgsNiArMzM5LDcgQEAKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKQEAgLTMzOCw2ICszNjAsNyBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CkBAIC0zNTMsMTQgKzM3Niw3IEBACiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC0zNzUsNiArMzkxLDcgQEAKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtMzg4LDExICs0MDUsMjAgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJX1NCVVMgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKQEAgLTQwOSwxMSArNDM1LDE1IEBACiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTQyMSwxMyArNDUxLDEzIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNDQ5LDcgKzQ3OSw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogQ09ORklHX0lOUFVUX0pPWURFVj1tCi0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9bQogQ09ORklHX0lOUFVUX0VWQlVHPW0KIApAQCAtNDk4LDYgKzUyNyw3IEBACiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTUxOSw3ICs1NDksNiBAQAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009bQogQ09ORklHX0pTX1JUQz1tCiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CkBAIC01MzgsOSArNTY3LDkgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldApAQCAtNTUzLDYgKzU4MiwxNCBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKQEAgLTU2OSwxNSArNjA2LDE1IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTU5Miw2ICs2MjksNyBAQAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTYwMSwzNCArNjM5LDE0IEBACiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwogIyBVc2Vyc3BhY2UgSS9PCiAjCiAjIENPTkZJR19VSU8gaXMgbm90IHNldApAQCAtNjY0LDE4ICs2ODIsMTQgQEAKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCiBDT05GSUdfWEZTX1FVT1RBPXkKLUNPTkZJR19YRlNfU0VDVVJJVFk9eQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19SVD15Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ST01GU19GUz1tCitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19RVU9UQUNUTD15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtNzA0LDcgKzcxOCw2IEBACiBDT05GSUdfU1lTRlM9eQogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTcyMSwxNCArNzM0LDEzIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKQEAgLTc2MCwxMCArNzcyLDYgQEAKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19TVU5fUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldApAQCAtODA0LDIxICs4MTIsMTQgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCi0jIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldApAQCAtODQyLDkgKzg0MywxMiBAQAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIAogIwpAQCAtODUzLDkgKzg1NywxMiBAQAogQ09ORklHX0tFWVM9eQogIyBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKQEAgLTg3Myw2ICs4ODAsMTAgQEAKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKQEAgLTg4NywxMSArODk4LDE1IEBACiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCmluZGV4IGU3OTVmMjguLjU5NzAwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotIyAkSWQ6IE1ha2VmaWxlLHYgMS42MiAyMDAwLzEyLzE1IDAwOjQxOjE3IGRhdmVtIEV4cCAkCisjCiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCkBAIC05LDEwICs5LDExIEBACiBJUlFfT0JKUyA6PSBpcnEubyBzdW40bV9pcnEubyBzdW40Y19pcnEubyBzdW40ZF9pcnEubwogb2JqLXkgICAgOj0gZW50cnkubyB3b2YubyB3dWYubyBldHJhcC5vIHJ0cmFwLm8gdHJhcHMubyAkKElSUV9PQkpTKSBcCiAJICAgIHByb2Nlc3MubyBzaWduYWwubyBpb3BvcnQubyBzZXR1cC5vIGlkcHJvbS5vIFwKLQkgICAgc3lzX3NwYXJjLm8gc3Vub3NfYXNtLm8gc3lzdGJscy5vIFwKLQkgICAgdGltZS5vIHdpbmRvd3MubyBjcHUubyBkZXZpY2VzLm8gc2Nsb3cubyBcCi0JICAgIHRhZHBvbGUubyB0aWNrMTQubyBwdHJhY2UubyBzeXNfc29sYXJpcy5vIFwKLQkgICAgdW5hbGlnbmVkLm8gbXVsZGl2Lm8gc2VtYXBob3JlLm8gcHJvbS5vIG9mX2RldmljZS5vIGRldnJlcy5vCisJICAgIHN5c19zcGFyYy5vIHN5c3RibHMubyBcCisJICAgIHRpbWUubyB3aW5kb3dzLm8gY3B1Lm8gZGV2aWNlcy5vIFwKKwkgICAgdGFkcG9sZS5vIHRpY2sxNC5vIHB0cmFjZS5vIFwKKwkgICAgdW5hbGlnbmVkLm8gdW5hX2FzbS5vIG11bGRpdi5vIFwKKwkgICAgcHJvbS5vIG9mX2RldmljZS5vIGRldnJlcy5vCiAKIGRldnJlcy15ID0gLi4vLi4vLi4va2VybmVsL2lycS9kZXZyZXMubwogCkBAIC0yNCw3ICsyNSwzIEBACiBvYmotJChDT05GSUdfU1VOX1BNKSArPSBhcGMubyBwbWMubwogb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vIHNwYXJjX2tzeW1zLm8KIG9iai0kKENPTkZJR19TUEFSQ19MRUQpICs9IGxlZC5vCi0KLWlmZGVmIENPTkZJR19TVU5PU19FTVVMCi1vYmoteSArPSBzeXNfc3Vub3MubyBzdW5vc19pb2N0bC5vCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwppbmRleCAyNTlhNTU5Li5lN2EwZWRmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwpAQCAtMzIsNyArMzIsNyBAQAogLyogSW4gb3JkZXIgdG8gZ2V0IHRoZSBmcHUgdHlwZSBjb3JyZWN0LCB5b3UgbmVlZCB0byB0YWtlIHRoZSBJRFBST00ncwogICogbWFjaGluZSB0eXBlIHZhbHVlIGludG8gY29uc2lkZXJhdGlvbiB0b28uICBJIHdpbGwgZml4IHRoaXMuCiAgKi8KLXN0cnVjdCBjcHVfZnBfaW5mbyBsaW51eF9zcGFyY19mcHVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY3B1X2ZwX2luZm8gbGludXhfc3BhcmNfZnB1W10gPSB7CiAgIHsgMCwgMCwgIkZ1aml0c3UgTUI4NjkxMCBvciBXZWl0ZWsgV1RMMTE2NC81In0sCiAgIHsgMCwgMSwgIkZ1aml0c3UgTUI4NjkxMSBvciBXZWl0ZWsgV1RMMTE2NC81IG9yIExTSSBMNjQ4MzEifSwKICAgeyAwLCAyLCAiTFNJIExvZ2ljIEw2NDgwMiBvciBUZXhhcyBJbnN0cnVtZW50cyBBQ1Q4ODQ3In0sCkBAIC03Niw3ICs3Niw3IEBACiAKICNkZWZpbmUgTlNQQVJDRlBVICBBUlJBWV9TSVpFKGxpbnV4X3NwYXJjX2ZwdSkKIAotc3RydWN0IGNwdV9pdV9pbmZvIGxpbnV4X3NwYXJjX2NoaXBzW10gPSB7CitzdGF0aWMgc3RydWN0IGNwdV9pdV9pbmZvIGxpbnV4X3NwYXJjX2NoaXBzW10gPSB7CiAgIC8qIFN1bjQvMTAwLCA0LzIwMCwgU0xDICovCiAgIHsgMCwgMCwgIkZ1aml0c3UgIE1CODY5MDAvMUEgb3IgTFNJIEw2NDgzMSBTcGFyY0tJVC00MCJ9LAogICAvKiBib3JuZWQgU1RQMTAxMlBHQSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZWJ1cy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvZWJ1cy5jCmluZGV4IGQ4NTA3ODUuLjk2MzQ0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VidXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9lYnVzLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQkJcHJvbV9wcmludGYoIlVHSDogcHJvcGVydHkgZm9yICVzIHdhcyAlZCwgbmVlZCA8ICVkXG4iLAogCQkJCSAgICBkZXYtPnByb21fbm9kZS0+bmFtZSwgbGVuLAogCQkJCSAgICBkZXYtPnBhcmVudC0+bnVtX2FkZHJzKTsKLQkJCXBhbmljKF9fRlVOQ1RJT05fXyk7CisJCQlwYW5pYyhfX2Z1bmNfXyk7CiAJCX0KIAogCQkvKiBYWFggcmVzb3VyY2UgKi8KQEAgLTE2Miw3ICsxNjIsNyBAQAogCQlwcm9tX3ByaW50ZigiVUdIOiBwcm9wbGVuIGZvciAlcyB3YXMgJWQsIG5lZWQgbXVsdGlwbGUgb2YgJWRcbiIsCiAJCQkgICAgZGV2LT5wcm9tX25vZGUtPm5hbWUsIGxlbiwKIAkJCSAgICAoaW50KXNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMpKTsKLQkJcGFuaWMoX19GVU5DVElPTl9fKTsKKwkJcGFuaWMoX19mdW5jX18pOwogCX0KIAlkZXYtPm51bV9hZGRycyA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMpOwogCkBAIC0zMjQsNyArMzI0LDcgQEAKIAkJcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsICZsZW4pOwogCQlpZiAoIXJlZ3MpIHsKIAkJCXByb21fcHJpbnRmKCIlczogY2FuJ3QgZmluZCByZWcgcHJvcGVydHlcbiIsCi0JCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgIF9fZnVuY19fKTsKIAkJCXByb21faGFsdCgpOwogCQl9CiAJCW5yZWcgPSBsZW4gLyBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwppbmRleCBjMmVlZDhmLi4xMzU2NDRmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKQEAgLTExODYsMzYgKzExODYsNiBAQAogCiAJUkVTVE9SRV9BTEwKIAotI2lmZGVmIENPTkZJR19TVU5PU19FTVVMCi0JLyogU3VuT1MgdXNlcyBzeXNjYWxsIHplcm8gYXMgdGhlICdpbmRpcmVjdCBzeXNjYWxsJyBpdCBsb29rcwotCSAqIGxpa2UgaW5kaXJfc3lzY2FsbChzY2FsbF9udW0sIGFyZzAsIGFyZzEsIGFyZzIuLi4pOyAgZXRjLgotCSAqIFRoaXMgaXMgY29tcGxldGUgYnJhaW4gZGFtYWdlLgotCSAqLwotCS5nbG9ibAlzdW5vc19pbmRpcgotc3Vub3NfaW5kaXI6Ci0JbW92CSVvNywgJWw0Ci0JY21wCSVvMCwgTlJfU1lTQ0FMTFMKLQlibHUsYQkxZgotCSBzbGwJJW8wLCAweDIsICVvMAotCi0Jc2V0aGkJJWhpKHN1bm9zX25vc3lzKSwgJWw2Ci0JYgkyZgotCSBvcgklbDYsICVsbyhzdW5vc19ub3N5cyksICVsNgotCi0xOgotCXNldAlzdW5vc19zeXNfdGFibGUsICVsNwotCWxkCVslbDcgKyAlbzBdLCAlbDYKLQotMjoJCi0JbW92CSVvMSwgJW8wCi0JbW92CSVvMiwgJW8xCi0JbW92CSVvMywgJW8yCi0JbW92CSVvNCwgJW8zCi0JbW92CSVvNSwgJW80Ci0JY2FsbAklbDYKLQkgbW92CSVsNCwgJW83Ci0jZW5kaWYKLQogCS5hbGlnbgk0CiAJLmdsb2JsCXN5c19uaXNfc3lzY2FsbAogc3lzX25pc19zeXNjYWxsOgpAQCAtMTIzMiw2ICsxMjAyLDE2IEBACiAJY2FsbAlzcGFyY19leGVjdmUKIAkgbW92CSVsNSwgJW83CiAKKwkuZ2xvYmwJc3Vub3NfZXhlY3YKK3N1bm9zX2V4ZWN2OgorCXN0CSVnMCwgWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9JMl0KKworCWNhbGwJc3BhcmNfZXhlY3ZlCisJIGFkZAklc3AsIFNUQUNLRlJBTUVfU1osICVvMAorCisJYglyZXRfc3lzX2NhbGwKKwkgbGQJWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9JMF0sICVvMAorCiAJLmFsaWduCTQKIAkuZ2xvYmwJc3lzX3BpcGUKIHN5c19waXBlOgpAQCAtMTM5NCw3ICsxMzc0LDcgQEAKIAliCXJldF9zeXNfY2FsbAogCSBsZAlbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX0kwXSwgJW8wCiAKLQkvKiBMaW51eCBuYXRpdmUgYW5kIFN1bk9TIHN5c3RlbSBjYWxscyBlbnRlciBoZXJlLi4uICovCisJLyogTGludXggbmF0aXZlIHN5c3RlbSBjYWxscyBlbnRlciBoZXJlLi4uICovCiAJLmFsaWduCTQKIAkuZ2xvYmwJbGludXhfc3BhcmNfc3lzY2FsbAogbGludXhfc3BhcmNfc3lzY2FsbDoKQEAgLTE0NzIsMTcwICsxNDUyLDYgQEAKIAkgc3QJJWwyLCBbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX05QQ10KIAogCi0JLyoKLQkgKiBTb2xhcmlzIHN5c3RlbSBjYWxscyBhbmQgaW5kaXJlY3Qgc3lzdGVtIGNhbGxzIGVudGVyIGhlcmUuCi0gICAgICAgICAqCi0JICogSSBoYXZlIG5hbWVkIHRoZSBzb2xhcmlzIGluZGlyZWN0IHN5c2NhbGxzIGxpa2UgdGhhdCBiZWNhdXNlCi0JICogaXQgc2VlbXMgbGlrZSBTb2xhcmlzIGhhcyBzb21lIGZhc3QgcGF0aCBzeXNjYWxscyB0aGF0IGNhbgotCSAqIGJlIGhhbmRsZWQgYXMgaW5kaXJlY3Qgc3lzdGVtIGNhbGxzLiAtIG1pZwotCSAqLwotCi1saW51eF9zeXNjYWxsX2Zvcl9zb2xhcmlzOgotCXNldGhpCSVoaShzeXNfY2FsbF90YWJsZSksICVsNwotCWIJbGludXhfc3BhcmNfc3lzY2FsbAotCSBvcgklbDcsICVsbyhzeXNfY2FsbF90YWJsZSksICVsNwotCQotCS5hbGlnbgk0Ci0JLmdsb2JsCXNvbGFyaXNfc3lzY2FsbAotc29sYXJpc19zeXNjYWxsOgotCWNtcAklZzEsNTkKLQliZQlsaW51eF9zeXNjYWxsX2Zvcl9zb2xhcmlzCi0JIGNtcAklZzEsMgotCWJlCWxpbnV4X3N5c2NhbGxfZm9yX3NvbGFyaXMKLQkgY21wICAgICVnMSw0MgotCWJlICAgICAgbGludXhfc3lzY2FsbF9mb3Jfc29sYXJpcwotCSBjbXAJJWcxLDExOQotCWJlLGEJbGludXhfc3lzY2FsbF9mb3Jfc29sYXJpcwotCSBtb3YJMiwgJWcxCi0xOgkKLQlTQVZFX0FMTF9IRUFECi0JIHJkCSV3aW0sICVsMwotCi0Jd3IJJWwwLCBQU1JfRVQsICVwc3IKLQlub3AKLQlub3AKLQltb3YJJWkwLCAlbDUKLQotCWNhbGwJZG9fc29sYXJpc19zeXNjYWxsCi0JIGFkZAklc3AsIFNUQUNLRlJBTUVfU1osICVvMAotCi0Jc3QJJW8wLCBbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX0kwXQotCXNldAlQU1JfQywgJWcyCi0JY21wCSVvMCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSwotCWJnZXUJMWYKLQkgbGQJWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9QU1JdLCAlZzMKLQotCS8qIFN5c3RlbSBjYWxsIHN1Y2Nlc3MsIGNsZWFyIENhcnJ5IGNvbmRpdGlvbiBjb2RlLiAqLwkJCi0JYW5kbgklZzMsICVnMiwgJWczCi0JY2xyCSVsNgotCWIJMmYKLQkgc3QJJWczLCBbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX1BTUl0JCi0KLTE6Ci0JLyogU3lzdGVtIGNhbGwgZmFpbHVyZSwgc2V0IENhcnJ5IGNvbmRpdGlvbiBjb2RlLgotCSAqIEFsc28sIGdldCBhYnMoZXJybm8pIHRvIHJldHVybiB0byB0aGUgcHJvY2Vzcy4KLQkgKi8KLQlzdWIJJWcwLCAlbzAsICVvMAotCW1vdgkxLCAlbDYKLQlzdAklbzAsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTBdCi0Jb3IJJWczLCAlZzIsICVnMwotCXN0CSVnMywgWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9QU1JdCi0KLQkvKiBBZHZhbmNlIHRoZSBwYyBhbmQgbnBjIG92ZXIgdGhlIHRyYXAgaW5zdHJ1Y3Rpb24uCi0JICogSWYgdGhlIG5wYyBpcyB1bmFsaWduZWQgKGhhcyBhIDEgaW4gdGhlIGxvd2VyIGJ5dGUpLCBpdCBtZWFucwotCSAqIHRoZSBrZXJuZWwgZG9lcyBub3Qgd2FudCB1cyB0byBwbGF5IG1hZ2ljIChpZSwgc2tpcHBpbmcgb3ZlcgotCSAqIHRyYXBzKS4gIE1haW5seSB3aGVuIHRoZSBTb2xhcmlzIGNvZGUgd2FudHMgdG8gc2V0IHNvbWUgUEMgYW5kCi0JICogblBDIChzZXRjb250ZXh0KS4KLQkgKi8KLTI6Ci0JbGQJWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9OUENdLCAlbDEJLyogcGMgID0gbnBjICAgKi8KLQlhbmRjYwklbDEsIDEsICVnMAotCWJuZQkxZgotCSBhZGQJJWwxLCAweDQsICVsMgkJCS8qIG5wYyA9IG5wYys0ICovCi0Jc3QJJWwxLCBbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX1BDXQotCWIJcmV0X3RyYXBfZW50cnkKLQkgc3QJJWwyLCBbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX05QQ10KLQotCS8qIGtlcm5lbCBrbm93cyB3aGF0IGl0IGlzIGRvaW5nLCBmaXh1cCBucGMgYW5kIGNvbnRpbnVlICovCi0xOgotCXN1YgklbDEsIDEsICVsMQotIAliCXJldF90cmFwX2VudHJ5CQotCSBzdAklbDEsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfTlBDXQotCi0jaWZuZGVmIENPTkZJR19TVU5PU19FTVVMCi0JLmFsaWduCTQKLQkuZ2xvYmwJc3Vub3Nfc3lzY2FsbAotc3Vub3Nfc3lzY2FsbDoKLQlTQVZFX0FMTF9IRUFECi0JIHJkCSV3aW0sICVsMwotCXdyCSVsMCwgUFNSX0VULCAlcHNyCi0Jbm9wCi0Jbm9wCi0JbW92CSVpMCwgJWw1Ci0JY2FsbAlkb19zdW5vc19zeXNjYWxsCi0JIGFkZAklc3AsIFNUQUNLRlJBTUVfU1osICVvMAotI2VuZGlmCi0KLQkvKiB7bmV0LCBvcGVufWJzZCBzeXN0ZW0gY2FsbHMgZW50ZXIgaGVyZS4uLiAqLwotCS5hbGlnbgk0Ci0JLmdsb2JsCWJzZF9zeXNjYWxsCi1ic2Rfc3lzY2FsbDoKLQkvKiBEaXJlY3QgYWNjZXNzIHRvIHVzZXIgcmVncywgbXVzdCBmYXN0ZXIuICovCi0JY21wCSVnMSwgTlJfU1lTQ0FMTFMKLQlibHUsYQkxZgotCSBzbGwJJWcxLCAyLCAlbDQKLQotCXNldAlzeXNfbmlfc3lzY2FsbCwgJWw3Ci0JYglic2RfaXNfdG9vX2hhcmQKLQkgbm9wCi0KLTE6Ci0JbGQJWyVsNyArICVsNF0sICVsNwotCi0JLmdsb2JsCWJzZF9pc190b29faGFyZAotYnNkX2lzX3Rvb19oYXJkOgotCXJkCSV3aW0sICVsMwotCVNBVkVfQUxMCi0KLQl3cgklbDAsIFBTUl9FVCwgJXBzcgotCVdSSVRFX1BBVVNFCi0KLTI6Ci0JbW92CSVpMCwgJW8wCi0JbW92CSVpMSwgJW8xCi0JbW92CSVpMiwgJW8yCi0JbW92CSVpMCwgJWw1Ci0JbW92CSVpMywgJW8zCi0JbW92CSVpNCwgJW80Ci0JY2FsbAklbDcKLQkgbW92CSVpNSwgJW81Ci0KLQlzdAklbzAsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTBdCi0Jc2V0CVBTUl9DLCAlZzIKLQljbXAJJW8wLCAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLCi0JYmdldQkxZgotCSBsZAlbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX1BTUl0sICVnMwotCi0JLyogU3lzdGVtIGNhbGwgc3VjY2VzcywgY2xlYXIgQ2FycnkgY29uZGl0aW9uIGNvZGUuICovCQkKLQlhbmRuCSVnMywgJWcyLCAlZzMKLQljbHIJJWw2Ci0JYgkyZgotCSBzdAklZzMsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfUFNSXQkKLQotMToKLQkvKiBTeXN0ZW0gY2FsbCBmYWlsdXJlLCBzZXQgQ2FycnkgY29uZGl0aW9uIGNvZGUuCi0JICogQWxzbywgZ2V0IGFicyhlcnJubykgdG8gcmV0dXJuIHRvIHRoZSBwcm9jZXNzLgotCSAqLwotCXN1YgklZzAsICVvMCwgJW8wCi0jaWYgMCAvKiBYWFggdG9kbyBYWFggKi8KLQlzZXRoaQklaGkoYnNkX3hsYXRiX3JvcmwpLCAlbzMKLQlvcgklbzMsICVsbyhic2RfeGxhdGJfcm9ybCksICVvMwotCXNsbAklbzAsIDIsICVvMAotCWxkCVslbzMgKyAlbzBdLCAlbzAKLSNlbmRpZgotCW1vdgkxLCAlbDYKLQlzdAklbzAsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTBdCi0Jb3IJJWczLCAlZzIsICVnMwotCXN0CSVnMywgWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9QU1JdCi0KLQkvKiBBZHZhbmNlIHRoZSBwYyBhbmQgbnBjIG92ZXIgdGhlIHRyYXAgaW5zdHJ1Y3Rpb24uICovCi0yOgotCWxkCVslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfTlBDXSwgJWwxCS8qIHBjICA9IG5wYyAgICovCi0JYWRkCSVsMSwgMHg0LCAlbDIJCQkvKiBucGMgPSBucGMrNCAqLwotCXN0CSVsMSwgWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9QQ10KLQliCXJldF90cmFwX2VudHJ5Ci0JIHN0CSVsMiwgWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9OUENdCi0KIC8qIFNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBGUFUgc3RhdGUgaXMgYmVzdCBkb25lIGZyb20gbG93bGV2ZWwgY29kZS4KICAqCiAgKiB2b2lkIGZwc2F2ZSh1bnNpZ25lZCBsb25nICpmcHJlZ3MsIHVuc2lnbmVkIGxvbmcgKmZzciwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VycnRibHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2VycnRibHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQxNGRmNy4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lcnJ0YmxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyogZXJydGJscy5jOiBFcnJvciBudW1iZXIgY29udmVyc2lvbiB0YWJsZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAyMDA3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKLSAqCi0gKiBCYXNlZCB1cG9uIHByZWxpbWluYXJ5IHdvcmsgd2hpY2ggaXM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IEFkcmlhbiBNLiBSb2RyaWd1ZXogKGFkcmlhbkByZW11cy5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaW5jbHVkZSA8YXNtL3NvbGVycm5vLmg+ICAgICAgICAvKiBTb2xhcmlzIGVycm5vcyAqLwotCi0vKiBIZXJlIGlzIHRoZSB0YWJsZSB3aGljaCBjb252ZXJ0cyBiZXR3ZWVuIExpbnV4IGVycm9yIG51bWJlciB2YWx1ZXMKLSAqIHRvIHRoZSBlcXVpdmFsZW50IHVuZGVyIFNvbGFyaXMuICBOb3RlIHRoYXQgc2luY2UgdGhlIExpbnV4IG9uZXMKLSAqIGhhdmUgYmVlbiBzZXQgdXAgdG8gbWF0Y2ggZXhhY3RseSB0aG9zZSBvZiBTdW5PUywgbm8gdHJhbnNsYXRpb24KLSAqIHRhYmxlIGlzIG5lZWRlZCBmb3IgdGhhdCBPUy4KLSAqLwotCi1pbnQgc29sYXJpc19lcnJub1tdID0gewotCTAsCi0JU09MX0VQRVJNLAotCVNPTF9FTk9FTlQsCi0JU09MX0VTUkNILAotCVNPTF9FSU5UUiwKLQlTT0xfRUlPLAotCVNPTF9FTlhJTywKLQlTT0xfRTJCSUcsCi0JU09MX0VOT0VYRUMsCi0JU09MX0VCQURGLAotCVNPTF9FQ0hJTEQsCi0JU09MX0VBR0FJTiwKLQlTT0xfRU5PTUVNLAotCVNPTF9FQUNDRVMsCi0JU09MX0VGQVVMVCwKLQlTT0xfTk9UQkxLLAotCVNPTF9FQlVTWSwKLQlTT0xfRUVYSVNULAotCVNPTF9FWERFViwKLQlTT0xfRU5PREVWLAotCVNPTF9FTk9URElSLAotCVNPTF9FSVNESVIsCi0JU09MX0VJTlZBTCwKLQlTT0xfRU5GSUxFLAotCVNPTF9FTUZJTEUsCi0JU09MX0VOT1RUWSwKLQlTT0xfRVRYVEJTWSwKLQlTT0xfRUZCSUcsCi0JU09MX0VOT1NQQywKLQlTT0xfRVNQSVBFLAotCVNPTF9FUk9GUywKLQlTT0xfRU1MSU5LLAotCVNPTF9FUElQRSwKLQlTT0xfRURPTSwKLQlTT0xfRVJBTkdFLAotCVNPTF9FV09VTERCTE9DSywKLQlTT0xfRUlOUFJPR1JFU1MsCi0JU09MX0VBTFJFQURZLAotCVNPTF9FTk9UU09DSywKLQlTT0xfRURFU1RBRERSUkVRLAotCVNPTF9FTVNHU0laRSwKLQlTT0xfRVBST1RPVFlQRSwKLQlTT0xfRU5PUFJPVE9PUFQsCi0JU09MX0VQUk9UT05PU1VQUE9SVCwKLQlTT0xfRVNPQ0tUTk9TVVBQT1JULAotCVNPTF9FT1BOT1RTVVBQLAotCVNPTF9FUEZOT1NVUFBPUlQsCi0JU09MX0VBRk5PU1VQUE9SVCwKLQlTT0xfRUFERFJJTlVTRSwKLQlTT0xfRUFERFJOT1RBVkFJTCwKLQlTT0xfRU5FVERPV04sCi0JU09MX0VORVRVTlJFQUNILAotCVNPTF9FTkVUUkVTRVQsCi0JU09MX0VDT05OQUJPUlRFRCwKLQlTT0xfRUNPTk5SRVNFVCwKLQlTT0xfRU5PQlVGUywKLQlTT0xfRUlTQ09OTiwKLQlTT0xfRU5PVE9OTiwKLQlTT0xfRVNIVVRET1dOLAotCVNPTF9FVE9PTUFOWVJFRlMsCi0JU09MX0VUSU1FRE9VVCwKLQlTT0xfRUNPTk5SRUZVU0VELAotCVNPTF9FTE9PUCwKLQlTT0xfRU5BTUVUT09MT05HLAotCVNPTF9FSE9TVERPV04sCi0JU09MX0VIT1NUVU5SRUFDSCwKLQlTT0xfRU5PVEVNUFRZLAotCVNPTF9FUFJPQ0xJTSwKLQlTT0xfRVVTRVJTLAotCVNPTF9FRFFVT1QsCi0JU09MX0VTVEFMRSwKLQlTT0xfRVJFTU9URSwKLQlTT0xfRU5PU1RSLAotCVNPTF9FVElNRSwKLQlTT0xfRU5PU1IsCi0JU09MX0VOT01TRywKLQlTT0xfRUJBRE1TRywKLQlTT0xfSURSTSwKLQlTT0xfRURFQURMSywKLQlTT0xfRU5PTENLLAotCVNPTF9FTk9ORVQsCi0JU09MX0VSUkVNT1RFLAotCVNPTF9FTk9MSU5LLAotCVNPTF9FQURWLAotCVNPTF9FU1JNTlQsCi0JU09MX0VDT01NLAotCVNPTF9FUFJPVE8sCi0JU09MX0VNVUxUSUhPUCwKLQlTT0xfRUlOVkFMLCAgICAvKiBFRE9URE9UIFhYWD8/PyAqLwotCVNPTF9SRU1DSEcsCi0JU09MX05PU1lTLAotCVNPTF9TVFJQSVBFLAotCVNPTF9FT1ZFUkZMT1csCi0JU09MX0VCQURGRCwKLQlTT0xfRUNIUk5HLAotCVNPTF9FTDJOU1lOQywKLQlTT0xfRUwzSExULAotCVNPTF9FTDNSU1QsCi0JU09MX05STkcsCi0JU09MX0VVTkFUQ0gsCi0JU09MX0VOT0NTSSwKLQlTT0xfRUwySExULAotCVNPTF9FQkFERSwKLQlTT0xfRUJBRFIsCi0JU09MX0VYRlVMTCwKLQlTT0xfRU5PQU5PLAotCVNPTF9FQkFEUlFDLAotCVNPTF9FQkFEU0xULAotCVNPTF9FREVBRExPQ0ssCi0JU09MX0VCRk9OVCwKLQlTT0xfRUxJQkVYRUMsCi0JU09MX0VOT0RBVEEsCi0JU09MX0VMSUJCQUQsCi0JU09MX0VOT1BLRywKLQlTT0xfRUxJQkFDQywKLQlTT0xfRU5PVFVOSVEsCi0JU09MX0VSRVNUQVJULAotCVNPTF9FVUNMRUFOLAotCVNPTF9FTk9UTkFNLAotCVNPTF9FTkFWQUlMLAotCVNPTF9FSVNOQU0sCi0JU09MX0VSRU1PVEVJTywKLQlTT0xfRUlMU0VRLAotCVNPTF9FTElCTUFYLAotCVNPTF9FTElCU0NOLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUwppbmRleCA5YTIxOWU4Li5iN2YxZTgxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5TCkBAIC03OCwxMSArNzgsNiBAQAogICAgICAgICAuYXNjaXogICJTcGFyYy1MaW51eCBzdW40ZSBzdXBwb3J0IGRvZXMgbm90IGV4aXN0XG5cbiIKIAkuYWxpZ24gNAogCi0jaWZuZGVmIENPTkZJR19TVU5PU19FTVVMCi0jdW5kZWYgU1VOT1NfU1lTQ0FMTF9UUkFQCi0jZGVmaW5lIFNVTk9TX1NZU0NBTExfVFJBUCBTVU5PU19OT19TWVNDQUxMX1RSQVAKLSNlbmRpZgotCiAJLyogVGhlIFNwYXJjIHRyYXAgdGFibGUsIGJvb3Rsb2FkZXIgZ2l2ZXMgdXMgY29udHJvbCBhdCBfc3RhcnQuICovCiAJLnRleHQKIAkuZ2xvYmwJc3RhcnQsIF9zdGV4dCwgX3N0YXJ0LCBfX3N0ZXh0CkBAIC0xNTgsNyArMTUzLDcgQEAKIHRfYmFkNzQ6QkFEX1RSQVAoMHg3NCkgQkFEX1RSQVAoMHg3NSkgQkFEX1RSQVAoMHg3NikgQkFEX1RSQVAoMHg3NykgQkFEX1RSQVAoMHg3OCkKIHRfYmFkNzk6QkFEX1RSQVAoMHg3OSkgQkFEX1RSQVAoMHg3YSkgQkFEX1RSQVAoMHg3YikgQkFEX1RSQVAoMHg3YykgQkFEX1RSQVAoMHg3ZCkKIHRfYmFkN2U6QkFEX1RSQVAoMHg3ZSkgQkFEX1RSQVAoMHg3ZikKLXRfc3Vub3M6U1VOT1NfU1lTQ0FMTF9UUkFQICAgICAgICAgICAgICAgICAgLyogU3VuT1MgU3lzdGVtIENhbGwgICAgICAgICAgICAgKi8KK3RfYmFkODA6QkFEX1RSQVAoMHg4MCkgICAgICAgICAgICAgICAgICAgICAgLyogU3VuT1MgU3lzdGVtIENhbGwgICAgICAgICAgICAgKi8KIHRfc2JrcHQ6QlJFQUtQT0lOVF9UUkFQICAgICAgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgQnJlYWtwb2ludC9LR0RCICAgICAgKi8KIHRfZGl2ejoJVFJBUF9FTlRSWSgweDgyLCBkb19od19kaXZ6ZXJvKSAgICAgLyogRGl2aWRlIGJ5IHplcm8gdHJhcCAgICAgICAgICAgKi8KIHRfZmx3aW46VFJBUF9FTlRSWSgweDgzLCBkb19mbHVzaF93aW5kb3dzKSAgLyogRmx1c2ggV2luZG93cyBUcmFwICAgICAgICAgICAgKi8KQEAgLTE2Niw4ICsxNjEsOCBAQAogdF9yY2hrOglCQURfVFJBUCgweDg1KSAgICAgICAgICAgICAgICAgICAgICAvKiBSYW5nZSBDaGVjayAgICAgICAgICAgICAgICAgICAqLwogdF9mdW5hbDpCQURfVFJBUCgweDg2KSAgICAgICAgICAgICAgICAgICAgICAvKiBGaXggVW5hbGlnbmVkIEFjY2VzcyBUcmFwICAgICAqLwogdF9pb3ZmOglCQURfVFJBUCgweDg3KSAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlZ2VyIE92ZXJmbG93IFRyYXAgICAgICAgICAqLwotdF9zbG93bDpTT0xBUklTX1NZU0NBTExfVFJBUCAgICAgICAgICAgICAgICAvKiBTbG93YXJpcyBTeXN0ZW0gQ2FsbCAgICAgICAgICAqLwotdF9uZXRiczpORVRCU0RfU1lTQ0FMTF9UUkFQICAgICAgICAgICAgICAgICAvKiBOZXQtQi5TLiBTeXN0ZW0gQ2FsbCAgICAgICAgICAqLwordF9iYWQ4ODpCQURfVFJBUCgweDg4KSAgICAgICAgICAgICAgICAgICAgICAvKiBTbG93YXJpcyBTeXN0ZW0gQ2FsbCAgICAgICAgICAqLwordF9iYWQ4OTpCQURfVFJBUCgweDg5KSAgICAgICAgICAgICAgICAgICAgICAvKiBOZXQtQi5TLiBTeXN0ZW0gQ2FsbCAgICAgICAgICAqLwogdF9iYWQ4YTpCQURfVFJBUCgweDhhKSBCQURfVFJBUCgweDhiKSBCQURfVFJBUCgweDhjKSBCQURfVFJBUCgweDhkKSBCQURfVFJBUCgweDhlKQogdF9iYWQ4ZjpCQURfVFJBUCgweDhmKQogdF9saW51eDpMSU5VWF9TWVNDQUxMX1RSQVAgICAgICAgICAgICAgICAgICAvKiBMaW51eCBTeXN0ZW0gQ2FsbCAgICAgICAgICAgICAqLwpAQCAtMTc4LDcgKzE3Myw3IEBACiB0X3NldGNjOlNFVENDX1RSQVAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBDb25kaXRpb24gQ29kZXMgICAgICAgICAgICovCiB0X2dldHBzcjpHRVRQU1JfVFJBUCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBQU1IgUmVnaXN0ZXIgICAgICAgICAgICAgICovCiB0X2JhZGEzOkJBRF9UUkFQKDB4YTMpIEJBRF9UUkFQKDB4YTQpIEJBRF9UUkFQKDB4YTUpIEJBRF9UUkFQKDB4YTYpCi10X3Nsb3dpOklORElSRUNUX1NPTEFSSVNfU1lTQ0FMTCgxNTYpCit0X2JhZGE3OkJBRF9UUkFQKDB4YTcpCiB0X2JhZGE4OkJBRF9UUkFQKDB4YTgpIEJBRF9UUkFQKDB4YTkpIEJBRF9UUkFQKDB4YWEpIEJBRF9UUkFQKDB4YWIpCiB0X2JhZGFjOkJBRF9UUkFQKDB4YWMpIEJBRF9UUkFQKDB4YWQpIEJBRF9UUkFQKDB4YWUpIEJBRF9UUkFQKDB4YWYpIEJBRF9UUkFQKDB4YjApCiB0X2JhZGIxOkJBRF9UUkFQKDB4YjEpIEJBRF9UUkFQKDB4YjIpIEJBRF9UUkFQKDB4YjMpIEJBRF9UUkFQKDB4YjQpIEJBRF9UUkFQKDB4YjUpCkBAIC0yNDMsMTkgKzIzOCwxOSBAQAogCUJBRF9UUkFQKDB4NzQpIEJBRF9UUkFQKDB4NzUpIEJBRF9UUkFQKDB4NzYpIEJBRF9UUkFQKDB4NzcpIEJBRF9UUkFQKDB4NzgpCiAJQkFEX1RSQVAoMHg3OSkgQkFEX1RSQVAoMHg3YSkgQkFEX1RSQVAoMHg3YikgQkFEX1RSQVAoMHg3YykgQkFEX1RSQVAoMHg3ZCkKIAlCQURfVFJBUCgweDdlKSBCQURfVFJBUCgweDdmKQotCVNVTk9TX1NZU0NBTExfVFJBUCAKKwlCQURfVFJBUCgweDgwKQogCUJSRUFLUE9JTlRfVFJBUAogCVRSQVBfRU5UUlkoMHg4MiwgZG9faHdfZGl2emVybykKIAlUUkFQX0VOVFJZKDB4ODMsIGRvX2ZsdXNoX3dpbmRvd3MpIEJBRF9UUkFQKDB4ODQpIEJBRF9UUkFQKDB4ODUpCi0JQkFEX1RSQVAoMHg4NikgQkFEX1RSQVAoMHg4NykgU09MQVJJU19TWVNDQUxMX1RSQVAKLQlORVRCU0RfU1lTQ0FMTF9UUkFQIEJBRF9UUkFQKDB4OGEpIEJBRF9UUkFQKDB4OGIpIEJBRF9UUkFQKDB4OGMpCisJQkFEX1RSQVAoMHg4NikgQkFEX1RSQVAoMHg4NykgQkFEX1RSQVAoMHg4OCkKKwlCQURfVFJBUCgweDg5KSBCQURfVFJBUCgweDhhKSBCQURfVFJBUCgweDhiKSBCQURfVFJBUCgweDhjKQogCUJBRF9UUkFQKDB4OGQpIEJBRF9UUkFQKDB4OGUpIEJBRF9UUkFQKDB4OGYpCiAJTElOVVhfU1lTQ0FMTF9UUkFQIEJBRF9UUkFQKDB4OTEpIEJBRF9UUkFQKDB4OTIpIEJBRF9UUkFQKDB4OTMpIEJBRF9UUkFQKDB4OTQpCiAJQkFEX1RSQVAoMHg5NSkgQkFEX1RSQVAoMHg5NikgQkFEX1RSQVAoMHg5NykgQkFEX1RSQVAoMHg5OCkgQkFEX1RSQVAoMHg5OSkKIAlCQURfVFJBUCgweDlhKSBCQURfVFJBUCgweDliKSBCQURfVFJBUCgweDljKSBCQURfVFJBUCgweDlkKSBCQURfVFJBUCgweDllKQogCUJBRF9UUkFQKDB4OWYpIEdFVENDX1RSQVAgU0VUQ0NfVFJBUCBHRVRQU1JfVFJBUAogCUJBRF9UUkFQKDB4YTMpIEJBRF9UUkFQKDB4YTQpIEJBRF9UUkFQKDB4YTUpIEJBRF9UUkFQKDB4YTYpCi0JSU5ESVJFQ1RfU09MQVJJU19TWVNDQUxMKDE1NikgQkFEX1RSQVAoMHhhOCkgQkFEX1RSQVAoMHhhOSkgQkFEX1RSQVAoMHhhYSkgQkFEX1RSQVAoMHhhYikKKwlCQURfVFJBUCgweGE3KSBCQURfVFJBUCgweGE4KSBCQURfVFJBUCgweGE5KSBCQURfVFJBUCgweGFhKSBCQURfVFJBUCgweGFiKQogCUJBRF9UUkFQKDB4YWMpIEJBRF9UUkFQKDB4YWQpIEJBRF9UUkFQKDB4YWUpIEJBRF9UUkFQKDB4YWYpIEJBRF9UUkFQKDB4YjApCiAJQkFEX1RSQVAoMHhiMSkgQkFEX1RSQVAoMHhiMikgQkFEX1RSQVAoMHhiMykgQkFEX1RSQVAoMHhiNCkgQkFEX1RSQVAoMHhiNSkKIAlCQURfVFJBUCgweGI2KSBCQURfVFJBUCgweGI3KSBCQURfVFJBUCgweGI4KSBCQURfVFJBUCgweGI5KSBCQURfVFJBUCgweGJhKQpAQCAtMzExLDE5ICszMDYsMTkgQEAKIAlCQURfVFJBUCgweDc0KSBCQURfVFJBUCgweDc1KSBCQURfVFJBUCgweDc2KSBCQURfVFJBUCgweDc3KSBCQURfVFJBUCgweDc4KQogCUJBRF9UUkFQKDB4NzkpIEJBRF9UUkFQKDB4N2EpIEJBRF9UUkFQKDB4N2IpIEJBRF9UUkFQKDB4N2MpIEJBRF9UUkFQKDB4N2QpCiAJQkFEX1RSQVAoMHg3ZSkgQkFEX1RSQVAoMHg3ZikKLQlTVU5PU19TWVNDQUxMX1RSQVAgCisJQkFEX1RSQVAoMHg4MCkKIAlCUkVBS1BPSU5UX1RSQVAKIAlUUkFQX0VOVFJZKDB4ODIsIGRvX2h3X2Rpdnplcm8pCiAJVFJBUF9FTlRSWSgweDgzLCBkb19mbHVzaF93aW5kb3dzKSBCQURfVFJBUCgweDg0KSBCQURfVFJBUCgweDg1KQotCUJBRF9UUkFQKDB4ODYpIEJBRF9UUkFQKDB4ODcpIFNPTEFSSVNfU1lTQ0FMTF9UUkFQCi0JTkVUQlNEX1NZU0NBTExfVFJBUCBCQURfVFJBUCgweDhhKSBCQURfVFJBUCgweDhiKSBCQURfVFJBUCgweDhjKQorCUJBRF9UUkFQKDB4ODYpIEJBRF9UUkFQKDB4ODcpIEJBRF9UUkFQKDB4ODgpCisJQkFEX1RSQVAoMHg4OSkgQkFEX1RSQVAoMHg4YSkgQkFEX1RSQVAoMHg4YikgQkFEX1RSQVAoMHg4YykKIAlCQURfVFJBUCgweDhkKSBCQURfVFJBUCgweDhlKSBCQURfVFJBUCgweDhmKQogCUxJTlVYX1NZU0NBTExfVFJBUCBCQURfVFJBUCgweDkxKSBCQURfVFJBUCgweDkyKSBCQURfVFJBUCgweDkzKSBCQURfVFJBUCgweDk0KQogCUJBRF9UUkFQKDB4OTUpIEJBRF9UUkFQKDB4OTYpIEJBRF9UUkFQKDB4OTcpIEJBRF9UUkFQKDB4OTgpIEJBRF9UUkFQKDB4OTkpCiAJQkFEX1RSQVAoMHg5YSkgQkFEX1RSQVAoMHg5YikgQkFEX1RSQVAoMHg5YykgQkFEX1RSQVAoMHg5ZCkgQkFEX1RSQVAoMHg5ZSkKIAlCQURfVFJBUCgweDlmKSBHRVRDQ19UUkFQIFNFVENDX1RSQVAgR0VUUFNSX1RSQVAKIAlCQURfVFJBUCgweGEzKSBCQURfVFJBUCgweGE0KSBCQURfVFJBUCgweGE1KSBCQURfVFJBUCgweGE2KQotCUlORElSRUNUX1NPTEFSSVNfU1lTQ0FMTCgxNTYpIEJBRF9UUkFQKDB4YTgpIEJBRF9UUkFQKDB4YTkpIEJBRF9UUkFQKDB4YWEpIEJBRF9UUkFQKDB4YWIpCisJQkFEX1RSQVAoMHhhNykgQkFEX1RSQVAoMHhhOCkgQkFEX1RSQVAoMHhhOSkgQkFEX1RSQVAoMHhhYSkgQkFEX1RSQVAoMHhhYikKIAlCQURfVFJBUCgweGFjKSBCQURfVFJBUCgweGFkKSBCQURfVFJBUCgweGFlKSBCQURfVFJBUCgweGFmKSBCQURfVFJBUCgweGIwKQogCUJBRF9UUkFQKDB4YjEpIEJBRF9UUkFQKDB4YjIpIEJBRF9UUkFQKDB4YjMpIEJBRF9UUkFQKDB4YjQpIEJBRF9UUkFQKDB4YjUpCiAJQkFEX1RSQVAoMHhiNikgQkFEX1RSQVAoMHhiNykgQkFEX1RSQVAoMHhiOCkgQkFEX1RSQVAoMHhiOSkgQkFEX1RSQVAoMHhiYSkKQEAgLTM3OSwxOSArMzc0LDE5IEBACiAJQkFEX1RSQVAoMHg3NCkgQkFEX1RSQVAoMHg3NSkgQkFEX1RSQVAoMHg3NikgQkFEX1RSQVAoMHg3NykgQkFEX1RSQVAoMHg3OCkKIAlCQURfVFJBUCgweDc5KSBCQURfVFJBUCgweDdhKSBCQURfVFJBUCgweDdiKSBCQURfVFJBUCgweDdjKSBCQURfVFJBUCgweDdkKQogCUJBRF9UUkFQKDB4N2UpIEJBRF9UUkFQKDB4N2YpCi0JU1VOT1NfU1lTQ0FMTF9UUkFQICAKKwlCQURfVFJBUCgweDgwKQogCUJSRUFLUE9JTlRfVFJBUAogCVRSQVBfRU5UUlkoMHg4MiwgZG9faHdfZGl2emVybykKIAlUUkFQX0VOVFJZKDB4ODMsIGRvX2ZsdXNoX3dpbmRvd3MpIEJBRF9UUkFQKDB4ODQpIEJBRF9UUkFQKDB4ODUpCi0JQkFEX1RSQVAoMHg4NikgQkFEX1RSQVAoMHg4NykgU09MQVJJU19TWVNDQUxMX1RSQVAKLQlORVRCU0RfU1lTQ0FMTF9UUkFQIEJBRF9UUkFQKDB4OGEpIEJBRF9UUkFQKDB4OGIpIEJBRF9UUkFQKDB4OGMpCisJQkFEX1RSQVAoMHg4NikgQkFEX1RSQVAoMHg4NykgQkFEX1RSQVAoMHg4OCkKKwlCQURfVFJBUCgweDg5KSBCQURfVFJBUCgweDhhKSBCQURfVFJBUCgweDhiKSBCQURfVFJBUCgweDhjKQogCUJBRF9UUkFQKDB4OGQpIEJBRF9UUkFQKDB4OGUpIEJBRF9UUkFQKDB4OGYpCiAJTElOVVhfU1lTQ0FMTF9UUkFQIEJBRF9UUkFQKDB4OTEpIEJBRF9UUkFQKDB4OTIpIEJBRF9UUkFQKDB4OTMpIEJBRF9UUkFQKDB4OTQpCiAJQkFEX1RSQVAoMHg5NSkgQkFEX1RSQVAoMHg5NikgQkFEX1RSQVAoMHg5NykgQkFEX1RSQVAoMHg5OCkgQkFEX1RSQVAoMHg5OSkKIAlCQURfVFJBUCgweDlhKSBCQURfVFJBUCgweDliKSBCQURfVFJBUCgweDljKSBCQURfVFJBUCgweDlkKSBCQURfVFJBUCgweDllKQogCUJBRF9UUkFQKDB4OWYpIEdFVENDX1RSQVAgU0VUQ0NfVFJBUCBHRVRQU1JfVFJBUAogCUJBRF9UUkFQKDB4YTMpIEJBRF9UUkFQKDB4YTQpIEJBRF9UUkFQKDB4YTUpIEJBRF9UUkFQKDB4YTYpCi0JSU5ESVJFQ1RfU09MQVJJU19TWVNDQUxMKDE1NikgQkFEX1RSQVAoMHhhOCkgQkFEX1RSQVAoMHhhOSkgQkFEX1RSQVAoMHhhYSkgQkFEX1RSQVAoMHhhYikKKwlCQURfVFJBUCgweGE3KSBCQURfVFJBUCgweGE4KSBCQURfVFJBUCgweGE5KSBCQURfVFJBUCgweGFhKSBCQURfVFJBUCgweGFiKQogCUJBRF9UUkFQKDB4YWMpIEJBRF9UUkFQKDB4YWQpIEJBRF9UUkFQKDB4YWUpIEJBRF9UUkFQKDB4YWYpIEJBRF9UUkFQKDB4YjApCiAJQkFEX1RSQVAoMHhiMSkgQkFEX1RSQVAoMHhiMikgQkFEX1RSQVAoMHhiMykgQkFEX1RSQVAoMHhiNCkgQkFEX1RSQVAoMHhiNSkKIAlCQURfVFJBUCgweGI2KSBCQURfVFJBUCgweGI3KSBCQURfVFJBUCgweGI4KSBCQURfVFJBUCgweGI5KSBCQURfVFJBUCgweGJhKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVkLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYwppbmRleCAzMTNkMTYyLi41OWU5MzQ0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYwpAQCAtMyw2ICszLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9hdXhpby5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTkxODZjZS4uNzBjMGRkMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTM5LDE4ICsxMzksMTIgQEAKIAogI2VuZGlmCiAKLWV4dGVybiBjaGFyIHJlYm9vdF9jb21tYW5kIFtdOwotCi1leHRlcm4gdm9pZCAoKnByb21fcGFsZXR0ZSkoaW50KTsKLQogLyogWFhYIGNsaS9zdGkgLT4gbG9jYWxfaXJxX3h4eCBoZXJlLCBjaGVjayB0aGlzIHdvcmtzIG9uY2UgU01QIGlzIGZpeGVkLiAqLwogdm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKIHsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbWRlbGF5KDgpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JaWYgKHByb21fcGFsZXR0ZSkKLQkJcHJvbV9wYWxldHRlICgxKTsKIAlwcm9tX2hhbHQoKTsKIAlwYW5pYygiSGFsdCBmYWlsZWQhIik7CiB9CkBAIC0xNjUsOCArMTU5LDYgQEAKIAogCXAgPSBzdHJjaHIgKHJlYm9vdF9jb21tYW5kLCAnXG4nKTsKIAlpZiAocCkgKnAgPSAwOwotCWlmIChwcm9tX3BhbGV0dGUpCi0JCXByb21fcGFsZXR0ZSAoMSk7CiAJaWYgKGNtZCkKIAkJcHJvbV9yZWJvb3QoY21kKTsKIAlpZiAoKnJlYm9vdF9jb21tYW5kKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA1YjU0ZjExLi43ZjQ0YWU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnZpZXc7CiAJaW50IHJldDsKIAotCXZpZXcgPSB0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoY2hpbGQpOworCXZpZXcgPSB0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoY3VycmVudCk7CiAKIAlzd2l0Y2gocmVxdWVzdCkgewogCWNhc2UgUFRSQUNFX0dFVFJFR1M6IHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NjbG93LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zY2xvdy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzZlMzdjLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NjbG93LlMKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKiBzY2xvdy5TOiBMb3cgbGV2ZWwgc3BlY2lhbCBzeXNjYWxsIGhhbmRsaW5nLgotICogICAgICAgICAgQmFzaWNhbGx5IHRoZXNlIGFyZSBjYXNlcyB3aGVyZSB3ZSBjYW4gY29tcGxldGVseQotICogICAgICAgICAgaGFuZGxlIHRoZSBzeXN0ZW0gY2FsbCB3aXRob3V0IHNhdmluZyBhbnkgc3RhdGUKLSAqICAgICAgICAgIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBwcm9jZXNzIHdpbGwgbm90IHNsZWVwLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vd2lubWFjcm8uaD4KLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vcHNyLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2RlZmluZSBDQ19BTkRfUkVUVCAgXAotCXNldAlQU1JfQywgJWw0OyBcCi0JYW5kbgklbDAsICVsNCwgJWw0OyBcCi0Jd3IJJWw0LCAweDAsICVwc3I7IFwKLQlub3A7IG5vcDsgbm9wOyBcCi0Jam1wCSVsMjsgXAotCXJldHQJJWwyICsgNDsKLQotI2RlZmluZSBTQ19BTkRfUkVUVCAgXAotCXNldAlQU1JfQywgJWw0OyBcCi0Jb3IJJWwwLCAlbDQsICVsNDsgXAotCXdyCSVsNCwgMHgwLCAlcHNyOyBcCi0Jbm9wOyBub3A7IG5vcDsgXAotCWptcAklbDI7IFwKLQlyZXR0CSVsMiArIDQ7Ci0KLSNkZWZpbmUgTEFCRUwoZnVuYykgIGZ1bmMjI19sb3cKLQotCS5nbG9ibAlMQUJFTChzdW5vc25vcCkKLUxBQkVMKHN1bm9zbm9wKToKLQlDQ19BTkRfUkVUVAotCi0jaWYgKEFTSVpfdGFza191aWQgPT0gMiAmJiBBU0laX3Rhc2tfZXVpZCA9PSAyKQotCS5nbG9ibAlMQUJFTChzdW5vc2dldHVpZCkKLUxBQkVMKHN1bm9zZ2V0dWlkKToKLQlMT0FEX0NVUlJFTlQobDQsIGw1KQotCWxkCVslbDQgKyBUSV9UQVNLXSwgJWw0Ci0JbGR1aAlbJWw0ICsgQU9GRl90YXNrX3VpZF0sICVpMAotCWxkdWgJWyVsNCArIEFPRkZfdGFza19ldWlkXSwgJWkxCi0JQ0NfQU5EX1JFVFQKLSNlbmRpZgotCi0jaWYgKEFTSVpfdGFza19naWQgPT0gMiAmJiBBU0laX3Rhc2tfZWdpZCA9PSAyKQotCS5nbG9ibAlMQUJFTChzdW5vc2dldGdpZCkKLUxBQkVMKHN1bm9zZ2V0Z2lkKToKLQlMT0FEX0NVUlJFTlQobDQsIGw1KQotCWxkCVslbDQgKyBUSV9UQVNLXSwgJWw0Ci0JbGR1aAlbJWw0ICsgQU9GRl90YXNrX2dpZF0sICVpMAotCWxkdWgJWyVsNCArIEFPRkZfdGFza19lZ2lkXSwgJWkxCi0JQ0NfQU5EX1JFVFQKLSNlbmRpZgotCi0JLmdsb2JsCUxBQkVMKHN1bm9zbWN0bCkKLUxBQkVMKHN1bm9zbWN0bCk6Ci0JbW92CTAsICVpMAotCUNDX0FORF9SRVRUCi0KLQkuZ2xvYmwJTEFCRUwoc3Vub3NnZHRzaXplKQotTEFCRUwoc3Vub3NnZHRzaXplKToJCi0JbW92CTI1NiwgJWkwCi0JQ0NfQU5EX1JFVFQKLQotCS5nbG9ibAlMQUJFTChnZXRwYWdlc2l6ZSkKLUxBQkVMKGdldHBhZ2VzaXplKToKLQlzZXQJUEFHRV9TSVpFLCAlaTAKLQlDQ19BTkRfUkVUVAotCi0JLyogWFhYIHN5c19uaWNlKCkgWFhYICovCi0JLyogWFhYIHN5c19zZXRwcmlvcml0eSgpIFhYWCAqLwotCS8qIFhYWCBzeXNfZ2V0cHJpb3JpdHkoKSBYWFggKi8KLQkvKiBYWFggc3lzX3NldHJlZ2lkKCkgWFhYICovCi0JLyogWFhYIHN5c19zZXRnaWQoKSBYWFggKi8KLQkvKiBYWFggc3lzX3NldHJldWlkKCkgWFhYICovCi0JLyogWFhYIHN5c19zZXR1aWQoKSBYWFggKi8KLQkvKiBYWFggc3lzX3NldGZzdWlkKCkgWFhYICovCi0JLyogWFhYIHN5c19zZXRmc2dpZCgpIFhYWCAqLwotCS8qIFhYWCBzeXNfc2V0cGdpZCgpIFhYWCAqLwotCS8qIFhYWCBzeXNfZ2V0cGdpZCgpIFhYWCAqLwotCS8qIFhYWCBzeXNfc2V0c2lkKCkgWFhYICovCi0JLyogWFhYIHN5c19nZXRzaWQoKSBYWFggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2VtYXBob3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzdjMWEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyogJElkOiBzZW1hcGhvcmUuYyx2IDEuNyAyMDAxLzA0LzE4IDIxOjA2OjA1IGRhdmVtIEV4cCAkICovCi0KLS8qIHNwYXJjMzIgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLCBiYXNlZCBvbiBpMzg2IHZlcnNpb24gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0KLS8qCi0gKiBTZW1hcGhvcmVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhIHR3by13YXkgY291bnRlcjoKLSAqIFRoZSAiY291bnQiIHZhcmlhYmxlIGlzIGRlY3JlbWVudGVkIGZvciBlYWNoIHByb2Nlc3MKLSAqIHRoYXQgdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2VtYXBob3JlLCB3aGlsZSB0aGUgInNsZWVwaW5nIgotICogdmFyaWFibGUgaXMgYSBjb3VudCBvZiBzdWNoIGFjcXVpcmVzLgotICoKLSAqIE5vdGFibHksIHRoZSBpbmxpbmUgInVwKCkiIGFuZCAiZG93bigpIiBmdW5jdGlvbnMgY2FuCi0gKiBlZmZpY2llbnRseSB0ZXN0IGlmIHRoZXkgbmVlZCB0byBkbyBhbnkgZXh0cmEgd29yayAodXAKLSAqIG5lZWRzIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIGNvdW50IHdhcyBuZWdhdGl2ZSBiZWZvcmUKLSAqIHRoZSBpbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqICJzbGVlcGluZyIgYW5kIHRoZSBjb250ZW50aW9uIHJvdXRpbmUgb3JkZXJpbmcgaXMKLSAqIHByb3RlY3RlZCBieSB0aGUgc2VtYXBob3JlIHNwaW5sb2NrLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMKLSAqIGNvbnRlbnRpb24gb24gdGhlIGxvY2ssIGFuZCBhcyBzdWNoIGFsbCB0aGlzIGlzIHRoZQotICogIm5vbi1jcml0aWNhbCIgcGFydCBvZiB0aGUgd2hvbGUgc2VtYXBob3JlIGJ1c2luZXNzLiBUaGUKLSAqIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGlubGluZSBzdHVmZiBpbiA8YXNtL3NlbWFwaG9yZS5oPgotICogd2hlcmUgd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEganVtcHMgYW5kIGNhbGxzLgotICovCi0KLS8qCi0gKiBMb2dpYzoKLSAqICAtIG9ubHkgb24gYSBib3VuZGFyeSBjb25kaXRpb24gZG8gd2UgbmVlZCB0byBjYXJlLiBXaGVuIHdlIGdvCi0gKiAgICBmcm9tIGEgbmVnYXRpdmUgY291bnQgdG8gYSBub24tbmVnYXRpdmUsIHdlIHdha2UgcGVvcGxlIHVwLgotICogIC0gd2hlbiB3ZSBnbyBmcm9tIGEgbm9uLW5lZ2F0aXZlIGNvdW50IHRvIGEgbmVnYXRpdmUgZG8gd2UKLSAqICAgIChhKSBzeW5jaHJvbml6ZSB3aXRoIHRoZSAic2xlZXBlciIgY291bnQgYW5kIChiKSBtYWtlIHN1cmUKLSAqICAgIHRoYXQgd2UncmUgb24gdGhlIHdha2V1cCBsaXN0IGJlZm9yZSB3ZSBzeW5jaHJvbml6ZSBzbyB0aGF0Ci0gKiAgICB3ZSBjYW5ub3QgbG9zZSB3YWtldXAgZXZlbnRzLgotICovCi0KLXZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLX0KLQotc3RhdGljIERFRklORV9TUElOTE9DSyhzZW1hcGhvcmVfbG9jayk7Ci0KLXZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKLQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCXNwaW5fbG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQlzZW0tPnNsZWVwZXJzKys7Ci0JZm9yICg7OykgewotCQlpbnQgc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzOwotCi0JCS8qCi0JCSAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JCSAqIHBsYXlpbmcsIGJlY2F1c2Ugd2Ugb3duIHRoZSBzcGlubG9jay4KLQkJICovCi0JCWlmICghYXRvbWljMjRfYWRkX25lZ2F0aXZlKHNsZWVwZXJzIC0gMSwgJnNlbS0+Y291bnQpKSB7Ci0JCQlzZW0tPnNsZWVwZXJzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNlbS0+c2xlZXBlcnMgPSAxOwkvKiB1cyAtIHNlZSAtMSBhYm92ZSAqLwotCQlzcGluX3VubG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQotCQlzY2hlZHVsZSgpOwotCQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0JCXNwaW5fbG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLX0KLQotaW50IF9fc2NoZWQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKLQl0c2stPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQlzcGluX2xvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0Jc2VtLT5zbGVlcGVycyArKzsKLQlmb3IgKDs7KSB7Ci0JCWludCBzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnM7Ci0KLQkJLyoKLQkJICogV2l0aCBzaWduYWxzIHBlbmRpbmcsIHRoaXMgdHVybnMgaW50bwotCQkgKiB0aGUgdHJ5bG9jayBmYWlsdXJlIGNhc2UgLSB3ZSB3b24ndCBiZQotCQkgKiBzbGVlcGluZywgYW5kIHdlKiBjYW4ndCBnZXQgdGhlIGxvY2sgYXMKLQkJICogaXQgaGFzIGNvbnRlbnRpb24uIEp1c3QgY29ycmVjdCB0aGUgY291bnQKLQkJICogYW5kIGV4aXQuCi0JCSAqLwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldHZhbCA9IC1FSU5UUjsKLQkJCXNlbS0+c2xlZXBlcnMgPSAwOwotCQkJYXRvbWljMjRfYWRkKHNsZWVwZXJzLCAmc2VtLT5jb3VudCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JCSAqIHBsYXlpbmcsIGJlY2F1c2Ugd2Ugb3duIHRoZSBzcGlubG9jay4gVGhlCi0JCSAqICItMSIgaXMgYmVjYXVzZSB3ZSdyZSBzdGlsbCBob3BpbmcgdG8gZ2V0Ci0JCSAqIHRoZSBsb2NrLgotCQkgKi8KLQkJaWYgKCFhdG9taWMyNF9hZGRfbmVnYXRpdmUoc2xlZXBlcnMgLSAxLCAmc2VtLT5jb3VudCkpIHsKLQkJCXNlbS0+c2xlZXBlcnMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2VtLT5zbGVlcGVycyA9IDE7CS8qIHVzIC0gc2VlIC0xIGFib3ZlICovCi0JCXNwaW5fdW5sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOwotCi0JCXNjaGVkdWxlKCk7Ci0JCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCXNwaW5fbG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKgotICogVHJ5bG9jayBmYWlsZWQgLSBtYWtlIHN1cmUgd2UgY29ycmVjdCBmb3IKLSAqIGhhdmluZyBkZWNyZW1lbnRlZCB0aGUgY291bnQuCi0gKi8KLWludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCBzbGVlcGVyczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV9sb2NrLCBmbGFncyk7Ci0Jc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzICsgMTsKLQlzZW0tPnNsZWVwZXJzID0gMDsKLQotCS8qCi0JICogQWRkICJldmVyeWJvZHkgZWxzZSIgYW5kIHVzIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JICogcGxheWluZywgYmVjYXVzZSB3ZSBvd24gdGhlIHNwaW5sb2NrLgotCSAqLwotCWlmICghYXRvbWljMjRfYWRkX25lZ2F0aXZlKHNsZWVwZXJzLCAmc2VtLT5jb3VudCkpCi0JCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfbG9jaywgZmxhZ3MpOwotCXJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwLmMKaW5kZXggM2NmNzhmMS4uM2MxMzEzNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jCkBAIC02NSw3ICs2NSw2IEBACiAgKi8KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJhcGJhc2U7Ci12b2lkICgqcHJvbV9wYWxldHRlKShpbnQpOwogCiAvKiBQcmV0dHkgc2ljayBlaD8gKi8KIHZvaWQgcHJvbV9zeW5jX21lKHZvaWQpCkBAIC04MCw4ICs3OSw2IEBACiAJCQkgICAgICJub3Bcblx0IgogCQkJICAgICAibm9wXG5cdCIgOiA6ICJyIiAoJnRyYXBiYXNlKSk7CiAKLQlpZiAocHJvbV9wYWxldHRlKQotCQlwcm9tX3BhbGV0dGUoMSk7CiAJcHJvbV9wcmludGYoIlBST00gU1lOQyBDT01NQU5ELi4uXG4iKTsKIAlzaG93X2ZyZWVfYXJlYXMoKTsKIAlpZihjdXJyZW50LT5waWQgIT0gMCkgewpAQCAtMTkxLDcgKzE4OCw2IEBACiBleHRlcm4gdm9pZCBzdW40Y19wcm9iZV92YWModm9pZCk7CiBleHRlcm4gY2hhciBjcHV0eXB2YWw7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwotZXh0ZXJuIHZvaWQgcGFuaWNfc2V0dXAoY2hhciAqLCBpbnQgKik7CiAKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCByb290X2ZsYWdzOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHJvb3RfZGV2OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWwuYwppbmRleCA5OTk0Y2FjLi4xZjczMDYxOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9zdnI0Lmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CS8qIGZsdXNoX3NpZ19pbnNucyAqLwpAQCAtNDU0LDcgKzQ1Myw2IEBACiAJCQlicmVhazsKIAkJY2FzZSBTSUdTWVM6CiAJCQlpZiAoaW5mby0+c2lfY29kZSA9PSAoX19TSV9GQVVMVHwweDEwMCkpIHsKLQkJCQkvKiBTZWUgc3lzX3N1bm9zLmMgKi8KIAkJCQlzaWdfY29kZSA9IGluZm8tPnNpX3RyYXBubzsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTY3NiwyOTEgKzY3NCwxNyBAQAogCWZvcmNlX3NpZ3NlZ3Yoc2lnbm8sIGN1cnJlbnQpOwogfQogCi0vKiBTZXR1cCBhIFNvbGFyaXMgc3RhY2sgZnJhbWUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotc2V0dXBfc3ZyNF9mcmFtZShzdHJ1Y3Qgc2lnYWN0aW9uICpzYSwgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBucGMsCi0JCSBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpZ25yLCBzaWdzZXRfdCAqb2xkc2V0KQotewotCXN2cjRfc2lnbmFsX2ZyYW1lX3QgX191c2VyICpzZnA7Ci0Jc3ZyNF9ncmVnc2V0X3QgIF9fdXNlciAqZ3I7Ci0Jc3ZyNF9zaWdpbmZvX3QgIF9fdXNlciAqc2k7Ci0Jc3ZyNF9tY29udGV4dF90IF9fdXNlciAqbWM7Ci0Jc3ZyNF9nd2luZG93c190IF9fdXNlciAqZ3c7Ci0Jc3ZyNF91Y29udGV4dF90IF9fdXNlciAqdWM7Ci0Jc3ZyNF9zaWdzZXRfdAlzZXR2OwotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdHAgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Ci0JaW50IHdpbmRvdyA9IDAsIGVycjsKLQotCXN5bmNocm9uaXplX3VzZXJfc3RhY2soKTsKLQlzZnAgPSAoc3ZyNF9zaWduYWxfZnJhbWVfdCBfX3VzZXIgKikKLQkJZ2V0X3NpZ2ZyYW1lKHNhLCByZWdzLCBTVlI0X1NGX0FMSUdORUQgKyBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3cpKTsKLQotCWlmIChpbnZhbGlkX2ZyYW1lX3BvaW50ZXIoc2ZwLCBzaXplb2YoKnNmcCkpKQotCQlnb3RvIHNpZ2lsbF9hbmRfcmV0dXJuOwotCi0JLyogU3RhcnQgd2l0aCBhIGNsZWFuIGZyYW1lIHBvaW50ZXIgYW5kIGZpbGwgaXQgKi8KLQllcnIgPSBfX2NsZWFyX3VzZXIoc2ZwLCBzaXplb2YoKnNmcCkpOwotCi0JLyogU2V0dXAgY29udmVuaWVuY2UgdmFyaWFibGVzICovCi0Jc2kgPSAmc2ZwLT5zaTsKLQl1YyA9ICZzZnAtPnVjOwotCWd3ID0gJnNmcC0+Z3c7Ci0JbWMgPSAmdWMtPm1jb250ZXh0OwotCWdyID0gJm1jLT5ncmVnOwotCQotCS8qIEZJWE1FOiB3aGVyZSBhbSBJIHN1cHBvc2VkIHRvIHB1dCB0aGlzPwotCSAqIHNjLT5zaWdjX29uc3RhY2sgPSBvbGRfc3RhdHVzOwotCSAqIGFueXdheXMsIGl0IGRvZXMgbm90IGxvb2sgbGlrZSBpdCBpcyB1c2VkIGZvciBhbnl0aGluZyBhdCBhbGwuCi0JICovCi0Jc2V0di5zaWdiaXRzWzBdID0gb2xkc2V0LT5zaWdbMF07Ci0Jc2V0di5zaWdiaXRzWzFdID0gb2xkc2V0LT5zaWdbMV07Ci0JaWYgKF9OU0lHX1dPUkRTID49IDQpIHsKLQkJc2V0di5zaWdiaXRzWzJdID0gb2xkc2V0LT5zaWdbMl07Ci0JCXNldHYuc2lnYml0c1szXSA9IG9sZHNldC0+c2lnWzNdOwotCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnVjLT5zaWdtYXNrLCAmc2V0diwgc2l6ZW9mKHN2cjRfc2lnc2V0X3QpKTsKLQl9IGVsc2UKLQkJZXJyIHw9IF9fY29weV90b191c2VyKCZ1Yy0+c2lnbWFzaywgJnNldHYsCi0JCQkJICAgICAgMiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKLQotCS8qIFN0b3JlIHJlZ2lzdGVycyAqLwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnBjLCAmKCgqZ3IpW1NWUjRfUENdKSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+bnBjLCAmKCgqZ3IpW1NWUjRfTlBDXSkpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnBzciwgJigoKmdyKVtTVlI0X1BTUl0pKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT55LCAmKCgqZ3IpW1NWUjRfWV0pKTsKLQkKLQkvKiBDb3B5IGdbMS4uN10gYW5kIG9bMC4uN10gcmVnaXN0ZXJzICovCi0JZXJyIHw9IF9fY29weV90b191c2VyKCYoKmdyKVtTVlI0X0cxXSwgJnJlZ3MtPnVfcmVnc1tVUkVHX0cxXSwKLQkJCSAgICAgIHNpemVvZihsb25nKSAqIDcpOwotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmKCpncilbU1ZSNF9PMF0sICZyZWdzLT51X3JlZ3NbVVJFR19JMF0sCi0JCQkgICAgICBzaXplb2YobG9uZykgKiA4KTsKLQotCS8qIFNldHVwIHNpZ2FsdHN0YWNrICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmdWMtPnN0YWNrLnNwKTsKLQllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+dV9yZWdzW1VSRUdfRlBdKSwgJnVjLT5zdGFjay5mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZ1Yy0+c3RhY2suc2l6ZSk7Ci0KLQkvKiBTYXZlIHRoZSBjdXJyZW50bHkgd2luZG93IGZpbGU6ICovCi0KLQkvKiAxLiBMaW5rIHNmcC0+dWMtPmd3aW5zIHRvIG91ciB3aW5kb3dzICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoZ3csICZtYy0+Z3dpbik7Ci0JICAgIAotCS8qIDIuIE51bWJlciBvZiB3aW5kb3dzIHRvIHJlc3RvcmUgYXQgc2V0Y29udGV4dCgpOiAqLwotCWVyciB8PSBfX3B1dF91c2VyKHRwLT53X3NhdmVkLCAmZ3ctPmNvdW50KTsKLQotCS8qIDMuIFNhdmUgZWFjaCB2YWxpZCB3aW5kb3cKLQkgKiAgICBDdXJyZW50bHksIGl0IG1ha2VzIGEgY29weSBvZiB0aGUgd2luZG93cyBmcm9tIHRoZSBrZXJuZWwgY29weS4KLQkgKiAgICBEYXZpZCdzIGNvZGUgZm9yIFN1bk9TLCBtYWtlcyB0aGUgY29weSBidXQga2VlcHMgdGhlIHBvaW50ZXIgdG8KLQkgKiAgICB0aGUga2VybmVsLiAgTXkgdmVyc2lvbiBtYWtlcyB0aGUgcG9pbnRlciBwb2ludCB0byBhIHVzZXJsYW5kIAotCSAqICAgIGNvcHkgb2YgdGhvc2UuICBNaG0sIEkgd29uZGVyIGlmIEkgc2hvdWxkbid0IGp1c3QgaWdub3JlIHRob3NlCi0JICogICAgb24gc2V0Y29udGV4dCBhbmQgdXNlIHRob3NlIHRoYXQgYXJlIG9uIHRoZSBrZXJuZWwsIHRoZSBzaWduYWwKLQkgKiAgICBoYW5kbGVyIHNob3VsZCBub3QgYmUgbW9keWZpbmcgdGhvc2UsIG1obS4KLQkgKgotCSAqICAgIFRoZXNlIHdpbmRvd3MgYXJlIGp1c3QgdXNlZCBpbiBjYXNlIHN5bmNocm9uaXplX3VzZXJfc3RhY2sgZmFpbGVkCi0JICogICAgdG8gZmx1c2ggdGhlIHVzZXIgd2luZG93cy4KLQkgKi8KLQlmb3IgKHdpbmRvdyA9IDA7IHdpbmRvdyA8IHRwLT53X3NhdmVkOyB3aW5kb3crKykgewotCQllcnIgfD0gX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSAmKGd3LT53aW5bd2luZG93XSksICZndy0+d2lucHRyW3dpbmRvd10pOwotCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmd3LT53aW5bd2luZG93XSwKLQkJCQkgICAgICAmdHAtPnJlZ193aW5kb3dbd2luZG93XSwKLQkJCQkgICAgICBzaXplb2Yoc3ZyNF9yd2luZG93X3QpKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIoMCwgZ3ctPndpbnB0clt3aW5kb3ddKTsKLQl9Ci0KLQkvKiA0LiBXZSBqdXN0IHBheSBhdHRlbnRpb24gdG8gdGhlIGd3LT5jb3VudCBmaWVsZCBvbiBzZXRjb250ZXh0ICovCi0JdHAtPndfc2F2ZWQgPSAwOyAvKiBTbyBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gZXhlY3V0ZS4gKi8KLQotCS8qIFNldHVwIHRoZSBzaWduYWwgaW5mb3JtYXRpb24uICBTb2xhcmlzIGV4cGVjdHMgYSBidW5jaCBvZgotCSAqIGluZm9ybWF0aW9uIHRvIGJlIHBhc3NlZCB0byB0aGUgc2lnbmFsIGhhbmRsZXIsIHdlIGRvbid0IHByb3ZpZGUKLQkgKiB0aGF0IG11Y2ggY3VycmVudGx5LCBzaG91bGQgdXNlIHNpZ2luZm8uCi0JICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoc2lnbnIsICZzaS0+c2lnaW5mby5zaWdubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoU1ZSNF9TSU5PSU5GTywgJnNpLT5zaWdpbmZvLmNvZGUpOwotCWlmIChlcnIpCi0JCWdvdG8gc2lnc2VndjsKLQotCXJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSA9ICh1bnNpZ25lZCBsb25nKSBzZnA7Ci0JcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZykgc2EtPnNhX2hhbmRsZXI7Ci0JcmVncy0+bnBjID0gKHJlZ3MtPnBjICsgNCk7Ci0KLQkvKiBBcmd1bWVudHMgcGFzc2VkIHRvIHNpZ25hbCBoYW5kbGVyICovCi0JaWYgKHJlZ3MtPnVfcmVnc1sxNF0pewotCQlzdHJ1Y3QgcmVnX3dpbmRvdyBfX3VzZXIgKnJ3ID0gKHN0cnVjdCByZWdfd2luZG93IF9fdXNlciAqKQotCQkJcmVncy0+dV9yZWdzWzE0XTsKLQotCQllcnIgfD0gX19wdXRfdXNlcihzaWduciwgJnJ3LT5pbnNbMF0pOwotCQllcnIgfD0gX19wdXRfdXNlcihzaSwgJnJ3LT5pbnNbMV0pOwotCQllcnIgfD0gX19wdXRfdXNlcih1YywgJnJ3LT5pbnNbMl0pOwotCQllcnIgfD0gX19wdXRfdXNlcihzZnAsICZydy0+aW5zWzZdKTsJLyogZnJhbWUgcG9pbnRlciAqLwotCQlpZiAoZXJyKQotCQkJZ290byBzaWdzZWd2OwotCi0JCXJlZ3MtPnVfcmVnc1tVUkVHX0kwXSA9IHNpZ25yOwotCQlyZWdzLT51X3JlZ3NbVVJFR19JMV0gPSAodW5zaWduZWQgbG9uZykgc2k7Ci0JCXJlZ3MtPnVfcmVnc1tVUkVHX0kyXSA9ICh1bnNpZ25lZCBsb25nKSB1YzsKLQl9Ci0JcmV0dXJuOwotCi1zaWdpbGxfYW5kX3JldHVybjoKLQlkb19leGl0KFNJR0lMTCk7Ci1zaWdzZWd2OgotCWZvcmNlX3NpZ3NlZ3Yoc2lnbnIsIGN1cnJlbnQpOwotfQotCi1hc21saW5rYWdlIGludCBzdnI0X2dldGNvbnRleHQoc3ZyNF91Y29udGV4dF90IF9fdXNlciAqdWMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN2cjRfZ3JlZ3NldF90ICBfX3VzZXIgKmdyOwotCXN2cjRfbWNvbnRleHRfdCBfX3VzZXIgKm1jOwotCXN2cjRfc2lnc2V0X3QJc2V0djsKLQlpbnQgZXJyID0gMDsKLQotCXN5bmNocm9uaXplX3VzZXJfc3RhY2soKTsKLQotCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPndfc2F2ZWQpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyID0gY2xlYXJfdXNlcih1Yywgc2l6ZW9mKCp1YykpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyogU2V0dXAgY29udmVuaWVuY2UgdmFyaWFibGVzICovCi0JbWMgPSAmdWMtPm1jb250ZXh0OwotCWdyID0gJm1jLT5ncmVnOwotCi0Jc2V0di5zaWdiaXRzWzBdID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07Ci0Jc2V0di5zaWdiaXRzWzFdID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMV07Ci0JaWYgKF9OU0lHX1dPUkRTID49IDQpIHsKLQkJc2V0di5zaWdiaXRzWzJdID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMl07Ci0JCXNldHYuc2lnYml0c1szXSA9IGN1cnJlbnQtPmJsb2NrZWQuc2lnWzNdOwotCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnVjLT5zaWdtYXNrLCAmc2V0diwgc2l6ZW9mKHN2cjRfc2lnc2V0X3QpKTsKLQl9IGVsc2UKLQkJZXJyIHw9IF9fY29weV90b191c2VyKCZ1Yy0+c2lnbWFzaywgJnNldHYsCi0JCQkJICAgICAgMiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKLQotCS8qIFN0b3JlIHJlZ2lzdGVycyAqLwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnBjLCAmdWMtPm1jb250ZXh0LmdyZWdbU1ZSNF9QQ10pOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPm5wYywgJnVjLT5tY29udGV4dC5ncmVnW1NWUjRfTlBDXSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+cHNyLCAmdWMtPm1jb250ZXh0LmdyZWdbU1ZSNF9QU1JdKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT55LCAmdWMtPm1jb250ZXh0LmdyZWdbU1ZSNF9ZXSk7Ci0JCi0JLyogQ29weSBnWzEuLjddIGFuZCBvWzAuLjddIHJlZ2lzdGVycyAqLwotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmKCpncilbU1ZSNF9HMV0sICZyZWdzLT51X3JlZ3NbVVJFR19HMV0sCi0JCQkgICAgICBzaXplb2YodWludCkgKiA3KTsKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJigqZ3IpW1NWUjRfTzBdLCAmcmVncy0+dV9yZWdzW1VSRUdfSTBdLAotCQkJICAgICAgc2l6ZW9mKHVpbnQpICogOCk7Ci0KLQkvKiBTZXR1cCBzaWdhbHRzdGFjayAqLwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zcCwgJnVjLT5zdGFjay5zcCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc2FzX3NzX2ZsYWdzKHJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSksICZ1Yy0+c3RhY2suZmxhZ3MpOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmdWMtPnN0YWNrLnNpemUpOwotCi0JLyogVGhlIHJlZ2lzdGVyIGZpbGUgaXMgbm90IHNhdmVkCi0JICogd2UgaGF2ZSBhbHJlYWR5IHN0dWZmZWQgYWxsIG9mIGl0IHdpdGggc3luY191c2VyX3N0YWNrCi0JICovCi0JcmV0dXJuIChlcnIgPyAtRUZBVUxUIDogMCk7Ci19Ci0KLS8qIFNldCB0aGUgY29udGV4dCBmb3IgYSBzdnI0IGFwcGxpY2F0aW9uLCB0aGlzIGlzIFNvbGFyaXMgd2F5IHRvIHNpZ3JldHVybiAqLwotYXNtbGlua2FnZSBpbnQgc3ZyNF9zZXRjb250ZXh0KHN2cjRfdWNvbnRleHRfdCBfX3VzZXIgKmMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN2cjRfZ3JlZ3NldF90ICBfX3VzZXIgKmdyOwotCXVuc2lnbmVkIGxvbmcgcGMsIG5wYywgcHNyOwotCW1tX3NlZ21lbnRfdCBvbGRfZnM7Ci0Jc2lnc2V0X3Qgc2V0OwotCXN2cjRfc2lnc2V0X3Qgc2V0djsKLQlpbnQgZXJyOwotCXN0YWNrX3Qgc3Q7Ci0JCi0JLyogRml4bWU6IHJlc3RvcmUgd2luZG93cywgb3IgaXMgdGhpcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgaW4KLQkgKiBzdnI0X3NldHVwX2ZyYW1lIHdoZW4gc3luY191c2VyX3dpbmRvd3MgaXMgZG9uZT8KLQkgKi8KLQlmbHVzaF91c2VyX3dpbmRvd3MoKTsKLQotCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPndfc2F2ZWQpCi0JCWdvdG8gc2lnc2Vndl9hbmRfcmV0dXJuOwotCi0JaWYgKCgodW5zaWduZWQgbG9uZykgYykgJiAzKQotCQlnb3RvIHNpZ3NlZ3ZfYW5kX3JldHVybjsKLQotCWlmICghX19hY2Nlc3Nfb2soKHVuc2lnbmVkIGxvbmcpYywgc2l6ZW9mKCpjKSkpCi0JCWdvdG8gc2lnc2Vndl9hbmRfcmV0dXJuOwotCi0JLyogQ2hlY2sgZm9yIHZhbGlkIFBDIGFuZCBuUEMgKi8KLQlnciA9ICZjLT5tY29udGV4dC5ncmVnOwotCWVyciA9IF9fZ2V0X3VzZXIocGMsICYoKCpncilbU1ZSNF9QQ10pKTsKLQllcnIgfD0gX19nZXRfdXNlcihucGMsICYoKCpncilbU1ZSNF9OUENdKSk7Ci0KLQlpZiAoKHBjIHwgbnBjKSAmIDMpCi0JCWdvdG8gc2lnc2Vndl9hbmRfcmV0dXJuOwotCi0JLyogUmV0cmlldmUgaW5mb3JtYXRpb24gZnJvbSBwYXNzZWQgdWNvbnRleHQgKi8KLQkvKiBub3RlIHRoYXQgblBDIGlzIG9yZWQgYSAxLCB0aGlzIGlzIHVzZWQgdG8gaW5mb3JtIGVudHJ5LlMgKi8KLQkvKiB0aGF0IHdlIGRvbid0IHdhbnQgaXQgdG8gbWVzcyB3aXRoIG91ciBQQyBhbmQgblBDICovCi0KLQkvKiBUaGlzIGlzIHByZXR0eSBtdWNoIGF0b21pYywgbm8gYW1vdW50IGxvY2tpbmcgd291bGQgcHJldmVudAotCSAqIHRoZSByYWNlcyB3aGljaCBleGlzdCBhbnl3YXlzLgotCSAqLwotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZzZXR2LCAmYy0+c2lnbWFzaywgc2l6ZW9mKHN2cjRfc2lnc2V0X3QpKTsKLQkKLQllcnIgfD0gX19nZXRfdXNlcihzdC5zc19zcCwgJmMtPnN0YWNrLnNwKTsKLQllcnIgfD0gX19nZXRfdXNlcihzdC5zc19mbGFncywgJmMtPnN0YWNrLmZsYWdzKTsKLQllcnIgfD0gX19nZXRfdXNlcihzdC5zc19zaXplLCAmYy0+c3RhY2suc2l6ZSk7Ci0JCi0JaWYgKGVycikKLQkJZ290byBzaWdzZWd2X2FuZF9yZXR1cm47Ci0JCQotCS8qIEl0IGlzIG1vcmUgZGlmZmljdWx0IHRvIGF2b2lkIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB0aGFuIHRvCi0JICAgY2FsbCBpdCBhbmQgaWdub3JlIGVycm9ycy4gICovCi0Jb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZG9fc2lnYWx0c3RhY2soKGNvbnN0IHN0YWNrX3QgX191c2VyICopICZzdCwgTlVMTCwKLQkJICAgICAgIHJlZ3MtPnVfcmVnc1tVUkVHX0k2XSk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0JCi0Jc2V0LnNpZ1swXSA9IHNldHYuc2lnYml0c1swXTsKLQlzZXQuc2lnWzFdID0gc2V0di5zaWdiaXRzWzFdOwotCWlmIChfTlNJR19XT1JEUyA+PSA0KSB7Ci0JCXNldC5zaWdbMl0gPSBzZXR2LnNpZ2JpdHNbMl07Ci0JCXNldC5zaWdbM10gPSBzZXR2LnNpZ2JpdHNbM107Ci0JfQotCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOwotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXJlZ3MtPnBjID0gcGM7Ci0JcmVncy0+bnBjID0gbnBjIHwgMTsKLQllcnIgfD0gX19nZXRfdXNlcihyZWdzLT55LCAmKCgqZ3IpW1NWUjRfWV0pKTsKLQllcnIgfD0gX19nZXRfdXNlcihwc3IsICYoKCpncilbU1ZSNF9QU1JdKSk7Ci0JcmVncy0+cHNyICY9IH4oUFNSX0lDQyk7Ci0JcmVncy0+cHNyIHw9IChwc3IgJiBQU1JfSUNDKTsKLQotCS8qIFJlc3RvcmUgZ1sxLi43XSBhbmQgb1swLi43XSByZWdpc3RlcnMgKi8KLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmcmVncy0+dV9yZWdzW1VSRUdfRzFdLCAmKCpncilbU1ZSNF9HMV0sCi0JCQkgICAgICBzaXplb2YobG9uZykgKiA3KTsKLQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmcmVncy0+dV9yZWdzW1VSRUdfSTBdLCAmKCpncilbU1ZSNF9PMF0sCi0JCQkgICAgICBzaXplb2YobG9uZykgKiA4KTsKLQlyZXR1cm4gKGVyciA/IC1FRkFVTFQgOiAwKTsKLQotc2lnc2Vndl9hbmRfcmV0dXJuOgotCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKLQlyZXR1cm4gLUVGQVVMVDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkCiBoYW5kbGVfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnbnIsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCi0JICAgICAgc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkgICAgICBpbnQgc3ZyNF9zaWduYWwpCisJICAgICAgc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpZiAoc3ZyNF9zaWduYWwpCi0JCXNldHVwX3N2cjRfZnJhbWUoJmthLT5zYSwgcmVncy0+cGMsIHJlZ3MtPm5wYywgcmVncywgc2lnbnIsIG9sZHNldCk7Ci0JZWxzZSB7Ci0JCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQotCQkJbmV3X3NldHVwX3J0X2ZyYW1lKGthLCByZWdzLCBzaWduciwgb2xkc2V0LCBpbmZvKTsKLQkJZWxzZSBpZiAoY3VycmVudC0+dGhyZWFkLm5ld19zaWduYWwpCi0JCQluZXdfc2V0dXBfZnJhbWUoa2EsIHJlZ3MsIHNpZ25yLCBvbGRzZXQpOwotCQllbHNlCi0JCQlzZXR1cF9mcmFtZSgma2EtPnNhLCByZWdzLCBzaWduciwgb2xkc2V0LCBpbmZvKTsKLQl9CisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1NJR0lORk8pCisJCW5ld19zZXR1cF9ydF9mcmFtZShrYSwgcmVncywgc2lnbnIsIG9sZHNldCwgaW5mbyk7CisJZWxzZSBpZiAoY3VycmVudC0+dGhyZWFkLm5ld19zaWduYWwpCisJCW5ld19zZXR1cF9mcmFtZShrYSwgcmVncywgc2lnbnIsIG9sZHNldCk7CisJZWxzZQorCQlzZXR1cF9mcmFtZSgma2EtPnNhLCByZWdzLCBzaWduciwgb2xkc2V0LCBpbmZvKTsKKwogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwmY3VycmVudC0+YmxvY2tlZCwma2EtPnNhLnNhX21hc2spOwogCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX05PTUFTSykpCkBAIC0xMDAyLDE3ICs3MjYsNiBAQAogCWludCBzaWducjsKIAlzaWdzZXRfdCAqb2xkc2V0OwogCi0JLyoKLQkgKiBYWFggRGlzYWJsZSBzdnI0IHNpZ25hbCBoYW5kbGluZyB1bnRpbCBzb2xhcmlzIGVtdWxhdGlvbiB3b3Jrcy4KLQkgKiBJdCBpcyBidWdneSAtIEFudG9uCi0JICovCi0jZGVmaW5lIFNWUjRfU0lHTkFMX0JST0tFTiAxCi0jaWZkZWYgU1ZSNF9TSUdOQUxfQlJPS0VOCi0JaW50IHN2cjRfc2lnbmFsID0gMDsKLSNlbHNlCi0JaW50IHN2cjRfc2lnbmFsID0gY3VycmVudC0+cGVyc29uYWxpdHkgPT0gUEVSX1NWUjQ7Ci0jZW5kaWYKLQogCWNvb2tpZS5yZXN0YXJ0X3N5c2NhbGwgPSByZXN0YXJ0X3N5c2NhbGw7CiAJY29va2llLm9yaWdfaTAgPSBvcmlnX2kwOwogCkBAIC0xMDI1LDggKzczOCw4IEBACiAJaWYgKHNpZ25yID4gMCkgewogCQlpZiAoY29va2llLnJlc3RhcnRfc3lzY2FsbCkKIAkJCXN5c2NhbGxfcmVzdGFydChjb29raWUub3JpZ19pMCwgcmVncywgJmthLnNhKTsKLQkJaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LAotCQkJICAgICAgcmVncywgc3ZyNF9zaWduYWwpOworCQloYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MpOworCiAJCS8qIGEgc2lnbmFsIHdhcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkOyB0aGUgc2F2ZWQKIAkJICogc2lnbWFzayB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHNpZ25hbCBmcmFtZSwKIAkJICogYW5kIHdpbGwgYmUgcmVzdG9yZWQgYnkgc2lncmV0dXJuLCBzbyB3ZSBjYW4gc2ltcGx5CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYwppbmRleCBjMTAyNWU1Li4wYmNmOThhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKQEAgLTM2LDEyICszNiwxMCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaWRwcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3N2cjQuaD4KICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vbW9zdGVrLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpZmRlZiBDT05GSUdfU0JVUwpAQCAtNjIsOCArNjAsNiBAQAogCXNob3J0IHJldmVudHM7CiB9OwogCi1leHRlcm4gaW50IHN2cjRfZ2V0Y29udGV4dCAoc3ZyNF91Y29udGV4dF90ICosIHN0cnVjdCBwdF9yZWdzICopOwotZXh0ZXJuIGludCBzdnI0X3NldGNvbnRleHQgKHN2cjRfdWNvbnRleHRfdCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkICgqX19jb3B5XzFwYWdlKSh2b2lkICosIGNvbnN0IHZvaWQgKik7CiBleHRlcm4gdm9pZCBfX21lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiBleHRlcm4gdm9pZCAoKmJ6ZXJvXzFwYWdlKSh2b2lkICopOwpAQCAtMTA3LDExICsxMDMsNiBAQAogRVhQT1JUX1NZTUJPTChfX19yd19yZWFkX2V4aXQpOwogRVhQT1JUX1NZTUJPTChfX19yd193cml0ZV9lbnRlcik7CiAjZW5kaWYKLS8qIHNlbWFwaG9yZXMgKi8KLUVYUE9SVF9TWU1CT0woX191cCk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bik7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwogCiBFWFBPUlRfU1lNQk9MKHNwYXJjX3ZhbGlkX2FkZHJfYml0bWFwKTsKIEVYUE9SVF9TWU1CT0wocGh5c19iYXNlKTsKQEAgLTIwOSwxMCArMjAwLDYgQEAKIEVYUE9SVF9TWU1CT0woa3VubWFwX2F0b21pYyk7CiAjZW5kaWYKIAotLyogU29sYXJpcy9TdW5PUyBiaW5hcnkgY29tcGF0aWJpbGl0eSAqLwotRVhQT1JUX1NZTUJPTChzdnI0X3NldGNvbnRleHQpOwotRVhQT1JUX1NZTUJPTChzdnI0X2dldGNvbnRleHQpOwotCiAvKiBwcm9tIHN5bWJvbHMgKi8KIEVYUE9SVF9TWU1CT0woaWRwcm9tKTsKIEVYUE9SVF9TWU1CT0wocHJvbV9yb290X25vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3Vub3NfYXNtLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW5vc19hc20uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdmZTg2MC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW5vc19hc20uUworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qICRJZDogc3Vub3NfYXNtLlMsdiAxLjE1IDIwMDAvMDEvMTEgMTc6MzM6MjEgamogRXhwICQKLSAqIHN1bm9zX2FzbS5TOiBTdW5PUyBzeXN0ZW0gY2FsbHMgd2hpY2ggbXVzdCBoYXZlIGEgbG93LWxldmVsCi0gKiAgICAgICAgICAgICAgZW50cnkgcG9pbnQgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqCi0gKiBCYXNlZCB1cG9uIHByZWxpbWluYXJ5IHdvcmsgd2hpY2ggaXM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IEFkcmlhbiBNLiBSb2RyaWd1ZXogKGFkcmlhbkByZW11cy5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotCi0JLnRleHQKLQkuYWxpZ24gNAotCi0JLyogV2hlbiBjYWxsaW5nIHJldF9zeXNfY2FsbCwgJW8wIHNob3VsZCBjb250YWluIHRoZSBzYW1lCi0JICogdmFsdWUgYXMgaW4gWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9JMF0gKi8KLQotCS8qIFN1bk9TIGdldHBpZCgpIHJldHVybnMgcGlkIGluICVvMCBhbmQgcHBpZCBpbiAlbzEgKi8KLQkuZ2xvYmwJc3Vub3NfZ2V0cGlkCi1zdW5vc19nZXRwaWQ6Ci0JY2FsbAlzeXNfZ2V0cHBpZAotCSBub3AKLQotCWNhbGwJc3lzX2dldHBpZAotCSBzdAklbzAsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTFdCi0KLQliCXJldF9zeXNfY2FsbAotCSBzdAklbzAsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTBdCi0KLQkvKiBTdW5PUyBnZXR1aWQoKSByZXR1cm5zIHVpZCBpbiAlbzAgYW5kIGV1aWQgaW4gJW8xICovCi0JLmdsb2JsCXN1bm9zX2dldHVpZAotc3Vub3NfZ2V0dWlkOgotCWNhbGwJc3lzX2dldGV1aWQxNgotCSBub3AKLQotCWNhbGwJc3lzX2dldHVpZDE2Ci0JIHN0CSVvMCwgWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9JMV0KLQotCWIJcmV0X3N5c19jYWxsCi0JIHN0CSVvMCwgWyVzcCArIFNUQUNLRlJBTUVfU1ogKyBQVF9JMF0KLQotCS8qIFN1bk9TIGdldGdpZCgpIHJldHVybnMgZ2lkIGluICVvMCBhbmQgZWdpZCBpbiAlbzEgKi8KLQkuZ2xvYmwJc3Vub3NfZ2V0Z2lkCi1zdW5vc19nZXRnaWQ6Ci0JY2FsbAlzeXNfZ2V0ZWdpZDE2Ci0JIG5vcAotCi0JY2FsbAlzeXNfZ2V0Z2lkMTYKLQkgc3QJJW8wLCBbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX0kxXQotCi0JYglyZXRfc3lzX2NhbGwKLQkgc3QJJW8wLCBbJXNwICsgU1RBQ0tGUkFNRV9TWiArIFBUX0kwXQotCi0JLyogU3VuT1MncyBleGVjdigpIGNhbGwgb25seSBzcGVjaWZpZXMgdGhlIGFyZ3YgYXJndW1lbnQsIHRoZQotCSAqIGVudmlyb25tZW50IHNldHRpbmdzIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FsbGluZyBwcm9jZXNzZXMuCi0JICovCi0JLmdsb2JsCXN1bm9zX2V4ZWN2Ci1zdW5vc19leGVjdjoKLQlzdAklZzAsIFslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTJdCi0KLQljYWxsCXNwYXJjX2V4ZWN2ZQotCSBhZGQJJXNwLCBTVEFDS0ZSQU1FX1NaLCAlbzAKLQotCWIJcmV0X3N5c19jYWxsCi0JIGxkCVslc3AgKyBTVEFDS0ZSQU1FX1NaICsgUFRfSTBdLCAlbzAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bm9zX2lvY3RsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW5vc19pb2N0bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjEzY2M2Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bm9zX2lvY3RsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyogJElkOiBzdW5vc19pb2N0bC5jLHYgMS4zNCAyMDAwLzA5LzAzIDE0OjEwOjU2IGFudG9uIEV4cCAkCi0gKiBzdW5vc19pb2N0bC5jOiBUaGUgTGludXggT3BlcmF0aW5nIHN5c3RlbTogU3VuT1MgaW9jdGwgY29tcGF0aWJpbGl0eS4KLSAqIAotICogQ29weXJpZ2h0IChDKSAxOTk1IE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQG51Y2xlY3UudW5hbS5teCkKLSAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvcm91dGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+Ci0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0KLSNpZiAwCi1leHRlcm4gY2hhciBzdW5rYmRfdHlwZTsKLWV4dGVybiBjaGFyIHN1bmtiZF9sYXlvdXQ7Ci0jZW5kaWYKLQotLyogTlJfT1BFTiBpcyBub3cgbGFyZ2VyIGFuZCBkeW5hbWljIGluIHJlY2VudCBrZXJuZWxzLiAqLwotI2RlZmluZSBTVU5PU19OUl9PUEVOCTI1NgotCi1hc21saW5rYWdlIGludCBzdW5vc19pb2N0bCAoaW50IGZkLCB1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJldCA9IC1FQkFERjsKLQotCWlmIChmZCA+PSBTVU5PU19OUl9PUEVOIHx8ICFmY2hlY2soZmQpKQotCQlnb3RvIG91dDsKLQotCS8qIEZpcnN0IGhhbmRsZSBhbiBlYXN5IGNvbXBhdC4gY2FzZSBmb3IgdHR5IGxkaXNjLiAqLwotCWlmIChjbWQgPT0gVElPQ1NFVEQpIHsKLQkJaW50IF9fdXNlciAqcDsKLQkJaW50IG50dHkgPSBOX1RUWSwgdG1wOwotCQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0KLQkJcCA9IChpbnQgX191c2VyICopIGFyZzsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHRtcCwgcCkpCi0JCQlnb3RvIG91dDsKLQkJaWYgKHRtcCA9PSAyKSB7Ci0JCQlvbGRmcyA9IGdldF9mcygpOwotCQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCQlyZXQgPSBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpICZudHR5KTsKLQkJCXNldF9mcyhvbGRmcyk7Ci0JCQlyZXQgPSAocmV0ID09IC1FSU5WQUwgPyAtRU9QTk9UU1VQUCA6IHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCS8qIEJpbmFyeSBjb21wYXRpYmlsaXR5IGlzIGdvb2QgQW1lcmljYW4ga25vd2hvdyBmdWNraW4nIHVwLiAqLwotCWlmIChjbWQgPT0gVElPQ05PVFRZKSB7Ci0JCXJldCA9IHN5c19zZXRzaWQoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogU3VuT1MgbmV0d29ya2luZyBpb2N0bHMuICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIF9JT1coJ3InLCAxMCwgc3RydWN0IHJ0ZW50cnkpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NBRERSVCwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XKCdyJywgMTEsIHN0cnVjdCBydGVudHJ5KToKLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBTSU9DREVMUlQsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDEyLCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NTSUZBRERSLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1dSKCdpJywgMTMsIHN0cnVjdCBpZnJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dJRkFERFIsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDE0LCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NTSUZEU1RBRERSLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1dSKCdpJywgMTUsIHN0cnVjdCBpZnJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dJRkRTVEFERFIsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDE2LCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XUignaScsIDE3LCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NHSUZGTEFHUywgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XKCdpJywgMTgsIHN0cnVjdCBpZnJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ1NJRk1FTSwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XUignaScsIDE5LCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NHSUZNRU0sIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPV1IoJ2knLCAyMCwgc3RydWN0IGlmY29uZik6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dJRkNPTkYsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDIxLCBzdHJ1Y3QgaWZyZXEpOiAvKiBTSU9DU0lGTVRVICovCi0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ1NJRk1UVSwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XUignaScsIDIyLCBzdHJ1Y3QgaWZyZXEpOiAvKiBTSU9DR0lGTVRVICovCi0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dJRk1UVSwgYXJnKTsKLQkJZ290byBvdXQ7Ci0KLQljYXNlIF9JT1dSKCdpJywgMjMsIHN0cnVjdCBpZnJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dJRkJSREFERFIsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDI0LCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NTSUZCUkRBRERSLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1dSKCdpJywgMjUsIHN0cnVjdCBpZnJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dJRk5FVE1BU0ssIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDI2LCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NTSUZORVRNQVNLLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1dSKCdpJywgMjcsIHN0cnVjdCBpZnJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dJRk1FVFJJQywgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XKCdpJywgMjgsIHN0cnVjdCBpZnJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ1NJRk1FVFJJQywgYXJnKTsKLQkJZ290byBvdXQ7Ci0KLQljYXNlIF9JT1coJ2knLCAzMCwgc3RydWN0IGFycHJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ1NBUlAsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPV1IoJ2knLCAzMSwgc3RydWN0IGFycHJlcSk6Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgU0lPQ0dBUlAsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDMyLCBzdHJ1Y3QgYXJwcmVxKToKLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBTSU9DREFSUCwgYXJnKTsKLQkJZ290byBvdXQ7Ci0KLQljYXNlIF9JT1coJ2knLCA0MCwgc3RydWN0IGlmcmVxKTogLyogU0lPQ1VQUEVSICovCi0JY2FzZSBfSU9XKCdpJywgNDEsIHN0cnVjdCBpZnJlcSk6IC8qIFNJT0NMT1dFUiAqLwotCWNhc2UgX0lPVygnaScsIDQ0LCBzdHJ1Y3QgaWZyZXEpOiAvKiBTSU9DU0VUU1lOQyAqLwotCWNhc2UgX0lPVygnaScsIDQ1LCBzdHJ1Y3QgaWZyZXEpOiAvKiBTSU9DR0VUU1lOQyAqLwotCWNhc2UgX0lPVygnaScsIDQ2LCBzdHJ1Y3QgaWZyZXEpOiAvKiBTSU9DU1NEU1RBVFMgKi8KLQljYXNlIF9JT1coJ2knLCA0Nywgc3RydWN0IGlmcmVxKTogLyogU0lPQ1NTRVNUQVRTICovCi0JY2FzZSBfSU9XKCdpJywgNDgsIHN0cnVjdCBpZnJlcSk6IC8qIFNJT0NTUFJPTUlTQyAqLwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0KLQljYXNlIF9JT1coJ2knLCA0OSwgc3RydWN0IGlmcmVxKToKLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBTSU9DQURETVVMVEksIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDUwLCBzdHJ1Y3QgaWZyZXEpOgotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIFNJT0NERUxNVUxUSSwgYXJnKTsKLQkJZ290byBvdXQ7Ci0KLQkvKiBGRERJIGludGVyZmFjZSBpb2N0bHMsIHVuc3VwcG9ydGVkLiAqLwotCQkKLQljYXNlIF9JT1coJ2knLCA1MSwgc3RydWN0IGlmcmVxKTogLyogU0lPQ0ZEUkVTRVQgKi8KLQljYXNlIF9JT1coJ2knLCA1Miwgc3RydWN0IGlmcmVxKTogLyogU0lPQ0ZEU0xFRVAgKi8KLQljYXNlIF9JT1coJ2knLCA1Mywgc3RydWN0IGlmcmVxKTogLyogU0lPQ1NUUlRGTVdBUiAqLwotCWNhc2UgX0lPVygnaScsIDU0LCBzdHJ1Y3QgaWZyZXEpOiAvKiBTSU9DTEROU1RSVEZXICovCi0JY2FzZSBfSU9XKCdpJywgNTUsIHN0cnVjdCBpZnJlcSk6IC8qIFNJT0NHRVRGRFNUQVQgKi8KLQljYXNlIF9JT1coJ2knLCA1Niwgc3RydWN0IGlmcmVxKTogLyogU0lPQ0ZETk1JSU5UICovCi0JY2FzZSBfSU9XKCdpJywgNTcsIHN0cnVjdCBpZnJlcSk6IC8qIFNJT0NGREVYVVNFUiAqLwotCWNhc2UgX0lPVygnaScsIDU4LCBzdHJ1Y3QgaWZyZXEpOiAvKiBTSU9DRkRHTkVUTUFQICovCi0JY2FzZSBfSU9XKCdpJywgNTksIHN0cnVjdCBpZnJlcSk6IC8qIFNJT0NGREdJT0NUTCAqLwotCQlwcmludGsoIkZEREkgaW9jdGwsIHJldHVybmluZyBFT1BOT1RTVVBQXG4iKTsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCi0JY2FzZSBfSU9XKCd0JywgMTI1LCBpbnQpOgotCQkvKiBNb3JlIHN0dXBpZCB0dHkgc3Vub3MgaW9jdGxzLCBqdXN0Ci0JCSAqIHNheSBpdCB3b3JrZWQuCi0JCSAqLwotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKLQkvKiBOb24gcG9zaXggZ3JwICovCi0JY2FzZSBfSU9XKCd0JywgMTE4LCBpbnQpOiB7Ci0JCWludCBvbGR2YWwsIG5ld3ZhbCwgX191c2VyICpwdHI7Ci0KLQkJY21kID0gVElPQ1NQR1JQOwotCQlwdHIgPSAoaW50IF9fdXNlciAqKSBhcmc7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWlmIChnZXRfdXNlcihvbGR2YWwsIHB0cikpCi0JCQlnb3RvIG91dDsKLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBjbWQsIGFyZyk7Ci0JCV9fZ2V0X3VzZXIobmV3dmFsLCBwdHIpOwotCQlpZiAobmV3dmFsID09IC0xKSB7Ci0JCQlfX3B1dF91c2VyKG9sZHZhbCwgcHRyKTsKLQkJCXJldCA9IC1FSU87Ci0JCX0KLQkJaWYgKHJldCA9PSAtRU5PVFRZKQotCQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY2FzZSBfSU9SKCd0JywgMTE5LCBpbnQpOiB7Ci0JCWludCBvbGR2YWwsIG5ld3ZhbCwgX191c2VyICpwdHI7Ci0KLQkJY21kID0gVElPQ0dQR1JQOwotCQlwdHIgPSAoaW50IF9fdXNlciAqKSBhcmc7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWlmIChnZXRfdXNlcihvbGR2YWwsIHB0cikpCi0JCQlnb3RvIG91dDsKLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBjbWQsIGFyZyk7Ci0JCV9fZ2V0X3VzZXIobmV3dmFsLCBwdHIpOwotCQlpZiAobmV3dmFsID09IC0xKSB7Ci0JCQlfX3B1dF91c2VyKG9sZHZhbCwgcHRyKTsKLQkJCXJldCA9IC1FSU87Ci0JCX0KLQkJaWYgKHJldCA9PSAtRU5PVFRZKQotCQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCX0KLQotI2lmIDAKLQlpZiAoKGNtZCAmIDB4ZmYwMCkgPT0gKCdrJyA8PCA4KSkgewotCQlwcmludGsgKCJbW0tCSU86ICU4Ljh4XG4iLCAodW5zaWduZWQgaW50KSBjbWQpOwotCX0KLSNlbmRpZgotCi0JcmV0ID0gc3lzX2lvY3RsKGZkLCBjbWQsIGFyZyk7Ci0JLyogc28gc3R1cGlkLi4uICovCi0JcmV0ID0gKHJldCA9PSAtRUlOVkFMID8gLUVPUE5PVFNVUFAgOiByZXQpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NvbGFyaXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zb2xhcmlzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMjZhNTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NvbGFyaXMuYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc29sYXJpcy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2IE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQG51Y2xlY3UudW5hbS5teCkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotYXNtbGlua2FnZSBpbnQKLWRvX3NvbGFyaXNfc3lzY2FsbCAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RhdGljIGludCBjbnQgPSAwOwotCWlmICgrK2NudCA8IDEwKSBwcmludGsgKCJObyBzb2xhcmlzIGhhbmRsZXJcbiIpOwotCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotI2lmbmRlZiBDT05GSUdfU1VOT1NfRU1VTAotYXNtbGlua2FnZSBpbnQKLWRvX3N1bm9zX3N5c2NhbGwgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0YXRpYyBpbnQgY250ID0gMDsKLQlpZiAoKytjbnQgPCAxMCkgcHJpbnRrICgiU3VuT1MgYmluYXJ5IGVtdWxhdGlvbiBub3QgY29tcGlsZWQgaW5cbiIpOwotCWZvcmNlX3NpZyAoU0lHU0VHViwgY3VycmVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3N1bm9zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YzE4N2MuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3N1bm9zLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEwICswLDAgQEAKLS8qICRJZDogc3lzX3N1bm9zLmMsdiAxLjEzNyAyMDAyLzAyLzA4IDAzOjU3OjE0IGRhdmVtIEV4cCAkCi0gKiBzeXNfc3Vub3MuYzogU3VuT1Mgc3BlY2lmaWMgc3lzY2FsbCBjb21wYXRpYmlsaXR5IHN1cHBvcnQuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5NSBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEBudWNsZWN1LnVuYW0ubXgpCi0gKgotICogQmFzZWQgdXBvbiBwcmVsaW1pbmFyeSB3b3JrIHdoaWNoIGlzOgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBBZHJpYW4gTS4gUm9kcmlndWV6IChhZHJpYW5AcmVtdXMucnV0Z2Vycy5lZHUpCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0jaW5jbHVkZSA8bGludXgvc2htLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNnLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaWZuZGVmIEtFUk5FTF9EUwotI2luY2x1ZGUgPGxpbnV4L3NlZ21lbnQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wY29uZi5oPgotI2luY2x1ZGUgPGFzbS9pZHByb20uaD4gLyogZm9yIGdldGhvc3RpZCgpICovCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotLyogRm9yIHRoZSBuZnMgbW91bnQgZW11bGF0aW9uICovCi0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzX21vdW50Lmg+Ci0KLS8qIGZvciBzdW5vc19zZWxlY3QgKi8KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLQotLyogTlJfT1BFTiBpcyBub3cgbGFyZ2VyIGFuZCBkeW5hbWljIGluIHJlY2VudCBrZXJuZWxzLiAqLwotI2RlZmluZSBTVU5PU19OUl9PUEVOCTI1NgotCi0vKiBXZSB1c2UgdGhlIFN1bk9TIG1tYXAoKSBzZW1hbnRpY3MuICovCi1hc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3Vub3NfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2ZmKQotewotCXN0cnVjdCBmaWxlICogZmlsZSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyByZXR2YWwsIHJldF90eXBlOwotCi0JaWYgKGZsYWdzICYgTUFQX05PUkVTRVJWRSkgewotCQlzdGF0aWMgaW50IGNudDsKLQkJaWYgKGNudCsrIDwgMTApCi0JCQlwcmludGsoIiVzOiB1bmltcGxlbWVudGVkIFN1bk9TIE1BUF9OT1JFU0VSVkUgbW1hcCgpIGZsYWdcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSk7Ci0JCWZsYWdzICY9IH5NQVBfTk9SRVNFUlZFOwotCX0KLQlyZXR2YWwgPSAtRUJBREY7Ci0JaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgewotCQlpZiAoZmQgPj0gU1VOT1NfTlJfT1BFTikKLQkJCWdvdG8gb3V0OwotCQlmaWxlID0gZmdldChmZCk7Ci0JCWlmICghZmlsZSkKLQkJCWdvdG8gb3V0OwotCX0KLQotCXJldHZhbCA9IC1FSU5WQUw7Ci0JLyogSWYgdGhpcyBpcyBsZC5zbyBvciBhIHNoYXJlZCBsaWJyYXJ5IGRvaW5nIGFuIG1tYXAKLQkgKiBvZiAvZGV2L3plcm8sIHRyYW5zZm9ybSBpdCBpbnRvIGFuIGFub255bW91cyBtYXBwaW5nLgotCSAqIFN1bk9TIGlzIHNvIHN0dXBpZCBzb21lIHRpbWVzLi4uIGhtcGghCi0JICovCi0JaWYgKGZpbGUpIHsKLQkJaWYgKGltYWpvcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSA9PSBNRU1fTUFKT1IgJiYKLQkJICAgIGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSA9PSA1KSB7Ci0JCQlmbGFncyB8PSBNQVBfQU5PTllNT1VTOwotCQkJZnB1dChmaWxlKTsKLQkJCWZpbGUgPSBOVUxMOwotCQl9Ci0JfQotCXJldF90eXBlID0gZmxhZ3MgJiBfTUFQX05FVzsKLQlmbGFncyAmPSB+X01BUF9ORVc7Ci0KLQlpZiAoIShmbGFncyAmIE1BUF9GSVhFRCkpCi0JCWFkZHIgPSAwOwotCWVsc2UgewotCQlpZiAoQVJDSF9TVU40Q19TVU40ICYmCi0JCSAgICAobGVuID4gMHgyMDAwMDAwMCB8fAotCQkgICAgICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmCi0JCSAgICAgIGFkZHIgPCAweGUwMDAwMDAwICYmIGFkZHIgKyBsZW4gPiAweDIwMDAwMDAwKSkpCi0JCQlnb3RvIG91dF9wdXRmOwotCi0JCS8qIFNlZSBhc20tc3BhcmMvdWFjY2Vzcy5oICovCi0JCWlmIChsZW4gPiBUQVNLX1NJWkUgLSBQQUdFX1NJWkUgfHwKLQkJICAgIGFkZHIgKyBsZW4gPiBUQVNLX1NJWkUgLSBQQUdFX1NJWkUpCi0JCQlnb3RvIG91dF9wdXRmOwotCX0KLQotCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXJldHZhbCA9IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgb2ZmKTsKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlpZiAoIXJldF90eXBlKQotCQlyZXR2YWwgPSAoKHJldHZhbCA8IFBBR0VfT0ZGU0VUKSA/IDAgOiByZXR2YWwpOwotCi1vdXRfcHV0ZjoKLQlpZiAoZmlsZSkKLQkJZnB1dChmaWxlKTsKLW91dDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiBsbWJlbmNoIGNhbGxzIHRoaXMsIGp1c3Qgc2F5ICJ5ZWFoLCBvayIgKi8KLWFzbWxpbmthZ2UgaW50IHN1bm9zX21jdGwodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50IGZ1bmN0aW9uLCBjaGFyICphcmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFN1bk9TIGlzIGNvbXBsZXRlbHkgYnJva2VuLi4uIGl0IHJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UKLSAqIEVOT01FTS4gIEZvciBzeXNfc2JyaygpIGl0IHdhbnRzIHRoZSBvbGQgYnJrIHZhbHVlIGFzIGEgcmV0dXJuCi0gKiBvbiBzdWNjZXNzIGFuZCBFTk9NRU0gYXMgYmVmb3JlIG9uIGZhaWx1cmUuCi0gKi8KLWFzbWxpbmthZ2UgaW50IHN1bm9zX2Jyayh1bnNpZ25lZCBsb25nIGJyaykKLXsKLQlpbnQgZnJlZXBhZ2VzLCByZXR2YWwgPSAtRU5PTUVNOwotCXVuc2lnbmVkIGxvbmcgcmxpbTsKLQl1bnNpZ25lZCBsb25nIG5ld2Jyaywgb2xkYnJrOwotCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlpZiAoQVJDSF9TVU40Q19TVU40KSB7Ci0JCWlmIChicmsgPj0gMHgyMDAwMDAwMCAmJiBicmsgPCAweGUwMDAwMDAwKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChicmsgPCBjdXJyZW50LT5tbS0+ZW5kX2NvZGUpCi0JCWdvdG8gb3V0OwotCi0JbmV3YnJrID0gUEFHRV9BTElHTihicmspOwotCW9sZGJyayA9IFBBR0VfQUxJR04oY3VycmVudC0+bW0tPmJyayk7Ci0JcmV0dmFsID0gMDsKLQlpZiAob2xkYnJrID09IG5ld2JyaykgewotCQljdXJyZW50LT5tbS0+YnJrID0gYnJrOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKgotCSAqIEFsd2F5cyBhbGxvdyBzaHJpbmtpbmcgYnJrCi0JICovCi0JaWYgKGJyayA8PSBjdXJyZW50LT5tbS0+YnJrKSB7Ci0JCWN1cnJlbnQtPm1tLT5icmsgPSBicms7Ci0JCWRvX211bm1hcChjdXJyZW50LT5tbSwgbmV3YnJrLCBvbGRicmstbmV3YnJrKTsKLQkJZ290byBvdXQ7Ci0JfQotCS8qCi0JICogQ2hlY2sgYWdhaW5zdCBybGltaXQgYW5kIHN0YWNrLi4KLQkgKi8KLQlyZXR2YWwgPSAtRU5PTUVNOwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOwotCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCi0JCXJsaW0gPSB+MDsKLQlpZiAoYnJrIC0gY3VycmVudC0+bW0tPmVuZF9jb2RlID4gcmxpbSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIENoZWNrIGFnYWluc3QgZXhpc3RpbmcgbW1hcCBtYXBwaW5ncy4KLQkgKi8KLQlpZiAoZmluZF92bWFfaW50ZXJzZWN0aW9uKGN1cnJlbnQtPm1tLCBvbGRicmssIG5ld2JyaytQQUdFX1NJWkUpKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogc3R1cGlkIGFsZ29yaXRobSB0byBkZWNpZGUgaWYgd2UgaGF2ZSBlbm91Z2ggbWVtb3J5OiB3aGlsZQotCSAqIHNpbXBsZSwgaXQgaG9wZWZ1bGx5IHdvcmtzIGluIG1vc3Qgb2J2aW91cyBjYXNlcy4uIEVhc3kgdG8KLQkgKiBmb29sIGl0LCBidXQgdGhpcyBzaG91bGQgY2F0Y2ggbW9zdCBtaXN0YWtlcy4KLQkgKi8KLQlmcmVlcGFnZXMgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX1BBR0VTKTsKLQlmcmVlcGFnZXMgPj49IDE7Ci0JZnJlZXBhZ2VzICs9IG5yX2ZyZWVfcGFnZXMoKTsKLQlmcmVlcGFnZXMgKz0gbnJfc3dhcF9wYWdlczsKLQlmcmVlcGFnZXMgLT0gbnVtX3BoeXNwYWdlcyA+PiA0OwotCWZyZWVwYWdlcyAtPSAobmV3YnJrLW9sZGJyaykgPj4gUEFHRV9TSElGVDsKLQlpZiAoZnJlZXBhZ2VzIDwgMCkKLQkJZ290byBvdXQ7Ci0JLyoKLQkgKiBPaywgd2UgaGF2ZSBwcm9iYWJseSBnb3QgZW5vdWdoIG1lbW9yeSAtIGxldCBpdCByaXAuCi0JICovCi0JY3VycmVudC0+bW0tPmJyayA9IGJyazsKLQlkb19icmsob2xkYnJrLCBuZXdicmstb2xkYnJrKTsKLQlyZXR2YWwgPSAwOwotb3V0OgotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzdW5vc19zYnJrKGludCBpbmNyZW1lbnQpCi17Ci0JaW50IGVycm9yOwotCXVuc2lnbmVkIGxvbmcgb2xkYnJrOwotCi0JLyogVGhpcyBzaG91bGQgZG8gaXQgaG9wZWZ1bGx5Li4uICovCi0JbG9ja19rZXJuZWwoKTsKLQlvbGRicmsgPSBjdXJyZW50LT5tbS0+YnJrOwotCWVycm9yID0gc3Vub3NfYnJrKCgoaW50KSBjdXJyZW50LT5tbS0+YnJrKSArIGluY3JlbWVudCk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBvbGRicms7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyogWFhYIENvbXBsZXRlbHkgdW5kb2N1bWVudGVkLCBhbmQgY29tcGxldGVseSBtYWdpYy4uLgotICogWFhYIEkgYmVsaWV2ZSBpdCBpcyB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgYnkKLSAqIFhYWCBhcmd1bWVudCAnaW5jcmVtZW50JyBhbmQgcmV0dXJuIHRoZSBuZXcgZW5kIG9mIHN0YWNrCi0gKiBYWFggYXJlYS4gIFdoZWVlLi4uCi0gKi8KLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzdW5vc19zc3RrKGludCBpbmNyZW1lbnQpCi17Ci0JbG9ja19rZXJuZWwoKTsKLQlwcmludGsoIiVzOiBDYWxsIHRvIHN1bm9zX3NzdGsoaW5jcmVtZW50PCVkPikgaXMgdW5zdXBwb3J0ZWRcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIGluY3JlbWVudCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAtMTsKLX0KLQotLyogR2l2ZSBoaW50cyB0byB0aGUga2VybmVsIGFzIHRvIHdoYXQgcGFnaW5nIHN0cmF0ZWd5IHRvIHVzZS4uLgotICogQ29tcGxldGVseSBib2d1cywgZG9uJ3QgcmVtaW5kIG1lLgotICovCi0jZGVmaW5lIFZBX05PUk1BTCAgICAgMCAvKiBOb3JtYWwgdm0gdXNhZ2UgZXhwZWN0ZWQgKi8KLSNkZWZpbmUgVkFfQUJOT1JNQUwgICAxIC8qIEFibm9ybWFsL3JhbmRvbSB2bSB1c2FnZSBwcm9iYWJsZSAqLwotI2RlZmluZSBWQV9TRVFVRU5USUFMIDIgLyogQWNjZXNzZXMgd2lsbCBiZSBvZiBhIHNlcXVlbnRpYWwgbmF0dXJlICovCi0jZGVmaW5lIFZBX0lOVkFMSURBVEUgMyAvKiBQYWdlIHRhYmxlIGVudHJpZXMgc2hvdWxkIGJlIGZsdXNoZWQgPz8/ICovCi1zdGF0aWMgY2hhciAqdnN0cmluZ3NbXSA9IHsKLQkiVkFfTk9STUFMIiwKLQkiVkFfQUJOT1JNQUwiLAotCSJWQV9TRVFVRU5USUFMIiwKLQkiVkFfSU5WQUxJREFURSIsCi19OwotCi1hc21saW5rYWdlIHZvaWQgc3Vub3NfdmFkdmlzZSh1bnNpZ25lZCBsb25nIHN0cmF0ZWd5KQotewotCS8qIEkgd2FubmEgc2VlIHdobyB1c2VzIHRoaXMuLi4gKi8KLQlsb2NrX2tlcm5lbCgpOwotCXByaW50aygiJXM6IEFkdmlzZXMgdXMgdG8gdXNlICVzIHBhZ2luZyBzdHJhdGVneVxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwKLQkgICAgICAgc3RyYXRlZ3kgPD0gMyA/IHZzdHJpbmdzW3N0cmF0ZWd5XSA6ICJCT0dVUyIpOwotCXVubG9ja19rZXJuZWwoKTsKLX0KLQotLyogVGhpcyBqdXN0IHdhbnRzIHRoZSBzb2Z0IGxpbWl0IChpZS4gcmxpbV9jdXIgZWxlbWVudCkgb2YgdGhlIFJMSU1JVF9OT0ZJTEUKLSAqIHJlc291cmNlIGxpbWl0IGFuZCBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBzdW5vcwotICogcmV2cy4KLSAqLwotYXNtbGlua2FnZSBsb25nIHN1bm9zX2dldGR0YWJsZXNpemUodm9pZCkKLXsKLQlyZXR1cm4gU1VOT1NfTlJfT1BFTjsKLX0KLQotI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKLQotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN1bm9zX3NpZ2Jsb2NrKHVuc2lnbmVkIGxvbmcgYmxrX21hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBvbGQ7Ci0KLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlvbGQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKLQljdXJyZW50LT5ibG9ja2VkLnNpZ1swXSB8PSAoYmxrX21hc2sgJiBfQkxPQ0tBQkxFKTsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmV0dXJuIG9sZDsKLX0KLQotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN1bm9zX3NpZ3NldG1hc2sodW5zaWduZWQgbG9uZyBuZXdtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgcmV0dmFsOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmV0dmFsID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07Ci0JY3VycmVudC0+YmxvY2tlZC5zaWdbMF0gPSAobmV3bWFzayAmIF9CTE9DS0FCTEUpOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiBTdW5PUyBnZXRkZW50cyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG5ld2VyIExpbnV4IChpQkNTMiBjb21wbGlhbnQpICAgICovCi0vKiBnZXRkZW50cyBzeXN0ZW0gY2FsbCwgdGhlIGZvcm1hdCBvZiB0aGUgc3RydWN0dXJlIGp1c3QgaGFzIGEgZGlmZmVyZW50ICovCi0vKiBsYXlvdXQgKGRfb2ZmK2RfaW5vIGluc3RlYWQgb2YgZF9pbm8rZF9vZmYpICovCi1zdHJ1Y3Qgc3Vub3NfZGlyZW50IHsKLSAgICBsb25nICAgICAgICAgICBkX29mZjsKLSAgICB1bnNpZ25lZCBsb25nICBkX2lubzsKLSAgICB1bnNpZ25lZCBzaG9ydCBkX3JlY2xlbjsKLSAgICB1bnNpZ25lZCBzaG9ydCBkX25hbWxlbjsKLSAgICBjaGFyICAgICAgICAgICBkX25hbWVbMV07Ci19OwotCi1zdHJ1Y3Qgc3Vub3NfZGlyZW50X2NhbGxiYWNrIHsKLSAgICBzdHJ1Y3Qgc3Vub3NfZGlyZW50IF9fdXNlciAqY3VycjsKLSAgICBzdHJ1Y3Qgc3Vub3NfZGlyZW50IF9fdXNlciAqcHJldmlvdXM7Ci0gICAgaW50IGNvdW50OwotICAgIGludCBlcnJvcjsKLX07Ci0KLSNkZWZpbmUgTkFNRV9PRkZTRVQoZGUpICgoaW50KSAoKGRlKS0+ZF9uYW1lIC0gKGNoYXIgX191c2VyICopIChkZSkpKQotI2RlZmluZSBST1VORF9VUCh4KSAoKCh4KStzaXplb2YobG9uZyktMSkgJiB+KHNpemVvZihsb25nKS0xKSkKLQotc3RhdGljIGludCBzdW5vc19maWxsZGlyKHZvaWQgKiBfX2J1ZiwgY29uc3QgY2hhciAqIG5hbWUsIGludCBuYW1sZW4sCi0JCQkgbG9mZl90IG9mZnNldCwgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKLXsKLQlzdHJ1Y3Qgc3Vub3NfZGlyZW50IF9fdXNlciAqZGlyZW50OwotCXN0cnVjdCBzdW5vc19kaXJlbnRfY2FsbGJhY2sgKiBidWYgPSBfX2J1ZjsKLQl1bnNpZ25lZCBsb25nIGRfaW5vOwotCWludCByZWNsZW4gPSBST1VORF9VUChOQU1FX09GRlNFVChkaXJlbnQpICsgbmFtbGVuICsgMSk7Ci0KLQlidWYtPmVycm9yID0gLUVJTlZBTDsJLyogb25seSB1c2VkIGlmIHdlIGZhaWwuLiAqLwotCWlmIChyZWNsZW4gPiBidWYtPmNvdW50KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkX2lubyA9IGlubzsKLQlpZiAoc2l6ZW9mKGRfaW5vKSA8IHNpemVvZihpbm8pICYmIGRfaW5vICE9IGlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JZGlyZW50ID0gYnVmLT5wcmV2aW91czsKLQlpZiAoZGlyZW50KQotCQlwdXRfdXNlcihvZmZzZXQsICZkaXJlbnQtPmRfb2ZmKTsKLQlkaXJlbnQgPSBidWYtPmN1cnI7Ci0JYnVmLT5wcmV2aW91cyA9IGRpcmVudDsKLQlwdXRfdXNlcihkX2lubywgJmRpcmVudC0+ZF9pbm8pOwotCXB1dF91c2VyKG5hbWxlbiwgJmRpcmVudC0+ZF9uYW1sZW4pOwotCXB1dF91c2VyKHJlY2xlbiwgJmRpcmVudC0+ZF9yZWNsZW4pOwotCWNvcHlfdG9fdXNlcihkaXJlbnQtPmRfbmFtZSwgbmFtZSwgbmFtbGVuKTsKLQlwdXRfdXNlcigwLCBkaXJlbnQtPmRfbmFtZSArIG5hbWxlbik7Ci0JZGlyZW50ID0gKHZvaWQgX191c2VyICopIGRpcmVudCArIHJlY2xlbjsKLQlidWYtPmN1cnIgPSBkaXJlbnQ7Ci0JYnVmLT5jb3VudCAtPSByZWNsZW47Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX2dldGRlbnRzKHVuc2lnbmVkIGludCBmZCwgdm9pZCBfX3VzZXIgKmRpcmVudCwgaW50IGNudCkKLXsKLQlzdHJ1Y3QgZmlsZSAqIGZpbGU7Ci0Jc3RydWN0IHN1bm9zX2RpcmVudCBfX3VzZXIgKmxhc3RkaXJlbnQ7Ci0Jc3RydWN0IHN1bm9zX2RpcmVudF9jYWxsYmFjayBidWY7Ci0JaW50IGVycm9yID0gLUVCQURGOwotCi0JaWYgKGZkID49IFNVTk9TX05SX09QRU4pCi0JCWdvdG8gb3V0OwotCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IC1FSU5WQUw7Ci0JaWYgKGNudCA8IChzaXplb2Yoc3RydWN0IHN1bm9zX2RpcmVudCkgKyAyNTUpKQotCQlnb3RvIG91dF9wdXRmOwotCi0JYnVmLmN1cnIgPSAoc3RydWN0IHN1bm9zX2RpcmVudCBfX3VzZXIgKikgZGlyZW50OwotCWJ1Zi5wcmV2aW91cyA9IE5VTEw7Ci0JYnVmLmNvdW50ID0gY250OwotCWJ1Zi5lcnJvciA9IDA7Ci0KLQllcnJvciA9IHZmc19yZWFkZGlyKGZpbGUsIHN1bm9zX2ZpbGxkaXIsICZidWYpOwotCWlmIChlcnJvciA8IDApCi0JCWdvdG8gb3V0X3B1dGY7Ci0KLQlsYXN0ZGlyZW50ID0gYnVmLnByZXZpb3VzOwotCWVycm9yID0gYnVmLmVycm9yOwotCWlmIChsYXN0ZGlyZW50KSB7Ci0JCXB1dF91c2VyKGZpbGUtPmZfcG9zLCAmbGFzdGRpcmVudC0+ZF9vZmYpOwotCQllcnJvciA9IGNudCAtIGJ1Zi5jb3VudDsKLQl9Ci0KLW91dF9wdXRmOgotCWZwdXQoZmlsZSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBPbGQgc3Vub3MgZ2V0ZGlyZW50cmllcywgc2V2ZXJlbHkgYnJva2VuIGNvbXBhdGliaWxpdHkgc3R1ZmYgaGVyZS4gKi8KLXN0cnVjdCBzdW5vc19kaXJlbnRyeSB7Ci0gICAgdW5zaWduZWQgbG9uZyAgZF9pbm87Ci0gICAgdW5zaWduZWQgc2hvcnQgZF9yZWNsZW47Ci0gICAgdW5zaWduZWQgc2hvcnQgZF9uYW1sZW47Ci0gICAgY2hhciAgICAgICAgICAgZF9uYW1lWzFdOwotfTsKLQotc3RydWN0IHN1bm9zX2RpcmVudHJ5X2NhbGxiYWNrIHsKLSAgICBzdHJ1Y3Qgc3Vub3NfZGlyZW50cnkgX191c2VyICpjdXJyOwotICAgIHN0cnVjdCBzdW5vc19kaXJlbnRyeSBfX3VzZXIgKnByZXZpb3VzOwotICAgIGludCBjb3VudDsKLSAgICBpbnQgZXJyb3I7Ci19OwotCi1zdGF0aWMgaW50IHN1bm9zX2ZpbGxkaXJlbnRyeSh2b2lkICogX19idWYsIGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgbmFtbGVuLAotCQkJICAgICAgbG9mZl90IG9mZnNldCwgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKLXsKLQlzdHJ1Y3Qgc3Vub3NfZGlyZW50cnkgX191c2VyICpkaXJlbnQ7Ci0Jc3RydWN0IHN1bm9zX2RpcmVudHJ5X2NhbGxiYWNrICpidWYgPSBfX2J1ZjsKLQl1bnNpZ25lZCBsb25nIGRfaW5vOwotCWludCByZWNsZW4gPSBST1VORF9VUChOQU1FX09GRlNFVChkaXJlbnQpICsgbmFtbGVuICsgMSk7Ci0KLQlidWYtPmVycm9yID0gLUVJTlZBTDsJLyogb25seSB1c2VkIGlmIHdlIGZhaWwuLiAqLwotCWlmIChyZWNsZW4gPiBidWYtPmNvdW50KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkX2lubyA9IGlubzsKLQlpZiAoc2l6ZW9mKGRfaW5vKSA8IHNpemVvZihpbm8pICYmIGRfaW5vICE9IGlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JZGlyZW50ID0gYnVmLT5wcmV2aW91czsKLQlkaXJlbnQgPSBidWYtPmN1cnI7Ci0JYnVmLT5wcmV2aW91cyA9IGRpcmVudDsKLQlwdXRfdXNlcihkX2lubywgJmRpcmVudC0+ZF9pbm8pOwotCXB1dF91c2VyKG5hbWxlbiwgJmRpcmVudC0+ZF9uYW1sZW4pOwotCXB1dF91c2VyKHJlY2xlbiwgJmRpcmVudC0+ZF9yZWNsZW4pOwotCWNvcHlfdG9fdXNlcihkaXJlbnQtPmRfbmFtZSwgbmFtZSwgbmFtbGVuKTsKLQlwdXRfdXNlcigwLCBkaXJlbnQtPmRfbmFtZSArIG5hbWxlbik7Ci0JZGlyZW50ID0gKHZvaWQgX191c2VyICopIGRpcmVudCArIHJlY2xlbjsKLQlidWYtPmN1cnIgPSBkaXJlbnQ7Ci0JYnVmLT5jb3VudCAtPSByZWNsZW47Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX2dldGRpcmVudHJpZXModW5zaWduZWQgaW50IGZkLCB2b2lkIF9fdXNlciAqZGlyZW50LAotCQkJCSAgIGludCBjbnQsIHVuc2lnbmVkIGludCBfX3VzZXIgKmJhc2VwKQotewotCXN0cnVjdCBmaWxlICogZmlsZTsKLQlzdHJ1Y3Qgc3Vub3NfZGlyZW50cnkgX191c2VyICpsYXN0ZGlyZW50OwotCXN0cnVjdCBzdW5vc19kaXJlbnRyeV9jYWxsYmFjayBidWY7Ci0JaW50IGVycm9yID0gLUVCQURGOwotCi0JaWYgKGZkID49IFNVTk9TX05SX09QRU4pCi0JCWdvdG8gb3V0OwotCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IC1FSU5WQUw7Ci0JaWYgKGNudCA8IChzaXplb2Yoc3RydWN0IHN1bm9zX2RpcmVudHJ5KSArIDI1NSkpCi0JCWdvdG8gb3V0X3B1dGY7Ci0KLQlidWYuY3VyciA9IChzdHJ1Y3Qgc3Vub3NfZGlyZW50cnkgX191c2VyICopIGRpcmVudDsKLQlidWYucHJldmlvdXMgPSBOVUxMOwotCWJ1Zi5jb3VudCA9IGNudDsKLQlidWYuZXJyb3IgPSAwOwotCi0JZXJyb3IgPSB2ZnNfcmVhZGRpcihmaWxlLCBzdW5vc19maWxsZGlyZW50cnksICZidWYpOwotCWlmIChlcnJvciA8IDApCi0JCWdvdG8gb3V0X3B1dGY7Ci0KLQlsYXN0ZGlyZW50ID0gYnVmLnByZXZpb3VzOwotCWVycm9yID0gYnVmLmVycm9yOwotCWlmIChsYXN0ZGlyZW50KSB7Ci0JCXB1dF91c2VyKGZpbGUtPmZfcG9zLCBiYXNlcCk7Ci0JCWVycm9yID0gY250IC0gYnVmLmNvdW50OwotCX0KLQotb3V0X3B1dGY6Ci0JZnB1dChmaWxlKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0cnVjdCBzdW5vc191dHNuYW1lIHsKLQljaGFyIHNuYW1lWzldOwotCWNoYXIgbm5hbWVbOV07Ci0JY2hhciBubmV4dFs1Nl07Ci0JY2hhciByZWxbOV07Ci0JY2hhciB2ZXJbOV07Ci0JY2hhciBtYWNoWzldOwotfTsKLQotYXNtbGlua2FnZSBpbnQgc3Vub3NfdW5hbWUoc3RydWN0IHN1bm9zX3V0c25hbWUgX191c2VyICpuYW1lKQotewotCWludCByZXQ7Ci0JZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQlyZXQgPSBjb3B5X3RvX3VzZXIoJm5hbWUtPnNuYW1lWzBdLCAmdXRzbmFtZSgpLT5zeXNuYW1lWzBdLAotCQkJICAgc2l6ZW9mKG5hbWUtPnNuYW1lKSAtIDEpOwotCWlmICghcmV0KSB7Ci0JCXJldCB8PSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+bm5hbWVbMF0sICZ1dHNuYW1lKCktPm5vZGVuYW1lWzBdLAotCQkJCSAgICAgIHNpemVvZihuYW1lLT5ubmFtZSkgLSAxKTsKLQkJcmV0IHw9IF9fcHV0X3VzZXIoJ1wwJywgJm5hbWUtPm5uYW1lWzhdKTsKLQkJcmV0IHw9IF9fY29weV90b191c2VyKCZuYW1lLT5yZWxbMF0sICZ1dHNuYW1lKCktPnJlbGVhc2VbMF0sCi0JCQkJICAgICAgc2l6ZW9mKG5hbWUtPnJlbCkgLSAxKTsKLQkJcmV0IHw9IF9fY29weV90b191c2VyKCZuYW1lLT52ZXJbMF0sICZ1dHNuYW1lKCktPnZlcnNpb25bMF0sCi0JCQkJICAgICAgc2l6ZW9mKG5hbWUtPnZlcikgLSAxKTsKLQkJcmV0IHw9IF9fY29weV90b191c2VyKCZuYW1lLT5tYWNoWzBdLCAmdXRzbmFtZSgpLT5tYWNoaW5lWzBdLAotCQkJCSAgICAgIHNpemVvZihuYW1lLT5tYWNoKSAtIDEpOwotCX0KLQl1cF9yZWFkKCZ1dHNfc2VtKTsKLQlyZXR1cm4gcmV0ID8gLUVGQVVMVCA6IDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX25vc3lzKHZvaWQpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7Ci0Jc2lnaW5mb190IGluZm87Ci0Jc3RhdGljIGludCBjbnQ7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCXJlZ3MgPSBjdXJyZW50LT50aHJlYWQua3JlZ3M7Ci0JaW5mby5zaV9zaWdubyA9IFNJR1NZUzsKLQlpbmZvLnNpX2Vycm5vID0gMDsKLQlpbmZvLnNpX2NvZGUgPSBfX1NJX0ZBVUxUfDB4MTAwOwotCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKXJlZ3MtPnBjOwotCWluZm8uc2lfdHJhcG5vID0gcmVncy0+dV9yZWdzW1VSRUdfRzFdOwotCXNlbmRfc2lnX2luZm8oU0lHU1lTLCAmaW5mbywgY3VycmVudCk7Ci0JaWYgKGNudCsrIDwgNCkgewotCQlwcmludGsoIlByb2Nlc3MgbWFrZXMgbmlfc3lzY2FsbCBudW1iZXIgJWQsIHJlZ2lzdGVyIGR1bXA6XG4iLAotCQkgICAgICAgKGludCkgcmVncy0+dV9yZWdzW1VSRUdfRzFdKTsKLQkJc2hvd19yZWdzKHJlZ3MpOwotCX0KLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLS8qIFRoaXMgaXMgbm90IGEgcmVhbCBhbmQgY29tcGxldGUgaW1wbGVtZW50YXRpb24geWV0LCBqdXN0IHRvIGtlZXAKLSAqIHRoZSBlYXN5IFN1bk9TIGJpbmFyaWVzIGhhcHB5LgotICovCi1hc21saW5rYWdlIGludCBzdW5vc19mcGF0aGNvbmYoaW50IGZkLCBpbnQgbmFtZSkKLXsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoKG5hbWUpIHsKLQljYXNlIF9QQ09ORl9MSU5LOgotCQlyZXQgPSBMSU5LX01BWDsKLQkJYnJlYWs7Ci0JY2FzZSBfUENPTkZfQ0FOT046Ci0JCXJldCA9IE1BWF9DQU5PTjsKLQkJYnJlYWs7Ci0JY2FzZSBfUENPTkZfSU5QVVQ6Ci0JCXJldCA9IE1BWF9JTlBVVDsKLQkJYnJlYWs7Ci0JY2FzZSBfUENPTkZfTkFNRToKLQkJcmV0ID0gTkFNRV9NQVg7Ci0JCWJyZWFrOwotCWNhc2UgX1BDT05GX1BBVEg6Ci0JCXJldCA9IFBBVEhfTUFYOwotCQlicmVhazsKLQljYXNlIF9QQ09ORl9QSVBFOgotCQlyZXQgPSBQSVBFX0JVRjsKLQkJYnJlYWs7Ci0JY2FzZSBfUENPTkZfQ0hSRVNUUklDVDoJCS8qIFhYWCBJbnZlc3RpZ2F0ZSBYWFggKi8KLQkJcmV0ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBfUENPTkZfTk9UUlVOQzoJCS8qIFhYWCBJbnZlc3RpZ2F0ZSBYWFggKi8KLQljYXNlIF9QQ09ORl9WRElTQUJMRToKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3BhdGhjb25mKGNoYXIgX191c2VyICpwYXRoLCBpbnQgbmFtZSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc3Vub3NfZnBhdGhjb25mKDAsIG5hbWUpOyAvKiBYWFggY2hlZXNlIFhYWCAqLwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFN1bk9TIG1vdW50IHN5c3RlbSBjYWxsIGVtdWxhdGlvbiAqLwotCi1hc21saW5rYWdlIGludCBzdW5vc19zZWxlY3QoaW50IHdpZHRoLCBmZF9zZXQgX191c2VyICppbnAsIGZkX3NldCBfX3VzZXIgKm91dHAsCi0JCQkgICAgZmRfc2V0IF9fdXNlciAqZXhwLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnR2cCkKLXsKLQlpbnQgcmV0OwotCi0JLyogU3VuT1MgYmluYXJpZXMgZXhwZWN0IHRoYXQgc2VsZWN0IHdvbid0IGNoYW5nZSB0aGUgdHZwIGNvbnRlbnRzICovCi0JcmV0ID0gc3lzX3NlbGVjdCAod2lkdGgsIGlucCwgb3V0cCwgZXhwLCB0dnApOwotCWlmIChyZXQgPT0gLUVJTlRSICYmIHR2cCkgewotCQl0aW1lX3Qgc2VjLCB1c2VjOwotCi0JCV9fZ2V0X3VzZXIoc2VjLCAmdHZwLT50dl9zZWMpOwotCQlfX2dldF91c2VyKHVzZWMsICZ0dnAtPnR2X3VzZWMpOwotCi0JCWlmIChzZWMgPT0gMCAmJiB1c2VjID09IDApCi0JCQlyZXQgPSAwOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIHZvaWQgc3Vub3Nfbm9wKHZvaWQpCi17Ci0JcmV0dXJuOwotfQotCi0vKiBTdW5PUyBtb3VudC91bW91bnQuICovCi0jZGVmaW5lIFNNTlRfUkRPTkxZICAgICAgIDEKLSNkZWZpbmUgU01OVF9OT1NVSUQgICAgICAgMgotI2RlZmluZSBTTU5UX05FV1RZUEUgICAgICA0Ci0jZGVmaW5lIFNNTlRfR1JQSUQgICAgICAgIDgKLSNkZWZpbmUgU01OVF9SRU1PVU5UICAgICAgMTYKLSNkZWZpbmUgU01OVF9OT1NVQiAgICAgICAgMzIKLSNkZWZpbmUgU01OVF9NVUxUSSAgICAgICAgNjQKLSNkZWZpbmUgU01OVF9TWVM1ICAgICAgICAgMTI4Ci0KLXN0cnVjdCBzdW5vc19maF90IHsKLQljaGFyIGZoX2RhdGEgW05GU19GSFNJWkVdOwotfTsKLQotc3RydWN0IHN1bm9zX25mc19tb3VudF9hcmdzIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gIF9fdXNlciAqYWRkcjsgLyogZmlsZSBzZXJ2ZXIgYWRkcmVzcyAqLwotCXN0cnVjdCBuZnNfZmggX191c2VyICpmaDsgICAgIC8qIEZpbGUgaGFuZGxlIHRvIGJlIG1vdW50ZWQgKi8KLQlpbnQgICAgICAgIGZsYWdzOyAgICAgIC8qIGZsYWdzICovCi0JaW50ICAgICAgICB3c2l6ZTsgICAgICAvKiB3cml0ZSBzaXplIGluIGJ5dGVzICovCi0JaW50ICAgICAgICByc2l6ZTsgICAgICAvKiByZWFkIHNpemUgaW4gYnl0ZXMgKi8KLQlpbnQgICAgICAgIHRpbWVvOyAgICAgIC8qIGluaXRpYWwgdGltZW91dCBpbiAuMSBzZWNzICovCi0JaW50ICAgICAgICByZXRyYW5zOyAgICAvKiB0aW1lcyB0byByZXRyeSBzZW5kICovCi0JY2hhciAgICAgICBfX3VzZXIgKmhvc3RuYW1lOyAgLyogc2VydmVyJ3MgaG9zdG5hbWUgKi8KLQlpbnQgICAgICAgIGFjcmVnbWluOyAgIC8qIGF0dHIgY2FjaGUgZmlsZSBtaW4gc2VjcyAqLwotCWludCAgICAgICAgYWNyZWdtYXg7ICAgLyogYXR0ciBjYWNoZSBmaWxlIG1heCBzZWNzICovCi0JaW50ICAgICAgICBhY2Rpcm1pbjsgICAvKiBhdHRyIGNhY2hlIGRpciBtaW4gc2VjcyAqLwotCWludCAgICAgICAgYWNkaXJtYXg7ICAgLyogYXR0ciBjYWNoZSBkaXIgbWF4IHNlY3MgKi8KLQljaGFyICAgICAgIF9fdXNlciAqbmV0bmFtZTsgICAvKiBzZXJ2ZXIncyBuZXRuYW1lICovCi19OwotCi0KLS8qIEJpbmQgdGhlIHNvY2tldCBvbiBhIGxvY2FsIHJlc2VydmVkIHBvcnQgYW5kIGNvbm5lY3QgaXQgdG8gdGhlCi0gKiByZW1vdGUgc2VydmVyLiAgVGhpcyBvbiBMaW51eC9pMzg2IGlzIGRvbmUgYnkgdGhlIG1vdW50IHByb2dyYW0sCi0gKiBub3QgYnkgdGhlIGtlcm5lbC4KLSAqLwotc3RhdGljIGludAotc3Vub3NfbmZzX2dldF9zZXJ2ZXJfZmQgKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2luICphZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbiBsb2NhbDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOwotCWludCAgICB0cnlfcG9ydDsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQ7Ci0Jc3RydWN0IGlub2RlICAqaW5vZGU7Ci0Jc3RydWN0IGZpbGUgICAqZmlsZTsKLQlpbnQgICAgcmV0LCByZXN1bHQgPSAwOwotCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBvdXQ7Ci0KLQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0KLQlzb2NrZXQgPSBTT0NLRVRfSShpbm9kZSk7Ci0JbG9jYWwuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JbG9jYWwuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKLQotCS8qIElQUE9SVF9SRVNFUlZFRCA9IDEwMjQsIGNhbid0IGZpbmQgdGhlIGRlZmluaXRpb24gaW4gdGhlIGtlcm5lbCAqLwotCXRyeV9wb3J0ID0gMTAyNDsKLQlkbyB7Ci0JCWxvY2FsLnNpbl9wb3J0ID0gaHRvbnMgKC0tdHJ5X3BvcnQpOwotCQlyZXQgPSBzb2NrZXQtPm9wcy0+YmluZChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZsb2NhbCwKLQkJCQkJc2l6ZW9mKGxvY2FsKSk7Ci0JfSB3aGlsZSAocmV0ICYmIHRyeV9wb3J0ID4gKDEwMjQgLyAyKSk7Ci0KLQlpZiAocmV0KQotCQlnb3RvIG91dF9wdXRmOwotCi0Jc2VydmVyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCXNlcnZlci5zaW5fYWRkciA9IGFkZHItPnNpbl9hZGRyOwotCXNlcnZlci5zaW5fcG9ydCA9IE5GU19QT1JUOwotCi0JLyogQ2FsbCBzeXNfY29ubmVjdCAqLwotCXJldCA9IHNvY2tldC0+b3BzLT5jb25uZWN0IChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlciwKLQkJCQkgICAgc2l6ZW9mIChzZXJ2ZXIpLCBmaWxlLT5mX2ZsYWdzKTsKLQlpZiAocmV0ID49IDApCi0JCXJlc3VsdCA9IDE7Ci0KLW91dF9wdXRmOgotCWZwdXQoZmlsZSk7Ci1vdXQ6Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBnZXRfZGVmYXVsdCAoaW50IHZhbHVlLCBpbnQgZGVmX3ZhbHVlKQotewotICAgIGlmICh2YWx1ZSkKLQlyZXR1cm4gdmFsdWU7Ci0gICAgZWxzZQotCXJldHVybiBkZWZfdmFsdWU7Ci19Ci0KLXN0YXRpYyBpbnQgc3Vub3NfbmZzX21vdW50KGNoYXIgKmRpcl9uYW1lLCBpbnQgbGludXhfZmxhZ3MsIHZvaWQgX191c2VyICpkYXRhKQotewotCWludCAgc2VydmVyX2ZkLCBlcnI7Ci0JY2hhciAqdGhlX25hbWUsICptb3VudF9wYWdlOwotCXN0cnVjdCBuZnNfbW91bnRfZGF0YSBsaW51eF9uZnNfbW91bnQ7Ci0Jc3RydWN0IHN1bm9zX25mc19tb3VudF9hcmdzIHN1bm9zX21vdW50OwotCi0JLyogT2ssIGhlcmUgY29tZXMgdGhlIGZ1biBwYXJ0OiBMaW51eCdzIG5mcyBtb3VudCBuZWVkcyBhCi0JICogc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciwgYnV0IFN1bk9TIG1vdW50IGRvZXMgbm90Ci0JICogcmVxdWlyZSB0aGlzLCBzbyB3ZSB1c2UgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBkZXN0aW5hdGlvbgotCSAqIGFkZHJlc3MgdG8gY3JlYXRlIGEgc29ja2V0IGFuZCBiaW5kIGl0IHRvIGEgcmVzZXJ2ZWQKLQkgKiBwb3J0IG9uIHRoaXMgc3lzdGVtCi0JICovCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzdW5vc19tb3VudCwgZGF0YSwgc2l6ZW9mKHN1bm9zX21vdW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jc2VydmVyX2ZkID0gc3lzX3NvY2tldCAoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOwotCWlmIChzZXJ2ZXJfZmQgPCAwKQotCQlyZXR1cm4gLUVOWElPOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZsaW51eF9uZnNfbW91bnQuYWRkcixzdW5vc19tb3VudC5hZGRyLAotCQkJCXNpemVvZigqc3Vub3NfbW91bnQuYWRkcikpIHx8Ci0JICAgIGNvcHlfZnJvbV91c2VyKCZsaW51eF9uZnNfbW91bnQucm9vdCxzdW5vc19tb3VudC5maCwKLQkJCQlzaXplb2YoKnN1bm9zX21vdW50LmZoKSkpIHsKLQkJc3lzX2Nsb3NlIChzZXJ2ZXJfZmQpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlpZiAoIXN1bm9zX25mc19nZXRfc2VydmVyX2ZkIChzZXJ2ZXJfZmQsICZsaW51eF9uZnNfbW91bnQuYWRkcikpewotCQlzeXNfY2xvc2UgKHNlcnZlcl9mZCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JLyogTm93LCBiaW5kIGl0IHRvIGEgbG9jYWxseSByZXNlcnZlZCBwb3J0ICovCi0JbGludXhfbmZzX21vdW50LnZlcnNpb24gID0gTkZTX01PVU5UX1ZFUlNJT047Ci0JbGludXhfbmZzX21vdW50LmZsYWdzICAgID0gc3Vub3NfbW91bnQuZmxhZ3M7Ci0JbGludXhfbmZzX21vdW50LmZkICAgICAgID0gc2VydmVyX2ZkOwotCQotCWxpbnV4X25mc19tb3VudC5yc2l6ZSAgICA9IGdldF9kZWZhdWx0IChzdW5vc19tb3VudC5yc2l6ZSwgODE5Mik7Ci0JbGludXhfbmZzX21vdW50LndzaXplICAgID0gZ2V0X2RlZmF1bHQgKHN1bm9zX21vdW50LndzaXplLCA4MTkyKTsKLQlsaW51eF9uZnNfbW91bnQudGltZW8gICAgPSBnZXRfZGVmYXVsdCAoc3Vub3NfbW91bnQudGltZW8sIDEwKTsKLQlsaW51eF9uZnNfbW91bnQucmV0cmFucyAgPSBzdW5vc19tb3VudC5yZXRyYW5zOwotCQotCWxpbnV4X25mc19tb3VudC5hY3JlZ21pbiA9IHN1bm9zX21vdW50LmFjcmVnbWluOwotCWxpbnV4X25mc19tb3VudC5hY3JlZ21heCA9IHN1bm9zX21vdW50LmFjcmVnbWF4OwotCWxpbnV4X25mc19tb3VudC5hY2Rpcm1pbiA9IHN1bm9zX21vdW50LmFjZGlybWluOwotCWxpbnV4X25mc19tb3VudC5hY2Rpcm1heCA9IHN1bm9zX21vdW50LmFjZGlybWF4OwotCi0JdGhlX25hbWUgPSBnZXRuYW1lKHN1bm9zX21vdW50Lmhvc3RuYW1lKTsKLQlpZiAoSVNfRVJSKHRoZV9uYW1lKSkKLQkJcmV0dXJuIFBUUl9FUlIodGhlX25hbWUpOwotCi0Jc3RybGNweShsaW51eF9uZnNfbW91bnQuaG9zdG5hbWUsIHRoZV9uYW1lLAotCQlzaXplb2YobGludXhfbmZzX21vdW50Lmhvc3RuYW1lKSk7Ci0JcHV0bmFtZSAodGhlX25hbWUpOwotCQotCW1vdW50X3BhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb3VudF9wYWdlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShtb3VudF9wYWdlLCAmbGludXhfbmZzX21vdW50LCBzaXplb2YobGludXhfbmZzX21vdW50KSk7Ci0KLQllcnIgPSBkb19tb3VudCgiIiwgZGlyX25hbWUsICJuZnMiLCBsaW51eF9mbGFncywgbW91bnRfcGFnZSk7Ci0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIG1vdW50X3BhZ2UpOwotCXJldHVybiBlcnI7Ci19Ci0KLWFzbWxpbmthZ2UgaW50Ci1zdW5vc19tb3VudChjaGFyIF9fdXNlciAqdHlwZSwgY2hhciBfX3VzZXIgKmRpciwgaW50IGZsYWdzLCB2b2lkIF9fdXNlciAqZGF0YSkKLXsKLQlpbnQgbGludXhfZmxhZ3MgPSAwOwotCWludCByZXQgPSAtRUlOVkFMOwotCWNoYXIgKmRldl9mbmFtZSA9IE5VTEw7Ci0JY2hhciAqZGlyX3BhZ2UsICp0eXBlX3BhZ2U7Ci0KLQlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCQkKLQlsb2NrX2tlcm5lbCgpOwotCS8qIFdlIGRvbid0IGhhbmRsZSB0aGUgaW50ZWdlciBmcyB0eXBlICovCi0JaWYgKChmbGFncyAmIFNNTlRfTkVXVFlQRSkgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBEbyBub3QgYWxsb3cgZm9yIHRob3NlIGZsYWdzIHdlIGRvbid0IHN1cHBvcnQgKi8KLQlpZiAoZmxhZ3MgJiAoU01OVF9HUlBJRHxTTU5UX05PU1VCfFNNTlRfTVVMVEl8U01OVF9TWVM1KSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoZmxhZ3MgJiBTTU5UX1JFTU9VTlQpCi0JCWxpbnV4X2ZsYWdzIHw9IE1TX1JFTU9VTlQ7Ci0JaWYgKGZsYWdzICYgU01OVF9SRE9OTFkpCi0JCWxpbnV4X2ZsYWdzIHw9IE1TX1JET05MWTsKLQlpZiAoZmxhZ3MgJiBTTU5UX05PU1VJRCkKLQkJbGludXhfZmxhZ3MgfD0gTVNfTk9TVUlEOwotCi0JZGlyX3BhZ2UgPSBnZXRuYW1lKGRpcik7Ci0JcmV0ID0gUFRSX0VSUihkaXJfcGFnZSk7Ci0JaWYgKElTX0VSUihkaXJfcGFnZSkpCi0JCWdvdG8gb3V0OwotCi0JdHlwZV9wYWdlID0gZ2V0bmFtZSh0eXBlKTsKLQlyZXQgPSBQVFJfRVJSKHR5cGVfcGFnZSk7Ci0JaWYgKElTX0VSUih0eXBlX3BhZ2UpKQotCQlnb3RvIG91dDE7Ci0KLQlpZiAoc3RyY21wKHR5cGVfcGFnZSwgImV4dDIiKSA9PSAwKSB7Ci0JCWRldl9mbmFtZSA9IGdldG5hbWUoZGF0YSk7Ci0JfSBlbHNlIGlmIChzdHJjbXAodHlwZV9wYWdlLCAiaXNvOTY2MCIpID09IDApIHsKLQkJZGV2X2ZuYW1lID0gZ2V0bmFtZShkYXRhKTsKLQl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlX3BhZ2UsICJtaW5peCIpID09IDApIHsKLQkJZGV2X2ZuYW1lID0gZ2V0bmFtZShkYXRhKTsKLQl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlX3BhZ2UsICJuZnMiKSA9PSAwKSB7Ci0JCXJldCA9IHN1bm9zX25mc19tb3VudCAoZGlyX3BhZ2UsIGZsYWdzLCBkYXRhKTsKLQkJZ290byBvdXQyOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCh0eXBlX3BhZ2UsICJ1ZnMiKSA9PSAwKSB7Ci0JCXByaW50aygiV2FybmluZzogVUZTIGZpbGVzeXN0ZW0gbW91bnRzIHVuc3VwcG9ydGVkLlxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0MjsKLQl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlX3BhZ2UsICJwcm9jIikpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQyOwotCX0KLQlyZXQgPSBQVFJfRVJSKGRldl9mbmFtZSk7Ci0JaWYgKElTX0VSUihkZXZfZm5hbWUpKQotCQlnb3RvIG91dDI7Ci0JcmV0ID0gZG9fbW91bnQoZGV2X2ZuYW1lLCBkaXJfcGFnZSwgdHlwZV9wYWdlLCBsaW51eF9mbGFncywgTlVMTCk7Ci0JaWYgKGRldl9mbmFtZSkKLQkJcHV0bmFtZShkZXZfZm5hbWUpOwotb3V0MjoKLQlwdXRuYW1lKHR5cGVfcGFnZSk7Ci1vdXQxOgotCXB1dG5hbWUoZGlyX3BhZ2UpOwotb3V0OgotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3NldHBncnAocGlkX3QgcGlkLCBwaWRfdCBwZ2lkKQotewotCWludCByZXQ7Ci0KLQkvKiBTbyBzdHVwaWQuLi4gKi8KLQlpZiAoKCFwaWQgfHwgcGlkID09IGN1cnJlbnQtPnBpZCkgJiYKLQkgICAgIXBnaWQpIHsKLQkJc3lzX3NldHNpZCgpOwotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCXJldCA9IHN5c19zZXRwZ2lkKHBpZCwgcGdpZCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFNvIHN0dXBpZC4uLiAqLwotYXNtbGlua2FnZSBpbnQgc3Vub3Nfd2FpdDQocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgX191c2VyICpzdGF0X2FkZHIsCi0JCQkgICBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSBfX3VzZXIqcnUpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHN5c193YWl0NCgocGlkID8gcGlkIDogLTEpLCBzdGF0X2FkZHIsIG9wdGlvbnMsIHJ1KTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19raWxscGcoaW50IHBncnAsIGludCBzaWcpCi17Ci0JaW50IHJldDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlyZXQgPSAtRUlOVkFMOwotCWlmIChwZ3JwID4gMCkKLQkJcmV0ID0ga2lsbF9wZ3JwKGZpbmRfdnBpZChwZ3JwKSwgc2lnLCAwKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX2F1ZGl0KHZvaWQpCi17Ci0JbG9ja19rZXJuZWwoKTsKLQlwcmludGsgKCJzeXNfYXVkaXRcbiIpOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzdW5vc19nZXRob3N0aWQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gKCh1bnNpZ25lZCBsb25nKWlkcHJvbS0+aWRfbWFjaHR5cGUgPDwgMjQpIHwKLQkJKHVuc2lnbmVkIGxvbmcpaWRwcm9tLT5pZF9zZXJudW07Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHN5c2NvbmYgb3B0aW9ucywgZm9yIFN1bk9TIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgICBfU0NfQVJHX01BWCAgICAgICAgICAgICAxCi0jZGVmaW5lICAgX1NDX0NISUxEX01BWCAgICAgICAgICAgMgotI2RlZmluZSAgIF9TQ19DTEtfVENLICAgICAgICAgICAgIDMKLSNkZWZpbmUgICBfU0NfTkdST1VQU19NQVggICAgICAgICA0Ci0jZGVmaW5lICAgX1NDX09QRU5fTUFYICAgICAgICAgICAgNQotI2RlZmluZSAgIF9TQ19KT0JfQ09OVFJPTCAgICAgICAgIDYKLSNkZWZpbmUgICBfU0NfU0FWRURfSURTICAgICAgICAgICA3Ci0jZGVmaW5lICAgX1NDX1ZFUlNJT04gICAgICAgICAgICAgOAotCi1hc21saW5rYWdlIGxvbmcgc3Vub3Nfc3lzY29uZiAoaW50IG5hbWUpCi17Ci0JbG9uZyByZXQ7Ci0KLQlzd2l0Y2ggKG5hbWUpewotCWNhc2UgX1NDX0FSR19NQVg6Ci0JCXJldCA9IEFSR19NQVg7Ci0JCWJyZWFrOwotCWNhc2UgX1NDX0NISUxEX01BWDoKLQkJcmV0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OUFJPQ10ucmxpbV9jdXI7Ci0JCWJyZWFrOwotCWNhc2UgX1NDX0NMS19UQ0s6Ci0JCXJldCA9IEhaOwotCQlicmVhazsKLQljYXNlIF9TQ19OR1JPVVBTX01BWDoKLQkJcmV0ID0gTkdST1VQU19NQVg7Ci0JCWJyZWFrOwotCWNhc2UgX1NDX09QRU5fTUFYOgotCQlyZXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX05PRklMRV0ucmxpbV9jdXI7Ci0JCWJyZWFrOwotCWNhc2UgX1NDX0pPQl9DT05UUk9MOgotCQlyZXQgPSAxOwkvKiB5ZXMsIHdlIGRvIHN1cHBvcnQgam9iIGNvbnRyb2wgKi8KLQkJYnJlYWs7Ci0JY2FzZSBfU0NfU0FWRURfSURTOgotCQlyZXQgPSAxOwkvKiB5ZXMsIHdlIGRvIHN1cHBvcnQgc2F2ZWQgdWlkcyAgKi8KLQkJYnJlYWs7Ci0JY2FzZSBfU0NfVkVSU0lPTjoKLQkJLyogbWhtLCBQT1NJWF9WRVJTSU9OIGlzIGluIC91c3IvaW5jbHVkZS91bmlzdGQuaAotCQkgKiBzaG91bGQgaXQgZ28gb24gL3Vzci9pbmNsdWRlL2xpbnV4PwotCQkgKi8KLQkJcmV0ID0gMTk5MDA5TDsgCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC0xOwotCQlicmVhazsKLQl9OwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3NlbXN5cyhpbnQgb3AsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnMywgdm9pZCAqcHRyKQotewotCXVuaW9uIHNlbXVuIGFyZzQ7Ci0JaW50IHJldDsKLQotCXN3aXRjaCAob3ApIHsKLQljYXNlIDA6Ci0JCS8qIE1vc3QgYXJndW1lbnRzIG1hdGNoIG9uIGEgMToxIGJhc2lzIGJ1dCBjbWQgZG9lc24ndCAqLwotCQlzd2l0Y2goYXJnMykgewotCQljYXNlIDQ6Ci0JCQlhcmczPUdFVFBJRDsgYnJlYWs7Ci0JCWNhc2UgNToKLQkJCWFyZzM9R0VUVkFMOyBicmVhazsKLQkJY2FzZSA2OgotCQkJYXJnMz1HRVRBTEw7IGJyZWFrOwotCQljYXNlIDM6Ci0JCQlhcmczPUdFVE5DTlQ7IGJyZWFrOwotCQljYXNlIDc6Ci0JCQlhcmczPUdFVFpDTlQ7IGJyZWFrOwotCQljYXNlIDg6Ci0JCQlhcmczPVNFVFZBTDsgYnJlYWs7Ci0JCWNhc2UgOToKLQkJCWFyZzM9U0VUQUxMOyBicmVhazsKLQkJfQotCQkvKiBzeXNfc2VtY3RsKCk6ICovCi0JCS8qIHZhbHVlIHRvIG1vZGlmeSBzZW1hcGhvcmUgdG8gKi8KLQkJYXJnNC5fX3BhZCA9ICh2b2lkIF9fdXNlciAqKSBwdHI7Ci0JCXJldCA9IHN5c19zZW1jdGwoKGludClhcmcxLCAoaW50KWFyZzIsIChpbnQpYXJnMywgYXJnNCApOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qIHN5c19zZW1nZXQoKTogKi8KLQkJcmV0ID0gc3lzX3NlbWdldCgoa2V5X3QpYXJnMSwgKGludClhcmcyLCAoaW50KWFyZzMpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCS8qIHN5c19zZW1vcCgpOiAqLwotCQlyZXQgPSBzeXNfc2Vtb3AoKGludClhcmcxLCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilhcmcyLCAodW5zaWduZWQpYXJnMyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX07Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3NfbXNnc3lzKGludCBvcCwgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpCi17Ci0Jc3RydWN0IHNwYXJjX3N0YWNrZiAqc3A7Ci0JdW5zaWduZWQgbG9uZyBhcmc1OwotCWludCBydmFsOwotCi0Jc3dpdGNoKG9wKSB7Ci0JY2FzZSAwOgotCQlydmFsID0gc3lzX21zZ2dldCgoa2V5X3QpYXJnMSwgKGludClhcmcyKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlydmFsID0gc3lzX21zZ2N0bCgoaW50KWFyZzEsIChpbnQpYXJnMiwKLQkJCQkgIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopYXJnMyk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbG9ja19rZXJuZWwoKTsKLQkJc3AgPSAoc3RydWN0IHNwYXJjX3N0YWNrZiAqKWN1cnJlbnQtPnRocmVhZC5rcmVncy0+dV9yZWdzW1VSRUdfRlBdOwotCQlhcmc1ID0gc3AtPnh4YXJnc1swXTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlydmFsID0gc3lzX21zZ3JjdigoaW50KWFyZzEsIChzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqKWFyZzIsCi0JCQkJICAoc2l6ZV90KWFyZzMsIChsb25nKWFyZzQsIChpbnQpYXJnNSk7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJcnZhbCA9IHN5c19tc2dzbmQoKGludClhcmcxLCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKilhcmcyLAotCQkJCSAgKHNpemVfdClhcmczLCAoaW50KWFyZzQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlydmFsID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBydmFsOwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19zaG1zeXMoaW50IG9wLCB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZzMpCi17Ci0JdW5zaWduZWQgbG9uZyByYWRkcjsKLQlpbnQgcnZhbDsKLQotCXN3aXRjaChvcCkgewotCWNhc2UgMDoKLQkJLyogZG9fc2htYXQoKTogYXR0YWNoIGEgc2hhcmVkIG1lbW9yeSBhcmVhICovCi0JCXJ2YWwgPSBkb19zaG1hdCgoaW50KWFyZzEsKGNoYXIgX191c2VyICopYXJnMiwoaW50KWFyZzMsJnJhZGRyKTsKLQkJaWYgKCFydmFsKQotCQkJcnZhbCA9IChpbnQpIHJhZGRyOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qIHN5c19zaG1jdGwoKTogbW9kaWZ5IHNoYXJlZCBtZW1vcnkgYXJlYSBhdHRyLiAqLwotCQlydmFsID0gc3lzX3NobWN0bCgoaW50KWFyZzEsKGludClhcmcyLChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopYXJnMyk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJLyogc3lzX3NobWR0KCk6IGRldGFjaCBhIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQlydmFsID0gc3lzX3NobWR0KChjaGFyIF9fdXNlciAqKWFyZzEpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCS8qIHN5c19zaG1nZXQoKTogZ2V0IGEgc2hhcmVkIG1lbW9yeSBhcmVhICovCi0JCXJ2YWwgPSBzeXNfc2htZ2V0KChrZXlfdClhcmcxLChpbnQpYXJnMiwoaW50KWFyZzMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlydmFsID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfTsKLQlyZXR1cm4gcnZhbDsKLX0KLQotI2RlZmluZSBTVU5PU19FV09VTERCTE9DSyAzNQotCi0vKiBzZWUgdGhlIHN1bm9zIG1hbiBwYWdlIHJlYWQoMnYpIGZvciBhbiBleHBsYW5hdGlvbgotICAgb2YgdGhpcyBnYXJiYWdlLiBXZSB1c2UgT19OREVMQVkgdG8gbWFyawotICAgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGhhdmUgYmVlbiBzZXQgbm9uLWJsb2NraW5nIAotICAgdXNpbmcgNC4yQlNEIHN0eWxlIGNhbGxzLiAodHJpZGdlKSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19ub25ibG9jayhpbnQgcmV0LCBpbnQgZmQpCi17Ci0JaWYgKHJldCA9PSAtRUFHQUlOKSB7Ci0JCXN0cnVjdCBmaWxlICogZmlsZSA9IGZnZXQoZmQpOwotCQlpZiAoZmlsZSkgewotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05ERUxBWSkKLQkJCQlyZXQgPSAtU1VOT1NfRVdPVUxEQkxPQ0s7Ci0JCQlmcHV0KGZpbGUpOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3JlYWQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgY291bnQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNoZWNrX25vbmJsb2NrKHN5c19yZWFkKGZkLGJ1Zixjb3VudCksZmQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3JlYWR2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnZlY3RvciwKLQkJCSAgIGxvbmcgY291bnQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNoZWNrX25vbmJsb2NrKHN5c19yZWFkdihmZCx2ZWN0b3IsY291bnQpLGZkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc193cml0ZSh1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsIGludCBjb3VudCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY2hlY2tfbm9uYmxvY2soc3lzX3dyaXRlKGZkLGJ1Zixjb3VudCksZmQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3dyaXRldih1bnNpZ25lZCBsb25nIGZkLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnZlY3RvciwgbG9uZyBjb3VudCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY2hlY2tfbm9uYmxvY2soc3lzX3dyaXRldihmZCx2ZWN0b3IsY291bnQpLGZkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19yZWN2KGludCBmZCwgdm9pZCBfX3VzZXIgKnVidWYsIGludCBzaXplLCB1bnNpZ25lZCBmbGFncykKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY2hlY2tfbm9uYmxvY2soc3lzX3JlY3YoZmQsdWJ1ZixzaXplLGZsYWdzKSxmZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3Nfc2VuZChpbnQgZmQsIHZvaWQgX191c2VyICpidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBmbGFncykKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY2hlY2tfbm9uYmxvY2soc3lzX3NlbmQoZmQsYnVmZixsZW4sZmxhZ3MpLGZkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19hY2NlcHQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICpzYSwKLQkJCSAgICBpbnQgX191c2VyICphZGRybGVuKQotewotCWludCByZXQ7Ci0KLQl3aGlsZSAoMSkgewotCQlyZXQgPSBjaGVja19ub25ibG9jayhzeXNfYWNjZXB0KGZkLHNhLGFkZHJsZW4pLGZkKTsJCi0JCWlmIChyZXQgIT0gLUVORVRVTlJFQUNIICYmIHJldCAhPSAtRUhPU1RVTlJFQUNIKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBTVU5PU19TVl9JTlRFUlJVUFQgMgotCi1hc21saW5rYWdlIGludAotc3Vub3Nfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqYWN0LAotCQlzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiBfX3VzZXIgKm9hY3QpCi17Ci0Jc3RydWN0IGtfc2lnYWN0aW9uIG5ld19rYSwgb2xkX2thOwotCWludCByZXQ7Ci0KLQlpZiAoYWN0KSB7Ci0JCW9sZF9zaWdzZXRfdCBtYXNrOwotCi0JCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBhY3QsIHNpemVvZigqYWN0KSkgfHwKLQkJICAgIF9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2hhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpIHx8Ci0JCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCV9fZ2V0X3VzZXIobWFzaywgJmFjdC0+c2FfbWFzayk7Ci0JCW5ld19rYS5zYS5zYV9yZXN0b3JlciA9IE5VTEw7Ci0JCW5ld19rYS5rYV9yZXN0b3JlciA9IE5VTEw7Ci0JCXNpZ2luaXRzZXQoJm5ld19rYS5zYS5zYV9tYXNrLCBtYXNrKTsKLQkJbmV3X2thLnNhLnNhX2ZsYWdzIF49IFNVTk9TX1NWX0lOVEVSUlVQVDsKLQl9Ci0KLQlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCBhY3QgPyAmbmV3X2thIDogTlVMTCwgb2FjdCA/ICZvbGRfa2EgOiBOVUxMKTsKLQotCWlmICghcmV0ICYmIG9hY3QpIHsKLQkJLyogSW4gdGhlIGNsb25lKCkgY2FzZSB3ZSBjb3VsZCBjb3B5IGhhbGYgY29uc2lzdGVudAotCQkgKiBzdGF0ZSB0byB0aGUgdXNlciwgaG93ZXZlciB0aGlzIGNvdWxkIHNsZWVwIGFuZAotCQkgKiBkZWFkbG9jayB1cyBpZiB3ZSBoZWxkIHRoZSBzaWduYWwgbG9jayBvbiBTTVAuICBTbyBmb3IKLQkJICogbm93IEkgdGFrZSB0aGUgZWFzeSB3YXkgb3V0IGFuZCBkbyBubyBsb2NraW5nLgotCQkgKiBCdXQgdGhlbiBhZ2FpbiB3ZSBkb24ndCBzdXBwb3J0IFN1bk9TIGx3cCdzIGFueXdheXMgOy0pCi0JCSAqLwotCQlvbGRfa2Euc2Euc2FfZmxhZ3MgXj0gU1VOT1NfU1ZfSU5URVJSVVBUOwotCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG9hY3QsIHNpemVvZigqb2FjdCkpIHx8Ci0JCSAgICBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9oYW5kbGVyLCAmb2FjdC0+c2FfaGFuZGxlcikgfHwKLQkJICAgIF9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2ZsYWdzLCAmb2FjdC0+c2FfZmxhZ3MpKQotCQkJIHJldHVybiAtRUZBVUxUOwotCQlfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgJm9hY3QtPnNhX21hc2spOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3Nfc2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKLXsKLQlpbnQgdHJfb3B0ID0gb3B0bmFtZTsKLQlpbnQgcmV0OwotCi0JaWYgKGxldmVsID09IFNPTF9JUCkgewotCQkvKiBNdWx0aWNhc3Qgc29ja2V0b3B0cyAodHRsLCBtZW1iZXJzaGlwKSAqLwotCQlpZiAodHJfb3B0ID49MiAmJiB0cl9vcHQgPD0gNikKLQkJCXRyX29wdCArPSAzMDsKLQl9Ci0JcmV0ID0gc3lzX3NldHNvY2tvcHQoZmQsIGxldmVsLCB0cl9vcHQsIG9wdHZhbCwgb3B0bGVuKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19nZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCi17Ci0JaW50IHRyX29wdCA9IG9wdG5hbWU7Ci0JaW50IHJldDsKLQotCWlmIChsZXZlbCA9PSBTT0xfSVApIHsKLQkJLyogTXVsdGljYXN0IHNvY2tldG9wdHMgKHR0bCwgbWVtYmVyc2hpcCkgKi8KLQkJaWYgKHRyX29wdCA+PTIgJiYgdHJfb3B0IDw9IDYpCi0JCQl0cl9vcHQgKz0gMzA7Ci0JfQotCXJldCA9IHN5c19nZXRzb2Nrb3B0KGZkLCBsZXZlbCwgdHJfb3B0LCBvcHR2YWwsIG9wdGxlbik7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUwppbmRleCA5MDY0NDg1Li41YTdjNGM4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCkBAIC04MSwxMjQgKzgxLDMgQEAKIC8qMzA1Ki8JLmxvbmcgc3lzX3NldF9tZW1wb2xpY3ksIHN5c19rZXhlY19sb2FkLCBzeXNfbW92ZV9wYWdlcywgc3lzX2dldGNwdSwgc3lzX2Vwb2xsX3B3YWl0CiAvKjMxMCovCS5sb25nIHN5c191dGltZW5zYXQsIHN5c19zaWduYWxmZCwgc3lzX3RpbWVyZmRfY3JlYXRlLCBzeXNfZXZlbnRmZCwgc3lzX2ZhbGxvY2F0ZQogLyozMTUqLwkubG9uZyBzeXNfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lCi0KLSNpZmRlZiBDT05GSUdfU1VOT1NfRU1VTAotCS8qIE5vdyB0aGUgU3VuT1Mgc3lzY2FsbCB0YWJsZS4gKi8KLQotCS5hbGlnbiA0Ci0JLmdsb2JsIHN1bm9zX3N5c190YWJsZQotc3Vub3Nfc3lzX3RhYmxlOgotLyowKi8JLmxvbmcgc3Vub3NfaW5kaXIsIHN5c19leGl0LCBzeXNfZm9yawotCS5sb25nIHN1bm9zX3JlYWQsIHN1bm9zX3dyaXRlLCBzeXNfb3BlbgotCS5sb25nIHN5c19jbG9zZSwgc3Vub3Nfd2FpdDQsIHN5c19jcmVhdAotCS5sb25nIHN5c19saW5rLCBzeXNfdW5saW5rLCBzdW5vc19leGVjdgotCS5sb25nIHN5c19jaGRpciwgc3Vub3Nfbm9zeXMsIHN5c19ta25vZAotCS5sb25nIHN5c19jaG1vZCwgc3lzX2xjaG93bjE2LCBzdW5vc19icmsKLQkubG9uZyBzdW5vc19ub3N5cywgc3lzX2xzZWVrLCBzdW5vc19nZXRwaWQKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3NfZ2V0dWlkLCBzdW5vc19ub3N5cywgc3lzX3B0cmFjZQotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3lzX2FjY2Vzcywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3lzX3N5bmMsIHN5c19raWxsLCBzeXNfbmV3c3RhdAotCS5sb25nIHN1bm9zX25vc3lzLCBzeXNfbmV3bHN0YXQsIHN5c19kdXAKLQkubG9uZyBzeXNfcGlwZSwgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19nZXRnaWQKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLS8qNTAqLwkubG9uZyBzdW5vc19ub3N5cywgc3lzX2FjY3QsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3NfbWN0bCwgc3Vub3NfaW9jdGwsIHN5c19yZWJvb3QKLQkubG9uZyBzdW5vc19ub3N5cywgc3lzX3N5bWxpbmssIHN5c19yZWFkbGluawotCS5sb25nIHN5c19leGVjdmUsIHN5c191bWFzaywgc3lzX2Nocm9vdAotCS5sb25nIHN5c19uZXdmc3RhdCwgc3Vub3Nfbm9zeXMsIHN5c19nZXRwYWdlc2l6ZQotCS5sb25nIHN5c19tc3luYywgc3lzX3Zmb3JrLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19zYnJrLCBzdW5vc19zc3RrCi0JLmxvbmcgc3Vub3NfbW1hcCwgc3Vub3NfdmFkdmlzZSwgc3lzX211bm1hcAotCS5sb25nIHN5c19tcHJvdGVjdCwgc3lzX21hZHZpc2UsIHN5c192aGFuZ3VwCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN5c19taW5jb3JlLCBzeXNfZ2V0Z3JvdXBzMTYKLQkubG9uZyBzeXNfc2V0Z3JvdXBzMTYsIHN5c19nZXRwZ3JwLCBzdW5vc19zZXRwZ3JwCi0JLmxvbmcgc3lzX3NldGl0aW1lciwgc3Vub3Nfbm9zeXMsIHN5c19zd2Fwb24KLQkubG9uZyBzeXNfZ2V0aXRpbWVyLCBzeXNfZ2V0aG9zdG5hbWUsIHN5c19zZXRob3N0bmFtZQotCS5sb25nIHN1bm9zX2dldGR0YWJsZXNpemUsIHN5c19kdXAyLCBzdW5vc19ub3AKLQkubG9uZyBzeXNfZmNudGwsIHN1bm9zX3NlbGVjdCwgc3Vub3Nfbm9wCi0JLmxvbmcgc3lzX2ZzeW5jLCBzeXNfc2V0cHJpb3JpdHksIHN5c19zb2NrZXQKLQkubG9uZyBzeXNfY29ubmVjdCwgc3Vub3NfYWNjZXB0Ci0vKjEwMCovCS5sb25nIHN5c19nZXRwcmlvcml0eSwgc3Vub3Nfc2VuZCwgc3Vub3NfcmVjdgotCS5sb25nIHN1bm9zX25vc3lzLCBzeXNfYmluZCwgc3Vub3Nfc2V0c29ja29wdAotCS5sb25nIHN5c19saXN0ZW4sIHN1bm9zX25vc3lzLCBzdW5vc19zaWdhY3Rpb24KLQkubG9uZyBzdW5vc19zaWdibG9jaywgc3Vub3Nfc2lnc2V0bWFzaywgc3lzX3NpZ3BhdXNlCi0JLmxvbmcgc3lzX3NpZ3N0YWNrLCBzeXNfcmVjdm1zZywgc3lzX3NlbmRtc2cKLQkubG9uZyBzdW5vc19ub3N5cywgc3lzX2dldHRpbWVvZmRheSwgc3lzX2dldHJ1c2FnZQotCS5sb25nIHN1bm9zX2dldHNvY2tvcHQsIHN1bm9zX25vc3lzLCBzdW5vc19yZWFkdgotCS5sb25nIHN1bm9zX3dyaXRldiwgc3lzX3NldHRpbWVvZmRheSwgc3lzX2ZjaG93bjE2Ci0JLmxvbmcgc3lzX2ZjaG1vZCwgc3lzX3JlY3Zmcm9tLCBzeXNfc2V0cmV1aWQxNgotCS5sb25nIHN5c19zZXRyZWdpZDE2LCBzeXNfcmVuYW1lLCBzeXNfdHJ1bmNhdGUKLQkubG9uZyBzeXNfZnRydW5jYXRlLCBzeXNfZmxvY2ssIHN1bm9zX25vc3lzCi0JLmxvbmcgc3lzX3NlbmR0bywgc3lzX3NodXRkb3duLCBzeXNfc29ja2V0cGFpcgotCS5sb25nIHN5c19ta2Rpciwgc3lzX3JtZGlyLCBzeXNfdXRpbWVzCi0JLmxvbmcgc3lzX3NpZ3JldHVybiwgc3Vub3Nfbm9zeXMsIHN5c19nZXRwZWVybmFtZQotCS5sb25nIHN1bm9zX2dldGhvc3RpZCwgc3Vub3Nfbm9zeXMsIHN5c19nZXRybGltaXQKLQkubG9uZyBzeXNfc2V0cmxpbWl0LCBzdW5vc19raWxscGcsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0vKjE1MCovCS5sb25nIHN5c19nZXRzb2NrbmFtZSwgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3lzX3BvbGwsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX2dldGRpcmVudHJpZXMsIHN5c19zdGF0ZnMsIHN5c19mc3RhdGZzCi0JLmxvbmcgc3lzX29sZHVtb3VudCwgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3lzX2dldGRvbWFpbm5hbWUsIHN5c19zZXRkb21haW5uYW1lCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN5c19xdW90YWN0bCwgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19tb3VudCwgc3lzX3VzdGF0LCBzdW5vc19zZW1zeXMKLQkubG9uZyBzdW5vc19tc2dzeXMsIHN1bm9zX3NobXN5cywgc3Vub3NfYXVkaXQKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3NfZ2V0ZGVudHMsIHN5c19zZXRzaWQKLQkubG9uZyBzeXNfZmNoZGlyLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN5c19zaWdwZW5kaW5nLCBzdW5vc19ub3N5cwotCS5sb25nIHN5c19zZXRwZ2lkLCBzdW5vc19wYXRoY29uZiwgc3Vub3NfZnBhdGhjb25mCi0JLmxvbmcgc3Vub3Nfc3lzY29uZiwgc3Vub3NfdW5hbWUsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0vKjIwMCovCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLS8qMjUwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMKLS8qMjYwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMKLS8qMjcwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMKLS8qMjgwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMKLS8qMjkwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMKLS8qMzAwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLmxvbmcgc3Vub3Nfbm9zeXMKLS8qMzEwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkubG9uZyBzdW5vc19ub3N5cwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYwppbmRleCBjZmFmMjJjLi41M2NhYWNiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogI2RlZmluZSBUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCiAKLWlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBkdW1teSwgdm9pZCAqZGV2X2lkKQogewogCS8qIGxhc3QgdGltZSB0aGUgY21vcyBjbG9jayBnb3QgdXBkYXRlZCAqLwogCXN0YXRpYyBsb25nIGxhc3RfcnRjX3VwZGF0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc20uUyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2MwMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbS5TCkBAIC0wLDAgKzEsMTUzIEBACisvKiB1bmFfYXNtLlM6IEtlcm5lbCB1bmFsaWduZWQgdHJhcCBhc3NlbWJsZXIgaGVscGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsMjAwNSwyMDA4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKKyAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKwkudGV4dAorCityZXRsX2VmYXVsdDoKKwlyZXRsCisJIG1vdgktRUZBVUxULCAlbzAKKworCS8qIGludCBfX2RvX2ludF9zdG9yZSh1bnNpZ25lZCBsb25nICpkc3RfYWRkciwgaW50IHNpemUsCisJICogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnNyY192YWwpCisJICoKKwkgKiAlbzAgPSBkZXN0X2FkZHIKKwkgKiAlbzEgPSBzaXplCisJICogJW8yID0gc3JjX3ZhbAorCSAqCisJICogUmV0dXJuICcwJyBvbiBzdWNjZXNzLCAtRUZBVUxUIG9uIGZhaWx1cmUuCisJICovCisJLmdsb2JsCV9fZG9faW50X3N0b3JlCitfX2RvX2ludF9zdG9yZToKKwlsZAlbJW8yXSwgJWcxCisJY21wCSUxLCAyCisJYmUJMmYKKwkgY21wCSUxLCA0CisJYmUJMWYKKwkgc3JsCSVnMSwgMjQsICVnMgorCXNybAklZzEsIDE2LCAlZzcKKzQ6CXN0YgklZzIsIFslbzBdCisJc3JsCSVnMSwgOCwgJWcyCis1OglzdGIJJWc3LCBbJW8wICsgMV0KKwlsZAlbJW8yICsgNF0sICVnNworNjoJc3RiCSVnMiwgWyVvMCArIDJdCisJc3JsCSVnNywgMjQsICVnMgorNzoJc3RiCSVnMSwgWyVvMCArIDNdCisJc3JsCSVnNywgMTYsICVnMQorODoJc3RiCSVnMiwgWyVvMCArIDRdCisJc3JsCSVnNywgOCwgJWcyCis5OglzdGIJJWcxLCBbJW8wICsgNV0KKzEwOglzdGIJJWcyLCBbJW8wICsgNl0KKwliCTBmCisxMToJIHN0YgklZzcsIFslbzAgKyA3XQorMToJc3JsCSVnMSwgMTYsICVnNworMTI6CXN0YgklZzIsIFslbzBdCisJc3JsCSVnMSwgOCwgJWcyCisxMzoJc3RiCSVnNywgWyVvMCArIDFdCisxNDoJc3RiCSVnMiwgWyVvMCArIDJdCisJYgkwZgorMTU6CSBzdGIJJWcxLCBbJW8wICsgM10KKzI6CXNybAklZzEsIDgsICVnMgorMTY6CXN0YgklZzIsIFslbzBdCisxNzoJc3RiCSVnMSwgWyVvMCArIDFdCiswOglyZXRsCisJIG1vdgkwLCAlbzAKKworCS5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jCisJLndvcmQJNGIsIHJldGxfZWZhdWx0CisJLndvcmQJNWIsIHJldGxfZWZhdWx0CisJLndvcmQJNmIsIHJldGxfZWZhdWx0CisJLndvcmQJN2IsIHJldGxfZWZhdWx0CisJLndvcmQJOGIsIHJldGxfZWZhdWx0CisJLndvcmQJOWIsIHJldGxfZWZhdWx0CisJLndvcmQJMTBiLCByZXRsX2VmYXVsdAorCS53b3JkCTExYiwgcmV0bF9lZmF1bHQKKwkud29yZAkxMmIsIHJldGxfZWZhdWx0CisJLndvcmQJMTNiLCByZXRsX2VmYXVsdAorCS53b3JkCTE0YiwgcmV0bF9lZmF1bHQKKwkud29yZAkxNWIsIHJldGxfZWZhdWx0CisJLndvcmQJMTZiLCByZXRsX2VmYXVsdAorCS53b3JkCTE3YiwgcmV0bF9lZmF1bHQKKwkucHJldmlvdXMKKworCS8qIGludCBkb19pbnRfbG9hZCh1bnNpZ25lZCBsb25nICpkZXN0X3JlZywgaW50IHNpemUsCisJICogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnNhZGRyLCBpbnQgaXNfc2lnbmVkKQorCSAqCisJICogJW8wID0gZGVzdF9yZWcKKwkgKiAlbzEgPSBzaXplCisJICogJW8yID0gc2FkZHIKKwkgKiAlbzMgPSBpc19zaWduZWQKKwkgKgorCSAqIFJldHVybiAnMCcgb24gc3VjY2VzcywgLUVGQVVMVCBvbiBmYWlsdXJlLgorCSAqLworCS5nbG9ibAlkb19pbnRfbG9hZAorZG9faW50X2xvYWQ6CisJY21wCSVvMSwgOAorCWJlCTlmCisJIGNtcAklbzEsIDQKKwliZQk2ZgorNDoJIGxkdWIJWyVvMl0sICVnMQorNToJbGR1YglbJW8yICsgMV0sICVnMgorCXNsbAklZzEsIDgsICVnMQorCXRzdAklbzMKKwliZQkzZgorCSBvcgklZzEsICVnMiwgJWcxCisJc2xsCSVnMSwgMTYsICVnMQorCXNyYQklZzEsIDE2LCAlZzEKKzM6CWIJMGYKKwkgc3QJJWcxLCBbJW8wXQorNjoJbGR1YglbJW8yICsgMV0sICVnMgorCXNsbAklZzEsIDI0LCAlZzEKKzc6CWxkdWIJWyVvMiArIDJdLCAlZzcKKwlzbGwJJWcyLCAxNiwgJWcyCis4OglsZHViCVslbzIgKyAzXSwgJWczCisJc2xsCSVnNywgOCwgJWc3CisJb3IJJWczLCAlZzIsICVnMworCW9yCSVnNywgJWczLCAlZzcKKwlvcgklZzEsICVnNywgJWcxCisJYgkwZgorCSBzdAklZzEsIFslbzBdCis5OglsZHViCVslbzJdLCAlZzEKKzEwOglsZHViCVslbzIgKyAxXSwgJWcyCisJc2xsCSVnMSwgMjQsICVnMQorMTE6CWxkdWIJWyVvMiArIDJdLCAlZzcKKwlzbGwJJWcyLCAxNiwgJWcyCisxMjoJbGR1YglbJW8yICsgM10sICVnMworCXNsbAklZzcsIDgsICVnNworCW9yCSVnMSwgJWcyLCAlZzEKKwlvcgklZzcsICVnMywgJWc3CisJb3IJJWcxLCAlZzcsICVnNworMTM6CWxkdWIJWyVvMiArIDRdLCAlZzEKKwlzdAklZzcsIFslbzBdCisxNDoJbGR1YglbJW8yICsgNV0sICVnMgorCXNsbAklZzEsIDI0LCAlZzEKKzE1OglsZHViCVslbzIgKyA2XSwgJWc3CisJc2xsCSVnMiwgMTYsICVnMgorMTY6CWxkdWIJWyVvMiArIDddLCAlZzMKKwlzbGwJJWc3LCA4LCAlZzcKKwlvcgklZzEsICVnMiwgJWcxCisJb3IJJWc3LCAlZzMsICVnNworCW9yCSVnMSwgJWc3LCAlZzcKKwlzdAklZzcsIFslbzAgKyA0XQorMDoJcmV0bAorCSBtb3YJMCwgJW8wCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvYworCS53b3JkCTRiLCByZXRsX2VmYXVsdAorCS53b3JkCTViLCByZXRsX2VmYXVsdAorCS53b3JkCTZiLCByZXRsX2VmYXVsdAorCS53b3JkCTdiLCByZXRsX2VmYXVsdAorCS53b3JkCThiLCByZXRsX2VmYXVsdAorCS53b3JkCTliLCByZXRsX2VmYXVsdAorCS53b3JkCTEwYiwgcmV0bF9lZmF1bHQKKwkud29yZAkxMWIsIHJldGxfZWZhdWx0CisJLndvcmQJMTJiLCByZXRsX2VmYXVsdAorCS53b3JkCTEzYiwgcmV0bF9lZmF1bHQKKwkud29yZAkxNGIsIHJldGxfZWZhdWx0CisJLndvcmQJMTViLCByZXRsX2VmYXVsdAorCS53b3JkCTE2YiwgcmV0bF9lZmF1bHQKKwkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggYTYzMzBmYi4uMzM4NTdiZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTE3NSwxNTcgKzE3NSwzMSBAQAogCXBhbmljKHN0cik7CiB9CiAKLSNkZWZpbmUgZG9faW50ZWdlcl9sb2FkKGRlc3RfcmVnLCBzaXplLCBzYWRkciwgaXNfc2lnbmVkLCBlcnJoKSAoewkJXAotX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQkJXAotCSJjbXAJJTEsIDhcblx0IgkJCQkJCQlcCi0JImJlCTlmXG5cdCIJCQkJCQkJCVwKLQkiIGNtcAklMSwgNFxuXHQiCQkJCQkJCVwKLQkiYmUJNmZcbiIJCQkJCQkJCVwKLSI0Olx0IgkiIGxkdWIJWyUyXSwgJSVsMVxuIgkJCQkJCQlcCi0iNTpcdCIJImxkdWIJWyUyICsgMV0sICUlbDJcblx0IgkJCQkJCVwKLQkic2xsCSUlbDEsIDgsICUlbDFcblx0IgkJCQkJCVwKLQkidHN0CSUzXG5cdCIJCQkJCQkJCVwKLQkiYmUJM2Zcblx0IgkJCQkJCQkJXAotCSIgYWRkCSUlbDEsICUlbDIsICUlbDFcblx0IgkJCQkJCVwKLQkic2xsCSUlbDEsIDE2LCAlJWwxXG5cdCIJCQkJCQlcCi0JInNyYQklJWwxLCAxNiwgJSVsMVxuIgkJCQkJCVwKLSIzOlx0IgkiYgkwZlxuXHQiCQkJCQkJCQlcCi0JIiBzdAklJWwxLCBbJTBdXG4iCQkJCQkJCVwKLSI2Olx0IgkibGR1YglbJTIgKyAxXSwgJSVsMlxuXHQiCQkJCQkJXAotCSJzbGwJJSVsMSwgMjQsICUlbDFcbiIJCQkJCQlcCi0iNzpcdCIJImxkdWIJWyUyICsgMl0sICUlZzdcblx0IgkJCQkJCVwKLQkic2xsCSUlbDIsIDE2LCAlJWwyXG4iCQkJCQkJXAotIjg6XHQiCSJsZHViCVslMiArIDNdLCAlJWcxXG5cdCIJCQkJCQlcCi0JInNsbAklJWc3LCA4LCAlJWc3XG5cdCIJCQkJCQlcCi0JIm9yCSUlbDEsICUlbDIsICUlbDFcblx0IgkJCQkJCVwKLQkib3IJJSVnNywgJSVnMSwgJSVnN1xuXHQiCQkJCQkJXAotCSJvcgklJWwxLCAlJWc3LCAlJWwxXG5cdCIJCQkJCQlcCi0JImIJMGZcblx0IgkJCQkJCQkJXAotCSIgc3QJJSVsMSwgWyUwXVxuIgkJCQkJCQlcCi0iOTpcdCIJImxkdWIJWyUyXSwgJSVsMVxuIgkJCQkJCQlcCi0iMTA6XHQiCSJsZHViCVslMiArIDFdLCAlJWwyXG5cdCIJCQkJCQlcCi0JInNsbAklJWwxLCAyNCwgJSVsMVxuIgkJCQkJCVwKLSIxMTpcdCIJImxkdWIJWyUyICsgMl0sICUlZzdcblx0IgkJCQkJCVwKLQkic2xsCSUlbDIsIDE2LCAlJWwyXG4iCQkJCQkJXAotIjEyOlx0IgkibGR1YglbJTIgKyAzXSwgJSVnMVxuXHQiCQkJCQkJXAotCSJzbGwJJSVnNywgOCwgJSVnN1xuXHQiCQkJCQkJXAotCSJvcgklJWwxLCAlJWwyLCAlJWwxXG5cdCIJCQkJCQlcCi0JIm9yCSUlZzcsICUlZzEsICUlZzdcblx0IgkJCQkJCVwKLQkib3IJJSVsMSwgJSVnNywgJSVnN1xuIgkJCQkJCVwKLSIxMzpcdCIJImxkdWIJWyUyICsgNF0sICUlbDFcblx0IgkJCQkJCVwKLQkic3QJJSVnNywgWyUwXVxuIgkJCQkJCQlcCi0iMTQ6XHQiCSJsZHViCVslMiArIDVdLCAlJWwyXG5cdCIJCQkJCQlcCi0JInNsbAklJWwxLCAyNCwgJSVsMVxuIgkJCQkJCVwKLSIxNTpcdCIJImxkdWIJWyUyICsgNl0sICUlZzdcblx0IgkJCQkJCVwKLQkic2xsCSUlbDIsIDE2LCAlJWwyXG4iCQkJCQkJXAotIjE2Olx0IgkibGR1YglbJTIgKyA3XSwgJSVnMVxuXHQiCQkJCQkJXAotCSJzbGwJJSVnNywgOCwgJSVnN1xuXHQiCQkJCQkJXAotCSJvcgklJWwxLCAlJWwyLCAlJWwxXG5cdCIJCQkJCQlcCi0JIm9yCSUlZzcsICUlZzEsICUlZzdcblx0IgkJCQkJCVwKLQkib3IJJSVsMSwgJSVnNywgJSVnN1xuXHQiCQkJCQkJXAotCSJzdAklJWc3LCBbJTAgKyA0XVxuIgkJCQkJCVwKLSIwOlxuXG5cdCIJCQkJCQkJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJCVwKLQkiLndvcmQJNGIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAk1YiwgIiAjZXJyaCAiXG5cdCIJCQkJCQlcCi0JIi53b3JkCTZiLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJN2IsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAk4YiwgIiAjZXJyaCAiXG5cdCIJCQkJCQlcCi0JIi53b3JkCTliLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJMTBiLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJMTFiLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJMTJiLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJMTNiLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJMTRiLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJMTViLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJMTZiLCAiICNlcnJoICJcblxuXHQiCQkJCQkJXAotCSIucHJldmlvdXNcblx0IgkJCQkJCQkJXAotCTogOiAiciIgKGRlc3RfcmVnKSwgInIiIChzaXplKSwgInIiIChzYWRkciksICJyIiAoaXNfc2lnbmVkKQkJXAotCTogImwxIiwgImwyIiwgImc3IiwgImcxIiwgImNjIik7CQkJCQlcCi19KQotCQotI2RlZmluZSBzdG9yZV9jb21tb24oZHN0X2FkZHIsIHNpemUsIHNyY192YWwsIGVycmgpICh7CQkJCVwKLV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQkJCVwKLQkibGQJWyUyXSwgJSVsMVxuIgkJCQkJCQlcCi0JImNtcAklMSwgMlxuXHQiCQkJCQkJCVwKLQkiYmUJMmZcblx0IgkJCQkJCQkJXAotCSIgY21wCSUxLCA0XG5cdCIJCQkJCQkJXAotCSJiZQkxZlxuXHQiCQkJCQkJCQlcCi0JIiBzcmwJJSVsMSwgMjQsICUlbDJcblx0IgkJCQkJCVwKLQkic3JsCSUlbDEsIDE2LCAlJWc3XG4iCQkJCQkJXAotIjQ6XHQiCSJzdGIJJSVsMiwgWyUwXVxuXHQiCQkJCQkJCVwKLQkic3JsCSUlbDEsIDgsICUlbDJcbiIJCQkJCQlcCi0iNTpcdCIJInN0YgklJWc3LCBbJTAgKyAxXVxuXHQiCQkJCQkJXAotCSJsZAlbJTIgKyA0XSwgJSVnN1xuIgkJCQkJCVwKLSI2Olx0Igkic3RiCSUlbDIsIFslMCArIDJdXG5cdCIJCQkJCQlcCi0JInNybAklJWc3LCAyNCwgJSVsMlxuIgkJCQkJCVwKLSI3Olx0Igkic3RiCSUlbDEsIFslMCArIDNdXG5cdCIJCQkJCQlcCi0JInNybAklJWc3LCAxNiwgJSVsMVxuIgkJCQkJCVwKLSI4Olx0Igkic3RiCSUlbDIsIFslMCArIDRdXG5cdCIJCQkJCQlcCi0JInNybAklJWc3LCA4LCAlJWwyXG4iCQkJCQkJXAotIjk6XHQiCSJzdGIJJSVsMSwgWyUwICsgNV1cbiIJCQkJCQlcCi0iMTA6XHQiCSJzdGIJJSVsMiwgWyUwICsgNl1cblx0IgkJCQkJCVwKLQkiYgkwZlxuIgkJCQkJCQkJXAotIjExOlx0IgkiIHN0YgklJWc3LCBbJTAgKyA3XVxuIgkJCQkJCVwKLSIxOlx0Igkic3JsCSUlbDEsIDE2LCAlJWc3XG4iCQkJCQkJXAotIjEyOlx0Igkic3RiCSUlbDIsIFslMF1cblx0IgkJCQkJCQlcCi0JInNybAklJWwxLCA4LCAlJWwyXG4iCQkJCQkJXAotIjEzOlx0Igkic3RiCSUlZzcsIFslMCArIDFdXG4iCQkJCQkJXAotIjE0Olx0Igkic3RiCSUlbDIsIFslMCArIDJdXG5cdCIJCQkJCQlcCi0JImIJMGZcbiIJCQkJCQkJCVwKLSIxNTpcdCIJIiBzdGIJJSVsMSwgWyUwICsgM11cbiIJCQkJCQlcCi0iMjpcdCIJInNybAklJWwxLCA4LCAlJWwyXG4iCQkJCQkJXAotIjE2Olx0Igkic3RiCSUlbDIsIFslMF1cbiIJCQkJCQkJXAotIjE3Olx0Igkic3RiCSUlbDEsIFslMCArIDFdXG4iCQkJCQkJXAotIjA6XG5cblx0IgkJCQkJCQkJCVwKLQkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgkJCQkJXAotCSIud29yZAk0YiwgIiAjZXJyaCAiXG5cdCIJCQkJCQlcCi0JIi53b3JkCTViLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJNmIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAk3YiwgIiAjZXJyaCAiXG5cdCIJCQkJCQlcCi0JIi53b3JkCThiLCAiICNlcnJoICJcblx0IgkJCQkJCVwKLQkiLndvcmQJOWIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxMGIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxMWIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxMmIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxM2IsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxNGIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxNWIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxNmIsICIgI2VycmggIlxuXHQiCQkJCQkJXAotCSIud29yZAkxN2IsICIgI2VycmggIlxuXG5cdCIJCQkJCQlcCi0JIi5wcmV2aW91c1xuXHQiCQkJCQkJCQlcCi0JOiA6ICJyIiAoZHN0X2FkZHIpLCAiciIgKHNpemUpLCAiciIgKHNyY192YWwpCQkJCVwKLQk6ICJsMSIsICJsMiIsICJnNyIsICJnMSIsICJjYyIpOwkJCQkJXAotfSkKKy8qIHVuYV9hc20uUyAqLworZXh0ZXJuIGludCBkb19pbnRfbG9hZCh1bnNpZ25lZCBsb25nICpkZXN0X3JlZywgaW50IHNpemUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzYWRkciwgaW50IGlzX3NpZ25lZCk7CitleHRlcm4gaW50IF9fZG9faW50X3N0b3JlKHVuc2lnbmVkIGxvbmcgKmRzdF9hZGRyLCBpbnQgc2l6ZSwKKwkJCSAgdW5zaWduZWQgbG9uZyAqc3JjX3ZhbCk7CiAKLSNkZWZpbmUgZG9faW50ZWdlcl9zdG9yZShyZWdfbnVtLCBzaXplLCBkc3RfYWRkciwgcmVncywgZXJyaCkgKHsJCVwKLQl1bnNpZ25lZCBsb25nICpzcmNfdmFsOwkJCQkJCQlcCi0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgemVyb1syXSA9IHsgMCwgfTsJCQkJCVwKLQkJCQkJCQkJCQlcCi0JaWYgKHJlZ19udW0pIHNyY192YWwgPSBmZXRjaF9yZWdfYWRkcihyZWdfbnVtLCByZWdzKTsJCQlcCi0JZWxzZSB7CQkJCQkJCQkJXAotCQlzcmNfdmFsID0gJnplcm9bMF07CQkJCQkJXAotCQlpZiAoc2l6ZSA9PSA4KQkJCQkJCQlcCi0JCQl6ZXJvWzFdID0gZmV0Y2hfcmVnKDEsIHJlZ3MpOwkJCQlcCi0JfQkJCQkJCQkJCVwKLQlzdG9yZV9jb21tb24oZHN0X2FkZHIsIHNpemUsIHNyY192YWwsIGVycmgpOwkJCQlcCi19KQorc3RhdGljIGludCBkb19pbnRfc3RvcmUoaW50IHJlZ19udW0sIGludCBzaXplLCB1bnNpZ25lZCBsb25nICpkc3RfYWRkciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgemVyb1syXSA9IHsgMCwgMCB9OworCXVuc2lnbmVkIGxvbmcgKnNyY192YWw7CisKKwlpZiAocmVnX251bSkKKwkJc3JjX3ZhbCA9IGZldGNoX3JlZ19hZGRyKHJlZ19udW0sIHJlZ3MpOworCWVsc2UgeworCQlzcmNfdmFsID0gJnplcm9bMF07CisJCWlmIChzaXplID09IDgpCisJCQl6ZXJvWzFdID0gZmV0Y2hfcmVnKDEsIHJlZ3MpOworCX0KKwlyZXR1cm4gX19kb19pbnRfc3RvcmUoZHN0X2FkZHIsIHNpemUsIHNyY192YWwpOworfQogCiBleHRlcm4gdm9pZCBzbXBfY2FwdHVyZSh2b2lkKTsKIGV4dGVybiB2b2lkIHNtcF9yZWxlYXNlKHZvaWQpOwogCi0jZGVmaW5lIGRvX2F0b21pYyhzcmNkZXN0X3JlZywgbWVtLCBlcnJoKSAoewkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRtcDsJCQkJCQlcCi0JCQkJCQkJCQkJXAotCXNtcF9jYXB0dXJlKCk7CQkJCQkJCQlcCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCQkJCQlcCi0JdG1wID0gKnNyY2Rlc3RfcmVnOwkJCQkJCQlcCi0JZG9faW50ZWdlcl9sb2FkKHNyY2Rlc3RfcmVnLCA0LCBtZW0sIDAsIGVycmgpOwkJCQlcCi0Jc3RvcmVfY29tbW9uKG1lbSwgNCwgJnRtcCwgZXJyaCk7CQkJCQlcCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQkJCVwKLQlzbXBfcmVsZWFzZSgpOwkJCQkJCQkJXAotfSkKLQogc3RhdGljIGlubGluZSB2b2lkIGFkdmFuY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVncy0+cGMgICA9IHJlZ3MtPm5wYzsKQEAgLTM0Miw5ICsyMTYsNyBAQAogCXJldHVybiAhZmxvYXRpbmdfcG9pbnRfbG9hZF9vcl9zdG9yZV9wKGluc24pOwogfQogCi12b2lkIGtlcm5lbF9tbmFfdHJhcF9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24pIF9fYXNtX18gKCJrZXJuZWxfbW5hX3RyYXBfZmF1bHQiKTsKLQotdm9pZCBrZXJuZWxfbW5hX3RyYXBfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuKQorc3RhdGljIHZvaWQga2VybmVsX21uYV90cmFwX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbikKIHsKIAl1bnNpZ25lZCBsb25nIGcyID0gcmVncy0+dV9yZWdzIFtVUkVHX0cyXTsKIAl1bnNpZ25lZCBsb25nIGZpeHVwID0gc2VhcmNoX2V4dGFibGVzX3JhbmdlKHJlZ3MtPnBjLCAmZzIpOwpAQCAtMzc5LDQ4ICsyNTEsMzQgQEAKIAkJcHJpbnRrKCJVbnN1cHBvcnRlZCB1bmFsaWduZWQgbG9hZC9zdG9yZSB0cmFwIGZvciBrZXJuZWwgYXQgPCUwOGx4Pi5cbiIsCiAJCSAgICAgICByZWdzLT5wYyk7CiAJCXVuYWxpZ25lZF9wYW5pYygiV2hlZWUuIEtlcm5lbCBkb2VzIGZwdS9hdG9taWMgdW5hbGlnbmVkIGxvYWQvc3RvcmUuIik7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJcbiIKLSJrZXJuZWxfdW5hbGlnbmVkX3RyYXBfZmF1bHQ6XG5cdCIKLQkJIm1vdgklMCwgJSVvMFxuXHQiCi0JCSJjYWxsCWtlcm5lbF9tbmFfdHJhcF9mYXVsdFxuXHQiCi0JCSIgbW92CSUxLCAlJW8xXG5cdCIKLQkJOgotCQk6ICJyIiAocmVncyksICJyIiAoaW5zbikKLQkJOiAibzAiLCAibzEiLCAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLAotCQkgICJnMSIsICJnMiIsICJnMyIsICJnNCIsICJnNSIsICJnNyIsICJjYyIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9IGNvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbik7CisJCWludCBlcnI7CiAKICNpZmRlZiBERUJVR19NTkEKIAkJcHJpbnRrKCJLTU5BOiBwYz0lMDhseCBbZGlyPSVzIGFkZHI9JTA4bHggc2l6ZT0lZF0gcmV0cGNbJTA4bHhdXG4iLAogCQkgICAgICAgcmVncy0+cGMsIGRpcnN0cmluZ3NbZGlyXSwgYWRkciwgc2l6ZSwgcmVncy0+dV9yZWdzW1VSRUdfUkVUUENdKTsKICNlbmRpZgotCQlzd2l0Y2goZGlyKSB7CisJCXN3aXRjaCAoZGlyKSB7CiAJCWNhc2UgbG9hZDoKLQkJCWRvX2ludGVnZXJfbG9hZChmZXRjaF9yZWdfYWRkcigoKGluc24+PjI1KSYweDFmKSwgcmVncyksCi0JCQkJCXNpemUsICh1bnNpZ25lZCBsb25nICopIGFkZHIsCi0JCQkJCWRlY29kZV9zaWduZWRuZXNzKGluc24pLAotCQkJCQlrZXJuZWxfdW5hbGlnbmVkX3RyYXBfZmF1bHQpOworCQkJZXJyID0gZG9faW50X2xvYWQoZmV0Y2hfcmVnX2FkZHIoKChpbnNuPj4yNSkmMHgxZiksCisJCQkJCQkJIHJlZ3MpLAorCQkJCQkgIHNpemUsICh1bnNpZ25lZCBsb25nICopIGFkZHIsCisJCQkJCSAgZGVjb2RlX3NpZ25lZG5lc3MoaW5zbikpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBzdG9yZToKLQkJCWRvX2ludGVnZXJfc3RvcmUoKChpbnNuPj4yNSkmMHgxZiksIHNpemUsCi0JCQkJCSAodW5zaWduZWQgbG9uZyAqKSBhZGRyLCByZWdzLAotCQkJCQkga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0KTsKKwkJCWVyciA9IGRvX2ludF9zdG9yZSgoKGluc24+PjI1KSYweDFmKSwgc2l6ZSwKKwkJCQkJICAgKHVuc2lnbmVkIGxvbmcgKikgYWRkciwgcmVncyk7CiAJCQlicmVhazsKLSNpZiAwIC8qIHVuc3VwcG9ydGVkICovCi0JCWNhc2UgYm90aDoKLQkJCWRvX2F0b21pYyhmZXRjaF9yZWdfYWRkcigoKGluc24+PjI1KSYweDFmKSwgcmVncyksCi0JCQkJICAodW5zaWduZWQgbG9uZyAqKSBhZGRyLAotCQkJCSAga2VybmVsX3VuYWxpZ25lZF90cmFwX2ZhdWx0KTsKLQkJCWJyZWFrOwotI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlwYW5pYygiSW1wb3NzaWJsZSBrZXJuZWwgdW5hbGlnbmVkIHRyYXAuIik7CiAJCQkvKiBOb3QgcmVhY2hlZC4uLiAqLwogCQl9Ci0JCWFkdmFuY2UocmVncyk7CisJCWlmIChlcnIpCisJCQlrZXJuZWxfbW5hX3RyYXBfZmF1bHQocmVncywgaW5zbik7CisJCWVsc2UKKwkJCWFkdmFuY2UocmVncyk7CiAJfQogfQogCkBAIC00NTksOSArMzE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB1c2VyX21uYV90cmFwX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbikgX19hc21fXyAoInVzZXJfbW5hX3RyYXBfZmF1bHQiKTsKLQotdm9pZCB1c2VyX21uYV90cmFwX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbikKK3N0YXRpYyB2b2lkIHVzZXJfbW5hX3RyYXBfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuKQogewogCXNpZ2luZm9fdCBpbmZvOwogCkBAIC00ODUsNyArMzQxLDcgQEAKIAlpZighb2tfZm9yX3VzZXIocmVncywgaW5zbiwgZGlyKSkgewogCQlnb3RvIGtpbGxfdXNlcjsKIAl9IGVsc2UgewotCQlpbnQgc2l6ZSA9IGRlY29kZV9hY2Nlc3Nfc2l6ZShpbnNuKTsKKwkJaW50IGVyciwgc2l6ZSA9IGRlY29kZV9hY2Nlc3Nfc2l6ZShpbnNuKTsKIAkJdW5zaWduZWQgbG9uZyBhZGRyOwogCiAJCWlmKGZsb2F0aW5nX3BvaW50X2xvYWRfb3Jfc3RvcmVfcChpbnNuKSkgewpAQCAtNDk2LDQ4ICszNTIsMzQgQEAKIAkJYWRkciA9IGNvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbik7CiAJCXN3aXRjaChkaXIpIHsKIAkJY2FzZSBsb2FkOgotCQkJZG9faW50ZWdlcl9sb2FkKGZldGNoX3JlZ19hZGRyKCgoaW5zbj4+MjUpJjB4MWYpLCByZWdzKSwKLQkJCQkJc2l6ZSwgKHVuc2lnbmVkIGxvbmcgKikgYWRkciwKLQkJCQkJZGVjb2RlX3NpZ25lZG5lc3MoaW5zbiksCi0JCQkJCXVzZXJfdW5hbGlnbmVkX3RyYXBfZmF1bHQpOworCQkJZXJyID0gZG9faW50X2xvYWQoZmV0Y2hfcmVnX2FkZHIoKChpbnNuPj4yNSkmMHgxZiksCisJCQkJCQkJIHJlZ3MpLAorCQkJCQkgIHNpemUsICh1bnNpZ25lZCBsb25nICopIGFkZHIsCisJCQkJCSAgZGVjb2RlX3NpZ25lZG5lc3MoaW5zbikpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBzdG9yZToKLQkJCWRvX2ludGVnZXJfc3RvcmUoKChpbnNuPj4yNSkmMHgxZiksIHNpemUsCi0JCQkJCSAodW5zaWduZWQgbG9uZyAqKSBhZGRyLCByZWdzLAotCQkJCQkgdXNlcl91bmFsaWduZWRfdHJhcF9mYXVsdCk7CisJCQllcnIgPSBkb19pbnRfc3RvcmUoKChpbnNuPj4yNSkmMHgxZiksIHNpemUsCisJCQkJCSAgICh1bnNpZ25lZCBsb25nICopIGFkZHIsIHJlZ3MpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBib3RoOgotI2lmIDAgLyogdW5zdXBwb3J0ZWQgKi8KLQkJCWRvX2F0b21pYyhmZXRjaF9yZWdfYWRkcigoKGluc24+PjI1KSYweDFmKSwgcmVncyksCi0JCQkJICAodW5zaWduZWQgbG9uZyAqKSBhZGRyLAotCQkJCSAgdXNlcl91bmFsaWduZWRfdHJhcF9mYXVsdCk7Ci0jZWxzZQogCQkJLyoKIAkJCSAqIFRoaXMgd2FzIHN1cHBvcnRlZCBpbiAyLjQuIEhvd2V2ZXIsIHdlIHF1ZXN0aW9uCiAJCQkgKiB0aGUgdmFsdWUgb2YgU1dBUCBpbnN0cnVjdGlvbiBhY3Jvc3Mgd29yZCBib3VuZGFyaWVzLgogCQkJICovCiAJCQlwcmludGsoIlVuYWxpZ25lZCBTV0FQIHVuc3VwcG9ydGVkLlxuIik7Ci0JCQlnb3RvIGtpbGxfdXNlcjsKLSNlbmRpZgorCQkJZXJyID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQl1bmFsaWduZWRfcGFuaWMoIkltcG9zc2libGUgdXNlciB1bmFsaWduZWQgdHJhcC4iKTsKLQotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJcbiIKLSJ1c2VyX3VuYWxpZ25lZF90cmFwX2ZhdWx0OlxuXHQiCi0JCQkibW92CSUwLCAlJW8wXG5cdCIKLQkJCSJjYWxsCXVzZXJfbW5hX3RyYXBfZmF1bHRcblx0IgotCQkJIiBtb3YJJTEsICUlbzFcblx0IgotCQkJOgotCQkJOiAiciIgKHJlZ3MpLCAiciIgKGluc24pCi0JCQk6ICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICJvNSIsICJvNyIsCi0JCQkgICJnMSIsICJnMiIsICJnMyIsICJnNCIsICJnNSIsICJnNyIsICJjYyIpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJYWR2YW5jZShyZWdzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8ga2lsbF91c2VyOworCQllbHNlCisJCQlhZHZhbmNlKHJlZ3MpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwppbmRleCBjMDQ0MmU4Li4yMzc1ZmU5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCkBAIC0xOTQxLDkgKzE5NDEsNyBAQAogCWlmICgocHRlID0gc3VuNGNfcHRlX2FsbG9jX29uZV9mYXN0KG1tLCBhZGRyZXNzKSkgIT0gTlVMTCkKIAkJcmV0dXJuIHB0ZTsKIAotCXB0ZSA9IChwdGVfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7Ci0JaWYgKHB0ZSkKLQkJbWVtc2V0KHB0ZSwgMCwgUEFHRV9TSVpFKTsKKwlwdGUgPSAocHRlX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogCXJldHVybiBwdGU7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9taXNjLmMgYi9hcmNoL3NwYXJjL3Byb20vbWlzYy5jCmluZGV4IDM3Y2ZmNWYuLmQ5ZmIzYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9taXNjLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL21pc2MuYwpAQCAtNDUsOSArNDUsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwogfQogCi0vKiBXZSB3YW50IHRvIGRvIHRoaXMgbW9yZSBuaWNlbHkgc29tZSBkYXkuICovCi1leHRlcm4gdm9pZCAoKnByb21fcGFsZXR0ZSkoaW50KTsKLQogLyogRHJvcCBpbnRvIHRoZSBwcm9tLCB3aXRoIHRoZSBjaGFuY2UgdG8gY29udGludWUgd2l0aCB0aGUgJ2dvJwogICogcHJvbSBjb21tYW5kLgogICovCkBAIC01OCw4ICs1NSw2IEBACiAJZXh0ZXJuIHZvaWQgaW5zdGFsbF9saW51eF90aWNrZXIodm9pZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChwcm9tX3BhbGV0dGUpCi0JCXByb21fcGFsZXR0ZSAoMSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByb21fbG9jaywgZmxhZ3MpOwogCWluc3RhbGxfb2JwX3RpY2tlcigpOwogCSgqKHJvbXZlYy0+cHZfYWJvcnQpKSgpOwpAQCAtNjksOCArNjQsNiBAQAogI2lmZGVmIENPTkZJR19TVU5fQVVYSU8KIAlzZXRfYXV4aW8oQVVYSU9fTEVELCAwKTsKICNlbmRpZgotCWlmIChwcm9tX3BhbGV0dGUpCi0JCXByb21fcGFsZXR0ZSAoMCk7CiB9CiAKIC8qIERyb3AgaW50byB0aGUgcHJvbSwgYnV0IGNvbXBsZXRlbHkgdGVybWluYXRlIHRoZSBwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L0tjb25maWcgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwppbmRleCAzYWYzNzhkLi5kZjNlYWNiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtMTAsMTEgKzEwLDEzIEBACiAJZGVmYXVsdCB5CiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCisJc2VsZWN0IEhBVkVfS1JFVFBST0JFUwogCiBjb25maWcgU1BBUkM2NAogCWJvb2wKIAlkZWZhdWx0IHkKIAlzZWxlY3QgSEFWRV9JREUKKwlzZWxlY3QgSEFWRV9MTUIKIAloZWxwCiAJICBTUEFSQyBpcyBhIGZhbWlseSBvZiBSSVNDIG1pY3JvcHJvY2Vzc29ycyBkZXNpZ25lZCBhbmQgbWFya2V0ZWQgYnkKIAkgIFN1biBNaWNyb3N5c3RlbXMsIGluY29ycG9yYXRlZC4gIFRoaXMgcG9ydCBjb3ZlcnMgdGhlIG5ld2VyIDY0LWJpdApAQCAtODYsOSArODgsNiBAQAogCWJvb2wKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5Ci0KIGNob2ljZQogCXByb21wdCAiS2VybmVsIHBhZ2Ugc2l6ZSIKIAlkZWZhdWx0IFNQQVJDNjRfUEFHRV9TSVpFXzhLQgpAQCAtMTQ2LDExICsxNDUsNiBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAotY29uZmlnIFNZU1ZJUENfQ09NUEFUCi0JYm9vbAotCWRlcGVuZHMgb24gQ09NUEFUICYmIFNZU1ZJUEMKLQlkZWZhdWx0IHkKLQogY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0zNzgsNiArMzcyLDEwIEBACiAJICBUbyBjb21waWxlIHRoZSAvcHJvYy9vcGVucHJvbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvcGVucHJvbWZzLiAgSWYgdW5zdXJlLCBjaG9vc2UgTS4KIAorbWVudSAiRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMiCisKK3NvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCisKIGNvbmZpZyBTUEFSQzMyX0NPTVBBVAogCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciBMaW51eC9TcGFyYyAzMmJpdCBiaW5hcnkgY29tcGF0aWJpbGl0eSIKIAloZWxwCkBAIC0zOTAsMzcgKzM4OCwxMCBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBDT01QQVRfQklORk1UX0VMRgogCi1jb25maWcgQklORk1UX0FPVVQzMgotCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgKGllLiBTdW5PUykgYS5vdXQgYmluYXJpZXMiCi0JZGVwZW5kcyBvbiBTUEFSQzMyX0NPTVBBVCAmJiBBUkNIX1NVUFBPUlRTX0FPVVQKLQloZWxwCi0JICBUaGlzIGFsbG93cyB5b3UgdG8gcnVuIDMyLWJpdCBhLm91dCBmb3JtYXQgYmluYXJpZXMgb24geW91ciBVbHRyYS4KLQkgIElmIHlvdSB3YW50IHRvIHJ1biBTdW5PUyBiaW5hcmllcyAoc2VlIFN1bk9TIGJpbmFyeSBlbXVsYXRpb24gYmVsb3cpCi0JICBvciBvdGhlciBhLm91dCBiaW5hcmllcywgc2F5IFkuIElmIHVuc3VyZSwgc2F5IE4uCi0KLW1lbnUgIkV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzIgotCi1zb3VyY2UgImZzL0tjb25maWcuYmluZm10IgotCi1jb25maWcgU1VOT1NfRU1VTAotCWJvb2wgIlN1bk9TIGJpbmFyeSBlbXVsYXRpb24iCi0JZGVwZW5kcyBvbiBCSU5GTVRfQU9VVDMyCi0JaGVscAotCSAgVGhpcyBhbGxvd3MgeW91IHRvIHJ1biBtb3N0IFN1bk9TIGJpbmFyaWVzLiAgSWYgeW91IHdhbnQgdG8gZG8gdGhpcywKLQkgIHNheSBZIGhlcmUgYW5kIHBsYWNlIGFwcHJvcHJpYXRlIGZpbGVzIGluIC91c3IvZ25lbXVsL3N1bm9zLiBTZWUKLQkgIDxodHRwOi8vd3d3LnVsdHJhbGludXgub3JnL2ZhcS5odG1sPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHlvdQotCSAgd2FudCB0byBydW4gU3VuT1MgYmluYXJpZXMgb24gYW4gVWx0cmEgeW91IG11c3QgYWxzbyBzYXkgWSB0bwotCSAgIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYS5vdXQgYmluYXJpZXMiIGFib3ZlLgotCi1jb25maWcgU09MQVJJU19FTVVMCi0JdHJpc3RhdGUgIlNvbGFyaXMgYmluYXJ5IGVtdWxhdGlvbiAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNQQVJDMzJfQ09NUEFUICYmIE5FVCAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIGlzIGV4cGVyaW1lbnRhbCBjb2RlIHdoaWNoIHdpbGwgZW5hYmxlIHlvdSB0byBydW4gKG1hbnkpCi0JICBTb2xhcmlzIGJpbmFyaWVzIG9uIHlvdXIgU1BBUkMgTGludXggbWFjaGluZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNvbGFyaXMuCitjb25maWcgU1lTVklQQ19DT01QQVQKKwlib29sCisJZGVwZW5kcyBvbiBDT01QQVQgJiYgU1lTVklQQworCWRlZmF1bHQgeQogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnIGIvYXJjaC9zcGFyYzY0L0tjb25maWcuZGVidWcKaW5kZXggYTVmYWEzNi4uNmE0ZDI4YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zcGFyYzY0L0tjb25maWcuZGVidWcKQEAgLTIzLDEwICsyMyw2IEBACiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlib29sICJTdGFjayBPdmVyZmxvdyBEZXRlY3Rpb24gU3VwcG9ydCIKIAotY29uZmlnIERFQlVHX0JPT1RNRU0KLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWJvb2wgIkRlYnVnIEJPT1RNRU0gaW5pdGlhbGl6YXRpb24iCi0KIGNvbmZpZyBERUJVR19QQUdFQUxMT0MKIAlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAhSElCRVJOQVRJT04KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9NYWtlZmlsZSBiL2FyY2gvc3BhcmM2NC9NYWtlZmlsZQppbmRleCAwMTE1OWNiLi45Y2I3NWM4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYzY0L01ha2VmaWxlCkBAIC0xMiwzOSArMTIsMTMgQEAKIAogQ1BQRkxBR1Nfdm1saW51eC5sZHMgKz0gLVVzcGFyYwogCi1DQwkJOj0gJChzaGVsbCBpZiAkKENDKSAtbTY0IC1TIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvICQoQ0MpOyBlbHNlIGVjaG8gc3BhcmM2NC1saW51eC1nY2M7IGZpICkKLQotTkVXX0dDQyA6PSAkKGNhbGwgY2Mtb3B0aW9uLXluLCAtbTY0IC1tY21vZGVsPW1lZGxvdykKLU5FV19HQVMgOj0gJChzaGVsbCBpZiAkKExEKSAtViAyPiYxIHwgZ3JlcCAnZWxmNjRfc3BhcmMnID4gL2Rldi9udWxsOyB0aGVuIGVjaG8geTsgZWxzZSBlY2hvIG47IGZpKQotVU5ERUNMQVJFRF9SRUdTIDo9ICQoc2hlbGwgaWYgJChDQykgLWMgLXggYXNzZW1ibGVyIC9kZXYvbnVsbCAtV2EsLS1oZWxwIHwgZ3JlcCB1bmRlY2xhcmVkLXJlZ3MgPiAvZGV2L251bGw7IHRoZW4gZWNobyB5OyBlbHNlIGVjaG8gbjsgZmk7ICkKLQotaWZuZXEgKCQoTkVXX0dBUykseSkKLUFTCQk9IHNwYXJjNjQtbGludXgtYXMKLUxECQk9IHNwYXJjNjQtbGludXgtbGQKLU5NCQk9IHNwYXJjNjQtbGludXgtbm0KLUFSCQk9IHNwYXJjNjQtbGludXgtYXIKLVJBTkxJQgkJPSBzcGFyYzY0LWxpbnV4LXJhbmxpYgotZWxzZQotQVMJCTo9ICQoQVMpIC02NAogTERGTEFHUwkJOj0gLW0gZWxmNjRfc3BhcmMKLWVuZGlmCiAKLWlmbmVxICgkKFVOREVDTEFSRURfUkVHUykseSkKLUNDX1VOREVDTAk9Ci1lbHNlCi1DQ19VTkRFQ0wJPSAtV2EsLS11bmRlY2xhcmVkLXJlZ3MKLUFTCQk6PSAkKEFTKSAtLXVuZGVjbGFyZWQtcmVncwotZW5kaWYKLQotaWZuZXEgKCQoTkVXX0dDQykseSkKLSAgS0JVSUxEX0NGTEFHUyArPSAtcGlwZSAtbW5vLWZwdSAtbXR1bmU9dWx0cmFzcGFyYyAtbW1lZGxvdyBcCi0JICAgIC1mZml4ZWQtZzQgLWZmaXhlZC1nNSAtZmNhbGwtdXNlZC1nNyAtV25vLXNpZ24tY29tcGFyZQotZWxzZQotICBLQlVJTERfQ0ZMQUdTICs9IC1tNjQgLXBpcGUgLW1uby1mcHUgLW1jcHU9dWx0cmFzcGFyYyAtbWNtb2RlbD1tZWRsb3cgXAotCSAgICAtZmZpeGVkLWc0IC1mZml4ZWQtZzUgLWZjYWxsLXVzZWQtZzcgLVduby1zaWduLWNvbXBhcmUgXAotCSAgICAkKENDX1VOREVDTCkKLSAgS0JVSUxEX0FGTEFHUyArPSAtbTY0IC1tY3B1PXVsdHJhc3BhcmMgJChDQ19VTkRFQ0wpCi1lbmRpZgorS0JVSUxEX0NGTEFHUyArPSAtbTY0IC1waXBlIC1tbm8tZnB1IC1tY3B1PXVsdHJhc3BhcmMgLW1jbW9kZWw9bWVkbG93IFwKKwktZmZpeGVkLWc0IC1mZml4ZWQtZzUgLWZjYWxsLXVzZWQtZzcgLVduby1zaWduLWNvbXBhcmUgXAorCS1XYSwtLXVuZGVjbGFyZWQtcmVncworS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT11bHRyYXNwYXJjMykKK0tCVUlMRF9BRkxBR1MgKz0gLW02NCAtbWNwdT11bHRyYXNwYXJjIC1XYSwtLXVuZGVjbGFyZWQtcmVncwogCiBpZmVxICgkKENPTkZJR19NQ09VTlQpLHkpCiAgIEtCVUlMRF9DRkxBR1MgKz0gLXBnCkBAIC01Myw3ICsyNyw2IEBACiBoZWFkLXkgOj0gYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLm8gYXJjaC9zcGFyYzY0L2tlcm5lbC9pbml0X3Rhc2subwogCiBjb3JlLXkJCQkJKz0gYXJjaC9zcGFyYzY0L2tlcm5lbC8gYXJjaC9zcGFyYzY0L21tLwotY29yZS0kKENPTkZJR19TT0xBUklTX0VNVUwpCSs9IGFyY2gvc3BhcmM2NC9zb2xhcmlzLwogY29yZS15CQkJCSs9IGFyY2gvc3BhcmM2NC9tYXRoLWVtdS8KIGxpYnMteQkJCQkrPSBhcmNoL3NwYXJjNjQvcHJvbS8gYXJjaC9zcGFyYzY0L2xpYi8KIGRyaXZlcnMtJChDT05GSUdfT1BST0ZJTEUpCSs9IGFyY2gvc3BhcmM2NC9vcHJvZmlsZS8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCmluZGV4IDgzM2Q3NGIuLmUxODM1ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAotIyBUdWUgRmViICA1IDE3OjI4OjE5IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNQorIyBTdW4gQXByIDIwIDAxOjMzOjIxIDIwMDgKICMKIENPTkZJR19TUEFSQz15CiBDT05GSUdfU1BBUkM2ND15CkBAIC0xMCw2ICsxMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19RVUlDS0xJU1Q9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTQ5LDE3ICs1MCwyMyBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfUlRfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTc0LDYgKzgxLDcgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtOTIsNyArMTAwLDkgQEAKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CitDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMjMsOCArMTMzLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIAogIwpAQCAtMTc0LDIzICsxODIsMjEgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TVU5fT1BFTlBST01GUz1tCi1DT05GSUdfU1BBUkMzMl9DT01QQVQ9eQotQ09ORklHX0NPTVBBVD15Ci1DT05GSUdfQklORk1UX0VMRjMyPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUMzIgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19TT0xBUklTX0VNVUw9eQorQ09ORklHX1NQQVJDMzJfQ09NUEFUPXkKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1NDSEVEX01DPXkKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwpAQCAtMjU1LDggKzI2MSwxMCBAQAogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0RDQ1A9bQpAQCAtMzU0LDExICszNjIsMTMgQEAKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRElTSz15CkBAIC0zNzQsOCArMzg0LDggQEAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CiAKICMKICMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CkBAIC00MTEsNyArNDIxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKKyMgQ09ORklHX0JMS19ERVZfSERfT05MWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwpAQCAtNDczLDYgKzQ4Myw3IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKQEAgLTU3Niw3ICs1ODcsNiBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPW0KIENPTkZJR19CTlgyPW0KQEAgLTYwMSw2ICs2MTEsNyBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTc3NSw3ICs3ODYsNiBAQAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldApAQCAtODAyLDYgKzgxMiw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldApAQCAtODMxLDYgKzg0Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CkBAIC04NDAsOSArODUyLDExIEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCkBAIC0xMjAxLDYgKzEyMTUsNyBAQAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldApAQCAtMTI0MiwxMiArMTI1NywxMCBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTEyOTEsOCArMTMwNCwxMCBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKQEAgLTEzNzAsNiArMTM4NSw3IEBACiBDT05GSUdfU0NIRURTVEFUUz15CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTM4NSw3ICsxNDAxLDYgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldApAQCAtMTM5Niw3ICsxNDExLDYgQEAKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RDRkxVU0ggaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogCiAjCkBAIC0xNDU3LDcgKzE0NzEsNyBAQAogQ09ORklHX0NSWVBUT19DUkMzMkM9bQogQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMWJmNWIxOC4uNjNjNmFlMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw3IEBACiBvYmoteQkJOj0gcHJvY2Vzcy5vIHNldHVwLm8gY3B1Lm8gaWRwcm9tLm8gXAogCQkgICB0cmFwcy5vIGF1eGlvLm8gdW5hX2FzbS5vIHN5c2ZzLm8gaW9tbXUubyBcCiAJCSAgIGlycS5vIHB0cmFjZS5vIHRpbWUubyBzeXNfc3BhcmMubyBzaWduYWwubyBcCi0JCSAgIHVuYWxpZ25lZC5vIGNlbnRyYWwubyBwY2kubyBzdGFyZmlyZS5vIHNlbWFwaG9yZS5vIFwKKwkJICAgdW5hbGlnbmVkLm8gY2VudHJhbC5vIHBjaS5vIHN0YXJmaXJlLm8gXAogCQkgICBwb3dlci5vIHNidXMubyBzcGFyYzY0X2tzeW1zLm8gY2htYy5vIFwKIAkJICAgdmlzZW11bC5vIHByb20ubyBvZl9kZXZpY2UubyBodmFwaS5vIHNzdGF0ZS5vIG1kZXNjLm8KIApAQCAtMjEsNyArMjEsNiBAQAogb2JqLSQoQ09ORklHX1BDSV9NU0kpCSs9IHBjaV9tc2kubwogb2JqLSQoQ09ORklHX1NNUCkJICs9IHNtcC5vIHRyYW1wb2xpbmUubyBodnRyYW1wLm8KIG9iai0kKENPTkZJR19TUEFSQzMyX0NPTVBBVCkgKz0gc3lzMzIubyBzeXNfc3BhcmMzMi5vIHNpZ25hbDMyLm8KLW9iai0kKENPTkZJR19CSU5GTVRfQU9VVDMyKSArPSBiaW5mbXRfYW91dDMyLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBtb2R1bGUubwogb2JqLSQoQ09ORklHX1VTM19GUkVRKSArPSB1czNfY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfVVMyRV9GUkVRKSArPSB1czJlX2NwdWZyZXEubwpAQCAtMzAsMTEgKzI5LDMgQEAKIG9iai0kKENPTkZJR19BVURJVCkgKz0gYXVkaXQubwogb2JqLSQoQ09ORklHX0FVRElUKSQoQ09ORklHX1NQQVJDMzJfQ09NUEFUKSArPSBjb21wYXRfYXVkaXQubwogb2JqLXkgKz0gJChvYmoteXkpCi0KLWlmZGVmIENPTkZJR19TVU5PU19FTVVMCi0gIG9iai15ICs9IHN5c19zdW5vczMyLm8gc3Vub3NfaW9jdGwzMi5vCi1lbHNlCi0gIGlmZGVmIENPTkZJR19TT0xBUklTX0VNVUwKLSAgICBvYmoteSArPSBzeXNfc3Vub3MzMi5vIHN1bm9zX2lvY3RsMzIubwotICBlbmRpZgotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYmluZm10X2FvdXQzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9iaW5mbXRfYW91dDMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NzdmMmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9iaW5mbXRfYW91dDMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTkgKzAsMCBAQAotLyoKLSAqICBsaW51eC9mcy9iaW5mbXRfYW91dC5jCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NiAgTGludXMgVG9ydmFsZHMKLSAqCi0gKiAgSGFja2VkIGEgYml0IGJ5IERhdmVNIHRvIG1ha2UgaXQgd29yayB3aXRoIDMyLWJpdCBTdW5PUwotICogIGJpbmFyaWVzIG9uIHRoZSBzcGFyYzY0IHBvcnQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9hLm91dC1jb3JlLmg+Ci0KLXN0YXRpYyBpbnQgbG9hZF9hb3V0MzJfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKLXN0YXRpYyBpbnQgbG9hZF9hb3V0MzJfbGlicmFyeShzdHJ1Y3QgZmlsZSopOwotc3RhdGljIGludCBhb3V0MzJfY29yZV9kdW1wKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBsaW1pdCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IGFvdXQzMl9mb3JtYXQgPSB7Ci0JLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKLQkubG9hZF9iaW5hcnkJPSBsb2FkX2FvdXQzMl9iaW5hcnksCi0JLmxvYWRfc2hsaWIJPSBsb2FkX2FvdXQzMl9saWJyYXJ5LAotCS5jb3JlX2R1bXAJPSBhb3V0MzJfY29yZV9kdW1wLAotCS5taW5fY29yZWR1bXAJPSBQQUdFX1NJWkUsCi19OwotCi1zdGF0aWMgdm9pZCBzZXRfYnJrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXN0YXJ0ID0gUEFHRV9BTElHTihzdGFydCk7Ci0JZW5kID0gUEFHRV9BTElHTihlbmQpOwotCWlmIChlbmQgPD0gc3RhcnQpCi0JCXJldHVybjsKLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWRvX2JyayhzdGFydCwgZW5kIC0gc3RhcnQpOwotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotfQotCi0vKgotICogVGhlc2UgYXJlIHRoZSBvbmx5IHRoaW5ncyB5b3Ugc2hvdWxkIGRvIG9uIGEgY29yZS1maWxlOiB1c2Ugb25seSB0aGVzZQotICogbWFjcm9zIHRvIHdyaXRlIG91dCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvLgotICovCi0KLXN0YXRpYyBpbnQgZHVtcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYWRkciwgaW50IG5yKQotewotCXJldHVybiBmaWxlLT5mX29wLT53cml0ZShmaWxlLCBhZGRyLCBuciwgJmZpbGUtPmZfcG9zKSA9PSBucjsKLX0KLQotI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yKQlcCi0JaWYgKCFkdW1wX3dyaXRlKGZpbGUsICh2b2lkICopKGFkZHIpLCAobnIpKSkgXAotCQlnb3RvIGVuZF9jb3JlZHVtcDsKLQotI2RlZmluZSBEVU1QX1NFRUsob2Zmc2V0KSBcCi1pZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKSB7IFwKLQlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKGZpbGUsKG9mZnNldCksMCkgIT0gKG9mZnNldCkpIFwKLSAJCWdvdG8gZW5kX2NvcmVkdW1wOyBcCi19IGVsc2UgZmlsZS0+Zl9wb3MgPSAob2Zmc2V0KQotCi0vKgotICogUm91dGluZSB3cml0ZXMgYSBjb3JlIGR1bXAgaW1hZ2UgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotICogQ3VycmVudGx5IG9ubHkgYSBzdHViLWZ1bmN0aW9uLgotICoKLSAqIE5vdGUgdGhhdCBzZXR1aWQvc2V0Z2lkIGZpbGVzIHdvbid0IG1ha2UgYSBjb3JlLWR1bXAgaWYgdGhlIHVpZC9naWQKLSAqIGNoYW5nZWQgZHVlIHRvIHRoZSBzZXRbdXxnXWlkLiBJdCdzIGVuZm9yY2VkIGJ5IHRoZSAiY3VycmVudC0+bW0tPmR1bXBhYmxlIgotICogZmllbGQsIHdoaWNoIGFsc28gbWFrZXMgc3VyZSB0aGUgY29yZS1kdW1wcyB3b24ndCBiZSByZWN1cnNpdmUgaWYgdGhlCi0gKiBkdW1waW5nIG9mIHRoZSBwcm9jZXNzIHJlc3VsdHMgaW4gYW5vdGhlciBlcnJvci4uCi0gKi8KLQotc3RhdGljIGludCBhb3V0MzJfY29yZV9kdW1wKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBsaW1pdCkKLXsKLQltbV9zZWdtZW50X3QgZnM7Ci0JaW50IGhhc19kdW1wZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZHVtcF9zdGFydCwgZHVtcF9zaXplOwotCXN0cnVjdCB1c2VyIGR1bXA7Ci0jICAgICAgIGRlZmluZSBTVEFSVF9EQVRBKHUpICAgICh1LnVfdHNpemUpCi0jICAgICAgIGRlZmluZSBTVEFSVF9TVEFDSyh1KSAgICgocmVncy0+dV9yZWdzW1VSRUdfRlBdKSAmIH4oUEFHRV9TSVpFIC0gMSkpCi0KLQlmcyA9IGdldF9mcygpOwotCXNldF9mcyhLRVJORUxfRFMpOwotCWhhc19kdW1wZWQgPSAxOwotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0RVTVBDT1JFOwotICAgICAgIAlzdHJuY3B5KGR1bXAudV9jb21tLCBjdXJyZW50LT5jb21tLCBzaXplb2YoZHVtcC51X2NvbW0pKTsKLQlkdW1wLnNpZ25hbCA9IHNpZ25yOwotCWFvdXRfZHVtcF90aHJlYWQocmVncywgJmR1bXApOwotCi0vKiBJZiB0aGUgc2l6ZSBvZiB0aGUgZHVtcCBmaWxlIGV4Y2VlZHMgdGhlIHJsaW1pdCwgdGhlbiBzZWUgd2hhdCB3b3VsZCBoYXBwZW4KLSAgIGlmIHdlIHdyb3RlIHRoZSBzdGFjaywgYnV0IG5vdCB0aGUgZGF0YSBhcmVhLiAgKi8KLQlpZiAoZHVtcC51X2RzaXplICsgZHVtcC51X3NzaXplID4gbGltaXQpCi0JCWR1bXAudV9kc2l6ZSA9IDA7Ci0KLS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCByb29tIHRvIHdyaXRlIHRoZSBzdGFjayBhbmQgZGF0YSBhcmVhcy4gKi8KLQlpZiAoZHVtcC51X3NzaXplID4gbGltaXQpCi0JCWR1bXAudV9zc2l6ZSA9IDA7Ci0KLS8qIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIGEgZGF0YSBhbmQgc3RhY2sgYXJlYSB0byBkdW1wICovCi0Jc2V0X2ZzKFVTRVJfRFMpOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCAodm9pZCBfX3VzZXIgKikgU1RBUlRfREFUQShkdW1wKSwgZHVtcC51X2RzaXplKSkKLQkJZHVtcC51X2RzaXplID0gMDsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgKHZvaWQgX191c2VyICopIFNUQVJUX1NUQUNLKGR1bXApLCBkdW1wLnVfc3NpemUpKQotCQlkdW1wLnVfc3NpemUgPSAwOwotCi0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0vKiBzdHJ1Y3QgdXNlciAqLwotCURVTVBfV1JJVEUoJmR1bXAsc2l6ZW9mKGR1bXApKTsKLS8qIG5vdyB3ZSBzdGFydCB3cml0aW5nIG91dCB0aGUgdXNlciBzcGFjZSBpbmZvICovCi0Jc2V0X2ZzKFVTRVJfRFMpOwotLyogRHVtcCB0aGUgZGF0YSBhcmVhICovCi0JaWYgKGR1bXAudV9kc2l6ZSAhPSAwKSB7Ci0JCWR1bXBfc3RhcnQgPSBTVEFSVF9EQVRBKGR1bXApOwotCQlkdW1wX3NpemUgPSBkdW1wLnVfZHNpemU7Ci0JCURVTVBfV1JJVEUoZHVtcF9zdGFydCxkdW1wX3NpemUpOwotCX0KLS8qIE5vdyBwcmVwYXJlIHRvIGR1bXAgdGhlIHN0YWNrIGFyZWEgKi8KLQlpZiAoZHVtcC51X3NzaXplICE9IDApIHsKLQkJZHVtcF9zdGFydCA9IFNUQVJUX1NUQUNLKGR1bXApOwotCQlkdW1wX3NpemUgPSBkdW1wLnVfc3NpemU7Ci0JCURVTVBfV1JJVEUoZHVtcF9zdGFydCxkdW1wX3NpemUpOwotCX0KLS8qIEZpbmFsbHkgZHVtcCB0aGUgdGFzayBzdHJ1Y3QuICBOb3QgYmUgdXNlZCBieSBnZGIsIGJ1dCBjb3VsZCBiZSB1c2VmdWwgKi8KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlEVU1QX1dSSVRFKGN1cnJlbnQsc2l6ZW9mKCpjdXJyZW50KSk7Ci1lbmRfY29yZWR1bXA6Ci0Jc2V0X2ZzKGZzKTsKLQlyZXR1cm4gaGFzX2R1bXBlZDsKLX0KLQotLyoKLSAqIGNyZWF0ZV9hb3V0MzJfdGFibGVzKCkgcGFyc2VzIHRoZSBlbnYtIGFuZCBhcmctc3RyaW5ncyBpbiBuZXcgdXNlcgotICogbWVtb3J5IGFuZCBjcmVhdGVzIHRoZSBwb2ludGVyIHRhYmxlcyBmcm9tIHRoZW0sIGFuZCBwdXRzIHRoZWlyCi0gKiBhZGRyZXNzZXMgb24gdGhlICJzdGFjayIsIHJldHVybmluZyB0aGUgbmV3IHN0YWNrIHBvaW50ZXIgdmFsdWUuCi0gKi8KLQotc3RhdGljIHUzMiBfX3VzZXIgKmNyZWF0ZV9hb3V0MzJfdGFibGVzKGNoYXIgX191c2VyICpwLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQotewotCXUzMiBfX3VzZXIgKmFyZ3Y7Ci0JdTMyIF9fdXNlciAqZW52cDsKLQl1MzIgX191c2VyICpzcDsKLQlpbnQgYXJnYyA9IGJwcm0tPmFyZ2M7Ci0JaW50IGVudmMgPSBicHJtLT5lbnZjOwotCi0Jc3AgPSAodTMyIF9fdXNlciAqKSgoLSh1bnNpZ25lZCBsb25nKXNpemVvZihjaGFyICopKSYodW5zaWduZWQgbG9uZylwKTsKLQotCS8qIFRoaXMgaW1wb3NlcyB0aGUgcHJvcGVyIHN0YWNrIGFsaWdubWVudCBmb3IgYSBuZXcgcHJvY2Vzcy4gKi8KLQlzcCA9ICh1MzIgX191c2VyICopICgoKHVuc2lnbmVkIGxvbmcpIHNwKSAmIH43KTsKLQlpZiAoKGVudmMrYXJnYyszKSYxKQotCQktLXNwOwotCi0Jc3AgLT0gZW52YysxOwotCWVudnAgPSBzcDsKLQlzcCAtPSBhcmdjKzE7Ci0JYXJndiA9IHNwOwotCXB1dF91c2VyKGFyZ2MsLS1zcCk7Ci0JY3VycmVudC0+bW0tPmFyZ19zdGFydCA9ICh1bnNpZ25lZCBsb25nKSBwOwotCXdoaWxlIChhcmdjLS0+MCkgewotCQljaGFyIGM7Ci0JCXB1dF91c2VyKCgodTMyKSh1bnNpZ25lZCBsb25nKShwKSksYXJndisrKTsKLQkJZG8gewotCQkJZ2V0X3VzZXIoYyxwKyspOwotCQl9IHdoaWxlIChjKTsKLQl9Ci0JcHV0X3VzZXIoMCxhcmd2KTsKLQljdXJyZW50LT5tbS0+YXJnX2VuZCA9IGN1cnJlbnQtPm1tLT5lbnZfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgcDsKLQl3aGlsZSAoZW52Yy0tPjApIHsKLQkJY2hhciBjOwotCQlwdXRfdXNlcigoKHUzMikodW5zaWduZWQgbG9uZykocCkpLGVudnArKyk7Ci0JCWRvIHsKLQkJCWdldF91c2VyKGMscCsrKTsKLQkJfSB3aGlsZSAoYyk7Ci0JfQotCXB1dF91c2VyKDAsZW52cCk7Ci0JY3VycmVudC0+bW0tPmVudl9lbmQgPSAodW5zaWduZWQgbG9uZykgcDsKLQlyZXR1cm4gc3A7Ci19Ci0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB1c2VkIHRvIGxvYWQgYS5vdXQgc3R5bGUgZXhlY3V0YWJsZXMgYW5kIHNoYXJlZAotICogbGlicmFyaWVzLiAgVGhlcmUgaXMgbm8gYmluYXJ5IGRlcGVuZGVudCBjb2RlIGFueXdoZXJlIGVsc2UuCi0gKi8KLQotc3RhdGljIGludCBsb2FkX2FvdXQzMl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0sIHN0cnVjdCBwdF9yZWdzICogcmVncykKLXsKLQlzdHJ1Y3QgZXhlYyBleDsKLQl1bnNpZ25lZCBsb25nIGVycm9yOwotCXVuc2lnbmVkIGxvbmcgZmRfb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgcmxpbTsKLQl1bnNpZ25lZCBsb25nIG9yaWdfdGhyX2ZsYWdzOwotCWludCByZXR2YWw7Ci0KLQlleCA9ICooKHN0cnVjdCBleGVjICopIGJwcm0tPmJ1Zik7CQkvKiBleGVjLWhlYWRlciAqLwotCWlmICgoTl9NQUdJQyhleCkgIT0gWk1BR0lDICYmIE5fTUFHSUMoZXgpICE9IE9NQUdJQyAmJgotCSAgICAgTl9NQUdJQyhleCkgIT0gUU1BR0lDICYmIE5fTUFHSUMoZXgpICE9IE5NQUdJQykgfHwKLQkgICAgTl9UUlNJWkUoZXgpIHx8IE5fRFJTSVpFKGV4KSB8fAotCSAgICBicHJtLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemUgPCBleC5hX3RleHQrZXguYV9kYXRhK05fU1lNU0laRShleCkrTl9UWFRPRkYoZXgpKSB7Ci0JCXJldHVybiAtRU5PRVhFQzsKLQl9Ci0KLQlmZF9vZmZzZXQgPSBOX1RYVE9GRihleCk7Ci0KLQkvKiBDaGVjayBpbml0aWFsIGxpbWl0cy4gVGhpcyBhdm9pZHMgbGV0dGluZyBwZW9wbGUgY2lyY3VtdmVudAotCSAqIHNpemUgbGltaXRzIGltcG9zZWQgb24gdGhlbSBieSBjcmVhdGluZyBwcm9ncmFtcyB3aXRoIGxhcmdlCi0JICogYXJyYXlzIGluIHRoZSBkYXRhIG9yIGJzcy4KLQkgKi8KLQlybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9EQVRBXS5ybGltX2N1cjsKLQlpZiAocmxpbSA+PSBSTElNX0lORklOSVRZKQotCQlybGltID0gfjA7Ci0JaWYgKGV4LmFfZGF0YSArIGV4LmFfYnNzID4gcmxpbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovCi0JcmV0dmFsID0gZmx1c2hfb2xkX2V4ZWMoYnBybSk7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCS8qIE9LLCBUaGlzIGlzIHRoZSBwb2ludCBvZiBubyByZXR1cm4gKi8KLQlzZXRfcGVyc29uYWxpdHkoUEVSX1NVTk9TKTsKLQotCWN1cnJlbnQtPm1tLT5lbmRfY29kZSA9IGV4LmFfdGV4dCArCi0JCShjdXJyZW50LT5tbS0+c3RhcnRfY29kZSA9IE5fVFhUQUREUihleCkpOwotCWN1cnJlbnQtPm1tLT5lbmRfZGF0YSA9IGV4LmFfZGF0YSArCi0JCShjdXJyZW50LT5tbS0+c3RhcnRfZGF0YSA9IE5fREFUQUREUihleCkpOwotCWN1cnJlbnQtPm1tLT5icmsgPSBleC5hX2JzcyArCi0JCShjdXJyZW50LT5tbS0+c3RhcnRfYnJrID0gTl9CU1NBRERSKGV4KSk7Ci0JY3VycmVudC0+bW0tPmZyZWVfYXJlYV9jYWNoZSA9IGN1cnJlbnQtPm1tLT5tbWFwX2Jhc2U7Ci0JY3VycmVudC0+bW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOwotCi0JY3VycmVudC0+bW0tPm1tYXAgPSBOVUxMOwotCWNvbXB1dGVfY3JlZHMoYnBybSk7Ci0gCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9GT1JLTk9FWEVDOwotCWlmIChOX01BR0lDKGV4KSA9PSBOTUFHSUMpIHsKLQkJbG9mZl90IHBvcyA9IGZkX29mZnNldDsKLQkJLyogRnVjayBtZSBwbGVudHkuLi4gKi8KLQkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsJCi0JCWVycm9yID0gZG9fYnJrKE5fVFhUQUREUihleCksIGV4LmFfdGV4dCk7Ci0JCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlicHJtLT5maWxlLT5mX29wLT5yZWFkKGJwcm0tPmZpbGUsIChjaGFyIF9fdXNlciAqKU5fVFhUQUREUihleCksCi0JCQkgIGV4LmFfdGV4dCwgJnBvcyk7Ci0JCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JCWVycm9yID0gZG9fYnJrKE5fREFUQUREUihleCksIGV4LmFfZGF0YSk7Ci0JCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlicHJtLT5maWxlLT5mX29wLT5yZWFkKGJwcm0tPmZpbGUsIChjaGFyIF9fdXNlciAqKU5fREFUQUREUihleCksCi0JCQkgIGV4LmFfZGF0YSwgJnBvcyk7Ci0JCWdvdG8gYmV5b25kX2lmOwotCX0KLQotCWlmIChOX01BR0lDKGV4KSA9PSBPTUFHSUMpIHsKLQkJbG9mZl90IHBvcyA9IGZkX29mZnNldDsKLQkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJZG9fYnJrKE5fVFhUQUREUihleCkgJiBQQUdFX01BU0ssCi0JCQlleC5hX3RleHQrZXguYV9kYXRhICsgUEFHRV9TSVpFIC0gMSk7Ci0JCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlicHJtLT5maWxlLT5mX29wLT5yZWFkKGJwcm0tPmZpbGUsIChjaGFyIF9fdXNlciAqKU5fVFhUQUREUihleCksCi0JCQkgIGV4LmFfdGV4dCtleC5hX2RhdGEsICZwb3MpOwotCX0gZWxzZSB7Ci0JCXN0YXRpYyB1bnNpZ25lZCBsb25nIGVycm9yX3RpbWU7Ci0JCWlmICgoZXguYV90ZXh0ICYgMHhmZmYgfHwgZXguYV9kYXRhICYgMHhmZmYpICYmCi0JCSAgICAoTl9NQUdJQyhleCkgIT0gTk1BR0lDKSAmJiAoamlmZmllcy1lcnJvcl90aW1lKSA+IDUqSFopCi0JCXsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiZXhlY3V0YWJsZSBub3QgcGFnZSBhbGlnbmVkXG4iKTsKLQkJCWVycm9yX3RpbWUgPSBqaWZmaWVzOwotCQl9Ci0KLQkJaWYgKCFicHJtLT5maWxlLT5mX29wLT5tbWFwKSB7Ci0JCQlsb2ZmX3QgcG9zID0gZmRfb2Zmc2V0OwotCQkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJCWRvX2JyaygwLCBleC5hX3RleHQrZXguYV9kYXRhKTsKLQkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQkJYnBybS0+ZmlsZS0+Zl9vcC0+cmVhZChicHJtLT5maWxlLAotCQkJCSAgKGNoYXIgX191c2VyICopTl9UWFRBRERSKGV4KSwKLQkJCQkgIGV4LmFfdGV4dCtleC5hX2RhdGEsICZwb3MpOwotCQkJZ290byBiZXlvbmRfaWY7Ci0JCX0KLQotCSAgICAgICAgZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJZXJyb3IgPSBkb19tbWFwKGJwcm0tPmZpbGUsIE5fVFhUQUREUihleCksIGV4LmFfdGV4dCwKLQkJCVBST1RfUkVBRCB8IFBST1RfRVhFQywKLQkJCU1BUF9GSVhFRCB8IE1BUF9QUklWQVRFIHwgTUFQX0RFTllXUklURSB8IE1BUF9FWEVDVVRBQkxFLAotCQkJZmRfb2Zmc2V0KTsKLQkgICAgICAgIHVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCi0JCWlmIChlcnJvciAhPSBOX1RYVEFERFIoZXgpKSB7Ci0JCQlzZW5kX3NpZyhTSUdLSUxMLCBjdXJyZW50LCAwKTsKLQkJCXJldHVybiBlcnJvcjsKLQkJfQotCi0JICAgICAgICBkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotIAkJZXJyb3IgPSBkb19tbWFwKGJwcm0tPmZpbGUsIE5fREFUQUREUihleCksIGV4LmFfZGF0YSwKLQkJCQlQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAotCQkJCU1BUF9GSVhFRCB8IE1BUF9QUklWQVRFIHwgTUFQX0RFTllXUklURSB8IE1BUF9FWEVDVVRBQkxFLAotCQkJCWZkX29mZnNldCArIGV4LmFfdGV4dCk7Ci0JICAgICAgICB1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJaWYgKGVycm9yICE9IE5fREFUQUREUihleCkpIHsKLQkJCXNlbmRfc2lnKFNJR0tJTEwsIGN1cnJlbnQsIDApOwotCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0JfQotYmV5b25kX2lmOgotCXNldF9iaW5mbXQoJmFvdXQzMl9mb3JtYXQpOwotCi0Jc2V0X2JyayhjdXJyZW50LT5tbS0+c3RhcnRfYnJrLCBjdXJyZW50LT5tbS0+YnJrKTsKLQotCS8qIE1ha2Ugc3VyZSBTVEFDS19UT1AgcmV0dXJucyB0aGUgcmlnaHQgdGhpbmcuICAqLwotCW9yaWdfdGhyX2ZsYWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFnczsKLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzIHw9IF9USUZfMzJCSVQ7Ci0KLQlyZXR2YWwgPSBzZXR1cF9hcmdfcGFnZXMoYnBybSwgU1RBQ0tfVE9QLCBFWFNUQUNLX0RFRkFVTFQpOwotCWlmIChyZXR2YWwgPCAwKSB7IAotCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzID0gb3JpZ190aHJfZmxhZ3M7Ci0KLQkJLyogU29tZW9uZSBjaGVjay1tZTogaXMgdGhpcyBlcnJvciBwYXRoIGVub3VnaD8gKi8gCi0JCXNlbmRfc2lnKFNJR0tJTEwsIGN1cnJlbnQsIDApOyAKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQljdXJyZW50LT5tbS0+c3RhcnRfc3RhY2sgPQotCQkodW5zaWduZWQgbG9uZykgY3JlYXRlX2FvdXQzMl90YWJsZXMoKGNoYXIgX191c2VyICopYnBybS0+cCwgYnBybSk7Ci0JdHNiX2NvbnRleHRfc3dpdGNoKGN1cnJlbnQtPm1tKTsKLQotCXN0YXJ0X3RocmVhZDMyKHJlZ3MsIGV4LmFfZW50cnksIGN1cnJlbnQtPm1tLT5zdGFydF9zdGFjayk7Ci0JaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpCi0JCXNlbmRfc2lnKFNJR1RSQVAsIGN1cnJlbnQsIDApOwotCXJldHVybiAwOwotfQotCi0vKiBOLkIuIE1vdmUgdG8gLmggZmlsZSBhbmQgdXNlIGNvZGUgaW4gZnMvYmluZm10X2FvdXQuYz8gKi8KLXN0YXRpYyBpbnQgbG9hZF9hb3V0MzJfbGlicmFyeShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKLQl1bnNpZ25lZCBsb25nIGJzcywgc3RhcnRfYWRkciwgbGVuOwotCXVuc2lnbmVkIGxvbmcgZXJyb3I7Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgZXhlYyBleDsKLQotCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQotCXJldHZhbCA9IC1FTk9FWEVDOwotCWVycm9yID0ga2VybmVsX3JlYWQoZmlsZSwgMCwgKGNoYXIgKikgJmV4LCBzaXplb2YoZXgpKTsKLQlpZiAoZXJyb3IgIT0gc2l6ZW9mKGV4KSkKLQkJZ290byBvdXQ7Ci0KLQkvKiBXZSBjb21lIGluIGhlcmUgZm9yIHRoZSByZWd1bGFyIGEub3V0IHN0eWxlIG9mIHNoYXJlZCBsaWJyYXJpZXMgKi8KLQlpZiAoKE5fTUFHSUMoZXgpICE9IFpNQUdJQyAmJiBOX01BR0lDKGV4KSAhPSBRTUFHSUMpIHx8IE5fVFJTSVpFKGV4KSB8fAotCSAgICBOX0RSU0laRShleCkgfHwgKChleC5hX2VudHJ5ICYgMHhmZmYpICYmIE5fTUFHSUMoZXgpID09IFpNQUdJQykgfHwKLQkgICAgaW5vZGUtPmlfc2l6ZSA8IGV4LmFfdGV4dCtleC5hX2RhdGErTl9TWU1TSVpFKGV4KStOX1RYVE9GRihleCkpIHsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKE5fTUFHSUMoZXgpID09IFpNQUdJQyAmJiBOX1RYVE9GRihleCkgJiYKLQkgICAgKE5fVFhUT0ZGKGV4KSA8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpIHsKLQkJcHJpbnRrKCJOX1RYVE9GRiA8IEJMT0NLX1NJWkUuIFBsZWFzZSBjb252ZXJ0IGxpYnJhcnlcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoTl9GTEFHUyhleCkpCi0JCWdvdG8gb3V0OwotCi0JLyogRm9yICBRTUFHSUMsIHRoZSBzdGFydGluZyBhZGRyZXNzIGlzIDB4MjAgaW50byB0aGUgcGFnZS4gIFdlIG1hc2sKLQkgICB0aGlzIG9mZiB0byBnZXQgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgZm9yIHRoZSBwYWdlICovCi0KLQlzdGFydF9hZGRyID0gIGV4LmFfZW50cnkgJiAweGZmZmZmMDAwOwotCi0JLyogTm93IHVzZSBtbWFwIHRvIG1hcCB0aGUgbGlicmFyeSBpbnRvIG1lbW9yeS4gKi8KLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWVycm9yID0gZG9fbW1hcChmaWxlLCBzdGFydF9hZGRyLCBleC5hX3RleHQgKyBleC5hX2RhdGEsCi0JCQlQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAotCQkJTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBfREVOWVdSSVRFLAotCQkJTl9UWFRPRkYoZXgpKTsKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyZXR2YWwgPSBlcnJvcjsKLQlpZiAoZXJyb3IgIT0gc3RhcnRfYWRkcikKLQkJZ290byBvdXQ7Ci0KLQlsZW4gPSBQQUdFX0FMSUdOKGV4LmFfdGV4dCArIGV4LmFfZGF0YSk7Ci0JYnNzID0gZXguYV90ZXh0ICsgZXguYV9kYXRhICsgZXguYV9ic3M7Ci0JaWYgKGJzcyA+IGxlbikgewotCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQllcnJvciA9IGRvX2JyayhzdGFydF9hZGRyICsgbGVuLCBic3MgLSBsZW4pOwotCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJcmV0dmFsID0gZXJyb3I7Ci0JCWlmIChlcnJvciAhPSBzdGFydF9hZGRyICsgbGVuKQotCQkJZ290byBvdXQ7Ci0JfQotCXJldHZhbCA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9hb3V0MzJfYmluZm10KHZvaWQpCi17Ci0JcmV0dXJuIHJlZ2lzdGVyX2JpbmZtdCgmYW91dDMyX2Zvcm1hdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2FvdXQzMl9iaW5mbXQodm9pZCkKLXsKLQl1bnJlZ2lzdGVyX2JpbmZtdCgmYW91dDMyX2Zvcm1hdCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfYW91dDMyX2JpbmZtdCk7Ci1tb2R1bGVfZXhpdChleGl0X2FvdXQzMl9iaW5mbXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY3B1LmMKaW5kZXggZTQzZGI3My4uMDA5N2MwOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAKKyNpbmNsdWRlICJlbnRyeS5oIgorCiBERUZJTkVfUEVSX0NQVShjcHVpbmZvX3NwYXJjLCBfX2NwdV9kYXRhKSA9IHsgMCB9OwogCiBzdHJ1Y3QgY3B1X2l1X2luZm8gewpAQCAtMzAsNyArMzIsNyBAQAogICBjaGFyKiBmcF9uYW1lOwogfTsKIAotc3RydWN0IGNwdV9mcF9pbmZvIGxpbnV4X3NwYXJjX2ZwdVtdID0geworc3RhdGljIHN0cnVjdCBjcHVfZnBfaW5mbyBsaW51eF9zcGFyY19mcHVbXSA9IHsKICAgeyAweDE3LCAweDEwLCAwLCAiVWx0cmFTcGFyYyBJIGludGVncmF0ZWQgRlBVIn0sCiAgIHsgMHgyMiwgMHgxMCwgMCwgIlVsdHJhU3BhcmMgSSBpbnRlZ3JhdGVkIEZQVSJ9LAogICB7IDB4MTcsIDB4MTEsIDAsICJVbHRyYVNwYXJjIElJIGludGVncmF0ZWQgRlBVIn0sCkBAIC00Niw3ICs0OCw3IEBACiAKICNkZWZpbmUgTlNQQVJDRlBVICBBUlJBWV9TSVpFKGxpbnV4X3NwYXJjX2ZwdSkKIAotc3RydWN0IGNwdV9pdV9pbmZvIGxpbnV4X3NwYXJjX2NoaXBzW10gPSB7CitzdGF0aWMgc3RydWN0IGNwdV9pdV9pbmZvIGxpbnV4X3NwYXJjX2NoaXBzW10gPSB7CiAgIHsgMHgxNywgMHgxMCwgIlRJIFVsdHJhU3BhcmMgSSAgIChTcGl0RmlyZSkifSwKICAgeyAweDIyLCAweDEwLCAiVEkgVWx0cmFTcGFyYyBJICAgKFNwaXRGaXJlKSJ9LAogICB7IDB4MTcsIDB4MTEsICJUSSBVbHRyYVNwYXJjIElJICAoQmxhY2tCaXJkKSJ9LApAQCAtNjUsOCArNjcsNiBAQAogY2hhciAqc3BhcmNfY3B1X3R5cGU7CiBjaGFyICpzcGFyY19mcHVfdHlwZTsKIAotdW5zaWduZWQgaW50IGZzcl9zdG9yYWdlOwotCiBzdGF0aWMgdm9pZCBfX2luaXQgc3VuNHZfY3B1X3Byb2JlKHZvaWQpCiB7CiAJc3dpdGNoIChzdW40dl9jaGlwX3R5cGUpIHsKQEAgLTk0LDggKzk0LDEwIEBACiAJdW5zaWduZWQgbG9uZyB2ZXIsIGZwdV92ZXJzLCBtYW51ZiwgaW1wbCwgZnByczsKIAlpbnQgaTsKIAkKLQlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKLQkJcmV0dXJuIHN1bjR2X2NwdV9wcm9iZSgpOworCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CisJCXN1bjR2X2NwdV9wcm9iZSgpOworCQlyZXR1cm47CisJfQogCiAJZnBycyA9IGZwcnNfcmVhZCgpOwogCWZwcnNfd3JpdGUoRlBSU19GRUYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9kcy5jCmluZGV4IGVlYjVhMmYuLmVkYjc0ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2RzLmMKQEAgLTUyNSwxMCArNTI1LDEwIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGRyX2NwdV9jb25maWd1cmUoc3RydWN0IGRzX2luZm8gKmRwLAotCQkJICAgIHN0cnVjdCBkc19jYXBfc3RhdGUgKmNwLAotCQkJICAgIHU2NCByZXFfbnVtLAotCQkJICAgIGNwdW1hc2tfdCAqbWFzaykKK3N0YXRpYyBpbnQgX19jcHVpbml0IGRyX2NwdV9jb25maWd1cmUoc3RydWN0IGRzX2luZm8gKmRwLAorCQkJCSAgICAgIHN0cnVjdCBkc19jYXBfc3RhdGUgKmNwLAorCQkJCSAgICAgIHU2NCByZXFfbnVtLAorCQkJCSAgICAgIGNwdW1hc2tfdCAqbWFzaykKIHsKIAlzdHJ1Y3QgZHNfZGF0YSAqcmVzcDsKIAlpbnQgcmVzcF9sZW4sIG5jcHVzLCBjcHU7CkBAIC02MjMsOSArNjIzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHJfY3B1X2RhdGEoc3RydWN0IGRzX2luZm8gKmRwLAotCQkJc3RydWN0IGRzX2NhcF9zdGF0ZSAqY3AsCi0JCQl2b2lkICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgZHJfY3B1X2RhdGEoc3RydWN0IGRzX2luZm8gKmRwLAorCQkJCSAgc3RydWN0IGRzX2NhcF9zdGF0ZSAqY3AsCisJCQkJICB2b2lkICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IGRzX2RhdGEgKmRhdGEgPSBidWY7CiAJc3RydWN0IGRyX2NwdV90YWcgKnRhZyA9IChzdHJ1Y3QgZHJfY3B1X3RhZyAqKSAoZGF0YSArIDEpOwpAQCAtOTcyLDggKzk3Miw3IEBACiAJTElTVF9IRUFEKHRvZG8pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRzX2xvY2ssIGZsYWdzKTsKLQlsaXN0X3NwbGljZSgmZHNfd29ya19saXN0LCAmdG9kbyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRzX3dvcmtfbGlzdCk7CisJbGlzdF9zcGxpY2VfaW5pdCgmZHNfd29ya19saXN0LCAmdG9kbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHNfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHFwLCB0bXAsICZ0b2RvLCBsaXN0KSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKaW5kZXggNmJlNGQyZC4uZmI0M2M3NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTM1Myw2MyArMTM1Myw2IEBACiAJYmEscHQJCSV4Y2MsIHJ0cmFwCiAJIG5vcAogCi0jaWYgZGVmaW5lZChDT05GSUdfU1VOT1NfRU1VTCkgfHwgZGVmaW5lZChDT05GSUdfU09MQVJJU19FTVVMKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfU09MQVJJU19FTVVMX01PRFVMRSkKLQkvKiBTdW5PUyB1c2VzIHN5c2NhbGwgemVybyBhcyB0aGUgJ2luZGlyZWN0IHN5c2NhbGwnIGl0IGxvb2tzCi0JICogbGlrZSBpbmRpcl9zeXNjYWxsKHNjYWxsX251bSwgYXJnMCwgYXJnMSwgYXJnMi4uLik7ICBldGMuCi0JICogVGhpcyBpcyBjb21wbGV0ZSBicmFpbiBkYW1hZ2UuCi0JICovCi0JLmdsb2JsCXN1bm9zX2luZGlyCi1zdW5vc19pbmRpcjoKLQlzcmwJCSVvMCwgMCwgJW8wCi0JbW92CQklbzcsICVsNAotCWNtcAkJJW8wLCBOUl9TWVNDQUxMUwotCWJsdSxhLHB0CSVpY2MsIDFmCi0JIHNsbAkJJW8wLCAweDIsICVvMAotCXNldGhpCQklaGkoc3Vub3Nfbm9zeXMpLCAlbDYKLQliLHB0CQkleGNjLCAyZgotCSBvcgkJJWw2LCAlbG8oc3Vub3Nfbm9zeXMpLCAlbDYKLTE6CXNldGhpCQklaGkoc3Vub3Nfc3lzX3RhYmxlKSwgJWw3Ci0Jb3IJCSVsNywgJWxvKHN1bm9zX3N5c190YWJsZSksICVsNwotCWxkdXcJCVslbDcgKyAlbzBdLCAlbDYKLTI6CW1vdgkJJW8xLCAlbzAKLQltb3YJCSVvMiwgJW8xCi0JbW92CQklbzMsICVvMgotCW1vdgkJJW80LCAlbzMKLQltb3YJCSVvNSwgJW80Ci0JY2FsbAkJJWw2Ci0JIG1vdgkJJWw0LCAlbzcKLQotCS5nbG9ibAlzdW5vc19nZXRwaWQKLXN1bm9zX2dldHBpZDoKLQljYWxsCXN5c19nZXRwcGlkCi0JIG5vcAotCWNhbGwJc3lzX2dldHBpZAotCSBzdHgJJW8wLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kxXQotCWIscHQJJXhjYywgcmV0X3N5c19jYWxsCi0JIHN0eAklbzAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTBdCi0KLQkvKiBTdW5PUyBnZXR1aWQoKSByZXR1cm5zIHVpZCBpbiAlbzAgYW5kIGV1aWQgaW4gJW8xICovCi0JLmdsb2JsCXN1bm9zX2dldHVpZAotc3Vub3NfZ2V0dWlkOgotCWNhbGwJc3lzMzJfZ2V0ZXVpZDE2Ci0JIG5vcAotCWNhbGwJc3lzMzJfZ2V0dWlkMTYKLQkgc3R4CSVvMCwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JMV0KLQliLHB0CSV4Y2MsIHJldF9zeXNfY2FsbAotCSBzdHgJJW8wLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kwXQotCi0JLyogU3VuT1MgZ2V0Z2lkKCkgcmV0dXJucyBnaWQgaW4gJW8wIGFuZCBlZ2lkIGluICVvMSAqLwotCS5nbG9ibAlzdW5vc19nZXRnaWQKLXN1bm9zX2dldGdpZDoKLQljYWxsCXN5czMyX2dldGVnaWQxNgotCSBub3AKLQljYWxsCXN5czMyX2dldGdpZDE2Ci0JIHN0eAklbzAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTFdCi0JYixwdAkleGNjLCByZXRfc3lzX2NhbGwKLQkgc3R4CSVvMCwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JMF0KLSNlbmRpZgotCiAJLyogU3VuT1MncyBleGVjdigpIGNhbGwgb25seSBzcGVjaWZpZXMgdGhlIGFyZ3YgYXJndW1lbnQsIHRoZQogCSAqIGVudmlyb25tZW50IHNldHRpbmdzIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FsbGluZyBwcm9jZXNzZXMuCiAJICovCkBAIC0xNTkxLDcgKzE1MzQsNyBAQAogCSBtb3YJCSVpNCwgJW80CiAKIAotCS8qIExpbnV4IDMyLWJpdCBhbmQgU3VuT1Mgc3lzdGVtIGNhbGxzIGVudGVyIGhlcmUuLi4gKi8KKwkvKiBMaW51eCAzMi1iaXQgc3lzdGVtIGNhbGxzIGVudGVyIGhlcmUuLi4gKi8KIAkuYWxpZ24JMzIKIAkuZ2xvYmwJbGludXhfc3BhcmNfc3lzY2FsbDMyCiBsaW51eF9zcGFyY19zeXNjYWxsMzI6CkBAIC0xNjE0LDcgKzE1NTcsNyBAQAogCSBzcmwJCSVpMywgMCwgJW8zCQkJCSEgSUVVMAogCWJhLGEscHQJCSV4Y2MsIDNmCiAKLQkvKiBMaW51eCBuYXRpdmUgYW5kIFN1bk9TIHN5c3RlbSBjYWxscyBlbnRlciBoZXJlLi4uICovCisJLyogTGludXggbmF0aXZlIHN5c3RlbSBjYWxscyBlbnRlciBoZXJlLi4uICovCiAJLmFsaWduCTMyCiAJLmdsb2JsCWxpbnV4X3NwYXJjX3N5c2NhbGwsIHJldF9zeXNfY2FsbAogbGludXhfc3BhcmNfc3lzY2FsbDoKQEAgLTE3MDUsNiArMTY0OCwzNiBAQAogMjoJcmV0bAogCSBub3AKIAorCS8qIEZsdXNoICVmcCBhbmQgJWk3IHRvIHRoZSBzdGFjayBmb3IgYWxsIHJlZ2lzdGVyCisJICogd2luZG93cyBhY3RpdmUgaW5zaWRlIG9mIHRoZSBjcHUuICBUaGlzIGFsbG93cworCSAqIHNob3dfc3RhY2tfdHJhY2UoKSB0byBhdm9pZCB1c2luZyBhbiBleHBlbnNpdmUKKwkgKiAnZmx1c2h3Jy4KKwkgKi8KKwkuZ2xvYmwJCXN0YWNrX3RyYWNlX2ZsdXNoCisJLnR5cGUJCXN0YWNrX3RyYWNlX2ZsdXNoLCNmdW5jdGlvbgorc3RhY2tfdHJhY2VfZmx1c2g6CisJcmRwcgkJJXBzdGF0ZSwgJW8wCisJd3JwcgkJJW8wLCBQU1RBVEVfSUUsICVwc3RhdGUKKworCXJkcHIJCSVjd3AsICVnMQorCXJkcHIJCSVjYW5yZXN0b3JlLCAlZzIKKwlzdWIJCSVnMSwgMSwgJWczCisKKzE6CWJyeixwbgkJJWcyLCAyZgorCSBzdWIJCSVnMiwgMSwgJWcyCisJd3JwcgkJJWczLCAlY3dwCisJc3R4CQklZnAsIFslc3AgKyBTVEFDS19CSUFTICsgUldfVjlfSTZdCisJc3R4CQklaTcsIFslc3AgKyBTVEFDS19CSUFTICsgUldfVjlfSTddCisJYmEscHQJCSV4Y2MsIDFiCisJIHN1YgkJJWczLCAxLCAlZzMKKworMjoJd3JwcgkJJWcxLCAlY3dwCisJd3JwcgkJJW8wLCAlcHN0YXRlCisKKwlyZXRsCisJIG5vcAorCS5zaXplCQlzdGFja190cmFjZV9mbHVzaCwuLXN0YWNrX3RyYWNlX2ZsdXNoCisKICNpZmRlZiBDT05GSUdfU01QCiAJLmdsb2JsCQloYXJkX3NtcF9wcm9jZXNzb3JfaWQKIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZDoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuaCBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTkxZTljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5oCkBAIC0wLDAgKzEsMTk2IEBACisjaWZuZGVmIF9FTlRSWV9ICisjZGVmaW5lIF9FTlRSWV9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworZXh0ZXJuIGNoYXIgKnNwYXJjX2NwdV90eXBlOworZXh0ZXJuIGNoYXIgKnNwYXJjX2ZwdV90eXBlOworCitleHRlcm4gdm9pZCBfX2luaXQgcGVyX2NwdV9wYXRjaCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBzdW40dl9wYXRjaCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBib290X2NwdV9pZF90b29fbGFyZ2UoaW50IGNwdSk7CitleHRlcm4gdW5zaWduZWQgaW50IGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOworZXh0ZXJuIHVuc2lnbmVkIGludCBpY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZDsKKworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB1cGRhdGVfcGVyZmN0cnModm9pZCk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHNwYXJjX2JyZWFrcG9pbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJuIHZvaWQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmlnX2kwLAorCQkJICAgICBpbnQgcmVzdGFydF9zeXNjYWxsLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKKworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSAgICAgaW50IHN5c2NhbGxfZXhpdF9wKTsKKworZXh0ZXJuIHZvaWQgYmFkX3RyYXBfdGwxKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGx2bCk7CisKK2V4dGVybiB2b2lkIGRvX2ZwZV9jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fZnBpZWVlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGRvX2Zwb3RoZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fdG9mKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGRvX2RpdjAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9faWxsZWdhbF9pbnN0cnVjdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBtZW1fYWRkcmVzc191bmFsaWduZWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICB1bnNpZ25lZCBsb25nIHNmYXIsCisJCQkJICB1bnNpZ25lZCBsb25nIHNmc3IpOworZXh0ZXJuIHZvaWQgc3VuNHZfZG9fbW5hKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSB1bnNpZ25lZCBsb25nIHR5cGVfY3R4KTsKK2V4dGVybiB2b2lkIGRvX3ByaXZvcChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19wcml2YWN0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGRvX2NlZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19jZWVfdGwxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGRvX2RhZV90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9faWFlX3RsMShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19kaXYwX3RsMShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19mcGRpc190bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fZnBpZWVlX3RsMShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19mcG90aGVyX3RsMShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19pbGxfdGwxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGRvX2lycV90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fbGRkZm1uYV90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fc3RkZm1uYV90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fcGF3KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGRvX3Bhd190bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fdmF3KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGRvX3Zhd190bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fdG9mX3RsMShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBkb19nZXRwc3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitleHRlcm4gdm9pZCBzcGl0ZmlyZV9pbnNuX2FjY2Vzc19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2ZzciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBzZmFyKTsKK2V4dGVybiB2b2lkIHNwaXRmaXJlX2luc25fYWNjZXNzX2V4Y2VwdGlvbl90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNmc3IsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNmYXIpOworZXh0ZXJuIHZvaWQgc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHNmc3IsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2Zhcik7CitleHRlcm4gdm9pZCBzcGl0ZmlyZV9kYXRhX2FjY2Vzc19leGNlcHRpb25fdGwxKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzZnNyLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzZmFyKTsKK2V4dGVybiB2b2lkIHNwaXRmaXJlX2FjY2Vzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhdHVzX2VuY29kZWQsCisJCQkJICB1bnNpZ25lZCBsb25nIGFmYXIpOworCitleHRlcm4gdm9pZCBjaGVldGFoX2ZlY2NfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgdW5zaWduZWQgbG9uZyBhZnNyLAorCQkJCSB1bnNpZ25lZCBsb25nIGFmYXIpOworZXh0ZXJuIHZvaWQgY2hlZXRhaF9jZWVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQl1bnNpZ25lZCBsb25nIGFmc3IsCisJCQkJdW5zaWduZWQgbG9uZyBhZmFyKTsKK2V4dGVybiB2b2lkIGNoZWV0YWhfZGVmZXJyZWRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWZzciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWZhcik7CitleHRlcm4gdm9pZCBjaGVldGFoX3BsdXNfcGFyaXR5X2Vycm9yKGludCB0eXBlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2V4dGVybiB2b2lkIHN1bjR2X2luc25fYWNjZXNzX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nIHR5cGVfY3R4KTsKK2V4dGVybiB2b2lkIHN1bjR2X2luc25fYWNjZXNzX2V4Y2VwdGlvbl90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHR5cGVfY3R4KTsKK2V4dGVybiB2b2lkIHN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nIHR5cGVfY3R4KTsKK2V4dGVybiB2b2lkIHN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbl90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHR5cGVfY3R4KTsKK2V4dGVybiB2b2lkIHN1bjR2X3Jlc3VtX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworZXh0ZXJuIHZvaWQgc3VuNHZfcmVzdW1fb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgc3VuNHZfbm9ucmVzdW1fZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKK2V4dGVybiB2b2lkIHN1bjR2X25vbnJlc3VtX292ZXJmbG93KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfZXJyX2l0bGJfdmFkZHI7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9lcnJfaXRsYl9jdHg7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9lcnJfaXRsYl9wdGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9lcnJfaXRsYl9lcnJvcjsKKworZXh0ZXJuIHZvaWQgc3VuNHZfaXRsYl9lcnJvcl9yZXBvcnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0bCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2Vycl9kdGxiX3ZhZGRyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfZXJyX2R0bGJfY3R4OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfZXJyX2R0bGJfcHRlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfZXJyX2R0bGJfZXJyb3I7CisKK2V4dGVybiB2b2lkIHN1bjR2X2R0bGJfZXJyb3JfcmVwb3J0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdGwpOworZXh0ZXJuIHZvaWQgaHlwZXJ2aXNvcl90bGJvcF9lcnJvcih1bnNpZ25lZCBsb25nIGVyciwKKwkJCQkgICB1bnNpZ25lZCBsb25nIG9wKTsKK2V4dGVybiB2b2lkIGh5cGVydmlzb3JfdGxib3BfZXJyb3JfeGNhbGwodW5zaWduZWQgbG9uZyBlcnIsCisJCQkJCSB1bnNpZ25lZCBsb25nIG9wKTsKKworLyogV0FSTklORzogVGhlIGVycm9yIHRyYXAgaGFuZGxlcnMgaW4gYXNzZW1ibHkga25vdyB0aGUgcHJlY2lzZQorICoJICAgIGxheW91dCBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZS4KKyAqCisgKiBDLWxldmVsIGhhbmRsZXJzIGluIHRyYXBzLmMgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gbG9nIHRoZQorICogZXJyb3IgYW5kIHRoZW4gZGV0ZXJtaW5lIGhvdyB0byByZWNvdmVyIChpZiBwb3NzaWJsZSkuCisgKi8KK3N0cnVjdCBjaGVldGFoX2Vycl9pbmZvIHsKKy8qMHgwMCovdTY0IGFmc3I7CisvKjB4MDgqL3U2NCBhZmFyOworCisJLyogRC1jYWNoZSBzdGF0ZSAqLworLyoweDEwKi91NjQgZGNhY2hlX2RhdGFbNF07CS8qIFRoZSBhY3R1YWwgZGF0YQkqLworLyoweDMwKi91NjQgZGNhY2hlX2luZGV4OwkvKiBELWNhY2hlIGluZGV4CSovCisvKjB4MzgqL3U2NCBkY2FjaGVfdGFnOwkJLyogRC1jYWNoZSB0YWcvdmFsaWQJKi8KKy8qMHg0MCovdTY0IGRjYWNoZV91dGFnOwkvKiBELWNhY2hlIG1pY3JvdGFnCSovCisvKjB4NDgqL3U2NCBkY2FjaGVfc3RhZzsJLyogRC1jYWNoZSBzbm9vcHRhZwkqLworCisJLyogSS1jYWNoZSBzdGF0ZSAqLworLyoweDUwKi91NjQgaWNhY2hlX2RhdGFbOF07CS8qIFRoZSBhY3R1YWwgaW5zbnMgKyBwcmVkZWNvZGUJKi8KKy8qMHg5MCovdTY0IGljYWNoZV9pbmRleDsJLyogSS1jYWNoZSBpbmRleAkqLworLyoweDk4Ki91NjQgaWNhY2hlX3RhZzsJCS8qIEktY2FjaGUgcGh5cyB0YWcJKi8KKy8qMHhhMCovdTY0IGljYWNoZV91dGFnOwkvKiBJLWNhY2hlIG1pY3JvdGFnCSovCisvKjB4YTgqL3U2NCBpY2FjaGVfc3RhZzsJLyogSS1jYWNoZSBzbm9vcHRhZwkqLworLyoweGIwKi91NjQgaWNhY2hlX3VwcGVyOwkvKiBJLWNhY2hlIHVwcGVyLXRhZwkqLworLyoweGI4Ki91NjQgaWNhY2hlX2xvd2VyOwkvKiBJLWNhY2hlIGxvd2VyLXRhZwkqLworCisJLyogRS1jYWNoZSBzdGF0ZSAqLworLyoweGMwKi91NjQgZWNhY2hlX2RhdGFbNF07CS8qIDMyIGJ5dGVzIGZyb20gc3RhZ2luZyByZWdpc3RlcnMgKi8KKy8qMHhlMCovdTY0IGVjYWNoZV9pbmRleDsJLyogRS1jYWNoZSBpbmRleAkqLworLyoweGU4Ki91NjQgZWNhY2hlX3RhZzsJCS8qIEUtY2FjaGUgdGFnL3N0YXRlCSovCisKKy8qMHhmMCovdTY0IF9fcGFkWzMyIC0gMzBdOworfTsKKyNkZWZpbmUgQ0hBRlNSX0lOVkFMSUQJCSgodTY0KS0xTCkKKworLyogVGhpcyBpcyBhbGxvY2F0ZWQgYXQgYm9vdCB0aW1lIGJhc2VkIHVwb24gdGhlIGxhcmdlc3QgaGFyZHdhcmUKKyAqIGNwdSBJRCBpbiB0aGUgc3lzdGVtLiAgV2UgYWxsb2NhdGUgdHdvIGVudHJpZXMgcGVyIGNwdSwgb25lIGZvcgorICogVEw9PTAgbG9nZ2luZyBhbmQgb25lIGZvciBUTCA+PSAxIGxvZ2dpbmcuCisgKi8KK2V4dGVybiBzdHJ1Y3QgY2hlZXRhaF9lcnJfaW5mbyAqY2hlZXRhaF9lcnJvcl9sb2c7CisKKy8qIFVQQSBub2RlcyBzZW5kIGludGVycnVwdCBwYWNrZXQgdG8gVWx0cmFTcGFyYyB3aXRoIGZpcnN0IGRhdGEgcmVnCisgKiB2YWx1ZSBsb3cgNSAoNyBvbiBTdGFyZmlyZSkgYml0cyBob2xkaW5nIHRoZSBJUlEgaWRlbnRpZmllciBiZWluZworICogZGVsaXZlcmVkLiAgV2UgbXVzdCB0cmFuc2xhdGUgdGhpcyBpbnRvIGEgbm9uLXZlY3RvciBJUlEgc28gd2UgY2FuCisgKiBzZXQgdGhlIHNvZnRpbnQgb24gdGhpcyBjcHUuCisgKgorICogVG8gbWFrZSBwcm9jZXNzaW5nIHRoZXNlIHBhY2tldHMgZWZmaWNpZW50IGFuZCByYWNlIGZyZWUgd2UgdXNlCisgKiBhbiBhcnJheSBvZiBpcnEgYnVja2V0cyBiZWxvdy4gIFRoZSBpbnRlcnJ1cHQgdmVjdG9yIGhhbmRsZXIgaW4KKyAqIGVudHJ5LlMgZmVlZHMgaW5jb21pbmcgcGFja2V0cyBpbnRvIHBlci1jcHUgcGlsLWluZGV4ZWQgbGlzdHMuCisgKgorICogSWYgeW91IG1ha2UgY2hhbmdlcyB0byBpbm9fYnVja2V0LCBwbGVhc2UgdXBkYXRlIGhhbmQgY29kZWQgYXNzZW1ibGVyCisgKiBvZiB0aGUgdmVjdG9yZWQgaW50ZXJydXB0IHRyYXAgaGFuZGxlcihzKSBpbiBlbnRyeS5TIGFuZCBzdW40dl9pdmVjLlMKKyAqLworc3RydWN0IGlub19idWNrZXQgeworLyoweDAwKi91bnNpZ25lZCBsb25nIF9faXJxX2NoYWluX3BhOworCisJLyogVmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVyIGFzc2lnbmVkIHRvIHRoaXMgSU5PLiAgKi8KKy8qMHgwOCovdW5zaWduZWQgaW50IF9fdmlydF9pcnE7CisvKjB4MGMqL3Vuc2lnbmVkIGludCBfX3BhZDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaW5vX2J1Y2tldCAqaXZlY3Rvcl90YWJsZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGl2ZWN0b3JfdGFibGVfcGE7CisKK2V4dGVybiB2b2lkIGhhbmRsZXJfaXJxKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGluaXRfaXJxd29ya19jdXJjcHUodm9pZCk7CitleHRlcm4gdm9pZCBfX2NwdWluaXQgc3VuNHZfcmVnaXN0ZXJfbW9uZG9fcXVldWVzKGludCB0aGlzX2NwdSk7CisKKyNlbmRpZiAvKiBfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUwppbmRleCA0NGIxMDVjLi4zNGY4ZmY1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUwpAQCAtMjg4LDggKzI4OCwxMiBAQAogCS8qIExlYXZlIGFyZzIgYXMtaXMsIHByb21fbW11X2loYW5kbGVfY2FjaGUgKi8KIAltb3YJLTEsICVsMwogCXN0eAklbDMsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyOF0JISBhcmczOiBtb2RlICgtMSBkZWZhdWx0KQotCXNldGhpCSVoaSg4ICogMTAyNCAqIDEwMjQpLCAlbDMKLQlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzBdCSEgYXJnNDogc2l6ZSAoOE1CKQorCS8qIDRNQiBhbGlnbiB0aGUga2VybmVsIGltYWdlIHNpemUuICovCisJc2V0CShfZW5kIC0gS0VSTkJBU0UpLCAlbDMKKwlzZXQJKCg0ICogMTAyNCAqIDEwMjQpIC0gMSksICVsNAorCWFkZAklbDMsICVsNCwgJWwzCisJYW5kbgklbDMsICVsNCwgJWwzCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDMwXQkhIGFyZzQ6IHJvdW5kdXAoa3NpemUsIDRNQikKIAlzZXRoaQklaGkoS0VSTkJBU0UpLCAlbDMKIAlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzhdCSEgYXJnNTogdmFkZHIgKEtFUk5CQVNFKQogCXN0eAklZzAsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHg0MF0JISBhcmc2OiBlbXB0eQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9odnRyYW1wLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2h2dHJhbXAuUwppbmRleCBiNjkyZTA0Li4wMjM2YzQzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2h2dHJhbXAuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2h2dHJhbXAuUwpAQCAtMyw2ICszLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NjcmF0Y2hwYWQuaD4KQEAgLTEzLDcgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KIAotCS50ZXh0CisJX19DUFVJTklUCiAJLmFsaWduCQk4CiAJLmdsb2JsCQlodl9jcHVfc3RhcnR1cCwgaHZfY3B1X3N0YXJ0dXBfZW5kCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXUuYwppbmRleCBkMzI3NmViYy4uNzU2ZmEyNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXUuYwpAQCAtMTM0LDcgKzEzNCw4IEBACiAJZWxzZQogCQlib3VuZGFyeV9zaXplID0gQUxJR04oMVVMIDw8IDMyLCAxIDw8IElPX1BBR0VfU0hJRlQpOwogCi0JbiA9IGlvbW11X2FyZWFfYWxsb2MoYXJlbmEtPm1hcCwgbGltaXQsIHN0YXJ0LCBucGFnZXMsIDAsCisJbiA9IGlvbW11X2FyZWFfYWxsb2MoYXJlbmEtPm1hcCwgbGltaXQsIHN0YXJ0LCBucGFnZXMsCisJCQkgICAgIGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlID4+IElPX1BBR0VfU0hJRlQsCiAJCQkgICAgIGJvdW5kYXJ5X3NpemUgPj4gSU9fUEFHRV9TSElGVCwgMCk7CiAJaWYgKG4gPT0gLTEpIHsKIAkJaWYgKGxpa2VseShwYXNzIDwgMSkpIHsKQEAgLTIwMCwxMiArMjAxLDExIEBACiAJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGR1bW15IHBhZ2Ugd2hpY2ggd2UKIAkgKiBzZXQgaW5hY3RpdmUgSU8gUFRFcyB0byBwb2ludCB0by4KIAkgKi8KLQlpb21tdS0+ZHVtbXlfcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJaW9tbXUtPmR1bW15X3BhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFpb21tdS0+ZHVtbXlfcGFnZSkgewogCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBFcnJvciwgZ2ZwKGR1bW15X3BhZ2UpIGZhaWxlZC5cbiIpOwogCQlnb3RvIG91dF9mcmVlX21hcDsKIAl9Ci0JbWVtc2V0KCh2b2lkICopaW9tbXUtPmR1bW15X3BhZ2UsIDAsIFBBR0VfU0laRSk7CiAJaW9tbXUtPmR1bW15X3BhZ2VfcGEgPSAodW5zaWduZWQgbG9uZykgX19wYShpb21tdS0+ZHVtbXlfcGFnZSk7CiAKIAkvKiBOb3cgYWxsb2NhdGUgYW5kIHNldHVwIHRoZSBJT01NVSBwYWdlIHRhYmxlIGl0c2VsZi4gICovCkBAIC01MTYsOSArNTE2LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGFuZGxlLCBwcm90LCBjdHg7CiAJZG1hX2FkZHJfdCBkbWFfbmV4dCA9IDAsIGRtYV9hZGRyOwogCXVuc2lnbmVkIGludCBtYXhfc2VnX3NpemU7CisJdW5zaWduZWQgbG9uZyBzZWdfYm91bmRhcnlfc2l6ZTsKIAlpbnQgb3V0Y291bnQsIGluY291bnQsIGk7CiAJc3RydWN0IHN0cmJ1ZiAqc3RyYnVmOwogCXN0cnVjdCBpb21tdSAqaW9tbXU7CisJdW5zaWduZWQgbG9uZyBiYXNlX3NoaWZ0OwogCiAJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKQEAgLTU0OSw4ICs1NTEsMTEgQEAKIAlvdXRzLT5kbWFfbGVuZ3RoID0gMDsKIAogCW1heF9zZWdfc2l6ZSA9IGRtYV9nZXRfbWF4X3NlZ19zaXplKGRldik7CisJc2VnX2JvdW5kYXJ5X3NpemUgPSBBTElHTihkbWFfZ2V0X3NlZ19ib3VuZGFyeShkZXYpICsgMSwKKwkJCQkgIElPX1BBR0VfU0laRSkgPj4gSU9fUEFHRV9TSElGVDsKKwliYXNlX3NoaWZ0ID0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UgPj4gSU9fUEFHRV9TSElGVDsKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHMsIG5lbGVtcywgaSkgewotCQl1bnNpZ25lZCBsb25nIHBhZGRyLCBucGFnZXMsIGVudHJ5LCBzbGVuOworCQl1bnNpZ25lZCBsb25nIHBhZGRyLCBucGFnZXMsIGVudHJ5LCBvdXRfZW50cnkgPSAwLCBzbGVuOwogCQlpb3B0ZV90ICpiYXNlOwogCiAJCXNsZW4gPSBzLT5sZW5ndGg7CkBAIC01OTMsNyArNTk4LDkgQEAKIAkJCSAqIC0gYWxsb2NhdGVkIGRtYV9hZGRyIGlzbid0IGNvbnRpZ3VvdXMgdG8gcHJldmlvdXMgYWxsb2NhdGlvbgogCQkJICovCiAJCQlpZiAoKGRtYV9hZGRyICE9IGRtYV9uZXh0KSB8fAotCQkJICAgIChvdXRzLT5kbWFfbGVuZ3RoICsgcy0+bGVuZ3RoID4gbWF4X3NlZ19zaXplKSkgeworCQkJICAgIChvdXRzLT5kbWFfbGVuZ3RoICsgcy0+bGVuZ3RoID4gbWF4X3NlZ19zaXplKSB8fAorCQkJICAgIChpc19zcGFuX2JvdW5kYXJ5KG91dF9lbnRyeSwgYmFzZV9zaGlmdCwKKwkJCQkJICAgICAgc2VnX2JvdW5kYXJ5X3NpemUsIG91dHMsIHMpKSkgewogCQkJCS8qIENhbid0IG1lcmdlOiBjcmVhdGUgYSBuZXcgc2VnbWVudCAqLwogCQkJCXNlZ3N0YXJ0ID0gczsKIAkJCQlvdXRjb3VudCsrOwpAQCAtNjA3LDYgKzYxNCw3IEBACiAJCQkvKiBUaGlzIGlzIGEgbmV3IHNlZ21lbnQsIGZpbGwgZW50cmllcyAqLwogCQkJb3V0cy0+ZG1hX2FkZHJlc3MgPSBkbWFfYWRkcjsKIAkJCW91dHMtPmRtYV9sZW5ndGggPSBzbGVuOworCQkJb3V0X2VudHJ5ID0gZW50cnk7CiAJCX0KIAogCQkvKiBDYWxjdWxhdGUgbmV4dCBwYWdlIHBvaW50ZXIgZm9yIGNvbnRpZ3VvdXMgY2hlY2sgKi8KQEAgLTYyNiw3ICs2MzQsNyBAQAogaW9tbXVfbWFwX2ZhaWxlZDoKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHMsIG5lbGVtcywgaSkgewogCQlpZiAocy0+ZG1hX2xlbmd0aCAhPSAwKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHZhZGRyLCBucGFnZXMsIGVudHJ5LCBpOworCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgbnBhZ2VzLCBlbnRyeSwgajsKIAkJCWlvcHRlX3QgKmJhc2U7CiAKIAkJCXZhZGRyID0gcy0+ZG1hX2FkZHJlc3MgJiBJT19QQUdFX01BU0s7CkBAIC02MzcsOCArNjQ1LDggQEAKIAkJCQk+PiBJT19QQUdFX1NISUZUOwogCQkJYmFzZSA9IGlvbW11LT5wYWdlX3RhYmxlICsgZW50cnk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykKLQkJCQlpb3B0ZV9tYWtlX2R1bW15KGlvbW11LCBiYXNlICsgaSk7CisJCQlmb3IgKGogPSAwOyBqIDwgbnBhZ2VzOyBqKyspCisJCQkJaW9wdGVfbWFrZV9kdW1teShpb21tdSwgYmFzZSArIGopOwogCiAJCQlzLT5kbWFfYWRkcmVzcyA9IERNQV9FUlJPUl9DT0RFOwogCQkJcy0+ZG1hX2xlbmd0aCA9IDA7CkBAIC04MDMsNyArODExLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogfQogCi1jb25zdCBzdHJ1Y3QgZG1hX29wcyBzdW40dV9kbWFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfb3BzIHN1bjR1X2RtYV9vcHMgPSB7CiAJLmFsbG9jX2NvaGVyZW50CQk9IGRtYV80dV9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudAkJPSBkbWFfNHVfZnJlZV9jb2hlcmVudCwKIAkubWFwX3NpbmdsZQkJPSBkbWFfNHVfbWFwX3NpbmdsZSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXVfY29tbW9uLmggYi9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11X2NvbW1vbi5oCmluZGV4IDA3MTNiZDUuLmYzNTc1YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXVfY29tbW9uLmgKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdV9jb21tb24uaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb21tdS1oZWxwZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgpAQCAtNDUsMTcgKzQ2LDE2IEBACiAJcmV0dXJuIG5wYWdlczsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNhbGNfbnBhZ2VzKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zKQorc3RhdGljIGlubGluZSBpbnQgaXNfc3Bhbl9ib3VuZGFyeSh1bnNpZ25lZCBsb25nIGVudHJ5LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2hpZnQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplLAorCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqb3V0cywKKwkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQogewotCXVuc2lnbmVkIGxvbmcgaSwgbnBhZ2VzID0gMDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBTR19FTlRfUEhZU19BRERSRVNTKG91dHMpOworCWludCBuciA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgb3V0cy0+ZG1hX2xlbmd0aCArIHNnLT5sZW5ndGgpOwogCi0JZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgbmVsZW1zLCBpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBTR19FTlRfUEhZU19BRERSRVNTKHNnKTsKLQkJbnBhZ2VzICs9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2ctPmxlbmd0aCk7Ci0JfQotCi0JcmV0dXJuIG5wYWdlczsKKwlyZXR1cm4gaW9tbXVfaXNfc3Bhbl9ib3VuZGFyeShlbnRyeSwgbnIsIHNoaWZ0LCBib3VuZGFyeV9zaXplKTsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9tbXVfcmFuZ2VfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKaW5kZXggNWVjMDZjOC4uZWI4OGJkNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCkBAIC00NCwyNyArNDQsMTAgQEAKICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLS8qIFVQQSBub2RlcyBzZW5kIGludGVycnVwdCBwYWNrZXQgdG8gVWx0cmFTcGFyYyB3aXRoIGZpcnN0IGRhdGEgcmVnCi0gKiB2YWx1ZSBsb3cgNSAoNyBvbiBTdGFyZmlyZSkgYml0cyBob2xkaW5nIHRoZSBJUlEgaWRlbnRpZmllciBiZWluZwotICogZGVsaXZlcmVkLiAgV2UgbXVzdCB0cmFuc2xhdGUgdGhpcyBpbnRvIGEgbm9uLXZlY3RvciBJUlEgc28gd2UgY2FuCi0gKiBzZXQgdGhlIHNvZnRpbnQgb24gdGhpcyBjcHUuCi0gKgotICogVG8gbWFrZSBwcm9jZXNzaW5nIHRoZXNlIHBhY2tldHMgZWZmaWNpZW50IGFuZCByYWNlIGZyZWUgd2UgdXNlCi0gKiBhbiBhcnJheSBvZiBpcnEgYnVja2V0cyBiZWxvdy4gIFRoZSBpbnRlcnJ1cHQgdmVjdG9yIGhhbmRsZXIgaW4KLSAqIGVudHJ5LlMgZmVlZHMgaW5jb21pbmcgcGFja2V0cyBpbnRvIHBlci1jcHUgcGlsLWluZGV4ZWQgbGlzdHMuCi0gKgotICogSWYgeW91IG1ha2UgY2hhbmdlcyB0byBpbm9fYnVja2V0LCBwbGVhc2UgdXBkYXRlIGhhbmQgY29kZWQgYXNzZW1ibGVyCi0gKiBvZiB0aGUgdmVjdG9yZWQgaW50ZXJydXB0IHRyYXAgaGFuZGxlcihzKSBpbiBlbnRyeS5TIGFuZCBzdW40dl9pdmVjLlMKLSAqLwotc3RydWN0IGlub19idWNrZXQgewotLyoweDAwKi91bnNpZ25lZCBsb25nIF9faXJxX2NoYWluX3BhOwotCi0JLyogVmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVyIGFzc2lnbmVkIHRvIHRoaXMgSU5PLiAgKi8KLS8qMHgwOCovdW5zaWduZWQgaW50IF9fdmlydF9pcnE7Ci0vKjB4MGMqL3Vuc2lnbmVkIGludCBfX3BhZDsKLX07CisjaW5jbHVkZSAiZW50cnkuaCIKIAogI2RlZmluZSBOVU1fSVZFQ1MJKElNQVBfSU5SICsgMSkKKwogc3RydWN0IGlub19idWNrZXQgKml2ZWN0b3JfdGFibGU7CiB1bnNpZ25lZCBsb25nIGl2ZWN0b3JfdGFibGVfcGE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMzRmYzNkZC4uZjQzYjVkNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ2NSw4ICs0NjUsNiBAQAogCiBleHRlcm4gdm9pZCBqcHJvYmVfcmV0dXJuX3RyYXBfaW5zdHJ1Y3Rpb24odm9pZCk7CiAKLWV4dGVybiB2b2lkIF9fc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7Ci0KIGludCBfX2twcm9iZXMgbG9uZ2ptcF9icmVha19oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXUzMiAqYWRkciA9ICh1MzIgKikgcmVncy0+dHBjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tZGVzYy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9tZGVzYy5jCmluZGV4IDg1NjY1OWIuLjkxMDA4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvbWRlc2MuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL21kZXNjLmMKQEAgLTc1OCw3ICs3NTgsNyBAQAogCWdldF9vbmVfbW9uZG9fYml0cyh2YWwsICZ0Yi0+bm9ucmVzdW1fcW1hc2ssIDIpOwogfQogCi12b2lkIF9fZGV2aW5pdCBtZGVzY19maWxsX2luX2NwdV9kYXRhKGNwdW1hc2tfdCBtYXNrKQordm9pZCBfX2NwdWluaXQgbWRlc2NfZmlsbF9pbl9jcHVfZGF0YShjcHVtYXNrX3QgbWFzaykKIHsKIAlzdHJ1Y3QgbWRlc2NfaGFuZGxlICpocCA9IG1kZXNjX2dyYWIoKTsKIAl1NjQgbXA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYwppbmRleCBhNjFjMzhmLi41NDUzNTZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKQEAgLTIyNSwyMCArMjI1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcGNpX2lzX2NvbnRyb2xsZXIoY29uc3QgY2hhciAqbW9kZWxfbmFtZSwgaW50IG5hbWVsZW4sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9DT05UUk9MTEVSX1RZUEVTOyBpKyspIHsKLQkJaWYgKCFzdHJuY21wKG1vZGVsX25hbWUsCi0JCQkgICAgIHBjaV9jb250cm9sbGVyX3RhYmxlW2ldLm1vZGVsX25hbWUsCi0JCQkgICAgIG5hbWVsZW4pKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2luaXQgcGNpX2NvbnRyb2xsZXJfc2NhbihpbnQgKCpoYW5kbGVyKShjb25zdCBjaGFyICosIGludCwgc3RydWN0IGRldmljZV9ub2RlICopKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CkBAIC0yNzMsMTMgKzI1OSw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0KLS8qIElzIHRoZXJlIHNvbWUgUENJIGNvbnRyb2xsZXIgaW4gdGhlIHN5c3RlbT8gICovCi1pbnQgX19pbml0IHBjaWNfcHJlc2VudCh2b2lkKQotewotCXJldHVybiBwY2lfY29udHJvbGxlcl9zY2FuKHBjaV9pc19jb250cm9sbGVyKTsKLX0KLQogLyogRmluZCBlYWNoIGNvbnRyb2xsZXIgaW4gdGhlIHN5c3RlbSwgYXR0YWNoIGFuZCBpbml0aWFsaXplCiAgKiBzb2Z0d2FyZSBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggYW5kIGxpbmsgaW50byB0aGUKICAqIHBjaV9wYm1fcm9vdC4gIFNldHVwIHRoZSBjb250cm9sbGVyIGVub3VnaCBzdWNoCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwppbmRleCBkZGNhNmM2Li4wMTgzOTcwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKQEAgLTMzNSw4ICszMzUsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBoYW5kbGUsIHByb3Q7CiAJZG1hX2FkZHJfdCBkbWFfbmV4dCA9IDAsIGRtYV9hZGRyOwogCXVuc2lnbmVkIGludCBtYXhfc2VnX3NpemU7CisJdW5zaWduZWQgbG9uZyBzZWdfYm91bmRhcnlfc2l6ZTsKIAlpbnQgb3V0Y291bnQsIGluY291bnQsIGk7CiAJc3RydWN0IGlvbW11ICppb21tdTsKKwl1bnNpZ25lZCBsb25nIGJhc2Vfc2hpZnQ7CiAJbG9uZyBlcnI7CiAKIAlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKQEAgLTM2Miw4ICszNjQsMTEgQEAKIAlpb21tdV9iYXRjaF9zdGFydChkZXYsIHByb3QsIH4wVUwpOwogCiAJbWF4X3NlZ19zaXplID0gZG1hX2dldF9tYXhfc2VnX3NpemUoZGV2KTsKKwlzZWdfYm91bmRhcnlfc2l6ZSA9IEFMSUdOKGRtYV9nZXRfc2VnX2JvdW5kYXJ5KGRldikgKyAxLAorCQkJCSAgSU9fUEFHRV9TSVpFKSA+PiBJT19QQUdFX1NISUZUOworCWJhc2Vfc2hpZnQgPSBpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSA+PiBJT19QQUdFX1NISUZUOwogCWZvcl9lYWNoX3NnKHNnbGlzdCwgcywgbmVsZW1zLCBpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGFkZHIsIG5wYWdlcywgZW50cnksIHNsZW47CisJCXVuc2lnbmVkIGxvbmcgcGFkZHIsIG5wYWdlcywgZW50cnksIG91dF9lbnRyeSA9IDAsIHNsZW47CiAKIAkJc2xlbiA9IHMtPmxlbmd0aDsKIAkJLyogU2FuaXR5IGNoZWNrICovCkBAIC00MDYsNyArNDExLDkgQEAKIAkJCSAqIC0gYWxsb2NhdGVkIGRtYV9hZGRyIGlzbid0IGNvbnRpZ3VvdXMgdG8gcHJldmlvdXMgYWxsb2NhdGlvbgogCQkJICovCiAJCQlpZiAoKGRtYV9hZGRyICE9IGRtYV9uZXh0KSB8fAotCQkJICAgIChvdXRzLT5kbWFfbGVuZ3RoICsgcy0+bGVuZ3RoID4gbWF4X3NlZ19zaXplKSkgeworCQkJICAgIChvdXRzLT5kbWFfbGVuZ3RoICsgcy0+bGVuZ3RoID4gbWF4X3NlZ19zaXplKSB8fAorCQkJICAgIChpc19zcGFuX2JvdW5kYXJ5KG91dF9lbnRyeSwgYmFzZV9zaGlmdCwKKwkJCQkJICAgICAgc2VnX2JvdW5kYXJ5X3NpemUsIG91dHMsIHMpKSkgewogCQkJCS8qIENhbid0IG1lcmdlOiBjcmVhdGUgYSBuZXcgc2VnbWVudCAqLwogCQkJCXNlZ3N0YXJ0ID0gczsKIAkJCQlvdXRjb3VudCsrOwpAQCAtNDIwLDYgKzQyNyw3IEBACiAJCQkvKiBUaGlzIGlzIGEgbmV3IHNlZ21lbnQsIGZpbGwgZW50cmllcyAqLwogCQkJb3V0cy0+ZG1hX2FkZHJlc3MgPSBkbWFfYWRkcjsKIAkJCW91dHMtPmRtYV9sZW5ndGggPSBzbGVuOworCQkJb3V0X2VudHJ5ID0gZW50cnk7CiAJCX0KIAogCQkvKiBDYWxjdWxhdGUgbmV4dCBwYWdlIHBvaW50ZXIgZm9yIGNvbnRpZ3VvdXMgY2hlY2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYwppbmRleCA4NTBjZGZmLi5lYWU4Y2EyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zc3RhdGUuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAKICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KIApAQCAtMzksOCArNDAsNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotZXh0ZXJuIHZvaWQgbWFjaGluZV9oYWx0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbWFjaGluZV9hbHRfcG93ZXJfb2ZmKHZvaWQpOwogc3RhdGljIHZvaWQgKCpwb3dlcm9mZl9tZXRob2QpKHZvaWQpID0gbWFjaGluZV9hbHRfcG93ZXJfb2ZmOwogCiB2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDFiMjM3OTEuLmFjZjhjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CiAKICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNDcsNiArNDgsOCBAQAogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFzbS9zc3RhdGUuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAKIC8qICNkZWZpbmUgVkVSQk9TRV9TSE9XUkVHUyAqLwogCkBAIC0xMTEsMTggKzExNCw5IEBACiAJfQogfQogCi1leHRlcm4gY2hhciByZWJvb3RfY29tbWFuZCBbXTsKLQotZXh0ZXJuIHZvaWQgKCpwcm9tX3BhbGV0dGUpKGludCk7Ci1leHRlcm4gdm9pZCAoKnByb21fa2V5Ym9hcmQpKHZvaWQpOwotCiB2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQogewogCXNzdGF0ZV9oYWx0KCk7Ci0JaWYgKHByb21fcGFsZXR0ZSkKLQkJcHJvbV9wYWxldHRlICgxKTsKLQlpZiAocHJvbV9rZXlib2FyZCkKLQkJcHJvbV9rZXlib2FyZCgpOwogCXByb21faGFsdCgpOwogCXBhbmljKCJIYWx0IGZhaWxlZCEiKTsKIH0KQEAgLTEzMCwxMCArMTI0LDYgQEAKIHZvaWQgbWFjaGluZV9hbHRfcG93ZXJfb2ZmKHZvaWQpCiB7CiAJc3N0YXRlX3Bvd2Vyb2ZmKCk7Ci0JaWYgKHByb21fcGFsZXR0ZSkKLQkJcHJvbV9wYWxldHRlKDEpOwotCWlmIChwcm9tX2tleWJvYXJkKQotCQlwcm9tX2tleWJvYXJkKCk7CiAJcHJvbV9oYWx0X3Bvd2VyX29mZigpOwogCXBhbmljKCJQb3dlci1vZmYgZmFpbGVkISIpOwogfQpAQCAtMTQ1LDEwICsxMzUsNiBAQAogCXNzdGF0ZV9yZWJvb3QoKTsKIAlwID0gc3RyY2hyIChyZWJvb3RfY29tbWFuZCwgJ1xuJyk7CiAJaWYgKHApICpwID0gMDsKLQlpZiAocHJvbV9wYWxldHRlKQotCQlwcm9tX3BhbGV0dGUgKDEpOwotCWlmIChwcm9tX2tleWJvYXJkKQotCQlwcm9tX2tleWJvYXJkKCk7CiAJaWYgKGNtZCkKIAkJcHJvbV9yZWJvb3QoY21kKTsKIAlpZiAoKnJlYm9vdF9jb21tYW5kKQpAQCAtMjI2LDYyICsyMTIsNiBAQAogCQlwcmludF9zeW1ib2woIkk3OiA8JXM+XG4iLCByd2stPmluc1s3XSk7CiB9CiAKLXZvaWQgc2hvd19zdGFja2ZyYW1lKHN0cnVjdCBzcGFyY19zdGFja2YgKnNmKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nICpzdGs7Ci0JaW50IGk7Ci0KLQlwcmludGsoImwwOiAlMDE2bHggbDE6ICUwMTZseCBsMjogJTAxNmx4IGwzOiAlMDE2bHhcbiIKLQkgICAgICAgImw0OiAlMDE2bHggbDU6ICUwMTZseCBsNjogJTAxNmx4IGw3OiAlMDE2bHhcbiIsCi0JICAgICAgIHNmLT5sb2NhbHNbMF0sIHNmLT5sb2NhbHNbMV0sIHNmLT5sb2NhbHNbMl0sIHNmLT5sb2NhbHNbM10sCi0JICAgICAgIHNmLT5sb2NhbHNbNF0sIHNmLT5sb2NhbHNbNV0sIHNmLT5sb2NhbHNbNl0sIHNmLT5sb2NhbHNbN10pOwotCXByaW50aygiaTA6ICUwMTZseCBpMTogJTAxNmx4IGkyOiAlMDE2bHggaTM6ICUwMTZseFxuIgotCSAgICAgICAiaTQ6ICUwMTZseCBpNTogJTAxNmx4IGZwOiAlMDE2bHggcmV0X3BjOiAlMDE2bHhcbiIsCi0JICAgICAgIHNmLT5pbnNbMF0sIHNmLT5pbnNbMV0sIHNmLT5pbnNbMl0sIHNmLT5pbnNbM10sCi0JICAgICAgIHNmLT5pbnNbNF0sIHNmLT5pbnNbNV0sICh1bnNpZ25lZCBsb25nKXNmLT5mcCwgc2YtPmNhbGxlcnNfcGMpOwotCXByaW50aygic3A6ICUwMTZseCB4MDogJTAxNmx4IHgxOiAlMDE2bHggeDI6ICUwMTZseFxuIgotCSAgICAgICAieDM6ICUwMTZseCB4NDogJTAxNmx4IHg1OiAlMDE2bHggeHg6ICUwMTZseFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpc2YtPnN0cnVjdHB0ciwgc2YtPnhhcmdzWzBdLCBzZi0+eGFyZ3NbMV0sCi0JICAgICAgIHNmLT54YXJnc1syXSwgc2YtPnhhcmdzWzNdLCBzZi0+eGFyZ3NbNF0sIHNmLT54YXJnc1s1XSwKLQkgICAgICAgc2YtPnh4YXJnc1swXSk7Ci0Jc2l6ZSA9ICgodW5zaWduZWQgbG9uZylzZi0+ZnApIC0gKCh1bnNpZ25lZCBsb25nKXNmKTsKLQlzaXplIC09IFNUQUNLRlJBTUVfU1o7Ci0Jc3RrID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpc2YgKyBTVEFDS0ZSQU1FX1NaKTsKLQlpID0gMDsKLQlkbyB7Ci0JCXByaW50aygicyVkOiAlMDE2bHhcbiIsIGkrKywgKnN0aysrKTsKLQl9IHdoaWxlICgoc2l6ZSAtPSBzaXplb2YodW5zaWduZWQgbG9uZykpKTsKLX0KLQotdm9pZCBzaG93X3N0YWNrZnJhbWUzMihzdHJ1Y3Qgc3BhcmNfc3RhY2tmMzIgKnNmKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCAqc3RrOwotCWludCBpOwotCi0JcHJpbnRrKCJsMDogJTA4eCBsMTogJTA4eCBsMjogJTA4eCBsMzogJTA4eFxuIiwKLQkgICAgICAgc2YtPmxvY2Fsc1swXSwgc2YtPmxvY2Fsc1sxXSwgc2YtPmxvY2Fsc1syXSwgc2YtPmxvY2Fsc1szXSk7Ci0JcHJpbnRrKCJsNDogJTA4eCBsNTogJTA4eCBsNjogJTA4eCBsNzogJTA4eFxuIiwKLQkgICAgICAgc2YtPmxvY2Fsc1s0XSwgc2YtPmxvY2Fsc1s1XSwgc2YtPmxvY2Fsc1s2XSwgc2YtPmxvY2Fsc1s3XSk7Ci0JcHJpbnRrKCJpMDogJTA4eCBpMTogJTA4eCBpMjogJTA4eCBpMzogJTA4eFxuIiwKLQkgICAgICAgc2YtPmluc1swXSwgc2YtPmluc1sxXSwgc2YtPmluc1syXSwgc2YtPmluc1szXSk7Ci0JcHJpbnRrKCJpNDogJTA4eCBpNTogJTA4eCBmcDogJTA4eCByZXRfcGM6ICUwOHhcbiIsCi0JICAgICAgIHNmLT5pbnNbNF0sIHNmLT5pbnNbNV0sIHNmLT5mcCwgc2YtPmNhbGxlcnNfcGMpOwotCXByaW50aygic3A6ICUwOHggeDA6ICUwOHggeDE6ICUwOHggeDI6ICUwOHhcbiIKLQkgICAgICAgIngzOiAlMDh4IHg0OiAlMDh4IHg1OiAlMDh4IHh4OiAlMDh4XG4iLAotCSAgICAgICBzZi0+c3RydWN0cHRyLCBzZi0+eGFyZ3NbMF0sIHNmLT54YXJnc1sxXSwKLQkgICAgICAgc2YtPnhhcmdzWzJdLCBzZi0+eGFyZ3NbM10sIHNmLT54YXJnc1s0XSwgc2YtPnhhcmdzWzVdLAotCSAgICAgICBzZi0+eHhhcmdzWzBdKTsKLQlzaXplID0gKCh1bnNpZ25lZCBsb25nKXNmLT5mcCkgLSAoKHVuc2lnbmVkIGxvbmcpc2YpOwotCXNpemUgLT0gU1RBQ0tGUkFNRTMyX1NaOwotCXN0ayA9ICh1bnNpZ25lZCAqKSgodW5zaWduZWQgbG9uZylzZiArIFNUQUNLRlJBTUUzMl9TWik7Ci0JaSA9IDA7Ci0JZG8gewotCQlwcmludGsoInMlZDogJTA4eFxuIiwgaSsrLCAqc3RrKyspOwotCX0gd2hpbGUgKChzaXplIC09IHNpemVvZih1bnNpZ25lZCkpKTsKLX0KLQogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVnZHVtcF9sb2NrKTsKICNlbmRpZgpAQCAtMzY5LDI0ICsyOTksNiBAQAogI2VuZGlmCiB9CiAKLXZvaWQgc2hvd19yZWdzMzIoc3RydWN0IHB0X3JlZ3MzMiAqcmVncykKLXsKLQlwcmludGsoIlBTUjogJTA4eCBQQzogJTA4eCBOUEM6ICUwOHggWTogJTA4eCAgICAlc1xuIiwgcmVncy0+cHNyLAotCSAgICAgICByZWdzLT5wYywgcmVncy0+bnBjLCByZWdzLT55LCBwcmludF90YWludGVkKCkpOwotCXByaW50aygiZzA6ICUwOHggZzE6ICUwOHggZzI6ICUwOHggZzM6ICUwOHggIiwKLQkgICAgICAgcmVncy0+dV9yZWdzWzBdLCByZWdzLT51X3JlZ3NbMV0sIHJlZ3MtPnVfcmVnc1syXSwKLQkgICAgICAgcmVncy0+dV9yZWdzWzNdKTsKLQlwcmludGsoImc0OiAlMDh4IGc1OiAlMDh4IGc2OiAlMDh4IGc3OiAlMDh4XG4iLAotCSAgICAgICByZWdzLT51X3JlZ3NbNF0sIHJlZ3MtPnVfcmVnc1s1XSwgcmVncy0+dV9yZWdzWzZdLAotCSAgICAgICByZWdzLT51X3JlZ3NbN10pOwotCXByaW50aygibzA6ICUwOHggbzE6ICUwOHggbzI6ICUwOHggbzM6ICUwOHggIiwKLQkgICAgICAgcmVncy0+dV9yZWdzWzhdLCByZWdzLT51X3JlZ3NbOV0sIHJlZ3MtPnVfcmVnc1sxMF0sCi0JICAgICAgIHJlZ3MtPnVfcmVnc1sxMV0pOwotCXByaW50aygibzQ6ICUwOHggbzU6ICUwOHggc3A6ICUwOHggcmV0X3BjOiAlMDh4XG4iLAotCSAgICAgICByZWdzLT51X3JlZ3NbMTJdLCByZWdzLT51X3JlZ3NbMTNdLCByZWdzLT51X3JlZ3NbMTRdLAotCSAgICAgICByZWdzLT51X3JlZ3NbMTVdKTsKLX0KLQogdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKQEAgLTgxOSw5ICs3MzEsNiBAQAogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF0gPSAwOwogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF0gPSAwOwogCQlyZWdzLT50c3RhdGUgJj0gflRTVEFURV9QRUY7Ci0JCXRhc2tfbG9jayhjdXJyZW50KTsKLQkJY3VycmVudC0+cHRyYWNlICY9IH5QVF9EVFJBQ0U7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwogCX0KIG91dDoKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvbS5jCmluZGV4IGEyNDZlOTYuLjY4OTY0ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvbS5jCkBAIC0xNzE2LDcgKzE3MTYsNiBAQAogCiAJb2ZfY29uc29sZV9kZXZpY2UgPSBkcDsKIAotCXByb21fcHJpbnRmKG1zZywgb2ZfY29uc29sZV9wYXRoKTsKIAlwcmludGsobXNnLCBvZl9jb25zb2xlX3BhdGgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA5YTFiYTFmLi5lOWZjMGFhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTM1LDYgKzM1LDkgQEAKICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgImVudHJ5LmgiCiAKIC8qICNkZWZpbmUgQUxMT1dfSU5JVF9UUkFDSU5HICovCiAKQEAgLTY3LDYgKzcwLDggQEAKIAlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKIAkJcmV0dXJuOwogCisJcHJlZW1wdF9kaXNhYmxlKCk7CisKICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKIAkvKiBJZiBiaXQgMTMgb2YgdGhlIGtlcm5lbCBhZGRyZXNzIHdlIHVzZWQgdG8gYWNjZXNzIHRoZQogCSAqIHVzZXIgcGFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgdmlydHVhbCBhZGRyZXNzIHRoYXQgcGFnZQpAQCAtMTA1LDYgKzExMCw4NyBAQAogCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IGljYWNoZV9saW5lX3NpemUpCiAJCQlmbHVzaGkoc3RhcnQpOwogCX0KKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Zyb21fdGFyZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHVhZGRyLAorCQkJICAgdm9pZCAqa2J1ZiwgaW50IGxlbikKK3sKKwlpZiAodGFyZ2V0ID09IGN1cnJlbnQpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGtidWYsICh2b2lkIF9fdXNlciAqKSB1YWRkciwgbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCWludCBsZW4yID0gYWNjZXNzX3Byb2Nlc3Nfdm0odGFyZ2V0LCB1YWRkciwga2J1ZiwgbGVuLCAwKTsKKwkJaWYgKGxlbjIgIT0gbGVuKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF90b190YXJnZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIHVuc2lnbmVkIGxvbmcgdWFkZHIsCisJCQkgdm9pZCAqa2J1ZiwgaW50IGxlbikKK3sKKwlpZiAodGFyZ2V0ID09IGN1cnJlbnQpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgdWFkZHIsIGtidWYsIGxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlpbnQgbGVuMiA9IGFjY2Vzc19wcm9jZXNzX3ZtKHRhcmdldCwgdWFkZHIsIGtidWYsIGxlbiwgMSk7CisJCWlmIChsZW4yICE9IGxlbikKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWd3aW5kb3c2NF9nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkgICBjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSAgIHN0cnVjdCByZWdfd2luZG93ICp3YnVmKQoreworCXVuc2lnbmVkIGxvbmcgcndfYWRkciA9IHJlZ3MtPnVfcmVnc1tVUkVHX0k2XTsKKworCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfMzJCSVQpKSB7CisJCXN0cnVjdCByZWdfd2luZG93MzIgd2luMzI7CisJCWludCBpOworCisJCWlmIChnZXRfZnJvbV90YXJnZXQodGFyZ2V0LCByd19hZGRyLCAmd2luMzIsIHNpemVvZih3aW4zMikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQl3YnVmLT5sb2NhbHNbaV0gPSB3aW4zMi5sb2NhbHNbaV07CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQl3YnVmLT5pbnNbaV0gPSB3aW4zMi5pbnNbaV07CisJfSBlbHNlIHsKKwkJcndfYWRkciArPSBTVEFDS19CSUFTOworCQlpZiAoZ2V0X2Zyb21fdGFyZ2V0KHRhcmdldCwgcndfYWRkciwgd2J1Ziwgc2l6ZW9mKCp3YnVmKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWd3aW5kb3c2NF9zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkgICBjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSAgIHN0cnVjdCByZWdfd2luZG93ICp3YnVmKQoreworCXVuc2lnbmVkIGxvbmcgcndfYWRkciA9IHJlZ3MtPnVfcmVnc1tVUkVHX0k2XTsKKworCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfMzJCSVQpKSB7CisJCXN0cnVjdCByZWdfd2luZG93MzIgd2luMzI7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQl3aW4zMi5sb2NhbHNbaV0gPSB3YnVmLT5sb2NhbHNbaV07CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQl3aW4zMi5pbnNbaV0gPSB3YnVmLT5pbnNbaV07CisKKwkJaWYgKHNldF90b190YXJnZXQodGFyZ2V0LCByd19hZGRyLCAmd2luMzIsIHNpemVvZih3aW4zMikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJcndfYWRkciArPSBTVEFDS19CSUFTOworCQlpZiAoc2V0X3RvX3RhcmdldCh0YXJnZXQsIHJ3X2FkZHIsIHdidWYsIHNpemVvZigqd2J1ZikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGVudW0gc3BhcmNfcmVnc2V0IHsKQEAgLTEyNiwxNiArMjEyLDEzIEBACiAJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKIAkJCQkgIHJlZ3MtPnVfcmVncywKIAkJCQkgIDAsIDE2ICogc2l6ZW9mKHU2NCkpOwotCWlmICghcmV0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgX191c2VyICpyZWdfd2luZG93ID0gKHVuc2lnbmVkIGxvbmcgX191c2VyICopCi0JCQkocmVncy0+dV9yZWdzW1VSRUdfSTZdICsgU1RBQ0tfQklBUyk7Ci0JCXVuc2lnbmVkIGxvbmcgd2luZG93WzE2XTsKKwlpZiAoIXJldCAmJiBjb3VudCAmJiBwb3MgPCAoMzIgKiBzaXplb2YodTY0KSkpIHsKKwkJc3RydWN0IHJlZ193aW5kb3cgd2luZG93OwogCi0JCWlmIChjb3B5X2Zyb21fdXNlcih3aW5kb3csIHJlZ193aW5kb3csIHNpemVvZih3aW5kb3cpKSkKKwkJaWYgKHJlZ3dpbmRvdzY0X2dldCh0YXJnZXQsIHJlZ3MsICZ3aW5kb3cpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkJICB3aW5kb3csCisJCQkJCSAgJndpbmRvdywKIAkJCQkJICAxNiAqIHNpemVvZih1NjQpLAogCQkJCQkgIDMyICogc2l6ZW9mKHU2NCkpOwogCX0KQEAgLTE1NywxMCArMjQwLDExIEBACiAJCQkJCSAgMzYgKiBzaXplb2YodTY0KSk7CiAJfQogCi0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKIAkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAogCQkJCQkgICAgICAgMzYgKiBzaXplb2YodTY0KSwgLTEpOwogCisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE3OCwyMCArMjYyLDE5IEBACiAJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAogCQkJCSByZWdzLT51X3JlZ3MsCiAJCQkJIDAsIDE2ICogc2l6ZW9mKHU2NCkpOwotCWlmICghcmV0ICYmIGNvdW50ID4gMCkgewotCQl1bnNpZ25lZCBsb25nIF9fdXNlciAqcmVnX3dpbmRvdyA9ICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKQotCQkJKHJlZ3MtPnVfcmVnc1tVUkVHX0k2XSArIFNUQUNLX0JJQVMpOwotCQl1bnNpZ25lZCBsb25nIHdpbmRvd1sxNl07CisJaWYgKCFyZXQgJiYgY291bnQgJiYgcG9zIDwgKDMyICogc2l6ZW9mKHU2NCkpKSB7CisJCXN0cnVjdCByZWdfd2luZG93IHdpbmRvdzsKIAotCQlpZiAoY29weV9mcm9tX3VzZXIod2luZG93LCByZWdfd2luZG93LCBzaXplb2Yod2luZG93KSkpCisJCWlmIChyZWd3aW5kb3c2NF9nZXQodGFyZ2V0LCByZWdzLCAmd2luZG93KSkKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkJIHdpbmRvdywKKwkJCQkJICZ3aW5kb3csCiAJCQkJCSAxNiAqIHNpemVvZih1NjQpLAogCQkJCQkgMzIgKiBzaXplb2YodTY0KSk7CisKIAkJaWYgKCFyZXQgJiYKLQkJICAgIGNvcHlfdG9fdXNlcihyZWdfd2luZG93LCB3aW5kb3csIHNpemVvZih3aW5kb3cpKSkKKwkJICAgIHJlZ3dpbmRvdzY0X3NldCh0YXJnZXQsIHJlZ3MsICZ3aW5kb3cpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC0zODIsNiArNDY1LDcgQEAKIAkucmVnc2V0cyA9IHNwYXJjNjRfcmVnc2V0cywgLm4gPSBBUlJBWV9TSVpFKHNwYXJjNjRfcmVnc2V0cykKIH07CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdGF0aWMgaW50IGdlbnJlZ3MzMl9nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCQkgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCiAJCQkgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LApAQCAtNDA0LDkgKzQ4OCwyMiBAQAogCQkJKmsrKyA9IHJlZ3MtPnVfcmVnc1twb3MrK107CiAKIAkJcmVnX3dpbmRvdyA9IChjb21wYXRfdWxvbmdfdCBfX3VzZXIgKikgcmVncy0+dV9yZWdzW1VSRUdfSTZdOwotCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDMyOyBjb3VudC0tKSB7Ci0JCQlpZiAoZ2V0X3VzZXIoKmsrKywgJnJlZ193aW5kb3dbcG9zKytdKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHRhcmdldCA9PSBjdXJyZW50KSB7CisJCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDMyOyBjb3VudC0tKSB7CisJCQkJaWYgKGdldF91c2VyKCprKyssICZyZWdfd2luZG93W3BvcysrXSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yICg7IGNvdW50ID4gMCAmJiBwb3MgPCAzMjsgY291bnQtLSkgeworCQkJCWlmIChhY2Nlc3NfcHJvY2Vzc192bSh0YXJnZXQsCisJCQkJCQkgICAgICAodW5zaWduZWQgbG9uZykKKwkJCQkJCSAgICAgICZyZWdfd2luZG93W3Bvc10sCisJCQkJCQkgICAgICBrLCBzaXplb2YoKmspLCAwKQorCQkJCSAgICAhPSBzaXplb2YoKmspKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlrKys7CisJCQkJcG9zKys7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDE2OyBjb3VudC0tKSB7CkBAIC00MTUsMTAgKzUxMiwyOCBAQAogCQl9CiAKIAkJcmVnX3dpbmRvdyA9IChjb21wYXRfdWxvbmdfdCBfX3VzZXIgKikgcmVncy0+dV9yZWdzW1VSRUdfSTZdOwotCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDMyOyBjb3VudC0tKSB7Ci0JCQlpZiAoZ2V0X3VzZXIocmVnLCAmcmVnX3dpbmRvd1twb3MrK10pIHx8Ci0JCQkgICAgcHV0X3VzZXIocmVnLCB1KyspKQotCQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodGFyZ2V0ID09IGN1cnJlbnQpIHsKKwkJCWZvciAoOyBjb3VudCA+IDAgJiYgcG9zIDwgMzI7IGNvdW50LS0pIHsKKwkJCQlpZiAoZ2V0X3VzZXIocmVnLCAmcmVnX3dpbmRvd1twb3MrK10pIHx8CisJCQkJICAgIHB1dF91c2VyKHJlZywgdSsrKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDMyOyBjb3VudC0tKSB7CisJCQkJaWYgKGFjY2Vzc19wcm9jZXNzX3ZtKHRhcmdldCwKKwkJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKQorCQkJCQkJICAgICAgJnJlZ193aW5kb3dbcG9zXSwKKwkJCQkJCSAgICAgICZyZWcsIHNpemVvZihyZWcpLCAwKQorCQkJCSAgICAhPSBzaXplb2YocmVnKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaWYgKGFjY2Vzc19wcm9jZXNzX3ZtKHRhcmdldCwKKwkJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSB1LAorCQkJCQkJICAgICAgJnJlZywgc2l6ZW9mKHJlZyksIDEpCisJCQkJICAgICE9IHNpemVvZihyZWcpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlwb3MrKzsKKwkJCQl1Kys7CisJCQl9CiAJCX0KIAl9CiAJd2hpbGUgKGNvdW50ID4gMCkgewpAQCAtNDgwLDkgKzU5NSwyMyBAQAogCQkJcmVncy0+dV9yZWdzW3BvcysrXSA9ICprKys7CiAKIAkJcmVnX3dpbmRvdyA9IChjb21wYXRfdWxvbmdfdCBfX3VzZXIgKikgcmVncy0+dV9yZWdzW1VSRUdfSTZdOwotCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDMyOyBjb3VudC0tKSB7Ci0JCQlpZiAocHV0X3VzZXIoKmsrKywgJnJlZ193aW5kb3dbcG9zKytdKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHRhcmdldCA9PSBjdXJyZW50KSB7CisJCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDMyOyBjb3VudC0tKSB7CisJCQkJaWYgKHB1dF91c2VyKCprKyssICZyZWdfd2luZG93W3BvcysrXSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yICg7IGNvdW50ID4gMCAmJiBwb3MgPCAzMjsgY291bnQtLSkgeworCQkJCWlmIChhY2Nlc3NfcHJvY2Vzc192bSh0YXJnZXQsCisJCQkJCQkgICAgICAodW5zaWduZWQgbG9uZykKKwkJCQkJCSAgICAgICZyZWdfd2luZG93W3Bvc10sCisJCQkJCQkgICAgICAodm9pZCAqKSBrLAorCQkJCQkJICAgICAgc2l6ZW9mKCprKSwgMSkKKwkJCQkgICAgIT0gc2l6ZW9mKCprKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaysrOworCQkJCXBvcysrOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJZm9yICg7IGNvdW50ID4gMCAmJiBwb3MgPCAxNjsgY291bnQtLSkgewpAQCAtNDkyLDEwICs2MjEsMjkgQEAKIAkJfQogCiAJCXJlZ193aW5kb3cgPSAoY29tcGF0X3Vsb25nX3QgX191c2VyICopIHJlZ3MtPnVfcmVnc1tVUkVHX0k2XTsKLQkJZm9yICg7IGNvdW50ID4gMCAmJiBwb3MgPCAzMjsgY291bnQtLSkgewotCQkJaWYgKGdldF91c2VyKHJlZywgdSsrKSB8fAotCQkJICAgIHB1dF91c2VyKHJlZywgJnJlZ193aW5kb3dbcG9zKytdKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHRhcmdldCA9PSBjdXJyZW50KSB7CisJCQlmb3IgKDsgY291bnQgPiAwICYmIHBvcyA8IDMyOyBjb3VudC0tKSB7CisJCQkJaWYgKGdldF91c2VyKHJlZywgdSsrKSB8fAorCQkJCSAgICBwdXRfdXNlcihyZWcsICZyZWdfd2luZG93W3BvcysrXSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yICg7IGNvdW50ID4gMCAmJiBwb3MgPCAzMjsgY291bnQtLSkgeworCQkJCWlmIChhY2Nlc3NfcHJvY2Vzc192bSh0YXJnZXQsCisJCQkJCQkgICAgICAodW5zaWduZWQgbG9uZykKKwkJCQkJCSAgICAgIHUsCisJCQkJCQkgICAgICAmcmVnLCBzaXplb2YocmVnKSwgMCkKKwkJCQkgICAgIT0gc2l6ZW9mKHJlZykpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWlmIChhY2Nlc3NfcHJvY2Vzc192bSh0YXJnZXQsCisJCQkJCQkgICAgICAodW5zaWduZWQgbG9uZykKKwkJCQkJCSAgICAgICZyZWdfd2luZG93W3Bvc10sCisJCQkJCQkgICAgICAmcmVnLCBzaXplb2YocmVnKSwgMSkKKwkJCQkgICAgIT0gc2l6ZW9mKHJlZykpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCXBvcysrOworCQkJCXUrKzsKKwkJCX0KIAkJfQogCX0KIAl3aGlsZSAoY291bnQgPiAwKSB7CkBAIC02NzYsMTQgKzgyNCwxOCBAQAogCS5uYW1lID0gInNwYXJjIiwgLmVfbWFjaGluZSA9IEVNX1NQQVJDLAogCS5yZWdzZXRzID0gc3BhcmMzMl9yZWdzZXRzLCAubiA9IEFSUkFZX1NJWkUoc3BhcmMzMl9yZWdzZXRzKQogfTsKKyNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogeworI2lmZGVmIENPTkZJR19DT01QQVQKIAlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGXzMyQklUKSkKIAkJcmV0dXJuICZ1c2VyX3NwYXJjMzJfdmlldzsKKyNlbmRpZgogCXJldHVybiAmdXNlcl9zcGFyYzY0X3ZpZXc7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdHJ1Y3QgY29tcGF0X2ZwcyB7CiAJdW5zaWduZWQgaW50IHJlZ3NbMzJdOwogCXVuc2lnbmVkIGludCBmc3I7CkBAIC02OTksNyArODUxLDcgQEAKIGxvbmcgY29tcGF0X2FyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGNvbXBhdF9sb25nX3QgcmVxdWVzdCwKIAkJCWNvbXBhdF91bG9uZ190IGNhZGRyLCBjb21wYXRfdWxvbmdfdCBjZGF0YSkKIHsKLQljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdmlldyA9IHRhc2tfdXNlcl9yZWdzZXRfdmlldyhjaGlsZCk7CisJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnZpZXcgPSB0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoY3VycmVudCk7CiAJY29tcGF0X3Vsb25nX3QgY2FkZHIyID0gdGFza19wdF9yZWdzKGN1cnJlbnQpLT51X3JlZ3NbVVJFR19JNF07CiAJc3RydWN0IHB0X3JlZ3MzMiBfX3VzZXIgKnByZWdzOwogCXN0cnVjdCBjb21wYXRfZnBzIF9fdXNlciAqZnBzOwpAQCAtNzk4LDYgKzk1MCw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KIAogc3RydWN0IGZwcyB7CiAJdW5zaWduZWQgaW50IHJlZ3NbNjRdOwpAQCAtODA2LDEyICs5NTksMTUgQEAKIAogbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQogewotCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp2aWV3ID0gdGFza191c2VyX3JlZ3NldF92aWV3KGNoaWxkKTsKLQlzdHJ1Y3QgcHRfcmVncyBfX3VzZXIgKnByZWdzID0gKHN0cnVjdCBwdF9yZWdzIF9fdXNlciAqKSBhZGRyOworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp2aWV3ID0gdGFza191c2VyX3JlZ3NldF92aWV3KGN1cnJlbnQpOwogCXVuc2lnbmVkIGxvbmcgYWRkcjIgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCktPnVfcmVnc1tVUkVHX0k0XTsKLQlzdHJ1Y3QgZnBzIF9fdXNlciAqZnBzID0gKHN0cnVjdCBmcHMgX191c2VyICopIGFkZHI7CisJc3RydWN0IHB0X3JlZ3MgX191c2VyICpwcmVnczsKKwlzdHJ1Y3QgZnBzIF9fdXNlciAqZnBzOwogCWludCByZXQ7CiAKKwlwcmVncyA9IChzdHJ1Y3QgcHRfcmVncyBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGFkZHI7CisJZnBzID0gKHN0cnVjdCBmcHMgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBhZGRyOworCiAJc3dpdGNoIChyZXF1ZXN0KSB7CiAJY2FzZSBQVFJBQ0VfUEVFS1VTUjoKIAkJcmV0ID0gKGFkZHIgIT0gMCkgPyAtRUlPIDogMDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NlbWFwaG9yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTc0YTY4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyogc2VtYXBob3JlLmM6IFNwYXJjNjQgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgotICoKLSAqIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBQUEMgc2VtYXBob3JlIHNjaGVtZSBwb3J0ZWQgdG8gdXNlCi0gKiB0aGUgc3BhcmM2NCBhdG9taWMgaW5zdHJ1Y3Rpb25zLCBzbyBzZWUgdGhlIFBQQyBjb2RlIGZvcgotICogY3JlZGl0cy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotLyoKLSAqIEF0b21pY2FsbHkgdXBkYXRlIHNlbS0+Y291bnQuCi0gKiBUaGlzIGRvZXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIGZvbGxvd2luZzoKLSAqCi0gKglvbGRfY291bnQgPSBzZW0tPmNvdW50OwotICoJdG1wID0gTUFYKG9sZF9jb3VudCwgMCkgKyBpbmNyOwotICoJc2VtLT5jb3VudCA9IHRtcDsKLSAqCXJldHVybiBvbGRfY291bnQ7Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fc2VtX3VwZGF0ZV9jb3VudChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCBpbmNyKQotewotCWludCBvbGRfY291bnQsIHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcbiIKLSIJISBfX3NlbV91cGRhdGVfY291bnQgb2xkX2NvdW50KCUwKSB0bXAoJTEpIGluY3IoJTQpICZzZW0tPmNvdW50KCUzKVxuIgotIjE6CWxkc3cJWyUzXSwgJTBcbiIKLSIJbW92CSUwLCAlMVxuIgotIgljbXAJJTAsIDBcbiIKLSIJbW92bAklJWljYywgMCwgJTFcbiIKLSIJYWRkCSUxLCAlNCwgJTFcbiIKLSIJY2FzCVslM10sICUwLCAlMVxuIgotIgljbXAJJTAsICUxXG4iCi0iCW1lbWJhcgkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKLSIJYm5lLHBuCSUlaWNjLCAxYlxuIgotIgkgbm9wXG4iCi0JOiAiPSZyIiAob2xkX2NvdW50KSwgIj0mciIgKHRtcCksICI9bSIgKHNlbS0+Y291bnQpCi0JOiAiciIgKCZzZW0tPmNvdW50KSwgInIiIChpbmNyKSwgIm0iIChzZW0tPmNvdW50KQotCTogImNjIik7Ci0KLQlyZXR1cm4gb2xkX2NvdW50OwotfQotCi1zdGF0aWMgdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlfX3NlbV91cGRhdGVfY291bnQoc2VtLCAxKTsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi12b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQkvKiBUaGlzIGF0b21pY2FsbHkgZG9lczoKLQkgKiAJb2xkX3ZhbCA9IHNlbS0+Y291bnQ7Ci0JICoJbmV3X3ZhbCA9IHNlbS0+Y291bnQgKyAxOwotCSAqCXNlbS0+Y291bnQgPSBuZXdfdmFsOwotCSAqCWlmIChvbGRfdmFsIDwgMCkKLQkgKgkJX191cChzZW0pOwotCSAqCi0JICogVGhlIChvbGRfdmFsIDwgMCkgdGVzdCBpcyBlcXVpdmFsZW50IHRvCi0JICogdGhlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIChuZXdfdmFsIDw9IDApLAotCSAqIGJ1dCBpdCBpcyBlYXNpZXIgdG8gdGVzdCB0aGUgZm9ybWVyIGJlY2F1c2UKLQkgKiBvZiBob3cgdGhlIENBUyBpbnN0cnVjdGlvbiB3b3Jrcy4KLQkgKi8KLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcbiIKLSIJISB1cCBzZW0oJTApXG4iCi0iCW1lbWJhcgkjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCi0iMToJbGR1dwlbJTBdLCAlJWcxXG4iCi0iCWFkZAklJWcxLCAxLCAlJWc3XG4iCi0iCWNhcwlbJTBdLCAlJWcxLCAlJWc3XG4iCi0iCWNtcAklJWcxLCAlJWc3XG4iCi0iCWJuZSxwbgklJWljYywgMWJcbiIKLSIJIGFkZGNjCSUlZzcsIDEsICUlZzBcbiIKLSIJbWVtYmFyCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgotIglibGUscG4JJSVpY2MsIDNmXG4iCi0iCSBub3BcbiIKLSIyOlxuIgotIgkuc3Vic2VjdGlvbiAyXG4iCi0iMzoJbW92CSUwLCAlJWcxXG4iCi0iCXNhdmUJJSVzcCwgLTE2MCwgJSVzcFxuIgotIgljYWxsCSUxXG4iCi0iCSBtb3YJJSVnMSwgJSVvMFxuIgotIgliYSxwdAklJXhjYywgMmJcbiIKLSIJIHJlc3RvcmVcbiIKLSIJLnByZXZpb3VzXG4iCi0JOiA6ICJyIiAoc2VtKSwgImkiIChfX3VwKQotCTogImcxIiwgImcyIiwgImczIiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOwotfQotCi1zdGF0aWMgdm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCi0JdHNrLT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQl3aGlsZSAoX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgLTEpIDw9IDApIHsKLQkJc2NoZWR1bGUoKTsKLQkJdHNrLT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwotCX0KLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLXZvaWQgX19zY2hlZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQltaWdodF9zbGVlcCgpOwotCS8qIFRoaXMgYXRvbWljYWxseSBkb2VzOgotCSAqIAlvbGRfdmFsID0gc2VtLT5jb3VudDsKLQkgKgluZXdfdmFsID0gc2VtLT5jb3VudCAtIDE7Ci0JICoJc2VtLT5jb3VudCA9IG5ld192YWw7Ci0JICoJaWYgKG9sZF92YWwgPCAxKQotCSAqCQlfX2Rvd24oc2VtKTsKLQkgKgotCSAqIFRoZSAob2xkX3ZhbCA8IDEpIHRlc3QgaXMgZXF1aXZhbGVudCB0bwotCSAqIHRoZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCAobmV3X3ZhbCA8IDApLAotCSAqIGJ1dCBpdCBpcyBlYXNpZXIgdG8gdGVzdCB0aGUgZm9ybWVyIGJlY2F1c2UKLQkgKiBvZiBob3cgdGhlIENBUyBpbnN0cnVjdGlvbiB3b3Jrcy4KLQkgKi8KLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcbiIKLSIJISBkb3duIHNlbSglMClcbiIKLSIxOglsZHV3CVslMF0sICUlZzFcbiIKLSIJc3ViCSUlZzEsIDEsICUlZzdcbiIKLSIJY2FzCVslMF0sICUlZzEsICUlZzdcbiIKLSIJY21wCSUlZzEsICUlZzdcbiIKLSIJYm5lLHBuCSUlaWNjLCAxYlxuIgotIgkgY21wCSUlZzcsIDFcbiIKLSIJbWVtYmFyCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgotIglibCxwbgklJWljYywgM2ZcbiIKLSIJIG5vcFxuIgotIjI6XG4iCi0iCS5zdWJzZWN0aW9uIDJcbiIKLSIzOgltb3YJJTAsICUlZzFcbiIKLSIJc2F2ZQklJXNwLCAtMTYwLCAlJXNwXG4iCi0iCWNhbGwJJTFcbiIKLSIJIG1vdgklJWcxLCAlJW8wXG4iCi0iCWJhLHB0CSUleGNjLCAyYlxuIgotIgkgcmVzdG9yZVxuIgotIgkucHJldmlvdXNcbiIKLQk6IDogInIiIChzZW0pLCAiaSIgKF9fZG93bikKLQk6ICJnMSIsICJnMiIsICJnMyIsICJnNyIsICJtZW1vcnkiLCAiY2MiKTsKLX0KLQotaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldDsKLQotCS8qIFRoaXMgYXRvbWljYWxseSBkb2VzOgotCSAqIAlvbGRfdmFsID0gc2VtLT5jb3VudDsKLQkgKgluZXdfdmFsID0gc2VtLT5jb3VudCAtIDE7Ci0JICoJaWYgKG9sZF92YWwgPCAxKSB7Ci0JICoJCXJldCA9IDE7Ci0JICoJfSBlbHNlIHsKLQkgKgkJc2VtLT5jb3VudCA9IG5ld192YWw7Ci0JICoJCXJldCA9IDA7Ci0JICoJfQotCSAqCi0JICogVGhlIChvbGRfdmFsIDwgMSkgdGVzdCBpcyBlcXVpdmFsZW50IHRvCi0JICogdGhlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIChuZXdfdmFsIDwgMCksCi0JICogYnV0IGl0IGlzIGVhc2llciB0byB0ZXN0IHRoZSBmb3JtZXIgYmVjYXVzZQotCSAqIG9mIGhvdyB0aGUgQ0FTIGluc3RydWN0aW9uIHdvcmtzLgotCSAqLwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIlxuIgotIgkhIGRvd25fdHJ5bG9jayBzZW0oJTEpIHJldCglMClcbiIKLSIxOglsZHV3CVslMV0sICUlZzFcbiIKLSIJc3ViCSUlZzEsIDEsICUlZzdcbiIKLSIJY21wCSUlZzEsIDFcbiIKLSIJYmwscG4JJSVpY2MsIDJmXG4iCi0iCSBtb3YJMSwgJTBcbiIKLSIJY2FzCVslMV0sICUlZzEsICUlZzdcbiIKLSIJY21wCSUlZzEsICUlZzdcbiIKLSIJYm5lLHBuCSUlaWNjLCAxYlxuIgotIgkgbW92CTAsICUwXG4iCi0iCW1lbWJhcgkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKLSIyOlxuIgotCTogIj0mciIgKHJldCkKLQk6ICJyIiAoc2VtKQotCTogImcxIiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX3NjaGVkIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0KLQl0c2stPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQl3aGlsZSAoX19zZW1fdXBkYXRlX2NvdW50KHNlbSwgLTEpIDw9IDApIHsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlfX3NlbV91cGRhdGVfY291bnQoc2VtLCAwKTsKLQkJCXJldHZhbCA9IC1FSU5UUjsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjaGVkdWxlKCk7Ci0JCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JfQotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotaW50IF9fc2NoZWQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQkKLQltaWdodF9zbGVlcCgpOwotCS8qIFRoaXMgYXRvbWljYWxseSBkb2VzOgotCSAqIAlvbGRfdmFsID0gc2VtLT5jb3VudDsKLQkgKgluZXdfdmFsID0gc2VtLT5jb3VudCAtIDE7Ci0JICoJc2VtLT5jb3VudCA9IG5ld192YWw7Ci0JICoJaWYgKG9sZF92YWwgPCAxKQotCSAqCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotCSAqCi0JICogVGhlIChvbGRfdmFsIDwgMSkgdGVzdCBpcyBlcXVpdmFsZW50IHRvCi0JICogdGhlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIChuZXdfdmFsIDwgMCksCi0JICogYnV0IGl0IGlzIGVhc2llciB0byB0ZXN0IHRoZSBmb3JtZXIgYmVjYXVzZQotCSAqIG9mIGhvdyB0aGUgQ0FTIGluc3RydWN0aW9uIHdvcmtzLgotCSAqLwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIlxuIgotIgkhIGRvd25faW50ZXJydXB0aWJsZSBzZW0oJTIpIHJldCglMClcbiIKLSIxOglsZHV3CVslMl0sICUlZzFcbiIKLSIJc3ViCSUlZzEsIDEsICUlZzdcbiIKLSIJY2FzCVslMl0sICUlZzEsICUlZzdcbiIKLSIJY21wCSUlZzEsICUlZzdcbiIKLSIJYm5lLHBuCSUlaWNjLCAxYlxuIgotIgkgY21wCSUlZzcsIDFcbiIKLSIJbWVtYmFyCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgotIglibCxwbgklJWljYywgM2ZcbiIKLSIJIG5vcFxuIgotIjI6XG4iCi0iCS5zdWJzZWN0aW9uIDJcbiIKLSIzOgltb3YJJTIsICUlZzFcbiIKLSIJc2F2ZQklJXNwLCAtMTYwLCAlJXNwXG4iCi0iCWNhbGwJJTNcbiIKLSIJIG1vdgklJWcxLCAlJW8wXG4iCi0iCWJhLHB0CSUleGNjLCAyYlxuIgotIgkgcmVzdG9yZVxuIgotIgkucHJldmlvdXNcbiIKLQk6ICI9ciIgKHJldCkKLQk6ICIwIiAocmV0KSwgInIiIChzZW0pLCAiaSIgKF9fZG93bl9pbnRlcnJ1cHRpYmxlKQotCTogImcxIiwgImcyIiwgImczIiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKaW5kZXggNTk2NGQ4Ni4uNmFjYjRjNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwpAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgPG5ldC9pcGNvbmZpZy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJlbnRyeS5oIgorCiAvKiBVc2VkIHRvIHN5bmNocm9uaXplIGFjY2Vzc2VzIHRvIE5hdFNlbWkgU1VQRVIgSS9PIGNoaXAgY29uZmlndXJlCiAgKiBvcGVyYXRpb25zIGluIGFzbS9uczg3MzAzLmgKICAqLwpAQCAtNjgsMzMgKzcwLDIyIEBACiAJMTYgICAgICAgICAgICAgICAgICAgICAgLyogb3JpZy12aWRlby1wb2ludHMgKi8KIH07CiAKLXZvaWQgKCpwcm9tX3BhbGV0dGUpKGludCk7Ci12b2lkICgqcHJvbV9rZXlib2FyZCkodm9pZCk7Ci0KIHN0YXRpYyB2b2lkCiBwcm9tX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgbikKIHsKIAlwcm9tX3dyaXRlKHMsIG4pOwogfQogCi11bnNpZ25lZCBpbnQgYm9vdF9mbGFncyA9IDA7Ci0jZGVmaW5lIEJPT1RNRV9ERUJVRyAgMHgxCi0KIC8qIEV4cG9ydGVkIGZvciBtbS9pbml0LmM6cGFnaW5nX2luaXQuICovCiB1bnNpZ25lZCBsb25nIGNtZGxpbmVfbWVtb3J5X3NpemUgPSAwOwogCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgcHJvbV9kZWJ1Z19jb25zb2xlID0gewotCS5uYW1lID0JCSJkZWJ1ZyIsCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgcHJvbV9lYXJseV9jb25zb2xlID0geworCS5uYW1lID0JCSJlYXJseXByb20iLAogCS53cml0ZSA9CXByb21fY29uc29sZV93cml0ZSwKLQkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSIHwgQ09OX0JPT1QsCiAJLmluZGV4ID0JLTEsCiB9OwogCi0vKiBYWFggSW1wbGVtZW50IHRoaXMgYXQgc29tZSBwb2ludC4uLiAqLwotdm9pZCBrZXJuZWxfZW50ZXJfZGVidWdnZXIodm9pZCkKLXsKLX0KLQogLyogCiAgKiBQcm9jZXNzIGtlcm5lbCBjb21tYW5kIGxpbmUgc3dpdGNoZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlCiAgKiBTUEFSQyBvciB0aGF0IHJlcXVpcmUgc3BlY2lhbCBsb3ctbGV2ZWwgcHJvY2Vzc2luZy4KQEAgLTEwMyw4ICs5NCw2IEBACiB7CiAJc3dpdGNoIChjKSB7CiAJY2FzZSAnZCc6Ci0JCWJvb3RfZmxhZ3MgfD0gQk9PVE1FX0RFQlVHOwotCQlicmVhazsKIAljYXNlICdzJzoKIAkJYnJlYWs7CiAJY2FzZSAnaCc6CkBAIC0xMTIsOCArMTAxLDcgQEAKIAkJcHJvbV9oYWx0KCk7CiAJCWJyZWFrOwogCWNhc2UgJ3AnOgotCQkvKiBVc2UgUFJPTSBkZWJ1ZyBjb25zb2xlLiAqLwotCQlyZWdpc3Rlcl9jb25zb2xlKCZwcm9tX2RlYnVnX2NvbnNvbGUpOworCQkvKiBKdXN0IGlnbm9yZSwgdGhpcyBiZWhhdmlvciBpcyBub3cgdGhlIGRlZmF1bHQuICAqLwogCQlicmVhazsKIAljYXNlICdQJzoKIAkJLyogRm9yY2UgVWx0cmFTUEFSQy1JSUkgUC1DYWNoZSBvbi4gKi8KQEAgLTE2OCw4ICsxNTYsNiBAQAogCX0KIH0KIAotZXh0ZXJuIHZvaWQgcGFuaWNfc2V0dXAoY2hhciAqLCBpbnQgKik7Ci0KIGV4dGVybiB1bnNpZ25lZCBzaG9ydCByb290X2ZsYWdzOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHJvb3RfZGV2OwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHJhbV9mbGFnczsKQEAgLTI5Niw2ICsyODIsOSBAQAogCSpjbWRsaW5lX3AgPSBwcm9tX2dldGJvb3RhcmdzKCk7CiAJc3RyY3B5KGJvb3RfY29tbWFuZF9saW5lLCAqY21kbGluZV9wKTsKIAorCWJvb3RfZmxhZ3NfaW5pdCgqY21kbGluZV9wKTsKKwlyZWdpc3Rlcl9jb25zb2xlKCZwcm9tX2Vhcmx5X2NvbnNvbGUpOworCiAJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCiAJCXByaW50aygiQVJDSDogU1VONFZcbiIpOwogCWVsc2UKQEAgLTMwNyw4ICsyOTYsNiBAQAogCWNvbnN3aXRjaHAgPSAmcHJvbV9jb247CiAjZW5kaWYKIAotCWJvb3RfZmxhZ3NfaW5pdCgqY21kbGluZV9wKTsKLQogCWlkcHJvbV9pbml0KCk7CiAKIAlpZiAoIXJvb3RfZmxhZ3MpCkBAIC0zNTAsOSArMzM3LDYgQEAKIAogLyogQlVGRkVSIGlzIFBBR0VfU0laRSBieXRlcyBsb25nLiAqLwogCi1leHRlcm4gY2hhciAqc3BhcmNfY3B1X3R5cGU7Ci1leHRlcm4gY2hhciAqc3BhcmNfZnB1X3R5cGU7Ci0KIGV4dGVybiB2b2lkIHNtcF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqKTsKIGV4dGVybiB2b2lkIHNtcF9ib2dvKHN0cnVjdCBzZXFfZmlsZSAqKTsKIGV4dGVybiB2b2lkIG1tdV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IGZiMTM3NzUuLjFjNDcwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwuYwpAQCAtMjUsMTMgKzI1LDE1IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vc3ZyNC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL3VjdHguaD4KICNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgogI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KIAorI2luY2x1ZGUgImVudHJ5LmgiCisjaW5jbHVkZSAic3lzdGJscy5oIgorCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQogCiAvKiB7c2V0LCBnZXR9Y29udGV4dCgpIG5lZWRlZCBmb3IgNjQtYml0IFNwYXJjTGludXggdXNlcmxhbmQuICovCkBAIC0zNTQsNyArMzU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBzYXZlX2ZwdV9zdGF0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1KQogewotCXVuc2lnbmVkIGxvbmcgKmZwcmVncyA9ICh1bnNpZ25lZCBsb25nICopKHJlZ3MrMSk7CisJdW5zaWduZWQgbG9uZyAqZnByZWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHJlZ3M7CiAJdW5zaWduZWQgbG9uZyBmcHJzOwogCWludCBlcnIgPSAwOwogCQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwzMi5jCmluZGV4IDhjMWMxMjEuLjc0ZTA1MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2lnbmFsMzIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbDMyLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9zdnI0Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHNyY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdW1hY3JvLmg+CkBAIC03OTgsMjgxICs3OTcsNiBAQAogCWZvcmNlX3NpZ3NlZ3Yoc2lnbm8sIGN1cnJlbnQpOwogfQogCi0vKiBTZXR1cCBhIFNvbGFyaXMgc3RhY2sgZnJhbWUgKi8KLXN0YXRpYyB2b2lkCi1zZXR1cF9zdnI0X2ZyYW1lMzIoc3RydWN0IHNpZ2FjdGlvbiAqc2EsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgbnBjLAotCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpZ25yLCBzaWdzZXRfdCAqb2xkc2V0KQotewotCXN2cjRfc2lnbmFsX2ZyYW1lX3QgX191c2VyICpzZnA7Ci0Jc3ZyNF9ncmVnc2V0X3QgIF9fdXNlciAqZ3I7Ci0Jc3ZyNF9zaWdpbmZvX3QgIF9fdXNlciAqc2k7Ci0Jc3ZyNF9tY29udGV4dF90IF9fdXNlciAqbWM7Ci0Jc3ZyNF9nd2luZG93c190IF9fdXNlciAqZ3c7Ci0Jc3ZyNF91Y29udGV4dF90IF9fdXNlciAqdWM7Ci0Jc3ZyNF9zaWdzZXRfdCBzZXR2OwotCXVuc2lnbmVkIGludCBwc3I7Ci0JaW50IGksIGVycjsKLQotCXN5bmNocm9uaXplX3VzZXJfc3RhY2soKTsKLQlzYXZlX2FuZF9jbGVhcl9mcHUoKTsKLQkKLQlyZWdzLT51X3JlZ3NbVVJFR19GUF0gJj0gMHgwMDAwMDAwMGZmZmZmZmZmVUw7Ci0Jc2ZwID0gKHN2cjRfc2lnbmFsX2ZyYW1lX3QgX191c2VyICopCi0JCWdldF9zaWdmcmFtZShzYSwgcmVncywKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93MzIpICsgU1ZSNF9TRl9BTElHTkVEKTsKLQotCWlmIChpbnZhbGlkX2ZyYW1lX3BvaW50ZXIoc2ZwLCBzaXplb2YoKnNmcCkpKQotCQlkb19leGl0KFNJR0lMTCk7Ci0KLQkvKiBTdGFydCB3aXRoIGEgY2xlYW4gZnJhbWUgcG9pbnRlciBhbmQgZmlsbCBpdCAqLwotCWVyciA9IGNsZWFyX3VzZXIoc2ZwLCBzaXplb2YoKnNmcCkpOwotCi0JLyogU2V0dXAgY29udmVuaWVuY2UgdmFyaWFibGVzICovCi0Jc2kgPSAmc2ZwLT5zaTsKLQl1YyA9ICZzZnAtPnVjOwotCWd3ID0gJnNmcC0+Z3c7Ci0JbWMgPSAmdWMtPm1jb250ZXh0OwotCWdyID0gJm1jLT5ncmVnOwotCQotCS8qIEZJWE1FOiB3aGVyZSBhbSBJIHN1cHBvc2VkIHRvIHB1dCB0aGlzPwotCSAqIHNjLT5zaWdjX29uc3RhY2sgPSBvbGRfc3RhdHVzOwotCSAqIGFueXdheXMsIGl0IGRvZXMgbm90IGxvb2sgbGlrZSBpdCBpcyB1c2VkIGZvciBhbnl0aGluZyBhdCBhbGwuCi0JICovCi0Jc2V0di5zaWdiaXRzWzBdID0gb2xkc2V0LT5zaWdbMF07Ci0Jc2V0di5zaWdiaXRzWzFdID0gKG9sZHNldC0+c2lnWzBdID4+IDMyKTsKLQlpZiAoX05TSUdfV09SRFMgPj0gMikgewotCQlzZXR2LnNpZ2JpdHNbMl0gPSBvbGRzZXQtPnNpZ1sxXTsKLQkJc2V0di5zaWdiaXRzWzNdID0gKG9sZHNldC0+c2lnWzFdID4+IDMyKTsKLQkJZXJyIHw9IF9fY29weV90b191c2VyKCZ1Yy0+c2lnbWFzaywgJnNldHYsIHNpemVvZihzdnI0X3NpZ3NldF90KSk7Ci0JfSBlbHNlCi0JCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmdWMtPnNpZ21hc2ssICZzZXR2LAotCQkJCSAgICAgIDIgKiBzaXplb2YodW5zaWduZWQgaW50KSk7Ci0JCi0JLyogU3RvcmUgcmVnaXN0ZXJzICovCi0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgewotCQlyZWdzLT50cGMgJj0gMHhmZmZmZmZmZjsKLQkJcmVncy0+dG5wYyAmPSAweGZmZmZmZmZmOwotCX0KLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT50cGMsICYoKCpncilbU1ZSNF9QQ10pKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT50bnBjLCAmKCgqZ3IpW1NWUjRfTlBDXSkpOwotCXBzciA9IHRzdGF0ZV90b19wc3IocmVncy0+dHN0YXRlKTsKLQlpZiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHNhdmVkWzBdICYgRlBSU19GRUYpCi0JCXBzciB8PSBQU1JfRUY7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocHNyLCAmKCgqZ3IpW1NWUjRfUFNSXSkpOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnksICYoKCpncilbU1ZSNF9ZXSkpOwotCQotCS8qIENvcHkgZ1sxLi43XSBhbmQgb1swLi43XSByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQotCQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT51X3JlZ3NbVVJFR19HMStpXSwgKCYoKmdyKVtTVlI0X0cxXSkraSk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+dV9yZWdzW1VSRUdfSTAraV0sICgmKCpncilbU1ZSNF9PMF0pK2kpOwotCi0JLyogU2V0dXAgc2lnYWx0c3RhY2sgKi8KLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc3AsICZ1Yy0+c3RhY2suc3ApOwotCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT51X3JlZ3NbVVJFR19GUF0pLCAmdWMtPnN0YWNrLmZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc2l6ZSwgJnVjLT5zdGFjay5zaXplKTsKLQotCS8qIFNhdmUgdGhlIGN1cnJlbnRseSB3aW5kb3cgZmlsZTogKi8KLQotCS8qIDEuIExpbmsgc2ZwLT51Yy0+Z3dpbnMgdG8gb3VyIHdpbmRvd3MgKi8KLQllcnIgfD0gX19wdXRfdXNlcihwdHJfdG9fY29tcGF0KGd3KSwgJm1jLT5nd2luKTsKLQkgICAgCi0JLyogMi4gTnVtYmVyIG9mIHdpbmRvd3MgdG8gcmVzdG9yZSBhdCBzZXRjb250ZXh0ICgpOiAqLwotCWVyciB8PSBfX3B1dF91c2VyKGdldF90aHJlYWRfd3NhdmVkKCksICZndy0+Y291bnQpOwotCi0JLyogMy4gV2UganVzdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBndy0+Y291bnQgZmllbGQgb24gc2V0Y29udGV4dCAqLwotCXNldF90aHJlYWRfd3NhdmVkKDApOyAvKiBTbyBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gZXhlY3V0ZS4gKi8KLQotCS8qIFNldHVwIHRoZSBzaWduYWwgaW5mb3JtYXRpb24uICBTb2xhcmlzIGV4cGVjdHMgYSBidW5jaCBvZgotCSAqIGluZm9ybWF0aW9uIHRvIGJlIHBhc3NlZCB0byB0aGUgc2lnbmFsIGhhbmRsZXIsIHdlIGRvbid0IHByb3ZpZGUKLQkgKiB0aGF0IG11Y2ggY3VycmVudGx5LCBzaG91bGQgdXNlIHNpZ2luZm8uCi0JICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoc2lnbnIsICZzaS0+c2lnaW5mby5zaWdubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoU1ZSNF9TSU5PSU5GTywgJnNpLT5zaWdpbmZvLmNvZGUpOwotCWlmIChlcnIpCi0JCWdvdG8gc2lnc2VndjsKLQotCXJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSA9ICh1bnNpZ25lZCBsb25nKSBzZnA7Ci0JcmVncy0+dHBjID0gKHVuc2lnbmVkIGxvbmcpIHNhLT5zYV9oYW5kbGVyOwotCXJlZ3MtPnRucGMgPSAocmVncy0+dHBjICsgNCk7Ci0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgewotCQlyZWdzLT50cGMgJj0gMHhmZmZmZmZmZjsKLQkJcmVncy0+dG5wYyAmPSAweGZmZmZmZmZmOwotCX0KLQotCS8qIEFyZ3VtZW50cyBwYXNzZWQgdG8gc2lnbmFsIGhhbmRsZXIgKi8KLQlpZiAocmVncy0+dV9yZWdzWzE0XSl7Ci0JCXN0cnVjdCByZWdfd2luZG93MzIgX191c2VyICpydyA9IChzdHJ1Y3QgcmVnX3dpbmRvdzMyIF9fdXNlciAqKQotCQkJKHJlZ3MtPnVfcmVnc1sxNF0gJiAweDAwMDAwMDAwZmZmZmZmZmZVTCk7Ci0KLQkJZXJyIHw9IF9fcHV0X3VzZXIoc2lnbnIsICZydy0+aW5zWzBdKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIoKHU2NClzaSwgJnJ3LT5pbnNbMV0pOwotCQllcnIgfD0gX19wdXRfdXNlcigodTY0KXVjLCAmcnctPmluc1syXSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKCh1NjQpc2ZwLCAmcnctPmluc1s2XSk7CS8qIGZyYW1lIHBvaW50ZXIgKi8KLQkJaWYgKGVycikKLQkJCWdvdG8gc2lnc2VndjsKLQotCQlyZWdzLT51X3JlZ3NbVVJFR19JMF0gPSBzaWducjsKLQkJcmVncy0+dV9yZWdzW1VSRUdfSTFdID0gKHUzMikodTY0KSBzaTsKLQkJcmVncy0+dV9yZWdzW1VSRUdfSTJdID0gKHUzMikodTY0KSB1YzsKLQl9Ci0JcmV0dXJuOwotCi1zaWdzZWd2OgotCWZvcmNlX3NpZ3NlZ3Yoc2lnbnIsIGN1cnJlbnQpOwotfQotCi1hc21saW5rYWdlIGludAotc3ZyNF9nZXRjb250ZXh0KHN2cjRfdWNvbnRleHRfdCBfX3VzZXIgKnVjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdnI0X2dyZWdzZXRfdCAgX191c2VyICpncjsKLQlzdnI0X21jb250ZXh0X3QgX191c2VyICptYzsKLQlzdnI0X3NpZ3NldF90IHNldHY7Ci0JaW50IGksIGVycjsKLQl1MzIgcHNyOwotCi0Jc3luY2hyb25pemVfdXNlcl9zdGFjaygpOwotCXNhdmVfYW5kX2NsZWFyX2ZwdSgpOwotCQotCWlmIChnZXRfdGhyZWFkX3dzYXZlZCgpKQotCQlkb19leGl0KFNJR1NFR1YpOwotCi0JZXJyID0gY2xlYXJfdXNlcih1Yywgc2l6ZW9mKCp1YykpOwotCi0JLyogU2V0dXAgY29udmVuaWVuY2UgdmFyaWFibGVzICovCi0JbWMgPSAmdWMtPm1jb250ZXh0OwotCWdyID0gJm1jLT5ncmVnOwotCi0Jc2V0di5zaWdiaXRzWzBdID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07Ci0Jc2V0di5zaWdiaXRzWzFdID0gKGN1cnJlbnQtPmJsb2NrZWQuc2lnWzBdID4+IDMyKTsKLQlpZiAoX05TSUdfV09SRFMgPj0gMikgewotCQlzZXR2LnNpZ2JpdHNbMl0gPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1sxXTsKLQkJc2V0di5zaWdiaXRzWzNdID0gKGN1cnJlbnQtPmJsb2NrZWQuc2lnWzFdID4+IDMyKTsKLQkJZXJyIHw9IF9fY29weV90b191c2VyKCZ1Yy0+c2lnbWFzaywgJnNldHYsIHNpemVvZihzdnI0X3NpZ3NldF90KSk7Ci0JfSBlbHNlCi0JCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmdWMtPnNpZ21hc2ssICZzZXR2LCAyICogc2l6ZW9mKHVuc2lnbmVkKSk7Ci0KLQkvKiBTdG9yZSByZWdpc3RlcnMgKi8KLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7Ci0JCXJlZ3MtPnRwYyAmPSAweGZmZmZmZmZmOwotCQlyZWdzLT50bnBjICY9IDB4ZmZmZmZmZmY7Ci0JfQotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnRwYywgJnVjLT5tY29udGV4dC5ncmVnW1NWUjRfUENdKTsKLQllcnIgfD0gX19wdXRfdXNlcihyZWdzLT50bnBjLCAmdWMtPm1jb250ZXh0LmdyZWdbU1ZSNF9OUENdKTsKLQotCXBzciA9IHRzdGF0ZV90b19wc3IocmVncy0+dHN0YXRlKSAmIH5QU1JfRUY7CQkgICAKLQlpZiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHNhdmVkWzBdICYgRlBSU19GRUYpCi0JCXBzciB8PSBQU1JfRUY7Ci0JZXJyIHw9IF9fcHV0X3VzZXIocHNyLCAmdWMtPm1jb250ZXh0LmdyZWdbU1ZSNF9QU1JdKTsKLQotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnksICZ1Yy0+bWNvbnRleHQuZ3JlZ1tTVlI0X1ldKTsKLQkKLQkvKiBDb3B5IGdbMS4uN10gYW5kIG9bMC4uN10gcmVnaXN0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykKLQkJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+dV9yZWdzW1VSRUdfRzEraV0sICgmKCpncilbU1ZSNF9HMV0pK2kpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnVfcmVnc1tVUkVHX0kwK2ldLCAoJigqZ3IpW1NWUjRfTzBdKStpKTsKLQotCS8qIFNldHVwIHNpZ2FsdHN0YWNrICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmdWMtPnN0YWNrLnNwKTsKLQllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+dV9yZWdzW1VSRUdfRlBdKSwgJnVjLT5zdGFjay5mbGFncyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZ1Yy0+c3RhY2suc2l6ZSk7Ci0KLQkvKiBUaGUgcmVnaXN0ZXIgZmlsZSBpcyBub3Qgc2F2ZWQKLQkgKiB3ZSBoYXZlIGFscmVhZHkgc3R1ZmZlZCBhbGwgb2YgaXQgd2l0aCBzeW5jX3VzZXJfc3RhY2sKLQkgKi8KLQlyZXR1cm4gKGVyciA/IC1FRkFVTFQgOiAwKTsKLX0KLQotCi0vKiBTZXQgdGhlIGNvbnRleHQgZm9yIGEgc3ZyNCBhcHBsaWNhdGlvbiwgdGhpcyBpcyBTb2xhcmlzIHdheSB0byBzaWdyZXR1cm4gKi8KLWFzbWxpbmthZ2UgaW50IHN2cjRfc2V0Y29udGV4dChzdnI0X3Vjb250ZXh0X3QgX191c2VyICpjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdnI0X2dyZWdzZXRfdCAgX191c2VyICpncjsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzOwotCXUzMiBwYywgbnBjLCBwc3IsIHVfc3Nfc3A7Ci0Jc2lnc2V0X3Qgc2V0OwotCXN2cjRfc2lnc2V0X3Qgc2V0djsKLQlpbnQgaSwgZXJyOwotCXN0YWNrX3Qgc3Q7Ci0JCi0JLyogRml4bWU6IHJlc3RvcmUgd2luZG93cywgb3IgaXMgdGhpcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgaW4KLQkgKiBzdnI0X3NldHVwX2ZyYW1lIHdoZW4gc3luY191c2VyX3dpbmRvd3MgaXMgZG9uZT8KLQkgKi8KLQlmbHVzaF91c2VyX3dpbmRvd3MoKTsKLQkKLQlpZiAoZ2V0X3RocmVhZF93c2F2ZWQoKSkKLQkJZ290byBzaWdzZWd2OwotCi0JaWYgKCgodW5zaWduZWQgbG9uZykgYykgJiAzKXsKLQkJcHJpbnRrKCJVbmFsaWduZWQgc3RydWN0dXJlIHBhc3NlZFxuIik7Ci0JCWdvdG8gc2lnc2VndjsKLQl9Ci0KLQlpZiAoIV9fYWNjZXNzX29rKGMsIHNpemVvZigqYykpKSB7Ci0JCS8qIE1pZ3VlbCwgYWRkIG5pY2UgZGVidWdnaW5nIG1zZyBfaGVyZV8uIDstKSAqLwotCQlnb3RvIHNpZ3NlZ3Y7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIHZhbGlkIFBDIGFuZCBuUEMgKi8KLQlnciA9ICZjLT5tY29udGV4dC5ncmVnOwotCWVyciA9IF9fZ2V0X3VzZXIocGMsICYoKCpncilbU1ZSNF9QQ10pKTsKLQllcnIgfD0gX19nZXRfdXNlcihucGMsICYoKCpncilbU1ZSNF9OUENdKSk7Ci0JaWYgKChwYyB8IG5wYykgJiAzKQotCQlnb3RvIHNpZ3NlZ3Y7Ci0JCi0JLyogUmV0cmlldmUgaW5mb3JtYXRpb24gZnJvbSBwYXNzZWQgdWNvbnRleHQgKi8KLQkvKiBub3RlIHRoYXQgblBDIGlzIG9yZWQgYSAxLCB0aGlzIGlzIHVzZWQgdG8gaW5mb3JtIGVudHJ5LlMgKi8KLQkvKiB0aGF0IHdlIGRvbid0IHdhbnQgaXQgdG8gbWVzcyB3aXRoIG91ciBQQyBhbmQgblBDICovCi0JCi0JZXJyIHw9IGNvcHlfZnJvbV91c2VyKCZzZXR2LCAmYy0+c2lnbWFzaywgc2l6ZW9mKHN2cjRfc2lnc2V0X3QpKTsKLQlzZXQuc2lnWzBdID0gc2V0di5zaWdiaXRzWzBdIHwgKCgobG9uZylzZXR2LnNpZ2JpdHNbMV0pIDw8IDMyKTsKLQlpZiAoX05TSUdfV09SRFMgPj0gMikKLQkJc2V0LnNpZ1sxXSA9IHNldHYuc2lnYml0c1syXSB8ICgoKGxvbmcpc2V0di5zaWdiaXRzWzNdKSA8PCAzMik7Ci0JCi0JZXJyIHw9IF9fZ2V0X3VzZXIodV9zc19zcCwgJmMtPnN0YWNrLnNwKTsKLQlzdC5zc19zcCA9IGNvbXBhdF9wdHIodV9zc19zcCk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoc3Quc3NfZmxhZ3MsICZjLT5zdGFjay5mbGFncyk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoc3Quc3Nfc2l6ZSwgJmMtPnN0YWNrLnNpemUpOwotCWlmIChlcnIpCi0JCWdvdG8gc2lnc2VndjsKLQkJCi0JLyogSXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gYXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRoYW4gdG8KLQkgICBjYWxsIGl0IGFuZCBpZ25vcmUgZXJyb3JzLiAgKi8KLQlvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlkb19zaWdhbHRzdGFjaygoc3RhY2tfdCBfX3VzZXIgKikgJnN0LCBOVUxMLCByZWdzLT51X3JlZ3NbVVJFR19JNl0pOwotCXNldF9mcyhvbGRfZnMpOwotCQotCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOwotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXJlZ3MtPnRwYyA9IHBjOwotCXJlZ3MtPnRucGMgPSBucGMgfCAxOwotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKLQkJcmVncy0+dHBjICY9IDB4ZmZmZmZmZmY7Ci0JCXJlZ3MtPnRucGMgJj0gMHhmZmZmZmZmZjsKLQl9Ci0JZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+eSwgJigoKmdyKVtTVlI0X1ldKSk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIocHNyLCAmKCgqZ3IpW1NWUjRfUFNSXSkpOwotCXJlZ3MtPnRzdGF0ZSAmPSB+KFRTVEFURV9JQ0N8VFNUQVRFX1hDQyk7Ci0JcmVncy0+dHN0YXRlIHw9IHBzcl90b190c3RhdGVfaWNjKHBzcik7Ci0KLQkvKiBSZXN0b3JlIGdbMS4uN10gYW5kIG9bMC4uN10gcmVnaXN0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykKLQkJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+dV9yZWdzW1VSRUdfRzEraV0sICgmKCpncilbU1ZSNF9HMV0pK2kpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnVfcmVnc1tVUkVHX0kwK2ldLCAoJigqZ3IpW1NWUjRfTzBdKStpKTsKLQlpZiAoZXJyKQotCQlnb3RvIHNpZ3NlZ3Y7Ci0KLQlyZXR1cm4gLUVJTlRSOwotc2lnc2VndjoKLQlyZXR1cm4gLUVGQVVMVDsKLX0KLQogc3RhdGljIHZvaWQgc2V0dXBfcnRfZnJhbWUzMihzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBzaWduciwgc2lnc2V0X3QgKm9sZHNldCwKIAkJCSAgICAgc2lnaW5mb190ICppbmZvKQpAQCAtMTIxNiwyMCArOTQwLDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfc2lnbmFsMzIodW5zaWduZWQgbG9uZyBzaWduciwgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkJCQkgICBzaWdpbmZvX3QgKmluZm8sCi0JCQkJICAgc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJICAgaW50IHN2cjRfc2lnbmFsKQorCQkJCSAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWlmIChzdnI0X3NpZ25hbCkKLQkJc2V0dXBfc3ZyNF9mcmFtZTMyKCZrYS0+c2EsIHJlZ3MtPnRwYywgcmVncy0+dG5wYywKLQkJCQkgICByZWdzLCBzaWduciwgb2xkc2V0KTsKLQllbHNlIHsKLQkJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1NJR0lORk8pCi0JCQlzZXR1cF9ydF9mcmFtZTMyKGthLCByZWdzLCBzaWduciwgb2xkc2V0LCBpbmZvKTsKLQkJZWxzZSBpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVXU0lHTkFMUykpCi0JCQluZXdfc2V0dXBfZnJhbWUzMihrYSwgcmVncywgc2lnbnIsIG9sZHNldCk7Ci0JCWVsc2UKLQkJCXNldHVwX2ZyYW1lMzIoJmthLT5zYSwgcmVncywgc2lnbnIsIG9sZHNldCwgaW5mbyk7Ci0JfQorCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQorCQlzZXR1cF9ydF9mcmFtZTMyKGthLCByZWdzLCBzaWduciwgb2xkc2V0LCBpbmZvKTsKKwllbHNlIGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9ORVdTSUdOQUxTKSkKKwkJbmV3X3NldHVwX2ZyYW1lMzIoa2EsIHJlZ3MsIHNpZ25yLCBvbGRzZXQpOworCWVsc2UKKwkJc2V0dXBfZnJhbWUzMigma2EtPnNhLCByZWdzLCBzaWduciwgb2xkc2V0LCBpbmZvKTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlzaWdvcnNldHMoJmN1cnJlbnQtPmJsb2NrZWQsJmN1cnJlbnQtPmJsb2NrZWQsJmthLT5zYS5zYV9tYXNrKTsKIAlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT01BU0spKQpAQCAtMTI3MCw3ICs5ODgsNiBAQAogCXN0cnVjdCBzaWduYWxfZGVsaXZlcl9jb29raWUgY29va2llOwogCXN0cnVjdCBrX3NpZ2FjdGlvbiBrYTsKIAlpbnQgc2lnbnI7Ci0JaW50IHN2cjRfc2lnbmFsID0gY3VycmVudC0+cGVyc29uYWxpdHkgPT0gUEVSX1NWUjQ7CiAJCiAJY29va2llLnJlc3RhcnRfc3lzY2FsbCA9IHJlc3RhcnRfc3lzY2FsbDsKIAljb29raWUub3JpZ19pMCA9IG9yaWdfaTA7CkBAIC0xMjc5LDggKzk5Niw3IEBACiAJaWYgKHNpZ25yID4gMCkgewogCQlpZiAoY29va2llLnJlc3RhcnRfc3lzY2FsbCkKIAkJCXN5c2NhbGxfcmVzdGFydDMyKG9yaWdfaTAsIHJlZ3MsICZrYS5zYSk7Ci0JCWhhbmRsZV9zaWduYWwzMihzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LAotCQkJCXJlZ3MsIHN2cjRfc2lnbmFsKTsKKwkJaGFuZGxlX3NpZ25hbDMyKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MpOwogCiAJCS8qIGEgc2lnbmFsIHdhcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkOyB0aGUgc2F2ZWQKIAkJICogc2lnbWFzayB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHNpZ25hbCBmcmFtZSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCmluZGV4IGE4MDUyYjcuLjU5ZjAyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHNtcC5jOiBTcGFyYzY0IFNNUCBzdXBwb3J0LgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NywgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDcsIDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogI2luY2x1ZGUgPGFzbS9odnRyYW1wLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CkBAIC04Niw3ICs4Nyw3IEBACiAKIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNhbGxpbl9mbGFnID0gMDsKIAotdm9pZCBfX2RldmluaXQgc21wX2NhbGxpbih2b2lkKQordm9pZCBfX2NwdWluaXQgc21wX2NhbGxpbih2b2lkKQogewogCWludCBjcHVpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC0yODQsMTQgKzI4NSwxNyBAQAogewogCWV4dGVybiB1bnNpZ25lZCBsb25nIHNwYXJjNjRfdHRhYmxlX3RsMDsKIAlleHRlcm4gdW5zaWduZWQgbG9uZyBrZXJuX2xvY2tlZF90dGVfZGF0YTsKLQlleHRlcm4gaW50IGJpZ2tlcm5lbDsKIAlzdHJ1Y3QgaHZ0cmFtcF9kZXNjciAqaGRlc2M7CiAJdW5zaWduZWQgbG9uZyB0cmFtcG9saW5lX3JhOwogCXN0cnVjdCB0cmFwX3Blcl9jcHUgKnRiOwogCXU2NCB0dGVfdmFkZHIsIHR0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgaHZfZXJyOworCWludCBpOwogCi0JaGRlc2MgPSBremFsbG9jKHNpemVvZigqaGRlc2MpLCBHRlBfS0VSTkVMKTsKKwloZGVzYyA9IGt6YWxsb2Moc2l6ZW9mKCpoZGVzYykgKworCQkJKHNpemVvZihzdHJ1Y3QgaHZ0cmFtcF9tYXBwaW5nKSAqCisJCQkgbnVtX2tlcm5lbF9pbWFnZV9tYXBwaW5ncyAtIDEpLAorCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFoZGVzYykgewogCQlwcmludGsoS0VSTl9FUlIgImxkb21fc3RhcnRjcHVfY3B1aWQ6IENhbm5vdCBhbGxvY2F0ZSAiCiAJCSAgICAgICAiaHZ0cmFtcF9kZXNjci5cbiIpOwpAQCAtMjk5LDcgKzMwMyw3IEBACiAJfQogCiAJaGRlc2MtPmNwdSA9IGNwdTsKLQloZGVzYy0+bnVtX21hcHBpbmdzID0gKGJpZ2tlcm5lbCA/IDIgOiAxKTsKKwloZGVzYy0+bnVtX21hcHBpbmdzID0gbnVtX2tlcm5lbF9pbWFnZV9tYXBwaW5nczsKIAogCXRiID0gJnRyYXBfYmxvY2tbY3B1XTsKIAl0Yi0+aGRlc2MgPSBoZGVzYzsKQEAgLTMxMiwxMyArMzE2LDExIEBACiAJdHRlX3ZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIEtFUk5CQVNFOwogCXR0ZV9kYXRhID0ga2Vybl9sb2NrZWRfdHRlX2RhdGE7CiAKLQloZGVzYy0+bWFwc1swXS52YWRkciA9IHR0ZV92YWRkcjsKLQloZGVzYy0+bWFwc1swXS50dGUgICA9IHR0ZV9kYXRhOwotCWlmIChiaWdrZXJuZWwpIHsKKwlmb3IgKGkgPSAwOyBpIDwgaGRlc2MtPm51bV9tYXBwaW5nczsgaSsrKSB7CisJCWhkZXNjLT5tYXBzW2ldLnZhZGRyID0gdHRlX3ZhZGRyOworCQloZGVzYy0+bWFwc1tpXS50dGUgICA9IHR0ZV9kYXRhOwogCQl0dGVfdmFkZHIgKz0gMHg0MDAwMDA7CiAJCXR0ZV9kYXRhICArPSAweDQwMDAwMDsKLQkJaGRlc2MtPm1hcHNbMV0udmFkZHIgPSB0dGVfdmFkZHI7Ci0JCWhkZXNjLT5tYXBzWzFdLnR0ZSAgID0gdHRlX2RhdGE7CiAJfQogCiAJdHJhbXBvbGluZV9yYSA9IGtpbWFnZV9hZGRyX3RvX3JhKGh2X2NwdV9zdGFydHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKaW5kZXggNjhkYjA4OS4uMzg3MzY0NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKQEAgLTMzLDEzICszMywxMSBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaWRwcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3N2cjQuaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL2hlYWQuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL21vc3Rlay5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdW1hY3JvLmg+CkBAIC03MywyNiArNzEsMTggQEAKIGV4dGVybiB2b2lkIGxpbnV4X3NwYXJjX3N5c2NhbGwodm9pZCk7CiBleHRlcm4gdm9pZCBydHJhcCh2b2lkKTsKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKLWV4dGVybiB2b2lkIHNvbGFyaXNfc3lzY2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIHN5c2NhbGxfdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKiwgaW50KTsKLWV4dGVybiB1MzIgc3Vub3Nfc3lzX3RhYmxlW10sIHN5c19jYWxsX3RhYmxlMzJbXTsKLWV4dGVybiB2b2lkIHRsMF9zb2xhcmlzKHZvaWQpOwogZXh0ZXJuIHZvaWQgc3lzX3NpZ3N1c3BlbmQodm9pZCk7Ci1leHRlcm4gaW50IHN2cjRfZ2V0Y29udGV4dChzdnI0X3Vjb250ZXh0X3QgKnVjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IHN2cjRfc2V0Y29udGV4dChzdnI0X3Vjb250ZXh0X3QgKnVjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gaW50IGNvbXBhdF9zeXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKTsKIGV4dGVybiBpbnQgKCpoYW5kbGVfbWF0aGVtdSkoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGZwdXN0YXRlICopOwogZXh0ZXJuIGxvbmcgc3BhcmMzMl9vcGVuKGNvbnN0IGNoYXIgX191c2VyICogZmlsZW5hbWUsIGludCBmbGFncywgaW50IG1vZGUpOwogZXh0ZXJuIGludCBpb19yZW1hcF9wZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwKIAl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKLWV4dGVybiB2b2lkICgqcHJvbV9wYWxldHRlKShpbnQpOwogCiBleHRlcm4gaW50IF9fYXNocmRpMyhpbnQsIGludCk7CiAKIGV4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICogcmVncywgZWxmX2ZwcmVnc2V0X3QgKiBmcHJlZ3MpOwogCi1leHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107Ci0KIGV4dGVybiB2b2lkIHhvcl92aXNfMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gdm9pZCB4b3JfdmlzXzModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgKik7CkBAIC0xMzEsMTIgKzEyMSw2IEBACiAKIEVYUE9SVF9TWU1CT0woc3BhcmM2NF9nZXRfY2xvY2tfdGljayk7CiAKLS8qIHNlbWFwaG9yZXMgKi8KLUVYUE9SVF9TWU1CT0woZG93bik7Ci1FWFBPUlRfU1lNQk9MKGRvd25fdHJ5bG9jayk7Ci1FWFBPUlRfU1lNQk9MKGRvd25faW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MKHVwKTsKLQogLyogUlcgc2VtYXBob3JlcyAqLwogRVhQT1JUX1NZTUJPTChfX2Rvd25fcmVhZCk7CiBFWFBPUlRfU1lNQk9MKF9fZG93bl9yZWFkX3RyeWxvY2spOwpAQCAtMjIwLDExICsyMDQsNiBAQAogLyogSS9PIGRldmljZSBtbWFwaW5nIG9uIFNwYXJjNjQuICovCiBFWFBPUlRfU1lNQk9MKGlvX3JlbWFwX3Bmbl9yYW5nZSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpICYmIGRlZmluZWQoQ09ORklHX05FVCkKLS8qIFNvbGFyaXMvU3VuT1MgYmluYXJ5IGNvbXBhdGliaWxpdHkgKi8KLUVYUE9SVF9TWU1CT0wodmVyaWZ5X2NvbXBhdF9pb3ZlYyk7Ci0jZW5kaWYKLQogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiBFWFBPUlRfU1lNQk9MKHB1dF9mc19zdHJ1Y3QpOwogCkBAIC0yNjEsMzAgKzI0MCw2IEBACiBFWFBPUlRfU1lNQk9MKF9fc3RybGVuX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfX3N0cm5sZW5fdXNlcik7CiAKLSNpZmRlZiBDT05GSUdfU09MQVJJU19FTVVMX01PRFVMRQotRVhQT1JUX1NZTUJPTChsaW51eF9zcGFyY19zeXNjYWxsKTsKLUVYUE9SVF9TWU1CT0wocnRyYXApOwotRVhQT1JUX1NZTUJPTChzaG93X3JlZ3MpOwotRVhQT1JUX1NZTUJPTChzb2xhcmlzX3N5c2NhbGwpOwotRVhQT1JUX1NZTUJPTChzeXNjYWxsX3RyYWNlKTsKLUVYUE9SVF9TWU1CT0woc3Vub3Nfc3lzX3RhYmxlKTsKLUVYUE9SVF9TWU1CT0woc3lzX2NhbGxfdGFibGUzMik7Ci1FWFBPUlRfU1lNQk9MKHRsMF9zb2xhcmlzKTsKLUVYUE9SVF9TWU1CT0woc3lzX3NpZ3N1c3BlbmQpOwotRVhQT1JUX1NZTUJPTChzeXNfZ2V0cHBpZCk7Ci1FWFBPUlRfU1lNQk9MKHN5c19nZXRwaWQpOwotRVhQT1JUX1NZTUJPTChzeXNfZ2V0ZXVpZCk7Ci1FWFBPUlRfU1lNQk9MKHN5c19nZXR1aWQpOwotRVhQT1JUX1NZTUJPTChzeXNfZ2V0ZWdpZCk7Ci1FWFBPUlRfU1lNQk9MKHN5c2N0bF9ucl9vcGVuKTsKLUVYUE9SVF9TWU1CT0woc3lzX2dldGdpZCk7Ci1FWFBPUlRfU1lNQk9MKHN2cjRfZ2V0Y29udGV4dCk7Ci1FWFBPUlRfU1lNQk9MKHN2cjRfc2V0Y29udGV4dCk7Ci1FWFBPUlRfU1lNQk9MKGNvbXBhdF9zeXNfaW9jdGwpOwotRVhQT1JUX1NZTUJPTChzeXNfaW9jdGwpOwotRVhQT1JUX1NZTUJPTChzcGFyYzMyX29wZW4pOwotI2VuZGlmCi0KIC8qIFNwZWNpYWwgaW50ZXJuYWwgdmVyc2lvbnMgb2YgbGlicmFyeSBmdW5jdGlvbnMuICovCiBFWFBPUlRfU1lNQk9MKF9jbGVhcl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woY2xlYXJfdXNlcl9wYWdlKTsKQEAgLTM0MSw5ICsyOTYsNiBAQAogLyogZm9yIG5zODcwMyAqLwogRVhQT1JUX1NZTUJPTChuczg3MzAzX2xvY2spOwogCi0vKiBmb3Igc29sYXJpcyBjb21wYXQgbW9kdWxlICovCi1FWFBPUlRfU1lNQk9MX0dQTChzeXNfY2FsbF90YWJsZSk7Ci0KIEVYUE9SVF9TWU1CT0wodGlja19vcHMpOwogCiBFWFBPUlRfU1lNQk9MKHhvcl92aXNfMik7CkBAIC0zNTUsNSArMzA3LDMgQEAKIEVYUE9SVF9TWU1CT0woeG9yX25pYWdhcmFfMyk7CiBFWFBPUlRfU1lNQk9MKHhvcl9uaWFnYXJhXzQpOwogRVhQT1JUX1NZTUJPTCh4b3JfbmlhZ2FyYV81KTsKLQotRVhQT1JUX1NZTUJPTChwcm9tX3BhbGV0dGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCA0N2Y5MmE1Li44NGQzOWU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMiwxMyArMiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCiB2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKIAl1bnNpZ25lZCBsb25nIGtzcCwgZnAsIHRocmVhZF9iYXNlOwogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdHAgPSB0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpOwogCi0JZmx1c2h3X2FsbCgpOworCXN0YWNrX3RyYWNlX2ZsdXNoKCk7CisKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIm1vdgklJWZwLCAlMCIKIAkJOiAiPXIiIChrc3ApCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N1bm9zX2lvY3RsMzIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3Vub3NfaW9jdGwzMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWQyYmFkLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3Vub3NfaW9jdGwzMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLS8qICRJZDogc3Vub3NfaW9jdGwzMi5jLHYgMS4xMSAyMDAwLzA3LzMwIDIzOjEyOjI0IGRhdmVtIEV4cCAkCi0gKiBzdW5vc19pb2N0bDMyLmM6IFN1bk9TIGlvY3RsIGNvbXBhdGliaWxpdHkgb24gc3BhcmM2NC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAbnVjbGVjdS51bmFtLm14KQotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9yb3V0ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLQotI2RlZmluZSBTVU5PU19OUl9PUEVOCTI1NgotCi1zdHJ1Y3QgcnRlbnRyeTMyIHsKLSAgICAgICAgdTMyICAgCQlydF9wYWQxOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgcnRfZHN0OyAgICAgICAgIC8qIHRhcmdldCBhZGRyZXNzICAgICAgICAgICAgICAgKi8KLSAgICAgICAgc3RydWN0IHNvY2thZGRyIHJ0X2dhdGV3YXk7ICAgICAvKiBnYXRld2F5IGFkZHIgKFJURl9HQVRFV0FZKSAgICovCi0gICAgICAgIHN0cnVjdCBzb2NrYWRkciBydF9nZW5tYXNrOyAgICAgLyogdGFyZ2V0IG5ldHdvcmsgbWFzayAoSVApICAgICAqLwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgcnRfZmxhZ3M7Ci0gICAgICAgIHNob3J0ICAgICAgICAgICBydF9wYWQyOwotICAgICAgICB1MzIgICAJCXJ0X3BhZDM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICBydF90b3M7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICBydF9jbGFzczsKLSAgICAgICAgc2hvcnQgICAgICAgICAgIHJ0X3BhZDQ7Ci0gICAgICAgIHNob3J0ICAgICAgICAgICBydF9tZXRyaWM7ICAgICAgLyogKzEgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ISAqLwotICAgICAgICAvKiBjaGFyICogKi8gdTMyIHJ0X2RldjsgICAgICAgIC8qIGZvcmNpbmcgdGhlIGRldmljZSBhdCBhZGQgICAgKi8KLSAgICAgICAgdTMyICAgCQlydF9tdHU7ICAgICAgICAgLyogcGVyIHJvdXRlIE1UVS9XaW5kb3cgICAgICAgICAqLwotICAgICAgICB1MzIgICAJCXJ0X3dpbmRvdzsgICAgICAvKiBXaW5kb3cgY2xhbXBpbmcgICAgICAgICAgICAgICovCi0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBydF9pcnR0OyAgICAgICAgLyogSW5pdGlhbCBSVFQgICAgICAgICAgICAgICAgICAqLwotCi19OwotCi1zdHJ1Y3QgaWZtYXAzMiB7Ci0JdTMyIG1lbV9zdGFydDsKLQl1MzIgbWVtX2VuZDsKLQl1bnNpZ25lZCBzaG9ydCBiYXNlX2FkZHI7Ci0JdW5zaWduZWQgY2hhciBpcnE7Ci0JdW5zaWduZWQgY2hhciBkbWE7Ci0JdW5zaWduZWQgY2hhciBwb3J0OwotfTsKLQotc3RydWN0IGlmcmVxMzIgewotI2RlZmluZSBJRkhXQUREUkxFTiAgICAgNgotI2RlZmluZSBJRk5BTVNJWiAgICAgICAgMTYKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgIGNoYXIgICAgaWZybl9uYW1lW0lGTkFNU0laXTsgICAgICAgICAgICAvKiBpZiBuYW1lLCBlLmcuICJlbjAiICovCi0gICAgICAgIH0gaWZyX2lmcm47Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgIHNvY2thZGRyIGlmcnVfYWRkcjsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgIHNvY2thZGRyIGlmcnVfZHN0YWRkcjsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgIHNvY2thZGRyIGlmcnVfYnJvYWRhZGRyOwotICAgICAgICAgICAgICAgIHN0cnVjdCAgc29ja2FkZHIgaWZydV9uZXRtYXNrOwotICAgICAgICAgICAgICAgIHN0cnVjdCAgc29ja2FkZHIgaWZydV9od2FkZHI7Ci0gICAgICAgICAgICAgICAgc2hvcnQgICBpZnJ1X2ZsYWdzOwotICAgICAgICAgICAgICAgIGludCAgICAgaWZydV9pdmFsdWU7Ci0gICAgICAgICAgICAgICAgaW50ICAgICBpZnJ1X210dTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgIGlmbWFwMzIgaWZydV9tYXA7Ci0gICAgICAgICAgICAgICAgY2hhciAgICBpZnJ1X3NsYXZlW0lGTkFNU0laXTsgICAvKiBKdXN0IGZpdHMgdGhlIHNpemUgKi8KLSAgICAgICAgICAgICAgICBjb21wYXRfY2FkZHJfdCBpZnJ1X2RhdGE7Ci0gICAgICAgIH0gaWZyX2lmcnU7Ci19OwotCi1zdHJ1Y3QgaWZjb25mMzIgewotICAgICAgICBpbnQgICAgIGlmY19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgICAgICAgKi8KLSAgICAgICAgY29tcGF0X2NhZGRyX3QgIGlmY2J1ZjsKLX07Ci0KLWV4dGVybiBhc21saW5rYWdlIGludCBjb21wYXRfc3lzX2lvY3RsKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1MzIpOwotCi1hc21saW5rYWdlIGludCBzdW5vc19pb2N0bCAoaW50IGZkLCB1MzIgY21kLCB1MzIgYXJnKQotewotCWludCByZXQgPSAtRUJBREY7Ci0KLQlpZihmZCA+PSBTVU5PU19OUl9PUEVOKQotCQlnb3RvIG91dDsKLQlpZighZmNoZWNrKGZkKSkKLQkJZ290byBvdXQ7Ci0KLQlpZihjbWQgPT0gVElPQ1NFVEQpIHsKLQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCQlpbnQgX191c2VyICpwOwotCQlpbnQgbnR0eSA9IE5fVFRZOwotCQlpbnQgdG1wOwotCi0JCXAgPSAoaW50IF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgYXJnOwotCQlyZXQgPSAtRUZBVUxUOwotCQlpZihnZXRfdXNlcih0bXAsIHApKQotCQkJZ290byBvdXQ7Ci0JCWlmKHRtcCA9PSAyKSB7Ci0JCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJCXJldCA9IHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZykgJm50dHkpOwotCQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCQlyZXQgPSAocmV0ID09IC1FSU5WQUwgPyAtRU9QTk9UU1VQUCA6IHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQlpZihjbWQgPT0gVElPQ05PVFRZKSB7Ci0JCXJldCA9IHN5c19zZXRzaWQoKTsKLQkJZ290byBvdXQ7Ci0JfQotCXN3aXRjaChjbWQpIHsKLQljYXNlIF9JT1coJ3InLCAxMCwgc3RydWN0IHJ0ZW50cnkzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NBRERSVCwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XKCdyJywgMTEsIHN0cnVjdCBydGVudHJ5MzIpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DREVMUlQsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCi0JY2FzZSBfSU9XKCdpJywgMTIsIHN0cnVjdCBpZnJlcTMyKToKLQkJcmV0ID0gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ1NJRkFERFIsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPV1IoJ2knLCAxMywgc3RydWN0IGlmcmVxMzIpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DR0lGQUREUiwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XKCdpJywgMTQsIHN0cnVjdCBpZnJlcTMyKToKLQkJcmV0ID0gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ1NJRkRTVEFERFIsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPV1IoJ2knLCAxNSwgc3RydWN0IGlmcmVxMzIpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DR0lGRFNUQUREUiwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XKCdpJywgMTYsIHN0cnVjdCBpZnJlcTMyKToKLQkJcmV0ID0gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ1NJRkZMQUdTLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1dSKCdpJywgMTcsIHN0cnVjdCBpZnJlcTMyKToKLQkJcmV0ID0gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1coJ2knLCAxOCwgc3RydWN0IGlmcmVxMzIpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0lGTUVNLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1dSKCdpJywgMTksIHN0cnVjdCBpZnJlcTMyKToKLQkJcmV0ID0gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0dJRk1FTSwgYXJnKTsKLQkJZ290byBvdXQ7Ci0KLQljYXNlIF9JT1dSKCdpJywgMjAsIHN0cnVjdCBpZmNvbmYzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZDT05GLCBhcmcpOwotCQlnb3RvIG91dDsKLQotCWNhc2UgX0lPVygnaScsIDIxLCBzdHJ1Y3QgaWZyZXEzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NTSUZNVFUsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCi0JY2FzZSBfSU9XUignaScsIDIyLCBzdHJ1Y3QgaWZyZXEzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZNVFUsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCi0JY2FzZSBfSU9XUignaScsIDIzLCBzdHJ1Y3QgaWZyZXEzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZCUkRBRERSLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1coJ2knLCAyNCwgc3RydWN0IGlmcmVxMzIpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0lGQlJEQUREUiwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XUignaScsIDI1LCBzdHJ1Y3QgaWZyZXEzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZORVRNQVNLLCBhcmcpOwotCQlnb3RvIG91dDsKLQljYXNlIF9JT1coJ2knLCAyNiwgc3RydWN0IGlmcmVxMzIpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0lGTkVUTUFTSywgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XUignaScsIDI3LCBzdHJ1Y3QgaWZyZXEzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZNRVRSSUMsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDI4LCBzdHJ1Y3QgaWZyZXEzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NTSUZNRVRSSUMsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCi0JY2FzZSBfSU9XKCdpJywgMzAsIHN0cnVjdCBhcnByZXEpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0FSUCwgYXJnKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBfSU9XUignaScsIDMxLCBzdHJ1Y3QgYXJwcmVxKToKLQkJcmV0ID0gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0dBUlAsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDMyLCBzdHJ1Y3QgYXJwcmVxKToKLQkJcmV0ID0gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0RBUlAsIGFyZyk7Ci0JCWdvdG8gb3V0OwotCi0JY2FzZSBfSU9XKCdpJywgNDAsIHN0cnVjdCBpZnJlcTMyKTogLyogU0lPQ1VQUEVSICovCi0JY2FzZSBfSU9XKCdpJywgNDEsIHN0cnVjdCBpZnJlcTMyKTogLyogU0lPQ0xPV0VSICovCi0JY2FzZSBfSU9XKCdpJywgNDQsIHN0cnVjdCBpZnJlcTMyKTogLyogU0lPQ1NFVFNZTkMgKi8KLQljYXNlIF9JT1coJ2knLCA0NSwgc3RydWN0IGlmcmVxMzIpOiAvKiBTSU9DR0VUU1lOQyAqLwotCWNhc2UgX0lPVygnaScsIDQ2LCBzdHJ1Y3QgaWZyZXEzMik6IC8qIFNJT0NTU0RTVEFUUyAqLwotCWNhc2UgX0lPVygnaScsIDQ3LCBzdHJ1Y3QgaWZyZXEzMik6IC8qIFNJT0NTU0VTVEFUUyAqLwotCWNhc2UgX0lPVygnaScsIDQ4LCBzdHJ1Y3QgaWZyZXEzMik6IC8qIFNJT0NTUFJPTUlTQyAqLwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0KLQljYXNlIF9JT1coJ2knLCA0OSwgc3RydWN0IGlmcmVxMzIpOgotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DQURETVVMVEksIGFyZyk7Ci0JCWdvdG8gb3V0OwotCWNhc2UgX0lPVygnaScsIDUwLCBzdHJ1Y3QgaWZyZXEzMik6Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NERUxNVUxUSSwgYXJnKTsKLQkJZ290byBvdXQ7Ci0KLQkvKiBGRERJIGludGVyZmFjZSBpb2N0bHMsIHVuc3VwcG9ydGVkLiAqLwotCQkKLQljYXNlIF9JT1coJ2knLCA1MSwgc3RydWN0IGlmcmVxMzIpOiAvKiBTSU9DRkRSRVNFVCAqLwotCWNhc2UgX0lPVygnaScsIDUyLCBzdHJ1Y3QgaWZyZXEzMik6IC8qIFNJT0NGRFNMRUVQICovCi0JY2FzZSBfSU9XKCdpJywgNTMsIHN0cnVjdCBpZnJlcTMyKTogLyogU0lPQ1NUUlRGTVdBUiAqLwotCWNhc2UgX0lPVygnaScsIDU0LCBzdHJ1Y3QgaWZyZXEzMik6IC8qIFNJT0NMRE5TVFJURlcgKi8KLQljYXNlIF9JT1coJ2knLCA1NSwgc3RydWN0IGlmcmVxMzIpOiAvKiBTSU9DR0VURkRTVEFUICovCi0JY2FzZSBfSU9XKCdpJywgNTYsIHN0cnVjdCBpZnJlcTMyKTogLyogU0lPQ0ZETk1JSU5UICovCi0JY2FzZSBfSU9XKCdpJywgNTcsIHN0cnVjdCBpZnJlcTMyKTogLyogU0lPQ0ZERVhVU0VSICovCi0JY2FzZSBfSU9XKCdpJywgNTgsIHN0cnVjdCBpZnJlcTMyKTogLyogU0lPQ0ZER05FVE1BUCAqLwotCWNhc2UgX0lPVygnaScsIDU5LCBzdHJ1Y3QgaWZyZXEzMik6IC8qIFNJT0NGREdJT0NUTCAqLwotCQlwcmludGsoIkZEREkgaW9jdGwsIHJldHVybmluZyBFT1BOT1RTVVBQXG4iKTsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCi0JY2FzZSBfSU9XKCd0JywgMTI1LCBpbnQpOgotCQkvKiBNb3JlIHN0dXBpZCB0dHkgc3Vub3MgaW9jdGxzLCBqdXN0Ci0JCSAqIHNheSBpdCB3b3JrZWQuCi0JCSAqLwotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKLQotCS8qIE5vbiBwb3NpeCBncnAgKi8KLQljYXNlIF9JT1coJ3QnLCAxMTgsIGludCk6IHsKLQkJaW50IG9sZHZhbCwgbmV3dmFsLCBfX3VzZXIgKnB0cjsKLQotCQljbWQgPSBUSU9DU1BHUlA7Ci0JCXB0ciA9IChpbnQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBhcmc7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWlmKGdldF91c2VyKG9sZHZhbCwgcHRyKSkKLQkJCWdvdG8gb3V0OwotCQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBjbWQsIGFyZyk7Ci0JCV9fZ2V0X3VzZXIobmV3dmFsLCBwdHIpOwotCQlpZihuZXd2YWwgPT0gLTEpIHsKLQkJCV9fcHV0X3VzZXIob2xkdmFsLCBwdHIpOwotCQkJcmV0ID0gLUVJTzsKLQkJfQotCQlpZihyZXQgPT0gLUVOT1RUWSkKLQkJCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWNhc2UgX0lPUigndCcsIDExOSwgaW50KTogewotCQlpbnQgb2xkdmFsLCBuZXd2YWwsIF9fdXNlciAqcHRyOwotCi0JCWNtZCA9IFRJT0NHUEdSUDsKLQkJcHRyID0gKGludCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGFyZzsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJaWYoZ2V0X3VzZXIob2xkdmFsLCBwdHIpKQotCQkJZ290byBvdXQ7Ci0JCXJldCA9IGNvbXBhdF9zeXNfaW9jdGwoZmQsIGNtZCwgYXJnKTsKLQkJX19nZXRfdXNlcihuZXd2YWwsIHB0cik7Ci0JCWlmKG5ld3ZhbCA9PSAtMSkgewotCQkJX19wdXRfdXNlcihvbGR2YWwsIHB0cik7Ci0JCQlyZXQgPSAtRUlPOwotCQl9Ci0JCWlmKHJldCA9PSAtRU5PVFRZKQotCQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCX07Ci0KLQlyZXQgPSBjb21wYXRfc3lzX2lvY3RsKGZkLCBjbWQsIGFyZyk7Ci0JLyogc28gc3R1cGlkLi4uICovCi0JcmV0ID0gKHJldCA9PSAtRUlOVkFMID8gLUVPUE5PVFNVUFAgOiByZXQpOwotb3V0OgotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYwppbmRleCAxMzRkODAxLi43M2VkMDFiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKQEAgLTEsNSArMSw0IEBACi0vKiAkSWQ6IHN5c19zcGFyYy5jLHYgMS41NyAyMDAyLzAyLzA5IDE5OjQ5OjMwIGRhdmVtIEV4cCAkCi0gKiBsaW51eC9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCisvKiBsaW51eC9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgcmFuZG9tIHN5c3RlbSBjYWxscyB0aGF0CiAgKiBoYXZlIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2Ugb24gdGhlIExpbnV4L3NwYXJjCkBAIC0zMCw2ICsyOSw5IEBACiAjaW5jbHVkZSA8YXNtL3BlcmZjdHIuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKKyNpbmNsdWRlICJlbnRyeS5oIgorI2luY2x1ZGUgInN5c3RibHMuaCIKKwogLyogI2RlZmluZSBERUJVR19VTklNUF9TWVNDQUxMICovCiAKIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfZ2V0cGFnZXNpemUodm9pZCkKQEAgLTQ0NSw3ICs0NDcsOCBAQAogCQkJZ290byBvdXQ7CiAJCWNhc2UgU0VNVElNRURPUDoKIAkJCWVyciA9IHN5c19zZW10aW1lZG9wKGZpcnN0LCBwdHIsICh1bnNpZ25lZClzZWNvbmQsCi0JCQkJKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKikgZmlmdGgpOworCQkJCShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopCisJCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGZpZnRoKTsKIAkJCWdvdG8gb3V0OwogCQljYXNlIFNFTUdFVDoKIAkJCWVyciA9IHN5c19zZW1nZXQoZmlyc3QsIChpbnQpc2Vjb25kLCAoaW50KXRoaXJkKTsKQEAgLTcxNyw0NCArNzIwLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1hc21saW5rYWdlIGxvbmcgc29sYXJpc19zeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0YXRpYyBpbnQgY291bnQ7Ci0KLQlyZWdzLT50cGMgPSByZWdzLT50bnBjOwotCXJlZ3MtPnRucGMgKz0gNDsKLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7Ci0JCXJlZ3MtPnRwYyAmPSAweGZmZmZmZmZmOwotCQlyZWdzLT50bnBjICY9IDB4ZmZmZmZmZmY7Ci0JfQotCWlmICgrK2NvdW50IDw9IDUpIHsKLQkJcHJpbnRrICgiRm9yIFNvbGFyaXMgYmluYXJ5IGVtdWxhdGlvbiB5b3UgbmVlZCBzb2xhcmlzIG1vZHVsZSBsb2FkZWRcbiIpOwotCQlzaG93X3JlZ3MgKHJlZ3MpOwotCX0KLQlzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAxKTsKLQotCXJldHVybiAtRU5PU1lTOwotfQotCi0jaWZuZGVmIENPTkZJR19TVU5PU19FTVVMCi1hc21saW5rYWdlIGxvbmcgc3Vub3Nfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdGF0aWMgaW50IGNvdW50OwotCi0JcmVncy0+dHBjID0gcmVncy0+dG5wYzsKLQlyZWdzLT50bnBjICs9IDQ7Ci0JaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgewotCQlyZWdzLT50cGMgJj0gMHhmZmZmZmZmZjsKLQkJcmVncy0+dG5wYyAmPSAweGZmZmZmZmZmOwotCX0KLQlpZiAoKytjb3VudCA8PSAyMCkKLQkJcHJpbnRrICgiU3VuT1MgYmluYXJ5IGVtdWxhdGlvbiBub3QgY29tcGlsZWQgaW5cbiIpOwotCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKLQotCXJldHVybiAtRU5PU1lTOwotfQotI2VuZGlmCi0KIGFzbWxpbmthZ2UgbG9uZyBzeXNfdXRyYXBfaW5zdGFsbCh1dHJhcF9lbnRyeV90IHR5cGUsCiAJCQkJICB1dHJhcF9oYW5kbGVyX3QgbmV3X3AsCiAJCQkJICB1dHJhcF9oYW5kbGVyX3QgbmV3X2QsCkBAIC03ODgsNyArNzUzLDcgQEAKIAl9IGVsc2UgewogCQlpZiAoKHV0cmFwX2hhbmRsZXJfdCljdXJyZW50X3RocmVhZF9pbmZvKCktPnV0cmFwc1t0eXBlXSAhPSBuZXdfcCAmJgogCQkgICAgY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHNbMF0gPiAxKSB7Ci0JCQlsb25nICpwID0gY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHM7CisJCQl1bnNpZ25lZCBsb25nICpwID0gY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHM7CiAKIAkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzID0KIAkJCQlrbWFsbG9jKChVVF9UUkFQX0lOU1RSVUNUSU9OXzMxKzEpKnNpemVvZihsb25nKSwKQEAgLTgxNiw3ICs3ODEsOCBAQAogCXJldHVybiAwOwogfQogCi1sb25nIHNwYXJjX21lbW9yeV9vcmRlcmluZyh1bnNpZ25lZCBsb25nIG1vZGVsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2UgbG9uZyBzcGFyY19tZW1vcnlfb3JkZXJpbmcodW5zaWduZWQgbG9uZyBtb2RlbCwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpZiAobW9kZWwgPj0gMykKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggZGVhYmEyYi4uYzFhNjFlOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwpAQCAtNTUsNyArNTUsNiBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdW1hY3JvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9jb21wYXRfc2lnbmFsLmg+CiAKQEAgLTY3OCw5ICs2NzcsNiBAQAogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF0gPSAwOwogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF0gPSAwOwogCQlyZWdzLT50c3RhdGUgJj0gflRTVEFURV9QRUY7Ci0JCXRhc2tfbG9jayhjdXJyZW50KTsKLQkJY3VycmVudC0+cHRyYWNlICY9IH5QVF9EVFJBQ0U7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwogCX0KIG91dDoKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYzIyZDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM1OSArMCwwIEBACi0vKiAkSWQ6IHN5c19zdW5vczMyLmMsdiAxLjY0IDIwMDIvMDIvMDkgMTk6NDk6MzEgZGF2ZW0gRXhwICQKLSAqIHN5c19zdW5vczMyLmM6IFN1bk9TIGJpbmFyeSBjb21wYXRpYmlsaXR5IGxheWVyIG9uIHNwYXJjNjQuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5NSBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEBudWNsZWN1LnVuYW0ubXgpCi0gKgotICogQmFzZWQgdXBvbiBwcmVsaW1pbmFyeSB3b3JrIHdoaWNoIGlzOgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBBZHJpYW4gTS4gUm9kcmlndWV6IChhZHJpYW5AcmVtdXMucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0jaW5jbHVkZSA8bGludXgvc2htLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNnLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGNvbmYuaD4KLSNpbmNsdWRlIDxhc20vaWRwcm9tLmg+IC8qIGZvciBnZXRob3N0aWQoKSAqLwotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2NvbXBhdF9zaWduYWwuaD4KLQotLyogRm9yIHRoZSBuZnMgbW91bnQgZW11bGF0aW9uICovCi0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzX21vdW50Lmg+Ci0KLS8qIGZvciBzdW5vc19zZWxlY3QgKi8KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLQotLyogRm9yIFNPQ0tFVF9JICovCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLSNpbmNsdWRlIDxuZXQvY29tcGF0Lmg+Ci0KLSNkZWZpbmUgU1VOT1NfTlJfT1BFTgkyNTYKLQotYXNtbGlua2FnZSB1MzIgc3Vub3NfbW1hcCh1MzIgYWRkciwgdTMyIGxlbiwgdTMyIHByb3QsIHUzMiBmbGFncywgdTMyIGZkLCB1MzIgb2ZmKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHJldHZhbCwgcmV0X3R5cGU7Ci0KLQlpZiAoZmxhZ3MgJiBNQVBfTk9SRVNFUlZFKSB7Ci0JCXN0YXRpYyBpbnQgY250OwotCQlpZiAoY250KysgPCAxMCkKLQkJCXByaW50aygiJXM6ICB1bmltcGxlbWVudGVkIFN1bk9TIE1BUF9OT1JFU0VSVkUgbW1hcCgpIGZsYWdcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSk7Ci0JCWZsYWdzICY9IH5NQVBfTk9SRVNFUlZFOwotCX0KLQlyZXR2YWwgPSAtRUJBREY7Ci0JaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgewotCQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKLQkJaWYgKGZkID49IFNVTk9TX05SX09QRU4pCi0JCQlnb3RvIG91dDsKLSAJCWZpbGUgPSBmZ2V0KGZkKTsKLQkJaWYgKCFmaWxlKQotCQkJZ290byBvdXQ7Ci0JCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKGltYWpvcihpbm9kZSkgPT0gTUVNX01BSk9SICYmIGltaW5vcihpbm9kZSkgPT0gNSkgewotCQkJZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUzsKLQkJCWZwdXQoZmlsZSk7Ci0JCQlmaWxlID0gTlVMTDsKLQkJfQotCX0KLQotCXJldHZhbCA9IC1FSU5WQUw7Ci0JaWYgKCEoZmxhZ3MgJiBNQVBfRklYRUQpKQotCQlhZGRyID0gMDsKLQllbHNlIGlmIChsZW4gPiAweGYwMDAwMDAwIHx8IGFkZHIgPiAweGYwMDAwMDAwIC0gbGVuKQotCQlnb3RvIG91dF9wdXRmOwotCXJldF90eXBlID0gZmxhZ3MgJiBfTUFQX05FVzsKLQlmbGFncyAmPSB+X01BUF9ORVc7Ci0KLQlmbGFncyAmPSB+KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklURSk7Ci0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyZXR2YWwgPSBkb19tbWFwKGZpbGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcpIGFkZHIsICh1bnNpZ25lZCBsb25nKSBsZW4sCi0JCQkgKHVuc2lnbmVkIGxvbmcpIHByb3QsICh1bnNpZ25lZCBsb25nKSBmbGFncywKLQkJCSAodW5zaWduZWQgbG9uZykgb2ZmKTsKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlpZiAoIXJldF90eXBlKQotCQlyZXR2YWwgPSAoKHJldHZhbCA8IDB4ZjAwMDAwMDApID8gMCA6IHJldHZhbCk7Ci1vdXRfcHV0ZjoKLQlpZiAoZmlsZSkKLQkJZnB1dChmaWxlKTsKLW91dDoKLQlyZXR1cm4gKHUzMikgcmV0dmFsOwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19tY3RsKHUzMiBhZGRyLCB1MzIgbGVuLCBpbnQgZnVuY3Rpb24sIHUzMiBhcmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX2Jyayh1MzIgYmFkZHIpCi17Ci0JaW50IGZyZWVwYWdlcywgcmV0dmFsID0gLUVOT01FTTsKLQl1bnNpZ25lZCBsb25nIHJsaW07Ci0JdW5zaWduZWQgbG9uZyBuZXdicmssIG9sZGJyaywgYnJrID0gKHVuc2lnbmVkIGxvbmcpIGJhZGRyOwotCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlpZiAoYnJrIDwgY3VycmVudC0+bW0tPmVuZF9jb2RlKQotCQlnb3RvIG91dDsKLQluZXdicmsgPSBQQUdFX0FMSUdOKGJyayk7Ci0Jb2xkYnJrID0gUEFHRV9BTElHTihjdXJyZW50LT5tbS0+YnJrKTsKLQlyZXR2YWwgPSAwOwotCWlmIChvbGRicmsgPT0gbmV3YnJrKSB7Ci0JCWN1cnJlbnQtPm1tLT5icmsgPSBicms7Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBBbHdheXMgYWxsb3cgc2hyaW5raW5nIGJyay4gKi8KLQlpZiAoYnJrIDw9IGN1cnJlbnQtPm1tLT5icmspIHsKLQkJY3VycmVudC0+bW0tPmJyayA9IGJyazsKLQkJZG9fbXVubWFwKGN1cnJlbnQtPm1tLCBuZXdicmssIG9sZGJyay1uZXdicmspOwotCQlnb3RvIG91dDsKLQl9Ci0JLyogQ2hlY2sgYWdhaW5zdCBybGltaXQgYW5kIHN0YWNrLi4gKi8KLQlyZXR2YWwgPSAtRU5PTUVNOwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOwotCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCi0JCXJsaW0gPSB+MDsKLQlpZiAoYnJrIC0gY3VycmVudC0+bW0tPmVuZF9jb2RlID4gcmxpbSkKLQkJZ290byBvdXQ7Ci0JLyogQ2hlY2sgYWdhaW5zdCBleGlzdGluZyBtbWFwIG1hcHBpbmdzLiAqLwotCWlmIChmaW5kX3ZtYV9pbnRlcnNlY3Rpb24oY3VycmVudC0+bW0sIG9sZGJyaywgbmV3YnJrK1BBR0VfU0laRSkpCi0JCWdvdG8gb3V0OwotCS8qIHN0dXBpZCBhbGdvcml0aG0gdG8gZGVjaWRlIGlmIHdlIGhhdmUgZW5vdWdoIG1lbW9yeTogd2hpbGUKLQkgKiBzaW1wbGUsIGl0IGhvcGVmdWxseSB3b3JrcyBpbiBtb3N0IG9idmlvdXMgY2FzZXMuLiBFYXN5IHRvCi0JICogZm9vbCBpdCwgYnV0IHRoaXMgc2hvdWxkIGNhdGNoIG1vc3QgbWlzdGFrZXMuCi0JICovCi0JZnJlZXBhZ2VzID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9QQUdFUyk7Ci0JZnJlZXBhZ2VzID4+PSAxOwotCWZyZWVwYWdlcyArPSBucl9mcmVlX3BhZ2VzKCk7Ci0JZnJlZXBhZ2VzICs9IG5yX3N3YXBfcGFnZXM7Ci0JZnJlZXBhZ2VzIC09IG51bV9waHlzcGFnZXMgPj4gNDsKLQlmcmVlcGFnZXMgLT0gKG5ld2Jyay1vbGRicmspID4+IFBBR0VfU0hJRlQ7Ci0JaWYgKGZyZWVwYWdlcyA8IDApCi0JCWdvdG8gb3V0OwotCS8qIE9rLCB3ZSBoYXZlIHByb2JhYmx5IGdvdCBlbm91Z2ggbWVtb3J5IC0gbGV0IGl0IHJpcC4gKi8KLQljdXJyZW50LT5tbS0+YnJrID0gYnJrOwotCWRvX2JyayhvbGRicmssIG5ld2Jyay1vbGRicmspOwotCXJldHZhbCA9IDA7Ci1vdXQ6Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotYXNtbGlua2FnZSB1MzIgc3Vub3Nfc2JyayhpbnQgaW5jcmVtZW50KQotewotCWludCBlcnJvciwgb2xkYnJrOwotCi0JLyogVGhpcyBzaG91bGQgZG8gaXQgaG9wZWZ1bGx5Li4uICovCi0Jb2xkYnJrID0gKGludCljdXJyZW50LT5tbS0+YnJrOwotCWVycm9yID0gc3Vub3NfYnJrKCgoaW50KSBjdXJyZW50LT5tbS0+YnJrKSArIGluY3JlbWVudCk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBvbGRicms7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1hc21saW5rYWdlIHUzMiBzdW5vc19zc3RrKGludCBpbmNyZW1lbnQpCi17Ci0JcHJpbnRrKCIlczogQ2FsbCB0byBzdW5vc19zc3RrKGluY3JlbWVudDwlZD4pIGlzIHVuc3VwcG9ydGVkXG4iLAotCSAgICAgICBjdXJyZW50LT5jb21tLCBpbmNyZW1lbnQpOwotCi0JcmV0dXJuICh1MzIpLTE7Ci19Ci0KLS8qIEdpdmUgaGludHMgdG8gdGhlIGtlcm5lbCBhcyB0byB3aGF0IHBhZ2luZyBzdHJhdGVneSB0byB1c2UuLi4KLSAqIENvbXBsZXRlbHkgYm9ndXMsIGRvbid0IHJlbWluZCBtZS4KLSAqLwotI2RlZmluZSBWQV9OT1JNQUwgICAgIDAgLyogTm9ybWFsIHZtIHVzYWdlIGV4cGVjdGVkICovCi0jZGVmaW5lIFZBX0FCTk9STUFMICAgMSAvKiBBYm5vcm1hbC9yYW5kb20gdm0gdXNhZ2UgcHJvYmFibGUgKi8KLSNkZWZpbmUgVkFfU0VRVUVOVElBTCAyIC8qIEFjY2Vzc2VzIHdpbGwgYmUgb2YgYSBzZXF1ZW50aWFsIG5hdHVyZSAqLwotI2RlZmluZSBWQV9JTlZBTElEQVRFIDMgLyogUGFnZSB0YWJsZSBlbnRyaWVzIHNob3VsZCBiZSBmbHVzaGVkID8/PyAqLwotc3RhdGljIGNoYXIgKnZzdHJpbmdzW10gPSB7Ci0JIlZBX05PUk1BTCIsCi0JIlZBX0FCTk9STUFMIiwKLQkiVkFfU0VRVUVOVElBTCIsCi0JIlZBX0lOVkFMSURBVEUiLAotfTsKLQotYXNtbGlua2FnZSB2b2lkIHN1bm9zX3ZhZHZpc2UodTMyIHN0cmF0ZWd5KQotewotCXN0YXRpYyBpbnQgY291bnQ7Ci0KLQkvKiBJIHdhbm5hIHNlZSB3aG8gdXNlcyB0aGlzLi4uICovCi0JaWYgKGNvdW50KysgPCA1KQotCQlwcmludGsoIiVzOiBBZHZpc2VzIHVzIHRvIHVzZSAlcyBwYWdpbmcgc3RyYXRlZ3lcbiIsCi0JCSAgICAgICBjdXJyZW50LT5jb21tLAotCQkgICAgICAgc3RyYXRlZ3kgPD0gMyA/IHZzdHJpbmdzW3N0cmF0ZWd5XSA6ICJCT0dVUyIpOwotfQotCi0vKiBUaGlzIGp1c3Qgd2FudHMgdGhlIHNvZnQgbGltaXQgKGllLiBybGltX2N1ciBlbGVtZW50KSBvZiB0aGUgUkxJTUlUX05PRklMRQotICogcmVzb3VyY2UgbGltaXQgYW5kIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHN1bm9zCi0gKiByZXZzLgotICovCi1hc21saW5rYWdlIGludCBzdW5vc19nZXRkdGFibGVzaXplKHZvaWQpCi17Ci0JcmV0dXJuIFNVTk9TX05SX09QRU47Ci19Ci0KLQotI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKLQotYXNtbGlua2FnZSB1MzIgc3Vub3Nfc2lnYmxvY2sodTMyIGJsa19tYXNrKQotewotCXUzMiBvbGQ7Ci0KLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlvbGQgPSAodTMyKSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKLQljdXJyZW50LT5ibG9ja2VkLnNpZ1swXSB8PSAoYmxrX21hc2sgJiBfQkxPQ0tBQkxFKTsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmV0dXJuIG9sZDsKLX0KLQotYXNtbGlua2FnZSB1MzIgc3Vub3Nfc2lnc2V0bWFzayh1MzIgbmV3bWFzaykKLXsKLQl1MzIgcmV0dmFsOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmV0dmFsID0gKHUzMikgY3VycmVudC0+YmxvY2tlZC5zaWdbMF07Ci0JY3VycmVudC0+YmxvY2tlZC5zaWdbMF0gPSAobmV3bWFzayAmIF9CTE9DS0FCTEUpOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiBTdW5PUyBnZXRkZW50cyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG5ld2VyIExpbnV4IChpQkNTMiBjb21wbGlhbnQpICAgICovCi0vKiBnZXRkZW50cyBzeXN0ZW0gY2FsbCwgdGhlIGZvcm1hdCBvZiB0aGUgc3RydWN0dXJlIGp1c3QgaGFzIGEgZGlmZmVyZW50ICovCi0vKiBsYXlvdXQgKGRfb2ZmK2RfaW5vIGluc3RlYWQgb2YgZF9pbm8rZF9vZmYpICovCi1zdHJ1Y3Qgc3Vub3NfZGlyZW50IHsKLSAgICBzMzIJCWRfb2ZmOwotICAgIHUzMgkJZF9pbm87Ci0gICAgdTE2CQlkX3JlY2xlbjsKLSAgICB1MTYJCWRfbmFtbGVuOwotICAgIGNoYXIJZF9uYW1lWzFdOwotfTsKLQotc3RydWN0IHN1bm9zX2RpcmVudF9jYWxsYmFjayB7Ci0gICAgc3RydWN0IHN1bm9zX2RpcmVudCBfX3VzZXIgKmN1cnI7Ci0gICAgc3RydWN0IHN1bm9zX2RpcmVudCBfX3VzZXIgKnByZXZpb3VzOwotICAgIGludCBjb3VudDsKLSAgICBpbnQgZXJyb3I7Ci19OwotCi0jZGVmaW5lIE5BTUVfT0ZGU0VUKGRlKSAoKGludCkgKChkZSktPmRfbmFtZSAtIChjaGFyIF9fdXNlciAqKSAoZGUpKSkKLSNkZWZpbmUgUk9VTkRfVVAoeCkgKCgoeCkrc2l6ZW9mKHMzMiktMSkgJiB+KHNpemVvZihzMzIpLTEpKQotCi1zdGF0aWMgaW50IHN1bm9zX2ZpbGxkaXIodm9pZCAqIF9fYnVmLCBjb25zdCBjaGFyICogbmFtZSwgaW50IG5hbWxlbiwKLQkJCSBsb2ZmX3Qgb2Zmc2V0LCBpbm9fdCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCi17Ci0Jc3RydWN0IHN1bm9zX2RpcmVudCBfX3VzZXIgKmRpcmVudDsKLQlzdHJ1Y3Qgc3Vub3NfZGlyZW50X2NhbGxiYWNrICogYnVmID0gKHN0cnVjdCBzdW5vc19kaXJlbnRfY2FsbGJhY2sgKikgX19idWY7Ci0JaW50IHJlY2xlbiA9IFJPVU5EX1VQKE5BTUVfT0ZGU0VUKGRpcmVudCkgKyBuYW1sZW4gKyAxKTsKLQl1MzIgZF9pbm87Ci0KLQlidWYtPmVycm9yID0gLUVJTlZBTDsJLyogb25seSB1c2VkIGlmIHdlIGZhaWwuLiAqLwotCWlmIChyZWNsZW4gPiBidWYtPmNvdW50KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkX2lubyA9IGlubzsKLQlpZiAoc2l6ZW9mKGRfaW5vKSA8IHNpemVvZihpbm8pICYmIGRfaW5vICE9IGlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JZGlyZW50ID0gYnVmLT5wcmV2aW91czsKLQlpZiAoZGlyZW50KQotCQlwdXRfdXNlcihvZmZzZXQsICZkaXJlbnQtPmRfb2ZmKTsKLQlkaXJlbnQgPSBidWYtPmN1cnI7Ci0JYnVmLT5wcmV2aW91cyA9IGRpcmVudDsKLQlwdXRfdXNlcihkX2lubywgJmRpcmVudC0+ZF9pbm8pOwotCXB1dF91c2VyKG5hbWxlbiwgJmRpcmVudC0+ZF9uYW1sZW4pOwotCXB1dF91c2VyKHJlY2xlbiwgJmRpcmVudC0+ZF9yZWNsZW4pOwotCWlmIChjb3B5X3RvX3VzZXIoZGlyZW50LT5kX25hbWUsIG5hbWUsIG5hbWxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCXB1dF91c2VyKDAsIGRpcmVudC0+ZF9uYW1lICsgbmFtbGVuKTsKLQlkaXJlbnQgPSAodm9pZCBfX3VzZXIgKikgZGlyZW50ICsgcmVjbGVuOwotCWJ1Zi0+Y3VyciA9IGRpcmVudDsKLQlidWYtPmNvdW50IC09IHJlY2xlbjsKLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3NfZ2V0ZGVudHModW5zaWduZWQgaW50IGZkLCB2b2lkIF9fdXNlciAqZGlyZW50LCBpbnQgY250KQotewotCXN0cnVjdCBmaWxlICogZmlsZTsKLQlzdHJ1Y3Qgc3Vub3NfZGlyZW50IF9fdXNlciAqbGFzdGRpcmVudDsKLQlzdHJ1Y3Qgc3Vub3NfZGlyZW50X2NhbGxiYWNrIGJ1ZjsKLQlpbnQgZXJyb3IgPSAtRUJBREY7Ci0KLQlpZiAoZmQgPj0gU1VOT1NfTlJfT1BFTikKLQkJZ290byBvdXQ7Ci0KLQlmaWxlID0gZmdldChmZCk7Ci0JaWYgKCFmaWxlKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoY250IDwgKHNpemVvZihzdHJ1Y3Qgc3Vub3NfZGlyZW50KSArIDI1NSkpCi0JCWdvdG8gb3V0X3B1dGY7Ci0KLQlidWYuY3VyciA9IChzdHJ1Y3Qgc3Vub3NfZGlyZW50IF9fdXNlciAqKSBkaXJlbnQ7Ci0JYnVmLnByZXZpb3VzID0gTlVMTDsKLQlidWYuY291bnQgPSBjbnQ7Ci0JYnVmLmVycm9yID0gMDsKLQotCWVycm9yID0gdmZzX3JlYWRkaXIoZmlsZSwgc3Vub3NfZmlsbGRpciwgJmJ1Zik7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBvdXRfcHV0ZjsKLQotCWxhc3RkaXJlbnQgPSBidWYucHJldmlvdXM7Ci0JZXJyb3IgPSBidWYuZXJyb3I7Ci0JaWYgKGxhc3RkaXJlbnQpIHsKLQkJcHV0X3VzZXIoZmlsZS0+Zl9wb3MsICZsYXN0ZGlyZW50LT5kX29mZik7Ci0JCWVycm9yID0gY250IC0gYnVmLmNvdW50OwotCX0KLQotb3V0X3B1dGY6Ci0JZnB1dChmaWxlKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIE9sZCBzdW5vcyBnZXRkaXJlbnRyaWVzLCBzZXZlcmVseSBicm9rZW4gY29tcGF0aWJpbGl0eSBzdHVmZiBoZXJlLiAqLwotc3RydWN0IHN1bm9zX2RpcmVudHJ5IHsKLSAgICB1MzIJCWRfaW5vOwotICAgIHUxNgkJZF9yZWNsZW47Ci0gICAgdTE2CQlkX25hbWxlbjsKLSAgICBjaGFyCWRfbmFtZVsxXTsKLX07Ci0KLXN0cnVjdCBzdW5vc19kaXJlbnRyeV9jYWxsYmFjayB7Ci0gICAgc3RydWN0IHN1bm9zX2RpcmVudHJ5IF9fdXNlciAqY3VycjsKLSAgICBzdHJ1Y3Qgc3Vub3NfZGlyZW50cnkgX191c2VyICpwcmV2aW91czsKLSAgICBpbnQgY291bnQ7Ci0gICAgaW50IGVycm9yOwotfTsKLQotc3RhdGljIGludCBzdW5vc19maWxsZGlyZW50cnkodm9pZCAqIF9fYnVmLCBjb25zdCBjaGFyICogbmFtZSwgaW50IG5hbWxlbiwKLQkJCSAgICAgIGxvZmZfdCBvZmZzZXQsIGlub190IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKLXsKLQlzdHJ1Y3Qgc3Vub3NfZGlyZW50cnkgX191c2VyICpkaXJlbnQ7Ci0Jc3RydWN0IHN1bm9zX2RpcmVudHJ5X2NhbGxiYWNrICogYnVmID0KLQkJKHN0cnVjdCBzdW5vc19kaXJlbnRyeV9jYWxsYmFjayAqKSBfX2J1ZjsKLQlpbnQgcmVjbGVuID0gUk9VTkRfVVAoTkFNRV9PRkZTRVQoZGlyZW50KSArIG5hbWxlbiArIDEpOwotCXUzMiBkX2lubzsKLQotCWJ1Zi0+ZXJyb3IgPSAtRUlOVkFMOwkvKiBvbmx5IHVzZWQgaWYgd2UgZmFpbC4uICovCi0JaWYgKHJlY2xlbiA+IGJ1Zi0+Y291bnQpCi0JCXJldHVybiAtRUlOVkFMOwotCWRfaW5vID0gaW5vOwotCWlmIChzaXplb2YoZF9pbm8pIDwgc2l6ZW9mKGlubykgJiYgZF9pbm8gIT0gaW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQlkaXJlbnQgPSBidWYtPnByZXZpb3VzOwotCWRpcmVudCA9IGJ1Zi0+Y3VycjsKLQlidWYtPnByZXZpb3VzID0gZGlyZW50OwotCXB1dF91c2VyKGRfaW5vLCAmZGlyZW50LT5kX2lubyk7Ci0JcHV0X3VzZXIobmFtbGVuLCAmZGlyZW50LT5kX25hbWxlbik7Ci0JcHV0X3VzZXIocmVjbGVuLCAmZGlyZW50LT5kX3JlY2xlbik7Ci0JaWYgKGNvcHlfdG9fdXNlcihkaXJlbnQtPmRfbmFtZSwgbmFtZSwgbmFtbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcHV0X3VzZXIoMCwgZGlyZW50LT5kX25hbWUgKyBuYW1sZW4pOwotCWRpcmVudCA9ICh2b2lkIF9fdXNlciAqKSBkaXJlbnQgKyByZWNsZW47Ci0JYnVmLT5jdXJyID0gZGlyZW50OwotCWJ1Zi0+Y291bnQgLT0gcmVjbGVuOwotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19nZXRkaXJlbnRyaWVzKHVuc2lnbmVkIGludCBmZCwKLQkJCQkgICB2b2lkIF9fdXNlciAqZGlyZW50LAotCQkJCSAgIGludCBjbnQsCi0JCQkJICAgdW5zaWduZWQgaW50IF9fdXNlciAqYmFzZXApCi17Ci0Jc3RydWN0IGZpbGUgKiBmaWxlOwotCXN0cnVjdCBzdW5vc19kaXJlbnRyeSBfX3VzZXIgKmxhc3RkaXJlbnQ7Ci0JaW50IGVycm9yID0gLUVCQURGOwotCXN0cnVjdCBzdW5vc19kaXJlbnRyeV9jYWxsYmFjayBidWY7Ci0KLQlpZiAoZmQgPj0gU1VOT1NfTlJfT1BFTikKLQkJZ290byBvdXQ7Ci0KLQlmaWxlID0gZmdldChmZCk7Ci0JaWYgKCFmaWxlKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoY250IDwgKHNpemVvZihzdHJ1Y3Qgc3Vub3NfZGlyZW50cnkpICsgMjU1KSkKLQkJZ290byBvdXRfcHV0ZjsKLQotCWJ1Zi5jdXJyID0gKHN0cnVjdCBzdW5vc19kaXJlbnRyeSBfX3VzZXIgKikgZGlyZW50OwotCWJ1Zi5wcmV2aW91cyA9IE5VTEw7Ci0JYnVmLmNvdW50ID0gY250OwotCWJ1Zi5lcnJvciA9IDA7Ci0KLQllcnJvciA9IHZmc19yZWFkZGlyKGZpbGUsIHN1bm9zX2ZpbGxkaXJlbnRyeSwgJmJ1Zik7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBvdXRfcHV0ZjsKLQotCWxhc3RkaXJlbnQgPSBidWYucHJldmlvdXM7Ci0JZXJyb3IgPSBidWYuZXJyb3I7Ci0JaWYgKGxhc3RkaXJlbnQpIHsKLQkJcHV0X3VzZXIoZmlsZS0+Zl9wb3MsIGJhc2VwKTsKLQkJZXJyb3IgPSBjbnQgLSBidWYuY291bnQ7Ci0JfQotCi1vdXRfcHV0ZjoKLQlmcHV0KGZpbGUpOwotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQotc3RydWN0IHN1bm9zX3V0c25hbWUgewotCWNoYXIgc25hbWVbOV07Ci0JY2hhciBubmFtZVs5XTsKLQljaGFyIG5uZXh0WzU2XTsKLQljaGFyIHJlbFs5XTsKLQljaGFyIHZlcls5XTsKLQljaGFyIG1hY2hbOV07Ci19OwotCi1hc21saW5rYWdlIGludCBzdW5vc191bmFtZShzdHJ1Y3Qgc3Vub3NfdXRzbmFtZSBfX3VzZXIgKm5hbWUpCi17Ci0JaW50IHJldDsKLQotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JcmV0ID0gY29weV90b191c2VyKCZuYW1lLT5zbmFtZVswXSwgJnV0c25hbWUoKS0+c3lzbmFtZVswXSwKLQkJCSAgIHNpemVvZihuYW1lLT5zbmFtZSkgLSAxKTsKLQlyZXQgfD0gY29weV90b191c2VyKCZuYW1lLT5ubmFtZVswXSwgJnV0c25hbWUoKS0+bm9kZW5hbWVbMF0sCi0JCQkgICAgc2l6ZW9mKG5hbWUtPm5uYW1lKSAtIDEpOwotCXJldCB8PSBwdXRfdXNlcignXDAnLCAmbmFtZS0+bm5hbWVbOF0pOwotCXJldCB8PSBjb3B5X3RvX3VzZXIoJm5hbWUtPnJlbFswXSwgJnV0c25hbWUoKS0+cmVsZWFzZVswXSwKLQkJCSAgICBzaXplb2YobmFtZS0+cmVsKSAtIDEpOwotCXJldCB8PSBjb3B5X3RvX3VzZXIoJm5hbWUtPnZlclswXSwgJnV0c25hbWUoKS0+dmVyc2lvblswXSwKLQkJCSAgICBzaXplb2YobmFtZS0+dmVyKSAtIDEpOwotCXJldCB8PSBjb3B5X3RvX3VzZXIoJm5hbWUtPm1hY2hbMF0sICZ1dHNuYW1lKCktPm1hY2hpbmVbMF0sCi0JCQkgICAgc2l6ZW9mKG5hbWUtPm1hY2gpIC0gMSk7Ci0JdXBfcmVhZCgmdXRzX3NlbSk7Ci0JcmV0dXJuIChyZXQgPyAtRUZBVUxUIDogMCk7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX25vc3lzKHZvaWQpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7Ci0Jc2lnaW5mb190IGluZm87Ci0Jc3RhdGljIGludCBjbnQ7Ci0KLQlyZWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5rcmVnczsKLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7Ci0JCXJlZ3MtPnRwYyAmPSAweGZmZmZmZmZmOwotCQlyZWdzLT50bnBjICY9IDB4ZmZmZmZmZmY7Ci0JfQotCWluZm8uc2lfc2lnbm8gPSBTSUdTWVM7Ci0JaW5mby5zaV9lcnJubyA9IDA7Ci0JaW5mby5zaV9jb2RlID0gX19TSV9GQVVMVHwweDEwMDsKLQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilyZWdzLT50cGM7Ci0JaW5mby5zaV90cmFwbm8gPSByZWdzLT51X3JlZ3NbVVJFR19HMV07Ci0Jc2VuZF9zaWdfaW5mbyhTSUdTWVMsICZpbmZvLCBjdXJyZW50KTsKLQlpZiAoY250KysgPCA0KSB7Ci0JCXByaW50aygiUHJvY2VzcyBtYWtlcyBuaV9zeXNjYWxsIG51bWJlciAlZCwgcmVnaXN0ZXIgZHVtcDpcbiIsCi0JCSAgICAgICAoaW50KSByZWdzLT51X3JlZ3NbVVJFR19HMV0pOwotCQlzaG93X3JlZ3MocmVncyk7Ci0JfQotCXJldHVybiAtRU5PU1lTOwotfQotCi0vKiBUaGlzIGlzIG5vdCBhIHJlYWwgYW5kIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIHlldCwganVzdCB0byBrZWVwCi0gKiB0aGUgZWFzeSBTdW5PUyBiaW5hcmllcyBoYXBweS4KLSAqLwotYXNtbGlua2FnZSBpbnQgc3Vub3NfZnBhdGhjb25mKGludCBmZCwgaW50IG5hbWUpCi17Ci0JaW50IHJldDsKLQotCXN3aXRjaChuYW1lKSB7Ci0JY2FzZSBfUENPTkZfTElOSzoKLQkJcmV0ID0gTElOS19NQVg7Ci0JCWJyZWFrOwotCWNhc2UgX1BDT05GX0NBTk9OOgotCQlyZXQgPSBNQVhfQ0FOT047Ci0JCWJyZWFrOwotCWNhc2UgX1BDT05GX0lOUFVUOgotCQlyZXQgPSBNQVhfSU5QVVQ7Ci0JCWJyZWFrOwotCWNhc2UgX1BDT05GX05BTUU6Ci0JCXJldCA9IE5BTUVfTUFYOwotCQlicmVhazsKLQljYXNlIF9QQ09ORl9QQVRIOgotCQlyZXQgPSBQQVRIX01BWDsKLQkJYnJlYWs7Ci0JY2FzZSBfUENPTkZfUElQRToKLQkJcmV0ID0gUElQRV9CVUY7Ci0JCWJyZWFrOwotCWNhc2UgX1BDT05GX0NIUkVTVFJJQ1Q6CQkvKiBYWFggSW52ZXN0aWdhdGUgWFhYICovCi0JCXJldCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgX1BDT05GX05PVFJVTkM6CQkvKiBYWFggSW52ZXN0aWdhdGUgWFhYICovCi0JY2FzZSBfUENPTkZfVkRJU0FCTEU6Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19wYXRoY29uZih1MzIgdV9wYXRoLCBpbnQgbmFtZSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc3Vub3NfZnBhdGhjb25mKDAsIG5hbWUpOyAvKiBYWFggY2hlZXNlIFhYWCAqLwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3NlbGVjdChpbnQgd2lkdGgsIHUzMiBpbnAsIHUzMiBvdXRwLCB1MzIgZXhwLCB1MzIgdHZwX3gpCi17Ci0JaW50IHJldDsKLQotCS8qIFN1bk9TIGJpbmFyaWVzIGV4cGVjdCB0aGF0IHNlbGVjdCB3b24ndCBjaGFuZ2UgdGhlIHR2cCBjb250ZW50cyAqLwotCXJldCA9IGNvbXBhdF9zeXNfc2VsZWN0KHdpZHRoLCBjb21wYXRfcHRyKGlucCksIGNvbXBhdF9wdHIob3V0cCksCi0JCQkJY29tcGF0X3B0cihleHApLCBjb21wYXRfcHRyKHR2cF94KSk7Ci0JaWYgKHJldCA9PSAtRUlOVFIgJiYgdHZwX3gpIHsKLQkJc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHZwID0gY29tcGF0X3B0cih0dnBfeCk7Ci0JCXRpbWVfdCBzZWMsIHVzZWM7Ci0KLQkJX19nZXRfdXNlcihzZWMsICZ0dnAtPnR2X3NlYyk7Ci0JCV9fZ2V0X3VzZXIodXNlYywgJnR2cC0+dHZfdXNlYyk7Ci0JCWlmIChzZWMgPT0gMCAmJiB1c2VjID09IDApCi0JCQlyZXQgPSAwOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIHZvaWQgc3Vub3Nfbm9wKHZvaWQpCi17Ci0JcmV0dXJuOwotfQotCi0jaWYgMCAvKiBUaGlzIGNvZGUgZG9lc24ndCB0cmFuc2xhdGUgdXNlciBwb2ludGVycyBjb3JyZWN0bHksCi0gICAgICAgKiBkaXNhYmxlIGZvciBub3cuIC1EYXZlTQotICAgICAgICovCi0KLS8qIFhYWFhYWFhYWFggU3VuT1MgbW91bnQvdW1vdW50LiBYWFhYWFhYWFhYWCAqLwotI2RlZmluZSBTTU5UX1JET05MWSAgICAgICAxCi0jZGVmaW5lIFNNTlRfTk9TVUlEICAgICAgIDIKLSNkZWZpbmUgU01OVF9ORVdUWVBFICAgICAgNAotI2RlZmluZSBTTU5UX0dSUElEICAgICAgICA4Ci0jZGVmaW5lIFNNTlRfUkVNT1VOVCAgICAgIDE2Ci0jZGVmaW5lIFNNTlRfTk9TVUIgICAgICAgIDMyCi0jZGVmaW5lIFNNTlRfTVVMVEkgICAgICAgIDY0Ci0jZGVmaW5lIFNNTlRfU1lTNSAgICAgICAgIDEyOAotCi1zdHJ1Y3Qgc3Vub3NfZmhfdCB7Ci0JY2hhciBmaF9kYXRhIFtORlNfRkhTSVpFXTsKLX07Ci0KLXN0cnVjdCBzdW5vc19uZnNfbW91bnRfYXJncyB7Ci0Jc3RydWN0IHNvY2thZGRyX2luICAqYWRkcjsgLyogZmlsZSBzZXJ2ZXIgYWRkcmVzcyAqLwotCXN0cnVjdCBuZnNfZmggKmZoOyAgICAgLyogRmlsZSBoYW5kbGUgdG8gYmUgbW91bnRlZCAqLwotCWludCAgICAgICAgZmxhZ3M7ICAgICAgLyogZmxhZ3MgKi8KLQlpbnQgICAgICAgIHdzaXplOyAgICAgIC8qIHdyaXRlIHNpemUgaW4gYnl0ZXMgKi8KLQlpbnQgICAgICAgIHJzaXplOyAgICAgIC8qIHJlYWQgc2l6ZSBpbiBieXRlcyAqLwotCWludCAgICAgICAgdGltZW87ICAgICAgLyogaW5pdGlhbCB0aW1lb3V0IGluIC4xIHNlY3MgKi8KLQlpbnQgICAgICAgIHJldHJhbnM7ICAgIC8qIHRpbWVzIHRvIHJldHJ5IHNlbmQgKi8KLQljaGFyICAgICAgICpob3N0bmFtZTsgIC8qIHNlcnZlcidzIGhvc3RuYW1lICovCi0JaW50ICAgICAgICBhY3JlZ21pbjsgICAvKiBhdHRyIGNhY2hlIGZpbGUgbWluIHNlY3MgKi8KLQlpbnQgICAgICAgIGFjcmVnbWF4OyAgIC8qIGF0dHIgY2FjaGUgZmlsZSBtYXggc2VjcyAqLwotCWludCAgICAgICAgYWNkaXJtaW47ICAgLyogYXR0ciBjYWNoZSBkaXIgbWluIHNlY3MgKi8KLQlpbnQgICAgICAgIGFjZGlybWF4OyAgIC8qIGF0dHIgY2FjaGUgZGlyIG1heCBzZWNzICovCi0JY2hhciAgICAgICAqbmV0bmFtZTsgICAvKiBzZXJ2ZXIncyBuZXRuYW1lICovCi19OwotCi0KLS8qIEJpbmQgdGhlIHNvY2tldCBvbiBhIGxvY2FsIHJlc2VydmVkIHBvcnQgYW5kIGNvbm5lY3QgaXQgdG8gdGhlCi0gKiByZW1vdGUgc2VydmVyLiAgVGhpcyBvbiBMaW51eC9pMzg2IGlzIGRvbmUgYnkgdGhlIG1vdW50IHByb2dyYW0sCi0gKiBub3QgYnkgdGhlIGtlcm5lbC4gCi0gKi8KLS8qIFhYWFhYWFhYWFhYWFhYWFhYWFhYICovCi1zdGF0aWMgaW50Ci1zdW5vc19uZnNfZ2V0X3NlcnZlcl9mZCAoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luIGxvY2FsOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7Ci0JaW50ICAgIHRyeV9wb3J0OwotCWludCAgICByZXQ7Ci0Jc3RydWN0IHNvY2tldCAqc29ja2V0OwotCXN0cnVjdCBpbm9kZSAgKmlub2RlOwotCXN0cnVjdCBmaWxlICAgKmZpbGU7Ci0KLQlmaWxlID0gZmdldChmZCk7Ci0JaWYgKCFmaWxlKQotCQlyZXR1cm4gMDsKLQotCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQotCXNvY2tldCA9IFNPQ0tFVF9JKGlub2RlKTsKLQlsb2NhbC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlsb2NhbC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwotCi0JLyogSVBQT1JUX1JFU0VSVkVEID0gMTAyNCwgY2FuJ3QgZmluZCB0aGUgZGVmaW5pdGlvbiBpbiB0aGUga2VybmVsICovCi0JdHJ5X3BvcnQgPSAxMDI0OwotCWRvIHsKLQkJbG9jYWwuc2luX3BvcnQgPSBodG9ucyAoLS10cnlfcG9ydCk7Ci0JCXJldCA9IHNvY2tldC0+b3BzLT5iaW5kKHNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciopJmxvY2FsLAotCQkJCQlzaXplb2YobG9jYWwpKTsKLQl9IHdoaWxlIChyZXQgJiYgdHJ5X3BvcnQgPiAoMTAyNCAvIDIpKTsKLQotCWlmIChyZXQpIHsKLQkJZnB1dChmaWxlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2VydmVyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCXNlcnZlci5zaW5fYWRkciA9IGFkZHItPnNpbl9hZGRyOwotCXNlcnZlci5zaW5fcG9ydCA9IE5GU19QT1JUOwotCi0JLyogQ2FsbCBzeXNfY29ubmVjdCAqLwotCXJldCA9IHNvY2tldC0+b3BzLT5jb25uZWN0IChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlciwKLQkJCQkgICAgc2l6ZW9mIChzZXJ2ZXIpLCBmaWxlLT5mX2ZsYWdzKTsKLQlmcHV0KGZpbGUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotLyogWFhYWFhYWFhYWFhYWFhYWFhYWFggKi8KLXN0YXRpYyBpbnQgZ2V0X2RlZmF1bHQgKGludCB2YWx1ZSwgaW50IGRlZl92YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUpCi0JcmV0dXJuIHZhbHVlOwotICAgIGVsc2UKLQlyZXR1cm4gZGVmX3ZhbHVlOwotfQotCi0vKiBYWFhYWFhYWFhYWFhYWFhYWFhYWCAqLwotc3RhdGljIGludCBzdW5vc19uZnNfbW91bnQoY2hhciAqZGlyX25hbWUsIGludCBsaW51eF9mbGFncywgdm9pZCBfX3VzZXIgKmRhdGEpCi17Ci0JaW50ICBzZXJ2ZXJfZmQsIGVycjsKLQljaGFyICp0aGVfbmFtZSwgKm1vdW50X3BhZ2U7Ci0Jc3RydWN0IG5mc19tb3VudF9kYXRhIGxpbnV4X25mc19tb3VudDsKLQlzdHJ1Y3Qgc3Vub3NfbmZzX21vdW50X2FyZ3Mgc3Vub3NfbW91bnQ7Ci0KLQkvKiBPaywgaGVyZSBjb21lcyB0aGUgZnVuIHBhcnQ6IExpbnV4J3MgbmZzIG1vdW50IG5lZWRzIGEKLQkgKiBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyLCBidXQgU3VuT1MgbW91bnQgZG9lcyBub3QKLQkgKiByZXF1aXJlIHRoaXMsIHNvIHdlIHVzZSB0aGUgaW5mb3JtYXRpb24gb24gdGhlIGRlc3RpbmF0aW9uCi0JICogYWRkcmVzcyB0byBjcmVhdGUgYSBzb2NrZXQgYW5kIGJpbmQgaXQgdG8gYSByZXNlcnZlZAotCSAqIHBvcnQgb24gdGhpcyBzeXN0ZW0KLQkgKi8KLQlpZiAoY29weV9mcm9tX3VzZXIoJnN1bm9zX21vdW50LCBkYXRhLCBzaXplb2Yoc3Vub3NfbW91bnQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlzZXJ2ZXJfZmQgPSBzeXNfc29ja2V0IChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7Ci0JaWYgKHNlcnZlcl9mZCA8IDApCi0JCXJldHVybiAtRU5YSU87Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmxpbnV4X25mc19tb3VudC5hZGRyLCBzdW5vc19tb3VudC5hZGRyLAotCQkJICAgc2l6ZW9mKCpzdW5vc19tb3VudC5hZGRyKSkgfHwKLQkgICAgY29weV9mcm9tX3VzZXIoJmxpbnV4X25mc19tb3VudC5yb290LCBzdW5vc19tb3VudC5maCwKLQkJCSAgIHNpemVvZigqc3Vub3NfbW91bnQuZmgpKSkgewotCQlzeXNfY2xvc2UgKHNlcnZlcl9mZCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWlmICghc3Vub3NfbmZzX2dldF9zZXJ2ZXJfZmQgKHNlcnZlcl9mZCwgJmxpbnV4X25mc19tb3VudC5hZGRyKSl7Ci0JCXN5c19jbG9zZSAoc2VydmVyX2ZkKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQkvKiBOb3csIGJpbmQgaXQgdG8gYSBsb2NhbGx5IHJlc2VydmVkIHBvcnQgKi8KLQlsaW51eF9uZnNfbW91bnQudmVyc2lvbiAgPSBORlNfTU9VTlRfVkVSU0lPTjsKLQlsaW51eF9uZnNfbW91bnQuZmxhZ3MgICAgPSBzdW5vc19tb3VudC5mbGFnczsKLQlsaW51eF9uZnNfbW91bnQuZmQgICAgICAgPSBzZXJ2ZXJfZmQ7Ci0JCi0JbGludXhfbmZzX21vdW50LnJzaXplICAgID0gZ2V0X2RlZmF1bHQgKHN1bm9zX21vdW50LnJzaXplLCA4MTkyKTsKLQlsaW51eF9uZnNfbW91bnQud3NpemUgICAgPSBnZXRfZGVmYXVsdCAoc3Vub3NfbW91bnQud3NpemUsIDgxOTIpOwotCWxpbnV4X25mc19tb3VudC50aW1lbyAgICA9IGdldF9kZWZhdWx0IChzdW5vc19tb3VudC50aW1lbywgMTApOwotCWxpbnV4X25mc19tb3VudC5yZXRyYW5zICA9IHN1bm9zX21vdW50LnJldHJhbnM7Ci0JCi0JbGludXhfbmZzX21vdW50LmFjcmVnbWluID0gc3Vub3NfbW91bnQuYWNyZWdtaW47Ci0JbGludXhfbmZzX21vdW50LmFjcmVnbWF4ID0gc3Vub3NfbW91bnQuYWNyZWdtYXg7Ci0JbGludXhfbmZzX21vdW50LmFjZGlybWluID0gc3Vub3NfbW91bnQuYWNkaXJtaW47Ci0JbGludXhfbmZzX21vdW50LmFjZGlybWF4ID0gc3Vub3NfbW91bnQuYWNkaXJtYXg7Ci0KLQl0aGVfbmFtZSA9IGdldG5hbWUoc3Vub3NfbW91bnQuaG9zdG5hbWUpOwotCWlmIChJU19FUlIodGhlX25hbWUpKQotCQlyZXR1cm4gUFRSX0VSUih0aGVfbmFtZSk7Ci0KLQlzdHJsY3B5KGxpbnV4X25mc19tb3VudC5ob3N0bmFtZSwgdGhlX25hbWUsCi0JCXNpemVvZihsaW51eF9uZnNfbW91bnQuaG9zdG5hbWUpKTsKLQlwdXRuYW1lICh0aGVfbmFtZSk7Ci0JCi0JbW91bnRfcGFnZSA9IChjaGFyICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIW1vdW50X3BhZ2UpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KG1vdW50X3BhZ2UsICZsaW51eF9uZnNfbW91bnQsIHNpemVvZihsaW51eF9uZnNfbW91bnQpKTsKLQotCWVyciA9IGRvX21vdW50KCIiLCBkaXJfbmFtZSwgIm5mcyIsIGxpbnV4X2ZsYWdzLCBtb3VudF9wYWdlKTsKLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgbW91bnRfcGFnZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogWFhYWFhYWFhYWFhYWFhYWFhYWFggKi8KLWFzbWxpbmthZ2UgaW50Ci1zdW5vc19tb3VudChjaGFyICp0eXBlLCBjaGFyICpkaXIsIGludCBmbGFncywgdm9pZCAqZGF0YSkKLXsKLQlpbnQgbGludXhfZmxhZ3MgPSAwOwotCWludCByZXQgPSAtRUlOVkFMOwotCWNoYXIgKmRldl9mbmFtZSA9IDA7Ci0JY2hhciAqZGlyX3BhZ2UsICp0eXBlX3BhZ2U7Ci0KLQlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogV2UgZG9uJ3QgaGFuZGxlIHRoZSBpbnRlZ2VyIGZzIHR5cGUgKi8KLQlpZiAoKGZsYWdzICYgU01OVF9ORVdUWVBFKSA9PSAwKQotCQlnb3RvIG91dDsKLQotCS8qIERvIG5vdCBhbGxvdyBmb3IgdGhvc2UgZmxhZ3Mgd2UgZG9uJ3Qgc3VwcG9ydCAqLwotCWlmIChmbGFncyAmIChTTU5UX0dSUElEfFNNTlRfTk9TVUJ8U01OVF9NVUxUSXxTTU5UX1NZUzUpKQotCQlnb3RvIG91dDsKLQotCWlmIChmbGFncyAmIFNNTlRfUkVNT1VOVCkKLQkJbGludXhfZmxhZ3MgfD0gTVNfUkVNT1VOVDsKLQlpZiAoZmxhZ3MgJiBTTU5UX1JET05MWSkKLQkJbGludXhfZmxhZ3MgfD0gTVNfUkRPTkxZOwotCWlmIChmbGFncyAmIFNNTlRfTk9TVUlEKQotCQlsaW51eF9mbGFncyB8PSBNU19OT1NVSUQ7Ci0KLQlkaXJfcGFnZSA9IGdldG5hbWUoZGlyKTsKLQlyZXQgPSBQVFJfRVJSKGRpcl9wYWdlKTsKLQlpZiAoSVNfRVJSKGRpcl9wYWdlKSkKLQkJZ290byBvdXQ7Ci0KLQl0eXBlX3BhZ2UgPSBnZXRuYW1lKHR5cGUpOwotCXJldCA9IFBUUl9FUlIodHlwZV9wYWdlKTsKLQlpZiAoSVNfRVJSKHR5cGVfcGFnZSkpCi0JCWdvdG8gb3V0MTsKLQotCWlmIChzdHJjbXAodHlwZV9wYWdlLCAiZXh0MiIpID09IDApIHsKLQkJZGV2X2ZuYW1lID0gZ2V0bmFtZShkYXRhKTsKLQl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlX3BhZ2UsICJpc285NjYwIikgPT0gMCkgewotCQlkZXZfZm5hbWUgPSBnZXRuYW1lKGRhdGEpOwotCX0gZWxzZSBpZiAoc3RyY21wKHR5cGVfcGFnZSwgIm1pbml4IikgPT0gMCkgewotCQlkZXZfZm5hbWUgPSBnZXRuYW1lKGRhdGEpOwotCX0gZWxzZSBpZiAoc3RyY21wKHR5cGVfcGFnZSwgIm5mcyIpID09IDApIHsKLQkJcmV0ID0gc3Vub3NfbmZzX21vdW50IChkaXJfcGFnZSwgZmxhZ3MsIGRhdGEpOwotCQlnb3RvIG91dDI7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKHR5cGVfcGFnZSwgInVmcyIpID09IDApIHsKLQkJcHJpbnRrKCJXYXJuaW5nOiBVRlMgZmlsZXN5c3RlbSBtb3VudHMgdW5zdXBwb3J0ZWQuXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQyOwotCX0gZWxzZSBpZiAoc3RyY21wKHR5cGVfcGFnZSwgInByb2MiKSkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dDI7Ci0JfQotCXJldCA9IFBUUl9FUlIoZGV2X2ZuYW1lKTsKLQlpZiAoSVNfRVJSKGRldl9mbmFtZSkpCi0JCWdvdG8gb3V0MjsKLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGRvX21vdW50KGRldl9mbmFtZSwgZGlyX3BhZ2UsIHR5cGVfcGFnZSwgbGludXhfZmxhZ3MsIE5VTEwpOwotCXVubG9ja19rZXJuZWwoKTsKLQlpZiAoZGV2X2ZuYW1lKQotCQlwdXRuYW1lKGRldl9mbmFtZSk7Ci1vdXQyOgotCXB1dG5hbWUodHlwZV9wYWdlKTsKLW91dDE6Ci0JcHV0bmFtZShkaXJfcGFnZSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi1hc21saW5rYWdlIGludCBzdW5vc19zZXRwZ3JwKHBpZF90IHBpZCwgcGlkX3QgcGdpZCkKLXsKLQlpbnQgcmV0OwotCi0JLyogU28gc3R1cGlkLi4uICovCi0JaWYgKCghcGlkIHx8IHBpZCA9PSBjdXJyZW50LT5waWQpICYmCi0JICAgICFwZ2lkKSB7Ci0JCXN5c19zZXRzaWQoKTsKLQkJcmV0ID0gMDsKLQl9IGVsc2UgewotCQlyZXQgPSBzeXNfc2V0cGdpZChwaWQsIHBnaWQpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBTbyBzdHVwaWQuLi4gKi8KLWV4dGVybiBsb25nIGNvbXBhdF9zeXNfd2FpdDQoY29tcGF0X3BpZF90LCBjb21wYXRfdWludF90IF9fdXNlciAqLCBpbnQsCi0JCQkgICAgIHN0cnVjdCBjb21wYXRfcnVzYWdlIF9fdXNlciAqKTsKLQotYXNtbGlua2FnZSBpbnQgc3Vub3Nfd2FpdDQoY29tcGF0X3BpZF90IHBpZCwgY29tcGF0X3VpbnRfdCBfX3VzZXIgKnN0YXRfYWRkciwgaW50IG9wdGlvbnMsIHN0cnVjdCBjb21wYXRfcnVzYWdlIF9fdXNlciAqcnUpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNvbXBhdF9zeXNfd2FpdDQoKHBpZCA/IHBpZCA6ICgoY29tcGF0X3BpZF90KS0xKSksCi0JCQkgICAgICAgc3RhdF9hZGRyLCBvcHRpb25zLCBydSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3Nfa2lsbHBnKGludCBwZ3JwLCBpbnQgc2lnKQotewotCWludCByZXQ7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcmV0ID0gLUVJTlZBTDsKLQlpZiAocGdycCA+IDApCi0JCXJldCA9IGtpbGxfcGdycChmaW5kX3ZwaWQocGdycCksIHNpZywgMCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19hdWRpdCh2b2lkKQotewotCXByaW50ayAoInN5c19hdWRpdFxuIik7Ci0JcmV0dXJuIC0xOwotfQotCi1hc21saW5rYWdlIHUzMiBzdW5vc19nZXRob3N0aWQodm9pZCkKLXsKLQl1MzIgcmV0OwotCi0JcmV0ID0gKCgodTMyKWlkcHJvbS0+aWRfbWFjaHR5cGUgPDwgMjQpIHwgKCh1MzIpaWRwcm9tLT5pZF9zZXJudW0pKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHN5c2NvbmYgb3B0aW9ucywgZm9yIFN1bk9TIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgICBfU0NfQVJHX01BWCAgICAgICAgICAgICAxCi0jZGVmaW5lICAgX1NDX0NISUxEX01BWCAgICAgICAgICAgMgotI2RlZmluZSAgIF9TQ19DTEtfVENLICAgICAgICAgICAgIDMKLSNkZWZpbmUgICBfU0NfTkdST1VQU19NQVggICAgICAgICA0Ci0jZGVmaW5lICAgX1NDX09QRU5fTUFYICAgICAgICAgICAgNQotI2RlZmluZSAgIF9TQ19KT0JfQ09OVFJPTCAgICAgICAgIDYKLSNkZWZpbmUgICBfU0NfU0FWRURfSURTICAgICAgICAgICA3Ci0jZGVmaW5lICAgX1NDX1ZFUlNJT04gICAgICAgICAgICAgOAotCi1hc21saW5rYWdlIHMzMiBzdW5vc19zeXNjb25mIChpbnQgbmFtZSkKLXsKLQlzMzIgcmV0OwotCi0Jc3dpdGNoIChuYW1lKXsKLQljYXNlIF9TQ19BUkdfTUFYOgotCQlyZXQgPSBBUkdfTUFYOwotCQlicmVhazsKLQljYXNlIF9TQ19DSElMRF9NQVg6Ci0JCXJldCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTlBST0NdLnJsaW1fY3VyOwotCQlicmVhazsKLQljYXNlIF9TQ19DTEtfVENLOgotCQlyZXQgPSBIWjsKLQkJYnJlYWs7Ci0JY2FzZSBfU0NfTkdST1VQU19NQVg6Ci0JCXJldCA9IE5HUk9VUFNfTUFYOwotCQlicmVhazsKLQljYXNlIF9TQ19PUEVOX01BWDoKLQkJcmV0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OT0ZJTEVdLnJsaW1fY3VyOwotCQlicmVhazsKLQljYXNlIF9TQ19KT0JfQ09OVFJPTDoKLQkJcmV0ID0gMTsJLyogeWVzLCB3ZSBkbyBzdXBwb3J0IGpvYiBjb250cm9sICovCi0JCWJyZWFrOwotCWNhc2UgX1NDX1NBVkVEX0lEUzoKLQkJcmV0ID0gMTsJLyogeWVzLCB3ZSBkbyBzdXBwb3J0IHNhdmVkIHVpZHMgICovCi0JCWJyZWFrOwotCWNhc2UgX1NDX1ZFUlNJT046Ci0JCS8qIG1obSwgUE9TSVhfVkVSU0lPTiBpcyBpbiAvdXNyL2luY2x1ZGUvdW5pc3RkLmgKLQkJICogc2hvdWxkIGl0IGdvIG9uIC91c3IvaW5jbHVkZS9saW51eD8KLQkJICovCi0JCXJldCA9IDE5OTAwOTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLTE7Ci0JCWJyZWFrOwotCX07Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3Nfc2Vtc3lzKGludCBvcCwgdTMyIGFyZzEsIHUzMiBhcmcyLCB1MzIgYXJnMywgdm9pZCBfX3VzZXIgKnB0cikKLXsKLQl1bmlvbiBzZW11biBhcmc0OwotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKG9wKSB7Ci0JY2FzZSAwOgotCQkvKiBNb3N0IGFyZ3VtZW50cyBtYXRjaCBvbiBhIDE6MSBiYXNpcyBidXQgY21kIGRvZXNuJ3QgKi8KLQkJc3dpdGNoKGFyZzMpIHsKLQkJY2FzZSA0OgotCQkJYXJnMz1HRVRQSUQ7IGJyZWFrOwotCQljYXNlIDU6Ci0JCQlhcmczPUdFVFZBTDsgYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWFyZzM9R0VUQUxMOyBicmVhazsKLQkJY2FzZSAzOgotCQkJYXJnMz1HRVROQ05UOyBicmVhazsKLQkJY2FzZSA3OgotCQkJYXJnMz1HRVRaQ05UOyBicmVhazsKLQkJY2FzZSA4OgotCQkJYXJnMz1TRVRWQUw7IGJyZWFrOwotCQljYXNlIDk6Ci0JCQlhcmczPVNFVEFMTDsgYnJlYWs7Ci0JCX0KLQkJLyogc3lzX3NlbWN0bCgpOiAqLwotCQkvKiB2YWx1ZSB0byBtb2RpZnkgc2VtYXBob3JlIHRvICovCi0JCWFyZzQuX19wYWQgPSBwdHI7Ci0JCXJldCA9IHN5c19zZW1jdGwoKGludClhcmcxLCAoaW50KWFyZzIsIChpbnQpYXJnMywgYXJnNCk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJLyogc3lzX3NlbWdldCgpOiAqLwotCQlyZXQgPSBzeXNfc2VtZ2V0KChrZXlfdClhcmcxLCAoaW50KWFyZzIsIChpbnQpYXJnMyk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJLyogc3lzX3NlbW9wKCk6ICovCi0JCXJldCA9IHN5c19zZW1vcCgoaW50KWFyZzEsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZzIsCi0JCQkJKHVuc2lnbmVkIGludCkgYXJnMyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX07Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IG1zZ2J1ZjMyIHsKLQlzMzIgbXR5cGU7Ci0JY2hhciBtdGV4dFsxXTsKLX07Ci0KLXN0cnVjdCBpcGNfcGVybTMyCi17Ci0Ja2V5X3QgICAgCSAga2V5OwotICAgICAgICBjb21wYXRfdWlkX3QgIHVpZDsKLSAgICAgICAgY29tcGF0X2dpZF90ICBnaWQ7Ci0gICAgICAgIGNvbXBhdF91aWRfdCAgY3VpZDsKLSAgICAgICAgY29tcGF0X2dpZF90ICBjZ2lkOwotICAgICAgICBjb21wYXRfbW9kZV90IG1vZGU7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBzZXE7Ci19OwotCi1zdHJ1Y3QgbXNxaWRfZHMzMgotewotICAgICAgICBzdHJ1Y3QgaXBjX3Blcm0zMiBtc2dfcGVybTsKLSAgICAgICAgdTMyIG1zZ19maXJzdDsKLSAgICAgICAgdTMyIG1zZ19sYXN0OwotICAgICAgICBjb21wYXRfdGltZV90IG1zZ19zdGltZTsKLSAgICAgICAgY29tcGF0X3RpbWVfdCBtc2dfcnRpbWU7Ci0gICAgICAgIGNvbXBhdF90aW1lX3QgbXNnX2N0aW1lOwotICAgICAgICB1MzIgd3dhaXQ7Ci0gICAgICAgIHUzMiByd2FpdDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgbXNnX2NieXRlczsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgbXNnX3FudW07ICAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgbXNnX3FieXRlczsKLSAgICAgICAgY29tcGF0X2lwY19waWRfdCBtc2dfbHNwaWQ7Ci0gICAgICAgIGNvbXBhdF9pcGNfcGlkX3QgbXNnX2xycGlkOwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgc3Vub3NfbXNxaWRfZ2V0KHN0cnVjdCBtc3FpZF9kczMyIF9fdXNlciAqdXNlciwKLQkJCQkgIHN0cnVjdCBtc3FpZF9kcyAqa2VybikKLXsKLQlpZiAoZ2V0X3VzZXIoa2Vybi0+bXNnX3Blcm0ua2V5LCAmdXNlci0+bXNnX3Blcm0ua2V5KQkJfHwKLQkgICAgX19nZXRfdXNlcihrZXJuLT5tc2dfcGVybS51aWQsICZ1c2VyLT5tc2dfcGVybS51aWQpCQl8fAotCSAgICBfX2dldF91c2VyKGtlcm4tPm1zZ19wZXJtLmdpZCwgJnVzZXItPm1zZ19wZXJtLmdpZCkJCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+bXNnX3Blcm0uY3VpZCwgJnVzZXItPm1zZ19wZXJtLmN1aWQpCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+bXNnX3Blcm0uY2dpZCwgJnVzZXItPm1zZ19wZXJtLmNnaWQpCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+bXNnX3N0aW1lLCAmdXNlci0+bXNnX3N0aW1lKQkJfHwKLQkgICAgX19nZXRfdXNlcihrZXJuLT5tc2dfcnRpbWUsICZ1c2VyLT5tc2dfcnRpbWUpCQl8fAotCSAgICBfX2dldF91c2VyKGtlcm4tPm1zZ19jdGltZSwgJnVzZXItPm1zZ19jdGltZSkJCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+bXNnX2N0aW1lLCAmdXNlci0+bXNnX2NieXRlcykJCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+bXNnX2N0aW1lLCAmdXNlci0+bXNnX3FudW0pCQl8fAotCSAgICBfX2dldF91c2VyKGtlcm4tPm1zZ19jdGltZSwgJnVzZXItPm1zZ19xYnl0ZXMpCQl8fAotCSAgICBfX2dldF91c2VyKGtlcm4tPm1zZ19jdGltZSwgJnVzZXItPm1zZ19sc3BpZCkJCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+bXNnX2N0aW1lLCAmdXNlci0+bXNnX2xycGlkKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHN1bm9zX21zcWlkX3B1dChzdHJ1Y3QgbXNxaWRfZHMzMiBfX3VzZXIgKnVzZXIsCi0JCQkJICBzdHJ1Y3QgbXNxaWRfZHMgKmtlcm4pCi17Ci0JaWYgKHB1dF91c2VyKGtlcm4tPm1zZ19wZXJtLmtleSwgJnVzZXItPm1zZ19wZXJtLmtleSkJCXx8Ci0JICAgIF9fcHV0X3VzZXIoa2Vybi0+bXNnX3Blcm0udWlkLCAmdXNlci0+bXNnX3Blcm0udWlkKQkJfHwKLQkgICAgX19wdXRfdXNlcihrZXJuLT5tc2dfcGVybS5naWQsICZ1c2VyLT5tc2dfcGVybS5naWQpCQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPm1zZ19wZXJtLmN1aWQsICZ1c2VyLT5tc2dfcGVybS5jdWlkKQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPm1zZ19wZXJtLmNnaWQsICZ1c2VyLT5tc2dfcGVybS5jZ2lkKQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPm1zZ19zdGltZSwgJnVzZXItPm1zZ19zdGltZSkJCXx8Ci0JICAgIF9fcHV0X3VzZXIoa2Vybi0+bXNnX3J0aW1lLCAmdXNlci0+bXNnX3J0aW1lKQkJfHwKLQkgICAgX19wdXRfdXNlcihrZXJuLT5tc2dfY3RpbWUsICZ1c2VyLT5tc2dfY3RpbWUpCQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPm1zZ19jdGltZSwgJnVzZXItPm1zZ19jYnl0ZXMpCQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPm1zZ19jdGltZSwgJnVzZXItPm1zZ19xbnVtKQkJfHwKLQkgICAgX19wdXRfdXNlcihrZXJuLT5tc2dfY3RpbWUsICZ1c2VyLT5tc2dfcWJ5dGVzKQkJfHwKLQkgICAgX19wdXRfdXNlcihrZXJuLT5tc2dfY3RpbWUsICZ1c2VyLT5tc2dfbHNwaWQpCQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPm1zZ19jdGltZSwgJnVzZXItPm1zZ19scnBpZCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzdW5vc19tc2didWZfZ2V0KHN0cnVjdCBtc2didWYzMiBfX3VzZXIgKnVzZXIsIHN0cnVjdCBtc2didWYgKmtlcm4sIGludCBsZW4pCi17Ci0JaWYgKGdldF91c2VyKGtlcm4tPm10eXBlLCAmdXNlci0+bXR5cGUpCXx8Ci0JICAgIF9fY29weV9mcm9tX3VzZXIoa2Vybi0+bXRleHQsICZ1c2VyLT5tdGV4dCwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHN1bm9zX21zZ2J1Zl9wdXQoc3RydWN0IG1zZ2J1ZjMyIF9fdXNlciAqdXNlciwgc3RydWN0IG1zZ2J1ZiAqa2VybiwgaW50IGxlbikKLXsKLQlpZiAocHV0X3VzZXIoa2Vybi0+bXR5cGUsICZ1c2VyLT5tdHlwZSkJfHwKLQkgICAgX19jb3B5X3RvX3VzZXIodXNlci0+bXRleHQsIGtlcm4tPm10ZXh0LCBsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3NfbXNnc3lzKGludCBvcCwgdTMyIGFyZzEsIHUzMiBhcmcyLCB1MzIgYXJnMywgdTMyIGFyZzQpCi17Ci0Jc3RydWN0IHNwYXJjX3N0YWNrZjMyIF9fdXNlciAqc3A7Ci0Jc3RydWN0IG1zcWlkX2RzIGtkczsKLQlzdHJ1Y3QgbXNnYnVmICprbWJ1ZjsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JdTMyIGFyZzU7Ci0JaW50IHJ2YWw7Ci0KLQlzd2l0Y2gob3ApIHsKLQljYXNlIDA6Ci0JCXJ2YWwgPSBzeXNfbXNnZ2V0KChrZXlfdClhcmcxLCAoaW50KWFyZzIpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWlmICghc3Vub3NfbXNxaWRfZ2V0KChzdHJ1Y3QgbXNxaWRfZHMzMiBfX3VzZXIgKikodW5zaWduZWQgbG9uZylhcmczLCAma2RzKSkgewotCQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCQlydmFsID0gc3lzX21zZ2N0bCgoaW50KWFyZzEsIChpbnQpYXJnMiwKLQkJCQkJICAoc3RydWN0IG1zcWlkX2RzIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZzMpOwotCQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCQlpZiAoIXJ2YWwpCi0JCQkJcnZhbCA9IHN1bm9zX21zcWlkX3B1dCgoc3RydWN0IG1zcWlkX2RzMzIgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYXJnMywKLQkJCQkJCSAgICAgICAma2RzKTsKLQkJfSBlbHNlCi0JCQlydmFsID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlydmFsID0gLUVGQVVMVDsKLQkJa21idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNnYnVmKSArIGFyZzMsCi0JCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JCWlmICgha21idWYpCi0JCQlicmVhazsKLQkJc3AgPSAoc3RydWN0IHNwYXJjX3N0YWNrZjMyIF9fdXNlciAqKQotCQkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a3JlZ3MtPnVfcmVnc1tVUkVHX0ZQXSAmIDB4ZmZmZmZmZmZVTCk7Ci0JCWlmIChnZXRfdXNlcihhcmc1LCAmc3AtPnh4YXJnc1swXSkpIHsKLQkJCXJ2YWwgPSAtRUZBVUxUOwotCQkJa2ZyZWUoa21idWYpOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCXJ2YWwgPSBzeXNfbXNncmN2KChpbnQpYXJnMSwgKHN0cnVjdCBtc2didWYgX191c2VyICopIGttYnVmLAotCQkJCSAgKHNpemVfdClhcmczLAotCQkJCSAgKGxvbmcpYXJnNCwgKGludClhcmc1KTsKLQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCWlmICghcnZhbCkKLQkJCXJ2YWwgPSBzdW5vc19tc2didWZfcHV0KChzdHJ1Y3QgbXNnYnVmMzIgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYXJnMiwKLQkJCQkJCWttYnVmLCBhcmczKTsKLQkJa2ZyZWUoa21idWYpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXJ2YWwgPSAtRUZBVUxUOwotCQlrbWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2didWYpICsgYXJnMywKLQkJCQkJCSBHRlBfS0VSTkVMKTsKLQkJaWYgKCFrbWJ1ZiB8fCBzdW5vc19tc2didWZfZ2V0KChzdHJ1Y3QgbXNnYnVmMzIgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYXJnMiwKLQkJCQkJICAgICAgIGttYnVmLCBhcmczKSkKLQkJCWJyZWFrOwotCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJcnZhbCA9IHN5c19tc2dzbmQoKGludClhcmcxLCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikga21idWYsCi0JCQkJICAoc2l6ZV90KWFyZzMsIChpbnQpYXJnNCk7Ci0JCXNldF9mcyhvbGRfZnMpOwotCQlrZnJlZShrbWJ1Zik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJ2YWwgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJ2YWw7Ci19Ci0KLXN0cnVjdCBzaG1pZF9kczMyIHsKLSAgICAgICAgc3RydWN0IGlwY19wZXJtMzIgICAgICAgc2htX3Blcm07Ci0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIHNobV9zZWdzejsKLSAgICAgICAgY29tcGF0X3RpbWVfdCAgICAgICAgIHNobV9hdGltZTsKLSAgICAgICAgY29tcGF0X3RpbWVfdCAgICAgICAgIHNobV9kdGltZTsKLSAgICAgICAgY29tcGF0X3RpbWVfdCAgICAgICAgIHNobV9jdGltZTsKLSAgICAgICAgY29tcGF0X2lwY19waWRfdCAgICBzaG1fY3BpZDsgCi0gICAgICAgIGNvbXBhdF9pcGNfcGlkX3QgICAgc2htX2xwaWQ7IAotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBzaG1fbmF0dGNoOwotfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1zdGF0aWMgaW5saW5lIGludCBzdW5vc19zaG1pZF9nZXQoc3RydWN0IHNobWlkX2RzMzIgX191c2VyICp1c2VyLAotCQkJCSAgc3RydWN0IHNobWlkX2RzICprZXJuKQotewotCWlmIChnZXRfdXNlcihrZXJuLT5zaG1fcGVybS5rZXksICZ1c2VyLT5zaG1fcGVybS5rZXkpCQl8fAotCSAgICBfX2dldF91c2VyKGtlcm4tPnNobV9wZXJtLnVpZCwgJnVzZXItPnNobV9wZXJtLnVpZCkJCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+c2htX3Blcm0uZ2lkLCAmdXNlci0+c2htX3Blcm0uZ2lkKQkJfHwKLQkgICAgX19nZXRfdXNlcihrZXJuLT5zaG1fcGVybS5jdWlkLCAmdXNlci0+c2htX3Blcm0uY3VpZCkJfHwKLQkgICAgX19nZXRfdXNlcihrZXJuLT5zaG1fcGVybS5jZ2lkLCAmdXNlci0+c2htX3Blcm0uY2dpZCkJfHwKLQkgICAgX19nZXRfdXNlcihrZXJuLT5zaG1fc2Vnc3osICZ1c2VyLT5zaG1fc2Vnc3opCQl8fAotCSAgICBfX2dldF91c2VyKGtlcm4tPnNobV9hdGltZSwgJnVzZXItPnNobV9hdGltZSkJCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+c2htX2R0aW1lLCAmdXNlci0+c2htX2R0aW1lKQkJfHwKLQkgICAgX19nZXRfdXNlcihrZXJuLT5zaG1fY3RpbWUsICZ1c2VyLT5zaG1fY3RpbWUpCQl8fAotCSAgICBfX2dldF91c2VyKGtlcm4tPnNobV9jcGlkLCAmdXNlci0+c2htX2NwaWQpCQkJfHwKLQkgICAgX19nZXRfdXNlcihrZXJuLT5zaG1fbHBpZCwgJnVzZXItPnNobV9scGlkKQkJCXx8Ci0JICAgIF9fZ2V0X3VzZXIoa2Vybi0+c2htX25hdHRjaCwgJnVzZXItPnNobV9uYXR0Y2gpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc3Vub3Nfc2htaWRfcHV0KHN0cnVjdCBzaG1pZF9kczMyIF9fdXNlciAqdXNlciwKLQkJCQkgIHN0cnVjdCBzaG1pZF9kcyAqa2VybikKLXsKLQlpZiAocHV0X3VzZXIoa2Vybi0+c2htX3Blcm0ua2V5LCAmdXNlci0+c2htX3Blcm0ua2V5KQkJfHwKLQkgICAgX19wdXRfdXNlcihrZXJuLT5zaG1fcGVybS51aWQsICZ1c2VyLT5zaG1fcGVybS51aWQpCQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPnNobV9wZXJtLmdpZCwgJnVzZXItPnNobV9wZXJtLmdpZCkJCXx8Ci0JICAgIF9fcHV0X3VzZXIoa2Vybi0+c2htX3Blcm0uY3VpZCwgJnVzZXItPnNobV9wZXJtLmN1aWQpCXx8Ci0JICAgIF9fcHV0X3VzZXIoa2Vybi0+c2htX3Blcm0uY2dpZCwgJnVzZXItPnNobV9wZXJtLmNnaWQpCXx8Ci0JICAgIF9fcHV0X3VzZXIoa2Vybi0+c2htX3NlZ3N6LCAmdXNlci0+c2htX3NlZ3N6KQkJfHwKLQkgICAgX19wdXRfdXNlcihrZXJuLT5zaG1fYXRpbWUsICZ1c2VyLT5zaG1fYXRpbWUpCQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPnNobV9kdGltZSwgJnVzZXItPnNobV9kdGltZSkJCXx8Ci0JICAgIF9fcHV0X3VzZXIoa2Vybi0+c2htX2N0aW1lLCAmdXNlci0+c2htX2N0aW1lKQkJfHwKLQkgICAgX19wdXRfdXNlcihrZXJuLT5zaG1fY3BpZCwgJnVzZXItPnNobV9jcGlkKQkJCXx8Ci0JICAgIF9fcHV0X3VzZXIoa2Vybi0+c2htX2xwaWQsICZ1c2VyLT5zaG1fbHBpZCkJCQl8fAotCSAgICBfX3B1dF91c2VyKGtlcm4tPnNobV9uYXR0Y2gsICZ1c2VyLT5zaG1fbmF0dGNoKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3NobXN5cyhpbnQgb3AsIHUzMiBhcmcxLCB1MzIgYXJnMiwgdTMyIGFyZzMpCi17Ci0Jc3RydWN0IHNobWlkX2RzIGtzZHM7Ci0JdW5zaWduZWQgbG9uZyByYWRkcjsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JaW50IHJ2YWw7Ci0KLQlzd2l0Y2gob3ApIHsKLQljYXNlIDA6Ci0JCS8qIGRvX3NobWF0KCk6IGF0dGFjaCBhIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQlydmFsID0gZG9fc2htYXQoKGludClhcmcxLChjaGFyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZzIsKGludClhcmczLCZyYWRkcik7Ci0JCWlmICghcnZhbCkKLQkJCXJ2YWwgPSAoaW50KSByYWRkcjsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQkvKiBzeXNfc2htY3RsKCk6IG1vZGlmeSBzaGFyZWQgbWVtb3J5IGFyZWEgYXR0ci4gKi8KLQkJaWYgKCFzdW5vc19zaG1pZF9nZXQoKHN0cnVjdCBzaG1pZF9kczMyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZzMsICZrc2RzKSkgewotCQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCQlydmFsID0gc3lzX3NobWN0bCgoaW50KSBhcmcxLChpbnQpIGFyZzIsCi0JCQkJCSAgKHN0cnVjdCBzaG1pZF9kcyBfX3VzZXIgKikgJmtzZHMpOwotCQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCQlpZiAoIXJ2YWwpCi0JCQkJcnZhbCA9IHN1bm9zX3NobWlkX3B1dCgoc3RydWN0IHNobWlkX2RzMzIgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYXJnMywKLQkJCQkJCSAgICAgICAma3Nkcyk7Ci0JCX0gZWxzZQotCQkJcnZhbCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJLyogc3lzX3NobWR0KCk6IGRldGFjaCBhIHNoYXJlZCBtZW1vcnkgYXJlYSAqLwotCQlydmFsID0gc3lzX3NobWR0KChjaGFyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZzEpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCS8qIHN5c19zaG1nZXQoKTogZ2V0IGEgc2hhcmVkIG1lbW9yeSBhcmVhICovCi0JCXJ2YWwgPSBzeXNfc2htZ2V0KChrZXlfdClhcmcxLChpbnQpYXJnMiwoaW50KWFyZzMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlydmFsID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfTsKLQlyZXR1cm4gcnZhbDsKLX0KLQotZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzcGFyYzMyX29wZW4oY29uc3QgY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwgaW50IGZsYWdzLCBpbnQgbW9kZSk7Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX29wZW4odTMyIGZuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKQotewotCWNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSA9IGNvbXBhdF9wdHIoZm5hbWUpOwotCi0JcmV0dXJuIHNwYXJjMzJfb3BlbihmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOwotfQotCi0jZGVmaW5lIFNVTk9TX0VXT1VMREJMT0NLIDM1Ci0KLS8qIHNlZSB0aGUgc3Vub3MgbWFuIHBhZ2UgcmVhZCgydikgZm9yIGFuIGV4cGxhbmF0aW9uCi0gICBvZiB0aGlzIGdhcmJhZ2UuIFdlIHVzZSBPX05ERUxBWSB0byBtYXJrCi0gICBmaWxlIGRlc2NyaXB0b3JzIHRoYXQgaGF2ZSBiZWVuIHNldCBub24tYmxvY2tpbmcgCi0gICB1c2luZyA0LjJCU0Qgc3R5bGUgY2FsbHMuICh0cmlkZ2UpICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX25vbmJsb2NrKGludCByZXQsIGludCBmZCkKLXsKLQlpZiAocmV0ID09IC1FQUdBSU4pIHsKLQkJc3RydWN0IGZpbGUgKiBmaWxlID0gZmdldChmZCk7Ci0JCWlmIChmaWxlKSB7Ci0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTkRFTEFZKQotCQkJCXJldCA9IC1TVU5PU19FV09VTERCTE9DSzsKLQkJCWZwdXQoZmlsZSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3NfcmVhZCh1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsIHUzMiBjb3VudCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY2hlY2tfbm9uYmxvY2soc3lzX3JlYWQoZmQsIGJ1ZiwgY291bnQpLCBmZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3NfcmVhZHYodTMyIGZkLCB2b2lkIF9fdXNlciAqdmVjdG9yLCBzMzIgY291bnQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNoZWNrX25vbmJsb2NrKGNvbXBhdF9zeXNfcmVhZHYoZmQsIHZlY3RvciwgY291bnQpLCBmZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3Nfd3JpdGUodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLCB1MzIgY291bnQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNoZWNrX25vbmJsb2NrKHN5c193cml0ZShmZCwgYnVmLCBjb3VudCksIGZkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc193cml0ZXYodTMyIGZkLCB2b2lkIF9fdXNlciAqdmVjdG9yLCBzMzIgY291bnQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNoZWNrX25vbmJsb2NrKGNvbXBhdF9zeXNfd3JpdGV2KGZkLCB2ZWN0b3IsIGNvdW50KSwgZmQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3JlY3YodTMyIF9fZmQsIHZvaWQgX191c2VyICp1YnVmLCBpbnQgc2l6ZSwgdW5zaWduZWQgZmxhZ3MpCi17Ci0JaW50IHJldCwgZmQgPSAoaW50KSBfX2ZkOwotCi0JcmV0ID0gY2hlY2tfbm9uYmxvY2soc3lzX3JlY3YoZmQsIHVidWYsIHNpemUsIGZsYWdzKSwgZmQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3NlbmQodTMyIF9fZmQsIHZvaWQgX191c2VyICpidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBmbGFncykKLXsKLQlpbnQgcmV0LCBmZCA9IChpbnQpIF9fZmQ7Ci0KLQlyZXQgPSBjaGVja19ub25ibG9jayhzeXNfc2VuZChmZCwgYnVmZiwgbGVuLCBmbGFncyksIGZkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzdW5vc19hY2NlcHQodTMyIF9fZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnNhLCBpbnQgX191c2VyICphZGRybGVuKQotewotCWludCByZXQsIGZkID0gKGludCkgX19mZDsKLQotCXdoaWxlICgxKSB7Ci0JCXJldCA9IGNoZWNrX25vbmJsb2NrKHN5c19hY2NlcHQoZmQsIHNhLCBhZGRybGVuKSwgZmQpOwotCQlpZiAocmV0ICE9IC1FTkVUVU5SRUFDSCAmJiByZXQgIT0gLUVIT1NUVU5SRUFDSCkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIFNVTk9TX1NWX0lOVEVSUlVQVCAyCi0KLWFzbWxpbmthZ2UgaW50IHN1bm9zX3NpZ2FjdGlvbiAoaW50IHNpZywKLQkJCQlzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyIF9fdXNlciAqYWN0LAotCQkJCXN0cnVjdCBvbGRfc2lnYWN0aW9uMzIgX191c2VyICpvYWN0KQotewotCXN0cnVjdCBrX3NpZ2FjdGlvbiBuZXdfa2EsIG9sZF9rYTsKLQlpbnQgcmV0OwotCi0JaWYgKGFjdCkgewotCQljb21wYXRfb2xkX3NpZ3NldF90IG1hc2s7Ci0JCXUzMiB1X2hhbmRsZXI7Ci0KLQkJaWYgKGdldF91c2VyKHVfaGFuZGxlciwgJmFjdC0+c2FfaGFuZGxlcikgfHwKLQkJICAgIF9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2ZsYWdzLCAmYWN0LT5zYV9mbGFncykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJbmV3X2thLnNhLnNhX2hhbmRsZXIgPSBjb21wYXRfcHRyKHVfaGFuZGxlcik7Ci0JCV9fZ2V0X3VzZXIobWFzaywgJmFjdC0+c2FfbWFzayk7Ci0JCW5ld19rYS5zYS5zYV9yZXN0b3JlciA9IE5VTEw7Ci0JCW5ld19rYS5rYV9yZXN0b3JlciA9IE5VTEw7Ci0JCXNpZ2luaXRzZXQoJm5ld19rYS5zYS5zYV9tYXNrLCBtYXNrKTsKLQkJbmV3X2thLnNhLnNhX2ZsYWdzIF49IFNVTk9TX1NWX0lOVEVSUlVQVDsKLQl9Ci0KLQlyZXQgPSBkb19zaWdhY3Rpb24oc2lnLCBhY3QgPyAmbmV3X2thIDogTlVMTCwgb2FjdCA/ICZvbGRfa2EgOiBOVUxMKTsKLQotCWlmICghcmV0ICYmIG9hY3QpIHsKLQkJb2xkX2thLnNhLnNhX2ZsYWdzIF49IFNVTk9TX1NWX0lOVEVSUlVQVDsKLQkJaWYgKHB1dF91c2VyKHB0cl90b19jb21wYXQob2xkX2thLnNhLnNhX2hhbmRsZXIpLCAmb2FjdC0+c2FfaGFuZGxlcikgfHwKLQkJICAgIF9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2ZsYWdzLCAmb2FjdC0+c2FfZmxhZ3MpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCV9fcHV0X3VzZXIob2xkX2thLnNhLnNhX21hc2suc2lnWzBdLCAmb2FjdC0+c2FfbWFzayk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3Nfc2V0c29ja29wdCh1MzIgX19mZCwgdTMyIF9fbGV2ZWwsIHUzMiBfX29wdG5hbWUsCi0JCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgdTMyIF9fb3B0bGVuKQotewotCWludCBmZCA9IChpbnQpIF9fZmQ7Ci0JaW50IGxldmVsID0gKGludCkgX19sZXZlbDsKLQlpbnQgb3B0bmFtZSA9IChpbnQpIF9fb3B0bmFtZTsKLQlpbnQgb3B0bGVuID0gKGludCkgX19vcHRsZW47Ci0JaW50IHRyX29wdCA9IG9wdG5hbWU7Ci0JaW50IHJldDsKLQotCWlmIChsZXZlbCA9PSBTT0xfSVApIHsKLQkJLyogTXVsdGljYXN0IHNvY2tldG9wdHMgKHR0bCwgbWVtYmVyc2hpcCkgKi8KLQkJaWYgKHRyX29wdCA+PTIgJiYgdHJfb3B0IDw9IDYpCi0JCQl0cl9vcHQgKz0gMzA7Ci0JfQotCXJldCA9IHN5c19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgdHJfb3B0LAotCQkJICAgICBvcHR2YWwsIG9wdGxlbik7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc3Vub3NfZ2V0c29ja29wdCh1MzIgX19mZCwgdTMyIF9fbGV2ZWwsIHUzMiBfX29wdG5hbWUsCi0JCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQotewotCWludCBmZCA9IChpbnQpIF9fZmQ7Ci0JaW50IGxldmVsID0gKGludCkgX19sZXZlbDsKLQlpbnQgb3B0bmFtZSA9IChpbnQpIF9fb3B0bmFtZTsKLQlpbnQgdHJfb3B0ID0gb3B0bmFtZTsKLQlpbnQgcmV0OwotCi0JaWYgKGxldmVsID09IFNPTF9JUCkgewotCQkvKiBNdWx0aWNhc3Qgc29ja2V0b3B0cyAodHRsLCBtZW1iZXJzaGlwKSAqLwotCQlpZiAodHJfb3B0ID49MiAmJiB0cl9vcHQgPD0gNikKLQkJCXRyX29wdCArPSAzMDsKLQl9Ci0JcmV0ID0gY29tcGF0X3N5c19nZXRzb2Nrb3B0KGZkLCBsZXZlbCwgdHJfb3B0LAotCQkJCSAgICBvcHR2YWwsIG9wdGxlbik7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggNmI5YjcxOC4uYTRmZWYyYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTE1NSwxMjUgKzE1NSwzIEBACiAJLndvcmQgc3lzX3NldF9tZW1wb2xpY3ksIHN5c19rZXhlY19sb2FkLCBzeXNfbW92ZV9wYWdlcywgc3lzX2dldGNwdSwgc3lzX2Vwb2xsX3B3YWl0CiAvKjMxMCovCS53b3JkIHN5c191dGltZW5zYXQsIHN5c19zaWduYWxmZCwgc3lzX3RpbWVyZmRfY3JlYXRlLCBzeXNfZXZlbnRmZCwgc3lzX2ZhbGxvY2F0ZQogCS53b3JkIHN5c190aW1lcmZkX3NldHRpbWUsIHN5c190aW1lcmZkX2dldHRpbWUKLQotI2lmIGRlZmluZWQoQ09ORklHX1NVTk9TX0VNVUwpIHx8IGRlZmluZWQoQ09ORklHX1NPTEFSSVNfRU1VTCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1NPTEFSSVNfRU1VTF9NT0RVTEUpCi0JLyogTm93IHRoZSAzMi1iaXQgU3VuT1Mgc3lzY2FsbCB0YWJsZS4gKi8KLQotCS5hbGlnbiA0Ci0JLmdsb2JsIHN1bm9zX3N5c190YWJsZQotc3Vub3Nfc3lzX3RhYmxlOgotLyowKi8JLndvcmQgc3Vub3NfaW5kaXIsIHN5czMyX2V4aXQsIHN5c19mb3JrCi0JLndvcmQgc3Vub3NfcmVhZCwgc3Vub3Nfd3JpdGUsIHN1bm9zX29wZW4KLQkud29yZCBzeXNfY2xvc2UsIHN1bm9zX3dhaXQ0LCBzeXNfY3JlYXQKLQkud29yZCBzeXNfbGluaywgc3lzX3VubGluaywgc3Vub3NfZXhlY3YKLQkud29yZCBzeXNfY2hkaXIsIHN1bm9zX25vc3lzLCBzeXMzMl9ta25vZAotCS53b3JkIHN5c19jaG1vZCwgc3lzMzJfbGNob3duMTYsIHN1bm9zX2JyawotCS53b3JkIHN1bm9zX25vc3lzLCBzeXMzMl9sc2Vlaywgc3Vub3NfZ2V0cGlkCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX2dldHVpZCwgc3Vub3Nfbm9zeXMsIHN5c19wdHJhY2UKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN5c19hY2Nlc3MsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN5c19zeW5jLCBzeXNfa2lsbCwgY29tcGF0X3N5c19uZXdzdGF0Ci0JLndvcmQgc3Vub3Nfbm9zeXMsIGNvbXBhdF9zeXNfbmV3bHN0YXQsIHN5c19kdXAKLQkud29yZCBzeXNfcGlwZSwgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19nZXRnaWQKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLS8qNTAqLwkud29yZCBzdW5vc19ub3N5cywgc3lzX2FjY3QsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3NfbWN0bCwgc3Vub3NfaW9jdGwsIHN5c19yZWJvb3QKLQkud29yZCBzdW5vc19ub3N5cywgc3lzX3N5bWxpbmssIHN5c19yZWFkbGluawotCS53b3JkIHN5czMyX2V4ZWN2ZSwgc3lzX3VtYXNrLCBzeXNfY2hyb290Ci0JLndvcmQgY29tcGF0X3N5c19uZXdmc3RhdCwgc3Vub3Nfbm9zeXMsIHN5c19nZXRwYWdlc2l6ZQotCS53b3JkIHN5c19tc3luYywgc3lzX3Zmb3JrLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19zYnJrLCBzdW5vc19zc3RrCi0JLndvcmQgc3Vub3NfbW1hcCwgc3Vub3NfdmFkdmlzZSwgc3lzX211bm1hcAotCS53b3JkIHN5c19tcHJvdGVjdCwgc3lzX21hZHZpc2UsIHN5c192aGFuZ3VwCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN5c19taW5jb3JlLCBzeXMzMl9nZXRncm91cHMxNgotCS53b3JkIHN5czMyX3NldGdyb3VwczE2LCBzeXNfZ2V0cGdycCwgc3Vub3Nfc2V0cGdycAotCS53b3JkIGNvbXBhdF9zeXNfc2V0aXRpbWVyLCBzdW5vc19ub3N5cywgc3lzX3N3YXBvbgotCS53b3JkIGNvbXBhdF9zeXNfZ2V0aXRpbWVyLCBzeXNfZ2V0aG9zdG5hbWUsIHN5c19zZXRob3N0bmFtZQotCS53b3JkIHN1bm9zX2dldGR0YWJsZXNpemUsIHN5c19kdXAyLCBzdW5vc19ub3AKLQkud29yZCBjb21wYXRfc3lzX2ZjbnRsLCBzdW5vc19zZWxlY3QsIHN1bm9zX25vcAotCS53b3JkIHN5c19mc3luYywgc3lzMzJfc2V0cHJpb3JpdHksIHN5czMyX3NvY2tldAotCS53b3JkIHN5czMyX2Nvbm5lY3QsIHN1bm9zX2FjY2VwdAotLyoxMDAqLwkud29yZCBzeXNfZ2V0cHJpb3JpdHksIHN1bm9zX3NlbmQsIHN1bm9zX3JlY3YKLQkud29yZCBzdW5vc19ub3N5cywgc3lzMzJfYmluZCwgc3Vub3Nfc2V0c29ja29wdAotCS53b3JkIHN5czMyX2xpc3Rlbiwgc3Vub3Nfbm9zeXMsIHN1bm9zX3NpZ2FjdGlvbgotCS53b3JkIHN1bm9zX3NpZ2Jsb2NrLCBzdW5vc19zaWdzZXRtYXNrLCBzeXNfc2lncGF1c2UKLQkud29yZCBzeXMzMl9zaWdzdGFjaywgc3lzMzJfcmVjdm1zZywgc3lzMzJfc2VuZG1zZwotCS53b3JkIHN1bm9zX25vc3lzLCBzeXMzMl9nZXR0aW1lb2ZkYXksIGNvbXBhdF9zeXNfZ2V0cnVzYWdlCi0JLndvcmQgc3Vub3NfZ2V0c29ja29wdCwgc3Vub3Nfbm9zeXMsIHN1bm9zX3JlYWR2Ci0JLndvcmQgc3Vub3Nfd3JpdGV2LCBzeXMzMl9zZXR0aW1lb2ZkYXksIHN5czMyX2ZjaG93bjE2Ci0JLndvcmQgc3lzX2ZjaG1vZCwgc3lzMzJfcmVjdmZyb20sIHN5czMyX3NldHJldWlkMTYKLQkud29yZCBzeXMzMl9zZXRyZWdpZDE2LCBzeXNfcmVuYW1lLCBzeXNfdHJ1bmNhdGUKLQkud29yZCBzeXNfZnRydW5jYXRlLCBzeXNfZmxvY2ssIHN1bm9zX25vc3lzCi0JLndvcmQgc3lzMzJfc2VuZHRvLCBzeXMzMl9zaHV0ZG93biwgc3lzMzJfc29ja2V0cGFpcgotCS53b3JkIHN5c19ta2Rpciwgc3lzX3JtZGlyLCBzeXMzMl91dGltZXMKLQkud29yZCBzeXMzMl9zaWdyZXR1cm4sIHN1bm9zX25vc3lzLCBzeXMzMl9nZXRwZWVybmFtZQotCS53b3JkIHN1bm9zX2dldGhvc3RpZCwgc3Vub3Nfbm9zeXMsIGNvbXBhdF9zeXNfZ2V0cmxpbWl0Ci0JLndvcmQgY29tcGF0X3N5c19zZXRybGltaXQsIHN1bm9zX2tpbGxwZywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLS8qMTUwKi8JLndvcmQgc3lzMzJfZ2V0c29ja25hbWUsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN5c19wb2xsLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19nZXRkaXJlbnRyaWVzLCBjb21wYXRfc3lzX3N0YXRmcywgY29tcGF0X3N5c19mc3RhdGZzCi0JLndvcmQgc3lzX29sZHVtb3VudCwgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3lzX2dldGRvbWFpbm5hbWUsIHN5c19zZXRkb21haW5uYW1lCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN5c19xdW90YWN0bCwgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3lzX3VzdGF0LCBzdW5vc19zZW1zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfc2htc3lzLCBzdW5vc19hdWRpdAotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19nZXRkZW50cywgc3lzX3NldHNpZAotCS53b3JkIHN5c19mY2hkaXIsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgY29tcGF0X3N5c19zaWdwZW5kaW5nLCBzdW5vc19ub3N5cwotCS53b3JkIHN5c19zZXRwZ2lkLCBzdW5vc19wYXRoY29uZiwgc3Vub3NfZnBhdGhjb25mCi0JLndvcmQgc3Vub3Nfc3lzY29uZiwgc3Vub3NfdW5hbWUsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0vKjIwMCovCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLS8qMjUwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMKLS8qMjYwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMKLS8qMjcwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMKLS8qMjgwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMKLS8qMjkwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMKLS8qMzAwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCi0JLndvcmQgc3Vub3Nfbm9zeXMKLS8qMzEwKi8JLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwotCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKLQkud29yZCBzdW5vc19ub3N5cwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5oIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5ZjVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5oCkBAIC0wLDAgKzEsNTEgQEAKKyNpZm5kZWYgX1NZU1RCTFNfSAorI2RlZmluZSBfU1lTVEJMU19ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxhc20vdXRyYXAuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisKK2V4dGVybiBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX2dldHBhZ2VzaXplKHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzcGFyY19icmsodW5zaWduZWQgbG9uZyBicmspOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzcGFyY19waXBlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX2lwYyh1bnNpZ25lZCBpbnQgY2FsbCwgaW50IGZpcnN0LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vjb25kLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdGhpcmQsCisJCQkgICAgICAgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCk7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIHNwYXJjNjRfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqbmFtZSk7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIHNwYXJjNjRfcGVyc29uYWxpdHkodW5zaWduZWQgbG9uZyBwZXJzb25hbGl0eSk7CitleHRlcm4gYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19tbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCSB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJCSB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIG9mZik7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5czY0X211bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBsZW4pOworZXh0ZXJuIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXM2NF9tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2xkX2xlbiwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG5ld19sZW4sCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG5ld19hZGRyKTsKK2V4dGVybiBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgY19zeXNfbmlzX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0ZG9tYWlubmFtZShjaGFyIF9fdXNlciAqbmFtZSwgaW50IGxlbik7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c191dHJhcF9pbnN0YWxsKHV0cmFwX2VudHJ5X3QgdHlwZSwKKwkJCQkJIHV0cmFwX2hhbmRsZXJfdCBuZXdfcCwKKwkJCQkJIHV0cmFwX2hhbmRsZXJfdCBuZXdfZCwKKwkJCQkJIHV0cmFwX2hhbmRsZXJfdCBfX3VzZXIgKm9sZF9wLAorCQkJCQkgdXRyYXBfaGFuZGxlcl90IF9fdXNlciAqb2xkX2QpOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzcGFyY19tZW1vcnlfb3JkZXJpbmcodW5zaWduZWQgbG9uZyBtb2RlbCwKKwkJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c19ydF9zaWdhY3Rpb24oaW50IHNpZywKKwkJCQkJY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwkJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCisJCQkJCXZvaWQgX191c2VyICpyZXN0b3JlciwKKwkJCQkJc2l6ZV90IHNpZ3NldHNpemUpOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfcGVyZmN0cihpbnQgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIGFyZzAsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIpOworCitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHNwYXJjNjRfc2V0X2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzcGFyYzY0X2dldF9jb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX3NpZ3BhdXNlKHVuc2lnbmVkIGludCBzZXQpOworZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2lnc3VzcGVuZChvbGRfc2lnc2V0X3Qgc2V0KTsKK2V4dGVybiB2b2lkIGRvX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNlbmRpZiAvKiBfU1lTVEJMU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jCmluZGV4IGQyMDRmMWEuLmU1ZDIzODkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jCkBAIC0xLDcgKzEsNiBAQAotLyogJElkOiB0aW1lLmMsdiAxLjQyIDIwMDIvMDEvMjMgMTQ6MzM6NTUgZGF2ZW0gRXhwICQKLSAqIHRpbWUuYzogVWx0cmFTcGFyYyB0aW1lciBhbmQgVE9EIGNsb2NrIHN1cHBvcnQuCisvKiB0aW1lLmM6IFVsdHJhU3BhcmMgdGltZXIgYW5kIFRPRCBjbG9jayBzdXBwb3J0LgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk4IEVkZGllIEMuIERvc3QgICAoZWNkQHNreW5ldC5iZSkKICAqCiAgKiBCYXNlZCBsYXJnZWx5IG9uIGNvZGUgd2hpY2ggaXM6CkBAIC00OCw2ICs0Nyw4IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KIAorI2luY2x1ZGUgImVudHJ5LmgiCisKIERFRklORV9TUElOTE9DSyhtb3N0ZWtfbG9jayk7CiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogdm9pZCBfX2lvbWVtICptc3RrNDh0MDJfcmVncyA9IE5VTEw7CkBAIC01MDgsNiArNTA5LDM3IEBACiAJcmV0dXJuIChkYXRhMSA9PSBkYXRhMik7CS8qIFdhcyB0aGUgd3JpdGUgYmxvY2tlZD8gKi8KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IG1vc3Rla19zZXRfc3lzdGVtX3RpbWUodm9pZCBfX2lvbWVtICptcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjOworCXU4IHRtcDsKKworCXNwaW5fbG9ja19pcnEoJm1vc3Rla19sb2NrKTsKKworCS8qIFRyYWRpdGlvbmFsIE1vc3RlayBjaGlwLiAqLworCXRtcCA9IG1vc3Rla19yZWFkKG1yZWdzICsgTU9TVEVLX0NSRUcpOworCXRtcCB8PSBNU1RLX0NSRUdfUkVBRDsKKwltb3N0ZWtfd3JpdGUobXJlZ3MgKyBNT1NURUtfQ1JFRywgdG1wKTsKKworCXNlYyA9IE1TVEtfUkVHX1NFQyhtcmVncyk7CisJbWluID0gTVNUS19SRUdfTUlOKG1yZWdzKTsKKwlob3VyID0gTVNUS19SRUdfSE9VUihtcmVncyk7CisJZGF5ID0gTVNUS19SRUdfRE9NKG1yZWdzKTsKKwltb24gPSBNU1RLX1JFR19NT05USChtcmVncyk7CisJeWVhciA9IE1TVEtfQ1ZUX1lFQVIoIE1TVEtfUkVHX1lFQVIobXJlZ3MpICk7CisKKwl4dGltZS50dl9zZWMgPSBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKKwl4dGltZS50dl9uc2VjID0gKElOSVRJQUxfSklGRklFUyAlIEhaKSAqIChOU0VDX1BFUl9TRUMgLyBIWik7CisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAorIAkgICAgICAgICAgICAgICAgICAgICAgICAteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CisKKwl0bXAgPSBtb3N0ZWtfcmVhZChtcmVncyArIE1PU1RFS19DUkVHKTsKKwl0bXAgJj0gfk1TVEtfQ1JFR19SRUFEOworCW1vc3Rla193cml0ZShtcmVncyArIE1PU1RFS19DUkVHLCB0bXApOworCisJc3Bpbl91bmxvY2tfaXJxKCZtb3N0ZWtfbG9jayk7Cit9CisKIC8qIFByb2JlIGZvciB0aGUgcmVhbCB0aW1lIGNsb2NrIGNoaXAuICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3N5c3RlbV90aW1lKHZvaWQpCiB7CkBAIC01MjAsNyArNTUyLDYgQEAKIAl1bnNpZ25lZCBsb25nIGRyZWdzID0gMFVMOwogCXZvaWQgX19pb21lbSAqYnJlZ3MgPSAwVUw7CiAjZW5kaWYKLQl1OCB0bXA7CiAKIAlpZiAoIW1yZWdzICYmICFkcmVncyAmJiAhYnJlZ3MpIHsKIAkJcHJvbV9wcmludGYoIlNvbWV0aGluZyB3cm9uZywgY2xvY2sgcmVncyBub3QgbWFwcGVkIHlldC5cbiIpOwpAQCAtNTI4LDIwICs1NTksMTEgQEAKIAl9CQkKIAogCWlmIChtcmVncykgewotCQlzcGluX2xvY2tfaXJxKCZtb3N0ZWtfbG9jayk7CisJCW1vc3Rla19zZXRfc3lzdGVtX3RpbWUobXJlZ3MpOworCQlyZXR1cm47CisJfQogCi0JCS8qIFRyYWRpdGlvbmFsIE1vc3RlayBjaGlwLiAqLwotCQl0bXAgPSBtb3N0ZWtfcmVhZChtcmVncyArIE1PU1RFS19DUkVHKTsKLQkJdG1wIHw9IE1TVEtfQ1JFR19SRUFEOwotCQltb3N0ZWtfd3JpdGUobXJlZ3MgKyBNT1NURUtfQ1JFRywgdG1wKTsKLQotCQlzZWMgPSBNU1RLX1JFR19TRUMobXJlZ3MpOwotCQltaW4gPSBNU1RLX1JFR19NSU4obXJlZ3MpOwotCQlob3VyID0gTVNUS19SRUdfSE9VUihtcmVncyk7Ci0JCWRheSA9IE1TVEtfUkVHX0RPTShtcmVncyk7Ci0JCW1vbiA9IE1TVEtfUkVHX01PTlRIKG1yZWdzKTsKLQkJeWVhciA9IE1TVEtfQ1ZUX1lFQVIoIE1TVEtfUkVHX1lFQVIobXJlZ3MpICk7Ci0JfSBlbHNlIGlmIChicmVncykgeworCWlmIChicmVncykgewogCQl1bnNpZ25lZCBjaGFyIHZhbCA9IHJlYWRiKGJyZWdzICsgMHgwZSk7CiAJCXVuc2lnbmVkIGludCBjZW50dXJ5OwogCkBAIC01OTYsMTQgKzYxOCw2IEBACiAJeHRpbWUudHZfbnNlYyA9IChJTklUSUFMX0pJRkZJRVMgJSBIWikgKiAoTlNFQ19QRVJfU0VDIC8gSFopOwogCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKICAJICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwotCi0JaWYgKG1yZWdzKSB7Ci0JCXRtcCA9IG1vc3Rla19yZWFkKG1yZWdzICsgTU9TVEVLX0NSRUcpOwotCQl0bXAgJj0gfk1TVEtfQ1JFR19SRUFEOwotCQltb3N0ZWtfd3JpdGUobXJlZ3MgKyBNT1NURUtfQ1JFRywgdG1wKTsKLQotCQlzcGluX3VubG9ja19pcnEoJm1vc3Rla19sb2NrKTsKLQl9CiB9CiAKIC8qIGRhdmVtIHN1Z2dlc3RzIHdlIGtlZXAgdGhpcyB3aXRoaW4gdGhlIDRNIGxvY2tlZCBrZXJuZWwgaW1hZ2UgKi8KQEAgLTEwMjcsNyArMTA0MSw3IEBACiAJc2V0dXBfY2xvY2tldmVudF9tdWx0aXBsaWVyKGNsb2NrKTsKIAogCXNwYXJjNjRfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZmZmZmZmZmZmZmZmZiwgJnNwYXJjNjRfY2xvY2tldmVudCk7CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHg3ZmZmZmZmZmZmZmZmZmZmVUwsICZzcGFyYzY0X2Nsb2NrZXZlbnQpOwogCXNwYXJjNjRfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQogCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJnNwYXJjNjRfY2xvY2tldmVudCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhbXBvbGluZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKaW5kZXggMDRlODFkZC4uNTZmZjU1MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKQEAgLTQsNiArNCw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KICNpbmNsdWRlIDxhc20vbHN1Lmg+CkBAIC0zNiw3ICszOCw3IEBACiB0cmFtcF9zdGFjazoKIAkuc2tpcAlUUkFNUF9TVEFDS19TSVpFCiAKLQkudGV4dAorCV9fQ1BVSU5JVAogCS5hbGlnbgkJOAogCS5nbG9ibAkJc3BhcmM2NF9jcHVfc3RhcnR1cCwgc3BhcmM2NF9jcHVfc3RhcnR1cF9lbmQKIHNwYXJjNjRfY3B1X3N0YXJ0dXA6CkBAIC0xMDMsNyArMTA1LDcgQEAKIAl3cgkJJWcyLCAwLCAldGlja19jbXByCiAKIAkvKiBDYWxsIE9CUCBieSBoYW5kIHRvIGxvY2sgS0VSTkJBU0UgaW50byBpL2QgdGxicy4KLQkgKiBXZSBsb2NrIDIgY29uc2VxdWV0aXZlIGVudHJpZXMgaWYgd2UgYXJlICdiaWdrZXJuZWwnLgorCSAqIFdlIGxvY2sgJ251bV9rZXJuZWxfaW1hZ2VfbWFwcGluZ3MnIGNvbnNlcXVldGl2ZSBlbnRyaWVzLgogCSAqLwogCXNldGhpCQklaGkocHJvbV9lbnRyeV9sb2NrKSwgJWcyCiAxOglsZHN0dWIJCVslZzIgKyAlbG8ocHJvbV9lbnRyeV9sb2NrKV0sICVnMQpAQCAtMTE3LDYgKzExOSwyOSBAQAogCWFkZAkJJWwyLCAtKDE5MiArIDEyOCksICVzcAogCWZsdXNodwogCisJLyogU2V0dXAgdGhlIGxvb3AgdmFyaWFibGVzOgorCSAqICVsMzogVkFERFIgYmFzZQorCSAqICVsNDogVFRFIGJhc2UKKwkgKiAlbDU6IExvb3AgaXRlcmF0b3IsIGl0ZXJhdGVzIGZyb20gMCB0byAnbnVtX2tlcm5lbF9pbWFnZV9tYXBwaW5ncycKKwkgKiAlbDY6IE51bWJlciBvZiBUVEUgZW50cmllcyB0byBtYXAKKwkgKiAlbDc6IEhpZ2hlc3QgVFRFIGVudHJ5IG51bWJlciwgd2UgY291bnQgZG93bgorCSAqLworCXNldGhpCQklaGkoS0VSTkJBU0UpLCAlbDMKKwlzZXRoaQkJJWhpKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKSwgJWw0CisJbGR4CQlbJWw0ICsgJWxvKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKV0sICVsNAorCWNscgkJJWw1CisJc2V0aGkJCSVoaShudW1fa2VybmVsX2ltYWdlX21hcHBpbmdzKSwgJWw2CisJbGR1dwkJWyVsNiArICVsbyhudW1fa2VybmVsX2ltYWdlX21hcHBpbmdzKV0sICVsNgorCWFkZAkJJWw2LCAxLCAlbDYKKworCW1vdgkJMTUsICVsNworCUJSQU5DSF9JRl9BTllfQ0hFRVRBSChnMSxnNSwyZikKKworCW1vdgkJNjMsICVsNworMjoKKworMzoKKwkvKiBMb2NrIGludG8gSS1NTVUgKi8KIAlzZXRoaQkJJWhpKGNhbGxfbWV0aG9kKSwgJWcyCiAJb3IJCSVnMiwgJWxvKGNhbGxfbWV0aG9kKSwgJWcyCiAJc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwMF0KQEAgLTEzMCw2MyArMTU1LDI2IEBACiAJc2V0aGkJCSVoaShwcm9tX21tdV9paGFuZGxlX2NhY2hlKSwgJWcyCiAJbGR1dwkJWyVnMiArICVsbyhwcm9tX21tdV9paGFuZGxlX2NhY2hlKV0sICVnMgogCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjBdCi0Jc2V0aGkJCSVoaShLRVJOQkFTRSksICVnMgotCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjhdCi0Jc2V0aGkJCSVoaShrZXJuX2xvY2tlZF90dGVfZGF0YSksICVnMgotCWxkeAkJWyVnMiArICVsbyhrZXJuX2xvY2tlZF90dGVfZGF0YSldLCAlZzIKLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDMwXQogCi0JbW92CQkxNSwgJWcyCi0JQlJBTkNIX0lGX0FOWV9DSEVFVEFIKGcxLGc1LDFmKQorCS8qIEVhY2ggVFRFIG1hcHMgNE1CLCBjb252ZXJ0IGluZGV4IHRvIG9mZnNldC4gICovCisJc2xseAkJJWw1LCAyMiwgJWcxCiAKLQltb3YJCTYzLCAlZzIKLTE6CisJYWRkCQklbDMsICVnMSwgJWcyCisJc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyOF0JISBWQUREUgorCWFkZAkJJWw0LCAlZzEsICVnMgorCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzBdCSEgVFRFCisKKwkvKiBUVEUgaW5kZXggaXMgaGlnaGVzdCBtaW51cyBsb29wIGluZGV4LiAgKi8KKwlzdWIJCSVsNywgJWw1LCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDM4XQorCiAJc2V0aGkJCSVoaShwMTI3NWJ1ZiksICVnMgogCW9yCQklZzIsICVsbyhwMTI3NWJ1ZiksICVnMgogCWxkeAkJWyVnMiArIDB4MDhdLCAlbzEKIAljYWxsCQklbzEKIAkgYWRkCQklc3AsICgyMDQ3ICsgMTI4KSwgJW8wCiAKLQlzZXRoaQkJJWhpKGJpZ2tlcm5lbCksICVnMgotCWxkdXcJCVslZzIgKyAlbG8oYmlna2VybmVsKV0sICVnMgotCWJyeixwdAkJJWcyLCBkb19kdGxiCi0JIG5vcAotCi0Jc2V0aGkJCSVoaShjYWxsX21ldGhvZCksICVnMgotCW9yCQklZzIsICVsbyhjYWxsX21ldGhvZCksICVnMgotCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MDBdCi0JbW92CQk1LCAlZzIKLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDA4XQotCW1vdgkJMSwgJWcyCi0Jc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgxMF0KLQlzZXRoaQkJJWhpKGl0bGJfbG9hZCksICVnMgotCW9yCQklZzIsICVsbyhpdGxiX2xvYWQpLCAlZzIKLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDE4XQotCXNldGhpCQklaGkocHJvbV9tbXVfaWhhbmRsZV9jYWNoZSksICVnMgotCWxkdXcJCVslZzIgKyAlbG8ocHJvbV9tbXVfaWhhbmRsZV9jYWNoZSldLCAlZzIKLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDIwXQotCXNldGhpCQklaGkoS0VSTkJBU0UgKyAweDQwMDAwMCksICVnMgotCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjhdCi0Jc2V0aGkJCSVoaShrZXJuX2xvY2tlZF90dGVfZGF0YSksICVnMgotCWxkeAkJWyVnMiArICVsbyhrZXJuX2xvY2tlZF90dGVfZGF0YSldLCAlZzIKLQlzZXRoaQkJJWhpKDB4NDAwMDAwKSwgJWcxCi0JYWRkCQklZzIsICVnMSwgJWcyCi0Jc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgzMF0KLQotCW1vdgkJMTQsICVnMgotCUJSQU5DSF9JRl9BTllfQ0hFRVRBSChnMSxnNSwxZikKLQotCW1vdgkJNjIsICVnMgotMToKLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDM4XQotCXNldGhpCQklaGkocDEyNzVidWYpLCAlZzIKLQlvcgkJJWcyLCAlbG8ocDEyNzVidWYpLCAlZzIKLQlsZHgJCVslZzIgKyAweDA4XSwgJW8xCi0JY2FsbAkJJW8xCi0JIGFkZAkJJXNwLCAoMjA0NyArIDEyOCksICVvMAotCi1kb19kdGxiOgorCS8qIExvY2sgaW50byBELU1NVSAqLwogCXNldGhpCQklaGkoY2FsbF9tZXRob2QpLCAlZzIKIAlvcgkJJWcyLCAlbG8oY2FsbF9tZXRob2QpLCAlZzIKIAlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDAwXQpAQCAtMjAwLDY1ICsxODgsMzAgQEAKIAlzZXRoaQkJJWhpKHByb21fbW11X2loYW5kbGVfY2FjaGUpLCAlZzIKIAlsZHV3CQlbJWcyICsgJWxvKHByb21fbW11X2loYW5kbGVfY2FjaGUpXSwgJWcyCiAJc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyMF0KLQlzZXRoaQkJJWhpKEtFUk5CQVNFKSwgJWcyCi0Jc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyOF0KLQlzZXRoaQkJJWhpKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKSwgJWcyCi0JbGR4CQlbJWcyICsgJWxvKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKV0sICVnMgotCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzBdCiAKLQltb3YJCTE1LCAlZzIKLQlCUkFOQ0hfSUZfQU5ZX0NIRUVUQUgoZzEsZzUsMWYpCisJLyogRWFjaCBUVEUgbWFwcyA0TUIsIGNvbnZlcnQgaW5kZXggdG8gb2Zmc2V0LiAgKi8KKwlzbGx4CQklbDUsIDIyLCAlZzEKIAotCW1vdgkJNjMsICVnMgotMToKKwlhZGQJCSVsMywgJWcxLCAlZzIKKwlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQkhIFZBRERSCisJYWRkCQklbDQsICVnMSwgJWcyCisJc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgzMF0JISBUVEUKIAorCS8qIFRURSBpbmRleCBpcyBoaWdoZXN0IG1pbnVzIGxvb3AgaW5kZXguICAqLworCXN1YgkJJWw3LCAlbDUsICVnMgogCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzhdCisKIAlzZXRoaQkJJWhpKHAxMjc1YnVmKSwgJWcyCiAJb3IJCSVnMiwgJWxvKHAxMjc1YnVmKSwgJWcyCiAJbGR4CQlbJWcyICsgMHgwOF0sICVvMQogCWNhbGwJCSVvMQogCSBhZGQJCSVzcCwgKDIwNDcgKyAxMjgpLCAlbzAKIAotCXNldGhpCQklaGkoYmlna2VybmVsKSwgJWcyCi0JbGR1dwkJWyVnMiArICVsbyhiaWdrZXJuZWwpXSwgJWcyCi0JYnJ6LHB0CQklZzIsIGRvX3VubG9jaworCWFkZAkJJWw1LCAxLCAlbDUKKwljbXAJCSVsNSwgJWw2CisJYm5lLHB0CQkleGNjLCAzYgogCSBub3AKIAotCXNldGhpCQklaGkoY2FsbF9tZXRob2QpLCAlZzIKLQlvcgkJJWcyLCAlbG8oY2FsbF9tZXRob2QpLCAlZzIKLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDAwXQotCW1vdgkJNSwgJWcyCi0Jc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwOF0KLQltb3YJCTEsICVnMgotCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MTBdCi0Jc2V0aGkJCSVoaShkdGxiX2xvYWQpLCAlZzIKLQlvcgkJJWcyLCAlbG8oZHRsYl9sb2FkKSwgJWcyCi0Jc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgxOF0KLQlzZXRoaQkJJWhpKHByb21fbW11X2loYW5kbGVfY2FjaGUpLCAlZzIKLQlsZHV3CQlbJWcyICsgJWxvKHByb21fbW11X2loYW5kbGVfY2FjaGUpXSwgJWcyCi0Jc3R4CQklZzIsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyMF0KLQlzZXRoaQkJJWhpKEtFUk5CQVNFICsgMHg0MDAwMDApLCAlZzIKLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQotCXNldGhpCQklaGkoa2Vybl9sb2NrZWRfdHRlX2RhdGEpLCAlZzIKLQlsZHgJCVslZzIgKyAlbG8oa2Vybl9sb2NrZWRfdHRlX2RhdGEpXSwgJWcyCi0Jc2V0aGkJCSVoaSgweDQwMDAwMCksICVnMQotCWFkZAkJJWcyLCAlZzEsICVnMgotCXN0eAkJJWcyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzBdCi0KLQltb3YJCTE0LCAlZzIKLQlCUkFOQ0hfSUZfQU5ZX0NIRUVUQUgoZzEsZzUsMWYpCi0KLQltb3YJCTYyLCAlZzIKLTE6Ci0KLQlzdHgJCSVnMiwgWyVzcCArIDIwNDcgKyAxMjggKyAweDM4XQotCXNldGhpCQklaGkocDEyNzVidWYpLCAlZzIKLQlvcgkJJWcyLCAlbG8ocDEyNzVidWYpLCAlZzIKLQlsZHgJCVslZzIgKyAweDA4XSwgJW8xCi0JY2FsbAkJJW8xCi0JIGFkZAkJJXNwLCAoMjA0NyArIDEyOCksICVvMAotCi1kb191bmxvY2s6CiAJc2V0aGkJCSVoaShwcm9tX2VudHJ5X2xvY2spLCAlZzIKIAlzdGIJCSVnMCwgWyVnMiArICVsbyhwcm9tX2VudHJ5X2xvY2spXQogCW1lbWJhcgkJI1N0b3JlU3RvcmUgfCAjU3RvcmVMb2FkCkBAIC0yNjcsNDcgKzIyMCwzNiBAQAogCSBub3AKIAogbmlhZ2FyYV9sb2NrX3RsYjoKKwlzZXRoaQkJJWhpKEtFUk5CQVNFKSwgJWwzCisJc2V0aGkJCSVoaShrZXJuX2xvY2tlZF90dGVfZGF0YSksICVsNAorCWxkeAkJWyVsNCArICVsbyhrZXJuX2xvY2tlZF90dGVfZGF0YSldLCAlbDQKKwljbHIJCSVsNQorCXNldGhpCQklaGkobnVtX2tlcm5lbF9pbWFnZV9tYXBwaW5ncyksICVsNgorCWxkdXcJCVslbDYgKyAlbG8obnVtX2tlcm5lbF9pbWFnZV9tYXBwaW5ncyldLCAlbDYKKwlhZGQJCSVsNiwgMSwgJWw2CisKKzE6CiAJbW92CQlIVl9GQVNUX01NVV9NQVBfUEVSTV9BRERSLCAlbzUKLQlzZXRoaQkJJWhpKEtFUk5CQVNFKSwgJW8wCisJc2xseAkJJWw1LCAyMiwgJWcyCisJYWRkCQklbDMsICVnMiwgJW8wCiAJY2xyCQklbzEKLQlzZXRoaQkJJWhpKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKSwgJW8yCi0JbGR4CQlbJW8yICsgJWxvKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKV0sICVvMgorCWFkZAkJJWw0LCAlZzIsICVvMgogCW1vdgkJSFZfTU1VX0lNTVUsICVvMwogCXRhCQlIVl9GQVNUX1RSQVAKIAogCW1vdgkJSFZfRkFTVF9NTVVfTUFQX1BFUk1fQUREUiwgJW81Ci0Jc2V0aGkJCSVoaShLRVJOQkFTRSksICVvMAorCXNsbHgJCSVsNSwgMjIsICVnMgorCWFkZAkJJWwzLCAlZzIsICVvMAogCWNscgkJJW8xCi0Jc2V0aGkJCSVoaShrZXJuX2xvY2tlZF90dGVfZGF0YSksICVvMgotCWxkeAkJWyVvMiArICVsbyhrZXJuX2xvY2tlZF90dGVfZGF0YSldLCAlbzIKKwlhZGQJCSVsNCwgJWcyLCAlbzIKIAltb3YJCUhWX01NVV9ETU1VLCAlbzMKIAl0YQkJSFZfRkFTVF9UUkFQCiAKLQlzZXRoaQkJJWhpKGJpZ2tlcm5lbCksICVnMgotCWxkdXcJCVslZzIgKyAlbG8oYmlna2VybmVsKV0sICVnMgotCWJyeixwdAkJJWcyLCBhZnRlcl9sb2NrX3RsYgorCWFkZAkJJWw1LCAxLCAlbDUKKwljbXAJCSVsNSwgJWw2CisJYm5lLHB0CQkleGNjLCAxYgogCSBub3AKIAotCW1vdgkJSFZfRkFTVF9NTVVfTUFQX1BFUk1fQUREUiwgJW81Ci0Jc2V0aGkJCSVoaShLRVJOQkFTRSArIDB4NDAwMDAwKSwgJW8wCi0JY2xyCQklbzEKLQlzZXRoaQkJJWhpKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKSwgJW8yCi0JbGR4CQlbJW8yICsgJWxvKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKV0sICVvMgotCXNldGhpCQklaGkoMHg0MDAwMDApLCAlbzMKLQlhZGQJCSVvMiwgJW8zLCAlbzIKLQltb3YJCUhWX01NVV9JTU1VLCAlbzMKLQl0YQkJSFZfRkFTVF9UUkFQCi0KLQltb3YJCUhWX0ZBU1RfTU1VX01BUF9QRVJNX0FERFIsICVvNQotCXNldGhpCQklaGkoS0VSTkJBU0UgKyAweDQwMDAwMCksICVvMAotCWNscgkJJW8xCi0Jc2V0aGkJCSVoaShrZXJuX2xvY2tlZF90dGVfZGF0YSksICVvMgotCWxkeAkJWyVvMiArICVsbyhrZXJuX2xvY2tlZF90dGVfZGF0YSldLCAlbzIKLQlzZXRoaQkJJWhpKDB4NDAwMDAwKSwgJW8zCi0JYWRkCQklbzIsICVvMywgJW8yCi0JbW92CQlIVl9NTVVfRE1NVSwgJW8zCi0JdGEJCUhWX0ZBU1RfVFJBUAotCiBhZnRlcl9sb2NrX3RsYjoKIAl3cnByCQklZzAsIChQU1RBVEVfUFJJViB8IFBTVEFURV9QRUYpLCAlcHN0YXRlCiAJd3IJCSVnMCwgMCwgJWZwcnMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwppbmRleCAyYjZhYmY2Li45NmRhODQ3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCkBAIC00Miw2ICs0Miw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCisjaW5jbHVkZSAiZW50cnkuaCIKIAogLyogV2hlbiBhbiBpcnJlY292ZXJhYmxlIHRyYXAgb2NjdXJzIGF0IHRsID4gMCwgdGhlIHRyYXAgZW50cnkKICAqIGNvZGUgbG9ncyB0aGUgdHJhcCBzdGF0ZSByZWdpc3RlcnMgYXQgZXZlcnkgbGV2ZWwgaW4gdGhlIHRyYXAKQEAgLTc3LDExICs3OCw2IEBACiAJfQogfQogCi12b2lkIGRvX2NhbGxfZGVidWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIAoteyAKLQlub3RpZnlfZGllKERJRV9DQUxMLCAiZGVidWcgY2FsbCIsIHJlZ3MsIDAsIDI1NSwgU0lHSU5UKTsgCi19Ci0KIHZvaWQgYmFkX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgbHZsKQogewogCWNoYXIgYnVmZmVyWzMyXTsKQEAgLTU1MCw0MSArNTQ2LDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVjYWNoZV9mbHVzaF9saW5lc2l6ZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVjYWNoZV9mbHVzaF9zaXplOwogCi0vKiBXQVJOSU5HOiBUaGUgZXJyb3IgdHJhcCBoYW5kbGVycyBpbiBhc3NlbWJseSBrbm93IHRoZSBwcmVjaXNlCi0gKgkgICAgbGF5b3V0IG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLgotICoKLSAqIEMtbGV2ZWwgaGFuZGxlcnMgYmVsb3cgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gbG9nIHRoZSBlcnJvcgotICogYW5kIHRoZW4gZGV0ZXJtaW5lIGhvdyB0byByZWNvdmVyIChpZiBwb3NzaWJsZSkuCi0gKi8KLXN0cnVjdCBjaGVldGFoX2Vycl9pbmZvIHsKLS8qMHgwMCovdTY0IGFmc3I7Ci0vKjB4MDgqL3U2NCBhZmFyOwotCi0JLyogRC1jYWNoZSBzdGF0ZSAqLwotLyoweDEwKi91NjQgZGNhY2hlX2RhdGFbNF07CS8qIFRoZSBhY3R1YWwgZGF0YQkqLwotLyoweDMwKi91NjQgZGNhY2hlX2luZGV4OwkvKiBELWNhY2hlIGluZGV4CSovCi0vKjB4MzgqL3U2NCBkY2FjaGVfdGFnOwkJLyogRC1jYWNoZSB0YWcvdmFsaWQJKi8KLS8qMHg0MCovdTY0IGRjYWNoZV91dGFnOwkvKiBELWNhY2hlIG1pY3JvdGFnCSovCi0vKjB4NDgqL3U2NCBkY2FjaGVfc3RhZzsJLyogRC1jYWNoZSBzbm9vcHRhZwkqLwotCi0JLyogSS1jYWNoZSBzdGF0ZSAqLwotLyoweDUwKi91NjQgaWNhY2hlX2RhdGFbOF07CS8qIFRoZSBhY3R1YWwgaW5zbnMgKyBwcmVkZWNvZGUJKi8KLS8qMHg5MCovdTY0IGljYWNoZV9pbmRleDsJLyogSS1jYWNoZSBpbmRleAkqLwotLyoweDk4Ki91NjQgaWNhY2hlX3RhZzsJCS8qIEktY2FjaGUgcGh5cyB0YWcJKi8KLS8qMHhhMCovdTY0IGljYWNoZV91dGFnOwkvKiBJLWNhY2hlIG1pY3JvdGFnCSovCi0vKjB4YTgqL3U2NCBpY2FjaGVfc3RhZzsJLyogSS1jYWNoZSBzbm9vcHRhZwkqLwotLyoweGIwKi91NjQgaWNhY2hlX3VwcGVyOwkvKiBJLWNhY2hlIHVwcGVyLXRhZwkqLwotLyoweGI4Ki91NjQgaWNhY2hlX2xvd2VyOwkvKiBJLWNhY2hlIGxvd2VyLXRhZwkqLwotCi0JLyogRS1jYWNoZSBzdGF0ZSAqLwotLyoweGMwKi91NjQgZWNhY2hlX2RhdGFbNF07CS8qIDMyIGJ5dGVzIGZyb20gc3RhZ2luZyByZWdpc3RlcnMgKi8KLS8qMHhlMCovdTY0IGVjYWNoZV9pbmRleDsJLyogRS1jYWNoZSBpbmRleAkqLwotLyoweGU4Ki91NjQgZWNhY2hlX3RhZzsJCS8qIEUtY2FjaGUgdGFnL3N0YXRlCSovCi0KLS8qMHhmMCovdTY0IF9fcGFkWzMyIC0gMzBdOwotfTsKLSNkZWZpbmUgQ0hBRlNSX0lOVkFMSUQJCSgodTY0KS0xTCkKLQogLyogVGhpcyB0YWJsZSBpcyBvcmRlcmVkIGluIHByaW9yaXR5IG9mIGVycm9ycyBhbmQgbWF0Y2hlcyB0aGUKICAqIEFGQVIgb3ZlcndyaXRlIHBvbGljeSBhcyB3ZWxsLgogICovCkBAIC03NTgsMTAgKzcxOSw2IEBACiBzdGF0aWMgc3RydWN0IGFmc3JfZXJyb3JfdGFibGUgKmNoZWV0YWhfZXJyb3JfdGFibGU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjaGVldGFoX2Fmc3JfZXJyb3JzOwogCi0vKiBUaGlzIGlzIGFsbG9jYXRlZCBhdCBib290IHRpbWUgYmFzZWQgdXBvbiB0aGUgbGFyZ2VzdCBoYXJkd2FyZQotICogY3B1IElEIGluIHRoZSBzeXN0ZW0uICBXZSBhbGxvY2F0ZSB0d28gZW50cmllcyBwZXIgY3B1LCBvbmUgZm9yCi0gKiBUTD09MCBsb2dnaW5nIGFuZCBvbmUgZm9yIFRMID49IDEgbG9nZ2luZy4KLSAqLwogc3RydWN0IGNoZWV0YWhfZXJyX2luZm8gKmNoZWV0YWhfZXJyb3JfbG9nOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjaGVldGFoX2Vycl9pbmZvICpjaGVldGFoX2dldF9lcnJvcl9sb2codW5zaWduZWQgbG9uZyBhZnNyKQpAQCAtMTc5MSw4ICsxNzQ4LDYgQEAKIAl9OwogfQogCi1leHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwotCiBzdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzdW40dl9lcnJvcl9lbnRyeSAqZW50LCBpbnQgY3B1LCBjb25zdCBjaGFyICpwZngsIGF0b21pY190ICpvY250KQogewogCWludCBjbnQ7CkBAIC0yMTA0LDcgKzIwNTksNyBAQAogCWZvcmNlX3NpZ19pbmZvKFNJR0ZQRSwgJmluZm8sIGN1cnJlbnQpOwogfQogCi12b2lkIGluc3RydWN0aW9uX2R1bXAgKHVuc2lnbmVkIGludCAqcGMpCitzdGF0aWMgdm9pZCBpbnN0cnVjdGlvbl9kdW1wKHVuc2lnbmVkIGludCAqcGMpCiB7CiAJaW50IGk7CiAKQEAgLTIxMTcsNyArMjA3Miw3IEBACiAJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCB1c2VyX2luc3RydWN0aW9uX2R1bXAgKHVuc2lnbmVkIGludCBfX3VzZXIgKnBjKQorc3RhdGljIHZvaWQgdXNlcl9pbnN0cnVjdGlvbl9kdW1wKHVuc2lnbmVkIGludCBfX3VzZXIgKnBjKQogewogCWludCBpOwogCXVuc2lnbmVkIGludCBidWZbOV07CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90dGFibGUuUwppbmRleCA3NTc1YWEzLi5iMGRlNGMwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHRhYmxlLlMKQEAgLTExNywxNiArMTE3LDEzIEBACiB0bDBfZjVvOglGSUxMXzVfT1RIRVIKIHRsMF9mNm86CUZJTExfNl9PVEhFUgogdGwwX2Y3bzoJRklMTF83X09USEVSCi10bDBfc3Vub3M6CVNVTk9TX1NZU0NBTExfVFJBUAordGwwX3Jlc3YxMDA6CUJUUkFQKDB4MTAwKQogdGwwX2JrcHQ6CUJSRUFLUE9JTlRfVFJBUAogdGwwX2Rpdno6CVRSQVAoZG9fZGl2MCkKIHRsMF9mbHVzaHc6CUZMVVNIX1dJTkRPV19UUkFQCi10bDBfcmVzdjEwNDoJQlRSQVAoMHgxMDQpIEJUUkFQKDB4MTA1KSBCVFJBUCgweDEwNikgQlRSQVAoMHgxMDcpCi0JCS5nbG9ibCB0bDBfc29sYXJpcwotdGwwX3NvbGFyaXM6CVNPTEFSSVNfU1lTQ0FMTF9UUkFQCi10bDBfcmVzdjEwOToJQlRSQVAoMHgxMDkpCi10bDBfcmVzdjEwYToJQlRSQVAoMHgxMGEpIEJUUkFQKDB4MTBiKSBCVFJBUCgweDEwYykgQlRSQVAoMHgxMGQpIEJUUkFQKDB4MTBlKQotdGwwX3Jlc3YxMGY6CUJUUkFQKDB4MTBmKQordGwwX3Jlc3YxMDQ6CUJUUkFQKDB4MTA0KSBCVFJBUCgweDEwNSkgQlRSQVAoMHgxMDYpIEJUUkFQKDB4MTA3KSBCVFJBUCgweDEwOCkKK3RsMF9yZXN2MTA5OglCVFJBUCgweDEwOSkgQlRSQVAoMHgxMGEpIEJUUkFQKDB4MTBiKSBCVFJBUCgweDEwYykgQlRSQVAoMHgxMGQpCit0bDBfcmVzdjEwZToJQlRSQVAoMHgxMGUpIEJUUkFQKDB4MTBmKQogdGwwX2xpbnV4MzI6CUxJTlVYXzMyQklUX1NZU0NBTExfVFJBUAogdGwwX29sZGxpbnV4NjQ6CUxJTlVYXzY0QklUX1NZU0NBTExfVFJBUAogdGwwX3Jlc3YxMTI6CVRSQVBfVVRSQVAoVVRfVFJBUF9JTlNUUlVDVElPTl8xOCwweDExMikgVFJBUF9VVFJBUChVVF9UUkFQX0lOU1RSVUNUSU9OXzE5LDB4MTEzKQpAQCAtMTM5LDggKzEzNiw3IEBACiB0bDBfZ2V0Y2M6CUdFVENDX1RSQVAKIHRsMF9zZXRjYzoJU0VUQ0NfVFJBUAogdGwwX2dldHBzcjoJVFJBUChkb19nZXRwc3IpCi10bDBfcmVzdjEyMzoJQlRSQVAoMHgxMjMpIEJUUkFQKDB4MTI0KSBCVFJBUCgweDEyNSkgQlRSQVAoMHgxMjYpCi10bDBfc29saW5kaXI6CUlORElSRUNUX1NPTEFSSVNfU1lTQ0FMTCgxNTYpCit0bDBfcmVzdjEyMzoJQlRSQVAoMHgxMjMpIEJUUkFQKDB4MTI0KSBCVFJBUCgweDEyNSkgQlRSQVAoMHgxMjYpIEJUUkFQKDB4MTI3KQogdGwwX3Jlc3YxMjg6CUJUUkFQKDB4MTI4KSBCVFJBUCgweDEyOSkgQlRSQVAoMHgxMmEpIEJUUkFQKDB4MTJiKSBCVFJBUCgweDEyYykKIHRsMF9yZXN2MTJkOglCVFJBUCgweDEyZCkgQlRSQVAoMHgxMmUpIEJUUkFQKDB4MTJmKSBCVFJBUCgweDEzMCkgQlRSQVAoMHgxMzEpCiB0bDBfcmVzdjEzMjoJQlRSQVAoMHgxMzIpIEJUUkFQKDB4MTMzKSBCVFJBUCgweDEzNCkgQlRSQVAoMHgxMzUpIEJUUkFQKDB4MTM2KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggZGM3YmYxYi4uMWE1MTFlOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtNyw2ICs3LDcgQEAKICAqLwogCiAKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMjgzLDcgKzI4NCw3IEBACiB7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnQsIGxhc3RfdGltZTsKIAotCWlmIChqaWZmaWVzIC0gbGFzdF90aW1lID4gNSAqIEhaKQorCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfdGltZSArIDUgKiBIWikpCiAJCWNvdW50ID0gMDsKIAlpZiAoY291bnQgPCA1KSB7CiAJCWxhc3RfdGltZSA9IGppZmZpZXM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCmluZGV4IGUyMDI3ZjIuLjI2NTBkMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCkBAIC0yNDQsMTYgKzI0NCw4IEBACiAJaWYgKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKSB7CiAJCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmVudHJ5OwogCi0JCWlmIChhc2kgPT0gQVNJX1AgJiYgKGluc24gJiAweGMwODAwMDAwKSA9PSAweGMwODAwMDAwKSB7Ci0JCQlpZiAoaW5zbiAmIDB4MjAwMCkKLQkJCQlhc2kgPSAocmVncy0+dHN0YXRlID4+IDI0KTsKLQkJCWVsc2UKLQkJCQlhc2kgPSAoaW5zbiA+PiA1KTsKLQkJfQotCQotCQkvKiBMb29rIGluIGFzaS5oOiBBbGwgX1MgYXNpcyBoYXZlIExTIGJpdCBzZXQgKi8KLQkJaWYgKChhc2kgJiAweDEpICYmCi0JCSAgICAoZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT50cGMpKSkgeworCQllbnRyeSA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPnRwYyk7CisJCWlmIChlbnRyeSkgewogCQkJcmVncy0+dHBjID0gZW50cnktPmZpeHVwOwogCQkJcmVncy0+dG5wYyA9IHJlZ3MtPnRwYyArIDQ7CiAJCQlyZXR1cm47CkBAIC0yOTQsNyArMjg2LDcgQEAKIAkJdW5zaWduZWQgbG9uZyB0cGMgPSByZWdzLT50cGM7CiAKIAkJLyogU2FuaXR5IGNoZWNrIHRoZSBQQy4gKi8KLQkJaWYgKCh0cGMgPj0gS0VSTkJBU0UgJiYgdHBjIDwgKHVuc2lnbmVkIGxvbmcpIF9ldGV4dCkgfHwKKwkJaWYgKCh0cGMgPj0gS0VSTkJBU0UgJiYgdHBjIDwgKHVuc2lnbmVkIGxvbmcpIF9faW5pdF9lbmQpIHx8CiAJCSAgICAodHBjID49IE1PRFVMRVNfVkFERFIgJiYgdHBjIDwgTU9EVUxFU19FTkQpKSB7CiAJCQkvKiBWYWxpZCwgbm8gcHJvYmxlbXMuLi4gKi8KIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMgYi9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCmluZGV4IGU3MjZjNDUuLmYzNzA3OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2luaXQuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3NzdGF0ZS5oPgogI2luY2x1ZGUgPGFzbS9tZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAKICNkZWZpbmUgTUFYX1BIWVNfQUREUkVTUwkoMVVMIDw8IDQyVUwpCiAjZGVmaW5lIEtQVEVfQklUTUFQX0NIVU5LX1NaCSgyNTZVTCAqIDEwMjRVTCAqIDEwMjRVTCkKQEAgLTE2Niw3ICsxNjcsNyBAQAogdW5zaWduZWQgbG9uZyBzcGFyYzY0X2tlcm5fcHJpX251Y19iaXRzIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBsb25nIHNwYXJjNjRfa2Vybl9zZWNfY29udGV4dCBfX3JlYWRfbW9zdGx5OwogCi1pbnQgYmlna2VybmVsID0gMDsKK2ludCBudW1fa2VybmVsX2ltYWdlX21hcHBpbmdzOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0RDRkxVU0gKIGF0b21pY190IGRjcGFnZV9mbHVzaGVzID0gQVRPTUlDX0lOSVQoMCk7CkBAIC01NzIsNyArNTczLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCByZW1hcF9rZXJuZWwodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHBoeXNfcGFnZSwgdHRlX3ZhZGRyLCB0dGVfZGF0YTsKLQlpbnQgdGxiX2VudCA9IHNwYXJjNjRfaGlnaGVzdF9sb2NrZWRfdGxiZW50KCk7CisJaW50IGksIHRsYl9lbnQgPSBzcGFyYzY0X2hpZ2hlc3RfbG9ja2VkX3RsYmVudCgpOwogCiAJdHRlX3ZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIEtFUk5CQVNFOwogCXBoeXNfcGFnZSA9IChwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2xvdyA+PiAyMlVMKSA8PCAyMlVMOwpAQCAtNTgyLDI3ICs1ODMsMjAgQEAKIAogCS8qIE5vdyBsb2NrIHVzIGludG8gdGhlIFRMQnMgdmlhIEh5cGVydmlzb3Igb3IgT0JQLiAqLwogCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7Ci0JCWh5cGVydmlzb3JfdGxiX2xvY2sodHRlX3ZhZGRyLCB0dGVfZGF0YSwgSFZfTU1VX0RNTVUpOwotCQloeXBlcnZpc29yX3RsYl9sb2NrKHR0ZV92YWRkciwgdHRlX2RhdGEsIEhWX01NVV9JTU1VKTsKLQkJaWYgKGJpZ2tlcm5lbCkgewotCQkJdHRlX3ZhZGRyICs9IDB4NDAwMDAwOwotCQkJdHRlX2RhdGEgKz0gMHg0MDAwMDA7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fa2VybmVsX2ltYWdlX21hcHBpbmdzOyBpKyspIHsKIAkJCWh5cGVydmlzb3JfdGxiX2xvY2sodHRlX3ZhZGRyLCB0dGVfZGF0YSwgSFZfTU1VX0RNTVUpOwogCQkJaHlwZXJ2aXNvcl90bGJfbG9jayh0dGVfdmFkZHIsIHR0ZV9kYXRhLCBIVl9NTVVfSU1NVSk7CisJCQl0dGVfdmFkZHIgKz0gMHg0MDAwMDA7CisJCQl0dGVfZGF0YSArPSAweDQwMDAwMDsKIAkJfQogCX0gZWxzZSB7Ci0JCXByb21fZHRsYl9sb2FkKHRsYl9lbnQsIHR0ZV9kYXRhLCB0dGVfdmFkZHIpOwotCQlwcm9tX2l0bGJfbG9hZCh0bGJfZW50LCB0dGVfZGF0YSwgdHRlX3ZhZGRyKTsKLQkJaWYgKGJpZ2tlcm5lbCkgewotCQkJdGxiX2VudCAtPSAxOwotCQkJcHJvbV9kdGxiX2xvYWQodGxiX2VudCwKLQkJCQkgICAgICAgdHRlX2RhdGEgKyAweDQwMDAwMCwgCi0JCQkJICAgICAgIHR0ZV92YWRkciArIDB4NDAwMDAwKTsKLQkJCXByb21faXRsYl9sb2FkKHRsYl9lbnQsCi0JCQkJICAgICAgIHR0ZV9kYXRhICsgMHg0MDAwMDAsIAotCQkJCSAgICAgICB0dGVfdmFkZHIgKyAweDQwMDAwMCk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fa2VybmVsX2ltYWdlX21hcHBpbmdzOyBpKyspIHsKKwkJCXByb21fZHRsYl9sb2FkKHRsYl9lbnQgLSBpLCB0dGVfZGF0YSwgdHRlX3ZhZGRyKTsKKwkJCXByb21faXRsYl9sb2FkKHRsYl9lbnQgLSBpLCB0dGVfZGF0YSwgdHRlX3ZhZGRyKTsKKwkJCXR0ZV92YWRkciArPSAweDQwMDAwMDsKKwkJCXR0ZV9kYXRhICs9IDB4NDAwMDAwOwogCQl9Ci0JCXNwYXJjNjRfaGlnaGVzdF91bmxvY2tlZF90bGJfZW50ID0gdGxiX2VudCAtIDE7CisJCXNwYXJjNjRfaGlnaGVzdF91bmxvY2tlZF90bGJfZW50ID0gdGxiX2VudCAtIGk7CiAJfQogCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKIAkJc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0ID0gKENUWF9DSEVFVEFIX1BMVVNfQ1RYMCB8CkBAIC02MTgsOSArNjEyLDkgQEAKIAlyZWFkX29icF90cmFuc2xhdGlvbnMoKTsKIAogCS8qIE5vdyBmaXh1cCBPQlAncyBpZGVhIGFib3V0IHdoZXJlIHdlIHJlYWxseSBhcmUgbWFwcGVkLiAqLwotCXByb21fcHJpbnRmKCJSZW1hcHBpbmcgdGhlIGtlcm5lbC4uLiAiKTsKKwlwcmludGsoIlJlbWFwcGluZyB0aGUga2VybmVsLi4uICIpOwogCXJlbWFwX2tlcm5lbCgpOwotCXByb21fcHJpbnRmKCJkb25lLlxuIik7CisJcHJpbnRrKCJkb25lLlxuIik7CiB9CiAKIHZvaWQgcHJvbV93b3JsZChpbnQgZW50ZXIpCkBAIC03MzksMTEgKzczMyw2IEBACiAJYXZvaWRfZW5kID0gUEFHRV9BTElHTihpbml0cmRfZW5kKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RNRU0KLQlwcm9tX3ByaW50ZigiY2hvb3NlX2Jvb3RtYXBfcGZuOiBrZXJuWyVseDolbHhdIGF2b2lkWyVseDolbHhdXG4iLAotCQkgICAga2Vybl9iYXNlLCBQQUdFX0FMSUdOKGtlcm5fYmFzZSArIGtlcm5fc2l6ZSksCi0JCSAgICBhdm9pZF9zdGFydCwgYXZvaWRfZW5kKTsKLSNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBwYXZhaWxfZW50czsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKIApAQCAtNzc3LDEwICs3NjYsNiBAQAogCQkJfQogCiAJCQkvKiBPSywgaXQgZG9lc24ndCBvdmVybGFwIGFueXRoaW5nLCB1c2UgaXQuICAqLwotI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCi0JCQlwcm9tX3ByaW50ZigiY2hvb3NlX2Jvb3RtYXBfcGZuOiBVc2luZyAlbHggWyVseF1cbiIsCi0JCQkJICAgIHN0YXJ0ID4+IFBBR0VfU0hJRlQsIHN0YXJ0KTsKLSNlbmRpZgogCQkJcmV0dXJuIHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CiAJCX0KIAl9CkBAIC05MjAsMTAgKzkwNSw2IEBACiAJdW5zaWduZWQgbG9uZyBib290bWFwX3BmbiwgYnl0ZXNfYXZhaWwsIHNpemU7CiAJaW50IGk7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfQk9PVE1FTQotCXByb21fcHJpbnRmKCJib290bWVtX2luaXQ6IFNjYW4gcGF2YWlsLCAiKTsKLSNlbmRpZgotCiAJYnl0ZXNfYXZhaWwgPSAwVUw7CiAJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspIHsKIAkJZW5kX29mX3BoeXNfbWVtb3J5ID0gcGF2YWlsW2ldLnBoeXNfYWRkciArCkBAIC05NzAsMzMgKzk1MSwyMCBAQAogCiAJYm9vdG1hcF9wZm4gPSBjaG9vc2VfYm9vdG1hcF9wZm4obWluX2xvd19wZm4sIGVuZF9wZm4pOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RNRU0KLQlwcm9tX3ByaW50ZigiaW5pdF9ib290bWVtKG1pblslbHhdLCBib290bWFwWyVseF0sIG1heFslbHhdKVxuIiwKLQkJICAgIG1pbl9sb3dfcGZuLCBib290bWFwX3BmbiwgbWF4X2xvd19wZm4pOwotI2VuZGlmCiAJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBib290bWFwX3BmbiwKIAkJCQkJIG1pbl9sb3dfcGZuLCBlbmRfcGZuKTsKIAogCS8qIE5vdyByZWdpc3RlciB0aGUgYXZhaWxhYmxlIHBoeXNpY2FsIG1lbW9yeSB3aXRoIHRoZQogCSAqIGFsbG9jYXRvci4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcGF2YWlsX2VudHM7IGkrKykgewotI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCi0JCXByb21fcHJpbnRmKCJmcmVlX2Jvb3RtZW0ocGF2YWlsOiVkKTogYmFzZVslbHhdIHNpemVbJWx4XVxuIiwKLQkJCSAgICBpLCBwYXZhaWxbaV0ucGh5c19hZGRyLCBwYXZhaWxbaV0ucmVnX3NpemUpOwotI2VuZGlmCisJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspCiAJCWZyZWVfYm9vdG1lbShwYXZhaWxbaV0ucGh5c19hZGRyLCBwYXZhaWxbaV0ucmVnX3NpemUpOwotCX0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChpbml0cmRfc3RhcnQpIHsKIAkJc2l6ZSA9IGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQ7CiAKIAkJLyogUmVzZXJ2ZSB0aGUgaW5pdHJkIGltYWdlIGFyZWEuICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RNRU0KLQkJcHJvbV9wcmludGYoInJlc2VydmVfYm9vdG1lbShpbml0cmQpOiBiYXNlWyVsbHhdIHNpemVbJWx4XVxuIiwKLQkJCWluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCk7Ci0jZW5kaWYKIAkJcmVzZXJ2ZV9ib290bWVtKGluaXRyZF9zdGFydCwgc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKIAogCQlpbml0cmRfc3RhcnQgKz0gUEFHRV9PRkZTRVQ7CkBAIC0xMDA0LDkgKzk3Miw2IEBACiAJfQogI2VuZGlmCiAJLyogUmVzZXJ2ZSB0aGUga2VybmVsIHRleHQvZGF0YS9ic3MuICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RNRU0KLQlwcm9tX3ByaW50ZigicmVzZXJ2ZV9ib290bWVtKGtlcm5lbCk6IGJhc2VbJWx4XSBzaXplWyVseF1cbiIsIGtlcm5fYmFzZSwga2Vybl9zaXplKTsKLSNlbmRpZgogCXJlc2VydmVfYm9vdG1lbShrZXJuX2Jhc2UsIGtlcm5fc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKIAkqcGFnZXNfYXZhaWwgLT0gUEFHRV9BTElHTihrZXJuX3NpemUpID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTEwMjAsMTAgKzk4NSw2IEBACiAJICogaW4gZnJlZV9hbGxfYm9vdG1lbS4KIAkgKi8KIAlzaXplID0gYm9vdG1hcF9zaXplOwotI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCi0JcHJvbV9wcmludGYoInJlc2VydmVfYm9vdG1lbShib290bWFwKTogYmFzZVslbHhdIHNpemVbJWx4XVxuIiwKLQkJICAgIChib290bWFwX3BmbiA8PCBQQUdFX1NISUZUKSwgc2l6ZSk7Ci0jZW5kaWYKIAlyZXNlcnZlX2Jvb3RtZW0oKGJvb3RtYXBfcGZuIDw8IFBBR0VfU0hJRlQpLCBzaXplLCBCT09UTUVNX0RFRkFVTFQpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspIHsKQEAgLTEwMzEsMTAgKzk5Miw2IEBACiAKIAkJc3RhcnRfcGZuID0gcGF2YWlsW2ldLnBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwogCQllbmRfcGZuID0gKHN0YXJ0X3BmbiArIChwYXZhaWxbaV0ucmVnX3NpemUgPj4gUEFHRV9TSElGVCkpOwotI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCi0JCXByb21fcHJpbnRmKCJtZW1vcnlfcHJlc2VudCgwLCAlbHgsICVseClcbiIsCi0JCQkgICAgc3RhcnRfcGZuLCBlbmRfcGZuKTsKLSNlbmRpZgogCQltZW1vcnlfcHJlc2VudCgwLCBzdGFydF9wZm4sIGVuZF9wZm4pOwogCX0KIApAQCAtMTA0Nyw3ICsxMDA0LDggQEAKIHN0YXRpYyBpbnQgcGFsbF9lbnRzIF9faW5pdGRhdGE7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBrZXJuZWxfbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgcHN0YXJ0LCB1bnNpZ25lZCBsb25nIHBlbmQsIHBncHJvdF90IHByb3QpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3JlZiBrZXJuZWxfbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgcHN0YXJ0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBwZW5kLCBwZ3Byb3RfdCBwcm90KQogewogCXVuc2lnbmVkIGxvbmcgdnN0YXJ0ID0gUEFHRV9PRkZTRVQgKyBwc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyB2ZW5kID0gUEFHRV9PRkZTRVQgKyBwZW5kOwpAQCAtMTMxNiwxMCArMTI3NCw2IEBACiAKIC8qIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgKi8KIAotZXh0ZXJuIHZvaWQgY2hlZXRhaF9lY2FjaGVfZmx1c2hfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHN1bjR2X3BhdGNoX3RsYl9oYW5kbGVycyh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgY3B1X3Byb2JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2VudHJhbF9wcm9iZSh2b2lkKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZF9wZm47CkBAIC0xMzg4LDEyICsxMzQyLDkgQEAKIAlzaGlmdCA9IGtlcm5fYmFzZSArIFBBR0VfT0ZGU0VUIC0gKCh1bnNpZ25lZCBsb25nKUtFUk5CQVNFKTsKIAogCXJlYWxfZW5kID0gKHVuc2lnbmVkIGxvbmcpX2VuZDsKLQlpZiAoKHJlYWxfZW5kID4gKCh1bnNpZ25lZCBsb25nKUtFUk5CQVNFICsgMHg0MDAwMDApKSkKLQkJYmlna2VybmVsID0gMTsKLQlpZiAoKHJlYWxfZW5kID4gKCh1bnNpZ25lZCBsb25nKUtFUk5CQVNFICsgMHg4MDAwMDApKSkgewotCQlwcm9tX3ByaW50ZigicGFnaW5nX2luaXQ6IEtlcm5lbCA+IDhNQiwgdG9vIGxhcmdlLlxuIik7Ci0JCXByb21faGFsdCgpOwotCX0KKwludW1fa2VybmVsX2ltYWdlX21hcHBpbmdzID0gRElWX1JPVU5EX1VQKHJlYWxfZW5kIC0gS0VSTkJBU0UsIDEgPDwgMjIpOworCXByaW50aygiS2VybmVsOiBVc2luZyAlZCBsb2NrZWQgVExCIGVudHJpZXMgZm9yIG1haW4ga2VybmVsIGltYWdlLlxuIiwKKwkgICAgICAgbnVtX2tlcm5lbF9pbWFnZV9tYXBwaW5ncyk7CiAKIAkvKiBTZXQga2VybmVsIHBnZCB0byB1cHBlciBhbGlhcyBzbyBwaHlzaWNhbCBwYWdlIGNvbXB1dGF0aW9ucwogCSAqIHdvcmsuCkBAIC0xNDUxLDcgKzE0MDIsNyBAQAogCQkJCSAgICB6aG9sZXNfc2l6ZSk7CiAJfQogCi0JcHJvbV9wcmludGYoIkJvb3RpbmcgTGludXguLi5cbiIpOworCXByaW50aygiQm9vdGluZyBMaW51eC4uLlxuIik7CiAKIAljZW50cmFsX3Byb2JlKCk7CiAJY3B1X3Byb2JlKCk7CkBAIC0xNTQ5LDEwICsxNTAwLDYgQEAKIAogCWhpZ2hfbWVtb3J5ID0gX192YShsYXN0X3ZhbGlkX3BmbiA8PCBQQUdFX1NISUZUKTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCi0JcHJvbV9wcmludGYoIm1lbV9pbml0OiBDYWxsaW5nIGZyZWVfYWxsX2Jvb3RtZW0oKS5cbiIpOwotI2VuZGlmCi0KIAkvKiBXZSBzdWJ0cmFjdCBvbmUgdG8gYWNjb3VudCBmb3IgdGhlIG1lbV9tYXBfemVybyBwYWdlCiAJICogYWxsb2NhdGVkIGJlbG93LgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL3RsYi5jIGIvYXJjaC9zcGFyYzY0L21tL3RsYi5jCmluZGV4IDNmMTBmYzkuLmFlMjQ5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS90bGIuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vdGxiLmMKQEAgLTIzLDkgKzIzLDcgQEAKIAogdm9pZCBmbHVzaF90bGJfcGVuZGluZyh2b2lkKQogewotCXN0cnVjdCBtbXVfZ2F0aGVyICptcCA9ICZfX2dldF9jcHVfdmFyKG1tdV9nYXRoZXJzKTsKLQotCXByZWVtcHRfZGlzYWJsZSgpOworCXN0cnVjdCBtbXVfZ2F0aGVyICptcCA9ICZnZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7CiAKIAlpZiAobXAtPnRsYl9ucikgewogCQlmbHVzaF90c2JfdXNlcihtcCk7CkBAIC00Miw3ICs0MCw3IEBACiAJCW1wLT50bGJfbnIgPSAwOwogCX0KIAotCXByZWVtcHRfZW5hYmxlKCk7CisJcHV0X2NwdV92YXIobW11X2dhdGhlcnMpOwogfQogCiB2b2lkIHRsYl9iYXRjaF9hZGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBvcmlnKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vbWlzYy5jIGIvYXJjaC9zcGFyYzY0L3Byb20vbWlzYy5jCmluZGV4IGJiZWM3NTIuLjQ3YTg3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYworKysgYi9hcmNoL3NwYXJjNjQvcHJvbS9taXNjLmMKQEAgLTU1LDkgKzU1LDYgQEAKIAkJICBQMTI3NV9JTk9VVCgxLCAxKSwgZnN0cmluZyk7CiB9CiAKLS8qIFdlIHdhbnQgdG8gZG8gdGhpcyBtb3JlIG5pY2VseSBzb21lIGRheS4gKi8KLWV4dGVybiB2b2lkICgqcHJvbV9wYWxldHRlKShpbnQpOwotCiAjaWZkZWYgQ09ORklHX1NNUAogZXh0ZXJuIHZvaWQgc21wX2NhcHR1cmUodm9pZCk7CiBleHRlcm4gdm9pZCBzbXBfcmVsZWFzZSh2b2lkKTsKQEAgLTcyLDkgKzY5LDYgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCWlmIChwcm9tX3BhbGV0dGUpCi0JCXByb21fcGFsZXR0ZSgxKTsKLQogI2lmZGVmIENPTkZJR19TTVAKIAlzbXBfY2FwdHVyZSgpOwogI2VuZGlmCkBAIC04NSw5ICs3OSw2IEBACiAJc21wX3JlbGVhc2UoKTsKICNlbmRpZgogCi0JaWYgKHByb21fcGFsZXR0ZSkKLQkJcHJvbV9wYWxldHRlKDApOwotCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9NYWtlZmlsZSBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yzg2NjMwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIFNvbGFyaXMgYmluYXJ5IGVtdWxhdGlvbi4KLSMKLQotRVhUUkFfQUZMQUdTIDo9IC1hbnNpCi0KLXNvbGFyaXMtb2JqcyA6PSBlbnRyeTY0Lm8gZnMubyBtaXNjLm8gc2lnbmFsLm8gc3lzdGJsLm8gc29ja2V0Lm8gXAotCQlpb2N0bC5vIGlwYy5vIHNvY2tzeXMubyB0aW1vZC5vCi0KLW9iai0kKENPTkZJR19TT0xBUklTX0VNVUwpICs9IHNvbGFyaXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvY29udi5oIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvY29udi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmFmNTlhLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2NvbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qICRJZDogY29udi5oLHYgMS40IDE5OTgvMDgvMTUgMjA6NDI6NTEgZGF2ZW0gRXhwICQKLSAqIGNvbnYuaDogVXRpbGl0eSBtYWNyb3MgZm9yIFNvbGFyaXMgZW11bGF0aW9uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKi8KLSAKLS8qICNkZWZpbmUgREVCVUdfU09MQVJJUyAqLwotI2RlZmluZSBERUJVR19TT0xBUklTX0tNQUxMT0MKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLQotLyogVXNlIHRoaXMgdG8gZ2V0IGF0IDMyLWJpdCB1c2VyIHBhc3NlZCBwb2ludGVycy4gKi8KLSNkZWZpbmUgQShfX3gpCQkJCVwKLSh7CXVuc2lnbmVkIGxvbmcgX19yZXQ7CQlcCi0JX19hc21fXyAoInNybAklMCwgMCwgJTAiCVwKLQkJIDogIj1yIiAoX19yZXQpCQlcCi0JCSA6ICIwIiAoX194KSk7CQlcCi0JKHZvaWQgX191c2VyICopX19yZXQ7CQlcCi19KQotCi1leHRlcm4gdW5zaWduZWQgc3lzX2NhbGxfdGFibGVbXTsKLWV4dGVybiB1bnNpZ25lZCBzeXNfY2FsbF90YWJsZTMyW107Ci1leHRlcm4gdW5zaWduZWQgc3Vub3Nfc3lzX3RhYmxlW107Ci0KLSNkZWZpbmUgU1lTKG5hbWUpICgobG9uZylzeXNfY2FsbF90YWJsZVtfX05SXyMjbmFtZV0pCi0jZGVmaW5lIFNVTk9TKHgpICgobG9uZylzdW5vc19zeXNfdGFibGVbeF0pCi0KLSNpZmRlZiBERUJVR19TT0xBUklTCi0jZGVmaW5lIFNPTEQocykgcHJpbnRrKCIlcywlZCwlcygpOiAlc1xuIixfX0ZJTEVfXyxfX0xJTkVfXyxfX0ZVTkNUSU9OX18sKHMpKQotI2RlZmluZSBTT0xERChzKSBwcmludGsoInNvbGFyaXM6ICIpOyBwcmludGsgcwotI2Vsc2UKLSNkZWZpbmUgU09MRChzKQotI2RlZmluZSBTT0xERChzKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2VudHJ5NjQuUyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2VudHJ5NjQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE3MDMyNC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9lbnRyeTY0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotLyogJElkOiBlbnRyeTY0LlMsdiAxLjcgMjAwMi8wMi8wOSAxOTo0OTozMSBkYXZlbSBFeHAgJAotICogZW50cnk2NC5TOiAgU29sYXJpcyBzeXNjYWxsIGVtdWxhdGlvbiBlbnRyeSBwb2ludC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NywxOTk4IEpha3ViIEplbGluZWsgICAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqIENvcHlyaWdodCAoQykgMTk5NSwxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEgICAgICAobWlndWVsQG51Y2xlY3UudW5hbS5teCkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotI2luY2x1ZGUgPGFzbS9oZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc2lnbmFsLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+Ci0KLSNpbmNsdWRlICJjb252LmgiCi0KLSNkZWZpbmUgTlJfU1lTQ0FMTFMJMjU2Ci0KLQkudGV4dAotc29sYXJpc19zeXNjYWxsX3RyYWNlOgotCWFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKLQljYWxsCQlzeXNjYWxsX3RyYWNlCi0JIG1vdgkJMCwgJW8xCi0Jc3JsCQklaTAsIDAsICVvMAotCW1vdgkJJWk0LCAlbzQKLQlzcmwJCSVpMSwgMCwgJW8xCi0JbW92CQklaTUsICVvNQotCWFuZGNjCQklbDMsIDEsICVnMAotCWJlLHB0CQklaWNjLCAyZgotCSBzcmwJCSVpMiwgMCwgJW8yCi0JYixwdAkJJXhjYywgMmYKLQkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMAotCi1zb2xhcmlzX3N1Y2tzOgotLyogU29sYXJpcyBpcyBhIGJpZyBzeXN0ZW0gd2hpY2ggbmVlZHMgdG8gYmUgYWJsZSB0byBkbyBhbGwgdGhlIHRoaW5ncwotICogaW4gSW5mKzEgZGlmZmVyZW50IHdheXMgKi8KLQlhZGQJCSVpNiwgMHg1YywgJW8wCi0JbW92CQklaTAsICVnMQotCW1vdgkJJWkxLCAlaTAKLQltb3YJCSVpMiwgJWkxCi0Jc3JsCQklbzAsIDAsICVvMAotCW1vdgkJJWkzLCAlaTIKLQltb3ZyegkJJWcxLCAyNTYsICVnMSAvKiBFbnN1cmUgd2UgZG9uJ3QgbG9vcCBmb3JldmVyICovCi0JbW92CQklaTQsICVpMwotCW1vdgkJJWk1LCAlaTQKLQliYSxwdAkJJXhjYywgc29sYXJpc19zcGFyY19zeXNjYWxsCi1leGVuOgkgbGR1d2EJCVslbzBdIEFTSV9TLCAlaTUKLQotZXhlbmY6CWJhLHB0CQkleGNjLCBzb2xhcmlzX3NwYXJjX3N5c2NhbGwKLQkgY2xyCQklaTUKLQotLyogRm9yIHNoYXJlZCBiaW5hcmllcywgYmluZm10X2VsZjMyIGFscmVhZHkgc2V0cyB1cCBwZXJzb25hbGl0eQotICAgYW5kIGV4ZWNfZG9tYWluLiBUaGlzIGlzIHRvIGhhbmRsZSBzdGF0aWMgYmluYXJpZXMgYXMgd2VsbCAqLwotc29sYXJpc19yZWc6Ci0JY2FsbAkJc29sYXJpc19yZWdpc3RlcgotCSBub3AKLQliYSxwdAkJJXhjYywgMWYKLQkgbW92CQklaTQsICVvNAotCi1saW51eF9zeXNjYWxsX2Zvcl9zb2xhcmlzOgotCXNldGhpCQklaGkoc3lzX2NhbGxfdGFibGUzMiksICVsNgotCW9yCQklbDYsICVsbyhzeXNfY2FsbF90YWJsZTMyKSwgJWw2Ci0Jc2xsCQklbDMsIDIsICVsNAotCWJhLHB0CQkleGNjLCAxMGYKLQkgbGR1dwkJWyVsNiArICVsNF0sICVsMwotCi0JLyogU29sYXJpcyBzeXN0ZW0gY2FsbHMgZW50ZXIgaGVyZS4uLiAqLwotCS5hbGlnbgkzMgotCS5nbG9ibAlzb2xhcmlzX3NwYXJjX3N5c2NhbGwsIGVudHJ5NjRfcGVyc29uYWxpdHlfcGF0Y2gKLXNvbGFyaXNfc3BhcmNfc3lzY2FsbDoKLWVudHJ5NjRfcGVyc29uYWxpdHlfcGF0Y2g6Ci0JbGR1YgkJWyVnNCArIDB4MF0sICVsMAotCWNtcAkJJWcxLCAyNTUKLQliZyxwbgkJJWljYywgc29sYXJpc191bmltcGxlbWVudGVkCi0JIHNybAkJJWcxLCAwLCAlZzEKLQlzZXRoaQkJJWhpKHNvbGFyaXNfc3lzX3RhYmxlKSwgJWw3Ci0Jb3IJCSVsNywgJWxvKHNvbGFyaXNfc3lzX3RhYmxlKSwgJWw3Ci0JYnJ6LHBuCQklZzEsIHNvbGFyaXNfc3Vja3MKLQkgbW92CQklaTQsICVvNAotCXNsbAkJJWcxLCAyLCAlbDQKLQljbXAJCSVsMCwgMQotCWJuZSxwbgkJJWljYywgc29sYXJpc19yZWcKLTE6CSBzcmwJCSVpMCwgMCwgJW8wCi0JbGR1dwkJWyVsNyArICVsNF0sICVsMwotCXNybAkJJWkxLCAwLCAlbzEKLQlsZHgJCVslZzYgKyBUSV9GTEFHU10sICVsNQotCWNtcAkJJWwzLCBOUl9TWVNDQUxMUwotCWJsZXUsYSxwbgkleGNjLCBsaW51eF9zeXNjYWxsX2Zvcl9zb2xhcmlzCi0JIG5vcAotCWFuZGNjCQklbDMsIDEsICVnMAotCWJuZSxhLHBuCSVpY2MsIDEwZgotCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCi0xMDoJc3JsCQklaTIsIDAsICVvMgotCW1vdgkJJWk1LCAlbzUKLQlhbmRuCQklbDMsIDMsICVsNwotCWFuZGNjCQklbDUsIF9USUZfU1lTQ0FMTF9UUkFDRSwgJWcwCQkJCQotCWJuZSxwbgkJJWljYywgc29sYXJpc19zeXNjYWxsX3RyYWNlCQkKLQkgbW92CQklaTAsICVsNQotMjoJY2FsbAkJJWw3Ci0JIHNybAkJJWkzLCAwLCAlbzMKLXJldF9mcm9tX3NvbGFyaXM6Ci0Jc3R4CQklbzAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTBdCi0JbGR4CQlbJWc2ICsgVElfRkxBR1NdLCAlbDYKLQlzcmEJCSVvMCwgMCwgJW8wCi0JbW92CQkldWxvKFRTVEFURV9YQ0FSUlkgfCBUU1RBVEVfSUNBUlJZKSwgJWcyCi0JbGR4CQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RTVEFURV0sICVnMwotCWNtcAkJJW8wLCAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLCi0Jc2xseAkJJWcyLCAzMiwgJWcyCi0JYmdldSxwbgkJJXhjYywgMWYKLQkgYW5kY2MJCSVsNiwgX1RJRl9TWVNDQUxMX1RSQUNFLCAlbDYJCi0KLQkvKiBTeXN0ZW0gY2FsbCBzdWNjZXNzLCBjbGVhciBDYXJyeSBjb25kaXRpb24gY29kZS4gKi8KLQlhbmRuCQklZzMsICVnMiwgJWczCi0Jc3R4CQklZzMsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVFNUQVRFXQkKLQlibmUscG4JCSVpY2MsIHNvbGFyaXNfc3lzY2FsbF90cmFjZTIKLQkgbGR4CQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1ROUENdLCAlbDEKLQlhbmRjYwkJJWwxLCAxLCAlZzAKLQlibmUscG4JCSVpY2MsIDJmCi0JIGNscgkJJWw2Ci0JYWRkCQklbDEsIDB4NCwgJWwyCQkJCSAgICAgICAgIAotCXN0eAkJJWwxLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RQQ10JICEgcGMgPSBucGMKLQljYWxsCQlydHJhcAotCSBzdHgJCSVsMiwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UTlBDXSAhbnBjID0gbnBjKzQKLQotCS8qIFdoZW4gdG5wYyAmIDEsIHRoaXMgY29tZXMgZnJvbSBzZXRjb250ZXh0IGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkdmFuY2UgcGMgKi8KLTI6CWFuZG4JCSVsMSwgMywgJWwxCi0JY2FsbAkJcnRyYXAKLQkgc3R4CQklbDEsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVE5QQ10gIW5wYyA9IG5wYyZ+MwotCi0xOgotCS8qIFN5c3RlbSBjYWxsIGZhaWx1cmUsIHNldCBDYXJyeSBjb25kaXRpb24gY29kZS4KLQkgKiBBbHNvLCBnZXQgYWJzKGVycm5vKSB0byByZXR1cm4gdG8gdGhlIHByb2Nlc3MuCi0JICovCi0Jc3ViCQklZzAsICVvMCwgJW8wCi0Jb3IJCSVnMywgJWcyLCAlZzMKLQljbXAJCSVvMCwgRVJBTkdFCS8qIDAtRVJBTkdFIGFyZSBpZGVudGl0eSBtYXBwZWQgKi8KLQlibGV1LHB0CQklaWNjLCAxZgotCSBjbXAJCSVvMCwgRU1FRElVTVRZUEUKLQliZ3UscG4JCSVpY2MsIDFmCi0JIHNldGhpCQklaGkoc29sYXJpc19lcnJfdGFibGUpLCAlbDYKLQlzbGwJCSVvMCwgMiwgJW8wCi0Jb3IJCSVsNiwgJWxvKHNvbGFyaXNfZXJyX3RhYmxlKSwgJWw2Ci0JbGRzdwkJWyVsNiArICVvMF0sICVvMAotMToJc3R4CQklbzAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTBdCi0JbW92CQkxLCAlbDYKLQlzdHgJCSVnMywgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UU1RBVEVdCi0JYm5lLHBuCQklaWNjLCBzb2xhcmlzX3N5c2NhbGxfdHJhY2UyCi0JIGxkeAkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UTlBDXSwgJWwxCi0JYW5kY2MJCSVsMSwgMSwgJWcwCi0JYm5lLHBuCQklaWNjLCAyYgotCSBhZGQJCSVsMSwgMHg0LCAlbDIKLQlzdHgJCSVsMSwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UUENdICAhIHBjID0gbnBjCi0JY2FsbAkJcnRyYXAKLQkgc3R4CQklbDIsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfVE5QQ10gIW5wYyA9IG5wYys0IAotCi1zb2xhcmlzX3N5c2NhbGxfdHJhY2UyOgotCWFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKLQljYWxsCQlzeXNjYWxsX3RyYWNlCi0JIG1vdgkJMSwgJW8xCi0JYWRkCQklbDEsIDB4NCwgJWwyCQkJLyogbnBjID0gbnBjKzQgKi8KLQlhbmRjYwkJJWwxLCAxLCAlZzAKLQlibmUscG4JCSVpY2MsIDJiCi0JIG5vcAotCXN0eAkJJWwxLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1RQQ10KLQljYWxsCQlydHJhcAotCSBzdHgJCSVsMiwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UTlBDXQotCi0JLyogVGhpcyBvbmUgaXMgdHJpY2t5LCBzbyB0aGF0J3Mgd2h5IHdlIGRvIGl0IGluIGFzc2VtYmx5ICovCi0JLmdsb2JsCQlzb2xhcmlzX3NpZ3N1c3BlbmQKLXNvbGFyaXNfc2lnc3VzcGVuZDoKLQljYWxsCQlkb19zb2xfc2lnc3VzcGVuZAotCSBub3AKLQlicmx6LHBuCQklbzAsIHJldF9mcm9tX3NvbGFyaXMKLQkgbm9wCi0JY2FsbAkJc3lzX3NpZ3N1c3BlbmQKLQkgc3R4CQklbzAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTBdCi0JYixwdAkJJXhjYywgcmV0X2Zyb21fc29sYXJpcwotCSBub3AKLQotCS5nbG9ibAkJc29sYXJpc19nZXRwaWQKLXNvbGFyaXNfZ2V0cGlkOgotCWNhbGwJCXN5c19nZXRwcGlkCi0JIG5vcAotCWNhbGwJCXN5c19nZXRwaWQKLQkgc3R4CQklbzAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTFdCi0JYixwdAkJJXhjYywgcmV0X2Zyb21fc29sYXJpcwotCSBub3AKLQotCS5nbG9ibAlzb2xhcmlzX2dldHVpZAotc29sYXJpc19nZXR1aWQ6Ci0JY2FsbAkJc3lzX2dldGV1aWQKLQkgbm9wCi0JY2FsbAkJc3lzX2dldHVpZAotCSBzdHgJCSVvMSwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JMV0KLQliLHB0CQkleGNjLCByZXRfZnJvbV9zb2xhcmlzCi0JIG5vcAotCi0JLmdsb2JsCXNvbGFyaXNfZ2V0Z2lkCi1zb2xhcmlzX2dldGdpZDoKLQljYWxsCQlzeXNfZ2V0ZWdpZAotCSBub3AKLQljYWxsCQlzeXNfZ2V0Z2lkCi0JIHN0eAkJJW8xLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kxXQotCWIscHQJCSV4Y2MsIHJldF9mcm9tX3NvbGFyaXMKLQkgbm9wCi0KLQkuZ2xvYmwJCXNvbGFyaXNfdW5pbXBsZW1lbnRlZAotc29sYXJpc191bmltcGxlbWVudGVkOgotCWNhbGwJCWRvX3NvbF91bmltcGxlbWVudGVkCi0JIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKLQliYSxwdAkJJXhjYywgcmV0X2Zyb21fc29sYXJpcwotCSBub3AKLQotCS5zZWN0aW9uCV9fZXhfdGFibGUsImEiCi0JLmFsaWduCQk0Ci0JLndvcmQJCWV4ZW4sIGV4ZW5mCi0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2ZzLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9mcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDAzNWYwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2ZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NDUgKzAsMCBAQAotLyogJElkOiBmcy5jLHYgMS4yNyAyMDAyLzAyLzA4IDAzOjU3OjE0IGRhdmVtIEV4cCAkCi0gKiBmcy5jOiBmcyByZWxhdGVkIHN5c2NhbGwgZW11bGF0aW9uIGZvciBTb2xhcmlzCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqCi0gKiAxOTk5LTA4LTE5IEltcGxlbWVudGVkIHNvbGFyaXMgRl9GUkVFU1AgKHRydW5jYXRlKQotICogICAgICAgICAgICBmY250bCwgYnkgSmFzb24gUmFwcGxleWUgKHJhcHBsZXllQGNjci5idWZmYWxvLmVkdSkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgotI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotCi0jaW5jbHVkZSAiY29udi5oIgotCi0jZGVmaW5lIFIzX1ZFUlNJT04JMQotI2RlZmluZSBSNF9WRVJTSU9OCTIKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXMzMgl0dl9zZWM7Ci0JczMyCXR2X25zZWM7Ci19IHRpbWVzdHJ1Y3RfdDsKLQotc3RydWN0IHNvbF9zdGF0IHsKLQl1MzIJCXN0X2RldjsKLQlzMzIJCXN0X3BhZDFbM107ICAgICAvKiBuZXR3b3JrIGlkICovCi0JdTMyCQlzdF9pbm87Ci0JdTMyCQlzdF9tb2RlOwotCXUzMgkJc3Rfbmxpbms7Ci0JdTMyCQlzdF91aWQ7Ci0JdTMyCQlzdF9naWQ7Ci0JdTMyCQlzdF9yZGV2OwotCXMzMgkJc3RfcGFkMlsyXTsKLQlzMzIJCXN0X3NpemU7Ci0JczMyCQlzdF9wYWQzOwkvKiBzdF9zaXplLCBvZmZfdCBleHBhbnNpb24gKi8KLQl0aW1lc3RydWN0X3QJc3RfYXRpbWU7Ci0JdGltZXN0cnVjdF90CXN0X210aW1lOwotCXRpbWVzdHJ1Y3RfdAlzdF9jdGltZTsKLQlzMzIJCXN0X2Jsa3NpemU7Ci0JczMyCQlzdF9ibG9ja3M7Ci0JY2hhcgkJc3RfZnN0eXBlWzE2XTsKLQlzMzIJCXN0X3BhZDRbOF07ICAgICAvKiBleHBhbnNpb24gYXJlYSAqLwotfTsKLQotc3RydWN0IHNvbF9zdGF0NjQgewotCXUzMgkJc3RfZGV2OwotCXMzMgkJc3RfcGFkMVszXTsgICAgIC8qIG5ldHdvcmsgaWQgKi8KLQl1NjQJCXN0X2lubzsKLQl1MzIJCXN0X21vZGU7Ci0JdTMyCQlzdF9ubGluazsKLQl1MzIJCXN0X3VpZDsKLQl1MzIJCXN0X2dpZDsKLQl1MzIJCXN0X3JkZXY7Ci0JczMyCQlzdF9wYWQyWzJdOwotCXM2NAkJc3Rfc2l6ZTsKLQl0aW1lc3RydWN0X3QJc3RfYXRpbWU7Ci0JdGltZXN0cnVjdF90CXN0X210aW1lOwotCXRpbWVzdHJ1Y3RfdAlzdF9jdGltZTsKLQlzNjQJCXN0X2Jsa3NpemU7Ci0JczMyCQlzdF9ibG9ja3M7Ci0JY2hhcgkJc3RfZnN0eXBlWzE2XTsKLQlzMzIJCXN0X3BhZDRbNF07ICAgICAvKiBleHBhbnNpb24gYXJlYSAqLwotfTsKLQotI2RlZmluZSBVRlNNQUdJQyAoKCh1bnNpZ25lZCkndSc8PDI0KXx8KCh1bnNpZ25lZCknZic8PDE2KXx8KCh1bnNpZ25lZCkncyc8PDgpKQotCi1zdGF0aWMgaW5saW5lIGludCBwdXRzdGF0KHN0cnVjdCBzb2xfc3RhdCBfX3VzZXIgKnVidWYsIHN0cnVjdCBrc3RhdCAqa2J1ZikKLXsKLQl1MzIgaW5vOwotCi0JaWYgKGtidWYtPnNpemUgPiBNQVhfTk9OX0xGUyB8fAotCSAgICAhc3lzdl92YWxpZF9kZXYoa2J1Zi0+ZGV2KSB8fAotCSAgICAhc3lzdl92YWxpZF9kZXYoa2J1Zi0+cmRldikpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCWlubyA9IGtidWYtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoa2J1Zi0+aW5vKSAmJiBpbm8gIT0ga2J1Zi0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQlpZiAocHV0X3VzZXIgKHN5c3ZfZW5jb2RlX2RldihrYnVmLT5kZXYpLCAmdWJ1Zi0+c3RfZGV2KQl8fAotCSAgICBfX3B1dF91c2VyIChpbm8sICZ1YnVmLT5zdF9pbm8pCQkJCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPm1vZGUsICZ1YnVmLT5zdF9tb2RlKQkJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+bmxpbmssICZ1YnVmLT5zdF9ubGluaykJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+dWlkLCAmdWJ1Zi0+c3RfdWlkKQkJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+Z2lkLCAmdWJ1Zi0+c3RfZ2lkKQkJfHwKLQkgICAgX19wdXRfdXNlciAoc3lzdl9lbmNvZGVfZGV2KGtidWYtPnJkZXYpLCAmdWJ1Zi0+c3RfcmRldikJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+c2l6ZSwgJnVidWYtPnN0X3NpemUpCQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5hdGltZS50dl9zZWMsICZ1YnVmLT5zdF9hdGltZS50dl9zZWMpCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPmF0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9hdGltZS50dl9uc2VjKQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5tdGltZS50dl9zZWMsICZ1YnVmLT5zdF9tdGltZS50dl9zZWMpCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPm10aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9tdGltZS50dl9uc2VjKQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5jdGltZS50dl9zZWMsICZ1YnVmLT5zdF9jdGltZS50dl9zZWMpCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPmN0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9jdGltZS50dl9uc2VjKQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5ibGtzaXplLCAmdWJ1Zi0+c3RfYmxrc2l6ZSkJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+YmxvY2tzLCAmdWJ1Zi0+c3RfYmxvY2tzKQl8fAotCSAgICBfX3B1dF91c2VyIChVRlNNQUdJQywgKHVuc2lnbmVkIF9fdXNlciAqKXVidWYtPnN0X2ZzdHlwZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdXRzdGF0NjQoc3RydWN0IHNvbF9zdGF0NjQgX191c2VyICp1YnVmLCBzdHJ1Y3Qga3N0YXQgKmtidWYpCi17Ci0JaWYgKCFzeXN2X3ZhbGlkX2RldihrYnVmLT5kZXYpIHx8ICFzeXN2X3ZhbGlkX2RldihrYnVmLT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JaWYgKHB1dF91c2VyIChzeXN2X2VuY29kZV9kZXYoa2J1Zi0+ZGV2KSwgJnVidWYtPnN0X2RldikJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+aW5vLCAmdWJ1Zi0+c3RfaW5vKQkJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+bW9kZSwgJnVidWYtPnN0X21vZGUpCQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5ubGluaywgJnVidWYtPnN0X25saW5rKQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT51aWQsICZ1YnVmLT5zdF91aWQpCQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5naWQsICZ1YnVmLT5zdF9naWQpCQl8fAotCSAgICBfX3B1dF91c2VyIChzeXN2X2VuY29kZV9kZXYoa2J1Zi0+cmRldiksICZ1YnVmLT5zdF9yZGV2KQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5zaXplLCAmdWJ1Zi0+c3Rfc2l6ZSkJCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPmF0aW1lLnR2X3NlYywgJnVidWYtPnN0X2F0aW1lLnR2X3NlYykJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+YXRpbWUudHZfbnNlYywgJnVidWYtPnN0X2F0aW1lLnR2X25zZWMpCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPm10aW1lLnR2X3NlYywgJnVidWYtPnN0X210aW1lLnR2X3NlYykJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+bXRpbWUudHZfbnNlYywgJnVidWYtPnN0X210aW1lLnR2X25zZWMpCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPmN0aW1lLnR2X3NlYywgJnVidWYtPnN0X2N0aW1lLnR2X3NlYykJfHwKLQkgICAgX19wdXRfdXNlciAoa2J1Zi0+Y3RpbWUudHZfbnNlYywgJnVidWYtPnN0X2N0aW1lLnR2X25zZWMpCXx8Ci0JICAgIF9fcHV0X3VzZXIgKGtidWYtPmJsa3NpemUsICZ1YnVmLT5zdF9ibGtzaXplKQl8fAotCSAgICBfX3B1dF91c2VyIChrYnVmLT5ibG9ja3MsICZ1YnVmLT5zdF9ibG9ja3MpCXx8Ci0JICAgIF9fcHV0X3VzZXIgKFVGU01BR0lDLCAodW5zaWduZWQgX191c2VyICopdWJ1Zi0+c3RfZnN0eXBlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc3RhdCh1MzIgZmlsZW5hbWUsIHUzMiBzdGF0YnVmKQotewotCXN0cnVjdCBrc3RhdCBzOwotCWludCByZXQgPSB2ZnNfc3RhdChBKGZpbGVuYW1lKSwgJnMpOwotCWlmICghcmV0KQotCQlyZXR1cm4gcHV0c3RhdChBKHN0YXRidWYpLCAmcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc194c3RhdChpbnQgdmVycywgdTMyIGZpbGVuYW1lLCB1MzIgc3RhdGJ1ZikKLXsKLQkvKiBTb2xhcmlzIGRvZXNuJ3QgYm90aGVyIHdpdGggbG9va2luZyBhdCB2ZXJzLCBzbyB3ZSBkbyBuZWl0aGVyICovCi0JcmV0dXJuIHNvbGFyaXNfc3RhdChmaWxlbmFtZSwgc3RhdGJ1Zik7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc3RhdDY0KHUzMiBmaWxlbmFtZSwgdTMyIHN0YXRidWYpCi17Ci0Jc3RydWN0IGtzdGF0IHM7Ci0JaW50IHJldCA9IHZmc19zdGF0KEEoZmlsZW5hbWUpLCAmcyk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBwdXRzdGF0NjQoQShzdGF0YnVmKSwgJnMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfbHN0YXQodTMyIGZpbGVuYW1lLCB1MzIgc3RhdGJ1ZikKLXsKLQlzdHJ1Y3Qga3N0YXQgczsKLQlpbnQgcmV0ID0gdmZzX2xzdGF0KEEoZmlsZW5hbWUpLCAmcyk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBwdXRzdGF0KEEoc3RhdGJ1ZiksICZzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX2x4c3RhdChpbnQgdmVycywgdTMyIGZpbGVuYW1lLCB1MzIgc3RhdGJ1ZikKLXsKLQlyZXR1cm4gc29sYXJpc19sc3RhdChmaWxlbmFtZSwgc3RhdGJ1Zik7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfbHN0YXQ2NCh1MzIgZmlsZW5hbWUsIHUzMiBzdGF0YnVmKQotewotCXN0cnVjdCBrc3RhdCBzOwotCWludCByZXQgPSB2ZnNfbHN0YXQoQShmaWxlbmFtZSksICZzKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHB1dHN0YXQ2NChBKHN0YXRidWYpLCAmcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19mc3RhdCh1bnNpZ25lZCBpbnQgZmQsIHUzMiBzdGF0YnVmKQotewotCXN0cnVjdCBrc3RhdCBzOwotCWludCByZXQgPSB2ZnNfZnN0YXQoZmQsICZzKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHB1dHN0YXQoQShzdGF0YnVmKSwgJnMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfZnhzdGF0KGludCB2ZXJzLCB1MzIgZmQsIHUzMiBzdGF0YnVmKQotewotCXJldHVybiBzb2xhcmlzX2ZzdGF0KGZkLCBzdGF0YnVmKTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19mc3RhdDY0KHVuc2lnbmVkIGludCBmZCwgdTMyIHN0YXRidWYpCi17Ci0Jc3RydWN0IGtzdGF0IHM7Ci0JaW50IHJldCA9IHZmc19mc3RhdChmZCwgJnMpOwotCWlmICghcmV0KQotCQlyZXR1cm4gcHV0c3RhdDY0KEEoc3RhdGJ1ZiksICZzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX21rbm9kKHUzMiBwYXRoLCB1MzIgbW9kZSwgczMyIGRldikKLXsKLQlpbnQgKCpzeXNfbWtub2QpKGNvbnN0IGNoYXIgX191c2VyICosaW50LHVuc2lnbmVkKSA9IAotCQkoaW50ICgqKShjb25zdCBjaGFyIF9fdXNlciAqLGludCx1bnNpZ25lZCkpU1lTKG1rbm9kKTsKLQlpbnQgbWFqb3IgPSBzeXN2X21ham9yKGRldik7Ci0JaW50IG1pbm9yID0gc3lzdl9taW5vcihkZXYpOwotCi0JLyogbWlub3IgaXMgZ3VhcmFudGVlZCB0byBiZSBPSyBmb3IgTUtERVYsIG1ham9yIG1pZ2h0IGJlIG5vdCAqLwotCWlmIChtYWpvciA+IDB4ZmZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc3lzX21rbm9kKEEocGF0aCksIG1vZGUsIG5ld19lbmNvZGVfZGV2KE1LREVWKG1ham9yLG1pbm9yKSkpOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX3hta25vZChpbnQgdmVycywgdTMyIHBhdGgsIHUzMiBtb2RlLCBzMzIgZGV2KQotewotCXJldHVybiBzb2xhcmlzX21rbm9kKHBhdGgsIG1vZGUsIGRldik7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfZ2V0ZGVudHM2NCh1bnNpZ25lZCBpbnQgZmQsIHZvaWQgX191c2VyICpkaXJlbnQsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQlpbnQgKCpzeXNfZ2V0ZGVudHMpKHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgaW50KSA9Ci0JCShpbnQgKCopKHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgaW50KSlTWVMoZ2V0ZGVudHMpOwotCQkKLQlyZXR1cm4gc3lzX2dldGRlbnRzKGZkLCBkaXJlbnQsIGNvdW50KTsKLX0KLQotLyogVGhpcyBzdGF0ZnMgdGhpbmdpZSBwcm9iYWJseSB3aWxsIGdvIGluIHRoZSBuZWFyIGZ1dHVyZSwgYnV0Li4uICovCi0KLXN0cnVjdCBzb2xfc3RhdGZzIHsKLQlzaG9ydAlmX3R5cGU7Ci0JczMyCWZfYnNpemU7Ci0JczMyCWZfZnJzaXplOwotCXMzMglmX2Jsb2NrczsKLQlzMzIJZl9iZnJlZTsKLQl1MzIJZl9maWxlczsKLQl1MzIJZl9mZnJlZTsKLQljaGFyCWZfZm5hbWVbNl07Ci0JY2hhcglmX2ZwYWNrWzZdOwotfTsKLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19zdGF0ZnModTMyIHBhdGgsIHUzMiBidWYsIGludCBsZW4sIGludCBmc3R5cGUpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3RhdGZzIHM7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCWludCAoKnN5c19zdGF0ZnMpKGNvbnN0IGNoYXIgX191c2VyICosc3RydWN0IHN0YXRmcyBfX3VzZXIgKikgPSAKLQkJKGludCAoKikoY29uc3QgY2hhciBfX3VzZXIgKixzdHJ1Y3Qgc3RhdGZzIF9fdXNlciAqKSlTWVMoc3RhdGZzKTsKLQlzdHJ1Y3Qgc29sX3N0YXRmcyBfX3VzZXIgKnNzID0gQShidWYpOwotCQotCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2xfc3RhdGZzKSkgcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFmc3R5cGUpIHsKLQkJLyogRklYTUU6IG1peGluZyB1c2VybGFuZCBhbmQga2VybmVsIHBvaW50ZXJzICovCi0JCXNldF9mcyAoS0VSTkVMX0RTKTsKLQkJcmV0ID0gc3lzX3N0YXRmcyhBKHBhdGgpLCAmcyk7Ci0JCXNldF9mcyAob2xkX2ZzKTsKLQkJaWYgKCFyZXQpIHsKLQkJCWlmIChwdXRfdXNlciAocy5mX3R5cGUsICZzcy0+Zl90eXBlKQkJfHwKLQkJCSAgICBfX3B1dF91c2VyIChzLmZfYnNpemUsICZzcy0+Zl9ic2l6ZSkJfHwKLQkJCSAgICBfX3B1dF91c2VyICgwLCAmc3MtPmZfZnJzaXplKQkJfHwKLQkJCSAgICBfX3B1dF91c2VyIChzLmZfYmxvY2tzLCAmc3MtPmZfYmxvY2tzKQl8fAotCQkJICAgIF9fcHV0X3VzZXIgKHMuZl9iZnJlZSwgJnNzLT5mX2JmcmVlKQl8fAotCQkJICAgIF9fcHV0X3VzZXIgKHMuZl9maWxlcywgJnNzLT5mX2ZpbGVzKQl8fAotCQkJICAgIF9fcHV0X3VzZXIgKHMuZl9mZnJlZSwgJnNzLT5mX2ZmcmVlKQl8fAotCQkJICAgIF9fY2xlYXJfdXNlciAoJnNzLT5mX2ZuYW1lLCAxMikpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJcmV0dXJuIHJldDsKLQl9Ci0vKiBMaW51eCBjYW4ndCBzdGF0IHVubW91bnRlZCBmaWxlc3lzdGVtcyBzbyB3ZQotICogc2ltcGx5IGxpZSBhbmQgY2xhaW0gMTAwTUIgb2YgMUdCIGlzIGZyZWUuIFNvcnJ5LgotICovCi0JaWYgKHB1dF91c2VyIChmc3R5cGUsICZzcy0+Zl90eXBlKQkJfHwKLQkgICAgX19wdXRfdXNlciAoMTAyNCwgJnNzLT5mX2JzaXplKQkJfHwKLQkgICAgX19wdXRfdXNlciAoMCwgJnNzLT5mX2Zyc2l6ZSkJCXx8Ci0JICAgIF9fcHV0X3VzZXIgKDEwMjQqMTAyNCwgJnNzLT5mX2Jsb2NrcykJfHwKLQkgICAgX19wdXRfdXNlciAoMTAwKjEwMjQsICZzcy0+Zl9iZnJlZSkJCXx8Ci0JICAgIF9fcHV0X3VzZXIgKDYwMDAwLCAmc3MtPmZfZmlsZXMpCQl8fAotCSAgICBfX3B1dF91c2VyICg1MDAwMCwgJnNzLT5mX2ZmcmVlKQkJfHwKLQkgICAgX19jbGVhcl91c2VyICgmc3MtPmZfZm5hbWUsIDEyKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfZnN0YXRmcyh1MzIgZmQsIHUzMiBidWYsIGludCBsZW4sIGludCBmc3R5cGUpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3RhdGZzIHM7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCWludCAoKnN5c19mc3RhdGZzKSh1bnNpZ25lZCxzdHJ1Y3Qgc3RhdGZzIF9fdXNlciAqKSA9IAotCQkoaW50ICgqKSh1bnNpZ25lZCxzdHJ1Y3Qgc3RhdGZzIF9fdXNlciAqKSlTWVMoZnN0YXRmcyk7Ci0Jc3RydWN0IHNvbF9zdGF0ZnMgX191c2VyICpzcyA9IEEoYnVmKTsKLQkKLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qgc29sX3N0YXRmcykpIHJldHVybiAtRUlOVkFMOwotCWlmICghZnN0eXBlKSB7Ci0JCXNldF9mcyAoS0VSTkVMX0RTKTsKLQkJcmV0ID0gc3lzX2ZzdGF0ZnMoZmQsICZzKTsKLQkJc2V0X2ZzIChvbGRfZnMpOwotCQlpZiAoIXJldCkgewotCQkJaWYgKHB1dF91c2VyIChzLmZfdHlwZSwgJnNzLT5mX3R5cGUpCQl8fAotCQkJICAgIF9fcHV0X3VzZXIgKHMuZl9ic2l6ZSwgJnNzLT5mX2JzaXplKQl8fAotCQkJICAgIF9fcHV0X3VzZXIgKDAsICZzcy0+Zl9mcnNpemUpCQl8fAotCQkJICAgIF9fcHV0X3VzZXIgKHMuZl9ibG9ja3MsICZzcy0+Zl9ibG9ja3MpCXx8Ci0JCQkgICAgX19wdXRfdXNlciAocy5mX2JmcmVlLCAmc3MtPmZfYmZyZWUpCXx8Ci0JCQkgICAgX19wdXRfdXNlciAocy5mX2ZpbGVzLCAmc3MtPmZfZmlsZXMpCXx8Ci0JCQkgICAgX19wdXRfdXNlciAocy5mX2ZmcmVlLCAmc3MtPmZfZmZyZWUpCXx8Ci0JCQkgICAgX19jbGVhcl91c2VyICgmc3MtPmZfZm5hbWUsIDEyKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlyZXR1cm4gcmV0OwotCX0KLQkvKiBPdGhlcndpc2UgZnN0YXRmcyBpcyB0aGUgc2FtZSBhcyBzdGF0ZnMgKi8KLQlyZXR1cm4gc29sYXJpc19zdGF0ZnMoMCwgYnVmLCBsZW4sIGZzdHlwZSk7Ci19Ci0KLXN0cnVjdCBzb2xfc3RhdHZmcyB7Ci0JdTMyCWZfYnNpemU7Ci0JdTMyCWZfZnJzaXplOwotCXUzMglmX2Jsb2NrczsKLQl1MzIJZl9iZnJlZTsKLQl1MzIJZl9iYXZhaWw7Ci0JdTMyCWZfZmlsZXM7Ci0JdTMyCWZfZmZyZWU7Ci0JdTMyCWZfZmF2YWlsOwotCXUzMglmX2ZzaWQ7Ci0JY2hhcglmX2Jhc2V0eXBlWzE2XTsKLQl1MzIJZl9mbGFnOwotCXUzMglmX25hbWVtYXg7Ci0JY2hhcglmX2ZzdHJbMzJdOwotCXUzMglmX2ZpbGxlclsxNl07Ci19OwotCi1zdHJ1Y3Qgc29sX3N0YXR2ZnM2NCB7Ci0JdTMyCWZfYnNpemU7Ci0JdTMyCWZfZnJzaXplOwotCXU2NAlmX2Jsb2NrczsKLQl1NjQJZl9iZnJlZTsKLQl1NjQJZl9iYXZhaWw7Ci0JdTY0CWZfZmlsZXM7Ci0JdTY0CWZfZmZyZWU7Ci0JdTY0CWZfZmF2YWlsOwotCXUzMglmX2ZzaWQ7Ci0JY2hhcglmX2Jhc2V0eXBlWzE2XTsKLQl1MzIJZl9mbGFnOwotCXUzMglmX25hbWVtYXg7Ci0JY2hhcglmX2ZzdHJbMzJdOwotCXUzMglmX2ZpbGxlclsxNl07Ci19OwotCi1zdGF0aWMgaW50IHJlcG9ydF9zdGF0dmZzKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYnVmKQotewotCXN0cnVjdCBrc3RhdGZzIHM7Ci0JaW50IGVycm9yOwotCXN0cnVjdCBzb2xfc3RhdHZmcyBfX3VzZXIgKnNzID0gQShidWYpOwotCi0JZXJyb3IgPSB2ZnNfc3RhdGZzKG1udC0+bW50X3Jvb3QsICZzKTsKLQlpZiAoIWVycm9yKSB7Ci0JCWNvbnN0IGNoYXIgKnAgPSBtbnQtPm1udF9zYi0+c190eXBlLT5uYW1lOwotCQlpbnQgaSA9IDA7Ci0JCWludCBqID0gc3RybGVuIChwKTsKLQkJCi0JCWlmIChqID4gMTUpIGogPSAxNTsKLQkJaWYgKElTX1JET05MWShpbm9kZSkpIGkgPSAxOwotCQlpZiAobW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9TVUlEKSBpIHw9IDI7Ci0JCWlmICghc3lzdl92YWxpZF9kZXYoaW5vZGUtPmlfc2ItPnNfZGV2KSkKLQkJCXJldHVybiAtRU9WRVJGTE9XOwotCQlpZiAocHV0X3VzZXIgKHMuZl9ic2l6ZSwgJnNzLT5mX2JzaXplKQkJfHwKLQkJICAgIF9fcHV0X3VzZXIgKDAsICZzcy0+Zl9mcnNpemUpCQl8fAotCQkgICAgX19wdXRfdXNlciAocy5mX2Jsb2NrcywgJnNzLT5mX2Jsb2NrcykJfHwKLQkJICAgIF9fcHV0X3VzZXIgKHMuZl9iZnJlZSwgJnNzLT5mX2JmcmVlKQl8fAotCQkgICAgX19wdXRfdXNlciAocy5mX2JhdmFpbCwgJnNzLT5mX2JhdmFpbCkJfHwKLQkJICAgIF9fcHV0X3VzZXIgKHMuZl9maWxlcywgJnNzLT5mX2ZpbGVzKQl8fAotCQkgICAgX19wdXRfdXNlciAocy5mX2ZmcmVlLCAmc3MtPmZfZmZyZWUpCXx8Ci0JCSAgICBfX3B1dF91c2VyIChzLmZfZmZyZWUsICZzcy0+Zl9mYXZhaWwpCXx8Ci0JCSAgICBfX3B1dF91c2VyIChzeXN2X2VuY29kZV9kZXYoaW5vZGUtPmlfc2ItPnNfZGV2KSwgJnNzLT5mX2ZzaWQpIHx8Ci0JCSAgICBfX2NvcHlfdG9fdXNlciAoc3MtPmZfYmFzZXR5cGUscCxqKQkJfHwKLQkJICAgIF9fcHV0X3VzZXIgKDAsIChjaGFyIF9fdXNlciAqKSZzcy0+Zl9iYXNldHlwZVtqXSkJfHwKLQkJICAgIF9fcHV0X3VzZXIgKHMuZl9uYW1lbGVuLCAmc3MtPmZfbmFtZW1heCkJfHwKLQkJICAgIF9fcHV0X3VzZXIgKGksICZzcy0+Zl9mbGFnKQkJCXx8CQkgICAgCi0JCSAgICBfX2NsZWFyX3VzZXIgKCZzcy0+Zl9mc3RyLCAzMikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IHJlcG9ydF9zdGF0dmZzNjQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBidWYpCi17Ci0Jc3RydWN0IGtzdGF0ZnMgczsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHNvbF9zdGF0dmZzNjQgX191c2VyICpzcyA9IEEoYnVmKTsKLQkJCQotCWVycm9yID0gdmZzX3N0YXRmcyhtbnQtPm1udF9yb290LCAmcyk7Ci0JaWYgKCFlcnJvcikgewotCQljb25zdCBjaGFyICpwID0gbW50LT5tbnRfc2ItPnNfdHlwZS0+bmFtZTsKLQkJaW50IGkgPSAwOwotCQlpbnQgaiA9IHN0cmxlbiAocCk7Ci0JCQotCQlpZiAoaiA+IDE1KSBqID0gMTU7Ci0JCWlmIChJU19SRE9OTFkoaW5vZGUpKSBpID0gMTsKLQkJaWYgKG1udC0+bW50X2ZsYWdzICYgTU5UX05PU1VJRCkgaSB8PSAyOwotCQlpZiAoIXN5c3ZfdmFsaWRfZGV2KGlub2RlLT5pX3NiLT5zX2RldikpCi0JCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQkJaWYgKHB1dF91c2VyIChzLmZfYnNpemUsICZzcy0+Zl9ic2l6ZSkJCXx8Ci0JCSAgICBfX3B1dF91c2VyICgwLCAmc3MtPmZfZnJzaXplKQkJfHwKLQkJICAgIF9fcHV0X3VzZXIgKHMuZl9ibG9ja3MsICZzcy0+Zl9ibG9ja3MpCXx8Ci0JCSAgICBfX3B1dF91c2VyIChzLmZfYmZyZWUsICZzcy0+Zl9iZnJlZSkJfHwKLQkJICAgIF9fcHV0X3VzZXIgKHMuZl9iYXZhaWwsICZzcy0+Zl9iYXZhaWwpCXx8Ci0JCSAgICBfX3B1dF91c2VyIChzLmZfZmlsZXMsICZzcy0+Zl9maWxlcykJfHwKLQkJICAgIF9fcHV0X3VzZXIgKHMuZl9mZnJlZSwgJnNzLT5mX2ZmcmVlKQl8fAotCQkgICAgX19wdXRfdXNlciAocy5mX2ZmcmVlLCAmc3MtPmZfZmF2YWlsKQl8fAotCQkgICAgX19wdXRfdXNlciAoc3lzdl9lbmNvZGVfZGV2KGlub2RlLT5pX3NiLT5zX2RldiksICZzcy0+Zl9mc2lkKSB8fAotCQkgICAgX19jb3B5X3RvX3VzZXIgKHNzLT5mX2Jhc2V0eXBlLHAsaikJCXx8Ci0JCSAgICBfX3B1dF91c2VyICgwLCAoY2hhciBfX3VzZXIgKikmc3MtPmZfYmFzZXR5cGVbal0pCXx8Ci0JCSAgICBfX3B1dF91c2VyIChzLmZfbmFtZWxlbiwgJnNzLT5mX25hbWVtYXgpCXx8Ci0JCSAgICBfX3B1dF91c2VyIChpLCAmc3MtPmZfZmxhZykJCQl8fAkJICAgIAotCQkgICAgX19jbGVhcl91c2VyICgmc3MtPmZfZnN0ciwgMzIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19zdGF0dmZzKHUzMiBwYXRoLCB1MzIgYnVmKQotewotCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSB1c2VyX3BhdGhfd2FsayhBKHBhdGgpLCZuZCk7Ci0JaWYgKCFlcnJvcikgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JCWVycm9yID0gcmVwb3J0X3N0YXR2ZnMobmQucGF0aC5tbnQsIGlub2RlLCBidWYpOwotCQlwYXRoX3B1dCgmbmQucGF0aCk7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19mc3RhdHZmcyh1bnNpZ25lZCBpbnQgZmQsIHUzMiBidWYpCi17Ci0Jc3RydWN0IGZpbGUgKiBmaWxlOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gLUVCQURGOwotCWZpbGUgPSBmZ2V0KGZkKTsKLQlpZiAoZmlsZSkgewotCQllcnJvciA9IHJlcG9ydF9zdGF0dmZzKGZpbGUtPmZfcGF0aC5tbnQsIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGJ1Zik7Ci0JCWZwdXQoZmlsZSk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX3N0YXR2ZnM2NCh1MzIgcGF0aCwgdTMyIGJ1ZikKLXsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCWludCBlcnJvcjsKLQotCWxvY2tfa2VybmVsKCk7Ci0JZXJyb3IgPSB1c2VyX3BhdGhfd2FsayhBKHBhdGgpLCAmbmQpOwotCWlmICghZXJyb3IpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IG5kLnBhdGguZGVudHJ5LT5kX2lub2RlOwotCQllcnJvciA9IHJlcG9ydF9zdGF0dmZzNjQobmQucGF0aC5tbnQsIGlub2RlLCBidWYpOwotCQlwYXRoX3B1dCgmbmQucGF0aCk7Ci0JfQotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfZnN0YXR2ZnM2NCh1bnNpZ25lZCBpbnQgZmQsIHUzMiBidWYpCi17Ci0Jc3RydWN0IGZpbGUgKiBmaWxlOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gLUVCQURGOwotCWZpbGUgPSBmZ2V0KGZkKTsKLQlpZiAoZmlsZSkgewotCQlsb2NrX2tlcm5lbCgpOwotCQllcnJvciA9IHJlcG9ydF9zdGF0dmZzNjQoZmlsZS0+Zl9wYXRoLm1udCwgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgYnVmKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlmcHV0KGZpbGUpOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3BhcmMzMl9vcGVuKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgaW50IGZsYWdzLCBpbnQgbW9kZSk7Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfb3Blbih1MzIgZm5hbWUsIGludCBmbGFncywgdTMyIG1vZGUpCi17Ci0JY29uc3QgY2hhciAqZmlsZW5hbWUgPSAoY29uc3QgY2hhciAqKShsb25nKWZuYW1lOwotCWludCBmbCA9IGZsYWdzICYgMHhmOwotCi0JLyogVHJhbnNsYXRlIGZsYWdzIGZpcnN0LiAqLwotCWlmIChmbGFncyAmIDB4MjAwMCkgZmwgfD0gT19MQVJHRUZJTEU7Ci0JaWYgKGZsYWdzICYgMHg4MDUwKSBmbCB8PSBPX1NZTkM7Ci0JaWYgKGZsYWdzICYgMHg4MCkgZmwgfD0gT19OT05CTE9DSzsKLQlpZiAoZmxhZ3MgJiAweDEwMCkgZmwgfD0gT19DUkVBVDsKLQlpZiAoZmxhZ3MgJiAweDIwMCkgZmwgfD0gT19UUlVOQzsKLQlpZiAoZmxhZ3MgJiAweDQwMCkgZmwgfD0gT19FWENMOwotCWlmIChmbGFncyAmIDB4ODAwKSBmbCB8PSBPX05PQ1RUWTsKLQlmbGFncyA9IGZsOwotCi0JcmV0dXJuIHNwYXJjMzJfb3BlbihmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOwotfQotCi0jZGVmaW5lIFNPTF9GX1NFVExLCTYKLSNkZWZpbmUgU09MX0ZfU0VUTEtXCTcKLSNkZWZpbmUgU09MX0ZfRlJFRVNQICAgIDExCi0jZGVmaW5lIFNPTF9GX0lTU1RSRUFNICAxMwotI2RlZmluZSBTT0xfRl9HRVRMSyAgICAgMTQKLSNkZWZpbmUgU09MX0ZfUFJJViAgICAgIDE1Ci0jZGVmaW5lIFNPTF9GX05QUklWICAgICAxNgotI2RlZmluZSBTT0xfRl9RVU9UQUNUTCAgMTcKLSNkZWZpbmUgU09MX0ZfQkxPQ0tTICAgIDE4Ci0jZGVmaW5lIFNPTF9GX0JMS1NJWkUgICAxOQotI2RlZmluZSBTT0xfRl9HRVRPV04gICAgMjMKLSNkZWZpbmUgU09MX0ZfU0VUT1dOICAgIDI0Ci0KLXN0cnVjdCBzb2xfZmxvY2sgewotCXNob3J0CWxfdHlwZTsKLQlzaG9ydAlsX3doZW5jZTsKLQl1MzIJbF9zdGFydDsKLQl1MzIJbF9sZW47Ci0JczMyCWxfc3lzaWQ7Ci0JczMyCWxfcGlkOwotCXMzMglsX3BhZFs0XTsKLX07Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfZmNudGwodW5zaWduZWQgZmQsIHVuc2lnbmVkIGNtZCwgdTMyIGFyZykKLXsKLQlpbnQgKCpzeXNfZmNudGwpKHVuc2lnbmVkLHVuc2lnbmVkLHVuc2lnbmVkIGxvbmcpID0gCi0JCShpbnQgKCopKHVuc2lnbmVkLHVuc2lnbmVkLHVuc2lnbmVkIGxvbmcpKVNZUyhmY250bCk7Ci0JaW50IHJldCwgZmxhZ3M7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgRl9EVVBGRDoKLQljYXNlIEZfR0VURkQ6Ci0JY2FzZSBGX1NFVEZEOiByZXR1cm4gc3lzX2ZjbnRsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKWFyZyk7Ci0JY2FzZSBGX0dFVEZMOgotCQlmbGFncyA9IHN5c19mY250bChmZCwgY21kLCAwKTsKLQkJcmV0ID0gZmxhZ3MgJiAweGY7Ci0JCWlmIChmbGFncyAmIE9fU1lOQykgcmV0IHw9IDB4ODA1MDsKLQkJaWYgKGZsYWdzICYgT19OT05CTE9DSykgcmV0IHw9IDB4ODA7Ci0JCXJldHVybiByZXQ7Ci0JY2FzZSBGX1NFVEZMOgotCQlmbGFncyA9IGFyZyAmIDB4ZjsKLQkJaWYgKGFyZyAmIDB4ODA1MCkgZmxhZ3MgfD0gT19TWU5DOwotCQlpZiAoYXJnICYgMHg4MCkgZmxhZ3MgfD0gT19OT05CTE9DSzsKLQkJcmV0dXJuIHN5c19mY250bChmZCwgY21kLCAobG9uZylmbGFncyk7Ci0JY2FzZSBTT0xfRl9HRVRMSzoKLQljYXNlIFNPTF9GX1NFVExLOgotCWNhc2UgU09MX0ZfU0VUTEtXOgotCQl7Ci0JCQlzdHJ1Y3QgZmxvY2sgZjsKLQkJCXN0cnVjdCBzb2xfZmxvY2sgX191c2VyICpwID0gQShhcmcpOwotCQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCi0JCQlzd2l0Y2ggKGNtZCkgewotCQkJY2FzZSBTT0xfRl9HRVRMSzogY21kID0gRl9HRVRMSzsgYnJlYWs7Ci0JCQljYXNlIFNPTF9GX1NFVExLOiBjbWQgPSBGX1NFVExLOyBicmVhazsKLQkJCWNhc2UgU09MX0ZfU0VUTEtXOiBjbWQgPSBGX1NFVExLVzsgYnJlYWs7Ci0JCQl9Ci0KLQkJCWlmIChnZXRfdXNlciAoZi5sX3R5cGUsICZwLT5sX3R5cGUpIHx8Ci0JCQkgICAgX19nZXRfdXNlciAoZi5sX3doZW5jZSwgJnAtPmxfd2hlbmNlKSB8fAotCQkJICAgIF9fZ2V0X3VzZXIgKGYubF9zdGFydCwgJnAtPmxfc3RhcnQpIHx8Ci0JCQkgICAgX19nZXRfdXNlciAoZi5sX2xlbiwgJnAtPmxfbGVuKSB8fAotCQkJICAgIF9fZ2V0X3VzZXIgKGYubF9waWQsICZwLT5sX3N5c2lkKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCQlyZXQgPSBzeXNfZmNudGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpJmYpOwotCQkJc2V0X2ZzKG9sZF9mcyk7Ci0KLQkJCWlmIChfX3B1dF91c2VyIChmLmxfdHlwZSwgJnAtPmxfdHlwZSkgfHwKLQkJCSAgICBfX3B1dF91c2VyIChmLmxfd2hlbmNlLCAmcC0+bF93aGVuY2UpIHx8Ci0JCQkgICAgX19wdXRfdXNlciAoZi5sX3N0YXJ0LCAmcC0+bF9zdGFydCkgfHwKLQkJCSAgICBfX3B1dF91c2VyIChmLmxfbGVuLCAmcC0+bF9sZW4pIHx8Ci0JCQkgICAgX19wdXRfdXNlciAoZi5sX3BpZCwgJnAtPmxfcGlkKSB8fAotCQkJICAgIF9fcHV0X3VzZXIgKDAsICZwLT5sX3N5c2lkKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJcmV0dXJuIHJldDsKLQkJfQotCWNhc2UgU09MX0ZfRlJFRVNQOgotCSAgICAgICAgeyAKLQkJICAgIGludCBsZW5ndGg7Ci0JCSAgICBpbnQgKCpzeXNfbmV3ZnRydW5jYXRlKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpPQotCQkJICAgIChpbnQgKCopKHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZykpU1lTKGZ0cnVuY2F0ZSk7Ci0KLQkJICAgIGlmIChnZXRfdXNlcihsZW5ndGgsICYoKHN0cnVjdCBzb2xfZmxvY2sgX191c2VyICopQShhcmcpKS0+bF9zdGFydCkpCi0JCQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJICAgIHJldHVybiBzeXNfbmV3ZnRydW5jYXRlKGZkLCBsZW5ndGgpOwotCQl9Ci0JfTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc191bGltaXQoaW50IGNtZCwgaW50IHZhbCkKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMTogLyogVUxfR0VURlNJWkUgLSBpbiA1MTJCIGNodW5rcyAqLwotCQlyZXR1cm4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9GU0laRV0ucmxpbV9jdXIgPj4gOTsKLQljYXNlIDI6IC8qIFVMX1NFVEZTSVpFICovCi0JCWlmICgodW5zaWduZWQgbG9uZyl2YWwgPiAoTE9OR19NQVg+PjkpKSByZXR1cm4gLUVSQU5HRTsKLQkJdmFsIDw8PSA5OwotCQl0YXNrX2xvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKLQkJaWYgKHZhbCA+IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfRlNJWkVdLnJsaW1fbWF4KSB7Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpIHsKLQkJCQl0YXNrX3VubG9jayhjdXJyZW50LT5ncm91cF9sZWFkZXIpOwotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCQljdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0ZTSVpFXS5ybGltX21heCA9IHZhbDsKLQkJfQotCQljdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0ZTSVpFXS5ybGltX2N1ciA9IHZhbDsKLQkJdGFza191bmxvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSAzOiAvKiBVTF9HTUVNTElNICovCi0JCXJldHVybiBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOwotCWNhc2UgNDogLyogVUxfR0RFU0xJTSAqLwotCQlyZXR1cm4gc3lzY3RsX25yX29wZW47Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKiBBdCBsZWFzdCBhdCB0aGUgdGltZSBJJ20gd3JpdGluZyB0aGlzLCBMaW51eCBkb2Vzbid0IGhhdmUgQUNMcywgc28gd2UKLSAgIGp1c3QgZmFrZSB0aGlzICovCi1hc21saW5rYWdlIGludCBzb2xhcmlzX2FjbCh1MzIgZmlsZW5hbWUsIGludCBjbWQsIGludCBuZW50cmllcywgdTMyIGFjbGJ1ZnApCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfZmFjbCh1bnNpZ25lZCBpbnQgZmQsIGludCBjbWQsIGludCBuZW50cmllcywgdTMyIGFjbGJ1ZnApCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfcHJlYWQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLCB1MzIgY291bnQsIHUzMiBwb3MpCi17Ci0Jc3NpemVfdCAoKnN5c19wcmVhZDY0KSh1bnNpZ25lZCBpbnQsIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90KSA9Ci0JCShzc2l6ZV90ICgqKSh1bnNpZ25lZCBpbnQsIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90KSlTWVMocHJlYWQ2NCk7Ci0KLQlyZXR1cm4gc3lzX3ByZWFkNjQoZmQsIGJ1ZiwgY291bnQsIChsb2ZmX3QpcG9zKTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19wd3JpdGUodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLCB1MzIgY291bnQsIHUzMiBwb3MpCi17Ci0Jc3NpemVfdCAoKnN5c19wd3JpdGU2NCkodW5zaWduZWQgaW50LCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCkgPQotCQkoc3NpemVfdCAoKikodW5zaWduZWQgaW50LCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCkpU1lTKHB3cml0ZTY0KTsKLQotCXJldHVybiBzeXNfcHdyaXRlNjQoZmQsIGJ1ZiwgY291bnQsIChsb2ZmX3QpcG9zKTsKLX0KLQotLyogUE9TSVguMSBuYW1lcyAqLwotI2RlZmluZSBfUENfTElOS19NQVggICAgMQotI2RlZmluZSBfUENfTUFYX0NBTk9OICAgMgotI2RlZmluZSBfUENfTUFYX0lOUFVUICAgMwotI2RlZmluZSBfUENfTkFNRV9NQVggICAgNAotI2RlZmluZSBfUENfUEFUSF9NQVggICAgNQotI2RlZmluZSBfUENfUElQRV9CVUYgICAgNgotI2RlZmluZSBfUENfTk9fVFJVTkMgICAgNwotI2RlZmluZSBfUENfVkRJU0FCTEUgICAgOAotI2RlZmluZSBfUENfQ0hPV05fUkVTVFJJQ1RFRCAgICA5Ci0vKiBQT1NJWC40IG5hbWVzICovCi0jZGVmaW5lIF9QQ19BU1lOQ19JTyAgICAxMAotI2RlZmluZSBfUENfUFJJT19JTyAgICAgMTEKLSNkZWZpbmUgX1BDX1NZTkNfSU8gICAgIDEyCi0jZGVmaW5lIF9QQ19MQVNUICAgICAgICAxMgotCi0vKiBUaGlzIGlzIG5vdCBhIHJlYWwgYW5kIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIHlldCwganVzdCB0byBrZWVwCi0gKiB0aGUgZWFzeSBTb2xhcmlzIGJpbmFyaWVzIGhhcHB5LgotICovCi1hc21saW5rYWdlIGludCBzb2xhcmlzX2ZwYXRoY29uZihpbnQgZmQsIGludCBuYW1lKQotewotCWludCByZXQ7Ci0KLQlzd2l0Y2gobmFtZSkgewotCWNhc2UgX1BDX0xJTktfTUFYOgotCQlyZXQgPSBMSU5LX01BWDsKLQkJYnJlYWs7Ci0JY2FzZSBfUENfTUFYX0NBTk9OOgotCQlyZXQgPSBNQVhfQ0FOT047Ci0JCWJyZWFrOwotCWNhc2UgX1BDX01BWF9JTlBVVDoKLQkJcmV0ID0gTUFYX0lOUFVUOwotCQlicmVhazsKLQljYXNlIF9QQ19OQU1FX01BWDoKLQkJcmV0ID0gTkFNRV9NQVg7Ci0JCWJyZWFrOwotCWNhc2UgX1BDX1BBVEhfTUFYOgotCQlyZXQgPSBQQVRIX01BWDsKLQkJYnJlYWs7Ci0JY2FzZSBfUENfUElQRV9CVUY6Ci0JCXJldCA9IFBJUEVfQlVGOwotCQlicmVhazsKLQljYXNlIF9QQ19DSE9XTl9SRVNUUklDVEVEOgotCQlyZXQgPSAxOwotCQlicmVhazsKLQljYXNlIF9QQ19OT19UUlVOQzoKLQljYXNlIF9QQ19WRElTQUJMRToKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfcGF0aGNvbmYodTMyIHBhdGgsIGludCBuYW1lKQotewotCXJldHVybiBzb2xhcmlzX2ZwYXRoY29uZigwLCBuYW1lKTsKLX0KLQotLyogc29sYXJpc19sbHNlZWsgcmV0dXJucyBsb25nIGxvbmcgLSBxdWl0ZSBkaWZmaWN1bHQgKi8KLWFzbWxpbmthZ2UgbG9uZyBzb2xhcmlzX2xsc2VlayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIG9mZl9oaSwgdTMyIG9mZl9sbywgaW50IHdoZW5jZSkKLXsKLQlpbnQgKCpzeXNfbGxzZWVrKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCBfX3VzZXIgKiwgdW5zaWduZWQgaW50KSA9Ci0JCShpbnQgKCopKHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9mZl90IF9fdXNlciAqLCB1bnNpZ25lZCBpbnQpKVNZUyhfbGxzZWVrKTsKLQlpbnQgcmV0OwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQlsb2ZmX3QgcmV0dmFsOwotCQotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHN5c19sbHNlZWsoKHVuc2lnbmVkIGludClyZWdzLT51X3JlZ3NbVVJFR19JMF0sIG9mZl9oaSwgb2ZmX2xvLCAmcmV0dmFsLCB3aGVuY2UpOwotCXNldF9mcyhvbGRfZnMpOwotCWlmIChyZXQgPCAwKSByZXR1cm4gcmV0OwotCXJlZ3MtPnVfcmVnc1tVUkVHX0kxXSA9ICh1MzIpcmV0dmFsOwotCXJldHVybiAocmV0dmFsID4+IDMyKTsKLX0KLQotLyogSGF2ZSB0byBtYXNrIG91dCBhbGwgYnV0IGxvd2VyIDMgYml0cyAqLwotYXNtbGlua2FnZSBpbnQgc29sYXJpc19hY2Nlc3ModTMyIGZpbGVuYW1lLCBsb25nIG1vZGUpCi17Ci0JaW50ICgqc3lzX2FjY2VzcykoY29uc3QgY2hhciBfX3VzZXIgKiwgaW50KSA9IAotCQkoaW50ICgqKShjb25zdCBjaGFyIF9fdXNlciAqLCBpbnQpKVNZUyhhY2Nlc3MpOwotCQkKLQlyZXR1cm4gc3lzX2FjY2VzcyhBKGZpbGVuYW1lKSwgbW9kZSAmIDcpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvaW9jdGwuYyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2lvY3RsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZDEwYTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvaW9jdGwuYworKysgL2Rldi9udWxsCkBAIC0xLDgyNSArMCwwIEBACi0vKiAkSWQ6IGlvY3RsLmMsdiAxLjE3IDIwMDIvMDIvMDggMDM6NTc6MTQgZGF2ZW0gRXhwICQKLSAqIGlvY3RsLmM6IFNvbGFyaXMgaW9jdGwgZW11bGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQotICogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUGF0cmlrIFJhayAocHJhazMyNjRAc3MxMDAwLm1zLm1mZi5jdW5pLmN6KQotICoKLSAqIFN0cmVhbXMgJiB0aW1vZCBlbXVsYXRpb24gYmFzZWQgb24gY29kZQotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE1pa2UgSmFnZGlzIChqYWdneUBwdXJwbGV0LmRlbW9uLmNvLnVrKQotICoKLSAqIDE5OTktMDgtMTkgSW1wbGVtZW50ZWQgc29sYXJpcyAnbScgKG1hZyB0YXBlKSBhbmQKLSAqICAgICAgICAgICAgJ08nIChvcGVucHJvbSkgaW9jdGxzLCBieSBKYXNvbiBSYXBwbGV5ZQotICogICAgICAgICAgICAgKHJhcHBsZXllQGNjci5idWZmYWxvLmVkdSkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210aW8uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KLSNpbmNsdWRlIDxhc20vb3BlbnByb21pby5oPgotCi0jaW5jbHVkZSAiY29udi5oIgotI2luY2x1ZGUgInNvY2tzeXMuaCIKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGNvbXBhdF9zeXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAotCXUzMiBhcmcpOwotYXNtbGlua2FnZSBpbnQgc29sYXJpc19pb2N0bCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHUzMiBhcmcpOwotCi1leHRlcm4gaW50IHRpbW9kX3B1dG1zZyh1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpjdGxfYnVmLCBpbnQgY3RsX2xlbiwKLQkJCWNoYXIgX191c2VyICpkYXRhX2J1ZiwgaW50IGRhdGFfbGVuLCBpbnQgZmxhZ3MpOwotZXh0ZXJuIGludCB0aW1vZF9nZXRtc2codW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqY3RsX2J1ZiwgaW50IGN0bF9tYXhsZW4sIGludCBfX3VzZXIgKmN0bF9sZW4sCi0JCQljaGFyIF9fdXNlciAqZGF0YV9idWYsIGludCBkYXRhX21heGxlbiwgaW50IF9fdXNlciAqZGF0YV9sZW4sIGludCAqZmxhZ3MpOwotCi0vKiB0ZXJtaW8qIHN0dWZmIHt7eyAqLwotCi1zdHJ1Y3Qgc29sYXJpc190ZXJtaW9zIHsKLQl1MzIJY19pZmxhZzsKLQl1MzIJY19vZmxhZzsKLQl1MzIJY19jZmxhZzsKLQl1MzIJY19sZmxhZzsKLQl1OAljX2NjWzE5XTsKLX07Ci0KLXN0cnVjdCBzb2xhcmlzX3Rlcm1pbyB7Ci0JdTE2CWNfaWZsYWc7Ci0JdTE2CWNfb2ZsYWc7Ci0JdTE2CWNfY2ZsYWc7Ci0JdTE2CWNfbGZsYWc7Ci0JczgJY19saW5lOwotCXU4CWNfY2NbOF07Ci19OwotCi1zdHJ1Y3Qgc29sYXJpc190ZXJtaW94IHsKLQl1MTYJeF9oZmxhZzsKLQl1MTYJeF9jZmxhZzsKLQl1MTYJeF9yZmxhZ1s1XTsKLQl1MTYJeF9zZmxhZzsKLX07Ci0KLXN0YXRpYyB1MzIgc29sYXJpc190b19saW51eF9jZmxhZyh1MzIgY2ZsYWcpCi17Ci0JY2ZsYWcgJj0gMHg3ZmRmZjAwMDsKLQlpZiAoY2ZsYWcgJiAweDIwMDAwMCkgewotCQlpbnQgYmF1ZCA9IGNmbGFnICYgMHhmOwotCQljZmxhZyAmPSB+MHgyMDAwMGY7Ci0JCXN3aXRjaCAoYmF1ZCkgewotCQljYXNlIDA6IGJhdWQgPSBCNTc2MDA7IGJyZWFrOwotCQljYXNlIDE6IGJhdWQgPSBCNzY4MDA7IGJyZWFrOwotCQljYXNlIDI6IGJhdWQgPSBCMTE1MjAwOyBicmVhazsKLQkJY2FzZSAzOiBiYXVkID0gQjE1MzYwMDsgYnJlYWs7Ci0JCWNhc2UgNDogYmF1ZCA9IEIyMzA0MDA7IGJyZWFrOwotCQljYXNlIDU6IGJhdWQgPSBCMzA3MjAwOyBicmVhazsKLQkJY2FzZSA2OiBiYXVkID0gQjQ2MDgwMDsgYnJlYWs7Ci0JCX0KLQkJY2ZsYWcgfD0gQ0JBVURFWCB8IGJhdWQ7Ci0JfQotCXJldHVybiBjZmxhZzsKLX0KLQotc3RhdGljIHUzMiBsaW51eF90b19zb2xhcmlzX2NmbGFnKHUzMiBjZmxhZykKLXsKLQljZmxhZyAmPSB+KENNU1BBUiB8IENJQkFVRCk7Ci0JaWYgKGNmbGFnICYgQ0JBVURFWCkgewotCQlpbnQgYmF1ZCA9IGNmbGFnICYgQ0JBVUQ7Ci0JCWNmbGFnICY9IH5DQkFVRDsKLQkJc3dpdGNoIChiYXVkKSB7Ci0JCWNhc2UgQjU3NjAwOiBiYXVkID0gMDsgYnJlYWs7Ci0JCWNhc2UgQjc2ODAwOiBiYXVkID0gMTsgYnJlYWs7Ci0JCWNhc2UgQjExNTIwMDogYmF1ZCA9IDI7IGJyZWFrOwotCQljYXNlIEIxNTM2MDA6IGJhdWQgPSAzOyBicmVhazsKLQkJY2FzZSBCMjMwNDAwOiBiYXVkID0gNDsgYnJlYWs7Ci0JCWNhc2UgQjMwNzIwMDogYmF1ZCA9IDU7IGJyZWFrOwotCQljYXNlIEI0NjA4MDA6IGJhdWQgPSA2OyBicmVhazsKLQkJY2FzZSBCNjE0NDAwOiBiYXVkID0gNzsgYnJlYWs7Ci0JCWNhc2UgQjkyMTYwMDogYmF1ZCA9IDg7IGJyZWFrOwotI2lmIDAJCQotCQljYXNlIEIxODQzMjAwOiBiYXVkID0gOTsgYnJlYWs7Ci0jZW5kaWYKLQkJfQotCQljZmxhZyB8PSAweDIwMDAwMCB8IGJhdWQ7Ci0JfQotCXJldHVybiBjZmxhZzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbGludXhfdG9fc29sYXJpc190ZXJtaW8odW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKQotewotCXN0cnVjdCBzb2xhcmlzX3Rlcm1pbyBfX3VzZXIgKnAgPSBBKGFyZyk7Ci0JaW50IHJldDsKLQkKLQlyZXQgPSBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpcCk7Ci0JaWYgKCFyZXQpIHsKLQkJdTMyIGNmbGFnOwotCQkKLQkJaWYgKF9fZ2V0X3VzZXIgKGNmbGFnLCAmcC0+Y19jZmxhZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJY2ZsYWcgPSBsaW51eF90b19zb2xhcmlzX2NmbGFnKGNmbGFnKTsKLQkJaWYgKF9fcHV0X3VzZXIgKGNmbGFnLCAmcC0+Y19jZmxhZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzb2xhcmlzX3RvX2xpbnV4X3Rlcm1pbyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHUzMiBhcmcpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc29sYXJpc190ZXJtaW8gczsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JCi0JaWYgKGNvcHlfZnJvbV91c2VyICgmcywgKHN0cnVjdCBzb2xhcmlzX3Rlcm1pbyBfX3VzZXIgKilBKGFyZyksIHNpemVvZihzdHJ1Y3Qgc29sYXJpc190ZXJtaW8pKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jcy5jX2NmbGFnID0gc29sYXJpc190b19saW51eF9jZmxhZyhzLmNfY2ZsYWcpOwotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZykmcyk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbGludXhfdG9fc29sYXJpc190ZXJtaW9zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdTMyIGFyZykKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzb2xhcmlzX3Rlcm1pb3MgczsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsJCi0JcmV0ID0gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKSZzKTsKLQlzZXRfZnMob2xkX2ZzKTsKLQlpZiAoIXJldCkgewotCQlzdHJ1Y3Qgc29sYXJpc190ZXJtaW9zIF9fdXNlciAqcCA9IEEoYXJnKTsKLQkJaWYgKHB1dF91c2VyIChzLmNfaWZsYWcsICZwLT5jX2lmbGFnKSB8fAotCQkgICAgX19wdXRfdXNlciAocy5jX29mbGFnLCAmcC0+Y19vZmxhZykgfHwKLQkJICAgIF9fcHV0X3VzZXIgKGxpbnV4X3RvX3NvbGFyaXNfY2ZsYWcocy5jX2NmbGFnKSwgJnAtPmNfY2ZsYWcpIHx8Ci0JCSAgICBfX3B1dF91c2VyIChzLmNfbGZsYWcsICZwLT5jX2xmbGFnKSB8fAotCQkgICAgX19jb3B5X3RvX3VzZXIgKHAtPmNfY2MsIHMuY19jYywgMTYpIHx8Ci0JCSAgICBfX2NsZWFyX3VzZXIgKHAtPmNfY2MgKyAxNiwgMikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzb2xhcmlzX3RvX2xpbnV4X3Rlcm1pb3ModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHNvbGFyaXNfdGVybWlvcyBzOwotCXN0cnVjdCBzb2xhcmlzX3Rlcm1pb3MgX191c2VyICpwID0gQShhcmcpOwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCXJldCA9IHN5c19pb2N0bChmZCwgVENHRVRTLCAodW5zaWduZWQgbG9uZykmcyk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0JaWYgKHJldCkgcmV0dXJuIHJldDsKLQlpZiAocHV0X3VzZXIgKHMuY19pZmxhZywgJnAtPmNfaWZsYWcpIHx8Ci0JICAgIF9fcHV0X3VzZXIgKHMuY19vZmxhZywgJnAtPmNfb2ZsYWcpIHx8Ci0JICAgIF9fcHV0X3VzZXIgKHMuY19jZmxhZywgJnAtPmNfY2ZsYWcpIHx8Ci0JICAgIF9fcHV0X3VzZXIgKHMuY19sZmxhZywgJnAtPmNfbGZsYWcpIHx8Ci0JICAgIF9fY29weV9mcm9tX3VzZXIgKHMuY19jYywgcC0+Y19jYywgMTYpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlzLmNfY2ZsYWcgPSBzb2xhcmlzX3RvX2xpbnV4X2NmbGFnKHMuY19jZmxhZyk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKSZzKTsKLQlzZXRfZnMob2xkX2ZzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzb2xhcmlzX1QodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKQotewotCXN3aXRjaCAoY21kICYgMHhmZikgewotCWNhc2UgMTogLyogVENHRVRBICovCi0JCXJldHVybiBsaW51eF90b19zb2xhcmlzX3Rlcm1pbyhmZCwgVENHRVRBLCBhcmcpOwotCWNhc2UgMjogLyogVENTRVRBICovCi0JCXJldHVybiBzb2xhcmlzX3RvX2xpbnV4X3Rlcm1pbyhmZCwgVENTRVRBLCBhcmcpOwotCWNhc2UgMzogLyogVENTRVRBVyAqLwotCQlyZXR1cm4gc29sYXJpc190b19saW51eF90ZXJtaW8oZmQsIFRDU0VUQVcsIGFyZyk7Ci0JY2FzZSA0OiAvKiBUQ1NFVEFGICovCi0JCXJldHVybiBzb2xhcmlzX3RvX2xpbnV4X3Rlcm1pbyhmZCwgVENTRVRBRiwgYXJnKTsKLQljYXNlIDU6IC8qIFRDU0JSSyAqLwotCQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBUQ1NCUkssIGFyZyk7Ci0JY2FzZSA2OiAvKiBUQ1hPTkMgKi8KLQkJcmV0dXJuIHN5c19pb2N0bChmZCwgVENYT05DLCBhcmcpOwotCWNhc2UgNzogLyogVENGTFNIICovCi0JCXJldHVybiBzeXNfaW9jdGwoZmQsIFRDRkxTSCwgYXJnKTsKLQljYXNlIDEzOiAvKiBUQ0dFVFMgKi8KLQkJcmV0dXJuIGxpbnV4X3RvX3NvbGFyaXNfdGVybWlvcyhmZCwgVENHRVRTLCBhcmcpOwotCWNhc2UgMTQ6IC8qIFRDU0VUUyAqLwotCQlyZXR1cm4gc29sYXJpc190b19saW51eF90ZXJtaW9zKGZkLCBUQ1NFVFMsIGFyZyk7Ci0JY2FzZSAxNTogLyogVENTRVRTVyAqLwotCQlyZXR1cm4gc29sYXJpc190b19saW51eF90ZXJtaW9zKGZkLCBUQ1NFVFNXLCBhcmcpOwotCWNhc2UgMTY6IC8qIFRDU0VUU0YgKi8KLQkJcmV0dXJuIHNvbGFyaXNfdG9fbGludXhfdGVybWlvcyhmZCwgVENTRVRTRiwgYXJnKTsKLQljYXNlIDEwMzogLyogVElPQ1NXSU5TWiAqLwotCQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBUSU9DU1dJTlNaLCBhcmcpOwotCWNhc2UgMTA0OiAvKiBUSU9DR1dJTlNaICovCi0JCXJldHVybiBzeXNfaW9jdGwoZmQsIFRJT0NHV0lOU1osIGFyZyk7Ci0JfQotCXJldHVybiAtRU5PU1lTOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzb2xhcmlzX3QodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKQotewotCXN3aXRjaCAoY21kICYgMHhmZikgewotCWNhc2UgMjA6IC8qIFRJT0NHUEdSUCAqLwotCQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBUSU9DR1BHUlAsIGFyZyk7Ci0JY2FzZSAyMTogLyogVElPQ1NQR1JQICovCi0JCXJldHVybiBzeXNfaW9jdGwoZmQsIFRJT0NTUEdSUCwgYXJnKTsKLQl9Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiBBIHBzZXVkbyBTVFJFQU1TIHN1cHBvcnQge3t7ICovCi0KLXN0cnVjdCBzdHJpb2N0bCB7Ci0JaW50IGNtZCwgdGltZW91dCwgbGVuOwotCXUzMiBkYXRhOwotfTsKLQotc3RydWN0IHNvbGFyaXNfc2lfc29ja3BhcmFtcyB7Ci0JaW50IHNwX2ZhbWlseTsKLQlpbnQgc3BfdHlwZTsKLQlpbnQgc3BfcHJvdG9jb2w7Ci19OwotCi1zdHJ1Y3Qgc29sYXJpc19vX3NpX3VkYXRhIHsKLQlpbnQgdGlkdXNpemU7Ci0JaW50IGFkZHJzaXplOwotCWludCBvcHRzaXplOwotCWludCBldHNkdXNpemU7Ci0JaW50IHNlcnZ0eXBlOwotCWludCBzb19zdGF0ZTsKLQlpbnQgc29fb3B0aW9uczsKLQlpbnQgdHNkdXNpemU7Ci19OwotCi1zdHJ1Y3Qgc29sYXJpc19zaV91ZGF0YSB7Ci0JaW50IHRpZHVzaXplOwotCWludCBhZGRyc2l6ZTsKLQlpbnQgb3B0c2l6ZTsKLQlpbnQgZXRzZHVzaXplOwotCWludCBzZXJ2dHlwZTsKLQlpbnQgc29fc3RhdGU7Ci0JaW50IHNvX29wdGlvbnM7Ci0JaW50IHRzZHVzaXplOwotCXN0cnVjdCBzb2xhcmlzX3NpX3NvY2twYXJhbXMgc29ja3BhcmFtczsKLX07Ci0KLSNkZWZpbmUgU09MQVJJU19NT0RVTEVfVElNT0QgICAgMAotI2RlZmluZSBTT0xBUklTX01PRFVMRV9TT0NLTU9EICAxCi0jZGVmaW5lIFNPTEFSSVNfTU9EVUxFX01BWCAgICAgIDIKLQotc3RhdGljIHN0cnVjdCBtb2R1bGVfaW5mbyB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICAgICAgIC8qIGNhbiBiZSBleHBhbmRlZCBmdXJ0aGVyIGlmIG5lZWRlZCAqLwotfSBtb2R1bGVfdGFibGVbIFNPTEFSSVNfTU9EVUxFX01BWCArIDEgXSA9IHsKLSAgICAgICAgLyogdGhlIG9yZGVyaW5nIGhlcmUgbXVzdCBtYXRjaCB0aGUgbW9kdWxlIG51bWJlcnMgYWJvdmUhICovCi0gICAgICAgIHsgInRpbW9kIiB9LAotICAgICAgICB7ICJzb2NrbW9kIiB9LAotICAgICAgICB7IE5VTEwgfQotfTsKLQotc3RhdGljIGlubGluZSBpbnQgc29sYXJpc19zb2NrbW9kKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdTMyIGFyZykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlubzsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwotCS8qIEkgd29uZGVyIHdoaWNoIG9mIHRoZXNlIHRlc3RzIGFyZSBzdXBlcmZsdW91cy4uLiAtLXBhdHJpayAqLwotCXJjdV9yZWFkX2xvY2soKTsKLQlmZHQgPSBmaWxlc19mZHRhYmxlKGN1cnJlbnQtPmZpbGVzKTsKLQlpZiAoISBmZHQtPmZkW2ZkXSB8fAotCSAgICAhIGZkdC0+ZmRbZmRdLT5mX3BhdGguZGVudHJ5IHx8Ci0JICAgICEgKGlubyA9IGZkdC0+ZmRbZmRdLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSB8fAotCSAgICAhIFNfSVNTT0NLKGluby0+aV9tb2RlKSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIFRCQURGOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQkKLQlzd2l0Y2ggKGNtZCAmIDB4ZmYpIHsKLQljYXNlIDEwOTogLyogU0lfU09DS1BBUkFNUyAqLwotCXsKLQkJc3RydWN0IHNvbGFyaXNfc2lfc29ja3BhcmFtcyBzaTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyICgmc2ksIEEoYXJnKSwgc2l6ZW9mKHNpKSkpCi0JCQlyZXR1cm4gKEVGQVVMVCA8PCA4KSB8IFRTWVNFUlI7Ci0KLQkJLyogU2hvdWxkIHdlIG1vZGlmeSBzb2NrZXQgaW5vLT5zb2NrZXRfaS5vcHMgYW5kIHR5cGU/ICovCi0JCXJldHVybiAwOwotCX0KLQljYXNlIDExMDogLyogU0lfR0VUVURBVEEgKi8KLQl7Ci0JCWludCBldHNkdXNpemUsIHNlcnZ0eXBlOwotCQlzdHJ1Y3Qgc29sYXJpc19zaV91ZGF0YSBfX3VzZXIgKnAgPSBBKGFyZyk7Ci0JCXN3aXRjaCAoU09DS0VUX0koaW5vKS0+dHlwZSkgewotCQljYXNlIFNPQ0tfU1RSRUFNOgotCQkJZXRzZHVzaXplID0gMTsKLQkJCXNlcnZ0eXBlID0gMjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXRzZHVzaXplID0gLTI7Ci0JCQlzZXJ2dHlwZSA9IDM7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocHV0X3VzZXIoMTYzODQsICZwLT50aWR1c2l6ZSkgfHwKLQkJICAgIF9fcHV0X3VzZXIoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkciksICZwLT5hZGRyc2l6ZSkgfHwKLQkJICAgIF9fcHV0X3VzZXIoLTEsICZwLT5vcHRzaXplKSB8fAotCQkgICAgX19wdXRfdXNlcihldHNkdXNpemUsICZwLT5ldHNkdXNpemUpIHx8Ci0JCSAgICBfX3B1dF91c2VyKHNlcnZ0eXBlLCAmcC0+c2VydnR5cGUpIHx8Ci0JCSAgICBfX3B1dF91c2VyKDAsICZwLT5zb19zdGF0ZSkgfHwKLQkJICAgIF9fcHV0X3VzZXIoMCwgJnAtPnNvX29wdGlvbnMpIHx8Ci0JCSAgICBfX3B1dF91c2VyKDE2Mzg0LCAmcC0+dHNkdXNpemUpIHx8Ci0JCSAgICBfX3B1dF91c2VyKFNPQ0tFVF9JKGlubyktPm9wcy0+ZmFtaWx5LCAmcC0+c29ja3BhcmFtcy5zcF9mYW1pbHkpIHx8Ci0JCSAgICBfX3B1dF91c2VyKFNPQ0tFVF9JKGlubyktPnR5cGUsICZwLT5zb2NrcGFyYW1zLnNwX3R5cGUpIHx8Ci0JCSAgICBfX3B1dF91c2VyKFNPQ0tFVF9JKGlubyktPm9wcy0+ZmFtaWx5LCAmcC0+c29ja3BhcmFtcy5zcF9wcm90b2NvbCkpCi0JCQlyZXR1cm4gKEVGQVVMVCA8PCA4KSB8IFRTWVNFUlI7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIDEwMTogLyogT19TSV9HRVRVREFUQSAqLwotCXsKLQkJaW50IGV0c2R1c2l6ZSwgc2VydnR5cGU7Ci0JCXN0cnVjdCBzb2xhcmlzX29fc2lfdWRhdGEgX191c2VyICpwID0gQShhcmcpOwotCQlzd2l0Y2ggKFNPQ0tFVF9JKGlubyktPnR5cGUpIHsKLQkJY2FzZSBTT0NLX1NUUkVBTToKLQkJCWV0c2R1c2l6ZSA9IDE7Ci0JCQlzZXJ2dHlwZSA9IDI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWV0c2R1c2l6ZSA9IC0yOwotCQkJc2VydnR5cGUgPSAzOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHB1dF91c2VyKDE2Mzg0LCAmcC0+dGlkdXNpemUpIHx8Ci0JCSAgICBfX3B1dF91c2VyKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpLCAmcC0+YWRkcnNpemUpIHx8Ci0JCSAgICBfX3B1dF91c2VyKC0xLCAmcC0+b3B0c2l6ZSkgfHwKLQkJICAgIF9fcHV0X3VzZXIoZXRzZHVzaXplLCAmcC0+ZXRzZHVzaXplKSB8fAotCQkgICAgX19wdXRfdXNlcihzZXJ2dHlwZSwgJnAtPnNlcnZ0eXBlKSB8fAotCQkgICAgX19wdXRfdXNlcigwLCAmcC0+c29fc3RhdGUpIHx8Ci0JCSAgICBfX3B1dF91c2VyKDAsICZwLT5zb19vcHRpb25zKSB8fAotCQkgICAgX19wdXRfdXNlcigxNjM4NCwgJnAtPnRzZHVzaXplKSkKLQkJCXJldHVybiAoRUZBVUxUIDw8IDgpIHwgVFNZU0VSUjsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgMTAyOiAvKiBTSV9TSFVURE9XTiAqLwotCWNhc2UgMTAzOiAvKiBTSV9MSVNURU4gKi8KLQljYXNlIDEwNDogLyogU0lfU0VUTVlOQU1FICovCi0JY2FzZSAxMDU6IC8qIFNJX1NFVFBFRVJOQU1FICovCi0JY2FzZSAxMDY6IC8qIFNJX0dFVElOVFJBTlNJVCAqLwotCWNhc2UgMTA3OiAvKiBTSV9UQ0xfTElOSyAqLwotCWNhc2UgMTA4OiAvKiBTSV9UQ0xfVU5MSU5LICovCi0JCTsKLQl9Ci0JcmV0dXJuIFROT1RTVVBQT1JUOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzb2xhcmlzX3RpbW9kKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdTMyIGFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIGludCBfX3VzZXIgKmxlbl9wKQotewotCWludCByZXQ7Ci0JCQotCXN3aXRjaCAoY21kICYgMHhmZikgewotCWNhc2UgMTQxOiAvKiBUSV9PUFRNR01UICovCi0JewotCQlpbnQgaTsKLQkJdTMyIHByaW07Ci0JCVNPTEQoIlRJX09QTUdNVCBlbnRyeSIpOwotCQlyZXQgPSB0aW1vZF9wdXRtc2coZmQsIEEoYXJnKSwgbGVuLCBOVUxMLCAtMSwgMCk7Ci0JCVNPTEQoInRpbW9kX3B1dG1zZygpIHJldHVybmVkIik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gKC1yZXQgPDwgOCkgfCBUU1lTRVJSOwotCQlpID0gTVNHX0hJUFJJOwotCQlTT0xEKCJjYWxsaW5nIHRpbW9kX2dldG1zZygpIik7Ci0JCXJldCA9IHRpbW9kX2dldG1zZyhmZCwgQShhcmcpLCBsZW4sIGxlbl9wLCBOVUxMLCAtMSwgTlVMTCwgJmkpOwotCQlTT0xEKCJ0aW1vZF9nZXRtc2coKSByZXR1cm5lZCIpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuICgtcmV0IDw8IDgpIHwgVFNZU0VSUjsKLQkJU09MRCgicmV0IG9rIik7Ci0JCWlmIChnZXRfdXNlcihwcmltLCAodTMyIF9fdXNlciAqKUEoYXJnKSkpCi0JCQlyZXR1cm4gKEVGQVVMVCA8PCA4KSB8IFRTWVNFUlI7Ci0JCVNPTEQoImdvdCBwcmltIik7Ci0JCWlmIChwcmltID09IFRfRVJST1JfQUNLKSB7Ci0JCQl1MzIgdG1wLCB0bXAyOwotCQkJU09MRCgicHJpbSBpcyBUX0VSUk9SX0FDSyIpOwotCQkJaWYgKGdldF91c2VyKHRtcCwgKHUzMiBfX3VzZXIgKilBKGFyZykrMykgfHwKLQkJCSAgICBnZXRfdXNlcih0bXAyLCAodTMyIF9fdXNlciAqKUEoYXJnKSsyKSkKLQkJCQlyZXR1cm4gKEVGQVVMVCA8PCA4KSB8IFRTWVNFUlI7Ci0JCQlyZXR1cm4gKHRtcDIgPDwgOCkgfCB0bXA7Ci0JCX0KLQkJU09MRCgiVElfT1BNR01UIHJldHVybiAwIik7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIDE0MjogLyogVElfQklORCAqLwotCXsKLQkJaW50IGk7Ci0JCXUzMiBwcmltOwotCQlTT0xEKCJUSV9CSU5EIGVudHJ5Iik7Ci0JCXJldCA9IHRpbW9kX3B1dG1zZyhmZCwgQShhcmcpLCBsZW4sIE5VTEwsIC0xLCAwKTsKLQkJU09MRCgidGltb2RfcHV0bXNnKCkgcmV0dXJuZWQiKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAoLXJldCA8PCA4KSB8IFRTWVNFUlI7Ci0JCWxlbiA9IDEwMjQ7IC8qIFNvbGFyaXMgYWxsb3dzIGFyYml0cmFyeSByZXR1cm4gc2l6ZSAqLwotCQlpID0gTVNHX0hJUFJJOwotCQlTT0xEKCJjYWxsaW5nIHRpbW9kX2dldG1zZygpIik7Ci0JCXJldCA9IHRpbW9kX2dldG1zZyhmZCwgQShhcmcpLCBsZW4sIGxlbl9wLCBOVUxMLCAtMSwgTlVMTCwgJmkpOwotCQlTT0xEKCJ0aW1vZF9nZXRtc2coKSByZXR1cm5lZCIpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuICgtcmV0IDw8IDgpIHwgVFNZU0VSUjsKLQkJU09MRCgicmV0IG9rIik7Ci0JCWlmIChnZXRfdXNlcihwcmltLCAodTMyIF9fdXNlciAqKUEoYXJnKSkpCi0JCQlyZXR1cm4gKEVGQVVMVCA8PCA4KSB8IFRTWVNFUlI7Ci0JCVNPTEQoImdvdCBwcmltIik7Ci0JCWlmIChwcmltID09IFRfRVJST1JfQUNLKSB7Ci0JCQl1MzIgdG1wLCB0bXAyOwotCQkJU09MRCgicHJpbSBpcyBUX0VSUk9SX0FDSyIpOwotCQkJaWYgKGdldF91c2VyKHRtcCwgKHUzMiBfX3VzZXIgKilBKGFyZykrMykgfHwKLQkJCSAgICBnZXRfdXNlcih0bXAyLCAodTMyIF9fdXNlciAqKUEoYXJnKSsyKSkKLQkJCQlyZXR1cm4gKEVGQVVMVCA8PCA4KSB8IFRTWVNFUlI7Ci0JCQlyZXR1cm4gKHRtcDIgPDwgOCkgfCB0bXA7Ci0JCX0KLQkJU09MRCgibm8gRVJST1JfQUNLIHJlcXVlc3RlZCIpOwotCQlpZiAocHJpbSAhPSBUX09LX0FDSykKLQkJCXJldHVybiBUQkFEU0VROwotCQlTT0xEKCJPS19BQ0sgcmVxdWVzdGVkIik7Ci0JCWkgPSBNU0dfSElQUkk7Ci0JCVNPTEQoImNhbGxpbmcgdGltb2RfZ2V0bXNnKCkiKTsKLQkJcmV0ID0gdGltb2RfZ2V0bXNnKGZkLCBBKGFyZyksIGxlbiwgbGVuX3AsIE5VTEwsIC0xLCBOVUxMLCAmaSk7Ci0JCVNPTEQoInRpbW9kX2dldG1zZygpIHJldHVybmVkIik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gKC1yZXQgPDwgOCkgfCBUU1lTRVJSOwotCQlTT0xEKCJUSV9CSU5EIHJldHVybiBvayIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSAxNDA6IC8qIFRJX0dFVElORk8gKi8KLQljYXNlIDE0MzogLyogVElfVU5CSU5EICovCi0JY2FzZSAxNDQ6IC8qIFRJX0dFVE1ZTkFNRSAqLwotCWNhc2UgMTQ1OiAvKiBUSV9HRVRQRUVSTkFNRSAqLwotCWNhc2UgMTQ2OiAvKiBUSV9TRVRNWU5BTUUgKi8KLQljYXNlIDE0NzogLyogVElfU0VUUEVFUk5BTUUgKi8KLQkJOwotCX0KLQlyZXR1cm4gVE5PVFNVUFBPUlQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNvbGFyaXNfUyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKQotewotCWNoYXIgKnA7Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzOwotCXN0cnVjdCBzdHJpb2N0bCBzaTsKLQlzdHJ1Y3QgaW5vZGUgKmlubzsKLSAgICAgICAgc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0ICpzb2NrOwotICAgICAgICBzdHJ1Y3QgbW9kdWxlX2luZm8gKm1pOwotCi0gICAgICAgIGlubyA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0gICAgICAgIGlmICghU19JU1NPQ0soaW5vLT5pX21vZGUpKQotCQlyZXR1cm4gLUVCQURGOwotICAgICAgICBzb2NrID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotICAgICAgICBpZiAoISBzb2NrKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJzb2xhcmlzX1M6IE5VTEwgcHJpdmF0ZV9kYXRhXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCQURGOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzb2NrLT5tYWdpYyAhPSBTT0xBUklTX1NPQ0tFVF9NQUdJQykgewotICAgICAgICAgICAgICAgIHByaW50aygic29sYXJpc19TOiBpbnZhbGlkIG1hZ2ljXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCQURGOwotICAgICAgICB9Ci0gICAgICAgIAotCi0Jc3dpdGNoIChjbWQgJiAweGZmKSB7Ci0JY2FzZSAxOiAvKiBJX05SRUFEICovCi0JCXJldHVybiAtRU5PU1lTOwotCWNhc2UgMjogLyogSV9QVVNIICovCi0gICAgICAgIHsKLQkJcCA9IGdldG5hbWUgKEEoYXJnKSk7Ci0JCWlmIChJU19FUlIgKHApKQotCQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBmb3IgKG1pID0gbW9kdWxlX3RhYmxlOyBtaS0+bmFtZTsgbWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChtaS0+bmFtZSwgcCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2xfbW9kdWxlIG07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb2NrLT5tb2Rjb3VudCA+PSBNQVhfTlJfU1RSRUFNX01PRFVMRVMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRU5YSU87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IChzb2xfbW9kdWxlKSAobWkgLSBtb2R1bGVfdGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLT5tb2R1bGVbc29jay0+bW9kY291bnQrK10gPSBtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0JCXB1dG5hbWUgKHApOwotCQlyZXR1cm4gcmV0OwotICAgICAgICB9Ci0JY2FzZSAzOiAvKiBJX1BPUCAqLwotICAgICAgICAgICAgICAgIGlmIChzb2NrLT5tb2Rjb3VudCA8PSAwKSByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBzb2NrLT5tb2Rjb3VudC0tOwotCQlyZXR1cm4gMDsKLSAgICAgICAgY2FzZSA0OiAvKiBJX0xPT0sgKi8KLSAgICAgICAgewotICAgICAgICAJY29uc3QgY2hhciAqcDsKLSAgICAgICAgICAgICAgICBpZiAoc29jay0+bW9kY291bnQgPD0gMCkgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgcCA9IG1vZHVsZV90YWJsZVsodW5zaWduZWQpc29jay0+bW9kdWxlW3NvY2stPm1vZGNvdW50XV0ubmFtZTsKLSAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyIChBKGFyZyksIHAsIHN0cmxlbihwKSkpCi0gICAgICAgICAgICAgICAgCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0JY2FzZSA1OiAvKiBJX0ZMVVNIICovCi0JCXJldHVybiAwOwotCWNhc2UgODogLyogSV9TVFIgKi8KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzaSwgQShhcmcpLCBzaXplb2Yoc3RydWN0IHN0cmlvY3RsKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAvKiBXZSBpZ25vcmUgd2hhdCBtb2R1bGUgaXMgYWN0dWFsbHkgYXQgdGhlIHRvcCBvZiBzdGFjay4gKi8KLQkJc3dpdGNoICgoc2kuY21kID4+IDgpICYgMHhmZikgewotCQljYXNlICdJJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzb2xhcmlzX3NvY2ttb2QoZmQsIHNpLmNtZCwgc2kuZGF0YSk7Ci0JCWNhc2UgJ1QnOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvbGFyaXNfdGltb2QoZmQsIHNpLmNtZCwgc2kuZGF0YSwgc2kubGVuLAotCQkJCSYoKHN0cnVjdCBzdHJpb2N0bCBfX3VzZXIgKilBKGFyZykpLT5sZW4pOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIHNvbGFyaXNfaW9jdGwoZmQsIHNpLmNtZCwgc2kuZGF0YSk7Ci0JCX0KLQljYXNlIDk6IC8qIElfU0VUU0lHICovCi0JCXJldHVybiBzeXNfaW9jdGwoZmQsIEZJT1NFVE9XTiwgY3VycmVudC0+cGlkKTsKLQljYXNlIDEwOiAvKiBJX0dFVFNJRyAqLwotCQlvbGRfZnMgPSBnZXRfZnMoKTsKLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCXN5c19pb2N0bChmZCwgRklPR0VUT1dOLCAodW5zaWduZWQgbG9uZykmcmV0KTsKLQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCWlmIChyZXQgPT0gY3VycmVudC0+cGlkKSByZXR1cm4gMHgzZmY7Ci0JCWVsc2UgcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSAxMTogLyogSV9GSU5EICovCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgaTsKLQkJcCA9IGdldG5hbWUgKEEoYXJnKSk7Ci0JCWlmIChJU19FUlIgKHApKQotCQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gMDsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc29jay0+bW9kY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbSA9IHNvY2stPm1vZHVsZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAobW9kdWxlX3RhYmxlW21dLm5hbWUsIHApID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIH0KLQkJcHV0bmFtZSAocCk7Ci0JCXJldHVybiByZXQ7Ci0gICAgICAgIH0KLQljYXNlIDE5OiAvKiBJX1NXUk9QVCAqLwotCWNhc2UgMzI6IC8qIElfU0VUQ0xUSU1FICovCi0JCXJldHVybiAwOwkvKiBMaWUgKi8KLQl9Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNvbGFyaXNfcyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHUzMiBhcmcpCi17Ci0Jc3dpdGNoIChjbWQgJiAweGZmKSB7Ci0JY2FzZSAwOiAvKiBTSU9DU0hJV0FUICovCi0JY2FzZSAyOiAvKiBTSU9DU0xPV0FUICovCi0JCXJldHVybiAwOyAvKiBXZSBkb24ndCBzdXBwb3J0IHRoZW0gKi8KLQljYXNlIDE6IC8qIFNJT0NHSElXQVQgKi8KLQljYXNlIDM6IC8qIFNJT0NHTE9XQVQgKi8KLQkJaWYgKHB1dF91c2VyICgwLCAodTMyIF9fdXNlciAqKUEoYXJnKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7IC8qIExpZSAqLwotCWNhc2UgNzogLyogU0lPQ0FUTUFSSyAqLwotCQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBTSU9DQVRNQVJLLCBhcmcpOwotCWNhc2UgODogLyogU0lPQ1NQR1JQICovCi0JCXJldHVybiBzeXNfaW9jdGwoZmQsIFNJT0NTUEdSUCwgYXJnKTsKLQljYXNlIDk6IC8qIFNJT0NHUEdSUCAqLwotCQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBTSU9DR1BHUlAsIGFyZyk7Ci0JfQotCXJldHVybiAtRU5PU1lTOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzb2xhcmlzX3IodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKQotewotCXN3aXRjaCAoY21kICYgMHhmZikgewotCWNhc2UgMTA6IC8qIFNJT0NBRERSVCAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0FERFJULCBhcmcpOwotCWNhc2UgMTE6IC8qIFNJT0NERUxSVCAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0RFTFJULCBhcmcpOwotCX0KLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc29sYXJpc19pKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdTMyIGFyZykKLXsKLQlzd2l0Y2ggKGNtZCAmIDB4ZmYpIHsKLQljYXNlIDEyOiAvKiBTSU9DU0lGQUREUiAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ1NJRkFERFIsIGFyZyk7Ci0JY2FzZSAxMzogLyogU0lPQ0dJRkFERFIgKi8KLQkJcmV0dXJuIGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZBRERSLCBhcmcpOwotCWNhc2UgMTQ6IC8qIFNJT0NTSUZEU1RBRERSICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0lGRFNUQUREUiwgYXJnKTsKLQljYXNlIDE1OiAvKiBTSU9DR0lGRFNUQUREUiAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0dJRkRTVEFERFIsIGFyZyk7Ci0JY2FzZSAxNjogLyogU0lPQ1NJRkZMQUdTICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0lGRkxBR1MsIGFyZyk7Ci0JY2FzZSAxNzogLyogU0lPQ0dJRkZMQUdTICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DR0lGRkxBR1MsIGFyZyk7Ci0JY2FzZSAxODogLyogU0lPQ1NJRk1FTSAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ1NJRk1FTSwgYXJnKTsKLQljYXNlIDE5OiAvKiBTSU9DR0lGTUVNICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DR0lGTUVNLCBhcmcpOwotCWNhc2UgMjA6IC8qIFNJT0NHSUZDT05GICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DR0lGQ09ORiwgYXJnKTsKLQljYXNlIDIxOiAvKiBTSU9DU0lGTVRVICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0lGTVRVLCBhcmcpOwotCWNhc2UgMjI6IC8qIFNJT0NHSUZNVFUgKi8KLQkJcmV0dXJuIGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZNVFUsIGFyZyk7Ci0JY2FzZSAyMzogLyogU0lPQ0dJRkJSREFERFIgKi8KLQkJcmV0dXJuIGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZCUkRBRERSLCBhcmcpOwotCWNhc2UgMjQ6IC8qIFNJT0NTSUZCUkRBRERSICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DU0lGQlJEQUREUiwgYXJnKTsKLQljYXNlIDI1OiAvKiBTSU9DR0lGTkVUTUFTSyAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ0dJRk5FVE1BU0ssIGFyZyk7Ci0JY2FzZSAyNjogLyogU0lPQ1NJRk5FVE1BU0sgKi8KLQkJcmV0dXJuIGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NTSUZORVRNQVNLLCBhcmcpOwotCWNhc2UgMjc6IC8qIFNJT0NHSUZNRVRSSUMgKi8KLQkJcmV0dXJuIGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHSUZNRVRSSUMsIGFyZyk7Ci0JY2FzZSAyODogLyogU0lPQ1NJRk1FVFJJQyAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ1NJRk1FVFJJQywgYXJnKTsKLQljYXNlIDMwOiAvKiBTSU9DU0FSUCAqLwotCQlyZXR1cm4gY29tcGF0X3N5c19pb2N0bChmZCwgU0lPQ1NBUlAsIGFyZyk7Ci0JY2FzZSAzMTogLyogU0lPQ0dBUlAgKi8KLQkJcmV0dXJuIGNvbXBhdF9zeXNfaW9jdGwoZmQsIFNJT0NHQVJQLCBhcmcpOwotCWNhc2UgMzI6IC8qIFNJT0NEQVJQICovCi0JCXJldHVybiBjb21wYXRfc3lzX2lvY3RsKGZkLCBTSU9DREFSUCwgYXJnKTsKLQljYXNlIDUyOiAvKiBTSU9DR0VUTkFNRSAqLwotCWNhc2UgNTM6IC8qIFNJT0NHRVRQRUVSICovCi0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkciB1YWRkcjsKLQkJCWludCB1YWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSwgcmV0OwotCQkJbG9uZyBhcmdzWzNdOwotCQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCQkJaW50ICgqc3lzX3NvY2tldGNhbGwpKGludCwgdW5zaWduZWQgbG9uZyAqKSA9Ci0JCQkJKGludCAoKikoaW50LCB1bnNpZ25lZCBsb25nICopKVNZUyhzb2NrZXRjYWxsKTsKLQkJCQotCQkJYXJnc1swXSA9IGZkOyBhcmdzWzFdID0gKGxvbmcpJnVhZGRyOyBhcmdzWzJdID0gKGxvbmcpJnVhZGRyX2xlbjsKLQkJCXNldF9mcyhLRVJORUxfRFMpOwotCQkJcmV0ID0gc3lzX3NvY2tldGNhbGwoKChjbWQgJiAweGZmKSA9PSA1MikgPyBTWVNfR0VUU09DS05BTUUgOiBTWVNfR0VUUEVFUk5BTUUsCi0JCQkJCWFyZ3MpOwotCQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCQlpZiAocmV0ID49IDApIHsKLQkJCQlpZiAoY29weV90b191c2VyKEEoYXJnKSwgJnVhZGRyLCB1YWRkcl9sZW4pKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCXJldHVybiByZXQ7Ci0JCX0KLSNpZiAwCQkKLQljYXNlIDg2OiAvKiBTSU9DU09DS1NZUyAqLwotCQlyZXR1cm4gc29ja3N5c19zeXNjYWxsKGZkLCBhcmcpOwotI2VuZGlmCQkKLQljYXNlIDg3OiAvKiBTSU9DR0lGTlVNICovCi0JCXsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkOwotCQkJaW50IGkgPSAwOwotCQkJCi0JCQlyZWFkX2xvY2tfYmgoJmRldl9iYXNlX2xvY2spOwotCQkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZCkKLQkJCQlpKys7Ci0JCQlyZWFkX3VubG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7Ci0KLQkJCWlmIChwdXRfdXNlciAoaSwgKGludCBfX3VzZXIgKilBKGFyZykpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbnQgc29sYXJpc19tKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdTMyIGFyZykKLXsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoIChjbWQgJiAweGZmKSB7Ci0JY2FzZSAxOiAvKiBNVElPQ1RPUCAqLwotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIE1USU9DVE9QLCAodW5zaWduZWQgbG9uZykmYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOiAvKiBNVElPQ0dFVCAqLwotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIE1USU9DR0VULCAodW5zaWduZWQgbG9uZykmYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOiAvKiBNVElPQ0dFVERSSVZFVFlQRSAqLwotCWNhc2UgNDogLyogTVRJT0NQRVJTSVNURU5UICovCi0JY2FzZSA1OiAvKiBNVElPQ1BFUlNJU1RFTlRTVEFUVVMgKi8KLQljYXNlIDY6IC8qIE1USU9DTFJFUlIgKi8KLQljYXNlIDc6IC8qIE1USU9DR1VBUkFOVEVFRE9SREVSICovCi0JY2FzZSA4OiAvKiBNVElPQ1JFU0VSVkUgKi8KLQljYXNlIDk6IC8qIE1USU9DUkVMRUFTRSAqLwotCWNhc2UgMTA6IC8qIE1USU9DRk9SQ0VSRVNFUlZFICovCi0JY2FzZSAxMzogLyogTVRJT0NTVEFURSAqLwotCWNhc2UgMTQ6IC8qIE1USU9DUkVBRElHTk9SRUlMSSAqLwotCWNhc2UgMTU6IC8qIE1USU9DUkVBRElHTk9SRUVPRlMgKi8KLQljYXNlIDE2OiAvKiBNVElPQ1NIT1JURk1LICovCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT1NZUzsgLyogbGludXggZG9lc24ndCBzdXBwb3J0IHRoZXNlICovCi0JCWJyZWFrOwotCX07Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHNvbGFyaXNfTyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHUzMiBhcmcpCi17Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKGNtZCAmIDB4ZmYpIHsKLQljYXNlIDE6IC8qIE9QUk9NR0VUT1BUICovCi0JCXJldCA9IHN5c19pb2N0bChmZCwgT1BST01HRVRPUFQsIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgMjogLyogT1BST01TRVRPUFQgKi8KLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBPUFJPTVNFVE9QVCwgYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOiAvKiBPUFJPTU5YVE9QVCAqLwotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIE9QUk9NTlhUT1BULCBhcmcpOwotCQlicmVhazsKLQljYXNlIDQ6IC8qIE9QUk9NU0VUT1BUMiAqLwotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIE9QUk9NU0VUT1BUMiwgYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSA1OiAvKiBPUFJPTU5FWFQgKi8KLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBPUFJPTU5FWFQsIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgNjogLyogT1BST01DSElMRCAqLwotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIE9QUk9NQ0hJTEQsIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgNzogLyogT1BST01HRVRQUk9QICovCi0JCXJldCA9IHN5c19pb2N0bChmZCwgT1BST01HRVRQUk9QLCBhcmcpOwotCQlicmVhazsKLQljYXNlIDg6IC8qIE9QUk9NTlhUUFJPUCAqLwotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIE9QUk9NTlhUUFJPUCwgYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSA5OiAvKiBPUFJPTVUyUCAqLwotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIE9QUk9NVTJQLCBhcmcpOwotCQlicmVhazsKLQljYXNlIDEwOiAvKiBPUFJPTUdFVENPTlMgKi8KLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBPUFJPTUdFVENPTlMsIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgMTE6IC8qIE9QUk9NR0VURkJOQU1FICovCi0JCXJldCA9IHN5c19pb2N0bChmZCwgT1BST01HRVRGQk5BTUUsIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgMTI6IC8qIE9QUk9NR0VUQk9PVEFSR1MgKi8KLQkJcmV0ID0gc3lzX2lvY3RsKGZkLCBPUFJPTUdFVEJPT1RBUkdTLCBhcmcpOwotCQlicmVhazsKLQljYXNlIDEzOiAvKiBPUFJPTUdFVFZFUlNJT04gKi8KLQljYXNlIDE0OiAvKiBPUFJPTVBBVEgyRFJWICovCi0JY2FzZSAxNTogLyogT1BST01ERVYyUFJPTU5BTUUgKi8KLQljYXNlIDE2OiAvKiBPUFJPTVBST00yREVWTkFNRSAqLwotCWNhc2UgMTc6IC8qIE9QUk9NR0VUUFJPUExFTiAqLwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX07Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogfX19ICovCi0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKQotewotCXN0cnVjdCBmaWxlICpmaWxwOwotCWludCBlcnJvciA9IC1FQkFERjsKLQotCWZpbHAgPSBmZ2V0KGZkKTsKLQlpZiAoIWZpbHApCi0JCWdvdG8gb3V0OwotCi0JbG9ja19rZXJuZWwoKTsKLQllcnJvciA9IC1FRkFVTFQ7Ci0Jc3dpdGNoICgoY21kID4+IDgpICYgMHhmZikgewotCWNhc2UgJ1MnOiBlcnJvciA9IHNvbGFyaXNfUyhmaWxwLCBmZCwgY21kLCBhcmcpOyBicmVhazsKLQljYXNlICdUJzogZXJyb3IgPSBzb2xhcmlzX1QoZmQsIGNtZCwgYXJnKTsgYnJlYWs7Ci0JY2FzZSAnaSc6IGVycm9yID0gc29sYXJpc19pKGZkLCBjbWQsIGFyZyk7IGJyZWFrOwotCWNhc2UgJ3InOiBlcnJvciA9IHNvbGFyaXNfcihmZCwgY21kLCBhcmcpOyBicmVhazsKLQljYXNlICdzJzogZXJyb3IgPSBzb2xhcmlzX3MoZmQsIGNtZCwgYXJnKTsgYnJlYWs7Ci0JY2FzZSAndCc6IGVycm9yID0gc29sYXJpc190KGZkLCBjbWQsIGFyZyk7IGJyZWFrOwotCWNhc2UgJ2YnOiBlcnJvciA9IHN5c19pb2N0bChmZCwgY21kLCBhcmcpOyBicmVhazsKLQljYXNlICdtJzogZXJyb3IgPSBzb2xhcmlzX20oZmQsIGNtZCwgYXJnKTsgYnJlYWs7Ci0JY2FzZSAnTyc6IGVycm9yID0gc29sYXJpc19PKGZkLCBjbWQsIGFyZyk7IGJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVycm9yID0gLUVOT1NZUzsKLQkJYnJlYWs7Ci0JfQotCXVubG9ja19rZXJuZWwoKTsKLQlmcHV0KGZpbHApOwotb3V0OgotCWlmIChlcnJvciA9PSAtRU5PU1lTKSB7Ci0JCXVuc2lnbmVkIGNoYXIgYyA9IGNtZD4+ODsKLQkJCi0JCWlmIChjIDwgJyAnIHx8IGMgPiAxMjYpIGMgPSAnLic7Ci0JCXByaW50aygic29sYXJpc19pb2N0bDogVW5rbm93biBjbWQgZmQoJWQpIGNtZCglMDh4ICclYycpIGFyZyglMDh4KVxuIiwKLQkJICAgICAgIChpbnQpZmQsICh1bnNpZ25lZCBpbnQpY21kLCBjLCAodW5zaWduZWQgaW50KWFyZyk7Ci0JCWVycm9yID0gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvaXBjLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9pcGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk5MTM1Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9pcGMuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKiAkSWQ6IGlwYy5jLHYgMS41IDE5OTkvMTIvMDkgMDA6NDE6MDAgZGF2ZW0gRXhwICQKLSAqIGlwYy5jOiBTb2xhcmlzIElQQyBlbXVsYXRpb24KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaG0uaD4KLSNpbmNsdWRlIDxsaW51eC9zZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tc2cuaD4KLSNpbmNsdWRlIDxsaW51eC9pcGMuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3N0cmluZy5oPgotCi0jaW5jbHVkZSAiY29udi5oIgotCi1zdHJ1Y3Qgc29sYXJpc19pcGNfcGVybSB7Ci0JczMyCXVpZDsKLQlzMzIJZ2lkOwotCXMzMgljdWlkOwotCXMzMgljZ2lkOwotCXUzMgltb2RlOwotCXUzMglzZXE7Ci0JaW50CWtleTsKLQlzMzIJcGFkWzRdOwotfTsKLQotc3RydWN0IHNvbGFyaXNfc2htaWRfZHMgewotCXN0cnVjdCBzb2xhcmlzX2lwY19wZXJtCXNobV9wZXJtOwotCWludAkJCXNobV9zZWdzejsKLQl1MzIJCQlzaG1fYW1wOwotCXVuc2lnbmVkIHNob3J0CQlzaG1fbGtjbnQ7Ci0JY2hhcgkJCV9fcGFkeHhbMl07Ci0JczMyCQkJc2htX2xwaWQ7Ci0JczMyCQkJc2htX2NwaWQ7Ci0JdTMyCQkJc2htX25hdHRjaDsKLQl1MzIJCQlzaG1fY25hdHRjaDsKLQlzMzIJCQlzaG1fYXRpbWU7Ci0JczMyCQkJc2htX3BhZDE7Ci0JczMyCQkJc2htX2R0aW1lOwotCXMzMgkJCXNobV9wYWQyOwotCXMzMgkJCXNobV9jdGltZTsKLQlzMzIJCQlzaG1fcGFkMzsKLQl1bnNpZ25lZCBzaG9ydAkJc2htX2N2OwotCWNoYXIJCQlzaG1fcGFkNFsyXTsKLQl1MzIJCQlzaG1fc3B0YXM7Ci0JczMyCQkJc2htX3BhZDVbMl07Ci19OwotCi1hc21saW5rYWdlIGxvbmcgc29sYXJpc19zaG1zeXMoaW50IGNtZCwgdTMyIGFyZzEsIHUzMiBhcmcyLCB1MzIgYXJnMykKLXsKLQlpbnQgKCpzeXNfaXBjKSh1bnNpZ25lZCxpbnQsaW50LHVuc2lnbmVkIGxvbmcsdm9pZCBfX3VzZXIgKixsb25nKSA9IAotCQkoaW50ICgqKSh1bnNpZ25lZCxpbnQsaW50LHVuc2lnbmVkIGxvbmcsdm9pZCBfX3VzZXIgKixsb25nKSlTWVMoaXBjKTsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzOwotCXVuc2lnbmVkIGxvbmcgcmFkZHI7Ci0JaW50IHJldDsKLQkJCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6IC8qIHNobWF0ICovCi0JCW9sZF9mcyA9IGdldF9mcygpOwotCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJcmV0ID0gc3lzX2lwYyhTSE1BVCwgYXJnMSwgYXJnMyAmIH4weDQwMDAsICh1bnNpZ25lZCBsb25nKSZyYWRkciwgQShhcmcyKSwgMCk7Ci0JCXNldF9mcyhvbGRfZnMpOwotCQlpZiAocmV0ID49IDApIHJldHVybiAodTMyKXJhZGRyOwotCQllbHNlIHJldHVybiByZXQ7Ci0JY2FzZSAxOiAvKiBzaG1jdGwgKi8KLQkJc3dpdGNoIChhcmcyKSB7Ci0JCWNhc2UgMzogLyogU0hNX0xPQ0sgKi8KLQkJY2FzZSA0OiAvKiBTSE1fVU5MT0NLICovCi0JCQlyZXR1cm4gc3lzX2lwYyhTSE1DVEwsIGFyZzEsIChhcmcyID09IDMpID8gU0hNX0xPQ0sgOiBTSE1fVU5MT0NLLCAwLCBOVUxMLCAwKTsKLQkJY2FzZSAxMDogLyogSVBDX1JNSUQgKi8KLQkJCXJldHVybiBzeXNfaXBjKFNITUNUTCwgYXJnMSwgSVBDX1JNSUQsIDAsIE5VTEwsIDApOwotCQljYXNlIDExOiAvKiBJUENfU0VUICovCi0JCQl7Ci0JCQkJc3RydWN0IHNobWlkX2RzIHM7Ci0JCQkJc3RydWN0IHNvbGFyaXNfc2htaWRfZHMgX191c2VyICpwID0gQShhcmczKTsKLQkJCQkKLQkJCQlpZiAoZ2V0X3VzZXIgKHMuc2htX3Blcm0udWlkLCAmcC0+c2htX3Blcm0udWlkKSB8fAotCQkJCSAgICBfX2dldF91c2VyIChzLnNobV9wZXJtLmdpZCwgJnAtPnNobV9wZXJtLmdpZCkgfHwgCi0JCQkJICAgIF9fZ2V0X3VzZXIgKHMuc2htX3Blcm0ubW9kZSwgJnAtPnNobV9wZXJtLm1vZGUpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlvbGRfZnMgPSBnZXRfZnMoKTsKLQkJCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJCQlyZXQgPSBzeXNfaXBjKFNITUNUTCwgYXJnMSwgSVBDX1NFVCwgMCwgJnMsIDApOwotCQkJCXNldF9mcyhvbGRfZnMpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCWNhc2UgMTI6IC8qIElQQ19TVEFUICovCi0JCQl7Ci0JCQkJc3RydWN0IHNobWlkX2RzIHM7Ci0JCQkJc3RydWN0IHNvbGFyaXNfc2htaWRfZHMgX191c2VyICpwID0gQShhcmczKTsKLQkJCQkKLQkJCQlvbGRfZnMgPSBnZXRfZnMoKTsKLQkJCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJCQlyZXQgPSBzeXNfaXBjKFNITUNUTCwgYXJnMSwgSVBDX1NFVCwgMCwgJnMsIDApOwotCQkJCXNldF9mcyhvbGRfZnMpOwotCQkJCWlmIChwdXRfdXNlciAocy5zaG1fcGVybS51aWQsICYocC0+c2htX3Blcm0udWlkKSkgfHwKLQkJCQkgICAgX19wdXRfdXNlciAocy5zaG1fcGVybS5naWQsICYocC0+c2htX3Blcm0uZ2lkKSkgfHwgCi0JCQkJICAgIF9fcHV0X3VzZXIgKHMuc2htX3Blcm0uY3VpZCwgJihwLT5zaG1fcGVybS5jdWlkKSkgfHwKLQkJCQkgICAgX19wdXRfdXNlciAocy5zaG1fcGVybS5jZ2lkLCAmKHAtPnNobV9wZXJtLmNnaWQpKSB8fCAKLQkJCQkgICAgX19wdXRfdXNlciAocy5zaG1fcGVybS5tb2RlLCAmKHAtPnNobV9wZXJtLm1vZGUpKSB8fAotCQkJCSAgICBfX3B1dF91c2VyIChzLnNobV9wZXJtLnNlcSwgJihwLT5zaG1fcGVybS5zZXEpKSB8fAotCQkJCSAgICBfX3B1dF91c2VyIChzLnNobV9wZXJtLmtleSwgJihwLT5zaG1fcGVybS5rZXkpKSB8fAotCQkJCSAgICBfX3B1dF91c2VyIChzLnNobV9zZWdzeiwgJihwLT5zaG1fc2Vnc3opKSB8fAotCQkJCSAgICBfX3B1dF91c2VyIChzLnNobV9scGlkLCAmKHAtPnNobV9scGlkKSkgfHwKLQkJCQkgICAgX19wdXRfdXNlciAocy5zaG1fY3BpZCwgJihwLT5zaG1fY3BpZCkpIHx8Ci0JCQkJICAgIF9fcHV0X3VzZXIgKHMuc2htX25hdHRjaCwgJihwLT5zaG1fbmF0dGNoKSkgfHwKLQkJCQkgICAgX19wdXRfdXNlciAocy5zaG1fYXRpbWUsICYocC0+c2htX2F0aW1lKSkgfHwKLQkJCQkgICAgX19wdXRfdXNlciAocy5zaG1fZHRpbWUsICYocC0+c2htX2R0aW1lKSkgfHwKLQkJCQkgICAgX19wdXRfdXNlciAocy5zaG1fY3RpbWUsICYocC0+c2htX2N0aW1lKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOwotCQl9Ci0JY2FzZSAyOiAvKiBzaG1kdCAqLwotCQlyZXR1cm4gc3lzX2lwYyhTSE1EVCwgMCwgMCwgMCwgQShhcmcxKSwgMCk7Ci0JY2FzZSAzOiAvKiBzaG1nZXQgKi8KLQkJcmV0dXJuIHN5c19pcGMoU0hNR0VULCBhcmcxLCBhcmcyLCBhcmczLCBOVUxMLCAwKTsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZTQ4ZTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzg2ICswLDAgQEAKLS8qICRJZDogbWlzYy5jLHYgMS4zNiAyMDAyLzAyLzA5IDE5OjQ5OjMxIGRhdmVtIEV4cCAkCi0gKiBtaXNjLmM6IE1pc2NlbGxhbmVvdXMgc3lzY2FsbCBlbXVsYXRpb24gZm9yIFNvbGFyaXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4gCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLQotI2luY2x1ZGUgImNvbnYuaCIKLQotLyogQ29udmVyc2lvbiBmcm9tIExpbnV4IHRvIFNvbGFyaXMgZXJybm9zLiAwLTM0IGFyZSBpZGVudGl0eSBtYXBwZWQuCi0gICBTb21lIExpbnV4IGVycm5vcyAoRVBST0NMSU0sIEVET1RET1QsIEVSUkVNT1RFLCBFVUNMRUFOLCBFTk9UTkFNLCAKLSAgIEVOQVZBSUwsIEVJU05BTSwgRVJFTU9URUlPLCBFTk9NRURJVU0sIEVNRURJVU1UWVBFKSBoYXZlIG5vIFNvbGFyaXMKLSAgIGVxdWl2YWxlbnRzLiBJIHJldHVybiBFSU5WQUwgaW4gdGhhdCBjYXNlLCB3aGljaCBpcyB2ZXJ5IHdyb25nLiBJZgotICAgc29tZW9uZSBzdWdnZXN0IGEgYmV0dGVyIHZhbHVlIGZvciB0aGVtLCB5b3UncmUgd2VsY29tZWQuCi0gICBPbiB0aGUgb3RoZXIgc2lkZSwgU29sYXJpcyBFQ0FOQ0VMRUQgYW5kIEVOT1RTVVAgaGF2ZSBubyBMaW51eCBlcXVpdmFsZW50cywKLSAgIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGhlcmUuIC0tamogKi8KLWludCBzb2xhcmlzX2Vycl90YWJsZVtdID0gewotLyogMCAqLyAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKLS8qIDEwICovICAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwKLS8qIDIwICovICAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwKLS8qIDMwICovICAzMCwgMzEsIDMyLCAzMywgMzQsIDIyLCAxNTAsIDE0OSwgOTUsIDk2LAotLyogNDAgKi8gIDk3LCA5OCwgOTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgCi0vKiA1MCAqLyAxMjcsIDEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTQzLCAxNDQsCi0vKiA2MCAqLyAxNDUsIDE0NiwgOTAsIDc4LCAxNDcsIDE0OCwgOTMsIDIyLCA5NCwgNDksCi0vKiA3MCAqLyAxNTEsIDY2LCA2MCwgNjIsIDYzLCAzNSwgNzcsIDM2LCA0NSwgNDYsIAotLyogODAgKi8gNjQsIDIyLCA2NywgNjgsIDY5LCA3MCwgNzEsIDc0LCAyMiwgODIsIAotLyogOTAgKi8gODksIDkyLCA3OSwgODEsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsCi0vKiAxMDAgKi8gNDMsIDQ0LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsCi0vKiAxMTAgKi8gODcsIDYxLCA4NCwgNjUsIDgzLCA4MCwgOTEsIDIyLCAyMiwgMjIsCi0vKiAxMjAgKi8gMjIsIDIyLCA4OCwgODYsIDg1LCAyMiwgMjIsCi19OwotCi0jZGVmaW5lIFNPTEFSSVNfTlJfT1BFTgkyNTYKLQotc3RhdGljIHUzMiBkb19zb2xhcmlzX21tYXAodTMyIGFkZHIsIHUzMiBsZW4sIHUzMiBwcm90LCB1MzIgZmxhZ3MsIHUzMiBmZCwgdTY0IG9mZikKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyByZXR2YWwsIHJldF90eXBlOwotCi0JLyogRG8gd2UgbmVlZCBpdCBoZXJlPyAqLwotCXNldF9wZXJzb25hbGl0eShQRVJfU1ZSNCk7Ci0JaWYgKGZsYWdzICYgTUFQX05PUkVTRVJWRSkgewotCQlzdGF0aWMgaW50IGNudDsKLQkJCi0JCWlmIChjbnQgPCA1KSB7Ci0JCQlwcmludGsoIiVzOiAgdW5pbXBsZW1lbnRlZCBTb2xhcmlzIE1BUF9OT1JFU0VSVkUgbW1hcCgpIGZsYWdcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSk7Ci0JCQljbnQrKzsKLQkJfQotCQlmbGFncyAmPSB+TUFQX05PUkVTRVJWRTsKLQl9Ci0JcmV0dmFsID0gLUVCQURGOwotCWlmKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgewotCQlpZihmZCA+PSBTT0xBUklTX05SX09QRU4pCi0JCQlnb3RvIG91dDsKLSAJCWZpbGUgPSBmZ2V0KGZkKTsKLQkJaWYgKCFmaWxlKQotCQkJZ290byBvdXQ7Ci0JCWVsc2UgewotCQkJc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCQkJaWYoaW1ham9yKGlub2RlKSA9PSBNRU1fTUFKT1IgJiYKLQkJCSAgIGltaW5vcihpbm9kZSkgPT0gNSkgewotCQkJCWZsYWdzIHw9IE1BUF9BTk9OWU1PVVM7Ci0JCQkJZnB1dChmaWxlKTsKLQkJCQlmaWxlID0gTlVMTDsKLQkJCX0KLQkJfQotCX0KLQotCXJldHZhbCA9IC1FSU5WQUw7Ci0JbGVuID0gUEFHRV9BTElHTihsZW4pOwotCWlmKCEoZmxhZ3MgJiBNQVBfRklYRUQpKQotCQlhZGRyID0gMDsKLQllbHNlIGlmIChsZW4gPiBTVEFDS19UT1AzMiB8fCBhZGRyID4gU1RBQ0tfVE9QMzIgLSBsZW4pCi0JCWdvdG8gb3V0X3B1dGY7Ci0JcmV0X3R5cGUgPSBmbGFncyAmIF9NQVBfTkVXOwotCWZsYWdzICY9IH5fTUFQX05FVzsKLQotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUpOwotCXJldHZhbCA9IGRvX21tYXAoZmlsZSwKLQkJCSAodW5zaWduZWQgbG9uZykgYWRkciwgKHVuc2lnbmVkIGxvbmcpIGxlbiwKLQkJCSAodW5zaWduZWQgbG9uZykgcHJvdCwgKHVuc2lnbmVkIGxvbmcpIGZsYWdzLCBvZmYpOwotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWlmKCFyZXRfdHlwZSkKLQkJcmV0dmFsID0gKChyZXR2YWwgPCBTVEFDS19UT1AzMikgPyAwIDogcmV0dmFsKTsKLQkgICAgICAgICAgICAgICAgICAgICAgICAKLW91dF9wdXRmOgotCWlmIChmaWxlKQotCQlmcHV0KGZpbGUpOwotb3V0OgotCXJldHVybiAodTMyKSByZXR2YWw7Ci19Ci0KLWFzbWxpbmthZ2UgdTMyIHNvbGFyaXNfbW1hcCh1MzIgYWRkciwgdTMyIGxlbiwgdTMyIHByb3QsIHUzMiBmbGFncywgdTMyIGZkLCB1MzIgb2ZmKQotewotCXJldHVybiBkb19zb2xhcmlzX21tYXAoYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsICh1NjQpIG9mZik7Ci19Ci0KLWFzbWxpbmthZ2UgdTMyIHNvbGFyaXNfbW1hcDY0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgbGVuLCB1MzIgcHJvdCwgdTMyIGZsYWdzLCB1MzIgZmQsIHUzMiBvZmZoaSkKLXsKLQl1MzIgb2ZmbG87Ci0JCi0JaWYgKHJlZ3MtPnVfcmVnc1tVUkVHX0cxXSkgewotCQlpZiAoZ2V0X3VzZXIgKG9mZmxvLCAodTMyIF9fdXNlciAqKShsb25nKSgodTMyKXJlZ3MtPnVfcmVnc1tVUkVHX0k2XSArIDB4NWMpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCWlmIChnZXRfdXNlciAob2ZmbG8sICh1MzIgX191c2VyICopKGxvbmcpKCh1MzIpcmVncy0+dV9yZWdzW1VSRUdfSTZdICsgMHg2MCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiBkb19zb2xhcmlzX21tYXAoKHUzMilyZWdzLT51X3JlZ3NbVVJFR19JMF0sIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCAoKCh1NjQpb2ZmaGkpPDwzMil8b2ZmbG8pOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX2Jyayh1MzIgYnJrKQotewotCWludCAoKnN1bm9zX2JyaykodTMyKSA9IChpbnQgKCopKHUzMikpU1VOT1MoMTcpOwotCQotCXJldHVybiBzdW5vc19icmsoYnJrKTsKLX0KLQotc3RhdGljIGludCBfX3NldF91dHNmaWVsZChjaGFyIF9fdXNlciAqdG8sIGludCB0b19zaXplLAotCQkJICBjb25zdCBjaGFyICpmcm9tLCBpbnQgZnJvbV9zaXplLAotCQkJICBpbnQgZG90Y2hvcCwgaW50IGNvdW50ZnJvbSkKLXsKLQlpbnQgbGVuID0gY291bnRmcm9tID8gKHRvX3NpemUgPiBmcm9tX3NpemUgPwotCQkJICAgICAgIGZyb21fc2l6ZSA6IHRvX3NpemUpIDogdG9fc2l6ZTsKLQlpbnQgb2ZmOwotCi0JaWYgKGNvcHlfdG9fdXNlcih0bywgZnJvbSwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlvZmYgPSBsZW4gPCB0b19zaXplPyBsZW46IGxlbiAtIDE7Ci0JaWYgKGRvdGNob3ApIHsKLQkJY29uc3QgY2hhciAqcCA9IHN0cm5jaHIoZnJvbSwgbGVuLCAnLicpOwotCQlpZiAocCkgb2ZmID0gcCAtIGZyb207Ci0JfQotCi0JaWYgKF9fcHV0X3VzZXIoJ1wwJywgdG8gKyBvZmYpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHNldF91dHNmaWVsZCh0bywgZnJvbSwgZG90Y2hvcCwgY291bnRmcm9tKSBcCi0JX19zZXRfdXRzZmllbGQoKHRvKSwgc2l6ZW9mKHRvKSwgXAotCQkgICAgICAgKGZyb20pLCBzaXplb2YoZnJvbSksIFwKLQkJICAgICAgIChkb3RjaG9wKSwgKGNvdW50ZnJvbSkpCi0KLXN0cnVjdCBzb2xfdW5hbWUgewotCWNoYXIgc3lzbmFtZVs5XTsKLQljaGFyIG5vZGVuYW1lWzldOwotCWNoYXIgcmVsZWFzZVs5XTsKLQljaGFyIHZlcnNpb25bOV07Ci0JY2hhciBtYWNoaW5lWzldOwotfTsKLQotc3RydWN0IHNvbF91dHNuYW1lIHsKLQljaGFyIHN5c25hbWVbMjU3XTsKLQljaGFyIG5vZGVuYW1lWzI1N107Ci0JY2hhciByZWxlYXNlWzI1N107Ci0JY2hhciB2ZXJzaW9uWzI1N107Ci0JY2hhciBtYWNoaW5lWzI1N107Ci19OwotCi1zdGF0aWMgY2hhciAqbWFjaGluZSh2b2lkKQotewotCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKSB7Ci0JY2FzZSBzdW40OiByZXR1cm4gInN1bjQiOwotCWNhc2Ugc3VuNGM6IHJldHVybiAic3VuNGMiOwotCWNhc2Ugc3VuNGU6IHJldHVybiAic3VuNGUiOwotCWNhc2Ugc3VuNG06IHJldHVybiAic3VuNG0iOwotCWNhc2Ugc3VuNGQ6IHJldHVybiAic3VuNGQiOwotCWNhc2Ugc3VuNHU6IHJldHVybiAic3VuNHUiOwotCWRlZmF1bHQ6IHJldHVybiAic3BhcmMiOwotCX0KLX0KLQotc3RhdGljIGNoYXIgKnBsYXRmb3JtKGNoYXIgKmJ1ZmZlciwgaW50IHN6KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCWludCBsZW47Ci0KLQkqYnVmZmVyID0gMDsKLQlsZW4gPSBzdHJsZW4oZHAtPm5hbWUpOwotCWlmIChsZW4gPiBzeikKLQkJbGVuID0gc3o7Ci0JbWVtY3B5KGJ1ZmZlciwgZHAtPm5hbWUsIGxlbik7Ci0JYnVmZmVyW2xlbl0gPSAwOwotCWlmICgqYnVmZmVyKSB7Ci0JCWNoYXIgKnA7Ci0KLQkJZm9yIChwID0gYnVmZmVyOyAqcDsgcCsrKQotCQkJaWYgKCpwID09ICcvJyB8fCAqcCA9PSAnICcpICpwID0gJ18nOwotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXJldHVybiAic3VuNHUiOwotfQotCi1zdGF0aWMgY2hhciAqc2VyaWFsKGNoYXIgKmJ1ZmZlciwgaW50IHN6KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL29wdGlvbnMiKTsKLQlpbnQgbGVuOwotCi0JKmJ1ZmZlciA9IDA7Ci0JaWYgKGRwKSB7Ci0JCWNvbnN0IGNoYXIgKnZhbCA9Ci0JCQlvZl9nZXRfcHJvcGVydHkoZHAsICJzeXN0ZW0tYm9hcmQtc2VyaWFsIyIsICZsZW4pOwotCi0JCWlmICh2YWwgJiYgbGVuID4gMCkgewotCQkJaWYgKGxlbiA+IHN6KQotCQkJCWxlbiA9IHN6OwotCQkJbWVtY3B5KGJ1ZmZlciwgdmFsLCBsZW4pOwotCQkJYnVmZmVyW2xlbl0gPSAwOwotCQl9Ci0JfQotCWlmICghKmJ1ZmZlcikKLQkJcmV0dXJuICI0NTEyMzQ4NzE3MjM0IjsKLQllbHNlCi0JCXJldHVybiBidWZmZXI7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfdXRzc3lzKHUzMiBidWYsIHUzMiBmbGFncywgaW50IHdoaWNoLCB1MzIgYnVmMikKLXsKLQlzdHJ1Y3Qgc29sX3VuYW1lIF9fdXNlciAqdiA9IEEoYnVmKTsKLQlpbnQgZXJyOwotCi0Jc3dpdGNoICh3aGljaCkgewotCWNhc2UgMDoJLyogb2xkIHVuYW1lICovCi0JCS8qIExldCdzIGNoZWF0ICovCi0JCWVyciAgPSBzZXRfdXRzZmllbGQodi0+c3lzbmFtZSwgIlN1bk9TIiwgMSwgMCk7Ci0JCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JCWVyciB8PSBzZXRfdXRzZmllbGQodi0+bm9kZW5hbWUsIHV0c25hbWUoKS0+bm9kZW5hbWUsCi0JCQkJICAgIDEsIDEpOwotCQl1cF9yZWFkKCZ1dHNfc2VtKTsKLQkJZXJyIHw9IHNldF91dHNmaWVsZCh2LT5yZWxlYXNlLCAiMi42IiwgMCwgMCk7Ci0JCWVyciB8PSBzZXRfdXRzZmllbGQodi0+dmVyc2lvbiwgIkdlbmVyaWMiLCAwLCAwKTsKLQkJZXJyIHw9IHNldF91dHNmaWVsZCh2LT5tYWNoaW5lLCBtYWNoaW5lKCksIDAsIDApOwotCQlyZXR1cm4gKGVyciA/IC1FRkFVTFQgOiAwKTsKLQljYXNlIDI6IC8qIHVzdGF0ICovCi0JCXJldHVybiAtRU5PU1lTOwotCWNhc2UgMzogLyogZnVzZXJzICovCi0JCXJldHVybiAtRU5PU1lTOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PU1lTOwotCX0KLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc191dHNuYW1lKHUzMiBidWYpCi17Ci0Jc3RydWN0IHNvbF91dHNuYW1lIF9fdXNlciAqdiA9IEEoYnVmKTsKLQlpbnQgZXJyOwotCi0JLyogV2h5IHNob3VsZCB3ZSBub3QgbGllIGEgYml0PyAqLwotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JZXJyICA9IHNldF91dHNmaWVsZCh2LT5zeXNuYW1lLCAiU3VuT1MiLCAwLCAwKTsKLQllcnIgfD0gc2V0X3V0c2ZpZWxkKHYtPm5vZGVuYW1lLCB1dHNuYW1lKCktPm5vZGVuYW1lLCAxLCAxKTsKLQllcnIgfD0gc2V0X3V0c2ZpZWxkKHYtPnJlbGVhc2UsICI1LjYiLCAwLCAwKTsKLQllcnIgfD0gc2V0X3V0c2ZpZWxkKHYtPnZlcnNpb24sICJHZW5lcmljIiwgMCwgMCk7Ci0JZXJyIHw9IHNldF91dHNmaWVsZCh2LT5tYWNoaW5lLCBtYWNoaW5lKCksIDAsIDApOwotCXVwX3JlYWQoJnV0c19zZW0pOwotCi0JcmV0dXJuIChlcnIgPyAtRUZBVUxUIDogMCk7Ci19Ci0KLSNkZWZpbmUgU0lfU1lTTkFNRQkJMSAgICAgICAvKiByZXR1cm4gbmFtZSBvZiBvcGVyYXRpbmcgc3lzdGVtICovCi0jZGVmaW5lIFNJX0hPU1ROQU1FCQkyICAgICAgIC8qIHJldHVybiBuYW1lIG9mIG5vZGUgKi8KLSNkZWZpbmUgU0lfUkVMRUFTRQkJMyAgICAgICAvKiByZXR1cm4gcmVsZWFzZSBvZiBvcGVyYXRpbmcgc3lzdGVtICovCi0jZGVmaW5lIFNJX1ZFUlNJT04JCTQgICAgICAgLyogcmV0dXJuIHZlcnNpb24gZmllbGQgb2YgdXRzbmFtZSAqLwotI2RlZmluZSBTSV9NQUNISU5FCQk1ICAgICAgIC8qIHJldHVybiBraW5kIG9mIG1hY2hpbmUgKi8KLSNkZWZpbmUgU0lfQVJDSElURUNUVVJFCQk2ICAgICAgIC8qIHJldHVybiBpbnN0cnVjdGlvbiBzZXQgYXJjaCAqLwotI2RlZmluZSBTSV9IV19TRVJJQUwJCTcgICAgICAgLyogcmV0dXJuIGhhcmR3YXJlIHNlcmlhbCBudW1iZXIgKi8KLSNkZWZpbmUgU0lfSFdfUFJPVklERVIJCTggICAgICAgLyogcmV0dXJuIGhhcmR3YXJlIG1hbnVmYWN0dXJlciAqLwotI2RlZmluZSBTSV9TUlBDX0RPTUFJTgkJOSAgICAgICAvKiByZXR1cm4gc2VjdXJlIFJQQyBkb21haW4gKi8KLSNkZWZpbmUgU0lfUExBVEZPUk0JCTUxMyAgICAgLyogcmV0dXJuIHBsYXRmb3JtIGlkZW50aWZpZXIgKi8KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19zeXNpbmZvKGludCBjbWQsIHUzMiBidWYsIHMzMiBjb3VudCkKLXsKLQljaGFyICpwLCAqcSwgKnI7Ci0JY2hhciBidWZmZXJbMjU2XTsKLQlpbnQgbGVuOwotCQotCS8qIEFnYWluLCB3ZSBjaGVhdCA6KSkgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0lfU1lTTkFNRTogciA9ICJTdW5PUyI7IGJyZWFrOwotCWNhc2UgU0lfSE9TVE5BTUU6Ci0JCXIgPSBidWZmZXIgKyAyNTY7Ci0JCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JCWZvciAocCA9IHV0c25hbWUoKS0+bm9kZW5hbWUsIHEgPSBidWZmZXI7Ci0JCSAgICAgcSA8IHIgJiYgKnAgJiYgKnAgIT0gJy4nOyAqcSsrID0gKnArKyk7Ci0JCXVwX3JlYWQoJnV0c19zZW0pOwotCQkqcSA9IDA7Ci0JCXIgPSBidWZmZXI7Ci0JCWJyZWFrOwotCWNhc2UgU0lfUkVMRUFTRTogciA9ICI1LjYiOyBicmVhazsKLQljYXNlIFNJX01BQ0hJTkU6IHIgPSBtYWNoaW5lKCk7IGJyZWFrOwotCWNhc2UgU0lfQVJDSElURUNUVVJFOiByID0gInNwYXJjIjsgYnJlYWs7Ci0JY2FzZSBTSV9IV19QUk9WSURFUjogciA9ICJTdW5fTWljcm9zeXN0ZW1zIjsgYnJlYWs7Ci0JY2FzZSBTSV9IV19TRVJJQUw6IHIgPSBzZXJpYWwoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7IGJyZWFrOwotCWNhc2UgU0lfUExBVEZPUk06IHIgPSBwbGF0Zm9ybShidWZmZXIsIHNpemVvZihidWZmZXIpKTsgYnJlYWs7Ci0JY2FzZSBTSV9TUlBDX0RPTUFJTjogciA9ICIiOyBicmVhazsKLQljYXNlIFNJX1ZFUlNJT046IHIgPSAiR2VuZXJpYyI7IGJyZWFrOwotCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOwotCX0KLQlsZW4gPSBzdHJsZW4ocikgKyAxOwotCWlmIChjb3VudCA8IGxlbikgewotCQlpZiAoY29weV90b191c2VyKEEoYnVmKSwgciwgY291bnQgLSAxKSB8fAotCQkgICAgX19wdXRfdXNlcigwLCAoY2hhciBfX3VzZXIgKilBKGJ1ZikgKyBjb3VudCAtIDEpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihBKGJ1ZiksIHIsIGxlbikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIGxlbjsKLX0KLQotI2RlZmluZQlTT0xBUklTX0NPTkZJR19OR1JPVVBTCQkJMgotI2RlZmluZQlTT0xBUklTX0NPTkZJR19DSElMRF9NQVgJCTMKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfT1BFTl9GSUxFUwkJNAotI2RlZmluZQlTT0xBUklTX0NPTkZJR19QT1NJWF9WRVIJCTUKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfUEFHRVNJWkUJCQk2Ci0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX0NMS19UQ0sJCQk3Ci0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX1hPUEVOX1ZFUgkJOAotI2RlZmluZQlTT0xBUklTX0NPTkZJR19QUk9GX1RDSwkJCTEwCi0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX05QUk9DX0NPTkYJCTExCi0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX05QUk9DX09OTE4JCTEyCi0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX0FJT19MSVNUSU9fTUFYCQkxMwotI2RlZmluZQlTT0xBUklTX0NPTkZJR19BSU9fTUFYCQkJMTQKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfQUlPX1BSSU9fREVMVEFfTUFYCTE1Ci0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX0RFTEFZVElNRVJfTUFYCQkxNgotI2RlZmluZQlTT0xBUklTX0NPTkZJR19NUV9PUEVOX01BWAkJMTcKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfTVFfUFJJT19NQVgJCTE4Ci0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX1JUU0lHX01BWAkJMTkKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfU0VNX05TRU1TX01BWAkJMjAKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfU0VNX1ZBTFVFX01BWAkJMjEKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfU0lHUVVFVUVfTUFYCQkyMgotI2RlZmluZQlTT0xBUklTX0NPTkZJR19TSUdSVF9NSU4JCTIzCi0jZGVmaW5lCVNPTEFSSVNfQ09ORklHX1NJR1JUX01BWAkJMjQKLSNkZWZpbmUJU09MQVJJU19DT05GSUdfVElNRVJfTUFYCQkyNQotI2RlZmluZQlTT0xBUklTX0NPTkZJR19QSFlTX1BBR0VTCQkyNgotI2RlZmluZQlTT0xBUklTX0NPTkZJR19BVlBIWVNfUEFHRVMJCTI3Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc3lzY29uZihpbnQgaWQpCi17Ci0Jc3dpdGNoIChpZCkgewotCWNhc2UgU09MQVJJU19DT05GSUdfTkdST1VQUzoJcmV0dXJuIE5HUk9VUFNfTUFYOwotCWNhc2UgU09MQVJJU19DT05GSUdfQ0hJTERfTUFYOgotCQlyZXR1cm4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OUFJPQ10ucmxpbV9jdXI7Ci0JY2FzZSBTT0xBUklTX0NPTkZJR19PUEVOX0ZJTEVTOgotCQlyZXR1cm4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OT0ZJTEVdLnJsaW1fY3VyOwotCWNhc2UgU09MQVJJU19DT05GSUdfUE9TSVhfVkVSOglyZXR1cm4gMTk5MzA5OwotCWNhc2UgU09MQVJJU19DT05GSUdfUEFHRVNJWkU6CXJldHVybiBQQUdFX1NJWkU7Ci0JY2FzZSBTT0xBUklTX0NPTkZJR19YT1BFTl9WRVI6CXJldHVybiAzOwotCWNhc2UgU09MQVJJU19DT05GSUdfQ0xLX1RDSzoKLQljYXNlIFNPTEFSSVNfQ09ORklHX1BST0ZfVENLOgotCQlyZXR1cm4gc3BhcmM2NF9nZXRfY2xvY2tfdGljayhzbXBfcHJvY2Vzc29yX2lkKCkpOwotI2lmZGVmIENPTkZJR19TTVAJCi0JY2FzZSBTT0xBUklTX0NPTkZJR19OUFJPQ19DT05GOglyZXR1cm4gTlJfQ1BVUzsKLQljYXNlIFNPTEFSSVNfQ09ORklHX05QUk9DX09OTE46CXJldHVybiBudW1fb25saW5lX2NwdXMoKTsKLSNlbHNlCi0JY2FzZSBTT0xBUklTX0NPTkZJR19OUFJPQ19DT05GOglyZXR1cm4gMTsKLQljYXNlIFNPTEFSSVNfQ09ORklHX05QUk9DX09OTE46CXJldHVybiAxOwotI2VuZGlmCi0JY2FzZSBTT0xBUklTX0NPTkZJR19TSUdSVF9NSU46CQlyZXR1cm4gMzc7Ci0JY2FzZSBTT0xBUklTX0NPTkZJR19TSUdSVF9NQVg6CQlyZXR1cm4gNDQ7Ci0JY2FzZSBTT0xBUklTX0NPTkZJR19QSFlTX1BBR0VTOgotCWNhc2UgU09MQVJJU19DT05GSUdfQVZQSFlTX1BBR0VTOgotCQl7Ci0JCQlzdHJ1Y3Qgc3lzaW5mbyBzOwotCQkJCi0JCQlzaV9tZW1pbmZvKCZzKTsKLQkJCWlmIChpZCA9PSBTT0xBUklTX0NPTkZJR19QSFlTX1BBR0VTKQotCQkJCXJldHVybiBzLnRvdGFscmFtID4+PSBQQUdFX1NISUZUOwotCQkJZWxzZQotCQkJCXJldHVybiBzLmZyZWVyYW0gPj49IFBBR0VfU0hJRlQ7Ci0JCX0KLQkvKiBYWFggc3VwcG9ydCB0aGVzZSBhcyB3ZWxsIC1qaiAqLwotCWNhc2UgU09MQVJJU19DT05GSUdfQUlPX0xJU1RJT19NQVg6CXJldHVybiAtRUlOVkFMOwotCWNhc2UgU09MQVJJU19DT05GSUdfQUlPX01BWDoJCXJldHVybiAtRUlOVkFMOwotCWNhc2UgU09MQVJJU19DT05GSUdfQUlPX1BSSU9fREVMVEFfTUFYOglyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFNPTEFSSVNfQ09ORklHX0RFTEFZVElNRVJfTUFYOglyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFNPTEFSSVNfQ09ORklHX01RX09QRU5fTUFYOglyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFNPTEFSSVNfQ09ORklHX01RX1BSSU9fTUFYOglyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFNPTEFSSVNfQ09ORklHX1JUU0lHX01BWDoJCXJldHVybiAtRUlOVkFMOwotCWNhc2UgU09MQVJJU19DT05GSUdfU0VNX05TRU1TX01BWDoJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBTT0xBUklTX0NPTkZJR19TRU1fVkFMVUVfTUFYOglyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFNPTEFSSVNfQ09ORklHX1NJR1FVRVVFX01BWDoJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBTT0xBUklTX0NPTkZJR19USU1FUl9NQVg6CQlyZXR1cm4gLUVJTlZBTDsKLQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfcHJvY2lkcyhpbnQgY21kLCBzMzIgcGlkLCBzMzIgcGdpZCkKLXsKLQlpbnQgcmV0OwotCQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAwOiAvKiBnZXRwZ3JwICovCi0JCXJldHVybiB0YXNrX3BncnBfdm5yKGN1cnJlbnQpOwotCWNhc2UgMTogLyogc2V0cGdycCAqLwotCQl7Ci0JCQlpbnQgKCpzeXNfc2V0cGdpZCkocGlkX3QscGlkX3QpID0KLQkJCQkoaW50ICgqKShwaWRfdCxwaWRfdCkpU1lTKHNldHBnaWQpOwotCQkJCQotCQkJLyogY2FuIGFueW9uZSBleHBsYWluIG1lIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLQkJCSAgIFNvbGFyaXMgc2V0cGdycCBhbmQgc2V0c2lkPyAqLwotCQkJcmV0ID0gc3lzX3NldHBnaWQoMCwgMCk7Ci0JCQlpZiAocmV0KSByZXR1cm4gcmV0OwotCQkJcHJvY19jbGVhcl90dHkoY3VycmVudCk7Ci0JCQlyZXR1cm4gdGFza19wZ3JwX3ZucihjdXJyZW50KTsKLQkJfQotCWNhc2UgMjogLyogZ2V0c2lkICovCi0JCXsKLQkJCWludCAoKnN5c19nZXRzaWQpKHBpZF90KSA9IChpbnQgKCopKHBpZF90KSlTWVMoZ2V0c2lkKTsKLQkJCXJldHVybiBzeXNfZ2V0c2lkKHBpZCk7Ci0JCX0KLQljYXNlIDM6IC8qIHNldHNpZCAqLwotCQl7Ci0JCQlpbnQgKCpzeXNfc2V0c2lkKSh2b2lkKSA9IChpbnQgKCopKHZvaWQpKVNZUyhzZXRzaWQpOwotCQkJcmV0dXJuIHN5c19zZXRzaWQoKTsKLQkJfQotCWNhc2UgNDogLyogZ2V0cGdpZCAqLwotCQl7Ci0JCQlpbnQgKCpzeXNfZ2V0cGdpZCkocGlkX3QpID0gKGludCAoKikocGlkX3QpKVNZUyhnZXRwZ2lkKTsKLQkJCXJldHVybiBzeXNfZ2V0cGdpZChwaWQpOwotCQl9Ci0JY2FzZSA1OiAvKiBzZXRwZ2lkICovCi0JCXsKLQkJCWludCAoKnN5c19zZXRwZ2lkKShwaWRfdCxwaWRfdCkgPSAKLQkJCQkoaW50ICgqKShwaWRfdCxwaWRfdCkpU1lTKHNldHBnaWQpOwotCQkJcmV0dXJuIHN5c19zZXRwZ2lkKHBpZCxwZ2lkKTsKLQkJfQotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19nZXR0aW1lb2ZkYXkodTMyIHRpbSkKLXsKLQlpbnQgKCpzeXNfZ2V0dGltZW9mZGF5KShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXpvbmUgKikgPQotCQkoaW50ICgqKShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXpvbmUgKikpU1lTKGdldHRpbWVvZmRheSk7Ci0JCQotCXJldHVybiBzeXNfZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCAqKSh1NjQpdGltLCBOVUxMKTsKLX0KLQotI2RlZmluZSBSTElNX1NPTF9JTkZJTklUWTMyCTB4N2ZmZmZmZmYKLSNkZWZpbmUgUkxJTV9TT0xfU0FWRURfTUFYMzIJMHg3ZmZmZmZmZQotI2RlZmluZSBSTElNX1NPTF9TQVZFRF9DVVIzMgkweDdmZmZmZmZkCi0jZGVmaW5lIFJMSU1fU09MX0lORklOSVRZCSgodTY0KS0zKQotI2RlZmluZSBSTElNX1NPTF9TQVZFRF9NQVgJKCh1NjQpLTIpCi0jZGVmaW5lIFJMSU1fU09MX1NBVkVEX0NVUgkoKHU2NCktMSkKLSNkZWZpbmUgUkVTT1VSQ0UzMih4KSAoKHggPiBSTElNX0lORklOSVRZMzIpID8gUkxJTV9JTkZJTklUWTMyIDogeCkKLSNkZWZpbmUgUkxJTUlUX1NPTF9OT0ZJTEUJNQotI2RlZmluZSBSTElNSVRfU09MX1ZNRU0JCTYKLQotc3RydWN0IHJsaW1pdDMyIHsKLQl1MzIJcmxpbV9jdXI7Ci0JdTMyCXJsaW1fbWF4OwotfTsKLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19nZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0MzIgX191c2VyICpybGltKQotewotCXN0cnVjdCBybGltaXQgcjsKLQlpbnQgcmV0OwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMgKCk7Ci0JaW50ICgqc3lzX2dldHJsaW1pdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgcmxpbWl0ICopID0KLQkJKGludCAoKikodW5zaWduZWQgaW50LCBzdHJ1Y3QgcmxpbWl0ICopKVNZUyhnZXRybGltaXQpOwotCi0JaWYgKHJlc291cmNlID4gUkxJTUlUX1NPTF9WTUVNKQotCQlyZXR1cm4gLUVJTlZBTDsJCi0Jc3dpdGNoIChyZXNvdXJjZSkgewotCWNhc2UgUkxJTUlUX1NPTF9OT0ZJTEU6IHJlc291cmNlID0gUkxJTUlUX05PRklMRTsgYnJlYWs7Ci0JY2FzZSBSTElNSVRfU09MX1ZNRU06IHJlc291cmNlID0gUkxJTUlUX0FTOyBicmVhazsKLQlkZWZhdWx0OiBicmVhazsKLQl9Ci0Jc2V0X2ZzIChLRVJORUxfRFMpOwotCXJldCA9IHN5c19nZXRybGltaXQocmVzb3VyY2UsICZyKTsKLQlzZXRfZnMgKG9sZF9mcyk7Ci0JaWYgKCFyZXQpIHsKLQkJaWYgKHIucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKLQkJCXIucmxpbV9jdXIgPSBSTElNX1NPTF9JTkZJTklUWTMyOwotCQllbHNlIGlmICgodTY0KXIucmxpbV9jdXIgPiBSTElNX1NPTF9JTkZJTklUWTMyKQotCQkJci5ybGltX2N1ciA9IFJMSU1fU09MX1NBVkVEX0NVUjMyOwotCQlpZiAoci5ybGltX21heCA9PSBSTElNX0lORklOSVRZKQotCQkJci5ybGltX21heCA9IFJMSU1fU09MX0lORklOSVRZMzI7Ci0JCWVsc2UgaWYgKCh1NjQpci5ybGltX21heCA+IFJMSU1fU09MX0lORklOSVRZMzIpCi0JCQlyLnJsaW1fbWF4ID0gUkxJTV9TT0xfU0FWRURfTUFYMzI7Ci0JCXJldCA9IHB1dF91c2VyIChyLnJsaW1fY3VyLCAmcmxpbS0+cmxpbV9jdXIpOwotCQlyZXQgfD0gX19wdXRfdXNlciAoci5ybGltX21heCwgJnJsaW0tPnJsaW1fbWF4KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0MzIgX191c2VyICpybGltKQotewotCXN0cnVjdCBybGltaXQgciwgcm9sZDsKLQlpbnQgcmV0OwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMgKCk7Ci0JaW50ICgqc3lzX2dldHJsaW1pdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqKSA9Ci0JCShpbnQgKCopKHVuc2lnbmVkIGludCwgc3RydWN0IHJsaW1pdCBfX3VzZXIgKikpU1lTKGdldHJsaW1pdCk7Ci0JaW50ICgqc3lzX3NldHJsaW1pdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqKSA9Ci0JCShpbnQgKCopKHVuc2lnbmVkIGludCwgc3RydWN0IHJsaW1pdCBfX3VzZXIgKikpU1lTKHNldHJsaW1pdCk7Ci0KLQlpZiAocmVzb3VyY2UgPiBSTElNSVRfU09MX1ZNRU0pCi0JCXJldHVybiAtRUlOVkFMOwkKLQlzd2l0Y2ggKHJlc291cmNlKSB7Ci0JY2FzZSBSTElNSVRfU09MX05PRklMRTogcmVzb3VyY2UgPSBSTElNSVRfTk9GSUxFOyBicmVhazsKLQljYXNlIFJMSU1JVF9TT0xfVk1FTTogcmVzb3VyY2UgPSBSTElNSVRfQVM7IGJyZWFrOwotCWRlZmF1bHQ6IGJyZWFrOwotCX0KLQlpZiAoZ2V0X3VzZXIgKHIucmxpbV9jdXIsICZybGltLT5ybGltX2N1cikgfHwKLQkgICAgX19nZXRfdXNlciAoci5ybGltX21heCwgJnJsaW0tPnJsaW1fbWF4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jc2V0X2ZzIChLRVJORUxfRFMpOwotCXJldCA9IHN5c19nZXRybGltaXQocmVzb3VyY2UsICZyb2xkKTsKLQlpZiAoIXJldCkgewotCQlpZiAoci5ybGltX2N1ciA9PSBSTElNX1NPTF9JTkZJTklUWTMyKQotCQkJci5ybGltX2N1ciA9IFJMSU1fSU5GSU5JVFk7Ci0JCWVsc2UgaWYgKHIucmxpbV9jdXIgPT0gUkxJTV9TT0xfU0FWRURfQ1VSMzIpCi0JCQlyLnJsaW1fY3VyID0gcm9sZC5ybGltX2N1cjsKLQkJZWxzZSBpZiAoci5ybGltX2N1ciA9PSBSTElNX1NPTF9TQVZFRF9NQVgzMikKLQkJCXIucmxpbV9jdXIgPSByb2xkLnJsaW1fbWF4OwotCQlpZiAoci5ybGltX21heCA9PSBSTElNX1NPTF9JTkZJTklUWTMyKQotCQkJci5ybGltX21heCA9IFJMSU1fSU5GSU5JVFk7Ci0JCWVsc2UgaWYgKHIucmxpbV9tYXggPT0gUkxJTV9TT0xfU0FWRURfQ1VSMzIpCi0JCQlyLnJsaW1fbWF4ID0gcm9sZC5ybGltX2N1cjsKLQkJZWxzZSBpZiAoci5ybGltX21heCA9PSBSTElNX1NPTF9TQVZFRF9NQVgzMikKLQkJCXIucmxpbV9tYXggPSByb2xkLnJsaW1fbWF4OwotCQlyZXQgPSBzeXNfc2V0cmxpbWl0KHJlc291cmNlLCAmcik7Ci0JfQotCXNldF9mcyAob2xkX2ZzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX2dldHJsaW1pdDY0KHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCBfX3VzZXIgKnJsaW0pCi17Ci0Jc3RydWN0IHJsaW1pdCByOwotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcyAoKTsKLQlpbnQgKCpzeXNfZ2V0cmxpbWl0KSh1bnNpZ25lZCBpbnQsIHN0cnVjdCBybGltaXQgX191c2VyICopID0KLQkJKGludCAoKikodW5zaWduZWQgaW50LCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqKSlTWVMoZ2V0cmxpbWl0KTsKLQotCWlmIChyZXNvdXJjZSA+IFJMSU1JVF9TT0xfVk1FTSkKLQkJcmV0dXJuIC1FSU5WQUw7CQotCXN3aXRjaCAocmVzb3VyY2UpIHsKLQljYXNlIFJMSU1JVF9TT0xfTk9GSUxFOiByZXNvdXJjZSA9IFJMSU1JVF9OT0ZJTEU7IGJyZWFrOwotCWNhc2UgUkxJTUlUX1NPTF9WTUVNOiByZXNvdXJjZSA9IFJMSU1JVF9BUzsgYnJlYWs7Ci0JZGVmYXVsdDogYnJlYWs7Ci0JfQotCXNldF9mcyAoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfZ2V0cmxpbWl0KHJlc291cmNlLCAmcik7Ci0Jc2V0X2ZzIChvbGRfZnMpOwotCWlmICghcmV0KSB7Ci0JCWlmIChyLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCi0JCQlyLnJsaW1fY3VyID0gUkxJTV9TT0xfSU5GSU5JVFk7Ci0JCWlmIChyLnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkpCi0JCQlyLnJsaW1fbWF4ID0gUkxJTV9TT0xfSU5GSU5JVFk7Ci0JCXJldCA9IHB1dF91c2VyIChyLnJsaW1fY3VyLCAmcmxpbS0+cmxpbV9jdXIpOwotCQlyZXQgfD0gX19wdXRfdXNlciAoci5ybGltX21heCwgJnJsaW0tPnJsaW1fbWF4KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19zZXRybGltaXQ2NCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgX191c2VyICpybGltKQotewotCXN0cnVjdCBybGltaXQgciwgcm9sZDsKLQlpbnQgcmV0OwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMgKCk7Ci0JaW50ICgqc3lzX2dldHJsaW1pdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqKSA9Ci0JCShpbnQgKCopKHVuc2lnbmVkIGludCwgc3RydWN0IHJsaW1pdCBfX3VzZXIgKikpU1lTKGdldHJsaW1pdCk7Ci0JaW50ICgqc3lzX3NldHJsaW1pdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqKSA9Ci0JCShpbnQgKCopKHVuc2lnbmVkIGludCwgc3RydWN0IHJsaW1pdCBfX3VzZXIgKikpU1lTKHNldHJsaW1pdCk7Ci0KLQlpZiAocmVzb3VyY2UgPiBSTElNSVRfU09MX1ZNRU0pCi0JCXJldHVybiAtRUlOVkFMOwkKLQlzd2l0Y2ggKHJlc291cmNlKSB7Ci0JY2FzZSBSTElNSVRfU09MX05PRklMRTogcmVzb3VyY2UgPSBSTElNSVRfTk9GSUxFOyBicmVhazsKLQljYXNlIFJMSU1JVF9TT0xfVk1FTTogcmVzb3VyY2UgPSBSTElNSVRfQVM7IGJyZWFrOwotCWRlZmF1bHQ6IGJyZWFrOwotCX0KLQlpZiAoZ2V0X3VzZXIgKHIucmxpbV9jdXIsICZybGltLT5ybGltX2N1cikgfHwKLQkgICAgX19nZXRfdXNlciAoci5ybGltX21heCwgJnJsaW0tPnJsaW1fbWF4KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jc2V0X2ZzIChLRVJORUxfRFMpOwotCXJldCA9IHN5c19nZXRybGltaXQocmVzb3VyY2UsICZyb2xkKTsKLQlpZiAoIXJldCkgewotCQlpZiAoci5ybGltX2N1ciA9PSBSTElNX1NPTF9JTkZJTklUWSkKLQkJCXIucmxpbV9jdXIgPSBSTElNX0lORklOSVRZOwotCQllbHNlIGlmIChyLnJsaW1fY3VyID09IFJMSU1fU09MX1NBVkVEX0NVUikKLQkJCXIucmxpbV9jdXIgPSByb2xkLnJsaW1fY3VyOwotCQllbHNlIGlmIChyLnJsaW1fY3VyID09IFJMSU1fU09MX1NBVkVEX01BWCkKLQkJCXIucmxpbV9jdXIgPSByb2xkLnJsaW1fbWF4OwotCQlpZiAoci5ybGltX21heCA9PSBSTElNX1NPTF9JTkZJTklUWSkKLQkJCXIucmxpbV9tYXggPSBSTElNX0lORklOSVRZOwotCQllbHNlIGlmIChyLnJsaW1fbWF4ID09IFJMSU1fU09MX1NBVkVEX0NVUikKLQkJCXIucmxpbV9tYXggPSByb2xkLnJsaW1fY3VyOwotCQllbHNlIGlmIChyLnJsaW1fbWF4ID09IFJMSU1fU09MX1NBVkVEX01BWCkKLQkJCXIucmxpbV9tYXggPSByb2xkLnJsaW1fbWF4OwotCQlyZXQgPSBzeXNfc2V0cmxpbWl0KHJlc291cmNlLCAmcik7Ci0JfQotCXNldF9mcyAob2xkX2ZzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3Qgc29sX250cHRpbWV2YWwgewotCXN0cnVjdCBjb21wYXRfdGltZXZhbCB0aW1lOwotCXMzMiBtYXhlcnJvcjsKLQlzMzIgZXN0ZXJyb3I7Ci19OwotCi1zdHJ1Y3Qgc29sX3RpbWV4IHsKLQl1MzIgbW9kZXM7Ci0JczMyIG9mZnNldDsKLQlzMzIgZnJlcTsKLQlzMzIgbWF4ZXJyb3I7Ci0JczMyIGVzdGVycm9yOwotCXMzMiBzdGF0dXM7Ci0JczMyIGNvbnN0YW50OwotCXMzMiBwcmVjaXNpb247Ci0JczMyIHRvbGVyYW5jZTsKLQlzMzIgcHBzZnJlcTsKLQlzMzIgaml0dGVyOwotCXMzMiBzaGlmdDsKLQlzMzIgc3RhYmlsOwotCXMzMiBqaXRjbnQ7Ci0JczMyIGNhbGNudDsKLQlzMzIgZXJyY250OwotCXMzMiBzdGJjbnQ7Ci19OwotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX250cF9nZXR0aW1lKHN0cnVjdCBzb2xfbnRwdGltZXZhbCBfX3VzZXIgKm50cCkKLXsKLQlpbnQgKCpzeXNfYWRqdGltZXgpKHN0cnVjdCB0aW1leCBfX3VzZXIgKikgPQotCQkoaW50ICgqKShzdHJ1Y3QgdGltZXggX191c2VyICopKVNZUyhhZGp0aW1leCk7Ci0Jc3RydWN0IHRpbWV4IHQ7Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JCi0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JdC5tb2RlcyA9IDA7Ci0JcmV0ID0gc3lzX2FkanRpbWV4KCZ0KTsKLQlzZXRfZnMob2xkX2ZzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXQgPSBwdXRfdXNlciAodC50aW1lLnR2X3NlYywgJm50cC0+dGltZS50dl9zZWMpOwotCXJldCB8PSBfX3B1dF91c2VyICh0LnRpbWUudHZfdXNlYywgJm50cC0+dGltZS50dl91c2VjKTsKLQlyZXQgfD0gX19wdXRfdXNlciAodC5tYXhlcnJvciwgJm50cC0+bWF4ZXJyb3IpOwotCXJldCB8PSBfX3B1dF91c2VyICh0LmVzdGVycm9yLCAmbnRwLT5lc3RlcnJvcik7Ci0JcmV0dXJuIHJldDsJICAgICAgICAgICAgICAgICAgICAgICAgCi19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfbnRwX2FkanRpbWUoc3RydWN0IHNvbF90aW1leCBfX3VzZXIgKnR4cCkKLXsKLQlpbnQgKCpzeXNfYWRqdGltZXgpKHN0cnVjdCB0aW1leCBfX3VzZXIgKikgPQotCQkoaW50ICgqKShzdHJ1Y3QgdGltZXggX191c2VyICopKVNZUyhhZGp0aW1leCk7Ci0Jc3RydWN0IHRpbWV4IHQ7Ci0JaW50IHJldCwgZXJyOwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQotCXJldCA9IGdldF91c2VyICh0Lm1vZGVzLCAmdHhwLT5tb2Rlcyk7Ci0JcmV0IHw9IF9fZ2V0X3VzZXIgKHQub2Zmc2V0LCAmdHhwLT5vZmZzZXQpOwotCXJldCB8PSBfX2dldF91c2VyICh0LmZyZXEsICZ0eHAtPmZyZXEpOwotCXJldCB8PSBfX2dldF91c2VyICh0Lm1heGVycm9yLCAmdHhwLT5tYXhlcnJvcik7Ci0JcmV0IHw9IF9fZ2V0X3VzZXIgKHQuZXN0ZXJyb3IsICZ0eHAtPmVzdGVycm9yKTsKLQlyZXQgfD0gX19nZXRfdXNlciAodC5zdGF0dXMsICZ0eHAtPnN0YXR1cyk7Ci0JcmV0IHw9IF9fZ2V0X3VzZXIgKHQuY29uc3RhbnQsICZ0eHAtPmNvbnN0YW50KTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfYWRqdGltZXgoJnQpOwotCXNldF9mcyhvbGRfZnMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWVyciA9IHB1dF91c2VyICh0Lm9mZnNldCwgJnR4cC0+b2Zmc2V0KTsKLQllcnIgfD0gX19wdXRfdXNlciAodC5mcmVxLCAmdHhwLT5mcmVxKTsKLQllcnIgfD0gX19wdXRfdXNlciAodC5tYXhlcnJvciwgJnR4cC0+bWF4ZXJyb3IpOwotCWVyciB8PSBfX3B1dF91c2VyICh0LmVzdGVycm9yLCAmdHhwLT5lc3RlcnJvcik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIgKHQuc3RhdHVzLCAmdHhwLT5zdGF0dXMpOwotCWVyciB8PSBfX3B1dF91c2VyICh0LmNvbnN0YW50LCAmdHhwLT5jb25zdGFudCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIgKHQucHJlY2lzaW9uLCAmdHhwLT5wcmVjaXNpb24pOwotCWVyciB8PSBfX3B1dF91c2VyICh0LnRvbGVyYW5jZSwgJnR4cC0+dG9sZXJhbmNlKTsKLQllcnIgfD0gX19wdXRfdXNlciAodC5wcHNmcmVxLCAmdHhwLT5wcHNmcmVxKTsKLQllcnIgfD0gX19wdXRfdXNlciAodC5qaXR0ZXIsICZ0eHAtPmppdHRlcik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIgKHQuc2hpZnQsICZ0eHAtPnNoaWZ0KTsKLQllcnIgfD0gX19wdXRfdXNlciAodC5zdGFiaWwsICZ0eHAtPnN0YWJpbCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIgKHQuaml0Y250LCAmdHhwLT5qaXRjbnQpOwotCWVyciB8PSBfX3B1dF91c2VyICh0LmNhbGNudCwgJnR4cC0+Y2FsY250KTsKLQllcnIgfD0gX19wdXRfdXNlciAodC5lcnJjbnQsICZ0eHAtPmVycmNudCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIgKHQuc3RiY250LCAmdHhwLT5zdGJjbnQpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IGRvX3NvbF91bmltcGxlbWVudGVkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXByaW50ayAoIlVuaW1wbGVtZW50ZWQgU29sYXJpcyBzeXNjYWxsICVkICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIAotCQkJKGludClyZWdzLT51X3JlZ3NbVVJFR19HMV0sIAotCQkJKGludClyZWdzLT51X3JlZ3NbVVJFR19JMF0sCi0JCQkoaW50KXJlZ3MtPnVfcmVnc1tVUkVHX0kxXSwKLQkJCShpbnQpcmVncy0+dV9yZWdzW1VSRUdfSTJdLAotCQkJKGludClyZWdzLT51X3JlZ3NbVVJFR19JM10pOwotCXJldHVybiAtRU5PU1lTOwotfQotCi1hc21saW5rYWdlIHZvaWQgc29sYXJpc19yZWdpc3Rlcih2b2lkKQotewotCXNldF9wZXJzb25hbGl0eShQRVJfU1ZSNCk7Ci19Ci0KLWV4dGVybiBsb25nIHNvbGFyaXNfdG9fbGludXhfc2lnbmFsc1tdLCBsaW51eF90b19zb2xhcmlzX3NpZ25hbHNbXTsKLQotc3RydWN0IGV4ZWNfZG9tYWluIHNvbGFyaXNfZXhlY19kb21haW4gPSB7Ci0JLm5hbWUgPQkJIlNvbGFyaXMiLAotCS5oYW5kbGVyID0JTlVMTCwKLQkucGVyc19sb3cgPQkxLAkJLyogUEVSX1NWUjQgcGVyc29uYWxpdHkgKi8KLQkucGVyc19oaWdoID0JMSwKLQkuc2lnbmFsX21hcCA9CXNvbGFyaXNfdG9fbGludXhfc2lnbmFscywKLQkuc2lnbmFsX2ludm1hcCA9bGludXhfdG9fc29sYXJpc19zaWduYWxzLAotCS5tb2R1bGUgPQlUSElTX01PRFVMRSwKLQkubmV4dCA9CQlOVUxMCi19OwotCi1leHRlcm4gaW50IGluaXRfc29ja3N5cyh2b2lkKTsKLQotTU9EVUxFX0FVVEhPUigiSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLCBQYXRyaWsgUmFrIChwcmFrMzI2NEBzczEwMDAubXMubWZmLmN1bmkuY3opIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNvbGFyaXMgYmluYXJ5IGVtdWxhdGlvbiBtb2R1bGUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotZXh0ZXJuIHUzMiB0bDBfc29sYXJpc1s4XTsKLSNkZWZpbmUgdXBkYXRlX3R0YWJsZSh4KSAJCQkJCQkJCQkJXAotCXRsMF9zb2xhcmlzWzNdID0gKCgobG9uZykoeCkgLSAobG9uZyl0bDBfc29sYXJpcyAtIDMpID4+IDIpIHwgMHg0MDAwMDAwMDsJCQlcCi0Jd21iKCk7CQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbHVzaCAlMCIgOiA6ICJyIiAoJnRsMF9zb2xhcmlzWzNdKSkKLQotZXh0ZXJuIHUzMiBzb2xhcmlzX3NwYXJjX3N5c2NhbGxbXTsKLWV4dGVybiB1MzIgc29sYXJpc19zeXNjYWxsW107Ci1leHRlcm4gdm9pZCBjbGVhbnVwX3NvY2tzeXModm9pZCk7Ci0KLWV4dGVybiB1MzIgZW50cnk2NF9wZXJzb25hbGl0eV9wYXRjaDsKLQotc3RhdGljIGludCBfX2luaXQgc29sYXJpc19pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCVNPTEREKCgiU29sYXJpcyBtb2R1bGUgYXQgJXBcbiIsIHNvbGFyaXNfc3BhcmNfc3lzY2FsbCkpOwotCXJlZ2lzdGVyX2V4ZWNfZG9tYWluKCZzb2xhcmlzX2V4ZWNfZG9tYWluKTsKLQlpZiAoKHJldCA9IGluaXRfc29ja3N5cygpKSkgewotCQl1bnJlZ2lzdGVyX2V4ZWNfZG9tYWluKCZzb2xhcmlzX2V4ZWNfZG9tYWluKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JdXBkYXRlX3R0YWJsZShzb2xhcmlzX3NwYXJjX3N5c2NhbGwpOwotCWVudHJ5NjRfcGVyc29uYWxpdHlfcGF0Y2ggfD0KLQkJKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgcGVyc29uYWxpdHkpICsKLQkJIChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKSk7Ci0Jd21iKCk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNoICUwIgotCQkJICAgICA6IDogInIiICgmZW50cnk2NF9wZXJzb25hbGl0eV9wYXRjaCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc29sYXJpc19leGl0KHZvaWQpCi17Ci0JdXBkYXRlX3R0YWJsZShzb2xhcmlzX3N5c2NhbGwpOwotCWNsZWFudXBfc29ja3N5cygpOwotCXVucmVnaXN0ZXJfZXhlY19kb21haW4oJnNvbGFyaXNfZXhlY19kb21haW4pOwotfQotCi1tb2R1bGVfaW5pdChzb2xhcmlzX2luaXQpOwotbW9kdWxlX2V4aXQoc29sYXJpc19leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3NpZ25hbC5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc2lnbmFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTBjOTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc2lnbmFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBAQAotLyogJElkOiBzaWduYWwuYyx2IDEuNyAyMDAwLzA5LzA1IDIxOjQ0OjU0IGRhdmVtIEV4cCAkCi0gKiBzaWduYWwuYzogU2lnbmFsIGVtdWxhdGlvbiBmb3IgU29sYXJpcwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zdnI0Lmg+Ci0jaW5jbHVkZSA8YXNtL3N0cmluZy5oPgotCi0jaW5jbHVkZSAiY29udi5oIgotI2luY2x1ZGUgInNpZ25hbC5oIgotCi0jZGVmaW5lIF9TKG5yKSAoMUw8PCgobnIpLTEpKQotCi0jZGVmaW5lIF9CTE9DS0FCTEUgKH4oX1MoU0lHS0lMTCkgfCBfUyhTSUdTVE9QKSkpCi0KLWxvbmcgbGludXhfdG9fc29sYXJpc19zaWduYWxzW10gPSB7Ci0gICAgICAgIDAsCi0JU09MQVJJU19TSUdIVVAsCQlTT0xBUklTX1NJR0lOVCwJCi0JU09MQVJJU19TSUdRVUlULAlTT0xBUklTX1NJR0lMTCwKLQlTT0xBUklTX1NJR1RSQVAsCVNPTEFSSVNfU0lHSU9ULAotCVNPTEFSSVNfU0lHRU1ULAkJU09MQVJJU19TSUdGUEUsCi0JU09MQVJJU19TSUdLSUxMLAlTT0xBUklTX1NJR0JVUywKLQlTT0xBUklTX1NJR1NFR1YsCVNPTEFSSVNfU0lHU1lTLAotCVNPTEFSSVNfU0lHUElQRSwJU09MQVJJU19TSUdBTFJNLAotCVNPTEFSSVNfU0lHVEVSTSwJU09MQVJJU19TSUdVUkcsCi0JU09MQVJJU19TSUdTVE9QLAlTT0xBUklTX1NJR1RTVFAsCi0JU09MQVJJU19TSUdDT05ULAlTT0xBUklTX1NJR0NMRCwKLQlTT0xBUklTX1NJR1RUSU4sCVNPTEFSSVNfU0lHVFRPVSwKLQlTT0xBUklTX1NJR1BPTEwsCVNPTEFSSVNfU0lHWENQVSwKLQlTT0xBUklTX1NJR1hGU1osCVNPTEFSSVNfU0lHVlRBTFJNLAotCVNPTEFSSVNfU0lHUFJPRiwJU09MQVJJU19TSUdXSU5DSCwKLQlTT0xBUklTX1NJR1VTUjEsCVNPTEFSSVNfU0lHVVNSMSwKLQlTT0xBUklTX1NJR1VTUjIsCS0xLAotfTsKLQotbG9uZyBzb2xhcmlzX3RvX2xpbnV4X3NpZ25hbHNbXSA9IHsKLSAgICAgICAgMCwKLSAgICAgICAgU0lHSFVQLAkJU0lHSU5ULAkJU0lHUVVJVCwJU0lHSUxMLAotICAgICAgICBTSUdUUkFQLAlTSUdJT1QsCQlTSUdFTVQsCQlTSUdGUEUsCi0gICAgICAgIFNJR0tJTEwsCVNJR0JVUywJCVNJR1NFR1YsCVNJR1NZUywKLSAgICAgICAgU0lHUElQRSwJU0lHQUxSTSwJU0lHVEVSTSwJU0lHVVNSMSwKLSAgICAgICAgU0lHVVNSMiwJU0lHQ0hMRCwJLTEsCQlTSUdXSU5DSCwKLSAgICAgICAgU0lHVVJHLAkJU0lHUE9MTCwJU0lHU1RPUCwJU0lHVFNUUCwKLSAgICAgICAgU0lHQ09OVCwJU0lHVFRJTiwJU0lHVFRPVSwJU0lHVlRBTFJNLAotICAgICAgICBTSUdQUk9GLAlTSUdYQ1BVLAlTSUdYRlNaLCAgICAgICAgLTEsCi0JLTEsCQktMSwJCS0xLAkJLTEsCi0JLTEsCQktMSwJCS0xLAkJLTEsCi0JLTEsCQktMSwJCS0xLAkJLTEsCi19OwotCi1zdGF0aWMgaW5saW5lIGxvbmcgbWFwc2lnKGxvbmcgc2lnKQotewotCWlmICgodW5zaWduZWQgbG9uZylzaWcgPiBTT0xBUklTX05TSUdOQUxTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc29sYXJpc190b19saW51eF9zaWduYWxzW3NpZ107Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfa2lsbChpbnQgcGlkLCBpbnQgc2lnKQotewotCWludCAoKnN5c19raWxsKShpbnQsaW50KSA9IAotCQkoaW50ICgqKShpbnQsaW50KSlTWVMoa2lsbCk7Ci0JaW50IHMgPSBtYXBzaWcoc2lnKTsKLQkKLQlpZiAocyA8IDApIHJldHVybiBzOwotCXJldHVybiBzeXNfa2lsbChwaWQsIHMpOwotfQotCi1zdGF0aWMgbG9uZyBzaWdfaGFuZGxlcihpbnQgc2lnLCB1MzIgYXJnLCBpbnQgb25lX3Nob3QpCi17Ci0Jc3RydWN0IHNpZ2FjdGlvbiBzYSwgb2xkOwotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCWludCAoKnN5c19zaWdhY3Rpb24pKGludCxzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqLHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICopID0gCi0JCShpbnQgKCopKGludCxzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqLHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICopKVNZUyhzaWdhY3Rpb24pOwotCQotCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKLQlzYS5zYV9yZXN0b3JlciA9IE5VTEw7Ci0Jc2Euc2FfaGFuZGxlciA9IChfX3NpZ2hhbmRsZXJfdClBKGFyZyk7Ci0Jc2Euc2FfZmxhZ3MgPSAwOwotCWlmIChvbmVfc2hvdCkgc2Euc2FfZmxhZ3MgPSBTQV9PTkVTSE9UIHwgU0FfTk9NQVNLOwotCXNldF9mcyAoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfc2lnYWN0aW9uKHNpZywgKHZvaWQgX191c2VyICopJnNhLCAodm9pZCBfX3VzZXIgKikmb2xkKTsKLQlzZXRfZnMgKG9sZF9mcyk7Ci0JaWYgKHJldCA8IDApIHJldHVybiByZXQ7Ci0JcmV0dXJuICh1MzIpKHVuc2lnbmVkIGxvbmcpb2xkLnNhX2hhbmRsZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzb2xhcmlzX3NpZ25hbChpbnQgc2lnLCB1MzIgYXJnKQotewotCXJldHVybiBzaWdfaGFuZGxlciAoc2lnLCBhcmcsIDEpOwotfQotCi1zdGF0aWMgbG9uZyBzb2xhcmlzX3NpZ3NldChpbnQgc2lnLCB1MzIgYXJnKQotewotCWlmIChhcmcgIT0gMikgLyogSE9MRCAqLyB7Ci0JCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlzaWdkZWxzZXRtYXNrKCZjdXJyZW50LT5ibG9ja2VkLCBfUyhzaWcpKTsKLQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmV0dXJuIHNpZ19oYW5kbGVyIChzaWcsIGFyZywgMCk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXNpZ2FkZHNldG1hc2soJmN1cnJlbnQtPmJsb2NrZWQsIChfUyhzaWcpICYgfl9CTE9DS0FCTEUpKTsKLQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgc29sYXJpc19zaWdob2xkKGludCBzaWcpCi17Ci0JcmV0dXJuIHNvbGFyaXNfc2lnc2V0KHNpZywgMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBzb2xhcmlzX3NpZ3JlbHNlKGludCBzaWcpCi17Ci0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2lnZGVsc2V0bWFzaygmY3VycmVudC0+YmxvY2tlZCwgX1Moc2lnKSk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgc29sYXJpc19zaWdpZ25vcmUoaW50IHNpZykKLXsKLQlyZXR1cm4gc2lnX2hhbmRsZXIoc2lnLCAodTMyKSh1bnNpZ25lZCBsb25nKVNJR19JR04sIDApOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgc29sYXJpc19zaWdwYXVzZShpbnQgc2lnKQotewotCXByaW50ayAoIk5lZWQgdG8gc3VwcG9ydCBzb2xhcmlzIHNpZ3BhdXNlXG4iKTsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotYXNtbGlua2FnZSBsb25nIHNvbGFyaXNfc2lnZnVuYyhpbnQgc2lnLCB1MzIgYXJnKQotewotCWludCBmdW5jID0gc2lnICYgfjB4ZmY7Ci0JCi0Jc2lnID0gbWFwc2lnKHNpZyAmIDB4ZmYpOyAKLQlpZiAoc2lnIDwgMCkgcmV0dXJuIHNpZzsgCi0Jc3dpdGNoIChmdW5jKSB7Ci0JY2FzZSAwOiByZXR1cm4gc29sYXJpc19zaWduYWwoc2lnLCBhcmcpOyAKLQljYXNlIDB4MTAwOiByZXR1cm4gc29sYXJpc19zaWdzZXQoc2lnLCBhcmcpOyAKLQljYXNlIDB4MjAwOiByZXR1cm4gc29sYXJpc19zaWdob2xkKHNpZyk7Ci0JY2FzZSAweDQwMDogcmV0dXJuIHNvbGFyaXNfc2lncmVsc2Uoc2lnKTsgCi0JY2FzZSAweDgwMDogcmV0dXJuIHNvbGFyaXNfc2lnaWdub3JlKHNpZyk7IAotCWNhc2UgMHgxMDAwOiByZXR1cm4gc29sYXJpc19zaWdwYXVzZShzaWcpOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiBfX3NpZ2JpdHNbNF07Ci19IHNvbF9zaWdzZXRfdDsKLQotc3RhdGljIGlubGluZSBpbnQgbWFwaW4odTMyICpwLCBzaWdzZXRfdCAqcSkKLXsKLQlpbnQgaTsKLQl1MzIgeDsKLQlpbnQgc2lnOwotCQotCXNpZ2VtcHR5c2V0KHEpOwotCXggPSBwWzBdOwotCWZvciAoaSA9IDE7IGkgPD0gU09MQVJJU19OU0lHTkFMUzsgaSsrKSB7Ci0JCWlmICh4ICYgMSkgewotCQkJc2lnID0gc29sYXJpc190b19saW51eF9zaWduYWxzW2ldOwotCQkJaWYgKHNpZyA9PSAtMSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXNpZ2FkZHNldG1hc2socSwgKDFMIDw8IChzaWcgLSAxKSkpOwotCQl9Ci0JCXggPj49IDE7Ci0JCWlmIChpID09IDMyKQotCQkJeCA9IHBbMV07Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtYXBvdXQoc2lnc2V0X3QgKnEsIHUzMiAqcCkKLXsKLQlpbnQgaTsKLQlpbnQgc2lnOwotCQotCXBbMF0gPSAwOwotCXBbMV0gPSAwOwotCWZvciAoaSA9IDE7IGkgPD0gMzI7IGkrKykgewotCQlpZiAoc2lnaXNtZW1iZXIocSwgc2lnbWFzayhpKSkpIHsKLQkJCXNpZyA9IGxpbnV4X3RvX3NvbGFyaXNfc2lnbmFsc1tpXTsKLQkJCWlmIChzaWcgPT0gLTEpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoc2lnID4gMzIpCi0JCQkJcFsxXSB8PSAxTCA8PCAoc2lnIC0gMzMpOwotCQkJZWxzZQotCQkJCXBbMF0gfD0gMUwgPDwgKHNpZyAtIDEpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX3NpZ3Byb2NtYXNrKGludCBob3csIHUzMiBpbiwgdTMyIG91dCkKLXsKLQlzaWdzZXRfdCBpbl9zLCAqaW5zLCBvdXRfcywgKm91dHM7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCWludCByZXQ7Ci0JaW50ICgqc3lzX3NpZ3Byb2NtYXNrKShpbnQsc2lnc2V0X3QgX191c2VyICosc2lnc2V0X3QgX191c2VyICopID0gCi0JCShpbnQgKCopKGludCxzaWdzZXRfdCBfX3VzZXIgKixzaWdzZXRfdCBfX3VzZXIgKikpU1lTKHNpZ3Byb2NtYXNrKTsKLQkKLQlpbnMgPSBOVUxMOyBvdXRzID0gTlVMTDsKLQlpZiAoaW4pIHsKLQkJdTMyIHRtcFsyXTsKLQkJCi0JCWlmIChjb3B5X2Zyb21fdXNlciAodG1wLCAodm9pZCBfX3VzZXIgKilBKGluKSwgMipzaXplb2YodTMyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaW5zID0gJmluX3M7Ci0JCWlmIChtYXBpbiAodG1wLCBpbnMpKSByZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKG91dCkgb3V0cyA9ICZvdXRfczsKLQlzZXRfZnMgKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3NpZ3Byb2NtYXNrKChob3cgPT0gMykgPyBTSUdfU0VUTUFTSyA6IGhvdywKLQkJCQkodm9pZCBfX3VzZXIgKilpbnMsICh2b2lkIF9fdXNlciAqKW91dHMpOwotCXNldF9mcyAob2xkX2ZzKTsKLQlpZiAocmV0KSByZXR1cm4gcmV0OwotCWlmIChvdXQpIHsKLQkJdTMyIHRtcFs0XTsKLQkJCi0JCXRtcFsyXSA9IDA7IHRtcFszXSA9IDA7Ci0JCWlmIChtYXBvdXQgKG91dHMsIHRtcCkpIHJldHVybiAtRUlOVkFMOwotCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKUEob3V0KSwgdG1wLCA0KnNpemVvZih1MzIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBsb25nIGRvX3NvbF9zaWdzdXNwZW5kKHUzMiBtYXNrKQotewotCXNpZ3NldF90IHM7Ci0JdTMyIHRtcFsyXTsKLQkJCi0JaWYgKGNvcHlfZnJvbV91c2VyICh0bXAsIChzb2xfc2lnc2V0X3QgX191c2VyICopQShtYXNrKSwgMipzaXplb2YodTMyKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChtYXBpbiAodG1wLCAmcykpIHJldHVybiAtRUlOVkFMOwotCXJldHVybiAobG9uZylzLnNpZ1swXTsKLX0KLQotc3RydWN0IHNvbF9zaWdhY3Rpb24gewotCWludAlzYV9mbGFnczsKLQl1MzIJc2FfaGFuZGxlcjsKLQl1MzIJc2FfbWFza1s0XTsKLQlpbnQJc2FfcmVzdlsyXTsKLX07Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc2lnYWN0aW9uKGludCBzaWcsIHUzMiBhY3QsIHUzMiBvbGQpCi17Ci0JdTMyIHRtcCwgdG1wMls0XTsKLQlzdHJ1Y3Qgc2lnYWN0aW9uIHMsIHMyOwotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCXN0cnVjdCBzb2xfc2lnYWN0aW9uIF9fdXNlciAqcCA9ICh2b2lkIF9fdXNlciAqKUEob2xkKTsKLQlpbnQgKCpzeXNfc2lnYWN0aW9uKShpbnQsc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKixzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqKSA9IAotCQkoaW50ICgqKShpbnQsc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKixzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqKSlTWVMoc2lnYWN0aW9uKTsKLQkKLQlzaWcgPSBtYXBzaWcoc2lnKTsgCi0JaWYgKHNpZyA8IDApIHsKLQkJLyogV2UgY2hlYXQgYSBsaXR0bGUgYml0IGZvciBTb2xhcmlzIG9ubHkgc2lnbmFscyAqLwotCQlpZiAob2xkICYmIGNsZWFyX3VzZXIocCwgc2l6ZW9mKHN0cnVjdCBzb2xfc2lnYWN0aW9uKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChhY3QpIHsKLQkJaWYgKGdldF91c2VyICh0bXAsICZwLT5zYV9mbGFncykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcy5zYV9mbGFncyA9IDA7Ci0JCWlmICh0bXAgJiBTT0xBUklTX1NBX09OU1RBQ0spIHMuc2FfZmxhZ3MgfD0gU0FfU1RBQ0s7Ci0JCWlmICh0bXAgJiBTT0xBUklTX1NBX1JFU1RBUlQpIHMuc2FfZmxhZ3MgfD0gU0FfUkVTVEFSVDsKLQkJaWYgKHRtcCAmIFNPTEFSSVNfU0FfTk9ERUZFUikgcy5zYV9mbGFncyB8PSBTQV9OT01BU0s7Ci0JCWlmICh0bXAgJiBTT0xBUklTX1NBX1JFU0VUSEFORCkgcy5zYV9mbGFncyB8PSBTQV9PTkVTSE9UOwotCQlpZiAodG1wICYgU09MQVJJU19TQV9OT0NMRFNUT1ApIHMuc2FfZmxhZ3MgfD0gU0FfTk9DTERTVE9QOwotCQlpZiAoZ2V0X3VzZXIgKHRtcCwgJnAtPnNhX2hhbmRsZXIpIHx8Ci0JCSAgICBjb3B5X2Zyb21fdXNlciAodG1wMiwgJnAtPnNhX21hc2ssIDIqc2l6ZW9mKHUzMikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXMuc2FfaGFuZGxlciA9IChfX3NpZ2hhbmRsZXJfdClBKHRtcCk7Ci0JCWlmIChtYXBpbiAodG1wMiwgJnMuc2FfbWFzaykpIHJldHVybiAtRUlOVkFMOwotCQlzLnNhX3Jlc3RvcmVyID0gTlVMTDsKLQl9Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3NpZ2FjdGlvbihzaWcsIGFjdCA/ICh2b2lkIF9fdXNlciAqKSZzIDogTlVMTCwKLQkJCQkgb2xkID8gKHZvaWQgX191c2VyICopJnMyIDogTlVMTCk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0JaWYgKHJldCkgcmV0dXJuIHJldDsKLQlpZiAob2xkKSB7Ci0JCWlmIChtYXBvdXQgKCZzMi5zYV9tYXNrLCB0bXAyKSkgcmV0dXJuIC1FSU5WQUw7Ci0JCXRtcCA9IDA7IHRtcDJbMl0gPSAwOyB0bXAyWzNdID0gMDsKLQkJaWYgKHMyLnNhX2ZsYWdzICYgU0FfU1RBQ0spIHRtcCB8PSBTT0xBUklTX1NBX09OU1RBQ0s7Ci0JCWlmIChzMi5zYV9mbGFncyAmIFNBX1JFU1RBUlQpIHRtcCB8PSBTT0xBUklTX1NBX1JFU1RBUlQ7Ci0JCWlmIChzMi5zYV9mbGFncyAmIFNBX05PTUFTSykgdG1wIHw9IFNPTEFSSVNfU0FfTk9ERUZFUjsKLQkJaWYgKHMyLnNhX2ZsYWdzICYgU0FfT05FU0hPVCkgdG1wIHw9IFNPTEFSSVNfU0FfUkVTRVRIQU5EOwotCQlpZiAoczIuc2FfZmxhZ3MgJiBTQV9OT0NMRFNUT1ApIHRtcCB8PSBTT0xBUklTX1NBX05PQ0xEU1RPUDsKLQkJaWYgKHB1dF91c2VyICh0bXAsICZwLT5zYV9mbGFncykgfHwKLQkJICAgIF9fcHV0X3VzZXIgKCh1MzIpKHVuc2lnbmVkIGxvbmcpczIuc2FfaGFuZGxlciwgJnAtPnNhX2hhbmRsZXIpIHx8Ci0JCSAgICBjb3B5X3RvX3VzZXIgKCZwLT5zYV9tYXNrLCB0bXAyLCA0KnNpemVvZih1MzIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19zaWdwZW5kaW5nKGludCB3aGljaCwgdTMyIHNldCkKLXsKLQlzaWdzZXRfdCBzOwotCXUzMiB0bXBbNF07Ci0Jc3dpdGNoICh3aGljaCkgewotCWNhc2UgMTogLyogc2lncGVuZGluZyAqLwotCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJc2lnYW5kc2V0cygmcywgJmN1cnJlbnQtPmJsb2NrZWQsICZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbCk7Ci0JCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCWJyZWFrOwotCWNhc2UgMjogLyogc2lnZmlsbHNldCAtIEkganVzdCBzZXQgc2lnbmFscyB3aGljaCBoYXZlIGxpbnV4IGVxdWl2YWxlbnRzICovCi0JCXNpZ2ZpbGxzZXQoJnMpOwotCQlicmVhazsKLQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKG1hcG91dCAoJnMsIHRtcCkpIHJldHVybiAtRUlOVkFMOwotCXRtcFsyXSA9IDA7IHRtcFszXSA9IDA7Ci0JaWYgKGNvcHlfdG9fdXNlciAoKHUzMiBfX3VzZXIgKilBKHNldCksIHRtcCwgc2l6ZW9mKHRtcCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc193YWl0KHUzMiBzdGF0X2xvYykKLXsKLQl1bnNpZ25lZCBfX3VzZXIgKnAgPSAodW5zaWduZWQgX191c2VyICopQShzdGF0X2xvYyk7Ci0JaW50ICgqc3lzX3dhaXQ0KShwaWRfdCx1bnNpZ25lZCBfX3VzZXIgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKSA9Ci0JCShpbnQgKCopKHBpZF90LHVuc2lnbmVkIF9fdXNlciAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgX191c2VyICopKVNZUyh3YWl0NCk7Ci0JaW50IHJldCwgc3RhdHVzOwotCQotCXJldCA9IHN5c193YWl0NCgtMSwgcCwgV1VOVFJBQ0VELCBOVUxMKTsKLQlpZiAocmV0ID49IDAgJiYgc3RhdF9sb2MpIHsKLQkJaWYgKGdldF91c2VyIChzdGF0dXMsIHApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICgoKHN0YXR1cyAtIDEpICYgMHhmZmZmKSA8IDB4ZmYpCi0JCQlzdGF0dXMgPSBsaW51eF90b19zb2xhcmlzX3NpZ25hbHNbc3RhdHVzICYgMHg3Zl0gJiAweDdmOwotCQllbHNlIGlmICgoc3RhdHVzICYgMHhmZikgPT0gMHg3ZikKLQkJCXN0YXR1cyA9IChsaW51eF90b19zb2xhcmlzX3NpZ25hbHNbKHN0YXR1cyA+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgMHg3ZjsKLQkJaWYgKF9fcHV0X3VzZXIgKHN0YXR1cywgcCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc193YWl0aWQoaW50IGlkdHlwZSwgczMyIHBpZCwgdTMyIGluZm8sIGludCBvcHRpb25zKQotewotCWludCAoKnN5c193YWl0NCkocGlkX3QsdW5zaWduZWQgX191c2VyICosIGludCwgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKikgPQotCQkoaW50ICgqKShwaWRfdCx1bnNpZ25lZCBfX3VzZXIgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKSlTWVMod2FpdDQpOwotCWludCBvcHRzLCBzdGF0dXMsIHJldDsKLQkKLQlzd2l0Y2ggKGlkdHlwZSkgewotCWNhc2UgMDogLyogUF9QSUQgKi8gYnJlYWs7Ci0JY2FzZSAxOiAvKiBQX1BHSUQgKi8gcGlkID0gLXBpZDsgYnJlYWs7Ci0JY2FzZSA3OiAvKiBQX0FMTCAqLyBwaWQgPSAtMTsgYnJlYWs7Ci0JZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7Ci0JfQotCW9wdHMgPSAwOwotCWlmIChvcHRpb25zICYgU09MQVJJU19XVU5UUkFDRUQpIG9wdHMgfD0gV1VOVFJBQ0VEOwotCWlmIChvcHRpb25zICYgU09MQVJJU19XTk9IQU5HKSBvcHRzIHw9IFdOT0hBTkc7Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmV0ID0gc3lzX3dhaXQ0KHBpZCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilBKGluZm8pLCBvcHRzLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkgcmV0dXJuIHJldDsKLQlpZiAoaW5mbykgewotCQlzdHJ1Y3Qgc29sX3NpZ2luZm8gX191c2VyICpzID0gKHZvaWQgX191c2VyICopQShpbmZvKTsKLQkKLQkJaWYgKGdldF91c2VyIChzdGF0dXMsICh1bnNpZ25lZCBpbnQgX191c2VyICopQShpbmZvKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAoX19wdXRfdXNlciAoU09MQVJJU19TSUdDTEQsICZzLT5zaV9zaWdubykgfHwKLQkJICAgIF9fcHV0X3VzZXIgKHJldCwgJnMtPl9kYXRhLl9wcm9jLl9waWQpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJc3dpdGNoIChzdGF0dXMgJiAweGZmKSB7Ci0JCWNhc2UgMDogcmV0ID0gU09MQVJJU19DTERfRVhJVEVEOwotCQkJc3RhdHVzID0gKHN0YXR1cyA+PiA4KSAmIDB4ZmY7Ci0JCQlicmVhazsKLQkJY2FzZSAweDdmOgotCQkJc3RhdHVzID0gKHN0YXR1cyA+PiA4KSAmIDB4ZmY7Ci0JCQlzd2l0Y2ggKHN0YXR1cykgewotCQkJY2FzZSBTSUdTVE9QOgotCQkJY2FzZSBTSUdUU1RQOiByZXQgPSBTT0xBUklTX0NMRF9TVE9QUEVEOwotCQkJZGVmYXVsdDogcmV0ID0gU09MQVJJU19DTERfRVhJVEVEOwotCQkJfQotCQkJc3RhdHVzID0gbGludXhfdG9fc29sYXJpc19zaWduYWxzW3N0YXR1c107Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChzdGF0dXMgJiAweDgwKSByZXQgPSBTT0xBUklTX0NMRF9EVU1QRUQ7Ci0JCQllbHNlIHJldCA9IFNPTEFSSVNfQ0xEX0tJTExFRDsKLQkJCXN0YXR1cyA9IGxpbnV4X3RvX3NvbGFyaXNfc2lnbmFsc1tzdGF0dXMgJiAweDdmXTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKF9fcHV0X3VzZXIgKHJldCwgJnMtPnNpX2NvZGUpIHx8Ci0JCSAgICBfX3B1dF91c2VyIChzdGF0dXMsICZzLT5fZGF0YS5fcHJvYy5fcGRhdGEuX2NsZC5fc3RhdHVzKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotZXh0ZXJuIGludCBzdnI0X3NldGNvbnRleHQoc3ZyNF91Y29udGV4dF90ICpjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IHN2cjRfZ2V0Y29udGV4dChzdnI0X3Vjb250ZXh0X3QgKmMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19jb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN3aXRjaCAoKHVuc2lnbmVkKXJlZ3MtPnVfcmVnc1tVUkVHX0kwXSkgewotCWNhc2UgMDogLyogZ2V0Y29udGV4dCAqLwotCQlyZXR1cm4gc3ZyNF9nZXRjb250ZXh0KChzdnI0X3Vjb250ZXh0X3QgKikobG9uZykodTMyKXJlZ3MtPnVfcmVnc1tVUkVHX0kxXSwgcmVncyk7Ci0JY2FzZSAxOiAvKiBzZXRjb250ZXh0ICovCi0JCXJldHVybiBzdnI0X3NldGNvbnRleHQoKHN2cjRfdWNvbnRleHRfdCAqKShsb25nKSh1MzIpcmVncy0+dV9yZWdzW1VSRUdfSTFdLCByZWdzKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQotCX0KLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19zaWdhbHRzdGFjayh1MzIgc3MsIHUzMiBvc3MpCi17Ci0vKiBYWFggSW1wbGVtZW50IHRoaXMgc29vbiAqLwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc2lnbmFsLmggYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zaWduYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkxNTcwOC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9zaWduYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKiAkSWQ6IHNpZ25hbC5oLHYgMS4zIDE5OTgvMDQvMTIgMDY6MjA6MzMgZGF2ZW0gRXhwICQKLSAqIHNpZ25hbC5oOiBTaWduYWwgZW11bGF0aW9uIGZvciBTb2xhcmlzCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKi8KLSAgICAKLSNkZWZpbmUgU09MQVJJU19TSUdIVVAJCTEKLSNkZWZpbmUgU09MQVJJU19TSUdJTlQJCTIKLSNkZWZpbmUgU09MQVJJU19TSUdRVUlUCQkzCi0jZGVmaW5lIFNPTEFSSVNfU0lHSUxMCQk0Ci0jZGVmaW5lIFNPTEFSSVNfU0lHVFJBUAkJNQotI2RlZmluZSBTT0xBUklTX1NJR0lPVAkJNgotI2RlZmluZSBTT0xBUklTX1NJR0VNVAkJNwotI2RlZmluZSBTT0xBUklTX1NJR0ZQRQkJOAotI2RlZmluZSBTT0xBUklTX1NJR0tJTEwJCTkKLSNkZWZpbmUgU09MQVJJU19TSUdCVVMJCTEwCi0jZGVmaW5lIFNPTEFSSVNfU0lHU0VHVgkJMTEKLSNkZWZpbmUgU09MQVJJU19TSUdTWVMJCTEyCi0jZGVmaW5lIFNPTEFSSVNfU0lHUElQRQkJMTMKLSNkZWZpbmUgU09MQVJJU19TSUdBTFJNCQkxNAotI2RlZmluZSBTT0xBUklTX1NJR1RFUk0JCTE1Ci0jZGVmaW5lIFNPTEFSSVNfU0lHVVNSMQkJMTYKLSNkZWZpbmUgU09MQVJJU19TSUdVU1IyCQkxNwotI2RlZmluZSBTT0xBUklTX1NJR0NMRAkJMTgKLSNkZWZpbmUgU09MQVJJU19TSUdQV1IJCTE5Ci0jZGVmaW5lIFNPTEFSSVNfU0lHV0lOQ0gJMjAKLSNkZWZpbmUgU09MQVJJU19TSUdVUkcJCTIxCi0jZGVmaW5lIFNPTEFSSVNfU0lHUE9MTAkJMjIKLSNkZWZpbmUgU09MQVJJU19TSUdTVE9QCQkyMwotI2RlZmluZSBTT0xBUklTX1NJR1RTVFAJCTI0Ci0jZGVmaW5lIFNPTEFSSVNfU0lHQ09OVAkJMjUKLSNkZWZpbmUgU09MQVJJU19TSUdUVElOCQkyNgotI2RlZmluZSBTT0xBUklTX1NJR1RUT1UJCTI3Ci0jZGVmaW5lIFNPTEFSSVNfU0lHVlRBTFJNCTI4Ci0jZGVmaW5lIFNPTEFSSVNfU0lHUFJPRgkJMjkKLSNkZWZpbmUgU09MQVJJU19TSUdYQ1BVCQkzMAotI2RlZmluZSBTT0xBUklTX1NJR1hGU1oJCTMxCi0jZGVmaW5lIFNPTEFSSVNfU0lHV0FJVElORwkzMgotI2RlZmluZSBTT0xBUklTX1NJR0xXUAkJMzMKLSNkZWZpbmUgU09MQVJJU19TSUdGUkVFWkUJMzQKLSNkZWZpbmUgU09MQVJJU19TSUdUSEFXCQkzNQotI2RlZmluZSBTT0xBUklTX1NJR0NBTkNFTAkzNgotI2RlZmluZSBTT0xBUklTX1NJR1JUTUlOCTM3Ci0jZGVmaW5lIFNPTEFSSVNfU0lHUlRNQVgJNDQKLSNkZWZpbmUgU09MQVJJU19OU0lHTkFMUwk0NAotCi0KLSNkZWZpbmUgU09MQVJJU19TQV9PTlNUQUNLCTEKLSNkZWZpbmUgU09MQVJJU19TQV9SRVNFVEhBTkQJMgotI2RlZmluZSBTT0xBUklTX1NBX1JFU1RBUlQJNAotI2RlZmluZSBTT0xBUklTX1NBX1NJR0lORk8JOAotI2RlZmluZSBTT0xBUklTX1NBX05PREVGRVIJMTYKLSNkZWZpbmUgU09MQVJJU19TQV9OT0NMRFdBSVQJMHgxMDAwMAotI2RlZmluZSBTT0xBUklTX1NBX05PQ0xEU1RPUAkweDIwMDAwCi0KLXN0cnVjdCBzb2xfc2lnaW5mbyB7Ci0JaW50CXNpX3NpZ25vOwotCWludAlzaV9jb2RlOwotCWludAlzaV9lcnJubzsKLQl1bmlvbgl7Ci0JCWNoYXIJcGFkWzEyOC0zKnNpemVvZihpbnQpXTsKLQkJc3RydWN0IHsgCi0JCQlzMzIJX3BpZDsKLQkJCXVuaW9uIHsKLQkJCQlzdHJ1Y3QgewotCQkJCQlzMzIJX3VpZDsKLQkJCQkJczMyCV92YWx1ZTsKLQkJCQl9IF9raWxsOwotCQkJCXN0cnVjdCB7Ci0JCQkJCXMzMglfdXRpbWU7Ci0JCQkJCWludAlfc3RhdHVzOwotCQkJCQlzMzIJX3N0aW1lOwotCQkJCX0gX2NsZDsKLQkJCX0gX3BkYXRhOwotCQl9IF9wcm9jOwotCQlzdHJ1Y3QgeyAvKiBTSUdTRUdWLCBTSUdCVVMsIFNJR0lMTCBhbmQgU0lHRlBFICovCi0JCQl1MzIJX2FkZHI7Ci0JCQlpbnQJX3RyYXBubzsKLQkJfSBfZmF1bHQ7Ci0JCXN0cnVjdCB7IC8qIFNJR1BPTEwsIFNJR1hGU1ogKi8KLQkJCWludAlfZmQ7Ci0JCQlzMzIJX2JhbmQ7Ci0JCX0gX2ZpbGU7Ci0JfSBfZGF0YTsKLX07Ci0KLSNkZWZpbmUgU09MQVJJU19XVU5UUkFDRUQJMHgwNAotI2RlZmluZSBTT0xBUklTX1dOT0hBTkcJCTB4NDAKLSNkZWZpbmUgU09MQVJJU19XRVhJVEVEICAgICAgICAgMHgwMQotI2RlZmluZSBTT0xBUklTX1dUUkFQUEVEICAgICAgICAweDAyCi0jZGVmaW5lIFNPTEFSSVNfV1NUT1BQRUQgICAgICAgIFdVTlRSQUNFRAotI2RlZmluZSBTT0xBUklTX1dDT05USU5VRUQgICAgICAweDA4Ci0jZGVmaW5lIFNPTEFSSVNfV05PV0FJVCAgICAgICAgIDB4ODAKLQotI2RlZmluZSBTT0xBUklTX1RSQVBfQlJLUFQgICAgICAxCi0jZGVmaW5lIFNPTEFSSVNfVFJBUF9UUkFDRSAgICAgIDIKLSNkZWZpbmUgU09MQVJJU19DTERfRVhJVEVEICAgICAgMQotI2RlZmluZSBTT0xBUklTX0NMRF9LSUxMRUQgICAgICAyCi0jZGVmaW5lIFNPTEFSSVNfQ0xEX0RVTVBFRCAgICAgIDMKLSNkZWZpbmUgU09MQVJJU19DTERfVFJBUFBFRCAgICAgNAotI2RlZmluZSBTT0xBUklTX0NMRF9TVE9QUEVEICAgICA1Ci0jZGVmaW5lIFNPTEFSSVNfQ0xEX0NPTlRJTlVFRCAgIDYKLSNkZWZpbmUgU09MQVJJU19QT0xMX0lOICAgICAgICAgMQotI2RlZmluZSBTT0xBUklTX1BPTExfT1VUICAgICAgICAyCi0jZGVmaW5lIFNPTEFSSVNfUE9MTF9NU0cgICAgICAgIDMKLSNkZWZpbmUgU09MQVJJU19QT0xMX0VSUiAgICAgICAgNAotI2RlZmluZSBTT0xBUklTX1BPTExfUFJJICAgICAgICA1Ci0jZGVmaW5lIFNPTEFSSVNfUE9MTF9IVVAgICAgICAgIDYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3NvY2tldC5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjk4NDcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjEgKzAsMCBAQAotLyogJElkOiBzb2NrZXQuYyx2IDEuNiAyMDAyLzAyLzA4IDAzOjU3OjE0IGRhdmVtIEV4cCAkCi0gKiBzb2NrZXQuYzogU29ja2V0IHN5c2NhbGwgZW11bGF0aW9uIGZvciBTb2xhcmlzIDIuNisKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCi0gKgotICogMTk5OS0wOC0xOSBGaXhlZCBzb2NrZXRwYWlyIGNvZGUgCi0gKiAgICAgICAgICAgIEphc29uIFJhcHBsZXllIChyYXBwbGV5ZUBjY3IuYnVmZmFsby5lZHUpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0jaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgotCi0jaW5jbHVkZSAiY29udi5oIgotCi0jZGVmaW5lIFNPQ0tfU09MX1NUUkVBTQkJMgotI2RlZmluZSBTT0NLX1NPTF9ER1JBTQkJMQotI2RlZmluZSBTT0NLX1NPTF9SQVcJCTQKLSNkZWZpbmUgU09DS19TT0xfUkRNCQk1Ci0jZGVmaW5lIFNPQ0tfU09MX1NFUVBBQ0tFVAk2Ci0KLSNkZWZpbmUgU09MX1NPX1NORExPV0FUCQkweDEwMDMKLSNkZWZpbmUgU09MX1NPX1JDVkxPV0FUCQkweDEwMDQKLSNkZWZpbmUgU09MX1NPX1NORFRJTUVPCQkweDEwMDUKLSNkZWZpbmUgU09MX1NPX1JDVlRJTUVPCQkweDEwMDYKLSNkZWZpbmUgU09MX1NPX1NUQVRFCQkweDIwMDAKLQotI2RlZmluZSBTT0xfU1NfTkRFTEFZCQkweDA0MAotI2RlZmluZSBTT0xfU1NfTk9OQkxPQ0sJCTB4MDgwCi0jZGVmaW5lIFNPTF9TU19BU1lOQwkJMHgxMDAKLQotI2RlZmluZSBTT19TVEFURQkJMHgwMDBlCi0KLXN0YXRpYyBpbnQgc29ja2V0X2NoZWNrKGludCBmYW1pbHksIGludCB0eXBlKQotewotCWlmIChmYW1pbHkgIT0gUEZfVU5JWCAmJiBmYW1pbHkgIT0gUEZfSU5FVCkKLQkJcmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTT0NLX1NPTF9TVFJFQU06IHR5cGUgPSBTT0NLX1NUUkVBTTsgYnJlYWs7Ci0JY2FzZSBTT0NLX1NPTF9ER1JBTTogdHlwZSA9IFNPQ0tfREdSQU07IGJyZWFrOwotCWNhc2UgU09DS19TT0xfUkFXOiB0eXBlID0gU09DS19SQVc7IGJyZWFrOwotCWNhc2UgU09DS19TT0xfUkRNOiB0eXBlID0gU09DS19SRE07IGJyZWFrOwotCWNhc2UgU09DS19TT0xfU0VRUEFDS0VUOiB0eXBlID0gU09DS19TRVFQQUNLRVQ7IGJyZWFrOwotCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gdHlwZTsKLX0KLQotc3RhdGljIGludCBzb2xhcmlzX3RvX2xpbnV4X3NvY2tvcHQoaW50IG9wdG5hbWUpIAotewotCXN3aXRjaCAob3B0bmFtZSkgewotCWNhc2UgU09MX1NPX1NORExPV0FUOiBvcHRuYW1lID0gU09fU05ETE9XQVQ7IGJyZWFrOwotCWNhc2UgU09MX1NPX1JDVkxPV0FUOiBvcHRuYW1lID0gU09fUkNWTE9XQVQ7IGJyZWFrOwotCWNhc2UgU09MX1NPX1NORFRJTUVPOiBvcHRuYW1lID0gU09fU05EVElNRU87IGJyZWFrOwotCWNhc2UgU09MX1NPX1JDVlRJTUVPOiBvcHRuYW1lID0gU09fUkNWVElNRU87IGJyZWFrOwotCWNhc2UgU09MX1NPX1NUQVRFOiBvcHRuYW1lID0gU09fU1RBVEU7IGJyZWFrOwotCX07Ci0JCi0JcmV0dXJuIG9wdG5hbWU7Ci19Ci0JCi1hc21saW5rYWdlIGludCBzb2xhcmlzX3NvY2tldChpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQotewotCWludCAoKnN5c19zb2NrZXQpKGludCwgaW50LCBpbnQpID0KLQkJKGludCAoKikoaW50LCBpbnQsIGludCkpU1lTKHNvY2tldCk7Ci0KLQl0eXBlID0gc29ja2V0X2NoZWNrIChmYW1pbHksIHR5cGUpOwotCWlmICh0eXBlIDwgMCkgcmV0dXJuIHR5cGU7Ci0JcmV0dXJuIHN5c19zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90b2NvbCk7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc29ja2V0cGFpcihpbnQgKnVzb2NrdmVjKQotewotCWludCAoKnN5c19zb2NrZXRwYWlyKShpbnQsIGludCwgaW50LCBpbnQgKikgPQotCQkoaW50ICgqKShpbnQsIGludCwgaW50LCBpbnQgKikpU1lTKHNvY2tldHBhaXIpOwotCi0JLyogc29sYXJpcyBzb2NrZXRwYWlyIHJlYWxseSBvbmx5IHRha2VzIG9uZSBhcmcgYXQgdGhlIHN5c2NhbGwKLQkgKiBsZXZlbCwgaW50ICogdXNvY2t2ZWMuIFRoZSBsaWJzIGFwcGFyZW50bHkgdGFrZSBjYXJlIG9mIAotCSAqIG1ha2luZyBzdXJlIHRoYXQgZmFtaWx5PT1BRl9VTklYIGFuZCB0eXBlPT1TT0NLX1NUUkVBTS4gVGhlIAotCSAqIHBvaW50ZXIgd2UgcmVhbGx5IHdhbnQgZW5kcyB1cCByZXNpZGluZyBpbiB0aGUgZmlyc3QgKGFuZAotCSAqIHN1cHBvc2VkbHkgb25seSkgYXJndW1lbnQuCi0JICovCi0KLQlyZXR1cm4gc3lzX3NvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIChpbnQgKil1c29ja3ZlYyk7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJsZW4pCi17Ci0JaW50ICgqc3lzX2JpbmQpKGludCwgc3RydWN0IHNvY2thZGRyICosIGludCkgPQotCQkoaW50ICgqKShpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpKVNVTk9TKDEwNCk7Ci0KLQlyZXR1cm4gc3lzX2JpbmQoZmQsIGFkZHIsIGFkZHJsZW4pOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX3NldHNvY2tvcHQoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCB1MzIgb3B0dmFsLCBpbnQgb3B0bGVuKQotewotCWludCAoKnN1bm9zX3NldHNvY2tvcHQpKGludCwgaW50LCBpbnQsIHUzMiwgaW50KSA9Ci0JCShpbnQgKCopKGludCwgaW50LCBpbnQsIHUzMiwgaW50KSlTVU5PUygxMDUpOwotCi0Jb3B0bmFtZSA9IHNvbGFyaXNfdG9fbGludXhfc29ja29wdChvcHRuYW1lKTsKLQlpZiAob3B0bmFtZSA8IDApCi0JCXJldHVybiBvcHRuYW1lOwotCWlmIChvcHRuYW1lID09IFNPX1NUQVRFKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBzdW5vc19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX2dldHNvY2tvcHQoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCB1MzIgb3B0dmFsLCB1MzIgb3B0bGVuKQotewotCWludCAoKnN1bm9zX2dldHNvY2tvcHQpKGludCwgaW50LCBpbnQsIHUzMiwgdTMyKSA9Ci0JCShpbnQgKCopKGludCwgaW50LCBpbnQsIHUzMiwgdTMyKSlTVU5PUygxMTgpOwotCi0Jb3B0bmFtZSA9IHNvbGFyaXNfdG9fbGludXhfc29ja29wdChvcHRuYW1lKTsKLQlpZiAob3B0bmFtZSA8IDApCi0JCXJldHVybiBvcHRuYW1lOwotCi0JaWYgKG9wdG5hbWUgPT0gU09fU1RBVEUpCi0JCW9wdG5hbWUgPSBTT0xfU09fU1RBVEU7Ci0KLQlyZXR1cm4gc3Vub3NfZ2V0c29ja29wdChmZCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqYWRkciwgaW50IGFkZHJsZW4pCi17Ci0JaW50ICgqc3lzX2Nvbm5lY3QpKGludCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQpID0KLQkJKGludCAoKikoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCkpU1lTKGNvbm5lY3QpOwotCi0JcmV0dXJuIHN5c19jb25uZWN0KGZkLCBhZGRyLCBhZGRybGVuKTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19hY2NlcHQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICphZGRyLCBpbnQgX191c2VyICphZGRybGVuKQotewotCWludCAoKnN5c19hY2NlcHQpKGludCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQgX191c2VyICopID0KLQkJKGludCAoKikoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCBfX3VzZXIgKikpU1lTKGFjY2VwdCk7Ci0KLQlyZXR1cm4gc3lzX2FjY2VwdChmZCwgYWRkciwgYWRkcmxlbik7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfbGlzdGVuKGludCBmZCwgaW50IGJhY2tsb2cpCi17Ci0JaW50ICgqc3lzX2xpc3RlbikoaW50LCBpbnQpID0KLQkJKGludCAoKikoaW50LCBpbnQpKVNVTk9TKDEwNik7Ci0KLQlyZXR1cm4gc3lzX2xpc3RlbihmZCwgYmFja2xvZyk7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc2h1dGRvd24oaW50IGZkLCBpbnQgaG93KQotewotCWludCAoKnN5c19zaHV0ZG93bikoaW50LCBpbnQpID0KLQkJKGludCAoKikoaW50LCBpbnQpKVNZUyhzaHV0ZG93bik7Ci0KLQlyZXR1cm4gc3lzX3NodXRkb3duKGZkLCBob3cpOwotfQotCi0jZGVmaW5lIE1TR19TT0xfT09CCQkweDEKLSNkZWZpbmUgTVNHX1NPTF9QRUVLCQkweDIKLSNkZWZpbmUgTVNHX1NPTF9ET05UUk9VVEUJMHg0Ci0jZGVmaW5lIE1TR19TT0xfRU9SCQkweDgKLSNkZWZpbmUgTVNHX1NPTF9DVFJVTkMJCTB4MTAKLSNkZWZpbmUgTVNHX1NPTF9UUlVOQwkJMHgyMAotI2RlZmluZSBNU0dfU09MX1dBSVRBTEwJCTB4NDAKLSNkZWZpbmUgTVNHX1NPTF9ET05UV0FJVAkweDgwCi0KLXN0YXRpYyBpbnQgc29sYXJpc190b19saW51eF9tc2dmbGFncyhpbnQgZmxhZ3MpCi17Ci0JaW50IGZsID0gZmxhZ3MgJiAoTVNHX09PQnxNU0dfUEVFS3xNU0dfRE9OVFJPVVRFKTsKLQkKLQlpZiAoZmxhZ3MgJiBNU0dfU09MX0VPUikgZmwgfD0gTVNHX0VPUjsKLQlpZiAoZmxhZ3MgJiBNU0dfU09MX0NUUlVOQykgZmwgfD0gTVNHX0NUUlVOQzsKLQlpZiAoZmxhZ3MgJiBNU0dfU09MX1RSVU5DKSBmbCB8PSBNU0dfVFJVTkM7Ci0JaWYgKGZsYWdzICYgTVNHX1NPTF9XQUlUQUxMKSBmbCB8PSBNU0dfV0FJVEFMTDsKLQlpZiAoZmxhZ3MgJiBNU0dfU09MX0RPTlRXQUlUKSBmbCB8PSBNU0dfRE9OVFdBSVQ7Ci0JcmV0dXJuIGZsOwotfQotCi1zdGF0aWMgaW50IGxpbnV4X3RvX3NvbGFyaXNfbXNnZmxhZ3MoaW50IGZsYWdzKQotewotCWludCBmbCA9IGZsYWdzICYgKE1TR19PT0J8TVNHX1BFRUt8TVNHX0RPTlRST1VURSk7Ci0JCi0JaWYgKGZsYWdzICYgTVNHX0VPUikgZmwgfD0gTVNHX1NPTF9FT1I7Ci0JaWYgKGZsYWdzICYgTVNHX0NUUlVOQykgZmwgfD0gTVNHX1NPTF9DVFJVTkM7Ci0JaWYgKGZsYWdzICYgTVNHX1RSVU5DKSBmbCB8PSBNU0dfU09MX1RSVU5DOwotCWlmIChmbGFncyAmIE1TR19XQUlUQUxMKSBmbCB8PSBNU0dfU09MX1dBSVRBTEw7Ci0JaWYgKGZsYWdzICYgTVNHX0RPTlRXQUlUKSBmbCB8PSBNU0dfU09MX0RPTlRXQUlUOwotCXJldHVybiBmbDsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19yZWN2ZnJvbShpbnQgcywgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGxlbiwgaW50IGZsYWdzLCB1MzIgZnJvbSwgdTMyIGZyb21sZW4pCi17Ci0JaW50ICgqc3lzX3JlY3Zmcm9tKShpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCwgdW5zaWduZWQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKSA9Ci0JCShpbnQgKCopKGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCB1bnNpZ25lZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQgX191c2VyICopKVNZUyhyZWN2ZnJvbSk7Ci0JCi0JcmV0dXJuIHN5c19yZWN2ZnJvbShzLCBidWYsIGxlbiwgc29sYXJpc190b19saW51eF9tc2dmbGFncyhmbGFncyksIEEoZnJvbSksIEEoZnJvbWxlbikpOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX3JlY3YoaW50IHMsIGNoYXIgX191c2VyICpidWYsIGludCBsZW4sIGludCBmbGFncykKLXsKLQlpbnQgKCpzeXNfcmVjdmZyb20pKGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCB1bnNpZ25lZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQgX191c2VyICopID0KLQkJKGludCAoKikoaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QsIHVuc2lnbmVkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCBfX3VzZXIgKikpU1lTKHJlY3Zmcm9tKTsKLQkKLQlyZXR1cm4gc3lzX3JlY3Zmcm9tKHMsIGJ1ZiwgbGVuLCBzb2xhcmlzX3RvX2xpbnV4X21zZ2ZsYWdzKGZsYWdzKSwgTlVMTCwgTlVMTCk7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc2VuZHRvKGludCBzLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuLCBpbnQgZmxhZ3MsIHUzMiB0bywgdTMyIHRvbGVuKQotewotCWludCAoKnN5c19zZW5kdG8pKGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCB1bnNpZ25lZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQgX191c2VyICopID0KLQkJKGludCAoKikoaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QsIHVuc2lnbmVkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCBfX3VzZXIgKikpU1lTKHNlbmR0byk7Ci0JCi0JcmV0dXJuIHN5c19zZW5kdG8ocywgYnVmLCBsZW4sIHNvbGFyaXNfdG9fbGludXhfbXNnZmxhZ3MoZmxhZ3MpLCBBKHRvKSwgQSh0b2xlbikpOwotfQotCi1hc21saW5rYWdlIGludCBzb2xhcmlzX3NlbmQoaW50IHMsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IGZsYWdzKQotewotCWludCAoKnN5c19zZW5kdG8pKGludCwgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopID0KLQkJKGludCAoKikoaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQgKikpU1lTKHNlbmR0byk7Ci0JCi0JcmV0dXJuIHN5c19zZW5kdG8ocywgYnVmLCBsZW4sIHNvbGFyaXNfdG9fbGludXhfbXNnZmxhZ3MoZmxhZ3MpLCBOVUxMLCBOVUxMKTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19nZXRwZWVybmFtZShpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKQotewotCWludCAoKnN5c19nZXRwZWVybmFtZSkoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopID0KLQkJKGludCAoKikoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopKVNZUyhnZXRwZWVybmFtZSk7Ci0KLQlyZXR1cm4gc3lzX2dldHBlZXJuYW1lKGZkLCBhZGRyLCBhZGRybGVuKTsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19nZXRzb2NrbmFtZShpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKQotewotCWludCAoKnN5c19nZXRzb2NrbmFtZSkoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopID0KLQkJKGludCAoKikoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopKVNZUyhnZXRzb2NrbmFtZSk7Ci0KLQlyZXR1cm4gc3lzX2dldHNvY2tuYW1lKGZkLCBhZGRyLCBhZGRybGVuKTsKLX0KLQotLyogWFhYIFRoaXMgcmVhbGx5IGJlbG9uZ3MgaW4gc29tZSBoZWFkZXIgZmlsZS4uLiAtRGF2ZU0gKi8KLSNkZWZpbmUgTUFYX1NPQ0tfQUREUgkxMjgJCS8qIDEwOCBmb3IgVW5peCBkb21haW4gLSAKLQkJCQkJICAgMTYgZm9yIElQLCAxNiBmb3IgSVBYLAotCQkJCQkgICAyNCBmb3IgSVB2NiwKLQkJCQkJICAgYWJvdXQgODAgZm9yIEFYLjI1ICovCi0KLXN0cnVjdCBzb2xfbm1zZ2hkciB7Ci0JdTMyCQltc2dfbmFtZTsKLQlpbnQJCW1zZ19uYW1lbGVuOwotCXUzMgkJbXNnX2lvdjsKLQl1MzIJCW1zZ19pb3ZsZW47Ci0JdTMyCQltc2dfY29udHJvbDsKLQl1MzIJCW1zZ19jb250cm9sbGVuOwotCXUzMgkJbXNnX2ZsYWdzOwotfTsKLQotc3RydWN0IHNvbF9jbXNnaGRyIHsKLQl1MzIJCWNtc2dfbGVuOwotCWludAkJY21zZ19sZXZlbDsKLQlpbnQJCWNtc2dfdHlwZTsKLQl1bnNpZ25lZCBjaGFyCWNtc2dfZGF0YVswXTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1zZ2hkcl9mcm9tX3VzZXIzMl90b19rZXJuKHN0cnVjdCBtc2doZHIgKmttc2csCi0JCQkJCSAgICAgc3RydWN0IHNvbF9ubXNnaGRyIF9fdXNlciAqdW1zZykKLXsKLQl1MzIgdG1wMSwgdG1wMiwgdG1wMzsKLQlpbnQgZXJyOwotCi0JZXJyID0gZ2V0X3VzZXIodG1wMSwgJnVtc2ctPm1zZ19uYW1lKTsKLQllcnIgfD0gX19nZXRfdXNlcih0bXAyLCAmdW1zZy0+bXNnX2lvdik7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIodG1wMywgJnVtc2ctPm1zZ19jb250cm9sKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWttc2ctPm1zZ19uYW1lID0gQSh0bXAxKTsKLQlrbXNnLT5tc2dfaW92ID0gQSh0bXAyKTsKLQlrbXNnLT5tc2dfY29udHJvbCA9IEEodG1wMyk7Ci0KLQllcnIgPSBnZXRfdXNlcihrbXNnLT5tc2dfbmFtZWxlbiwgJnVtc2ctPm1zZ19uYW1lbGVuKTsKLQllcnIgfD0gZ2V0X3VzZXIoa21zZy0+bXNnX2NvbnRyb2xsZW4sICZ1bXNnLT5tc2dfY29udHJvbGxlbik7Ci0JZXJyIHw9IGdldF91c2VyKGttc2ctPm1zZ19mbGFncywgJnVtc2ctPm1zZ19mbGFncyk7Ci0JCi0Ja21zZy0+bXNnX2ZsYWdzID0gc29sYXJpc190b19saW51eF9tc2dmbGFncyhrbXNnLT5tc2dfZmxhZ3MpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfc2VuZG1zZyhpbnQgZmQsIHN0cnVjdCBzb2xfbm1zZ2hkciBfX3VzZXIgKnVzZXJfbXNnLCB1bnNpZ25lZCB1c2VyX2ZsYWdzKQotewotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JY2hhciBhZGRyZXNzW01BWF9TT0NLX0FERFJdOwotCXN0cnVjdCBpb3ZlYyBpb3ZzdGFja1tVSU9fRkFTVElPVl0sICppb3YgPSBpb3ZzdGFjazsKLQl1bnNpZ25lZCBjaGFyIGN0bFtzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgMjBdOwotCXVuc2lnbmVkIGNoYXIgKmN0bF9idWYgPSBjdGw7Ci0Jc3RydWN0IG1zZ2hkciBtc2dfc3lzOwotCWludCBlcnIsIGN0bF9sZW4sIGlvdl9zaXplLCB0b3RhbF9sZW47Ci0KLQllcnIgPSAtRUZBVUxUOwotCWlmIChtc2doZHJfZnJvbV91c2VyMzJfdG9fa2VybigmbXNnX3N5cywgdXNlcl9tc2cpKQotCQlnb3RvIG91dDsKLQotCXNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKTsKLQlpZiAoIXNvY2spCi0JCWdvdG8gb3V0OwotCi0JLyogZG8gbm90IG1vdmUgYmVmb3JlIG1zZ19zeXMgaXMgdmFsaWQgKi8KLQllcnIgPSAtRU1TR1NJWkU7Ci0JaWYgKG1zZ19zeXMubXNnX2lvdmxlbiA+IFVJT19NQVhJT1YpCi0JCWdvdG8gb3V0X3B1dDsKLQotCS8qIENoZWNrIHdoZXRoZXIgdG8gYWxsb2NhdGUgdGhlIGlvdmVjIGFyZWEqLwotCWVyciA9IC1FTk9NRU07Ci0JaW92X3NpemUgPSBtc2dfc3lzLm1zZ19pb3ZsZW4gKiBzaXplb2Yoc3RydWN0IGlvdmVjKTsKLQlpZiAobXNnX3N5cy5tc2dfaW92bGVuID4gVUlPX0ZBU1RJT1YpIHsKLQkJaW92ID0gc29ja19rbWFsbG9jKHNvY2stPnNrLCBpb3Zfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghaW92KQotCQkJZ290byBvdXRfcHV0OwotCX0KLQotCWVyciA9IHZlcmlmeV9jb21wYXRfaW92ZWMoJm1zZ19zeXMsIGlvdiwgYWRkcmVzcywgVkVSSUZZX1JFQUQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9mcmVlaW92OwotCXRvdGFsX2xlbiA9IGVycjsKLQotCWVyciA9IC1FTk9CVUZTOwotCWlmIChtc2dfc3lzLm1zZ19jb250cm9sbGVuID4gSU5UX01BWCkKLQkJZ290byBvdXRfZnJlZWlvdjsKLQotCWN0bF9sZW4gPSBtc2dfc3lzLm1zZ19jb250cm9sbGVuOwotCWlmIChjdGxfbGVuKSB7Ci0JCXN0cnVjdCBzb2xfY21zZ2hkciBfX3VzZXIgKnVjbXNnID0gbXNnX3N5cy5tc2dfY29udHJvbDsKLQkJdW5zaWduZWQgbG9uZyAqa2Ntc2c7Ci0JCWNvbXBhdF9zaXplX3QgY21sZW47Ci0KLQkJZXJyID0gLUVJTlZBTDsKLQkJaWYgKGN0bF9sZW4gPD0gc2l6ZW9mKGNvbXBhdF9zaXplX3QpKQotCQkJZ290byBvdXRfZnJlZWlvdjsKLQotCQlpZiAoY3RsX2xlbiA+IHNpemVvZihjdGwpKSB7Ci0JCQllcnIgPSAtRU5PQlVGUzsKLQkJCWN0bF9idWYgPSBrbWFsbG9jKGN0bF9sZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKCFjdGxfYnVmKQotCQkJCWdvdG8gb3V0X2ZyZWVpb3Y7Ci0JCX0KLQkJX19nZXRfdXNlcihjbWxlbiwgJnVjbXNnLT5jbXNnX2xlbik7Ci0JCWtjbXNnID0gKHVuc2lnbmVkIGxvbmcgKikgY3RsX2J1ZjsKLQkJKmtjbXNnKysgPSAodW5zaWduZWQgbG9uZyljbWxlbjsKLQkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtjbXNnLCAmdWNtc2ctPmNtc2dfbGV2ZWwsCi0JCQkJICAgY3RsX2xlbiAtIHNpemVvZihjb21wYXRfc2l6ZV90KSkpCi0JCQlnb3RvIG91dF9mcmVlY3RsOwotCQltc2dfc3lzLm1zZ19jb250cm9sID0gY3RsX2J1ZjsKLQl9Ci0JbXNnX3N5cy5tc2dfZmxhZ3MgPSBzb2xhcmlzX3RvX2xpbnV4X21zZ2ZsYWdzKHVzZXJfZmxhZ3MpOwotCi0JaWYgKHNvY2stPmZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQltc2dfc3lzLm1zZ19mbGFncyB8PSBNU0dfRE9OVFdBSVQ7Ci0JZXJyID0gc29ja19zZW5kbXNnKHNvY2ssICZtc2dfc3lzLCB0b3RhbF9sZW4pOwotCi1vdXRfZnJlZWN0bDoKLQlpZiAoY3RsX2J1ZiAhPSBjdGwpICAgIAotCQlzb2NrX2tmcmVlX3Moc29jay0+c2ssIGN0bF9idWYsIGN0bF9sZW4pOwotb3V0X2ZyZWVpb3Y6Ci0JaWYgKGlvdiAhPSBpb3ZzdGFjaykKLQkJc29ja19rZnJlZV9zKHNvY2stPnNrLCBpb3YsIGlvdl9zaXplKTsKLW91dF9wdXQ6Ci0Jc29ja2ZkX3B1dChzb2NrKTsKLW91dDogICAgICAgCi0JcmV0dXJuIGVycjsKLX0KLQotYXNtbGlua2FnZSBpbnQgc29sYXJpc19yZWN2bXNnKGludCBmZCwgc3RydWN0IHNvbF9ubXNnaGRyIF9fdXNlciAqdXNlcl9tc2csIHVuc2lnbmVkIGludCB1c2VyX2ZsYWdzKQotewotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IGlvdmVjIGlvdnN0YWNrW1VJT19GQVNUSU9WXTsKLQlzdHJ1Y3QgaW92ZWMgKmlvdiA9IGlvdnN0YWNrOwotCXN0cnVjdCBtc2doZHIgbXNnX3N5czsKLQl1bnNpZ25lZCBsb25nIGNtc2dfcHRyOwotCWludCBlcnIsIGlvdl9zaXplLCB0b3RhbF9sZW4sIGxlbjsKLQotCS8qIGtlcm5lbCBtb2RlIGFkZHJlc3MgKi8KLQljaGFyIGFkZHJbTUFYX1NPQ0tfQUREUl07Ci0KLQkvKiB1c2VyIG1vZGUgYWRkcmVzcyBwb2ludGVycyAqLwotCXN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVhZGRyOwotCWludCBfX3VzZXIgKnVhZGRyX2xlbjsKLQotCWlmIChtc2doZHJfZnJvbV91c2VyMzJfdG9fa2VybigmbXNnX3N5cywgdXNlcl9tc2cpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKTsKLQlpZiAoIXNvY2spCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gLUVNU0dTSVpFOwotCWlmIChtc2dfc3lzLm1zZ19pb3ZsZW4gPiBVSU9fTUFYSU9WKQotCQlnb3RvIG91dF9wdXQ7Ci0KLQkvKiBDaGVjayB3aGV0aGVyIHRvIGFsbG9jYXRlIHRoZSBpb3ZlYyBhcmVhKi8KLQllcnIgPSAtRU5PTUVNOwotCWlvdl9zaXplID0gbXNnX3N5cy5tc2dfaW92bGVuICogc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7Ci0JaWYgKG1zZ19zeXMubXNnX2lvdmxlbiA+IFVJT19GQVNUSU9WKSB7Ci0JCWlvdiA9IHNvY2tfa21hbGxvYyhzb2NrLT5zaywgaW92X3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWlvdikKLQkJCWdvdG8gb3V0X3B1dDsKLQl9Ci0KLQkvKgotCSAqCVNhdmUgdGhlIHVzZXItbW9kZSBhZGRyZXNzICh2ZXJpZnlfaW92ZWMgd2lsbCBjaGFuZ2UgdGhlCi0JICoJa2VybmVsIG1zZ2hkciB0byB1c2UgdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlKQotCSAqLwotCSAKLQl1YWRkciA9ICh2b2lkIF9fdXNlciAqKSBtc2dfc3lzLm1zZ19uYW1lOwotCXVhZGRyX2xlbiA9ICZ1c2VyX21zZy0+bXNnX25hbWVsZW47Ci0JZXJyID0gdmVyaWZ5X2NvbXBhdF9pb3ZlYygmbXNnX3N5cywgaW92LCBhZGRyLCBWRVJJRllfV1JJVEUpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9mcmVlaW92OwotCXRvdGFsX2xlbiA9IGVycjsKLQotCWNtc2dfcHRyID0gKHVuc2lnbmVkIGxvbmcpIG1zZ19zeXMubXNnX2NvbnRyb2w7Ci0JbXNnX3N5cy5tc2dfZmxhZ3MgPSBNU0dfQ01TR19DT01QQVQ7Ci0KLQlpZiAoc29jay0+ZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCi0JCXVzZXJfZmxhZ3MgfD0gTVNHX0RPTlRXQUlUOwotCi0JZXJyID0gc29ja19yZWN2bXNnKHNvY2ssICZtc2dfc3lzLCB0b3RhbF9sZW4sIHVzZXJfZmxhZ3MpOwotCWlmKGVyciA8IDApCi0JCWdvdG8gb3V0X2ZyZWVpb3Y7Ci0KLQlsZW4gPSBlcnI7Ci0KLQlpZiAodWFkZHIgIT0gTlVMTCkgewotCQllcnIgPSBtb3ZlX2FkZHJfdG9fdXNlcihhZGRyLCBtc2dfc3lzLm1zZ19uYW1lbGVuLCB1YWRkciwgdWFkZHJfbGVuKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dF9mcmVlaW92OwotCX0KLQllcnIgPSBfX3B1dF91c2VyKGxpbnV4X3RvX3NvbGFyaXNfbXNnZmxhZ3MobXNnX3N5cy5tc2dfZmxhZ3MpLCAmdXNlcl9tc2ctPm1zZ19mbGFncyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZnJlZWlvdjsKLQllcnIgPSBfX3B1dF91c2VyKCh1bnNpZ25lZCBsb25nKW1zZ19zeXMubXNnX2NvbnRyb2wgLSBjbXNnX3B0ciwKLQkJCSAmdXNlcl9tc2ctPm1zZ19jb250cm9sbGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9mcmVlaW92OwotCWVyciA9IGxlbjsKLQotb3V0X2ZyZWVpb3Y6Ci0JaWYgKGlvdiAhPSBpb3ZzdGFjaykKLQkJc29ja19rZnJlZV9zKHNvY2stPnNrLCBpb3YsIGlvdl9zaXplKTsKLW91dF9wdXQ6Ci0Jc29ja2ZkX3B1dChzb2NrKTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzM2NDExLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3NvY2tzeXMuYworKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKiAkSWQ6IHNvY2tzeXMuYyx2IDEuMjEgMjAwMi8wMi8wOCAwMzo1NzoxNCBkYXZlbSBFeHAgJAotICogc29ja3N5cy5jOiAvZGV2L2luZXQvIHN0dWZmIGZvciBTb2xhcmlzIGVtdWxhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBQYXRyaWsgUmFrIChwcmFrMzI2NEBzczEwMDAubXMubWZmLmN1bmkuY3opCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgTWlrZSBKYWdkaXMgKGphZ2d5QHB1cnBsZXQuZGVtb24uY28udWspCi0gKi8KLQotLyoKLSAqICBEYXZlLCBfcGxlYXNlXyBnaXZlIG1lIHNwZWNpZmljYXRpb25zIG9uIHRoaXMgZnNja2luZyBtZXNzIHNvIHRoYXQgSQotICogY291bGQgYXQgbGVhc3QgZ2V0IGl0IGludG8gdGhlIHN0YXRlIHdoZW4gaXQgd291bGRuJ3Qgc2NyZXcgdGhlIHJlc3Qgb2YKLSAqIHRoZSBrZXJuZWwgb3Zlci4gIHNvY2tzeXMuYyBhbmQgdGltb2QuYyBfc3RpbmtfIGFuZCB3ZSBhcmUgbm90IHRhbGtpbmcKLSAqIEgyUyBoZXJlLCBpdCdzIGlzb3Byb3BpbG1lcmNhcHRhbiBpbiBjb25jZW50cmF0aW9ucyB3YXkgb3ZlciBMRDUwLiAtLSBBVgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdGVybWlvcy5oPgotCi0jaW5jbHVkZSAiY29udi5oIgotI2luY2x1ZGUgInNvY2tzeXMuaCIKLQotc3RhdGljIGludCBhZl9pbmV0X3Byb3RvY29sc1tdID0gewotSVBQUk9UT19JQ01QLCBJUFBST1RPX0lDTVAsIElQUFJPVE9fSUdNUCwgSVBQUk9UT19JUElQLCBJUFBST1RPX1RDUCwKLUlQUFJPVE9fRUdQLCBJUFBST1RPX1BVUCwgSVBQUk9UT19VRFAsIElQUFJPVE9fSURQLCBJUFBST1RPX1JBVywKLTAsIDAsIDAsIDAsIDAsIDAsCi19OwotCi0jaWZuZGVmIERFQlVHX1NPTEFSSVNfS01BTExPQwotCi0jZGVmaW5lIG15a21hbGxvYyBrbWFsbG9jCi0jZGVmaW5lIG15a2ZyZWUga2ZyZWUKLQotI2Vsc2UKLQotZXh0ZXJuIHZvaWQgKiBteWttYWxsb2Moc2l6ZV90IHMsIGdmcF90IGdmcCk7Ci1leHRlcm4gdm9pZCBteWtmcmVlKHZvaWQgKik7Ci0KLSNlbmRpZgotCi1zdGF0aWMgdW5zaWduZWQgaW50ICgqc29ja19wb2xsKShzdHJ1Y3QgZmlsZSAqLCBwb2xsX3RhYmxlICopOwotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzb2Nrc3lzX2ZpbGVfb3BzID0gewotCS8qIEN1cnJlbnRseSBlbXB0eSAqLwotfTsKLQotc3RhdGljIGludCBzb2Nrc3lzX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQlpbnQgZmFtaWx5LCB0eXBlLCBwcm90b2NvbCwgZmQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCWludCAoKnN5c19zb2NrZXQpKGludCxpbnQsaW50KSA9Ci0JCShpbnQgKCopKGludCxpbnQsaW50KSlTVU5PUyg5Nyk7Ci0gICAgICAgIHN0cnVjdCBzb2xfc29ja2V0X3N0cnVjdCAqIHNvY2s7Ci0JCi0JZmFtaWx5ID0gKChpbWlub3IoaW5vZGUpID4+IDQpICYgMHhmKTsKLQlzd2l0Y2ggKGZhbWlseSkgewotCWNhc2UgQUZfVU5JWDoKLQkJdHlwZSA9IFNPQ0tfU1RSRUFNOwotCQlwcm90b2NvbCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDoKLQkJcHJvdG9jb2wgPSBhZl9pbmV0X3Byb3RvY29sc1tpbWlub3IoaW5vZGUpICYgMHhmXTsKLQkJc3dpdGNoIChwcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOiB0eXBlID0gU09DS19TVFJFQU07IGJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOiB0eXBlID0gU09DS19ER1JBTTsgYnJlYWs7Ci0JCWRlZmF1bHQ6IHR5cGUgPSBTT0NLX1JBVzsgYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJdHlwZSA9IFNPQ0tfUkFXOwotCQlwcm90b2NvbCA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWZkID0gc3lzX3NvY2tldChmYW1pbHksIHR5cGUsIHByb3RvY29sKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gZmQ7Ci0JLyoKLQkgKiBOLkIuIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgbm90IGxlZ2FsIQotCSAqCi0JICogTm8gc2hpdC4gIFdURiBpcyBpdCBzdXBwb3NlZCB0byBkbywgYW55d2F5PwotCSAqCi0JICogVHJ5IGluc3RlYWQ6Ci0JICogZF9kZWxldGUoZmlscC0+Zl9wYXRoLmRlbnRyeSksIHRoZW4gZF9pbnN0YW50aWF0ZSB3aXRoIHNvY2sgaW5vZGUKLQkgKi8KLQlkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwotCWZpbHAtPmZfcGF0aC5kZW50cnkgPSBkZ2V0KGZjaGVjayhmZCktPmZfcGF0aC5kZW50cnkpOwotCWZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcmRldiA9IGlub2RlLT5pX3JkZXY7Ci0JZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9mbG9jayA9IGlub2RlLT5pX2Zsb2NrOwotCVNPQ0tFVF9JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5maWxlID0gZmlscDsKLQlmaWxwLT5mX29wID0gJnNvY2tzeXNfZmlsZV9vcHM7Ci0gICAgICAgIHNvY2sgPSAoc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0KikgCi0gICAgICAgIAlteWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2xfc29ja2V0X3N0cnVjdCksIEdGUF9LRVJORUwpOwotICAgICAgICBpZiAoIXNvY2spIHJldHVybiAtRU5PTUVNOwotCVNPTEREKCgic29jaz0lMDE2bHgoJTAxNmx4KVxuIiwgc29jaywgZmlscCkpOwotICAgICAgICBzb2NrLT5tYWdpYyA9IFNPTEFSSVNfU09DS0VUX01BR0lDOwotICAgICAgICBzb2NrLT5tb2Rjb3VudCA9IDA7Ci0gICAgICAgIHNvY2stPnN0YXRlID0gVFNfVU5CTkQ7Ci0gICAgICAgIHNvY2stPm9mZnNldCA9IDA7Ci0gICAgICAgIHNvY2stPnBmaXJzdCA9IHNvY2stPnBsYXN0ID0gTlVMTDsKLSAgICAgICAgZmlscC0+cHJpdmF0ZV9kYXRhID0gc29jazsKLQlTT0xERCgoImZpbHAtPnByaXZhdGVfZGF0YSAlMDE2bHhcbiIsIGZpbHAtPnByaXZhdGVfZGF0YSkpOwotCi0Jc3lzX2Nsb3NlKGZkKTsKLQlkcHV0KGRlbnRyeSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc29ja3N5c19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCi17Ci0gICAgICAgIHN0cnVjdCBzb2xfc29ja2V0X3N0cnVjdCAqIHNvY2s7Ci0gICAgICAgIHN0cnVjdCBUX3ByaW1zZyAqaXQ7Ci0KLQkvKiBYWFg6IGNoZWNrIHRoaXMgKi8KLQlzb2NrID0gKHN0cnVjdCBzb2xfc29ja2V0X3N0cnVjdCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKLQlTT0xERCgoInNvY2sgcmVsZWFzZSAlMDE2bHgoJTAxNmx4KVxuIiwgc29jaywgZmlscCkpOwotCWl0ID0gc29jay0+cGZpcnN0OwotCXdoaWxlIChpdCkgewotCQlzdHJ1Y3QgVF9wcmltc2cgKm5leHQgPSBpdC0+bmV4dDsKLQkJCi0JCVNPTEREKCgic29ja3N5c19yZWxlYXNlICUwMTZseC0+JTAxNmx4XG4iLCBpdCwgbmV4dCkpOwotCQlteWtmcmVlKChjaGFyKilpdCk7Ci0JCWl0ID0gbmV4dDsKLQl9Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlTT0xERCgoInNvY2tzeXNfcmVsZWFzZSAlMDE2bHhcbiIsIHNvY2spKTsKLQlteWtmcmVlKChjaGFyKilzb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzb2Nrc3lzX3BvbGwoc3RydWN0IGZpbGUgKiBmaWxwLCBwb2xsX3RhYmxlICogd2FpdCkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlubzsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0KLQlpbm89ZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpZiAoaW5vICYmIFNfSVNTT0NLKGluby0+aV9tb2RlKSkgewotCQlzdHJ1Y3Qgc29sX3NvY2tldF9zdHJ1Y3QgKnNvY2s7Ci0JCXNvY2sgPSAoc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0KilmaWxwLT5wcml2YXRlX2RhdGE7Ci0JCWlmIChzb2NrICYmIHNvY2stPnBmaXJzdCkgewotCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCQkJaWYgKHNvY2stPnBmaXJzdC0+cHJpID09IE1TR19ISVBSSSkKLQkJCQltYXNrIHw9IFBPTExQUkk7Ci0JCX0KLQl9Ci0JaWYgKHNvY2tfcG9sbCkKLQkJbWFzayB8PSAoKnNvY2tfcG9sbCkoZmlscCwgd2FpdCk7Ci0JcmV0dXJuIG1hc2s7Ci19Ci0JCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzb2Nrc3lzX2ZvcHMgPSB7Ci0JLm9wZW4gPQkJc29ja3N5c19vcGVuLAotCS5yZWxlYXNlID0Jc29ja3N5c19yZWxlYXNlLAotfTsKLQotaW50IF9faW5pdCBpbml0X3NvY2tzeXModm9pZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBmaWxlICogZmlsZTsKLQlpbnQgKCpzeXNfc29ja2V0KShpbnQsaW50LGludCkgPQotCQkoaW50ICgqKShpbnQsaW50LGludCkpU1VOT1MoOTcpOwotCWludCAoKnN5c19jbG9zZSkodW5zaWduZWQgaW50KSA9IAotCQkoaW50ICgqKSh1bnNpZ25lZCBpbnQpKVNZUyhjbG9zZSk7Ci0JCi0JcmV0ID0gcmVnaXN0ZXJfY2hyZGV2ICgzMCwgInNvY2tzeXMiLCAmc29ja3N5c19mb3BzKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsgKCJDb3VsZG4ndCByZWdpc3RlciBzb2Nrc3lzIGNoYXJhY3RlciBkZXZpY2VcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBzeXNfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrICgiQ291bGRuJ3QgY3JlYXRlIHNvY2tldFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZmlsZSA9IGZjaGVjayhyZXQpOwotCS8qIE4uQi4gSXMgdGhpcyB2YWxpZD8gU3VwcG9zZSB0aGUgZl9vcHMgYXJlIGluIGEgbW9kdWxlIC4uLiAqLwotCXNvY2tzeXNfZmlsZV9vcHMgPSAqZmlsZS0+Zl9vcDsKLQlzeXNfY2xvc2UocmV0KTsKLQlzb2NrX3BvbGwgPSBzb2Nrc3lzX2ZpbGVfb3BzLnBvbGw7Ci0Jc29ja3N5c19maWxlX29wcy5wb2xsID0gc29ja3N5c19wb2xsOwotCXNvY2tzeXNfZmlsZV9vcHMucmVsZWFzZSA9IHNvY2tzeXNfcmVsZWFzZTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2V4aXQgY2xlYW51cF9zb2Nrc3lzKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9jaHJkZXYoMzAsICJzb2Nrc3lzIik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2Nrc3lzLmggYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2Nrc3lzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMWI3OGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qICRJZDogc29ja3N5cy5oLHYgMS4yIDE5OTgvMDMvMjYgMDg6NDY6MDcgamogRXhwICQKLSAqIHNvY2tzeXMuaDogRGVmaW5pdGlvbnMgZm9yIFNUUkVBTVMgbW9kdWxlcyBlbXVsYXRpb24gY29kZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggUGF0cmlrIFJhayAocHJhazMyNjRAc3MxMDAwLm1zLm1mZi5jdW5pLmN6KQotICovCi0KLSNkZWZpbmUgTVNHX0hJUFJJCTB4MDEKLSNkZWZpbmUgTVNHX0FOWQkJMHgwMgotI2RlZmluZSBNU0dfQkFORAkweDA0Ci0KLSNkZWZpbmUgTU9SRUNUTAkJMQotI2RlZmluZSBNT1JFREFUQQkyCi0KLSNkZWZpbmUJVEJBREFERFIJCTEKLSNkZWZpbmUJVEJBRE9QVAkJCTIKLSNkZWZpbmUJVEFDQ0VTCQkJMwotI2RlZmluZSBUQkFERgkJCTQKLSNkZWZpbmUgVE5PQUREUgkJCTUKLSNkZWZpbmUgVE9VVFNUQVRFCSAgICAgICAgNgotI2RlZmluZSBUQkFEU0VRCQkgICAgICAgIDcKLSNkZWZpbmUgVFNZU0VSUgkJCTgKLSNkZWZpbmUgVExPT0sJCSAgICAgICAgOQotI2RlZmluZSBUQkFEREFUQQkgICAgICAgMTAKLSNkZWZpbmUgVEJVRk9WRkxXCSAgICAgICAxMQotI2RlZmluZSBURkxPVwkJICAgICAgIDEyCi0jZGVmaW5lCVROT0RBVEEJCSAgICAgICAxMwotI2RlZmluZSBUTk9ESVMJCSAgICAgICAxNAotI2RlZmluZSBUTk9VREVSUgkgICAgICAgMTUKLSNkZWZpbmUgVEJBREZMQUcJICAgICAgIDE2Ci0jZGVmaW5lIFROT1JFTAkJICAgICAgIDE3Ci0jZGVmaW5lIFROT1RTVVBQT1JUCSAgICAgICAxOAotI2RlZmluZSBUU1RBVEVDSE5HCSAgICAgICAxOQotCi0jZGVmaW5lIFRfQ09OTl9SRVEgICAgICAwCi0jZGVmaW5lIFRfQ09OTl9SRVMgICAgICAxCi0jZGVmaW5lIFRfRElTQ09OX1JFUSAgICAyCi0jZGVmaW5lIFRfREFUQV9SRVEgICAgICAzCi0jZGVmaW5lIFRfRVhEQVRBX1JFUSAgICA0Ci0jZGVmaW5lIFRfSU5GT19SRVEgICAgICA1Ci0jZGVmaW5lIFRfQklORF9SRVEgICAgICA2Ci0jZGVmaW5lIFRfVU5CSU5EX1JFUSAgICA3Ci0jZGVmaW5lIFRfVU5JVERBVEFfUkVRICA4Ci0jZGVmaW5lIFRfT1BUTUdNVF9SRVEgICA5Ci0jZGVmaW5lIFRfT1JEUkVMX1JFUSAgICAxMAotCi0jZGVmaW5lIFRfQ09OTl9JTkQgICAgICAxMQotI2RlZmluZSBUX0NPTk5fQ09OICAgICAgMTIKLSNkZWZpbmUgVF9ESVNDT05fSU5EICAgIDEzCi0jZGVmaW5lIFRfREFUQV9JTkQgICAgICAxNAotI2RlZmluZSBUX0VYREFUQV9JTkQgICAgMTUKLSNkZWZpbmUgVF9JTkZPX0FDSyAgICAgIDE2Ci0jZGVmaW5lIFRfQklORF9BQ0sgICAgICAxNwotI2RlZmluZSBUX0VSUk9SX0FDSyAgICAgMTgKLSNkZWZpbmUgVF9PS19BQ0sgICAgICAgIDE5Ci0jZGVmaW5lIFRfVU5JVERBVEFfSU5EICAyMAotI2RlZmluZSBUX1VERVJST1JfSU5EICAgMjEKLSNkZWZpbmUgVF9PUFRNR01UX0FDSyAgIDIyCi0jZGVmaW5lIFRfT1JEUkVMX0lORCAgICAyMwotCi0jZGVmaW5lIFRfTkVHT1RJQVRFCTB4MDAwNAotI2RlZmluZSBUX0ZBSUxVUkUJMHgwMDQwCi0KLSNkZWZpbmUgVFNfVU5CTkQJMAkvKiB1bmJvdW5kICovCi0jZGVmaW5lCVRTX1dBQ0tfQlJFUQkxCS8qIHdhaXRpbmcgZm9yIFRfQklORF9SRVEgYWNrICAqLwotI2RlZmluZSBUU19XQUNLX1VSRVEJMgkvKiB3YWl0aW5nIGZvciBUX1VOQklORF9SRVEgYWNrICovCi0jZGVmaW5lIFRTX0lETEUJCTMJLyogaWRsZSAqLwotI2RlZmluZSBUU19XQUNLX09QVFJFUQk0CS8qIHdhaXRpbmcgZm9yIFRfT1BUTUdNVF9SRVEgYWNrICovCi0jZGVmaW5lIFRTX1dBQ0tfQ1JFUQk1CS8qIHdhaXRpbmcgZm9yIFRfQ09OTl9SRVEgYWNrICovCi0jZGVmaW5lIFRTX1dDT05fQ1JFUQk2CS8qIHdhaXRpbmcgZm9yIFRfQ09OTl9SRVEgY29uZmlybWF0aW9uICovCi0jZGVmaW5lCVRTX1dSRVNfQ0lORAk3CS8qIHdhaXRpbmcgZm9yIFRfQ09OTl9JTkQgKi8KLSNkZWZpbmUgVFNfV0FDS19DUkVTCTgJLyogd2FpdGluZyBmb3IgVF9DT05OX1JFUyBhY2sgKi8KLSNkZWZpbmUgVFNfREFUQV9YRkVSCTkJLyogZGF0YSB0cmFuc2ZlciAqLwotI2RlZmluZSBUU19XSU5EX09SRFJFTAkxMAkvKiByZWxlYXNpbmcgcmVhZCBidXQgbm90IHdyaXRlICovCi0jZGVmaW5lIFRTX1dSRVFfT1JEUkVMCTExICAgICAgLyogd2FpdCB0byByZWxlYXNlIHdyaXRlIGJ1dCBub3QgcmVhZCAqLwotI2RlZmluZSBUU19XQUNLX0RSRVE2CTEyCS8qIHdhaXRpbmcgZm9yIFRfRElTQ09OX1JFUSBhY2sgKi8KLSNkZWZpbmUgVFNfV0FDS19EUkVRNwkxMwkvKiB3YWl0aW5nIGZvciBUX0RJU0NPTl9SRVEgYWNrICovCi0jZGVmaW5lIFRTX1dBQ0tfRFJFUTkJMTQJLyogd2FpdGluZyBmb3IgVF9ESVNDT05fUkVRIGFjayAqLwotI2RlZmluZSBUU19XQUNLX0RSRVExMAkxNQkvKiB3YWl0aW5nIGZvciBUX0RJU0NPTl9SRVEgYWNrICovCi0jZGVmaW5lIFRTX1dBQ0tfRFJFUTExCTE2CS8qIHdhaXRpbmcgZm9yIFRfRElTQ09OX1JFUSBhY2sgKi8KLSNkZWZpbmUgVFNfTk9TVEFURVMJMTcKLQotc3RydWN0IFRfY29ubl9yZXEgewotCXMzMiBQUklNX3R5cGU7IAotCXMzMiBERVNUX2xlbmd0aDsKLQlzMzIgREVTVF9vZmZzZXQ7Ci0JczMyIE9QVF9sZW5ndGg7Ci0JczMyIE9QVF9vZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgVF9iaW5kX3JlcSB7Ci0JczMyIFBSSU1fdHlwZTsKLQlzMzIgQUREUl9sZW5ndGg7Ci0JczMyIEFERFJfb2Zmc2V0OwotCXUzMiBDT05JTkRfbnVtYmVyOwotfTsKLQotc3RydWN0IFRfdW5pdGRhdGFfcmVxIHsKLQlzMzIgUFJJTV90eXBlOyAKLQlzMzIgREVTVF9sZW5ndGg7Ci0JczMyIERFU1Rfb2Zmc2V0OwotCXMzMiBPUFRfbGVuZ3RoOwotCXMzMiBPUFRfb2Zmc2V0OwotfTsKLQotc3RydWN0IFRfb3B0bWdtdF9yZXEgewotCXMzMiBQUklNX3R5cGU7IAotCXMzMiBPUFRfbGVuZ3RoOwotCXMzMiBPUFRfb2Zmc2V0OwotCXMzMiBNR01UX2ZsYWdzOwotfTsKLQotc3RydWN0IFRfYmluZF9hY2sgewotCXMzMiBQUklNX3R5cGU7Ci0JczMyIEFERFJfbGVuZ3RoOwotCXMzMiBBRERSX29mZnNldDsKLQl1MzIgQ09OSU5EX251bWJlcjsKLX07Ci0KLXN0cnVjdCBUX2Vycm9yX2FjayB7Ci0JczMyIFBSSU1fdHlwZTsKLQlzMzIgRVJST1JfcHJpbTsKLQlzMzIgVExJX2Vycm9yOwotCXMzMiBVTklYX2Vycm9yOwotfTsKLQotc3RydWN0IFRfb2tfYWNrIHsKLQlzMzIgUFJJTV90eXBlOwotCXMzMiBDT1JSRUNUX3ByaW07Ci19OwotCi1zdHJ1Y3QgVF9jb25uX2luZCB7Ci0JczMyIFBSSU1fdHlwZTsKLQlzMzIgU1JDX2xlbmd0aDsKLQlzMzIgU1JDX29mZnNldDsKLQlzMzIgT1BUX2xlbmd0aDsKLQlzMzIgT1BUX29mZnNldDsKLQlzMzIgU0VRX251bWJlcjsKLX07Ci0KLXN0cnVjdCBUX2Nvbm5fY29uIHsKLQlzMzIgUFJJTV90eXBlOwotCXMzMiBSRVNfbGVuZ3RoOwotCXMzMiBSRVNfb2Zmc2V0OwotCXMzMiBPUFRfbGVuZ3RoOwotCXMzMiBPUFRfb2Zmc2V0OwotfTsKLQotc3RydWN0IFRfZGlzY29uX2luZCB7Ci0JczMyIFBSSU1fdHlwZTsKLQlzMzIgRElTQ09OX3JlYXNvbjsKLQlzMzIgU0VRX251bWJlcjsKLX07Ci0KLXN0cnVjdCBUX3VuaXRkYXRhX2luZCB7Ci0JczMyIFBSSU1fdHlwZTsKLQlzMzIgU1JDX2xlbmd0aDsKLQlzMzIgU1JDX29mZnNldDsKLQlzMzIgT1BUX2xlbmd0aDsKLQlzMzIgT1BUX29mZnNldDsKLX07Ci0KLXN0cnVjdCBUX29wdG1nbXRfYWNrIHsKLQlzMzIgUFJJTV90eXBlOyAKLQlzMzIgT1BUX2xlbmd0aDsKLQlzMzIgT1BUX29mZnNldDsKLQlzMzIgTUdNVF9mbGFnczsKLX07Ci0KLXN0cnVjdCBvcHRoZHIgewotCXMzMiBsZXZlbDsKLQlzMzIgbmFtZTsKLQlzMzIgbGVuOwotCWNoYXIgdmFsdWVbMF07CQotfTsKLQotc3RydWN0IFRfcHJpbXNnIHsKLQlzdHJ1Y3QgVF9wcmltc2cgKm5leHQ7Ci0JdW5zaWduZWQgY2hhciBwcmk7Ci0JdW5zaWduZWQgY2hhciBiYW5kOwotCWludCBsZW5ndGg7Ci0JczMyIHR5cGU7Ci19OwotCi1zdHJ1Y3Qgc3RyYnVmIHsKLQlzMzIgbWF4bGVuOwotCXMzMiBsZW47Ci0JdTMyIGJ1ZjsKLX0gOwotCi0vKiBDb25zdGFudHMgdXNlZCBieSBTVFJFQU1TIG1vZHVsZXMgZW11bGF0aW9uIGNvZGUgKi8KLQotdHlwZWRlZiBjaGFyIHNvbF9tb2R1bGU7Ci0KLSNkZWZpbmUgTUFYX05SX1NUUkVBTV9NT0RVTEVTICAgMTYKLQotLyogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBhc3NpZ25lZCB0byBzb2NrZXRzLiAqLwotCi1zdHJ1Y3Qgc29sX3NvY2tldF9zdHJ1Y3QgewotICAgICAgICBpbnQgbWFnaWM7Ci0gICAgICAgIGludCBtb2Rjb3VudDsKLSAgICAgICAgc29sX21vZHVsZSBtb2R1bGVbTUFYX05SX1NUUkVBTV9NT0RVTEVTXTsKLSAgICAgICAgbG9uZyBzdGF0ZTsKLSAgICAgICAgaW50IG9mZnNldDsKLSAgICAgICAgc3RydWN0IFRfcHJpbXNnICpwZmlyc3QsICpwbGFzdDsKLX07Ci0KLSNkZWZpbmUgU09MQVJJU19TT0NLRVRfTUFHSUMgICAgMHhBRERFRAotCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9zeXN0YmwuUyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3N5c3RibC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDQzY2ExLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3N5c3RibC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qICRJZDogc3lzdGJsLlMsdiAxLjExIDIwMDAvMDMvMTMgMjE6NTc6MzUgZGF2ZW0gRXhwICQKLSAqIHN5c3RibC5TOiBTeXN0ZW0gY2FsbCBlbnRyeSBwb2ludCB0YWJsZSBmb3IgU29sYXJpcyBjb21wYXRpYmlsaXR5LgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NywxOTk4IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAbnVjbGVjdS51bmFtLm14KQotICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0KLS8qIEZhbGwgYmFjayB0byBzeXNfY2FsbF90YWJsZTMyIGVudHJ5ICovCi0jZGVmaW5lIENIQUlOKG5hbWUpCV9fTlJfIyNuYW1lCi0KLS8qIFBhc3MgcHRfcmVncyBwb2ludGVyIGFzIGZpcnN0IGFyZ3VtZW50ICovCi0jZGVmaW5lIFJFR1MobmFtZSkJbmFtZSsxCi0KLS8qIEhhY2sgdGlsbCBhbGwgYmUgaW1wbGVtZW50ZWQgKi8KLSNkZWZpbmUgc29sYXJpc19nZXRwbXNnCQlzb2xhcmlzX3VuaW1wbGVtZW50ZWQKLSNkZWZpbmUgc29sYXJpc19ocnRzeXMJCXNvbGFyaXNfdW5pbXBsZW1lbnRlZAotI2RlZmluZSBzb2xhcmlzX21zZ3N5cwkJc29sYXJpc191bmltcGxlbWVudGVkCi0jZGVmaW5lIHNvbGFyaXNfcHV0cG1zZwkJc29sYXJpc191bmltcGxlbWVudGVkCi0jZGVmaW5lIHNvbGFyaXNfc2Vtc3lzCQlzb2xhcmlzX3VuaW1wbGVtZW50ZWQKLQotICAgICAgICAuZGF0YQotCS5nbG9ibAkJc29sYXJpc19zeXNfdGFibGUKLXNvbGFyaXNfc3lzX3RhYmxlOgotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBub3N5cwkJMAkqLwotCS53b3JkIENIQUlOKGV4aXQpCQkvKiBleGl0CQlkCTEJKi8KLQkud29yZCBDSEFJTihmb3JrKQkJLyogZm9yawkJCTIJKi8KLQkud29yZCBDSEFJTihyZWFkKQkJLyogcmVhZAkJZHBkCTMJKi8KLQkud29yZCBDSEFJTih3cml0ZSkJCS8qIHdyaXRlCWRwZAk0CSovCi0JLndvcmQgc29sYXJpc19vcGVuCQkvKiBvcGVuCQlzb28JNQkqLwotCS53b3JkIENIQUlOKGNsb3NlKQkJLyogY2xvc2UJZAk2CSovCi0JLndvcmQgc29sYXJpc193YWl0CQkvKiB3YWl0CQl4eHgJNwkqLwotCS53b3JkIENIQUlOKGNyZWF0KQkJLyogY3JlYXQJc28JOAkqLwotCS53b3JkIENIQUlOKGxpbmspCQkvKiBsaW5rCQlzcwk5CSovCi0JLndvcmQgQ0hBSU4odW5saW5rKQkJLyogdW5saW5rCXMJMTAJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogZXhlYwkJc3h4CTExCSovCi0JLndvcmQgQ0hBSU4oY2hkaXIpCQkvKiBjaGRpcglzCTEyCSovCi0JLndvcmQgQ0hBSU4odGltZSkJCS8qIHRpbWUJCQkxMwkqLwotCS53b3JkIHNvbGFyaXNfbWtub2QJCS8qIG1rbm9kCXNveAkxNAkqLwotCS53b3JkIENIQUlOKGNobW9kKQkJLyogY2htb2QJc28JMTUJKi8gCi0JLndvcmQgQ0hBSU4oY2hvd24pCQkvKiBjaG93bglzZGQJMTYJKi8KLQkud29yZCBzb2xhcmlzX2JyawkJLyogYnJrL2JyZWFrCXgJMTcJKi8KLQkud29yZCBzb2xhcmlzX3N0YXQJCS8qIHN0YXQJCXNwCTE4CSovCi0JLndvcmQgQ0hBSU4obHNlZWspCQkvKiBzZWVrL2xzZWVrCWRkZAkxOQkqLwotCS53b3JkIHNvbGFyaXNfZ2V0cGlkCQkvKiBnZXRwaWQJCTIwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIG1vdW50CQkyMQkqLwotCS53b3JkIENIQUlOKHVtb3VudCkJCS8qIHVtb3VudAlzCTIyCSovCi0JLndvcmQgQ0hBSU4oc2V0dWlkKQkJLyogc2V0dWlkCWQJMjMJKi8KLQkud29yZCBzb2xhcmlzX2dldHVpZAkJLyogZ2V0dWlkCQkyNAkqLwotCS53b3JkIENIQUlOKHN0aW1lKQkJLyogc3RpbWUJZAkyNQkqLwotI2lmIDAKLQkud29yZCBzb2xhcmlzX3B0cmFjZQkJLyogcHRyYWNlCXhkeHgJMjYJKi8KLSNlbHNlCi0JLndvcmQgQ0hBSU4ocHRyYWNlKQkJLyogcHRyYWNlCXhkeHgJMjYJKi8KLSNlbmRpZgotCS53b3JkIENIQUlOKGFsYXJtKQkJLyogYWxhcm0JZAkyNwkqLwotCS53b3JkIHNvbGFyaXNfZnN0YXQJCS8qIGZzdGF0CWRwCTI4CSovCi0JLndvcmQgQ0hBSU4ocGF1c2UpCQkvKiBwYXVzZQkJMjkJKi8KLQkud29yZCBDSEFJTih1dGltZSkJCS8qIHV0aW1lCXh4CTMwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIHN0dHkJCQkzMQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBndHR5CQkJMzIJKi8KLQkud29yZCBzb2xhcmlzX2FjY2VzcwkJLyogYWNjZXNzCXNvCTMzCSovCi0JLndvcmQgQ0hBSU4obmljZSkJCS8qIG5pY2UJCWQJMzQJKi8KLQkud29yZCBzb2xhcmlzX3N0YXRmcwkJLyogc3RhdGZzCXNwZGQJMzUJKi8KLQkud29yZCBDSEFJTihzeW5jKQkJLyogc3luYwkJCTM2CSovCi0JLndvcmQgc29sYXJpc19raWxsCQkvKiBraWxsCQlkZAkzNwkqLwotCS53b3JkIHNvbGFyaXNfZnN0YXRmcwkJLyogZnN0YXRmcwlkcGRkCTM4CSovCi0JLndvcmQgc29sYXJpc19wcm9jaWRzCQkvKiBwZ3Jwc3lzCWRkZAkzOQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiB4ZW5peAkJNDAJKi8KLQkud29yZCBDSEFJTihkdXApCQkvKiBkdXAJCWQJNDEJKi8KLQkud29yZCBDSEFJTihwaXBlKQkJLyogcGlwZQkJCTQyCSovCi0JLndvcmQgQ0hBSU4odGltZXMpCQkvKiB0aW1lcwlwCTQzCSovCi0JLndvcmQgNDQgLypDSEFJTihwcm9maWwpKi8JLyogcHJvZgkJeHh4eAk0NAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsb2NrL3Bsb2NrCQk0NQkqLwotCS53b3JkIENIQUlOKHNldGdpZCkJCS8qIHNldGdpZAlkCTQ2CSovCi0JLndvcmQgc29sYXJpc19nZXRnaWQJCS8qIGdldGdpZAkJNDcJKi8KLQkud29yZCBzb2xhcmlzX3NpZ2Z1bmMJCS8qIHNpZ2Z1bmMJeHgJNDgJKi8KLQkud29yZCBSRUdTKHNvbGFyaXNfbXNnc3lzKQkvKiBtc2dzeXMJZHhkZGQJNDkJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogc3lzc3VuLzNiCQk1MAkqLwotCS53b3JkIENIQUlOKGFjY3QpCQkvKiBhY2N0L3N5c2FjY3QJeAk1MQkqLwotCS53b3JkIHNvbGFyaXNfc2htc3lzCQkvKiBzaG1zeXMJZGR4bwk1MgkqLwotCS53b3JkIFJFR1Moc29sYXJpc19zZW1zeXMpCS8qIHNlbXN5cwlkZGR4CTUzCSovCi0JLndvcmQgc29sYXJpc19pb2N0bAkJLyogaW9jdGwJZHh4CTU0CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIHVhZG1pbgl4eHgJNTUJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogcmVzZXJ2ZWQ6ZXhjaAk1NgkqLwotCS53b3JkIHNvbGFyaXNfdXRzc3lzCQkvKiB1dHNzeXMJeAk1NwkqLwotCS53b3JkIENIQUlOKGZzeW5jKQkJLyogZnN5bmMJZAk1OAkqLwotCS53b3JkIENIQUlOKGV4ZWN2ZSkJCS8qIGV4ZWN2CXNwcAk1OQkqLwotCS53b3JkIENIQUlOKHVtYXNrKQkJLyogdW1hc2sJbwk2MAkqLwotCS53b3JkIENIQUlOKGNocm9vdCkJCS8qIGNocm9vdAlzCTYxCSovCi0JLndvcmQgc29sYXJpc19mY250bAkJLyogZmNudGwJZHh4CTYyCSovCi0JLndvcmQgc29sYXJpc191bGltaXQJCS8qIHVsaW1pdAl4eAk2MwkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiA/CQkJNjQJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogPwkJCTY1CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qID8JCQk2NgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiA/CQkJNjcJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogPwkJCTY4CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qID8JCQk2OQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBhZHZmcwkJNzAJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogdW5hZHZmcwkJNzEJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogcm1vdW50CQk3MgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBydW1vdW50CQk3MwkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiByZnN0YXJ0CQk3NAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiA/CQkJNzUJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogcmRlYnVnCQk3NgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiByZnN0b3AJCTc3CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIHJmc3lzCQk3OAkqLwotCS53b3JkIENIQUlOKHJtZGlyKQkJLyogcm1kaXIJcwk3OQkqLwotCS53b3JkIENIQUlOKG1rZGlyKQkJLyogbWtkaXIJc28JODAJKi8KLQkud29yZCBDSEFJTihnZXRkZW50cykJCS8qIGdldGRlbnRzCWR4ZAk4MQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsaWJhdHRhY2gJCTgyCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGxpYmRldGFjaAkJODMJKi8KLQkud29yZCBDSEFJTihzeXNmcykJCS8qIHN5c2ZzCWR4eAk4NAkqLwotCS53b3JkIHNvbGFyaXNfZ2V0bXNnCQkvKiBnZXRtc2cJZHh4eAk4NQkqLwotCS53b3JkIHNvbGFyaXNfcHV0bXNnCQkvKiBwdXRtc2cJZHh4ZAk4NgkqLwotCS53b3JkIENIQUlOKHBvbGwpCQkvKiBwb2xsCQl4ZGQJODcJKi8KLQkud29yZCBzb2xhcmlzX2xzdGF0CQkvKiBsc3RhdAlzcAk4OAkqLwotCS53b3JkIENIQUlOKHN5bWxpbmspCQkvKiBzeW1saW5rCXNzCTg5CSovCi0JLndvcmQgQ0hBSU4ocmVhZGxpbmspCQkvKiByZWFkbGluawlzcGQJOTAJKi8KLQkud29yZCBDSEFJTihzZXRncm91cHMpCQkvKiBzZXRncm91cHMJZHAJOTEJKi8KLQkud29yZCBDSEFJTihnZXRncm91cHMpCQkvKiBnZXRncm91cHMJZHAJOTIJKi8KLQkud29yZCBDSEFJTihmY2htb2QpCQkvKiBmY2htb2QJZG8JOTMJKi8KLQkud29yZCBDSEFJTihmY2hvd24pCQkvKiBmY2hvd24JZGRkCTk0CSovCi0JLndvcmQgc29sYXJpc19zaWdwcm9jbWFzawkvKiBzaWdwcm9jbWFzawlkeHgJOTUJKi8KLQkud29yZCBzb2xhcmlzX3NpZ3N1c3BlbmQJLyogc2lnc3VzcGVuZAl4CTk2CSovCi0JLndvcmQgc29sYXJpc19zaWdhbHRzdGFjawkvKiBzaWdhbHRzdGFjawl4eAk5NwkqLwotCS53b3JkIHNvbGFyaXNfc2lnYWN0aW9uCQkvKiBzaWdhY3Rpb24JZHh4CTk4CSovCi0JLndvcmQgc29sYXJpc19zaWdwZW5kaW5nCS8qIHNpZ3BlbmRpbmcJZGQJOTkJKi8KLQkud29yZCBSRUdTKHNvbGFyaXNfY29udGV4dCkJLyogY29udGV4dAkJMTAwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGV2c3lzCQkxMDEJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogZXZ0cmFwcmV0CQkxMDIJKi8KLQkud29yZCBzb2xhcmlzX3N0YXR2ZnMJCS8qIHN0YXR2ZnMJc3AJMTAzCSovCi0JLndvcmQgc29sYXJpc19mc3RhdHZmcwkJLyogZnN0YXR2ZnMJZHAJMTA0CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIHVua25vd24JCTEwNQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBuZnNzeXMJCTEwNgkqLwotCS53b3JkIHNvbGFyaXNfd2FpdGlkCQkvKiB3YWl0aWQJZGR4ZAkxMDcJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogc2lnc2VuZHN5cwlkZGQJMTA4CSovCi0JLndvcmQgUkVHUyhzb2xhcmlzX2hydHN5cykJLyogaHJ0c3lzCXh4eAkxMDkJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogYWNhbmNlbAlkeGQJMTEwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGFzeW5jCQkxMTEJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogcHJpb2NudGxzeXMJCTExMgkqLwotCS53b3JkIHNvbGFyaXNfcGF0aGNvbmYJCS8qIHBhdGhjb25mCXNkCTExMwkqLwotCS53b3JkIENIQUlOKG1pbmNvcmUpCQkvKiBtaW5jb3JlCWQJMTE0CSovCi0JLndvcmQgc29sYXJpc19tbWFwCQkvKiBtbWFwCQl4eHh4ZHgJMTE1CSovCi0JLndvcmQgQ0hBSU4obXByb3RlY3QpCQkvKiBtcHJvdGVjdAl4ZHgJMTE2CSovCi0JLndvcmQgQ0hBSU4obXVubWFwKQkJLyogbXVubWFwCXhkCTExNwkqLwotCS53b3JkIHNvbGFyaXNfZnBhdGhjb25mCQkvKiBmcGF0aGNvbmYJZGQJMTE4CSovCi0JLndvcmQgQ0hBSU4oZm9yaykJCS8qIGZvcmsJCQkxMTkJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogZmNoZGlyCWQJMTIwCSovCi0JLndvcmQgQ0hBSU4ocmVhZHYpCQkvKiByZWFkdglkeGQJMTIxCSovCi0JLndvcmQgQ0hBSU4od3JpdGV2KQkJLyogd3JpdGV2CWR4ZAkxMjIJKi8KLQkud29yZCBzb2xhcmlzX3hzdGF0CQkvKiB4c3RhdAlkc3gJMTIzCSovCi0JLndvcmQgc29sYXJpc19seHN0YXQJCS8qIGx4c3RhdAlkc3gJMTI0CSovCi0JLndvcmQgc29sYXJpc19meHN0YXQJCS8qIGZ4c3RhdAlkZHgJMTI1CSovCi0JLndvcmQgc29sYXJpc194bWtub2QJCS8qIHhta25vZAlkc294CTEyNgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBzeXNsb2NhbAlkCTEyNwkqLwotCS53b3JkIHNvbGFyaXNfc2V0cmxpbWl0CQkvKiBzZXRybGltaXQJZHAJMTI4CSovCi0JLndvcmQgc29sYXJpc19nZXRybGltaXQJCS8qIGdldHJsaW1pdAlkcAkxMjkJKi8KLQkud29yZCBDSEFJTihjaG93bikJCS8qIGxjaG93bglzZGQJMTMwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIG1lbWNudGwJCTEzMQkqLwotCS53b3JkIHNvbGFyaXNfZ2V0cG1zZwkJLyogZ2V0cG1zZwlkeHh4eAkxMzIJKi8KLQkud29yZCBzb2xhcmlzX3B1dHBtc2cJCS8qIHB1dHBtc2cJZHh4ZGQJMTMzCSovCi0JLndvcmQgQ0hBSU4ocmVuYW1lKQkJLyogcmVuYW1lCXNzCTEzNAkqLwotCS53b3JkIHNvbGFyaXNfdXRzbmFtZQkJLyogdW5hbWUJeAkxMzUJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogc2V0ZWdpZAkJMTM2CSovCi0JLndvcmQgc29sYXJpc19zeXNjb25mCQkvKiBzeXNjb25maWcJZAkxMzcJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogYWRqdGltZQkJMTM4CSovCi0JLndvcmQgc29sYXJpc19zeXNpbmZvCQkvKiBzeXN0ZW1pbmZvCWRzZAkxMzkJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogPwkJCTE0MAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBzZXRldWlkCQkxNDEJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogPwkJCTE0MgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiA/CQkJMTQzCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIHNlY3N5cwlkeAkxNDQJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogZmlsZXByaXYJc2R4ZAkxNDUJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogcHJvY3ByaXYJZHhkCTE0NgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBkZXZzdGF0CXNkeAkxNDcJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogYWNsaXBjCWRkZGR4CTE0OAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBmZGV2c3RhdAlkZHgJMTQ5CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGZsdmxmaWxlCWRkeAkxNTAJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogbHZsZmlsZQlzZHgJMTUxCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qID8JCQkxNTIJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogZmNocm9vdAlkCTE1MwkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsdmxwcm9jCWR4CTE1NAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiA/CQkJMTU1CSovCi0JLndvcmQgc29sYXJpc19nZXR0aW1lb2ZkYXkJLyogZ2V0dGltZW9mZGF5CXgJMTU2CSovCi0JLndvcmQgQ0hBSU4oZ2V0aXRpbWVyKQkJLyogZ2V0aXRpbWVyCWR4CTE1NwkqLwotCS53b3JkIENIQUlOKHNldGl0aW1lcikJCS8qIHNldGl0aW1lcglkeHgJMTU4CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGx3cC14eHgJCTE1OQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsd3AteHh4CQkxNjAJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogbHdwLXh4eAkJMTYxCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGx3cC14eHgJCTE2MgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsd3AteHh4CQkxNjMJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogbHdwLXh4eAkJMTY0CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGx3cC14eHgJCTE2NQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsd3AteHh4CQkxNjYJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogbHdwLXh4eAkJMTY3CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGx3cC14eHgJCTE2OAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsd3AteHh4CQkxNjkJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogbHdwLXh4eAkJMTcwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGx3cC14eHgJCTE3MQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsd3AteHh4CQkxNzIJKi8KLQkud29yZCBzb2xhcmlzX3ByZWFkCQkvKiBwcmVhZAlkcGRkCTE3MwkqLwotCS53b3JkIHNvbGFyaXNfcHdyaXRlCQkvKiBwd3JpdGUJZHBkZAkxNzQJKi8KLQkud29yZCBSRUdTKHNvbGFyaXNfbGxzZWVrKQkvKiBsbHNlZWsJZExkCTE3NQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBsd3BzZWxmCQkxNzYJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogbHdwaW5mbwkJMTc3CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGx3cHByaXZhdGUJCTE3OAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBwcm9jZXNzb3JiaW5kCTE3OQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBwcm9jZXNzb3JleGJpbmQJMTgwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTE4MQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBzeW5jX21haWxib3gJCTE4MgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBwcmVwYmxvY2sJCTE4MwkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiBibG9jawkJMTg0CSovCi0JLndvcmQgc29sYXJpc19hY2wJCS8qIGFjbAkJc2RkcAkxODUJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogdW5ibG9jawkJMTg2CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIGNhbmNlbGJsb2NrCQkxODcJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogPwkJCTE4OAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiB4eHh4eAkJMTg5CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIHh4eHh4ZQkJMTkwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qCQkJMTkxCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qCQkJMTkyCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qCQkJMTkzCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qCQkJMTk0CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTE5NQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkxOTYJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMTk3CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTE5OAkqLwotCS53b3JkIENIQUlOKG5hbm9zbGVlcCkJCS8qIG5hbm9zbGVlcAlkZAkxOTkJKi8KLQkud29yZCBzb2xhcmlzX2ZhY2wJCS8qIGZhY2wJCWRkZHAJMjAwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTIwMQkqLwotCS53b3JkIENIQUlOKHNldHJldWlkKQkJLyogc2V0cmV1aWQJZGQJMjAyCSovCi0JLndvcmQgQ0hBSU4oc2V0cmVnaWQpCQkvKiBzZXRyZWdpZAlkZAkyMDMJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMjA0CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTIwNQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkyMDYJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMjA3CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTIwOAkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkyMDkJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMjEwCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTIxMQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkyMTIJKi8KLQkud29yZCBzb2xhcmlzX2dldGRlbnRzNjQJLyogZ2V0ZGVudHM2NAlkcGQJMjEzCSovCi0JLndvcmQgUkVHUyhzb2xhcmlzX21tYXA2NCkJLyogbW1hcDY0CXh4eHhkWAkyMTQJKi8KLQkud29yZCBzb2xhcmlzX3N0YXQ2NAkJLyogc3RhdDY0CXNQCTIxNQkqLwotCS53b3JkIHNvbGFyaXNfbHN0YXQ2NAkJLyogbHN0YXQ2NAlzUAkyMTYJKi8KLQkud29yZCBzb2xhcmlzX2ZzdGF0NjQJCS8qIGZzdGF0NjQJZFAJMjE3CSovCi0JLndvcmQgc29sYXJpc19zdGF0dmZzNjQJCS8qIHN0YXR2ZnM2NAlzUAkyMTgJKi8KLQkud29yZCBzb2xhcmlzX2ZzdGF0dmZzNjQJLyogZnN0YXR2ZnM2NAlkUAkyMTkJKi8KLQkud29yZCBzb2xhcmlzX3NldHJsaW1pdDY0CS8qIHNldHJsaW1pdDY0CWRQCTIyMAkqLwotCS53b3JkIHNvbGFyaXNfZ2V0cmxpbWl0NjQJLyogZ2V0cmxpbWl0NjQJZFAJMjIxCSovCi0JLndvcmQgQ0hBSU4ocHJlYWQ2NCkJCS8qIHByZWFkNjQJZHBkRAkyMjIJKi8KLQkud29yZCBDSEFJTihwd3JpdGU2NCkJCS8qIHB3cml0ZTY0CWRwZEQJMjIzCSovCi0JLndvcmQgQ0hBSU4oY3JlYXQpCQkvKiBjcmVhdDY0CXNvCTIyNAkqLwotCS53b3JkIHNvbGFyaXNfb3BlbgkJLyogb3BlbjY0CXNvbwkyMjUJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMjI2CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTIyNwkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkyMjgJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMjI5CSovCi0JLndvcmQgc29sYXJpc19zb2NrZXQJCS8qIHNvY2tldAlkZGQJMjMwCSovCi0JLndvcmQgc29sYXJpc19zb2NrZXRwYWlyCS8qIHNvY2tldHBhaXIJZGRkcAkyMzEJKi8KLQkud29yZCBzb2xhcmlzX2JpbmQJCS8qIGJpbmQJCWRwZAkyMzIJKi8KLQkud29yZCBzb2xhcmlzX2xpc3RlbgkJLyogbGlzdGVuCWRkCTIzMwkqLwotCS53b3JkIHNvbGFyaXNfYWNjZXB0CQkvKiBhY2NlcHQJZHBwCTIzNAkqLwotCS53b3JkIHNvbGFyaXNfY29ubmVjdAkJLyogY29ubmVjdAlkcGQJMjM1CSovCi0JLndvcmQgc29sYXJpc19zaHV0ZG93bgkJLyogc2h1dGRvd24JZGQJMjM2CSovCi0JLndvcmQgc29sYXJpc19yZWN2CQkvKiByZWN2CQlkcGRkCTIzNwkqLwotCS53b3JkIHNvbGFyaXNfcmVjdmZyb20JCS8qIHJlY3Zmcm9tCWRwZGRwcAkyMzgJKi8KLQkud29yZCBzb2xhcmlzX3JlY3Ztc2cJCS8qIHJlY3Ztc2cJZHBkCTIzOQkqLwotCS53b3JkIHNvbGFyaXNfc2VuZAkJLyogc2VuZAkJZHBkZAkyNDAJKi8KLQkud29yZCBzb2xhcmlzX3NlbmRtc2cJCS8qIHNlbmRtc2cJZHBkCTI0MQkqLwotCS53b3JkIHNvbGFyaXNfc2VuZHRvCQkvKiBzZW5kdG8JZHBkZHBkCTI0MgkqLwotCS53b3JkIHNvbGFyaXNfZ2V0cGVlcm5hbWUJLyogZ2V0cGVlcm5hbWUJZHBwCTI0MwkqLwotCS53b3JkIHNvbGFyaXNfZ2V0c29ja25hbWUJLyogZ2V0c29ja25hbWUJZHBwCTI0NAkqLwotCS53b3JkIHNvbGFyaXNfZ2V0c29ja29wdAkvKiBnZXRzb2Nrb3B0CWRkZHBwCTI0NQkqLwotCS53b3JkIHNvbGFyaXNfc2V0c29ja29wdAkvKiBzZXRzb2Nrb3B0CWRkZHBwCTI0NgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkyNDcJKi8KLQkud29yZCBzb2xhcmlzX250cF9nZXR0aW1lCS8qIG50cF9nZXR0aW1lCXAJMjQ4CSovCi0JLndvcmQgc29sYXJpc19udHBfYWRqdGltZQkvKiBudHBfYWRqdGltZQlwCTI0OQkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkyNTAJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMjUxCSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTI1MgkqLwotCS53b3JkIHNvbGFyaXNfdW5pbXBsZW1lbnRlZAkvKiAJCQkyNTMJKi8KLQkud29yZCBzb2xhcmlzX3VuaW1wbGVtZW50ZWQJLyogCQkJMjU0CSovCi0JLndvcmQgc29sYXJpc191bmltcGxlbWVudGVkCS8qIAkJCTI1NQkqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvdGltb2QuYyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3RpbW9kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MzEyM2MuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvdGltb2QuYworKysgL2Rldi9udWxsCkBAIC0xLDk3NiArMCwwIEBACi0vKiAkSWQ6IHRpbW9kLmMsdiAxLjE5IDIwMDIvMDIvMDggMDM6NTc6MTQgZGF2ZW0gRXhwICQKLSAqIHRpbW9kLmM6IHRpbW9kIGVtdWxhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggUGF0cmlrIFJhayAocHJhazMyNjRAc3MxMDAwLm1zLm1mZi5jdW5pLmN6KQotICoKLSAqIFN0cmVhbXMgJiB0aW1vZCBlbXVsYXRpb24gYmFzZWQgb24gY29kZQotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE1pa2UgSmFnZGlzIChqYWdneUBwdXJwbGV0LmRlbW9uLmNvLnVrKQotICoKLSAqLwotIAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KLQotI2luY2x1ZGUgImNvbnYuaCIKLSNpbmNsdWRlICJzb2Nrc3lzLmgiCi0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKTsKLQotc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1vZF9wYWdlbG9jayk7Ci1zdGF0aWMgY2hhciAqIHBhZ2UgPSBOVUxMIDsKLQotI2lmbmRlZiBERUJVR19TT0xBUklTX0tNQUxMT0MKLQotI2RlZmluZSBteWttYWxsb2Mga21hbGxvYwotI2RlZmluZSBteWtmcmVlIGtmcmVlCi0KLSNlbHNlCi0KLXZvaWQgKiBteWttYWxsb2Moc2l6ZV90IHMsIGdmcF90IGdmcCkKLXsKLQlzdGF0aWMgY2hhciAqIHBhZ2U7Ci0Jc3RhdGljIHNpemVfdCBmcmVlOwotCXZvaWQgKiByOwotCXMgPSAoKHMgKyA2MykgJiB+NjMpOwotCWlmKCBzID4gUEFHRV9TSVpFICkgewotCQlTT0xEKCJ0b28gYmlnIHNpemUsIGNhbGxpbmcgcmVhbCBrbWFsbG9jIik7Ci0JCXJldHVybiBrbWFsbG9jKHMsIGdmcCk7Ci0JfQotCWlmKCBzID4gZnJlZSApIHsKLQkJLyogd2UgYXJlIHdhc3RpbmcgbWVtb3J5LCBidXQgd2UgZG9uJ3QgY2FyZSAqLwotCQlwYWdlID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoZ2ZwKTsKLQkJZnJlZSA9IFBBR0VfU0laRTsKLQl9Ci0JciA9IHBhZ2U7Ci0JcGFnZSArPSBzOwotCWZyZWUgLT0gczsKLQlyZXR1cm4gcjsKLX0KLQotdm9pZCBteWtmcmVlKHZvaWQgKnApCi17Ci19Ci0KLSNlbmRpZgotCi0jaWZuZGVmIERFQlVHX1NPTEFSSVMKLQotI2RlZmluZSBCVUZfU0laRQlQQUdFX1NJWkUKLSNkZWZpbmUgUFVUX01BR0lDKGEsbSkKLSNkZWZpbmUgU0NIRUNLX01BR0lDKGEsbSkKLSNkZWZpbmUgQlVGX09GRlNFVAkwCi0jZGVmaW5lIE1LQ1RMX1RSQUlMRVIJMAotCi0jZWxzZQotCi0jZGVmaW5lIEJVRl9TSVpFCShQQUdFX1NJWkUtMipzaXplb2YodTY0KSkKLSNkZWZpbmUgQlVGUEFHRV9NQUdJQwkweEJBREMwREVEREVBREJBQkVMCi0jZGVmaW5lIE1LQ1RMX01BR0lDCTB4REVBREJBQkVCQURDMERFREwKLSNkZWZpbmUgUFVUX01BR0lDKGEsbSkJZG97KCoodTY0KikoYSkpPShtKTt9d2hpbGUoMCkKLSNkZWZpbmUgU0NIRUNLX01BR0lDKGEsbSkJZG97aWYoKCoodTY0KikoYSkpIT0obSkpcHJpbnRrKCIlcywldSwlcygpOiBtYWdpYyAlMDh4IGF0ICVwIGNvcnJ1cHRlZCFcbiIsXAotCQkJCV9fRklMRV9fLF9fTElORV9fLF9fRlVOQ1RJT05fXywobSksKGEpKTt9d2hpbGUoMCkKLSNkZWZpbmUgQlVGX09GRlNFVAlzaXplb2YodTY0KQotI2RlZmluZSBNS0NUTF9UUkFJTEVSCXNpemVvZih1NjQpCi0KLSNlbmRpZgotCi1zdGF0aWMgY2hhciAqZ2V0cGFnZSggdm9pZCApCi17Ci0JY2hhciAqcjsKLQlTT0xEKCJnZXR0aW5nIHBhZ2UiKTsKLQlzcGluX2xvY2soJnRpbW9kX3BhZ2Vsb2NrKTsKLQlpZiAocGFnZSkgewotCQlyID0gcGFnZTsKLQkJcGFnZSA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKCZ0aW1vZF9wYWdlbG9jayk7Ci0JCVNPTEQoImdvdCBjYWNoZWQiKTsKLQkJcmV0dXJuIHIgKyBCVUZfT0ZGU0VUOwotCX0KLQlzcGluX3VubG9jaygmdGltb2RfcGFnZWxvY2spOwotCVNPTEQoImdldHRpbmcgbmV3Iik7Ci0JciA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwotCVBVVF9NQUdJQyhyLEJVRlBBR0VfTUFHSUMpOwotCVBVVF9NQUdJQyhyK1BBR0VfU0laRS1zaXplb2YodTY0KSxCVUZQQUdFX01BR0lDKTsKLQlyZXR1cm4gciArIEJVRl9PRkZTRVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dHBhZ2UoY2hhciAqcCkKLXsKLQlTT0xEKCJwdXR0aW5nIHBhZ2UiKTsKLQlwID0gcCAtIEJVRl9PRkZTRVQ7Ci0JU0NIRUNLX01BR0lDKHAsQlVGUEFHRV9NQUdJQyk7Ci0JU0NIRUNLX01BR0lDKHArUEFHRV9TSVpFLXNpemVvZih1NjQpLEJVRlBBR0VfTUFHSUMpOwotCXNwaW5fbG9jaygmdGltb2RfcGFnZWxvY2spOwotCWlmIChwYWdlKSB7Ci0JCXNwaW5fdW5sb2NrKCZ0aW1vZF9wYWdlbG9jayk7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwKTsKLQkJU09MRCgiZnJlZWQgaXQiKTsKLQl9IGVsc2UgewotCQlwYWdlID0gcDsKLQkJc3Bpbl91bmxvY2soJnRpbW9kX3BhZ2Vsb2NrKTsKLQkJU09MRCgiY2FjaGVkIGl0Iik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IFRfcHJpbXNnICp0aW1vZF9ta2N0bChpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgVF9wcmltc2cgKml0OwotCi0JU09MRCgiY3JlYXRpbmcgcHJpbXNnIik7Ci0JaXQgPSAoc3RydWN0IFRfcHJpbXNnICopbXlrbWFsbG9jKHNpemUrc2l6ZW9mKCppdCktc2l6ZW9mKHMzMikrMipNS0NUTF9UUkFJTEVSLCBHRlBfS0VSTkVMKTsKLQlpZiAoaXQpIHsKLQkJU09MRCgiZ290IGl0Iik7Ci0JCWl0LT5wcmkgPSBNU0dfSElQUkk7Ci0JCWl0LT5sZW5ndGggPSBzaXplOwotCQlQVVRfTUFHSUMoKGNoYXIqKSgodTY0KSgoKGNoYXIgKikmaXQtPnR5cGUpK3NpemUrNykmfjcpLE1LQ1RMX01BR0lDKTsKLQl9Ci0JcmV0dXJuIGl0OwotfQotCi1zdGF0aWMgdm9pZCB0aW1vZF93YWtlX3NvY2tldCh1bnNpZ25lZCBpbnQgZmQpCi17Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwotCi0JU09MRCgid2FrZWluZyBzb2NrZXQiKTsKLQlmZHQgPSBmaWxlc19mZHRhYmxlKGN1cnJlbnQtPmZpbGVzKTsKLQlzb2NrID0gU09DS0VUX0koZmR0LT5mZFtmZF0tPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc29jay0+d2FpdCk7Ci0JcmVhZF9sb2NrKCZzb2NrLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7Ci0JaWYgKHNvY2stPmZhc3luY19saXN0ICYmICF0ZXN0X2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc29jay0+ZmxhZ3MpKQotCQlfX2tpbGxfZmFzeW5jKHNvY2stPmZhc3luY19saXN0LCBTSUdJTywgUE9MTF9JTik7Ci0JcmVhZF91bmxvY2soJnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKLQlTT0xEKCJkb25lIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpbW9kX3F1ZXVlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IFRfcHJpbXNnICppdCkKLXsKLQlzdHJ1Y3Qgc29sX3NvY2tldF9zdHJ1Y3QgKnNvY2s7Ci0Jc3RydWN0IGZkdGFibGUgKmZkdDsKLQotCVNPTEQoInF1ZXVpbmcgcHJpbXNnIik7Ci0JZmR0ID0gZmlsZXNfZmR0YWJsZShjdXJyZW50LT5maWxlcyk7Ci0Jc29jayA9IChzdHJ1Y3Qgc29sX3NvY2tldF9zdHJ1Y3QgKilmZHQtPmZkW2ZkXS0+cHJpdmF0ZV9kYXRhOwotCWl0LT5uZXh0ID0gc29jay0+cGZpcnN0OwotCXNvY2stPnBmaXJzdCA9IGl0OwotCWlmICghc29jay0+cGxhc3QpCi0JCXNvY2stPnBsYXN0ID0gaXQ7Ci0JdGltb2Rfd2FrZV9zb2NrZXQoZmQpOwotCVNPTEQoImRvbmUiKTsKLX0KLQotc3RhdGljIHZvaWQgdGltb2RfcXVldWVfZW5kKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IFRfcHJpbXNnICppdCkKLXsKLQlzdHJ1Y3Qgc29sX3NvY2tldF9zdHJ1Y3QgKnNvY2s7Ci0Jc3RydWN0IGZkdGFibGUgKmZkdDsKLQotCVNPTEQoInF1ZXVpbmcgcHJpbXNnIGF0IGVuZCIpOwotCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwotCXNvY2sgPSAoc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0ICopZmR0LT5mZFtmZF0tPnByaXZhdGVfZGF0YTsKLQlpdC0+bmV4dCA9IE5VTEw7Ci0JaWYgKHNvY2stPnBsYXN0KQotCQlzb2NrLT5wbGFzdC0+bmV4dCA9IGl0OwotCWVsc2UKLQkJc29jay0+cGZpcnN0ID0gaXQ7Ci0Jc29jay0+cGxhc3QgPSBpdDsKLQlTT0xEKCJkb25lIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpbW9kX2Vycm9yKHVuc2lnbmVkIGludCBmZCwgaW50IHByaW0sIGludCB0ZXJyLCBpbnQgdWVycikKLXsKLQlzdHJ1Y3QgVF9wcmltc2cgKml0OwotCQotCVNPTEQoIm1ha2luZyBlcnJvciIpOwotCWl0ID0gdGltb2RfbWtjdGwoc2l6ZW9mKHN0cnVjdCBUX2Vycm9yX2FjaykpOwotCWlmIChpdCkgewotCQlzdHJ1Y3QgVF9lcnJvcl9hY2sgKmVyciA9IChzdHJ1Y3QgVF9lcnJvcl9hY2sgKikmaXQtPnR5cGU7Ci0JCQotCQlTT0xEKCJnb3QgaXQiKTsKLQkJZXJyLT5QUklNX3R5cGUgPSBUX0VSUk9SX0FDSzsKLQkJZXJyLT5FUlJPUl9wcmltID0gcHJpbTsKLQkJZXJyLT5UTElfZXJyb3IgPSB0ZXJyOwotCQllcnItPlVOSVhfZXJyb3IgPSB1ZXJyOyAvKiBGSVhNRTogY29udmVydCB0aGlzICovCi0JCXRpbW9kX3F1ZXVlKGZkLCBpdCk7Ci0JfQotCVNPTEQoImRvbmUiKTsKLX0KLQotc3RhdGljIHZvaWQgdGltb2Rfb2sodW5zaWduZWQgaW50IGZkLCBpbnQgcHJpbSkKLXsKLQlzdHJ1Y3QgVF9wcmltc2cgKml0OwotCXN0cnVjdCBUX29rX2FjayAqb2s7Ci0JCi0JU09MRCgiY3JlYXRpbmcgb2sgYWNrIik7Ci0JaXQgPSB0aW1vZF9ta2N0bChzaXplb2YoKm9rKSk7Ci0JaWYgKGl0KSB7Ci0JCVNPTEQoImdvdCBpdCIpOwotCQlvayA9IChzdHJ1Y3QgVF9va19hY2sgKikmaXQtPnR5cGU7Ci0JCW9rLT5QUklNX3R5cGUgPSBUX09LX0FDSzsKLQkJb2stPkNPUlJFQ1RfcHJpbSA9IHByaW07Ci0JCXRpbW9kX3F1ZXVlKGZkLCBpdCk7Ci0JfQotCVNPTEQoImRvbmUiKTsKLX0KLQotc3RhdGljIGludCB0aW1vZF9vcHRtZ210KHVuc2lnbmVkIGludCBmZCwgaW50IGZsYWcsIGNoYXIgX191c2VyICpvcHRfYnVmLCBpbnQgb3B0X2xlbiwgaW50IGRvX3JldCkKLXsKLQlpbnQgZXJyb3IsIGZhaWxlZDsKLQlpbnQgcmV0X3NwYWNlLCByZXRfbGVuOwotCWxvbmcgYXJnc1s1XTsKLQljaGFyICpyZXRfcG9zLCpyZXRfYnVmOwotCWludCAoKnN5c19zb2NrZXRjYWxsKShpbnQsIHVuc2lnbmVkIGxvbmcgKikgPQotCQkoaW50ICgqKShpbnQsIHVuc2lnbmVkIGxvbmcgKikpU1lTKHNvY2tldGNhbGwpOwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQotCVNPTEQoImVudHJ5Iik7Ci0JU09MREQoKCJmZCAldSBmbGcgJXUgYnVmICVwIGxlbiAldSBkb3JldCAldSIsZmQsZmxhZyxvcHRfYnVmLG9wdF9sZW4sZG9fcmV0KSk7Ci0JaWYgKCFkb19yZXQgJiYgKCFvcHRfYnVmIHx8IG9wdF9sZW4gPD0gMCkpCi0JCXJldHVybiAwOwotCVNPTEQoImdldHRpbmcgcGFnZSIpOwotCXJldF9wb3MgPSByZXRfYnVmID0gZ2V0cGFnZSgpOwotCXJldF9zcGFjZSA9IEJVRl9TSVpFOwotCXJldF9sZW4gPSAwOwotCQotCWVycm9yID0gZmFpbGVkID0gMDsKLQlTT0xEKCJsb29waW5nIik7Ci0Jd2hpbGUob3B0X2xlbiA+PSBzaXplb2Yoc3RydWN0IG9wdGhkcikpIHsKLQkJc3RydWN0IG9wdGhkciAqb3B0OwotCQlpbnQgb3JpZ19vcHRfbGVuOyAKLQkJU09MRCgibG9vcCBzdGFydCIpOwotCQlvcHQgPSAoc3RydWN0IG9wdGhkciAqKXJldF9wb3M7IAotCQlpZiAocmV0X3NwYWNlIDwgc2l6ZW9mKHN0cnVjdCBvcHRoZHIpKSB7Ci0JCQlmYWlsZWQgPSBUU1lTRVJSOwotCQkJYnJlYWs7Ci0JCX0KLQkJU09MRCgiZ2V0dGluZyBvcHRoZHIiKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKG9wdCwgb3B0X2J1Ziwgc2l6ZW9mKHN0cnVjdCBvcHRoZHIpKSB8fAotCQkJb3B0LT5sZW4gPiBvcHRfbGVuKSB7Ci0JCQlmYWlsZWQgPSBUQkFET1BUOwotCQkJYnJlYWs7Ci0JCX0KLQkJU09MRCgiZ290IG9wdGhkciIpOwotCQlpZiAoZmxhZyA9PSBUX05FR09USUFURSkgewotCQkJY2hhciAqYnVmOwotCQkJCi0JCQlTT0xEKCJoYW5kbGluZyBUX05FR09USUFURSIpOwotCQkJYnVmID0gcmV0X3BvcyArIHNpemVvZihzdHJ1Y3Qgb3B0aGRyKTsKLQkJCWlmIChyZXRfc3BhY2UgPCBvcHQtPmxlbiArIHNpemVvZihzdHJ1Y3Qgb3B0aGRyKSB8fAotCQkJCWNvcHlfZnJvbV91c2VyKGJ1Ziwgb3B0X2J1ZitzaXplb2Yoc3RydWN0IG9wdGhkciksIG9wdC0+bGVuKSkgewotCQkJCWZhaWxlZCA9IFRTWVNFUlI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlTT0xEKCJnb3Qgb3B0ZGF0YSIpOwotCQkJYXJnc1swXSA9IGZkOwotCQkJYXJnc1sxXSA9IG9wdC0+bGV2ZWw7Ci0JCQlhcmdzWzJdID0gb3B0LT5uYW1lOwotCQkJYXJnc1szXSA9IChsb25nKWJ1ZjsKLQkJCWFyZ3NbNF0gPSBvcHQtPmxlbjsKLQkJCVNPTEQoImNhbGxpbmcgU0VUU09DS09QVCIpOwotCQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCQllcnJvciA9IHN5c19zb2NrZXRjYWxsKFNZU19TRVRTT0NLT1BULCBhcmdzKTsKLQkJCXNldF9mcyhvbGRfZnMpOwotCQkJaWYgKGVycm9yKSB7Ci0JCQkJZmFpbGVkID0gVEJBRE9QVDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCVNPTEQoIlNFVFNPQ0tPUFQgb2siKTsKLQkJfQotCQlvcmlnX29wdF9sZW4gPSBvcHQtPmxlbjsKLQkJb3B0LT5sZW4gPSByZXRfc3BhY2UgLSBzaXplb2Yoc3RydWN0IG9wdGhkcik7Ci0JCWlmIChvcHQtPmxlbiA8IDApIHsKLQkJCWZhaWxlZCA9IFRTWVNFUlI7Ci0JCQlicmVhazsKLQkJfQotCQlhcmdzWzBdID0gZmQ7Ci0JCWFyZ3NbMV0gPSBvcHQtPmxldmVsOwotCQlhcmdzWzJdID0gb3B0LT5uYW1lOwotCQlhcmdzWzNdID0gKGxvbmcpKHJldF9wb3Mrc2l6ZW9mKHN0cnVjdCBvcHRoZHIpKTsKLQkJYXJnc1s0XSA9IChsb25nKSZvcHQtPmxlbjsKLQkJU09MRCgiY2FsbGluZyBHRVRTT0NLT1BUIik7Ci0JCXNldF9mcyhLRVJORUxfRFMpOwotCQllcnJvciA9IHN5c19zb2NrZXRjYWxsKFNZU19HRVRTT0NLT1BULCBhcmdzKTsKLQkJc2V0X2ZzKG9sZF9mcyk7Ci0JCWlmIChlcnJvcikgewotCQkJZmFpbGVkID0gVEJBRE9QVDsKLQkJCWJyZWFrOwotCQl9Ci0JCVNPTEQoIkdFVFNPQ0tPUFQgb2siKTsKLQkJcmV0X3NwYWNlIC09IHNpemVvZihzdHJ1Y3Qgb3B0aGRyKSArIG9wdC0+bGVuOwotCQlyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3Qgb3B0aGRyKSArIG9wdC0+bGVuOwotCQlyZXRfcG9zICs9IHNpemVvZihzdHJ1Y3Qgb3B0aGRyKSArIG9wdC0+bGVuOwotCQlvcHRfbGVuIC09IHNpemVvZihzdHJ1Y3Qgb3B0aGRyKSArIG9yaWdfb3B0X2xlbjsKLQkJb3B0X2J1ZiArPSBzaXplb2Yoc3RydWN0IG9wdGhkcikgKyBvcmlnX29wdF9sZW47Ci0JCVNPTEQoImxvb3AgZW5kIik7Ci0JfQotCVNPTEQoImxvb3AgZG9uZSIpOwotCWlmIChkb19yZXQpIHsKLQkJU09MRCgiZ2VuZXJhdGluZyByZXQgbXNnIik7Ci0JCWlmIChmYWlsZWQpCi0JCQl0aW1vZF9lcnJvcihmZCwgVF9PUFRNR01UX1JFUSwgZmFpbGVkLCAtZXJyb3IpOwotCQllbHNlIHsKLQkJCXN0cnVjdCBUX3ByaW1zZyAqaXQ7Ci0JCQlpdCA9IHRpbW9kX21rY3RsKHNpemVvZihzdHJ1Y3QgVF9vcHRtZ210X2FjaykgKyByZXRfbGVuKTsKLQkJCWlmIChpdCkgewotCQkJCXN0cnVjdCBUX29wdG1nbXRfYWNrICphY2sgPQotCQkJCQkoc3RydWN0IFRfb3B0bWdtdF9hY2sgKikmaXQtPnR5cGU7Ci0JCQkJU09MRCgiZ290IHByaW1zZyIpOwotCQkJCWFjay0+UFJJTV90eXBlID0gVF9PUFRNR01UX0FDSzsKLQkJCQlhY2stPk9QVF9sZW5ndGggPSByZXRfbGVuOwotCQkJCWFjay0+T1BUX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgVF9vcHRtZ210X2Fjayk7Ci0JCQkJYWNrLT5NR01UX2ZsYWdzID0gKGZhaWxlZCA/IFRfRkFJTFVSRSA6IGZsYWcpOwotCQkJCW1lbWNweSgoKGNoYXIqKWFjaykrc2l6ZW9mKHN0cnVjdCBUX29wdG1nbXRfYWNrKSwKLQkJCQkJcmV0X2J1ZiwgcmV0X2xlbik7Ci0JCQkJdGltb2RfcXVldWUoZmQsIGl0KTsKLQkJCX0KLQkJfQotCX0KLQlTT0xERCgoInB1dF9wYWdlICVwXG4iLCByZXRfYnVmKSk7Ci0JcHV0cGFnZShyZXRfYnVmKTsKLQlTT0xEKCJkb25lIik7CQotCXJldHVybiAwOwotfQotCi1pbnQgdGltb2RfcHV0bXNnKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKmN0bF9idWYsIGludCBjdGxfbGVuLAotCQkJY2hhciBfX3VzZXIgKmRhdGFfYnVmLCBpbnQgZGF0YV9sZW4sIGludCBmbGFncykKLXsKLQlpbnQgcmV0LCBlcnJvciwgdGVycm9yOwotCWNoYXIgKmJ1ZjsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQlzdHJ1Y3QgaW5vZGUgKmlubzsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwotCXN0cnVjdCBzb2xfc29ja2V0X3N0cnVjdCAqc29jazsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JbG9uZyBhcmdzWzZdOwotCWludCAoKnN5c19zb2NrZXRjYWxsKShpbnQsIHVuc2lnbmVkIGxvbmcgX191c2VyICopID0KLQkJKGludCAoKikoaW50LCB1bnNpZ25lZCBsb25nIF9fdXNlciAqKSlTWVMoc29ja2V0Y2FsbCk7Ci0JaW50ICgqc3lzX3NlbmR0bykoaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QsIHVuc2lnbmVkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCkgPQotCQkoaW50ICgqKShpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCwgdW5zaWduZWQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50KSlTWVMoc2VuZHRvKTsKLQotCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwotCWZpbHAgPSBmZHQtPmZkW2ZkXTsKLQlpbm8gPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXNvY2sgPSAoc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0ICopZmlscC0+cHJpdmF0ZV9kYXRhOwotCVNPTEQoImVudHJ5Iik7Ci0JaWYgKGdldF91c2VyKHJldCwgKGludCBfX3VzZXIgKilBKGN0bF9idWYpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jc3dpdGNoIChyZXQpIHsKLQljYXNlIFRfQklORF9SRVE6Ci0JewotCQlzdHJ1Y3QgVF9iaW5kX3JlcSByZXE7Ci0JCQotCQlTT0xERCgoImJpbmQgJTAxNmx4KCUwMTZseClcbiIsIHNvY2ssIGZpbHApKTsKLQkJU09MRCgiVF9CSU5EX1JFUSIpOwotCQlpZiAoc29jay0+c3RhdGUgIT0gVFNfVU5CTkQpIHsKLQkJCXRpbW9kX2Vycm9yKGZkLCBUX0JJTkRfUkVRLCBUT1VUU1RBVEUsIDApOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJU09MRCgic3RhdGUgb2siKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsIGN0bF9idWYsIHNpemVvZihyZXEpKSkgewotCQkJdGltb2RfZXJyb3IoZmQsIFRfQklORF9SRVEsIFRTWVNFUlIsIEVGQVVMVCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlTT0xEKCJnb3QgY3RsIHJlcSIpOwotCQlpZiAocmVxLkFERFJfb2Zmc2V0ICYmIHJlcS5BRERSX2xlbmd0aCkgewotCQkJaWYgKHJlcS5BRERSX2xlbmd0aCA+IEJVRl9TSVpFKSB7Ci0JCQkJdGltb2RfZXJyb3IoZmQsIFRfQklORF9SRVEsIFRTWVNFUlIsIEVGQVVMVCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlTT0xEKCJyZXEgc2l6ZSBvayIpOwotCQkJYnVmID0gZ2V0cGFnZSgpOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgY3RsX2J1ZiArIHJlcS5BRERSX29mZnNldCwgcmVxLkFERFJfbGVuZ3RoKSkgewotCQkJCXRpbW9kX2Vycm9yKGZkLCBUX0JJTkRfUkVRLCBUU1lTRVJSLCBFRkFVTFQpOwotCQkJCXB1dHBhZ2UoYnVmKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCVNPTEQoImdvdCBjdGwgZGF0YSIpOwotCQkJYXJnc1swXSA9IGZkOwotCQkJYXJnc1sxXSA9IChsb25nKWJ1ZjsKLQkJCWFyZ3NbMl0gPSByZXEuQUREUl9sZW5ndGg7Ci0JCQlTT0xEKCJjYWxsaW5nIEJJTkQiKTsKLQkJCXNldF9mcyhLRVJORUxfRFMpOwotCQkJZXJyb3IgPSBzeXNfc29ja2V0Y2FsbChTWVNfQklORCwgYXJncyk7Ci0JCQlzZXRfZnMob2xkX2ZzKTsKLQkJCXB1dHBhZ2UoYnVmKTsKLQkJCVNPTEQoIkJJTkQgcmV0dXJuZWQiKTsKLQkJfSBlbHNlIAotCQkJZXJyb3IgPSAwOwotCQlpZiAoIWVycm9yKSB7Ci0JCQlzdHJ1Y3QgVF9wcmltc2cgKml0OwotCQkJaWYgKHJlcS5DT05JTkRfbnVtYmVyKSB7Ci0JICAJCQlhcmdzWzBdID0gZmQ7Ci0gIAkJCQlhcmdzWzFdID0gcmVxLkNPTklORF9udW1iZXI7Ci0gIAkJCQlTT0xEKCJjYWxsaW5nIExJU1RFTiIpOwotICAJCQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JICAJCQllcnJvciA9IHN5c19zb2NrZXRjYWxsKFNZU19MSVNURU4sIGFyZ3MpOwotICAJCQkJc2V0X2ZzKG9sZF9mcyk7Ci0gIAkJCQlTT0xEKCJMSVNURU4gZG9uZSIpOwotICAJCQl9Ci0JCQlpdCA9IHRpbW9kX21rY3RsKHNpemVvZihzdHJ1Y3QgVF9iaW5kX2Fjaykrc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwotCQkJaWYgKGl0KSB7Ci0JCQkJc3RydWN0IFRfYmluZF9hY2sgKmFjazsKLQotCQkJCWFjayA9IChzdHJ1Y3QgVF9iaW5kX2FjayAqKSZpdC0+dHlwZTsKLQkJCQlhY2stPlBSSU1fdHlwZSA9IFRfQklORF9BQ0s7Ci0JCQkJYWNrLT5BRERSX29mZnNldCA9IHNpemVvZigqYWNrKTsKLQkJCQlhY2stPkFERFJfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7Ci0JCQkJYWNrLT5DT05JTkRfbnVtYmVyID0gcmVxLkNPTklORF9udW1iZXI7Ci0JCQkJYXJnc1swXSA9IGZkOwotCQkJCWFyZ3NbMV0gPSAobG9uZykoYWNrK3NpemVvZigqYWNrKSk7Ci0JCQkJYXJnc1syXSA9IChsb25nKSZhY2stPkFERFJfbGVuZ3RoOwotCQkJCXNldF9mcyhLRVJORUxfRFMpOwotCQkJCXN5c19zb2NrZXRjYWxsKFNZU19HRVRTT0NLTkFNRSxhcmdzKTsKLQkJCQlzZXRfZnMob2xkX2ZzKTsKLQkJCQlzb2NrLT5zdGF0ZSA9IFRTX0lETEU7Ci0JCQkJdGltb2Rfb2soZmQsIFRfQklORF9SRVEpOwotCQkJCXRpbW9kX3F1ZXVlX2VuZChmZCwgaXQpOwotCQkJCVNPTEQoIkJJTkQgZG9uZSIpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCVNPTEQoInNvbWUgZXJyb3IiKTsKLQkJc3dpdGNoIChlcnJvcikgewotCQkJY2FzZSAtRUlOVkFMOgotCQkJCXRlcnJvciA9IFRPVVRTVEFURTsKLQkJCQllcnJvciA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIC1FQUNDRVM6Ci0JCQkJdGVycm9yID0gVEFDQ0VTOwotCQkJCWVycm9yID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgLUVBRERSTk9UQVZBSUw6Ci0JCQljYXNlIC1FQUREUklOVVNFOgotCQkJCXRlcnJvciA9IFROT0FERFI7Ci0JCQkJZXJyb3IgPSAwOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl0ZXJyb3IgPSBUU1lTRVJSOwotCQkJCWJyZWFrOwotCQl9Ci0JCXRpbW9kX2Vycm9yKGZkLCBUX0JJTkRfUkVRLCB0ZXJyb3IsIC1lcnJvcik7Ci0JCVNPTEQoIkJJTkQgZG9uZSIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBUX0NPTk5fUkVROgotCXsKLQkJc3RydWN0IFRfY29ubl9yZXEgcmVxOwotCQl1bnNpZ25lZCBzaG9ydCBvbGRmbGFnczsKLQkJc3RydWN0IFRfcHJpbXNnICppdDsKLQkJU09MRCgiVF9DT05OX1JFUSIpOwotCQlpZiAoc29jay0+c3RhdGUgIT0gVFNfVU5CTkQgJiYgc29jay0+c3RhdGUgIT0gVFNfSURMRSkgewotCQkJdGltb2RfZXJyb3IoZmQsIFRfQ09OTl9SRVEsIFRPVVRTVEFURSwgMCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlTT0xEKCJzdGF0ZSBvayIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgY3RsX2J1Ziwgc2l6ZW9mKHJlcSkpKSB7Ci0JCQl0aW1vZF9lcnJvcihmZCwgVF9DT05OX1JFUSwgVFNZU0VSUiwgRUZBVUxUKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCVNPTEQoImdvdCBjdGwgcmVxIik7Ci0JCWlmIChjdGxfbGVuID4gQlVGX1NJWkUpIHsKLQkJCXRpbW9kX2Vycm9yKGZkLCBUX0NPTk5fUkVRLCBUU1lTRVJSLCBFRkFVTFQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJU09MRCgicmVxIHNpemUgb2siKTsKLQkJYnVmID0gZ2V0cGFnZSgpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBjdGxfYnVmLCBjdGxfbGVuKSkgewotCQkJdGltb2RfZXJyb3IoZmQsIFRfQ09OTl9SRVEsIFRTWVNFUlIsIEVGQVVMVCk7Ci0JCQlwdXRwYWdlKGJ1Zik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotI2lmZGVmIERFQlVHX1NPTEFSSVMJCQotCQl7Ci0JCQljaGFyICogcHRyID0gYnVmOwotCQkJaW50IGxlbiA9IGN0bF9sZW47Ci0JCQlwcmludGsoInJldHVybmVkIGRhdGEgKCVkIGJ5dGVzKTogIixsZW4pOwotCQkJd2hpbGUoIGxlbi0tICkgewotCQkJCWlmICghKGxlbiAmIDcpKQotCQkJCQlwcmludGsoIiAiKTsKLQkJCQlwcmludGsoIiUwMngiLCh1bnNpZ25lZCBjaGFyKSpwdHIrKyk7Ci0JCQl9Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLSNlbmRpZgotCQlTT0xEKCJnb3QgY3RsIGRhdGEiKTsKLQkJYXJnc1swXSA9IGZkOwotCQlhcmdzWzFdID0gKGxvbmcpYnVmK3JlcS5ERVNUX29mZnNldDsKLQkJYXJnc1syXSA9IHJlcS5ERVNUX2xlbmd0aDsKLQkJb2xkZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzOwotCQlmaWxwLT5mX2ZsYWdzICY9IH5PX05PTkJMT0NLOwotCQlTT0xEKCJjYWxsaW5nIENPTk5FQ1QiKTsKLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCWVycm9yID0gc3lzX3NvY2tldGNhbGwoU1lTX0NPTk5FQ1QsIGFyZ3MpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQkJZmlscC0+Zl9mbGFncyA9IG9sZGZsYWdzOwotCQlTT0xEKCJDT05ORUNUIGRvbmUiKTsKLQkJaWYgKCFlcnJvcikgewotCQkJc3RydWN0IFRfY29ubl9jb24gKmNvbjsKLQkJCVNPTEQoIm5vIGVycm9yIik7Ci0JCQlpdCA9IHRpbW9kX21rY3RsKGN0bF9sZW4pOwotCQkJaWYgKCFpdCkgewotCQkJCXB1dHBhZ2UoYnVmKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQkJCWNvbiA9IChzdHJ1Y3QgVF9jb25uX2NvbiAqKSZpdC0+dHlwZTsKLSNpZmRlZiBERUJVR19TT0xBUklTCQkJCi0JCQl7Ci0JCQkJY2hhciAqIHB0ciA9IGJ1ZjsKLQkJCQlpbnQgbGVuID0gY3RsX2xlbjsKLQkJCQlwcmludGsoInJldHVybmVkIGRhdGEgKCVkIGJ5dGVzKTogIixsZW4pOwotCQkJCXdoaWxlKCBsZW4tLSApIHsKLQkJCQkJaWYgKCEobGVuICYgNykpCi0JCQkJCQlwcmludGsoIiAiKTsKLQkJCQkJcHJpbnRrKCIlMDJ4IiwodW5zaWduZWQgY2hhcikqcHRyKyspOwotCQkJCX0KLQkJCQlwcmludGsoIlxuIik7Ci0JCQl9Ci0jZW5kaWYKLQkJCW1lbWNweShjb24sIGJ1ZiwgY3RsX2xlbik7Ci0JCQlTT0xEKCJjb3BpZWQgY3RsX2J1ZiIpOwotCQkJY29uLT5QUklNX3R5cGUgPSBUX0NPTk5fQ09OOwotCQkJc29jay0+c3RhdGUgPSBUU19EQVRBX1hGRVI7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgVF9kaXNjb25faW5kICpkaXM7Ci0JCQlTT0xEKCJzb21lIGVycm9yIik7Ci0JCQlpdCA9IHRpbW9kX21rY3RsKHNpemVvZigqZGlzKSk7Ci0JCQlpZiAoIWl0KSB7Ci0JCQkJcHV0cGFnZShidWYpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJU09MRCgiZ290IHByaW1zZyIpOwotCQkJZGlzID0gKHN0cnVjdCBUX2Rpc2Nvbl9pbmQgKikmaXQtPnR5cGU7Ci0JCQlkaXMtPlBSSU1fdHlwZSA9IFRfRElTQ09OX0lORDsKLQkJCWRpcy0+RElTQ09OX3JlYXNvbiA9IC1lcnJvcjsJLyogRklYTUU6IGNvbnZlcnQgdGhpcyBhcyBpbiBpQUJJX2Vycm9ycygpICovCi0JCQlkaXMtPlNFUV9udW1iZXIgPSAwOwotCQl9Ci0JCXB1dHBhZ2UoYnVmKTsKLQkJdGltb2Rfb2soZmQsIFRfQ09OTl9SRVEpOwotCQlpdC0+cHJpID0gMDsKLQkJdGltb2RfcXVldWVfZW5kKGZkLCBpdCk7Ci0JCVNPTEQoIkNPTk5FQ1QgZG9uZSIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBUX09QVE1HTVRfUkVROgotCXsKLQkJc3RydWN0IFRfb3B0bWdtdF9yZXEgcmVxOwotCQlTT0xEKCJPUFRNR01UX1JFUSIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgY3RsX2J1Ziwgc2l6ZW9mKHJlcSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCVNPTEQoImdvdCByZXEiKTsKLQkJcmV0dXJuIHRpbW9kX29wdG1nbXQoZmQsIHJlcS5NR01UX2ZsYWdzLAotCQkJCXJlcS5PUFRfb2Zmc2V0ID4gMCA/IGN0bF9idWYgKyByZXEuT1BUX29mZnNldCA6IE5VTEwsCi0JCQkJcmVxLk9QVF9sZW5ndGgsIDEpOwotCX0KLQljYXNlIFRfVU5JVERBVEFfUkVROgotCXsKLQkJc3RydWN0IFRfdW5pdGRhdGFfcmVxIHJlcTsKLQkJCi0JCWludCBlcnI7Ci0JCVNPTEQoIlRfVU5JVERBVEFfUkVRIik7Ci0JCWlmIChzb2NrLT5zdGF0ZSAhPSBUU19JRExFICYmIHNvY2stPnN0YXRlICE9IFRTX0RBVEFfWEZFUikgewotCQkJdGltb2RfZXJyb3IoZmQsIFRfQ09OTl9SRVEsIFRPVVRTVEFURSwgMCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlTT0xEKCJzdGF0ZSBvayIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgY3RsX2J1Ziwgc2l6ZW9mKHJlcSkpKSB7Ci0JCQl0aW1vZF9lcnJvcihmZCwgVF9DT05OX1JFUSwgVFNZU0VSUiwgRUZBVUxUKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCVNPTEQoImdvdCBjdGwgcmVxIik7Ci0jaWZkZWYgREVCVUdfU09MQVJJUwkJCi0JCXsKLQkJCWNoYXIgKiBwdHIgPSBjdGxfYnVmK3JlcS5ERVNUX29mZnNldDsKLQkJCWludCBsZW4gPSByZXEuREVTVF9sZW5ndGg7Ci0JCQlwcmludGsoInNvY2tldCBhZGRyZXNzICglZCBieXRlcyk6ICIsbGVuKTsKLQkJCXdoaWxlKCBsZW4tLSApIHsKLQkJCQljaGFyIGM7Ci0JCQkJaWYgKGdldF91c2VyKGMscHRyKSkKLQkJCQkJcHJpbnRrKCI/PyIpOwotCQkJCWVsc2UKLQkJCQkJcHJpbnRrKCIlMDJ4IiwodW5zaWduZWQgY2hhciljKTsKLQkJCQlwdHIrKzsKLQkJCX0KLQkJCXByaW50aygiXG4iKTsKLQkJfQotI2VuZGlmCQkKLQkJZXJyID0gc3lzX3NlbmR0byhmZCwgZGF0YV9idWYsIGRhdGFfbGVuLCAwLCByZXEuREVTVF9sZW5ndGggPiAwID8gKHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKikoY3RsX2J1ZityZXEuREVTVF9vZmZzZXQpIDogTlVMTCwgcmVxLkRFU1RfbGVuZ3RoKTsKLQkJaWYgKGVyciA9PSBkYXRhX2xlbikKLQkJCXJldHVybiAwOwotCQlpZihlcnIgPj0gMCkgewotCQkJcHJpbnRrKCJ0aW1vZDogc2VuZHRvIGZhaWxlZCB0byBzZW5kIGFsbCB0aGUgZGF0YVxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQl0aW1vZF9lcnJvcihmZCwgVF9DT05OX1JFUSwgVFNZU0VSUiwgLWVycik7Ci0JCXJldHVybiAwOwotCX0KLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICJ0aW1vZF9wdXRtc2c6IHVuc3VwcG9ydGVkIGNvbW1hbmQgJXUuXG4iLCByZXQpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLWludCB0aW1vZF9nZXRtc2codW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqY3RsX2J1ZiwgaW50IGN0bF9tYXhsZW4sIHMzMiBfX3VzZXIgKmN0bF9sZW4sCi0JCQljaGFyIF9fdXNlciAqZGF0YV9idWYsIGludCBkYXRhX21heGxlbiwgczMyIF9fdXNlciAqZGF0YV9sZW4sIGludCAqZmxhZ3NfcCkKLXsKLQlpbnQgZXJyb3I7Ci0JaW50IG9sZGZsYWdzOwotCXN0cnVjdCBmaWxlICpmaWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vOwotCXN0cnVjdCBmZHRhYmxlICpmZHQ7Ci0Jc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0ICpzb2NrOwotCXN0cnVjdCBUX3VuaXRkYXRhX2luZCB1ZGk7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCWxvbmcgYXJnc1s2XTsKLQljaGFyIF9fdXNlciAqdG1wYnVmOwotCWludCB0bXBsZW47Ci0JaW50ICgqc3lzX3NvY2tldGNhbGwpKGludCwgdW5zaWduZWQgbG9uZyBfX3VzZXIgKikgPQotCQkoaW50ICgqKShpbnQsIHVuc2lnbmVkIGxvbmcgX191c2VyICopKVNZUyhzb2NrZXRjYWxsKTsKLQlpbnQgKCpzeXNfcmVjdmZyb20pKGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCB1bnNpZ25lZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwotCQotCVNPTEQoImVudHJ5Iik7Ci0JU09MREQoKCIldSAlcCAlZCAlcCAlcCAlZCAlcCAlZFxuIiwgZmQsIGN0bF9idWYsIGN0bF9tYXhsZW4sIGN0bF9sZW4sIGRhdGFfYnVmLCBkYXRhX21heGxlbiwgZGF0YV9sZW4sICpmbGFnc19wKSk7Ci0JZmR0ID0gZmlsZXNfZmR0YWJsZShjdXJyZW50LT5maWxlcyk7Ci0JZmlscCA9IGZkdC0+ZmRbZmRdOwotCWlubyA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0Jc29jayA9IChzdHJ1Y3Qgc29sX3NvY2tldF9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0JU09MREQoKCIlcCAlcFxuIiwgc29jay0+cGZpcnN0LCBzb2NrLT5wZmlyc3QgPyBzb2NrLT5wZmlyc3QtPm5leHQgOiBOVUxMKSk7Ci0JaWYgKCBjdGxfbWF4bGVuID4gMCAmJiAhc29jay0+cGZpcnN0ICYmIFNPQ0tFVF9JKGlubyktPnR5cGUgPT0gU09DS19TVFJFQU0KLQkJJiYgc29jay0+c3RhdGUgPT0gVFNfSURMRSkgewotCQlTT0xEKCJjYWxsaW5nIExJU1RFTiIpOwotCQlhcmdzWzBdID0gZmQ7Ci0JCWFyZ3NbMV0gPSAtMTsKLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCXN5c19zb2NrZXRjYWxsKFNZU19MSVNURU4sIGFyZ3MpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQkJU09MRCgiTElTVEVOIGRvbmUiKTsKLQl9Ci0JaWYgKCEoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7Ci0JCXN0cnVjdCBwb2xsX3dxdWV1ZXMgd2FpdF90YWJsZTsKLQkJcG9sbF90YWJsZSAqd2FpdDsKLQotCQlwb2xsX2luaXR3YWl0KCZ3YWl0X3RhYmxlKTsKLQkJd2FpdCA9ICZ3YWl0X3RhYmxlLnB0OwotCQlmb3IoOzspIHsKLQkJCVNPTEQoImxvb3AiKTsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQkvKiAhICggbDwwIHx8ICggbD49MCAmJiAoICEgcGZpcnN0IHx8IChmbGFncyA9PSBISVBSSSAmJiBwcmkgIT0gSElQUkkpICkgKSApICovIAotCQkJLyogKCAhIGw8MCAmJiAhICggbD49MCAmJiAoICEgcGZpcnN0IHx8IChmbGFncyA9PSBISVBSSSAmJiBwcmkgIT0gSElQUkkpICkgKSApICovIAotCQkJLyogKCBsPj0wICYmICggISBsPj0wIHx8ICEgKCAhIHBmaXJzdCB8fCAoZmxhZ3MgPT0gSElQUkkgJiYgcHJpICE9IEhJUFJJKSApICkgKSAqLyAKLQkJCS8qICggbD49MCAmJiAoIGw8MCB8fCAoIHBmaXJzdCAmJiAhIChmbGFncyA9PSBISVBSSSAmJiBwcmkgIT0gSElQUkkpICkgKSApICovIAotCQkJLyogKCBsPj0wICYmICggbDwwIHx8ICggcGZpcnN0ICYmIChmbGFncyAhPSBISVBSSSB8fCBwcmkgPT0gSElQUkkpICkgKSApICovIAotCQkJLyogKCBsPj0wICYmICggcGZpcnN0ICYmIChmbGFncyAhPSBISVBSSSB8fCBwcmkgPT0gSElQUkkpICkgKSAqLyAKLQkJCWlmIChjdGxfbWF4bGVuID49IDAgJiYgc29jay0+cGZpcnN0ICYmICgqZmxhZ3NfcCAhPSBNU0dfSElQUkkgfHwgc29jay0+cGZpcnN0LT5wcmkgPT0gTVNHX0hJUFJJKSkKLQkJCQlicmVhazsKLQkJCVNPTEQoImNvbmQgMSBwYXNzZWQiKTsKLQkJCWlmICgKLQkJCSNpZiAxCi0JCQkJKmZsYWdzX3AgIT0gTVNHX0hJUFJJICYmCi0JCQkjZW5kaWYKLQkJCQkoKGZpbHAtPmZfb3AtPnBvbGwoZmlscCwgd2FpdCkgJiBQT0xMSU4pIHx8Ci0JCQkJKGZpbHAtPmZfb3AtPnBvbGwoZmlscCwgTlVMTCkgJiBQT0xMSU4pIHx8Ci0JCQkJc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKCAqZmxhZ3NfcCA9PSBNU0dfSElQUkkgKSB7Ci0JCQkJU09MRCgiYXZvaWRpbmcgbG9ja3VwIik7Ci0JCQkJYnJlYWsgOwotCQkJfQotCQkJaWYod2FpdF90YWJsZS5lcnJvcikgewotCQkJCVNPTEQoIndhaXQtdGFibGUgZXJyb3IiKTsKLQkJCQlwb2xsX2ZyZWV3YWl0KCZ3YWl0X3RhYmxlKTsKLQkJCQlyZXR1cm4gd2FpdF90YWJsZS5lcnJvcjsKLQkJCX0KLQkJCVNPTEQoInNjaGVkdWxpbmciKTsKLQkJCXNjaGVkdWxlKCk7Ci0JCX0KLQkJU09MRCgibG9vcCBkb25lIik7Ci0JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCQlwb2xsX2ZyZWV3YWl0KCZ3YWl0X3RhYmxlKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlTT0xEKCJzaWduYWwgcGVuZGluZyIpOwotCQkJcmV0dXJuIC1FSU5UUjsKLQkJfQotCX0KLQlpZiAoY3RsX21heGxlbiA+PSAwICYmIHNvY2stPnBmaXJzdCkgewotCQlzdHJ1Y3QgVF9wcmltc2cgKml0ID0gc29jay0+cGZpcnN0OwotCQlpbnQgbCA9IG1pbl90KGludCwgY3RsX21heGxlbiwgaXQtPmxlbmd0aCk7Ci0JCVNDSEVDS19NQUdJQygoY2hhciopKCh1NjQpKCgoY2hhciAqKSZpdC0+dHlwZSkrc29jay0+b2Zmc2V0K2l0LT5sZW5ndGgrNykmfjcpLE1LQ1RMX01BR0lDKTsKLQkJU09MRCgicHVydGluZyBjdGwgZGF0YSIpOwotCQlpZihjb3B5X3RvX3VzZXIoY3RsX2J1ZiwKLQkJCShjaGFyKikmaXQtPnR5cGUgKyBzb2NrLT5vZmZzZXQsIGwpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCVNPTEQoInB1ciBpdCIpOwotCQlpZihwdXRfdXNlcihsLCBjdGxfbGVuKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlTT0xEKCJzZXQgY3RsX2xlbiIpOwotCQkqZmxhZ3NfcCA9IGl0LT5wcmk7Ci0JCWl0LT5sZW5ndGggLT0gbDsKLQkJaWYgKGl0LT5sZW5ndGgpIHsKLQkJCVNPTEQoIm1vcmUgY3RsIik7Ci0JCQlzb2NrLT5vZmZzZXQgKz0gbDsKLQkJCXJldHVybiBNT1JFQ1RMOwotCQl9IGVsc2UgewotCQkJU09MRCgicmVtb3ZpbmcgbWVzc2FnZSIpOwotCQkJc29jay0+cGZpcnN0ID0gaXQtPm5leHQ7Ci0JCQlpZiAoIXNvY2stPnBmaXJzdCkKLQkJCQlzb2NrLT5wbGFzdCA9IE5VTEw7Ci0JCQlTT0xERCgoImdldG1zZyBrZnJlZSAlMDE2bHgtPiUwMTZseFxuIiwgaXQsIHNvY2stPnBmaXJzdCkpOwotCQkJbXlrZnJlZShpdCk7Ci0JCQlzb2NrLT5vZmZzZXQgPSAwOwotCQkJU09MRCgiY3RsIGRvbmUiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCSpmbGFnc19wID0gMDsKLQlpZiAoY3RsX21heGxlbiA+PSAwKSB7Ci0JCVNPTEQoIkFDQ0VQVCBwZXJoYXBzPyIpOwotCQlpZiAoU09DS0VUX0koaW5vKS0+dHlwZSA9PSBTT0NLX1NUUkVBTSAmJiBzb2NrLT5zdGF0ZSA9PSBUU19JRExFKSB7Ci0JCQlzdHJ1Y3QgVF9jb25uX2luZCBpbmQ7Ci0JCQljaGFyICpidWYgPSBnZXRwYWdlKCk7Ci0JCQlpbnQgbGVuID0gQlVGX1NJWkU7Ci0KLQkJCVNPTEQoInRyeWluZyBBQ0NFUFQiKTsKLQkJCWlmIChwdXRfdXNlcihjdGxfbWF4bGVuIC0gc2l6ZW9mKGluZCksIGN0bF9sZW4pKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJYXJnc1swXSA9IGZkOwotCQkJYXJnc1sxXSA9IChsb25nKWJ1ZjsKLQkJCWFyZ3NbMl0gPSAobG9uZykmbGVuOwotCQkJb2xkZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzOwotCQkJZmlscC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwotCQkJU09MRCgiY2FsbGluZyBBQ0NFUFQiKTsKLQkJCXNldF9mcyhLRVJORUxfRFMpOwotCQkJZXJyb3IgPSBzeXNfc29ja2V0Y2FsbChTWVNfQUNDRVBULCBhcmdzKTsKLQkJCXNldF9mcyhvbGRfZnMpOwotCQkJZmlscC0+Zl9mbGFncyA9IG9sZGZsYWdzOwotCQkJaWYgKGVycm9yIDwgMCkgewotCQkJCVNPTEQoInNvbWUgZXJyb3IiKTsKLQkJCQlwdXRwYWdlKGJ1Zik7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJaWYgKGVycm9yKSB7Ci0JCQkJU09MRCgiY29ubmVjdCIpOwotCQkJCXB1dHBhZ2UoYnVmKTsKLQkJCQlpZiAoc2l6ZW9mKGluZCkgPiBjdGxfbWF4bGVuKSB7Ci0JCQkJCVNPTEQoImdlbmVyYXRpbmcgQ09OTl9JTkQiKTsKLQkJCQkJaW5kLlBSSU1fdHlwZSA9IFRfQ09OTl9JTkQ7Ci0JCQkJCWluZC5TUkNfbGVuZ3RoID0gbGVuOwotCQkJCQlpbmQuU1JDX29mZnNldCA9IHNpemVvZihpbmQpOwotCQkJCQlpbmQuT1BUX2xlbmd0aCA9IGluZC5PUFRfb2Zmc2V0ID0gMDsKLQkJCQkJaW5kLlNFUV9udW1iZXIgPSBlcnJvcjsKLQkJCQkJaWYoY29weV90b191c2VyKGN0bF9idWYsICZpbmQsIHNpemVvZihpbmQpKXx8Ci0JCQkJCSAgIHB1dF91c2VyKHNpemVvZihpbmQpK2luZC5TUkNfbGVuZ3RoLGN0bF9sZW4pKQotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCVNPTEQoIkNPTk5fSU5EIGNyZWF0ZWQiKTsKLQkJCQl9Ci0JCQkJaWYgKGRhdGFfbWF4bGVuID49IDApCi0JCQkJCXB1dF91c2VyKDAsIGRhdGFfbGVuKTsKLQkJCQlTT0xEKCJDT05OX0lORCBkb25lIik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlpZiAobGVuPmN0bF9tYXhsZW4pIHsKLQkJCQlTT0xEKCJkYXRhIGRvbid0IGZpdCIpOwotCQkJCXB1dHBhZ2UoYnVmKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsJCS8qIFhYWCAtIGlzIHRoaXMgb2sgPyAqLwotCQkJfQotCQkJaWYoY29weV90b191c2VyKGN0bF9idWYsYnVmLGxlbikgfHwgcHV0X3VzZXIobGVuLGN0bF9sZW4pKXsKLQkJCQlTT0xEKCJjYW4ndCBjb3B5IGRhdGEiKTsKLQkJCQlwdXRwYWdlKGJ1Zik7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQlTT0xEKCJBQ0NFUFQgZG9uZSIpOwotCQkJcHV0cGFnZShidWYpOwotCQl9Ci0JfQotCVNPTEQoImNoZWNraW5nIGRhdGEgcmVxIik7Ci0JaWYgKGRhdGFfbWF4bGVuIDw9IDApIHsKLQkJaWYgKGRhdGFfbWF4bGVuID09IDApCi0JCQlwdXRfdXNlcigwLCBkYXRhX2xlbik7Ci0JCWlmIChjdGxfbWF4bGVuID49IDApCi0JCQlwdXRfdXNlcigwLCBjdGxfbGVuKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCVNPTEQoIndhbnRzIGRhdGEiKTsKLQlpZiAoY3RsX21heGxlbiA+IHNpemVvZih1ZGkpICYmIHNvY2stPnN0YXRlID09IFRTX0lETEUpIHsKLQkJU09MRCgidWRpIGZpdHMiKTsKLQkJdG1wYnVmID0gY3RsX2J1ZiArIHNpemVvZih1ZGkpOwotCQl0bXBsZW4gPSBjdGxfbWF4bGVuIC0gc2l6ZW9mKHVkaSk7Ci0JfSBlbHNlIHsKLQkJU09MRCgidWRpIGRvZXMgbm90IGZpdCIpOwotCQl0bXBidWYgPSBOVUxMOwotCQl0bXBsZW4gPSAwOwotCX0KLQlpZiAocHV0X3VzZXIodG1wbGVuLCBjdGxfbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JU09MRCgic2V0IGN0bF9sZW4iKTsKLQlvbGRmbGFncyA9IGZpbHAtPmZfZmxhZ3M7Ci0JZmlscC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwotCVNPTEQoImNhbGxpbmcgcmVjdmZyb20iKTsKLQlzeXNfcmVjdmZyb20gPSAoaW50ICgqKShpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCwgdW5zaWduZWQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKSlTWVMocmVjdmZyb20pOwotCWVycm9yID0gc3lzX3JlY3Zmcm9tKGZkLCBkYXRhX2J1ZiwgZGF0YV9tYXhsZW4sIDAsIChzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICopdG1wYnVmLCBjdGxfbGVuKTsKLQlmaWxwLT5mX2ZsYWdzID0gb2xkZmxhZ3M7Ci0JaWYgKGVycm9yIDwgMCkKLQkJcmV0dXJuIGVycm9yOwotCVNPTEQoImVycm9yID49IDAiICkgOwotCWlmIChlcnJvciAmJiBjdGxfbWF4bGVuID4gc2l6ZW9mKHVkaSkgJiYgc29jay0+c3RhdGUgPT0gVFNfSURMRSkgewotCQlTT0xEKCJnZW5lcmF0aW5nIHVkaSIpOwotCQl1ZGkuUFJJTV90eXBlID0gVF9VTklUREFUQV9JTkQ7Ci0JCWlmIChnZXRfdXNlcih1ZGkuU1JDX2xlbmd0aCwgY3RsX2xlbikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJdWRpLlNSQ19vZmZzZXQgPSBzaXplb2YodWRpKTsKLQkJdWRpLk9QVF9sZW5ndGggPSB1ZGkuT1BUX29mZnNldCA9IDA7Ci0JCWlmIChjb3B5X3RvX3VzZXIoY3RsX2J1ZiwgJnVkaSwgc2l6ZW9mKHVkaSkpIHx8Ci0JCSAgICBwdXRfdXNlcihzaXplb2YodWRpKSt1ZGkuU1JDX2xlbmd0aCwgY3RsX2xlbikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJU09MRCgidWRpIGRvbmUiKTsKLQl9IGVsc2UgewotCQlpZiAocHV0X3VzZXIoMCwgY3RsX2xlbikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcHV0X3VzZXIoZXJyb3IsIGRhdGFfbGVuKTsKLQlTT0xEKCJkb25lIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfZ2V0bXNnKHVuc2lnbmVkIGludCBmZCwgdTMyIGFyZzEsIHUzMiBhcmcyLCB1MzIgYXJnMykKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQlzdHJ1Y3QgaW5vZGUgKmlubzsKLQlzdHJ1Y3Qgc3RyYnVmIF9fdXNlciAqY3RscHRyOwotCXN0cnVjdCBzdHJidWYgX191c2VyICpkYXRwdHI7Ci0Jc3RydWN0IHN0cmJ1ZiBjdGwsIGRhdDsKLQlpbnQgX191c2VyICpmbGdwdHI7Ci0JaW50IGZsYWdzOwotCWludCBlcnJvciA9IC1FQkFERjsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwotCi0JU09MRCgiZW50cnkiKTsKLQlsb2NrX2tlcm5lbCgpOwotCWlmIChmZCA+PSBzeXNjdGxfbnJfb3BlbikKLQkJZ290byBvdXQ7Ci0KLQlmZHQgPSBmaWxlc19mZHRhYmxlKGN1cnJlbnQtPmZpbGVzKTsKLQlmaWxwID0gZmR0LT5mZFtmZF07Ci0JaWYoIWZpbHApIGdvdG8gb3V0OwotCi0JaW5vID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpZiAoIWlubyB8fCAhU19JU1NPQ0soaW5vLT5pX21vZGUpKQotCQlnb3RvIG91dDsKLQotCWN0bHB0ciA9IChzdHJ1Y3Qgc3RyYnVmIF9fdXNlciAqKUEoYXJnMSk7Ci0JZGF0cHRyID0gKHN0cnVjdCBzdHJidWYgX191c2VyICopQShhcmcyKTsKLQlmbGdwdHIgPSAoaW50IF9fdXNlciAqKUEoYXJnMyk7Ci0KLQllcnJvciA9IC1FRkFVTFQ7Ci0KLQlpZiAoY3RscHRyKSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmY3RsLGN0bHB0cixzaXplb2Yoc3RydWN0IHN0cmJ1ZikpIHx8IAotCQkgICAgcHV0X3VzZXIoLTEsJmN0bHB0ci0+bGVuKSkKLQkJCWdvdG8gb3V0OwotCX0gZWxzZQotCQljdGwubWF4bGVuID0gLTE7Ci0KLQlpZiAoZGF0cHRyKSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0LGRhdHB0cixzaXplb2Yoc3RydWN0IHN0cmJ1ZikpIHx8IAotCQkgICAgcHV0X3VzZXIoLTEsJmRhdHB0ci0+bGVuKSkKLQkJCWdvdG8gb3V0OwotCX0gZWxzZQotCQlkYXQubWF4bGVuID0gLTE7Ci0KLQlpZiAoZ2V0X3VzZXIoZmxhZ3MsZmxncHRyKSkKLQkJZ290byBvdXQ7Ci0KLQlzd2l0Y2ggKGZsYWdzKSB7Ci0JY2FzZSAwOgotCWNhc2UgTVNHX0hJUFJJOgotCWNhc2UgTVNHX0FOWToKLQljYXNlIE1TR19CQU5EOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVycm9yID0gdGltb2RfZ2V0bXNnKGZkLEEoY3RsLmJ1ZiksY3RsLm1heGxlbiwmY3RscHRyLT5sZW4sCi0JCQkJQShkYXQuYnVmKSxkYXQubWF4bGVuLCZkYXRwdHItPmxlbiwmZmxhZ3MpOwotCi0JaWYgKCFlcnJvciAmJiBwdXRfdXNlcihmbGFncyxmbGdwdHIpKQotCQllcnJvciA9IC1FRkFVTFQ7Ci1vdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwotCVNPTEQoImRvbmUiKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHNvbGFyaXNfcHV0bXNnKHVuc2lnbmVkIGludCBmZCwgdTMyIGFyZzEsIHUzMiBhcmcyLCB1MzIgYXJnMykKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQlzdHJ1Y3QgaW5vZGUgKmlubzsKLQlzdHJ1Y3Qgc3RyYnVmIF9fdXNlciAqY3RscHRyOwotCXN0cnVjdCBzdHJidWYgX191c2VyICpkYXRwdHI7Ci0Jc3RydWN0IHN0cmJ1ZiBjdGwsIGRhdDsKLQlpbnQgZmxhZ3MgPSAoaW50KSBhcmczOwotCWludCBlcnJvciA9IC1FQkFERjsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwotCi0JU09MRCgiZW50cnkiKTsKLQlsb2NrX2tlcm5lbCgpOwotCWlmIChmZCA+PSBzeXNjdGxfbnJfb3BlbikKLQkJZ290byBvdXQ7Ci0KLQlmZHQgPSBmaWxlc19mZHRhYmxlKGN1cnJlbnQtPmZpbGVzKTsKLQlmaWxwID0gZmR0LT5mZFtmZF07Ci0JaWYoIWZpbHApIGdvdG8gb3V0OwotCi0JaW5vID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpZiAoIWlubykgZ290byBvdXQ7Ci0KLQlpZiAoIVNfSVNTT0NLKGluby0+aV9tb2RlKSAmJgotCQkoaW1ham9yKGlubykgIT0gMzAgfHwgaW1pbm9yKGlubykgIT0gMSkpCi0JCWdvdG8gb3V0OwotCi0JY3RscHRyID0gQShhcmcxKTsKLQlkYXRwdHIgPSBBKGFyZzIpOwotCi0JZXJyb3IgPSAtRUZBVUxUOwotCi0JaWYgKGN0bHB0cikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmN0bCxjdGxwdHIsc2l6ZW9mKGN0bCkpKQotCQkJZ290byBvdXQ7Ci0JCWlmIChjdGwubGVuIDwgMCAmJiBmbGFncykgewotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQljdGwubGVuID0gMDsKLQkJY3RsLmJ1ZiA9IDA7Ci0JfQotCi0JaWYgKGRhdHB0cikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdCxkYXRwdHIsc2l6ZW9mKGRhdCkpKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJZGF0LmxlbiA9IDA7Ci0JCWRhdC5idWYgPSAwOwotCX0KLQotCWVycm9yID0gdGltb2RfcHV0bXNnKGZkLEEoY3RsLmJ1ZiksY3RsLmxlbiwKLQkJCQlBKGRhdC5idWYpLGRhdC5sZW4sZmxhZ3MpOwotb3V0OgotCXVubG9ja19rZXJuZWwoKTsKLQlTT0xEKCJkb25lIik7Ci0JcmV0dXJuIGVycm9yOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLmkzODYgYi9hcmNoL3VtL0tjb25maWcuaTM4NgppbmRleCAzY2Q4YTA0Li5lMDllZGZhIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuaTM4NgorKysgYi9hcmNoL3VtL0tjb25maWcuaTM4NgpAQCAtMTksMTAgKzE5LDYgQEAKIAlib29sCiAJZGVmYXVsdCBuCiAKLWNvbmZpZyBTRU1BUEhPUkVfU0xFRVBFUlMKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyAzX0xFVkVMX1BHVEFCTEVTCiAJYm9vbCAiVGhyZWUtbGV2ZWwgcGFnZXRhYmxlcyAoRVhQRVJJTUVOVEFMKSIKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy54ODZfNjQgYi9hcmNoL3VtL0tjb25maWcueDg2XzY0CmluZGV4IDY1MzNiMzQuLjNmYmU2OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZy54ODZfNjQKKysrIGIvYXJjaC91bS9LY29uZmlnLng4Nl82NApAQCAtMTEsMTAgKzExLDYgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBTRU1BUEhPUkVfU0xFRVBFUlMKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyAzX0xFVkVMX1BHVEFCTEVTCiAgICAgICAgYm9vbAogICAgICAgIGRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kZWZjb25maWcgYi9hcmNoL3VtL2RlZmNvbmZpZwppbmRleCA1OTIxNWJjLi42YmQ0NTZmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RlZmNvbmZpZworKysgYi9hcmNoL3VtL2RlZmNvbmZpZwpAQCAtMSwxMyArMSwyMiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMwotIyBGcmkgQXByIDI4IDA5OjMxOjIwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNAorIyBUaHUgRmViICA3IDExOjQ4OjU1IDIwMDgKICMKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iYXJjaC8kQVJDSC9kZWZjb25maWciCiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfVU1MPXkKIENPTkZJR19NTVU9eQorQ09ORklHX05PX0lPTUVNPXkKKyMgQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CisjIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0Q9eQorQ09ORklHX0haPTEwMAogCiAjCiAjIFVNTC1zcGVjaWZpYyBvcHRpb25zCkBAIC00MCwxMSArNDksMTMgQEAKICMgQ09ORklHX01DWVJJWElJSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVklBQzNfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVklBQzcgaXMgbm90IHNldAorIyBDT05GSUdfTVBTQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQ09SRTIgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DUFUgaXMgbm90IHNldAogIyBDT05GSUdfWDg2X0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX1g4Nl9DTVBYQ0hHPXkKLUNPTkZJR19YODZfWEFERD15CiBDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUPTUKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfWDg2X1hBREQ9eQogQ09ORklHX1g4Nl9QUFJPX0ZFTkNFPXkKIENPTkZJR19YODZfV1BfV09SS1NfT0s9eQogQ09ORklHX1g4Nl9JTlZMUEc9eQpAQCAtNTMsNyArNjQsMTIgQEAKIENPTkZJR19YODZfR09PRF9BUElDPXkKIENPTkZJR19YODZfVVNFX1BQUk9fQ0hFQ0tTVU09eQogQ09ORklHX1g4Nl9UU0M9eQorQ09ORklHX1g4Nl9DTU9WPXkKK0NPTkZJR19YODZfTUlOSU1VTV9DUFVfRkFNSUxZPTQKK0NPTkZJR19YODZfREVCVUdDVExNU1I9eQogQ09ORklHX1VNTF9YODY9eQorQ09ORklHX1g4Nl8zMj15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CiAjIENPTkZJR18zX0xFVkVMX1BHVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTY3LDEzICs4MywxOCBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogQ09ORklHX0xEX1NDUklQVF9EWU49eQotQ09ORklHX05FVD15CiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0hPU1RGUz15CiAjIENPTkZJR19IUFBGUyBpcyBub3Qgc2V0CkBAIC04MywzMSArMTA0LDM4IEBACiBDT05GSUdfS0VSTkVMX1NUQUNLX09SREVSPTAKIAogIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMgR2VuZXJhbCBzZXR1cAogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIworQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0xMjgKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfVUlEMTY9eQorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKQEAgLTExNywyOSArMTQ1LDM2IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9PUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTE1MywxOSArMTg4LDE2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CiBDT05GSUdfQkxLX0RFVl9VQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9VQkRfU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OPXkKLSMgQ09ORklHX01NQVBQRVIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKQEAgLTE4NSwzMiArMjE3LDQzIEBACiBDT05GSUdfU1NMX0NIQU49InB0cyIKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0zMgogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1VNTF9TT1VORD1tCiBDT05GSUdfU09VTkQ9bQogQ09ORklHX0hPU1RBVURJTz1tCisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX1VNTF9SQU5ET009eQorIyBDT05GSUdfTU1BUFBFUiBpcyBub3Qgc2V0CiAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JraW5nCiAjCitDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yMjYsMjggKzI2OSwyMyBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0yNTgsMTMgKzI5Niw4IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTI3Miw5ICszMDUsMjAgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIFVNTCBOZXR3b3JrIERldmljZXMKQEAgLTI4NCwzMSArMzI4LDI0IEBACiBDT05GSUdfVU1MX05FVF9UVU5UQVA9eQogQ09ORklHX1VNTF9ORVRfU0xJUD15CiBDT05GSUdfVU1MX05FVF9EQUVNT049eQorIyBDT05GSUdfVU1MX05FVF9WREUgaXMgbm90IHNldAogQ09ORklHX1VNTF9ORVRfTUNBU1Q9eQogIyBDT05GSUdfVU1MX05FVF9QQ0FQIGlzIG5vdCBzZXQKIENPTkZJR19VTUxfTkVUX1NMSVJQPXkKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPW0KICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKIAogIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMgV2lyZWxlc3MgTEFOCiAjCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CkBAIC0zMTksMTggKzM1NiwxNSBAQAogIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAogQ09ORklHX1NMSVA9bQogIyBDT05GSUdfU0xJUF9DT01QUkVTU0VEIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX1NMSVBfU01BUlQgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUF9NT0RFX1NMSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIAogIwpAQCAtMzQxLDggKzM3NSw4IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1JFSVNFUkZTX0ZTPXkKICMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CkBAIC0zNTAsMTEgKzM4NCwxNSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKICMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAogQ09ORklHX1FVT1RBQ1RMPXkKQEAgLTM4MywxMCArNDIxLDExIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTQwNSwxMCArNDQ0LDcgQEAKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC00MTYsMTcgKzQ1MiwxMiBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldApAQCAtNDY3LDMzICs0OTgsODMgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFU181ODYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMF81ODYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9bQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9bQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfRE1BPXkKIAogIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKIApAQCAtNTAxLDIzICs1ODIsMzYgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQl9MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfR1BST0YgaXMgbm90IHNldAogIyBDT05GSUdfR0NPViBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvaGFyZGRvZ191c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvaGFyZGRvZ191c2VyLmMKaW5kZXggNDQ4YmE1OS4uYjU2ZjhlMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2hhcmRkb2dfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9oYXJkZG9nX3VzZXIuYwpAQCAtNzksMTQgKzc5LDE0IEBACiAJbiA9IHJlYWQoaW5fZmRzWzBdLCAmYywgc2l6ZW9mKGMpKTsKIAlpZiAobiA9PSAwKSB7CiAJCXByaW50aygiaGFyZGRvZ19vcGVuIC0gRU9GIG9uIHdhdGNoZG9nIHBpcGVcbiIpOwotCQloZWxwZXJfd2FpdChwaWQsIDEsIE5VTEwpOworCQloZWxwZXJfd2FpdChwaWQpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIG91dF9jbG9zZV9vdXQ7CiAJfQogCWVsc2UgaWYgKG4gPCAwKSB7CiAJCXByaW50aygiaGFyZGRvZ19vcGVuIC0gcmVhZCBvZiB3YXRjaGRvZyBwaXBlIGZhaWxlZCwgIgogCQkgICAgICAgImVyciA9ICVkXG4iLCBlcnJubyk7Ci0JCWhlbHBlcl93YWl0KHBpZCwgMSwgTlVMTCk7CisJCWhlbHBlcl93YWl0KHBpZCk7CiAJCWVyciA9IG47CiAJCWdvdG8gb3V0X2Nsb3NlX291dDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCmluZGV4IDFlOGY0MWEuLjFkNDNiZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCkBAIC0yNTYsMTEgKzI1Niw3IEBACiAKIHN0YXRpYyB2b2lkIHVtbF9uZXRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJcmV0dXJuOwotCWVsc2UgaWYgKGRldi0+bWNfY291bnQpCi0JCWRldi0+ZmxhZ3MgfD0gSUZGX0FMTE1VTFRJOwotCWVsc2UgZGV2LT5mbGFncyAmPSB+SUZGX0FMTE1VTFRJOworCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgdW1sX25ldF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvcmVnaXN0ZXJzLmggYi9hcmNoL3VtL2luY2x1ZGUvcmVnaXN0ZXJzLmgKaW5kZXggOWVhMWFlMy4uYjBiNDU4OSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3JlZ2lzdGVycy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9yZWdpc3RlcnMuaApAQCAtMTgsNSArMTgsNyBAQAogZXh0ZXJuIGludCBpbml0X3JlZ2lzdGVycyhpbnQgcGlkKTsKIGV4dGVybiB2b2lkIGdldF9zYWZlX3JlZ2lzdGVycyh1bnNpZ25lZCBsb25nICpyZWdzKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF90aHJlYWRfcmVnKGludCByZWcsIGptcF9idWYgKmJ1Zik7CitleHRlcm4gaW50IGdldF9mcF9yZWdpc3RlcnMoaW50IHBpZCwgdW5zaWduZWQgbG9uZyAqcmVncyk7CitleHRlcm4gaW50IHB1dF9mcF9yZWdpc3RlcnMoaW50IHBpZCwgdW5zaWduZWQgbG9uZyAqcmVncyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3B0cmFjZV91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlX3VzZXIuaAppbmRleCA4OTlhYTRiLi43NTY1MDcyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvcHRyYWNlX3VzZXIuaApAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgInVzZXJfY29uc3RhbnRzLmgiCiAKICNkZWZpbmUgUFRfT0ZGU0VUKHIpICgocikgKiBzaXplb2YobG9uZykpCiAKQEAgLTQwLDYgKzQxLDggQEAKICNkZWZpbmUgUFRfU1BfT0ZGU0VUIFBUX09GRlNFVChVRVNQKQogI2RlZmluZSBQVF9TUChyZWdzKSAoKHJlZ3MpW1VFU1BdKQogCisjZGVmaW5lIEZQX1NJWkUgKChIT1NUX1hGUF9TSVpFID4gSE9TVF9GUF9TSVpFKSA/IEhPU1RfWEZQX1NJWkUgOiBIT1NUX0ZQX1NJWkUpCisKICNpZm5kZWYgRlJBTUVfU0laRQogI2RlZmluZSBGUkFNRV9TSVpFICgxNykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlX3VzZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZV91c2VyLmgKaW5kZXggNGNkNjFhOC4uNDVjMGJkOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvcHRyYWNlX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9wdHJhY2VfdXNlci5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI3VuZGVmIF9fRlJBTUVfT0ZGU0VUUworI2luY2x1ZGUgInVzZXJfY29uc3RhbnRzLmgiCiAKICNkZWZpbmUgUFRfSU5ERVgob2ZmKSAoKG9mZikgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCiAKQEAgLTY5LDYgKzcwLDggQEAKICNkZWZpbmUgUkVHU19JUF9JTkRFWCBQVF9JTkRFWChSSVApCiAjZGVmaW5lIFJFR1NfU1BfSU5ERVggUFRfSU5ERVgoUlNQKQogCisjZGVmaW5lIEZQX1NJWkUgKEhPU1RfRlBfU0laRSkKKwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pbml0cmQuYyBiL2FyY2gvdW0va2VybmVsL2luaXRyZC5jCmluZGV4IGZhMDE1NTYuLmQzODZjNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2luaXRyZC5jCisrKyBiL2FyY2gvdW0va2VybmVsL2luaXRyZC5jCkBAIC0zMiw3ICszMiw3IEBACiAJICogYXNrIGZvciBubyBtZW1vcnkuCiAJICovCiAJaWYgKHNpemUgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlwiJVwiIGlzIGEgemVyby1zaXplIGluaXRyZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiXCIlc1wiIGlzIGEgemVyby1zaXplIGluaXRyZFxuIiwgaW5pdHJkKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9tZW0uYyBiL2FyY2gvdW0va2VybmVsL21lbS5jCmluZGV4IDI2MjdjZTguLjJlZWExZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL21lbS5jCkBAIC0yOTksNyArMjk5LDcgQEAKIHsKIAlpbnQgcGZuLCB0b3RhbCA9IDAsIHJlc2VydmVkID0gMDsKIAlpbnQgc2hhcmVkID0gMCwgY2FjaGVkID0gMDsKLQlpbnQgaGlnaG1lbSA9IDA7CisJaW50IGhpZ2hfbWVtID0gMDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbS1pbmZvOlxuIik7CkBAIC0zMTEsNyArMzExLDcgQEAKIAkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJCXRvdGFsKys7CiAJCWlmIChQYWdlSGlnaE1lbShwYWdlKSkKLQkJCWhpZ2htZW0rKzsKKwkJCWhpZ2hfbWVtKys7CiAJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQlyZXNlcnZlZCsrOwogCQllbHNlIGlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQpAQCAtMzIwLDcgKzMyMCw3IEBACiAJCQlzaGFyZWQgKz0gcGFnZV9jb3VudChwYWdlKSAtIDE7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVkIHBhZ2VzIG9mIFJBTVxuIiwgdG90YWwpOwotCXByaW50ayhLRVJOX0lORk8gIiVkIHBhZ2VzIG9mIEhJR0hNRU1cbiIsIGhpZ2htZW0pOworCXByaW50ayhLRVJOX0lORk8gIiVkIHBhZ2VzIG9mIEhJR0hNRU1cbiIsIGhpZ2hfbWVtKTsKIAlwcmludGsoS0VSTl9JTkZPICIlZCByZXNlcnZlZCBwYWdlc1xuIiwgcmVzZXJ2ZWQpOwogCXByaW50ayhLRVJOX0lORk8gIiVkIHBhZ2VzIHNoYXJlZFxuIiwgc2hhcmVkKTsKIAlwcmludGsoS0VSTl9JTkZPICIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIiwgY2FjaGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwppbmRleCBmYzUwZDJmLi5lOGNiOWZmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMjgsOCArMTI4LDYgQEAKIAlyZXR1cm4gY3VycmVudDsKIH0KIAotZXh0ZXJuIHZvaWQgc2NoZWR1bGVfdGFpbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpOwotCiAvKgogICogVGhpcyBpcyBjYWxsZWQgbWFnaWNhbGx5LCBieSBpdHMgYWRkcmVzcyBiZWluZyBzdHVmZmVkIGluIGEgam1wX2J1ZgogICogYW5kIGJlaW5nIGxvbmdqbXAtZCB0by4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCmluZGV4IGIxNDgyOTQuLjFlOGNiYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwpAQCAtMTE1LDYgKzExNSwxNCBAQAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHRyYWNlX2ZhdWx0aW5mbykpOwogCX0KIAllbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmcHJlZ3NbRlBfU0laRV07CisKKwkJZXJyID0gZ2V0X2ZwX3JlZ2lzdGVycyhwaWQsIGZwcmVncyk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoVU1fS0VSTl9FUlIgInNhdmVfZnBfcmVnaXN0ZXJzIHJldHVybmVkICVkXG4iLAorCQkJICAgICAgIGVycik7CisJCQlmYXRhbF9zaWdzZWd2KCk7CisJCX0KIAkJZXJyID0gcHRyYWNlKFBUUkFDRV9DT05ULCBwaWQsIDAsIFNJR1NFR1YpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoVU1fS0VSTl9FUlIgIkZhaWxlZCB0byBjb250aW51ZSBzdHViLCBwaWQgPSAlZCwgIgpAQCAtMTI4LDYgKzEzNiwxMyBAQAogCQkgKiB0aGUgc3R1YiBzdGFjayBwYWdlLiBXZSBqdXN0IGhhdmUgdG8gY29weSBpdC4KIAkJICovCiAJCW1lbWNweShmaSwgKHZvaWQgKiljdXJyZW50X3N0dWJfc3RhY2soKSwgc2l6ZW9mKCpmaSkpOworCisJCWVyciA9IHB1dF9mcF9yZWdpc3RlcnMocGlkLCBmcHJlZ3MpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKFVNX0tFUk5fRVJSICJwdXRfZnBfcmVnaXN0ZXJzIHJldHVybmVkICVkXG4iLAorCQkJICAgICAgIGVycik7CisJCQlmYXRhbF9zaWdzZWd2KCk7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jCmluZGV4IGY3NGQ4NTMuLmI2MTM0NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYwpAQCAtNTYsNiArNTYsMjIgQEAKIAogaW50IGhhdmVfZnB4X3JlZ3MgPSAxOwogCitpbnQgZ2V0X2ZwX3JlZ2lzdGVycyhpbnQgcGlkLCB1bnNpZ25lZCBsb25nICpyZWdzKQoreworCWlmIChoYXZlX2ZweF9yZWdzKQorCQlyZXR1cm4gc2F2ZV9mcHhfcmVnaXN0ZXJzKHBpZCwgcmVncyk7CisJZWxzZQorCQlyZXR1cm4gc2F2ZV9mcF9yZWdpc3RlcnMocGlkLCByZWdzKTsKK30KKworaW50IHB1dF9mcF9yZWdpc3RlcnMoaW50IHBpZCwgdW5zaWduZWQgbG9uZyAqcmVncykKK3sKKwlpZiAoaGF2ZV9mcHhfcmVncykKKwkJcmV0dXJuIHJlc3RvcmVfZnB4X3JlZ2lzdGVycyhwaWQsIHJlZ3MpOworCWVsc2UKKwkJcmV0dXJuIHJlc3RvcmVfZnBfcmVnaXN0ZXJzKHBpZCwgcmVncyk7Cit9CisKIHZvaWQgYXJjaF9pbml0X3JlZ2lzdGVycyhpbnQgcGlkKQogewogCXVuc2lnbmVkIGxvbmcgZnB4X3JlZ3NbSE9TVF9YRlBfU0laRV07CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvcmVnaXN0ZXJzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvcmVnaXN0ZXJzLmMKaW5kZXggYTM3NTg1My4uNTk0ZDk3YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zeXMteDg2XzY0L3JlZ2lzdGVycy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9yZWdpc3RlcnMuYwpAQCAtNDAsMyArNDAsMTMgQEAKIAkJcmV0dXJuIDA7CiAJfQogfQorCitpbnQgZ2V0X2ZwX3JlZ2lzdGVycyhpbnQgcGlkLCB1bnNpZ25lZCBsb25nICpyZWdzKQoreworCXJldHVybiBzYXZlX2ZwX3JlZ2lzdGVycyhwaWQsIHJlZ3MpOworfQorCitpbnQgcHV0X2ZwX3JlZ2lzdGVycyhpbnQgcGlkLCB1bnNpZ25lZCBsb25nICpyZWdzKQoreworCXJldHVybiByZXN0b3JlX2ZwX3JlZ2lzdGVycyhwaWQsIHJlZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9rc3ltcy5jIGIvYXJjaC91bS9zeXMtaTM4Ni9rc3ltcy5jCmluZGV4IDJhMWVhYzEuLmJmYmVmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYva3N5bXMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L2tzeW1zLmMKQEAgLTEsMTcgKzEsNSBAQAogI2luY2x1ZGUgImxpbnV4L21vZHVsZS5oIgotI2luY2x1ZGUgImxpbnV4L2luNi5oIgotI2luY2x1ZGUgImxpbnV4L3J3c2VtLmgiCi0jaW5jbHVkZSAiYXNtL2J5dGVvcmRlci5oIgotI2luY2x1ZGUgImFzbS9kZWxheS5oIgotI2luY2x1ZGUgImFzbS9zZW1hcGhvcmUuaCIKLSNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgogI2luY2x1ZGUgImFzbS9jaGVja3N1bS5oIgotI2luY2x1ZGUgImFzbS9lcnJuby5oIgotCi1FWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWQpOwotRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUpOwotRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkX3RyeWxvY2spOwotRVhQT1JUX1NZTUJPTChfX3VwX3dha2V1cCk7CiAKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni91c2VyLW9mZnNldHMuYyBiL2FyY2gvdW0vc3lzLWkzODYvdXNlci1vZmZzZXRzLmMKaW5kZXggNTE0MjQxNS4uMzliZDMyYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni91c2VyLW9mZnNldHMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3VzZXItb2Zmc2V0cy5jCkBAIC0xNywzNiArMTcsOSBAQAogCiB2b2lkIGZvbyh2b2lkKQogewotCU9GRlNFVChIT1NUX1NDX0lQLCBzaWdjb250ZXh0LCBlaXApOwotCU9GRlNFVChIT1NUX1NDX1NQLCBzaWdjb250ZXh0LCBlc3ApOwotCU9GRlNFVChIT1NUX1NDX0ZTLCBzaWdjb250ZXh0LCBmcyk7Ci0JT0ZGU0VUKEhPU1RfU0NfR1MsIHNpZ2NvbnRleHQsIGdzKTsKLQlPRkZTRVQoSE9TVF9TQ19EUywgc2lnY29udGV4dCwgZHMpOwotCU9GRlNFVChIT1NUX1NDX0VTLCBzaWdjb250ZXh0LCBlcyk7Ci0JT0ZGU0VUKEhPU1RfU0NfU1MsIHNpZ2NvbnRleHQsIHNzKTsKLQlPRkZTRVQoSE9TVF9TQ19DUywgc2lnY29udGV4dCwgY3MpOwotCU9GRlNFVChIT1NUX1NDX0VGTEFHUywgc2lnY29udGV4dCwgZWZsYWdzKTsKLQlPRkZTRVQoSE9TVF9TQ19FQVgsIHNpZ2NvbnRleHQsIGVheCk7Ci0JT0ZGU0VUKEhPU1RfU0NfRUJYLCBzaWdjb250ZXh0LCBlYngpOwotCU9GRlNFVChIT1NUX1NDX0VDWCwgc2lnY29udGV4dCwgZWN4KTsKLQlPRkZTRVQoSE9TVF9TQ19FRFgsIHNpZ2NvbnRleHQsIGVkeCk7Ci0JT0ZGU0VUKEhPU1RfU0NfRURJLCBzaWdjb250ZXh0LCBlZGkpOwotCU9GRlNFVChIT1NUX1NDX0VTSSwgc2lnY29udGV4dCwgZXNpKTsKLQlPRkZTRVQoSE9TVF9TQ19FQlAsIHNpZ2NvbnRleHQsIGVicCk7CiAJT0ZGU0VUKEhPU1RfU0NfVFJBUE5PLCBzaWdjb250ZXh0LCB0cmFwbm8pOwogCU9GRlNFVChIT1NUX1NDX0VSUiwgc2lnY29udGV4dCwgZXJyKTsKIAlPRkZTRVQoSE9TVF9TQ19DUjIsIHNpZ2NvbnRleHQsIGNyMik7Ci0JT0ZGU0VUKEhPU1RfU0NfRlBTVEFURSwgc2lnY29udGV4dCwgZnBzdGF0ZSk7Ci0JT0ZGU0VUKEhPU1RfU0NfU0lHTUFTSywgc2lnY29udGV4dCwgb2xkbWFzayk7Ci0JT0ZGU0VUKEhPU1RfU0NfRlBfQ1csIF9mcHN0YXRlLCBjdyk7Ci0JT0ZGU0VUKEhPU1RfU0NfRlBfU1csIF9mcHN0YXRlLCBzdyk7Ci0JT0ZGU0VUKEhPU1RfU0NfRlBfVEFHLCBfZnBzdGF0ZSwgdGFnKTsKLQlPRkZTRVQoSE9TVF9TQ19GUF9JUE9GRiwgX2Zwc3RhdGUsIGlwb2ZmKTsKLQlPRkZTRVQoSE9TVF9TQ19GUF9DU1NFTCwgX2Zwc3RhdGUsIGNzc2VsKTsKLQlPRkZTRVQoSE9TVF9TQ19GUF9EQVRBT0ZGLCBfZnBzdGF0ZSwgZGF0YW9mZik7Ci0JT0ZGU0VUKEhPU1RfU0NfRlBfREFUQVNFTCwgX2Zwc3RhdGUsIGRhdGFzZWwpOwotCU9GRlNFVChIT1NUX1NDX0ZQX1NULCBfZnBzdGF0ZSwgX3N0KTsKLQlPRkZTRVQoSE9TVF9TQ19GWFNSX0VOViwgX2Zwc3RhdGUsIF9meHNyX2Vudik7CiAKIAlERUZJTkVfTE9OR1MoSE9TVF9GUF9TSVpFLCBzaXplb2Yoc3RydWN0IHVzZXJfZnByZWdzX3N0cnVjdCkpOwogCURFRklORV9MT05HUyhIT1NUX1hGUF9TSVpFLCBzaXplb2Yoc3RydWN0IHVzZXJfZnB4cmVnc19zdHJ1Y3QpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXBwYy9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLXBwYy9NYWtlZmlsZQppbmRleCAwODkwMTUyLi5iOGJjODQ0IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1wcGMvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMtcHBjL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogLlMubzoKIAkkKENDKSAkKEtCVUlMRF9BRkxBR1MpIC1EX19BU1NFTUJMWV9fIC1EX19VTV9QUENfXyAtYyAkPCAtbyAkKi5vCiAKLU9CSlMgPSBwdHJhY2UubyBzaWdjb250ZXh0Lm8gc2VtYXBob3JlLm8gY2hlY2tzdW0ubyBtaXNjdGhpbmdzLm8gbWlzYy5vIFwKK09CSlMgPSBwdHJhY2UubyBzaWdjb250ZXh0Lm8gY2hlY2tzdW0ubyBtaXNjdGhpbmdzLm8gbWlzYy5vIFwKIAlwdHJhY2VfdXNlci5vIHN5c3JxLm8KIAogRVhUUkFfQUZMQUdTIDo9IC1EQ09ORklHX1BQQzMyIC1JLiAtSSQoc3JjdHJlZSkvYXJjaC9wcGMva2VybmVsCkBAIC0yMCwxMCArMjAsNiBAQAogc2lnY29udGV4dC5vOiBzaWdjb250ZXh0LmMKIAkkKENDKSAkKFVTRVJfQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgLWMgLW8gJEAgJDwKIAotc2VtYXBob3JlLmM6Ci0Jcm0gLWYgJEAKLQlsbiAtcyAkKHNyY3RyZWUpL2FyY2gvcHBjL2tlcm5lbC8kQCAkQAotCiBjaGVja3N1bS5TOgogCXJtIC1mICRACiAJbG4gLXMgJChzcmN0cmVlKS9hcmNoL3BwYy9saWIvJEAgJEAKQEAgLTY2LDQgKzYyLDQgQEAKIAkkKENDKSAkKEVYVFJBX0FGTEFHUykgJChLQlVJTERfQUZMQUdTKSAtRF9fQVNTRU1CTFlfXyAtRF9fVU1fUFBDX18gLWMgJDwgLW8gJCoubwogCXJtIC1mIGFzbQogCi1jbGVhbi1maWxlcyA6PSAkKE9CSlMpIHBwY19kZWZzLmggY2hlY2tzdW0uUyBzZW1hcGhvcmUuYyBta19kZWZzLmMKK2NsZWFuLWZpbGVzIDo9ICQoT0JKUykgcHBjX2RlZnMuaCBjaGVja3N1bS5TIG1rX2RlZnMuYwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L2tzeW1zLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQva3N5bXMuYwppbmRleCAxMmM1OTM2Li40ZDdkMWE4IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQva3N5bXMuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQva3N5bXMuYwpAQCAtMSwxNiArMSw1IEBACiAjaW5jbHVkZSAibGludXgvbW9kdWxlLmgiCi0jaW5jbHVkZSAibGludXgvaW42LmgiCi0jaW5jbHVkZSAibGludXgvcndzZW0uaCIKLSNpbmNsdWRlICJhc20vYnl0ZW9yZGVyLmgiCi0jaW5jbHVkZSAiYXNtL3NlbWFwaG9yZS5oIgotI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCi0jaW5jbHVkZSAiYXNtL2NoZWNrc3VtLmgiCi0jaW5jbHVkZSAiYXNtL2Vycm5vLmgiCi0KLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZCk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfdHJ5bG9jayk7Ci1FWFBPUlRfU1lNQk9MKF9fdXBfd2FrZXVwKTsKKyNpbmNsdWRlICJhc20vc3RyaW5nLmgiCiAKIC8qWFhYOiB3ZSBuZWVkIHRoZW0gYmVjYXVzZSB0aGV5IHdvdWxkIGJlIGV4cG9ydGVkIGJ5IHg4Nl82NCAqLwogRVhQT1JUX1NZTUJPTChfX21lbWNweSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvdXNlci1vZmZzZXRzLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvdXNlci1vZmZzZXRzLmMKaW5kZXggZjFlZjJhOC4uMmYzNDQzYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3VzZXItb2Zmc2V0cy5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC91c2VyLW9mZnNldHMuYwpAQCAtMTksMzcgKzE5LDkgQEAKIAogdm9pZCBmb28odm9pZCkKIHsKLQlPRkZTRVQoSE9TVF9TQ19SQlgsIHNpZ2NvbnRleHQsIHJieCk7Ci0JT0ZGU0VUKEhPU1RfU0NfUkNYLCBzaWdjb250ZXh0LCByY3gpOwotCU9GRlNFVChIT1NUX1NDX1JEWCwgc2lnY29udGV4dCwgcmR4KTsKLQlPRkZTRVQoSE9TVF9TQ19SU0ksIHNpZ2NvbnRleHQsIHJzaSk7Ci0JT0ZGU0VUKEhPU1RfU0NfUkRJLCBzaWdjb250ZXh0LCByZGkpOwotCU9GRlNFVChIT1NUX1NDX1JCUCwgc2lnY29udGV4dCwgcmJwKTsKLQlPRkZTRVQoSE9TVF9TQ19SQVgsIHNpZ2NvbnRleHQsIHJheCk7Ci0JT0ZGU0VUKEhPU1RfU0NfUjgsIHNpZ2NvbnRleHQsIHI4KTsKLQlPRkZTRVQoSE9TVF9TQ19SOSwgc2lnY29udGV4dCwgcjkpOwotCU9GRlNFVChIT1NUX1NDX1IxMCwgc2lnY29udGV4dCwgcjEwKTsKLQlPRkZTRVQoSE9TVF9TQ19SMTEsIHNpZ2NvbnRleHQsIHIxMSk7Ci0JT0ZGU0VUKEhPU1RfU0NfUjEyLCBzaWdjb250ZXh0LCByMTIpOwotCU9GRlNFVChIT1NUX1NDX1IxMywgc2lnY29udGV4dCwgcjEzKTsKLQlPRkZTRVQoSE9TVF9TQ19SMTQsIHNpZ2NvbnRleHQsIHIxNCk7Ci0JT0ZGU0VUKEhPU1RfU0NfUjE1LCBzaWdjb250ZXh0LCByMTUpOwotCU9GRlNFVChIT1NUX1NDX0lQLCBzaWdjb250ZXh0LCByaXApOwotCU9GRlNFVChIT1NUX1NDX1NQLCBzaWdjb250ZXh0LCByc3ApOwogCU9GRlNFVChIT1NUX1NDX0NSMiwgc2lnY29udGV4dCwgY3IyKTsKIAlPRkZTRVQoSE9TVF9TQ19FUlIsIHNpZ2NvbnRleHQsIGVycik7CiAJT0ZGU0VUKEhPU1RfU0NfVFJBUE5PLCBzaWdjb250ZXh0LCB0cmFwbm8pOwotCU9GRlNFVChIT1NUX1NDX0NTLCBzaWdjb250ZXh0LCBjcyk7Ci0JT0ZGU0VUKEhPU1RfU0NfRlMsIHNpZ2NvbnRleHQsIGZzKTsKLQlPRkZTRVQoSE9TVF9TQ19HUywgc2lnY29udGV4dCwgZ3MpOwotCU9GRlNFVChIT1NUX1NDX0VGTEFHUywgc2lnY29udGV4dCwgZWZsYWdzKTsKLQlPRkZTRVQoSE9TVF9TQ19TSUdNQVNLLCBzaWdjb250ZXh0LCBvbGRtYXNrKTsKLSNpZiAwCi0JT0ZGU0VUKEhPU1RfU0NfT1JJR19SQVgsIHNpZ2NvbnRleHQsIG9yaWdfcmF4KTsKLQlPRkZTRVQoSE9TVF9TQ19EUywgc2lnY29udGV4dCwgZHMpOwotCU9GRlNFVChIT1NUX1NDX0VTLCBzaWdjb250ZXh0LCBlcyk7Ci0JT0ZGU0VUKEhPU1RfU0NfU1MsIHNpZ2NvbnRleHQsIHNzKTsKLSNlbmRpZgogCiAJREVGSU5FKEhPU1RfRlBfU0laRSwgc2l6ZW9mKHN0cnVjdCBfZnBzdGF0ZSkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCURFRklORShIT1NUX1hGUF9TSVpFLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Y4NTAva2VybmVsL01ha2VmaWxlCmluZGV4IDM5MzA0ODIuLmRhNTg4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTEsNyArMTEsNyBAQAogCiBleHRyYS15IDo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCi1vYmoteSArPSBpbnR2Lm8gZW50cnkubyBwcm9jZXNzLm8gc3lzY2FsbHMubyB0aW1lLm8gc2VtYXBob3JlLm8gc2V0dXAubyBcCitvYmoteSArPSBpbnR2Lm8gZW50cnkubyBwcm9jZXNzLm8gc3lzY2FsbHMubyB0aW1lLm8gc2V0dXAubyBcCiAJIHNpZ25hbC5vIGlycS5vIG1hY2gubyBwdHJhY2UubyBidWcubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGUubyB2ODUwX2tzeW1zLm8KICMgY2hpcC1zcGVjaWZpYyBjb2RlCmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC92ODUwL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM4OWZkNi4uMDAwMDAwMAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3NlbWFwaG9yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBhcmNoL3Y4NTAva2VybmVsL3NlbWFwaG9yZS5jIC0tIFNlbWFwaG9yZSBzdXBwb3J0Ci0gKgotICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAwICBJQk0gQ29ycG9yYXRpb24KLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIExpbnVzIFRvcnZhbGRzCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcwotICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFRoaXMgZmlsZSBpcyBhIGNvcHkgb2YgdGhlIHMzOTAgdmVyc2lvbiwgYXJjaC9zMzkwL2tlcm5lbC9zZW1hcGhvcmUuYwotICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kKLSAqIHdoaWNoIHdhcyBkZXJpdmVkIGZyb20gdGhlIGkzODYgdmVyc2lvbiwgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9zZW1hcGhvcmUuYwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCi0vKgotICogU2VtYXBob3JlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0d28td2F5IGNvdW50ZXI6Ci0gKiBUaGUgImNvdW50IiB2YXJpYWJsZSBpcyBkZWNyZW1lbnRlZCBmb3IgZWFjaCBwcm9jZXNzCi0gKiB0aGF0IHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNlbWFwaG9yZSwgd2hpbGUgdGhlICJzbGVlcGluZyIKLSAqIHZhcmlhYmxlIGlzIGEgY291bnQgb2Ygc3VjaCBhY3F1aXJlcy4KLSAqCi0gKiBOb3RhYmx5LCB0aGUgaW5saW5lICJ1cCgpIiBhbmQgImRvd24oKSIgZnVuY3Rpb25zIGNhbgotICogZWZmaWNpZW50bHkgdGVzdCBpZiB0aGV5IG5lZWQgdG8gZG8gYW55IGV4dHJhIHdvcmsgKHVwCi0gKiBuZWVkcyB0byBkbyBzb21ldGhpbmcgb25seSBpZiBjb3VudCB3YXMgbmVnYXRpdmUgYmVmb3JlCi0gKiB0aGUgaW5jcmVtZW50IG9wZXJhdGlvbi4KLSAqCi0gKiAic2xlZXBpbmciIGFuZCB0aGUgY29udGVudGlvbiByb3V0aW5lIG9yZGVyaW5nIGlzCi0gKiBwcm90ZWN0ZWQgYnkgdGhlIHNlbWFwaG9yZSBzcGlubG9jay4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGlzCi0gKiBjb250ZW50aW9uIG9uIHRoZSBsb2NrLCBhbmQgYXMgc3VjaCBhbGwgdGhpcyBpcyB0aGUKLSAqICJub24tY3JpdGljYWwiIHBhcnQgb2YgdGhlIHdob2xlIHNlbWFwaG9yZSBidXNpbmVzcy4gVGhlCi0gKiBjcml0aWNhbCBwYXJ0IGlzIHRoZSBpbmxpbmUgc3R1ZmYgaW4gPGFzbS9zZW1hcGhvcmUuaD4KLSAqIHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgYW55IGV4dHJhIGp1bXBzIGFuZCBjYWxscy4KLSAqLwotCi0vKgotICogTG9naWM6Ci0gKiAgLSBvbmx5IG9uIGEgYm91bmRhcnkgY29uZGl0aW9uIGRvIHdlIG5lZWQgdG8gY2FyZS4gV2hlbiB3ZSBnbwotICogICAgZnJvbSBhIG5lZ2F0aXZlIGNvdW50IHRvIGEgbm9uLW5lZ2F0aXZlLCB3ZSB3YWtlIHBlb3BsZSB1cC4KLSAqICAtIHdoZW4gd2UgZ28gZnJvbSBhIG5vbi1uZWdhdGl2ZSBjb3VudCB0byBhIG5lZ2F0aXZlIGRvIHdlCi0gKiAgICAoYSkgc3luY2hyb25pemUgd2l0aCB0aGUgInNsZWVwZXIiIGNvdW50IGFuZCAoYikgbWFrZSBzdXJlCi0gKiAgICB0aGF0IHdlJ3JlIG9uIHRoZSB3YWtldXAgbGlzdCBiZWZvcmUgd2Ugc3luY2hyb25pemUgc28gdGhhdAotICogICAgd2UgY2Fubm90IGxvc2Ugd2FrZXVwIGV2ZW50cy4KLSAqLwotCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2VtYXBob3JlX2xvY2spOwotCi12b2lkIF9fc2NoZWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIHRzayk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQlzcGluX2xvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0Jc2VtLT5zbGVlcGVycysrOwotCWZvciAoOzspIHsKLQkJaW50IHNsZWVwZXJzID0gc2VtLT5zbGVlcGVyczsKLQotCQkvKgotCQkgKiBBZGQgImV2ZXJ5Ym9keSBlbHNlIiBpbnRvIGl0LiBUaGV5IGFyZW4ndAotCQkgKiBwbGF5aW5nLCBiZWNhdXNlIHdlIG93biB0aGUgc3BpbmxvY2suCi0JCSAqLwotCQlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoc2xlZXBlcnMgLSAxLCAmc2VtLT5jb3VudCkpIHsKLQkJCXNlbS0+c2xlZXBlcnMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2VtLT5zbGVlcGVycyA9IDE7CS8qIHVzIC0gc2VlIC0xIGFib3ZlICovCi0JCXNwaW5fdW5sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOwotCi0JCXNjaGVkdWxlKCk7Ci0JCXRzay0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKLQkJc3Bpbl9sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOwotCX0KLQlzcGluX3VubG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7Ci0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQl3YWtlX3VwKCZzZW0tPndhaXQpOwotfQotCi1pbnQgX19zY2hlZCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCXNwaW5fbG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQlzZW0tPnNsZWVwZXJzICsrOwotCWZvciAoOzspIHsKLQkJaW50IHNsZWVwZXJzID0gc2VtLT5zbGVlcGVyczsKLQotCQkvKgotCQkgKiBXaXRoIHNpZ25hbHMgcGVuZGluZywgdGhpcyB0dXJucyBpbnRvCi0JCSAqIHRoZSB0cnlsb2NrIGZhaWx1cmUgY2FzZSAtIHdlIHdvbid0IGJlCi0JCSAqIHNsZWVwaW5nLCBhbmQgd2UqIGNhbid0IGdldCB0aGUgbG9jayBhcwotCQkgKiBpdCBoYXMgY29udGVudGlvbi4gSnVzdCBjb3JyZWN0IHRoZSBjb3VudAotCQkgKiBhbmQgZXhpdC4KLQkJICovCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0dmFsID0gLUVJTlRSOwotCQkJc2VtLT5zbGVlcGVycyA9IDA7Ci0JCQlhdG9taWNfYWRkKHNsZWVwZXJzLCAmc2VtLT5jb3VudCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JCSAqIHBsYXlpbmcsIGJlY2F1c2Ugd2Ugb3duIHRoZSBzcGlubG9jay4gVGhlCi0JCSAqICItMSIgaXMgYmVjYXVzZSB3ZSdyZSBzdGlsbCBob3BpbmcgdG8gZ2V0Ci0JCSAqIHRoZSBsb2NrLgotCQkgKi8KLQkJaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKHNsZWVwZXJzIC0gMSwgJnNlbS0+Y291bnQpKSB7Ci0JCQlzZW0tPnNsZWVwZXJzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNlbS0+c2xlZXBlcnMgPSAxOwkvKiB1cyAtIHNlZSAtMSBhYm92ZSAqLwotCQlzcGluX3VubG9ja19pcnEoJnNlbWFwaG9yZV9sb2NrKTsKLQotCQlzY2hlZHVsZSgpOwotCQl0c2stPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQlzcGluX2xvY2tfaXJxKCZzZW1hcGhvcmVfbG9jayk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmc2VtYXBob3JlX2xvY2spOwotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoKLSAqIFRyeWxvY2sgZmFpbGVkIC0gbWFrZSBzdXJlIHdlIGNvcnJlY3QgZm9yCi0gKiBoYXZpbmcgZGVjcmVtZW50ZWQgdGhlIGNvdW50LgotICovCi1pbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc2xlZXBlcnM7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX2xvY2ssIGZsYWdzKTsKLQlzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnMgKyAxOwotCXNlbS0+c2xlZXBlcnMgPSAwOwotCi0JLyoKLQkgKiBBZGQgImV2ZXJ5Ym9keSBlbHNlIiBhbmQgdXMgaW50byBpdC4gVGhleSBhcmVuJ3QKLQkgKiBwbGF5aW5nLCBiZWNhdXNlIHdlIG93biB0aGUgc3BpbmxvY2suCi0JICovCi0JaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKHNsZWVwZXJzLCAmc2VtLT5jb3VudCkpCi0JCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfbG9jaywgZmxhZ3MpOwotCXJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9zeXNjYWxscy5jIGIvYXJjaC92ODUwL2tlcm5lbC9zeXNjYWxscy5jCmluZGV4IDBhNGRmNGQuLjAwM2RiOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvc3lzY2FsbHMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3N5c2NhbGxzLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYyBiL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jCmluZGV4IDkzNTc1ZmQuLjhkMzg2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAKQEAgLTM0LDEyICszMyw2IEBACiBFWFBPUlRfU1lNQk9MIChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTCAobWVtbW92ZSk7CiAKLS8qIHNlbWFwaG9yZXMgKi8KLUVYUE9SVF9TWU1CT0wgKF9fZG93bik7Ci1FWFBPUlRfU1lNQk9MIChfX2Rvd25faW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MIChfX2Rvd25fdHJ5bG9jayk7Ci1FWFBPUlRfU1lNQk9MIChfX3VwKTsKLQogLyoKICAqIGxpYmdjYyBmdW5jdGlvbnMgLSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZQogICogY29tcGlsZXIuLi4gIChwcm90b3R5cGVzIGFyZSBub3QgY29ycmVjdCB0aG91Z2gsIGJ1dCB0aGF0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCAzYmUyMzA1Li44N2E2OTNjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yMSw3ICsyMSw5IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9LUFJPQkVTCi0Jc2VsZWN0IEhBVkVfS1ZNCisJc2VsZWN0IEhBVkVfS1JFVFBST0JFUworCXNlbGVjdCBIQVZFX0tWTSBpZiAoKFg4Nl8zMiAmJiAhWDg2X1ZPWUFHRVIgJiYgIVg4Nl9WSVNXUyAmJiAhWDg2X05VTUFRKSB8fCBYODZfNjQpCisJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAKIAogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCkBAIC01Miw5ICs1NCw2IEBACiBjb25maWcgSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBTRU1BUEhPUkVfU0xFRVBFUlMKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBGQVNUX0NNUFhDSEdfTE9DQUwKIAlib29sCiAJZGVmYXVsdCB5CkBAIC02NSw5ICs2NCw2IEBACiBjb25maWcgWk9ORV9ETUEKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBRVUlDS0xJU1QKLQlkZWZfYm9vbCBYODZfMzIKLQogY29uZmlnIFNCVVMKIAlib29sCiAKQEAgLTExOSw3ICsxMTUsMTAgQEAKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQotCWRlZl9ib29sIFg4Nl82NAorCWRlZl9ib29sIFg4Nl82NCB8fCAoWDg2X1NNUCAmJiAhWDg2X1ZPWUFHRVIpCisKK2NvbmZpZyBIQVZFX0NQVU1BU0tfT0ZfQ1BVX01BUAorCWRlZl9ib29sIFg4Nl82NF9TTVAKIAogY29uZmlnIEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUKIAlkZWZfYm9vbCB5CkBAIC0xNzMsNyArMTcyLDcgQEAKIGNvbmZpZyBYODZfSFQKIAlib29sCiAJZGVwZW5kcyBvbiBTTVAKLQlkZXBlbmRzIG9uIChYODZfMzIgJiYgIShYODZfVklTV1MgfHwgWDg2X1ZPWUFHRVIpKSB8fCAoWDg2XzY0ICYmICFNSzgpCisJZGVwZW5kcyBvbiAoWDg2XzMyICYmICEoWDg2X1ZJU1dTIHx8IFg4Nl9WT1lBR0VSKSkgfHwgWDg2XzY0CiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBYODZfQklPU19SRUJPT1QKQEAgLTE4Myw3ICsxODIsNyBAQAogCiBjb25maWcgWDg2X1RSQU1QT0xJTkUKIAlib29sCi0JZGVwZW5kcyBvbiBYODZfU01QIHx8IChYODZfVk9ZQUdFUiAmJiBTTVApCisJZGVwZW5kcyBvbiBYODZfU01QIHx8IChYODZfVk9ZQUdFUiAmJiBTTVApIHx8ICg2NEJJVCAmJiBBQ1BJX1NMRUVQKQogCWRlZmF1bHQgeQogCiBjb25maWcgS1RJTUVfU0NBTEFSCkBAIC0yNDMsOCArMjQyLDcgQEAKIAogY29uZmlnIFg4Nl9WT1lBR0VSCiAJYm9vbCAiVm95YWdlciAoTkNSKSIKLQlkZXBlbmRzIG9uIFg4Nl8zMgotCXNlbGVjdCBTTVAgaWYgIUJST0tFTgorCWRlcGVuZHMgb24gWDg2XzMyICYmIChTTVAgfHwgQlJPS0VOKQogCWhlbHAKIAkgIFZveWFnZXIgaXMgYW4gTUNBLWJhc2VkIDMyLXdheSBjYXBhYmxlIFNNUCBhcmNoaXRlY3R1cmUgcHJvcHJpZXRhcnkKIAkgIHRvIE5DUiBDb3JwLiAgTWFjaGluZSBjbGFzc2VzIDM0NXgvMzV4eC80MTAwLzUxeHggYXJlIFZveWFnZXItYmFzZWQuCkBAIC0yNTYsOSArMjU0LDggQEAKIAogY29uZmlnIFg4Nl9OVU1BUQogCWJvb2wgIk5VTUFRIChJQk0vU2VxdWVudCkiCi0Jc2VsZWN0IFNNUAorCWRlcGVuZHMgb24gU01QICYmIFg4Nl8zMgogCXNlbGVjdCBOVU1BCi0JZGVwZW5kcyBvbiBYODZfMzIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBpcyB1c2VkIGZvciBnZXR0aW5nIExpbnV4IHRvIHJ1biBvbiBhIChJQk0vU2VxdWVudCkgTlVNQQogCSAgbXVsdGlxdWFkIGJveC4gVGhpcyBjaGFuZ2VzIHRoZSB3YXkgdGhhdCBwcm9jZXNzb3JzIGFyZSBib290c3RyYXBwZWQsCkBAIC0zMjksOCArMzI2LDkgQEAKIAogY29uZmlnIFg4Nl9WU01QCiAJYm9vbCAiU3VwcG9ydCBmb3IgU2NhbGVNUCB2U01QIgotCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBDSQotCSBoZWxwCisJc2VsZWN0IFBBUkFWSVJUCisJZGVwZW5kcyBvbiBYODZfNjQKKwloZWxwCiAJICBTdXBwb3J0IGZvciBTY2FsZU1QIHZTTVAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcwogCSAgc3VwcG9zZWQgdG8gcnVuIG9uIHRoZXNlIEVNNjRULWJhc2VkIG1hY2hpbmVzLiAgT25seSBjaG9vc2UgdGhpcyBvcHRpb24KIAkgIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBtYWNoaW5lcy4KQEAgLTM4NSw2ICszODMsMzUgQEAKIAogZW5kaWYKIAorY29uZmlnIE1FTVRFU1RfQk9PVFBBUkFNCisJYm9vbCAiTWVtdGVzdCBib290IHBhcmFtZXRlciIKKwlkZXBlbmRzIG9uIFg4Nl82NAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYSBrZXJuZWwgcGFyYW1ldGVyICdtZW10ZXN0Jywgd2hpY2ggYWxsb3dzIG1lbXRlc3QKKwkgIHRvIGJlIGRpc2FibGVkIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgbWVtdGVzdAorCSAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgZGlzYWJsZWQgd2l0aCBtZW10ZXN0PTAgb24gdGhlIGtlcm5lbAorCSAgY29tbWFuZCBsaW5lLiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBvcHRpb24gaXMgdG8gYWxsb3cgYSBzaW5nbGUKKwkgIGtlcm5lbCBpbWFnZSB0byBiZSBkaXN0cmlidXRlZCB3aXRoIG1lbXRlc3QgYnVpbHQgaW4sIGJ1dCBub3QKKwkgIG5lY2Vzc2FyaWx5IGVuYWJsZWQuCisKKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIFkuCisKK2NvbmZpZyBNRU1URVNUX0JPT1RQQVJBTV9WQUxVRQorCWludCAiTWVtdGVzdCBib290IHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlICgwLTQpIgorCWRlcGVuZHMgb24gTUVNVEVTVF9CT09UUEFSQU0KKwlyYW5nZSAwIDQKKwlkZWZhdWx0IDAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUga2VybmVsIHBhcmFtZXRlcgorCSAgJ21lbXRlc3QnLCB3aGljaCBhbGxvd3MgbWVtdGVzdCB0byBiZSBkaXNhYmxlZCBhdCBib290LiAgSWYgdGhpcworCSAgb3B0aW9uIGlzIHNldCB0byAwICh6ZXJvKSwgdGhlIG1lbXRlc3Qga2VybmVsIHBhcmFtZXRlciB3aWxsCisJICBkZWZhdWx0IHRvIDAsIGRpc2FibGluZyBtZW10ZXN0IGF0IGJvb3R1cC4gIElmIHRoaXMgb3B0aW9uIGlzCisJICBzZXQgdG8gNCwgdGhlIG1lbXRlc3Qga2VybmVsIHBhcmFtZXRlciB3aWxsIGRlZmF1bHQgdG8gNCwKKwkgIGVuYWJsaW5nIG1lbXRlc3QgYXQgYm9vdHVwLCBhbmQgdXNlIHRoYXQgYXMgcGF0dGVybiBudW1iZXIuCisKKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIDAuCisKIGNvbmZpZyBBQ1BJX1NSQVQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgQUNQSSAmJiBOVU1BICYmIChYODZfU1VNTUlUIHx8IFg4Nl9HRU5FUklDQVJDSCkKQEAgLTUwOSw3ICs1MzYsNyBAQAogCiBjb25maWcgU0NIRURfU01UCiAJYm9vbCAiU01UIChIeXBlcnRocmVhZGluZykgc2NoZWR1bGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoWDg2XzY0ICYmIFNNUCkgfHwgKFg4Nl8zMiAmJiBYODZfSFQpCisJZGVwZW5kcyBvbiBYODZfSFQKIAloZWxwCiAJICBTTVQgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbiBtYWtpbmcKIAkgIHdoZW4gZGVhbGluZyB3aXRoIEludGVsIFBlbnRpdW0gNCBjaGlwcyB3aXRoIEh5cGVyVGhyZWFkaW5nIGF0IGEKQEAgLTUxOSw3ICs1NDYsNyBAQAogY29uZmlnIFNDSEVEX01DCiAJZGVmX2Jvb2wgeQogCXByb21wdCAiTXVsdGktY29yZSBzY2hlZHVsZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChYODZfNjQgJiYgU01QKSB8fCAoWDg2XzMyICYmIFg4Nl9IVCkKKwlkZXBlbmRzIG9uIFg4Nl9IVAogCWhlbHAKIAkgIE11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbgogCSAgbWFraW5nIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWNvcmUgQ1BVIGNoaXBzIGF0IGEgY29zdCBvZiBzbGlnaHRseQpAQCAtODc5LDYgKzkwNiwxNSBAQAogCWhlbHAKIAkgIEVuYWJsZSBBQ1BJIFNSQVQgYmFzZWQgbm9kZSB0b3BvbG9neSBkZXRlY3Rpb24uCiAKKyMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KKyMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKKyMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKKyMgcmVzaWRlIG9uIHRoYXQgbm9kZS4gIFNlZSBtZW1tYXBfaW5pdF96b25lKCkKKyMgZm9yIGRldGFpbHMuCitjb25maWcgTk9ERVNfU1BBTl9PVEhFUl9OT0RFUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFg4Nl82NF9BQ1BJX05VTUEKKwogY29uZmlnIE5VTUFfRU1VCiAJYm9vbCAiTlVNQSBlbXVsYXRpb24iCiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgTlVNQQpAQCAtODg4LDcgKzkyNCw3IEBACiAJICBudW1iZXIgb2Ygbm9kZXMuIFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KIAogY29uZmlnIE5PREVTX1NISUZUCi0JaW50CisJaW50ICJNYXggbnVtIG5vZGVzIHNoaWZ0KDEtMTUpIgogCXJhbmdlIDEgMTUgIGlmIFg4Nl82NAogCWRlZmF1bHQgIjYiIGlmIFg4Nl82NAogCWRlZmF1bHQgIjQiIGlmIFg4Nl9OVU1BUQpAQCAtMTAxMiw2ICsxMDQ4LDIxIEBACiAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL210cnIudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorY29uZmlnIFg4Nl9QQVQKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJ4ODYgUEFUIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNVFJSICYmIE5PTlBST01JU0NfREVWTUVNCisJaGVscAorCSAgVXNlIFBBVCBhdHRyaWJ1dGVzIHRvIHNldHVwIHBhZ2UgbGV2ZWwgY2FjaGUgY29udHJvbC4KKworCSAgUEFUcyBhcmUgdGhlIG1vZGVybiBlcXVpdmFsZW50cyBvZiBNVFJScyBhbmQgYXJlIG11Y2ggbW9yZQorCSAgZmxleGlibGUgdGhhbiBNVFJScy4KKworCSAgU2F5IE4gaGVyZSBpZiB5b3Ugc2VlIGJvb3R1cCBwcm9ibGVtcyAoYm9vdCBjcmFzaCwgYm9vdCBoYW5nLAorCSAgc3BvbnRhbmVvdXMgcmVib290cykgb3IgYSBub24td29ya2luZyB2aWRlbyBkcml2ZXIuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBFRkkKIAlkZWZfYm9vbCBuCiAJcHJvbXB0ICJFRkkgcnVudGltZSBzZXJ2aWNlIHN1cHBvcnQiCkBAIC0xMDU0LDcgKzExMDUsNyBAQAogCiBjb25maWcgQ0NfU1RBQ0tQUk9URUNUT1IKIAlib29sICJFbmFibGUgLWZzdGFjay1wcm90ZWN0b3IgYnVmZmVyIG92ZXJmbG93IGRldGVjdGlvbiAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFg4Nl82NCAmJiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCiAJaGVscAogICAgICAgICAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIC1mc3RhY2stcHJvdGVjdG9yIEdDQyBmZWF0dXJlLiBUaGlzCiAJICBmZWF0dXJlIHB1dHMsIGF0IHRoZSBiZWdpbm5pbmcgb2YgY3JpdGljYWwgZnVuY3Rpb25zLCBhIGNhbmFyeQpAQCAtMTA4MCw2ICsxMTMxLDcgQEAKIAogY29uZmlnIEtFWEVDCiAJYm9vbCAia2V4ZWMgc3lzdGVtIGNhbGwiCisJZGVwZW5kcyBvbiBYODZfNjQgfHwgWDg2X0JJT1NfUkVCT09UCiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKQEAgLTEyNjEsNyArMTMxMyw3IEBACiAJICBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLgogCiAJICBJbiBvcmRlciB0byB1c2UgQVBNLCB5b3Ugd2lsbCBuZWVkIHN1cHBvcnRpbmcgc29mdHdhcmUuIEZvciBsb2NhdGlvbgotCSAgYW5kIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9wbS50eHQ+IGFuZCB0aGUKKwkgIGFuZCBtb3JlIGluZm9ybWF0aW9uLCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vcG93ZXIvcG0udHh0PiBhbmQgdGhlCiAJICBCYXR0ZXJ5IFBvd2VyZWQgTGludXggbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb20KIAkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCiAKQEAgLTEzODEsNyArMTQzMyw3IEBACiBtZW51ICJCdXMgb3B0aW9ucyAoUENJIGV0Yy4pIgogCiBjb25maWcgUENJCi0JYm9vbCAiUENJIHN1cHBvcnQiIGlmICFYODZfVklTV1MKKwlib29sICJQQ0kgc3VwcG9ydCIgaWYgIVg4Nl9WSVNXUyAmJiAhWDg2X1ZTTVAKIAlkZXBlbmRzIG9uICFYODZfVk9ZQUdFUgogCWRlZmF1bHQgeQogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX01TSSBpZiAoWDg2X0xPQ0FMX0FQSUMgJiYgWDg2X0lPX0FQSUMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGUwOWE2YjcuLjU3MDcyZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0zNzcsNiArMzc3LDE5IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gKE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1XSU5DSElQQzYpICYmIE1UUlIKIAorIworIyBQNl9OT1BzIGFyZSBhIHJlbGF0aXZlbHkgbWlub3Igb3B0aW1pemF0aW9uIHRoYXQgcmVxdWlyZSBhIGZhbWlseSA+PQorIyA2IHByb2Nlc3NvciwgZXhjZXB0IHRoYXQgaXQgaXMgYnJva2VuIG9uIGNlcnRhaW4gVklBIGNoaXBzLgorIyBGdXJ0aGVybW9yZSwgQU1EIGNoaXBzIHByZWZlciBhIHRvdGFsbHkgZGlmZmVyZW50IHNlcXVlbmNlIG9mIE5PUHMKKyMgKHdoaWNoIHdvcmsgb24gYWxsIENQVXMpLiAgQXMgYSByZXN1bHQsIGRpc2FsbG93IHRoZXNlIGlmIHdlJ3JlCisjIGNvbXBpbGluZyBYODZfR0VORVJJQyBidXQgbm90IFg4Nl82NCAodGhlc2UgTk9QcyBkbyB3b3JrIG9uIGFsbAorIyB4ODYtNjQgY2FwYWJsZSBjaGlwcyk7IHRoZSBsaXN0IG9mIHByb2Nlc3NvcnMgaW4gdGhlIHJpZ2h0LWhhbmQgY2xhdXNlCisjIGFyZSB0aGUgY29yZXMgdGhhdCBiZW5lZml0IGZyb20gdGhpcyBvcHRpbWl6YXRpb24uCisjCitjb25maWcgWDg2X1A2X05PUAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIChYODZfNjQgfHwgIVg4Nl9HRU5FUklDKSAmJiAoTTY4NiB8fCBNUEVOVElVTUlJIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNTSB8fCBNQ09SRTIgfHwgTVBFTlRJVU00IHx8IE1QU0MpCisKIGNvbmZpZyBYODZfVFNDCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gKChNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTUs4IHx8IE1WSUFDM18yIHx8IE1WSUFDNyB8fCBNR0VPREVHWDEgfHwgTUdFT0RFX0xYIHx8IE1DT1JFMikgJiYgIVg4Nl9OVU1BUSkgfHwgWDg2XzY0CkBAIC0zOTAsNiArNDAzLDcgQEAKIGNvbmZpZyBYODZfTUlOSU1VTV9DUFVfRkFNSUxZCiAJaW50CiAJZGVmYXVsdCAiNjQiIGlmIFg4Nl82NAorCWRlZmF1bHQgIjYiIGlmIFg4Nl8zMiAmJiBYODZfUDZfTk9QCiAJZGVmYXVsdCAiNCIgaWYgWDg2XzMyICYmIChYODZfWEFERCB8fCBYODZfQ01QWENIRyB8fCBYODZfQlNXQVAgfHwgWDg2X1dQX1dPUktTX09LKQogCWRlZmF1bHQgIjMiCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IDg2NGFmZmMuLjYxMGFhZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtNTQsNiArNTQsMTggQEAKIAogCSAgU2F5IE4gaWYgdW5zdXJlLgogCitjb25maWcgWDg2X1BURFVNUAorCWJvb2wgIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnMiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlzZWxlY3QgREVCVUdfRlMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IGluIGEKKwkgIGRlYnVnZnMgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnMKKwkgIHdobyBhcmUgd29ya2luZyBpbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYXJlYXMgb2YgdGhlIGtlcm5lbC4KKwkgIEl0IGlzIHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGluIGEgcHJvZHVjdGlvbgorCSAga2VybmVsLgorCSAgSWYgaW4gZG91YnQsIHNheSAiTiIKKwogY29uZmlnIERFQlVHX1JPREFUQQogCWJvb2wgIldyaXRlIHByb3RlY3Qga2VybmVsIHJlYWQtb25seSBkYXRhIHN0cnVjdHVyZXMiCiAJZGVmYXVsdCB5CkBAIC02NCw2ICs3NiwxOCBAQAogCSAgZGF0YS4gVGhpcyBpcyByZWNvbW1lbmRlZCBzbyB0aGF0IHdlIGNhbiBjYXRjaCBrZXJuZWwgYnVncyBzb29uZXIuCiAJICBJZiBpbiBkb3VidCwgc2F5ICJZIi4KIAorY29uZmlnIERJUkVDVF9HQlBBR0VTCisJYm9vbCAiRW5hYmxlIGdicGFnZXMtbWFwcGVkIGtlcm5lbCBwYWdldGFibGVzIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiBYODZfNjQKKwloZWxwCisJICBFbmFibGUgZ2lnYWJ5dGUgcGFnZXMgc3VwcG9ydCAoaWYgdGhlIENQVSBzdXBwb3J0cyBpdCkuIFRoaXMgY2FuCisJICBpbXByb3ZlIHRoZSBrZXJuZWwncyBwZXJmb3JtYW5jZSBhIHRpbnkgYml0IGJ5IHJlZHVjaW5nIFRMQgorCSAgcHJlc3N1cmUuCisKKwkgIFRoaXMgaXMgZXhwZXJpbWVudGFsIGNvZGUuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgorCiBjb25maWcgREVCVUdfUk9EQVRBX1RFU1QKIAlib29sICJUZXN0Y2FzZSBmb3IgdGhlIERFQlVHX1JPREFUQSBmZWF0dXJlIgogCWRlcGVuZHMgb24gREVCVUdfUk9EQVRBCkBAIC04Miw4ICsxMDYsOCBAQAogCiBjb25maWcgNEtTVEFDS1MKIAlib29sICJVc2UgNEtiIGZvciBrZXJuZWwgc3RhY2tzIGluc3RlYWQgb2YgOEtiIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVwZW5kcyBvbiBYODZfMzIKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUga2VybmVsIHdpbGwgdXNlIGEgNEtiIHN0YWNrc2l6ZSBmb3IgdGhlCiAJICBrZXJuZWwgc3RhY2sgYXR0YWNoZWQgdG8gZWFjaCBwcm9jZXNzL3RocmVhZC4gVGhpcyBmYWNpbGl0YXRlcwpAQCAtMTU2LDcgKzE4MCw3IEBACiAKIGNob2ljZQogCXByb21wdCAiSU8gZGVsYXkgdHlwZSIKLQlkZWZhdWx0IElPX0RFTEFZXzBYRUQKKwlkZWZhdWx0IElPX0RFTEFZXzBYODAKIAogY29uZmlnIElPX0RFTEFZXzBYODAKIAlib29sICJwb3J0IDB4ODAgYmFzZWQgcG9ydC1JTyBkZWxheSBbcmVjb21tZW5kZWRdIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCAyMDRhZjQzLi4zY2ZmM2M4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMTUxLDcgKzE1MSw2IEBACiAjIDY0IGJpdCBkb2VzIG5vdCBzdXBwb3J0IHN1YmFyY2ggc3VwcG9ydCAtIGNsZWFyIHN1YiBhcmNoIHZhcmlhYmxlcwogZmNvcmUtJChDT05GSUdfWDg2XzY0KSAgOj0KIG1jb3JlLSQoQ09ORklHX1g4Nl82NCkgIDo9Ci1tZmxhZ3MtJChDT05GSUdfWDg2XzY0KSA6PQogCiBLQlVJTERfQ0ZMQUdTICs9ICQobWZsYWdzLXkpCiBLQlVJTERfQUZMQUdTICs9ICQobWZsYWdzLXkpCkBAIC0xNTksOSArMTU4LDkgQEAKICMjIwogIyBLZXJuZWwgb2JqZWN0cwogCi1oZWFkLXkgICAgICAgICAgICAgICAgOj0gYXJjaC94ODYva2VybmVsL2hlYWRfJChCSVRTKS5vCi1oZWFkLSQoQ09ORklHX1g4Nl82NCkgKz0gYXJjaC94ODYva2VybmVsL2hlYWQ2NC5vCi1oZWFkLXkgICAgICAgICAgICAgICAgKz0gYXJjaC94ODYva2VybmVsL2luaXRfdGFzay5vCitoZWFkLXkgOj0gYXJjaC94ODYva2VybmVsL2hlYWRfJChCSVRTKS5vCitoZWFkLXkgKz0gYXJjaC94ODYva2VybmVsL2hlYWQkKEJJVFMpLm8KK2hlYWQteSArPSBhcmNoL3g4Ni9rZXJuZWwvaW5pdF90YXNrLm8KIAogbGlicy15ICArPSBhcmNoL3g4Ni9saWIvCiAKQEAgLTIyOSw3ICsyMjgsNyBAQAogZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODggaXNvaW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgJEAKIAotaW5zdGFsbDogdmRzb19pbnN0YWxsCitpbnN0YWxsOgogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoS0JVSUxEX0lNQUdFKSBpbnN0YWxsCiAKIFBIT05ZICs9IHZkc29faW5zdGFsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKaW5kZXggZjg4NDU4ZS4uN2VlMTAyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCkBAIC0zMCw3ICszMCw3IEBACiAKIHNldHVwLXkJCSs9IGEyMC5vIGNtZGxpbmUubyBjb3B5Lm8gY3B1Lm8gY3B1Y2hlY2subyBlZGQubwogc2V0dXAteQkJKz0gaGVhZGVyLm8gbWFpbi5vIG1jYS5vIG1lbW9yeS5vIHBtLm8gcG1qdW1wLm8KLXNldHVwLXkJCSs9IHByaW50Zi5vIHN0cmluZy5vIHR0eS5vIHZpZGVvLm8gdmVyc2lvbi5vCitzZXR1cC15CQkrPSBwcmludGYubyBzdHJpbmcubyB0dHkubyB2aWRlby5vIHZpZGVvLW1vZGUubyB2ZXJzaW9uLm8KIHNldHVwLSQoQ09ORklHX1g4Nl9BUE1fQk9PVCkgKz0gYXBtLm8KIHNldHVwLSQoQ09ORklHX1g4Nl9WT1lBR0VSKSArPSB2b3lhZ2VyLm8KIApAQCAtOTQsNiArOTQsMjAgQEAKIAogU0VUVVBfT0JKUyA9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzZXR1cC15KSkKIAorc2VkLW9mZnNldHMgOj0gLWUgJ3MvXjAwKi8wLycgXAorICAgICAgICAtZSAncy9eXChbMC05YS1mQS1GXSpcKSAuIFwoaW5wdXRfZGF0YVx8aW5wdXRfZGF0YV9lbmRcKSQkL1wjZGVmaW5lIFwyIDB4XDEvcCcKKworcXVpZXRfY21kX29mZnNldHMgPSBPRkZTRVRTICRACisgICAgICBjbWRfb2Zmc2V0cyA9ICQoTk0pICQ8IHwgc2VkIC1uICQoc2VkLW9mZnNldHMpID4gJEAKKworJChvYmopL29mZnNldHMuaDogJChvYmopL2NvbXByZXNzZWQvdm1saW51eCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLG9mZnNldHMpCisKK3RhcmdldHMgKz0gb2Zmc2V0cy5oCisKK0FGTEFHU19oZWFkZXIubyArPSAtSSQob2JqKQorJChvYmopL2hlYWRlci5vOiAkKG9iaikvb2Zmc2V0cy5oCisKIExERkxBR1Nfc2V0dXAuZWxmCTo9IC1UCiAkKG9iaikvc2V0dXAuZWxmOiAkKHNyYykvc2V0dXAubGQgJChTRVRVUF9PQkpTKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9hMjAuYyBiL2FyY2gveDg2L2Jvb3QvYTIwLmMKaW5kZXggMzEzNDhkMC4uOTA5NDNmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9hMjAuYworKysgYi9hcmNoL3g4Ni9ib290L2EyMC5jCkBAIC05LDggKzksNiBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqIGFyY2gvaTM4Ni9ib290L2EyMC5jCi0gKgogICogRW5hYmxlIEEyMCBnYXRlIChyZXR1cm4gLTEgb24gZmFpbHVyZSkKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2FwbS5jIGIvYXJjaC94ODYvYm9vdC9hcG0uYwppbmRleCBjMTE3YzdmLi43YWE2MDMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2FwbS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvYXBtLmMKQEAgLTEyLDggKzEyLDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9hcG0uYwotICoKICAqIEdldCBBUE0gQklPUyBpbmZvcm1hdGlvbgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvYml0b3BzLmggYi9hcmNoL3g4Ni9ib290L2JpdG9wcy5oCmluZGV4IDhkY2M4ZGMuLjg3OGU0YjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvYml0b3BzLmgKKysrIGIvYXJjaC94ODYvYm9vdC9iaXRvcHMuaApAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9iaXRvcHMuaAotICoKICAqIFZlcnkgc2ltcGxlIGJpdG9wcyBmb3IgdGhlIGJvb3QgY29kZS4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2Jvb3QuaCBiL2FyY2gveDg2L2Jvb3QvYm9vdC5oCmluZGV4IDc4MjJhNDkuLmEzNGI5OTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvYm9vdC5oCisrKyBiL2FyY2gveDg2L2Jvb3QvYm9vdC5oCkBAIC05LDggKzksNiBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqIGFyY2gvaTM4Ni9ib290L2Jvb3QuaAotICoKICAqIEhlYWRlciBmaWxlIGZvciB0aGUgcmVhbC1tb2RlIGtlcm5lbCBjb2RlCiAgKi8KIApAQCAtMjg2LDYgKzI4NCwxMSBAQAogLyogdmlkZW8uYyAqLwogdm9pZCBzZXRfdmlkZW8odm9pZCk7CiAKKy8qIHZpZGVvLW1vZGUuYyAqLworaW50IHNldF9tb2RlKHUxNiBtb2RlKTsKK2ludCBtb2RlX2RlZmluZWQodTE2IG1vZGUpOwordm9pZCBwcm9iZV9jYXJkcyhpbnQgdW5zYWZlKTsKKwogLyogdmlkZW8tdmVzYS5jICovCiB2b2lkIHZlc2Ffc3RvcmVfZWRpZCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jbWRsaW5lLmMgYi9hcmNoL3g4Ni9ib290L2NtZGxpbmUuYwppbmRleCA2ODA0MDhhLi5hMWQzNTYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NtZGxpbmUuYworKysgYi9hcmNoL3g4Ni9ib290L2NtZGxpbmUuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9jbWRsaW5lLmMKLSAqCiAgKiBTaW1wbGUgY29tbWFuZC1saW5lIHBhcnNlciBmb3IgZWFybHkgYm9vdC4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggZDJiOWYzYi4uOTJmZGQzNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMjIsNyArMjIsNyBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQogCUA6CiAKLU9CSkNPUFlGTEFHU192bWxpbnV4LmJpbiA6PSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVMKK09CSkNPUFlGTEFHU192bWxpbnV4LmJpbiA6PSAgLVIgLmNvbW1lbnQgLVMKICQob2JqKS92bWxpbnV4LmJpbjogdm1saW51eCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCmluZGV4IDAzNmU2MzUuLmJhNzczNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwpAQCAtMTMwLDcgKzEzMCw3IEBACiAvKgogICogU2V0dXAgdGhlIHN0YWNrIGZvciB0aGUgZGVjb21wcmVzc29yCiAgKi8KLQlsZWFsIHN0YWNrX2VuZCglZWJ4KSwgJWVzcAorCWxlYWwgYm9vdF9zdGFja19lbmQoJWVieCksICVlc3AKIAogLyoKICAqIERvIHRoZSBkZWNvbXByZXNzaW9uLCBhbmQganVtcCB0byB0aGUgbmV3IGtlcm5lbC4uCkBAIC0xNDIsOCArMTQyLDggQEAKIAlwdXNobCAlZWF4CSMgaW5wdXRfbGVuCiAJbGVhbCBpbnB1dF9kYXRhKCVlYngpLCAlZWF4CiAJcHVzaGwgJWVheAkjIGlucHV0X2RhdGEKLQlsZWFsIF9lbmQoJWVieCksICVlYXgKLQlwdXNobCAlZWF4CSMgZW5kIG9mIHRoZSBpbWFnZSBhcyB0aGlyZCBhcmd1bWVudAorCWxlYWwgYm9vdF9oZWFwKCVlYngpLCAlZWF4CisJcHVzaGwgJWVheAkjIGhlYXAgYXJlYSBhcyB0aGlyZCBhcmd1bWVudAogCXB1c2hsICVlc2kJIyByZWFsIG1vZGUgcG9pbnRlciBhcyBzZWNvbmQgYXJnCiAJY2FsbCBkZWNvbXByZXNzX2tlcm5lbAogCWFkZGwgJDIwLCAlZXNwCkBAIC0xODEsNyArMTgxLDEwIEBACiAJam1wIColZWJwCiAKIC5ic3MKKy8qIFN0YWNrIGFuZCBoZWFwIGZvciB1bmNvbXByZXNzaW9uICovCiAuYmFsaWduIDQKLXN0YWNrOgotCS5maWxsIDQwOTYsIDEsIDAKLXN0YWNrX2VuZDoKK2Jvb3RfaGVhcDoKKwkuZmlsbCBCT09UX0hFQVBfU0laRSwgMSwgMAorYm9vdF9zdGFjazoKKwkuZmlsbCBCT09UX1NUQUNLX1NJWkUsIDEsIDAKK2Jvb3Rfc3RhY2tfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggZTg2NTdiOS4uZDg4MTllZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKQEAgLTYyLDcgKzYzLDcgQEAKIAlzdWJsCSQxYiwgJWVicAogCiAvKiBzZXR1cCBhIHN0YWNrIGFuZCBtYWtlIHN1cmUgY3B1IHN1cHBvcnRzIGxvbmcgbW9kZS4gKi8KLQltb3ZsCSR1c2VyX3N0YWNrX2VuZCwgJWVheAorCW1vdmwJJGJvb3Rfc3RhY2tfZW5kLCAlZWF4CiAJYWRkbAklZWJwLCAlZWF4CiAJbW92bAklZWF4LCAlZXNwCiAKQEAgLTI0Myw5ICsyNDQsOSBAQAogLyogQ29weSB0aGUgY29tcHJlc3NlZCBrZXJuZWwgdG8gdGhlIGVuZCBvZiBvdXIgYnVmZmVyCiAgKiB3aGVyZSBkZWNvbXByZXNzaW9uIGluIHBsYWNlIGJlY29tZXMgc2FmZS4KICAqLwotCWxlYXEJX2VuZCglcmlwKSwgJXI4Ci0JbGVhcQlfZW5kKCVyYngpLCAlcjkKLQltb3ZxCSRfZW5kIC8qIC0gJHN0YXJ0dXBfMzIgKi8sICVyY3gKKwlsZWFxCV9lbmRfYmVmb3JlX3BndCglcmlwKSwgJXI4CisJbGVhcQlfZW5kX2JlZm9yZV9wZ3QoJXJieCksICVyOQorCW1vdnEJJF9lbmRfYmVmb3JlX3BndCAvKiAtICRzdGFydHVwXzMyICovLCAlcmN4CiAxOglzdWJxCSQ4LCAlcjgKIAlzdWJxCSQ4LCAlcjkKIAltb3ZxCTAoJXI4KSwgJXJheApAQCAtMjY3LDE0ICsyNjgsMTQgQEAKICAqLwogCXhvcnEJJXJheCwgJXJheAogCWxlYXEgICAgX2VkYXRhKCVyYngpLCAlcmRpCi0JbGVhcSAgICBfZW5kKCVyYngpLCAlcmN4CisJbGVhcSAgICBfZW5kX2JlZm9yZV9wZ3QoJXJieCksICVyY3gKIAlzdWJxCSVyZGksICVyY3gKIAljbGQKIAlyZXAKIAlzdG9zYgogCiAJLyogU2V0dXAgdGhlIHN0YWNrICovCi0JbGVhcQl1c2VyX3N0YWNrX2VuZCglcmlwKSwgJXJzcAorCWxlYXEJYm9vdF9zdGFja19lbmQoJXJpcCksICVyc3AKIAogCS8qIHplcm8gRUZMQUdTIGFmdGVyIHNldHRpbmcgcnNwICovCiAJcHVzaHEJJDAKQEAgLTI4NSw3ICsyODYsNyBAQAogICovCiAJcHVzaHEJJXJzaQkJCSMgU2F2ZSB0aGUgcmVhbCBtb2RlIGFyZ3VtZW50CiAJbW92cQklcnNpLCAlcmRpCQkjIHJlYWwgbW9kZSBhZGRyZXNzCi0JbGVhcQlfaGVhcCglcmlwKSwgJXJzaQkjIF9oZWFwCisJbGVhcQlib290X2hlYXAoJXJpcCksICVyc2kJIyBtYWxsb2MgYXJlYSBmb3IgdW5jb21wcmVzc2lvbgogCWxlYXEJaW5wdXRfZGF0YSglcmlwKSwgJXJkeCAgIyBpbnB1dF9kYXRhCiAJbW92bAlpbnB1dF9sZW4oJXJpcCksICVlYXgKIAltb3ZxCSVyYXgsICVyY3gJCSMgaW5wdXRfbGVuCkBAIC0zMTAsOSArMzExLDEyIEBACiAJLnF1YWQJMHgwMDgwODkwMDAwMDAwMDAwCS8qIFRTIGRlc2NyaXB0b3IgKi8KIAkucXVhZCAgIDB4MDAwMDAwMDAwMDAwMDAwMAkvKiBUUyBjb250aW51ZWQgKi8KIGdkdF9lbmQ6Ci0JLmJzcwotLyogU3RhY2sgZm9yIHVuY29tcHJlc3Npb24gKi8KLQkuYmFsaWduIDQKLXVzZXJfc3RhY2s6Ci0JLmZpbGwgNDA5Niw0LDAKLXVzZXJfc3RhY2tfZW5kOgorCisuYnNzCisvKiBTdGFjayBhbmQgaGVhcCBmb3IgdW5jb21wcmVzc2lvbiAqLworLmJhbGlnbiA0Citib290X2hlYXA6CisJLmZpbGwgQk9PVF9IRUFQX1NJWkUsIDEsIDAKK2Jvb3Rfc3RhY2s6CisJLmZpbGwgQk9PVF9TVEFDS19TSVpFLCAxLCAwCitib290X3N0YWNrX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDgxODJlMzIuLjkwNDU2Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTUsNiArMTUsMTAgQEAKICAqIHdlIGp1c3Qga2VlcCBpdCBmcm9tIGhhcHBlbmluZwogICovCiAjdW5kZWYgQ09ORklHX1BBUkFWSVJUCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBfQVNNX0RFU0NfSF8gMQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjZGVmaW5lIF9MSU5VWF9TVFJJTkdfSF8gMQogI2RlZmluZSBfX0xJTlVYX0JJVE1BUF9IIDEKQEAgLTIyLDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KQEAgLTUzLDggKzU4LDggQEAKICAqIDEgYml0IChsYXN0IGJsb2NrIGZsYWcpCiAgKiAyIGJpdHMgKGJsb2NrIHR5cGUpCiAgKgotICogMSBibG9jayBvY2N1cnMgZXZlcnkgMzJLIC0xIGJ5dGVzIG9yIHdoZW4gdGhlcmUgNTAlIGNvbXByZXNzaW9uIGhhcyBiZWVuIGFjaGlldmVkLgotICogVGhlIHNtYWxsZXN0IGJsb2NrIHR5cGUgZW5jb2RpbmcgaXMgYWx3YXlzIHVzZWQuCisgKiAxIGJsb2NrIG9jY3VycyBldmVyeSAzMksgLTEgYnl0ZXMgb3Igd2hlbiB0aGVyZSA1MCUgY29tcHJlc3Npb24KKyAqIGhhcyBiZWVuIGFjaGlldmVkLiBUaGUgc21hbGxlc3QgYmxvY2sgdHlwZSBlbmNvZGluZyBpcyBhbHdheXMgdXNlZC4KICAqCiAgKiBzdG9yZWQ6CiAgKiAgICAzMiBiaXRzIGxlbmd0aCBpbiBieXRlcy4KQEAgLTkwLDkgKzk1LDkgQEAKICAqCiAgKiBBbGwgb2Ygd2hpY2ggaXMgZW5vdWdoIHRvIGNvbXB1dGUgYW4gYW1vdW50IG9mIGV4dHJhIGRhdGEgdGhhdCBpcyByZXF1aXJlZAogICogdG8gYmUgc2FmZS4gIFRvIGF2b2lkIHByb2JsZW1zIGF0IHRoZSBibG9jayBsZXZlbCBhbGxvY2F0aW5nIDUgZXh0cmEgYnl0ZXMKLSAqIHBlciAzMjc2NyBieXRlcyBvZiBkYXRhIGlzIHN1ZmZpY2llbnQuICBUbyBhdm9pbmQgcHJvYmxlbXMgaW50ZXJuYWwgdG8gYSBibG9jawotICogYWRkaW5nIGFuIGV4dHJhIDMyNzY3IGJ5dGVzICh0aGUgd29yc3QgY2FzZSB1bmNvbXByZXNzZWQgYmxvY2sgc2l6ZSkgaXMKLSAqIHN1ZmZpY2llbnQsIHRvIGVuc3VyZSB0aGF0IGluIHRoZSB3b3JzdCBjYXNlIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBmb3IKKyAqIHBlciAzMjc2NyBieXRlcyBvZiBkYXRhIGlzIHN1ZmZpY2llbnQuICBUbyBhdm9pbmQgcHJvYmxlbXMgaW50ZXJuYWwgdG8gYQorICogYmxvY2sgYWRkaW5nIGFuIGV4dHJhIDMyNzY3IGJ5dGVzICh0aGUgd29yc3QgY2FzZSB1bmNvbXByZXNzZWQgYmxvY2sgc2l6ZSkKKyAqIGlzIHN1ZmZpY2llbnQsIHRvIGVuc3VyZSB0aGF0IGluIHRoZSB3b3JzdCBjYXNlIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBmb3IKICAqIGJsb2NrIHdpbGwgc3RvcCB0aGUgYnl0ZSBiZWZvcmUgdGhlIGNvbXByZXNzZWQgZGF0YSBmb3IgYSBibG9jayBiZWdpbnMuCiAgKiBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIHRoZSBjb21wcmVzc2VkIGRhdGEncyBtZXRhIGluZm9ybWF0aW9uIGFuIGV4dHJhIDE4CiAgKiBieXRlcyBhcmUgbmVlZGVkLiAgTGVhZGluZyB0byB0aGUgZm9ybXVsYToKQEAgLTExMSw1OCArMTE2LDY2IEBACiAgKiBnemlwIGRlY2xhcmF0aW9ucwogICovCiAKLSNkZWZpbmUgT0YoYXJncykgIGFyZ3MKLSNkZWZpbmUgU1RBVElDIHN0YXRpYworI2RlZmluZSBPRihhcmdzKQlhcmdzCisjZGVmaW5lIFNUQVRJQwkJc3RhdGljCiAKICN1bmRlZiBtZW1zZXQKICN1bmRlZiBtZW1jcHkKLSNkZWZpbmUgbWVtemVybyhzLCBuKSAgICAgbWVtc2V0ICgocyksIDAsIChuKSkKKyNkZWZpbmUgbWVtemVybyhzLCBuKQltZW1zZXQoKHMpLCAwLCAobikpCiAKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgdWNoOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2g7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgl1Y2g7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXVzaDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwl1bGc7CiAKLSNkZWZpbmUgV1NJWkUgMHg4MDAwMDAwMAkvKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywKLQkJCQkgKiBhbmQgYSBwb3dlciBvZiB0d28KLQkJCQkgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIGEgd2luZG93IGp1c3QKLQkJCQkgKiBhIGh1Z2Ugb3V0cHV0IGJ1ZmZlciBzbyBJIHJlcG9ydAotCQkJCSAqIGEgMkcgd2luZG93cyBzaXplLCBhcyB0aGF0IHNob3VsZAotCQkJCSAqIGFsd2F5cyBiZSBsYXJnZXIgdGhhbiBvdXIgb3V0cHV0IGJ1ZmZlci4KLQkJCQkgKi8KKy8qCisgKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywgYW5kIGEgcG93ZXIgb2YgdHdvLgorICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIHdpbmRvdyBqdXN0IGEgaHVnZSBvdXRwdXQgYnVmZmVyLAorICogc28gd2UgcmVwb3J0IGEgMkcgd2luZG93IHNpemUsIGFzIHRoYXQgc2hvdWxkIGFsd2F5cyBiZQorICogbGFyZ2VyIHRoYW4gb3VyIG91dHB1dCBidWZmZXI6CisgKi8KKyNkZWZpbmUgV1NJWkUJCTB4ODAwMDAwMDAKIAotc3RhdGljIHVjaCAqaW5idWY7CS8qIGlucHV0IGJ1ZmZlciAqLwotc3RhdGljIHVjaCAqd2luZG93OwkvKiBTbGlkaW5nIHdpbmRvdyBidWZmZXIsIChhbmQgZmluYWwgb3V0cHV0IGJ1ZmZlcikgKi8KKy8qIElucHV0IGJ1ZmZlcjogKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyCSppbmJ1ZjsKIAotc3RhdGljIHVuc2lnbmVkIGluc2l6ZTsgIC8qIHZhbGlkIGJ5dGVzIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgaW5wdHI7ICAgLyogaW5kZXggb2YgbmV4dCBieXRlIHRvIGJlIHByb2Nlc3NlZCBpbiBpbmJ1ZiAqLwotc3RhdGljIHVuc2lnbmVkIG91dGNudDsgIC8qIGJ5dGVzIGluIG91dHB1dCBidWZmZXIgKi8KKy8qIFNsaWRpbmcgd2luZG93IGJ1ZmZlciAoYW5kIGZpbmFsIG91dHB1dCBidWZmZXIpOiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIJKndpbmRvdzsKKworLyogVmFsaWQgYnl0ZXMgaW4gaW5idWY6ICovCitzdGF0aWMgdW5zaWduZWQJCWluc2l6ZTsKKworLyogSW5kZXggb2YgbmV4dCBieXRlIHRvIGJlIHByb2Nlc3NlZCBpbiBpbmJ1ZjogKi8KK3N0YXRpYyB1bnNpZ25lZAkJaW5wdHI7CisKKy8qIEJ5dGVzIGluIG91dHB1dCBidWZmZXI6ICovCitzdGF0aWMgdW5zaWduZWQJCW91dGNudDsKIAogLyogZ3ppcCBmbGFnIGJ5dGUgKi8KLSNkZWZpbmUgQVNDSUlfRkxBRyAgIDB4MDEgLyogYml0IDAgc2V0OiBmaWxlIHByb2JhYmx5IEFTQ0lJIHRleHQgKi8KLSNkZWZpbmUgQ09OVElOVUFUSU9OIDB4MDIgLyogYml0IDEgc2V0OiBjb250aW51YXRpb24gb2YgbXVsdGktcGFydCBnemlwIGZpbGUgKi8KLSNkZWZpbmUgRVhUUkFfRklFTEQgIDB4MDQgLyogYml0IDIgc2V0OiBleHRyYSBmaWVsZCBwcmVzZW50ICovCi0jZGVmaW5lIE9SSUdfTkFNRSAgICAweDA4IC8qIGJpdCAzIHNldDogb3JpZ2luYWwgZmlsZSBuYW1lIHByZXNlbnQgKi8KLSNkZWZpbmUgQ09NTUVOVCAgICAgIDB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAqLwotI2RlZmluZSBFTkNSWVBURUQgICAgMHgyMCAvKiBiaXQgNSBzZXQ6IGZpbGUgaXMgZW5jcnlwdGVkICovCi0jZGVmaW5lIFJFU0VSVkVEICAgICAweEMwIC8qIGJpdCA2LDc6ICAgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgQVNDSUlfRkxBRwkweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBBU0NJSSB0ZXh0ICovCisjZGVmaW5lIENPTlRJTlVBVElPTgkweDAyIC8qIGJpdCAxIHNldDogY29udGludWF0aW9uIG9mIG11bHRpLXBhcnQgZ3ogZmlsZSAqLworI2RlZmluZSBFWFRSQV9GSUVMRAkweDA0IC8qIGJpdCAyIHNldDogZXh0cmEgZmllbGQgcHJlc2VudCAqLworI2RlZmluZSBPUklHX05BTQkweDA4IC8qIGJpdCAzIHNldDogb3JpZ2luYWwgZmlsZSBuYW1lIHByZXNlbnQgKi8KKyNkZWZpbmUgQ09NTUVOVAkJMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCisjZGVmaW5lIEVOQ1JZUFRFRAkweDIwIC8qIGJpdCA1IHNldDogZmlsZSBpcyBlbmNyeXB0ZWQgKi8KKyNkZWZpbmUgUkVTRVJWRUQJMHhDMCAvKiBiaXQgNiwgNzogIHJlc2VydmVkICovCiAKLSNkZWZpbmUgZ2V0X2J5dGUoKSAgKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiBmaWxsX2luYnVmKCkpCi0JCQorI2RlZmluZSBnZXRfYnl0ZSgpCShpbnB0ciA8IGluc2l6ZSA/IGluYnVmW2lucHRyKytdIDogZmlsbF9pbmJ1ZigpKQorCiAvKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLwogI2lmZGVmIERFQlVHCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9Ci0jICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9CisjICBkZWZpbmUgQXNzZXJ0KGNvbmQsIG1zZykgZG8geyBpZiAoIShjb25kKSkgZXJyb3IobXNnKTsgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBUcmFjZSh4KQlkbyB7IGZwcmludGYgeDsgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBUcmFjZXYoeCkJZG8geyBpZiAodmVyYm9zZSkgZnByaW50ZiB4IDsgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBUcmFjZXZ2KHgpCWRvIHsgaWYgKHZlcmJvc2UgPiAxKSBmcHJpbnRmIHggOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIFRyYWNlYyhjLCB4KQlkbyB7IGlmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDsgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBUcmFjZWN2KGMsIHgpCWRvIHsgaWYgKHZlcmJvc2UgPiAxICYmIChjKSkgZnByaW50ZiB4IDsgfSB3aGlsZSAoMCkKICNlbHNlCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKQorIyAgZGVmaW5lIEFzc2VydChjb25kLCBtc2cpCiAjICBkZWZpbmUgVHJhY2UoeCkKICMgIGRlZmluZSBUcmFjZXYoeCkKICMgIGRlZmluZSBUcmFjZXZ2KHgpCi0jICBkZWZpbmUgVHJhY2VjKGMseCkKLSMgIGRlZmluZSBUcmFjZWN2KGMseCkKKyMgIGRlZmluZSBUcmFjZWMoYywgeCkKKyMgIGRlZmluZSBUcmFjZWN2KGMsIHgpCiAjZW5kaWYKIAogc3RhdGljIGludCAgZmlsbF9pbmJ1Zih2b2lkKTsKQEAgLTE3MCw3ICsxODMsNyBAQAogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CiBzdGF0aWMgdm9pZCBnemlwX21hcmsodm9pZCAqKik7CiBzdGF0aWMgdm9pZCBnemlwX3JlbGVhc2Uodm9pZCAqKik7Ci0gIAorCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKi8KQEAgLTE4NSw3ICsxOTgsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgaW5wdXRfZGF0YVtdOwogZXh0ZXJuIGludCBpbnB1dF9sZW47CiAKLXN0YXRpYyBsb25nIGJ5dGVzX291dCA9IDA7CitzdGF0aWMgbG9uZyBieXRlc19vdXQ7CiAKIHN0YXRpYyB2b2lkICptYWxsb2MoaW50IHNpemUpOwogc3RhdGljIHZvaWQgZnJlZSh2b2lkICp3aGVyZSk7CkBAIC0yMDQsMTMgKzIxNyw3IEBACiBzdGF0aWMgbWVtcHRyIGZyZWVfbWVtX3B0cjsKIHN0YXRpYyBtZW1wdHIgZnJlZV9tZW1fZW5kX3B0cjsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgSEVBUF9TSVpFICAgICAgICAgICAgIDB4NzAwMAotI2Vsc2UKLSNkZWZpbmUgSEVBUF9TSVpFICAgICAgICAgICAgIDB4NDAwMAotI2VuZGlmCi0KLXN0YXRpYyBjaGFyICp2aWRtZW0gPSAoY2hhciAqKTB4YjgwMDA7CitzdGF0aWMgY2hhciAqdmlkbWVtOwogc3RhdGljIGludCB2aWRwb3J0Owogc3RhdGljIGludCBsaW5lcywgY29sczsKIApAQCAtMjI0LDggKzIzMSwxMCBAQAogewogCXZvaWQgKnA7CiAKLQlpZiAoc2l6ZSA8MCkgZXJyb3IoIk1hbGxvYyBlcnJvciIpOwotCWlmIChmcmVlX21lbV9wdHIgPD0gMCkgZXJyb3IoIk1lbW9yeSBlcnJvciIpOworCWlmIChzaXplIDwgMCkKKwkJZXJyb3IoIk1hbGxvYyBlcnJvciIpOworCWlmIChmcmVlX21lbV9wdHIgPD0gMCkKKwkJZXJyb3IoIk1lbW9yeSBlcnJvciIpOwogCiAJZnJlZV9tZW1fcHRyID0gKGZyZWVfbWVtX3B0ciArIDMpICYgfjM7CS8qIEFsaWduICovCiAKQEAgLTI1MSwxOSArMjYwLDE5IEBACiB7CiAJZnJlZV9tZW1fcHRyID0gKG1lbXB0cikgKnB0cjsKIH0KLSAKKwogc3RhdGljIHZvaWQgc2Nyb2xsKHZvaWQpCiB7CiAJaW50IGk7CiAKLQltZW1jcHkgKCB2aWRtZW0sIHZpZG1lbSArIGNvbHMgKiAyLCAoIGxpbmVzIC0gMSApICogY29scyAqIDIgKTsKLQlmb3IgKCBpID0gKCBsaW5lcyAtIDEgKSAqIGNvbHMgKiAyOyBpIDwgbGluZXMgKiBjb2xzICogMjsgaSArPSAyICkKKwltZW1jcHkodmlkbWVtLCB2aWRtZW0gKyBjb2xzICogMiwgKGxpbmVzIC0gMSkgKiBjb2xzICogMik7CisJZm9yIChpID0gKGxpbmVzIC0gMSkgKiBjb2xzICogMjsgaSA8IGxpbmVzICogY29scyAqIDI7IGkgKz0gMikKIAkJdmlkbWVtW2ldID0gJyAnOwogfQogCiBzdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqcykKIHsKLQlpbnQgeCx5LHBvczsKKwlpbnQgeCwgeSwgcG9zOwogCWNoYXIgYzsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTI3NCwxOCArMjgzLDE4IEBACiAJeCA9IFJNX1NDUkVFTl9JTkZPLm9yaWdfeDsKIAl5ID0gUk1fU0NSRUVOX0lORk8ub3JpZ195OwogCi0Jd2hpbGUgKCAoIGMgPSAqcysrICkgIT0gJ1wwJyApIHsKLQkJaWYgKCBjID09ICdcbicgKSB7CisJd2hpbGUgKChjID0gKnMrKykgIT0gJ1wwJykgeworCQlpZiAoYyA9PSAnXG4nKSB7CiAJCQl4ID0gMDsKLQkJCWlmICggKyt5ID49IGxpbmVzICkgeworCQkJaWYgKCsreSA+PSBsaW5lcykgewogCQkJCXNjcm9sbCgpOwogCQkJCXktLTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXZpZG1lbSBbKHggKyBjb2xzICogeSkgKiAyXSA9IGM7Ci0JCQlpZiAoICsreCA+PSBjb2xzICkgeworCQkJaWYgKCsreCA+PSBjb2xzKSB7CiAJCQkJeCA9IDA7Ci0JCQkJaWYgKCArK3kgPj0gbGluZXMgKSB7CisJCQkJaWYgKCsreSA+PSBsaW5lcykgewogCQkJCQlzY3JvbGwoKTsKIAkJCQkJeS0tOwogCQkJCX0KQEAgLTMwMywyMiArMzEyLDIyIEBACiAJb3V0YigweGZmICYgKHBvcyA+PiAxKSwgdmlkcG9ydCsxKTsKIH0KIAotc3RhdGljIHZvaWQqIG1lbXNldCh2b2lkKiBzLCBpbnQgYywgdW5zaWduZWQgbikKK3N0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHVuc2lnbmVkIG4pCiB7CiAJaW50IGk7CiAJY2hhciAqc3MgPSBzOwogCi0JZm9yIChpPTA7aTxuO2krKykgc3NbaV0gPSBjOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHNzW2ldID0gYzsKIAlyZXR1cm4gczsKIH0KIAotc3RhdGljIHZvaWQqIG1lbWNweSh2b2lkKiBkZXN0LCBjb25zdCB2b2lkKiBzcmMsIHVuc2lnbmVkIG4pCitzdGF0aWMgdm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbikKIHsKIAlpbnQgaTsKIAljb25zdCBjaGFyICpzID0gc3JjOwogCWNoYXIgKmQgPSBkZXN0OwogCi0JZm9yIChpPTA7aTxuO2krKykgZFtpXSA9IHNbaV07CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgZFtpXSA9IHNbaV07CiAJcmV0dXJuIGRlc3Q7CiB9CiAKQEAgLTM0MSw5ICszNTAsOSBAQAogCS8qIFdpdGggbXkgd2luZG93IGVxdWFsIHRvIG15IG91dHB1dCBidWZmZXIKIAkgKiBJIG9ubHkgbmVlZCB0byBjb21wdXRlIHRoZSBjcmMgaGVyZS4KIAkgKi8KLQl1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KKwl1bnNpZ25lZCBsb25nIGMgPSBjcmM7ICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlICovCiAJdW5zaWduZWQgbjsKLQl1Y2ggKmluLCBjaDsKKwl1bnNpZ25lZCBjaGFyICppbiwgY2g7CiAKIAlpbiA9IHdpbmRvdzsKIAlmb3IgKG4gPSAwOyBuIDwgb3V0Y250OyBuKyspIHsKQEAgLTM1MSw3ICszNjAsNyBAQAogCQljID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKIAl9CiAJY3JjID0gYzsKLQlieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7CisJYnl0ZXNfb3V0ICs9ICh1bnNpZ25lZCBsb25nKW91dGNudDsKIAlvdXRjbnQgPSAwOwogfQogCkBAIC0zNjUsOSArMzc0LDU5IEBACiAJCWFzbSgiaGx0Iik7CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlX2VsZih2b2lkICpvdXRwdXQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCUVsZjY0X0VoZHIgZWhkcjsKKwlFbGY2NF9QaGRyICpwaGRycywgKnBoZHI7CisjZWxzZQorCUVsZjMyX0VoZHIgZWhkcjsKKwlFbGYzMl9QaGRyICpwaGRycywgKnBoZHI7CisjZW5kaWYKKwl2b2lkICpkZXN0OworCWludCBpOworCisJbWVtY3B5KCZlaGRyLCBvdXRwdXQsIHNpemVvZihlaGRyKSk7CisJaWYgKGVoZHIuZV9pZGVudFtFSV9NQUcwXSAhPSBFTEZNQUcwIHx8CisJICAgZWhkci5lX2lkZW50W0VJX01BRzFdICE9IEVMRk1BRzEgfHwKKwkgICBlaGRyLmVfaWRlbnRbRUlfTUFHMl0gIT0gRUxGTUFHMiB8fAorCSAgIGVoZHIuZV9pZGVudFtFSV9NQUczXSAhPSBFTEZNQUczKSB7CisJCWVycm9yKCJLZXJuZWwgaXMgbm90IGEgdmFsaWQgRUxGIGZpbGUiKTsKKwkJcmV0dXJuOworCX0KKworCXB1dHN0cigiUGFyc2luZyBFTEYuLi4gIik7CisKKwlwaGRycyA9IG1hbGxvYyhzaXplb2YoKnBoZHJzKSAqIGVoZHIuZV9waG51bSk7CisJaWYgKCFwaGRycykKKwkJZXJyb3IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgcGhkcnMiKTsKKworCW1lbWNweShwaGRycywgb3V0cHV0ICsgZWhkci5lX3Bob2ZmLCBzaXplb2YoKnBoZHJzKSAqIGVoZHIuZV9waG51bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWhkci5lX3BobnVtOyBpKyspIHsKKwkJcGhkciA9ICZwaGRyc1tpXTsKKworCQlzd2l0Y2ggKHBoZHItPnBfdHlwZSkgeworCQljYXNlIFBUX0xPQUQ6CisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJCQlkZXN0ID0gb3V0cHV0OworCQkJZGVzdCArPSAocGhkci0+cF9wYWRkciAtIExPQURfUEhZU0lDQUxfQUREUik7CisjZWxzZQorCQkJZGVzdCA9ICh2b2lkICopKHBoZHItPnBfcGFkZHIpOworI2VuZGlmCisJCQltZW1jcHkoZGVzdCwKKwkJCSAgICAgICBvdXRwdXQgKyBwaGRyLT5wX29mZnNldCwKKwkJCSAgICAgICBwaGRyLT5wX2ZpbGVzeik7CisJCQlicmVhazsKKwkJZGVmYXVsdDogLyogSWdub3JlIG90aGVyIFBUXyogKi8gYnJlYWs7CisJCX0KKwl9Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBkZWNvbXByZXNzX2tlcm5lbCh2b2lkICpybW9kZSwgbWVtcHRyIGhlYXAsCi0JCQkJICB1Y2ggKmlucHV0X2RhdGEsIHVuc2lnbmVkIGxvbmcgaW5wdXRfbGVuLAotCQkJCSAgdWNoICpvdXRwdXQpCisJCQkJICB1bnNpZ25lZCBjaGFyICppbnB1dF9kYXRhLAorCQkJCSAgdW5zaWduZWQgbG9uZyBpbnB1dF9sZW4sCisJCQkJICB1bnNpZ25lZCBjaGFyICpvdXRwdXQpCiB7CiAJcmVhbF9tb2RlID0gcm1vZGU7CiAKQEAgLTM4NCwxOCArNDQzLDE4IEBACiAKIAl3aW5kb3cgPSBvdXRwdXQ7CQkvKiBPdXRwdXQgYnVmZmVyIChOb3JtYWxseSBhdCAxTSkgKi8KIAlmcmVlX21lbV9wdHIgICAgID0gaGVhcDsJLyogSGVhcCAqLwotCWZyZWVfbWVtX2VuZF9wdHIgPSBoZWFwICsgSEVBUF9TSVpFOworCWZyZWVfbWVtX2VuZF9wdHIgPSBoZWFwICsgQk9PVF9IRUFQX1NJWkU7CiAJaW5idWYgID0gaW5wdXRfZGF0YTsJCS8qIElucHV0IGJ1ZmZlciAqLwogCWluc2l6ZSA9IGlucHV0X2xlbjsKIAlpbnB0ciAgPSAwOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmICgodWxnKW91dHB1dCAmIChfX0tFUk5FTF9BTElHTiAtIDEpKQorCWlmICgodW5zaWduZWQgbG9uZylvdXRwdXQgJiAoX19LRVJORUxfQUxJR04gLSAxKSkKIAkJZXJyb3IoIkRlc3RpbmF0aW9uIGFkZHJlc3Mgbm90IDJNIGFsaWduZWQiKTsKLQlpZiAoKHVsZylvdXRwdXQgPj0gMHhmZmZmZmZmZmZmVUwpCisJaWYgKCh1bnNpZ25lZCBsb25nKW91dHB1dCA+PSAweGZmZmZmZmZmZmZVTCkKIAkJZXJyb3IoIkRlc3RpbmF0aW9uIGFkZHJlc3MgdG9vIGxhcmdlIik7CiAjZWxzZQotCWlmICgodTMyKW91dHB1dCAmIChDT05GSUdfUEhZU0lDQUxfQUxJR04gLTEpKQorCWlmICgodTMyKW91dHB1dCAmIChDT05GSUdfUEhZU0lDQUxfQUxJR04gLSAxKSkKIAkJZXJyb3IoIkRlc3RpbmF0aW9uIGFkZHJlc3Mgbm90IENPTkZJR19QSFlTSUNBTF9BTElHTiBhbGlnbmVkIik7CiAJaWYgKGhlYXAgPiAoKC1fX1BBR0VfT0ZGU0VULSg1MTI8PDIwKS0xKSAmIDB4N2ZmZmZmZmYpKQogCQllcnJvcigiRGVzdGluYXRpb24gYWRkcmVzcyB0b28gbGFyZ2UiKTsKQEAgLTQwOCw2ICs0NjcsNyBAQAogCW1ha2VjcmMoKTsKIAlwdXRzdHIoIlxuRGVjb21wcmVzc2luZyBMaW51eC4uLiAiKTsKIAlndW56aXAoKTsKKwlwYXJzZV9lbGYob3V0cHV0KTsKIAlwdXRzdHIoImRvbmUuXG5Cb290aW5nIHRoZSBrZXJuZWwuXG4iKTsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eF82NC5sZHMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eF82NC5sZHMKaW5kZXggN2U1YzcyMC4uYmVmMWFjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXhfNjQubGRzCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4XzY0LmxkcwpAQCAtMzksMTAgKzM5LDEwIEBACiAJCSooLmJzcy4qKQogCQkqKENPTU1PTikKIAkJLiA9IEFMSUdOKDgpOwotCQlfZW5kID0gLiA7CisJCV9lbmRfYmVmb3JlX3BndCA9IC4gOwogCQkuID0gQUxJR04oNDA5Nik7CiAJCXBndGFibGUgPSAuIDsKIAkJLiA9IC4gKyA0MDk2ICogNjsKLQkJX2hlYXAgPSAuOworCQlfZWJzcyA9IC47CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb3B5LlMgYi9hcmNoL3g4Ni9ib290L2NvcHkuUwppbmRleCBlZjEyN2U1Li5lZjUwYzg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvcHkuUworKysgYi9hcmNoL3g4Ni9ib290L2NvcHkuUwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9jb3B5LlMKLSAqCiAgKiBNZW1vcnkgY29weSByb3V0aW5lcwogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY3B1Y2hlY2suYyBiL2FyY2gveDg2L2Jvb3QvY3B1Y2hlY2suYwppbmRleCA3NjkwNjViLi43ODA0Mzg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NwdWNoZWNrLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jcHVjaGVjay5jCkBAIC05LDggKzksNiBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqIGFyY2gvaTM4Ni9ib290L2NwdWNoZWNrLmMKLSAqCiAgKiBDaGVjayBmb3Igb2JsaWdhdG9yeSBDUFUgZmVhdHVyZXMgYW5kIGFib3J0IGlmIHRoZSBmZWF0dXJlcyBhcmUgbm90CiAgKiBwcmVzZW50LiAgVGhpcyBjb2RlIHNob3VsZCBiZSBjb21waWxhYmxlIGFzIDE2LSwgMzItIG9yIDY0LWJpdAogICogY29kZSwgc28gYmUgdmVyeSBjYXJlZnVsIHdpdGggdHlwZXMgYW5kIGlubGluZSBhc3NlbWJseS4KQEAgLTU2LDI3ICs1NCwyNyBAQAogCVJFUVVJUkVEX01BU0s3LAogfTsKIAotI2RlZmluZSBBMzIoYSxiLGMsZCkgKCgoZCkgPDwgMjQpKygoYykgPDwgMTYpKygoYikgPDwgOCkrKGEpKQorI2RlZmluZSBBMzIoYSwgYiwgYywgZCkgKCgoZCkgPDwgMjQpKygoYykgPDwgMTYpKygoYikgPDwgOCkrKGEpKQogCiBzdGF0aWMgaW50IGlzX2FtZCh2b2lkKQogewotCXJldHVybiBjcHVfdmVuZG9yWzBdID09IEEzMignQScsJ3UnLCd0JywnaCcpICYmCi0JICAgICAgIGNwdV92ZW5kb3JbMV0gPT0gQTMyKCdlJywnbicsJ3QnLCdpJykgJiYKLQkgICAgICAgY3B1X3ZlbmRvclsyXSA9PSBBMzIoJ2MnLCdBJywnTScsJ0QnKTsKKwlyZXR1cm4gY3B1X3ZlbmRvclswXSA9PSBBMzIoJ0EnLCAndScsICd0JywgJ2gnKSAmJgorCSAgICAgICBjcHVfdmVuZG9yWzFdID09IEEzMignZScsICduJywgJ3QnLCAnaScpICYmCisJICAgICAgIGNwdV92ZW5kb3JbMl0gPT0gQTMyKCdjJywgJ0EnLCAnTScsICdEJyk7CiB9CiAKIHN0YXRpYyBpbnQgaXNfY2VudGF1cih2b2lkKQogewotCXJldHVybiBjcHVfdmVuZG9yWzBdID09IEEzMignQycsJ2UnLCduJywndCcpICYmCi0JICAgICAgIGNwdV92ZW5kb3JbMV0gPT0gQTMyKCdhJywndScsJ3InLCdIJykgJiYKLQkgICAgICAgY3B1X3ZlbmRvclsyXSA9PSBBMzIoJ2EnLCd1JywnbCcsJ3MnKTsKKwlyZXR1cm4gY3B1X3ZlbmRvclswXSA9PSBBMzIoJ0MnLCAnZScsICduJywgJ3QnKSAmJgorCSAgICAgICBjcHVfdmVuZG9yWzFdID09IEEzMignYScsICd1JywgJ3InLCAnSCcpICYmCisJICAgICAgIGNwdV92ZW5kb3JbMl0gPT0gQTMyKCdhJywgJ3UnLCAnbCcsICdzJyk7CiB9CiAKIHN0YXRpYyBpbnQgaXNfdHJhbnNtZXRhKHZvaWQpCiB7Ci0JcmV0dXJuIGNwdV92ZW5kb3JbMF0gPT0gQTMyKCdHJywnZScsJ24nLCd1JykgJiYKLQkgICAgICAgY3B1X3ZlbmRvclsxXSA9PSBBMzIoJ2knLCduJywnZScsJ1QnKSAmJgotCSAgICAgICBjcHVfdmVuZG9yWzJdID09IEEzMignTScsJ3gnLCc4JywnNicpOworCXJldHVybiBjcHVfdmVuZG9yWzBdID09IEEzMignRycsICdlJywgJ24nLCAndScpICYmCisJICAgICAgIGNwdV92ZW5kb3JbMV0gPT0gQTMyKCdpJywgJ24nLCAnZScsICdUJykgJiYKKwkgICAgICAgY3B1X3ZlbmRvclsyXSA9PSBBMzIoJ00nLCAneCcsICc4JywgJzYnKTsKIH0KIAogc3RhdGljIGludCBoYXNfZnB1KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2VkZC5jIGIvYXJjaC94ODYvYm9vdC9lZGQuYwppbmRleCA4NzIxZGM0Li5kODRhNDhlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2VkZC5jCisrKyBiL2FyY2gveDg2L2Jvb3QvZWRkLmMKQEAgLTksOCArOSw2IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgotICogYXJjaC9pMzg2L2Jvb3QvZWRkLmMKLSAqCiAgKiBHZXQgRUREIEJJT1MgZGlzayBpbmZvcm1hdGlvbgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMgYi9hcmNoL3g4Ni9ib290L2hlYWRlci5TCmluZGV4IDY0YWQ5MDEuLjZkMmRmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKKysrIGIvYXJjaC94ODYvYm9vdC9oZWFkZXIuUwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSAiYm9vdC5oIgorI2luY2x1ZGUgIm9mZnNldHMuaCIKIAogU0VUVVBTRUNUUwk9IDQJCQkvKiBkZWZhdWx0IG5yIG9mIHNldHVwLXNlY3RvcnMgKi8KIEJPT1RTRUcJCT0gMHgwN0MwCQkvKiBvcmlnaW5hbCBhZGRyZXNzIG9mIGJvb3Qtc2VjdG9yICovCkBAIC0xMTksNyArMTIwLDcgQEAKIAkjIFBhcnQgMiBvZiB0aGUgaGVhZGVyLCBmcm9tIHRoZSBvbGQgc2V0dXAuUwogCiAJCS5hc2NpaQkiSGRyUyIJCSMgaGVhZGVyIHNpZ25hdHVyZQotCQkud29yZAkweDAyMDcJCSMgaGVhZGVyIHZlcnNpb24gbnVtYmVyICg+PSAweDAxMDUpCisJCS53b3JkCTB4MDIwOAkJIyBoZWFkZXIgdmVyc2lvbiBudW1iZXIgKD49IDB4MDEwNSkKIAkJCQkJIyBvciBlbHNlIG9sZCBsb2FkbGluLTEuNSB3aWxsIGZhaWwpCiAJCS5nbG9ibCByZWFsbW9kZV9zd3RjaAogcmVhbG1vZGVfc3d0Y2g6CS53b3JkCTAsIDAJCSMgZGVmYXVsdF9zd2l0Y2gsIFNFVFVQU0VHCkBAIC0yMjMsNiArMjI0LDkgQEAKIAogaGFyZHdhcmVfc3ViYXJjaF9kYXRhOgkucXVhZCAwCiAKK3BheWxvYWRfb2Zmc2V0OgkJLmxvbmcgaW5wdXRfZGF0YQorcGF5bG9hZF9sZW5ndGg6CQkubG9uZyBpbnB1dF9kYXRhX2VuZC1pbnB1dF9kYXRhCisKICMgRW5kIG9mIHNldHVwIGhlYWRlciAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAJLnNlY3Rpb24gIi5pbml0dGV4dCIsICJheCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvaW5zdGFsbC5zaCBiL2FyY2gveDg2L2Jvb3QvaW5zdGFsbC5zaAppbmRleCA4OGQ3Nzc2Li44ZDYwZWUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2luc3RhbGwuc2gKKysrIGIvYXJjaC94ODYvYm9vdC9pbnN0YWxsLnNoCkBAIC0xLDcgKzEsNSBAQAogIyEvYmluL3NoCiAjCi0jIGFyY2gvaTM4Ni9ib290L2luc3RhbGwuc2gKLSMKICMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogIyBmb3IgbW9yZSBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9tYWluLmMgYi9hcmNoL3g4Ni9ib290L21haW4uYwppbmRleCA3ODI4ZGE1Li43NzU2OWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21haW4uYworKysgYi9hcmNoL3g4Ni9ib290L21haW4uYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9tYWluLmMKLSAqCiAgKiBNYWluIG1vZHVsZSBmb3IgdGhlIHJlYWwtbW9kZSBrZXJuZWwgY29kZQogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWNhLmMgYi9hcmNoL3g4Ni9ib290L21jYS5jCmluZGV4IDY4MjIyZjIuLjkxMWVhYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvbWNhLmMKKysrIGIvYXJjaC94ODYvYm9vdC9tY2EuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9tY2EuYwotICoKICAqIEdldCB0aGUgTUNBIHN5c3RlbSBkZXNjcmlwdGlvbiB0YWJsZQogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMgYi9hcmNoL3g4Ni9ib290L21lbW9yeS5jCmluZGV4IDM3ODM1MzkuLmFjYWQzMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMKKysrIGIvYXJjaC94ODYvYm9vdC9tZW1vcnkuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9tZW1vcnkuYwotICoKICAqIE1lbW9yeSBkZXRlY3Rpb24gY29kZQogICovCiAKQEAgLTM3LDYgKzM1LDEyIEBACiAJCSAgICAgICI9bSIgKCpkZXNjKQogCQkgICAgOiAiRCIgKGRlc2MpLCAiZCIgKFNNQVApLCAiYSIgKDB4ZTgyMCkpOwogCisJCS8qIEJJT1NlcyB3aGljaCB0ZXJtaW5hdGUgdGhlIGNoYWluIHdpdGggQ0YgPSAxIGFzIG9wcG9zZWQKKwkJICAgdG8gJWVieCA9IDAgZG9uJ3QgYWx3YXlzIHJlcG9ydCB0aGUgU01BUCBzaWduYXR1cmUgb24KKwkJICAgdGhlIGZpbmFsLCBmYWlsaW5nLCBwcm9iZS4gKi8KKwkJaWYgKGVycikKKwkJCWJyZWFrOworCiAJCS8qIFNvbWUgQklPU2VzIHN0b3AgcmV0dXJuaW5nIFNNQVAgaW4gdGhlIG1pZGRsZSBvZgogCQkgICB0aGUgc2VhcmNoIGxvb3AuICBXZSBkb24ndCBrbm93IGV4YWN0bHkgaG93IHRoZSBCSU9TCiAJCSAgIHNjcmV3ZWQgdXAgdGhlIG1hcCBhdCB0aGF0IHBvaW50LCB3ZSBtaWdodCBoYXZlIGEKQEAgLTQ3LDkgKzUxLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCiAJCWNvdW50Kys7CiAJCWRlc2MrKzsKIAl9IHdoaWxlIChuZXh0ICYmIGNvdW50IDwgRTgyME1BWCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3BtLmMgYi9hcmNoL3g4Ni9ib290L3BtLmMKaW5kZXggMWEwZjkzNi4uMzI4OTU2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9wbS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvcG0uYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC9wbS5jCi0gKgogICogUHJlcGFyZSB0aGUgbWFjaGluZSBmb3IgdHJhbnNpdGlvbiB0byBwcm90ZWN0ZWQgbW9kZS4KICAqLwogCkBAIC0xMDAsNyArOTgsNyBAQAogLyoKICAqIFNldCB1cCB0aGUgR0RUCiAgKi8KLSNkZWZpbmUgR0RUX0VOVFJZKGZsYWdzLGJhc2UsbGltaXQpCQlcCisjZGVmaW5lIEdEVF9FTlRSWShmbGFncywgYmFzZSwgbGltaXQpCQlcCiAJKCgodTY0KShiYXNlICYgMHhmZjAwMDAwMCkgPDwgMzIpIHwJXAogCSAoKHU2NClmbGFncyA8PCA0MCkgfAkJCVwKIAkgKCh1NjQpKGxpbWl0ICYgMHgwMGZmMDAwMCkgPDwgMzIpIHwJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9wbWp1bXAuUyBiL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMKaW5kZXggZjU0MDJkNS4uYWIwNDlkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9wbWp1bXAuUworKysgYi9hcmNoL3g4Ni9ib290L3BtanVtcC5TCkBAIC05LDggKzksNiBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqIGFyY2gvaTM4Ni9ib290L3BtanVtcC5TCi0gKgogICogVGhlIGFjdHVhbCB0cmFuc2l0aW9uIGludG8gcHJvdGVjdGVkIG1vZGUKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ByaW50Zi5jIGIvYXJjaC94ODYvYm9vdC9wcmludGYuYwppbmRleCA3ZTdlODkwLi5jMWQwMGMwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9wcmludGYuYworKysgYi9hcmNoL3g4Ni9ib290L3ByaW50Zi5jCkBAIC05LDggKzksNiBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqIGFyY2gvaTM4Ni9ib290L3ByaW50Zi5jCi0gKgogICogT2gsIGl0J3MgYSB3YXN0ZSBvZiBzcGFjZSwgYnV0IG9oLXNvLXl1bW15IGZvciBkZWJ1Z2dpbmcuICBUaGlzCiAgKiB2ZXJzaW9uIG9mIHByaW50ZigpIGRvZXMgbm90IGluY2x1ZGUgNjQtYml0IHN1cHBvcnQuICAiTGl2ZSB3aXRoCiAgKiBpdC4iCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3N0cmluZy5jIGIvYXJjaC94ODYvYm9vdC9zdHJpbmcuYwppbmRleCA0ODFhMjIwLi5mOTRiN2EwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3N0cmluZy5jCisrKyBiL2FyY2gveDg2L2Jvb3Qvc3RyaW5nLmMKQEAgLTksOCArOSw2IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgotICogYXJjaC9pMzg2L2Jvb3Qvc3RyaW5nLmMKLSAqCiAgKiBWZXJ5IGJhc2ljIHN0cmluZyBmdW5jdGlvbnMKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMgYi9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMKaW5kZXggYjQyNDg3NC4uNDRkYzE5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC90b29scy9idWlsZC5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdG9vbHMvYnVpbGQuYwpAQCAtNTAsNiArNTAsNzUgQEAKIHU4IGJ1ZltTRVRVUF9TRUNUX01BWCo1MTJdOwogaW50IGlzX2JpZ19rZXJuZWw7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCB1MzIgY3JjdGFiMzJbXSA9IHsKKwkweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5MDk1MWJhLCAweDA3NmRjNDE5LAorCTB4NzA2YWY0OGYsIDB4ZTk2M2E1MzUsIDB4OWU2NDk1YTMsIDB4MGVkYjg4MzIsIDB4NzlkY2I4YTQsCisJMHhlMGQ1ZTkxZSwgMHg5N2QyZDk4OCwgMHgwOWI2NGMyYiwgMHg3ZWIxN2NiZCwgMHhlN2I4MmQwNywKKwkweDkwYmYxZDkxLCAweDFkYjcxMDY0LCAweDZhYjAyMGYyLCAweGYzYjk3MTQ4LCAweDg0YmU0MWRlLAorCTB4MWFkYWQ0N2QsIDB4NmRkZGU0ZWIsIDB4ZjRkNGI1NTEsIDB4ODNkMzg1YzcsIDB4MTM2Yzk4NTYsCisJMHg2NDZiYThjMCwgMHhmZDYyZjk3YSwgMHg4YTY1YzllYywgMHgxNDAxNWM0ZiwgMHg2MzA2NmNkOSwKKwkweGZhMGYzZDYzLCAweDhkMDgwZGY1LCAweDNiNmUyMGM4LCAweDRjNjkxMDVlLCAweGQ1NjA0MWU0LAorCTB4YTI2NzcxNzIsIDB4M2MwM2U0ZDEsIDB4NGIwNGQ0NDcsIDB4ZDIwZDg1ZmQsIDB4YTUwYWI1NmIsCisJMHgzNWI1YThmYSwgMHg0MmIyOTg2YywgMHhkYmJiYzlkNiwgMHhhY2JjZjk0MCwgMHgzMmQ4NmNlMywKKwkweDQ1ZGY1Yzc1LCAweGRjZDYwZGNmLCAweGFiZDEzZDU5LCAweDI2ZDkzMGFjLCAweDUxZGUwMDNhLAorCTB4YzhkNzUxODAsIDB4YmZkMDYxMTYsIDB4MjFiNGY0YjUsIDB4NTZiM2M0MjMsIDB4Y2ZiYTk1OTksCisJMHhiOGJkYTUwZiwgMHgyODAyYjg5ZSwgMHg1ZjA1ODgwOCwgMHhjNjBjZDliMiwgMHhiMTBiZTkyNCwKKwkweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFiLCAweGI2NjYyZDNkLCAweDc2ZGM0MTkwLAorCTB4MDFkYjcxMDYsIDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEsIDB4NzFiMTg1ODksIDB4MDZiNmI1MWYsCisJMHg5ZmJmZTRhNSwgMHhlOGI4ZDQzMywgMHg3ODA3YzlhMiwgMHgwZjAwZjkzNCwgMHg5NjA5YTg4ZSwKKwkweGUxMGU5ODE4LCAweDdmNmEwZGJiLCAweDA4NmQzZDJkLCAweDkxNjQ2Yzk3LCAweGU2NjM1YzAxLAorCTB4NmI2YjUxZjQsIDB4MWM2YzYxNjIsIDB4ODU2NTMwZDgsIDB4ZjI2MjAwNGUsIDB4NmMwNjk1ZWQsCisJMHgxYjAxYTU3YiwgMHg4MjA4ZjRjMSwgMHhmNTBmYzQ1NywgMHg2NWIwZDljNiwgMHgxMmI3ZTk1MCwKKwkweDhiYmViOGVhLCAweGZjYjk4ODdjLCAweDYyZGQxZGRmLCAweDE1ZGEyZDQ5LCAweDhjZDM3Y2YzLAorCTB4ZmJkNDRjNjUsIDB4NGRiMjYxNTgsIDB4M2FiNTUxY2UsIDB4YTNiYzAwNzQsIDB4ZDRiYjMwZTIsCisJMHg0YWRmYTU0MSwgMHgzZGQ4OTVkNywgMHhhNGQxYzQ2ZCwgMHhkM2Q2ZjRmYiwgMHg0MzY5ZTk2YSwKKwkweDM0NmVkOWZjLCAweGFkNjc4ODQ2LCAweGRhNjBiOGQwLCAweDQ0MDQyZDczLCAweDMzMDMxZGU1LAorCTB4YWEwYTRjNWYsIDB4ZGQwZDdjYzksIDB4NTAwNTcxM2MsIDB4MjcwMjQxYWEsIDB4YmUwYjEwMTAsCisJMHhjOTBjMjA4NiwgMHg1NzY4YjUyNSwgMHgyMDZmODViMywgMHhiOTY2ZDQwOSwgMHhjZTYxZTQ5ZiwKKwkweDVlZGVmOTBlLCAweDI5ZDljOTk4LCAweGIwZDA5ODIyLCAweGM3ZDdhOGI0LCAweDU5YjMzZDE3LAorCTB4MmViNDBkODEsIDB4YjdiZDVjM2IsIDB4YzBiYTZjYWQsIDB4ZWRiODgzMjAsIDB4OWFiZmIzYjYsCisJMHgwM2I2ZTIwYywgMHg3NGIxZDI5YSwgMHhlYWQ1NDczOSwgMHg5ZGQyNzdhZiwgMHgwNGRiMjYxNSwKKwkweDczZGMxNjgzLCAweGUzNjMwYjEyLCAweDk0NjQzYjg0LCAweDBkNmQ2YTNlLCAweDdhNmE1YWE4LAorCTB4ZTQwZWNmMGIsIDB4OTMwOWZmOWQsIDB4MGEwMGFlMjcsIDB4N2QwNzllYjEsIDB4ZjAwZjkzNDQsCisJMHg4NzA4YTNkMiwgMHgxZTAxZjI2OCwgMHg2OTA2YzJmZSwgMHhmNzYyNTc1ZCwgMHg4MDY1NjdjYiwKKwkweDE5NmMzNjcxLCAweDZlNmIwNmU3LCAweGZlZDQxYjc2LCAweDg5ZDMyYmUwLCAweDEwZGE3YTVhLAorCTB4NjdkZDRhY2MsIDB4ZjliOWRmNmYsIDB4OGViZWVmZjksIDB4MTdiN2JlNDMsIDB4NjBiMDhlZDUsCisJMHhkNmQ2YTNlOCwgMHhhMWQxOTM3ZSwgMHgzOGQ4YzJjNCwgMHg0ZmRmZjI1MiwgMHhkMWJiNjdmMSwKKwkweGE2YmM1NzY3LCAweDNmYjUwNmRkLCAweDQ4YjIzNjRiLCAweGQ4MGQyYmRhLCAweGFmMGExYjRjLAorCTB4MzYwMzRhZjYsIDB4NDEwNDdhNjAsIDB4ZGY2MGVmYzMsIDB4YTg2N2RmNTUsIDB4MzE2ZThlZWYsCisJMHg0NjY5YmU3OSwgMHhjYjYxYjM4YywgMHhiYzY2ODMxYSwgMHgyNTZmZDJhMCwgMHg1MjY4ZTIzNiwKKwkweGNjMGM3Nzk1LCAweGJiMGI0NzAzLCAweDIyMDIxNmI5LCAweDU1MDUyNjJmLCAweGM1YmEzYmJlLAorCTB4YjJiZDBiMjgsIDB4MmJiNDVhOTIsIDB4NWNiMzZhMDQsIDB4YzJkN2ZmYTcsIDB4YjVkMGNmMzEsCisJMHgyY2Q5OWU4YiwgMHg1YmRlYWUxZCwgMHg5YjY0YzJiMCwgMHhlYzYzZjIyNiwgMHg3NTZhYTM5YywKKwkweDAyNmQ5MzBhLCAweDljMDkwNmE5LCAweGViMGUzNjNmLCAweDcyMDc2Nzg1LCAweDA1MDA1NzEzLAorCTB4OTViZjRhODIsIDB4ZTJiODdhMTQsIDB4N2JiMTJiYWUsIDB4MGNiNjFiMzgsIDB4OTJkMjhlOWIsCisJMHhlNWQ1YmUwZCwgMHg3Y2RjZWZiNywgMHgwYmRiZGYyMSwgMHg4NmQzZDJkNCwgMHhmMWQ0ZTI0MiwKKwkweDY4ZGRiM2Y4LCAweDFmZGE4MzZlLCAweDgxYmUxNmNkLCAweGY2YjkyNjViLCAweDZmYjA3N2UxLAorCTB4MThiNzQ3NzcsIDB4ODgwODVhZTYsIDB4ZmYwZjZhNzAsIDB4NjYwNjNiY2EsIDB4MTEwMTBiNWMsCisJMHg4ZjY1OWVmZiwgMHhmODYyYWU2OSwgMHg2MTZiZmZkMywgMHgxNjZjY2Y0NSwgMHhhMDBhZTI3OCwKKwkweGQ3MGRkMmVlLCAweDRlMDQ4MzU0LCAweDM5MDNiM2MyLCAweGE3NjcyNjYxLCAweGQwNjAxNmY3LAorCTB4NDk2OTQ3NGQsIDB4M2U2ZTc3ZGIsIDB4YWVkMTZhNGEsIDB4ZDlkNjVhZGMsIDB4NDBkZjBiNjYsCisJMHgzN2Q4M2JmMCwgMHhhOWJjYWU1MywgMHhkZWJiOWVjNSwgMHg0N2IyY2Y3ZiwgMHgzMGI1ZmZlOSwKKwkweGJkYmRmMjFjLCAweGNhYmFjMjhhLCAweDUzYjM5MzMwLCAweDI0YjRhM2E2LCAweGJhZDAzNjA1LAorCTB4Y2RkNzA2OTMsIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsIDB4YjM2NjdhMmUsIDB4YzQ2MTRhYjgsCisJMHg1ZDY4MWIwMiwgMHgyYTZmMmI5NCwgMHhiNDBiYmUzNywgMHhjMzBjOGVhMSwgMHg1YTA1ZGYxYiwKKwkweDJkMDJlZjhkCit9OworCitzdGF0aWMgdTMyIHBhcnRpYWxfY3JjMzJfb25lKHU4IGMsIHUzMiBjcmMpCit7CisJcmV0dXJuIGNyY3RhYjMyWyhjcmMgXiBjKSAmIDB4ZmZdIF4gKGNyYyA+PiA4KTsKK30KKworc3RhdGljIHUzMiBwYXJ0aWFsX2NyYzMyKGNvbnN0IHU4ICpzLCBpbnQgbGVuLCB1MzIgY3JjKQoreworCXdoaWxlIChsZW4tLSkKKwkJY3JjID0gcGFydGlhbF9jcmMzMl9vbmUoKnMrKywgY3JjKTsKKwlyZXR1cm4gY3JjOworfQorCiBzdGF0aWMgdm9pZCBkaWUoY29uc3QgY2hhciAqIHN0ciwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTc0LDYgKzE0Myw3IEBACiAJRklMRSAqZmlsZTsKIAlpbnQgZmQ7CiAJdm9pZCAqa2VybmVsOworCXUzMiBjcmMgPSAweGZmZmZmZmZmVUw7CiAKIAlpZiAoYXJnYyA+IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWIiKSkKIAkgIHsKQEAgLTE0NCw3ICsyMTQsOCBAQAogCWtlcm5lbCA9IG1tYXAoTlVMTCwgc3osIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIDApOwogCWlmIChrZXJuZWwgPT0gTUFQX0ZBSUxFRCkKIAkJZGllKCJVbmFibGUgdG8gbW1hcCAnJXMnOiAlbSIsIGFyZ3ZbMl0pOwotCXN5c19zaXplID0gKHN6ICsgMTUpIC8gMTY7CisJLyogTnVtYmVyIG9mIDE2LWJ5dGUgcGFyYWdyYXBocywgaW5jbHVkaW5nIHNwYWNlIGZvciBhIDQtYnl0ZSBDUkMgKi8KKwlzeXNfc2l6ZSA9IChzeiArIDE1ICsgNCkgLyAxNjsKIAlpZiAoIWlzX2JpZ19rZXJuZWwgJiYgc3lzX3NpemUgPiBERUZfU1lTU0laRSkKIAkJZGllKCJTeXN0ZW0gaXMgdG9vIGJpZy4gVHJ5IHVzaW5nIGJ6SW1hZ2Ugb3IgbW9kdWxlcy4iKTsKIApAQCAtMTU1LDEyICsyMjYsMjcgQEAKIAlidWZbMHgxZjZdID0gc3lzX3NpemUgPj4gMTY7CiAJYnVmWzB4MWY3XSA9IHN5c19zaXplID4+IDI0OwogCisJY3JjID0gcGFydGlhbF9jcmMzMihidWYsIGksIGNyYyk7CiAJaWYgKGZ3cml0ZShidWYsIDEsIGksIHN0ZG91dCkgIT0gaSkKIAkJZGllKCJXcml0aW5nIHNldHVwIGZhaWxlZCIpOwogCiAJLyogQ29weSB0aGUga2VybmVsIGNvZGUgKi8KKwljcmMgPSBwYXJ0aWFsX2NyYzMyKGtlcm5lbCwgc3osIGNyYyk7CiAJaWYgKGZ3cml0ZShrZXJuZWwsIDEsIHN6LCBzdGRvdXQpICE9IHN6KQogCQlkaWUoIldyaXRpbmcga2VybmVsIGZhaWxlZCIpOworCisJLyogQWRkIHBhZGRpbmcgbGVhdmluZyA0IGJ5dGVzIGZvciB0aGUgY2hlY2tzdW0gKi8KKwl3aGlsZSAoc3orKyA8IChzeXNfc2l6ZSoxNikgLSA0KSB7CisJCWNyYyA9IHBhcnRpYWxfY3JjMzJfb25lKCdcMCcsIGNyYyk7CisJCWlmIChmd3JpdGUoIlwwIiwgMSwgMSwgc3Rkb3V0KSAhPSAxKQorCQkJZGllKCJXcml0aW5nIHBhZGRpbmcgZmFpbGVkIik7CisJfQorCisJLyogV3JpdGUgdGhlIENSQyAqLworCWZwcmludGYoc3RkZXJyLCAiQ1JDICVseFxuIiwgY3JjKTsKKwlpZiAoZndyaXRlKCZjcmMsIDEsIDQsIHN0ZG91dCkgIT0gNCkKKwkJZGllKCJXcml0aW5nIENSQyBmYWlsZWQiKTsKKwogCWNsb3NlKGZkKTsKIAogCS8qIEV2ZXJ5dGhpbmcgaXMgT0sgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdHR5LmMgYi9hcmNoL3g4Ni9ib290L3R0eS5jCmluZGV4IGYzZjE0YmQuLjBiZTc3YjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdHR5LmMKKysrIGIvYXJjaC94ODYvYm9vdC90dHkuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC90dHkuYwotICoKICAqIFZlcnkgc2ltcGxlIHNjcmVlbiBJL08KICAqIFhYWDogUHJvYmFibHkgc2hvdWxkIGFkZCB2ZXJ5IHNpbXBsZSBzZXJpYWwgSS9PPwogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZlcnNpb24uYyBiL2FyY2gveDg2L2Jvb3QvdmVyc2lvbi5jCmluZGV4IGM2MTQ2MmYuLjI3MjNkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmVyc2lvbi5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmVyc2lvbi5jCkBAIC05LDggKzksNiBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKLSAqIGFyY2gvaTM4Ni9ib290L3ZlcnNpb24uYwotICoKICAqIEtlcm5lbCB2ZXJzaW9uIHN0cmluZwogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmVzYS5oIGIvYXJjaC94ODYvYm9vdC92ZXNhLmgKaW5kZXggZmY1YjczYy4uNDY4ZTQ0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92ZXNhLmgKKysrIGIvYXJjaC94ODYvYm9vdC92ZXNhLmgKQEAgLTI2LDE3ICsyNiwxMCBAQAogCWZhcl9wdHIgdmlkZW9fbW9kZV9wdHI7CS8qIDE0ICovCiAJdTE2IHRvdGFsX21lbW9yeTsJLyogMTggKi8KIAotCXUxNiBvZW1fc29mdHdhcmVfcmV2OwkvKiAyMCAqLwotCWZhcl9wdHIgb2VtX3ZlbmRvcl9uYW1lX3B0cjsJLyogMjIgKi8KLQlmYXJfcHRyIG9lbV9wcm9kdWN0X25hbWVfcHRyOwkvKiAyNiAqLwotCWZhcl9wdHIgb2VtX3Byb2R1Y3RfcmV2X3B0cjsJLyogMzAgKi8KLQotCXU4IHJlc2VydmVkWzIyMl07CS8qIDM0ICovCi0JdTggb2VtX2RhdGFbMjU2XTsJLyogMjU2ICovCisJdTggcmVzZXJ2ZWRbMjM2XTsJLyogMjAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIFZFU0FfTUFHSUMgKCdWJyArICgnRScgPDwgOCkgKyAoJ1MnIDw8IDE2KSArICgnQScgPDwgMjQpKQotI2RlZmluZSBWQkUyX01BR0lDICgnVicgKyAoJ0InIDw8IDgpICsgKCdFJyA8PCAxNikgKyAoJzInIDw8IDI0KSkKIAogc3RydWN0IHZlc2FfbW9kZV9pbmZvIHsKIAl1MTYgbW9kZV9hdHRyOwkJLyogMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby1iaW9zLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLWJpb3MuYwppbmRleCBmZjY2NGExLi40OWYyNmFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLWJpb3MuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLWJpb3MuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC92aWRlby1iaW9zLmMKLSAqCiAgKiBTdGFuZGFyZCB2aWRlbyBCSU9TIG1vZGVzCiAgKgogICogV2UgaGF2ZSB0d28gb3B0aW9ucyBmb3IgdGhpczsgc2lsZW50IGFuZCBzY2FubmVkLgpAQCAtNTAsNiArNDgsNyBAQAogCWlmIChuZXdfbW9kZSA9PSBtb2RlKQogCQlyZXR1cm4gMDsJLyogTW9kZSBjaGFuZ2UgT0sgKi8KIAorI2lmbmRlZiBfV0FLRVVQCiAJaWYgKG5ld19tb2RlICE9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbW9kZSkgewogCQkvKiBNb2RlIHNldHRpbmcgZmFpbGVkLCBidXQgd2UgZGlkbid0IGVuZCB1cCB3aGVyZSB3ZQogCQkgICBzdGFydGVkLiAgVGhhdCdzIGJhZC4gIFRyeSB0byByZXZlcnQgdG8gdGhlIG9yaWdpbmFsCkBAIC01OSwxMyArNTgsMTggQEAKIAkJCSAgICAgOiAiK2EiIChheCkKIAkJCSAgICAgOiA6ICJlYngiLCAiZWN4IiwgImVkeCIsICJlc2kiLCAiZWRpIik7CiAJfQorI2VuZGlmCiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGJpb3NfcHJvYmUodm9pZCkKIHsKIAl1OCBtb2RlOworI2lmZGVmIF9XQUtFVVAKKwl1OCBzYXZlZF9tb2RlID0gMHgwMzsKKyNlbHNlCiAJdTggc2F2ZWRfbW9kZSA9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbW9kZTsKKyNlbmRpZgogCXUxNiBjcnRjOwogCXN0cnVjdCBtb2RlX2luZm8gKm1pOwogCWludCBubW9kZXMgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby1tb2RlLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLW1vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhlOGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby1tb2RlLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiBMaW51cyBUb3J2YWxkcworICogICBDb3B5cmlnaHQgMjAwNy0yMDA4IHJQYXRoLCBJbmMuIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBhcmNoL2kzODYvYm9vdC92aWRlby1tb2RlLmMKKyAqCisgKiBTZXQgdGhlIHZpZGVvIG1vZGUuICBUaGlzIGlzIHNlcGFyYXRlZCBvdXQgaW50byBhIGRpZmZlcmVudAorICogZmlsZSBpbiBvcmRlciB0byBiZSBzaGFyZWQgd2l0aCB0aGUgQUNQSSB3YWtldXAgY29kZS4KKyAqLworCisjaW5jbHVkZSAiYm9vdC5oIgorI2luY2x1ZGUgInZpZGVvLmgiCisjaW5jbHVkZSAidmVzYS5oIgorCisvKgorICogQ29tbW9uIHZhcmlhYmxlcworICovCitpbnQgYWRhcHRlcjsJCQkvKiAwPUNHQS9NREEvSEdDLCAxPUVHQSwgMj1WR0ErICovCit1MTYgdmlkZW9fc2VnbWVudDsKK2ludCBmb3JjZV94LCBmb3JjZV95OwkvKiBEb24ndCBxdWVyeSB0aGUgQklPUyBmb3IgY29scy9yb3dzICovCisKK2ludCBkb19yZXN0b3JlOwkJLyogU2NyZWVuIGNvbnRlbnRzIGNoYW5nZWQgZHVyaW5nIG1vZGUgZmxpcCAqLworaW50IGdyYXBoaWNfbW9kZTsJLyogR3JhcGhpYyBtb2RlIHdpdGggbGluZWFyIGZyYW1lIGJ1ZmZlciAqLworCisvKiBQcm9iZSB0aGUgdmlkZW8gZHJpdmVycyBhbmQgaGF2ZSB0aGVtIGdlbmVyYXRlIHRoZWlyIG1vZGUgbGlzdHMuICovCit2b2lkIHByb2JlX2NhcmRzKGludCB1bnNhZmUpCit7CisJc3RydWN0IGNhcmRfaW5mbyAqY2FyZDsKKwlzdGF0aWMgdTggcHJvYmVkWzJdOworCisJaWYgKHByb2JlZFt1bnNhZmVdKQorCQlyZXR1cm47CisKKwlwcm9iZWRbdW5zYWZlXSA9IDE7CisKKwlmb3IgKGNhcmQgPSB2aWRlb19jYXJkczsgY2FyZCA8IHZpZGVvX2NhcmRzX2VuZDsgY2FyZCsrKSB7CisJCWlmIChjYXJkLT51bnNhZmUgPT0gdW5zYWZlKSB7CisJCQlpZiAoY2FyZC0+cHJvYmUpCisJCQkJY2FyZC0+bm1vZGVzID0gY2FyZC0+cHJvYmUoKTsKKwkJCWVsc2UKKwkJCQljYXJkLT5ubW9kZXMgPSAwOworCQl9CisJfQorfQorCisvKiBUZXN0IGlmIGEgbW9kZSBpcyBkZWZpbmVkICovCitpbnQgbW9kZV9kZWZpbmVkKHUxNiBtb2RlKQoreworCXN0cnVjdCBjYXJkX2luZm8gKmNhcmQ7CisJc3RydWN0IG1vZGVfaW5mbyAqbWk7CisJaW50IGk7CisKKwlmb3IgKGNhcmQgPSB2aWRlb19jYXJkczsgY2FyZCA8IHZpZGVvX2NhcmRzX2VuZDsgY2FyZCsrKSB7CisJCW1pID0gY2FyZC0+bW9kZXM7CisJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ubW9kZXM7IGkrKywgbWkrKykgeworCQkJaWYgKG1pLT5tb2RlID09IG1vZGUpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IG1vZGUgKHdpdGhvdXQgcmVjYWxjKSAqLworc3RhdGljIGludCByYXdfc2V0X21vZGUodTE2IG1vZGUsIHUxNiAqcmVhbF9tb2RlKQoreworCWludCBubW9kZSwgaTsKKwlzdHJ1Y3QgY2FyZF9pbmZvICpjYXJkOworCXN0cnVjdCBtb2RlX2luZm8gKm1pOworCisJLyogRHJvcCB0aGUgcmVjYWxjIGJpdCBpZiBzZXQgKi8KKwltb2RlICY9IH5WSURFT19SRUNBTEM7CisKKwkvKiBTY2FuIGZvciBtb2RlIGJhc2VkIG9uIGZpeGVkIElELCBwb3NpdGlvbiwgb3IgcmVzb2x1dGlvbiAqLworCW5tb2RlID0gMDsKKwlmb3IgKGNhcmQgPSB2aWRlb19jYXJkczsgY2FyZCA8IHZpZGVvX2NhcmRzX2VuZDsgY2FyZCsrKSB7CisJCW1pID0gY2FyZC0+bW9kZXM7CisJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ubW9kZXM7IGkrKywgbWkrKykgeworCQkJaW50IHZpc2libGUgPSBtaS0+eCB8fCBtaS0+eTsKKworCQkJaWYgKChtb2RlID09IG5tb2RlICYmIHZpc2libGUpIHx8CisJCQkgICAgbW9kZSA9PSBtaS0+bW9kZSB8fAorCQkJICAgIG1vZGUgPT0gKG1pLT55IDw8IDgpK21pLT54KSB7CisJCQkJKnJlYWxfbW9kZSA9IG1pLT5tb2RlOworCQkJCXJldHVybiBjYXJkLT5zZXRfbW9kZShtaSk7CisJCQl9CisKKwkJCWlmICh2aXNpYmxlKQorCQkJCW5tb2RlKys7CisJCX0KKwl9CisKKwkvKiBOb3RoaW5nIGZvdW5kPyAgSXMgaXQgYW4gImV4Y2VwdGlvbmFsIiAodW5wcm9iZWQpIG1vZGU/ICovCisJZm9yIChjYXJkID0gdmlkZW9fY2FyZHM7IGNhcmQgPCB2aWRlb19jYXJkc19lbmQ7IGNhcmQrKykgeworCQlpZiAobW9kZSA+PSBjYXJkLT54bW9kZV9maXJzdCAmJgorCQkgICAgbW9kZSA8IGNhcmQtPnhtb2RlX2ZpcnN0K2NhcmQtPnhtb2RlX24pIHsKKwkJCXN0cnVjdCBtb2RlX2luZm8gbWl4OworCQkJKnJlYWxfbW9kZSA9IG1peC5tb2RlID0gbW9kZTsKKwkJCW1peC54ID0gbWl4LnkgPSAwOworCQkJcmV0dXJuIGNhcmQtPnNldF9tb2RlKCZtaXgpOworCQl9CisJfQorCisJLyogT3RoZXJ3aXNlLCBmYWlsdXJlLi4uICovCisJcmV0dXJuIC0xOworfQorCisvKgorICogUmVjYWxjdWxhdGUgdGhlIHZlcnRpY2FsIHZpZGVvIGN1dG9mZiAoaGFjayEpCisgKi8KK3N0YXRpYyB2b2lkIHZnYV9yZWNhbGNfdmVydGljYWwodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZm9udF9zaXplLCByb3dzOworCXUxNiBjcnRjOworCXU4IHB0LCBvdjsKKworCXNldF9mcygwKTsKKwlmb250X3NpemUgPSByZGZzOCgweDQ4NSk7IC8qIEJJT1M6IGZvbnQgc2l6ZSAocGl4ZWxzKSAqLworCXJvd3MgPSBmb3JjZV95ID8gZm9yY2VfeSA6IHJkZnM4KDB4NDg0KSsxOyAvKiBUZXh0IHJvd3MgKi8KKworCXJvd3MgKj0gZm9udF9zaXplOwkvKiBWaXNpYmxlIHNjYW4gbGluZXMgKi8KKwlyb3dzLS07CQkJLyogLi4uIG1pbnVzIG9uZSAqLworCisJY3J0YyA9IHZnYV9jcnRjKCk7CisKKwlwdCA9IGluX2lkeChjcnRjLCAweDExKTsKKwlwdCAmPSB+MHg4MDsJCS8qIFVubG9jayBDUjAtNyAqLworCW91dF9pZHgocHQsIGNydGMsIDB4MTEpOworCisJb3V0X2lkeCgodTgpcm93cywgY3J0YywgMHgxMik7IC8qIExvd2VyIGhlaWdodCByZWdpc3RlciAqLworCisJb3YgPSBpbl9pZHgoY3J0YywgMHgwNyk7IC8qIE92ZXJmbG93IHJlZ2lzdGVyICovCisJb3YgJj0gMHhiZDsKKwlvdiB8PSAocm93cyA+PiAoOC0xKSkgJiAweDAyOworCW92IHw9IChyb3dzID4+ICg5LTYpKSAmIDB4NDA7CisJb3V0X2lkeChvdiwgY3J0YywgMHgwNyk7Cit9CisKKy8qIFNldCBtb2RlICh3aXRoIHJlY2FsYyBpZiBzcGVjaWZpZWQpICovCitpbnQgc2V0X21vZGUodTE2IG1vZGUpCit7CisJaW50IHJ2OworCXUxNiByZWFsX21vZGU7CisKKwkvKiBWZXJ5IHNwZWNpYWwgbW9kZSBudW1iZXJzLi4uICovCisJaWYgKG1vZGUgPT0gVklERU9fQ1VSUkVOVF9NT0RFKQorCQlyZXR1cm4gMDsJLyogTm90aGluZyB0byBkby4uLiAqLworCWVsc2UgaWYgKG1vZGUgPT0gTk9STUFMX1ZHQSkKKwkJbW9kZSA9IFZJREVPXzgweDI1OworCWVsc2UgaWYgKG1vZGUgPT0gRVhURU5ERURfVkdBKQorCQltb2RlID0gVklERU9fOFBPSU5UOworCisJcnYgPSByYXdfc2V0X21vZGUobW9kZSwgJnJlYWxfbW9kZSk7CisJaWYgKHJ2KQorCQlyZXR1cm4gcnY7CisKKwlpZiAobW9kZSAmIFZJREVPX1JFQ0FMQykKKwkJdmdhX3JlY2FsY192ZXJ0aWNhbCgpOworCisJLyogU2F2ZSB0aGUgY2Fub25pY2FsIG1vZGUgbnVtYmVyIGZvciB0aGUga2VybmVsLCBub3QKKwkgICBhbiBhbGlhcywgc2l6ZSBzcGVjaWZpY2F0aW9uIG9yIG1lbnUgcG9zaXRpb24gKi8KKyNpZm5kZWYgX1dBS0VVUAorCWJvb3RfcGFyYW1zLmhkci52aWRfbW9kZSA9IHJlYWxfbW9kZTsKKyNlbmRpZgorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby12ZXNhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwppbmRleCA2NjJkZDJmLi40MDFhZDk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC92aWRlby12ZXNhLmMKLSAqCiAgKiBWRVNBIHRleHQgbW9kZXMKICAqLwogCkBAIC0yNCw3ICsyMiwxMSBAQAogCiBfX3ZpZGVvY2FyZCB2aWRlb192ZXNhOwogCisjaWZuZGVmIF9XQUtFVVAKIHN0YXRpYyB2b2lkIHZlc2Ffc3RvcmVfbW9kZV9wYXJhbXNfZ3JhcGhpY3Modm9pZCk7CisjZWxzZSAvKiBfV0FLRVVQICovCitzdGF0aWMgaW5saW5lIHZvaWQgdmVzYV9zdG9yZV9tb2RlX3BhcmFtc19ncmFwaGljcyh2b2lkKSB7fQorI2VuZGlmIC8qIF9XQUtFVVAgKi8KIAogc3RhdGljIGludCB2ZXNhX3Byb2JlKHZvaWQpCiB7CkBAIC0zNyw4ICszOSw2IEBACiAKIAl2aWRlb192ZXNhLm1vZGVzID0gR0VUX0hFQVAoc3RydWN0IG1vZGVfaW5mbywgMCk7CiAKLQl2Z2luZm8uc2lnbmF0dXJlID0gVkJFMl9NQUdJQzsKLQogCWF4ID0gMHg0ZjAwOwogCWRpID0gKHNpemVfdCkmdmdpbmZvOwogCWFzbShJTlQxMApAQCAtMTY3LDYgKzE2Nyw4IEBACiB9CiAKIAorI2lmbmRlZiBfV0FLRVVQCisKIC8qIFN3aXRjaCBEQUMgdG8gOC1iaXQgbW9kZSAqLwogc3RhdGljIHZvaWQgdmVzYV9kYWNfc2V0XzhiaXRzKHZvaWQpCiB7CkBAIC0yOTAsNiArMjkyLDggQEAKICNlbmRpZiAvKiBDT05GSUdfRklSTVdBUkVfRURJRCAqLwogfQogCisjZW5kaWYgLyogbm90IF9XQUtFVVAgKi8KKwogX192aWRlb2NhcmQgdmlkZW9fdmVzYSA9CiB7CiAJLmNhcmRfbmFtZQk9ICJWRVNBIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCmluZGV4IDcyNTkzODcuLjQwZWNiOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC92aWRlby12Z2EuYwotICoKICAqIENvbW1vbiBhbGwtVkdBIG1vZGVzCiAgKi8KIApAQCAtMjEwLDYgKzIwOCw4IEBACiAgKi8KIHN0YXRpYyBpbnQgdmdhX3Byb2JlKHZvaWQpCiB7CisJdTE2IGVnYV9ieDsKKwogCXN0YXRpYyBjb25zdCBjaGFyICpjYXJkX25hbWVbXSA9IHsKIAkJIkNHQS9NREEvSEdDIiwgIkVHQSIsICJWR0EiCiAJfTsKQEAgLTIyNiwxMiArMjI2LDE2IEBACiAJdTggdmdhX2ZsYWc7CiAKIAlhc20oSU5UMTAKLQkgICAgOiAiPWIiIChib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2VnYV9ieCkKKwkgICAgOiAiPWIiIChlZ2FfYngpCiAJICAgIDogImEiICgweDEyMDApLCAiYiIgKDB4MTApIC8qIENoZWNrIEVHQS9WR0EgKi8KIAkgICAgOiAiZWN4IiwgImVkeCIsICJlc2kiLCAiZWRpIik7CiAKKyNpZm5kZWYgX1dBS0VVUAorCWJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fZWdhX2J4ID0gZWdhX2J4OworI2VuZGlmCisKIAkvKiBJZiB3ZSBoYXZlIE1EQS9DR0EvSEdDIHRoZW4gQkwgd2lsbCBiZSB1bmNoYW5nZWQgYXQgMHgxMCAqLwotCWlmICgodTgpYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ192aWRlb19lZ2FfYnggIT0gMHgxMCkgeworCWlmICgodTgpZWdhX2J4ICE9IDB4MTApIHsKIAkJLyogRUdBL1ZHQSAqLwogCQlhc20oSU5UMTAKIAkJICAgIDogIj1hIiAodmdhX2ZsYWcpCkBAIC0yNDAsNyArMjQ0LDkgQEAKIAogCQlpZiAodmdhX2ZsYWcgPT0gMHgxYSkgewogCQkJYWRhcHRlciA9IEFEQVBURVJfVkdBOworI2lmbmRlZiBfV0FLRVVQCiAJCQlib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID0gMTsKKyNlbmRpZgogCQl9IGVsc2UgewogCQkJYWRhcHRlciA9IEFEQVBURVJfRUdBOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKaW5kZXggNjk2ZDA4Zi4uODM1OThiMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC92aWRlby5jCi0gKgogICogU2VsZWN0IHZpZGVvIG1vZGUKICAqLwogCkBAIC0xOCwyMSArMTYsNiBAQAogI2luY2x1ZGUgInZpZGVvLmgiCiAjaW5jbHVkZSAidmVzYS5oIgogCi0vKgotICogTW9kZSBsaXN0IHZhcmlhYmxlcwotICovCi1zdGF0aWMgc3RydWN0IGNhcmRfaW5mbyBjYXJkc1tdOyAgICAvKiBMaXN0IG9mIGNhcmRzIHRvIHByb2JlIGZvciAqLwotCi0vKgotICogQ29tbW9uIHZhcmlhYmxlcwotICovCi1pbnQgYWRhcHRlcjsJCQkvKiAwPUNHQS9NREEvSEdDLCAxPUVHQSwgMj1WR0ErICovCi11MTYgdmlkZW9fc2VnbWVudDsKLWludCBmb3JjZV94LCBmb3JjZV95OwkvKiBEb24ndCBxdWVyeSB0aGUgQklPUyBmb3IgY29scy9yb3dzICovCi0KLWludCBkb19yZXN0b3JlID0gMDsJLyogU2NyZWVuIGNvbnRlbnRzIGNoYW5nZWQgZHVyaW5nIG1vZGUgZmxpcCAqLwotaW50IGdyYXBoaWNfbW9kZTsJLyogR3JhcGhpYyBtb2RlIHdpdGggbGluZWFyIGZyYW1lIGJ1ZmZlciAqLwotCiBzdGF0aWMgdm9pZCBzdG9yZV9jdXJzb3JfcG9zaXRpb24odm9pZCkKIHsKIAl1MTYgY3VycG9zOwpAQCAtMTA3LDE0NyArOTAsNiBAQAogCWJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbGluZXMgPSB5OwogfQogCi0vKiBQcm9iZSB0aGUgdmlkZW8gZHJpdmVycyBhbmQgaGF2ZSB0aGVtIGdlbmVyYXRlIHRoZWlyIG1vZGUgbGlzdHMuICovCi1zdGF0aWMgdm9pZCBwcm9iZV9jYXJkcyhpbnQgdW5zYWZlKQotewotCXN0cnVjdCBjYXJkX2luZm8gKmNhcmQ7Ci0Jc3RhdGljIHU4IHByb2JlZFsyXTsKLQotCWlmIChwcm9iZWRbdW5zYWZlXSkKLQkJcmV0dXJuOwotCi0JcHJvYmVkW3Vuc2FmZV0gPSAxOwotCi0JZm9yIChjYXJkID0gdmlkZW9fY2FyZHM7IGNhcmQgPCB2aWRlb19jYXJkc19lbmQ7IGNhcmQrKykgewotCQlpZiAoY2FyZC0+dW5zYWZlID09IHVuc2FmZSkgewotCQkJaWYgKGNhcmQtPnByb2JlKQotCQkJCWNhcmQtPm5tb2RlcyA9IGNhcmQtPnByb2JlKCk7Ci0JCQllbHNlCi0JCQkJY2FyZC0+bm1vZGVzID0gMDsKLQkJfQotCX0KLX0KLQotLyogVGVzdCBpZiBhIG1vZGUgaXMgZGVmaW5lZCAqLwotaW50IG1vZGVfZGVmaW5lZCh1MTYgbW9kZSkKLXsKLQlzdHJ1Y3QgY2FyZF9pbmZvICpjYXJkOwotCXN0cnVjdCBtb2RlX2luZm8gKm1pOwotCWludCBpOwotCi0JZm9yIChjYXJkID0gdmlkZW9fY2FyZHM7IGNhcmQgPCB2aWRlb19jYXJkc19lbmQ7IGNhcmQrKykgewotCQltaSA9IGNhcmQtPm1vZGVzOwotCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bm1vZGVzOyBpKyssIG1pKyspIHsKLQkJCWlmIChtaS0+bW9kZSA9PSBtb2RlKQotCQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFNldCBtb2RlICh3aXRob3V0IHJlY2FsYykgKi8KLXN0YXRpYyBpbnQgcmF3X3NldF9tb2RlKHUxNiBtb2RlLCB1MTYgKnJlYWxfbW9kZSkKLXsKLQlpbnQgbm1vZGUsIGk7Ci0Jc3RydWN0IGNhcmRfaW5mbyAqY2FyZDsKLQlzdHJ1Y3QgbW9kZV9pbmZvICptaTsKLQotCS8qIERyb3AgdGhlIHJlY2FsYyBiaXQgaWYgc2V0ICovCi0JbW9kZSAmPSB+VklERU9fUkVDQUxDOwotCi0JLyogU2NhbiBmb3IgbW9kZSBiYXNlZCBvbiBmaXhlZCBJRCwgcG9zaXRpb24sIG9yIHJlc29sdXRpb24gKi8KLQlubW9kZSA9IDA7Ci0JZm9yIChjYXJkID0gdmlkZW9fY2FyZHM7IGNhcmQgPCB2aWRlb19jYXJkc19lbmQ7IGNhcmQrKykgewotCQltaSA9IGNhcmQtPm1vZGVzOwotCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bm1vZGVzOyBpKyssIG1pKyspIHsKLQkJCWludCB2aXNpYmxlID0gbWktPnggfHwgbWktPnk7Ci0KLQkJCWlmICgobW9kZSA9PSBubW9kZSAmJiB2aXNpYmxlKSB8fAotCQkJICAgIG1vZGUgPT0gbWktPm1vZGUgfHwKLQkJCSAgICBtb2RlID09IChtaS0+eSA8PCA4KSttaS0+eCkgewotCQkJCSpyZWFsX21vZGUgPSBtaS0+bW9kZTsKLQkJCQlyZXR1cm4gY2FyZC0+c2V0X21vZGUobWkpOwotCQkJfQotCi0JCQlpZiAodmlzaWJsZSkKLQkJCQlubW9kZSsrOwotCQl9Ci0JfQotCi0JLyogTm90aGluZyBmb3VuZD8gIElzIGl0IGFuICJleGNlcHRpb25hbCIgKHVucHJvYmVkKSBtb2RlPyAqLwotCWZvciAoY2FyZCA9IHZpZGVvX2NhcmRzOyBjYXJkIDwgdmlkZW9fY2FyZHNfZW5kOyBjYXJkKyspIHsKLQkJaWYgKG1vZGUgPj0gY2FyZC0+eG1vZGVfZmlyc3QgJiYKLQkJICAgIG1vZGUgPCBjYXJkLT54bW9kZV9maXJzdCtjYXJkLT54bW9kZV9uKSB7Ci0JCQlzdHJ1Y3QgbW9kZV9pbmZvIG1peDsKLQkJCSpyZWFsX21vZGUgPSBtaXgubW9kZSA9IG1vZGU7Ci0JCQltaXgueCA9IG1peC55ID0gMDsKLQkJCXJldHVybiBjYXJkLT5zZXRfbW9kZSgmbWl4KTsKLQkJfQotCX0KLQotCS8qIE90aGVyd2lzZSwgZmFpbHVyZS4uLiAqLwotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIFJlY2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCB2aWRlbyBjdXRvZmYgKGhhY2shKQotICovCi1zdGF0aWMgdm9pZCB2Z2FfcmVjYWxjX3ZlcnRpY2FsKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGZvbnRfc2l6ZSwgcm93czsKLQl1MTYgY3J0YzsKLQl1OCBwdCwgb3Y7Ci0KLQlzZXRfZnMoMCk7Ci0JZm9udF9zaXplID0gcmRmczgoMHg0ODUpOyAvKiBCSU9TOiBmb250IHNpemUgKHBpeGVscykgKi8KLQlyb3dzID0gZm9yY2VfeSA/IGZvcmNlX3kgOiByZGZzOCgweDQ4NCkrMTsgLyogVGV4dCByb3dzICovCi0KLQlyb3dzICo9IGZvbnRfc2l6ZTsJLyogVmlzaWJsZSBzY2FuIGxpbmVzICovCi0Jcm93cy0tOwkJCS8qIC4uLiBtaW51cyBvbmUgKi8KLQotCWNydGMgPSB2Z2FfY3J0YygpOwotCi0JcHQgPSBpbl9pZHgoY3J0YywgMHgxMSk7Ci0JcHQgJj0gfjB4ODA7CQkvKiBVbmxvY2sgQ1IwLTcgKi8KLQlvdXRfaWR4KHB0LCBjcnRjLCAweDExKTsKLQotCW91dF9pZHgoKHU4KXJvd3MsIGNydGMsIDB4MTIpOyAvKiBMb3dlciBoZWlnaHQgcmVnaXN0ZXIgKi8KLQotCW92ID0gaW5faWR4KGNydGMsIDB4MDcpOyAvKiBPdmVyZmxvdyByZWdpc3RlciAqLwotCW92ICY9IDB4YmQ7Ci0Jb3YgfD0gKHJvd3MgPj4gKDgtMSkpICYgMHgwMjsKLQlvdiB8PSAocm93cyA+PiAoOS02KSkgJiAweDQwOwotCW91dF9pZHgob3YsIGNydGMsIDB4MDcpOwotfQotCi0vKiBTZXQgbW9kZSAod2l0aCByZWNhbGMgaWYgc3BlY2lmaWVkKSAqLwotc3RhdGljIGludCBzZXRfbW9kZSh1MTYgbW9kZSkKLXsKLQlpbnQgcnY7Ci0JdTE2IHJlYWxfbW9kZTsKLQotCS8qIFZlcnkgc3BlY2lhbCBtb2RlIG51bWJlcnMuLi4gKi8KLQlpZiAobW9kZSA9PSBWSURFT19DVVJSRU5UX01PREUpCi0JCXJldHVybiAwOwkvKiBOb3RoaW5nIHRvIGRvLi4uICovCi0JZWxzZSBpZiAobW9kZSA9PSBOT1JNQUxfVkdBKQotCQltb2RlID0gVklERU9fODB4MjU7Ci0JZWxzZSBpZiAobW9kZSA9PSBFWFRFTkRFRF9WR0EpCi0JCW1vZGUgPSBWSURFT184UE9JTlQ7Ci0KLQlydiA9IHJhd19zZXRfbW9kZShtb2RlLCAmcmVhbF9tb2RlKTsKLQlpZiAocnYpCi0JCXJldHVybiBydjsKLQotCWlmIChtb2RlICYgVklERU9fUkVDQUxDKQotCQl2Z2FfcmVjYWxjX3ZlcnRpY2FsKCk7Ci0KLQkvKiBTYXZlIHRoZSBjYW5vbmljYWwgbW9kZSBudW1iZXIgZm9yIHRoZSBrZXJuZWwsIG5vdAotCSAgIGFuIGFsaWFzLCBzaXplIHNwZWNpZmljYXRpb24gb3IgbWVudSBwb3NpdGlvbiAqLwotCWJvb3RfcGFyYW1zLmhkci52aWRfbW9kZSA9IHJlYWxfbW9kZTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfZW50cnkodm9pZCkKIHsKIAljaGFyIGVudHJ5X2J1Zls0XTsKQEAgLTQ4Niw2ICszMjgsNyBAQAogCQlwcmludGYoIlVuZGVmaW5lZCB2aWRlbyBtb2RlIG51bWJlcjogJXhcbiIsIG1vZGUpOwogCQltb2RlID0gQVNLX1ZHQTsKIAl9CisJYm9vdF9wYXJhbXMuaGRyLnZpZF9tb2RlID0gbW9kZTsKIAl2ZXNhX3N0b3JlX2VkaWQoKTsKIAlzdG9yZV9tb2RlX3BhcmFtcygpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmggYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmgKaW5kZXggZDY5MzQ3Zi4uZWU2M2Y1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5oCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uaApAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC92aWRlby5oCi0gKgogICogSGVhZGVyIGZpbGUgZm9yIHRoZSByZWFsLW1vZGUgdmlkZW8gcHJvYmluZyBjb2RlCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92b3lhZ2VyLmMgYi9hcmNoL3g4Ni9ib290L3ZveWFnZXIuYwppbmRleCA2NDk5ZTMyLi40MzM5MDlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZveWFnZXIuYworKysgYi9hcmNoL3g4Ni9ib290L3ZveWFnZXIuYwpAQCAtOSw4ICs5LDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCi0gKiBhcmNoL2kzODYvYm9vdC92b3lhZ2VyLmMKLSAqCiAgKiBHZXQgdGhlIFZveWFnZXIgY29uZmlnIGluZm9ybWF0aW9uCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TIGIvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TCmluZGV4IDEwOTNiZWQuLmU0MWIxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMKQEAgLTI4OSw3ICsyODksNiBAQAogCXBvcCAgICAgJWVieAogCW1vdiAgICAgJXIwLCglZWJwKQogCXBvcCAgICAgJWVicAotCW1vdiAgICAgJDEsJWVheAogCXJldAogCiAvLyBBRVMgKFJpam5kYWVsKSBEZWNyeXB0aW9uIFN1YnJvdXRpbmUKQEAgLTM2NSw2ICszNjQsNCBAQAogCXBvcCAgICAgJWVieAogCW1vdiAgICAgJXIwLCglZWJwKQogCXBvcCAgICAgJWVicAotCW1vdiAgICAgJDEsJWVheAogCXJldAotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJfc2lnbmFsLmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfc2lnbmFsLmMKaW5kZXggMWMwNTAzYi4uMDVlMTU1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyX3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMl9zaWduYWwuYwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAJCXJlc3RvcmVyID0ga2EtPnNhLnNhX3Jlc3RvcmVyOwogCX0gZWxzZSB7CiAJCS8qIFJldHVybiBzdHViIGlzIGluIDMyYml0IHZzeXNjYWxsIHBhZ2UgKi8KLQkJaWYgKGN1cnJlbnQtPmJpbmZtdC0+aGFzdmRzbykKKwkJaWYgKGN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc28pCiAJCQlyZXN0b3JlciA9IFZEU08zMl9TWU1CT0woY3VycmVudC0+bW0tPmNvbnRleHQudmRzbywKIAkJCQkJCSBzaWdyZXR1cm4pOwogCQllbHNlCkBAIC01MDAsNyArNTAwLDcgQEAKIAlyZWdzLT5zcyA9IF9fVVNFUjMyX0RTOwogCiAJc2V0X2ZzKFVTRVJfRFMpOwotCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOworCXJlZ3MtPmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfREYpOwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKIAkJcHRyYWNlX25vdGlmeShTSUdUUkFQKTsKIApAQCAtNjAwLDcgKzYwMCw3IEBACiAJcmVncy0+c3MgPSBfX1VTRVIzMl9EUzsKIAogCXNldF9mcyhVU0VSX0RTKTsKLQlyZWdzLT5mbGFncyAmPSB+WDg2X0VGTEFHU19URjsKKwlyZWdzLT5mbGFncyAmPSB+KFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX0RGKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpCiAJCXB0cmFjZV9ub3RpZnkoU0lHVFJBUCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDgwMjJkM2MuLmFlNzE1OGJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTE2MiwxMiArMTYyLDE0IEBACiAJU0FWRV9SRVNUCiAJQ0xFQVJfUlJFR1MKIAltb3ZxCSVyOSxSOSglcnNwKQotCW1vdnEJJC1FTk9TWVMsUkFYKCVyc3ApCS8qIHJlYWxseSBuZWVkZWQ/ICovCisJbW92cQkkLUVOT1NZUyxSQVgoJXJzcCkvKiBwdHJhY2UgY2FuIGNoYW5nZSB0aGlzIGZvciBhIGJhZCBzeXNjYWxsICovCiAJbW92cQklcnNwLCVyZGkgICAgICAgIC8qICZwdF9yZWdzIC0+IGFyZzEgKi8KIAljYWxsCXN5c2NhbGxfdHJhY2VfZW50ZXIKIAlMT0FEX0FSR1MzMiBBUkdPRkZTRVQgIC8qIHJlbG9hZCBhcmdzIGZyb20gc3RhY2sgaW4gY2FzZSBwdHJhY2UgY2hhbmdlZCBpdCAqLwogCVJFU1RPUkVfUkVTVAogCXhjaGdsCSVlYnAsJXI5ZAorCWNtcGwJJChJQTMyX05SX3N5c2NhbGxzLTEpLCVlYXgKKwlqYQlpbnRfcmV0X2Zyb21fc3lzX2NhbGwgLyogc3lzZW50ZXJfdHJhY2VzeXMgaGFzIHNldCBSQVgoJXJzcCkgKi8KIAlqbXAJc3lzZW50ZXJfZG9fY2FsbAogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKGlhMzJfc3lzZW50ZXJfdGFyZ2V0KQpAQCAtMjYxLDEzICsyNjMsMTUgQEAKIAlTQVZFX1JFU1QKIAlDTEVBUl9SUkVHUwogCW1vdnEgJXI5LFI5KCVyc3ApCi0JbW92cSAkLUVOT1NZUyxSQVgoJXJzcCkJLyogcmVhbGx5IG5lZWRlZD8gKi8KKwltb3ZxICQtRU5PU1lTLFJBWCglcnNwKQkvKiBwdHJhY2UgY2FuIGNoYW5nZSB0aGlzIGZvciBhIGJhZCBzeXNjYWxsICovCiAJbW92cSAlcnNwLCVyZGkgICAgICAgIC8qICZwdF9yZWdzIC0+IGFyZzEgKi8KIAljYWxsIHN5c2NhbGxfdHJhY2VfZW50ZXIKIAlMT0FEX0FSR1MzMiBBUkdPRkZTRVQgIC8qIHJlbG9hZCBhcmdzIGZyb20gc3RhY2sgaW4gY2FzZSBwdHJhY2UgY2hhbmdlZCBpdCAqLwogCVJFU1RPUkVfUkVTVAogCXhjaGdsICVlYnAsJXI5ZAogCW1vdmwgUlNQLUFSR09GRlNFVCglcnNwKSwgJXI4ZAorCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzLTEpLCVlYXgKKwlqYSBpbnRfcmV0X2Zyb21fc3lzX2NhbGwgLyogY3N0YXJfdHJhY2VzeXMgaGFzIHNldCBSQVgoJXJzcCkgKi8KIAlqbXAgY3N0YXJfZG9fY2FsbAogRU5EKGlhMzJfY3N0YXJfdGFyZ2V0KQogCQkJCQpAQCAtMzI1LDcgKzMyOSw3IEBACiAJam56IGlhMzJfdHJhY2VzeXMKIGlhMzJfZG9fc3lzY2FsbDoJCiAJY21wbCAkKElBMzJfTlJfc3lzY2FsbHMtMSksJWVheAotCWphICBpYTMyX2JhZHN5cworCWphICBpbnRfcmV0X2Zyb21fc3lzX2NhbGwJLyogaWEzMl90cmFjZXN5cyBoYXMgc2V0IFJBWCglcnNwKSAqLwogCUlBMzJfQVJHX0ZJWFVQCiAJY2FsbCAqaWEzMl9zeXNfY2FsbF90YWJsZSgsJXJheCw4KSAjIHh4eDogcmlwIHJlbGF0aXZlCiBpYTMyX3N5c3JldDoKQEAgLTMzNSw3ICszMzksNyBAQAogaWEzMl90cmFjZXN5czoJCQkgCiAJU0FWRV9SRVNUCiAJQ0xFQVJfUlJFR1MKLQltb3ZxICQtRU5PU1lTLFJBWCglcnNwKQkvKiByZWFsbHkgbmVlZGVkPyAqLworCW1vdnEgJC1FTk9TWVMsUkFYKCVyc3ApCS8qIHB0cmFjZSBjYW4gY2hhbmdlIHRoaXMgZm9yIGEgYmFkIHN5c2NhbGwgKi8KIAltb3ZxICVyc3AsJXJkaSAgICAgICAgLyogJnB0X3JlZ3MgLT4gYXJnMSAqLwogCWNhbGwgc3lzY2FsbF90cmFjZV9lbnRlcgogCUxPQURfQVJHUzMyIEFSR09GRlNFVCAgLyogcmVsb2FkIGFyZ3MgZnJvbSBzdGFjayBpbiBjYXNlIHB0cmFjZSBjaGFuZ2VkIGl0ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKaW5kZXggYWJmNzFkMi4uZjAwYWZkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYwpAQCAtMjYsNTEgKzI2LDI2IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lcy5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L21zZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2htLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgotI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2QvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnNkL3hkci5oPgotI2luY2x1ZGUgPGxpbnV4L25mc2Qvc3lzY2FsbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcGMuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxhc20vbW1hbi5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vbGR0Lmg+Ci0KLSNpbmNsdWRlIDxuZXQvc2NtLmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxhc20vaWEzMi5oPgorI2luY2x1ZGUgPGFzbS92Z3RvZC5oPgogCiAjZGVmaW5lIEFBKF9feCkJCSgodW5zaWduZWQgbG9uZykoX194KSkKIApAQCAtODA0LDExICs3NzksNiBAQAogCWlmIChJU19FUlIoZmlsZW5hbWUpKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSBjb21wYXRfZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKLQlpZiAoZXJyb3IgPT0gMCkgewotCQl0YXNrX2xvY2soY3VycmVudCk7Ci0JCWN1cnJlbnQtPnB0cmFjZSAmPSB+UFRfRFRSQUNFOwotCQl0YXNrX3VubG9jayhjdXJyZW50KTsKLQl9CiAJcHV0bmFtZShmaWxlbmFtZSk7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDc2ZWMwZjguLjkwZTA5MmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTIsMjUgKzIsMzQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCiAKLWV4dHJhLXkgICAgICAgICAgICAgICAgOj0gaGVhZF8kKEJJVFMpLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKLWV4dHJhLSQoQ09ORklHX1g4Nl82NCkgKz0gaGVhZDY0Lm8KK2V4dHJhLXkgICAgICAgICAgICAgICAgOj0gaGVhZF8kKEJJVFMpLm8gaGVhZCQoQklUUykubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBDUFBGTEFHU192bWxpbnV4LmxkcyArPSAtVSQoVVRTX01BQ0hJTkUpCi1DRkxBR1NfdnN5c2NhbGxfNjQubyA6PSAkKFBST0ZJTElORykgLWcwCisKKyMKKyMgdnN5c2NhbGxzICh3aGljaCB3b3JrIG9uIHRoZSB1c2VyIHN0YWNrKSBzaG91bGQgaGF2ZQorIyBubyBzdGFjay1wcm90ZWN0b3IgY2hlY2tzOgorIworbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCitDRkxBR1NfdnN5c2NhbGxfNjQubwk6PSAkKFBST0ZJTElORykgLWcwICQobm9zdGFja3ApCitDRkxBR1NfaHBldC5vCQk6PSAkKG5vc3RhY2twKQorQ0ZMQUdTX3RzY182NC5vCQk6PSAkKG5vc3RhY2twKQogCiBvYmoteQkJCTo9IHByb2Nlc3NfJChCSVRTKS5vIHNpZ25hbF8kKEJJVFMpLm8gZW50cnlfJChCSVRTKS5vCiBvYmoteQkJCSs9IHRyYXBzXyQoQklUUykubyBpcnFfJChCSVRTKS5vCiBvYmoteQkJCSs9IHRpbWVfJChCSVRTKS5vIGlvcG9ydC5vIGxkdC5vCi1vYmoteQkJCSs9IHNldHVwXyQoQklUUykubyBpODI1OV8kKEJJVFMpLm8KK29iai15CQkJKz0gc2V0dXBfJChCSVRTKS5vIGk4MjU5XyQoQklUUykubyBzZXR1cC5vCiBvYmotJChDT05GSUdfWDg2XzMyKQkrPSBzeXNfaTM4Nl8zMi5vIGkzODZfa3N5bXNfMzIubwogb2JqLSQoQ09ORklHX1g4Nl82NCkJKz0gc3lzX3g4Nl82NC5vIHg4NjY0X2tzeW1zXzY0Lm8KIG9iai0kKENPTkZJR19YODZfNjQpCSs9IHN5c2NhbGxfNjQubyB2c3lzY2FsbF82NC5vIHNldHVwNjQubwotb2JqLXkJCQkrPSBwY2ktZG1hXyQoQklUUykubyAgYm9vdGZsYWcubyBlODIwXyQoQklUUykubwotb2JqLXkJCQkrPSBxdWlya3MubyBpODIzNy5vIHRvcG9sb2d5Lm8ga2RlYnVnZnMubwotb2JqLXkJCQkrPSBhbHRlcm5hdGl2ZS5vIGk4MjUzLm8KLW9iai0kKENPTkZJR19YODZfNjQpCSs9IHBjaS1ub21tdV82NC5vIGJ1Z3NfNjQubworb2JqLXkJCQkrPSBib290ZmxhZy5vIGU4MjBfJChCSVRTKS5vCitvYmoteQkJCSs9IHBjaS1kbWEubyBxdWlya3MubyBpODIzNy5vIHRvcG9sb2d5Lm8ga2RlYnVnZnMubworb2JqLXkJCQkrPSBhbHRlcm5hdGl2ZS5vIGk4MjUzLm8gcGNpLW5vbW11Lm8KK29iai0kKENPTkZJR19YODZfNjQpCSs9IGJ1Z3NfNjQubwogb2JqLXkJCQkrPSB0c2NfJChCSVRTKS5vIGlvX2RlbGF5Lm8gcnRjLm8KIAorb2JqLSQoQ09ORklHX1g4Nl9UUkFNUE9MSU5FKQkrPSB0cmFtcG9saW5lLm8KK29iai15CQkJCSs9IHByb2Nlc3Mubwogb2JqLXkJCQkJKz0gaTM4Ny5vCiBvYmoteQkJCQkrPSBwdHJhY2Uubwogb2JqLXkJCQkJKz0gZHMubwpAQCAtMzksMTEgKzQ4LDEyIEBACiBvYmotJChDT05GSUdfUENJKQkJKz0gZWFybHktcXVpcmtzLm8KIGFwbS15CQkJCTo9IGFwbV8zMi5vCiBvYmotJChDT05GSUdfQVBNKQkJKz0gYXBtLm8KLW9iai0kKENPTkZJR19YODZfU01QKQkJKz0gc21wXyQoQklUUykubyBzbXBib290XyQoQklUUykubyB0c2Nfc3luYy5vCi1vYmotJChDT05GSUdfWDg2XzMyX1NNUCkJKz0gc21wY29tbW9uXzMyLm8KLW9iai0kKENPTkZJR19YODZfNjRfU01QKQkrPSBzbXBfNjQubyBzbXBib290XzY0Lm8gdHNjX3N5bmMubworb2JqLSQoQ09ORklHX1g4Nl9TTVApCQkrPSBzbXAubworb2JqLSQoQ09ORklHX1g4Nl9TTVApCQkrPSBzbXBib290Lm8gdHNjX3N5bmMubyBpcGkubyB0bGJfJChCSVRTKS5vCitvYmotJChDT05GSUdfWDg2XzMyX1NNUCkJKz0gc21wY29tbW9uLm8KK29iai0kKENPTkZJR19YODZfNjRfU01QKQkrPSB0c2Nfc3luYy5vIHNtcGNvbW1vbi5vCiBvYmotJChDT05GSUdfWDg2X1RSQU1QT0xJTkUpCSs9IHRyYW1wb2xpbmVfJChCSVRTKS5vCi1vYmotJChDT05GSUdfWDg2X01QUEFSU0UpCSs9IG1wcGFyc2VfJChCSVRTKS5vCitvYmotJChDT05GSUdfWDg2X01QUEFSU0UpCSs9IG1wcGFyc2Uubwogb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljXyQoQklUUykubyBubWlfJChCSVRTKS5vCiBvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWNfJChCSVRTKS5vCiBvYmotJChDT05GSUdfWDg2X1JFQk9PVEZJWFVQUykJKz0gcmVib290X2ZpeHVwc18zMi5vCkBAIC01MiwxMiArNjIsMTMgQEAKIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wXyQoQklUUykubwogb2JqLSQoQ09ORklHX1g4Nl9OVU1BUSkJCSs9IG51bWFxXzMyLm8KIG9iai0kKENPTkZJR19YODZfU1VNTUlUX05VTUEpCSs9IHN1bW1pdF8zMi5vCi1vYmotJChDT05GSUdfWDg2X1ZTTVApCQkrPSB2c21wXzY0Lm8KK29iai15CQkJCSs9IHZzbXBfNjQubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlXyQoQklUUykubwogb2JqLSQoQ09ORklHX0FDUElfU1JBVCkgCSs9IHNyYXRfMzIubwogb2JqLSQoQ09ORklHX0VGSSkgCQkrPSBlZmkubyBlZmlfJChCSVRTKS5vIGVmaV9zdHViXyQoQklUUykubwogb2JqLSQoQ09ORklHX0RPVUJMRUZBVUxUKSAJKz0gZG91YmxlZmF1bHRfMzIubworb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KIG9iai0kKENPTkZJR19WTTg2KQkJKz0gdm04Nl8zMi5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubwogCkBAIC04MSw3ICs5Miw3IEBACiAjIyMKICMgNjQgYml0IHNwZWNpZmljIGZpbGVzCiBpZmVxICgkKENPTkZJR19YODZfNjQpLHkpCi0gICAgICAgIG9iai15CQkJCSs9IGdlbmFwaWNfNjQubyBnZW5hcGljX2ZsYXRfNjQubworICAgICAgICBvYmoteQkJCQkrPSBnZW5hcGljXzY0Lm8gZ2VuYXBpY19mbGF0XzY0Lm8gZ2VueDJhcGljX3V2X3gubwogICAgICAgICBvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBwbXRpbWVyXzY0Lm8KICAgICAgICAgb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXRfNjQubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL01ha2VmaWxlCmluZGV4IDE5ZDNkNmUuLjczMzU5NTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL01ha2VmaWxlCkBAIC0xLDcgKzEsMTQgQEAKK3N1YmRpci0JCQkJOj0gcmVhbG1vZGUKKwogb2JqLSQoQ09ORklHX0FDUEkpCQkrPSBib290Lm8KLW9iai0kKENPTkZJR19BQ1BJX1NMRUVQKQkrPSBzbGVlcC5vIHdha2V1cF8kKEJJVFMpLm8KK29iai0kKENPTkZJR19BQ1BJX1NMRUVQKQkrPSBzbGVlcC5vIHdha2V1cF9ybS5vIHdha2V1cF8kKEJJVFMpLm8KIAogaWZuZXEgKCQoQ09ORklHX0FDUElfUFJPQ0VTU09SKSwpCiBvYmoteQkJCQkrPSBjc3RhdGUubyBwcm9jZXNzb3IubwogZW5kaWYKIAorJChvYmopL3dha2V1cF9ybS5vOiAgICAkKG9iaikvcmVhbG1vZGUvd2FrZXVwLmJpbgorCiskKG9iaikvcmVhbG1vZGUvd2FrZXVwLmJpbjogRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvcmVhbG1vZGUgJEAKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IDY4MGI3MzAuLjA1N2NjZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTM5LDYgKzM5LDExIEBACiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisjIGluY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBhY3BpX2ZvcmNlID0gMDsKIApAQCAtNTIsOSArNTcsNyBAQAogI2lmZGVmCUNPTkZJR19YODZfNjQKIAogI2luY2x1ZGUgPGFzbS9wcm90by5oPgotCi1zdGF0aWMgaW5saW5lIGludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKSB7IHJldHVybiAwOyB9Ci0KKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgogCiAjZWxzZQkJCQkvKiBYODYgKi8KIApAQCAtNzIsNyArNzUsOCBAQAogI2RlZmluZSBQUkVGSVgJCQkiQUNQSTogIgogCiBpbnQgYWNwaV9ub2lycTsJCQkJLyogc2tpcCBBQ1BJIElSUSBpbml0aWFsaXphdGlvbiAqLwotaW50IGFjcGlfcGNpX2Rpc2FibGVkIF9faW5pdGRhdGE7CS8qIHNraXAgQUNQSSBQQ0kgc2NhbiBhbmQgSVJRIGluaXRpYWxpemF0aW9uICovCitpbnQgYWNwaV9wY2lfZGlzYWJsZWQ7CQkvKiBza2lwIEFDUEkgUENJIHNjYW4gYW5kIElSUSBpbml0aWFsaXphdGlvbiAqLworRVhQT1JUX1NZTUJPTChhY3BpX3BjaV9kaXNhYmxlZCk7CiBpbnQgYWNwaV9odCBfX2luaXRkYXRhID0gMTsJLyogZW5hYmxlIEhUICovCiAKIGludCBhY3BpX2xhcGljOwpAQCAtMTEwLDcgKzExNCw3IEBACiAJaWYgKCFwaHlzX2FkZHIgfHwgIXNpemUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKHBoeXNfYWRkcitzaXplIDw9IChlbmRfcGZuX21hcCA8PCBQQUdFX1NISUZUKSArIFBBR0VfU0laRSkKKwlpZiAocGh5c19hZGRyK3NpemUgPD0gKG1heF9wZm5fbWFwcGVkIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9TSVpFKQogCQlyZXR1cm4gX192YShwaHlzX2FkZHIpOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0yMzYsNiArMjQwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBhY3BpX3JlZ2lzdGVyX2xhcGljKGludCBpZCwgdTggZW5hYmxlZCkKK3sKKwlpZiAoIWVuYWJsZWQpIHsKKwkJKytkaXNhYmxlZF9jcHVzOworCQlyZXR1cm47CisJfQorCisJZ2VuZXJpY19wcm9jZXNzb3JfaW5mbyhpZCwgMCk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0CiBhY3BpX3BhcnNlX2xhcGljKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqIGhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC0yNTUsOCArMjY5LDI2IEBACiAJICogdG8gbm90IHByZWFsbG9jYXRpbmcgbWVtb3J5IGZvciBhbGwgTlJfQ1BVUwogCSAqIHdoZW4gd2UgdXNlIENQVSBob3RwbHVnLgogCSAqLwotCW1wX3JlZ2lzdGVyX2xhcGljKHByb2Nlc3Nvci0+aWQsCS8qIEFQSUMgSUQgKi8KLQkJCSAgcHJvY2Vzc29yLT5sYXBpY19mbGFncyAmIEFDUElfTUFEVF9FTkFCTEVEKTsJLyogRW5hYmxlZD8gKi8KKwlhY3BpX3JlZ2lzdGVyX2xhcGljKHByb2Nlc3Nvci0+aWQsCS8qIEFQSUMgSUQgKi8KKwkJCSAgICBwcm9jZXNzb3ItPmxhcGljX2ZsYWdzICYgQUNQSV9NQURUX0VOQUJMRUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CithY3BpX3BhcnNlX3NhcGljKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLCBjb25zdCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3NhcGljICpwcm9jZXNzb3IgPSBOVUxMOworCisJcHJvY2Vzc29yID0gKHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfc2FwaWMgKiloZWFkZXI7CisKKwlpZiAoQkFEX01BRFRfRU5UUlkocHJvY2Vzc29yLCBlbmQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjcGlfdGFibGVfcHJpbnRfbWFkdF9lbnRyeShoZWFkZXIpOworCisJYWNwaV9yZWdpc3Rlcl9sYXBpYygocHJvY2Vzc29yLT5pZCA8PCA4KSB8IHByb2Nlc3Nvci0+ZWlkLC8qIEFQSUMgSUQgKi8KKwkJCSAgICBwcm9jZXNzb3ItPmxhcGljX2ZsYWdzICYgQUNQSV9NQURUX0VOQUJMRUQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTksNiArMzMxLDggQEAKIAogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCitzdHJ1Y3QgbXBfaW9hcGljX3JvdXRpbmcgbXBfaW9hcGljX3JvdXRpbmdbTUFYX0lPX0FQSUNTXTsKKwogc3RhdGljIGludCBfX2luaXQKIGFjcGlfcGFyc2VfaW9hcGljKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqIGhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC01MzEsNyArNTY1LDcgQEAKIAlidWZmZXIucG9pbnRlciA9IE5VTEw7CiAKIAl0bXBfbWFwID0gY3B1X3ByZXNlbnRfbWFwOwotCW1wX3JlZ2lzdGVyX2xhcGljKHBoeXNpZCwgbGFwaWMtPmxhcGljX2ZsYWdzICYgQUNQSV9NQURUX0VOQUJMRUQpOworCWFjcGlfcmVnaXN0ZXJfbGFwaWMocGh5c2lkLCBsYXBpYy0+bGFwaWNfZmxhZ3MgJiBBQ1BJX01BRFRfRU5BQkxFRCk7CiAKIAkvKgogCSAqIElmIG1wX3JlZ2lzdGVyX2xhcGljIHN1Y2Nlc3NmdWxseSBnZW5lcmF0ZXMgYSBuZXcgbG9naWNhbCBjcHUKQEAgLTczMSw2ICs3NjUsMTYgQEAKICAqIFBhcnNlIExBUElDIGVudHJpZXMgaW4gTUFEVAogICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvcgogICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3BpX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCW1wX2xhcGljX2FkZHIgPSBhZGRyZXNzOworCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFkZHJlc3MpOworCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKQorCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgID0gR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX21hZHRfbGFwaWNfZW50cmllcyh2b2lkKQogewogCWludCBjb3VudDsKQEAgLTc1MiwxMCArNzk2LDE0IEBACiAJCXJldHVybiBjb3VudDsKIAl9CiAKLQltcF9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzKGFjcGlfbGFwaWNfYWRkcik7CisJYWNwaV9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzKGFjcGlfbGFwaWNfYWRkcik7CiAKLQljb3VudCA9IGFjcGlfdGFibGVfcGFyc2VfbWFkdChBQ1BJX01BRFRfVFlQRV9MT0NBTF9BUElDLCBhY3BpX3BhcnNlX2xhcGljLAotCQkJCSAgICAgIE1BWF9BUElDUyk7CisJY291bnQgPSBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfTE9DQUxfU0FQSUMsCisJCQkJICAgICAgYWNwaV9wYXJzZV9zYXBpYywgTUFYX0FQSUNTKTsKKworCWlmICghY291bnQpCisJCWNvdW50ID0gYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUMsCisJCQkJCSAgICAgIGFjcGlfcGFyc2VfbGFwaWMsIE1BWF9BUElDUyk7CiAJaWYgKCFjb3VudCkgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJObyBMQVBJQyBlbnRyaWVzIHByZXNlbnRcbiIpOwogCQkvKiBUQkQ6IENsZWFudXAgdG8gYWxsb3cgZmFsbGJhY2sgdG8gTVBTICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCmluZGV4IDhjYTM1NTcuLmMyNTAyZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvaTM4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwotICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgogICogCVZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgogICogCS0gQWRkZWQgX1BEQyBmb3IgU01QIEMtc3RhdGVzIG9uIEludGVsIENQVXMKQEAgLTkzLDcgKzkxLDcgQEAKIAogCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBvbiByaWdodCBDUFUgKi8KIAlzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXJldHZhbCA9IHNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7CisJcmV0dmFsID0gc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiAtMTsKIApAQCAtMTMwLDcgKzEyOCw3IEBACiAJCSBjeC0+YWRkcmVzcyk7CiAKIG91dDoKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNhdmVkX21hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZzYXZlZF9tYXNrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9wcm9jZXNzb3JfZmZoX2NzdGF0ZV9wcm9iZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jCmluZGV4IDMyNGViMGMuLmRlMmQyZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvaTM4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYwotICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbgogICogCVZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgogICogCS0gQWRkZWQgX1BEQyBmb3IgcGxhdGZvcm1zIHdpdGggSW50ZWwgQ1BVcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTI5MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvTWFrZWZpbGUKQEAgLTAsMCArMSw1NyBAQAorIworIyBhcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS9NYWtlZmlsZQorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisKK3RhcmdldHMJCTo9IHdha2V1cC5iaW4gd2FrZXVwLmVsZgorCit3YWtldXAteQkrPSB3YWtldXAubyB3YWtlbWFpbi5vIHZpZGVvLW1vZGUubyBjb3B5Lm8KKworIyBUaGUgbGluayBvcmRlciBvZiB0aGUgdmlkZW8tKi5vIG1vZHVsZXMgY2FuIG1hdHRlci4gIEluIHBhcnRpY3VsYXIsCisjIHZpZGVvLXZnYS5vICptdXN0KiBiZSBsaXN0ZWQgZmlyc3QsIGZvbGxvd2VkIGJ5IHZpZGVvLXZlc2Euby4KKyMgSGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBzaG91bGQgZm9sbG93IGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZQorIyBwcm9iZWQsIGFuZCB2aWRlby1iaW9zLm8gc2hvdWxkIHR5cGljYWxseSBiZSBsYXN0Lgord2FrZXVwLXkJKz0gdmlkZW8tdmdhLm8KK3dha2V1cC15CSs9IHZpZGVvLXZlc2Eubword2FrZXVwLXkJKz0gdmlkZW8tYmlvcy5vCisKK3RhcmdldHMJCSs9ICQod2FrZXVwLXkpCisKK2Jvb3RzcmMJCTo9ICQoc3JjKS8uLi8uLi8uLi9ib290CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSG93IHRvIGNvbXBpbGUgdGhlIDE2LWJpdCBjb2RlLiAgTm90ZSB3ZSBhbHdheXMgY29tcGlsZSBmb3IgLW1hcmNoPWkzODYsCisjIHRoYXQgd2F5IHdlIGNhbiBjb21wbGFpbiB0byB0aGUgdXNlciBpZiB0aGUgQ1BVIGlzIGluc3VmZmljaWVudC4KKyMgQ29tcGlsZSB3aXRoIF9TRVRVUCBzaW5jZSB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIGJvb3QtdGltZSBzZXR1cCBjb2RlLgorS0JVSUxEX0NGTEFHUwk6PSAkKExJTlVYSU5DTFVERSkgLWcgLU9zIC1EX1NFVFVQIC1EX1dBS0VVUCAtRF9fS0VSTkVMX18gXAorCQkgICAtSSQoc3JjdHJlZSkvJChib290c3JjKSBcCisJCSAgICQoY2ZsYWdzLXkpIFwKKwkJICAgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyBcCisJCSAgIC1tYXJjaD1pMzg2IC1tcmVncGFybT0zIFwKKwkJICAgLWluY2x1ZGUgJChzcmN0cmVlKS8kKGJvb3RzcmMpL2NvZGUxNmdjYy5oIFwKKwkJICAgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZvbWl0LWZyYW1lLXBvaW50ZXIgXAorCQkgICAkKGNhbGwgY2Mtb3B0aW9uLCAtZmZyZWVzdGFuZGluZykgXAorCQkgICAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXRvcGxldmVsLXJlb3JkZXIsXAorCQkJJChjYWxsIGNjLW9wdGlvbiwgLWZuby11bml0LWF0LWEtdGltZSkpIFwKKwkJICAgJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpIFwKKwkJICAgJChjYWxsIGNjLW9wdGlvbiwgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MikKK0tCVUlMRF9DRkxBR1MJKz0gJChjYWxsIGNjLW9wdGlvbiwgLW0zMikKK0tCVUlMRF9BRkxBR1MJOj0gJChLQlVJTERfQ0ZMQUdTKSAtRF9fQVNTRU1CTFlfXworCitXQUtFVVBfT0JKUyA9ICQoYWRkcHJlZml4ICQob2JqKS8sJCh3YWtldXAteSkpCisKK0xERkxBR1Nfd2FrZXVwLmVsZgk6PSAtVAorCitDUFBGTEFHU193YWtldXAubGRzICs9IC1QIC1DCisKKyQob2JqKS93YWtldXAuZWxmOiAkKHNyYykvd2FrZXVwLmxkcyAkKFdBS0VVUF9PQkpTKSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQorCitPQkpDT1BZRkxBR1Nfd2FrZXVwLmJpbgk6PSAtTyBiaW5hcnkKKworJChvYmopL3dha2V1cC5iaW46ICQob2JqKS93YWtldXAuZWxmIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL2NvcHkuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL2NvcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzU5ZWJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvY29weS5TCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi9ib290L2NvcHkuUyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLWJpb3MuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLWJpb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGVhYmMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvdmlkZW8tYmlvcy5jCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi9ib290L3ZpZGVvLWJpb3MuYyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLW1vZGUuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLW1vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjhhZDIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvdmlkZW8tbW9kZS5jCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi9ib290L3ZpZGVvLW1vZGUuYyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLXZlc2EuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLXZlc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGJiOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvdmlkZW8tdmVzYS5jCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi9ib290L3ZpZGVvLXZlc2EuYyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLXZnYS5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvdmlkZW8tdmdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjODEyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3ZpZGVvLXZnYS5jCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi9ib290L3ZpZGVvLXZnYS5jIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZW1haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2VtYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzOTYyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2VtYWluLmMKQEAgLTAsMCArMSw4MSBAQAorI2luY2x1ZGUgIndha2V1cC5oIgorI2luY2x1ZGUgImJvb3QuaCIKKworc3RhdGljIHZvaWQgdWRlbGF5KGludCBsb29wcykKK3sKKwl3aGlsZSAobG9vcHMtLSkKKwkJaW9fZGVsYXkoKTsJLyogQXBwcm94aW1hdGVseSAxIHVzICovCit9CisKK3N0YXRpYyB2b2lkIGJlZXAodW5zaWduZWQgaW50IGh6KQoreworCXU4IGVuYWJsZTsKKworCWlmICghaHopIHsKKwkJZW5hYmxlID0gMHgwMDsJCS8qIFR1cm4gb2ZmIHNwZWFrZXIgKi8KKwl9IGVsc2UgeworCQl1MTYgZGl2ID0gMTE5MzE4MS9oejsKKworCQlvdXRiKDB4YjYsIDB4NDMpOwkvKiBDdHIgMiwgc3F1YXJld2F2ZSwgbG9hZCwgYmluYXJ5ICovCisJCWlvX2RlbGF5KCk7CisJCW91dGIoZGl2LCAweDQyKTsJLyogTFNCIG9mIGNvdW50ZXIgKi8KKwkJaW9fZGVsYXkoKTsKKwkJb3V0YihkaXYgPj4gOCwgMHg0Mik7CS8qIE1TQiBvZiBjb3VudGVyICovCisJCWlvX2RlbGF5KCk7CisKKwkJZW5hYmxlID0gMHgwMzsJCS8qIFR1cm4gb24gc3BlYWtlciAqLworCX0KKwlpbmIoMHg2MSk7CQkvKiBEdW1teSByZWFkIG9mIFN5c3RlbSBDb250cm9sIFBvcnQgQiAqLworCWlvX2RlbGF5KCk7CisJb3V0YihlbmFibGUsIDB4NjEpOwkvKiBFbmFibGUgdGltZXIgMiBvdXRwdXQgdG8gc3BlYWtlciAqLworCWlvX2RlbGF5KCk7Cit9CisKKyNkZWZpbmUgRE9UX0haCQk4ODAKKyNkZWZpbmUgREFTSF9IWgkJNTg3CisjZGVmaW5lIFVTX1BFUl9ET1QJMTI1MDAwCisKKy8qIE9rYXksIHRoaXMgaXMgdG90YWxseSBzaWxseSwgYnV0IGl0J3Mga2luZCBvZiBmdW4uICovCitzdGF0aWMgdm9pZCBzZW5kX21vcnNlKGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJY2hhciBzOworCisJd2hpbGUgKChzID0gKnBhdHRlcm4rKykpIHsKKwkJc3dpdGNoIChzKSB7CisJCWNhc2UgJy4nOgorCQkJYmVlcChET1RfSFopOworCQkJdWRlbGF5KFVTX1BFUl9ET1QpOworCQkJYmVlcCgwKTsKKwkJCXVkZWxheShVU19QRVJfRE9UKTsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCWJlZXAoREFTSF9IWik7CisJCQl1ZGVsYXkoVVNfUEVSX0RPVCAqIDMpOworCQkJYmVlcCgwKTsKKwkJCXVkZWxheShVU19QRVJfRE9UKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiBBc3N1bWUgaXQncyBhIHNwYWNlICovCisJCQl1ZGVsYXkoVVNfUEVSX0RPVCAqIDMpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgbWFpbih2b2lkKQoreworCS8qIEtpbGwgbWFjaGluZSBpZiBzdHJ1Y3R1cmVzIGFyZSB3cm9uZyAqLworCWlmICh3YWtldXBfaGVhZGVyLnJlYWxfbWFnaWMgIT0gMHgxMjM0NTY3OCkKKwkJd2hpbGUgKDEpOworCisJaWYgKHdha2V1cF9oZWFkZXIucmVhbG1vZGVfZmxhZ3MgJiA0KQorCQlzZW5kX21vcnNlKCIuLi4tIik7CisKKwlpZiAod2FrZXVwX2hlYWRlci5yZWFsbW9kZV9mbGFncyAmIDEpCisJCWFzbSB2b2xhdGlsZSgibGNhbGx3ICAgJDB4YzAwMCwkMyIpOworCisJaWYgKHdha2V1cF9oZWFkZXIucmVhbG1vZGVfZmxhZ3MgJiAyKSB7CisJCS8qIE5lZWQgdG8gY2FsbCBCSU9TICovCisJCXByb2JlX2NhcmRzKDApOworCQlzZXRfbW9kZSh3YWtldXBfaGVhZGVyLnZpZGVvX21vZGUpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliNzdmYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQUNQSSB3YWtldXAgcmVhbCBtb2RlIHN0YXJ0dXAgc3R1YgorICovCisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisJLmNvZGUxNgorCS5zZWN0aW9uICIuaGVhZGVyIiwgImEiCisKKy8qIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBzdHJ1Y3R1cmUgaW4gd2FrZXVwLmggKi8KKwkJLmdsb2JsCXdha2V1cF9oZWFkZXIKK3dha2V1cF9oZWFkZXI6Cit2aWRlb19tb2RlOgkuc2hvcnQJMAkvKiBWaWRlbyBtb2RlIG51bWJlciAqLworcG1vZGVfcmV0dXJuOgkuYnl0ZQkweDY2LCAweGVhCS8qIGxqbXBsICovCisJCS5sb25nCTAJLyogb2Zmc2V0IGdvZXMgaGVyZSAqLworCQkuc2hvcnQJX19LRVJORUxfQ1MKK3Btb2RlX2NyMDoJLmxvbmcJMAkvKiBTYXZlZCAlY3IwICovCitwbW9kZV9jcjM6CS5sb25nCTAJLyogU2F2ZWQgJWNyMyAqLworcG1vZGVfY3I0OgkubG9uZwkwCS8qIFNhdmVkICVjcjQgKi8KK3Btb2RlX2VmZXI6CS5xdWFkCTAJLyogU2F2ZWQgRUZFUiAqLworcG1vZGVfZ2R0OgkucXVhZAkwCityZWFsbW9kZV9mbGFnczoJLmxvbmcJMAorcmVhbF9tYWdpYzoJLmxvbmcJMAordHJhbXBvbGluZV9zZWdtZW50Ogkud29yZCAwCitzaWduYXR1cmU6CS5sb25nCTB4NTFlZTExMTEKKworCS50ZXh0CisJLmdsb2JsCV9zdGFydAorCS5jb2RlMTYKK3dha2V1cF9jb2RlOgorX3N0YXJ0OgorCWNsaQorCWNsZAorCisJLyogU2V0IHVwIHNlZ21lbnRzICovCisJbW92dwklY3MsICVheAorCW1vdncJJWF4LCAlZHMKKwltb3Z3CSVheCwgJWVzCisJbW92dwklYXgsICVzcworCisJbW92bAkkd2FrZXVwX3N0YWNrX2VuZCwgJWVzcAorCisJLyogQ2xlYXIgdGhlIEVGTEFHUyAqLworCXB1c2hsCSQwCisJcG9wZmwKKworCS8qIENoZWNrIGhlYWRlciBzaWduYXR1cmUuLi4gKi8KKwltb3ZsCXNpZ25hdHVyZSwgJWVheAorCWNtcGwJJDB4NTFlZTExMTEsICVlYXgKKwlqbmUJYm9ndXNfcmVhbF9tYWdpYworCisJLyogQ2hlY2sgd2UgcmVhbGx5IGhhdmUgZXZlcnl0aGluZy4uLiAqLworCW1vdmwJZW5kX3NpZ25hdHVyZSwgJWVheAorCWNtcGwJJDB4NjVhMjJjODIsICVlYXgKKwlqbmUJYm9ndXNfcmVhbF9tYWdpYworCisJLyogQ2FsbCB0aGUgQyBjb2RlICovCisJY2FsbGwJbWFpbgorCisJLyogRG8gYW55IG90aGVyIHN0dWZmLi4uICovCisKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJLyogVGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgaW4gQyBjb2RlLi4uICovCisJbW92bAlwbW9kZV9jcjMsICVlYXgKKwltb3ZsCSVlYXgsICVjcjMKKworCW1vdmwJcG1vZGVfY3I0LCAlZWN4CisJamVjeHoJMWYKKwltb3ZsCSVlY3gsICVjcjQKKzE6CisJbW92bAlwbW9kZV9lZmVyLCAlZWF4CisJbW92bAlwbW9kZV9lZmVyICsgNCwgJWVkeAorCW1vdmwJJWVheCwgJWVjeAorCW9ybAklZWR4LCAlZWN4CisJanoJMWYKKwltb3ZsCSQweGMwMDAwMDgwLCAlZWN4CisJd3Jtc3IKKzE6CisKKwlsZ2R0bAlwbW9kZV9nZHQKKworCS8qIFRoaXMgcmVhbGx5IGNvdWxkbid0Li4uICovCisJbW92bAlwbW9kZV9jcjAsICVlYXgKKwltb3ZsCSVlYXgsICVjcjAKKwlqbXAJcG1vZGVfcmV0dXJuCisjZWxzZQorCXB1c2h3CSQwCisJcHVzaHcJdHJhbXBvbGluZV9zZWdtZW50CisJcHVzaHcJJDAKKwlscmV0CisjZW5kaWYKKworYm9ndXNfcmVhbF9tYWdpYzoKKzE6CisJaGx0CisJam1wCTFiCisKKwkuZGF0YQorCS5iYWxpZ24JNAorCS5nbG9ibAlIRUFQLCBoZWFwX2VuZAorSEVBUDoKKwkubG9uZwl3YWtldXBfaGVhcAoraGVhcF9lbmQ6CisJLmxvbmcJd2FrZXVwX3N0YWNrCisKKwkuYnNzCit3YWtldXBfaGVhcDoKKwkuc3BhY2UJMjA0OAord2FrZXVwX3N0YWNrOgorCS5zcGFjZQkyMDQ4Cit3YWtldXBfc3RhY2tfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmggYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjgxNjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgd2FrZXVwIGRhdGEgc3RydWN0dXJlIGF0IHRoZSBoZWFkIG9mIHRoZQorICogd2FrZXVwIGNvZGUuCisgKi8KKworI2lmbmRlZiBBUkNIX1g4Nl9LRVJORUxfQUNQSV9STV9XQUtFVVBfSAorI2RlZmluZSBBUkNIX1g4Nl9LRVJORUxfQUNQSV9STV9XQUtFVVBfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFRoaXMgbXVzdCBtYXRjaCBkYXRhIGF0IHdha2V1cC5TICovCitzdHJ1Y3Qgd2FrZXVwX2hlYWRlciB7CisJdTE2IHZpZGVvX21vZGU7CQkvKiBWaWRlbyBtb2RlIG51bWJlciAqLworCXUxNiBfam1wMTsJCS8qIGxqbXBsIG9wY29kZSwgMzItYml0IG9ubHkgKi8KKwl1MzIgcG1vZGVfZW50cnk7CS8qIFByb3RlY3RlZCBtb2RlIHJlc3VtZSBwb2ludCwgMzItYml0IG9ubHkgKi8KKwl1MTYgX2ptcDI7CQkvKiBDUyB2YWx1ZSwgMzItYml0IG9ubHkgKi8KKwl1MzIgcG1vZGVfY3IwOwkJLyogUHJvdGVjdGVkIG1vZGUgY3IwICovCisJdTMyIHBtb2RlX2NyMzsJCS8qIFByb3RlY3RlZCBtb2RlIGNyMyAqLworCXUzMiBwbW9kZV9jcjQ7CQkvKiBQcm90ZWN0ZWQgbW9kZSBjcjQgKi8KKwl1MzIgcG1vZGVfZWZlcl9sb3c7CS8qIFByb3RlY3RlZCBtb2RlIEVGRVIgKi8KKwl1MzIgcG1vZGVfZWZlcl9oaWdoOworCXU2NCBwbW9kZV9nZHQ7CisJdTMyIHJlYWxtb2RlX2ZsYWdzOworCXUzMiByZWFsX21hZ2ljOworCXUxNiB0cmFtcG9saW5lX3NlZ21lbnQ7CS8qIHNlZ21lbnQgd2l0aCB0cmFtcG9saW5lIGNvZGUsIDY0LWJpdCBvbmx5ICovCisJdTMyIHNpZ25hdHVyZTsJCS8qIFRvIGNoZWNrIHdlIGhhdmUgY29ycmVjdCBzdHJ1Y3R1cmUgKi8KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCitleHRlcm4gc3RydWN0IHdha2V1cF9oZWFkZXIgd2FrZXVwX2hlYWRlcjsKKyNlbmRpZgorCisjZGVmaW5lIEhFQURFUl9PRkZTRVQgMHgzZjAwCisjZGVmaW5lIFdBS0VVUF9TSVpFICAgMHg0MDAwCisKKyNlbmRpZiAvKiBBUkNIX1g4Nl9LRVJORUxfQUNQSV9STV9XQUtFVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmFiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIHdha2V1cC5sZAorICoKKyAqIExpbmtlciBzY3JpcHQgZm9yIHRoZSByZWFsLW1vZGUgd2FrZXVwIGNvZGUKKyAqLworI3VuZGVmIGkzODYKKyNpbmNsdWRlICJ3YWtldXAuaCIKKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItaTM4NiIsICJlbGYzMi1pMzg2IiwgImVsZjMyLWkzODYiKQorT1VUUFVUX0FSQ0goaTM4NikKK0VOVFJZKF9zdGFydCkKKworU0VDVElPTlMKK3sKKwkuID0gSEVBREVSX09GRlNFVDsKKwkuaGVhZGVyIDogeworCQkgKiguaGVhZGVyKQorCX0KKworCS4gPSAwOworCS50ZXh0IDogeworCQkgKigudGV4dCopCisJfQorCisJLiA9IEFMSUdOKDE2KTsKKwkucm9kYXRhIDogeworCQkqKC5yb2RhdGEqKQorCX0KKworCS52aWRlb2NhcmRzIDogeworCQl2aWRlb19jYXJkcyA9IC47CisJCSooLnZpZGVvY2FyZHMpCisJCXZpZGVvX2NhcmRzX2VuZCA9IC47CisJfQorCisJLiA9IEFMSUdOKDE2KTsKKwkuZGF0YSA6IHsKKwkJICooLmRhdGEqKQorCX0KKworCS5zaWduYXR1cmUgOiB7CisJCWVuZF9zaWduYXR1cmUgPSAuOworCQlMT05HKDB4NjVhMjJjODIpCisJfQorCisJLiA9IEFMSUdOKDE2KTsKKwkuYnNzIDoJeworCQlfX2Jzc19zdGFydCA9IC47CisJCSooLmJzcykKKwkJX19ic3NfZW5kID0gLjsKKwl9CisKKwkuID0gQUxJR04oMTYpOworCV9lbmQgPSAuOworCisJL0RJU0NBUkQvIDogeworCQkqKC5ub3RlKikKKwl9CisKKwkuID0gQVNTRVJUKF9lbmQgPD0gV0FLRVVQX1NJWkUsICJXYWtldXAgdG9vIGJpZyEiKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IDZiYzgxNWMuLmFmYzI1ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMTAsMzAgKzEwLDcyIEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgInJlYWxtb2RlL3dha2V1cC5oIgorI2luY2x1ZGUgInNsZWVwLmgiCisKK3Vuc2lnbmVkIGxvbmcgYWNwaV93YWtldXBfYWRkcmVzczsKK3Vuc2lnbmVkIGxvbmcgYWNwaV9yZWFsbW9kZV9mbGFnczsKIAogLyogYWRkcmVzcyBpbiBsb3cgbWVtb3J5IG9mIHRoZSB3YWtldXAgcm91dGluZS4gKi8KLXVuc2lnbmVkIGxvbmcgYWNwaV93YWtldXBfYWRkcmVzcyA9IDA7Ci11bnNpZ25lZCBsb25nIGFjcGlfcmVhbG1vZGVfZmxhZ3M7Ci1leHRlcm4gY2hhciB3YWtldXBfc3RhcnQsIHdha2V1cF9lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBhY3BpX3JlYWxtb2RlOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBhY3BpX2NvcHlfd2FrZXVwX3JvdXRpbmUodW5zaWduZWQgbG9uZyk7CisjaWZkZWYgQ09ORklHXzY0QklUCitzdGF0aWMgY2hhciB0ZW1wX3N0YWNrWzEwMjQwXTsKKyNlbmRpZgogCiAvKioKICAqIGFjcGlfc2F2ZV9zdGF0ZV9tZW0gLSBzYXZlIGtlcm5lbCBzdGF0ZQogICoKICAqIENyZWF0ZSBhbiBpZGVudGl0eSBtYXBwZWQgcGFnZSB0YWJsZSBhbmQgY29weSB0aGUgd2FrZXVwIHJvdXRpbmUgdG8KICAqIGxvdyBtZW1vcnkuCisgKgorICogTm90ZSB0aGF0IHRoaXMgaXMgdG9vIGxhdGUgdG8gY2hhbmdlIGFjcGlfd2FrZXVwX2FkZHJlc3MuCiAgKi8KIGludCBhY3BpX3NhdmVfc3RhdGVfbWVtKHZvaWQpCiB7Ci0JaWYgKCFhY3BpX3dha2V1cF9hZGRyZXNzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBkdXJpbmcgYm9vdCwgUzMgZGlzYWJsZWRcbiIpOworCXN0cnVjdCB3YWtldXBfaGVhZGVyICpoZWFkZXI7CisKKwlpZiAoIWFjcGlfcmVhbG1vZGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGR1cmluZyBib290LCAiCisJCSAgICAgICAiUzMgZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtY3B5KCh2b2lkICopYWNwaV93YWtldXBfYWRkcmVzcywgJndha2V1cF9zdGFydCwKLQkgICAgICAgJndha2V1cF9lbmQgLSAmd2FrZXVwX3N0YXJ0KTsKLQlhY3BpX2NvcHlfd2FrZXVwX3JvdXRpbmUoYWNwaV93YWtldXBfYWRkcmVzcyk7CisJbWVtY3B5KCh2b2lkICopYWNwaV9yZWFsbW9kZSwgJndha2V1cF9jb2RlX3N0YXJ0LCBXQUtFVVBfU0laRSk7CisKKwloZWFkZXIgPSAoc3RydWN0IHdha2V1cF9oZWFkZXIgKikoYWNwaV9yZWFsbW9kZSArIEhFQURFUl9PRkZTRVQpOworCWlmIChoZWFkZXItPnNpZ25hdHVyZSAhPSAweDUxZWUxMTExKSB7CisJCXByaW50ayhLRVJOX0VSUiAid2FrZXVwIGhlYWRlciBkb2VzIG5vdCBtYXRjaFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWhlYWRlci0+dmlkZW9fbW9kZSA9IHNhdmVkX3ZpZGVvX21vZGU7CisKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJc3RvcmVfZ2R0KChzdHJ1Y3QgZGVzY19wdHIgKikmaGVhZGVyLT5wbW9kZV9nZHQpOworCisJaGVhZGVyLT5wbW9kZV9lZmVyX2xvdyA9IG54X2VuYWJsZWQ7CisJaWYgKGhlYWRlci0+cG1vZGVfZWZlcl9sb3cgJiAxKSB7CisJCS8qIFRoaXMgaXMgc3RyYW5nZSwgd2h5IG5vdCBzYXZlIGVmZXIsIGFsd2F5cz8gKi8KKwkJcmRtc3IoTVNSX0VGRVIsIGhlYWRlci0+cG1vZGVfZWZlcl9sb3csCisJCQloZWFkZXItPnBtb2RlX2VmZXJfaGlnaCk7CisJfQorI2VuZGlmIC8qICFDT05GSUdfNjRCSVQgKi8KKworCWhlYWRlci0+cG1vZGVfY3IwID0gcmVhZF9jcjAoKTsKKwloZWFkZXItPnBtb2RlX2NyNCA9IHJlYWRfY3I0KCk7CisJaGVhZGVyLT5yZWFsbW9kZV9mbGFncyA9IGFjcGlfcmVhbG1vZGVfZmxhZ3M7CisJaGVhZGVyLT5yZWFsX21hZ2ljID0gMHgxMjM0NTY3ODsKKworI2lmbmRlZiBDT05GSUdfNjRCSVQKKwloZWFkZXItPnBtb2RlX2VudHJ5ID0gKHUzMikmd2FrZXVwX3Btb2RlX3JldHVybjsKKwloZWFkZXItPnBtb2RlX2NyMyA9ICh1MzIpKHN3c3VzcF9wZ19kaXIgLSBfX1BBR0VfT0ZGU0VUKTsKKwlzYXZlZF9tYWdpYyA9IDB4MTIzNDU2Nzg7CisjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KKwloZWFkZXItPnRyYW1wb2xpbmVfc2VnbWVudCA9IHNldHVwX3RyYW1wb2xpbmUoKSA+PiA0OworCWluaXRfcnNwID0gKHVuc2lnbmVkIGxvbmcpdGVtcF9zdGFjayArIDQwOTY7CisJaW5pdGlhbF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpd2FrZXVwX2xvbmc2NDsKKwlzYXZlZF9tYWdpYyA9IDB4MTIzNDU2Nzg5YWJjZGVmMDsKKyNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAogCXJldHVybiAwOwogfQpAQCAtNTYsMTUgKzk4LDIwIEBACiAgKi8KIHZvaWQgX19pbml0IGFjcGlfcmVzZXJ2ZV9ib290bWVtKHZvaWQpCiB7Ci0JaWYgKCgmd2FrZXVwX2VuZCAtICZ3YWtldXBfc3RhcnQpID4gUEFHRV9TSVpFKjIpIHsKKwlpZiAoKCZ3YWtldXBfY29kZV9lbmQgLSAmd2FrZXVwX2NvZGVfc3RhcnQpID4gV0FLRVVQX1NJWkUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiQUNQSTogV2FrZXVwIGNvZGUgd2F5IHRvbyBiaWcsIFMzIGRpc2FibGVkLlxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlhY3BpX3dha2V1cF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpYWxsb2NfYm9vdG1lbV9sb3coUEFHRV9TSVpFKjIpOwotCWlmICghYWNwaV93YWtldXBfYWRkcmVzcykKKwlhY3BpX3JlYWxtb2RlID0gKHVuc2lnbmVkIGxvbmcpYWxsb2NfYm9vdG1lbV9sb3coV0FLRVVQX1NJWkUpOworCisJaWYgKCFhY3BpX3JlYWxtb2RlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQUNQSTogQ2Fubm90IGFsbG9jYXRlIGxvd21lbSwgUzMgZGlzYWJsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWFjcGlfd2FrZXVwX2FkZHJlc3MgPSBhY3BpX3JlYWxtb2RlOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmggYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmNiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKglWYXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjb2RlIGluIHNsZWVwLmMKKyAqLworCisjaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KKworZXh0ZXJuIGNoYXIgd2FrZXVwX2NvZGVfc3RhcnQsIHdha2V1cF9jb2RlX2VuZDsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfdmlkZW9fbW9kZTsKK2V4dGVybiBsb25nIHNhdmVkX21hZ2ljOworCitleHRlcm4gaW50IHdha2V1cF9wbW9kZV9yZXR1cm47CitleHRlcm4gY2hhciBzd3N1c3BfcGdfZGlyW1BBR0VfU0laRV07CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFjcGlfY29weV93YWtldXBfcm91dGluZSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIHdha2V1cF9sb25nNjQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXBfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmZTU1Mi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcF8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIHNsZWVwLmMgLSB4ODYtc3BlY2lmaWMgQUNQSSBzbGVlcCBzdXBwb3J0LgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBQYXRyaWNrIE1vY2hlbAotICogIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLS8qIE91Y2gsIHdlIHdhbnQgdG8gZGVsZXRlIHRoaXMuIFdlIGFscmVhZHkgaGF2ZSBiZXR0ZXIgdmVyc2lvbiBpbiB1c2Vyc3BhY2UsIGluCi0gICBzMnJhbSBmcm9tIHN1c3BlbmQuc2YubmV0IHByb2plY3QgKi8KLXN0YXRpYyBfX2luaXQgaW50IHJlc2V0X3ZpZGVvbW9kZV9hZnRlcl9zMyhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKLXsKLQlhY3BpX3JlYWxtb2RlX2ZsYWdzIHw9IDI7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGFjcGlzbGVlcF9kbWlfdGFibGVbXSA9IHsKLQl7CQkJLyogUmVzZXQgdmlkZW8gbW9kZSBhZnRlciByZXR1cm5pbmcgZnJvbSBBQ1BJIFMzIHNsZWVwICovCi0JIC5jYWxsYmFjayA9IHJlc2V0X3ZpZGVvbW9kZV9hZnRlcl9zMywKLQkgLmlkZW50ID0gIlRvc2hpYmEgU2F0ZWxsaXRlIDQwMzBjZHQiLAotCSAubWF0Y2hlcyA9IHsKLQkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlM0MDMwQ0RULzQuMyIpLAotCQkgICAgIH0sCi0JIH0sCi0Je30KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlzbGVlcF9kbWlfaW5pdCh2b2lkKQotewotCWRtaV9jaGVja19zeXN0ZW0oYWNwaXNsZWVwX2RtaV90YWJsZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWNvcmVfaW5pdGNhbGwoYWNwaXNsZWVwX2RtaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzMyLlMKaW5kZXggZjUzZTMyNy4uYTEyZTZhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzMyLlMKQEAgLTMsMTc4ICszLDEyIEBACiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0jCi0jIHdha2V1cF9jb2RlIHJ1bnMgaW4gcmVhbCBtb2RlLCBhbmQgYXQgdW5rbm93biBhZGRyZXNzIChkZXRlcm1pbmVkIGF0IHJ1bi10aW1lKS4KLSMgVGhlcmVmb3JlIGl0IG11c3Qgb25seSB1c2UgcmVsYXRpdmUganVtcHMvY2FsbHMuIAotIwotIyBEbyB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBBMjA/IEl0IGlzIG9rYXk6IEFDUEkgc3BlY3Mgc2F5cyBBMjAgbXVzdCBiZSBlbmFibGVkCi0jCi0jIElmIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygd2FrZXVwX2NvZGUgaXMgMHgxMjM0NSwgQklPUyBzaG91bGQgY2FsbCB1cyB3aXRoCi0jIGNzID0gMHgxMjM0LCBlaXAgPSAweDA1Ci0jCi0KLSNkZWZpbmUgQkVFUCBcCi0JaW5iCSQ5NywgJWFsOyAJXAotCW91dGIJJWFsLCAkMHg4MDsgCVwKLQltb3ZiCSQzLCAlYWw7IAlcCi0Jb3V0YgklYWwsICQ5NzsgCVwKLQlvdXRiCSVhbCwgJDB4ODA7IAlcCi0JbW92YgkkLTc0LCAlYWw7IAlcCi0Jb3V0YgklYWwsICQ2NzsgCVwKLQlvdXRiCSVhbCwgJDB4ODA7IAlcCi0JbW92YgkkLTExOSwgJWFsOyAJXAotCW91dGIJJWFsLCAkNjY7IAlcCi0Jb3V0YgklYWwsICQweDgwOyAJXAotCW1vdmIJJDE1LCAlYWw7IAlcCi0Jb3V0YgklYWwsICQ2NjsKLQotQUxJR04KLQkuYWxpZ24JNDA5NgotRU5UUlkod2FrZXVwX3N0YXJ0KQotd2FrZXVwX2NvZGU6Ci0Jd2FrZXVwX2NvZGVfc3RhcnQgPSAuCi0JLmNvZGUxNgotCi0JY2xpCi0JY2xkCi0KLQkjIHNldHVwIGRhdGEgc2VnbWVudAotCW1vdncJJWNzLCAlYXgKLQltb3Z3CSVheCwgJWRzCQkJCQkjIE1ha2UgZHM6MCBwb2ludCB0byB3YWtldXBfc3RhcnQKLQltb3Z3CSVheCwgJXNzCi0KLQl0ZXN0bCAgICQ0LCByZWFsbW9kZV9mbGFncyAtIHdha2V1cF9jb2RlCi0JanogICAgICAxZgotCUJFRVAKLTE6Ci0JbW92CSQod2FrZXVwX3N0YWNrIC0gd2FrZXVwX2NvZGUpLCAlc3AJCSMgUHJpdmF0ZSBzdGFjayBpcyBuZWVkZWQgZm9yIEFTVVMgYm9hcmQKLQotCXB1c2hsCSQwCQkJCQkJIyBLaWxsIGFueSBkYW5nZXJvdXMgZmxhZ3MKLQlwb3BmbAotCi0JbW92bAlyZWFsX21hZ2ljIC0gd2FrZXVwX2NvZGUsICVlYXgKLQljbXBsCSQweDEyMzQ1Njc4LCAlZWF4Ci0Jam5lCWJvZ3VzX3JlYWxfbWFnaWMKLQotCXRlc3RsCSQxLCByZWFsbW9kZV9mbGFncyAtIHdha2V1cF9jb2RlCi0JanoJMWYKLQlsY2FsbCAgICQweGMwMDAsJDMKLQltb3Z3CSVjcywgJWF4Ci0JbW92dwklYXgsICVkcwkJCQkJIyBCaW9zIG1pZ2h0IGhhdmUgcGxheWVkIHdpdGggdGhhdAotCW1vdncJJWF4LCAlc3MKLTE6Ci0KLQl0ZXN0bAkkMiwgcmVhbG1vZGVfZmxhZ3MgLSB3YWtldXBfY29kZQotCWp6CTFmCi0JbW92CXZpZGVvX21vZGUgLSB3YWtldXBfY29kZSwgJWF4Ci0JY2FsbAltb2RlX3NldAotMToKLQotCSMgc2V0IHVwIHBhZ2UgdGFibGUKLQltb3ZsCSRzd3N1c3BfcGdfZGlyLV9fUEFHRV9PRkZTRVQsICVlYXgKLQltb3ZsCSVlYXgsICVjcjMKLQotCXRlc3RsCSQxLCByZWFsX2VmZXJfc2F2ZV9yZXN0b3JlIC0gd2FrZXVwX2NvZGUKLQlqegk0ZgotCSMgcmVzdG9yZSBlZmVyIHNldHRpbmcKLQltb3ZsCXJlYWxfc2F2ZV9lZmVyX2VkeCAtIHdha2V1cF9jb2RlLCAlZWR4Ci0JbW92bAlyZWFsX3NhdmVfZWZlcl9lYXggLSB3YWtldXBfY29kZSwgJWVheAotCW1vdiAgICAgJDB4YzAwMDAwODAsICVlY3gKLQl3cm1zcgotNDoKLQkjIG1ha2Ugc3VyZSAlY3I0IGlzIHNldCBjb3JyZWN0bHkgKGZlYXR1cmVzLCBldGMpCi0JbW92bAlyZWFsX3NhdmVfY3I0IC0gd2FrZXVwX2NvZGUsICVlYXgKLQltb3ZsCSVlYXgsICVjcjQKLQkKLQkjIG5lZWQgYSBnZHQgLS0gdXNlIGxnZHRsIHRvIGZvcmNlIDMyLWJpdCBvcGVyYW5kcywgaW4gY2FzZQotCSMgdGhlIEdEVCBpcyBsb2NhdGVkIHBhc3QgMTYgbWVnYWJ5dGVzLgotCWxnZHRsCXJlYWxfc2F2ZV9nZHQgLSB3YWtldXBfY29kZQotCi0JbW92bAlyZWFsX3NhdmVfY3IwIC0gd2FrZXVwX2NvZGUsICVlYXgKLQltb3ZsCSVlYXgsICVjcjAKLQlqbXAgMWYKLTE6Ci0JbW92bAlyZWFsX21hZ2ljIC0gd2FrZXVwX2NvZGUsICVlYXgKLQljbXBsCSQweDEyMzQ1Njc4LCAlZWF4Ci0Jam5lCWJvZ3VzX3JlYWxfbWFnaWMKLQotCXRlc3RsICAgJDgsIHJlYWxtb2RlX2ZsYWdzIC0gd2FrZXVwX2NvZGUKLQlqeiAgICAgIDFmCi0JQkVFUAotMToKLQlsam1wbAkkX19LRVJORUxfQ1MsICR3YWtldXBfcG1vZGVfcmV0dXJuCi0KLXJlYWxfc2F2ZV9nZHQ6CS53b3JkIDAKLQkJLmxvbmcgMAotcmVhbF9zYXZlX2NyMDoJLmxvbmcgMAotcmVhbF9zYXZlX2NyMzoJLmxvbmcgMAotcmVhbF9zYXZlX2NyNDoJLmxvbmcgMAotcmVhbF9tYWdpYzoJLmxvbmcgMAotdmlkZW9fbW9kZToJLmxvbmcgMAotcmVhbG1vZGVfZmxhZ3M6CS5sb25nIDAKLXJlYWxfZWZlcl9zYXZlX3Jlc3RvcmU6CS5sb25nIDAKLXJlYWxfc2F2ZV9lZmVyX2VkeDogCS5sb25nIDAKLXJlYWxfc2F2ZV9lZmVyX2VheDogCS5sb25nIDAKLQotYm9ndXNfcmVhbF9tYWdpYzoKLQlqbXAgYm9ndXNfcmVhbF9tYWdpYwotCi0vKiBUaGlzIGNvZGUgdXNlcyBhbiBleHRlbmRlZCBzZXQgb2YgdmlkZW8gbW9kZSBudW1iZXJzLiBUaGVzZSBpbmNsdWRlOgotICogQWxpYXNlcyBmb3Igc3RhbmRhcmQgbW9kZXMKLSAqCU5PUk1BTF9WR0EgKC0xKQotICoJRVhURU5ERURfVkdBICgtMikKLSAqCUFTS19WR0EgKC0zKQotICogVmlkZW8gbW9kZXMgbnVtYmVyZWQgYnkgbWVudSBwb3NpdGlvbiAtLSBOT1QgUkVDT01NRU5ERUQgYmVjYXVzZSBvZiBsYWNrCi0gKiBvZiBjb21wYXRpYmlsaXR5IHdoZW4gZXh0ZW5kaW5nIHRoZSB0YWJsZS4gVGhlc2UgYXJlIGJldHdlZW4gMHgwMCBhbmQgMHhmZi4KLSAqLwotI2RlZmluZSBWSURFT19GSVJTVF9NRU5VIDB4MDAwMAotCi0vKiBTdGFuZGFyZCBCSU9TIHZpZGVvIG1vZGVzIChCSU9TIG51bWJlciArIDB4MDEwMCkgKi8KLSNkZWZpbmUgVklERU9fRklSU1RfQklPUyAweDAxMDAKLQotLyogVkVTQSBCSU9TIHZpZGVvIG1vZGVzIChWRVNBIG51bWJlciArIDB4MDIwMCkgKi8KLSNkZWZpbmUgVklERU9fRklSU1RfVkVTQSAweDAyMDAKLQotLyogVmlkZW83IHNwZWNpYWwgbW9kZXMgKEJJT1MgbnVtYmVyICsgMHgwOTAwKSAqLwotI2RlZmluZSBWSURFT19GSVJTVF9WNyAweDA5MDAKLQotIyBTZXR0aW5nIG9mIHVzZXIgbW9kZSAoQVg9bW9kZSBJRCkgPT4gQ0Y9c3VjY2VzcwotCi0jIEZvciBub3csIHdlIG9ubHkgaGFuZGxlIFZFU0EgbW9kZXMgKDB4MDIwMC4uMHgwM2ZmKS4gIFRvIGhhbmRsZSBvdGhlcgotIyBtb2Rlcywgd2Ugc2hvdWxkIHByb2JhYmx5IGNvbXBpbGUgaW4gdGhlIHZpZGVvIGNvZGUgZnJvbSB0aGUgYm9vdAotIyBkaXJlY3RvcnkuCi1tb2RlX3NldDoKLQltb3Z3CSVheCwgJWJ4Ci0Jc3ViYgkkVklERU9fRklSU1RfVkVTQT4+OCwgJWJoCi0JY21wYgkkMiwgJWJoCi0JamIJY2hlY2tfdmVzYQotCi1zZXRiYWQ6Ci0JY2xjCi0JcmV0Ci0KLWNoZWNrX3Zlc2E6Ci0Jb3J3CSQweDQwMDAsICVieAkJCSMgVXNlIGxpbmVhciBmcmFtZSBidWZmZXIKLQltb3Z3CSQweDRmMDIsICVheAkJCSMgVkVTQSBCSU9TIG1vZGUgc2V0IGNhbGwKLQlpbnQJJDB4MTAKLQljbXB3CSQweDAwNGYsICVheAkJCSMgQUw9NGYgaWYgaW1wbGVtZW50ZWQKLQlqbnoJc2V0YmFkCQkJCSMgQUg9MCBpZiBPSwotCi0Jc3RjCi0JcmV0CisjIENvcHlyaWdodCAyMDAzLCAyMDA4IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4sIGRpc3RyaWJ1dGUgdW5kZXIgR1BMdjIKIAogCS5jb2RlMzIKIAlBTElHTgogCi0ub3JnCTB4ODAwCi13YWtldXBfc3RhY2tfYmVnaW46CSMgU3RhY2sgZ3Jvd3MgZG93bgotCi0ub3JnCTB4ZmYwCQkjIEp1c3QgYmVsb3cgZW5kIG9mIHBhZ2UKLXdha2V1cF9zdGFjazoKLUVOVFJZKHdha2V1cF9lbmQpCi0JCi0ub3JnCTB4MTAwMAotCitFTlRSWSh3YWtldXBfcG1vZGVfcmV0dXJuKQogd2FrZXVwX3Btb2RlX3JldHVybjoKIAltb3Z3CSRfX0tFUk5FTF9EUywgJWF4CiAJbW92dwklYXgsICVzcwpAQCAtMTg3LDcgKzIxLDcgQEAKIAlsZ2R0CXNhdmVkX2dkdAogCWxpZHQJc2F2ZWRfaWR0CiAJbGxkdAlzYXZlZF9sZHQKLQlsam1wCSQoX19LRVJORUxfQ1MpLCQxZgorCWxqbXAJJChfX0tFUk5FTF9DUyksICQxZgogMToKIAltb3ZsCSVjcjMsICVlYXgKIAltb3ZsCSVlYXgsICVjcjMKQEAgLTIwMSw4MiArMzUsNDEgQEAKIAlqbmUJYm9ndXNfbWFnaWMKIAogCSMganVtcCB0byBwbGFjZSB3aGVyZSB3ZSBsZWZ0IG9mZgotCW1vdmwJc2F2ZWRfZWlwLCVlYXgKKwltb3ZsCXNhdmVkX2VpcCwgJWVheAogCWptcAkqJWVheAogCiBib2d1c19tYWdpYzoKIAlqbXAJYm9ndXNfbWFnaWMKIAogCi0jIwotIyBhY3BpX2NvcHlfd2FrZXVwX3JvdXRpbmUKLSMKLSMgQ29weSB0aGUgYWJvdmUgcm91dGluZSB0byBsb3cgbWVtb3J5LgotIwotIyBQYXJhbWV0ZXJzOgotIyAlZWF4OglwbGFjZSB0byBjb3B5IHdha2V1cCByb3V0aW5lIHRvCi0jCi0jIFJldHVybmVkIGFkZHJlc3MgaXMgbG9jYXRpb24gb2YgY29kZSBpbiBsb3cgbWVtb3J5IChwYXN0IGRhdGEgYW5kIHN0YWNrKQotIwotRU5UUlkoYWNwaV9jb3B5X3dha2V1cF9yb3V0aW5lKQogCi0JcHVzaGwJJWVieAorc2F2ZV9yZWdpc3RlcnM6CiAJc2dkdAlzYXZlZF9nZHQKIAlzaWR0CXNhdmVkX2lkdAogCXNsZHQJc2F2ZWRfbGR0CiAJc3RyCXNhdmVkX3RzcwogCi0JbW92bAlueF9lbmFibGVkLCAlZWR4Ci0JbW92bAklZWR4LCByZWFsX2VmZXJfc2F2ZV9yZXN0b3JlIC0gd2FrZXVwX3N0YXJ0ICglZWF4KQotCXRlc3RsCSQxLCByZWFsX2VmZXJfc2F2ZV9yZXN0b3JlIC0gd2FrZXVwX3N0YXJ0ICglZWF4KQotCWp6CTJmCi0JIyBzYXZlIGVmZXIgc2V0dGluZwotCXB1c2hsCSVlYXgKLQltb3ZsCSVlYXgsICVlYngKLQltb3YgICAgICQweGMwMDAwMDgwLCAlZWN4Ci0JcmRtc3IKLQltb3ZsCSVlZHgsIHJlYWxfc2F2ZV9lZmVyX2VkeCAtIHdha2V1cF9zdGFydCAoJWVieCkKLQltb3ZsCSVlYXgsIHJlYWxfc2F2ZV9lZmVyX2VheCAtIHdha2V1cF9zdGFydCAoJWVieCkKLQlwb3BsCSVlYXgKLTI6Ci0KLQltb3ZsICAgICVjcjMsICVlZHgKLQltb3ZsICAgICVlZHgsIHJlYWxfc2F2ZV9jcjMgLSB3YWtldXBfc3RhcnQgKCVlYXgpCi0JbW92bCAgICAlY3I0LCAlZWR4Ci0JbW92bCAgICAlZWR4LCByZWFsX3NhdmVfY3I0IC0gd2FrZXVwX3N0YXJ0ICglZWF4KQotCW1vdmwJJWNyMCwgJWVkeAotCW1vdmwJJWVkeCwgcmVhbF9zYXZlX2NyMCAtIHdha2V1cF9zdGFydCAoJWVheCkKLQlzZ2R0ICAgIHJlYWxfc2F2ZV9nZHQgLSB3YWtldXBfc3RhcnQgKCVlYXgpCi0KLQltb3ZsCXNhdmVkX3ZpZGVvbW9kZSwgJWVkeAotCW1vdmwJJWVkeCwgdmlkZW9fbW9kZSAtIHdha2V1cF9zdGFydCAoJWVheCkKLQltb3ZsCWFjcGlfcmVhbG1vZGVfZmxhZ3MsICVlZHgKLQltb3ZsCSVlZHgsIHJlYWxtb2RlX2ZsYWdzIC0gd2FrZXVwX3N0YXJ0ICglZWF4KQotCW1vdmwJJDB4MTIzNDU2NzgsIHJlYWxfbWFnaWMgLSB3YWtldXBfc3RhcnQgKCVlYXgpCi0JbW92bAkkMHgxMjM0NTY3OCwgc2F2ZWRfbWFnaWMKLQlwb3BsCSVlYngKLQlyZXQKLQotc2F2ZV9yZWdpc3RlcnM6CiAJbGVhbAk0KCVlc3ApLCAlZWF4CiAJbW92bAklZWF4LCBzYXZlZF9jb250ZXh0X2VzcAotCW1vdmwgJWVieCwgc2F2ZWRfY29udGV4dF9lYngKLQltb3ZsICVlYnAsIHNhdmVkX2NvbnRleHRfZWJwCi0JbW92bCAlZXNpLCBzYXZlZF9jb250ZXh0X2VzaQotCW1vdmwgJWVkaSwgc2F2ZWRfY29udGV4dF9lZGkKLQlwdXNoZmwgOyBwb3BsIHNhdmVkX2NvbnRleHRfZWZsYWdzCisJbW92bAklZWJ4LCBzYXZlZF9jb250ZXh0X2VieAorCW1vdmwJJWVicCwgc2F2ZWRfY29udGV4dF9lYnAKKwltb3ZsCSVlc2ksIHNhdmVkX2NvbnRleHRfZXNpCisJbW92bAklZWRpLCBzYXZlZF9jb250ZXh0X2VkaQorCXB1c2hmbAorCXBvcGwJc2F2ZWRfY29udGV4dF9lZmxhZ3MKIAotCW1vdmwgJHJldF9wb2ludCwgc2F2ZWRfZWlwCisJbW92bAkkcmV0X3BvaW50LCBzYXZlZF9laXAKIAlyZXQKIAogCiByZXN0b3JlX3JlZ2lzdGVyczoKLQltb3ZsIHNhdmVkX2NvbnRleHRfZWJwLCAlZWJwCi0JbW92bCBzYXZlZF9jb250ZXh0X2VieCwgJWVieAotCW1vdmwgc2F2ZWRfY29udGV4dF9lc2ksICVlc2kKLQltb3ZsIHNhdmVkX2NvbnRleHRfZWRpLCAlZWRpCi0JcHVzaGwgc2F2ZWRfY29udGV4dF9lZmxhZ3MgOyBwb3BmbAotCXJldAkKKwltb3ZsCXNhdmVkX2NvbnRleHRfZWJwLCAlZWJwCisJbW92bAlzYXZlZF9jb250ZXh0X2VieCwgJWVieAorCW1vdmwJc2F2ZWRfY29udGV4dF9lc2ksICVlc2kKKwltb3ZsCXNhdmVkX2NvbnRleHRfZWRpLCAlZWRpCisJcHVzaGwJc2F2ZWRfY29udGV4dF9lZmxhZ3MKKwlwb3BmbAorCXJldAogCiBFTlRSWShkb19zdXNwZW5kX2xvd2xldmVsKQogCWNhbGwJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzY0LlMKaW5kZXggMmUxYjllMC4uYmNjMjkzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvd2FrZXVwXzY0LlMKQEAgLTcsMTkxICs3LDE4IEBACiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKICMgQ29weXJpZ2h0IDIwMDMgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PiwgZGlzdHJpYnV0ZSB1bmRlciBHUEx2MgotIwotIyB3YWtldXBfY29kZSBydW5zIGluIHJlYWwgbW9kZSwgYW5kIGF0IHVua25vd24gYWRkcmVzcyAoZGV0ZXJtaW5lZCBhdCBydW4tdGltZSkuCi0jIFRoZXJlZm9yZSBpdCBtdXN0IG9ubHkgdXNlIHJlbGF0aXZlIGp1bXBzL2NhbGxzLiAKLSMKLSMgRG8gd2UgbmVlZCB0byBkZWFsIHdpdGggQTIwPyBJdCBpcyBva2F5OiBBQ1BJIHNwZWNzIHNheXMgQTIwIG11c3QgYmUgZW5hYmxlZAotIwotIyBJZiBwaHlzaWNhbCBhZGRyZXNzIG9mIHdha2V1cF9jb2RlIGlzIDB4MTIzNDUsIEJJT1Mgc2hvdWxkIGNhbGwgdXMgd2l0aAotIyBjcyA9IDB4MTIzNCwgZWlwID0gMHgwNQotIwotCi0jZGVmaW5lIEJFRVAgXAotCWluYgkkOTcsICVhbDsgCVwKLQlvdXRiCSVhbCwgJDB4ODA7IAlcCi0JbW92YgkkMywgJWFsOyAJXAotCW91dGIJJWFsLCAkOTc7IAlcCi0Jb3V0YgklYWwsICQweDgwOyAJXAotCW1vdmIJJC03NCwgJWFsOyAJXAotCW91dGIJJWFsLCAkNjc7IAlcCi0Jb3V0YgklYWwsICQweDgwOyAJXAotCW1vdmIJJC0xMTksICVhbDsgCVwKLQlvdXRiCSVhbCwgJDY2OyAJXAotCW91dGIJJWFsLCAkMHg4MDsgCVwKLQltb3ZiCSQxNSwgJWFsOyAJXAotCW91dGIJJWFsLCAkNjY7Ci0KLQotQUxJR04KLQkuYWxpZ24JMTYKLUVOVFJZKHdha2V1cF9zdGFydCkKLXdha2V1cF9jb2RlOgotCXdha2V1cF9jb2RlX3N0YXJ0ID0gLgotCS5jb2RlMTYKLQotIyBSdW5uaW5nIGluICpjb3B5KiBvZiB0aGlzIGNvZGUsIHNvbWV3aGVyZSBpbiBsb3cgMU1CLgotCi0JY2xpCi0JY2xkCi0JIyBzZXR1cCBkYXRhIHNlZ21lbnQKLQltb3Z3CSVjcywgJWF4Ci0JbW92dwklYXgsICVkcwkJIyBNYWtlIGRzOjAgcG9pbnQgdG8gd2FrZXVwX3N0YXJ0Ci0JbW92dwklYXgsICVzcwotCi0JIyBEYXRhIHNlZ21lbnQgbXVzdCBiZSBzZXQgdXAgYmVmb3JlIHdlIGNhbiBzZWUgd2hldGhlciB0byBiZWVwLgotCXRlc3RsICAgJDQsIHJlYWxtb2RlX2ZsYWdzIC0gd2FrZXVwX2NvZGUKLQlqeiAgICAgIDFmCi0JQkVFUAotMToKLQotCQkJCQkjIFByaXZhdGUgc3RhY2sgaXMgbmVlZGVkIGZvciBBU1VTIGJvYXJkCi0JbW92CSQod2FrZXVwX3N0YWNrIC0gd2FrZXVwX2NvZGUpLCAlc3AKLQotCXB1c2hsCSQwCQkJIyBLaWxsIGFueSBkYW5nZXJvdXMgZmxhZ3MKLQlwb3BmbAotCi0JbW92bAlyZWFsX21hZ2ljIC0gd2FrZXVwX2NvZGUsICVlYXgKLQljbXBsCSQweDEyMzQ1Njc4LCAlZWF4Ci0Jam5lCWJvZ3VzX3JlYWxfbWFnaWMKLQotCXRlc3RsCSQxLCByZWFsbW9kZV9mbGFncyAtIHdha2V1cF9jb2RlCi0JanoJMWYKLQlsY2FsbCAgICQweGMwMDAsJDMKLQltb3Z3CSVjcywgJWF4Ci0JbW92dwklYXgsICVkcwkJIyBCaW9zIG1pZ2h0IGhhdmUgcGxheWVkIHdpdGggdGhhdAotCW1vdncJJWF4LCAlc3MKLTE6Ci0KLQl0ZXN0bAkkMiwgcmVhbG1vZGVfZmxhZ3MgLSB3YWtldXBfY29kZQotCWp6CTFmCi0JbW92CXZpZGVvX21vZGUgLSB3YWtldXBfY29kZSwgJWF4Ci0JY2FsbAltb2RlX3NldAotMToKLQotCW1vdgklZHMsICVheAkJCSMgRmluZCAzMmJpdCB3YWtldXBfY29kZSBhZGRyCi0JbW92enggICAlYXgsICVlc2kJCQkjIChDb252ZXJ0ICVkczpnZHQgdG8gYSBsaW5lciBwdHIpCi0Jc2hsbCAgICAkNCwgJWVzaQotCQkJCQkJIyBGaXggdXAgdGhlIHZlY3RvcnMKLQlhZGRsICAgICVlc2ksIHdha2V1cF8zMl92ZWN0b3IgLSB3YWtldXBfY29kZQotCWFkZGwgICAgJWVzaSwgd2FrZXVwX2xvbmc2NF92ZWN0b3IgLSB3YWtldXBfY29kZQotCWFkZGwgICAgJWVzaSwgZ2R0XzQ4YSArIDIgLSB3YWtldXBfY29kZSAjIEZpeHVwIHRoZSBnZHQgcG9pbnRlcgotCi0JbGlkdGwJJWRzOmlkdF80OGEgLSB3YWtldXBfY29kZQotCWxnZHRsCSVkczpnZHRfNDhhIC0gd2FrZXVwX2NvZGUJIyBsb2FkIGdkdCB3aXRoIHdoYXRldmVyIGlzCi0JCQkJCQkjIGFwcHJvcHJpYXRlCi0KLQltb3ZsCSQxLCAlZWF4CQkJIyBwcm90ZWN0ZWQgbW9kZSAoUEUpIGJpdAotCWxtc3cJJWF4CQkJCSMgVGhpcyBpcyBpdCEKLQlqbXAJMWYKLTE6Ci0KLQlsam1wbCAgICood2FrZXVwXzMyX3ZlY3RvciAtIHdha2V1cF9jb2RlKQotCi0JLmJhbGlnbiA0Ci13YWtldXBfMzJfdmVjdG9yOgotCS5sb25nICAgd2FrZXVwXzMyIC0gd2FrZXVwX2NvZGUKLQkud29yZCAgIF9fS0VSTkVMMzJfQ1MsIDAKLQotCS5jb2RlMzIKLXdha2V1cF8zMjoKLSMgUnVubmluZyBpbiB0aGlzIGNvZGUsIGJ1dCBhdCBsb3cgYWRkcmVzczsgcGFnaW5nIGlzIG5vdCB5ZXQgdHVybmVkIG9uLgotCi0JbW92bAkkX19LRVJORUxfRFMsICVlYXgKLQltb3ZsCSVlYXgsICVkcwotCi0JLyoKLQkgKiBQcmVwYXJlIGZvciBlbnRlcmluZyA2NGJpdHMgbW9kZQotCSAqLwotCi0JLyogRW5hYmxlIFBBRSAqLwotCXhvcmwJJWVheCwgJWVheAotCWJ0c2wJJDUsICVlYXgKLQltb3ZsCSVlYXgsICVjcjQKLQotCS8qIFNldHVwIGVhcmx5IGJvb3Qgc3RhZ2UgNCBsZXZlbCBwYWdldGFibGVzICovCi0JbGVhbCAgICAod2FrZXVwX2xldmVsNF9wZ3QgLSB3YWtldXBfY29kZSkoJWVzaSksICVlYXgKLQltb3ZsCSVlYXgsICVjcjMKLQotICAgICAgICAvKiBDaGVjayBpZiBueCBpcyBpbXBsZW1lbnRlZCAqLwotICAgICAgICBtb3ZsICAgICQweDgwMDAwMDAxLCAlZWF4Ci0gICAgICAgIGNwdWlkCi0gICAgICAgIG1vdmwgICAgJWVkeCwlZWRpCi0KLQkvKiBFbmFibGUgTG9uZyBNb2RlICovCi0JeG9ybCAgICAlZWF4LCAlZWF4Ci0JYnRzbAkkX0VGRVJfTE1FLCAlZWF4Ci0KLQkvKiBObyBFeGVjdXRlIHN1cHBvcnRlZD8gKi8KLQlidGwJJDIwLCVlZGkKLQlqbmMgICAgIDFmCi0JYnRzbAkkX0VGRVJfTlgsICVlYXgKLQkJCQkKLQkvKiBNYWtlIGNoYW5nZXMgZWZmZWN0aXZlICovCi0xOgltb3ZsICAgICRNU1JfRUZFUiwgJWVjeAotCXhvcmwgICAgJWVkeCwgJWVkeAotCXdybXNyCi0KLQl4b3JsCSVlYXgsICVlYXgKLQlidHNsCSQzMSwgJWVheAkJCS8qIEVuYWJsZSBwYWdpbmcgYW5kIGluIHR1cm4gYWN0aXZhdGUgTG9uZyBNb2RlICovCi0JYnRzbAkkMCwgJWVheAkJCS8qIEVuYWJsZSBwcm90ZWN0ZWQgbW9kZSAqLwotCi0JLyogTWFrZSBjaGFuZ2VzIGVmZmVjdGl2ZSAqLwotCW1vdmwJJWVheCwgJWNyMAotCi0JLyogQXQgdGhpcyBwb2ludDoKLQkJQ1I0LlBBRSBtdXN0IGJlIDEKLQkJQ1MuTCBtdXN0IGJlIDAKLQkJQ1IzIG11c3QgcG9pbnQgdG8gUE1MNAotCQlOZXh0IGluc3RydWN0aW9uIG11c3QgYmUgYSBicmFuY2gKLQkJVGhpcyBtdXN0IGJlIG9uIGlkZW50aXR5LW1hcHBlZCBwYWdlCi0JKi8KLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgd2UncmUgaW4gbG9uZyBtb2RlIGJ1dCBpbiAzMmJpdCBjb21wYXRpYmlsaXR5IG1vZGUKLQkgKiB3aXRoIEVGRVIuTE1FID0gMSwgQ1MuTCA9IDAsIENTLkQgPSAxIChhbmQgaW4gdHVybgotCSAqIEVGRVIuTE1BID0gMSkuIE5vdyB3ZSB3YW50IHRvIGp1bXAgaW4gNjRiaXQgbW9kZSwgdG8gZG8gdGhhdCB3ZSBsb2FkCi0JICogdGhlIG5ldyBnZHQvaWR0IHRoYXQgaGFzIF9fS0VSTkVMX0NTIHdpdGggQ1MuTCA9IDEuCi0JICovCi0KLQkvKiBGaW5hbGx5IGp1bXAgaW4gNjRiaXQgbW9kZSAqLwotICAgICAgICBsam1wICAgICood2FrZXVwX2xvbmc2NF92ZWN0b3IgLSB3YWtldXBfY29kZSkoJWVzaSkKLQotCS5iYWxpZ24gNAotd2FrZXVwX2xvbmc2NF92ZWN0b3I6Ci0JLmxvbmcgICB3YWtldXBfbG9uZzY0IC0gd2FrZXVwX2NvZGUKLQkud29yZCAgIF9fS0VSTkVMX0NTLCAwCiAKIC5jb2RlNjQKLQotCS8qIEhvb3JheSwgd2UgYXJlIGluIExvbmcgNjQtYml0IG1vZGUgKGJ1dCBzdGlsbCBydW5uaW5nIGluCi0JICogbG93IG1lbW9yeSkKLQkgKi8KLXdha2V1cF9sb25nNjQ6CiAJLyoKLQkgKiBXZSBtdXN0IHN3aXRjaCB0byBhIG5ldyBkZXNjcmlwdG9yIGluIGtlcm5lbCBzcGFjZSBmb3IgdGhlIEdEVAotCSAqIGJlY2F1c2Ugc29vbiB0aGUga2VybmVsIHdvbid0IGhhdmUgYWNjZXNzIGFueW1vcmUgdG8gdGhlIHVzZXJzcGFjZQotCSAqIGFkZHJlc3NlcyB3aGVyZSB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbi4gV2UgaGF2ZSB0byBkbyB0aGF0IGhlcmUKLQkgKiBiZWNhdXNlIGluIDMyYml0IHdlIGNvdWxkbid0IGxvYWQgYSA2NGJpdCBsaW5lYXIgYWRkcmVzcy4KKwkgKiBIb29yYXksIHdlIGFyZSBpbiBMb25nIDY0LWJpdCBtb2RlIChidXQgc3RpbGwgcnVubmluZyBpbiBsb3cgbWVtb3J5KQogCSAqLwotCWxnZHQJY3B1X2dkdF9kZXNjcgorRU5UUlkod2FrZXVwX2xvbmc2NCkKK3dha2V1cF9sb25nNjQ6CisJbW92cQlzYXZlZF9tYWdpYywgJXJheAorCW1vdnEJJDB4MTIzNDU2Nzg5YWJjZGVmMCwgJXJkeAorCWNtcHEJJXJkeCwgJXJheAorCWpuZQlib2d1c182NF9tYWdpYwogCi0JbW92cSAgICBzYXZlZF9tYWdpYywgJXJheAotCW1vdnEgICAgJDB4MTIzNDU2Nzg5YWJjZGVmMCwgJXJkeAotCWNtcHEgICAgJXJkeCwgJXJheAotCWpuZSAgICAgYm9ndXNfNjRfbWFnaWMKLQotCW5vcAotCW5vcAogCW1vdncJJF9fS0VSTkVMX0RTLCAlYXgKIAltb3Z3CSVheCwgJXNzCQogCW1vdncJJWF4LCAlZHMKQEAgLTIwOCwxMzAgKzM1LDggQEAKIAltb3ZxCXNhdmVkX3JpcCwgJXJheAogCWptcAkqJXJheAogCi0uY29kZTMyCi0KLQkuYWxpZ24JNjQJCi1nZHRhOgotCS8qIEl0cyBnb29kIHRvIGtlZXAgZ2R0IGluIHN5bmMgd2l0aCBvbmUgaW4gdHJhbXBvbGluZS5TICovCi0JLndvcmQJMCwgMCwgMCwgMAkJCSMgZHVtbXkKLQkvKiA/Pz8gV2h5IEkgbmVlZCB0aGUgYWNjZXNzZWQgYml0IHNldCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrPyAqLwotCS5xdWFkICAgMHgwMGNmOWIwMDAwMDBmZmZmICAgICAgICAgICAgICAjIF9fS0VSTkVMMzJfQ1MKLQkucXVhZCAgIDB4MDBhZjliMDAwMDAwZmZmZiAgICAgICAgICAgICAgIyBfX0tFUk5FTF9DUwotCS5xdWFkICAgMHgwMGNmOTMwMDAwMDBmZmZmICAgICAgICAgICAgICAjIF9fS0VSTkVMX0RTCi0KLWlkdF80OGE6Ci0JLndvcmQJMAkJCQkjIGlkdCBsaW1pdCA9IDAKLQkud29yZAkwLCAwCQkJCSMgaWR0IGJhc2UgPSAwTAotCi1nZHRfNDhhOgotCS53b3JkCTB4ODAwCQkJCSMgZ2R0IGxpbWl0PTIwNDgsCi0JCQkJCQkjICAyNTYgR0RUIGVudHJpZXMKLQkubG9uZyAgIGdkdGEgLSB3YWtldXBfY29kZSAgICAgICAgICAgICAgIyBnZHQgYmFzZSAocmVsb2NhdGVkIGluIGxhdGVyKQotCQotcmVhbF9tYWdpYzoJLnF1YWQgMAotdmlkZW9fbW9kZToJLnF1YWQgMAotcmVhbG1vZGVfZmxhZ3M6CS5xdWFkIDAKLQotLmNvZGUxNgotYm9ndXNfcmVhbF9tYWdpYzoKLQlqbXAgYm9ndXNfcmVhbF9tYWdpYwotCi0uY29kZTY0CiBib2d1c182NF9tYWdpYzoKLQlqbXAgYm9ndXNfNjRfbWFnaWMKLQotLyogVGhpcyBjb2RlIHVzZXMgYW4gZXh0ZW5kZWQgc2V0IG9mIHZpZGVvIG1vZGUgbnVtYmVycy4gVGhlc2UgaW5jbHVkZToKLSAqIEFsaWFzZXMgZm9yIHN0YW5kYXJkIG1vZGVzCi0gKglOT1JNQUxfVkdBICgtMSkKLSAqCUVYVEVOREVEX1ZHQSAoLTIpCi0gKglBU0tfVkdBICgtMykKLSAqIFZpZGVvIG1vZGVzIG51bWJlcmVkIGJ5IG1lbnUgcG9zaXRpb24gLS0gTk9UIFJFQ09NTUVOREVEIGJlY2F1c2Ugb2YgbGFjawotICogb2YgY29tcGF0aWJpbGl0eSB3aGVuIGV4dGVuZGluZyB0aGUgdGFibGUuIFRoZXNlIGFyZSBiZXR3ZWVuIDB4MDAgYW5kIDB4ZmYuCi0gKi8KLSNkZWZpbmUgVklERU9fRklSU1RfTUVOVSAweDAwMDAKLQotLyogU3RhbmRhcmQgQklPUyB2aWRlbyBtb2RlcyAoQklPUyBudW1iZXIgKyAweDAxMDApICovCi0jZGVmaW5lIFZJREVPX0ZJUlNUX0JJT1MgMHgwMTAwCi0KLS8qIFZFU0EgQklPUyB2aWRlbyBtb2RlcyAoVkVTQSBudW1iZXIgKyAweDAyMDApICovCi0jZGVmaW5lIFZJREVPX0ZJUlNUX1ZFU0EgMHgwMjAwCi0KLS8qIFZpZGVvNyBzcGVjaWFsIG1vZGVzIChCSU9TIG51bWJlciArIDB4MDkwMCkgKi8KLSNkZWZpbmUgVklERU9fRklSU1RfVjcgMHgwOTAwCi0KLSMgU2V0dGluZyBvZiB1c2VyIG1vZGUgKEFYPW1vZGUgSUQpID0+IENGPXN1Y2Nlc3MKLQotIyBGb3Igbm93LCB3ZSBvbmx5IGhhbmRsZSBWRVNBIG1vZGVzICgweDAyMDAuLjB4MDNmZikuICBUbyBoYW5kbGUgb3RoZXIKLSMgbW9kZXMsIHdlIHNob3VsZCBwcm9iYWJseSBjb21waWxlIGluIHRoZSB2aWRlbyBjb2RlIGZyb20gdGhlIGJvb3QKLSMgZGlyZWN0b3J5LgotLmNvZGUxNgotbW9kZV9zZXQ6Ci0JbW92dwklYXgsICVieAotCXN1YmIJJFZJREVPX0ZJUlNUX1ZFU0E+PjgsICViaAotCWNtcGIJJDIsICViaAotCWpiCWNoZWNrX3Zlc2EKLQotc2V0YmFkOgotCWNsYwotCXJldAotCi1jaGVja192ZXNhOgotCW9ydwkkMHg0MDAwLCAlYngJCQkjIFVzZSBsaW5lYXIgZnJhbWUgYnVmZmVyCi0JbW92dwkkMHg0ZjAyLCAlYXgJCQkjIFZFU0EgQklPUyBtb2RlIHNldCBjYWxsCi0JaW50CSQweDEwCi0JY21wdwkkMHgwMDRmLCAlYXgJCQkjIEFMPTRmIGlmIGltcGxlbWVudGVkCi0Jam56CXNldGJhZAkJCQkjIEFIPTAgaWYgT0sKLQotCXN0YwotCXJldAotCi13YWtldXBfc3RhY2tfYmVnaW46CSMgU3RhY2sgZ3Jvd3MgZG93bgotCi0ub3JnCTB4ZmYwCi13YWtldXBfc3RhY2s6CQkjIEp1c3QgYmVsb3cgZW5kIG9mIHBhZ2UKLQotLm9yZyAgIDB4MTAwMAotRU5UUlkod2FrZXVwX2xldmVsNF9wZ3QpCi0JLnF1YWQgICBsZXZlbDNfaWRlbnRfcGd0IC0gX19TVEFSVF9LRVJORUxfbWFwICsgX0tFUk5QR19UQUJMRQotCS5maWxsICAgNTEwLDgsMAotCS8qICgyXjQ4LSgyKjEwMjQqMTAyNCoxMDI0KSkvKDJeMzkpID0gNTExICovCi0JLnF1YWQgICBsZXZlbDNfa2VybmVsX3BndCAtIF9fU1RBUlRfS0VSTkVMX21hcCArIF9LRVJOUEdfVEFCTEUKLQotRU5UUlkod2FrZXVwX2VuZCkKLQkKLSMjCi0jIGFjcGlfY29weV93YWtldXBfcm91dGluZQotIwotIyBDb3B5IHRoZSBhYm92ZSByb3V0aW5lIHRvIGxvdyBtZW1vcnkuCi0jCi0jIFBhcmFtZXRlcnM6Ci0jICVyZGk6CXBsYWNlIHRvIGNvcHkgd2FrZXVwIHJvdXRpbmUgdG8KLSMKLSMgUmV0dXJuZWQgYWRkcmVzcyBpcyBsb2NhdGlvbiBvZiBjb2RlIGluIGxvdyBtZW1vcnkgKHBhc3QgZGF0YSBhbmQgc3RhY2spCi0jCi0JLmNvZGU2NAotRU5UUlkoYWNwaV9jb3B5X3dha2V1cF9yb3V0aW5lKQotCXB1c2hxCSVyYXgKLQlwdXNocQklcmR4Ci0KLQltb3ZsCXNhdmVkX3ZpZGVvX21vZGUsICVlZHgKLQltb3ZsCSVlZHgsIHZpZGVvX21vZGUgLSB3YWtldXBfc3RhcnQgKCwlcmRpKQotCW1vdmwJYWNwaV9yZWFsbW9kZV9mbGFncywgJWVkeAotCW1vdmwJJWVkeCwgcmVhbG1vZGVfZmxhZ3MgLSB3YWtldXBfc3RhcnQgKCwlcmRpKQotCW1vdnEJJDB4MTIzNDU2NzgsIHJlYWxfbWFnaWMgLSB3YWtldXBfc3RhcnQgKCwlcmRpKQotCW1vdnEJJDB4MTIzNDU2Nzg5YWJjZGVmMCwgJXJkeAotCW1vdnEJJXJkeCwgc2F2ZWRfbWFnaWMKLQotCW1vdnEgICAgc2F2ZWRfbWFnaWMsICVyYXgKLQltb3ZxICAgICQweDEyMzQ1Njc4OWFiY2RlZjAsICVyZHgKLQljbXBxICAgICVyZHgsICVyYXgKLQlqbmUgICAgIGJvZ3VzXzY0X21hZ2ljCi0KLQkjIHJlc3RvcmUgdGhlIHJlZ3Mgd2UgdXNlZAotCXBvcHEJJXJkeAotCXBvcHEJJXJheAotRU5UUlkoZG9fc3VzcGVuZF9sb3dsZXZlbF9zNGJpb3MpCi0JcmV0CisJam1wCWJvZ3VzXzY0X21hZ2ljCiAKIAkuYWxpZ24gMgogCS5wMmFsaWduIDQsLDE1CkBAIC00MTQsNyArMTE5LDcgQEAKIAlqbXAJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUKIC5MRkU1OgogLkxmZTU6Ci0JLnNpemUJZG9fc3VzcGVuZF9sb3dsZXZlbCwuTGZlNS1kb19zdXNwZW5kX2xvd2xldmVsCisJLnNpemUJZG9fc3VzcGVuZF9sb3dsZXZlbCwgLkxmZTUtZG9fc3VzcGVuZF9sb3dsZXZlbAogCQogLmRhdGEKIEFMSUdOCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfcm0uUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF9ybS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjNiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfcm0uUwpAQCAtMCwwICsxLDEwIEBACisvKgorICogV3JhcHBlciBzY3JpcHQgZm9yIHRoZSByZWFsbW9kZSBiaW5hcnkgYXMgYSB0cmFuc3BvcnQgb2JqZWN0CisgKiBiZWZvcmUgY29weWluZyB0byBsb3cgbWVtb3J5LgorICovCisJLnNlY3Rpb24gIi5yb2RhdGEiLCJhIgorCS5nbG9ibAl3YWtldXBfY29kZV9zdGFydCwgd2FrZXVwX2NvZGVfZW5kCit3YWtldXBfY29kZV9zdGFydDoKKwkuaW5jYmluCSJhcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAuYmluIgord2FrZXVwX2NvZGVfZW5kOgorCS5zaXplCXdha2V1cF9jb2RlX3N0YXJ0LCAuLXdha2V1cF9jb2RlX3N0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDQ1ZDc5ZWEuLmRmNDA5OWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0xMSw2ICsxMSw4IEBACiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlIDxhc20vdnN5c2NhbGwuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIE1BWF9QQVRDSF9MRU4gKDI1NS0xKQogCkBAIC02NSw3ICs2Nyw4IEBACiAgICBnZXQgdGhlbSBlYXNpbHkgaW50byBzdHJpbmdzLiAqLwogYXNtKCJcdC5zZWN0aW9uIC5yb2RhdGEsIFwiYVwiXG5pbnRlbG5vcHM6ICIKIAlHRU5FUklDX05PUDEgR0VORVJJQ19OT1AyIEdFTkVSSUNfTk9QMyBHRU5FUklDX05PUDQgR0VORVJJQ19OT1A1IEdFTkVSSUNfTk9QNgotCUdFTkVSSUNfTk9QNyBHRU5FUklDX05PUDgpOworCUdFTkVSSUNfTk9QNyBHRU5FUklDX05PUDgKKyAgICAiXHQucHJldmlvdXMiKTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGludGVsbm9wc1tdOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGludGVsX25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CiAJTlVMTCwKQEAgLTgzLDcgKzg2LDggQEAKICNpZmRlZiBLOF9OT1AxCiBhc20oIlx0LnNlY3Rpb24gLnJvZGF0YSwgXCJhXCJcbms4bm9wczogIgogCUs4X05PUDEgSzhfTk9QMiBLOF9OT1AzIEs4X05PUDQgSzhfTk9QNSBLOF9OT1A2Ci0JSzhfTk9QNyBLOF9OT1A4KTsKKwlLOF9OT1A3IEs4X05PUDgKKyAgICAiXHQucHJldmlvdXMiKTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGs4bm9wc1tdOwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGs4X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CiAJTlVMTCwKQEAgLTEwMSw3ICsxMDUsOCBAQAogI2lmZGVmIEs3X05PUDEKIGFzbSgiXHQuc2VjdGlvbiAucm9kYXRhLCBcImFcIlxuazdub3BzOiAiCiAJSzdfTk9QMSBLN19OT1AyIEs3X05PUDMgSzdfTk9QNCBLN19OT1A1IEs3X05PUDYKLQlLN19OT1A3IEs3X05PUDgpOworCUs3X05PUDcgSzdfTk9QOAorICAgICJcdC5wcmV2aW91cyIpOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgazdub3BzW107CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3Qgazdfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKIAlOVUxMLApAQCAtMTE5LDcgKzEyNCw4IEBACiAjaWZkZWYgUDZfTk9QMQogYXNtKCJcdC5zZWN0aW9uIC5yb2RhdGEsIFwiYVwiXG5wNm5vcHM6ICIKIAlQNl9OT1AxIFA2X05PUDIgUDZfTk9QMyBQNl9OT1A0IFA2X05PUDUgUDZfTk9QNgotCVA2X05PUDcgUDZfTk9QOCk7CisJUDZfTk9QNyBQNl9OT1A4CisgICAgIlx0LnByZXZpb3VzIik7CiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBwNm5vcHNbXTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBwNl9ub3BzW0FTTV9OT1BfTUFYKzFdID0gewogCU5VTEwsCkBAIC0xNzMsNyArMTc5LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAKIC8qIFVzZSB0aGlzIHRvIGFkZCBub3BzIHRvIGEgYnVmZmVyLCB0aGVuIHRleHRfcG9rZSB0aGUgd2hvbGUgYnVmZmVyLiAqLwotc3RhdGljIHZvaWQgYWRkX25vcHModm9pZCAqaW5zbnMsIHVuc2lnbmVkIGludCBsZW4pCit2b2lkIGFkZF9ub3BzKHZvaWQgKmluc25zLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0ICpub3B0YWJsZSA9IGZpbmRfbm9wX3RhYmxlKCk7CiAKQEAgLTE4Niw2ICsxOTIsNyBAQAogCQlsZW4gLT0gbm9wbGVuOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGFkZF9ub3BzKTsKIAogZXh0ZXJuIHN0cnVjdCBhbHRfaW5zdHIgX19hbHRfaW5zdHJ1Y3Rpb25zW10sIF9fYWx0X2luc3RydWN0aW9uc19lbmRbXTsKIGV4dGVybiB1OCAqX19zbXBfbG9ja3NbXSwgKl9fc21wX2xvY2tzX2VuZFtdOwpAQCAtMjAxLDcgKzIwOCw3IEBACiAJc3RydWN0IGFsdF9pbnN0ciAqYTsKIAljaGFyIGluc25idWZbTUFYX1BBVENIX0xFTl07CiAKLQlEUFJJTlRLKCIlczogYWx0IHRhYmxlICVwIC0+ICVwXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXJ0LCBlbmQpOworCURQUklOVEsoIiVzOiBhbHQgdGFibGUgJXAgLT4gJXBcbiIsIF9fZnVuY19fLCBzdGFydCwgZW5kKTsKIAlmb3IgKGEgPSBzdGFydDsgYSA8IGVuZDsgYSsrKSB7CiAJCXU4ICppbnN0ciA9IGEtPmluc3RyOwogCQlCVUdfT04oYS0+cmVwbGFjZW1lbnRsZW4gPiBhLT5pbnN0cmxlbik7CkBAIC0yMTMsMTMgKzIyMCwxMyBAQAogCQlpZiAoaW5zdHIgPj0gKHU4ICopVlNZU0NBTExfU1RBUlQgJiYgaW5zdHIgPCAodTgqKVZTWVNDQUxMX0VORCkgewogCQkJaW5zdHIgPSBfX3ZhKGluc3RyIC0gKHU4KilWU1lTQ0FMTF9TVEFSVCArICh1OCopX19wYV9zeW1ib2woJl9fdnN5c2NhbGxfMCkpOwogCQkJRFBSSU5USygiJXM6IHZzeXNjYWxsIGZpeHVwOiAlcCA9PiAlcFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGEtPmluc3RyLCBpbnN0cik7CisJCQkJX19mdW5jX18sIGEtPmluc3RyLCBpbnN0cik7CiAJCX0KICNlbmRpZgogCQltZW1jcHkoaW5zbmJ1ZiwgYS0+cmVwbGFjZW1lbnQsIGEtPnJlcGxhY2VtZW50bGVuKTsKIAkJYWRkX25vcHMoaW5zbmJ1ZiArIGEtPnJlcGxhY2VtZW50bGVuLAogCQkJIGEtPmluc3RybGVuIC0gYS0+cmVwbGFjZW1lbnRsZW4pOwotCQl0ZXh0X3Bva2UoaW5zdHIsIGluc25idWYsIGEtPmluc3RybGVuKTsKKwkJdGV4dF9wb2tlX2Vhcmx5KGluc3RyLCBpbnNuYnVmLCBhLT5pbnN0cmxlbik7CiAJfQogfQogCkBAIC0yODAsNyArMjg3LDYgQEAKIAkJCQkgdm9pZCAqdGV4dCwgIHZvaWQgKnRleHRfZW5kKQogewogCXN0cnVjdCBzbXBfYWx0X21vZHVsZSAqc21wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAobm9yZXBsYWNlX3NtcCkKIAkJcmV0dXJuOwpAQCAtMzAzLDQyICszMDksNDAgQEAKIAlzbXAtPnRleHQJPSB0ZXh0OwogCXNtcC0+dGV4dF9lbmQJPSB0ZXh0X2VuZDsKIAlEUFJJTlRLKCIlczogbG9ja3MgJXAgLT4gJXAsIHRleHQgJXAgLT4gJXAsIG5hbWUgJXNcbiIsCi0JCV9fRlVOQ1RJT05fXywgc21wLT5sb2Nrcywgc21wLT5sb2Nrc19lbmQsCisJCV9fZnVuY19fLCBzbXAtPmxvY2tzLCBzbXAtPmxvY2tzX2VuZCwKIAkJc21wLT50ZXh0LCBzbXAtPnRleHRfZW5kLCBzbXAtPm5hbWUpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtcF9hbHQsIGZsYWdzKTsKKwlzcGluX2xvY2soJnNtcF9hbHQpOwogCWxpc3RfYWRkX3RhaWwoJnNtcC0+bmV4dCwgJnNtcF9hbHRfbW9kdWxlcyk7CiAJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9VUCkpCiAJCWFsdGVybmF0aXZlc19zbXBfdW5sb2NrKHNtcC0+bG9ja3MsIHNtcC0+bG9ja3NfZW5kLAogCQkJCQlzbXAtPnRleHQsIHNtcC0+dGV4dF9lbmQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtcF9hbHQsIGZsYWdzKTsKKwlzcGluX3VubG9jaygmc21wX2FsdCk7CiB9CiAKIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgKml0ZW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChzbXBfYWx0X29uY2UgfHwgbm9yZXBsYWNlX3NtcCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtcF9hbHQsIGZsYWdzKTsKKwlzcGluX2xvY2soJnNtcF9hbHQpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlbSwgJnNtcF9hbHRfbW9kdWxlcywgbmV4dCkgewogCQlpZiAobW9kICE9IGl0ZW0tPm1vZCkKIAkJCWNvbnRpbnVlOwogCQlsaXN0X2RlbCgmaXRlbS0+bmV4dCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtcF9hbHQsIGZsYWdzKTsKLQkJRFBSSU5USygiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGl0ZW0tPm5hbWUpOworCQlzcGluX3VubG9jaygmc21wX2FsdCk7CisJCURQUklOVEsoIiVzOiAlc1xuIiwgX19mdW5jX18sIGl0ZW0tPm5hbWUpOwogCQlrZnJlZShpdGVtKTsKIAkJcmV0dXJuOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXBfYWx0LCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnNtcF9hbHQpOwogfQogCiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApCiB7CiAJc3RydWN0IHNtcF9hbHRfbW9kdWxlICptb2Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCiAJLyoKQEAgLTM1NSw3ICszNTksNyBAQAogCQlyZXR1cm47CiAJQlVHX09OKCFzbXAgJiYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtcF9hbHQsIGZsYWdzKTsKKwlzcGluX2xvY2soJnNtcF9hbHQpOwogCiAJLyoKIAkgKiBBdm9pZCB1bm5lY2Vzc2FyeSBzd2l0Y2hlcyBiZWNhdXNlIGl0IGZvcmNlcyBKSVQgYmFzZWQgVk1zIHRvCkBAIC0zNzksNyArMzgzLDcgQEAKIAkJCQkJCW1vZC0+dGV4dCwgbW9kLT50ZXh0X2VuZCk7CiAJfQogCXNtcF9tb2RlID0gc21wOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtcF9hbHQsIGZsYWdzKTsKKwlzcGluX3VubG9jaygmc21wX2FsdCk7CiB9CiAKICNlbmRpZgpAQCAtNDA3LDcgKzQxMSw3IEBACiAKIAkJLyogUGFkIHRoZSByZXN0IHdpdGggbm9wcyAqLwogCQlhZGRfbm9wcyhpbnNuYnVmICsgdXNlZCwgcC0+bGVuIC0gdXNlZCk7Ci0JCXRleHRfcG9rZShwLT5pbnN0ciwgaW5zbmJ1ZiwgcC0+bGVuKTsKKwkJdGV4dF9wb2tlX2Vhcmx5KHAtPmluc3RyLCBpbnNuYnVmLCBwLT5sZW4pOwogCX0KIH0KIGV4dGVybiBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSBfX3N0YXJ0X3BhcmFpbnN0cnVjdGlvbnNbXSwKQEAgLTQxNiw4ICs0MjAsNiBAQAogCiB2b2lkIF9faW5pdCBhbHRlcm5hdGl2ZV9pbnN0cnVjdGlvbnModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJLyogVGhlIHBhdGNoaW5nIGlzIG5vdCBmdWxseSBhdG9taWMsIHNvIHRyeSB0byBhdm9pZCBsb2NhbCBpbnRlcnJ1cHRpb25zCiAJICAgdGhhdCBtaWdodCBleGVjdXRlIHRoZSB0byBiZSBwYXRjaGVkIGNvZGUuCiAJICAgT3RoZXIgQ1BVcyBhcmUgbm90IHJ1bm5pbmcuICovCkBAIC00MjYsNyArNDI4LDYgQEAKIAlzdG9wX21jZSgpOwogI2VuZGlmCiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYXBwbHlfYWx0ZXJuYXRpdmVzKF9fYWx0X2luc3RydWN0aW9ucywgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCk7CiAKIAkvKiBzd2l0Y2ggdG8gcGF0Y2gtb25jZS1hdC1ib290dGltZS1vbmx5IG1vZGUgYW5kIGZyZWUgdGhlCkBAIC00NTgsNyArNDU5LDYgQEAKIAl9CiAjZW5kaWYKICAJYXBwbHlfcGFyYXZpcnQoX19wYXJhaW5zdHJ1Y3Rpb25zLCBfX3BhcmFpbnN0cnVjdGlvbnNfZW5kKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAoc21wX2FsdF9vbmNlKQogCQlmcmVlX2luaXRfcGFnZXMoIlNNUCBhbHRlcm5hdGl2ZXMiLApAQCAtNDcxLDE4ICs0NzEsNzEgQEAKICNlbmRpZgogfQogCi0vKgotICogV2FybmluZzoKKy8qKgorICogdGV4dF9wb2tlX2Vhcmx5IC0gVXBkYXRlIGluc3RydWN0aW9ucyBvbiBhIGxpdmUga2VybmVsIGF0IGJvb3QgdGltZQorICogQGFkZHI6IGFkZHJlc3MgdG8gbW9kaWZ5CisgKiBAb3Bjb2RlOiBzb3VyY2Ugb2YgdGhlIGNvcHkKKyAqIEBsZW46IGxlbmd0aCB0byBjb3B5CisgKgogICogV2hlbiB5b3UgdXNlIHRoaXMgY29kZSB0byBwYXRjaCBtb3JlIHRoYW4gb25lIGJ5dGUgb2YgYW4gaW5zdHJ1Y3Rpb24KICAqIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IG90aGVyIENQVXMgY2Fubm90IGV4ZWN1dGUgdGhpcyBjb2RlIGluIHBhcmFsbGVsLgotICogQWxzbyBubyB0aHJlYWQgbXVzdCBiZSBjdXJyZW50bHkgcHJlZW1wdGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zLgotICogQW5kIG9uIHRoZSBsb2NhbCBDUFUgeW91IG5lZWQgdG8gYmUgcHJvdGVjdGVkIGFnYWluIE5NSSBvciBNQ0UgaGFuZGxlcnMKLSAqIHNlZWluZyBhbiBpbmNvbnNpc3RlbnQgaW5zdHJ1Y3Rpb24gd2hpbGUgeW91IHBhdGNoLgorICogQWxzbyBubyB0aHJlYWQgbXVzdCBiZSBjdXJyZW50bHkgcHJlZW1wdGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlc2UKKyAqIGluc3RydWN0aW9ucy4gQW5kIG9uIHRoZSBsb2NhbCBDUFUgeW91IG5lZWQgdG8gYmUgcHJvdGVjdGVkIGFnYWluIE5NSSBvciBNQ0UKKyAqIGhhbmRsZXJzIHNlZWluZyBhbiBpbmNvbnNpc3RlbnQgaW5zdHJ1Y3Rpb24gd2hpbGUgeW91IHBhdGNoLgogICovCi12b2lkIF9fa3Byb2JlcyB0ZXh0X3Bva2Uodm9pZCAqYWRkciwgdW5zaWduZWQgY2hhciAqb3Bjb2RlLCBpbnQgbGVuKQordm9pZCAqdGV4dF9wb2tlX2Vhcmx5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAltZW1jcHkoYWRkciwgb3Bjb2RlLCBsZW4pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlzeW5jX2NvcmUoKTsKIAkvKiBDb3VsZCBhbHNvIGRvIGEgQ0xGTFVTSCBoZXJlIHRvIHNwZWVkIHVwIENQVSByZWNvdmVyeTsgYnV0CiAJICAgdGhhdCBjYXVzZXMgaGFuZ3Mgb24gc29tZSBWSUEgQ1BVcy4gKi8KKwlyZXR1cm4gYWRkcjsKK30KKworLyoqCisgKiB0ZXh0X3Bva2UgLSBVcGRhdGUgaW5zdHJ1Y3Rpb25zIG9uIGEgbGl2ZSBrZXJuZWwKKyAqIEBhZGRyOiBhZGRyZXNzIHRvIG1vZGlmeQorICogQG9wY29kZTogc291cmNlIG9mIHRoZSBjb3B5CisgKiBAbGVuOiBsZW5ndGggdG8gY29weQorICoKKyAqIE9ubHkgYXRvbWljIHRleHQgcG9rZS9zZXQgc2hvdWxkIGJlIGFsbG93ZWQgd2hlbiBub3QgZG9pbmcgZWFybHkgcGF0Y2hpbmcuCisgKiBJdCBtZWFucyB0aGUgc2l6ZSBtdXN0IGJlIHdyaXRhYmxlIGF0b21pY2FsbHkgYW5kIHRoZSBhZGRyZXNzIG11c3QgYmUgYWxpZ25lZAorICogaW4gYSB3YXkgdGhhdCBwZXJtaXRzIGFuIGF0b21pYyB3cml0ZS4gSXQgYWxzbyBtYWtlcyBzdXJlIHdlIGZpdCBvbiBhIHNpbmdsZQorICogcGFnZS4KKyAqLwordm9pZCAqX19rcHJvYmVzIHRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICp2YWRkcjsKKwlpbnQgbnJfcGFnZXMgPSAyOworCisJQlVHX09OKGxlbiA+IHNpemVvZihsb25nKSk7CisJQlVHX09OKCgoKGxvbmcpYWRkciArIGxlbiAtIDEpICYgfihzaXplb2YobG9uZykgLSAxKSkKKwkJLSAoKGxvbmcpYWRkciAmIH4oc2l6ZW9mKGxvbmcpIC0gMSkpKTsKKwlpZiAoa2VybmVsX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylhZGRyKSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZXNbMl0gPSB7IHZpcnRfdG9fcGFnZShhZGRyKSwKKwkJCXZpcnRfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKSB9OworCQlpZiAoIXBhZ2VzWzFdKQorCQkJbnJfcGFnZXMgPSAxOworCQl2YWRkciA9IHZtYXAocGFnZXMsIG5yX3BhZ2VzLCBWTV9NQVAsIFBBR0VfS0VSTkVMKTsKKwkJQlVHX09OKCF2YWRkcik7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJbWVtY3B5KCZ2YWRkclsodW5zaWduZWQgbG9uZylhZGRyICYgflBBR0VfTUFTS10sIG9wY29kZSwgbGVuKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQl2dW5tYXAodmFkZHIpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIG1vZHVsZXMgYXJlIGluIHZtYWxsb2MnZWQgbWVtb3J5LCBhbHdheXMgd3JpdGFibGUuCisJCSAqLworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCW1lbWNweShhZGRyLCBvcGNvZGUsIGxlbik7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisJc3luY19jb3JlKCk7CisJLyogQ291bGQgYWxzbyBkbyBhIENMRkxVU0ggaGVyZSB0byBzcGVlZCB1cCBDUFUgcmVjb3Zlcnk7IGJ1dAorCSAgIHRoYXQgY2F1c2VzIGhhbmdzIG9uIHNvbWUgVklBIENQVXMuICovCisJcmV0dXJuIGFkZHI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCmluZGV4IDYwODE1MmEuLjQ3OTkyNmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KQEAgLTI2LDExICsyNywxMSBAQAogI2luY2x1ZGUgPGFzbS9rOC5oPgogCiBpbnQgZ2FydF9pb21tdV9hcGVydHVyZTsKLWludCBnYXJ0X2lvbW11X2FwZXJ0dXJlX2Rpc2FibGVkIF9faW5pdGRhdGEgPSAwOwotaW50IGdhcnRfaW9tbXVfYXBlcnR1cmVfYWxsb3dlZCBfX2luaXRkYXRhID0gMDsKK2ludCBnYXJ0X2lvbW11X2FwZXJ0dXJlX2Rpc2FibGVkIF9faW5pdGRhdGE7CitpbnQgZ2FydF9pb21tdV9hcGVydHVyZV9hbGxvd2VkIF9faW5pdGRhdGE7CiAKIGludCBmYWxsYmFja19hcGVyX29yZGVyIF9faW5pdGRhdGEgPSAxOyAvKiA2NE1CICovCi1pbnQgZmFsbGJhY2tfYXBlcl9mb3JjZSBfX2luaXRkYXRhID0gMDsKK2ludCBmYWxsYmFja19hcGVyX2ZvcmNlIF9faW5pdGRhdGE7CiAKIGludCBmaXhfYXBlcnR1cmUgX19pbml0ZGF0YSA9IDE7CiAKQEAgLTc2LDYgKzc3LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJNYXBwaW5nIGFwZXJ0dXJlIG92ZXIgJWQgS0Igb2YgUkFNIEAgJWx4XG4iLAogCQkJYXBlcl9zaXplID4+IDEwLCBfX3BhKHApKTsKIAlpbnNlcnRfYXBlcnR1cmVfcmVzb3VyY2UoKHUzMilfX3BhKHApLCBhcGVyX3NpemUpOworCXJlZ2lzdGVyX25vc2F2ZV9yZWdpb24oKHUzMilfX3BhKHApID4+IFBBR0VfU0hJRlQsCisJCQkJKHUzMilfX3BhKHArYXBlcl9zaXplKSA+PiBQQUdFX1NISUZUKTsKIAogCXJldHVybiAodTMyKV9fcGEocCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpY18zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYwppbmRleCAzNWE1NjhlLi42ODcyMDgxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpY18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMKQEAgLTUwLDYgKzUwLDExIEBACiAjIGVycm9yIFNQVVJJT1VTX0FQSUNfVkVDVE9SIGRlZmluaXRpb24gZXJyb3IKICNlbmRpZgogCit1bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7CisKK0RFRklORV9QRVJfQ1BVKHUxNiwgeDg2X2Jpb3NfY3B1X2FwaWNpZCkgPSBCQURfQVBJQ0lEOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHg4Nl9iaW9zX2NwdV9hcGljaWQpOworCiAvKgogICogS25vYiB0byBjb250cm9sIG91ciB3aWxsaW5nbmVzcyB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMuCiAgKgpAQCAtNjIxLDYgKzYyNiwzNSBAQAogfQogCiAvKgorICogU2V0dXAgZXh0ZW5kZWQgTFZULCBBTUQgc3BlY2lmaWMgKEs4LCBmYW1pbHkgMTBoKQorICoKKyAqIFZlY3RvciBtYXBwaW5ncyBhcmUgaGFyZCBjb2RlZC4gT24gSzggb25seSBvZmZzZXQgMCAoQVBJQzUwMCkgYW5kCisgKiBNQ0UgaW50ZXJydXB0cyBhcmUgc3VwcG9ydGVkLiBUaHVzIE1DRSBvZmZzZXQgbXVzdCBiZSBzZXQgdG8gMC4KKyAqLworCisjZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX01DRSAwCisjZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUyAxCisKK3N0YXRpYyB2b2lkIHNldHVwX0FQSUNfZWlsdnQodTggbHZ0X29mZiwgdTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChsdnRfb2ZmIDw8IDQpICsgQVBJQ19FSUxWVDA7CisJdW5zaWduZWQgaW50ICB2ICAgPSAobWFzayA8PCAxNikgfCAobXNnX3R5cGUgPDwgOCkgfCB2ZWN0b3I7CisJYXBpY193cml0ZShyZWcsIHYpOworfQorCit1OCBzZXR1cF9BUElDX2VpbHZ0X21jZSh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQoreworCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfTUNFLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKKwlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfTUNFOworfQorCit1OCBzZXR1cF9BUElDX2VpbHZ0X2licyh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQoreworCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfSUJTLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKKwlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfSUJTOworfQorCisvKgogICogTG9jYWwgQVBJQyBzdGFydCBhbmQgc2h1dGRvd24KICAqLwogCkBAIC04NjgsMTIgKzkwMiw1MCBAQAogCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMSwgdmFsdWUpOwogfQogCit2b2lkIF9fY3B1aW5pdCBsYXBpY19zZXR1cF9lc3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZHZhbHVlLCB2YWx1ZSwgbWF4bHZ0OworCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkgJiYgIWVzcl9kaXNhYmxlKSB7CisJCS8qICE4MjQ4OURYICovCisJCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKwkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCisJCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwkJb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCisJCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KKwkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKKwkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIHZhbHVlKTsKKwkJLyoKKwkJICogc3BlYyBzYXlzIGNsZWFyIGVycm9ycyBhZnRlciBlbmFibGluZyB2ZWN0b3IuCisJCSAqLworCQlpZiAobWF4bHZ0ID4gMykKKwkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7CisJCWlmICh2YWx1ZSAhPSBvbGR2YWx1ZSkKKwkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVTUiB2YWx1ZSBiZWZvcmUgZW5hYmxpbmcgIgorCQkJCSJ2ZWN0b3I6IDB4JTA4bHggIGFmdGVyOiAweCUwOGx4XG4iLAorCQkJCW9sZHZhbHVlLCB2YWx1ZSk7CisJfSBlbHNlIHsKKwkJaWYgKGVzcl9kaXNhYmxlKQorCQkJLyoKKwkJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgorCQkJICogc2Vjb25kYXJ5IHF1YWRzIC4uLiBmb3IgdGhlIG1vbWVudCwganVzdCBsZWF2ZSB0aGUKKwkJCSAqIEVTUiBkaXNhYmxlZCAtIHdlIGNhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIHRoZQorCQkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAorCQkJICovCisJCQlwcmludGsoS0VSTl9JTkZPICJMZWF2aW5nIEVTUiBkaXNhYmxlZC5cbiIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKKwl9Cit9CisKKwogLyoqCiAgKiBzZXR1cF9sb2NhbF9BUElDIC0gc2V0dXAgdGhlIGxvY2FsIEFQSUMKICAqLwogdm9pZCBfX2NwdWluaXQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgb2xkdmFsdWUsIHZhbHVlLCBtYXhsdnQsIGludGVncmF0ZWQ7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50ZWdyYXRlZDsKIAlpbnQgaSwgajsKIAogCS8qIFBvdW5kIHRoZSBFU1IgcmVhbGx5IGhhcmQgb3ZlciB0aGUgaGVhZCB3aXRoIGEgYmlnIGhhbW1lciAtIG1ibGlnaCAqLwpAQCAtOTk3LDQwICsxMDY5LDEzIEBACiAJaWYgKCFpbnRlZ3JhdGVkKQkJLyogODI0ODlEWCAqLwogCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwogCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMSwgdmFsdWUpOworfQogCi0JaWYgKGludGVncmF0ZWQgJiYgIWVzcl9kaXNhYmxlKSB7Ci0JCS8qICE4MjQ4OURYICovCi0JCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwordm9pZCBfX2NwdWluaXQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOwogCi0JCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KLQkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIHZhbHVlKTsKLQkJLyoKLQkJICogc3BlYyBzYXlzIGNsZWFyIGVycm9ycyBhZnRlciBlbmFibGluZyB2ZWN0b3IuCi0JCSAqLwotCQlpZiAobWF4bHZ0ID4gMykKLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JCWlmICh2YWx1ZSAhPSBvbGR2YWx1ZSkKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVTUiB2YWx1ZSBiZWZvcmUgZW5hYmxpbmcgIgotCQkJCSJ2ZWN0b3I6IDB4JTA4bHggIGFmdGVyOiAweCUwOGx4XG4iLAotCQkJCW9sZHZhbHVlLCB2YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGVzcl9kaXNhYmxlKQotCQkJLyoKLQkJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgotCQkJICogc2Vjb25kYXJ5IHF1YWRzIC4uLiBmb3IgdGhlIG1vbWVudCwganVzdCBsZWF2ZSB0aGUKLQkJCSAqIEVTUiBkaXNhYmxlZCAtIHdlIGNhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIHRoZQotCQkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAotCQkJICovCi0JCQlwcmludGsoS0VSTl9JTkZPICJMZWF2aW5nIEVTUiBkaXNhYmxlZC5cbiIpOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPICJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKLQl9Ci0KKwlsYXBpY19zZXR1cF9lc3IoKTsKIAkvKiBEaXNhYmxlIHRoZSBsb2NhbCBhcGljIHRpbWVyICovCiAJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKIAl2YWx1ZSB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKQEAgLTExNDcsNyArMTE5Miw3IEBACiAJICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KIAkgKi8KIAlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID09IC0xVSkKLQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKKwkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJewpAQCAtMTE4NSw2ICsxMjMwLDkgQEAKICAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcwogICogYSBVUCBrZXJuZWwuCiAgKi8KKworaW50IGFwaWNfdmVyc2lvbltNQVhfQVBJQ1NdOworCiBpbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCkKIHsKIAlpZiAoZW5hYmxlX2xvY2FsX2FwaWMgPCAwKQpAQCAtMTIxNCwxMiArMTI2MiwxMyBAQAogCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCiAJICovCiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IEdFVF9BUElDX0lEKHJlYWRfYXBpY19pZCgpKTsKICNlbmRpZgogCXBoeXNfY3B1X3ByZXNlbnRfbWFwID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CiAKIAlzZXR1cF9sb2NhbF9BUElDKCk7CiAKKwllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCWlmIChzbXBfZm91bmRfY29uZmlnKQogCQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCkBAIC0xMjg4LDYgKzEzMzcsMjkgQEAKIAlpcnFfZXhpdCgpOwogfQogCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgc21wX2ludHJfaW5pdCh2b2lkKQoreworCS8qCisJICogSVJRMCBtdXN0IGJlIGdpdmVuIGEgZml4ZWQgYXNzaWdubWVudCBhbmQgaW5pdGlhbGl6ZWQsCisJICogYmVjYXVzZSBpdCdzIHVzZWQgYmVmb3JlIHRoZSBJTy1BUElDIGlzIHNldCB1cC4KKwkgKi8KKwlzZXRfaW50cl9nYXRlKEZJUlNUX0RFVklDRV9WRUNUT1IsIGludGVycnVwdFswXSk7CisKKwkvKgorCSAqIFRoZSByZXNjaGVkdWxlIGludGVycnVwdCBpcyBhIENQVS10by1DUFUgcmVzY2hlZHVsZS1oZWxwZXIKKwkgKiBJUEksIGRyaXZlbiBieSB3YWtldXAuCisJICovCisJc2V0X2ludHJfZ2F0ZShSRVNDSEVEVUxFX1ZFQ1RPUiwgcmVzY2hlZHVsZV9pbnRlcnJ1cHQpOworCisJLyogSVBJIGZvciBpbnZhbGlkYXRpb24gKi8KKwlzZXRfaW50cl9nYXRlKElOVkFMSURBVEVfVExCX1ZFQ1RPUiwgaW52YWxpZGF0ZV9pbnRlcnJ1cHQpOworCisJLyogSVBJIGZvciBnZW5lcmljIGZ1bmN0aW9uIGNhbGwgKi8KKwlzZXRfaW50cl9nYXRlKENBTExfRlVOQ1RJT05fVkVDVE9SLCBjYWxsX2Z1bmN0aW9uX2ludGVycnVwdCk7Cit9CisjZW5kaWYKKwogLyoKICAqIEluaXRpYWxpemUgQVBJQyBpbnRlcnJ1cHRzCiAgKi8KQEAgLTEzOTQsNiArMTQ2Niw4OCBAQAogCX0KIH0KIAordW5zaWduZWQgaW50IF9fY3B1aW5pdGRhdGEgbWF4Y3B1cyA9IE5SX0NQVVM7CisKK3ZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCit7CisJaW50IGNwdTsKKwljcHVtYXNrX3QgdG1wX21hcDsKKwlwaHlzaWRfbWFza190IHBoeXNfY3B1OworCisJLyoKKwkgKiBWYWxpZGF0ZSB2ZXJzaW9uCisJICovCisJaWYgKHZlcnNpb24gPT0gMHgwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgYnVnLCBBUElDIHZlcnNpb24gaXMgMCBmb3IgQ1BVIyVkISAiCisJCQkJImZpeGluZyB1cCB0byAweDEwLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCisJCQkJdmVyc2lvbik7CisJCXZlcnNpb24gPSAweDEwOworCX0KKwlhcGljX3ZlcnNpb25bYXBpY2lkXSA9IHZlcnNpb247CisKKwlwaHlzX2NwdSA9IGFwaWNpZF90b19jcHVfcHJlc2VudChhcGljaWQpOworCXBoeXNpZHNfb3IocGh5c19jcHVfcHJlc2VudF9tYXAsIHBoeXNfY3B1X3ByZXNlbnRfbWFwLCBwaHlzX2NwdSk7CisKKwlpZiAobnVtX3Byb2Nlc3NvcnMgPj0gTlJfQ1BVUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBOUl9DUFVTIGxpbWl0IG9mICVpIHJlYWNoZWQuIgorCQkJIiAgUHJvY2Vzc29yIGlnbm9yZWQuXG4iLCBOUl9DUFVTKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChudW1fcHJvY2Vzc29ycyA+PSBtYXhjcHVzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IG1heGNwdXMgbGltaXQgb2YgJWkgcmVhY2hlZC4iCisJCQkiIFByb2Nlc3NvciBpZ25vcmVkLlxuIiwgbWF4Y3B1cyk7CisJCXJldHVybjsKKwl9CisKKwludW1fcHJvY2Vzc29ycysrOworCWNwdXNfY29tcGxlbWVudCh0bXBfbWFwLCBjcHVfcHJlc2VudF9tYXApOworCWNwdSA9IGZpcnN0X2NwdSh0bXBfbWFwKTsKKworCWlmIChhcGljaWQgPT0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKQorCQkvKgorCQkgKiB4ODZfYmlvc19jcHVfYXBpY2lkIGlzIHJlcXVpcmVkIHRvIGhhdmUgcHJvY2Vzc29ycyBsaXN0ZWQKKwkJICogaW4gc2FtZSBvcmRlciBhcyBsb2dpY2FsIGNwdSBudW1iZXJzLiBIZW5jZSB0aGUgZmlyc3QKKwkJICogZW50cnkgaXMgQlNQLCBhbmQgc28gb24uCisJCSAqLworCQljcHUgPSAwOworCisJLyoKKwkgKiBXb3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBiaWdzbXAgd2hlbiBDT05GSUdfSE9UUExVR19DUFU9eQorCSAqIGJ1dCB3ZSBuZWVkIHRvIHdvcmsgb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2UgU01QX1NVU1BFTkQgZXRjCisJICogYmVmb3JlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBzb21lIGNvbmZ1c2lvbi4KKwkgKiBpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCBudW1fcHJvY2Vzc29ycyA+IDgpCisJICogICAgICAgLSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+CisJICovCisJaWYgKG51bV9wcm9jZXNzb3JzID4gOCkgeworCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKKwkJCQlkZWZfdG9fYmlnc21wID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJCWRlZl90b19iaWdzbXAgPSAxOworCQl9CisJfQorI2lmZGVmIENPTkZJR19TTVAKKwkvKiBhcmUgd2UgYmVpbmcgY2FsbGVkIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwPyAqLworCWlmICh4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHIpIHsKKwkJdTE2ICpjcHVfdG9fYXBpY2lkID0geDg2X2NwdV90b19hcGljaWRfZWFybHlfcHRyOworCQl1MTYgKmJpb3NfY3B1X2FwaWNpZCA9IHg4Nl9iaW9zX2NwdV9hcGljaWRfZWFybHlfcHRyOworCisJCWNwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKKwkJYmlvc19jcHVfYXBpY2lkW2NwdV0gPSBhcGljaWQ7CisJfSBlbHNlIHsKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKKwkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0gYXBpY2lkOworCX0KKyNlbmRpZgorCWNwdV9zZXQoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKKwljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKK30KKwogLyoKICAqIFBvd2VyIG1hbmFnZW1lbnQKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljXzY0LmMKaW5kZXggZDhkMDNlMC4uOWU4ZTVjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpY182NC5jCkBAIC0zNCwxMyArMzQsMTUgQEAKICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vdGltZXguaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogCisjaW5jbHVkZSA8bWFjaF9pcGkuaD4KKyNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKwogaW50IGRpc2FibGVfYXBpY190aW1lciBfX2NwdWluaXRkYXRhOwogc3RhdGljIGludCBhcGljX2NhbGlicmF0ZV9wbXRtciBfX2luaXRkYXRhOwogaW50IGRpc2FibGVfYXBpYzsKQEAgLTgzLDYgKzg1LDEyIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFwaWNfcGh5czsKIAordW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOworCitERUZJTkVfUEVSX0NQVSh1MTYsIHg4Nl9iaW9zX2NwdV9hcGljaWQpID0gQkFEX0FQSUNJRDsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTCh4ODZfYmlvc19jcHVfYXBpY2lkKTsKKwordW5zaWduZWQgaW50IF9fY3B1aW5pdGRhdGEgbWF4Y3B1cyA9IE5SX0NQVVM7CiAvKgogICogR2V0IHRoZSBMQVBJQyB2ZXJzaW9uCiAgKi8KQEAgLTQzMSw3ICs0MzksOCBAQAogCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX0ZPUkNFLCAmYm9vdF9jcHVfaWQpOworCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9GT1JDRSwKKwkJCSAgICZib290X2NwdV9waHlzaWNhbF9hcGljaWQpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiB9CiAKQEAgLTY0MCwxMCArNjQ5LDEwIEBACiAJLyoKIAkgKiBUaGUgSUQgcmVnaXN0ZXIgaXMgcmVhZC93cml0ZSBpbiBhIHJlYWwgQVBJQy4KIAkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfSUQpOworCXJlZzAgPSByZWFkX2FwaWNfaWQoKTsKIAlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzApOwogCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCBeIEFQSUNfSURfTUFTSyk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0lEKTsKKwlyZWcxID0gcmVhZF9hcGljX2lkKCk7CiAJYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgSUQ6ICV4XG4iLCByZWcxKTsKIAlhcGljX3dyaXRlKEFQSUNfSUQsIHJlZzApOwogCWlmIChyZWcxICE9IChyZWcwIF4gQVBJQ19JRF9NQVNLKSkKQEAgLTcyOCw2ICs3MzcsNyBAQAogCXVuc2lnbmVkIGludCB2YWx1ZTsKIAlpbnQgaSwgajsKIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKIAogCUJVSUxEX0JVR19PTigoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDBmKSAhPSAweDBmKTsKQEAgLTgyMSw2ICs4MzEsNyBAQAogCWVsc2UKIAkJdmFsdWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsKIAlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOworCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIHZvaWQgX19jcHVpbml0IGxhcGljX3NldHVwX2Vzcih2b2lkKQpAQCAtODU3LDEwICs4NjgsMzQgQEAKIAl9CiAKIAltcF9sYXBpY19hZGRyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKLQlib290X2NwdV9pZCA9IDA7CisJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gMDsKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9sYXBpY19tYXBwaW5nKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhcGljX3BoeXM7CisKKwkvKgorCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gZ28gb3V0CisJICogOiBpdCBtZWFucyB0aGVyZSBpcyBubyBtcGF0YWJsZSBhbmQgTUFEVAorCSAqLworCWlmICghc21wX2ZvdW5kX2NvbmZpZykKKwkJcmV0dXJuOworCisJYXBpY19waHlzID0gbXBfbGFwaWNfYWRkcjsKKworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhcGljX3BoeXMpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCisJCQkJIEFQSUNfQkFTRSwgYXBpY19waHlzKTsKKworCS8qCisJICogRmV0Y2ggdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBpbiBjYXNlIHdlIGhhdmUgYQorCSAqIGRlZmF1bHQgY29uZmlndXJhdGlvbiAob3IgdGhlIE1QIHRhYmxlIGlzIGJyb2tlbikuCisJICovCisJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpOworfQorCiAvKioKICAqIGluaXRfYXBpY19tYXBwaW5ncyAtIGluaXRpYWxpemUgQVBJQyBtYXBwaW5ncwogICovCkBAIC04ODEsMTYgKzkxNiwxMSBAQAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCiAJCQkJQVBJQ19CQVNFLCBhcGljX3BoeXMpOwogCi0JLyogUHV0IGxvY2FsIEFQSUMgaW50byB0aGUgcmVzb3VyY2UgbWFwLiAqLwotCWxhcGljX3Jlc291cmNlLnN0YXJ0ID0gYXBpY19waHlzOwotCWxhcGljX3Jlc291cmNlLmVuZCA9IGxhcGljX3Jlc291cmNlLnN0YXJ0ICsgUEFHRV9TSVpFIC0gMTsKLQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmbGFwaWNfcmVzb3VyY2UpOwotCiAJLyoKIAkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCiAJICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KIAkgKi8KLQlib290X2NwdV9pZCA9IEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSk7CisJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpOwogfQogCiAvKgpAQCAtOTExLDggKzk0MSw4IEBACiAKIAl2ZXJpZnlfbG9jYWxfQVBJQygpOwogCi0JcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfaWQpOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfaWQpKTsKKwlwaHlzX2NwdV9wcmVzZW50X21hcCA9IHBoeXNpZF9tYXNrX29mX3BoeXNpZChib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSk7CiAKIAlzZXR1cF9sb2NhbF9BUElDKCk7CiAKQEAgLTEwMjksNiArMTA1OSw1MiBAQAogCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCit7CisJaW50IGNwdTsKKwljcHVtYXNrX3QgdG1wX21hcDsKKworCWlmIChudW1fcHJvY2Vzc29ycyA+PSBOUl9DUFVTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IE5SX0NQVVMgbGltaXQgb2YgJWkgcmVhY2hlZC4iCisJCSAgICAgICAiIFByb2Nlc3NvciBpZ25vcmVkLlxuIiwgTlJfQ1BVUyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobnVtX3Byb2Nlc3NvcnMgPj0gbWF4Y3B1cykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBtYXhjcHVzIGxpbWl0IG9mICVpIHJlYWNoZWQuIgorCQkgICAgICAgIiBQcm9jZXNzb3IgaWdub3JlZC5cbiIsIG1heGNwdXMpOworCQlyZXR1cm47CisJfQorCisJbnVtX3Byb2Nlc3NvcnMrKzsKKwljcHVzX2NvbXBsZW1lbnQodG1wX21hcCwgY3B1X3ByZXNlbnRfbWFwKTsKKwljcHUgPSBmaXJzdF9jcHUodG1wX21hcCk7CisKKwlwaHlzaWRfc2V0KGFwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworCWlmIChhcGljaWQgPT0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSB7CisJCS8qCisJCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBwcm9jZXNzb3JzIGxpc3RlZAorCQkgKiBpbiBzYW1lIG9yZGVyIGFzIGxvZ2ljYWwgY3B1IG51bWJlcnMuIEhlbmNlIHRoZSBmaXJzdAorCQkgKiBlbnRyeSBpcyBCU1AsIGFuZCBzbyBvbi4KKwkJICovCisJCWNwdSA9IDA7CisJfQorCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCisJaWYgKHg4Nl9jcHVfdG9fYXBpY2lkX2Vhcmx5X3B0cikgeworCQl1MTYgKmNwdV90b19hcGljaWQgPSB4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHI7CisJCXUxNiAqYmlvc19jcHVfYXBpY2lkID0geDg2X2Jpb3NfY3B1X2FwaWNpZF9lYXJseV9wdHI7CisKKwkJY3B1X3RvX2FwaWNpZFtjcHVdID0gYXBpY2lkOworCQliaW9zX2NwdV9hcGljaWRbY3B1XSA9IGFwaWNpZDsKKwl9IGVsc2UgeworCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOworCQlwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkgPSBhcGljaWQ7CisJfQorCisJY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOworCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOworfQorCiAvKgogICogUG93ZXIgbWFuYWdlbWVudAogICovCkBAIC0xMDY1LDcgKzExNDEsNyBAQAogCiAJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwogCi0JYXBpY19wbV9zdGF0ZS5hcGljX2lkID0gYXBpY19yZWFkKEFQSUNfSUQpOworCWFwaWNfcG1fc3RhdGUuYXBpY19pZCA9IHJlYWRfYXBpY19pZCgpOwogCWFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7CiAJYXBpY19wbV9zdGF0ZS5hcGljX2xkciA9IGFwaWNfcmVhZChBUElDX0xEUik7CiAJYXBpY19wbV9zdGF0ZS5hcGljX2RmciA9IGFwaWNfcmVhZChBUElDX0RGUik7CkBAIC0xMTgwLDkgKzEyNTYsMTkgQEAKIHsKIAlpbnQgaSwgY2x1c3RlcnMsIHplcm9zOwogCXVuc2lnbmVkIGlkOwotCXUxNiAqYmlvc19jcHVfYXBpY2lkID0geDg2X2Jpb3NfY3B1X2FwaWNpZF9lYXJseV9wdHI7CisJdTE2ICpiaW9zX2NwdV9hcGljaWQ7CiAJREVDTEFSRV9CSVRNQVAoY2x1c3Rlcm1hcCwgTlVNX0FQSUNfQ0xVU1RFUlMpOwogCisJLyoKKwkgKiB0aGVyZSBpcyBub3QgdGhpcyBraW5kIG9mIGJveCB3aXRoIEFNRCBDUFUgeWV0LgorCSAqIFNvbWUgQU1EIGJveCB3aXRoIHF1YWRjb3JlIGNwdSBhbmQgOCBzb2NrZXRzIGFwaWNpZAorCSAqIHdpbGwgYmUgWzQsIDB4MjNdIG9yIFs4LCAweDI3XSBjb3VsZCBiZSB0aG91Z2h0IHRvCisJICogdnNtcCBib3ggc3RpbGwgbmVlZCBjaGVja2luZy4uLgorCSAqLworCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJiAhaXNfdnNtcF9ib3goKSkKKwkJcmV0dXJuIDA7CisKKwliaW9zX2NwdV9hcGljaWQgPSB4ODZfYmlvc19jcHVfYXBpY2lkX2Vhcmx5X3B0cjsKIAliaXRtYXBfemVybyhjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CkBAIC0xMjE5LDYgKzEzMDUsMTIgQEAKIAkJCSsremVyb3M7CiAJfQogCisJLyogU2NhbGVNUCB2U01Qb3dlcmVkIGJveGVzIGhhdmUgb25lIGNsdXN0ZXIgcGVyIGJvYXJkIGFuZCBUU0NzIGFyZQorCSAqIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN5bmNlZCBiZXR3ZWVuIGJvYXJkcworCSAqLworCWlmIChpc192c21wX2JveCgpICYmIGNsdXN0ZXJzID4gMSkKKwkJcmV0dXJuIDE7CisKIAkvKgogCSAqIElmIGNsdXN0ZXJzID4gMiwgdGhlbiBzaG91bGQgYmUgbXVsdGktY2hhc3Npcy4KIAkgKiBNYXkgaGF2ZSB0byByZXZpc2l0IHRoaXMgd2hlbiBtdWx0aS1jb3JlICsgaHlwZXJ0aHJlYWRlZCBDUFVzIGNvbWUKQEAgLTEyOTAsMyArMTM4MiwyMSBAQAogfQogX19zZXR1cCgiYXBpY3BtdGltZXIiLCBzZXR1cF9hcGljcG10aW1lcik7CiAKK3N0YXRpYyBpbnQgX19pbml0IGxhcGljX2luc2VydF9yZXNvdXJjZSh2b2lkKQoreworCWlmICghYXBpY19waHlzKQorCQlyZXR1cm4gLTE7CisKKwkvKiBQdXQgbG9jYWwgQVBJQyBpbnRvIHRoZSByZXNvdXJjZSBtYXAuICovCisJbGFwaWNfcmVzb3VyY2Uuc3RhcnQgPSBhcGljX3BoeXM7CisJbGFwaWNfcmVzb3VyY2UuZW5kID0gbGFwaWNfcmVzb3VyY2Uuc3RhcnQgKyBQQUdFX1NJWkUgLSAxOworCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsYXBpY19yZXNvdXJjZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5lZWQgY2FsbCBpbnNlcnQgYWZ0ZXIgZTgyMF9yZXNlcnZlX3Jlc291cmNlcygpCisgKiB0aGF0IGlzIHVzaW5nIHJlcXVlc3RfcmVzb3VyY2UKKyAqLworbGF0ZV9pbml0Y2FsbChsYXBpY19pbnNlcnRfcmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IGQ0NDM4ZWYuLmYwMDMwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTIyMTcsNyArMjIxNyw2IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGFwbV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICphcG1fcHJvYzsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdDsKIAlpbnQgZXJyOwogCkBAIC0yMzIyLDkgKzIzMjEsNyBAQAogCXNldF9iYXNlKGdkdFtBUE1fRFMgPj4gM10sCiAJCSBfX3ZhKCh1bnNpZ25lZCBsb25nKWFwbV9pbmZvLmJpb3MuZHNlZyA8PCA0KSk7CiAKLQlhcG1fcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJhcG0iLCAwLCBOVUxMKTsKLQlpZiAoYXBtX3Byb2MpCi0JCWFwbV9wcm9jLT5wcm9jX2ZvcHMgPSAmYXBtX2ZpbGVfb3BzOworCXByb2NfY3JlYXRlKCJhcG0iLCAwLCBOVUxMLCAmYXBtX2ZpbGVfb3BzKTsKIAogCWthcG1kX3Rhc2sgPSBrdGhyZWFkX2NyZWF0ZShhcG0sIE5VTEwsICJrYXBtZCIpOwogCWlmIChJU19FUlIoa2FwbWRfdGFzaykpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c18zMi5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKaW5kZXggYWZkODQ0Ni4uNjcwYzNjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KLSNpbmNsdWRlICJzaWdmcmFtZV8zMi5oIgorI2luY2x1ZGUgInNpZ2ZyYW1lLmgiCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMjAsMTAgKzIwLDggQEAKIAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAKLSNpZmRlZiBDT05GSUdfTEdVRVNUX0dVRVNUCiAjaW5jbHVkZSA8bGludXgvbGd1ZXN0Lmg+CiAjaW5jbHVkZSAiLi4vLi4vLi4vZHJpdmVycy9sZ3Vlc3QvbGcuaCIKLSNlbmRpZgogCiAjZGVmaW5lIERFRklORShzeW0sIHZhbCkgXAogICAgICAgICBhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsKSkKQEAgLTEzMCwxMCArMTI4LDEyIEBACiAJT0ZGU0VUKFhFTl92Y3B1X2luZm9fcGVuZGluZywgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTEdVRVNUX0dVRVNUCisjaWYgZGVmaW5lZChDT05GSUdfTEdVRVNUKSB8fCBkZWZpbmVkKENPTkZJR19MR1VFU1RfR1VFU1QpIHx8IGRlZmluZWQoQ09ORklHX0xHVUVTVF9NT0RVTEUpCiAJQkxBTksoKTsKIAlPRkZTRVQoTEdVRVNUX0RBVEFfaXJxX2VuYWJsZWQsIGxndWVzdF9kYXRhLCBpcnFfZW5hYmxlZCk7CiAJT0ZGU0VUKExHVUVTVF9EQVRBX3BnZGlyLCBsZ3Vlc3RfZGF0YSwgcGdkaXIpOworCisJQkxBTksoKTsKIAlPRkZTRVQoTEdVRVNUX1BBR0VTX2hvc3RfZ2R0X2Rlc2MsIGxndWVzdF9wYWdlcywgc3RhdGUuaG9zdF9nZHRfZGVzYyk7CiAJT0ZGU0VUKExHVUVTVF9QQUdFU19ob3N0X2lkdF9kZXNjLCBsZ3Vlc3RfcGFnZXMsIHN0YXRlLmhvc3RfaWR0X2Rlc2MpOwogCU9GRlNFVChMR1VFU1RfUEFHRVNfaG9zdF9jcjMsIGxndWVzdF9wYWdlcywgc3RhdGUuaG9zdF9jcjMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2J1Z3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9idWdzXzY0LmMKaW5kZXggOGY1MjBmOS4uOWEzZWQwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2J1Z3NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYnVnc182NC5jCkBAIC05LDEzICs5LDI1IEBACiAjaW5jbHVkZSA8YXNtL2J1Z3MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiB2b2lkIF9faW5pdCBjaGVja19idWdzKHZvaWQpCiB7Ci0JaWRlbnRpZnlfY3B1KCZib290X2NwdV9kYXRhKTsKKwlpZGVudGlmeV9ib290X2NwdSgpOwogI2lmICFkZWZpbmVkKENPTkZJR19TTVApCiAJcHJpbnRrKCJDUFU6ICIpOwogCXByaW50X2NwdV9pbmZvKCZib290X2NwdV9kYXRhKTsKICNlbmRpZgogCWFsdGVybmF0aXZlX2luc3RydWN0aW9ucygpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIGZpcnN0IDJNQiBhcmVhIGlzIG5vdCBtYXBwZWQgYnkgaHVnZSBwYWdlcworCSAqIFRoZXJlIGFyZSB0eXBpY2FsbHkgZml4ZWQgc2l6ZSBNVFJScyBpbiB0aGVyZSBhbmQgb3ZlcmxhcHBpbmcKKwkgKiBNVFJScyBpbnRvIGxhcmdlIHBhZ2VzIGNhdXNlcyBzbG93IGRvd25zLgorCSAqCisJICogUmlnaHQgbm93IHdlIGRvbid0IGRvIHRoYXQgd2l0aCBnYnBhZ2VzIGJlY2F1c2UgdGhlcmUgc2VlbXMKKwkgKiB2ZXJ5IGxpdHRsZSBiZW5lZml0IGZvciB0aGF0IGNhc2UuCisJICovCisJaWYgKCFkaXJlY3RfZ2JwYWdlcykKKwkJc2V0X21lbW9yeV80aygodW5zaWduZWQgbG9uZylfX3ZhKDApLCAxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IGEwYzRkN2MuLmVlN2M0NTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMyw5ICszLDkgQEAKICMKIAogb2JqLXkJCQk6PSBpbnRlbF9jYWNoZWluZm8ubyBhZGRvbl9jcHVpZF9mZWF0dXJlcy5vCi1vYmoteQkJCSs9IGZlYXR1cmVfbmFtZXMubworb2JqLXkJCQkrPSBwcm9jLm8gZmVhdHVyZV9uYW1lcy5vCiAKLW9iai0kKENPTkZJR19YODZfMzIpCSs9IGNvbW1vbi5vIHByb2MubyBidWdzLm8KK29iai0kKENPTkZJR19YODZfMzIpCSs9IGNvbW1vbi5vIGJ1Z3Mubwogb2JqLSQoQ09ORklHX1g4Nl8zMikJKz0gYW1kLm8KIG9iai0kKENPTkZJR19YODZfMzIpCSs9IGN5cml4Lm8KIG9iai0kKENPTkZJR19YODZfMzIpCSs9IGNlbnRhdXIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggNjkzZTM1My4uMDE3MzA2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC00LDggKzQsOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoX2FwaWMuaD4KIAorI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgogI2luY2x1ZGUgImNwdS5oIgogCiAvKgpAQCAtMjAsNyArMjAsNyBAQAogICoJdGhlIGNoaXAgc2V0dGluZyB3aGVuIGZpeGluZyB0aGUgYnVnIGJ1dCB0aGV5IGFsc28gdHdlYWtlZCBzb21lCiAgKglwZXJmb3JtYW5jZSBhdCB0aGUgc2FtZSB0aW1lLi4KICAqLwotIAorCiBleHRlcm4gdm9pZCB2aWRlKHZvaWQpOwogX19hc21fXygiLmFsaWduIDRcbnZpZGU6IHJldCIpOwogCkBAIC02MywxMiArNjMsMTIgQEAKIAogaW50IGZvcmNlX213YWl0IF9fY3B1aW5pdGRhdGE7CiAKLXZvaWQgX19jcHVpbml0IGVhcmx5X2luaXRfYW1kKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBlYXJseV9pbml0X2FtZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3KSB7CiAJCWMtPng4Nl9wb3dlciA9IGNwdWlkX2VkeCgweDgwMDAwMDA3KTsKIAkJaWYgKGMtPng4Nl9wb3dlciAmICgxPDw4KSkKLQkJCXNldF9iaXQoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDLCBjLT54ODZfY2FwYWJpbGl0eSk7CisJCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwogCX0KIH0KIApAQCAtODEsNyArODEsOCBAQAogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CiAKLQkvKiBEaXNhYmxlIFRMQiBmbHVzaCBmaWx0ZXIgYnkgc2V0dGluZyBIV0NSLkZGRElTIG9uIEs4CisJLyoKKwkgKiBEaXNhYmxlIFRMQiBmbHVzaCBmaWx0ZXIgYnkgc2V0dGluZyBIV0NSLkZGRElTIG9uIEs4CiAJICogYml0IDYgb2YgbXNyIEMwMDFfMDAxNQogCSAqCiAJICogRXJyYXRhIDYzIGZvciBTSC1CMyBzdGVwcGluZ3MKQEAgLTEwMiwxNSArMTAzLDE2IEBACiAJICoJbm8gYnVzIHBpcGVsaW5lKQogCSAqLwogCi0JLyogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKLQkgICAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkgKi8KLQljbGVhcl9iaXQoMCozMiszMSwgYy0+eDg2X2NhcGFiaWxpdHkpOwotCQorCS8qCisJICogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKKwkgKiAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkKKwkgKi8KKwljbGVhcl9jcHVfY2FwKGMsIDAqMzIrMzEpOworCiAJciA9IGdldF9tb2RlbF9uYW1lKGMpOwogCi0Jc3dpdGNoKGMtPng4NikKLQl7Ci0JCWNhc2UgNDoKKwlzd2l0Y2ggKGMtPng4NikgeworCWNhc2UgNDoKIAkJLyoKIAkJICogR2VuZXJhbCBTeXN0ZW1zIEJJT1NlbiBhbGlhcyB0aGUgY3B1IGZyZXF1ZW5jeSByZWdpc3RlcnMKIAkJICogb2YgdGhlIEVsYW4gYXQgMHgwMDBkZjAwMC4gVW5mb3J0dWFudGx5LCBvbmUgb2YgdGhlIExpbnV4CkBAIC0xMjAsNjEgKzEyMiw2MCBAQAogI2RlZmluZSBDQkFSCQkoMHhmZmZjKSAvKiBDb25maWd1cmF0aW9uIEJhc2UgQWRkcmVzcyAgKDMyLWJpdCkgKi8KICNkZWZpbmUgQ0JBUl9FTkIJKDB4ODAwMDAwMDApCiAjZGVmaW5lIENCQVJfS0VZCSgwWDAwMDAwMENCKQotCQkJaWYgKGMtPng4Nl9tb2RlbD09OSB8fCBjLT54ODZfbW9kZWwgPT0gMTApIHsKKwkJCWlmIChjLT54ODZfbW9kZWwgPT0gOSB8fCBjLT54ODZfbW9kZWwgPT0gMTApIHsKIAkJCQlpZiAoaW5sIChDQkFSKSAmIENCQVJfRU5CKQogCQkJCQlvdXRsICgwIHwgQ0JBUl9LRVksIENCQVIpOwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgNToKLQkJCWlmKCBjLT54ODZfbW9kZWwgPCA2ICkKLQkJCXsKKwljYXNlIDU6CisJCQlpZiAoYy0+eDg2X21vZGVsIDwgNikgewogCQkJCS8qIEJhc2VkIG9uIEFNRCBkb2MgMjA3MzRSIC0gSnVuZSAyMDAwICovCi0JCQkJaWYgKCBjLT54ODZfbW9kZWwgPT0gMCApIHsKLQkJCQkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0FQSUMsIGMtPng4Nl9jYXBhYmlsaXR5KTsKLQkJCQkJc2V0X2JpdChYODZfRkVBVFVSRV9QR0UsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJCQlpZiAoYy0+eDg2X21vZGVsID09IDApIHsKKwkJCQkJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9BUElDKTsKKwkJCQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUEdFKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkKLQkJCWlmICggYy0+eDg2X21vZGVsID09IDYgJiYgYy0+eDg2X21hc2sgPT0gMSApIHsKKworCQkJaWYgKGMtPng4Nl9tb2RlbCA9PSA2ICYmIGMtPng4Nl9tYXNrID09IDEpIHsKIAkJCQljb25zdCBpbnQgSzZfQlVHX0xPT1AgPSAxMDAwMDAwOwogCQkJCWludCBuOwogCQkJCXZvaWQgKCpmX3ZpZGUpKHZvaWQpOwogCQkJCXVuc2lnbmVkIGxvbmcgZCwgZDI7Ci0JCQkJCisKIAkJCQlwcmludGsoS0VSTl9JTkZPICJBTUQgSzYgc3RlcHBpbmcgQiBkZXRlY3RlZCAtICIpOwotCQkJCQorCiAJCQkJLyoKLQkJCQkgKiBJdCBsb29rcyBsaWtlIEFNRCBmaXhlZCB0aGUgMi42LjIgYnVnIGFuZCBpbXByb3ZlZCBpbmRpcmVjdCAKKwkJCQkgKiBJdCBsb29rcyBsaWtlIEFNRCBmaXhlZCB0aGUgMi42LjIgYnVnIGFuZCBpbXByb3ZlZCBpbmRpcmVjdAogCQkJCSAqIGNhbGxzIGF0IHRoZSBzYW1lIHRpbWUuCiAJCQkJICovCiAKIAkJCQluID0gSzZfQlVHX0xPT1A7CiAJCQkJZl92aWRlID0gdmlkZTsKIAkJCQlyZHRzY2woZCk7Ci0JCQkJd2hpbGUgKG4tLSkgCisJCQkJd2hpbGUgKG4tLSkKIAkJCQkJZl92aWRlKCk7CiAJCQkJcmR0c2NsKGQyKTsKIAkJCQlkID0gZDItZDsKIAotCQkJCWlmIChkID4gMjAqSzZfQlVHX0xPT1ApIAorCQkJCWlmIChkID4gMjAqSzZfQlVHX0xPT1ApCiAJCQkJCXByaW50aygic3lzdGVtIHN0YWJpbGl0eSBtYXkgYmUgaW1wYWlyZWQgd2hlbiBtb3JlIHRoYW4gMzIgTUIgYXJlIHVzZWQuXG4iKTsKLQkJCQllbHNlIAorCQkJCWVsc2UKIAkJCQkJcHJpbnRrKCJwcm9iYWJseSBPSyAoYWZ0ZXIgQjk3MzB4eHh4KS5cbiIpOwogCQkJCXByaW50ayhLRVJOX0lORk8gIlBsZWFzZSBzZWUgaHR0cDovL21lbWJyZXMubHljb3MuZnIvcG91bG90L2s2YnVnLmh0bWxcbiIpOwogCQkJfQogCiAJCQkvKiBLNiB3aXRoIG9sZCBzdHlsZSBXSENSICovCiAJCQlpZiAoYy0+eDg2X21vZGVsIDwgOCB8fAotCQkJICAgKGMtPng4Nl9tb2RlbD09IDggJiYgYy0+eDg2X21hc2sgPCA4KSkgeworCQkJICAgKGMtPng4Nl9tb2RlbCA9PSA4ICYmIGMtPng4Nl9tYXNrIDwgOCkpIHsKIAkJCQkvKiBXZSBjYW4gb25seSB3cml0ZSBhbGxvY2F0ZSBvbiB0aGUgbG93IDUwOE1iICovCi0JCQkJaWYobWJ5dGVzPjUwOCkKLQkJCQkJbWJ5dGVzPTUwODsKKwkJCQlpZiAobWJ5dGVzID4gNTA4KQorCQkJCQltYnl0ZXMgPSA1MDg7CiAKIAkJCQlyZG1zcihNU1JfSzZfV0hDUiwgbCwgaCk7Ci0JCQkJaWYgKChsJjB4MDAwMEZGRkYpPT0wKSB7CisJCQkJaWYgKChsJjB4MDAwMEZGRkYpID09IDApIHsKIAkJCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJCQkJbD0oMTw8MCl8KChtYnl0ZXMvNCk8PDEpOworCQkJCQlsID0gKDE8PDApfCgobWJ5dGVzLzQpPDwxKTsKIAkJCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJCQl3YmludmQoKTsKIAkJCQkJd3Jtc3IoTVNSX0s2X1dIQ1IsIGwsIGgpOwpAQCAtMTg1LDE3ICsxODYsMTcgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKChjLT54ODZfbW9kZWwgPT0gOCAmJiBjLT54ODZfbWFzayA+NykgfHwKKwkJCWlmICgoYy0+eDg2X21vZGVsID09IDggJiYgYy0+eDg2X21hc2sgPiA3KSB8fAogCQkJICAgICBjLT54ODZfbW9kZWwgPT0gOSB8fCBjLT54ODZfbW9kZWwgPT0gMTMpIHsKIAkJCQkvKiBUaGUgbW9yZSBzZXJpb3VzIGNoaXBzIC4uICovCiAKLQkJCQlpZihtYnl0ZXM+NDA5MikKLQkJCQkJbWJ5dGVzPTQwOTI7CisJCQkJaWYgKG1ieXRlcyA+IDQwOTIpCisJCQkJCW1ieXRlcyA9IDQwOTI7CiAKIAkJCQlyZG1zcihNU1JfSzZfV0hDUiwgbCwgaCk7Ci0JCQkJaWYgKChsJjB4RkZGRjAwMDApPT0wKSB7CisJCQkJaWYgKChsJjB4RkZGRjAwMDApID09IDApIHsKIAkJCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJCQkJbD0oKG1ieXRlcz4+Mik8PDIyKXwoMTw8MTYpOworCQkJCQlsID0gKChtYnl0ZXM+PjIpPDwyMil8KDE8PDE2KTsKIAkJCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJCQl3YmludmQoKTsKIAkJCQkJd3Jtc3IoTVNSX0s2X1dIQ1IsIGwsIGgpOwpAQCAtMjA3LDcgKzIwOCw3IEBACiAJCQkJLyogIFNldCBNVFJSIGNhcGFiaWxpdHkgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwogCQkJCWlmIChjLT54ODZfbW9kZWwgPT0gMTMgfHwgYy0+eDg2X21vZGVsID09IDkgfHwKIAkJCQkgICAoYy0+eDg2X21vZGVsID09IDggJiYgYy0+eDg2X21hc2sgPj0gOCkpCi0JCQkJCXNldF9iaXQoWDg2X0ZFQVRVUkVfSzZfTVRSUiwgYy0+eDg2X2NhcGFiaWxpdHkpOworCQkJCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9LNl9NVFJSKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMjE3LDEwICsyMTgsMTEgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIDY6IC8qIEFuIEF0aGxvbi9EdXJvbiAqLwotIAotCQkJLyogQml0IDE1IG9mIEF0aGxvbiBzcGVjaWZpYyBNU1IgMTUsIG5lZWRzIHRvIGJlIDAKLSAJCQkgKiB0byBlbmFibGUgU1NFIG9uIFBhbG9taW5vL01vcmdhbi9CYXJ0b24gQ1BVJ3MuCisJY2FzZSA2OiAvKiBBbiBBdGhsb24vRHVyb24gKi8KKworCQkJLyoKKwkJCSAqIEJpdCAxNSBvZiBBdGhsb24gc3BlY2lmaWMgTVNSIDE1LCBuZWVkcyB0byBiZSAwCisJCQkgKiB0byBlbmFibGUgU1NFIG9uIFBhbG9taW5vL01vcmdhbi9CYXJ0b24gQ1BVJ3MuCiAJCQkgKiBJZiB0aGUgQklPUyBkaWRuJ3QgZW5hYmxlIGl0IGFscmVhZHksIGVuYWJsZSBpdCBoZXJlLgogCQkJICovCiAJCQlpZiAoYy0+eDg2X21vZGVsID49IDYgJiYgYy0+eDg2X21vZGVsIDw9IDEwKSB7CkBAIC0yMjksMTUgKzIzMSwxNiBAQAogCQkJCQlyZG1zcihNU1JfSzdfSFdDUiwgbCwgaCk7CiAJCQkJCWwgJj0gfjB4MDAwMDgwMDA7CiAJCQkJCXdybXNyKE1TUl9LN19IV0NSLCBsLCBoKTsKLQkJCQkJc2V0X2JpdChYODZfRkVBVFVSRV9YTU0sIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJCQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfWE1NKTsKIAkJCQl9CiAJCQl9CiAKLQkJCS8qIEl0J3MgYmVlbiBkZXRlcm1pbmVkIGJ5IEFNRCB0aGF0IEF0aGxvbnMgc2luY2UgbW9kZWwgOCBzdGVwcGluZyAxCisJCQkvKgorCQkJICogSXQncyBiZWVuIGRldGVybWluZWQgYnkgQU1EIHRoYXQgQXRobG9ucyBzaW5jZSBtb2RlbCA4IHN0ZXBwaW5nIDEKIAkJCSAqIGFyZSBtb3JlIHJvYnVzdCB3aXRoIENMS19DVEwgc2V0IHRvIDIwMHh4eHh4IGluc3RlYWQgb2YgNjAweHh4eHgKIAkJCSAqIEFzIHBlciBBTUQgdGVjaG5pY2FsIG5vdGUgMjcyMTIgMC4yCiAJCQkgKi8KLQkJCWlmICgoYy0+eDg2X21vZGVsID09IDggJiYgYy0+eDg2X21hc2s+PTEpIHx8IChjLT54ODZfbW9kZWwgPiA4KSkgeworCQkJaWYgKChjLT54ODZfbW9kZWwgPT0gOCAmJiBjLT54ODZfbWFzayA+PSAxKSB8fCAoYy0+eDg2X21vZGVsID4gOCkpIHsKIAkJCQlyZG1zcihNU1JfSzdfQ0xLX0NUTCwgbCwgaCk7CiAJCQkJaWYgKChsICYgMHhmZmYwMDAwMCkgIT0gMHgyMDAwMDAwMCkgewogCQkJCQlwcmludGsgKCJDUFU6IENMS19DVEwgTVNSIHdhcyAleC4gUmVwcm9ncmFtbWluZyB0byAleFxuIiwgbCwKQEAgLTI1MywyMCArMjU2LDE5IEBACiAJLyogVXNlIEs4IHR1bmluZyBmb3IgRmFtMTBoIGFuZCBGYW0xMWggKi8KIAljYXNlIDB4MTA6CiAJY2FzZSAweDExOgotCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0s4LCBjLT54ODZfY2FwYWJpbGl0eSk7CisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0s4KTsKIAkJYnJlYWs7CiAJY2FzZSA2OgotCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0s3LCBjLT54ODZfY2FwYWJpbGl0eSk7IAorCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9LNyk7CiAJCWJyZWFrOwogCX0KIAlpZiAoYy0+eDg2ID49IDYpCi0JCXNldF9iaXQoWDg2X0ZFQVRVUkVfRlhTQVZFX0xFQUssIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfRlhTQVZFX0xFQUspOwogCiAJZGlzcGxheV9jYWNoZWluZm8oYyk7CiAKLQlpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDgpIHsKKwlpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDgpCiAJCWMtPng4Nl9tYXhfY29yZXMgPSAoY3B1aWRfZWN4KDB4ODAwMDAwMDgpICYgMHhmZikgKyAxOwotCX0KIAogI2lmZGVmIENPTkZJR19YODZfSFQKIAkvKgpAQCAtMzAyLDIwICszMDQsMjAgQEAKIAogCS8qIEs2cyByZXBvcnRzIE1DRXMgYnV0IGRvbid0IGFjdHVhbGx5IGhhdmUgYWxsIHRoZSBNU1JzICovCiAJaWYgKGMtPng4NiA8IDYpCi0JCWNsZWFyX2JpdChYODZfRkVBVFVSRV9NQ0UsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9NQ0UpOwogCiAJaWYgKGNwdV9oYXNfeG1tMikKLQkJc2V0X2JpdChYODZfRkVBVFVSRV9NRkVOQ0VfUkRUU0MsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTUZFTkNFX1JEVFNDKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWluaXQgYW1kX3NpemVfY2FjaGUoc3RydWN0IGNwdWluZm9feDg2ICogYywgdW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdCBhbWRfc2l6ZV9jYWNoZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIHVuc2lnbmVkIGludCBzaXplKQogewogCS8qIEFNRCBlcnJhdGEgVDEzIChvcmRlciAjMjE5MjIpICovCiAJaWYgKChjLT54ODYgPT0gNikpIHsKIAkJaWYgKGMtPng4Nl9tb2RlbCA9PSAzICYmIGMtPng4Nl9tYXNrID09IDApCS8qIER1cm9uIFJldiBBMCAqLwogCQkJc2l6ZSA9IDY0OwogCQlpZiAoYy0+eDg2X21vZGVsID09IDQgJiYKLQkJICAgIChjLT54ODZfbWFzaz09MCB8fCBjLT54ODZfbWFzaz09MSkpCS8qIFRiaXJkIHJldiBBMS9BMiAqLworCQkgICAgKGMtPng4Nl9tYXNrID09IDAgfHwgYy0+eDg2X21hc2sgPT0gMSkpCS8qIFRiaXJkIHJldiBBMS9BMiAqLwogCQkJc2l6ZSA9IDI1NjsKIAl9CiAJcmV0dXJuIHNpemU7CkBAIC0zMjMsMTkgKzMyNSwyMCBAQAogCiBzdGF0aWMgc3RydWN0IGNwdV9kZXYgYW1kX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKIAkuY192ZW5kb3IJPSAiQU1EIiwKLQkuY19pZGVudCAJPSB7ICJBdXRoZW50aWNBTUQiIH0sCisJLmNfaWRlbnQJPSB7ICJBdXRoZW50aWNBTUQiIH0sCiAJLmNfbW9kZWxzID0gewogCQl7IC52ZW5kb3IgPSBYODZfVkVORE9SX0FNRCwgLmZhbWlseSA9IDQsIC5tb2RlbF9uYW1lcyA9CiAJCSAgewogCQkJICBbM10gPSAiNDg2IERYLzIiLAogCQkJICBbN10gPSAiNDg2IERYLzItV0IiLAotCQkJICBbOF0gPSAiNDg2IERYLzQiLCAKLQkJCSAgWzldID0gIjQ4NiBEWC80LVdCIiwgCisJCQkgIFs4XSA9ICI0ODYgRFgvNCIsCisJCQkgIFs5XSA9ICI0ODYgRFgvNC1XQiIsCiAJCQkgIFsxNF0gPSAiQW01eDg2LVdUIiwKLQkJCSAgWzE1XSA9ICJBbTV4ODYtV0IiIAorCQkJICBbMTVdID0gIkFtNXg4Ni1XQiIKIAkJICB9CiAJCX0sCiAJfSwKKwkuY19lYXJseV9pbml0ICAgPSBlYXJseV9pbml0X2FtZCwKIAkuY19pbml0CQk9IGluaXRfYW1kLAogCS5jX3NpemVfY2FjaGUJPSBhbWRfc2l6ZV9jYWNoZSwKIH07CkBAIC0zNDUsMyArMzQ4LDUgQEAKIAljcHVfZGV2c1tYODZfVkVORE9SX0FNRF0gPSAmYW1kX2NwdV9kZXY7CiAJcmV0dXJuIDA7CiB9CisKK2NwdV92ZW5kb3JfZGV2X3JlZ2lzdGVyKFg4Nl9WRU5ET1JfQU1ELCAmYW1kX2NwdV9kZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYwppbmRleCA5Yjk1ZWRjLi4xNzBkMmY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYwpAQCAtMjUsMTQgKzI1LDYgQEAKIAogX19zZXR1cCgibm8taGx0Iiwgbm9faGFsdCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IG1jYV9wZW50aXVtKGNoYXIgKnMpCi17Ci0JbWNhX3BlbnRpdW1fZmxhZyA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoIm1jYS1wZW50aXVtIiwgbWNhX3BlbnRpdW0pOwotCiBzdGF0aWMgaW50IF9faW5pdCBub18zODcoY2hhciAqcykKIHsKIAlib290X2NwdV9kYXRhLmhhcmRfbWF0aCA9IDA7CkBAIC0xNTEsMTQgKzE0Myw2IEBACiAjZW5kaWYKIAogLyoKLSAqIElmIHdlIGNvbmZpZ3VyZWQgb3Vyc2VsdmVzIGZvciBhIFRTQywgd2UnZCBiZXR0ZXIgaGF2ZSBvbmUhCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2X1RTQwotCWlmICghY3B1X2hhc190c2MpCi0JCXBhbmljKCJLZXJuZWwgY29tcGlsZWQgZm9yIFBlbnRpdW0rLCByZXF1aXJlcyBUU0MgZmVhdHVyZSEiKTsKLSNlbmRpZgotCi0vKgogICogSWYgd2Ugd2VyZSB0b2xkIHdlIGhhZCBhIGdvb2QgbG9jYWwgQVBJQywgY2hlY2sgZm9yIGJ1Z2d5IFBlbnRpYSwKICAqIGkuZS4gYWxsIEIgc3RlcHBpbmdzIGFuZCB0aGUgQzIgc3RlcHBpbmcgb2YgUDU0QyB3aGVuIHVzaW5nIHRoZWlyCiAgKiBpbnRlZ3JhdGVkIEFQSUMgKHNlZSAxMUFQIGVycmF0dW0gaW4gIlBlbnRpdW0gUHJvY2Vzc29yCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCmluZGV4IDk2ODFmYTEuLmUwZjQ1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCkBAIC0xLDMxICsxLDM0IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisKICNpbmNsdWRlICJjcHUuaCIKIAogI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQogCiBzdGF0aWMgdTMyIF9fY3B1aW5pdCBwb3dlcjIodTMyIHgpCiB7Ci0JdTMyIHM9MTsKLQl3aGlsZShzPD14KQotCQlzPDw9MTsKLQlyZXR1cm4gcz4+PTE7CisJdTMyIHMgPSAxOworCisJd2hpbGUgKHMgPD0geCkKKwkJcyA8PD0gMTsKKworCXJldHVybiBzID4+PSAxOwogfQogCiAKIC8qCi0gKglTZXQgdXAgYW4gYWN0dWFsIE1DUgorICogU2V0IHVwIGFuIGFjdHVhbCBNQ1IKICAqLwotIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGNlbnRhdXJfbWNyX2luc2VydChpbnQgcmVnLCB1MzIgYmFzZSwgdTMyIHNpemUsIGludCBrZXkpCiB7CiAJdTMyIGxvLCBoaTsKLQkKKwogCWhpID0gYmFzZSAmIH4weEZGRjsKIAlsbyA9IH4oc2l6ZS0xKTsJCS8qIFNpemUgaXMgYSBwb3dlciBvZiAyIHNvIHRoaXMgbWFrZXMgYSBtYXNrICovCiAJbG8gJj0gfjB4RkZGOwkJLyogUmVtb3ZlIHRoZSBjdHJsIHZhbHVlIGJpdHMgKi8KQEAgLTM1LDMwICszOCwyOCBAQAogfQogCiAvKgotICoJRmlndXJlIHdoYXQgd2UgY2FuIGNvdmVyIHdpdGggTUNSJ3MKKyAqIEZpZ3VyZSB3aGF0IHdlIGNhbiBjb3ZlciB3aXRoIE1DUidzCiAgKgotICoJU2hvcnRjdXQ6IFdlIGtub3cgeW91IGNhbid0IHB1dCA0R2lnIG9mIFJBTSBvbiBhIHdpbmNoaXAKKyAqIFNob3J0Y3V0OiBXZSBrbm93IHlvdSBjYW4ndCBwdXQgNEdpZyBvZiBSQU0gb24gYSB3aW5jaGlwCiAgKi8KLQotc3RhdGljIHUzMiBfX2NwdWluaXQgcmFtdG9wKHZvaWQpCQkvKiAxNjM4OCAqLworc3RhdGljIHUzMiBfX2NwdWluaXQgcmFtdG9wKHZvaWQpCiB7Ci0JaW50IGk7Ci0JdTMyIHRvcCA9IDA7CiAJdTMyIGNsaXAgPSAweEZGRkZGRkZGVUw7Ci0JCisJdTMyIHRvcCA9IDA7CisJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAKIAkJaWYgKGU4MjAubWFwW2ldLmFkZHIgPiAweEZGRkZGRkZGVUwpCiAJCQljb250aW51ZTsKIAkJLyoKLQkJICoJRG9uJ3QgTUNSIG92ZXIgcmVzZXJ2ZWQgc3BhY2UuIElnbm9yZSB0aGUgSVNBIGhvbGUKLQkJICoJd2UgZnJvYiBhcm91bmQgdGhhdCBjYXRhc3Ryb3BoZSBhbHJlYWR5CisJCSAqIERvbid0IE1DUiBvdmVyIHJlc2VydmVkIHNwYWNlLiBJZ25vcmUgdGhlIElTQSBob2xlCisJCSAqIHdlIGZyb2IgYXJvdW5kIHRoYXQgY2F0YXN0cm9waGUgYWxyZWFkeQogCQkgKi8KLQkJIAkJCQotCQlpZiAoZTgyMC5tYXBbaV0udHlwZSA9PSBFODIwX1JFU0VSVkVEKQotCQl7Ci0JCQlpZihlODIwLm1hcFtpXS5hZGRyID49IDB4MTAwMDAwVUwgJiYgZTgyMC5tYXBbaV0uYWRkciA8IGNsaXApCisJCWlmIChlODIwLm1hcFtpXS50eXBlID09IEU4MjBfUkVTRVJWRUQpIHsKKwkJCWlmIChlODIwLm1hcFtpXS5hZGRyID49IDB4MTAwMDAwVUwgJiYKKwkJCSAgICBlODIwLm1hcFtpXS5hZGRyIDwgY2xpcCkKIAkJCQljbGlwID0gZTgyMC5tYXBbaV0uYWRkcjsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02OSwyOCArNzAsMjcgQEAKIAkJaWYgKGVuZCA+IHRvcCkKIAkJCXRvcCA9IGVuZDsKIAl9Ci0JLyogRXZlcnl0aGluZyBiZWxvdyAndG9wJyBzaG91bGQgYmUgUkFNIGV4Y2VwdCBmb3IgdGhlIElTQSBob2xlLgotCSAgIEJlY2F1c2Ugb2YgdGhlIGxpbWl0ZWQgTUNSJ3Mgd2Ugd2FudCB0byBtYXAgTlYvQUNQSSBpbnRvIG91cgotCSAgIE1DUiByYW5nZSBmb3IgZ3VuayBpbiBSQU0gCi0JICAgCi0JICAgQ2xpcCBtaWdodCBjYXVzZSB1cyB0byBNQ1IgaW5zdWZmaWNpZW50IFJBTSBidXQgdGhhdCBpcyBhbgotCSAgIGFjY2VwdGFibGUgZmFpbHVyZSBtb2RlIGFuZCBzaG91bGQgb25seSBiaXRlIG9ic2N1cmUgYm94ZXMgd2l0aAotCSAgIGEgVkVTQSBob2xlIGF0IDE1TWIKLQkgICAKLQkgICBUaGUgc2Vjb25kIGNhc2UgQ2xpcCBzb21ldGltZXMga2lja3MgaW4gaXMgd2hlbiB0aGUgRUJEQSBpcyBtYXJrZWQKLQkgICBhcyByZXNlcnZlZC4gQWdhaW4gd2UgZmFpbCBzYWZlIHdpdGggcmVhc29uYWJsZSByZXN1bHRzCi0JKi8KLQkKLQlpZih0b3A+Y2xpcCkKLQkJdG9wPWNsaXA7Ci0JCQorCS8qCisJICogRXZlcnl0aGluZyBiZWxvdyAndG9wJyBzaG91bGQgYmUgUkFNIGV4Y2VwdCBmb3IgdGhlIElTQSBob2xlLgorCSAqIEJlY2F1c2Ugb2YgdGhlIGxpbWl0ZWQgTUNSJ3Mgd2Ugd2FudCB0byBtYXAgTlYvQUNQSSBpbnRvIG91cgorCSAqIE1DUiByYW5nZSBmb3IgZ3VuayBpbiBSQU0KKwkgKgorCSAqIENsaXAgbWlnaHQgY2F1c2UgdXMgdG8gTUNSIGluc3VmZmljaWVudCBSQU0gYnV0IHRoYXQgaXMgYW4KKwkgKiBhY2NlcHRhYmxlIGZhaWx1cmUgbW9kZSBhbmQgc2hvdWxkIG9ubHkgYml0ZSBvYnNjdXJlIGJveGVzIHdpdGgKKwkgKiBhIFZFU0EgaG9sZSBhdCAxNU1iCisJICoKKwkgKiBUaGUgc2Vjb25kIGNhc2UgQ2xpcCBzb21ldGltZXMga2lja3MgaW4gaXMgd2hlbiB0aGUgRUJEQSBpcyBtYXJrZWQKKwkgKiBhcyByZXNlcnZlZC4gQWdhaW4gd2UgZmFpbCBzYWZlIHdpdGggcmVhc29uYWJsZSByZXN1bHRzCisJICovCisJaWYgKHRvcCA+IGNsaXApCisJCXRvcCA9IGNsaXA7CisKIAlyZXR1cm4gdG9wOwogfQogCiAvKgotICoJQ29tcHV0ZSBhIHNldCBvZiBNQ1IncyB0byBnaXZlIG1heGltdW0gY292ZXJhZ2UKKyAqIENvbXB1dGUgYSBzZXQgb2YgTUNSJ3MgdG8gZ2l2ZSBtYXhpbXVtIGNvdmVyYWdlCiAgKi8KLQogc3RhdGljIGludCBfX2NwdWluaXQgY2VudGF1cl9tY3JfY29tcHV0ZShpbnQgbnIsIGludCBrZXkpCiB7CiAJdTMyIG1lbSA9IHJhbXRvcCgpOwpAQCAtOTksMTQxICs5OSwxMzEgQEAKIAl1MzIgdG9wID0gcm9vdDsKIAl1MzIgZmxvb3IgPSAwOwogCWludCBjdCA9IDA7Ci0JCi0Jd2hpbGUoY3Q8bnIpCi0JeworCisJd2hpbGUgKGN0IDwgbnIpIHsKIAkJdTMyIGZzcGFjZSA9IDA7CisJCXUzMiBoaWdoOworCQl1MzIgbG93OwogCiAJCS8qCi0JCSAqCUZpbmQgdGhlIGxhcmdlc3QgYmxvY2sgd2Ugd2lsbCBmaWxsIGdvaW5nIHVwd2FyZHMKKwkJICogRmluZCB0aGUgbGFyZ2VzdCBibG9jayB3ZSB3aWxsIGZpbGwgZ29pbmcgdXB3YXJkcwogCQkgKi8KLQotCQl1MzIgaGlnaCA9IHBvd2VyMihtZW0tdG9wKTsJCisJCWhpZ2ggPSBwb3dlcjIobWVtLXRvcCk7CiAKIAkJLyoKLQkJICoJRmluZCB0aGUgbGFyZ2VzdCBibG9jayB3ZSB3aWxsIGZpbGwgZ29pbmcgZG93bndhcmRzCisJCSAqIEZpbmQgdGhlIGxhcmdlc3QgYmxvY2sgd2Ugd2lsbCBmaWxsIGdvaW5nIGRvd253YXJkcwogCQkgKi8KLQotCQl1MzIgbG93ID0gYmFzZS8yOworCQlsb3cgPSBiYXNlLzI7CiAKIAkJLyoKLQkJICoJRG9uJ3QgZmlsbCBiZWxvdyAxTWIgZ29pbmcgZG93bndhcmRzIGFzIHRoZXJlCi0JCSAqCWlzIGFuIElTQSBob2xlIGluIHRoZSB3YXkuCi0JCSAqLwkJCi0JCSAKLQkJaWYoYmFzZSA8PSAxMDI0KjEwMjQpCisJCSAqIERvbid0IGZpbGwgYmVsb3cgMU1iIGdvaW5nIGRvd253YXJkcyBhcyB0aGVyZQorCQkgKiBpcyBhbiBJU0EgaG9sZSBpbiB0aGUgd2F5LgorCQkgKi8KKwkJaWYgKGJhc2UgPD0gMTAyNCoxMDI0KQogCQkJbG93ID0gMDsKLQkJCQorCiAJCS8qCi0JCSAqCVNlZSBob3cgbXVjaCBzcGFjZSB3ZSBjb3VsZCBjb3ZlciBieSBmaWxsaW5nIGJlbG93Ci0JCSAqCXRoZSBJU0EgaG9sZQorCQkgKiBTZWUgaG93IG11Y2ggc3BhY2Ugd2UgY291bGQgY292ZXIgYnkgZmlsbGluZyBiZWxvdworCQkgKiB0aGUgSVNBIGhvbGUKIAkJICovCi0JCSAKLQkJaWYoZmxvb3IgPT0gMCkKKworCQlpZiAoZmxvb3IgPT0gMCkKIAkJCWZzcGFjZSA9IDUxMioxMDI0OwotCQllbHNlIGlmKGZsb29yID09NTEyKjEwMjQpCisJCWVsc2UgaWYgKGZsb29yID09IDUxMioxMDI0KQogCQkJZnNwYWNlID0gMTI4KjEwMjQ7CiAKIAkJLyogQW5kIGZvcmdldCBST00gc3BhY2UgKi8KLQkJCisKIAkJLyoKLQkJICoJTm93IGluc3RhbGwgdGhlIGxhcmdlc3QgY292ZXJhZ2Ugd2UgZ2V0CisJCSAqIE5vdyBpbnN0YWxsIHRoZSBsYXJnZXN0IGNvdmVyYWdlIHdlIGdldAogCQkgKi8KLQkJIAotCQlpZihmc3BhY2UgPiBoaWdoICYmIGZzcGFjZSA+IGxvdykKLQkJeworCQlpZiAoZnNwYWNlID4gaGlnaCAmJiBmc3BhY2UgPiBsb3cpIHsKIAkJCWNlbnRhdXJfbWNyX2luc2VydChjdCwgZmxvb3IsIGZzcGFjZSwga2V5KTsKIAkJCWZsb29yICs9IGZzcGFjZTsKLQkJfQotCQllbHNlIGlmKGhpZ2ggPiBsb3cpCi0JCXsKKwkJfSBlbHNlIGlmIChoaWdoID4gbG93KSB7CiAJCQljZW50YXVyX21jcl9pbnNlcnQoY3QsIHRvcCwgaGlnaCwga2V5KTsKIAkJCXRvcCArPSBoaWdoOwotCQl9Ci0JCWVsc2UgaWYobG93ID4gMCkKLQkJeworCQl9IGVsc2UgaWYgKGxvdyA+IDApIHsKIAkJCWJhc2UgLT0gbG93OwogCQkJY2VudGF1cl9tY3JfaW5zZXJ0KGN0LCBiYXNlLCBsb3csIGtleSk7Ci0JCX0KLQkJZWxzZSBicmVhazsKKwkJfSBlbHNlCisJCQlicmVhazsKIAkJY3QrKzsKIAl9CiAJLyoKLQkgKglXZSBsb2FkZWQgY3QgdmFsdWVzLiBXZSBub3cgbmVlZCB0byBzZXQgdGhlIG1hc2suIFRoZSBjYWxsZXIKLQkgKgltdXN0IGRvIHRoaXMgYml0LgorCSAqIFdlIGxvYWRlZCBjdCB2YWx1ZXMuIFdlIG5vdyBuZWVkIHRvIHNldCB0aGUgbWFzay4gVGhlIGNhbGxlcgorCSAqIG11c3QgZG8gdGhpcyBiaXQuCiAJICovCi0JIAogCXJldHVybiBjdDsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGNlbnRhdXJfY3JlYXRlX29wdGltYWxfbWNyKHZvaWQpCiB7CisJaW50IHVzZWQ7CiAJaW50IGk7Ci0JLyoKLQkgKglBbGxvY2F0ZSB1cCB0byA2IG1jcnMgdG8gbWFyayBhcyBtdWNoIG9mIHJhbSBhcyBwb3NzaWJsZQotCSAqCWFzIHdyaXRlIGNvbWJpbmluZyBhbmQgd2VhayB3cml0ZSBvcmRlcmVkLgotCSAqCi0JICoJVG8gZXhwZXJpbWVudCB3aXRoOiBMaW51eCBuZXZlciB1c2VzIHN0YWNrIG9wZXJhdGlvbnMgZm9yIAotCSAqCW1taW8gc3BhY2VzIHNvIHdlIGNvdWxkIGdsb2JhbGx5IGVuYWJsZSBzdGFjayBvcGVyYXRpb24gd2MKLQkgKgotCSAqCUxvYWQgdGhlIHJlZ2lzdGVycyB3aXRoIHR5cGUgMzEgLSBmdWxsIHdyaXRlIGNvbWJpbmluZywgYWxsCi0JICoJd3JpdGVzIHdlYWtseSBvcmRlcmVkLgotCSAqLwotCWludCB1c2VkID0gY2VudGF1cl9tY3JfY29tcHV0ZSg2LCAzMSk7CiAKIAkvKgotCSAqCVdpcGUgdW51c2VkIE1DUnMKKwkgKiBBbGxvY2F0ZSB1cCB0byA2IG1jcnMgdG8gbWFyayBhcyBtdWNoIG9mIHJhbSBhcyBwb3NzaWJsZQorCSAqIGFzIHdyaXRlIGNvbWJpbmluZyBhbmQgd2VhayB3cml0ZSBvcmRlcmVkLgorCSAqCisJICogVG8gZXhwZXJpbWVudCB3aXRoOiBMaW51eCBuZXZlciB1c2VzIHN0YWNrIG9wZXJhdGlvbnMgZm9yCisJICogbW1pbyBzcGFjZXMgc28gd2UgY291bGQgZ2xvYmFsbHkgZW5hYmxlIHN0YWNrIG9wZXJhdGlvbiB3YworCSAqCisJICogTG9hZCB0aGUgcmVnaXN0ZXJzIHdpdGggdHlwZSAzMSAtIGZ1bGwgd3JpdGUgY29tYmluaW5nLCBhbGwKKwkgKiB3cml0ZXMgd2Vha2x5IG9yZGVyZWQuCiAJICovCi0JIAotCWZvcihpPXVzZWQ7aTw4O2krKykKKwl1c2VkID0gY2VudGF1cl9tY3JfY29tcHV0ZSg2LCAzMSk7CisKKwkvKgorCSAqIFdpcGUgdW51c2VkIE1DUnMKKwkgKi8KKwlmb3IgKGkgPSB1c2VkOyBpIDwgODsgaSsrKQogCQl3cm1zcihNU1JfSURUX01DUjAraSwgMCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCB3aW5jaGlwMl9jcmVhdGVfb3B0aW1hbF9tY3Iodm9pZCkKIHsKIAl1MzIgbG8sIGhpOworCWludCB1c2VkOwogCWludCBpOwogCiAJLyoKLQkgKglBbGxvY2F0ZSB1cCB0byA2IG1jcnMgdG8gbWFyayBhcyBtdWNoIG9mIHJhbSBhcyBwb3NzaWJsZQotCSAqCWFzIHdyaXRlIGNvbWJpbmluZywgd2VhayBzdG9yZSBvcmRlcmVkLgorCSAqIEFsbG9jYXRlIHVwIHRvIDYgbWNycyB0byBtYXJrIGFzIG11Y2ggb2YgcmFtIGFzIHBvc3NpYmxlCisJICogYXMgd3JpdGUgY29tYmluaW5nLCB3ZWFrIHN0b3JlIG9yZGVyZWQuCiAJICoKLQkgKglMb2FkIHRoZSByZWdpc3RlcnMgd2l0aCB0eXBlIDI1Ci0JICoJCTgJLQl3ZWFrIHdyaXRlIG9yZGVyaW5nCi0JICoJCTE2CS0Jd2VhayByZWFkIG9yZGVyaW5nCi0JICoJCTEJLQl3cml0ZSBjb21iaW5pbmcKKwkgKiBMb2FkIHRoZSByZWdpc3RlcnMgd2l0aCB0eXBlIDI1CisJICoJOAktCXdlYWsgd3JpdGUgb3JkZXJpbmcKKwkgKgkxNgktCXdlYWsgcmVhZCBvcmRlcmluZworCSAqCTEJLQl3cml0ZSBjb21iaW5pbmcKKwkgKi8KKwl1c2VkID0gY2VudGF1cl9tY3JfY29tcHV0ZSg2LCAyNSk7CisKKwkvKgorCSAqIE1hcmsgdGhlIHJlZ2lzdGVycyB3ZSBhcmUgdXNpbmcuCisJICovCisJcmRtc3IoTVNSX0lEVF9NQ1JfQ1RSTCwgbG8sIGhpKTsKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZDsgaSsrKQorCQlsbyB8PSAxPDwoOStpKTsKKwl3cm1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOworCisJLyoKKwkgKiBXaXBlIHVudXNlZCBNQ1JzCiAJICovCiAKLQlpbnQgdXNlZCA9IGNlbnRhdXJfbWNyX2NvbXB1dGUoNiwgMjUpOwotCQotCS8qCi0JICoJTWFyayB0aGUgcmVnaXN0ZXJzIHdlIGFyZSB1c2luZy4KLQkgKi8KLQkgCi0JcmRtc3IoTVNSX0lEVF9NQ1JfQ1RSTCwgbG8sIGhpKTsKLQlmb3IoaT0wO2k8dXNlZDtpKyspCi0JCWxvfD0xPDwoOStpKTsKLQl3cm1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOwotCQotCS8qCi0JICoJV2lwZSB1bnVzZWQgTUNScwotCSAqLwotCSAKLQlmb3IoaT11c2VkO2k8ODtpKyspCisJZm9yIChpID0gdXNlZDsgaSA8IDg7IGkrKykKIAkJd3Jtc3IoTVNSX0lEVF9NQ1IwK2ksIDAsIDApOwogfQogCiAvKgotICoJSGFuZGxlIHRoZSBNQ1Iga2V5IG9uIHRoZSBXaW5jaGlwIDIuCisgKiBIYW5kbGUgdGhlIE1DUiBrZXkgb24gdGhlIFdpbmNoaXAgMi4KICAqLwotCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgd2luY2hpcDJfdW5wcm90ZWN0X21jcih2b2lkKQogewogCXUzMiBsbywgaGk7CiAJdTMyIGtleTsKLQkKKwogCXJkbXNyKE1TUl9JRFRfTUNSX0NUUkwsIGxvLCBoaSk7Ci0JbG8mPX4weDFDMDsJLyogYmxhbmsgYml0cyA4LTYgKi8KKwlsbyAmPSB+MHgxQzA7CS8qIGJsYW5rIGJpdHMgOC02ICovCiAJa2V5ID0gKGxvPj4xNykgJiA3OwogCWxvIHw9IGtleTw8NjsJLyogcmVwbGFjZSB3aXRoIHVubG9jayBrZXkgKi8KIAl3cm1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOwpAQCAtMjQyLDkgKzIzMiw5IEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgd2luY2hpcDJfcHJvdGVjdF9tY3Iodm9pZCkKIHsKIAl1MzIgbG8sIGhpOwotCQorCiAJcmRtc3IoTVNSX0lEVF9NQ1JfQ1RSTCwgbG8sIGhpKTsKLQlsbyY9fjB4MUMwOwkvKiBibGFuayBiaXRzIDgtNiAqLworCWxvICY9IH4weDFDMDsJLyogYmxhbmsgYml0cyA4LTYgKi8KIAl3cm1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOwogfQogI2VuZGlmIC8qIENPTkZJR19YODZfT09TVE9SRSAqLwpAQCAtMjY3LDE3ICsyNTcsMTcgQEAKIAogCQkvKiBlbmFibGUgQUNFIHVuaXQsIGlmIHByZXNlbnQgYW5kIGRpc2FibGVkICovCiAJCWlmICgodG1wICYgKEFDRV9QUkVTRU5UIHwgQUNFX0VOQUJMRUQpKSA9PSBBQ0VfUFJFU0VOVCkgewotCQkJcmRtc3IgKE1TUl9WSUFfRkNSLCBsbywgaGkpOworCQkJcmRtc3IoTVNSX1ZJQV9GQ1IsIGxvLCBoaSk7CiAJCQlsbyB8PSBBQ0VfRkNSOwkJLyogZW5hYmxlIEFDRSB1bml0ICovCi0JCQl3cm1zciAoTVNSX1ZJQV9GQ1IsIGxvLCBoaSk7CisJCQl3cm1zcihNU1JfVklBX0ZDUiwgbG8sIGhpKTsKIAkJCXByaW50ayhLRVJOX0lORk8gIkNQVTogRW5hYmxlZCBBQ0UgaC93IGNyeXB0b1xuIik7CiAJCX0KIAogCQkvKiBlbmFibGUgUk5HIHVuaXQsIGlmIHByZXNlbnQgYW5kIGRpc2FibGVkICovCiAJCWlmICgodG1wICYgKFJOR19QUkVTRU5UIHwgUk5HX0VOQUJMRUQpKSA9PSBSTkdfUFJFU0VOVCkgewotCQkJcmRtc3IgKE1TUl9WSUFfUk5HLCBsbywgaGkpOworCQkJcmRtc3IoTVNSX1ZJQV9STkcsIGxvLCBoaSk7CiAJCQlsbyB8PSBSTkdfRU5BQkxFOwkvKiBlbmFibGUgUk5HIHVuaXQgKi8KLQkJCXdybXNyIChNU1JfVklBX1JORywgbG8sIGhpKTsKKwkJCXdybXNyKE1TUl9WSUFfUk5HLCBsbywgaGkpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVOiBFbmFibGVkIGgvdyBSTkdcbiIpOwogCQl9CiAKQEAgLTI4OCwxNzEgKzI3OCwxODMgQEAKIAl9CiAKIAkvKiBDeXJpeCBJSUkgZmFtaWx5IG5lZWRzIENYOCAmIFBHRSBleHBsaWNpdGx5IGVuYWJsZWQuICovCi0JaWYgKGMtPng4Nl9tb2RlbCA+PTYgJiYgYy0+eDg2X21vZGVsIDw9IDkpIHsKLQkJcmRtc3IgKE1TUl9WSUFfRkNSLCBsbywgaGkpOworCWlmIChjLT54ODZfbW9kZWwgPj0gNiAmJiBjLT54ODZfbW9kZWwgPD0gOSkgeworCQlyZG1zcihNU1JfVklBX0ZDUiwgbG8sIGhpKTsKIAkJbG8gfD0gKDE8PDEgfCAxPDw3KTsKLQkJd3Jtc3IgKE1TUl9WSUFfRkNSLCBsbywgaGkpOwotCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0NYOCwgYy0+eDg2X2NhcGFiaWxpdHkpOworCQl3cm1zcihNU1JfVklBX0ZDUiwgbG8sIGhpKTsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ1g4KTsKIAl9CiAKIAkvKiBCZWZvcmUgTmVoZW1pYWgsIHRoZSBDMydzIGhhZCAzZE5PVyEgKi8KLQlpZiAoYy0+eDg2X21vZGVsID49NiAmJiBjLT54ODZfbW9kZWwgPDkpCi0JCXNldF9iaXQoWDg2X0ZFQVRVUkVfM0ROT1csIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwlpZiAoYy0+eDg2X21vZGVsID49IDYgJiYgYy0+eDg2X21vZGVsIDwgOSkKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfM0ROT1cpOwogCiAJZ2V0X21vZGVsX25hbWUoYyk7CiAJZGlzcGxheV9jYWNoZWluZm8oYyk7CiB9CiAKK2VudW0geworCQlFQ1g4CQk9IDE8PDEsCisJCUVJRVJSSU5UCT0gMTw8MiwKKwkJRFBNCQk9IDE8PDMsCisJCURNQ0UJCT0gMTw8NCwKKwkJRFNUUENMSwkJPSAxPDw1LAorCQlFTElORUFSCQk9IDE8PDYsCisJCURTTUMJCT0gMTw8NywKKwkJRFRMT0NLCQk9IDE8PDgsCisJCUVEQ1RMQgkJPSAxPDw4LAorCQlFTU1YCQk9IDE8PDksCisJCURQREMJCT0gMTw8MTEsCisJCUVCUlBSRUQJCT0gMTw8MTIsCisJCURJQwkJPSAxPDwxMywKKwkJRERDCQk9IDE8PDE0LAorCQlETkEJCT0gMTw8MTUsCisJCUVSRVRTVEsJCT0gMTw8MTYsCisJCUUyTU1YCQk9IDE8PDE5LAorCQlFQU1EM0QJCT0gMTw8MjAsCit9OworCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9jZW50YXVyKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQllbnVtIHsKLQkJRUNYOD0xPDwxLAotCQlFSUVSUklOVD0xPDwyLAotCQlEUE09MTw8MywKLQkJRE1DRT0xPDw0LAotCQlEU1RQQ0xLPTE8PDUsCi0JCUVMSU5FQVI9MTw8NiwKLQkJRFNNQz0xPDw3LAotCQlEVExPQ0s9MTw8OCwKLQkJRURDVExCPTE8PDgsCi0JCUVNTVg9MTw8OSwKLQkJRFBEQz0xPDwxMSwKLQkJRUJSUFJFRD0xPDwxMiwKLQkJRElDPTE8PDEzLAotCQlEREM9MTw8MTQsCi0JCUROQT0xPDwxNSwKLQkJRVJFVFNUSz0xPDwxNiwKLQkJRTJNTVg9MTw8MTksCi0JCUVBTUQzRD0xPDwyMCwKLQl9OwogCiAJY2hhciAqbmFtZTsKLQl1MzIgIGZjcl9zZXQ9MDsKLQl1MzIgIGZjcl9jbHI9MDsKLQl1MzIgIGxvLGhpLG5ld2xvOwotCXUzMiAgYWEsYmIsY2MsZGQ7CisJdTMyICBmY3Jfc2V0ID0gMDsKKwl1MzIgIGZjcl9jbHIgPSAwOworCXUzMiAgbG8sIGhpLCBuZXdsbzsKKwl1MzIgIGFhLCBiYiwgY2MsIGRkOwogCi0JLyogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKLQkgICAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkgKi8KLQljbGVhcl9iaXQoMCozMiszMSwgYy0+eDg2X2NhcGFiaWxpdHkpOworCS8qCisJICogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKKwkgKiAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkKKwkgKi8KKwljbGVhcl9jcHVfY2FwKGMsIDAqMzIrMzEpOwogCiAJc3dpdGNoIChjLT54ODYpIHsKLQotCQljYXNlIDU6Ci0JCQlzd2l0Y2goYy0+eDg2X21vZGVsKSB7Ci0JCQljYXNlIDQ6Ci0JCQkJbmFtZT0iQzYiOwotCQkJCWZjcl9zZXQ9RUNYOHxEU01DfEVEQ1RMQnxFTU1YfEVSRVRTVEs7Ci0JCQkJZmNyX2Nscj1EUERDOwotCQkJCXByaW50ayhLRVJOX05PVElDRSAiRGlzYWJsaW5nIGJ1Z2dlZCBUU0MuXG4iKTsKLQkJCQljbGVhcl9iaXQoWDg2X0ZFQVRVUkVfVFNDLCBjLT54ODZfY2FwYWJpbGl0eSk7CisJY2FzZSA1OgorCQlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgeworCQljYXNlIDQ6CisJCQluYW1lID0gIkM2IjsKKwkJCWZjcl9zZXQgPSBFQ1g4fERTTUN8RURDVExCfEVNTVh8RVJFVFNUSzsKKwkJCWZjcl9jbHIgPSBEUERDOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJEaXNhYmxpbmcgYnVnZ2VkIFRTQy5cbiIpOworCQkJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9UU0MpOwogI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQotCQkJCWNlbnRhdXJfY3JlYXRlX29wdGltYWxfbWNyKCk7Ci0JCQkJLyogRW5hYmxlCi0JCQkJCXdyaXRlIGNvbWJpbmluZyBvbiBub24tc3RhY2ssIG5vbi1zdHJpbmcKLQkJCQkJd3JpdGUgY29tYmluaW5nIG9uIHN0cmluZywgYWxsIHR5cGVzCi0JCQkJCXdlYWsgd3JpdGUgb3JkZXJpbmcgCi0JCQkJCQotCQkJCSAgIFRoZSBDNiBvcmlnaW5hbCBsYWNrcyB3ZWFrIHJlYWQgb3JkZXIgCi0JCQkJICAgCi0JCQkJICAgTm90ZSAweDEyMCBpcyB3cml0ZSBvbmx5IG9uIFdpbmNoaXAgMSAqLwotCQkJCSAgIAotCQkJCXdybXNyKE1TUl9JRFRfTUNSX0NUUkwsIDB4MDFGMDAwMUYsIDApOwotI2VuZGlmCQkJCQotCQkJCWJyZWFrOwotCQkJY2FzZSA4OgotCQkJCXN3aXRjaChjLT54ODZfbWFzaykgewotCQkJCWRlZmF1bHQ6Ci0JCQkJCW5hbWU9IjIiOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDcgLi4uIDk6Ci0JCQkJCW5hbWU9IjJBIjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMCAuLi4gMTU6Ci0JCQkJCW5hbWU9IjJCIjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWZjcl9zZXQ9RUNYOHxEU01DfERUTE9DS3xFTU1YfEVCUlBSRUR8RVJFVFNUS3xFMk1NWHxFQU1EM0Q7Ci0JCQkJZmNyX2Nscj1EUERDOwotI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQotCQkJCXdpbmNoaXAyX3VucHJvdGVjdF9tY3IoKTsKLQkJCQl3aW5jaGlwMl9jcmVhdGVfb3B0aW1hbF9tY3IoKTsKLQkJCQlyZG1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOwotCQkJCS8qIEVuYWJsZQotCQkJCQl3cml0ZSBjb21iaW5pbmcgb24gbm9uLXN0YWNrLCBub24tc3RyaW5nCi0JCQkJCXdyaXRlIGNvbWJpbmluZyBvbiBzdHJpbmcsIGFsbCB0eXBlcwotCQkJCQl3ZWFrIHdyaXRlIG9yZGVyaW5nIAotCQkJCSovCi0JCQkJbG98PTMxOwkJCQkKLQkJCQl3cm1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOwotCQkJCXdpbmNoaXAyX3Byb3RlY3RfbWNyKCk7CisJCQljZW50YXVyX2NyZWF0ZV9vcHRpbWFsX21jcigpOworCQkJLyoKKwkJCSAqIEVuYWJsZToKKwkJCSAqCXdyaXRlIGNvbWJpbmluZyBvbiBub24tc3RhY2ssIG5vbi1zdHJpbmcKKwkJCSAqCXdyaXRlIGNvbWJpbmluZyBvbiBzdHJpbmcsIGFsbCB0eXBlcworCQkJICoJd2VhayB3cml0ZSBvcmRlcmluZworCQkJICoKKwkJCSAqIFRoZSBDNiBvcmlnaW5hbCBsYWNrcyB3ZWFrIHJlYWQgb3JkZXIKKwkJCSAqCisJCQkgKiBOb3RlIDB4MTIwIGlzIHdyaXRlIG9ubHkgb24gV2luY2hpcCAxCisJCQkgKi8KKwkJCXdybXNyKE1TUl9JRFRfTUNSX0NUUkwsIDB4MDFGMDAwMUYsIDApOwogI2VuZGlmCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDk6Ci0JCQkJbmFtZT0iMyI7Ci0JCQkJZmNyX3NldD1FQ1g4fERTTUN8RFRMT0NLfEVNTVh8RUJSUFJFRHxFUkVUU1RLfEUyTU1YfEVBTUQzRDsKLQkJCQlmY3JfY2xyPURQREM7Ci0jaWZkZWYgQ09ORklHX1g4Nl9PT1NUT1JFCi0JCQkJd2luY2hpcDJfdW5wcm90ZWN0X21jcigpOwotCQkJCXdpbmNoaXAyX2NyZWF0ZV9vcHRpbWFsX21jcigpOwotCQkJCXJkbXNyKE1TUl9JRFRfTUNSX0NUUkwsIGxvLCBoaSk7Ci0JCQkJLyogRW5hYmxlCi0JCQkJCXdyaXRlIGNvbWJpbmluZyBvbiBub24tc3RhY2ssIG5vbi1zdHJpbmcKLQkJCQkJd3JpdGUgY29tYmluaW5nIG9uIHN0cmluZywgYWxsIHR5cGVzCi0JCQkJCXdlYWsgd3JpdGUgb3JkZXJpbmcgCi0JCQkJKi8KLQkJCQlsb3w9MzE7CQkJCQotCQkJCXdybXNyKE1TUl9JRFRfTUNSX0NUUkwsIGxvLCBoaSk7Ci0JCQkJd2luY2hpcDJfcHJvdGVjdF9tY3IoKTsKLSNlbmRpZgotCQkJCWJyZWFrOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXN3aXRjaCAoYy0+eDg2X21hc2spIHsKIAkJCWRlZmF1bHQ6Ci0JCQkJbmFtZT0iPz8iOworCQkJbmFtZSA9ICIyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgNyAuLi4gOToKKwkJCQluYW1lID0gIjJBIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTAgLi4uIDE1OgorCQkJCW5hbWUgPSAiMkIiOworCQkJCWJyZWFrOwogCQkJfQotCi0JCQlyZG1zcihNU1JfSURUX0ZDUjEsIGxvLCBoaSk7Ci0JCQluZXdsbz0obG98ZmNyX3NldCkgJiAofmZjcl9jbHIpOwotCi0JCQlpZiAobmV3bG8hPWxvKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2VudGF1ciBGQ1Igd2FzIDB4JVggbm93IDB4JVhcbiIsIGxvLCBuZXdsbyApOwotCQkJCXdybXNyKE1TUl9JRFRfRkNSMSwgbmV3bG8sIGhpICk7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0lORk8gIkNlbnRhdXIgRkNSIGlzIDB4JVhcbiIsbG8pOwotCQkJfQotCQkJLyogRW11bGF0ZSBNVFJScyB1c2luZyBDZW50YXVyJ3MgTUNSLiAqLwotCQkJc2V0X2JpdChYODZfRkVBVFVSRV9DRU5UQVVSX01DUiwgYy0+eDg2X2NhcGFiaWxpdHkpOwotCQkJLyogUmVwb3J0IENYOCAqLwotCQkJc2V0X2JpdChYODZfRkVBVFVSRV9DWDgsIGMtPng4Nl9jYXBhYmlsaXR5KTsKLQkJCS8qIFNldCAzRE5vdyEgb24gV2luY2hpcCAyIGFuZCBhYm92ZS4gKi8KLQkJCWlmIChjLT54ODZfbW9kZWwgPj04KQotCQkJCXNldF9iaXQoWDg2X0ZFQVRVUkVfM0ROT1csIGMtPng4Nl9jYXBhYmlsaXR5KTsKLQkJCS8qIFNlZSBpZiB3ZSBjYW4gZmluZCBvdXQgc29tZSBtb3JlLiAqLwotCQkJaWYgKCBjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNSApIHsKLQkJCQkvKiBZZXMsIHdlIGNhbi4gKi8KLQkJCQljcHVpZCgweDgwMDAwMDA1LCZhYSwmYmIsJmNjLCZkZCk7Ci0JCQkJLyogQWRkIEwxIGRhdGEgYW5kIGNvZGUgY2FjaGUgc2l6ZXMuICovCi0JCQkJYy0+eDg2X2NhY2hlX3NpemUgPSAoY2M+PjI0KSsoZGQ+PjI0KTsKLQkJCX0KLQkJCXNwcmludGYoIGMtPng4Nl9tb2RlbF9pZCwgIldpbkNoaXAgJXMiLCBuYW1lICk7CisJCQlmY3Jfc2V0ID0gRUNYOHxEU01DfERUTE9DS3xFTU1YfEVCUlBSRUR8RVJFVFNUS3wKKwkJCQkgIEUyTU1YfEVBTUQzRDsKKwkJCWZjcl9jbHIgPSBEUERDOworI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQorCQkJd2luY2hpcDJfdW5wcm90ZWN0X21jcigpOworCQkJd2luY2hpcDJfY3JlYXRlX29wdGltYWxfbWNyKCk7CisJCQlyZG1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOworCQkJLyoKKwkJCSAqIEVuYWJsZToKKwkJCSAqCXdyaXRlIGNvbWJpbmluZyBvbiBub24tc3RhY2ssIG5vbi1zdHJpbmcKKwkJCSAqCXdyaXRlIGNvbWJpbmluZyBvbiBzdHJpbmcsIGFsbCB0eXBlcworCQkJICoJd2VhayB3cml0ZSBvcmRlcmluZworCQkJICovCisJCQlsbyB8PSAzMTsKKwkJCXdybXNyKE1TUl9JRFRfTUNSX0NUUkwsIGxvLCBoaSk7CisJCQl3aW5jaGlwMl9wcm90ZWN0X21jcigpOworI2VuZGlmCiAJCQlicmVhazsKLQotCQljYXNlIDY6Ci0JCQlpbml0X2MzKGMpOworCQljYXNlIDk6CisJCQluYW1lID0gIjMiOworCQkJZmNyX3NldCA9IEVDWDh8RFNNQ3xEVExPQ0t8RU1NWHxFQlJQUkVEfEVSRVRTVEt8CisJCQkJICBFMk1NWHxFQU1EM0Q7CisJCQlmY3JfY2xyID0gRFBEQzsKKyNpZmRlZiBDT05GSUdfWDg2X09PU1RPUkUKKwkJCXdpbmNoaXAyX3VucHJvdGVjdF9tY3IoKTsKKwkJCXdpbmNoaXAyX2NyZWF0ZV9vcHRpbWFsX21jcigpOworCQkJcmRtc3IoTVNSX0lEVF9NQ1JfQ1RSTCwgbG8sIGhpKTsKKwkJCS8qCisJCQkgKiBFbmFibGU6CisJCQkgKgl3cml0ZSBjb21iaW5pbmcgb24gbm9uLXN0YWNrLCBub24tc3RyaW5nCisJCQkgKgl3cml0ZSBjb21iaW5pbmcgb24gc3RyaW5nLCBhbGwgdHlwZXMKKwkJCSAqCXdlYWsgd3JpdGUgb3JkZXJpbmcKKwkJCSAqLworCQkJbG8gfD0gMzE7CisJCQl3cm1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOworCQkJd2luY2hpcDJfcHJvdGVjdF9tY3IoKTsKKyNlbmRpZgogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluYW1lID0gIj8/IjsKKwkJfQorCisJCXJkbXNyKE1TUl9JRFRfRkNSMSwgbG8sIGhpKTsKKwkJbmV3bG8gPSAobG98ZmNyX3NldCkgJiAofmZjcl9jbHIpOworCisJCWlmIChuZXdsbyAhPSBsbykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2VudGF1ciBGQ1Igd2FzIDB4JVggbm93IDB4JVhcbiIsCisJCQkJbG8sIG5ld2xvKTsKKwkJCXdybXNyKE1TUl9JRFRfRkNSMSwgbmV3bG8sIGhpKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkNlbnRhdXIgRkNSIGlzIDB4JVhcbiIsIGxvKTsKKwkJfQorCQkvKiBFbXVsYXRlIE1UUlJzIHVzaW5nIENlbnRhdXIncyBNQ1IuICovCisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSKTsKKwkJLyogUmVwb3J0IENYOCAqLworCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DWDgpOworCQkvKiBTZXQgM0ROb3chIG9uIFdpbmNoaXAgMiBhbmQgYWJvdmUuICovCisJCWlmIChjLT54ODZfbW9kZWwgPj0gOCkKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFXzNETk9XKTsKKwkJLyogU2VlIGlmIHdlIGNhbiBmaW5kIG91dCBzb21lIG1vcmUuICovCisJCWlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNSkgeworCQkJLyogWWVzLCB3ZSBjYW4uICovCisJCQljcHVpZCgweDgwMDAwMDA1LCAmYWEsICZiYiwgJmNjLCAmZGQpOworCQkJLyogQWRkIEwxIGRhdGEgYW5kIGNvZGUgY2FjaGUgc2l6ZXMuICovCisJCQljLT54ODZfY2FjaGVfc2l6ZSA9IChjYz4+MjQpKyhkZD4+MjQpOworCQl9CisJCXNwcmludGYoYy0+eDg2X21vZGVsX2lkLCAiV2luQ2hpcCAlcyIsIG5hbWUpOworCQlicmVhazsKKworCWNhc2UgNjoKKwkJaW5pdF9jMyhjKTsKKwkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdCBjZW50YXVyX3NpemVfY2FjaGUoc3RydWN0IGNwdWluZm9feDg2ICogYywgdW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdAorY2VudGF1cl9zaXplX2NhY2hlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJLyogVklBIEMzIENQVXMgKDY3MC02OEYpIG5lZWQgZnVydGhlciBzaGlmdGluZy4gKi8KIAlpZiAoKGMtPng4NiA9PSA2KSAmJiAoKGMtPng4Nl9tb2RlbCA9PSA3KSB8fCAoYy0+eDg2X21vZGVsID09IDgpKSkKIAkJc2l6ZSA+Pj0gODsKIAotCS8qIFZJQSBhbHNvIHNjcmV3ZWQgdXAgTmVoZW1pYWggc3RlcHBpbmcgMSwgYW5kIG1hZGUKLQkgICBpdCByZXR1cm4gJzY1S0InIGluc3RlYWQgb2YgJzY0S0InCi0JICAgLSBOb3RlLCBpdCBzZWVtcyB0aGlzIG1heSBvbmx5IGJlIGluIGVuZ2luZWVyaW5nIHNhbXBsZXMuICovCi0JaWYgKChjLT54ODY9PTYpICYmIChjLT54ODZfbW9kZWw9PTkpICYmIChjLT54ODZfbWFzaz09MSkgJiYgKHNpemU9PTY1KSkKLQkJc2l6ZSAtPTE7CisJLyoKKwkgKiBUaGVyZSdzIGFsc28gYW4gZXJyYXR1bSBpbiBOZWhlbWlhaCBzdGVwcGluZyAxLCB3aGljaAorCSAqIHJldHVybnMgJzY1S0InIGluc3RlYWQgb2YgJzY0S0InCisJICogIC0gTm90ZSwgaXQgc2VlbXMgdGhpcyBtYXkgb25seSBiZSBpbiBlbmdpbmVlcmluZyBzYW1wbGVzLgorCSAqLworCWlmICgoYy0+eDg2ID09IDYpICYmIChjLT54ODZfbW9kZWwgPT0gOSkgJiYKKwkJCQkoYy0+eDg2X21hc2sgPT0gMSkgJiYgKHNpemUgPT0gNjUpKQorCQlzaXplIC09IDE7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTQ2NCw4ICs0NjYsNCBAQAogCS5jX3NpemVfY2FjaGUJPSBjZW50YXVyX3NpemVfY2FjaGUsCiB9OwogCi1pbnQgX19pbml0IGNlbnRhdXJfaW5pdF9jcHUodm9pZCkKLXsKLQljcHVfZGV2c1tYODZfVkVORE9SX0NFTlRBVVJdID0gJmNlbnRhdXJfY3B1X2RldjsKLQlyZXR1cm4gMDsKLX0KK2NwdV92ZW5kb3JfZGV2X3JlZ2lzdGVyKFg4Nl9WRU5ET1JfQ0VOVEFVUiwgJmNlbnRhdXJfY3B1X2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBmODZhM2M0Li4zNWI0ZjZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CkBAIC02Miw5ICs2MSw5IEBACiBzdGF0aWMgaW50IGNhY2hlc2l6ZV9vdmVycmlkZSBfX2NwdWluaXRkYXRhID0gLTE7CiBzdGF0aWMgaW50IGRpc2FibGVfeDg2X3NlcmlhbF9uciBfX2NwdWluaXRkYXRhID0gMTsKIAotc3RydWN0IGNwdV9kZXYgKiBjcHVfZGV2c1tYODZfVkVORE9SX05VTV0gPSB7fTsKK3N0cnVjdCBjcHVfZGV2ICpjcHVfZGV2c1tYODZfVkVORE9SX05VTV0gPSB7fTsKIAotc3RhdGljIHZvaWQgX19jcHVpbml0IGRlZmF1bHRfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKiBjKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGRlZmF1bHRfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJLyogTm90IG11Y2ggd2UgY2FuIGRvIGhlcmUuLi4gKi8KIAkvKiBDaGVjayBpZiBhdCBsZWFzdCBpdCBoYXMgY3B1aWQgKi8KQEAgLTgxLDExICs4MCwxMSBAQAogCS5jX2luaXQJPSBkZWZhdWx0X2luaXQsCiAJLmNfdmVuZG9yID0gIlVua25vd24iLAogfTsKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiAqIHRoaXNfY3B1IF9fY3B1aW5pdGRhdGEgPSAmZGVmYXVsdF9jcHU7CitzdGF0aWMgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGEgPSAmZGVmYXVsdF9jcHU7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNhY2hlc2l6ZV9zZXR1cChjaGFyICpzdHIpCiB7Ci0JZ2V0X29wdGlvbiAoJnN0ciwgJmNhY2hlc2l6ZV9vdmVycmlkZSk7CisJZ2V0X29wdGlvbigmc3RyLCAmY2FjaGVzaXplX292ZXJyaWRlKTsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImNhY2hlc2l6ZT0iLCBjYWNoZXNpemVfc2V0dXApOwpAQCAtMTA3LDEyICsxMDYsMTIgQEAKIAkvKiBJbnRlbCBjaGlwcyByaWdodC1qdXN0aWZ5IHRoaXMgc3RyaW5nIGZvciBzb21lIGR1bWIgcmVhc29uOwogCSAgIHVuZG8gdGhhdCBicmFpbiBkYW1hZ2UgKi8KIAlwID0gcSA9ICZjLT54ODZfbW9kZWxfaWRbMF07Ci0Jd2hpbGUgKCAqcCA9PSAnICcgKQorCXdoaWxlICgqcCA9PSAnICcpCiAJICAgICBwKys7Ci0JaWYgKCBwICE9IHEgKSB7Ci0JICAgICB3aGlsZSAoICpwICkKKwlpZiAocCAhPSBxKSB7CisJICAgICB3aGlsZSAoKnApCiAJCSAgKnErKyA9ICpwKys7Ci0JICAgICB3aGlsZSAoIHEgPD0gJmMtPng4Nl9tb2RlbF9pZFs0OF0gKQorCSAgICAgd2hpbGUgKHEgPD0gJmMtPng4Nl9tb2RlbF9pZFs0OF0pCiAJCSAgKnErKyA9ICdcMCc7CS8qIFplcm8tcGFkIHRoZSByZXN0ICovCiAJfQogCkBAIC0xMzAsNyArMTI5LDcgQEAKIAkJY3B1aWQoMHg4MDAwMDAwNSwgJmR1bW15LCAmZHVtbXksICZlY3gsICZlZHgpOwogCQlwcmludGsoS0VSTl9JTkZPICJDUFU6IEwxIEkgQ2FjaGU6ICVkSyAoJWQgYnl0ZXMvbGluZSksIEQgY2FjaGUgJWRLICglZCBieXRlcy9saW5lKVxuIiwKIAkJCWVkeD4+MjQsIGVkeCYweEZGLCBlY3g+PjI0LCBlY3gmMHhGRik7Ci0JCWMtPng4Nl9jYWNoZV9zaXplPShlY3g+PjI0KSsoZWR4Pj4yNCk7CQorCQljLT54ODZfY2FjaGVfc2l6ZSA9IChlY3g+PjI0KSsoZWR4Pj4yNCk7CiAJfQogCiAJaWYgKG4gPCAweDgwMDAwMDA2KQkvKiBTb21lIGNoaXBzIGp1c3QgaGFzIGEgbGFyZ2UgTDEuICovCkBAIC0xMzgsMTYgKzEzNywxNiBAQAogCiAJZWN4ID0gY3B1aWRfZWN4KDB4ODAwMDAwMDYpOwogCWwyc2l6ZSA9IGVjeCA+PiAxNjsKLQkKKwogCS8qIGRvIHByb2Nlc3Nvci1zcGVjaWZpYyBjYWNoZSByZXNpemluZyAqLwogCWlmICh0aGlzX2NwdS0+Y19zaXplX2NhY2hlKQotCQlsMnNpemUgPSB0aGlzX2NwdS0+Y19zaXplX2NhY2hlKGMsbDJzaXplKTsKKwkJbDJzaXplID0gdGhpc19jcHUtPmNfc2l6ZV9jYWNoZShjLCBsMnNpemUpOwogCiAJLyogQWxsb3cgdXNlciB0byBvdmVycmlkZSBhbGwgdGhpcyBpZiBuZWNlc3NhcnkuICovCiAJaWYgKGNhY2hlc2l6ZV9vdmVycmlkZSAhPSAtMSkKIAkJbDJzaXplID0gY2FjaGVzaXplX292ZXJyaWRlOwogCi0JaWYgKCBsMnNpemUgPT0gMCApCisJaWYgKGwyc2l6ZSA9PSAwKQogCQlyZXR1cm47CQkvKiBBZ2Fpbiwgbm8gTDIgY2FjaGUgaXMgcG9zc2libGUgKi8KIAogCWMtPng4Nl9jYWNoZV9zaXplID0gbDJzaXplOwpAQCAtMTU2LDE2ICsxNTUsMTkgQEAKIAkgICAgICAgbDJzaXplLCBlY3ggJiAweEZGKTsKIH0KIAotLyogTmFtaW5nIGNvbnZlbnRpb24gc2hvdWxkIGJlOiA8TmFtZT4gWyg8Q29kZW5hbWU+KV0gKi8KLS8qIFRoaXMgdGFibGUgb25seSBpcyB1c2VkIHVubGVzcyBpbml0Xzx2ZW5kb3I+KCkgYmVsb3cgZG9lc24ndCBzZXQgaXQ7ICovCi0vKiBpbiBwYXJ0aWN1bGFyLCBpZiBDUFVJRCBsZXZlbHMgMHg4MDAwMDAwMi4uNCBhcmUgc3VwcG9ydGVkLCB0aGlzIGlzbid0IHVzZWQgKi8KKy8qCisgKiBOYW1pbmcgY29udmVudGlvbiBzaG91bGQgYmU6IDxOYW1lPiBbKDxDb2RlbmFtZT4pXQorICogVGhpcyB0YWJsZSBvbmx5IGlzIHVzZWQgdW5sZXNzIGluaXRfPHZlbmRvcj4oKSBiZWxvdyBkb2Vzbid0IHNldCBpdDsKKyAqIGluIHBhcnRpY3VsYXIsIGlmIENQVUlEIGxldmVscyAweDgwMDAwMDAyLi40IGFyZSBzdXBwb3J0ZWQsIHRoaXMgaXNuJ3QgdXNlZAorICoKKyAqLwogCiAvKiBMb29rIHVwIENQVSBuYW1lcyBieSB0YWJsZSBsb29rdXAuICovCiBzdGF0aWMgY2hhciBfX2NwdWluaXQgKnRhYmxlX2xvb2t1cF9tb2RlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJc3RydWN0IGNwdV9tb2RlbF9pbmZvICppbmZvOwogCi0JaWYgKCBjLT54ODZfbW9kZWwgPj0gMTYgKQorCWlmIChjLT54ODZfbW9kZWwgPj0gMTYpCiAJCXJldHVybiBOVUxMOwkvKiBSYW5nZSBjaGVjayAqLwogCiAJaWYgKCF0aGlzX2NwdSkKQEAgLTE5MCw5ICsxOTIsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IFg4Nl9WRU5ET1JfTlVNOyBpKyspIHsKIAkJaWYgKGNwdV9kZXZzW2ldKSB7Ci0JCQlpZiAoIXN0cmNtcCh2LGNwdV9kZXZzW2ldLT5jX2lkZW50WzBdKSB8fAotCQkJICAgIChjcHVfZGV2c1tpXS0+Y19pZGVudFsxXSAmJiAKLQkJCSAgICAgIXN0cmNtcCh2LGNwdV9kZXZzW2ldLT5jX2lkZW50WzFdKSkpIHsKKwkJCWlmICghc3RyY21wKHYsIGNwdV9kZXZzW2ldLT5jX2lkZW50WzBdKSB8fAorCQkJICAgIChjcHVfZGV2c1tpXS0+Y19pZGVudFsxXSAmJgorCQkJICAgICAhc3RyY21wKHYsIGNwdV9kZXZzW2ldLT5jX2lkZW50WzFdKSkpIHsKIAkJCQljLT54ODZfdmVuZG9yID0gaTsKIAkJCQlpZiAoIWVhcmx5KQogCQkJCQl0aGlzX2NwdSA9IGNwdV9kZXZzW2ldOwpAQCAtMjEwLDcgKzIxMiw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2luaXQgeDg2X2Z4c3Jfc2V0dXAoY2hhciAqIHMpCitzdGF0aWMgaW50IF9faW5pdCB4ODZfZnhzcl9zZXR1cChjaGFyICpzKQogewogCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfRlhTUik7CiAJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9YTU0pOwpAQCAtMjE5LDcgKzIyMSw3IEBACiBfX3NldHVwKCJub2Z4c3IiLCB4ODZfZnhzcl9zZXR1cCk7CiAKIAotc3RhdGljIGludCBfX2luaXQgeDg2X3NlcF9zZXR1cChjaGFyICogcykKK3N0YXRpYyBpbnQgX19pbml0IHg4Nl9zZXBfc2V0dXAoY2hhciAqcykKIHsKIAlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFUCk7CiAJcmV0dXJuIDE7CkBAIC0zMDYsMTQgKzMwOCwzMCBAQAogCiAJfQogCisJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QQVQpOworCisJc3dpdGNoIChjLT54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJaWYgKGMtPng4NiA+PSAweGYgJiYgYy0+eDg2IDw9IDB4MTEpCisJCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QQVQpOworCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWlmIChjLT54ODYgPT0gMHhGIHx8IChjLT54ODYgPT0gNiAmJiBjLT54ODZfbW9kZWwgPj0gMTUpKQorCQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUEFUKTsKKwkJYnJlYWs7CisJfQorCiB9CiAKLS8qIERvIG1pbmltdW0gQ1BVIGRldGVjdGlvbiBlYXJseS4KLSAgIEZpZWxkcyByZWFsbHkgbmVlZGVkOiB2ZW5kb3IsIGNwdWlkX2xldmVsLCBmYW1pbHksIG1vZGVsLCBtYXNrLCBjYWNoZSBhbGlnbm1lbnQuCi0gICBUaGUgb3RoZXJzIGFyZSBub3QgdG91Y2hlZCB0byBhdm9pZCB1bndhbnRlZCBzaWRlIGVmZmVjdHMuCi0KLSAgIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gdGhlIEJQLiAgRG9uJ3QgYWRkIGNvZGUgaGVyZQotICAgdGhhdCBpcyBzdXBwb3NlZCB0byBydW4gb24gYWxsIENQVXMuICovCisvKgorICogRG8gbWluaW11bSBDUFUgZGV0ZWN0aW9uIGVhcmx5LgorICogRmllbGRzIHJlYWxseSBuZWVkZWQ6IHZlbmRvciwgY3B1aWRfbGV2ZWwsIGZhbWlseSwgbW9kZWwsIG1hc2ssCisgKiBjYWNoZSBhbGlnbm1lbnQuCisgKiBUaGUgb3RoZXJzIGFyZSBub3QgdG91Y2hlZCB0byBhdm9pZCB1bndhbnRlZCBzaWRlIGVmZmVjdHMuCisgKgorICogV0FSTklORzogdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgQlAuICBEb24ndCBhZGQgY29kZSBoZXJlCisgKiB0aGF0IGlzIHN1cHBvc2VkIHRvIHJ1biBvbiBhbGwgQ1BVcy4KKyAqLwogc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2NwdV9kZXRlY3Qodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKQEAgLTMyOCwxOSArMzQ2LDE0IEBACiAKIAlnZXRfY3B1X3ZlbmRvcihjLCAxKTsKIAotCXN3aXRjaCAoYy0+eDg2X3ZlbmRvcikgewotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCWVhcmx5X2luaXRfYW1kKGMpOwotCQlicmVhazsKLQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCWVhcmx5X2luaXRfaW50ZWwoYyk7Ci0JCWJyZWFrOwotCX0KKwlpZiAoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX1VOS05PV04gJiYKKwkgICAgY3B1X2RldnNbYy0+eDg2X3ZlbmRvcl0tPmNfZWFybHlfaW5pdCkKKwkJY3B1X2RldnNbYy0+eDg2X3ZlbmRvcl0tPmNfZWFybHlfaW5pdChjKTsKIAogCWVhcmx5X2dldF9jYXAoYyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqIGMpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgZ2VuZXJpY19pZGVudGlmeShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdTMyIHRmbXMsIHhsdmw7CiAJdW5zaWduZWQgaW50IGVieDsKQEAgLTM1MSwxMyArMzY0LDEyIEBACiAJCSAgICAgICh1bnNpZ25lZCBpbnQgKikmYy0+eDg2X3ZlbmRvcl9pZFswXSwKIAkJICAgICAgKHVuc2lnbmVkIGludCAqKSZjLT54ODZfdmVuZG9yX2lkWzhdLAogCQkgICAgICAodW5zaWduZWQgaW50ICopJmMtPng4Nl92ZW5kb3JfaWRbNF0pOwotCQkKKwogCQlnZXRfY3B1X3ZlbmRvcihjLCAwKTsKIAkJLyogSW5pdGlhbGl6ZSB0aGUgc3RhbmRhcmQgc2V0IG9mIGNhcGFiaWxpdGllcyAqLwogCQkvKiBOb3RlIHRoYXQgdGhlIHZlbmRvci1zcGVjaWZpYyBjb2RlIGJlbG93IG1pZ2h0IG92ZXJyaWRlICovCi0JCiAJCS8qIEludGVsLWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4MDAwMDAwMDEgKi8KLQkJaWYgKCBjLT5jcHVpZF9sZXZlbCA+PSAweDAwMDAwMDAxICkgeworCQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMHgwMDAwMDAwMSkgewogCQkJdTMyIGNhcGFiaWxpdHksIGV4Y2FwOwogCQkJY3B1aWQoMHgwMDAwMDAwMSwgJnRmbXMsICZlYngsICZleGNhcCwgJmNhcGFiaWxpdHkpOwogCQkJYy0+eDg2X2NhcGFiaWxpdHlbMF0gPSBjYXBhYmlsaXR5OwpAQCAtMzY5LDEyICszODEsMTQgQEAKIAkJCWlmIChjLT54ODYgPj0gMHg2KQogCQkJCWMtPng4Nl9tb2RlbCArPSAoKHRmbXMgPj4gMTYpICYgMHhGKSA8PCA0OwogCQkJYy0+eDg2X21hc2sgPSB0Zm1zICYgMTU7CisJCQljLT5pbml0aWFsX2FwaWNpZCA9IChlYnggPj4gMjQpICYgMHhGRjsKICNpZmRlZiBDT05GSUdfWDg2X0hUCi0JCQljLT5hcGljaWQgPSBwaHlzX3BrZ19pZCgoZWJ4ID4+IDI0KSAmIDB4RkYsIDApOworCQkJYy0+YXBpY2lkID0gcGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIDApOworCQkJYy0+cGh5c19wcm9jX2lkID0gYy0+aW5pdGlhbF9hcGljaWQ7CiAjZWxzZQotCQkJYy0+YXBpY2lkID0gKGVieCA+PiAyNCkgJiAweEZGOworCQkJYy0+YXBpY2lkID0gYy0+aW5pdGlhbF9hcGljaWQ7CiAjZW5kaWYKLQkJCWlmIChjLT54ODZfY2FwYWJpbGl0eVswXSAmICgxPDwxOSkpCisJCQlpZiAodGVzdF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NMRkxTSCkpCiAJCQkJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9ICgoZWJ4ID4+IDgpICYgMHhmZikgKiA4OwogCQl9IGVsc2UgewogCQkJLyogSGF2ZSBDUFVJRCBsZXZlbCAwIG9ubHkgLSB1bmhlYXJkIG9mICovCkBAIC0zODMsMzMgKzM5Nyw0MiBAQAogCiAJCS8qIEFNRC1kZWZpbmVkIGZsYWdzOiBsZXZlbCAweDgwMDAwMDAxICovCiAJCXhsdmwgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMCk7Ci0JCWlmICggKHhsdmwgJiAweGZmZmYwMDAwKSA9PSAweDgwMDAwMDAwICkgewotCQkJaWYgKCB4bHZsID49IDB4ODAwMDAwMDEgKSB7CisJCWlmICgoeGx2bCAmIDB4ZmZmZjAwMDApID09IDB4ODAwMDAwMDApIHsKKwkJCWlmICh4bHZsID49IDB4ODAwMDAwMDEpIHsKIAkJCQljLT54ODZfY2FwYWJpbGl0eVsxXSA9IGNwdWlkX2VkeCgweDgwMDAwMDAxKTsKIAkJCQljLT54ODZfY2FwYWJpbGl0eVs2XSA9IGNwdWlkX2VjeCgweDgwMDAwMDAxKTsKIAkJCX0KLQkJCWlmICggeGx2bCA+PSAweDgwMDAwMDA0ICkKKwkJCWlmICh4bHZsID49IDB4ODAwMDAwMDQpCiAJCQkJZ2V0X21vZGVsX25hbWUoYyk7IC8qIERlZmF1bHQgbmFtZSAqLwogCQl9CiAKIAkJaW5pdF9zY2F0dGVyZWRfY3B1aWRfZmVhdHVyZXMoYyk7CiAJfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9IVAotCWMtPnBoeXNfcHJvY19pZCA9IChjcHVpZF9lYngoMSkgPj4gMjQpICYgMHhmZjsKLSNlbmRpZgorCWNsZWFyX2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUEFUKTsKKworCXN3aXRjaCAoYy0+eDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWlmIChjLT54ODYgPj0gMHhmICYmIGMtPng4NiA8PSAweDExKQorCQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUEFUKTsKKwkJYnJlYWs7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlpZiAoYy0+eDg2ID09IDB4RiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDE1KSkKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1BBVCk7CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHNxdWFzaF90aGVfc3R1cGlkX3NlcmlhbF9udW1iZXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BOKSAmJiBkaXNhYmxlX3g4Nl9zZXJpYWxfbnIgKSB7CisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUE4pICYmIGRpc2FibGVfeDg2X3NlcmlhbF9ucikgewogCQkvKiBEaXNhYmxlIHByb2Nlc3NvciBzZXJpYWwgbnVtYmVyICovCi0JCXVuc2lnbmVkIGxvbmcgbG8saGk7Ci0JCXJkbXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsbG8saGkpOworCQl1bnNpZ25lZCBsb25nIGxvLCBoaTsKKwkJcmRtc3IoTVNSX0lBMzJfQkJMX0NSX0NUTCwgbG8sIGhpKTsKIAkJbG8gfD0gMHgyMDAwMDA7Ci0JCXdybXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsbG8saGkpOworCQl3cm1zcihNU1JfSUEzMl9CQkxfQ1JfQ1RMLCBsbywgaGkpOwogCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNQVSBzZXJpYWwgbnVtYmVyIGRpc2FibGVkLlxuIik7Ci0JCWNsZWFyX2JpdChYODZfRkVBVFVSRV9QTiwgYy0+eDg2X2NhcGFiaWxpdHkpOworCQljbGVhcl9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1BOKTsKIAogCQkvKiBEaXNhYmxpbmcgdGhlIHNlcmlhbCBudW1iZXIgbWF5IGFmZmVjdCB0aGUgY3B1aWQgbGV2ZWwgKi8KIAkJYy0+Y3B1aWRfbGV2ZWwgPSBjcHVpZF9lYXgoMCk7CkBAIC00NDQsOSArNDY3LDExIEBACiAJbWVtc2V0KCZjLT54ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mIGMtPng4Nl9jYXBhYmlsaXR5KTsKIAogCWlmICghaGF2ZV9jcHVpZF9wKCkpIHsKLQkJLyogRmlyc3Qgb2YgYWxsLCBkZWNpZGUgaWYgdGhpcyBpcyBhIDQ4NiBvciBoaWdoZXIgKi8KLQkJLyogSXQncyBhIDQ4NiBpZiB3ZSBjYW4gbW9kaWZ5IHRoZSBBQyBmbGFnICovCi0JCWlmICggZmxhZ19pc19jaGFuZ2VhYmxlX3AoWDg2X0VGTEFHU19BQykgKQorCQkvKgorCQkgKiBGaXJzdCBvZiBhbGwsIGRlY2lkZSBpZiB0aGlzIGlzIGEgNDg2IG9yIGhpZ2hlcgorCQkgKiBJdCdzIGEgNDg2IGlmIHdlIGNhbiBtb2RpZnkgdGhlIEFDIGZsYWcKKwkJICovCisJCWlmIChmbGFnX2lzX2NoYW5nZWFibGVfcChYODZfRUZMQUdTX0FDKSkKIAkJCWMtPng4NiA9IDQ7CiAJCWVsc2UKIAkJCWMtPng4NiA9IDM7CkBAIC00NzksMTAgKzUwNCwxMCBAQAogCSAqLwogCiAJLyogSWYgdGhlIG1vZGVsIG5hbWUgaXMgc3RpbGwgdW5zZXQsIGRvIHRhYmxlIGxvb2t1cC4gKi8KLQlpZiAoICFjLT54ODZfbW9kZWxfaWRbMF0gKSB7CisJaWYgKCFjLT54ODZfbW9kZWxfaWRbMF0pIHsKIAkJY2hhciAqcDsKIAkJcCA9IHRhYmxlX2xvb2t1cF9tb2RlbChjKTsKLQkJaWYgKCBwICkKKwkJaWYgKHApCiAJCQlzdHJjcHkoYy0+eDg2X21vZGVsX2lkLCBwKTsKIAkJZWxzZQogCQkJLyogTGFzdCByZXNvcnQuLi4gKi8KQEAgLTQ5NiwxNSArNTIxLDE1IEBACiAJICogY29tbW9uIGJldHdlZW4gdGhlIENQVXMuICBUaGUgZmlyc3QgdGltZSB0aGlzIHJvdXRpbmUgZ2V0cwogCSAqIGV4ZWN1dGVkLCBjID09ICZib290X2NwdV9kYXRhLgogCSAqLwotCWlmICggYyAhPSAmYm9vdF9jcHVfZGF0YSApIHsKKwlpZiAoYyAhPSAmYm9vdF9jcHVfZGF0YSkgewogCQkvKiBBTkQgdGhlIGFscmVhZHkgYWNjdW11bGF0ZWQgZmxhZ3Mgd2l0aCB0aGVzZSAqLwotCQlmb3IgKCBpID0gMCA7IGkgPCBOQ0FQSU5UUyA7IGkrKyApCisJCWZvciAoaSA9IDAgOyBpIDwgTkNBUElOVFMgOyBpKyspCiAJCQlib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5W2ldICY9IGMtPng4Nl9jYXBhYmlsaXR5W2ldOwogCX0KIAogCS8qIENsZWFyIGFsbCBmbGFncyBvdmVycmlkZW4gYnkgb3B0aW9ucyAqLwogCWZvciAoaSA9IDA7IGkgPCBOQ0FQSU5UUzsgaSsrKQotCQljLT54ODZfY2FwYWJpbGl0eVtpXSBePSBjbGVhcmVkX2NwdV9jYXBzW2ldOworCQljLT54ODZfY2FwYWJpbGl0eVtpXSAmPSB+Y2xlYXJlZF9jcHVfY2Fwc1tpXTsKIAogCS8qIEluaXQgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gaWYgYXZhaWxhYmxlLiAqLwogCW1jaGVja19pbml0KGMpOwpAQCAtNTQyLDcgKzU2Nyw3IEBACiAKIAlpZiAoc21wX251bV9zaWJsaW5ncyA9PSAxKSB7CiAJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IEh5cGVyLVRocmVhZGluZyBpcyBkaXNhYmxlZFxuIik7Ci0JfSBlbHNlIGlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSApIHsKKwl9IGVsc2UgaWYgKHNtcF9udW1fc2libGluZ3MgPiAxKSB7CiAKIAkJaWYgKHNtcF9udW1fc2libGluZ3MgPiBOUl9DUFVTKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFU6IFVuc3VwcG9ydGVkIG51bWJlciBvZiB0aGUgIgpAQCAtNTUyLDcgKzU3Nyw3IEBACiAJCX0KIAogCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIoc21wX251bV9zaWJsaW5ncyk7Ci0JCWMtPnBoeXNfcHJvY19pZCA9IHBoeXNfcGtnX2lkKChlYnggPj4gMjQpICYgMHhGRiwgaW5kZXhfbXNiKTsKKwkJYy0+cGh5c19wcm9jX2lkID0gcGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYik7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogUGh5c2ljYWwgUHJvY2Vzc29yIElEOiAlZFxuIiwKIAkJICAgICAgIGMtPnBoeXNfcHJvY19pZCk7CkBAIC01NjMsNyArNTg4LDcgQEAKIAogCQljb3JlX2JpdHMgPSBnZXRfY291bnRfb3JkZXIoYy0+eDg2X21heF9jb3Jlcyk7CiAKLQkJYy0+Y3B1X2NvcmVfaWQgPSBwaHlzX3BrZ19pZCgoZWJ4ID4+IDI0KSAmIDB4RkYsIGluZGV4X21zYikgJgorCQljLT5jcHVfY29yZV9pZCA9IHBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpICYKIAkJCQkJICAgICAgICgoMSA8PCBjb3JlX2JpdHMpIC0gMSk7CiAKIAkJaWYgKGMtPng4Nl9tYXhfY29yZXMgPiAxKQpAQCAtNTk3LDcgKzYyMiw3IEBACiAJZWxzZQogCQlwcmludGsoIiVzIiwgYy0+eDg2X21vZGVsX2lkKTsKIAotCWlmIChjLT54ODZfbWFzayB8fCBjLT5jcHVpZF9sZXZlbCA+PSAwKSAKKwlpZiAoYy0+eDg2X21hc2sgfHwgYy0+Y3B1aWRfbGV2ZWwgPj0gMCkKIAkJcHJpbnRrKCIgc3RlcHBpbmcgJTAyeFxuIiwgYy0+eDg2X21hc2spOwogCWVsc2UKIAkJcHJpbnRrKCJcbiIpOwpAQCAtNjE2LDIzICs2NDEsMTUgQEAKIAogY3B1bWFza190IGNwdV9pbml0aWFsaXplZCBfX2NwdWluaXRkYXRhID0gQ1BVX01BU0tfTk9ORTsKIAotLyogVGhpcyBpcyBoYWNreS4gOikKLSAqIFdlJ3JlIGVtdWxhdGluZyBmdXR1cmUgYmVoYXZpb3IuCi0gKiBJbiB0aGUgZnV0dXJlLCB0aGUgY3B1LXNwZWNpZmljIGluaXQgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGltcGxpY2l0bHkKLSAqIHZpYSB0aGUgbWFnaWMgb2YgaW5pdGNhbGxzLgotICogVGhleSB3aWxsIGluc2VydCB0aGVtc2VsdmVzIGludG8gdGhlIGNwdV9kZXZzIHN0cnVjdHVyZS4KLSAqIFRoZW4sIHdoZW4gY3B1X2luaXQoKSBpcyBjYWxsZWQsIHdlIGNhbiBqdXN0IGl0ZXJhdGUgb3ZlciB0aGF0IGFycmF5LgotICovCiB2b2lkIF9faW5pdCBlYXJseV9jcHVfaW5pdCh2b2lkKQogewotCWludGVsX2NwdV9pbml0KCk7Ci0JY3lyaXhfaW5pdF9jcHUoKTsKLQluc2NfaW5pdF9jcHUoKTsKLQlhbWRfaW5pdF9jcHUoKTsKLQljZW50YXVyX2luaXRfY3B1KCk7Ci0JdHJhbnNtZXRhX2luaXRfY3B1KCk7Ci0JbmV4Z2VuX2luaXRfY3B1KCk7Ci0JdW1jX2luaXRfY3B1KCk7CisJc3RydWN0IGNwdV92ZW5kb3JfZGV2ICpjdmRldjsKKworCWZvciAoY3ZkZXYgPSBfX3g4NmNwdXZlbmRvcl9zdGFydCA7CisJICAgICBjdmRldiA8IF9feDg2Y3B1dmVuZG9yX2VuZCAgIDsKKwkgICAgIGN2ZGV2KyspCisJCWNwdV9kZXZzW2N2ZGV2LT52ZW5kb3JdID0gY3ZkZXYtPmNwdV9kZXY7CisKIAllYXJseV9jcHVfZGV0ZWN0KCk7CiB9CiAKQEAgLTY2Niw3ICs2ODMsNyBAQAogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKLQlzdHJ1Y3QgdHNzX3N0cnVjdCAqIHQgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKKwlzdHJ1Y3QgdHNzX3N0cnVjdCAqdCA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOwogCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSAmY3Vyci0+dGhyZWFkOwogCiAJaWYgKGNwdV90ZXN0X2FuZF9zZXQoY3B1LCBjcHVfaW5pdGlhbGl6ZWQpKSB7CkBAIC02OTIsNyArNzA5LDcgQEAKIAllbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3Vycik7CiAKIAlsb2FkX3NwMCh0LCB0aHJlYWQpOwotCXNldF90c3NfZGVzYyhjcHUsdCk7CisJc2V0X3Rzc19kZXNjKGNwdSwgdCk7CiAJbG9hZF9UUl9kZXNjKCk7CiAJbG9hZF9MRFQoJmluaXRfbW0uY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oCmluZGV4IGUwYjM4YzMuLjc4MzY5MWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaApAQCAtMTQsNiArMTQsNyBAQAogCiAJc3RydWN0CQljcHVfbW9kZWxfaW5mbyBjX21vZGVsc1s0XTsKIAorCXZvaWQgICAgICAgICAgICAoKmNfZWFybHlfaW5pdCkoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKIAl2b2lkCQkoKmNfaW5pdCkoc3RydWN0IGNwdWluZm9feDg2ICogYyk7CiAJdm9pZAkJKCpjX2lkZW50aWZ5KShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjKTsKIAl1bnNpZ25lZCBpbnQJKCpjX3NpemVfY2FjaGUpKHN0cnVjdCBjcHVpbmZvX3g4NiAqIGMsIHVuc2lnbmVkIGludCBzaXplKTsKQEAgLTIxLDE4ICsyMiwxNyBAQAogCiBleHRlcm4gc3RydWN0IGNwdV9kZXYgKiBjcHVfZGV2cyBbWDg2X1ZFTkRPUl9OVU1dOwogCitzdHJ1Y3QgY3B1X3ZlbmRvcl9kZXYgeworCWludCB2ZW5kb3I7CisJc3RydWN0IGNwdV9kZXYgKmNwdV9kZXY7Cit9OworCisjZGVmaW5lIGNwdV92ZW5kb3JfZGV2X3JlZ2lzdGVyKGNwdV92ZW5kb3JfaWQsIGNwdV9kZXYpIFwKKwlzdGF0aWMgc3RydWN0IGNwdV92ZW5kb3JfZGV2IF9fY3B1X3ZlbmRvcl9kZXZfIyNjcHVfdmVuZG9yX2lkIF9fdXNlZCBcCisJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi54ODZjcHV2ZW5kb3IuaW5pdCIpKSkgPSBcCisJeyBjcHVfdmVuZG9yX2lkLCBjcHVfZGV2IH0KKworZXh0ZXJuIHN0cnVjdCBjcHVfdmVuZG9yX2RldiBfX3g4NmNwdXZlbmRvcl9zdGFydFtdLCBfX3g4NmNwdXZlbmRvcl9lbmRbXTsKKwogZXh0ZXJuIGludCBnZXRfbW9kZWxfbmFtZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwogZXh0ZXJuIHZvaWQgZGlzcGxheV9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKTsKLQotZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9pbnRlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwotZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9hbWQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKLQotLyogU3BlY2lmaWMgQ1BVIHR5cGUgaW5pdCBmdW5jdGlvbnMgKi8KLWludCBpbnRlbF9jcHVfaW5pdCh2b2lkKTsKLWludCBhbWRfaW5pdF9jcHUodm9pZCk7Ci1pbnQgY3lyaXhfaW5pdF9jcHUodm9pZCk7Ci1pbnQgbnNjX2luaXRfY3B1KHZvaWQpOwotaW50IGNlbnRhdXJfaW5pdF9jcHUodm9pZCk7Ci1pbnQgdHJhbnNtZXRhX2luaXRfY3B1KHZvaWQpOwotaW50IG5leGdlbl9pbml0X2NwdSh2b2lkKTsKLWludCB1bWNfaW5pdF9jcHUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggYTk2MmRjYi4uZTJkODcwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMTkyLDkgKzE5Miw5IEBACiAJY3B1bWFza190IHNhdmVkX21hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJY21kLT52YWwgPSAwOwogCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjbWQtPm1hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjbWQtPm1hc2spOwogCWRvX2Rydl9yZWFkKGNtZCk7Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBzYXZlZF9tYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmc2F2ZWRfbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGRydl93cml0ZShzdHJ1Y3QgZHJ2X2NtZCAqY21kKQpAQCAtMjAzLDMwICsyMDMsMzAgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNtZC0+bWFzaykgewotCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGkpKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGkpKTsKIAkJZG9fZHJ2X3dyaXRlKGNtZCk7CiAJfQogCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBzYXZlZF9tYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmc2F2ZWRfbWFzayk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdTMyIGdldF9jdXJfdmFsKGNwdW1hc2tfdCBtYXNrKQorc3RhdGljIHUzMiBnZXRfY3VyX3ZhbChjb25zdCBjcHVtYXNrX3QgKm1hc2spCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpwZXJmOwogCXN0cnVjdCBkcnZfY21kIGNtZDsKIAotCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KG1hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1c19lbXB0eSgqbWFzaykpKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAocGVyX2NwdShkcnZfZGF0YSwgZmlyc3RfY3B1KG1hc2spKS0+Y3B1X2ZlYXR1cmUpIHsKKwlzd2l0Y2ggKHBlcl9jcHUoZHJ2X2RhdGEsIGZpcnN0X2NwdSgqbWFzaykpLT5jcHVfZmVhdHVyZSkgewogCWNhc2UgU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFOgogCQljbWQudHlwZSA9IFNZU1RFTV9JTlRFTF9NU1JfQ0FQQUJMRTsKIAkJY21kLmFkZHIubXNyLnJlZyA9IE1TUl9JQTMyX1BFUkZfU1RBVFVTOwogCQlicmVhazsKIAljYXNlIFNZU1RFTV9JT19DQVBBQkxFOgogCQljbWQudHlwZSA9IFNZU1RFTV9JT19DQVBBQkxFOwotCQlwZXJmID0gcGVyX2NwdShkcnZfZGF0YSwgZmlyc3RfY3B1KG1hc2spKS0+YWNwaV9kYXRhOworCQlwZXJmID0gcGVyX2NwdShkcnZfZGF0YSwgZmlyc3RfY3B1KCptYXNrKSktPmFjcGlfZGF0YTsKIAkJY21kLmFkZHIuaW8ucG9ydCA9IHBlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuYWRkcmVzczsKIAkJY21kLmFkZHIuaW8uYml0X3dpZHRoID0gcGVyZi0+Y29udHJvbF9yZWdpc3Rlci5iaXRfd2lkdGg7CiAJCWJyZWFrOwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWNtZC5tYXNrID0gbWFzazsKKwljbWQubWFzayA9ICptYXNrOwogCiAJZHJ2X3JlYWQoJmNtZCk7CiAKQEAgLTI3MSw3ICsyNzEsNyBAQAogCXVuc2lnbmVkIGludCByZXR2YWw7CiAKIAlzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwogCWlmIChnZXRfY3B1KCkgIT0gY3B1KSB7CiAJCS8qIFdlIHdlcmUgbm90IGFibGUgdG8gcnVuIG9uIHJlcXVlc3RlZCBwcm9jZXNzb3IgKi8KIAkJcHV0X2NwdSgpOwpAQCAtMzI5LDcgKzMyOSw3IEBACiAJcmV0dmFsID0gcGVyX2NwdShkcnZfZGF0YSwgY3B1KS0+bWF4X2ZyZXEgKiBwZXJmX3BlcmNlbnQgLyAxMDA7CiAKIAlwdXRfY3B1KCk7Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBzYXZlZF9tYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmc2F2ZWRfbWFzayk7CiAKIAlkcHJpbnRrKCJjcHUgJWQ6IHBlcmZvcm1hbmNlIHBlcmNlbnQgJWRcbiIsIGNwdSwgcGVyZl9wZXJjZW50KTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMzQ3LDEzICszNDcsMTMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZnJlcSA9IGV4dHJhY3RfZnJlcShnZXRfY3VyX3ZhbChjcHVtYXNrX29mX2NwdShjcHUpKSwgZGF0YSk7CisJZnJlcSA9IGV4dHJhY3RfZnJlcShnZXRfY3VyX3ZhbCgmY3B1bWFza19vZl9jcHUoY3B1KSksIGRhdGEpOwogCWRwcmludGsoImN1ciBmcmVxID0gJXVcbiIsIGZyZXEpOwogCiAJcmV0dXJuIGZyZXE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfZnJlcXMoY3B1bWFza190IG1hc2ssIHVuc2lnbmVkIGludCBmcmVxLAorc3RhdGljIHVuc2lnbmVkIGludCBjaGVja19mcmVxcyhjb25zdCBjcHVtYXNrX3QgKm1hc2ssIHVuc2lnbmVkIGludCBmcmVxLAogCQkJCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBpbnQgY3VyX2ZyZXE7CkBAIC00NDksNyArNDQ5LDcgQEAKIAlkcnZfd3JpdGUoJmNtZCk7CiAKIAlpZiAoYWNwaV9wc3RhdGVfc3RyaWN0KSB7Ci0JCWlmICghY2hlY2tfZnJlcXMoY21kLm1hc2ssIGZyZXFzLm5ldywgZGF0YSkpIHsKKwkJaWYgKCFjaGVja19mcmVxcygmY21kLm1hc2ssIGZyZXFzLm5ldywgZGF0YSkpIHsKIAkJCWRwcmludGsoImFjcGlfY3B1ZnJlcV90YXJnZXQgZmFpbGVkICglZClcbiIsCiAJCQkJcG9saWN5LT5jcHUpOwogCQkJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKaW5kZXggMzlmOGNiMS4uYzJmOTMwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwpAQCAtNTUsNyArNTUsNiBAQAogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCXUzMiBsbywgaGk7Ci0JdTggY3VycmVudF9tdWx0aXBsaWVyLCBjdXJyZW50X3ZvbHRhZ2U7CiAJaW50IGVyciA9IDA7CiAJaW50IGk7CiAKQEAgLTk1LDYgKzk0LDEwIEBACiAJcmRtc3IoTVNSX0lBMzJfUEVSRl9TVEFUVVMsIGxvLCBoaSk7CiAJZnJlcXMubmV3ID0gY2VudGF1ci0+ZnNiICogKChsbyA+PiA4KSAmIDB4ZmYpOwogCisjaWZkZWYgREVCVUcKKwl7CisJdTggY3VycmVudF9tdWx0aXBsaWVyLCBjdXJyZW50X3ZvbHRhZ2U7CisKIAkvKiBQcmludCB2b2x0YWdlIGFuZCBtdWx0aXBsaWVyICovCiAJcmRtc3IoTVNSX0lBMzJfUEVSRl9TVEFUVVMsIGxvLCBoaSk7CiAJY3VycmVudF92b2x0YWdlID0gbG8gJiAweGZmOwpAQCAtMTAzLDcgKzEwNiw4IEBACiAJY3VycmVudF9tdWx0aXBsaWVyID0gKGxvID4+IDgpICYgMHhmZjsKIAlwcmludGsoS0VSTl9JTkZPICJlcHM6IEN1cnJlbnQgbXVsdGlwbGllciA9ICVkXG4iLAogCQljdXJyZW50X211bHRpcGxpZXIpOwotCisJfQorI2VuZGlmCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKaW5kZXggMTQ3OTFlYy4uMTk5ZTRlMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKQEAgLTI4OSw4ICsyODksOCBAQAogCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCF0ZXN0X2JpdChYODZfRkVBVFVSRV9BQ1BJLCBjLT54ODZfY2FwYWJpbGl0eSkgfHwKLQkJIXRlc3RfYml0KFg4Nl9GRUFUVVJFX0FDQywgYy0+eDg2X2NhcGFiaWxpdHkpKQorCWlmICghdGVzdF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FDUEkpIHx8CisJCQkJIXRlc3RfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9BQ0MpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZwNGNsb2NrbW9kX2RyaXZlcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IGM5OWQ1OWQuLjQ2ZDQwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC00NzgsMTIgKzQ3OCwxMiBAQAogCiBzdGF0aWMgaW50IGNoZWNrX3N1cHBvcnRlZF9jcHUodW5zaWduZWQgaW50IGNwdSkKIHsKLQljcHVtYXNrX3Qgb2xkbWFzayA9IENQVV9NQVNLX0FMTDsKKwljcHVtYXNrX3Qgb2xkbWFzazsKIAl1MzIgZWF4LCBlYngsIGVjeCwgZWR4OwogCXVuc2lnbmVkIGludCByYyA9IDA7CiAKIAlvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwogCiAJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBjcHUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibGltaXRpbmcgdG8gY3B1ICV1IGZhaWxlZFxuIiwgY3B1KTsKQEAgLTUyOCw3ICs1MjgsNyBAQAogCXJjID0gMTsKIAogb3V0OgotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkbWFzayk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZG1hc2spOwogCXJldHVybiByYzsKIH0KIApAQCAtMTAxNSw3ICsxMDE1LDcgQEAKIC8qIERyaXZlciBlbnRyeSBwb2ludCB0byBzd2l0Y2ggdG8gdGhlIHRhcmdldCBmcmVxdWVuY3kgKi8KIHN0YXRpYyBpbnQgcG93ZXJub3drOF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wsIHVuc2lnbmVkIHRhcmdmcmVxLCB1bnNpZ25lZCByZWxhdGlvbikKIHsKLQljcHVtYXNrX3Qgb2xkbWFzayA9IENQVV9NQVNLX0FMTDsKKwljcHVtYXNrX3Qgb2xkbWFzazsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IHBlcl9jcHUocG93ZXJub3dfZGF0YSwgcG9sLT5jcHUpOwogCXUzMiBjaGVja2ZpZDsKIAl1MzIgY2hlY2t2aWQ7CkBAIC0xMDMwLDcgKzEwMzAsNyBAQAogCiAJLyogb25seSBydW4gb24gc3BlY2lmaWMgQ1BVIGZyb20gaGVyZSBvbiAqLwogCW9sZG1hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShwb2wtPmNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShwb2wtPmNwdSkpOwogCiAJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBwb2wtPmNwdSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJsaW1pdGluZyB0byBjcHUgJXUgZmFpbGVkXG4iLCBwb2wtPmNwdSk7CkBAIC0xMDg1LDcgKzEwODUsNyBAQAogCXJldCA9IDA7CiAKIGVycl9vdXQ6Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRtYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkbWFzayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTEwNCw3ICsxMTA0LDcgQEAKIHN0YXRpYyBpbnQgX19jcHVpbml0IHBvd2Vybm93azhfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wpCiB7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7Ci0JY3B1bWFza190IG9sZG1hc2sgPSBDUFVfTUFTS19BTEw7CisJY3B1bWFza190IG9sZG1hc2s7CiAJaW50IHJjOwogCiAJaWYgKCFjcHVfb25saW5lKHBvbC0+Y3B1KSkKQEAgLTExNDUsNyArMTE0NSw3IEBACiAKIAkvKiBvbmx5IHJ1biBvbiBzcGVjaWZpYyBDUFUgZnJvbSBoZXJlIG9uICovCiAJb2xkbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KHBvbC0+Y3B1KSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KHBvbC0+Y3B1KSk7CiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IHBvbC0+Y3B1KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImxpbWl0aW5nIHRvIGNwdSAldSBmYWlsZWRcbiIsIHBvbC0+Y3B1KTsKQEAgLTExNjQsNyArMTE2NCw3IEBACiAJCWZpZHZpZF9tc3JfaW5pdCgpOwogCiAJLyogcnVuIG9uIGFueSBDUFUgYWdhaW4gKi8KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZG1hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGRtYXNrKTsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCiAJCXBvbC0+Y3B1cyA9IGNwdW1hc2tfb2ZfY3B1KHBvbC0+Y3B1KTsKQEAgLTEyMDUsNyArMTIwNSw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRtYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkbWFzayk7CiAJcG93ZXJub3dfazhfY3B1X2V4aXRfYWNwaShkYXRhKTsKIAogCWtmcmVlKGRhdGEpOwpAQCAtMTI0MiwxMCArMTI0MiwxMSBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJsaW1pdGluZyB0byBDUFUgJWQgZmFpbGVkIGluIHBvd2Vybm93azhfZ2V0XG4iLCBjcHUpOwotCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZG1hc2spOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkibGltaXRpbmcgdG8gQ1BVICVkIGZhaWxlZCBpbiBwb3dlcm5vd2s4X2dldFxuIiwgY3B1KTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZG1hc2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEyNTMsMTMgKzEyNTQsMTQgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlraHogPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBkYXRhLT5jdXJycHN0YXRlKTsKKwkJa2h6ID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwKKwkJCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJa2h6ID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAogCiBvdXQ6Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRtYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkbWFzayk7CiAJcmV0dXJuIGtoejsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCmluZGV4IDMwMzFmMTEuLjkwOGRkMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKQEAgLTMxNSw3ICszMTUsNyBAQAogCWNwdW1hc2tfdCBzYXZlZF9tYXNrOwogCiAJc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSkKIAkJcmV0dXJuIDA7CiAKQEAgLTMzMyw3ICszMzMsNyBAQAogCQljbG9ja19mcmVxID0gZXh0cmFjdF9jbG9jayhsLCBjcHUsIDEpOwogCX0KIAotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgc2F2ZWRfbWFzayk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJnNhdmVkX21hc2spOwogCXJldHVybiBjbG9ja19mcmVxOwogfQogCkBAIC00ODcsNyArNDg3LDcgQEAKIAkJZWxzZQogCQkJY3B1X3NldChqLCBzZXRfbWFzayk7CiAKLQkJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBzZXRfbWFzayk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZzZXRfbWFzayk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAodW5saWtlbHkoIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIHNldF9tYXNrKSkpIHsKIAkJCWRwcmludGsoImNvdWxkbid0IGxpbWl0IHRvIENQVXMgaW4gdGhpcyBkb21haW5cbiIpOwpAQCAtNTU1LDcgKzU1NSw4IEBACiAKIAkJaWYgKCFjcHVzX2VtcHR5KGNvdmVyZWRfY3B1cykpIHsKIAkJCWZvcl9lYWNoX2NwdV9tYXNrKGosIGNvdmVyZWRfY3B1cykgewotCQkJCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoaikpOworCQkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsCisJCQkJCQkgICAgICZjcHVtYXNrX29mX2NwdShqKSk7CiAJCQkJd3Jtc3IoTVNSX0lBMzJfUEVSRl9DVEwsIG9sZG1zciwgaCk7CiAJCQl9CiAJCX0KQEAgLTU2OSwxMiArNTcwLDEyIEBACiAJCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAkJfQogCX0KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNhdmVkX21hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZzYXZlZF9tYXNrKTsKIAlyZXR1cm4gMDsKIAogbWlncmF0ZV9lbmQ6CiAJcHJlZW1wdF9lbmFibGUoKTsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNhdmVkX21hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZzYXZlZF9tYXNrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggMTRkNjhhYS4uMWI1MDI0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCkBAIC0yMjksMjIgKzIyOSwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9zcGVlZHN0ZXBfZ2V0KGNwdW1hc2tfdCBjcHVzKQorc3RhdGljIHVuc2lnbmVkIGludCBfc3BlZWRzdGVwX2dldChjb25zdCBjcHVtYXNrX3QgKmNwdXMpCiB7CiAJdW5zaWduZWQgaW50IHNwZWVkOwogCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CiAKIAljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVzKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVzKTsKIAlzcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdXNfYWxsb3dlZCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdXNfYWxsb3dlZCk7CiAJZHByaW50aygiZGV0ZWN0ZWQgJXUga0h6IGFzIGN1cnJlbnQgZnJlcXVlbmN5XG4iLCBzcGVlZCk7CiAJcmV0dXJuIHNwZWVkOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gX3NwZWVkc3RlcF9nZXQoY3B1bWFza19vZl9jcHUoY3B1KSk7CisJcmV0dXJuIF9zcGVlZHN0ZXBfZ2V0KCZjcHVtYXNrX29mX2NwdShjcHUpKTsKIH0KIAogLyoqCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZyZXFzLm9sZCA9IF9zcGVlZHN0ZXBfZ2V0KHBvbGljeS0+Y3B1cyk7CisJZnJlcXMub2xkID0gX3NwZWVkc3RlcF9nZXQoJnBvbGljeS0+Y3B1cyk7CiAJZnJlcXMubmV3ID0gc3BlZWRzdGVwX2ZyZXFzW25ld3N0YXRlXS5mcmVxdWVuY3k7CiAJZnJlcXMuY3B1ID0gcG9saWN5LT5jcHU7CiAKQEAgLTI4NSwxMiArMjg1LDEyIEBACiAJfQogCiAJLyogc3dpdGNoIHRvIHBoeXNpY2FsIENQVSB3aGVyZSBzdGF0ZSBpcyB0byBiZSBjaGFuZ2VkICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBwb2xpY3ktPmNwdXMpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZwb2xpY3ktPmNwdXMpOwogCiAJc3BlZWRzdGVwX3NldF9zdGF0ZShuZXdzdGF0ZSk7CiAKIAkvKiBhbGxvdyB0byBiZSBydW4gb24gYWxsIENQVXMgKi8KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdXNfYWxsb3dlZCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdXNfYWxsb3dlZCk7CiAKIAlmb3JfZWFjaF9jcHVfbWFzayhpLCBwb2xpY3ktPmNwdXMpIHsKIAkJZnJlcXMuY3B1ID0gaTsKQEAgLTMyNiw3ICszMjYsNyBAQAogI2VuZGlmCiAKIAljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBwb2xpY3ktPmNwdXMpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZwb2xpY3ktPmNwdXMpOwogCiAJLyogZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY3kgYW5kIHRyYW5zaXRpb24gbGF0ZW5jeSAqLwogCXJlc3VsdCA9IHNwZWVkc3RlcF9nZXRfZnJlcXMoc3BlZWRzdGVwX3Byb2Nlc3NvciwKQEAgLTMzNCwxMiArMzM0LDEyIEBACiAJCQkJICAgICAmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3ksCiAJCQkJICAgICAmcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSwKIAkJCQkgICAgICZzcGVlZHN0ZXBfc2V0X3N0YXRlKTsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdXNfYWxsb3dlZCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdXNfYWxsb3dlZCk7CiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCS8qIGdldCBjdXJyZW50IHNwZWVkIHNldHRpbmcgKi8KLQlzcGVlZCA9IF9zcGVlZHN0ZXBfZ2V0KHBvbGljeS0+Y3B1cyk7CisJc3BlZWQgPSBfc3BlZWRzdGVwX2dldCgmcG9saWN5LT5jcHVzKTsKIAlpZiAoIXNwZWVkKQogCQlyZXR1cm4gLUVJTzsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKaW5kZXggZjJiNWE2Mi4uOGE4NWM5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCkBAIC02Myw3ICs2Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAgKHZvaWQpCiB7Ci0JdTMyIGNvbW1hbmQsIHJlc3VsdCwgbWFnaWM7CisJdTMyIGNvbW1hbmQsIHJlc3VsdCwgbWFnaWMsIGR1bW15OwogCXUzMiBmdW5jdGlvbiA9IEdFVF9TUEVFRFNURVBfT1dORVI7CiAJdW5zaWduZWQgY2hhciBtYWdpY19kYXRhW10gPSAiQ29weXJpZ2h0IChjKSAxOTk5IEludGVsIENvcnBvcmF0aW9uIjsKIApAQCAtNzMsOCArNzMsMTEgQEAKIAlkcHJpbnRrKCJ0cnlpbmcgdG8gb2J0YWluIG93bmVyc2hpcCB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJwdXNoICUlZWJwXG4iCiAJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCi0JCTogIj1EIiAocmVzdWx0KQorCQkicG9wICUlZWJwXG4iCisJCTogIj1EIiAocmVzdWx0KSwgIj1hIiAoZHVtbXkpLCAiPWIiIChkdW1teSksICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLAorCQkJIj1TIiAoZHVtbXkpCiAJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLAogCQkJIkQiICgwKSwgIlMiIChtYWdpYykKIAkJOiAibWVtb3J5IgpAQCAtOTYsNyArOTksNyBAQAogICovCiBzdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfZ2V0X2ZyZXFzICh1bnNpZ25lZCBpbnQgKmxvdywgdW5zaWduZWQgaW50ICpoaWdoKQogewotCXUzMiBjb21tYW5kLCByZXN1bHQgPSAwLCBlZGksIGhpZ2hfbWh6LCBsb3dfbWh6OworCXUzMiBjb21tYW5kLCByZXN1bHQgPSAwLCBlZGksIGhpZ2hfbWh6LCBsb3dfbWh6LCBkdW1teTsKIAl1MzIgc3RhdGU9MDsKIAl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX0ZSRVFTOwogCkBAIC0xMDksMTAgKzExMiwxMiBAQAogCiAJZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmwgJDAsICUlZWRpXG4iCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJwdXNoICUlZWJwXG4iCiAJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCi0JCTogIj1hIiAocmVzdWx0KSwgIj1iIiAoaGlnaF9taHopLCAiPWMiIChsb3dfbWh6KSwgIj1kIiAoc3RhdGUpLCAiPUQiIChlZGkpCi0JCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoc3RhdGUpLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKQorCQkicG9wICUlZWJwIgorCQk6ICI9YSIgKHJlc3VsdCksICI9YiIgKGhpZ2hfbWh6KSwgIj1jIiAobG93X21oeiksICI9ZCIgKHN0YXRlKSwgIj1EIiAoZWRpKSwgIj1TIiAoZHVtbXkpCisJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoc3RhdGUpLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQogCSk7CiAKIAlkcHJpbnRrKCJyZXN1bHQgJXgsIGxvd19mcmVxICV1LCBoaWdoX2ZyZXEgJXVcbiIsIHJlc3VsdCwgbG93X21oeiwgaGlnaF9taHopOwpAQCAtMTM1LDE2ICsxNDAsMTggQEAKIHN0YXRpYyBpbnQgc3BlZWRzdGVwX2dldF9zdGF0ZSAodm9pZCkKIHsKIAl1MzIgZnVuY3Rpb249R0VUX1NQRUVEU1RFUF9TVEFURTsKLQl1MzIgcmVzdWx0LCBzdGF0ZSwgZWRpLCBjb21tYW5kOworCXUzMiByZXN1bHQsIHN0YXRlLCBlZGksIGNvbW1hbmQsIGR1bW15OwogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCiAJZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBjdXJyZW50IHNldHRpbmcgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZsICQwLCAlJWVkaVxuIgorCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgotCQk6ICI9YSIgKHJlc3VsdCksICI9YiIgKHN0YXRlKSwgIj1EIiAoZWRpKQotCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKQorCQkicG9wICUlZWJwXG4iCisJCTogIj1hIiAocmVzdWx0KSwgIj1iIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCisJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAogCWRwcmludGsoInN0YXRlIGlzICV4LCByZXN1bHQgaXMgJXhcbiIsIHN0YXRlLCByZXN1bHQpOwpAQCAtMTYwLDcgKzE2Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNwZWVkc3RlcF9zZXRfc3RhdGUgKHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMCwgY29tbWFuZCwgbmV3X3N0YXRlOworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwLCBjb21tYW5kLCBuZXdfc3RhdGUsIGR1bW15OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGZ1bmN0aW9uPVNFVF9TUEVFRFNURVBfU1RBVEU7CiAJdW5zaWduZWQgaW50IHJldHJ5ID0gMDsKQEAgLTE4MiwxMCArMTg5LDEyIEBACiAJCX0KIAkJcmV0cnkrKzsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkibW92bCAkMCwgJSVlZGlcbiIKKwkJCSJwdXNoICUlZWJwXG4iCiAJCQkib3V0ICUlYWwsICglJWR4KVxuIgotCQkJOiAiPWIiIChuZXdfc3RhdGUpLCAiPUQiIChyZXN1bHQpCi0JCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKHN0YXRlKSwgImQiIChzbWlfcG9ydCksICJTIiAoMCkKKwkJCSJwb3AgJSVlYnAiCisJCQk6ICI9YiIgKG5ld19zdGF0ZSksICI9RCIgKHJlc3VsdCksICI9YyIgKGR1bW15KSwgIj1hIiAoZHVtbXkpLAorCQkJCSI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCisJCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKHN0YXRlKSwgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkJCSk7CiAJfSB3aGlsZSAoKG5ld19zdGF0ZSAhPSBzdGF0ZSkgJiYgKHJldHJ5IDw9IFNNSV9UUklFUykpOwogCkBAIC0xOTUsNyArMjA0LDcgQEAKIAlpZiAobmV3X3N0YXRlID09IHN0YXRlKSB7CiAJCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkIGFmdGVyICV1IHRyaWVzIHdpdGggcmVzdWx0ICV1XG4iLCAoc3BlZWRzdGVwX2ZyZXFzW25ld19zdGF0ZV0uZnJlcXVlbmN5IC8gMTAwMCksIHJldHJ5LCByZXN1bHQpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIGZhaWxlZCB3aXRoIG5ld19zdGF0ZSAldSBhbmQgcmVzdWx0ICV1XG4iLCBuZXdfc3RhdGUsIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIHRvIHN0YXRlICV1IGZhaWxlZCB3aXRoIG5ld19zdGF0ZSAldSBhbmQgcmVzdWx0ICV1XG4iLCBzdGF0ZSwgbmV3X3N0YXRlLCByZXN1bHQpOwogCX0KIAogCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYwppbmRleCA3MTM5YjAyLi4zZmQ3YTY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCkBAIC0xOSw3ICsxOSw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBjY3IyLCBjY3IzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAkvKiB3ZSB0ZXN0IGZvciBERVZJRCBieSBjaGVja2luZyB3aGV0aGVyIENDUjMgaXMgd3JpdGFibGUgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKQEAgLTM3LDggKzM3LDcgQEAKIAkJCXNldEN4ODYoQ1g4Nl9DQ1IyLCBjY3IyKTsKIAkJCSpkaXIwID0gMHhmZTsKIAkJfQotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7ICAvKiByZXN0b3JlIENDUjMgKi8KIAogCQkvKiByZWFkIERJUjAgYW5kIERJUjEgQ1BVIHJlZ2lzdGVycyAqLwpAQCAtODYsNyArODUsNyBAQAogc3RhdGljIHZvaWQgX19jcHVpbml0IGNoZWNrX2N4Njg2X3Nsb3Aoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlpZiAoQ3g4Nl9kaXIwX21zYiA9PSAzKSB7CiAJCXVuc2lnbmVkIGNoYXIgY2NyMywgY2NyNTsKIApAQCAtMTMyLDcgKzEzMSw3IEBACiAJLyogc2V0ICdOb3QgV3JpdGUtdGhyb3VnaCcgKi8KIAl3cml0ZV9jcjAocmVhZF9jcjAoKSB8IFg4Nl9DUjBfTlcpOwogCS8qIENDUjIgYml0IDI6IGxvY2sgTlcgYml0IGFuZCBzZXQgV1QxICovCi0Jc2V0Q3g4NihDWDg2X0NDUjIsIGdldEN4ODYoQ1g4Nl9DQ1IyKSB8IDB4MTQgKTsKKwlzZXRDeDg2KENYODZfQ0NSMiwgZ2V0Q3g4NihDWDg2X0NDUjIpIHwgMHgxNCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzZXRfY3g4Nl9pbmModm9pZCkKQEAgLTE0OCw3ICsxNDcsNyBAQAogCXNldEN4ODYoQ1g4Nl9QQ1IxLCBnZXRDeDg2KENYODZfUENSMSkgfCAweDAyKTsKIAkvKiBQQ1IwIC0tIFBlcmZvcm1hbmNlIENvbnRyb2wgKi8KIAkvKiBJbmNyZW1lbnRvciBNYXJnaW4gMTAgKi8KLQlzZXRDeDg2KENYODZfUENSMCwgZ2V0Q3g4NihDWDg2X1BDUjApIHwgMHgwNCk7IAorCXNldEN4ODYoQ1g4Nl9QQ1IwLCBnZXRDeDg2KENYODZfUENSMCkgfCAweDA0KTsKIAlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7CS8qIGRpc2FibGUgTUFQRU4gKi8KIH0KIApAQCAtMTY3LDE2ICsxNjYsMTYgQEAKIAogCWNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7CiAJc2V0Q3g4NihDWDg2X0NDUjMsIChjY3IzICYgMHgwZikgfCAweDEwKTsJLyogZW5hYmxlIE1BUEVOICovCi0JCisKIAogCS8qIEZQVSBmYXN0LCBEVEUgY2FjaGUsIE1lbSBieXBhc3MgKi8KIAlzZXRDeDg2KENYODZfQ0NSNCwgZ2V0Q3g4NihDWDg2X0NDUjQpIHwgMHgzOCk7CiAJc2V0Q3g4NihDWDg2X0NDUjMsIGNjcjMpOwkJCS8qIGRpc2FibGUgTUFQRU4gKi8KLQkKKwogCXNldF9jeDg2X21lbXdiKCk7Ci0Jc2V0X2N4ODZfcmVvcmRlcigpOwkKKwlzZXRfY3g4Nl9yZW9yZGVyKCk7CiAJc2V0X2N4ODZfaW5jKCk7Ci0JCisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTE4NywxNCArMTg2LDE2IEBACiAJY2hhciAqYnVmID0gYy0+eDg2X21vZGVsX2lkOwogCWNvbnN0IGNoYXIgKnAgPSBOVUxMOwogCi0JLyogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKLQkgICAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkgKi8KLQljbGVhcl9iaXQoMCozMiszMSwgYy0+eDg2X2NhcGFiaWxpdHkpOworCS8qCisJICogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKKwkgKiAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkKKwkgKi8KKwljbGVhcl9jcHVfY2FwKGMsIDAqMzIrMzEpOwogCiAJLyogQ3lyaXggdXNlZCBiaXQgMjQgaW4gZXh0ZW5kZWQgKEFNRCkgQ1BVSUQgZm9yIEN5cml4IE1NWCBleHRlbnNpb25zICovCi0JaWYgKCB0ZXN0X2JpdCgxKjMyKzI0LCBjLT54ODZfY2FwYWJpbGl0eSkgKSB7Ci0JCWNsZWFyX2JpdCgxKjMyKzI0LCBjLT54ODZfY2FwYWJpbGl0eSk7Ci0JCXNldF9iaXQoWDg2X0ZFQVRVUkVfQ1hNTVgsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwlpZiAodGVzdF9jcHVfY2FwKGMsIDEqMzIrMjQpKSB7CisJCWNsZWFyX2NwdV9jYXAoYywgMSozMisyNCk7CisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NYTU1YKTsKIAl9CiAKIAlkb19jeXJpeF9kZXZpZCgmZGlyMCwgJmRpcjEpOwpAQCAtMjEzLDcgKzIxNCw3IEBACiAJICogdGhlIG1vZGVsLCBtdWx0aXBsaWVyIGFuZCBzdGVwcGluZy4gIEJsYWNrIG1hZ2ljIGluY2x1ZGVkLAogCSAqIHRvIG1ha2UgdGhlIHNpbGljb24gc3RlcC9yZXYgbnVtYmVycyBtYXRjaCB0aGUgcHJpbnRlZCBvbmVzLgogCSAqLwotCSAKKwogCXN3aXRjaCAoZGlyMF9tc24pIHsKIAkJdW5zaWduZWQgY2hhciB0bXA7CiAKQEAgLTI0MSw3ICsyNDIsNyBAQAogCQl9IGVsc2UgICAgICAgICAgICAgLyogNjg2ICovCiAJCQlwID0gQ3g4Nl9jYisxOwogCQkvKiBFbXVsYXRlIE1UUlJzIHVzaW5nIEN5cml4J3MgQVJScy4gKi8KLQkJc2V0X2JpdChYODZfRkVBVFVSRV9DWVJJWF9BUlIsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ1lSSVhfQVJSKTsKIAkJLyogNng4NidzIGNvbnRhaW4gdGhpcyBidWcgKi8KIAkJYy0+Y29tYV9idWcgPSAxOwogCQlicmVhazsKQEAgLTI1MCwxNyArMjUxLDE4IEBACiAjaWZkZWYgQ09ORklHX1BDSQogCXsKIAkJdTMyIHZlbmRvciwgZGV2aWNlOwotCQkvKiBJdCBpc24ndCByZWFsbHkgYSBQQ0kgcXVpcmsgZGlyZWN0bHksIGJ1dCB0aGUgY3VyZSBpcyB0aGUKLQkJICAgc2FtZS4gVGhlIE1lZGlhR1ggaGFzIGRlZXAgbWFnaWMgU01NIHN0dWZmIHRoYXQgaGFuZGxlcyB0aGUKLQkJICAgU0IgZW11bGF0aW9uLiBJdCB0aHJvd3MgYXdheSB0aGUgZmlmbyBvbiBkaXNhYmxlX2RtYSgpIHdoaWNoCi0JCSAgIGlzIHdyb25nIGFuZCBydWlucyB0aGUgYXVkaW8uIAotCi0JCSAgIEJ1ZzI6IFZTQTEgaGFzIGEgd3JhcCBidWcgc28gdGhhdCB1c2luZyBtYXhpbXVtIHNpemVkIERNQSAKLQkJICAgY2F1c2VzIGJhZCB0aGluZ3MuIEFjY29yZGluZyB0byBOYXRTZW1pIFZTQTIgaGFzIGFub3RoZXIKLQkJICAgYnVnIHRvIGRvIHdpdGggJ2hsdCcuIEkndmUgbm90IHNlZW4gYW55IGJvYXJkcyB1c2luZyBWU0EyCi0JCSAgIGFuZCBYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IGl0IGVpdGhlciBzbyB3aG8gY2FyZXMgOCkuCi0JCSAgIFZTQTEgd2Ugd29yayBhcm91bmQgaG93ZXZlci4KLQkJKi8KKwkJLyoKKwkJICogSXQgaXNuJ3QgcmVhbGx5IGEgUENJIHF1aXJrIGRpcmVjdGx5LCBidXQgdGhlIGN1cmUgaXMgdGhlCisJCSAqIHNhbWUuIFRoZSBNZWRpYUdYIGhhcyBkZWVwIG1hZ2ljIFNNTSBzdHVmZiB0aGF0IGhhbmRsZXMgdGhlCisJCSAqIFNCIGVtdWxhdGlvbi4gSXQgdGhyb3dzIGF3YXkgdGhlIGZpZm8gb24gZGlzYWJsZV9kbWEoKSB3aGljaAorCQkgKiBpcyB3cm9uZyBhbmQgcnVpbnMgdGhlIGF1ZGlvLgorCQkgKgorCQkgKiAgQnVnMjogVlNBMSBoYXMgYSB3cmFwIGJ1ZyBzbyB0aGF0IHVzaW5nIG1heGltdW0gc2l6ZWQgRE1BCisJCSAqICBjYXVzZXMgYmFkIHRoaW5ncy4gQWNjb3JkaW5nIHRvIE5hdFNlbWkgVlNBMiBoYXMgYW5vdGhlcgorCQkgKiAgYnVnIHRvIGRvIHdpdGggJ2hsdCcuIEkndmUgbm90IHNlZW4gYW55IGJvYXJkcyB1c2luZyBWU0EyCisJCSAqICBhbmQgWCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCBpdCBlaXRoZXIgc28gd2hvIGNhcmVzIDgpLgorCQkgKiAgVlNBMSB3ZSB3b3JrIGFyb3VuZCBob3dldmVyLgorCQkgKi8KIAogCQlwcmludGsoS0VSTl9JTkZPICJXb3JraW5nIGFyb3VuZCBDeXJpeCBNZWRpYUdYIHZpcnR1YWwgRE1BIGJ1Z3MuXG4iKTsKIAkJaXNhX2RtYV9icmlkZ2VfYnVnZ3kgPSAyOwpAQCAtMjczLDU1ICsyNzUsNTEgQEAKIAogCQkvKgogCQkgKiAgVGhlIDU1MTAvNTUyMCBjb21wYW5pb24gY2hpcHMgaGF2ZSBhIGZ1bmt5IFBJVC4KLQkJICovICAKKwkJICovCiAJCWlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DWVJJWCAmJgogCSAoZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCB8fCBkZXZpY2UgPT0gUENJX0RFVklDRV9JRF9DWVJJWF81NTIwKSkKIAkJCW1hcmtfdHNjX3Vuc3RhYmxlKCJjeXJpeCA1NTEwLzU1MjAgZGV0ZWN0ZWQiKTsKIAl9CiAjZW5kaWYKLQkJYy0+eDg2X2NhY2hlX3NpemU9MTY7CS8qIFllcCAxNksgaW50ZWdyYXRlZCBjYWNoZSB0aGF0cyBpdCAqLworCQljLT54ODZfY2FjaGVfc2l6ZSA9IDE2OwkvKiBZZXAgMTZLIGludGVncmF0ZWQgY2FjaGUgdGhhdHMgaXQgKi8KIAogCQkvKiBHWG0gc3VwcG9ydHMgZXh0ZW5kZWQgY3B1aWQgbGV2ZWxzICdhbGEnIEFNRCAqLwogCQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPT0gMikgewogCQkJLyogRW5hYmxlIGN4TU1YIGV4dGVuc2lvbnMgKEdYMSBEYXRhc2hlZXQgNTQpICovCiAJCQlzZXRDeDg2KENYODZfQ0NSNywgZ2V0Q3g4NihDWDg2X0NDUjcpIHwgMSk7Ci0JCQkKKwogCQkJLyoKIAkJCSAqIEdYbSA6IDB4MzAgLi4uIDB4NWYgR1htICBkYXRhc2hlZXQgNTEKIAkJCSAqIEdYbHY6IDB4NnggICAgICAgICAgR1hsdiBkYXRhc2hlZXQgNTQKIAkJCSAqICA/ICA6IDB4N3gKIAkJCSAqIEdYMSA6IDB4OHggICAgICAgICAgR1gxICBkYXRhc2hlZXQgNTYKIAkJCSAqLwotCQkJaWYoKDB4MzAgPD0gZGlyMSAmJiBkaXIxIDw9IDB4NmYpIHx8ICgweDgwIDw9ZGlyMSAmJiBkaXIxIDw9IDB4OGYpKQorCQkJaWYgKCgweDMwIDw9IGRpcjEgJiYgZGlyMSA8PSAweDZmKSB8fCAoMHg4MCA8PSBkaXIxICYmIGRpcjEgPD0gMHg4ZikpCiAJCQkJZ2VvZGVfY29uZmlndXJlKCk7CiAJCQlnZXRfbW9kZWxfbmFtZShjKTsgIC8qIGdldCBDUFUgbWFya2V0aW5nIG5hbWUgKi8KIAkJCXJldHVybjsKLQkJfQotCQllbHNlIHsgIC8qIE1lZGlhR1ggKi8KKwkJfSBlbHNlIHsgLyogTWVkaWFHWCAqLwogCQkJQ3g4Nl9jYlsyXSA9IChkaXIwX2xzbiAmIDEpID8gJzMnIDogJzQnOwogCQkJcCA9IEN4ODZfY2IrMjsKIAkJCWMtPng4Nl9tb2RlbCA9IChkaXIxICYgMHgyMCkgPyAxIDogMjsKIAkJfQogCQlicmVhazsKIAotICAgICAgICBjYXNlIDU6IC8qIDZ4ODZNWC9NIElJICovCi0JCWlmIChkaXIxID4gNykKLQkJeworCWNhc2UgNTogLyogNng4Nk1YL00gSUkgKi8KKwkJaWYgKGRpcjEgPiA3KSB7CiAJCQlkaXIwX21zbisrOyAgLyogTSBJSSAqLwogCQkJLyogRW5hYmxlIE1NWCBleHRlbnNpb25zIChBcHAgbm90ZSAxMDgpICovCiAJCQlzZXRDeDg2KENYODZfQ0NSNywgZ2V0Q3g4NihDWDg2X0NDUjcpfDEpOwotCQl9Ci0JCWVsc2UKLQkJeworCQl9IGVsc2UgewogCQkJYy0+Y29tYV9idWcgPSAxOyAgICAgIC8qIDZ4ODZNWCwgaXQgaGFzIHRoZSBidWcuICovCiAJCX0KIAkJdG1wID0gKCEoZGlyMF9sc24gJiA3KSB8fCBkaXIwX2xzbiAmIDEpID8gMiA6IDA7CiAJCUN4ODZfY2JbdG1wXSA9IGN5cml4X21vZGVsX211bHQyW2RpcjBfbHNuICYgN107CiAJCXAgPSBDeDg2X2NiK3RtcDsKLSAgICAgICAgCWlmICgoKGRpcjEgJiAweDBmKSA+IDQpIHx8ICgoZGlyMSAmIDB4ZjApID09IDB4MjApKQorCQlpZiAoKChkaXIxICYgMHgwZikgPiA0KSB8fCAoKGRpcjEgJiAweGYwKSA9PSAweDIwKSkKIAkJCShjLT54ODZfbW9kZWwpKys7CiAJCS8qIEVtdWxhdGUgTVRSUnMgdXNpbmcgQ3lyaXgncyBBUlJzLiAqLwotCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0NZUklYX0FSUiwgYy0+eDg2X2NhcGFiaWxpdHkpOworCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DWVJJWF9BUlIpOwogCQlicmVhazsKIAogCWNhc2UgMHhmOiAgLyogQ3lyaXggNDg2IHdpdGhvdXQgREVWSUQgcmVnaXN0ZXJzICovCkBAIC0zNDMsNyArMzQxLDggQEAKIAkJYnJlYWs7CiAJfQogCXN0cmNweShidWYsIEN4ODZfbW9kZWxbZGlyMF9tc24gJiA3XSk7Ci0JaWYgKHApIHN0cmNhdChidWYsIHApOworCWlmIChwKQorCQlzdHJjYXQoYnVmLCBwKTsKIAlyZXR1cm47CiB9CiAKQEAgLTM1Miw3ICszNTEsOCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9uc2Moc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCS8qIFRoZXJlIG1heSBiZSBHWDEgcHJvY2Vzc29ycyBpbiB0aGUgd2lsZCB0aGF0IGFyZSBicmFuZGVkCisJLyoKKwkgKiBUaGVyZSBtYXkgYmUgR1gxIHByb2Nlc3NvcnMgaW4gdGhlIHdpbGQgdGhhdCBhcmUgYnJhbmRlZAogCSAqIE5TQyBhbmQgbm90IEN5cml4LgogCSAqCiAJICogVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgdGhlIEdYIHByb2Nlc3NvciwgYW5kIGtpY2tzIGV2ZXJ5CkBAIC0zNzcsNyArMzc3LDcgQEAKICAqIGJ5IHRoZSBmYWN0IHRoYXQgdGhleSBwcmVzZXJ2ZSB0aGUgZmxhZ3MgYWNyb3NzIHRoZSBkaXZpc2lvbiBvZiA1LzIuCiAgKiBQSUkgYW5kIFBQcm8gZXhoaWJpdCB0aGlzIGJlaGF2aW9yIHRvbywgYnV0IHRoZXkgaGF2ZSBjcHVpZCBhdmFpbGFibGUuCiAgKi8KLSAKKwogLyoKICAqIFBlcmZvcm0gdGhlIEN5cml4IDUvMiB0ZXN0LiBBIEN5cml4IHdvbid0IGNoYW5nZQogICogdGhlIGZsYWdzLCB3aGlsZSBvdGhlciA0ODYgY2hpcHMgd2lsbC4KQEAgLTM5OCwyNyArMzk4LDI2IEBACiAJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSAodGVzdCA+PiA4KSA9PSAweDAyOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgY3lyaXhfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICogYykKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjeXJpeF9pZGVudGlmeShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJLyogRGV0ZWN0IEN5cml4IHdpdGggZGlzYWJsZWQgQ1BVSUQgKi8KLQlpZiAoIGMtPng4NiA9PSA0ICYmIHRlc3RfY3lyaXhfNTJkaXYoKSApIHsKKwlpZiAoYy0+eDg2ID09IDQgJiYgdGVzdF9jeXJpeF81MmRpdigpKSB7CiAJCXVuc2lnbmVkIGNoYXIgZGlyMCwgZGlyMTsKLQkJCisKIAkJc3RyY3B5KGMtPng4Nl92ZW5kb3JfaWQsICJDeXJpeEluc3RlYWQiKTsKLQkgICAgICAgIGMtPng4Nl92ZW5kb3IgPSBYODZfVkVORE9SX0NZUklYOwotCSAgICAgICAgCi0JICAgICAgICAvKiBBY3R1YWxseSBlbmFibGUgY3B1aWQgb24gdGhlIG9sZGVyIGN5cml4ICovCi0JICAgIAotCSAgICAJLyogUmV0cmlldmUgQ1BVIHJldmlzaW9ucyAqLwotCSAgICAJCisJCWMtPng4Nl92ZW5kb3IgPSBYODZfVkVORE9SX0NZUklYOworCisJCS8qIEFjdHVhbGx5IGVuYWJsZSBjcHVpZCBvbiB0aGUgb2xkZXIgY3lyaXggKi8KKworCQkvKiBSZXRyaWV2ZSBDUFUgcmV2aXNpb25zICovCisKIAkJZG9fY3lyaXhfZGV2aWQoJmRpcjAsICZkaXIxKTsKIAotCQlkaXIwPj49NDsJCQotCQkKKwkJZGlyMCA+Pj0gNDsKKwogCQkvKiBDaGVjayBpdCBpcyBhbiBhZmZlY3RlZCBtb2RlbCAqLwotCQkKLSAgIAkgICAgICAgIGlmIChkaXIwID09IDUgfHwgZGlyMCA9PSAzKQotICAgCSAgICAgICAgeworCisJCWlmIChkaXIwID09IDUgfHwgZGlyMCA9PSAzKSB7CiAJCQl1bnNpZ25lZCBjaGFyIGNjcjM7CiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgQ1BVSUQgb24gQ3lyaXggcHJvY2Vzc29yLlxuIik7CkBAIC00MzQsMjYgKzQzMywxNyBAQAogCiBzdGF0aWMgc3RydWN0IGNwdV9kZXYgY3lyaXhfY3B1X2RldiBfX2NwdWluaXRkYXRhID0gewogCS5jX3ZlbmRvcgk9ICJDeXJpeCIsCi0JLmNfaWRlbnQgCT0geyAiQ3lyaXhJbnN0ZWFkIiB9LAorCS5jX2lkZW50CT0geyAiQ3lyaXhJbnN0ZWFkIiB9LAogCS5jX2luaXQJCT0gaW5pdF9jeXJpeCwKIAkuY19pZGVudGlmeQk9IGN5cml4X2lkZW50aWZ5LAogfTsKIAotaW50IF9faW5pdCBjeXJpeF9pbml0X2NwdSh2b2lkKQotewotCWNwdV9kZXZzW1g4Nl9WRU5ET1JfQ1lSSVhdID0gJmN5cml4X2NwdV9kZXY7Ci0JcmV0dXJuIDA7Ci19CitjcHVfdmVuZG9yX2Rldl9yZWdpc3RlcihYODZfVkVORE9SX0NZUklYLCAmY3lyaXhfY3B1X2Rldik7CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBuc2NfY3B1X2RldiBfX2NwdWluaXRkYXRhID0gewogCS5jX3ZlbmRvcgk9ICJOU0MiLAotCS5jX2lkZW50IAk9IHsgIkdlb2RlIGJ5IE5TQyIgfSwKKwkuY19pZGVudAk9IHsgIkdlb2RlIGJ5IE5TQyIgfSwKIAkuY19pbml0CQk9IGluaXRfbnNjLAogfTsKIAotaW50IF9faW5pdCBuc2NfaW5pdF9jcHUodm9pZCkKLXsKLQljcHVfZGV2c1tYODZfVkVORE9SX05TQ10gPSAmbnNjX2NwdV9kZXY7Ci0JcmV0dXJuIDA7Ci19Ci0KK2NwdV92ZW5kb3JfZGV2X3JlZ2lzdGVyKFg4Nl9WRU5ET1JfTlNDLCAmbnNjX2NwdV9kZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9mZWF0dXJlX25hbWVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ZlYXR1cmVfbmFtZXMuYwppbmRleCBlZTk3NWFjLi5lNDNhZDRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ZlYXR1cmVfbmFtZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ZlYXR1cmVfbmFtZXMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIFRoaXMgZmlsZSBtdXN0IG5vdCBjb250YWluIGFueSBleGVjdXRhYmxlIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgImFzbS9jcHVmZWF0dXJlLmgiCisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAogLyoKICAqIFRoZXNlIGZsYWcgYml0cyBtdXN0IG1hdGNoIHRoZSBkZWZpbml0aW9ucyBpbiA8YXNtL2NwdWZlYXR1cmUuaD4uCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggZmFlMzFjZS4uZmU5MjI0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtMzAsNyArMzAsNyBAQAogc3RydWN0IG1vdnNsX21hc2sgbW92c2xfbWFzayBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKLXZvaWQgX19jcHVpbml0IGVhcmx5X2luaXRfaW50ZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGVhcmx5X2luaXRfaW50ZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCS8qIE5ldGJ1cnN0IHJlcG9ydHMgNjQgYnl0ZXMgY2xmbHVzaCBzaXplLCBidXQgZG9lcyBJTyBpbiAxMjggYnl0ZXMgKi8KIAlpZiAoYy0+eDg2ID09IDE1ICYmIGMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPT0gNjQpCkBAIC00NSw3ICs0NSw3IEBACiAgKgogICoJVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHdlIGRvIGNwdSBpZGVudCB3b3JrCiAgKi8KLSAKKwogaW50IF9fY3B1aW5pdCBwcHJvX3dpdGhfcmFtX2J1Zyh2b2lkKQogewogCS8qIFVzZXMgZGF0YSBmcm9tIGVhcmx5X2NwdV9kZXRlY3Qgbm93ICovCkBAIC01OCw3ICs1OCw3IEBACiAJfQogCXJldHVybiAwOwogfQotCQorCiAKIC8qCiAgKiBQNCBYZW9uIGVycmF0YSAwMzcgd29ya2Fyb3VuZC4KQEAgLTY5LDcgKzY5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvLCBoaTsKIAogCWlmICgoYy0+eDg2ID09IDE1KSAmJiAoYy0+eDg2X21vZGVsID09IDEpICYmIChjLT54ODZfbWFzayA9PSAxKSkgewotCQlyZG1zciAoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGxvLCBoaSk7CisJCXJkbXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsbywgaGkpOwogCQlpZiAoKGxvICYgKDE8PDkpKSA9PSAwKSB7CiAJCQlwcmludGsgKEtFUk5fSU5GTyAiQ1BVOiBDMCBzdGVwcGluZyBQNCBYZW9uIGRldGVjdGVkLlxuIik7CiAJCQlwcmludGsgKEtFUk5fSU5GTyAiQ1BVOiBEaXNhYmxpbmcgaGFyZHdhcmUgcHJlZmV0Y2hpbmcgKEVycmF0YSAwMzcpXG4iKTsKQEAgLTEyNywxMCArMTI3LDEwIEBACiAJICovCiAJYy0+ZjAwZl9idWcgPSAwOwogCWlmICghcGFyYXZpcnRfZW5hYmxlZCgpICYmIGMtPng4NiA9PSA1KSB7Ci0JCXN0YXRpYyBpbnQgZjAwZl93b3JrYXJvdW5kX2VuYWJsZWQgPSAwOworCQlzdGF0aWMgaW50IGYwMGZfd29ya2Fyb3VuZF9lbmFibGVkOwogCiAJCWMtPmYwMGZfYnVnID0gMTsKLQkJaWYgKCAhZjAwZl93b3JrYXJvdW5kX2VuYWJsZWQgKSB7CisJCWlmICghZjAwZl93b3JrYXJvdW5kX2VuYWJsZWQpIHsKIAkJCXRyYXBfaW5pdF9mMDBmX2J1ZygpOwogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJJbnRlbCBQZW50aXVtIHdpdGggRjAgMEYgYnVnIC0gd29ya2Fyb3VuZCBlbmFibGVkLlxuIik7CiAJCQlmMDBmX3dvcmthcm91bmRfZW5hYmxlZCA9IDE7CkBAIC0xMzksMjAgKzEzOSwyMiBAQAogI2VuZGlmCiAKIAlsMiA9IGluaXRfaW50ZWxfY2FjaGVpbmZvKGMpOwotCWlmIChjLT5jcHVpZF9sZXZlbCA+IDkgKSB7CisJaWYgKGMtPmNwdWlkX2xldmVsID4gOSkgewogCQl1bnNpZ25lZCBlYXggPSBjcHVpZF9lYXgoMTApOwogCQkvKiBDaGVjayBmb3IgdmVyc2lvbiBhbmQgdGhlIG51bWJlciBvZiBjb3VudGVycyAqLwogCQlpZiAoKGVheCAmIDB4ZmYpICYmICgoKGVheD4+OCkgJiAweGZmKSA+IDEpKQotCQkJc2V0X2JpdChYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04sIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTik7CiAJfQogCiAJLyogU0VQIENQVUlEIGJ1ZzogUGVudGl1bSBQcm8gcmVwb3J0cyBTRVAgYnV0IGRvZXNuJ3QgaGF2ZSBpdCB1bnRpbCBtb2RlbCAzIG1hc2sgMyAqLwogCWlmICgoYy0+eDg2PDw4IHwgYy0+eDg2X21vZGVsPDw0IHwgYy0+eDg2X21hc2spIDwgMHg2MzMpCi0JCWNsZWFyX2JpdChYODZfRkVBVFVSRV9TRVAsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9TRVApOwogCi0JLyogTmFtZXMgZm9yIHRoZSBQZW50aXVtIElJL0NlbGVyb24gcHJvY2Vzc29ycyAKLQkgICBkZXRlY3RhYmxlIG9ubHkgYnkgYWxzbyBjaGVja2luZyB0aGUgY2FjaGUgc2l6ZS4KLQkgICBEaXhvbiBpcyBOT1QgYSBDZWxlcm9uLiAqLworCS8qCisJICogTmFtZXMgZm9yIHRoZSBQZW50aXVtIElJL0NlbGVyb24gcHJvY2Vzc29ycworCSAqIGRldGVjdGFibGUgb25seSBieSBhbHNvIGNoZWNraW5nIHRoZSBjYWNoZSBzaXplLgorCSAqIERpeG9uIGlzIE5PVCBhIENlbGVyb24uCisJICovCiAJaWYgKGMtPng4NiA9PSA2KSB7CiAJCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJCWNhc2UgNToKQEAgLTE2MywxNCArMTY1LDE0IEBACiAJCQkJCXAgPSAiTW9iaWxlIFBlbnRpdW0gSUkgKERpeG9uKSI7CiAJCQl9CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgNjoKIAkJCWlmIChsMiA9PSAxMjgpCiAJCQkJcCA9ICJDZWxlcm9uIChNZW5kb2Npbm8pIjsKIAkJCWVsc2UgaWYgKGMtPng4Nl9tYXNrID09IDAgfHwgYy0+eDg2X21hc2sgPT0gNSkKIAkJCQlwID0gIkNlbGVyb24tQSI7CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgODoKIAkJCWlmIChsMiA9PSAxMjgpCiAJCQkJcCA9ICJDZWxlcm9uIChDb3BwZXJtaW5lKSI7CkBAIC0xNzgsOSArMTgwLDkgQEAKIAkJfQogCX0KIAotCWlmICggcCApCisJaWYgKHApCiAJCXN0cmNweShjLT54ODZfbW9kZWxfaWQsIHApOwotCQorCiAJYy0+eDg2X21heF9jb3JlcyA9IG51bV9jcHVfY29yZXMoYyk7CiAKIAlkZXRlY3RfaHQoYyk7CkBAIC0yMDcsMjggKzIwOSwyOSBAQAogI2VuZGlmCiAKIAlpZiAoY3B1X2hhc194bW0yKQotCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0xGRU5DRV9SRFRTQywgYy0+eDg2X2NhcGFiaWxpdHkpOworCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MpOwogCWlmIChjLT54ODYgPT0gMTUpIHsKLQkJc2V0X2JpdChYODZfRkVBVFVSRV9QNCwgYy0+eDg2X2NhcGFiaWxpdHkpOworCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QNCk7CiAJfQotCWlmIChjLT54ODYgPT0gNikgCi0JCXNldF9iaXQoWDg2X0ZFQVRVUkVfUDMsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwlpZiAoYy0+eDg2ID09IDYpCisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1AzKTsKIAlpZiAoY3B1X2hhc19kcykgewogCQl1bnNpZ25lZCBpbnQgbDE7CiAJCXJkbXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsMSwgbDIpOwogCQlpZiAoIShsMSAmICgxPDwxMSkpKQotCQkJc2V0X2JpdChYODZfRkVBVFVSRV9CVFMsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0JUUyk7CiAJCWlmICghKGwxICYgKDE8PDEyKSkpCi0JCQlzZXRfYml0KFg4Nl9GRUFUVVJFX1BFQlMsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1BFQlMpOwogCX0KIAogCWlmIChjcHVfaGFzX2J0cykKIAkJZHNfaW5pdF9pbnRlbChjKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWluaXQgaW50ZWxfc2l6ZV9jYWNoZShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVpbml0IGludGVsX3NpemVfY2FjaGUoc3RydWN0IGNwdWluZm9feDg2ICpjLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQkvKiBJbnRlbCBQSUlJIFR1YWxhdGluLiBUaGlzIGNvbWVzIGluIHR3byBmbGF2b3Vycy4KKwkvKgorCSAqIEludGVsIFBJSUkgVHVhbGF0aW4uIFRoaXMgY29tZXMgaW4gdHdvIGZsYXZvdXJzLgogCSAqIE9uZSBoYXMgMjU2a2Igb2YgY2FjaGUsIHRoZSBvdGhlciA1MTIuIFdlIGhhdmUgbm8gd2F5CiAJICogdG8gZGV0ZXJtaW5lIHdoaWNoLCBzbyB3ZSB1c2UgYSBib290dGltZSBvdmVycmlkZQogCSAqIGZvciB0aGUgNTEya2IgbW9kZWwsIGFuZCBhc3N1bWUgMjU2IG90aGVyd2lzZS4KQEAgLTI0MCw0MiArMjQzLDQyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBpbnRlbF9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CiAJLmNfdmVuZG9yCT0gIkludGVsIiwKLQkuY19pZGVudCAJPSB7ICJHZW51aW5lSW50ZWwiIH0sCisJLmNfaWRlbnQJPSB7ICJHZW51aW5lSW50ZWwiIH0sCiAJLmNfbW9kZWxzID0gewotCQl7IC52ZW5kb3IgPSBYODZfVkVORE9SX0lOVEVMLCAuZmFtaWx5ID0gNCwgLm1vZGVsX25hbWVzID0gCi0JCSAgeyAKLQkJCSAgWzBdID0gIjQ4NiBEWC0yNS8zMyIsIAotCQkJICBbMV0gPSAiNDg2IERYLTUwIiwgCi0JCQkgIFsyXSA9ICI0ODYgU1giLCAKLQkJCSAgWzNdID0gIjQ4NiBEWC8yIiwgCi0JCQkgIFs0XSA9ICI0ODYgU0wiLCAKLQkJCSAgWzVdID0gIjQ4NiBTWC8yIiwgCi0JCQkgIFs3XSA9ICI0ODYgRFgvMi1XQiIsIAotCQkJICBbOF0gPSAiNDg2IERYLzQiLCAKKwkJeyAudmVuZG9yID0gWDg2X1ZFTkRPUl9JTlRFTCwgLmZhbWlseSA9IDQsIC5tb2RlbF9uYW1lcyA9CisJCSAgeworCQkJICBbMF0gPSAiNDg2IERYLTI1LzMzIiwKKwkJCSAgWzFdID0gIjQ4NiBEWC01MCIsCisJCQkgIFsyXSA9ICI0ODYgU1giLAorCQkJICBbM10gPSAiNDg2IERYLzIiLAorCQkJICBbNF0gPSAiNDg2IFNMIiwKKwkJCSAgWzVdID0gIjQ4NiBTWC8yIiwKKwkJCSAgWzddID0gIjQ4NiBEWC8yLVdCIiwKKwkJCSAgWzhdID0gIjQ4NiBEWC80IiwKIAkJCSAgWzldID0gIjQ4NiBEWC80LVdCIgogCQkgIH0KIAkJfSwKIAkJeyAudmVuZG9yID0gWDg2X1ZFTkRPUl9JTlRFTCwgLmZhbWlseSA9IDUsIC5tb2RlbF9uYW1lcyA9Ci0JCSAgeyAKLQkJCSAgWzBdID0gIlBlbnRpdW0gNjAvNjYgQS1zdGVwIiwgCi0JCQkgIFsxXSA9ICJQZW50aXVtIDYwLzY2IiwgCisJCSAgeworCQkJICBbMF0gPSAiUGVudGl1bSA2MC82NiBBLXN0ZXAiLAorCQkJICBbMV0gPSAiUGVudGl1bSA2MC82NiIsCiAJCQkgIFsyXSA9ICJQZW50aXVtIDc1IC0gMjAwIiwKLQkJCSAgWzNdID0gIk92ZXJEcml2ZSBQT0RQNVY4MyIsIAorCQkJICBbM10gPSAiT3ZlckRyaXZlIFBPRFA1VjgzIiwKIAkJCSAgWzRdID0gIlBlbnRpdW0gTU1YIiwKLQkJCSAgWzddID0gIk1vYmlsZSBQZW50aXVtIDc1IC0gMjAwIiwgCisJCQkgIFs3XSA9ICJNb2JpbGUgUGVudGl1bSA3NSAtIDIwMCIsCiAJCQkgIFs4XSA9ICJNb2JpbGUgUGVudGl1bSBNTVgiCiAJCSAgfQogCQl9LAogCQl7IC52ZW5kb3IgPSBYODZfVkVORE9SX0lOVEVMLCAuZmFtaWx5ID0gNiwgLm1vZGVsX25hbWVzID0KLQkJICB7IAorCQkgIHsKIAkJCSAgWzBdID0gIlBlbnRpdW0gUHJvIEEtc3RlcCIsCi0JCQkgIFsxXSA9ICJQZW50aXVtIFBybyIsIAotCQkJICBbM10gPSAiUGVudGl1bSBJSSAoS2xhbWF0aCkiLCAKLQkJCSAgWzRdID0gIlBlbnRpdW0gSUkgKERlc2NodXRlcykiLCAKLQkJCSAgWzVdID0gIlBlbnRpdW0gSUkgKERlc2NodXRlcykiLCAKKwkJCSAgWzFdID0gIlBlbnRpdW0gUHJvIiwKKwkJCSAgWzNdID0gIlBlbnRpdW0gSUkgKEtsYW1hdGgpIiwKKwkJCSAgWzRdID0gIlBlbnRpdW0gSUkgKERlc2NodXRlcykiLAorCQkJICBbNV0gPSAiUGVudGl1bSBJSSAoRGVzY2h1dGVzKSIsCiAJCQkgIFs2XSA9ICJNb2JpbGUgUGVudGl1bSBJSSIsCi0JCQkgIFs3XSA9ICJQZW50aXVtIElJSSAoS2F0bWFpKSIsIAotCQkJICBbOF0gPSAiUGVudGl1bSBJSUkgKENvcHBlcm1pbmUpIiwgCisJCQkgIFs3XSA9ICJQZW50aXVtIElJSSAoS2F0bWFpKSIsCisJCQkgIFs4XSA9ICJQZW50aXVtIElJSSAoQ29wcGVybWluZSkiLAogCQkJICBbMTBdID0gIlBlbnRpdW0gSUlJIChDYXNjYWRlcykiLAogCQkJICBbMTFdID0gIlBlbnRpdW0gSUlJIChUdWFsYXRpbikiLAogCQkgIH0KQEAgLTI5MCwxNSArMjkzLDEyIEBACiAJCSAgfQogCQl9LAogCX0sCisJLmNfZWFybHlfaW5pdCAgID0gZWFybHlfaW5pdF9pbnRlbCwKIAkuY19pbml0CQk9IGluaXRfaW50ZWwsCiAJLmNfc2l6ZV9jYWNoZQk9IGludGVsX3NpemVfY2FjaGUsCiB9OwogCi1fX2luaXQgaW50IGludGVsX2NwdV9pbml0KHZvaWQpCi17Ci0JY3B1X2RldnNbWDg2X1ZFTkRPUl9JTlRFTF0gPSAmaW50ZWxfY3B1X2RldjsKLQlyZXR1cm4gMDsKLX0KK2NwdV92ZW5kb3JfZGV2X3JlZ2lzdGVyKFg4Nl9WRU5ET1JfSU5URUwsICZpbnRlbF9jcHVfZGV2KTsKIAogI2lmbmRlZiBDT05GSUdfWDg2X0NNUFhDSEcKIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTgodm9sYXRpbGUgdm9pZCAqcHRyLCB1OCBvbGQsIHU4IG5ldykKQEAgLTM2NCw1ICszNjQsNSBAQAogRVhQT1JUX1NZTUJPTChjbXB4Y2hnXzQ4Nl91NjQpOwogI2VuZGlmCiAKLS8vIGFyY2hfaW5pdGNhbGwoaW50ZWxfY3B1X2luaXQpOworLyogYXJjaF9pbml0Y2FsbChpbnRlbF9jcHVfaW5pdCk7ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDFiODg5ODYuLjI2ZDYxNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJdW5pb24gX2NwdWlkNF9sZWFmX2VieCBlYng7CiAJdW5pb24gX2NwdWlkNF9sZWFmX2VjeCBlY3g7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCWNwdW1hc2tfdCBzaGFyZWRfY3B1X21hcDsKKwljcHVtYXNrX3Qgc2hhcmVkX2NwdV9tYXA7CS8qIGZ1dHVyZT86IG9ubHkgY3B1cy9ub2RlIGlzIG5lZWRlZCAqLwogfTsKIAogdW5zaWduZWQgc2hvcnQJCQludW1fY2FjaGVfbGVhdmVzOwpAQCAtNDUxLDggKzQ1MSw4IEBACiB9CiAKIC8qIHBvaW50ZXIgdG8gX2NwdWlkNF9pbmZvIGFycmF5IChmb3IgZWFjaCBjYWNoZSBsZWFmKSAqLwotc3RhdGljIHN0cnVjdCBfY3B1aWQ0X2luZm8gKmNwdWlkNF9pbmZvW05SX0NQVVNdOwotI2RlZmluZSBDUFVJRDRfSU5GT19JRFgoeCx5KSAgICAoJigoY3B1aWQ0X2luZm9beF0pW3ldKSkKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgX2NwdWlkNF9pbmZvICosIGNwdWlkNF9pbmZvKTsKKyNkZWZpbmUgQ1BVSUQ0X0lORk9fSURYKHgsIHkpICAgICgmKChwZXJfY3B1KGNwdWlkNF9pbmZvLCB4KSlbeV0pKQogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgX19jcHVpbml0IGNhY2hlX3NoYXJlZF9jcHVfbWFwX3NldHVwKHVuc2lnbmVkIGludCBjcHUsIGludCBpbmRleCkKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCQkJaWYgKGNwdV9kYXRhKGkpLmFwaWNpZCA+PiBpbmRleF9tc2IgPT0KIAkJCSAgICBjLT5hcGljaWQgPj4gaW5kZXhfbXNiKSB7CiAJCQkJY3B1X3NldChpLCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKTsKLQkJCQlpZiAoaSAhPSBjcHUgJiYgY3B1aWQ0X2luZm9baV0pICB7CisJCQkJaWYgKGkgIT0gY3B1ICYmIHBlcl9jcHUoY3B1aWQ0X2luZm8sIGkpKSAgewogCQkJCQlzaWJsaW5nX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoaSwgaW5kZXgpOwogCQkJCQljcHVfc2V0KGNwdSwgc2libGluZ19sZWFmLT5zaGFyZWRfY3B1X21hcCk7CiAJCQkJfQpAQCAtNTA1LDggKzUwNSw4IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9jYWNoZV9sZWF2ZXM7IGkrKykKIAkJY2FjaGVfcmVtb3ZlX3NoYXJlZF9jcHVfbWFwKGNwdSwgaSk7CiAKLQlrZnJlZShjcHVpZDRfaW5mb1tjcHVdKTsKLQljcHVpZDRfaW5mb1tjcHVdID0gTlVMTDsKKwlrZnJlZShwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpKTsKKwlwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBfX2NwdWluaXQgZGV0ZWN0X2NhY2hlX2F0dHJpYnV0ZXModW5zaWduZWQgaW50IGNwdSkKQEAgLTUxOSwxMyArNTE5LDEzIEBACiAJaWYgKG51bV9jYWNoZV9sZWF2ZXMgPT0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQljcHVpZDRfaW5mb1tjcHVdID0ga3phbGxvYygKKwlwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpID0ga3phbGxvYygKIAkgICAgc2l6ZW9mKHN0cnVjdCBfY3B1aWQ0X2luZm8pICogbnVtX2NhY2hlX2xlYXZlcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNwdWlkNF9pbmZvW2NwdV0gPT0gTlVMTCkKKwlpZiAocGVyX2NwdShjcHVpZDRfaW5mbywgY3B1KSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW9sZG1hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0JcmV0dmFsID0gc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKwlyZXR2YWwgPSBzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTU0MiwxMiArNTQyLDEyIEBACiAJCX0KIAkJY2FjaGVfc2hhcmVkX2NwdV9tYXBfc2V0dXAoY3B1LCBqKTsKIAl9Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRtYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkbWFzayk7CiAKIG91dDoKIAlpZiAocmV0dmFsKSB7Ci0JCWtmcmVlKGNwdWlkNF9pbmZvW2NwdV0pOwotCQljcHVpZDRfaW5mb1tjcHVdID0gTlVMTDsKKwkJa2ZyZWUocGVyX2NwdShjcHVpZDRfaW5mbywgY3B1KSk7CisJCXBlcl9jcHUoY3B1aWQ0X2luZm8sIGNwdSkgPSBOVUxMOwogCX0KIAogCXJldHVybiByZXR2YWw7CkBAIC01NjEsNyArNTYxLDcgQEAKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGNwdV9zeXNkZXZfY2xhc3M7IC8qIGZyb20gZHJpdmVycy9iYXNlL2NwdS5jICovCiAKIC8qIHBvaW50ZXIgdG8ga29iamVjdCBmb3IgY3B1WC9jYWNoZSAqLwotc3RhdGljIHN0cnVjdCBrb2JqZWN0ICogY2FjaGVfa29iamVjdFtOUl9DUFVTXTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga29iamVjdCAqLCBjYWNoZV9rb2JqZWN0KTsKIAogc3RydWN0IF9pbmRleF9rb2JqZWN0IHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpAQCAtNTcwLDggKzU3MCw4IEBACiB9OwogCiAvKiBwb2ludGVyIHRvIGFycmF5IG9mIGtvYmplY3RzIGZvciBjcHVYL2NhY2hlL2luZGV4WSAqLwotc3RhdGljIHN0cnVjdCBfaW5kZXhfa29iamVjdCAqaW5kZXhfa29iamVjdFtOUl9DUFVTXTsKLSNkZWZpbmUgSU5ERVhfS09CSkVDVF9QVFIoeCx5KSAgICAoJigoaW5kZXhfa29iamVjdFt4XSlbeV0pKQorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBfaW5kZXhfa29iamVjdCAqLCBpbmRleF9rb2JqZWN0KTsKKyNkZWZpbmUgSU5ERVhfS09CSkVDVF9QVFIoeCwgeSkgICAgKCYoKHBlcl9jcHUoaW5kZXhfa29iamVjdCwgeCkpW3ldKSkKIAogI2RlZmluZSBzaG93X29uZV9wbHVzKGZpbGVfbmFtZSwgb2JqZWN0LCB2YWwpCQkJCVwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNmaWxlX25hbWUJCQkJCQlcCkBAIC01OTEsMTEgKzU5MSwzMiBAQAogCXJldHVybiBzcHJpbnRmIChidWYsICIlbHVLXG4iLCB0aGlzX2xlYWYtPnNpemUgLyAxMDI0KTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19zaGFyZWRfY3B1X21hcChzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2hhcmVkX2NwdV9tYXBfZnVuYyhzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCisJCQkJCWludCB0eXBlLCBjaGFyICpidWYpCiB7Ci0JY2hhciBtYXNrX3N0cltOUl9DUFVTXTsKLQljcHVtYXNrX3NjbnByaW50ZihtYXNrX3N0ciwgTlJfQ1BVUywgdGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1hc2tfc3RyKTsKKwlwdHJkaWZmX3QgbGVuID0gUFRSX0FMSUdOKGJ1ZiArIFBBR0VfU0laRSAtIDEsIFBBR0VfU0laRSkgLSBidWY7CisJaW50IG4gPSAwOworCisJaWYgKGxlbiA+IDEpIHsKKwkJY3B1bWFza190ICptYXNrID0gJnRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXA7CisKKwkJbiA9IHR5cGU/CisJCQljcHVsaXN0X3NjbnByaW50ZihidWYsIGxlbi0yLCAqbWFzayk6CisJCQljcHVtYXNrX3NjbnByaW50ZihidWYsIGxlbi0yLCAqbWFzayk7CisJCWJ1ZltuKytdID0gJ1xuJzsKKwkJYnVmW25dID0gJ1wwJzsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBzaG93X3NoYXJlZF9jcHVfbWFwKHN0cnVjdCBfY3B1aWQ0X2luZm8gKmxlYWYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2hvd19zaGFyZWRfY3B1X21hcF9mdW5jKGxlYWYsIDAsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBzaG93X3NoYXJlZF9jcHVfbGlzdChzdHJ1Y3QgX2NwdWlkNF9pbmZvICpsZWFmLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNob3dfc2hhcmVkX2NwdV9tYXBfZnVuYyhsZWFmLCAxLCBidWYpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3R5cGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYpIHsKQEAgLTYzMyw2ICs2NTQsNyBAQAogZGVmaW5lX29uZV9ybyhudW1iZXJfb2Zfc2V0cyk7CiBkZWZpbmVfb25lX3JvKHNpemUpOwogZGVmaW5lX29uZV9ybyhzaGFyZWRfY3B1X21hcCk7CitkZWZpbmVfb25lX3JvKHNoYXJlZF9jcHVfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZGVmYXVsdF9hdHRyc1tdID0gewogCSZ0eXBlLmF0dHIsCkBAIC02NDMsNiArNjY1LDcgQEAKIAkmbnVtYmVyX29mX3NldHMuYXR0ciwKIAkmc2l6ZS5hdHRyLAogCSZzaGFyZWRfY3B1X21hcC5hdHRyLAorCSZzaGFyZWRfY3B1X2xpc3QuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC02ODQsMTAgKzcwNywxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgY3B1aWQ0X2NhY2hlX3N5c2ZzX2V4aXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQlrZnJlZShjYWNoZV9rb2JqZWN0W2NwdV0pOwotCWtmcmVlKGluZGV4X2tvYmplY3RbY3B1XSk7Ci0JY2FjaGVfa29iamVjdFtjcHVdID0gTlVMTDsKLQlpbmRleF9rb2JqZWN0W2NwdV0gPSBOVUxMOworCWtmcmVlKHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSk7CisJa2ZyZWUocGVyX2NwdShpbmRleF9rb2JqZWN0LCBjcHUpKTsKKwlwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSkgPSBOVUxMOworCXBlcl9jcHUoaW5kZXhfa29iamVjdCwgY3B1KSA9IE5VTEw7CiAJZnJlZV9jYWNoZV9hdHRyaWJ1dGVzKGNwdSk7CiB9CiAKQEAgLTcwMywxMyArNzI2LDE0IEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBBbGxvY2F0ZSBhbGwgcmVxdWlyZWQgbWVtb3J5ICovCi0JY2FjaGVfa29iamVjdFtjcHVdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGtvYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoY2FjaGVfa29iamVjdFtjcHVdID09IE5VTEwpKQorCXBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSA9PSBOVUxMKSkKIAkJZ290byBlcnJfb3V0OwogCi0JaW5kZXhfa29iamVjdFtjcHVdID0ga3phbGxvYygKKwlwZXJfY3B1KGluZGV4X2tvYmplY3QsIGNwdSkgPSBremFsbG9jKAogCSAgICBzaXplb2Yoc3RydWN0IF9pbmRleF9rb2JqZWN0ICkgKiBudW1fY2FjaGVfbGVhdmVzLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoaW5kZXhfa29iamVjdFtjcHVdID09IE5VTEwpKQorCWlmICh1bmxpa2VseShwZXJfY3B1KGluZGV4X2tvYmplY3QsIGNwdSkgPT0gTlVMTCkpCiAJCWdvdG8gZXJyX291dDsKIAogCXJldHVybiAwOwpAQCAtNzMzLDcgKzc1Nyw4IEBACiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dmFsID0ga29iamVjdF9pbml0X2FuZF9hZGQoY2FjaGVfa29iamVjdFtjcHVdLCAma3R5cGVfcGVyY3B1X2VudHJ5LAorCXJldHZhbCA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSwKKwkJCQkgICAgICAma3R5cGVfcGVyY3B1X2VudHJ5LAogCQkJCSAgICAgICZzeXNfZGV2LT5rb2JqLCAiJXMiLCAiY2FjaGUiKTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQljcHVpZDRfY2FjaGVfc3lzZnNfZXhpdChjcHUpOwpAQCAtNzQ1LDEzICs3NzAsMTQgQEAKIAkJdGhpc19vYmplY3QtPmNwdSA9IGNwdTsKIAkJdGhpc19vYmplY3QtPmluZGV4ID0gaTsKIAkJcmV0dmFsID0ga29iamVjdF9pbml0X2FuZF9hZGQoJih0aGlzX29iamVjdC0+a29iaiksCi0JCQkJCSAgICAgICZrdHlwZV9jYWNoZSwgY2FjaGVfa29iamVjdFtjcHVdLAorCQkJCQkgICAgICAma3R5cGVfY2FjaGUsCisJCQkJCSAgICAgIHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSwKIAkJCQkJICAgICAgImluZGV4JTFsdSIsIGkpOwogCQlpZiAodW5saWtlbHkocmV0dmFsKSkgewogCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewogCQkJCWtvYmplY3RfcHV0KCYoSU5ERVhfS09CSkVDVF9QVFIoY3B1LGopLT5rb2JqKSk7CiAJCQl9Ci0JCQlrb2JqZWN0X3B1dChjYWNoZV9rb2JqZWN0W2NwdV0pOworCQkJa29iamVjdF9wdXQocGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpKTsKIAkJCWNwdWlkNF9jYWNoZV9zeXNmc19leGl0KGNwdSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNzYwLDcgKzc4Niw3IEBACiAJaWYgKCFyZXR2YWwpCiAJCWNwdV9zZXQoY3B1LCBjYWNoZV9kZXZfbWFwKTsKIAotCWtvYmplY3RfdWV2ZW50KGNhY2hlX2tvYmplY3RbY3B1XSwgS09CSl9BREQpOworCWtvYmplY3RfdWV2ZW50KHBlcl9jcHUoY2FjaGVfa29iamVjdCwgY3B1KSwgS09CSl9BREQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTc2OSw3ICs3OTUsNyBAQAogCXVuc2lnbmVkIGludCBjcHUgPSBzeXNfZGV2LT5pZDsKIAl1bnNpZ25lZCBsb25nIGk7CiAKLQlpZiAoY3B1aWQ0X2luZm9bY3B1XSA9PSBOVUxMKQorCWlmIChwZXJfY3B1KGNwdWlkNF9pbmZvLCBjcHUpID09IE5VTEwpCiAJCXJldHVybjsKIAlpZiAoIWNwdV9pc3NldChjcHUsIGNhY2hlX2Rldl9tYXApKQogCQlyZXR1cm47CkBAIC03NzcsNyArODAzLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY2FjaGVfbGVhdmVzOyBpKyspCiAJCWtvYmplY3RfcHV0KCYoSU5ERVhfS09CSkVDVF9QVFIoY3B1LGkpLT5rb2JqKSk7Ci0Ja29iamVjdF9wdXQoY2FjaGVfa29iamVjdFtjcHVdKTsKKwlrb2JqZWN0X3B1dChwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSkpOwogCWNwdWlkNF9jYWNoZV9zeXNmc19leGl0KGNwdSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKaW5kZXggYTUxODJkYy4uNzc0ZDg3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMKQEAgLTEwLDIwICsxMCwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAKLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+IAorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogCiAjaW5jbHVkZSAibWNlLmgiCiAKLWludCBtY2VfZGlzYWJsZWQgPSAwOworaW50IG1jZV9kaXNhYmxlZDsKIGludCBucl9tY2VfYmFua3M7CiAKIEVYUE9SVF9TWU1CT0xfR1BMKG5yX21jZV9iYW5rcyk7CS8qIG5vbi1mYXRhbC5vICovCiAKIC8qIEhhbmRsZSB1bmNvbmZpZ3VyZWQgaW50MTggKHNob3VsZCBuZXZlciBoYXBwZW4pICovCi1zdGF0aWMgdm9pZCB1bmV4cGVjdGVkX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpCi17CQorc3RhdGljIHZvaWQgdW5leHBlY3RlZF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCit7CiAJcHJpbnRrKEtFUk5fRVJSICJDUFUjJWQ6IFVuZXhwZWN0ZWQgaW50MTggKE1hY2hpbmUgQ2hlY2spLlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIApAQCAtMzMsMzAgKzMzLDMwIEBACiAvKiBUaGlzIGhhcyB0byBiZSBydW4gZm9yIGVhY2ggcHJvY2Vzc29yICovCiB2b2lkIG1jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQlpZiAobWNlX2Rpc2FibGVkPT0xKQorCWlmIChtY2VfZGlzYWJsZWQgPT0gMSkKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChjLT54ODZfdmVuZG9yKSB7Ci0JCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCQlhbWRfbWNoZWNrX2luaXQoYyk7Ci0JCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlhbWRfbWNoZWNrX2luaXQoYyk7CisJCWJyZWFrOwogCi0JCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJCWlmIChjLT54ODY9PTUpCi0JCQkJaW50ZWxfcDVfbWNoZWNrX2luaXQoYyk7Ci0JCQlpZiAoYy0+eDg2PT02KQotCQkJCWludGVsX3A2X21jaGVja19pbml0KGMpOwotCQkJaWYgKGMtPng4Nj09MTUpCi0JCQkJaW50ZWxfcDRfbWNoZWNrX2luaXQoYyk7Ci0JCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWlmIChjLT54ODYgPT0gNSkKKwkJCWludGVsX3A1X21jaGVja19pbml0KGMpOworCQlpZiAoYy0+eDg2ID09IDYpCisJCQlpbnRlbF9wNl9tY2hlY2tfaW5pdChjKTsKKwkJaWYgKGMtPng4NiA9PSAxNSkKKwkJCWludGVsX3A0X21jaGVja19pbml0KGMpOworCQlicmVhazsKIAotCQljYXNlIFg4Nl9WRU5ET1JfQ0VOVEFVUjoKLQkJCWlmIChjLT54ODY9PTUpCi0JCQkJd2luY2hpcF9tY2hlY2tfaW5pdChjKTsKLQkJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9DRU5UQVVSOgorCQlpZiAoYy0+eDg2ID09IDUpCisJCQl3aW5jaGlwX21jaGVja19pbml0KGMpOworCQlicmVhazsKIAotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKaW5kZXggMzI2NzFkYS4uN2M5YTgxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwpAQCAtMjUxLDE4ICsyNTEsMTggQEAKIAlzc2l6ZV90KCpzdG9yZSkgKHN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOwogfTsKIAotc3RhdGljIGNwdW1hc2tfdCBhZmZpbml0eV9zZXQodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyB2b2lkIGFmZmluaXR5X3NldCh1bnNpZ25lZCBpbnQgY3B1LCBjcHVtYXNrX3QgKm9sZG1hc2ssCisJCQkJCSAgIGNwdW1hc2tfdCAqbmV3bWFzaykKIHsKLQljcHVtYXNrX3Qgb2xkbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQljcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7Ci0JY3B1X3NldChjcHUsIG5ld21hc2spOwotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgbmV3bWFzayk7Ci0JcmV0dXJuIG9sZG1hc2s7CisJKm9sZG1hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CisJY3B1c19jbGVhcigqbmV3bWFzayk7CisJY3B1X3NldChjcHUsICpuZXdtYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBuZXdtYXNrKTsKIH0KIAotc3RhdGljIHZvaWQgYWZmaW5pdHlfcmVzdG9yZShjcHVtYXNrX3Qgb2xkbWFzaykKK3N0YXRpYyB2b2lkIGFmZmluaXR5X3Jlc3RvcmUoY29uc3QgY3B1bWFza190ICpvbGRtYXNrKQogewotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkbWFzayk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgb2xkbWFzayk7CiB9CiAKICNkZWZpbmUgU0hPV19GSUVMRFMobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjc3LDE1ICsyNzcsMTUgQEAKIAkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAljaGFyICplbmQ7Ci0JY3B1bWFza190IG9sZG1hc2s7CisJY3B1bWFza190IG9sZG1hc2ssIG5ld21hc2s7CiAJdW5zaWduZWQgbG9uZyBuZXcgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmQsIDApOwogCWlmIChlbmQgPT0gYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAliLT5pbnRlcnJ1cHRfZW5hYmxlID0gISFuZXc7CiAKLQlvbGRtYXNrID0gYWZmaW5pdHlfc2V0KGItPmNwdSk7CisJYWZmaW5pdHlfc2V0KGItPmNwdSwgJm9sZG1hc2ssICZuZXdtYXNrKTsKIAl0aHJlc2hvbGRfcmVzdGFydF9iYW5rKGIsIDAsIDApOwotCWFmZmluaXR5X3Jlc3RvcmUob2xkbWFzayk7CisJYWZmaW5pdHlfcmVzdG9yZSgmb2xkbWFzayk7CiAKIAlyZXR1cm4gZW5kIC0gYnVmOwogfQpAQCAtMjk0LDcgKzI5NCw3IEBACiAJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAljaGFyICplbmQ7Ci0JY3B1bWFza190IG9sZG1hc2s7CisJY3B1bWFza190IG9sZG1hc2ssIG5ld21hc2s7CiAJdTE2IG9sZDsKIAl1bnNpZ25lZCBsb25nIG5ldyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZCwgMCk7CiAJaWYgKGVuZCA9PSBidWYpCkBAIC0zMDYsOSArMzA2LDkgQEAKIAlvbGQgPSBiLT50aHJlc2hvbGRfbGltaXQ7CiAJYi0+dGhyZXNob2xkX2xpbWl0ID0gbmV3OwogCi0Jb2xkbWFzayA9IGFmZmluaXR5X3NldChiLT5jcHUpOworCWFmZmluaXR5X3NldChiLT5jcHUsICZvbGRtYXNrLCAmbmV3bWFzayk7CiAJdGhyZXNob2xkX3Jlc3RhcnRfYmFuayhiLCAwLCBvbGQpOwotCWFmZmluaXR5X3Jlc3RvcmUob2xkbWFzayk7CisJYWZmaW5pdHlfcmVzdG9yZSgmb2xkbWFzayk7CiAKIAlyZXR1cm4gZW5kIC0gYnVmOwogfQpAQCAtMzE2LDEwICszMTYsMTAgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZXJyb3JfY291bnQoc3RydWN0IHRocmVzaG9sZF9ibG9jayAqYiwgY2hhciAqYnVmKQogewogCXUzMiBoaWdoLCBsb3c7Ci0JY3B1bWFza190IG9sZG1hc2s7Ci0Jb2xkbWFzayA9IGFmZmluaXR5X3NldChiLT5jcHUpOworCWNwdW1hc2tfdCBvbGRtYXNrLCBuZXdtYXNrOworCWFmZmluaXR5X3NldChiLT5jcHUsICZvbGRtYXNrLCAmbmV3bWFzayk7CiAJcmRtc3IoYi0+YWRkcmVzcywgbG93LCBoaWdoKTsKLQlhZmZpbml0eV9yZXN0b3JlKG9sZG1hc2spOworCWFmZmluaXR5X3Jlc3RvcmUoJm9sZG1hc2spOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLAogCQkgICAgICAgKGhpZ2ggJiAweEZGRikgLSAoVEhSRVNIT0xEX01BWCAtIGItPnRocmVzaG9sZF9saW1pdCkpOwogfQpAQCAtMzI3LDEwICszMjcsMTAgQEAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2Vycm9yX2NvdW50KHN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWNwdW1hc2tfdCBvbGRtYXNrOwotCW9sZG1hc2sgPSBhZmZpbml0eV9zZXQoYi0+Y3B1KTsKKwljcHVtYXNrX3Qgb2xkbWFzaywgbmV3bWFzazsKKwlhZmZpbml0eV9zZXQoYi0+Y3B1LCAmb2xkbWFzaywgJm5ld21hc2spOwogCXRocmVzaG9sZF9yZXN0YXJ0X2JhbmsoYiwgMSwgMCk7Ci0JYWZmaW5pdHlfcmVzdG9yZShvbGRtYXNrKTsKKwlhZmZpbml0eV9yZXN0b3JlKCZvbGRtYXNrKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDY4LDcgKzQ2OCw3IEBACiB7CiAJaW50IGksIGVyciA9IDA7CiAJc3RydWN0IHRocmVzaG9sZF9iYW5rICpiID0gTlVMTDsKLQljcHVtYXNrX3Qgb2xkbWFzayA9IENQVV9NQVNLX05PTkU7CisJY3B1bWFza190IG9sZG1hc2ssIG5ld21hc2s7CiAJY2hhciBuYW1lWzMyXTsKIAogCXNwcmludGYobmFtZSwgInRocmVzaG9sZF9iYW5rJWkiLCBiYW5rKTsKQEAgLTUxOSwxMCArNTE5LDEwIEBACiAKIAlwZXJfY3B1KHRocmVzaG9sZF9iYW5rcywgY3B1KVtiYW5rXSA9IGI7CiAKLQlvbGRtYXNrID0gYWZmaW5pdHlfc2V0KGNwdSk7CisJYWZmaW5pdHlfc2V0KGNwdSwgJm9sZG1hc2ssICZuZXdtYXNrKTsKIAllcnIgPSBhbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKGNwdSwgYmFuaywgMCwKIAkJCQkJTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNCk7Ci0JYWZmaW5pdHlfcmVzdG9yZShvbGRtYXNrKTsKKwlhZmZpbml0eV9yZXN0b3JlKCZvbGRtYXNrKTsKIAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCmluZGV4IGJmMzk0MDkuLjAwY2NiNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+IAorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogCkBAIC0yNiwyMyArMjYsMjYgQEAKIAogI2RlZmluZSBNQ0VfUkFURQkxNSpIWgkvKiB0aW1lciByYXRlIGlzIDE1cyAqLwogCi1zdGF0aWMgdm9pZCBtY2VfY2hlY2tyZWdzICh2b2lkICppbmZvKQorc3RhdGljIHZvaWQgbWNlX2NoZWNrcmVncyh2b2lkICppbmZvKQogewogCXUzMiBsb3csIGhpZ2g7CiAJaW50IGk7CiAKLQlmb3IgKGk9Zmlyc3RiYW5rOyBpPG5yX21jZV9iYW5rczsgaSsrKSB7Ci0JCXJkbXNyIChNU1JfSUEzMl9NQzBfU1RBVFVTK2kqNCwgbG93LCBoaWdoKTsKKwlmb3IgKGkgPSBmaXJzdGJhbms7IGkgPCBucl9tY2VfYmFua3M7IGkrKykgeworCQlyZG1zcihNU1JfSUEzMl9NQzBfU1RBVFVTK2kqNCwgbG93LCBoaWdoKTsKIAogCQlpZiAoaGlnaCAmICgxPDwzMSkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIk1DRTogVGhlIGhhcmR3YXJlIHJlcG9ydHMgYSBub24gIgogCQkJCSJmYXRhbCwgY29ycmVjdGFibGUgaW5jaWRlbnQgb2NjdXJyZWQgb24gIgogCQkJCSJDUFUgJWQuXG4iLAogCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAiQmFuayAlZDogJTA4eCUwOHhcbiIsIGksIGhpZ2gsIGxvdyk7CisJCQlwcmludGsoS0VSTl9JTkZPICJCYW5rICVkOiAlMDh4JTA4eFxuIiwgaSwgaGlnaCwgbG93KTsKIAotCQkJLyogU2NydWIgdGhlIGVycm9yIHNvIHdlIGRvbid0IHBpY2sgaXQgdXAgaW4gTUNFX1JBVEUgc2Vjb25kcyB0aW1lLiAqLwotCQkJd3Jtc3IgKE1TUl9JQTMyX01DMF9TVEFUVVMraSo0LCAwVUwsIDBVTCk7CisJCQkvKgorCQkJICogU2NydWIgdGhlIGVycm9yIHNvIHdlIGRvbid0IHBpY2sgaXQgdXAgaW4gTUNFX1JBVEUKKwkJCSAqIHNlY29uZHMgdGltZS4KKwkJCSAqLworCQkJd3Jtc3IoTVNSX0lBMzJfTUMwX1NUQVRVUytpKjQsIDBVTCwgMFVMKTsKIAogCQkJLyogU2VyaWFsaXplICovCiAJCQl3bWIoKTsKQEAgLTU1LDEwICs1OCwxMCBAQAogc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKG1jZV93b3JrLCBtY2Vfd29ya19mbik7CiAKIHN0YXRpYyB2b2lkIG1jZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsgCit7CiAJb25fZWFjaF9jcHUobWNlX2NoZWNrcmVncywgTlVMTCwgMSwgMSk7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtY2Vfd29yaywgcm91bmRfamlmZmllc19yZWxhdGl2ZShNQ0VfUkFURSkpOwotfSAKK30KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9ub25mYXRhbF9tY2VfY2hlY2tlcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A1LmMKaW5kZXggYTE4MzEwYS4uYmZhNTgxNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9wNS5jCkBAIC05LDIwICs5LDIwIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+IAorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogCiAjaW5jbHVkZSAibWNlLmgiCiAKIC8qIE1hY2hpbmUgY2hlY2sgaGFuZGxlciBmb3IgUGVudGl1bSBjbGFzcyBJbnRlbCAqLwotc3RhdGljIHZvaWQgcGVudGl1bV9tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnJvcl9jb2RlKQorc3RhdGljIHZvaWQgcGVudGl1bV9tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CiAJdTMyIGxvYWRkciwgaGksIGxvdHlwZTsKIAlyZG1zcihNU1JfSUEzMl9QNV9NQ19BRERSLCBsb2FkZHIsIGhpKTsKIAlyZG1zcihNU1JfSUEzMl9QNV9NQ19UWVBFLCBsb3R5cGUsIGhpKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiQ1BVIyVkOiBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbjogIDB4JThYICh0eXBlIDB4JThYKS5cbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgbG9hZGRyLCBsb3R5cGUpOwotCWlmKGxvdHlwZSYoMTw8NSkpCisJaWYgKGxvdHlwZSYoMTw8NSkpCiAJCXByaW50ayhLRVJOX0VNRVJHICJDUFUjJWQ6IFBvc3NpYmxlIHRoZXJtYWwgZmFpbHVyZSAoQ1BVIG9uIGZpcmUgPykuXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKIH0KQEAgLTMxLDEzICszMSwxMyBAQAogdm9pZCBpbnRlbF9wNV9tY2hlY2tfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdTMyIGwsIGg7Ci0JCisKIAkvKkNoZWNrIGZvciBNQ0Ugc3VwcG9ydCAqLwotCWlmKCAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9NQ0UpICkKLQkJcmV0dXJuOwkKKwlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTUNFKSkKKwkJcmV0dXJuOwogCiAJLyogRGVmYXVsdCBQNSB0byBvZmYgYXMgaXRzIG9mdGVuIG1pc2Nvbm5lY3RlZCAqLwotCWlmKG1jZV9kaXNhYmxlZCAhPSAtMSkKKwlpZiAobWNlX2Rpc2FibGVkICE9IC0xKQogCQlyZXR1cm47CiAJbWFjaGluZV9jaGVja192ZWN0b3IgPSBwZW50aXVtX21hY2hpbmVfY2hlY2s7CiAJd21iKCk7CkBAIC00Nyw3ICs0Nyw3IEBACiAJcmRtc3IoTVNSX0lBMzJfUDVfTUNfVFlQRSwgbCwgaCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSW50ZWwgb2xkIHN0eWxlIG1hY2hpbmUgY2hlY2sgYXJjaGl0ZWN0dXJlIHN1cHBvcnRlZC5cbiIpOwogCi0gCS8qIEVuYWJsZSBNQ0UgKi8KKwkvKiBFbmFibGUgTUNFICovCiAJc2V0X2luX2NyNChYODZfQ1I0X01DRSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSW50ZWwgb2xkIHN0eWxlIG1hY2hpbmUgY2hlY2sgcmVwb3J0aW5nIGVuYWJsZWQgb24gQ1BVIyVkLlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9wNi5jCmluZGV4IDc0MzQyNjAuLjYyZWZjOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDYuYwpAQCAtOSwyMyArOSwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPiAKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogI2luY2x1ZGUgIm1jZS5oIgogCiAvKiBNYWNoaW5lIENoZWNrIEhhbmRsZXIgRm9yIFBJSS9QSUlJICovCi1zdGF0aWMgdm9pZCBpbnRlbF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnJvcl9jb2RlKQorc3RhdGljIHZvaWQgaW50ZWxfbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewotCWludCByZWNvdmVyPTE7CisJaW50IHJlY292ZXIgPSAxOwogCXUzMiBhbG93LCBhaGlnaCwgaGlnaCwgbG93OwogCXUzMiBtY2dzdGwsIG1jZ3N0aDsKIAlpbnQgaTsKIAotCXJkbXNyIChNU1JfSUEzMl9NQ0dfU1RBVFVTLCBtY2dzdGwsIG1jZ3N0aCk7CisJcmRtc3IoTVNSX0lBMzJfTUNHX1NUQVRVUywgbWNnc3RsLCBtY2dzdGgpOwogCWlmIChtY2dzdGwgJiAoMTw8MCkpCS8qIFJlY292ZXJhYmxlID8gKi8KLQkJcmVjb3Zlcj0wOworCQlyZWNvdmVyID0gMDsKIAogCXByaW50ayhLRVJOX0VNRVJHICJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAlMDh4JTA4eFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBtY2dzdGgsIG1jZ3N0bCk7CkBAIC01NSwzMCArNTUsMzAgQEAKIAl9CiAKIAlpZiAocmVjb3ZlciAmIDIpCi0JCXBhbmljICgiQ1BVIGNvbnRleHQgY29ycnVwdCIpOworCQlwYW5pYygiQ1BVIGNvbnRleHQgY29ycnVwdCIpOwogCWlmIChyZWNvdmVyICYgMSkKLQkJcGFuaWMgKCJVbmFibGUgdG8gY29udGludWUiKTsKKwkJcGFuaWMoIlVuYWJsZSB0byBjb250aW51ZSIpOwogCi0JcHJpbnRrIChLRVJOX0VNRVJHICJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7Ci0JLyogCi0JICogRG8gbm90IGNsZWFyIHRoZSBNU1JfSUEzMl9NQ2lfU1RBVFVTIGlmIHRoZSBlcnJvciBpcyBub3QgCisJcHJpbnRrKEtFUk5fRU1FUkcgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKKwkvKgorCSAqIERvIG5vdCBjbGVhciB0aGUgTVNSX0lBMzJfTUNpX1NUQVRVUyBpZiB0aGUgZXJyb3IgaXMgbm90CiAJICogcmVjb3ZlcmFibGUvY29udGludWFibGUuVGhpcyB3aWxsIGFsbG93IEJJT1MgdG8gbG9vayBhdCB0aGUgTVNScwogCSAqIGZvciBlcnJvcnMgaWYgdGhlIE9TIGNvdWxkIG5vdCBsb2cgdGhlIGVycm9yLgogCSAqLwotCWZvciAoaT0wOyBpPG5yX21jZV9iYW5rczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX21jZV9iYW5rczsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBtc3I7CiAJCW1zciA9IE1TUl9JQTMyX01DMF9TVEFUVVMraSo0OwotCQlyZG1zciAobXNyLGxvdywgaGlnaCk7CisJCXJkbXNyKG1zciwgbG93LCBoaWdoKTsKIAkJaWYgKGhpZ2ggJiAoMTw8MzEpKSB7CiAJCQkvKiBDbGVhciBpdCAqLwotCQkJd3Jtc3IgKG1zciwgMFVMLCAwVUwpOworCQkJd3Jtc3IobXNyLCAwVUwsIDBVTCk7CiAJCQkvKiBTZXJpYWxpemUgKi8KIAkJCXdtYigpOwogCQkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCQl9CiAJfQogCW1jZ3N0bCAmPSB+KDE8PDIpOwotCXdybXNyIChNU1JfSUEzMl9NQ0dfU1RBVFVTLG1jZ3N0bCwgbWNnc3RoKTsKKwl3cm1zcihNU1JfSUEzMl9NQ0dfU1RBVFVTLCBtY2dzdGwsIG1jZ3N0aCk7CiB9CiAKIC8qIFNldCB1cCBtYWNoaW5lIGNoZWNrIHJlcG9ydGluZyBmb3IgcHJvY2Vzc29ycyB3aXRoIEludGVsIHN0eWxlIE1DRSAqLwpAQCAtODYsMjEgKzg2LDIxIEBACiB7CiAJdTMyIGwsIGg7CiAJaW50IGk7Ci0JCisKIAkvKiBDaGVjayBmb3IgTUNFIHN1cHBvcnQgKi8KIAlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTUNFKSkKIAkJcmV0dXJuOwogCiAJLyogQ2hlY2sgZm9yIFBQcm8gc3R5bGUgTUNBICovCi0gCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9NQ0EpKQorCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9NQ0EpKQogCQlyZXR1cm47CiAKIAkvKiBPayBtYWNoaW5lIGNoZWNrIGlzIGF2YWlsYWJsZSAqLwogCW1hY2hpbmVfY2hlY2tfdmVjdG9yID0gaW50ZWxfbWFjaGluZV9jaGVjazsKIAl3bWIoKTsKIAotCXByaW50ayAoS0VSTl9JTkZPICJJbnRlbCBtYWNoaW5lIGNoZWNrIGFyY2hpdGVjdHVyZSBzdXBwb3J0ZWQuXG4iKTsKLQlyZG1zciAoTVNSX0lBMzJfTUNHX0NBUCwgbCwgaCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW50ZWwgbWFjaGluZSBjaGVjayBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkLlxuIik7CisJcmRtc3IoTVNSX0lBMzJfTUNHX0NBUCwgbCwgaCk7CiAJaWYgKGwgJiAoMTw8OCkpCS8qIENvbnRyb2wgcmVnaXN0ZXIgcHJlc2VudCA/ICovCiAJCXdybXNyKE1TUl9JQTMyX01DR19DVEwsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOwogCW5yX21jZV9iYW5rcyA9IGwgJiAweGZmOwpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIAkgKiAtIE1DMF9DVEwgc2hvdWxkIG5vdCBiZSB3cml0dGVuCiAJICogLSBTdGF0dXMgcmVnaXN0ZXJzIG9uIGFsbCBiYW5rcyBzaG91bGQgYmUgY2xlYXJlZCBvbiByZXNldAogCSAqLwotCWZvciAoaT0xOyBpPG5yX21jZV9iYW5rczsgaSsrKQotCQl3cm1zciAoTVNSX0lBMzJfTUMwX0NUTCs0KmksIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOworCWZvciAoaSA9IDE7IGkgPCBucl9tY2VfYmFua3M7IGkrKykKKwkJd3Jtc3IoTVNSX0lBMzJfTUMwX0NUTCs0KmksIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOwogCi0JZm9yIChpPTA7IGk8bnJfbWNlX2JhbmtzOyBpKyspCi0JCXdybXNyIChNU1JfSUEzMl9NQzBfU1RBVFVTKzQqaSwgMHgwLCAweDApOworCWZvciAoaSA9IDA7IGkgPCBucl9tY2VfYmFua3M7IGkrKykKKwkJd3Jtc3IoTVNSX0lBMzJfTUMwX1NUQVRVUys0KmksIDB4MCwgMHgwKTsKIAotCXNldF9pbl9jcjQgKFg4Nl9DUjRfTUNFKTsKLQlwcmludGsgKEtFUk5fSU5GTyAiSW50ZWwgbWFjaGluZSBjaGVjayByZXBvcnRpbmcgZW5hYmxlZCBvbiBDUFUjJWQuXG4iLAorCXNldF9pbl9jcjQoWDg2X0NSNF9NQ0UpOworCXByaW50ayhLRVJOX0lORk8gIkludGVsIG1hY2hpbmUgY2hlY2sgcmVwb3J0aW5nIGVuYWJsZWQgb24gQ1BVIyVkLlxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDliN2UwMWQuLjFmNGNjNDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtMSw1ICsxLDQgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwogICoKICAqIFRoZXJtYWwgdGhyb3R0bGUgZXZlbnQgc3VwcG9ydCBjb2RlIChzdWNoIGFzIHN5c2xvZyBtZXNzYWdpbmcgYW5kIHJhdGUKICAqIGxpbWl0aW5nKSB0aGF0IHdhcyBmYWN0b3JlZCBvdXQgZnJvbSB4ODZfNjQgKG1jZV9pbnRlbC5jKSBhbmQgaTM4NiAocDQuYykuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay93aW5jaGlwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay93aW5jaGlwLmMKaW5kZXggM2Q0MjhkNS4uZjJiZTNlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svd2luY2hpcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3dpbmNoaXAuYwpAQCAtOCwxNCArOCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPiAKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogI2luY2x1ZGUgIm1jZS5oIgogCiAvKiBNYWNoaW5lIGNoZWNrIGhhbmRsZXIgZm9yIFdpbkNoaXAgQzYgKi8KLXN0YXRpYyB2b2lkIHdpbmNoaXBfbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKK3N0YXRpYyB2b2lkIHdpbmNoaXBfbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewogCXByaW50ayhLRVJOX0VNRVJHICJDUFUwOiBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbi5cbiIpOwogCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKQEAgLTI4LDggKzI4LDggQEAKIAltYWNoaW5lX2NoZWNrX3ZlY3RvciA9IHdpbmNoaXBfbWFjaGluZV9jaGVjazsKIAl3bWIoKTsKIAlyZG1zcihNU1JfSURUX0ZDUjEsIGxvLCBoaSk7Ci0JbG98PSAoMTw8Mik7CS8qIEVuYWJsZSBFSUVSUklOVCAoaW50IDE4IE1DRSkgKi8KLQlsbyY9IH4oMTw8NCk7CS8qIEVuYWJsZSBNQ0UgKi8KKwlsbyB8PSAoMTw8Mik7CS8qIEVuYWJsZSBFSUVSUklOVCAoaW50IDE4IE1DRSkgKi8KKwlsbyAmPSB+KDE8PDQpOwkvKiBFbmFibGUgTUNFICovCiAJd3Jtc3IoTVNSX0lEVF9GQ1IxLCBsbywgaGkpOwogCXNldF9pbl9jcjQoWDg2X0NSNF9NQ0UpOwogCXByaW50ayhLRVJOX0lORk8gIldpbmNoaXAgbWFjaGluZSBjaGVjayByZXBvcnRpbmcgZW5hYmxlZCBvbiBDUFUjMC5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggMTAzZDYxYS4uMzUzZWZlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhdC5oPgogI2luY2x1ZGUgIm10cnIuaCIKIAogc3RydWN0IG10cnJfc3RhdGUgewpAQCAtMzUsNiArMzYsOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbXBfY2hhbmdlc19tYXNrOwogc3RhdGljIHN0cnVjdCBtdHJyX3N0YXRlIG10cnJfc3RhdGUgPSB7fTsKK3N0YXRpYyBpbnQgbXRycl9zdGF0ZV9zZXQ7CitzdGF0aWMgdTY0IHRvbTI7CiAKICN1bmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCiAjZGVmaW5lIE1PRFVMRV9QQVJBTV9QUkVGSVggIm10cnIuIgpAQCAtNDIsNiArNDUsMTExIEBACiBzdGF0aWMgaW50IG10cnJfc2hvdzsKIG1vZHVsZV9wYXJhbV9uYW1lZChzaG93LCBtdHJyX3Nob3csIGJvb2wsIDApOwogCisvKgorICogUmV0dXJucyB0aGUgZWZmZWN0aXZlIE1UUlIgdHlwZSBmb3IgdGhlIHJlZ2lvbgorICogRXJyb3IgcmV0dXJuczoKKyAqIC0gMHhGRSAtIHdoZW4gdGhlIHJhbmdlIGlzICJub3QgZW50aXJlbHkgY292ZXJlZCIgYnkgX2FueV8gdmFyIHJhbmdlIE1UUlIKKyAqIC0gMHhGRiAtIHdoZW4gTVRSUiBpcyBub3QgZW5hYmxlZAorICovCit1OCBtdHJyX3R5cGVfbG9va3VwKHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlpbnQgaTsKKwl1NjQgYmFzZSwgbWFzazsKKwl1OCBwcmV2X21hdGNoLCBjdXJyX21hdGNoOworCisJaWYgKCFtdHJyX3N0YXRlX3NldCkKKwkJcmV0dXJuIDB4RkY7CisKKwlpZiAoIW10cnJfc3RhdGUuZW5hYmxlZCkKKwkJcmV0dXJuIDB4RkY7CisKKwkvKiBNYWtlIGVuZCBpbmNsdXNpdmUgZW5kLCBpbnN0ZWFkIG9mIGV4Y2x1c2l2ZSAqLworCWVuZC0tOworCisJLyogTG9vayBpbiBmaXhlZCByYW5nZXMuIEp1c3QgcmV0dXJuIHRoZSB0eXBlIGFzIHBlciBzdGFydCAqLworCWlmIChtdHJyX3N0YXRlLmhhdmVfZml4ZWQgJiYgKHN0YXJ0IDwgMHgxMDAwMDApKSB7CisJCWludCBpZHg7CisKKwkJaWYgKHN0YXJ0IDwgMHg4MDAwMCkgeworCQkJaWR4ID0gMDsKKwkJCWlkeCArPSAoc3RhcnQgPj4gMTYpOworCQkJcmV0dXJuIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzW2lkeF07CisJCX0gZWxzZSBpZiAoc3RhcnQgPCAweEMwMDAwKSB7CisJCQlpZHggPSAxICogODsKKwkJCWlkeCArPSAoKHN0YXJ0IC0gMHg4MDAwMCkgPj4gMTQpOworCQkJcmV0dXJuIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzW2lkeF07CisJCX0gZWxzZSBpZiAoc3RhcnQgPCAweDEwMDAwMDApIHsKKwkJCWlkeCA9IDMgKiA4OworCQkJaWR4ICs9ICgoc3RhcnQgLSAweEMwMDAwKSA+PiAxMik7CisJCQlyZXR1cm4gbXRycl9zdGF0ZS5maXhlZF9yYW5nZXNbaWR4XTsKKwkJfQorCX0KKworCS8qCisJICogTG9vayBpbiB2YXJpYWJsZSByYW5nZXMKKwkgKiBMb29rIG9mIG11bHRpcGxlIHJhbmdlcyBtYXRjaGluZyB0aGlzIGFkZHJlc3MgYW5kIHBpY2sgdHlwZQorCSAqIGFzIHBlciBNVFJSIHByZWNlZGVuY2UKKwkgKi8KKwlpZiAoIW10cnJfc3RhdGUuZW5hYmxlZCAmIDIpIHsKKwkJcmV0dXJuIG10cnJfc3RhdGUuZGVmX3R5cGU7CisJfQorCisJcHJldl9tYXRjaCA9IDB4RkY7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyArK2kpIHsKKwkJdW5zaWduZWQgc2hvcnQgc3RhcnRfc3RhdGUsIGVuZF9zdGF0ZTsKKworCQlpZiAoIShtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyAmICgxIDw8IDExKSkpCisJCQljb250aW51ZTsKKworCQliYXNlID0gKCgodTY0KW10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2hpKSA8PCAzMikgKworCQkgICAgICAgKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvICYgUEFHRV9NQVNLKTsKKwkJbWFzayA9ICgoKHU2NCltdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19oaSkgPDwgMzIpICsKKwkJICAgICAgIChtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyAmIFBBR0VfTUFTSyk7CisKKwkJc3RhcnRfc3RhdGUgPSAoKHN0YXJ0ICYgbWFzaykgPT0gKGJhc2UgJiBtYXNrKSk7CisJCWVuZF9zdGF0ZSA9ICgoZW5kICYgbWFzaykgPT0gKGJhc2UgJiBtYXNrKSk7CisJCWlmIChzdGFydF9zdGF0ZSAhPSBlbmRfc3RhdGUpCisJCQlyZXR1cm4gMHhGRTsKKworCQlpZiAoKHN0YXJ0ICYgbWFzaykgIT0gKGJhc2UgJiBtYXNrKSkgeworCQkJY29udGludWU7CisJCX0KKworCQljdXJyX21hdGNoID0gbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gJiAweGZmOworCQlpZiAocHJldl9tYXRjaCA9PSAweEZGKSB7CisJCQlwcmV2X21hdGNoID0gY3Vycl9tYXRjaDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHByZXZfbWF0Y2ggPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgfHwKKwkJICAgIGN1cnJfbWF0Y2ggPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpIHsKKwkJCXJldHVybiBNVFJSX1RZUEVfVU5DQUNIQUJMRTsKKwkJfQorCisJCWlmICgocHJldl9tYXRjaCA9PSBNVFJSX1RZUEVfV1JCQUNLICYmCisJCSAgICAgY3Vycl9tYXRjaCA9PSBNVFJSX1RZUEVfV1JUSFJPVUdIKSB8fAorCQkgICAgKHByZXZfbWF0Y2ggPT0gTVRSUl9UWVBFX1dSVEhST1VHSCAmJgorCQkgICAgIGN1cnJfbWF0Y2ggPT0gTVRSUl9UWVBFX1dSQkFDSykpIHsKKwkJCXByZXZfbWF0Y2ggPSBNVFJSX1RZUEVfV1JUSFJPVUdIOworCQkJY3Vycl9tYXRjaCA9IE1UUlJfVFlQRV9XUlRIUk9VR0g7CisJCX0KKworCQlpZiAocHJldl9tYXRjaCAhPSBjdXJyX21hdGNoKSB7CisJCQlyZXR1cm4gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7CisJCX0KKwl9CisKKwlpZiAodG9tMikgeworCQlpZiAoc3RhcnQgPj0gKDFVTEw8PDMyKSAmJiAoZW5kIDwgdG9tMikpCisJCQlyZXR1cm4gTVRSUl9UWVBFX1dSQkFDSzsKKwl9CisKKwlpZiAocHJldl9tYXRjaCAhPSAweEZGKQorCQlyZXR1cm4gcHJldl9tYXRjaDsKKworCXJldHVybiBtdHJyX3N0YXRlLmRlZl90eXBlOworfQorCiAvKiAgR2V0IHRoZSBNU1IgcGFpciByZWxhdGluZyB0byBhIHZhciByYW5nZSAgKi8KIHN0YXRpYyB2b2lkCiBnZXRfbXRycl92YXJfcmFuZ2UodW5zaWduZWQgaW50IGluZGV4LCBzdHJ1Y3QgbXRycl92YXJfcmFuZ2UgKnZyKQpAQCAtNzksMTIgKzE4NywxNiBAQAogCQkJYmFzZSwgYmFzZSArIHN0ZXAgLSAxLCBtdHJyX2F0dHJpYl90b19zdHIoKnR5cGVzKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHByZXBhcmVfc2V0KHZvaWQpOworc3RhdGljIHZvaWQgcG9zdF9zZXQodm9pZCk7CisKIC8qICBHcmFiIGFsbCBvZiB0aGUgTVRSUiBzdGF0ZSBmb3IgdGhpcyBDUFUgaW50byAqc3RhdGUgICovCiB2b2lkIF9faW5pdCBnZXRfbXRycl9zdGF0ZSh2b2lkKQogewogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdnJzOwogCXVuc2lnbmVkIGxvLCBkdW1teTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdnJzID0gbXRycl9zdGF0ZS52YXJfcmFuZ2VzOwogCkBAIC0xMDAsNiArMjEyLDE1IEBACiAJbXRycl9zdGF0ZS5kZWZfdHlwZSA9IChsbyAmIDB4ZmYpOwogCW10cnJfc3RhdGUuZW5hYmxlZCA9IChsbyAmIDB4YzAwKSA+PiAxMDsKIAorCWlmIChhbWRfc3BlY2lhbF9kZWZhdWx0X210cnIoKSkgeworCQl1bnNpZ25lZCBsbywgaGk7CisJCS8qIFRPUF9NRU0yICovCisJCXJkbXNyKE1TUl9LOF9UT1BfTUVNMiwgbG8sIGhpKTsKKwkJdG9tMiA9IGhpOworCQl0b20yIDw8PSAzMjsKKwkJdG9tMiB8PSBsbzsKKwkJdG9tMiAmPSAweGZmZmZmZjgwMDAwMDBVTEw7CisJfQogCWlmIChtdHJyX3Nob3cpIHsKIAkJaW50IGhpZ2hfd2lkdGg7CiAKQEAgLTEzMCw3ICsyNTEsMjIgQEAKIAkJCWVsc2UKIAkJCQlwcmludGsoS0VSTl9JTkZPICJNVFJSICV1IGRpc2FibGVkXG4iLCBpKTsKIAkJfQorCQlpZiAodG9tMikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiVE9NMjogJTAxNmxseCBha2EgJWxsZE1cbiIsCisJCQkJCSAgdG9tMiwgdG9tMj4+MjApOworCQl9CiAJfQorCW10cnJfc3RhdGVfc2V0ID0gMTsKKworCS8qIFBBVCBzZXR1cCBmb3IgQlAuIFdlIG5lZWQgdG8gZ28gdGhyb3VnaCBzeW5jIHN0ZXBzIGhlcmUgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJlcGFyZV9zZXQoKTsKKworCXBhdF9pbml0KCk7CisKKwlwb3N0X3NldCgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogfQogCiAvKiAgU29tZSBCSU9TJ3MgYXJlIGZ1Y2tlZCBhbmQgZG9uJ3Qgc2V0IGFsbCBNVFJScyB0aGUgc2FtZSEgICovCkBAIC0xNzYsMTIgKzMxMiwxMyBAQAogfQogCiAvKioKLSAqIENoZWNrcyBhbmQgdXBkYXRlcyBhbiBmaXhlZC1yYW5nZSBNVFJSIGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgdmFsdWUgaXQKLSAqIHNob3VsZCBoYXZlLiBJZiBLOCBleHRlbnRpb25zIGFyZSB3YW50ZWQsIHVwZGF0ZSB0aGUgSzggU1lTQ0ZHIE1TUiBhbHNvLgotICogc2VlIEFNRCBwdWJsaWNhdGlvbiBuby4gMjQ1OTMsIGNoYXB0ZXIgNy44LjEsIHBhZ2UgMjMzIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gKiBccGFyYW0gbXNyIE1TUiBhZGRyZXNzIG9mIHRoZSBNVFRSIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFuZCB1cGRhdGVkCi0gKiBccGFyYW0gY2hhbmdlZCBwb2ludGVyIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBNVFJSIG5lZWRlZCB0byBiZSBjaGFuZ2VkCi0gKiBccGFyYW0gbXNyd29yZHMgcG9pbnRlciB0byB0aGUgTVNSIHZhbHVlcyB3aGljaCB0aGUgTVNSIHNob3VsZCBoYXZlCisgKiBzZXRfZml4ZWRfcmFuZ2UgLSBjaGVja3MgJiB1cGRhdGVzIGEgZml4ZWQtcmFuZ2UgTVRSUiBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGl0IHNob3VsZCBoYXZlCisgKiBAbXNyOiBNU1IgYWRkcmVzcyBvZiB0aGUgTVRUUiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhbmQgdXBkYXRlZAorICogQGNoYW5nZWQ6IHBvaW50ZXIgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIE1UUlIgbmVlZGVkIHRvIGJlIGNoYW5nZWQKKyAqIEBtc3J3b3JkczogcG9pbnRlciB0byB0aGUgTVNSIHZhbHVlcyB3aGljaCB0aGUgTVNSIHNob3VsZCBoYXZlCisgKgorICogSWYgSzggZXh0ZW50aW9ucyBhcmUgd2FudGVkLCB1cGRhdGUgdGhlIEs4IFNZU0NGRyBNU1IgYWxzby4KKyAqIFNlZSBBTUQgcHVibGljYXRpb24gbm8uIDI0NTkzLCBjaGFwdGVyIDcuOC4xLCBwYWdlIDIzMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwogc3RhdGljIHZvaWQgc2V0X2ZpeGVkX3JhbmdlKGludCBtc3IsIGJvb2wgKmNoYW5nZWQsIHVuc2lnbmVkIGludCAqbXNyd29yZHMpCiB7CkBAIC0xOTksMTIgKzMzNiwxNSBAQAogCX0KIH0KIAorLyoqCisgKiBnZW5lcmljX2dldF9mcmVlX3JlZ2lvbiAtIEdldCBhIGZyZWUgTVRSUi4KKyAqIEBiYXNlOiBUaGUgc3RhcnRpbmcgKGJhc2UpIGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi4KKyAqIEBzaXplOiBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSByZWdpb24uCisgKiBAcmVwbGFjZV9yZWc6IG10cnIgaW5kZXggdG8gYmUgcmVwbGFjZWQ7IHNldCB0byBpbnZhbGlkIHZhbHVlIGlmIG5vbmUuCisgKgorICogUmV0dXJuczogVGhlIGluZGV4IG9mIHRoZSByZWdpb24gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBvbiBlcnJvci4KKyAqLwogaW50IGdlbmVyaWNfZ2V0X2ZyZWVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgcmVwbGFjZV9yZWcpCi0vKiAgW1NVTU1BUlldIEdldCBhIGZyZWUgTVRSUi4KLSAgICA8YmFzZT4gVGhlIHN0YXJ0aW5nIChiYXNlKSBhZGRyZXNzIG9mIHRoZSByZWdpb24uCi0gICAgPHNpemU+IFRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIHJlZ2lvbi4KLSAgICBbUkVUVVJOU10gVGhlIGluZGV4IG9mIHRoZSByZWdpb24gb24gc3VjY2VzcywgZWxzZSAtMSBvbiBlcnJvci4KLSovCiB7CiAJaW50IGksIG1heDsKIAltdHJyX3R5cGUgbHR5cGU7CkBAIC0yNDksOCArMzg5LDggQEAKIH0KIAogLyoqCi0gKiBDaGVja3MgYW5kIHVwZGF0ZXMgdGhlIGZpeGVkLXJhbmdlIE1UUlJzIGlmIHRoZXkgZGlmZmVyIGZyb20gdGhlIHNhdmVkIHNldAotICogXHBhcmFtIGZycyBwb2ludGVyIHRvIGZpeGVkLXJhbmdlIE1UUlIgdmFsdWVzLCBzYXZlZCBieSBnZXRfZml4ZWRfcmFuZ2VzKCkKKyAqIHNldF9maXhlZF9yYW5nZXMgLSBjaGVja3MgJiB1cGRhdGVzIHRoZSBmaXhlZC1yYW5nZSBNVFJScyBpZiB0aGV5IGRpZmZlciBmcm9tIHRoZSBzYXZlZCBzZXQKKyAqIEBmcnM6IHBvaW50ZXIgdG8gZml4ZWQtcmFuZ2UgTVRSUiB2YWx1ZXMsIHNhdmVkIGJ5IGdldF9maXhlZF9yYW5nZXMoKQogICovCiBzdGF0aWMgaW50IHNldF9maXhlZF9yYW5nZXMobXRycl90eXBlICogZnJzKQogewpAQCAtMjk0LDEzICs0MzQsMTMgQEAKIAogc3RhdGljIHUzMiBkZWZ0eXBlX2xvLCBkZWZ0eXBlX2hpOwogCisvKioKKyAqIHNldF9tdHJyX3N0YXRlIC0gU2V0IHRoZSBNVFJSIHN0YXRlIGZvciB0aGlzIENQVS4KKyAqCisgKiBOT1RFOiBUaGUgQ1BVIG11c3QgYWxyZWFkeSBiZSBpbiBhIHNhZmUgc3RhdGUgZm9yIE1UUlIgY2hhbmdlcy4KKyAqIFJFVFVSTlM6IDAgaWYgbm8gY2hhbmdlcyBtYWRlLCBlbHNlIGEgbWFzayBpbmRpY2F0aW5nIHdoYXQgd2FzIGNoYW5nZWQuCisgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tdHJyX3N0YXRlKHZvaWQpCi0vKiAgW1NVTU1BUlldIFNldCB0aGUgTVRSUiBzdGF0ZSBmb3IgdGhpcyBDUFUuCi0gICAgPHN0YXRlPiBUaGUgTVRSUiBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWFkLgotICAgIDxjdHh0PiBTb21lIHJlbGV2YW50IENQVSBjb250ZXh0LgotICAgIFtOT1RFXSBUaGUgQ1BVIG11c3QgYWxyZWFkeSBiZSBpbiBhIHNhZmUgc3RhdGUgZm9yIE1UUlIgY2hhbmdlcy4KLSAgICBbUkVUVVJOU10gMCBpZiBubyBjaGFuZ2VzIG1hZGUsIGVsc2UgYSBtYXNrIGluZGljYXRpb24gd2hhdCB3YXMgY2hhbmdlZC4KLSovCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgbG9uZyBjaGFuZ2VfbWFzayA9IDA7CkBAIC0zOTMsNiArNTMzLDkgQEAKIAkvKiBBY3R1YWxseSBzZXQgdGhlIHN0YXRlICovCiAJbWFzayA9IHNldF9tdHJyX3N0YXRlKCk7CiAKKwkvKiBhbHNvIHNldCBQQVQgKi8KKwlwYXRfaW5pdCgpOworCiAJcG9zdF9zZXQoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKaW5kZXggOTFlMTUwYS4uMTk2MGYxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKQEAgLTQyNCwxMSArNDI0LDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJcHJvY19yb290X210cnIgPQotCSAgICBjcmVhdGVfcHJvY19lbnRyeSgibXRyciIsIFNfSVdVU1IgfCBTX0lSVUdPLCAmcHJvY19yb290KTsKLQlpZiAocHJvY19yb290X210cnIpIHsKKwkJcHJvY19jcmVhdGUoIm10cnIiLCBTX0lXVVNSIHwgU19JUlVHTywgJnByb2Nfcm9vdCwgJm10cnJfZm9wcyk7CisKKwlpZiAocHJvY19yb290X210cnIpCiAJCXByb2Nfcm9vdF9tdHJyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlwcm9jX3Jvb3RfbXRyci0+cHJvY19mb3BzID0gJm10cnJfZm9wczsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IGI2ZTEzNmYuLjZhMWUyNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KICNpbmNsdWRlICJtdHJyLmgiCiAKIHUzMiBudW1fdmFyX3JhbmdlcyA9IDA7CkBAIC02MjYsNyArNjI3LDcgQEAKICNkZWZpbmUgVG9tMkVuYWJsZWQgKDFVIDw8IDIxKQogI2RlZmluZSBUb20yRm9yY2VNZW1UeXBlV0IgKDFVIDw8IDIyKQogCi1zdGF0aWMgX19pbml0IGludCBhbWRfc3BlY2lhbF9kZWZhdWx0X210cnIodm9pZCkKK2ludCBfX2luaXQgYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKHZvaWQpCiB7CiAJdTMyIGwsIGg7CiAKQEAgLTY0OSw2ICs2NTAsNyBAQAogCiAvKioKICAqIG10cnJfdHJpbV91bmNhY2hlZF9tZW1vcnkgLSB0cmltIFJBTSBub3QgY292ZXJlZCBieSBNVFJScworICogQGVuZF9wZm46IGVuZGluZyBwYWdlIGZyYW1lIG51bWJlcgogICoKICAqIFNvbWUgYnVnZ3kgQklPU2VzIGRvbid0IHNldHVwIHRoZSBNVFJScyBwcm9wZXJseSBmb3Igc3lzdGVtcyB3aXRoIGNlcnRhaW4KICAqIG1lbW9yeSBjb25maWd1cmF0aW9ucy4gIFRoaXMgcm91dGluZSBjaGVja3MgdGhhdCB0aGUgaGlnaGVzdCBNVFJSIG1hdGNoZXMKQEAgLTY4OCw4ICs2OTAsMTEgQEAKIAogCS8qIGt2bS9xZW11IGRvZXNuJ3QgaGF2ZSBtdHJyIHNldCByaWdodCwgZG9uJ3QgdHJpbSB0aGVtIGFsbCAqLwogCWlmICghaGlnaGVzdF9wZm4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogc3RyYW5nZSwgQ1BVIE1UUlJzIGFsbCBibGFuaz9cbiIpOwotCQlXQVJOX09OKDEpOworCQlpZiAoIWt2bV9wYXJhX2F2YWlsYWJsZSgpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIldBUk5JTkc6IHN0cmFuZ2UsIENQVSBNVFJScyBhbGwgYmxhbms/XG4iKTsKKwkJCVdBUk5fT04oMSk7CisJCX0KIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03MDYsNyArNzExLDggQEAKIAkJdHJpbV9zaXplID0gZW5kX3BmbjsKIAkJdHJpbV9zaXplIDw8PSBQQUdFX1NISUZUOwogCQl0cmltX3NpemUgLT0gdHJpbV9zdGFydDsKLQkJYWRkX21lbW9yeV9yZWdpb24odHJpbV9zdGFydCwgdHJpbV9zaXplLCBFODIwX1JFU0VSVkVEKTsKKwkJdXBkYXRlX21lbW9yeV9yYW5nZSh0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkFNLAorCQkJCQlFODIwX1JFU0VSVkVEKTsKIAkJdXBkYXRlX2U4MjAoKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYwppbmRleCA5ZjhiYTkyLi43ZjdlMjc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYwpAQCAtMTksMTMgKzE5LDE1IEBACiAJaWYgKHVzZV9pbnRlbCgpIHx8IGlzX2NwdShDWVJJWCkpIHsKIAogCQkvKiAgU2F2ZSB2YWx1ZSBvZiBDUjQgYW5kIGNsZWFyIFBhZ2UgR2xvYmFsIEVuYWJsZSAoYml0IDcpICAqLwotCQlpZiAoIGNwdV9oYXNfcGdlICkgeworCQlpZiAoY3B1X2hhc19wZ2UpIHsKIAkJCWN0eHQtPmNyNHZhbCA9IHJlYWRfY3I0KCk7CiAJCQl3cml0ZV9jcjQoY3R4dC0+Y3I0dmFsICYgflg4Nl9DUjRfUEdFKTsKIAkJfQogCi0JCS8qICBEaXNhYmxlIGFuZCBmbHVzaCBjYWNoZXMuIE5vdGUgdGhhdCB3YmludmQgZmx1c2hlcyB0aGUgVExCcyBhcwotCQkgICAgYSBzaWRlLWVmZmVjdCAgKi8KKwkJLyoKKwkJICogRGlzYWJsZSBhbmQgZmx1c2ggY2FjaGVzLiBOb3RlIHRoYXQgd2JpbnZkIGZsdXNoZXMgdGhlIFRMQnMKKwkJICogYXMgYSBzaWRlLWVmZmVjdAorCQkgKi8KIAkJY3IwID0gcmVhZF9jcjAoKSB8IFg4Nl9DUjBfQ0Q7CiAJCXdiaW52ZCgpOwogCQl3cml0ZV9jcjAoY3IwKTsKQEAgLTQyLDcgKzQ0LDcgQEAKIAogdm9pZCBzZXRfbXRycl9jYWNoZV9kaXNhYmxlKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KQogewotCWlmICh1c2VfaW50ZWwoKSkgCisJaWYgKHVzZV9pbnRlbCgpKQogCQkvKiAgRGlzYWJsZSBNVFJScywgYW5kIHNldCB0aGUgZGVmYXVsdCB0eXBlIHRvIHVuY2FjaGVkICAqLwogCQltdHJyX3dybXNyKE1UUlJkZWZUeXBlX01TUiwgY3R4dC0+ZGVmdHlwZV9sbyAmIDB4ZjMwMFVMLAogCQkgICAgICBjdHh0LT5kZWZ0eXBlX2hpKTsKQEAgLTY2LDEyICs2OCwxMiBAQAogCQllbHNlCiAJCQkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdhcyBleGNsdWRlZCBhdCB0aGUgdG9wICovCiAJCQlzZXRDeDg2KENYODZfQ0NSMywgY3R4dC0+Y2NyMyk7Ci0JCQorCiAJCS8qICBFbmFibGUgY2FjaGVzICAqLwogCQl3cml0ZV9jcjAocmVhZF9jcjAoKSAmIDB4YmZmZmZmZmYpOwogCiAJCS8qICBSZXN0b3JlIHZhbHVlIG9mIENSNCAgKi8KLQkJaWYgKCBjcHVfaGFzX3BnZSApCisJCWlmIChjcHVfaGFzX3BnZSkKIAkJCXdyaXRlX2NyNChjdHh0LT5jcjR2YWwpOwogCX0KIAkvKiAgUmUtZW5hYmxlIGludGVycnVwdHMgbG9jYWxseSAoaWYgZW5hYmxlZCBwcmV2aW91c2x5KSAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbmV4Z2VuLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L25leGdlbi5jCmluZGV4IDk2MWZiZTEuLjVkNWUxYzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbmV4Z2VuLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9uZXhnZW4uYwpAQCAtOSwxMSArOSwxMSBAQAogICoJRGV0ZWN0IGEgTmV4R2VuIENQVSBydW5uaW5nIHdpdGhvdXQgQklPUyBoeXBlcmNvZGUgbmV3IGVub3VnaAogICoJdG8gaGF2ZSBDUFVJRC4gKFRoYW5rcyB0byBIZXJiZXJ0IE9wcG1hbm4pCiAgKi8KLSAKKwogc3RhdGljIGludCBfX2NwdWluaXQgZGVlcF9tYWdpY19uZXhnZW5fcHJvYmUodm9pZCkKIHsKIAlpbnQgcmV0OwotCQorCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiCW1vdncJJDB4NTU1NSwgJSVheFxuIgogCQkiCXhvcncJJSVkeCwlJWR4XG4iCkBAIC0yMiwyMiArMjIsMjEgQEAKIAkJIgltb3ZsCSQwLCAlJWVheFxuIgogCQkiCWpuegkxZlxuIgogCQkiCW1vdmwJJDEsICUlZWF4XG4iCi0JCSIxOlxuIiAKLQkJOiAiPWEiIChyZXQpIDogOiAiY3giLCAiZHgiICk7CisJCSIxOlxuIgorCQk6ICI9YSIgKHJldCkgOiA6ICJjeCIsICJkeCIpOwogCXJldHVybiAgcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9uZXhnZW4oc3RydWN0IGNwdWluZm9feDg2ICogYykKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbml0X25leGdlbihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJYy0+eDg2X2NhY2hlX3NpemUgPSAyNTY7IC8qIEEgZmV3IGhhZCAxIE1CLi4uICovCiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBuZXhnZW5faWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICogYykKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBuZXhnZW5faWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCS8qIERldGVjdCBOZXhHZW4gd2l0aCBvbGQgaHlwZXJjb2RlICovCi0JaWYgKCBkZWVwX21hZ2ljX25leGdlbl9wcm9iZSgpICkgeworCWlmIChkZWVwX21hZ2ljX25leGdlbl9wcm9iZSgpKQogCQlzdHJjcHkoYy0+eDg2X3ZlbmRvcl9pZCwgIk5leEdlbkRyaXZlbiIpOwotCX0KIH0KIAogc3RhdGljIHN0cnVjdCBjcHVfZGV2IG5leGdlbl9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCmluZGV4IDliODM4MzIuLmI5NDNlMTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCkBAIC02NTIsOSArNjUyLDYgQEAKIAkJCXdkX29wcyA9ICZwNl93ZF9vcHM7CiAJCQlicmVhazsKIAkJY2FzZSAxNToKLQkJCWlmIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDB4NCkKLQkJCQlyZXR1cm47Ci0KIAkJCXdkX29wcyA9ICZwNF93ZF9vcHM7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTY3MCw4ICs2NjcsMTAgQEAKIHsKIAlpZiAoIXdkX29wcykgewogCQlwcm9iZV9ubWlfd2F0Y2hkb2coKTsKLQkJaWYgKCF3ZF9vcHMpCisJCWlmICghd2Rfb3BzKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJOTUkgd2F0Y2hkb2c6IENQVSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCXJldHVybiAtMTsKKwkJfQogCiAJCWlmICghd2Rfb3BzLT5yZXNlcnZlKCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwppbmRleCBhZjExZDMxLi4wZDBkOTA1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtMSw4NSArMSwxNDUgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAogLyoKICAqCUdldCBDUFUgaW5mb3JtYXRpb24gZm9yIHVzZSBieSB0aGUgcHJvY2ZzLgogICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorc3RhdGljIHZvaWQgc2hvd19jcHVpbmZvX2NvcmUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19YODZfSFQKKwlpZiAoYy0+eDg2X21heF9jb3JlcyAqIHNtcF9udW1fc2libGluZ3MgPiAxKSB7CisJCXNlcV9wcmludGYobSwgInBoeXNpY2FsIGlkXHQ6ICVkXG4iLCBjLT5waHlzX3Byb2NfaWQpOworCQlzZXFfcHJpbnRmKG0sICJzaWJsaW5nc1x0OiAlZFxuIiwKKwkJCSAgIGNwdXNfd2VpZ2h0KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKSk7CisJCXNlcV9wcmludGYobSwgImNvcmUgaWRcdFx0OiAlZFxuIiwgYy0+Y3B1X2NvcmVfaWQpOworCQlzZXFfcHJpbnRmKG0sICJjcHUgY29yZXNcdDogJWRcbiIsIGMtPmJvb3RlZF9jb3Jlcyk7CisJCXNlcV9wcmludGYobSwgImFwaWNpZFx0XHQ6ICVkXG4iLCBjLT5hcGljaWQpOworCQlzZXFfcHJpbnRmKG0sICJpbml0aWFsIGFwaWNpZFx0OiAlZFxuIiwgYy0+aW5pdGlhbF9hcGljaWQpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzaG93X2NwdWluZm9fbWlzYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3sKKwkvKgorCSAqIFdlIHVzZSBleGNlcHRpb24gMTYgaWYgd2UgaGF2ZSBoYXJkd2FyZSBtYXRoIGFuZCB3ZSd2ZSBlaXRoZXIgc2VlbgorCSAqIGl0IG9yIHRoZSBDUFUgY2xhaW1zIGl0IGlzIGludGVybmFsCisJICovCisJaW50IGZwdV9leGNlcHRpb24gPSBjLT5oYXJkX21hdGggJiYgKGlnbm9yZV9mcHVfaXJxIHx8IGNwdV9oYXNfZnB1KTsKKwlzZXFfcHJpbnRmKG0sCisJCSAgICJmZGl2X2J1Z1x0OiAlc1xuIgorCQkgICAiaGx0X2J1Z1x0XHQ6ICVzXG4iCisJCSAgICJmMDBmX2J1Z1x0OiAlc1xuIgorCQkgICAiY29tYV9idWdcdDogJXNcbiIKKwkJICAgImZwdVx0XHQ6ICVzXG4iCisJCSAgICJmcHVfZXhjZXB0aW9uXHQ6ICVzXG4iCisJCSAgICJjcHVpZCBsZXZlbFx0OiAlZFxuIgorCQkgICAid3BcdFx0OiAlc1xuIiwKKwkJICAgYy0+ZmRpdl9idWcgPyAieWVzIiA6ICJubyIsCisJCSAgIGMtPmhsdF93b3Jrc19vayA/ICJubyIgOiAieWVzIiwKKwkJICAgYy0+ZjAwZl9idWcgPyAieWVzIiA6ICJubyIsCisJCSAgIGMtPmNvbWFfYnVnID8gInllcyIgOiAibm8iLAorCQkgICBjLT5oYXJkX21hdGggPyAieWVzIiA6ICJubyIsCisJCSAgIGZwdV9leGNlcHRpb24gPyAieWVzIiA6ICJubyIsCisJCSAgIGMtPmNwdWlkX2xldmVsLAorCQkgICBjLT53cF93b3Jrc19vayA/ICJ5ZXMiIDogIm5vIik7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgc2hvd19jcHVpbmZvX2NvcmUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoYy0+eDg2X21heF9jb3JlcyAqIHNtcF9udW1fc2libGluZ3MgPiAxKSB7CisJCXNlcV9wcmludGYobSwgInBoeXNpY2FsIGlkXHQ6ICVkXG4iLCBjLT5waHlzX3Byb2NfaWQpOworCQlzZXFfcHJpbnRmKG0sICJzaWJsaW5nc1x0OiAlZFxuIiwKKwkJCSAgIGNwdXNfd2VpZ2h0KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKSk7CisJCXNlcV9wcmludGYobSwgImNvcmUgaWRcdFx0OiAlZFxuIiwgYy0+Y3B1X2NvcmVfaWQpOworCQlzZXFfcHJpbnRmKG0sICJjcHUgY29yZXNcdDogJWRcbiIsIGMtPmJvb3RlZF9jb3Jlcyk7CisJCXNlcV9wcmludGYobSwgImFwaWNpZFx0XHQ6ICVkXG4iLCBjLT5hcGljaWQpOworCQlzZXFfcHJpbnRmKG0sICJpbml0aWFsIGFwaWNpZFx0OiAlZFxuIiwgYy0+aW5pdGlhbF9hcGljaWQpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzaG93X2NwdWluZm9fbWlzYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3sKKwlzZXFfcHJpbnRmKG0sCisJCSAgICJmcHVcdFx0OiB5ZXNcbiIKKwkJICAgImZwdV9leGNlcHRpb25cdDogeWVzXG4iCisJCSAgICJjcHVpZCBsZXZlbFx0OiAlZFxuIgorCQkgICAid3BcdFx0OiB5ZXNcbiIsCisJCSAgIGMtPmNwdWlkX2xldmVsKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gdjsKLQlpbnQgaSwgbiA9IDA7Ci0JaW50IGZwdV9leGNlcHRpb247CisJdW5zaWduZWQgaW50IGNwdSA9IDA7CisJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JbiA9IGMtPmNwdV9pbmRleDsKKwljcHUgPSBjLT5jcHVfaW5kZXg7CiAjZW5kaWYKLQlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIKLQkJInZlbmRvcl9pZFx0OiAlc1xuIgotCQkiY3B1IGZhbWlseVx0OiAlZFxuIgotCQkibW9kZWxcdFx0OiAlZFxuIgotCQkibW9kZWwgbmFtZVx0OiAlc1xuIiwKLQkJbiwKLQkJYy0+eDg2X3ZlbmRvcl9pZFswXSA/IGMtPng4Nl92ZW5kb3JfaWQgOiAidW5rbm93biIsCi0JCWMtPng4NiwKLQkJYy0+eDg2X21vZGVsLAotCQljLT54ODZfbW9kZWxfaWRbMF0gPyBjLT54ODZfbW9kZWxfaWQgOiAidW5rbm93biIpOworCXNlcV9wcmludGYobSwgInByb2Nlc3Nvclx0OiAldVxuIgorCQkgICAidmVuZG9yX2lkXHQ6ICVzXG4iCisJCSAgICJjcHUgZmFtaWx5XHQ6ICVkXG4iCisJCSAgICJtb2RlbFx0XHQ6ICV1XG4iCisJCSAgICJtb2RlbCBuYW1lXHQ6ICVzXG4iLAorCQkgICBjcHUsCisJCSAgIGMtPng4Nl92ZW5kb3JfaWRbMF0gPyBjLT54ODZfdmVuZG9yX2lkIDogInVua25vd24iLAorCQkgICBjLT54ODYsCisJCSAgIGMtPng4Nl9tb2RlbCwKKwkJICAgYy0+eDg2X21vZGVsX2lkWzBdID8gYy0+eDg2X21vZGVsX2lkIDogInVua25vd24iKTsKIAogCWlmIChjLT54ODZfbWFzayB8fCBjLT5jcHVpZF9sZXZlbCA+PSAwKQogCQlzZXFfcHJpbnRmKG0sICJzdGVwcGluZ1x0OiAlZFxuIiwgYy0+eDg2X21hc2spOwogCWVsc2UKIAkJc2VxX3ByaW50ZihtLCAic3RlcHBpbmdcdDogdW5rbm93blxuIik7CiAKLQlpZiAoIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfVFNDKSApIHsKLQkJdW5zaWduZWQgaW50IGZyZXEgPSBjcHVmcmVxX3F1aWNrX2dldChuKTsKKwlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9UU0MpKSB7CisJCXVuc2lnbmVkIGludCBmcmVxID0gY3B1ZnJlcV9xdWlja19nZXQoY3B1KTsKKwogCQlpZiAoIWZyZXEpCiAJCQlmcmVxID0gY3B1X2toejsKIAkJc2VxX3ByaW50ZihtLCAiY3B1IE1Ielx0XHQ6ICV1LiUwM3VcbiIsCi0JCQlmcmVxIC8gMTAwMCwgKGZyZXEgJSAxMDAwKSk7CisJCQkgICBmcmVxIC8gMTAwMCwgKGZyZXEgJSAxMDAwKSk7CiAJfQogCiAJLyogQ2FjaGUgc2l6ZSAqLwogCWlmIChjLT54ODZfY2FjaGVfc2l6ZSA+PSAwKQogCQlzZXFfcHJpbnRmKG0sICJjYWNoZSBzaXplXHQ6ICVkIEtCXG4iLCBjLT54ODZfY2FjaGVfc2l6ZSk7Ci0jaWZkZWYgQ09ORklHX1g4Nl9IVAotCWlmIChjLT54ODZfbWF4X2NvcmVzICogc21wX251bV9zaWJsaW5ncyA+IDEpIHsKLQkJc2VxX3ByaW50ZihtLCAicGh5c2ljYWwgaWRcdDogJWRcbiIsIGMtPnBoeXNfcHJvY19pZCk7Ci0JCXNlcV9wcmludGYobSwgInNpYmxpbmdzXHQ6ICVkXG4iLAotCQkJCWNwdXNfd2VpZ2h0KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBuKSkpOwotCQlzZXFfcHJpbnRmKG0sICJjb3JlIGlkXHRcdDogJWRcbiIsIGMtPmNwdV9jb3JlX2lkKTsKLQkJc2VxX3ByaW50ZihtLCAiY3B1IGNvcmVzXHQ6ICVkXG4iLCBjLT5ib290ZWRfY29yZXMpOwotCX0KLSNlbmRpZgotCQotCS8qIFdlIHVzZSBleGNlcHRpb24gMTYgaWYgd2UgaGF2ZSBoYXJkd2FyZSBtYXRoIGFuZCB3ZSd2ZSBlaXRoZXIgc2VlbiBpdCBvciB0aGUgQ1BVIGNsYWltcyBpdCBpcyBpbnRlcm5hbCAqLwotCWZwdV9leGNlcHRpb24gPSBjLT5oYXJkX21hdGggJiYgKGlnbm9yZV9mcHVfaXJxIHx8IGNwdV9oYXNfZnB1KTsKLQlzZXFfcHJpbnRmKG0sICJmZGl2X2J1Z1x0OiAlc1xuIgotCQkJImhsdF9idWdcdFx0OiAlc1xuIgotCQkJImYwMGZfYnVnXHQ6ICVzXG4iCi0JCQkiY29tYV9idWdcdDogJXNcbiIKLQkJCSJmcHVcdFx0OiAlc1xuIgotCQkJImZwdV9leGNlcHRpb25cdDogJXNcbiIKLQkJCSJjcHVpZCBsZXZlbFx0OiAlZFxuIgotCQkJIndwXHRcdDogJXNcbiIKLQkJCSJmbGFnc1x0XHQ6IiwKLQkJICAgICBjLT5mZGl2X2J1ZyA/ICJ5ZXMiIDogIm5vIiwKLQkJICAgICBjLT5obHRfd29ya3Nfb2sgPyAibm8iIDogInllcyIsCi0JCSAgICAgYy0+ZjAwZl9idWcgPyAieWVzIiA6ICJubyIsCi0JCSAgICAgYy0+Y29tYV9idWcgPyAieWVzIiA6ICJubyIsCi0JCSAgICAgYy0+aGFyZF9tYXRoID8gInllcyIgOiAibm8iLAotCQkgICAgIGZwdV9leGNlcHRpb24gPyAieWVzIiA6ICJubyIsCi0JCSAgICAgYy0+Y3B1aWRfbGV2ZWwsCi0JCSAgICAgYy0+d3Bfd29ya3Nfb2sgPyAieWVzIiA6ICJubyIpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgMzIqTkNBUElOVFMgOyBpKysgKQotCQlpZiAoIHRlc3RfYml0KGksIGMtPng4Nl9jYXBhYmlsaXR5KSAmJgotCQkgICAgIHg4Nl9jYXBfZmxhZ3NbaV0gIT0gTlVMTCApCisJc2hvd19jcHVpbmZvX2NvcmUobSwgYywgY3B1KTsKKwlzaG93X2NwdWluZm9fbWlzYyhtLCBjKTsKKworCXNlcV9wcmludGYobSwgImZsYWdzXHRcdDoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzIqTkNBUElOVFM7IGkrKykKKwkJaWYgKGNwdV9oYXMoYywgaSkgJiYgeDg2X2NhcF9mbGFnc1tpXSAhPSBOVUxMKQogCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgeDg2X2NhcF9mbGFnc1tpXSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwlzZXFfcHJpbnRmKG0sICJcbmJvZ29taXBzXHQ6ICVsdS4lMDJsdVxuIiwKKwkJICAgYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAorCQkgICAoYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmIChjLT54ODZfdGxic2l6ZSA+IDApCisJCXNlcV9wcmludGYobSwgIlRMQiBzaXplXHQ6ICVkIDRLIHBhZ2VzXG4iLCBjLT54ODZfdGxic2l6ZSk7CisjZW5kaWYKKwlzZXFfcHJpbnRmKG0sICJjbGZsdXNoIHNpemVcdDogJXVcbiIsIGMtPng4Nl9jbGZsdXNoX3NpemUpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZXFfcHJpbnRmKG0sICJjYWNoZV9hbGlnbm1lbnRcdDogJWRcbiIsIGMtPng4Nl9jYWNoZV9hbGlnbm1lbnQpOworCXNlcV9wcmludGYobSwgImFkZHJlc3Mgc2l6ZXNcdDogJXUgYml0cyBwaHlzaWNhbCwgJXUgYml0cyB2aXJ0dWFsXG4iLAorCQkgICBjLT54ODZfcGh5c19iaXRzLCBjLT54ODZfdmlydF9iaXRzKTsKKyNlbmRpZgorCisJc2VxX3ByaW50ZihtLCAicG93ZXIgbWFuYWdlbWVudDoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQlpZiAoYy0+eDg2X3Bvd2VyICYgKDEgPDwgaSkpIHsKIAkJCWlmIChpIDwgQVJSQVlfU0laRSh4ODZfcG93ZXJfZmxhZ3MpICYmCiAJCQkgICAgeDg2X3Bvd2VyX2ZsYWdzW2ldKQpAQCAtODksMTEgKzE0OSw5IEBACiAJCQllbHNlCiAJCQkJc2VxX3ByaW50ZihtLCAiIFslZF0iLCBpKTsKIAkJfQorCX0KIAotCXNlcV9wcmludGYobSwgIlxuYm9nb21pcHNcdDogJWx1LiUwMmx1XG4iLAotCQkgICAgIGMtPmxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKLQkJICAgICAoYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOwotCXNlcV9wcmludGYobSwgImNsZmx1c2ggc2l6ZVx0OiAldVxuXG4iLCBjLT54ODZfY2xmbHVzaF9zaXplKTsKKwlzZXFfcHJpbnRmKG0sICJcblxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNiwxNCArMTY0LDE3IEBACiAJCXJldHVybiAmY3B1X2RhdGEoKnBvcyk7CiAJcmV0dXJuIE5VTEw7CiB9CisKIHN0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAkqcG9zID0gbmV4dF9jcHUoKnBvcywgY3B1X29ubGluZV9tYXApOwogCXJldHVybiBjX3N0YXJ0KG0sIHBvcyk7CiB9CisKIHN0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiB9CisKIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wID0gewogCS5zdGFydAk9IGNfc3RhcnQsCiAJLm5leHQJPSBjX25leHQsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS90cmFuc21ldGEuYwppbmRleCAyMDBmYjNmLi5iOTExYTJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMKQEAgLTE4LDggKzE4LDggQEAKIAkvKiBQcmludCBDTVMgYW5kIENQVSByZXZpc2lvbiAqLwogCW1heCA9IGNwdWlkX2VheCgweDgwODYwMDAwKTsKIAljcHVfcmV2ID0gMDsKLQlpZiAoIG1heCA+PSAweDgwODYwMDAxICkgewotCQljcHVpZCgweDgwODYwMDAxLCAmZHVtbXksICZjcHVfcmV2LCAmY3B1X2ZyZXEsICZjcHVfZmxhZ3MpOyAKKwlpZiAobWF4ID49IDB4ODA4NjAwMDEpIHsKKwkJY3B1aWQoMHg4MDg2MDAwMSwgJmR1bW15LCAmY3B1X3JldiwgJmNwdV9mcmVxLCAmY3B1X2ZsYWdzKTsKIAkJaWYgKGNwdV9yZXYgIT0gMHgwMjAwMDAwMCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVOiBQcm9jZXNzb3IgcmV2aXNpb24gJXUuJXUuJXUuJXUsICV1IE1IelxuIiwKIAkJCQkoY3B1X3JldiA+PiAyNCkgJiAweGZmLApAQCAtMjksNyArMjksNyBAQAogCQkJCWNwdV9mcmVxKTsKIAkJfQogCX0KLQlpZiAoIG1heCA+PSAweDgwODYwMDAyICkgeworCWlmIChtYXggPj0gMHg4MDg2MDAwMikgewogCQljcHVpZCgweDgwODYwMDAyLCAmbmV3X2NwdV9yZXYsICZjbXNfcmV2MSwgJmNtc19yZXYyLCAmZHVtbXkpOwogCQlpZiAoY3B1X3JldiA9PSAweDAyMDAwMDAwKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJDUFU6IFByb2Nlc3NvciByZXZpc2lvbiAlMDhYLCAldSBNSHpcbiIsCkBAIC00Miw3ICs0Miw3IEBACiAJCSAgICAgICBjbXNfcmV2MSAmIDB4ZmYsCiAJCSAgICAgICBjbXNfcmV2Mik7CiAJfQotCWlmICggbWF4ID49IDB4ODA4NjAwMDYgKSB7CisJaWYgKG1heCA+PSAweDgwODYwMDA2KSB7CiAJCWNwdWlkKDB4ODA4NjAwMDMsCiAJCSAgICAgICh2b2lkICopJmNwdV9pbmZvWzBdLAogCQkgICAgICAodm9pZCAqKSZjcHVfaW5mb1s0XSwKQEAgLTc0LDMwICs3NCwyNSBAQAogCXdybXNyKDB4ODA4NjAwMDQsIGNhcF9tYXNrLCB1ayk7CiAKIAkvKiBBbGwgVHJhbnNtZXRhIENQVXMgaGF2ZSBhIGNvbnN0YW50IFRTQyAqLwotCXNldF9iaXQoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDLCBjLT54ODZfY2FwYWJpbGl0eSk7Ci0JCi0JLyogSWYgd2UgY2FuIHJ1biBpNjg2IHVzZXItc3BhY2UgY29kZSwgY2FsbCB1cyBhbiBpNjg2ICovCi0jZGVmaW5lIFVTRVI2ODYgKCgxIDw8IFg4Nl9GRUFUVVJFX1RTQyl8XAotCQkgKDEgPDwgWDg2X0ZFQVRVUkVfQ1g4KXxcCi0JCSAoMSA8PCBYODZfRkVBVFVSRV9DTU9WKSkKLSAgICAgICAgaWYgKGMtPng4NiA9PSA1ICYmIChjLT54ODZfY2FwYWJpbGl0eVswXSAmIFVTRVI2ODYpID09IFVTRVI2ODYpCi0JCWMtPng4NiA9IDY7CisJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLQkvKiByYW5kb21pemVfdmFfc3BhY2Ugc2xvd3MgdXMgZG93biBlbm9ybW91c2x5OwotCSAgIGl0IHByb2JhYmx5IHRyaWdnZXJzIHJldHJhbnNsYXRpb24gb2YgeDg2LT5uYXRpdmUgYnl0ZWNvZGUgKi8KKwkvKgorCSAqIHJhbmRvbWl6ZV92YV9zcGFjZSBzbG93cyB1cyBkb3duIGVub3Jtb3VzbHk7CisJICogaXQgcHJvYmFibHkgdHJpZ2dlcnMgcmV0cmFuc2xhdGlvbiBvZiB4ODYtPm5hdGl2ZSBieXRlY29kZQorCSAqLwogCXJhbmRvbWl6ZV92YV9zcGFjZSA9IDA7CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHRyYW5zbWV0YV9pZGVudGlmeShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHRyYW5zbWV0YV9pZGVudGlmeShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdTMyIHhsdmw7CiAKIAkvKiBUcmFuc21ldGEtZGVmaW5lZCBmbGFnczogbGV2ZWwgMHg4MDg2MDAwMSAqLwogCXhsdmwgPSBjcHVpZF9lYXgoMHg4MDg2MDAwMCk7Ci0JaWYgKCAoeGx2bCAmIDB4ZmZmZjAwMDApID09IDB4ODA4NjAwMDAgKSB7Ci0JCWlmICggIHhsdmwgPj0gMHg4MDg2MDAwMSApCisJaWYgKCh4bHZsICYgMHhmZmZmMDAwMCkgPT0gMHg4MDg2MDAwMCkgeworCQlpZiAoeGx2bCA+PSAweDgwODYwMDAxKQogCQkJYy0+eDg2X2NhcGFiaWxpdHlbMl0gPSBjcHVpZF9lZHgoMHg4MDg2MDAwMSk7CiAJfQogfQpAQCAtMTA5LDggKzEwNCw0IEBACiAJLmNfaWRlbnRpZnkJPSB0cmFuc21ldGFfaWRlbnRpZnksCiB9OwogCi1pbnQgX19pbml0IHRyYW5zbWV0YV9pbml0X2NwdSh2b2lkKQotewotCWNwdV9kZXZzW1g4Nl9WRU5ET1JfVFJBTlNNRVRBXSA9ICZ0cmFuc21ldGFfY3B1X2RldjsKLQlyZXR1cm4gMDsKLX0KK2NwdV92ZW5kb3JfZGV2X3JlZ2lzdGVyKFg4Nl9WRU5ET1JfVFJBTlNNRVRBLCAmdHJhbnNtZXRhX2NwdV9kZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdW1jLmMKaW5kZXggYTdhNGU3NS4uYjFmYzkwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3VtYy5jCkBAIC0zLDI0ICszLDIzIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgImNwdS5oIgogCi0vKiBVTUMgY2hpcHMgYXBwZWFyIHRvIGJlIG9ubHkgZWl0aGVyIDM4NiBvciA0ODYsIHNvIG5vIHNwZWNpYWwgaW5pdCB0YWtlcyBwbGFjZS4KKy8qCisgKiBVTUMgY2hpcHMgYXBwZWFyIHRvIGJlIG9ubHkgZWl0aGVyIDM4NiBvciA0ODYsCisgKiBzbyBubyBzcGVjaWFsIGluaXQgdGFrZXMgcGxhY2UuCiAgKi8KIAogc3RhdGljIHN0cnVjdCBjcHVfZGV2IHVtY19jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CiAJLmNfdmVuZG9yCT0gIlVNQyIsCi0JLmNfaWRlbnQgCT0geyAiVU1DIFVNQyBVTUMiIH0sCisJLmNfaWRlbnQJPSB7ICJVTUMgVU1DIFVNQyIgfSwKIAkuY19tb2RlbHMgPSB7CiAJCXsgLnZlbmRvciA9IFg4Nl9WRU5ET1JfVU1DLCAuZmFtaWx5ID0gNCwgLm1vZGVsX25hbWVzID0KLQkJICB7IAotCQkJICBbMV0gPSAiVTVEIiwgCi0JCQkgIFsyXSA9ICJVNVMiLCAKKwkJICB7CisJCQkgIFsxXSA9ICJVNUQiLAorCQkJICBbMl0gPSAiVTVTIiwKIAkJICB9CiAJCX0sCiAJfSwKIH07CiAKLWludCBfX2luaXQgdW1jX2luaXRfY3B1KHZvaWQpCi17Ci0JY3B1X2RldnNbWDg2X1ZFTkRPUl9VTUNdID0gJnVtY19jcHVfZGV2OwotCXJldHVybiAwOwotfQorY3B1X3ZlbmRvcl9kZXZfcmVnaXN0ZXIoWDg2X1ZFTkRPUl9VTUMsICZ1bWNfY3B1X2Rldik7CisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKaW5kZXggMjg4ZTdhNi4uZGFmZjUyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdWlkLmMKQEAgLTE1NCwxMiArMTU0LDEwIEBACiAJCWVyciA9IGNwdWlkX2RldmljZV9jcmVhdGUoY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgogCWNhc2UgQ1BVX0RFQUQ6CiAJCWNwdWlkX2RldmljZV9kZXN0cm95KGNwdSk7CiAJCWJyZWFrOwotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKLQkJZGVzdHJveV9zdXNwZW5kZWRfZGV2aWNlKGNwdWlkX2NsYXNzLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSk7Ci0JCWJyZWFrOwogCX0KIAlyZXR1cm4gZXJyID8gTk9USUZZX0JBRCA6IE5PVElGWV9PSzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaC5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKaW5kZXggOWE1ZmEwYS4uMjI1MWQwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKQEAgLTI2LDExICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9tYWNoX2FwaWMuaD4KLSNlbmRpZgogCiAvKiBUaGlzIGtlZXBzIGEgdHJhY2sgb2Ygd2hpY2ggb25lIGlzIGNyYXNoaW5nIGNwdS4gKi8KIHN0YXRpYyBpbnQgY3Jhc2hpbmdfY3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2RzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHMuYwppbmRleCBkY2Q5MThjLi4xMWMxMWI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHMuYwpAQCAtMjIwLDExICsyMjAsMTEgQEAKIAogaW50IGRzX2ZyZWUodm9pZCAqKmRzcCkKIHsKLQlpZiAoKmRzcCkKKwlpZiAoKmRzcCkgewogCQlrZnJlZSgodm9pZCAqKWdldF9idHNfYnVmZmVyX2Jhc2UoKmRzcCkpOwotCWtmcmVlKCpkc3ApOwotCSpkc3AgPSBOVUxMOwotCisJCWtmcmVlKCpkc3ApOworCQkqZHNwID0gTlVMTDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMF8zMi5jCmluZGV4IDRlMTZlZjQuLmVkNzMzZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjBfMzIuYwpAQCAtNDUwLDQ1ICs0NTAsMzIgQEAKICAqIHRoaW5rcGFkIDU2MHgsIGZvciBleGFtcGxlLCBkb2VzIG5vdCBjb29wZXJhdGUgd2l0aCB0aGUgbWVtb3J5CiAgKiBkZXRlY3Rpb24gY29kZS4pCiAgKi8KLWludCBfX2luaXQgY29weV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICogYmlvc21hcCwgaW50IG5yX21hcCkKK2ludCBfX2luaXQgY29weV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICpiaW9zbWFwLCBpbnQgbnJfbWFwKQogewogCS8qIE9ubHkgb25lIG1lbW9yeSByZWdpb24gKG9yIG5lZ2F0aXZlKT8gSWdub3JlIGl0ICovCiAJaWYgKG5yX21hcCA8IDIpCiAJCXJldHVybiAtMTsKIAogCWRvIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0ID0gYmlvc21hcC0+YWRkcjsKLQkJdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSBiaW9zbWFwLT5zaXplOwotCQl1bnNpZ25lZCBsb25nIGxvbmcgZW5kID0gc3RhcnQgKyBzaXplOwotCQl1bnNpZ25lZCBsb25nIHR5cGUgPSBiaW9zbWFwLT50eXBlOworCQl1NjQgc3RhcnQgPSBiaW9zbWFwLT5hZGRyOworCQl1NjQgc2l6ZSA9IGJpb3NtYXAtPnNpemU7CisJCXU2NCBlbmQgPSBzdGFydCArIHNpemU7CisJCXUzMiB0eXBlID0gYmlvc21hcC0+dHlwZTsKIAogCQkvKiBPdmVyZmxvdyBpbiA2NCBiaXRzPyBJZ25vcmUgdGhlIG1lbW9yeSBtYXAuICovCiAJCWlmIChzdGFydCA+IGVuZCkKIAkJCXJldHVybiAtMTsKIAotCQkvKgotCQkgKiBTb21lIEJJT1NlcyBjbGFpbSBSQU0gaW4gdGhlIDY0MGsgLSAxTSByZWdpb24uCi0JCSAqIE5vdCByaWdodC4gRml4IGl0IHVwLgotCQkgKi8KLQkJaWYgKHR5cGUgPT0gRTgyMF9SQU0pIHsKLQkJCWlmIChzdGFydCA8IDB4MTAwMDAwVUxMICYmIGVuZCA+IDB4QTAwMDBVTEwpIHsKLQkJCQlpZiAoc3RhcnQgPCAweEEwMDAwVUxMKQotCQkJCQlhZGRfbWVtb3J5X3JlZ2lvbihzdGFydCwgMHhBMDAwMFVMTC1zdGFydCwgdHlwZSk7Ci0JCQkJaWYgKGVuZCA8PSAweDEwMDAwMFVMTCkKLQkJCQkJY29udGludWU7Ci0JCQkJc3RhcnQgPSAweDEwMDAwMFVMTDsKLQkJCQlzaXplID0gZW5kIC0gc3RhcnQ7Ci0JCQl9Ci0JCX0KIAkJYWRkX21lbW9yeV9yZWdpb24oc3RhcnQsIHNpemUsIHR5cGUpOwotCX0gd2hpbGUgKGJpb3NtYXArKywtLW5yX21hcCk7CisJfSB3aGlsZSAoYmlvc21hcCsrLCAtLW5yX21hcCk7CisKIAlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEZpbmQgdGhlIGhpZ2hlc3QgcGFnZSBmcmFtZSBudW1iZXIgd2UgaGF2ZSBhdmFpbGFibGUKICAqLwotdm9pZCBfX2luaXQgZmluZF9tYXhfcGZuKHZvaWQpCit2b2lkIF9faW5pdCBwcm9wYWdhdGVfZTgyMF9tYXAodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtNzE3LDcgKzcwNCw3IEBACiAJCSAqIHNpemUgYmVmb3JlIG9yaWdpbmFsIG1lbW9yeSBtYXAgaXMKIAkJICogcmVzZXQuCiAJCSAqLwotCQlmaW5kX21heF9wZm4oKTsKKwkJcHJvcGFnYXRlX2U4MjBfbWFwKCk7CiAJCXNhdmVkX21heF9wZm4gPSBtYXhfcGZuOwogI2VuZGlmCiAJCWU4MjAubnJfbWFwID0gMDsKQEAgLTc0OSw2ICs3MzYsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X3BhcmFtKCJtZW1tYXAiLCBwYXJzZV9tZW1tYXApOwordm9pZCBfX2luaXQgdXBkYXRlX21lbW9yeV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKKwkJCQl1bnNpZ25lZCBuZXdfdHlwZSkKK3sKKwlpbnQgaTsKKworCUJVR19PTihvbGRfdHlwZSA9PSBuZXdfdHlwZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJdTY0IGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJCWlmIChlaS0+dHlwZSAhPSBvbGRfdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiB0b3RhbGx5IGNvdmVyZWQ/ICovCisJCWlmIChlaS0+YWRkciA+PSBzdGFydCAmJiBlaS0+c2l6ZSA8PSBzaXplKSB7CisJCQllaS0+dHlwZSA9IG5ld190eXBlOworCQkJY29udGludWU7CisJCX0KKwkJLyogcGFydGlhbGx5IGNvdmVyZWQgKi8KKwkJZmluYWxfc3RhcnQgPSBtYXgoc3RhcnQsIGVpLT5hZGRyKTsKKwkJZmluYWxfZW5kID0gbWluKHN0YXJ0ICsgc2l6ZSwgZWktPmFkZHIgKyBlaS0+c2l6ZSk7CisJCWlmIChmaW5hbF9zdGFydCA+PSBmaW5hbF9lbmQpCisJCQljb250aW51ZTsKKwkJYWRkX21lbW9yeV9yZWdpb24oZmluYWxfc3RhcnQsIGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0LAorCQkJCQkgbmV3X3R5cGUpOworCX0KK30KIHZvaWQgX19pbml0IHVwZGF0ZV9lODIwKHZvaWQpCiB7CiAJdTggbnJfbWFwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwXzY0LmMKaW5kZXggOWY2NWI0Yy4uY2JkNDJlNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMF82NC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CiAKIHN0cnVjdCBlODIwbWFwIGU4MjA7CiAKQEAgLTM2LDExICszNywxMSBAQAogdW5zaWduZWQgbG9uZyBlbmRfcGZuOwogCiAvKgotICogZW5kX3BmbiBvbmx5IGluY2x1ZGVzIFJBTSwgd2hpbGUgZW5kX3Bmbl9tYXAgaW5jbHVkZXMgYWxsIGU4MjAgZW50cmllcy4KLSAqIFRoZSBkaXJlY3QgbWFwcGluZyBleHRlbmRzIHRvIGVuZF9wZm5fbWFwLCBzbyB0aGF0IHdlIGNhbiBkaXJlY3RseSBhY2Nlc3MKKyAqIGVuZF9wZm4gb25seSBpbmNsdWRlcyBSQU0sIHdoaWxlIG1heF9wZm5fbWFwcGVkIGluY2x1ZGVzIGFsbCBlODIwIGVudHJpZXMuCisgKiBUaGUgZGlyZWN0IG1hcHBpbmcgZXh0ZW5kcyB0byBtYXhfcGZuX21hcHBlZCwgc28gdGhhdCB3ZSBjYW4gZGlyZWN0bHkgYWNjZXNzCiAgKiBhcGVydHVyZXMsIEFDUEkgYW5kIG90aGVyIHRhYmxlcyB3aXRob3V0IGhhdmluZyB0byBwbGF5IHdpdGggZml4bWFwcy4KICAqLwotdW5zaWduZWQgbG9uZyBlbmRfcGZuX21hcDsKK3Vuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CiAKIC8qCiAgKiBMYXN0IHBmbiB3aGljaCB0aGUgdXNlciB3YW50cyB0byB1c2UuCkBAIC01OCw4ICs1OSw4IEBACiB9Owogc3RhdGljIHN0cnVjdCBlYXJseV9yZXMgZWFybHlfcmVzW01BWF9FQVJMWV9SRVNdIF9faW5pdGRhdGEgPSB7CiAJeyAwLCBQQUdFX1NJWkUsICJCSU9TIGRhdGEgcGFnZSIgfSwJCQkvKiBCSU9TIGRhdGEgcGFnZSAqLwotI2lmZGVmIENPTkZJR19TTVAKLQl7IFNNUF9UUkFNUE9MSU5FX0JBU0UsIFNNUF9UUkFNUE9MSU5FX0JBU0UgKyAyKlBBR0VfU0laRSwgIlNNUF9UUkFNUE9MSU5FIiB9LAorI2lmZGVmIENPTkZJR19YODZfVFJBTVBPTElORQorCXsgVFJBTVBPTElORV9CQVNFLCBUUkFNUE9MSU5FX0JBU0UgKyAyICogUEFHRV9TSVpFLCAiVFJBTVBPTElORSIgfSwKICNlbmRpZgogCXt9CiB9OwpAQCAtOTUsNyArOTYsOCBAQAogfQogCiAvKiBDaGVjayBmb3IgYWxyZWFkeSByZXNlcnZlZCBhcmVhcyAqLwotc3RhdGljIGlubGluZSBpbnQgYmFkX2FkZHIodW5zaWduZWQgbG9uZyAqYWRkcnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAorYmFkX2FkZHIodW5zaWduZWQgbG9uZyAqYWRkcnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAqYWRkcnAsIGxhc3Q7CkBAIC0xMDUsNyArMTA3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0VBUkxZX1JFUyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspIHsKIAkJc3RydWN0IGVhcmx5X3JlcyAqciA9ICZlYXJseV9yZXNbaV07CiAJCWlmIChsYXN0ID49IHItPnN0YXJ0ICYmIGFkZHIgPCByLT5lbmQpIHsKLQkJCSphZGRycCA9IGFkZHIgPSByLT5lbmQ7CisJCQkqYWRkcnAgPSBhZGRyID0gcm91bmRfdXAoci0+ZW5kLCBhbGlnbik7CiAJCQljaGFuZ2VkID0gMTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KQEAgLTExMyw2ICsxMTUsNDAgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAorLyogQ2hlY2sgZm9yIGFscmVhZHkgcmVzZXJ2ZWQgYXJlYXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAorYmFkX2FkZHJfc2l6ZSh1bnNpZ25lZCBsb25nICphZGRycCwgdW5zaWduZWQgbG9uZyAqc2l6ZXAsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKmFkZHJwLCBsYXN0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9ICpzaXplcDsKKwlpbnQgY2hhbmdlZCA9IDA7CithZ2FpbjoKKwlsYXN0ID0gYWRkciArIHNpemU7CisJZm9yIChpID0gMDsgaSA8IE1BWF9FQVJMWV9SRVMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKSB7CisJCXN0cnVjdCBlYXJseV9yZXMgKnIgPSAmZWFybHlfcmVzW2ldOworCQlpZiAobGFzdCA+IHItPnN0YXJ0ICYmIGFkZHIgPCByLT5zdGFydCkgeworCQkJc2l6ZSA9IHItPnN0YXJ0IC0gYWRkcjsKKwkJCWNoYW5nZWQgPSAxOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlpZiAobGFzdCA+IHItPmVuZCAmJiBhZGRyIDwgci0+ZW5kKSB7CisJCQlhZGRyID0gcm91bmRfdXAoci0+ZW5kLCBhbGlnbik7CisJCQlzaXplID0gbGFzdCAtIGFkZHI7CisJCQljaGFuZ2VkID0gMTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJaWYgKGxhc3QgPD0gci0+ZW5kICYmIGFkZHIgPj0gci0+c3RhcnQpIHsKKwkJCSgqc2l6ZXApKys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoY2hhbmdlZCkgeworCQkqYWRkcnAgPSBhZGRyOworCQkqc2l6ZXAgPSBzaXplOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhbnkgcGFydCBvZiB0aGUgcmFuZ2UgPHN0YXJ0LGVuZD4gaXMgbWFwcGVkCiAgKiB3aXRoIHR5cGUuCkBAIC0xNzQsMjYgKzIxMCwyNyBAQAogICogRmluZCBhIGZyZWUgYXJlYSB3aXRoIHNwZWNpZmllZCBhbGlnbm1lbnQgaW4gYSBzcGVjaWZpYyByYW5nZS4KICAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQgZmluZF9lODIwX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJICAgIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSB+KGFsaWduIC0gMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewogCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKLQkJdW5zaWduZWQgbG9uZyBhZGRyID0gZWktPmFkZHIsIGxhc3Q7CisJCXVuc2lnbmVkIGxvbmcgYWRkciwgbGFzdDsKKwkJdW5zaWduZWQgbG9uZyBlaV9sYXN0OwogCiAJCWlmIChlaS0+dHlwZSAhPSBFODIwX1JBTSkKIAkJCWNvbnRpbnVlOworCQlhZGRyID0gcm91bmRfdXAoZWktPmFkZHIsIGFsaWduKTsKKwkJZWlfbGFzdCA9IGVpLT5hZGRyICsgZWktPnNpemU7CiAJCWlmIChhZGRyIDwgc3RhcnQpCi0JCQlhZGRyID0gc3RhcnQ7Ci0JCWlmIChhZGRyID4gZWktPmFkZHIgKyBlaS0+c2l6ZSkKKwkJCWFkZHIgPSByb3VuZF91cChzdGFydCwgYWxpZ24pOworCQlpZiAoYWRkciA+PSBlaV9sYXN0KQogCQkJY29udGludWU7Ci0JCXdoaWxlIChiYWRfYWRkcigmYWRkciwgc2l6ZSkgJiYgYWRkcitzaXplIDw9IGVpLT5hZGRyK2VpLT5zaXplKQorCQl3aGlsZSAoYmFkX2FkZHIoJmFkZHIsIHNpemUsIGFsaWduKSAmJiBhZGRyK3NpemUgPD0gZWlfbGFzdCkKIAkJCTsKLQkJYWRkciA9IChhZGRyICsgYWxpZ24gLSAxKSAmIG1hc2s7CiAJCWxhc3QgPSBhZGRyICsgc2l6ZTsKLQkJaWYgKGxhc3QgPiBlaS0+YWRkciArIGVpLT5zaXplKQorCQlpZiAobGFzdCA+IGVpX2xhc3QpCiAJCQljb250aW51ZTsKIAkJaWYgKGxhc3QgPiBlbmQpCiAJCQljb250aW51ZTsKQEAgLTIwMyw2ICsyNDAsNDAgQEAKIH0KIAogLyoKKyAqIEZpbmQgbmV4dCBmcmVlIHJhbmdlIGFmdGVyICpzdGFydAorICovCit1bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2U4MjBfYXJlYV9zaXplKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSB1bnNpZ25lZCBsb25nICpzaXplcCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBsYXN0OworCQl1bnNpZ25lZCBsb25nIGVpX2xhc3Q7CisKKwkJaWYgKGVpLT50eXBlICE9IEU4MjBfUkFNKQorCQkJY29udGludWU7CisJCWFkZHIgPSByb3VuZF91cChlaS0+YWRkciwgYWxpZ24pOworCQllaV9sYXN0ID0gZWktPmFkZHIgKyBlaS0+c2l6ZTsKKwkJaWYgKGFkZHIgPCBzdGFydCkKKwkJCWFkZHIgPSByb3VuZF91cChzdGFydCwgYWxpZ24pOworCQlpZiAoYWRkciA+PSBlaV9sYXN0KQorCQkJY29udGludWU7CisJCSpzaXplcCA9IGVpX2xhc3QgLSBhZGRyOworCQl3aGlsZSAoYmFkX2FkZHJfc2l6ZSgmYWRkciwgc2l6ZXAsIGFsaWduKSAmJgorCQkJYWRkciArICpzaXplcCA8PSBlaV9sYXN0KQorCQkJOworCQlsYXN0ID0gYWRkciArICpzaXplcDsKKwkJaWYgKGxhc3QgPiBlaV9sYXN0KQorCQkJY29udGludWU7CisJCXJldHVybiBhZGRyOworCX0KKwlyZXR1cm4gLTFVTDsKKworfQorLyoKICAqIEZpbmQgdGhlIGhpZ2hlc3QgcGFnZSBmcmFtZSBudW1iZXIgd2UgaGF2ZSBhdmFpbGFibGUKICAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQgZTgyMF9lbmRfb2ZfcmFtKHZvaWQpCkBAIC0yMTEsMjkgKzI4MiwyOSBAQAogCiAJZW5kX3BmbiA9IGZpbmRfbWF4X3Bmbl93aXRoX2FjdGl2ZV9yZWdpb25zKCk7CiAKLQlpZiAoZW5kX3BmbiA+IGVuZF9wZm5fbWFwKQotCQllbmRfcGZuX21hcCA9IGVuZF9wZm47Ci0JaWYgKGVuZF9wZm5fbWFwID4gTUFYTUVNPj5QQUdFX1NISUZUKQotCQllbmRfcGZuX21hcCA9IE1BWE1FTT4+UEFHRV9TSElGVDsKKwlpZiAoZW5kX3BmbiA+IG1heF9wZm5fbWFwcGVkKQorCQltYXhfcGZuX21hcHBlZCA9IGVuZF9wZm47CisJaWYgKG1heF9wZm5fbWFwcGVkID4gTUFYTUVNPj5QQUdFX1NISUZUKQorCQltYXhfcGZuX21hcHBlZCA9IE1BWE1FTT4+UEFHRV9TSElGVDsKIAlpZiAoZW5kX3BmbiA+IGVuZF91c2VyX3BmbikKIAkJZW5kX3BmbiA9IGVuZF91c2VyX3BmbjsKLQlpZiAoZW5kX3BmbiA+IGVuZF9wZm5fbWFwKQotCQllbmRfcGZuID0gZW5kX3Bmbl9tYXA7CisJaWYgKGVuZF9wZm4gPiBtYXhfcGZuX21hcHBlZCkKKwkJZW5kX3BmbiA9IG1heF9wZm5fbWFwcGVkOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiZW5kX3Bmbl9tYXAgPSAlbHVcbiIsIGVuZF9wZm5fbWFwKTsKKwlwcmludGsoS0VSTl9JTkZPICJtYXhfcGZuX21hcHBlZCA9ICVsdVxuIiwgbWF4X3Bmbl9tYXBwZWQpOwogCXJldHVybiBlbmRfcGZuOwogfQogCiAvKgogICogTWFyayBlODIwIHJlc2VydmVkIGFyZWFzIGFzIGJ1c3kgZm9yIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogICovCi12b2lkIF9faW5pdCBlODIwX3Jlc2VydmVfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqY29kZV9yZXNvdXJjZSwKLQkJc3RydWN0IHJlc291cmNlICpkYXRhX3Jlc291cmNlLCBzdHJ1Y3QgcmVzb3VyY2UgKmJzc19yZXNvdXJjZSkKK3ZvaWQgX19pbml0IGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXModm9pZCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJlcyA9IGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogZTgyMC5ucl9tYXApOwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCQlyZXMgPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiAJCXN3aXRjaCAoZTgyMC5tYXBbaV0udHlwZSkgewogCQljYXNlIEU4MjBfUkFNOglyZXMtPm5hbWUgPSAiU3lzdGVtIFJBTSI7IGJyZWFrOwogCQljYXNlIEU4MjBfQUNQSToJcmVzLT5uYW1lID0gIkFDUEkgVGFibGVzIjsgYnJlYWs7CkBAIC0yNDMsMjEgKzMxNCw4IEBACiAJCXJlcy0+c3RhcnQgPSBlODIwLm1hcFtpXS5hZGRyOwogCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyBlODIwLm1hcFtpXS5zaXplIC0gMTsKIAkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwotCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKLQkJaWYgKGU4MjAubWFwW2ldLnR5cGUgPT0gRTgyMF9SQU0pIHsKLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBrbm93IHdoaWNoIFJBTSByZWdpb24gY29udGFpbnMga2VybmVsIGRhdGEsCi0JCQkgKiBzbyB3ZSB0cnkgaXQgcmVwZWF0ZWRseSBhbmQgbGV0IHRoZSByZXNvdXJjZSBtYW5hZ2VyCi0JCQkgKiB0ZXN0IGl0LgotCQkJICovCi0JCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgY29kZV9yZXNvdXJjZSk7Ci0JCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgZGF0YV9yZXNvdXJjZSk7Ci0JCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgYnNzX3Jlc291cmNlKTsKLSNpZmRlZiBDT05GSUdfS0VYRUMKLQkJCWlmIChjcmFzaGtfcmVzLnN0YXJ0ICE9IGNyYXNoa19yZXMuZW5kKQotCQkJCXJlcXVlc3RfcmVzb3VyY2UocmVzLCAmY3Jhc2hrX3Jlcyk7Ci0jZW5kaWYKLQkJfQorCQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpOworCQlyZXMrKzsKIAl9CiB9CiAKQEAgLTMwOSw5ICszNjcsOSBAQAogCWlmICgqZWlfc3RhcnRwZm4gPj0gKmVpX2VuZHBmbikKIAkJcmV0dXJuIDA7CiAKLQkvKiBDaGVjayBpZiBlbmRfcGZuX21hcCBzaG91bGQgYmUgdXBkYXRlZCAqLwotCWlmIChlaS0+dHlwZSAhPSBFODIwX1JBTSAmJiAqZWlfZW5kcGZuID4gZW5kX3Bmbl9tYXApCi0JCWVuZF9wZm5fbWFwID0gKmVpX2VuZHBmbjsKKwkvKiBDaGVjayBpZiBtYXhfcGZuX21hcHBlZCBzaG91bGQgYmUgdXBkYXRlZCAqLworCWlmIChlaS0+dHlwZSAhPSBFODIwX1JBTSAmJiAqZWlfZW5kcGZuID4gbWF4X3Bmbl9tYXBwZWQpCisJCW1heF9wZm5fbWFwcGVkID0gKmVpX2VuZHBmbjsKIAogCS8qIFNraXAgaWYgbWFwIGlzIG91dHNpZGUgdGhlIG5vZGUgKi8KIAlpZiAoZWktPnR5cGUgIT0gRTgyMF9SQU0gfHwgKmVpX2VuZHBmbiA8PSBzdGFydF9wZm4gfHwKQEAgLTYzNCwxMCArNjkyLDEwIEBACiAJCXJldHVybiAtMTsKIAogCWRvIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IGJpb3NtYXAtPmFkZHI7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGJpb3NtYXAtPnNpemU7Ci0JCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBzaXplOwotCQl1bnNpZ25lZCBsb25nIHR5cGUgPSBiaW9zbWFwLT50eXBlOworCQl1NjQgc3RhcnQgPSBiaW9zbWFwLT5hZGRyOworCQl1NjQgc2l6ZSA9IGJpb3NtYXAtPnNpemU7CisJCXU2NCBlbmQgPSBzdGFydCArIHNpemU7CisJCXUzMiB0eXBlID0gYmlvc21hcC0+dHlwZTsKIAogCQkvKiBPdmVyZmxvdyBpbiA2NCBiaXRzPyBJZ25vcmUgdGhlIG1lbW9yeSBtYXAuICovCiAJCWlmIChzdGFydCA+IGVuZCkKQEAgLTcwMiw3ICs3NjAsNyBAQAogCQlzYXZlZF9tYXhfcGZuID0gZTgyMF9lbmRfb2ZfcmFtKCk7CiAJCXJlbW92ZV9hbGxfYWN0aXZlX3JhbmdlcygpOwogI2VuZGlmCi0JCWVuZF9wZm5fbWFwID0gMDsKKwkJbWF4X3Bmbl9tYXBwZWQgPSAwOwogCQllODIwLm5yX21hcCA9IDA7CiAJCXVzZXJkZWYgPSAxOwogCQlyZXR1cm4gMDsKQEAgLTc0NCw2ICs4MDIsMzMgQEAKIAl9CiB9CiAKK3ZvaWQgX19pbml0IHVwZGF0ZV9tZW1vcnlfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCisJCQkJdW5zaWduZWQgbmV3X3R5cGUpCit7CisJaW50IGk7CisKKwlCVUdfT04ob2xkX3R5cGUgPT0gbmV3X3R5cGUpOworCisJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKKwkJc3RydWN0IGU4MjBlbnRyeSAqZWkgPSAmZTgyMC5tYXBbaV07CisJCXU2NCBmaW5hbF9zdGFydCwgZmluYWxfZW5kOworCQlpZiAoZWktPnR5cGUgIT0gb2xkX3R5cGUpCisJCQljb250aW51ZTsKKwkJLyogdG90YWxseSBjb3ZlcmVkPyAqLworCQlpZiAoZWktPmFkZHIgPj0gc3RhcnQgJiYgZWktPnNpemUgPD0gc2l6ZSkgeworCQkJZWktPnR5cGUgPSBuZXdfdHlwZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIHBhcnRpYWxseSBjb3ZlcmVkICovCisJCWZpbmFsX3N0YXJ0ID0gbWF4KHN0YXJ0LCBlaS0+YWRkcik7CisJCWZpbmFsX2VuZCA9IG1pbihzdGFydCArIHNpemUsIGVpLT5hZGRyICsgZWktPnNpemUpOworCQlpZiAoZmluYWxfc3RhcnQgPj0gZmluYWxfZW5kKQorCQkJY29udGludWU7CisJCWFkZF9tZW1vcnlfcmVnaW9uKGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydCwKKwkJCQkJIG5ld190eXBlKTsKKwl9Cit9CisKIHZvaWQgX19pbml0IHVwZGF0ZV9lODIwKHZvaWQpCiB7CiAJdTggbnJfbWFwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IGNmZjg0Y2QuLjY0M2ZkODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNkZWZpbmUgVkdBQkFTRQkJKF9fSVNBX0lPX2Jhc2UgKyAweGI4MDAwKQogCiBzdGF0aWMgaW50IG1heF95cG9zID0gMjUsIG1heF94cG9zID0gODA7Ci1zdGF0aWMgaW50IGN1cnJlbnRfeXBvcyA9IDI1LCBjdXJyZW50X3hwb3MgPSAwOworc3RhdGljIGludCBjdXJyZW50X3lwb3MgPSAyNSwgY3VycmVudF94cG9zOwogCiBzdGF0aWMgdm9pZCBlYXJseV92Z2Ffd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBuKQogewpAQCAtMTA4LDEyICsxMDgsMTIgQEAKIAogCWlmICgqcykgewogCQl1bnNpZ25lZCBwb3J0OwotCQlpZiAoIXN0cm5jbXAocywiMHgiLDIpKSB7CisJCWlmICghc3RybmNtcChzLCAiMHgiLCAyKSkgewogCQkJZWFybHlfc2VyaWFsX2Jhc2UgPSBzaW1wbGVfc3RydG91bChzLCAmZSwgMTYpOwogCQl9IGVsc2UgewogCQkJc3RhdGljIGludCBiYXNlc1tdID0geyAweDNmOCwgMHgyZjggfTsKIAotCQkJaWYgKCFzdHJuY21wKHMsInR0eVMiLDQpKQorCQkJaWYgKCFzdHJuY21wKHMsICJ0dHlTIiwgNCkpCiAJCQkJcyArPSA0OwogCQkJcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKHMsICZlLCAxMCk7CiAJCQlpZiAocG9ydCA+IDEgfHwgcyA9PSBlKQpAQCAtMTk0LDcgKzE5NCw3IEBACiAKIC8qIERpcmVjdCBpbnRlcmZhY2UgZm9yIGVtZXJnZW5jaWVzICovCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGUgPSAmZWFybHlfdmdhX2NvbnNvbGU7Ci1zdGF0aWMgaW50IGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgPSAwOworc3RhdGljIGludCBlYXJseV9jb25zb2xlX2luaXRpYWxpemVkOwogCiB2b2lkIGVhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKQEAgLTIwMiw5ICsyMDIsOSBAQAogCWludCBuOwogCXZhX2xpc3QgYXA7CiAKLQl2YV9zdGFydChhcCxmbXQpOwotCW4gPSB2c2NucHJpbnRmKGJ1Ziw1MTIsZm10LGFwKTsKLQllYXJseV9jb25zb2xlLT53cml0ZShlYXJseV9jb25zb2xlLGJ1ZixuKTsKKwl2YV9zdGFydChhcCwgZm10KTsKKwluID0gdnNjbnByaW50ZihidWYsIDUxMiwgZm10LCBhcCk7CisJZWFybHlfY29uc29sZS0+d3JpdGUoZWFybHlfY29uc29sZSwgYnVmLCBuKTsKIAl2YV9lbmQoYXApOwogfQogCkBAIC0yMjksMTUgKzIyOSwxNSBAQAogCQllYXJseV9zZXJpYWxfaW5pdChidWYpOwogCQllYXJseV9jb25zb2xlID0gJmVhcmx5X3NlcmlhbF9jb25zb2xlOwogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAidmdhIiwgMykKLQkgICAgICAgICAgICYmIGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgPT0gMSkgeworCQkmJiBib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID09IDEpIHsKIAkJbWF4X3hwb3MgPSBib290X3BhcmFtcy5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX2NvbHM7CiAJCW1heF95cG9zID0gYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ192aWRlb19saW5lczsKIAkJY3VycmVudF95cG9zID0gYm9vdF9wYXJhbXMuc2NyZWVuX2luZm8ub3JpZ195OwogCQllYXJseV9jb25zb2xlID0gJmVhcmx5X3ZnYV9jb25zb2xlOwotIAl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInNpbW5vdyIsIDYpKSB7Ci0gCQlzaW1ub3dfaW5pdChidWYgKyA2KTsKLSAJCWVhcmx5X2NvbnNvbGUgPSAmc2ltbm93X2NvbnNvbGU7Ci0gCQlrZWVwX2Vhcmx5ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInNpbW5vdyIsIDYpKSB7CisJCXNpbW5vd19pbml0KGJ1ZiArIDYpOworCQllYXJseV9jb25zb2xlID0gJnNpbW5vd19jb25zb2xlOworCQlrZWVwX2Vhcmx5ID0gMTsKICNpZmRlZiBDT05GSUdfSFZDX1hFTgogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAieGVuIiwgMykpIHsKIAkJZWFybHlfY29uc29sZSA9ICZ4ZW5ib290X2NvbnNvbGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKaW5kZXggMGMwZWViMS4uNzdkNDI0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwpAQCAtNTQsNyArNTQsNyBAQAogCiBzdHJ1Y3QgZWZpX21lbW9yeV9tYXAgbWVtbWFwOwogCi1zdHJ1Y3QgZWZpIGVmaV9waHlzIF9faW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IGVmaSBlZmlfcGh5cyBfX2luaXRkYXRhOwogc3RhdGljIGVmaV9zeXN0ZW1fdGFibGVfdCBlZmlfc3lzdGFiIF9faW5pdGRhdGE7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX25vZWZpKGNoYXIgKmFyZykKQEAgLTM4Myw2ICszODMsNyBAQAogewogCWVmaV9tZW1vcnlfZGVzY190ICptZDsKIAl2b2lkICpwOworCXU2NCBhZGRyLCBucGFnZXM7CiAKIAkvKiBNYWtlIEVGSSBydW50aW1lIHNlcnZpY2UgY29kZSBhcmVhIGV4ZWN1dGFibGUgKi8KIAlmb3IgKHAgPSBtZW1tYXAubWFwOyBwIDwgbWVtbWFwLm1hcF9lbmQ7IHAgKz0gbWVtbWFwLmRlc2Nfc2l6ZSkgewpAQCAtMzkxLDcgKzM5MiwxMCBAQAogCQlpZiAobWQtPnR5cGUgIT0gRUZJX1JVTlRJTUVfU0VSVklDRVNfQ09ERSkKIAkJCWNvbnRpbnVlOwogCi0JCXNldF9tZW1vcnlfeChtZC0+dmlydF9hZGRyLCBtZC0+bnVtX3BhZ2VzKTsKKwkJYWRkciA9IG1kLT52aXJ0X2FkZHI7CisJCW5wYWdlcyA9IG1kLT5udW1fcGFnZXM7CisJCW1lbXJhbmdlX2VmaV90b19uYXRpdmUoJmFkZHIsICZucGFnZXMpOworCQlzZXRfbWVtb3J5X3goYWRkciwgbnBhZ2VzKTsKIAl9CiB9CiAKQEAgLTQwOCw3ICs0MTIsNyBAQAogCWVmaV9tZW1vcnlfZGVzY190ICptZDsKIAllZmlfc3RhdHVzX3Qgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1NjQgZW5kLCBzeXN0YWI7CisJdTY0IGVuZCwgc3lzdGFiLCBhZGRyLCBucGFnZXM7CiAJdm9pZCAqcCwgKnZhOwogCiAJZWZpLnN5c3RhYiA9IE5VTEw7CkBAIC00MjAsNyArNDI0LDcgQEAKIAkJc2l6ZSA9IG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQ7CiAJCWVuZCA9IG1kLT5waHlzX2FkZHIgKyBzaXplOwogCi0JCWlmICgoZW5kID4+IFBBR0VfU0hJRlQpIDw9IG1heF9wZm5fbWFwcGVkKQorCQlpZiAoUEZOX1VQKGVuZCkgPD0gbWF4X3Bmbl9tYXBwZWQpCiAJCQl2YSA9IF9fdmEobWQtPnBoeXNfYWRkcik7CiAJCWVsc2UKIAkJCXZhID0gZWZpX2lvcmVtYXAobWQtPnBoeXNfYWRkciwgc2l6ZSk7CkBAIC00MzMsOCArNDM3LDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghKG1kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1dCKSkKLQkJCXNldF9tZW1vcnlfdWMobWQtPnZpcnRfYWRkciwgbWQtPm51bV9wYWdlcyk7CisJCWlmICghKG1kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1dCKSkgeworCQkJYWRkciA9IG1kLT52aXJ0X2FkZHI7CisJCQlucGFnZXMgPSBtZC0+bnVtX3BhZ2VzOworCQkJbWVtcmFuZ2VfZWZpX3RvX25hdGl2ZSgmYWRkciwgJm5wYWdlcyk7CisJCQlzZXRfbWVtb3J5X3VjKGFkZHIsIG5wYWdlcyk7CisJCX0KIAogCQlzeXN0YWIgPSAodTY0KSAodW5zaWduZWQgbG9uZykgZWZpX3BoeXMuc3lzdGFiOwogCQlpZiAobWQtPnBoeXNfYWRkciA8PSBzeXN0YWIgJiYgc3lzdGFiIDwgZW5kKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpXzMyLmMKaW5kZXggY2I5MWY5OC4uNWQyM2Q4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmlfMzIuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZWZpLmg+CiAKIC8qCiAgKiBUbyBtYWtlIEVGSSBjYWxsIEVGSSBydW50aW1lIHNlcnZpY2UgaW4gcGh5c2ljYWwgYWRkcmVzc2luZyBtb2RlIHdlIG5lZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmlfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmlfNjQuYwppbmRleCBkMTQzYTFlLi5kMDA2MGZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaV82NC5jCkBAIC0xMDUsMTQgKzEwNSwxNCBAQAogCiB2b2lkIF9faW9tZW0gKiBfX2luaXQgZWZpX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlzdGF0aWMgdW5zaWduZWQgcGFnZXNfbWFwcGVkOworCXN0YXRpYyB1bnNpZ25lZCBwYWdlc19tYXBwZWQgX19pbml0ZGF0YTsKIAl1bnNpZ25lZCBpLCBwYWdlczsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAotCS8qIHBoeXNfYWRkciBhbmQgc2l6ZSBtdXN0IGJlIHBhZ2UgYWxpZ25lZCAqLwotCWlmICgocGh5c19hZGRyICYgflBBR0VfTUFTSykgfHwgKHNpemUgJiB+UEFHRV9NQVNLKSkKLQkJcmV0dXJuIE5VTEw7CisJcGFnZXMgPSBQRk5fVVAocGh5c19hZGRyICsgc2l6ZSkgLSBQRk5fRE9XTihwaHlzX2FkZHIpOworCW9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7CisJcGh5c19hZGRyICY9IFBBR0VfTUFTSzsKIAotCXBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwogCWlmIChwYWdlc19tYXBwZWQgKyBwYWdlcyA+IE1BWF9FRklfSU9fUEFHRVMpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMjQsNSArMTI0LDUgQEAKIAl9CiAKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKV9fZml4X3RvX3ZpcnQoRklYX0VGSV9JT19NQVBfRklSU1RfUEFHRSAtIFwKLQkJCQkJICAgICAocGFnZXNfbWFwcGVkIC0gcGFnZXMpKTsKKwkJCQkJICAgICAocGFnZXNfbWFwcGVkIC0gcGFnZXMpKSArIG9mZnNldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggODI0ZTIxYi4uZjBmODkzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKQEAgLTEsNSArMSw0IEBACiAvKgotICogIGxpbnV4L2FyY2gvaTM4Ni9lbnRyeS5TCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKICAqLwpAQCAtNTEsNiArNTAsNyBAQAogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAjaW5jbHVkZSAiaXJxX3ZlY3RvcnMuaCIKIAogLyoKQEAgLTY4LDEzICs2OCw2IEBACiAKICNkZWZpbmUgbnJfc3lzY2FsbHMgKChzeXNjYWxsX3RhYmxlX3NpemUpLzQpCiAKLUNGX01BU0sJCT0gMHgwMDAwMDAwMQotVEZfTUFTSwkJPSAweDAwMDAwMTAwCi1JRl9NQVNLCQk9IDB4MDAwMDAyMDAKLURGX01BU0sJCT0gMHgwMDAwMDQwMCAKLU5UX01BU0sJCT0gMHgwMDAwNDAwMAotVk1fTUFTSwkJPSAweDAwMDIwMDAwCi0KICNpZmRlZiBDT05GSUdfUFJFRU1QVAogI2RlZmluZSBwcmVlbXB0X3N0b3AoY2xvYmJlcnMpCURJU0FCTEVfSU5URVJSVVBUUyhjbG9iYmVycyk7IFRSQUNFX0lSUVNfT0ZGCiAjZWxzZQpAQCAtODQsNyArNzcsNyBAQAogCiAubWFjcm8gVFJBQ0VfSVJRU19JUkVUCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JdGVzdGwgJElGX01BU0ssUFRfRUZMQUdTKCVlc3ApICAgICAjIGludGVycnVwdHMgb2ZmPworCXRlc3RsICRYODZfRUZMQUdTX0lGLFBUX0VGTEFHUyglZXNwKSAgICAgIyBpbnRlcnJ1cHRzIG9mZj8KIAlqeiAxZgogCVRSQUNFX0lSUVNfT04KIDE6CkBAIC0yNDYsNyArMjM5LDcgQEAKIGNoZWNrX3VzZXJzcGFjZToKIAltb3ZsIFBUX0VGTEFHUyglZXNwKSwgJWVheAkjIG1peCBFRkxBR1MgYW5kIENTCiAJbW92YiBQVF9DUyglZXNwKSwgJWFsCi0JYW5kbCAkKFZNX01BU0sgfCBTRUdNRU5UX1JQTF9NQVNLKSwgJWVheAorCWFuZGwgJChYODZfRUZMQUdTX1ZNIHwgU0VHTUVOVF9SUExfTUFTSyksICVlYXgKIAljbXBsICRVU0VSX1JQTCwgJWVheAogCWpiIHJlc3VtZV9rZXJuZWwJCSMgbm90IHJldHVybmluZyB0byB2ODA4NiBvciB1c2Vyc3BhY2UKIApAQCAtMjcxLDcgKzI2NCw3IEBACiAJbW92bCBUSV9mbGFncyglZWJwKSwgJWVjeAkjIG5lZWRfcmVzY2hlZCBzZXQgPwogCXRlc3RiICRfVElGX05FRURfUkVTQ0hFRCwgJWNsCiAJanogcmVzdG9yZV9hbGwKLQl0ZXN0bCAkSUZfTUFTSyxQVF9FRkxBR1MoJWVzcCkJIyBpbnRlcnJ1cHRzIG9mZiAoZXhjZXB0aW9uIHBhdGgpID8KKwl0ZXN0bCAkWDg2X0VGTEFHU19JRixQVF9FRkxBR1MoJWVzcCkJIyBpbnRlcnJ1cHRzIG9mZiAoZXhjZXB0aW9uIHBhdGgpID8KIAlqeiByZXN0b3JlX2FsbAogCWNhbGwgcHJlZW1wdF9zY2hlZHVsZV9pcnEKIAlqbXAgbmVlZF9yZXNjaGVkCkBAIC0yOTEsMTAgKzI4NCwxMCBAQAogCW1vdmwgVFNTX3N5c2VudGVyX3NwMCglZXNwKSwlZXNwCiBzeXNlbnRlcl9wYXN0X2VzcDoKIAkvKgotCSAqIE5vIG5lZWQgdG8gZm9sbG93IHRoaXMgaXJxcyBvbi9vZmYgc2VjdGlvbjogdGhlIHN5c2NhbGwKLQkgKiBkaXNhYmxlZCBpcnFzIGFuZCBoZXJlIHdlIGVuYWJsZSBpdCBzdHJhaWdodCBhZnRlciBlbnRyeToKKwkgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBoZXJlLCBidXQgd2UgY2FuJ3QgdHJhY2UgaXQgdW50aWwKKwkgKiBlbm91Z2gga2VybmVsIHN0YXRlIHRvIGNhbGwgVFJBQ0VfSVJRU19PRkYgY2FuIGJlIGNhbGxlZCAtIGJ1dAorCSAqIHdlIGltbWVkaWF0ZWx5IGVuYWJsZSBpbnRlcnJ1cHRzIGF0IHRoYXQgcG9pbnQgYW55d2F5LgogCSAqLwotCUVOQUJMRV9JTlRFUlJVUFRTKENMQlJfTk9ORSkKIAlwdXNobCAkKF9fVVNFUl9EUykKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCS8qQ0ZJX1JFTF9PRkZTRVQgc3MsIDAqLwpAQCAtMzAyLDYgKzI5NSw3IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlDRklfUkVMX09GRlNFVCBlc3AsIDAKIAlwdXNoZmwKKwlvcmwgJFg4Nl9FRkxBR1NfSUYsICglZXNwKQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJcHVzaGwgJChfX1VTRVJfQ1MpCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKQEAgLTMxNSw2ICszMDksMTEgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCUNGSV9SRUxfT0ZGU0VUIGVpcCwgMAogCisJcHVzaGwgJWVheAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CisJU0FWRV9BTEwKKwlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX05PTkUpCisKIC8qCiAgKiBMb2FkIHRoZSBwb3RlbnRpYWwgc2l4dGggYXJndW1lbnQgZnJvbSB1c2VyIHN0YWNrLgogICogQ2FyZWZ1bCBhYm91dCBzZWN1cml0eS4KQEAgLTMyMiwxNCArMzIxLDEyIEBACiAJY21wbCAkX19QQUdFX09GRlNFVC0zLCVlYnAKIAlqYWUgc3lzY2FsbF9mYXVsdAogMToJbW92bCAoJWVicCksJWVicAorCW1vdmwgJWVicCxQVF9FQlAoJWVzcCkKIC5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLmFsaWduIDQKIAkubG9uZyAxYixzeXNjYWxsX2ZhdWx0CiAucHJldmlvdXMKIAotCXB1c2hsICVlYXgKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCVNBVkVfQUxMCiAJR0VUX1RIUkVBRF9JTkZPKCVlYnApCiAKIAkvKiBOb3RlLCBfVElGX1NFQ0NPTVAgaXMgYml0IG51bWJlciA4LCBhbmQgc28gaXQgbmVlZHMgdGVzdHcgYW5kIG5vdCB0ZXN0YiAqLwpAQCAtMzg0LDcgKzM4MSw3IEBACiAJCQkJCSMgc2V0dGluZyBuZWVkX3Jlc2NoZWQgb3Igc2lncGVuZGluZwogCQkJCQkjIGJldHdlZW4gc2FtcGxpbmcgYW5kIHRoZSBpcmV0CiAJVFJBQ0VfSVJRU19PRkYKLQl0ZXN0bCAkVEZfTUFTSyxQVF9FRkxBR1MoJWVzcCkJIyBJZiB0cmFjaW5nIHNldCBzaW5nbGVzdGVwIGZsYWcgb24gZXhpdAorCXRlc3RsICRYODZfRUZMQUdTX1RGLFBUX0VGTEFHUyglZXNwKQkjIElmIHRyYWNpbmcgc2V0IHNpbmdsZXN0ZXAgZmxhZyBvbiBleGl0CiAJanogbm9fc2luZ2xlc3RlcAogCW9ybCAkX1RJRl9TSU5HTEVTVEVQLFRJX2ZsYWdzKCVlYnApCiBub19zaW5nbGVzdGVwOgpAQCAtMzk5LDcgKzM5Niw3IEBACiAJIyBTZWUgY29tbWVudHMgaW4gcHJvY2Vzcy5jOmNvcHlfdGhyZWFkKCkgZm9yIGRldGFpbHMuCiAJbW92YiBQVF9PTERTUyglZXNwKSwgJWFoCiAJbW92YiBQVF9DUyglZXNwKSwgJWFsCi0JYW5kbCAkKFZNX01BU0sgfCAoU0VHTUVOVF9USV9NQVNLIDw8IDgpIHwgU0VHTUVOVF9SUExfTUFTSyksICVlYXgKKwlhbmRsICQoWDg2X0VGTEFHU19WTSB8IChTRUdNRU5UX1RJX01BU0sgPDwgOCkgfCBTRUdNRU5UX1JQTF9NQVNLKSwgJWVheAogCWNtcGwgJCgoU0VHTUVOVF9MRFQgPDwgOCkgfCBVU0VSX1JQTCksICVlYXgKIAlDRklfUkVNRU1CRVJfU1RBVEUKIAlqZSBsZHRfc3MJCQkjIHJldHVybmluZyB0byB1c2VyLXNwYWNlIHdpdGggTERUIFNTCkBAIC00MDksNyArNDA2LDcgQEAKIAlSRVNUT1JFX1JFR1MKIAlhZGRsICQ0LCAlZXNwCQkJIyBza2lwIG9yaWdfZWF4L2Vycm9yX2NvZGUKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKLUVOVFJZKGlycV9yZXR1cm4pCitpcnFfcmV0dXJuOgogCUlOVEVSUlVQVF9SRVRVUk4KIC5zZWN0aW9uIC5maXh1cCwiYXgiCiBpcmV0X2V4YzoKQEAgLTQ4Niw3ICs0ODMsNyBAQAogd29ya19ub3RpZnlzaWc6CQkJCSMgZGVhbCB3aXRoIHBlbmRpbmcgc2lnbmFscyBhbmQKIAkJCQkJIyBub3RpZnktcmVzdW1lIHJlcXVlc3RzCiAjaWZkZWYgQ09ORklHX1ZNODYKLQl0ZXN0bCAkVk1fTUFTSywgUFRfRUZMQUdTKCVlc3ApCisJdGVzdGwgJFg4Nl9FRkxBR1NfVk0sIFBUX0VGTEFHUyglZXNwKQogCW1vdmwgJWVzcCwgJWVheAogCWpuZSB3b3JrX25vdGlmeXNpZ192ODYJCSMgcmV0dXJuaW5nIHRvIGtlcm5lbC1zcGFjZSBvcgogCQkJCQkjIHZtODYtc3BhY2UKQEAgLTU0Myw5ICs1NDAsNiBAQAogCiAJUklORzBfSU5UX0ZSQU1FCQkJIyBjYW4ndCB1bndpbmQgaW50byB1c2VyIHNwYWNlIGFueXdheQogc3lzY2FsbF9mYXVsdDoKLQlwdXNobCAlZWF4CQkJIyBzYXZlIG9yaWdfZWF4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQlTQVZFX0FMTAogCUdFVF9USFJFQURfSU5GTyglZWJwKQogCW1vdmwgJC1FRkFVTFQsUFRfRUFYKCVlc3ApCiAJam1wIHJlc3VtZV91c2Vyc3BhY2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggNmJlMzlhMy4uNTU2YThkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTMxOSwxOSArMzE5LDE3IEBACiAJLyogRG8gc3lzY2FsbCB0cmFjaW5nICovCiB0cmFjZXN5czoJCQkgCiAJU0FWRV9SRVNUCi0JbW92cSAkLUVOT1NZUyxSQVgoJXJzcCkKKwltb3ZxICQtRU5PU1lTLFJBWCglcnNwKSAvKiBwdHJhY2UgY2FuIGNoYW5nZSB0aGlzIGZvciBhIGJhZCBzeXNjYWxsICovCiAJRklYVVBfVE9QX09GX1NUQUNLICVyZGkKIAltb3ZxICVyc3AsJXJkaQogCWNhbGwgc3lzY2FsbF90cmFjZV9lbnRlcgogCUxPQURfQVJHUyBBUkdPRkZTRVQgIC8qIHJlbG9hZCBhcmdzIGZyb20gc3RhY2sgaW4gY2FzZSBwdHJhY2UgY2hhbmdlZCBpdCAqLwogCVJFU1RPUkVfUkVTVAogCWNtcHEgJF9fTlJfc3lzY2FsbF9tYXgsJXJheAotCW1vdnEgJC1FTk9TWVMsJXJjeAotCWNtb3ZhICVyY3gsJXJheAotCWphICAxZgorCWphICAgaW50X3JldF9mcm9tX3N5c19jYWxsCS8qIFJBWCglcnNwKSBzZXQgdG8gLUVOT1NZUyBhYm92ZSAqLwogCW1vdnEgJXIxMCwlcmN4CS8qIGZpeHVwIGZvciBDICovCiAJY2FsbCAqc3lzX2NhbGxfdGFibGUoLCVyYXgsOCkKLTE6CW1vdnEgJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCisJbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKIAkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lICovCiAJCQogLyogCkBAIC00NTMsNiArNDUxLDcgQEAKIAlDRklfUkVHSVNURVIgcmlwLCByMTEKIAlTQVZFX1JFU1QKIAlGSVhVUF9UT1BfT0ZfU1RBQ0sgJXIxMQorCW1vdnEgJXJzcCwgJXJjeAogCWNhbGwgc3lzX2V4ZWN2ZQogCVJFU1RPUkVfVE9QX09GX1NUQUNLICVyMTEKIAltb3ZxICVyYXgsUkFYKCVyc3ApCkBAIC01ODMsNyArNTgyLDcgQEAKIHJlc3RvcmVfYXJnczoKIAlSRVNUT1JFX0FSR1MgMCw4LDAKIAotRU5UUlkoaXJxX3JldHVybikKK2lycV9yZXR1cm46CiAJSU5URVJSVVBUX1JFVFVSTgogCiAJLnNlY3Rpb24gX19leF90YWJsZSwgImEiCkBAIC0xMDM2LDE1ICsxMDM1LDE2IEBACiAgKglyZGk6IG5hbWUsIHJzaTogYXJndiwgcmR4OiBlbnZwCiAgKgogICogV2Ugd2FudCB0byBmYWxsYmFjayBpbnRvOgotICoJZXh0ZXJuIGxvbmcgc3lzX2V4ZWN2ZShjaGFyICpuYW1lLCBjaGFyICoqYXJndixjaGFyICoqZW52cCwgc3RydWN0IHB0X3JlZ3MgcmVncykKKyAqCWV4dGVybiBsb25nIHN5c19leGVjdmUoY2hhciAqbmFtZSwgY2hhciAqKmFyZ3YsY2hhciAqKmVudnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogICoKICAqIGRvX3N5c19leGVjdmUgYXNtIGZhbGxiYWNrIGFyZ3VtZW50czoKLSAqCXJkaTogbmFtZSwgcnNpOiBhcmd2LCByZHg6IGVudnAsIGZha2UgZnJhbWUgb24gdGhlIHN0YWNrCisgKglyZGk6IG5hbWUsIHJzaTogYXJndiwgcmR4OiBlbnZwLCByY3g6IGZha2UgZnJhbWUgb24gdGhlIHN0YWNrCiAgKi8KIEVOVFJZKGtlcm5lbF9leGVjdmUpCiAJQ0ZJX1NUQVJUUFJPQwogCUZBS0VfU1RBQ0tfRlJBTUUgJDAKIAlTQVZFX0FMTAkKKwltb3ZxICVyc3AsJXJjeAogCWNhbGwgc3lzX2V4ZWN2ZQogCW1vdnEgJXJheCwgUkFYKCVyc3ApCQogCVJFU1RPUkVfUkVTVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljXzY0LmMKaW5kZXggNGFlN2I2NC4uOTU0NmVmNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY182NC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9pcGkuaD4KQEAgLTI0LDIwICsyNSwyMCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNlbmRpZgogCi0vKiB3aGljaCBsb2dpY2FsIENQVSBudW1iZXIgbWFwcyB0byB3aGljaCBDUFUgKHBoeXNpY2FsIEFQSUMgSUQpICovCi11MTYgeDg2X2NwdV90b19hcGljaWRfaW5pdFtOUl9DUFVTXSBfX2luaXRkYXRhCi0JCQkJCT0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUQgfTsKLXZvaWQgKng4Nl9jcHVfdG9fYXBpY2lkX2Vhcmx5X3B0cjsKLURFRklORV9QRVJfQ1BVKHUxNiwgeDg2X2NwdV90b19hcGljaWQpID0gQkFEX0FQSUNJRDsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh4ODZfY3B1X3RvX2FwaWNpZCk7CitERUZJTkVfUEVSX0NQVShpbnQsIHgyYXBpY19leHRyYV9iaXRzKTsKIAogc3RydWN0IGdlbmFwaWMgX19yZWFkX21vc3RseSAqZ2VuYXBpYyA9ICZhcGljX2ZsYXQ7CiAKK3N0YXRpYyBlbnVtIHV2X3N5c3RlbV90eXBlIHV2X3N5c3RlbV90eXBlOworCiAvKgogICogQ2hlY2sgdGhlIEFQSUMgSURzIGluIGJpb3NfY3B1X2FwaWNpZCBhbmQgY2hvb3NlIHRoZSBBUElDIG1vZGUuCiAgKi8KIHZvaWQgX19pbml0IHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQogeworCWlmICh1dl9zeXN0ZW1fdHlwZSA9PSBVVl9OT05fVU5JUVVFX0FQSUMpCisJCWdlbmFwaWMgPSAmYXBpY194MmFwaWNfdXZfeDsKKwllbHNlCiAjaWZkZWYgQ09ORklHX0FDUEkKIAkvKgogCSAqIFF1aXJrOiBzb21lIHg4Nl82NCBtYWNoaW5lcyBjYW4gb25seSB1c2UgcGh5c2ljYWwgQVBJQyBtb2RlCkBAIC02NCwzICs2NSwzNyBAQAogewogCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX1NFTEYsIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKIH0KKworaW50IF9faW5pdCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQoreworCWlmICghc3RyY21wKG9lbV9pZCwgIlNHSSIpKSB7CisJCWlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWTCIpKQorCQkJdXZfc3lzdGVtX3R5cGUgPSBVVl9MRUdBQ1lfQVBJQzsKKwkJZWxzZSBpZiAoIXN0cmNtcChvZW1fdGFibGVfaWQsICJVVlgiKSkKKwkJCXV2X3N5c3RlbV90eXBlID0gVVZfWDJBUElDOworCQllbHNlIGlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWSCIpKQorCQkJdXZfc3lzdGVtX3R5cGUgPSBVVl9OT05fVU5JUVVFX0FQSUM7CisJfQorCXJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgcmVhZF9hcGljX2lkKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGlkOworCisJV0FSTl9PTihwcmVlbXB0aWJsZSgpKTsKKwlpZCA9IGFwaWNfcmVhZChBUElDX0lEKTsKKwlpZiAodXZfc3lzdGVtX3R5cGUgPj0gVVZfWDJBUElDKQorCQlpZCAgfD0gX19nZXRfY3B1X3Zhcih4MmFwaWNfZXh0cmFfYml0cyk7CisJcmV0dXJuIGlkOworfQorCitlbnVtIHV2X3N5c3RlbV90eXBlIGdldF91dl9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiB1dl9zeXN0ZW1fdHlwZTsKK30KKworaW50IGlzX3V2X3N5c3RlbSh2b2lkKQoreworCXJldHVybiB1dl9zeXN0ZW1fdHlwZSAhPSBVVl9OT05FOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCmluZGV4IDA3MzUyYjcuLjFhOWM2ODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKQEAgLTk3LDcgKzk3LDcgQEAKIAogc3RhdGljIGludCBmbGF0X2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQogewotCXJldHVybiBwaHlzaWRfaXNzZXQoR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOworCXJldHVybiBwaHlzaWRfaXNzZXQoR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCkBAIC0xMzgsMTIgKzEzOCw5IEBACiAKIHN0YXRpYyBjcHVtYXNrX3QgcGh5c2ZsYXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCiB7Ci0JY3B1bWFza190IGRvbWFpbiA9IENQVV9NQVNLX05PTkU7Ci0JY3B1X3NldChjcHUsIGRvbWFpbik7Ci0JcmV0dXJuIGRvbWFpbjsKKwlyZXR1cm4gY3B1bWFza19vZl9jcHUoY3B1KTsKIH0KIAotCiBzdGF0aWMgdm9pZCBwaHlzZmxhdF9zZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBjcHVtYXNrLCBpbnQgdmVjdG9yKQogewogCXNlbmRfSVBJX21hc2tfc2VxdWVuY2UoY3B1bWFzaywgdmVjdG9yKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmMTM5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIEFQSUMgZnVuY3Rpb25zIChub3RlOiBub3QgYW4gSW50ZWwgY29tcGF0aWJsZSBBUElDKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9pcGkuaD4KKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdXZfaHViX2luZm9fcywgX191dl9odWJfaW5mbyk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKF9fdXZfaHViX2luZm8pOworCitzdHJ1Y3QgdXZfYmxhZGVfaW5mbyAqdXZfYmxhZGVfaW5mbzsKK0VYUE9SVF9TWU1CT0xfR1BMKHV2X2JsYWRlX2luZm8pOworCitzaG9ydCAqdXZfbm9kZV90b19ibGFkZTsKK0VYUE9SVF9TWU1CT0xfR1BMKHV2X25vZGVfdG9fYmxhZGUpOworCitzaG9ydCAqdXZfY3B1X3RvX2JsYWRlOworRVhQT1JUX1NZTUJPTF9HUEwodXZfY3B1X3RvX2JsYWRlKTsKKworc2hvcnQgdXZfcG9zc2libGVfYmxhZGVzOworRVhQT1JUX1NZTUJPTF9HUEwodXZfcG9zc2libGVfYmxhZGVzKTsKKworLyogU3RhcnQgd2l0aCBhbGwgSVJRcyBwb2ludGluZyB0byBib290IENQVS4gIElSUSBiYWxhbmNpbmcgd2lsbCBzaGlmdCB0aGVtLiAqLworCitzdGF0aWMgY3B1bWFza190IHV2X3RhcmdldF9jcHVzKHZvaWQpCit7CisJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOworfQorCitzdGF0aWMgY3B1bWFza190IHV2X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworCWNwdW1hc2tfdCBkb21haW4gPSBDUFVfTUFTS19OT05FOworCWNwdV9zZXQoY3B1LCBkb21haW4pOworCXJldHVybiBkb21haW47Cit9CisKK2ludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgbmFzaWQ7CisKKwluYXNpZCA9IHV2X2FwaWNpZF90b19uYXNpZChwaHlzX2FwaWNpZCk7CisJdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKKwkgICAgKHBoeXNfYXBpY2lkIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAorCSAgICAoKChsb25nKXN0YXJ0X3JpcCA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCkgPj4gMTIpIHwKKwkgICAgQVBJQ19ETV9JTklUOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChuYXNpZCwgVVZIX0lQSV9JTlQsIHZhbCk7CisJbWRlbGF5KDEwKTsKKworCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CisJICAgIChwaHlzX2FwaWNpZCA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkgICAgKCgobG9uZylzdGFydF9yaXAgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpID4+IDEyKSB8CisJICAgIEFQSUNfRE1fU1RBUlRVUDsKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQobmFzaWQsIFVWSF9JUElfSU5ULCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9vbmUoaW50IGNwdSwgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgYXBpY2lkLCBsYXBpY2lkOworCWludCBuYXNpZDsKKworCWFwaWNpZCA9IHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7IC8qIFpaWiAtIGNhY2hlIG5vZGUtbG9jYWwgPyAqLworCWxhcGljaWQgPSBhcGljaWQgJiAweDNmOwkJLyogWlpaIG1hY3JvIG5lZWRlZCAqLworCW5hc2lkID0gdXZfYXBpY2lkX3RvX25hc2lkKGFwaWNpZCk7CisJdmFsID0KKwkgICAgKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwgKGxhcGljaWQgPDwKKwkJCQkJICAgICAgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJICAgICh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChuYXNpZCwgVVZIX0lQSV9JTlQsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX21hc2soY3B1bWFza190IG1hc2ssIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgKytjcHUpCisJCWlmIChjcHVfaXNzZXQoY3B1LCBtYXNrKSkKKwkJCXV2X3NlbmRfSVBJX29uZShjcHUsIHZlY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKK3sKKwljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCisJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7CisKKwlpZiAoIWNwdXNfZW1wdHkobWFzaykpCisJCXV2X3NlbmRfSVBJX21hc2sobWFzaywgdmVjdG9yKTsKK30KKworc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCit7CisJdXZfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hcCwgdmVjdG9yKTsKK30KKworc3RhdGljIGludCB1dl9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB1dl9jcHVfbWFza190b19hcGljaWQoY3B1bWFza190IGNwdW1hc2spCit7CisJaW50IGNwdTsKKworCS8qCisJICogV2UncmUgdXNpbmcgZml4ZWQgSVJRIGRlbGl2ZXJ5LCBjYW4gb25seSByZXR1cm4gb25lIHBoeXMgQVBJQyBJRC4KKwkgKiBNYXkgYXMgd2VsbCBiZSB0aGUgZmlyc3QuCisJICovCisJY3B1ID0gZmlyc3RfY3B1KGNwdW1hc2spOworCWlmICgodW5zaWduZWQpY3B1IDwgTlJfQ1BVUykKKwkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CisJZWxzZQorCQlyZXR1cm4gQkFEX0FQSUNJRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwaHlzX3BrZ19pZChpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBHRVRfQVBJQ19JRChyZWFkX2FwaWNfaWQoKSkgPj4gaW5kZXhfbXNiOworfQorCisjaWZkZWYgWlpaCQkvKiBOZWVkcyB4MmFwaWMgcGF0Y2ggKi8KK3N0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKK3sKKwlhcGljX3dyaXRlKEFQSUNfU0VMRl9JUEksIHZlY3Rvcik7Cit9CisjZW5kaWYKKworc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfdXZfeCA9IHsKKwkubmFtZSA9ICJVViBsYXJnZSBzeXN0ZW0iLAorCS5pbnRfZGVsaXZlcnlfbW9kZSA9IGRlc3RfRml4ZWQsCisJLmludF9kZXN0X21vZGUgPSAoQVBJQ19ERVNUX1BIWVNJQ0FMICE9IDApLAorCS50YXJnZXRfY3B1cyA9IHV2X3RhcmdldF9jcHVzLAorCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4gPSB1dl92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sLyogRml4bWUgWlpaICovCisJLmFwaWNfaWRfcmVnaXN0ZXJlZCA9IHV2X2FwaWNfaWRfcmVnaXN0ZXJlZCwKKwkuc2VuZF9JUElfYWxsID0gdXZfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9hbGxidXRzZWxmID0gdXZfc2VuZF9JUElfYWxsYnV0c2VsZiwKKwkuc2VuZF9JUElfbWFzayA9IHV2X3NlbmRfSVBJX21hc2ssCisJLyogWlpaLnNlbmRfSVBJX3NlbGYgPSB1dl9zZW5kX0lQSV9zZWxmLCAqLworCS5jcHVfbWFza190b19hcGljaWQgPSB1dl9jcHVfbWFza190b19hcGljaWQsCisJLnBoeXNfcGtnX2lkID0gcGh5c19wa2dfaWQsCS8qIEZpeG1lIFpaWiAqLworfTsKKworc3RhdGljIF9fY3B1aW5pdCB2b2lkIHNldF94MmFwaWNfZXh0cmFfYml0cyhpbnQgbmFzaWQpCit7CisJX19nZXRfY3B1X3Zhcih4MmFwaWNfZXh0cmFfYml0cykgPSAoKG5hc2lkID4+IDEpIDw8IDYpOworfQorCisvKgorICogQ2FsbGVkIG9uIGJvb3QgY3B1LgorICovCitzdGF0aWMgX19pbml0IHZvaWQgdXZfc3lzdGVtX2luaXQodm9pZCkKK3sKKwl1bmlvbiB1dmhfc2lfYWRkcl9tYXBfY29uZmlnX3UgbV9uX2NvbmZpZzsKKwlpbnQgYnl0ZXMsIG5pZCwgY3B1LCBsY3B1LCBuYXNpZCwgbGFzdF9uYXNpZCwgYmxhZGU7CisJdW5zaWduZWQgbG9uZyBtbXJfYmFzZTsKKworCW1fbl9jb25maWcudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9TSV9BRERSX01BUF9DT05GSUcpOworCW1tcl9iYXNlID0KKwkgICAgdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SKSAmCisJICAgIH5VVl9NTVJfRU5BQkxFOworCXByaW50ayhLRVJOX0RFQlVHICJVVjogZ2xvYmFsIE1NUiBiYXNlIDB4JWx4XG4iLCBtbXJfYmFzZSk7CisKKwlsYXN0X25hc2lkID0gLTE7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQluaWQgPSBjcHVfdG9fbm9kZShjcHUpOworCQluYXNpZCA9IHV2X2FwaWNpZF90b19uYXNpZChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpKTsKKwkJaWYgKG5hc2lkICE9IGxhc3RfbmFzaWQpCisJCQl1dl9wb3NzaWJsZV9ibGFkZXMrKzsKKwkJbGFzdF9uYXNpZCA9IG5hc2lkOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiVVY6IEZvdW5kICVkIGJsYWRlc1xuIiwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpKTsKKworCWJ5dGVzID0gc2l6ZW9mKHN0cnVjdCB1dl9ibGFkZV9pbmZvKSAqIHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKKwl1dl9ibGFkZV9pbmZvID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhieXRlcyk7CisKKwlieXRlcyA9IHNpemVvZih1dl9ub2RlX3RvX2JsYWRlWzBdKSAqIG51bV9wb3NzaWJsZV9ub2RlcygpOworCXV2X25vZGVfdG9fYmxhZGUgPSBhbGxvY19ib290bWVtX3BhZ2VzKGJ5dGVzKTsKKwltZW1zZXQodXZfbm9kZV90b19ibGFkZSwgMjU1LCBieXRlcyk7CisKKwlieXRlcyA9IHNpemVvZih1dl9jcHVfdG9fYmxhZGVbMF0pICogbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKwl1dl9jcHVfdG9fYmxhZGUgPSBhbGxvY19ib290bWVtX3BhZ2VzKGJ5dGVzKTsKKwltZW1zZXQodXZfY3B1X3RvX2JsYWRlLCAyNTUsIGJ5dGVzKTsKKworCWxhc3RfbmFzaWQgPSAtMTsKKwlibGFkZSA9IC0xOworCWxjcHUgPSAtMTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCW5pZCA9IGNwdV90b19ub2RlKGNwdSk7CisJCW5hc2lkID0gdXZfYXBpY2lkX3RvX25hc2lkKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkpOworCQlpZiAobmFzaWQgIT0gbGFzdF9uYXNpZCkgeworCQkJYmxhZGUrKzsKKwkJCWxjcHUgPSAtMTsKKwkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX3Bvc2libGVfY3B1cyA9IDA7CisJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9vbmxpbmVfY3B1cyA9IDA7CisJCX0KKwkJbGFzdF9uYXNpZCA9IG5hc2lkOworCQlsY3B1Kys7CisKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm1fdmFsID0gbV9uX2NvbmZpZy5zLm1fc2t0OworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBtX25fY29uZmlnLnMubl9za3Q7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5udW1hX2JsYWRlX2lkID0gYmxhZGU7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ibGFkZV9wcm9jZXNzb3JfaWQgPSBsY3B1OworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG9jYWxfbmFzaWQgPSBuYXNpZDsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0KKwkJICAgIG5hc2lkICYgfigoMSA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMSk7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbG9iYWxfbW1yX2Jhc2UgPSBtbXJfYmFzZTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmNvaGVyZW5jeV9kb21haW5fbnVtYmVyID0gMDsvKiBaWlogKi8KKwkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubmFzaWQgPSBuYXNpZDsKKwkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubnJfcG9zaWJsZV9jcHVzKys7CisJCXV2X25vZGVfdG9fYmxhZGVbbmlkXSA9IGJsYWRlOworCQl1dl9jcHVfdG9fYmxhZGVbY3B1XSA9IGJsYWRlOworCisJCXByaW50ayhLRVJOX0RFQlVHICJVViBjcHUgJWQsIGFwaWNpZCAweCV4LCBuYXNpZCAlZCwgbmlkICVkXG4iLAorCQkgICAgICAgY3B1LCBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpLCBuYXNpZCwgbmlkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlVWICAgbGNwdSAlZCwgYmxhZGUgJWRcbiIsIGxjcHUsIGJsYWRlKTsKKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgb24gZWFjaCBjcHUgdG8gaW5pdGlhbGl6ZSB0aGUgcGVyX2NwdSBVViBkYXRhIGFyZWEuCisgKi8KK3ZvaWQgX19jcHVpbml0IHV2X2NwdV9pbml0KHZvaWQpCit7CisJaWYgKCF1dl9ub2RlX3RvX2JsYWRlKQorCQl1dl9zeXN0ZW1faW5pdCgpOworCisJdXZfYmxhZGVfaW5mb1t1dl9udW1hX2JsYWRlX2lkKCldLm5yX29ubGluZV9jcHVzKys7CisKKwlpZiAoZ2V0X3V2X3N5c3RlbV90eXBlKCkgPT0gVVZfTk9OX1VOSVFVRV9BUElDKQorCQlzZXRfeDJhcGljX2V4dHJhX2JpdHModXZfaHViX2luZm8tPmxvY2FsX25hc2lkKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGIwNTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9oZWFkMzIuYyAtLSBwcmVwYXJlIHRvIHJ1biBjb21tb24gY29kZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVhQHN1c2UuZGU+IFN1U0UKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBCaWVkZXJtYW4gPGViaWVkZXJtQHhtaXNzaW9uLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXJ0X2tlcm5lbC5oPgorCit2b2lkIF9faW5pdCBpMzg2X3N0YXJ0X2tlcm5lbCh2b2lkKQoreworCXN0YXJ0X2tlcm5lbCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCmluZGV4IDI0ZGJmNTYuLjk5M2M3NjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKQEAgLTQ5LDQ2ICs0OSw4NSBAQAogCX0KIH0KIAotI2RlZmluZSBFQkRBX0FERFJfUE9JTlRFUiAweDQwRQorI2RlZmluZSBCSU9TX0VCREFfU0VHTUVOVCAweDQwRQorI2RlZmluZSBCSU9TX0xPV01FTV9LSUxPQllURVMgMHg0MTMKIAotc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfZWJkYSh2b2lkKQorLyoKKyAqIFRoZSBCSU9TIHBsYWNlcyB0aGUgRUJEQS9YQkRBIGF0IHRoZSB0b3Agb2YgY29udmVudGlvbmFsCisgKiBtZW1vcnksIGFuZCB1c3VhbGx5IGRlY3JlYXNlcyB0aGUgcmVwb3J0ZWQgYW1vdW50IG9mCisgKiBjb252ZW50aW9uYWwgbWVtb3J5IChpbnQgMHgxMikgdG9vLiBUaGlzIGFsc28gY29udGFpbnMgYQorICogd29ya2Fyb3VuZCBmb3IgRGVsbCBzeXN0ZW1zIHRoYXQgbmVnbGVjdCB0byByZXNlcnZlIEVCREEuCisgKiBUaGUgc2FtZSB3b3JrYXJvdW5kIGFsc28gYXZvaWRzIGEgcHJvYmxlbSB3aXRoIHRoZSBBTUQ3NjhNUFgKKyAqIGNoaXBzZXQ6IHJlc2VydmUgYSBwYWdlIGJlZm9yZSBWR0EgdG8gcHJldmVudCBQQ0kgcHJlZmV0Y2gKKyAqIGludG8gaXQgKGVycmF0YSAjNTYpLiBVc3VhbGx5IHRoZSBwYWdlIGlzIHJlc2VydmVkIGFueXdheXMsCisgKiB1bmxlc3MgeW91IGhhdmUgbm8gUFMvMiBtb3VzZSBwbHVnZ2VkIGluLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9lYmRhX3JlZ2lvbih2b2lkKQogewotCXVuc2lnbmVkIGViZGFfYWRkciwgZWJkYV9zaXplOworCXVuc2lnbmVkIGludCBsb3dtZW0sIGViZGFfYWRkcjsKIAotCS8qCi0JICogdGhlcmUgaXMgYSByZWFsLW1vZGUgc2VnbWVudGVkIHBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlCi0JICogNEsgRUJEQSBhcmVhIGF0IDB4NDBFCi0JICovCi0JZWJkYV9hZGRyID0gKih1bnNpZ25lZCBzaG9ydCAqKV9fdmEoRUJEQV9BRERSX1BPSU5URVIpOwotCWViZGFfYWRkciA8PD0gNDsKLQotCWlmICghZWJkYV9hZGRyKQorCS8qIFRvIGRldGVybWluZSB0aGUgcG9zaXRpb24gb2YgdGhlIEVCREEgYW5kIHRoZSAqLworCS8qIGVuZCBvZiBjb252ZW50aW9uYWwgbWVtb3J5LCB3ZSBuZWVkIHRvIGxvb2sgYXQgKi8KKwkvKiB0aGUgQklPUyBkYXRhIGFyZWEuIEluIGEgcGFyYXZpcnR1YWwgZW52aXJvbm1lbnQgKi8KKwkvKiB0aGF0IGFyZWEgaXMgYWJzZW50LiBXZSdsbCBqdXN0IGhhdmUgdG8gYXNzdW1lICovCisJLyogdGhhdCB0aGUgcGFyYXZpcnQgY2FzZSBjYW4gaGFuZGxlIG1lbW9yeSBzZXR1cCAqLworCS8qIGNvcnJlY3RseSwgd2l0aG91dCBvdXIgaGVscC4gKi8KKwlpZiAocGFyYXZpcnRfZW5hYmxlZCgpKQogCQlyZXR1cm47CiAKLQllYmRhX3NpemUgPSAqKHVuc2lnbmVkIHNob3J0ICopX192YShlYmRhX2FkZHIpOworCS8qIGVuZCBvZiBsb3cgKGNvbnZlbnRpb25hbCkgbWVtb3J5ICovCisJbG93bWVtID0gKih1bnNpZ25lZCBzaG9ydCAqKV9fdmEoQklPU19MT1dNRU1fS0lMT0JZVEVTKTsKKwlsb3dtZW0gPDw9IDEwOwogCi0JLyogUm91bmQgRUJEQSB1cCB0byBwYWdlcyAqLwotCWlmIChlYmRhX3NpemUgPT0gMCkKLQkJZWJkYV9zaXplID0gMTsKLQllYmRhX3NpemUgPDw9IDEwOwotCWViZGFfc2l6ZSA9IHJvdW5kX3VwKGViZGFfc2l6ZSArIChlYmRhX2FkZHIgJiB+UEFHRV9NQVNLKSwgUEFHRV9TSVpFKTsKLQlpZiAoZWJkYV9zaXplID4gNjQqMTAyNCkKLQkJZWJkYV9zaXplID0gNjQqMTAyNDsKKwkvKiBzdGFydCBvZiBFQkRBIGFyZWEgKi8KKwllYmRhX2FkZHIgPSAqKHVuc2lnbmVkIHNob3J0ICopX192YShCSU9TX0VCREFfU0VHTUVOVCk7CisJZWJkYV9hZGRyIDw8PSA0OwogCi0JcmVzZXJ2ZV9lYXJseShlYmRhX2FkZHIsIGViZGFfYWRkciArIGViZGFfc2l6ZSwgIkVCREEiKTsKKwkvKiBGaXh1cDogYmlvcyBwdXRzIGFuIEVCREEgaW4gdGhlIHRvcCA2NEsgc2VnbWVudCAqLworCS8qIG9mIGNvbnZlbnRpb25hbCBtZW1vcnksIGJ1dCBkb2VzIG5vdCBhZGp1c3QgbG93bWVtLiAqLworCWlmICgobG93bWVtIC0gZWJkYV9hZGRyKSA8PSAweDEwMDAwKQorCQlsb3dtZW0gPSBlYmRhX2FkZHI7CisKKwkvKiBGaXh1cDogYmlvcyBkb2VzIG5vdCByZXBvcnQgYW4gRUJEQSBhdCBhbGwuICovCisJLyogU29tZSBvbGQgRGVsbHMgc2VlbSB0byBuZWVkIDRrIGFueWhvdyAoYnVnemlsbGEgMjk5MCkgKi8KKwlpZiAoKGViZGFfYWRkciA9PSAwKSAmJiAobG93bWVtID49IDB4OWYwMDApKQorCQlsb3dtZW0gPSAweDlmMDAwOworCisJLyogUGFyYW5vaWE6IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dC4uLiAqLworCWlmICgobG93bWVtID09IDApIHx8IChsb3dtZW0gPj0gMHgxMDAwMDApKQorCQlsb3dtZW0gPSAweDlmMDAwOworCisJLyogcmVzZXJ2ZSBhbGwgbWVtb3J5IGJldHdlZW4gbG93bWVtIGFuZCB0aGUgMU1CIG1hcmsgKi8KKwlyZXNlcnZlX2Vhcmx5KGxvd21lbSwgMHgxMDAwMDAsICJCSU9TIHJlc2VydmVkIik7CiB9CiAKIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9rZXJuZWwoY2hhciAqIHJlYWxfbW9kZV9kYXRhKQogewogCWludCBpOwogCisJLyoKKwkgKiBCdWlsZC10aW1lIHNhbml0eSBjaGVja3Mgb24gdGhlIGtlcm5lbCBpbWFnZSBhbmQgbW9kdWxlCisJICogYXJlYSBtYXBwaW5ncy4gKHRoZXNlIGFyZSBwdXJlbHkgYnVpbGQtdGltZSBhbmQgcHJvZHVjZSBubyBjb2RlKQorCSAqLworCUJVSUxEX0JVR19PTihNT0RVTEVTX1ZBRERSIDwgS0VSTkVMX0lNQUdFX1NUQVJUKTsKKwlCVUlMRF9CVUdfT04oTU9EVUxFU19WQUREUi1LRVJORUxfSU1BR0VfU1RBUlQgPCBLRVJORUxfSU1BR0VfU0laRSk7CisJQlVJTERfQlVHX09OKE1PRFVMRVNfTEVOICsgS0VSTkVMX0lNQUdFX1NJWkUgPiAyKlBVRF9TSVpFKTsKKwlCVUlMRF9CVUdfT04oKEtFUk5FTF9JTUFHRV9TVEFSVCAmIH5QTURfTUFTSykgIT0gMCk7CisJQlVJTERfQlVHX09OKChNT0RVTEVTX1ZBRERSICYgflBNRF9NQVNLKSAhPSAwKTsKKwlCVUlMRF9CVUdfT04oIShNT0RVTEVTX1ZBRERSID4gX19TVEFSVF9LRVJORUwpKTsKKwlCVUlMRF9CVUdfT04oISgoKE1PRFVMRVNfRU5EIC0gMSkgJiBQR0RJUl9NQVNLKSA9PQorCQkJCShfX1NUQVJUX0tFUk5FTCAmIFBHRElSX01BU0spKSk7CisKIAkvKiBjbGVhciBic3MgYmVmb3JlIHNldF9pbnRyX2dhdGUgd2l0aCBlYXJseV9pZHRfaGFuZGxlciAqLwogCWNsZWFyX2JzcygpOwogCiAJLyogTWFrZSBOVUxMIHBvaW50ZXJzIHNlZ2ZhdWx0ICovCiAJemFwX2lkZW50aXR5X21hcHBpbmdzKCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSURUX0VOVFJJRVM7IGkrKykgeworCS8qIENsZWFudXAgdGhlIG92ZXIgbWFwcGVkIGhpZ2ggYWxpYXMgKi8KKwljbGVhbnVwX2hpZ2htYXAoKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRVhDRVBUSU9OX1ZFQ1RPUlM7IGkrKykgewogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKIAkJc2V0X2ludHJfZ2F0ZShpLCAmZWFybHlfaWR0X2hhbmRsZXJzW2ldKTsKICNlbHNlCkBAIC0xMDcsNiArMTQ2LDcgQEAKIAogCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9lbmQpLCAiVEVYVCBEQVRBIEJTUyIpOwogCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLyogUmVzZXJ2ZSBJTklUUkQgKi8KIAlpZiAoYm9vdF9wYXJhbXMuaGRyLnR5cGVfb2ZfbG9hZGVyICYmIGJvb3RfcGFyYW1zLmhkci5yYW1kaXNrX2ltYWdlKSB7CiAJCXVuc2lnbmVkIGxvbmcgcmFtZGlza19pbWFnZSA9IGJvb3RfcGFyYW1zLmhkci5yYW1kaXNrX2ltYWdlOwpAQCAtMTE0LDggKzE1NCw5IEBACiAJCXVuc2lnbmVkIGxvbmcgcmFtZGlza19lbmQgICA9IHJhbWRpc2tfaW1hZ2UgKyByYW1kaXNrX3NpemU7CiAJCXJlc2VydmVfZWFybHkocmFtZGlza19pbWFnZSwgcmFtZGlza19lbmQsICJSQU1ESVNLIik7CiAJfQorI2VuZGlmCiAKLQlyZXNlcnZlX2ViZGEoKTsKKwlyZXNlcnZlX2ViZGFfcmVnaW9uKCk7CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgZXZlcnl0aGluZyBzdGlsbCBuZWVkZWQgZnJvbSB0aGUgYm9vdCBsb2FkZXIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDc0ZWY0YTQuLjkwZjAzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtMSw1ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9oZWFkLlMgLS0gdGhlIDMyLWJpdCBzdGFydHVwIGNvZGUuCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKICAqCkBAIC00NTAsNyArNDQ5LDcgQEAKIAlqbXAgaW5pdGlhbGl6ZV9zZWNvbmRhcnkgIyBhbGwgb3RoZXIgQ1BVcyBjYWxsIGluaXRpYWxpemVfc2Vjb25kYXJ5CiAxOgogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQlqbXAgc3RhcnRfa2VybmVsCisJam1wIGkzODZfc3RhcnRfa2VybmVsCiAKIC8qCiAgKiBXZSBkZXBlbmQgb24gRVQgdG8gYmUgY29ycmVjdC4gVGhpcyBjaGVja3MgZm9yIDI4Ny8zODcuCkBAIC02MDYsMTMgKzYwNSwxMyBAQAogLnNlY3Rpb24gIi5ic3MucGFnZV9hbGlnbmVkIiwid2EiCiAJLmFsaWduIFBBR0VfU0laRV9hc20KICNpZmRlZiBDT05GSUdfWDg2X1BBRQotRU5UUlkoc3dhcHBlcl9wZ19wbWQpCitzd2FwcGVyX3BnX3BtZDoKIAkuZmlsbCAxMDI0KktQTURTLDQsMAogI2Vsc2UKIEVOVFJZKHN3YXBwZXJfcGdfZGlyKQogCS5maWxsIDEwMjQsNCwwCiAjZW5kaWYKLUVOVFJZKHN3YXBwZXJfcGdfZml4bWFwKQorc3dhcHBlcl9wZ19maXhtYXA6CiAJLmZpbGwgMTAyNCw0LDAKIEVOVFJZKGVtcHR5X3plcm9fcGFnZSkKIAkuZmlsbCA0MDk2LDEsMApAQCAtNjU3LDcgKzY1Niw3IEBACiAJLmFzY2l6ICJVbmtub3duIGludGVycnVwdCBvciBmYXVsdCBhdCBFSVAgJXAgJXAgJXBcbiIKIAogZmF1bHRfbXNnOgotCS5hc2NpaQkJCQkJCQkJXAorCS5hc2NpegkJCQkJCQkJXAogLyogZmF1bHQgaW5mbzogKi8JIkJVRzogSW50ICVkOiBDUjIgJXBcbiIJCQkJXAogLyogcHVzaGEgcmVnczogKi8JIiAgICAgRURJICVwICBFU0kgJXAgIEVCUCAlcCAgRVNQICVwXG4iCQlcCiAJCQkiICAgICBFQlggJXAgIEVEWCAlcCAgRUNYICVwICBFQVggJXBcbiIJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDA5YjM4ZDUuLjEwYTE5NTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwpAQCAtMTA3LDggKzEwNywxMyBAQAogCW1vdnEJJXJkeCwgMCglcmJ4LCAlcmF4LCA4KQogaWRlbnRfY29tcGxldGU6CiAKLQkvKiBGaXh1cCB0aGUga2VybmVsIHRleHQrZGF0YSB2aXJ0dWFsIGFkZHJlc3NlcworCS8qCisJICogRml4dXAgdGhlIGtlcm5lbCB0ZXh0K2RhdGEgdmlydHVhbCBhZGRyZXNzZXMuIE5vdGUgdGhhdAorCSAqIHdlIG1pZ2h0IHdyaXRlIGludmFsaWQgcG1kcywgd2hlbiB0aGUga2VybmVsIGlzIHJlbG9jYXRlZAorCSAqIGNsZWFudXBfaGlnaG1hcCgpIGZpeGVzIHRoaXMgdXAgYWxvbmcgd2l0aCB0aGUgbWFwcGluZ3MKKwkgKiBiZXlvbmQgX2VuZC4KIAkgKi8KKwogCWxlYXEJbGV2ZWwyX2tlcm5lbF9wZ3QoJXJpcCksICVyZGkKIAlsZWFxCTQwOTYoJXJkaSksICVyOAogCS8qIFNlZSBpZiBpdCBpcyBhIHZhbGlkIHBhZ2UgdGFibGUgZW50cnkgKi8KQEAgLTEyNywxMCArMTMyLDYgQEAKIAlhZGRxCSVyYnAsIHRyYW1wb2xpbmVfbGV2ZWw0X3BndCArIDAoJXJpcCkKIAlhZGRxCSVyYnAsIHRyYW1wb2xpbmVfbGV2ZWw0X3BndCArICg1MTEqOCkoJXJpcCkKICNlbmRpZgotI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCi0JYWRkcQklcmJwLCB3YWtldXBfbGV2ZWw0X3BndCArIDAoJXJpcCkKLQlhZGRxCSVyYnAsIHdha2V1cF9sZXZlbDRfcGd0ICsgKDUxMSo4KSglcmlwKQotI2VuZGlmCiAKIAkvKiBEdWUgdG8gRU5UUlkoKSwgc29tZXRpbWVzIHRoZSBlbXB0eSBzcGFjZSBnZXRzIGZpbGxlZCB3aXRoCiAJICogemVyb3MuIEJldHRlciB0YWtlIGEgam1wIHRoYW4gcmVseWluZyBvbiBlbXB0eSBzcGFjZSBiZWluZwpAQCAtMjUwLDcgKzI1MSw3IEBACiAJbHJldHEKIAogCS8qIFNNUCBib290dXAgY2hhbmdlcyB0aGVzZSB0d28gKi8KLQlfX0NQVUlOSVREQVRBCisJX19SRUZEQVRBCiAJLmFsaWduCTgKIAlFTlRSWShpbml0aWFsX2NvZGUpCiAJLnF1YWQJeDg2XzY0X3N0YXJ0X2tlcm5lbApAQCAtMjYyLDIxICsyNjMsMTYgQEAKIGJhZF9hZGRyZXNzOgogCWptcCBiYWRfYWRkcmVzcwogCisJLnNlY3Rpb24gIi5pbml0LnRleHQiLCJheCIKICNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCi0ubWFjcm8gZWFybHlfaWR0X3RyYW1wIGZpcnN0LCBsYXN0Ci0JLmlmZ3QgXGxhc3QtXGZpcnN0Ci0JZWFybHlfaWR0X3RyYW1wIFxmaXJzdCwgXGxhc3QtMQotCS5lbmRpZgotCW1vdmwgJFxsYXN0LCVlc2kKLQlqbXAgZWFybHlfaWR0X2hhbmRsZXIKLS5lbmRtCi0KIAkuZ2xvYmwgZWFybHlfaWR0X2hhbmRsZXJzCiBlYXJseV9pZHRfaGFuZGxlcnM6Ci0JZWFybHlfaWR0X3RyYW1wIDAsIDYzCi0JZWFybHlfaWR0X3RyYW1wIDY0LCAxMjcKLQllYXJseV9pZHRfdHJhbXAgMTI4LCAxOTEKLQllYXJseV9pZHRfdHJhbXAgMTkyLCAyNTUKKwlpID0gMAorCS5yZXB0IE5VTV9FWENFUFRJT05fVkVDVE9SUworCW1vdmwgJGksICVlc2kKKwlqbXAgZWFybHlfaWR0X2hhbmRsZXIKKwlpID0gaSArIDEKKwkuZW5kcgogI2VuZGlmCiAKIEVOVFJZKGVhcmx5X2lkdF9oYW5kbGVyKQpAQCAtMzIyLDYgKzMxOCw3IEBACiBlYXJseV9pZHRfcmlwbXNnOgogCS5hc2NpeiAiUklQICVzXG4iCiAjZW5kaWYgLyogQ09ORklHX0VBUkxZX1BSSU5USyAqLworCS5wcmV2aW91cwogCiAuYmFsaWduIFBBR0VfU0laRQogCkBAIC0zNzQsMTggKzM3MSwyNCBAQAogCS8qIFNpbmNlIEkgZWFzaWx5IGNhbiwgbWFwIHRoZSBmaXJzdCAxRy4KIAkgKiBEb24ndCBzZXQgTlggYmVjYXVzZSBjb2RlIHJ1bnMgZnJvbSB0aGVzZSBwYWdlcy4KIAkgKi8KLQlQTURTKDB4MDAwMDAwMDAwMDAwMDAwMCwgX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDLCBQVFJTX1BFUl9QTUQpCisJUE1EUygwLCBfX1BBR0VfS0VSTkVMX0xBUkdFX0VYRUMsIFBUUlNfUEVSX1BNRCkKIAogTkVYVF9QQUdFKGxldmVsMl9rZXJuZWxfcGd0KQotCS8qIDQwTUIga2VybmVsIG1hcHBpbmcuIFRoZSBrZXJuZWwgY29kZSBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhhdC4KLQkgICBXaGVuIHlvdSBjaGFuZ2UgdGhpcyBjaGFuZ2UgS0VSTkVMX1RFWFRfU0laRSBpbiBwYWdlLmggdG9vLiAqLwotCS8qICgyXjQ4LSgyKjEwMjQqMTAyNCoxMDI0KS0oKDJeMzkpKjUxMSktKCgyXjMwKSo1MTApKSA9IDAgKi8KLQlQTURTKDB4MDAwMDAwMDAwMDAwMDAwMCwgX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDfF9QQUdFX0dMT0JBTCwgS0VSTkVMX1RFWFRfU0laRS9QTURfU0laRSkKLQkvKiBNb2R1bGUgbWFwcGluZyBzdGFydHMgaGVyZSAqLwotCS5maWxsCShQVFJTX1BFUl9QTUQgLSAoS0VSTkVMX1RFWFRfU0laRS9QTURfU0laRSkpLDgsMAorCS8qCisJICogNTEyIE1CIGtlcm5lbCBtYXBwaW5nLiBXZSBzcGVuZCBhIGZ1bGwgcGFnZSBvbiB0aGlzIHBhZ2V0YWJsZQorCSAqIGFueXdheS4KKwkgKgorCSAqIFRoZSBrZXJuZWwgY29kZStkYXRhK2JzcyBtdXN0IG5vdCBiZSBiaWdnZXIgdGhhbiB0aGF0LgorCSAqCisJICogKE5PVEU6IGF0ICs1MTJNQiBzdGFydHMgdGhlIG1vZHVsZSBhcmVhLCBzZWUgTU9EVUxFU19WQUREUi4KKwkgKiAgSWYgeW91IHdhbnQgdG8gaW5jcmVhc2UgdGhpcyB0aGVuIGluY3JlYXNlIE1PRFVMRVNfVkFERFIKKwkgKiAgdG9vLikKKwkgKi8KKwlQTURTKDAsIF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQ3xfUEFHRV9HTE9CQUwsCisJCUtFUk5FTF9JTUFHRV9TSVpFL1BNRF9TSVpFKQogCiBORVhUX1BBR0UobGV2ZWwyX3NwYXJlX3BndCkKLQkuZmlsbCAgIDUxMiw4LDAKKwkuZmlsbCAgIDUxMiwgOCwgMAogCiAjdW5kZWYgUE1EUwogI3VuZGVmIE5FWFRfUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggNDI5ZDA4NC4uMzY2NTJlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC0xMzMsMTMgKzEzMywxNiBAQAogI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCiAJaHBldF9yZXNlcnZlX3RpbWVyKCZoZCwgMSk7CiAjZW5kaWYKKwogCWhkLmhkX2lycVswXSA9IEhQRVRfTEVHQUNZXzgyNTQ7CiAJaGQuaGRfaXJxWzFdID0gSFBFVF9MRUdBQ1lfUlRDOwogCi0gICAgICAgZm9yIChpID0gMjsgaSA8IG5ydGltZXJzOyB0aW1lcisrLCBpKyspCi0JICAgICAgIGhkLmhkX2lycVtpXSA9ICh0aW1lci0+aHBldF9jb25maWcgJiBUbl9JTlRfUk9VVEVfQ05GX01BU0spID4+Ci0JCSAgICAgICBUbl9JTlRfUk9VVEVfQ05GX1NISUZUOworCWZvciAoaSA9IDI7IGkgPCBucnRpbWVyczsgdGltZXIrKywgaSsrKQorCQloZC5oZF9pcnFbaV0gPSAodGltZXItPmhwZXRfY29uZmlnICYgVG5fSU5UX1JPVVRFX0NORl9NQVNLKSA+PgorCQkJVG5fSU5UX1JPVVRFX0NORl9TSElGVDsKKwogCWhwZXRfYWxsb2MoJmhkKTsKKwogfQogI2Vsc2UKIHN0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnModW5zaWduZWQgbG9uZyBpZCkgeyB9CkBAIC0zNjgsOCArMzcxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRyeSB0byBzZXR1cCB0aGUgSFBFVCB0aW1lcgorLyoqCisgKiBocGV0X2VuYWJsZSAtIFRyeSB0byBzZXR1cCB0aGUgSFBFVCB0aW1lci4gUmV0dXJucyAxIG9uIHN1Y2Nlc3MuCiAgKi8KIGludCBfX2luaXQgaHBldF9lbmFibGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Nl9rc3ltc18zMi5jCmluZGV4IDA2MTYyNzguLmRlYjQzNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYwpAQCAtMSwxMyArMSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0woX191cF93YWtldXApOwogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jIGIvYXJjaC94ODYva2VybmVsL2kzODcuYwppbmRleCAyNjcxOWJkLi5kYjY4MzliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKQEAgLTUsNTEgKzUsNDggQEAKICAqICBHZW5lcmFsIEZQVSBzdGF0ZSBoYW5kbGluZyBjbGVhbnVwcwogICoJR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPiwgTWF5IDIwMDAKICAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2kzODcuaD4KLSNpbmNsdWRlIDxhc20vbWF0aF9lbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21hdGhfZW11Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCi0jaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQzMi5oPgotI2luY2x1ZGUgPGFzbS91c2VyMzIuaD4KLQorIyBpbmNsdWRlIDxhc20vc2lnY29udGV4dDMyLmg+CisjIGluY2x1ZGUgPGFzbS91c2VyMzIuaD4KICNlbHNlCi0KLSNkZWZpbmUJc2F2ZV9pMzg3X2lhMzIJCXNhdmVfaTM4NwotI2RlZmluZQlyZXN0b3JlX2kzODdfaWEzMglyZXN0b3JlX2kzODcKLQotI2RlZmluZSBfZnBzdGF0ZV9pYTMyIAkJX2Zwc3RhdGUKLSNkZWZpbmUgdXNlcl9pMzg3X2lhMzJfc3RydWN0CXVzZXJfaTM4N19zdHJ1Y3QKLSNkZWZpbmUgdXNlcjMyX2Z4c3Jfc3RydWN0CXVzZXJfZnhzcl9zdHJ1Y3QKLQorIyBkZWZpbmUgc2F2ZV9pMzg3X2lhMzIJCXNhdmVfaTM4NworIyBkZWZpbmUgcmVzdG9yZV9pMzg3X2lhMzIJcmVzdG9yZV9pMzg3CisjIGRlZmluZSBfZnBzdGF0ZV9pYTMyCQlfZnBzdGF0ZQorIyBkZWZpbmUgdXNlcl9pMzg3X2lhMzJfc3RydWN0CXVzZXJfaTM4N19zdHJ1Y3QKKyMgZGVmaW5lIHVzZXIzMl9meHNyX3N0cnVjdAl1c2VyX2Z4c3Jfc3RydWN0CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NQVRIX0VNVUxBVElPTgotI2RlZmluZSBIQVZFX0hXRlAgKGJvb3RfY3B1X2RhdGEuaGFyZF9tYXRoKQorIyBkZWZpbmUgSEFWRV9IV0ZQCQkoYm9vdF9jcHVfZGF0YS5oYXJkX21hdGgpCiAjZWxzZQotI2RlZmluZSBIQVZFX0hXRlAgMQorIyBkZWZpbmUgSEFWRV9IV0ZQCQkxCiAjZW5kaWYKIAotdW5zaWduZWQgaW50IG14Y3NyX2ZlYXR1cmVfbWFzayBfX3JlYWRfbW9zdGx5ID0gMHhmZmZmZmZmZnU7CitzdGF0aWMgdW5zaWduZWQgaW50CQlteGNzcl9mZWF0dXJlX21hc2sgX19yZWFkX21vc3RseSA9IDB4ZmZmZmZmZmZ1OwordW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOworc3RhdGljIHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgZnhfc2NyYXRjaCBfX2NwdWluaXRkYXRhOwogCi12b2lkIG14Y3NyX2ZlYXR1cmVfbWFza19pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCBteGNzcl9mZWF0dXJlX21hc2tfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IDA7CisKIAljbHRzKCk7CiAJaWYgKGNwdV9oYXNfZnhzcikgewotCQltZW1zZXQoJmN1cnJlbnQtPnRocmVhZC5pMzg3LmZ4c2F2ZSwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSk7Ci0JCWFzbSB2b2xhdGlsZSgiZnhzYXZlICUwIiA6IDogIm0iIChjdXJyZW50LT50aHJlYWQuaTM4Ny5meHNhdmUpKTsKLQkJbWFzayA9IGN1cnJlbnQtPnRocmVhZC5pMzg3LmZ4c2F2ZS5teGNzcl9tYXNrOworCQltZW1zZXQoJmZ4X3NjcmF0Y2gsIDAsIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSk7CisJCWFzbSB2b2xhdGlsZSgiZnhzYXZlICUwIiA6IDogIm0iIChmeF9zY3JhdGNoKSk7CisJCW1hc2sgPSBmeF9zY3JhdGNoLm14Y3NyX21hc2s7CiAJCWlmIChtYXNrID09IDApCiAJCQltYXNrID0gMHgwMDAwZmZiZjsKIAl9CkBAIC01Nyw2ICs1NCwxNiBAQAogCXN0dHMoKTsKIH0KIAordm9pZCBfX2luaXQgaW5pdF90aHJlYWRfeHN0YXRlKHZvaWQpCit7CisJaWYgKGNwdV9oYXNfZnhzcikKKwkJeHN0YXRlX3NpemUgPSBzaXplb2Yoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWVsc2UKKwkJeHN0YXRlX3NpemUgPSBzaXplb2Yoc3RydWN0IGkzODdfZnNhdmVfc3RydWN0KTsKKyNlbmRpZgorfQorCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogLyoKICAqIENhbGxlZCBhdCBib290dXAgdG8gc2V0IHVwIHRoZSBpbml0aWFsIEZQVSBzdGF0ZSB0aGF0IGlzIGxhdGVyIGNsb25lZApAQCAtNjUsMTQgKzcyLDExIEBACiB2b2lkIF9fY3B1aW5pdCBmcHVfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgb2xkY3IwID0gcmVhZF9jcjAoKTsKLQlleHRlcm4gdm9pZCBfX2JhZF9meHNhdmVfYWxpZ25tZW50KHZvaWQpOwogCi0JaWYgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmkzODcuZnhzYXZlKSAmIDE1KQotCQlfX2JhZF9meHNhdmVfYWxpZ25tZW50KCk7CiAJc2V0X2luX2NyNChYODZfQ1I0X09TRlhTUik7CiAJc2V0X2luX2NyNChYODZfQ1I0X09TWE1NRVhDUFQpOwogCi0Jd3JpdGVfY3IwKG9sZGNyMCAmIH4oKDFVTDw8Myl8KDFVTDw8MikpKTsgLyogY2xlYXIgVFMgYW5kIEVNICovCisJd3JpdGVfY3IwKG9sZGNyMCAmIH4oWDg2X0NSMF9UU3xYODZfQ1IwX0VNKSk7IC8qIGNsZWFyIFRTIGFuZCBFTSAqLwogCiAJbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQoKTsKIAkvKiBjbGVhbiBzdGF0ZSBpbiBpbml0ICovCkBAIC04NywzMiArOTEsNDQgQEAKICAqIHZhbHVlIGF0IHJlc2V0IGlmIHdlIHN1cHBvcnQgWE1NIGluc3RydWN0aW9ucyBhbmQgdGhlbgogICogcmVtZWJlciB0aGUgY3VycmVudCB0YXNrIGhhcyB1c2VkIHRoZSBGUFUuCiAgKi8KLXZvaWQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJaWYgKHRza191c2VkX21hdGgodHNrKSkgewogCQlpZiAodHNrID09IGN1cnJlbnQpCiAJCQl1bmxhenlfZnB1KHRzayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBNZW1vcnkgYWxsb2NhdGlvbiBhdCB0aGUgZmlyc3QgdXNhZ2Ugb2YgdGhlIEZQVSBhbmQgb3RoZXIgc3RhdGUuCisJICovCisJaWYgKCF0c2stPnRocmVhZC54c3RhdGUpIHsKKwkJdHNrLT50aHJlYWQueHN0YXRlID0ga21lbV9jYWNoZV9hbGxvYyh0YXNrX3hzdGF0ZV9jYWNoZXAsCisJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0c2stPnRocmVhZC54c3RhdGUpCisJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpZiAoY3B1X2hhc19meHNyKSB7Ci0JCW1lbXNldCgmdHNrLT50aHJlYWQuaTM4Ny5meHNhdmUsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCkpOwotCQl0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZS5jd2QgPSAweDM3ZjsKKwkJc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnggPSAmdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmU7CisKKwkJbWVtc2V0KGZ4LCAwLCB4c3RhdGVfc2l6ZSk7CisJCWZ4LT5jd2QgPSAweDM3ZjsKIAkJaWYgKGNwdV9oYXNfeG1tKQotCQkJdHNrLT50aHJlYWQuaTM4Ny5meHNhdmUubXhjc3IgPSBNWENTUl9ERUZBVUxUOworCQkJZngtPm14Y3NyID0gTVhDU1JfREVGQVVMVDsKIAl9IGVsc2UgewotCQltZW1zZXQoJnRzay0+dGhyZWFkLmkzODcuZnNhdmUsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGkzODdfZnNhdmVfc3RydWN0KSk7Ci0JCXRzay0+dGhyZWFkLmkzODcuZnNhdmUuY3dkID0gMHhmZmZmMDM3ZnU7Ci0JCXRzay0+dGhyZWFkLmkzODcuZnNhdmUuc3dkID0gMHhmZmZmMDAwMHU7Ci0JCXRzay0+dGhyZWFkLmkzODcuZnNhdmUudHdkID0gMHhmZmZmZmZmZnU7Ci0JCXRzay0+dGhyZWFkLmkzODcuZnNhdmUuZm9zID0gMHhmZmZmMDAwMHU7CisJCXN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCAqZnAgPSAmdHNrLT50aHJlYWQueHN0YXRlLT5mc2F2ZTsKKwkJbWVtc2V0KGZwLCAwLCB4c3RhdGVfc2l6ZSk7CisJCWZwLT5jd2QgPSAweGZmZmYwMzdmdTsKKwkJZnAtPnN3ZCA9IDB4ZmZmZjAwMDB1OworCQlmcC0+dHdkID0gMHhmZmZmZmZmZnU7CisJCWZwLT5mb3MgPSAweGZmZmYwMDAwdTsKIAl9CiAJLyoKIAkgKiBPbmx5IHRoZSBkZXZpY2Ugbm90IGF2YWlsYWJsZSBleGNlcHRpb24gb3IgcHRyYWNlIGNhbiBjYWxsIGluaXRfZnB1LgogCSAqLwogCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0c2spOworCXJldHVybiAwOwogfQogCiBpbnQgZnByZWdzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQpCkBAIC0xMjksMTMgKzE0NSwxNyBAQAogCQl1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCXZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQogeworCWludCByZXQ7CisKIAlpZiAoIWNwdV9oYXNfZnhzcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl1bmxhenlfZnB1KHRhcmdldCk7CisJcmV0ID0gaW5pdF9mcHUodGFyZ2V0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJICAgJnRhcmdldC0+dGhyZWFkLmkzODcuZnhzYXZlLCAwLCAtMSk7CisJCQkJICAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLCAwLCAtMSk7CiB9CiAKIGludCB4ZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCkBAIC0xNDcsMTYgKzE2NywxOSBAQAogCWlmICghY3B1X2hhc19meHNyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXVubGF6eV9mcHUodGFyZ2V0KTsKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFyZ2V0KTsKIAogCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkgJnRhcmdldC0+dGhyZWFkLmkzODcuZnhzYXZlLCAwLCAtMSk7CisJCQkJICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSwgMCwgLTEpOwogCiAJLyoKIAkgKiBteGNzciByZXNlcnZlZCBiaXRzIG11c3QgYmUgbWFza2VkIHRvIHplcm8gZm9yIHNlY3VyaXR5IHJlYXNvbnMuCiAJICovCi0JdGFyZ2V0LT50aHJlYWQuaTM4Ny5meHNhdmUubXhjc3IgJj0gbXhjc3JfZmVhdHVyZV9tYXNrOworCXRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLm14Y3NyICY9IG14Y3NyX2ZlYXR1cmVfbWFzazsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzgsNiArMjAxLDcgQEAKIAl0bXAgPSAodG1wIHwgKHRtcCA+PiAxKSkgJiAweDMzMzM7IC8qIDAwVlYwMFZWMDBWVjAwVlYgKi8KIAl0bXAgPSAodG1wIHwgKHRtcCA+PiAyKSkgJiAweDBmMGY7IC8qIDAwMDBWVlZWMDAwMFZWVlYgKi8KIAl0bXAgPSAodG1wIHwgKHRtcCA+PiA0KSkgJiAweDAwZmY7IC8qIDAwMDAwMDAwVlZWVlZWVlYgKi8KKwogCXJldHVybiB0bXA7CiB9CiAKQEAgLTIzMiwxMCArMjU2LDEwIEBACiAgKiBGWFNSIGZsb2F0aW5nIHBvaW50IGVudmlyb25tZW50IGNvbnZlcnNpb25zLgogICovCiAKLXN0YXRpYyB2b2lkIGNvbnZlcnRfZnJvbV9meHNyKHN0cnVjdCB1c2VyX2kzODdfaWEzMl9zdHJ1Y3QgKmVudiwKLQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RhdGljIHZvaWQKK2NvbnZlcnRfZnJvbV9meHNyKHN0cnVjdCB1c2VyX2kzODdfaWEzMl9zdHJ1Y3QgKmVudiwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0Jc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnhzYXZlID0gJnRzay0+dGhyZWFkLmkzODcuZnhzYXZlOworCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmZ4c2F2ZSA9ICZ0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZTsKIAlzdHJ1Y3QgX2ZwcmVnICp0byA9IChzdHJ1Y3QgX2ZwcmVnICopICZlbnYtPnN0X3NwYWNlWzBdOwogCXN0cnVjdCBfZnB4cmVnICpmcm9tID0gKHN0cnVjdCBfZnB4cmVnICopICZmeHNhdmUtPnN0X3NwYWNlWzBdOwogCWludCBpOwpAQCAtMjUyLDE2ICsyNzYsMTcgQEAKIAkJICogc2hvdWxkIGJlIGFjdHVhbGx5IGRzL2NzIGF0IGZwdSBleGNlcHRpb24gdGltZSwgYnV0CiAJCSAqIHRoYXQgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSBpbiA2NGJpdCBtb2RlLgogCQkgKi8KLQkJYXNtKCJtb3YgJSVkcywlMCIgOiAiPXIiIChlbnYtPmZvcykpOwotCQlhc20oIm1vdiAlJWNzLCUwIiA6ICI9ciIgKGVudi0+ZmNzKSk7CisJCWFzbSgibW92ICUlZHMsICVbZm9zXSIgOiBbZm9zXSAiPXIiIChlbnYtPmZvcykpOworCQlhc20oIm1vdiAlJWNzLCAlW2Zjc10iIDogW2Zjc10gIj1yIiAoZW52LT5mY3MpKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0c2spOworCiAJCWVudi0+Zm9zID0gMHhmZmZmMDAwMCB8IHRzay0+dGhyZWFkLmRzOwogCQllbnYtPmZjcyA9IHJlZ3MtPmNzOwogCX0KICNlbHNlCiAJZW52LT5maXAgPSBmeHNhdmUtPmZpcDsKLQllbnYtPmZjcyA9IGZ4c2F2ZS0+ZmNzOworCWVudi0+ZmNzID0gKHUxNikgZnhzYXZlLT5mY3MgfCAoKHUzMikgZnhzYXZlLT5mb3AgPDwgMTYpOwogCWVudi0+Zm9vID0gZnhzYXZlLT5mb287CiAJZW52LT5mb3MgPSBmeHNhdmUtPmZvczsKICNlbmRpZgpAQCAtMjc0LDcgKzI5OSw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IHVzZXJfaTM4N19pYTMyX3N0cnVjdCAqZW52KQogCiB7Ci0Jc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnhzYXZlID0gJnRzay0+dGhyZWFkLmkzODcuZnhzYXZlOworCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgKmZ4c2F2ZSA9ICZ0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZTsKIAlzdHJ1Y3QgX2ZwcmVnICpmcm9tID0gKHN0cnVjdCBfZnByZWcgKikgJmVudi0+c3Rfc3BhY2VbMF07CiAJc3RydWN0IF9mcHhyZWcgKnRvID0gKHN0cnVjdCBfZnB4cmVnICopICZmeHNhdmUtPnN0X3NwYWNlWzBdOwogCWludCBpOwpAQCAtMzAzLDE1ICszMjgsMjAgQEAKIAkgICAgICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCiB7CiAJc3RydWN0IHVzZXJfaTM4N19pYTMyX3N0cnVjdCBlbnY7CisJaW50IHJldDsKIAogCWlmICghSEFWRV9IV0ZQKQogCQlyZXR1cm4gZnByZWdzX3NvZnRfZ2V0KHRhcmdldCwgcmVnc2V0LCBwb3MsIGNvdW50LCBrYnVmLCB1YnVmKTsKIAotCXVubGF6eV9mcHUodGFyZ2V0KTsKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlpZiAoIWNwdV9oYXNfZnhzcikKKwlpZiAoIWNwdV9oYXNfZnhzcikgewogCQlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkJICAgJnRhcmdldC0+dGhyZWFkLmkzODcuZnNhdmUsIDAsIC0xKTsKKwkJCQkJICAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+ZnNhdmUsIDAsCisJCQkJCSAgIC0xKTsKKwl9CiAKIAlpZiAoa2J1ZiAmJiBwb3MgPT0gMCAmJiBjb3VudCA9PSBzaXplb2YoZW52KSkgewogCQljb252ZXJ0X2Zyb21fZnhzcihrYnVmLCB0YXJnZXQpOwpAQCAtMzE5LDYgKzM0OSw3IEBACiAJfQogCiAJY29udmVydF9mcm9tX2Z4c3IoJmVudiwgdGFyZ2V0KTsKKwogCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCAmZW52LCAwLCAtMSk7CiB9CiAKQEAgLTMzMiwxMiArMzYzLDE2IEBACiAJaWYgKCFIQVZFX0hXRlApCiAJCXJldHVybiBmcHJlZ3Nfc29mdF9zZXQodGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsIGtidWYsIHVidWYpOwogCi0JdW5sYXp5X2ZwdSh0YXJnZXQpOworCXJldCA9IGluaXRfZnB1KHRhcmdldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXJnZXQpOwogCi0JaWYgKCFjcHVfaGFzX2Z4c3IpCisJaWYgKCFjcHVfaGFzX2Z4c3IpIHsKIAkJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkJICAmdGFyZ2V0LT50aHJlYWQuaTM4Ny5mc2F2ZSwgMCwgLTEpOworCQkJCQkgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZzYXZlLCAwLCAtMSk7CisJfQogCiAJaWYgKHBvcyA+IDAgfHwgY291bnQgPCBzaXplb2YoZW52KSkKIAkJY29udmVydF9mcm9tX2Z4c3IoJmVudiwgdGFyZ2V0KTsKQEAgLTM1NiwxMSArMzkxLDExIEBACiBzdGF0aWMgaW5saW5lIGludCBzYXZlX2kzODdfZnNhdmUoc3RydWN0IF9mcHN0YXRlX2lhMzIgX191c2VyICpidWYpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCAqZnAgPSAmdHNrLT50aHJlYWQueHN0YXRlLT5mc2F2ZTsKIAogCXVubGF6eV9mcHUodHNrKTsKLQl0c2stPnRocmVhZC5pMzg3LmZzYXZlLnN0YXR1cyA9IHRzay0+dGhyZWFkLmkzODcuZnNhdmUuc3dkOwotCWlmIChfX2NvcHlfdG9fdXNlcihidWYsICZ0c2stPnRocmVhZC5pMzg3LmZzYXZlLAotCQkJICAgc2l6ZW9mKHN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCkpKQorCWZwLT5zdGF0dXMgPSBmcC0+c3dkOworCWlmIChfX2NvcHlfdG9fdXNlcihidWYsIGZwLCBzaXplb2Yoc3RydWN0IGkzODdfZnNhdmVfc3RydWN0KSkpCiAJCXJldHVybiAtMTsKIAlyZXR1cm4gMTsKIH0KQEAgLTM2OCw2ICs0MDMsNyBAQAogc3RhdGljIGludCBzYXZlX2kzODdfZnhzYXZlKHN0cnVjdCBfZnBzdGF0ZV9pYTMyIF9fdXNlciAqYnVmKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCA9ICZ0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZTsKIAlzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IGVudjsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzc3LDEyICs0MTMsMTIgQEAKIAlpZiAoX19jb3B5X3RvX3VzZXIoYnVmLCAmZW52LCBzaXplb2YoZW52KSkpCiAJCXJldHVybiAtMTsKIAotCWVyciB8PSBfX3B1dF91c2VyKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlLnN3ZCwgJmJ1Zi0+c3RhdHVzKTsKKwllcnIgfD0gX19wdXRfdXNlcihmeC0+c3dkLCAmYnVmLT5zdGF0dXMpOwogCWVyciB8PSBfX3B1dF91c2VyKFg4Nl9GWFNSX01BR0lDLCAmYnVmLT5tYWdpYyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIC0xOwogCi0JaWYgKF9fY29weV90b191c2VyKCZidWYtPl9meHNyX2VudlswXSwgJnRzay0+dGhyZWFkLmkzODcuZnhzYXZlLAorCWlmIChfX2NvcHlfdG9fdXNlcigmYnVmLT5fZnhzcl9lbnZbMF0sIGZ4LAogCQkJICAgc2l6ZW9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QpKSkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAxOwpAQCAtMzkyLDQ2ICs0MjgsNDggQEAKIHsKIAlpZiAoIXVzZWRfbWF0aCgpKQogCQlyZXR1cm4gMDsKLQotCS8qIFRoaXMgd2lsbCBjYXVzZSBhICJmaW5pdCIgdG8gYmUgdHJpZ2dlcmVkIGJ5IHRoZSBuZXh0CisJLyoKKwkgKiBUaGlzIHdpbGwgY2F1c2UgYSAiZmluaXQiIHRvIGJlIHRyaWdnZXJlZCBieSB0aGUgbmV4dAogCSAqIGF0dGVtcHRlZCBGUFUgb3BlcmF0aW9uIGJ5IHRoZSAnY3VycmVudCcgcHJvY2Vzcy4KIAkgKi8KIAljbGVhcl91c2VkX21hdGgoKTsKIAotCWlmIChIQVZFX0hXRlApIHsKLQkJaWYgKGNwdV9oYXNfZnhzcikgewotCQkJcmV0dXJuIHNhdmVfaTM4N19meHNhdmUoYnVmKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBzYXZlX2kzODdfZnNhdmUoYnVmKTsKLQkJfQotCX0gZWxzZSB7CisJaWYgKCFIQVZFX0hXRlApIHsKIAkJcmV0dXJuIGZwcmVnc19zb2Z0X2dldChjdXJyZW50LCBOVUxMLAogCQkJCSAgICAgICAwLCBzaXplb2Yoc3RydWN0IHVzZXJfaTM4N19pYTMyX3N0cnVjdCksCiAJCQkJICAgICAgIE5VTEwsIGJ1ZikgPyAtMSA6IDE7CiAJfQorCisJaWYgKGNwdV9oYXNfZnhzcikKKwkJcmV0dXJuIHNhdmVfaTM4N19meHNhdmUoYnVmKTsKKwllbHNlCisJCXJldHVybiBzYXZlX2kzODdfZnNhdmUoYnVmKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcmVzdG9yZV9pMzg3X2ZzYXZlKHN0cnVjdCBfZnBzdGF0ZV9pYTMyIF9fdXNlciAqYnVmKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwogCWNsZWFyX2ZwdSh0c2spOwotCXJldHVybiBfX2NvcHlfZnJvbV91c2VyKCZ0c2stPnRocmVhZC5pMzg3LmZzYXZlLCBidWYsCisJcmV0dXJuIF9fY29weV9mcm9tX3VzZXIoJnRzay0+dGhyZWFkLnhzdGF0ZS0+ZnNhdmUsIGJ1ZiwKIAkJCQlzaXplb2Yoc3RydWN0IGkzODdfZnNhdmVfc3RydWN0KSk7CiB9CiAKIHN0YXRpYyBpbnQgcmVzdG9yZV9pMzg3X2Z4c2F2ZShzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBfX3VzZXIgKmJ1ZikKIHsKLQlpbnQgZXJyOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IGVudjsKKwlpbnQgZXJyOworCiAJY2xlYXJfZnB1KHRzayk7Ci0JZXJyID0gX19jb3B5X2Zyb21fdXNlcigmdHNrLT50aHJlYWQuaTM4Ny5meHNhdmUsICZidWYtPl9meHNyX2VudlswXSwKKwllcnIgPSBfX2NvcHlfZnJvbV91c2VyKCZ0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSwgJmJ1Zi0+X2Z4c3JfZW52WzBdLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSk7CiAJLyogbXhjc3IgcmVzZXJ2ZWQgYml0cyBtdXN0IGJlIG1hc2tlZCB0byB6ZXJvIGZvciBzZWN1cml0eSByZWFzb25zICovCi0JdHNrLT50aHJlYWQuaTM4Ny5meHNhdmUubXhjc3IgJj0gbXhjc3JfZmVhdHVyZV9tYXNrOworCXRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLm14Y3NyICY9IG14Y3NyX2ZlYXR1cmVfbWFzazsKIAlpZiAoZXJyIHx8IF9fY29weV9mcm9tX3VzZXIoJmVudiwgYnVmLCBzaXplb2YoZW52KSkpCiAJCXJldHVybiAxOwogCWNvbnZlcnRfdG9fZnhzcih0c2ssICZlbnYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MCwxNyArNDc4LDE3IEBACiAJaW50IGVycjsKIAogCWlmIChIQVZFX0hXRlApIHsKLQkJaWYgKGNwdV9oYXNfZnhzcikgeworCQlpZiAoY3B1X2hhc19meHNyKQogCQkJZXJyID0gcmVzdG9yZV9pMzg3X2Z4c2F2ZShidWYpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQllcnIgPSByZXN0b3JlX2kzODdfZnNhdmUoYnVmKTsKLQkJfQogCX0gZWxzZSB7CiAJCWVyciA9IGZwcmVnc19zb2Z0X3NldChjdXJyZW50LCBOVUxMLAogCQkJCSAgICAgIDAsIHNpemVvZihzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0KSwKIAkJCQkgICAgICBOVUxMLCBidWYpICE9IDA7CiAJfQogCXNldF91c2VkX21hdGgoKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ2Myw4ICs1MDEsOCBAQAogICovCiBpbnQgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0ICpmcHUpCiB7Ci0JaW50IGZwdmFsaWQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCWludCBmcHZhbGlkOwogCiAJZnB2YWxpZCA9ICEhdXNlZF9tYXRoKCk7CiAJaWYgKGZwdmFsaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pODI1OV8zMi5jCmluZGV4IDJkMjViNzcuLmZlNjMxOTY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTlfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTlfMzIuYwpAQCAtMjYsOCArMjYsNiBAQAogICogcHJlc2VudCBpbiB0aGUgbWFqb3JpdHkgb2YgUEMvQVQgYm94ZXMuCiAgKiBwbHVzIHNvbWUgZ2VuZXJpYyB4ODYgc3BlY2lmaWMgdGhpbmdzIGlmIGdlbmVyaWMgc3BlY2lmaWNzIG1ha2VzCiAgKiBhbnkgc2Vuc2UgYXQgYWxsLgotICogdGhpcyBmaWxlIHNob3VsZCBiZWNvbWUgYXJjaC9pMzg2L2tlcm5lbC9pcnEuYyB3aGVuIHRoZSBvbGQgaXJxLmMKLSAqIG1vdmVzIHRvIGFyY2ggaW5kZXBlbmRlbnQgbGFuZAogICovCiAKIHN0YXRpYyBpbnQgaTgyNTlBX2F1dG9fZW9pOwpAQCAtMzYyLDIzICszNjAsMTIgQEAKICNlbmRpZgogCWluaXRfODI1OUEoMCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKLQkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwotCi0JCWlmIChpIDwgMTYpIHsKLQkJCS8qCi0JCQkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgotCQkJICovCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpLCAmaTgyNTlBX2NoaXAsCi0JCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAiWFQiKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiAnaGlnaCcgUENJIElSUXMgZmlsbGVkIGluIG9uIGRlbWFuZAotCQkJICovCi0JCQlpcnFfZGVzY1tpXS5jaGlwID0gJm5vX2lycV9jaGlwOwotCQl9CisJLyoKKwkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZpODI1OUFfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgIlhUIik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW5pdF90YXNrLmMKaW5kZXggNWIzY2U3OS4uM2QwMWU0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2luaXRfdGFzay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMTUsNiArMTUsNyBAQAogc3RhdGljIHN0cnVjdCBzaWduYWxfc3RydWN0IGluaXRfc2lnbmFscyA9IElOSVRfU0lHTkFMUyhpbml0X3NpZ25hbHMpOwogc3RhdGljIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCBpbml0X3NpZ2hhbmQgPSBJTklUX1NJR0hBTkQoaW5pdF9zaWdoYW5kKTsKIHN0cnVjdCBtbV9zdHJ1Y3QgaW5pdF9tbSA9IElOSVRfTU0oaW5pdF9tbSk7CitFWFBPUlRfVU5VU0VEX1NZTUJPTChpbml0X21tKTsgLyogd2lsbCBiZSByZW1vdmVkIGluIDIuNi4yNiAqLwogCiAvKgogICogSW5pdGlhbCB0aHJlYWQgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMKaW5kZXggNGNhNTQ4Ni4uMmUyZjQyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY18zMi5jCkBAIC03MSw2ICs3MSwxNiBAQAogICovCiBpbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1tNQVhfSU9fQVBJQ1NdOwogCisvKiBJL08gQVBJQyBlbnRyaWVzICovCitzdHJ1Y3QgbXBjX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOworaW50IG5yX2lvYXBpY3M7CisKKy8qIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLworc3RydWN0IG1wY19jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKKworLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK2ludCBtcF9pcnFfZW50cmllczsKKwogc3RhdGljIGludCBkaXNhYmxlX3RpbWVyX3Bpbl8xIF9faW5pdGRhdGE7CiAKIC8qCkBAIC04MTAsMTAgKzgyMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKIAkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wY19zcmNidXM7CiAKLQkJaWYgKChtcF9idXNfaWRfdG9fdHlwZVtsYnVzXSA9PSBNUF9CVVNfSVNBIHx8Ci0JCSAgICAgbXBfYnVzX2lkX3RvX3R5cGVbbGJ1c10gPT0gTVBfQlVTX0VJU0EgfHwKLQkJICAgICBtcF9idXNfaWRfdG9fdHlwZVtsYnVzXSA9PSBNUF9CVVNfTUNBCi0JCSAgICApICYmCisJCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKIAkJICAgIChtcF9pcnFzW2ldLm1wY19pcnF0eXBlID09IHR5cGUpICYmCiAJCSAgICAobXBfaXJxc1tpXS5tcGNfc3JjYnVzaXJxID09IGlycSkpCiAKQEAgLTgyOSwxMCArODM2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewogCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBjX3NyY2J1czsKIAotCQlpZiAoKG1wX2J1c19pZF90b190eXBlW2xidXNdID09IE1QX0JVU19JU0EgfHwKLQkJICAgICBtcF9idXNfaWRfdG9fdHlwZVtsYnVzXSA9PSBNUF9CVVNfRUlTQSB8fAotCQkgICAgIG1wX2J1c19pZF90b190eXBlW2xidXNdID09IE1QX0JVU19NQ0EKLQkJICAgICkgJiYKKwkJaWYgKHRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgogCQkgICAgKG1wX2lycXNbaV0ubXBjX2lycXR5cGUgPT0gdHlwZSkgJiYKIAkJICAgIChtcF9pcnFzW2ldLm1wY19zcmNidXNpcnEgPT0gaXJxKSkKIAkJCWJyZWFrOwpAQCAtODcyLDcgKzg3Niw3IEBACiAJCQkgICAgbXBfaXJxc1tpXS5tcGNfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkKIAkJCQlicmVhazsKIAotCQlpZiAoKG1wX2J1c19pZF90b190eXBlW2xidXNdID09IE1QX0JVU19QQ0kpICYmCisJCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCiAJCSAgICAhbXBfaXJxc1tpXS5tcGNfaXJxdHlwZSAmJgogCQkgICAgKGJ1cyA9PSBsYnVzKSAmJgogCQkgICAgKHNsb3QgPT0gKChtcF9pcnFzW2ldLm1wY19zcmNidXNpcnEgPj4gMikgJiAweDFmKSkpIHsKQEAgLTkyMSw2ICs5MjUsNyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCiAvKgogICogRUlTQSBFZGdlL0xldmVsIGNvbnRyb2wgcmVnaXN0ZXIsIEVMQ1IKICAqLwpAQCAtOTM0LDYgKzkzOSwxMyBAQAogCQkJIkJyb2tlbiBNUHRhYmxlIHJlcG9ydHMgSVNBIGlycSAlZFxuIiwgaXJxKTsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgorCisvKiBJU0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gZWRnZSB0cmlnZ2VyZWQsCisgKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KKworI2RlZmluZSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCkJKDApCisjZGVmaW5lIGRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkJKDApCiAKIC8qIEVJU0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gYW5kIGNhbiBiZSBlZGdlIG9yIGxldmVsCiAgKiB0cmlnZ2VyIGRlcGVuZGluZyBvbiB0aGUgRUxDUiB2YWx1ZS4gIElmIGFuIGludGVycnVwdCBpcyBsaXN0ZWQgYXMKQEAgLTk0MSwxMyArOTUzLDcgQEAKICAqIGJlIHJlYWQgaW4gZnJvbSB0aGUgRUxDUiAqLwogCiAjZGVmaW5lIGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCkJKEVJU0FfRUxDUihtcF9pcnFzW2lkeF0ubXBjX3NyY2J1c2lycSkpCi0jZGVmaW5lIGRlZmF1bHRfRUlTQV9wb2xhcml0eShpZHgpCSgwKQotCi0vKiBJU0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gZWRnZSB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCkJKDApCi0jZGVmaW5lIGRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkJKDApCisjZGVmaW5lIGRlZmF1bHRfRUlTQV9wb2xhcml0eShpZHgpCWRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkKIAogLyogUENJIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSBvbmUgbGV2ZWwgdHJpZ2dlcmVkLAogICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCkBAIC05NTksNyArOTY1LDcgQEAKICAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwogCiAjZGVmaW5lIGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KQkoMSkKLSNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQkoMCkKKyNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCiAKIHN0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCiB7CkBAIC05NzMsMzUgKzk3OSw5IEBACiAJewogCQljYXNlIDA6IC8qIGNvbmZvcm1zLCBpZS4gYnVzLXR5cGUgZGVwZW5kZW50IHBvbGFyaXR5ICovCiAJCXsKLQkJCXN3aXRjaCAobXBfYnVzX2lkX3RvX3R5cGVbYnVzXSkKLQkJCXsKLQkJCQljYXNlIE1QX0JVU19JU0E6IC8qIElTQSBwaW4gKi8KLQkJCQl7Ci0JCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWNhc2UgTVBfQlVTX0VJU0E6IC8qIEVJU0EgcGluICovCi0JCQkJewotCQkJCQlwb2xhcml0eSA9IGRlZmF1bHRfRUlTQV9wb2xhcml0eShpZHgpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJY2FzZSBNUF9CVVNfUENJOiAvKiBQQ0kgcGluICovCi0JCQkJewotCQkJCQlwb2xhcml0eSA9IGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQljYXNlIE1QX0JVU19NQ0E6IC8qIE1DQSBwaW4gKi8KLQkJCQl7Ci0JCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWRlZmF1bHQ6Ci0JCQkJewotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJCQkJcG9sYXJpdHkgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CisJCQlwb2xhcml0eSA9IHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpPworCQkJCWRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCk6CisJCQkJZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgMTogLyogaGlnaCBhY3RpdmUgKi8KQEAgLTEwNDIsMTEgKzEwMjIsMTUgQEAKIAl7CiAJCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgKi8KIAkJeworCQkJdHJpZ2dlciA9IHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpPworCQkJCQlkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCk6CisJCQkJCWRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KTsKKyNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCiAJCQlzd2l0Y2ggKG1wX2J1c19pZF90b190eXBlW2J1c10pCiAJCQl7CiAJCQkJY2FzZSBNUF9CVVNfSVNBOiAvKiBJU0EgcGluICovCiAJCQkJewotCQkJCQl0cmlnZ2VyID0gZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpOworCQkJCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCWNhc2UgTVBfQlVTX0VJU0E6IC8qIEVJU0EgcGluICovCkBAIC0xMDU2LDcgKzEwNDAsNyBAQAogCQkJCX0KIAkJCQljYXNlIE1QX0JVU19QQ0k6IC8qIFBDSSBwaW4gKi8KIAkJCQl7Ci0JCQkJCXRyaWdnZXIgPSBkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCk7CisJCQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQkJY2FzZSBNUF9CVVNfTUNBOiAvKiBNQ0EgcGluICovCkBAIC0xMDcxLDYgKzEwNTUsNyBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CisjZW5kaWYKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgMTogLyogZWRnZSAqLwpAQCAtMTEyMCwzOSArMTEwNSwyMiBAQAogCWlmIChtcF9pcnFzW2lkeF0ubXBjX2RzdGlycSAhPSBwaW4pCiAJCXByaW50ayhLRVJOX0VSUiAiYnJva2VuIEJJT1Mgb3IgTVBUQUJMRSBwYXJzZXIsIGF5aWVlISFcbiIpOwogCi0Jc3dpdGNoIChtcF9idXNfaWRfdG9fdHlwZVtidXNdKQotCXsKLQkJY2FzZSBNUF9CVVNfSVNBOiAvKiBJU0EgcGluICovCi0JCWNhc2UgTVBfQlVTX0VJU0E6Ci0JCWNhc2UgTVBfQlVTX01DQToKLQkJewotCQkJaXJxID0gbXBfaXJxc1tpZHhdLm1wY19zcmNidXNpcnE7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIE1QX0JVU19QQ0k6IC8qIFBDSSBwaW4gKi8KLQkJewotCQkJLyoKLQkJCSAqIFBDSSBJUlFzIGFyZSBtYXBwZWQgaW4gb3JkZXIKLQkJCSAqLwotCQkJaSA9IGlycSA9IDA7Ci0JCQl3aGlsZSAoaSA8IGFwaWMpCi0JCQkJaXJxICs9IG5yX2lvYXBpY19yZWdpc3RlcnNbaSsrXTsKLQkJCWlycSArPSBwaW47CisJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQorCQlpcnEgPSBtcF9pcnFzW2lkeF0ubXBjX3NyY2J1c2lycTsKKwllbHNlIHsKKwkJLyoKKwkJICogUENJIElSUXMgYXJlIG1hcHBlZCBpbiBvcmRlcgorCQkgKi8KKwkJaSA9IGlycSA9IDA7CisJCXdoaWxlIChpIDwgYXBpYykKKwkJCWlycSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2krK107CisJCWlycSArPSBwaW47CiAKLQkJCS8qCi0JCQkgKiBGb3IgTVBTIG1vZGUsIHNvIGZhciBvbmx5IG5lZWRlZCBieSBFUzcwMDAgcGxhdGZvcm0KLQkJCSAqLwotCQkJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCi0JCQkJaXJxID0gaW9hcGljX3JlbnVtYmVyX2lycShhcGljLCBpcnEpOwotCi0JCQlicmVhazsKLQkJfQotCQlkZWZhdWx0OgotCQl7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVua25vd24gYnVzIHR5cGUgJWQuXG4iLGJ1cyk7IAotCQkJaXJxID0gMDsKLQkJCWJyZWFrOwotCQl9CisJCS8qCisJCSAqIEZvciBNUFMgbW9kZSwgc28gZmFyIG9ubHkgbmVlZGVkIGJ5IEVTNzAwMCBwbGF0Zm9ybQorCQkgKi8KKwkJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCisJCQlpcnEgPSBpb2FwaWNfcmVudW1iZXJfaXJxKGFwaWMsIGlycSk7CiAJfQogCiAJLyoKQEAgLTEyNjAsNyArMTIyOCw2IEBACiB7CiAJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CiAJaW50IGFwaWMsIHBpbiwgaWR4LCBpcnEsIGZpcnN0X25vdGNvbiA9IDEsIHZlY3RvcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHICJpbml0IElPX0FQSUMgSVJRc1xuIik7CiAKQEAgLTEzMjYsOSArMTI5Myw3IEBACiAJCQlpZiAoIWFwaWMgJiYgKGlycSA8IDE2KSkKIAkJCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwogCQl9Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlfX2lvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwogCX0KIAl9CiAKQEAgLTE1MjQsOCArMTQ4OSw4IEBACiAKIAlwcmludGsoIlxuIiBLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgSUQ6ICAgICAgJTA4eCAoJTAxeClcbiIsIHYsIEdFVF9BUElDX0lEKHYpKTsKKwlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBJRDogICAgICAlMDh4ICglMDF4KVxuIiwgdiwKKwkJCUdFVF9BUElDX0lEKHJlYWRfYXBpY19pZCgpKSk7CiAJdiA9IGFwaWNfcmVhZChBUElDX0xWUik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgVkVSU0lPTjogJTA4eFxuIiwgdik7CiAJdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2KTsKQEAgLTE3MzQsNyArMTY5OSw3IEBACiAJCWVudHJ5LmRlbGl2ZXJ5X21vZGUgICA9IGRlc3RfRXh0SU5UOyAvKiBFeHRJbnQgKi8KIAkJZW50cnkudmVjdG9yICAgICAgICAgID0gMDsKIAkJZW50cnkuZGVzdC5waHlzaWNhbC5waHlzaWNhbF9kZXN0ID0KLQkJCQkJR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKKwkJCQkJR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpOwogCiAJCS8qCiAJCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKQEAgLTIwMzEsOCArMTk5Niw3IEBACiAJICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCiAJICovCiAJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTIDsgaXJxKyspIHsKLQkJaW50IHRtcCA9IGlycTsKLQkJaWYgKElPX0FQSUNfSVJRKHRtcCkgJiYgIWlycV92ZWN0b3JbdG1wXSkgeworCQlpZiAoSU9fQVBJQ19JUlEoaXJxKSAmJiAhaXJxX3ZlY3RvcltpcnFdKSB7CiAJCQkvKgogCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKIAkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5CkBAIC0yMTU2LDggKzIxMjAsNiBAQAogCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MCk7CiB9CiAKLWludCB0aW1lcl91c2VzX2lvYXBpY19waW5fMDsKLQogLyoKICAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKICAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQpAQCAtMjE2OCwxMCArMjEzMCwxNCBAQAogewogCWludCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjI7CiAJaW50IHZlY3RvcjsKKwl1bnNpZ25lZCBpbnQgdmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKKwl2ZXIgPSBhcGljX3JlYWQoQVBJQ19MVlIpOworCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odmVyKTsKKwogCS8qCiAJICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKIAkgKi8KQEAgLTIxODQsMTEgKzIxNTAsMTUgQEAKIAkgKiBtb2RlIGZvciB0aGUgODI1OUEgd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmUgcm91dGVkCiAJICogdGhyb3VnaCBJL08gQVBJQ3MuICBBbHNvIElSUTAgaGFzIHRvIGJlIGVuYWJsZWQgaW4KIAkgKiB0aGUgODI1OUEgd2hpY2ggaW1wbGllcyB0aGUgdmlydHVhbCB3aXJlIGhhcyB0byBiZQotCSAqIGRpc2FibGVkIGluIHRoZSBsb2NhbCBBUElDLgorCSAqIGRpc2FibGVkIGluIHRoZSBsb2NhbCBBUElDLiAgRmluYWxseSB0aW1lciBpbnRlcnJ1cHRzCisJICogbmVlZCB0byBiZSBhY2tub3dsZWRnZWQgbWFudWFsbHkgaW4gdGhlIDgyNTlBIGZvcgorCSAqIHRpbWVyX2ludGVycnVwdCgpIGFuZCBmb3IgdGhlIGk4MjQ4OURYIHdoZW4gdXNpbmcKKwkgKiB0aGUgTk1JIHdhdGNoZG9nLgogCSAqLwogCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwogCWluaXRfODI1OUEoMSk7Ci0JdGltZXJfYWNrID0gMTsKKwl0aW1lcl9hY2sgPSAhY3B1X2hhc190c2M7CisJdGltZXJfYWNrIHw9IChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMgJiYgIUFQSUNfSU5URUdSQVRFRCh2ZXIpKTsKIAlpZiAodGltZXJfb3Zlcl84MjU0ID4gMCkKIAkJZW5hYmxlXzgyNTlBX2lycSgwKTsKIApAQCAtMjE5Nyw5ICsyMTY3LDYgQEAKIAlwaW4yICA9IGlvYXBpY19pODI1OS5waW47CiAJYXBpYzIgPSBpb2FwaWNfaTgyNTkuYXBpYzsKIAotCWlmIChwaW4xID09IDApCi0JCXRpbWVyX3VzZXNfaW9hcGljX3Bpbl8wID0gMTsKLQogCXByaW50ayhLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggYXBpYzE9JWQgcGluMT0lZCBhcGljMj0lZCBwaW4yPSVkXG4iLAogCQl2ZWN0b3IsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CiAKQEAgLTI3ODksNyArMjc1Niw2IEBACiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KQogewogCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIUlPX0FQSUNfSVJRKGlycSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJT0FQSUNbJWRdOiBJbnZhbGlkIHJlZmVyZW5jZSB0byBJUlEgMFxuIiwKQEAgLTI4MzAsOSArMjc5Niw3IEBACiAJaWYgKCFpb2FwaWMgJiYgKGlycSA8IDE2KSkKIAkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9faW9hcGljX3dyaXRlX2VudHJ5KGlvYXBpYywgcGluLCBlbnRyeSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljLCBwaW4sIGVudHJ5KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMKaW5kZXggMTYyN2MwZC4uOWJhMTFkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY182NC5jCkBAIC00MywxMyArNDMsMTUgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaF9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ0cmFuc3BvcnQuaD4KIAorI2luY2x1ZGUgPG1hY2hfaXBpLmg+CisjaW5jbHVkZSA8bWFjaF9hcGljLmg+CisKIHN0cnVjdCBpcnFfY2ZnIHsKIAljcHVtYXNrX3QgZG9tYWluOwogCWNwdW1hc2tfdCBvbGRfZG9tYWluOwpAQCAtMTAxLDYgKzEwMywxNiBAQAogICovCiBpbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1tNQVhfSU9fQVBJQ1NdOwogCisvKiBJL08gQVBJQyBlbnRyaWVzICovCitzdHJ1Y3QgbXBjX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOworaW50IG5yX2lvYXBpY3M7CisKKy8qIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLworc3RydWN0IG1wY19jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKKworLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK2ludCBtcF9pcnFfZW50cmllczsKKwogLyoKICAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4KICAqIGJlIGNoYW5nZWQgYW55dGltZS4KQEAgLTE1NSwxMSArMTY3LDEwIEBACiAJd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGJvb2wgaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHBlbmRpbmcgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7CkBAIC0xNzIsMTMgKzE4MywxNyBAQAogCQkJYnJlYWs7CiAJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKIAkJLyogSXMgdGhlIHJlbW90ZSBJUlIgYml0IHNldD8gKi8KLQkJcGVuZGluZyB8PSAocmVnID4+IDE0KSAmIDE7CisJCWlmICgocmVnID4+IDE0KSAmIDEpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQogCQlpZiAoIWVudHJ5LT5uZXh0KQogCQkJYnJlYWs7CiAJCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHBlbmRpbmc7CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qCkBAIC03NzAsNyArNzg1LDcgQEAKIAkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKIAogCWNmZy0+dmVjdG9yID0gMDsKLQljZmctPmRvbWFpbiA9IENQVV9NQVNLX05PTkU7CisJY3B1c19jbGVhcihjZmctPmRvbWFpbik7CiB9CiAKIHZvaWQgX19zZXR1cF92ZWN0b3JfaXJxKGludCBjcHUpCkBAIC05MDIsOSArOTE3LDggQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9FeHRJTlRfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4sIGludCB2ZWN0b3IpCiB7CiAJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW1lbXNldCgmZW50cnksMCxzaXplb2YoZW50cnkpKTsKKwltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKIAogCWRpc2FibGVfODI1OUFfaXJxKDApOwogCkBAIC05MzIsMTAgKzk0Niw3IEBACiAJLyoKIAkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExKzIqcGluLCAqKCgoaW50ICopJmVudHJ5KSsxKSk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDEwKzIqcGluLCAqKCgoaW50ICopJmVudHJ5KSswKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7CiAKIAllbmFibGVfODI1OUFfaXJxKDApOwogfQpAQCAtMTA2Niw4ICsxMDc3LDcgQEAKIAogCXByaW50aygiXG4iIEtFUk5fREVCVUcgInByaW50aW5nIGxvY2FsIEFQSUMgY29udGVudHMgb24gQ1BVIyVkLyVkOlxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBJRDogICAgICAlMDh4ICglMDF4KVxuIiwgdiwgR0VUX0FQSUNfSUQodikpOworCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIElEOiAgICAgICUwOHggKCUwMXgpXG4iLCB2LCBHRVRfQVBJQ19JRChyZWFkX2FwaWNfaWQoKSkpOwogCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwogCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIFZFUlNJT046ICUwOHhcbiIsIHYpOwogCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odik7CkBAIC0xMjYxLDcgKzEyNzEsNyBAQAogCQllbnRyeS5kZXN0X21vZGUgICAgICAgPSAwOyAvKiBQaHlzaWNhbCAqLwogCQllbnRyeS5kZWxpdmVyeV9tb2RlICAgPSBkZXN0X0V4dElOVDsgLyogRXh0SW50ICovCiAJCWVudHJ5LnZlY3RvciAgICAgICAgICA9IDA7Ci0JCWVudHJ5LmRlc3QgICAgICAgICAgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOworCQllbnRyeS5kZXN0ICAgICAgICAgID0gR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpOwogCiAJCS8qCiAJCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKQEAgLTEzNTIsOSArMTM2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWNwdXNfY2xlYXIobWFzayk7Ci0JY3B1X3NldChmaXJzdF9jcHUoY2ZnLT5kb21haW4pLCBtYXNrKTsKLQorCW1hc2sgPSBjcHVtYXNrX29mX2NwdShmaXJzdF9jcHUoY2ZnLT5kb21haW4pKTsKIAlzZW5kX0lQSV9tYXNrKG1hc2ssIGNmZy0+dmVjdG9yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCkBAIC0xNTE3LDggKzE1MjUsNyBAQAogCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQogCSAqLwogCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUyA7IGlycSsrKSB7Ci0JCWludCB0bXAgPSBpcnE7Ci0JCWlmIChJT19BUElDX0lSUSh0bXApICYmICFpcnFfY2ZnW3RtcF0udmVjdG9yKSB7CisJCWlmIChJT19BUElDX0lSUShpcnEpICYmICFpcnFfY2ZnW2lycV0udmVjdG9yKSB7CiAJCQkvKgogCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKIAkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5CkBAIC0xNTk3LDE3ICsxNjA0LDE0IEBACiAJaW50IGFwaWMsIHBpbiwgaTsKIAlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTAsIGVudHJ5MTsKIAl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcGluICA9IGZpbmRfaXNhX2lycV9waW4oOCwgbXBfSU5UKTsKIAlhcGljID0gZmluZF9pc2FfaXJxX2FwaWMoOCwgbXBfSU5UKTsKIAlpZiAocGluID09IC0xKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkqKCgoaW50ICopJmVudHJ5MCkgKyAxKSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDExICsgMiAqIHBpbik7Ci0JKigoKGludCAqKSZlbnRyeTApICsgMCkgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIDIgKiBwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJZW50cnkwID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKKwogCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7CiAKIAltZW1zZXQoJmVudHJ5MSwgMCwgc2l6ZW9mKGVudHJ5MSkpOwpAQCAtMTYyMCwxMCArMTYyNCw3IEBACiAJZW50cnkxLnRyaWdnZXIgPSAwOwogCWVudHJ5MS52ZWN0b3IgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMiAqIHBpbiwgKigoKGludCAqKSZlbnRyeTEpICsgMSkpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIgKiBwaW4sICooKChpbnQgKikmZW50cnkxKSArIDApKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MSk7CiAKIAlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwogCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsKQEAgLTE2NDIsMTAgKzE2NDMsNyBAQAogCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKIAljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMiAqIHBpbiwgKigoKGludCAqKSZlbnRyeTApICsgMSkpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIgKiBwaW4sICooKChpbnQgKikmZW50cnkwKSArIDApKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MCk7CiB9CiAKIC8qCkBAIC0yMzE0LDcgKzIzMTIsNiBAQAogCXJlcyA9ICh2b2lkICopbWVtOwogCiAJaWYgKG1lbSAhPSBOVUxMKSB7Ci0JCW1lbXNldChtZW0sIDAsIG4pOwogCQltZW0gKz0gc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBucl9pb2FwaWNzOwogCiAJCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jIGIvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMKaW5kZXggYmQ0OTMyMS4uNTkyMWU1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogaW50IGlvX2RlbGF5X3R5cGUgX19yZWFkX21vc3RseSA9IENPTkZJR19ERUZBVUxUX0lPX0RFTEFZX1RZUEU7Ci1FWFBPUlRfU1lNQk9MX0dQTChpb19kZWxheV90eXBlKTsKIAogc3RhdGljIGludCBfX2luaXRkYXRhIGlvX2RlbGF5X292ZXJyaWRlOwogCkBAIC03OSw2ICs3OCwxNCBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0LAorCQkuaWRlbnQJCT0gIkhQIFBhdmlsaW9uIGR2NjAwMCIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwQjgiKQorCQl9CisJfSwKKwl7CisJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiSFAgUGF2aWxpb24gdHgxMDAwIiwKIAkJLm1hdGNoZXMJPSB7CiAJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlF1YW50YSIpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lwaS5jIGIvYXJjaC94ODYva2VybmVsL2lwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZGY3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXBpLmMKQEAgLTAsMCArMSwxNzggQEAKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorLyoKKyAqIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRlYWwgd2l0aCBzZW5kaW5nIElQSXMgYmV0d2VlbiBDUFVzLgorICoKKyAqIFdlIHVzZSAnYnJvYWRjYXN0JywgQ1BVLT5DUFUgSVBJcyBhbmQgc2VsZi1JUElzIHRvby4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBfX3ByZXBhcmVfSUNSKHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBpbnQgaWNyID0gc2hvcnRjdXQgfCBBUElDX0RFU1RfTE9HSUNBTDsKKworCXN3aXRjaCAodmVjdG9yKSB7CisJZGVmYXVsdDoKKwkJaWNyIHw9IEFQSUNfRE1fRklYRUQgfCB2ZWN0b3I7CisJCWJyZWFrOworCWNhc2UgTk1JX1ZFQ1RPUjoKKwkJaWNyIHw9IEFQSUNfRE1fTk1JOworCQlicmVhazsKKwl9CisJcmV0dXJuIGljcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19wcmVwYXJlX0lDUjIodW5zaWduZWQgaW50IG1hc2spCit7CisJcmV0dXJuIFNFVF9BUElDX0RFU1RfRklFTEQobWFzayk7Cit9CisKK3ZvaWQgX19zZW5kX0lQSV9zaG9ydGN1dCh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IpCit7CisJLyoKKwkgKiBTdWJ0bGUuIEluIHRoZSBjYXNlIG9mIHRoZSAnbmV2ZXIgZG8gZG91YmxlIHdyaXRlcycgd29ya2Fyb3VuZAorCSAqIHdlIGhhdmUgdG8gbG9jayBvdXQgaW50ZXJydXB0cyB0byBiZSBzYWZlLiAgQXMgd2UgZG9uJ3QgY2FyZQorCSAqIG9mIHRoZSB2YWx1ZSByZWFkIHdlIHVzZSBhbiBhdG9taWMgcm13IGFjY2VzcyB0byBhdm9pZCBjb3N0bHkKKwkgKiBjbGkvc3RpLiAgT3RoZXJ3aXNlIHdlIHVzZSBhbiBldmVuIGNoZWFwZXIgc2luZ2xlIGF0b21pYyB3cml0ZQorCSAqIHRvIHRoZSBBUElDLgorCSAqLworCXVuc2lnbmVkIGludCBjZmc7CisKKwkvKgorCSAqIFdhaXQgZm9yIGlkbGUuCisJICovCisJYXBpY193YWl0X2ljcl9pZGxlKCk7CisKKwkvKgorCSAqIE5vIG5lZWQgdG8gdG91Y2ggdGhlIHRhcmdldCBjaGlwIGZpZWxkCisJICovCisJY2ZnID0gX19wcmVwYXJlX0lDUihzaG9ydGN1dCwgdmVjdG9yKTsKKworCS8qCisJICogU2VuZCB0aGUgSVBJLiBUaGUgd3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuCisJICovCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIGNmZyk7Cit9CisKK3ZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQoreworCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX1NFTEYsIHZlY3Rvcik7Cit9CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gc2VuZCBhbiBJUEkgd2l0aCBubyBzaG9ydGhhbmQgbm90YXRpb24gKHRoZSBkZXN0aW5hdGlvbiBpcworICogc3BlY2lmaWVkIGluIGJpdHMgNTYgdG8gNjMgb2YgdGhlIElDUikuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NlbmRfSVBJX2Rlc3RfZmllbGQodW5zaWduZWQgbG9uZyBtYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgY2ZnOworCisJLyoKKwkgKiBXYWl0IGZvciBpZGxlLgorCSAqLworCWlmICh1bmxpa2VseSh2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikpCisJCXNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7CisJZWxzZQorCQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKKworCS8qCisJICogcHJlcGFyZSB0YXJnZXQgY2hpcCBmaWVsZAorCSAqLworCWNmZyA9IF9fcHJlcGFyZV9JQ1IyKG1hc2spOworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgY2ZnKTsKKworCS8qCisJICogcHJvZ3JhbSB0aGUgSUNSCisJICovCisJY2ZnID0gX19wcmVwYXJlX0lDUigwLCB2ZWN0b3IpOworCisJLyoKKwkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KKwkgKi8KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgY2ZnKTsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG9uIHNtYWxsZXIgbWFjaGluZXMuCisgKi8KK3ZvaWQgc2VuZF9JUElfbWFza19iaXRtYXNrKGNwdW1hc2tfdCBjcHVtYXNrLCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNwdXNfYWRkcihjcHVtYXNrKVswXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCVdBUk5fT04obWFzayAmIH5jcHVzX2FkZHIoY3B1X29ubGluZV9tYXApWzBdKTsKKwlfX3NlbmRfSVBJX2Rlc3RfZmllbGQobWFzaywgdmVjdG9yKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBxdWVyeV9jcHU7CisKKwkvKgorCSAqIEhhY2suIFRoZSBjbHVzdGVyZWQgQVBJQyBhZGRyZXNzaW5nIG1vZGUgZG9lc24ndCBhbGxvdyB1cyB0byBzZW5kCisJICogdG8gYW4gYXJiaXRyYXJ5IG1hc2ssIHNvIEkgZG8gYSB1bmljYXN0cyB0byBlYWNoIENQVSBpbnN0ZWFkLiBUaGlzCisJICogc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGRvIDEgbWVzc2FnZSBwZXIgY2x1c3RlciBJRCAtIG1ibGlnaAorCSAqLworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShxdWVyeV9jcHUpIHsKKwkJaWYgKGNwdV9pc3NldChxdWVyeV9jcHUsIG1hc2spKSB7CisJCQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQoY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKHF1ZXJ5X2NwdSksCisJCQkJCSAgICAgIHZlY3Rvcik7CisJCX0KKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiBtdXN0IGNvbWUgYWZ0ZXIgdGhlIHNlbmRfSVBJIGZ1bmN0aW9ucyBhYm92ZSBmb3IgaW5saW5pbmcgKi8KKyNpbmNsdWRlIDxtYWNoX2lwaS5oPgorc3RhdGljIGludCBjb252ZXJ0X2FwaWNpZF90b19jcHUoaW50IGFwaWNfaWQpCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQlpZiAocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgaSkgPT0gYXBpY19pZCkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlpbnQgYXBpY2lkLCBjcHVpZDsKKworCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpKQorCQlyZXR1cm4gMDsKKworCWFwaWNpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmIChhcGljaWQgPT0gQkFEX0FQSUNJRCkKKwkJcmV0dXJuIDA7CisKKwljcHVpZCA9IGNvbnZlcnRfYXBpY2lkX3RvX2NwdShhcGljaWQpOworCisJcmV0dXJuIGNwdWlkID49IDAgPyBjcHVpZCA6IDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwppbmRleCBjZWYwNTRiLi42ZWE2N2I3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAlpZiAodW5saWtlbHkoKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFTKSkgewogCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IGNhbm5vdCBoYW5kbGUgSVJRICVkXG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIGlycSk7CisJCQkJCV9fZnVuY19fLCBpcnEpOwogCQlCVUcoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0N2YwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCkBAIC0wLDAgKzEsNTY3IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFtaXQgUy4gS2FsZSA8YW1pdGthbGVAbGluc3lzc29mdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBWRVJJVEFTIFNvZnR3YXJlIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDAyIEFuZGkgS2xlZW4sIFN1U0UgTGFicworICogQ29weXJpZ2h0IChDKSAyMDA0IExpblN5c1NvZnQgVGVjaG5vbG9naWVzIFB2dC4gTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEphc29uIFdlc3NlbCwgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQ29udHJpYnV0b3I6ICAgICBMYWtlIFN0ZXZlbnMgSW5zdHJ1bWVudCBEaXZpc2lvbiQKKyAqICBXcml0dGVuIGJ5OiAgICAgIEdsZW5uIEVuZ2VsICQKKyAqICBVcGRhdGVkIGJ5OgkgICAgIEFtaXQgS2FsZTxha2FsZUB2ZXJpdGFzLmNvbT4KKyAqICBVcGRhdGVkIGJ5OgkgICAgIFRvbSBSaW5pIDx0cmluaUBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogIFVwZGF0ZWQgYnk6CSAgICAgSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKyAqICBNb2RpZmllZCBmb3IgMzg2IGJ5IEppbSBLaW5nZG9uLCBDeWdudXMgU3VwcG9ydC4KKyAqICBPcmlnaWFubCBrZ2RiLCBjb21wYXRpYmlsaXR5IHdpdGggMi4xLnh4IGtlcm5lbCBieQorICogIERhdmlkIEdyb3RoZSA8ZGF2ZUBnY29tLmNvbT4KKyAqICBJbnRlZ3JhdGVkIGludG8gMi4yLjUga2VybmVsIGJ5IFRpZ3JhbiBBaXZhemlhbiA8dGlncmFuQHNjby5jb20+CisgKiAgWDg2XzY0IGNoYW5nZXMgZnJvbSBBbmRpIEtsZWVuJ3MgcGF0Y2ggbWVyZ2VkIGJ5IEppbSBIb3VzdG9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorCisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlIDxtYWNoX2lwaS5oPgorCisvKgorICogUHV0IHRoZSBlcnJvciBjb2RlIGhlcmUganVzdCBpbiBjYXNlIHRoZSB1c2VyIGNhcmVzOgorICovCitzdGF0aWMgaW50IGdkYl94ODZlcnJjb2RlOworCisvKgorICogTGlrZXdpc2UsIHRoZSB2ZWN0b3IgbnVtYmVyIGhlcmUgKHNpbmNlIEdEQiBvbmx5IGdldHMgdGhlIHNpZ25hbAorICogbnVtYmVyIHRocm91Z2ggdGhlIHVzdWFsIG1lYW5zLCBhbmQgdGhhdCdzIG5vdCB2ZXJ5IHNwZWNpZmljKToKKyAqLworc3RhdGljIGludCBnZGJfeDg2dmVjdG9yID0gLTE7CisKKy8qKgorICoJcHRfcmVnc190b19nZGJfcmVncyAtIENvbnZlcnQgcHRyYWNlIHJlZ3MgdG8gR0RCIHJlZ3MKKyAqCUBnZGJfcmVnczogQSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlZ2lzdGVycyBpbiB0aGUgb3JkZXIgR0RCIHdhbnRzLgorICoJQHJlZ3M6IFRoZSAmc3RydWN0IHB0X3JlZ3Mgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAqCisgKglDb252ZXJ0IHRoZSBwdF9yZWdzIGluIEByZWdzIGludG8gdGhlIGZvcm1hdCBmb3IgcmVnaXN0ZXJzIHRoYXQKKyAqCUdEQiBleHBlY3RzLCBzdG9yZWQgaW4gQGdkYl9yZWdzLgorICovCit2b2lkIHB0X3JlZ3NfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWdkYl9yZWdzW0dEQl9BWF0JPSByZWdzLT5heDsKKwlnZGJfcmVnc1tHREJfQlhdCT0gcmVncy0+Yng7CisJZ2RiX3JlZ3NbR0RCX0NYXQk9IHJlZ3MtPmN4OworCWdkYl9yZWdzW0dEQl9EWF0JPSByZWdzLT5keDsKKwlnZGJfcmVnc1tHREJfU0ldCT0gcmVncy0+c2k7CisJZ2RiX3JlZ3NbR0RCX0RJXQk9IHJlZ3MtPmRpOworCWdkYl9yZWdzW0dEQl9CUF0JPSByZWdzLT5icDsKKwlnZGJfcmVnc1tHREJfUFNdCT0gcmVncy0+ZmxhZ3M7CisJZ2RiX3JlZ3NbR0RCX1BDXQk9IHJlZ3MtPmlwOworI2lmZGVmIENPTkZJR19YODZfMzIKKwlnZGJfcmVnc1tHREJfRFNdCT0gcmVncy0+ZHM7CisJZ2RiX3JlZ3NbR0RCX0VTXQk9IHJlZ3MtPmVzOworCWdkYl9yZWdzW0dEQl9DU10JPSByZWdzLT5jczsKKwlnZGJfcmVnc1tHREJfU1NdCT0gX19LRVJORUxfRFM7CisJZ2RiX3JlZ3NbR0RCX0ZTXQk9IDB4RkZGRjsKKwlnZGJfcmVnc1tHREJfR1NdCT0gMHhGRkZGOworI2Vsc2UKKwlnZGJfcmVnc1tHREJfUjhdCT0gcmVncy0+cjg7CisJZ2RiX3JlZ3NbR0RCX1I5XQk9IHJlZ3MtPnI5OworCWdkYl9yZWdzW0dEQl9SMTBdCT0gcmVncy0+cjEwOworCWdkYl9yZWdzW0dEQl9SMTFdCT0gcmVncy0+cjExOworCWdkYl9yZWdzW0dEQl9SMTJdCT0gcmVncy0+cjEyOworCWdkYl9yZWdzW0dEQl9SMTNdCT0gcmVncy0+cjEzOworCWdkYl9yZWdzW0dEQl9SMTRdCT0gcmVncy0+cjE0OworCWdkYl9yZWdzW0dEQl9SMTVdCT0gcmVncy0+cjE1OworI2VuZGlmCisJZ2RiX3JlZ3NbR0RCX1NQXQk9IHJlZ3MtPnNwOworfQorCisvKioKKyAqCXNsZWVwaW5nX3RocmVhZF90b19nZGJfcmVncyAtIENvbnZlcnQgcHRyYWNlIHJlZ3MgdG8gR0RCIHJlZ3MKKyAqCUBnZGJfcmVnczogQSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlZ2lzdGVycyBpbiB0aGUgb3JkZXIgR0RCIHdhbnRzLgorICoJQHA6IFRoZSAmc3RydWN0IHRhc2tfc3RydWN0IG9mIHRoZSBkZXNpcmVkIHByb2Nlc3MuCisgKgorICoJQ29udmVydCB0aGUgcmVnaXN0ZXIgdmFsdWVzIG9mIHRoZSBzbGVlcGluZyBwcm9jZXNzIGluIEBwIHRvCisgKgl0aGUgZm9ybWF0IHRoYXQgR0RCIGV4cGVjdHMuCisgKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGtnZGIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlCisgKgkmc3RydWN0IHB0X3JlZ3MgYW5kIHRoZXJlZm9yZSBpdCBzaG91bGQgZmlsbCB0aGUgZ2RiIHJlZ2lzdGVycworICoJQGdkYl9yZWdzIHdpdGggd2hhdCBoYXMJYmVlbiBzYXZlZCBpbiAmc3RydWN0IHRocmVhZF9zdHJ1Y3QKKyAqCXRocmVhZCBmaWVsZCBkdXJpbmcgc3dpdGNoX3RvLgorICovCit2b2lkIHNsZWVwaW5nX3RocmVhZF90b19nZGJfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCWdkYl9yZWdzW0dEQl9BWF0JPSAwOworCWdkYl9yZWdzW0dEQl9CWF0JPSAwOworCWdkYl9yZWdzW0dEQl9DWF0JPSAwOworCWdkYl9yZWdzW0dEQl9EWF0JPSAwOworCWdkYl9yZWdzW0dEQl9TSV0JPSAwOworCWdkYl9yZWdzW0dEQl9ESV0JPSAwOworCWdkYl9yZWdzW0dEQl9CUF0JPSAqKHVuc2lnbmVkIGxvbmcgKilwLT50aHJlYWQuc3A7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWdkYl9yZWdzW0dEQl9EU10JPSBfX0tFUk5FTF9EUzsKKwlnZGJfcmVnc1tHREJfRVNdCT0gX19LRVJORUxfRFM7CisJZ2RiX3JlZ3NbR0RCX1BTXQk9IDA7CisJZ2RiX3JlZ3NbR0RCX0NTXQk9IF9fS0VSTkVMX0NTOworCWdkYl9yZWdzW0dEQl9QQ10JPSBwLT50aHJlYWQuaXA7CisJZ2RiX3JlZ3NbR0RCX1NTXQk9IF9fS0VSTkVMX0RTOworCWdkYl9yZWdzW0dEQl9GU10JPSAweEZGRkY7CisJZ2RiX3JlZ3NbR0RCX0dTXQk9IDB4RkZGRjsKKyNlbHNlCisJZ2RiX3JlZ3NbR0RCX1BTXQk9ICoodW5zaWduZWQgbG9uZyAqKShwLT50aHJlYWQuc3AgKyA4KTsKKwlnZGJfcmVnc1tHREJfUENdCT0gMDsKKwlnZGJfcmVnc1tHREJfUjhdCT0gMDsKKwlnZGJfcmVnc1tHREJfUjldCT0gMDsKKwlnZGJfcmVnc1tHREJfUjEwXQk9IDA7CisJZ2RiX3JlZ3NbR0RCX1IxMV0JPSAwOworCWdkYl9yZWdzW0dEQl9SMTJdCT0gMDsKKwlnZGJfcmVnc1tHREJfUjEzXQk9IDA7CisJZ2RiX3JlZ3NbR0RCX1IxNF0JPSAwOworCWdkYl9yZWdzW0dEQl9SMTVdCT0gMDsKKyNlbmRpZgorCWdkYl9yZWdzW0dEQl9TUF0JPSBwLT50aHJlYWQuc3A7Cit9CisKKy8qKgorICoJZ2RiX3JlZ3NfdG9fcHRfcmVncyAtIENvbnZlcnQgR0RCIHJlZ3MgdG8gcHRyYWNlIHJlZ3MuCisgKglAZ2RiX3JlZ3M6IEEgcG9pbnRlciB0byBob2xkIHRoZSByZWdpc3RlcnMgd2UndmUgcmVjZWl2ZWQgZnJvbSBHREIuCisgKglAcmVnczogQSBwb2ludGVyIHRvIGEgJnN0cnVjdCBwdF9yZWdzIHRvIGhvbGQgdGhlc2UgdmFsdWVzIGluLgorICoKKyAqCUNvbnZlcnQgdGhlIEdEQiByZWdzIGluIEBnZGJfcmVncyBpbnRvIHRoZSBwdF9yZWdzLCBhbmQgc3RvcmUgdGhlbQorICoJaW4gQHJlZ3MuCisgKi8KK3ZvaWQgZ2RiX3JlZ3NfdG9fcHRfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+YXgJCT0gZ2RiX3JlZ3NbR0RCX0FYXTsKKwlyZWdzLT5ieAkJPSBnZGJfcmVnc1tHREJfQlhdOworCXJlZ3MtPmN4CQk9IGdkYl9yZWdzW0dEQl9DWF07CisJcmVncy0+ZHgJCT0gZ2RiX3JlZ3NbR0RCX0RYXTsKKwlyZWdzLT5zaQkJPSBnZGJfcmVnc1tHREJfU0ldOworCXJlZ3MtPmRpCQk9IGdkYl9yZWdzW0dEQl9ESV07CisJcmVncy0+YnAJCT0gZ2RiX3JlZ3NbR0RCX0JQXTsKKwlyZWdzLT5mbGFncwkJPSBnZGJfcmVnc1tHREJfUFNdOworCXJlZ3MtPmlwCQk9IGdkYl9yZWdzW0dEQl9QQ107CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXJlZ3MtPmRzCQk9IGdkYl9yZWdzW0dEQl9EU107CisJcmVncy0+ZXMJCT0gZ2RiX3JlZ3NbR0RCX0VTXTsKKwlyZWdzLT5jcwkJPSBnZGJfcmVnc1tHREJfQ1NdOworI2Vsc2UKKwlyZWdzLT5yOAkJPSBnZGJfcmVnc1tHREJfUjhdOworCXJlZ3MtPnI5CQk9IGdkYl9yZWdzW0dEQl9SOV07CisJcmVncy0+cjEwCQk9IGdkYl9yZWdzW0dEQl9SMTBdOworCXJlZ3MtPnIxMQkJPSBnZGJfcmVnc1tHREJfUjExXTsKKwlyZWdzLT5yMTIJCT0gZ2RiX3JlZ3NbR0RCX1IxMl07CisJcmVncy0+cjEzCQk9IGdkYl9yZWdzW0dEQl9SMTNdOworCXJlZ3MtPnIxNAkJPSBnZGJfcmVnc1tHREJfUjE0XTsKKwlyZWdzLT5yMTUJCT0gZ2RiX3JlZ3NbR0RCX1IxNV07CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCBod19icmVha3BvaW50IHsKKwl1bnNpZ25lZAkJZW5hYmxlZDsKKwl1bnNpZ25lZAkJdHlwZTsKKwl1bnNpZ25lZAkJbGVuOworCXVuc2lnbmVkIGxvbmcJCWFkZHI7Cit9IGJyZWFraW5mb1s0XTsKKworc3RhdGljIHZvaWQga2dkYl9jb3JyZWN0X2h3X2JyZWFrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBkcjc7CisJaW50IGNvcnJlY3RpdCA9IDA7CisJaW50IGJyZWFrYml0OworCWludCBicmVha25vOworCisJZ2V0X2RlYnVncmVnKGRyNywgNyk7CisJZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IDQ7IGJyZWFrbm8rKykgeworCQlicmVha2JpdCA9IDIgPDwgKGJyZWFrbm8gPDwgMSk7CisJCWlmICghKGRyNyAmIGJyZWFrYml0KSAmJiBicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCkgeworCQkJY29ycmVjdGl0ID0gMTsKKwkJCWRyNyB8PSBicmVha2JpdDsKKwkJCWRyNyAmPSB+KDB4ZjAwMDAgPDwgKGJyZWFrbm8gPDwgMikpOworCQkJZHI3IHw9ICgoYnJlYWtpbmZvW2JyZWFrbm9dLmxlbiA8PCAyKSB8CisJCQkJIGJyZWFraW5mb1ticmVha25vXS50eXBlKSA8PAorCQkJICAgICAgICgoYnJlYWtubyA8PCAyKSArIDE2KTsKKwkJCWlmIChicmVha25vID49IDAgJiYgYnJlYWtubyA8PSAzKQorCQkJCXNldF9kZWJ1Z3JlZyhicmVha2luZm9bYnJlYWtub10uYWRkciwgYnJlYWtubyk7CisKKwkJfSBlbHNlIHsKKwkJCWlmICgoZHI3ICYgYnJlYWtiaXQpICYmICFicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCkgeworCQkJCWNvcnJlY3RpdCA9IDE7CisJCQkJZHI3ICY9IH5icmVha2JpdDsKKwkJCQlkcjcgJj0gfigweGYwMDAwIDw8IChicmVha25vIDw8IDIpKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY29ycmVjdGl0KQorCQlzZXRfZGVidWdyZWcoZHI3LCA3KTsKK30KKworc3RhdGljIGludAora2dkYl9yZW1vdmVfaHdfYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuLCBlbnVtIGtnZGJfYnB0eXBlIGJwdHlwZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWlmIChicmVha2luZm9baV0uYWRkciA9PSBhZGRyICYmIGJyZWFraW5mb1tpXS5lbmFibGVkKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gNCkKKwkJcmV0dXJuIC0xOworCisJYnJlYWtpbmZvW2ldLmVuYWJsZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGtnZGJfcmVtb3ZlX2FsbF9od19icmVhayh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJbWVtc2V0KCZicmVha2luZm9baV0sIDAsIHNpemVvZihzdHJ1Y3QgaHdfYnJlYWtwb2ludCkpOworfQorCitzdGF0aWMgaW50CitrZ2RiX3NldF9od19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4sIGVudW0ga2dkYl9icHR5cGUgYnB0eXBlKQoreworCXVuc2lnbmVkIHR5cGU7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlpZiAoIWJyZWFraW5mb1tpXS5lbmFibGVkKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gNCkKKwkJcmV0dXJuIC0xOworCisJc3dpdGNoIChicHR5cGUpIHsKKwljYXNlIEJQX0hBUkRXQVJFX0JSRUFLUE9JTlQ6CisJCXR5cGUgPSAwOworCQlsZW4gID0gMTsKKwkJYnJlYWs7CisJY2FzZSBCUF9XUklURV9XQVRDSFBPSU5UOgorCQl0eXBlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBCUF9BQ0NFU1NfV0FUQ0hQT0lOVDoKKwkJdHlwZSA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAobGVuID09IDEgfHwgbGVuID09IDIgfHwgbGVuID09IDQpCisJCWJyZWFraW5mb1tpXS5sZW4gID0gbGVuIC0gMTsKKwllbHNlCisJCXJldHVybiAtMTsKKworCWJyZWFraW5mb1tpXS5lbmFibGVkID0gMTsKKwlicmVha2luZm9baV0uYWRkciA9IGFkZHI7CisJYnJlYWtpbmZvW2ldLnR5cGUgPSB0eXBlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJa2dkYl9kaXNhYmxlX2h3X2RlYnVnIC0gRGlzYWJsZSBoYXJkd2FyZSBkZWJ1Z2dpbmcgd2hpbGUgd2UgaW4ga2dkYi4KKyAqCUByZWdzOiBDdXJyZW50ICZzdHJ1Y3QgcHRfcmVncy4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBtdXN0CisgKglkaXNhYmxlIGhhcmR3YXJlIGRlYnVnZ2luZyB3aGlsZSBpdCBpcyBwcm9jZXNzaW5nIGdkYiBwYWNrZXRzIG9yCisgKgloYW5kbGluZyBleGNlcHRpb24uCisgKi8KK3ZvaWQga2dkYl9kaXNhYmxlX2h3X2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIERpc2FibGUgaGFyZHdhcmUgZGVidWdnaW5nIHdoaWxlIHdlIGFyZSBpbiBrZ2RiOiAqLworCXNldF9kZWJ1Z3JlZygwVUwsIDcpOworfQorCisvKioKKyAqCWtnZGJfcG9zdF9wcmltYXJ5X2NvZGUgLSBTYXZlIGVycm9yIHZlY3Rvci9jb2RlIG51bWJlcnMuCisgKglAcmVnczogT3JpZ2luYWwgcHRfcmVncy4KKyAqCUBlX3ZlY3RvcjogT3JpZ2luYWwgZXJyb3IgdmVjdG9yLgorICoJQGVycl9jb2RlOiBPcmlnaW5hbCBlcnJvciBjb2RlLgorICoKKyAqCVRoaXMgaXMgbmVlZGVkIG9uIGFyY2hpdGVjdHVyZXMgd2hpY2ggc3VwcG9ydCBTTVAgYW5kIEtHREIuCisgKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlIHNsYXZlIGNwdXMgaGF2ZSBiZWVuIHB1dAorICoJdG8gYSBrbm93IHNwaW4gc3RhdGUgYW5kIHRoZSBwcmltYXJ5IENQVSBoYXMgY29udHJvbCBvdmVyIEtHREIuCisgKi8KK3ZvaWQga2dkYl9wb3N0X3ByaW1hcnlfY29kZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVfdmVjdG9yLCBpbnQgZXJyX2NvZGUpCit7CisJLyogcHJpbWFyeSBwcm9jZXNzb3IgaXMgY29tcGxldGVseSBpbiB0aGUgZGVidWdnZXIgKi8KKwlnZGJfeDg2dmVjdG9yID0gZV92ZWN0b3I7CisJZ2RiX3g4NmVycmNvZGUgPSBlcnJfY29kZTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKy8qKgorICoJa2dkYl9yb3VuZHVwX2NwdXMgLSBHZXQgb3RoZXIgQ1BVcyBpbnRvIGEgaG9sZGluZyBwYXR0ZXJuCisgKglAZmxhZ3M6IEN1cnJlbnQgSVJRIHN0YXRlCisgKgorICoJT24gU01QIHN5c3RlbXMsIHdlIG5lZWQgdG8gZ2V0IHRoZSBhdHRlbnRpb24gb2YgdGhlIG90aGVyIENQVXMKKyAqCWFuZCBnZXQgdGhlbSBiZSBpbiBhIGtub3duIHN0YXRlLiAgVGhpcyBzaG91bGQgZG8gd2hhdCBpcyBuZWVkZWQKKyAqCXRvIGdldCB0aGUgb3RoZXIgQ1BVcyB0byBjYWxsIGtnZGJfd2FpdCgpLiBOb3RlIHRoYXQgb24gc29tZSBhcmNoZXMsCisgKgl0aGUgTk1JIGFwcHJvYWNoIGlzIG5vdCB1c2VkIGZvciByb3VuZGluZyB1cCBhbGwgdGhlIENQVXMuIEZvciBleGFtcGxlLAorICoJaW4gY2FzZSBvZiBNSVBTLCBzbXBfY2FsbF9mdW5jdGlvbigpIGlzIHVzZWQgdG8gcm91bmR1cCBDUFVzLiBJbgorICoJdGhpcyBjYXNlLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGludGVycnVwdHMgYXJlIGVuYWJsZWQgYmVmb3JlCisgKgljYWxsaW5nIHNtcF9jYWxsX2Z1bmN0aW9uKCkuIFRoZSBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIGlzCisgKgl0aGUgZmxhZ3MgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgdGhlIGludGVycnVwdHMuIFRoZXJlIGlzCisgKglsb2NhbF9pcnFfc2F2ZSgpIGNhbGwgYmVmb3JlIGtnZGJfcm91bmR1cF9jcHVzKCkuCisgKgorICoJT24gbm9uLVNNUCBzeXN0ZW1zLCB0aGlzIGlzIG5vdCBjYWxsZWQuCisgKi8KK3ZvaWQga2dkYl9yb3VuZHVwX2NwdXModW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzZW5kX0lQSV9hbGxidXRzZWxmKEFQSUNfRE1fTk1JKTsKK30KKyNlbmRpZgorCisvKioKKyAqCWtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uIC0gSGFuZGxlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBHREIgcGFja2V0cy4KKyAqCUB2ZWN0b3I6IFRoZSBlcnJvciB2ZWN0b3Igb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGhhcHBlbmVkLgorICoJQHNpZ25vOiBUaGUgc2lnbmFsIG51bWJlciBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaGFwcGVuZWQuCisgKglAZXJyX2NvZGU6IFRoZSBlcnJvciBjb2RlIG9mIHRoZSBleGNlcHRpb24gdGhhdCBoYXBwZW5lZC4KKyAqCUByZW1jb21faW5fYnVmZmVyOiBUaGUgYnVmZmVyIG9mIHRoZSBwYWNrZXQgd2UgaGF2ZSByZWFkLgorICoJQHJlbWNvbV9vdXRfYnVmZmVyOiBUaGUgYnVmZmVyIG9mICVCVUZNQVggYnl0ZXMgdG8gd3JpdGUgYSBwYWNrZXQgaW50by4KKyAqCUByZWdzOiBUaGUgJnN0cnVjdCBwdF9yZWdzIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgKgorICoJVGhpcyBmdW5jdGlvbiBNVVNUIGhhbmRsZSB0aGUgJ2MnIGFuZCAncycgY29tbWFuZCBwYWNrZXRzLAorICoJYXMgd2VsbCBwYWNrZXRzIHRvIHNldCAvIHJlbW92ZSBhIGhhcmR3YXJlIGJyZWFrcG9pbnQsIGlmIHVzZWQuCisgKglJZiB0aGVyZSBhcmUgYWRkaXRpb25hbCBwYWNrZXRzIHdoaWNoIHRoZSBoYXJkd2FyZSBuZWVkcyB0byBoYW5kbGUsCisgKgl0aGV5IGFyZSBoYW5kbGVkIGhlcmUuICBUaGUgY29kZSBzaG91bGQgcmV0dXJuIC0xIGlmIGl0IHdhbnRzIHRvCisgKglwcm9jZXNzIG1vcmUgcGFja2V0cywgYW5kIGEgJTAgb3IgJTEgaWYgaXQgd2FudHMgdG8gZXhpdCBmcm9tIHRoZQorICoJa2dkYiBjYWxsYmFjay4KKyAqLworaW50IGtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGludCBlX3ZlY3RvciwgaW50IHNpZ25vLCBpbnQgZXJyX2NvZGUsCisJCQkgICAgICAgY2hhciAqcmVtY29tSW5CdWZmZXIsIGNoYXIgKnJlbWNvbU91dEJ1ZmZlciwKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqbGludXhfcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBkcjY7CisJY2hhciAqcHRyOworCWludCBuZXdQQzsKKworCXN3aXRjaCAocmVtY29tSW5CdWZmZXJbMF0pIHsKKwljYXNlICdjJzoKKwljYXNlICdzJzoKKwkJLyogdHJ5IHRvIHJlYWQgb3B0aW9uYWwgcGFyYW1ldGVyLCBwYyB1bmNoYW5nZWQgaWYgbm8gcGFybSAqLworCQlwdHIgPSAmcmVtY29tSW5CdWZmZXJbMV07CisJCWlmIChrZ2RiX2hleDJsb25nKCZwdHIsICZhZGRyKSkKKwkJCWxpbnV4X3JlZ3MtPmlwID0gYWRkcjsKKwljYXNlICdEJzoKKwljYXNlICdrJzoKKwkJbmV3UEMgPSBsaW51eF9yZWdzLT5pcDsKKworCQkvKiBjbGVhciB0aGUgdHJhY2UgYml0ICovCisJCWxpbnV4X3JlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOworCQlhdG9taWNfc2V0KCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCwgLTEpOworCisJCS8qIHNldCB0aGUgdHJhY2UgYml0IGlmIHdlJ3JlIHN0ZXBwaW5nICovCisJCWlmIChyZW1jb21JbkJ1ZmZlclswXSA9PSAncycpIHsKKwkJCWxpbnV4X3JlZ3MtPmZsYWdzIHw9IFg4Nl9FRkxBR1NfVEY7CisJCQlrZ2RiX3NpbmdsZV9zdGVwID0gMTsKKwkJCWlmIChrZ2RiX2NvbnR0aHJlYWQpIHsKKwkJCQlhdG9taWNfc2V0KCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCwKKwkJCQkJICAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQl9CisJCX0KKworCQlnZXRfZGVidWdyZWcoZHI2LCA2KTsKKwkJaWYgKCEoZHI2ICYgMHg0MDAwKSkgeworCQkJaW50IGJyZWFrbm87CisKKwkJCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCA0OyBicmVha25vKyspIHsKKwkJCQlpZiAoZHI2ICYgKDEgPDwgYnJlYWtubykgJiYKKwkJCQkgICAgYnJlYWtpbmZvW2JyZWFrbm9dLnR5cGUgPT0gMCkgeworCQkJCQkvKiBTZXQgcmVzdG9yZSBmbGFnOiAqLworCQkJCQlsaW51eF9yZWdzLT5mbGFncyB8PSBYODZfRUZMQUdTX1JGOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJc2V0X2RlYnVncmVnKDBVTCwgNik7CisJCWtnZGJfY29ycmVjdF9od19icmVhaygpOworCisJCXJldHVybiAwOworCX0KKworCS8qIHRoaXMgbWVhbnMgdGhhdCB3ZSBkbyBub3Qgd2FudCB0byBleGl0IGZyb20gdGhlIGhhbmRsZXI6ICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludAorc2luZ2xlX3N0ZXBfY29udChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGRpZV9hcmdzICphcmdzKQoreworCS8qCisJICogU2luZ2xlIHN0ZXAgZXhjZXB0aW9uIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2Ugc28KKwkgKiBlYXQgdGhlIGV4Y2VwdGlvbiBhbmQgY29udGludWUgdGhlIHByb2Nlc3M6CisJICovCisJcHJpbnRrKEtFUk5fRVJSICJLR0RCOiB0cmFwL3N0ZXAgZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZSwgIgorCQkJInJlc3VtaW5nLi4uXG4iKTsKKwlrZ2RiX2FyY2hfaGFuZGxlX2V4Y2VwdGlvbihhcmdzLT50cmFwbnIsIGFyZ3MtPnNpZ25yLAorCQkJCSAgIGFyZ3MtPmVyciwgImMiLCAiIiwgcmVncyk7CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7Cit9CisKK3N0YXRpYyBpbnQgd2FzX2luX2RlYnVnX25taVtOUl9DUFVTXTsKKworc3RhdGljIGludCBfX2tnZGJfbm90aWZ5KHN0cnVjdCBkaWVfYXJncyAqYXJncywgdW5zaWduZWQgbG9uZyBjbWQpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBhcmdzLT5yZWdzOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERJRV9OTUk6CisJCWlmIChhdG9taWNfcmVhZCgma2dkYl9hY3RpdmUpICE9IC0xKSB7CisJCQkvKiBLR0RCIENQVSByb3VuZHVwICovCisJCQlrZ2RiX25taWNhbGxiYWNrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIHJlZ3MpOworCQkJd2FzX2luX2RlYnVnX25taVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IDE7CisJCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKKwkJCXJldHVybiBOT1RJRllfU1RPUDsKKwkJfQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwljYXNlIERJRV9OTUlfSVBJOgorCQlpZiAoYXRvbWljX3JlYWQoJmtnZGJfYWN0aXZlKSAhPSAtMSkgeworCQkJLyogS0dEQiBDUFUgcm91bmR1cCAqLworCQkJa2dkYl9ubWljYWxsYmFjayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCByZWdzKTsKKwkJCXdhc19pbl9kZWJ1Z19ubWlbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0gPSAxOworCQkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CisJCX0KKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJY2FzZSBESUVfTk1JVU5LTk9XTjoKKwkJaWYgKHdhc19pbl9kZWJ1Z19ubWlbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0pIHsKKwkJCXdhc19pbl9kZWJ1Z19ubWlbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0gPSAwOworCQkJcmV0dXJuIE5PVElGWV9TVE9QOworCQl9CisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWNhc2UgRElFX05NSVdBVENIRE9HOgorCQlpZiAoYXRvbWljX3JlYWQoJmtnZGJfYWN0aXZlKSAhPSAtMSkgeworCQkJLyogS0dEQiBDUFUgcm91bmR1cDogKi8KKwkJCWtnZGJfbm1pY2FsbGJhY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgcmVncyk7CisJCQlyZXR1cm4gTk9USUZZX1NUT1A7CisJCX0KKwkJLyogRW50ZXIgZGVidWdnZXI6ICovCisJCWJyZWFrOworCisJY2FzZSBESUVfREVCVUc6CisJCWlmIChhdG9taWNfcmVhZCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0ZXApID09CisJCQlyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICYmCisJCQl1c2VyX21vZGUocmVncykpCisJCQlyZXR1cm4gc2luZ2xlX3N0ZXBfY29udChyZWdzLCBhcmdzKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9CisKKwlpZiAoa2dkYl9oYW5kbGVfZXhjZXB0aW9uKGFyZ3MtPnRyYXBuciwgYXJncy0+c2lnbnIsIGFyZ3MtPmVyciwgcmVncykpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCS8qIE11c3QgdG91Y2ggd2F0Y2hkb2cgYmVmb3JlIHJldHVybiB0byBub3JtYWwgb3BlcmF0aW9uICovCisJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CisJcmV0dXJuIE5PVElGWV9TVE9QOworfQorCitzdGF0aWMgaW50CitrZ2RiX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICpwdHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldCA9IF9fa2dkYl9ub3RpZnkocHRyLCBjbWQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2dkYl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAk9IGtnZGJfbm90aWZ5LAorCisJLyoKKwkgKiBMb3dlc3QtcHJpbyBub3RpZmllciBwcmlvcml0eSwgd2Ugd2FudCB0byBiZSBub3RpZmllZCBsYXN0OgorCSAqLworCS5wcmlvcml0eQk9IC1JTlRfTUFYLAorfTsKKworLyoqCisgKglrZ2RiX2FyY2hfaW5pdCAtIFBlcmZvcm0gYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbml0YWxpemF0aW9uLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIGluaXRhbGl6YXRpb24gb2YgYW55IGFyY2hpdGVjdHVyZQorICoJc3BlY2lmaWMgY2FsbGJhY2tzLgorICovCitpbnQga2dkYl9hcmNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZrZ2RiX25vdGlmaWVyKTsKK30KKworLyoqCisgKglrZ2RiX2FyY2hfZXhpdCAtIFBlcmZvcm0gYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB1bmluaXRhbGl6YXRpb24uCisgKgorICoJVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSB0aGUgdW5pbml0YWxpemF0aW9uIG9mIGFueSBhcmNoaXRlY3R1cmUKKyAqCXNwZWNpZmljIGNhbGxiYWNrcywgZm9yIGR5bmFtaWMgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4KKyAqLwordm9pZCBrZ2RiX2FyY2hfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfZGllX25vdGlmaWVyKCZrZ2RiX25vdGlmaWVyKTsKK30KKworLyoqCisgKgorICoJa2dkYl9za2lwZXhjZXB0aW9uIC0gQmFpbCBvdXQgb2YgS0dEQiB3aGVuIHdlJ3ZlIGJlZW4gdHJpZ2dlcmVkLgorICoJQGV4Y2VwdGlvbjogRXhjZXB0aW9uIHZlY3RvciBudW1iZXIKKyAqCUByZWdzOiBDdXJyZW50ICZzdHJ1Y3QgcHRfcmVncy4KKyAqCisgKglPbiBzb21lIGFyY2hpdGVjdHVyZXMgd2UgbmVlZCB0byBza2lwIGEgYnJlYWtwb2ludCBleGNlcHRpb24gd2hlbgorICoJaXQgb2NjdXJzIGFmdGVyIGEgYnJlYWtwb2ludCBoYXMgYmVlbiByZW1vdmVkLgorICoKKyAqIFNraXAgYW4gaW50MyBleGNlcHRpb24gd2hlbiBpdCBvY2N1cnMgYWZ0ZXIgYSBicmVha3BvaW50IGhhcyBiZWVuCisgKiByZW1vdmVkLiBCYWNrdHJhY2sgZWlwIGJ5IDEgc2luY2UgdGhlIGludDMgd291bGQgaGF2ZSBjYXVzZWQgaXQgdG8KKyAqIGluY3JlbWVudCBieSAxLgorICovCitpbnQga2dkYl9za2lwZXhjZXB0aW9uKGludCBleGNlcHRpb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChleGNlcHRpb24gPT0gMyAmJiBrZ2RiX2lzcmVtb3ZlZGJyZWFrKHJlZ3MtPmlwIC0gMSkpIHsKKwkJcmVncy0+aXAgLT0gMTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit1bnNpZ25lZCBsb25nIGtnZGJfYXJjaF9wYyhpbnQgZXhjZXB0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoZXhjZXB0aW9uID09IDMpCisJCXJldHVybiBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpIC0gMTsKKwlyZXR1cm4gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKK30KKworc3RydWN0IGtnZGJfYXJjaCBhcmNoX2tnZGJfb3BzID0geworCS8qIEJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb246ICovCisJLmdkYl9icHRfaW5zdHIJCT0geyAweGNjIH0sCisJLmZsYWdzCQkJPSBLR0RCX0hXX0JSRUFLUE9JTlQsCisJLnNldF9od19icmVha3BvaW50CT0ga2dkYl9zZXRfaHdfYnJlYWssCisJLnJlbW92ZV9od19icmVha3BvaW50CT0ga2dkYl9yZW1vdmVfaHdfYnJlYWssCisJLnJlbW92ZV9hbGxfaHdfYnJlYWsJPSBrZ2RiX3JlbW92ZV9hbGxfaHdfYnJlYWssCisJLmNvcnJlY3RfaHdfYnJlYWsJPSBrZ2RiX2NvcnJlY3RfaHdfYnJlYWssCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYTk5ZTc2NC4uYjhjNjc0MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC00MTAsMTMgKzQxMCwxMyBAQAogc3RhdGljIHZvaWQgX19rcHJvYmVzIGNsZWFyX2J0Zih2b2lkKQogewogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9ERUJVR0NUTE1TUikpCi0JCXdybXNybChNU1JfSUEzMl9ERUJVR0NUTE1TUiwgMCk7CisJCXVwZGF0ZV9kZWJ1Z2N0bG1zcigwKTsKIH0KIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlc3RvcmVfYnRmKHZvaWQpCiB7CiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0RFQlVHQ1RMTVNSKSkKLQkJd3Jtc3JsKE1TUl9JQTMyX0RFQlVHQ1RMTVNSLCBjdXJyZW50LT50aHJlYWQuZGVidWdjdGxtc3IpOworCQl1cGRhdGVfZGVidWdjdGxtc3IoY3VycmVudC0+dGhyZWFkLmRlYnVnY3RsbXNyKTsKIH0KIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTQ4OSw3ICs0ODksNyBAQAogCQlicmVhazsKIAljYXNlIEtQUk9CRV9ISVRfU1M6CiAJCWlmIChwID09IGtwcm9iZV9ydW5uaW5nKCkpIHsKLQkJCXJlZ3MtPmZsYWdzICY9IH5URl9NQVNLOworCQkJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7CiAJCQlyZWdzLT5mbGFncyB8PSBrY2ItPmtwcm9iZV9zYXZlZF9mbGFnczsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UgewpAQCAtNTgxLDcgKzU4MSw3IEBACiAgKiBXaGVuIGEgcmV0cHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgY29kZSBzYXZlcyByZWdpc3RlcnMgYW5kCiAgKiBjYWxscyB0cmFtcG9saW5lX2hhbmRsZXIoKSBydW5zLCB3aGljaCBjYWxscyB0aGUga3JldHByb2JlJ3MgaGFuZGxlci4KICAqLwotdm9pZCBfX2twcm9iZXMga3JldHByb2JlX3RyYW1wb2xpbmVfaG9sZGVyKHZvaWQpCitzdGF0aWMgdm9pZCBfX3VzZWQgX19rcHJvYmVzIGtyZXRwcm9iZV90cmFtcG9saW5lX2hvbGRlcih2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoCiAJCQkiLmdsb2JhbCBrcmV0cHJvYmVfdHJhbXBvbGluZVxuIgpAQCAtNjczLDcgKzY3Myw3IEBACiAvKgogICogQ2FsbGVkIGZyb20ga3JldHByb2JlX3RyYW1wb2xpbmUKICAqLwotdm9pZCAqIF9fa3Byb2JlcyB0cmFtcG9saW5lX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgX191c2VkIF9fa3Byb2JlcyB2b2lkICp0cmFtcG9saW5lX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmkgPSBOVUxMOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkLCBlbXB0eV9ycDsKQEAgLTg1OCwxNSArODU4LDE1IEBACiAJaWYgKCFjdXIpCiAJCXJldHVybiAwOwogCisJcmVzdW1lX2V4ZWN1dGlvbihjdXIsIHJlZ3MsIGtjYik7CisJcmVncy0+ZmxhZ3MgfD0ga2NiLT5rcHJvYmVfc2F2ZWRfZmxhZ3M7CisJdHJhY2VfaGFyZGlycXNfZml4dXBfZmxhZ3MocmVncy0+ZmxhZ3MpOworCiAJaWYgKChrY2ItPmtwcm9iZV9zdGF0dXMgIT0gS1BST0JFX1JFRU5URVIpICYmIGN1ci0+cG9zdF9oYW5kbGVyKSB7CiAJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1NET05FOwogCQljdXItPnBvc3RfaGFuZGxlcihjdXIsIHJlZ3MsIDApOwogCX0KIAotCXJlc3VtZV9leGVjdXRpb24oY3VyLCByZWdzLCBrY2IpOwotCXJlZ3MtPmZsYWdzIHw9IGtjYi0+a3Byb2JlX3NhdmVkX2ZsYWdzOwotCXRyYWNlX2hhcmRpcnFzX2ZpeHVwX2ZsYWdzKHJlZ3MtPmZsYWdzKTsKLQogCS8qIFJlc3RvcmUgYmFjayB0aGUgb3JpZ2luYWwgc2F2ZWQga3Byb2JlcyB2YXJpYWJsZXMgYW5kIGNvbnRpbnVlLiAqLwogCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX1JFRU5URVIpIHsKIAkJcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCmluZGV4IDIzNmQyZjguLjU3NmEwM2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwpAQCAtMjMzLDYgKzIzMyw3IEBACiAKIHZvaWQgYXJjaF9jcmFzaF9zYXZlX3ZtY29yZWluZm8odm9pZCkKIHsKKwlWTUNPUkVJTkZPX1NZTUJPTChwaHlzX2Jhc2UpOwogCVZNQ09SRUlORk9fU1lNQk9MKGluaXRfbGV2ZWw0X3BndCk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21jYV8zMi5jIGIvYXJjaC94ODYva2VybmVsL21jYV8zMi5jCmluZGV4IDk0ODIwMzMuLjJkYzE4MzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tY2FfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWNhXzMyLmMKQEAgLTUzLDkgKzUzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgd2hpY2hfc2NzaSA9IDA7CitzdGF0aWMgdW5zaWduZWQgY2hhciB3aGljaF9zY3NpOwogCi1pbnQgTUNBX2J1cyA9IDA7CitpbnQgTUNBX2J1czsKIEVYUE9SVF9TWU1CT0woTUNBX2J1cyk7CiAKIC8qCkBAIC02OCwxNSArNjgsMTcgQEAKIAogLyogQnVpbGQgdGhlIHN0YXR1cyBpbmZvIGZvciB0aGUgYWRhcHRlciAqLwogCi1zdGF0aWMgdm9pZCBtY2FfY29uZmlndXJlX2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2KSB7CitzdGF0aWMgdm9pZCBtY2FfY29uZmlndXJlX2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2KQorewogCW1jYV9kZXYtPnN0YXR1cyA9IE1DQV9BREFQVEVSX05PTkU7CiAKIAltY2FfZGV2LT5wb3NfaWQgPSBtY2FfZGV2LT5wb3NbMF0KIAkJKyAobWNhX2Rldi0+cG9zWzFdIDw8IDgpOwogCi0JaWYoIW1jYV9kZXYtPnBvc19pZCAmJiBtY2FfZGV2LT5zbG90IDwgTUNBX01BWF9TTE9UX05SKSB7CisJaWYgKCFtY2FfZGV2LT5wb3NfaWQgJiYgbWNhX2Rldi0+c2xvdCA8IE1DQV9NQVhfU0xPVF9OUikgewogCi0JCS8qIGlkID0gMHgwMDAwIHVzdWFsbHkgaW5kaWNhdGVzIGhhcmR3YXJlIGZhaWx1cmUsCisJCS8qCisJCSAqIGlkID0gMHgwMDAwIHVzdWFsbHkgaW5kaWNhdGVzIGhhcmR3YXJlIGZhaWx1cmUsCiAJCSAqIGhvd2V2ZXIsIFpQIEd1ICh6cGdAY2FzdGxlLm5ldD4gcmVwb3J0cyB0aGF0IGhpcyA5NTU2CiAJCSAqIGhhcyAweDAwMDAgYXMgaWQgYW5kIGV2ZXJ5dGhpbmcgc3RpbGwgd29ya3MuIFRoZXJlCiAJCSAqIGFsc28gc2VlbSB0byBiZSBhbiBhZGFwdGVyIHdpdGggaWQgPSAweDAwMDA7IHRoZQpAQCAtODcsOSArODksMTAgQEAKIAkJbWNhX2Rldi0+c3RhdHVzID0gTUNBX0FEQVBURVJfRVJST1I7CiAKIAkJcmV0dXJuOwotCX0gZWxzZSBpZihtY2FfZGV2LT5wb3NfaWQgIT0gMHhmZmZmKSB7CisJfSBlbHNlIGlmIChtY2FfZGV2LT5wb3NfaWQgIT0gMHhmZmZmKSB7CiAKLQkJLyogMHhmZmZmIHVzdWFsbHkgaW5kaWNhdGVzIHRoYXQgdGhlcmUncyBubyBhZGFwdGVyLAorCQkvKgorCQkgKiAweGZmZmYgdXN1YWxseSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSdzIG5vIGFkYXB0ZXIsCiAJCSAqIGhvd2V2ZXIsIHNvbWUgaW50ZWdyYXRlZCBhZGFwdGVycyBtYXkgaGF2ZSAweGZmZmYgYXMKIAkJICogdGhlaXIgaWQgYW5kIHN0aWxsIGJlIHZhbGlkLiBFeGFtcGxlcyBhcmUgb24tYm9hcmQKIAkJICogVkdBIG9mIHRoZSA1NXN4LCB0aGUgaW50ZWdyYXRlZCBTQ1NJIG9mIHRoZSA1NiAmIDU3LApAQCAtOTksMTkgKzEwMiwxOSBAQAogCQltY2FfZGV2LT5zdGF0dXMgPSBNQ0FfQURBUFRFUl9OT1JNQUw7CiAJfQogCi0JaWYoKG1jYV9kZXYtPnBvc19pZCA9PSAweGZmZmYgfHwKKwlpZiAoKG1jYV9kZXYtPnBvc19pZCA9PSAweGZmZmYgfHwKIAkgICAgbWNhX2Rldi0+cG9zX2lkID09IDB4MDAwMCkgJiYgbWNhX2Rldi0+c2xvdCA+PSBNQ0FfTUFYX1NMT1RfTlIpIHsKIAkJaW50IGo7CiAKLQkJZm9yKGogPSAyOyBqIDwgODsgaisrKSB7Ci0JCQlpZihtY2FfZGV2LT5wb3Nbal0gIT0gMHhmZikgeworCQlmb3IgKGogPSAyOyBqIDwgODsgaisrKSB7CisJCQlpZiAobWNhX2Rldi0+cG9zW2pdICE9IDB4ZmYpIHsKIAkJCQltY2FfZGV2LT5zdGF0dXMgPSBNQ0FfQURBUFRFUl9OT1JNQUw7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CiAKLQlpZighKG1jYV9kZXYtPnBvc1syXSAmIE1DQV9FTkFCTEVEKSkgeworCWlmICghKG1jYV9kZXYtPnBvc1syXSAmIE1DQV9FTkFCTEVEKSkgewogCiAJCS8qIGVuYWJsZWQgYml0IGlzIGluIFBPUyAyICovCiAKQEAgLTEzMyw3ICsxMzYsNyBAQAogCiAjZGVmaW5lIE1DQV9TVEFOREFSRF9SRVNPVVJDRVMJQVJSQVlfU0laRShtY2Ffc3RhbmRhcmRfcmVzb3VyY2VzKQogCi0vKioKKy8qCiAgKgltY2FfcmVhZF9hbmRfc3RvcmVfcG9zIC0gcmVhZCB0aGUgUE9TIHJlZ2lzdGVycyBpbnRvIGEgbWVtb3J5IGJ1ZmZlcgogICogICAgICBAcG9zOiBhIGNoYXIgcG9pbnRlciB0byA4IGJ5dGVzLCBjb250YWlucyB0aGUgUE9TIHJlZ2lzdGVyIHZhbHVlIG9uCiAgKiAgICAgICAgICAgIHN1Y2Nlc3NmdWwgcmV0dXJuCkBAIC0xNDEsMTIgKzE0NCwxNCBAQAogICoJUmV0dXJucyAxIGlmIGEgY2FyZCBhY3R1YWxseSBleGlzdHMgKGkuZS4gdGhlIHBvcyBpc24ndAogICoJYWxsIDB4ZmYpIG9yIDAgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgbWNhX3JlYWRfYW5kX3N0b3JlX3Bvcyh1bnNpZ25lZCBjaGFyICpwb3MpIHsKK3N0YXRpYyBpbnQgbWNhX3JlYWRfYW5kX3N0b3JlX3Bvcyh1bnNpZ25lZCBjaGFyICpwb3MpCit7CiAJaW50IGo7CiAJaW50IGZvdW5kID0gMDsKIAotCWZvcihqPTA7IGo8ODsgaisrKSB7Ci0JCWlmKChwb3Nbal0gPSBpbmJfcChNQ0FfUE9TX1JFRyhqKSkpICE9IDB4ZmYpIHsKKwlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCXBvc1tqXSA9IGluYl9wKE1DQV9QT1NfUkVHKGopKTsKKwkJaWYgKHBvc1tqXSAhPSAweGZmKSB7CiAJCQkvKiAweGZmIGFsbCBhY3Jvc3MgbWVhbnMgbm8gZGV2aWNlLiAweDAwIG1lYW5zCiAJCQkgKiBzb21ldGhpbmcncyBicm9rZW4sIGJ1dCBhIGRldmljZSBpcwogCQkJICogcHJvYmFibHkgdGhlcmUuICBIb3dldmVyLCBpZiB5b3UgZ2V0IDB4MDAKQEAgLTE2NywxMSArMTcyLDExIEBACiAJdW5zaWduZWQgY2hhciBieXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZihyZWcgPCAwIHx8IHJlZyA+PSA4KQorCWlmIChyZWcgPCAwIHx8IHJlZyA+PSA4KQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtY2FfbG9jaywgZmxhZ3MpOwotCWlmKG1jYV9kZXYtPnBvc19yZWdpc3RlcikgeworCWlmIChtY2FfZGV2LT5wb3NfcmVnaXN0ZXIpIHsKIAkJLyogRGlzYWJsZSBhZGFwdGVyIHNldHVwLCBlbmFibGUgbW90aGVyYm9hcmQgc2V0dXAgKi8KIAogCQlvdXRiX3AoMCwgTUNBX0FEQVBURVJfU0VUVVBfUkVHKTsKQEAgLTIwMyw3ICsyMDgsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZihyZWcgPCAwIHx8IHJlZyA+PSA4KQorCWlmIChyZWcgPCAwIHx8IHJlZyA+PSA4KQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhX2xvY2ssIGZsYWdzKTsKQEAgLTIyNywxNyArMjMyLDE3IEBACiB9CiAKIC8qIGZvciB0aGUgcHJpbWFyeSBNQ0EgYnVzLCB3ZSBoYXZlIGlkZW50aXR5IHRyYW5zZm9ybXMgKi8KLXN0YXRpYyBpbnQgbWNhX2R1bW15X3RyYW5zZm9ybV9pcnEoc3RydWN0IG1jYV9kZXZpY2UgKiBtY2FfZGV2LCBpbnQgaXJxKQorc3RhdGljIGludCBtY2FfZHVtbXlfdHJhbnNmb3JtX2lycShzdHJ1Y3QgbWNhX2RldmljZSAqbWNhX2RldiwgaW50IGlycSkKIHsKIAlyZXR1cm4gaXJxOwogfQogCi1zdGF0aWMgaW50IG1jYV9kdW1teV90cmFuc2Zvcm1faW9wb3J0KHN0cnVjdCBtY2FfZGV2aWNlICogbWNhX2RldiwgaW50IHBvcnQpCitzdGF0aWMgaW50IG1jYV9kdW1teV90cmFuc2Zvcm1faW9wb3J0KHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2LCBpbnQgcG9ydCkKIHsKIAlyZXR1cm4gcG9ydDsKIH0KIAotc3RhdGljIHZvaWQgKm1jYV9kdW1teV90cmFuc2Zvcm1fbWVtb3J5KHN0cnVjdCBtY2FfZGV2aWNlICogbWNhX2Rldiwgdm9pZCAqbWVtKQorc3RhdGljIHZvaWQgKm1jYV9kdW1teV90cmFuc2Zvcm1fbWVtb3J5KHN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2LCB2b2lkICptZW0pCiB7CiAJcmV0dXJuIG1lbTsKIH0KQEAgLTI1MSw3ICsyNTYsOCBAQAogCXNob3J0IG1jYV9idWlsdGluX3Njc2lfcG9ydHNbXSA9IHsweGY3LCAweGZkLCAweDAwfTsKIAlzdHJ1Y3QgbWNhX2J1cyAqYnVzOwogCi0JLyogV0FSTklORzogQmUgY2FyZWZ1bCB3aGVuIG1ha2luZyBjaGFuZ2VzIGhlcmUuIFB1dHRpbmcgYW4gYWRhcHRlcgorCS8qCisJICogV0FSTklORzogQmUgY2FyZWZ1bCB3aGVuIG1ha2luZyBjaGFuZ2VzIGhlcmUuIFB1dHRpbmcgYW4gYWRhcHRlcgogCSAqIGFuZCB0aGUgbW90aGVyYm9hcmQgc2ltdWx0YW5lb3VzbHkgaW50byBzZXR1cCBtb2RlIG1heSByZXN1bHQgaW4KIAkgKiBkYW1hZ2UgdG8gY2hpcHMgKGFjY29yZGluZyB0byBUaGUgSW5kaXNwZW5zaWJsZSBQQyBIYXJkd2FyZSBCb29rCiAJICogYnkgSGFucy1QZXRlciBNZXNzbWVyKS4gQWxzbywgd2UgZGlzYWJsZSBzeXN0ZW0gaW50ZXJydXB0cyAoc28KQEAgLTI4Myw3ICsyODksNyBAQAogCiAJLyogZ2V0IHRoZSBtb3RoZXJib2FyZCBkZXZpY2UgKi8KIAltY2FfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQlpZih1bmxpa2VseSghbWNhX2RldikpCisJaWYgKHVubGlrZWx5KCFtY2FfZGV2KSkKIAkJZ290byBvdXRfbm9tZW07CiAKIAkvKgpAQCAtMzA5LDcgKzMxNSw3IEBACiAJbWNhX3JlZ2lzdGVyX2RldmljZShNQ0FfUFJJTUFSWV9CVVMsIG1jYV9kZXYpOwogCiAJbWNhX2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2FfZGV2aWNlKSwgR0ZQX0FUT01JQyk7Ci0JaWYodW5saWtlbHkoIW1jYV9kZXYpKQorCWlmICh1bmxpa2VseSghbWNhX2RldikpCiAJCWdvdG8gb3V0X3VubG9ja19ub21lbTsKIAogCS8qIFB1dCBtb3RoZXJib2FyZCBpbnRvIHZpZGVvIHNldHVwIG1vZGUsIHJlYWQgaW50ZWdyYXRlZCB2aWRlbwpAQCAtMzI2LDcgKzMzMiw4IEBACiAJbWNhX2Rldi0+c2xvdCA9IE1DQV9JTlRFR1ZJREVPOwogCW1jYV9yZWdpc3Rlcl9kZXZpY2UoTUNBX1BSSU1BUllfQlVTLCBtY2FfZGV2KTsKIAotCS8qIFB1dCBtb3RoZXJib2FyZCBpbnRvIHNjc2kgc2V0dXAgbW9kZSwgcmVhZCBpbnRlZ3JhdGVkIHNjc2kKKwkvKgorCSAqIFB1dCBtb3RoZXJib2FyZCBpbnRvIHNjc2kgc2V0dXAgbW9kZSwgcmVhZCBpbnRlZ3JhdGVkIHNjc2kKIAkgKiBQT1MgcmVnaXN0ZXJzLCBhbmQgdHVybiBtb3RoZXJib2FyZCBzZXR1cCBvZmYuCiAJICoKIAkgKiBJdCBzZWVtcyB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIFNDU0kgcmVnaXN0ZXJzLiBNYXJ0aW4gc2F5cyB0aGF0CkBAIC0zMzgsMTggKzM0NSwxOCBAQAogCSAqIG1hY2hpbmUuCiAJICovCiAKLQlmb3IoaSA9IDA7ICh3aGljaF9zY3NpID0gbWNhX2J1aWx0aW5fc2NzaV9wb3J0c1tpXSkgIT0gMDsgaSsrKSB7CisJZm9yIChpID0gMDsgKHdoaWNoX3Njc2kgPSBtY2FfYnVpbHRpbl9zY3NpX3BvcnRzW2ldKSAhPSAwOyBpKyspIHsKIAkJb3V0Yl9wKHdoaWNoX3Njc2ksIE1DQV9NT1RIRVJCT0FSRF9TRVRVUF9SRUcpOwotCQlpZihtY2FfcmVhZF9hbmRfc3RvcmVfcG9zKHBvcykpCisJCWlmIChtY2FfcmVhZF9hbmRfc3RvcmVfcG9zKHBvcykpCiAJCQlicmVhazsKIAl9Ci0JaWYod2hpY2hfc2NzaSkgeworCWlmICh3aGljaF9zY3NpKSB7CiAJCS8qIGZvdW5kIGEgc2NzaSBjYXJkICovCiAJCW1jYV9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWNhX2RldmljZSksIEdGUF9BVE9NSUMpOwotCQlpZih1bmxpa2VseSghbWNhX2RldikpCisJCWlmICh1bmxpa2VseSghbWNhX2RldikpCiAJCQlnb3RvIG91dF91bmxvY2tfbm9tZW07CiAKLQkJZm9yKGogPSAwOyBqIDwgODsgaisrKQorCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQogCQkJbWNhX2Rldi0+cG9zW2pdID0gcG9zW2pdOwogCiAJCW1jYV9jb25maWd1cmVfYWRhcHRlcl9zdGF0dXMobWNhX2Rldik7CkBAIC0zNjQsMjEgKzM3MSwyMiBAQAogCiAJb3V0Yl9wKDB4ZmYsIE1DQV9NT1RIRVJCT0FSRF9TRVRVUF9SRUcpOwogCi0JLyogTm93IGxvb3Agb3ZlciBNQ0Egc2xvdHM6IHB1dCBlYWNoIGFkYXB0ZXIgaW50byBzZXR1cCBtb2RlLCBhbmQKKwkvKgorCSAqIE5vdyBsb29wIG92ZXIgTUNBIHNsb3RzOiBwdXQgZWFjaCBhZGFwdGVyIGludG8gc2V0dXAgbW9kZSwgYW5kCiAJICogcmVhZCBpdHMgUE9TIHJlZ2lzdGVycy4gVGhlbiBwdXQgYWRhcHRlciBzZXR1cCBvZmYuCiAJICovCiAKLQlmb3IoaT0wOyBpPE1DQV9NQVhfU0xPVF9OUjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1DQV9NQVhfU0xPVF9OUjsgaSsrKSB7CiAJCW91dGJfcCgweDh8KGkmMHhmKSwgTUNBX0FEQVBURVJfU0VUVVBfUkVHKTsKLQkJaWYoIW1jYV9yZWFkX2FuZF9zdG9yZV9wb3MocG9zKSkKKwkJaWYgKCFtY2FfcmVhZF9hbmRfc3RvcmVfcG9zKHBvcykpCiAJCQljb250aW51ZTsKIAogCQltY2FfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jYV9kZXZpY2UpLCBHRlBfQVRPTUlDKTsKLQkJaWYodW5saWtlbHkoIW1jYV9kZXYpKQorCQlpZiAodW5saWtlbHkoIW1jYV9kZXYpKQogCQkJZ290byBvdXRfdW5sb2NrX25vbWVtOwogCi0JCWZvcihqPTA7IGo8ODsgaisrKQotCQkJbWNhX2Rldi0+cG9zW2pdPXBvc1tqXTsKKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKwkJCW1jYV9kZXYtPnBvc1tqXSA9IHBvc1tqXTsKIAogCQltY2FfZGV2LT5kcml2ZXJfbG9hZGVkID0gMDsKIAkJbWNhX2Rldi0+c2xvdCA9IGk7CkBAIC00MTQsMjAgKzQyMiwyMCBAQAogewogCWludCBzbG90ID0gbWNhX2Rldi0+c2xvdDsKIAotCWlmKHNsb3QgPT0gTUNBX0lOVEVHU0NTSSkgeworCWlmIChzbG90ID09IE1DQV9JTlRFR1NDU0kpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiTk1JOiBjYXVzZWQgYnkgTUNBIGludGVncmF0ZWQgU0NTSSBhZGFwdGVyICglcylcbiIsCiAJCQltY2FfZGV2LT5uYW1lKTsKLQl9IGVsc2UgaWYoc2xvdCA9PSBNQ0FfSU5URUdWSURFTykgeworCX0gZWxzZSBpZiAoc2xvdCA9PSBNQ0FfSU5URUdWSURFTykgewogCQlwcmludGsoS0VSTl9DUklUICJOTUk6IGNhdXNlZCBieSBNQ0EgaW50ZWdyYXRlZCB2aWRlbyBhZGFwdGVyICglcylcbiIsCiAJCQltY2FfZGV2LT5uYW1lKTsKLQl9IGVsc2UgaWYoc2xvdCA9PSBNQ0FfTU9USEVSQk9BUkQpIHsKKwl9IGVsc2UgaWYgKHNsb3QgPT0gTUNBX01PVEhFUkJPQVJEKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgIk5NSTogY2F1c2VkIGJ5IG1vdGhlcmJvYXJkICglcylcbiIsCiAJCQltY2FfZGV2LT5uYW1lKTsKIAl9CiAKIAkvKiBNb3JlIGluZm8gYXZhaWxhYmxlIGluIFBPUyA2IGFuZCA3PyAqLwogCi0JaWYoY2hlY2tfZmxhZykgeworCWlmIChjaGVja19mbGFnKSB7CiAJCXVuc2lnbmVkIGNoYXIgcG9zNiwgcG9zNzsKIAogCQlwb3M2ID0gbWNhX2RldmljZV9yZWFkX3BvcyhtY2FfZGV2LCA2KTsKQEAgLTQ0Nyw4ICs0NTUsOSBAQAogCiAJcG9zNSA9IG1jYV9kZXZpY2VfcmVhZF9wb3MobWNhX2RldiwgNSk7CiAKLQlpZighKHBvczUgJiAweDgwKSkgewotCQkvKiBCaXQgNyBvZiBQT1MgNSBpcyByZXNldCB3aGVuIHRoaXMgYWRhcHRlciBoYXMgYSBoYXJkd2FyZQorCWlmICghKHBvczUgJiAweDgwKSkgeworCQkvKgorCQkgKiAgQml0IDcgb2YgUE9TIDUgaXMgcmVzZXQgd2hlbiB0aGlzIGFkYXB0ZXIgaGFzIGEgaGFyZHdhcmUKIAkJICogZXJyb3IuIEJpdCA3IGl0IHJlc2V0IGlmIHRoZXJlJ3MgZXJyb3IgaW5mb3JtYXRpb24KIAkJICogYXZhaWxhYmxlIGluIFBPUyA2IGFuZCA3LgogCQkgKi8KQEAgLTQ2MCw3ICs0NjksOCBAQAogCiB2b2lkIF9fa3Byb2JlcyBtY2FfaGFuZGxlX25taSh2b2lkKQogewotCS8qIEZpcnN0IHRyeSAtIHNjYW4gdGhlIHZhcmlvdXMgYWRhcHRlcnMgYW5kIHNlZSBpZiBhIHNwZWNpZmljCisJLyoKKwkgKiAgRmlyc3QgdHJ5IC0gc2NhbiB0aGUgdmFyaW91cyBhZGFwdGVycyBhbmQgc2VlIGlmIGEgc3BlY2lmaWMKIAkgKiBhZGFwdGVyIHdhcyByZXNwb25zaWJsZSBmb3IgdGhlIGVycm9yLgogCSAqLwogCWJ1c19mb3JfZWFjaF9kZXYoJm1jYV9idXNfdHlwZSwgTlVMTCwgTlVMTCwgbWNhX2hhbmRsZV9ubWlfY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21mZ3B0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWZncHRfMzIuYwppbmRleCAwMjdmYzA2Li5iNDAyYzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWZncHRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWZncHRfMzIuYwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2dlb2RlLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWZncHRfdGltZXJfdCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlLmMKaW5kZXggZjI3MDJkMC4uNjk3MjllMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGUuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJfQogCXJldHVybiAwOwogZmluZDoKLQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUgJWQgZm91bmQgYSBtYXRjaGluZyBtaWNyb2NvZGUgdXBkYXRlIHdpdGgiCisJcHJfZGVidWcoIm1pY3JvY29kZTogQ1BVJWQgZm91bmQgYSBtYXRjaGluZyBtaWNyb2NvZGUgdXBkYXRlIHdpdGgiCiAJCSIgdmVyc2lvbiAweCV4IChjdXJyZW50PTB4JXgpXG4iLCBjcHUsIG1jX2hlYWRlci0+cmV2LHVjaS0+cmV2KTsKIAluZXdfbWMgPSB2bWFsbG9jKHRvdGFsX3NpemUpOwogCWlmICghbmV3X21jKSB7CkBAIC0zMzYsMTEgKzMzNiwxMSBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWljcm9jb2RlX3VwZGF0ZV9sb2NrLCBmbGFncyk7CiAJaWYgKHZhbFsxXSAhPSB1Y2ktPm1jLT5oZHIucmV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBDUFUlZCB1cGRhdGVkIGZyb20gcmV2aXNpb24gIgorCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogQ1BVJWQgdXBkYXRlIGZyb20gcmV2aXNpb24gIgogCQkJIjB4JXggdG8gMHgleCBmYWlsZWRcbiIsIGNwdV9udW0sIHVjaS0+cmV2LCB2YWxbMV0pOwogCQlyZXR1cm47CiAJfQotCXByX2RlYnVnKCJtaWNyb2NvZGU6IENQVSVkIHVwZGF0ZWQgZnJvbSByZXZpc2lvbiAiCisJcHJpbnRrKEtFUk5fSU5GTyAibWljcm9jb2RlOiBDUFUlZCB1cGRhdGVkIGZyb20gcmV2aXNpb24gIgogCSAgICAgICAiMHgleCB0byAweCV4LCBkYXRlID0gJTA4eCBcbiIsIAogCSAgICAgICBjcHVfbnVtLCB1Y2ktPnJldiwgdmFsWzFdLCB1Y2ktPm1jLT5oZHIuZGF0ZSk7CiAJdWNpLT5yZXYgPSB2YWxbMV07CkBAIC00MDIsNyArNDAyLDcgQEAKIAogCQkJaWYgKCF1Y2ktPnZhbGlkKQogCQkJCWNvbnRpbnVlOwotCQkJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKwkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKIAkJCWVycm9yID0gZ2V0X21hY2hpbmdfbWljcm9jb2RlKG5ld19tYywgY3B1KTsKIAkJCWlmIChlcnJvciA8IDApCiAJCQkJZ290byBvdXQ7CkBAIC00MTYsNyArNDE2LDcgQEAKIAkJdmZyZWUobmV3X21jKTsKIAlpZiAoY3Vyc29yIDwgMCkKIAkJZXJyb3IgPSBjdXJzb3I7Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGQpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGQpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTM0LDcgKzUzNCw3IEBACiAJCWMtPng4NiwgYy0+eDg2X21vZGVsLCBjLT54ODZfbWFzayk7CiAJZXJyb3IgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgbmFtZSwgJm1pY3JvY29kZV9wZGV2LT5kZXYpOwogCWlmIChlcnJvcikgewotCQlwcl9kZWJ1ZygidWNvZGUgZGF0YSBmaWxlICVzIGxvYWQgZmFpbGVkXG4iLCBuYW1lKTsKKwkJcHJfZGVidWcoIm1pY3JvY29kZTogdWNvZGUgZGF0YSBmaWxlICVzIGxvYWQgZmFpbGVkXG4iLCBuYW1lKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlidWYgPSBmaXJtd2FyZS0+ZGF0YTsKQEAgLTU3OSw3ICs1NzksNyBAQAogCQlyZXR1cm4gMDsKIAogCW9sZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKIAogCS8qIENoZWNrIGlmIHRoZSBtaWNyb2NvZGUgd2UgaGF2ZSBpbiBtZW1vcnkgbWF0Y2hlcyB0aGUgQ1BVICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fCBjLT54ODYgPCA2IHx8CkBAIC02MTAsNyArNjEwLDcgQEAKIAkJCSIgc2lnPTB4JXgsIHBmPTB4JXgsIHJldj0weCV4XG4iLAogCQkJY3B1LCB1Y2ktPnNpZywgdWNpLT5wZiwgdWNpLT5yZXYpOwogCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGQpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGQpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTYyMSwxMyArNjIxLDEzIEBACiAKIAlvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKIAltdXRleF9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwogCWNvbGxlY3RfY3B1X2luZm8oY3B1KTsKIAlpZiAodWNpLT52YWxpZCAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcgJiYgIXJlc3VtZSkKIAkJY3B1X3JlcXVlc3RfbWljcm9jb2RlKGNwdSk7CiAJbXV0ZXhfdW5sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkKTsKIH0KIAogc3RhdGljIHZvaWQgbWljcm9jb2RlX2ZpbmlfY3B1KGludCBjcHUpCkBAIC02NTcsMTQgKzY1NywxNCBAQAogCQlvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAKIAkJZ2V0X29ubGluZV9jcHVzKCk7Ci0JCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKIAogCQltdXRleF9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwogCQlpZiAodWNpLT52YWxpZCkKIAkJCWVyciA9IGNwdV9yZXF1ZXN0X21pY3JvY29kZShjcHUpOwogCQltdXRleF91bmxvY2soJm1pY3JvY29kZV9tdXRleCk7CiAJCXB1dF9vbmxpbmVfY3B1cygpOwotCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZCk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGQpOwogCX0KIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtNzA5LDcgKzcwOSw3IEBACiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAwOwogCi0JcHJfZGVidWcoIk1pY3JvY29kZTpDUFUgJWQgYWRkZWRcbiIsIGNwdSk7CisJcHJfZGVidWcoIm1pY3JvY29kZTogQ1BVJWQgYWRkZWRcbiIsIGNwdSk7CiAJbWVtc2V0KHVjaSwgMCwgc2l6ZW9mKCp1Y2kpKTsKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOwpAQCAtNzMzLDcgKzczMyw3IEBACiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAwOwogCi0JcHJfZGVidWcoIk1pY3JvY29kZTpDUFUgJWQgcmVtb3ZlZFxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCByZW1vdmVkXG4iLCBjcHUpOwogCW1pY3JvY29kZV9maW5pX2NwdShjcHUpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOwogCXJldHVybiAwOwpAQCAtNzQ1LDcgKzc0NSw3IEBACiAKIAlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuIDA7Ci0JcHJfZGVidWcoIk1pY3JvY29kZTpDUFUgJWQgcmVzdW1lZFxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCByZXN1bWVkXG4iLCBjcHUpOwogCS8qIG9ubHkgQ1BVIDAgd2lsbCBhcHBseSB1Y29kZSBoZXJlICovCiAJYXBwbHlfbWljcm9jb2RlKDApOwogCXJldHVybiAwOwpAQCAtNzgzLDcgKzc4Myw3IEBACiAJCX0KIAljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46CiAJCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZtY19hdHRyX2dyb3VwKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiTWljcm9jb2RlOiBGYWlsZWQgdG8gY3JlYXRlIHRoZSBzeXNmcyAiCisJCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc3lzZnMgIgogCQkJCSJncm91cCBmb3IgQ1BVJWRcbiIsIGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzQ0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0wLDAgKzEsMTEwNSBAQAorLyoKKyAqCUludGVsIE11bHRpcHJvY2Vzc29yIFNwZWNpZmljYXRpb24gMS4xIGFuZCAxLjQKKyAqCWNvbXBsaWFudCBNUC10YWJsZSBwYXJzaW5nIHJvdXRpbmVzLgorICoKKyAqCShjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgorICoJKGMpIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKiAgICAgIChjKSAyMDA4IEFsZXhleSBTdGFyaWtvdnNraXkgPGFzdGFyaWtvdnNraXlAc3VzZS5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CisjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vYmlvc19lYmRhLmg+CisKKyNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+CisjaW5jbHVkZSA8bWFjaF9tcHBhcnNlLmg+CisjZW5kaWYKKworLyogSGF2ZSB3ZSBmb3VuZCBhbiBNUCB0YWJsZSAqLworaW50IHNtcF9mb3VuZF9jb25maWc7CisKKy8qCisgKiBWYXJpb3VzIExpbnV4LWludGVybmFsIGRhdGEgc3RydWN0dXJlcyBjcmVhdGVkIGZyb20gdGhlCisgKiBNUC10YWJsZS4KKyAqLworI2lmIGRlZmluZWQgKENPTkZJR19NQ0EpIHx8IGRlZmluZWQgKENPTkZJR19FSVNBKQoraW50IG1wX2J1c19pZF90b190eXBlW01BWF9NUF9CVVNTRVNdOworI2VuZGlmCisKK0RFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKK2ludCBtcF9idXNfaWRfdG9fcGNpX2J1c1tNQVhfTVBfQlVTU0VTXSA9IHtbMCAuLi4gTUFYX01QX0JVU1NFUyAtIDFdID0gLTEgfTsKKworc3RhdGljIGludCBtcF9jdXJyZW50X3BjaV9pZDsKKworaW50IHBpY19tb2RlOworCisvKgorICogSW50ZWwgTVAgQklPUyB0YWJsZSBwYXJzaW5nIHJvdXRpbmVzOgorICovCisKKy8qCisgKiBDaGVja3N1bSBhbiBNUCBjb25maWd1cmF0aW9uIGJsb2NrLgorICovCisKK3N0YXRpYyBpbnQgX19pbml0IG1wZl9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICptcCwgaW50IGxlbikKK3sKKwlpbnQgc3VtID0gMDsKKworCXdoaWxlIChsZW4tLSkKKwkJc3VtICs9ICptcCsrOworCisJcmV0dXJuIHN1bSAmIDB4RkY7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisvKgorICogSGF2ZSB0byBtYXRjaCB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyaWVzIHRvIG1haW4gdGFibGUgZW50cmllcyBieSBjb3VudGVyCisgKiBoZW5jZSB0aGUgbXBjX3JlY29yZCB2YXJpYWJsZSAuLi4uIGNhbid0IHNlZSBhIGxlc3MgZGlzZ3VzdGluZyB3YXkgb2YKKyAqIGRvaW5nIHRoaXMgLi4uLgorICovCisKK3N0YXRpYyBpbnQgbXBjX3JlY29yZDsKK3N0YXRpYyBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fdGFibGVbTUFYX01QQ19FTlRSWV0KKyAgICBfX2NwdWluaXRkYXRhOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBNUF9wcm9jZXNzb3JfaW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pCit7CisJaW50IGFwaWNpZDsKKwljaGFyICpib290dXBfY3B1ID0gIiI7CisKKwlpZiAoIShtLT5tcGNfY3B1ZmxhZyAmIENQVV9FTkFCTEVEKSkgeworCQlkaXNhYmxlZF9jcHVzKys7CisJCXJldHVybjsKKwl9CisjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQorCWFwaWNpZCA9IG1wY19hcGljX2lkKG0sIHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdKTsKKyNlbHNlCisJYXBpY2lkID0gbS0+bXBjX2FwaWNpZDsKKyNlbmRpZgorCWlmIChtLT5tcGNfY3B1ZmxhZyAmIENQVV9CT09UUFJPQ0VTU09SKSB7CisJCWJvb3R1cF9jcHUgPSAiIChCb290dXAtQ1BVKSI7CisJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IG0tPm1wY19hcGljaWQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiUHJvY2Vzc29yICMlZCVzXG4iLCBtLT5tcGNfYXBpY2lkLCBib290dXBfY3B1KTsKKwlnZW5lcmljX3Byb2Nlc3Nvcl9pbmZvKGFwaWNpZCwgbS0+bXBjX2FwaWN2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgTVBfYnVzX2luZm8oc3RydWN0IG1wY19jb25maWdfYnVzICptKQoreworCWNoYXIgc3RyWzddOworCisJbWVtY3B5KHN0ciwgbS0+bXBjX2J1c3R5cGUsIDYpOworCXN0cls2XSA9IDA7CisKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisJbXBjX29lbV9idXNfaW5mbyhtLCBzdHIsIHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdKTsKKyNlbHNlCisJRHByaW50aygiQnVzICMlZCBpcyAlc1xuIiwgbS0+bXBjX2J1c2lkLCBzdHIpOworI2VuZGlmCisKKyNpZiBNQVhfTVBfQlVTU0VTIDwgMjU2CisJaWYgKG0tPm1wY19idXNpZCA+PSBNQVhfTVBfQlVTU0VTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1QIHRhYmxlIGJ1c2lkIHZhbHVlICglZCkgZm9yIGJ1c3R5cGUgJXMgIgorCQkgICAgICAgIiBpcyB0b28gbGFyZ2UsIG1heC4gc3VwcG9ydGVkIGlzICVkXG4iLAorCQkgICAgICAgbS0+bXBjX2J1c2lkLCBzdHIsIE1BWF9NUF9CVVNTRVMgLSAxKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJaWYgKHN0cm5jbXAoc3RyLCBCVVNUWVBFX0lTQSwgc2l6ZW9mKEJVU1RZUEVfSVNBKSAtIDEpID09IDApIHsKKwkJIHNldF9iaXQobS0+bXBjX2J1c2lkLCBtcF9idXNfbm90X3BjaSk7CisjaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZCAoQ09ORklHX01DQSkKKwkJbXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19JU0E7CisjZW5kaWYKKwl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBCVVNUWVBFX1BDSSwgc2l6ZW9mKEJVU1RZUEVfUENJKSAtIDEpID09IDApIHsKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisJCW1wY19vZW1fcGNpX2J1cyhtLCB0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSk7CisjZW5kaWYKKwkJY2xlYXJfYml0KG0tPm1wY19idXNpZCwgbXBfYnVzX25vdF9wY2kpOworCQltcF9idXNfaWRfdG9fcGNpX2J1c1ttLT5tcGNfYnVzaWRdID0gbXBfY3VycmVudF9wY2lfaWQ7CisJCW1wX2N1cnJlbnRfcGNpX2lkKys7CisjaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZCAoQ09ORklHX01DQSkKKwkJbXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19QQ0k7CisJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgQlVTVFlQRV9FSVNBLCBzaXplb2YoQlVTVFlQRV9FSVNBKSAtIDEpID09IDApIHsKKwkJbXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19FSVNBOworCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsIEJVU1RZUEVfTUNBLCBzaXplb2YoQlVTVFlQRV9NQ0EpIC0gMSkgPT0gMCkgeworCQltcF9idXNfaWRfdG9fdHlwZVttLT5tcGNfYnVzaWRdID0gTVBfQlVTX01DQTsKKyNlbmRpZgorCX0gZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIGJ1c3R5cGUgJXMgLSBpZ25vcmluZ1xuIiwgc3RyKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCitzdGF0aWMgaW50IGJhZF9pb2FwaWModW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCWlmIChucl9pb2FwaWNzID49IE1BWF9JT19BUElDUykgeworCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAiCisJCSAgICAgICAiKGZvdW5kICVkKVxuIiwgTUFYX0lPX0FQSUNTLCBucl9pb2FwaWNzKTsKKwkJcGFuaWMoIlJlY29tcGlsZSBrZXJuZWwgd2l0aCBiaWdnZXIgTUFYX0lPX0FQSUNTIVxuIik7CisJfQorCWlmICghYWRkcmVzcykgeworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IEJvZ3VzICh6ZXJvKSBJL08gQVBJQyBhZGRyZXNzIgorCQkgICAgICAgIiBmb3VuZCBpbiB0YWJsZSwgc2tpcHBpbmchXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgTVBfaW9hcGljX2luZm8oc3RydWN0IG1wY19jb25maWdfaW9hcGljICptKQoreworCWlmICghKG0tPm1wY19mbGFncyAmIE1QQ19BUElDX1VTQUJMRSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIkkvTyBBUElDICMlZCBWZXJzaW9uICVkIGF0IDB4JVguXG4iLAorCSAgICAgICBtLT5tcGNfYXBpY2lkLCBtLT5tcGNfYXBpY3ZlciwgbS0+bXBjX2FwaWNhZGRyKTsKKworCWlmIChiYWRfaW9hcGljKG0tPm1wY19hcGljYWRkcikpCisJCXJldHVybjsKKworCW1wX2lvYXBpY3NbbnJfaW9hcGljc10gPSAqbTsKKwlucl9pb2FwaWNzKys7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBNUF9pbnRzcmNfaW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgKm0pCit7CisJbXBfaXJxc1ttcF9pcnFfZW50cmllc10gPSAqbTsKKwlEcHJpbnRrKCJJbnQ6IHR5cGUgJWQsIHBvbCAlZCwgdHJpZyAlZCwgYnVzICVkLCIKKwkJIiBJUlEgJTAyeCwgQVBJQyBJRCAleCwgQVBJQyBJTlQgJTAyeFxuIiwKKwkJbS0+bXBjX2lycXR5cGUsIG0tPm1wY19pcnFmbGFnICYgMywKKwkJKG0tPm1wY19pcnFmbGFnID4+IDIpICYgMywgbS0+bXBjX3NyY2J1cywKKwkJbS0+bXBjX3NyY2J1c2lycSwgbS0+bXBjX2RzdGFwaWMsIG0tPm1wY19kc3RpcnEpOworCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKKwkJcGFuaWMoIk1heCAjIG9mIGlycSBzb3VyY2VzIGV4Y2VlZGVkISFcbiIpOworfQorCisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pbml0IE1QX2xpbnRzcmNfaW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ19saW50c3JjICptKQoreworCURwcmludGsoIkxpbnQ6IHR5cGUgJWQsIHBvbCAlZCwgdHJpZyAlZCwgYnVzICVkLCIKKwkJIiBJUlEgJTAyeCwgQVBJQyBJRCAleCwgQVBJQyBMSU5UICUwMnhcbiIsCisJCW0tPm1wY19pcnF0eXBlLCBtLT5tcGNfaXJxZmxhZyAmIDMsCisJCShtLT5tcGNfaXJxZmxhZyA+PiAyKSAmIDMsIG0tPm1wY19zcmNidXNpZCwKKwkJbS0+bXBjX3NyY2J1c2lycSwgbS0+bXBjX2Rlc3RhcGljLCBtLT5tcGNfZGVzdGFwaWNsaW50KTsKK30KKworI2lmZGVmIENPTkZJR19YODZfTlVNQVEKK3N0YXRpYyB2b2lkIF9faW5pdCBNUF90cmFuc2xhdGlvbl9pbmZvKHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICptKQoreworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIlRyYW5zbGF0aW9uOiByZWNvcmQgJWQsIHR5cGUgJWQsIHF1YWQgJWQsIGdsb2JhbCAlZCwgbG9jYWwgJWRcbiIsCisJICAgICAgIG1wY19yZWNvcmQsIG0tPnRyYW5zX3R5cGUsIG0tPnRyYW5zX3F1YWQsIG0tPnRyYW5zX2dsb2JhbCwKKwkgICAgICAgbS0+dHJhbnNfbG9jYWwpOworCisJaWYgKG1wY19yZWNvcmQgPj0gTUFYX01QQ19FTlRSWSkKKwkJcHJpbnRrKEtFUk5fRVJSICJNQVhfTVBDX0VOVFJZIGV4Y2VlZGVkIVxuIik7CisJZWxzZQorCQl0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSA9IG07CS8qIHN0YXNoIHRoaXMgZm9yIGxhdGVyICovCisJaWYgKG0tPnRyYW5zX3F1YWQgPCBNQVhfTlVNTk9ERVMgJiYgIW5vZGVfb25saW5lKG0tPnRyYW5zX3F1YWQpKQorCQlub2RlX3NldF9vbmxpbmUobS0+dHJhbnNfcXVhZCk7Cit9CisKKy8qCisgKiBSZWFkL3BhcnNlIHRoZSBNUEMgb2VtIHRhYmxlcworICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbXBfcmVhZF9tcGNfb2VtKHN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKm9lbXRhYmxlLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBvZW1zaXplKQoreworCWludCBjb3VudCA9IHNpemVvZigqb2VtdGFibGUpOwkvKiB0aGUgaGVhZGVyIHNpemUgKi8KKwl1bnNpZ25lZCBjaGFyICpvZW1wdHIgPSAoKHVuc2lnbmVkIGNoYXIgKilvZW10YWJsZSkgKyBjb3VudDsKKworCW1wY19yZWNvcmQgPSAwOworCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdCAuLi4gXG4iLAorCSAgICAgICBvZW10YWJsZSk7CisJaWYgKG1lbWNtcChvZW10YWJsZS0+b2VtX3NpZ25hdHVyZSwgTVBDX09FTV9TSUdOQVRVUkUsIDQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJTTVAgbXBjIG9lbXRhYmxlOiBiYWQgc2lnbmF0dXJlIFslYyVjJWMlY10hXG4iLAorCQkgICAgICAgb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbMF0sIG9lbXRhYmxlLT5vZW1fc2lnbmF0dXJlWzFdLAorCQkgICAgICAgb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbMl0sIG9lbXRhYmxlLT5vZW1fc2lnbmF0dXJlWzNdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobXBmX2NoZWNrc3VtKCh1bnNpZ25lZCBjaGFyICopb2VtdGFibGUsIG9lbXRhYmxlLT5vZW1fbGVuZ3RoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVAgb2VtIG1wdGFibGU6IGNoZWNrc3VtIGVycm9yIVxuIik7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKGNvdW50IDwgb2VtdGFibGUtPm9lbV9sZW5ndGgpIHsKKwkJc3dpdGNoICgqb2VtcHRyKSB7CisJCWNhc2UgTVBfVFJBTlNMQVRJT046CisJCQl7CisJCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKm0gPQorCQkJCSAgICAoc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKilvZW1wdHI7CisJCQkJTVBfdHJhbnNsYXRpb25faW5mbyhtKTsKKwkJCQlvZW1wdHIgKz0gc2l6ZW9mKCptKTsKKwkJCQljb3VudCArPSBzaXplb2YoKm0pOworCQkJCSsrbXBjX3JlY29yZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJVbnJlY29nbmlzZWQgT0VNIHRhYmxlIGVudHJ5IHR5cGUhIC0gJWRcbiIsCisJCQkJICAgICAgIChpbnQpKm9lbXB0cik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKwkJCQkgY2hhciAqcHJvZHVjdGlkKQoreworCWlmIChzdHJuY21wKG9lbSwgIklCTSBOVU1BIiwgOCkpCisJCXByaW50aygiV2FybmluZyEgIE1heSBub3QgYmUgYSBOVU1BLVEgc3lzdGVtIVxuIik7CisJaWYgKG1wYy0+bXBjX29lbXB0cikKKwkJc21wX3JlYWRfbXBjX29lbSgoc3RydWN0IG1wX2NvbmZpZ19vZW10YWJsZSAqKW1wYy0+bXBjX29lbXB0ciwKKwkJCQkgbXBjLT5tcGNfb2Vtc2l6ZSk7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9OVU1BUSAqLworCisvKgorICogUmVhZC9wYXJzZSB0aGUgTVBDCisgKi8KKworc3RhdGljIGludCBfX2luaXQgc21wX3JlYWRfbXBjKHN0cnVjdCBtcF9jb25maWdfdGFibGUgKm1wYywgdW5zaWduZWQgZWFybHkpCit7CisJY2hhciBzdHJbMTZdOworCWNoYXIgb2VtWzEwXTsKKwlpbnQgY291bnQgPSBzaXplb2YoKm1wYyk7CisJdW5zaWduZWQgY2hhciAqbXB0ID0gKCh1bnNpZ25lZCBjaGFyICopbXBjKSArIGNvdW50OworCisJaWYgKG1lbWNtcChtcGMtPm1wY19zaWduYXR1cmUsIE1QQ19TSUdOQVRVUkUsIDQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTVBUQUJMRTogYmFkIHNpZ25hdHVyZSBbJWMlYyVjJWNdIVxuIiwKKwkJICAgICAgIG1wYy0+bXBjX3NpZ25hdHVyZVswXSwgbXBjLT5tcGNfc2lnbmF0dXJlWzFdLAorCQkgICAgICAgbXBjLT5tcGNfc2lnbmF0dXJlWzJdLCBtcGMtPm1wY19zaWduYXR1cmVbM10pOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKW1wYywgbXBjLT5tcGNfbGVuZ3RoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIk1QVEFCTEU6IGNoZWNrc3VtIGVycm9yIVxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAobXBjLT5tcGNfc3BlYyAhPSAweDAxICYmIG1wYy0+bXBjX3NwZWMgIT0gMHgwNCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1QVEFCTEU6IGJhZCB0YWJsZSB2ZXJzaW9uICglZCkhIVxuIiwKKwkJICAgICAgIG1wYy0+bXBjX3NwZWMpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFtcGMtPm1wY19sYXBpYykgeworCQlwcmludGsoS0VSTl9FUlIgIk1QVEFCTEU6IG51bGwgbG9jYWwgQVBJQyBhZGRyZXNzIVxuIik7CisJCXJldHVybiAwOworCX0KKwltZW1jcHkob2VtLCBtcGMtPm1wY19vZW0sIDgpOworCW9lbVs4XSA9IDA7CisJcHJpbnRrKEtFUk5fSU5GTyAiTVBUQUJMRTogT0VNIElEOiAlcyAiLCBvZW0pOworCisJbWVtY3B5KHN0ciwgbXBjLT5tcGNfcHJvZHVjdGlkLCAxMik7CisJc3RyWzEyXSA9IDA7CisJcHJpbnRrKCJQcm9kdWN0IElEOiAlcyAiLCBzdHIpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCW1wc19vZW1fY2hlY2sobXBjLCBvZW0sIHN0cik7CisjZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPICJNUFRBQkxFOiBQcm9kdWN0IElEOiAlcyAiLCBzdHIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiTVBUQUJMRTogQVBJQyBhdDogMHglWFxuIiwgbXBjLT5tcGNfbGFwaWMpOworCisJLyogc2F2ZSB0aGUgbG9jYWwgQVBJQyBhZGRyZXNzLCBpdCBtaWdodCBiZSBub24tZGVmYXVsdCAqLworCWlmICghYWNwaV9sYXBpYykKKwkJbXBfbGFwaWNfYWRkciA9IG1wYy0+bXBjX2xhcGljOworCisJaWYgKGVhcmx5KQorCQlyZXR1cm4gMTsKKworCS8qCisJICogICAgICBOb3cgcHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiBibG9ja3MuCisJICovCisjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQorCW1wY19yZWNvcmQgPSAwOworI2VuZGlmCisJd2hpbGUgKGNvdW50IDwgbXBjLT5tcGNfbGVuZ3RoKSB7CisJCXN3aXRjaCAoKm1wdCkgeworCQljYXNlIE1QX1BST0NFU1NPUjoKKwkJCXsKKwkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0gPQorCQkJCSAgICAoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICopbXB0OworCQkJCS8qIEFDUEkgbWF5IGhhdmUgYWxyZWFkeSBwcm92aWRlZCB0aGlzIGRhdGEgKi8KKwkJCQlpZiAoIWFjcGlfbGFwaWMpCisJCQkJCU1QX3Byb2Nlc3Nvcl9pbmZvKG0pOworCQkJCW1wdCArPSBzaXplb2YoKm0pOworCQkJCWNvdW50ICs9IHNpemVvZigqbSk7CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgTVBfQlVTOgorCQkJeworCQkJCXN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSA9CisJCQkJICAgIChzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKiltcHQ7CisJCQkJTVBfYnVzX2luZm8obSk7CisJCQkJbXB0ICs9IHNpemVvZigqbSk7CisJCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBNUF9JT0FQSUM6CisJCQl7CisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJCQkJc3RydWN0IG1wY19jb25maWdfaW9hcGljICptID0KKwkJCQkgICAgKHN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyAqKW1wdDsKKwkJCQlNUF9pb2FwaWNfaW5mbyhtKTsKKyNlbmRpZgorCQkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19jb25maWdfaW9hcGljKTsKKwkJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19jb25maWdfaW9hcGljKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBNUF9JTlRTUkM6CisJCQl7CisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJCQkJc3RydWN0IG1wY19jb25maWdfaW50c3JjICptID0KKwkJCQkgICAgKHN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyAqKW1wdDsKKworCQkJCU1QX2ludHNyY19pbmZvKG0pOworI2VuZGlmCisJCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMpOworCQkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMpOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIE1QX0xJTlRTUkM6CisJCQl7CisJCQkJc3RydWN0IG1wY19jb25maWdfbGludHNyYyAqbSA9CisJCQkJICAgIChzdHJ1Y3QgbXBjX2NvbmZpZ19saW50c3JjICopbXB0OworCQkJCU1QX2xpbnRzcmNfaW5mbyhtKTsKKwkJCQltcHQgKz0gc2l6ZW9mKCptKTsKKwkJCQljb3VudCArPSBzaXplb2YoKm0pOworCQkJCWJyZWFrOworCQkJfQorCQlkZWZhdWx0OgorCQkJLyogd3JvbmcgbXB0YWJsZSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJZb3VyIG1wdGFibGUgaXMgd3JvbmcsIGNvbnRhY3QgeW91ciBIVyB2ZW5kb3IhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAidHlwZSAleFxuIiwgKm1wdCk7CisJCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIiAgIiwgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsCisJCQkJCTEsIG1wYywgbXBjLT5tcGNfbGVuZ3RoLCAxKTsKKwkJCWNvdW50ID0gbXBjLT5tcGNfbGVuZ3RoOworCQkJYnJlYWs7CisJCX0KKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCisJCSsrbXBjX3JlY29yZDsKKyNlbmRpZgorCX0KKwlzZXR1cF9hcGljX3JvdXRpbmcoKTsKKwlpZiAoIW51bV9wcm9jZXNzb3JzKQorCQlwcmludGsoS0VSTl9FUlIgIk1QVEFCTEU6IG5vIHByb2Nlc3NvcnMgcmVnaXN0ZXJlZCFcbiIpOworCXJldHVybiBudW1fcHJvY2Vzc29yczsKK30KKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCitzdGF0aWMgaW50IF9faW5pdCBFTENSX3RyaWdnZXIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgcG9ydDsKKworCXBvcnQgPSAweDRkMCArIChpcnEgPj4gMyk7CisJcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb25zdHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKGludCBtcGNfZGVmYXVsdF90eXBlKQoreworCXN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBpbnRzcmM7CisJaW50IGk7CisJaW50IEVMQ1JfZmFsbGJhY2sgPSAwOworCisJaW50c3JjLm1wY190eXBlID0gTVBfSU5UU1JDOworCWludHNyYy5tcGNfaXJxZmxhZyA9IDA7CS8qIGNvbmZvcm1pbmcgKi8KKwlpbnRzcmMubXBjX3NyY2J1cyA9IDA7CisJaW50c3JjLm1wY19kc3RhcGljID0gbXBfaW9hcGljc1swXS5tcGNfYXBpY2lkOworCisJaW50c3JjLm1wY19pcnF0eXBlID0gbXBfSU5UOworCisJLyoKKwkgKiAgSWYgdHJ1ZSwgd2UgaGF2ZSBhbiBJU0EvUENJIHN5c3RlbSB3aXRoIG5vIElSUSBlbnRyaWVzCisJICogIGluIHRoZSBNUCB0YWJsZS4gVG8gcHJldmVudCB0aGUgUENJIGludGVycnVwdHMgZnJvbSBiZWluZyBzZXQgdXAKKwkgKiAgaW5jb3JyZWN0bHksIHdlIHRyeSB0byB1c2UgdGhlIEVMQ1IuIFRoZSBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmCisJICogIHRoZXJlIGlzIGdvb2QgRUxDUiBkYXRhIGlzIHZlcnkgc2ltcGxlIC0gSVJRMCwgMSwgMiBhbmQgMTMgY2FuCisJICogIG5ldmVyIGJlIGxldmVsIHNlbnNpdGl2ZSwgc28gd2Ugc2ltcGx5IHNlZSBpZiB0aGUgRUxDUiBhZ3JlZXMuCisJICogIElmIGl0IGRvZXMsIHdlIGFzc3VtZSBpdCdzIHZhbGlkLgorCSAqLworCWlmIChtcGNfZGVmYXVsdF90eXBlID09IDUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSVNBL1BDSSBidXMgdHlwZSB3aXRoIG5vIElSUSBpbmZvcm1hdGlvbi4uLiAiCisJCSAgICAgICAiZmFsbGluZyBiYWNrIHRvIEVMQ1JcbiIpOworCisJCWlmIChFTENSX3RyaWdnZXIoMCkgfHwgRUxDUl90cmlnZ2VyKDEpIHx8IEVMQ1JfdHJpZ2dlcigyKSB8fAorCQkgICAgRUxDUl90cmlnZ2VyKDEzKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiRUxDUiBjb250YWlucyBpbnZhbGlkIGRhdGEuLi4gIgorCQkJICAgICAgICJub3QgdXNpbmcgRUxDUlxuIik7CisJCWVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJVc2luZyBFTENSIHRvIGlkZW50aWZ5IFBDSSBpbnRlcnJ1cHRzXG4iKTsKKwkJCUVMQ1JfZmFsbGJhY2sgPSAxOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJc3dpdGNoIChtcGNfZGVmYXVsdF90eXBlKSB7CisJCWNhc2UgMjoKKwkJCWlmIChpID09IDAgfHwgaSA9PSAxMykKKwkJCQljb250aW51ZTsJLyogSVJRMCAmIElSUTEzIG5vdCBjb25uZWN0ZWQgKi8KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJaWYgKGkgPT0gMikKKwkJCQljb250aW51ZTsJLyogSVJRMiBpcyBuZXZlciBjb25uZWN0ZWQgKi8KKwkJfQorCisJCWlmIChFTENSX2ZhbGxiYWNrKSB7CisJCQkvKgorCQkJICogIElmIHRoZSBFTENSIGluZGljYXRlcyBhIGxldmVsLXNlbnNpdGl2ZSBpbnRlcnJ1cHQsIHdlCisJCQkgKiAgY29weSB0aGF0IGluZm9ybWF0aW9uIG92ZXIgdG8gdGhlIE1QIHRhYmxlIGluIHRoZQorCQkJICogIGlycWZsYWcgZmllbGQgKGxldmVsIHNlbnNpdGl2ZSwgYWN0aXZlIGhpZ2ggcG9sYXJpdHkpLgorCQkJICovCisJCQlpZiAoRUxDUl90cmlnZ2VyKGkpKQorCQkJCWludHNyYy5tcGNfaXJxZmxhZyA9IDEzOworCQkJZWxzZQorCQkJCWludHNyYy5tcGNfaXJxZmxhZyA9IDA7CisJCX0KKworCQlpbnRzcmMubXBjX3NyY2J1c2lycSA9IGk7CisJCWludHNyYy5tcGNfZHN0aXJxID0gaSA/IGkgOiAyOwkvKiBJUlEwIHRvIElOVElOMiAqLworCQlNUF9pbnRzcmNfaW5mbygmaW50c3JjKTsKKwl9CisKKwlpbnRzcmMubXBjX2lycXR5cGUgPSBtcF9FeHRJTlQ7CisJaW50c3JjLm1wY19zcmNidXNpcnEgPSAwOworCWludHNyYy5tcGNfZHN0aXJxID0gMDsJLyogODI1OUEgdG8gSU5USU4wICovCisJTVBfaW50c3JjX2luZm8oJmludHNyYyk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbnN0cnVjdF9kZWZhdWx0X0lTQV9tcHRhYmxlKGludCBtcGNfZGVmYXVsdF90eXBlKQoreworCXN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciBwcm9jZXNzb3I7CisJc3RydWN0IG1wY19jb25maWdfYnVzIGJ1czsKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlzdHJ1Y3QgbXBjX2NvbmZpZ19pb2FwaWMgaW9hcGljOworI2VuZGlmCisJc3RydWN0IG1wY19jb25maWdfbGludHNyYyBsaW50c3JjOworCWludCBsaW50dHlwZXNbMl0gPSB7IG1wX0V4dElOVCwgbXBfTk1JIH07CisJaW50IGk7CisKKwkvKgorCSAqIGxvY2FsIEFQSUMgaGFzIGRlZmF1bHQgYWRkcmVzcworCSAqLworCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOworCisJLyoKKwkgKiAyIENQVXMsIG51bWJlcmVkIDAgJiAxLgorCSAqLworCXByb2Nlc3Nvci5tcGNfdHlwZSA9IE1QX1BST0NFU1NPUjsKKwkvKiBFaXRoZXIgYW4gaW50ZWdyYXRlZCBBUElDIG9yIGEgZGlzY3JldGUgODI0ODlEWC4gKi8KKwlwcm9jZXNzb3IubXBjX2FwaWN2ZXIgPSBtcGNfZGVmYXVsdF90eXBlID4gNCA/IDB4MTAgOiAweDAxOworCXByb2Nlc3Nvci5tcGNfY3B1ZmxhZyA9IENQVV9FTkFCTEVEOworCXByb2Nlc3Nvci5tcGNfY3B1ZmVhdHVyZSA9IChib290X2NwdV9kYXRhLng4NiA8PCA4KSB8CisJICAgIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PCA0KSB8IGJvb3RfY3B1X2RhdGEueDg2X21hc2s7CisJcHJvY2Vzc29yLm1wY19mZWF0dXJlZmxhZyA9IGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHlbMF07CisJcHJvY2Vzc29yLm1wY19yZXNlcnZlZFswXSA9IDA7CisJcHJvY2Vzc29yLm1wY19yZXNlcnZlZFsxXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlwcm9jZXNzb3IubXBjX2FwaWNpZCA9IGk7CisJCU1QX3Byb2Nlc3Nvcl9pbmZvKCZwcm9jZXNzb3IpOworCX0KKworCWJ1cy5tcGNfdHlwZSA9IE1QX0JVUzsKKwlidXMubXBjX2J1c2lkID0gMDsKKwlzd2l0Y2ggKG1wY19kZWZhdWx0X3R5cGUpIHsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIj8/P1xuVW5rbm93biBzdGFuZGFyZCBjb25maWd1cmF0aW9uICVkXG4iLAorCQkgICAgICAgbXBjX2RlZmF1bHRfdHlwZSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgMToKKwljYXNlIDU6CisJCW1lbWNweShidXMubXBjX2J1c3R5cGUsICJJU0EgICAiLCA2KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWNhc2UgNjoKKwljYXNlIDM6CisJCW1lbWNweShidXMubXBjX2J1c3R5cGUsICJFSVNBICAiLCA2KTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCWNhc2UgNzoKKwkJbWVtY3B5KGJ1cy5tcGNfYnVzdHlwZSwgIk1DQSAgICIsIDYpOworCX0KKwlNUF9idXNfaW5mbygmYnVzKTsKKwlpZiAobXBjX2RlZmF1bHRfdHlwZSA+IDQpIHsKKwkJYnVzLm1wY19idXNpZCA9IDE7CisJCW1lbWNweShidXMubXBjX2J1c3R5cGUsICJQQ0kgICAiLCA2KTsKKwkJTVBfYnVzX2luZm8oJmJ1cyk7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJaW9hcGljLm1wY190eXBlID0gTVBfSU9BUElDOworCWlvYXBpYy5tcGNfYXBpY2lkID0gMjsKKwlpb2FwaWMubXBjX2FwaWN2ZXIgPSBtcGNfZGVmYXVsdF90eXBlID4gNCA/IDB4MTAgOiAweDAxOworCWlvYXBpYy5tcGNfZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7CisJaW9hcGljLm1wY19hcGljYWRkciA9IDB4RkVDMDAwMDA7CisJTVBfaW9hcGljX2luZm8oJmlvYXBpYyk7CisKKwkvKgorCSAqIFdlIHNldCB1cCBtb3N0IG9mIHRoZSBsb3cgMTYgSU8tQVBJQyBwaW5zIGFjY29yZGluZyB0byBNUFMgcnVsZXMuCisJICovCisJY29uc3RydWN0X2RlZmF1bHRfaW9pcnFfbXB0YWJsZShtcGNfZGVmYXVsdF90eXBlKTsKKyNlbmRpZgorCWxpbnRzcmMubXBjX3R5cGUgPSBNUF9MSU5UU1JDOworCWxpbnRzcmMubXBjX2lycWZsYWcgPSAwOwkvKiBjb25mb3JtaW5nICovCisJbGludHNyYy5tcGNfc3JjYnVzaWQgPSAwOworCWxpbnRzcmMubXBjX3NyY2J1c2lycSA9IDA7CisJbGludHNyYy5tcGNfZGVzdGFwaWMgPSBNUF9BUElDX0FMTDsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWxpbnRzcmMubXBjX2lycXR5cGUgPSBsaW50dHlwZXNbaV07CisJCWxpbnRzcmMubXBjX2Rlc3RhcGljbGludCA9IGk7CisJCU1QX2xpbnRzcmNfaW5mbygmbGludHNyYyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGZfZm91bmQ7CisKKy8qCisgKiBTY2FuIHRoZSBtZW1vcnkgYmxvY2tzIGZvciBhbiBTTVAgY29uZmlndXJhdGlvbiBibG9jay4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IF9fZ2V0X3NtcF9jb25maWcodW5zaWduZWQgZWFybHkpCit7CisJc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGYgPSBtcGZfZm91bmQ7CisKKwlpZiAoYWNwaV9sYXBpYyAmJiBlYXJseSkKKwkJcmV0dXJuOworCS8qCisJICogQUNQSSBzdXBwb3J0cyBib3RoIGxvZ2ljYWwgKGUuZy4gSHlwZXItVGhyZWFkaW5nKSBhbmQgcGh5c2ljYWwKKwkgKiBwcm9jZXNzb3JzLCB3aGVyZSBNUFMgb25seSBzdXBwb3J0cyBwaHlzaWNhbC4KKwkgKi8KKwlpZiAoYWNwaV9sYXBpYyAmJiBhY3BpX2lvYXBpYykgeworCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBBQ1BJIChNQURUKSBmb3IgU01QIGNvbmZpZ3VyYXRpb24gIgorCQkgICAgICAgImluZm9ybWF0aW9uXG4iKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoYWNwaV9sYXBpYykKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgQUNQSSBmb3IgcHJvY2Vzc29yIChMQVBJQykgIgorCQkgICAgICAgImNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiSW50ZWwgTXVsdGlQcm9jZXNzb3IgU3BlY2lmaWNhdGlvbiB2MS4lZFxuIiwKKwkgICAgICAgbXBmLT5tcGZfc3BlY2lmaWNhdGlvbik7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmIChtcGYtPm1wZl9mZWF0dXJlMiAmICgxIDw8IDcpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiAgICBJTUNSIGFuZCBQSUMgY29tcGF0aWJpbGl0eSBtb2RlLlxuIik7CisJCXBpY19tb2RlID0gMTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIgICAgVmlydHVhbCBXaXJlIGNvbXBhdGliaWxpdHkgbW9kZS5cbiIpOworCQlwaWNfbW9kZSA9IDA7CisJfQorI2VuZGlmCisJLyoKKwkgKiBOb3cgc2VlIGlmIHdlIG5lZWQgdG8gcmVhZCBmdXJ0aGVyLgorCSAqLworCWlmIChtcGYtPm1wZl9mZWF0dXJlMSAhPSAwKSB7CisJCWlmIChlYXJseSkgeworCQkJLyoKKwkJCSAqIGxvY2FsIEFQSUMgaGFzIGRlZmF1bHQgYWRkcmVzcworCQkJICovCisJCQltcF9sYXBpY19hZGRyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKKwkJCXJldHVybjsKKwkJfQorCisJCXByaW50ayhLRVJOX0lORk8gIkRlZmF1bHQgTVAgY29uZmlndXJhdGlvbiAjJWRcbiIsCisJCSAgICAgICBtcGYtPm1wZl9mZWF0dXJlMSk7CisJCWNvbnN0cnVjdF9kZWZhdWx0X0lTQV9tcHRhYmxlKG1wZi0+bXBmX2ZlYXR1cmUxKTsKKworCX0gZWxzZSBpZiAobXBmLT5tcGZfcGh5c3B0cikgeworCisJCS8qCisJCSAqIFJlYWQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRhYmxlLiAgQW55dGhpbmcgaGVyZSB3aWxsCisJCSAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy4KKwkJICovCisJCWlmICghc21wX3JlYWRfbXBjKHBoeXNfdG9fdmlydChtcGYtPm1wZl9waHlzcHRyKSwgZWFybHkpKSB7CisJCQlzbXBfZm91bmRfY29uZmlnID0gMDsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJCSU9TIGJ1ZywgTVAgdGFibGUgZXJyb3JzIGRldGVjdGVkIS4uLlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIi4uLiBkaXNhYmxpbmcgU01QIHN1cHBvcnQuICIKKwkJCSAgICAgICAiKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChlYXJseSkKKwkJCXJldHVybjsKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IE1QIElSUSBlbnRyaWVzLCB0aGVuIHdlIGFyZQorCQkgKiBicm9rZW4uICBXZSBzZXQgdXAgbW9zdCBvZiB0aGUgbG93IDE2IElPLUFQSUMgcGlucyB0bworCQkgKiBJU0EgZGVmYXVsdHMgYW5kIGhvcGUgaXQgd2lsbCB3b3JrLgorCQkgKi8KKwkJaWYgKCFtcF9pcnFfZW50cmllcykgeworCQkJc3RydWN0IG1wY19jb25maWdfYnVzIGJ1czsKKworCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1Zywgbm8gZXhwbGljaXQgSVJRIGVudHJpZXMsICIKKwkJCSAgICAgICAidXNpbmcgZGVmYXVsdCBtcHRhYmxlLiAiCisJCQkgICAgICAgIih0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7CisKKwkJCWJ1cy5tcGNfdHlwZSA9IE1QX0JVUzsKKwkJCWJ1cy5tcGNfYnVzaWQgPSAwOworCQkJbWVtY3B5KGJ1cy5tcGNfYnVzdHlwZSwgIklTQSAgICIsIDYpOworCQkJTVBfYnVzX2luZm8oJmJ1cyk7CisKKwkJCWNvbnN0cnVjdF9kZWZhdWx0X2lvaXJxX21wdGFibGUoMCk7CisJCX0KKyNlbmRpZgorCX0gZWxzZQorCQlCVUcoKTsKKworCWlmICghZWFybHkpCisJCXByaW50ayhLRVJOX0lORk8gIlByb2Nlc3NvcnM6ICVkXG4iLCBudW1fcHJvY2Vzc29ycyk7CisJLyoKKwkgKiBPbmx5IHVzZSB0aGUgZmlyc3QgY29uZmlndXJhdGlvbiBmb3VuZC4KKwkgKi8KK30KKwordm9pZCBfX2luaXQgZWFybHlfZ2V0X3NtcF9jb25maWcodm9pZCkKK3sKKwlfX2dldF9zbXBfY29uZmlnKDEpOworfQorCit2b2lkIF9faW5pdCBnZXRfc21wX2NvbmZpZyh2b2lkKQoreworCV9fZ2V0X3NtcF9jb25maWcoMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNtcF9zY2FuX2NvbmZpZyh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJCSAgdW5zaWduZWQgcmVzZXJ2ZSkKK3sKKwlleHRlcm4gdm9pZCBfX2JhZF9tcGZfc2l6ZSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQgKmJwID0gcGh5c190b192aXJ0KGJhc2UpOworCXN0cnVjdCBpbnRlbF9tcF9mbG9hdGluZyAqbXBmOworCisJRHByaW50aygiU2NhbiBTTVAgZnJvbSAlcCBmb3IgJWxkIGJ5dGVzLlxuIiwgYnAsIGxlbmd0aCk7CisJaWYgKHNpemVvZigqbXBmKSAhPSAxNikKKwkJX19iYWRfbXBmX3NpemUoKTsKKworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCW1wZiA9IChzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKilicDsKKwkJaWYgKCgqYnAgPT0gU01QX01BR0lDX0lERU5UKSAmJgorCQkgICAgKG1wZi0+bXBmX2xlbmd0aCA9PSAxKSAmJgorCQkgICAgIW1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKWJwLCAxNikgJiYKKwkJICAgICgobXBmLT5tcGZfc3BlY2lmaWNhdGlvbiA9PSAxKQorCQkgICAgIHx8IChtcGYtPm1wZl9zcGVjaWZpY2F0aW9uID09IDQpKSkgeworCisJCQlzbXBfZm91bmRfY29uZmlnID0gMTsKKwkJCW1wZl9mb3VuZCA9IG1wZjsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJCQlwcmludGsoS0VSTl9JTkZPICJmb3VuZCBTTVAgTVAtdGFibGUgYXQgWyVwXSAlMDhseFxuIiwKKwkJCSAgICAgICBtcGYsIHZpcnRfdG9fcGh5cyhtcGYpKTsKKwkJCXJlc2VydmVfYm9vdG1lbSh2aXJ0X3RvX3BoeXMobXBmKSwgUEFHRV9TSVpFLAorCQkJCQlCT09UTUVNX0RFRkFVTFQpOworCQkJaWYgKG1wZi0+bXBmX3BoeXNwdHIpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGNhbm5vdCBhY2Nlc3MgdG8gTVBDIHRhYmxlIHRvIGNvbXB1dGUKKwkJCQkgKiB0YWJsZSBzaXplIHlldCwgYXMgb25seSBmZXcgbWVnYWJ5dGVzIGZyb20KKwkJCQkgKiB0aGUgYm90dG9tIGlzIG1hcHBlZCBub3cuCisJCQkJICogUEMtOTgwMCdzIE1QQyB0YWJsZSBwbGFjZXMgb24gdGhlIHZlcnkgbGFzdAorCQkJCSAqIG9mIHBoeXNpY2FsIG1lbW9yeTsgc28gdGhhdCBzaW1wbHkgcmVzZXJ2aW5nCisJCQkJICogUEFHRV9TSVpFIGZyb20gbXBnLT5tcGZfcGh5c3B0ciB5aWVsZHMgQlVHKCkKKwkJCQkgKiBpbiByZXNlcnZlX2Jvb3RtZW0uCisJCQkJICovCisJCQkJdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFOworCQkJCXVuc2lnbmVkIGxvbmcgZW5kID0gbWF4X2xvd19wZm4gKiBQQUdFX1NJWkU7CisJCQkJaWYgKG1wZi0+bXBmX3BoeXNwdHIgKyBzaXplID4gZW5kKQorCQkJCQlzaXplID0gZW5kIC0gbXBmLT5tcGZfcGh5c3B0cjsKKwkJCQlyZXNlcnZlX2Jvb3RtZW0obXBmLT5tcGZfcGh5c3B0ciwgc2l6ZSwKKwkJCQkJCUJPT1RNRU1fREVGQVVMVCk7CisJCQl9CisKKyNlbHNlCisJCQlpZiAoIXJlc2VydmUpCisJCQkJcmV0dXJuIDE7CisKKwkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKHZpcnRfdG9fcGh5cyhtcGYpLCBQQUdFX1NJWkUpOworCQkJaWYgKG1wZi0+bXBmX3BoeXNwdHIpCisJCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5tcGZfcGh5c3B0ciwKKwkJCQkJCQlQQUdFX1NJWkUpOworI2VuZGlmCisJCXJldHVybiAxOworCQl9CisJCWJwICs9IDQ7CisJCWxlbmd0aCAtPSAxNjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2ZpbmRfc21wX2NvbmZpZyh1bnNpZ25lZCByZXNlcnZlKQoreworCXVuc2lnbmVkIGludCBhZGRyZXNzOworCisJLyoKKwkgKiBGSVhNRTogTGludXggYXNzdW1lcyB5b3UgaGF2ZSA2NDBLIG9mIGJhc2UgcmFtLi4KKwkgKiB0aGlzIGNvbnRpbnVlcyB0aGUgZXJyb3IuLi4KKwkgKgorCSAqIDEpIFNjYW4gdGhlIGJvdHRvbSAxSyBmb3IgYSBzaWduYXR1cmUKKwkgKiAyKSBTY2FuIHRoZSB0b3AgMUsgb2YgYmFzZSBSQU0KKwkgKiAzKSBTY2FuIHRoZSA2NEsgb2YgYmlvcworCSAqLworCWlmIChzbXBfc2Nhbl9jb25maWcoMHgwLCAweDQwMCwgcmVzZXJ2ZSkgfHwKKwkgICAgc21wX3NjYW5fY29uZmlnKDYzOSAqIDB4NDAwLCAweDQwMCwgcmVzZXJ2ZSkgfHwKKwkgICAgc21wX3NjYW5fY29uZmlnKDB4RjAwMDAsIDB4MTAwMDAsIHJlc2VydmUpKQorCQlyZXR1cm47CisJLyoKKwkgKiBJZiBpdCBpcyBhbiBTTVAgbWFjaGluZSB3ZSBzaG91bGQga25vdyBub3csIHVubGVzcyB0aGUKKwkgKiBjb25maWd1cmF0aW9uIGlzIGluIGFuIEVJU0EvTUNBIGJ1cyBtYWNoaW5lIHdpdGggYW4KKwkgKiBleHRlbmRlZCBiaW9zIGRhdGEgYXJlYS4KKwkgKgorCSAqIHRoZXJlIGlzIGEgcmVhbC1tb2RlIHNlZ21lbnRlZCBwb2ludGVyIHBvaW50aW5nIHRvIHRoZQorCSAqIDRLIEVCREEgYXJlYSBhdCAweDQwRSwgY2FsY3VsYXRlIGFuZCBzY2FuIGl0IGhlcmUuCisJICoKKwkgKiBOT1RFISBUaGVyZSBhcmUgTGludXggbG9hZGVycyB0aGF0IHdpbGwgY29ycnVwdCB0aGUgRUJEQQorCSAqIGFyZWEsIGFuZCBhcyBzdWNoIHRoaXMga2luZCBvZiBTTVAgY29uZmlnIG1heSBiZSBsZXNzCisJICogdHJ1c3R3b3J0aHksIHNpbXBseSBiZWNhdXNlIHRoZSBTTVAgdGFibGUgbWF5IGhhdmUgYmVlbgorCSAqIHN0b21wZWQgb24gZHVyaW5nIGVhcmx5IGJvb3QuIFRoZXNlIGxvYWRlcnMgYXJlIGJ1Z2d5IGFuZAorCSAqIHNob3VsZCBiZSBmaXhlZC4KKwkgKgorCSAqIE1QMS40IFNQRUMgc3RhdGVzIHRvIG9ubHkgc2NhbiBmaXJzdCAxSyBvZiA0SyBFQkRBLgorCSAqLworCisJYWRkcmVzcyA9IGdldF9iaW9zX2ViZGEoKTsKKwlpZiAoYWRkcmVzcykKKwkJc21wX3NjYW5fY29uZmlnKGFkZHJlc3MsIDB4NDAwLCByZXNlcnZlKTsKK30KKwordm9pZCBfX2luaXQgZWFybHlfZmluZF9zbXBfY29uZmlnKHZvaWQpCit7CisJX19maW5kX3NtcF9jb25maWcoMCk7Cit9CisKK3ZvaWQgX19pbml0IGZpbmRfc21wX2NvbmZpZyh2b2lkKQoreworCV9fZmluZF9zbXBfY29uZmlnKDEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUEktYmFzZWQgTVAgQ29uZmlndXJhdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19BQ1BJCisKKyNpZmRlZglDT05GSUdfWDg2X0lPX0FQSUMKKworI2RlZmluZSBNUF9JU0FfQlVTCQkwCisjZGVmaW5lIE1QX01BWF9JT0FQSUNfUElOCTEyNworCitleHRlcm4gc3RydWN0IG1wX2lvYXBpY19yb3V0aW5nIG1wX2lvYXBpY19yb3V0aW5nW01BWF9JT19BUElDU107CisKK3N0YXRpYyBpbnQgbXBfZmluZF9pb2FwaWMoaW50IGdzaSkKK3sKKwlpbnQgaSA9IDA7CisKKwkvKiBGaW5kIHRoZSBJT0FQSUMgdGhhdCBtYW5hZ2VzIHRoaXMgR1NJLiAqLworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJaWYgKChnc2kgPj0gbXBfaW9hcGljX3JvdXRpbmdbaV0uZ3NpX2Jhc2UpCisJCSAgICAmJiAoZ3NpIDw9IG1wX2lvYXBpY19yb3V0aW5nW2ldLmdzaV9lbmQpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogVW5hYmxlIHRvIGxvY2F0ZSBJT0FQSUMgZm9yIEdTSSAlZFxuIiwgZ3NpKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB1OCB1bmlxX2lvYXBpY19pZCh1OCBpZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKKwkgICAgIUFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQorCQlyZXR1cm4gaW9fYXBpY19nZXRfdW5pcXVlX2lkKG5yX2lvYXBpY3MsIGlkKTsKKwllbHNlCisJCXJldHVybiBpZDsKKyNlbHNlCisJaW50IGk7CisJREVDTEFSRV9CSVRNQVAodXNlZCwgMjU2KTsKKwliaXRtYXBfemVybyh1c2VkLCAyNTYpOworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJc3RydWN0IG1wY19jb25maWdfaW9hcGljICppYSA9ICZtcF9pb2FwaWNzW2ldOworCQlfX3NldF9iaXQoaWEtPm1wY19hcGljaWQsIHVzZWQpOworCX0KKwlpZiAoIXRlc3RfYml0KGlkLCB1c2VkKSkKKwkJcmV0dXJuIGlkOworCXJldHVybiBmaW5kX2ZpcnN0X3plcm9fYml0KHVzZWQsIDI1Nik7CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgbXBfcmVnaXN0ZXJfaW9hcGljKGludCBpZCwgdTMyIGFkZHJlc3MsIHUzMiBnc2lfYmFzZSkKK3sKKwlpbnQgaWR4ID0gMDsKKworCWlmIChiYWRfaW9hcGljKGFkZHJlc3MpKQorCQlyZXR1cm47CisKKwlpZHggPSBucl9pb2FwaWNzOworCisJbXBfaW9hcGljc1tpZHhdLm1wY190eXBlID0gTVBfSU9BUElDOworCW1wX2lvYXBpY3NbaWR4XS5tcGNfZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7CisJbXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciA9IGFkZHJlc3M7CisKKwlzZXRfZml4bWFwX25vY2FjaGUoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4LCBhZGRyZXNzKTsKKwltcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWNpZCA9IHVuaXFfaW9hcGljX2lkKGlkKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJbXBfaW9hcGljc1tpZHhdLm1wY19hcGljdmVyID0gaW9fYXBpY19nZXRfdmVyc2lvbihpZHgpOworI2Vsc2UKKwltcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWN2ZXIgPSAwOworI2VuZGlmCisJLyoKKwkgKiBCdWlsZCBiYXNpYyBHU0kgbG9va3VwIHRhYmxlIHRvIGZhY2lsaXRhdGUgZ3NpLT5pb19hcGljIGxvb2t1cHMKKwkgKiBhbmQgdG8gcHJldmVudCByZXByb2dyYW1taW5nIG9mIElPQVBJQyBwaW5zIChQQ0kgR1NJcykuCisJICovCisJbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5hcGljX2lkID0gbXBfaW9hcGljc1tpZHhdLm1wY19hcGljaWQ7CisJbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfYmFzZSA9IGdzaV9iYXNlOworCW1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2VuZCA9IGdzaV9iYXNlICsKKwkgICAgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyhpZHgpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiSU9BUElDWyVkXTogYXBpY19pZCAlZCwgdmVyc2lvbiAlZCwgYWRkcmVzcyAweCV4LCAiCisJICAgICAgICJHU0kgJWQtJWRcbiIsIGlkeCwgbXBfaW9hcGljc1tpZHhdLm1wY19hcGljaWQsCisJICAgICAgIG1wX2lvYXBpY3NbaWR4XS5tcGNfYXBpY3ZlciwgbXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciwKKwkgICAgICAgbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfYmFzZSwgbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfZW5kKTsKKworCW5yX2lvYXBpY3MrKzsKK30KKwordm9pZCBfX2luaXQgbXBfb3ZlcnJpZGVfbGVnYWN5X2lycSh1OCBidXNfaXJxLCB1OCBwb2xhcml0eSwgdTggdHJpZ2dlciwgdTMyIGdzaSkKK3sKKwlzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgaW50c3JjOworCWludCBpb2FwaWMgPSAtMTsKKwlpbnQgcGluID0gLTE7CisKKwkvKgorCSAqIENvbnZlcnQgJ2dzaScgdG8gJ2lvYXBpYy5waW4nLgorCSAqLworCWlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKGdzaSk7CisJaWYgKGlvYXBpYyA8IDApCisJCXJldHVybjsKKwlwaW4gPSBnc2kgLSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmdzaV9iYXNlOworCisJLyoKKwkgKiBUQkQ6IFRoaXMgY2hlY2sgaXMgZm9yIGZhdWx0eSB0aW1lciBlbnRyaWVzLCB3aGVyZSB0aGUgb3ZlcnJpZGUKKwkgKiAgICAgIGVycm9uZW91c2x5IHNldHMgdGhlIHRyaWdnZXIgdG8gbGV2ZWwsIHJlc3VsdGluZyBpbiBhIEhVR0UKKwkgKiAgICAgIGluY3JlYXNlIG9mIHRpbWVyIGludGVycnVwdHMhCisJICovCisJaWYgKChidXNfaXJxID09IDApICYmICh0cmlnZ2VyID09IDMpKQorCQl0cmlnZ2VyID0gMTsKKworCWludHNyYy5tcGNfdHlwZSA9IE1QX0lOVFNSQzsKKwlpbnRzcmMubXBjX2lycXR5cGUgPSBtcF9JTlQ7CisJaW50c3JjLm1wY19pcnFmbGFnID0gKHRyaWdnZXIgPDwgMikgfCBwb2xhcml0eTsKKwlpbnRzcmMubXBjX3NyY2J1cyA9IE1QX0lTQV9CVVM7CisJaW50c3JjLm1wY19zcmNidXNpcnEgPSBidXNfaXJxOwkvKiBJUlEgKi8KKwlpbnRzcmMubXBjX2RzdGFwaWMgPSBtcF9pb2FwaWNzW2lvYXBpY10ubXBjX2FwaWNpZDsJLyogQVBJQyBJRCAqLworCWludHNyYy5tcGNfZHN0aXJxID0gcGluOwkvKiBJTlRJTiMgKi8KKworCURwcmludGsoIkludDogdHlwZSAlZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJWQsIGlycSAlZCwgJWQtJWRcbiIsCisJCWludHNyYy5tcGNfaXJxdHlwZSwgaW50c3JjLm1wY19pcnFmbGFnICYgMywKKwkJKGludHNyYy5tcGNfaXJxZmxhZyA+PiAyKSAmIDMsIGludHNyYy5tcGNfc3JjYnVzLAorCQlpbnRzcmMubXBjX3NyY2J1c2lycSwgaW50c3JjLm1wY19kc3RhcGljLCBpbnRzcmMubXBjX2RzdGlycSk7CisKKwltcF9pcnFzW21wX2lycV9lbnRyaWVzXSA9IGludHNyYzsKKwlpZiAoKyttcF9pcnFfZW50cmllcyA9PSBNQVhfSVJRX1NPVVJDRVMpCisJCXBhbmljKCJNYXggIyBvZiBpcnEgc291cmNlcyBleGNlZWRlZCFcbiIpOworfQorCitpbnQgZXM3MDAwX3BsYXQ7CisKK3ZvaWQgX19pbml0IG1wX2NvbmZpZ19hY3BpX2xlZ2FjeV9pcnFzKHZvaWQpCit7CisJc3RydWN0IG1wY19jb25maWdfaW50c3JjIGludHNyYzsKKwlpbnQgaSA9IDA7CisJaW50IGlvYXBpYyA9IC0xOworCisjaWYgZGVmaW5lZCAoQ09ORklHX01DQSkgfHwgZGVmaW5lZCAoQ09ORklHX0VJU0EpCisJLyoKKwkgKiBGYWJyaWNhdGUgdGhlIGxlZ2FjeSBJU0EgYnVzIChidXMgIzMxKS4KKwkgKi8KKwltcF9idXNfaWRfdG9fdHlwZVtNUF9JU0FfQlVTXSA9IE1QX0JVU19JU0E7CisjZW5kaWYKKwlzZXRfYml0KE1QX0lTQV9CVVMsIG1wX2J1c19ub3RfcGNpKTsKKwlEcHJpbnRrKCJCdXMgIyVkIGlzIElTQVxuIiwgTVBfSVNBX0JVUyk7CisKKwkvKgorCSAqIE9sZGVyIGdlbmVyYXRpb25zIG9mIEVTNzAwMCBoYXZlIG5vIGxlZ2FjeSBpZGVudGl0eSBtYXBwaW5ncworCSAqLworCWlmIChlczcwMDBfcGxhdCA9PSAxKQorCQlyZXR1cm47CisKKwkvKgorCSAqIExvY2F0ZSB0aGUgSU9BUElDIHRoYXQgbWFuYWdlcyB0aGUgSVNBIElSUXMgKDAtMTUpLgorCSAqLworCWlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKDApOworCWlmIChpb2FwaWMgPCAwKQorCQlyZXR1cm47CisKKwlpbnRzcmMubXBjX3R5cGUgPSBNUF9JTlRTUkM7CisJaW50c3JjLm1wY19pcnFmbGFnID0gMDsJLyogQ29uZm9ybWluZyAqLworCWludHNyYy5tcGNfc3JjYnVzID0gTVBfSVNBX0JVUzsKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlpbnRzcmMubXBjX2RzdGFwaWMgPSBtcF9pb2FwaWNzW2lvYXBpY10ubXBjX2FwaWNpZDsKKyNlbmRpZgorCS8qCisJICogVXNlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBJUlFzIDAtMTUuICBVbmxlc3MKKwkgKiBvdmVycmlkZGVuIGJ5IChNQURUKSBpbnRlcnJ1cHQgc291cmNlIG92ZXJyaWRlIGVudHJpZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaW50IGlkeDsKKworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IG1wX2lycV9lbnRyaWVzOyBpZHgrKykgeworCQkJc3RydWN0IG1wY19jb25maWdfaW50c3JjICppcnEgPSBtcF9pcnFzICsgaWR4OworCisJCQkvKiBEbyB3ZSBhbHJlYWR5IGhhdmUgYSBtYXBwaW5nIGZvciB0aGlzIElTQSBJUlE/ICovCisJCQlpZiAoaXJxLT5tcGNfc3JjYnVzID09IE1QX0lTQV9CVVMKKwkJCSAgICAmJiBpcnEtPm1wY19zcmNidXNpcnEgPT0gaSkKKwkJCQlicmVhazsKKworCQkJLyogRG8gd2UgYWxyZWFkeSBoYXZlIGEgbWFwcGluZyBmb3IgdGhpcyBJT0FQSUMgcGluICovCisJCQlpZiAoKGlycS0+bXBjX2RzdGFwaWMgPT0gaW50c3JjLm1wY19kc3RhcGljKSAmJgorCQkJICAgIChpcnEtPm1wY19kc3RpcnEgPT0gaSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaWR4ICE9IG1wX2lycV9lbnRyaWVzKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQUNQSTogSVJRJWQgdXNlZCBieSBvdmVycmlkZS5cbiIsIGkpOworCQkJY29udGludWU7CS8qIElSUSBhbHJlYWR5IHVzZWQgKi8KKwkJfQorCisJCWludHNyYy5tcGNfaXJxdHlwZSA9IG1wX0lOVDsKKwkJaW50c3JjLm1wY19zcmNidXNpcnEgPSBpOwkvKiBJZGVudGl0eSBtYXBwZWQgKi8KKwkJaW50c3JjLm1wY19kc3RpcnEgPSBpOworCisJCURwcmludGsoIkludDogdHlwZSAlZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJWQsIGlycSAlZCwgIgorCQkJIiVkLSVkXG4iLCBpbnRzcmMubXBjX2lycXR5cGUsIGludHNyYy5tcGNfaXJxZmxhZyAmIDMsCisJCQkoaW50c3JjLm1wY19pcnFmbGFnID4+IDIpICYgMywgaW50c3JjLm1wY19zcmNidXMsCisJCQlpbnRzcmMubXBjX3NyY2J1c2lycSwgaW50c3JjLm1wY19kc3RhcGljLAorCQkJaW50c3JjLm1wY19kc3RpcnEpOworCisJCW1wX2lycXNbbXBfaXJxX2VudHJpZXNdID0gaW50c3JjOworCQlpZiAoKyttcF9pcnFfZW50cmllcyA9PSBNQVhfSVJRX1NPVVJDRVMpCisJCQlwYW5pYygiTWF4ICMgb2YgaXJxIHNvdXJjZXMgZXhjZWVkZWQhXG4iKTsKKwl9Cit9CisKK2ludCBtcF9yZWdpc3Rlcl9nc2kodTMyIGdzaSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKK3sKKwlpbnQgaW9hcGljID0gLTE7CisJaW50IGlvYXBpY19waW4gPSAwOworCWludCBpZHgsIGJpdCA9IDA7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBNQVhfR1NJX05VTQk0MDk2CisjZGVmaW5lIElSUV9DT01QUkVTU0lPTl9TVEFSVAk2NAorCisJc3RhdGljIGludCBwY2lfaXJxID0gSVJRX0NPTVBSRVNTSU9OX1NUQVJUOworCS8qCisJICogTWFwcGluZyBiZXR3ZWVuIEdsb2JhbCBTeXN0ZW0gSW50ZXJydXB0cywgd2hpY2gKKwkgKiByZXByZXNlbnQgYWxsIHBvc3NpYmxlIGludGVycnVwdHMsIGFuZCBJUlFzCisJICogYXNzaWduZWQgdG8gYWN0dWFsIGRldmljZXMuCisJICovCisJc3RhdGljIGludCBnc2lfdG9faXJxW01BWF9HU0lfTlVNXTsKKyNlbHNlCisKKwlpZiAoYWNwaV9pcnFfbW9kZWwgIT0gQUNQSV9JUlFfTU9ERUxfSU9BUElDKQorCQlyZXR1cm4gZ3NpOworI2VuZGlmCisKKwkvKiBEb24ndCBzZXQgdXAgdGhlIEFDUEkgU0NJIGJlY2F1c2UgaXQncyBhbHJlYWR5IHNldCB1cCAqLworCWlmIChhY3BpX2dibF9GQURULnNjaV9pbnRlcnJ1cHQgPT0gZ3NpKQorCQlyZXR1cm4gZ3NpOworCisJaW9hcGljID0gbXBfZmluZF9pb2FwaWMoZ3NpKTsKKwlpZiAoaW9hcGljIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBJT0FQSUMgZm9yIEdTSSAldVxuIiwgZ3NpKTsKKwkJcmV0dXJuIGdzaTsKKwl9CisKKwlpb2FwaWNfcGluID0gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAoaW9hcGljX3JlbnVtYmVyX2lycSkKKwkJZ3NpID0gaW9hcGljX3JlbnVtYmVyX2lycShpb2FwaWMsIGdzaSk7CisjZW5kaWYKKworCS8qCisJICogQXZvaWQgcGluIHJlcHJvZ3JhbW1pbmcuICBQUlRzIHR5cGljYWxseSBpbmNsdWRlIGVudHJpZXMKKwkgKiB3aXRoIHJlZHVuZGFudCBwaW4tPmdzaSBtYXBwaW5ncyAoYnV0IHVuaXF1ZSBQQ0kgZGV2aWNlcyk7CisJICogd2Ugb25seSBwcm9ncmFtIHRoZSBJT0FQSUMgb24gdGhlIGZpcnN0LgorCSAqLworCWJpdCA9IGlvYXBpY19waW4gJSAzMjsKKwlpZHggPSAoaW9hcGljX3BpbiA8IDMyKSA/IDAgOiAoaW9hcGljX3BpbiAvIDMyKTsKKwlpZiAoaWR4ID4gMykgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgcmVmZXJlbmNlIHRvIElPQVBJQyBwaW4gIgorCQkgICAgICAgIiVkLSVkXG4iLCBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmFwaWNfaWQsCisJCSAgICAgICBpb2FwaWNfcGluKTsKKwkJcmV0dXJuIGdzaTsKKwl9CisJaWYgKCgxIDw8IGJpdCkgJiBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLnBpbl9wcm9ncmFtbWVkW2lkeF0pIHsKKwkJRHByaW50ayhLRVJOX0RFQlVHICJQaW4gJWQtJWQgYWxyZWFkeSBwcm9ncmFtbWVkXG4iLAorCQkJbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5hcGljX2lkLCBpb2FwaWNfcGluKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJCXJldHVybiAoZ3NpIDwgSVJRX0NPTVBSRVNTSU9OX1NUQVJUID8gZ3NpIDogZ3NpX3RvX2lycVtnc2ldKTsKKyNlbHNlCisJCXJldHVybiBnc2k7CisjZW5kaWYKKwl9CisKKwltcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLnBpbl9wcm9ncmFtbWVkW2lkeF0gfD0gKDEgPDwgYml0KTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkgKiBGb3IgR1NJID49IDY0LCB1c2UgSVJRIGNvbXByZXNzaW9uCisJICovCisJaWYgKChnc2kgPj0gSVJRX0NPTVBSRVNTSU9OX1NUQVJUKQorCSAgICAmJiAodHJpZ2dlcmluZyA9PSBBQ1BJX0xFVkVMX1NFTlNJVElWRSkpIHsKKwkJLyoKKwkJICogRm9yIFBDSSBkZXZpY2VzIGFzc2lnbiBJUlFzIGluIG9yZGVyLCBhdm9pZGluZyBnYXBzCisJCSAqIGR1ZSB0byB1bnVzZWQgSS9PIEFQSUMgcGlucy4KKwkJICovCisJCWludCBpcnEgPSBnc2k7CisJCWlmIChnc2kgPCBNQVhfR1NJX05VTSkgeworCQkJLyoKKwkJCSAqIFJldGFpbiB0aGUgVklBIGNoaXBzZXQgd29yay1hcm91bmQgKGdzaSA+IDE1KSwgYnV0CisJCQkgKiBhdm9pZCBhIHByb2JsZW0gd2hlcmUgdGhlIDgyNTQgdGltZXIgKElSUTApIGlzIHNldHVwCisJCQkgKiB2aWEgYW4gb3ZlcnJpZGUgKHNvIGl0J3Mgbm90IG9uIHBpbiAwIG9mIHRoZSBpb2FwaWMpLAorCQkJICogYW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBwaW4gMCBpbnRlcnJ1cHQgaXMgYSBQQ0kKKwkJCSAqIHR5cGUuICBUaGUgZ3NpID4gMTUgdGVzdCBjb3VsZCBjYXVzZSB0aGVzZSB0d28gcGlucworCQkJICogdG8gYmUgc2hhcmVkIGFzIElSUTAsIGFuZCB0aGV5IGFyZSBub3Qgc2hhcmVhYmxlLgorCQkJICogU28gdGVzdCBmb3IgdGhpcyBjb25kaXRpb24sIGFuZCBpZiBuZWNlc3NhcnksIGF2b2lkCisJCQkgKiB0aGUgcGluIGNvbGxpc2lvbi4KKwkJCSAqLworCQkJZ3NpID0gcGNpX2lycSsrOworCQkJLyoKKwkJCSAqIERvbid0IGFzc2lnbiBJUlEgdXNlZCBieSBBQ1BJIFNDSQorCQkJICovCisJCQlpZiAoZ3NpID09IGFjcGlfZ2JsX0ZBRFQuc2NpX2ludGVycnVwdCkKKwkJCQlnc2kgPSBwY2lfaXJxKys7CisJCQlnc2lfdG9faXJxW2lycV0gPSBnc2k7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkdTSSAldSBpcyB0b28gaGlnaFxuIiwgZ3NpKTsKKwkJCXJldHVybiBnc2k7CisJCX0KKwl9CisjZW5kaWYKKwlpb19hcGljX3NldF9wY2lfcm91dGluZyhpb2FwaWMsIGlvYXBpY19waW4sIGdzaSwKKwkJCQl0cmlnZ2VyaW5nID09IEFDUElfRURHRV9TRU5TSVRJVkUgPyAwIDogMSwKKwkJCQlwb2xhcml0eSA9PSBBQ1BJX0FDVElWRV9ISUdIID8gMCA6IDEpOworCXJldHVybiBnc2k7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KKyNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2VfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNDllNjguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2VfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDExMzkgKzAsMCBAQAotLyoKLSAqCUludGVsIE11bHRpcHJvY2Vzc29yIFNwZWNpZmljYXRpb24gMS4xIGFuZCAxLjQKLSAqCWNvbXBsaWFudCBNUC10YWJsZSBwYXJzaW5nIHJvdXRpbmVzLgotICoKLSAqCShjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgotICoJKGMpIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCQlFcmljaCBCb2xleW4JOglNUCB2MS40IGFuZCBhZGRpdGlvbmFsIGNoYW5nZXMuCi0gKgkJQWxhbiBDb3gJOglBZGRlZCBFQkRBIHNjYW5uaW5nCi0gKgkJSW5nbyBNb2xuYXIJOgl2YXJpb3VzIGNsZWFudXBzIGFuZCByZXdyaXRlcwotICoJCU1hY2llaiBXLiBSb3p5Y2tpOglCaXRzIGZvciBkZWZhdWx0IE1QIGNvbmZpZ3VyYXRpb25zCi0gKgkJUGF1bCBEaWVmZW5iYXVnaDoJQWRkZWQgZnVsbCBBQ1BJIHN1cHBvcnQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+Ci0KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KLSNpbmNsdWRlIDxtYWNoX21wcGFyc2UuaD4KLSNpbmNsdWRlIDxiaW9zX2ViZGEuaD4KLQotLyogSGF2ZSB3ZSBmb3VuZCBhbiBNUCB0YWJsZSAqLwotaW50IHNtcF9mb3VuZF9jb25maWc7Ci11bnNpZ25lZCBpbnQgX19jcHVpbml0ZGF0YSBtYXhjcHVzID0gTlJfQ1BVUzsKLQotLyoKLSAqIFZhcmlvdXMgTGludXgtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGNyZWF0ZWQgZnJvbSB0aGUKLSAqIE1QLXRhYmxlLgotICovCi1pbnQgYXBpY192ZXJzaW9uIFtNQVhfQVBJQ1NdOwotaW50IG1wX2J1c19pZF90b190eXBlIFtNQVhfTVBfQlVTU0VTXTsKLWludCBtcF9idXNfaWRfdG9fbm9kZSBbTUFYX01QX0JVU1NFU107Ci1pbnQgbXBfYnVzX2lkX3RvX2xvY2FsIFtNQVhfTVBfQlVTU0VTXTsKLWludCBxdWFkX2xvY2FsX3RvX21wX2J1c19pZCBbTlJfQ1BVUy80XVs0XTsKLWludCBtcF9idXNfaWRfdG9fcGNpX2J1cyBbTUFYX01QX0JVU1NFU10gPSB7IFswIC4uLiBNQVhfTVBfQlVTU0VTLTFdID0gLTEgfTsKLXN0YXRpYyBpbnQgbXBfY3VycmVudF9wY2lfaWQ7Ci0KLS8qIEkvTyBBUElDIGVudHJpZXMgKi8KLXN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107Ci0KLS8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCi1zdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOwotCi0vKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLWludCBtcF9pcnFfZW50cmllczsKLQotaW50IG5yX2lvYXBpY3M7Ci0KLWludCBwaWNfbW9kZTsKLXVuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKLQotdW5zaWduZWQgaW50IGRlZl90b19iaWdzbXAgPSAwOwotCi0vKiBQcm9jZXNzb3IgdGhhdCBpcyBkb2luZyB0aGUgYm9vdCB1cCAqLwotdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IC0xVTsKLS8qIEludGVybmFsIHByb2Nlc3NvciBjb3VudCAqLwotdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwotCi0vKiBCaXRtYXNrIG9mIHBoeXNpY2FsbHkgZXhpc3RpbmcgQ1BVcyAqLwotcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKLQotdTggYmlvc19jcHVfYXBpY2lkW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUQgfTsKLQotLyoKLSAqIEludGVsIE1QIEJJT1MgdGFibGUgcGFyc2luZyByb3V0aW5lczoKLSAqLwotCi0KLS8qCi0gKiBDaGVja3N1bSBhbiBNUCBjb25maWd1cmF0aW9uIGJsb2NrLgotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IG1wZl9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICptcCwgaW50IGxlbikKLXsKLQlpbnQgc3VtID0gMDsKLQotCXdoaWxlIChsZW4tLSkKLQkJc3VtICs9ICptcCsrOwotCi0JcmV0dXJuIHN1bSAmIDB4RkY7Ci19Ci0KLS8qCi0gKiBIYXZlIHRvIG1hdGNoIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJpZXMgdG8gbWFpbiB0YWJsZSBlbnRyaWVzIGJ5IGNvdW50ZXIKLSAqIGhlbmNlIHRoZSBtcGNfcmVjb3JkIHZhcmlhYmxlIC4uLi4gY2FuJ3Qgc2VlIGEgbGVzcyBkaXNndXN0aW5nIHdheSBvZgotICogZG9pbmcgdGhpcyAuLi4uCi0gKi8KLQotc3RhdGljIGludCBtcGNfcmVjb3JkOyAKLXN0YXRpYyBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fdGFibGVbTUFYX01QQ19FTlRSWV0gX19jcHVpbml0ZGF0YTsKLQotc3RhdGljIHZvaWQgX19jcHVpbml0IE1QX3Byb2Nlc3Nvcl9pbmZvIChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pCi17Ci0gCWludCB2ZXIsIGFwaWNpZDsKLQlwaHlzaWRfbWFza190IHBoeXNfY3B1OwotIAkKLQlpZiAoIShtLT5tcGNfY3B1ZmxhZyAmIENQVV9FTkFCTEVEKSkKLQkJcmV0dXJuOwotCi0JYXBpY2lkID0gbXBjX2FwaWNfaWQobSwgdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0pOwotCi0JaWYgKG0tPm1wY19mZWF0dXJlZmxhZyYoMTw8MCkpCi0JCURwcmludGsoIiAgICBGbG9hdGluZyBwb2ludCB1bml0IHByZXNlbnQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDw3KSkKLQkJRHByaW50aygiICAgIE1hY2hpbmUgRXhjZXB0aW9uIHN1cHBvcnRlZC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDgpKQotCQlEcHJpbnRrKCIgICAgNjQgYml0IGNvbXBhcmUgJiBleGNoYW5nZSBzdXBwb3J0ZWQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDw5KSkKLQkJRHByaW50aygiICAgIEludGVybmFsIEFQSUMgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDExKSkKLQkJRHByaW50aygiICAgIFNFUCBwcmVzZW50LlxuIik7Ci0JaWYgKG0tPm1wY19mZWF0dXJlZmxhZyYoMTw8MTIpKQotCQlEcHJpbnRrKCIgICAgTVRSUiAgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDEzKSkKLQkJRHByaW50aygiICAgIFBHRSAgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDE0KSkKLQkJRHByaW50aygiICAgIE1DQSAgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDE1KSkKLQkJRHByaW50aygiICAgIENNT1YgIHByZXNlbnQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDwxNikpCi0JCURwcmludGsoIiAgICBQQVQgIHByZXNlbnQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDwxNykpCi0JCURwcmludGsoIiAgICBQU0UgIHByZXNlbnQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDwxOCkpCi0JCURwcmludGsoIiAgICBQU04gIHByZXNlbnQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDwxOSkpCi0JCURwcmludGsoIiAgICBDYWNoZSBMaW5lIEZsdXNoIEluc3RydWN0aW9uIHByZXNlbnQuXG4iKTsKLQkvKiAyMCBSZXNlcnZlZCAqLwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDIxKSkKLQkJRHByaW50aygiICAgIERlYnVnIFRyYWNlIGFuZCBFTU9OIFN0b3JlIHByZXNlbnQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDwyMikpCi0JCURwcmludGsoIiAgICBBQ1BJIFRoZXJtYWwgVGhyb3R0bGUgUmVnaXN0ZXJzICBwcmVzZW50LlxuIik7Ci0JaWYgKG0tPm1wY19mZWF0dXJlZmxhZyYoMTw8MjMpKQotCQlEcHJpbnRrKCIgICAgTU1YICBwcmVzZW50LlxuIik7Ci0JaWYgKG0tPm1wY19mZWF0dXJlZmxhZyYoMTw8MjQpKQotCQlEcHJpbnRrKCIgICAgRlhTUiAgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDI1KSkKLQkJRHByaW50aygiICAgIFhNTSAgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDI2KSkKLQkJRHByaW50aygiICAgIFdpbGxhbWV0dGUgTmV3IEluc3RydWN0aW9ucyAgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDI3KSkKLQkJRHByaW50aygiICAgIFNlbGYgU25vb3AgIHByZXNlbnQuXG4iKTsKLQlpZiAobS0+bXBjX2ZlYXR1cmVmbGFnJigxPDwyOCkpCi0JCURwcmludGsoIiAgICBIVCAgcHJlc2VudC5cbiIpOwotCWlmIChtLT5tcGNfZmVhdHVyZWZsYWcmKDE8PDI5KSkKLQkJRHByaW50aygiICAgIFRoZXJtYWwgTW9uaXRvciBwcmVzZW50LlxuIik7Ci0JLyogMzAsIDMxIFJlc2VydmVkICovCi0KLQotCWlmIChtLT5tcGNfY3B1ZmxhZyAmIENQVV9CT09UUFJPQ0VTU09SKSB7Ci0JCURwcmludGsoIiAgICBCb290dXAgQ1BVXG4iKTsKLQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gbS0+bXBjX2FwaWNpZDsKLQl9Ci0KLQl2ZXIgPSBtLT5tcGNfYXBpY3ZlcjsKLQotCS8qCi0JICogVmFsaWRhdGUgdmVyc2lvbgotCSAqLwotCWlmICh2ZXIgPT0gMHgwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgYnVnLCBBUElDIHZlcnNpb24gaXMgMCBmb3IgQ1BVIyVkISAiCi0JCQkJImZpeGluZyB1cCB0byAweDEwLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCi0JCQkJbS0+bXBjX2FwaWNpZCk7Ci0JCXZlciA9IDB4MTA7Ci0JfQotCWFwaWNfdmVyc2lvblttLT5tcGNfYXBpY2lkXSA9IHZlcjsKLQotCXBoeXNfY3B1ID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KGFwaWNpZCk7Ci0JcGh5c2lkc19vcihwaHlzX2NwdV9wcmVzZW50X21hcCwgcGh5c19jcHVfcHJlc2VudF9tYXAsIHBoeXNfY3B1KTsKLQotCWlmIChudW1fcHJvY2Vzc29ycyA+PSBOUl9DUFVTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IE5SX0NQVVMgbGltaXQgb2YgJWkgcmVhY2hlZC4iCi0JCQkiICBQcm9jZXNzb3IgaWdub3JlZC5cbiIsIE5SX0NQVVMpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKG51bV9wcm9jZXNzb3JzID49IG1heGNwdXMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogbWF4Y3B1cyBsaW1pdCBvZiAlaSByZWFjaGVkLiIKLQkJCSIgUHJvY2Vzc29yIGlnbm9yZWQuXG4iLCBtYXhjcHVzKTsKLQkJcmV0dXJuOwotCX0KLQotCWNwdV9zZXQobnVtX3Byb2Nlc3NvcnMsIGNwdV9wb3NzaWJsZV9tYXApOwotCW51bV9wcm9jZXNzb3JzKys7Ci0KLQkvKgotCSAqIFdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3dpdGNoIHRvIGJpZ3NtcCB3aGVuIENPTkZJR19IT1RQTFVHX0NQVT15Ci0JICogYnV0IHdlIG5lZWQgdG8gd29yayBvdGhlciBkZXBlbmRlbmNpZXMgbGlrZSBTTVBfU1VTUEVORCBldGMKLQkgKiBiZWZvcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IHNvbWUgY29uZnVzaW9uLgotCSAqIGlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IG51bV9wcm9jZXNzb3JzID4gOCkKLQkgKiAgICAgICAtIEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KLQkgKi8KLQlpZiAobnVtX3Byb2Nlc3NvcnMgPiA4KSB7Ci0JCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7Ci0JCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJCWlmICghQVBJQ19YQVBJQyh2ZXIpKSB7Ci0JCQkJZGVmX3RvX2JpZ3NtcCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBJZiBQNCBhbmQgYWJvdmUgZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCQlkZWZfdG9fYmlnc21wID0gMTsKLQkJfQotCX0KLQliaW9zX2NwdV9hcGljaWRbbnVtX3Byb2Nlc3NvcnMgLSAxXSA9IG0tPm1wY19hcGljaWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBNUF9idXNfaW5mbyAoc3RydWN0IG1wY19jb25maWdfYnVzICptKQotewotCWNoYXIgc3RyWzddOwotCi0JbWVtY3B5KHN0ciwgbS0+bXBjX2J1c3R5cGUsIDYpOwotCXN0cls2XSA9IDA7Ci0KLQltcGNfb2VtX2J1c19pbmZvKG0sIHN0ciwgdHJhbnNsYXRpb25fdGFibGVbbXBjX3JlY29yZF0pOwotCi0jaWYgTUFYX01QX0JVU1NFUyA8IDI1NgotCWlmIChtLT5tcGNfYnVzaWQgPj0gTUFYX01QX0JVU1NFUykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJNUCB0YWJsZSBidXNpZCB2YWx1ZSAoJWQpIGZvciBidXN0eXBlICVzICIKLQkJCSIgaXMgdG9vIGxhcmdlLCBtYXguIHN1cHBvcnRlZCBpcyAlZFxuIiwKLQkJCW0tPm1wY19idXNpZCwgc3RyLCBNQVhfTVBfQlVTU0VTIC0gMSk7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQotCWlmIChzdHJuY21wKHN0ciwgQlVTVFlQRV9JU0EsIHNpemVvZihCVVNUWVBFX0lTQSktMSkgPT0gMCkgewotCQltcF9idXNfaWRfdG9fdHlwZVttLT5tcGNfYnVzaWRdID0gTVBfQlVTX0lTQTsKLQl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBCVVNUWVBFX0VJU0EsIHNpemVvZihCVVNUWVBFX0VJU0EpLTEpID09IDApIHsKLQkJbXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19FSVNBOwotCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsIEJVU1RZUEVfUENJLCBzaXplb2YoQlVTVFlQRV9QQ0kpLTEpID09IDApIHsKLQkJbXBjX29lbV9wY2lfYnVzKG0sIHRyYW5zbGF0aW9uX3RhYmxlW21wY19yZWNvcmRdKTsKLQkJbXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19QQ0k7Ci0JCW1wX2J1c19pZF90b19wY2lfYnVzW20tPm1wY19idXNpZF0gPSBtcF9jdXJyZW50X3BjaV9pZDsKLQkJbXBfY3VycmVudF9wY2lfaWQrKzsKLQl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBCVVNUWVBFX01DQSwgc2l6ZW9mKEJVU1RZUEVfTUNBKS0xKSA9PSAwKSB7Ci0JCW1wX2J1c19pZF90b190eXBlW20tPm1wY19idXNpZF0gPSBNUF9CVVNfTUNBOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gYnVzdHlwZSAlcyAtIGlnbm9yaW5nXG4iLCBzdHIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IE1QX2lvYXBpY19pbmZvIChzdHJ1Y3QgbXBjX2NvbmZpZ19pb2FwaWMgKm0pCi17Ci0JaWYgKCEobS0+bXBjX2ZsYWdzICYgTVBDX0FQSUNfVVNBQkxFKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiSS9PIEFQSUMgIyVkIFZlcnNpb24gJWQgYXQgMHglWC5cbiIsCi0JCW0tPm1wY19hcGljaWQsIG0tPm1wY19hcGljdmVyLCBtLT5tcGNfYXBpY2FkZHIpOwotCWlmIChucl9pb2FwaWNzID49IE1BWF9JT19BUElDUykgewotCQlwcmludGsoS0VSTl9DUklUICJNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAoZm91bmQgJWQpLlxuIiwKLQkJCU1BWF9JT19BUElDUywgbnJfaW9hcGljcyk7Ci0JCXBhbmljKCJSZWNvbXBpbGUga2VybmVsIHdpdGggYmlnZ2VyIE1BWF9JT19BUElDUyEuXG4iKTsKLQl9Ci0JaWYgKCFtLT5tcGNfYXBpY2FkZHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBib2d1cyB6ZXJvIEkvTyBBUElDIGFkZHJlc3MiCi0JCQkiIGZvdW5kIGluIE1QIHRhYmxlLCBza2lwcGluZyFcbiIpOwotCQlyZXR1cm47Ci0JfQotCW1wX2lvYXBpY3NbbnJfaW9hcGljc10gPSAqbTsKLQlucl9pb2FwaWNzKys7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBNUF9pbnRzcmNfaW5mbyAoc3RydWN0IG1wY19jb25maWdfaW50c3JjICptKQotewotCW1wX2lycXMgW21wX2lycV9lbnRyaWVzXSA9ICptOwotCURwcmludGsoIkludDogdHlwZSAlZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJWQsIgotCQkiIElSUSAlMDJ4LCBBUElDIElEICV4LCBBUElDIElOVCAlMDJ4XG4iLAotCQkJbS0+bXBjX2lycXR5cGUsIG0tPm1wY19pcnFmbGFnICYgMywKLQkJCShtLT5tcGNfaXJxZmxhZyA+PiAyKSAmIDMsIG0tPm1wY19zcmNidXMsCi0JCQltLT5tcGNfc3JjYnVzaXJxLCBtLT5tcGNfZHN0YXBpYywgbS0+bXBjX2RzdGlycSk7Ci0JaWYgKCsrbXBfaXJxX2VudHJpZXMgPT0gTUFYX0lSUV9TT1VSQ0VTKQotCQlwYW5pYygiTWF4ICMgb2YgaXJxIHNvdXJjZXMgZXhjZWVkZWQhIVxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBNUF9saW50c3JjX2luZm8gKHN0cnVjdCBtcGNfY29uZmlnX2xpbnRzcmMgKm0pCi17Ci0JRHByaW50aygiTGludDogdHlwZSAlZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJWQsIgotCQkiIElSUSAlMDJ4LCBBUElDIElEICV4LCBBUElDIExJTlQgJTAyeFxuIiwKLQkJCW0tPm1wY19pcnF0eXBlLCBtLT5tcGNfaXJxZmxhZyAmIDMsCi0JCQkobS0+bXBjX2lycWZsYWcgPj4gMikgJjMsIG0tPm1wY19zcmNidXNpZCwKLQkJCW0tPm1wY19zcmNidXNpcnEsIG0tPm1wY19kZXN0YXBpYywgbS0+bXBjX2Rlc3RhcGljbGludCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi1zdGF0aWMgdm9pZCBfX2luaXQgTVBfdHJhbnNsYXRpb25faW5mbyAoc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKm0pCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVHJhbnNsYXRpb246IHJlY29yZCAlZCwgdHlwZSAlZCwgcXVhZCAlZCwgZ2xvYmFsICVkLCBsb2NhbCAlZFxuIiwgbXBjX3JlY29yZCwgbS0+dHJhbnNfdHlwZSwgbS0+dHJhbnNfcXVhZCwgbS0+dHJhbnNfZ2xvYmFsLCBtLT50cmFuc19sb2NhbCk7Ci0KLQlpZiAobXBjX3JlY29yZCA+PSBNQVhfTVBDX0VOVFJZKSAKLQkJcHJpbnRrKEtFUk5fRVJSICJNQVhfTVBDX0VOVFJZIGV4Y2VlZGVkIVxuIik7Ci0JZWxzZQotCQl0cmFuc2xhdGlvbl90YWJsZVttcGNfcmVjb3JkXSA9IG07IC8qIHN0YXNoIHRoaXMgZm9yIGxhdGVyICovCi0JaWYgKG0tPnRyYW5zX3F1YWQgPCBNQVhfTlVNTk9ERVMgJiYgIW5vZGVfb25saW5lKG0tPnRyYW5zX3F1YWQpKQotCQlub2RlX3NldF9vbmxpbmUobS0+dHJhbnNfcXVhZCk7Ci19Ci0KLS8qCi0gKiBSZWFkL3BhcnNlIHRoZSBNUEMgb2VtIHRhYmxlcwotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfcmVhZF9tcGNfb2VtKHN0cnVjdCBtcF9jb25maWdfb2VtdGFibGUgKm9lbXRhYmxlLCBcCi0JdW5zaWduZWQgc2hvcnQgb2Vtc2l6ZSkKLXsKLQlpbnQgY291bnQgPSBzaXplb2YgKCpvZW10YWJsZSk7IC8qIHRoZSBoZWFkZXIgc2l6ZSAqLwotCXVuc2lnbmVkIGNoYXIgKm9lbXB0ciA9ICgodW5zaWduZWQgY2hhciAqKW9lbXRhYmxlKStjb3VudDsKLQkKLQltcGNfcmVjb3JkID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBhbiBPRU0gTVBDIHRhYmxlIGF0ICU4cCAtIHBhcnNpbmcgaXQgLi4uIFxuIiwgb2VtdGFibGUpOwotCWlmIChtZW1jbXAob2VtdGFibGUtPm9lbV9zaWduYXR1cmUsTVBDX09FTV9TSUdOQVRVUkUsNCkpCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVAgbXBjIG9lbXRhYmxlOiBiYWQgc2lnbmF0dXJlIFslYyVjJWMlY10hXG4iLAotCQkJb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbMF0sCi0JCQlvZW10YWJsZS0+b2VtX3NpZ25hdHVyZVsxXSwKLQkJCW9lbXRhYmxlLT5vZW1fc2lnbmF0dXJlWzJdLAotCQkJb2VtdGFibGUtPm9lbV9zaWduYXR1cmVbM10pOwotCQlyZXR1cm47Ci0JfQotCWlmIChtcGZfY2hlY2tzdW0oKHVuc2lnbmVkIGNoYXIgKilvZW10YWJsZSxvZW10YWJsZS0+b2VtX2xlbmd0aCkpCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVAgb2VtIG1wdGFibGU6IGNoZWNrc3VtIGVycm9yIVxuIik7Ci0JCXJldHVybjsKLQl9Ci0Jd2hpbGUgKGNvdW50IDwgb2VtdGFibGUtPm9lbV9sZW5ndGgpIHsKLQkJc3dpdGNoICgqb2VtcHRyKSB7Ci0JCQljYXNlIE1QX1RSQU5TTEFUSU9OOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICptPQotCQkJCQkoc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKilvZW1wdHI7Ci0JCQkJTVBfdHJhbnNsYXRpb25faW5mbyhtKTsKLQkJCQlvZW1wdHIgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCSsrbXBjX3JlY29yZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5yZWNvZ25pc2VkIE9FTSB0YWJsZSBlbnRyeSB0eXBlISAtICVkXG4iLCAoaW50KSAqb2VtcHRyKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLSAgICAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtcHNfb2VtX2NoZWNrKHN0cnVjdCBtcF9jb25maWdfdGFibGUgKm1wYywgY2hhciAqb2VtLAotCQljaGFyICpwcm9kdWN0aWQpCi17Ci0JaWYgKHN0cm5jbXAob2VtLCAiSUJNIE5VTUEiLCA4KSkKLQkJcHJpbnRrKCJXYXJuaW5nISAgTWF5IG5vdCBiZSBhIE5VTUEtUSBzeXN0ZW0hXG4iKTsKLQlpZiAobXBjLT5tcGNfb2VtcHRyKQotCQlzbXBfcmVhZF9tcGNfb2VtKChzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlICopIG1wYy0+bXBjX29lbXB0ciwKLQkJCQltcGMtPm1wY19vZW1zaXplKTsKLX0KLSNlbmRpZgkvKiBDT05GSUdfWDg2X05VTUFRICovCi0KLS8qCi0gKiBSZWFkL3BhcnNlIHRoZSBNUEMKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBzbXBfcmVhZF9tcGMoc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjKQotewotCWNoYXIgc3RyWzE2XTsKLQljaGFyIG9lbVsxMF07Ci0JaW50IGNvdW50PXNpemVvZigqbXBjKTsKLQl1bnNpZ25lZCBjaGFyICptcHQ9KCh1bnNpZ25lZCBjaGFyICopbXBjKStjb3VudDsKLQotCWlmIChtZW1jbXAobXBjLT5tcGNfc2lnbmF0dXJlLE1QQ19TSUdOQVRVUkUsNCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTTVAgbXB0YWJsZTogYmFkIHNpZ25hdHVyZSBbMHgleF0hXG4iLAotCQkJKih1MzIgKiltcGMtPm1wY19zaWduYXR1cmUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKG1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKW1wYyxtcGMtPm1wY19sZW5ndGgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU01QIG1wdGFibGU6IGNoZWNrc3VtIGVycm9yIVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAobXBjLT5tcGNfc3BlYyE9MHgwMSAmJiBtcGMtPm1wY19zcGVjIT0weDA0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU01QIG1wdGFibGU6IGJhZCB0YWJsZSB2ZXJzaW9uICglZCkhIVxuIiwKLQkJCW1wYy0+bXBjX3NwZWMpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCFtcGMtPm1wY19sYXBpYykgewotCQlwcmludGsoS0VSTl9FUlIgIlNNUCBtcHRhYmxlOiBudWxsIGxvY2FsIEFQSUMgYWRkcmVzcyFcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JbWVtY3B5KG9lbSxtcGMtPm1wY19vZW0sOCk7Ci0Jb2VtWzhdPTA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiT0VNIElEOiAlcyAiLG9lbSk7Ci0KLQltZW1jcHkoc3RyLG1wYy0+bXBjX3Byb2R1Y3RpZCwxMik7Ci0Jc3RyWzEyXT0wOwotCXByaW50aygiUHJvZHVjdCBJRDogJXMgIixzdHIpOwotCi0JbXBzX29lbV9jaGVjayhtcGMsIG9lbSwgc3RyKTsKLQotCXByaW50aygiQVBJQyBhdDogMHglWFxuIiwgbXBjLT5tcGNfbGFwaWMpOwotCi0JLyoKLQkgKiBTYXZlIHRoZSBsb2NhbCBBUElDIGFkZHJlc3MgKGl0IG1pZ2h0IGJlIG5vbi1kZWZhdWx0KSAtLSBidXQgb25seQotCSAqIGlmIHdlJ3JlIG5vdCB1c2luZyBBQ1BJLgotCSAqLwotCWlmICghYWNwaV9sYXBpYykKLQkJbXBfbGFwaWNfYWRkciA9IG1wYy0+bXBjX2xhcGljOwotCi0JLyoKLQkgKglOb3cgcHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiBibG9ja3MuCi0JICovCi0JbXBjX3JlY29yZCA9IDA7Ci0Jd2hpbGUgKGNvdW50IDwgbXBjLT5tcGNfbGVuZ3RoKSB7Ci0JCXN3aXRjaCgqbXB0KSB7Ci0JCQljYXNlIE1QX1BST0NFU1NPUjoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm09Ci0JCQkJCShzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKiltcHQ7Ci0JCQkJLyogQUNQSSBtYXkgaGF2ZSBhbHJlYWR5IHByb3ZpZGVkIHRoaXMgZGF0YSAqLwotCQkJCWlmICghYWNwaV9sYXBpYykKLQkJCQkJTVBfcHJvY2Vzc29yX2luZm8obSk7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgTVBfQlVTOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbT0KLQkJCQkJKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqKW1wdDsKLQkJCQlNUF9idXNfaW5mbyhtKTsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBNUF9JT0FQSUM6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19jb25maWdfaW9hcGljICptPQotCQkJCQkoc3RydWN0IG1wY19jb25maWdfaW9hcGljICopbXB0OwotCQkJCU1QX2lvYXBpY19pbmZvKG0pOwotCQkJCW1wdCs9c2l6ZW9mKCptKTsKLQkJCQljb3VudCs9c2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgTVBfSU5UU1JDOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyAqbT0KLQkJCQkJKHN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyAqKW1wdDsKLQotCQkJCU1QX2ludHNyY19pbmZvKG0pOwotCQkJCW1wdCs9c2l6ZW9mKCptKTsKLQkJCQljb3VudCs9c2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgTVBfTElOVFNSQzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ19saW50c3JjICptPQotCQkJCQkoc3RydWN0IG1wY19jb25maWdfbGludHNyYyAqKW1wdDsKLQkJCQlNUF9saW50c3JjX2luZm8obSk7Ci0JCQkJbXB0Kz1zaXplb2YoKm0pOwotCQkJCWNvdW50Kz1zaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZGVmYXVsdDoKLQkJCXsKLQkJCQljb3VudCA9IG1wYy0+bXBjX2xlbmd0aDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkrK21wY19yZWNvcmQ7Ci0JfQotCXNldHVwX2FwaWNfcm91dGluZygpOwotCWlmICghbnVtX3Byb2Nlc3NvcnMpCi0JCXByaW50ayhLRVJOX0VSUiAiU01QIG1wdGFibGU6IG5vIHByb2Nlc3NvcnMgcmVnaXN0ZXJlZCFcbiIpOwotCXJldHVybiBudW1fcHJvY2Vzc29yczsKLX0KLQotc3RhdGljIGludCBfX2luaXQgRUxDUl90cmlnZ2VyKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IHBvcnQ7Ci0KLQlwb3J0ID0gMHg0ZDAgKyAoaXJxID4+IDMpOwotCXJldHVybiAoaW5iKHBvcnQpID4+IChpcnEgJiA3KSkgJiAxOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY29uc3RydWN0X2RlZmF1bHRfaW9pcnFfbXB0YWJsZShpbnQgbXBjX2RlZmF1bHRfdHlwZSkKLXsKLQlzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgaW50c3JjOwotCWludCBpOwotCWludCBFTENSX2ZhbGxiYWNrID0gMDsKLQotCWludHNyYy5tcGNfdHlwZSA9IE1QX0lOVFNSQzsKLQlpbnRzcmMubXBjX2lycWZsYWcgPSAwOwkJCS8qIGNvbmZvcm1pbmcgKi8KLQlpbnRzcmMubXBjX3NyY2J1cyA9IDA7Ci0JaW50c3JjLm1wY19kc3RhcGljID0gbXBfaW9hcGljc1swXS5tcGNfYXBpY2lkOwotCi0JaW50c3JjLm1wY19pcnF0eXBlID0gbXBfSU5UOwotCi0JLyoKLQkgKiAgSWYgdHJ1ZSwgd2UgaGF2ZSBhbiBJU0EvUENJIHN5c3RlbSB3aXRoIG5vIElSUSBlbnRyaWVzCi0JICogIGluIHRoZSBNUCB0YWJsZS4gVG8gcHJldmVudCB0aGUgUENJIGludGVycnVwdHMgZnJvbSBiZWluZyBzZXQgdXAKLQkgKiAgaW5jb3JyZWN0bHksIHdlIHRyeSB0byB1c2UgdGhlIEVMQ1IuIFRoZSBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmCi0JICogIHRoZXJlIGlzIGdvb2QgRUxDUiBkYXRhIGlzIHZlcnkgc2ltcGxlIC0gSVJRMCwgMSwgMiBhbmQgMTMgY2FuCi0JICogIG5ldmVyIGJlIGxldmVsIHNlbnNpdGl2ZSwgc28gd2Ugc2ltcGx5IHNlZSBpZiB0aGUgRUxDUiBhZ3JlZXMuCi0JICogIElmIGl0IGRvZXMsIHdlIGFzc3VtZSBpdCdzIHZhbGlkLgotCSAqLwotCWlmIChtcGNfZGVmYXVsdF90eXBlID09IDUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSVNBL1BDSSBidXMgdHlwZSB3aXRoIG5vIElSUSBpbmZvcm1hdGlvbi4uLiBmYWxsaW5nIGJhY2sgdG8gRUxDUlxuIik7Ci0KLQkJaWYgKEVMQ1JfdHJpZ2dlcigwKSB8fCBFTENSX3RyaWdnZXIoMSkgfHwgRUxDUl90cmlnZ2VyKDIpIHx8IEVMQ1JfdHJpZ2dlcigxMykpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJFTENSIGNvbnRhaW5zIGludmFsaWQgZGF0YS4uLiBub3QgdXNpbmcgRUxDUlxuIik7Ci0JCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgRUxDUiB0byBpZGVudGlmeSBQQ0kgaW50ZXJydXB0c1xuIik7Ci0JCQlFTENSX2ZhbGxiYWNrID0gMTsKLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXN3aXRjaCAobXBjX2RlZmF1bHRfdHlwZSkgewotCQljYXNlIDI6Ci0JCQlpZiAoaSA9PSAwIHx8IGkgPT0gMTMpCi0JCQkJY29udGludWU7CS8qIElSUTAgJiBJUlExMyBub3QgY29ubmVjdGVkICovCi0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJZGVmYXVsdDoKLQkJCWlmIChpID09IDIpCi0JCQkJY29udGludWU7CS8qIElSUTIgaXMgbmV2ZXIgY29ubmVjdGVkICovCi0JCX0KLQotCQlpZiAoRUxDUl9mYWxsYmFjaykgewotCQkJLyoKLQkJCSAqICBJZiB0aGUgRUxDUiBpbmRpY2F0ZXMgYSBsZXZlbC1zZW5zaXRpdmUgaW50ZXJydXB0LCB3ZQotCQkJICogIGNvcHkgdGhhdCBpbmZvcm1hdGlvbiBvdmVyIHRvIHRoZSBNUCB0YWJsZSBpbiB0aGUKLQkJCSAqICBpcnFmbGFnIGZpZWxkIChsZXZlbCBzZW5zaXRpdmUsIGFjdGl2ZSBoaWdoIHBvbGFyaXR5KS4KLQkJCSAqLwotCQkJaWYgKEVMQ1JfdHJpZ2dlcihpKSkKLQkJCQlpbnRzcmMubXBjX2lycWZsYWcgPSAxMzsKLQkJCWVsc2UKLQkJCQlpbnRzcmMubXBjX2lycWZsYWcgPSAwOwotCQl9Ci0KLQkJaW50c3JjLm1wY19zcmNidXNpcnEgPSBpOwotCQlpbnRzcmMubXBjX2RzdGlycSA9IGkgPyBpIDogMjsJCS8qIElSUTAgdG8gSU5USU4yICovCi0JCU1QX2ludHNyY19pbmZvKCZpbnRzcmMpOwotCX0KLQotCWludHNyYy5tcGNfaXJxdHlwZSA9IG1wX0V4dElOVDsKLQlpbnRzcmMubXBjX3NyY2J1c2lycSA9IDA7Ci0JaW50c3JjLm1wY19kc3RpcnEgPSAwOwkJCQkvKiA4MjU5QSB0byBJTlRJTjAgKi8KLQlNUF9pbnRzcmNfaW5mbygmaW50c3JjKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjb25zdHJ1Y3RfZGVmYXVsdF9JU0FfbXB0YWJsZShpbnQgbXBjX2RlZmF1bHRfdHlwZSkKLXsKLQlzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgcHJvY2Vzc29yOwotCXN0cnVjdCBtcGNfY29uZmlnX2J1cyBidXM7Ci0Jc3RydWN0IG1wY19jb25maWdfaW9hcGljIGlvYXBpYzsKLQlzdHJ1Y3QgbXBjX2NvbmZpZ19saW50c3JjIGxpbnRzcmM7Ci0JaW50IGxpbnR0eXBlc1syXSA9IHsgbXBfRXh0SU5ULCBtcF9OTUkgfTsKLQlpbnQgaTsKLQotCS8qCi0JICogbG9jYWwgQVBJQyBoYXMgZGVmYXVsdCBhZGRyZXNzCi0JICovCi0JbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7Ci0KLQkvKgotCSAqIDIgQ1BVcywgbnVtYmVyZWQgMCAmIDEuCi0JICovCi0JcHJvY2Vzc29yLm1wY190eXBlID0gTVBfUFJPQ0VTU09SOwotCS8qIEVpdGhlciBhbiBpbnRlZ3JhdGVkIEFQSUMgb3IgYSBkaXNjcmV0ZSA4MjQ4OURYLiAqLwotCXByb2Nlc3Nvci5tcGNfYXBpY3ZlciA9IG1wY19kZWZhdWx0X3R5cGUgPiA0ID8gMHgxMCA6IDB4MDE7Ci0JcHJvY2Vzc29yLm1wY19jcHVmbGFnID0gQ1BVX0VOQUJMRUQ7Ci0JcHJvY2Vzc29yLm1wY19jcHVmZWF0dXJlID0gKGJvb3RfY3B1X2RhdGEueDg2IDw8IDgpIHwKLQkJCQkgICAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPDwgNCkgfAotCQkJCSAgIGJvb3RfY3B1X2RhdGEueDg2X21hc2s7Ci0JcHJvY2Vzc29yLm1wY19mZWF0dXJlZmxhZyA9IGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHlbMF07Ci0JcHJvY2Vzc29yLm1wY19yZXNlcnZlZFswXSA9IDA7Ci0JcHJvY2Vzc29yLm1wY19yZXNlcnZlZFsxXSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlwcm9jZXNzb3IubXBjX2FwaWNpZCA9IGk7Ci0JCU1QX3Byb2Nlc3Nvcl9pbmZvKCZwcm9jZXNzb3IpOwotCX0KLQotCWJ1cy5tcGNfdHlwZSA9IE1QX0JVUzsKLQlidXMubXBjX2J1c2lkID0gMDsKLQlzd2l0Y2ggKG1wY19kZWZhdWx0X3R5cGUpIHsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiPz8/XG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBzdGFuZGFyZCBjb25maWd1cmF0aW9uICVkXG4iLAotCQkJCW1wY19kZWZhdWx0X3R5cGUpOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgMToKLQkJY2FzZSA1OgotCQkJbWVtY3B5KGJ1cy5tcGNfYnVzdHlwZSwgIklTQSAgICIsIDYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJY2FzZSA2OgotCQljYXNlIDM6Ci0JCQltZW1jcHkoYnVzLm1wY19idXN0eXBlLCAiRUlTQSAgIiwgNik7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQljYXNlIDc6Ci0JCQltZW1jcHkoYnVzLm1wY19idXN0eXBlLCAiTUNBICAgIiwgNik7Ci0JfQotCU1QX2J1c19pbmZvKCZidXMpOwotCWlmIChtcGNfZGVmYXVsdF90eXBlID4gNCkgewotCQlidXMubXBjX2J1c2lkID0gMTsKLQkJbWVtY3B5KGJ1cy5tcGNfYnVzdHlwZSwgIlBDSSAgICIsIDYpOwotCQlNUF9idXNfaW5mbygmYnVzKTsKLQl9Ci0KLQlpb2FwaWMubXBjX3R5cGUgPSBNUF9JT0FQSUM7Ci0JaW9hcGljLm1wY19hcGljaWQgPSAyOwotCWlvYXBpYy5tcGNfYXBpY3ZlciA9IG1wY19kZWZhdWx0X3R5cGUgPiA0ID8gMHgxMCA6IDB4MDE7Ci0JaW9hcGljLm1wY19mbGFncyA9IE1QQ19BUElDX1VTQUJMRTsKLQlpb2FwaWMubXBjX2FwaWNhZGRyID0gMHhGRUMwMDAwMDsKLQlNUF9pb2FwaWNfaW5mbygmaW9hcGljKTsKLQotCS8qCi0JICogV2Ugc2V0IHVwIG1vc3Qgb2YgdGhlIGxvdyAxNiBJTy1BUElDIHBpbnMgYWNjb3JkaW5nIHRvIE1QUyBydWxlcy4KLQkgKi8KLQljb25zdHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKG1wY19kZWZhdWx0X3R5cGUpOwotCi0JbGludHNyYy5tcGNfdHlwZSA9IE1QX0xJTlRTUkM7Ci0JbGludHNyYy5tcGNfaXJxZmxhZyA9IDA7CQkvKiBjb25mb3JtaW5nICovCi0JbGludHNyYy5tcGNfc3JjYnVzaWQgPSAwOwotCWxpbnRzcmMubXBjX3NyY2J1c2lycSA9IDA7Ci0JbGludHNyYy5tcGNfZGVzdGFwaWMgPSBNUF9BUElDX0FMTDsKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWxpbnRzcmMubXBjX2lycXR5cGUgPSBsaW50dHlwZXNbaV07Ci0JCWxpbnRzcmMubXBjX2Rlc3RhcGljbGludCA9IGk7Ci0JCU1QX2xpbnRzcmNfaW5mbygmbGludHNyYyk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGZfZm91bmQ7Ci0KLS8qCi0gKiBTY2FuIHRoZSBtZW1vcnkgYmxvY2tzIGZvciBhbiBTTVAgY29uZmlndXJhdGlvbiBibG9jay4KLSAqLwotdm9pZCBfX2luaXQgZ2V0X3NtcF9jb25maWcgKHZvaWQpCi17Ci0Jc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGYgPSBtcGZfZm91bmQ7Ci0KLQkvKgotCSAqIEFDUEkgc3VwcG9ydHMgYm90aCBsb2dpY2FsIChlLmcuIEh5cGVyLVRocmVhZGluZykgYW5kIHBoeXNpY2FsIAotCSAqIHByb2Nlc3NvcnMsIHdoZXJlIE1QUyBvbmx5IHN1cHBvcnRzIHBoeXNpY2FsLgotCSAqLwotCWlmIChhY3BpX2xhcGljICYmIGFjcGlfaW9hcGljKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEFDUEkgKE1BRFQpIGZvciBTTVAgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuIik7Ci0JCXJldHVybjsKLQl9Ci0JZWxzZSBpZiAoYWNwaV9sYXBpYykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgQUNQSSBmb3IgcHJvY2Vzc29yIChMQVBJQykgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuIik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJbnRlbCBNdWx0aVByb2Nlc3NvciBTcGVjaWZpY2F0aW9uIHYxLiVkXG4iLCBtcGYtPm1wZl9zcGVjaWZpY2F0aW9uKTsKLQlpZiAobXBmLT5tcGZfZmVhdHVyZTIgJiAoMTw8NykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgIElNQ1IgYW5kIFBJQyBjb21wYXRpYmlsaXR5IG1vZGUuXG4iKTsKLQkJcGljX21vZGUgPSAxOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiAgICBWaXJ0dWFsIFdpcmUgY29tcGF0aWJpbGl0eSBtb2RlLlxuIik7Ci0JCXBpY19tb2RlID0gMDsKLQl9Ci0KLQkvKgotCSAqIE5vdyBzZWUgaWYgd2UgbmVlZCB0byByZWFkIGZ1cnRoZXIuCi0JICovCi0JaWYgKG1wZi0+bXBmX2ZlYXR1cmUxICE9IDApIHsKLQotCQlwcmludGsoS0VSTl9JTkZPICJEZWZhdWx0IE1QIGNvbmZpZ3VyYXRpb24gIyVkXG4iLCBtcGYtPm1wZl9mZWF0dXJlMSk7Ci0JCWNvbnN0cnVjdF9kZWZhdWx0X0lTQV9tcHRhYmxlKG1wZi0+bXBmX2ZlYXR1cmUxKTsKLQotCX0gZWxzZSBpZiAobXBmLT5tcGZfcGh5c3B0cikgewotCi0JCS8qCi0JCSAqIFJlYWQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRhYmxlLiAgQW55dGhpbmcgaGVyZSB3aWxsCi0JCSAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy4KLQkJICovCi0JCWlmICghc21wX3JlYWRfbXBjKHBoeXNfdG9fdmlydChtcGYtPm1wZl9waHlzcHRyKSkpIHsKLQkJCXNtcF9mb3VuZF9jb25maWcgPSAwOwotCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgTVAgdGFibGUgZXJyb3JzIGRldGVjdGVkIS4uLlxuIik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIi4uLiBkaXNhYmxpbmcgU01QIHN1cHBvcnQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyoKLQkJICogSWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IE1QIElSUSBlbnRyaWVzLCB0aGVuIHdlIGFyZQotCQkgKiBicm9rZW4uICBXZSBzZXQgdXAgbW9zdCBvZiB0aGUgbG93IDE2IElPLUFQSUMgcGlucyB0bwotCQkgKiBJU0EgZGVmYXVsdHMgYW5kIGhvcGUgaXQgd2lsbCB3b3JrLgotCQkgKi8KLQkJaWYgKCFtcF9pcnFfZW50cmllcykgewotCQkJc3RydWN0IG1wY19jb25maWdfYnVzIGJ1czsKLQotCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1Zywgbm8gZXhwbGljaXQgSVJRIGVudHJpZXMsIHVzaW5nIGRlZmF1bHQgbXB0YWJsZS4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKLQotCQkJYnVzLm1wY190eXBlID0gTVBfQlVTOwotCQkJYnVzLm1wY19idXNpZCA9IDA7Ci0JCQltZW1jcHkoYnVzLm1wY19idXN0eXBlLCAiSVNBICAgIiwgNik7Ci0JCQlNUF9idXNfaW5mbygmYnVzKTsKLQotCQkJY29uc3RydWN0X2RlZmF1bHRfaW9pcnFfbXB0YWJsZSgwKTsKLQkJfQotCi0JfSBlbHNlCi0JCUJVRygpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiUHJvY2Vzc29yczogJWRcbiIsIG51bV9wcm9jZXNzb3JzKTsKLQkvKgotCSAqIE9ubHkgdXNlIHRoZSBmaXJzdCBjb25maWd1cmF0aW9uIGZvdW5kLgotCSAqLwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzbXBfc2Nhbl9jb25maWcgKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBsZW5ndGgpCi17Ci0JdW5zaWduZWQgbG9uZyAqYnAgPSBwaHlzX3RvX3ZpcnQoYmFzZSk7Ci0Jc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICptcGY7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTY2FuIFNNUCBmcm9tICVwIGZvciAlbGQgYnl0ZXMuXG4iLCBicCxsZW5ndGgpOwotCWlmIChzaXplb2YoKm1wZikgIT0gMTYpCi0JCXByaW50aygiRXJyb3I6IE1QRiBzaXplXG4iKTsKLQotCXdoaWxlIChsZW5ndGggPiAwKSB7Ci0JCW1wZiA9IChzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKilicDsKLQkJaWYgKCgqYnAgPT0gU01QX01BR0lDX0lERU5UKSAmJgotCQkJKG1wZi0+bXBmX2xlbmd0aCA9PSAxKSAmJgotCQkJIW1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKWJwLCAxNikgJiYKLQkJCSgobXBmLT5tcGZfc3BlY2lmaWNhdGlvbiA9PSAxKQotCQkJCXx8IChtcGYtPm1wZl9zcGVjaWZpY2F0aW9uID09IDQpKSApIHsKLQotCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDE7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJmb3VuZCBTTVAgTVAtdGFibGUgYXQgWyVwXSAlMDhseFxuIiwKLQkJCQltcGYsIHZpcnRfdG9fcGh5cyhtcGYpKTsKLQkJCXJlc2VydmVfYm9vdG1lbSh2aXJ0X3RvX3BoeXMobXBmKSwgUEFHRV9TSVpFLAotCQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCQkJaWYgKG1wZi0+bXBmX3BoeXNwdHIpIHsKLQkJCQkvKgotCQkJCSAqIFdlIGNhbm5vdCBhY2Nlc3MgdG8gTVBDIHRhYmxlIHRvIGNvbXB1dGUKLQkJCQkgKiB0YWJsZSBzaXplIHlldCwgYXMgb25seSBmZXcgbWVnYWJ5dGVzIGZyb20KLQkJCQkgKiB0aGUgYm90dG9tIGlzIG1hcHBlZCBub3cuCi0JCQkJICogUEMtOTgwMCdzIE1QQyB0YWJsZSBwbGFjZXMgb24gdGhlIHZlcnkgbGFzdAotCQkJCSAqIG9mIHBoeXNpY2FsIG1lbW9yeTsgc28gdGhhdCBzaW1wbHkgcmVzZXJ2aW5nCi0JCQkJICogUEFHRV9TSVpFIGZyb20gbXBnLT5tcGZfcGh5c3B0ciB5aWVsZHMgQlVHKCkKLQkJCQkgKiBpbiByZXNlcnZlX2Jvb3RtZW0uCi0JCQkJICovCi0JCQkJdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFOwotCQkJCXVuc2lnbmVkIGxvbmcgZW5kID0gbWF4X2xvd19wZm4gKiBQQUdFX1NJWkU7Ci0JCQkJaWYgKG1wZi0+bXBmX3BoeXNwdHIgKyBzaXplID4gZW5kKQotCQkJCQlzaXplID0gZW5kIC0gbXBmLT5tcGZfcGh5c3B0cjsKLQkJCQlyZXNlcnZlX2Jvb3RtZW0obXBmLT5tcGZfcGh5c3B0ciwgc2l6ZSwKLQkJCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0JCQl9Ci0KLQkJCW1wZl9mb3VuZCA9IG1wZjsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWJwICs9IDQ7Ci0JCWxlbmd0aCAtPSAxNjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IGZpbmRfc21wX2NvbmZpZyAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgYWRkcmVzczsKLQotCS8qCi0JICogRklYTUU6IExpbnV4IGFzc3VtZXMgeW91IGhhdmUgNjQwSyBvZiBiYXNlIHJhbS4uCi0JICogdGhpcyBjb250aW51ZXMgdGhlIGVycm9yLi4uCi0JICoKLQkgKiAxKSBTY2FuIHRoZSBib3R0b20gMUsgZm9yIGEgc2lnbmF0dXJlCi0JICogMikgU2NhbiB0aGUgdG9wIDFLIG9mIGJhc2UgUkFNCi0JICogMykgU2NhbiB0aGUgNjRLIG9mIGJpb3MKLQkgKi8KLQlpZiAoc21wX3NjYW5fY29uZmlnKDB4MCwweDQwMCkgfHwKLQkJc21wX3NjYW5fY29uZmlnKDYzOSoweDQwMCwweDQwMCkgfHwKLQkJCXNtcF9zY2FuX2NvbmZpZygweEYwMDAwLDB4MTAwMDApKQotCQlyZXR1cm47Ci0JLyoKLQkgKiBJZiBpdCBpcyBhbiBTTVAgbWFjaGluZSB3ZSBzaG91bGQga25vdyBub3csIHVubGVzcyB0aGUKLQkgKiBjb25maWd1cmF0aW9uIGlzIGluIGFuIEVJU0EvTUNBIGJ1cyBtYWNoaW5lIHdpdGggYW4KLQkgKiBleHRlbmRlZCBiaW9zIGRhdGEgYXJlYS4KLQkgKgotCSAqIHRoZXJlIGlzIGEgcmVhbC1tb2RlIHNlZ21lbnRlZCBwb2ludGVyIHBvaW50aW5nIHRvIHRoZQotCSAqIDRLIEVCREEgYXJlYSBhdCAweDQwRSwgY2FsY3VsYXRlIGFuZCBzY2FuIGl0IGhlcmUuCi0JICoKLQkgKiBOT1RFISBUaGVyZSBhcmUgTGludXggbG9hZGVycyB0aGF0IHdpbGwgY29ycnVwdCB0aGUgRUJEQQotCSAqIGFyZWEsIGFuZCBhcyBzdWNoIHRoaXMga2luZCBvZiBTTVAgY29uZmlnIG1heSBiZSBsZXNzCi0JICogdHJ1c3R3b3J0aHksIHNpbXBseSBiZWNhdXNlIHRoZSBTTVAgdGFibGUgbWF5IGhhdmUgYmVlbgotCSAqIHN0b21wZWQgb24gZHVyaW5nIGVhcmx5IGJvb3QuIFRoZXNlIGxvYWRlcnMgYXJlIGJ1Z2d5IGFuZAotCSAqIHNob3VsZCBiZSBmaXhlZC4KLQkgKgotCSAqIE1QMS40IFNQRUMgc3RhdGVzIHRvIG9ubHkgc2NhbiBmaXJzdCAxSyBvZiA0SyBFQkRBLgotCSAqLwotCi0JYWRkcmVzcyA9IGdldF9iaW9zX2ViZGEoKTsKLQlpZiAoYWRkcmVzcykKLQkJc21wX3NjYW5fY29uZmlnKGFkZHJlc3MsIDB4NDAwKTsKLX0KLQotaW50IGVzNzAwMF9wbGF0OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUEktYmFzZWQgTVAgQ29uZmlndXJhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BQ1BJCi0KLXZvaWQgX19pbml0IG1wX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3ModTY0IGFkZHJlc3MpCi17Ci0JbXBfbGFwaWNfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBhZGRyZXNzOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIG1wX2xhcGljX2FkZHIpOwotCi0JaWYgKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9PSAtMVUpCi0JCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSk7Ci0KLQlEcHJpbnRrKCJCb290IENQVSA9ICVkXG4iLCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOwotfQotCi12b2lkIF9fY3B1aW5pdCBtcF9yZWdpc3Rlcl9sYXBpYyAodTggaWQsIHU4IGVuYWJsZWQpCi17Ci0Jc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yIHByb2Nlc3NvcjsKLQlpbnQgYm9vdF9jcHUgPSAwOwotCQotCWlmIChNQVhfQVBJQ1MgLSBpZCA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlByb2Nlc3NvciAjJWQgaW52YWxpZCAobWF4ICVkKVxuIiwKLQkJCWlkLCBNQVhfQVBJQ1MpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGlkID09IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkKLQkJYm9vdF9jcHUgPSAxOwotCi0JcHJvY2Vzc29yLm1wY190eXBlID0gTVBfUFJPQ0VTU09SOwotCXByb2Nlc3Nvci5tcGNfYXBpY2lkID0gaWQ7Ci0JcHJvY2Vzc29yLm1wY19hcGljdmVyID0gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKLQlwcm9jZXNzb3IubXBjX2NwdWZsYWcgPSAoZW5hYmxlZCA/IENQVV9FTkFCTEVEIDogMCk7Ci0JcHJvY2Vzc29yLm1wY19jcHVmbGFnIHw9IChib290X2NwdSA/IENQVV9CT09UUFJPQ0VTU09SIDogMCk7Ci0JcHJvY2Vzc29yLm1wY19jcHVmZWF0dXJlID0gKGJvb3RfY3B1X2RhdGEueDg2IDw8IDgpIHwgCi0JCShib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PCA0KSB8IGJvb3RfY3B1X2RhdGEueDg2X21hc2s7Ci0JcHJvY2Vzc29yLm1wY19mZWF0dXJlZmxhZyA9IGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHlbMF07Ci0JcHJvY2Vzc29yLm1wY19yZXNlcnZlZFswXSA9IDA7Ci0JcHJvY2Vzc29yLm1wY19yZXNlcnZlZFsxXSA9IDA7Ci0KLQlNUF9wcm9jZXNzb3JfaW5mbygmcHJvY2Vzc29yKTsKLX0KLQotI2lmZGVmCUNPTkZJR19YODZfSU9fQVBJQwotCi0jZGVmaW5lIE1QX0lTQV9CVVMJCTAKLSNkZWZpbmUgTVBfTUFYX0lPQVBJQ19QSU4JMTI3Ci0KLXN0YXRpYyBzdHJ1Y3QgbXBfaW9hcGljX3JvdXRpbmcgewotCWludAkJCWFwaWNfaWQ7Ci0JaW50CQkJZ3NpX2Jhc2U7Ci0JaW50CQkJZ3NpX2VuZDsKLQl1MzIJCQlwaW5fcHJvZ3JhbW1lZFs0XTsKLX0gbXBfaW9hcGljX3JvdXRpbmdbTUFYX0lPX0FQSUNTXTsKLQotc3RhdGljIGludCBtcF9maW5kX2lvYXBpYyAoaW50IGdzaSkKLXsKLQlpbnQgaSA9IDA7Ci0KLQkvKiBGaW5kIHRoZSBJT0FQSUMgdGhhdCBtYW5hZ2VzIHRoaXMgR1NJLiAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJaWYgKChnc2kgPj0gbXBfaW9hcGljX3JvdXRpbmdbaV0uZ3NpX2Jhc2UpCi0JCQkmJiAoZ3NpIDw9IG1wX2lvYXBpY19yb3V0aW5nW2ldLmdzaV9lbmQpKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogVW5hYmxlIHRvIGxvY2F0ZSBJT0FQSUMgZm9yIEdTSSAlZFxuIiwgZ3NpKTsKLQotCXJldHVybiAtMTsKLX0KLQotdm9pZCBfX2luaXQgbXBfcmVnaXN0ZXJfaW9hcGljKHU4IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKQotewotCWludCBpZHggPSAwOwotCWludCB0bXBpZDsKLQotCWlmIChucl9pb2FwaWNzID49IE1BWF9JT19BUElDUykgewotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAiCi0JCQkiKGZvdW5kICVkKVxuIiwgTUFYX0lPX0FQSUNTLCBucl9pb2FwaWNzKTsKLQkJcGFuaWMoIlJlY29tcGlsZSBrZXJuZWwgd2l0aCBiaWdnZXIgTUFYX0lPX0FQSUNTIVxuIik7Ci0JfQotCWlmICghYWRkcmVzcykgewotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IEJvZ3VzICh6ZXJvKSBJL08gQVBJQyBhZGRyZXNzIgotCQkJIiBmb3VuZCBpbiBNQURUIHRhYmxlLCBza2lwcGluZyFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWR4ID0gbnJfaW9hcGljcysrOwotCi0JbXBfaW9hcGljc1tpZHhdLm1wY190eXBlID0gTVBfSU9BUElDOwotCW1wX2lvYXBpY3NbaWR4XS5tcGNfZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7Ci0JbXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciA9IGFkZHJlc3M7Ci0KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4LCBhZGRyZXNzKTsKLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQotCQkmJiAhQVBJQ19YQVBJQyhhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpCi0JCXRtcGlkID0gaW9fYXBpY19nZXRfdW5pcXVlX2lkKGlkeCwgaWQpOwotCWVsc2UKLQkJdG1waWQgPSBpZDsKLQlpZiAodG1waWQgPT0gLTEpIHsKLQkJbnJfaW9hcGljcy0tOwotCQlyZXR1cm47Ci0JfQotCW1wX2lvYXBpY3NbaWR4XS5tcGNfYXBpY2lkID0gdG1waWQ7Ci0JbXBfaW9hcGljc1tpZHhdLm1wY19hcGljdmVyID0gaW9fYXBpY19nZXRfdmVyc2lvbihpZHgpOwotCQotCS8qIAotCSAqIEJ1aWxkIGJhc2ljIEdTSSBsb29rdXAgdGFibGUgdG8gZmFjaWxpdGF0ZSBnc2ktPmlvX2FwaWMgbG9va3VwcwotCSAqIGFuZCB0byBwcmV2ZW50IHJlcHJvZ3JhbW1pbmcgb2YgSU9BUElDIHBpbnMgKFBDSSBHU0lzKS4KLQkgKi8KLQltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmFwaWNfaWQgPSBtcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWNpZDsKLQltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9iYXNlID0gZ3NpX2Jhc2U7Ci0JbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfZW5kID0gZ3NpX2Jhc2UgKwotCQlpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGlkeCk7Ci0KLQlwcmludGsoIklPQVBJQ1slZF06IGFwaWNfaWQgJWQsIHZlcnNpb24gJWQsIGFkZHJlc3MgMHgleCwgIgotCSAgICAgICAiR1NJICVkLSVkXG4iLCBpZHgsIG1wX2lvYXBpY3NbaWR4XS5tcGNfYXBpY2lkLAotCSAgICAgICBtcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWN2ZXIsIG1wX2lvYXBpY3NbaWR4XS5tcGNfYXBpY2FkZHIsCi0JICAgICAgIG1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2Jhc2UsCi0JICAgICAgIG1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2VuZCk7Ci19Ci0KLXZvaWQgX19pbml0Ci1tcF9vdmVycmlkZV9sZWdhY3lfaXJxKHU4IGJ1c19pcnEsIHU4IHBvbGFyaXR5LCB1OCB0cmlnZ2VyLCB1MzIgZ3NpKQotewotCXN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBpbnRzcmM7Ci0JaW50CQkJaW9hcGljID0gLTE7Ci0JaW50CQkJcGluID0gLTE7Ci0KLQkvKiAKLQkgKiBDb252ZXJ0ICdnc2knIHRvICdpb2FwaWMucGluJy4KLQkgKi8KLQlpb2FwaWMgPSBtcF9maW5kX2lvYXBpYyhnc2kpOwotCWlmIChpb2FwaWMgPCAwKQotCQlyZXR1cm47Ci0JcGluID0gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKLQotCS8qCi0JICogVEJEOiBUaGlzIGNoZWNrIGlzIGZvciBmYXVsdHkgdGltZXIgZW50cmllcywgd2hlcmUgdGhlIG92ZXJyaWRlCi0JICogICAgICBlcnJvbmVvdXNseSBzZXRzIHRoZSB0cmlnZ2VyIHRvIGxldmVsLCByZXN1bHRpbmcgaW4gYSBIVUdFIAotCSAqICAgICAgaW5jcmVhc2Ugb2YgdGltZXIgaW50ZXJydXB0cyEKLQkgKi8KLQlpZiAoKGJ1c19pcnEgPT0gMCkgJiYgKHRyaWdnZXIgPT0gMykpCi0JCXRyaWdnZXIgPSAxOwotCi0JaW50c3JjLm1wY190eXBlID0gTVBfSU5UU1JDOwotCWludHNyYy5tcGNfaXJxdHlwZSA9IG1wX0lOVDsKLQlpbnRzcmMubXBjX2lycWZsYWcgPSAodHJpZ2dlciA8PCAyKSB8IHBvbGFyaXR5OwotCWludHNyYy5tcGNfc3JjYnVzID0gTVBfSVNBX0JVUzsKLQlpbnRzcmMubXBjX3NyY2J1c2lycSA9IGJ1c19pcnE7CQkJCSAgICAgICAvKiBJUlEgKi8KLQlpbnRzcmMubXBjX2RzdGFwaWMgPSBtcF9pb2FwaWNzW2lvYXBpY10ubXBjX2FwaWNpZDsJICAgLyogQVBJQyBJRCAqLwotCWludHNyYy5tcGNfZHN0aXJxID0gcGluOwkJCQkgICAgLyogSU5USU4jICovCi0KLQlEcHJpbnRrKCJJbnQ6IHR5cGUgJWQsIHBvbCAlZCwgdHJpZyAlZCwgYnVzICVkLCBpcnEgJWQsICVkLSVkXG4iLAotCQlpbnRzcmMubXBjX2lycXR5cGUsIGludHNyYy5tcGNfaXJxZmxhZyAmIDMsIAotCQkoaW50c3JjLm1wY19pcnFmbGFnID4+IDIpICYgMywgaW50c3JjLm1wY19zcmNidXMsIAotCQlpbnRzcmMubXBjX3NyY2J1c2lycSwgaW50c3JjLm1wY19kc3RhcGljLCBpbnRzcmMubXBjX2RzdGlycSk7Ci0KLQltcF9pcnFzW21wX2lycV9lbnRyaWVzXSA9IGludHNyYzsKLQlpZiAoKyttcF9pcnFfZW50cmllcyA9PSBNQVhfSVJRX1NPVVJDRVMpCi0JCXBhbmljKCJNYXggIyBvZiBpcnEgc291cmNlcyBleGNlZWRlZCFcbiIpOwotfQotCi12b2lkIF9faW5pdCBtcF9jb25maWdfYWNwaV9sZWdhY3lfaXJxcyAodm9pZCkKLXsKLQlzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgaW50c3JjOwotCWludCBpID0gMDsKLQlpbnQgaW9hcGljID0gLTE7Ci0KLQkvKiAKLQkgKiBGYWJyaWNhdGUgdGhlIGxlZ2FjeSBJU0EgYnVzIChidXMgIzMxKS4KLQkgKi8KLQltcF9idXNfaWRfdG9fdHlwZVtNUF9JU0FfQlVTXSA9IE1QX0JVU19JU0E7Ci0JRHByaW50aygiQnVzICMlZCBpcyBJU0FcbiIsIE1QX0lTQV9CVVMpOwotCi0JLyoKLQkgKiBPbGRlciBnZW5lcmF0aW9ucyBvZiBFUzcwMDAgaGF2ZSBubyBsZWdhY3kgaWRlbnRpdHkgbWFwcGluZ3MKLQkgKi8KLQlpZiAoZXM3MDAwX3BsYXQgPT0gMSkKLQkJcmV0dXJuOwotCi0JLyogCi0JICogTG9jYXRlIHRoZSBJT0FQSUMgdGhhdCBtYW5hZ2VzIHRoZSBJU0EgSVJRcyAoMC0xNSkuIAotCSAqLwotCWlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKDApOwotCWlmIChpb2FwaWMgPCAwKQotCQlyZXR1cm47Ci0KLQlpbnRzcmMubXBjX3R5cGUgPSBNUF9JTlRTUkM7Ci0JaW50c3JjLm1wY19pcnFmbGFnID0gMDsJCQkJCS8qIENvbmZvcm1pbmcgKi8KLQlpbnRzcmMubXBjX3NyY2J1cyA9IE1QX0lTQV9CVVM7Ci0JaW50c3JjLm1wY19kc3RhcGljID0gbXBfaW9hcGljc1tpb2FwaWNdLm1wY19hcGljaWQ7Ci0KLQkvKiAKLQkgKiBVc2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUXMgMC0xNS4gIFVubGVzcwotCSAqIG92ZXJyaWRkZW4gYnkgKE1BRFQpIGludGVycnVwdCBzb3VyY2Ugb3ZlcnJpZGUgZW50cmllcy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpbnQgaWR4OwotCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgbXBfaXJxX2VudHJpZXM7IGlkeCsrKSB7Ci0JCQlzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgKmlycSA9IG1wX2lycXMgKyBpZHg7Ci0KLQkJCS8qIERvIHdlIGFscmVhZHkgaGF2ZSBhIG1hcHBpbmcgZm9yIHRoaXMgSVNBIElSUT8gKi8KLQkJCWlmIChpcnEtPm1wY19zcmNidXMgPT0gTVBfSVNBX0JVUyAmJiBpcnEtPm1wY19zcmNidXNpcnEgPT0gaSkKLQkJCQlicmVhazsKLQotCQkJLyogRG8gd2UgYWxyZWFkeSBoYXZlIGEgbWFwcGluZyBmb3IgdGhpcyBJT0FQSUMgcGluICovCi0JCQlpZiAoKGlycS0+bXBjX2RzdGFwaWMgPT0gaW50c3JjLm1wY19kc3RhcGljKSAmJgotCQkJCShpcnEtPm1wY19kc3RpcnEgPT0gaSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaWR4ICE9IG1wX2lycV9lbnRyaWVzKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQUNQSTogSVJRJWQgdXNlZCBieSBvdmVycmlkZS5cbiIsIGkpOwotCQkJY29udGludWU7CQkJLyogSVJRIGFscmVhZHkgdXNlZCAqLwotCQl9Ci0KLQkJaW50c3JjLm1wY19pcnF0eXBlID0gbXBfSU5UOwotCQlpbnRzcmMubXBjX3NyY2J1c2lycSA9IGk7CQkgICAvKiBJZGVudGl0eSBtYXBwZWQgKi8KLQkJaW50c3JjLm1wY19kc3RpcnEgPSBpOwotCi0JCURwcmludGsoIkludDogdHlwZSAlZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJWQsIGlycSAlZCwgIgotCQkJIiVkLSVkXG4iLCBpbnRzcmMubXBjX2lycXR5cGUsIGludHNyYy5tcGNfaXJxZmxhZyAmIDMsIAotCQkJKGludHNyYy5tcGNfaXJxZmxhZyA+PiAyKSAmIDMsIGludHNyYy5tcGNfc3JjYnVzLCAKLQkJCWludHNyYy5tcGNfc3JjYnVzaXJxLCBpbnRzcmMubXBjX2RzdGFwaWMsIAotCQkJaW50c3JjLm1wY19kc3RpcnEpOwotCi0JCW1wX2lycXNbbXBfaXJxX2VudHJpZXNdID0gaW50c3JjOwotCQlpZiAoKyttcF9pcnFfZW50cmllcyA9PSBNQVhfSVJRX1NPVVJDRVMpCi0JCQlwYW5pYygiTWF4ICMgb2YgaXJxIHNvdXJjZXMgZXhjZWVkZWQhXG4iKTsKLQl9Ci19Ci0KLSNkZWZpbmUgTUFYX0dTSV9OVU0JNDA5NgotI2RlZmluZSBJUlFfQ09NUFJFU1NJT05fU1RBUlQJNjQKLQotaW50IG1wX3JlZ2lzdGVyX2dzaSh1MzIgZ3NpLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KQotewotCWludCBpb2FwaWMgPSAtMTsKLQlpbnQgaW9hcGljX3BpbiA9IDA7Ci0JaW50IGlkeCwgYml0ID0gMDsKLQlzdGF0aWMgaW50IHBjaV9pcnEgPSBJUlFfQ09NUFJFU1NJT05fU1RBUlQ7Ci0JLyoKLQkgKiBNYXBwaW5nIGJldHdlZW4gR2xvYmFsIFN5c3RlbSBJbnRlcnJ1cHRzLCB3aGljaAotCSAqIHJlcHJlc2VudCBhbGwgcG9zc2libGUgaW50ZXJydXB0cywgYW5kIElSUXMKLQkgKiBhc3NpZ25lZCB0byBhY3R1YWwgZGV2aWNlcy4KLQkgKi8KLQlzdGF0aWMgaW50CQlnc2lfdG9faXJxW01BWF9HU0lfTlVNXTsKLQotCS8qIERvbid0IHNldCB1cCB0aGUgQUNQSSBTQ0kgYmVjYXVzZSBpdCdzIGFscmVhZHkgc2V0IHVwICovCi0JaWYgKGFjcGlfZ2JsX0ZBRFQuc2NpX2ludGVycnVwdCA9PSBnc2kpCi0JCXJldHVybiBnc2k7Ci0KLQlpb2FwaWMgPSBtcF9maW5kX2lvYXBpYyhnc2kpOwotCWlmIChpb2FwaWMgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIElPQVBJQyBmb3IgR1NJICV1XG4iLCBnc2kpOwotCQlyZXR1cm4gZ3NpOwotCX0KLQotCWlvYXBpY19waW4gPSBnc2kgLSBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmdzaV9iYXNlOwotCi0JaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCi0JCWdzaSA9IGlvYXBpY19yZW51bWJlcl9pcnEoaW9hcGljLCBnc2kpOwotCi0JLyogCi0JICogQXZvaWQgcGluIHJlcHJvZ3JhbW1pbmcuICBQUlRzIHR5cGljYWxseSBpbmNsdWRlIGVudHJpZXMgIAotCSAqIHdpdGggcmVkdW5kYW50IHBpbi0+Z3NpIG1hcHBpbmdzIChidXQgdW5pcXVlIFBDSSBkZXZpY2VzKTsKLQkgKiB3ZSBvbmx5IHByb2dyYW0gdGhlIElPQVBJQyBvbiB0aGUgZmlyc3QuCi0JICovCi0JYml0ID0gaW9hcGljX3BpbiAlIDMyOwotCWlkeCA9IChpb2FwaWNfcGluIDwgMzIpID8gMCA6IChpb2FwaWNfcGluIC8gMzIpOwotCWlmIChpZHggPiAzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCByZWZlcmVuY2UgdG8gSU9BUElDIHBpbiAiCi0JCQkiJWQtJWRcbiIsIG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uYXBpY19pZCwgCi0JCQlpb2FwaWNfcGluKTsKLQkJcmV0dXJuIGdzaTsKLQl9Ci0JaWYgKCgxPDxiaXQpICYgbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5waW5fcHJvZ3JhbW1lZFtpZHhdKSB7Ci0JCURwcmludGsoS0VSTl9ERUJVRyAiUGluICVkLSVkIGFscmVhZHkgcHJvZ3JhbW1lZFxuIiwKLQkJCW1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uYXBpY19pZCwgaW9hcGljX3Bpbik7Ci0JCXJldHVybiAoZ3NpIDwgSVJRX0NPTVBSRVNTSU9OX1NUQVJUID8gZ3NpIDogZ3NpX3RvX2lycVtnc2ldKTsKLQl9Ci0KLQltcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLnBpbl9wcm9ncmFtbWVkW2lkeF0gfD0gKDE8PGJpdCk7Ci0KLQkvKgotCSAqIEZvciBHU0kgPj0gNjQsIHVzZSBJUlEgY29tcHJlc3Npb24KLQkgKi8KLQlpZiAoKGdzaSA+PSBJUlFfQ09NUFJFU1NJT05fU1RBUlQpCi0JCSYmICh0cmlnZ2VyaW5nID09IEFDUElfTEVWRUxfU0VOU0lUSVZFKSkgewotCQkvKgotCQkgKiBGb3IgUENJIGRldmljZXMgYXNzaWduIElSUXMgaW4gb3JkZXIsIGF2b2lkaW5nIGdhcHMKLQkJICogZHVlIHRvIHVudXNlZCBJL08gQVBJQyBwaW5zLgotCQkgKi8KLQkJaW50IGlycSA9IGdzaTsKLQkJaWYgKGdzaSA8IE1BWF9HU0lfTlVNKSB7Ci0JCQkvKgotCQkJICogUmV0YWluIHRoZSBWSUEgY2hpcHNldCB3b3JrLWFyb3VuZCAoZ3NpID4gMTUpLCBidXQKLQkJCSAqIGF2b2lkIGEgcHJvYmxlbSB3aGVyZSB0aGUgODI1NCB0aW1lciAoSVJRMCkgaXMgc2V0dXAKLQkJCSAqIHZpYSBhbiBvdmVycmlkZSAoc28gaXQncyBub3Qgb24gcGluIDAgb2YgdGhlIGlvYXBpYyksCi0JCQkgKiBhbmQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHBpbiAwIGludGVycnVwdCBpcyBhIFBDSQotCQkJICogdHlwZS4gIFRoZSBnc2kgPiAxNSB0ZXN0IGNvdWxkIGNhdXNlIHRoZXNlIHR3byBwaW5zCi0JCQkgKiB0byBiZSBzaGFyZWQgYXMgSVJRMCwgYW5kIHRoZXkgYXJlIG5vdCBzaGFyZWFibGUuCi0JCQkgKiBTbyB0ZXN0IGZvciB0aGlzIGNvbmRpdGlvbiwgYW5kIGlmIG5lY2Vzc2FyeSwgYXZvaWQKLQkJCSAqIHRoZSBwaW4gY29sbGlzaW9uLgotCQkJICovCi0JCQlpZiAoZ3NpID4gMTUgfHwgKGdzaSA9PSAwICYmICF0aW1lcl91c2VzX2lvYXBpY19waW5fMCkpCi0JCQkJZ3NpID0gcGNpX2lycSsrOwotCQkJLyoKLQkJCSAqIERvbid0IGFzc2lnbiBJUlEgdXNlZCBieSBBQ1BJIFNDSQotCQkJICovCi0JCQlpZiAoZ3NpID09IGFjcGlfZ2JsX0ZBRFQuc2NpX2ludGVycnVwdCkKLQkJCQlnc2kgPSBwY2lfaXJxKys7Ci0JCQlnc2lfdG9faXJxW2lycV0gPSBnc2k7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkdTSSAldSBpcyB0b28gaGlnaFxuIiwgZ3NpKTsKLQkJCXJldHVybiBnc2k7Ci0JCX0KLQl9Ci0KLQlpb19hcGljX3NldF9wY2lfcm91dGluZyhpb2FwaWMsIGlvYXBpY19waW4sIGdzaSwKLQkJICAgIHRyaWdnZXJpbmcgPT0gQUNQSV9FREdFX1NFTlNJVElWRSA/IDAgOiAxLAotCQkgICAgcG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfSElHSCA/IDAgOiAxKTsKLQlyZXR1cm4gZ3NpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCi0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZV82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmFiMTQwLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NjcgKzAsMCBAQAotLyoKLSAqCUludGVsIE11bHRpcHJvY2Vzc29yIFNwZWNpZmljYXRpb24gMS4xIGFuZCAxLjQKLSAqCWNvbXBsaWFudCBNUC10YWJsZSBwYXJzaW5nIHJvdXRpbmVzLgotICoKLSAqCShjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgotICoJKGMpIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCQlFcmljaCBCb2xleW4JOglNUCB2MS40IGFuZCBhZGRpdGlvbmFsIGNoYW5nZXMuCi0gKgkJQWxhbiBDb3gJOglBZGRlZCBFQkRBIHNjYW5uaW5nCi0gKgkJSW5nbyBNb2xuYXIJOgl2YXJpb3VzIGNsZWFudXBzIGFuZCByZXdyaXRlcwotICoJCU1hY2llaiBXLiBSb3p5Y2tpOglCaXRzIGZvciBkZWZhdWx0IE1QIGNvbmZpZ3VyYXRpb25zCi0gKgkJUGF1bCBEaWVmZW5iYXVnaDoJQWRkZWQgZnVsbCBBQ1BJIHN1cHBvcnQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLQotLyogSGF2ZSB3ZSBmb3VuZCBhbiBNUCB0YWJsZSAqLwotaW50IHNtcF9mb3VuZF9jb25maWc7Ci0KLS8qCi0gKiBWYXJpb3VzIExpbnV4LWludGVybmFsIGRhdGEgc3RydWN0dXJlcyBjcmVhdGVkIGZyb20gdGhlCi0gKiBNUC10YWJsZS4KLSAqLwotREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOwotaW50IG1wX2J1c19pZF90b19wY2lfYnVzIFtNQVhfTVBfQlVTU0VTXSA9IHsgWzAgLi4uIE1BWF9NUF9CVVNTRVMtMV0gPSAtMSB9OwotCi1zdGF0aWMgaW50IG1wX2N1cnJlbnRfcGNpX2lkID0gMDsKLS8qIEkvTyBBUElDIGVudHJpZXMgKi8KLXN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107Ci0KLS8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCi1zdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOwotCi0vKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLWludCBtcF9pcnFfZW50cmllczsKLQotaW50IG5yX2lvYXBpY3M7Ci11bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHIgPSAwOwotCi0KLQotLyogUHJvY2Vzc29yIHRoYXQgaXMgZG9pbmcgdGhlIGJvb3QgdXAgKi8KLXVuc2lnbmVkIGludCBib290X2NwdV9pZCA9IC0xVTsKLUVYUE9SVF9TWU1CT0woYm9vdF9jcHVfaWQpOwotCi0vKiBJbnRlcm5hbCBwcm9jZXNzb3IgY291bnQgKi8KLXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKLQotdW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOwotCi0vKiBCaXRtYXNrIG9mIHBoeXNpY2FsbHkgZXhpc3RpbmcgQ1BVcyAqLwotcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcCA9IFBIWVNJRF9NQVNLX05PTkU7Ci0KLXUxNiB4ODZfYmlvc19jcHVfYXBpY2lkX2luaXRbTlJfQ1BVU10gX19pbml0ZGF0YQotCQkJCT0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUQgfTsKLXZvaWQgKng4Nl9iaW9zX2NwdV9hcGljaWRfZWFybHlfcHRyOwotREVGSU5FX1BFUl9DUFUodTE2LCB4ODZfYmlvc19jcHVfYXBpY2lkKSA9IEJBRF9BUElDSUQ7Ci1FWFBPUlRfUEVSX0NQVV9TWU1CT0woeDg2X2Jpb3NfY3B1X2FwaWNpZCk7Ci0KLQotLyoKLSAqIEludGVsIE1QIEJJT1MgdGFibGUgcGFyc2luZyByb3V0aW5lczoKLSAqLwotCi0vKgotICogQ2hlY2tzdW0gYW4gTVAgY29uZmlndXJhdGlvbiBibG9jay4KLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBtcGZfY2hlY2tzdW0odW5zaWduZWQgY2hhciAqbXAsIGludCBsZW4pCi17Ci0JaW50IHN1bSA9IDA7Ci0KLQl3aGlsZSAobGVuLS0pCi0JCXN1bSArPSAqbXArKzsKLQotCXJldHVybiBzdW0gJiAweEZGOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgTVBfcHJvY2Vzc29yX2luZm8oc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptKQotewotCWludCBjcHU7Ci0JY3B1bWFza190IHRtcF9tYXA7Ci0JY2hhciAqYm9vdHVwX2NwdSA9ICIiOwotCi0JaWYgKCEobS0+bXBjX2NwdWZsYWcgJiBDUFVfRU5BQkxFRCkpIHsKLQkJZGlzYWJsZWRfY3B1cysrOwotCQlyZXR1cm47Ci0JfQotCWlmIChtLT5tcGNfY3B1ZmxhZyAmIENQVV9CT09UUFJPQ0VTU09SKSB7Ci0JCWJvb3R1cF9jcHUgPSAiIChCb290dXAtQ1BVKSI7Ci0JCWJvb3RfY3B1X2lkID0gbS0+bXBjX2FwaWNpZDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJQcm9jZXNzb3IgIyVkJXNcbiIsIG0tPm1wY19hcGljaWQsIGJvb3R1cF9jcHUpOwotCi0JaWYgKG51bV9wcm9jZXNzb3JzID49IE5SX0NQVVMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogTlJfQ1BVUyBsaW1pdCBvZiAlaSByZWFjaGVkLiIKLQkJCSIgUHJvY2Vzc29yIGlnbm9yZWQuXG4iLCBOUl9DUFVTKTsKLQkJcmV0dXJuOwotCX0KLQotCW51bV9wcm9jZXNzb3JzKys7Ci0JY3B1c19jb21wbGVtZW50KHRtcF9tYXAsIGNwdV9wcmVzZW50X21hcCk7Ci0JY3B1ID0gZmlyc3RfY3B1KHRtcF9tYXApOwotCi0JcGh5c2lkX3NldChtLT5tcGNfYXBpY2lkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0gCWlmIChtLT5tcGNfY3B1ZmxhZyAmIENQVV9CT09UUFJPQ0VTU09SKSB7Ci0gCQkvKgotCQkgKiB4ODZfYmlvc19jcHVfYXBpY2lkIGlzIHJlcXVpcmVkIHRvIGhhdmUgcHJvY2Vzc29ycyBsaXN0ZWQKLSAJCSAqIGluIHNhbWUgb3JkZXIgYXMgbG9naWNhbCBjcHUgbnVtYmVycy4gSGVuY2UgdGhlIGZpcnN0Ci0gCQkgKiBlbnRyeSBpcyBCU1AsIGFuZCBzbyBvbi4KLSAJCSAqLwotCQljcHUgPSAwOwotIAl9Ci0JLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KLQlpZiAoeDg2X2NwdV90b19hcGljaWRfZWFybHlfcHRyKSB7Ci0JCXUxNiAqY3B1X3RvX2FwaWNpZCA9IHg4Nl9jcHVfdG9fYXBpY2lkX2Vhcmx5X3B0cjsKLQkJdTE2ICpiaW9zX2NwdV9hcGljaWQgPSB4ODZfYmlvc19jcHVfYXBpY2lkX2Vhcmx5X3B0cjsKLQotCQljcHVfdG9fYXBpY2lkW2NwdV0gPSBtLT5tcGNfYXBpY2lkOwotCQliaW9zX2NwdV9hcGljaWRbY3B1XSA9IG0tPm1wY19hcGljaWQ7Ci0JfSBlbHNlIHsKLQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IG0tPm1wY19hcGljaWQ7Ci0JCXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IG0tPm1wY19hcGljaWQ7Ci0JfQotCi0JY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOwotCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgTVBfYnVzX2luZm8gKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSkKLXsKLQljaGFyIHN0cls3XTsKLQotCW1lbWNweShzdHIsIG0tPm1wY19idXN0eXBlLCA2KTsKLQlzdHJbNl0gPSAwOwotCURwcmludGsoIkJ1cyAjJWQgaXMgJXNcbiIsIG0tPm1wY19idXNpZCwgc3RyKTsKLQotCWlmIChzdHJuY21wKHN0ciwgIklTQSIsIDMpID09IDApIHsKLQkJc2V0X2JpdChtLT5tcGNfYnVzaWQsIG1wX2J1c19ub3RfcGNpKTsKLQl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAiUENJIiwgMykgPT0gMCkgewotCQljbGVhcl9iaXQobS0+bXBjX2J1c2lkLCBtcF9idXNfbm90X3BjaSk7Ci0JCW1wX2J1c19pZF90b19wY2lfYnVzW20tPm1wY19idXNpZF0gPSBtcF9jdXJyZW50X3BjaV9pZDsKLQkJbXBfY3VycmVudF9wY2lfaWQrKzsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIlVua25vd24gYnVzdHlwZSAlc1xuIiwgc3RyKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYmFkX2lvYXBpYyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JaWYgKG5yX2lvYXBpY3MgPj0gTUFYX0lPX0FQSUNTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IE1heCAjIG9mIEkvTyBBUElDcyAoJWQpIGV4Y2VlZGVkICIKLQkJCSIoZm91bmQgJWQpXG4iLCBNQVhfSU9fQVBJQ1MsIG5yX2lvYXBpY3MpOwotCQlwYW5pYygiUmVjb21waWxlIGtlcm5lbCB3aXRoIGJpZ2dlciBNQVhfSU9fQVBJQ1MhXG4iKTsKLQl9Ci0JaWYgKCFhZGRyZXNzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogQm9ndXMgKHplcm8pIEkvTyBBUElDIGFkZHJlc3MiCi0JCQkiIGZvdW5kIGluIHRhYmxlLCBza2lwcGluZyFcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBNUF9pb2FwaWNfaW5mbyAoc3RydWN0IG1wY19jb25maWdfaW9hcGljICptKQotewotCWlmICghKG0tPm1wY19mbGFncyAmIE1QQ19BUElDX1VTQUJMRSkpCi0JCXJldHVybjsKLQotCXByaW50aygiSS9PIEFQSUMgIyVkIGF0IDB4JVguXG4iLAotCQltLT5tcGNfYXBpY2lkLCBtLT5tcGNfYXBpY2FkZHIpOwotCi0JaWYgKGJhZF9pb2FwaWMobS0+bXBjX2FwaWNhZGRyKSkKLQkJcmV0dXJuOwotCi0JbXBfaW9hcGljc1tucl9pb2FwaWNzXSA9ICptOwotCW5yX2lvYXBpY3MrKzsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IE1QX2ludHNyY19pbmZvIChzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgKm0pCi17Ci0JbXBfaXJxcyBbbXBfaXJxX2VudHJpZXNdID0gKm07Ci0JRHByaW50aygiSW50OiB0eXBlICVkLCBwb2wgJWQsIHRyaWcgJWQsIGJ1cyAlZCwiCi0JCSIgSVJRICUwMngsIEFQSUMgSUQgJXgsIEFQSUMgSU5UICUwMnhcbiIsCi0JCQltLT5tcGNfaXJxdHlwZSwgbS0+bXBjX2lycWZsYWcgJiAzLAotCQkJKG0tPm1wY19pcnFmbGFnID4+IDIpICYgMywgbS0+bXBjX3NyY2J1cywKLQkJCW0tPm1wY19zcmNidXNpcnEsIG0tPm1wY19kc3RhcGljLCBtLT5tcGNfZHN0aXJxKTsKLQlpZiAoKyttcF9pcnFfZW50cmllcyA+PSBNQVhfSVJRX1NPVVJDRVMpCi0JCXBhbmljKCJNYXggIyBvZiBpcnEgc291cmNlcyBleGNlZWRlZCEhXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IE1QX2xpbnRzcmNfaW5mbyAoc3RydWN0IG1wY19jb25maWdfbGludHNyYyAqbSkKLXsKLQlEcHJpbnRrKCJMaW50OiB0eXBlICVkLCBwb2wgJWQsIHRyaWcgJWQsIGJ1cyAlZCwiCi0JCSIgSVJRICUwMngsIEFQSUMgSUQgJXgsIEFQSUMgTElOVCAlMDJ4XG4iLAotCQkJbS0+bXBjX2lycXR5cGUsIG0tPm1wY19pcnFmbGFnICYgMywKLQkJCShtLT5tcGNfaXJxZmxhZyA+PiAyKSAmMywgbS0+bXBjX3NyY2J1c2lkLAotCQkJbS0+bXBjX3NyY2J1c2lycSwgbS0+bXBjX2Rlc3RhcGljLCBtLT5tcGNfZGVzdGFwaWNsaW50KTsKLX0KLQotLyoKLSAqIFJlYWQvcGFyc2UgdGhlIE1QQwotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IHNtcF9yZWFkX21wYyhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMpCi17Ci0JY2hhciBzdHJbMTZdOwotCWludCBjb3VudD1zaXplb2YoKm1wYyk7Ci0JdW5zaWduZWQgY2hhciAqbXB0PSgodW5zaWduZWQgY2hhciAqKW1wYykrY291bnQ7Ci0KLQlpZiAobWVtY21wKG1wYy0+bXBjX3NpZ25hdHVyZSxNUENfU0lHTkFUVVJFLDQpKSB7Ci0JCXByaW50aygiTVBUQUJMRTogYmFkIHNpZ25hdHVyZSBbJWMlYyVjJWNdIVxuIiwKLQkJCW1wYy0+bXBjX3NpZ25hdHVyZVswXSwKLQkJCW1wYy0+bXBjX3NpZ25hdHVyZVsxXSwKLQkJCW1wYy0+bXBjX3NpZ25hdHVyZVsyXSwKLQkJCW1wYy0+bXBjX3NpZ25hdHVyZVszXSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAobXBmX2NoZWNrc3VtKCh1bnNpZ25lZCBjaGFyICopbXBjLG1wYy0+bXBjX2xlbmd0aCkpIHsKLQkJcHJpbnRrKCJNUFRBQkxFOiBjaGVja3N1bSBlcnJvciFcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKG1wYy0+bXBjX3NwZWMhPTB4MDEgJiYgbXBjLT5tcGNfc3BlYyE9MHgwNCkgewotCQlwcmludGsoS0VSTl9FUlIgIk1QVEFCTEU6IGJhZCB0YWJsZSB2ZXJzaW9uICglZCkhIVxuIiwKLQkJCW1wYy0+bXBjX3NwZWMpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCFtcGMtPm1wY19sYXBpYykgewotCQlwcmludGsoS0VSTl9FUlIgIk1QVEFCTEU6IG51bGwgbG9jYWwgQVBJQyBhZGRyZXNzIVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQltZW1jcHkoc3RyLG1wYy0+bXBjX29lbSw4KTsKLQlzdHJbOF0gPSAwOwotCXByaW50ayhLRVJOX0lORk8gIk1QVEFCTEU6IE9FTSBJRDogJXMgIixzdHIpOwotCi0JbWVtY3B5KHN0cixtcGMtPm1wY19wcm9kdWN0aWQsMTIpOwotCXN0clsxMl0gPSAwOwotCXByaW50aygiTVBUQUJMRTogUHJvZHVjdCBJRDogJXMgIixzdHIpOwotCi0JcHJpbnRrKCJNUFRBQkxFOiBBUElDIGF0OiAweCVYXG4iLG1wYy0+bXBjX2xhcGljKTsKLQotCS8qIHNhdmUgdGhlIGxvY2FsIEFQSUMgYWRkcmVzcywgaXQgbWlnaHQgYmUgbm9uLWRlZmF1bHQgKi8KLQlpZiAoIWFjcGlfbGFwaWMpCi0JCW1wX2xhcGljX2FkZHIgPSBtcGMtPm1wY19sYXBpYzsKLQotCS8qCi0JICoJTm93IHByb2Nlc3MgdGhlIGNvbmZpZ3VyYXRpb24gYmxvY2tzLgotCSAqLwotCXdoaWxlIChjb3VudCA8IG1wYy0+bXBjX2xlbmd0aCkgewotCQlzd2l0Y2goKm1wdCkgewotCQkJY2FzZSBNUF9QUk9DRVNTT1I6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptPQotCQkJCQkoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICopbXB0OwotCQkJCWlmICghYWNwaV9sYXBpYykKLQkJCQkJTVBfcHJvY2Vzc29yX2luZm8obSk7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgTVBfQlVTOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbT0KLQkJCQkJKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqKW1wdDsKLQkJCQlNUF9idXNfaW5mbyhtKTsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBNUF9JT0FQSUM6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19jb25maWdfaW9hcGljICptPQotCQkJCQkoc3RydWN0IG1wY19jb25maWdfaW9hcGljICopbXB0OwotCQkJCU1QX2lvYXBpY19pbmZvKG0pOwotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIE1QX0lOVFNSQzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgKm09Ci0JCQkJCShzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgKiltcHQ7Ci0KLQkJCQlNUF9pbnRzcmNfaW5mbyhtKTsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBNUF9MSU5UU1JDOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY29uZmlnX2xpbnRzcmMgKm09Ci0JCQkJCShzdHJ1Y3QgbXBjX2NvbmZpZ19saW50c3JjICopbXB0OwotCQkJCU1QX2xpbnRzcmNfaW5mbyhtKTsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXNldHVwX2FwaWNfcm91dGluZygpOwotCWlmICghbnVtX3Byb2Nlc3NvcnMpCi0JCXByaW50ayhLRVJOX0VSUiAiTVBUQUJMRTogbm8gcHJvY2Vzc29ycyByZWdpc3RlcmVkIVxuIik7Ci0JcmV0dXJuIG51bV9wcm9jZXNzb3JzOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBFTENSX3RyaWdnZXIodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBpbnQgcG9ydDsKLQotCXBvcnQgPSAweDRkMCArIChpcnEgPj4gMyk7Ci0JcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjb25zdHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKGludCBtcGNfZGVmYXVsdF90eXBlKQotewotCXN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBpbnRzcmM7Ci0JaW50IGk7Ci0JaW50IEVMQ1JfZmFsbGJhY2sgPSAwOwotCi0JaW50c3JjLm1wY190eXBlID0gTVBfSU5UU1JDOwotCWludHNyYy5tcGNfaXJxZmxhZyA9IDA7CQkJLyogY29uZm9ybWluZyAqLwotCWludHNyYy5tcGNfc3JjYnVzID0gMDsKLQlpbnRzcmMubXBjX2RzdGFwaWMgPSBtcF9pb2FwaWNzWzBdLm1wY19hcGljaWQ7Ci0KLQlpbnRzcmMubXBjX2lycXR5cGUgPSBtcF9JTlQ7Ci0KLQkvKgotCSAqICBJZiB0cnVlLCB3ZSBoYXZlIGFuIElTQS9QQ0kgc3lzdGVtIHdpdGggbm8gSVJRIGVudHJpZXMKLQkgKiAgaW4gdGhlIE1QIHRhYmxlLiBUbyBwcmV2ZW50IHRoZSBQQ0kgaW50ZXJydXB0cyBmcm9tIGJlaW5nIHNldCB1cAotCSAqICBpbmNvcnJlY3RseSwgd2UgdHJ5IHRvIHVzZSB0aGUgRUxDUi4gVGhlIHNhbml0eSBjaGVjayB0byBzZWUgaWYKLQkgKiAgdGhlcmUgaXMgZ29vZCBFTENSIGRhdGEgaXMgdmVyeSBzaW1wbGUgLSBJUlEwLCAxLCAyIGFuZCAxMyBjYW4KLQkgKiAgbmV2ZXIgYmUgbGV2ZWwgc2Vuc2l0aXZlLCBzbyB3ZSBzaW1wbHkgc2VlIGlmIHRoZSBFTENSIGFncmVlcy4KLQkgKiAgSWYgaXQgZG9lcywgd2UgYXNzdW1lIGl0J3MgdmFsaWQuCi0JICovCi0JaWYgKG1wY19kZWZhdWx0X3R5cGUgPT0gNSkgewotCQlwcmludGsoS0VSTl9JTkZPICJJU0EvUENJIGJ1cyB0eXBlIHdpdGggbm8gSVJRIGluZm9ybWF0aW9uLi4uIGZhbGxpbmcgYmFjayB0byBFTENSXG4iKTsKLQotCQlpZiAoRUxDUl90cmlnZ2VyKDApIHx8IEVMQ1JfdHJpZ2dlcigxKSB8fCBFTENSX3RyaWdnZXIoMikgfHwgRUxDUl90cmlnZ2VyKDEzKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiRUxDUiBjb250YWlucyBpbnZhbGlkIGRhdGEuLi4gbm90IHVzaW5nIEVMQ1JcbiIpOwotCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEVMQ1IgdG8gaWRlbnRpZnkgUENJIGludGVycnVwdHNcbiIpOwotCQkJRUxDUl9mYWxsYmFjayA9IDE7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlzd2l0Y2ggKG1wY19kZWZhdWx0X3R5cGUpIHsKLQkJY2FzZSAyOgotCQkJaWYgKGkgPT0gMCB8fCBpID09IDEzKQotCQkJCWNvbnRpbnVlOwkvKiBJUlEwICYgSVJRMTMgbm90IGNvbm5lY3RlZCAqLwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWRlZmF1bHQ6Ci0JCQlpZiAoaSA9PSAyKQotCQkJCWNvbnRpbnVlOwkvKiBJUlEyIGlzIG5ldmVyIGNvbm5lY3RlZCAqLwotCQl9Ci0KLQkJaWYgKEVMQ1JfZmFsbGJhY2spIHsKLQkJCS8qCi0JCQkgKiAgSWYgdGhlIEVMQ1IgaW5kaWNhdGVzIGEgbGV2ZWwtc2Vuc2l0aXZlIGludGVycnVwdCwgd2UKLQkJCSAqICBjb3B5IHRoYXQgaW5mb3JtYXRpb24gb3ZlciB0byB0aGUgTVAgdGFibGUgaW4gdGhlCi0JCQkgKiAgaXJxZmxhZyBmaWVsZCAobGV2ZWwgc2Vuc2l0aXZlLCBhY3RpdmUgaGlnaCBwb2xhcml0eSkuCi0JCQkgKi8KLQkJCWlmIChFTENSX3RyaWdnZXIoaSkpCi0JCQkJaW50c3JjLm1wY19pcnFmbGFnID0gMTM7Ci0JCQllbHNlCi0JCQkJaW50c3JjLm1wY19pcnFmbGFnID0gMDsKLQkJfQotCi0JCWludHNyYy5tcGNfc3JjYnVzaXJxID0gaTsKLQkJaW50c3JjLm1wY19kc3RpcnEgPSBpID8gaSA6IDI7CQkvKiBJUlEwIHRvIElOVElOMiAqLwotCQlNUF9pbnRzcmNfaW5mbygmaW50c3JjKTsKLQl9Ci0KLQlpbnRzcmMubXBjX2lycXR5cGUgPSBtcF9FeHRJTlQ7Ci0JaW50c3JjLm1wY19zcmNidXNpcnEgPSAwOwotCWludHNyYy5tcGNfZHN0aXJxID0gMDsJCQkJLyogODI1OUEgdG8gSU5USU4wICovCi0JTVBfaW50c3JjX2luZm8oJmludHNyYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY29uc3RydWN0X2RlZmF1bHRfSVNBX21wdGFibGUoaW50IG1wY19kZWZhdWx0X3R5cGUpCi17Ci0Jc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yIHByb2Nlc3NvcjsKLQlzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgYnVzOwotCXN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyBpb2FwaWM7Ci0Jc3RydWN0IG1wY19jb25maWdfbGludHNyYyBsaW50c3JjOwotCWludCBsaW50dHlwZXNbMl0gPSB7IG1wX0V4dElOVCwgbXBfTk1JIH07Ci0JaW50IGk7Ci0KLQkvKgotCSAqIGxvY2FsIEFQSUMgaGFzIGRlZmF1bHQgYWRkcmVzcwotCSAqLwotCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwotCi0JLyoKLQkgKiAyIENQVXMsIG51bWJlcmVkIDAgJiAxLgotCSAqLwotCXByb2Nlc3Nvci5tcGNfdHlwZSA9IE1QX1BST0NFU1NPUjsKLQlwcm9jZXNzb3IubXBjX2FwaWN2ZXIgPSAwOwotCXByb2Nlc3Nvci5tcGNfY3B1ZmxhZyA9IENQVV9FTkFCTEVEOwotCXByb2Nlc3Nvci5tcGNfY3B1ZmVhdHVyZSA9IDA7Ci0JcHJvY2Vzc29yLm1wY19mZWF0dXJlZmxhZyA9IDA7Ci0JcHJvY2Vzc29yLm1wY19yZXNlcnZlZFswXSA9IDA7Ci0JcHJvY2Vzc29yLm1wY19yZXNlcnZlZFsxXSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlwcm9jZXNzb3IubXBjX2FwaWNpZCA9IGk7Ci0JCU1QX3Byb2Nlc3Nvcl9pbmZvKCZwcm9jZXNzb3IpOwotCX0KLQotCWJ1cy5tcGNfdHlwZSA9IE1QX0JVUzsKLQlidXMubXBjX2J1c2lkID0gMDsKLQlzd2l0Y2ggKG1wY19kZWZhdWx0X3R5cGUpIHsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAiPz8/XG5Vbmtub3duIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gJWRcbiIsCi0JCQkJbXBjX2RlZmF1bHRfdHlwZSk7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSAxOgotCQljYXNlIDU6Ci0JCQltZW1jcHkoYnVzLm1wY19idXN0eXBlLCAiSVNBICAgIiwgNik7Ci0JCQlicmVhazsKLQl9Ci0JTVBfYnVzX2luZm8oJmJ1cyk7Ci0JaWYgKG1wY19kZWZhdWx0X3R5cGUgPiA0KSB7Ci0JCWJ1cy5tcGNfYnVzaWQgPSAxOwotCQltZW1jcHkoYnVzLm1wY19idXN0eXBlLCAiUENJICAgIiwgNik7Ci0JCU1QX2J1c19pbmZvKCZidXMpOwotCX0KLQotCWlvYXBpYy5tcGNfdHlwZSA9IE1QX0lPQVBJQzsKLQlpb2FwaWMubXBjX2FwaWNpZCA9IDI7Ci0JaW9hcGljLm1wY19hcGljdmVyID0gMDsKLQlpb2FwaWMubXBjX2ZsYWdzID0gTVBDX0FQSUNfVVNBQkxFOwotCWlvYXBpYy5tcGNfYXBpY2FkZHIgPSAweEZFQzAwMDAwOwotCU1QX2lvYXBpY19pbmZvKCZpb2FwaWMpOwotCi0JLyoKLQkgKiBXZSBzZXQgdXAgbW9zdCBvZiB0aGUgbG93IDE2IElPLUFQSUMgcGlucyBhY2NvcmRpbmcgdG8gTVBTIHJ1bGVzLgotCSAqLwotCWNvbnN0cnVjdF9kZWZhdWx0X2lvaXJxX21wdGFibGUobXBjX2RlZmF1bHRfdHlwZSk7Ci0KLQlsaW50c3JjLm1wY190eXBlID0gTVBfTElOVFNSQzsKLQlsaW50c3JjLm1wY19pcnFmbGFnID0gMDsJCS8qIGNvbmZvcm1pbmcgKi8KLQlsaW50c3JjLm1wY19zcmNidXNpZCA9IDA7Ci0JbGludHNyYy5tcGNfc3JjYnVzaXJxID0gMDsKLQlsaW50c3JjLm1wY19kZXN0YXBpYyA9IE1QX0FQSUNfQUxMOwotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJbGludHNyYy5tcGNfaXJxdHlwZSA9IGxpbnR0eXBlc1tpXTsKLQkJbGludHNyYy5tcGNfZGVzdGFwaWNsaW50ID0gaTsKLQkJTVBfbGludHNyY19pbmZvKCZsaW50c3JjKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZl9mb3VuZDsKLQotLyoKLSAqIFNjYW4gdGhlIG1lbW9yeSBibG9ja3MgZm9yIGFuIFNNUCBjb25maWd1cmF0aW9uIGJsb2NrLgotICovCi12b2lkIF9faW5pdCBnZXRfc21wX2NvbmZpZyAodm9pZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZiA9IG1wZl9mb3VuZDsKLQotCS8qCi0gCSAqIEFDUEkgc3VwcG9ydHMgYm90aCBsb2dpY2FsIChlLmcuIEh5cGVyLVRocmVhZGluZykgYW5kIHBoeXNpY2FsIAotIAkgKiBwcm9jZXNzb3JzLCB3aGVyZSBNUFMgb25seSBzdXBwb3J0cyBwaHlzaWNhbC4KLSAJICovCi0gCWlmIChhY3BpX2xhcGljICYmIGFjcGlfaW9hcGljKSB7Ci0gCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBBQ1BJIChNQURUKSBmb3IgU01QIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiIpOwotIAkJcmV0dXJuOwotCX0KLSAJZWxzZSBpZiAoYWNwaV9sYXBpYykKLSAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEFDUEkgZm9yIHByb2Nlc3NvciAoTEFQSUMpIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiIpOwotCi0JcHJpbnRrKCJJbnRlbCBNdWx0aVByb2Nlc3NvciBTcGVjaWZpY2F0aW9uIHYxLiVkXG4iLCBtcGYtPm1wZl9zcGVjaWZpY2F0aW9uKTsKLQotCS8qCi0JICogTm93IHNlZSBpZiB3ZSBuZWVkIHRvIHJlYWQgZnVydGhlci4KLQkgKi8KLQlpZiAobXBmLT5tcGZfZmVhdHVyZTEgIT0gMCkgewotCi0JCXByaW50ayhLRVJOX0lORk8gIkRlZmF1bHQgTVAgY29uZmlndXJhdGlvbiAjJWRcbiIsIG1wZi0+bXBmX2ZlYXR1cmUxKTsKLQkJY29uc3RydWN0X2RlZmF1bHRfSVNBX21wdGFibGUobXBmLT5tcGZfZmVhdHVyZTEpOwotCi0JfSBlbHNlIGlmIChtcGYtPm1wZl9waHlzcHRyKSB7Ci0KLQkJLyoKLQkJICogUmVhZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdGFibGUuICBBbnl0aGluZyBoZXJlIHdpbGwKLQkJICogb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLgotCQkgKi8KLQkJaWYgKCFzbXBfcmVhZF9tcGMocGh5c190b192aXJ0KG1wZi0+bXBmX3BoeXNwdHIpKSkgewotCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBNUCB0YWJsZSBlcnJvcnMgZGV0ZWN0ZWQhLi4uXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGRpc2FibGluZyBTTVAgc3VwcG9ydC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKgotCQkgKiBJZiB0aGVyZSBhcmUgbm8gZXhwbGljaXQgTVAgSVJRIGVudHJpZXMsIHRoZW4gd2UgYXJlCi0JCSAqIGJyb2tlbi4gIFdlIHNldCB1cCBtb3N0IG9mIHRoZSBsb3cgMTYgSU8tQVBJQyBwaW5zIHRvCi0JCSAqIElTQSBkZWZhdWx0cyBhbmQgaG9wZSBpdCB3aWxsIHdvcmsuCi0JCSAqLwotCQlpZiAoIW1wX2lycV9lbnRyaWVzKSB7Ci0JCQlzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgYnVzOwotCi0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBubyBleHBsaWNpdCBJUlEgZW50cmllcywgdXNpbmcgZGVmYXVsdCBtcHRhYmxlLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOwotCi0JCQlidXMubXBjX3R5cGUgPSBNUF9CVVM7Ci0JCQlidXMubXBjX2J1c2lkID0gMDsKLQkJCW1lbWNweShidXMubXBjX2J1c3R5cGUsICJJU0EgICAiLCA2KTsKLQkJCU1QX2J1c19pbmZvKCZidXMpOwotCi0JCQljb25zdHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKDApOwotCQl9Ci0KLQl9IGVsc2UKLQkJQlVHKCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJQcm9jZXNzb3JzOiAlZFxuIiwgbnVtX3Byb2Nlc3NvcnMpOwotCS8qCi0JICogT25seSB1c2UgdGhlIGZpcnN0IGNvbmZpZ3VyYXRpb24gZm91bmQuCi0JICovCi19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNtcF9zY2FuX2NvbmZpZyAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKLXsKLQlleHRlcm4gdm9pZCBfX2JhZF9tcGZfc2l6ZSh2b2lkKTsgCi0JdW5zaWduZWQgaW50ICpicCA9IHBoeXNfdG9fdmlydChiYXNlKTsKLQlzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKm1wZjsKLQotCURwcmludGsoIlNjYW4gU01QIGZyb20gJXAgZm9yICVsZCBieXRlcy5cbiIsIGJwLGxlbmd0aCk7Ci0JaWYgKHNpemVvZigqbXBmKSAhPSAxNikKLQkJX19iYWRfbXBmX3NpemUoKTsKLQotCXdoaWxlIChsZW5ndGggPiAwKSB7Ci0JCW1wZiA9IChzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcgKilicDsKLQkJaWYgKCgqYnAgPT0gU01QX01BR0lDX0lERU5UKSAmJgotCQkJKG1wZi0+bXBmX2xlbmd0aCA9PSAxKSAmJgotCQkJIW1wZl9jaGVja3N1bSgodW5zaWduZWQgY2hhciAqKWJwLCAxNikgJiYKLQkJCSgobXBmLT5tcGZfc3BlY2lmaWNhdGlvbiA9PSAxKQotCQkJCXx8IChtcGYtPm1wZl9zcGVjaWZpY2F0aW9uID09IDQpKSApIHsKLQotCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDE7Ci0JCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh2aXJ0X3RvX3BoeXMobXBmKSwgUEFHRV9TSVpFKTsKLQkJCWlmIChtcGYtPm1wZl9waHlzcHRyKQotCQkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+bXBmX3BoeXNwdHIsIFBBR0VfU0laRSk7Ci0JCQltcGZfZm91bmQgPSBtcGY7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlicCArPSA0OwotCQlsZW5ndGggLT0gMTY7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBmaW5kX3NtcF9jb25maWcodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgYWRkcmVzczsKLQotCS8qCi0JICogRklYTUU6IExpbnV4IGFzc3VtZXMgeW91IGhhdmUgNjQwSyBvZiBiYXNlIHJhbS4uCi0JICogdGhpcyBjb250aW51ZXMgdGhlIGVycm9yLi4uCi0JICoKLQkgKiAxKSBTY2FuIHRoZSBib3R0b20gMUsgZm9yIGEgc2lnbmF0dXJlCi0JICogMikgU2NhbiB0aGUgdG9wIDFLIG9mIGJhc2UgUkFNCi0JICogMykgU2NhbiB0aGUgNjRLIG9mIGJpb3MKLQkgKi8KLQlpZiAoc21wX3NjYW5fY29uZmlnKDB4MCwweDQwMCkgfHwKLQkJc21wX3NjYW5fY29uZmlnKDYzOSoweDQwMCwweDQwMCkgfHwKLQkJCXNtcF9zY2FuX2NvbmZpZygweEYwMDAwLDB4MTAwMDApKQotCQlyZXR1cm47Ci0JLyoKLQkgKiBJZiBpdCBpcyBhbiBTTVAgbWFjaGluZSB3ZSBzaG91bGQga25vdyBub3cuCi0JICoKLQkgKiB0aGVyZSBpcyBhIHJlYWwtbW9kZSBzZWdtZW50ZWQgcG9pbnRlciBwb2ludGluZyB0byB0aGUKLQkgKiA0SyBFQkRBIGFyZWEgYXQgMHg0MEUsIGNhbGN1bGF0ZSBhbmQgc2NhbiBpdCBoZXJlLgotCSAqCi0JICogTk9URSEgVGhlcmUgYXJlIExpbnV4IGxvYWRlcnMgdGhhdCB3aWxsIGNvcnJ1cHQgdGhlIEVCREEKLQkgKiBhcmVhLCBhbmQgYXMgc3VjaCB0aGlzIGtpbmQgb2YgU01QIGNvbmZpZyBtYXkgYmUgbGVzcwotCSAqIHRydXN0d29ydGh5LCBzaW1wbHkgYmVjYXVzZSB0aGUgU01QIHRhYmxlIG1heSBoYXZlIGJlZW4KLQkgKiBzdG9tcGVkIG9uIGR1cmluZyBlYXJseSBib290LiBUaGVzZSBsb2FkZXJzIGFyZSBidWdneSBhbmQKLQkgKiBzaG91bGQgYmUgZml4ZWQuCi0JICovCi0KLQlhZGRyZXNzID0gKih1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydCgweDQwRSk7Ci0JYWRkcmVzcyA8PD0gNDsKLQlpZiAoc21wX3NjYW5fY29uZmlnKGFkZHJlc3MsIDB4MTAwMCkpCi0JCXJldHVybjsKLQotCS8qIElmIHdlIGhhdmUgY29tZSB0aGlzIGZhciwgd2UgZGlkIG5vdCBmaW5kIGFuIE1QIHRhYmxlICAqLwotCSBwcmludGsoS0VSTl9JTkZPICJObyBtcHRhYmxlIGZvdW5kLlxuIik7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSS1iYXNlZCBNUCBDb25maWd1cmF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FDUEkKLQotdm9pZCBfX2luaXQgbXBfcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1NjQgYWRkcmVzcykKLXsKLQltcF9sYXBpY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJlc3M7Ci0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIG1wX2xhcGljX2FkZHIpOwotCWlmIChib290X2NwdV9pZCA9PSAtMVUpCi0JCWJvb3RfY3B1X2lkID0gR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgbXBfcmVnaXN0ZXJfbGFwaWMgKHU4IGlkLCB1OCBlbmFibGVkKQotewotCXN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciBwcm9jZXNzb3I7Ci0JaW50CQkJYm9vdF9jcHUgPSAwOwotCQotCWlmIChpZCA9PSBib290X2NwdV9pZCkKLQkJYm9vdF9jcHUgPSAxOwotCi0JcHJvY2Vzc29yLm1wY190eXBlID0gTVBfUFJPQ0VTU09SOwotCXByb2Nlc3Nvci5tcGNfYXBpY2lkID0gaWQ7Ci0JcHJvY2Vzc29yLm1wY19hcGljdmVyID0gMDsKLQlwcm9jZXNzb3IubXBjX2NwdWZsYWcgPSAoZW5hYmxlZCA/IENQVV9FTkFCTEVEIDogMCk7Ci0JcHJvY2Vzc29yLm1wY19jcHVmbGFnIHw9IChib290X2NwdSA/IENQVV9CT09UUFJPQ0VTU09SIDogMCk7Ci0JcHJvY2Vzc29yLm1wY19jcHVmZWF0dXJlID0gMDsKLQlwcm9jZXNzb3IubXBjX2ZlYXR1cmVmbGFnID0gMDsKLQlwcm9jZXNzb3IubXBjX3Jlc2VydmVkWzBdID0gMDsKLQlwcm9jZXNzb3IubXBjX3Jlc2VydmVkWzFdID0gMDsKLQotCU1QX3Byb2Nlc3Nvcl9pbmZvKCZwcm9jZXNzb3IpOwotfQotCi0jZGVmaW5lIE1QX0lTQV9CVVMJCTAKLSNkZWZpbmUgTVBfTUFYX0lPQVBJQ19QSU4JMTI3Ci0KLXN0YXRpYyBzdHJ1Y3QgbXBfaW9hcGljX3JvdXRpbmcgewotCWludAkJCWFwaWNfaWQ7Ci0JaW50CQkJZ3NpX3N0YXJ0OwotCWludAkJCWdzaV9lbmQ7Ci0JdTMyCQkJcGluX3Byb2dyYW1tZWRbNF07Ci19IG1wX2lvYXBpY19yb3V0aW5nW01BWF9JT19BUElDU107Ci0KLXN0YXRpYyBpbnQgbXBfZmluZF9pb2FwaWMoaW50IGdzaSkKLXsKLQlpbnQgaSA9IDA7Ci0KLQkvKiBGaW5kIHRoZSBJT0FQSUMgdGhhdCBtYW5hZ2VzIHRoaXMgR1NJLiAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJaWYgKChnc2kgPj0gbXBfaW9hcGljX3JvdXRpbmdbaV0uZ3NpX3N0YXJ0KQotCQkJJiYgKGdzaSA8PSBtcF9pb2FwaWNfcm91dGluZ1tpXS5nc2lfZW5kKSkKLQkJCXJldHVybiBpOwotCX0KLQotCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IFVuYWJsZSB0byBsb2NhdGUgSU9BUElDIGZvciBHU0kgJWRcbiIsIGdzaSk7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgdTggdW5pcV9pb2FwaWNfaWQodTggaWQpCi17Ci0JaW50IGk7Ci0JREVDTEFSRV9CSVRNQVAodXNlZCwgMjU2KTsKLQliaXRtYXBfemVybyh1c2VkLCAyNTYpOwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJc3RydWN0IG1wY19jb25maWdfaW9hcGljICppYSA9ICZtcF9pb2FwaWNzW2ldOwotCQlfX3NldF9iaXQoaWEtPm1wY19hcGljaWQsIHVzZWQpOwotCX0KLQlpZiAoIXRlc3RfYml0KGlkLCB1c2VkKSkKLQkJcmV0dXJuIGlkOwotCXJldHVybiBmaW5kX2ZpcnN0X3plcm9fYml0KHVzZWQsIDI1Nik7Ci19Ci0KLXZvaWQgX19pbml0IG1wX3JlZ2lzdGVyX2lvYXBpYyh1OCBpZCwgdTMyIGFkZHJlc3MsIHUzMiBnc2lfYmFzZSkKLXsKLQlpbnQgaWR4ID0gMDsKLQotCWlmIChiYWRfaW9hcGljKGFkZHJlc3MpKQotCQlyZXR1cm47Ci0KLQlpZHggPSBucl9pb2FwaWNzOwotCi0JbXBfaW9hcGljc1tpZHhdLm1wY190eXBlID0gTVBfSU9BUElDOwotCW1wX2lvYXBpY3NbaWR4XS5tcGNfZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7Ci0JbXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciA9IGFkZHJlc3M7Ci0KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4LCBhZGRyZXNzKTsKLQltcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWNpZCA9IHVuaXFfaW9hcGljX2lkKGlkKTsKLQltcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWN2ZXIgPSAwOwotCQotCS8qIAotCSAqIEJ1aWxkIGJhc2ljIElSUSBsb29rdXAgdGFibGUgdG8gZmFjaWxpdGF0ZSBnc2ktPmlvX2FwaWMgbG9va3VwcwotCSAqIGFuZCB0byBwcmV2ZW50IHJlcHJvZ3JhbW1pbmcgb2YgSU9BUElDIHBpbnMgKFBDSSBJUlFzKS4KLQkgKi8KLQltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmFwaWNfaWQgPSBtcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWNpZDsKLQltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9zdGFydCA9IGdzaV9iYXNlOwotCW1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2VuZCA9IGdzaV9iYXNlICsgCi0JCWlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KTsKLQotCXByaW50ayhLRVJOX0lORk8gIklPQVBJQ1slZF06IGFwaWNfaWQgJWQsIGFkZHJlc3MgMHgleCwgIgotCQkiR1NJICVkLSVkXG4iLCBpZHgsIG1wX2lvYXBpY3NbaWR4XS5tcGNfYXBpY2lkLCAKLQkJbXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciwKLQkJbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfc3RhcnQsCi0JCW1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2VuZCk7Ci0KLQlucl9pb2FwaWNzKys7Ci19Ci0KLXZvaWQgX19pbml0Ci1tcF9vdmVycmlkZV9sZWdhY3lfaXJxKHU4IGJ1c19pcnEsIHU4IHBvbGFyaXR5LCB1OCB0cmlnZ2VyLCB1MzIJZ3NpKQotewotCXN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBpbnRzcmM7Ci0JaW50CQkJaW9hcGljID0gLTE7Ci0JaW50CQkJcGluID0gLTE7Ci0KLQkvKiAKLQkgKiBDb252ZXJ0ICdnc2knIHRvICdpb2FwaWMucGluJy4KLQkgKi8KLQlpb2FwaWMgPSBtcF9maW5kX2lvYXBpYyhnc2kpOwotCWlmIChpb2FwaWMgPCAwKQotCQlyZXR1cm47Ci0JcGluID0gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfc3RhcnQ7Ci0KLQkvKgotCSAqIFRCRDogVGhpcyBjaGVjayBpcyBmb3IgZmF1bHR5IHRpbWVyIGVudHJpZXMsIHdoZXJlIHRoZSBvdmVycmlkZQotCSAqICAgICAgZXJyb25lb3VzbHkgc2V0cyB0aGUgdHJpZ2dlciB0byBsZXZlbCwgcmVzdWx0aW5nIGluIGEgSFVHRSAKLQkgKiAgICAgIGluY3JlYXNlIG9mIHRpbWVyIGludGVycnVwdHMhCi0JICovCi0JaWYgKChidXNfaXJxID09IDApICYmICh0cmlnZ2VyID09IDMpKQotCQl0cmlnZ2VyID0gMTsKLQotCWludHNyYy5tcGNfdHlwZSA9IE1QX0lOVFNSQzsKLQlpbnRzcmMubXBjX2lycXR5cGUgPSBtcF9JTlQ7Ci0JaW50c3JjLm1wY19pcnFmbGFnID0gKHRyaWdnZXIgPDwgMikgfCBwb2xhcml0eTsKLQlpbnRzcmMubXBjX3NyY2J1cyA9IE1QX0lTQV9CVVM7Ci0JaW50c3JjLm1wY19zcmNidXNpcnEgPSBidXNfaXJxOwkJCQkgICAgICAgLyogSVJRICovCi0JaW50c3JjLm1wY19kc3RhcGljID0gbXBfaW9hcGljc1tpb2FwaWNdLm1wY19hcGljaWQ7CSAgIC8qIEFQSUMgSUQgKi8KLQlpbnRzcmMubXBjX2RzdGlycSA9IHBpbjsJCQkJICAgIC8qIElOVElOIyAqLwotCi0JRHByaW50aygiSW50OiB0eXBlICVkLCBwb2wgJWQsIHRyaWcgJWQsIGJ1cyAlZCwgaXJxICVkLCAlZC0lZFxuIiwgCi0JCWludHNyYy5tcGNfaXJxdHlwZSwgaW50c3JjLm1wY19pcnFmbGFnICYgMywgCi0JCShpbnRzcmMubXBjX2lycWZsYWcgPj4gMikgJiAzLCBpbnRzcmMubXBjX3NyY2J1cywgCi0JCWludHNyYy5tcGNfc3JjYnVzaXJxLCBpbnRzcmMubXBjX2RzdGFwaWMsIGludHNyYy5tcGNfZHN0aXJxKTsKLQotCW1wX2lycXNbbXBfaXJxX2VudHJpZXNdID0gaW50c3JjOwotCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKLQkJcGFuaWMoIk1heCAjIG9mIGlycSBzb3VyY2VzIGV4Y2VlZGVkIVxuIik7Ci19Ci0KLXZvaWQgX19pbml0IG1wX2NvbmZpZ19hY3BpX2xlZ2FjeV9pcnFzKHZvaWQpCi17Ci0Jc3RydWN0IG1wY19jb25maWdfaW50c3JjIGludHNyYzsKLQlpbnQgaSA9IDA7Ci0JaW50IGlvYXBpYyA9IC0xOwotCi0JLyogCi0JICogRmFicmljYXRlIHRoZSBsZWdhY3kgSVNBIGJ1cyAoYnVzICMzMSkuCi0JICovCi0Jc2V0X2JpdChNUF9JU0FfQlVTLCBtcF9idXNfbm90X3BjaSk7Ci0KLQkvKiAKLQkgKiBMb2NhdGUgdGhlIElPQVBJQyB0aGF0IG1hbmFnZXMgdGhlIElTQSBJUlFzICgwLTE1KS4gCi0JICovCi0JaW9hcGljID0gbXBfZmluZF9pb2FwaWMoMCk7Ci0JaWYgKGlvYXBpYyA8IDApCi0JCXJldHVybjsKLQotCWludHNyYy5tcGNfdHlwZSA9IE1QX0lOVFNSQzsKLQlpbnRzcmMubXBjX2lycWZsYWcgPSAwOwkJCQkJLyogQ29uZm9ybWluZyAqLwotCWludHNyYy5tcGNfc3JjYnVzID0gTVBfSVNBX0JVUzsKLQlpbnRzcmMubXBjX2RzdGFwaWMgPSBtcF9pb2FwaWNzW2lvYXBpY10ubXBjX2FwaWNpZDsKLQotCS8qIAotCSAqIFVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgSVJRcyAwLTE1LiAgVW5sZXNzCi0JICogb3ZlcnJpZGRlbiBieSAoTUFEVCkgaW50ZXJydXB0IHNvdXJjZSBvdmVycmlkZSBlbnRyaWVzLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWludCBpZHg7Ci0KLQkJZm9yIChpZHggPSAwOyBpZHggPCBtcF9pcnFfZW50cmllczsgaWR4KyspIHsKLQkJCXN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyAqaXJxID0gbXBfaXJxcyArIGlkeDsKLQotCQkJLyogRG8gd2UgYWxyZWFkeSBoYXZlIGEgbWFwcGluZyBmb3IgdGhpcyBJU0EgSVJRPyAqLwotCQkJaWYgKGlycS0+bXBjX3NyY2J1cyA9PSBNUF9JU0FfQlVTICYmIGlycS0+bXBjX3NyY2J1c2lycSA9PSBpKQotCQkJCWJyZWFrOwotCi0JCQkvKiBEbyB3ZSBhbHJlYWR5IGhhdmUgYSBtYXBwaW5nIGZvciB0aGlzIElPQVBJQyBwaW4gKi8KLQkJCWlmICgoaXJxLT5tcGNfZHN0YXBpYyA9PSBpbnRzcmMubXBjX2RzdGFwaWMpICYmCi0JCQkJKGlycS0+bXBjX2RzdGlycSA9PSBpKSkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpZHggIT0gbXBfaXJxX2VudHJpZXMpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJBQ1BJOiBJUlElZCB1c2VkIGJ5IG92ZXJyaWRlLlxuIiwgaSk7Ci0JCQljb250aW51ZTsJCQkvKiBJUlEgYWxyZWFkeSB1c2VkICovCi0JCX0KLQotCQlpbnRzcmMubXBjX2lycXR5cGUgPSBtcF9JTlQ7Ci0JCWludHNyYy5tcGNfc3JjYnVzaXJxID0gaTsJCSAgIC8qIElkZW50aXR5IG1hcHBlZCAqLwotCQlpbnRzcmMubXBjX2RzdGlycSA9IGk7Ci0KLQkJRHByaW50aygiSW50OiB0eXBlICVkLCBwb2wgJWQsIHRyaWcgJWQsIGJ1cyAlZCwgaXJxICVkLCAiCi0JCQkiJWQtJWRcbiIsIGludHNyYy5tcGNfaXJxdHlwZSwgaW50c3JjLm1wY19pcnFmbGFnICYgMywgCi0JCQkoaW50c3JjLm1wY19pcnFmbGFnID4+IDIpICYgMywgaW50c3JjLm1wY19zcmNidXMsIAotCQkJaW50c3JjLm1wY19zcmNidXNpcnEsIGludHNyYy5tcGNfZHN0YXBpYywgCi0JCQlpbnRzcmMubXBjX2RzdGlycSk7Ci0KLQkJbXBfaXJxc1ttcF9pcnFfZW50cmllc10gPSBpbnRzcmM7Ci0JCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKLQkJCXBhbmljKCJNYXggIyBvZiBpcnEgc291cmNlcyBleGNlZWRlZCFcbiIpOwotCX0KLX0KLQotaW50IG1wX3JlZ2lzdGVyX2dzaSh1MzIgZ3NpLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KQotewotCWludCBpb2FwaWMgPSAtMTsKLQlpbnQgaW9hcGljX3BpbiA9IDA7Ci0JaW50IGlkeCwgYml0ID0gMDsKLQotCWlmIChhY3BpX2lycV9tb2RlbCAhPSBBQ1BJX0lSUV9NT0RFTF9JT0FQSUMpCi0JCXJldHVybiBnc2k7Ci0KLQkvKiBEb24ndCBzZXQgdXAgdGhlIEFDUEkgU0NJIGJlY2F1c2UgaXQncyBhbHJlYWR5IHNldCB1cCAqLwotCWlmIChhY3BpX2dibF9GQURULnNjaV9pbnRlcnJ1cHQgPT0gZ3NpKQotCQlyZXR1cm4gZ3NpOwotCi0JaW9hcGljID0gbXBfZmluZF9pb2FwaWMoZ3NpKTsKLQlpZiAoaW9hcGljIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBJT0FQSUMgZm9yIEdTSSAldVxuIiwgZ3NpKTsKLQkJcmV0dXJuIGdzaTsKLQl9Ci0KLQlpb2FwaWNfcGluID0gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfc3RhcnQ7Ci0KLQkvKiAKLQkgKiBBdm9pZCBwaW4gcmVwcm9ncmFtbWluZy4gIFBSVHMgdHlwaWNhbGx5IGluY2x1ZGUgZW50cmllcyAgCi0JICogd2l0aCByZWR1bmRhbnQgcGluLT5nc2kgbWFwcGluZ3MgKGJ1dCB1bmlxdWUgUENJIGRldmljZXMpOwotCSAqIHdlIG9ubHkgcHJvZ3JhbSB0aGUgSU9BUElDIG9uIHRoZSBmaXJzdC4KLQkgKi8KLQliaXQgPSBpb2FwaWNfcGluICUgMzI7Ci0JaWR4ID0gKGlvYXBpY19waW4gPCAzMikgPyAwIDogKGlvYXBpY19waW4gLyAzMik7Ci0JaWYgKGlkeCA+IDMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHJlZmVyZW5jZSB0byBJT0FQSUMgcGluICIKLQkJCSIlZC0lZFxuIiwgbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5hcGljX2lkLCAKLQkJCWlvYXBpY19waW4pOwotCQlyZXR1cm4gZ3NpOwotCX0KLQlpZiAoKDE8PGJpdCkgJiBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLnBpbl9wcm9ncmFtbWVkW2lkeF0pIHsKLQkJRHByaW50ayhLRVJOX0RFQlVHICJQaW4gJWQtJWQgYWxyZWFkeSBwcm9ncmFtbWVkXG4iLAotCQkJbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5hcGljX2lkLCBpb2FwaWNfcGluKTsKLQkJcmV0dXJuIGdzaTsKLQl9Ci0KLQltcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLnBpbl9wcm9ncmFtbWVkW2lkeF0gfD0gKDE8PGJpdCk7Ci0KLQlpb19hcGljX3NldF9wY2lfcm91dGluZyhpb2FwaWMsIGlvYXBpY19waW4sIGdzaSwKLQkJdHJpZ2dlcmluZyA9PSBBQ1BJX0VER0VfU0VOU0lUSVZFID8gMCA6IDEsCi0JCXBvbGFyaXR5ID09IEFDUElfQUNUSVZFX0hJR0ggPyAwIDogMSk7Ci0JcmV0dXJuIGdzaTsKLX0KLSNlbmRpZiAvKkNPTkZJR19BQ1BJKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCBhZjUxZWE4Li4xZjNhYmUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC02NSw4ICs2NSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgbXNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmLAotCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQorc3RhdGljIHNzaXplX3QgbXNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1MzIgX191c2VyICp0bXAgPSAodTMyIF9fdXNlciAqKSBidWY7CiAJdTMyIGRhdGFbMl07CkBAIC0xNjIsMTIgKzE2MiwxMCBAQAogCQllcnIgPSBtc3JfZGV2aWNlX2NyZWF0ZShjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJY2FzZSBDUFVfREVBRDoKIAkJbXNyX2RldmljZV9kZXN0cm95KGNwdSk7CiAJCWJyZWFrOwotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKLQkJZGVzdHJveV9zdXNwZW5kZWRfZGV2aWNlKG1zcl9jbGFzcywgTUtERVYoTVNSX01BSk9SLCBjcHUpKTsKLQkJYnJlYWs7CiAJfQogCXJldHVybiBlcnIgPyBOT1RJRllfQkFEIDogTk9USUZZX09LOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL25taV8zMi5jIGIvYXJjaC94ODYva2VybmVsL25taV8zMi5jCmluZGV4IGVkZDQxMzYuLjExYjE0YmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ubWlfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbm1pXzMyLmMKQEAgLTIyLDkgKzIyLDExIEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KIAogI2luY2x1ZGUgIm1hY2hfdHJhcHMuaCIKIApAQCAtNDYsOSArNDgsNiBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc2hvcnQsIHdkX2VuYWJsZWQpOwogCi0vKiBsb2NhbCBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IHVua25vd25fbm1pX3BhbmljX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY3B1KTsKLQogc3RhdGljIGludCBlbmRmbGFnIF9faW5pdGRhdGEgPSAwOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNzAsNyArNjksNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKQoraW50IF9faW5pdCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgKnByZXZfbm1pX2NvdW50OwogCWludCBjcHU7CkBAIC04Myw3ICs4Miw3IEBACiAKIAlwcmV2X25taV9jb3VudCA9IGttYWxsb2MoTlJfQ1BVUyAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByZXZfbm1pX2NvdW50KQotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CiAKQEAgLTEyMCw3ICsxMTksNyBAQAogCWlmICghYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpKSB7CiAJCWtmcmVlKHByZXZfbm1pX2NvdW50KTsKIAkJYXRvbWljX3NldCgmbm1pX2FjdGl2ZSwgLTEpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCXByaW50aygiT0suXG4iKTsKIApAQCAtMTMxLDkgKzEzMCwxMSBAQAogCiAJa2ZyZWUocHJldl9ubWlfY291bnQpOwogCXJldHVybiAwOworZXJyb3I6CisJdGltZXJfYWNrID0gIWNwdV9oYXNfdHNjOworCisJcmV0dXJuIC0xOwogfQotLyogVGhpcyBuZWVkcyB0byBoYXBwZW4gbGF0ZXIgaW4gYm9vdCBzbyBjb3VudGVycyBhcmUgd29ya2luZyAqLwotbGF0ZV9pbml0Y2FsbChjaGVja19ubWlfd2F0Y2hkb2cpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ubWlfd2F0Y2hkb2coY2hhciAqc3RyKQogewpAQCAtMzIwLDcgKzMyMSw4IEBACiAKIGV4dGVybiB2b2lkIGRpZV9ubWkoc3RydWN0IHB0X3JlZ3MgKiwgY29uc3QgY2hhciAqbXNnKTsKIAotX19rcHJvYmVzIGludCBubWlfd2F0Y2hkb2dfdGljayhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHVuc2lnbmVkIHJlYXNvbikKK25vdHJhY2UgX19rcHJvYmVzIGludAorbm1pX3dhdGNoZG9nX3RpY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIHJlYXNvbikKIHsKIAogCS8qCkBAIC0zOTEsMTUgKzM5Myw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgZG9fbm1pX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICogcmVncywgaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JaWYgKHVua25vd25fbm1pX3BhbmljKQotCQlyZXR1cm4gdW5rbm93bl9ubWlfcGFuaWNfY2FsbGJhY2socmVncywgY3B1KTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCiBzdGF0aWMgaW50IHVua25vd25fbm1pX3BhbmljX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY3B1KQpAQCAtNDUzLDYgKzQ0NiwxNSBAQAogCiAjZW5kaWYKIAoraW50IGRvX25taV9jYWxsYmFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNwdSkKK3sKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJaWYgKHVua25vd25fbm1pX3BhbmljKQorCQlyZXR1cm4gdW5rbm93bl9ubWlfcGFuaWNfY2FsbGJhY2socmVncywgY3B1KTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiB2b2lkIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL25taV82NC5jIGIvYXJjaC94ODYva2VybmVsL25taV82NC5jCmluZGV4IGZiOTk0ODQuLjVhMjlkZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ubWlfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbm1pXzY0LmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CiAKKyNpbmNsdWRlIDxtYWNoX3RyYXBzLmg+CisKIGludCB1bmtub3duX25taV9wYW5pYzsKIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKIGludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7CkBAIC00Niw5ICs0OCw2IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzaG9ydCwgd2RfZW5hYmxlZCk7CiAKLS8qIGxvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgdW5rbm93bl9ubWlfcGFuaWNfY2FsbGJhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpOwotCiAvKiBSdW4gYWZ0ZXIgY29tbWFuZCBsaW5lIGFuZCBjcHVfaW5pdCBpbml0LCBidXQgYmVmb3JlIGFsbCBvdGhlciBjaGVja3MgKi8KIHZvaWQgbm1pX3dhdGNoZG9nX2RlZmF1bHQodm9pZCkKIHsKQEAgLTMxNCw3ICszMTMsOCBAQAogfQogRVhQT1JUX1NZTUJPTCh0b3VjaF9ubWlfd2F0Y2hkb2cpOwogCi1pbnQgX19rcHJvYmVzIG5taV93YXRjaGRvZ190aWNrKHN0cnVjdCBwdF9yZWdzICogcmVncywgdW5zaWduZWQgcmVhc29uKQorbm90cmFjZSBfX2twcm9iZXMgaW50CitubWlfd2F0Y2hkb2dfdGljayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgcmVhc29uKQogewogCWludCBzdW07CiAJaW50IHRvdWNoZWQgPSAwOwpAQCAtMzg1LDcgKzM4NSw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpZ25vcmVfbm1pczsKIAotYXNtbGlua2FnZSBfX2twcm9iZXMgdm9pZCBkb19ubWkoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpCithc21saW5rYWdlIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQKK2RvX25taShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewogCW5taV9lbnRlcigpOwogCWFkZF9wZGEoX19ubWlfY291bnQsMSk7CkBAIC0zOTQsMTUgKzM5NSw2IEBACiAJbm1pX2V4aXQoKTsKIH0KIAotaW50IGRvX25taV9jYWxsYmFjayhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotCWlmICh1bmtub3duX25taV9wYW5pYykKLQkJcmV0dXJuIHVua25vd25fbm1pX3BhbmljX2NhbGxiYWNrKHJlZ3MsIGNwdSk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBzdG9wX25taSh2b2lkKQogewogCWFjcGlfbm1pX2Rpc2FibGUoKTsKQEAgLTQ2NCw2ICs0NTYsMTUgQEAKIAogI2VuZGlmCiAKK2ludCBkb19ubWlfY2FsbGJhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCWlmICh1bmtub3duX25taV9wYW5pYykKKwkJcmV0dXJuIHVua25vd25fbm1pX3BhbmljX2NhbGxiYWNrKHJlZ3MsIGNwdSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBfX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggMDc1OTYyYy4uMzczMzQxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTIwNiwxMyArMjA2LDYgQEAKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9CVVNZLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXNlcnZlX2lvbWVtID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCA9IC0xLAotCS5uYW1lID0gInBhcmF2aXJ0LWlvbWVtIiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWSwKLX07Ci0KIC8qCiAgKiBSZXNlcnZlIHRoZSB3aG9sZSBsZWdhY3kgSU8gc3BhY2UgdG8gcHJldmVudCBhbnkgbGVnYWN5IGRyaXZlcnMKICAqIGZyb20gd2FzdGluZyB0aW1lIHByb2JpbmcgZm9yIHRoZWlyIGhhcmR3YXJlLiAgVGhpcyBpcyBhIGZhaXJseQpAQCAtMjIyLDE2ICsyMTUsNyBAQAogICovCiBpbnQgcGFyYXZpcnRfZGlzYWJsZV9pb3NwYWNlKHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc2VydmVfaW9wb3J0cyk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcmVzZXJ2ZV9pb21lbSk7Ci0JCWlmIChyZXQpCi0JCQlyZWxlYXNlX3Jlc291cmNlKCZyZXNlcnZlX2lvcG9ydHMpOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc2VydmVfaW9wb3J0cyk7CiB9CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShlbnVtIHBhcmF2aXJ0X2xhenlfbW9kZSwgcGFyYXZpcnRfbGF6eV9tb2RlKSA9IFBBUkFWSVJUX0xBWllfTk9ORTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKaW5kZXggMWI1NDY0Yy4uMmVkZWUyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKQEAgLTQ3MCwxMCArNDcwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBkbWFfYWRkcl90IGNhbGdhcnlfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLAorc3RhdGljIGRtYV9hZGRyX3QgY2FsZ2FyeV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIsCiAJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiB7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlID0gYmFkX2RtYV9hZGRyZXNzOworCXZvaWQgKnZhZGRyID0gcGh5c190b192aXJ0KHBhZGRyKTsKIAl1bnNpZ25lZCBsb25nIHVhZGRyOwogCXVuc2lnbmVkIGludCBucGFnZXM7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CkBAIC0xMjMyLDggKzEyMzMsNyBAQAogCiBlcnJvcjoKIAlkbyB7Ci0JCWRldiA9IHBjaV9nZXRfZGV2aWNlX3JldmVyc2UoUENJX1ZFTkRPUl9JRF9JQk0sCi0JCQkJCSAgICAgUENJX0FOWV9JRCwgZGV2KTsKKwkJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JQk0sIFBDSV9BTllfSUQsIGRldik7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCWlmICghaXNfY2FsX3BjaV9kZXYoZGV2LT5kZXZpY2UpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4YjExMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTAsMCArMSw1MjQgQEAKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vY2FsZ2FyeS5oPgorCitpbnQgZm9yYmlkX2RhYyBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChmb3JiaWRfZGFjKTsKKworY29uc3Qgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKK0VYUE9SVF9TWU1CT0woZG1hX29wcyk7CisKK2ludCBpb21tdV9zYWNfZm9yY2UgX19yZWFkX21vc3RseSA9IDA7CisKKyNpZmRlZiBDT05GSUdfSU9NTVVfREVCVUcKK2ludCBwYW5pY19vbl9vdmVyZmxvdyBfX3JlYWRfbW9zdGx5ID0gMTsKK2ludCBmb3JjZV9pb21tdSBfX3JlYWRfbW9zdGx5ID0gMTsKKyNlbHNlCitpbnQgcGFuaWNfb25fb3ZlcmZsb3cgX19yZWFkX21vc3RseSA9IDA7CitpbnQgZm9yY2VfaW9tbXUgX19yZWFkX21vc3RseSA9IDA7CisjZW5kaWYKKworaW50IGlvbW11X21lcmdlIF9fcmVhZF9tb3N0bHkgPSAwOworCitpbnQgbm9faW9tbXUgX19yZWFkX21vc3RseTsKKy8qIFNldCB0aGlzIHRvIDEgaWYgdGhlcmUgaXMgYSBIVyBJT01NVSBpbiB0aGUgc3lzdGVtICovCitpbnQgaW9tbXVfZGV0ZWN0ZWQgX19yZWFkX21vc3RseSA9IDA7CisKKy8qIFRoaXMgdGVsbHMgdGhlIEJJTyBibG9jayBsYXllciB0byBhc3N1bWUgbWVyZ2luZy4gRGVmYXVsdCB0byBvZmYKKyAgIGJlY2F1c2Ugd2UgY2Fubm90IGd1YXJhbnRlZSBtZXJnaW5nIGxhdGVyLiAqLworaW50IGlvbW11X2Jpb19tZXJnZSBfX3JlYWRfbW9zdGx5ID0gMDsKK0VYUE9SVF9TWU1CT0woaW9tbXVfYmlvX21lcmdlKTsKKworZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3MgX19yZWFkX21vc3RseSA9IDA7CitFWFBPUlRfU1lNQk9MKGJhZF9kbWFfYWRkcmVzcyk7CisKKy8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAobm9ybWFsbHkgSVNBKS4gQmV0dGVyIHdvdWxkCisgICBiZSBwcm9iYWJseSBhIHNtYWxsZXIgRE1BIG1hc2ssIGJ1dCB0aGlzIGlzIGJ1Zy10by1idWcgY29tcGF0aWJsZQorICAgdG8gb2xkZXIgaTM4Ni4gKi8KK3N0cnVjdCBkZXZpY2UgZmFsbGJhY2tfZGV2ID0geworCS5idXNfaWQgPSAiZmFsbGJhY2sgZGV2aWNlIiwKKwkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfMzJCSVRfTUFTSywKKwkuZG1hX21hc2sgPSAmZmFsbGJhY2tfZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorfTsKKworaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKworCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkbWFfc2V0X21hc2spOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIF9faW5pdGRhdGEgdm9pZCAqZG1hMzJfYm9vdG1lbV9wdHI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWEzMl9ib290bWVtX3NpemUgX19pbml0ZGF0YSA9ICgxMjhVTEw8PDIwKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfZG1hMzJfc2l6ZV9vcHQoY2hhciAqcCkKK3sKKwlpZiAoIXApCisJCXJldHVybiAtRUlOVkFMOworCWRtYTMyX2Jvb3RtZW1fc2l6ZSA9IG1lbXBhcnNlKHAsICZwKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJkbWEzMl9zaXplIiwgcGFyc2VfZG1hMzJfc2l6ZV9vcHQpOworCit2b2lkIF9faW5pdCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUsIGFsaWduOworCWlmIChlbmRfcGZuIDw9IE1BWF9ETUEzMl9QRk4pCisJCXJldHVybjsKKworCWFsaWduID0gNjRVTEw8PDIwOworCXNpemUgPSByb3VuZF91cChkbWEzMl9ib290bWVtX3NpemUsIGFsaWduKTsKKwlkbWEzMl9ib290bWVtX3B0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsIGFsaWduLAorCQkJCSBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmIChkbWEzMl9ib290bWVtX3B0cikKKwkJZG1hMzJfYm9vdG1lbV9zaXplID0gc2l6ZTsKKwllbHNlCisJCWRtYTMyX2Jvb3RtZW1fc2l6ZSA9IDA7Cit9CitzdGF0aWMgdm9pZCBfX2luaXQgZG1hMzJfZnJlZV9ib290bWVtKHZvaWQpCit7CisJaW50IG5vZGU7CisKKwlpZiAoZW5kX3BmbiA8PSBNQVhfRE1BMzJfUEZOKQorCQlyZXR1cm47CisKKwlpZiAoIWRtYTMyX2Jvb3RtZW1fcHRyKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKQorCQlmcmVlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZSksIF9fcGEoZG1hMzJfYm9vdG1lbV9wdHIpLAorCQkJCSAgZG1hMzJfYm9vdG1lbV9zaXplKTsKKworCWRtYTMyX2Jvb3RtZW1fcHRyID0gTlVMTDsKKwlkbWEzMl9ib290bWVtX3NpemUgPSAwOworfQorCit2b2lkIF9faW5pdCBwY2lfaW9tbXVfYWxsb2Modm9pZCkKK3sKKwkvKiBmcmVlIHRoZSByYW5nZSBzbyBpb21tdSBjb3VsZCBnZXQgc29tZSByYW5nZSBsZXNzIHRoYW4gNEcgKi8KKwlkbWEzMl9mcmVlX2Jvb3RtZW0oKTsKKwkvKgorCSAqIFRoZSBvcmRlciBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IGZvcgorCSAqIGZhbGwtYmFjay9mYWlsLW92ZXIgcmVhc29ucworCSAqLworI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCisJZ2FydF9pb21tdV9ob2xlX2luaXQoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NBTEdBUllfSU9NTVUKKwlkZXRlY3RfY2FsZ2FyeSgpOworI2VuZGlmCisKKwlkZXRlY3RfaW50ZWxfaW9tbXUoKTsKKworI2lmZGVmIENPTkZJR19TV0lPVExCCisJcGNpX3N3aW90bGJfaW5pdCgpOworI2VuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIFNlZSA8RG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dD4gZm9yIHRoZSBpb21tdSBrZXJuZWwgcGFyYW1ldGVyCisgKiBkb2N1bWVudGF0aW9uLgorICovCitzdGF0aWMgX19pbml0IGludCBpb21tdV9zZXR1cChjaGFyICpwKQoreworCWlvbW11X21lcmdlID0gMTsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoKnApIHsKKwkJaWYgKCFzdHJuY21wKHAsICJvZmYiLCAzKSkKKwkJCW5vX2lvbW11ID0gMTsKKwkJLyogZ2FydF9wYXJzZV9vcHRpb25zIGhhcyBtb3JlIGZvcmNlIHN1cHBvcnQgKi8KKwkJaWYgKCFzdHJuY21wKHAsICJmb3JjZSIsIDUpKQorCQkJZm9yY2VfaW9tbXUgPSAxOworCQlpZiAoIXN0cm5jbXAocCwgIm5vZm9yY2UiLCA3KSkgeworCQkJaW9tbXVfbWVyZ2UgPSAwOworCQkJZm9yY2VfaW9tbXUgPSAwOworCQl9CisKKwkJaWYgKCFzdHJuY21wKHAsICJiaW9tZXJnZSIsIDgpKSB7CisJCQlpb21tdV9iaW9fbWVyZ2UgPSA0MDk2OworCQkJaW9tbXVfbWVyZ2UgPSAxOworCQkJZm9yY2VfaW9tbXUgPSAxOworCQl9CisJCWlmICghc3RybmNtcChwLCAicGFuaWMiLCA1KSkKKwkJCXBhbmljX29uX292ZXJmbG93ID0gMTsKKwkJaWYgKCFzdHJuY21wKHAsICJub3BhbmljIiwgNykpCisJCQlwYW5pY19vbl9vdmVyZmxvdyA9IDA7CisJCWlmICghc3RybmNtcChwLCAibWVyZ2UiLCA1KSkgeworCQkJaW9tbXVfbWVyZ2UgPSAxOworCQkJZm9yY2VfaW9tbXUgPSAxOworCQl9CisJCWlmICghc3RybmNtcChwLCAibm9tZXJnZSIsIDcpKQorCQkJaW9tbXVfbWVyZ2UgPSAwOworCQlpZiAoIXN0cm5jbXAocCwgImZvcmNlc2FjIiwgOCkpCisJCQlpb21tdV9zYWNfZm9yY2UgPSAxOworCQlpZiAoIXN0cm5jbXAocCwgImFsbG93ZGFjIiwgOCkpCisJCQlmb3JiaWRfZGFjID0gMDsKKwkJaWYgKCFzdHJuY21wKHAsICJub2RhYyIsIDUpKQorCQkJZm9yYmlkX2RhYyA9IC0xOworCQlpZiAoIXN0cm5jbXAocCwgInVzZWRhYyIsIDYpKSB7CisJCQlmb3JiaWRfZGFjID0gLTE7CisJCQlyZXR1cm4gMTsKKwkJfQorI2lmZGVmIENPTkZJR19TV0lPVExCCisJCWlmICghc3RybmNtcChwLCAic29mdCIsIDQpKQorCQkJc3dpb3RsYiA9IDE7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCisJCWdhcnRfcGFyc2Vfb3B0aW9ucyhwKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NBTEdBUllfSU9NTVUKKwkJaWYgKCFzdHJuY21wKHAsICJjYWxnYXJ5IiwgNykpCisJCQl1c2VfY2FsZ2FyeSA9IDE7CisjZW5kaWYgLyogQ09ORklHX0NBTEdBUllfSU9NTVUgKi8KKworCQlwICs9IHN0cmNzcG4ocCwgIiwiKTsKKwkJaWYgKCpwID09ICcsJykKKwkJCSsrcDsKKwl9CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiaW9tbXUiLCBpb21tdV9zZXR1cCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKKwkJCQlkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXZvaWQgX19pb21lbSAqbWVtX2Jhc2UgPSBOVUxMOworCWludCBwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKKwlpbnQgYml0bWFwX3NpemUgPSBCSVRTX1RPX0xPTkdTKHBhZ2VzKSAqIHNpemVvZihsb25nKTsKKworCWlmICgoZmxhZ3MgJiAoRE1BX01FTU9SWV9NQVAgfCBETUFfTUVNT1JZX0lPKSkgPT0gMCkKKwkJZ290byBvdXQ7CisJaWYgKCFzaXplKQorCQlnb3RvIG91dDsKKwlpZiAoZGV2LT5kbWFfbWVtKQorCQlnb3RvIG91dDsKKworCS8qIEZJWE1FOiB0aGlzIHJvdXRpbmUganVzdCBpZ25vcmVzIERNQV9NRU1PUllfSU5DTFVERVNfQ0hJTERSRU4gKi8KKworCW1lbV9iYXNlID0gaW9yZW1hcChidXNfYWRkciwgc2l6ZSk7CisJaWYgKCFtZW1fYmFzZSkKKwkJZ290byBvdXQ7CisKKwlkZXYtPmRtYV9tZW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSksIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5kbWFfbWVtKQorCQlnb3RvIG91dDsKKwlkZXYtPmRtYV9tZW0tPmJpdG1hcCA9IGt6YWxsb2MoYml0bWFwX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5kbWFfbWVtLT5iaXRtYXApCisJCWdvdG8gZnJlZTFfb3V0OworCisJZGV2LT5kbWFfbWVtLT52aXJ0X2Jhc2UgPSBtZW1fYmFzZTsKKwlkZXYtPmRtYV9tZW0tPmRldmljZV9iYXNlID0gZGV2aWNlX2FkZHI7CisJZGV2LT5kbWFfbWVtLT5zaXplID0gcGFnZXM7CisJZGV2LT5kbWFfbWVtLT5mbGFncyA9IGZsYWdzOworCisJaWYgKGZsYWdzICYgRE1BX01FTU9SWV9NQVApCisJCXJldHVybiBETUFfTUVNT1JZX01BUDsKKworCXJldHVybiBETUFfTUVNT1JZX0lPOworCisgZnJlZTFfb3V0OgorCWtmcmVlKGRldi0+ZG1hX21lbSk7Cisgb3V0OgorCWlmIChtZW1fYmFzZSkKKwkJaW91bm1hcChtZW1fYmFzZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeSk7CisKK3ZvaWQgZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2LT5kbWFfbWVtOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKwlkZXYtPmRtYV9tZW0gPSBOVUxMOworCWlvdW5tYXAobWVtLT52aXJ0X2Jhc2UpOworCWtmcmVlKG1lbS0+Yml0bWFwKTsKKwlrZnJlZShtZW0pOworfQorRVhQT1JUX1NZTUJPTChkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkpOworCit2b2lkICpkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2LT5kbWFfbWVtOworCWludCBwb3MsIGVycjsKKwlpbnQgcGFnZXMgPSAoc2l6ZSArIChkZXZpY2VfYWRkciAmIH5QQUdFX01BU0spICsgUEFHRV9TSVpFIC0gMSk7CisKKwlwYWdlcyA+Pj0gUEFHRV9TSElGVDsKKworCWlmICghbWVtKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXBvcyA9IChkZXZpY2VfYWRkciAtIG1lbS0+ZGV2aWNlX2Jhc2UpID4+IFBBR0VfU0hJRlQ7CisJZXJyID0gYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihtZW0tPmJpdG1hcCwgcG9zLCBnZXRfb3JkZXIocGFnZXMpKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybiBFUlJfUFRSKGVycik7CisJcmV0dXJuIG1lbS0+dmlydF9iYXNlICsgKHBvcyA8PCBQQUdFX1NISUZUKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX21hcmtfZGVjbGFyZWRfbWVtb3J5X29jY3VwaWVkKTsKKworc3RhdGljIGludCBkbWFfYWxsb2NfZnJvbV9jb2hlcmVudF9tZW0oc3RydWN0IGRldmljZSAqZGV2LCBzc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIHZvaWQgKipyZXQpCit7CisJc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSA9IGRldiA/IGRldi0+ZG1hX21lbSA6IE5VTEw7CisJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCisJaWYgKG1lbSkgeworCQlpbnQgcGFnZSA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKG1lbS0+Yml0bWFwLCBtZW0tPnNpemUsCisJCQkJCQkgICAgIG9yZGVyKTsKKwkJaWYgKHBhZ2UgPj0gMCkgeworCQkJKmRtYV9oYW5kbGUgPSBtZW0tPmRldmljZV9iYXNlICsgKHBhZ2UgPDwgUEFHRV9TSElGVCk7CisJCQkqcmV0ID0gbWVtLT52aXJ0X2Jhc2UgKyAocGFnZSA8PCBQQUdFX1NISUZUKTsKKwkJCW1lbXNldCgqcmV0LCAwLCBzaXplKTsKKwkJfQorCQlpZiAobWVtLT5mbGFncyAmIERNQV9NRU1PUllfRVhDTFVTSVZFKQorCQkJKnJldCA9IE5VTEw7CisJfQorCXJldHVybiAobWVtICE9IE5VTEwpOworfQorCitzdGF0aWMgaW50IGRtYV9yZWxlYXNlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9yZGVyLCB2b2lkICp2YWRkcikKK3sKKwlzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2ID8gZGV2LT5kbWFfbWVtIDogTlVMTDsKKworCWlmIChtZW0gJiYgdmFkZHIgPj0gbWVtLT52aXJ0X2Jhc2UgJiYgdmFkZHIgPAorCQkgICAobWVtLT52aXJ0X2Jhc2UgKyAobWVtLT5zaXplIDw8IFBBR0VfU0hJRlQpKSkgeworCQlpbnQgcGFnZSA9ICh2YWRkciAtIG1lbS0+dmlydF9iYXNlKSA+PiBQQUdFX1NISUZUOworCisJCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihtZW0tPmJpdG1hcCwgcGFnZSwgb3JkZXIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBkbWFfYWxsb2NfZnJvbV9jb2hlcmVudF9tZW0oZGV2LCBzaXplLCBoYW5kbGUsIHJldCkgKDApCisjZGVmaW5lIGRtYV9yZWxlYXNlX2NvaGVyZW50KGRldiwgb3JkZXIsIHZhZGRyKSAoMCkKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKK2ludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisjaWZkZWYgQ09ORklHX1BDSQorCWlmIChtYXNrID4gMHhmZmZmZmZmZiAmJiBmb3JiaWRfZGFjID4gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IERpc2FsbG93aW5nIERBQyBmb3IgZGV2aWNlICVzXG4iLAorCQkJCSBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJaWYgKGRtYV9vcHMtPmRtYV9zdXBwb3J0ZWQpCisJCXJldHVybiBkbWFfb3BzLT5kbWFfc3VwcG9ydGVkKGRldiwgbWFzayk7CisKKwkvKiBDb3BpZWQgZnJvbSBpMzg2LiBEb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSwgYmVjYXVzZSBpdCB3aWxsCisJICAgb25seSB3b3JrIGZvciBwY2lfYWxsb2NfY29oZXJlbnQuCisJICAgVGhlIGNhbGxlciBqdXN0IGhhcyB0byB1c2UgR0ZQX0RNQSBpbiB0aGlzIGNhc2UuICovCisJaWYgKG1hc2sgPCBETUFfMjRCSVRfTUFTSykKKwkJcmV0dXJuIDA7CisKKwkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gdXNlIFNBQyB3aGVuIElPTU1VIGZvcmNlIGlzIG9uLiAgVGhpcworCSAgIGFsbG93cyB0aGUgZHJpdmVyIHRvIHVzZSBjaGVhcGVyIGFjY2Vzc2VzIGluIHNvbWUgY2FzZXMuCisKKwkgICBQcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IGlmIHdlIG92ZXJmbG93IHRoZSBJT01NVSBhcmVhIGFuZAorCSAgIHJldHVybiBEQUMgYXMgZmFsbGJhY2sgYWRkcmVzcyB0aGUgZGV2aWNlIG1heSBub3QgaGFuZGxlIGl0CisJICAgY29ycmVjdGx5LgorCisJICAgQXMgYSBzcGVjaWFsIGNhc2Ugc29tZSBjb250cm9sbGVycyBoYXZlIGEgMzliaXQgYWRkcmVzcworCSAgIG1vZGUgdGhhdCBpcyBhcyBlZmZpY2llbnQgYXMgMzJiaXQgKGFpYzc5eHgpLiBEb24ndCBmb3JjZQorCSAgIFNBQyBmb3IgdGhlc2UuICBBc3N1bWUgYWxsIG1hc2tzIDw9IDQwIGJpdHMgYXJlIG9mIHRoaXMKKwkgICB0eXBlLiBOb3JtYWxseSB0aGlzIGRvZXNuJ3QgbWFrZSBhbnkgZGlmZmVyZW5jZSwgYnV0IGdpdmVzCisJICAgbW9yZSBnZW50bGUgaGFuZGxpbmcgb2YgSU9NTVUgb3ZlcmZsb3cuICovCisJaWYgKGlvbW11X3NhY19mb3JjZSAmJiAobWFzayA+PSBETUFfNDBCSVRfTUFTSykpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZvcmNlIFNBQyB3aXRoIG1hc2sgJUx4XG4iLAorCQkJCSBkZXYtPmJ1c19pZCwgbWFzayk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChkbWFfc3VwcG9ydGVkKTsKKworLyogQWxsb2NhdGUgRE1BIG1lbW9yeSBvbiBub2RlIG5lYXIgZGV2aWNlICovCitub2lubGluZSBzdHJ1Y3QgcGFnZSAqCitkbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBnZnBfdCBnZnAsIHVuc2lnbmVkIG9yZGVyKQoreworCWludCBub2RlOworCisJbm9kZSA9IGRldl90b19ub2RlKGRldik7CisKKwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIG9yZGVyKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgYSBjb2hlcmVudCBtYXBwaW5nLgorICovCit2b2lkICoKK2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAorCQkgICBnZnBfdCBnZnApCit7CisJdm9pZCAqbWVtb3J5ID0gTlVMTDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nIGRtYV9tYXNrID0gMDsKKwlkbWFfYWRkcl90IGJ1czsKKworCS8qIGlnbm9yZSByZWdpb24gc3BlY2lmaWVycyAqLworCWdmcCAmPSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9ETUEzMik7CisKKwlpZiAoZG1hX2FsbG9jX2Zyb21fY29oZXJlbnRfbWVtKGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgJm1lbW9yeSkpCisJCXJldHVybiBtZW1vcnk7CisKKwlpZiAoIWRldikKKwkJZGV2ID0gJmZhbGxiYWNrX2RldjsKKwlkbWFfbWFzayA9IGRldi0+Y29oZXJlbnRfZG1hX21hc2s7CisJaWYgKGRtYV9tYXNrID09IDApCisJCWRtYV9tYXNrID0gRE1BXzMyQklUX01BU0s7CisKKwkvKiBEZXZpY2Ugbm90IERNQSBhYmxlICovCisJaWYgKGRldi0+ZG1hX21hc2sgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBEb24ndCBpbnZva2UgT09NIGtpbGxlciAqLworCWdmcCB8PSBfX0dGUF9OT1JFVFJZOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIFdoeSA8PT8gRXZlbiB3aGVuIHRoZSBtYXNrIGlzIHNtYWxsZXIgdGhhbiA0R0IgaXQgaXMgb2Z0ZW4KKwkgICBsYXJnZXIgdGhhbiAxNk1CIGFuZCBpbiB0aGlzIGNhc2Ugd2UgaGF2ZSBhIGNoYW5jZSBvZgorCSAgIGZpbmRpbmcgZml0dGluZyBtZW1vcnkgaW4gdGhlIG5leHQgaGlnaGVyIHpvbmUgZmlyc3QuIElmCisJICAgbm90IHJldHJ5IHdpdGggdHJ1ZSBHRlBfRE1BLiAtQUsgKi8KKwlpZiAoZG1hX21hc2sgPD0gRE1BXzMyQklUX01BU0spCisJCWdmcCB8PSBHRlBfRE1BMzI7CisjZW5kaWYKKworIGFnYWluOgorCXBhZ2UgPSBkbWFfYWxsb2NfcGFnZXMoZGV2LCBnZnAsIGdldF9vcmRlcihzaXplKSk7CisJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl7CisJCWludCBoaWdoLCBtbXU7CisJCWJ1cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKKwkJbWVtb3J5ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQloaWdoID0gKGJ1cyArIHNpemUpID49IGRtYV9tYXNrOworCQltbXUgPSBoaWdoOworCQlpZiAoZm9yY2VfaW9tbXUgJiYgIShnZnAgJiBHRlBfRE1BKSkKKwkJCW1tdSA9IDE7CisJCWVsc2UgaWYgKGhpZ2gpIHsKKwkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpbWVtb3J5LAorCQkJCSAgIGdldF9vcmRlcihzaXplKSk7CisKKwkJCS8qIERvbid0IHVzZSB0aGUgMTZNQiBaT05FX0RNQSB1bmxlc3MgYWJzb2x1dGVseQorCQkJICAgbmVlZGVkLiBJdCdzIGJldHRlciB0byB1c2UgcmVtYXBwaW5nIGZpcnN0LiAqLworCQkJaWYgKGRtYV9tYXNrIDwgRE1BXzMyQklUX01BU0sgJiYgIShnZnAgJiBHRlBfRE1BKSkgeworCQkJCWdmcCA9IChnZnAgJiB+R0ZQX0RNQTMyKSB8IEdGUF9ETUE7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKworCQkJLyogTGV0IGxvdyBsZXZlbCBtYWtlIGl0cyBvd24gem9uZSBkZWNpc2lvbnMgKi8KKwkJCWdmcCAmPSB+KEdGUF9ETUEzMnxHRlBfRE1BKTsKKworCQkJaWYgKGRtYV9vcHMtPmFsbG9jX2NvaGVyZW50KQorCQkJCXJldHVybiBkbWFfb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsCisJCQkJCQkJICAgZG1hX2hhbmRsZSwgZ2ZwKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJbWVtc2V0KG1lbW9yeSwgMCwgc2l6ZSk7CisJCWlmICghbW11KSB7CisJCQkqZG1hX2hhbmRsZSA9IGJ1czsKKwkJCXJldHVybiBtZW1vcnk7CisJCX0KKwl9CisKKwlpZiAoZG1hX29wcy0+YWxsb2NfY29oZXJlbnQpIHsKKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltZW1vcnksIGdldF9vcmRlcihzaXplKSk7CisJCWdmcCAmPSB+KEdGUF9ETUF8R0ZQX0RNQTMyKTsKKwkJcmV0dXJuIGRtYV9vcHMtPmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwKTsKKwl9CisKKwlpZiAoZG1hX29wcy0+bWFwX3NpbXBsZSkgeworCQkqZG1hX2hhbmRsZSA9IGRtYV9vcHMtPm1hcF9zaW1wbGUoZGV2LCB2aXJ0X3RvX3BoeXMobWVtb3J5KSwKKwkJCQkJICAgICAgc2l6ZSwKKwkJCQkJICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJaWYgKCpkbWFfaGFuZGxlICE9IGJhZF9kbWFfYWRkcmVzcykKKwkJCXJldHVybiBtZW1vcnk7CisJfQorCisJaWYgKHBhbmljX29uX292ZXJmbG93KQorCQlwYW5pYygiZG1hX2FsbG9jX2NvaGVyZW50OiBJT01NVSBvdmVyZmxvdyBieSAlbHUgYnl0ZXNcbiIsCisJCSAgICAgICh1bnNpZ25lZCBsb25nKXNpemUpOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpbWVtb3J5LCBnZXRfb3JkZXIoc2l6ZSkpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChkbWFfYWxsb2NfY29oZXJlbnQpOworCisvKgorICogVW5tYXAgY29oZXJlbnQgbWVtb3J5LgorICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGZpbmlzaGVkIGFjY2Vzc2luZyB0aGUgbWFwcGluZy4KKyAqLwordm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGJ1cykKK3sKKwlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwkvKiBmb3IgcG9ydGFiaWxpdHkgKi8KKwlpZiAoZG1hX3JlbGVhc2VfY29oZXJlbnQoZGV2LCBvcmRlciwgdmFkZHIpKQorCQlyZXR1cm47CisJaWYgKGRtYV9vcHMtPnVubWFwX3NpbmdsZSkKKwkJZG1hX29wcy0+dW5tYXBfc2luZ2xlKGRldiwgYnVzLCBzaXplLCAwKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBvcmRlcik7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9mcmVlX2NvaGVyZW50KTsKKworc3RhdGljIGludCBfX2luaXQgcGNpX2lvbW11X2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ0FMR0FSWV9JT01NVQorCWNhbGdhcnlfaW9tbXVfaW5pdCgpOworI2VuZGlmCisKKwlpbnRlbF9pb21tdV9pbml0KCk7CisKKyNpZmRlZiBDT05GSUdfR0FSVF9JT01NVQorCWdhcnRfaW9tbXVfaW5pdCgpOworI2VuZGlmCisKKwlub19pb21tdV9pbml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGNpX2lvbW11X3NodXRkb3duKHZvaWQpCit7CisJZ2FydF9pb21tdV9zaHV0ZG93bigpOworfQorLyogTXVzdCBleGVjdXRlIGFmdGVyIFBDSSBzdWJzeXN0ZW0gKi8KK2ZzX2luaXRjYWxsKHBjaV9pb21tdV9pbml0KTsKKworI2lmZGVmIENPTkZJR19QQ0kKKy8qIE1hbnkgVklBIGJyaWRnZXMgc2VlbSB0byBjb3JydXB0IGRhdGEgZm9yIERBQy4gRGlzYWJsZSBpdCBoZXJlICovCisKK3N0YXRpYyBfX2RldmluaXQgdm9pZCB2aWFfbm9fZGFjKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKChkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfUENJICYmIGZvcmJpZF9kYWMgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFZJQSBQQ0kgYnJpZGdlIGRldGVjdGVkLiIKKwkJCQkgIkRpc2FibGluZyBEQUMuXG4iKTsKKwkJZm9yYmlkX2RhYyA9IDE7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9BTllfSUQsIHZpYV9ub19kYWMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYV8zMi5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWFfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEzMzAzMi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYV8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCi0gKiBEeW5hbWljIERNQSBtYXBwaW5nIHN1cHBvcnQuCi0gKgotICogT24gaTM4NiB0aGVyZSBpcyBubyBoYXJkd2FyZSBkeW5hbWljIERNQSBhZGRyZXNzIHRyYW5zbGF0aW9uLAotICogc28gY29uc2lzdGVudCBhbGxvYy9mcmVlIGFyZSBtZXJlbHkgcGFnZSBhbGxvY2F0aW9uL2ZyZWVpbmcuCi0gKiBUaGUgcmVzdCBvZiB0aGUgZHluYW1pYyBETUEgbWFwcGluZyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQKLSAqIGluIGFzbS9wY2kuaC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1zdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSB7Ci0Jdm9pZAkJKnZpcnRfYmFzZTsKLQl1MzIJCWRldmljZV9iYXNlOwotCWludAkJc2l6ZTsKLQlpbnQJCWZsYWdzOwotCXVuc2lnbmVkIGxvbmcJKmJpdG1hcDsKLX07Ci0KLXZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKQotewotCXZvaWQgKnJldDsKLQlzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2ID8gZGV2LT5kbWFfbWVtIDogTlVMTDsKLQlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7Ci0JLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCi0JZ2ZwICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSk7Ci0KLQlpZiAobWVtKSB7Ci0JCWludCBwYWdlID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24obWVtLT5iaXRtYXAsIG1lbS0+c2l6ZSwKLQkJCQkJCSAgICAgb3JkZXIpOwotCQlpZiAocGFnZSA+PSAwKSB7Ci0JCQkqZG1hX2hhbmRsZSA9IG1lbS0+ZGV2aWNlX2Jhc2UgKyAocGFnZSA8PCBQQUdFX1NISUZUKTsKLQkJCXJldCA9IG1lbS0+dmlydF9iYXNlICsgKHBhZ2UgPDwgUEFHRV9TSElGVCk7Ci0JCQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJaWYgKG1lbS0+ZmxhZ3MgJiBETUFfTUVNT1JZX0VYQ0xVU0lWRSkKLQkJCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChkZXYgPT0gTlVMTCB8fCAoZGV2LT5jb2hlcmVudF9kbWFfbWFzayA8IDB4ZmZmZmZmZmYpKQotCQlnZnAgfD0gR0ZQX0RNQTsKLQotCXJldCA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhnZnAsIG9yZGVyKTsKLQotCWlmIChyZXQgIT0gTlVMTCkgewotCQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQkJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX3BoeXMocmV0KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woZG1hX2FsbG9jX2NvaGVyZW50KTsKLQotdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0Jc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbSA9IGRldiA/IGRldi0+ZG1hX21lbSA6IE5VTEw7Ci0JaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwotCi0JV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwkvKiBmb3IgcG9ydGFiaWxpdHkgKi8KLQlpZiAobWVtICYmIHZhZGRyID49IG1lbS0+dmlydF9iYXNlICYmIHZhZGRyIDwgKG1lbS0+dmlydF9iYXNlICsgKG1lbS0+c2l6ZSA8PCBQQUdFX1NISUZUKSkpIHsKLQkJaW50IHBhZ2UgPSAodmFkZHIgLSBtZW0tPnZpcnRfYmFzZSkgPj4gUEFHRV9TSElGVDsKLQotCQliaXRtYXBfcmVsZWFzZV9yZWdpb24obWVtLT5iaXRtYXAsIHBhZ2UsIG9yZGVyKTsKLQl9IGVsc2UKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgb3JkZXIpOwotfQotRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7Ci0KLWludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAotCQkJCWRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0Jdm9pZCBfX2lvbWVtICptZW1fYmFzZSA9IE5VTEw7Ci0JaW50IHBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwotCWludCBiaXRtYXBfc2l6ZSA9IEJJVFNfVE9fTE9OR1MocGFnZXMpICogc2l6ZW9mKGxvbmcpOwotCi0JaWYgKChmbGFncyAmIChETUFfTUVNT1JZX01BUCB8IERNQV9NRU1PUllfSU8pKSA9PSAwKQotCQlnb3RvIG91dDsKLQlpZiAoIXNpemUpCi0JCWdvdG8gb3V0OwotCWlmIChkZXYtPmRtYV9tZW0pCi0JCWdvdG8gb3V0OwotCi0JLyogRklYTUU6IHRoaXMgcm91dGluZSBqdXN0IGlnbm9yZXMgRE1BX01FTU9SWV9JTkNMVURFU19DSElMRFJFTiAqLwotCi0JbWVtX2Jhc2UgPSBpb3JlbWFwKGJ1c19hZGRyLCBzaXplKTsKLQlpZiAoIW1lbV9iYXNlKQotCQlnb3RvIG91dDsKLQotCWRldi0+ZG1hX21lbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWFfY29oZXJlbnRfbWVtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmRtYV9tZW0pCi0JCWdvdG8gb3V0OwotCWRldi0+ZG1hX21lbS0+Yml0bWFwID0ga3phbGxvYyhiaXRtYXBfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmRtYV9tZW0tPmJpdG1hcCkKLQkJZ290byBmcmVlMV9vdXQ7Ci0KLQlkZXYtPmRtYV9tZW0tPnZpcnRfYmFzZSA9IG1lbV9iYXNlOwotCWRldi0+ZG1hX21lbS0+ZGV2aWNlX2Jhc2UgPSBkZXZpY2VfYWRkcjsKLQlkZXYtPmRtYV9tZW0tPnNpemUgPSBwYWdlczsKLQlkZXYtPmRtYV9tZW0tPmZsYWdzID0gZmxhZ3M7Ci0KLQlpZiAoZmxhZ3MgJiBETUFfTUVNT1JZX01BUCkKLQkJcmV0dXJuIERNQV9NRU1PUllfTUFQOwotCi0JcmV0dXJuIERNQV9NRU1PUllfSU87Ci0KLSBmcmVlMV9vdXQ6Ci0Ja2ZyZWUoZGV2LT5kbWFfbWVtKTsKLSBvdXQ6Ci0JaWYgKG1lbV9iYXNlKQotCQlpb3VubWFwKG1lbV9iYXNlKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KTsKLQotdm9pZCBkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICptZW0gPSBkZXYtPmRtYV9tZW07Ci0JCi0JaWYoIW1lbSkKLQkJcmV0dXJuOwotCWRldi0+ZG1hX21lbSA9IE5VTEw7Ci0JaW91bm1hcChtZW0tPnZpcnRfYmFzZSk7Ci0Ja2ZyZWUobWVtLT5iaXRtYXApOwotCWtmcmVlKG1lbSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRtYV9yZWxlYXNlX2RlY2xhcmVkX21lbW9yeSk7Ci0KLXZvaWQgKmRtYV9tYXJrX2RlY2xhcmVkX21lbW9yeV9vY2N1cGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCWRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICptZW0gPSBkZXYtPmRtYV9tZW07Ci0JaW50IHBhZ2VzID0gKHNpemUgKyAoZGV2aWNlX2FkZHIgJiB+UEFHRV9NQVNLKSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JaW50IHBvcywgZXJyOwotCi0JaWYgKCFtZW0pCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCi0JcG9zID0gKGRldmljZV9hZGRyIC0gbWVtLT5kZXZpY2VfYmFzZSkgPj4gUEFHRV9TSElGVDsKLQllcnIgPSBiaXRtYXBfYWxsb2NhdGVfcmVnaW9uKG1lbS0+Yml0bWFwLCBwb3MsIGdldF9vcmRlcihwYWdlcykpOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQlyZXR1cm4gbWVtLT52aXJ0X2Jhc2UgKyAocG9zIDw8IFBBR0VfU0hJRlQpOwotfQotRVhQT1JUX1NZTUJPTChkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQpOwotCi0jaWZkZWYgQ09ORklHX1BDSQotLyogTWFueSBWSUEgYnJpZGdlcyBzZWVtIHRvIGNvcnJ1cHQgZGF0YSBmb3IgREFDLiBEaXNhYmxlIGl0IGhlcmUgKi8KLQotaW50IGZvcmJpZF9kYWM7Ci1FWFBPUlRfU1lNQk9MKGZvcmJpZF9kYWMpOwotCi1zdGF0aWMgX19kZXZpbml0IHZvaWQgdmlhX25vX2RhYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWlmICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAmJiBmb3JiaWRfZGFjID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBWSUEgUENJIGJyaWRnZSBkZXRlY3RlZC4gRGlzYWJsaW5nIERBQy5cbiIpOwotCQlmb3JiaWRfZGFjID0gMTsKLQl9Ci19Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0FOWV9JRCwgdmlhX25vX2RhYyk7Ci0KLXN0YXRpYyBpbnQgY2hlY2tfaW9tbXUoY2hhciAqcykKLXsKLQlpZiAoIXN0cmNtcChzLCAidXNlZGFjIikpIHsKLQkJZm9yYmlkX2RhYyA9IC0xOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1fX3NldHVwKCJpb21tdT0iLCBjaGVja19pb21tdSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYV82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODI0NzNkLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDkgKzAsMCBAQAotLyoKLSAqIER5bmFtaWMgRE1BIG1hcHBpbmcgc3VwcG9ydC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZ2FydC5oPgotI2luY2x1ZGUgPGFzbS9jYWxnYXJ5Lmg+Ci0KLWludCBpb21tdV9tZXJnZSBfX3JlYWRfbW9zdGx5ID0gMDsKLQotZG1hX2FkZHJfdCBiYWRfZG1hX2FkZHJlc3MgX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0woYmFkX2RtYV9hZGRyZXNzKTsKLQotLyogVGhpcyB0ZWxscyB0aGUgQklPIGJsb2NrIGxheWVyIHRvIGFzc3VtZSBtZXJnaW5nLiBEZWZhdWx0IHRvIG9mZgotICAgYmVjYXVzZSB3ZSBjYW5ub3QgZ3VhcmFudGVlIG1lcmdpbmcgbGF0ZXIuICovCi1pbnQgaW9tbXVfYmlvX21lcmdlIF9fcmVhZF9tb3N0bHkgPSAwOwotRVhQT1JUX1NZTUJPTChpb21tdV9iaW9fbWVyZ2UpOwotCi1zdGF0aWMgaW50IGlvbW11X3NhY19mb3JjZSBfX3JlYWRfbW9zdGx5ID0gMDsKLQotaW50IG5vX2lvbW11IF9fcmVhZF9tb3N0bHk7Ci0jaWZkZWYgQ09ORklHX0lPTU1VX0RFQlVHCi1pbnQgcGFuaWNfb25fb3ZlcmZsb3cgX19yZWFkX21vc3RseSA9IDE7Ci1pbnQgZm9yY2VfaW9tbXUgX19yZWFkX21vc3RseSA9IDE7Ci0jZWxzZQotaW50IHBhbmljX29uX292ZXJmbG93IF9fcmVhZF9tb3N0bHkgPSAwOwotaW50IGZvcmNlX2lvbW11IF9fcmVhZF9tb3N0bHk9IDA7Ci0jZW5kaWYKLQotLyogU2V0IHRoaXMgdG8gMSBpZiB0aGVyZSBpcyBhIEhXIElPTU1VIGluIHRoZSBzeXN0ZW0gKi8KLWludCBpb21tdV9kZXRlY3RlZCBfX3JlYWRfbW9zdGx5ID0gMDsKLQotLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiBCZXR0ZXIgd291bGQKLSAgIGJlIHByb2JhYmx5IGEgc21hbGxlciBETUEgbWFzaywgYnV0IHRoaXMgaXMgYnVnLXRvLWJ1ZyBjb21wYXRpYmxlCi0gICB0byBpMzg2LiAqLwotc3RydWN0IGRldmljZSBmYWxsYmFja19kZXYgPSB7Ci0JLmJ1c19pZCA9ICJmYWxsYmFjayBkZXZpY2UiLAotCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLLAotCS5kbWFfbWFzayA9ICZmYWxsYmFja19kZXYuY29oZXJlbnRfZG1hX21hc2ssCi19OwotCi0vKiBBbGxvY2F0ZSBETUEgbWVtb3J5IG9uIG5vZGUgbmVhciBkZXZpY2UgKi8KLW5vaW5saW5lIHN0YXRpYyB2b2lkICoKLWRtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGdmcF90IGdmcCwgdW5zaWduZWQgb3JkZXIpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IG5vZGU7Ci0KLQlub2RlID0gZGV2X3RvX25vZGUoZGV2KTsKLQlpZiAobm9kZSA9PSAtMSkKLQkJbm9kZSA9IG51bWFfbm9kZV9pZCgpOwotCi0JaWYgKG5vZGUgPCBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCkpCi0JCW5vZGUgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7Ci0KLQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIG9yZGVyKTsKLQlyZXR1cm4gcGFnZSA/IHBhZ2VfYWRkcmVzcyhwYWdlKSA6IE5VTEw7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGEgY29oZXJlbnQgbWFwcGluZy4KLSAqLwotdm9pZCAqCi1kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKLQkJICAgZ2ZwX3QgZ2ZwKQotewotCXZvaWQgKm1lbW9yeTsKLQl1bnNpZ25lZCBsb25nIGRtYV9tYXNrID0gMDsKLQl1NjQgYnVzOwotCi0JaWYgKCFkZXYpCi0JCWRldiA9ICZmYWxsYmFja19kZXY7Ci0JZG1hX21hc2sgPSBkZXYtPmNvaGVyZW50X2RtYV9tYXNrOwotCWlmIChkbWFfbWFzayA9PSAwKQotCQlkbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotCi0JLyogRGV2aWNlIG5vdCBETUEgYWJsZSAqLwotCWlmIChkZXYtPmRtYV9tYXNrID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JLyogRG9uJ3QgaW52b2tlIE9PTSBraWxsZXIgKi8KLQlnZnAgfD0gX19HRlBfTk9SRVRSWTsKLQotCS8qIEtsdWRnZSB0byBtYWtlIGl0IGJ1Zy10by1idWcgY29tcGF0aWJsZSB3aXRoIGkzODYuIGkzODYKLQkgICB1c2VzIHRoZSBub3JtYWwgZG1hX21hc2sgZm9yIGFsbG9jX2NvaGVyZW50LiAqLwotCWRtYV9tYXNrICY9ICpkZXYtPmRtYV9tYXNrOwotCi0JLyogV2h5IDw9PyBFdmVuIHdoZW4gdGhlIG1hc2sgaXMgc21hbGxlciB0aGFuIDRHQiBpdCBpcyBvZnRlbgotCSAgIGxhcmdlciB0aGFuIDE2TUIgYW5kIGluIHRoaXMgY2FzZSB3ZSBoYXZlIGEgY2hhbmNlIG9mCi0JICAgZmluZGluZyBmaXR0aW5nIG1lbW9yeSBpbiB0aGUgbmV4dCBoaWdoZXIgem9uZSBmaXJzdC4gSWYKLQkgICBub3QgcmV0cnkgd2l0aCB0cnVlIEdGUF9ETUEuIC1BSyAqLwotCWlmIChkbWFfbWFzayA8PSBETUFfMzJCSVRfTUFTSykKLQkJZ2ZwIHw9IEdGUF9ETUEzMjsKLQotIGFnYWluOgotCW1lbW9yeSA9IGRtYV9hbGxvY19wYWdlcyhkZXYsIGdmcCwgZ2V0X29yZGVyKHNpemUpKTsKLQlpZiAobWVtb3J5ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JewotCQlpbnQgaGlnaCwgbW11OwotCQlidXMgPSB2aXJ0X3RvX2J1cyhtZW1vcnkpOwotCSAgICAgICAgaGlnaCA9IChidXMgKyBzaXplKSA+PSBkbWFfbWFzazsKLQkJbW11ID0gaGlnaDsKLQkJaWYgKGZvcmNlX2lvbW11ICYmICEoZ2ZwICYgR0ZQX0RNQSkpCi0JCQltbXUgPSAxOwotCQllbHNlIGlmIChoaWdoKSB7Ci0JCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbW9yeSwKLQkJCQkgICBnZXRfb3JkZXIoc2l6ZSkpOwotCi0JCQkvKiBEb24ndCB1c2UgdGhlIDE2TUIgWk9ORV9ETUEgdW5sZXNzIGFic29sdXRlbHkKLQkJCSAgIG5lZWRlZC4gSXQncyBiZXR0ZXIgdG8gdXNlIHJlbWFwcGluZyBmaXJzdC4gKi8KLQkJCWlmIChkbWFfbWFzayA8IERNQV8zMkJJVF9NQVNLICYmICEoZ2ZwICYgR0ZQX0RNQSkpIHsKLQkJCQlnZnAgPSAoZ2ZwICYgfkdGUF9ETUEzMikgfCBHRlBfRE1BOwotCQkJCWdvdG8gYWdhaW47Ci0JCQl9Ci0KLQkJCS8qIExldCBsb3cgbGV2ZWwgbWFrZSBpdHMgb3duIHpvbmUgZGVjaXNpb25zICovCi0JCQlnZnAgJj0gfihHRlBfRE1BMzJ8R0ZQX0RNQSk7Ci0KLQkJCWlmIChkbWFfb3BzLT5hbGxvY19jb2hlcmVudCkKLQkJCQlyZXR1cm4gZG1hX29wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLAotCQkJCQkJCSAgIGRtYV9oYW5kbGUsIGdmcCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCW1lbXNldChtZW1vcnksIDAsIHNpemUpOwotCQlpZiAoIW1tdSkgewotCQkJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2J1cyhtZW1vcnkpOwotCQkJcmV0dXJuIG1lbW9yeTsKLQkJfQotCX0KLQotCWlmIChkbWFfb3BzLT5hbGxvY19jb2hlcmVudCkgewotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbW9yeSwgZ2V0X29yZGVyKHNpemUpKTsKLQkJZ2ZwICY9IH4oR0ZQX0RNQXxHRlBfRE1BMzIpOwotCQlyZXR1cm4gZG1hX29wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnApOwotCX0KLQotCWlmIChkbWFfb3BzLT5tYXBfc2ltcGxlKSB7Ci0JCSpkbWFfaGFuZGxlID0gZG1hX29wcy0+bWFwX3NpbXBsZShkZXYsIG1lbW9yeSwKLQkJCQkJICAgICAgc2l6ZSwKLQkJCQkJICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQkJaWYgKCpkbWFfaGFuZGxlICE9IGJhZF9kbWFfYWRkcmVzcykKLQkJCXJldHVybiBtZW1vcnk7Ci0JfQotCi0JaWYgKHBhbmljX29uX292ZXJmbG93KQotCQlwYW5pYygiZG1hX2FsbG9jX2NvaGVyZW50OiBJT01NVSBvdmVyZmxvdyBieSAlbHUgYnl0ZXNcbiIsc2l6ZSk7Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltZW1vcnksIGdldF9vcmRlcihzaXplKSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKGRtYV9hbGxvY19jb2hlcmVudCk7Ci0KLS8qCi0gKiBVbm1hcCBjb2hlcmVudCBtZW1vcnkuCi0gKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIGRldmljZSBoYXMgZmluaXNoZWQgYWNjZXNzaW5nIHRoZSBtYXBwaW5nLgotICovCi12b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgYnVzKQotewotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsJLyogZm9yIHBvcnRhYmlsaXR5ICovCi0JaWYgKGRtYV9vcHMtPnVubWFwX3NpbmdsZSkKLQkJZG1hX29wcy0+dW5tYXBfc2luZ2xlKGRldiwgYnVzLCBzaXplLCAwKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwotfQotRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7Ci0KLXN0YXRpYyBpbnQgZm9yYmlkX2RhYyBfX3JlYWRfbW9zdGx5OwotCi1pbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAobWFzayA+IDB4ZmZmZmZmZmYgJiYgZm9yYmlkX2RhYyA+IDApIHsKLQotCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBEaXNhbGxvd2luZyBEQUMgZm9yIGRldmljZSAlc1xuIiwgZGV2LT5idXNfaWQpOwotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQotCWlmIChkbWFfb3BzLT5kbWFfc3VwcG9ydGVkKQotCQlyZXR1cm4gZG1hX29wcy0+ZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spOwotCi0JLyogQ29waWVkIGZyb20gaTM4Ni4gRG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIGJlY2F1c2UgaXQgd2lsbAotCSAgIG9ubHkgd29yayBmb3IgcGNpX2FsbG9jX2NvaGVyZW50LgotCSAgIFRoZSBjYWxsZXIganVzdCBoYXMgdG8gdXNlIEdGUF9ETUEgaW4gdGhpcyBjYXNlLiAqLwotICAgICAgICBpZiAobWFzayA8IERNQV8yNEJJVF9NQVNLKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0JLyogVGVsbCB0aGUgZGV2aWNlIHRvIHVzZSBTQUMgd2hlbiBJT01NVSBmb3JjZSBpcyBvbi4gIFRoaXMKLQkgICBhbGxvd3MgdGhlIGRyaXZlciB0byB1c2UgY2hlYXBlciBhY2Nlc3NlcyBpbiBzb21lIGNhc2VzLgotCi0JICAgUHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCBpZiB3ZSBvdmVyZmxvdyB0aGUgSU9NTVUgYXJlYSBhbmQKLQkgICByZXR1cm4gREFDIGFzIGZhbGxiYWNrIGFkZHJlc3MgdGhlIGRldmljZSBtYXkgbm90IGhhbmRsZSBpdAotCSAgIGNvcnJlY3RseS4KLQotCSAgIEFzIGEgc3BlY2lhbCBjYXNlIHNvbWUgY29udHJvbGxlcnMgaGF2ZSBhIDM5Yml0IGFkZHJlc3MKLQkgICBtb2RlIHRoYXQgaXMgYXMgZWZmaWNpZW50IGFzIDMyYml0IChhaWM3OXh4KS4gRG9uJ3QgZm9yY2UKLQkgICBTQUMgZm9yIHRoZXNlLiAgQXNzdW1lIGFsbCBtYXNrcyA8PSA0MCBiaXRzIGFyZSBvZiB0aGlzCi0JICAgdHlwZS4gTm9ybWFsbHkgdGhpcyBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UsIGJ1dCBnaXZlcwotCSAgIG1vcmUgZ2VudGxlIGhhbmRsaW5nIG9mIElPTU1VIG92ZXJmbG93LiAqLwotCWlmIChpb21tdV9zYWNfZm9yY2UgJiYgKG1hc2sgPj0gRE1BXzQwQklUX01BU0spKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3JjZSBTQUMgd2l0aCBtYXNrICVMeFxuIiwgZGV2LT5idXNfaWQsbWFzayk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChkbWFfc3VwcG9ydGVkKTsKLQotaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQotCQlyZXR1cm4gLUVJTzsKLQkqZGV2LT5kbWFfbWFzayA9IG1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGRtYV9zZXRfbWFzayk7Ci0KLS8qCi0gKiBTZWUgPERvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQ+IGZvciB0aGUgaW9tbXUga2VybmVsIHBhcmFtZXRlcgotICogZG9jdW1lbnRhdGlvbi4KLSAqLwotc3RhdGljIF9faW5pdCBpbnQgaW9tbXVfc2V0dXAoY2hhciAqcCkKLXsKLQlpb21tdV9tZXJnZSA9IDE7Ci0KLQlpZiAoIXApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd2hpbGUgKCpwKSB7Ci0JCWlmICghc3RybmNtcChwLCJvZmYiLDMpKQotCQkJbm9faW9tbXUgPSAxOwotCQkvKiBnYXJ0X3BhcnNlX29wdGlvbnMgaGFzIG1vcmUgZm9yY2Ugc3VwcG9ydCAqLwotCQlpZiAoIXN0cm5jbXAocCwiZm9yY2UiLDUpKQotCQkJZm9yY2VfaW9tbXUgPSAxOwotCQlpZiAoIXN0cm5jbXAocCwibm9mb3JjZSIsNykpIHsKLQkJCWlvbW11X21lcmdlID0gMDsKLQkJCWZvcmNlX2lvbW11ID0gMDsKLQkJfQotCi0JCWlmICghc3RybmNtcChwLCAiYmlvbWVyZ2UiLDgpKSB7Ci0JCQlpb21tdV9iaW9fbWVyZ2UgPSA0MDk2OwotCQkJaW9tbXVfbWVyZ2UgPSAxOwotCQkJZm9yY2VfaW9tbXUgPSAxOwotCQl9Ci0JCWlmICghc3RybmNtcChwLCAicGFuaWMiLDUpKQotCQkJcGFuaWNfb25fb3ZlcmZsb3cgPSAxOwotCQlpZiAoIXN0cm5jbXAocCwgIm5vcGFuaWMiLDcpKQotCQkJcGFuaWNfb25fb3ZlcmZsb3cgPSAwOwotCQlpZiAoIXN0cm5jbXAocCwgIm1lcmdlIiw1KSkgewotCQkJaW9tbXVfbWVyZ2UgPSAxOwotCQkJZm9yY2VfaW9tbXUgPSAxOwotCQl9Ci0JCWlmICghc3RybmNtcChwLCAibm9tZXJnZSIsNykpCi0JCQlpb21tdV9tZXJnZSA9IDA7Ci0JCWlmICghc3RybmNtcChwLCAiZm9yY2VzYWMiLDgpKQotCQkJaW9tbXVfc2FjX2ZvcmNlID0gMTsKLQkJaWYgKCFzdHJuY21wKHAsICJhbGxvd2RhYyIsIDgpKQotCQkJZm9yYmlkX2RhYyA9IDA7Ci0JCWlmICghc3RybmNtcChwLCAibm9kYWMiLCA1KSkKLQkJCWZvcmJpZF9kYWMgPSAtMTsKLQotI2lmZGVmIENPTkZJR19TV0lPVExCCi0JCWlmICghc3RybmNtcChwLCAic29mdCIsNCkpCi0JCQlzd2lvdGxiID0gMTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0dBUlRfSU9NTVUKLQkJZ2FydF9wYXJzZV9vcHRpb25zKHApOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ0FMR0FSWV9JT01NVQotCQlpZiAoIXN0cm5jbXAocCwgImNhbGdhcnkiLCA3KSkKLQkJCXVzZV9jYWxnYXJ5ID0gMTsKLSNlbmRpZiAvKiBDT05GSUdfQ0FMR0FSWV9JT01NVSAqLwotCi0JCXAgKz0gc3RyY3NwbihwLCAiLCIpOwotCQlpZiAoKnAgPT0gJywnKQotCQkJKytwOwotCX0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJpb21tdSIsIGlvbW11X3NldHVwKTsKLQotdm9pZCBfX2luaXQgcGNpX2lvbW11X2FsbG9jKHZvaWQpCi17Ci0JLyoKLQkgKiBUaGUgb3JkZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCBmb3IKLQkgKiBmYWxsLWJhY2svZmFpbC1vdmVyIHJlYXNvbnMKLQkgKi8KLSNpZmRlZiBDT05GSUdfR0FSVF9JT01NVQotCWdhcnRfaW9tbXVfaG9sZV9pbml0KCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VCi0JZGV0ZWN0X2NhbGdhcnkoKTsKLSNlbmRpZgotCi0JZGV0ZWN0X2ludGVsX2lvbW11KCk7Ci0KLSNpZmRlZiBDT05GSUdfU1dJT1RMQgotCXBjaV9zd2lvdGxiX2luaXQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IF9faW5pdCBwY2lfaW9tbXVfaW5pdCh2b2lkKQotewotI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VCi0JY2FsZ2FyeV9pb21tdV9pbml0KCk7Ci0jZW5kaWYKLQotCWludGVsX2lvbW11X2luaXQoKTsKLQotI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCi0JZ2FydF9pb21tdV9pbml0KCk7Ci0jZW5kaWYKLQotCW5vX2lvbW11X2luaXQoKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBwY2lfaW9tbXVfc2h1dGRvd24odm9pZCkKLXsKLQlnYXJ0X2lvbW11X3NodXRkb3duKCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUENJCi0vKiBNYW55IFZJQSBicmlkZ2VzIHNlZW0gdG8gY29ycnVwdCBkYXRhIGZvciBEQUMuIERpc2FibGUgaXQgaGVyZSAqLwotCi1zdGF0aWMgX19kZXZpbml0IHZvaWQgdmlhX25vX2RhYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWlmICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAmJiBmb3JiaWRfZGFjID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBWSUEgUENJIGJyaWRnZSBkZXRlY3RlZC4gRGlzYWJsaW5nIERBQy5cbiIpOwotCQlmb3JiaWRfZGFjID0gMTsKLQl9Ci19Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0FOWV9JRCwgdmlhX25vX2RhYyk7Ci0jZW5kaWYKLS8qIE11c3QgZXhlY3V0ZSBhZnRlciBQQ0kgc3Vic3lzdGVtICovCi1mc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCmluZGV4IGZhZjMyMjkuLmMwNzQ1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCkBAIC0yNjQsOSArMjY0LDkgQEAKIH0KIAogc3RhdGljIGRtYV9hZGRyX3QKLWdhcnRfbWFwX3NpbXBsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGludCBkaXIpCitnYXJ0X21hcF9zaW1wbGUoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCiB7Ci0JZG1hX2FkZHJfdCBtYXAgPSBkbWFfbWFwX2FyZWEoZGV2LCB2aXJ0X3RvX2J1cyhidWYpLCBzaXplLCBkaXIpOworCWRtYV9hZGRyX3QgbWFwID0gZG1hX21hcF9hcmVhKGRldiwgcGFkZHIsIHNpemUsIGRpcik7CiAKIAlmbHVzaF9nYXJ0KCk7CiAKQEAgLTI3NSwxOCArMjc1LDE3IEBACiAKIC8qIE1hcCBhIHNpbmdsZSBhcmVhIGludG8gdGhlIElPTU1VICovCiBzdGF0aWMgZG1hX2FkZHJfdAotZ2FydF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCitnYXJ0X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBwaHlzX21lbSwgYnVzOworCXVuc2lnbmVkIGxvbmcgYnVzOwogCiAJaWYgKCFkZXYpCiAJCWRldiA9ICZmYWxsYmFja19kZXY7CiAKLQlwaHlzX21lbSA9IHZpcnRfdG9fcGh5cyhhZGRyKTsKLQlpZiAoIW5lZWRfaW9tbXUoZGV2LCBwaHlzX21lbSwgc2l6ZSkpCi0JCXJldHVybiBwaHlzX21lbTsKKwlpZiAoIW5lZWRfaW9tbXUoZGV2LCBwYWRkciwgc2l6ZSkpCisJCXJldHVybiBwYWRkcjsKIAotCWJ1cyA9IGdhcnRfbWFwX3NpbXBsZShkZXYsIGFkZHIsIHNpemUsIGRpcik7CisJYnVzID0gZ2FydF9tYXBfc2ltcGxlKGRldiwgcGFkZHIsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gYnVzOwogfQpAQCAtNjE1LDggKzYxNCw4IEBACiAKICBub21tdToKIAkvKiBTaG91bGQgbm90IGhhcHBlbiBhbnltb3JlICovCi0JcHJpbnRrKEtFUk5fRVJSICJQQ0ktRE1BOiBNb3JlIHRoYW4gNEdCIG9mIFJBTSBhbmQgbm8gSU9NTVVcbiIKLQkgICAgICAgS0VSTl9FUlIgIlBDSS1ETUE6IDMyYml0IFBDSSBJTyBtYXkgbWFsZnVuY3Rpb24uXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0ktRE1BOiBNb3JlIHRoYW4gNEdCIG9mIFJBTSBhbmQgbm8gSU9NTVVcbiIKKwkgICAgICAgS0VSTl9XQVJOSU5HICJmYWxsaW5nIGJhY2sgdG8gaW9tbXU9c29mdC5cbiIpOwogCXJldHVybiAtMTsKIH0KIApAQCAtNjkyLDkgKzY5MSw5IEBACiAJICAgICFnYXJ0X2lvbW11X2FwZXJ0dXJlIHx8CiAJICAgIChub19hZ3AgJiYgaW5pdF9rOF9nYXR0KCZpbmZvKSA8IDApKSB7CiAJCWlmIChlbmRfcGZuID4gTUFYX0RNQTMyX1BGTikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIG1vcmUgdGhhbiA0R0Igb2YgbWVtb3J5ICIKLQkJCQkJImJ1dCBHQVJUIElPTU1VIG5vdCBhdmFpbGFibGUuXG4iCi0JCQkgICAgICAgS0VSTl9FUlIgIldBUk5JTkcgMzJiaXQgUENJIG1heSBtYWxmdW5jdGlvbi5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTW9yZSB0aGFuIDRHQiBvZiBtZW1vcnkgIgorCQkJICAgICAgIAkgICAgICAgICAgImJ1dCBHQVJUIElPTU1VIG5vdCBhdmFpbGFibGUuXG4iCisJCQkgICAgICAgS0VSTl9XQVJOSU5HICJmYWxsaW5nIGJhY2sgdG8gaW9tbXU9c29mdC5cbiIpOwogCQl9CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjNDNkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYwpAQCAtMCwwICsxLDEwMCBAQAorLyogRmFsbGJhY2sgZnVuY3Rpb25zIHdoZW4gdGhlIG1haW4gSU9NTVUgY29kZSBpcyBub3QgY29tcGlsZWQgaW4uIFRoaXMKKyAgIGNvZGUgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGkzODYuICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCitzdGF0aWMgaW50CitjaGVja19hZGRyKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGJ1cywgc2l6ZV90IHNpemUpCit7CisJaWYgKGh3ZGV2ICYmIGJ1cyArIHNpemUgPiAqaHdkZXYtPmRtYV9tYXNrKSB7CisJCWlmICgqaHdkZXYtPmRtYV9tYXNrID49IERNQV8zMkJJVF9NQVNLKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgIm5vbW11XyVzOiBvdmVyZmxvdyAlTHgrJXp1IG9mIGRldmljZSBtYXNrICVMeFxuIiwKKwkJCQluYW1lLCAobG9uZyBsb25nKWJ1cywgc2l6ZSwKKwkJCQkobG9uZyBsb25nKSpod2Rldi0+ZG1hX21hc2spOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBkbWFfYWRkcl90Citub21tdV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsCisJICAgICAgIGludCBkaXJlY3Rpb24pCit7CisJZG1hX2FkZHJfdCBidXMgPSBwYWRkcjsKKwlXQVJOX09OKHNpemUgPT0gMCk7CisJaWYgKCFjaGVja19hZGRyKCJtYXBfc2luZ2xlIiwgaHdkZXYsIGJ1cywgc2l6ZSkpCisJCQkJcmV0dXJuIGJhZF9kbWFfYWRkcmVzczsKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7CisJcmV0dXJuIGJ1czsKK30KKworCisvKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCisgKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0dGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQorICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAorICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCisgKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KKyAqCisgKiBOT1RFOiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byB1c2UgYSBzbWFsbGVyIG51bWJlciBvZgorICogICAgICAgRE1BIGFkZHJlc3MvbGVuZ3RoIHBhaXJzIHRoYW4gdGhlcmUgYXJlIFNHIHRhYmxlIGVsZW1lbnRzLgorICogICAgICAgKGZvciBleGFtcGxlIHZpYSB2aXJ0dWFsIG1hcHBpbmcgY2FwYWJpbGl0aWVzKQorICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5CisgKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgorICoKKyAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCisgKiB0aGUgc2FtZSBoZXJlLgorICovCitzdGF0aWMgaW50IG5vbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkgICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgaTsKKworCVdBUk5fT04obmVudHMgPT0gMCB8fCBzZ1swXS5sZW5ndGggPT0gMCk7CisKKwlmb3JfZWFjaF9zZyhzZywgcywgbmVudHMsIGkpIHsKKwkJQlVHX09OKCFzZ19wYWdlKHMpKTsKKwkJcy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHMpOworCQlpZiAoIWNoZWNrX2FkZHIoIm1hcF9zZyIsIGh3ZGV2LCBzLT5kbWFfYWRkcmVzcywgcy0+bGVuZ3RoKSkKKwkJCXJldHVybiAwOworCQlzLT5kbWFfbGVuZ3RoID0gcy0+bGVuZ3RoOworCX0KKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7CisJcmV0dXJuIG5lbnRzOworfQorCisvKiBNYWtlIHN1cmUgd2Uga2VlcCB0aGUgc2FtZSBiZWhhdmlvdXIgKi8KK3N0YXRpYyBpbnQgbm9tbXVfbWFwcGluZ19lcnJvcihkbWFfYWRkcl90IGRtYV9hZGRyKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIChkbWFfYWRkciA9PSBiYWRfZG1hX2FkZHJlc3MpOworI2VuZGlmCit9CisKKworY29uc3Qgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBub21tdV9kbWFfb3BzID0geworCS5tYXBfc2luZ2xlID0gbm9tbXVfbWFwX3NpbmdsZSwKKwkubWFwX3NnID0gbm9tbXVfbWFwX3NnLAorCS5tYXBwaW5nX2Vycm9yID0gbm9tbXVfbWFwcGluZ19lcnJvciwKKwkuaXNfcGh5cyA9IDEsCit9OworCit2b2lkIF9faW5pdCBub19pb21tdV9pbml0KHZvaWQpCit7CisJaWYgKGRtYV9vcHMpCisJCXJldHVybjsKKworCWZvcmNlX2lvbW11ID0gMDsgLyogbm8gSFcgSU9NTVUgKi8KKwlkbWFfb3BzID0gJm5vbW11X2RtYV9vcHM7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11XzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMDhlMTguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdV82NC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyogRmFsbGJhY2sgZnVuY3Rpb25zIHdoZW4gdGhlIG1haW4gSU9NTVUgY29kZSBpcyBub3QgY29tcGlsZWQgaW4uIFRoaXMKLSAgIGNvZGUgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGkzODYuICovCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotCi0jaW5jbHVkZSA8YXNtL2dhcnQuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotCi1zdGF0aWMgaW50Ci1jaGVja19hZGRyKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGJ1cywgc2l6ZV90IHNpemUpCi17Ci0gICAgICAgIGlmIChod2RldiAmJiBidXMgKyBzaXplID4gKmh3ZGV2LT5kbWFfbWFzaykgewotCQlpZiAoKmh3ZGV2LT5kbWFfbWFzayA+PSBETUFfMzJCSVRfTUFTSykKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICJub21tdV8lczogb3ZlcmZsb3cgJUx4KyV6dSBvZiBkZXZpY2UgbWFzayAlTHhcbiIsCi0JCQkJbmFtZSwgKGxvbmcgbG9uZylidXMsIHNpemUsCi0JCQkJKGxvbmcgbG9uZykqaHdkZXYtPmRtYV9tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgZG1hX2FkZHJfdAotbm9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgICAgaW50IGRpcmVjdGlvbikKLXsKLQlkbWFfYWRkcl90IGJ1cyA9IHZpcnRfdG9fYnVzKHB0cik7Ci0JaWYgKCFjaGVja19hZGRyKCJtYXBfc2luZ2xlIiwgaHdkZXYsIGJ1cywgc2l6ZSkpCi0JCQkJcmV0dXJuIGJhZF9kbWFfYWRkcmVzczsKLQlyZXR1cm4gYnVzOwotfQotCi1zdGF0aWMgdm9pZCBub21tdV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsc2l6ZV90IHNpemUsCi0JCQlpbnQgZGlyZWN0aW9uKQotewotfQotCi0vKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCi0gKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0dGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQotICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAotICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCi0gKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KLSAqCi0gKiBOT1RFOiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byB1c2UgYSBzbWFsbGVyIG51bWJlciBvZgotICogICAgICAgRE1BIGFkZHJlc3MvbGVuZ3RoIHBhaXJzIHRoYW4gdGhlcmUgYXJlIFNHIHRhYmxlIGVsZW1lbnRzLgotICogICAgICAgKGZvciBleGFtcGxlIHZpYSB2aXJ0dWFsIG1hcHBpbmcgY2FwYWJpbGl0aWVzKQotICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5Ci0gKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgotICoKLSAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCi0gKiB0aGUgc2FtZSBoZXJlLgotICovCi1zdGF0aWMgaW50IG5vbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkgICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKLQlpbnQgaTsKLQotCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgewotCQlCVUdfT04oIXNnX3BhZ2UocykpOwotCQlzLT5kbWFfYWRkcmVzcyA9IHZpcnRfdG9fYnVzKHNnX3ZpcnQocykpOwotCQlpZiAoIWNoZWNrX2FkZHIoIm1hcF9zZyIsIGh3ZGV2LCBzLT5kbWFfYWRkcmVzcywgcy0+bGVuZ3RoKSkKLQkJCXJldHVybiAwOwotCQlzLT5kbWFfbGVuZ3RoID0gcy0+bGVuZ3RoOwotCX0KLQlyZXR1cm4gbmVudHM7Ci19Ci0KLS8qIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuCi0gKiBBZ2FpbiwgY3B1IHJlYWQgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IKLSAqIHBjaV91bm1hcF9zaW5nbGUoKSBhYm92ZS4KLSAqLwotc3RhdGljIHZvaWQgbm9tbXVfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgIGludCBuZW50cywgaW50IGRpcikKLXsKLX0KLQotY29uc3Qgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBub21tdV9kbWFfb3BzID0gewotCS5tYXBfc2luZ2xlID0gbm9tbXVfbWFwX3NpbmdsZSwKLQkudW5tYXBfc2luZ2xlID0gbm9tbXVfdW5tYXBfc2luZ2xlLAotCS5tYXBfc2cgPSBub21tdV9tYXBfc2csCi0JLnVubWFwX3NnID0gbm9tbXVfdW5tYXBfc2csCi0JLmlzX3BoeXMgPSAxLAotfTsKLQotdm9pZCBfX2luaXQgbm9faW9tbXVfaW5pdCh2b2lkKQotewotCWlmIChkbWFfb3BzKQotCQlyZXR1cm47Ci0KLQlmb3JjZV9pb21tdSA9IDA7IC8qIG5vIEhXIElPTU1VICovCi0JZG1hX29wcyA9ICZub21tdV9kbWFfb3BzOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYwppbmRleCA4MmEwYTY3Li40OTBkYTdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYwpAQCAtMTEsMTEgKzExLDE4IEBACiAKIGludCBzd2lvdGxiIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBkbWFfYWRkcl90Citzd2lvdGxiX21hcF9zaW5nbGVfcGh5cyhzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLAorCQkJaW50IGRpcmVjdGlvbikKK3sKKwlyZXR1cm4gc3dpb3RsYl9tYXBfc2luZ2xlKGh3ZGV2LCBwaHlzX3RvX3ZpcnQocGFkZHIpLCBzaXplLCBkaXJlY3Rpb24pOworfQorCiBjb25zdCBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHN3aW90bGJfZG1hX29wcyA9IHsKIAkubWFwcGluZ19lcnJvciA9IHN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IsCiAJLmFsbG9jX2NvaGVyZW50ID0gc3dpb3RsYl9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCA9IHN3aW90bGJfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZSA9IHN3aW90bGJfbWFwX3NpbmdsZSwKKwkubWFwX3NpbmdsZSA9IHN3aW90bGJfbWFwX3NpbmdsZV9waHlzLAogCS51bm1hcF9zaW5nbGUgPSBzd2lvdGxiX3VubWFwX3NpbmdsZSwKIAkuc3luY19zaW5nbGVfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDRkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNDQgQEAKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3N0cnVjdCBrbWVtX2NhY2hlICp0YXNrX3hzdGF0ZV9jYWNoZXA7CisKK2ludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpCit7CisJKmRzdCA9ICpzcmM7CisJaWYgKHNyYy0+dGhyZWFkLnhzdGF0ZSkgeworCQlkc3QtPnRocmVhZC54c3RhdGUgPSBrbWVtX2NhY2hlX2FsbG9jKHRhc2tfeHN0YXRlX2NhY2hlcCwKKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWRzdC0+dGhyZWFkLnhzdGF0ZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlXQVJOX09OKCh1bnNpZ25lZCBsb25nKWRzdC0+dGhyZWFkLnhzdGF0ZSAmIDE1KTsKKwkJbWVtY3B5KGRzdC0+dGhyZWFkLnhzdGF0ZSwgc3JjLT50aHJlYWQueHN0YXRlLCB4c3RhdGVfc2l6ZSk7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGZyZWVfdGhyZWFkX3hzdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodHNrLT50aHJlYWQueHN0YXRlKSB7CisJCWttZW1fY2FjaGVfZnJlZSh0YXNrX3hzdGF0ZV9jYWNoZXAsIHRzay0+dGhyZWFkLnhzdGF0ZSk7CisJCXRzay0+dGhyZWFkLnhzdGF0ZSA9IE5VTEw7CisJfQorfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwlmcmVlX3RocmVhZF94c3RhdGUodGktPnRhc2spOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdGksIGdldF9vcmRlcihUSFJFQURfU0laRSkpOworfQorCit2b2lkIGFyY2hfdGFza19jYWNoZV9pbml0KHZvaWQpCit7CisgICAgICAgIHRhc2tfeHN0YXRlX2NhY2hlcCA9CisgICAgICAgIAlrbWVtX2NhY2hlX2NyZWF0ZSgidGFza194c3RhdGUiLCB4c3RhdGVfc2l6ZSwKKwkJCQkgIF9fYWxpZ25vZl9fKHVuaW9uIHRocmVhZF94c3RhdGUpLAorCQkJCSAgU0xBQl9QQU5JQywgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCBhN2Q1MGE1Li43YWRhZDA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3ZtODYuaD4KICNpZmRlZiBDT05GSUdfTUFUSF9FTVVMQVRJT04KICNpbmNsdWRlIDxhc20vbWF0aF9lbXUuaD4KICNlbmRpZgpAQCAtODIsNyArODIsNiBAQAogICovCiB2b2lkICgqcG1faWRsZSkodm9pZCk7CiBFWFBPUlRfU1lNQk9MKHBtX2lkbGUpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X2lkbGVfc3RhdGUpOwogCiB2b2lkIGRpc2FibGVfaGx0KHZvaWQpCiB7CkBAIC0xMTQsMjAgKzExMywxMyBAQAogCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCWt0aW1lX3QgdDAsIHQxOwotCQkJdTY0IHQwbiwgdDFuOwotCi0JCQl0MCA9IGt0aW1lX2dldCgpOwotCQkJdDBuID0ga3RpbWVfdG9fbnModDApOwogCQkJc2FmZV9oYWx0KCk7CS8qIGVuYWJsZXMgaW50ZXJydXB0cyByYWNlbGVzc2x5ICovCiAJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkJdDEgPSBrdGltZV9nZXQoKTsKLQkJCXQxbiA9IGt0aW1lX3RvX25zKHQxKTsKLQkJCXNjaGVkX2Nsb2NrX2lkbGVfd2FrZXVwX2V2ZW50KHQxbiAtIHQwbik7CiAJCX0KIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOwogCX0gZWxzZSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJLyogbG9vcCBpcyBkb25lIGJ5IHRoZSBjYWxsZXIgKi8KIAkJY3B1X3JlbGF4KCk7CiAJfQpAQCAtMTQzLDYgKzEzNSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvbGxfaWRsZSh2b2lkKQogeworCWxvY2FsX2lycV9lbmFibGUoKTsKIAljcHVfcmVsYXgoKTsKIH0KIApAQCAtMTkwLDkgKzE4Myw2IEBACiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJCXZvaWQgKCppZGxlKSh2b2lkKTsKIAotCQkJaWYgKF9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpKQotCQkJCV9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpID0gMDsKLQogCQkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJCQlybWIoKTsKIAkJCWlkbGUgPSBwbV9pZGxlOwpAQCAtMjIwLDQwICsyMTAsMTkgQEAKIHsKIH0KIAorLyoKKyAqIGNwdV9pZGxlX3dhaXQgLSBVc2VkIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgQ1BVcyBkaXNjYXJkIG9sZCB2YWx1ZSBvZgorICogcG1faWRsZSBhbmQgdXBkYXRlIHRvIG5ldyBwbV9pZGxlIHZhbHVlLiBSZXF1aXJlZCB3aGlsZSBjaGFuZ2luZyBwbV9pZGxlCisgKiBoYW5kbGVyIG9uIFNNUCBzeXN0ZW1zLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgY2hhbmdlZCBwbV9pZGxlIHRvIHRoZSBuZXcgdmFsdWUgYmVmb3JlIHRoZSBjYWxsLiBPbGQKKyAqIHBtX2lkbGUgdmFsdWUgd2lsbCBub3QgYmUgdXNlZCBieSBhbnkgQ1BVIGFmdGVyIHRoZSByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbi4KKyAqLwogdm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSwgdGhpc19jcHUgPSBnZXRfY3B1KCk7Ci0JY3B1bWFza190IG1hcCwgdG1wID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSh0aGlzX2NwdSkpOwotCXB1dF9jcHUoKTsKLQotCWNwdXNfY2xlYXIobWFwKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlwZXJfY3B1KGNwdV9pZGxlX3N0YXRlLCBjcHUpID0gMTsKLQkJY3B1X3NldChjcHUsIG1hcCk7Ci0JfQotCi0JX19nZXRfY3B1X3ZhcihjcHVfaWRsZV9zdGF0ZSkgPSAwOwotCi0Jd21iKCk7Ci0JZG8gewotCQlzc2xlZXAoMSk7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCQlpZiAoY3B1X2lzc2V0KGNwdSwgbWFwKSAmJiAhcGVyX2NwdShjcHVfaWRsZV9zdGF0ZSwgY3B1KSkKLQkJCQljcHVfY2xlYXIoY3B1LCBtYXApOwotCQl9Ci0JCWNwdXNfYW5kKG1hcCwgbWFwLCBjcHVfb25saW5lX21hcCk7Ci0JCS8qCi0JCSAqIFdlIHdhaXRlZCAxIHNlYywgaWYgYSBDUFUgc3RpbGwgZGlkIG5vdCBjYWxsIGlkbGUKLQkJICogaXQgbWF5IGJlIGJlY2F1c2UgaXQgaXMgaW4gaWRsZSBhbmQgbm90IHdha2luZyB1cAotCQkgKiBiZWNhdXNlIGl0IGhhcyBub3RoaW5nIHRvIGRvLgotCQkgKiBHaXZlIGFsbCB0aGUgcmVtYWluaW5nIENQVVMgYSBraWNrLgotCQkgKi8KLQkJc21wX2NhbGxfZnVuY3Rpb25fbWFzayhtYXAsIGRvX25vdGhpbmcsIE5VTEwsIDApOwotCX0gd2hpbGUgKCFjcHVzX2VtcHR5KG1hcCkpOwotCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCB0bXApOworCXNtcF9tYigpOworCS8qIGtpY2sgYWxsIHRoZSBDUFVzIHNvIHRoYXQgdGhleSBleGl0IG91dCBvZiBwbV9pZGxlICovCisJc21wX2NhbGxfZnVuY3Rpb24oZG9fbm90aGluZywgTlVMTCwgMCwgMSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVfaWRsZV93YWl0KTsKIApAQCAtMjczLDggKzI0MiwxMSBAQAogCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7CiAJCXNtcF9tYigpOwogCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQotCQkJX19td2FpdChheCwgY3gpOwotCX0KKwkJCV9fc3RpX213YWl0KGF4LCBjeCk7CisJCWVsc2UKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9IGVsc2UKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCiAvKiBEZWZhdWx0IE1PTklUT1IvTVdBSVQgd2l0aCBubyBoaW50cywgdXNlZCBmb3IgZGVmYXVsdCBDMSBzdGF0ZSAqLwpAQCAtMzU3LDcgKzMyOSw3IEBACiAJCQlpbml0X3V0c25hbWUoKS0+dmVyc2lvbik7CiAKIAlwcmludGsoIkVJUDogJTA0eDpbPCUwOGx4Pl0gRUZMQUdTOiAlMDhseCBDUFU6ICVkXG4iLAotCQkJMHhmZmZmICYgcmVncy0+Y3MsIHJlZ3MtPmlwLCByZWdzLT5mbGFncywKKwkJCSh1MTYpcmVncy0+Y3MsIHJlZ3MtPmlwLCByZWdzLT5mbGFncywKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJcHJpbnRfc3ltYm9sKCJFSVAgaXMgYXQgJXNcbiIsIHJlZ3MtPmlwKTsKIApAQCAtMzY2LDggKzMzOCw3IEBACiAJcHJpbnRrKCJFU0k6ICUwOGx4IEVESTogJTA4bHggRUJQOiAlMDhseCBFU1A6ICUwOGx4XG4iLAogCQlyZWdzLT5zaSwgcmVncy0+ZGksIHJlZ3MtPmJwLCBzcCk7CiAJcHJpbnRrKCIgRFM6ICUwNHggRVM6ICUwNHggRlM6ICUwNHggR1M6ICUwNHggU1M6ICUwNHhcbiIsCi0JICAgICAgIHJlZ3MtPmRzICYgMHhmZmZmLCByZWdzLT5lcyAmIDB4ZmZmZiwKLQkgICAgICAgcmVncy0+ZnMgJiAweGZmZmYsIGdzLCBzcyk7CisJICAgICAgICh1MTYpcmVncy0+ZHMsICh1MTYpcmVncy0+ZXMsICh1MTYpcmVncy0+ZnMsIGdzLCBzcyk7CiAKIAlpZiAoIWFsbCkKIAkJcmV0dXJuOwpAQCAtNTM4LDExICs1MDksMzAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX1NFQ0NPTVAKK3ZvaWQKK3N0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfaXAsIHVuc2lnbmVkIGxvbmcgbmV3X3NwKQoreworCV9fYXNtX18oIm1vdmwgJTAsICUlZ3MiIDo6ICJyIigwKSk7CisJcmVncy0+ZnMJCT0gMDsKKwlzZXRfZnMoVVNFUl9EUyk7CisJcmVncy0+ZHMJCT0gX19VU0VSX0RTOworCXJlZ3MtPmVzCQk9IF9fVVNFUl9EUzsKKwlyZWdzLT5zcwkJPSBfX1VTRVJfRFM7CisJcmVncy0+Y3MJCT0gX19VU0VSX0NTOworCXJlZ3MtPmlwCQk9IG5ld19pcDsKKwlyZWdzLT5zcAkJPSBuZXdfc3A7CisJLyoKKwkgKiBGcmVlIHRoZSBvbGQgRlAgYW5kIG90aGVyIGV4dGVuZGVkIHN0YXRlCisJICovCisJZnJlZV90aHJlYWRfeHN0YXRlKGN1cnJlbnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfdGhyZWFkKTsKKwogc3RhdGljIHZvaWQgaGFyZF9kaXNhYmxlX1RTQyh2b2lkKQogewogCXdyaXRlX2NyNChyZWFkX2NyNCgpIHwgWDg2X0NSNF9UU0QpOwogfQorCiB2b2lkIGRpc2FibGVfVFNDKHZvaWQpCiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CkBAIC01NTQsMTEgKzU0NCw0NyBAQAogCQloYXJkX2Rpc2FibGVfVFNDKCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KKwogc3RhdGljIHZvaWQgaGFyZF9lbmFibGVfVFNDKHZvaWQpCiB7CiAJd3JpdGVfY3I0KHJlYWRfY3I0KCkgJiB+WDg2X0NSNF9UU0QpOwogfQotI2VuZGlmIC8qIENPTkZJR19TRUNDT01QICovCisKK3ZvaWQgZW5hYmxlX1RTQyh2b2lkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICh0ZXN0X2FuZF9jbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQorCQkvKgorCQkgKiBNdXN0IGZsaXAgdGhlIENQVSBzdGF0ZSBzeW5jaHJvbm91c2x5IHdpdGgKKwkJICogVElGX05PVFNDIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgY29udGV4dC4KKwkJICovCisJCWhhcmRfZW5hYmxlX1RTQygpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK2ludCBnZXRfdHNjX21vZGUodW5zaWduZWQgbG9uZyBhZHIpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9OT1RTQykpCisJCXZhbCA9IFBSX1RTQ19TSUdTRUdWOworCWVsc2UKKwkJdmFsID0gUFJfVFNDX0VOQUJMRTsKKworCXJldHVybiBwdXRfdXNlcih2YWwsICh1bnNpZ25lZCBpbnQgX191c2VyICopYWRyKTsKK30KKworaW50IHNldF90c2NfbW9kZSh1bnNpZ25lZCBpbnQgdmFsKQoreworCWlmICh2YWwgPT0gUFJfVFNDX1NJR1NFR1YpCisJCWRpc2FibGVfVFNDKCk7CisJZWxzZSBpZiAodmFsID09IFBSX1RTQ19FTkFCTEUpCisJCWVuYWJsZV9UU0MoKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBub2lubGluZSB2b2lkCiBfX3N3aXRjaF90b194dHJhKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldl9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfcCwKQEAgLTU3NSwxMiArNjAxLDEyIEBACiAJCS8qIHdlIGNsZWFyIGRlYnVnY3RsIHRvIG1ha2Ugc3VyZSBEUwogCQkgKiBpcyBub3QgaW4gdXNlIHdoZW4gd2UgY2hhbmdlIGl0ICovCiAJCWRlYnVnY3RsID0gMDsKLQkJd3Jtc3JsKE1TUl9JQTMyX0RFQlVHQ1RMTVNSLCAwKTsKKwkJdXBkYXRlX2RlYnVnY3RsbXNyKDApOwogCQl3cm1zcihNU1JfSUEzMl9EU19BUkVBLCBuZXh0LT5kc19hcmVhX21zciwgMCk7CiAJfQogCiAJaWYgKG5leHQtPmRlYnVnY3RsbXNyICE9IGRlYnVnY3RsKQotCQl3cm1zcihNU1JfSUEzMl9ERUJVR0NUTE1TUiwgbmV4dC0+ZGVidWdjdGxtc3IsIDApOworCQl1cGRhdGVfZGVidWdjdGxtc3IobmV4dC0+ZGVidWdjdGxtc3IpOwogCiAJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0RFQlVHKSkgewogCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWcwLCAwKTsKQEAgLTU5Miw3ICs2MTgsNiBAQAogCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWc3LCA3KTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU0VDQ09NUAogCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhwcmV2X3AsIFRJRl9OT1RTQykgXgogCSAgICB0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9OT1RTQykpIHsKIAkJLyogcHJldiBhbmQgbmV4dCBhcmUgZGlmZmVyZW50ICovCkBAIC02MDEsMTMgKzYyNiwxNCBAQAogCQllbHNlCiAJCQloYXJkX2VuYWJsZV9UU0MoKTsKIAl9Ci0jZW5kaWYKIAorI2lmZGVmIFg4Nl9CVFMKIAlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfQlRTX1RSQUNFX1RTKSkKIAkJcHRyYWNlX2J0c190YWtlX3RpbWVzdGFtcChwcmV2X3AsIEJUU19UQVNLX0RFUEFSVFMpOwogCiAJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0JUU19UUkFDRV9UUykpCiAJCXB0cmFjZV9idHNfdGFrZV90aW1lc3RhbXAobmV4dF9wLCBCVFNfVEFTS19BUlJJVkVTKTsKKyNlbmRpZgogCiAKIAlpZiAoIXRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0lPX0JJVE1BUCkpIHsKQEAgLTY4MSw3ICs3MDcsNyBAQAogCiAJLyogd2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgc29vbiwgYWZ0ZXIgYSBmZXcgZXhwZW5zaXZlIHRoaW5ncyAqLwogCWlmIChuZXh0X3AtPmZwdV9jb3VudGVyID4gNSkKLQkJcHJlZmV0Y2goJm5leHQtPmkzODcuZnhzYXZlKTsKKwkJcHJlZmV0Y2gobmV4dC0+eHN0YXRlKTsKIAogCS8qCiAJICogUmVsb2FkIGVzcDAuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBiMGNjOGYwLi44OTFhZjFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC02Myw3ICs2NCw2IEBACiAgKi8KIHZvaWQgKCpwbV9pZGxlKSh2b2lkKTsKIEVYUE9SVF9TWU1CT0wocG1faWRsZSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBjcHVfaWRsZV9zdGF0ZSk7CiAKIHN0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChpZGxlX25vdGlmaWVyKTsKIApAQCAtMTA4LDE2ICsxMDgsOCBAQAogCXNtcF9tYigpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewotCQlrdGltZV90IHQwLCB0MTsKLQkJdTY0IHQwbiwgdDFuOwotCi0JCXQwID0ga3RpbWVfZ2V0KCk7Ci0JCXQwbiA9IGt0aW1lX3RvX25zKHQwKTsKIAkJc2FmZV9oYWx0KCk7CS8qIGVuYWJsZXMgaW50ZXJydXB0cyByYWNlbGVzc2x5ICovCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCXQxID0ga3RpbWVfZ2V0KCk7Ci0JCXQxbiA9IGt0aW1lX3RvX25zKHQxKTsKLQkJc2NoZWRfY2xvY2tfaWRsZV93YWtldXBfZXZlbnQodDFuIC0gdDBuKTsKIAl9CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CkBAIC0xNzMsOSArMTY1LDYgQEAKIAkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQkJdm9pZCAoKmlkbGUpKHZvaWQpOwogCi0JCQlpZiAoX19nZXRfY3B1X3ZhcihjcHVfaWRsZV9zdGF0ZSkpCi0JCQkJX19nZXRfY3B1X3ZhcihjcHVfaWRsZV9zdGF0ZSkgPSAwOwotCiAJCQlybWIoKTsKIAkJCWlkbGUgPSBwbV9pZGxlOwogCQkJaWYgKCFpZGxlKQpAQCAtMjA3LDQwICsxOTYsMTkgQEAKIHsKIH0KIAorLyoKKyAqIGNwdV9pZGxlX3dhaXQgLSBVc2VkIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgQ1BVcyBkaXNjYXJkIG9sZCB2YWx1ZSBvZgorICogcG1faWRsZSBhbmQgdXBkYXRlIHRvIG5ldyBwbV9pZGxlIHZhbHVlLiBSZXF1aXJlZCB3aGlsZSBjaGFuZ2luZyBwbV9pZGxlCisgKiBoYW5kbGVyIG9uIFNNUCBzeXN0ZW1zLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgY2hhbmdlZCBwbV9pZGxlIHRvIHRoZSBuZXcgdmFsdWUgYmVmb3JlIHRoZSBjYWxsLiBPbGQKKyAqIHBtX2lkbGUgdmFsdWUgd2lsbCBub3QgYmUgdXNlZCBieSBhbnkgQ1BVIGFmdGVyIHRoZSByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbi4KKyAqLwogdm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSwgdGhpc19jcHUgPSBnZXRfY3B1KCk7Ci0JY3B1bWFza190IG1hcCwgdG1wID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSh0aGlzX2NwdSkpOwotCXB1dF9jcHUoKTsKLQotCWNwdXNfY2xlYXIobWFwKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlwZXJfY3B1KGNwdV9pZGxlX3N0YXRlLCBjcHUpID0gMTsKLQkJY3B1X3NldChjcHUsIG1hcCk7Ci0JfQotCi0JX19nZXRfY3B1X3ZhcihjcHVfaWRsZV9zdGF0ZSkgPSAwOwotCi0Jd21iKCk7Ci0JZG8gewotCQlzc2xlZXAoMSk7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCQlpZiAoY3B1X2lzc2V0KGNwdSwgbWFwKSAmJiAhcGVyX2NwdShjcHVfaWRsZV9zdGF0ZSwgY3B1KSkKLQkJCQljcHVfY2xlYXIoY3B1LCBtYXApOwotCQl9Ci0JCWNwdXNfYW5kKG1hcCwgbWFwLCBjcHVfb25saW5lX21hcCk7Ci0JCS8qCi0JCSAqIFdlIHdhaXRlZCAxIHNlYywgaWYgYSBDUFUgc3RpbGwgZGlkIG5vdCBjYWxsIGlkbGUKLQkJICogaXQgbWF5IGJlIGJlY2F1c2UgaXQgaXMgaW4gaWRsZSBhbmQgbm90IHdha2luZyB1cAotCQkgKiBiZWNhdXNlIGl0IGhhcyBub3RoaW5nIHRvIGRvLgotCQkgKiBHaXZlIGFsbCB0aGUgcmVtYWluaW5nIENQVVMgYSBraWNrLgotCQkgKi8KLQkJc21wX2NhbGxfZnVuY3Rpb25fbWFzayhtYXAsIGRvX25vdGhpbmcsIDAsIDApOwotCX0gd2hpbGUgKCFjcHVzX2VtcHR5KG1hcCkpOwotCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCB0bXApOworCXNtcF9tYigpOworCS8qIGtpY2sgYWxsIHRoZSBDUFVzIHNvIHRoYXQgdGhleSBleGl0IG91dCBvZiBwbV9pZGxlICovCisJc21wX2NhbGxfZnVuY3Rpb24oZG9fbm90aGluZywgTlVMTCwgMCwgMSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVfaWRsZV93YWl0KTsKIApAQCAtNTUzLDYgKzUyMSw4MyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3ZvaWQKK3N0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfaXAsIHVuc2lnbmVkIGxvbmcgbmV3X3NwKQoreworCWFzbSB2b2xhdGlsZSgibW92bCAlMCwgJSVmczsgbW92bCAlMCwgJSVlczsgbW92bCAlMCwgJSVkcyIgOjogInIiKDApKTsKKwlsb2FkX2dzX2luZGV4KDApOworCXJlZ3MtPmlwCQk9IG5ld19pcDsKKwlyZWdzLT5zcAkJPSBuZXdfc3A7CisJd3JpdGVfcGRhKG9sZHJzcCwgbmV3X3NwKTsKKwlyZWdzLT5jcwkJPSBfX1VTRVJfQ1M7CisJcmVncy0+c3MJCT0gX19VU0VSX0RTOworCXJlZ3MtPmZsYWdzCQk9IDB4MjAwOworCXNldF9mcyhVU0VSX0RTKTsKKwkvKgorCSAqIEZyZWUgdGhlIG9sZCBGUCBhbmQgb3RoZXIgZXh0ZW5kZWQgc3RhdGUKKwkgKi8KKwlmcmVlX3RocmVhZF94c3RhdGUoY3VycmVudCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzdGFydF90aHJlYWQpOworCitzdGF0aWMgdm9pZCBoYXJkX2Rpc2FibGVfVFNDKHZvaWQpCit7CisJd3JpdGVfY3I0KHJlYWRfY3I0KCkgfCBYODZfQ1I0X1RTRCk7Cit9CisKK3ZvaWQgZGlzYWJsZV9UU0Modm9pZCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZiAoIXRlc3RfYW5kX3NldF90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQorCQkvKgorCQkgKiBNdXN0IGZsaXAgdGhlIENQVSBzdGF0ZSBzeW5jaHJvbm91c2x5IHdpdGgKKwkJICogVElGX05PVFNDIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgY29udGV4dC4KKwkJICovCisJCWhhcmRfZGlzYWJsZV9UU0MoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBoYXJkX2VuYWJsZV9UU0Modm9pZCkKK3sKKwl3cml0ZV9jcjQocmVhZF9jcjQoKSAmIH5YODZfQ1I0X1RTRCk7Cit9CisKK3ZvaWQgZW5hYmxlX1RTQyh2b2lkKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICh0ZXN0X2FuZF9jbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9UU0MpKQorCQkvKgorCQkgKiBNdXN0IGZsaXAgdGhlIENQVSBzdGF0ZSBzeW5jaHJvbm91c2x5IHdpdGgKKwkJICogVElGX05PVFNDIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgY29udGV4dC4KKwkJICovCisJCWhhcmRfZW5hYmxlX1RTQygpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK2ludCBnZXRfdHNjX21vZGUodW5zaWduZWQgbG9uZyBhZHIpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9OT1RTQykpCisJCXZhbCA9IFBSX1RTQ19TSUdTRUdWOworCWVsc2UKKwkJdmFsID0gUFJfVFNDX0VOQUJMRTsKKworCXJldHVybiBwdXRfdXNlcih2YWwsICh1bnNpZ25lZCBpbnQgX191c2VyICopYWRyKTsKK30KKworaW50IHNldF90c2NfbW9kZSh1bnNpZ25lZCBpbnQgdmFsKQoreworCWlmICh2YWwgPT0gUFJfVFNDX1NJR1NFR1YpCisJCWRpc2FibGVfVFNDKCk7CisJZWxzZSBpZiAodmFsID09IFBSX1RTQ19FTkFCTEUpCisJCWVuYWJsZV9UU0MoKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGlzIHNwZWNpYWwgbWFjcm8gY2FuIGJlIHVzZWQgdG8gbG9hZCBhIGRlYnVnZ2luZyByZWdpc3RlcgogICovCkBAIC01NzMsMTIgKzYxOCwxMiBAQAogCQkvKiB3ZSBjbGVhciBkZWJ1Z2N0bCB0byBtYWtlIHN1cmUgRFMKIAkJICogaXMgbm90IGluIHVzZSB3aGVuIHdlIGNoYW5nZSBpdCAqLwogCQlkZWJ1Z2N0bCA9IDA7Ci0JCXdybXNybChNU1JfSUEzMl9ERUJVR0NUTE1TUiwgMCk7CisJCXVwZGF0ZV9kZWJ1Z2N0bG1zcigwKTsKIAkJd3Jtc3JsKE1TUl9JQTMyX0RTX0FSRUEsIG5leHQtPmRzX2FyZWFfbXNyKTsKIAl9CiAKIAlpZiAobmV4dC0+ZGVidWdjdGxtc3IgIT0gZGVidWdjdGwpCi0JCXdybXNybChNU1JfSUEzMl9ERUJVR0NUTE1TUiwgbmV4dC0+ZGVidWdjdGxtc3IpOworCQl1cGRhdGVfZGVidWdjdGxtc3IobmV4dC0+ZGVidWdjdGxtc3IpOwogCiAJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKG5leHRfcCwgVElGX0RFQlVHKSkgewogCQlsb2FkZGVidWcobmV4dCwgMCk7CkBAIC01OTAsNiArNjM1LDE1IEBACiAJCWxvYWRkZWJ1ZyhuZXh0LCA3KTsKIAl9CiAKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfTk9UU0MpIF4KKwkgICAgdGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfTk9UU0MpKSB7CisJCS8qIHByZXYgYW5kIG5leHQgYXJlIGRpZmZlcmVudCAqLworCQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfTk9UU0MpKQorCQkJaGFyZF9kaXNhYmxlX1RTQygpOworCQllbHNlCisJCQloYXJkX2VuYWJsZV9UU0MoKTsKKwl9CisKIAlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcobmV4dF9wLCBUSUZfSU9fQklUTUFQKSkgewogCQkvKgogCQkgKiBDb3B5IHRoZSByZWxldmFudCByYW5nZSBvZiB0aGUgSU8gYml0bWFwLgpAQCAtNjA0LDExICs2NTgsMTMgQEAKIAkJbWVtc2V0KHRzcy0+aW9fYml0bWFwLCAweGZmLCBwcmV2LT5pb19iaXRtYXBfbWF4KTsKIAl9CiAKKyNpZmRlZiBYODZfQlRTCiAJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX0JUU19UUkFDRV9UUykpCiAJCXB0cmFjZV9idHNfdGFrZV90aW1lc3RhbXAocHJldl9wLCBCVFNfVEFTS19ERVBBUlRTKTsKIAogCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9CVFNfVFJBQ0VfVFMpKQogCQlwdHJhY2VfYnRzX3Rha2VfdGltZXN0YW1wKG5leHRfcCwgQlRTX1RBU0tfQVJSSVZFUyk7CisjZW5kaWYKIH0KIAogLyoKQEAgLTYzMCw3ICs2ODYsNyBAQAogCiAJLyogd2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgc29vbiwgYWZ0ZXIgYSBmZXcgZXhwZW5zaXZlIHRoaW5ncyAqLwogCWlmIChuZXh0X3AtPmZwdV9jb3VudGVyPjUpCi0JCXByZWZldGNoKCZuZXh0LT5pMzg3LmZ4c2F2ZSk7CisJCXByZWZldGNoKG5leHQtPnhzdGF0ZSk7CiAKIAkvKgogCSAqIFJlbG9hZCBlc3AwLCBMRFQgYW5kIHRoZSBwYWdlIHRhYmxlIHBvaW50ZXI6CkBAIC03MzAsMTYgKzc4NiwxNiBAQAogICovCiBhc21saW5rYWdlCiBsb25nIHN5c19leGVjdmUoY2hhciBfX3VzZXIgKm5hbWUsIGNoYXIgX191c2VyICogX191c2VyICphcmd2LAotCQljaGFyIF9fdXNlciAqIF9fdXNlciAqZW52cCwgc3RydWN0IHB0X3JlZ3MgcmVncykKKwkJY2hhciBfX3VzZXIgKiBfX3VzZXIgKmVudnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWxvbmcgZXJyb3I7CiAJY2hhciAqIGZpbGVuYW1lOwogCiAJZmlsZW5hbWUgPSBnZXRuYW1lKG5hbWUpOwogCWVycm9yID0gUFRSX0VSUihmaWxlbmFtZSk7Ci0JaWYgKElTX0VSUihmaWxlbmFtZSkpIAorCWlmIChJU19FUlIoZmlsZW5hbWUpKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSBkb19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsICZyZWdzKTsgCisJZXJyb3IgPSBkb19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsIHJlZ3MpOwogCXB1dG5hbWUoZmlsZW5hbWUpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA3MDJjMzNlZi4uNTU5YzFiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMzIzLDYgKzMyMywxNiBAQAogCQlyZXR1cm4gc2V0X2ZsYWdzKGNoaWxkLCB2YWx1ZSk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyoKKwkgKiBPcmlnX2F4IGlzIHJlYWxseSBqdXN0IGEgZmxhZyB3aXRoIHNtYWxsIHBvc2l0aXZlIGFuZAorCSAqIG5lZ2F0aXZlIHZhbHVlcywgc28gbWFrZSBzdXJlIHRvIGFsd2F5cyBzaWduLWV4dGVuZCBpdAorCSAqIGZyb20gMzIgYml0cyBzbyB0aGF0IGl0IHdvcmtzIGNvcnJlY3RseSByZWdhcmRsZXNzIG9mCisJICogd2hldGhlciB3ZSBjb21lIGZyb20gYSAzMi1iaXQgZW52aXJvbm1lbnQgb3Igbm90LgorCSAqLworCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QsIG9yaWdfYXgpOgorCQl2YWx1ZSA9IChsb25nKSAoczMyKSB2YWx1ZTsKKwkJYnJlYWs7CisKIAljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LGZzX2Jhc2UpOgogCQlpZiAodmFsdWUgPj0gVEFTS19TSVpFX09GKGNoaWxkKSkKIAkJCXJldHVybiAtRUlPOwpAQCAtNTQ0LDYgKzU1NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBYODZfQlRTCisKIHN0YXRpYyBpbnQgcHRyYWNlX2J0c19nZXRfc2l6ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWlmICghY2hpbGQtPnRocmVhZC5kc19hcmVhX21zcikKQEAgLTU4OCwyMSArNjAwLDYgQEAKIAlyZXR1cm4gc2l6ZW9mKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgcHRyYWNlX2J0c193cml0ZV9yZWNvcmQoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgYnRzX3N0cnVjdCAqaW4pCi17Ci0JaW50IHJldHZhbDsKLQotCWlmICghY2hpbGQtPnRocmVhZC5kc19hcmVhX21zcikKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXJldHZhbCA9IGRzX3dyaXRlX2J0cygodm9pZCAqKWNoaWxkLT50aHJlYWQuZHNfYXJlYV9tc3IsIGluKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIHNpemVvZigqaW4pOwotfQotCiBzdGF0aWMgaW50IHB0cmFjZV9idHNfY2xlYXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAlpZiAoIWNoaWxkLT50aHJlYWQuZHNfYXJlYV9tc3IpCkBAIC02NDUsNzUgKzY0Miw2IEBACiAJcmV0dXJuIGVuZDsKIH0KIAotc3RhdGljIGludCBwdHJhY2VfYnRzX3JlYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKLQkJCSAgICAgIGludCBzaXplLCBpbnQgcmVkdWNlX3NpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBybGltLCB2bTsKLQlpbnQgcmV0LCBvbGRfc2l6ZTsKLQotCWlmIChzaXplIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlvbGRfc2l6ZSA9IGRzX2dldF9idHNfc2l6ZSgodm9pZCAqKWNoaWxkLT50aHJlYWQuZHNfYXJlYV9tc3IpOwotCWlmIChvbGRfc2l6ZSA8IDApCi0JCXJldHVybiBvbGRfc2l6ZTsKLQotCXJldCA9IGRzX2ZyZWUoKHZvaWQgKiopJmNoaWxkLT50aHJlYWQuZHNfYXJlYV9tc3IpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXNpemUgPj49IFBBR0VfU0hJRlQ7Ci0Jb2xkX3NpemUgPj49IFBBR0VfU0hJRlQ7Ci0KLQljdXJyZW50LT5tbS0+dG90YWxfdm0gIC09IG9sZF9zaXplOwotCWN1cnJlbnQtPm1tLT5sb2NrZWRfdm0gLT0gb2xkX3NpemU7Ci0KLQlpZiAoc2l6ZSA9PSAwKQotCQlnb3RvIG91dDsKLQotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0FTXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUOwotCXZtID0gY3VycmVudC0+bW0tPnRvdGFsX3ZtICArIHNpemU7Ci0JaWYgKHJsaW0gPCB2bSkgewotCQlyZXQgPSAtRU5PTUVNOwotCi0JCWlmICghcmVkdWNlX3NpemUpCi0JCQlnb3RvIG91dDsKLQotCQlzaXplID0gcmxpbSAtIGN1cnJlbnQtPm1tLT50b3RhbF92bTsKLQkJaWYgKHNpemUgPD0gMCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyID4+IFBBR0VfU0hJRlQ7Ci0Jdm0gPSBjdXJyZW50LT5tbS0+bG9ja2VkX3ZtICArIHNpemU7Ci0JaWYgKHJsaW0gPCB2bSkgewotCQlyZXQgPSAtRU5PTUVNOwotCi0JCWlmICghcmVkdWNlX3NpemUpCi0JCQlnb3RvIG91dDsKLQotCQlzaXplID0gcmxpbSAtIGN1cnJlbnQtPm1tLT5sb2NrZWRfdm07Ci0JCWlmIChzaXplIDw9IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBkc19hbGxvY2F0ZSgodm9pZCAqKikmY2hpbGQtPnRocmVhZC5kc19hcmVhX21zciwKLQkJCSAgc2l6ZSA8PCBQQUdFX1NISUZUKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQljdXJyZW50LT5tbS0+dG90YWxfdm0gICs9IHNpemU7Ci0JY3VycmVudC0+bW0tPmxvY2tlZF92bSArPSBzaXplOwotCi1vdXQ6Ci0JaWYgKGNoaWxkLT50aHJlYWQuZHNfYXJlYV9tc3IpCi0JCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9EU19BUkVBX01TUik7Ci0JZWxzZQotCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9EU19BUkVBX01TUik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHB0cmFjZV9idHNfY29uZmlnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJCQkgICAgIGxvbmcgY2ZnX3NpemUsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBwdHJhY2VfYnRzX2NvbmZpZyBfX3VzZXIgKnVjZmcpCkBAIC04MTYsNiArNzQ0LDkxIEBACiAJcmV0dXJuIHNpemVvZihjZmcpOwogfQogCisKK3N0YXRpYyBpbnQgcHRyYWNlX2J0c193cml0ZV9yZWNvcmQoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgYnRzX3N0cnVjdCAqaW4pCit7CisJaW50IHJldHZhbDsKKworCWlmICghY2hpbGQtPnRocmVhZC5kc19hcmVhX21zcikKKwkJcmV0dXJuIC1FTlhJTzsKKworCXJldHZhbCA9IGRzX3dyaXRlX2J0cygodm9pZCAqKWNoaWxkLT50aHJlYWQuZHNfYXJlYV9tc3IsIGluKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHNpemVvZigqaW4pOworfQorCitzdGF0aWMgaW50IHB0cmFjZV9idHNfcmVhbGxvYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkJICAgICAgaW50IHNpemUsIGludCByZWR1Y2Vfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJsaW0sIHZtOworCWludCByZXQsIG9sZF9zaXplOworCisJaWYgKHNpemUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9sZF9zaXplID0gZHNfZ2V0X2J0c19zaXplKCh2b2lkICopY2hpbGQtPnRocmVhZC5kc19hcmVhX21zcik7CisJaWYgKG9sZF9zaXplIDwgMCkKKwkJcmV0dXJuIG9sZF9zaXplOworCisJcmV0ID0gZHNfZnJlZSgodm9pZCAqKikmY2hpbGQtPnRocmVhZC5kc19hcmVhX21zcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc2l6ZSA+Pj0gUEFHRV9TSElGVDsKKwlvbGRfc2l6ZSA+Pj0gUEFHRV9TSElGVDsKKworCWN1cnJlbnQtPm1tLT50b3RhbF92bSAgLT0gb2xkX3NpemU7CisJY3VycmVudC0+bW0tPmxvY2tlZF92bSAtPSBvbGRfc2l6ZTsKKworCWlmIChzaXplID09IDApCisJCWdvdG8gb3V0OworCisJcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQVNdLnJsaW1fY3VyID4+IFBBR0VfU0hJRlQ7CisJdm0gPSBjdXJyZW50LT5tbS0+dG90YWxfdm0gICsgc2l6ZTsKKwlpZiAocmxpbSA8IHZtKSB7CisJCXJldCA9IC1FTk9NRU07CisKKwkJaWYgKCFyZWR1Y2Vfc2l6ZSkKKwkJCWdvdG8gb3V0OworCisJCXNpemUgPSBybGltIC0gY3VycmVudC0+bW0tPnRvdGFsX3ZtOworCQlpZiAoc2l6ZSA8PSAwKQorCQkJZ290byBvdXQ7CisJfQorCisJcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVDsKKwl2bSA9IGN1cnJlbnQtPm1tLT5sb2NrZWRfdm0gICsgc2l6ZTsKKwlpZiAocmxpbSA8IHZtKSB7CisJCXJldCA9IC1FTk9NRU07CisKKwkJaWYgKCFyZWR1Y2Vfc2l6ZSkKKwkJCWdvdG8gb3V0OworCisJCXNpemUgPSBybGltIC0gY3VycmVudC0+bW0tPmxvY2tlZF92bTsKKwkJaWYgKHNpemUgPD0gMCkKKwkJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRzX2FsbG9jYXRlKCh2b2lkICoqKSZjaGlsZC0+dGhyZWFkLmRzX2FyZWFfbXNyLAorCQkJICBzaXplIDw8IFBBR0VfU0hJRlQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWN1cnJlbnQtPm1tLT50b3RhbF92bSAgKz0gc2l6ZTsKKwljdXJyZW50LT5tbS0+bG9ja2VkX3ZtICs9IHNpemU7CisKK291dDoKKwlpZiAoY2hpbGQtPnRocmVhZC5kc19hcmVhX21zcikKKwkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX0RTX0FSRUFfTVNSKTsKKwllbHNlCisJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX0RTX0FSRUFfTVNSKTsKKworCXJldHVybiByZXQ7Cit9CisKIHZvaWQgcHRyYWNlX2J0c190YWtlX3RpbWVzdGFtcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCSAgICAgICBlbnVtIGJ0c19xdWFsaWZpZXIgcXVhbGlmaWVyKQogewpAQCAtODI2LDYgKzgzOSw3IEBACiAKIAlwdHJhY2VfYnRzX3dyaXRlX3JlY29yZCh0c2ssICZyZWMpOwogfQorI2VuZGlmIC8qIFg4Nl9CVFMgKi8KIAogLyoKICAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuLgpAQCAtODM5LDcgKzg1Myw5IEBACiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9FTVUpOwogI2VuZGlmCiAJaWYgKGNoaWxkLT50aHJlYWQuZHNfYXJlYV9tc3IpIHsKKyNpZmRlZiBYODZfQlRTCiAJCXB0cmFjZV9idHNfcmVhbGxvYyhjaGlsZCwgMCwgMCk7CisjZW5kaWYKIAkJY2hpbGQtPnRocmVhZC5kZWJ1Z2N0bG1zciAmPSB+ZHNfZGVidWdjdGxfbWFzaygpOwogCQlpZiAoIWNoaWxkLT50aHJlYWQuZGVidWdjdGxtc3IpCiAJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9ERUJVR0NUTE1TUik7CkBAIC05NjEsNiArOTc3LDEwIEBACiAJCWJyZWFrOwogI2VuZGlmCiAKKwkvKgorCSAqIFRoZXNlIGJpdHMgbmVlZCBtb3JlIGNvb2tpbmcgLSBub3QgZW5hYmxlZCB5ZXQ6CisJICovCisjaWZkZWYgWDg2X0JUUwogCWNhc2UgUFRSQUNFX0JUU19DT05GSUc6CiAJCXJldCA9IHB0cmFjZV9idHNfY29uZmlnCiAJCQkoY2hpbGQsIGRhdGEsIChzdHJ1Y3QgcHRyYWNlX2J0c19jb25maWcgX191c2VyICopYWRkcik7CkBAIC05ODgsNiArMTAwOCw3IEBACiAJCXJldCA9IHB0cmFjZV9idHNfZHJhaW4KIAkJCShjaGlsZCwgZGF0YSwgKHN0cnVjdCBidHNfc3RydWN0IF9fdXNlciAqKSBhZGRyKTsKIAkJYnJlYWs7CisjZW5kaWYKIAogCWRlZmF1bHQ6CiAJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKQEAgLTEwMzUsMTAgKzEwNTYsMTcgQEAKIAlSMzIoZXNpLCBzaSk7CiAJUjMyKGVicCwgYnApOwogCVIzMihlYXgsIGF4KTsKLQlSMzIob3JpZ19lYXgsIG9yaWdfYXgpOwogCVIzMihlaXAsIGlwKTsKIAlSMzIoZXNwLCBzcCk7CiAKKwljYXNlIG9mZnNldG9mKHN0cnVjdCB1c2VyMzIsIHJlZ3Mub3JpZ19lYXgpOgorCQkvKgorCQkgKiBTaWduLWV4dGVuZCB0aGUgdmFsdWUgc28gdGhhdCBvcmlnX2VheCA9IC0xCisJCSAqIGNhdXNlcyAobG9uZylvcmlnX2F4IDwgMCB0ZXN0cyB0byBmaXJlIGNvcnJlY3RseS4KKwkJICovCisJCXJlZ3MtPm9yaWdfYXggPSAobG9uZykgKHMzMikgdmFsdWU7CisJCWJyZWFrOworCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgdXNlcjMyLCByZWdzLmVmbGFncyk6CiAJCXJldHVybiBzZXRfZmxhZ3MoY2hpbGQsIHZhbHVlKTsKIApAQCAtMTE2MCw3ICsxMTg4LDcgQEAKIAlpZiAoa2J1ZikgewogCQljb25zdCBjb21wYXRfdWxvbmdfdCAqayA9IGtidWY7CiAJCXdoaWxlIChjb3VudCA+IDAgJiYgIXJldCkgewotCQkJcmV0ID0gcHV0cmVnKHRhcmdldCwgcG9zLCAqaysrKTsKKwkJCXJldCA9IHB1dHJlZzMyKHRhcmdldCwgcG9zLCAqaysrKTsKIAkJCWNvdW50IC09IHNpemVvZigqayk7CiAJCQlwb3MgKz0gc2l6ZW9mKCprKTsKIAkJfQpAQCAtMTE3MSw3ICsxMTk5LDcgQEAKIAkJCXJldCA9IF9fZ2V0X3VzZXIod29yZCwgdSsrKTsKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7Ci0JCQlyZXQgPSBwdXRyZWcodGFyZ2V0LCBwb3MsIHdvcmQpOworCQkJcmV0ID0gcHV0cmVnMzIodGFyZ2V0LCBwb3MsIHdvcmQpOwogCQkJY291bnQgLT0gc2l6ZW9mKCp1KTsKIAkJCXBvcyArPSBzaXplb2YoKnUpOwogCQl9CkBAIC0xMjI2LDEyICsxMjU0LDE0IEBACiAJY2FzZSBQVFJBQ0VfU0VUT1BUSU9OUzoKIAljYXNlIFBUUkFDRV9TRVRfVEhSRUFEX0FSRUE6CiAJY2FzZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBOgorI2lmZGVmIFg4Nl9CVFMKIAljYXNlIFBUUkFDRV9CVFNfQ09ORklHOgogCWNhc2UgUFRSQUNFX0JUU19TVEFUVVM6CiAJY2FzZSBQVFJBQ0VfQlRTX1NJWkU6CiAJY2FzZSBQVFJBQ0VfQlRTX0dFVDoKIAljYXNlIFBUUkFDRV9CVFNfQ0xFQVI6CiAJY2FzZSBQVFJBQ0VfQlRTX0RSQUlOOgorI2VuZGlmCiAJCXJldHVybiBzeXNfcHRyYWNlKHJlcXVlc3QsIHBpZCwgYWRkciwgZGF0YSk7CiAKIAlkZWZhdWx0OgpAQCAtMTQyNiw3ICsxNDU2LDYgQEAKIC8qIG5vdGlmaWNhdGlvbiBvZiBzeXN0ZW0gY2FsbCBlbnRyeS9leGl0CiAgKiAtIHRyaWdnZXJlZCBieSBjdXJyZW50LT53b3JrLnN5c2NhbGxfdHJhY2UKICAqLwotX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpCiBpbnQgZG9fc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVudHJ5ZXhpdCkKIHsKIAlpbnQgaXNfc3lzZW11ID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9FTVUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCmluZGV4IGM0NzIwOGYuLmQ4OWE2NDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTM2Myw2ICszNjMsOCBAQAogCQkJbnZpZGlhX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIAogLyogTFBDIGJyaWRnZXMgKi8KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05WSURJQSwgMHgwMjYwLAorCQkJbnZpZGlhX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05WSURJQSwgMHgwMzYwLAogCQkJbnZpZGlhX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05WSURJQSwgMHgwMzYxLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDdmZDZhYzQuLjE5YzkzODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTEsNSArMSw0IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgpAQCAtMTUyLDYgKzE1MSwyNCBAQAogCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMFdGODEwIiksCiAJCX0sCiAJfSwKKwl7ICAgICAgIC8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBEZWxsIE9wdGlwbGV4IDc0NSdzIERGRiovCisJCS5jYWxsYmFjayA9IHNldF9iaW9zX3JlYm9vdCwKKwkJLmlkZW50ID0gIkRlbGwgT3B0aVBsZXggNzQ1IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiT3B0aVBsZXggNzQ1IiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIwTU01OTkiKSwKKwkJfSwKKwl9LAorCXsgICAgICAgLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIERlbGwgT3B0aXBsZXggNzQ1IHdpdGggMEtXNjI2ICovCisJCS5jYWxsYmFjayA9IHNldF9iaW9zX3JlYm9vdCwKKwkJLmlkZW50ID0gIkRlbGwgT3B0aVBsZXggNzQ1IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiT3B0aVBsZXggNzQ1IiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIwS1c2MjYiKSwKKwkJfSwKKwl9LAogCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIERlbGwgMjQwMCdzICovCiAJCS5jYWxsYmFjayA9IHNldF9iaW9zX3JlYm9vdCwKIAkJLmlkZW50ID0gIkRlbGwgUG93ZXJFZGdlIDI0MDAiLApAQCAtMzI2LDYgKzM0MywxMCBAQAogCX0KIH0KIAordm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgbWFjaF9yZWJvb3RfZml4dXBzKHZvaWQpCit7Cit9CisKIHN0YXRpYyB2b2lkIG5hdGl2ZV9tYWNoaW5lX2VtZXJnZW5jeV9yZXN0YXJ0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0zMzcsNiArMzU4LDggQEAKIAkJLyogQ291bGQgYWxzbyB0cnkgdGhlIHJlc2V0IGJpdCBpbiB0aGUgSGFtbWVyIE5CICovCiAJCXN3aXRjaCAocmVib290X3R5cGUpIHsKIAkJY2FzZSBCT09UX0tCRDoKKwkJCW1hY2hfcmVib290X2ZpeHVwcygpOyAvKiBmb3IgYm9hcmQgc3BlY2lmaWMgZml4dXBzICovCisKIAkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCQkJa2Jfd2FpdCgpOwogCQkJCXVkZWxheSg1MCk7CkBAIC0zODgsMTYgKzQxMSwxNiBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBTZWUgaWYgdGhlcmUgaGFzIGJlZW4gZ2l2ZW4gYSBjb21tYW5kIGxpbmUgb3ZlcnJpZGUgKi8KIAlpZiAoKHJlYm9vdF9jcHUgIT0gLTEpICYmIChyZWJvb3RfY3B1IDwgTlJfQ1BVUykgJiYKLQkJY3B1X2lzc2V0KHJlYm9vdF9jcHUsIGNwdV9vbmxpbmVfbWFwKSkKKwkJY3B1X29ubGluZShyZWJvb3RfY3B1KSkKIAkJcmVib290X2NwdV9pZCA9IHJlYm9vdF9jcHU7CiAjZW5kaWYKIAogCS8qIE1ha2UgY2VydGFpbiB0aGUgY3B1IEknbSBhYm91dCB0byByZWJvb3Qgb24gaXMgb25saW5lICovCi0JaWYgKCFjcHVfaXNzZXQocmVib290X2NwdV9pZCwgY3B1X29ubGluZV9tYXApKQorCWlmICghY3B1X29ubGluZShyZWJvb3RfY3B1X2lkKSkKIAkJcmVib290X2NwdV9pZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIE1ha2UgY2VydGFpbiBJIG9ubHkgcnVuIG9uIHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzb3IgKi8KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KHJlYm9vdF9jcHVfaWQpKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUocmVib290X2NwdV9pZCkpOwogCiAJLyogTy5LIE5vdyB0aGF0IEknbSBvbiB0aGUgYXBwcm9wcmlhdGUgcHJvY2Vzc29yLAogCSAqIHN0b3AgYWxsIG9mIHRoZSBvdGhlcnMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMKaW5kZXggZjE1MWQ2Zi4uYzMwZmUyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUwpAQCAtOSwxOCArOSwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAvKgogICogTXVzdCBiZSByZWxvY2F0YWJsZSBQSUMgY29kZSBjYWxsYWJsZSBhcyBhIEMgZnVuY3Rpb24KICAqLwogCiAjZGVmaW5lIFBUUih4KSAoeCA8PCAyKQotI2RlZmluZSBQQUdFX0FMSUdORUQgKDEgPDwgUEFHRV9TSElGVCkKLSNkZWZpbmUgUEFHRV9BVFRSIDB4NjMgLyogX1BBR0VfUFJFU0VOVHxfUEFHRV9SV3xfUEFHRV9BQ0NFU1NFRHxfUEFHRV9ESVJUWSAqLwotI2RlZmluZSBQQUVfUEdEX0FUVFIgMHgwMSAvKiBfUEFHRV9QUkVTRU5UICovCisjZGVmaW5lIFBBR0VfQVRUUiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgUEFFX1BHRF9BVFRSIChfUEFHRV9QUkVTRU5UKQogCiAJLnRleHQKLQkuYWxpZ24gUEFHRV9BTElHTkVECisJLmFsaWduIFBBR0VfU0laRQogCS5nbG9ibCByZWxvY2F0ZV9rZXJuZWwKIHJlbG9jYXRlX2tlcm5lbDoKIAltb3ZsCTgoJWVzcCksICVlYnAgLyogbGlzdCBvZiBwYWdlcyAqLwpAQCAtMTU1LDcgKzE1Niw3IEBACiAJbW92bAklZWF4LCAlY3IzCiAKIAkvKiBzZXR1cCBhIG5ldyBzdGFjayBhdCB0aGUgZW5kIG9mIHRoZSBwaHlzaWNhbCBjb250cm9sIHBhZ2UgKi8KLQlsZWEJNDA5NiglZWRpKSwgJWVzcAorCWxlYQlQQUdFX1NJWkUoJWVkaSksICVlc3AKIAogCS8qIGp1bXAgdG8gaWRlbnRpdHkgbWFwcGVkIHBhZ2UgKi8KIAltb3ZsICAgICVlZGksICVlYXgKQEAgLTE2OCwxNiArMTY5LDE2IEBACiAJcHVzaGwgICAlZWR4CiAKIAkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6Ci0JICogMzEgMCA9PSBQYWdpbmcgZGlzYWJsZWQKLQkgKiAxOCAwID09IEFsaWdubWVudCBjaGVjayBkaXNhYmxlZAotCSAqIDE2IDAgPT0gV3JpdGUgcHJvdGVjdCBkaXNhYmxlZAotCSAqIDMgIDAgPT0gTm8gdGFzayBzd2l0Y2gKLQkgKiAyICAwID09IERvbid0IGRvIEZQIHNvZnR3YXJlIGVtdWxhdGlvbi4KLQkgKiAwICAxID09IFByb2N0ZWN0ZWQgbW9kZSBlbmFibGVkCisJICogIC0gUGFnaW5nIGRpc2FibGVkCisJICogIC0gQWxpZ25tZW50IGNoZWNrIGRpc2FibGVkCisJICogIC0gV3JpdGUgcHJvdGVjdCBkaXNhYmxlZAorCSAqICAtIE5vIHRhc2sgc3dpdGNoCisJICogIC0gRG9uJ3QgZG8gRlAgc29mdHdhcmUgZW11bGF0aW9uLgorCSAqICAtIFByb2N0ZWN0ZWQgbW9kZSBlbmFibGVkCiAJICovCiAJbW92bAklY3IwLCAlZWF4Ci0JYW5kbAkkfigoMTw8MzEpfCgxPDwxOCl8KDE8PDE2KXwoMTw8Myl8KDE8PDIpKSwgJWVheAotCW9ybAkkKDE8PDApLCAlZWF4CisJYW5kbAkkfihYODZfQ1IwX1BHIHwgWDg2X0NSMF9BTSB8IFg4Nl9DUjBfV1AgfCBYODZfQ1IwX1RTIHwgWDg2X0NSMF9FTSksICVlYXgKKwlvcmwJJChYODZfQ1IwX1BFKSwgJWVheAogCW1vdmwJJWVheCwgJWNyMAogCiAJLyogY2xlYXIgY3I0IGlmIGFwcGxpY2FibGUgKi8KQEAgLTE4Niw4ICsxODcsNyBAQAogCS8qIFNldCBjcjQgdG8gYSBrbm93biBzdGF0ZToKIAkgKiBTZXR0aW5nIGV2ZXJ5dGhpbmcgdG8gemVybyBzZWVtcyBzYWZlLgogCSAqLwotCW1vdmwJJWNyNCwgJWVheAotCWFuZGwJJDAsICVlYXgKKwl4b3JsCSVlYXgsICVlYXgKIAltb3ZsCSVlYXgsICVjcjQKIAogCWptcCAxZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TCmluZGV4IDE0ZTk1ODcuLmY1YWZlNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMKQEAgLTksMTcgKzksMTggQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogLyoKICAqIE11c3QgYmUgcmVsb2NhdGFibGUgUElDIGNvZGUgY2FsbGFibGUgYXMgYSBDIGZ1bmN0aW9uCiAgKi8KIAogI2RlZmluZSBQVFIoeCkgKHggPDwgMykKLSNkZWZpbmUgUEFHRV9BTElHTkVEICgxIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIFBBR0VfQVRUUiAweDYzIC8qIF9QQUdFX1BSRVNFTlR8X1BBR0VfUld8X1BBR0VfQUNDRVNTRUR8X1BBR0VfRElSVFkgKi8KKyNkZWZpbmUgUEFHRV9BVFRSIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQogCiAJLnRleHQKLQkuYWxpZ24gUEFHRV9BTElHTkVECisJLmFsaWduIFBBR0VfU0laRQogCS5jb2RlNjQKIAkuZ2xvYmwgcmVsb2NhdGVfa2VybmVsCiByZWxvY2F0ZV9rZXJuZWw6CkBAIC0xNjAsNyArMTYxLDcgQEAKIAltb3ZxCSVyOSwgJWNyMwogCiAJLyogc2V0dXAgYSBuZXcgc3RhY2sgYXQgdGhlIGVuZCBvZiB0aGUgcGh5c2ljYWwgY29udHJvbCBwYWdlICovCi0JbGVhCTQwOTYoJXI4KSwgJXJzcAorCWxlYQlQQUdFX1NJWkUoJXI4KSwgJXJzcAogCiAJLyoganVtcCB0byBpZGVudGl0eSBtYXBwZWQgcGFnZSAqLwogCWFkZHEJJChpZGVudGl0eV9tYXBwZWQgLSByZWxvY2F0ZV9rZXJuZWwpLCAlcjgKQEAgLTE3MiwzMyArMTczLDIyIEBACiAJcHVzaHEgICAlcmR4CiAKIAkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6Ci0JICogMzEgMSA9PSBQYWdpbmcgZW5hYmxlZAotCSAqIDE4IDAgPT0gQWxpZ25tZW50IGNoZWNrIGRpc2FibGVkCi0JICogMTYgMCA9PSBXcml0ZSBwcm90ZWN0IGRpc2FibGVkCi0JICogMyAgMCA9PSBObyB0YXNrIHN3aXRjaAotCSAqIDIgIDAgPT0gRG9uJ3QgZG8gRlAgc29mdHdhcmUgZW11bGF0aW9uLgotCSAqIDAgIDEgPT0gUHJvY3RlY3RlZCBtb2RlIGVuYWJsZWQKKwkgKiAgLSBQYWdpbmcgZW5hYmxlZAorCSAqICAtIEFsaWdubWVudCBjaGVjayBkaXNhYmxlZAorCSAqICAtIFdyaXRlIHByb3RlY3QgZGlzYWJsZWQKKwkgKiAgLSBObyB0YXNrIHN3aXRjaAorCSAqICAtIERvbid0IGRvIEZQIHNvZnR3YXJlIGVtdWxhdGlvbi4KKwkgKiAgLSBQcm9jdGVjdGVkIG1vZGUgZW5hYmxlZAogCSAqLwogCW1vdnEJJWNyMCwgJXJheAotCWFuZHEJJH4oKDE8PDE4KXwoMTw8MTYpfCgxPDwzKXwoMTw8MikpLCAlcmF4Ci0Jb3JsCSQoKDE8PDMxKXwoMTw8MCkpLCAlZWF4CisJYW5kcQkkfihYODZfQ1IwX0FNIHwgWDg2X0NSMF9XUCB8IFg4Nl9DUjBfVFMgfCBYODZfQ1IwX0VNKSwgJXJheAorCW9ybAkkKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFKSwgJWVheAogCW1vdnEJJXJheCwgJWNyMAogCiAJLyogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgotCSAqIDEwIDAgPT0geG1tIGV4Y2VwdGlvbnMgZGlzYWJsZWQKLQkgKiA5ICAwID09IHhtbSByZWdpc3RlcnMgaW5zdHJ1Y3Rpb25zIGRpc2FibGVkCi0JICogOCAgMCA9PSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGNvdW50ZXIgZGlzYWJsZWQKLQkgKiA3ICAwID09IHBhZ2UgZ2xvYmFsIGRpc2FibGVkCi0JICogNiAgMCA9PSBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnMgZGlzYWJsZWQKLQkgKiA1ICAxID09IHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9uIGVuYWJsZWQKLQkgKiA0ICAwID09IHBhZ2Ugc2l6ZSBleHRlbnNpb25zCWRpc2FibGVkCi0JICogMyAgMCA9PSBEZWJ1ZyBleHRlbnNpb25zIGRpc2FibGVkCi0JICogMiAgMCA9PSBUaW1lIHN0YW1wIGRpc2FibGUgKGRpc2FibGVkKQotCSAqIDEgIDAgPT0gUHJvdGVjdGVkIG1vZGUgdmlydHVhbCBpbnRlcnJ1cHRzIGRpc2FibGVkCi0JICogMCAgMCA9PSBWTUUgZGlzYWJsZWQKKwkgKiAgLSBwaHlzaWNhbCBhZGRyZXNzIGV4dGVuc2lvbiBlbmFibGVkCiAJICovCi0KLQltb3ZxCSQoKDE8PDUpKSwgJXJheAorCW1vdnEJJFg4Nl9DUjRfUEFFLCAlcmF4CiAJbW92cQklcmF4LCAlY3I0CiAKIAlqbXAgMWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYyBiL2FyY2gveDg2L2tlcm5lbC9ydGMuYwppbmRleCBlYjliMWExLi45NjE1ZWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3J0Yy5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgQ01PU19ZRUFSU19PRkZTIDE5MDAKIC8qCiAgKiBUaGlzIGlzIGEgc3BlY2lhbCBsb2NrIHRoYXQgaXMgb3duZWQgYnkgdGhlIENQVSBhbmQgaG9sZHMgdGhlIGluZGV4CiAgKiByZWdpc3RlciB3ZSBhcmUgd29ya2luZyB3aXRoLiAgSXQgaXMgcmVxdWlyZWQgZm9yIE5NSSBhY2Nlc3MgdG8gdGhlCkBAIC0xNywxNCArMTYsMTEgQEAKICAqLwogdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjbW9zX2xvY2sgPSAwOwogRVhQT1JUX1NZTUJPTChjbW9zX2xvY2spOwotI2Vsc2UKLS8qCi0gKiB4ODYtNjQgc3lzdGVtcyBvbmx5IGV4aXN0cyBzaW5jZSAyMDAyLgotICogVGhpcyB3aWxsIHdvcmsgdXAgdG8gRGVjIDMxLCAyMTAwCi0gKi8KLSMgZGVmaW5lIENNT1NfWUVBUlNfT0ZGUyAyMDAwCiAjZW5kaWYKIAorLyogRm9yIHR3byBkaWdpdCB5ZWFycyBhc3N1bWUgdGltZSBpcyBhbHdheXMgYWZ0ZXIgdGhhdCAqLworI2RlZmluZSBDTU9TX1lFQVJTX09GRlMgMjAwMAorCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CiAKQEAgLTk4LDcgKzk0LDcgQEAKIAogdW5zaWduZWQgbG9uZyBtYWNoX2dldF9jbW9zX3RpbWUodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjLCBjZW50dXJ5ID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCB5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWMsIGNlbnR1cnkgPSAwOwogCiAJLyoKIAkgKiBJZiBVSVAgaXMgY2xlYXIsIHRoZW4gd2UgaGF2ZSA+PSAyNDQgbWljcm9zZWNvbmRzIGJlZm9yZQpAQCAtMTE2LDE0ICsxMTIsMTYgQEAKIAltb24gPSBDTU9TX1JFQUQoUlRDX01PTlRIKTsKIAl5ZWFyID0gQ01PU19SRUFEKFJUQ19ZRUFSKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpICYmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQkvKiBDSEVDS01FOiBJcyB0aGlzIHJlYWxseSA2NGJpdCBvbmx5ID8/PyAqLworI2lmZGVmIENPTkZJR19BQ1BJCiAJaWYgKGFjcGlfZ2JsX0ZBRFQuaGVhZGVyLnJldmlzaW9uID49IEZBRFQyX1JFVklTSU9OX0lEICYmCiAJICAgIGFjcGlfZ2JsX0ZBRFQuY2VudHVyeSkKIAkJY2VudHVyeSA9IENNT1NfUkVBRChhY3BpX2dibF9GQURULmNlbnR1cnkpOwogI2VuZGlmCiAKLQlpZiAoUlRDX0FMV0FZU19CQ0QgfHwgIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkpIHsKKwlzdGF0dXMgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOworCVdBUk5fT05fT05DRShSVENfQUxXQVlTX0JDRCAmJiAoc3RhdHVzICYgUlRDX0RNX0JJTkFSWSkpOworCisJaWYgKFJUQ19BTFdBWVNfQkNEIHx8ICEoc3RhdHVzICYgUlRDX0RNX0JJTkFSWSkpIHsKIAkJQkNEX1RPX0JJTihzZWMpOwogCQlCQ0RfVE9fQklOKG1pbik7CiAJCUJDRF9UT19CSU4oaG91cik7CkBAIC0xMzYsMTEgKzEzNCw4IEBACiAJCUJDRF9UT19CSU4oY2VudHVyeSk7CiAJCXllYXIgKz0gY2VudHVyeSAqIDEwMDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRXh0ZW5kZWQgQ01PUyB5ZWFyOiAlZFxuIiwgY2VudHVyeSAqIDEwMCk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJeWVhciArPSBDTU9TX1lFQVJTX09GRlM7Ci0JCWlmICh5ZWFyIDwgMTk3MCkKLQkJCXllYXIgKz0gMTAwOwotCX0KIAogCXJldHVybiBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKIH0KQEAgLTE1MSw4ICsxNDYsOCBAQAogCXVuc2lnbmVkIGNoYXIgdmFsOwogCiAJbG9ja19jbW9zX3ByZWZpeChhZGRyKTsKLQlvdXRiX3AoYWRkciwgUlRDX1BPUlQoMCkpOwotCXZhbCA9IGluYl9wKFJUQ19QT1JUKDEpKTsKKwlvdXRiKGFkZHIsIFJUQ19QT1JUKDApKTsKKwl2YWwgPSBpbmIoUlRDX1BPUlQoMSkpOwogCWxvY2tfY21vc19zdWZmaXgoYWRkcik7CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTE2MSw4ICsxNTYsOCBAQAogdm9pZCBydGNfY21vc193cml0ZSh1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKQogewogCWxvY2tfY21vc19wcmVmaXgoYWRkcik7Ci0Jb3V0Yl9wKGFkZHIsIFJUQ19QT1JUKDApKTsKLQlvdXRiX3AodmFsLCBSVENfUE9SVCgxKSk7CisJb3V0YihhZGRyLCBSVENfUE9SVCgwKSk7CisJb3V0Yih2YWwsIFJUQ19QT1JUKDEpKTsKIAlsb2NrX2Ntb3Nfc3VmZml4KGFkZHIpOwogfQogRVhQT1JUX1NZTUJPTChydGNfY21vc193cml0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMWY0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMCwwICsxLDEzOSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CisKK3Vuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKK3Vuc2lnbmVkIGRpc2FibGVkX2NwdXMgX19jcHVpbml0ZGF0YTsKKy8qIFByb2Nlc3NvciB0aGF0IGlzIGRvaW5nIHRoZSBib290IHVwICovCit1bnNpZ25lZCBpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gLTFVOworRVhQT1JUX1NZTUJPTChib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworCitwaHlzaWRfbWFza190IHBoeXNfY3B1X3ByZXNlbnRfbWFwOworCitERUZJTkVfUEVSX0NQVSh1MTYsIHg4Nl9jcHVfdG9fYXBpY2lkKSA9IEJBRF9BUElDSUQ7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOworCisvKiBCaXRtYXNrIG9mIHBoeXNpY2FsbHkgZXhpc3RpbmcgQ1BVcyAqLworcGh5c2lkX21hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKKworI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCisvKgorICogQ29weSBkYXRhIHVzZWQgaW4gZWFybHkgaW5pdCByb3V0aW5lcyBmcm9tIHRoZSBpbml0aWFsIGFycmF5cyB0byB0aGUKKyAqIHBlciBjcHUgZGF0YSBhcmVhcy4gIFRoZXNlIGFycmF5cyB0aGVuIGJlY29tZSBleHBlbmRhYmxlIGFuZCB0aGUKKyAqICpfZWFybHlfcHRyJ3MgYXJlIHplcm9lZCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN0YXRpYyBhcnJheXMgYXJlIGdvbmUuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X21hcHModm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0geDg2X2NwdV90b19hcGljaWRfaW5pdFtjcHVdOworCQlwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkgPQorCQkJCQkJeDg2X2Jpb3NfY3B1X2FwaWNpZF9pbml0W2NwdV07CisjaWZkZWYgQ09ORklHX05VTUEKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX25vZGVfbWFwLCBjcHUpID0KKwkJCQkJCXg4Nl9jcHVfdG9fbm9kZV9tYXBfaW5pdFtjcHVdOworI2VuZGlmCisJfQorCisJLyogaW5kaWNhdGUgdGhlIGVhcmx5IHN0YXRpYyBhcnJheXMgd2lsbCBzb29uIGJlIGdvbmUgKi8KKwl4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHIgPSBOVUxMOworCXg4Nl9iaW9zX2NwdV9hcGljaWRfZWFybHlfcHRyID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfTlVNQQorCXg4Nl9jcHVfdG9fbm9kZV9tYXBfZWFybHlfcHRyID0gTlVMTDsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX0hBVkVfQ1BVTUFTS19PRl9DUFVfTUFQCitjcHVtYXNrX3QgKmNwdW1hc2tfb2ZfY3B1X21hcCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChjcHVtYXNrX29mX2NwdV9tYXApOworCisvKiByZXF1aXJlcyBucl9jcHVfaWRzIHRvIGJlIGluaXRpYWxpemVkICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfY3B1bWFza19vZl9jcHUodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIGFsbG9jX2Jvb3RtZW0gemVyb2VzIG1lbW9yeSAqLworCWNwdW1hc2tfb2ZfY3B1X21hcCA9IGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZihjcHVtYXNrX3QpICogbnJfY3B1X2lkcyk7CisJZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKykKKwkJY3B1X3NldChpLCBjcHVtYXNrX29mX2NwdV9tYXBbaV0pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9jcHVtYXNrX29mX2NwdSh2b2lkKSB7IH0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIEdyZWF0IGZ1dHVyZSBub3Qtc28tZnV0dXJpc3RpYyBwbGFuOiBtYWtlIGkzODYgYW5kIHg4Nl82NCBkbyBpdAorICogdGhlIHNhbWUgd2F5CisgKi8KK3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTsKKyNlbmRpZgorCisvKgorICogR3JlYXQgZnV0dXJlIHBsYW46CisgKiBEZWNsYXJlIFBEQSBpdHNlbGYgYW5kIHN1cHBvcnQgKGlycXN0YWNrLHRzcyxwZ2QpIGFzIHBlciBjcHUgZGF0YS4KKyAqIEFsd2F5cyBwb2ludCAlZ3MgdG8gaXRzIGJlZ2lubmluZworICovCit2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCit7CisJaW50IGksIGhpZ2hlc3RfY3B1ID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlwcmVmaWxsX3Bvc3NpYmxlX21hcCgpOworI2VuZGlmCisKKwkvKiBDb3B5IHNlY3Rpb24gZm9yIGVhY2ggQ1BVICh3ZSBkaXNjYXJkIHRoZSBvcmlnaW5hbCkgKi8KKwlzaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOworCXByaW50ayhLRVJOX0lORk8gIlBFUkNQVTogQWxsb2NhdGluZyAlbHUgYnl0ZXMgb2YgcGVyIGNwdSBkYXRhXG4iLAorCQkJICBzaXplKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCWNoYXIgKnB0cjsKKyNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKwkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKKyNlbHNlCisJCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoaSk7CisJCWlmICghbm9kZV9vbmxpbmUobm9kZSkgfHwgIU5PREVfREFUQShub2RlKSkgeworCQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiY3B1ICVkIGhhcyBubyBub2RlIG9yIG5vZGUtbG9jYWwgbWVtb3J5XG4iLCBpKTsKKwkJfQorCQllbHNlCisJCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBzaXplKTsKKyNlbmRpZgorCQlpZiAoIXB0cikKKwkJCXBhbmljKCJDYW5ub3QgYWxsb2NhdGUgY3B1IGRhdGEgZm9yIENQVSAlZFxuIiwgaSk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQljcHVfcGRhKGkpLT5kYXRhX29mZnNldCA9IHB0ciAtIF9fcGVyX2NwdV9zdGFydDsKKyNlbHNlCisJCV9fcGVyX2NwdV9vZmZzZXRbaV0gPSBwdHIgLSBfX3Blcl9jcHVfc3RhcnQ7CisjZW5kaWYKKwkJbWVtY3B5KHB0ciwgX19wZXJfY3B1X3N0YXJ0LCBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0KTsKKworCQloaWdoZXN0X2NwdSA9IGk7CisJfQorCisJbnJfY3B1X2lkcyA9IGhpZ2hlc3RfY3B1ICsgMTsKKwlwcmludGsoS0VSTl9ERUJVRyAiTlJfQ1BVUzogJWQsIG5yX2NwdV9pZHM6ICVkXG4iLCBOUl9DUFVTLCBucl9jcHVfaWRzKTsKKworCS8qIFNldHVwIHBlcmNwdSBkYXRhIG1hcHMgKi8KKwlzZXR1cF9wZXJfY3B1X21hcHMoKTsKKworCS8qIFNldHVwIGNwdW1hc2tfb2ZfY3B1IG1hcCAqLworCXNldHVwX2NwdW1hc2tfb2ZfY3B1KCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cDY0LmMKaW5kZXggMzA5MzY2Zi4uYWVlMGU4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXA2NC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KICNpbmNsdWRlIDxhc20vcGRhLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0yMyw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KIAogI2lmbmRlZiBDT05GSUdfREVCVUdfQk9PVF9QQVJBTVMKIHN0cnVjdCBib290X3BhcmFtcyBfX2luaXRkYXRhIGJvb3RfcGFyYW1zOwpAQCAtNzIsOCArNzQsOCBAQAogQ29udHJvbCBub24gZXhlY3V0YWJsZSBoZWFwIGZvciAzMmJpdCBwcm9jZXNzZXMuCiBUbyBjb250cm9sIHRoZSBzdGFjayB0b28gdXNlIG5vZXhlYz1vZmYKIAotb24JUFJPVF9SRUFEIGRvZXMgbm90IGltcGx5IFBST1RfRVhFQyBmb3IgMzJiaXQgcHJvY2Vzc2VzCi1vZmYJUFJPVF9SRUFEIGltcGxpZXMgUFJPVF9FWEVDIChkZWZhdWx0KQorb24JUFJPVF9SRUFEIGRvZXMgbm90IGltcGx5IFBST1RfRVhFQyBmb3IgMzJiaXQgcHJvY2Vzc2VzIChkZWZhdWx0KQorb2ZmCVBST1RfUkVBRCBpbXBsaWVzIFBST1RfRVhFQwogKi8KIHN0YXRpYyBpbnQgX19pbml0IG5vbngzMl9zZXR1cChjaGFyICpzdHIpCiB7CkBAIC04NSw4MSArODcsNiBAQAogfQogX19zZXR1cCgibm9leGVjMzI9Iiwgbm9ueDMyX3NldHVwKTsKIAotLyoKLSAqIENvcHkgZGF0YSB1c2VkIGluIGVhcmx5IGluaXQgcm91dGluZXMgZnJvbSB0aGUgaW5pdGlhbCBhcnJheXMgdG8gdGhlCi0gKiBwZXIgY3B1IGRhdGEgYXJlYXMuICBUaGVzZSBhcnJheXMgdGhlbiBiZWNvbWUgZXhwZW5kYWJsZSBhbmQgdGhlCi0gKiAqX2Vhcmx5X3B0cidzIGFyZSB6ZXJvZWQgaW5kaWNhdGluZyB0aGF0IHRoZSBzdGF0aWMgYXJyYXlzIGFyZSBnb25lLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9tYXBzKHZvaWQpCi17Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWlmIChwZXJfY3B1X29mZnNldChjcHUpKSB7Ci0jZW5kaWYKLQkJCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkgPQotCQkJCQkJeDg2X2NwdV90b19hcGljaWRfaW5pdFtjcHVdOwotCQkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0KLQkJCQkJCXg4Nl9iaW9zX2NwdV9hcGljaWRfaW5pdFtjcHVdOwotI2lmZGVmIENPTkZJR19OVU1BCi0JCQlwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSkgPQotCQkJCQkJeDg2X2NwdV90b19ub2RlX21hcF9pbml0W2NwdV07Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0JCX0KLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJwZXJfY3B1X29mZnNldCB6ZXJvIGZvciBjcHUgJWRcbiIsCi0JCQkJCQkJCQljcHUpOwotI2VuZGlmCi0JfQotCi0JLyogaW5kaWNhdGUgdGhlIGVhcmx5IHN0YXRpYyBhcnJheXMgd2lsbCBzb29uIGJlIGdvbmUgKi8KLQl4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHIgPSBOVUxMOwotCXg4Nl9iaW9zX2NwdV9hcGljaWRfZWFybHlfcHRyID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfTlVNQQotCXg4Nl9jcHVfdG9fbm9kZV9tYXBfZWFybHlfcHRyID0gTlVMTDsKLSNlbmRpZgotfQotCi0vKgotICogR3JlYXQgZnV0dXJlIHBsYW46Ci0gKiBEZWNsYXJlIFBEQSBpdHNlbGYgYW5kIHN1cHBvcnQgKGlycXN0YWNrLHRzcyxwZ2QpIGFzIHBlciBjcHUgZGF0YS4KLSAqIEFsd2F5cyBwb2ludCAlZ3MgdG8gaXRzIGJlZ2lubmluZwotICovCi12b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCi17IAotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCXByZWZpbGxfcG9zc2libGVfbWFwKCk7Ci0jZW5kaWYKLQotCS8qIENvcHkgc2VjdGlvbiBmb3IgZWFjaCBDUFUgKHdlIGRpc2NhcmQgdGhlIG9yaWdpbmFsKSAqLwotCXNpemUgPSBQRVJDUFVfRU5PVUdIX1JPT007Ci0KLQlwcmludGsoS0VSTl9JTkZPICJQRVJDUFU6IEFsbG9jYXRpbmcgJWx1IGJ5dGVzIG9mIHBlciBjcHUgZGF0YVxuIiwgc2l6ZSk7Ci0JZm9yX2VhY2hfY3B1X21hc2sgKGksIGNwdV9wb3NzaWJsZV9tYXApIHsKLQkJY2hhciAqcHRyOwotCi0JCWlmICghTk9ERV9EQVRBKGVhcmx5X2NwdV90b19ub2RlKGkpKSkgewotCQkJcHJpbnRrKCJjcHUgd2l0aCBubyBub2RlICVkLCBudW1fb25saW5lX25vZGVzICVkXG4iLAotCQkJICAgICAgIGksIG51bV9vbmxpbmVfbm9kZXMoKSk7Ci0JCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzKHNpemUpOwotCQl9IGVsc2UgeyAKLQkJCXB0ciA9IGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZShOT0RFX0RBVEEoZWFybHlfY3B1X3RvX25vZGUoaSkpLCBzaXplKTsKLQkJfQotCQlpZiAoIXB0cikKLQkJCXBhbmljKCJDYW5ub3QgYWxsb2NhdGUgY3B1IGRhdGEgZm9yIENQVSAlZFxuIiwgaSk7Ci0JCWNwdV9wZGEoaSktPmRhdGFfb2Zmc2V0ID0gcHRyIC0gX19wZXJfY3B1X3N0YXJ0OwotCQltZW1jcHkocHRyLCBfX3Blcl9jcHVfc3RhcnQsIF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQpOwotCX0KLQotCS8qIHNldHVwIHBlcmNwdSBkYXRhIG1hcHMgZWFybHkgKi8KLQlzZXR1cF9wZXJfY3B1X21hcHMoKTsKLX0gCi0KIHZvaWQgcGRhX2luaXQoaW50IGNwdSkKIHsgCiAJc3RydWN0IHg4NjY0X3BkYSAqcGRhID0gY3B1X3BkYShjcHUpOwpAQCAtMzI1LDYgKzI1MiwxNyBAQAogCWxvYWRfVFJfZGVzYygpOwogCWxvYWRfTERUKCZpbml0X21tLmNvbnRleHQpOwogCisjaWZkZWYgQ09ORklHX0tHREIKKwkvKgorCSAqIElmIHRoZSBrZ2RiIGlzIGNvbm5lY3RlZCBubyBkZWJ1ZyByZWdzIHNob3VsZCBiZSBhbHRlcmVkLiAgVGhpcworCSAqIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIEtHREIgYW5kIGEgS0dEQiBJL08gbW9kdWxlIGFyZSBidWlsdAorCSAqIGludG8gdGhlIGtlcm5lbCBhbmQgeW91IGFyZSB1c2luZyBlYXJseSBkZWJ1Z2dpbmcgd2l0aAorCSAqIGtnZGJ3YWl0LiBLR0RCIHdpbGwgY29udHJvbCB0aGUga2VybmVsIEhXIGJyZWFrcG9pbnQgcmVnaXN0ZXJzLgorCSAqLworCWlmIChrZ2RiX2Nvbm5lY3RlZCAmJiBhcmNoX2tnZGJfb3BzLmNvcnJlY3RfaHdfYnJlYWspCisJCWFyY2hfa2dkYl9vcHMuY29ycmVjdF9od19icmVhaygpOworCWVsc2UgeworI2VuZGlmCiAJLyoKIAkgKiBDbGVhciBhbGwgNiBkZWJ1ZyByZWdpc3RlcnM6CiAJICovCkBAIC0zMzUsOCArMjczLDE1IEBACiAJc2V0X2RlYnVncmVnKDBVTCwgMyk7CiAJc2V0X2RlYnVncmVnKDBVTCwgNik7CiAJc2V0X2RlYnVncmVnKDBVTCwgNyk7CisjaWZkZWYgQ09ORklHX0tHREIKKwkvKiBJZiB0aGUga2dkYiBpcyBjb25uZWN0ZWQgbm8gZGVidWcgcmVncyBzaG91bGQgYmUgYWx0ZXJlZC4gKi8KKwl9CisjZW5kaWYKIAogCWZwdV9pbml0KCk7IAogCiAJcmF3X2xvY2FsX3NhdmVfZmxhZ3Moa2VybmVsX2VmbGFncyk7CisKKwlpZiAoaXNfdXZfc3lzdGVtKCkpCisJCXV2X2NwdV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IDY5MWFiNGMuLjc4ODI4YjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2VkZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lzY3NpX2liZnQuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgpAQCAtNjIsOCArNjMsOSBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS92bWkuaD4KICNpbmNsdWRlIDxzZXR1cF9hcmNoLmg+Ci0jaW5jbHVkZSA8Ymlvc19lYmRhLmg+CisjaW5jbHVkZSA8YXNtL2Jpb3NfZWJkYS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAvKiBUaGlzIHZhbHVlIGlzIHNldCB1cCBieSB0aGUgZWFybHkgYm9vdCBjb2RlIHRvIHBvaW50IHRvIHRoZSB2YWx1ZQogICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGJvb3QgdGltZSBwYWdlIHRhYmxlcy4gIEl0IGNvbnRhaW5zIGEgKnBoeXNpY2FsKgpAQCAtMTU0LDYgKzE1Niw4IEBACiBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YSBfX3JlYWRfbW9zdGx5ID0geyAwLCAwLCAwLCAwLCAtMSwgMSwgMCwgMCwgLTEgfTsKIEVYUE9SVF9TWU1CT0woYm9vdF9jcHVfZGF0YSk7CiAKK3Vuc2lnbmVkIGludCBkZWZfdG9fYmlnc21wOworCiAjaWZuZGVmIENPTkZJR19YODZfUEFFCiB1bnNpZ25lZCBsb25nIG1tdV9jcjRfZmVhdHVyZXM7CiAjZWxzZQpAQCAtMTY0LDcgKzE2OCw2IEBACiB1bnNpZ25lZCBpbnQgbWFjaGluZV9pZDsKIHVuc2lnbmVkIGludCBtYWNoaW5lX3N1Ym1vZGVsX2lkOwogdW5zaWduZWQgaW50IEJJT1NfcmV2aXNpb247Ci11bnNpZ25lZCBpbnQgbWNhX3BlbnRpdW1fZmxhZzsKIAogLyogQm9vdCBsb2FkZXIgSUQgYXMgYW4gaW50ZWdlciwgZm9yIHRoZSBiZW5lZml0IG9mIHByb2NfZG9pbnR2ZWMgKi8KIGludCBib290bG9hZGVyX3R5cGU7CkBAIC0xOTAsNyArMTkzLDcgQEAKIGV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCByb290X21vdW50ZmxhZ3M7CiAKLXVuc2lnbmVkIGxvbmcgc2F2ZWRfdmlkZW9tb2RlOwordW5zaWduZWQgbG9uZyBzYXZlZF92aWRlb19tb2RlOwogCiAjZGVmaW5lIFJBTURJU0tfSU1BR0VfU1RBUlRfTUFTSwkweDA3RkYKICNkZWZpbmUgUkFNRElTS19QUk9NUFRfRkxBRwkJMHg4MDAwCkBAIC0yMjgsNyArMjMxLDcgQEAKIH0KICNlbmRpZgogCi1pbnQgX19pbml0ZGF0YSB1c2VyX2RlZmluZWRfbWVtbWFwID0gMDsKK2ludCBfX2luaXRkYXRhIHVzZXJfZGVmaW5lZF9tZW1tYXA7CiAKIC8qCiAgKiAibWVtPW5vcGVudGl1bSIgZGlzYWJsZXMgdGhlIDRNQiBwYWdlIHRhYmxlcy4KQEAgLTM4NiwxNSArMzg5LDU2IEBACiAJcmV0dXJuIG1heF9sb3dfcGZuOwogfQogCisjZGVmaW5lIEJJT1NfRUJEQV9TRUdNRU5UIDB4NDBFCisjZGVmaW5lIEJJT1NfTE9XTUVNX0tJTE9CWVRFUyAweDQxMworCiAvKgotICogd29ya2Fyb3VuZCBmb3IgRGVsbCBzeXN0ZW1zIHRoYXQgbmVnbGVjdCB0byByZXNlcnZlIEVCREEKKyAqIFRoZSBCSU9TIHBsYWNlcyB0aGUgRUJEQS9YQkRBIGF0IHRoZSB0b3Agb2YgY29udmVudGlvbmFsCisgKiBtZW1vcnksIGFuZCB1c3VhbGx5IGRlY3JlYXNlcyB0aGUgcmVwb3J0ZWQgYW1vdW50IG9mCisgKiBjb252ZW50aW9uYWwgbWVtb3J5IChpbnQgMHgxMikgdG9vLiBUaGlzIGFsc28gY29udGFpbnMgYQorICogd29ya2Fyb3VuZCBmb3IgRGVsbCBzeXN0ZW1zIHRoYXQgbmVnbGVjdCB0byByZXNlcnZlIEVCREEuCisgKiBUaGUgc2FtZSB3b3JrYXJvdW5kIGFsc28gYXZvaWRzIGEgcHJvYmxlbSB3aXRoIHRoZSBBTUQ3NjhNUFgKKyAqIGNoaXBzZXQ6IHJlc2VydmUgYSBwYWdlIGJlZm9yZSBWR0EgdG8gcHJldmVudCBQQ0kgcHJlZmV0Y2gKKyAqIGludG8gaXQgKGVycmF0YSAjNTYpLiBVc3VhbGx5IHRoZSBwYWdlIGlzIHJlc2VydmVkIGFueXdheXMsCisgKiB1bmxlc3MgeW91IGhhdmUgbm8gUFMvMiBtb3VzZSBwbHVnZ2VkIGluLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9lYmRhX3JlZ2lvbih2b2lkKQogewotCXVuc2lnbmVkIGludCBhZGRyOwotCWFkZHIgPSBnZXRfYmlvc19lYmRhKCk7Ci0JaWYgKGFkZHIpCi0JCXJlc2VydmVfYm9vdG1lbShhZGRyLCBQQUdFX1NJWkUsIEJPT1RNRU1fREVGQVVMVCk7CisJdW5zaWduZWQgaW50IGxvd21lbSwgZWJkYV9hZGRyOworCisJLyogVG8gZGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgRUJEQSBhbmQgdGhlICovCisJLyogZW5kIG9mIGNvbnZlbnRpb25hbCBtZW1vcnksIHdlIG5lZWQgdG8gbG9vayBhdCAqLworCS8qIHRoZSBCSU9TIGRhdGEgYXJlYS4gSW4gYSBwYXJhdmlydHVhbCBlbnZpcm9ubWVudCAqLworCS8qIHRoYXQgYXJlYSBpcyBhYnNlbnQuIFdlJ2xsIGp1c3QgaGF2ZSB0byBhc3N1bWUgKi8KKwkvKiB0aGF0IHRoZSBwYXJhdmlydCBjYXNlIGNhbiBoYW5kbGUgbWVtb3J5IHNldHVwICovCisJLyogY29ycmVjdGx5LCB3aXRob3V0IG91ciBoZWxwLiAqLworCWlmIChwYXJhdmlydF9lbmFibGVkKCkpCisJCXJldHVybjsKKworCS8qIGVuZCBvZiBsb3cgKGNvbnZlbnRpb25hbCkgbWVtb3J5ICovCisJbG93bWVtID0gKih1bnNpZ25lZCBzaG9ydCAqKV9fdmEoQklPU19MT1dNRU1fS0lMT0JZVEVTKTsKKwlsb3dtZW0gPDw9IDEwOworCisJLyogc3RhcnQgb2YgRUJEQSBhcmVhICovCisJZWJkYV9hZGRyID0gKih1bnNpZ25lZCBzaG9ydCAqKV9fdmEoQklPU19FQkRBX1NFR01FTlQpOworCWViZGFfYWRkciA8PD0gNDsKKworCS8qIEZpeHVwOiBiaW9zIHB1dHMgYW4gRUJEQSBpbiB0aGUgdG9wIDY0SyBzZWdtZW50ICovCisJLyogb2YgY29udmVudGlvbmFsIG1lbW9yeSwgYnV0IGRvZXMgbm90IGFkanVzdCBsb3dtZW0uICovCisJaWYgKChsb3dtZW0gLSBlYmRhX2FkZHIpIDw9IDB4MTAwMDApCisJCWxvd21lbSA9IGViZGFfYWRkcjsKKworCS8qIEZpeHVwOiBiaW9zIGRvZXMgbm90IHJlcG9ydCBhbiBFQkRBIGF0IGFsbC4gKi8KKwkvKiBTb21lIG9sZCBEZWxscyBzZWVtIHRvIG5lZWQgNGsgYW55aG93IChidWd6aWxsYSAyOTkwKSAqLworCWlmICgoZWJkYV9hZGRyID09IDApICYmIChsb3dtZW0gPj0gMHg5ZjAwMCkpCisJCWxvd21lbSA9IDB4OWYwMDA7CisKKwkvKiBQYXJhbm9pYTogc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0Li4uICovCisJaWYgKChsb3dtZW0gPT0gMCkgfHwgKGxvd21lbSA+PSAweDEwMDAwMCkpCisJCWxvd21lbSA9IDB4OWYwMDA7CisKKwkvKiByZXNlcnZlIGFsbCBtZW1vcnkgYmV0d2VlbiBsb3dtZW0gYW5kIHRoZSAxTUIgbWFyayAqLworCXJlc2VydmVfYm9vdG1lbShsb3dtZW0sIDB4MTAwMDAwIC0gbG93bWVtLCBCT09UTUVNX0RFRkFVTFQpOwogfQogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCkBAIC00MDcsOCArNDUxLDYgQEAKIAkgKi8KIAltaW5fbG93X3BmbiA9IFBGTl9VUChpbml0X3BnX3RhYmxlc19lbmQpOwogCi0JZmluZF9tYXhfcGZuKCk7Ci0KIAltYXhfbG93X3BmbiA9IGZpbmRfbWF4X2xvd19wZm4oKTsKIAogI2lmZGVmIENPTkZJR19ISUdITUVNCkBAIC02MjAsMTYgKzY2Miw5IEBACiAJICovCiAJcmVzZXJ2ZV9ib290bWVtKDAsIFBBR0VfU0laRSwgQk9PVE1FTV9ERUZBVUxUKTsKIAotCS8qIHJlc2VydmUgRUJEQSByZWdpb24sIGl0J3MgYSA0SyByZWdpb24gKi8KKwkvKiByZXNlcnZlIEVCREEgcmVnaW9uICovCiAJcmVzZXJ2ZV9lYmRhX3JlZ2lvbigpOwogCi0gICAgLyogY291bGQgYmUgYW4gQU1EIDc2OE1QWCBjaGlwc2V0LiBSZXNlcnZlIGEgcGFnZSAgYmVmb3JlIFZHQSB0byBwcmV2ZW50Ci0gICAgICAgUENJIHByZWZldGNoIGludG8gaXQgKGVycmF0YSAjNTYpLiBVc3VhbGx5IHRoZSBwYWdlIGlzIHJlc2VydmVkIGFueXdheXMsCi0gICAgICAgdW5sZXNzIHlvdSBoYXZlIG5vIFBTLzIgbW91c2UgcGx1Z2dlZCBpbi4gKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCi0JICAgIGJvb3RfY3B1X2RhdGEueDg2ID09IDYpCi0JICAgICByZXNlcnZlX2Jvb3RtZW0oMHhhMDAwMCAtIDQwOTYsIDQwOTYsIEJPT1RNRU1fREVGQVVMVCk7Ci0KICNpZmRlZiBDT05GSUdfU01QCiAJLyoKIAkgKiBCdXQgZmlyc3QgcGluY2ggYSBmZXcgZm9yIHRoZSBzdGFjay90cmFtcG9saW5lIHN0dWZmCkBAIC02NTUsNiArNjkwLDggQEAKICNlbmRpZgogCW51bWFfa3ZhX3Jlc2VydmUoKTsKIAlyZXNlcnZlX2NyYXNoa2VybmVsKCk7CisKKwlyZXNlcnZlX2liZnRfcmVnaW9uKCk7CiB9CiAKIC8qCkBAIC02OTAsNiArNzI3LDE4IEBACiAJcmV0dXJuIG1hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorLyoKKyAqIEluIHRoZSBnb2xkZW4gZGF5LCB3aGVuIGV2ZXJ5dGhpbmcgYW1vbmcgaTM4NiBhbmQgeDg2XzY0IHdpbGwgYmUKKyAqIGludGVncmF0ZWQsIHRoaXMgd2lsbCBub3QgbGl2ZSBoZXJlCisgKi8KK3ZvaWQgKng4Nl9jcHVfdG9fbm9kZV9tYXBfZWFybHlfcHRyOworaW50IHg4Nl9jcHVfdG9fbm9kZV9tYXBfaW5pdFtOUl9DUFVTXSA9IHsKKwlbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERQorfTsKK0RFRklORV9QRVJfQ1BVKGludCwgeDg2X2NwdV90b19ub2RlX21hcCkgPSBOVU1BX05PX05PREU7CisjZW5kaWYKKwogLyoKICAqIERldGVybWluZSBpZiB3ZSB3ZXJlIGxvYWRlZCBieSBhbiBFRkkgbG9hZGVyLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSBhbHNvIGJlZW4KICAqIHBhc3NlZCB0aGUgZWZpIG1lbW1hcCwgc3lzdGFiLCBldGMuLCBzbyB3ZSBzaG91bGQgdXNlIHRoZXNlIGRhdGEgc3RydWN0dXJlcwpAQCAtNzE3LDcgKzc2Niw3IEBACiAJZWRpZF9pbmZvID0gYm9vdF9wYXJhbXMuZWRpZF9pbmZvOwogCWFwbV9pbmZvLmJpb3MgPSBib290X3BhcmFtcy5hcG1fYmlvc19pbmZvOwogCWlzdF9pbmZvID0gYm9vdF9wYXJhbXMuaXN0X2luZm87Ci0Jc2F2ZWRfdmlkZW9tb2RlID0gYm9vdF9wYXJhbXMuaGRyLnZpZF9tb2RlOworCXNhdmVkX3ZpZGVvX21vZGUgPSBib290X3BhcmFtcy5oZHIudmlkX21vZGU7CiAJaWYoIGJvb3RfcGFyYW1zLnN5c19kZXNjX3RhYmxlLmxlbmd0aCAhPSAwICkgewogCQlzZXRfbWNhX2J1cyhib290X3BhcmFtcy5zeXNfZGVzY190YWJsZS50YWJsZVszXSAmIDB4Mik7CiAJCW1hY2hpbmVfaWQgPSBib290X3BhcmFtcy5zeXNfZGVzY190YWJsZS50YWJsZVswXTsKQEAgLTc2NSwxMiArODE0LDEzIEBACiAJaWYgKGVmaV9lbmFibGVkKQogCQllZmlfaW5pdCgpOwogCi0JbWF4X2xvd19wZm4gPSBzZXR1cF9tZW1vcnkoKTsKLQogCS8qIHVwZGF0ZSBlODIwIGZvciBtZW1vcnkgbm90IGNvdmVyZWQgYnkgV0IgTVRSUnMgKi8KKwlwcm9wYWdhdGVfZTgyMF9tYXAoKTsKIAltdHJyX2JwX2luaXQoKTsKIAlpZiAobXRycl90cmltX3VuY2FjaGVkX21lbW9yeShtYXhfcGZuKSkKLQkJbWF4X2xvd19wZm4gPSBzZXR1cF9tZW1vcnkoKTsKKwkJcHJvcGFnYXRlX2U4MjBfbWFwKCk7CisKKwltYXhfbG93X3BmbiA9IHNldHVwX21lbW9yeSgpOwogCiAjaWZkZWYgQ09ORklHX1ZNSQogCS8qCkBAIC04MjIsNiArODcyLDE4IEBACiAKIAlpb19kZWxheV9pbml0KCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2X1NNUAorCS8qCisJICogc2V0dXAgdG8gdXNlIHRoZSBlYXJseSBzdGF0aWMgaW5pdCB0YWJsZXMgZHVyaW5nIGtlcm5lbCBzdGFydHVwCisJICogWDg2X1NNUCB3aWxsIGV4Y2x1ZGUgc3ViLWFyY2hlcyB0aGF0IGRvbid0IGRlYWwgd2VsbCB3aXRoIGl0LgorCSAqLworCXg4Nl9jcHVfdG9fYXBpY2lkX2Vhcmx5X3B0ciA9ICh2b2lkICopeDg2X2NwdV90b19hcGljaWRfaW5pdDsKKwl4ODZfYmlvc19jcHVfYXBpY2lkX2Vhcmx5X3B0ciA9ICh2b2lkICopeDg2X2Jpb3NfY3B1X2FwaWNpZF9pbml0OworI2lmZGVmIENPTkZJR19OVU1BCisJeDg2X2NwdV90b19ub2RlX21hcF9lYXJseV9wdHIgPSAodm9pZCAqKXg4Nl9jcHVfdG9fbm9kZV9tYXBfaW5pdDsKKyNlbmRpZgorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICiAJZ2VuZXJpY19hcGljX3Byb2JlKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwXzY0LmMKaW5kZXggYzBkODIwOC4uYzJlYzNkY2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF82NC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZWRkLmg+CisjaW5jbHVkZSA8bGludXgvaXNjc2lfaWJmdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgpAQCAtNTgsNyArNTksNiBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9kbWkuaD4KQEAgLTY2LDcgKzY2LDkgQEAKICNpbmNsdWRlIDxhc20vbWNlLmg+CiAjaW5jbHVkZSA8YXNtL2RzLmg+CiAjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KIAorI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgogI2lmZGVmIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2Vsc2UKQEAgLTI0OCw2ICsyNTAsNyBAQAogCQkJCSh1bnNpZ25lZCBsb25nKSh0b3RhbF9tZW0gPj4gMjApKTsKIAkJY3Jhc2hrX3Jlcy5zdGFydCA9IGNyYXNoX2Jhc2U7CiAJCWNyYXNoa19yZXMuZW5kICAgPSBjcmFzaF9iYXNlICsgY3Jhc2hfc2l6ZSAtIDE7CisJCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZjcmFzaGtfcmVzKTsKIAl9CiB9CiAjZWxzZQpAQCAtMzIyLDYgKzMyNSwxMSBAQAogCiAJZmluaXNoX2U4MjBfcGFyc2luZygpOwogCisJLyogYWZ0ZXIgcGFyc2VfZWFybHlfcGFyYW0sIHNvIGNvdWxkIGRlYnVnIGl0ICovCisJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmNvZGVfcmVzb3VyY2UpOworCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkYXRhX3Jlc291cmNlKTsKKwlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmYnNzX3Jlc291cmNlKTsKKwogCWVhcmx5X2dhcnRfaW9tbXVfY2hlY2soKTsKIAogCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoMCwgMCwgLTFVTCk7CkBAIC0zNDEsMTAgKzM0OSwxMiBAQAogCiAJY2hlY2tfZWZlcigpOwogCi0JaW5pdF9tZW1vcnlfbWFwcGluZygwLCAoZW5kX3Bmbl9tYXAgPDwgUEFHRV9TSElGVCkpOworCW1heF9wZm5fbWFwcGVkID0gaW5pdF9tZW1vcnlfbWFwcGluZygwLCAobWF4X3Bmbl9tYXBwZWQgPDwgUEFHRV9TSElGVCkpOwogCWlmIChlZmlfZW5hYmxlZCkKIAkJZWZpX2luaXQoKTsKIAorCXZzbXBfaW5pdCgpOworCiAJZG1pX3NjYW5fbWFjaGluZSgpOwogCiAJaW9fZGVsYXlfaW5pdCgpOwpAQCAtMzg5LDYgKzM5OSw4IEBACiAKIAllYXJseV9yZXNfdG9fYm9vdG1lbSgpOwogCisJZG1hMzJfcmVzZXJ2ZV9ib290bWVtKCk7CisKICNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAogCS8qCiAJICogUmVzZXJ2ZSBsb3cgbWVtb3J5IHJlZ2lvbiBmb3Igc2xlZXAgc3VwcG9ydC4KQEAgLTQxMSwxMSArNDIzLDE0IEBACiAJCXVuc2lnbmVkIGxvbmcgZW5kX29mX21lbSAgICA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKIAogCQlpZiAocmFtZGlza19lbmQgPD0gZW5kX29mX21lbSkgewotCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMocmFtZGlza19pbWFnZSwgcmFtZGlza19zaXplKTsKKwkJCS8qCisJCQkgKiBkb24ndCBuZWVkIHRvIHJlc2VydmUgYWdhaW4sIGFscmVhZHkgcmVzZXJ2ZWQgZWFybHkKKwkJCSAqIGluIHg4Nl82NF9zdGFydF9rZXJuZWwsIGFuZCBlYXJseV9yZXNfdG9fYm9vdG1lbQorCQkJICogY29udmVydCB0aGF0IHRvIHJlc2VydmVkIGluIGJvb3RtZW0KKwkJCSAqLwogCQkJaW5pdHJkX3N0YXJ0ID0gcmFtZGlza19pbWFnZSArIFBBR0VfT0ZGU0VUOwogCQkJaW5pdHJkX2VuZCA9IGluaXRyZF9zdGFydCtyYW1kaXNrX3NpemU7CiAJCX0gZWxzZSB7Ci0JCQkvKiBBc3N1bWVzIGV2ZXJ5dGhpbmcgb24gbm9kZSAwICovCiAJCQlmcmVlX2Jvb3RtZW0ocmFtZGlza19pbWFnZSwgcmFtZGlza19zaXplKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiaW5pdHJkIGV4dGVuZHMgYmV5b25kIGVuZCBvZiBtZW1vcnkgIgogCQkJICAgICAgICIoMHglMDhseCA+IDB4JTA4bHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLApAQCAtNDI1LDYgKzQ0MCw5IEBACiAJfQogI2VuZGlmCiAJcmVzZXJ2ZV9jcmFzaGtlcm5lbCgpOworCisJcmVzZXJ2ZV9pYmZ0X3JlZ2lvbigpOworCiAJcGFnaW5nX2luaXQoKTsKIAltYXBfdnN5c2NhbGwoKTsKIApAQCAtNDUwLDcgKzQ2OCw3IEBACiAJLyoKIAkgKiBXZSB0cnVzdCBlODIwIGNvbXBsZXRlbHkuIE5vIGV4cGxpY2l0IFJPTSBwcm9iaW5nIGluIG1lbW9yeS4KIAkgKi8KLQllODIwX3Jlc2VydmVfcmVzb3VyY2VzKCZjb2RlX3Jlc291cmNlLCAmZGF0YV9yZXNvdXJjZSwgJmJzc19yZXNvdXJjZSk7CisJZTgyMF9yZXNlcnZlX3Jlc291cmNlcygpOwogCWU4MjBfbWFya19ub3NhdmVfcmVnaW9ucygpOwogCiAJLyogcmVxdWVzdCBJL08gc3BhY2UgZm9yIGRldmljZXMgdXNlZCBvbiBhbGwgaVszNDVdODYgUENzICovCkBAIC01MTgsNyArNTM2LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19OVU1BCi1zdGF0aWMgaW50IG5lYXJieV9ub2RlKGludCBhcGljaWQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBuZWFyYnlfbm9kZShpbnQgYXBpY2lkKQogewogCWludCBpLCBub2RlOwogCkBAIC01NTIsOSArNTcwLDkgQEAKIAliaXRzID0gYy0+eDg2X2NvcmVpZF9iaXRzOwogCiAJLyogTG93IG9yZGVyIGJpdHMgZGVmaW5lIHRoZSBjb3JlIGlkIChpbmRleCBvZiBjb3JlIGluIHNvY2tldCkgKi8KLQljLT5jcHVfY29yZV9pZCA9IGMtPnBoeXNfcHJvY19pZCAmICgoMSA8PCBiaXRzKS0xKTsKLQkvKiBDb252ZXJ0IHRoZSBBUElDIElEIGludG8gdGhlIHNvY2tldCBJRCAqLwotCWMtPnBoeXNfcHJvY19pZCA9IHBoeXNfcGtnX2lkKGJpdHMpOworCWMtPmNwdV9jb3JlX2lkID0gYy0+aW5pdGlhbF9hcGljaWQgJiAoKDEgPDwgYml0cyktMSk7CisJLyogQ29udmVydCB0aGUgaW5pdGlhbCBBUElDIElEIGludG8gdGhlIHNvY2tldCBJRCAqLworCWMtPnBoeXNfcHJvY19pZCA9IGMtPmluaXRpYWxfYXBpY2lkID4+IGJpdHM7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogCW5vZGUgPSBjLT5waHlzX3Byb2NfaWQ7CkBAIC01NzEsNyArNTg5LDcgQEAKIAkJICAgSWYgdGhhdCBkb2Vzbid0IHJlc3VsdCBpbiBhIHVzYWJsZSBub2RlIGZhbGwgYmFjayB0byB0aGUKIAkJICAgcGF0aCBmb3IgdGhlIHByZXZpb3VzIGNhc2UuICAqLwogCi0JCWludCBodF9ub2RlaWQgPSBhcGljaWQgLSAoY3B1X2RhdGEoMCkucGh5c19wcm9jX2lkIDw8IGJpdHMpOworCQlpbnQgaHRfbm9kZWlkID0gYy0+aW5pdGlhbF9hcGljaWQ7CiAKIAkJaWYgKGh0X25vZGVpZCA+PSAwICYmCiAJCSAgICBhcGljaWRfdG9fbm9kZVtodF9ub2RlaWRdICE9IE5VTUFfTk9fTk9ERSkKQEAgLTY3Nyw3ICs2OTUsNyBAQAogCiAJLyogQml0IDMxIGluIG5vcm1hbCBDUFVJRCB1c2VkIGZvciBub25zdGFuZGFyZCAzRE5vdyBJRDsKIAkgICAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkgKi8KLQljbGVhcl9iaXQoMCozMiszMSwgKHVuc2lnbmVkIGxvbmcgKikmYy0+eDg2X2NhcGFiaWxpdHkpOworCWNsZWFyX2NwdV9jYXAoYywgMCozMiszMSk7CiAKIAkvKiBPbiBDKyBzdGVwcGluZyBLOCByZXAgbWljcm9jb2RlIHdvcmtzIHdlbGwgZm9yIGNvcHkvbWVtc2V0ICovCiAJbGV2ZWwgPSBjcHVpZF9lYXgoMSk7CkBAIC03MjEsNiArNzM5LDE5IEBACiAKIAlpZiAoYW1kX2FwaWNfdGltZXJfYnJva2VuKCkpCiAJCWRpc2FibGVfYXBpY190aW1lciA9IDE7CisKKwlpZiAoYyA9PSAmYm9vdF9jcHVfZGF0YSAmJiBjLT54ODYgPj0gMHhmICYmIGMtPng4NiA8PSAweDExKSB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyB0c2VnOworCisJCS8qCisJCSAqIFNwbGl0IHVwIGRpcmVjdCBtYXBwaW5nIGFyb3VuZCB0aGUgVFNFRyBTTU0gYXJlYS4KKwkJICogRG9uJ3QgZG8gaXQgZm9yIGdicGFnZXMgYmVjYXVzZSB0aGVyZSBzZWVtcyB2ZXJ5IGxpdHRsZQorCQkgKiBiZW5lZml0IGluIGRvaW5nIHNvLgorCQkgKi8KKwkJaWYgKCFyZG1zcmxfc2FmZShNU1JfSzhfVFNFR19BRERSLCAmdHNlZykgJiYKKwkJKHRzZWcgPj4gUE1EX1NISUZUKSA8IChtYXhfcGZuX21hcHBlZCA+PiAoUE1EX1NISUZULVBBR0VfU0hJRlQpKSkKKwkJCXNldF9tZW1vcnlfNGsoKHVuc2lnbmVkIGxvbmcpX192YSh0c2VnKSwgMSk7CisJfQogfQogCiB2b2lkIF9fY3B1aW5pdCBkZXRlY3RfaHQoc3RydWN0IGNwdWluZm9feDg2ICpjKQpAQCAtNzkxLDcgKzgyMiw3IEBACiAJCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBzcmF0X2RldGVjdF9ub2RlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc3JhdF9kZXRlY3Rfbm9kZSh2b2lkKQogewogI2lmZGVmIENPTkZJR19OVU1BCiAJdW5zaWduZWQgbm9kZTsKQEAgLTgwMSw3ICs4MzIsNyBAQAogCS8qIERvbid0IGRvIHRoZSBmdW5reSBmYWxsYmFjayBoZXVyaXN0aWNzIHRoZSBBTUQgdmVyc2lvbiBlbXBsb3lzCiAJICAgZm9yIG5vdy4gKi8KIAlub2RlID0gYXBpY2lkX3RvX25vZGVbYXBpY2lkXTsKLQlpZiAobm9kZSA9PSBOVU1BX05PX05PREUpCisJaWYgKG5vZGUgPT0gTlVNQV9OT19OT0RFIHx8ICFub2RlX29ubGluZShub2RlKSkKIAkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKIAludW1hX3NldF9ub2RlKGNwdSwgbm9kZSk7CiAKQEAgLTgxMyw3ICs4NDQsNyBAQAogewogCWlmICgoYy0+eDg2ID09IDB4ZiAmJiBjLT54ODZfbW9kZWwgPj0gMHgwMykgfHwKIAkgICAgKGMtPng4NiA9PSAweDYgJiYgYy0+eDg2X21vZGVsID49IDB4MGUpKQotCQlzZXRfYml0KFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQywgJmMtPng4Nl9jYXBhYmlsaXR5KTsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfaW50ZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQpAQCAtODU2LDkgKzg4Nyw2IEBACiAKIAlpZiAoYy0+eDg2ID09IDE1KQogCQljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZSAqIDI7Ci0JaWYgKChjLT54ODYgPT0gMHhmICYmIGMtPng4Nl9tb2RlbCA+PSAweDAzKSB8fAotCSAgICAoYy0+eDg2ID09IDB4NiAmJiBjLT54ODZfbW9kZWwgPj0gMHgwZSkpCi0JCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7CiAJaWYgKGMtPng4NiA9PSA2KQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9SRVBfR09PRCk7CiAJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDKTsKQEAgLTg2Nyw2ICs4OTUsMzIgQEAKIAlzcmF0X2RldGVjdF9ub2RlKCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBlYXJseV9pbml0X2NlbnRhdXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQoreworCWlmIChjLT54ODYgPT0gMHg2ICYmIGMtPng4Nl9tb2RlbCA+PSAweGYpCisJCXNldF9iaXQoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDLCAmYy0+eDg2X2NhcGFiaWxpdHkpOworfQorCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9jZW50YXVyKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3sKKwkvKiBDYWNoZSBzaXplcyAqLworCXVuc2lnbmVkIG47CisKKwluID0gYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWw7CisJaWYgKG4gPj0gMHg4MDAwMDAwOCkgeworCQl1bnNpZ25lZCBlYXggPSBjcHVpZF9lYXgoMHg4MDAwMDAwOCk7CisJCWMtPng4Nl92aXJ0X2JpdHMgPSAoZWF4ID4+IDgpICYgMHhmZjsKKwkJYy0+eDg2X3BoeXNfYml0cyA9IGVheCAmIDB4ZmY7CisJfQorCisJaWYgKGMtPng4NiA9PSAweDYgJiYgYy0+eDg2X21vZGVsID49IDB4ZikgeworCQljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZSAqIDI7CisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7CisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1JFUF9HT09EKTsKKwl9CisJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDKTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IGdldF9jcHVfdmVuZG9yKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAljaGFyICp2ID0gYy0+eDg2X3ZlbmRvcl9pZDsKQEAgLTg3NSw2ICs5MjksOCBAQAogCQljLT54ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9BTUQ7CiAJZWxzZSBpZiAoIXN0cmNtcCh2LCAiR2VudWluZUludGVsIikpCiAJCWMtPng4Nl92ZW5kb3IgPSBYODZfVkVORE9SX0lOVEVMOworCWVsc2UgaWYgKCFzdHJjbXAodiwgIkNlbnRhdXJIYXVscyIpKQorCQljLT54ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9DRU5UQVVSOwogCWVsc2UKIAkJYy0+eDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKIH0KQEAgLTkyMiwxNSArOTc4LDE2IEBACiAJCQljLT54ODYgKz0gKHRmbXMgPj4gMjApICYgMHhmZjsKIAkJaWYgKGMtPng4NiA+PSAweDYpCiAJCQljLT54ODZfbW9kZWwgKz0gKCh0Zm1zID4+IDE2KSAmIDB4RikgPDwgNDsKLQkJaWYgKGMtPng4Nl9jYXBhYmlsaXR5WzBdICYgKDE8PDE5KSkKKwkJaWYgKHRlc3RfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DTEZMU0gpKQogCQkJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9ICgobWlzYyA+PiA4KSAmIDB4ZmYpICogODsKIAl9IGVsc2UgewogCQkvKiBIYXZlIENQVUlEIGxldmVsIDAgb25seSAtIHVuaGVhcmQgb2YgKi8KIAkJYy0+eDg2ID0gNDsKIAl9CiAKKwljLT5pbml0aWFsX2FwaWNpZCA9IChjcHVpZF9lYngoMSkgPj4gMjQpICYgMHhmZjsKICNpZmRlZiBDT05GSUdfU01QCi0JYy0+cGh5c19wcm9jX2lkID0gKGNwdWlkX2VieCgxKSA+PiAyNCkgJiAweGZmOworCWMtPnBoeXNfcHJvY19pZCA9IGMtPmluaXRpYWxfYXBpY2lkOwogI2VuZGlmCiAJLyogQU1ELWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4ODAwMDAwMDEgKi8KIAl4bHZsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOwpAQCAtOTU2LDEyICsxMDEzLDIyIEBACiAJaWYgKGMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcpCiAJCWMtPng4Nl9wb3dlciA9IGNwdWlkX2VkeCgweDgwMDAwMDA3KTsKIAorCisJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QQVQpOworCiAJc3dpdGNoIChjLT54ODZfdmVuZG9yKSB7CiAJY2FzZSBYODZfVkVORE9SX0FNRDoKIAkJZWFybHlfaW5pdF9hbWQoYyk7CisJCWlmIChjLT54ODYgPj0gMHhmICYmIGMtPng4NiA8PSAweDExKQorCQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUEFUKTsKIAkJYnJlYWs7CiAJY2FzZSBYODZfVkVORE9SX0lOVEVMOgogCQllYXJseV9pbml0X2ludGVsKGMpOworCQlpZiAoYy0+eDg2ID09IDB4RiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDE1KSkKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1BBVCk7CisJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9DRU5UQVVSOgorCQllYXJseV9pbml0X2NlbnRhdXIoYyk7CiAJCWJyZWFrOwogCX0KIApAQCAtOTk5LDYgKzEwNjYsMTAgQEAKIAkJaW5pdF9pbnRlbChjKTsKIAkJYnJlYWs7CiAKKwljYXNlIFg4Nl9WRU5ET1JfQ0VOVEFVUjoKKwkJaW5pdF9jZW50YXVyKGMpOworCQlicmVhazsKKwogCWNhc2UgWDg2X1ZFTkRPUl9VTktOT1dOOgogCWRlZmF1bHQ6CiAJCWRpc3BsYXlfY2FjaGVpbmZvKGMpOwpAQCAtMTAyMSwyMSArMTA5MiwzMSBAQAogCiAJLyogQ2xlYXIgYWxsIGZsYWdzIG92ZXJyaWRlbiBieSBvcHRpb25zICovCiAJZm9yIChpID0gMDsgaSA8IE5DQVBJTlRTOyBpKyspCi0JCWMtPng4Nl9jYXBhYmlsaXR5W2ldIF49IGNsZWFyZWRfY3B1X2NhcHNbaV07CisJCWMtPng4Nl9jYXBhYmlsaXR5W2ldICY9IH5jbGVhcmVkX2NwdV9jYXBzW2ldOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAltY2hlY2tfaW5pdChjKTsKICNlbmRpZgogCXNlbGVjdF9pZGxlX3JvdXRpbmUoYyk7CiAKLQlpZiAoYyAhPSAmYm9vdF9jcHVfZGF0YSkKLQkJbXRycl9hcF9pbml0KCk7CiAjaWZkZWYgQ09ORklHX05VTUEKIAludW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKICNlbmRpZgogCiB9CiAKK3ZvaWQgX19jcHVpbml0IGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpCit7CisJaWRlbnRpZnlfY3B1KCZib290X2NwdV9kYXRhKTsKK30KKwordm9pZCBfX2NwdWluaXQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisJQlVHX09OKGMgPT0gJmJvb3RfY3B1X2RhdGEpOworCWlkZW50aWZ5X2NwdShjKTsKKwltdHJyX2FwX2luaXQoKTsKK30KKwogc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfbm9jbGZsdXNoKGNoYXIgKmFyZykKIHsKIAlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0NMRkxTSCk7CkBAIC0xMDQ2LDcgKzExMjcsNyBAQAogdm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCWlmIChjLT54ODZfbW9kZWxfaWRbMF0pCi0JCXByaW50ayhLRVJOX0lORk8gIiVzIiwgYy0+eDg2X21vZGVsX2lkKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBjLT54ODZfbW9kZWxfaWQpOwogCiAJaWYgKGMtPng4Nl9tYXNrIHx8IGMtPmNwdWlkX2xldmVsID49IDApCiAJCXByaW50ayhLRVJOX0NPTlQgIiBzdGVwcGluZyAlMDJ4XG4iLCBjLT54ODZfbWFzayk7CkBAIC0xMDY0LDEyMyArMTE0NSwzIEBACiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJjbGVhcmNwdWlkPSIsIHNldHVwX2Rpc2FibGVjcHVpZCk7Ci0KLS8qCi0gKglHZXQgQ1BVIGluZm9ybWF0aW9uIGZvciB1c2UgYnkgdGhlIHByb2Nmcy4KLSAqLwotCi1zdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gdjsKLQlpbnQgY3B1ID0gMCwgaTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQljcHUgPSBjLT5jcHVfaW5kZXg7Ci0jZW5kaWYKLQotCXNlcV9wcmludGYobSwgInByb2Nlc3Nvclx0OiAldVxuIgotCQkgICAidmVuZG9yX2lkXHQ6ICVzXG4iCi0JCSAgICJjcHUgZmFtaWx5XHQ6ICVkXG4iCi0JCSAgICJtb2RlbFx0XHQ6ICVkXG4iCi0JCSAgICJtb2RlbCBuYW1lXHQ6ICVzXG4iLAotCQkgICAodW5zaWduZWQpY3B1LAotCQkgICBjLT54ODZfdmVuZG9yX2lkWzBdID8gYy0+eDg2X3ZlbmRvcl9pZCA6ICJ1bmtub3duIiwKLQkJICAgYy0+eDg2LAotCQkgICAoaW50KWMtPng4Nl9tb2RlbCwKLQkJICAgYy0+eDg2X21vZGVsX2lkWzBdID8gYy0+eDg2X21vZGVsX2lkIDogInVua25vd24iKTsKLQotCWlmIChjLT54ODZfbWFzayB8fCBjLT5jcHVpZF9sZXZlbCA+PSAwKQotCQlzZXFfcHJpbnRmKG0sICJzdGVwcGluZ1x0OiAlZFxuIiwgYy0+eDg2X21hc2spOwotCWVsc2UKLQkJc2VxX3ByaW50ZihtLCAic3RlcHBpbmdcdDogdW5rbm93blxuIik7Ci0KLQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9UU0MpKSB7Ci0JCXVuc2lnbmVkIGludCBmcmVxID0gY3B1ZnJlcV9xdWlja19nZXQoKHVuc2lnbmVkKWNwdSk7Ci0KLQkJaWYgKCFmcmVxKQotCQkJZnJlcSA9IGNwdV9raHo7Ci0JCXNlcV9wcmludGYobSwgImNwdSBNSHpcdFx0OiAldS4lMDN1XG4iLAotCQkJICAgZnJlcSAvIDEwMDAsIChmcmVxICUgMTAwMCkpOwotCX0KLQotCS8qIENhY2hlIHNpemUgKi8KLQlpZiAoYy0+eDg2X2NhY2hlX3NpemUgPj0gMCkKLQkJc2VxX3ByaW50ZihtLCAiY2FjaGUgc2l6ZVx0OiAlZCBLQlxuIiwgYy0+eDg2X2NhY2hlX3NpemUpOwotCi0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChzbXBfbnVtX3NpYmxpbmdzICogYy0+eDg2X21heF9jb3JlcyA+IDEpIHsKLQkJc2VxX3ByaW50ZihtLCAicGh5c2ljYWwgaWRcdDogJWRcbiIsIGMtPnBoeXNfcHJvY19pZCk7Ci0JCXNlcV9wcmludGYobSwgInNpYmxpbmdzXHQ6ICVkXG4iLAotCQkJICAgICAgIGNwdXNfd2VpZ2h0KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKSk7Ci0JCXNlcV9wcmludGYobSwgImNvcmUgaWRcdFx0OiAlZFxuIiwgYy0+Y3B1X2NvcmVfaWQpOwotCQlzZXFfcHJpbnRmKG0sICJjcHUgY29yZXNcdDogJWRcbiIsIGMtPmJvb3RlZF9jb3Jlcyk7Ci0JfQotI2VuZGlmCi0KLQlzZXFfcHJpbnRmKG0sCi0JCSAgICJmcHVcdFx0OiB5ZXNcbiIKLQkJICAgImZwdV9leGNlcHRpb25cdDogeWVzXG4iCi0JCSAgICJjcHVpZCBsZXZlbFx0OiAlZFxuIgotCQkgICAid3BcdFx0OiB5ZXNcbiIKLQkJICAgImZsYWdzXHRcdDoiLAotCQkgICBjLT5jcHVpZF9sZXZlbCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzIqTkNBUElOVFM7IGkrKykKLQkJaWYgKGNwdV9oYXMoYywgaSkgJiYgeDg2X2NhcF9mbGFnc1tpXSAhPSBOVUxMKQotCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgeDg2X2NhcF9mbGFnc1tpXSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJcbmJvZ29taXBzXHQ6ICVsdS4lMDJsdVxuIiwKLQkJICAgYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAotCQkgICAoYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOwotCi0JaWYgKGMtPng4Nl90bGJzaXplID4gMCkKLQkJc2VxX3ByaW50ZihtLCAiVExCIHNpemVcdDogJWQgNEsgcGFnZXNcbiIsIGMtPng4Nl90bGJzaXplKTsKLQlzZXFfcHJpbnRmKG0sICJjbGZsdXNoIHNpemVcdDogJWRcbiIsIGMtPng4Nl9jbGZsdXNoX3NpemUpOwotCXNlcV9wcmludGYobSwgImNhY2hlX2FsaWdubWVudFx0OiAlZFxuIiwgYy0+eDg2X2NhY2hlX2FsaWdubWVudCk7Ci0KLQlzZXFfcHJpbnRmKG0sICJhZGRyZXNzIHNpemVzXHQ6ICV1IGJpdHMgcGh5c2ljYWwsICV1IGJpdHMgdmlydHVhbFxuIiwKLQkJICAgYy0+eDg2X3BoeXNfYml0cywgYy0+eDg2X3ZpcnRfYml0cyk7Ci0KLQlzZXFfcHJpbnRmKG0sICJwb3dlciBtYW5hZ2VtZW50OiIpOwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCWlmIChjLT54ODZfcG93ZXIgJiAoMSA8PCBpKSkgewotCQkJaWYgKGkgPCBBUlJBWV9TSVpFKHg4Nl9wb3dlcl9mbGFncykgJiYKLQkJCSAgICB4ODZfcG93ZXJfZmxhZ3NbaV0pCi0JCQkJc2VxX3ByaW50ZihtLCAiJXMlcyIsCi0JCQkJCSAgIHg4Nl9wb3dlcl9mbGFnc1tpXVswXT8iICI6IiIsCi0JCQkJCSAgIHg4Nl9wb3dlcl9mbGFnc1tpXSk7Ci0JCQllbHNlCi0JCQkJc2VxX3ByaW50ZihtLCAiIFslZF0iLCBpKTsKLQkJfQotCX0KLQotCXNlcV9wcmludGYobSwgIlxuXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCWlmICgqcG9zID09IDApCS8qIGp1c3QgaW4gY2FzZSwgY3B1IDAgaXMgbm90IHRoZSBmaXJzdCAqLwotCQkqcG9zID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoKCpwb3MpIDwgTlJfQ1BVUyAmJiBjcHVfb25saW5lKCpwb3MpKQotCQlyZXR1cm4gJmNwdV9kYXRhKCpwb3MpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JKnBvcyA9IG5leHRfY3B1KCpwb3MsIGNwdV9vbmxpbmVfbWFwKTsKLQlyZXR1cm4gY19zdGFydChtLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBjX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotfQotCi1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKLQkuc3RhcnQgPSBjX3N0YXJ0LAotCS5uZXh0ID0JY19uZXh0LAotCS5zdG9wID0JY19zdG9wLAotCS5zaG93ID0Jc2hvd19jcHVpbmZvLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zaWdmcmFtZS5oIGIvYXJjaC94ODYva2VybmVsL3NpZ2ZyYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiYmI1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWdmcmFtZS5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitzdHJ1Y3Qgc2lnZnJhbWUgeworCWNoYXIgX191c2VyICpwcmV0Y29kZTsKKwlpbnQgc2lnOworCXN0cnVjdCBzaWdjb250ZXh0IHNjOworCXN0cnVjdCBfZnBzdGF0ZSBmcHN0YXRlOworCXVuc2lnbmVkIGxvbmcgZXh0cmFtYXNrW19OU0lHX1dPUkRTLTFdOworCWNoYXIgcmV0Y29kZVs4XTsKK307CisKK3N0cnVjdCBydF9zaWdmcmFtZSB7CisJY2hhciBfX3VzZXIgKnByZXRjb2RlOworCWludCBzaWc7CisJc3RydWN0IHNpZ2luZm8gX191c2VyICpwaW5mbzsKKwl2b2lkIF9fdXNlciAqcHVjOworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJc3RydWN0IHVjb250ZXh0IHVjOworCXN0cnVjdCBfZnBzdGF0ZSBmcHN0YXRlOworCWNoYXIgcmV0Y29kZVs4XTsKK307CisjZWxzZQorc3RydWN0IHJ0X3NpZ2ZyYW1lIHsKKwljaGFyIF9fdXNlciAqcHJldGNvZGU7CisJc3RydWN0IHVjb250ZXh0IHVjOworCXN0cnVjdCBzaWdpbmZvIGluZm87Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnZnJhbWVfMzIuaCBiL2FyY2gveDg2L2tlcm5lbC9zaWdmcmFtZV8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjIyMjE3Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWdmcmFtZV8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotc3RydWN0IHNpZ2ZyYW1lCi17Ci0JY2hhciBfX3VzZXIgKnByZXRjb2RlOwotCWludCBzaWc7Ci0Jc3RydWN0IHNpZ2NvbnRleHQgc2M7Ci0Jc3RydWN0IF9mcHN0YXRlIGZwc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBleHRyYW1hc2tbX05TSUdfV09SRFMtMV07Ci0JY2hhciByZXRjb2RlWzhdOwotfTsKLQotc3RydWN0IHJ0X3NpZ2ZyYW1lCi17Ci0JY2hhciBfX3VzZXIgKnByZXRjb2RlOwotCWludCBzaWc7Ci0Jc3RydWN0IHNpZ2luZm8gX191c2VyICpwaW5mbzsKLQl2b2lkIF9fdXNlciAqcHVjOwotCXN0cnVjdCBzaWdpbmZvIGluZm87Ci0Jc3RydWN0IHVjb250ZXh0IHVjOwotCXN0cnVjdCBfZnBzdGF0ZSBmcHN0YXRlOwotCWNoYXIgcmV0Y29kZVs4XTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggY2FlZTFmMC4uZjFiMTE3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtNCwzMiArNCw0NCBAQAogICogIDE5OTctMTEtMjggIE1vZGlmaWVkIGZvciBQT1NJWC4xYiBzaWduYWxzIGJ5IFJpY2hhcmQgSGVuZGVyc29uCiAgKiAgMjAwMC0wNi0yMCAgUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQgYnkgR2FyZXRoIEh1Z2hlcwogICovCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91Y29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlIDxhc20vdmRzby5oPgotI2luY2x1ZGUgInNpZ2ZyYW1lXzMyLmgiCiAKLSNkZWZpbmUgREVCVUdfU0lHIDAKKyNpbmNsdWRlICJzaWdmcmFtZS5oIgogCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQogCisjZGVmaW5lIF9fRklYX0VGTEFHUwkoWDg2X0VGTEFHU19BQyB8IFg4Nl9FRkxBR1NfT0YgfCBcCisJCQkgWDg2X0VGTEFHU19ERiB8IFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1NGIHwgXAorCQkJIFg4Nl9FRkxBR1NfWkYgfCBYODZfRUZMQUdTX0FGIHwgWDg2X0VGTEFHU19QRiB8IFwKKwkJCSBYODZfRUZMQUdTX0NGKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgRklYX0VGTEFHUwkoX19GSVhfRUZMQUdTIHwgWDg2X0VGTEFHU19SRikKKyNlbHNlCisjIGRlZmluZSBGSVhfRUZMQUdTCV9fRklYX0VGTEFHUworI2VuZGlmCisKIC8qCiAgKiBBdG9taWNhbGx5IHN3YXAgaW4gdGhlIG5ldyBzaWduYWwgbWFzaywgYW5kIHdhaXQgZm9yIGEgc2lnbmFsLgogICovCkBAIC00NiwxMCArNTgsMTEgQEAKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIAlzY2hlZHVsZSgpOwogCXNldF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwogCXJldHVybiAtRVJFU1RBUlROT0hBTkQ7CiB9CiAKLWFzbWxpbmthZ2UgaW50IAorYXNtbGlua2FnZSBpbnQKIHN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICphY3QsCiAJICAgICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICpvYWN0KQogewpAQCAtNTgsMTAgKzcxLDEyIEBACiAKIAlpZiAoYWN0KSB7CiAJCW9sZF9zaWdzZXRfdCBtYXNrOworCiAJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBhY3QsIHNpemVvZigqYWN0KSkgfHwKIAkJICAgIF9fZ2V0X3VzZXIobmV3X2thLnNhLnNhX2hhbmRsZXIsICZhY3QtPnNhX2hhbmRsZXIpIHx8CiAJCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9yZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CisKIAkJX19nZXRfdXNlcihuZXdfa2Euc2Euc2FfZmxhZ3MsICZhY3QtPnNhX2ZsYWdzKTsKIAkJX19nZXRfdXNlcihtYXNrLCAmYWN0LT5zYV9tYXNrKTsKIAkJc2lnaW5pdHNldCgmbmV3X2thLnNhLnNhX21hc2ssIG1hc2spOwpAQCAtNzQsNiArODksNyBAQAogCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfaGFuZGxlciwgJm9hY3QtPnNhX2hhbmRsZXIpIHx8CiAJCSAgICBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9yZXN0b3JlciwgJm9hY3QtPnNhX3Jlc3RvcmVyKSkKIAkJCXJldHVybiAtRUZBVUxUOworCiAJCV9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2ZsYWdzLCAmb2FjdC0+c2FfZmxhZ3MpOwogCQlfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgJm9hY3QtPnNhX21hc2spOwogCX0KQEAgLTgxLDEwICs5NywxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2UgaW50Ci1zeXNfc2lnYWx0c3RhY2sodW5zaWduZWQgbG9uZyBieCkKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdhbHRzdGFjayh1bnNpZ25lZCBsb25nIGJ4KQogewotCS8qIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgZ2NjIHJlYWxpemUgaXQgZG9lc24ndCBvd24gdGhlICJzdHJ1Y3QgcHRfcmVncyIgKi8KKwkvKgorCSAqIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgZ2NjIHJlYWxpemUgaXQgZG9lc24ndCBvd24gdGhlCisJICogInN0cnVjdCBwdF9yZWdzIgorCSAqLwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopJmJ4OwogCWNvbnN0IHN0YWNrX3QgX191c2VyICp1c3MgPSAoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKilieDsKIAlzdGFja190IF9fdXNlciAqdW9zcyA9IChzdGFja190IF9fdXNlciAqKXJlZ3MtPmN4OwpAQCAtOTYsOSArMTE0LDkgQEAKIC8qCiAgKiBEbyBhIHNpZ25hbCByZXR1cm47IHVuZG8gdGhlIHNpZ25hbCBzdGFjay4KICAqLwotCiBzdGF0aWMgaW50Ci1yZXN0b3JlX3NpZ2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MsIGludCAqcGVheCkKK3Jlc3RvcmVfc2lnY29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYywKKwkJICAgdW5zaWduZWQgbG9uZyAqcGF4KQogewogCXVuc2lnbmVkIGludCBlcnIgPSAwOwogCkBAIC0xMjAsMzcgKzEzOCwyOSBAQAogI2RlZmluZSBHRVRfU0VHKHNlZykJCQkJCQkJXAogCXsgdW5zaWduZWQgc2hvcnQgdG1wOwkJCQkJCVwKIAkgIGVyciB8PSBfX2dldF91c2VyKHRtcCwgJnNjLT5zZWcpOwkJCQlcCi0JICBsb2Fkc2VnbWVudChzZWcsdG1wKTsgfQotCi0jZGVmaW5lCUZJWF9FRkxBR1MJKFg4Nl9FRkxBR1NfQUMgfCBYODZfRUZMQUdTX1JGIHwJCSBcCi0JCQkgWDg2X0VGTEFHU19PRiB8IFg4Nl9FRkxBR1NfREYgfAkJIFwKLQkJCSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19TRiB8IFg4Nl9FRkxBR1NfWkYgfCBcCi0JCQkgWDg2X0VGTEFHU19BRiB8IFg4Nl9FRkxBR1NfUEYgfCBYODZfRUZMQUdTX0NGKQorCSAgbG9hZHNlZ21lbnQoc2VnLCB0bXApOyB9CiAKIAlHRVRfU0VHKGdzKTsKIAlDT1BZX1NFRyhmcyk7CiAJQ09QWV9TRUcoZXMpOwogCUNPUFlfU0VHKGRzKTsKLQlDT1BZKGRpKTsKLQlDT1BZKHNpKTsKLQlDT1BZKGJwKTsKLQlDT1BZKHNwKTsKLQlDT1BZKGJ4KTsKLQlDT1BZKGR4KTsKLQlDT1BZKGN4KTsKLQlDT1BZKGlwKTsKKwlDT1BZKGRpKTsgQ09QWShzaSk7IENPUFkoYnApOyBDT1BZKHNwKTsgQ09QWShieCk7CisJQ09QWShkeCk7IENPUFkoY3gpOyBDT1BZKGlwKTsKIAlDT1BZX1NFR19TVFJJQ1QoY3MpOwogCUNPUFlfU0VHX1NUUklDVChzcyk7Ci0JCisKIAl7CiAJCXVuc2lnbmVkIGludCB0bXBmbGFnczsKKwogCQllcnIgfD0gX19nZXRfdXNlcih0bXBmbGFncywgJnNjLT5mbGFncyk7Ci0JCXJlZ3MtPmZsYWdzID0gKHJlZ3MtPmZsYWdzICYgfkZJWF9FRkxBR1MpIHwgKHRtcGZsYWdzICYgRklYX0VGTEFHUyk7CisJCXJlZ3MtPmZsYWdzID0gKHJlZ3MtPmZsYWdzICYgfkZJWF9FRkxBR1MpIHwKKwkJCQkJCSh0bXBmbGFncyAmIEZJWF9FRkxBR1MpOwogCQlyZWdzLT5vcmlnX2F4ID0gLTE7CQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCiAJfQogCiAJewotCQlzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICogYnVmOworCQlzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpidWY7CisKIAkJZXJyIHw9IF9fZ2V0X3VzZXIoYnVmLCAmc2MtPmZwc3RhdGUpOwogCQlpZiAoYnVmKSB7CiAJCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBzaXplb2YoKmJ1ZikpKQpAQCAtMTU4LDYgKzE2OCw3IEBACiAJCQllcnIgfD0gcmVzdG9yZV9pMzg3KGJ1Zik7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDsKKwogCQkJaWYgKHVzZWRfbWF0aCgpKSB7CiAJCQkJY2xlYXJfZnB1KG1lKTsKIAkJCQljbGVhcl91c2VkX21hdGgoKTsKQEAgLTE2NSwyNCArMTc2LDI2IEBACiAJCX0KIAl9CiAKLQllcnIgfD0gX19nZXRfdXNlcigqcGVheCwgJnNjLT5heCk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoKnBheCwgJnNjLT5heCk7CiAJcmV0dXJuIGVycjsKIAogYmFkZnJhbWU6CiAJcmV0dXJuIDE7CiB9CiAKLWFzbWxpbmthZ2UgaW50IHN5c19zaWdyZXR1cm4odW5zaWduZWQgbG9uZyBfX3VudXNlZCkKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfc2lncmV0dXJuKHVuc2lnbmVkIGxvbmcgX191bnVzZWQpCiB7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikgJl9fdW51c2VkOwotCXN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKmZyYW1lID0gKHN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKikocmVncy0+c3AgLSA4KTsKKwlzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICpmcmFtZTsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwl1bnNpZ25lZCBsb25nIGF4OwogCXNpZ3NldF90IHNldDsKLQlpbnQgYXg7CisKKwlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopICZfX3VudXNlZDsKKwlmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICopKHJlZ3MtPnNwIC0gOCk7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJZ290byBiYWRmcmFtZTsKLQlpZiAoX19nZXRfdXNlcihzZXQuc2lnWzBdLCAmZnJhbWUtPnNjLm9sZG1hc2spCi0JICAgIHx8IChfTlNJR19XT1JEUyA+IDEKKwlpZiAoX19nZXRfdXNlcihzZXQuc2lnWzBdLCAmZnJhbWUtPnNjLm9sZG1hc2spIHx8IChfTlNJR19XT1JEUyA+IDEKIAkJJiYgX19jb3B5X2Zyb21fdXNlcigmc2V0LnNpZ1sxXSwgJmZyYW1lLT5leHRyYW1hc2ssCiAJCQkJICAgIHNpemVvZihmcmFtZS0+ZXh0cmFtYXNrKSkpKQogCQlnb3RvIGJhZGZyYW1lOwpAQCAtMTkyLDMzICsyMDUsMzUgQEAKIAljdXJyZW50LT5ibG9ja2VkID0gc2V0OwogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkKKwogCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT5zYywgJmF4KSkKIAkJZ290byBiYWRmcmFtZTsKIAlyZXR1cm4gYXg7CiAKIGJhZGZyYW1lOgogCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHByaW50a19yYXRlbGltaXQoKSkgewotCQlwcmludGsoIiVzJXNbJWRdIGJhZCBmcmFtZSBpbiBzaWdyZXR1cm4gZnJhbWU6JXAgaXA6JWx4IgotCQkgICAgICAgIiBzcDolbHggb2VheDolbHgiLAorCQlwcmludGsoS0VSTl9JTkZPICIlcyVzWyVkXSBiYWQgZnJhbWUgaW4gc2lncmV0dXJuIGZyYW1lOiIKKwkJCSIlcCBpcDolbHggc3A6JWx4IG9lYXg6JWx4IiwKIAkJICAgIHRhc2tfcGlkX25yKGN1cnJlbnQpID4gMSA/IEtFUk5fSU5GTyA6IEtFUk5fRU1FUkcsCiAJCSAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgZnJhbWUsIHJlZ3MtPmlwLAogCQkgICAgcmVncy0+c3AsIHJlZ3MtPm9yaWdfYXgpOwogCQlwcmludF92bWFfYWRkcigiIGluICIsIHJlZ3MtPmlwKTsKLQkJcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCX0KIAogCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwogCXJldHVybiAwOwotfQkKK30KIAogYXNtbGlua2FnZSBpbnQgc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIF9fdW51c2VkKQogewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopICZfX3VudXNlZDsKLQlzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopKHJlZ3MtPnNwIC0gNCk7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikmX191bnVzZWQ7CisJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CisJdW5zaWduZWQgbG9uZyBheDsKIAlzaWdzZXRfdCBzZXQ7Ci0JaW50IGF4OwogCisJZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqKShyZWdzLT5zcCAtIHNpemVvZihsb25nKSk7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAJaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCkBAIC0yMjksNyArMjQ0LDcgQEAKIAljdXJyZW50LT5ibG9ja2VkID0gc2V0OwogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkKKwogCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJmF4KSkKIAkJZ290byBiYWRmcmFtZTsKIApAQCAtMjQxLDEyICsyNTYsMTEgQEAKIGJhZGZyYW1lOgogCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKIAlyZXR1cm4gMDsKLX0JCit9CiAKIC8qCiAgKiBTZXQgdXAgYSBzaWduYWwgZnJhbWUuCiAgKi8KLQogc3RhdGljIGludAogc2V0dXBfc2lnY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjLCBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcHN0YXRlLAogCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbWFzaykKQEAgLTI3Nyw5ICsyOTEsOSBAQAogCiAJdG1wID0gc2F2ZV9pMzg3KGZwc3RhdGUpOwogCWlmICh0bXAgPCAwKQotCSAgZXJyID0gMTsKKwkJZXJyID0gMTsKIAllbHNlCi0JICBlcnIgfD0gX19wdXRfdXNlcih0bXAgPyBmcHN0YXRlIDogTlVMTCwgJnNjLT5mcHN0YXRlKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIodG1wID8gZnBzdGF0ZSA6IE5VTEwsICZzYy0+ZnBzdGF0ZSk7CiAKIAkvKiBub24taUJDUzIgZXh0ZW5zaW9ucy4uICovCiAJZXJyIHw9IF9fcHV0X3VzZXIobWFzaywgJnNjLT5vbGRtYXNrKTsKQEAgLTI5Miw3ICszMDYsNyBAQAogICogRGV0ZXJtaW5lIHdoaWNoIHN0YWNrIHRvIHVzZS4uCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKgotZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICogcmVncywgc2l6ZV90IGZyYW1lX3NpemUpCitnZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHNpemVfdCBmcmFtZV9zaXplKQogewogCXVuc2lnbmVkIGxvbmcgc3A7CiAKQEAgLTMxMCwzMiArMzI0LDMwIEBACiAJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKIAkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKIAkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7Ci0JfQotCi0JLyogVGhpcyBpcyB0aGUgbGVnYWN5IHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICovCi0JZWxzZSBpZiAoKHJlZ3MtPnNzICYgMHhmZmZmKSAhPSBfX1VTRVJfRFMgJiYKLQkJICEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpICYmCi0JCSBrYS0+c2Euc2FfcmVzdG9yZXIpIHsKLQkJc3AgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOworCX0gZWxzZSB7CisJCS8qIFRoaXMgaXMgdGhlIGxlZ2FjeSBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAqLworCQlpZiAoKHJlZ3MtPnNzICYgMHhmZmZmKSAhPSBfX1VTRVJfRFMgJiYKKwkJCSEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpICYmCisJCQkJa2EtPnNhLnNhX3Jlc3RvcmVyKQorCQkJc3AgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOwogCX0KIAogCXNwIC09IGZyYW1lX3NpemU7Ci0JLyogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgYWNjb3JkaW5nIHRvIHRoZSBpMzg2IEFCSSwKLQkgKiBpLmUuIHNvIHRoYXQgb24gZnVuY3Rpb24gZW50cnkgKChzcCArIDQpICYgMTUpID09IDAuICovCisJLyoKKwkgKiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciBhY2NvcmRpbmcgdG8gdGhlIGkzODYgQUJJLAorCSAqIGkuZS4gc28gdGhhdCBvbiBmdW5jdGlvbiBlbnRyeSAoKHNwICsgNCkgJiAxNSkgPT0gMC4KKwkgKi8KIAlzcCA9ICgoc3AgKyA0KSAmIC0xNnVsKSAtIDQ7CisKIAlyZXR1cm4gKHZvaWQgX191c2VyICopIHNwOwogfQogCi0vKiBUaGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIHdpdGggdGhlIGFkZHJlc3NlcyBpbiB0aGUgdnN5c2NhbGwgcGFnZS4KLSAgIFNlZSB2c3lzY2FsbC1zaWdyZXR1cm4uUy4gICovCi1leHRlcm4gdm9pZCBfX3VzZXIgX19rZXJuZWxfc2lncmV0dXJuOwotZXh0ZXJuIHZvaWQgX191c2VyIF9fa2VybmVsX3J0X3NpZ3JldHVybjsKLQotc3RhdGljIGludCBzZXR1cF9mcmFtZShpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAotCQkgICAgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQorc3RhdGljIGludAorc2V0dXBfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnc2V0X3QgKnNldCwKKwkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jdm9pZCBfX3VzZXIgKnJlc3RvcmVyOwogCXN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKmZyYW1lOworCXZvaWQgX191c2VyICpyZXN0b3JlcjsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdXNpZzsKIApAQCAtMzY1LDcgKzM3Nyw3IEBACiAJCQlnb3RvIGdpdmVfc2lnc2VndjsKIAl9CiAKLQlpZiAoY3VycmVudC0+YmluZm10LT5oYXN2ZHNvKQorCWlmIChjdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvKQogCQlyZXN0b3JlciA9IFZEU08zMl9TWU1CT0woY3VycmVudC0+bW0tPmNvbnRleHQudmRzbywgc2lncmV0dXJuKTsKIAllbHNlCiAJCXJlc3RvcmVyID0gJmZyYW1lLT5yZXRjb2RlOwpAQCAtMzc0LDkgKzM4Niw5IEBACiAKIAkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAgKi8KIAllcnIgfD0gX19wdXRfdXNlcihyZXN0b3JlciwgJmZyYW1lLT5wcmV0Y29kZSk7Ci0JIAorCiAJLyoKLQkgKiBUaGlzIGlzIHBvcGwgJWVheCA7IG1vdmwgJCwlZWF4IDsgaW50ICQweDgwCisJICogVGhpcyBpcyBwb3BsICVlYXggOyBtb3ZsICRfX05SX3NpZ3JldHVybiwgJWVheCA7IGludCAkMHg4MAogCSAqCiAJICogV0UgRE8gTk9UIFVTRSBJVCBBTlkgTU9SRSEgSXQncyBvbmx5IGxlZnQgaGVyZSBmb3IgaGlzdG9yaWNhbAogCSAqIHJlYXNvbnMgYW5kIGJlY2F1c2UgZ2RiIHVzZXMgaXQgYXMgYSBzaWduYXR1cmUgdG8gbm90aWNlCkBAIC0zOTAsMTEgKzQwMiwxMSBAQAogCQlnb3RvIGdpdmVfc2lnc2VndjsKIAogCS8qIFNldCB1cCByZWdpc3RlcnMgZm9yIHNpZ25hbCBoYW5kbGVyICovCi0JcmVncy0+c3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7Ci0JcmVncy0+aXAgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX2hhbmRsZXI7Ci0JcmVncy0+YXggPSAodW5zaWduZWQgbG9uZykgc2lnOwotCXJlZ3MtPmR4ID0gKHVuc2lnbmVkIGxvbmcpIDA7Ci0JcmVncy0+Y3ggPSAodW5zaWduZWQgbG9uZykgMDsKKwlyZWdzLT5zcCA9ICh1bnNpZ25lZCBsb25nKWZyYW1lOworCXJlZ3MtPmlwID0gKHVuc2lnbmVkIGxvbmcpa2EtPnNhLnNhX2hhbmRsZXI7CisJcmVncy0+YXggPSAodW5zaWduZWQgbG9uZylzaWc7CisJcmVncy0+ZHggPSAwOworCXJlZ3MtPmN4ID0gMDsKIAogCXJlZ3MtPmRzID0gX19VU0VSX0RTOwogCXJlZ3MtPmVzID0gX19VU0VSX0RTOwpAQCAtNDA3LDE1ICs0MTksMTAgQEAKIAkgKiBUaGUgdHJhY2VyIG1heSB3YW50IHRvIHNpbmdsZS1zdGVwIGluc2lkZSB0aGUKIAkgKiBoYW5kbGVyIHRvby4KIAkgKi8KLQlyZWdzLT5mbGFncyAmPSB+VEZfTUFTSzsKKwlyZWdzLT5mbGFncyAmPSB+KFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX0RGKTsKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpCiAJCXB0cmFjZV9ub3RpZnkoU0lHVFJBUCk7CiAKLSNpZiBERUJVR19TSUcKLQlwcmludGsoIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSVwIHJhPSVwXG4iLAotCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGZyYW1lLCByZWdzLT5pcCwgZnJhbWUtPnByZXRjb2RlKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiAKIGdpdmVfc2lnc2VndjoKQEAgLTQyNCwxMCArNDMxLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAotCQkJICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQorCQkJICBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl2b2lkIF9fdXNlciAqcmVzdG9yZXI7CiAJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CisJdm9pZCBfX3VzZXIgKnJlc3RvcmVyOwogCWludCBlcnIgPSAwOwogCWludCB1c2lnOwogCkBAIC00NTcsNyArNDY0LDcgQEAKIAkJCSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CiAJZXJyIHw9IHNldHVwX3NpZ2NvbnRleHQoJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJmZyYW1lLT5mcHN0YXRlLAotCQkJICAgICAgICByZWdzLCBzZXQtPnNpZ1swXSk7CisJCQkJcmVncywgc2V0LT5zaWdbMF0pOwogCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKIAlpZiAoZXJyKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKQEAgLTQ2Nyw5ICs0NzQsOSBAQAogCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKIAkJcmVzdG9yZXIgPSBrYS0+c2Euc2FfcmVzdG9yZXI7CiAJZXJyIHw9IF9fcHV0X3VzZXIocmVzdG9yZXIsICZmcmFtZS0+cHJldGNvZGUpOwotCSAKKwogCS8qCi0JICogVGhpcyBpcyBtb3ZsICQsJWF4IDsgaW50ICQweDgwCisJICogVGhpcyBpcyBtb3ZsICRfX05SX3J0X3NpZ3JldHVybiwgJWF4IDsgaW50ICQweDgwCiAJICoKIAkgKiBXRSBETyBOT1QgVVNFIElUIEFOWSBNT1JFISBJdCdzIG9ubHkgbGVmdCBoZXJlIGZvciBoaXN0b3JpY2FsCiAJICogcmVhc29ucyBhbmQgYmVjYXVzZSBnZGIgdXNlcyBpdCBhcyBhIHNpZ25hdHVyZSB0byBub3RpY2UKQEAgLTQ4MywxMSArNDkwLDExIEBACiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCiAJLyogU2V0IHVwIHJlZ2lzdGVycyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KLQlyZWdzLT5zcCA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKLQlyZWdzLT5pcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfaGFuZGxlcjsKLQlyZWdzLT5heCA9ICh1bnNpZ25lZCBsb25nKSB1c2lnOwotCXJlZ3MtPmR4ID0gKHVuc2lnbmVkIGxvbmcpICZmcmFtZS0+aW5mbzsKLQlyZWdzLT5jeCA9ICh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPnVjOworCXJlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpZnJhbWU7CisJcmVncy0+aXAgPSAodW5zaWduZWQgbG9uZylrYS0+c2Euc2FfaGFuZGxlcjsKKwlyZWdzLT5heCA9ICh1bnNpZ25lZCBsb25nKXVzaWc7CisJcmVncy0+ZHggPSAodW5zaWduZWQgbG9uZykmZnJhbWUtPmluZm87CisJcmVncy0+Y3ggPSAodW5zaWduZWQgbG9uZykmZnJhbWUtPnVjOwogCiAJcmVncy0+ZHMgPSBfX1VTRVJfRFM7CiAJcmVncy0+ZXMgPSBfX1VTRVJfRFM7CkBAIC01MDAsMTUgKzUwNywxMCBAQAogCSAqIFRoZSB0cmFjZXIgbWF5IHdhbnQgdG8gc2luZ2xlLXN0ZXAgaW5zaWRlIHRoZQogCSAqIGhhbmRsZXIgdG9vLgogCSAqLwotCXJlZ3MtPmZsYWdzICY9IH5URl9NQVNLOworCXJlZ3MtPmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfREYpOwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKIAkJcHRyYWNlX25vdGlmeShTSUdUUkFQKTsKIAotI2lmIERFQlVHX1NJRwotCXByaW50aygiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc3A9JXAgcGM9JXAgcmE9JXBcbiIsCi0JCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZnJhbWUsIHJlZ3MtPmlwLCBmcmFtZS0+cHJldGNvZGUpOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIAogZ2l2ZV9zaWdzZWd2OgpAQCAtNTE3LDMzICs1MTksMzMgQEAKIH0KIAogLyoKLSAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKLSAqLwkKLQorICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcjoKKyAqLwogc3RhdGljIGludAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc2lnaW5mb190ICppbmZvLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAotCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsCXN0cnVjdCBwdF9yZWdzICogcmVncykKKwkgICAgICBzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgcmV0OwogCiAJLyogQXJlIHdlIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KLQlpZiAocmVncy0+b3JpZ19heCA+PSAwKSB7CisJaWYgKChsb25nKXJlZ3MtPm9yaWdfYXggPj0gMCkgewogCQkvKiBJZiBzbywgY2hlY2sgc3lzdGVtIGNhbGwgcmVzdGFydGluZy4uICovCiAJCXN3aXRjaCAocmVncy0+YXgpIHsKLQkJICAgICAgICBjYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6Ci0JCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKKwkJY2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgorCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKKwkJCXJlZ3MtPmF4ID0gLUVJTlRSOworCQkJYnJlYWs7CisKKwkJY2FzZSAtRVJFU1RBUlRTWVM6CisJCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkgewogCQkJCXJlZ3MtPmF4ID0gLUVJTlRSOwogCQkJCWJyZWFrOwotCi0JCQljYXNlIC1FUkVTVEFSVFNZUzoKLQkJCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkgewotCQkJCQlyZWdzLT5heCA9IC1FSU5UUjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgotCQkJCXJlZ3MtPmF4ID0gcmVncy0+b3JpZ19heDsKLQkJCQlyZWdzLT5pcCAtPSAyOworCQkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKKwkJCXJlZ3MtPmF4ID0gcmVncy0+b3JpZ19heDsKKwkJCXJlZ3MtPmlwIC09IDI7CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtNTYxLDE2ICs1NjMsMTcgQEAKIAllbHNlCiAJCXJldCA9IHNldHVwX2ZyYW1lKHNpZywga2EsIG9sZHNldCwgcmVncyk7CiAKLQlpZiAocmV0ID09IDApIHsKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwmY3VycmVudC0+YmxvY2tlZCwma2EtPnNhLnNhX21hc2spOwotCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkKLQkJCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCxzaWcpOwotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIHJldDsKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlzaWdvcnNldHMoJmN1cnJlbnQtPmJsb2NrZWQsICZjdXJyZW50LT5ibG9ja2VkLCAma2EtPnNhLnNhX21hc2spOworCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX05PREVGRVIpKQorCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsIHNpZyk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01ODAsMTggKzU4MywxNyBAQAogICovCiBzdGF0aWMgdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RydWN0IGtfc2lnYWN0aW9uIGthOwogCXNpZ2luZm9fdCBpbmZvOwogCWludCBzaWducjsKLQlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CiAJc2lnc2V0X3QgKm9sZHNldDsKIAogCS8qCi0JICogV2Ugd2FudCB0aGUgY29tbW9uIGNhc2UgdG8gZ28gZmFzdCwgd2hpY2gKLQkgKiBpcyB3aHkgd2UgbWF5IGluIGNlcnRhaW4gY2FzZXMgZ2V0IGhlcmUgZnJvbQotCSAqIGtlcm5lbCBtb2RlLiBKdXN0IHJldHVybiB3aXRob3V0IGRvaW5nIGFueXRoaW5nCi0gCSAqIGlmIHNvLiAgdm04NiByZWdzIHN3aXRjaGVkIG91dCBieSBhc3NlbWJseSBjb2RlCi0gCSAqIGJlZm9yZSByZWFjaGluZyBoZXJlLCBzbyB0ZXN0aW5nIGFnYWluc3Qga2VybmVsCi0gCSAqIENTIHN1ZmZpY2VzLgorCSAqIFdlIHdhbnQgdGhlIGNvbW1vbiBjYXNlIHRvIGdvIGZhc3QsIHdoaWNoIGlzIHdoeSB3ZSBtYXkgaW4gY2VydGFpbgorCSAqIGNhc2VzIGdldCBoZXJlIGZyb20ga2VybmVsIG1vZGUuIEp1c3QgcmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKwkgKiBpZiBzby4KKwkgKiBYODZfMzI6IHZtODYgcmVncyBzd2l0Y2hlZCBvdXQgYnkgYXNzZW1ibHkgY29kZSBiZWZvcmUgcmVhY2hpbmcKKwkgKiBoZXJlLCBzbyB0ZXN0aW5nIGFnYWluc3Qga2VybmVsIENTIHN1ZmZpY2VzLgogCSAqLwogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQogCQlyZXR1cm47CkBAIC02MDMsMjkgKzYwNSwzMSBAQAogCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7CiAJaWYgKHNpZ25yID4gMCkgewotCQkvKiBSZS1lbmFibGUgYW55IHdhdGNocG9pbnRzIGJlZm9yZSBkZWxpdmVyaW5nIHRoZQorCQkvKgorCQkgKiBSZS1lbmFibGUgYW55IHdhdGNocG9pbnRzIGJlZm9yZSBkZWxpdmVyaW5nIHRoZQogCQkgKiBzaWduYWwgdG8gdXNlciBzcGFjZS4gVGhlIHByb2Nlc3NvciByZWdpc3RlciB3aWxsCiAJCSAqIGhhdmUgYmVlbiBjbGVhcmVkIGlmIHRoZSB3YXRjaHBvaW50IHRyaWdnZXJlZAogCQkgKiBpbnNpZGUgdGhlIGtlcm5lbC4KIAkJICovCi0JCWlmICh1bmxpa2VseShjdXJyZW50LT50aHJlYWQuZGVidWdyZWc3KSkKKwkJaWYgKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzcpCiAJCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNywgNyk7CiAKLQkJLyogV2hlZSEgIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCisJCS8qIFdoZWUhIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCiAJCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAmaW5mbywgJmthLCBvbGRzZXQsIHJlZ3MpID09IDApIHsKLQkJCS8qIGEgc2lnbmFsIHdhcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkOyB0aGUgc2F2ZWQKKwkJCS8qCisJCQkgKiBhIHNpZ25hbCB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZDsgdGhlIHNhdmVkCiAJCQkgKiBzaWdtYXNrIHdpbGwgaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgc2lnbmFsIGZyYW1lLAogCQkJICogYW5kIHdpbGwgYmUgcmVzdG9yZWQgYnkgc2lncmV0dXJuLCBzbyB3ZSBjYW4gc2ltcGx5Ci0JCQkgKiBjbGVhciB0aGUgVElGX1JFU1RPUkVfU0lHTUFTSyBmbGFnICovCisJCQkgKiBjbGVhciB0aGUgVElGX1JFU1RPUkVfU0lHTUFTSyBmbGFnCisJCQkgKi8KIAkJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQogCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOwogCQl9Ci0KIAkJcmV0dXJuOwogCX0KIAogCS8qIERpZCB3ZSBjb21lIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KLQlpZiAocmVncy0+b3JpZ19heCA+PSAwKSB7CisJaWYgKChsb25nKXJlZ3MtPm9yaWdfYXggPj0gMCkgewogCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KIAkJc3dpdGNoIChyZWdzLT5heCkgewogCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKQEAgLTY0Miw4ICs2NDYsMTAgQEAKIAkJfQogCX0KIAotCS8qIGlmIHRoZXJlJ3Mgbm8gc2lnbmFsIHRvIGRlbGl2ZXIsIHdlIGp1c3QgcHV0IHRoZSBzYXZlZCBzaWdtYXNrCi0JICogYmFjayAqLworCS8qCisJICogSWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKKwkgKiBiYWNrLgorCSAqLwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKSB7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOwogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2ssIE5VTEwpOwpAQCAtNjU0LDEzICs2NjAsMTIgQEAKICAqIG5vdGlmaWNhdGlvbiBvZiB1c2Vyc3BhY2UgZXhlY3V0aW9uIHJlc3VtcHRpb24KICAqIC0gdHJpZ2dlcmVkIGJ5IHRoZSBUSUZfV09SS19NQVNLIGZsYWdzCiAgKi8KLV9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKQotdm9pZCBkb19ub3RpZnlfcmVzdW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpfdW51c2VkLAotCQkgICAgICBfX3UzMiB0aHJlYWRfaW5mb19mbGFncykKK3ZvaWQKK2RvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKnVudXNlZCwgX191MzIgdGhyZWFkX2luZm9fZmxhZ3MpCiB7CiAJLyogUGVuZGluZyBzaW5nbGUtc3RlcD8gKi8KIAlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX1NJTkdMRVNURVApIHsKLQkJcmVncy0+ZmxhZ3MgfD0gVEZfTUFTSzsKKwkJcmVncy0+ZmxhZ3MgfD0gWDg2X0VGTEFHU19URjsKIAkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApOwogCX0KIApAQCAtNjcwLDYgKzY3NSw2IEBACiAKIAlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX0hSVElDS19SRVNDSEVEKQogCQlocnRpY2tfcmVzY2hlZCgpOwotCQorCiAJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lSRVQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IDczNDdiYjEuLjgyNzE3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTE5LDE3ICsxOSwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9pYTMyX3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KLQotLyogI2RlZmluZSBERUJVR19TSUcgMSAqLworI2luY2x1ZGUgInNpZ2ZyYW1lLmgiCiAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKKyNkZWZpbmUgX19GSVhfRUZMQUdTCShYODZfRUZMQUdTX0FDIHwgWDg2X0VGTEFHU19PRiB8IFwKKwkJCSBYODZfRUZMQUdTX0RGIHwgWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfU0YgfCBcCisJCQkgWDg2X0VGTEFHU19aRiB8IFg4Nl9FRkxBR1NfQUYgfCBYODZfRUZMQUdTX1BGIHwgXAorCQkJIFg4Nl9FRkxBR1NfQ0YpCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBGSVhfRUZMQUdTCShfX0ZJWF9FRkxBR1MgfCBYODZfRUZMQUdTX1JGKQorI2Vsc2UKKyMgZGVmaW5lIEZJWF9FRkxBR1MJX19GSVhfRUZMQUdTCisjZW5kaWYKKwogaW50IGlhMzJfc2V0dXBfcnRfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogICAgICAgICAgICAgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsgCiBpbnQgaWEzMl9zZXR1cF9mcmFtZShpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLApAQCAtNDYsMTYgKzU3LDkgQEAKIC8qCiAgKiBEbyBhIHNpZ25hbCByZXR1cm47IHVuZG8gdGhlIHNpZ25hbCBzdGFjay4KICAqLwotCi1zdHJ1Y3QgcnRfc2lnZnJhbWUKLXsKLQljaGFyIF9fdXNlciAqcHJldGNvZGU7Ci0Jc3RydWN0IHVjb250ZXh0IHVjOwotCXN0cnVjdCBzaWdpbmZvIGluZm87Ci19OwotCiBzdGF0aWMgaW50Ci1yZXN0b3JlX3NpZ2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MsIHVuc2lnbmVkIGxvbmcgKnByYXgpCityZXN0b3JlX3NpZ2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MsCisJCSAgIHVuc2lnbmVkIGxvbmcgKnBheCkKIHsKIAl1bnNpZ25lZCBpbnQgZXJyID0gMDsKIApAQCAtODcsNyArOTEsNyBAQAogCXsKIAkJdW5zaWduZWQgaW50IHRtcGZsYWdzOwogCQllcnIgfD0gX19nZXRfdXNlcih0bXBmbGFncywgJnNjLT5mbGFncyk7Ci0JCXJlZ3MtPmZsYWdzID0gKHJlZ3MtPmZsYWdzICYgfjB4NDBERDUpIHwgKHRtcGZsYWdzICYgMHg0MERENSk7CisJCXJlZ3MtPmZsYWdzID0gKHJlZ3MtPmZsYWdzICYgfkZJWF9FRkxBR1MpIHwgKHRtcGZsYWdzICYgRklYX0VGTEFHUyk7CiAJCXJlZ3MtPm9yaWdfYXggPSAtMTsJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KIAl9CiAKQEAgLTEwOCw3ICsxMTIsNyBAQAogCQl9CiAJfQogCi0JZXJyIHw9IF9fZ2V0X3VzZXIoKnByYXgsICZzYy0+YXgpOworCWVyciB8PSBfX2dldF91c2VyKCpwYXgsICZzYy0+YXgpOwogCXJldHVybiBlcnI7CiAKIGJhZGZyYW1lOgpAQCAtMTIxLDEzICsxMjUsMTEgQEAKIAlzaWdzZXRfdCBzZXQ7CiAJdW5zaWduZWQgbG9uZyBheDsKIAotCWZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKikocmVncy0+c3AgLSA4KTsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkgeworCWZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKikocmVncy0+c3AgLSBzaXplb2YobG9uZykpOworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlnb3RvIGJhZGZyYW1lOwotCX0gCi0JaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpIHsgCisJaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCiAJCWdvdG8gYmFkZnJhbWU7Ci0JfSAKIAogCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOwogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtMTM4LDEwICsxNDAsNiBAQAogCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJmF4KSkKIAkJZ290byBiYWRmcmFtZTsKIAotI2lmZGVmIERFQlVHX1NJRwotCXByaW50aygiJWQgc2lncmV0dXJuIGlwOiVseCBzcDolbHggZnJhbWU6JXAgYXg6JWx4XG4iLGN1cnJlbnQtPnBpZCxyZWdzLT5pcCxyZWdzLT5zcCxmcmFtZSxheCk7Ci0jZW5kaWYKLQogCWlmIChkb19zaWdhbHRzdGFjaygmZnJhbWUtPnVjLnVjX3N0YWNrLCBOVUxMLCByZWdzLT5zcCkgPT0gLUVGQVVMVCkKIAkJZ290byBiYWRmcmFtZTsKIApAQCAtMjcwLDEwICsyNjgsNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCi0jaWZkZWYgREVCVUdfU0lHCi0JcHJpbnRrKCIlZCBvbGQgaXAgJWx4IG9sZCBzcCAlbHggb2xkIGF4ICVseFxuIiwgY3VycmVudC0+cGlkLHJlZ3MtPmlwLHJlZ3MtPnNwLHJlZ3MtPmF4KTsKLSNlbmRpZgotCiAJLyogU2V0IHVwIHJlZ2lzdGVycyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KIAlyZWdzLT5kaSA9IHNpZzsKIAkvKiBJbiBjYXNlIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgZGVjbGFyZWQgd2l0aG91dCBwcm90b3R5cGVzICovIApAQCAtMjk1LDEzICsyODksOSBAQAogCSAgIHNlZSBpbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oIGZvciBkZXRhaWxzLiAqLwogCXNldF9mcyhVU0VSX0RTKTsKIAotCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOworCXJlZ3MtPmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfREYpOwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKIAkJcHRyYWNlX25vdGlmeShTSUdUUkFQKTsKLSNpZmRlZiBERUJVR19TSUcKLQlwcmludGsoIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSVseCByYT0lcFxuIiwKLQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+aXAsIGZyYW1lLT5wcmV0Y29kZSk7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogCkBAIC0zMTEsNDAgKzMwMSw2MyBAQAogfQogCiAvKgorICogUmV0dXJuIC0xTCBvciB0aGUgc3lzY2FsbCBudW1iZXIgdGhhdCBAcmVncyBpcyBleGVjdXRpbmcuCisgKi8KK3N0YXRpYyBsb25nIGN1cnJlbnRfc3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKgorCSAqIFdlIGFsd2F5cyBzaWduLWV4dGVuZCBhIC0xIHZhbHVlIGJlaW5nIHNldCBoZXJlLAorCSAqIHNvIHRoaXMgaXMgYWx3YXlzIGVpdGhlciAtMUwgb3IgYSBzeXNjYWxsIG51bWJlci4KKwkgKi8KKwlyZXR1cm4gcmVncy0+b3JpZ19heDsKK30KKworLyoKKyAqIFJldHVybiBhIHZhbHVlIHRoYXQgaXMgLUVGT08gaWYgdGhlIHN5c3RlbSBjYWxsIGluIEByZWdzLT5vcmlnX2F4CisgKiByZXR1cm5lZCBhbiBlcnJvci4gIFRoaXMgb25seSB3b3JrcyBmb3IgQHJlZ3MgZnJvbSBAY3VycmVudC4KKyAqLworc3RhdGljIGxvbmcgY3VycmVudF9zeXNjYWxsX3JldChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikpCisJCS8qCisJCSAqIFNpZ24tZXh0ZW5kIHRoZSB2YWx1ZSBzbyAoaW50KS1FRk9PIGJlY29tZXMgKGxvbmcpLUVGT08KKwkJICogYW5kIHdpbGwgbWF0Y2ggY29ycmVjdGx5IGluIGNvbXBhcmlzb25zLgorCQkgKi8KKwkJcmV0dXJuIChpbnQpIHJlZ3MtPmF4OworI2VuZGlmCisJcmV0dXJuIHJlZ3MtPmF4OworfQorCisvKgogICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcgogICovCQogCiBzdGF0aWMgaW50CiBoYW5kbGVfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnLCBzaWdpbmZvX3QgKmluZm8sIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCi0JCXNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCByZXQ7CiAKLSNpZmRlZiBERUJVR19TSUcKLQlwcmludGsoImhhbmRsZV9zaWduYWwgcGlkOiVkIHNpZzolbHUgaXA6JWx4IHNwOiVseCByZWdzPSVwXG4iLAotCQljdXJyZW50LT5waWQsIHNpZywKLQkJcmVncy0+aXAsIHJlZ3MtPnNwLCByZWdzKTsKLSNlbmRpZgotCiAJLyogQXJlIHdlIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KLQlpZiAoKGxvbmcpcmVncy0+b3JpZ19heCA+PSAwKSB7CisJaWYgKGN1cnJlbnRfc3lzY2FsbChyZWdzKSA+PSAwKSB7CiAJCS8qIElmIHNvLCBjaGVjayBzeXN0ZW0gY2FsbCByZXN0YXJ0aW5nLi4gKi8KLQkJc3dpdGNoIChyZWdzLT5heCkgewotCQkgICAgICAgIGNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKLQkJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQlzd2l0Y2ggKGN1cnJlbnRfc3lzY2FsbF9yZXQocmVncykpIHsKKwkJY2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgorCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKKwkJCXJlZ3MtPmF4ID0gLUVJTlRSOworCQkJYnJlYWs7CisKKwkJY2FzZSAtRVJFU1RBUlRTWVM6CisJCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkgewogCQkJCXJlZ3MtPmF4ID0gLUVJTlRSOwogCQkJCWJyZWFrOwotCi0JCQljYXNlIC1FUkVTVEFSVFNZUzoKLQkJCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkgewotCQkJCQlyZWdzLT5heCA9IC1FSU5UUjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCS8qIGZhbGx0aHJvdWdoICovCi0JCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKLQkJCQlyZWdzLT5heCA9IHJlZ3MtPm9yaWdfYXg7Ci0JCQkJcmVncy0+aXAgLT0gMjsKLQkJCQlicmVhazsKKwkJCX0KKwkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5heCA9IHJlZ3MtPm9yaWdfYXg7CisJCQlyZWdzLT5pcCAtPSAyOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTM5MSwxMCArNDA0LDExIEBACiAJc2lnc2V0X3QgKm9sZHNldDsKIAogCS8qCi0JICogV2Ugd2FudCB0aGUgY29tbW9uIGNhc2UgdG8gZ28gZmFzdCwgd2hpY2gKLQkgKiBpcyB3aHkgd2UgbWF5IGluIGNlcnRhaW4gY2FzZXMgZ2V0IGhlcmUgZnJvbQotCSAqIGtlcm5lbCBtb2RlLiBKdXN0IHJldHVybiB3aXRob3V0IGRvaW5nIGFueXRoaW5nCisJICogV2Ugd2FudCB0aGUgY29tbW9uIGNhc2UgdG8gZ28gZmFzdCwgd2hpY2ggaXMgd2h5IHdlIG1heSBpbiBjZXJ0YWluCisJICogY2FzZXMgZ2V0IGhlcmUgZnJvbSBrZXJuZWwgbW9kZS4gSnVzdCByZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZwogCSAqIGlmIHNvLgorCSAqIFg4Nl8zMjogdm04NiByZWdzIHN3aXRjaGVkIG91dCBieSBhc3NlbWJseSBjb2RlIGJlZm9yZSByZWFjaGluZworCSAqIGhlcmUsIHNvIHRlc3RpbmcgYWdhaW5zdCBrZXJuZWwgQ1Mgc3VmZmljZXMuCiAJICovCiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCXJldHVybjsKQEAgLTQyNiwxMCArNDQwLDkgQEAKIAl9CiAKIAkvKiBEaWQgd2UgY29tZSBmcm9tIGEgc3lzdGVtIGNhbGw/ICovCi0JaWYgKChsb25nKXJlZ3MtPm9yaWdfYXggPj0gMCkgeworCWlmIChjdXJyZW50X3N5c2NhbGwocmVncykgPj0gMCkgewogCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KLQkJbG9uZyByZXMgPSByZWdzLT5heDsKLQkJc3dpdGNoIChyZXMpIHsKKwkJc3dpdGNoIChjdXJyZW50X3N5c2NhbGxfcmV0KHJlZ3MpKSB7CiAJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgogCQljYXNlIC1FUkVTVEFSVFNZUzoKIAkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CkBAIC00NDUsMjIgKzQ1OCwxOSBAQAogCQl9CiAJfQogCi0JLyogaWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKLQkgICBiYWNrLiAqLworCS8qCisJICogSWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKKwkgKiBiYWNrLgorCSAqLwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKSB7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOwogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2ssIE5VTEwpOwogCX0KIH0KIAotdm9pZAotZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqdW51c2VkLCBfX3UzMiB0aHJlYWRfaW5mb19mbGFncykKK3ZvaWQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqdW51c2VkLAorCQkgICAgICBfX3UzMiB0aHJlYWRfaW5mb19mbGFncykKIHsKLSNpZmRlZiBERUJVR19TSUcKLQlwcmludGsoImRvX25vdGlmeV9yZXN1bWUgZmxhZ3M6JXggaXA6JWx4IHNwOiVseCBjYWxsZXI6JXAgcGVuZGluZzoleFxuIiwKLQkgICAgICAgdGhyZWFkX2luZm9fZmxhZ3MsIHJlZ3MtPmlwLCByZWdzLT5zcCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKLSNlbmRpZgotCSAgICAgICAKIAkvKiBQZW5kaW5nIHNpbmdsZS1zdGVwPyAqLwogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfU0lOR0xFU1RFUCkgewogCQlyZWdzLT5mbGFncyB8PSBYODZfRUZMQUdTX1RGOwpAQCAtNDc0LDcgKzQ4NCw3IEBACiAjZW5kaWYgLyogQ09ORklHX1g4Nl9NQ0UgKi8KIAogCS8qIGRlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbCBkZWxpdmVyeSAqLwotCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIChfVElGX1NJR1BFTkRJTkd8X1RJRl9SRVNUT1JFX1NJR01BU0spKQorCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIChfVElGX1NJR1BFTkRJTkcgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykpCiAJCWRvX3NpZ25hbChyZWdzKTsKIAogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfSFJUSUNLX1JFU0NIRUQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3NTg5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXAuYwpAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqCUludGVsIFNNUCBzdXBwb3J0IHJvdXRpbmVzLgorICoKKyAqCShjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgorICoJKGMpIDE5OTgtOTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKiAgICAgIChjKSAyMDAyLDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICoKKyAqCWkzODYgYW5kIHg4Nl82NCBpbnRlZ3JhdGlvbiBieSBHbGF1YmVyIENvc3RhIDxnY29zdGFAcmVkaGF0LmNvbT4KKyAqCisgKglUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvcgorICoJbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorCisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxtYWNoX2lwaS5oPgorI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorLyoKKyAqCVNvbWUgbm90ZXMgb24geDg2IHByb2Nlc3NvciBidWdzIGFmZmVjdGluZyBTTVAgb3BlcmF0aW9uOgorICoKKyAqCVBlbnRpdW0sIFBlbnRpdW0gUHJvLCBJSSwgSUlJIChhbmQgYWxsIENQVXMpIGhhdmUgYnVncy4KKyAqCVRoZSBMaW51eCBpbXBsaWNhdGlvbnMgZm9yIFNNUCBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzOgorICoKKyAqCVBlbnRpdW0gSUlJIC8gW1hlb25dCisgKgkJTm9uZSBvZiB0aGUgRTFBUC1FM0FQIGVycmF0YSBhcmUgdmlzaWJsZSB0byB0aGUgdXNlci4KKyAqCisgKglFMUFQLglzZWUgUElJIEExQVAKKyAqCUUyQVAuCXNlZSBQSUkgQTJBUAorICoJRTNBUC4Jc2VlIFBJSSBBM0FQCisgKgorICoJUGVudGl1bSBJSSAvIFtYZW9uXQorICoJCU5vbmUgb2YgdGhlIEExQVAtQTNBUCBlcnJhdGEgYXJlIHZpc2libGUgdG8gdGhlIHVzZXIuCisgKgorICoJQTFBUC4Jc2VlIFBQcm8gMUFQCisgKglBMkFQLglzZWUgUFBybyAyQVAKKyAqCUEzQVAuCXNlZSBQUHJvIDdBUAorICoKKyAqCVBlbnRpdW0gUHJvCisgKgkJTm9uZSBvZiAxQVAtOUFQIGVycmF0YSBhcmUgdmlzaWJsZSB0byB0aGUgbm9ybWFsIHVzZXIsCisgKglleGNlcHQgb2NjYXNpb25hbCBkZWxpdmVyeSBvZiAnc3B1cmlvdXMgaW50ZXJydXB0JyBhcyB0cmFwICMxNS4KKyAqCVRoaXMgaXMgdmVyeSByYXJlIGFuZCBhIG5vbi1wcm9ibGVtLgorICoKKyAqCTFBUC4JTGludXggbWFwcyBBUElDIGFzIG5vbi1jYWNoZWFibGUKKyAqCTJBUC4Jd29ya2VkIGFyb3VuZCBpbiBoYXJkd2FyZQorICoJM0FQLglmaXhlZCBpbiBDMCBhbmQgYWJvdmUgc3RlcHBpbmdzIG1pY3JvY29kZSB1cGRhdGUuCisgKgkJTGludXggZG9lcyBub3QgdXNlIGV4Y2Vzc2l2ZSBTVEFSVFVQX0lQSXMuCisgKgk0QVAuCXdvcmtlZCBhcm91bmQgaW4gaGFyZHdhcmUKKyAqCTVBUC4Jc3ltbWV0cmljIElPIG1vZGUgKG5vcm1hbCBMaW51eCBvcGVyYXRpb24pIG5vdCBhZmZlY3RlZC4KKyAqCQknbm9hcGljJyBtb2RlIGhhcyB2ZWN0b3IgMHhmIGZpbGxlZCBvdXQgcHJvcGVybHkuCisgKgk2QVAuCSdub2FwaWMnIG1vZGUgbWlnaHQgYmUgYWZmZWN0ZWQgLSBmaXhlZCBpbiBsYXRlciBzdGVwcGluZ3MKKyAqCTdBUC4JV2UgZG8gbm90IGFzc3VtZSB3cml0ZXMgdG8gdGhlIExWVCBkZWFzc2VyaW5nIElSUXMKKyAqCThBUC4JV2UgZG8gbm90IGVuYWJsZSBsb3cgcG93ZXIgbW9kZSAoZGVlcCBzbGVlcCkgZHVyaW5nIE1QIGJvb3R1cAorICoJOUFQLglXZSBkbyBub3QgdXNlIG1peGVkIG1vZGUKKyAqCisgKglQZW50aXVtCisgKgkJVGhlcmUgaXMgYSBtYXJnaW5hbCBjYXNlIHdoZXJlIFJFUCBNT1ZTIG9uIDEwME1IeiBTTVAKKyAqCW1hY2hpbmVzIHdpdGggQiBzdGVwcGluZyBwcm9jZXNzb3JzIGNhbiBmYWlsLiBYWFggc2hvdWxkIHByb3ZpZGUKKyAqCWFuIEwxY2FjaGU9V3JpdGV0aHJvdWdoIG9yIEwxY2FjaGU9b2ZmIG9wdGlvbi4KKyAqCisgKgkJQiBzdGVwcGluZyBDUFVzIG1heSBoYW5nLiBUaGVyZSBhcmUgaGFyZHdhcmUgd29yayBhcm91bmRzCisgKglmb3IgdGhpcy4gV2Ugd2FybiBhYm91dCBpdCBpbiBjYXNlIHlvdXIgYm9hcmQgZG9lc24ndCBoYXZlIHRoZSB3b3JrCisgKglhcm91bmRzLiBCYXNpY2FsbHkgdGhhdCdzIHNvIEkgY2FuIHRlbGwgYW55b25lIHdpdGggYSBCIHN0ZXBwaW5nCisgKglDUFUgYW5kIFNNUCBwcm9ibGVtcyAidG91Z2giLgorICoKKyAqCVNwZWNpZmljIGl0ZW1zIFtGcm9tIFBlbnRpdW0gUHJvY2Vzc29yIFNwZWNpZmljYXRpb24gVXBkYXRlXQorICoKKyAqCTFBUC4JTGludXggZG9lc24ndCB1c2UgcmVtb3RlIHJlYWQKKyAqCTJBUC4JTGludXggZG9lc24ndCB0cnVzdCBBUElDIGVycm9ycworICoJM0FQLglXZSB3b3JrIGFyb3VuZCB0aGlzCisgKgk0QVAuCUxpbnV4IG5ldmVyIGdlbmVyYXRlZCAzIGludGVycnVwdHMgb2YgdGhlIHNhbWUgcHJpb3JpdHkKKyAqCQl0byBjYXVzZSBhIGxvc3QgbG9jYWwgaW50ZXJydXB0LgorICoJNUFQLglSZW1vdGUgcmVhZCBpcyBuZXZlciB1c2VkCisgKgk2QVAuCW5vdCBhZmZlY3RlZCAtIHdvcmtlZCBhcm91bmQgaW4gaGFyZHdhcmUKKyAqCTdBUC4Jbm90IGFmZmVjdGVkIC0gd29ya2VkIGFyb3VuZCBpbiBoYXJkd2FyZQorICoJOEFQLgl3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlIC0gd2UgZ2V0IGV4cGxpY2l0IENTIGVycm9ycyBpZiBub3QKKyAqCTlBUC4Jb25seSAnbm9hcGljJyBtb2RlIGFmZmVjdGVkLiBNaWdodCBnZW5lcmF0ZSBzcHVyaW91cworICoJCWludGVycnVwdHMsIHdlIGxvZyBvbmx5IHRoZSBmaXJzdCBvbmUgYW5kIGNvdW50IHRoZQorICoJCXJlc3Qgc2lsZW50bHkuCisgKgkxMEFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCisgKgkxMUFQLglMaW51eCByZWFkcyB0aGUgQVBJQyBiZXR3ZWVuIHdyaXRlcyB0byBhdm9pZCB0aGlzLCBhcyBwZXIKKyAqCQl0aGUgZG9jdW1lbnRhdGlvbi4gTWFrZSBzdXJlIHlvdSBwcmVzZXJ2ZSB0aGlzIGFzIGl0IGFmZmVjdHMKKyAqCQl0aGUgQyBzdGVwcGluZyBjaGlwcyB0b28uCisgKgkxMkFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCisgKgkxM0FQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCisgKgkxNEFQLgl3ZSBhbHdheXMgZGVhc3NlcnQgSU5JVCBkdXJpbmcgYm9vdHVwCisgKgkxNUFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCisgKgkxNkFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCisgKgkxN0FQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCisgKgkxOEFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCisgKgkxOUFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIEJJT1MKKyAqCisgKglJZiB0aGlzIHNvdW5kcyB3b3JyeWluZyBiZWxpZXZlIG1lIHRoZXNlIGJ1Z3MgYXJlIGVpdGhlciBfX19SQVJFX19fLAorICoJb3IgYXJlIHNpZ25hbCB0aW1pbmcgYnVncyB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlIGFuZCB0aGVyZSdzCisgKglhYm91dCBub3RoaW5nIG9mIG5vdGUgd2l0aCBDIHN0ZXBwaW5nIHVwd2FyZHMuCisgKi8KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gc2VuZHMgYSAncmVzY2hlZHVsZScgSVBJIHRvIGFub3RoZXIgQ1BVLgorICogaXQgZ29lcyBzdHJhaWdodCB0aHJvdWdoIGFuZCB3YXN0ZXMgbm8gdGltZSBzZXJpYWxpemluZworICogYW55dGhpbmcuIFdvcnN0IGNhc2UgaXMgdGhhdCB3ZSBsb3NlIGEgcmVzY2hlZHVsZSAuLi4KKyAqLworc3RhdGljIHZvaWQgbmF0aXZlX3NtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKK3sKKwlpZiAodW5saWtlbHkoY3B1X2lzX29mZmxpbmUoY3B1KSkpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKwlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGNwdSksIFJFU0NIRURVTEVfVkVDVE9SKTsKK30KKworLyoKKyAqIFN0cnVjdHVyZSBhbmQgZGF0YSBmb3Igc21wX2NhbGxfZnVuY3Rpb24oKS4gVGhpcyBpcyBkZXNpZ25lZCB0byBtaW5pbWlzZQorICogc3RhdGljIG1lbW9yeSByZXF1aXJlbWVudHMuIEl0IGFsc28gbG9va3MgY2xlYW5lci4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhjYWxsX2xvY2spOworCitzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCB7CisJdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKTsKKwl2b2lkICppbmZvOworCWF0b21pY190IHN0YXJ0ZWQ7CisJYXRvbWljX3QgZmluaXNoZWQ7CisJaW50IHdhaXQ7Cit9OworCit2b2lkIGxvY2tfaXBpX2NhbGxfbG9jayh2b2lkKQoreworCXNwaW5fbG9ja19pcnEoJmNhbGxfbG9jayk7Cit9CisKK3ZvaWQgdW5sb2NrX2lwaV9jYWxsX2xvY2sodm9pZCkKK3sKKwlzcGluX3VubG9ja19pcnEoJmNhbGxfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCAqY2FsbF9kYXRhOworCitzdGF0aWMgdm9pZCBfX3NtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkJaW50IG5vbmF0b21pYywgaW50IHdhaXQpCit7CisJc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgZGF0YTsKKwlpbnQgY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsKKworCWlmICghY3B1cykKKwkJcmV0dXJuOworCisJZGF0YS5mdW5jID0gZnVuYzsKKwlkYXRhLmluZm8gPSBpbmZvOworCWF0b21pY19zZXQoJmRhdGEuc3RhcnRlZCwgMCk7CisJZGF0YS53YWl0ID0gd2FpdDsKKwlpZiAod2FpdCkKKwkJYXRvbWljX3NldCgmZGF0YS5maW5pc2hlZCwgMCk7CisKKwljYWxsX2RhdGEgPSAmZGF0YTsKKwltYigpOworCisJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG90aGVyIENQVXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gcmVzcG9uZCAqLworCXNlbmRfSVBJX2FsbGJ1dHNlbGYoQ0FMTF9GVU5DVElPTl9WRUNUT1IpOworCisJLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuc3RhcnRlZCkgIT0gY3B1cykKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAod2FpdCkKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKQorCQkJY3B1X3JlbGF4KCk7Cit9CisKKworLyoqCisgKiBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGEgc2V0IG9mIG90aGVyIENQVXMuCisgKiBAbWFzazogVGhlIHNldCBvZiBjcHVzIHRvIHJ1biBvbi4gIE11c3Qgbm90IGluY2x1ZGUgdGhlIGN1cnJlbnQgY3B1LgorICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCisgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCisgKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgorICoKKyAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLgorICoKKyAqIElmIEB3YWl0IGlzIHRydWUsIHRoZW4gcmV0dXJucyBvbmNlIEBmdW5jIGhhcyByZXR1cm5lZDsgb3RoZXJ3aXNlCisgKiBpdCByZXR1cm5zIGp1c3QgYmVmb3JlIHRoZSB0YXJnZXQgY3B1IGNhbGxzIEBmdW5jLgorICoKKyAqIFlvdSBtdXN0IG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzIG9yIGZyb20gYQorICogaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIgb3IgZnJvbSBhIGJvdHRvbSBoYWxmIGhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbnQKK25hdGl2ZV9zbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdW1hc2tfdCBtYXNrLAorCQkJICAgICAgdm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmluZm8sCisJCQkgICAgICBpbnQgd2FpdCkKK3sKKwlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOworCWNwdW1hc2tfdCBhbGxidXRzZWxmOworCWludCBjcHVzOworCisJLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLworCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKKworCS8qIEhvbGRpbmcgYW55IGxvY2sgc3RvcHMgY3B1cyBmcm9tIGdvaW5nIGRvd24uICovCisJc3Bpbl9sb2NrKCZjYWxsX2xvY2spOworCisJYWxsYnV0c2VsZiA9IGNwdV9vbmxpbmVfbWFwOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGFsbGJ1dHNlbGYpOworCisJY3B1c19hbmQobWFzaywgbWFzaywgYWxsYnV0c2VsZik7CisJY3B1cyA9IGNwdXNfd2VpZ2h0KG1hc2spOworCisJaWYgKCFjcHVzKSB7CisJCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlkYXRhLmZ1bmMgPSBmdW5jOworCWRhdGEuaW5mbyA9IGluZm87CisJYXRvbWljX3NldCgmZGF0YS5zdGFydGVkLCAwKTsKKwlkYXRhLndhaXQgPSB3YWl0OworCWlmICh3YWl0KQorCQlhdG9taWNfc2V0KCZkYXRhLmZpbmlzaGVkLCAwKTsKKworCWNhbGxfZGF0YSA9ICZkYXRhOworCXdtYigpOworCisJLyogU2VuZCBhIG1lc3NhZ2UgdG8gb3RoZXIgQ1BVcyAqLworCWlmIChjcHVzX2VxdWFsKG1hc2ssIGFsbGJ1dHNlbGYpKQorCQlzZW5kX0lQSV9hbGxidXRzZWxmKENBTExfRlVOQ1RJT05fVkVDVE9SKTsKKwllbHNlCisJCXNlbmRfSVBJX21hc2sobWFzaywgQ0FMTF9GVU5DVElPTl9WRUNUT1IpOworCisJLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuc3RhcnRlZCkgIT0gY3B1cykKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAod2FpdCkKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKQorCQkJY3B1X3JlbGF4KCk7CisJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RvcF90aGlzX2NwdSh2b2lkICpkdW1teSkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCS8qCisJICogUmVtb3ZlIHRoaXMgQ1BVOgorCSAqLworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKwlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKKwlpZiAoaGx0X3dvcmtzKHNtcF9wcm9jZXNzb3JfaWQoKSkpCisJCWZvciAoOzspIGhhbHQoKTsKKwlmb3IgKDs7KTsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlICdzdG9wJyBmdW5jdGlvbiBvbiBhbGwgb3RoZXIgQ1BVcyBpbiB0aGUgc3lzdGVtLgorICovCisKK3N0YXRpYyB2b2lkIG5hdGl2ZV9zbXBfc2VuZF9zdG9wKHZvaWQpCit7CisJaW50IG5vbG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHJlYm9vdF9mb3JjZSkKKwkJcmV0dXJuOworCisJLyogRG9uJ3QgZGVhZGxvY2sgb24gdGhlIGNhbGwgbG9jayBpbiBwYW5pYyAqLworCW5vbG9jayA9ICFzcGluX3RyeWxvY2soJmNhbGxfbG9jayk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fc21wX2NhbGxfZnVuY3Rpb24oc3RvcF90aGlzX2NwdSwgTlVMTCwgMCwgMCk7CisJaWYgKCFub2xvY2spCisJCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOworCWRpc2FibGVfbG9jYWxfQVBJQygpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFJlc2NoZWR1bGUgY2FsbCBiYWNrLiBOb3RoaW5nIHRvIGRvLAorICogYWxsIHRoZSB3b3JrIGlzIGRvbmUgYXV0b21hdGljYWxseSB3aGVuCisgKiB3ZSByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0LgorICovCit2b2lkIHNtcF9yZXNjaGVkdWxlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlhY2tfQVBJQ19pcnEoKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX3Jlc2NoZWRfY291bnQrKzsKKyNlbHNlCisJYWRkX3BkYShpcnFfcmVzY2hlZF9jb3VudCwgMSk7CisjZW5kaWYKK30KKwordm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSA9IGNhbGxfZGF0YS0+ZnVuYzsKKwl2b2lkICppbmZvID0gY2FsbF9kYXRhLT5pbmZvOworCWludCB3YWl0ID0gY2FsbF9kYXRhLT53YWl0OworCisJYWNrX0FQSUNfaXJxKCk7CisJLyoKKwkgKiBOb3RpZnkgaW5pdGlhdGluZyBDUFUgdGhhdCBJJ3ZlIGdyYWJiZWQgdGhlIGRhdGEgYW5kIGFtCisJICogYWJvdXQgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24KKwkgKi8KKwltYigpOworCWF0b21pY19pbmMoJmNhbGxfZGF0YS0+c3RhcnRlZCk7CisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHRoZSBpbmZvIHN0cnVjdHVyZSBtYXkgYmUgb3V0IG9mIHNjb3BlIHVubGVzcyB3YWl0PT0xCisJICovCisJaXJxX2VudGVyKCk7CisJKCpmdW5jKShpbmZvKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX2NhbGxfY291bnQrKzsKKyNlbHNlCisJYWRkX3BkYShpcnFfY2FsbF9jb3VudCwgMSk7CisjZW5kaWYKKwlpcnFfZXhpdCgpOworCisJaWYgKHdhaXQpIHsKKwkJbWIoKTsKKwkJYXRvbWljX2luYygmY2FsbF9kYXRhLT5maW5pc2hlZCk7CisJfQorfQorCitzdHJ1Y3Qgc21wX29wcyBzbXBfb3BzID0geworCS5zbXBfcHJlcGFyZV9ib290X2NwdSA9IG5hdGl2ZV9zbXBfcHJlcGFyZV9ib290X2NwdSwKKwkuc21wX3ByZXBhcmVfY3B1cyA9IG5hdGl2ZV9zbXBfcHJlcGFyZV9jcHVzLAorCS5jcHVfdXAgPSBuYXRpdmVfY3B1X3VwLAorCS5zbXBfY3B1c19kb25lID0gbmF0aXZlX3NtcF9jcHVzX2RvbmUsCisKKwkuc21wX3NlbmRfc3RvcCA9IG5hdGl2ZV9zbXBfc2VuZF9zdG9wLAorCS5zbXBfc2VuZF9yZXNjaGVkdWxlID0gbmF0aXZlX3NtcF9zZW5kX3Jlc2NoZWR1bGUsCisJLnNtcF9jYWxsX2Z1bmN0aW9uX21hc2sgPSBuYXRpdmVfc21wX2NhbGxfZnVuY3Rpb25fbWFzaywKK307CitFWFBPUlRfU1lNQk9MX0dQTChzbXBfb3BzKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL3NtcF8zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzBjZGU5Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDcxMiArMCwwIEBACi0vKgotICoJSW50ZWwgU01QIHN1cHBvcnQgcm91dGluZXMuCi0gKgotICoJKGMpIDE5OTUgQWxhbiBDb3gsIEJ1aWxkaW5nICMzIDxhbGFuQHJlZGhhdC5jb20+Ci0gKgkoYykgMTk5OC05OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLSAqCi0gKglUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvcgotICoJbGF0ZXIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLQotLyoKLSAqCVNvbWUgbm90ZXMgb24geDg2IHByb2Nlc3NvciBidWdzIGFmZmVjdGluZyBTTVAgb3BlcmF0aW9uOgotICoKLSAqCVBlbnRpdW0sIFBlbnRpdW0gUHJvLCBJSSwgSUlJIChhbmQgYWxsIENQVXMpIGhhdmUgYnVncy4KLSAqCVRoZSBMaW51eCBpbXBsaWNhdGlvbnMgZm9yIFNNUCBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzOgotICoKLSAqCVBlbnRpdW0gSUlJIC8gW1hlb25dCi0gKgkJTm9uZSBvZiB0aGUgRTFBUC1FM0FQIGVycmF0YSBhcmUgdmlzaWJsZSB0byB0aGUgdXNlci4KLSAqCi0gKglFMUFQLglzZWUgUElJIEExQVAKLSAqCUUyQVAuCXNlZSBQSUkgQTJBUAotICoJRTNBUC4Jc2VlIFBJSSBBM0FQCi0gKgotICoJUGVudGl1bSBJSSAvIFtYZW9uXQotICoJCU5vbmUgb2YgdGhlIEExQVAtQTNBUCBlcnJhdGEgYXJlIHZpc2libGUgdG8gdGhlIHVzZXIuCi0gKgotICoJQTFBUC4Jc2VlIFBQcm8gMUFQCi0gKglBMkFQLglzZWUgUFBybyAyQVAKLSAqCUEzQVAuCXNlZSBQUHJvIDdBUAotICoKLSAqCVBlbnRpdW0gUHJvCi0gKgkJTm9uZSBvZiAxQVAtOUFQIGVycmF0YSBhcmUgdmlzaWJsZSB0byB0aGUgbm9ybWFsIHVzZXIsCi0gKglleGNlcHQgb2NjYXNpb25hbCBkZWxpdmVyeSBvZiAnc3B1cmlvdXMgaW50ZXJydXB0JyBhcyB0cmFwICMxNS4KLSAqCVRoaXMgaXMgdmVyeSByYXJlIGFuZCBhIG5vbi1wcm9ibGVtLgotICoKLSAqCTFBUC4JTGludXggbWFwcyBBUElDIGFzIG5vbi1jYWNoZWFibGUKLSAqCTJBUC4Jd29ya2VkIGFyb3VuZCBpbiBoYXJkd2FyZQotICoJM0FQLglmaXhlZCBpbiBDMCBhbmQgYWJvdmUgc3RlcHBpbmdzIG1pY3JvY29kZSB1cGRhdGUuCi0gKgkJTGludXggZG9lcyBub3QgdXNlIGV4Y2Vzc2l2ZSBTVEFSVFVQX0lQSXMuCi0gKgk0QVAuCXdvcmtlZCBhcm91bmQgaW4gaGFyZHdhcmUKLSAqCTVBUC4Jc3ltbWV0cmljIElPIG1vZGUgKG5vcm1hbCBMaW51eCBvcGVyYXRpb24pIG5vdCBhZmZlY3RlZC4KLSAqCQknbm9hcGljJyBtb2RlIGhhcyB2ZWN0b3IgMHhmIGZpbGxlZCBvdXQgcHJvcGVybHkuCi0gKgk2QVAuCSdub2FwaWMnIG1vZGUgbWlnaHQgYmUgYWZmZWN0ZWQgLSBmaXhlZCBpbiBsYXRlciBzdGVwcGluZ3MKLSAqCTdBUC4JV2UgZG8gbm90IGFzc3VtZSB3cml0ZXMgdG8gdGhlIExWVCBkZWFzc2VyaW5nIElSUXMKLSAqCThBUC4JV2UgZG8gbm90IGVuYWJsZSBsb3cgcG93ZXIgbW9kZSAoZGVlcCBzbGVlcCkgZHVyaW5nIE1QIGJvb3R1cAotICoJOUFQLglXZSBkbyBub3QgdXNlIG1peGVkIG1vZGUKLSAqCi0gKglQZW50aXVtCi0gKgkJVGhlcmUgaXMgYSBtYXJnaW5hbCBjYXNlIHdoZXJlIFJFUCBNT1ZTIG9uIDEwME1IeiBTTVAKLSAqCW1hY2hpbmVzIHdpdGggQiBzdGVwcGluZyBwcm9jZXNzb3JzIGNhbiBmYWlsLiBYWFggc2hvdWxkIHByb3ZpZGUKLSAqCWFuIEwxY2FjaGU9V3JpdGV0aHJvdWdoIG9yIEwxY2FjaGU9b2ZmIG9wdGlvbi4KLSAqCi0gKgkJQiBzdGVwcGluZyBDUFVzIG1heSBoYW5nLiBUaGVyZSBhcmUgaGFyZHdhcmUgd29yayBhcm91bmRzCi0gKglmb3IgdGhpcy4gV2Ugd2FybiBhYm91dCBpdCBpbiBjYXNlIHlvdXIgYm9hcmQgZG9lc24ndCBoYXZlIHRoZSB3b3JrCi0gKglhcm91bmRzLiBCYXNpY2FsbHkgdGhhdCdzIHNvIEkgY2FuIHRlbGwgYW55b25lIHdpdGggYSBCIHN0ZXBwaW5nCi0gKglDUFUgYW5kIFNNUCBwcm9ibGVtcyAidG91Z2giLgotICoKLSAqCVNwZWNpZmljIGl0ZW1zIFtGcm9tIFBlbnRpdW0gUHJvY2Vzc29yIFNwZWNpZmljYXRpb24gVXBkYXRlXQotICoKLSAqCTFBUC4JTGludXggZG9lc24ndCB1c2UgcmVtb3RlIHJlYWQKLSAqCTJBUC4JTGludXggZG9lc24ndCB0cnVzdCBBUElDIGVycm9ycwotICoJM0FQLglXZSB3b3JrIGFyb3VuZCB0aGlzCi0gKgk0QVAuCUxpbnV4IG5ldmVyIGdlbmVyYXRlZCAzIGludGVycnVwdHMgb2YgdGhlIHNhbWUgcHJpb3JpdHkKLSAqCQl0byBjYXVzZSBhIGxvc3QgbG9jYWwgaW50ZXJydXB0LgotICoJNUFQLglSZW1vdGUgcmVhZCBpcyBuZXZlciB1c2VkCi0gKgk2QVAuCW5vdCBhZmZlY3RlZCAtIHdvcmtlZCBhcm91bmQgaW4gaGFyZHdhcmUKLSAqCTdBUC4Jbm90IGFmZmVjdGVkIC0gd29ya2VkIGFyb3VuZCBpbiBoYXJkd2FyZQotICoJOEFQLgl3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlIC0gd2UgZ2V0IGV4cGxpY2l0IENTIGVycm9ycyBpZiBub3QKLSAqCTlBUC4Jb25seSAnbm9hcGljJyBtb2RlIGFmZmVjdGVkLiBNaWdodCBnZW5lcmF0ZSBzcHVyaW91cwotICoJCWludGVycnVwdHMsIHdlIGxvZyBvbmx5IHRoZSBmaXJzdCBvbmUgYW5kIGNvdW50IHRoZQotICoJCXJlc3Qgc2lsZW50bHkuCi0gKgkxMEFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCi0gKgkxMUFQLglMaW51eCByZWFkcyB0aGUgQVBJQyBiZXR3ZWVuIHdyaXRlcyB0byBhdm9pZCB0aGlzLCBhcyBwZXIKLSAqCQl0aGUgZG9jdW1lbnRhdGlvbi4gTWFrZSBzdXJlIHlvdSBwcmVzZXJ2ZSB0aGlzIGFzIGl0IGFmZmVjdHMKLSAqCQl0aGUgQyBzdGVwcGluZyBjaGlwcyB0b28uCi0gKgkxMkFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCi0gKgkxM0FQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCi0gKgkxNEFQLgl3ZSBhbHdheXMgZGVhc3NlcnQgSU5JVCBkdXJpbmcgYm9vdHVwCi0gKgkxNUFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCi0gKgkxNkFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCi0gKgkxN0FQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCi0gKgkxOEFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlCi0gKgkxOUFQLglub3QgYWZmZWN0ZWQgLSB3b3JrZWQgYXJvdW5kIGluIEJJT1MKLSAqCi0gKglJZiB0aGlzIHNvdW5kcyB3b3JyeWluZyBiZWxpZXZlIG1lIHRoZXNlIGJ1Z3MgYXJlIGVpdGhlciBfX19SQVJFX19fLAotICoJb3IgYXJlIHNpZ25hbCB0aW1pbmcgYnVncyB3b3JrZWQgYXJvdW5kIGluIGhhcmR3YXJlIGFuZCB0aGVyZSdzCi0gKglhYm91dCBub3RoaW5nIG9mIG5vdGUgd2l0aCBDIHN0ZXBwaW5nIHVwd2FyZHMuCi0gKi8KLQotREVGSU5FX1BFUl9DUFUoc3RydWN0IHRsYl9zdGF0ZSwgY3B1X3RsYnN0YXRlKSBfX19fY2FjaGVsaW5lX2FsaWduZWQgPSB7ICZpbml0X21tLCAwLCB9OwotCi0vKgotICogdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGVhbCB3aXRoIHNlbmRpbmcgSVBJcyBiZXR3ZWVuIENQVXMuCi0gKgotICogV2UgdXNlICdicm9hZGNhc3QnLCBDUFUtPkNQVSBJUElzIGFuZCBzZWxmLUlQSXMgdG9vLgotICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9fcHJlcGFyZV9JQ1IgKHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBpbnQgaWNyID0gc2hvcnRjdXQgfCBBUElDX0RFU1RfTE9HSUNBTDsKLQotCXN3aXRjaCAodmVjdG9yKSB7Ci0JZGVmYXVsdDoKLQkJaWNyIHw9IEFQSUNfRE1fRklYRUQgfCB2ZWN0b3I7Ci0JCWJyZWFrOwotCWNhc2UgTk1JX1ZFQ1RPUjoKLQkJaWNyIHw9IEFQSUNfRE1fTk1JOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGljcjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19wcmVwYXJlX0lDUjIgKHVuc2lnbmVkIGludCBtYXNrKQotewotCXJldHVybiBTRVRfQVBJQ19ERVNUX0ZJRUxEKG1hc2spOwotfQotCi12b2lkIF9fc2VuZF9JUElfc2hvcnRjdXQodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yKQotewotCS8qCi0JICogU3VidGxlLiBJbiB0aGUgY2FzZSBvZiB0aGUgJ25ldmVyIGRvIGRvdWJsZSB3cml0ZXMnIHdvcmthcm91bmQKLQkgKiB3ZSBoYXZlIHRvIGxvY2sgb3V0IGludGVycnVwdHMgdG8gYmUgc2FmZS4gIEFzIHdlIGRvbid0IGNhcmUKLQkgKiBvZiB0aGUgdmFsdWUgcmVhZCB3ZSB1c2UgYW4gYXRvbWljIHJtdyBhY2Nlc3MgdG8gYXZvaWQgY29zdGx5Ci0JICogY2xpL3N0aS4gIE90aGVyd2lzZSB3ZSB1c2UgYW4gZXZlbiBjaGVhcGVyIHNpbmdsZSBhdG9taWMgd3JpdGUKLQkgKiB0byB0aGUgQVBJQy4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgY2ZnOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCWFwaWNfd2FpdF9pY3JfaWRsZSgpOwotCi0JLyoKLQkgKiBObyBuZWVkIHRvIHRvdWNoIHRoZSB0YXJnZXQgY2hpcCBmaWVsZAotCSAqLwotCWNmZyA9IF9fcHJlcGFyZV9JQ1Ioc2hvcnRjdXQsIHZlY3Rvcik7Ci0KLQkvKgotCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgotCSAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSLCBjZmcpOwotfQotCi12b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKLXsKLQlfX3NlbmRfSVBJX3Nob3J0Y3V0KEFQSUNfREVTVF9TRUxGLCB2ZWN0b3IpOwotfQotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIHNlbmQgYW4gSVBJIHdpdGggbm8gc2hvcnRoYW5kIG5vdGF0aW9uICh0aGUgZGVzdGluYXRpb24gaXMKLSAqIHNwZWNpZmllZCBpbiBiaXRzIDU2IHRvIDYzIG9mIHRoZSBJQ1IpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZW5kX0lQSV9kZXN0X2ZpZWxkKHVuc2lnbmVkIGxvbmcgbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGNmZzsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlpZiAodW5saWtlbHkodmVjdG9yID09IE5NSV9WRUNUT1IpKQotCQlzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSgpOwotCWVsc2UKLQkJYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0JCQotCS8qCi0JICogcHJlcGFyZSB0YXJnZXQgY2hpcCBmaWVsZAotCSAqLwotCWNmZyA9IF9fcHJlcGFyZV9JQ1IyKG1hc2spOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgY2ZnKTsKLQkJCi0JLyoKLQkgKiBwcm9ncmFtIHRoZSBJQ1IgCi0JICovCi0JY2ZnID0gX19wcmVwYXJlX0lDUigwLCB2ZWN0b3IpOwotCQkJCi0JLyoKLQkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KLQkgKi8KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgY2ZnKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgb25seSB1c2VkIG9uIHNtYWxsZXIgbWFjaGluZXMuCi0gKi8KLXZvaWQgc2VuZF9JUElfbWFza19iaXRtYXNrKGNwdW1hc2tfdCBjcHVtYXNrLCBpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNwdXNfYWRkcihjcHVtYXNrKVswXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCVdBUk5fT04obWFzayAmIH5jcHVzX2FkZHIoY3B1X29ubGluZV9tYXApWzBdKTsKLQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQobWFzaywgdmVjdG9yKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgc2VuZF9JUElfbWFza19zZXF1ZW5jZShjcHVtYXNrX3QgbWFzaywgaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBxdWVyeV9jcHU7Ci0KLQkvKgotCSAqIEhhY2suIFRoZSBjbHVzdGVyZWQgQVBJQyBhZGRyZXNzaW5nIG1vZGUgZG9lc24ndCBhbGxvdyB1cyB0byBzZW5kIAotCSAqIHRvIGFuIGFyYml0cmFyeSBtYXNrLCBzbyBJIGRvIGEgdW5pY2FzdHMgdG8gZWFjaCBDUFUgaW5zdGVhZC4gVGhpcyAKLQkgKiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZG8gMSBtZXNzYWdlIHBlciBjbHVzdGVyIElEIC0gbWJsaWdoCi0JICovIAotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShxdWVyeV9jcHUpIHsKLQkJaWYgKGNwdV9pc3NldChxdWVyeV9jcHUsIG1hc2spKSB7Ci0JCQlfX3NlbmRfSVBJX2Rlc3RfZmllbGQoY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKHF1ZXJ5X2NwdSksCi0JCQkJCSAgICAgIHZlY3Rvcik7Ci0JCX0KLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4gLyogbXVzdCBjb21lIGFmdGVyIHRoZSBzZW5kX0lQSSBmdW5jdGlvbnMgYWJvdmUgZm9yIGlubGluaW5nICovCi0KLS8qCi0gKglTbWFydGVyIFNNUCBmbHVzaGluZyBtYWNyb3MuIAotICoJCWMvbyBMaW51cyBUb3J2YWxkcy4KLSAqCi0gKglUaGVzZSBtZWFuIHlvdSBjYW4gcmVhbGx5IGRlZmluaXRlbHkgdXR0ZXJseSBmb3JnZXQgYWJvdXQKLSAqCXdyaXRpbmcgdG8gdXNlciBzcGFjZSBmcm9tIGludGVycnVwdHMuIChJdHMgbm90IGFsbG93ZWQgYW55d2F5KS4KLSAqCi0gKglPcHRpbWl6YXRpb25zIE1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+Ci0gKi8KLQotc3RhdGljIGNwdW1hc2tfdCBmbHVzaF9jcHVtYXNrOwotc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKiBmbHVzaF9tbTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwotc3RhdGljIERFRklORV9TUElOTE9DSyh0bGJzdGF0ZV9sb2NrKTsKLQotLyoKLSAqIFdlIGNhbm5vdCBjYWxsIG1tZHJvcCgpIGJlY2F1c2Ugd2UgYXJlIGluIGludGVycnVwdCBjb250ZXh0LAotICogaW5zdGVhZCB1cGRhdGUgbW0tPmNwdV92bV9tYXNrLgotICoKLSAqIFdlIG5lZWQgdG8gcmVsb2FkICVjcjMgc2luY2UgdGhlIHBhZ2UgdGFibGVzIG1heSBiZSBnb2luZwotICogYXdheSBmcm9tIHVuZGVyIHVzLi4KLSAqLwotdm9pZCBsZWF2ZV9tbShpbnQgY3B1KQotewotCWlmIChwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9PSBUTEJTVEFURV9PSykKLQkJQlVHKCk7Ci0JY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuYWN0aXZlX21tLT5jcHVfdm1fbWFzayk7Ci0JbG9hZF9jcjMoc3dhcHBlcl9wZ19kaXIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobGVhdmVfbW0pOwotCi0vKgotICoKLSAqIFRoZSBmbHVzaCBJUEkgYXNzdW1lcyB0aGF0IGEgdGhyZWFkIHN3aXRjaCBoYXBwZW5zIGluIHRoaXMgb3JkZXI6Ci0gKiBbY3B1MDogdGhlIGNwdSB0aGF0IHN3aXRjaGVzXQotICogMSkgc3dpdGNoX21tKCkgZWl0aGVyIDFhKSBvciAxYikKLSAqIDFhKSB0aHJlYWQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IG1tCi0gKiAxYTEpIGNwdV9jbGVhcihjcHUsIG9sZF9tbS0+Y3B1X3ZtX21hc2spOwotICogCVN0b3AgaXBpIGRlbGl2ZXJ5IGZvciB0aGUgb2xkIG1tLiBUaGlzIGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aAotICogCXRoZSBvdGhlciBjcHVzLCBidXQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IGlnbm9yZSBmbHVzaCBpcGlzCi0gKiAJZm9yIHRoZSB3cm9uZyBtbSwgYW5kIGluIHRoZSB3b3JzdCBjYXNlIHdlIHBlcmZvcm0gYSBzdXBlcmZsdW91cwotICogCXRsYiBmbHVzaC4KLSAqIDFhMikgc2V0IGNwdV90bGJzdGF0ZSB0byBUTEJTVEFURV9PSwotICogCU5vdyB0aGUgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IHdvbid0IGNhbGwgbGVhdmVfbW0gaWYgY3B1MAotICoJd2FzIGluIGxhenkgdGxiIG1vZGUuCi0gKiAxYTMpIHVwZGF0ZSBjcHVfdGxic3RhdGVbXS5hY3RpdmVfbW0KLSAqIAlOb3cgY3B1MCBhY2NlcHRzIHRsYiBmbHVzaGVzIGZvciB0aGUgbmV3IG1tLgotICogMWE0KSBjcHVfc2V0KGNwdSwgbmV3X21tLT5jcHVfdm1fbWFzayk7Ci0gKiAJTm93IHRoZSBvdGhlciBjcHVzIHdpbGwgc2VuZCB0bGIgZmx1c2ggaXBpcy4KLSAqIDFhNCkgY2hhbmdlIGNyMy4KLSAqIDFiKSB0aHJlYWQgc3dpdGNoIHdpdGhvdXQgbW0gY2hhbmdlCi0gKgljcHVfdGxic3RhdGVbXS5hY3RpdmVfbW0gaXMgY29ycmVjdCwgY3B1MCBhbHJlYWR5IGhhbmRsZXMKLSAqCWZsdXNoIGlwaXMuCi0gKiAxYjEpIHNldCBjcHVfdGxic3RhdGUgdG8gVExCU1RBVEVfT0sKLSAqIDFiMikgdGVzdF9hbmRfc2V0IHRoZSBjcHUgYml0IGluIGNwdV92bV9tYXNrLgotICogCUF0b21pY2FsbHkgc2V0IHRoZSBiaXQgW290aGVyIGNwdXMgd2lsbCBzdGFydCBzZW5kaW5nIGZsdXNoIGlwaXNdLAotICogCWFuZCB0ZXN0IHRoZSBiaXQuCi0gKiAxYjMpIGlmIHRoZSBiaXQgd2FzIDA6IGxlYXZlX21tIHdhcyBjYWxsZWQsIGZsdXNoIHRoZSB0bGIuCi0gKiAyKSBzd2l0Y2ggJSVlc3AsIGllIGN1cnJlbnQKLSAqCi0gKiBUaGUgaW50ZXJydXB0IG11c3QgaGFuZGxlIDIgc3BlY2lhbCBjYXNlczoKLSAqIC0gY3IzIGlzIGNoYW5nZWQgYmVmb3JlICUlZXNwLCBpZS4gaXQgY2Fubm90IHVzZSBjdXJyZW50LT57YWN0aXZlXyx9bW0uCi0gKiAtIHRoZSBjcHUgcGVyZm9ybXMgc3BlY3VsYXRpdmUgdGxiIHJlYWRzLCBpLmUuIGV2ZW4gaWYgdGhlIGNwdSBvbmx5Ci0gKiAgIHJ1bnMgaW4ga2VybmVsIHNwYWNlLCB0aGUgY3B1IGNvdWxkIGxvYWQgdGxiIGVudHJpZXMgZm9yIHVzZXIgc3BhY2UKLSAqICAgcGFnZXMuCi0gKgotICogVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGNwdV90bGJzdGF0ZSBpcyBsb2NhbCB0byBlYWNoIGNwdSwgbm8KLSAqIHdyaXRlL3JlYWQgb3JkZXJpbmcgcHJvYmxlbXMuCi0gKi8KLQotLyoKLSAqIFRMQiBmbHVzaCBJUEk6Ci0gKgotICogMSkgRmx1c2ggdGhlIHRsYiBlbnRyaWVzIGlmIHRoZSBjcHUgdXNlcyB0aGUgbW0gdGhhdCdzIGJlaW5nIGZsdXNoZWQuCi0gKiAyKSBMZWF2ZSB0aGUgbW0gaWYgd2UgYXJlIGluIHRoZSBsYXp5IHRsYiBtb2RlLgotICovCi0KLXZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgY3B1OwotCi0JY3B1ID0gZ2V0X2NwdSgpOwotCi0JaWYgKCFjcHVfaXNzZXQoY3B1LCBmbHVzaF9jcHVtYXNrKSkKLQkJZ290byBvdXQ7Ci0JCS8qIAotCQkgKiBUaGlzIHdhcyBhIEJVRygpIGJ1dCB1bnRpbCBzb21lb25lIGNhbiBxdW90ZSBtZSB0aGUKLQkJICogbGluZSBmcm9tIHRoZSBpbnRlbCBtYW51YWwgdGhhdCBndWFyYW50ZWVzIGFuIElQSSB0bwotCQkgKiBtdWx0aXBsZSBDUFVzIGlzIHJldHJpZWQgX29ubHlfIG9uIHRoZSBlcnJvcmluZyBDUFVzCi0JCSAqIGl0cyBzdGF5aW5nIGFzIGEgcmV0dXJuCi0JCSAqCi0JCSAqIEJVRygpOwotCQkgKi8KLQkJIAotCWlmIChmbHVzaF9tbSA9PSBwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5hY3RpdmVfbW0pIHsKLQkJaWYgKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID09IFRMQlNUQVRFX09LKSB7Ci0JCQlpZiAoZmx1c2hfdmEgPT0gVExCX0ZMVVNIX0FMTCkKLQkJCQlsb2NhbF9mbHVzaF90bGIoKTsKLQkJCWVsc2UKLQkJCQlfX2ZsdXNoX3RsYl9vbmUoZmx1c2hfdmEpOwotCQl9IGVsc2UKLQkJCWxlYXZlX21tKGNwdSk7Ci0JfQotCWFja19BUElDX2lycSgpOwotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWNwdV9jbGVhcihjcHUsIGZsdXNoX2NwdW1hc2spOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci1vdXQ6Ci0JcHV0X2NwdV9ub19yZXNjaGVkKCk7Ci0JX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX3RsYl9jb3VudCsrOwotfQotCi12b2lkIG5hdGl2ZV9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFza3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHZhKQotewotCWNwdW1hc2tfdCBjcHVtYXNrID0gKmNwdW1hc2twOwotCi0JLyoKLQkgKiBBIGNvdXBsZSBvZiAodG8gYmUgcmVtb3ZlZCkgc2FuaXR5IGNoZWNrczoKLQkgKgotCSAqIC0gY3VycmVudCBDUFUgbXVzdCBub3QgYmUgaW4gbWFzawotCSAqIC0gbWFzayBtdXN0IGV4aXN0IDopCi0JICovCi0JQlVHX09OKGNwdXNfZW1wdHkoY3B1bWFzaykpOwotCUJVR19PTihjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVtYXNrKSk7Ci0JQlVHX09OKCFtbSk7Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQkvKiBJZiBhIENQVSB3aGljaCB3ZSByYW4gb24gaGFzIGdvbmUgZG93biwgT0suICovCi0JY3B1c19hbmQoY3B1bWFzaywgY3B1bWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KGNwdW1hc2spKSkKLQkJcmV0dXJuOwotI2VuZGlmCi0KLQkvKgotCSAqIGknbSBub3QgaGFwcHkgYWJvdXQgdGhpcyBnbG9iYWwgc2hhcmVkIHNwaW5sb2NrIGluIHRoZQotCSAqIE1NIGhvdCBwYXRoLCBidXQgd2UnbGwgc2VlIGhvdyBjb250ZW5kZWQgaXQgaXMuCi0JICogQUs6IHg4Ni02NCBoYXMgYSBmYXN0ZXIgbWV0aG9kIHRoYXQgY291bGQgYmUgcG9ydGVkLgotCSAqLwotCXNwaW5fbG9jaygmdGxic3RhdGVfbG9jayk7Ci0JCi0JZmx1c2hfbW0gPSBtbTsKLQlmbHVzaF92YSA9IHZhOwotCWNwdXNfb3IoZmx1c2hfY3B1bWFzaywgY3B1bWFzaywgZmx1c2hfY3B1bWFzayk7Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIHNlbmQgdGhlIElQSSBvbmx5IHRvCi0JICogQ1BVcyBhZmZlY3RlZC4KLQkgKi8KLQlzZW5kX0lQSV9tYXNrKGNwdW1hc2ssIElOVkFMSURBVEVfVExCX1ZFQ1RPUik7Ci0KLQl3aGlsZSAoIWNwdXNfZW1wdHkoZmx1c2hfY3B1bWFzaykpCi0JCS8qIG5vdGhpbmcuIGxvY2t1cCBkZXRlY3Rpb24gZG9lcyBub3QgYmVsb25nIGhlcmUgKi8KLQkJY3B1X3JlbGF4KCk7Ci0KLQlmbHVzaF9tbSA9IE5VTEw7Ci0JZmx1c2hfdmEgPSAwOwotCXNwaW5fdW5sb2NrKCZ0bGJzdGF0ZV9sb2NrKTsKLX0KLQkKLXZvaWQgZmx1c2hfdGxiX2N1cnJlbnRfdGFzayh2b2lkKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCi0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCi17Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCi0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkgewotCQlpZiAoY3VycmVudC0+bW0pCi0JCQlsb2NhbF9mbHVzaF90bGIoKTsKLQkJZWxzZQotCQkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCWNwdW1hc2tfdCBjcHVfbWFzazsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQotCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKLQkJaWYoY3VycmVudC0+bW0pCi0JCQlfX2ZsdXNoX3RsYl9vbmUodmEpOwotCQkgZWxzZQotCQkgCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCi0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIHZhKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKLQotc3RhdGljIHZvaWQgZG9fZmx1c2hfdGxiX2FsbCh2b2lkKiBpbmZvKQotewotCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JX19mbHVzaF90bGJfYWxsKCk7Ci0JaWYgKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID09IFRMQlNUQVRFX0xBWlkpCi0JCWxlYXZlX21tKGNwdSk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCW9uX2VhY2hfY3B1KGRvX2ZsdXNoX3RsYl9hbGwsIE5VTEwsIDEsIDEpOwotfQotCi0vKgotICogdGhpcyBmdW5jdGlvbiBzZW5kcyBhICdyZXNjaGVkdWxlJyBJUEkgdG8gYW5vdGhlciBDUFUuCi0gKiBpdCBnb2VzIHN0cmFpZ2h0IHRocm91Z2ggYW5kIHdhc3RlcyBubyB0aW1lIHNlcmlhbGl6aW5nCi0gKiBhbnl0aGluZy4gV29yc3QgY2FzZSBpcyB0aGF0IHdlIGxvc2UgYSByZXNjaGVkdWxlIC4uLgotICovCi1zdGF0aWMgdm9pZCBuYXRpdmVfc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQotewotCVdBUk5fT04oY3B1X2lzX29mZmxpbmUoY3B1KSk7Ci0Jc2VuZF9JUElfbWFzayhjcHVtYXNrX29mX2NwdShjcHUpLCBSRVNDSEVEVUxFX1ZFQ1RPUik7Ci19Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgYW5kIGRhdGEgZm9yIHNtcF9jYWxsX2Z1bmN0aW9uKCkuIFRoaXMgaXMgZGVzaWduZWQgdG8gbWluaW1pc2UKLSAqIHN0YXRpYyBtZW1vcnkgcmVxdWlyZW1lbnRzLiBJdCBhbHNvIGxvb2tzIGNsZWFuZXIuCi0gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FsbF9sb2NrKTsKLQotc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgewotCXZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyk7Ci0Jdm9pZCAqaW5mbzsKLQlhdG9taWNfdCBzdGFydGVkOwotCWF0b21pY190IGZpbmlzaGVkOwotCWludCB3YWl0OwotfTsKLQotdm9pZCBsb2NrX2lwaV9jYWxsX2xvY2sodm9pZCkKLXsKLQlzcGluX2xvY2tfaXJxKCZjYWxsX2xvY2spOwotfQotCi12b2lkIHVubG9ja19pcGlfY2FsbF9sb2NrKHZvaWQpCi17Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjYWxsX2xvY2spOwotfQotCi1zdGF0aWMgc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgKmNhbGxfZGF0YTsKLQotc3RhdGljIHZvaWQgX19zbXBfY2FsbF9mdW5jdGlvbih2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAotCQkJCWludCBub25hdG9taWMsIGludCB3YWl0KQotewotCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7Ci0JaW50IGNwdXMgPSBudW1fb25saW5lX2NwdXMoKSAtIDE7Ci0KLQlpZiAoIWNwdXMpCi0JCXJldHVybjsKLQotCWRhdGEuZnVuYyA9IGZ1bmM7Ci0JZGF0YS5pbmZvID0gaW5mbzsKLQlhdG9taWNfc2V0KCZkYXRhLnN0YXJ0ZWQsIDApOwotCWRhdGEud2FpdCA9IHdhaXQ7Ci0JaWYgKHdhaXQpCi0JCWF0b21pY19zZXQoJmRhdGEuZmluaXNoZWQsIDApOwotCi0JY2FsbF9kYXRhID0gJmRhdGE7Ci0JbWIoKTsKLQkKLQkvKiBTZW5kIGEgbWVzc2FnZSB0byBhbGwgb3RoZXIgQ1BVcyBhbmQgd2FpdCBmb3IgdGhlbSB0byByZXNwb25kICovCi0Jc2VuZF9JUElfYWxsYnV0c2VsZihDQUxMX0ZVTkNUSU9OX1ZFQ1RPUik7Ci0KLQkvKiBXYWl0IGZvciByZXNwb25zZSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSAhPSBjcHVzKQotCQljcHVfcmVsYXgoKTsKLQotCWlmICh3YWl0KQotCQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpICE9IGNwdXMpCi0JCQljcHVfcmVsYXgoKTsKLX0KLQotCi0vKioKLSAqIHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soKTogUnVuIGEgZnVuY3Rpb24gb24gYSBzZXQgb2Ygb3RoZXIgQ1BVcy4KLSAqIEBtYXNrOiBUaGUgc2V0IG9mIGNwdXMgdG8gcnVuIG9uLiAgTXVzdCBub3QgaW5jbHVkZSB0aGUgY3VycmVudCBjcHUuCi0gKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KLSAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gKgotICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCi0gKgotICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkOyBvdGhlcndpc2UKLSAqIGl0IHJldHVybnMganVzdCBiZWZvcmUgdGhlIHRhcmdldCBjcHUgY2FsbHMgQGZ1bmMuCi0gKgotICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCi0gKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KLSAqLwotc3RhdGljIGludAotbmF0aXZlX3NtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza190IG1hc2ssCi0JCQkgICAgICB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywKLQkJCSAgICAgIGludCB3YWl0KQotewotCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7Ci0JY3B1bWFza190IGFsbGJ1dHNlbGY7Ci0JaW50IGNwdXM7Ci0KLQkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi0JV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwotCi0JLyogSG9sZGluZyBhbnkgbG9jayBzdG9wcyBjcHVzIGZyb20gZ29pbmcgZG93bi4gKi8KLQlzcGluX2xvY2soJmNhbGxfbG9jayk7Ci0KLQlhbGxidXRzZWxmID0gY3B1X29ubGluZV9tYXA7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgYWxsYnV0c2VsZik7Ci0KLQljcHVzX2FuZChtYXNrLCBtYXNrLCBhbGxidXRzZWxmKTsKLQljcHVzID0gY3B1c193ZWlnaHQobWFzayk7Ci0KLQlpZiAoIWNwdXMpIHsKLQkJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQotCWRhdGEuZnVuYyA9IGZ1bmM7Ci0JZGF0YS5pbmZvID0gaW5mbzsKLQlhdG9taWNfc2V0KCZkYXRhLnN0YXJ0ZWQsIDApOwotCWRhdGEud2FpdCA9IHdhaXQ7Ci0JaWYgKHdhaXQpCi0JCWF0b21pY19zZXQoJmRhdGEuZmluaXNoZWQsIDApOwotCi0JY2FsbF9kYXRhID0gJmRhdGE7Ci0JbWIoKTsKLQotCS8qIFNlbmQgYSBtZXNzYWdlIHRvIG90aGVyIENQVXMgKi8KLQlpZiAoY3B1c19lcXVhbChtYXNrLCBhbGxidXRzZWxmKSkKLQkJc2VuZF9JUElfYWxsYnV0c2VsZihDQUxMX0ZVTkNUSU9OX1ZFQ1RPUik7Ci0JZWxzZQotCQlzZW5kX0lQSV9tYXNrKG1hc2ssIENBTExfRlVOQ1RJT05fVkVDVE9SKTsKLQotCS8qIFdhaXQgZm9yIHJlc3BvbnNlICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLnN0YXJ0ZWQpICE9IGNwdXMpCi0JCWNwdV9yZWxheCgpOwotCi0JaWYgKHdhaXQpCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gY3B1cykKLQkJCWNwdV9yZWxheCgpOwotCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3BfdGhpc19jcHUgKHZvaWQgKiBkdW1teSkKLXsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCS8qCi0JICogUmVtb3ZlIHRoaXMgQ1BVOgotCSAqLwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQlpZiAoY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKS5obHRfd29ya3Nfb2spCi0JCWZvcig7OykgaGFsdCgpOwotCWZvciAoOzspOwotfQotCi0vKgotICogdGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgJ3N0b3AnIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzIGluIHRoZSBzeXN0ZW0uCi0gKi8KLQotc3RhdGljIHZvaWQgbmF0aXZlX3NtcF9zZW5kX3N0b3Aodm9pZCkKLXsKLQkvKiBEb24ndCBkZWFkbG9jayBvbiB0aGUgY2FsbCBsb2NrIGluIHBhbmljICovCi0JaW50IG5vbG9jayA9ICFzcGluX3RyeWxvY2soJmNhbGxfbG9jayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3NtcF9jYWxsX2Z1bmN0aW9uKHN0b3BfdGhpc19jcHUsIE5VTEwsIDAsIDApOwotCWlmICghbm9sb2NrKQotCQlzcGluX3VubG9jaygmY2FsbF9sb2NrKTsKLQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBSZXNjaGVkdWxlIGNhbGwgYmFjay4gTm90aGluZyB0byBkbywKLSAqIGFsbCB0aGUgd29yayBpcyBkb25lIGF1dG9tYXRpY2FsbHkgd2hlbgotICogd2UgcmV0dXJuIGZyb20gdGhlIGludGVycnVwdC4KLSAqLwotdm9pZCBzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JYWNrX0FQSUNfaXJxKCk7Ci0JX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX3Jlc2NoZWRfY291bnQrKzsKLX0KLQotdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSA9IGNhbGxfZGF0YS0+ZnVuYzsKLQl2b2lkICppbmZvID0gY2FsbF9kYXRhLT5pbmZvOwotCWludCB3YWl0ID0gY2FsbF9kYXRhLT53YWl0OwotCi0JYWNrX0FQSUNfaXJxKCk7Ci0JLyoKLQkgKiBOb3RpZnkgaW5pdGlhdGluZyBDUFUgdGhhdCBJJ3ZlIGdyYWJiZWQgdGhlIGRhdGEgYW5kIGFtCi0JICogYWJvdXQgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24KLQkgKi8KLQltYigpOwotCWF0b21pY19pbmMoJmNhbGxfZGF0YS0+c3RhcnRlZCk7Ci0JLyoKLQkgKiBBdCB0aGlzIHBvaW50IHRoZSBpbmZvIHN0cnVjdHVyZSBtYXkgYmUgb3V0IG9mIHNjb3BlIHVubGVzcyB3YWl0PT0xCi0JICovCi0JaXJxX2VudGVyKCk7Ci0JKCpmdW5jKShpbmZvKTsKLQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfY2FsbF9jb3VudCsrOwotCWlycV9leGl0KCk7Ci0KLQlpZiAod2FpdCkgewotCQltYigpOwotCQlhdG9taWNfaW5jKCZjYWxsX2RhdGEtPmZpbmlzaGVkKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgY29udmVydF9hcGljaWRfdG9fY3B1KGludCBhcGljX2lkKQotewotCWludCBpOwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJaWYgKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGkpID09IGFwaWNfaWQpCi0JCQlyZXR1cm4gaTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1pbnQgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JaW50IGFwaWNpZCwgY3B1aWQ7Ci0KLQlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUElDKSkKLQkJcmV0dXJuIDA7Ci0KLQlhcGljaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoYXBpY2lkID09IEJBRF9BUElDSUQpCi0JCXJldHVybiAwOwotCi0JY3B1aWQgPSBjb252ZXJ0X2FwaWNpZF90b19jcHUoYXBpY2lkKTsKLQotCXJldHVybiBjcHVpZCA+PSAwID8gY3B1aWQgOiAwOwotfQotCi1zdHJ1Y3Qgc21wX29wcyBzbXBfb3BzID0gewotCS5zbXBfcHJlcGFyZV9ib290X2NwdSA9IG5hdGl2ZV9zbXBfcHJlcGFyZV9ib290X2NwdSwKLQkuc21wX3ByZXBhcmVfY3B1cyA9IG5hdGl2ZV9zbXBfcHJlcGFyZV9jcHVzLAotCS5jcHVfdXAgPSBuYXRpdmVfY3B1X3VwLAotCS5zbXBfY3B1c19kb25lID0gbmF0aXZlX3NtcF9jcHVzX2RvbmUsCi0KLQkuc21wX3NlbmRfc3RvcCA9IG5hdGl2ZV9zbXBfc2VuZF9zdG9wLAotCS5zbXBfc2VuZF9yZXNjaGVkdWxlID0gbmF0aXZlX3NtcF9zZW5kX3Jlc2NoZWR1bGUsCi0JLnNtcF9jYWxsX2Z1bmN0aW9uX21hc2sgPSBuYXRpdmVfc21wX2NhbGxfZnVuY3Rpb25fbWFzaywKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChzbXBfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZkNzRiMC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MzAgKzAsMCBAQAotLyoKLSAqCUludGVsIFNNUCBzdXBwb3J0IHJvdXRpbmVzLgotICoKLSAqCShjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgotICoJKGMpIDE5OTgtOTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKiAgICAgIChjKSAyMDAyLDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgotICoKLSAqCVRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9yCi0gKglsYXRlci4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgotI2luY2x1ZGUgPGFzbS9pZGxlLmg+Ci0KLS8qCi0gKglTbWFydGVyIFNNUCBmbHVzaGluZyBtYWNyb3MuCi0gKgkJYy9vIExpbnVzIFRvcnZhbGRzLgotICoKLSAqCVRoZXNlIG1lYW4geW91IGNhbiByZWFsbHkgZGVmaW5pdGVseSB1dHRlcmx5IGZvcmdldCBhYm91dAotICoJd3JpdGluZyB0byB1c2VyIHNwYWNlIGZyb20gaW50ZXJydXB0cy4gKEl0cyBub3QgYWxsb3dlZCBhbnl3YXkpLgotICoKLSAqCU9wdGltaXphdGlvbnMgTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KLSAqCi0gKglNb3JlIHNjYWxhYmxlIGZsdXNoLCBmcm9tIEFuZGkgS2xlZW4KLSAqCi0gKglUbyBhdm9pZCBnbG9iYWwgc3RhdGUgdXNlIDggZGlmZmVyZW50IGNhbGwgdmVjdG9ycy4KLSAqCUVhY2ggQ1BVIHVzZXMgYSBzcGVjaWZpYyB2ZWN0b3IgdG8gdHJpZ2dlciBmbHVzaGVzIG9uIG90aGVyCi0gKglDUFVzLiBEZXBlbmRpbmcgb24gdGhlIHJlY2VpdmVkIHZlY3RvciB0aGUgdGFyZ2V0IENQVXMgbG9vayBpbnRvCi0gKgl0aGUgcmlnaHQgcGVyIGNwdSB2YXJpYWJsZSBmb3IgdGhlIGZsdXNoIGRhdGEuCi0gKgotICoJV2l0aCBtb3JlIHRoYW4gOCBDUFVzIHRoZXkgYXJlIGhhc2hlZCB0byB0aGUgOCBhdmFpbGFibGUKLSAqCXZlY3RvcnMuIFRoZSBsaW1pdGVkIGdsb2JhbCB2ZWN0b3Igc3BhY2UgZm9yY2VzIHVzIHRvIHRoaXMgcmlnaHQgbm93LgotICoJSW4gZnV0dXJlIHdoZW4gaW50ZXJydXB0cyBhcmUgc3BsaXQgaW50byBwZXIgQ1BVIGRvbWFpbnMgdGhpcyBjb3VsZCBiZQotICoJZml4ZWQsIGF0IHRoZSBjb3N0IG9mIHRyaWdnZXJpbmcgbXVsdGlwbGUgSVBJcyBpbiBzb21lIGNhc2VzLgotICovCi0KLXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSB7Ci0Jc3RydWN0IHsKLQkJY3B1bWFza190IGZsdXNoX2NwdW1hc2s7Ci0JCXN0cnVjdCBtbV9zdHJ1Y3QgKmZsdXNoX21tOwotCQl1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwotCQlzcGlubG9ja190IHRsYnN0YXRlX2xvY2s7Ci0JfTsKLQljaGFyIHBhZFtTTVBfQ0FDSEVfQllURVNdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLS8qIFN0YXRlIGlzIHB1dCBpbnRvIHRoZSBwZXIgQ1BVIGRhdGEgc2VjdGlvbiwgYnV0IHBhZGRlZAotICAgdG8gYSBmdWxsIGNhY2hlIGxpbmUgYmVjYXVzZSBvdGhlciBDUFVzIGNhbiBhY2Nlc3MgaXQgYW5kIHdlIGRvbid0Ci0gICB3YW50IGZhbHNlIHNoYXJpbmcgaW4gdGhlIHBlciBjcHUgZGF0YSBzZWdtZW50LiAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuaW9uIHNtcF9mbHVzaF9zdGF0ZSwgZmx1c2hfc3RhdGUpOwotCi0vKgotICogV2UgY2Fubm90IGNhbGwgbW1kcm9wKCkgYmVjYXVzZSB3ZSBhcmUgaW4gaW50ZXJydXB0IGNvbnRleHQsCi0gKiBpbnN0ZWFkIHVwZGF0ZSBtbS0+Y3B1X3ZtX21hc2suCi0gKi8KLXZvaWQgbGVhdmVfbW0oaW50IGNwdSkKLXsKLQlpZiAocmVhZF9wZGEobW11X3N0YXRlKSA9PSBUTEJTVEFURV9PSykKLQkJQlVHKCk7Ci0JY3B1X2NsZWFyKGNwdSwgcmVhZF9wZGEoYWN0aXZlX21tKS0+Y3B1X3ZtX21hc2spOwotCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGxlYXZlX21tKTsKLQotLyoKLSAqCi0gKiBUaGUgZmx1c2ggSVBJIGFzc3VtZXMgdGhhdCBhIHRocmVhZCBzd2l0Y2ggaGFwcGVucyBpbiB0aGlzIG9yZGVyOgotICogW2NwdTA6IHRoZSBjcHUgdGhhdCBzd2l0Y2hlc10KLSAqIDEpIHN3aXRjaF9tbSgpIGVpdGhlciAxYSkgb3IgMWIpCi0gKiAxYSkgdGhyZWFkIHN3aXRjaCB0byBhIGRpZmZlcmVudCBtbQotICogMWExKSBjcHVfY2xlYXIoY3B1LCBvbGRfbW0tPmNwdV92bV9tYXNrKTsKLSAqCVN0b3AgaXBpIGRlbGl2ZXJ5IGZvciB0aGUgb2xkIG1tLiBUaGlzIGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aAotICoJdGhlIG90aGVyIGNwdXMsIGJ1dCBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQgaWdub3JlIGZsdXNoIGlwaXMKLSAqCWZvciB0aGUgd3JvbmcgbW0sIGFuZCBpbiB0aGUgd29yc3QgY2FzZSB3ZSBwZXJmb3JtIGEgc3VwZXJmbHVvdXMKLSAqCXRsYiBmbHVzaC4KLSAqIDFhMikgc2V0IGNwdSBtbXVfc3RhdGUgdG8gVExCU1RBVEVfT0sKLSAqCU5vdyB0aGUgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IHdvbid0IGNhbGwgbGVhdmVfbW0gaWYgY3B1MAotICoJd2FzIGluIGxhenkgdGxiIG1vZGUuCi0gKiAxYTMpIHVwZGF0ZSBjcHUgYWN0aXZlX21tCi0gKglOb3cgY3B1MCBhY2NlcHRzIHRsYiBmbHVzaGVzIGZvciB0aGUgbmV3IG1tLgotICogMWE0KSBjcHVfc2V0KGNwdSwgbmV3X21tLT5jcHVfdm1fbWFzayk7Ci0gKglOb3cgdGhlIG90aGVyIGNwdXMgd2lsbCBzZW5kIHRsYiBmbHVzaCBpcGlzLgotICogMWE0KSBjaGFuZ2UgY3IzLgotICogMWIpIHRocmVhZCBzd2l0Y2ggd2l0aG91dCBtbSBjaGFuZ2UKLSAqCWNwdSBhY3RpdmVfbW0gaXMgY29ycmVjdCwgY3B1MCBhbHJlYWR5IGhhbmRsZXMKLSAqCWZsdXNoIGlwaXMuCi0gKiAxYjEpIHNldCBjcHUgbW11X3N0YXRlIHRvIFRMQlNUQVRFX09LCi0gKiAxYjIpIHRlc3RfYW5kX3NldCB0aGUgY3B1IGJpdCBpbiBjcHVfdm1fbWFzay4KLSAqCUF0b21pY2FsbHkgc2V0IHRoZSBiaXQgW290aGVyIGNwdXMgd2lsbCBzdGFydCBzZW5kaW5nIGZsdXNoIGlwaXNdLAotICoJYW5kIHRlc3QgdGhlIGJpdC4KLSAqIDFiMykgaWYgdGhlIGJpdCB3YXMgMDogbGVhdmVfbW0gd2FzIGNhbGxlZCwgZmx1c2ggdGhlIHRsYi4KLSAqIDIpIHN3aXRjaCAlJWVzcCwgaWUgY3VycmVudAotICoKLSAqIFRoZSBpbnRlcnJ1cHQgbXVzdCBoYW5kbGUgMiBzcGVjaWFsIGNhc2VzOgotICogLSBjcjMgaXMgY2hhbmdlZCBiZWZvcmUgJSVlc3AsIGllLiBpdCBjYW5ub3QgdXNlIGN1cnJlbnQtPnthY3RpdmVfLH1tbS4KLSAqIC0gdGhlIGNwdSBwZXJmb3JtcyBzcGVjdWxhdGl2ZSB0bGIgcmVhZHMsIGkuZS4gZXZlbiBpZiB0aGUgY3B1IG9ubHkKLSAqICAgcnVucyBpbiBrZXJuZWwgc3BhY2UsIHRoZSBjcHUgY291bGQgbG9hZCB0bGIgZW50cmllcyBmb3IgdXNlciBzcGFjZQotICogICBwYWdlcy4KLSAqCi0gKiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgY3B1IG1tdV9zdGF0ZSBpcyBsb2NhbCB0byBlYWNoIGNwdSwgbm8KLSAqIHdyaXRlL3JlYWQgb3JkZXJpbmcgcHJvYmxlbXMuCi0gKi8KLQotLyoKLSAqIFRMQiBmbHVzaCBJUEk6Ci0gKgotICogMSkgRmx1c2ggdGhlIHRsYiBlbnRyaWVzIGlmIHRoZSBjcHUgdXNlcyB0aGUgbW0gdGhhdCdzIGJlaW5nIGZsdXNoZWQuCi0gKiAyKSBMZWF2ZSB0aGUgbW0gaWYgd2UgYXJlIGluIHRoZSBsYXp5IHRsYiBtb2RlLgotICoKLSAqIEludGVycnVwdHMgYXJlIGRpc2FibGVkLgotICovCi0KLWFzbWxpbmthZ2Ugdm9pZCBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW50IGNwdTsKLQlpbnQgc2VuZGVyOwotCXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSAqZjsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQkvKgotCSAqIG9yaWdfcmF4IGNvbnRhaW5zIHRoZSBuZWdhdGVkIGludGVycnVwdCB2ZWN0b3IuCi0JICogVXNlIHRoYXQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzZW5kZXIgcHV0IHRoZSBkYXRhLgotCSAqLwotCXNlbmRlciA9IH5yZWdzLT5vcmlnX2F4IC0gSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJUOwotCWYgPSAmcGVyX2NwdShmbHVzaF9zdGF0ZSwgc2VuZGVyKTsKLQotCWlmICghY3B1X2lzc2V0KGNwdSwgZi0+Zmx1c2hfY3B1bWFzaykpCi0JCWdvdG8gb3V0OwotCQkvKgotCQkgKiBUaGlzIHdhcyBhIEJVRygpIGJ1dCB1bnRpbCBzb21lb25lIGNhbiBxdW90ZSBtZSB0aGUKLQkJICogbGluZSBmcm9tIHRoZSBpbnRlbCBtYW51YWwgdGhhdCBndWFyYW50ZWVzIGFuIElQSSB0bwotCQkgKiBtdWx0aXBsZSBDUFVzIGlzIHJldHJpZWQgX29ubHlfIG9uIHRoZSBlcnJvcmluZyBDUFVzCi0JCSAqIGl0cyBzdGF5aW5nIGFzIGEgcmV0dXJuCi0JCSAqCi0JCSAqIEJVRygpOwotCQkgKi8KLQotCWlmIChmLT5mbHVzaF9tbSA9PSByZWFkX3BkYShhY3RpdmVfbW0pKSB7Ci0JCWlmIChyZWFkX3BkYShtbXVfc3RhdGUpID09IFRMQlNUQVRFX09LKSB7Ci0JCQlpZiAoZi0+Zmx1c2hfdmEgPT0gVExCX0ZMVVNIX0FMTCkKLQkJCQlsb2NhbF9mbHVzaF90bGIoKTsKLQkJCWVsc2UKLQkJCQlfX2ZsdXNoX3RsYl9vbmUoZi0+Zmx1c2hfdmEpOwotCQl9IGVsc2UKLQkJCWxlYXZlX21tKGNwdSk7Ci0JfQotb3V0OgotCWFja19BUElDX2lycSgpOwotCWNwdV9jbGVhcihjcHUsIGYtPmZsdXNoX2NwdW1hc2spOwotCWFkZF9wZGEoaXJxX3RsYl9jb3VudCwgMSk7Ci19Ci0KLXZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgdmEpCi17Ci0JaW50IHNlbmRlcjsKLQl1bmlvbiBzbXBfZmx1c2hfc3RhdGUgKmY7Ci0JY3B1bWFza190IGNwdW1hc2sgPSAqY3B1bWFza3A7Ci0KLQkvKiBDYWxsZXIgaGFzIGRpc2FibGVkIHByZWVtcHRpb24gKi8KLQlzZW5kZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCkgJSBOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SUzsKLQlmID0gJnBlcl9jcHUoZmx1c2hfc3RhdGUsIHNlbmRlcik7Ci0KLQkvKgotCSAqIENvdWxkIGF2b2lkIHRoaXMgbG9jayB3aGVuCi0JICogbnVtX29ubGluZV9jcHVzKCkgPD0gTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMsIGJ1dCBpdCBpcwotCSAqIHByb2JhYmx5IG5vdCB3b3J0aCBjaGVja2luZyB0aGlzIGZvciBhIGNhY2hlLWhvdCBsb2NrLgotCSAqLwotCXNwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7Ci0KLQlmLT5mbHVzaF9tbSA9IG1tOwotCWYtPmZsdXNoX3ZhID0gdmE7Ci0JY3B1c19vcihmLT5mbHVzaF9jcHVtYXNrLCBjcHVtYXNrLCBmLT5mbHVzaF9jcHVtYXNrKTsKLQotCS8qCi0JICogV2UgaGF2ZSB0byBzZW5kIHRoZSBJUEkgb25seSB0bwotCSAqIENQVXMgYWZmZWN0ZWQuCi0JICovCi0Jc2VuZF9JUElfbWFzayhjcHVtYXNrLCBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQgKyBzZW5kZXIpOwotCi0Jd2hpbGUgKCFjcHVzX2VtcHR5KGYtPmZsdXNoX2NwdW1hc2spKQotCQljcHVfcmVsYXgoKTsKLQotCWYtPmZsdXNoX21tID0gTlVMTDsKLQlmLT5mbHVzaF92YSA9IDA7Ci0Jc3Bpbl91bmxvY2soJmYtPnRsYnN0YXRlX2xvY2spOwotfQotCi1pbnQgX19jcHVpbml0IGluaXRfc21wX2ZsdXNoKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfcG9zc2libGVfbWFwKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZwZXJfY3B1KGZsdXNoX3N0YXRlLCBpKS50bGJzdGF0ZV9sb2NrKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1jb3JlX2luaXRjYWxsKGluaXRfc21wX2ZsdXNoKTsKLQotdm9pZCBmbHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQljcHVtYXNrX3QgY3B1X21hc2s7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0KLQlsb2NhbF9mbHVzaF90bGIoKTsKLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQotCQlmbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfbW0gKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKLXsKLQljcHVtYXNrX3QgY3B1X21hc2s7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0KLQlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7Ci0JCWlmIChjdXJyZW50LT5tbSkKLQkJCWxvY2FsX2ZsdXNoX3RsYigpOwotCQllbHNlCi0JCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCX0KLQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQotCQlmbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi12b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyB2YSkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JY3B1bWFza190IGNwdV9tYXNrOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCi0JaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkgewotCQlpZihjdXJyZW50LT5tbSkKLQkJCV9fZmx1c2hfdGxiX29uZSh2YSk7Ci0JCWVsc2UKLQkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCi0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIHZhKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2ZsdXNoX3RsYl9hbGwodm9pZCogaW5mbykKLXsKLQl1bnNpZ25lZCBsb25nIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCV9fZmx1c2hfdGxiX2FsbCgpOwotCWlmIChyZWFkX3BkYShtbXVfc3RhdGUpID09IFRMQlNUQVRFX0xBWlkpCi0JCWxlYXZlX21tKGNwdSk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCW9uX2VhY2hfY3B1KGRvX2ZsdXNoX3RsYl9hbGwsIE5VTEwsIDEsIDEpOwotfQotCi0vKgotICogdGhpcyBmdW5jdGlvbiBzZW5kcyBhICdyZXNjaGVkdWxlJyBJUEkgdG8gYW5vdGhlciBDUFUuCi0gKiBpdCBnb2VzIHN0cmFpZ2h0IHRocm91Z2ggYW5kIHdhc3RlcyBubyB0aW1lIHNlcmlhbGl6aW5nCi0gKiBhbnl0aGluZy4gV29yc3QgY2FzZSBpcyB0aGF0IHdlIGxvc2UgYSByZXNjaGVkdWxlIC4uLgotICovCi0KLXZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQotewotCXNlbmRfSVBJX21hc2soY3B1bWFza19vZl9jcHUoY3B1KSwgUkVTQ0hFRFVMRV9WRUNUT1IpOwotfQotCi0vKgotICogU3RydWN0dXJlIGFuZCBkYXRhIGZvciBzbXBfY2FsbF9mdW5jdGlvbigpLiBUaGlzIGlzIGRlc2lnbmVkIHRvIG1pbmltaXNlCi0gKiBzdGF0aWMgbWVtb3J5IHJlcXVpcmVtZW50cy4gSXQgYWxzbyBsb29rcyBjbGVhbmVyLgotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNhbGxfbG9jayk7Ci0KLXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IHsKLQl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pOwotCXZvaWQgKmluZm87Ci0JYXRvbWljX3Qgc3RhcnRlZDsKLQlhdG9taWNfdCBmaW5pc2hlZDsKLQlpbnQgd2FpdDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCAqIGNhbGxfZGF0YTsKLQotdm9pZCBsb2NrX2lwaV9jYWxsX2xvY2sodm9pZCkKLXsKLQlzcGluX2xvY2tfaXJxKCZjYWxsX2xvY2spOwotfQotCi12b2lkIHVubG9ja19pcGlfY2FsbF9sb2NrKHZvaWQpCi17Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjYWxsX2xvY2spOwotfQotCi0vKgotICogdGhpcyBmdW5jdGlvbiBzZW5kcyBhICdnZW5lcmljIGNhbGwgZnVuY3Rpb24nIElQSSB0byBhbGwgb3RoZXIgQ1BVCi0gKiBvZiB0aGUgc3lzdGVtIGRlZmluZWQgaW4gdGhlIG1hc2suCi0gKi8KLXN0YXRpYyBpbnQgX19zbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdW1hc2tfdCBtYXNrLAotCQkJCSAgICB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywKLQkJCQkgICAgaW50IHdhaXQpCi17Ci0Jc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgZGF0YTsKLQljcHVtYXNrX3QgYWxsYnV0c2VsZjsKLQlpbnQgY3B1czsKLQotCWFsbGJ1dHNlbGYgPSBjcHVfb25saW5lX21hcDsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBhbGxidXRzZWxmKTsKLQotCWNwdXNfYW5kKG1hc2ssIG1hc2ssIGFsbGJ1dHNlbGYpOwotCWNwdXMgPSBjcHVzX3dlaWdodChtYXNrKTsKLQotCWlmICghY3B1cykKLQkJcmV0dXJuIDA7Ci0KLQlkYXRhLmZ1bmMgPSBmdW5jOwotCWRhdGEuaW5mbyA9IGluZm87Ci0JYXRvbWljX3NldCgmZGF0YS5zdGFydGVkLCAwKTsKLQlkYXRhLndhaXQgPSB3YWl0OwotCWlmICh3YWl0KQotCQlhdG9taWNfc2V0KCZkYXRhLmZpbmlzaGVkLCAwKTsKLQotCWNhbGxfZGF0YSA9ICZkYXRhOwotCXdtYigpOwotCi0JLyogU2VuZCBhIG1lc3NhZ2UgdG8gb3RoZXIgQ1BVcyAqLwotCWlmIChjcHVzX2VxdWFsKG1hc2ssIGFsbGJ1dHNlbGYpKQotCQlzZW5kX0lQSV9hbGxidXRzZWxmKENBTExfRlVOQ1RJT05fVkVDVE9SKTsKLQllbHNlCi0JCXNlbmRfSVBJX21hc2sobWFzaywgQ0FMTF9GVU5DVElPTl9WRUNUT1IpOwotCi0JLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KLQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuc3RhcnRlZCkgIT0gY3B1cykKLQkJY3B1X3JlbGF4KCk7Ci0KLQlpZiAoIXdhaXQpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKQotCQljcHVfcmVsYXgoKTsKLQotCXJldHVybiAwOwotfQotLyoqCi0gKiBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGEgc2V0IG9mIG90aGVyIENQVXMuCi0gKiBAbWFzazogVGhlIHNldCBvZiBjcHVzIHRvIHJ1biBvbi4gIE11c3Qgbm90IGluY2x1ZGUgdGhlIGN1cnJlbnQgY3B1LgotICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCi0gKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCi0gKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCi0gKgotICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkOyBvdGhlcndpc2UKLSAqIGl0IHJldHVybnMganVzdCBiZWZvcmUgdGhlIHRhcmdldCBjcHUgY2FsbHMgQGZ1bmMuCi0gKgotICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCi0gKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KLSAqLwotaW50IHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza190IG1hc2ssCi0JCQkgICB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywKLQkJCSAgIGludCB3YWl0KQotewotCWludCByZXQ7Ci0KLQkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi0JV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwotCi0Jc3Bpbl9sb2NrKCZjYWxsX2xvY2spOwotCXJldCA9IF9fc21wX2NhbGxfZnVuY3Rpb25fbWFzayhtYXNrLCBmdW5jLCBpbmZvLCB3YWl0KTsKLQlzcGluX3VubG9jaygmY2FsbF9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKTsKLQotLyoKLSAqIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGEgc3BlY2lmaWMgQ1BVCi0gKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KLSAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEBub25hdG9taWM6IEN1cnJlbnRseSB1bnVzZWQuCi0gKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gKgotICogUmV0cnVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCi0gKgotICogRG9lcyBub3QgcmV0dXJuIHVudGlsIHRoZSByZW1vdGUgQ1BVIGlzIG5lYXJseSByZWFkeSB0byBleGVjdXRlIDxmdW5jPgotICogb3IgaXMgb3IgaGFzIGV4ZWN1dGVkLgotICovCi0KLWludCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUgKGludCBjcHUsIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCi0JCQkgICAgICBpbnQgbm9uYXRvbWljLCBpbnQgd2FpdCkKLXsKLQkvKiBwcmV2ZW50IHByZWVtcHRpb24gYW5kIHJlc2NoZWR1bGUgb24gYW5vdGhlciBwcm9jZXNzb3IgKi8KLQlpbnQgcmV0LCBtZSA9IGdldF9jcHUoKTsKLQotCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7Ci0KLQlpZiAoY3B1ID09IG1lKSB7Ci0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWZ1bmMoaW5mbyk7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJcHV0X2NwdSgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdW1hc2tfb2ZfY3B1KGNwdSksIGZ1bmMsIGluZm8sIHdhaXQpOwotCi0JcHV0X2NwdSgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSk7Ci0KLS8qCi0gKiBzbXBfY2FsbF9mdW5jdGlvbiAtIHJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgotICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCi0gKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCi0gKiBAbm9uYXRvbWljOiBjdXJyZW50bHkgdW51c2VkLgotICogQHdhaXQ6IElmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIKLSAqICAgICAgICBDUFVzLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuIERvZXMgbm90IHJldHVybiB1bnRpbAotICogcmVtb3RlIENQVXMgYXJlIG5lYXJseSByZWFkeSB0byBleGVjdXRlIGZ1bmMgb3IgYXJlIG9yIGhhdmUgZXhlY3V0ZWQuCi0gKgotICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCi0gKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KLSAqIEFjdHVhbGx5IHRoZXJlIGFyZSBhIGZldyBsZWdhbCBjYXNlcywgbGlrZSBwYW5pYy4KLSAqLwotaW50IHNtcF9jYWxsX2Z1bmN0aW9uICh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgbm9uYXRvbWljLAotCQkJaW50IHdhaXQpCi17Ci0JcmV0dXJuIHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1X29ubGluZV9tYXAsIGZ1bmMsIGluZm8sIHdhaXQpOwotfQotRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7Ci0KLXN0YXRpYyB2b2lkIHN0b3BfdGhpc19jcHUodm9pZCAqZHVtbXkpCi17Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkvKgotCSAqIFJlbW92ZSB0aGlzIENQVToKLQkgKi8KLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7Ci0JZGlzYWJsZV9sb2NhbF9BUElDKCk7Ci0JZm9yICg7OykKLQkJaGFsdCgpOwotfQotCi12b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKLXsKLQlpbnQgbm9sb2NrOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocmVib290X2ZvcmNlKQotCQlyZXR1cm47Ci0KLQkvKiBEb24ndCBkZWFkbG9jayBvbiB0aGUgY2FsbCBsb2NrIGluIHBhbmljICovCi0Jbm9sb2NrID0gIXNwaW5fdHJ5bG9jaygmY2FsbF9sb2NrKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19zbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdV9vbmxpbmVfbWFwLCBzdG9wX3RoaXNfY3B1LCBOVUxMLCAwKTsKLQlpZiAoIW5vbG9jaykKLQkJc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7Ci0JZGlzYWJsZV9sb2NhbF9BUElDKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogUmVzY2hlZHVsZSBjYWxsIGJhY2suIE5vdGhpbmcgdG8gZG8sCi0gKiBhbGwgdGhlIHdvcmsgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IHdoZW4KLSAqIHdlIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQuCi0gKi8KLWFzbWxpbmthZ2Ugdm9pZCBzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQodm9pZCkKLXsKLQlhY2tfQVBJQ19pcnEoKTsKLQlhZGRfcGRhKGlycV9yZXNjaGVkX2NvdW50LCAxKTsKLX0KLQotYXNtbGlua2FnZSB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKQotewotCXZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbykgPSBjYWxsX2RhdGEtPmZ1bmM7Ci0Jdm9pZCAqaW5mbyA9IGNhbGxfZGF0YS0+aW5mbzsKLQlpbnQgd2FpdCA9IGNhbGxfZGF0YS0+d2FpdDsKLQotCWFja19BUElDX2lycSgpOwotCS8qCi0JICogTm90aWZ5IGluaXRpYXRpbmcgQ1BVIHRoYXQgSSd2ZSBncmFiYmVkIHRoZSBkYXRhIGFuZCBhbQotCSAqIGFib3V0IHRvIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCi0JICovCi0JbWIoKTsKLQlhdG9taWNfaW5jKCZjYWxsX2RhdGEtPnN0YXJ0ZWQpOwotCS8qCi0JICogQXQgdGhpcyBwb2ludCB0aGUgaW5mbyBzdHJ1Y3R1cmUgbWF5IGJlIG91dCBvZiBzY29wZSB1bmxlc3Mgd2FpdD09MQotCSAqLwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCSgqZnVuYykoaW5mbyk7Ci0JYWRkX3BkYShpcnFfY2FsbF9jb3VudCwgMSk7Ci0JaXJxX2V4aXQoKTsKLQlpZiAod2FpdCkgewotCQltYigpOwotCQlhdG9taWNfaW5jKCZjYWxsX2RhdGEtPmZpbmlzaGVkKTsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTI1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0wLDAgKzEsMTQ1MCBAQAorLyoKKyAqCXg4NiBTTVAgYm9vdGluZyBmdW5jdGlvbnMKKyAqCisgKgkoYykgMTk5NSBBbGFuIENveCwgQnVpbGRpbmcgIzMgPGFsYW5AcmVkaGF0LmNvbT4KKyAqCShjKSAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoJQ29weXJpZ2h0IDIwMDEgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICoKKyAqCU11Y2ggb2YgdGhlIGNvcmUgU01QIHdvcmsgaXMgYmFzZWQgb24gcHJldmlvdXMgd29yayBieSBUaG9tYXMgUmFka2UsIHRvCisgKgl3aG9tIGEgZ3JlYXQgbWFueSB0aGFua3MgYXJlIGV4dGVuZGVkLgorICoKKyAqCVRoYW5rcyB0byBJbnRlbCBmb3IgbWFraW5nIGF2YWlsYWJsZSBzZXZlcmFsIGRpZmZlcmVudCBQZW50aXVtLAorICoJUGVudGl1bSBQcm8gYW5kIFBlbnRpdW0tSUkvWGVvbiBNUCBtYWNoaW5lcy4KKyAqCU9yaWdpbmFsIGRldmVsb3BtZW50IG9mIExpbnV4IFNNUCBjb2RlIHN1cHBvcnRlZCBieSBDYWxkZXJhLgorICoKKyAqCVRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9yCisgKglsYXRlci4KKyAqCisgKglGaXhlcworICoJCUZlbGl4IEtvb3AJOglOUl9DUFVTIHVzZWQgcHJvcGVybHkKKyAqCQlKb3NlIFJlbmF1CToJSGFuZGxlIHNpbmdsZSBDUFUgY2FzZS4KKyAqCQlBbGFuIENveAk6CUJ5IHJlcGVhdGVkIHJlcXVlc3QgOCkgLSBUb3RhbCBCb2dvTUlQUyByZXBvcnQuCisgKgkJR3JlZyBXcmlnaHQJOglGaXggZm9yIGtlcm5lbCBzdGFja3MgcGFuaWMuCisgKgkJRXJpY2ggQm9sZXluCToJTVAgdjEuNCBhbmQgYWRkaXRpb25hbCBjaGFuZ2VzLgorICoJTWF0dGhpYXMgU2F0dGxlcgk6CUNoYW5nZXMgZm9yIDIuMSBrZXJuZWwgbWFwLgorICoJTWljaGVsIExlc3BpbmFzc2UJOglDaGFuZ2VzIGZvciAyLjEga2VybmVsIG1hcC4KKyAqCU1pY2hhZWwgQ2hhc3RhaW4JOglDaGFuZ2UgdHJhbXBvbGluZS5TIHRvIGdudSBhcy4KKyAqCQlBbGFuIENveAk6CUR1bWIgYnVnOiAnQicgc3RlcCBQUHJvJ3MgYXJlIGZpbmUKKyAqCQlJbmdvIE1vbG5hcgk6CUFkZGVkIEFQSUMgdGltZXJzLCBiYXNlZCBvbiBjb2RlCisgKgkJCQkJZnJvbSBKb3NlIFJlbmF1CisgKgkJSW5nbyBNb2xuYXIJOgl2YXJpb3VzIGNsZWFudXBzIGFuZCByZXdyaXRlcworICoJCVRpZ3JhbiBBaXZhemlhbgk6CWZpeGVkICIwLjAwIGluIC9wcm9jL3VwdGltZSBvbiBTTVAiIGJ1Zy4KKyAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzCisgKglBbmRpIEtsZWVuCQk6CUNoYW5nZWQgZm9yIFNNUCBib290IGludG8gbG9uZyBtb2RlLgorICoJCU1hcnRpbiBKLiBCbGlnaAk6IAlBZGRlZCBzdXBwb3J0IGZvciBtdWx0aS1xdWFkIHN5c3RlbXMKKyAqCQlEYXZlIEpvbmVzCToJUmVwb3J0IGludmFsaWQgY29tYmluYXRpb25zIG9mIEF0aGxvbiBDUFVzLgorICoJCVJ1c3R5IFJ1c3NlbGwJOglIYWNrZWQgaW50byBzaGFwZSBmb3IgbmV3ICJob3RwbHVnIiBib290IHByb2Nlc3MuCisgKiAgICAgIEFuZGkgS2xlZW4gICAgICAgICAgICAgIDogICAgICAgQ29udmVydGVkIHRvIG5ldyBzdGF0ZSBtYWNoaW5lLgorICoJQXNob2sgUmFqCQk6IAlDUFUgaG90cGx1ZyBzdXBwb3J0CisgKglHbGF1YmVyIENvc3RhCQk6CWkzODYgYW5kIHg4Nl82NCBpbnRlZ3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbm1pLmg+CisKKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL251bWEuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS92bWkuaD4KKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisKKyNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKyNpbmNsdWRlIDxtYWNoX3dha2VjcHUuaD4KKyNpbmNsdWRlIDxzbXBib290X2hvb2tzLmg+CisKKy8qCisgKiBGSVhNRTogRm9yIHg4Nl82NCwgdGhvc2UgYXJlIGRlZmluZWQgaW4gb3RoZXIgZmlsZXMuIEJ1dCBtb3ZpbmcgdGhlbSBoZXJlLAorICogd291bGQgbWFrZSB0aGUgc2V0dXAgYXJlYXMgZGVwZW5kZW50IG9uIHNtcCwgd2hpY2ggaXMgYSBsb3NzLiBXaGVuIHdlCisgKiBpbnRlZ3JhdGUgYXBpYyBiZXR3ZWVuIGFyY2hlcywgd2UgY2FuIHByb2JhYmx5IGRvIGEgYmV0dGVyIGpvYiwgYnV0CisgKiByaWdodCBub3csIHRoZXknbGwgc3RheSBoZXJlIC0tIGdsb21tZXIKKyAqLworCisvKiB3aGljaCBsb2dpY2FsIENQVSBudW1iZXIgbWFwcyB0byB3aGljaCBDUFUgKHBoeXNpY2FsIEFQSUMgSUQpICovCit1MTYgeDg2X2NwdV90b19hcGljaWRfaW5pdFtOUl9DUFVTXSBfX2luaXRkYXRhID0KKwkJCXsgWzAgLi4uIE5SX0NQVVMtMV0gPSBCQURfQVBJQ0lEIH07Cit2b2lkICp4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHI7CisKK3UxNiB4ODZfYmlvc19jcHVfYXBpY2lkX2luaXRbTlJfQ1BVU10gX19pbml0ZGF0YQorCQkJCT0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUQgfTsKK3ZvaWQgKng4Nl9iaW9zX2NwdV9hcGljaWRfZWFybHlfcHRyOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgordTggYXBpY2lkXzJfbm9kZVtNQVhfQVBJQ0lEXTsKKyNlbmRpZgorCisvKiBTdGF0ZSBvZiBlYWNoIENQVSAqLworREVGSU5FX1BFUl9DUFUoaW50LCBjcHVfc3RhdGUpID0geyAwIH07CisKKy8qIFN0b3JlIGFsbCBpZGxlIHRocmVhZHMsIHRoaXMgY2FuIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNyZWF0aW5nCisqIGEgbmV3IHRocmVhZC4gQWxzbyBhdm9pZHMgY29tcGxpY2F0ZWQgdGhyZWFkIGRlc3Ryb3kgZnVuY3Rpb25hbGl0eQorKiBmb3IgaWRsZSB0aHJlYWRzLgorKi8KKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKy8qCisgKiBOZWVkZWQgb25seSBmb3IgQ09ORklHX0hPVFBMVUdfQ1BVIGJlY2F1c2UgX19jcHVpbml0ZGF0YSBpcworICogcmVtb3ZlZCBhZnRlciBpbml0IGZvciAhQ09ORklHX0hPVFBMVUdfQ1BVLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGlkbGVfdGhyZWFkX2FycmF5KTsKKyNkZWZpbmUgZ2V0X2lkbGVfZm9yX2NwdSh4KSAgICAgIChwZXJfY3B1KGlkbGVfdGhyZWFkX2FycmF5LCB4KSkKKyNkZWZpbmUgc2V0X2lkbGVfZm9yX2NwdSh4LCBwKSAgIChwZXJfY3B1KGlkbGVfdGhyZWFkX2FycmF5LCB4KSA9IChwKSkKKyNlbHNlCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGVfdGhyZWFkX2FycmF5W05SX0NQVVNdIF9fY3B1aW5pdGRhdGEgOworI2RlZmluZSBnZXRfaWRsZV9mb3JfY3B1KHgpICAgICAgKGlkbGVfdGhyZWFkX2FycmF5Wyh4KV0pCisjZGVmaW5lIHNldF9pZGxlX2Zvcl9jcHUoeCwgcCkgICAoaWRsZV90aHJlYWRfYXJyYXlbKHgpXSA9IChwKSkKKyNlbmRpZgorCisvKiBOdW1iZXIgb2Ygc2libGluZ3MgcGVyIENQVSBwYWNrYWdlICovCitpbnQgc21wX251bV9zaWJsaW5ncyA9IDE7CitFWFBPUlRfU1lNQk9MKHNtcF9udW1fc2libGluZ3MpOworCisvKiBMYXN0IGxldmVsIGNhY2hlIElEIG9mIGVhY2ggbG9naWNhbCBDUFUgKi8KK0RFRklORV9QRVJfQ1BVKHUxNiwgY3B1X2xsY19pZCkgPSBCQURfQVBJQ0lEOworCisvKiBiaXRtYXAgb2Ygb25saW5lIGNwdXMgKi8KK2NwdW1hc2tfdCBjcHVfb25saW5lX21hcCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChjcHVfb25saW5lX21hcCk7CisKK2NwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKK2NwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CitjcHVtYXNrX3QgY3B1X3Bvc3NpYmxlX21hcDsKK0VYUE9SVF9TWU1CT0woY3B1X3Bvc3NpYmxlX21hcCk7CisKKy8qIHJlcHJlc2VudGluZyBIVCBzaWJsaW5ncyBvZiBlYWNoIGxvZ2ljYWwgQ1BVICovCitERUZJTkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woY3B1X3NpYmxpbmdfbWFwKTsKKworLyogcmVwcmVzZW50aW5nIEhUIGFuZCBjb3JlIHNpYmxpbmdzIG9mIGVhY2ggbG9naWNhbCBDUFUgKi8KK0RFRklORV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X2NvcmVfbWFwKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfY29yZV9tYXApOworCisvKiBQZXIgQ1BVIGJvZ29taXBzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfaW5mbyk7CisKK3N0YXRpYyBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQ7CisKK3N0YXRpYyBpbnQgYm9vdF9jcHVfbG9naWNhbF9hcGljaWQ7CisKKy8qIHJlcHJlc2VudGluZyBjcHVzIGZvciB3aGljaCBzaWJsaW5nIG1hcHMgY2FuIGJlIGNvbXB1dGVkICovCitzdGF0aWMgY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKKworLyogU2V0IGlmIHdlIGZpbmQgYSBCIHN0ZXBwaW5nIENQVSAqLworaW50IF9fY3B1aW5pdGRhdGEgc21wX2Jfc3RlcHBpbmc7CisKKyNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCisKKy8qIHdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMgKi8KK2NwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2tfbWFwW01BWF9OVU1OT0RFU10gX19yZWFkX21vc3RseSA9CisJCQkJeyBbMCAuLi4gTUFYX05VTU5PREVTLTFdID0gQ1BVX01BU0tfTk9ORSB9OworRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2tfbWFwKTsKKy8qIHdoaWNoIG5vZGUgZWFjaCBsb2dpY2FsIENQVSBpcyBvbiAqLworaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IDAgfTsKK0VYUE9SVF9TWU1CT0woY3B1X3RvX25vZGVfbWFwKTsKKworLyogc2V0IHVwIGEgbWFwcGluZyBiZXR3ZWVuIGNwdSBhbmQgbm9kZS4gKi8KK3N0YXRpYyB2b2lkIG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJNYXBwaW5nIGNwdSAlZCB0byBub2RlICVkXG4iLCBjcHUsIG5vZGUpOworCWNwdV9zZXQoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKKwljcHVfdG9fbm9kZV9tYXBbY3B1XSA9IG5vZGU7Cit9CisKKy8qIHVuZG8gYSBtYXBwaW5nIGJldHdlZW4gY3B1IGFuZCBub2RlLiAqLworc3RhdGljIHZvaWQgdW5tYXBfY3B1X3RvX25vZGUoaW50IGNwdSkKK3sKKwlpbnQgbm9kZTsKKworCXByaW50ayhLRVJOX0lORk8gIlVubWFwcGluZyBjcHUgJWQgZnJvbSBhbGwgbm9kZXNcbiIsIGNwdSk7CisJZm9yIChub2RlID0gMDsgbm9kZSA8IE1BWF9OVU1OT0RFUzsgbm9kZSsrKQorCQljcHVfY2xlYXIoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKKwljcHVfdG9fbm9kZV9tYXBbY3B1XSA9IDA7Cit9CisjZWxzZSAvKiAhKENPTkZJR19OVU1BICYmIENPTkZJR19YODZfMzIpICovCisjZGVmaW5lIG1hcF9jcHVfdG9fbm9kZShjcHUsIG5vZGUpCSh7fSkKKyNkZWZpbmUgdW5tYXBfY3B1X3RvX25vZGUoY3B1KQkoe30pCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKK3U4IGNwdV8yX2xvZ2ljYWxfYXBpY2lkW05SX0NQVVNdIF9fcmVhZF9tb3N0bHkgPQorCQkJCQl7IFswIC4uLiBOUl9DUFVTLTFdID0gQkFEX0FQSUNJRCB9OworCit2b2lkIG1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBhcGljaWQgPSBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgbm9kZSA9IGFwaWNpZF90b19ub2RlKGFwaWNpZCk7CisKKwlpZiAoIW5vZGVfb25saW5lKG5vZGUpKQorCQlub2RlID0gZmlyc3Rfb25saW5lX25vZGU7CisKKwljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdID0gYXBpY2lkOworCW1hcF9jcHVfdG9fbm9kZShjcHUsIG5vZGUpOworfQorCit2b2lkIHVubWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworCWNwdV8yX2xvZ2ljYWxfYXBpY2lkW2NwdV0gPSBCQURfQVBJQ0lEOworCXVubWFwX2NwdV90b19ub2RlKGNwdSk7Cit9CisjZWxzZQorI2RlZmluZSB1bm1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgbWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZCgpICBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogUmVwb3J0IGJhY2sgdG8gdGhlIEJvb3QgUHJvY2Vzc29yLgorICogUnVubmluZyBvbiBBUC4KKyAqLwordm9pZCBfX2NwdWluaXQgc21wX2NhbGxpbih2b2lkKQoreworCWludCBjcHVpZCwgcGh5c19pZDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwkvKgorCSAqIElmIHdha2VuIHVwIGJ5IGFuIElOSVQgaW4gYW4gODI0ODlEWCBjb25maWd1cmF0aW9uCisJICogd2UgbWF5IGdldCBoZXJlIGJlZm9yZSBhbiBJTklULWRlYXNzZXJ0IElQSSByZWFjaGVzCisJICogb3VyIGxvY2FsIEFQSUMuICBXZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBJUEkgb3Igd2UnbGwKKwkgKiBsb2NrIHVwIG9uIGFuIEFQSUMgYWNjZXNzLgorCSAqLworCXdhaXRfZm9yX2luaXRfZGVhc3NlcnQoJmluaXRfZGVhc3NlcnRlZCk7CisKKwkvKgorCSAqIChUaGlzIHdvcmtzIGV2ZW4gaWYgdGhlIEFQSUMgaXMgbm90IGVuYWJsZWQuKQorCSAqLworCXBoeXNfaWQgPSBHRVRfQVBJQ19JRChyZWFkX2FwaWNfaWQoKSk7CisJY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKGNwdV9pc3NldChjcHVpZCwgY3B1X2NhbGxpbl9tYXApKSB7CisJCXBhbmljKCIlczogcGh5cyBDUFUjJWQsIENQVSMlZCBhbHJlYWR5IHByZXNlbnQ/P1xuIiwgX19mdW5jX18sCisJCQkJCXBoeXNfaWQsIGNwdWlkKTsKKwl9CisJRHByaW50aygiQ1BVIyVkIChwaHlzIElEOiAlZCkgd2FpdGluZyBmb3IgQ0FMTE9VVFxuIiwgY3B1aWQsIHBoeXNfaWQpOworCisJLyoKKwkgKiBTVEFSVFVQIElQSXMgYXJlIGZyYWdpbGUgYmVhc3RzIGFzIHRoZXkgbWlnaHQgc29tZXRpbWVzCisJICogdHJpZ2dlciBzb21lIGdsdWUgbW90aGVyYm9hcmQgbG9naWMuIENvbXBsZXRlIEFQSUMgYnVzCisJICogc2lsZW5jZSBmb3IgMSBzZWNvbmQsIHRoaXMgb3ZlcmVzdGltYXRlcyB0aGUgdGltZSB0aGUKKwkgKiBib290IENQVSBpcyBzcGVuZGluZyB0byBzZW5kIHRoZSB1cCB0byAyIFNUQVJUVVAgSVBJcworCSAqIGJ5IGEgZmFjdG9yIG9mIHR3by4gVGhpcyBzaG91bGQgYmUgZW5vdWdoLgorCSAqLworCisJLyoKKwkgKiBXYWl0aW5nIDJzIHRvdGFsIGZvciBzdGFydHVwICh1ZGVsYXkgaXMgbm90IHlldCB3b3JraW5nKQorCSAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgMipIWjsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJLyoKKwkJICogSGFzIHRoZSBib290IENQVSBmaW5pc2hlZCBpdCdzIFNUQVJUVVAgc2VxdWVuY2U/CisJCSAqLworCQlpZiAoY3B1X2lzc2V0KGNwdWlkLCBjcHVfY2FsbG91dF9tYXApKQorCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0KKworCWlmICghdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJcGFuaWMoIiVzOiBDUFUlZCBzdGFydGVkIHVwIGJ1dCBkaWQgbm90IGdldCBhIGNhbGxvdXQhXG4iLAorCQkgICAgICBfX2Z1bmNfXywgY3B1aWQpOworCX0KKworCS8qCisJICogdGhlIGJvb3QgQ1BVIGhhcyBmaW5pc2hlZCB0aGUgaW5pdCBzdGFnZSBhbmQgaXMgc3Bpbm5pbmcKKwkgKiBvbiBjYWxsaW5fbWFwIHVudGlsIHdlIGZpbmlzaC4gV2UgYXJlIGZyZWUgdG8gc2V0IHVwIHRoaXMKKwkgKiBDUFUsIGZpcnN0IHRoZSBBUElDLiAodGhpcyBpcyBwcm9iYWJseSByZWR1bmRhbnQgb24gbW9zdAorCSAqIGJvYXJkcykKKwkgKi8KKworCURwcmludGsoIkNBTExJTiwgYmVmb3JlIHNldHVwX2xvY2FsX0FQSUMoKS5cbiIpOworCXNtcF9jYWxsaW5fY2xlYXJfbG9jYWxfYXBpYygpOworCXNldHVwX2xvY2FsX0FQSUMoKTsKKwllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOworCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKKworCS8qCisJICogR2V0IG91ciBib2dvbWlwcy4KKwkgKgorCSAqIE5lZWQgdG8gZW5hYmxlIElSUXMgYmVjYXVzZSBpdCBjYW4gdGFrZSBsb25nZXIgYW5kIHRoZW4KKwkgKiB0aGUgTk1JIHdhdGNoZG9nIG1pZ2h0IGtpbGwgdXMuCisJICovCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWNhbGlicmF0ZV9kZWxheSgpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJRHByaW50aygiU3RhY2sgYXQgYWJvdXQgJXBcbiIsICZjcHVpZCk7CisKKwkvKgorCSAqIFNhdmUgb3VyIHByb2Nlc3NvciBwYXJhbWV0ZXJzCisJICovCisJc21wX3N0b3JlX2NwdV9pbmZvKGNwdWlkKTsKKworCS8qCisJICogQWxsb3cgdGhlIG1hc3RlciB0byBjb250aW51ZS4KKwkgKi8KKwljcHVfc2V0KGNwdWlkLCBjcHVfY2FsbGluX21hcCk7Cit9CisKKy8qCisgKiBBY3RpdmF0ZSBhIHNlY29uZGFyeSBwcm9jZXNzb3IuCisgKi8KK3ZvaWQgX19jcHVpbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICp1bnVzZWQpCit7CisJLyoKKwkgKiBEb24ndCBwdXQgKmFueXRoaW5nKiBiZWZvcmUgY3B1X2luaXQoKSwgU01QIGJvb3RpbmcgaXMgdG9vCisJICogZnJhZ2lsZSB0aGF0IHdlIHdhbnQgdG8gbGltaXQgdGhlIHRoaW5ncyBkb25lIGhlcmUgdG8gdGhlCisJICogbW9zdCBuZWNlc3NhcnkgdGhpbmdzLgorCSAqLworI2lmZGVmIENPTkZJR19WTUkKKwl2bWlfYnJpbmd1cCgpOworI2VuZGlmCisJY3B1X2luaXQoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlzbXBfY2FsbGluKCk7CisKKwkvKiBvdGhlcndpc2UgZ2NjIHdpbGwgbW92ZSB1cCBzbXBfcHJvY2Vzc29yX2lkIGJlZm9yZSB0aGUgY3B1X2luaXQgKi8KKwliYXJyaWVyKCk7CisJLyoKKwkgKiBDaGVjayBUU0Mgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIEJQOgorCSAqLworCWNoZWNrX3RzY19zeW5jX3RhcmdldCgpOworCisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgeworCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJZW5hYmxlX05NSV90aHJvdWdoX0xWVDAoKTsKKwkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwl9CisKKwkvKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgc2V0dGluZyBjcHVfb25saW5lX21hcCAqLworCXNldF9jcHVfc2libGluZ19tYXAocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJd21iKCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gaG9sZCBjYWxsX2xvY2ssIHNvIHRoZXJlIGlzIG5vIGluY29uc2lzdGVuY3kKKwkgKiBiZXR3ZWVuIHRoZSB0aW1lIHNtcF9jYWxsX2Z1bmN0aW9uKCkgZGV0ZXJtaW5lcyBudW1iZXIgb2YKKwkgKiBJUEkgcmVjaXBpZW50cywgYW5kIHRoZSB0aW1lIHdoZW4gdGhlIGRldGVybWluYXRpb24gaXMgbWFkZQorCSAqIGZvciB3aGljaCBjcHVzIHJlY2VpdmUgdGhlIElQSS4gSG9sZGluZyB0aGlzCisJICogbG9jayBoZWxwcyB1cyB0byBub3QgaW5jbHVkZSB0aGlzIGNwdSBpbiBhIGN1cnJlbnRseSBpbiBwcm9ncmVzcworCSAqIHNtcF9jYWxsX2Z1bmN0aW9uKCkuCisJICovCisJbG9ja19pcGlfY2FsbF9sb2NrKCk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNwaW5fbG9jaygmdmVjdG9yX2xvY2spOworCisJLyogU2V0dXAgdGhlIHBlciBjcHUgaXJxIGhhbmRsaW5nIGRhdGEgc3RydWN0dXJlcyAqLworCV9fc2V0dXBfdmVjdG9yX2lycShzbXBfcHJvY2Vzc29yX2lkKCkpOworCS8qCisJICogQWxsb3cgdGhlIG1hc3RlciB0byBjb250aW51ZS4KKwkgKi8KKwlzcGluX3VubG9jaygmdmVjdG9yX2xvY2spOworI2VuZGlmCisJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKwl1bmxvY2tfaXBpX2NhbGxfbG9jaygpOworCXBlcl9jcHUoY3B1X3N0YXRlLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gQ1BVX09OTElORTsKKworCXNldHVwX3NlY29uZGFyeV9jbG9jaygpOworCisJd21iKCk7CisJY3B1X2lkbGUoKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBFdmVyeXRoaW5nIGhhcyBiZWVuIHNldCB1cCBmb3IgdGhlIHNlY29uZGFyeQorICogQ1BVcyAtIHRoZXkganVzdCBuZWVkIHRvIHJlbG9hZCBldmVyeXRoaW5nCisgKiBmcm9tIHRoZSB0YXNrIHN0cnVjdHVyZQorICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4uCisgKi8KK3ZvaWQgX19kZXZpbml0IGluaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpCit7CisJLyoKKwkgKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGxvYWQgdGhlIGZ1bGwgVFNTLAorCSAqIGJhc2ljYWxseSBqdXN0IHRoZSBzdGFjayBwb2ludGVyIGFuZCB0aGUgaXAuCisJICovCisKKwlhc20gdm9sYXRpbGUoCisJCSJtb3ZsICUwLCUlZXNwXG5cdCIKKwkJImptcCAqJTEiCisJCToKKwkJOiJtIiAoY3VycmVudC0+dGhyZWFkLnNwKSwgIm0iIChjdXJyZW50LT50aHJlYWQuaXApKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc21wX2FwcGx5X3F1aXJrcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogTWFzayBCLCBQZW50aXVtLCBidXQgbm90IFBlbnRpdW0gTU1YCisJICovCisJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgorCSAgICBjLT54ODYgPT0gNSAmJgorCSAgICBjLT54ODZfbWFzayA+PSAxICYmIGMtPng4Nl9tYXNrIDw9IDQgJiYKKwkgICAgYy0+eDg2X21vZGVsIDw9IDMpCisJCS8qCisJCSAqIFJlbWVtYmVyIHdlIGhhdmUgQiBzdGVwIFBlbnRpYSB3aXRoIGJ1Z3MKKwkJICovCisJCXNtcF9iX3N0ZXBwaW5nID0gMTsKKworCS8qCisJICogQ2VydGFpbiBBdGhsb25zIG1pZ2h0IHdvcmsgKGZvciB2YXJpb3VzIHZhbHVlcyBvZiAnd29yaycpIGluIFNNUAorCSAqIGJ1dCB0aGV5IGFyZSBub3QgY2VydGlmaWVkIGFzIE1QIGNhcGFibGUuCisJICovCisJaWYgKChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJiAoYy0+eDg2ID09IDYpKSB7CisKKwkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPT0gMSkKKwkJCWdvdG8gdmFsaWRfazc7CisKKwkJLyogQXRobG9uIDY2MC82NjEgaXMgdmFsaWQuICovCisJCWlmICgoYy0+eDg2X21vZGVsID09IDYpICYmICgoYy0+eDg2X21hc2sgPT0gMCkgfHwKKwkJICAgIChjLT54ODZfbWFzayA9PSAxKSkpCisJCQlnb3RvIHZhbGlkX2s3OworCisJCS8qIER1cm9uIDY3MCBpcyB2YWxpZCAqLworCQlpZiAoKGMtPng4Nl9tb2RlbCA9PSA3KSAmJiAoYy0+eDg2X21hc2sgPT0gMCkpCisJCQlnb3RvIHZhbGlkX2s3OworCisJCS8qCisJCSAqIEF0aGxvbiA2NjIsIER1cm9uIDY3MSwgYW5kIEF0aGxvbiA+bW9kZWwgNyBoYXZlIGNhcGFiaWxpdHkKKwkJICogYml0LiBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBBNSBzdGVwcGluZyAoNjYyKSBvZiBzb21lCisJCSAqIEF0aGxvbiBYUCdzIGhhdmUgdGhlIE1QIGJpdCBzZXQuCisJCSAqIFNlZSBodHRwOi8vd3d3LmhlaXNlLmRlL25ld3N0aWNrZXIvZGF0YS9qb3ctMTguMTAuMDEtMDAwIGZvcgorCQkgKiBtb3JlLgorCQkgKi8KKwkJaWYgKCgoYy0+eDg2X21vZGVsID09IDYpICYmIChjLT54ODZfbWFzayA+PSAyKSkgfHwKKwkJICAgICgoYy0+eDg2X21vZGVsID09IDcpICYmIChjLT54ODZfbWFzayA+PSAxKSkgfHwKKwkJICAgICAoYy0+eDg2X21vZGVsID4gNykpCisJCQlpZiAoY3B1X2hhc19tcCkKKwkJCQlnb3RvIHZhbGlkX2s3OworCisJCS8qIElmIHdlIGdldCBoZXJlLCBub3QgYSBjZXJ0aWZpZWQgU01QIGNhcGFibGUgQU1EIHN5c3RlbS4gKi8KKwkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOworCX0KKwordmFsaWRfazc6CisJOworI2VuZGlmCit9CisKK3ZvaWQgX19jcHVpbml0IHNtcF9jaGVja3Modm9pZCkKK3sKKwlpZiAoc21wX2Jfc3RlcHBpbmcpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IFNNUCBvcGVyYXRpb24gbWF5IGJlIHVucmVsaWFibGUiCisJCQkJICAgICJ3aXRoIEIgc3RlcHBpbmcgcHJvY2Vzc29ycy5cbiIpOworCisJLyoKKwkgKiBEb24ndCB0YWludCBpZiB3ZSBhcmUgcnVubmluZyBTTVAga2VybmVsIG9uIGEgc2luZ2xlIG5vbi1NUAorCSAqIGFwcHJvdmVkIEF0aGxvbgorCSAqLworCWlmICh0YWludGVkICYgVEFJTlRfVU5TQUZFX1NNUCkgeworCQlpZiAobnVtX29ubGluZV9jcHVzKCkpCisJCQlwcmludGsoS0VSTl9JTkZPICJXQVJOSU5HOiBUaGlzIGNvbWJpbmF0aW9uIG9mIEFNRCIKKwkJCQkicHJvY2Vzc29ycyBpcyBub3Qgc3VpdGFibGUgZm9yIFNNUC5cbiIpOworCQllbHNlCisJCQl0YWludGVkICY9IH5UQUlOVF9VTlNBRkVfU01QOworCX0KK30KKworLyoKKyAqIFRoZSBib290c3RyYXAga2VybmVsIGVudHJ5IGNvZGUgaGFzIHNldCB0aGVzZSB1cC4gU2F2ZSB0aGVtIGZvcgorICogYSBnaXZlbiBDUFUKKyAqLworCit2b2lkIF9fY3B1aW5pdCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKQoreworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShpZCk7CisKKwkqYyA9IGJvb3RfY3B1X2RhdGE7CisJYy0+Y3B1X2luZGV4ID0gaWQ7CisJaWYgKGlkICE9IDApCisJCWlkZW50aWZ5X3NlY29uZGFyeV9jcHUoYyk7CisJc21wX2FwcGx5X3F1aXJrcyhjKTsKK30KKworCit2b2lkIF9fY3B1aW5pdCBzZXRfY3B1X3NpYmxpbmdfbWFwKGludCBjcHUpCit7CisJaW50IGk7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CisKKwljcHVfc2V0KGNwdSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKTsKKworCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSkgeworCQlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfc2libGluZ19zZXR1cF9tYXApIHsKKwkJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkICYmCisJCQkgICAgYy0+Y3B1X2NvcmVfaWQgPT0gY3B1X2RhdGEoaSkuY3B1X2NvcmVfaWQpIHsKKwkJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKKwkJCQljcHVfc2V0KGNwdSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKKwkJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwkJCQljcHVfc2V0KGNwdSwgcGVyX2NwdShjcHVfY29yZV9tYXAsIGkpKTsKKwkJCQljcHVfc2V0KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKKwkJCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKKwl9CisKKwljcHVfc2V0KGNwdSwgYy0+bGxjX3NoYXJlZF9tYXApOworCisJaWYgKGN1cnJlbnRfY3B1X2RhdGEueDg2X21heF9jb3JlcyA9PSAxKSB7CisJCXBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpID0gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7CisJCWMtPmJvb3RlZF9jb3JlcyA9IDE7CisJCXJldHVybjsKKwl9CisKKwlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfc2libGluZ19zZXR1cF9tYXApIHsKKwkJaWYgKHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSAhPSBCQURfQVBJQ0lEICYmCisJCSAgICBwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPT0gcGVyX2NwdShjcHVfbGxjX2lkLCBpKSkgeworCQkJY3B1X3NldChpLCBjLT5sbGNfc2hhcmVkX21hcCk7CisJCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOworCQl9CisJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkKSB7CisJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwkJCWNwdV9zZXQoY3B1LCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSkpOworCQkJLyoKKwkJCSAqICBEb2VzIHRoaXMgbmV3IGNwdSBicmluZ3VwIGEgbmV3IGNvcmU/CisJCQkgKi8KKwkJCWlmIChjcHVzX3dlaWdodChwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkgPT0gMSkgeworCQkJCS8qCisJCQkJICogZm9yIGVhY2ggY29yZSBpbiBwYWNrYWdlLCBpbmNyZW1lbnQKKwkJCQkgKiB0aGUgYm9vdGVkX2NvcmVzIGZvciB0aGlzIG5ldyBjcHUKKwkJCQkgKi8KKwkJCQlpZiAoZmlyc3RfY3B1KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSkgPT0gaSkKKwkJCQkJYy0+Ym9vdGVkX2NvcmVzKys7CisJCQkJLyoKKwkJCQkgKiBpbmNyZW1lbnQgdGhlIGNvcmUgY291bnQgZm9yIGFsbAorCQkJCSAqIHRoZSBvdGhlciBjcHVzIGluIHRoaXMgcGFja2FnZQorCQkJCSAqLworCQkJCWlmIChpICE9IGNwdSkKKwkJCQkJY3B1X2RhdGEoaSkuYm9vdGVkX2NvcmVzKys7CisJCQl9IGVsc2UgaWYgKGkgIT0gY3B1ICYmICFjLT5ib290ZWRfY29yZXMpCisJCQkJYy0+Ym9vdGVkX2NvcmVzID0gY3B1X2RhdGEoaSkuYm9vdGVkX2NvcmVzOworCQl9CisJfQorfQorCisvKiBtYXBzIHRoZSBjcHUgdG8gdGhlIHNjaGVkIGRvbWFpbiByZXByZXNlbnRpbmcgbXVsdGktY29yZSAqLworY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKGludCBjcHUpCit7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CisJLyoKKwkgKiBGb3IgcGVyZiwgd2UgcmV0dXJuIGxhc3QgbGV2ZWwgY2FjaGUgc2hhcmVkIG1hcC4KKwkgKiBBbmQgZm9yIHBvd2VyIHNhdmluZ3MsIHdlIHJldHVybiBjcHVfY29yZV9tYXAKKwkgKi8KKwlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKKwkJcmV0dXJuIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpOworCWVsc2UKKwkJcmV0dXJuIGMtPmxsY19zaGFyZWRfbWFwOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIFdlIGFyZSBjYWxsZWQgdmVyeSBlYXJseSB0byBnZXQgdGhlIGxvdyBtZW1vcnkgZm9yIHRoZQorICogU01QIGJvb3R1cCB0cmFtcG9saW5lIHBhZ2UuCisgKi8KK3ZvaWQgX19pbml0IHNtcF9hbGxvY19tZW1vcnkodm9pZCkKK3sKKwl0cmFtcG9saW5lX2Jhc2UgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCS8qCisJICogSGFzIHRvIGJlIGluIHZlcnkgbG93IG1lbW9yeSBzbyB3ZSBjYW4gZXhlY3V0ZQorCSAqIHJlYWwtbW9kZSBBUCBjb2RlLgorCSAqLworCWlmIChfX3BhKHRyYW1wb2xpbmVfYmFzZSkgPj0gMHg5RjAwMCkKKwkJQlVHKCk7Cit9CisjZW5kaWYKKwordm9pZCBpbXByZXNzX2ZyaWVuZHModm9pZCkKK3sKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7CisJLyoKKwkgKiBBbGxvdyB0aGUgdXNlciB0byBpbXByZXNzIGZyaWVuZHMuCisJICovCisJRHByaW50aygiQmVmb3JlIGJvZ29taXBzLlxuIik7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJaWYgKGNwdV9pc3NldChjcHUsIGNwdV9jYWxsb3V0X21hcCkpCisJCQlib2dvc3VtICs9IGNwdV9kYXRhKGNwdSkubG9vcHNfcGVyX2ppZmZ5OworCXByaW50ayhLRVJOX0lORk8KKwkJIlRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkICglbHUuJTAybHUgQm9nb01JUFMpLlxuIiwKKwkJbnVtX29ubGluZV9jcHVzKCksCisJCWJvZ29zdW0vKDUwMDAwMC9IWiksCisJCShib2dvc3VtLyg1MDAwL0haKSklMTAwKTsKKworCURwcmludGsoIkJlZm9yZSBib2dvY291bnQgLSBzZXR0aW5nIGFjdGl2YXRlZD0xLlxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lucXVpcmVfcmVtb3RlX2FwaWMoaW50IGFwaWNpZCkKK3sKKwl1bnNpZ25lZCBpLCByZWdzW10gPSB7IEFQSUNfSUQgPj4gNCwgQVBJQ19MVlIgPj4gNCwgQVBJQ19TUElWID4+IDQgfTsKKwljaGFyICpuYW1lc1tdID0geyAiSUQiLCAiVkVSU0lPTiIsICJTUElWIiB9OworCWludCB0aW1lb3V0OworCXUzMiBzdGF0dXM7CisKKwlwcmludGsoS0VSTl9JTkZPICJJbnF1aXJpbmcgcmVtb3RlIEFQSUMgIyVkLi4uXG4iLCBhcGljaWQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykgeworCQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyAjJWQgJXM6ICIsIGFwaWNpZCwgbmFtZXNbaV0pOworCisJCS8qCisJCSAqIFdhaXQgZm9yIGlkbGUuCisJCSAqLworCQlzdGF0dXMgPSBzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSgpOworCQlpZiAoc3RhdHVzKQorCQkJcHJpbnRrKEtFUk5fQ09OVAorCQkJICAgICAgICJhIHByZXZpb3VzIEFQSUMgZGVsaXZlcnkgbWF5IGhhdmUgZmFpbGVkXG4iKTsKKworCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQoYXBpY2lkKSk7CisJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSLCBBUElDX0RNX1JFTVJEIHwgcmVnc1tpXSk7CisKKwkJdGltZW91dCA9IDA7CisJCWRvIHsKKwkJCXVkZWxheSgxMDApOworCQkJc3RhdHVzID0gYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX1JSX01BU0s7CisJCX0gd2hpbGUgKHN0YXR1cyA9PSBBUElDX0lDUl9SUl9JTlBST0cgJiYgdGltZW91dCsrIDwgMTAwMCk7CisKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJY2FzZSBBUElDX0lDUl9SUl9WQUxJRDoKKwkJCXN0YXR1cyA9IGFwaWNfcmVhZChBUElDX1JSUik7CisJCQlwcmludGsoS0VSTl9DT05UICIlMDh4XG4iLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWRcbiIpOworCQl9CisJfQorfQorCisjaWZkZWYgV0FLRV9TRUNPTkRBUllfVklBX05NSQorLyoKKyAqIFBva2UgdGhlIG90aGVyIENQVSBpbiB0aGUgZXllIHZpYSBOTUkgdG8gd2FrZSBpdCB1cC4gUmVtZW1iZXIgdGhhdCB0aGUgbm9ybWFsCisgKiBJTklULCBJTklULCBTVEFSVFVQIHNlcXVlbmNlIHdpbGwgcmVzZXQgdGhlIGNoaXAgaGFyZCBmb3IgdXMsIGFuZCB0aGlzCisgKiB3b24ndCAuLi4gcmVtZW1iZXIgdG8gY2xlYXIgZG93biB0aGUgQVBJQywgZXRjIGxhdGVyLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAord2FrZXVwX3NlY29uZGFyeV9jcHUoaW50IGxvZ2ljYWxfYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlbmRfc3RhdHVzLCBhY2NlcHRfc3RhdHVzID0gMDsKKwlpbnQgbWF4bHZ0OworCisJLyogVGFyZ2V0IGNoaXAgKi8KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQobG9naWNhbF9hcGljaWQpKTsKKworCS8qIEJvb3Qgb24gdGhlIHN0YWNrICovCisJLyogS2ljayB0aGUgc2Vjb25kICovCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIEFQSUNfRE1fTk1JIHwgQVBJQ19ERVNUX0xPR0lDQUwpOworCisJRHByaW50aygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOworCXNlbmRfc3RhdHVzID0gc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUoKTsKKworCS8qCisJICogR2l2ZSB0aGUgb3RoZXIgQ1BVIHNvbWUgdGltZSB0byBhY2NlcHQgdGhlIElQSS4KKwkgKi8KKwl1ZGVsYXkoMjAwKTsKKwkvKgorCSAqIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4KKwkgKi8KKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisJaWYgKG1heGx2dCA+IDMpIHsKKwkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOworCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwl9CisJYWNjZXB0X3N0YXR1cyA9IChhcGljX3JlYWQoQVBJQ19FU1IpICYgMHhFRik7CisJRHByaW50aygiTk1JIHNlbnQuXG4iKTsKKworCWlmIChzZW5kX3N0YXR1cykKKwkJcHJpbnRrKEtFUk5fRVJSICJBUElDIG5ldmVyIGRlbGl2ZXJlZD8/P1xuIik7CisJaWYgKGFjY2VwdF9zdGF0dXMpCisJCXByaW50ayhLRVJOX0VSUiAiQVBJQyBkZWxpdmVyeSBlcnJvciAoJWx4KS5cbiIsIGFjY2VwdF9zdGF0dXMpOworCisJcmV0dXJuIChzZW5kX3N0YXR1cyB8IGFjY2VwdF9zdGF0dXMpOworfQorI2VuZGlmCS8qIFdBS0VfU0VDT05EQVJZX1ZJQV9OTUkgKi8KKworI2lmZGVmIFdBS0VfU0VDT05EQVJZX1ZJQV9JTklUCitzdGF0aWMgaW50IF9fZGV2aW5pdAord2FrZXVwX3NlY29uZGFyeV9jcHUoaW50IHBoeXNfYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlbmRfc3RhdHVzLCBhY2NlcHRfc3RhdHVzID0gMDsKKwlpbnQgbWF4bHZ0LCBudW1fc3RhcnRzLCBqOworCisJaWYgKGdldF91dl9zeXN0ZW1fdHlwZSgpID09IFVWX05PTl9VTklRVUVfQVBJQykgeworCQlzZW5kX3N0YXR1cyA9IHV2X3dha2V1cF9zZWNvbmRhcnkocGh5c19hcGljaWQsIHN0YXJ0X2VpcCk7CisJCWF0b21pY19zZXQoJmluaXRfZGVhc3NlcnRlZCwgMSk7CisJCXJldHVybiBzZW5kX3N0YXR1czsKKwl9CisKKwkvKgorCSAqIEJlIHBhcmFub2lkIGFib3V0IGNsZWFyaW5nIEFQSUMgZXJyb3JzLgorCSAqLworCWlmIChBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW3BoeXNfYXBpY2lkXSkpIHsKKwkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOworCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwkJYXBpY19yZWFkKEFQSUNfRVNSKTsKKwl9CisKKwlEcHJpbnRrKCJBc3NlcnRpbmcgSU5JVC5cbiIpOworCisJLyoKKwkgKiBUdXJuIElOSVQgb24gdGFyZ2V0IGNoaXAKKwkgKi8KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQocGh5c19hcGljaWQpKTsKKworCS8qCisJICogU2VuZCBJUEkKKwkgKi8KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19JTlRfQVNTRVJUCisJCQkJfCBBUElDX0RNX0lOSVQpOworCisJRHByaW50aygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOworCXNlbmRfc3RhdHVzID0gc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUoKTsKKworCW1kZWxheSgxMCk7CisKKwlEcHJpbnRrKCJEZWFzc2VydGluZyBJTklULlxuIik7CisKKwkvKiBUYXJnZXQgY2hpcCAqLworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChwaHlzX2FwaWNpZCkpOworCisJLyogU2VuZCBJUEkgKi8KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19ETV9JTklUKTsKKworCURwcmludGsoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKKwlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7CisKKwltYigpOworCWF0b21pY19zZXQoJmluaXRfZGVhc3NlcnRlZCwgMSk7CisKKwkvKgorCSAqIFNob3VsZCB3ZSBzZW5kIFNUQVJUVVAgSVBJcyA/CisJICoKKwkgKiBEZXRlcm1pbmUgdGhpcyBiYXNlZCBvbiB0aGUgQVBJQyB2ZXJzaW9uLgorCSAqIElmIHdlIGRvbid0IGhhdmUgYW4gaW50ZWdyYXRlZCBBUElDLCBkb24ndCBzZW5kIHRoZSBTVEFSVFVQIElQSXMuCisJICovCisJaWYgKEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bcGh5c19hcGljaWRdKSkKKwkJbnVtX3N0YXJ0cyA9IDI7CisJZWxzZQorCQludW1fc3RhcnRzID0gMDsKKworCS8qCisJICogUGFyYXZpcnQgLyBWTUkgd2FudHMgYSBzdGFydHVwIElQSSBob29rIGhlcmUgdG8gc2V0IHVwIHRoZQorCSAqIHRhcmdldCBwcm9jZXNzb3Igc3RhdGUuCisJICovCisJc3RhcnR1cF9pcGlfaG9vayhwaHlzX2FwaWNpZCwgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0X3NlY29uZGFyeSwKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCQkgKHVuc2lnbmVkIGxvbmcpaW5pdF9yc3ApOworI2Vsc2UKKwkJCSAodW5zaWduZWQgbG9uZylzdGFja19zdGFydC5zcCk7CisjZW5kaWYKKworCS8qCisJICogUnVuIFNUQVJUVVAgSVBJIGxvb3AuCisJICovCisJRHByaW50aygiI3N0YXJ0dXAgbG9vcHM6ICVkLlxuIiwgbnVtX3N0YXJ0cyk7CisKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisKKwlmb3IgKGogPSAxOyBqIDw9IG51bV9zdGFydHM7IGorKykgeworCQlEcHJpbnRrKCJTZW5kaW5nIFNUQVJUVVAgIyVkLlxuIiwgaik7CisJCWFwaWNfcmVhZF9hcm91bmQoQVBJQ19TUElWKTsKKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCWFwaWNfcmVhZChBUElDX0VTUik7CisJCURwcmludGsoIkFmdGVyIGFwaWNfd3JpdGUuXG4iKTsKKworCQkvKgorCQkgKiBTVEFSVFVQIElQSQorCQkgKi8KKworCQkvKiBUYXJnZXQgY2hpcCAqLworCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQocGh5c19hcGljaWQpKTsKKworCQkvKiBCb290IG9uIHRoZSBzdGFjayAqLworCQkvKiBLaWNrIHRoZSBzZWNvbmQgKi8KKwkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIEFQSUNfRE1fU1RBUlRVUAorCQkJCQl8IChzdGFydF9laXAgPj4gMTIpKTsKKworCQkvKgorCQkgKiBHaXZlIHRoZSBvdGhlciBDUFUgc29tZSB0aW1lIHRvIGFjY2VwdCB0aGUgSVBJLgorCQkgKi8KKwkJdWRlbGF5KDMwMCk7CisKKwkJRHByaW50aygiU3RhcnR1cCBwb2ludCAxLlxuIik7CisKKwkJRHByaW50aygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOworCQlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7CisKKwkJLyoKKwkJICogR2l2ZSB0aGUgb3RoZXIgQ1BVIHNvbWUgdGltZSB0byBhY2NlcHQgdGhlIElQSS4KKwkJICovCisJCXVkZWxheSgyMDApOworCQkvKgorCQkgKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuCisJCSAqLworCQlpZiAobWF4bHZ0ID4gMykgeworCQkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOworCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCX0KKwkJYWNjZXB0X3N0YXR1cyA9IChhcGljX3JlYWQoQVBJQ19FU1IpICYgMHhFRik7CisJCWlmIChzZW5kX3N0YXR1cyB8fCBhY2NlcHRfc3RhdHVzKQorCQkJYnJlYWs7CisJfQorCURwcmludGsoIkFmdGVyIFN0YXJ0dXAuXG4iKTsKKworCWlmIChzZW5kX3N0YXR1cykKKwkJcHJpbnRrKEtFUk5fRVJSICJBUElDIG5ldmVyIGRlbGl2ZXJlZD8/P1xuIik7CisJaWYgKGFjY2VwdF9zdGF0dXMpCisJCXByaW50ayhLRVJOX0VSUiAiQVBJQyBkZWxpdmVyeSBlcnJvciAoJWx4KS5cbiIsIGFjY2VwdF9zdGF0dXMpOworCisJcmV0dXJuIChzZW5kX3N0YXR1cyB8IGFjY2VwdF9zdGF0dXMpOworfQorI2VuZGlmCS8qIFdBS0VfU0VDT05EQVJZX1ZJQV9JTklUICovCisKK3N0cnVjdCBjcmVhdGVfaWRsZSB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHRhc2tfc3RydWN0ICppZGxlOworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisJaW50IGNwdTsKK307CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBkb19mb3JrX2lkbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjcmVhdGVfaWRsZSAqY19pZGxlID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcmVhdGVfaWRsZSwgd29yayk7CisKKwljX2lkbGUtPmlkbGUgPSBmb3JrX2lkbGUoY19pZGxlLT5jcHUpOworCWNvbXBsZXRlKCZjX2lkbGUtPmRvbmUpOworfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCBkb19ib290X2NwdShpbnQgYXBpY2lkLCBpbnQgY3B1KQorLyoKKyAqIE5PVEUgLSBvbiBtb3N0IHN5c3RlbXMgdGhpcyBpcyBhIFBIWVNJQ0FMIGFwaWMgSUQsIGJ1dCBvbiBtdWx0aXF1YWQKKyAqIChpZSBjbHVzdGVyZWQgYXBpYyBhZGRyZXNzaW5nIG1vZGUpLCB0aGlzIGlzIGEgTE9HSUNBTCBhcGljIElELgorICogUmV0dXJucyB6ZXJvIGlmIENQVSBib290ZWQgT0ssIGVsc2UgZXJyb3IgY29kZSBmcm9tIHdha2V1cF9zZWNvbmRhcnlfY3B1LgorICovCit7CisJdW5zaWduZWQgbG9uZyBib290X2Vycm9yID0gMDsKKwlpbnQgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2lwOworCXVuc2lnbmVkIHNob3J0IG5taV9oaWdoID0gMCwgbm1pX2xvdyA9IDA7CisJc3RydWN0IGNyZWF0ZV9pZGxlIGNfaWRsZSA9IHsKKwkJLmNwdSA9IGNwdSwKKwkJLmRvbmUgPSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSX09OU1RBQ0soY19pZGxlLmRvbmUpLAorCX07CisJSU5JVF9XT1JLKCZjX2lkbGUud29yaywgZG9fZm9ya19pZGxlKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBnZHRzIG9mIHNlY29uZGFyeSBjcHVzLiBIb3RwbHVnIGlzIGNvbnNpZGVyZWQgKi8KKwlpZiAoIWNwdV9nZHRfZGVzY3JbY3B1XS5hZGRyZXNzICYmCisJCSEoY3B1X2dkdF9kZXNjcltjcHVdLmFkZHJlc3MgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIEdEVCBmb3IgQ1BVICVkXG4iLCBjcHUpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQWxsb2NhdGUgbm9kZSBsb2NhbCBtZW1vcnkgZm9yIEFQIHBkYXMgKi8KKwlpZiAoY3B1X3BkYShjcHUpID09ICZib290X2NwdV9wZGFbY3B1XSkgeworCQlzdHJ1Y3QgeDg2NjRfcGRhICpuZXdwZGEsICpwZGE7CisJCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKwkJcGRhID0gY3B1X3BkYShjcHUpOworCQluZXdwZGEgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCB4ODY2NF9wZGEpLCBHRlBfQVRPTUlDLAorCQkJCSAgICAgIG5vZGUpOworCQlpZiAobmV3cGRhKSB7CisJCQltZW1jcHkobmV3cGRhLCBwZGEsIHNpemVvZihzdHJ1Y3QgeDg2NjRfcGRhKSk7CisJCQljcHVfcGRhKGNwdSkgPSBuZXdwZGE7CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCSJDb3VsZCBub3QgYWxsb2NhdGUgbm9kZSBsb2NhbCBQREEgZm9yIENQVSAlZCBvbiBub2RlICVkXG4iLAorCQkJCWNwdSwgbm9kZSk7CisJfQorI2VuZGlmCisKKwlhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaCgxKTsKKworCWNfaWRsZS5pZGxlID0gZ2V0X2lkbGVfZm9yX2NwdShjcHUpOworCisJLyoKKwkgKiBXZSBjYW4ndCB1c2Uga2VybmVsX3RocmVhZCBzaW5jZSB3ZSBtdXN0IGF2b2lkIHRvCisJICogcmVzY2hlZHVsZSB0aGUgY2hpbGQuCisJICovCisJaWYgKGNfaWRsZS5pZGxlKSB7CisJCWNfaWRsZS5pZGxlLT50aHJlYWQuc3AgPSAodW5zaWduZWQgbG9uZykgKCgoc3RydWN0IHB0X3JlZ3MgKikKKwkJCShUSFJFQURfU0laRSArICB0YXNrX3N0YWNrX3BhZ2UoY19pZGxlLmlkbGUpKSkgLSAxKTsKKwkJaW5pdF9pZGxlKGNfaWRsZS5pZGxlLCBjcHUpOworCQlnb3RvIGRvX3Jlc3Q7CisJfQorCisJaWYgKCFrZXZlbnRkX3VwKCkgfHwgY3VycmVudF9pc19rZXZlbnRkKCkpCisJCWNfaWRsZS53b3JrLmZ1bmMoJmNfaWRsZS53b3JrKTsKKwllbHNlIHsKKwkJc2NoZWR1bGVfd29yaygmY19pZGxlLndvcmspOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjX2lkbGUuZG9uZSk7CisJfQorCisJaWYgKElTX0VSUihjX2lkbGUuaWRsZSkpIHsKKwkJcHJpbnRrKCJmYWlsZWQgZm9yayBmb3IgQ1BVICVkXG4iLCBjcHUpOworCQlyZXR1cm4gUFRSX0VSUihjX2lkbGUuaWRsZSk7CisJfQorCisJc2V0X2lkbGVfZm9yX2NwdShjcHUsIGNfaWRsZS5pZGxlKTsKK2RvX3Jlc3Q6CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXBlcl9jcHUoY3VycmVudF90YXNrLCBjcHUpID0gY19pZGxlLmlkbGU7CisJaW5pdF9nZHQoY3B1KTsKKwllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CisJY19pZGxlLmlkbGUtPnRocmVhZC5pcCA9ICh1bnNpZ25lZCBsb25nKSBzdGFydF9zZWNvbmRhcnk7CisJLyogU3RhY2sgZm9yIHN0YXJ0dXBfMzIgY2FuIGJlIGp1c3QgYXMgZm9yIHN0YXJ0X3NlY29uZGFyeSBvbndhcmRzICovCisJc3RhY2tfc3RhcnQuc3AgPSAodm9pZCAqKSBjX2lkbGUuaWRsZS0+dGhyZWFkLnNwOworCWlycV9jdHhfaW5pdChjcHUpOworI2Vsc2UKKwljcHVfcGRhKGNwdSktPnBjdXJyZW50ID0gY19pZGxlLmlkbGU7CisJaW5pdF9yc3AgPSBjX2lkbGUuaWRsZS0+dGhyZWFkLnNwOworCWxvYWRfc3AwKCZwZXJfY3B1KGluaXRfdHNzLCBjcHUpLCAmY19pZGxlLmlkbGUtPnRocmVhZCk7CisJaW5pdGlhbF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpc3RhcnRfc2Vjb25kYXJ5OworCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjX2lkbGUuaWRsZSwgVElGX0ZPUkspOworI2VuZGlmCisKKwkvKiBzdGFydF9pcCBoYWQgYmV0dGVyIGJlIHBhZ2UtYWxpZ25lZCEgKi8KKwlzdGFydF9pcCA9IHNldHVwX3RyYW1wb2xpbmUoKTsKKworCS8qIFNvIHdlIHNlZSB3aGF0J3MgdXAgICAqLworCXByaW50ayhLRVJOX0lORk8gIkJvb3RpbmcgcHJvY2Vzc29yICVkLyVkIGlwICVseFxuIiwKKwkJCSAgY3B1LCBhcGljaWQsIHN0YXJ0X2lwKTsKKworCS8qCisJICogVGhpcyBncnVuZ2UgcnVucyB0aGUgc3RhcnR1cCBwcm9jZXNzIGZvcgorCSAqIHRoZSB0YXJnZXRlZCBwcm9jZXNzb3IuCisJICovCisKKwlhdG9taWNfc2V0KCZpbml0X2RlYXNzZXJ0ZWQsIDApOworCisJaWYgKGdldF91dl9zeXN0ZW1fdHlwZSgpICE9IFVWX05PTl9VTklRVUVfQVBJQykgeworCisJCURwcmludGsoIlNldHRpbmcgd2FybSByZXNldCBjb2RlIGFuZCB2ZWN0b3IuXG4iKTsKKworCQlzdG9yZV9OTUlfdmVjdG9yKCZubWlfaGlnaCwgJm5taV9sb3cpOworCisJCXNtcGJvb3Rfc2V0dXBfd2FybV9yZXNldF92ZWN0b3Ioc3RhcnRfaXApOworCQkvKgorCQkgKiBCZSBwYXJhbm9pZCBhYm91dCBjbGVhcmluZyBBUElDIGVycm9ycy4KKwkgCSovCisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCQlhcGljX3JlYWQoQVBJQ19FU1IpOworCX0KKworCS8qCisJICogU3RhcnRpbmcgYWN0dWFsIElQSSBzZXF1ZW5jZS4uLgorCSAqLworCWJvb3RfZXJyb3IgPSB3YWtldXBfc2Vjb25kYXJ5X2NwdShhcGljaWQsIHN0YXJ0X2lwKTsKKworCWlmICghYm9vdF9lcnJvcikgeworCQkvKgorCQkgKiBhbGxvdyBBUHMgdG8gc3RhcnQgaW5pdGlhbGl6aW5nLgorCQkgKi8KKwkJRHByaW50aygiQmVmb3JlIENhbGxvdXQgJWQuXG4iLCBjcHUpOworCQljcHVfc2V0KGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsKKwkJRHByaW50aygiQWZ0ZXIgQ2FsbG91dCAlZC5cbiIsIGNwdSk7CisKKwkJLyoKKwkJICogV2FpdCA1cyB0b3RhbCBmb3IgYSByZXNwb25zZQorCQkgKi8KKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDUwMDAwOyB0aW1lb3V0KyspIHsKKwkJCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbGluX21hcCkpCisJCQkJYnJlYWs7CS8qIEl0IGhhcyBib290ZWQgKi8KKwkJCXVkZWxheSgxMDApOworCQl9CisKKwkJaWYgKGNwdV9pc3NldChjcHUsIGNwdV9jYWxsaW5fbWFwKSkgeworCQkJLyogbnVtYmVyIENQVXMgbG9naWNhbGx5LCBzdGFydGluZyBmcm9tIDEgKEJTUCBpcyAwKSAqLworCQkJRHByaW50aygiT0suXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOiAiLCBjcHUpOworCQkJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKGNwdSkpOworCQkJRHByaW50aygiQ1BVIGhhcyBib290ZWQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWJvb3RfZXJyb3IgPSAxOworCQkJaWYgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKil0cmFtcG9saW5lX2Jhc2UpCisJCQkJCT09IDB4QTUpCisJCQkJLyogdHJhbXBvbGluZSBzdGFydGVkIGJ1dC4uLj8gKi8KKwkJCQlwcmludGsoS0VSTl9FUlIgIlN0dWNrID8/XG4iKTsKKwkJCWVsc2UKKwkJCQkvKiB0cmFtcG9saW5lIGNvZGUgbm90IHJ1biAqLworCQkJCXByaW50ayhLRVJOX0VSUiAiTm90IHJlc3BvbmRpbmcuXG4iKTsKKwkJCWlmIChnZXRfdXZfc3lzdGVtX3R5cGUoKSAhPSBVVl9OT05fVU5JUVVFX0FQSUMpCisJCQkJaW5xdWlyZV9yZW1vdGVfYXBpYyhhcGljaWQpOworCQl9CisJfQorCisJaWYgKGJvb3RfZXJyb3IpIHsKKwkJLyogVHJ5IHRvIHB1dCB0aGluZ3MgYmFjayB0aGUgd2F5IHRoZXkgd2VyZSBiZWZvcmUgLi4uICovCisJCXVubWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJY2xlYXJfbm9kZV9jcHVtYXNrKGNwdSk7IC8qIHdhcyBzZXQgYnkgbnVtYV9hZGRfY3B1ICovCisjZW5kaWYKKwkJY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsgLyogd2FzIHNldCBieSBkb19ib290X2NwdSgpICovCisJCWNwdV9jbGVhcihjcHUsIGNwdV9pbml0aWFsaXplZCk7IC8qIHdhcyBzZXQgYnkgY3B1X2luaXQoKSAqLworCQljcHVfY2xlYXIoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKKwkJY3B1X2NsZWFyKGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IEJBRF9BUElDSUQ7CisJfQorCisJLyogbWFyayAic3R1Y2siIGFyZWEgYXMgbm90IHN0dWNrICovCisJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXRyYW1wb2xpbmVfYmFzZSkgPSAwOworCisJLyoKKwkgKiBDbGVhbnVwIHBvc3NpYmxlIGRhbmdsaW5nIGVuZHMuLi4KKwkgKi8KKwlzbXBib290X3Jlc3RvcmVfd2FybV9yZXNldF92ZWN0b3IoKTsKKworCXJldHVybiBib290X2Vycm9yOworfQorCitpbnQgX19jcHVpbml0IG5hdGl2ZV9jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgYXBpY2lkID0gY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGNwdSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOworCisJRHByaW50aygiKysrKysrKysrKysrKysrKysrKys9Xy0tLUNQVSBVUCAgJXVcbiIsIGNwdSk7CisKKwlpZiAoYXBpY2lkID09IEJBRF9BUElDSUQgfHwgYXBpY2lkID09IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCB8fAorCSAgICAhcGh5c2lkX2lzc2V0KGFwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBjcHUgJWRcbiIsIF9fZnVuY19fLCBjcHUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEFscmVhZHkgYm9vdGVkIENQVT8KKwkgKi8KKwlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKSB7CisJCURwcmludGsoImRvX2Jvb3RfY3B1ICVkIEFscmVhZHkgc3RhcnRlZFxuIiwgY3B1KTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJLyoKKwkgKiBTYXZlIGN1cnJlbnQgTVRSUiBzdGF0ZSBpbiBjYXNlIGl0IHdhcyBjaGFuZ2VkIHNpbmNlIGVhcmx5IGJvb3QKKwkgKiAoZS5nLiBieSB0aGUgQUNQSSBTTUkpIHRvIGluaXRpYWxpemUgbmV3IENQVXMgd2l0aCBNVFJScyBpbiBzeW5jOgorCSAqLworCW10cnJfc2F2ZV9zdGF0ZSgpOworCisJcGVyX2NwdShjcHVfc3RhdGUsIGNwdSkgPSBDUFVfVVBfUFJFUEFSRTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKiBpbml0IGxvdyBtZW0gbWFwcGluZyAqLworCWNsb25lX3BnZF9yYW5nZShzd2FwcGVyX3BnX2Rpciwgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BHRF9QVFJTLAorCQkJbWluX3QodW5zaWduZWQgbG9uZywgS0VSTkVMX1BHRF9QVFJTLCBVU0VSX1BHRF9QVFJTKSk7CisJZmx1c2hfdGxiX2FsbCgpOworI2VuZGlmCisKKwllcnIgPSBkb19ib290X2NwdShhcGljaWQsIGNwdSk7CisJaWYgKGVyciA8IDApIHsKKwkJRHByaW50aygiZG9fYm9vdF9jcHUgZmFpbGVkICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qCisJICogQ2hlY2sgVFNDIHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBBUCAoa2VlcCBpcnFzIGRpc2FibGVkCisJICogd2hpbGUgZG9pbmcgc28pOgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljaGVja190c2Nfc3luY19zb3VyY2UoY3B1KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwl3aGlsZSAoIWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKSkgeworCQljcHVfcmVsYXgoKTsKKwkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGYWxsIGJhY2sgdG8gbm9uIFNNUCBtb2RlIGFmdGVyIGVycm9ycy4KKyAqCisgKiBSRUQtUEVOIGF1ZGl0L3Rlc3QgdGhpcyBtb3JlLiBJIGJldCB0aGVyZSBpcyBtb3JlIHN0YXRlIG1lc3NlZCB1cCBoZXJlLgorICovCitzdGF0aWMgX19pbml0IHZvaWQgZGlzYWJsZV9zbXAodm9pZCkKK3sKKwljcHVfcHJlc2VudF9tYXAgPSBjcHVtYXNrX29mX2NwdSgwKTsKKwljcHVfcG9zc2libGVfbWFwID0gY3B1bWFza19vZl9jcHUoMCk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXNtcGJvb3RfY2xlYXJfaW9fYXBpY19pcnFzKCk7CisjZW5kaWYKKwlpZiAoc21wX2ZvdW5kX2NvbmZpZykKKwkJcGh5c19jcHVfcHJlc2VudF9tYXAgPQorCQkJCXBoeXNpZF9tYXNrX29mX3BoeXNpZChib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworCWVsc2UKKwkJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoMCk7CisJbWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZCgpOworCWNwdV9zZXQoMCwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIDApKTsKKwljcHVfc2V0KDAsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCAwKSk7Cit9CisKKy8qCisgKiBWYXJpb3VzIHNhbml0eSBjaGVja3MuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNtcF9zYW5pdHlfY2hlY2sodW5zaWduZWQgbWF4X2NwdXMpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKCFwaHlzaWRfaXNzZXQoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ3ZWlyZCwgYm9vdCBDUFUgKCMlZCkgbm90IGxpc3RlZCIKKwkJCQkgICAgImJ5IHRoZSBCSU9TLlxuIiwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOworCQlwaHlzaWRfc2V0KGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBjb3VsZG4ndCBmaW5kIGFuIFNNUCBjb25maWd1cmF0aW9uIGF0IGJvb3QgdGltZSwKKwkgKiBnZXQgb3V0IG9mIGhlcmUgbm93IQorCSAqLworCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiAhYWNwaV9sYXBpYykgeworCQlwcmVlbXB0X2VuYWJsZSgpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNNUCBtb3RoZXJib2FyZCBub3QgZGV0ZWN0ZWQuXG4iKTsKKwkJZGlzYWJsZV9zbXAoKTsKKwkJaWYgKEFQSUNfaW5pdF91bmlwcm9jZXNzb3IoKSkKKwkJCXByaW50ayhLRVJOX05PVElDRSAiTG9jYWwgQVBJQyBub3QgZGV0ZWN0ZWQuIgorCQkJCQkgICAiIFVzaW5nIGR1bW15IEFQSUMgZW11bGF0aW9uLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIE1QIHRhYmxlIHNob3VsZCBsaXN0IHRoZSBib290CisJICogQ1BVIHRvbywgYnV0IHdlIGRvIGl0IGZvciB0aGUgc2FrZSBvZiByb2J1c3RuZXNzIGFueXdheS4KKwkgKi8KKwlpZiAoIWNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSJ3ZWlyZCwgYm9vdCBDUFUgKCMlZCkgbm90IGxpc3RlZCBieSB0aGUgQklPUy5cbiIsCisJCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworCQlwaHlzaWRfc2V0KGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJfQorCXByZWVtcHRfZW5hYmxlKCk7CisKKwkvKgorCSAqIElmIHdlIGNvdWxkbid0IGZpbmQgYSBsb2NhbCBBUElDLCB0aGVuIGdldCBvdXQgb2YgaGVyZSBub3chCisJICovCisJaWYgKEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkgJiYKKwkgICAgIWNwdV9oYXNfYXBpYykgeworCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBsb2NhbCBBUElDICMlZCBub3QgZGV0ZWN0ZWQhLi4uXG4iLAorCQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZm9yY2luZyB1c2Ugb2YgZHVtbXkgQVBJQyBlbXVsYXRpb24uIgorCQkJCSIodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOworCQlzbXBib290X2NsZWFyX2lvX2FwaWMoKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXZlcmlmeV9sb2NhbF9BUElDKCk7CisKKwkvKgorCSAqIElmIFNNUCBzaG91bGQgYmUgZGlzYWJsZWQsIHRoZW4gcmVhbGx5IGRpc2FibGUgaXQhCisJICovCisJaWYgKCFtYXhfY3B1cykgeworCQlwcmludGsoS0VSTl9JTkZPICJTTVAgbW9kZSBkZWFjdGl2YXRlZCwiCisJCQkJICJmb3JjaW5nIHVzZSBvZiBkdW1teSBBUElDIGVtdWxhdGlvbi5cbiIpOworCQlzbXBib290X2NsZWFyX2lvX2FwaWMoKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImFjdGl2YXRpbmcgbWluaW1hbCBBUElDIGZvciIKKwkJCQkJICJOTUkgd2F0Y2hkb2cgdXNlLlxuIik7CisJCQljb25uZWN0X2JzcF9BUElDKCk7CisJCQlzZXR1cF9sb2NhbF9BUElDKCk7CisJCQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOworCQl9CisjZW5kaWYKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc21wX2NwdV9pbmRleF9kZWZhdWx0KHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGNwdWluZm9feDg2ICpjOworCisJZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X3Bvc3NpYmxlX21hcCkgeworCQljID0gJmNwdV9kYXRhKGkpOworCQkvKiBtYXJrIGFsbCB0byBob3RwbHVnICovCisJCWMtPmNwdV9pbmRleCA9IE5SX0NQVVM7CisJfQorfQorCisvKgorICogUHJlcGFyZSBmb3IgU01QIGJvb3R1cC4gIFRoZSBNUCB0YWJsZSBvciBBQ1BJIGhhcyBiZWVuIHJlYWQKKyAqIGVhcmxpZXIuICBKdXN0IGRvIHNvbWUgc2FuaXR5IGNoZWNraW5nIGhlcmUgYW5kIGVuYWJsZSBBUElDIG1vZGUuCisgKi8KK3ZvaWQgX19pbml0IG5hdGl2ZV9zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlubWlfd2F0Y2hkb2dfZGVmYXVsdCgpOworCXNtcF9jcHVfaW5kZXhfZGVmYXVsdCgpOworCWN1cnJlbnRfY3B1X2RhdGEgPSBib290X2NwdV9kYXRhOworCWNwdV9jYWxsaW5fbWFwID0gY3B1bWFza19vZl9jcHUoMCk7CisJbWIoKTsKKwkvKgorCSAqIFNldHVwIGJvb3QgQ1BVIGluZm9ybWF0aW9uCisJICovCisJc21wX3N0b3JlX2NwdV9pbmZvKDApOyAvKiBGaW5hbCBmdWxsIHZlcnNpb24gb2YgdGhlIGRhdGEgKi8KKwlib290X2NwdV9sb2dpY2FsX2FwaWNpZCA9IGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gMDsgIC8qIG5lZWRlZD8gKi8KKwlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOworCisJaWYgKHNtcF9zYW5pdHlfY2hlY2sobWF4X2NwdXMpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJTTVAgZGlzYWJsZWRcbiIpOworCQlkaXNhYmxlX3NtcCgpOworCQlyZXR1cm47CisJfQorCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKEdFVF9BUElDX0lEKHJlYWRfYXBpY19pZCgpKSAhPSBib290X2NwdV9waHlzaWNhbF9hcGljaWQpIHsKKwkJcGFuaWMoIkJvb3QgQVBJQyBJRCBpbiBsb2NhbCBBUElDIHVuZXhwZWN0ZWQgKCVkIHZzICVkKSIsCisJCSAgICAgR0VUX0FQSUNfSUQocmVhZF9hcGljX2lkKCkpLCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworCQkvKiBPciBjYW4gd2Ugc3dpdGNoIGJhY2sgdG8gUElDIGhlcmU/ICovCisJfQorCXByZWVtcHRfZW5hYmxlKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJY29ubmVjdF9ic3BfQVBJQygpOworI2VuZGlmCisJLyoKKwkgKiBTd2l0Y2ggZnJvbSBQSUMgdG8gQVBJQyBtb2RlLgorCSAqLworCXNldHVwX2xvY2FsX0FQSUMoKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwkvKgorCSAqIEVuYWJsZSBJTyBBUElDIGJlZm9yZSBzZXR0aW5nIHVwIGVycm9yIHZlY3RvcgorCSAqLworCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKKwkJZW5hYmxlX0lPX0FQSUMoKTsKKyNlbmRpZgorCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CisKKwltYXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKCk7CisKKwlzZXR1cF9wb3J0aW9fcmVtYXAoKTsKKworCXNtcGJvb3Rfc2V0dXBfaW9fYXBpYygpOworCS8qCisJICogU2V0IHVwIGxvY2FsIEFQSUMgdGltZXIgb24gYm9vdCBDUFUuCisJICovCisKKwlwcmludGsoS0VSTl9JTkZPICJDUFUlZDogIiwgMCk7CisJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKDApKTsKKwlzZXR1cF9ib290X2Nsb2NrKCk7Cit9CisvKgorICogRWFybHkgc2V0dXAgdG8gbWFrZSBwcmludGsgd29yay4KKyAqLwordm9pZCBfX2luaXQgbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCit7CisJaW50IG1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpbml0X2dkdChtZSk7CisJc3dpdGNoX3RvX25ld19nZHQoKTsKKyNlbmRpZgorCS8qIGFscmVhZHkgc2V0IG1lIGluIGNwdV9vbmxpbmVfbWFwIGluIGJvb3RfY3B1X2luaXQoKSAqLworCWNwdV9zZXQobWUsIGNwdV9jYWxsb3V0X21hcCk7CisJcGVyX2NwdShjcHVfc3RhdGUsIG1lKSA9IENQVV9PTkxJTkU7Cit9CisKK3ZvaWQgX19pbml0IG5hdGl2ZV9zbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlEcHJpbnRrKCJCb290IGRvbmUuXG4iKTsKKworCWltcHJlc3NfZnJpZW5kcygpOworCXNtcF9jaGVja3MoKTsKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlzZXR1cF9pb2FwaWNfZGVzdCgpOworI2VuZGlmCisJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXphcF9sb3dfbWFwcGluZ3MoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisKKyMgIGlmZGVmIENPTkZJR19YODZfMzIKK3ZvaWQgY3B1X2V4aXRfY2xlYXIodm9pZCkKK3sKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlkbGVfdGFza19leGl0KCk7CisKKwljcHVfdW5pbml0KCk7CisJaXJxX2N0eF9leGl0KGNwdSk7CisKKwljcHVfY2xlYXIoY3B1LCBjcHVfY2FsbG91dF9tYXApOworCWNwdV9jbGVhcihjcHUsIGNwdV9jYWxsaW5fbWFwKTsKKworCXVubWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOworfQorIyAgZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCit2b2lkIHJlbW92ZV9zaWJsaW5naW5mbyhpbnQgY3B1KQoreworCWludCBzaWJsaW5nOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOworCisJZm9yX2VhY2hfY3B1X21hc2soc2libGluZywgcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpIHsKKwkJY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfY29yZV9tYXAsIHNpYmxpbmcpKTsKKwkJLyovCisJCSAqIGxhc3QgdGhyZWFkIHNpYmxpbmcgaW4gdGhpcyBjcHUgY29yZSBnb2luZyBkb3duCisJCSAqLworCQlpZiAoY3B1c193ZWlnaHQocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpID09IDEpCisJCQljcHVfZGF0YShzaWJsaW5nKS5ib290ZWRfY29yZXMtLTsKKwl9CisKKwlmb3JfZWFjaF9jcHVfbWFzayhzaWJsaW5nLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKKwkJY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIHNpYmxpbmcpKTsKKwljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKKwljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwljLT5waHlzX3Byb2NfaWQgPSAwOworCWMtPmNwdV9jb3JlX2lkID0gMDsKKwljcHVfY2xlYXIoY3B1LCBjcHVfc2libGluZ19zZXR1cF9tYXApOworfQorCitpbnQgYWRkaXRpb25hbF9jcHVzIF9faW5pdGRhdGEgPSAtMTsKKworc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfYWRkaXRpb25hbF9jcHVzKGNoYXIgKnMpCit7CisJcmV0dXJuIHMgJiYgZ2V0X29wdGlvbigmcywgJmFkZGl0aW9uYWxfY3B1cykgPyAwIDogLUVJTlZBTDsKK30KK2Vhcmx5X3BhcmFtKCJhZGRpdGlvbmFsX2NwdXMiLCBzZXR1cF9hZGRpdGlvbmFsX2NwdXMpOworCisvKgorICogY3B1X3Bvc3NpYmxlX21hcCBzaG91bGQgYmUgc3RhdGljLCBpdCBjYW5ub3QgY2hhbmdlIGFzIGNwdSdzCisgKiBhcmUgb25saW5lZCwgb3Igb2ZmbGluZWQuIFRoZSByZWFzb24gaXMgcGVyLWNwdSBkYXRhLXN0cnVjdHVyZXMKKyAqIGFyZSBhbGxvY2F0ZWQgYnkgc29tZSBtb2R1bGVzIGF0IGluaXQgdGltZSwgYW5kIGRvbnQgZXhwZWN0IHRvCisgKiBkbyB0aGlzIGR5bmFtaWNhbGx5IG9uIGNwdSBhcnJpdmFsL2RlcGFydHVyZS4KKyAqIGNwdV9wcmVzZW50X21hcCBvbiB0aGUgb3RoZXIgaGFuZCBjYW4gY2hhbmdlIGR5bmFtaWNhbGx5LgorICogSW4gY2FzZSB3aGVuIGNwdV9ob3RwbHVnIGlzIG5vdCBjb21waWxlZCwgdGhlbiB3ZSByZXNvcnQgdG8gY3VycmVudAorICogYmVoYXZpb3VyLCB3aGljaCBpcyBjcHVfcG9zc2libGUgPT0gY3B1X3ByZXNlbnQuCisgKiAtIEFzaG9rIFJhagorICoKKyAqIFRocmVlIHdheXMgdG8gZmluZCBvdXQgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGhvdHBsdWcgQ1BVczoKKyAqIC0gSWYgdGhlIEJJT1Mgc3BlY2lmaWVkIGRpc2FibGVkIENQVXMgaW4gQUNQSS9tcHRhYmxlcyB1c2UgdGhhdC4KKyAqIC0gVGhlIHVzZXIgY2FuIG92ZXJ3cml0ZSBpdCB3aXRoIGFkZGl0aW9uYWxfY3B1cz1OVU0KKyAqIC0gT3RoZXJ3aXNlIGRvbid0IHJlc2VydmUgYWRkaXRpb25hbCBDUFVzLgorICogV2UgZG8gdGhpcyBiZWNhdXNlIGFkZGl0aW9uYWwgQ1BVcyB3YXN0ZSBhIGxvdCBvZiBtZW1vcnkuCisgKiAtQUsKKyAqLworX19pbml0IHZvaWQgcHJlZmlsbF9wb3NzaWJsZV9tYXAodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcG9zc2libGU7CisKKwlpZiAoYWRkaXRpb25hbF9jcHVzID09IC0xKSB7CisJCWlmIChkaXNhYmxlZF9jcHVzID4gMCkKKwkJCWFkZGl0aW9uYWxfY3B1cyA9IGRpc2FibGVkX2NwdXM7CisJCWVsc2UKKwkJCWFkZGl0aW9uYWxfY3B1cyA9IDA7CisJfQorCXBvc3NpYmxlID0gbnVtX3Byb2Nlc3NvcnMgKyBhZGRpdGlvbmFsX2NwdXM7CisJaWYgKHBvc3NpYmxlID4gTlJfQ1BVUykKKwkJcG9zc2libGUgPSBOUl9DUFVTOworCisJcHJpbnRrKEtFUk5fSU5GTyAiU01QOiBBbGxvd2luZyAlZCBDUFVzLCAlZCBob3RwbHVnIENQVXNcbiIsCisJCXBvc3NpYmxlLCBtYXhfdChpbnQsIHBvc3NpYmxlIC0gbnVtX3Byb2Nlc3NvcnMsIDApKTsKKworCWZvciAoaSA9IDA7IGkgPCBwb3NzaWJsZTsgaSsrKQorCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX3JlZiByZW1vdmVfY3B1X2Zyb21fbWFwcyhpbnQgY3B1KQoreworCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsKKwljcHVfY2xlYXIoY3B1LCBjcHVfY2FsbGluX21hcCk7CisJLyogd2FzIHNldCBieSBjcHVfaW5pdCgpICovCisJY2xlYXJfYml0KGNwdSwgKHVuc2lnbmVkIGxvbmcgKikmY3B1X2luaXRpYWxpemVkKTsKKwljbGVhcl9ub2RlX2NwdW1hc2soY3B1KTsKKyNlbmRpZgorfQorCitpbnQgX19jcHVfZGlzYWJsZSh2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIFBlcmhhcHMgdXNlIGNwdWZyZXEgdG8gZHJvcCBmcmVxdWVuY3ksIGJ1dCB0aGF0IGNvdWxkIGdvCisJICogaW50byBnZW5lcmljIGNvZGUuCisJICoKKwkgKiBXZSB3b24ndCB0YWtlIGRvd24gdGhlIGJvb3QgcHJvY2Vzc29yIG9uIGkzODYgZHVlIHRvIHNvbWUKKwkgKiBpbnRlcnJ1cHRzIG9ubHkgYmVpbmcgYWJsZSB0byBiZSBzZXJ2aWNlZCBieSB0aGUgQlNQLgorCSAqIEVzcGVjaWFsbHkgc28gaWYgd2UncmUgbm90IHVzaW5nIGFuIElPQVBJQwktendhbmUKKwkgKi8KKwlpZiAoY3B1ID09IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQorCQlzdG9wX2FwaWNfbm1pX3dhdGNoZG9nKE5VTEwpOworCWNsZWFyX2xvY2FsX0FQSUMoKTsKKworCS8qCisJICogSEFDSzoKKwkgKiBBbGxvdyBhbnkgcXVldWVkIHRpbWVyIGludGVycnVwdHMgdG8gZ2V0IHNlcnZpY2VkCisJICogVGhpcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHVudGlsIHdlIGNsZWFudXAKKwkgKiBmaXh1cF9pcnFzIGFzIHdlIGRvIGZvciBJQTY0LgorCSAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKwltZGVsYXkoMSk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJlbW92ZV9zaWJsaW5naW5mbyhjcHUpOworCisJLyogSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhpcyBwcm9jZXNzb3IgZnJvbSB0aGUgb25saW5lIG1hcCAqLworCXJlbW92ZV9jcHVfZnJvbV9tYXBzKGNwdSk7CisJZml4dXBfaXJxcyhjcHVfb25saW5lX21hcCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisJLyogV2UgZG9uJ3QgZG8gYW55dGhpbmcgaGVyZTogaWRsZSB0YXNrIGlzIGZha2luZyBkZWF0aCBpdHNlbGYuICovCisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkvKiBUaGV5IGFjayB0aGlzIGluIHBsYXlfZGVhZCBieSBzZXR0aW5nIENQVV9ERUFEICovCisJCWlmIChwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1KSA9PSBDUFVfREVBRCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkIGlzIG5vdyBvZmZsaW5lXG4iLCBjcHUpOworCQkJaWYgKDEgPT0gbnVtX29ubGluZV9jcHVzKCkpCisJCQkJYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goMCk7CisJCQlyZXR1cm47CisJCX0KKwkJbXNsZWVwKDEwMCk7CisJfQorCXByaW50ayhLRVJOX0VSUiAiQ1BVICV1IGRpZG4ndCBkaWUuLi5cbiIsIGNwdSk7Cit9CisjZWxzZSAvKiAuLi4gIUNPTkZJR19IT1RQTFVHX0NQVSAqLworaW50IF9fY3B1X2Rpc2FibGUodm9pZCkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKwordm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKiBXZSBzYWlkICJubyIgaW4gX19jcHVfZGlzYWJsZSAqLworCUJVRygpOworfQorI2VuZGlmCisKKy8qCisgKiBJZiB0aGUgQklPUyBlbnVtZXJhdGVzIHBoeXNpY2FsIHByb2Nlc3NvcnMgYmVmb3JlIGxvZ2ljYWwsCisgKiBtYXhjcHVzPU4gYXQgZW51bWVyYXRpb24tdGltZSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIEhULgorICovCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tYXhjcHVzKGNoYXIgKmFyZykKK3sKKwlleHRlcm4gdW5zaWduZWQgaW50IG1heGNwdXM7CisKKwltYXhjcHVzID0gc2ltcGxlX3N0cnRvdWwoYXJnLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJtYXhjcHVzIiwgcGFyc2VfbWF4Y3B1cyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3RfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc5YjliNy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdF8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMyMCArMCwwIEBACi0vKgotICoJeDg2IFNNUCBib290aW5nIGZ1bmN0aW9ucwotICoKLSAqCShjKSAxOTk1IEFsYW4gQ294LCBCdWlsZGluZyAjMyA8YWxhbkByZWRoYXQuY29tPgotICoJKGMpIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJTXVjaCBvZiB0aGUgY29yZSBTTVAgd29yayBpcyBiYXNlZCBvbiBwcmV2aW91cyB3b3JrIGJ5IFRob21hcyBSYWRrZSwgdG8KLSAqCXdob20gYSBncmVhdCBtYW55IHRoYW5rcyBhcmUgZXh0ZW5kZWQuCi0gKgotICoJVGhhbmtzIHRvIEludGVsIGZvciBtYWtpbmcgYXZhaWxhYmxlIHNldmVyYWwgZGlmZmVyZW50IFBlbnRpdW0sCi0gKglQZW50aXVtIFBybyBhbmQgUGVudGl1bS1JSS9YZW9uIE1QIG1hY2hpbmVzLgotICoJT3JpZ2luYWwgZGV2ZWxvcG1lbnQgb2YgTGludXggU01QIGNvZGUgc3VwcG9ydGVkIGJ5IENhbGRlcmEuCi0gKgotICoJVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IKLSAqCWxhdGVyLgotICoKLSAqCUZpeGVzCi0gKgkJRmVsaXggS29vcAk6CU5SX0NQVVMgdXNlZCBwcm9wZXJseQotICoJCUpvc2UgUmVuYXUJOglIYW5kbGUgc2luZ2xlIENQVSBjYXNlLgotICoJCUFsYW4gQ294CToJQnkgcmVwZWF0ZWQgcmVxdWVzdCA4KSAtIFRvdGFsIEJvZ29NSVBTIHJlcG9ydC4KLSAqCQlHcmVnIFdyaWdodAk6CUZpeCBmb3Iga2VybmVsIHN0YWNrcyBwYW5pYy4KLSAqCQlFcmljaCBCb2xleW4JOglNUCB2MS40IGFuZCBhZGRpdGlvbmFsIGNoYW5nZXMuCi0gKglNYXR0aGlhcyBTYXR0bGVyCToJQ2hhbmdlcyBmb3IgMi4xIGtlcm5lbCBtYXAuCi0gKglNaWNoZWwgTGVzcGluYXNzZQk6CUNoYW5nZXMgZm9yIDIuMSBrZXJuZWwgbWFwLgotICoJTWljaGFlbCBDaGFzdGFpbgk6CUNoYW5nZSB0cmFtcG9saW5lLlMgdG8gZ251IGFzLgotICoJCUFsYW4gQ294CToJRHVtYiBidWc6ICdCJyBzdGVwIFBQcm8ncyBhcmUgZmluZQotICoJCUluZ28gTW9sbmFyCToJQWRkZWQgQVBJQyB0aW1lcnMsIGJhc2VkIG9uIGNvZGUKLSAqCQkJCQlmcm9tIEpvc2UgUmVuYXUKLSAqCQlJbmdvIE1vbG5hcgk6CXZhcmlvdXMgY2xlYW51cHMgYW5kIHJld3JpdGVzCi0gKgkJVGlncmFuIEFpdmF6aWFuCToJZml4ZWQgIjAuMDAgaW4gL3Byb2MvdXB0aW1lIG9uIFNNUCIgYnVnLgotICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3MKLSAqCQlNYXJ0aW4gSi4gQmxpZ2gJOiAJQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGktcXVhZCBzeXN0ZW1zCi0gKgkJRGF2ZSBKb25lcwk6CVJlcG9ydCBpbnZhbGlkIGNvbWJpbmF0aW9ucyBvZiBBdGhsb24gQ1BVcy4KLSoJCVJ1c3R5IFJ1c3NlbGwJOglIYWNrZWQgaW50byBzaGFwZSBmb3IgbmV3ICJob3RwbHVnIiBib290IHByb2Nlc3MuICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF93YWtlY3B1Lmg+Ci0jaW5jbHVkZSA8c21wYm9vdF9ob29rcy5oPgotI2luY2x1ZGUgPGFzbS92bWkuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotCi0vKiBTZXQgaWYgd2UgZmluZCBhIEIgc3RlcHBpbmcgQ1BVICovCi1zdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgc21wX2Jfc3RlcHBpbmc7Ci0KLS8qIE51bWJlciBvZiBzaWJsaW5ncyBwZXIgQ1BVIHBhY2thZ2UgKi8KLWludCBzbXBfbnVtX3NpYmxpbmdzID0gMTsKLUVYUE9SVF9TWU1CT0woc21wX251bV9zaWJsaW5ncyk7Ci0KLS8qIExhc3QgbGV2ZWwgY2FjaGUgSUQgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotREVGSU5FX1BFUl9DUFUodTgsIGNwdV9sbGNfaWQpID0gQkFEX0FQSUNJRDsKLQotLyogcmVwcmVzZW50aW5nIEhUIHNpYmxpbmdzIG9mIGVhY2ggbG9naWNhbCBDUFUgKi8KLURFRklORV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X3NpYmxpbmdfbWFwKTsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfc2libGluZ19tYXApOwotCi0vKiByZXByZXNlbnRpbmcgSFQgYW5kIGNvcmUgc2libGluZ3Mgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBjcHVfY29yZV9tYXApOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9jb3JlX21hcCk7Ci0KLS8qIGJpdG1hcCBvZiBvbmxpbmUgY3B1cyAqLwotY3B1bWFza190IGNwdV9vbmxpbmVfbWFwIF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MKGNwdV9vbmxpbmVfbWFwKTsKLQotY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwotY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKLWNwdW1hc2tfdCBjcHVfcG9zc2libGVfbWFwOwotRVhQT1JUX1NZTUJPTChjcHVfcG9zc2libGVfbWFwKTsKLXN0YXRpYyBjcHVtYXNrX3Qgc21wX2NvbW1lbmNlZF9tYXNrOwotCi0vKiBQZXIgQ1BVIGJvZ29taXBzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCi1ERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY3B1aW5mb194ODYsIGNwdV9pbmZvKTsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfaW5mbyk7Ci0KLS8qIHdoaWNoIGxvZ2ljYWwgQ1BVIG51bWJlciBtYXBzIHRvIHdoaWNoIENQVSAocGh5c2ljYWwgQVBJQyBJRCkgKi8KLXU4IHg4Nl9jcHVfdG9fYXBpY2lkX2luaXRbTlJfQ1BVU10gX19pbml0ZGF0YSA9Ci0JCQl7IFswIC4uLiBOUl9DUFVTLTFdID0gQkFEX0FQSUNJRCB9Owotdm9pZCAqeDg2X2NwdV90b19hcGljaWRfZWFybHlfcHRyOwotREVGSU5FX1BFUl9DUFUodTgsIHg4Nl9jcHVfdG9fYXBpY2lkKSA9IEJBRF9BUElDSUQ7Ci1FWFBPUlRfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOwotCi11OCBhcGljaWRfMl9ub2RlW01BWF9BUElDSURdOwotCi0vKgotICogVHJhbXBvbGluZSA4MHg4NiBwcm9ncmFtIGFzIGFuIGFycmF5LgotICovCi0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHRyYW1wb2xpbmVfZGF0YSBbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHRyYW1wb2xpbmVfZW5kICBbXTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICp0cmFtcG9saW5lX2Jhc2U7Ci0KLXN0YXRpYyB2b2lkIG1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQodm9pZCk7Ci0KLS8qIFN0YXRlIG9mIGVhY2ggQ1BVLiAqLwotREVGSU5FX1BFUl9DUFUoaW50LCBjcHVfc3RhdGUpID0geyAwIH07Ci0KLS8qCi0gKiBDdXJyZW50bHkgdHJpdmlhbC4gV3JpdGUgdGhlIHJlYWwtPnByb3RlY3RlZCBtb2RlCi0gKiBib290c3RyYXAgaW50byB0aGUgcGFnZSBjb25jZXJuZWQuIFRoZSBjYWxsZXIKLSAqIGhhcyBtYWRlIHN1cmUgaXQncyBzdWl0YWJseSBhbGlnbmVkLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fY3B1aW5pdCBzZXR1cF90cmFtcG9saW5lKHZvaWQpCi17Ci0JbWVtY3B5KHRyYW1wb2xpbmVfYmFzZSwgdHJhbXBvbGluZV9kYXRhLCB0cmFtcG9saW5lX2VuZCAtIHRyYW1wb2xpbmVfZGF0YSk7Ci0JcmV0dXJuIHZpcnRfdG9fcGh5cyh0cmFtcG9saW5lX2Jhc2UpOwotfQotCi0vKgotICogV2UgYXJlIGNhbGxlZCB2ZXJ5IGVhcmx5IHRvIGdldCB0aGUgbG93IG1lbW9yeSBmb3IgdGhlCi0gKiBTTVAgYm9vdHVwIHRyYW1wb2xpbmUgcGFnZS4KLSAqLwotdm9pZCBfX2luaXQgc21wX2FsbG9jX21lbW9yeSh2b2lkKQotewotCXRyYW1wb2xpbmVfYmFzZSA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7Ci0JLyoKLQkgKiBIYXMgdG8gYmUgaW4gdmVyeSBsb3cgbWVtb3J5IHNvIHdlIGNhbiBleGVjdXRlCi0JICogcmVhbC1tb2RlIEFQIGNvZGUuCi0JICovCi0JaWYgKF9fcGEodHJhbXBvbGluZV9iYXNlKSA+PSAweDlGMDAwKQotCQlCVUcoKTsKLX0KLQotLyoKLSAqIFRoZSBib290c3RyYXAga2VybmVsIGVudHJ5IGNvZGUgaGFzIHNldCB0aGVzZSB1cC4gU2F2ZSB0aGVtIGZvcgotICogYSBnaXZlbiBDUFUKLSAqLwotCi12b2lkIF9fY3B1aW5pdCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKQotewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShpZCk7Ci0KLQkqYyA9IGJvb3RfY3B1X2RhdGE7Ci0JYy0+Y3B1X2luZGV4ID0gaWQ7Ci0JaWYgKGlkIT0wKQotCQlpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGMpOwotCS8qCi0JICogTWFzayBCLCBQZW50aXVtLCBidXQgbm90IFBlbnRpdW0gTU1YCi0JICovCi0JaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgotCSAgICBjLT54ODYgPT0gNSAmJgotCSAgICBjLT54ODZfbWFzayA+PSAxICYmIGMtPng4Nl9tYXNrIDw9IDQgJiYKLQkgICAgYy0+eDg2X21vZGVsIDw9IDMpCi0JCS8qCi0JCSAqIFJlbWVtYmVyIHdlIGhhdmUgQiBzdGVwIFBlbnRpYSB3aXRoIGJ1Z3MKLQkJICovCi0JCXNtcF9iX3N0ZXBwaW5nID0gMTsKLQotCS8qCi0JICogQ2VydGFpbiBBdGhsb25zIG1pZ2h0IHdvcmsgKGZvciB2YXJpb3VzIHZhbHVlcyBvZiAnd29yaycpIGluIFNNUAotCSAqIGJ1dCB0aGV5IGFyZSBub3QgY2VydGlmaWVkIGFzIE1QIGNhcGFibGUuCi0JICovCi0JaWYgKChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJiAoYy0+eDg2ID09IDYpKSB7Ci0KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPT0gMSkKLQkJCWdvdG8gdmFsaWRfazc7Ci0KLQkJLyogQXRobG9uIDY2MC82NjEgaXMgdmFsaWQuICovCQotCQlpZiAoKGMtPng4Nl9tb2RlbD09NikgJiYgKChjLT54ODZfbWFzaz09MCkgfHwgKGMtPng4Nl9tYXNrPT0xKSkpCi0JCQlnb3RvIHZhbGlkX2s3OwotCi0JCS8qIER1cm9uIDY3MCBpcyB2YWxpZCAqLwotCQlpZiAoKGMtPng4Nl9tb2RlbD09NykgJiYgKGMtPng4Nl9tYXNrPT0wKSkKLQkJCWdvdG8gdmFsaWRfazc7Ci0KLQkJLyoKLQkJICogQXRobG9uIDY2MiwgRHVyb24gNjcxLCBhbmQgQXRobG9uID5tb2RlbCA3IGhhdmUgY2FwYWJpbGl0eSBiaXQuCi0JCSAqIEl0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIEE1IHN0ZXBwaW5nICg2NjIpIG9mIHNvbWUgQXRobG9uIFhQJ3MKLQkJICogaGF2ZSB0aGUgTVAgYml0IHNldC4KLQkJICogU2VlIGh0dHA6Ly93d3cuaGVpc2UuZGUvbmV3c3RpY2tlci9kYXRhL2pvdy0xOC4xMC4wMS0wMDAgZm9yIG1vcmUuCi0JCSAqLwotCQlpZiAoKChjLT54ODZfbW9kZWw9PTYpICYmIChjLT54ODZfbWFzaz49MikpIHx8Ci0JCSAgICAoKGMtPng4Nl9tb2RlbD09NykgJiYgKGMtPng4Nl9tYXNrPj0xKSkgfHwKLQkJICAgICAoYy0+eDg2X21vZGVsPiA3KSkKLQkJCWlmIChjcHVfaGFzX21wKQotCQkJCWdvdG8gdmFsaWRfazc7Ci0KLQkJLyogSWYgd2UgZ2V0IGhlcmUsIGl0J3Mgbm90IGEgY2VydGlmaWVkIFNNUCBjYXBhYmxlIEFNRCBzeXN0ZW0uICovCi0JCWFkZF90YWludChUQUlOVF9VTlNBRkVfU01QKTsKLQl9Ci0KLXZhbGlkX2s3OgotCTsKLX0KLQotc3RhdGljIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKLQotc3RhdGljIHZvaWQgX19jcHVpbml0IHNtcF9jYWxsaW4odm9pZCkKLXsKLQlpbnQgY3B1aWQsIHBoeXNfaWQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyoKLQkgKiBJZiB3YWtlbiB1cCBieSBhbiBJTklUIGluIGFuIDgyNDg5RFggY29uZmlndXJhdGlvbgotCSAqIHdlIG1heSBnZXQgaGVyZSBiZWZvcmUgYW4gSU5JVC1kZWFzc2VydCBJUEkgcmVhY2hlcwotCSAqIG91ciBsb2NhbCBBUElDLiAgV2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgSVBJIG9yIHdlJ2xsCi0JICogbG9jayB1cCBvbiBhbiBBUElDIGFjY2Vzcy4KLQkgKi8KLQl3YWl0X2Zvcl9pbml0X2RlYXNzZXJ0KCZpbml0X2RlYXNzZXJ0ZWQpOwotCi0JLyoKLQkgKiAoVGhpcyB3b3JrcyBldmVuIGlmIHRoZSBBUElDIGlzIG5vdCBlbmFibGVkLikKLQkgKi8KLQlwaHlzX2lkID0gR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKLQljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoY3B1X2lzc2V0KGNwdWlkLCBjcHVfY2FsbGluX21hcCkpIHsKLQkJcHJpbnRrKCJodWgsIHBoeXMgQ1BVIyVkLCBDUFUjJWQgYWxyZWFkeSBwcmVzZW50Pz9cbiIsCi0JCQkJCXBoeXNfaWQsIGNwdWlkKTsKLQkJQlVHKCk7Ci0JfQotCURwcmludGsoIkNQVSMlZCAocGh5cyBJRDogJWQpIHdhaXRpbmcgZm9yIENBTExPVVRcbiIsIGNwdWlkLCBwaHlzX2lkKTsKLQotCS8qCi0JICogU1RBUlRVUCBJUElzIGFyZSBmcmFnaWxlIGJlYXN0cyBhcyB0aGV5IG1pZ2h0IHNvbWV0aW1lcwotCSAqIHRyaWdnZXIgc29tZSBnbHVlIG1vdGhlcmJvYXJkIGxvZ2ljLiBDb21wbGV0ZSBBUElDIGJ1cwotCSAqIHNpbGVuY2UgZm9yIDEgc2Vjb25kLCB0aGlzIG92ZXJlc3RpbWF0ZXMgdGhlIHRpbWUgdGhlCi0JICogYm9vdCBDUFUgaXMgc3BlbmRpbmcgdG8gc2VuZCB0aGUgdXAgdG8gMiBTVEFSVFVQIElQSXMKLQkgKiBieSBhIGZhY3RvciBvZiB0d28uIFRoaXMgc2hvdWxkIGJlIGVub3VnaC4KLQkgKi8KLQotCS8qCi0JICogV2FpdGluZyAycyB0b3RhbCBmb3Igc3RhcnR1cCAodWRlbGF5IGlzIG5vdCB5ZXQgd29ya2luZykKLQkgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArIDIqSFo7Ci0Jd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCS8qCi0JCSAqIEhhcyB0aGUgYm9vdCBDUFUgZmluaXNoZWQgaXQncyBTVEFSVFVQIHNlcXVlbmNlPwotCQkgKi8KLQkJaWYgKGNwdV9pc3NldChjcHVpZCwgY3B1X2NhbGxvdXRfbWFwKSkKLQkJCWJyZWFrOwotCQlyZXBfbm9wKCk7Ci0JfQotCi0JaWYgKCF0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewotCQlwcmludGsoIkJVRzogQ1BVJWQgc3RhcnRlZCB1cCBidXQgZGlkIG5vdCBnZXQgYSBjYWxsb3V0IVxuIiwKLQkJCWNwdWlkKTsKLQkJQlVHKCk7Ci0JfQotCi0JLyoKLQkgKiB0aGUgYm9vdCBDUFUgaGFzIGZpbmlzaGVkIHRoZSBpbml0IHN0YWdlIGFuZCBpcyBzcGlubmluZwotCSAqIG9uIGNhbGxpbl9tYXAgdW50aWwgd2UgZmluaXNoLiBXZSBhcmUgZnJlZSB0byBzZXQgdXAgdGhpcwotCSAqIENQVSwgZmlyc3QgdGhlIEFQSUMuICh0aGlzIGlzIHByb2JhYmx5IHJlZHVuZGFudCBvbiBtb3N0Ci0JICogYm9hcmRzKQotCSAqLwotCi0JRHByaW50aygiQ0FMTElOLCBiZWZvcmUgc2V0dXBfbG9jYWxfQVBJQygpLlxuIik7Ci0Jc21wX2NhbGxpbl9jbGVhcl9sb2NhbF9hcGljKCk7Ci0Jc2V0dXBfbG9jYWxfQVBJQygpOwotCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKLQotCS8qCi0JICogR2V0IG91ciBib2dvbWlwcy4KLQkgKi8KLQljYWxpYnJhdGVfZGVsYXkoKTsKLQlEcHJpbnRrKCJTdGFjayBhdCBhYm91dCAlcFxuIiwmY3B1aWQpOwotCi0JLyoKLQkgKiBTYXZlIG91ciBwcm9jZXNzb3IgcGFyYW1ldGVycwotCSAqLwotCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHVpZCk7Ci0KLQkvKgotCSAqIEFsbG93IHRoZSBtYXN0ZXIgdG8gY29udGludWUuCi0JICovCi0JY3B1X3NldChjcHVpZCwgY3B1X2NhbGxpbl9tYXApOwotfQotCi1zdGF0aWMgaW50IGNwdWNvdW50OwotCi0vKiBtYXBzIHRoZSBjcHUgdG8gdGhlIHNjaGVkIGRvbWFpbiByZXByZXNlbnRpbmcgbXVsdGktY29yZSAqLwotY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKGludCBjcHUpCi17Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7Ci0JLyoKLQkgKiBGb3IgcGVyZiwgd2UgcmV0dXJuIGxhc3QgbGV2ZWwgY2FjaGUgc2hhcmVkIG1hcC4KLQkgKiBBbmQgZm9yIHBvd2VyIHNhdmluZ3MsIHdlIHJldHVybiBjcHVfY29yZV9tYXAKLQkgKi8KLQlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKLQkJcmV0dXJuIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpOwotCWVsc2UKLQkJcmV0dXJuIGMtPmxsY19zaGFyZWRfbWFwOwotfQotCi0vKiByZXByZXNlbnRpbmcgY3B1cyBmb3Igd2hpY2ggc2libGluZyBtYXBzIGNhbiBiZSBjb21wdXRlZCAqLwotc3RhdGljIGNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci0KLXZvaWQgX19jcHVpbml0IHNldF9jcHVfc2libGluZ19tYXAoaW50IGNwdSkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKLQotCWNwdV9zZXQoY3B1LCBjcHVfc2libGluZ19zZXR1cF9tYXApOwotCi0JaWYgKHNtcF9udW1fc2libGluZ3MgPiAxKSB7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9zaWJsaW5nX3NldHVwX21hcCkgewotCQkJaWYgKGMtPnBoeXNfcHJvY19pZCA9PSBjcHVfZGF0YShpKS5waHlzX3Byb2NfaWQgJiYKLQkJCSAgICBjLT5jcHVfY29yZV9pZCA9PSBjcHVfZGF0YShpKS5jcHVfY29yZV9pZCkgewotCQkJCWNwdV9zZXQoaSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpOwotCQkJCWNwdV9zZXQoY3B1LCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSkpOwotCQkJCWNwdV9zZXQoaSwgcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOwotCQkJCWNwdV9zZXQoY3B1LCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSkpOwotCQkJCWNwdV9zZXQoaSwgYy0+bGxjX3NoYXJlZF9tYXApOwotCQkJCWNwdV9zZXQoY3B1LCBjcHVfZGF0YShpKS5sbGNfc2hhcmVkX21hcCk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQljcHVfc2V0KGNwdSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpOwotCX0KLQotCWNwdV9zZXQoY3B1LCBjLT5sbGNfc2hhcmVkX21hcCk7Ci0KLQlpZiAoY3VycmVudF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzID09IDEpIHsKLQkJcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkgPSBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KTsKLQkJYy0+Ym9vdGVkX2NvcmVzID0gMTsKLQkJcmV0dXJuOwotCX0KLQotCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9zaWJsaW5nX3NldHVwX21hcCkgewotCQlpZiAocGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpICE9IEJBRF9BUElDSUQgJiYKLQkJICAgIHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9PSBwZXJfY3B1KGNwdV9sbGNfaWQsIGkpKSB7Ci0JCQljcHVfc2V0KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKLQkJCWNwdV9zZXQoY3B1LCBjcHVfZGF0YShpKS5sbGNfc2hhcmVkX21hcCk7Ci0JCX0KLQkJaWYgKGMtPnBoeXNfcHJvY19pZCA9PSBjcHVfZGF0YShpKS5waHlzX3Byb2NfaWQpIHsKLQkJCWNwdV9zZXQoaSwgcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOwotCQkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBpKSk7Ci0JCQkvKgotCQkJICogIERvZXMgdGhpcyBuZXcgY3B1IGJyaW5ndXAgYSBuZXcgY29yZT8KLQkJCSAqLwotCQkJaWYgKGNwdXNfd2VpZ2h0KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKSA9PSAxKSB7Ci0JCQkJLyoKLQkJCQkgKiBmb3IgZWFjaCBjb3JlIGluIHBhY2thZ2UsIGluY3JlbWVudAotCQkJCSAqIHRoZSBib290ZWRfY29yZXMgZm9yIHRoaXMgbmV3IGNwdQotCQkJCSAqLwotCQkJCWlmIChmaXJzdF9jcHUocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKSA9PSBpKQotCQkJCQljLT5ib290ZWRfY29yZXMrKzsKLQkJCQkvKgotCQkJCSAqIGluY3JlbWVudCB0aGUgY29yZSBjb3VudCBmb3IgYWxsCi0JCQkJICogdGhlIG90aGVyIGNwdXMgaW4gdGhpcyBwYWNrYWdlCi0JCQkJICovCi0JCQkJaWYgKGkgIT0gY3B1KQotCQkJCQljcHVfZGF0YShpKS5ib290ZWRfY29yZXMrKzsKLQkJCX0gZWxzZSBpZiAoaSAhPSBjcHUgJiYgIWMtPmJvb3RlZF9jb3JlcykKLQkJCQljLT5ib290ZWRfY29yZXMgPSBjcHVfZGF0YShpKS5ib290ZWRfY29yZXM7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBBY3RpdmF0ZSBhIHNlY29uZGFyeSBwcm9jZXNzb3IuCi0gKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzdGFydF9zZWNvbmRhcnkodm9pZCAqdW51c2VkKQotewotCS8qCi0JICogRG9uJ3QgcHV0ICphbnl0aGluZyogYmVmb3JlIGNwdV9pbml0KCksIFNNUCBib290aW5nIGlzIHRvbwotCSAqIGZyYWdpbGUgdGhhdCB3ZSB3YW50IHRvIGxpbWl0IHRoZSB0aGluZ3MgZG9uZSBoZXJlIHRvIHRoZQotCSAqIG1vc3QgbmVjZXNzYXJ5IHRoaW5ncy4KLQkgKi8KLSNpZmRlZiBDT05GSUdfVk1JCi0Jdm1pX2JyaW5ndXAoKTsKLSNlbmRpZgotCWNwdV9pbml0KCk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jc21wX2NhbGxpbigpOwotCXdoaWxlICghY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgc21wX2NvbW1lbmNlZF9tYXNrKSkKLQkJcmVwX25vcCgpOwotCS8qCi0JICogQ2hlY2sgVFNDIHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBCUDoKLQkgKi8KLQljaGVja190c2Nfc3luY190YXJnZXQoKTsKLQotCXNldHVwX3NlY29uZGFyeV9jbG9jaygpOwotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7Ci0JCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JfQotCS8qCi0JICogbG93LW1lbW9yeSBtYXBwaW5ncyBoYXZlIGJlZW4gY2xlYXJlZCwgZmx1c2ggdGhlbSBmcm9tCi0JICogdGhlIGxvY2FsIFRMQnMgdG9vLgotCSAqLwotCWxvY2FsX2ZsdXNoX3RsYigpOwotCi0JLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgY3B1X29ubGluZV9tYXAgKi8KLQlzZXRfY3B1X3NpYmxpbmdfbWFwKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXdtYigpOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGhvbGQgY2FsbF9sb2NrLCBzbyB0aGVyZSBpcyBubyBpbmNvbnNpc3RlbmN5Ci0JICogYmV0d2VlbiB0aGUgdGltZSBzbXBfY2FsbF9mdW5jdGlvbigpIGRldGVybWluZXMgbnVtYmVyIG9mCi0JICogSVBJIHJlY2lwaWVudHMsIGFuZCB0aGUgdGltZSB3aGVuIHRoZSBkZXRlcm1pbmF0aW9uIGlzIG1hZGUKLQkgKiBmb3Igd2hpY2ggY3B1cyByZWNlaXZlIHRoZSBJUEkuIEhvbGRpbmcgdGhpcwotCSAqIGxvY2sgaGVscHMgdXMgdG8gbm90IGluY2x1ZGUgdGhpcyBjcHUgaW4gYSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MKLQkgKiBzbXBfY2FsbF9mdW5jdGlvbigpLgotCSAqLwotCWxvY2tfaXBpX2NhbGxfbG9jaygpOwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7Ci0JdW5sb2NrX2lwaV9jYWxsX2xvY2soKTsKLQlwZXJfY3B1KGNwdV9zdGF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IENQVV9PTkxJTkU7Ci0KLQkvKiBXZSBjYW4gdGFrZSBpbnRlcnJ1cHRzIG5vdzogd2UncmUgb2ZmaWNpYWxseSAidXAiLiAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCXdtYigpOwotCWNwdV9pZGxlKCk7Ci19Ci0KLS8qCi0gKiBFdmVyeXRoaW5nIGhhcyBiZWVuIHNldCB1cCBmb3IgdGhlIHNlY29uZGFyeQotICogQ1BVcyAtIHRoZXkganVzdCBuZWVkIHRvIHJlbG9hZCBldmVyeXRoaW5nCi0gKiBmcm9tIHRoZSB0YXNrIHN0cnVjdHVyZQotICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4uCi0gKi8KLXZvaWQgX19kZXZpbml0IGluaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpCi17Ci0JLyoKLQkgKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGxvYWQgdGhlIGZ1bGwgVFNTLAotCSAqIGJhc2ljYWxseSBqdXN0IHRoZSBzdGFjayBwb2ludGVyIGFuZCB0aGUgaXAuCi0JICovCi0KLQlhc20gdm9sYXRpbGUoCi0JCSJtb3ZsICUwLCUlZXNwXG5cdCIKLQkJImptcCAqJTEiCi0JCToKLQkJOiJtIiAoY3VycmVudC0+dGhyZWFkLnNwKSwibSIgKGN1cnJlbnQtPnRocmVhZC5pcCkpOwotfQotCi0vKiBTdGF0aWMgc3RhdGUgaW4gaGVhZC5TIHVzZWQgdG8gc2V0IHVwIGEgQ1BVICovCi1leHRlcm4gc3RydWN0IHsKLQl2b2lkICogc3A7Ci0JdW5zaWduZWQgc2hvcnQgc3M7Ci19IHN0YWNrX3N0YXJ0OwotCi0jaWZkZWYgQ09ORklHX05VTUEKLQotLyogd2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcyAqLwotY3B1bWFza190IG5vZGVfdG9fY3B1bWFza19tYXBbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5ID0KLQkJCQl7IFswIC4uLiBNQVhfTlVNTk9ERVMtMV0gPSBDUFVfTUFTS19OT05FIH07Ci1FWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOwotLyogd2hpY2ggbm9kZSBlYWNoIGxvZ2ljYWwgQ1BVIGlzIG9uICovCi1pbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdIF9fcmVhZF9tb3N0bHkgPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gMCB9OwotRVhQT1JUX1NZTUJPTChjcHVfdG9fbm9kZV9tYXApOwotCi0vKiBzZXQgdXAgYSBtYXBwaW5nIGJldHdlZW4gY3B1IGFuZCBub2RlLiAqLwotc3RhdGljIGlubGluZSB2b2lkIG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKLXsKLQlwcmludGsoIk1hcHBpbmcgY3B1ICVkIHRvIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7Ci0JY3B1X3NldChjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV0pOwotCWNwdV90b19ub2RlX21hcFtjcHVdID0gbm9kZTsKLX0KLQotLyogdW5kbyBhIG1hcHBpbmcgYmV0d2VlbiBjcHUgYW5kIG5vZGUuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfY3B1X3RvX25vZGUoaW50IGNwdSkKLXsKLQlpbnQgbm9kZTsKLQotCXByaW50aygiVW5tYXBwaW5nIGNwdSAlZCBmcm9tIGFsbCBub2Rlc1xuIiwgY3B1KTsKLQlmb3IgKG5vZGUgPSAwOyBub2RlIDwgTUFYX05VTU5PREVTOyBub2RlICsrKQotCQljcHVfY2xlYXIoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKLQljcHVfdG9fbm9kZV9tYXBbY3B1XSA9IDA7Ci19Ci0jZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KLQotI2RlZmluZSBtYXBfY3B1X3RvX25vZGUoY3B1LCBub2RlKQkoe30pCi0jZGVmaW5lIHVubWFwX2NwdV90b19ub2RlKGNwdSkJKHt9KQotCi0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8KLQotdTggY3B1XzJfbG9naWNhbF9hcGljaWRbTlJfQ1BVU10gX19yZWFkX21vc3RseSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSBCQURfQVBJQ0lEIH07Ci0KLXN0YXRpYyB2b2lkIG1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCBhcGljaWQgPSBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgbm9kZSA9IGFwaWNpZF90b19ub2RlKGFwaWNpZCk7Ci0KLQlpZiAoIW5vZGVfb25saW5lKG5vZGUpKQotCQlub2RlID0gZmlyc3Rfb25saW5lX25vZGU7Ci0KLQljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdID0gYXBpY2lkOwotCW1hcF9jcHVfdG9fbm9kZShjcHUsIG5vZGUpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKLXsKLQljcHVfMl9sb2dpY2FsX2FwaWNpZFtjcHVdID0gQkFEX0FQSUNJRDsKLQl1bm1hcF9jcHVfdG9fbm9kZShjcHUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpCi17Ci0JaW50IGksIHJlZ3NbXSA9IHsgQVBJQ19JRCA+PiA0LCBBUElDX0xWUiA+PiA0LCBBUElDX1NQSVYgPj4gNCB9OwotCWNoYXIgKm5hbWVzW10gPSB7ICJJRCIsICJWRVJTSU9OIiwgIlNQSVYiIH07Ci0JaW50IHRpbWVvdXQ7Ci0JdW5zaWduZWQgbG9uZyBzdGF0dXM7Ci0KLQlwcmludGsoIklucXVpcmluZyByZW1vdGUgQVBJQyAjJWQuLi5cbiIsIGFwaWNpZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdzKTsgaSsrKSB7Ci0JCXByaW50aygiLi4uIEFQSUMgIyVkICVzOiAiLCBhcGljaWQsIG5hbWVzW2ldKTsKLQotCQkvKgotCQkgKiBXYWl0IGZvciBpZGxlLgotCQkgKi8KLQkJc3RhdHVzID0gc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUoKTsKLQkJaWYgKHN0YXR1cykKLQkJCXByaW50aygiYSBwcmV2aW91cyBBUElDIGRlbGl2ZXJ5IG1heSBoYXZlIGZhaWxlZFxuIik7Ci0KLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGFwaWNpZCkpOwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19ETV9SRU1SRCB8IHJlZ3NbaV0pOwotCi0JCXRpbWVvdXQgPSAwOwotCQlkbyB7Ci0JCQl1ZGVsYXkoMTAwKTsKLQkJCXN0YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9SUl9NQVNLOwotCQl9IHdoaWxlIChzdGF0dXMgPT0gQVBJQ19JQ1JfUlJfSU5QUk9HICYmIHRpbWVvdXQrKyA8IDEwMDApOwotCi0JCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgQVBJQ19JQ1JfUlJfVkFMSUQ6Ci0JCQlzdGF0dXMgPSBhcGljX3JlYWQoQVBJQ19SUlIpOwotCQkJcHJpbnRrKCIlbHhcbiIsIHN0YXR1cyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiZmFpbGVkXG4iKTsKLQkJfQotCX0KLX0KLQotI2lmZGVmIFdBS0VfU0VDT05EQVJZX1ZJQV9OTUkKLS8qIAotICogUG9rZSB0aGUgb3RoZXIgQ1BVIGluIHRoZSBleWUgdmlhIE5NSSB0byB3YWtlIGl0IHVwLiBSZW1lbWJlciB0aGF0IHRoZSBub3JtYWwKLSAqIElOSVQsIElOSVQsIFNUQVJUVVAgc2VxdWVuY2Ugd2lsbCByZXNldCB0aGUgY2hpcCBoYXJkIGZvciB1cywgYW5kIHRoaXMKLSAqIHdvbid0IC4uLiByZW1lbWJlciB0byBjbGVhciBkb3duIHRoZSBBUElDLCBldGMgbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci13YWtldXBfc2Vjb25kYXJ5X2NwdShpbnQgbG9naWNhbF9hcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKQotewotCXVuc2lnbmVkIGxvbmcgc2VuZF9zdGF0dXMsIGFjY2VwdF9zdGF0dXMgPSAwOwotCWludCBtYXhsdnQ7Ci0KLQkvKiBUYXJnZXQgY2hpcCAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChsb2dpY2FsX2FwaWNpZCkpOwotCi0JLyogQm9vdCBvbiB0aGUgc3RhY2sgKi8KLQkvKiBLaWNrIHRoZSBzZWNvbmQgKi8KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19ETV9OTUkgfCBBUElDX0RFU1RfTE9HSUNBTCk7Ci0KLQlEcHJpbnRrKCJXYWl0aW5nIGZvciBzZW5kIHRvIGZpbmlzaC4uLlxuIik7Ci0Jc2VuZF9zdGF0dXMgPSBzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSgpOwotCi0JLyoKLQkgKiBHaXZlIHRoZSBvdGhlciBDUFUgc29tZSB0aW1lIHRvIGFjY2VwdCB0aGUgSVBJLgotCSAqLwotCXVkZWxheSgyMDApOwotCS8qCi0JICogRHVlIHRvIHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLgotCSAqLwotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQlpZiAobWF4bHZ0ID4gMykgewotCQlhcGljX3JlYWRfYXJvdW5kKEFQSUNfU1BJVik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCX0KLQlhY2NlcHRfc3RhdHVzID0gKGFwaWNfcmVhZChBUElDX0VTUikgJiAweEVGKTsKLQlEcHJpbnRrKCJOTUkgc2VudC5cbiIpOwotCi0JaWYgKHNlbmRfc3RhdHVzKQotCQlwcmludGsoIkFQSUMgbmV2ZXIgZGVsaXZlcmVkPz8/XG4iKTsKLQlpZiAoYWNjZXB0X3N0YXR1cykKLQkJcHJpbnRrKCJBUElDIGRlbGl2ZXJ5IGVycm9yICglbHgpLlxuIiwgYWNjZXB0X3N0YXR1cyk7Ci0KLQlyZXR1cm4gKHNlbmRfc3RhdHVzIHwgYWNjZXB0X3N0YXR1cyk7Ci19Ci0jZW5kaWYJLyogV0FLRV9TRUNPTkRBUllfVklBX05NSSAqLwotCi0jaWZkZWYgV0FLRV9TRUNPTkRBUllfVklBX0lOSVQKLXN0YXRpYyBpbnQgX19kZXZpbml0Ci13YWtldXBfc2Vjb25kYXJ5X2NwdShpbnQgcGh5c19hcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKQotewotCXVuc2lnbmVkIGxvbmcgc2VuZF9zdGF0dXMsIGFjY2VwdF9zdGF0dXMgPSAwOwotCWludCBtYXhsdnQsIG51bV9zdGFydHMsIGo7Ci0KLQkvKgotCSAqIEJlIHBhcmFub2lkIGFib3V0IGNsZWFyaW5nIEFQSUMgZXJyb3JzLgotCSAqLwotCWlmIChBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW3BoeXNfYXBpY2lkXSkpIHsKLQkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY19yZWFkKEFQSUNfRVNSKTsKLQl9Ci0KLQlEcHJpbnRrKCJBc3NlcnRpbmcgSU5JVC5cbiIpOwotCi0JLyoKLQkgKiBUdXJuIElOSVQgb24gdGFyZ2V0IGNoaXAKLQkgKi8KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQocGh5c19hcGljaWQpKTsKLQotCS8qCi0JICogU2VuZCBJUEkKLQkgKi8KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19JTlRfQVNTRVJUCi0JCQkJfCBBUElDX0RNX0lOSVQpOwotCi0JRHByaW50aygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOwotCXNlbmRfc3RhdHVzID0gc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCW1kZWxheSgxMCk7Ci0KLQlEcHJpbnRrKCJEZWFzc2VydGluZyBJTklULlxuIik7Ci0KLQkvKiBUYXJnZXQgY2hpcCAqLwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChwaHlzX2FwaWNpZCkpOwotCi0JLyogU2VuZCBJUEkgKi8KLQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19ETV9JTklUKTsKLQotCURwcmludGsoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKLQlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQlhdG9taWNfc2V0KCZpbml0X2RlYXNzZXJ0ZWQsIDEpOwotCi0JLyoKLQkgKiBTaG91bGQgd2Ugc2VuZCBTVEFSVFVQIElQSXMgPwotCSAqCi0JICogRGV0ZXJtaW5lIHRoaXMgYmFzZWQgb24gdGhlIEFQSUMgdmVyc2lvbi4KLQkgKiBJZiB3ZSBkb24ndCBoYXZlIGFuIGludGVncmF0ZWQgQVBJQywgZG9uJ3Qgc2VuZCB0aGUgU1RBUlRVUCBJUElzLgotCSAqLwotCWlmIChBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW3BoeXNfYXBpY2lkXSkpCi0JCW51bV9zdGFydHMgPSAyOwotCWVsc2UKLQkJbnVtX3N0YXJ0cyA9IDA7Ci0KLQkvKgotCSAqIFBhcmF2aXJ0IC8gVk1JIHdhbnRzIGEgc3RhcnR1cCBJUEkgaG9vayBoZXJlIHRvIHNldCB1cCB0aGUKLQkgKiB0YXJnZXQgcHJvY2Vzc29yIHN0YXRlLgotCSAqLwotCXN0YXJ0dXBfaXBpX2hvb2socGh5c19hcGljaWQsICh1bnNpZ25lZCBsb25nKSBzdGFydF9zZWNvbmRhcnksCi0JCSAgICAgICAgICh1bnNpZ25lZCBsb25nKSBzdGFja19zdGFydC5zcCk7Ci0KLQkvKgotCSAqIFJ1biBTVEFSVFVQIElQSSBsb29wLgotCSAqLwotCURwcmludGsoIiNzdGFydHVwIGxvb3BzOiAlZC5cbiIsIG51bV9zdGFydHMpOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JZm9yIChqID0gMTsgaiA8PSBudW1fc3RhcnRzOyBqKyspIHsKLQkJRHByaW50aygiU2VuZGluZyBTVEFSVFVQICMlZC5cbiIsaik7Ci0JCWFwaWNfcmVhZF9hcm91bmQoQVBJQ19TUElWKTsKLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCWFwaWNfcmVhZChBUElDX0VTUik7Ci0JCURwcmludGsoIkFmdGVyIGFwaWNfd3JpdGUuXG4iKTsKLQotCQkvKgotCQkgKiBTVEFSVFVQIElQSQotCQkgKi8KLQotCQkvKiBUYXJnZXQgY2hpcCAqLwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQocGh5c19hcGljaWQpKTsKLQotCQkvKiBCb290IG9uIHRoZSBzdGFjayAqLwotCQkvKiBLaWNrIHRoZSBzZWNvbmQgKi8KLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIEFQSUNfRE1fU1RBUlRVUAotCQkJCQl8IChzdGFydF9laXAgPj4gMTIpKTsKLQotCQkvKgotCQkgKiBHaXZlIHRoZSBvdGhlciBDUFUgc29tZSB0aW1lIHRvIGFjY2VwdCB0aGUgSVBJLgotCQkgKi8KLQkJdWRlbGF5KDMwMCk7Ci0KLQkJRHByaW50aygiU3RhcnR1cCBwb2ludCAxLlxuIik7Ci0KLQkJRHByaW50aygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOwotCQlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQkJLyoKLQkJICogR2l2ZSB0aGUgb3RoZXIgQ1BVIHNvbWUgdGltZSB0byBhY2NlcHQgdGhlIElQSS4KLQkJICovCi0JCXVkZWxheSgyMDApOwotCQkvKgotCQkgKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuCi0JCSAqLwotCQlpZiAobWF4bHZ0ID4gMykgewotCQkJYXBpY19yZWFkX2Fyb3VuZChBUElDX1NQSVYpOwotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCX0KLQkJYWNjZXB0X3N0YXR1cyA9IChhcGljX3JlYWQoQVBJQ19FU1IpICYgMHhFRik7Ci0JCWlmIChzZW5kX3N0YXR1cyB8fCBhY2NlcHRfc3RhdHVzKQotCQkJYnJlYWs7Ci0JfQotCURwcmludGsoIkFmdGVyIFN0YXJ0dXAuXG4iKTsKLQotCWlmIChzZW5kX3N0YXR1cykKLQkJcHJpbnRrKCJBUElDIG5ldmVyIGRlbGl2ZXJlZD8/P1xuIik7Ci0JaWYgKGFjY2VwdF9zdGF0dXMpCi0JCXByaW50aygiQVBJQyBkZWxpdmVyeSBlcnJvciAoJWx4KS5cbiIsIGFjY2VwdF9zdGF0dXMpOwotCi0JcmV0dXJuIChzZW5kX3N0YXR1cyB8IGFjY2VwdF9zdGF0dXMpOwotfQotI2VuZGlmCS8qIFdBS0VfU0VDT05EQVJZX1ZJQV9JTklUICovCi0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotc3RhdGljIGlubGluZSBpbnQgYWxsb2NfY3B1X2lkKHZvaWQpCi17Ci0JY3B1bWFza190CXRtcF9tYXA7Ci0JaW50IGNwdTsKLQljcHVzX2NvbXBsZW1lbnQodG1wX21hcCwgY3B1X3ByZXNlbnRfbWFwKTsKLQljcHUgPSBmaXJzdF9jcHUodG1wX21hcCk7Ci0JaWYgKGNwdSA+PSBOUl9DUFVTKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gY3B1OwotfQotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICogX19jcHVpbml0ZGF0YSBjcHVfaWRsZV90YXNrc1tOUl9DUFVTXTsKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICogX19jcHVpbml0IGFsbG9jX2lkbGVfdGFzayhpbnQgY3B1KQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKLQotCWlmICgoaWRsZSA9IGNwdV9pZGxlX3Rhc2tzW2NwdV0pICE9IE5VTEwpIHsKLQkJLyogaW5pdGlhbGl6ZSB0aHJlYWRfc3RydWN0LiAgd2UgcmVhbGx5IHdhbnQgdG8gYXZvaWQgZGVzdHJveQotCQkgKiBpZGxlIHRyZWFkCi0JCSAqLwotCQlpZGxlLT50aHJlYWQuc3AgPSAodW5zaWduZWQgbG9uZyl0YXNrX3B0X3JlZ3MoaWRsZSk7Ci0JCWluaXRfaWRsZShpZGxlLCBjcHUpOwotCQlyZXR1cm4gaWRsZTsKLQl9Ci0JaWRsZSA9IGZvcmtfaWRsZShjcHUpOwotCi0JaWYgKCFJU19FUlIoaWRsZSkpCi0JCWNwdV9pZGxlX3Rhc2tzW2NwdV0gPSBpZGxlOwotCXJldHVybiBpZGxlOwotfQotI2Vsc2UKLSNkZWZpbmUgYWxsb2NfaWRsZV90YXNrKGNwdSkgZm9ya19pZGxlKGNwdSkKLSNlbmRpZgotCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBkb19ib290X2NwdShpbnQgYXBpY2lkLCBpbnQgY3B1KQotLyoKLSAqIE5PVEUgLSBvbiBtb3N0IHN5c3RlbXMgdGhpcyBpcyBhIFBIWVNJQ0FMIGFwaWMgSUQsIGJ1dCBvbiBtdWx0aXF1YWQKLSAqIChpZSBjbHVzdGVyZWQgYXBpYyBhZGRyZXNzaW5nIG1vZGUpLCB0aGlzIGlzIGEgTE9HSUNBTCBhcGljIElELgotICogUmV0dXJucyB6ZXJvIGlmIENQVSBib290ZWQgT0ssIGVsc2UgZXJyb3IgY29kZSBmcm9tIHdha2V1cF9zZWNvbmRhcnlfY3B1LgotICovCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICppZGxlOwotCXVuc2lnbmVkIGxvbmcgYm9vdF9lcnJvcjsKLQlpbnQgdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcDsKLQl1bnNpZ25lZCBzaG9ydCBubWlfaGlnaCA9IDAsIG5taV9sb3cgPSAwOwotCi0JLyoKLQkgKiBTYXZlIGN1cnJlbnQgTVRSUiBzdGF0ZSBpbiBjYXNlIGl0IHdhcyBjaGFuZ2VkIHNpbmNlIGVhcmx5IGJvb3QKLQkgKiAoZS5nLiBieSB0aGUgQUNQSSBTTUkpIHRvIGluaXRpYWxpemUgbmV3IENQVXMgd2l0aCBNVFJScyBpbiBzeW5jOgotCSAqLwotCW10cnJfc2F2ZV9zdGF0ZSgpOwotCi0JLyoKLQkgKiBXZSBjYW4ndCB1c2Uga2VybmVsX3RocmVhZCBzaW5jZSB3ZSBtdXN0IGF2b2lkIHRvCi0JICogcmVzY2hlZHVsZSB0aGUgY2hpbGQuCi0JICovCi0JaWRsZSA9IGFsbG9jX2lkbGVfdGFzayhjcHUpOwotCWlmIChJU19FUlIoaWRsZSkpCi0JCXBhbmljKCJmYWlsZWQgZm9yayBmb3IgQ1BVICVkIiwgY3B1KTsKLQotCWluaXRfZ2R0KGNwdSk7Ci0gCXBlcl9jcHUoY3VycmVudF90YXNrLCBjcHUpID0gaWRsZTsKLQllYXJseV9nZHRfZGVzY3IuYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7Ci0KLQlpZGxlLT50aHJlYWQuaXAgPSAodW5zaWduZWQgbG9uZykgc3RhcnRfc2Vjb25kYXJ5OwotCS8qIHN0YXJ0X2VpcCBoYWQgYmV0dGVyIGJlIHBhZ2UtYWxpZ25lZCEgKi8KLQlzdGFydF9laXAgPSBzZXR1cF90cmFtcG9saW5lKCk7Ci0KLQkrK2NwdWNvdW50OwotCWFsdGVybmF0aXZlc19zbXBfc3dpdGNoKDEpOwotCi0JLyogU28gd2Ugc2VlIHdoYXQncyB1cCAgICovCi0JcHJpbnRrKCJCb290aW5nIHByb2Nlc3NvciAlZC8lZCBpcCAlbHhcbiIsIGNwdSwgYXBpY2lkLCBzdGFydF9laXApOwotCS8qIFN0YWNrIGZvciBzdGFydHVwXzMyIGNhbiBiZSBqdXN0IGFzIGZvciBzdGFydF9zZWNvbmRhcnkgb253YXJkcyAqLwotCXN0YWNrX3N0YXJ0LnNwID0gKHZvaWQgKikgaWRsZS0+dGhyZWFkLnNwOwotCi0JaXJxX2N0eF9pbml0KGNwdSk7Ci0KLQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOwotCS8qCi0JICogVGhpcyBncnVuZ2UgcnVucyB0aGUgc3RhcnR1cCBwcm9jZXNzIGZvcgotCSAqIHRoZSB0YXJnZXRlZCBwcm9jZXNzb3IuCi0JICovCi0KLQlhdG9taWNfc2V0KCZpbml0X2RlYXNzZXJ0ZWQsIDApOwotCi0JRHByaW50aygiU2V0dGluZyB3YXJtIHJlc2V0IGNvZGUgYW5kIHZlY3Rvci5cbiIpOwotCi0Jc3RvcmVfTk1JX3ZlY3Rvcigmbm1pX2hpZ2gsICZubWlfbG93KTsKLQotCXNtcGJvb3Rfc2V0dXBfd2FybV9yZXNldF92ZWN0b3Ioc3RhcnRfZWlwKTsKLQotCS8qCi0JICogU3RhcnRpbmcgYWN0dWFsIElQSSBzZXF1ZW5jZS4uLgotCSAqLwotCWJvb3RfZXJyb3IgPSB3YWtldXBfc2Vjb25kYXJ5X2NwdShhcGljaWQsIHN0YXJ0X2VpcCk7Ci0KLQlpZiAoIWJvb3RfZXJyb3IpIHsKLQkJLyoKLQkJICogYWxsb3cgQVBzIHRvIHN0YXJ0IGluaXRpYWxpemluZy4KLQkJICovCi0JCURwcmludGsoIkJlZm9yZSBDYWxsb3V0ICVkLlxuIiwgY3B1KTsKLQkJY3B1X3NldChjcHUsIGNwdV9jYWxsb3V0X21hcCk7Ci0JCURwcmludGsoIkFmdGVyIENhbGxvdXQgJWQuXG4iLCBjcHUpOwotCi0JCS8qCi0JCSAqIFdhaXQgNXMgdG90YWwgZm9yIGEgcmVzcG9uc2UKLQkJICovCi0JCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCA1MDAwMDsgdGltZW91dCsrKSB7Ci0JCQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKQotCQkJCWJyZWFrOwkvKiBJdCBoYXMgYm9vdGVkICovCi0JCQl1ZGVsYXkoMTAwKTsKLQkJfQotCi0JCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbGluX21hcCkpIHsKLQkJCS8qIG51bWJlciBDUFVzIGxvZ2ljYWxseSwgc3RhcnRpbmcgZnJvbSAxIChCU1AgaXMgMCkgKi8KLQkJCURwcmludGsoIk9LLlxuIik7Ci0JCQlwcmludGsoIkNQVSVkOiAiLCBjcHUpOwotCQkJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKGNwdSkpOwotCQkJRHByaW50aygiQ1BVIGhhcyBib290ZWQuXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWJvb3RfZXJyb3I9IDE7Ci0JCQlpZiAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXRyYW1wb2xpbmVfYmFzZSkKLQkJCQkJPT0gMHhBNSkKLQkJCQkvKiB0cmFtcG9saW5lIHN0YXJ0ZWQgYnV0Li4uPyAqLwotCQkJCXByaW50aygiU3R1Y2sgPz9cbiIpOwotCQkJZWxzZQotCQkJCS8qIHRyYW1wb2xpbmUgY29kZSBub3QgcnVuICovCi0JCQkJcHJpbnRrKCJOb3QgcmVzcG9uZGluZy5cbiIpOwotCQkJaW5xdWlyZV9yZW1vdGVfYXBpYyhhcGljaWQpOwotCQl9Ci0JfQotCi0JaWYgKGJvb3RfZXJyb3IpIHsKLQkJLyogVHJ5IHRvIHB1dCB0aGluZ3MgYmFjayB0aGUgd2F5IHRoZXkgd2VyZSBiZWZvcmUgLi4uICovCi0JCXVubWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotCQljcHVfY2xlYXIoY3B1LCBjcHVfY2FsbG91dF9tYXApOyAvKiB3YXMgc2V0IGhlcmUgKGRvX2Jvb3RfY3B1KCkpICovCi0JCWNwdV9jbGVhcihjcHUsIGNwdV9pbml0aWFsaXplZCk7IC8qIHdhcyBzZXQgYnkgY3B1X2luaXQoKSAqLwotCQljcHVjb3VudC0tOwotCX0gZWxzZSB7Ci0JCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkgPSBhcGljaWQ7Ci0JCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotCX0KLQotCS8qIG1hcmsgInN0dWNrIiBhcmVhIGFzIG5vdCBzdHVjayAqLwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKil0cmFtcG9saW5lX2Jhc2UpID0gMDsKLQotCXJldHVybiBib290X2Vycm9yOwotfQotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi12b2lkIGNwdV9leGl0X2NsZWFyKHZvaWQpCi17Ci0JaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZGxlX3Rhc2tfZXhpdCgpOwotCi0JY3B1Y291bnQgLS07Ci0JY3B1X3VuaW5pdCgpOwotCWlycV9jdHhfZXhpdChjcHUpOwotCi0JY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsKLQljcHVfY2xlYXIoY3B1LCBjcHVfY2FsbGluX21hcCk7Ci0KLQljcHVfY2xlYXIoY3B1LCBzbXBfY29tbWVuY2VkX21hc2spOwotCXVubWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwotfQotCi1zdHJ1Y3Qgd2FybV9ib290X2NwdV9pbmZvIHsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHRhc2s7Ci0JaW50IGFwaWNpZDsKLQlpbnQgY3B1OwotfTsKLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGRvX3dhcm1fYm9vdF9jcHUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3YXJtX2Jvb3RfY3B1X2luZm8gKmluZm8gPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdhcm1fYm9vdF9jcHVfaW5mbywgdGFzayk7Ci0JZG9fYm9vdF9jcHUoaW5mby0+YXBpY2lkLCBpbmZvLT5jcHUpOwotCWNvbXBsZXRlKGluZm8tPmNvbXBsZXRlKTsKLX0KLQotc3RhdGljIGludCBfX2NwdWluaXQgX19zbXBfcHJlcGFyZV9jcHUoaW50IGNwdSkKLXsKLQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKLQlzdHJ1Y3Qgd2FybV9ib290X2NwdV9pbmZvIGluZm87Ci0JaW50CWFwaWNpZCwgcmV0OwotCi0JYXBpY2lkID0gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQlpZiAoYXBpY2lkID09IEJBRF9BUElDSUQpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQotCWluZm8uY29tcGxldGUgPSAmZG9uZTsKLQlpbmZvLmFwaWNpZCA9IGFwaWNpZDsKLQlpbmZvLmNwdSA9IGNwdTsKLQlJTklUX1dPUksoJmluZm8udGFzaywgZG9fd2FybV9ib290X2NwdSk7Ci0KLQkvKiBpbml0IGxvdyBtZW0gbWFwcGluZyAqLwotCWNsb25lX3BnZF9yYW5nZShzd2FwcGVyX3BnX2Rpciwgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BHRF9QVFJTLAotCQkJbWluX3QodW5zaWduZWQgbG9uZywgS0VSTkVMX1BHRF9QVFJTLCBVU0VSX1BHRF9QVFJTKSk7Ci0JZmx1c2hfdGxiX2FsbCgpOwotCXNjaGVkdWxlX3dvcmsoJmluZm8udGFzayk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7Ci0KLQl6YXBfbG93X21hcHBpbmdzKCk7Ci0JcmV0ID0gMDsKLWV4aXQ6Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi0vKgotICogQ3ljbGUgdGhyb3VnaCB0aGUgcHJvY2Vzc29ycyBzZW5kaW5nIEFQSUMgSVBJcyB0byBib290IGVhY2guCi0gKi8KLQotc3RhdGljIGludCBib290X2NwdV9sb2dpY2FsX2FwaWNpZDsKLS8qIFdoZXJlIHRoZSBJTyBhcmVhIHdhcyBtYXBwZWQgb24gbXVsdGlxdWFkLCBhbHdheXMgMCBvdGhlcndpc2UgKi8KLXZvaWQgKnhxdWFkX3BvcnRpbzsKLSNpZmRlZiBDT05GSUdfWDg2X05VTUFRCi1FWFBPUlRfU1lNQk9MKHhxdWFkX3BvcnRpbyk7Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IHNtcF9ib290X2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQotewotCWludCBhcGljaWQsIGNwdSwgYml0LCBraWNrZWQ7Ci0JdW5zaWduZWQgbG9uZyBib2dvc3VtID0gMDsKLQotCS8qCi0JICogU2V0dXAgYm9vdCBDUFUgaW5mb3JtYXRpb24KLQkgKi8KLQlzbXBfc3RvcmVfY3B1X2luZm8oMCk7IC8qIEZpbmFsIGZ1bGwgdmVyc2lvbiBvZiB0aGUgZGF0YSAqLwotCXByaW50aygiQ1BVJWQ6ICIsIDApOwotCXByaW50X2NwdV9pbmZvKCZjcHVfZGF0YSgwKSk7Ci0KLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOwotCWJvb3RfY3B1X2xvZ2ljYWxfYXBpY2lkID0gbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgMCkgPSBib290X2NwdV9waHlzaWNhbF9hcGljaWQ7Ci0KLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IDA7Ci0KLQlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOwotCi0JLyoKLQkgKiBJZiB3ZSBjb3VsZG4ndCBmaW5kIGFuIFNNUCBjb25maWd1cmF0aW9uIGF0IGJvb3QgdGltZSwKLQkgKiBnZXQgb3V0IG9mIGhlcmUgbm93IQotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiAhYWNwaV9sYXBpYykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNNUCBtb3RoZXJib2FyZCBub3QgZGV0ZWN0ZWQuXG4iKTsKLQkJc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKLQkJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoMCk7Ci0JCWlmIChBUElDX2luaXRfdW5pcHJvY2Vzc29yKCkpCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIkxvY2FsIEFQSUMgbm90IGRldGVjdGVkLiIKLQkJCQkJICAgIiBVc2luZyBkdW1teSBBUElDIGVtdWxhdGlvbi5cbiIpOwotCQltYXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKCk7Ci0JCWNwdV9zZXQoMCwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIDApKTsKLQkJY3B1X3NldCgwLCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgMCkpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBTaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBNUCB0YWJsZSBzaG91bGQgbGlzdCB0aGUgYm9vdAotCSAqIENQVSB0b28sIGJ1dCB3ZSBkbyBpdCBmb3IgdGhlIHNha2Ugb2Ygcm9idXN0bmVzcyBhbnl3YXkuCi0JICogTWFrZXMgbm8gc2Vuc2UgdG8gZG8gdGhpcyBjaGVjayBpbiBjbHVzdGVyZWQgYXBpYyBtb2RlLCBzbyBza2lwIGl0Ci0JICovCi0JaWYgKCFjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkpIHsKLQkJcHJpbnRrKCJ3ZWlyZCwgYm9vdCBDUFUgKCMlZCkgbm90IGxpc3RlZCBieSB0aGUgQklPUy5cbiIsCi0JCQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLQkJcGh5c2lkX3NldChoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCX0KLQotCS8qCi0JICogSWYgd2UgY291bGRuJ3QgZmluZCBhIGxvY2FsIEFQSUMsIHRoZW4gZ2V0IG91dCBvZiBoZXJlIG5vdyEKLQkgKi8KLQlpZiAoQVBJQ19JTlRFR1JBVEVEKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSAmJiAhY3B1X2hhc19hcGljKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIGxvY2FsIEFQSUMgIyVkIG5vdCBkZXRlY3RlZCEuLi5cbiIsCi0JCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQpOwotCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmb3JjaW5nIHVzZSBvZiBkdW1teSBBUElDIGVtdWxhdGlvbi4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKLQkJc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKLQkJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoMCk7Ci0JCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKLQkJY3B1X3NldCgwLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgMCkpOwotCQljcHVfc2V0KDAsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCAwKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQl2ZXJpZnlfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBJZiBTTVAgc2hvdWxkIGJlIGRpc2FibGVkLCB0aGVuIHJlYWxseSBkaXNhYmxlIGl0IQotCSAqLwotCWlmICghbWF4X2NwdXMpIHsKLQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7Ci0JCXByaW50ayhLRVJOX0lORk8gIlNNUCBtb2RlIGRlYWN0aXZhdGVkLCBmb3JjaW5nIHVzZSBvZiBkdW1teSBBUElDIGVtdWxhdGlvbi5cbiIpOwotCi0JCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImFjdGl2YXRpbmcgbWluaW1hbCBBUElDIGZvciBOTUkgd2F0Y2hkb2cgdXNlLlxuIik7Ci0JCQljb25uZWN0X2JzcF9BUElDKCk7Ci0JCQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0JCX0KLQkJc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKLQkJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoMCk7Ci0JCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKLQkJY3B1X3NldCgwLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgMCkpOwotCQljcHVfc2V0KDAsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCAwKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljb25uZWN0X2JzcF9BUElDKCk7Ci0Jc2V0dXBfbG9jYWxfQVBJQygpOwotCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKLQotCi0Jc2V0dXBfcG9ydGlvX3JlbWFwKCk7Ci0KLQkvKgotCSAqIFNjYW4gdGhlIENQVSBwcmVzZW50IG1hcCBhbmQgZmlyZSB1cCB0aGUgb3RoZXIgQ1BVcyB2aWEgZG9fYm9vdF9jcHUKLQkgKgotCSAqIEluIGNsdXN0ZXJlZCBhcGljIG1vZGUsIHBoeXNfY3B1X3ByZXNlbnRfbWFwIGlzIGEgY29uc3RydWN0ZWQgdGh1czoKLQkgKiBiaXRzIDAtMyBhcmUgcXVhZDAsIDQtNyBhcmUgcXVhZDEsIGV0Yy4gQSBwZXJ2ZXJzZSB0d2lzdCBvbiB0aGUgCi0JICogY2x1c3RlcmVkIGFwaWMgSUQuCi0JICovCi0JRHByaW50aygiQ1BVIHByZXNlbnQgbWFwOiAlbHhcbiIsIHBoeXNpZHNfY29lcmNlKHBoeXNfY3B1X3ByZXNlbnRfbWFwKSk7Ci0KLQlraWNrZWQgPSAxOwotCWZvciAoYml0ID0gMDsga2lja2VkIDwgTlJfQ1BVUyAmJiBiaXQgPCBNQVhfQVBJQ1M7IGJpdCsrKSB7Ci0JCWFwaWNpZCA9IGNwdV9wcmVzZW50X3RvX2FwaWNpZChiaXQpOwotCQkvKgotCQkgKiBEb24ndCBldmVuIGF0dGVtcHQgdG8gc3RhcnQgdGhlIGJvb3QgQ1BVIQotCQkgKi8KLQkJaWYgKChhcGljaWQgPT0gYm9vdF9jcHVfYXBpY2lkKSB8fCAoYXBpY2lkID09IEJBRF9BUElDSUQpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFjaGVja19hcGljaWRfcHJlc2VudChiaXQpKQotCQkJY29udGludWU7Ci0JCWlmIChtYXhfY3B1cyA8PSBjcHVjb3VudCsxKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCgoY3B1ID0gYWxsb2NfY3B1X2lkKCkpIDw9IDApIHx8IGRvX2Jvb3RfY3B1KGFwaWNpZCwgY3B1KSkKLQkJCXByaW50aygiQ1BVICMlZCBub3QgcmVzcG9uZGluZyAtIGNhbm5vdCB1c2UgaXQuXG4iLAotCQkJCQkJCQlhcGljaWQpOwotCQllbHNlCi0JCQkrK2tpY2tlZDsKLQl9Ci0KLQkvKgotCSAqIENsZWFudXAgcG9zc2libGUgZGFuZ2xpbmcgZW5kcy4uLgotCSAqLwotCXNtcGJvb3RfcmVzdG9yZV93YXJtX3Jlc2V0X3ZlY3RvcigpOwotCi0JLyoKLQkgKiBBbGxvdyB0aGUgdXNlciB0byBpbXByZXNzIGZyaWVuZHMuCi0JICovCi0JRHByaW50aygiQmVmb3JlIGJvZ29taXBzLlxuIik7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJaWYgKGNwdV9pc3NldChjcHUsIGNwdV9jYWxsb3V0X21hcCkpCi0JCQlib2dvc3VtICs9IGNwdV9kYXRhKGNwdSkubG9vcHNfcGVyX2ppZmZ5OwotCXByaW50ayhLRVJOX0lORk8KLQkJIlRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkICglbHUuJTAybHUgQm9nb01JUFMpLlxuIiwKLQkJY3B1Y291bnQrMSwKLQkJYm9nb3N1bS8oNTAwMDAwL0haKSwKLQkJKGJvZ29zdW0vKDUwMDAvSFopKSUxMDApOwotCQotCURwcmludGsoIkJlZm9yZSBib2dvY291bnQgLSBzZXR0aW5nIGFjdGl2YXRlZD0xLlxuIik7Ci0KLQlpZiAoc21wX2Jfc3RlcHBpbmcpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IFNNUCBvcGVyYXRpb24gbWF5IGJlIHVucmVsaWFibGUgd2l0aCBCIHN0ZXBwaW5nIHByb2Nlc3NvcnMuXG4iKTsKLQotCS8qCi0JICogRG9uJ3QgdGFpbnQgaWYgd2UgYXJlIHJ1bm5pbmcgU01QIGtlcm5lbCBvbiBhIHNpbmdsZSBub24tTVAKLQkgKiBhcHByb3ZlZCBBdGhsb24KLQkgKi8KLQlpZiAodGFpbnRlZCAmIFRBSU5UX1VOU0FGRV9TTVApIHsKLQkJaWYgKGNwdWNvdW50KQotCQkJcHJpbnRrIChLRVJOX0lORk8gIldBUk5JTkc6IFRoaXMgY29tYmluYXRpb24gb2YgQU1EIHByb2Nlc3NvcnMgaXMgbm90IHN1aXRhYmxlIGZvciBTTVAuXG4iKTsKLQkJZWxzZQotCQkJdGFpbnRlZCAmPSB+VEFJTlRfVU5TQUZFX1NNUDsKLQl9Ci0KLQlEcHJpbnRrKCJCb290IGRvbmUuXG4iKTsKLQotCS8qCi0JICogY29uc3RydWN0IGNwdV9zaWJsaW5nX21hcCwgc28gdGhhdCB3ZSBjYW4gdGVsbCBzaWJsaW5nIENQVXMKLQkgKiBlZmZpY2llbnRseS4KLQkgKi8KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWNwdXNfY2xlYXIocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpOwotCQljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKLQl9Ci0KLQljcHVfc2V0KDAsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCAwKSk7Ci0JY3B1X3NldCgwLCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgMCkpOwotCi0Jc21wYm9vdF9zZXR1cF9pb19hcGljKCk7Ci0KLQlzZXR1cF9ib290X2Nsb2NrKCk7Ci19Ci0KLS8qIFRoZXNlIGFyZSB3cmFwcGVycyB0byBpbnRlcmZhY2UgdG8gdGhlIG5ldyBib290IHByb2Nlc3MuICBTb21lb25lCi0gICB3aG8gdW5kZXJzdGFuZHMgYWxsIHRoaXMgc3R1ZmYgc2hvdWxkIHJld3JpdGUgaXQgcHJvcGVybHkuIC0tUlIgMTUvSnVsLzAyICovCi12b2lkIF9faW5pdCBuYXRpdmVfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0Jc21wX2NvbW1lbmNlZF9tYXNrID0gY3B1bWFza19vZl9jcHUoMCk7Ci0JY3B1X2NhbGxpbl9tYXAgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQltYigpOwotCXNtcF9ib290X2NwdXMobWF4X2NwdXMpOwotfQotCi12b2lkIF9faW5pdCBuYXRpdmVfc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaW5pdF9nZHQoY3B1KTsKLQlzd2l0Y2hfdG9fbmV3X2dkdCgpOwotCi0JY3B1X3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKTsKLQljcHVfc2V0KGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsKLQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKLQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7Ci0JX19nZXRfY3B1X3ZhcihjcHVfc3RhdGUpID0gQ1BVX09OTElORTsKLX0KLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotdm9pZCByZW1vdmVfc2libGluZ2luZm8oaW50IGNwdSkKLXsKLQlpbnQgc2libGluZzsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKLQotCWZvcl9lYWNoX2NwdV9tYXNrKHNpYmxpbmcsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKSB7Ci0JCWNwdV9jbGVhcihjcHUsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBzaWJsaW5nKSk7Ci0JCS8qLwotCQkgKiBsYXN0IHRocmVhZCBzaWJsaW5nIGluIHRoaXMgY3B1IGNvcmUgZ29pbmcgZG93bgotCQkgKi8KLQkJaWYgKGNwdXNfd2VpZ2h0KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKSA9PSAxKQotCQkJY3B1X2RhdGEoc2libGluZykuYm9vdGVkX2NvcmVzLS07Ci0JfQotCQkJCi0JZm9yX2VhY2hfY3B1X21hc2soc2libGluZywgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCi0JCWNwdV9jbGVhcihjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBzaWJsaW5nKSk7Ci0JY3B1c19jbGVhcihwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSk7Ci0JY3B1c19jbGVhcihwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7Ci0JYy0+cGh5c19wcm9jX2lkID0gMDsKLQljLT5jcHVfY29yZV9pZCA9IDA7Ci0JY3B1X2NsZWFyKGNwdSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKTsKLX0KLQotaW50IF9fY3B1X2Rpc2FibGUodm9pZCkKLXsKLQljcHVtYXNrX3QgbWFwID0gY3B1X29ubGluZV9tYXA7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCS8qCi0JICogUGVyaGFwcyB1c2UgY3B1ZnJlcSB0byBkcm9wIGZyZXF1ZW5jeSwgYnV0IHRoYXQgY291bGQgZ28KLQkgKiBpbnRvIGdlbmVyaWMgY29kZS4KLSAJICoKLQkgKiBXZSB3b24ndCB0YWtlIGRvd24gdGhlIGJvb3QgcHJvY2Vzc29yIG9uIGkzODYgZHVlIHRvIHNvbWUKLQkgKiBpbnRlcnJ1cHRzIG9ubHkgYmVpbmcgYWJsZSB0byBiZSBzZXJ2aWNlZCBieSB0aGUgQlNQLgotCSAqIEVzcGVjaWFsbHkgc28gaWYgd2UncmUgbm90IHVzaW5nIGFuIElPQVBJQwktendhbmUKLQkgKi8KLQlpZiAoY3B1ID09IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykKLQkJc3RvcF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKLQljbGVhcl9sb2NhbF9BUElDKCk7Ci0JLyogQWxsb3cgYW55IHF1ZXVlZCB0aW1lciBpbnRlcnJ1cHRzIHRvIGdldCBzZXJ2aWNlZCAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQltZGVsYXkoMSk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCXJlbW92ZV9zaWJsaW5naW5mbyhjcHUpOwotCi0JY3B1X2NsZWFyKGNwdSwgbWFwKTsKLQlmaXh1cF9pcnFzKG1hcCk7Ci0JLyogSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhpcyBwcm9jZXNzb3IgZnJvbSB0aGUgb25saW5lIG1hcCAqLwotCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKLXsKLQkvKiBXZSBkb24ndCBkbyBhbnl0aGluZyBoZXJlOiBpZGxlIHRhc2sgaXMgZmFraW5nIGRlYXRoIGl0c2VsZi4gKi8KLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCS8qIFRoZXkgYWNrIHRoaXMgaW4gcGxheV9kZWFkIGJ5IHNldHRpbmcgQ1BVX0RFQUQgKi8KLQkJaWYgKHBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID09IENQVV9ERUFEKSB7Ci0JCQlwcmludGsgKCJDUFUgJWQgaXMgbm93IG9mZmxpbmVcbiIsIGNwdSk7Ci0JCQlpZiAoMSA9PSBudW1fb25saW5lX2NwdXMoKSkKLQkJCQlhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaCgwKTsKLQkJCXJldHVybjsKLQkJfQotCQltc2xlZXAoMTAwKTsKLQl9Ci0gCXByaW50ayhLRVJOX0VSUiAiQ1BVICV1IGRpZG4ndCBkaWUuLi5cbiIsIGNwdSk7Ci19Ci0jZWxzZSAvKiAuLi4gIUNPTkZJR19IT1RQTFVHX0NQVSAqLwotaW50IF9fY3B1X2Rpc2FibGUodm9pZCkKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKLXsKLQkvKiBXZSBzYWlkICJubyIgaW4gX19jcHVfZGlzYWJsZSAqLwotCUJVRygpOwotfQotI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwotCi1pbnQgX19jcHVpbml0IG5hdGl2ZV9jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWludCByZXQgPSAwOwotCi0JLyoKLQkgKiBXZSBkbyB3YXJtIGJvb3Qgb25seSBvbiBjcHVzIHRoYXQgaGFkIGJvb3RlZCBlYXJsaWVyCi0JICogT3RoZXJ3aXNlIGNvbGQgYm9vdCBpcyBhbGwgaGFuZGxlZCBmcm9tIHNtcF9ib290X2NwdXMoKS4KLQkgKiBjcHVfY2FsbGluX21hcCBpcyBzZXQgZHVyaW5nIEFQIGtpY2tzdGFydCBwcm9jZXNzLiBJdHMgcmVzZXQKLQkgKiB3aGVuIGEgY3B1IGlzIHRha2VuIG9mZmxpbmUgZnJvbSBjcHVfZXhpdF9jbGVhcigpLgotCSAqLwotCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKQotCQlyZXQgPSBfX3NtcF9wcmVwYXJlX2NwdShjcHUpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIC1FSU87Ci0jZW5kaWYKLQotCS8qIEluIGNhc2Ugb25lIGRpZG4ndCBjb21lIHVwICovCi0JaWYgKCFjcHVfaXNzZXQoY3B1LCBjcHVfY2FsbGluX21hcCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNraXBwaW5nIGNwdSVkLCBkaWRuJ3QgY29tZSBvbmxpbmVcbiIsIGNwdSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID0gQ1BVX1VQX1BSRVBBUkU7Ci0JLyogVW5sZWFzaCB0aGUgQ1BVISAqLwotCWNwdV9zZXQoY3B1LCBzbXBfY29tbWVuY2VkX21hc2spOwotCi0JLyoKLQkgKiBDaGVjayBUU0Mgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIEFQIChrZWVwIGlycXMgZGlzYWJsZWQKLQkgKiB3aGlsZSBkb2luZyBzbyk6Ci0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNoZWNrX3RzY19zeW5jX3NvdXJjZShjcHUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXdoaWxlICghY3B1X2lzc2V0KGNwdSwgY3B1X29ubGluZV9tYXApKSB7Ci0JCWNwdV9yZWxheCgpOwotCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgbmF0aXZlX3NtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQotewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCXNldHVwX2lvYXBpY19kZXN0KCk7Ci0jZW5kaWYKLQl6YXBfbG93X21hcHBpbmdzKCk7Ci19Ci0KLXZvaWQgX19pbml0IHNtcF9pbnRyX2luaXQodm9pZCkKLXsKLQkvKgotCSAqIElSUTAgbXVzdCBiZSBnaXZlbiBhIGZpeGVkIGFzc2lnbm1lbnQgYW5kIGluaXRpYWxpemVkLAotCSAqIGJlY2F1c2UgaXQncyB1c2VkIGJlZm9yZSB0aGUgSU8tQVBJQyBpcyBzZXQgdXAuCi0JICovCi0Jc2V0X2ludHJfZ2F0ZShGSVJTVF9ERVZJQ0VfVkVDVE9SLCBpbnRlcnJ1cHRbMF0pOwotCi0JLyoKLQkgKiBUaGUgcmVzY2hlZHVsZSBpbnRlcnJ1cHQgaXMgYSBDUFUtdG8tQ1BVIHJlc2NoZWR1bGUtaGVscGVyCi0JICogSVBJLCBkcml2ZW4gYnkgd2FrZXVwLgotCSAqLwotCXNldF9pbnRyX2dhdGUoUkVTQ0hFRFVMRV9WRUNUT1IsIHJlc2NoZWR1bGVfaW50ZXJydXB0KTsKLQotCS8qIElQSSBmb3IgaW52YWxpZGF0aW9uICovCi0Jc2V0X2ludHJfZ2F0ZShJTlZBTElEQVRFX1RMQl9WRUNUT1IsIGludmFsaWRhdGVfaW50ZXJydXB0KTsKLQotCS8qIElQSSBmb3IgZ2VuZXJpYyBmdW5jdGlvbiBjYWxsICovCi0Jc2V0X2ludHJfZ2F0ZShDQUxMX0ZVTkNUSU9OX1ZFQ1RPUiwgY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQpOwotfQotCi0vKgotICogSWYgdGhlIEJJT1MgZW51bWVyYXRlcyBwaHlzaWNhbCBwcm9jZXNzb3JzIGJlZm9yZSBsb2dpY2FsLAotICogbWF4Y3B1cz1OIGF0IGVudW1lcmF0aW9uLXRpbWUgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBIVC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgcGFyc2VfbWF4Y3B1cyhjaGFyICphcmcpCi17Ci0JZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhjcHVzOwotCi0JbWF4Y3B1cyA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibWF4Y3B1cyIsIHBhcnNlX21heGNwdXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3RfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290XzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1M2JkNmYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3RfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDExMDggKzAsMCBAQAotLyoKLSAqCXg4NiBTTVAgYm9vdGluZyBmdW5jdGlvbnMKLSAqCi0gKgkoYykgMTk5NSBBbGFuIENveCwgQnVpbGRpbmcgIzMgPGFsYW5AcmVkaGF0LmNvbT4KLSAqCShjKSAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICoJQ29weXJpZ2h0IDIwMDEgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgotICoKLSAqCU11Y2ggb2YgdGhlIGNvcmUgU01QIHdvcmsgaXMgYmFzZWQgb24gcHJldmlvdXMgd29yayBieSBUaG9tYXMgUmFka2UsIHRvCi0gKgl3aG9tIGEgZ3JlYXQgbWFueSB0aGFua3MgYXJlIGV4dGVuZGVkLgotICoKLSAqCVRoYW5rcyB0byBJbnRlbCBmb3IgbWFraW5nIGF2YWlsYWJsZSBzZXZlcmFsIGRpZmZlcmVudCBQZW50aXVtLAotICoJUGVudGl1bSBQcm8gYW5kIFBlbnRpdW0tSUkvWGVvbiBNUCBtYWNoaW5lcy4KLSAqCU9yaWdpbmFsIGRldmVsb3BtZW50IG9mIExpbnV4IFNNUCBjb2RlIHN1cHBvcnRlZCBieSBDYWxkZXJhLgotICoKLSAqCVRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKgotICoJRml4ZXMKLSAqCQlGZWxpeCBLb29wCToJTlJfQ1BVUyB1c2VkIHByb3Blcmx5Ci0gKgkJSm9zZSBSZW5hdQk6CUhhbmRsZSBzaW5nbGUgQ1BVIGNhc2UuCi0gKgkJQWxhbiBDb3gJOglCeSByZXBlYXRlZCByZXF1ZXN0IDgpIC0gVG90YWwgQm9nb01JUCByZXBvcnQuCi0gKgkJR3JlZyBXcmlnaHQJOglGaXggZm9yIGtlcm5lbCBzdGFja3MgcGFuaWMuCi0gKgkJRXJpY2ggQm9sZXluCToJTVAgdjEuNCBhbmQgYWRkaXRpb25hbCBjaGFuZ2VzLgotICoJTWF0dGhpYXMgU2F0dGxlcgk6CUNoYW5nZXMgZm9yIDIuMSBrZXJuZWwgbWFwLgotICoJTWljaGVsIExlc3BpbmFzc2UJOglDaGFuZ2VzIGZvciAyLjEga2VybmVsIG1hcC4KLSAqCU1pY2hhZWwgQ2hhc3RhaW4JOglDaGFuZ2UgdHJhbXBvbGluZS5TIHRvIGdudSBhcy4KLSAqCQlBbGFuIENveAk6CUR1bWIgYnVnOiAnQicgc3RlcCBQUHJvJ3MgYXJlIGZpbmUKLSAqCQlJbmdvIE1vbG5hcgk6CUFkZGVkIEFQSUMgdGltZXJzLCBiYXNlZCBvbiBjb2RlCi0gKgkJCQkJZnJvbSBKb3NlIFJlbmF1Ci0gKgkJSW5nbyBNb2xuYXIJOgl2YXJpb3VzIGNsZWFudXBzIGFuZCByZXdyaXRlcwotICoJCVRpZ3JhbiBBaXZhemlhbgk6CWZpeGVkICIwLjAwIGluIC9wcm9jL3VwdGltZSBvbiBTTVAiIGJ1Zy4KLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzCi0gKglBbmRpIEtsZWVuCQk6CUNoYW5nZWQgZm9yIFNNUCBib290IGludG8gbG9uZyBtb2RlLgotICoJCVJ1c3R5IFJ1c3NlbGwJOglIYWNrZWQgaW50byBzaGFwZSBmb3IgbmV3ICJob3RwbHVnIiBib290IHByb2Nlc3MuCi0gKiAgICAgIEFuZGkgS2xlZW4gICAgICAgICAgICAgIDogICAgICAgQ29udmVydGVkIHRvIG5ldyBzdGF0ZSBtYWNoaW5lLgotICoJCQkJCVZhcmlvdXMgY2xlYW51cHMuCi0gKgkJCQkJUHJvYmFibHkgbW9zdGx5IGhvdHBsdWcgQ1BVIHJlYWR5IG5vdy4KLSAqCUFzaG9rIFJhagkJCTogQ1BVIGhvdHBsdWcgc3VwcG9ydAotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgva2RlYnVnLmg+Ci0KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vbm1pLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KLSNpbmNsdWRlIDxhc20vbnVtYS5oPgotCi0vKiBOdW1iZXIgb2Ygc2libGluZ3MgcGVyIENQVSBwYWNrYWdlICovCi1pbnQgc21wX251bV9zaWJsaW5ncyA9IDE7Ci1FWFBPUlRfU1lNQk9MKHNtcF9udW1fc2libGluZ3MpOwotCi0vKiBMYXN0IGxldmVsIGNhY2hlIElEIG9mIGVhY2ggbG9naWNhbCBDUFUgKi8KLURFRklORV9QRVJfQ1BVKHUxNiwgY3B1X2xsY19pZCkgPSBCQURfQVBJQ0lEOwotCi0vKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBvbmxpbmUgQ1BVcyAqLwotY3B1bWFza190IGNwdV9vbmxpbmVfbWFwIF9fcmVhZF9tb3N0bHk7Ci0KLUVYUE9SVF9TWU1CT0woY3B1X29ubGluZV9tYXApOwotCi0vKgotICogUHJpdmF0ZSBtYXBzIHRvIHN5bmNocm9uaXplIGJvb3RpbmcgYmV0d2VlbiBBUCBhbmQgQlAuCi0gKiBQcm9iYWJseSBub3QgbmVlZGVkIGFueW1vcmUsIGJ1dCBpdCBtYWtlcyBmb3IgZWFzaWVyIGRlYnVnZ2luZy4gLUFLCi0gKi8KLWNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKLWNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7Ci1jcHVtYXNrX3QgY3B1X3Bvc3NpYmxlX21hcDsKLUVYUE9SVF9TWU1CT0woY3B1X3Bvc3NpYmxlX21hcCk7Ci0KLS8qIFBlciBDUFUgYm9nb21pcHMgYW5kIG90aGVyIHBhcmFtZXRlcnMgKi8KLURFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjcHVpbmZvX3g4NiwgY3B1X2luZm8pOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9pbmZvKTsKLQotLyogU2V0IHdoZW4gdGhlIGlkbGVycyBhcmUgYWxsIGZvcmtlZCAqLwotaW50IHNtcF90aHJlYWRzX3JlYWR5OwotCi0vKiByZXByZXNlbnRpbmcgSFQgc2libGluZ3Mgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotREVGSU5FX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9zaWJsaW5nX21hcCk7Ci0KLS8qIHJlcHJlc2VudGluZyBIVCBhbmQgY29yZSBzaWJsaW5ncyBvZiBlYWNoIGxvZ2ljYWwgQ1BVICovCi1ERUZJTkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9jb3JlX21hcCk7Ci1FWFBPUlRfUEVSX0NQVV9TWU1CT0woY3B1X2NvcmVfbWFwKTsKLQotLyoKLSAqIFRyYW1wb2xpbmUgODB4ODYgcHJvZ3JhbSBhcyBhbiBhcnJheS4KLSAqLwotCi1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciB0cmFtcG9saW5lX2RhdGFbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHRyYW1wb2xpbmVfZW5kW107Ci0KLS8qIFN0YXRlIG9mIGVhY2ggQ1BVICovCi1ERUZJTkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSkgPSB7IDAgfTsKLQotLyoKLSAqIFN0b3JlIGFsbCBpZGxlIHRocmVhZHMsIHRoaXMgY2FuIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNyZWF0aW5nCi0gKiBhIG5ldyB0aHJlYWQuIEFsc28gYXZvaWRzIGNvbXBsaWNhdGVkIHRocmVhZCBkZXN0cm95IGZ1bmN0aW9uYWxpdHkKLSAqIGZvciBpZGxlIHRocmVhZHMuCi0gKi8KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLS8qCi0gKiBOZWVkZWQgb25seSBmb3IgQ09ORklHX0hPVFBMVUdfQ1BVIGJlY2F1c2UgX19jcHVpbml0ZGF0YSBpcwotICogcmVtb3ZlZCBhZnRlciBpbml0IGZvciAhQ09ORklHX0hPVFBMVUdfQ1BVLgotICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGlkbGVfdGhyZWFkX2FycmF5KTsKLSNkZWZpbmUgZ2V0X2lkbGVfZm9yX2NwdSh4KSAgICAgKHBlcl9jcHUoaWRsZV90aHJlYWRfYXJyYXksIHgpKQotI2RlZmluZSBzZXRfaWRsZV9mb3JfY3B1KHgscCkgICAocGVyX2NwdShpZGxlX3RocmVhZF9hcnJheSwgeCkgPSAocCkpCi0jZWxzZQotc3RydWN0IHRhc2tfc3RydWN0ICppZGxlX3RocmVhZF9hcnJheVtOUl9DUFVTXSBfX2NwdWluaXRkYXRhIDsKLSNkZWZpbmUgZ2V0X2lkbGVfZm9yX2NwdSh4KSAgICAgKGlkbGVfdGhyZWFkX2FycmF5Wyh4KV0pCi0jZGVmaW5lIHNldF9pZGxlX2Zvcl9jcHUoeCxwKSAgIChpZGxlX3RocmVhZF9hcnJheVsoeCldID0gKHApKQotI2VuZGlmCi0KLQotLyoKLSAqIEN1cnJlbnRseSB0cml2aWFsLiBXcml0ZSB0aGUgcmVhbC0+cHJvdGVjdGVkIG1vZGUKLSAqIGJvb3RzdHJhcCBpbnRvIHRoZSBwYWdlIGNvbmNlcm5lZC4gVGhlIGNhbGxlcgotICogaGFzIG1hZGUgc3VyZSBpdCdzIHN1aXRhYmx5IGFsaWduZWQuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19jcHVpbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKLXsKLQl2b2lkICp0cmFtcCA9IF9fdmEoU01QX1RSQU1QT0xJTkVfQkFTRSk7IAotCW1lbWNweSh0cmFtcCwgdHJhbXBvbGluZV9kYXRhLCB0cmFtcG9saW5lX2VuZCAtIHRyYW1wb2xpbmVfZGF0YSk7Ci0JcmV0dXJuIHZpcnRfdG9fcGh5cyh0cmFtcCk7Ci19Ci0KLS8qCi0gKiBUaGUgYm9vdHN0cmFwIGtlcm5lbCBlbnRyeSBjb2RlIGhhcyBzZXQgdGhlc2UgdXAuIFNhdmUgdGhlbSBmb3IKLSAqIGEgZ2l2ZW4gQ1BVCi0gKi8KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpCi17Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGlkKTsKLQotCSpjID0gYm9vdF9jcHVfZGF0YTsKLQljLT5jcHVfaW5kZXggPSBpZDsKLQlpZGVudGlmeV9jcHUoYyk7Ci0JcHJpbnRfY3B1X2luZm8oYyk7Ci19Ci0KLXN0YXRpYyBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQgX19jcHVpbml0ZGF0YTsKLQotLyoKLSAqIFJlcG9ydCBiYWNrIHRvIHRoZSBCb290IFByb2Nlc3Nvci4KLSAqIFJ1bm5pbmcgb24gQVAuCi0gKi8KLXZvaWQgX19jcHVpbml0IHNtcF9jYWxsaW4odm9pZCkKLXsKLQlpbnQgY3B1aWQsIHBoeXNfaWQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCi0JLyoKLQkgKiBJZiB3YWtlbiB1cCBieSBhbiBJTklUIGluIGFuIDgyNDg5RFggY29uZmlndXJhdGlvbgotCSAqIHdlIG1heSBnZXQgaGVyZSBiZWZvcmUgYW4gSU5JVC1kZWFzc2VydCBJUEkgcmVhY2hlcwotCSAqIG91ciBsb2NhbCBBUElDLiAgV2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgSVBJIG9yIHdlJ2xsCi0JICogbG9jayB1cCBvbiBhbiBBUElDIGFjY2Vzcy4KLQkgKi8KLQl3aGlsZSAoIWF0b21pY19yZWFkKCZpbml0X2RlYXNzZXJ0ZWQpKQotCQljcHVfcmVsYXgoKTsKLQotCS8qCi0JICogKFRoaXMgd29ya3MgZXZlbiBpZiB0aGUgQVBJQyBpcyBub3QgZW5hYmxlZC4pCi0JICovCi0JcGh5c19pZCA9IEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSk7Ci0JY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKGNwdV9pc3NldChjcHVpZCwgY3B1X2NhbGxpbl9tYXApKSB7Ci0JCXBhbmljKCJzbXBfY2FsbGluOiBwaHlzIENQVSMlZCwgQ1BVIyVkIGFscmVhZHkgcHJlc2VudD8/XG4iLAotCQkJCQlwaHlzX2lkLCBjcHVpZCk7Ci0JfQotCURwcmludGsoIkNQVSMlZCAocGh5cyBJRDogJWQpIHdhaXRpbmcgZm9yIENBTExPVVRcbiIsIGNwdWlkLCBwaHlzX2lkKTsKLQotCS8qCi0JICogU1RBUlRVUCBJUElzIGFyZSBmcmFnaWxlIGJlYXN0cyBhcyB0aGV5IG1pZ2h0IHNvbWV0aW1lcwotCSAqIHRyaWdnZXIgc29tZSBnbHVlIG1vdGhlcmJvYXJkIGxvZ2ljLiBDb21wbGV0ZSBBUElDIGJ1cwotCSAqIHNpbGVuY2UgZm9yIDEgc2Vjb25kLCB0aGlzIG92ZXJlc3RpbWF0ZXMgdGhlIHRpbWUgdGhlCi0JICogYm9vdCBDUFUgaXMgc3BlbmRpbmcgdG8gc2VuZCB0aGUgdXAgdG8gMiBTVEFSVFVQIElQSXMKLQkgKiBieSBhIGZhY3RvciBvZiB0d28uIFRoaXMgc2hvdWxkIGJlIGVub3VnaC4KLQkgKi8KLQotCS8qCi0JICogV2FpdGluZyAycyB0b3RhbCBmb3Igc3RhcnR1cCAodWRlbGF5IGlzIG5vdCB5ZXQgd29ya2luZykKLQkgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArIDIqSFo7Ci0Jd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCS8qCi0JCSAqIEhhcyB0aGUgYm9vdCBDUFUgZmluaXNoZWQgaXQncyBTVEFSVFVQIHNlcXVlbmNlPwotCQkgKi8KLQkJaWYgKGNwdV9pc3NldChjcHVpZCwgY3B1X2NhbGxvdXRfbWFwKSkKLQkJCWJyZWFrOwotCQljcHVfcmVsYXgoKTsKLQl9Ci0KLQlpZiAoIXRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCXBhbmljKCJzbXBfY2FsbGluOiBDUFUlZCBzdGFydGVkIHVwIGJ1dCBkaWQgbm90IGdldCBhIGNhbGxvdXQhXG4iLAotCQkJY3B1aWQpOwotCX0KLQotCS8qCi0JICogdGhlIGJvb3QgQ1BVIGhhcyBmaW5pc2hlZCB0aGUgaW5pdCBzdGFnZSBhbmQgaXMgc3Bpbm5pbmcKLQkgKiBvbiBjYWxsaW5fbWFwIHVudGlsIHdlIGZpbmlzaC4gV2UgYXJlIGZyZWUgdG8gc2V0IHVwIHRoaXMKLQkgKiBDUFUsIGZpcnN0IHRoZSBBUElDLiAodGhpcyBpcyBwcm9iYWJseSByZWR1bmRhbnQgb24gbW9zdAotCSAqIGJvYXJkcykKLQkgKi8KLQotCURwcmludGsoIkNBTExJTiwgYmVmb3JlIHNldHVwX2xvY2FsX0FQSUMoKS5cbiIpOwotCXNldHVwX2xvY2FsX0FQSUMoKTsKLQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwotCi0JLyoKLQkgKiBHZXQgb3VyIGJvZ29taXBzLgotIAkgKgotIAkgKiBOZWVkIHRvIGVuYWJsZSBJUlFzIGJlY2F1c2UgaXQgY2FuIHRha2UgbG9uZ2VyIGFuZCB0aGVuCi0JICogdGhlIE5NSSB3YXRjaGRvZyBtaWdodCBraWxsIHVzLgotCSAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQljYWxpYnJhdGVfZGVsYXkoKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCURwcmludGsoIlN0YWNrIGF0IGFib3V0ICVwXG4iLCZjcHVpZCk7Ci0KLQkvKgotCSAqIFNhdmUgb3VyIHByb2Nlc3NvciBwYXJhbWV0ZXJzCi0JICovCi0gCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHVpZCk7Ci0KLQkvKgotCSAqIEFsbG93IHRoZSBtYXN0ZXIgdG8gY29udGludWUuCi0JICovCi0JY3B1X3NldChjcHVpZCwgY3B1X2NhbGxpbl9tYXApOwotfQotCi0vKiBtYXBzIHRoZSBjcHUgdG8gdGhlIHNjaGVkIGRvbWFpbiByZXByZXNlbnRpbmcgbXVsdGktY29yZSAqLwotY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKGludCBjcHUpCi17Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7Ci0JLyoKLQkgKiBGb3IgcGVyZiwgd2UgcmV0dXJuIGxhc3QgbGV2ZWwgY2FjaGUgc2hhcmVkIG1hcC4KLQkgKiBBbmQgZm9yIHBvd2VyIHNhdmluZ3MsIHdlIHJldHVybiBjcHVfY29yZV9tYXAKLQkgKi8KLQlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKLQkJcmV0dXJuIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpOwotCWVsc2UKLQkJcmV0dXJuIGMtPmxsY19zaGFyZWRfbWFwOwotfQotCi0vKiByZXByZXNlbnRpbmcgY3B1cyBmb3Igd2hpY2ggc2libGluZyBtYXBzIGNhbiBiZSBjb21wdXRlZCAqLwotc3RhdGljIGNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3B1X3NpYmxpbmdfbWFwKGludCBjcHUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7Ci0KLQljcHVfc2V0KGNwdSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKTsKLQotCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSkgewotCQlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfc2libGluZ19zZXR1cF9tYXApIHsKLQkJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkICYmCi0JCQkgICAgYy0+Y3B1X2NvcmVfaWQgPT0gY3B1X2RhdGEoaSkuY3B1X2NvcmVfaWQpIHsKLQkJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKLQkJCQljcHVfc2V0KGNwdSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKLQkJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKLQkJCQljcHVfc2V0KGNwdSwgcGVyX2NwdShjcHVfY29yZV9tYXAsIGkpKTsKLQkJCQljcHVfc2V0KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKLQkJCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKLQl9Ci0KLQljcHVfc2V0KGNwdSwgYy0+bGxjX3NoYXJlZF9tYXApOwotCi0JaWYgKGN1cnJlbnRfY3B1X2RhdGEueDg2X21heF9jb3JlcyA9PSAxKSB7Ci0JCXBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpID0gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7Ci0JCWMtPmJvb3RlZF9jb3JlcyA9IDE7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfc2libGluZ19zZXR1cF9tYXApIHsKLQkJaWYgKHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSAhPSBCQURfQVBJQ0lEICYmCi0JCSAgICBwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPT0gcGVyX2NwdShjcHVfbGxjX2lkLCBpKSkgewotCQkJY3B1X3NldChpLCBjLT5sbGNfc2hhcmVkX21hcCk7Ci0JCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOwotCQl9Ci0JCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkKSB7Ci0JCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKLQkJCWNwdV9zZXQoY3B1LCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSkpOwotCQkJLyoKLQkJCSAqICBEb2VzIHRoaXMgbmV3IGNwdSBicmluZ3VwIGEgbmV3IGNvcmU/Ci0JCQkgKi8KLQkJCWlmIChjcHVzX3dlaWdodChwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkgPT0gMSkgewotCQkJCS8qCi0JCQkJICogZm9yIGVhY2ggY29yZSBpbiBwYWNrYWdlLCBpbmNyZW1lbnQKLQkJCQkgKiB0aGUgYm9vdGVkX2NvcmVzIGZvciB0aGlzIG5ldyBjcHUKLQkJCQkgKi8KLQkJCQlpZiAoZmlyc3RfY3B1KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSkgPT0gaSkKLQkJCQkJYy0+Ym9vdGVkX2NvcmVzKys7Ci0JCQkJLyoKLQkJCQkgKiBpbmNyZW1lbnQgdGhlIGNvcmUgY291bnQgZm9yIGFsbAotCQkJCSAqIHRoZSBvdGhlciBjcHVzIGluIHRoaXMgcGFja2FnZQotCQkJCSAqLwotCQkJCWlmIChpICE9IGNwdSkKLQkJCQkJY3B1X2RhdGEoaSkuYm9vdGVkX2NvcmVzKys7Ci0JCQl9IGVsc2UgaWYgKGkgIT0gY3B1ICYmICFjLT5ib290ZWRfY29yZXMpCi0JCQkJYy0+Ym9vdGVkX2NvcmVzID0gY3B1X2RhdGEoaSkuYm9vdGVkX2NvcmVzOwotCQl9Ci0JfQotfQotCi0vKgotICogU2V0dXAgY29kZSBvbiBzZWNvbmRhcnkgcHJvY2Vzc29yIChhZnRlciBjb21taW5nIG91dCBvZiB0aGUgdHJhbXBvbGluZSkKLSAqLwotdm9pZCBfX2NwdWluaXQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQpCi17Ci0JLyoKLQkgKiBEb250IHB1dCBhbnl0aGluZyBiZWZvcmUgc21wX2NhbGxpbigpLCBTTVAKLQkgKiBib290aW5nIGlzIHRvbyBmcmFnaWxlIHRoYXQgd2Ugd2FudCB0byBsaW1pdCB0aGUKLQkgKiB0aGluZ3MgZG9uZSBoZXJlIHRvIHRoZSBtb3N0IG5lY2Vzc2FyeSB0aGluZ3MuCi0JICovCi0JY3B1X2luaXQoKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlzbXBfY2FsbGluKCk7Ci0KLQkvKiBvdGhlcndpc2UgZ2NjIHdpbGwgbW92ZSB1cCB0aGUgc21wX3Byb2Nlc3Nvcl9pZCBiZWZvcmUgdGhlIGNwdV9pbml0ICovCi0JYmFycmllcigpOwotCi0JLyoKLSAgCSAqIENoZWNrIFRTQyBzeW5jIGZpcnN0OgotIAkgKi8KLQljaGVja190c2Nfc3luY190YXJnZXQoKTsKLQotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7Ci0JCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JfQotCi0JLyoKLQkgKiBUaGUgc2libGluZyBtYXBzIG11c3QgYmUgc2V0IGJlZm9yZSB0dXJpbmcgdGhlIG9ubGluZSBtYXAgb24gZm9yCi0JICogdGhpcyBjcHUKLQkgKi8KLQlzZXRfY3B1X3NpYmxpbmdfbWFwKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gaG9sZCBjYWxsX2xvY2ssIHNvIHRoZXJlIGlzIG5vIGluY29uc2lzdGVuY3kKLQkgKiBiZXR3ZWVuIHRoZSB0aW1lIHNtcF9jYWxsX2Z1bmN0aW9uKCkgZGV0ZXJtaW5lcyBudW1iZXIgb2YKLQkgKiBJUEkgcmVjaXBpZW50cywgYW5kIHRoZSB0aW1lIHdoZW4gdGhlIGRldGVybWluYXRpb24gaXMgbWFkZQotCSAqIGZvciB3aGljaCBjcHVzIHJlY2VpdmUgdGhlIElQSSBpbiBnZW5hcGljX2ZsYXQuYy4gSG9sZGluZyB0aGlzCi0JICogbG9jayBoZWxwcyB1cyB0byBub3QgaW5jbHVkZSB0aGlzIGNwdSBpbiBhIGN1cnJlbnRseSBpbiBwcm9ncmVzcwotCSAqIHNtcF9jYWxsX2Z1bmN0aW9uKCkuCi0JICovCi0JbG9ja19pcGlfY2FsbF9sb2NrKCk7Ci0Jc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7Ci0KLQkvKiBTZXR1cCB0aGUgcGVyIGNwdSBpcnEgaGFuZGxpbmcgZGF0YSBzdHJ1Y3R1cmVzICovCi0JX19zZXR1cF92ZWN0b3JfaXJxKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JLyoKLQkgKiBBbGxvdyB0aGUgbWFzdGVyIHRvIGNvbnRpbnVlLgotCSAqLwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7Ci0JcGVyX2NwdShjcHVfc3RhdGUsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBDUFVfT05MSU5FOwotCXNwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9jayk7Ci0KLQl1bmxvY2tfaXBpX2NhbGxfbG9jaygpOwotCi0Jc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKCk7Ci0KLQljcHVfaWRsZSgpOwotfQotCi1leHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpbml0X3JzcDsKLWV4dGVybiB2b2lkICgqaW5pdGlhbF9jb2RlKSh2b2lkKTsKLQotI2lmZGVmIEFQSUNfREVCVUcKLXN0YXRpYyB2b2lkIGlucXVpcmVfcmVtb3RlX2FwaWMoaW50IGFwaWNpZCkKLXsKLQl1bnNpZ25lZCBpLCByZWdzW10gPSB7IEFQSUNfSUQgPj4gNCwgQVBJQ19MVlIgPj4gNCwgQVBJQ19TUElWID4+IDQgfTsKLQljaGFyICpuYW1lc1tdID0geyAiSUQiLCAiVkVSU0lPTiIsICJTUElWIiB9OwotCWludCB0aW1lb3V0OwotCXUzMiBzdGF0dXM7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJbnF1aXJpbmcgcmVtb3RlIEFQSUMgIyVkLi4uXG4iLCBhcGljaWQpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykgewotCQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyAjJWQgJXM6ICIsIGFwaWNpZCwgbmFtZXNbaV0pOwotCi0JCS8qCi0JCSAqIFdhaXQgZm9yIGlkbGUuCi0JCSAqLwotCQlzdGF0dXMgPSBzYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSgpOwotCQlpZiAoc3RhdHVzKQotCQkJcHJpbnRrKEtFUk5fQ09OVAotCQkJICAgICAgICJhIHByZXZpb3VzIEFQSUMgZGVsaXZlcnkgbWF5IGhhdmUgZmFpbGVkXG4iKTsKLQotCQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChhcGljaWQpKTsKLQkJYXBpY193cml0ZShBUElDX0lDUiwgQVBJQ19ETV9SRU1SRCB8IHJlZ3NbaV0pOwotCi0JCXRpbWVvdXQgPSAwOwotCQlkbyB7Ci0JCQl1ZGVsYXkoMTAwKTsKLQkJCXN0YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9SUl9NQVNLOwotCQl9IHdoaWxlIChzdGF0dXMgPT0gQVBJQ19JQ1JfUlJfSU5QUk9HICYmIHRpbWVvdXQrKyA8IDEwMDApOwotCi0JCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgQVBJQ19JQ1JfUlJfVkFMSUQ6Ci0JCQlzdGF0dXMgPSBhcGljX3JlYWQoQVBJQ19SUlIpOwotCQkJcHJpbnRrKEtFUk5fQ09OVCAiJTA4eFxuIiwgc3RhdHVzKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fQ09OVCAiZmFpbGVkXG4iKTsKLQkJfQotCX0KLX0KLSNlbmRpZgotCi0vKgotICogS2ljayB0aGUgc2Vjb25kYXJ5IHRvIHdha2UgdXAuCi0gKi8KLXN0YXRpYyBpbnQgX19jcHVpbml0IHdha2V1cF9zZWNvbmRhcnlfdmlhX0lOSVQoaW50IHBoeXNfYXBpY2lkLCB1bnNpZ25lZCBpbnQgc3RhcnRfcmlwKQotewotCXVuc2lnbmVkIGxvbmcgc2VuZF9zdGF0dXMsIGFjY2VwdF9zdGF0dXMgPSAwOwotCWludCBtYXhsdnQsIG51bV9zdGFydHMsIGo7Ci0KLQlEcHJpbnRrKCJBc3NlcnRpbmcgSU5JVC5cbiIpOwotCi0JLyoKLQkgKiBUdXJuIElOSVQgb24gdGFyZ2V0IGNoaXAKLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChwaHlzX2FwaWNpZCkpOwotCi0JLyoKLQkgKiBTZW5kIElQSQotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIEFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfSU5UX0FTU0VSVAotCQkJCXwgQVBJQ19ETV9JTklUKTsKLQotCURwcmludGsoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4iKTsKLQlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQltZGVsYXkoMTApOwotCi0JRHByaW50aygiRGVhc3NlcnRpbmcgSU5JVC5cbiIpOwotCi0JLyogVGFyZ2V0IGNoaXAgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChwaHlzX2FwaWNpZCkpOwotCi0JLyogU2VuZCBJUEkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBBUElDX0lOVF9MRVZFTFRSSUcgfCBBUElDX0RNX0lOSVQpOwotCi0JRHByaW50aygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOwotCXNlbmRfc3RhdHVzID0gc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCW1iKCk7Ci0JYXRvbWljX3NldCgmaW5pdF9kZWFzc2VydGVkLCAxKTsKLQotCW51bV9zdGFydHMgPSAyOwotCi0JLyoKLQkgKiBSdW4gU1RBUlRVUCBJUEkgbG9vcC4KLQkgKi8KLQlEcHJpbnRrKCIjc3RhcnR1cCBsb29wczogJWQuXG4iLCBudW1fc3RhcnRzKTsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCWZvciAoaiA9IDE7IGogPD0gbnVtX3N0YXJ0czsgaisrKSB7Ci0JCURwcmludGsoIlNlbmRpbmcgU1RBUlRVUCAjJWQuXG4iLGopOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJRHByaW50aygiQWZ0ZXIgYXBpY193cml0ZS5cbiIpOwotCi0JCS8qCi0JCSAqIFNUQVJUVVAgSVBJCi0JCSAqLwotCi0JCS8qIFRhcmdldCBjaGlwICovCi0JCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKHBoeXNfYXBpY2lkKSk7Ci0KLQkJLyogQm9vdCBvbiB0aGUgc3RhY2sgKi8KLQkJLyogS2ljayB0aGUgc2Vjb25kICovCi0JCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIEFQSUNfRE1fU1RBUlRVUCB8IChzdGFydF9yaXAgPj4gMTIpKTsKLQotCQkvKgotCQkgKiBHaXZlIHRoZSBvdGhlciBDUFUgc29tZSB0aW1lIHRvIGFjY2VwdCB0aGUgSVBJLgotCQkgKi8KLQkJdWRlbGF5KDMwMCk7Ci0KLQkJRHByaW50aygiU3RhcnR1cCBwb2ludCAxLlxuIik7Ci0KLQkJRHByaW50aygiV2FpdGluZyBmb3Igc2VuZCB0byBmaW5pc2guLi5cbiIpOwotCQlzZW5kX3N0YXR1cyA9IHNhZmVfYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0KLQkJLyoKLQkJICogR2l2ZSB0aGUgb3RoZXIgQ1BVIHNvbWUgdGltZSB0byBhY2NlcHQgdGhlIElQSS4KLQkJICovCi0JCXVkZWxheSgyMDApOwotCQkvKgotCQkgKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuCi0JCSAqLwotCQlpZiAobWF4bHZ0ID4gMykgewotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCX0KLQkJYWNjZXB0X3N0YXR1cyA9IChhcGljX3JlYWQoQVBJQ19FU1IpICYgMHhFRik7Ci0JCWlmIChzZW5kX3N0YXR1cyB8fCBhY2NlcHRfc3RhdHVzKQotCQkJYnJlYWs7Ci0JfQotCURwcmludGsoIkFmdGVyIFN0YXJ0dXAuXG4iKTsKLQotCWlmIChzZW5kX3N0YXR1cykKLQkJcHJpbnRrKEtFUk5fRVJSICJBUElDIG5ldmVyIGRlbGl2ZXJlZD8/P1xuIik7Ci0JaWYgKGFjY2VwdF9zdGF0dXMpCi0JCXByaW50ayhLRVJOX0VSUiAiQVBJQyBkZWxpdmVyeSBlcnJvciAoJWx4KS5cbiIsIGFjY2VwdF9zdGF0dXMpOwotCi0JcmV0dXJuIChzZW5kX3N0YXR1cyB8IGFjY2VwdF9zdGF0dXMpOwotfQotCi1zdHJ1Y3QgY3JlYXRlX2lkbGUgewotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKLQlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwotCWludCBjcHU7Ci19OwotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgZG9fZm9ya19pZGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgY3JlYXRlX2lkbGUgKmNfaWRsZSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3JlYXRlX2lkbGUsIHdvcmspOwotCi0JY19pZGxlLT5pZGxlID0gZm9ya19pZGxlKGNfaWRsZS0+Y3B1KTsKLQljb21wbGV0ZSgmY19pZGxlLT5kb25lKTsKLX0KLQotLyoKLSAqIEJvb3Qgb25lIENQVS4KLSAqLwotc3RhdGljIGludCBfX2NwdWluaXQgZG9fYm9vdF9jcHUoaW50IGNwdSwgaW50IGFwaWNpZCkKLXsKLQl1bnNpZ25lZCBsb25nIGJvb3RfZXJyb3I7Ci0JaW50IHRpbWVvdXQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9yaXA7Ci0Jc3RydWN0IGNyZWF0ZV9pZGxlIGNfaWRsZSA9IHsKLQkJLndvcmsgPSBfX1dPUktfSU5JVElBTElaRVIoY19pZGxlLndvcmssIGRvX2ZvcmtfaWRsZSksCi0JCS5jcHUgPSBjcHUsCi0JCS5kb25lID0gQ09NUExFVElPTl9JTklUSUFMSVpFUl9PTlNUQUNLKGNfaWRsZS5kb25lKSwKLQl9OwotCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBnZHRzIG9mIHNlY29uZGFyeSBjcHVzLiBIb3RwbHVnIGlzIGNvbnNpZGVyZWQgKi8KLQlpZiAoIWNwdV9nZHRfZGVzY3JbY3B1XS5hZGRyZXNzICYmCi0JCSEoY3B1X2dkdF9kZXNjcltjcHVdLmFkZHJlc3MgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIEdEVCBmb3IgQ1BVICVkXG4iLCBjcHUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogQWxsb2NhdGUgbm9kZSBsb2NhbCBtZW1vcnkgZm9yIEFQIHBkYXMgKi8KLQlpZiAoY3B1X3BkYShjcHUpID09ICZib290X2NwdV9wZGFbY3B1XSkgewotCQlzdHJ1Y3QgeDg2NjRfcGRhICpuZXdwZGEsICpwZGE7Ci0JCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQkJcGRhID0gY3B1X3BkYShjcHUpOwotCQluZXdwZGEgPSBrbWFsbG9jX25vZGUoc2l6ZW9mIChzdHJ1Y3QgeDg2NjRfcGRhKSwgR0ZQX0FUT01JQywKLQkJCQkgICAgICBub2RlKTsKLQkJaWYgKG5ld3BkYSkgewotCQkJbWVtY3B5KG5ld3BkYSwgcGRhLCBzaXplb2YgKHN0cnVjdCB4ODY2NF9wZGEpKTsKLQkJCWNwdV9wZGEoY3B1KSA9IG5ld3BkYTsKLQkJfSBlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJIkNvdWxkIG5vdCBhbGxvY2F0ZSBub2RlIGxvY2FsIFBEQSBmb3IgQ1BVICVkIG9uIG5vZGUgJWRcbiIsCi0JCQkJY3B1LCBub2RlKTsKLQl9Ci0KLQlhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaCgxKTsKLQotCWNfaWRsZS5pZGxlID0gZ2V0X2lkbGVfZm9yX2NwdShjcHUpOwotCi0JaWYgKGNfaWRsZS5pZGxlKSB7Ci0JCWNfaWRsZS5pZGxlLT50aHJlYWQuc3AgPSAodW5zaWduZWQgbG9uZykgKCgoc3RydWN0IHB0X3JlZ3MgKikKLQkJCShUSFJFQURfU0laRSArICB0YXNrX3N0YWNrX3BhZ2UoY19pZGxlLmlkbGUpKSkgLSAxKTsKLQkJaW5pdF9pZGxlKGNfaWRsZS5pZGxlLCBjcHUpOwotCQlnb3RvIGRvX3Jlc3Q7Ci0JfQotCi0JLyoKLQkgKiBEdXJpbmcgY29sZCBib290IHByb2Nlc3MsIGtldmVudGQgdGhyZWFkIGlzIG5vdCBzcHVuIHVwIHlldC4KLQkgKiBXaGVuIHdlIGRvIGNwdSBob3QtYWRkLCB3ZSBjcmVhdGUgaWRsZSB0aHJlYWRzIG9uIHRoZSBmbHksIHdlIHNob3VsZAotCSAqIG5vdCBhY3F1aXJlIGFueSBhdHRyaWJ1dGVzIGZyb20gdGhlIGNhbGxpbmcgY29udGV4dC4gSGVuY2UgdGhlIGNsZWFuCi0JICogd2F5IHRvIGNyZWF0ZSBrZXJuZWxfdGhyZWFkcygpIGlzIHRvIGRvIHRoYXQgZnJvbSBrZXZlbnRkKCkuCi0JICogV2UgZG8gdGhlIGN1cnJlbnRfaXNfa2V2ZW50ZCgpIGR1ZSB0byB0aGUgZmFjdCB0aGF0IEFDUEkgbm90aWZpZXIKLQkgKiB3YXMgYWxzbyBxdWV1aW5nIHRvIGtldmVudGQoKSBhbmQgd2hlbiB0aGUgY2FsbGVyIGlzIGFscmVhZHkgcnVubmluZwotCSAqIGluIGNvbnRleHQgb2Yga2V2ZW50ZCgpLCB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBsb2NraW5nIHVwIHRoZSBrZXZlbnRkCi0JICogdGhyZWFkLgotCSAqLwotCWlmICgha2V2ZW50ZF91cCgpIHx8IGN1cnJlbnRfaXNfa2V2ZW50ZCgpKQotCQljX2lkbGUud29yay5mdW5jKCZjX2lkbGUud29yayk7Ci0JZWxzZSB7Ci0JCXNjaGVkdWxlX3dvcmsoJmNfaWRsZS53b3JrKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmY19pZGxlLmRvbmUpOwotCX0KLQotCWlmIChJU19FUlIoY19pZGxlLmlkbGUpKSB7Ci0JCXByaW50aygiZmFpbGVkIGZvcmsgZm9yIENQVSAlZFxuIiwgY3B1KTsKLQkJcmV0dXJuIFBUUl9FUlIoY19pZGxlLmlkbGUpOwotCX0KLQotCXNldF9pZGxlX2Zvcl9jcHUoY3B1LCBjX2lkbGUuaWRsZSk7Ci0KLWRvX3Jlc3Q6Ci0KLQljcHVfcGRhKGNwdSktPnBjdXJyZW50ID0gY19pZGxlLmlkbGU7Ci0KLQlzdGFydF9yaXAgPSBzZXR1cF90cmFtcG9saW5lKCk7Ci0KLQlpbml0X3JzcCA9IGNfaWRsZS5pZGxlLT50aHJlYWQuc3A7Ci0JbG9hZF9zcDAoJnBlcl9jcHUoaW5pdF90c3MsIGNwdSksICZjX2lkbGUuaWRsZS0+dGhyZWFkKTsKLQlpbml0aWFsX2NvZGUgPSBzdGFydF9zZWNvbmRhcnk7Ci0JY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNfaWRsZS5pZGxlLCBUSUZfRk9SSyk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJCb290aW5nIHByb2Nlc3NvciAlZC8lZCBBUElDIDB4JXhcbiIsIGNwdSwKLQkJY3B1c193ZWlnaHQoY3B1X3ByZXNlbnRfbWFwKSwKLQkJYXBpY2lkKTsKLQotCS8qCi0JICogVGhpcyBncnVuZ2UgcnVucyB0aGUgc3RhcnR1cCBwcm9jZXNzIGZvcgotCSAqIHRoZSB0YXJnZXRlZCBwcm9jZXNzb3IuCi0JICovCi0KLQlhdG9taWNfc2V0KCZpbml0X2RlYXNzZXJ0ZWQsIDApOwotCi0JRHByaW50aygiU2V0dGluZyB3YXJtIHJlc2V0IGNvZGUgYW5kIHZlY3Rvci5cbiIpOwotCi0JQ01PU19XUklURSgweGEsIDB4Zik7Ci0JbG9jYWxfZmx1c2hfdGxiKCk7Ci0JRHByaW50aygiMS5cbiIpOwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIHBoeXNfdG9fdmlydCgweDQ2OSkpID0gc3RhcnRfcmlwID4+IDQ7Ci0JRHByaW50aygiMi5cbiIpOwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIHBoeXNfdG9fdmlydCgweDQ2NykpID0gc3RhcnRfcmlwICYgMHhmOwotCURwcmludGsoIjMuXG4iKTsKLQotCS8qCi0JICogQmUgcGFyYW5vaWQgYWJvdXQgY2xlYXJpbmcgQVBJQyBlcnJvcnMuCi0JICovCi0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JYXBpY19yZWFkKEFQSUNfRVNSKTsKLQotCS8qCi0JICogU3RhdHVzIGlzIG5vdyBjbGVhbgotCSAqLwotCWJvb3RfZXJyb3IgPSAwOwotCi0JLyoKLQkgKiBTdGFydGluZyBhY3R1YWwgSVBJIHNlcXVlbmNlLi4uCi0JICovCi0JYm9vdF9lcnJvciA9IHdha2V1cF9zZWNvbmRhcnlfdmlhX0lOSVQoYXBpY2lkLCBzdGFydF9yaXApOwotCi0JaWYgKCFib290X2Vycm9yKSB7Ci0JCS8qCi0JCSAqIGFsbG93IEFQcyB0byBzdGFydCBpbml0aWFsaXppbmcuCi0JCSAqLwotCQlEcHJpbnRrKCJCZWZvcmUgQ2FsbG91dCAlZC5cbiIsIGNwdSk7Ci0JCWNwdV9zZXQoY3B1LCBjcHVfY2FsbG91dF9tYXApOwotCQlEcHJpbnRrKCJBZnRlciBDYWxsb3V0ICVkLlxuIiwgY3B1KTsKLQotCQkvKgotCQkgKiBXYWl0IDVzIHRvdGFsIGZvciBhIHJlc3BvbnNlCi0JCSAqLwotCQlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNTAwMDA7IHRpbWVvdXQrKykgewotCQkJaWYgKGNwdV9pc3NldChjcHUsIGNwdV9jYWxsaW5fbWFwKSkKLQkJCQlicmVhazsJLyogSXQgaGFzIGJvb3RlZCAqLwotCQkJdWRlbGF5KDEwMCk7Ci0JCX0KLQotCQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKSB7Ci0JCQkvKiBudW1iZXIgQ1BVcyBsb2dpY2FsbHksIHN0YXJ0aW5nIGZyb20gMSAoQlNQIGlzIDApICovCi0JCQlEcHJpbnRrKCJDUFUgaGFzIGJvb3RlZC5cbiIpOwotCQl9IGVsc2UgewotCQkJYm9vdF9lcnJvciA9IDE7Ci0JCQlpZiAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBoeXNfdG9fdmlydChTTVBfVFJBTVBPTElORV9CQVNFKSkKLQkJCQkJPT0gMHhBNSkKLQkJCQkvKiB0cmFtcG9saW5lIHN0YXJ0ZWQgYnV0Li4uPyAqLwotCQkJCXByaW50aygiU3R1Y2sgPz9cbiIpOwotCQkJZWxzZQotCQkJCS8qIHRyYW1wb2xpbmUgY29kZSBub3QgcnVuICovCi0JCQkJcHJpbnRrKCJOb3QgcmVzcG9uZGluZy5cbiIpOwotI2lmZGVmIEFQSUNfREVCVUcKLQkJCWlucXVpcmVfcmVtb3RlX2FwaWMoYXBpY2lkKTsKLSNlbmRpZgotCQl9Ci0JfQotCWlmIChib290X2Vycm9yKSB7Ci0JCWNwdV9jbGVhcihjcHUsIGNwdV9jYWxsb3V0X21hcCk7IC8qIHdhcyBzZXQgaGVyZSAoZG9fYm9vdF9jcHUoKSkgKi8KLQkJY2xlYXJfYml0KGNwdSwgKHVuc2lnbmVkIGxvbmcgKikmY3B1X2luaXRpYWxpemVkKTsgLyogd2FzIHNldCBieSBjcHVfaW5pdCgpICovCi0JCWNsZWFyX25vZGVfY3B1bWFzayhjcHUpOyAvKiB3YXMgc2V0IGJ5IG51bWFfYWRkX2NwdSAqLwotCQljcHVfY2xlYXIoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotCQljcHVfY2xlYXIoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKLQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IEJBRF9BUElDSUQ7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAwOwotfQotCi1jeWNsZXNfdCBjYWNoZWZsdXNoX3RpbWU7Ci11bnNpZ25lZCBsb25nIGNhY2hlX2RlY2F5X3RpY2tzOwotCi0vKgotICogQ2xlYW51cCBwb3NzaWJsZSBkYW5nbGluZyBlbmRzLi4uCi0gKi8KLXN0YXRpYyBfX2NwdWluaXQgdm9pZCBzbXBfY2xlYW51cF9ib290KHZvaWQpCi17Ci0JLyoKLQkgKiBQYXJhbm9pZDogIFNldCB3YXJtIHJlc2V0IGNvZGUgYW5kIHZlY3RvciBoZXJlIGJhY2sKLQkgKiB0byBkZWZhdWx0IHZhbHVlcy4KLQkgKi8KLQlDTU9TX1dSSVRFKDAsIDB4Zik7Ci0KLQkvKgotCSAqIFJlc2V0IHRyYW1wb2xpbmUgZmxhZwotCSAqLwotCSooKHZvbGF0aWxlIGludCAqKSBwaHlzX3RvX3ZpcnQoMHg0NjcpKSA9IDA7Ci19Ci0KLS8qCi0gKiBGYWxsIGJhY2sgdG8gbm9uIFNNUCBtb2RlIGFmdGVyIGVycm9ycy4KLSAqCi0gKiBSRUQtUEVOIGF1ZGl0L3Rlc3QgdGhpcyBtb3JlLiBJIGJldCB0aGVyZSBpcyBtb3JlIHN0YXRlIG1lc3NlZCB1cCBoZXJlLgotICovCi1zdGF0aWMgX19pbml0IHZvaWQgZGlzYWJsZV9zbXAodm9pZCkKLXsKLQljcHVfcHJlc2VudF9tYXAgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQljcHVfcG9zc2libGVfbWFwID0gY3B1bWFza19vZl9jcHUoMCk7Ci0JaWYgKHNtcF9mb3VuZF9jb25maWcpCi0JCXBoeXNfY3B1X3ByZXNlbnRfbWFwID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X2lkKTsKLQllbHNlCi0JCXBoeXNfY3B1X3ByZXNlbnRfbWFwID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKDApOwotCWNwdV9zZXQoMCwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIDApKTsKLQljcHVfc2V0KDAsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCAwKSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQotaW50IGFkZGl0aW9uYWxfY3B1cyBfX2luaXRkYXRhID0gLTE7Ci0KLS8qCi0gKiBjcHVfcG9zc2libGVfbWFwIHNob3VsZCBiZSBzdGF0aWMsIGl0IGNhbm5vdCBjaGFuZ2UgYXMgY3B1J3MKLSAqIGFyZSBvbmxpbmVkLCBvciBvZmZsaW5lZC4gVGhlIHJlYXNvbiBpcyBwZXItY3B1IGRhdGEtc3RydWN0dXJlcwotICogYXJlIGFsbG9jYXRlZCBieSBzb21lIG1vZHVsZXMgYXQgaW5pdCB0aW1lLCBhbmQgZG9udCBleHBlY3QgdG8KLSAqIGRvIHRoaXMgZHluYW1pY2FsbHkgb24gY3B1IGFycml2YWwvZGVwYXJ0dXJlLgotICogY3B1X3ByZXNlbnRfbWFwIG9uIHRoZSBvdGhlciBoYW5kIGNhbiBjaGFuZ2UgZHluYW1pY2FsbHkuCi0gKiBJbiBjYXNlIHdoZW4gY3B1X2hvdHBsdWcgaXMgbm90IGNvbXBpbGVkLCB0aGVuIHdlIHJlc29ydCB0byBjdXJyZW50Ci0gKiBiZWhhdmlvdXIsIHdoaWNoIGlzIGNwdV9wb3NzaWJsZSA9PSBjcHVfcHJlc2VudC4KLSAqIC0gQXNob2sgUmFqCi0gKgotICogVGhyZWUgd2F5cyB0byBmaW5kIG91dCB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgaG90cGx1ZyBDUFVzOgotICogLSBJZiB0aGUgQklPUyBzcGVjaWZpZWQgZGlzYWJsZWQgQ1BVcyBpbiBBQ1BJL21wdGFibGVzIHVzZSB0aGF0LgotICogLSBUaGUgdXNlciBjYW4gb3ZlcndyaXRlIGl0IHdpdGggYWRkaXRpb25hbF9jcHVzPU5VTQotICogLSBPdGhlcndpc2UgZG9uJ3QgcmVzZXJ2ZSBhZGRpdGlvbmFsIENQVXMuCi0gKiBXZSBkbyB0aGlzIGJlY2F1c2UgYWRkaXRpb25hbCBDUFVzIHdhc3RlIGEgbG90IG9mIG1lbW9yeS4KLSAqIC1BSwotICovCi1fX2luaXQgdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKQotewotCWludCBpOwotCWludCBwb3NzaWJsZTsKLQotIAlpZiAoYWRkaXRpb25hbF9jcHVzID09IC0xKSB7Ci0gCQlpZiAoZGlzYWJsZWRfY3B1cyA+IDApCi0gCQkJYWRkaXRpb25hbF9jcHVzID0gZGlzYWJsZWRfY3B1czsKLSAJCWVsc2UKLQkJCWFkZGl0aW9uYWxfY3B1cyA9IDA7Ci0gCX0KLQlwb3NzaWJsZSA9IG51bV9wcm9jZXNzb3JzICsgYWRkaXRpb25hbF9jcHVzOwotCWlmIChwb3NzaWJsZSA+IE5SX0NQVVMpIAotCQlwb3NzaWJsZSA9IE5SX0NQVVM7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTTVA6IEFsbG93aW5nICVkIENQVXMsICVkIGhvdHBsdWcgQ1BVc1xuIiwKLQkJcG9zc2libGUsCi0JICAgICAgICBtYXhfdChpbnQsIHBvc3NpYmxlIC0gbnVtX3Byb2Nlc3NvcnMsIDApKTsKLQotCWZvciAoaSA9IDA7IGkgPCBwb3NzaWJsZTsgaSsrKQotCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOwotfQotI2VuZGlmCi0KLS8qCi0gKiBWYXJpb3VzIHNhbml0eSBjaGVja3MuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHNtcF9zYW5pdHlfY2hlY2sodW5zaWduZWQgbWF4X2NwdXMpCi17Ci0JaWYgKCFwaHlzaWRfaXNzZXQoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKSkgewotCQlwcmludGsoIndlaXJkLCBib290IENQVSAoIyVkKSBub3QgbGlzdGVkIGJ5IHRoZSBCSU9TLlxuIiwKLQkJICAgICAgIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJcGh5c2lkX3NldChoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCX0KLQotCS8qCi0JICogSWYgd2UgY291bGRuJ3QgZmluZCBhbiBTTVAgY29uZmlndXJhdGlvbiBhdCBib290IHRpbWUsCi0JICogZ2V0IG91dCBvZiBoZXJlIG5vdyEKLQkgKi8KLQlpZiAoIXNtcF9mb3VuZF9jb25maWcpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJTTVAgbW90aGVyYm9hcmQgbm90IGRldGVjdGVkLlxuIik7Ci0JCWRpc2FibGVfc21wKCk7Ci0JCWlmIChBUElDX2luaXRfdW5pcHJvY2Vzc29yKCkpCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIkxvY2FsIEFQSUMgbm90IGRldGVjdGVkLiIKLQkJCQkJICAgIiBVc2luZyBkdW1teSBBUElDIGVtdWxhdGlvbi5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoKLQkgKiBTaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBNUCB0YWJsZSBzaG91bGQgbGlzdCB0aGUgYm9vdAotCSAqIENQVSB0b28sIGJ1dCB3ZSBkbyBpdCBmb3IgdGhlIHNha2Ugb2Ygcm9idXN0bmVzcyBhbnl3YXkuCi0JICovCi0JaWYgKCFwaHlzaWRfaXNzZXQoYm9vdF9jcHVfaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIndlaXJkLCBib290IENQVSAoIyVkKSBub3QgbGlzdGVkIGJ5IHRoZSBCSU9TLlxuIiwKLQkJCQkJCQkJIGJvb3RfY3B1X2lkKTsKLQkJcGh5c2lkX3NldChoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCX0KLQotCS8qCi0JICogSWYgd2UgY291bGRuJ3QgZmluZCBhIGxvY2FsIEFQSUMsIHRoZW4gZ2V0IG91dCBvZiBoZXJlIG5vdyEKLQkgKi8KLQlpZiAoIWNwdV9oYXNfYXBpYykgewotCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBsb2NhbCBBUElDICMlZCBub3QgZGV0ZWN0ZWQhLi4uXG4iLAotCQkJYm9vdF9jcHVfaWQpOwotCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmb3JjaW5nIHVzZSBvZiBkdW1teSBBUElDIGVtdWxhdGlvbi4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKLQkJbnJfaW9hcGljcyA9IDA7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIElmIFNNUCBzaG91bGQgYmUgZGlzYWJsZWQsIHRoZW4gcmVhbGx5IGRpc2FibGUgaXQhCi0JICovCi0JaWYgKCFtYXhfY3B1cykgewotCQlwcmludGsoS0VSTl9JTkZPICJTTVAgbW9kZSBkZWFjdGl2YXRlZCwgZm9yY2luZyB1c2Ugb2YgZHVtbXkgQVBJQyBlbXVsYXRpb24uXG4iKTsKLQkJbnJfaW9hcGljcyA9IDA7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHNtcF9jcHVfaW5kZXhfZGVmYXVsdCh2b2lkKQotewotCWludCBpOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYzsKLQotCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9wb3NzaWJsZV9tYXApIHsKLQkJYyA9ICZjcHVfZGF0YShpKTsKLQkJLyogbWFyayBhbGwgdG8gaG90cGx1ZyAqLwotCQljLT5jcHVfaW5kZXggPSBOUl9DUFVTOwotCX0KLX0KLQotLyoKLSAqIFByZXBhcmUgZm9yIFNNUCBib290dXAuICBUaGUgTVAgdGFibGUgb3IgQUNQSSBoYXMgYmVlbiByZWFkCi0gKiBlYXJsaWVyLiAgSnVzdCBkbyBzb21lIHNhbml0eSBjaGVja2luZyBoZXJlIGFuZCBlbmFibGUgQVBJQyBtb2RlLgotICovCi12b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKLXsKLQlubWlfd2F0Y2hkb2dfZGVmYXVsdCgpOwotCXNtcF9jcHVfaW5kZXhfZGVmYXVsdCgpOwotCWN1cnJlbnRfY3B1X2RhdGEgPSBib290X2NwdV9kYXRhOwotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gMDsgIC8qIG5lZWRlZD8gKi8KLQlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOwotCi0JaWYgKHNtcF9zYW5pdHlfY2hlY2sobWF4X2NwdXMpIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJTTVAgZGlzYWJsZWRcbiIpOwotCQlkaXNhYmxlX3NtcCgpOwotCQlyZXR1cm47Ci0JfQotCi0KLQkvKgotCSAqIFN3aXRjaCBmcm9tIFBJQyB0byBBUElDIG1vZGUuCi0JICovCi0Jc2V0dXBfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBFbmFibGUgSU8gQVBJQyBiZWZvcmUgc2V0dGluZyB1cCBlcnJvciB2ZWN0b3IKLQkgKi8KLQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCWVuYWJsZV9JT19BUElDKCk7Ci0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKLQotCWlmIChHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpICE9IGJvb3RfY3B1X2lkKSB7Ci0JCXBhbmljKCJCb290IEFQSUMgSUQgaW4gbG9jYWwgQVBJQyB1bmV4cGVjdGVkICglZCB2cyAlZCkiLAotCQkgICAgICBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpLCBib290X2NwdV9pZCk7Ci0JCS8qIE9yIGNhbiB3ZSBzd2l0Y2ggYmFjayB0byBQSUMgaGVyZT8gKi8KLQl9Ci0KLQkvKgotCSAqIE5vdyBzdGFydCB0aGUgSU8tQVBJQ3MKLQkgKi8KLQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCXNldHVwX0lPX0FQSUMoKTsKLQllbHNlCi0JCW5yX2lvYXBpY3MgPSAwOwotCi0JLyoKLQkgKiBTZXQgdXAgbG9jYWwgQVBJQyB0aW1lciBvbiBib290IENQVS4KLQkgKi8KLQotCXNldHVwX2Jvb3RfY2xvY2soKTsKLX0KLQotLyoKLSAqIEVhcmx5IHNldHVwIHRvIG1ha2UgcHJpbnRrIHdvcmsuCi0gKi8KLXZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCi17Ci0JaW50IG1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCS8qIGFscmVhZHkgc2V0IG1lIGluIGNwdV9vbmxpbmVfbWFwIGluIGJvb3RfY3B1X2luaXQoKSAqLwotCWNwdV9zZXQobWUsIGNwdV9jYWxsb3V0X21hcCk7Ci0JcGVyX2NwdShjcHVfc3RhdGUsIG1lKSA9IENQVV9PTkxJTkU7Ci19Ci0KLS8qCi0gKiBFbnRyeSBwb2ludCB0byBib290IGEgQ1BVLgotICovCi1pbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JaW50IGFwaWNpZCA9IGNwdV9wcmVzZW50X3RvX2FwaWNpZChjcHUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKLQotCURwcmludGsoIisrKysrKysrKysrKysrKysrKysrPV8tLS1DUFUgVVAgICV1XG4iLCBjcHUpOwotCi0JaWYgKGFwaWNpZCA9PSBCQURfQVBJQ0lEIHx8IGFwaWNpZCA9PSBib290X2NwdV9pZCB8fAotCSAgICAhcGh5c2lkX2lzc2V0KGFwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApKSB7Ci0JCXByaW50aygiX19jcHVfdXA6IGJhZCBjcHUgJWRcbiIsIGNwdSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogQWxyZWFkeSBib290ZWQgQ1BVPwotCSAqLwotIAlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKSB7Ci0JCURwcmludGsoImRvX2Jvb3RfY3B1ICVkIEFscmVhZHkgc3RhcnRlZFxuIiwgY3B1KTsKLSAJCXJldHVybiAtRU5PU1lTOwotCX0KLQotCS8qCi0JICogU2F2ZSBjdXJyZW50IE1UUlIgc3RhdGUgaW4gY2FzZSBpdCB3YXMgY2hhbmdlZCBzaW5jZSBlYXJseSBib290Ci0JICogKGUuZy4gYnkgdGhlIEFDUEkgU01JKSB0byBpbml0aWFsaXplIG5ldyBDUFVzIHdpdGggTVRSUnMgaW4gc3luYzoKLQkgKi8KLQltdHJyX3NhdmVfc3RhdGUoKTsKLQotCXBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID0gQ1BVX1VQX1BSRVBBUkU7Ci0JLyogQm9vdCBpdCEgKi8KLQllcnIgPSBkb19ib290X2NwdShjcHUsIGFwaWNpZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJRHByaW50aygiZG9fYm9vdF9jcHUgZmFpbGVkICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFVubGVhc2ggdGhlIENQVSEgKi8KLQlEcHJpbnRrKCJ3YWl0aW5nIGZvciBjcHUgJWRcbiIsIGNwdSk7Ci0KLQkvKgotICAJICogTWFrZSBzdXJlIGFuZCBjaGVjayBUU0Mgc3luYzoKLSAJICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNoZWNrX3RzY19zeW5jX3NvdXJjZShjcHUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXdoaWxlICghY3B1X2lzc2V0KGNwdSwgY3B1X29ubGluZV9tYXApKQotCQljcHVfcmVsYXgoKTsKLQllcnIgPSAwOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIEZpbmlzaCB0aGUgU01QIGJvb3QuCi0gKi8KLXZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQotewotCXNtcF9jbGVhbnVwX2Jvb3QoKTsKLQlzZXR1cF9pb2FwaWNfZGVzdCgpOwotCWNoZWNrX25taV93YXRjaGRvZygpOwotfQotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0KLXN0YXRpYyB2b2lkIHJlbW92ZV9zaWJsaW5naW5mbyhpbnQgY3B1KQotewotCWludCBzaWJsaW5nOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOwotCi0JZm9yX2VhY2hfY3B1X21hc2soc2libGluZywgcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpIHsKLQkJY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfY29yZV9tYXAsIHNpYmxpbmcpKTsKLQkJLyoKLQkJICogbGFzdCB0aHJlYWQgc2libGluZyBpbiB0aGlzIGNwdSBjb3JlIGdvaW5nIGRvd24KLQkJICovCi0JCWlmIChjcHVzX3dlaWdodChwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkgPT0gMSkKLQkJCWNwdV9kYXRhKHNpYmxpbmcpLmJvb3RlZF9jb3Jlcy0tOwotCX0KLQkJCQotCWZvcl9lYWNoX2NwdV9tYXNrKHNpYmxpbmcsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKQotCQljcHVfY2xlYXIoY3B1LCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgc2libGluZykpOwotCWNwdXNfY2xlYXIocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpOwotCWNwdXNfY2xlYXIocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOwotCWMtPnBoeXNfcHJvY19pZCA9IDA7Ci0JYy0+Y3B1X2NvcmVfaWQgPSAwOwotCWNwdV9jbGVhcihjcHUsIGNwdV9zaWJsaW5nX3NldHVwX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fcmVmIHJlbW92ZV9jcHVfZnJvbV9tYXBzKHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWNwdV9jbGVhcihjcHUsIGNwdV9jYWxsb3V0X21hcCk7Ci0JY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxpbl9tYXApOwotCWNsZWFyX2JpdChjcHUsICh1bnNpZ25lZCBsb25nICopJmNwdV9pbml0aWFsaXplZCk7IC8qIHdhcyBzZXQgYnkgY3B1X2luaXQoKSAqLwotCWNsZWFyX25vZGVfY3B1bWFzayhjcHUpOwotfQotCi1pbnQgX19jcHVfZGlzYWJsZSh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKgotCSAqIFBlcmhhcHMgdXNlIGNwdWZyZXEgdG8gZHJvcCBmcmVxdWVuY3ksIGJ1dCB0aGF0IGNvdWxkIGdvCi0JICogaW50byBnZW5lcmljIGNvZGUuCi0gCSAqCi0JICogV2Ugd29uJ3QgdGFrZSBkb3duIHRoZSBib290IHByb2Nlc3NvciBvbiBpMzg2IGR1ZSB0byBzb21lCi0JICogaW50ZXJydXB0cyBvbmx5IGJlaW5nIGFibGUgdG8gYmUgc2VydmljZWQgYnkgdGhlIEJTUC4KLQkgKiBFc3BlY2lhbGx5IHNvIGlmIHdlJ3JlIG5vdCB1c2luZyBhbiBJT0FQSUMJLXp3YW5lCi0JICovCi0JaWYgKGNwdSA9PSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykKLQkJc3RvcF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKLQljbGVhcl9sb2NhbF9BUElDKCk7Ci0KLQkvKgotCSAqIEhBQ0s6Ci0JICogQWxsb3cgYW55IHF1ZXVlZCB0aW1lciBpbnRlcnJ1cHRzIHRvIGdldCBzZXJ2aWNlZAotCSAqIFRoaXMgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiB1bnRpbCB3ZSBjbGVhbnVwCi0JICogZml4dXBfaXJxcyBhcyB3ZSBkbyBmb3IgSUE2NC4KLQkgKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JbWRlbGF5KDEpOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlyZW1vdmVfc2libGluZ2luZm8oY3B1KTsKLQotCXNwaW5fbG9jaygmdmVjdG9yX2xvY2spOwotCS8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoaXMgcHJvY2Vzc29yIGZyb20gdGhlIG9ubGluZSBtYXAgKi8KLQljcHVfY2xlYXIoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0Jc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKLQlyZW1vdmVfY3B1X2Zyb21fbWFwcygpOwotCWZpeHVwX2lycXMoY3B1X29ubGluZV9tYXApOwotCXJldHVybiAwOwotfQotCi12b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQotewotCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmU6IGlkbGUgdGFzayBpcyBmYWtpbmcgZGVhdGggaXRzZWxmLiAqLwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJLyogVGhleSBhY2sgdGhpcyBpbiBwbGF5X2RlYWQgYnkgc2V0dGluZyBDUFVfREVBRCAqLwotCQlpZiAocGVyX2NwdShjcHVfc3RhdGUsIGNwdSkgPT0gQ1BVX0RFQUQpIHsKLQkJCXByaW50ayAoIkNQVSAlZCBpcyBub3cgb2ZmbGluZVxuIiwgY3B1KTsKLQkJCWlmICgxID09IG51bV9vbmxpbmVfY3B1cygpKQotCQkJCWFsdGVybmF0aXZlc19zbXBfc3dpdGNoKDApOwotCQkJcmV0dXJuOwotCQl9Ci0JCW1zbGVlcCgxMDApOwotCX0KLSAJcHJpbnRrKEtFUk5fRVJSICJDUFUgJXUgZGlkbid0IGRpZS4uLlxuIiwgY3B1KTsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfYWRkaXRpb25hbF9jcHVzKGNoYXIgKnMpCi17Ci0JcmV0dXJuIHMgJiYgZ2V0X29wdGlvbigmcywgJmFkZGl0aW9uYWxfY3B1cykgPyAwIDogLUVJTlZBTDsKLX0KLWVhcmx5X3BhcmFtKCJhZGRpdGlvbmFsX2NwdXMiLCBzZXR1cF9hZGRpdGlvbmFsX2NwdXMpOwotCi0jZWxzZSAvKiAuLi4gIUNPTkZJR19IT1RQTFVHX0NQVSAqLwotCi1pbnQgX19jcHVfZGlzYWJsZSh2b2lkKQotewotCXJldHVybiAtRU5PU1lTOwotfQotCi12b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQotewotCS8qIFdlIHNhaWQgIm5vIiBpbiBfX2NwdV9kaXNhYmxlICovCi0JQlVHKCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0OTA2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBjb21tb24uYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogU01QIHN0dWZmIHdoaWNoIGlzIGNvbW1vbiB0byBhbGwgc3ViLWFyY2hpdGVjdHVyZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGlzX2NwdV9vZmYpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHRoaXNfY3B1X29mZik7CisKKy8qIEluaXRpYWxpemUgdGhlIENQVSdzIEdEVC4gIFRoaXMgaXMgZWl0aGVyIHRoZSBib290IENQVSBkb2luZyBpdHNlbGYKKyAgIChzdGlsbCB1c2luZyB0aGUgbWFzdGVyIHBlci1jcHUgYXJlYSksIG9yIGEgQ1BVIGRvaW5nIGl0IGZvciBhCisgICBzZWNvbmRhcnkgd2hpY2ggd2lsbCBzb29uIGNvbWUgdXAuICovCitfX2NwdWluaXQgdm9pZCBpbml0X2dkdChpbnQgY3B1KQoreworCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKKworCXBhY2tfZGVzY3JpcHRvcigmZ2R0W0dEVF9FTlRSWV9QRVJDUFVdLAorCQkJX19wZXJfY3B1X29mZnNldFtjcHVdLCAweEZGRkZGLAorCQkJMHgyIHwgREVTQ1RZUEVfUywgMHg4KTsKKworCWdkdFtHRFRfRU5UUllfUEVSQ1BVXS5zID0gMTsKKworCXBlcl9jcHUodGhpc19jcHVfb2ZmLCBjcHUpID0gX19wZXJfY3B1X29mZnNldFtjcHVdOworCXBlcl9jcHUoY3B1X251bWJlciwgY3B1KSA9IGNwdTsKK30KKyNlbmRpZgorCisvKioKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgorICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCisgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCisgKiBAbm9uYXRvbWljOiBVbnVzZWQuCisgKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCisgKgorICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkOyBvdGhlcndpc2UKKyAqIGl0IHJldHVybnMganVzdCBiZWZvcmUgdGhlIHRhcmdldCBjcHUgY2FsbHMgQGZ1bmMuCisgKgorICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCisgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KKyAqLworaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsCisJCSAgICAgIGludCB3YWl0KQoreworCXJldHVybiBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdV9vbmxpbmVfbWFwLCBmdW5jLCBpbmZvLCB3YWl0KTsKK30KK0VYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb24pOworCisvKioKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGEgc3BlY2lmaWMgQ1BVCisgKiBAY3B1OiBUaGUgdGFyZ2V0IENQVS4gIENhbm5vdCBiZSB0aGUgY2FsbGluZyBDUFUuCisgKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KKyAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KKyAqIEBub25hdG9taWM6IFVudXNlZC4KKyAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLgorICoKKyAqIElmIEB3YWl0IGlzIHRydWUsIHRoZW4gcmV0dXJucyBvbmNlIEBmdW5jIGhhcyByZXR1cm5lZDsgb3RoZXJ3aXNlCisgKiBpdCByZXR1cm5zIGp1c3QgYmVmb3JlIHRoZSB0YXJnZXQgY3B1IGNhbGxzIEBmdW5jLgorICovCitpbnQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHUsIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkgICAgIGludCBub25hdG9taWMsIGludCB3YWl0KQoreworCS8qIHByZXZlbnQgcHJlZW1wdGlvbiBhbmQgcmVzY2hlZHVsZSBvbiBhbm90aGVyIHByb2Nlc3NvciAqLworCWludCByZXQ7CisJaW50IG1lID0gZ2V0X2NwdSgpOworCWlmIChjcHUgPT0gbWUpIHsKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJZnVuYyhpbmZvKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlwdXRfY3B1KCk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza19vZl9jcHUoY3B1KSwgZnVuYywgaW5mbywgd2FpdCk7CisKKwlwdXRfY3B1KCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBjb21tb25fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBjb21tb25fMzIuYwppbmRleCA4YmMzOGFmLi44YjEzNzg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wY29tbW9uXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGNvbW1vbl8zMi5jCkBAIC0xLDgyICsxIEBACi0vKgotICogU01QIHN0dWZmIHdoaWNoIGlzIGNvbW1vbiB0byBhbGwgc3ViLWFyY2hpdGVjdHVyZXMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CiAKLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRoaXNfY3B1X29mZik7Ci1FWFBPUlRfUEVSX0NQVV9TWU1CT0wodGhpc19jcHVfb2ZmKTsKLQotLyogSW5pdGlhbGl6ZSB0aGUgQ1BVJ3MgR0RULiAgVGhpcyBpcyBlaXRoZXIgdGhlIGJvb3QgQ1BVIGRvaW5nIGl0c2VsZgotICAgKHN0aWxsIHVzaW5nIHRoZSBtYXN0ZXIgcGVyLWNwdSBhcmVhKSwgb3IgYSBDUFUgZG9pbmcgaXQgZm9yIGEKLSAgIHNlY29uZGFyeSB3aGljaCB3aWxsIHNvb24gY29tZSB1cC4gKi8KLV9fY3B1aW5pdCB2b2lkIGluaXRfZ2R0KGludCBjcHUpCi17Ci0Jc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOwotCi0JcGFja19kZXNjcmlwdG9yKCZnZHRbR0RUX0VOVFJZX1BFUkNQVV0sCi0JCQlfX3Blcl9jcHVfb2Zmc2V0W2NwdV0sIDB4RkZGRkYsCi0JCQkweDIgfCBERVNDVFlQRV9TLCAweDgpOwotCi0JZ2R0W0dEVF9FTlRSWV9QRVJDUFVdLnMgPSAxOwotCi0JcGVyX2NwdSh0aGlzX2NwdV9vZmYsIGNwdSkgPSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV07Ci0JcGVyX2NwdShjcHVfbnVtYmVyLCBjcHUpID0gY3B1OwotfQotCi0KLS8qKgotICogc21wX2NhbGxfZnVuY3Rpb24oKTogUnVuIGEgZnVuY3Rpb24gb24gYWxsIG90aGVyIENQVXMuCi0gKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KLSAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEBub25hdG9taWM6IFVudXNlZC4KLSAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4KLSAqCi0gKiBJZiBAd2FpdCBpcyB0cnVlLCB0aGVuIHJldHVybnMgb25jZSBAZnVuYyBoYXMgcmV0dXJuZWQ7IG90aGVyd2lzZQotICogaXQgcmV0dXJucyBqdXN0IGJlZm9yZSB0aGUgdGFyZ2V0IGNwdSBjYWxscyBAZnVuYy4KLSAqCi0gKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKLSAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgotICovCi1pbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IG5vbmF0b21pYywKLQkJICAgICAgaW50IHdhaXQpCi17Ci0JcmV0dXJuIHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1X29ubGluZV9tYXAsIGZ1bmMsIGluZm8sIHdhaXQpOwotfQotRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7Ci0KLS8qKgotICogc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlIC0gUnVuIGEgZnVuY3Rpb24gb24gYSBzcGVjaWZpYyBDUFUKLSAqIEBjcHU6IFRoZSB0YXJnZXQgQ1BVLiAgQ2Fubm90IGJlIHRoZSBjYWxsaW5nIENQVS4KLSAqIEBmdW5jOiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgotICogQGluZm86IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgotICogQG5vbmF0b21pYzogVW51c2VkLgotICogQHdhaXQ6IElmIHRydWUsIHdhaXQgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCi0gKgotICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkOyBvdGhlcndpc2UKLSAqIGl0IHJldHVybnMganVzdCBiZWZvcmUgdGhlIHRhcmdldCBjcHUgY2FsbHMgQGZ1bmMuCi0gKi8KLWludCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaW50IGNwdSwgdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKLQkJCSAgICAgaW50IG5vbmF0b21pYywgaW50IHdhaXQpCi17Ci0JLyogcHJldmVudCBwcmVlbXB0aW9uIGFuZCByZXNjaGVkdWxlIG9uIGFub3RoZXIgcHJvY2Vzc29yICovCi0JaW50IHJldDsKLQlpbnQgbWUgPSBnZXRfY3B1KCk7Ci0JaWYgKGNwdSA9PSBtZSkgewotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlmdW5jKGluZm8pOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXB1dF9jcHUoKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0ID0gc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVtYXNrX29mX2NwdShjcHUpLCBmdW5jLCBpbmZvLCB3YWl0KTsKLQotCXB1dF9jcHUoKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NyYXRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9zcmF0XzMyLmMKaW5kZXggYjcyZTYxMy4uNzBlNGEzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NyYXRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3JhdF8zMi5jCkBAIC0yNzcsMTQgKzI3NywxNCBAQAogCXJzZHBfYWRkcmVzcyA9IGFjcGlfb3NfZ2V0X3Jvb3RfcG9pbnRlcigpOwogCWlmICghcnNkcF9hZGRyZXNzKSB7CiAJCXByaW50aygiJXM6IFN5c3RlbSBkZXNjcmlwdGlvbiB0YWJsZXMgbm90IGZvdW5kXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZXJyOwogCX0KIAotCXByaW50aygiJXM6IGFzc2lnbmluZyBhZGRyZXNzIHRvIHJzZHBcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKCIlczogYXNzaWduaW5nIGFkZHJlc3MgdG8gcnNkcFxuIiwgX19mdW5jX18pOwogCXJzZHAgPSAoc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqKSh1MzIpcnNkcF9hZGRyZXNzOwogCWlmICghcnNkcCkgewotCQlwcmludGsoIiVzOiBEaWRuJ3QgZmluZCBBQ1BJIHJvb3QhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoIiVzOiBEaWRuJ3QgZmluZCBBQ1BJIHJvb3QhXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogCQlyc2RwLT5vZW1faWQpOwogCiAJaWYgKHN0cm5jbXAocnNkcC0+c2lnbmF0dXJlLCBBQ1BJX1NJR19SU0RQLHN0cmxlbihBQ1BJX1NJR19SU0RQKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJTRFAgdGFibGUgc2lnbmF0dXJlIGluY29ycmVjdFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJTRFAgdGFibGUgc2lnbmF0dXJlIGluY29ycmVjdFxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCkBAIC0zMDIsNyArMzAyLDcgQEAKIAlpZiAoIXJzZHQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBBQ1BJOiBJbnZhbGlkIHJvb3Qgc3lzdGVtIGRlc2NyaXB0aW9uIHRhYmxlcyAoUlNEVClcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCAwMmYwZjYxLi5jMjhjMzQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTI1LDYgKzI1LDggQEAKIHN0YXRpYyB2b2lkIHNhdmVfc3RhY2tfYWRkcmVzcyh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCByZWxpYWJsZSkKIHsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlID0gZGF0YTsKKwlpZiAoIXJlbGlhYmxlKQorCQlyZXR1cm47CiAJaWYgKHRyYWNlLT5za2lwID4gMCkgewogCQl0cmFjZS0+c2tpcC0tOwogCQlyZXR1cm47CkBAIC0zNyw2ICszOSw4IEBACiBzYXZlX3N0YWNrX2FkZHJlc3Nfbm9zY2hlZCh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCByZWxpYWJsZSkKIHsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlID0gKHN0cnVjdCBzdGFja190cmFjZSAqKWRhdGE7CisJaWYgKCFyZWxpYWJsZSkKKwkJcmV0dXJuOwogCWlmIChpbl9zY2hlZF9mdW5jdGlvbnMoYWRkcikpCiAJCXJldHVybjsKIAlpZiAodHJhY2UtPnNraXAgPiAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jIGIvYXJjaC94ODYva2VybmVsL3N0ZXAuYwppbmRleCAyZWYxYTVmLi45MmMyMGZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGVwLmMKQEAgLTE0MCwxMiArMTQwLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVnY3RsbXNyKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGxvbmcgdmFsKQogeworCWlmIChjaGlsZC0+dGhyZWFkLmRlYnVnY3RsbXNyID09IHZhbCkKKwkJcmV0dXJuOworCiAJY2hpbGQtPnRocmVhZC5kZWJ1Z2N0bG1zciA9IHZhbDsKIAogCWlmIChjaGlsZCAhPSBjdXJyZW50KQogCQlyZXR1cm47CiAKLQl3cm1zcmwoTVNSX0lBMzJfREVCVUdDVExNU1IsIHZhbCk7CisJdXBkYXRlX2RlYnVnY3RsbXNyKHZhbCk7CiB9CiAKIC8qCkBAIC0xNjUsMTEgKzE2OCwxMSBAQAogCQl3cml0ZV9kZWJ1Z2N0bG1zcihjaGlsZCwKIAkJCQkgIGNoaWxkLT50aHJlYWQuZGVidWdjdGxtc3IgfCBERUJVR0NUTE1TUl9CVEYpOwogCX0gZWxzZSB7Ci0JICAgIHdyaXRlX2RlYnVnY3RsbXNyKGNoaWxkLAotCQkJICAgICAgY2hpbGQtPnRocmVhZC5kZWJ1Z2N0bG1zciAmIH5USUZfREVCVUdDVExNU1IpOworCQl3cml0ZV9kZWJ1Z2N0bG1zcihjaGlsZCwKKwkJCQkgIGNoaWxkLT50aHJlYWQuZGVidWdjdGxtc3IgJiB+REVCVUdDVExNU1JfQlRGKTsKIAotCSAgICBpZiAoIWNoaWxkLT50aHJlYWQuZGVidWdjdGxtc3IpCi0JCSAgICBjbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9ERUJVR0NUTE1TUik7CisJCWlmICghY2hpbGQtPnRocmVhZC5kZWJ1Z2N0bG1zcikKKwkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX0RFQlVHQ1RMTVNSKTsKIAl9CiB9CiAKQEAgLTE4OSw3ICsxOTIsNyBAQAogCSAqIE1ha2Ugc3VyZSBibG9jayBzdGVwcGluZyAoQlRGKSBpcyBkaXNhYmxlZC4KIAkgKi8KIAl3cml0ZV9kZWJ1Z2N0bG1zcihjaGlsZCwKLQkJCSAgY2hpbGQtPnRocmVhZC5kZWJ1Z2N0bG1zciAmIH5USUZfREVCVUdDVExNU1IpOworCQkJICBjaGlsZC0+dGhyZWFkLmRlYnVnY3RsbXNyICYgfkRFQlVHQ1RMTVNSX0JURik7CiAKIAlpZiAoIWNoaWxkLT50aHJlYWQuZGVidWdjdGxtc3IpCiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX0RFQlVHQ1RMTVNSKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zdW1taXRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9zdW1taXRfMzIuYwppbmRleCA3MmY0NjM0Li42ODc4YTljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3VtbWl0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3N1bW1pdF8zMi5jCkBAIC0zNSw0MyArMzUsNDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NhbF9kZXRhaWwgICAqc2NhbF9kZXZzW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKIHN0YXRpYyBzdHJ1Y3QgcmlvX2RldGFpbCAgICAqcmlvX2RldnNbTUFYX05VTU5PREVTKjRdIF9faW5pdGRhdGE7CiAKK3N0YXRpYyBpbnQgbXBfYnVzX2lkX3RvX25vZGVbTUFYX01QX0JVU1NFU10gX19pbml0ZGF0YTsKKwogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcGNpX25vZGVfbWFwX2Zvcl93cGVnKGludCB3cGVnX251bSwgaW50IGxhc3RfYnVzKQogewogCWludCB0d2lzdGVyID0gMCwgbm9kZSA9IDA7CiAJaW50IGksIGJ1cywgbnVtX2J1c2VzOwogCi0JZm9yKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKyl7Ci0JCWlmIChyaW9fZGV2c1tpXS0+bm9kZV9pZCA9PSByaW9fZGV2c1t3cGVnX251bV0tPm93bmVyX2lkKXsKKwlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXY7IGkrKykgeworCQlpZiAocmlvX2RldnNbaV0tPm5vZGVfaWQgPT0gcmlvX2RldnNbd3BlZ19udW1dLT5vd25lcl9pZCkgewogCQkJdHdpc3RlciA9IHJpb19kZXZzW2ldLT5vd25lcl9pZDsKIAkJCWJyZWFrOwogCQl9CiAJfQotCWlmIChpID09IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2KXsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGRuJ3QgZmluZCBvd25lciBDeWNsb25lIGZvciBXaW5uaXBlZyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKGkgPT0gcmlvX3RhYmxlX2hkci0+bnVtX3Jpb19kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGRuJ3QgZmluZCBvd25lciBDeWNsb25lIGZvciBXaW5uaXBlZyFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGxhc3RfYnVzOwogCX0KIAotCWZvcihpID0gMDsgaSA8IHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldjsgaSsrKXsKLQkJaWYgKHNjYWxfZGV2c1tpXS0+bm9kZV9pZCA9PSB0d2lzdGVyKXsKKwlmb3IgKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2OyBpKyspIHsKKwkJaWYgKHNjYWxfZGV2c1tpXS0+bm9kZV9pZCA9PSB0d2lzdGVyKSB7CiAJCQlub2RlID0gc2NhbF9kZXZzW2ldLT5ub2RlX2lkOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKGkgPT0gcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2KXsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGRuJ3QgZmluZCBvd25lciBUd2lzdGVyIGZvciBDeWNsb25lIVxuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoaSA9PSByaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGRuJ3QgZmluZCBvd25lciBUd2lzdGVyIGZvciBDeWNsb25lIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gbGFzdF9idXM7CiAJfQogCi0Jc3dpdGNoIChyaW9fZGV2c1t3cGVnX251bV0tPnR5cGUpeworCXN3aXRjaCAocmlvX2RldnNbd3BlZ19udW1dLT50eXBlKSB7CiAJY2FzZSBDb21wYXRXUEVHOgotCQkvKiBUaGUgQ29tcGF0aWJpbGl0eSBXaW5uaXBlZyBjb250cm9scyB0aGUgMiBsZWdhY3kgYnVzZXMsCisJCS8qCisJCSAqIFRoZSBDb21wYXRpYmlsaXR5IFdpbm5pcGVnIGNvbnRyb2xzIHRoZSAyIGxlZ2FjeSBidXNlcywKIAkJICogdGhlIDY2TUh6IFBDSSBidXMgWzIgc2xvdHNdIGFuZCB0aGUgMiAiZXh0cmEiIGJ1c2VzIGluIGNhc2UKIAkJICogYSBQQ0ktUENJIGJyaWRnZSBjYXJkIGlzIHVzZWQgaW4gZWl0aGVyIHNsb3Q6IHRvdGFsIDUgYnVzZXMuCiAJCSAqLwogCQludW1fYnVzZXMgPSA1OwogCQlicmVhazsKIAljYXNlIEFsdFdQRUc6Ci0JCS8qIFRoZSBBbHRlcm5hdGUgV2lubmlwZWcgY29udHJvbHMgdGhlIDIgMTMzTUh6IGJ1c2VzIFsxIHNsb3QKKwkJLyoKKwkJICogVGhlIEFsdGVybmF0ZSBXaW5uaXBlZyBjb250cm9scyB0aGUgMiAxMzNNSHogYnVzZXMgWzEgc2xvdAogCQkgKiBlYWNoXSwgdGhlaXIgMiAiZXh0cmEiIGJ1c2VzLCB0aGUgMTAwTUh6IGJ1cyBbMiBzbG90c10gYW5kCiAJCSAqIHRoZSAiZXh0cmEiIGJ1c2VzIGZvciBlYWNoIG9mIHRob3NlIHNsb3RzOiB0b3RhbCA3IGJ1c2VzLgogCQkgKi8KQEAgLTc5LDE3ICs4MywxOCBAQAogCQlicmVhazsKIAljYXNlIExvb2tPdXRBV1BFRzoKIAljYXNlIExvb2tPdXRCV1BFRzoKLQkJLyogQSBMb29rb3V0IFdpbm5pcGVnIGNvbnRyb2xzIDMgMTAwTUh6IGJ1c2VzIFsyIHNsb3RzIGVhY2hdCisJCS8qCisJCSAqIEEgTG9va291dCBXaW5uaXBlZyBjb250cm9scyAzIDEwME1IeiBidXNlcyBbMiBzbG90cyBlYWNoXQogCQkgKiAmIHRoZSAiZXh0cmEiIGJ1c2VzIGZvciBlYWNoIG9mIHRob3NlIHNsb3RzOiB0b3RhbCA5IGJ1c2VzLgogCQkgKi8KIAkJbnVtX2J1c2VzID0gOTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuc3VwcG9ydGVkIFdpbm5pcGVnIHR5cGUhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5zdXBwb3J0ZWQgV2lubmlwZWcgdHlwZSFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGxhc3RfYnVzOwogCX0KIAotCWZvcihidXMgPSBsYXN0X2J1czsgYnVzIDwgbGFzdF9idXMgKyBudW1fYnVzZXM7IGJ1cysrKQorCWZvciAoYnVzID0gbGFzdF9idXM7IGJ1cyA8IGxhc3RfYnVzICsgbnVtX2J1c2VzOyBidXMrKykKIAkJbXBfYnVzX2lkX3RvX25vZGVbYnVzXSA9IG5vZGU7CiAJcmV0dXJuIGJ1czsKIH0KQEAgLTk5LDE0ICsxMDQsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHB0cjsKIAlpbnQgaSwgc2NhbF9kZXRhaWxfc2l6ZSwgcmlvX2RldGFpbF9zaXplOwogCi0JaWYgKHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldiA+IE1BWF9OVU1OT0RFUyl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNQVhfTlVNTk9ERVMgdG9vIGxvdyEgIERlZmluZWQgYXMgJWQsIGJ1dCBzeXN0ZW0gaGFzICVkIG5vZGVzLlxuIiwgX19GVU5DVElPTl9fLCBNQVhfTlVNTk9ERVMsIHJpb190YWJsZV9oZHItPm51bV9zY2FsX2Rldik7CisJaWYgKHJpb190YWJsZV9oZHItPm51bV9zY2FsX2RldiA+IE1BWF9OVU1OT0RFUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTUFYX05VTU5PREVTIHRvbyBsb3chICBEZWZpbmVkIGFzICVkLCBidXQgc3lzdGVtIGhhcyAlZCBub2Rlcy5cbiIsIF9fZnVuY19fLCBNQVhfTlVNTk9ERVMsIHJpb190YWJsZV9oZHItPm51bV9zY2FsX2Rldik7CiAJCXJldHVybiAwOwogCX0KIAotCXN3aXRjaCAocmlvX3RhYmxlX2hkci0+dmVyc2lvbil7CisJc3dpdGNoIChyaW9fdGFibGVfaGRyLT52ZXJzaW9uKSB7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgUmlvIEdyYW5kZSBUYWJsZSBWZXJzaW9uOiAlZFxuIiwgX19GVU5DVElPTl9fLCByaW9fdGFibGVfaGRyLT52ZXJzaW9uKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgUmlvIEdyYW5kZSBUYWJsZSBWZXJzaW9uOiAlZFxuIiwgX19mdW5jX18sIHJpb190YWJsZV9oZHItPnZlcnNpb24pOwogCQlyZXR1cm4gMDsKIAljYXNlIDI6CiAJCXNjYWxfZGV0YWlsX3NpemUgPSAxMTsKQEAgLTExOSwxMCArMTI0LDEwIEBACiAJfQogCiAJcHRyID0gKHVuc2lnbmVkIGxvbmcpcmlvX3RhYmxlX2hkciArIDM7Ci0JZm9yKGkgPSAwOyBpIDwgcmlvX3RhYmxlX2hkci0+bnVtX3NjYWxfZGV2OyBpKyssIHB0ciArPSBzY2FsX2RldGFpbF9zaXplKQorCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fc2NhbF9kZXY7IGkrKywgcHRyICs9IHNjYWxfZGV0YWlsX3NpemUpCiAJCXNjYWxfZGV2c1tpXSA9IChzdHJ1Y3Qgc2NhbF9kZXRhaWwgKilwdHI7CiAKLQlmb3IoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldjsgaSsrLCBwdHIgKz0gcmlvX2RldGFpbF9zaXplKQorCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldjsgaSsrLCBwdHIgKz0gcmlvX2RldGFpbF9zaXplKQogCQlyaW9fZGV2c1tpXSA9IChzdHJ1Y3QgcmlvX2RldGFpbCAqKXB0cjsKIAogCXJldHVybiAxOwpAQCAtMTQwLDkgKzE0NSw5IEBACiAKIAlyaW9fdGFibGVfaGRyID0gTlVMTDsKIAlvZmZzZXQgPSAweDE4MDsKLQl3aGlsZSAob2Zmc2V0KXsKKwl3aGlsZSAob2Zmc2V0KSB7CiAJCS8qIFRoZSBibG9jayBpZCBpcyBzdG9yZWQgaW4gdGhlIDJuZCB3b3JkICovCi0JCWlmICgqKCh1bnNpZ25lZCBzaG9ydCAqKShwdHIgKyBvZmZzZXQgKyAyKSkgPT0gMHg0NzUyKXsKKwkJaWYgKCooKHVuc2lnbmVkIHNob3J0ICopKHB0ciArIG9mZnNldCArIDIpKSA9PSAweDQ3NTIpIHsKIAkJCS8qIHNldCB0aGUgcG9pbnRlciBwYXN0IHRoZSBvZmZzZXQgJiBibG9jayBpZCAqLwogCQkJcmlvX3RhYmxlX2hkciA9IChzdHJ1Y3QgcmlvX3RhYmxlX2hkciAqKShwdHIgKyBvZmZzZXQgKyA0KTsKIAkJCWJyZWFrOwpAQCAtMTUwLDggKzE1NSw4IEBACiAJCS8qIFRoZSBuZXh0IG9mZnNldCBpcyBzdG9yZWQgaW4gdGhlIDFzdCB3b3JkLiAgMCBtZWFucyBubyBtb3JlICovCiAJCW9mZnNldCA9ICooKHVuc2lnbmVkIHNob3J0ICopKHB0ciArIG9mZnNldCkpOwogCX0KLQlpZiAoIXJpb190YWJsZV9oZHIpewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gbG9jYXRlIFJpbyBHcmFuZGUgVGFibGUgaW4gRUJEQSAtIGJhaWxpbmchXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmICghcmlvX3RhYmxlX2hkcikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gbG9jYXRlIFJpbyBHcmFuZGUgVGFibGUgaW4gRUJEQSAtIGJhaWxpbmchXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2MSw4ICsxNjYsOCBAQAogCS8qIFRoZSBmaXJzdCBXaW5uaXBlZyB3ZSdyZSBsb29raW5nIGZvciBoYXMgYW4gaW5kZXggb2YgMCAqLwogCW5leHRfd3BlZyA9IDA7CiAJZG8gewotCQlmb3IoaSA9IDA7IGkgPCByaW9fdGFibGVfaGRyLT5udW1fcmlvX2RldjsgaSsrKXsKLQkJCWlmIChpc19XUEVHKHJpb19kZXZzW2ldKSAmJiByaW9fZGV2c1tpXS0+V1BfaW5kZXggPT0gbmV4dF93cGVnKXsKKwkJZm9yIChpID0gMDsgaSA8IHJpb190YWJsZV9oZHItPm51bV9yaW9fZGV2OyBpKyspIHsKKwkJCWlmIChpc19XUEVHKHJpb19kZXZzW2ldKSAmJiByaW9fZGV2c1tpXS0+V1BfaW5kZXggPT0gbmV4dF93cGVnKSB7CiAJCQkJLyogSXQncyB0aGUgV2lubmlwZWcgd2UncmUgbG9va2luZyBmb3IhICovCiAJCQkJbmV4dF9idXMgPSBzZXR1cF9wY2lfbm9kZV9tYXBfZm9yX3dwZWcoaSwgbmV4dF9idXMpOwogCQkJCW5leHRfd3BlZysrOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsXzY0LmMKaW5kZXggOWQ0OThjMi4uMTcwZDQzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF82NC5jCkBAIC0xLDQgKzEsNCBAQAotLyogU3lzdGVtIGNhbGwgdGFibGUgZm9yIHg4Ni02NC4gKi8gCisvKiBTeXN0ZW0gY2FsbCB0YWJsZSBmb3IgeDg2LTY0LiAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgpAQCAtNywyMCArNywyMyBAQAogCiAjZGVmaW5lIF9fTk9fU1RVQlMKIAotI2RlZmluZSBfX1NZU0NBTEwobnIsIHN5bSkgZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzeW0odm9pZCkgOyAKKyNkZWZpbmUgX19TWVNDQUxMKG5yLCBzeW0pIGV4dGVybiBhc21saW5rYWdlIHZvaWQgc3ltKHZvaWQpIDsKICN1bmRlZiBfQVNNX1g4Nl82NF9VTklTVERfSF8KICNpbmNsdWRlIDxhc20vdW5pc3RkXzY0Lmg+CiAKICN1bmRlZiBfX1NZU0NBTEwKLSNkZWZpbmUgX19TWVNDQUxMKG5yLCBzeW0pIFsgbnIgXSA9IHN5bSwgCisjZGVmaW5lIF9fU1lTQ0FMTChuciwgc3ltKSBbbnJdID0gc3ltLAogI3VuZGVmIF9BU01fWDg2XzY0X1VOSVNURF9IXwogCi10eXBlZGVmIHZvaWQgKCpzeXNfY2FsbF9wdHJfdCkodm9pZCk7IAordHlwZWRlZiB2b2lkICgqc3lzX2NhbGxfcHRyX3QpKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzeXNfbmlfc3lzY2FsbCh2b2lkKTsKIAogY29uc3Qgc3lzX2NhbGxfcHRyX3Qgc3lzX2NhbGxfdGFibGVbX19OUl9zeXNjYWxsX21heCsxXSA9IHsKLQkvKiBTbWVsbHMgbGlrZSBhIGxpa2UgYSBjb21waWxlciBidWcgLS0gaXQgZG9lc24ndCB3b3JrIHdoZW4gdGhlICYgYmVsb3cgaXMgcmVtb3ZlZC4gKi8gCisJLyoKKwkqU21lbGxzIGxpa2UgYSBsaWtlIGEgY29tcGlsZXIgYnVnIC0tIGl0IGRvZXNuJ3Qgd29yaworCSp3aGVuIHRoZSAmIGJlbG93IGlzIHJlbW92ZWQuCisJKi8KIAlbMCAuLi4gX19OUl9zeXNjYWxsX21heF0gPSAmc3lzX25pX3N5c2NhbGwsCiAjaW5jbHVkZSA8YXNtL3VuaXN0ZF82NC5oPgogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90ZXN0X254LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGVzdF9ueC5jCmluZGV4IDEwYjhhNmYuLjc4N2E1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90ZXN0X254LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Rlc3RfbnguYwpAQCAtMTEsNiArMTEsOCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiXzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiMjM2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfMzIuYwpAQCAtMCwwICsxLDI0MyBAQAorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHRsYl9zdGF0ZSwgY3B1X3RsYnN0YXRlKQorCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkID0geyAmaW5pdF9tbSwgMCwgfTsKKworLyogbXVzdCBjb21lIGFmdGVyIHRoZSBzZW5kX0lQSSBmdW5jdGlvbnMgYWJvdmUgZm9yIGlubGluaW5nICovCisjaW5jbHVkZSA8bWFjaF9pcGkuaD4KKworLyoKKyAqCVNtYXJ0ZXIgU01QIGZsdXNoaW5nIG1hY3Jvcy4KKyAqCQljL28gTGludXMgVG9ydmFsZHMuCisgKgorICoJVGhlc2UgbWVhbiB5b3UgY2FuIHJlYWxseSBkZWZpbml0ZWx5IHV0dGVybHkgZm9yZ2V0IGFib3V0CisgKgl3cml0aW5nIHRvIHVzZXIgc3BhY2UgZnJvbSBpbnRlcnJ1cHRzLiAoSXRzIG5vdCBhbGxvd2VkIGFueXdheSkuCisgKgorICoJT3B0aW1pemF0aW9ucyBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgorICovCisKK3N0YXRpYyBjcHVtYXNrX3QgZmx1c2hfY3B1bWFzazsKK3N0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpmbHVzaF9tbTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOworc3RhdGljIERFRklORV9TUElOTE9DSyh0bGJzdGF0ZV9sb2NrKTsKKworLyoKKyAqIFdlIGNhbm5vdCBjYWxsIG1tZHJvcCgpIGJlY2F1c2Ugd2UgYXJlIGluIGludGVycnVwdCBjb250ZXh0LAorICogaW5zdGVhZCB1cGRhdGUgbW0tPmNwdV92bV9tYXNrLgorICoKKyAqIFdlIG5lZWQgdG8gcmVsb2FkICVjcjMgc2luY2UgdGhlIHBhZ2UgdGFibGVzIG1heSBiZSBnb2luZworICogYXdheSBmcm9tIHVuZGVyIHVzLi4KKyAqLwordm9pZCBsZWF2ZV9tbShpbnQgY3B1KQoreworCWlmIChwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5zdGF0ZSA9PSBUTEJTVEFURV9PSykKKwkJQlVHKCk7CisJY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuYWN0aXZlX21tLT5jcHVfdm1fbWFzayk7CisJbG9hZF9jcjMoc3dhcHBlcl9wZ19kaXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGVhdmVfbW0pOworCisvKgorICoKKyAqIFRoZSBmbHVzaCBJUEkgYXNzdW1lcyB0aGF0IGEgdGhyZWFkIHN3aXRjaCBoYXBwZW5zIGluIHRoaXMgb3JkZXI6CisgKiBbY3B1MDogdGhlIGNwdSB0aGF0IHN3aXRjaGVzXQorICogMSkgc3dpdGNoX21tKCkgZWl0aGVyIDFhKSBvciAxYikKKyAqIDFhKSB0aHJlYWQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IG1tCisgKiAxYTEpIGNwdV9jbGVhcihjcHUsIG9sZF9tbS0+Y3B1X3ZtX21hc2spOworICogCVN0b3AgaXBpIGRlbGl2ZXJ5IGZvciB0aGUgb2xkIG1tLiBUaGlzIGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aAorICogCXRoZSBvdGhlciBjcHVzLCBidXQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IGlnbm9yZSBmbHVzaCBpcGlzCisgKiAJZm9yIHRoZSB3cm9uZyBtbSwgYW5kIGluIHRoZSB3b3JzdCBjYXNlIHdlIHBlcmZvcm0gYSBzdXBlcmZsdW91cworICogCXRsYiBmbHVzaC4KKyAqIDFhMikgc2V0IGNwdV90bGJzdGF0ZSB0byBUTEJTVEFURV9PSworICogCU5vdyB0aGUgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0IHdvbid0IGNhbGwgbGVhdmVfbW0gaWYgY3B1MAorICoJd2FzIGluIGxhenkgdGxiIG1vZGUuCisgKiAxYTMpIHVwZGF0ZSBjcHVfdGxic3RhdGVbXS5hY3RpdmVfbW0KKyAqIAlOb3cgY3B1MCBhY2NlcHRzIHRsYiBmbHVzaGVzIGZvciB0aGUgbmV3IG1tLgorICogMWE0KSBjcHVfc2V0KGNwdSwgbmV3X21tLT5jcHVfdm1fbWFzayk7CisgKiAJTm93IHRoZSBvdGhlciBjcHVzIHdpbGwgc2VuZCB0bGIgZmx1c2ggaXBpcy4KKyAqIDFhNCkgY2hhbmdlIGNyMy4KKyAqIDFiKSB0aHJlYWQgc3dpdGNoIHdpdGhvdXQgbW0gY2hhbmdlCisgKgljcHVfdGxic3RhdGVbXS5hY3RpdmVfbW0gaXMgY29ycmVjdCwgY3B1MCBhbHJlYWR5IGhhbmRsZXMKKyAqCWZsdXNoIGlwaXMuCisgKiAxYjEpIHNldCBjcHVfdGxic3RhdGUgdG8gVExCU1RBVEVfT0sKKyAqIDFiMikgdGVzdF9hbmRfc2V0IHRoZSBjcHUgYml0IGluIGNwdV92bV9tYXNrLgorICogCUF0b21pY2FsbHkgc2V0IHRoZSBiaXQgW290aGVyIGNwdXMgd2lsbCBzdGFydCBzZW5kaW5nIGZsdXNoIGlwaXNdLAorICogCWFuZCB0ZXN0IHRoZSBiaXQuCisgKiAxYjMpIGlmIHRoZSBiaXQgd2FzIDA6IGxlYXZlX21tIHdhcyBjYWxsZWQsIGZsdXNoIHRoZSB0bGIuCisgKiAyKSBzd2l0Y2ggJSVlc3AsIGllIGN1cnJlbnQKKyAqCisgKiBUaGUgaW50ZXJydXB0IG11c3QgaGFuZGxlIDIgc3BlY2lhbCBjYXNlczoKKyAqIC0gY3IzIGlzIGNoYW5nZWQgYmVmb3JlICUlZXNwLCBpZS4gaXQgY2Fubm90IHVzZSBjdXJyZW50LT57YWN0aXZlXyx9bW0uCisgKiAtIHRoZSBjcHUgcGVyZm9ybXMgc3BlY3VsYXRpdmUgdGxiIHJlYWRzLCBpLmUuIGV2ZW4gaWYgdGhlIGNwdSBvbmx5CisgKiAgIHJ1bnMgaW4ga2VybmVsIHNwYWNlLCB0aGUgY3B1IGNvdWxkIGxvYWQgdGxiIGVudHJpZXMgZm9yIHVzZXIgc3BhY2UKKyAqICAgcGFnZXMuCisgKgorICogVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGNwdV90bGJzdGF0ZSBpcyBsb2NhbCB0byBlYWNoIGNwdSwgbm8KKyAqIHdyaXRlL3JlYWQgb3JkZXJpbmcgcHJvYmxlbXMuCisgKi8KKworLyoKKyAqIFRMQiBmbHVzaCBJUEk6CisgKgorICogMSkgRmx1c2ggdGhlIHRsYiBlbnRyaWVzIGlmIHRoZSBjcHUgdXNlcyB0aGUgbW0gdGhhdCdzIGJlaW5nIGZsdXNoZWQuCisgKiAyKSBMZWF2ZSB0aGUgbW0gaWYgd2UgYXJlIGluIHRoZSBsYXp5IHRsYiBtb2RlLgorICovCisKK3ZvaWQgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgY3B1OworCisJY3B1ID0gZ2V0X2NwdSgpOworCisJaWYgKCFjcHVfaXNzZXQoY3B1LCBmbHVzaF9jcHVtYXNrKSkKKwkJZ290byBvdXQ7CisJCS8qCisJCSAqIFRoaXMgd2FzIGEgQlVHKCkgYnV0IHVudGlsIHNvbWVvbmUgY2FuIHF1b3RlIG1lIHRoZQorCQkgKiBsaW5lIGZyb20gdGhlIGludGVsIG1hbnVhbCB0aGF0IGd1YXJhbnRlZXMgYW4gSVBJIHRvCisJCSAqIG11bHRpcGxlIENQVXMgaXMgcmV0cmllZCBfb25seV8gb24gdGhlIGVycm9yaW5nIENQVXMKKwkJICogaXRzIHN0YXlpbmcgYXMgYSByZXR1cm4KKwkJICoKKwkJICogQlVHKCk7CisJCSAqLworCisJaWYgKGZsdXNoX21tID09IHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLmFjdGl2ZV9tbSkgeworCQlpZiAocGVyX2NwdShjcHVfdGxic3RhdGUsIGNwdSkuc3RhdGUgPT0gVExCU1RBVEVfT0spIHsKKwkJCWlmIChmbHVzaF92YSA9PSBUTEJfRkxVU0hfQUxMKQorCQkJCWxvY2FsX2ZsdXNoX3RsYigpOworCQkJZWxzZQorCQkJCV9fZmx1c2hfdGxiX29uZShmbHVzaF92YSk7CisJCX0gZWxzZQorCQkJbGVhdmVfbW0oY3B1KTsKKwl9CisJYWNrX0FQSUNfaXJxKCk7CisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJY3B1X2NsZWFyKGNwdSwgZmx1c2hfY3B1bWFzayk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKK291dDoKKwlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfdGxiX2NvdW50Kys7Cit9CisKK3ZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3QgY3B1bWFza190ICpjcHVtYXNrcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmEpCit7CisJY3B1bWFza190IGNwdW1hc2sgPSAqY3B1bWFza3A7CisKKwkvKgorCSAqIEEgY291cGxlIG9mICh0byBiZSByZW1vdmVkKSBzYW5pdHkgY2hlY2tzOgorCSAqCisJICogLSBjdXJyZW50IENQVSBtdXN0IG5vdCBiZSBpbiBtYXNrCisJICogLSBtYXNrIG11c3QgZXhpc3QgOikKKwkgKi8KKwlCVUdfT04oY3B1c19lbXB0eShjcHVtYXNrKSk7CisJQlVHX09OKGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdW1hc2spKTsKKwlCVUdfT04oIW1tKTsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS8qIElmIGEgQ1BVIHdoaWNoIHdlIHJhbiBvbiBoYXMgZ29uZSBkb3duLCBPSy4gKi8KKwljcHVzX2FuZChjcHVtYXNrLCBjcHVtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkoY3B1bWFzaykpKQorCQlyZXR1cm47CisjZW5kaWYKKworCS8qCisJICogaSdtIG5vdCBoYXBweSBhYm91dCB0aGlzIGdsb2JhbCBzaGFyZWQgc3BpbmxvY2sgaW4gdGhlCisJICogTU0gaG90IHBhdGgsIGJ1dCB3ZSdsbCBzZWUgaG93IGNvbnRlbmRlZCBpdCBpcy4KKwkgKiBBSzogeDg2LTY0IGhhcyBhIGZhc3RlciBtZXRob2QgdGhhdCBjb3VsZCBiZSBwb3J0ZWQuCisJICovCisJc3Bpbl9sb2NrKCZ0bGJzdGF0ZV9sb2NrKTsKKworCWZsdXNoX21tID0gbW07CisJZmx1c2hfdmEgPSB2YTsKKwljcHVzX29yKGZsdXNoX2NwdW1hc2ssIGNwdW1hc2ssIGZsdXNoX2NwdW1hc2spOworCS8qCisJICogV2UgaGF2ZSB0byBzZW5kIHRoZSBJUEkgb25seSB0bworCSAqIENQVXMgYWZmZWN0ZWQuCisJICovCisJc2VuZF9JUElfbWFzayhjcHVtYXNrLCBJTlZBTElEQVRFX1RMQl9WRUNUT1IpOworCisJd2hpbGUgKCFjcHVzX2VtcHR5KGZsdXNoX2NwdW1hc2spKQorCQkvKiBub3RoaW5nLiBsb2NrdXAgZGV0ZWN0aW9uIGRvZXMgbm90IGJlbG9uZyBoZXJlICovCisJCWNwdV9yZWxheCgpOworCisJZmx1c2hfbW0gPSBOVUxMOworCWZsdXNoX3ZhID0gMDsKKwlzcGluX3VubG9jaygmdGxic3RhdGVfbG9jayk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2N1cnJlbnRfdGFzayh2b2lkKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJY3B1bWFza190IGNwdV9tYXNrOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7CisJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOworCisJbG9jYWxfZmx1c2hfdGxiKCk7CisJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKKwkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIFRMQl9GTFVTSF9BTEwpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWNwdW1hc2tfdCBjcHVfbWFzazsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKKworCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKKwkJaWYgKGN1cnJlbnQtPm1tKQorCQkJbG9jYWxfZmx1c2hfdGxiKCk7CisJCWVsc2UKKwkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCisJCWZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBUTEJfRkxVU0hfQUxMKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmEpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCWNwdW1hc2tfdCBjcHVfbWFzazsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKKworCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pIHsKKwkJaWYgKGN1cnJlbnQtPm1tKQorCQkJX19mbHVzaF90bGJfb25lKHZhKTsKKwkJIGVsc2UKKwkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCisJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKKwkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIHZhKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CitFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKKworc3RhdGljIHZvaWQgZG9fZmx1c2hfdGxiX2FsbCh2b2lkICppbmZvKQoreworCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJX19mbHVzaF90bGJfYWxsKCk7CisJaWYgKHBlcl9jcHUoY3B1X3RsYnN0YXRlLCBjcHUpLnN0YXRlID09IFRMQlNUQVRFX0xBWlkpCisJCWxlYXZlX21tKGNwdSk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCW9uX2VhY2hfY3B1KGRvX2ZsdXNoX3RsYl9hbGwsIE5VTEwsIDEsIDEpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiXzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1OGU1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfNjQuYwpAQCAtMCwwICsxLDI3NCBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisKKyNpbmNsdWRlIDxtYWNoX2lwaS5oPgorLyoKKyAqCVNtYXJ0ZXIgU01QIGZsdXNoaW5nIG1hY3Jvcy4KKyAqCQljL28gTGludXMgVG9ydmFsZHMuCisgKgorICoJVGhlc2UgbWVhbiB5b3UgY2FuIHJlYWxseSBkZWZpbml0ZWx5IHV0dGVybHkgZm9yZ2V0IGFib3V0CisgKgl3cml0aW5nIHRvIHVzZXIgc3BhY2UgZnJvbSBpbnRlcnJ1cHRzLiAoSXRzIG5vdCBhbGxvd2VkIGFueXdheSkuCisgKgorICoJT3B0aW1pemF0aW9ucyBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgorICoKKyAqCU1vcmUgc2NhbGFibGUgZmx1c2gsIGZyb20gQW5kaSBLbGVlbgorICoKKyAqCVRvIGF2b2lkIGdsb2JhbCBzdGF0ZSB1c2UgOCBkaWZmZXJlbnQgY2FsbCB2ZWN0b3JzLgorICoJRWFjaCBDUFUgdXNlcyBhIHNwZWNpZmljIHZlY3RvciB0byB0cmlnZ2VyIGZsdXNoZXMgb24gb3RoZXIKKyAqCUNQVXMuIERlcGVuZGluZyBvbiB0aGUgcmVjZWl2ZWQgdmVjdG9yIHRoZSB0YXJnZXQgQ1BVcyBsb29rIGludG8KKyAqCXRoZSByaWdodCBwZXIgY3B1IHZhcmlhYmxlIGZvciB0aGUgZmx1c2ggZGF0YS4KKyAqCisgKglXaXRoIG1vcmUgdGhhbiA4IENQVXMgdGhleSBhcmUgaGFzaGVkIHRvIHRoZSA4IGF2YWlsYWJsZQorICoJdmVjdG9ycy4gVGhlIGxpbWl0ZWQgZ2xvYmFsIHZlY3RvciBzcGFjZSBmb3JjZXMgdXMgdG8gdGhpcyByaWdodCBub3cuCisgKglJbiBmdXR1cmUgd2hlbiBpbnRlcnJ1cHRzIGFyZSBzcGxpdCBpbnRvIHBlciBDUFUgZG9tYWlucyB0aGlzIGNvdWxkIGJlCisgKglmaXhlZCwgYXQgdGhlIGNvc3Qgb2YgdHJpZ2dlcmluZyBtdWx0aXBsZSBJUElzIGluIHNvbWUgY2FzZXMuCisgKi8KKwordW5pb24gc21wX2ZsdXNoX3N0YXRlIHsKKwlzdHJ1Y3QgeworCQljcHVtYXNrX3QgZmx1c2hfY3B1bWFzazsKKwkJc3RydWN0IG1tX3N0cnVjdCAqZmx1c2hfbW07CisJCXVuc2lnbmVkIGxvbmcgZmx1c2hfdmE7CisJCXNwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKKwl9OworCWNoYXIgcGFkW1NNUF9DQUNIRV9CWVRFU107Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworLyogU3RhdGUgaXMgcHV0IGludG8gdGhlIHBlciBDUFUgZGF0YSBzZWN0aW9uLCBidXQgcGFkZGVkCisgICB0byBhIGZ1bGwgY2FjaGUgbGluZSBiZWNhdXNlIG90aGVyIENQVXMgY2FuIGFjY2VzcyBpdCBhbmQgd2UgZG9uJ3QKKyAgIHdhbnQgZmFsc2Ugc2hhcmluZyBpbiB0aGUgcGVyIGNwdSBkYXRhIHNlZ21lbnQuICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5pb24gc21wX2ZsdXNoX3N0YXRlLCBmbHVzaF9zdGF0ZSk7CisKKy8qCisgKiBXZSBjYW5ub3QgY2FsbCBtbWRyb3AoKSBiZWNhdXNlIHdlIGFyZSBpbiBpbnRlcnJ1cHQgY29udGV4dCwKKyAqIGluc3RlYWQgdXBkYXRlIG1tLT5jcHVfdm1fbWFzay4KKyAqLwordm9pZCBsZWF2ZV9tbShpbnQgY3B1KQoreworCWlmIChyZWFkX3BkYShtbXVfc3RhdGUpID09IFRMQlNUQVRFX09LKQorCQlCVUcoKTsKKwljcHVfY2xlYXIoY3B1LCByZWFkX3BkYShhY3RpdmVfbW0pLT5jcHVfdm1fbWFzayk7CisJbG9hZF9jcjMoc3dhcHBlcl9wZ19kaXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGVhdmVfbW0pOworCisvKgorICoKKyAqIFRoZSBmbHVzaCBJUEkgYXNzdW1lcyB0aGF0IGEgdGhyZWFkIHN3aXRjaCBoYXBwZW5zIGluIHRoaXMgb3JkZXI6CisgKiBbY3B1MDogdGhlIGNwdSB0aGF0IHN3aXRjaGVzXQorICogMSkgc3dpdGNoX21tKCkgZWl0aGVyIDFhKSBvciAxYikKKyAqIDFhKSB0aHJlYWQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IG1tCisgKiAxYTEpIGNwdV9jbGVhcihjcHUsIG9sZF9tbS0+Y3B1X3ZtX21hc2spOworICoJU3RvcCBpcGkgZGVsaXZlcnkgZm9yIHRoZSBvbGQgbW0uIFRoaXMgaXMgbm90IHN5bmNocm9uaXplZCB3aXRoCisgKgl0aGUgb3RoZXIgY3B1cywgYnV0IHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCBpZ25vcmUgZmx1c2ggaXBpcworICoJZm9yIHRoZSB3cm9uZyBtbSwgYW5kIGluIHRoZSB3b3JzdCBjYXNlIHdlIHBlcmZvcm0gYSBzdXBlcmZsdW91cworICoJdGxiIGZsdXNoLgorICogMWEyKSBzZXQgY3B1IG1tdV9zdGF0ZSB0byBUTEJTVEFURV9PSworICoJTm93IHRoZSBzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQgd29uJ3QgY2FsbCBsZWF2ZV9tbSBpZiBjcHUwCisgKgl3YXMgaW4gbGF6eSB0bGIgbW9kZS4KKyAqIDFhMykgdXBkYXRlIGNwdSBhY3RpdmVfbW0KKyAqCU5vdyBjcHUwIGFjY2VwdHMgdGxiIGZsdXNoZXMgZm9yIHRoZSBuZXcgbW0uCisgKiAxYTQpIGNwdV9zZXQoY3B1LCBuZXdfbW0tPmNwdV92bV9tYXNrKTsKKyAqCU5vdyB0aGUgb3RoZXIgY3B1cyB3aWxsIHNlbmQgdGxiIGZsdXNoIGlwaXMuCisgKiAxYTQpIGNoYW5nZSBjcjMuCisgKiAxYikgdGhyZWFkIHN3aXRjaCB3aXRob3V0IG1tIGNoYW5nZQorICoJY3B1IGFjdGl2ZV9tbSBpcyBjb3JyZWN0LCBjcHUwIGFscmVhZHkgaGFuZGxlcworICoJZmx1c2ggaXBpcy4KKyAqIDFiMSkgc2V0IGNwdSBtbXVfc3RhdGUgdG8gVExCU1RBVEVfT0sKKyAqIDFiMikgdGVzdF9hbmRfc2V0IHRoZSBjcHUgYml0IGluIGNwdV92bV9tYXNrLgorICoJQXRvbWljYWxseSBzZXQgdGhlIGJpdCBbb3RoZXIgY3B1cyB3aWxsIHN0YXJ0IHNlbmRpbmcgZmx1c2ggaXBpc10sCisgKglhbmQgdGVzdCB0aGUgYml0LgorICogMWIzKSBpZiB0aGUgYml0IHdhcyAwOiBsZWF2ZV9tbSB3YXMgY2FsbGVkLCBmbHVzaCB0aGUgdGxiLgorICogMikgc3dpdGNoICUlZXNwLCBpZSBjdXJyZW50CisgKgorICogVGhlIGludGVycnVwdCBtdXN0IGhhbmRsZSAyIHNwZWNpYWwgY2FzZXM6CisgKiAtIGNyMyBpcyBjaGFuZ2VkIGJlZm9yZSAlJWVzcCwgaWUuIGl0IGNhbm5vdCB1c2UgY3VycmVudC0+e2FjdGl2ZV8sfW1tLgorICogLSB0aGUgY3B1IHBlcmZvcm1zIHNwZWN1bGF0aXZlIHRsYiByZWFkcywgaS5lLiBldmVuIGlmIHRoZSBjcHUgb25seQorICogICBydW5zIGluIGtlcm5lbCBzcGFjZSwgdGhlIGNwdSBjb3VsZCBsb2FkIHRsYiBlbnRyaWVzIGZvciB1c2VyIHNwYWNlCisgKiAgIHBhZ2VzLgorICoKKyAqIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBjcHUgbW11X3N0YXRlIGlzIGxvY2FsIHRvIGVhY2ggY3B1LCBubworICogd3JpdGUvcmVhZCBvcmRlcmluZyBwcm9ibGVtcy4KKyAqLworCisvKgorICogVExCIGZsdXNoIElQSToKKyAqCisgKiAxKSBGbHVzaCB0aGUgdGxiIGVudHJpZXMgaWYgdGhlIGNwdSB1c2VzIHRoZSBtbSB0aGF0J3MgYmVpbmcgZmx1c2hlZC4KKyAqIDIpIExlYXZlIHRoZSBtbSBpZiB3ZSBhcmUgaW4gdGhlIGxhenkgdGxiIG1vZGUuCisgKgorICogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCisgKi8KKworYXNtbGlua2FnZSB2b2lkIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgY3B1OworCWludCBzZW5kZXI7CisJdW5pb24gc21wX2ZsdXNoX3N0YXRlICpmOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCS8qCisJICogb3JpZ19yYXggY29udGFpbnMgdGhlIG5lZ2F0ZWQgaW50ZXJydXB0IHZlY3Rvci4KKwkgKiBVc2UgdGhhdCB0byBkZXRlcm1pbmUgd2hlcmUgdGhlIHNlbmRlciBwdXQgdGhlIGRhdGEuCisJICovCisJc2VuZGVyID0gfnJlZ3MtPm9yaWdfYXggLSBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQ7CisJZiA9ICZwZXJfY3B1KGZsdXNoX3N0YXRlLCBzZW5kZXIpOworCisJaWYgKCFjcHVfaXNzZXQoY3B1LCBmLT5mbHVzaF9jcHVtYXNrKSkKKwkJZ290byBvdXQ7CisJCS8qCisJCSAqIFRoaXMgd2FzIGEgQlVHKCkgYnV0IHVudGlsIHNvbWVvbmUgY2FuIHF1b3RlIG1lIHRoZQorCQkgKiBsaW5lIGZyb20gdGhlIGludGVsIG1hbnVhbCB0aGF0IGd1YXJhbnRlZXMgYW4gSVBJIHRvCisJCSAqIG11bHRpcGxlIENQVXMgaXMgcmV0cmllZCBfb25seV8gb24gdGhlIGVycm9yaW5nIENQVXMKKwkJICogaXRzIHN0YXlpbmcgYXMgYSByZXR1cm4KKwkJICoKKwkJICogQlVHKCk7CisJCSAqLworCisJaWYgKGYtPmZsdXNoX21tID09IHJlYWRfcGRhKGFjdGl2ZV9tbSkpIHsKKwkJaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfT0spIHsKKwkJCWlmIChmLT5mbHVzaF92YSA9PSBUTEJfRkxVU0hfQUxMKQorCQkJCWxvY2FsX2ZsdXNoX3RsYigpOworCQkJZWxzZQorCQkJCV9fZmx1c2hfdGxiX29uZShmLT5mbHVzaF92YSk7CisJCX0gZWxzZQorCQkJbGVhdmVfbW0oY3B1KTsKKwl9CitvdXQ6CisJYWNrX0FQSUNfaXJxKCk7CisJY3B1X2NsZWFyKGNwdSwgZi0+Zmx1c2hfY3B1bWFzayk7CisJYWRkX3BkYShpcnFfdGxiX2NvdW50LCAxKTsKK30KKwordm9pZCBuYXRpdmVfZmx1c2hfdGxiX290aGVycyhjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2twLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSkKK3sKKwlpbnQgc2VuZGVyOworCXVuaW9uIHNtcF9mbHVzaF9zdGF0ZSAqZjsKKwljcHVtYXNrX3QgY3B1bWFzayA9ICpjcHVtYXNrcDsKKworCS8qIENhbGxlciBoYXMgZGlzYWJsZWQgcHJlZW1wdGlvbiAqLworCXNlbmRlciA9IHNtcF9wcm9jZXNzb3JfaWQoKSAlIE5VTV9JTlZBTElEQVRFX1RMQl9WRUNUT1JTOworCWYgPSAmcGVyX2NwdShmbHVzaF9zdGF0ZSwgc2VuZGVyKTsKKworCS8qCisJICogQ291bGQgYXZvaWQgdGhpcyBsb2NrIHdoZW4KKwkgKiBudW1fb25saW5lX2NwdXMoKSA8PSBOVU1fSU5WQUxJREFURV9UTEJfVkVDVE9SUywgYnV0IGl0IGlzCisJICogcHJvYmFibHkgbm90IHdvcnRoIGNoZWNraW5nIHRoaXMgZm9yIGEgY2FjaGUtaG90IGxvY2suCisJICovCisJc3Bpbl9sb2NrKCZmLT50bGJzdGF0ZV9sb2NrKTsKKworCWYtPmZsdXNoX21tID0gbW07CisJZi0+Zmx1c2hfdmEgPSB2YTsKKwljcHVzX29yKGYtPmZsdXNoX2NwdW1hc2ssIGNwdW1hc2ssIGYtPmZsdXNoX2NwdW1hc2spOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIHNlbmQgdGhlIElQSSBvbmx5IHRvCisJICogQ1BVcyBhZmZlY3RlZC4KKwkgKi8KKwlzZW5kX0lQSV9tYXNrKGNwdW1hc2ssIElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCArIHNlbmRlcik7CisKKwl3aGlsZSAoIWNwdXNfZW1wdHkoZi0+Zmx1c2hfY3B1bWFzaykpCisJCWNwdV9yZWxheCgpOworCisJZi0+Zmx1c2hfbW0gPSBOVUxMOworCWYtPmZsdXNoX3ZhID0gMDsKKwlzcGluX3VubG9jaygmZi0+dGxic3RhdGVfbG9jayk7Cit9CisKK2ludCBfX2NwdWluaXQgaW5pdF9zbXBfZmx1c2godm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9wb3NzaWJsZV9tYXApIHsKKwkJc3Bpbl9sb2NrX2luaXQoJnBlcl9jcHUoZmx1c2hfc3RhdGUsIGkpLnRsYnN0YXRlX2xvY2spOworCX0KKwlyZXR1cm4gMDsKK30KK2NvcmVfaW5pdGNhbGwoaW5pdF9zbXBfZmx1c2gpOworCit2b2lkIGZsdXNoX3RsYl9jdXJyZW50X3Rhc2sodm9pZCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCWNwdW1hc2tfdCBjcHVfbWFzazsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCWNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKKworCWxvY2FsX2ZsdXNoX3RsYigpOworCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCisJCWZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBUTEJfRkxVU0hfQUxMKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCit2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwljcHVtYXNrX3QgY3B1X21hc2s7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CisKKwlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7CisJCWlmIChjdXJyZW50LT5tbSkKKwkJCWxvY2FsX2ZsdXNoX3RsYigpOworCQllbHNlCisJCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KKwlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQorCQlmbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgVExCX0ZMVVNIX0FMTCk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCit2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZhKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwljcHVtYXNrX3QgY3B1X21hc2s7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CisKKwlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7CisJCWlmIChjdXJyZW50LT5tbSkKKwkJCV9fZmx1c2hfdGxiX29uZSh2YSk7CisJCWVsc2UKKwkJCWxlYXZlX21tKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQorCisJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKKwkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIHZhKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2ZsdXNoX3RsYl9hbGwodm9pZCAqaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCV9fZmx1c2hfdGxiX2FsbCgpOworCWlmIChyZWFkX3BkYShtbXVfc3RhdGUpID09IFRMQlNUQVRFX0xBWlkpCisJCWxlYXZlX21tKGNwdSk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCW9uX2VhY2hfY3B1KGRvX2ZsdXNoX3RsYl9hbGwsIE5VTEwsIDEsIDEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Rscy5jIGIvYXJjaC94ODYva2VybmVsL3Rscy5jCmluZGV4IDZkZmQ0ZTcuLmFiNmJmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxzLmMKQEAgLTkxLDcgKzkxLDkgQEAKIAogYXNtbGlua2FnZSBpbnQgc3lzX3NldF90aHJlYWRfYXJlYShzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqdV9pbmZvKQogewotCXJldHVybiBkb19zZXRfdGhyZWFkX2FyZWEoY3VycmVudCwgLTEsIHVfaW5mbywgMSk7CisJaW50IHJldCA9IGRvX3NldF90aHJlYWRfYXJlYShjdXJyZW50LCAtMSwgdV9pbmZvLCAxKTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMSwgcmV0LCB1X2luZm8pOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMTM5LDcgKzE0MSw5IEBACiAKIGFzbWxpbmthZ2UgaW50IHN5c19nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHVzZXJfZGVzYyBfX3VzZXIgKnVfaW5mbykKIHsKLQlyZXR1cm4gZG9fZ2V0X3RocmVhZF9hcmVhKGN1cnJlbnQsIC0xLCB1X2luZm8pOworCWludCByZXQgPSBkb19nZXRfdGhyZWFkX2FyZWEoY3VycmVudCwgLTEsIHVfaW5mbyk7CisJYXNtbGlua2FnZV9wcm90ZWN0KDEsIHJldCwgdV9pbmZvKTsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgcmVnc2V0X3Rsc19hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gveDg2L2tlcm5lbC90b3BvbG9neS5jCmluZGV4IGE0MDA1MWIuLjBmY2M5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90b3BvbG9neS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHg4Nl9jcHUsIGNwdV9kZXZpY2VzKTsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotaW50IGFyY2hfcmVnaXN0ZXJfY3B1KGludCBudW0pCitpbnQgX19yZWYgYXJjaF9yZWdpc3Rlcl9jcHUoaW50IG51bSkKIHsKIAkvKgogCSAqIENQVTAgY2Fubm90IGJlIG9mZmxpbmVkIGR1ZSB0byBzZXZlcmFsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJmMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwpAQCAtMCwwICsxLDE4IEBACisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CisKKy8qIHJlYWR5IGZvciB4ODZfNjQsIG5vIGhhcm0gZm9yIHg4Niwgc2luY2UgaXQgd2lsbCBvdmVyd3JpdGUgYWZ0ZXIgYWxsb2MgKi8KK3Vuc2lnbmVkIGNoYXIgKnRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKKworLyoKKyAqIEN1cnJlbnRseSB0cml2aWFsLiBXcml0ZSB0aGUgcmVhbC0+cHJvdGVjdGVkIG1vZGUKKyAqIGJvb3RzdHJhcCBpbnRvIHRoZSBwYWdlIGNvbmNlcm5lZC4gVGhlIGNhbGxlcgorICogaGFzIG1hZGUgc3VyZSBpdCdzIHN1aXRhYmx5IGFsaWduZWQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQoreworCW1lbWNweSh0cmFtcG9saW5lX2Jhc2UsIHRyYW1wb2xpbmVfZGF0YSwKKwkgICAgICAgdHJhbXBvbGluZV9lbmQgLSB0cmFtcG9saW5lX2RhdGEpOworCXJldHVybiB2aXJ0X3RvX3BoeXModHJhbXBvbGluZV9iYXNlKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCmluZGV4IDRhZWRkMGIuLjg5NDI5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwpAQCAtMzAsMTIgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KIAotLyogV2UgY2FuIGZyZWUgdXAgdHJhbXBvbGluZSBhZnRlciBib290dXAgaWYgY3B1IGhvdHBsdWcgaXMgbm90IHN1cHBvcnRlZC4gKi8KLSNpZm5kZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0uc2VjdGlvbiAuaW5pdC5kYXRhLCAiYXciLCBAcHJvZ2JpdHMKLSNlbHNlCiAuc2VjdGlvbiAucm9kYXRhLCAiYSIsIEBwcm9nYml0cwotI2VuZGlmCiAKIC5jb2RlMTYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfMzIuYwppbmRleCBiMjJjMDFlLi40NzFlNjk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtOSwyNiArOSwyOCBAQAogICogJ1RyYXBzLmMnIGhhbmRsZXMgaGFyZHdhcmUgdHJhcHMgYW5kIGZhdWx0cyBhZnRlciB3ZSBoYXZlIHNhdmVkIHNvbWUKICAqIHN0YXRlIGluICdhc20ucycuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgotI2luY2x1ZGUgPGxpbnV4L3Vud2luZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdW53aW5kLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaWZkZWYgQ09ORklHX0VJU0EKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQzLDIxICs0NSwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+Ci0jaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgotI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgIm1hY2hfdHJhcHMuaCIKIApAQCAtNjksNyArNjgsNyBAQAogYXNtbGlua2FnZSBpbnQgc3lzdGVtX2NhbGwodm9pZCk7CiAKIC8qIERvIHdlIGlnbm9yZSBGUFUgaW50ZXJydXB0cyA/ICovCi1jaGFyIGlnbm9yZV9mcHVfaXJxID0gMDsKK2NoYXIgaWdub3JlX2ZwdV9pcnE7CiAKIC8qCiAgKiBUaGUgSURUIGhhcyB0byBiZSBwYWdlLWFsaWduZWQgdG8gc2ltcGxpZnkgdGhlIFBlbnRpdW0KQEAgLTEwNSwxMiArMTA0LDEzIEBACiB2b2lkIHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHJlbGlhYmxlKQogewogI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMCwgc3ltc2l6ZTsKKwljaGFyIG5hbWVidWZbS1NZTV9OQU1FX0xFTl07CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgc3ltc2l6ZTsKIAljb25zdCBjaGFyICpzeW1uYW1lOwotCWNoYXIgKm1vZG5hbWU7Ci0JY2hhciAqZGVsaW0gPSAiOiI7Ci0JY2hhciBuYW1lYnVmWzEyOF07CiAJY2hhciByZWxpYWJbNF0gPSAiIjsKKwljaGFyICpkZWxpbSA9ICI6IjsKKwljaGFyICptb2RuYW1lOwogCiAJc3ltbmFtZSA9IGthbGxzeW1zX2xvb2t1cChhZGRyZXNzLCAmc3ltc2l6ZSwgJm9mZnNldCwKIAkJCQkJJm1vZG5hbWUsIG5hbWVidWYpOwpAQCAtMTM4LDEzICsxMzgsMTQgQEAKIAogLyogVGhlIGZvcm0gb2YgdGhlIHRvcCBvZiB0aGUgZnJhbWUgb24gdGhlIHN0YWNrICovCiBzdHJ1Y3Qgc3RhY2tfZnJhbWUgewotCXN0cnVjdCBzdGFja19mcmFtZSAqbmV4dF9mcmFtZTsKLQl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOworCXN0cnVjdCBzdGFja19mcmFtZQkqbmV4dF9mcmFtZTsKKwl1bnNpZ25lZCBsb25nCQlyZXR1cm5fYWRkcmVzczsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcmludF9jb250ZXh0X3N0YWNrKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCi0JCQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCi0JCQkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3ByaW50X2NvbnRleHRfc3RhY2soc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJICAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAorCQkgICAgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpmcmFtZSA9IChzdHJ1Y3Qgc3RhY2tfZnJhbWUgKilicDsKIApAQCAtMTY2LDcgKzE2Nyw3IEBACiAJcmV0dXJuIGJwOwogfQogCi0jZGVmaW5lIE1TRyhtc2cpIG9wcy0+d2FybmluZyhkYXRhLCBtc2cpCisjZGVmaW5lIE1TRyhtc2cpCQlvcHMtPndhcm5pbmcoZGF0YSwgbXNnKQogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCkBAIC0xNzcsNiArMTc4LDcgQEAKIAogCWlmICghc3RhY2spIHsKIAkJdW5zaWduZWQgbG9uZyBkdW1teTsKKwogCQlzdGFjayA9ICZkdW1teTsKIAkJaWYgKHRhc2sgIT0gY3VycmVudCkKIAkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7CkBAIC0xODYsNyArMTg4LDcgQEAKIAlpZiAoIWJwKSB7CiAJCWlmICh0YXNrID09IGN1cnJlbnQpIHsKIAkJCS8qIEdyYWIgYnAgcmlnaHQgZnJvbSBvdXIgcmVncyAqLwotCQkJYXNtICgibW92bCAlJWVicCwgJTAiIDogIj1yIiAoYnApIDogKTsKKwkJCWFzbSgibW92bCAlJWVicCwgJTAiIDogIj1yIiAoYnApIDopOwogCQl9IGVsc2UgewogCQkJLyogYnAgaXMgdGhlIGxhc3QgcmVnIHB1c2hlZCBieSBzd2l0Y2hfdG8gKi8KIAkJCWJwID0gKih1bnNpZ25lZCBsb25nICopIHRhc2stPnRocmVhZC5zcDsKQEAgLTE5NiwxNSArMTk4LDE4IEBACiAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKmNvbnRleHQ7CisKIAkJY29udGV4dCA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKIAkJCSgodW5zaWduZWQgbG9uZylzdGFjayAmICh+KFRIUkVBRF9TSVpFIC0gMSkpKTsKIAkJYnAgPSBwcmludF9jb250ZXh0X3N0YWNrKGNvbnRleHQsIHN0YWNrLCBicCwgb3BzLCBkYXRhKTsKLQkJLyogU2hvdWxkIGJlIGFmdGVyIHRoZSBsaW5lIGJlbG93LCBidXQgc29tZXdoZXJlCi0JCSAgIGluIGVhcmx5IGJvb3QgY29udGV4dCBjb21lcyBvdXQgY29ycnVwdGVkIGFuZCB3ZQotCQkgICBjYW4ndCByZWZlcmVuY2UgaXQgLUFLICovCisJCS8qCisJCSAqIFNob3VsZCBiZSBhZnRlciB0aGUgbGluZSBiZWxvdywgYnV0IHNvbWV3aGVyZQorCQkgKiBpbiBlYXJseSBib290IGNvbnRleHQgY29tZXMgb3V0IGNvcnJ1cHRlZCBhbmQgd2UKKwkJICogY2FuJ3QgcmVmZXJlbmNlIGl0OgorCQkgKi8KIAkJaWYgKG9wcy0+c3RhY2soZGF0YSwgIklSUSIpIDwgMCkKIAkJCWJyZWFrOwotCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nKiljb250ZXh0LT5wcmV2aW91c19lc3A7CisJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKiljb250ZXh0LT5wcmV2aW91c19lc3A7CiAJCWlmICghc3RhY2spCiAJCQlicmVhazsKIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CkBAIC0yNDMsMTUgKzI0OCwxNSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHByaW50X3RyYWNlX29wcyA9IHsKLQkud2FybmluZyA9IHByaW50X3RyYWNlX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wsCi0JLnN0YWNrID0gcHJpbnRfdHJhY2Vfc3RhY2ssCi0JLmFkZHJlc3MgPSBwcmludF90cmFjZV9hZGRyZXNzLAorCS53YXJuaW5nCQk9IHByaW50X3RyYWNlX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCQk9IHByaW50X3RyYWNlX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjawkJCT0gcHJpbnRfdHJhY2Vfc3RhY2ssCisJLmFkZHJlc3MJCT0gcHJpbnRfdHJhY2VfYWRkcmVzcywKIH07CiAKIHN0YXRpYyB2b2lkCiBzaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpCisJCSAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQogewogCWR1bXBfdHJhY2UodGFzaywgcmVncywgc3RhY2ssIGJwLCAmcHJpbnRfdHJhY2Vfb3BzLCBsb2dfbHZsKTsKIAlwcmludGsoIiVzID09PT09PT09PT09PT09PT09PT09PT09XG4iLCBsb2dfbHZsKTsKQEAgLTI2MywyMSArMjY4LDIyIEBACiAJc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHN0YWNrLCBicCwgIiIpOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3N0YWNrX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQorc3RhdGljIHZvaWQKK3Nob3dfc3RhY2tfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICB1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCkKIHsKIAl1bnNpZ25lZCBsb25nICpzdGFjazsKIAlpbnQgaTsKIAogCWlmIChzcCA9PSBOVUxMKSB7CiAJCWlmICh0YXNrKQotCQkJc3AgPSAodW5zaWduZWQgbG9uZyopdGFzay0+dGhyZWFkLnNwOworCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKIAkJZWxzZQogCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKSZzcDsKIAl9CiAKIAlzdGFjayA9IHNwOwotCWZvcihpID0gMDsgaSA8IGtzdGFja19kZXB0aF90b19wcmludDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGtzdGFja19kZXB0aF90b19wcmludDsgaSsrKSB7CiAJCWlmIChrc3RhY2tfZW5kKHN0YWNrKSkKIAkJCWJyZWFrOwogCQlpZiAoaSAmJiAoKGkgJSA4KSA9PSAwKSkKQEAgLTI4NSw2ICsyOTEsNyBAQAogCQlwcmludGsoIiUwOGx4ICIsICpzdGFjaysrKTsKIAl9CiAJcHJpbnRrKCJcbiVzQ2FsbCBUcmFjZTpcbiIsIGxvZ19sdmwpOworCiAJc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHNwLCBicCwgbG9nX2x2bCk7CiB9CiAKQEAgLTI5OSw4ICszMDYsOCBAQAogICovCiB2b2lkIGR1bXBfc3RhY2sodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YWNrOwogCXVuc2lnbmVkIGxvbmcgYnAgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhY2s7CiAKICNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgogCWlmICghYnApCkBAIC0zMTIsNiArMzE5LDcgQEAKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKIAkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOworCiAJc2hvd190cmFjZShjdXJyZW50LCBOVUxMLCAmc3RhY2ssIGJwKTsKIH0KIApAQCAtMzIzLDYgKzMzMSw3IEBACiAKIAlwcmludF9tb2R1bGVzKCk7CiAJX19zaG93X3JlZ2lzdGVycyhyZWdzLCAwKTsKKwogCXByaW50ayhLRVJOX0VNRVJHICJQcm9jZXNzICUuKnMgKHBpZDogJWQsIHRpPSVwIHRhc2s9JXAgdGFzay50aT0lcCkiLAogCQlUQVNLX0NPTU1fTEVOLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkJY3VycmVudF90aHJlYWRfaW5mbygpLCBjdXJyZW50LCB0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpKTsKQEAgLTMzMSwxMCArMzQwLDEwIEBACiAJICogdGltZSBvZiB0aGUgZmF1bHQuLgogCSAqLwogCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpKSB7Ci0JCXU4ICppcDsKIAkJdW5zaWduZWQgaW50IGNvZGVfcHJvbG9ndWUgPSBjb2RlX2J5dGVzICogNDMgLyA2NDsKIAkJdW5zaWduZWQgaW50IGNvZGVfbGVuID0gY29kZV9ieXRlczsKIAkJdW5zaWduZWQgY2hhciBjOworCQl1OCAqaXA7CiAKIAkJcHJpbnRrKCJcbiIgS0VSTl9FTUVSRyAiU3RhY2s6ICIpOwogCQlzaG93X3N0YWNrX2xvZ19sdmwoTlVMTCwgcmVncywgJnJlZ3MtPnNwLCAwLCBLRVJOX0VNRVJHKTsKQEAgLTM2MSw3ICszNzAsNyBAQAogCQl9CiAJfQogCXByaW50aygiXG4iKTsKLX0JCit9CiAKIGludCBpc192YWxpZF9idWdhZGRyKHVuc2lnbmVkIGxvbmcgaXApCiB7CkBAIC0zNzcsMTAgKzM4NiwxMCBAQAogCiBzdGF0aWMgaW50IGRpZV9jb3VudGVyOwogCi1pbnQgX19rcHJvYmVzIF9fZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnIpCitpbnQgX19rcHJvYmVzIF9fZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQogewotCXVuc2lnbmVkIGxvbmcgc3A7CiAJdW5zaWduZWQgc2hvcnQgc3M7CisJdW5zaWduZWQgbG9uZyBzcDsKIAogCXByaW50ayhLRVJOX0VNRVJHICIlczogJTA0bHggWyMlZF0gIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwogI2lmZGVmIENPTkZJR19QUkVFTVBUCkBAIC0zOTUsOCArNDA0LDggQEAKIAlwcmludGsoIlxuIik7CiAKIAlpZiAobm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsCi0JCQkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpICE9Ci0JCQlOT1RJRllfU1RPUCkgeworCQkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpICE9IE5PVElGWV9TVE9QKSB7CisKIAkJc2hvd19yZWdpc3RlcnMocmVncyk7CiAJCS8qIEV4ZWN1dGl2ZSBzdW1tYXJ5IGluIGNhc2UgdGhlIG9vcHMgc2Nyb2xsZWQgYXdheSAqLwogCQlzcCA9ICh1bnNpZ25lZCBsb25nKSAoJnJlZ3MtPnNwKTsKQEAgLTQwOCwxNyArNDE3LDE4IEBACiAJCXByaW50ayhLRVJOX0VNRVJHICJFSVA6IFs8JTA4bHg+XSAiLCByZWdzLT5pcCk7CiAJCXByaW50X3N5bWJvbCgiJXMiLCByZWdzLT5pcCk7CiAJCXByaW50aygiIFNTOkVTUCAlMDR4OiUwOGx4XG4iLCBzcywgc3ApOworCiAJCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXJldHVybiAxOwogCX0KKworCXJldHVybiAxOwogfQogCiAvKgotICogVGhpcyBpcyBnb25lIHRocm91Z2ggd2hlbiBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCBoYXMgZG9uZSBzb21ldGhpbmcgYmFkIGFuZAotICogaXMgYWJvdXQgdG8gYmUgdGVybWluYXRlZC4KKyAqIFRoaXMgaXMgZ29uZSB0aHJvdWdoIHdoZW4gc29tZXRoaW5nIGluIHRoZSBrZXJuZWwgaGFzIGRvbmUgc29tZXRoaW5nIGJhZAorICogYW5kIGlzIGFib3V0IHRvIGJlIHRlcm1pbmF0ZWQ6CiAgKi8KLXZvaWQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnIpCit2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKIHsKIAlzdGF0aWMgc3RydWN0IHsKIAkJcmF3X3NwaW5sb2NrX3QgbG9jazsKQEAgLTQ0MCw4ICs0NTAsOSBAQAogCQlkaWUubG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJZGllLmxvY2tfb3duZXJfZGVwdGggPSAwOwogCQlidXN0X3NwaW5sb2NrcygxKTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCX0KIAogCWlmICgrK2RpZS5sb2NrX293bmVyX2RlcHRoIDwgMykgewogCQlyZXBvcnRfYnVnKHJlZ3MtPmlwLCByZWdzKTsKQEAgLTQ3NCwxOSArNDg1LDIwIEBACiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycikKK3N0YXRpYyBpbmxpbmUgdm9pZAorZGllX2lmX2tlcm5lbChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKIHsKIAlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkKIAkJZGllKHN0ciwgcmVncywgZXJyKTsKIH0KIAotc3RhdGljIHZvaWQgX19rcHJvYmVzIGRvX3RyYXAoaW50IHRyYXBuciwgaW50IHNpZ25yLCBjaGFyICpzdHIsIGludCB2bTg2LAotCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUsCi0JCQkgICAgICBzaWdpbmZvX3QgKmluZm8pCitzdGF0aWMgdm9pZCBfX2twcm9iZXMKK2RvX3RyYXAoaW50IHRyYXBuciwgaW50IHNpZ25yLCBjaGFyICpzdHIsIGludCB2bTg2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwlsb25nIGVycm9yX2NvZGUsIHNpZ2luZm9fdCAqaW5mbykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQlpZiAocmVncy0+ZmxhZ3MgJiBWTV9NQVNLKSB7CisJaWYgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spIHsKIAkJaWYgKHZtODYpCiAJCQlnb3RvIHZtODZfdHJhcDsKIAkJZ290byB0cmFwX3NpZ25hbDsKQEAgLTQ5NSwxMTEgKzUwNywxMTIgQEAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKIAkJZ290byBrZXJuZWxfdHJhcDsKIAotCXRyYXBfc2lnbmFsOiB7Ci0JCS8qCi0JCSAqIFdlIHdhbnQgZXJyb3JfY29kZSBhbmQgdHJhcF9ubyBzZXQgZm9yIHVzZXJzcGFjZSBmYXVsdHMgYW5kCi0JCSAqIGtlcm5lbHNwYWNlIGZhdWx0cyB3aGljaCByZXN1bHQgaW4gZGllKCksIGJ1dCBub3QKLQkJICoga2VybmVsc3BhY2UgZmF1bHRzIHdoaWNoIGFyZSBmaXhlZCB1cC4gIGRpZSgpIGdpdmVzIHRoZQotCQkgKiBwcm9jZXNzIG5vIGNoYW5jZSB0byBoYW5kbGUgdGhlIHNpZ25hbCBhbmQgbm90aWNlIHRoZQotCQkgKiBrZXJuZWwgZmF1bHQgaW5mb3JtYXRpb24sIHNvIHRoYXQgd29uJ3QgcmVzdWx0IGluIHBvbGx1dGluZwotCQkgKiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXNseSBxdWV1ZWQsIGJ1dCBub3QgeWV0Ci0JCSAqIGRlbGl2ZXJlZCwgZmF1bHRzLiAgU2VlIGFsc28gZG9fZ2VuZXJhbF9wcm90ZWN0aW9uIGJlbG93LgotCQkgKi8KK3RyYXBfc2lnbmFsOgorCS8qCisJICogV2Ugd2FudCBlcnJvcl9jb2RlIGFuZCB0cmFwX25vIHNldCBmb3IgdXNlcnNwYWNlIGZhdWx0cyBhbmQKKwkgKiBrZXJuZWxzcGFjZSBmYXVsdHMgd2hpY2ggcmVzdWx0IGluIGRpZSgpLCBidXQgbm90CisJICoga2VybmVsc3BhY2UgZmF1bHRzIHdoaWNoIGFyZSBmaXhlZCB1cC4gIGRpZSgpIGdpdmVzIHRoZQorCSAqIHByb2Nlc3Mgbm8gY2hhbmNlIHRvIGhhbmRsZSB0aGUgc2lnbmFsIGFuZCBub3RpY2UgdGhlCisJICoga2VybmVsIGZhdWx0IGluZm9ybWF0aW9uLCBzbyB0aGF0IHdvbid0IHJlc3VsdCBpbiBwb2xsdXRpbmcKKwkgKiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXNseSBxdWV1ZWQsIGJ1dCBub3QgeWV0CisJICogZGVsaXZlcmVkLCBmYXVsdHMuICBTZWUgYWxzbyBkb19nZW5lcmFsX3Byb3RlY3Rpb24gYmVsb3cuCisJICovCisJdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJdHNrLT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsKKworCWlmIChpbmZvKQorCQlmb3JjZV9zaWdfaW5mbyhzaWduciwgaW5mbywgdHNrKTsKKwllbHNlCisJCWZvcmNlX3NpZyhzaWduciwgdHNrKTsKKwlyZXR1cm47CisKK2tlcm5lbF90cmFwOgorCWlmICghZml4dXBfZXhjZXB0aW9uKHJlZ3MpKSB7CiAJCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwogCQl0c2stPnRocmVhZC50cmFwX25vID0gdHJhcG5yOwotCi0JCWlmIChpbmZvKQotCQkJZm9yY2Vfc2lnX2luZm8oc2lnbnIsIGluZm8sIHRzayk7Ci0JCWVsc2UKLQkJCWZvcmNlX3NpZyhzaWduciwgdHNrKTsKLQkJcmV0dXJuOworCQlkaWUoc3RyLCByZWdzLCBlcnJvcl9jb2RlKTsKIAl9CisJcmV0dXJuOwogCi0Ja2VybmVsX3RyYXA6IHsKLQkJaWYgKCFmaXh1cF9leGNlcHRpb24ocmVncykpIHsKLQkJCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwotCQkJdHNrLT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsKLQkJCWRpZShzdHIsIHJlZ3MsIGVycm9yX2NvZGUpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQl2bTg2X3RyYXA6IHsKLQkJaW50IHJldCA9IGhhbmRsZV92bTg2X3RyYXAoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopIHJlZ3MsIGVycm9yX2NvZGUsIHRyYXBucik7Ci0JCWlmIChyZXQpIGdvdG8gdHJhcF9zaWduYWw7Ci0JCXJldHVybjsKLQl9Cit2bTg2X3RyYXA6CisJaWYgKGhhbmRsZV92bTg2X3RyYXAoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopIHJlZ3MsCisJCQkJCQllcnJvcl9jb2RlLCB0cmFwbnIpKQorCQlnb3RvIHRyYXBfc2lnbmFsOworCXJldHVybjsKIH0KIAotI2RlZmluZSBET19FUlJPUih0cmFwbnIsIHNpZ25yLCBzdHIsIG5hbWUpIFwKLXZvaWQgZG9fIyNuYW1lKHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnJvcl9jb2RlKSBcCi17IFwKLQlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKSBcCi0JCQkJCQk9PSBOT1RJRllfU1RPUCkgXAotCQlyZXR1cm47IFwKLQlkb190cmFwKHRyYXBuciwgc2lnbnIsIHN0ciwgMCwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7IFwKKyNkZWZpbmUgRE9fRVJST1IodHJhcG5yLCBzaWduciwgc3RyLCBuYW1lKQkJCQlcCit2b2lkIGRvXyMjbmFtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQkJCVwKK3sJCQkJCQkJCQlcCisJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgdHJhcG5yLCBzaWducikJXAorCQkJCQkJPT0gTk9USUZZX1NUT1ApCQlcCisJCXJldHVybjsJCQkJCQkJXAorCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAwLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsJCVwKIH0KIAotI2RlZmluZSBET19FUlJPUl9JTkZPKHRyYXBuciwgc2lnbnIsIHN0ciwgbmFtZSwgc2ljb2RlLCBzaWFkZHIsIGlycSkgXAotdm9pZCBkb18jI25hbWUoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpIFwKLXsgXAotCXNpZ2luZm9fdCBpbmZvOyBcCi0JaWYgKGlycSkgXAotCQlsb2NhbF9pcnFfZW5hYmxlKCk7IFwKLQlpbmZvLnNpX3NpZ25vID0gc2lnbnI7IFwKLQlpbmZvLnNpX2Vycm5vID0gMDsgXAotCWluZm8uc2lfY29kZSA9IHNpY29kZTsgXAotCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKXNpYWRkcjsgXAotCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGVycm9yX2NvZGUsIHRyYXBuciwgc2lnbnIpIFwKLQkJCQkJCT09IE5PVElGWV9TVE9QKSBcCi0JCXJldHVybjsgXAotCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAwLCByZWdzLCBlcnJvcl9jb2RlLCAmaW5mbyk7IFwKKyNkZWZpbmUgRE9fRVJST1JfSU5GTyh0cmFwbnIsIHNpZ25yLCBzdHIsIG5hbWUsIHNpY29kZSwgc2lhZGRyLCBpcnEpCVwKK3ZvaWQgZG9fIyNuYW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCQkJXAorewkJCQkJCQkJCVwKKwlzaWdpbmZvX3QgaW5mbzsJCQkJCQkJXAorCWlmIChpcnEpCQkJCQkJCVwKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwkJCQkJXAorCWluZm8uc2lfc2lnbm8gPSBzaWducjsJCQkJCQlcCisJaW5mby5zaV9lcnJubyA9IDA7CQkJCQkJXAorCWluZm8uc2lfY29kZSA9IHNpY29kZTsJCQkJCQlcCisJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopc2lhZGRyOwkJCQlcCisJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgdHJhcG5yLCBzaWducikJXAorCQkJCQkJPT0gTk9USUZZX1NUT1ApCQlcCisJCXJldHVybjsJCQkJCQkJXAorCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAwLCByZWdzLCBlcnJvcl9jb2RlLCAmaW5mbyk7CVwKIH0KIAotI2RlZmluZSBET19WTTg2X0VSUk9SKHRyYXBuciwgc2lnbnIsIHN0ciwgbmFtZSkgXAotdm9pZCBkb18jI25hbWUoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpIFwKLXsgXAotCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGVycm9yX2NvZGUsIHRyYXBuciwgc2lnbnIpIFwKLQkJCQkJCT09IE5PVElGWV9TVE9QKSBcCi0JCXJldHVybjsgXAotCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAxLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsgXAorI2RlZmluZSBET19WTTg2X0VSUk9SKHRyYXBuciwgc2lnbnIsIHN0ciwgbmFtZSkJCQkJXAordm9pZCBkb18jI25hbWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkJCQlcCit7CQkJCQkJCQkJXAorCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGVycm9yX2NvZGUsIHRyYXBuciwgc2lnbnIpCVwKKwkJCQkJCT09IE5PVElGWV9TVE9QKQkJXAorCQlyZXR1cm47CQkJCQkJCVwKKwlkb190cmFwKHRyYXBuciwgc2lnbnIsIHN0ciwgMSwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7CQlcCiB9CiAKLSNkZWZpbmUgRE9fVk04Nl9FUlJPUl9JTkZPKHRyYXBuciwgc2lnbnIsIHN0ciwgbmFtZSwgc2ljb2RlLCBzaWFkZHIpIFwKLXZvaWQgZG9fIyNuYW1lKHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnJvcl9jb2RlKSBcCi17IFwKLQlzaWdpbmZvX3QgaW5mbzsgXAotCWluZm8uc2lfc2lnbm8gPSBzaWducjsgXAotCWluZm8uc2lfZXJybm8gPSAwOyBcCi0JaW5mby5zaV9jb2RlID0gc2ljb2RlOyBcCi0JaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopc2lhZGRyOyBcCi0JdHJhY2VfaGFyZGlycXNfZml4dXAoKTsgXAotCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCBzdHIsIHJlZ3MsIGVycm9yX2NvZGUsIHRyYXBuciwgc2lnbnIpIFwKLQkJCQkJCT09IE5PVElGWV9TVE9QKSBcCi0JCXJldHVybjsgXAotCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAxLCByZWdzLCBlcnJvcl9jb2RlLCAmaW5mbyk7IFwKKyNkZWZpbmUgRE9fVk04Nl9FUlJPUl9JTkZPKHRyYXBuciwgc2lnbnIsIHN0ciwgbmFtZSwgc2ljb2RlLCBzaWFkZHIpCVwKK3ZvaWQgZG9fIyNuYW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCQkJXAorewkJCQkJCQkJCVwKKwlzaWdpbmZvX3QgaW5mbzsJCQkJCQkJXAorCWluZm8uc2lfc2lnbm8gPSBzaWducjsJCQkJCQlcCisJaW5mby5zaV9lcnJubyA9IDA7CQkJCQkJXAorCWluZm8uc2lfY29kZSA9IHNpY29kZTsJCQkJCQlcCisJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopc2lhZGRyOwkJCQlcCisJdHJhY2VfaGFyZGlycXNfZml4dXAoKTsJCQkJCQlcCisJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgdHJhcG5yLCBzaWducikJXAorCQkJCQkJPT0gTk9USUZZX1NUT1ApCQlcCisJCXJldHVybjsJCQkJCQkJXAorCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAxLCByZWdzLCBlcnJvcl9jb2RlLCAmaW5mbyk7CVwKIH0KIAotRE9fVk04Nl9FUlJPUl9JTkZPKCAwLCBTSUdGUEUsICAiZGl2aWRlIGVycm9yIiwgZGl2aWRlX2Vycm9yLCBGUEVfSU5URElWLCByZWdzLT5pcCkKK0RPX1ZNODZfRVJST1JfSU5GTygwLCBTSUdGUEUsICAiZGl2aWRlIGVycm9yIiwgZGl2aWRlX2Vycm9yLCBGUEVfSU5URElWLCByZWdzLT5pcCkKICNpZm5kZWYgQ09ORklHX0tQUk9CRVMKLURPX1ZNODZfRVJST1IoIDMsIFNJR1RSQVAsICJpbnQzIiwgaW50MykKK0RPX1ZNODZfRVJST1IoMywgU0lHVFJBUCwgImludDMiLCBpbnQzKQogI2VuZGlmCi1ET19WTTg2X0VSUk9SKCA0LCBTSUdTRUdWLCAib3ZlcmZsb3ciLCBvdmVyZmxvdykKLURPX1ZNODZfRVJST1IoIDUsIFNJR1NFR1YsICJib3VuZHMiLCBib3VuZHMpCi1ET19FUlJPUl9JTkZPKCA2LCBTSUdJTEwsICAiaW52YWxpZCBvcGNvZGUiLCBpbnZhbGlkX29wLCBJTExfSUxMT1BOLCByZWdzLT5pcCwgMCkKLURPX0VSUk9SKCA5LCBTSUdGUEUsICAiY29wcm9jZXNzb3Igc2VnbWVudCBvdmVycnVuIiwgY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKQorRE9fVk04Nl9FUlJPUig0LCBTSUdTRUdWLCAib3ZlcmZsb3ciLCBvdmVyZmxvdykKK0RPX1ZNODZfRVJST1IoNSwgU0lHU0VHViwgImJvdW5kcyIsIGJvdW5kcykKK0RPX0VSUk9SX0lORk8oNiwgU0lHSUxMLCAgImludmFsaWQgb3Bjb2RlIiwgaW52YWxpZF9vcCwgSUxMX0lMTE9QTiwgcmVncy0+aXAsIDApCitET19FUlJPUig5LCBTSUdGUEUsICAiY29wcm9jZXNzb3Igc2VnbWVudCBvdmVycnVuIiwgY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKQogRE9fRVJST1IoMTAsIFNJR1NFR1YsICJpbnZhbGlkIFRTUyIsIGludmFsaWRfVFNTKQogRE9fRVJST1IoMTEsIFNJR0JVUywgICJzZWdtZW50IG5vdCBwcmVzZW50Iiwgc2VnbWVudF9ub3RfcHJlc2VudCkKIERPX0VSUk9SKDEyLCBTSUdCVVMsICAic3RhY2sgc2VnbWVudCIsIHN0YWNrX3NlZ21lbnQpCiBET19FUlJPUl9JTkZPKDE3LCBTSUdCVVMsICJhbGlnbm1lbnQgY2hlY2siLCBhbGlnbm1lbnRfY2hlY2ssIEJVU19BRFJBTE4sIDAsIDApCiBET19FUlJPUl9JTkZPKDMyLCBTSUdTRUdWLCAiaXJldCBleGNlcHRpb24iLCBpcmV0X2Vycm9yLCBJTExfQkFEU1RLLCAwLCAxKQogCi12b2lkIF9fa3Byb2JlcyBkb19nZW5lcmFsX3Byb3RlY3Rpb24oc3RydWN0IHB0X3JlZ3MgKiByZWdzLAotCQkJCQkgICAgICBsb25nIGVycm9yX2NvZGUpCit2b2lkIF9fa3Byb2JlcyBkb19nZW5lcmFsX3Byb3RlY3Rpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIHsKLQlpbnQgY3B1ID0gZ2V0X2NwdSgpOwotCXN0cnVjdCB0c3Nfc3RydWN0ICp0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkID0gJmN1cnJlbnQtPnRocmVhZDsKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkOworCXN0cnVjdCB0c3Nfc3RydWN0ICp0c3M7CisJaW50IGNwdTsKKworCWNwdSA9IGdldF9jcHUoKTsKKwl0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKKwl0aHJlYWQgPSAmY3VycmVudC0+dGhyZWFkOwogCiAJLyoKIAkgKiBQZXJmb3JtIHRoZSBsYXp5IFRTUydzIEkvTyBiaXRtYXAgY29weS4gSWYgdGhlIFRTUyBoYXMgYW4KQEAgLTYxNiwxOSArNjI5LDIxIEBACiAJCSAqIElmIHRoZSBwcmV2aW91c2x5IHNldCBtYXAgd2FzIGV4dGVuZGluZyB0byBoaWdoZXIgcG9ydHMKIAkJICogdGhhbiB0aGUgY3VycmVudCBvbmUsIHBhZCBleHRyYSBzcGFjZSB3aXRoIDB4ZmYgKG5vIGFjY2VzcykuCiAJCSAqLwotCQlpZiAodGhyZWFkLT5pb19iaXRtYXBfbWF4IDwgdHNzLT5pb19iaXRtYXBfbWF4KQorCQlpZiAodGhyZWFkLT5pb19iaXRtYXBfbWF4IDwgdHNzLT5pb19iaXRtYXBfbWF4KSB7CiAJCQltZW1zZXQoKGNoYXIgKikgdHNzLT5pb19iaXRtYXAgKwogCQkJCXRocmVhZC0+aW9fYml0bWFwX21heCwgMHhmZiwKIAkJCQl0c3MtPmlvX2JpdG1hcF9tYXggLSB0aHJlYWQtPmlvX2JpdG1hcF9tYXgpOworCQl9CiAJCXRzcy0+aW9fYml0bWFwX21heCA9IHRocmVhZC0+aW9fYml0bWFwX21heDsKIAkJdHNzLT54ODZfdHNzLmlvX2JpdG1hcF9iYXNlID0gSU9fQklUTUFQX09GRlNFVDsKIAkJdHNzLT5pb19iaXRtYXBfb3duZXIgPSB0aHJlYWQ7CiAJCXB1dF9jcHUoKTsKKwogCQlyZXR1cm47CiAJfQogCXB1dF9jcHUoKTsKIAotCWlmIChyZWdzLT5mbGFncyAmIFZNX01BU0spCisJaWYgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spCiAJCWdvdG8gZ3BfaW5fdm04NjsKIAogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQpAQCAtNjM2LDYgKzY1MSw3IEBACiAKIAljdXJyZW50LT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CiAJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8gPSAxMzsKKwogCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHVuaGFuZGxlZF9zaWduYWwoY3VycmVudCwgU0lHU0VHVikgJiYKIAkgICAgcHJpbnRrX3JhdGVsaW1pdCgpKSB7CiAJCXByaW50ayhLRVJOX0lORk8KQEAgLTY2NSwyMiArNjgxLDI1IEBACiAJfQogfQogCi1zdGF0aWMgX19rcHJvYmVzIHZvaWQKLW1lbV9wYXJpdHlfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3N0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCittZW1fcGFyaXR5X2Vycm9yKHVuc2lnbmVkIGNoYXIgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiVWhodWguIE5NSSByZWNlaXZlZCBmb3IgdW5rbm93biByZWFzb24gJTAyeCBvbiAiCi0JCSJDUFUgJWQuXG4iLCByZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIllvdSBoYXZlIHNvbWUgaGFyZHdhcmUgcHJvYmxlbSwgbGlrZWx5IG9uIHRoZSBQQ0kgYnVzLlxuIik7CisJcHJpbnRrKEtFUk5fRU1FUkcKKwkJIlVoaHVoLiBOTUkgcmVjZWl2ZWQgZm9yIHVua25vd24gcmVhc29uICUwMnggb24gQ1BVICVkLlxuIiwKKwkJCXJlYXNvbiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXByaW50ayhLRVJOX0VNRVJHCisJCSJZb3UgaGF2ZSBzb21lIGhhcmR3YXJlIHByb2JsZW0sIGxpa2VseSBvbiB0aGUgUENJIGJ1cy5cbiIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfRURBQykKLQlpZihlZGFjX2hhbmRsZXJfc2V0KCkpIHsKKwlpZiAoZWRhY19oYW5kbGVyX3NldCgpKSB7CiAJCWVkYWNfYXRvbWljX2Fzc2VydF9lcnJvcigpOwogCQlyZXR1cm47CiAJfQogI2VuZGlmCiAKIAlpZiAocGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pKQotICAgICAgICAgICAgICAgIHBhbmljKCJOTUk6IE5vdCBjb250aW51aW5nIik7CisJCXBhbmljKCJOTUk6IE5vdCBjb250aW51aW5nIik7CiAKIAlwcmludGsoS0VSTl9FTUVSRyAiRGF6ZWQgYW5kIGNvbmZ1c2VkLCBidXQgdHJ5aW5nIHRvIGNvbnRpbnVlXG4iKTsKIApAQCAtNjg4LDggKzcwNyw4IEBACiAJY2xlYXJfbWVtX2Vycm9yKHJlYXNvbik7CiB9CiAKLXN0YXRpYyBfX2twcm9iZXMgdm9pZAotaW9fY2hlY2tfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3N0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCitpb19jaGVja19lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCkBAIC02OTksNDQgKzcxOCw1MiBAQAogCS8qIFJlLWVuYWJsZSB0aGUgSU9DSyBsaW5lLCB3YWl0IGZvciBhIGZldyBzZWNvbmRzICovCiAJcmVhc29uID0gKHJlYXNvbiAmIDB4ZikgfCA4OwogCW91dGIocmVhc29uLCAweDYxKTsKKwogCWkgPSAyMDAwOwotCXdoaWxlICgtLWkpIHVkZWxheSgxMDAwKTsKKwl3aGlsZSAoLS1pKQorCQl1ZGVsYXkoMTAwMCk7CisKIAlyZWFzb24gJj0gfjg7CiAJb3V0YihyZWFzb24sIDB4NjEpOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHZvaWQKLXVua25vd25fbm1pX2Vycm9yKHVuc2lnbmVkIGNoYXIgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCitzdGF0aWMgbm90cmFjZSBfX2twcm9iZXMgdm9pZAordW5rbm93bl9ubWlfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCWlmIChub3RpZnlfZGllKERJRV9OTUlVTktOT1dOLCAibm1pIiwgcmVncywgcmVhc29uLCAyLCBTSUdJTlQpID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CiAjaWZkZWYgQ09ORklHX01DQQotCS8qIE1pZ2h0IGFjdHVhbGx5IGJlIGFibGUgdG8gZmlndXJlIG91dCB3aGF0IHRoZSBndWlsdHkgcGFydHkKLQkqIGlzLiAqLwotCWlmKCBNQ0FfYnVzICkgeworCS8qCisJICogTWlnaHQgYWN0dWFsbHkgYmUgYWJsZSB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGd1aWx0eSBwYXJ0eQorCSAqIGlzOgorCSAqLworCWlmIChNQ0FfYnVzKSB7CiAJCW1jYV9oYW5kbGVfbm1pKCk7CiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQlwcmludGsoS0VSTl9FTUVSRyAiVWhodWguIE5NSSByZWNlaXZlZCBmb3IgdW5rbm93biByZWFzb24gJTAyeCBvbiAiCi0JCSJDUFUgJWQuXG4iLCByZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJpbnRrKEtFUk5fRU1FUkcKKwkJIlVoaHVoLiBOTUkgcmVjZWl2ZWQgZm9yIHVua25vd24gcmVhc29uICUwMnggb24gQ1BVICVkLlxuIiwKKwkJCXJlYXNvbiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwogCXByaW50ayhLRVJOX0VNRVJHICJEbyB5b3UgaGF2ZSBhIHN0cmFuZ2UgcG93ZXIgc2F2aW5nIG1vZGUgZW5hYmxlZD9cbiIpOwogCWlmIChwYW5pY19vbl91bnJlY292ZXJlZF9ubWkpCi0gICAgICAgICAgICAgICAgcGFuaWMoIk5NSTogTm90IGNvbnRpbnVpbmciKTsKKwkJcGFuaWMoIk5NSTogTm90IGNvbnRpbnVpbmciKTsKIAogCXByaW50ayhLRVJOX0VNRVJHICJEYXplZCBhbmQgY29uZnVzZWQsIGJ1dCB0cnlpbmcgdG8gY29udGludWVcbiIpOwogfQogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5taV9wcmludF9sb2NrKTsKIAotdm9pZCBfX2twcm9iZXMgZGllX25taShzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKQordm9pZCBub3RyYWNlIF9fa3Byb2JlcyBkaWVfbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpCiB7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX05NSVdBVENIRE9HLCBtc2csIHJlZ3MsIDAsIDIsIFNJR0lOVCkgPT0KLQkgICAgTk9USUZZX1NUT1ApCisJaWYgKG5vdGlmeV9kaWUoRElFX05NSVdBVENIRE9HLCBtc2csIHJlZ3MsIDAsIDIsIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCiAJCXJldHVybjsKIAogCXNwaW5fbG9jaygmbm1pX3ByaW50X2xvY2spOwogCS8qCiAJKiBXZSBhcmUgaW4gdHJvdWJsZSBhbnl3YXksIGxldHMgYXQgbGVhc3QgdHJ5Ci0JKiB0byBnZXQgYSBtZXNzYWdlIG91dC4KKwkqIHRvIGdldCBhIG1lc3NhZ2Ugb3V0OgogCSovCiAJYnVzdF9zcGlubG9ja3MoMSk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIiwgbXNnKTsKQEAgLTc0Nyw5ICs3NzQsMTAgQEAKIAlzcGluX3VubG9jaygmbm1pX3ByaW50X2xvY2spOwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCi0JLyogSWYgd2UgYXJlIGluIGtlcm5lbCB3ZSBhcmUgcHJvYmFibHkgbmVzdGVkIHVwIHByZXR0eSBiYWQKLQkgKiBhbmQgbWlnaHQgYXN3ZWxsIGdldCBvdXQgbm93IHdoaWxlIHdlIHN0aWxsIGNhbi4KLQkqLworCS8qCisJICogSWYgd2UgYXJlIGluIGtlcm5lbCB3ZSBhcmUgcHJvYmFibHkgbmVzdGVkIHVwIHByZXR0eSBiYWQKKwkgKiBhbmQgbWlnaHQgYXN3ZWxsIGdldCBvdXQgbm93IHdoaWxlIHdlIHN0aWxsIGNhbjoKKwkgKi8KIAlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkgewogCQljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IDI7CiAJCWNyYXNoX2tleGVjKHJlZ3MpOwpAQCAtNzU4LDE0ICs3ODYsMTQgQEAKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHZvaWQgZGVmYXVsdF9kb19ubWkoc3RydWN0IHB0X3JlZ3MgKiByZWdzKQorc3RhdGljIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQgZGVmYXVsdF9kb19ubWkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgY2hhciByZWFzb24gPSAwOwogCi0JLyogT25seSB0aGUgQlNQIGdldHMgZXh0ZXJuYWwgTk1JcyBmcm9tIHRoZSBzeXN0ZW0uICAqLworCS8qIE9ubHkgdGhlIEJTUCBnZXRzIGV4dGVybmFsIE5NSXMgZnJvbSB0aGUgc3lzdGVtOiAqLwogCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQlyZWFzb24gPSBnZXRfbm1pX3JlYXNvbigpOwotIAorCiAJaWYgKCEocmVhc29uICYgMHhjMCkpIHsKIAkJaWYgKG5vdGlmeV9kaWUoRElFX05NSV9JUEksICJubWlfaXBpIiwgcmVncywgcmVhc29uLCAyLCBTSUdJTlQpCiAJCQkJCQkJPT0gTk9USUZZX1NUT1ApCkBAIC03NzgsOCArODA2LDEwIEBACiAJCWlmIChubWlfd2F0Y2hkb2dfdGljayhyZWdzLCByZWFzb24pKQogCQkJcmV0dXJuOwogCQlpZiAoIWRvX25taV9jYWxsYmFjayhyZWdzLCBzbXBfcHJvY2Vzc29yX2lkKCkpKQotI2VuZGlmCiAJCQl1bmtub3duX25taV9lcnJvcihyZWFzb24sIHJlZ3MpOworI2Vsc2UKKwkJdW5rbm93bl9ubWlfZXJyb3IocmVhc29uLCByZWdzKTsKKyNlbmRpZgogCiAJCXJldHVybjsKIAl9CkBAIC03OTEsMTQgKzgyMSwxNCBAQAogCQlpb19jaGVja19lcnJvcihyZWFzb24sIHJlZ3MpOwogCS8qCiAJICogUmVhc3NlcnQgTk1JIGluIGNhc2UgaXQgYmVjYW1lIGFjdGl2ZSBtZWFud2hpbGUKLQkgKiBhcyBpdCdzIGVkZ2UtdHJpZ2dlcmVkLgorCSAqIGFzIGl0J3MgZWRnZS10cmlnZ2VyZWQ6CiAJICovCiAJcmVhc3NlcnRfbm1pKCk7CiB9CiAKIHN0YXRpYyBpbnQgaWdub3JlX25taXM7CiAKLV9fa3Byb2JlcyB2b2lkIGRvX25taShzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKK25vdHJhY2UgX19rcHJvYmVzIHZvaWQgZG9fbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CiAJaW50IGNwdTsKIApAQCAtODM0LDkgKzg2NCwxMiBAQAogCWlmIChub3RpZnlfZGllKERJRV9JTlQzLCAiaW50MyIsIHJlZ3MsIGVycm9yX2NvZGUsIDMsIFNJR1RSQVApCiAJCQk9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuOwotCS8qIFRoaXMgaXMgYW4gaW50ZXJydXB0IGdhdGUsIGJlY2F1c2Uga3Byb2JlcyB3YW50cyBpbnRlcnJ1cHRzCi0JZGlzYWJsZWQuICBOb3JtYWwgdHJhcCBoYW5kbGVycyBkb24ndC4gKi8KKwkvKgorCSAqIFRoaXMgaXMgYW4gaW50ZXJydXB0IGdhdGUsIGJlY2F1c2Uga3Byb2JlcyB3YW50cyBpbnRlcnJ1cHRzCisJICogZGlzYWJsZWQuIE5vcm1hbCB0cmFwIGhhbmRsZXJzIGRvbid0LgorCSAqLwogCXJlc3RvcmVfaW50ZXJydXB0cyhyZWdzKTsKKwogCWRvX3RyYXAoMywgU0lHVFJBUCwgImludDMiLCAxLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsKIH0KICNlbmRpZgpAQCAtODUxLDcgKzg4NCw3IEBACiAgKiBmcm9tIHVzZXIgc3BhY2UuIFN1Y2ggY29kZSBtdXN0IG5vdCBob2xkIGtlcm5lbCBsb2NrcyAoc2luY2UgaXQKICAqIGNhbiBlcXVhbGx5IHRha2UgYSBwYWdlIGZhdWx0KSwgdGhlcmVmb3JlIGl0IGlzIHNhZmUgdG8gY2FsbAogICogZm9yY2Vfc2lnX2luZm8gZXZlbiB0aG91Z2ggdGhhdCBjbGFpbXMgYW5kIHJlbGVhc2VzIGxvY2tzLgotICogCisgKgogICogQ29kZSBpbiAuL3NpZ25hbC5jIGVuc3VyZXMgdGhhdCB0aGUgZGVidWcgY29udHJvbCByZWdpc3RlcgogICogaXMgcmVzdG9yZWQgYmVmb3JlIHdlIGRlbGl2ZXIgYW55IHNpZ25hbCwgYW5kIHRoZXJlZm9yZSB0aGF0CiAgKiB1c2VyIGNvZGUgcnVucyB3aXRoIHRoZSBjb3JyZWN0IGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgZXZlbiB0aG91Z2gKQEAgLTg2MywxMCArODk2LDEwIEBACiAgKiBmaW5kIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgdGhlIFRGIGJpdCB0aGF0IGNvdWxkIGJlIHNhdmVkIGF3YXkgZXZlbgogICogYnkgdXNlciBjb2RlKQogICovCi12b2lkIF9fa3Byb2JlcyBkb19kZWJ1ZyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKK3ZvaWQgX19rcHJvYmVzIGRvX2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7Ci0JdW5zaWduZWQgaW50IGNvbmRpdGlvbjsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJdW5zaWduZWQgaW50IGNvbmRpdGlvbjsKIAogCXRyYWNlX2hhcmRpcnFzX2ZpeHVwKCk7CiAKQEAgLTg5MSw3ICs5MjQsNyBAQAogCQkJZ290byBjbGVhcl9kcjc7CiAJfQogCi0JaWYgKHJlZ3MtPmZsYWdzICYgVk1fTUFTSykKKwlpZiAocmVncy0+ZmxhZ3MgJiBYODZfVk1fTUFTSykKIAkJZ290byBkZWJ1Z192bTg2OwogCiAJLyogU2F2ZSBkZWJ1ZyBzdGF0dXMgcmVnaXN0ZXIgd2hlcmUgcHRyYWNlIGNhbiBzZWUgaXQgKi8KQEAgLTkxNCw3ICs5NDcsOCBAQAogCS8qIE9rLCBmaW5hbGx5IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlICovCiAJc2VuZF9zaWd0cmFwKHRzaywgcmVncywgZXJyb3JfY29kZSk7CiAKLQkvKiBEaXNhYmxlIGFkZGl0aW9uYWwgdHJhcHMuIFRoZXknbGwgYmUgcmUtZW5hYmxlZCB3aGVuCisJLyoKKwkgKiBEaXNhYmxlIGFkZGl0aW9uYWwgdHJhcHMuIFRoZXknbGwgYmUgcmUtZW5hYmxlZCB3aGVuCiAJICogdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCiAJICovCiBjbGVhcl9kcjc6CkBAIC05MjcsNyArOTYxLDcgQEAKIAogY2xlYXJfVEZfcmVlbmFibGU6CiAJc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9TSU5HTEVTVEVQKTsKLQlyZWdzLT5mbGFncyAmPSB+VEZfTUFTSzsKKwlyZWdzLT5mbGFncyAmPSB+WDg2X0VGTEFHU19URjsKIAlyZXR1cm47CiB9CiAKQEAgLTkzOCw5ICs5NzIsMTAgQEAKICAqLwogdm9pZCBtYXRoX2Vycm9yKHZvaWQgX191c2VyICppcCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1bnNpZ25lZCBzaG9ydCBjd2Q7CisJdW5zaWduZWQgc2hvcnQgc3dkOwogCXNpZ2luZm9fdCBpbmZvOwotCXVuc2lnbmVkIHNob3J0IGN3ZCwgc3dkOwogCiAJLyoKIAkgKiBTYXZlIHRoZSBpbmZvIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgYW5kIGNsZWFyIHRoZSBlcnJvci4KQEAgLTk2NiwzNiArMTAwMSwzNiBAQAogCWN3ZCA9IGdldF9mcHVfY3dkKHRhc2spOwogCXN3ZCA9IGdldF9mcHVfc3dkKHRhc2spOwogCXN3aXRjaCAoc3dkICYgfmN3ZCAmIDB4M2YpIHsKLQkJY2FzZSAweDAwMDogLyogTm8gdW5tYXNrZWQgZXhjZXB0aW9uICovCi0JCQlyZXR1cm47Ci0JCWRlZmF1bHQ6ICAgIC8qIE11bHRpcGxlIGV4Y2VwdGlvbnMgKi8KLQkJCWJyZWFrOwotCQljYXNlIDB4MDAxOiAvKiBJbnZhbGlkIE9wICovCi0JCQkvKgotCQkJICogc3dkICYgMHgyNDAgPT0gMHgwNDA6IFN0YWNrIFVuZGVyZmxvdwotCQkJICogc3dkICYgMHgyNDAgPT0gMHgyNDA6IFN0YWNrIE92ZXJmbG93Ci0JCQkgKiBVc2VyIG11c3QgY2xlYXIgdGhlIFNGIGJpdCAoMHg0MCkgaWYgc2V0Ci0JCQkgKi8KLQkJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRJTlY7Ci0JCQlicmVhazsKLQkJY2FzZSAweDAwMjogLyogRGVub3JtYWxpemUgKi8KLQkJY2FzZSAweDAxMDogLyogVW5kZXJmbG93ICovCi0JCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUVU5EOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMDQ6IC8qIFplcm8gRGl2aWRlICovCi0JCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxURElWOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMDg6IC8qIE92ZXJmbG93ICovCi0JCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUT1ZGOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMjA6IC8qIFByZWNpc2lvbiAqLwotCQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVFJFUzsKLQkJCWJyZWFrOworCWNhc2UgMHgwMDA6IC8qIE5vIHVubWFza2VkIGV4Y2VwdGlvbiAqLworCQlyZXR1cm47CisJZGVmYXVsdDogICAgLyogTXVsdGlwbGUgZXhjZXB0aW9ucyAqLworCQlicmVhazsKKwljYXNlIDB4MDAxOiAvKiBJbnZhbGlkIE9wICovCisJCS8qCisJCSAqIHN3ZCAmIDB4MjQwID09IDB4MDQwOiBTdGFjayBVbmRlcmZsb3cKKwkJICogc3dkICYgMHgyNDAgPT0gMHgyNDA6IFN0YWNrIE92ZXJmbG93CisJCSAqIFVzZXIgbXVzdCBjbGVhciB0aGUgU0YgYml0ICgweDQwKSBpZiBzZXQKKwkJICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRJTlY7CisJCWJyZWFrOworCWNhc2UgMHgwMDI6IC8qIERlbm9ybWFsaXplICovCisJY2FzZSAweDAxMDogLyogVW5kZXJmbG93ICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRVTkQ7CisJCWJyZWFrOworCWNhc2UgMHgwMDQ6IC8qIFplcm8gRGl2aWRlICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRESVY7CisJCWJyZWFrOworCWNhc2UgMHgwMDg6IC8qIE92ZXJmbG93ICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRPVkY7CisJCWJyZWFrOworCWNhc2UgMHgwMjA6IC8qIFByZWNpc2lvbiAqLworCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUUkVTOworCQlicmVhazsKIAl9CiAJZm9yY2Vfc2lnX2luZm8oU0lHRlBFLCAmaW5mbywgdGFzayk7CiB9CiAKLXZvaWQgZG9fY29wcm9jZXNzb3JfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpCit2b2lkIGRvX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CiAJaWdub3JlX2ZwdV9pcnEgPSAxOwogCW1hdGhfZXJyb3IoKHZvaWQgX191c2VyICopcmVncy0+aXApOwpAQCAtMTAwMyw5ICsxMDM4LDkgQEAKIAogc3RhdGljIHZvaWQgc2ltZF9tYXRoX2Vycm9yKHZvaWQgX191c2VyICppcCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrOwotCXNpZ2luZm9fdCBpbmZvOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAl1bnNpZ25lZCBzaG9ydCBteGNzcjsKKwlzaWdpbmZvX3QgaW5mbzsKIAogCS8qCiAJICogU2F2ZSB0aGUgaW5mbyBmb3IgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGFuZCBjbGVhciB0aGUgZXJyb3IuCkBAIC0xMDI2LDgyICsxMDYxLDgwIEBACiAJICovCiAJbXhjc3IgPSBnZXRfZnB1X214Y3NyKHRhc2spOwogCXN3aXRjaCAofigobXhjc3IgJiAweDFmODApID4+IDcpICYgKG14Y3NyICYgMHgzZikpIHsKLQkJY2FzZSAweDAwMDoKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQljYXNlIDB4MDAxOiAvKiBJbnZhbGlkIE9wICovCi0JCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUSU5WOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMDI6IC8qIERlbm9ybWFsaXplICovCi0JCWNhc2UgMHgwMTA6IC8qIFVuZGVyZmxvdyAqLwotCQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVFVORDsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDA0OiAvKiBaZXJvIERpdmlkZSAqLwotCQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVERJVjsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDA4OiAvKiBPdmVyZmxvdyAqLwotCQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVE9WRjsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDIwOiAvKiBQcmVjaXNpb24gKi8KLQkJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRSRVM7Ci0JCQlicmVhazsKKwljYXNlIDB4MDAwOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCWNhc2UgMHgwMDE6IC8qIEludmFsaWQgT3AgKi8KKwkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVElOVjsKKwkJYnJlYWs7CisJY2FzZSAweDAwMjogLyogRGVub3JtYWxpemUgKi8KKwljYXNlIDB4MDEwOiAvKiBVbmRlcmZsb3cgKi8KKwkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVFVORDsKKwkJYnJlYWs7CisJY2FzZSAweDAwNDogLyogWmVybyBEaXZpZGUgKi8KKwkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVERJVjsKKwkJYnJlYWs7CisJY2FzZSAweDAwODogLyogT3ZlcmZsb3cgKi8KKwkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVE9WRjsKKwkJYnJlYWs7CisJY2FzZSAweDAyMDogLyogUHJlY2lzaW9uICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRSRVM7CisJCWJyZWFrOwogCX0KIAlmb3JjZV9zaWdfaW5mbyhTSUdGUEUsICZpbmZvLCB0YXNrKTsKIH0KIAotdm9pZCBkb19zaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICogcmVncywKLQkJCQkJICBsb25nIGVycm9yX2NvZGUpCit2b2lkIGRvX3NpbWRfY29wcm9jZXNzb3JfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIHsKIAlpZiAoY3B1X2hhc194bW0pIHsKIAkJLyogSGFuZGxlIFNJTUQgRlBVIGV4Y2VwdGlvbnMgb24gUElJSSsgcHJvY2Vzc29ycy4gKi8KIAkJaWdub3JlX2ZwdV9pcnEgPSAxOwogCQlzaW1kX21hdGhfZXJyb3IoKHZvaWQgX191c2VyICopcmVncy0+aXApOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEhhbmRsZSBzdHJhbmdlIGNhY2hlIGZsdXNoIGZyb20gdXNlciBzcGFjZSBleGNlcHRpb24KLQkJICogaW4gYWxsIG90aGVyIGNhc2VzLiAgVGhpcyBpcyB1bmRvY3VtZW50ZWQgYmVoYXZpb3VyLgotCQkgKi8KLQkJaWYgKHJlZ3MtPmZsYWdzICYgVk1fTUFTSykgewotCQkJaGFuZGxlX3ZtODZfZmF1bHQoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopcmVncywKLQkJCQkJICBlcnJvcl9jb2RlKTsKLQkJCXJldHVybjsKLQkJfQotCQljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IDE5OwotCQljdXJyZW50LT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7Ci0JCWRpZV9pZl9rZXJuZWwoImNhY2hlIGZsdXNoIGRlbmllZCIsIHJlZ3MsIGVycm9yX2NvZGUpOwotCQlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJCXJldHVybjsKIAl9CisJLyoKKwkgKiBIYW5kbGUgc3RyYW5nZSBjYWNoZSBmbHVzaCBmcm9tIHVzZXIgc3BhY2UgZXhjZXB0aW9uCisJICogaW4gYWxsIG90aGVyIGNhc2VzLiAgVGhpcyBpcyB1bmRvY3VtZW50ZWQgYmVoYXZpb3VyLgorCSAqLworCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9WTV9NQVNLKSB7CisJCWhhbmRsZV92bTg2X2ZhdWx0KChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqKXJlZ3MsIGVycm9yX2NvZGUpOworCQlyZXR1cm47CisJfQorCWN1cnJlbnQtPnRocmVhZC50cmFwX25vID0gMTk7CisJY3VycmVudC0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworCWRpZV9pZl9rZXJuZWwoImNhY2hlIGZsdXNoIGRlbmllZCIsIHJlZ3MsIGVycm9yX2NvZGUpOworCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKIH0KIAotdm9pZCBkb19zcHVyaW91c19pbnRlcnJ1cHRfYnVnKHN0cnVjdCBwdF9yZWdzICogcmVncywKLQkJCQkJICBsb25nIGVycm9yX2NvZGUpCit2b2lkIGRvX3NwdXJpb3VzX2ludGVycnVwdF9idWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIHsKICNpZiAwCiAJLyogTm8gbmVlZCB0byB3YXJuIGFib3V0IHRoaXMgYW55IGxvbmdlci4gKi8KLQlwcmludGsoIklnbm9yaW5nIFA2IExvY2FsIEFQSUMgU3B1cmlvdXMgSW50ZXJydXB0IEJ1Zy4uLlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiSWdub3JpbmcgUDYgTG9jYWwgQVBJQyBTcHVyaW91cyBJbnRlcnJ1cHQgQnVnLi4uXG4iKTsKICNlbmRpZgogfQogCi11bnNpZ25lZCBsb25nIHBhdGNoX2VzcGZpeF9kZXNjKHVuc2lnbmVkIGxvbmcgdWVzcCwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGtlc3ApCit1bnNpZ25lZCBsb25nIHBhdGNoX2VzcGZpeF9kZXNjKHVuc2lnbmVkIGxvbmcgdWVzcCwgdW5zaWduZWQgbG9uZyBrZXNwKQogewogCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0ID0gX19nZXRfY3B1X3ZhcihnZHRfcGFnZSkuZ2R0OwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IChrZXNwIC0gdWVzcCkgJiAtVEhSRUFEX1NJWkU7CiAJdW5zaWduZWQgbG9uZyBuZXdfa2VzcCA9IGtlc3AgLSBiYXNlOwogCXVuc2lnbmVkIGxvbmcgbGltX3BhZ2VzID0gKG5ld19rZXNwIHwgKFRIUkVBRF9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CiAJX191NjQgZGVzYyA9ICooX191NjQgKikmZ2R0W0dEVF9FTlRSWV9FU1BGSVhfU1NdOworCiAJLyogU2V0IHVwIGJhc2UgZm9yIGVzcGZpeCBzZWdtZW50ICovCi0gCWRlc2MgJj0gMHgwMGYwZmYwMDAwMDAwMDAwVUxMOwotIAlkZXNjIHw9CSgoKChfX3U2NCliYXNlKSA8PCAxNikgJiAweDAwMDAwMGZmZmZmZjAwMDBVTEwpIHwKKwlkZXNjICY9IDB4MDBmMGZmMDAwMDAwMDAwMFVMTDsKKwlkZXNjIHw9CSgoKChfX3U2NCliYXNlKSA8PCAxNikgJiAweDAwMDAwMGZmZmZmZjAwMDBVTEwpIHwKIAkJKCgoKF9fdTY0KWJhc2UpIDw8IDMyKSAmIDB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgfAogCQkoKCgoX191NjQpbGltX3BhZ2VzKSA8PCAzMikgJiAweDAwMGYwMDAwMDAwMDAwMDBVTEwpIHwKIAkJKGxpbV9wYWdlcyAmIDB4ZmZmZik7CiAJKihfX3U2NCAqKSZnZHRbR0RUX0VOVFJZX0VTUEZJWF9TU10gPSBkZXNjOworCiAJcmV0dXJuIG5ld19rZXNwOwogfQogCiAvKgotICogICdtYXRoX3N0YXRlX3Jlc3RvcmUoKScgc2F2ZXMgdGhlIGN1cnJlbnQgbWF0aCBpbmZvcm1hdGlvbiBpbiB0aGUKKyAqICdtYXRoX3N0YXRlX3Jlc3RvcmUoKScgc2F2ZXMgdGhlIGN1cnJlbnQgbWF0aCBpbmZvcm1hdGlvbiBpbiB0aGUKICAqIG9sZCBtYXRoIHN0YXRlIGFycmF5LCBhbmQgZ2V0cyB0aGUgbmV3IG9uZXMgZnJvbSB0aGUgY3VycmVudCB0YXNrCiAgKgogICogQ2FyZWZ1bC4uIFRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIElCTS1kZXNpZ25lZCBJUlExMyBiZWhhdmlvdXIuCkBAIC0xMTE1LDkgKzExNDgsMjIgQEAKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKIAotCWNsdHMoKTsJCS8qIEFsbG93IG1hdGhzIG9wcyAob3Igd2UgcmVjdXJzZSkgKi8KLQlpZiAoIXRza191c2VkX21hdGgodHNrKSkKLQkJaW5pdF9mcHUodHNrKTsKKwlpZiAoIXRza191c2VkX21hdGgodHNrKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCS8qCisJCSAqIGRvZXMgYSBzbGFiIGFsbG9jIHdoaWNoIGNhbiBzbGVlcAorCQkgKi8KKwkJaWYgKGluaXRfZnB1KHRzaykpIHsKKwkJCS8qCisJCQkgKiByYW4gb3V0IG9mIG1lbW9yeSEKKwkJCSAqLworCQkJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKKwkJCXJldHVybjsKKwkJfQorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCX0KKworCWNsdHMoKTsJCQkJLyogQWxsb3cgbWF0aHMgb3BzIChvciB3ZSByZWN1cnNlKSAqLwogCXJlc3RvcmVfZnB1KHRzayk7CiAJdGhyZWFkLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsJLyogU28gd2UgZm5zYXZlIG9uIHN3aXRjaF90bygpICovCiAJdHNrLT5mcHVfY291bnRlcisrOwpAQCAtMTEyOCw4MCArMTE3NCw3NiBAQAogCiBhc21saW5rYWdlIHZvaWQgbWF0aF9lbXVsYXRlKGxvbmcgYXJnKQogewotCXByaW50ayhLRVJOX0VNRVJHICJtYXRoLWVtdWxhdGlvbiBub3QgZW5hYmxlZCBhbmQgbm8gY29wcm9jZXNzb3IgZm91bmQuXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAia2lsbGluZyAlcy5cbiIsY3VycmVudC0+Y29tbSk7Ci0JZm9yY2Vfc2lnKFNJR0ZQRSxjdXJyZW50KTsKKwlwcmludGsoS0VSTl9FTUVSRworCQkibWF0aC1lbXVsYXRpb24gbm90IGVuYWJsZWQgYW5kIG5vIGNvcHJvY2Vzc29yIGZvdW5kLlxuIik7CisJcHJpbnRrKEtFUk5fRU1FUkcgImtpbGxpbmcgJXMuXG4iLCBjdXJyZW50LT5jb21tKTsKKwlmb3JjZV9zaWcoU0lHRlBFLCBjdXJyZW50KTsKIAlzY2hlZHVsZSgpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX01BVEhfRU1VTEFUSU9OICovCiAKLQogdm9pZCBfX2luaXQgdHJhcF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfRUlTQQogCXZvaWQgX19pb21lbSAqcCA9IGVhcmx5X2lvcmVtYXAoMHgwRkZGRDksIDQpOwotCWlmIChyZWFkbChwKSA9PSAnRScrKCdJJzw8OCkrKCdTJzw8MTYpKygnQSc8PDI0KSkgeworCisJaWYgKHJlYWRsKHApID09ICdFJyArICgnSSc8PDgpICsgKCdTJzw8MTYpICsgKCdBJzw8MjQpKQogCQlFSVNBX2J1cyA9IDE7Ci0JfQogCWVhcmx5X2lvdW5tYXAocCwgNCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCWluaXRfYXBpY19tYXBwaW5ncygpOwogI2VuZGlmCi0KLQlzZXRfdHJhcF9nYXRlKDAsJmRpdmlkZV9lcnJvcik7Ci0Jc2V0X2ludHJfZ2F0ZSgxLCZkZWJ1Zyk7Ci0Jc2V0X2ludHJfZ2F0ZSgyLCZubWkpOworCXNldF90cmFwX2dhdGUoMCwgICZkaXZpZGVfZXJyb3IpOworCXNldF9pbnRyX2dhdGUoMSwgICZkZWJ1Zyk7CisJc2V0X2ludHJfZ2F0ZSgyLCAgJm5taSk7CiAJc2V0X3N5c3RlbV9pbnRyX2dhdGUoMywgJmludDMpOyAvKiBpbnQzLzQgY2FuIGJlIGNhbGxlZCBmcm9tIGFsbCAqLwotCXNldF9zeXN0ZW1fZ2F0ZSg0LCZvdmVyZmxvdyk7Ci0Jc2V0X3RyYXBfZ2F0ZSg1LCZib3VuZHMpOwotCXNldF90cmFwX2dhdGUoNiwmaW52YWxpZF9vcCk7Ci0Jc2V0X3RyYXBfZ2F0ZSg3LCZkZXZpY2Vfbm90X2F2YWlsYWJsZSk7Ci0Jc2V0X3Rhc2tfZ2F0ZSg4LEdEVF9FTlRSWV9ET1VCTEVGQVVMVF9UU1MpOwotCXNldF90cmFwX2dhdGUoOSwmY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKTsKLQlzZXRfdHJhcF9nYXRlKDEwLCZpbnZhbGlkX1RTUyk7Ci0Jc2V0X3RyYXBfZ2F0ZSgxMSwmc2VnbWVudF9ub3RfcHJlc2VudCk7Ci0Jc2V0X3RyYXBfZ2F0ZSgxMiwmc3RhY2tfc2VnbWVudCk7Ci0Jc2V0X3RyYXBfZ2F0ZSgxMywmZ2VuZXJhbF9wcm90ZWN0aW9uKTsKLQlzZXRfaW50cl9nYXRlKDE0LCZwYWdlX2ZhdWx0KTsKLQlzZXRfdHJhcF9nYXRlKDE1LCZzcHVyaW91c19pbnRlcnJ1cHRfYnVnKTsKLQlzZXRfdHJhcF9nYXRlKDE2LCZjb3Byb2Nlc3Nvcl9lcnJvcik7Ci0Jc2V0X3RyYXBfZ2F0ZSgxNywmYWxpZ25tZW50X2NoZWNrKTsKKwlzZXRfc3lzdGVtX2dhdGUoNCwgJm92ZXJmbG93KTsKKwlzZXRfdHJhcF9nYXRlKDUsICAmYm91bmRzKTsKKwlzZXRfdHJhcF9nYXRlKDYsICAmaW52YWxpZF9vcCk7CisJc2V0X3RyYXBfZ2F0ZSg3LCAgJmRldmljZV9ub3RfYXZhaWxhYmxlKTsKKwlzZXRfdGFza19nYXRlKDgsICBHRFRfRU5UUllfRE9VQkxFRkFVTFRfVFNTKTsKKwlzZXRfdHJhcF9nYXRlKDksICAmY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKTsKKwlzZXRfdHJhcF9nYXRlKDEwLCAmaW52YWxpZF9UU1MpOworCXNldF90cmFwX2dhdGUoMTEsICZzZWdtZW50X25vdF9wcmVzZW50KTsKKwlzZXRfdHJhcF9nYXRlKDEyLCAmc3RhY2tfc2VnbWVudCk7CisJc2V0X3RyYXBfZ2F0ZSgxMywgJmdlbmVyYWxfcHJvdGVjdGlvbik7CisJc2V0X2ludHJfZ2F0ZSgxNCwgJnBhZ2VfZmF1bHQpOworCXNldF90cmFwX2dhdGUoMTUsICZzcHVyaW91c19pbnRlcnJ1cHRfYnVnKTsKKwlzZXRfdHJhcF9nYXRlKDE2LCAmY29wcm9jZXNzb3JfZXJyb3IpOworCXNldF90cmFwX2dhdGUoMTcsICZhbGlnbm1lbnRfY2hlY2spOwogI2lmZGVmIENPTkZJR19YODZfTUNFCi0Jc2V0X3RyYXBfZ2F0ZSgxOCwmbWFjaGluZV9jaGVjayk7CisJc2V0X3RyYXBfZ2F0ZSgxOCwgJm1hY2hpbmVfY2hlY2spOwogI2VuZGlmCi0Jc2V0X3RyYXBfZ2F0ZSgxOSwmc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcik7CisJc2V0X3RyYXBfZ2F0ZSgxOSwgJnNpbWRfY29wcm9jZXNzb3JfZXJyb3IpOwogCi0JLyoKLQkgKiBWZXJpZnkgdGhhdCB0aGUgRlhTQVZFL0ZYUlNUT1IgZGF0YSB3aWxsIGJlIDE2LWJ5dGUgYWxpZ25lZC4KLQkgKiBHZW5lcmF0ZSBhIGJ1aWxkLXRpbWUgZXJyb3IgaWYgdGhlIGFsaWdubWVudCBpcyB3cm9uZy4KLQkgKi8KLQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuaTM4Ny5meHNhdmUpICYgMTUpOwogCWlmIChjcHVfaGFzX2Z4c3IpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgZmFzdCBGUFUgc2F2ZSBhbmQgcmVzdG9yZS4uLiAiKTsKIAkJc2V0X2luX2NyNChYODZfQ1I0X09TRlhTUik7CiAJCXByaW50aygiZG9uZS5cbiIpOwogCX0KIAlpZiAoY3B1X2hhc194bW0pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgdW5tYXNrZWQgU0lNRCBGUFUgZXhjZXB0aW9uICIKLQkJCQkic3VwcG9ydC4uLiAiKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVuYWJsaW5nIHVubWFza2VkIFNJTUQgRlBVIGV4Y2VwdGlvbiBzdXBwb3J0Li4uICIpOwogCQlzZXRfaW5fY3I0KFg4Nl9DUjRfT1NYTU1FWENQVCk7CiAJCXByaW50aygiZG9uZS5cbiIpOwogCX0KIAotCXNldF9zeXN0ZW1fZ2F0ZShTWVNDQUxMX1ZFQ1RPUiwmc3lzdGVtX2NhbGwpOworCXNldF9zeXN0ZW1fZ2F0ZShTWVNDQUxMX1ZFQ1RPUiwgJnN5c3RlbV9jYWxsKTsKIAotCS8qIFJlc2VydmUgYWxsIHRoZSBidWlsdGluIGFuZCB0aGUgc3lzY2FsbCB2ZWN0b3IuICovCisJLyogUmVzZXJ2ZSBhbGwgdGhlIGJ1aWx0aW4gYW5kIHRoZSBzeXNjYWxsIHZlY3RvcjogKi8KIAlmb3IgKGkgPSAwOyBpIDwgRklSU1RfRVhURVJOQUxfVkVDVE9SOyBpKyspCiAJCXNldF9iaXQoaSwgdXNlZF92ZWN0b3JzKTsKKwogCXNldF9iaXQoU1lTQ0FMTF9WRUNUT1IsIHVzZWRfdmVjdG9ycyk7CiAKKwlpbml0X3RocmVhZF94c3RhdGUoKTsKIAkvKgotCSAqIFNob3VsZCBiZSBhIGJhcnJpZXIgZm9yIGFueSBleHRlcm5hbCBDUFUgc3RhdGUuCisJICogU2hvdWxkIGJlIGEgYmFycmllciBmb3IgYW55IGV4dGVybmFsIENQVSBzdGF0ZToKIAkgKi8KIAljcHVfaW5pdCgpOwogCkBAIC0xMjExLDYgKzEyNTMsNyBAQAogc3RhdGljIGludCBfX2luaXQga3N0YWNrX3NldHVwKGNoYXIgKnMpCiB7CiAJa3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMCk7CisKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImtzdGFjaz0iLCBrc3RhY2tfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfNjQuYwppbmRleCAwNDU0NjY2Li5hZGZmNzZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfNjQuYwpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KIAorI2luY2x1ZGUgPG1hY2hfdHJhcHMuaD4KKwogI2lmIGRlZmluZWQoQ09ORklHX0VEQUMpCiAjaW5jbHVkZSA8bGludXgvZWRhYy5oPgogI2VuZGlmCkBAIC01OTgsMTAgKzYwMCwxNiBAQAogCW9vcHNfZW5kKGZsYWdzLCByZWdzLCBTSUdTRUdWKTsKIH0KIAotdm9pZCBfX2twcm9iZXMgZGllX25taShjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZG9fcGFuaWMpCitub3RyYWNlIF9fa3Byb2JlcyB2b2lkCitkaWVfbm1pKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBkb19wYW5pYykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gb29wc19iZWdpbigpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobm90aWZ5X2RpZShESUVfTk1JV0FUQ0hET0csIHN0ciwgcmVncywgMCwgMiwgU0lHSU5UKSA9PQorCSAgICBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJZmxhZ3MgPSBvb3BzX2JlZ2luKCk7CiAJLyoKIAkgKiBXZSBhcmUgaW4gdHJvdWJsZSBhbnl3YXksIGxldHMgYXQgbGVhc3QgdHJ5CiAJICogdG8gZ2V0IGEgbWVzc2FnZSBvdXQuCkBAIC03NjUsNyArNzczLDcgQEAKIAlkaWUoImdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCIsIHJlZ3MsIGVycm9yX2NvZGUpOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHZvaWQKK3N0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCiBtZW1fcGFyaXR5X2Vycm9yKHVuc2lnbmVkIGNoYXIgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlVoaHVoLiBOTUkgcmVjZWl2ZWQgZm9yIHVua25vd24gcmVhc29uICUwMnguXG4iLApAQCAtNzg5LDcgKzc5Nyw3IEBACiAJb3V0YihyZWFzb24sIDB4NjEpOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHZvaWQKK3N0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCiBpb19jaGVja19lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewogCXByaW50aygiTk1JOiBJT0NLIGVycm9yIChkZWJ1ZyBpbnRlcnJ1cHQ/KVxuIik7CkBAIC04MDMsOSArODExLDExIEBACiAJb3V0YihyZWFzb24sIDB4NjEpOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHZvaWQKK3N0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCiB1bmtub3duX25taV9lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogeworCWlmIChub3RpZnlfZGllKERJRV9OTUlVTktOT1dOLCAibm1pIiwgcmVncywgcmVhc29uLCAyLCBTSUdJTlQpID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlVoaHVoLiBOTUkgcmVjZWl2ZWQgZm9yIHVua25vd24gcmVhc29uICUwMnguXG4iLAogCQlyZWFzb24pOwogCXByaW50ayhLRVJOX0VNRVJHICJEbyB5b3UgaGF2ZSBhIHN0cmFuZ2UgcG93ZXIgc2F2aW5nIG1vZGUgZW5hYmxlZD9cbiIpOwpAQCAtODE4LDcgKzgyOCw3IEBACiAKIC8qIFJ1bnMgb24gSVNUIHN0YWNrLiBUaGlzIGNvZGUgbXVzdCBrZWVwIGludGVycnVwdHMgb2ZmIGFsbCB0aGUgdGltZS4KICAgIE5lc3RlZCBOTUlzIGFyZSBwcmV2ZW50ZWQgYnkgdGhlIENQVS4gKi8KLWFzbWxpbmthZ2UgX19rcHJvYmVzIHZvaWQgZGVmYXVsdF9kb19ubWkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIG5vdHJhY2UgIF9fa3Byb2JlcyB2b2lkIGRlZmF1bHRfZG9fbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGNoYXIgcmVhc29uID0gMDsKIAlpbnQgY3B1OwpAQCAtMTExNCwxMSArMTEyNCwyNCBAQAogYXNtbGlua2FnZSB2b2lkIG1hdGhfc3RhdGVfcmVzdG9yZSh2b2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50OwotCWNsdHMoKTsJCQkvKiBBbGxvdyBtYXRocyBvcHMgKG9yIHdlIHJlY3Vyc2UpICovCiAKLQlpZiAoIXVzZWRfbWF0aCgpKQotCQlpbml0X2ZwdShtZSk7Ci0JcmVzdG9yZV9mcHVfY2hlY2tpbmcoJm1lLT50aHJlYWQuaTM4Ny5meHNhdmUpOworCWlmICghdXNlZF9tYXRoKCkpIHsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQkvKgorCQkgKiBkb2VzIGEgc2xhYiBhbGxvYyB3aGljaCBjYW4gc2xlZXAKKwkJICovCisJCWlmIChpbml0X2ZwdShtZSkpIHsKKwkJCS8qCisJCQkgKiByYW4gb3V0IG9mIG1lbW9yeSEKKwkJCSAqLworCQkJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKKwkJCXJldHVybjsKKwkJfQorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCX0KKworCWNsdHMoKTsJCQkvKiBBbGxvdyBtYXRocyBvcHMgKG9yIHdlIHJlY3Vyc2UpICovCisJcmVzdG9yZV9mcHVfY2hlY2tpbmcoJm1lLT50aHJlYWQueHN0YXRlLT5meHNhdmUpOwogCXRhc2tfdGhyZWFkX2luZm8obWUpLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKIAltZS0+ZnB1X2NvdW50ZXIrKzsKIH0KQEAgLTExNTQsNiArMTE3NywxMCBAQAogI2VuZGlmCiAgICAgICAgCiAJLyoKKwkgKiBpbml0aWFsaXplIHRoZSBwZXIgdGhyZWFkIGV4dGVuZGVkIHN0YXRlOgorCSAqLworICAgICAgICBpbml0X3RocmVhZF94c3RhdGUoKTsKKwkvKgogCSAqIFNob3VsZCBiZSBhIGJhcnJpZXIgZm9yIGFueSBleHRlcm5hbCBDUFUgc3RhdGUuCiAJICovCiAJY3B1X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC90c2NfMzIuYwppbmRleCA0MzUxN2UzLi5lNDc5MDcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzY18zMi5jCkBAIC0yOCw3ICsyOCw4IEBACiBzdGF0aWMgaW50IF9faW5pdCB0c2Nfc2V0dXAoY2hhciAqc3RyKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIm5vdHNjOiBLZXJuZWwgY29tcGlsZWQgd2l0aCBDT05GSUdfWDg2X1RTQywgIgotCQkJCSJjYW5ub3QgZGlzYWJsZSBUU0MuXG4iKTsKKwkJCQkiY2Fubm90IGRpc2FibGUgVFNDIGNvbXBsZXRlbHkuXG4iKTsKKwltYXJrX3RzY191bnN0YWJsZSgidXNlciBkaXNhYmxlZCBUU0MiKTsKIAlyZXR1cm4gMTsKIH0KICNlbHNlCkBAIC04Myw4ICs4NCw4IEBACiAKIHN0YXRpYyB2b2lkIHNldF9jeWMybnNfc2NhbGUodW5zaWduZWQgbG9uZyBjcHVfa2h6LCBpbnQgY3B1KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHByZXZfc2NhbGUsICpzY2FsZTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdHNjX25vdywgbnNfbm93OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsICpzY2FsZTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlzY2hlZF9jbG9ja19pZGxlX3NsZWVwX2V2ZW50KCk7CkBAIC05NCw3ICs5NSw2IEBACiAJcmR0c2NsbCh0c2Nfbm93KTsKIAluc19ub3cgPSBfX2N5Y2xlc18yX25zKHRzY19ub3cpOwogCi0JcHJldl9zY2FsZSA9ICpzY2FsZTsKIAlpZiAoY3B1X2toeikKIAkJKnNjYWxlID0gKE5TRUNfUEVSX01TRUMgPDwgQ1lDMk5TX1NDQUxFX0ZBQ1RPUikvY3B1X2toejsKIApAQCAtMjIxLDkgKzIyMSw5IEBACiAgKiBpZiB0aGUgQ1BVIGZyZXF1ZW5jeSBpcyBzY2FsZWQsIFRTQy1iYXNlZCBkZWxheXMgd2lsbCBuZWVkIGEgZGlmZmVyZW50CiAgKiBsb29wc19wZXJfamlmZnkgdmFsdWUgdG8gZnVuY3Rpb24gcHJvcGVybHkuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmX2ZyZXEgPSAwOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5X3JlZiA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfa2h6X3JlZiA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZl9mcmVxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5X3JlZjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9raHpfcmVmOwogCiBzdGF0aWMgaW50CiB0aW1lX2NwdWZyZXFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCkBAIC0yNTUsOSArMjU1LDcgQEAKIAkJCQkJCXJlZl9mcmVxLCBmcmVxLT5uZXcpOwogCQkJaWYgKCEoZnJlcS0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkgewogCQkJCXRzY19raHogPSBjcHVfa2h6OwotCQkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQkJCXNldF9jeWMybnNfc2NhbGUoY3B1X2toeiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJCQlwcmVlbXB0X2VuYWJsZSgpOworCQkJCXNldF9jeWMybnNfc2NhbGUoY3B1X2toeiwgZnJlcS0+Y3B1KTsKIAkJCQkvKgogCQkJCSAqIFRTQyBiYXNlZCBzY2hlZF9jbG9jayB0dXJucwogCQkJCSAqIHRvIGp1bmsgdy8gY3B1ZnJlcQpAQCAtMjg1LDE1ICsyODMsMjggQEAKIAogLyogY2xvY2sgc291cmNlIGNvZGUgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VycmVudF90c2Nfa2h6ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdHNjX2toejsKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfdHNjOwogCisvKgorICogV2UgY29tcGFyZSB0aGUgVFNDIHRvIHRoZSBjeWNsZV9sYXN0IHZhbHVlIGluIHRoZSBjbG9ja3NvdXJjZQorICogc3RydWN0dXJlIHRvIGF2b2lkIGEgbmFzdHkgdGltZS13YXJwIGlzc3VlLiBUaGlzIGNhbiBiZSBvYnNlcnZlZCBpbgorICogYSB2ZXJ5IHNtYWxsIHdpbmRvdyByaWdodCBhZnRlciBvbmUgQ1BVIHVwZGF0ZWQgY3ljbGVfbGFzdCB1bmRlcgorICogeHRpbWUgbG9jayBhbmQgdGhlIG90aGVyIENQVSByZWFkcyBhIFRTQyB2YWx1ZSB3aGljaCBpcyBzbWFsbGVyCisgKiB0aGFuIHRoZSBjeWNsZV9sYXN0IHJlZmVyZW5jZSB2YWx1ZSBkdWUgdG8gYSBUU0Mgd2hpY2ggaXMgc2xpZ2h0eQorICogYmVoaW5kLiBUaGlzIGRlbHRhIGlzIG5vd2hlcmUgZWxzZSBvYnNlcnZhYmxlLCBidXQgaW4gdGhhdCBjYXNlIGl0CisgKiByZXN1bHRzIGluIGEgZm9yd2FyZCB0aW1lIGp1bXAgaW4gdGhlIHJhbmdlIG9mIGhvdXJzIGR1ZSB0byB0aGUKKyAqIHVuc2lnbmVkIGRlbHRhIGNhbGN1bGF0aW9uIG9mIHRoZSB0aW1lIGtlZXBpbmcgY29yZSBjb2RlLCB3aGljaCBpcworICogbmVjZXNzYXJ5IHRvIHN1cHBvcnQgd3JhcHBpbmcgY2xvY2tzb3VyY2VzIGxpa2UgcG0gdGltZXIuCisgKi8KIHN0YXRpYyBjeWNsZV90IHJlYWRfdHNjKHZvaWQpCiB7CiAJY3ljbGVfdCByZXQ7CiAKIAlyZHRzY2xsKHJldCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiByZXQgPj0gY2xvY2tzb3VyY2VfdHNjLmN5Y2xlX2xhc3QgPworCQlyZXQgOiBjbG9ja3NvdXJjZV90c2MuY3ljbGVfbGFzdDsKIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV90c2MgPSB7CkBAIC0zOTMsMTMgKzQwNCwxNSBAQAogCWludCBjcHU7CiAKIAlpZiAoIWNwdV9oYXNfdHNjKQotCQlnb3RvIG91dF9ub190c2M7CisJCXJldHVybjsKIAogCWNwdV9raHogPSBjYWxjdWxhdGVfY3B1X2toeigpOwogCXRzY19raHogPSBjcHVfa2h6OwogCi0JaWYgKCFjcHVfa2h6KQotCQlnb3RvIG91dF9ub190c2M7CisJaWYgKCFjcHVfa2h6KSB7CisJCW1hcmtfdHNjX3Vuc3RhYmxlKCJjb3VsZCBub3QgY2FsY3VsYXRlIFRTQyBraHoiKTsKKwkJcmV0dXJuOworCX0KIAogCXByaW50aygiRGV0ZWN0ZWQgJWx1LiUwM2x1IE1IeiBwcm9jZXNzb3IuXG4iLAogCQkJCSh1bnNpZ25lZCBsb25nKWNwdV9raHogLyAxMDAwLApAQCAtNDMyLDkgKzQ0NSw0IEBACiAJCXRzY19lbmFibGVkID0gMTsKIAogCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV90c2MpOwotCi0JcmV0dXJuOwotCi1vdXRfbm9fdHNjOgotCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC90c2NfNjQuYwppbmRleCA5NDc1NTRkLi5mY2MxNmU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzY182NC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vdGltZXguaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vdmd0b2QuaD4KIAogc3RhdGljIGludCBub3RzYyBfX2luaXRkYXRhID0gMDsKIApAQCAtNDQsOCArNDUsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXRfY3ljMm5zX3NjYWxlKHVuc2lnbmVkIGxvbmcgY3B1X2toeiwgaW50IGNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBwcmV2X3NjYWxlLCAqc2NhbGU7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRzY19ub3csIG5zX25vdzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCAqc2NhbGU7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJc2NoZWRfY2xvY2tfaWRsZV9zbGVlcF9ldmVudCgpOwpAQCAtNTUsNyArNTYsNiBAQAogCXJkdHNjbGwodHNjX25vdyk7CiAJbnNfbm93ID0gX19jeWNsZXNfMl9ucyh0c2Nfbm93KTsKIAotCXByZXZfc2NhbGUgPSAqc2NhbGU7CiAJaWYgKGNwdV9raHopCiAJCSpzY2FsZSA9IChOU0VDX1BFUl9NU0VDIDw8IENZQzJOU19TQ0FMRV9GQUNUT1IpL2NwdV9raHo7CiAKQEAgLTE0OCw5ICsxNDgsNyBAQAogCQkJbWFya190c2NfdW5zdGFibGUoImNwdWZyZXEgY2hhbmdlcyIpOwogCX0KIAotCXByZWVtcHRfZGlzYWJsZSgpOwotCXNldF9jeWMybnNfc2NhbGUodHNjX2toel9yZWYsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlzZXRfY3ljMm5zX3NjYWxlKHRzY19raHpfcmVmLCBmcmVxLT5jcHUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTAsMTggKzI4OCwzNCBAQAogCiBfX3NldHVwKCJub3RzYyIsIG5vdHNjX3NldHVwKTsKIAorc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV90c2M7CiAKLS8qIGNsb2NrIHNvdXJjZSBjb2RlOiAqLworLyoKKyAqIFdlIGNvbXBhcmUgdGhlIFRTQyB0byB0aGUgY3ljbGVfbGFzdCB2YWx1ZSBpbiB0aGUgY2xvY2tzb3VyY2UKKyAqIHN0cnVjdHVyZSB0byBhdm9pZCBhIG5hc3R5IHRpbWUtd2FycC4gVGhpcyBjYW4gYmUgb2JzZXJ2ZWQgaW4gYQorICogdmVyeSBzbWFsbCB3aW5kb3cgcmlnaHQgYWZ0ZXIgb25lIENQVSB1cGRhdGVkIGN5Y2xlX2xhc3QgdW5kZXIKKyAqIHh0aW1lL3ZzeXNjYWxsX2d0b2QgbG9jayBhbmQgdGhlIG90aGVyIENQVSByZWFkcyBhIFRTQyB2YWx1ZSB3aGljaAorICogaXMgc21hbGxlciB0aGFuIHRoZSBjeWNsZV9sYXN0IHJlZmVyZW5jZSB2YWx1ZSBkdWUgdG8gYSBUU0Mgd2hpY2gKKyAqIGlzIHNsaWdodHkgYmVoaW5kLiBUaGlzIGRlbHRhIGlzIG5vd2hlcmUgZWxzZSBvYnNlcnZhYmxlLCBidXQgaW4KKyAqIHRoYXQgY2FzZSBpdCByZXN1bHRzIGluIGEgZm9yd2FyZCB0aW1lIGp1bXAgaW4gdGhlIHJhbmdlIG9mIGhvdXJzCisgKiBkdWUgdG8gdGhlIHVuc2lnbmVkIGRlbHRhIGNhbGN1bGF0aW9uIG9mIHRoZSB0aW1lIGtlZXBpbmcgY29yZQorICogY29kZSwgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgd3JhcHBpbmcgY2xvY2tzb3VyY2VzIGxpa2UgcG0KKyAqIHRpbWVyLgorICovCiBzdGF0aWMgY3ljbGVfdCByZWFkX3RzYyh2b2lkKQogewogCWN5Y2xlX3QgcmV0ID0gKGN5Y2xlX3QpZ2V0X2N5Y2xlcygpOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0ID49IGNsb2Nrc291cmNlX3RzYy5jeWNsZV9sYXN0ID8KKwkJcmV0IDogY2xvY2tzb3VyY2VfdHNjLmN5Y2xlX2xhc3Q7CiB9CiAKIHN0YXRpYyBjeWNsZV90IF9fdnN5c2NhbGxfZm4gdnJlYWRfdHNjKHZvaWQpCiB7CiAJY3ljbGVfdCByZXQgPSAoY3ljbGVfdCl2Z2V0X2N5Y2xlcygpOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0ID49IF9fdnN5c2NhbGxfZ3RvZF9kYXRhLmNsb2NrLmN5Y2xlX2xhc3QgPworCQlyZXQgOiBfX3ZzeXNjYWxsX2d0b2RfZGF0YS5jbG9jay5jeWNsZV9sYXN0OwogfQogCiBzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3RzYyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bTg2XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm04Nl8zMi5jCmluZGV4IDczOGMyMTAuLjM4ZjU2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bTg2XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtODZfMzIuYwpAQCAtNjQsNyArNjQsNyBAQAogCiAKICNkZWZpbmUgS1ZNODYJKChzdHJ1Y3Qga2VybmVsX3ZtODZfc3RydWN0ICopcmVncykKLSNkZWZpbmUgVk1QSSAJS1ZNODYtPnZtODZwbHVzCisjZGVmaW5lIFZNUEkJS1ZNODYtPnZtODZwbHVzCiAKIAogLyoKQEAgLTgxLDcgKzgxLDcgQEAKICNkZWZpbmUgVkZMQUdTCSgqKHVuc2lnbmVkIHNob3J0ICopJihjdXJyZW50LT50aHJlYWQudjg2ZmxhZ3MpKQogI2RlZmluZSBWRUZMQUdTCShjdXJyZW50LT50aHJlYWQudjg2ZmxhZ3MpCiAKLSNkZWZpbmUgc2V0X2ZsYWdzKFgsbmV3LG1hc2spIFwKKyNkZWZpbmUgc2V0X2ZsYWdzKFgsIG5ldywgbWFzaykgXAogKChYKSA9ICgoWCkgJiB+KG1hc2spKSB8ICgobmV3KSAmIChtYXNrKSkpCiAKICNkZWZpbmUgU0FGRV9NQVNLCSgweERENSkKQEAgLTkzLDggKzkzLDEwIEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQkvKiBrZXJuZWxfdm04Nl9yZWdzIGlzIG1pc3NpbmcgZ3MsIHNvIGNvcHkgZXZlcnl0aGluZyB1cCB0bwotCSAgIChidXQgbm90IGluY2x1ZGluZykgb3JpZ19lYXgsIGFuZCB0aGVuIHJlc3QgaW5jbHVkaW5nIG9yaWdfZWF4LiAqLworCS8qCisJICoga2VybmVsX3ZtODZfcmVncyBpcyBtaXNzaW5nIGdzLCBzbyBjb3B5IGV2ZXJ5dGhpbmcgdXAgdG8KKwkgKiAoYnV0IG5vdCBpbmNsdWRpbmcpIG9yaWdfZWF4LCBhbmQgdGhlbiByZXN0IGluY2x1ZGluZyBvcmlnX2VheC4KKwkgKi8KIAlyZXQgKz0gY29weV90b191c2VyKHVzZXIsIHJlZ3MsIG9mZnNldG9mKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzLCBwdC5vcmlnX2F4KSk7CiAJcmV0ICs9IGNvcHlfdG9fdXNlcigmdXNlci0+b3JpZ19lYXgsICZyZWdzLT5wdC5vcmlnX2F4LAogCQkJICAgIHNpemVvZihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncykgLQpAQCAtMTIwLDcgKzEyMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IHB0X3JlZ3MgKiBzYXZlX3Y4Nl9zdGF0ZShzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqIHJlZ3MpCitzdHJ1Y3QgcHRfcmVncyAqc2F2ZV92ODZfc3RhdGUoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRzc19zdHJ1Y3QgKnRzczsKIAlzdHJ1Y3QgcHRfcmVncyAqcmV0OwpAQCAtMTM3LDkgKzEzOSw5IEBACiAJCXByaW50aygibm8gdm04Nl9pbmZvOiBCQURcbiIpOwogCQlkb19leGl0KFNJR1NFR1YpOwogCX0KLQlzZXRfZmxhZ3MocmVncy0+cHQuZmxhZ3MsIFZFRkxBR1MsIFZJRl9NQVNLIHwgY3VycmVudC0+dGhyZWFkLnY4Nm1hc2spOwotCXRtcCA9IGNvcHlfdm04Nl9yZWdzX3RvX3VzZXIoJmN1cnJlbnQtPnRocmVhZC52bTg2X2luZm8tPnJlZ3MscmVncyk7Ci0JdG1wICs9IHB1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5zY3JlZW5fYml0bWFwLCZjdXJyZW50LT50aHJlYWQudm04Nl9pbmZvLT5zY3JlZW5fYml0bWFwKTsKKwlzZXRfZmxhZ3MocmVncy0+cHQuZmxhZ3MsIFZFRkxBR1MsIFg4Nl9FRkxBR1NfVklGIHwgY3VycmVudC0+dGhyZWFkLnY4Nm1hc2spOworCXRtcCA9IGNvcHlfdm04Nl9yZWdzX3RvX3VzZXIoJmN1cnJlbnQtPnRocmVhZC52bTg2X2luZm8tPnJlZ3MsIHJlZ3MpOworCXRtcCArPSBwdXRfdXNlcihjdXJyZW50LT50aHJlYWQuc2NyZWVuX2JpdG1hcCwgJmN1cnJlbnQtPnRocmVhZC52bTg2X2luZm8tPnNjcmVlbl9iaXRtYXApOwogCWlmICh0bXApIHsKIAkJcHJpbnRrKCJ2bTg2OiBjb3VsZCBub3QgYWNjZXNzIHVzZXJzcGFjZSB2bTg2X2luZm9cbiIpOwogCQlkb19leGl0KFNJR1NFR1YpOwpAQCAtMjM3LDIwICsyMzksMjEgQEAKIAogCXRzayA9IGN1cnJlbnQ7CiAJc3dpdGNoIChyZWdzLmJ4KSB7Ci0JCWNhc2UgVk04Nl9SRVFVRVNUX0lSUToKLQkJY2FzZSBWTTg2X0ZSRUVfSVJROgotCQljYXNlIFZNODZfR0VUX0lSUV9CSVRTOgotCQljYXNlIFZNODZfR0VUX0FORF9SRVNFVF9JUlE6Ci0JCQlyZXQgPSBkb192bTg2X2lycV9oYW5kbGluZyhyZWdzLmJ4LCAoaW50KXJlZ3MuY3gpOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0s6Ci0JCQkvKiBOT1RFOiBvbiBvbGQgdm04NiBzdHVmZiB0aGlzIHdpbGwgcmV0dXJuIHRoZSBlcnJvcgotCQkJICAgZnJvbSBhY2Nlc3Nfb2soKSwgYmVjYXVzZSB0aGUgc3ViZnVuY3Rpb24gaXMKLQkJCSAgIGludGVycHJldGVkIGFzIChpbnZhbGlkKSBhZGRyZXNzIHRvIHZtODZfc3RydWN0LgotCQkJICAgU28gdGhlIGluc3RhbGxhdGlvbiBjaGVjayB3b3Jrcy4KLQkJCSAqLwotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OworCWNhc2UgVk04Nl9SRVFVRVNUX0lSUToKKwljYXNlIFZNODZfRlJFRV9JUlE6CisJY2FzZSBWTTg2X0dFVF9JUlFfQklUUzoKKwljYXNlIFZNODZfR0VUX0FORF9SRVNFVF9JUlE6CisJCXJldCA9IGRvX3ZtODZfaXJxX2hhbmRsaW5nKHJlZ3MuYngsIChpbnQpcmVncy5jeCk7CisJCWdvdG8gb3V0OworCWNhc2UgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0s6CisJCS8qCisJCSAqIE5PVEU6IG9uIG9sZCB2bTg2IHN0dWZmIHRoaXMgd2lsbCByZXR1cm4gdGhlIGVycm9yCisJCSAqICBmcm9tIGFjY2Vzc19vaygpLCBiZWNhdXNlIHRoZSBzdWJmdW5jdGlvbiBpcworCQkgKiAgaW50ZXJwcmV0ZWQgYXMgKGludmFsaWQpIGFkZHJlc3MgdG8gdm04Nl9zdHJ1Y3QuCisJCSAqICBTbyB0aGUgaW5zdGFsbGF0aW9uIGNoZWNrIHdvcmtzLgorCQkgKi8KKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogd2UgY29tZSBoZXJlIG9ubHkgZm9yIGZ1bmN0aW9ucyBWTTg2X0VOVEVSLCBWTTg2X0VOVEVSX05PX0JZUEFTUyAqLwpAQCAtMjk2LDIxICsyOTksMjEgQEAKIAlWRUZMQUdTID0gaW5mby0+cmVncy5wdC5mbGFnczsKIAlpbmZvLT5yZWdzLnB0LmZsYWdzICY9IFNBRkVfTUFTSzsKIAlpbmZvLT5yZWdzLnB0LmZsYWdzIHw9IGluZm8tPnJlZ3MzMi0+ZmxhZ3MgJiB+U0FGRV9NQVNLOwotCWluZm8tPnJlZ3MucHQuZmxhZ3MgfD0gVk1fTUFTSzsKKwlpbmZvLT5yZWdzLnB0LmZsYWdzIHw9IFg4Nl9WTV9NQVNLOwogCiAJc3dpdGNoIChpbmZvLT5jcHVfdHlwZSkgewotCQljYXNlIENQVV8yODY6Ci0JCQl0c2stPnRocmVhZC52ODZtYXNrID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIENQVV8zODY6Ci0JCQl0c2stPnRocmVhZC52ODZtYXNrID0gTlRfTUFTSyB8IElPUExfTUFTSzsKLQkJCWJyZWFrOwotCQljYXNlIENQVV80ODY6Ci0JCQl0c2stPnRocmVhZC52ODZtYXNrID0gQUNfTUFTSyB8IE5UX01BU0sgfCBJT1BMX01BU0s7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXRzay0+dGhyZWFkLnY4Nm1hc2sgPSBJRF9NQVNLIHwgQUNfTUFTSyB8IE5UX01BU0sgfCBJT1BMX01BU0s7Ci0JCQlicmVhazsKKwljYXNlIENQVV8yODY6CisJCXRzay0+dGhyZWFkLnY4Nm1hc2sgPSAwOworCQlicmVhazsKKwljYXNlIENQVV8zODY6CisJCXRzay0+dGhyZWFkLnY4Nm1hc2sgPSBYODZfRUZMQUdTX05UIHwgWDg2X0VGTEFHU19JT1BMOworCQlicmVhazsKKwljYXNlIENQVV80ODY6CisJCXRzay0+dGhyZWFkLnY4Nm1hc2sgPSBYODZfRUZMQUdTX0FDIHwgWDg2X0VGTEFHU19OVCB8IFg4Nl9FRkxBR1NfSU9QTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdHNrLT50aHJlYWQudjg2bWFzayA9IFg4Nl9FRkxBR1NfSUQgfCBYODZfRUZMQUdTX0FDIHwgWDg2X0VGTEFHU19OVCB8IFg4Nl9FRkxBR1NfSU9QTDsKKwkJYnJlYWs7CiAJfQogCiAvKgpAQCAtMzQ2LDkgKzM0OSw5IEBACiAJLyogd2UgbmV2ZXIgcmV0dXJuIGhlcmUgKi8KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJldHVybl90b18zMmJpdChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqIHJlZ3MxNiwgaW50IHJldHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXR1cm5fdG9fMzJiaXQoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKnJlZ3MxNiwgaW50IHJldHZhbCkKIHsKLQlzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MzMjsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczMyOwogCiAJcmVnczMyID0gc2F2ZV92ODZfc3RhdGUocmVnczE2KTsKIAlyZWdzMzItPmF4ID0gcmV0dmFsOwpAQCAtMzU4LDI5ICszNjEsMzAgQEAKIAkJOiA6ICJyIiAocmVnczMyKSwgInIiIChjdXJyZW50X3RocmVhZF9pbmZvKCkpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9JRihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqIHJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X0lGKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICpyZWdzKQogewotCVZFRkxBR1MgfD0gVklGX01BU0s7Ci0JaWYgKFZFRkxBR1MgJiBWSVBfTUFTSykKKwlWRUZMQUdTIHw9IFg4Nl9FRkxBR1NfVklGOworCWlmIChWRUZMQUdTICYgWDg2X0VGTEFHU19WSVApCiAJCXJldHVybl90b18zMmJpdChyZWdzLCBWTTg2X1NUSSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9JRihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqIHJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfSUYoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKnJlZ3MpCiB7Ci0JVkVGTEFHUyAmPSB+VklGX01BU0s7CisJVkVGTEFHUyAmPSB+WDg2X0VGTEFHU19WSUY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9URihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqIHJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfVEYoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKnJlZ3MpCiB7Ci0JcmVncy0+cHQuZmxhZ3MgJj0gflRGX01BU0s7CisJcmVncy0+cHQuZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9BQyhzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqIHJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfQUMoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKnJlZ3MpCiB7Ci0JcmVncy0+cHQuZmxhZ3MgJj0gfkFDX01BU0s7CisJcmVncy0+cHQuZmxhZ3MgJj0gflg4Nl9FRkxBR1NfQUM7CiB9CiAKLS8qIEl0IGlzIGNvcnJlY3QgdG8gY2FsbCBzZXRfSUYocmVncykgZnJvbSB0aGUgc2V0X3ZmbGFnc18qCisvKgorICogSXQgaXMgY29ycmVjdCB0byBjYWxsIHNldF9JRihyZWdzKSBmcm9tIHRoZSBzZXRfdmZsYWdzXyoKICAqIGZ1bmN0aW9ucy4gSG93ZXZlciBzb21lb25lIGZvcmdvdCB0byBjYWxsIGNsZWFyX0lGKHJlZ3MpCiAgKiBpbiB0aGUgb3Bwb3NpdGUgY2FzZS4KICAqIEFmdGVyIHRoZSBjb21tYW5kIHNlcXVlbmNlIENMSSBQVVNIRiBTVEkgUE9QRiB5b3Ugc2hvdWxkCkBAIC0zOTEsNDEgKzM5NSw0MSBAQAogICogW0tEXQogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdmZsYWdzX2xvbmcodW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiByZWdzKQorc3RhdGljIGlubGluZSB2b2lkIHNldF92ZmxhZ3NfbG9uZyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqcmVncykKIHsKIAlzZXRfZmxhZ3MoVkVGTEFHUywgZmxhZ3MsIGN1cnJlbnQtPnRocmVhZC52ODZtYXNrKTsKIAlzZXRfZmxhZ3MocmVncy0+cHQuZmxhZ3MsIGZsYWdzLCBTQUZFX01BU0spOwotCWlmIChmbGFncyAmIElGX01BU0spCisJaWYgKGZsYWdzICYgWDg2X0VGTEFHU19JRikKIAkJc2V0X0lGKHJlZ3MpOwogCWVsc2UKIAkJY2xlYXJfSUYocmVncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdmZsYWdzX3Nob3J0KHVuc2lnbmVkIHNob3J0IGZsYWdzLCBzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqIHJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3ZmbGFnc19zaG9ydCh1bnNpZ25lZCBzaG9ydCBmbGFncywgc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKnJlZ3MpCiB7CiAJc2V0X2ZsYWdzKFZGTEFHUywgZmxhZ3MsIGN1cnJlbnQtPnRocmVhZC52ODZtYXNrKTsKIAlzZXRfZmxhZ3MocmVncy0+cHQuZmxhZ3MsIGZsYWdzLCBTQUZFX01BU0spOwotCWlmIChmbGFncyAmIElGX01BU0spCisJaWYgKGZsYWdzICYgWDg2X0VGTEFHU19JRikKIAkJc2V0X0lGKHJlZ3MpOwogCWVsc2UKIAkJY2xlYXJfSUYocmVncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdmZsYWdzKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICogcmVncykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdmZsYWdzKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSByZWdzLT5wdC5mbGFncyAmIFJFVFVSTl9NQVNLOwogCi0JaWYgKFZFRkxBR1MgJiBWSUZfTUFTSykKLQkJZmxhZ3MgfD0gSUZfTUFTSzsKLQlmbGFncyB8PSBJT1BMX01BU0s7CisJaWYgKFZFRkxBR1MgJiBYODZfRUZMQUdTX1ZJRikKKwkJZmxhZ3MgfD0gWDg2X0VGTEFHU19JRjsKKwlmbGFncyB8PSBYODZfRUZMQUdTX0lPUEw7CiAJcmV0dXJuIGZsYWdzIHwgKFZFRkxBR1MgJiBjdXJyZW50LT50aHJlYWQudjg2bWFzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3JldmVjdG9yZWQoaW50IG5yLCBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgKiBiaXRtYXApCitzdGF0aWMgaW5saW5lIGludCBpc19yZXZlY3RvcmVkKGludCBuciwgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0ICpiaXRtYXApCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgogCQk6Ij1yIiAobnIpCi0JCToibSIgKCpiaXRtYXApLCJyIiAobnIpKTsKKwkJOiJtIiAoKmJpdG1hcCksICJyIiAobnIpKTsKIAlyZXR1cm4gbnI7CiB9CiAKQEAgLTQzNyw3ICs0NDEsNyBAQAogCQlwdHItLTsgXAogCQlpZiAocHV0X3VzZXIoX192YWwsIGJhc2UgKyBwdHIpIDwgMCkgXAogCQkJZ290byBlcnJfbGFiZWw7IFwKLQl9IHdoaWxlKDApCisJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBwdXNodyhiYXNlLCBwdHIsIHZhbCwgZXJyX2xhYmVsKSBcCiAJZG8geyBcCkBAIC00NDgsNyArNDUyLDcgQEAKIAkJcHRyLS07IFwKIAkJaWYgKHB1dF91c2VyKHZhbF9ieXRlKF9fdmFsLCAwKSwgYmFzZSArIHB0cikgPCAwKSBcCiAJCQlnb3RvIGVycl9sYWJlbDsgXAotCX0gd2hpbGUoMCkKKwl9IHdoaWxlICgwKQogCiAjZGVmaW5lIHB1c2hsKGJhc2UsIHB0ciwgdmFsLCBlcnJfbGFiZWwpIFwKIAlkbyB7IFwKQEAgLTQ2NSw3ICs0NjksNyBAQAogCQlwdHItLTsgXAogCQlpZiAocHV0X3VzZXIodmFsX2J5dGUoX192YWwsIDApLCBiYXNlICsgcHRyKSA8IDApIFwKIAkJCWdvdG8gZXJyX2xhYmVsOyBcCi0JfSB3aGlsZSgwKQorCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgcG9wYihiYXNlLCBwdHIsIGVycl9sYWJlbCkgXAogCSh7IFwKQEAgLTUxMiw3ICs1MTYsNyBAQAogICogaW4gdXNlcnNwYWNlIGlzIGFsd2F5cyBiZXR0ZXIgdGhhbiBhbiBPb3BzIGFueXdheS4pIFtLRF0KICAqLwogc3RhdGljIHZvaWQgZG9faW50KHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICpyZWdzLCBpbnQgaSwKLSAgICB1bnNpZ25lZCBjaGFyIF9fdXNlciAqIHNzcCwgdW5zaWduZWQgc2hvcnQgc3ApCisgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNzcCwgdW5zaWduZWQgc2hvcnQgc3ApCiB7CiAJdW5zaWduZWQgbG9uZyBfX3VzZXIgKmludHJfcHRyOwogCXVuc2lnbmVkIGxvbmcgc2Vnb2ZmczsKQEAgLTUyMSw3ICs1MjUsNyBAQAogCQlnb3RvIGNhbm5vdF9oYW5kbGU7CiAJaWYgKGlzX3JldmVjdG9yZWQoaSwgJktWTTg2LT5pbnRfcmV2ZWN0b3JlZCkpCiAJCWdvdG8gY2Fubm90X2hhbmRsZTsKLQlpZiAoaT09MHgyMSAmJiBpc19yZXZlY3RvcmVkKEFIKHJlZ3MpLCZLVk04Ni0+aW50MjFfcmV2ZWN0b3JlZCkpCisJaWYgKGkgPT0gMHgyMSAmJiBpc19yZXZlY3RvcmVkKEFIKHJlZ3MpLCAmS1ZNODYtPmludDIxX3JldmVjdG9yZWQpKQogCQlnb3RvIGNhbm5vdF9oYW5kbGU7CiAJaW50cl9wdHIgPSAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgKGkgPDwgMik7CiAJaWYgKGdldF91c2VyKHNlZ29mZnMsIGludHJfcHRyKSkKQEAgLTU0MywzMCArNTQ3LDIzIEBACiAJcmV0dXJuX3RvXzMyYml0KHJlZ3MsIFZNODZfSU5UeCArIChpIDw8IDgpKTsKIH0KIAotaW50IGhhbmRsZV92bTg2X3RyYXAoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUsIGludCB0cmFwbm8pCitpbnQgaGFuZGxlX3ZtODZfdHJhcChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlLCBpbnQgdHJhcG5vKQogewogCWlmIChWTVBJLmlzX3ZtODZwdXMpIHsKLQkJaWYgKCAodHJhcG5vPT0zKSB8fCAodHJhcG5vPT0xKSApCisJCWlmICgodHJhcG5vID09IDMpIHx8ICh0cmFwbm8gPT0gMSkpCiAJCQlyZXR1cm5fdG9fMzJiaXQocmVncywgVk04Nl9UUkFQICsgKHRyYXBubyA8PCA4KSk7CiAJCWRvX2ludChyZWdzLCB0cmFwbm8sICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSAocmVncy0+cHQuc3MgPDwgNCksIFNQKHJlZ3MpKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICh0cmFwbm8gIT0xKQorCWlmICh0cmFwbm8gIT0gMSkKIAkJcmV0dXJuIDE7IC8qIHdlIGxldCB0aGlzIGhhbmRsZSBieSB0aGUgY2FsbGluZyByb3V0aW5lICovCi0JaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJc2lnZGVsc2V0KCZjdXJyZW50LT5ibG9ja2VkLCBTSUdUUkFQKTsKLQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCX0KLQlzZW5kX3NpZyhTSUdUUkFQLCBjdXJyZW50LCAxKTsKIAljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IHRyYXBubzsKIAljdXJyZW50LT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJZm9yY2Vfc2lnKFNJR1RSQVAsIGN1cnJlbnQpOwogCXJldHVybiAwOwogfQogCi12b2lkIGhhbmRsZV92bTg2X2ZhdWx0KHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICogcmVncywgbG9uZyBlcnJvcl9jb2RlKQordm9pZCBoYW5kbGVfdm04Nl9mYXVsdChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogewogCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOwogCXVuc2lnbmVkIGNoYXIgX191c2VyICpjc3A7CkBAIC01NzYsMTEgKzU3MywxMSBAQAogCiAjZGVmaW5lIENIRUNLX0lGX0lOX1RSQVAgXAogCWlmIChWTVBJLnZtODZkYmdfYWN0aXZlICYmIFZNUEkudm04NmRiZ19URnBlbmRpZykgXAotCQluZXdmbGFncyB8PSBURl9NQVNLCisJCW5ld2ZsYWdzIHw9IFg4Nl9FRkxBR1NfVEYKICNkZWZpbmUgVk04Nl9GQVVMVF9SRVRVUk4gZG8geyBcCi0JaWYgKFZNUEkuZm9yY2VfcmV0dXJuX2Zvcl9waWMgICYmIChWRUZMQUdTICYgKElGX01BU0sgfCBWSUZfTUFTSykpKSBcCisJaWYgKFZNUEkuZm9yY2VfcmV0dXJuX2Zvcl9waWMgICYmIChWRUZMQUdTICYgKFg4Nl9FRkxBR1NfSUYgfCBYODZfRUZMQUdTX1ZJRikpKSBcCiAJCXJldHVybl90b18zMmJpdChyZWdzLCBWTTg2X1BJQ1JFVFVSTik7IFwKLQlpZiAob3JpZ19mbGFncyAmIFRGX01BU0spIFwKKwlpZiAob3JpZ19mbGFncyAmIFg4Nl9FRkxBR1NfVEYpIFwKIAkJaGFuZGxlX3ZtODZfdHJhcChyZWdzLCAwLCAxKTsgXAogCXJldHVybjsgfSB3aGlsZSAoMCkKIApAQCAtNTk1LDE3ICs1OTIsMTcgQEAKIAlwcmVmX2RvbmUgPSAwOwogCWRvIHsKIAkJc3dpdGNoIChvcGNvZGUgPSBwb3BiKGNzcCwgaXAsIHNpbXVsYXRlX3NpZ3NlZ3YpKSB7Ci0JCQljYXNlIDB4NjY6ICAgICAgLyogMzItYml0IGRhdGEgKi8gICAgIGRhdGEzMj0xOyBicmVhazsKLQkJCWNhc2UgMHg2NzogICAgICAvKiAzMi1iaXQgYWRkcmVzcyAqLyAgYnJlYWs7Ci0JCQljYXNlIDB4MmU6ICAgICAgLyogQ1MgKi8gICAgICAgICAgICAgIGJyZWFrOwotCQkJY2FzZSAweDNlOiAgICAgIC8qIERTICovICAgICAgICAgICAgICBicmVhazsKLQkJCWNhc2UgMHgyNjogICAgICAvKiBFUyAqLyAgICAgICAgICAgICAgYnJlYWs7Ci0JCQljYXNlIDB4MzY6ICAgICAgLyogU1MgKi8gICAgICAgICAgICAgIGJyZWFrOwotCQkJY2FzZSAweDY1OiAgICAgIC8qIEdTICovICAgICAgICAgICAgICBicmVhazsKLQkJCWNhc2UgMHg2NDogICAgICAvKiBGUyAqLyAgICAgICAgICAgICAgYnJlYWs7Ci0JCQljYXNlIDB4ZjI6ICAgICAgLyogcmVwbnogKi8gICAgICAgYnJlYWs7Ci0JCQljYXNlIDB4ZjM6ICAgICAgLyogcmVwICovICAgICAgICAgICAgIGJyZWFrOwotCQkJZGVmYXVsdDogcHJlZl9kb25lID0gMTsKKwkJY2FzZSAweDY2OiAgICAgIC8qIDMyLWJpdCBkYXRhICovICAgICBkYXRhMzIgPSAxOyBicmVhazsKKwkJY2FzZSAweDY3OiAgICAgIC8qIDMyLWJpdCBhZGRyZXNzICovICBicmVhazsKKwkJY2FzZSAweDJlOiAgICAgIC8qIENTICovICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDNlOiAgICAgIC8qIERTICovICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDI2OiAgICAgIC8qIEVTICovICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDM2OiAgICAgIC8qIFNTICovICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDY1OiAgICAgIC8qIEdTICovICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDY0OiAgICAgIC8qIEZTICovICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweGYyOiAgICAgIC8qIHJlcG56ICovICAgICAgIGJyZWFrOworCQljYXNlIDB4ZjM6ICAgICAgLyogcmVwICovICAgICAgICAgICAgIGJyZWFrOworCQlkZWZhdWx0OiBwcmVmX2RvbmUgPSAxOwogCQl9CiAJfSB3aGlsZSAoIXByZWZfZG9uZSk7CiAKQEAgLTYyOCw3ICs2MjUsNyBAQAogCQl7CiAJCXVuc2lnbmVkIGxvbmcgbmV3ZmxhZ3M7CiAJCWlmIChkYXRhMzIpIHsKLQkJCW5ld2ZsYWdzPXBvcGwoc3NwLCBzcCwgc2ltdWxhdGVfc2lnc2Vndik7CisJCQluZXdmbGFncyA9IHBvcGwoc3NwLCBzcCwgc2ltdWxhdGVfc2lnc2Vndik7CiAJCQlTUChyZWdzKSArPSA0OwogCQl9IGVsc2UgewogCQkJbmV3ZmxhZ3MgPSBwb3B3KHNzcCwgc3AsIHNpbXVsYXRlX3NpZ3NlZ3YpOwpAQCAtNjM2LDIwICs2MzMsMjAgQEAKIAkJfQogCQlJUChyZWdzKSA9IGlwOwogCQlDSEVDS19JRl9JTl9UUkFQOwotCQlpZiAoZGF0YTMyKSB7CisJCWlmIChkYXRhMzIpCiAJCQlzZXRfdmZsYWdzX2xvbmcobmV3ZmxhZ3MsIHJlZ3MpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlzZXRfdmZsYWdzX3Nob3J0KG5ld2ZsYWdzLCByZWdzKTsKLQkJfQorCiAJCVZNODZfRkFVTFRfUkVUVVJOOwogCQl9CiAKIAkvKiBpbnQgeHggKi8KIAljYXNlIDB4Y2Q6IHsKLQkJaW50IGludG5vPXBvcGIoY3NwLCBpcCwgc2ltdWxhdGVfc2lnc2Vndik7CisJCWludCBpbnRubyA9IHBvcGIoY3NwLCBpcCwgc2ltdWxhdGVfc2lnc2Vndik7CiAJCUlQKHJlZ3MpID0gaXA7CiAJCWlmIChWTVBJLnZtODZkYmdfYWN0aXZlKSB7Ci0JCQlpZiAoICgxIDw8IChpbnRubyAmNykpICYgVk1QSS52bTg2ZGJnX2ludHh4dGFiW2ludG5vID4+IDNdICkKKwkJCWlmICgoMSA8PCAoaW50bm8gJiA3KSkgJiBWTVBJLnZtODZkYmdfaW50eHh0YWJbaW50bm8gPj4gM10pCiAJCQkJcmV0dXJuX3RvXzMyYml0KHJlZ3MsIFZNODZfSU5UeCArIChpbnRubyA8PCA4KSk7CiAJCX0KIAkJZG9faW50KHJlZ3MsIGludG5vLCBzc3AsIHNwKTsKQEAgLTY2Myw5ICs2NjAsOSBAQAogCQl1bnNpZ25lZCBsb25nIG5ld2NzOwogCQl1bnNpZ25lZCBsb25nIG5ld2ZsYWdzOwogCQlpZiAoZGF0YTMyKSB7Ci0JCQluZXdpcD1wb3BsKHNzcCwgc3AsIHNpbXVsYXRlX3NpZ3NlZ3YpOwotCQkJbmV3Y3M9cG9wbChzc3AsIHNwLCBzaW11bGF0ZV9zaWdzZWd2KTsKLQkJCW5ld2ZsYWdzPXBvcGwoc3NwLCBzcCwgc2ltdWxhdGVfc2lnc2Vndik7CisJCQluZXdpcCA9IHBvcGwoc3NwLCBzcCwgc2ltdWxhdGVfc2lnc2Vndik7CisJCQluZXdjcyA9IHBvcGwoc3NwLCBzcCwgc2ltdWxhdGVfc2lnc2Vndik7CisJCQluZXdmbGFncyA9IHBvcGwoc3NwLCBzcCwgc2ltdWxhdGVfc2lnc2Vndik7CiAJCQlTUChyZWdzKSArPSAxMjsKIAkJfSBlbHNlIHsKIAkJCW5ld2lwID0gcG9wdyhzc3AsIHNwLCBzaW11bGF0ZV9zaWdzZWd2KTsKQEAgLTczNCwxOCArNzMxLDE4IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycWJpdHNfbG9jayk7CiBzdGF0aWMgaW50IGlycWJpdHM7CiAKLSNkZWZpbmUgQUxMT1dFRF9TSUdTICggMSAvKiAwID0gZG9uJ3Qgc2VuZCBhIHNpZ25hbCAqLyBcCisjZGVmaW5lIEFMTE9XRURfU0lHUyAoMSAvKiAwID0gZG9uJ3Qgc2VuZCBhIHNpZ25hbCAqLyBcCiAJfCAoMSA8PCBTSUdVU1IxKSB8ICgxIDw8IFNJR1VTUjIpIHwgKDEgPDwgU0lHSU8pICB8ICgxIDw8IFNJR1VSRykgXAotCXwgKDEgPDwgU0lHVU5VU0VEKSApCi0JCisJfCAoMSA8PCBTSUdVTlVTRUQpKQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgaXJxX2hhbmRsZXIoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCiB7CiAJaW50IGlycV9iaXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFiaXRzX2xvY2ssIGZsYWdzKTsJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycWJpdHNfbG9jaywgZmxhZ3MpOwogCWlycV9iaXQgPSAxIDw8IGludG5vOwotCWlmICgoaXJxYml0cyAmIGlycV9iaXQpIHx8ICEgdm04Nl9pcnFzW2ludG5vXS50c2spCisJaWYgKChpcnFiaXRzICYgaXJxX2JpdCkgfHwgIXZtODZfaXJxc1tpbnRub10udHNrKQogCQlnb3RvIG91dDsKIAlpcnFiaXRzIHw9IGlycV9iaXQ7CiAJaWYgKHZtODZfaXJxc1tpbnRub10uc2lnKQpAQCAtNzU5LDcgKzc1Niw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxYml0c19sb2NrLCBmbGFncyk7CQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycWJpdHNfbG9jaywgZmxhZ3MpOwogCXJldHVybiBJUlFfTk9ORTsKIH0KIApAQCAtNzcwLDkgKzc2Nyw5IEBACiAJZnJlZV9pcnEoaXJxbnVtYmVyLCBOVUxMKTsKIAl2bTg2X2lycXNbaXJxbnVtYmVyXS50c2sgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycWJpdHNfbG9jaywgZmxhZ3MpOwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxYml0c19sb2NrLCBmbGFncyk7CiAJaXJxYml0cyAmPSB+KDEgPDwgaXJxbnVtYmVyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFiaXRzX2xvY2ssIGZsYWdzKTsJCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxYml0c19sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgcmVsZWFzZV92bTg2X2lycXMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpAQCAtNzg4LDEwICs3ODUsMTAgQEAKIAlpbnQgYml0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7Ci0JCisKIAlpZiAoaW52YWxpZF92bTg2X2lycShpcnFudW1iZXIpKSByZXR1cm4gMDsKIAlpZiAodm04Nl9pcnFzW2lycW51bWJlcl0udHNrICE9IGN1cnJlbnQpIHJldHVybiAwOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFiaXRzX2xvY2ssIGZsYWdzKTsJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycWJpdHNfbG9jaywgZmxhZ3MpOwogCWJpdCA9IGlycWJpdHMgJiAoMSA8PCBpcnFudW1iZXIpOwogCWlycWJpdHMgJj0gfmJpdDsKIAlpZiAoYml0KSB7CkBAIC03OTksNyArNzk2LDcgQEAKIAkJcmV0ID0gMTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFiaXRzX2xvY2ssIGZsYWdzKTsJCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxYml0c19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwppbmRleCBmMTE0OGFjLi5jZTVlZDA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwpAQCAtMzgsNyArMzgsNyBAQAogCiAgIC8qIHJlYWQtb25seSAqLwogICAudGV4dCA6IEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKLQkuID0gQUxJR04oNDA5Nik7IC8qIG5vdCByZWFsbHkgbmVlZGVkLCBhbHJlYWR5IHBhZ2UgYWxpZ25lZCAqLworCS4gPSBBTElHTihQQUdFX1NJWkUpOyAvKiBub3QgcmVhbGx5IG5lZWRlZCwgYWxyZWFkeSBwYWdlIGFsaWduZWQgKi8KIAkqKC50ZXh0LnBhZ2VfYWxpZ25lZCkKIAlURVhUX1RFWFQKIAlTQ0hFRF9URVhUCkBAIC03MCwyMSArNzAsMjEgQEAKICAgUk9EQVRBCiAKICAgLyogd3JpdGVhYmxlICovCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC5kYXRhIDogQVQoQUREUiguZGF0YSkgLSBMT0FEX09GRlNFVCkgewkvKiBEYXRhICovCiAJREFUQV9EQVRBCiAJQ09OU1RSVUNUT1JTCiAJfSA6ZGF0YQogCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7CiAgIAlfX25vc2F2ZV9iZWdpbiA9IC47CiAJKiguZGF0YS5ub3NhdmUpCi0gIAkuID0gQUxJR04oNDA5Nik7CisgIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgCV9fbm9zYXZlX2VuZCA9IC47CiAgIH0KIAotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICAuZGF0YS5wYWdlX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLnBhZ2VfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewogCSooLmRhdGEucGFnZV9hbGlnbmVkKQogCSooLmRhdGEuaWR0KQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgIH0KIAogICAvKiBtaWdodCBnZXQgZnJlZWQgYWZ0ZXIgaW5pdCAqLwotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICAuc21wX2xvY2tzIDogQVQoQUREUiguc21wX2xvY2tzKSAtIExPQURfT0ZGU0VUKSB7CiAgIAlfX3NtcF9sb2NrcyA9IC47CiAJKiguc21wX2xvY2tzKQpAQCAtMTIwLDEwICsxMjAsMTAgQEAKICAgICogYWZ0ZXIgYm9vdC4gQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IEFMSUdOKCkgZGlyZWN0aXZlIGlzIHByZXNlbnQgYWZ0ZXIKICAgICogdGhlIHNlY3Rpb24gd2hpY2ggY29udGFpbnMgX19zbXBfYWx0X2VuZC4KICAgICovCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAKICAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCi0gIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogICAuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7CiAgIAlfX2luaXRfYmVnaW4gPSAuOwogCV9zaW5pdHRleHQgPSAuOwpAQCAtMTQ5LDYgKzE0OSwxMSBAQAogCSooLmNvbl9pbml0Y2FsbC5pbml0KQogICAJX19jb25faW5pdGNhbGxfZW5kID0gLjsKICAgfQorICAueDg2Y3B1dmVuZG9yLmluaXQgOiBBVChBRERSKC54ODZjcHV2ZW5kb3IuaW5pdCkgLSBMT0FEX09GRlNFVCkgeworCV9feDg2Y3B1dmVuZG9yX3N0YXJ0ID0gLjsKKwkqKC54ODZjcHV2ZW5kb3IuaW5pdCkKKwlfX3g4NmNwdXZlbmRvcl9lbmQgPSAuOworICB9CiAgIFNFQ1VSSVRZX0lOSVQKICAgLiA9IEFMSUdOKDQpOwogICAuYWx0aW5zdHJ1Y3Rpb25zIDogQVQoQUREUiguYWx0aW5zdHJ1Y3Rpb25zKSAtIExPQURfT0ZGU0VUKSB7CkBAIC0xNzQsMjMgKzE3OSwyMyBAQAogCUVYSVRfREFUQQogICB9CiAjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTklUUkQpCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgewogCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKIAkqKC5pbml0LnJhbWZzKQogCV9faW5pdHJhbWZzX2VuZCA9IC47CiAgIH0KICNlbmRpZgotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICAuZGF0YS5wZXJjcHUgIDogQVQoQUREUiguZGF0YS5wZXJjcHUpIC0gTE9BRF9PRkZTRVQpIHsKIAlfX3Blcl9jcHVfc3RhcnQgPSAuOwogCSooLmRhdGEucGVyY3B1KQogCSooLmRhdGEucGVyY3B1LnNoYXJlZF9hbGlnbmVkKQogCV9fcGVyX2NwdV9lbmQgPSAuOwogICB9Ci0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC8qIGZyZWVkIGFmdGVyIGluaXQgZW5kcyBoZXJlICovCi0JCisKICAgLmJzcyA6IEFUKEFERFIoLmJzcykgLSBMT0FEX09GRlNFVCkgewogCV9faW5pdF9lbmQgPSAuOwogCV9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwpAQCAtMjAwLDcgKzIwNSw3IEBACiAJX19ic3Nfc3RvcCA9IC47CiAgIAlfZW5kID0gLiA7CiAJLyogVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGNyZWF0ZXMgdGhlIGVhcmx5IGJvb3QgcGFnZSB0YWJsZXMgKi8KLQkuID0gQUxJR04oNDA5Nik7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJcGcwID0gLiA7CiAgIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUwppbmRleCAwOTkyYjk5Li5iN2FiM2MzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUwpAQCAtMzcsNyArMzcsNyBAQAogCUtQUk9CRVNfVEVYVAogCSooLmZpeHVwKQogCSooLmdudS53YXJuaW5nKQotCV9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLworCV9ldGV4dCA9IC47CQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uICovCiAgIH0gOnRleHQgPSAweDkwOTAKIAogICAuID0gQUxJR04oMTYpOwkJLyogRXhjZXB0aW9uIHRhYmxlICovCkBAIC02MCw3ICs2MCw3IEBACiAgIAlfX3RyYWNlZGF0YV9lbmQgPSAuOwogICB9CiAKLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7ICAgICAgICAvKiBBbGlnbiBkYXRhIHNlZ21lbnQgdG8gcGFnZSBzaXplIGJvdW5kYXJ5ICovCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwkJLyogQWxpZ24gZGF0YSBzZWdtZW50IHRvIHBhZ2Ugc2l6ZSBib3VuZGFyeSAqLwogCQkJCS8qIERhdGEgKi8KICAgLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAJREFUQV9EQVRBCkBAIC0xMTksNyArMTE5LDcgQEAKICAgLnZzeXNjYWxsXzMgQUREUigudnN5c2NhbGxfMCkgKyAzMDcyOiBBVChWTE9BRCgudnN5c2NhbGxfMykpCiAJCXsgKigudnN5c2NhbGxfMykgfQogCi0gIC4gPSBWU1lTQ0FMTF9WSVJUX0FERFIgKyA0MDk2OworICAuID0gVlNZU0NBTExfVklSVF9BRERSICsgUEFHRV9TSVpFOwogCiAjdW5kZWYgVlNZU0NBTExfQUREUgogI3VuZGVmIFZTWVNDQUxMX1BIWVNfQUREUgpAQCAtMTI5LDI4ICsxMjksMjggQEAKICN1bmRlZiBWVklSVF9PRkZTRVQKICN1bmRlZiBWVklSVAogCi0gIC4gPSBBTElHTig4MTkyKTsJCS8qIGluaXRfdGFzayAqLworICAuID0gQUxJR04oVEhSRUFEX1NJWkUpOwkvKiBpbml0X3Rhc2sgKi8KICAgLmRhdGEuaW5pdF90YXNrIDogQVQoQUREUiguZGF0YS5pbml0X3Rhc2spIC0gTE9BRF9PRkZTRVQpIHsKIAkqKC5kYXRhLmluaXRfdGFzaykKICAgfTpkYXRhLmluaXQKIAotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICAuZGF0YS5wYWdlX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLnBhZ2VfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewogCSooLmRhdGEucGFnZV9hbGlnbmVkKQogICB9CiAKICAgLyogbWlnaHQgZ2V0IGZyZWVkIGFmdGVyIGluaXQgKi8KLSAgLiA9IEFMSUdOKDQwOTYpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19zbXBfYWx0X2JlZ2luID0gLjsKICAgX19zbXBfbG9ja3MgPSAuOwogICAuc21wX2xvY2tzIDogQVQoQUREUiguc21wX2xvY2tzKSAtIExPQURfT0ZGU0VUKSB7CiAJKiguc21wX2xvY2tzKQogICB9CiAgIF9fc21wX2xvY2tzX2VuZCA9IC47Ci0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9fc21wX2FsdF9lbmQgPSAuOwogCi0gIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogICBfX2luaXRfYmVnaW4gPSAuOwogICAuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7CiAJX3Npbml0dGV4dCA9IC47CkBAIC0xNzcsNiArMTc3LDExIEBACiAJKiguY29uX2luaXRjYWxsLmluaXQpCiAgIH0KICAgX19jb25faW5pdGNhbGxfZW5kID0gLjsKKyAgX194ODZjcHV2ZW5kb3Jfc3RhcnQgPSAuOworICAueDg2Y3B1dmVuZG9yLmluaXQgOiBBVChBRERSKC54ODZjcHV2ZW5kb3IuaW5pdCkgLSBMT0FEX09GRlNFVCkgeworCSooLng4NmNwdXZlbmRvci5pbml0KQorICB9CisgIF9feDg2Y3B1dmVuZG9yX2VuZCA9IC47CiAgIFNFQ1VSSVRZX0lOSVQKIAogICAuID0gQUxJR04oOCk7CkBAIC0xOTEsNyArMTk2LDcgQEAKICAgLmFsdGluc3RydWN0aW9ucyA6IEFUKEFERFIoLmFsdGluc3RydWN0aW9ucykgLSBMT0FEX09GRlNFVCkgewogCSooLmFsdGluc3RydWN0aW9ucykKICAgfQotICBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsgCisgIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOwogICAuYWx0aW5zdHJfcmVwbGFjZW1lbnQgOiBBVChBRERSKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkgLSBMT0FEX09GRlNFVCkgewogCSooLmFsdGluc3RyX3JlcGxhY2VtZW50KQogICB9CkBAIC0yMDcsMjUgKzIxMiwyNSBAQAogLyogdmRzbyBibG9iIHRoYXQgaXMgbWFwcGVkIGludG8gdXNlciBzcGFjZSAqLwogICB2ZHNvX3N0YXJ0ID0gLiA7CiAgIC52ZHNvICA6IEFUKEFERFIoLnZkc28pIC0gTE9BRF9PRkZTRVQpIHsgKigudmRzbykgfQotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICB2ZHNvX2VuZCA9IC47CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLSAgLiA9IEFMSUdOKDQwOTYpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwogICAuaW5pdC5yYW1mcyA6IEFUKEFERFIoLmluaXQucmFtZnMpIC0gTE9BRF9PRkZTRVQpIHsgKiguaW5pdC5yYW1mcykgfQogICBfX2luaXRyYW1mc19lbmQgPSAuOwogI2VuZGlmCiAKLSAgUEVSQ1BVKDQwOTYpCisgIFBFUkNQVShQQUdFX1NJWkUpCiAKLSAgLiA9IEFMSUdOKDQwOTYpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CiAKLSAgLiA9IEFMSUdOKDQwOTYpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19ub3NhdmVfYmVnaW4gPSAuOwogICAuZGF0YV9ub3NhdmUgOiBBVChBRERSKC5kYXRhX25vc2F2ZSkgLSBMT0FEX09GRlNFVCkgeyAqKC5kYXRhLm5vc2F2ZSkgfQotICAuID0gQUxJR04oNDA5Nik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX25vc2F2ZV9lbmQgPSAuOwogCiAgIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwpAQCAtMjQ3LDMgKzI1Miw5IEBACiAKICAgRFdBUkZfREVCVUcKIH0KKworLyoKKyAqIEJ1aWxkLXRpbWUgY2hlY2sgb24gdGhlIGltYWdlIHNpemU6CisgKi8KK0FTU0VSVCgoX2VuZCAtIF90ZXh0IDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKKwkia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jCmluZGV4IGQ5NzEyMTAuLmNhZjJhMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYwpAQCAtOCw2ICs4LDggQEAKICAqCiAgKiBSYXZpa2lyYW4gVGhpcnVtYWxhaSA8a2lyYW5Ac2NhbGVtcC5jb20+LAogICogU2hhaSBGdWx0aGVpbSA8c2hhaUBzY2FsZW1wLmNvbT4KKyAqIFBhcmF2aXJ0IG9wcyBpbnRlZ3JhdGlvbjogR2xhdWJlciBkZSBPbGl2ZWlyYSBDb3N0YSA8Z2Nvc3RhQHJlZGhhdC5jb20+LAorICoJCQkgICAgIFJhdmlraXJhbiBUaGlydW1hbGFpIDxraXJhbkBzY2FsZW1wLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTUsMzggKzE3LDEzNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaV9yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KIAotc3RhdGljIGludCBfX2luaXQgdnNtcF9pbml0KHZvaWQpCisjaWYgZGVmaW5lZCBDT05GSUdfUENJICYmIGRlZmluZWQgQ09ORklHX1BBUkFWSVJUCisvKgorICogSW50ZXJydXB0IGNvbnRyb2wgb24gdlNNUG93ZXJlZCBzeXN0ZW1zOgorICogfkFDIGlzIGEgc2hhZG93IG9mIElGLiAgSWYgSUYgaXMgJ29uJyBBQyBzaG91bGQgYmUgJ29mZicKKyAqIGFuZCB2aWNlIHZlcnNhLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZzbXBfc2F2ZV9mbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBuYXRpdmVfc2F2ZV9mbCgpOworCisJaWYgKCEoZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSB8fCAoZmxhZ3MgJiBYODZfRUZMQUdTX0FDKSkKKwkJZmxhZ3MgJj0gflg4Nl9FRkxBR1NfSUY7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgdm9pZCB2c21wX3Jlc3RvcmVfZmwodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQorCQlmbGFncyAmPSB+WDg2X0VGTEFHU19BQzsKKwllbHNlCisJCWZsYWdzIHw9IFg4Nl9FRkxBR1NfQUM7CisJbmF0aXZlX3Jlc3RvcmVfZmwoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB2c21wX2lycV9kaXNhYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IG5hdGl2ZV9zYXZlX2ZsKCk7CisKKwluYXRpdmVfcmVzdG9yZV9mbCgoZmxhZ3MgJiB+WDg2X0VGTEFHU19JRikgfCBYODZfRUZMQUdTX0FDKTsKK30KKworc3RhdGljIHZvaWQgdnNtcF9pcnFfZW5hYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IG5hdGl2ZV9zYXZlX2ZsKCk7CisKKwluYXRpdmVfcmVzdG9yZV9mbCgoZmxhZ3MgfCBYODZfRUZMQUdTX0lGKSAmICh+WDg2X0VGTEFHU19BQykpOworfQorCitzdGF0aWMgdW5zaWduZWQgX19pbml0IHZzbXBfcGF0Y2godTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppYnVmLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZW4pCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQQVJBVklSVF9QQVRDSChwdl9pcnFfb3BzLmlycV9lbmFibGUpOgorCWNhc2UgUEFSQVZJUlRfUEFUQ0gocHZfaXJxX29wcy5pcnFfZGlzYWJsZSk6CisJY2FzZSBQQVJBVklSVF9QQVRDSChwdl9pcnFfb3BzLnNhdmVfZmwpOgorCWNhc2UgUEFSQVZJUlRfUEFUQ0gocHZfaXJxX29wcy5yZXN0b3JlX2ZsKToKKwkJcmV0dXJuIHBhcmF2aXJ0X3BhdGNoX2RlZmF1bHQodHlwZSwgY2xvYmJlcnMsIGlidWYsIGFkZHIsIGxlbik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIG5hdGl2ZV9wYXRjaCh0eXBlLCBjbG9iYmVycywgaWJ1ZiwgYWRkciwgbGVuKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNldF92c21wX3B2X29wcyh2b2lkKQogewogCXZvaWQgKmFkZHJlc3M7Ci0JdW5zaWduZWQgaW50IGNhcCwgY3RsOwotCi0JaWYgKCFlYXJseV9wY2lfYWxsb3dlZCgpKQotCQlyZXR1cm4gMDsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBydW5uaW5nIG9uIGEgU2NhbGVNUCB2U01QIGJveCAqLwotCWlmICgocmVhZF9wY2lfY29uZmlnXzE2KDAsIDB4MWYsIDAsIFBDSV9WRU5ET1JfSUQpICE9Ci0JICAgICBQQ0lfVkVORE9SX0lEX1NDQUxFTVApIHx8Ci0JICAgIChyZWFkX3BjaV9jb25maWdfMTYoMCwgMHgxZiwgMCwgUENJX0RFVklDRV9JRCkgIT0KLQkgICAgIFBDSV9ERVZJQ0VfSURfU0NBTEVNUF9WU01QX0NUTCkpCi0JCXJldHVybiAwOworCXVuc2lnbmVkIGludCBjYXAsIGN0bCwgY2ZnOwogCiAJLyogc2V0IHZTTVAgbWFnaWMgYml0cyB0byBpbmRpY2F0ZSB2U01QIGNhcGFibGUga2VybmVsICovCi0JYWRkcmVzcyA9IGlvcmVtYXAocmVhZF9wY2lfY29uZmlnKDAsIDB4MWYsIDAsIFBDSV9CQVNFX0FERFJFU1NfMCksIDgpOworCWNmZyA9IHJlYWRfcGNpX2NvbmZpZygwLCAweDFmLCAwLCBQQ0lfQkFTRV9BRERSRVNTXzApOworCWFkZHJlc3MgPSBlYXJseV9pb3JlbWFwKGNmZywgOCk7CiAJY2FwID0gcmVhZGwoYWRkcmVzcyk7CiAJY3RsID0gcmVhZGwoYWRkcmVzcyArIDQpOwogCXByaW50ayhLRVJOX0lORk8gInZTTVAgQ1RMOiBjYXBhYmlsaXRpZXM6MHglMDh4ICBjb250cm9sOjB4JTA4eFxuIiwKIAkgICAgICAgY2FwLCBjdGwpOwogCWlmIChjYXAgJiBjdGwgJiAoMSA8PCA0KSkgewotCQkvKiBUdXJuIG9uIHZTTVAgSVJRIGZhc3RwYXRoIGhhbmRsaW5nIChzZWUgc3lzdGVtLmgpICovCisJCS8qIFNldHVwIGlycSBvcHMgYW5kIHR1cm4gb24gdlNNUCAgSVJRIGZhc3RwYXRoIGhhbmRsaW5nICovCisJCXB2X2lycV9vcHMuaXJxX2Rpc2FibGUgPSB2c21wX2lycV9kaXNhYmxlOworCQlwdl9pcnFfb3BzLmlycV9lbmFibGUgID0gdnNtcF9pcnFfZW5hYmxlOworCQlwdl9pcnFfb3BzLnNhdmVfZmwgID0gdnNtcF9zYXZlX2ZsOworCQlwdl9pcnFfb3BzLnJlc3RvcmVfZmwgID0gdnNtcF9yZXN0b3JlX2ZsOworCQlwdl9pbml0X29wcy5wYXRjaCA9IHZzbXBfcGF0Y2g7CisKIAkJY3RsICY9IH4oMSA8PCA0KTsKIAkJd3JpdGVsKGN0bCwgYWRkcmVzcyArIDQpOwogCQljdGwgPSByZWFkbChhZGRyZXNzICsgNCk7CiAJCXByaW50ayhLRVJOX0lORk8gInZTTVAgQ1RMOiBjb250cm9sIHNldCB0bzoweCUwOHhcbiIsIGN0bCk7CiAJfQogCi0JaW91bm1hcChhZGRyZXNzKTsKLQlyZXR1cm4gMDsKKwllYXJseV9pb3VubWFwKGFkZHJlc3MsIDgpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfdnNtcF9wdl9vcHModm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIGludCBpc192c21wID0gLTE7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfdnNtcF9ib3godm9pZCkKK3sKKwlpc192c21wID0gMDsKKworCWlmICghZWFybHlfcGNpX2FsbG93ZWQoKSkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgaWYgd2UgYXJlIHJ1bm5pbmcgb24gYSBTY2FsZU1QIHZTTVBvd2VyZWQgYm94ICovCisJaWYgKHJlYWRfcGNpX2NvbmZpZygwLCAweDFmLCAwLCBQQ0lfVkVORE9SX0lEKSA9PQorCSAgICAgKFBDSV9WRU5ET1JfSURfU0NBTEVNUCB8IChQQ0lfREVWSUNFX0lEX1NDQUxFTVBfVlNNUF9DVEwgPDwgMTYpKSkKKwkJaXNfdnNtcCA9IDE7CiB9CiAKLWNvcmVfaW5pdGNhbGwodnNtcF9pbml0KTsKK2ludCBpc192c21wX2JveCh2b2lkKQoreworCWlmIChpc192c21wICE9IC0xKQorCQlyZXR1cm4gaXNfdnNtcDsKKwllbHNlIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm4gMDsKKwl9Cit9CisjZWxzZQorc3RhdGljIGludCBfX2luaXQgZGV0ZWN0X3ZzbXBfYm94KHZvaWQpCit7Cit9CitpbnQgaXNfdnNtcF9ib3godm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdCB2c21wX2luaXQodm9pZCkKK3sKKwlkZXRlY3RfdnNtcF9ib3goKTsKKwlpZiAoIWlzX3ZzbXBfYm94KCkpCisJCXJldHVybjsKKworCXNldF92c21wX3B2X29wcygpOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKaW5kZXggM2Y4MjQyNy4uZWRmZjRjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKQEAgLTQ0LDExICs0NCw2IEBACiAKICNkZWZpbmUgX192c3lzY2FsbChucikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCxfX3NlY3Rpb25fXygiLnZzeXNjYWxsXyIgI25yKSkpCiAjZGVmaW5lIF9fc3lzY2FsbF9jbG9iYmVyICJyMTEiLCJjeCIsIm1lbW9yeSIKLSNkZWZpbmUgX19wYV92c3ltYm9sKHgpCQkJXAotCSh7dW5zaWduZWQgbG9uZyB2OyAgCQlcCi0JZXh0ZXJuIGNoYXIgX192c3lzY2FsbF8wOyAJXAotCSAgYXNtKCIiIDogIj1yIiAodikgOiAiMCIgKHgpKTsgXAotCSAgKCh2IC0gVlNZU0NBTExfU1RBUlQpICsgX19wYV9zeW1ib2woJl9fdnN5c2NhbGxfMCkpOyB9KQogCiAvKgogICogdnN5c2NhbGxfZ3RvZF9kYXRhIGNvbnRhaW5zIGRhdGEgdGhhdCBpcyA6CkBAIC0xMDIsNyArOTcsNyBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eikKIHsKIAlpbnQgcmV0OwotCWFzbSB2b2xhdGlsZSgidnN5c2MyOiBzeXNjYWxsIgorCWFzbSB2b2xhdGlsZSgic3lzY2FsbCIKIAkJOiAiPWEiIChyZXQpCiAJCTogIjAiIChfX05SX2dldHRpbWVvZmRheSksIkQiICh0diksIlMiICh0eikKIAkJOiBfX3N5c2NhbGxfY2xvYmJlciApOwpAQCAtMTEyLDcgKzEwNyw3IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGxvbmcgdGltZV9zeXNjYWxsKGxvbmcgKnQpCiB7CiAJbG9uZyBzZWNzOwotCWFzbSB2b2xhdGlsZSgidnN5c2MxOiBzeXNjYWxsIgorCWFzbSB2b2xhdGlsZSgic3lzY2FsbCIKIAkJOiAiPWEiIChzZWNzKQogCQk6ICIwIiAoX19OUl90aW1lKSwiRCIgKHQpIDogX19zeXNjYWxsX2Nsb2JiZXIpOwogCXJldHVybiBzZWNzOwpAQCAtMjI4LDQyICsyMjMsMTEgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAotI2RlZmluZSBTWVNDQUxMIDB4MDUwZgotI2RlZmluZSBOT1AyICAgIDB4OTA5MAotCi0vKgotICogTk9QIG91dCBzeXNjYWxsIGluIHZzeXNjYWxsIHBhZ2Ugd2hlbiBub3QgbmVlZGVkLgotICovCi1zdGF0aWMgaW50IHZzeXNjYWxsX3N5c2N0bF9jaGFuZ2UoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgaW50Cit2c3lzY2FsbF9zeXNjdGxfY2hhbmdlKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlscCwKKwkJICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewotCWV4dGVybiB1MTYgdnN5c2MxLCB2c3lzYzI7Ci0JdTE2IF9faW9tZW0gKm1hcDE7Ci0JdTE2IF9faW9tZW0gKm1hcDI7Ci0JaW50IHJldCA9IHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKLQlpZiAoIXdyaXRlKQotCQlyZXR1cm4gcmV0OwotCS8qIGdjYyBoYXMgc29tZSB0cm91YmxlIHdpdGggX192YShfX3BhKCkpLCBzbyBqdXN0IGRvIGl0IHRoaXMKLQkgICB3YXkuICovCi0JbWFwMSA9IGlvcmVtYXAoX19wYV92c3ltYm9sKCZ2c3lzYzEpLCAyKTsKLQlpZiAoIW1hcDEpCi0JCXJldHVybiAtRU5PTUVNOwotCW1hcDIgPSBpb3JlbWFwKF9fcGFfdnN5bWJvbCgmdnN5c2MyKSwgMik7Ci0JaWYgKCFtYXAyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAoIXZzeXNjYWxsX2d0b2RfZGF0YS5zeXNjdGxfZW5hYmxlZCkgewotCQl3cml0ZXcoU1lTQ0FMTCwgbWFwMSk7Ci0JCXdyaXRldyhTWVNDQUxMLCBtYXAyKTsKLQl9IGVsc2UgewotCQl3cml0ZXcoTk9QMiwgbWFwMSk7Ci0JCXdyaXRldyhOT1AyLCBtYXAyKTsKLQl9Ci0JaW91bm1hcChtYXAyKTsKLW91dDoKLQlpb3VubWFwKG1hcDEpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIH0KIAogc3RhdGljIGN0bF90YWJsZSBrZXJuZWxfdGFibGUyW10gPSB7CkBAIC0yNzksNyArMjQzLDYgQEAKIAkgIC5jaGlsZCA9IGtlcm5lbF90YWJsZTIgfSwKIAl7fQogfTsKLQogI2VuZGlmCiAKIC8qIEFzc3VtZSBfX2luaXRjYWxsIGV4ZWN1dGVzIGJlZm9yZSBhbGwgdXNlciBzcGFjZS4gSG9wZWZ1bGx5IGttb2QKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKaW5kZXggYTY2ZTljMS4uNTg4ODJmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEyLDExICsxMSw2IEBACiAKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKLUVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZCk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfdHJ5bG9jayk7Ci1FWFBPUlRfU1lNQk9MKF9fdXBfd2FrZXVwKTsKLQogRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzEpOwogRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzIpOwogRVhQT1JUX1NZTUJPTChfX2dldF91c2VyXzQpOwpAQCAtMzUsMTUgKzI5LDE3IEBACiBFWFBPUlRfU1lNQk9MKGNvcHlfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3BhZ2UpOwogCi0vKiBFeHBvcnQgc3RyaW5nIGZ1bmN0aW9ucy4gV2Ugbm9ybWFsbHkgcmVseSBvbiBnY2MgYnVpbHRpbiBmb3IgbW9zdCBvZiB0aGVzZSwKLSAgIGJ1dCBnY2Mgc29tZXRpbWVzIGRlY2lkZXMgbm90IHRvIGlubGluZSB0aGVtLiAqLyAgICAKKy8qCisgKiBFeHBvcnQgc3RyaW5nIGZ1bmN0aW9ucy4gV2Ugbm9ybWFsbHkgcmVseSBvbiBnY2MgYnVpbHRpbiBmb3IgbW9zdCBvZiB0aGVzZSwKKyAqIGJ1dCBnY2Mgc29tZXRpbWVzIGRlY2lkZXMgbm90IHRvIGlubGluZSB0aGVtLgorICovCiAjdW5kZWYgbWVtY3B5CiAjdW5kZWYgbWVtc2V0CiAjdW5kZWYgbWVtbW92ZQogCi1leHRlcm4gdm9pZCAqIG1lbXNldCh2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7Ci1leHRlcm4gdm9pZCAqIG1lbWNweSh2b2lkICosY29uc3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7Ci1leHRlcm4gdm9pZCAqIF9fbWVtY3B5KHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CitleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIHZvaWQgKl9fbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOwogCiBFWFBPUlRfU1lNQk9MKG1lbXNldCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNweSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IDJjYmVlOTQuLjY4YTZiMTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC02NDcsNiArNjQ3LDEwIEBACiAJYXBpYy0+dGltZXIucGVyaW9kID0gYXBpY19nZXRfcmVnKGFwaWMsIEFQSUNfVE1JQ1QpICoKIAkJICAgIEFQSUNfQlVTX0NZQ0xFX05TICogYXBpYy0+dGltZXIuZGl2aWRlX2NvdW50OwogCWF0b21pY19zZXQoJmFwaWMtPnRpbWVyLnBlbmRpbmcsIDApOworCisJaWYgKCFhcGljLT50aW1lci5wZXJpb2QpCisJCXJldHVybjsKKwogCWhydGltZXJfc3RhcnQoJmFwaWMtPnRpbWVyLmRldiwKIAkJICAgICAga3RpbWVfYWRkX25zKG5vdywgYXBpYy0+dGltZXIucGVyaW9kKSwKIAkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggOGVmZGNkYi4uZTU1YWYxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtMjIyLDggKzIyMiw3IEBACiAKIHN0YXRpYyBpbnQgaXNfcm1hcF9wdGUodTY0IHB0ZSkKIHsKLQlyZXR1cm4gcHRlICE9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlCi0JCSYmIHB0ZSAhPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOworCXJldHVybiBpc19zaGFkb3dfcHJlc2VudF9wdGUocHRlKTsKIH0KIAogc3RhdGljIGdmbl90IHBzZTM2X2dmbl9kZWx0YSh1MzIgZ3B0ZSkKQEAgLTY4MSw4ICs2ODAsNyBAQAogCQkJCQkgICAgIHVuc2lnbmVkIGxldmVsLAogCQkJCQkgICAgIGludCBtZXRhcGh5c2ljYWwsCiAJCQkJCSAgICAgdW5zaWduZWQgYWNjZXNzLAotCQkJCQkgICAgIHU2NCAqcGFyZW50X3B0ZSwKLQkJCQkJICAgICBib29sICpuZXdfcGFnZSkKKwkJCQkJICAgICB1NjQgKnBhcmVudF9wdGUpCiB7CiAJdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZTsKIAl1bnNpZ25lZCBpbmRleDsKQEAgLTcyMiw4ICs3MjAsNiBAQAogCXZjcHUtPmFyY2gubW11LnByZWZldGNoX3BhZ2UodmNwdSwgc3ApOwogCWlmICghbWV0YXBoeXNpY2FsKQogCQlybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBnZm4pOwotCWlmIChuZXdfcGFnZSkKLQkJKm5ld19wYWdlID0gMTsKIAlyZXR1cm4gc3A7CiB9CiAKQEAgLTg3NiwxMSArODcyLDE4IEBACiAKIHN0cnVjdCBwYWdlICpndmFfdG9fcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwogCWdwYV90IGdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgZ3ZhKTsKIAogCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQogCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlyZXR1cm4gcGFnZTsKIH0KIAogc3RhdGljIHZvaWQgbW11X3NldF9zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpzaGFkb3dfcHRlLApAQCAtODg5LDE0ICs4OTIsMjUgQEAKIAkJCSBpbnQgKnB0d3JpdGUsIGdmbl90IGdmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJdTY0IHNwdGU7Ci0JaW50IHdhc19ybWFwcGVkID0gaXNfcm1hcF9wdGUoKnNoYWRvd19wdGUpOworCWludCB3YXNfcm1hcHBlZCA9IDA7CiAJaW50IHdhc193cml0ZWJsZSA9IGlzX3dyaXRlYmxlX3B0ZSgqc2hhZG93X3B0ZSk7CisJaGZuX3QgaG9zdF9wZm4gPSAoKnNoYWRvd19wdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwogCiAJcGdwcmludGsoIiVzOiBzcHRlICVsbHggYWNjZXNzICV4IHdyaXRlX2ZhdWx0ICVkIgogCQkgIiB1c2VyX2ZhdWx0ICVkIGdmbiAlbHhcbiIsCiAJCSBfX0ZVTkNUSU9OX18sICpzaGFkb3dfcHRlLCBwdF9hY2Nlc3MsCiAJCSB3cml0ZV9mYXVsdCwgdXNlcl9mYXVsdCwgZ2ZuKTsKIAorCWlmIChpc19ybWFwX3B0ZSgqc2hhZG93X3B0ZSkpIHsKKwkJaWYgKGhvc3RfcGZuICE9IHBhZ2VfdG9fcGZuKHBhZ2UpKSB7CisJCQlwZ3ByaW50aygiaGZuIG9sZCAlbHggbmV3ICVseFxuIiwKKwkJCQkgaG9zdF9wZm4sIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc2hhZG93X3B0ZSk7CisJCX0KKwkJZWxzZQorCQkJd2FzX3JtYXBwZWQgPSAxOworCX0KKwogCS8qCiAJICogV2UgZG9uJ3Qgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIHNpbmNlIHdlIHNvbWV0aW1lcyB3YW50IHRvIHNlZQogCSAqIHdoZXRoZXIgdGhlIGd1ZXN0IGFjdHVhbGx5IHVzZWQgdGhlIHB0ZSAoaW4gb3JkZXIgdG8gZGV0ZWN0CkBAIC05OTksOCArMTAxMyw3IEBACiAJCQkJPj4gUEFHRV9TSElGVDsKIAkJCW5ld190YWJsZSA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcHNldWRvX2dmbiwKIAkJCQkJCSAgICAgdiwgbGV2ZWwgLSAxLAotCQkJCQkJICAgICAxLCBBQ0NfQUxMLCAmdGFibGVbaW5kZXhdLAotCQkJCQkJICAgICBOVUxMKTsKKwkJCQkJCSAgICAgMSwgQUNDX0FMTCwgJnRhYmxlW2luZGV4XSk7CiAJCQlpZiAoIW5ld190YWJsZSkgewogCQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOwogCQkJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CkBAIC0xMDIwLDE1ICsxMDMzLDE4IEBACiAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAorCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwogCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBnZm4pOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwogCXIgPSBfX25vbnBhZ2luZ19tYXAodmNwdSwgdiwgd3JpdGUsIGdmbiwgcGFnZSk7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCi0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0xMDkwLDcgKzExMDYsNyBAQAogCiAJCUFTU0VSVCghVkFMSURfUEFHRShyb290KSk7CiAJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCByb290X2dmbiwgMCwKLQkJCQkgICAgICBQVDY0X1JPT1RfTEVWRUwsIDAsIEFDQ19BTEwsIE5VTEwsIE5VTEwpOworCQkJCSAgICAgIFBUNjRfUk9PVF9MRVZFTCwgMCwgQUNDX0FMTCwgTlVMTCk7CiAJCXJvb3QgPSBfX3BhKHNwLT5zcHQpOwogCQkrK3NwLT5yb290X2NvdW50OwogCQl2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSA9IHJvb3Q7CkBAIC0xMTExLDcgKzExMjcsNyBAQAogCQkJcm9vdF9nZm4gPSAwOwogCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcm9vdF9nZm4sIGkgPDwgMzAsCiAJCQkJICAgICAgUFQzMl9ST09UX0xFVkVMLCAhaXNfcGFnaW5nKHZjcHUpLAotCQkJCSAgICAgIEFDQ19BTEwsIE5VTEwsIE5VTEwpOworCQkJCSAgICAgIEFDQ19BTEwsIE5VTEwpOwogCQlyb290ID0gX19wYShzcC0+c3B0KTsKIAkJKytzcC0+cm9vdF9jb3VudDsKIAkJdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbaV0gPSByb290IHwgUFRfUFJFU0VOVF9NQVNLOwpAQCAtMTE3Miw3ICsxMTg4LDcgQEAKIAogc3RhdGljIHZvaWQgcGFnaW5nX25ld19jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXBncHJpbnRrKCIlczogY3IzICVseFxuIiwgX19GVU5DVElPTl9fLCB2Y3B1LT5jcjMpOworCXBncHJpbnRrKCIlczogY3IzICVseFxuIiwgX19GVU5DVElPTl9fLCB2Y3B1LT5hcmNoLmNyMyk7CiAJbW11X2ZyZWVfcm9vdHModmNwdSk7CiB9CiAKQEAgLTEzNjIsNiArMTM3OCw3IEBACiAJZ2ZuX3QgZ2ZuOwogCWludCByOwogCXU2NCBncHRlID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCWlmIChieXRlcyAhPSA0ICYmIGJ5dGVzICE9IDgpCiAJCXJldHVybjsKQEAgLTEzODksOCArMTQwNiwxMyBAQAogCWlmICghaXNfcHJlc2VudF9wdGUoZ3B0ZSkpCiAJCXJldHVybjsKIAlnZm4gPSAoZ3B0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgZ2ZuKTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCiAJdmNwdS0+YXJjaC51cGRhdGVfcHRlLmdmbiA9IGdmbjsKLQl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUucGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgZ2ZuKTsKKwl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUucGFnZSA9IHBhZ2U7CiB9CiAKIHZvaWQga3ZtX21tdV9wdGVfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCkBAIC0xNDk2LDkgKzE1MTgsOSBAQAogCWdwYV90IGdwYTsKIAlpbnQgcjsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBndmEpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAogCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJciA9IGt2bV9tbXVfdW5wcm90ZWN0X3BhZ2UodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDAzYmE4NjAuLmVjYzA4NTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC05MSw3ICs5MSwxMCBAQAogCXB0X2VsZW1lbnRfdCAqdGFibGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJcGFnZSA9IGdmbl90b19wYWdlKGt2bSwgdGFibGVfZ2ZuKTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCiAJdGFibGUgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAKIAlyZXQgPSBDTVBYQ0hHKCZ0YWJsZVtpbmRleF0sIG9yaWdfcHRlLCBuZXdfcHRlKTsKQEAgLTE0MCw3ICsxNDMsNyBAQAogCX0KICNlbmRpZgogCUFTU0VSVCgoIWlzX2xvbmdfbW9kZSh2Y3B1KSAmJiBpc19wYWUodmNwdSkpIHx8Ci0JICAgICAgICh2Y3B1LT5jcjMgJiBDUjNfTk9OUEFFX1JFU0VSVkVEX0JJVFMpID09IDApOworCSAgICAgICAodmNwdS0+YXJjaC5jcjMgJiBDUjNfTk9OUEFFX1JFU0VSVkVEX0JJVFMpID09IDApOwogCiAJcHRfYWNjZXNzID0gQUNDX0FMTDsKIApAQCAtMjk3LDcgKzMwMCw2IEBACiAJCXU2NCBzaGFkb3dfcHRlOwogCQlpbnQgbWV0YXBoeXNpY2FsOwogCQlnZm5fdCB0YWJsZV9nZm47Ci0JCWJvb2wgbmV3X3BhZ2UgPSAwOwogCiAJCXNoYWRvd19lbnQgPSAoKHU2NCAqKV9fdmEoc2hhZG93X2FkZHIpKSArIGluZGV4OwogCQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkKQEAgLTMxOSw4ICszMjEsOCBAQAogCQl9CiAJCXNoYWRvd19wYWdlID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCB0YWJsZV9nZm4sIGFkZHIsIGxldmVsLTEsCiAJCQkJCSAgICAgICBtZXRhcGh5c2ljYWwsIGFjY2VzcywKLQkJCQkJICAgICAgIHNoYWRvd19lbnQsICZuZXdfcGFnZSk7Ci0JCWlmIChuZXdfcGFnZSAmJiAhbWV0YXBoeXNpY2FsKSB7CisJCQkJCSAgICAgICBzaGFkb3dfZW50KTsKKwkJaWYgKCFtZXRhcGh5c2ljYWwpIHsKIAkJCWludCByOwogCQkJcHRfZWxlbWVudF90IGN1cnJfcHRlOwogCQkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sCkBAIC0zNzgsNyArMzgwLDcgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCS8qCiAJICogTG9vayB1cCB0aGUgc2hhZG93IHB0ZSBmb3IgdGhlIGZhdWx0aW5nIGFkZHJlc3MuCiAJICovCkBAIC0zOTIsMTEgKzM5NCwxMyBAQAogCQlwZ3ByaW50aygiJXM6IGd1ZXN0IHBhZ2UgZmF1bHRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWluamVjdF9wYWdlX2ZhdWx0KHZjcHUsIGFkZHIsIHdhbGtlci5lcnJvcl9jb2RlKTsKIAkJdmNwdS0+YXJjaC5sYXN0X3B0X3dyaXRlX2NvdW50ID0gMDsgLyogcmVzZXQgZm9yayBkZXRlY3RvciAqLwotCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJcGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgd2Fsa2VyLmdmbik7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CkBAIC00MTMsMTQgKzQxNywxNCBAQAogCSAqLwogCWlmIChzaGFkb3dfcHRlICYmIGlzX2lvX3B0ZSgqc2hhZG93X3B0ZSkpIHsKIAkJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwotCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CiAJa3ZtX21tdV9hdWRpdCh2Y3B1LCAicG9zdCBwYWdlIGZhdWx0IChmaXhlZCkiKTsKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCiAJcmV0dXJuIHdyaXRlX3B0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IGRlNzU1Y2IuLjFhNTgyZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTc5Miw2ICs3OTIsMTAgQEAKIAl2Y3B1LT5hcmNoLmNyMCA9IGNyMDsKIAljcjAgfD0gWDg2X0NSMF9QRyB8IFg4Nl9DUjBfV1A7CiAJY3IwICY9IH4oWDg2X0NSMF9DRCB8IFg4Nl9DUjBfTlcpOworCWlmICghdmNwdS0+ZnB1X2FjdGl2ZSkgeworCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0gKDEgPDwgTk1fVkVDVE9SKTsKKwkJY3IwIHw9IFg4Nl9DUjBfVFM7CisJfQogCXN2bS0+dm1jYi0+c2F2ZS5jcjAgPSBjcjA7CiB9CiAKQEAgLTEwOTYsNiArMTEwMCwyNCBAQAogCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgogCQkqZGF0YSA9IHN2bS0+dm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3A7CiAJCWJyZWFrOworCS8qIE5vYm9keSB3aWxsIGNoYW5nZSB0aGUgZm9sbG93aW5nIDUgdmFsdWVzIGluIHRoZSBWTUNCIHNvCisJICAgd2UgY2FuIHNhZmVseSByZXR1cm4gdGhlbSBvbiByZG1zci4gVGhleSB3aWxsIGFsd2F5cyBiZSAwCisJICAgdW50aWwgTEJSViBpcyBpbXBsZW1lbnRlZC4gKi8KKwljYXNlIE1TUl9JQTMyX0RFQlVHQ1RMTVNSOgorCQkqZGF0YSA9IHN2bS0+dm1jYi0+c2F2ZS5kYmdjdGw7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfTEFTVEJSQU5DSEZST01JUDoKKwkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUuYnJfZnJvbTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9MQVNUQlJBTkNIVE9JUDoKKwkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUuYnJfdG87CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfTEFTVElOVEZST01JUDoKKwkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUubGFzdF9leGNwX2Zyb207CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6CisJCSpkYXRhID0gc3ZtLT52bWNiLT5zYXZlLmxhc3RfZXhjcF90bzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGt2bV9nZXRfbXNyX2NvbW1vbih2Y3B1LCBlY3gsIGRhdGEpOwogCX0KQEAgLTExNTYsNiArMTE3OCwxMCBAQAogCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgogCQlzdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwID0gZGF0YTsKIAkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9ERUJVR0NUTE1TUjoKKwkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfREVCVUdDVExNU1IgMHglbGx4LCBub3BcbiIsCisJCQkJX19GVU5DVElPTl9fLCBkYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBNU1JfSzdfRVZOVFNFTDA6CiAJY2FzZSBNU1JfSzdfRVZOVFNFTDE6CiAJY2FzZSBNU1JfSzdfRVZOVFNFTDI6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14LmMKaW5kZXggYWQzNjQ0Ny4uOGUxNDYyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5jCisrKyBiL2FyY2gveDg2L2t2bS92bXguYwpAQCAtMzQ5LDggKzM0OSw2IEBACiAKIHN0YXRpYyB2b2lkIHJlbG9hZF90c3Modm9pZCkKIHsKLSNpZm5kZWYgQ09ORklHX1g4Nl82NAotCiAJLyoKIAkgKiBWVCByZXN0b3JlcyBUUiBidXQgbm90IGl0cyBzaXplLiAgVXNlbGVzcy4KIAkgKi8KQEAgLTM2MSw3ICszNTksNiBAQAogCWRlc2NzID0gKHZvaWQgKilnZHQuYmFzZTsKIAlkZXNjc1tHRFRfRU5UUllfVFNTXS50eXBlID0gOTsgLyogYXZhaWxhYmxlIFRTUyAqLwogCWxvYWRfVFJfZGVzYygpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGxvYWRfdHJhbnNpdGlvbl9lZmVyKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQpAQCAtNjM4LDYgKzYzNSw3IEBACiB7CiAJaW50IHNhdmVfbm1zcnM7CiAKKwl2bXhfbG9hZF9ob3N0X3N0YXRlKHZteCk7CiAJc2F2ZV9ubXNycyA9IDA7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmIChpc19sb25nX21vZGUoJnZteC0+dmNwdSkpIHsKQEAgLTE0MzUsNyArMTQzMyw3IEBACiAJaW50IHJldCA9IDA7CiAJaW50IHI7CiAKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZG93bl9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOwogCXIgPSBrdm1fY2xlYXJfZ3Vlc3RfcGFnZShrdm0sIGZuLCAwLCBQQUdFX1NJWkUpOwogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0xNDU4LDcgKzE0NTYsNyBAQAogCiAJcmV0ID0gMTsKIG91dDoKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXVwX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ3Nyw3ICsxNDc1LDcgQEAKIAlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uIGt2bV91c2Vyc3BhY2VfbWVtOwogCWludCByID0gMDsKIAotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAlpZiAoa3ZtLT5hcmNoLmFwaWNfYWNjZXNzX3BhZ2UpCiAJCWdvdG8gb3V0OwogCWt2bV91c2Vyc3BhY2VfbWVtLnNsb3QgPSBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVDsKQEAgLTE0ODcsOSArMTQ4NSwxMiBAQAogCXIgPSBfX2t2bV9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sICZrdm1fdXNlcnNwYWNlX21lbSwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OworCisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWt2bS0+YXJjaC5hcGljX2FjY2Vzc19wYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCAweGZlZTAwKTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogb3V0OgotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwogfQogCkBAIC0xNjAyLDkgKzE2MDMsNiBAQAogCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH4wVUwpOwogCXZtY3Nfd3JpdGVsKENSNF9HVUVTVF9IT1NUX01BU0ssIEtWTV9HVUVTVF9DUjRfTUFTSyk7CiAKLQlpZiAodm1fbmVlZF92aXJ0dWFsaXplX2FwaWNfYWNjZXNzZXModm14LT52Y3B1Lmt2bSkpCi0JCWlmIChhbGxvY19hcGljX2FjY2Vzc19wYWdlKHZteC0+dmNwdS5rdm0pICE9IDApCi0JCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUzNCw2ICsyNTMyLDkgQEAKIAlwdXRfY3B1KCk7CiAJaWYgKGVycikKIAkJZ290byBmcmVlX3ZtY3M7CisJaWYgKHZtX25lZWRfdmlydHVhbGl6ZV9hcGljX2FjY2Vzc2VzKGt2bSkpCisJCWlmIChhbGxvY19hcGljX2FjY2Vzc19wYWdlKGt2bSkgIT0gMCkKKwkJCWdvdG8gZnJlZV92bWNzOwogCiAJcmV0dXJuICZ2bXgtPnZjcHU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBjZjUzMDgxLi42YjAxNTUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC00Niw2ICs0Niw5IEBACiAjZGVmaW5lIFZNX1NUQVQoeCkgb2Zmc2V0b2Yoc3RydWN0IGt2bSwgc3RhdC54KSwgS1ZNX1NUQVRfVk0KICNkZWZpbmUgVkNQVV9TVEFUKHgpIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgc3RhdC54KSwgS1ZNX1NUQVRfVkNQVQogCitzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZChzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCisJCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcyk7CisKIHN0cnVjdCBrdm1feDg2X29wcyAqa3ZtX3g4Nl9vcHM7CiAKIHN0cnVjdCBrdm1fc3RhdHNfZGVidWdmc19pdGVtIGRlYnVnZnNfZW50cmllc1tdID0gewpAQCAtMTgxLDcgKzE4NCw3IEBACiAJaW50IHJldDsKIAl1NjQgcGRwdGVbQVJSQVlfU0laRSh2Y3B1LT5hcmNoLnBkcHRycyldOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlyZXQgPSBrdm1fcmVhZF9ndWVzdF9wYWdlKHZjcHUtPmt2bSwgcGRwdF9nZm4sIHBkcHRlLAogCQkJCSAgb2Zmc2V0ICogc2l6ZW9mKHU2NCksIHNpemVvZihwZHB0ZSkpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xOTgsNyArMjAxLDcgQEAKIAogCW1lbWNweSh2Y3B1LT5hcmNoLnBkcHRycywgcGRwdGUsIHNpemVvZih2Y3B1LT5hcmNoLnBkcHRycykpOwogb3V0OgotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTIsMTMgKzIxNSwxMyBAQAogCWlmIChpc19sb25nX21vZGUodmNwdSkgfHwgIWlzX3BhZSh2Y3B1KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCB2Y3B1LT5hcmNoLmNyMyAmIH4zMXUsIHBkcHRlLCBzaXplb2YocGRwdGUpKTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCWNoYW5nZWQgPSBtZW1jbXAocGRwdGUsIHZjcHUtPmFyY2gucGRwdHJzLCBzaXplb2YocGRwdGUpKSAhPSAwOwogb3V0OgotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAogCXJldHVybiBjaGFuZ2VkOwogfQpAQCAtMzU2LDcgKzM1OSw3IEBACiAJCSAqLwogCX0KIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJLyoKIAkgKiBEb2VzIHRoZSBuZXcgY3IzIHZhbHVlIG1hcCB0byBwaHlzaWNhbCBtZW1vcnk/IChOb3RlLCB3ZQogCSAqIGNhdGNoIGFuIGludmFsaWQgY3IzIGV2ZW4gaW4gcmVhbC1tb2RlLCBiZWNhdXNlIGl0IHdvdWxkCkBAIC0zNzIsNyArMzc1LDcgQEAKIAkJdmNwdS0+YXJjaC5jcjMgPSBjcjM7CiAJCXZjcHUtPmFyY2gubW11Lm5ld19jcjModmNwdSk7CiAJfQotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNldF9jcjMpOwogCkBAIC00ODQsNiArNDg3LDEwIEBACiAJCXByX3VuaW1wbCh2Y3B1LCAiJXM6IE1TUl9JQTMyX01DR19TVEFUVVMgMHglbGx4LCBub3BcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGRhdGEpOwogCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX01DR19DVEw6CisJCXByX3VuaW1wbCh2Y3B1LCAiJXM6IE1TUl9JQTMyX01DR19DVEwgMHglbGx4LCBub3BcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGRhdGEpOworCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1dSSVRFOgogCWNhc2UgMHgyMDAgLi4uIDB4MmZmOiAvKiBNVFJScyAqLwpAQCAtNTI2LDYgKzUzMyw3IEBACiAJY2FzZSBNU1JfSUEzMl9NQzBfQ1RMOgogCWNhc2UgTVNSX0lBMzJfTUNHX1NUQVRVUzoKIAljYXNlIE1TUl9JQTMyX01DR19DQVA6CisJY2FzZSBNU1JfSUEzMl9NQ0dfQ1RMOgogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0M6CiAJY2FzZSBNU1JfSUEzMl9NQzBfTUlTQys0OgogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrODoKQEAgLTcyNyw2ICs3MzUsMjQgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9HRVRfU1VQUE9SVEVEX0NQVUlEOiB7CisJCXN0cnVjdCBrdm1fY3B1aWQyIF9fdXNlciAqY3B1aWRfYXJnID0gYXJncDsKKwkJc3RydWN0IGt2bV9jcHVpZDIgY3B1aWQ7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY3B1aWQsIGNwdWlkX2FyZywgc2l6ZW9mIGNwdWlkKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2Rldl9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKCZjcHVpZCwKKwkJCWNwdWlkX2FyZy0+ZW50cmllcyk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoY3B1aWRfYXJnLCAmY3B1aWQsIHNpemVvZiBjcHVpZCkpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQlyID0gLUVJTlZBTDsKIAl9CkBAIC05NzQsOCArMTAwMCw3IEBACiAJcHV0X2NwdSgpOwogfQogCi1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKHN0cnVjdCBrdm0gKmt2bSwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAorc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2dldF9zdXBwb3J0ZWRfY3B1aWQoc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAogCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCiB7CiAJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmNwdWlkX2VudHJpZXM7CkBAIC0xMjA3LDEyICsxMjMyLDEyIEBACiAJaWYgKGt2bV9ucl9tbXVfcGFnZXMgPCBLVk1fTUlOX0FMTE9DX01NVV9QQUdFUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAKIAlrdm1fbW11X2NoYW5nZV9tbXVfcGFnZXMoa3ZtLCBrdm1fbnJfbW11X3BhZ2VzKTsKIAlrdm0tPmFyY2gubl9yZXF1ZXN0ZWRfbW11X3BhZ2VzID0ga3ZtX25yX21tdV9wYWdlczsKIAotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjYxLDcgKzEyODYsNyBAQAogCSAgICA8IGFsaWFzLT50YXJnZXRfcGh5c19hZGRyKQogCQlnb3RvIG91dDsKIAotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAogCXAgPSAma3ZtLT5hcmNoLmFsaWFzZXNbYWxpYXMtPnNsb3RdOwogCXAtPmJhc2VfZ2ZuID0gYWxpYXMtPmd1ZXN0X3BoeXNfYWRkciA+PiBQQUdFX1NISUZUOwpAQCAtMTI3NSw3ICsxMzAwLDcgQEAKIAogCWt2bV9tbXVfemFwX2FsbChrdm0pOwogCi0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTM1MSw3ICsxMzc2LDcgQEAKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OwogCWludCBpc19kaXJ0eSA9IDA7CiAKLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAKIAlyID0ga3ZtX2dldF9kaXJ0eV9sb2coa3ZtLCBsb2csICZpc19kaXJ0eSk7CiAJaWYgKHIpCkBAIC0xMzY3LDcgKzEzOTIsNyBAQAogCX0KIAlyID0gMDsKIG91dDoKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTQ4NywyNCArMTUxMiw2IEBACiAJCXIgPSAwOwogCQlicmVhazsKIAl9Ci0JY2FzZSBLVk1fR0VUX1NVUFBPUlRFRF9DUFVJRDogewotCQlzdHJ1Y3Qga3ZtX2NwdWlkMiBfX3VzZXIgKmNwdWlkX2FyZyA9IGFyZ3A7Ci0JCXN0cnVjdCBrdm1fY3B1aWQyIGNwdWlkOwotCi0JCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmNwdWlkLCBjcHVpZF9hcmcsIHNpemVvZiBjcHVpZCkpCi0JCQlnb3RvIG91dDsKLQkJciA9IGt2bV92bV9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKGt2bSwgJmNwdWlkLAotCQkJY3B1aWRfYXJnLT5lbnRyaWVzKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihjcHVpZF9hcmcsICZjcHVpZCwgc2l6ZW9mIGNwdWlkKSkKLQkJCWdvdG8gb3V0OwotCQlyID0gMDsKLQkJYnJlYWs7Ci0JfQogCWRlZmF1bHQ6CiAJCTsKIAl9CkBAIC0xNTYzLDcgKzE1NzAsNyBAQAogCXZvaWQgKmRhdGEgPSB2YWw7CiAJaW50IHIgPSBYODZFTVVMX0NPTlRJTlVFOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAl3aGlsZSAoYnl0ZXMpIHsKIAkJZ3BhX3QgZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKIAkJdW5zaWduZWQgb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7CkBAIC0xNTg1LDcgKzE1OTIsNyBAQAogCQlhZGRyICs9IHRvY29weTsKIAl9CiBvdXQ6Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW11bGF0b3JfcmVhZF9zdGQpOwpAQCAtMTYwNCw5ICsxNjExLDkgQEAKIAkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiAJfQogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAogCS8qIEZvciBBUElDIGFjY2VzcyB2bWV4aXQgKi8KIAlpZiAoKGdwYSAmIFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSkKQEAgLTE2NDQsMTQgKzE2NTEsMTQgQEAKIHsKIAlpbnQgcmV0OwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlyZXQgPSBrdm1fd3JpdGVfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIHZhbCwgYnl0ZXMpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIAlrdm1fbW11X3B0ZV93cml0ZSh2Y3B1LCBncGEsIHZhbCwgYnl0ZXMpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTY2Myw5ICsxNjcwLDkgQEAKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqbW1pb19kZXY7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAKIAlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkgewogCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgYWRkciwgMik7CkBAIC0xNzQyLDcgKzE3NDksNyBAQAogCQljaGFyICprYWRkcjsKIAkJdTY0IHZhbDsKIAotCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAkJZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKIAogCQlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSB8fApAQCAtMTc1MywxMyArMTc2MCwxNyBAQAogCQkJZ290byBlbXVsX3dyaXRlOwogCiAJCXZhbCA9ICoodTY0ICopbmV3OworCisJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJcGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOworCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCiAJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCQlzZXRfNjRiaXQoKHU2NCAqKShrYWRkciArIG9mZnNldF9pbl9wYWdlKGdwYSkpLCB2YWwpOwogCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAJCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGFnZSk7CiAJZW11bF93cml0ZToKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAl9CiAjZW5kaWYKIApAQCAtMjE1MiwxMCArMjE2MywxMCBAQAogCQlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgKytpKSB7Ci0JCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCQlwYWdlID0gZ3ZhX3RvX3BhZ2UodmNwdSwgYWRkcmVzcyArIGkgKiBQQUdFX1NJWkUpOwogCQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSA9IHBhZ2U7Ci0JCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJCWlmICghcGFnZSkgewogCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKIAkJCWZyZWVfcGlvX2d1ZXN0X3BhZ2VzKHZjcHUpOwpAQCAtMjQ3OCw4ICsyNDg5LDkgQEAKIAogCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBhcGljLT52YXBpY19hZGRyID4+IFBBR0VfU0hJRlQpOwotCXZjcHUtPmFyY2guYXBpYy0+dmFwaWNfcGFnZSA9IHBhZ2U7CiAJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXZjcHUtPmFyY2guYXBpYy0+dmFwaWNfcGFnZSA9IHBhZ2U7CiB9CiAKIHN0YXRpYyB2b2lkIHZhcGljX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjg2MSw4ICsyODczLDggQEAKIAlrdm1feDg2X29wcy0+ZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cyh2Y3B1KTsKIAogCW1tdV9yZXNldF9uZWVkZWQgfD0gdmNwdS0+YXJjaC5jcjAgIT0gc3JlZ3MtPmNyMDsKLQl2Y3B1LT5hcmNoLmNyMCA9IHNyZWdzLT5jcjA7CiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjAodmNwdSwgc3JlZ3MtPmNyMCk7CisJdmNwdS0+YXJjaC5jcjAgPSBzcmVncy0+Y3IwOwogCiAJbW11X3Jlc2V0X25lZWRlZCB8PSB2Y3B1LT5hcmNoLmNyNCAhPSBzcmVncy0+Y3I0OwogCWt2bV94ODZfb3BzLT5zZXRfY3I0KHZjcHUsIHNyZWdzLT5jcjQpOwpAQCAtMjk1Miw5ICsyOTY0LDkgQEAKIAlncGFfdCBncGE7CiAKIAl2Y3B1X2xvYWQodmNwdSk7Ci0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIHZhZGRyKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJdHItPnBoeXNpY2FsX2FkZHJlc3MgPSBncGE7CiAJdHItPnZhbGlkID0gZ3BhICE9IFVOTUFQUEVEX0dWQTsKIAl0ci0+d3JpdGVhYmxlID0gMTsKQEAgLTMyMjcsMTEgKzMyMzksMTMgQEAKIAkgKi8KIAlpZiAoIXVzZXJfYWxsb2MpIHsKIAkJaWYgKG5wYWdlcyAmJiAhb2xkLnJtYXApIHsKKwkJCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCQltZW1zbG90LT51c2Vyc3BhY2VfYWRkciA9IGRvX21tYXAoTlVMTCwgMCwKIAkJCQkJCSAgICAgbnBhZ2VzICogUEFHRV9TSVpFLAogCQkJCQkJICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJCQkJICAgICBNQVBfU0hBUkVEIHwgTUFQX0FOT05ZTU9VUywKIAkJCQkJCSAgICAgMCk7CisJCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCQkJaWYgKElTX0VSUigodm9pZCAqKW1lbXNsb3QtPnVzZXJzcGFjZV9hZGRyKSkKIAkJCQlyZXR1cm4gUFRSX0VSUigodm9pZCAqKW1lbXNsb3QtPnVzZXJzcGFjZV9hZGRyKTsKQEAgLTMyMzksOCArMzI1MywxMCBAQAogCQkJaWYgKCFvbGQudXNlcl9hbGxvYyAmJiBvbGQucm1hcCkgewogCQkJCWludCByZXQ7CiAKKwkJCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQkJCXJldCA9IGRvX211bm1hcChjdXJyZW50LT5tbSwgb2xkLnVzZXJzcGFjZV9hZGRyLAogCQkJCQkJb2xkLm5wYWdlcyAqIFBBR0VfU0laRSk7CisJCQkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCQkJaWYgKHJldCA8IDApCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkgICAgICAgImt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X3JlZ2lvbjogIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggNWFmZGRlNC4uYWY2NWIyZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC0xMCwyMSArMTAsMTkgQEAKICAqIChzdWNoIGFzIHRoZSBleGFtcGxlIGluIERvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jKSBpcyBjYWxsZWQgdGhlCiAgKiBMYXVuY2hlci4KICAqCi0gKiBTZWNvbmRseSwgd2Ugb25seSBydW4gc3BlY2lhbGx5IG1vZGlmaWVkIEd1ZXN0cywgbm90IG5vcm1hbCBrZXJuZWxzLiAgV2hlbgotICogeW91IHNldCBDT05GSUdfTEdVRVNUIHRvICd5JyBvciAnbScsIHRoaXMgYXV0b21hdGljYWxseSBzZXRzCi0gKiBDT05GSUdfTEdVRVNUX0dVRVNUPXksIHdoaWNoIGNvbXBpbGVzIHRoaXMgZmlsZSBpbnRvIHRoZSBrZXJuZWwgc28gaXQga25vd3MKLSAqIGhvdyB0byBiZSBhIEd1ZXN0LiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIHRoZSBzYW1lIGtlcm5lbCB5b3UgYm9vdAotICogbm9ybWFsbHkgKGllLiBhcyBhIEhvc3QpIGFzIGEgR3Vlc3QuCisgKiBTZWNvbmRseSwgd2Ugb25seSBydW4gc3BlY2lhbGx5IG1vZGlmaWVkIEd1ZXN0cywgbm90IG5vcm1hbCBrZXJuZWxzOiBzZXR0aW5nCisgKiBDT05GSUdfTEdVRVNUX0dVRVNUIHRvICJ5IiBjb21waWxlcyB0aGlzIGZpbGUgaW50byB0aGUga2VybmVsIHNvIGl0IGtub3dzCisgKiBob3cgdG8gYmUgYSBHdWVzdCBhdCBib290IHRpbWUuICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiB1c2UgdGhlIHNhbWUga2VybmVsCisgKiB5b3UgYm9vdCBub3JtYWxseSAoaWUuIGFzIGEgSG9zdCkgYXMgYSBHdWVzdC4KICAqCiAgKiBUaGVzZSBHdWVzdHMga25vdyB0aGF0IHRoZXkgY2Fubm90IGRvIHByaXZpbGVnZWQgb3BlcmF0aW9ucywgc3VjaCBhcyBkaXNhYmxlCiAgKiBpbnRlcnJ1cHRzLCBhbmQgdGhhdCB0aGV5IGhhdmUgdG8gYXNrIHRoZSBIb3N0IHRvIGRvIHN1Y2ggdGhpbmdzIGV4cGxpY2l0bHkuCiAgKiBUaGlzIGZpbGUgY29uc2lzdHMgb2YgYWxsIHRoZSByZXBsYWNlbWVudHMgZm9yIHN1Y2ggbG93LWxldmVsIG5hdGl2ZQogICogaGFyZHdhcmUgb3BlcmF0aW9uczogdGhlc2Ugc3BlY2lhbCBHdWVzdCB2ZXJzaW9ucyBjYWxsIHRoZSBIb3N0LgogICoKLSAqIFNvIGhvdyBkb2VzIHRoZSBrZXJuZWwga25vdyBpdCdzIGEgR3Vlc3Q/ICBUaGUgR3Vlc3Qgc3RhcnRzIGF0IGEgc3BlY2lhbAotICogZW50cnkgcG9pbnQgbWFya2VkIHdpdGggYSBtYWdpYyBzdHJpbmcsIHdoaWNoIHNldHMgdXAgYSBmZXcgdGhpbmdzIHRoZW4KLSAqIGNhbGxzIGhlcmUuICBXZSByZXBsYWNlIHRoZSBuYXRpdmUgZnVuY3Rpb25zIHZhcmlvdXMgInBhcmF2aXJ0IiBzdHJ1Y3R1cmVzCi0gKiB3aXRoIG91ciBHdWVzdCB2ZXJzaW9ucywgdGhlbiBib290IGxpa2Ugbm9ybWFsLiA6Ki8KKyAqIFNvIGhvdyBkb2VzIHRoZSBrZXJuZWwga25vdyBpdCdzIGEgR3Vlc3Q/ICBXZSdsbCBzZWUgdGhhdCBsYXRlciwgYnV0IGxldCdzCisgKiBqdXN0IHNheSB0aGF0IHdlIGVuZCB1cCBoZXJlIHdoZXJlIHdlIHJlcGxhY2UgdGhlIG5hdGl2ZSBmdW5jdGlvbnMgdmFyaW91cworICogInBhcmF2aXJ0IiBzdHJ1Y3R1cmVzIHdpdGggb3VyIEd1ZXN0IHZlcnNpb25zLCB0aGVuIGJvb3QgbGlrZSBub3JtYWwuIDoqLwogCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCBSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5jb20uYXU+IElCTSBDb3Jwb3JhdGlvbi4KQEAgLTU3LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sZ3Vlc3RfbGF1bmNoZXIuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8YXNtL2xndWVzdC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC03NSwxNSArNzQsNiBAQAogICogYmVoYXZpbmcgaW4gc2ltcGxpZmllZCBidXQgZXF1aXZhbGVudCB3YXlzLiAgSW4gcGFydGljdWxhciwgdGhlIEd1ZXN0IGlzIHRoZQogICogc2FtZSBrZXJuZWwgYXMgdGhlIEhvc3QgKG9yIGF0IGxlYXN0LCBidWlsdCBmcm9tIHRoZSBzYW1lIHNvdXJjZSBjb2RlKS4gOiovCiAKLS8qIERlY2xhcmF0aW9ucyBmb3IgZGVmaW5pdGlvbnMgaW4gbGd1ZXN0X2d1ZXN0LlMgKi8KLWV4dGVybiBjaGFyIGxndWVzdF9ub2lycV9zdGFydFtdLCBsZ3Vlc3Rfbm9pcnFfZW5kW107Ci1leHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X2NsaVtdLCBsZ2VuZF9jbGlbXTsKLWV4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfc3RpW10sIGxnZW5kX3N0aVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgbGdzdGFydF9wb3BmW10sIGxnZW5kX3BvcGZbXTsKLWV4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfcHVzaGZbXSwgbGdlbmRfcHVzaGZbXTsKLWV4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfaXJldFtdLCBsZ2VuZF9pcmV0W107Ci1leHRlcm4gdm9pZCBsZ3Vlc3RfaXJldCh2b2lkKTsKLQogc3RydWN0IGxndWVzdF9kYXRhIGxndWVzdF9kYXRhID0gewogCS5oY2FsbF9zdGF0dXMgPSB7IFswIC4uLiBMSENBTExfUklOR19TSVpFLTFdID0gMHhGRiB9LAogCS5ub2lycV9zdGFydCA9ICh1MzIpbGd1ZXN0X25vaXJxX3N0YXJ0LApAQCAtOTIsNyArODIsNiBAQAogCS5ibG9ja2VkX2ludGVycnVwdHMgPSB7IDEgfSwgLyogQmxvY2sgdGltZXIgaW50ZXJydXB0cyAqLwogCS5zeXNjYWxsX3ZlYyA9IFNZU0NBTExfVkVDVE9SLAogfTsKLXN0YXRpYyBjeWNsZV90IGNsb2NrX2Jhc2U7CiAKIC8qRzowMzcgYXN5bmNfaGNhbGwoKSBpcyBwcmV0dHkgc2ltcGxlOiBJJ20gcXVpdGUgcHJvdWQgb2YgaXQgcmVhbGx5LiAgV2UgaGF2ZSBhCiAgKiByaW5nIGJ1ZmZlciBvZiBzdG9yZWQgaHlwZXJjYWxscyB3aGljaCB0aGUgSG9zdCB3aWxsIHJ1biB0aG91Z2ggbmV4dCB0aW1lIHdlCkBAIC0xNDMsNyArMTMyLDcgQEAKICAqIGxndWVzdF9sZWF2ZV9sYXp5X21vZGUoKS4KICAqCiAgKiBTbywgd2hlbiB3ZSdyZSBpbiBsYXp5IG1vZGUsIHdlIGNhbGwgYXN5bmNfaGNhbGwoKSB0byBzdG9yZSB0aGUgY2FsbCBmb3IKLSAqIGZ1dHVyZSBwcm9jZXNzaW5nLiAqLworICogZnV0dXJlIHByb2Nlc3Npbmc6ICovCiBzdGF0aWMgdm9pZCBsYXp5X2hjYWxsKHVuc2lnbmVkIGxvbmcgY2FsbCwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKQEAgLTE1Niw3ICsxNDUsNyBAQAogfQogCiAvKiBXaGVuIGxhenkgbW9kZSBpcyB0dXJuZWQgb2ZmIHJlc2V0IHRoZSBwZXItY3B1IGxhenkgbW9kZSB2YXJpYWJsZSBhbmQgdGhlbgotICogaXNzdWUgYSBoeXBlcmNhbGwgdG8gZmx1c2ggYW55IHN0b3JlZCBjYWxscy4gKi8KKyAqIGlzc3VlIHRoZSBkby1ub3RoaW5nIGh5cGVyY2FsbCB0byBmbHVzaCBhbnkgc3RvcmVkIGNhbGxzLiAqLwogc3RhdGljIHZvaWQgbGd1ZXN0X2xlYXZlX2xhenlfbW9kZSh2b2lkKQogewogCXBhcmF2aXJ0X2xlYXZlX2xhenkocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpKTsKQEAgLTE3Myw3ICsxNjIsNyBAQAogICoKICAqIFNvIGluc3RlYWQgd2Uga2VlcCBhbiAiaXJxX2VuYWJsZWQiIGZpZWxkIGluc2lkZSBvdXIgInN0cnVjdCBsZ3Vlc3RfZGF0YSIsCiAgKiB3aGljaCB0aGUgR3Vlc3QgY2FuIHVwZGF0ZSB3aXRoIGEgc2luZ2xlIGluc3RydWN0aW9uLiAgVGhlIEhvc3Qga25vd3MgdG8KLSAqIGNoZWNrIHRoZXJlIHdoZW4gaXQgd2FudHMgdG8gZGVsaXZlciBhbiBpbnRlcnJ1cHQuCisgKiBjaGVjayB0aGVyZSBiZWZvcmUgaXQgdHJpZXMgdG8gZGVsaXZlciBhbiBpbnRlcnJ1cHQuCiAgKi8KIAogLyogc2F2ZV9mbGFncygpIGlzIGV4cGVjdGVkIHRvIHJldHVybiB0aGUgcHJvY2Vzc29yIHN0YXRlIChpZS4gImZsYWdzIikuICBUaGUKQEAgLTIwNSwxMCArMTk0LDE1IEBACiAvKk06MDAzIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayBmb3Igb3V0c3RhbmRpbmcgaW50ZXJydXB0cyB3aGVuIHdlIHJlLWVuYWJsZQogICogdGhlbSAob3Igd2hlbiB3ZSB1bm1hc2sgYW4gaW50ZXJydXB0KS4gIFRoaXMgc2VlbXMgdG8gd29yayBmb3IgdGhlIG1vbWVudCwKICAqIHNpbmNlIGludGVycnVwdHMgYXJlIHJhcmUgYW5kIHdlJ2xsIGp1c3QgZ2V0IHRoZSBpbnRlcnJ1cHQgb24gdGhlIG5leHQgdGltZXIKLSAqIHRpY2ssIGJ1dCB3aGVuIHdlIHR1cm4gb24gQ09ORklHX05PX0haLCB3ZSBzaG91bGQgcmV2aXNpdCB0aGlzLiAgT25lIHdheQorICogdGljaywgYnV0IG5vdyB3ZSBjYW4gcnVuIHdpdGggQ09ORklHX05PX0haLCB3ZSBzaG91bGQgcmV2aXNpdCB0aGlzLiAgT25lIHdheQogICogd291bGQgYmUgdG8gcHV0IHRoZSAiaXJxX2VuYWJsZWQiIGZpZWxkIGluIGEgcGFnZSBieSBpdHNlbGYsIGFuZCBoYXZlIHRoZQogICogSG9zdCB3cml0ZS1wcm90ZWN0IGl0IHdoZW4gYW4gaW50ZXJydXB0IGNvbWVzIGluIHdoZW4gaXJxcyBhcmUgZGlzYWJsZWQuCi0gKiBUaGVyZSB3aWxsIHRoZW4gYmUgYSBwYWdlIGZhdWx0IGFzIHNvb24gYXMgaW50ZXJydXB0cyBhcmUgcmUtZW5hYmxlZC4gOiovCisgKiBUaGVyZSB3aWxsIHRoZW4gYmUgYSBwYWdlIGZhdWx0IGFzIHNvb24gYXMgaW50ZXJydXB0cyBhcmUgcmUtZW5hYmxlZC4KKyAqCisgKiBBIGJldHRlciBtZXRob2QgaXMgdG8gaW1wbGVtZW50IHNvZnQgaW50ZXJydXB0IGRpc2FibGUgZ2VuZXJhbGx5IGZvciB4ODY6CisgKiBpbnN0ZWFkIG9mIGRpc2FibGluZyBpbnRlcnJ1cHRzLCB3ZSBzZXQgYSBmbGFnLiAgSWYgYW4gaW50ZXJydXB0IGRvZXMgY29tZQorICogaW4sIHdlIHRoZW4gZGlzYWJsZSB0aGVtIGZvciByZWFsLiAgVGhpcyBpcyB1bmNvbW1vbiwgc28gd2UgY291bGQgc2ltcGx5IHVzZQorICogYSBoeXBlcmNhbGwgZm9yIGludGVycnVwdCBjb250cm9sIGFuZCBub3Qgd29ycnkgYWJvdXQgZWZmaWNpZW5jeS4gOiovCiAKIC8qRzowMzQKICAqIFRoZSBJbnRlcnJ1cHQgRGVzY3JpcHRvciBUYWJsZSAoSURUKS4KQEAgLTIyMSw2ICsyMTUsMTAgQEAKIHN0YXRpYyB2b2lkIGxndWVzdF93cml0ZV9pZHRfZW50cnkoZ2F0ZV9kZXNjICpkdCwKIAkJCQkgICBpbnQgZW50cnludW0sIGNvbnN0IGdhdGVfZGVzYyAqZykKIHsKKwkvKiBUaGUgZ2F0ZV9kZXNjIHN0cnVjdHVyZSBpcyA4IGJ5dGVzIGxvbmc6IHdlIGhhbmQgaXQgdG8gdGhlIEhvc3QgaW4KKwkgKiB0d28gMzItYml0IGNodW5rcy4gIFRoZSB3aG9sZSAzMi1iaXQga2VybmVsIHVzZWQgdG8gaGFuZCBkZXNjcmlwdG9ycworCSAqIGFyb3VuZCBsaWtlIHRoaXM7IHR5cGVzYWZldHkgd2Fzbid0IGEgYmlnIGNvbmNlcm4gaW4gTGludXgncyBlYXJseQorCSAqIHllYXJzLiAqLwogCXUzMiAqZGVzYyA9ICh1MzIgKilnOwogCS8qIEtlZXAgdGhlIGxvY2FsIGNvcHkgdXAgdG8gZGF0ZS4gKi8KIAluYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeW51bSwgZyk7CkBAIC0yNTIsNyArMjUwLDggQEAKICAqCiAgKiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgSURUIGNvZGUgd2hlcmUgd2UgaGF2ZSBhIExPQURfSURUX0VOVFJZCiAgKiBoeXBlcmNhbGwgYW5kIHVzZSB0aGF0IHJlcGVhdGVkbHkgdG8gbG9hZCBhIG5ldyBJRFQuICBJIGRvbid0IHRoaW5rIGl0Ci0gKiByZWFsbHkgbWF0dGVycywgYnV0IHdvdWxkbid0IGl0IGJlIG5pY2UgaWYgdGhleSB3ZXJlIHRoZSBzYW1lPworICogcmVhbGx5IG1hdHRlcnMsIGJ1dCB3b3VsZG4ndCBpdCBiZSBuaWNlIGlmIHRoZXkgd2VyZSB0aGUgc2FtZT8gIFdvdWxkbid0CisgKiBpdCBiZSBldmVuIGJldHRlciBpZiB5b3Ugd2VyZSB0aGUgb25lIHRvIHNlbmQgdGhlIHBhdGNoIHRvIGZpeCBpdD8KICAqLwogc3RhdGljIHZvaWQgbGd1ZXN0X2xvYWRfZ2R0KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZGVzYykKIHsKQEAgLTMwNyw5ICszMDYsOSBAQAogCiAvKiBUaGUgImNwdWlkIiBpbnN0cnVjdGlvbiBpcyBhIHdheSBvZiBxdWVyeWluZyBib3RoIHRoZSBDUFUgaWRlbnRpdHkKICAqIChtYW51ZmFjdHVyZXIsIG1vZGVsLCBldGMpIGFuZCBpdHMgZmVhdHVyZXMuICBJdCB3YXMgaW50cm9kdWNlZCBiZWZvcmUgdGhlCi0gKiBQZW50aXVtIGluIDE5OTMgYW5kIGtlZXBzIGdldHRpbmcgZXh0ZW5kZWQgYnkgYm90aCBJbnRlbCBhbmQgQU1ELiAgQXMgeW91Ci0gKiBtaWdodCBpbWFnaW5lLCBhZnRlciBhIGRlY2FkZSBhbmQgYSBoYWxmIHRoaXMgdHJlYXRtZW50LCBpdCBpcyBub3cgYSBnaWFudAotICogYmFsbCBvZiBoYWlyLiAgSXRzIGVudHJ5IGluIHRoZSBjdXJyZW50IEludGVsIG1hbnVhbCBydW5zIHRvIDI4IHBhZ2VzLgorICogUGVudGl1bSBpbiAxOTkzIGFuZCBrZWVwcyBnZXR0aW5nIGV4dGVuZGVkIGJ5IGJvdGggSW50ZWwsIEFNRCBhbmQgb3RoZXJzLgorICogQXMgeW91IG1pZ2h0IGltYWdpbmUsIGFmdGVyIGEgZGVjYWRlIGFuZCBhIGhhbGYgdGhpcyB0cmVhdG1lbnQsIGl0IGlzIG5vdyBhCisgKiBnaWFudCBiYWxsIG9mIGhhaXIuICBJdHMgZW50cnkgaW4gdGhlIGN1cnJlbnQgSW50ZWwgbWFudWFsIHJ1bnMgdG8gMjggcGFnZXMuCiAgKgogICogVGhpcyBpbnN0cnVjdGlvbiBldmVuIGl0IGhhcyBpdHMgb3duIFdpa2lwZWRpYSBlbnRyeS4gIFRoZSBXaWtpcGVkaWEgZW50cnkKICAqIGhhcyBiZWVuIHRyYW5zbGF0ZWQgaW50byA0IGxhbmd1YWdlcy4gIEkgYW0gbm90IG1ha2luZyB0aGlzIHVwIQpAQCAtMzM1LDggKzMzNCw4IEBACiAJY2FzZSAxOgkvKiBCYXNpYyBmZWF0dXJlIHJlcXVlc3QuICovCiAJCS8qIFdlIG9ubHkgYWxsb3cga2VybmVsIHRvIHNlZSBTU0UzLCBDTVBYQ0hHMTZCIGFuZCBTU1NFMyAqLwogCQkqY3ggJj0gMHgwMDAwMjIwMTsKLQkJLyogU1NFLCBTU0UyLCBGWFNSLCBNTVgsIENNT1YsIENNUFhDSEc4QiwgRlBVLiAqLwotCQkqZHggJj0gMHgwNzgwODEwMTsKKwkJLyogU1NFLCBTU0UyLCBGWFNSLCBNTVgsIENNT1YsIENNUFhDSEc4QiwgVFNDLCBGUFUuICovCisJCSpkeCAmPSAweDA3ODA4MTExOwogCQkvKiBUaGUgSG9zdCBjYW4gZG8gYSBuaWNlIG9wdGltaXphdGlvbiBpZiBpdCBrbm93cyB0aGF0IHRoZQogCQkgKiBrZXJuZWwgbWFwcGluZ3MgKGFkZHJlc3NlcyBhYm92ZSAweEMwMDAwMDAwIG9yIHdoYXRldmVyCiAJCSAqIFBBR0VfT0ZGU0VUIGlzIHNldCB0bykgaGF2ZW4ndCBjaGFuZ2VkLiAgQnV0IExpbnV4IGNhbGxzCkBAIC02MDMsMTkgKzYwMiwyNSBAQAogCXJldHVybiBsZ3Vlc3RfZGF0YS50aW1lLnR2X3NlYzsKIH0KIAorLyogVGhlIFRTQyBpcyBhbiBJbnRlbCB0aGluZyBjYWxsZWQgdGhlIFRpbWUgU3RhbXAgQ291bnRlci4gIFRoZSBIb3N0IHRlbGxzIHVzCisgKiB3aGF0IHNwZWVkIGl0IHJ1bnMgYXQsIG9yIDAgaWYgaXQncyB1bnVzYWJsZSBhcyBhIHJlbGlhYmxlIGNsb2NrIHNvdXJjZS4KKyAqIFRoaXMgbWF0Y2hlcyB3aGF0IHdlIHdhbnQgaGVyZTogaWYgd2UgcmV0dXJuIDAgZnJvbSB0aGlzIGZ1bmN0aW9uLCB0aGUgeDg2CisgKiBUU0MgY2xvY2sgd2lsbCBnaXZlIHVwIGFuZCBub3QgcmVnaXN0ZXIgaXRzZWxmLiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbGd1ZXN0X2NwdV9raHoodm9pZCkKK3sKKwlyZXR1cm4gbGd1ZXN0X2RhdGEudHNjX2toejsKK30KKworLyogSWYgd2UgY2FuJ3QgdXNlIHRoZSBUU0MsIHRoZSBrZXJuZWwgZmFsbHMgYmFjayB0byBvdXIgbG93ZXItcHJpb3JpdHkKKyAqICJsZ3Vlc3RfY2xvY2siLCB3aGVyZSB3ZSByZWFkIHRoZSB0aW1lIHZhbHVlIGdpdmVuIHRvIHVzIGJ5IHRoZSBIb3N0LiAqLwogc3RhdGljIGN5Y2xlX3QgbGd1ZXN0X2Nsb2NrX3JlYWQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNlYywgbnNlYzsKIAotCS8qIElmIHRoZSBIb3N0IHRlbGxzIHRoZSBUU0Mgc3BlZWQsIHdlIGNhbiB0cnVzdCB0aGF0LiAqLwotCWlmIChsZ3Vlc3RfZGF0YS50c2Nfa2h6KQotCQlyZXR1cm4gbmF0aXZlX3JlYWRfdHNjKCk7Ci0KLQkvKiBJZiB3ZSBjYW4ndCB1c2UgdGhlIFRTQywgd2UgcmVhZCB0aGUgdGltZSB2YWx1ZSB3cml0dGVuIGJ5IHRoZSBIb3N0LgotCSAqIFNpbmNlIGl0J3MgaW4gdHdvIHBhcnRzIChzZWNvbmRzIGFuZCBuYW5vc2Vjb25kcyksIHdlIHJpc2sgcmVhZGluZwotCSAqIGl0IGp1c3QgYXMgaXQncyBjaGFuZ2luZyBmcm9tIDk5ICYgMC45OTk5OTk5OTkgdG8gMTAwIGFuZCAwLCBhbmQKLQkgKiBnZXR0aW5nIDk5IGFuZCAwLiAgQXMgTGludXggdGVuZHMgdG8gY29tZSBhcGFydCB1bmRlciB0aGUgc3RyZXNzIG9mCi0JICogdGltZSB0cmF2ZWwsIHdlIG11c3QgYmUgY2FyZWZ1bDogKi8KKwkvKiBTaW5jZSB0aGUgdGltZSBpcyBpbiB0d28gcGFydHMgKHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzKSwgd2UgcmlzaworCSAqIHJlYWRpbmcgaXQganVzdCBhcyBpdCdzIGNoYW5naW5nIGZyb20gOTkgJiAwLjk5OTk5OTk5OSB0byAxMDAgYW5kIDAsCisJICogYW5kIGdldHRpbmcgOTkgYW5kIDAuICBBcyBMaW51eCB0ZW5kcyB0byBjb21lIGFwYXJ0IHVuZGVyIHRoZSBzdHJlc3MKKwkgKiBvZiB0aW1lIHRyYXZlbCwgd2UgbXVzdCBiZSBjYXJlZnVsOiAqLwogCWRvIHsKIAkJLyogRmlyc3Qgd2UgcmVhZCB0aGUgc2Vjb25kcyBwYXJ0LiAqLwogCQlzZWMgPSBsZ3Vlc3RfZGF0YS50aW1lLnR2X3NlYzsKQEAgLTYzMCwxNCArNjM1LDE0IEBACiAJCS8qIE5vdyBpZiB0aGUgc2Vjb25kcyBwYXJ0IGhhcyBjaGFuZ2VkLCB0cnkgYWdhaW4uICovCiAJfSB3aGlsZSAodW5saWtlbHkobGd1ZXN0X2RhdGEudGltZS50dl9zZWMgIT0gc2VjKSk7CiAKLQkvKiBPdXIgbm9uLVRTQyBjbG9jayBpcyBpbiByZWFsIG5hbm9zZWNvbmRzLiAqLworCS8qIE91ciBsZ3Vlc3QgY2xvY2sgaXMgaW4gcmVhbCBuYW5vc2Vjb25kcy4gKi8KIAlyZXR1cm4gc2VjKjEwMDAwMDAwMDBVTEwgKyBuc2VjOwogfQogCi0vKiBUaGlzIGlzIHdoYXQgd2UgdGVsbCB0aGUga2VybmVsIGlzIG91ciBjbG9ja3NvdXJjZS4gICovCisvKiBUaGlzIGlzIHRoZSBmYWxsYmFjayBjbG9ja3NvdXJjZTogbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgVFNDIGNsb2Nrc291cmNlLiAqLwogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBsZ3Vlc3RfY2xvY2sgPSB7CiAJLm5hbWUJCT0gImxndWVzdCIsCi0JLnJhdGluZwkJPSA0MDAsCisJLnJhdGluZwkJPSAyMDAsCiAJLnJlYWQJCT0gbGd1ZXN0X2Nsb2NrX3JlYWQsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCiAJLm11bHQJCT0gMSA8PCAyMiwKQEAgLTY0NSwyNCArNjUwLDIyIEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotLyogVGhlICJzY2hlZHVsZXIgY2xvY2siIGlzIGp1c3Qgb3VyIHJlYWwgY2xvY2ssIGFkanVzdGVkIHRvIHN0YXJ0IGF0IHplcm8gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbGd1ZXN0X3NjaGVkX2Nsb2NrKHZvaWQpCi17Ci0JcmV0dXJuIGN5YzJucygmbGd1ZXN0X2Nsb2NrLCBsZ3Vlc3RfY2xvY2tfcmVhZCgpIC0gY2xvY2tfYmFzZSk7Ci19Ci0KIC8qIFdlIGFsc28gbmVlZCBhICJzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIjogTGludXggYXNrcyB1cyB0byBzZXQgaXQgdG8gZ28KICAqIG9mZiBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS4gIEFjdHVhbGx5LCBKYW1lcyBNb3JyaXMgZmlndXJlZCBhbGwgdGhpcyBvdXQsIEkKICAqIGp1c3QgYXBwbGllZCB0aGUgcGF0Y2guICovCiBzdGF0aWMgaW50IGxndWVzdF9jbG9ja2V2ZW50X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQogeworCS8qIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoaXMgY2FuIGV2ZXIgaGFwcGVuLCBidXQgSmFtZXMgdGVsbHMgbWUgaGUgaGFkCisJICogdG8gcHV0IHRoaXMgY29kZSBpbi4gIE1heWJlIHdlIHNob3VsZCByZW1vdmUgaXQgbm93LiAgQW55b25lPyAqLwogCWlmIChkZWx0YSA8IExHX0NMT0NLX01JTl9ERUxUQSkgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzbWFsbCBkZWx0YSAlbHUgbnNcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBkZWx0YSk7CisJCQkgICAgICAgX19mdW5jX18sIGRlbHRhKTsKIAkJcmV0dXJuIC1FVElNRTsKIAl9CisKKwkvKiBQbGVhc2Ugd2FrZSB1cyB0aGlzIGZhciBpbiB0aGUgZnV0dXJlLiAqLwogCWhjYWxsKExIQ0FMTF9TRVRfQ0xPQ0tFVkVOVCwgZGVsdGEsIDAsIDApOwogCXJldHVybiAwOwogfQpAQCAtNzIwLDE5ICs3MjMsOCBAQAogCS8qIFNldCB1cCB0aGUgdGltZXIgaW50ZXJydXB0ICgwKSB0byBnbyB0byBvdXIgc2ltcGxlIHRpbWVyIHJvdXRpbmUgKi8KIAlzZXRfaXJxX2hhbmRsZXIoMCwgbGd1ZXN0X3RpbWVfaXJxKTsKIAotCS8qIE91ciBjbG9jayBzdHJ1Y3R1cmUgbG9va3MgbGlrZSBhcmNoL3g4Ni9rZXJuZWwvdHNjXzMyLmMgaWYgd2UgY2FuCi0JICogdXNlIHRoZSBUU0MsIG90aGVyd2lzZSBpdCdzIGEgZHVtYiBuYW5vc2Vjb25kLXJlc29sdXRpb24gY2xvY2suCi0JICogRWl0aGVyIHdheSwgdGhlICJyYXRpbmciIGlzIHNldCBzbyBoaWdoIHRoYXQgaXQncyBhbHdheXMgY2hvc2VuIG92ZXIKLQkgKiBhbnkgb3RoZXIgY2xvY2tzb3VyY2UuICovCi0JaWYgKGxndWVzdF9kYXRhLnRzY19raHopCi0JCWxndWVzdF9jbG9jay5tdWx0ID0gY2xvY2tzb3VyY2Vfa2h6Mm11bHQobGd1ZXN0X2RhdGEudHNjX2toeiwKLQkJCQkJCQkgbGd1ZXN0X2Nsb2NrLnNoaWZ0KTsKLQljbG9ja19iYXNlID0gbGd1ZXN0X2Nsb2NrX3JlYWQoKTsKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmbGd1ZXN0X2Nsb2NrKTsKIAotCS8qIE5vdyB3ZSd2ZSBzZXQgdXAgb3VyIGNsb2NrLCB3ZSBjYW4gdXNlIGl0IGFzIHRoZSBzY2hlZHVsZXIgY2xvY2sgKi8KLQlwdl90aW1lX29wcy5zY2hlZF9jbG9jayA9IGxndWVzdF9zY2hlZF9jbG9jazsKLQogCS8qIFdlIGNhbid0IHNldCBjcHVtYXNrIGluIHRoZSBpbml0aWFsaXplcjogZGFtbiBDIGxpbWl0YXRpb25zISAgU2V0IGl0CiAJICogaGVyZSBhbmQgcmVnaXN0ZXIgb3VyIHRpbWVyIGRldmljZS4gKi8KIAlsZ3Vlc3RfY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoMCk7CkBAIC03NTgsNyArNzUwLDcgQEAKICAqIHdpbGwgbm90IHRvbGVyYXRlIHVzIHRyeWluZyB0byB1c2UgdGhhdCksIHRoZSBzdGFjayBwb2ludGVyLCBhbmQgdGhlIG51bWJlcgogICogb2YgcGFnZXMgaW4gdGhlIHN0YWNrLiAqLwogc3RhdGljIHZvaWQgbGd1ZXN0X2xvYWRfc3AwKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsCi0JCQkJICAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQorCQkJICAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCiB7CiAJbGF6eV9oY2FsbChMSENBTExfU0VUX1NUQUNLLCBfX0tFUk5FTF9EU3wweDEsIHRocmVhZC0+c3AwLAogCQkgICBUSFJFQURfU0laRS9QQUdFX1NJWkUpOwpAQCAtODA2LDkgKzc5OCw4IEBACiAJaGNhbGwoTEhDQUxMX0hBTFQsIDAsIDAsIDApOwogfQogCi0vKiBQZXJoYXBzIENSQVNIIGlzbid0IHRoZSBiZXN0IG5hbWUgZm9yIHRoaXMgaHlwZXJjYWxsLCBidXQgd2UgdXNlIGl0IHRvIGdldCBhCi0gKiBtZXNzYWdlIG91dCB3aGVuIHdlJ3JlIGNyYXNoaW5nIGFzIHdlbGwgYXMgZWxlZ2FudCB0ZXJtaW5hdGlvbiBsaWtlIHBvd2VyaW5nCi0gKiBvZmYuCisvKiBUaGUgU0hVVERPV04gaHlwZXJjYWxsIHRha2VzIGEgc3RyaW5nIHRvIGRlc2NyaWJlIHdoYXQncyBoYXBwZW5pbmcsIGFuZAorICogYW4gYXJndW1lbnQgd2hpY2ggc2F5cyB3aGV0aGVyIHRoaXMgdG8gcmVzdGFydCAocmVib290KSB0aGUgR3Vlc3Qgb3Igbm90LgogICoKICAqIE5vdGUgdGhhdCB0aGUgSG9zdCBhbHdheXMgcHJlZmVycyB0aGF0IHRoZSBHdWVzdCBzcGVhayBpbiBwaHlzaWNhbCBhZGRyZXNzZXMKICAqIHJhdGhlciB0aGFuIHZpcnR1YWwgYWRkcmVzc2VzLCBzbyB3ZSB1c2UgX19wYSgpIGhlcmUuICovCkBAIC04MzYsOCArODI3LDkgQEAKIC8qIFNldHRpbmcgdXAgbWVtb3J5IGlzIGZhaXJseSBlYXN5LiAqLwogc3RhdGljIF9faW5pdCBjaGFyICpsZ3Vlc3RfbWVtb3J5X3NldHVwKHZvaWQpCiB7Ci0JLyogV2UgZG8gdGhpcyBoZXJlIGFuZCBub3QgZWFybGllciBiZWNhdXNlIGxvY2tjaGVjayBiYXJmcyBpZiB3ZSBkbyBpdAotCSAqIGJlZm9yZSBzdGFydF9rZXJuZWwoKSAqLworCS8qIFdlIGRvIHRoaXMgaGVyZSBhbmQgbm90IGVhcmxpZXIgYmVjYXVzZSBsb2NrY2hlY2sgdXNlZCB0byBiYXJmIGlmIHdlCisJICogZGlkIGl0IGJlZm9yZSBzdGFydF9rZXJuZWwoKS4gIEkgdGhpbmsgd2UgZml4ZWQgdGhhdCwgc28gaXQnZCBiZQorCSAqIG5pY2UgdG8gbW92ZSBpdCBiYWNrIHRvIGxndWVzdF9pbml0LiAgUGF0Y2ggd2VsY29tZS4uLiAqLwogCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOwogCiAJLyogVGhlIExpbnV4IGJvb3Rsb2FkZXIgaGVhZGVyIGNvbnRhaW5zIGFuICJlODIwIiBtZW1vcnkgbWFwOiB0aGUKQEAgLTg3MCwxMiArODYyLDE5IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorLyogUmVib290aW5nIGFsc28gdGVsbHMgdGhlIEhvc3Qgd2UncmUgZmluaXNoZWQsIGJ1dCB0aGUgUkVTVEFSVCBmbGFnIHRlbGxzIHRoZQorICogTGF1bmNoZXIgdG8gcmVib290IHVzLiAqLworc3RhdGljIHZvaWQgbGd1ZXN0X3Jlc3RhcnQoY2hhciAqcmVhc29uKQoreworCWhjYWxsKExIQ0FMTF9TSFVURE9XTiwgX19wYShyZWFzb24pLCBMR1VFU1RfU0hVVERPV05fUkVTVEFSVCwgMCk7Cit9CisKIC8qRzowNTAKICAqIFBhdGNoaW5nIChQb3dlcmZ1bGx5IFBsYWNhdGluZyBQZXJmb3JtYW5jZSBQZWRhbnRzKQogICoKLSAqIFdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoYXQgcHZfb3BzIHN0cnVjdHVyZXMgbGV0IHVzIHJlcGxhY2Ugc2ltcGxlCi0gKiBuYXRpdmUgaW5zdHJ1Y3Rpb25zIHdpdGggY2FsbHMgdG8gdGhlIGFwcHJvcHJpYXRlIGJhY2sgZW5kIGFsbCB0aHJvdWdob3V0Ci0gKiB0aGUga2VybmVsLiAgVGhpcyBhbGxvd3MgdGhlIHNhbWUga2VybmVsIHRvIHJ1biBhcyBhIEd1ZXN0IGFuZCBhcyBhIG5hdGl2ZQorICogV2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhhdCBwdl9vcHMgc3RydWN0dXJlcyBsZXQgdXMgcmVwbGFjZSBzaW1wbGUgbmF0aXZlCisgKiBpbnN0cnVjdGlvbnMgd2l0aCBjYWxscyB0byB0aGUgYXBwcm9wcmlhdGUgYmFjayBlbmQgYWxsIHRocm91Z2hvdXQgdGhlCisgKiBrZXJuZWwuICBUaGlzIGFsbG93cyB0aGUgc2FtZSBrZXJuZWwgdG8gcnVuIGFzIGEgR3Vlc3QgYW5kIGFzIGEgbmF0aXZlCiAgKiBrZXJuZWwsIGJ1dCBpdCdzIHNsb3cgYmVjYXVzZSBvZiBhbGwgdGhlIGluZGlyZWN0IGJyYW5jaGVzLgogICoKICAqIFJlbWVtYmVyIHRoYXQgRGF2aWQgV2hlZWxlciBxdW90ZSBhYm91dCAiQW55IHByb2JsZW0gaW4gY29tcHV0ZXIgc2NpZW5jZSBjYW4KQEAgLTkyOCwxNCArOTI3LDkgQEAKIAlyZXR1cm4gaW5zbl9sZW47CiB9CiAKLXN0YXRpYyB2b2lkIGxndWVzdF9yZXN0YXJ0KGNoYXIgKnJlYXNvbikKLXsKLQloY2FsbChMSENBTExfU0hVVERPV04sIF9fcGEocmVhc29uKSwgTEdVRVNUX1NIVVRET1dOX1JFU1RBUlQsIDApOwotfQotCi0vKkc6MDMwIE9uY2Ugd2UgZ2V0IHRvIGxndWVzdF9pbml0KCksIHdlIGtub3cgd2UncmUgYSBHdWVzdC4gIFRoZSBwdl9vcHMKLSAqIHN0cnVjdHVyZXMgaW4gdGhlIGtlcm5lbCBwcm92aWRlIHBvaW50cyBmb3IgKGFsbW9zdCkgZXZlcnkgcm91dGluZSB3ZSBoYXZlCi0gKiB0byBvdmVycmlkZSB0byBhdm9pZCBwcml2aWxlZ2VkIGluc3RydWN0aW9ucy4gKi8KKy8qRzowMzAgT25jZSB3ZSBnZXQgdG8gbGd1ZXN0X2luaXQoKSwgd2Uga25vdyB3ZSdyZSBhIEd1ZXN0LiAgVGhlIHZhcmlvdXMKKyAqIHB2X29wcyBzdHJ1Y3R1cmVzIGluIHRoZSBrZXJuZWwgcHJvdmlkZSBwb2ludHMgZm9yIChhbG1vc3QpIGV2ZXJ5IHJvdXRpbmUgd2UKKyAqIGhhdmUgdG8gb3ZlcnJpZGUgdG8gYXZvaWQgcHJpdmlsZWdlZCBpbnN0cnVjdGlvbnMuICovCiBfX2luaXQgdm9pZCBsZ3Vlc3RfaW5pdCh2b2lkKQogewogCS8qIFdlJ3JlIHVuZGVyIGxndWVzdCwgcGFyYXZpcnQgaXMgZW5hYmxlZCwgYW5kIHdlJ3JlIHJ1bm5pbmcgYXQKQEAgLTEwMDMsNiArOTk3LDcgQEAKIAkvKiB0aW1lIG9wZXJhdGlvbnMgKi8KIAlwdl90aW1lX29wcy5nZXRfd2FsbGNsb2NrID0gbGd1ZXN0X2dldF93YWxsY2xvY2s7CiAJcHZfdGltZV9vcHMudGltZV9pbml0ID0gbGd1ZXN0X3RpbWVfaW5pdDsKKwlwdl90aW1lX29wcy5nZXRfY3B1X2toeiA9IGxndWVzdF9jcHVfa2h6OwogCiAJLyogTm93IGlzIGEgZ29vZCB0aW1lIHRvIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMKIAkgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSByZXN0IG9mIGxndWVzdF9pbml0KCkuICovCkBAIC0xMDIyLDkgKzEwMTcsOSBAQAogCSAqIHRoZSBub3JtYWwgZGF0YSBzZWdtZW50IHRvIGdldCB0aHJvdWdoIGJvb3RpbmcuICovCiAJYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWZzIiA6IDogInIiIChfX0tFUk5FTF9EUykgOiAibWVtb3J5Iik7CiAKLQkvKiBUaGUgSG9zdCB1c2VzIHRoZSB0b3Agb2YgdGhlIEd1ZXN0J3MgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGZvciB0aGUKLQkgKiBIb3N0PC0+R3Vlc3QgU3dpdGNoZXIsIGFuZCBpdCB0ZWxscyB1cyBob3cgYmlnIHRoYXQgaXMgaW4KLQkgKiBsZ3Vlc3RfZGF0YS5yZXNlcnZlX21lbSwgc2V0IHVwIG9uIHRoZSBMR1VFU1RfSU5JVCBoeXBlcmNhbGwuICovCisJLyogVGhlIEhvc3Q8LT5HdWVzdCBTd2l0Y2hlciBsaXZlcyBhdCB0aGUgdG9wIG9mIG91ciBhZGRyZXNzIHNwYWNlLCBhbmQKKwkgKiB0aGUgSG9zdCB0b2xkIHVzIGhvdyBiaWcgaXQgaXMgd2hlbiB3ZSBtYWRlIExHVUVTVF9JTklUIGh5cGVyY2FsbDoKKwkgKiBpdCBwdXQgdGhlIGFuc3dlciBpbiBsZ3Vlc3RfZGF0YS5yZXNlcnZlX21lbSAgKi8KIAlyZXNlcnZlX3RvcF9hZGRyZXNzKGxndWVzdF9kYXRhLnJlc2VydmVfbWVtKTsKIAogCS8qIElmIHdlIGRvbid0IGluaXRpYWxpemUgdGhlIGxvY2sgZGVwZW5kZW5jeSBjaGVja2VyIG5vdywgaXQgY3Jhc2hlcwpAQCAtMTA0Niw2ICsxMDQxLDcgQEAKIAkvKiBNYXRoIGlzIGFsd2F5cyBoYXJkISAqLwogCW5ld19jcHVfZGF0YS5oYXJkX21hdGggPSAxOwogCisJLyogV2UgZG9uJ3QgaGF2ZSBmZWF0dXJlcy4gIFdlIGhhdmUgcHVwcGllcyEgIFB1cHBpZXMhICovCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAltY2VfZGlzYWJsZWQgPSAxOwogI2VuZGlmCkBAIC0xMDYzLDEwICsxMDU5LDExIEBACiAJdmlydGlvX2NvbnNfZWFybHlfaW5pdChlYXJseV9wdXRfY2hhcnMpOwogCiAJLyogTGFzdCBvZiBhbGwsIHdlIHNldCB0aGUgcG93ZXIgbWFuYWdlbWVudCBwb3dlcm9mZiBob29rIHRvIHBvaW50IHRvCi0JICogdGhlIEd1ZXN0IHJvdXRpbmUgdG8gcG93ZXIgb2ZmLiAqLworCSAqIHRoZSBHdWVzdCByb3V0aW5lIHRvIHBvd2VyIG9mZiwgYW5kIHRoZSByZWJvb3QgaG9vayB0byBvdXIgcmVzdGFydAorCSAqIHJvdXRpbmUuICovCiAJcG1fcG93ZXJfb2ZmID0gbGd1ZXN0X3Bvd2VyX29mZjsKLQogCW1hY2hpbmVfb3BzLnJlc3RhcnQgPSBsZ3Vlc3RfcmVzdGFydDsKKwogCS8qIE5vdyB3ZSdyZSBzZXQgdXAsIGNhbGwgc3RhcnRfa2VybmVsKCkgaW4gaW5pdC9tYWluLmMgYW5kIHdlIHByb2NlZWQKIAkgKiB0byBib290IGFzIG5vcm1hbC4gIEl0IG5ldmVyIHJldHVybnMuICovCiAJc3RhcnRfa2VybmVsKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9sZ3Vlc3QvaTM4Nl9oZWFkLlMgYi9hcmNoL3g4Ni9sZ3Vlc3QvaTM4Nl9oZWFkLlMKaW5kZXggOTViNmZiYy4uNWM3Y2VmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2kzODZfaGVhZC5TCisrKyBiL2FyY2gveDg2L2xndWVzdC9pMzg2X2hlYWQuUwpAQCAtNSwxMyArNSwyMCBAQAogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAotLypHOjAyMCBUaGlzIGlzIHdoZXJlIHdlIGJlZ2luOiBoZWFkLlMgbm90ZXMgdGhhdCB0aGUgYm9vdCBoZWFkZXIncyBwbGF0Zm9ybQotICogdHlwZSBmaWVsZCBpcyAiMSIgKGxndWVzdCksIHNvIGNhbGxzIHVzIGhlcmUuCisvKkc6MDIwIE91ciBzdG9yeSBzdGFydHMgd2l0aCB0aGUga2VybmVsIGJvb3RpbmcgaW50byBzdGFydHVwXzMyIGluCisgKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TLiAgSXQgZXhwZWN0cyBhIGJvb3QgaGVhZGVyLCB3aGljaCBpcyBjcmVhdGVkIGJ5CisgKiB0aGUgYm9vdGxvYWRlciAodGhlIExhdW5jaGVyIGluIG91ciBjYXNlKS4KKyAqCisgKiBUaGUgc3RhcnR1cF8zMiBmdW5jdGlvbiBkb2VzIHZlcnkgbGl0dGxlOiBpdCBjbGVhcnMgdGhlIHVuaW5pdGlhbGl6ZWQgZ2xvYmFsCisgKiBDIHZhcmlhYmxlcyB3aGljaCB3ZSBleHBlY3QgdG8gYmUgemVybyAoaWUuIEJTUykgYW5kIHRoZW4gY29waWVzIHRoZSBib290CisgKiBoZWFkZXIgYW5kIGtlcm5lbCBjb21tYW5kIGxpbmUgc29tZXdoZXJlIHNhZmUuICBGaW5hbGx5IGl0IGNoZWNrcyB0aGUKKyAqICdoYXJkd2FyZV9zdWJhcmNoJyBmaWVsZC4gIFRoaXMgd2FzIGludHJvZHVjZWQgaW4gMi42LjI0IGZvciBsZ3Vlc3QgYW5kIFhlbjoKKyAqIGlmIGl0J3Mgc2V0IHRvICcxJyAobGd1ZXN0J3MgYXNzaWduZWQgbnVtYmVyKSwgdGhlbiBpdCBjYWxscyB1cyBoZXJlLgogICoKICAqIFdBUk5JTkc6IGJlIHZlcnkgY2FyZWZ1bCBoZXJlISAgV2UncmUgcnVubmluZyBhdCBhZGRyZXNzZXMgZXF1YWwgdG8gcGh5c2ljYWwKICAqIGFkZGVzc2VzIChhcm91bmQgMCksIG5vdCBhYm92ZSBQQUdFX09GRlNFVCBhcyBtb3N0IGNvZGUgZXhwZWN0ZXMKICAqIChlZy4gMHhDMDAwMDAwMCkuICBKdW1wcyBhcmUgcmVsYXRpdmUsIHNvIHRoZXkncmUgT0ssIGJ1dCB3ZSBjYW4ndCB0b3VjaCBhbnkKLSAqIGRhdGEuCisgKiBkYXRhIHdpdGhvdXQgcmVtZW1iZXJpbmcgdG8gc3VidHJhY3QgX19QQUdFX09GRlNFVCEKICAqCiAgKiBUaGUgLnNlY3Rpb24gbGluZSBwdXRzIHRoaXMgY29kZSBpbiAuaW5pdC50ZXh0IHNvIGl0IHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyCiAgKiBib290LiAqLwpAQCAtMjQsNyArMzEsNyBAQAogCWludCAkTEdVRVNUX1RSQVBfRU5UUlkKIAogCS8qIFRoZSBIb3N0IHB1dCB0aGUgdG9wbGV2ZWwgcGFnZXRhYmxlIGluIGxndWVzdF9kYXRhLnBnZGlyLiAgVGhlIG1vdnNsCi0JICogaW5zdHJ1Y3Rpb24gdXNlcyAlZXNpIGltcGxpY2l0bHkgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIGNvcHkgd2UnCisJICogaW5zdHJ1Y3Rpb24gdXNlcyAlZXNpIGltcGxpY2l0bHkgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIGNvcHkgd2UncmUKIAkgKiBhYm91dCB0byBkby4gKi8KIAltb3ZsIGxndWVzdF9kYXRhIC0gX19QQUdFX09GRlNFVCArIExHVUVTVF9EQVRBX3BnZGlyLCAlZXNpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jc3VtLXdyYXBwZXJzXzY0LmMgYi9hcmNoL3g4Ni9saWIvY3N1bS13cmFwcGVyc182NC5jCmluZGV4IGZkNDJhNGEuLjQ1OWI1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9jc3VtLXdyYXBwZXJzXzY0LmMKKysrIGIvYXJjaC94ODYvbGliL2NzdW0td3JhcHBlcnNfNjQuYwpAQCAtMSwxMTcgKzEsMTI5IEBACi0vKiBDb3B5cmlnaHQgMjAwMiwyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KKy8qCisgKiBDb3B5cmlnaHQgMjAwMiwgMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2Ugdi4yCi0gKiAKKyAqCiAgKiBXcmFwcGVycyBvZiBhc3NlbWJseSBjaGVja3N1bSBmdW5jdGlvbnMgZm9yIHg4Ni02NC4KICAqLwotCiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLS8qKiAKLSAqIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAtIENvcHkgYW5kIGNoZWNrc3VtIGZyb20gdXNlciBzcGFjZS4gCi0gKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyAodXNlciBzcGFjZSkgCisvKioKKyAqIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAtIENvcHkgYW5kIGNoZWNrc3VtIGZyb20gdXNlciBzcGFjZS4KKyAqIEBzcmM6IHNvdXJjZSBhZGRyZXNzICh1c2VyIHNwYWNlKQogICogQGRzdDogZGVzdGluYXRpb24gYWRkcmVzcwogICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGNvcGllZC4KICAqIEBpc3VtOiBpbml0aWFsIHN1bSB0aGF0IGlzIGFkZGVkIGludG8gdGhlIHJlc3VsdCAoMzJiaXQgdW5mb2xkZWQpCiAgKiBAZXJycDogc2V0IHRvIC1FRkFVTFQgZm9yIGFuIGJhZCBzb3VyY2UgYWRkcmVzcy4KLSAqIAorICoKICAqIFJldHVybnMgYW4gMzJiaXQgdW5mb2xkZWQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlci4KLSAqIHNyYyBhbmQgZHN0IGFyZSBiZXN0IGFsaWduZWQgdG8gNjRiaXRzLiAKLSAqLyAKKyAqIHNyYyBhbmQgZHN0IGFyZSBiZXN0IGFsaWduZWQgdG8gNjRiaXRzLgorICovCiBfX3dzdW0KIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCiAJCQkgICAgaW50IGxlbiwgX193c3VtIGlzdW0sIGludCAqZXJycCkKLXsgCit7CiAJbWlnaHRfc2xlZXAoKTsKIAkqZXJycCA9IDA7Ci0JaWYgKGxpa2VseShhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsc3JjLCBsZW4pKSkgeyAKLQkJLyogV2h5IDYsIG5vdCA3PyBUbyBoYW5kbGUgb2RkIGFkZHJlc3NlcyBhbGlnbmVkIHdlCi0JCSAgIHdvdWxkIG5lZWQgdG8gZG8gY29uc2lkZXJhYmxlIGNvbXBsaWNhdGlvbnMgdG8gZml4IHRoZQotCQkgICBjaGVja3N1bSB3aGljaCBpcyBkZWZpbmVkIGFzIGFuIDE2Yml0IGFjY3VtdWxhdG9yLiBUaGUKLQkJICAgZml4IGFsaWdubWVudCBjb2RlIGlzIHByaW1hcmlseSBmb3IgcGVyZm9ybWFuY2UKLQkJICAgY29tcGF0aWJpbGl0eSB3aXRoIDMyYml0IGFuZCB0aGF0IHdpbGwgaGFuZGxlIG9kZAotCQkgICBhZGRyZXNzZXMgc2xvd2x5IHRvby4gKi8KLQkJaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKXNyYyAmIDYpKSB7CQkJCi0JCQl3aGlsZSAoKCh1bnNpZ25lZCBsb25nKXNyYyAmIDYpICYmIGxlbiA+PSAyKSB7IAotCQkJCV9fdTE2IHZhbDE2OwkJCQotCQkJCSplcnJwID0gX19nZXRfdXNlcih2YWwxNiwgKGNvbnN0IF9fdTE2IF9fdXNlciAqKXNyYyk7Ci0JCQkJaWYgKCplcnJwKQotCQkJCQlyZXR1cm4gaXN1bTsKLQkJCQkqKF9fdTE2ICopZHN0ID0gdmFsMTY7Ci0JCQkJaXN1bSA9IChfX2ZvcmNlIF9fd3N1bSlhZGQzMl93aXRoX2NhcnJ5KAotCQkJCQkJKF9fZm9yY2UgdW5zaWduZWQpaXN1bSwgdmFsMTYpOwotCQkJCXNyYyArPSAyOyAKLQkJCQlkc3QgKz0gMjsgCi0JCQkJbGVuIC09IDI7Ci0JCQl9Ci0JCX0KLQkJaXN1bSA9IGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKF9fZm9yY2UgY29uc3Qgdm9pZCAqKXNyYywKLQkJCQkJZHN0LCBsZW4sIGlzdW0sIGVycnAsIE5VTEwpOwotCQlpZiAobGlrZWx5KCplcnJwID09IDApKSAKLQkJCXJldHVybiBpc3VtOwotCX0gCi0JKmVycnAgPSAtRUZBVUxUOwotCW1lbXNldChkc3QsMCxsZW4pOyAKLQlyZXR1cm4gaXN1bTsJCQotfSAKIAorCWlmICghbGlrZWx5KGFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCBsZW4pKSkKKwkJZ290byBvdXRfZXJyOworCisJLyoKKwkgKiBXaHkgNiwgbm90IDc/IFRvIGhhbmRsZSBvZGQgYWRkcmVzc2VzIGFsaWduZWQgd2UKKwkgKiB3b3VsZCBuZWVkIHRvIGRvIGNvbnNpZGVyYWJsZSBjb21wbGljYXRpb25zIHRvIGZpeCB0aGUKKwkgKiBjaGVja3N1bSB3aGljaCBpcyBkZWZpbmVkIGFzIGFuIDE2Yml0IGFjY3VtdWxhdG9yLiBUaGUKKwkgKiBmaXggYWxpZ25tZW50IGNvZGUgaXMgcHJpbWFyaWx5IGZvciBwZXJmb3JtYW5jZQorCSAqIGNvbXBhdGliaWxpdHkgd2l0aCAzMmJpdCBhbmQgdGhhdCB3aWxsIGhhbmRsZSBvZGQKKwkgKiBhZGRyZXNzZXMgc2xvd2x5IHRvby4KKwkgKi8KKwlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpc3JjICYgNikpIHsKKwkJd2hpbGUgKCgodW5zaWduZWQgbG9uZylzcmMgJiA2KSAmJiBsZW4gPj0gMikgeworCQkJX191MTYgdmFsMTY7CisKKwkJCSplcnJwID0gX19nZXRfdXNlcih2YWwxNiwgKGNvbnN0IF9fdTE2IF9fdXNlciAqKXNyYyk7CisJCQlpZiAoKmVycnApCisJCQkJcmV0dXJuIGlzdW07CisKKwkJCSooX191MTYgKilkc3QgPSB2YWwxNjsKKwkJCWlzdW0gPSAoX19mb3JjZSBfX3dzdW0pYWRkMzJfd2l0aF9jYXJyeSgKKwkJCQkJKF9fZm9yY2UgdW5zaWduZWQpaXN1bSwgdmFsMTYpOworCQkJc3JjICs9IDI7CisJCQlkc3QgKz0gMjsKKwkJCWxlbiAtPSAyOworCQl9CisJfQorCWlzdW0gPSBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChfX2ZvcmNlIGNvbnN0IHZvaWQgKilzcmMsCisJCQkJZHN0LCBsZW4sIGlzdW0sIGVycnAsIE5VTEwpOworCWlmICh1bmxpa2VseSgqZXJycCkpCisJCWdvdG8gb3V0X2VycjsKKworCXJldHVybiBpc3VtOworCitvdXRfZXJyOgorCSplcnJwID0gLUVGQVVMVDsKKwltZW1zZXQoZHN0LCAwLCBsZW4pOworCisJcmV0dXJuIGlzdW07Cit9CiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcik7CiAKLS8qKiAKLSAqIGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIgLSBDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyIHNwYWNlLiAKKy8qKgorICogY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlciAtIENvcHkgYW5kIGNoZWNrc3VtIHRvIHVzZXIgc3BhY2UuCiAgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcwogICogQGRzdDogZGVzdGluYXRpb24gYWRkcmVzcyAodXNlciBzcGFjZSkKICAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byBiZSBjb3BpZWQuCiAgKiBAaXN1bTogaW5pdGlhbCBzdW0gdGhhdCBpcyBhZGRlZCBpbnRvIHRoZSByZXN1bHQgKDMyYml0IHVuZm9sZGVkKQogICogQGVycnA6IHNldCB0byAtRUZBVUxUIGZvciBhbiBiYWQgZGVzdGluYXRpb24gYWRkcmVzcy4KLSAqIAorICoKICAqIFJldHVybnMgYW4gMzJiaXQgdW5mb2xkZWQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlci4KICAqIHNyYyBhbmQgZHN0IGFyZSBiZXN0IGFsaWduZWQgdG8gNjRiaXRzLgotICovIAorICovCiBfX3dzdW0KIGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIoY29uc3Qgdm9pZCAqc3JjLCB2b2lkIF9fdXNlciAqZHN0LAogCQkJICBpbnQgbGVuLCBfX3dzdW0gaXN1bSwgaW50ICplcnJwKQoteyAKK3sKIAltaWdodF9zbGVlcCgpOworCiAJaWYgKHVubGlrZWx5KCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkc3QsIGxlbikpKSB7CiAJCSplcnJwID0gLUVGQVVMVDsKLQkJcmV0dXJuIDA7IAorCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpZHN0ICYgNikpIHsKLQkJd2hpbGUgKCgodW5zaWduZWQgbG9uZylkc3QgJiA2KSAmJiBsZW4gPj0gMikgeyAKKwkJd2hpbGUgKCgodW5zaWduZWQgbG9uZylkc3QgJiA2KSAmJiBsZW4gPj0gMikgewogCQkJX191MTYgdmFsMTYgPSAqKF9fdTE2ICopc3JjOworCiAJCQlpc3VtID0gKF9fZm9yY2UgX193c3VtKWFkZDMyX3dpdGhfY2FycnkoCiAJCQkJCShfX2ZvcmNlIHVuc2lnbmVkKWlzdW0sIHZhbDE2KTsKIAkJCSplcnJwID0gX19wdXRfdXNlcih2YWwxNiwgKF9fdTE2IF9fdXNlciAqKWRzdCk7CiAJCQlpZiAoKmVycnApCiAJCQkJcmV0dXJuIGlzdW07Ci0JCQlzcmMgKz0gMjsgCi0JCQlkc3QgKz0gMjsgCisJCQlzcmMgKz0gMjsKKwkJCWRzdCArPSAyOwogCQkJbGVuIC09IDI7CiAJCX0KIAl9CiAKIAkqZXJycCA9IDA7Ci0JcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCAodm9pZCBfX2ZvcmNlICopZHN0LGxlbixpc3VtLE5VTEwsZXJycCk7IAotfSAKLQorCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKHNyYywgKHZvaWQgX19mb3JjZSAqKWRzdCwKKwkJCQkJIGxlbiwgaXN1bSwgTlVMTCwgZXJycCk7Cit9CiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIpOwogCi0vKiogCisvKioKICAqIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2sgLSBDb3B5IGFuZCBjaGVja3N1bS4KICAqIEBzcmM6IHNvdXJjZSBhZGRyZXNzCiAgKiBAZHN0OiBkZXN0aW5hdGlvbiBhZGRyZXNzCiAgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgY29waWVkLgogICogQGlzdW06IGluaXRpYWwgc3VtIHRoYXQgaXMgYWRkZWQgaW50byB0aGUgcmVzdWx0ICgzMmJpdCB1bmZvbGRlZCkKLSAqIAorICoKICAqIFJldHVybnMgYW4gMzJiaXQgdW5mb2xkZWQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlci4KLSAqLyAKKyAqLwogX193c3VtCiBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LCBpbnQgbGVuLCBfX3dzdW0gc3VtKQoteyAKLQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhzcmMsZHN0LGxlbixzdW0sTlVMTCxOVUxMKTsKLX0gCit7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBOVUxMKTsKK30KIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayk7CiAKIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCkBAIC0xMTksMTcgKzEzMSwyMCBAQAogCQkJX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAlfX3U2NCByZXN0LCBzdW02NDsKLSAgICAgCisKIAlyZXN0ID0gKF9fZm9yY2UgX191NjQpaHRvbmwobGVuKSArIChfX2ZvcmNlIF9fdTY0KWh0b25zKHByb3RvKSArCiAJCShfX2ZvcmNlIF9fdTY0KXN1bTsKLQlhc20oIiAgYWRkcSAoJVtzYWRkcl0pLCVbc3VtXVxuIgotCSAgICAiICBhZGNxIDgoJVtzYWRkcl0pLCVbc3VtXVxuIgotCSAgICAiICBhZGNxICglW2RhZGRyXSksJVtzdW1dXG4iIAotCSAgICAiICBhZGNxIDgoJVtkYWRkcl0pLCVbc3VtXVxuIgotCSAgICAiICBhZGNxICQwLCVbc3VtXVxuIgotCSAgICA6IFtzdW1dICI9ciIgKHN1bTY0KSAKLQkgICAgOiAiW3N1bV0iIChyZXN0KSxbc2FkZHJdICJyIiAoc2FkZHIpLCBbZGFkZHJdICJyIiAoZGFkZHIpKTsKLQlyZXR1cm4gY3N1bV9mb2xkKChfX2ZvcmNlIF9fd3N1bSlhZGQzMl93aXRoX2NhcnJ5KHN1bTY0ICYgMHhmZmZmZmZmZiwgc3VtNjQ+PjMyKSk7Ci19CiAKKwlhc20oIglhZGRxICglW3NhZGRyXSksJVtzdW1dXG4iCisJICAgICIJYWRjcSA4KCVbc2FkZHJdKSwlW3N1bV1cbiIKKwkgICAgIglhZGNxICglW2RhZGRyXSksJVtzdW1dXG4iCisJICAgICIJYWRjcSA4KCVbZGFkZHJdKSwlW3N1bV1cbiIKKwkgICAgIglhZGNxICQwLCVbc3VtXVxuIgorCisJICAgIDogW3N1bV0gIj1yIiAoc3VtNjQpCisJICAgIDogIltzdW1dIiAocmVzdCksIFtzYWRkcl0gInIiIChzYWRkciksIFtkYWRkcl0gInIiIChkYWRkcikpOworCisJcmV0dXJuIGNzdW1fZm9sZCgKKwkgICAgICAgKF9fZm9yY2UgX193c3VtKWFkZDMyX3dpdGhfY2Fycnkoc3VtNjQgJiAweGZmZmZmZmZmLCBzdW02ND4+MzIpKTsKK30KIEVYUE9SVF9TWU1CT0woY3N1bV9pcHY2X21hZ2ljKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9pb182NC5jIGIvYXJjaC94ODYvbGliL2lvXzY0LmMKaW5kZXggODdiNGE0ZS4uM2YxZWI1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL2lvXzY0LmMKKysrIGIvYXJjaC94ODYvbGliL2lvXzY0LmMKQEAgLTEsMjMgKzEsMjUgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAotdm9pZCBfX21lbWNweV90b2lvKHVuc2lnbmVkIGxvbmcgZHN0LGNvbnN0IHZvaWQqc3JjLHVuc2lnbmVkIGxlbikKK3ZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nIGRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsZW4pCiB7Ci0JX19pbmxpbmVfbWVtY3B5KCh2b2lkICopIGRzdCxzcmMsbGVuKTsKKwlfX2lubGluZV9tZW1jcHkoKHZvaWQgKilkc3QsIHNyYywgbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0woX19tZW1jcHlfdG9pbyk7CiAKLXZvaWQgX19tZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCx1bnNpZ25lZCBsb25nIHNyYyx1bnNpZ25lZCBsZW4pCit2b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgc3JjLCB1bnNpZ25lZCBsZW4pCiB7Ci0JX19pbmxpbmVfbWVtY3B5KGRzdCwoY29uc3Qgdm9pZCAqKSBzcmMsbGVuKTsKKwlfX2lubGluZV9tZW1jcHkoZHN0LCAoY29uc3Qgdm9pZCAqKXNyYywgbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0woX19tZW1jcHlfZnJvbWlvKTsKIAogdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphLCBpbnQgYiwgc2l6ZV90IGMpCiB7Ci0JLyogWFhYOiBtZW1zZXQgY2FuIG1hbmdsZSB0aGUgSU8gcGF0dGVybnMgcXVpdGUgYSBiaXQuCi0JICAgcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGEgZHVtYiBvbmUgKi8KLQltZW1zZXQoKHZvaWQgKilhLGIsYyk7CisJLyoKKwkgKiBUT0RPOiBtZW1zZXQgY2FuIG1hbmdsZSB0aGUgSU8gcGF0dGVybnMgcXVpdGUgYSBiaXQuCisJICogcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGEgZHVtYiBvbmU6CisJICovCisJbWVtc2V0KCh2b2lkICopYSwgYiwgYyk7CiB9CiBFWFBPUlRfU1lNQk9MKG1lbXNldF9pbyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzMyLmMgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzMyLmMKaW5kZXggMzc3NTZiNi4uNTQxNWE5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbWNweV8zMi5jCisrKyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfMzIuYwpAQCAtMjUsNyArMjUsNyBAQAogCWludCBkMCwgZDEsIGQyOwogCiAJaWYgKGRlc3QgPCBzcmMpIHsKLQkJbWVtY3B5KGRlc3Qsc3JjLG4pOworCQltZW1jcHkoZGVzdCwgc3JjLCBuKTsKIAl9IGVsc2UgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJCSJzdGRcblx0IgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbW1vdmVfNjQuYyBiL2FyY2gveDg2L2xpYi9tZW1tb3ZlXzY0LmMKaW5kZXggODAxNzVlNC4uMGEzMzkwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbW1vdmVfNjQuYworKysgYi9hcmNoL3g4Ni9saWIvbWVtbW92ZV82NC5jCkBAIC02LDEwICs2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICN1bmRlZiBtZW1tb3ZlCi12b2lkICptZW1tb3ZlKHZvaWQgKiBkZXN0LGNvbnN0IHZvaWQgKnNyYyxzaXplX3QgY291bnQpCit2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQogewotCWlmIChkZXN0IDwgc3JjKSB7IAotCQlyZXR1cm4gbWVtY3B5KGRlc3Qsc3JjLGNvdW50KTsKKwlpZiAoZGVzdCA8IHNyYykgeworCQlyZXR1cm4gbWVtY3B5KGRlc3QsIHNyYywgY291bnQpOwogCX0gZWxzZSB7CiAJCWNoYXIgKnAgPSBkZXN0ICsgY291bnQ7CiAJCWNvbnN0IGNoYXIgKnMgPSBzcmMgKyBjb3VudDsKQEAgLTE3LDUgKzE3LDUgQEAKIAkJCSotLXAgPSAqLS1zOwogCX0KIAlyZXR1cm4gZGVzdDsKLX0gCit9CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21teF8zMi5jIGIvYXJjaC94ODYvbGliL21teF8zMi5jCmluZGV4IGNjOWI0YTQuLmM5ZjJkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tbXhfMzIuYworKysgYi9hcmNoL3g4Ni9saWIvbW14XzMyLmMKQEAgLTEsMzIgKzEsMzAgQEAKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Ci0KLQogLyoKICAqCU1NWCAzRE5vdyEgbGlicmFyeSBoZWxwZXIgZnVuY3Rpb25zCiAgKgogICoJVG8gZG86Ci0gKglXZSBjYW4gdXNlIE1NWCBqdXN0IGZvciBwcmVmZXRjaCBpbiBJUlEncy4gVGhpcyBtYXkgYmUgYSB3aW4uIAorICoJV2UgY2FuIHVzZSBNTVgganVzdCBmb3IgcHJlZmV0Y2ggaW4gSVJRJ3MuIFRoaXMgbWF5IGJlIGEgd2luLgogICoJCShyZXBvcnRlZCBzbyBvbiBLNi1JSUkpCiAgKglXZSBzaG91bGQgdXNlIGEgYmV0dGVyIGNvZGUgbmV1dHJhbCBmaWxsZXIgZm9yIHRoZSBzaG9ydCBqdW1wCiAgKgkJbGVhbCBlYnguIFtlYnhdIGlzIGFwcGFyZW50bHkgYmVzdCBmb3IgSzYtMiwgYnV0IEN5cml4ID8/CiAgKglXZSBhbHNvIHdhbnQgdG8gY2xvYmJlciB0aGUgZmlsbGVyIHJlZ2lzdGVyIHNvIHdlIGRvbid0IGdldCBhbnkKLSAqCQlyZWdpc3RlciBmb3J3YXJkaW5nIHN0YWxscyBvbiB0aGUgZmlsbGVyLiAKKyAqCQlyZWdpc3RlciBmb3J3YXJkaW5nIHN0YWxscyBvbiB0aGUgZmlsbGVyLgogICoKICAqCUFkZCAqdXNlciBoYW5kbGluZy4gQ2hlY2tzdW1zIGFyZSBub3QgYSB3aW4gd2l0aCBNTVggb24gYW55IENQVQogICoJdGVzdGVkIHNvIGZhciBmb3IgYW55IE1NWCBzb2x1dGlvbiBmaWd1cmVkLgogICoKLSAqCTIyLzA5LzIwMDAgLSBBcmphbiB2YW4gZGUgVmVuIAotICoJCUltcHJvdmVkIGZvciBub24tZWdpbmVlcmluZy1zYW1wbGUgQXRobG9ucyAKKyAqCTIyLzA5LzIwMDAgLSBBcmphbiB2YW4gZGUgVmVuCisgKgkJSW1wcm92ZWQgZm9yIG5vbi1lZ2luZWVyaW5nLXNhbXBsZSBBdGhsb25zCiAgKgogICovCi0gCisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgorCiB2b2lkICpfbW14X21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbikKIHsKIAl2b2lkICpwOwpAQCAtNTEsMTIgKzQ5LDEwIEBACiAJCSIzOiBtb3Z3ICQweDFBRUIsIDFiXG4iCS8qIGptcCBvbiAyNiBieXRlcyAqLwogCQkiICAgam1wIDJiXG4iCiAJCSIucHJldmlvdXNcbiIKLQkJX0FTTV9FWFRBQkxFKDFiLDNiKQotCQk6IDogInIiIChmcm9tKSApOwotCQkKLQkKLQlmb3IoOyBpPjU7IGktLSkKLQl7CisJCQlfQVNNX0VYVEFCTEUoMWIsIDNiKQorCQkJOiA6ICJyIiAoZnJvbSkpOworCisJZm9yICggOyBpID4gNTsgaS0tKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6ICBwcmVmZXRjaCAzMjAoJTApXG4iCiAJCSIyOiAgbW92cSAoJTApLCAlJW1tMFxuIgpAQCAtNzksMTQgKzc1LDE0IEBACiAJCSIzOiBtb3Z3ICQweDA1RUIsIDFiXG4iCS8qIGptcCBvbiA1IGJ5dGVzICovCiAJCSIgICBqbXAgMmJcbiIKIAkJIi5wcmV2aW91c1xuIgotCQlfQVNNX0VYVEFCTEUoMWIsM2IpCi0JCTogOiAiciIgKGZyb20pLCAiciIgKHRvKSA6ICJtZW1vcnkiKTsKLQkJZnJvbSs9NjQ7Ci0JCXRvKz02NDsKKwkJCV9BU01fRVhUQUJMRSgxYiwgM2IpCisJCQk6IDogInIiIChmcm9tKSwgInIiICh0bykgOiAibWVtb3J5Iik7CisKKwkJZnJvbSArPSA2NDsKKwkJdG8gKz0gNjQ7CiAJfQogCi0JZm9yKDsgaT4wOyBpLS0pCi0JeworCWZvciAoIDsgaSA+IDA7IGktLSkgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIgIG1vdnEgKCUwKSwgJSVtbTBcbiIKIAkJIiAgbW92cSA4KCUwKSwgJSVtbTFcbiIKQEAgLTEwNCwxNyArMTAwLDIwIEBACiAJCSIgIG1vdnEgJSVtbTEsIDQwKCUxKVxuIgogCQkiICBtb3ZxICUlbW0yLCA0OCglMSlcbiIKIAkJIiAgbW92cSAlJW1tMywgNTYoJTEpXG4iCi0JCTogOiAiciIgKGZyb20pLCAiciIgKHRvKSA6ICJtZW1vcnkiKTsKLQkJZnJvbSs9NjQ7Ci0JCXRvKz02NDsKKwkJCTogOiAiciIgKGZyb20pLCAiciIgKHRvKSA6ICJtZW1vcnkiKTsKKworCQlmcm9tICs9IDY0OworCQl0byArPSA2NDsKIAl9CiAJLyoKLQkgKglOb3cgZG8gdGhlIHRhaWwgb2YgdGhlIGJsb2NrCisJICogTm93IGRvIHRoZSB0YWlsIG9mIHRoZSBibG9jazoKIAkgKi8KLQlfX21lbWNweSh0bywgZnJvbSwgbGVuJjYzKTsKKwlfX21lbWNweSh0bywgZnJvbSwgbGVuICYgNjMpOwogCWtlcm5lbF9mcHVfZW5kKCk7CisKIAlyZXR1cm4gcDsKIH0KK0VYUE9SVF9TWU1CT0woX21teF9tZW1jcHkpOwogCiAjaWZkZWYgQ09ORklHX01LNwogCkBAIC0xMjgsMTMgKzEyNywxMiBAQAogCWludCBpOwogCiAJa2VybmVsX2ZwdV9iZWdpbigpOwotCQorCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiICBweG9yICUlbW0wLCAlJW1tMFxuIiA6IDoKIAkpOwogCi0JZm9yKGk9MDtpPDQwOTYvNjQ7aSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgNDA5Ni82NDsgaSsrKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIiAgbW92bnRxICUlbW0wLCAoJTApXG4iCiAJCSIgIG1vdm50cSAlJW1tMCwgOCglMClcbiIKQEAgLTE0NSwxNCArMTQzLDE1IEBACiAJCSIgIG1vdm50cSAlJW1tMCwgNDgoJTApXG4iCiAJCSIgIG1vdm50cSAlJW1tMCwgNTYoJTApXG4iCiAJCTogOiAiciIgKHBhZ2UpIDogIm1lbW9yeSIpOwotCQlwYWdlKz02NDsKKwkJcGFnZSArPSA2NDsKIAl9Ci0JLyogc2luY2UgbW92bnRxIGlzIHdlYWtseS1vcmRlcmVkLCBhICJzZmVuY2UiIGlzIG5lZWRlZCB0byBiZWNvbWUKLQkgKiBvcmRlcmVkIGFnYWluLgorCisJLyoKKwkgKiBTaW5jZSBtb3ZudHEgaXMgd2Vha2x5LW9yZGVyZWQsIGEgInNmZW5jZSIgaXMgbmVlZGVkIHRvIGJlY29tZQorCSAqIG9yZGVyZWQgYWdhaW46CiAJICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICBzZmVuY2UgXG4iIDogOgotCSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInNmZW5jZVxuIjo6KTsKKwogCWtlcm5lbF9mcHVfZW5kKCk7CiB9CiAKQEAgLTE2MiwxMCArMTYxLDExIEBACiAKIAlrZXJuZWxfZnB1X2JlZ2luKCk7CiAKLQkvKiBtYXliZSB0aGUgcHJlZmV0Y2ggc3R1ZmYgY2FuIGdvIGJlZm9yZSB0aGUgZXhwZW5zaXZlIGZuc2F2ZS4uLgorCS8qCisJICogbWF5YmUgdGhlIHByZWZldGNoIHN0dWZmIGNhbiBnbyBiZWZvcmUgdGhlIGV4cGVuc2l2ZSBmbnNhdmUuLi4KIAkgKiBidXQgdGhhdCBpcyBmb3IgbGF0ZXIuIC1BVgogCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIjE6IHByZWZldGNoICglMClcbiIKIAkJIiAgIHByZWZldGNoIDY0KCUwKVxuIgogCQkiICAgcHJlZmV0Y2ggMTI4KCUwKVxuIgpAQCAtMTc2LDExICsxNzYsOSBAQAogCQkiMzogbW92dyAkMHgxQUVCLCAxYlxuIgkvKiBqbXAgb24gMjYgYnl0ZXMgKi8KIAkJIiAgIGptcCAyYlxuIgogCQkiLnByZXZpb3VzXG4iCi0JCV9BU01fRVhUQUJMRSgxYiwzYikKLQkJOiA6ICJyIiAoZnJvbSkgKTsKKwkJCV9BU01fRVhUQUJMRSgxYiwgM2IpIDogOiAiciIgKGZyb20pKTsKIAotCWZvcihpPTA7IGk8KDQwOTYtMzIwKS82NDsgaSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgKDQwOTYtMzIwKS82NDsgaSsrKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6IHByZWZldGNoIDMyMCglMClcbiIKIAkJIjI6IG1vdnEgKCUwKSwgJSVtbTBcbiIKQEAgLTIwMywxMyArMjAxLDEzIEBACiAJCSIzOiBtb3Z3ICQweDA1RUIsIDFiXG4iCS8qIGptcCBvbiA1IGJ5dGVzICovCiAJCSIgICBqbXAgMmJcbiIKIAkJIi5wcmV2aW91c1xuIgotCQlfQVNNX0VYVEFCTEUoMWIsM2IpCi0JCTogOiAiciIgKGZyb20pLCAiciIgKHRvKSA6ICJtZW1vcnkiKTsKLQkJZnJvbSs9NjQ7Ci0JCXRvKz02NDsKKwkJX0FTTV9FWFRBQkxFKDFiLCAzYikgOiA6ICJyIiAoZnJvbSksICJyIiAodG8pIDogIm1lbW9yeSIpOworCisJCWZyb20gKz0gNjQ7CisJCXRvICs9IDY0OwogCX0KLQlmb3IoaT0oNDA5Ni0zMjApLzY0OyBpPDQwOTYvNjQ7IGkrKykKLQl7CisKKwlmb3IgKGkgPSAoNDA5Ni0zMjApLzY0OyBpIDwgNDA5Ni82NDsgaSsrKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjI6IG1vdnEgKCUwKSwgJSVtbTBcbiIKIAkJIiAgIG1vdm50cSAlJW1tMCwgKCUxKVxuIgpAQCAtMjI3LDM3ICsyMjUsMzQgQEAKIAkJIiAgIG1vdm50cSAlJW1tNiwgNDgoJTEpXG4iCiAJCSIgICBtb3ZxIDU2KCUwKSwgJSVtbTdcbiIKIAkJIiAgIG1vdm50cSAlJW1tNywgNTYoJTEpXG4iCi0JCTogOiAiciIgKGZyb20pLCAiciIgKHRvKSA6ICJtZW1vcnkiKTsKLQkJZnJvbSs9NjQ7Ci0JCXRvKz02NDsKKwkJCTogOiAiciIgKGZyb20pLCAiciIgKHRvKSA6ICJtZW1vcnkiKTsKKwkJZnJvbSArPSA2NDsKKwkJdG8gKz0gNjQ7CiAJfQotCS8qIHNpbmNlIG1vdm50cSBpcyB3ZWFrbHktb3JkZXJlZCwgYSAic2ZlbmNlIiBpcyBuZWVkZWQgdG8gYmVjb21lCi0JICogb3JkZXJlZCBhZ2Fpbi4KKwkvKgorCSAqIFNpbmNlIG1vdm50cSBpcyB3ZWFrbHktb3JkZXJlZCwgYSAic2ZlbmNlIiBpcyBuZWVkZWQgdG8gYmVjb21lCisJICogb3JkZXJlZCBhZ2FpbjoKIAkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIgIHNmZW5jZSBcbiIgOiA6Ci0JKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic2ZlbmNlIFxuIjo6KTsKIAlrZXJuZWxfZnB1X2VuZCgpOwogfQogCi0jZWxzZQorI2Vsc2UgLyogQ09ORklHX01LNyAqLwogCiAvKgogICoJR2VuZXJpYyBNTVggaW1wbGVtZW50YXRpb24gd2l0aG91dCBLNyBzcGVjaWZpYyBzdHJlYW1pbmcKICAqLwotIAogc3RhdGljIHZvaWQgZmFzdF9jbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCiB7CiAJaW50IGk7Ci0JCisKIAlrZXJuZWxfZnB1X2JlZ2luKCk7Ci0JCisKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIgIHB4b3IgJSVtbTAsICUlbW0wXG4iIDogOgogCSk7CiAKLQlmb3IoaT0wO2k8NDA5Ni8xMjg7aSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgNDA5Ni8xMjg7IGkrKykgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIgIG1vdnEgJSVtbTAsICglMClcbiIKIAkJIiAgbW92cSAlJW1tMCwgOCglMClcbiIKQEAgLTI3NSw4ICsyNzAsOCBAQAogCQkiICBtb3ZxICUlbW0wLCAxMDQoJTApXG4iCiAJCSIgIG1vdnEgJSVtbTAsIDExMiglMClcbiIKIAkJIiAgbW92cSAlJW1tMCwgMTIwKCUwKVxuIgotCQk6IDogInIiIChwYWdlKSA6ICJtZW1vcnkiKTsKLQkJcGFnZSs9MTI4OworCQkJOiA6ICJyIiAocGFnZSkgOiAibWVtb3J5Iik7CisJCXBhZ2UgKz0gMTI4OwogCX0KIAogCWtlcm5lbF9mcHVfZW5kKCk7CkBAIC0yODUsOCArMjgwLDcgQEAKIHN0YXRpYyB2b2lkIGZhc3RfY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQogewogCWludCBpOwotCQotCQorCiAJa2VybmVsX2ZwdV9iZWdpbigpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKApAQCAtMzAwLDExICsyOTQsOSBAQAogCQkiMzogbW92dyAkMHgxQUVCLCAxYlxuIgkvKiBqbXAgb24gMjYgYnl0ZXMgKi8KIAkJIiAgIGptcCAyYlxuIgogCQkiLnByZXZpb3VzXG4iCi0JCV9BU01fRVhUQUJMRSgxYiwzYikKLQkJOiA6ICJyIiAoZnJvbSkgKTsKKwkJCV9BU01fRVhUQUJMRSgxYiwgM2IpIDogOiAiciIgKGZyb20pKTsKIAotCWZvcihpPTA7IGk8NDA5Ni82NDsgaSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgNDA5Ni82NDsgaSsrKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6IHByZWZldGNoIDMyMCglMClcbiIKIAkJIjI6IG1vdnEgKCUwKSwgJSVtbTBcbiIKQEAgLTMyNyw2MCArMzE5LDU5IEBACiAJCSIzOiBtb3Z3ICQweDA1RUIsIDFiXG4iCS8qIGptcCBvbiA1IGJ5dGVzICovCiAJCSIgICBqbXAgMmJcbiIKIAkJIi5wcmV2aW91c1xuIgotCQlfQVNNX0VYVEFCTEUoMWIsM2IpCi0JCTogOiAiciIgKGZyb20pLCAiciIgKHRvKSA6ICJtZW1vcnkiKTsKLQkJZnJvbSs9NjQ7Ci0JCXRvKz02NDsKKwkJCV9BU01fRVhUQUJMRSgxYiwgM2IpCisJCQk6IDogInIiIChmcm9tKSwgInIiICh0bykgOiAibWVtb3J5Iik7CisKKwkJZnJvbSArPSA2NDsKKwkJdG8gKz0gNjQ7CiAJfQogCWtlcm5lbF9mcHVfZW5kKCk7CiB9CiAKLQotI2VuZGlmCisjZW5kaWYgLyogIUNPTkZJR19NSzcgKi8KIAogLyoKLSAqCUZhdm91ciBNTVggZm9yIHBhZ2UgY2xlYXIgYW5kIGNvcHkuIAorICogRmF2b3VyIE1NWCBmb3IgcGFnZSBjbGVhciBhbmQgY29weToKICAqLwotCi1zdGF0aWMgdm9pZCBzbG93X3plcm9fcGFnZSh2b2lkICogcGFnZSkKK3N0YXRpYyB2b2lkIHNsb3dfemVyb19wYWdlKHZvaWQgKnBhZ2UpCiB7CiAJaW50IGQwLCBkMTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAotCQkiY2xkXG5cdCIgXAotCQkicmVwIDsgc3Rvc2wiIFwKLQkJOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCi0JCToiYSIgKDApLCIxIiAocGFnZSksIjAiICgxMDI0KQotCQk6Im1lbW9yeSIpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJjbGRcblx0IgorCQkicmVwIDsgc3Rvc2wiCisKKwkJCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKQorCQkJOiJhIiAoMCksICIxIiAocGFnZSksICIwIiAoMTAyNCkKKwkJCToibWVtb3J5Iik7CiB9Ci0gCi12b2lkIG1teF9jbGVhcl9wYWdlKHZvaWQgKiBwYWdlKQorCit2b2lkIG1teF9jbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCiB7Ci0JaWYodW5saWtlbHkoaW5faW50ZXJydXB0KCkpKQorCWlmICh1bmxpa2VseShpbl9pbnRlcnJ1cHQoKSkpCiAJCXNsb3dfemVyb19wYWdlKHBhZ2UpOwogCWVsc2UKIAkJZmFzdF9jbGVhcl9wYWdlKHBhZ2UpOwogfQorRVhQT1JUX1NZTUJPTChtbXhfY2xlYXJfcGFnZSk7CiAKIHN0YXRpYyB2b2lkIHNsb3dfY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQogewogCWludCBkMCwgZDEsIGQyOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCBcCi0JCSJjbGRcblx0IiBcCi0JCSJyZXAgOyBtb3ZzbCIgXAotCQk6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikgXAotCQk6ICIwIiAoMTAyNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pIFwKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiY2xkXG5cdCIKKwkJInJlcCA7IG1vdnNsIgorCQk6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikKKwkJOiAiMCIgKDEwMjQpLCAiMSIgKChsb25nKSB0byksICIyIiAoKGxvbmcpIGZyb20pCiAJCTogIm1lbW9yeSIpOwogfQotICAKIAogdm9pZCBtbXhfY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQogewotCWlmKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkKKwlpZiAodW5saWtlbHkoaW5faW50ZXJydXB0KCkpKQogCQlzbG93X2NvcHlfcGFnZSh0bywgZnJvbSk7CiAJZWxzZQogCQlmYXN0X2NvcHlfcGFnZSh0bywgZnJvbSk7CiB9Ci0KLUVYUE9SVF9TWU1CT0woX21teF9tZW1jcHkpOwotRVhQT1JUX1NZTUJPTChtbXhfY2xlYXJfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKG1teF9jb3B5X3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL3NlbWFwaG9yZV8zMi5TIGIvYXJjaC94ODYvbGliL3NlbWFwaG9yZV8zMi5TCmluZGV4IDM4OTliZDMuLjY0OGZlNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9zZW1hcGhvcmVfMzIuUworKysgYi9hcmNoL3g4Ni9saWIvc2VtYXBob3JlXzMyLlMKQEAgLTMwLDg5ICszMCw2IEBACiAgKiB2YWx1ZSBvciBqdXN0IGNsb2JiZXJlZC4uCiAgKi8KIAkuc2VjdGlvbiAuc2NoZWQudGV4dCwgImF4IgotRU5UUlkoX19kb3duX2ZhaWxlZCkKLQlDRklfU1RBUlRQUk9DCi0JRlJBTUUKLQlwdXNobCAlZWR4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQlDRklfUkVMX09GRlNFVCBlZHgsMAotCXB1c2hsICVlY3gKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCUNGSV9SRUxfT0ZGU0VUIGVjeCwwCi0JY2FsbCBfX2Rvd24KLQlwb3BsICVlY3gKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKLQlDRklfUkVTVE9SRSBlY3gKLQlwb3BsICVlZHgKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKLQlDRklfUkVTVE9SRSBlZHgKLQlFTkRGUkFNRQotCXJldAotCUNGSV9FTkRQUk9DCi0JRU5EUFJPQyhfX2Rvd25fZmFpbGVkKQotCi1FTlRSWShfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUpCi0JQ0ZJX1NUQVJUUFJPQwotCUZSQU1FCi0JcHVzaGwgJWVkeAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0Ci0JQ0ZJX1JFTF9PRkZTRVQgZWR4LDAKLQlwdXNobCAlZWN4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQlDRklfUkVMX09GRlNFVCBlY3gsMAotCWNhbGwgX19kb3duX2ludGVycnVwdGlibGUKLQlwb3BsICVlY3gKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKLQlDRklfUkVTVE9SRSBlY3gKLQlwb3BsICVlZHgKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKLQlDRklfUkVTVE9SRSBlZHgKLQlFTkRGUkFNRQotCXJldAotCUNGSV9FTkRQUk9DCi0JRU5EUFJPQyhfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUpCi0KLUVOVFJZKF9fZG93bl9mYWlsZWRfdHJ5bG9jaykKLQlDRklfU1RBUlRQUk9DCi0JRlJBTUUKLQlwdXNobCAlZWR4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQlDRklfUkVMX09GRlNFVCBlZHgsMAotCXB1c2hsICVlY3gKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCUNGSV9SRUxfT0ZGU0VUIGVjeCwwCi0JY2FsbCBfX2Rvd25fdHJ5bG9jawotCXBvcGwgJWVjeAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAotCUNGSV9SRVNUT1JFIGVjeAotCXBvcGwgJWVkeAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAotCUNGSV9SRVNUT1JFIGVkeAotCUVOREZSQU1FCi0JcmV0Ci0JQ0ZJX0VORFBST0MKLQlFTkRQUk9DKF9fZG93bl9mYWlsZWRfdHJ5bG9jaykKLQotRU5UUlkoX191cF93YWtldXApCi0JQ0ZJX1NUQVJUUFJPQwotCUZSQU1FCi0JcHVzaGwgJWVkeAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0Ci0JQ0ZJX1JFTF9PRkZTRVQgZWR4LDAKLQlwdXNobCAlZWN4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQlDRklfUkVMX09GRlNFVCBlY3gsMAotCWNhbGwgX191cAotCXBvcGwgJWVjeAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAotCUNGSV9SRVNUT1JFIGVjeAotCXBvcGwgJWVkeAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAotCUNGSV9SRVNUT1JFIGVkeAotCUVOREZSQU1FCi0JcmV0Ci0JQ0ZJX0VORFBST0MKLQlFTkRQUk9DKF9fdXBfd2FrZXVwKQogCiAvKgogICogcncgc3BpbmxvY2sgZmFsbGJhY2tzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvc3RyaW5nXzMyLmMgYi9hcmNoL3g4Ni9saWIvc3RyaW5nXzMyLmMKaW5kZXggYzJjMDUwNC4uOTQ5NzJlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL3N0cmluZ18zMi5jCisrKyBiL2FyY2gveDg2L2xpYi9zdHJpbmdfMzIuYwpAQCAtMTQsMjUgKzE0LDI1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpZmRlZiBfX0hBVkVfQVJDSF9TVFJDUFkKLWNoYXIgKnN0cmNweShjaGFyICogZGVzdCxjb25zdCBjaGFyICpzcmMpCitjaGFyICpzdHJjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQogewogCWludCBkMCwgZDEsIGQyOwotCWFzbSB2b2xhdGlsZSggIjE6XHRsb2RzYlxuXHQiCisJYXNtIHZvbGF0aWxlKCIxOlx0bG9kc2Jcblx0IgogCQkic3Rvc2Jcblx0IgogCQkidGVzdGIgJSVhbCwlJWFsXG5cdCIKIAkJImpuZSAxYiIKIAkJOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpCi0JCToiMCIgKHNyYyksIjEiIChkZXN0KSA6ICJtZW1vcnkiKTsKKwkJOiIwIiAoc3JjKSwgIjEiIChkZXN0KSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gZGVzdDsKIH0KIEVYUE9SVF9TWU1CT0woc3RyY3B5KTsKICNlbmRpZgogCiAjaWZkZWYgX19IQVZFX0FSQ0hfU1RSTkNQWQotY2hhciAqc3RybmNweShjaGFyICogZGVzdCxjb25zdCBjaGFyICpzcmMsc2l6ZV90IGNvdW50KQorY2hhciAqc3RybmNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBjb3VudCkKIHsKIAlpbnQgZDAsIGQxLCBkMiwgZDM7Ci0JYXNtIHZvbGF0aWxlKCAiMTpcdGRlY2wgJTJcblx0IgorCWFzbSB2b2xhdGlsZSgiMTpcdGRlY2wgJTJcblx0IgogCQkianMgMmZcblx0IgogCQkibG9kc2Jcblx0IgogCQkic3Rvc2Jcblx0IgpAQCAtNDIsMTcgKzQyLDE3IEBACiAJCSJzdG9zYlxuIgogCQkiMjoiCiAJCTogIj0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYyIgKGQyKSwgIj0mYSIgKGQzKQotCQk6IjAiIChzcmMpLCIxIiAoZGVzdCksIjIiIChjb3VudCkgOiAibWVtb3J5Iik7CisJCToiMCIgKHNyYyksICIxIiAoZGVzdCksICIyIiAoY291bnQpIDogIm1lbW9yeSIpOwogCXJldHVybiBkZXN0OwogfQogRVhQT1JUX1NZTUJPTChzdHJuY3B5KTsKICNlbmRpZgogCiAjaWZkZWYgX19IQVZFX0FSQ0hfU1RSQ0FUCi1jaGFyICpzdHJjYXQoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqIHNyYykKK2NoYXIgKnN0cmNhdChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCiB7CiAJaW50IGQwLCBkMSwgZDIsIGQzOwotCWFzbSB2b2xhdGlsZSggInJlcG5lXG5cdCIKKwlhc20gdm9sYXRpbGUoInJlcG5lXG5cdCIKIAkJInNjYXNiXG5cdCIKIAkJImRlY2wgJTFcbiIKIAkJIjE6XHRsb2RzYlxuXHQiCkBAIC02NywxMCArNjcsMTAgQEAKICNlbmRpZgogCiAjaWZkZWYgX19IQVZFX0FSQ0hfU1RSTkNBVAotY2hhciAqc3RybmNhdChjaGFyICogZGVzdCxjb25zdCBjaGFyICogc3JjLHNpemVfdCBjb3VudCkKK2NoYXIgKnN0cm5jYXQoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgY291bnQpCiB7CiAJaW50IGQwLCBkMSwgZDIsIGQzOwotCWFzbSB2b2xhdGlsZSggInJlcG5lXG5cdCIKKwlhc20gdm9sYXRpbGUoInJlcG5lXG5cdCIKIAkJInNjYXNiXG5cdCIKIAkJImRlY2wgJTFcblx0IgogCQkibW92bCAlOCwlM1xuIgpAQCAtODMsNyArODMsNyBAQAogCQkiMjpcdHhvcmwgJTIsJTJcblx0IgogCQkic3Rvc2IiCiAJCTogIj0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKSwgIj0mYyIgKGQzKQotCQk6ICIwIiAoc3JjKSwiMSIgKGRlc3QpLCIyIiAoMCksIjMiICgweGZmZmZmZmZmdSksICJnIiAoY291bnQpCisJCTogIjAiIChzcmMpLCAiMSIgKGRlc3QpLCAiMiIgKDApLCAiMyIgKDB4ZmZmZmZmZmZ1KSwgImciIChjb3VudCkKIAkJOiAibWVtb3J5Iik7CiAJcmV0dXJuIGRlc3Q7CiB9CkBAIC05MSwxMSArOTEsMTEgQEAKICNlbmRpZgogCiAjaWZkZWYgX19IQVZFX0FSQ0hfU1RSQ01QCi1pbnQgc3RyY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpCitpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCkKIHsKIAlpbnQgZDAsIGQxOwogCWludCByZXM7Ci0JYXNtIHZvbGF0aWxlKCAiMTpcdGxvZHNiXG5cdCIKKwlhc20gdm9sYXRpbGUoIjE6XHRsb2RzYlxuXHQiCiAJCSJzY2FzYlxuXHQiCiAJCSJqbmUgMmZcblx0IgogCQkidGVzdGIgJSVhbCwlJWFsXG5cdCIKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQkib3JiICQxLCUlYWxcbiIKIAkJIjM6IgogCQk6Ij1hIiAocmVzKSwgIj0mUyIgKGQwKSwgIj0mRCIgKGQxKQotCQk6IjEiIChjcyksIjIiIChjdCkKKwkJOiIxIiAoY3MpLCAiMiIgKGN0KQogCQk6Im1lbW9yeSIpOwogCXJldHVybiByZXM7CiB9CkBAIC0xMTQsMTEgKzExNCwxMSBAQAogI2VuZGlmCiAKICNpZmRlZiBfX0hBVkVfQVJDSF9TVFJOQ01QCi1pbnQgc3RybmNtcChjb25zdCBjaGFyICogY3MsY29uc3QgY2hhciAqIGN0LHNpemVfdCBjb3VudCkKK2ludCBzdHJuY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCwgc2l6ZV90IGNvdW50KQogewogCWludCByZXM7CiAJaW50IGQwLCBkMSwgZDI7Ci0JYXNtIHZvbGF0aWxlKCAiMTpcdGRlY2wgJTNcblx0IgorCWFzbSB2b2xhdGlsZSgiMTpcdGRlY2wgJTNcblx0IgogCQkianMgMmZcblx0IgogCQkibG9kc2Jcblx0IgogCQkic2Nhc2Jcblx0IgpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCSJvcmIgJDEsJSVhbFxuIgogCQkiNDoiCiAJCToiPWEiIChyZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZjIiAoZDIpCi0JCToiMSIgKGNzKSwiMiIgKGN0KSwiMyIgKGNvdW50KQorCQk6IjEiIChjcyksICIyIiAoY3QpLCAiMyIgKGNvdW50KQogCQk6Im1lbW9yeSIpOwogCXJldHVybiByZXM7CiB9CkBAIC0xMzksMTEgKzEzOSwxMSBAQAogI2VuZGlmCiAKICNpZmRlZiBfX0hBVkVfQVJDSF9TVFJDSFIKLWNoYXIgKnN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpCitjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqcywgaW50IGMpCiB7CiAJaW50IGQwOwotCWNoYXIgKiByZXM7Ci0JYXNtIHZvbGF0aWxlKCAibW92YiAlJWFsLCUlYWhcbiIKKwljaGFyICpyZXM7CisJYXNtIHZvbGF0aWxlKCJtb3ZiICUlYWwsJSVhaFxuIgogCQkiMTpcdGxvZHNiXG5cdCIKIAkJImNtcGIgJSVhaCwlJWFsXG5cdCIKIAkJImplIDJmXG5cdCIKQEAgLTE1Myw3ICsxNTMsNyBAQAogCQkiMjpcdG1vdmwgJTEsJTBcblx0IgogCQkiZGVjbCAlMCIKIAkJOiI9YSIgKHJlcyksICI9JlMiIChkMCkKLQkJOiIxIiAocyksIjAiIChjKQorCQk6IjEiIChzKSwgIjAiIChjKQogCQk6Im1lbW9yeSIpOwogCXJldHVybiByZXM7CiB9CkBAIC0xNjEsMTYgKzE2MSwxNiBAQAogI2VuZGlmCiAKICNpZmRlZiBfX0hBVkVfQVJDSF9TVFJMRU4KLXNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqIHMpCitzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpCiB7CiAJaW50IGQwOwogCWludCByZXM7Ci0JYXNtIHZvbGF0aWxlKCAicmVwbmVcblx0IgorCWFzbSB2b2xhdGlsZSgicmVwbmVcblx0IgogCQkic2Nhc2Jcblx0IgogCQkibm90bCAlMFxuXHQiCiAJCSJkZWNsICUwIgogCQk6Ij1jIiAocmVzKSwgIj0mRCIgKGQwKQotCQk6IjEiIChzKSwiYSIgKDApLCAiMCIgKDB4ZmZmZmZmZmZ1KQorCQk6IjEiIChzKSwgImEiICgwKSwgIjAiICgweGZmZmZmZmZmdSkKIAkJOiJtZW1vcnkiKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTc4LDE5ICsxNzgsMTkgQEAKICNlbmRpZgogCiAjaWZkZWYgX19IQVZFX0FSQ0hfTUVNQ0hSCi12b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqY3MsaW50IGMsc2l6ZV90IGNvdW50KQordm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKmNzLCBpbnQgYywgc2l6ZV90IGNvdW50KQogewogCWludCBkMDsKIAl2b2lkICpyZXM7CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIE5VTEw7Ci0JYXNtIHZvbGF0aWxlKCAicmVwbmVcblx0IgorCWFzbSB2b2xhdGlsZSgicmVwbmVcblx0IgogCQkic2Nhc2Jcblx0IgogCQkiamUgMWZcblx0IgogCQkibW92bCAkMSwlMFxuIgogCQkiMTpcdGRlY2wgJTAiCiAJCToiPUQiIChyZXMpLCAiPSZjIiAoZDApCi0JCToiYSIgKGMpLCIwIiAoY3MpLCIxIiAoY291bnQpCisJCToiYSIgKGMpLCAiMCIgKGNzKSwgIjEiIChjb3VudCkKIAkJOiJtZW1vcnkiKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTk4LDcgKzE5OCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIF9fSEFWRV9BUkNIX01FTVNDQU4KLXZvaWQgKm1lbXNjYW4odm9pZCAqIGFkZHIsIGludCBjLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgKm1lbXNjYW4odm9pZCAqYWRkciwgaW50IGMsIHNpemVfdCBzaXplKQogewogCWlmICghc2l6ZSkKIAkJcmV0dXJuIGFkZHI7CkBAIC0yMTksNyArMjE5LDcgQEAKIHsKIAlpbnQgZDA7CiAJaW50IHJlczsKLQlhc20gdm9sYXRpbGUoICJtb3ZsICUyLCUwXG5cdCIKKwlhc20gdm9sYXRpbGUoIm1vdmwgJTIsJTBcblx0IgogCQkiam1wIDJmXG4iCiAJCSIxOlx0Y21wYiAkMCwoJTApXG5cdCIKIAkJImplIDNmXG5cdCIKQEAgLTIyOSw3ICsyMjksNyBAQAogCQkiam5lIDFiXG4iCiAJCSIzOlx0c3VibCAlMiwlMCIKIAkJOiI9YSIgKHJlcyksICI9JmQiIChkMCkKLQkJOiJjIiAocyksIjEiIChjb3VudCkKKwkJOiJjIiAocyksICIxIiAoY291bnQpCiAJCToibWVtb3J5Iik7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9zdHJzdHJfMzIuYyBiL2FyY2gveDg2L2xpYi9zdHJzdHJfMzIuYwppbmRleCBhM2RhZmJmLi40MmU4YTUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvc3Ryc3RyXzMyLmMKKysrIGIvYXJjaC94ODYvbGliL3N0cnN0cl8zMi5jCkBAIC0xLDkgKzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCi1jaGFyICogc3Ryc3RyKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpCitjaGFyICpzdHJzdHIoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KQogewogaW50CWQwLCBkMTsKLXJlZ2lzdGVyIGNoYXIgKiBfX3JlczsKK3JlZ2lzdGVyIGNoYXIgKl9fcmVzOwogX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIm1vdmwgJTYsJSVlZGlcblx0IgogCSJyZXBuZVxuXHQiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvdGh1bmtfNjQuUyBiL2FyY2gveDg2L2xpYi90aHVua182NC5TCmluZGV4IDhiOTJkNDIuLmUwMDkyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi90aHVua182NC5TCisrKyBiL2FyY2gveDg2L2xpYi90aHVua182NC5TCkBAIC00MSwxMSArNDEsNiBAQAogCXRodW5rIHJ3c2VtX2Rvd25ncmFkZV90aHVuayxyd3NlbV9kb3duZ3JhZGVfd2FrZQogI2VuZGlmCQogCQotCXRodW5rIF9fZG93bl9mYWlsZWQsX19kb3duCi0JdGh1bmtfcmV0cmF4IF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSxfX2Rvd25faW50ZXJydXB0aWJsZQotCXRodW5rX3JldHJheCBfX2Rvd25fZmFpbGVkX3RyeWxvY2ssX19kb3duX3RyeWxvY2sKLQl0aHVuayBfX3VwX3dha2V1cCxfX3VwCi0KICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKIAl0aHVuayB0cmFjZV9oYXJkaXJxc19vbl90aHVuayx0cmFjZV9oYXJkaXJxc19vbgogCXRodW5rIHRyYWNlX2hhcmRpcnFzX29mZl90aHVuayx0cmFjZV9oYXJkaXJxc19vZmYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jIGIvYXJjaC94ODYvbGliL3VzZXJjb3B5XzMyLmMKaW5kZXggZTg0OWI5OS4uMjRlNjA5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL3VzZXJjb3B5XzMyLmMKKysrIGIvYXJjaC94ODYvbGliL3VzZXJjb3B5XzMyLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBVc2VyIGFkZHJlc3Mgc3BhY2UgYWNjZXNzIGZ1bmN0aW9ucy4KICAqIFRoZSBub24gaW5saW5lZCBwYXJ0cyBvZiBhc20taTM4Ni91YWNjZXNzLmggYXJlIGhlcmUuCiAgKgpAQCAtMjIsMTQgKzIyLDE0IEBACiAjZW5kaWYKIAlyZXR1cm4gMTsKIH0KLSNkZWZpbmUgbW92c2xfaXNfb2soYTEsYTIsbikgXAotCV9fbW92c2xfaXNfb2soKHVuc2lnbmVkIGxvbmcpKGExKSwodW5zaWduZWQgbG9uZykoYTIpLChuKSkKKyNkZWZpbmUgbW92c2xfaXNfb2soYTEsIGEyLCBuKSBcCisJX19tb3ZzbF9pc19vaygodW5zaWduZWQgbG9uZykoYTEpLCAodW5zaWduZWQgbG9uZykoYTIpLCAobikpCiAKIC8qCiAgKiBDb3B5IGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHVzZXJzcGFjZS4KICAqLwogCi0jZGVmaW5lIF9fZG9fc3RybmNweV9mcm9tX3VzZXIoZHN0LHNyYyxjb3VudCxyZXMpCQkJICAgXAorI2RlZmluZSBfX2RvX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCwgcmVzKQkJCSAgIFwKIGRvIHsJCQkJCQkJCQkgICBcCiAJaW50IF9fZDAsIF9fZDEsIF9fZDI7CQkJCQkJICAgXAogCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCSAgIFwKQEAgLTYxLDcgKzYxLDcgQEAKICAqICAgICAgICAgbGVhc3QgQGNvdW50IGJ5dGVzIGxvbmcuCiAgKiBAc3JjOiAgIFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgogICogQGNvdW50OiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4KLSAqIAorICoKICAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHVzZXJzcGFjZSB0byBrZXJuZWwgc3BhY2UuCiAgKiBDYWxsZXIgbXVzdCBjaGVjayB0aGUgc3BlY2lmaWVkIGJsb2NrIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24uCkBAIC05MCw3ICs5MCw3IEBACiAgKiAgICAgICAgIGxlYXN0IEBjb3VudCBieXRlcyBsb25nLgogICogQHNyYzogICBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KICAqIEBjb3VudDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuCi0gKiAKKyAqCiAgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB1c2Vyc3BhY2UgdG8ga2VybmVsIHNwYWNlLgogICoKICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZwpAQCAtMTIwLDcgKzEyMCw3IEBACiBkbyB7CQkJCQkJCQkJXAogCWludCBfX2QwOwkJCQkJCQlcCiAJbWlnaHRfc2xlZXAoKTsJCQkJCQkJXAotICAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKIAkJIjA6CXJlcDsgc3Rvc2xcbiIJCQkJCVwKIAkJIgltb3ZsICUyLCUwXG4iCQkJCQlcCiAJCSIxOglyZXA7IHN0b3NiXG4iCQkJCQlcCkBAIC0zMzMsMTcgKzMzMywxNyBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkgICAgICAgIiAgICAgICAgLmFsaWduIDIsMHg5MFxuIgogCQkgICAgICAgIjA6ICAgICAgbW92bCAzMiglNCksICUlZWF4XG4iCi0JCSAgICAgICAiICAgICAgICBjbXBsICQ2NywgJTBcbiIgICAgICAKLQkJICAgICAgICIgICAgICAgIGpiZSAyZlxuIiAgICAgICAgICAgIAorCQkgICAgICAgIiAgICAgICAgY21wbCAkNjcsICUwXG4iCisJCSAgICAgICAiICAgICAgICBqYmUgMmZcbiIKIAkJICAgICAgICIxOiAgICAgIG1vdmwgNjQoJTQpLCAlJWVheFxuIgotCQkgICAgICAgIiAgICAgICAgLmFsaWduIDIsMHg5MFxuIiAgICAgCi0JCSAgICAgICAiMjogICAgICBtb3ZsIDAoJTQpLCAlJWVheFxuIiAKLQkJICAgICAgICIyMTogICAgIG1vdmwgNCglNCksICUlZWR4XG4iIAotCQkgICAgICAgIiAgICAgICAgbW92bCAlJWVheCwgMCglMylcbiIgCi0JCSAgICAgICAiICAgICAgICBtb3ZsICUlZWR4LCA0KCUzKVxuIiAKLQkJICAgICAgICIzOiAgICAgIG1vdmwgOCglNCksICUlZWF4XG4iIAotCQkgICAgICAgIjMxOiAgICAgbW92bCAxMiglNCksJSVlZHhcbiIgCi0JCSAgICAgICAiICAgICAgICBtb3ZsICUlZWF4LCA4KCUzKVxuIiAKKwkJICAgICAgICIgICAgICAgIC5hbGlnbiAyLDB4OTBcbiIKKwkJICAgICAgICIyOiAgICAgIG1vdmwgMCglNCksICUlZWF4XG4iCisJCSAgICAgICAiMjE6ICAgICBtb3ZsIDQoJTQpLCAlJWVkeFxuIgorCQkgICAgICAgIiAgICAgICAgbW92bCAlJWVheCwgMCglMylcbiIKKwkJICAgICAgICIgICAgICAgIG1vdmwgJSVlZHgsIDQoJTMpXG4iCisJCSAgICAgICAiMzogICAgICBtb3ZsIDgoJTQpLCAlJWVheFxuIgorCQkgICAgICAgIjMxOiAgICAgbW92bCAxMiglNCksJSVlZHhcbiIKKwkJICAgICAgICIgICAgICAgIG1vdmwgJSVlYXgsIDgoJTMpXG4iCiAJCSAgICAgICAiICAgICAgICBtb3ZsICUlZWR4LCAxMiglMylcbiIKIAkJICAgICAgICI0OiAgICAgIG1vdmwgMTYoJTQpLCAlJWVheFxuIgogCQkgICAgICAgIjQxOiAgICAgbW92bCAyMCglNCksICUlZWR4XG4iCkBAIC0zNjksMzggKzM2OSwzOCBAQAogCQkgICAgICAgIjkxOiAgICAgbW92bCA2MCglNCksICUlZWR4XG4iCiAJCSAgICAgICAiICAgICAgICBtb3ZsICUlZWF4LCA1NiglMylcbiIKIAkJICAgICAgICIgICAgICAgIG1vdmwgJSVlZHgsIDYwKCUzKVxuIgotCQkgICAgICAgIiAgICAgICAgYWRkbCAkLTY0LCAlMFxuIiAgICAgCi0JCSAgICAgICAiICAgICAgICBhZGRsICQ2NCwgJTRcbiIgICAgICAKLQkJICAgICAgICIgICAgICAgIGFkZGwgJDY0LCAlM1xuIiAgICAgIAotCQkgICAgICAgIiAgICAgICAgY21wbCAkNjMsICUwXG4iICAgICAgCi0JCSAgICAgICAiICAgICAgICBqYSAgMGJcbiIgICAgICAgICAgICAKLQkJICAgICAgICI1OiAgICAgIG1vdmwgICUwLCAlJWVheFxuIiAgIAotCQkgICAgICAgIiAgICAgICAgc2hybCAgJDIsICUwXG4iICAgICAgCi0JCSAgICAgICAiICAgICAgICBhbmRsICQzLCAlJWVheFxuIiAgICAKLQkJICAgICAgICIgICAgICAgIGNsZFxuIiAgICAgICAgICAgICAgIAotCQkgICAgICAgIjY6ICAgICAgcmVwOyBtb3ZzbFxuIiAgIAorCQkgICAgICAgIiAgICAgICAgYWRkbCAkLTY0LCAlMFxuIgorCQkgICAgICAgIiAgICAgICAgYWRkbCAkNjQsICU0XG4iCisJCSAgICAgICAiICAgICAgICBhZGRsICQ2NCwgJTNcbiIKKwkJICAgICAgICIgICAgICAgIGNtcGwgJDYzLCAlMFxuIgorCQkgICAgICAgIiAgICAgICAgamEgIDBiXG4iCisJCSAgICAgICAiNTogICAgICBtb3ZsICAlMCwgJSVlYXhcbiIKKwkJICAgICAgICIgICAgICAgIHNocmwgICQyLCAlMFxuIgorCQkgICAgICAgIiAgICAgICAgYW5kbCAkMywgJSVlYXhcbiIKKwkJICAgICAgICIgICAgICAgIGNsZFxuIgorCQkgICAgICAgIjY6ICAgICAgcmVwOyBtb3ZzbFxuIgogCQkgICAgICAgIiAgICAgICAgbW92bCAlJWVheCwlMFxuIgotCQkgICAgICAgIjc6ICAgICAgcmVwOyBtb3ZzYlxuIgkKLQkJICAgICAgICI4OlxuIgkJCQorCQkgICAgICAgIjc6ICAgICAgcmVwOyBtb3ZzYlxuIgorCQkgICAgICAgIjg6XG4iCiAJCSAgICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgotCQkgICAgICAgIjk6ICAgICAgbGVhIDAoJSVlYXgsJTAsNCksJTBcbiIJCi0JCSAgICAgICAiMTY6ICAgICBwdXNobCAlMFxuIgkKLQkJICAgICAgICIgICAgICAgIHB1c2hsICUlZWF4XG4iCQorCQkgICAgICAgIjk6ICAgICAgbGVhIDAoJSVlYXgsJTAsNCksJTBcbiIKKwkJICAgICAgICIxNjogICAgIHB1c2hsICUwXG4iCisJCSAgICAgICAiICAgICAgICBwdXNobCAlJWVheFxuIgogCQkgICAgICAgIiAgICAgICAgeG9ybCAlJWVheCwlJWVheFxuIgotCQkgICAgICAgIiAgICAgICAgcmVwOyBzdG9zYlxuIgkKLQkJICAgICAgICIgICAgICAgIHBvcGwgJSVlYXhcbiIJCi0JCSAgICAgICAiICAgICAgICBwb3BsICUwXG4iCQotCQkgICAgICAgIiAgICAgICAgam1wIDhiXG4iCQotCQkgICAgICAgIi5wcmV2aW91c1xuIgkJCisJCSAgICAgICAiICAgICAgICByZXA7IHN0b3NiXG4iCisJCSAgICAgICAiICAgICAgICBwb3BsICUlZWF4XG4iCisJCSAgICAgICAiICAgICAgICBwb3BsICUwXG4iCisJCSAgICAgICAiICAgICAgICBqbXAgOGJcbiIKKwkJICAgICAgICIucHJldmlvdXNcbiIKIAkJICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JCSAgICAgICAiCS5hbGlnbiA0XG4iCSAgIAotCQkgICAgICAgIgkubG9uZyAwYiwxNmJcbiIJIAorCQkgICAgICAgIgkuYWxpZ24gNFxuIgorCQkgICAgICAgIgkubG9uZyAwYiwxNmJcbiIKIAkJICAgICAgICIJLmxvbmcgMWIsMTZiXG4iCiAJCSAgICAgICAiCS5sb25nIDJiLDE2YlxuIgogCQkgICAgICAgIgkubG9uZyAyMWIsMTZiXG4iCi0JCSAgICAgICAiCS5sb25nIDNiLDE2YlxuIgkKKwkJICAgICAgICIJLmxvbmcgM2IsMTZiXG4iCiAJCSAgICAgICAiCS5sb25nIDMxYiwxNmJcbiIKLQkJICAgICAgICIJLmxvbmcgNGIsMTZiXG4iCQorCQkgICAgICAgIgkubG9uZyA0YiwxNmJcbiIKIAkJICAgICAgICIJLmxvbmcgNDFiLDE2YlxuIgogCQkgICAgICAgIgkubG9uZyAxMGIsMTZiXG4iCiAJCSAgICAgICAiCS5sb25nIDUxYiwxNmJcbiIKQEAgLTQxMiw5ICs0MTIsOSBAQAogCQkgICAgICAgIgkubG9uZyA4MWIsMTZiXG4iCiAJCSAgICAgICAiCS5sb25nIDE0YiwxNmJcbiIKIAkJICAgICAgICIJLmxvbmcgOTFiLDE2YlxuIgotCQkgICAgICAgIgkubG9uZyA2Yiw5YlxuIgkKLQkJICAgICAgICIgICAgICAgIC5sb25nIDdiLDE2YlxuIiAKLQkJICAgICAgICIucHJldmlvdXMiCQkKKwkJICAgICAgICIJLmxvbmcgNmIsOWJcbiIKKwkJICAgICAgICIgICAgICAgIC5sb25nIDdiLDE2YlxuIgorCQkgICAgICAgIi5wcmV2aW91cyIKIAkJICAgICAgIDogIj0mYyIoc2l6ZSksICI9JkQiIChkMCksICI9JlMiIChkMSkKIAkJICAgICAgIDogICIxIih0byksICIyIihmcm9tKSwgIjAiKHNpemUpCiAJCSAgICAgICA6ICJlYXgiLCAiZWR4IiwgIm1lbW9yeSIpOwpAQCAtNDI5LDcgKzQyOSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2NvcHlfdXNlcl96ZXJvaW5nX2ludGVsX25vY2FjaGUodm9pZCAqdG8sCiAJCQkJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLSAgICAgICAgaW50IGQwLCBkMTsKKwlpbnQgZDAsIGQxOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJICAgICAgICIgICAgICAgIC5hbGlnbiAyLDB4OTBcbiIKQEAgLTUyNiw3ICs1MjYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19jb3B5X3VzZXJfaW50ZWxfbm9jYWNoZSh2b2lkICp0bywKIAkJCQljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplKQogewotICAgICAgICBpbnQgZDAsIGQxOworCWludCBkMCwgZDE7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkgICAgICAgIiAgICAgICAgLmFsaWduIDIsMHg5MFxuIgpAQCAtNjI5LDcgKzYyOSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1g4Nl9JTlRFTF9VU0VSQ09QWSAqLwogCiAvKiBHZW5lcmljIGFyYml0cmFyeSBzaXplZCBjb3B5LiAgKi8KLSNkZWZpbmUgX19jb3B5X3VzZXIodG8sZnJvbSxzaXplKQkJCQkJXAorI2RlZmluZSBfX2NvcHlfdXNlcih0bywgZnJvbSwgc2l6ZSkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaW50IF9fZDAsIF9fZDEsIF9fZDI7CQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQk6ICJtZW1vcnkiKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIF9fY29weV91c2VyX3plcm9pbmcodG8sZnJvbSxzaXplKQkJCQlcCisjZGVmaW5lIF9fY29weV91c2VyX3plcm9pbmcodG8sIGZyb20sIHNpemUpCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaW50IF9fZDAsIF9fZDEsIF9fZDI7CQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKQEAgLTcxMiw3ICs3MTIsNyBAQAogewogI2lmbmRlZiBDT05GSUdfWDg2X1dQX1dPUktTX09LCiAJaWYgKHVubGlrZWx5KGJvb3RfY3B1X2RhdGEud3Bfd29ya3Nfb2sgPT0gMCkgJiYKLQkJCSgodW5zaWduZWQgbG9uZyApdG8pIDwgVEFTS19TSVpFKSB7CisJCQkoKHVuc2lnbmVkIGxvbmcpdG8pIDwgVEFTS19TSVpFKSB7CiAJCS8qCiAJCSAqIFdoZW4gd2UgYXJlIGluIGFuIGF0b21pYyBzZWN0aW9uIChzZWUKIAkJICogbW0vZmlsZW1hcC5jOmZpbGVfcmVhZF9hY3RvciksIHJldHVybiB0aGUgZnVsbApAQCAtNzIxLDI2ICs3MjEsMjYgQEAKIAkJaWYgKGluX2F0b21pYygpKQogCQkJcmV0dXJuIG47CiAKLQkJLyogCisJCS8qCiAJCSAqIENQVSBkb2VzIG5vdCBob25vciB0aGUgV1AgYml0IHdoZW4gd3JpdGluZwogCQkgKiBmcm9tIHN1cGVydmlzb3J5IG1vZGUsIGFuZCBkdWUgdG8gcHJlZW1wdGlvbiBvciBTTVAsCiAJCSAqIHRoZSBwYWdlIHRhYmxlcyBjYW4gY2hhbmdlIGF0IGFueSB0aW1lLgogCQkgKiBEbyBpdCBtYW51YWxseS4JTWFuZnJlZCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgogCQkgKi8KIAkJd2hpbGUgKG4pIHsKLQkJICAgICAgCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKCh1bnNpZ25lZCBsb25nKXRvKSVQQUdFX1NJWkU7CisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9ICgodW5zaWduZWQgbG9uZyl0byklUEFHRV9TSVpFOwogCQkJdW5zaWduZWQgbG9uZyBsZW4gPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CiAJCQlpbnQgcmV0dmFsOwogCQkJc3RydWN0IHBhZ2UgKnBnOwogCQkJdm9pZCAqbWFkZHI7Ci0JCQkKKwogCQkJaWYgKGxlbiA+IG4pCiAJCQkJbGVuID0gbjsKIAogc3Vydml2ZToKIAkJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJCXJldHZhbCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAotCQkJCQkodW5zaWduZWQgbG9uZyApdG8sIDEsIDEsIDAsICZwZywgTlVMTCk7CisJCQkJCSh1bnNpZ25lZCBsb25nKXRvLCAxLCAxLCAwLCAmcGcsIE5VTEwpOwogCiAJCQlpZiAocmV0dmFsID09IC1FTk9NRU0gJiYgaXNfZ2xvYmFsX2luaXQoY3VycmVudCkpIHsKIAkJCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwpAQCAtNzUwLDggKzc1MCw4IEBACiAKIAkJCWlmIChyZXR2YWwgIT0gMSkgewogCQkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JCSAgICAgICAJCWJyZWFrOwotCQkgICAgICAgCX0KKwkJCQlicmVhazsKKwkJCX0KIAogCQkJbWFkZHIgPSBrbWFwX2F0b21pYyhwZywgS01fVVNFUjApOwogCQkJbWVtY3B5KG1hZGRyICsgb2Zmc2V0LCBmcm9tLCBsZW4pOwpAQCAtODAyLDEyICs4MDIsMTIgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBuKQogewogI2lmZGVmIENPTkZJR19YODZfSU5URUxfVVNFUkNPUFkKLQlpZiAoIG4gPiA2NCAmJiBjcHVfaGFzX3htbTIpCi0gICAgICAgICAgICAgICAgbiA9IF9fY29weV91c2VyX3plcm9pbmdfaW50ZWxfbm9jYWNoZSh0bywgZnJvbSwgbik7CisJaWYgKG4gPiA2NCAmJiBjcHVfaGFzX3htbTIpCisJCW4gPSBfX2NvcHlfdXNlcl96ZXJvaW5nX2ludGVsX25vY2FjaGUodG8sIGZyb20sIG4pOwogCWVsc2UKIAkJX19jb3B5X3VzZXJfemVyb2luZyh0bywgZnJvbSwgbik7CiAjZWxzZQotICAgICAgICBfX2NvcHlfdXNlcl96ZXJvaW5nKHRvLCBmcm9tLCBuKTsKKwlfX2NvcHlfdXNlcl96ZXJvaW5nKHRvLCBmcm9tLCBuKTsKICNlbmRpZgogCXJldHVybiBuOwogfQpAQCAtODE3LDEyICs4MTcsMTIgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBuKQogewogI2lmZGVmIENPTkZJR19YODZfSU5URUxfVVNFUkNPUFkKLQlpZiAoIG4gPiA2NCAmJiBjcHVfaGFzX3htbTIpCi0gICAgICAgICAgICAgICAgbiA9IF9fY29weV91c2VyX2ludGVsX25vY2FjaGUodG8sIGZyb20sIG4pOworCWlmIChuID4gNjQgJiYgY3B1X2hhc194bW0yKQorCQluID0gX19jb3B5X3VzZXJfaW50ZWxfbm9jYWNoZSh0bywgZnJvbSwgbik7CiAJZWxzZQogCQlfX2NvcHlfdXNlcih0bywgZnJvbSwgbik7CiAjZWxzZQotICAgICAgICBfX2NvcHlfdXNlcih0bywgZnJvbSwgbik7CisJX19jb3B5X3VzZXIodG8sIGZyb20sIG4pOwogI2VuZGlmCiAJcmV0dXJuIG47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKaW5kZXggMjkyYTIyNS4uOTVmYzQ2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEFQSUMgZHJpdmVyIGZvciAiYmlnc21wIiBYQVBJQyBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiA4IHZpcnR1YWwgQ1BVcy4KICAqIERyaXZlcyB0aGUgbG9jYWwgQVBJQyBpbiAiY2x1c3RlcmVkIG1vZGUiLgogICovCkBAIC0zMiwyNiArMzIsMjYgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgYmlnc21wX2RtaV90YWJsZVtdID0gewotCXsgaHBfaHRfYmlnc21wLCAiSFAgUHJvTGlhbnQgREw3NjAgRzIiLCB7Ci0JCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJIUCIpLAotCQlETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwgIlA0NC0iKSwKLQl9fSwKKwl7IGhwX2h0X2JpZ3NtcCwgIkhQIFByb0xpYW50IERMNzYwIEcyIiwKKwl7IERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJIUCIpLAorCURNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCAiUDQ0LSIpLH0KKwl9LAogCi0JeyBocF9odF9iaWdzbXAsICJIUCBQcm9MaWFudCBETDc0MCIsIHsKLQkJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkhQIiksCi0JCURNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCAiUDQ3LSIpLAotCSB9fSwKKwl7IGhwX2h0X2JpZ3NtcCwgIkhQIFByb0xpYW50IERMNzQwIiwKKwl7IERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJIUCIpLAorCURNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCAiUDQ3LSIpLH0KKwl9LAogCSB7IH0KIH07CiAKIAogc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKLXsgCit7CiAJaWYgKGRlZl90b19iaWdzbXApCi0gICAgICAgIAlkbWlfYmlnc21wID0gMTsKKwlkbWlfYmlnc21wID0gMTsKIAllbHNlCiAJCWRtaV9jaGVja19zeXN0ZW0oYmlnc21wX2RtaV90YWJsZSk7Ci0JcmV0dXJuIGRtaV9iaWdzbXA7IAotfSAKKwlyZXR1cm4gZG1pX2JpZ3NtcDsKK30KIAotc3RydWN0IGdlbmFwaWMgYXBpY19iaWdzbXAgPSBBUElDX0lOSVQoImJpZ3NtcCIsIHByb2JlX2JpZ3NtcCk7IAorc3RydWN0IGdlbmFwaWMgYXBpY19iaWdzbXAgPSBBUElDX0lOSVQoImJpZ3NtcCIsIHByb2JlX2JpZ3NtcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2RlZmF1bHQuYwppbmRleCAxYWYwY2M3Li45ZTgzNWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBEZWZhdWx0IGdlbmVyaWMgQVBJQyBkcml2ZXIuIFRoaXMgaGFuZGxlcyB1cCB0byA4IENQVXMuCiAgKi8KICNkZWZpbmUgQVBJQ19ERUZJTklUSU9OIDEKQEAgLTE5LDggKzE5LDggQEAKIAogLyogc2hvdWxkIGJlIGNhbGxlZCBsYXN0LiAqLwogc3RhdGljIGludCBwcm9iZV9kZWZhdWx0KHZvaWQpCi17IAorewogCXJldHVybiAxOwotfSAKK30KIAotc3RydWN0IGdlbmFwaWMgYXBpY19kZWZhdWx0ID0gQVBJQ19JTklUKCJkZWZhdWx0IiwgcHJvYmVfZGVmYXVsdCk7IAorc3RydWN0IGdlbmFwaWMgYXBpY19kZWZhdWx0ID0gQVBJQ19JTklUKCJkZWZhdWx0IiwgcHJvYmVfZGVmYXVsdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCmluZGV4IGY0MTBkM2MuLmM1YWU3NTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCkBAIC0xLDggKzEsOSBAQAotLyogQ29weXJpZ2h0IDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLiAKLSAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yIAotICogCisvKgorICogQ29weXJpZ2h0IDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICogU3ViamVjdCB0byB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCB2LjIKKyAqCiAgKiBHZW5lcmljIHg4NiBBUElDIGRyaXZlciBwcm9iZSBsYXllci4KLSAqLyAgCisgKi8KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjQsNyArMjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGdlbmFwaWMgKmFwaWNfcHJvYmVbXSBfX2luaXRkYXRhID0gewogCSZhcGljX3N1bW1pdCwKLQkmYXBpY19iaWdzbXAsIAorCSZhcGljX2JpZ3NtcCwKIAkmYXBpY19lczcwMDAsCiAJJmFwaWNfZGVmYXVsdCwJLyogbXVzdCBiZSBsYXN0ICovCiAJTlVMTCwKQEAgLTY5LDcgKzcwLDcgQEAKIH0KIAogdm9pZCBfX2luaXQgZ2VuZXJpY19hcGljX3Byb2JlKHZvaWQpCi17IAorewogCWlmICghY21kbGluZV9hcGljKSB7CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyBpKyspIHsKQEAgLTgzLDQwICs4NCw0MCBAQAogCQkJcGFuaWMoIkRpZG4ndCBmaW5kIGFuIEFQSUMgZHJpdmVyIik7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEFQSUMgZHJpdmVyICVzXG4iLCBnZW5hcGljLT5uYW1lKTsKLX0gCit9CiAKIC8qIFRoZXNlIGZ1bmN0aW9ucyBjYW4gc3dpdGNoIHRoZSBBUElDIGV2ZW4gYWZ0ZXIgdGhlIGluaXRpYWwgLT5wcm9iZSgpICovCiAKIGludCBfX2luaXQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgY2hhciAqcHJvZHVjdGlkKQoteyAKK3sKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsgCi0JCWlmIChhcGljX3Byb2JlW2ldLT5tcHNfb2VtX2NoZWNrKG1wYyxvZW0scHJvZHVjdGlkKSkgeyAKKwlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsKKwkJaWYgKGFwaWNfcHJvYmVbaV0tPm1wc19vZW1fY2hlY2sobXBjLCBvZW0sIHByb2R1Y3RpZCkpIHsKIAkJCWlmICghY21kbGluZV9hcGljKSB7CiAJCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gQVBJQyBkcml2ZXIgYCVzJy5cbiIsCiAJCQkJICAgICAgIGdlbmFwaWMtPm5hbWUpOwogCQkJfQogCQkJcmV0dXJuIDE7Ci0JCX0gCi0JfSAKKwkJfQorCX0KIAlyZXR1cm4gMDsKLX0gCit9CiAKIGludCBfX2luaXQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKIHsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsgCi0JCWlmIChhcGljX3Byb2JlW2ldLT5hY3BpX21hZHRfb2VtX2NoZWNrKG9lbV9pZCwgb2VtX3RhYmxlX2lkKSkgeyAKKwlmb3IgKGkgPSAwOyBhcGljX3Byb2JlW2ldOyArK2kpIHsKKwkJaWYgKGFwaWNfcHJvYmVbaV0tPmFjcGlfbWFkdF9vZW1fY2hlY2sob2VtX2lkLCBvZW1fdGFibGVfaWQpKSB7CiAJCQlpZiAoIWNtZGxpbmVfYXBpYykgewogCQkJCWdlbmFwaWMgPSBhcGljX3Byb2JlW2ldOwogCQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLAogCQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKIAkJCX0KIAkJCXJldHVybiAxOwotCQl9IAotCX0gCi0JcmV0dXJuIDA7CQorCQl9CisJfQorCXJldHVybiAwOwogfQogCiBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKaW5kZXggNzQ4ODNjYy4uYTk3ZWEwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEFQSUMgZHJpdmVyIGZvciB0aGUgSUJNICJTdW1taXQiIGNoaXBzZXQuCiAgKi8KICNkZWZpbmUgQVBJQ19ERUZJTklUSU9OIDEKQEAgLTE5LDkgKzE5LDkgQEAKICNpbmNsdWRlIDxhc20vbWFjaC1zdW1taXQvbWFjaF9tcHBhcnNlLmg+CiAKIHN0YXRpYyBpbnQgcHJvYmVfc3VtbWl0KHZvaWQpCi17IAorewogCS8qIHByb2JlZCBsYXRlciBpbiBtcHRhYmxlL0FDUEkgaG9va3MgKi8KIAlyZXR1cm4gMDsKLX0gCit9CiAKLXN0cnVjdCBnZW5hcGljIGFwaWNfc3VtbWl0ID0gQVBJQ19JTklUKCJzdW1taXQiLCBwcm9iZV9zdW1taXQpOyAKK3N0cnVjdCBnZW5hcGljIGFwaWNfc3VtbWl0ID0gQVBJQ19JTklUKCJzdW1taXQiLCBwcm9iZV9zdW1taXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L01ha2VmaWxlIGIvYXJjaC94ODYvbWFjaC1yZGMzMjF4L01ha2VmaWxlCmluZGV4IDFmYWFjODEuLjgzMjViNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtcmRjMzIxeC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgUkRDMzIxeCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCi1vYmotJChDT05GSUdfWDg2X1JEQzMyMVgpICAgICAgICA6PSBncGlvLm8gcGxhdGZvcm0ubyB3ZHQubworb2JqLSQoQ09ORklHX1g4Nl9SREMzMjFYKSAgICAgICAgOj0gZ3Bpby5vIHBsYXRmb3JtLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L2dwaW8uYyBiL2FyY2gveDg2L21hY2gtcmRjMzIxeC9ncGlvLmMKaW5kZXggMDMxMjY5MS4uMjQ3ZjMzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L2dwaW8uYworKysgYi9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvZ3Bpby5jCkBAIC0xLDkxICsxLDE5NCBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgotICogIAlSREMzMjF4IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBHUElPIHN1cHBvcnQKKyAqICBHUElPIHN1cHBvcnQgZm9yIFJEQyBTb0MgUjMyMTAvUjg2MTAKICAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCBWb2xrZXIgV2Vpc3MgPGRldkB0aW50dWMuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmg+CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJkY19ncGlvX2lzX3ZhbGlkKHVuc2lnbmVkIGdwaW8pCisKKy8qIHNwaW4gbG9jayB0byBwcm90ZWN0IG91ciBwcml2YXRlIGNvcHkgb2YgR1BJTyBkYXRhIHJlZ2lzdGVyIHBsdXMKKyAgIHRoZSBhY2Nlc3MgdG8gUENJIGNvbmYgcmVnaXN0ZXJzLiAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOworCisvKiBjb3B5IG9mIEdQSU8gZGF0YSByZWdpc3RlcnMgKi8KK3N0YXRpYyB1MzIgZ3Bpb19kYXRhX3JlZzE7CitzdGF0aWMgdTMyIGdwaW9fZGF0YV9yZWcyOworCitzdGF0aWMgdTMyIGdwaW9fcmVxdWVzdF9kYXRhWzJdOworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZGMzMjF4X2NvbmZfd3JpdGUodW5zaWduZWQgYWRkciwgdTMyIHZhbHVlKQogewotCXJldHVybiAoZ3BpbyA8PSBSRENfTUFYX0dQSU8pOworCW91dGwoKDEgPDwgMzEpIHwgKDcgPDwgMTEpIHwgYWRkciwgUkRDMzIxMF9DRkdSRUdfQUREUik7CisJb3V0bCh2YWx1ZSwgUkRDMzIxMF9DRkdSRUdfREFUQSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmRjX2dwaW9fcmVhZCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGlubGluZSB2b2lkIHJkYzMyMXhfY29uZl9vcih1bnNpZ25lZCBhZGRyLCB1MzIgdmFsdWUpCiB7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQotCXZhbCA9IDB4ODAwMDAwMDAgfCAoNyA8PCAxMSkgfCAoKGdwaW8mMHgyMD8weDg0OjB4NDgpKTsKLQlvdXRsKHZhbCwgUkRDMzIxMF9DRkdSRUdfQUREUik7Ci0JdWRlbGF5KDEwKTsKLQl2YWwgPSBpbmwoUkRDMzIxMF9DRkdSRUdfREFUQSk7Ci0JdmFsIHw9ICgweDEgPDwgKGdwaW8gJiAweDFGKSk7Ci0Jb3V0bCh2YWwsIFJEQzMyMTBfQ0ZHUkVHX0RBVEEpOwotCXVkZWxheSgxMCk7Ci0JdmFsID0gMHg4MDAwMDAwMCB8ICg3IDw8IDExKSB8ICgoZ3BpbyYweDIwPzB4ODg6MHg0QykpOwotCW91dGwodmFsLCBSREMzMjEwX0NGR1JFR19BRERSKTsKLQl1ZGVsYXkoMTApOwotCXZhbCA9IGlubChSREMzMjEwX0NGR1JFR19EQVRBKTsKLQotCXJldHVybiB2YWw7CisJb3V0bCgoMSA8PCAzMSkgfCAoNyA8PCAxMSkgfCBhZGRyLCBSREMzMjEwX0NGR1JFR19BRERSKTsKKwl2YWx1ZSB8PSBpbmwoUkRDMzIxMF9DRkdSRUdfREFUQSk7CisJb3V0bCh2YWx1ZSwgUkRDMzIxMF9DRkdSRUdfREFUQSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJkY19ncGlvX3dyaXRlKHVuc2lnbmVkIGludCB2YWwpCitzdGF0aWMgaW5saW5lIHUzMiByZGMzMjF4X2NvbmZfcmVhZCh1bnNpZ25lZCBhZGRyKQogewotCWlmICh2YWwpIHsKLQkJb3V0bCh2YWwsIFJEQzMyMTBfQ0ZHUkVHX0RBVEEpOwotCQl1ZGVsYXkoMTApOwotCX0KKwlvdXRsKCgxIDw8IDMxKSB8ICg3IDw8IDExKSB8IGFkZHIsIFJEQzMyMTBfQ0ZHUkVHX0FERFIpOworCisJcmV0dXJuIGlubChSREMzMjEwX0NGR1JFR19EQVRBKTsKIH0KIAorLyogY29uZmlndXJlIHBpbiBhcyBHUElPICovCitzdGF0aWMgdm9pZCByZGMzMjF4X2NvbmZpZ3VyZV9ncGlvKHVuc2lnbmVkIGdwaW8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlyZGMzMjF4X2NvbmZfb3IoZ3BpbyA8IDMyCisJCT8gUkRDMzIxWF9HUElPX0NUUkxfUkVHMSA6IFJEQzMyMVhfR1BJT19DVFJMX1JFRzIsCisJCTEgPDwgKGdwaW8gJiAweDFmKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Cit9CisKKy8qIGluaXRpYWxseSBzZXR1cCB0aGUgMiBjb3BpZXMgb2YgdGhlIGdwaW8gZGF0YSByZWdpc3RlcnMuCisgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IHRoZSBwbGF0Zm9ybSBzZXR1cCBjb2RlLiAqLwordm9pZCBfX2luaXQgcmRjMzIxeF9ncGlvX3NldHVwKCkKK3sKKwkvKiB0aGlzIG1pZ2h0IG5vdCBiZSwgd2hhdCBvdGhlcnMgKEJJT1MsIGJvb3Rsb2FkZXIsIGV0Yy4pCisJICAgd3JvdGUgdG8gdGhlc2UgcmVnaXN0ZXJzIGJlZm9yZSwgYnV0IGl0J3MgYSBnb29kIGd1ZXNzLiBTdGlsbAorCSAgIGJldHRlciB0aGFuIGp1c3QgdXNpbmcgMHhmZmZmZmZmZi4gKi8KKworCWdwaW9fZGF0YV9yZWcxID0gcmRjMzIxeF9jb25mX3JlYWQoUkRDMzIxWF9HUElPX0RBVEFfUkVHMSk7CisJZ3Bpb19kYXRhX3JlZzIgPSByZGMzMjF4X2NvbmZfcmVhZChSREMzMjFYX0dQSU9fREFUQV9SRUcyKTsKK30KKworLyogZGV0ZXJtaW5lLCBpZiBncGlvIG51bWJlciBpcyB2YWxpZCAqLworc3RhdGljIGlubGluZSBpbnQgcmRjMzIxeF9pc19ncGlvKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIGdwaW8gPD0gUkRDMzIxWF9NQVhfR1BJTzsKK30KKworLyogcmVxdWVzdCBHUElPICovCitpbnQgcmRjX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFyZGMzMjF4X2lzX2dwaW8oZ3BpbykpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCWlmIChncGlvX3JlcXVlc3RfZGF0YVsoZ3BpbyAmIDB4MjApID8gMSA6IDBdICYgKDEgPDwgKGdwaW8gJiAweDFmKSkpCisJCWdvdG8gaW51c2U7CisJZ3Bpb19yZXF1ZXN0X2RhdGFbKGdwaW8gJiAweDIwKSA/IDEgOiAwXSB8PSAoMSA8PCAoZ3BpbyAmIDB4MWYpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworaW51c2U6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKHJkY19ncGlvX3JlcXVlc3QpOworCisvKiByZWxlYXNlIHByZXZpb3VzbHktY2xhaW1lZCBHUElPICovCit2b2lkIHJkY19ncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFyZGMzMjF4X2lzX2dwaW8oZ3BpbykpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlncGlvX3JlcXVlc3RfZGF0YVsoZ3BpbyAmIDB4MjApID8gMSA6IDBdICY9IH4oMSA8PCAoZ3BpbyAmIDB4MWYpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wocmRjX2dwaW9fZnJlZSk7CisKKy8qIHJlYWQgR1BJTyBwaW4gKi8KIGludCByZGNfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKLQlpZiAocmRjX2dwaW9faXNfdmFsaWQoZ3BpbykpCi0JCXJldHVybiAoaW50KXJkY19ncGlvX3JlYWQoZ3Bpbyk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKKwl1MzIgcmVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmVnID0gcmRjMzIxeF9jb25mX3JlYWQoZ3BpbyA8IDMyCisJCT8gUkRDMzIxWF9HUElPX0RBVEFfUkVHMSA6IFJEQzMyMVhfR1BJT19EQVRBX1JFRzIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuICgxIDw8IChncGlvICYgMHgxZikpICYgcmVnID8gMSA6IDA7CiB9CiBFWFBPUlRfU1lNQk9MKHJkY19ncGlvX2dldF92YWx1ZSk7CiAKKy8qIHNldCBHUElPIHBpbiB0byB2YWx1ZSAqLwogdm9pZCByZGNfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOwogCi0JaWYgKCFyZGNfZ3Bpb19pc192YWxpZChncGlvKSkKLQkJcmV0dXJuOwotCi0JdmFsID0gcmRjX2dwaW9fcmVhZChncGlvKTsKLQotCWlmICh2YWx1ZSkKLQkJdmFsICY9IH4oMHgxIDw8IChncGlvICYgMHgxRikpOwotCWVsc2UKLQkJdmFsIHw9ICgweDEgPDwgKGdwaW8gJiAweDFGKSk7Ci0KLQlyZGNfZ3Bpb193cml0ZSh2YWwpOworCXJlZyA9IDEgPDwgKGdwaW8gJiAweDFmKTsKKwlpZiAoZ3BpbyA8IDMyKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHZhbHVlKQorCQkJZ3Bpb19kYXRhX3JlZzEgfD0gcmVnOworCQllbHNlCisJCQlncGlvX2RhdGFfcmVnMSAmPSB+cmVnOworCQlyZGMzMjF4X2NvbmZfd3JpdGUoUkRDMzIxWF9HUElPX0RBVEFfUkVHMSwgZ3Bpb19kYXRhX3JlZzEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCWlmICh2YWx1ZSkKKwkJCWdwaW9fZGF0YV9yZWcyIHw9IHJlZzsKKwkJZWxzZQorCQkJZ3Bpb19kYXRhX3JlZzIgJj0gfnJlZzsKKwkJcmRjMzIxeF9jb25mX3dyaXRlKFJEQzMyMVhfR1BJT19EQVRBX1JFRzIsIGdwaW9fZGF0YV9yZWcyKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJfQogfQogRVhQT1JUX1NZTUJPTChyZGNfZ3Bpb19zZXRfdmFsdWUpOwogCisvKiBjb25maWd1cmUgR1BJTyBwaW4gYXMgaW5wdXQgKi8KIGludCByZGNfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKIHsKKwlpZiAoIXJkYzMyMXhfaXNfZ3BpbyhncGlvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZGMzMjF4X2NvbmZpZ3VyZV9ncGlvKGdwaW8pOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHJkY19ncGlvX2RpcmVjdGlvbl9pbnB1dCk7CiAKKy8qIGNvbmZpZ3VyZSBHUElPIHBpbiBhcyBvdXRwdXQgYW5kIHNldCB2YWx1ZSAqLwogaW50IHJkY19ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogeworCWlmICghcmRjMzIxeF9pc19ncGlvKGdwaW8pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKKwlyZGMzMjF4X2NvbmZpZ3VyZV9ncGlvKGdwaW8pOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHJkY19ncGlvX2RpcmVjdGlvbl9vdXRwdXQpOwotCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtcmRjMzIxeC9wbGF0Zm9ybS5jIGIvYXJjaC94ODYvbWFjaC1yZGMzMjF4L3BsYXRmb3JtLmMKaW5kZXggZGRhNjAyNC4uYTAzNzA0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L3BsYXRmb3JtLmMKKysrIGIvYXJjaC94ODYvbWFjaC1yZGMzMjF4L3BsYXRmb3JtLmMKQEAgLTYyLDYgKzYyLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgcmRjX2JvYXJkX3NldHVwKHZvaWQpCiB7CisJcmRjMzIxeF9ncGlvX3NldHVwKCk7CisKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocmRjMzIxeF9kZXZzLCBBUlJBWV9TSVpFKHJkYzMyMXhfZGV2cykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvd2R0LmMgYi9hcmNoL3g4Ni9tYWNoLXJkYzMyMXgvd2R0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNTYyNWEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1yZGMzMjF4L3dkdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLS8qCi0gKiBSREMzMjF4IHdhdGNoZG9nIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgotICoKLSAqIFRoaXMgZHJpdmVyIGlzIGhpZ2hseSBpbnNwaXJlZCBmcm9tIHRoZSBjcHU1X3dkdCBkcml2ZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmg+Ci0KLSNkZWZpbmUgUkRDX1dEVF9NQVNLCTB4ODAwMDAwMDAgLyogTWFzayAqLwotI2RlZmluZSBSRENfV0RUX0VOCTB4MDA4MDAwMDAgLyogRW5hYmxlIGJpdCAqLwotI2RlZmluZSBSRENfV0RUX1dUSQkweDAwMjAwMDAwIC8qIEdlbmVyYXRlIENQVSByZXNldC9OTUkvV0RUIG9uIHRpbWVvdXQgKi8KLSNkZWZpbmUgUkRDX1dEVF9SU1QJMHgwMDEwMDAwMCAvKiBSZXNldCBiaXQgKi8KLSNkZWZpbmUgUkRDX1dEVF9XSUYJMHgwMDA0MDAwMCAvKiBXRFQgSVJRIEZsYWcgKi8KLSNkZWZpbmUgUkRDX1dEVF9JUlQJMHgwMDAwMDEwMCAvKiBJUlEgUm91dGluZyB0YWJsZSAqLwotI2RlZmluZSBSRENfV0RUX0NOVAkweDAwMDAwMDAxIC8qIFdEVCBjb3VudCAqLwotCi0jZGVmaW5lIFJEQ19DTFNfVE1SCTB4ODAwMDM4NDQgLyogQ2xlYXIgdGltZXIgKi8KLQotI2RlZmluZSBSRENfV0RUX0lOVEVSVkFMCShIWi8xMCsxKQotCi1pbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKLW1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7Ci0KLXN0YXRpYyBpbnQgdGlja3MgPSAxMDAwOwotCi0vKiBzb21lIGRldmljZSBkYXRhICovCi0KLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCBjb21wbGV0aW9uIHN0b3A7Ci0Jdm9sYXRpbGUgaW50IHJ1bm5pbmc7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0Jdm9sYXRpbGUgaW50IHF1ZXVlOwotCWludCBkZWZhdWx0X3RpY2tzOwotCXVuc2lnbmVkIGxvbmcgaW51c2U7Ci19IHJkYzMyMXhfd2R0X2RldmljZTsKLQotLyogZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zICovCi0KLXN0YXRpYyB2b2lkIHJkYzMyMXhfd2R0X3RyaWdnZXIodW5zaWduZWQgbG9uZyB1bnVzZWQpCi17Ci0JaWYgKHJkYzMyMXhfd2R0X2RldmljZS5ydW5uaW5nKQotCQl0aWNrcy0tOwotCi0JLyoga2VlcCB3YXRjaGRvZyBhbGl2ZSAqLwotCW91dGwoUkRDX1dEVF9FTnxpbmwoUkRDMzIxMF9DRkdSRUdfREFUQSksIFJEQzMyMTBfQ0ZHUkVHX0RBVEEpOwotCi0JLyogcmVxdWV1ZT8/ICovCi0JaWYgKHJkYzMyMXhfd2R0X2RldmljZS5xdWV1ZSAmJiB0aWNrcykKLQkJbW9kX3RpbWVyKCZyZGMzMjF4X3dkdF9kZXZpY2UudGltZXIsCi0JCQkJamlmZmllcyArIFJEQ19XRFRfSU5URVJWQUwpOwotCWVsc2UgewotCQkvKiB0aWNrcyBkb2Vzbid0IG1hdHRlciBhbnl3YXkgKi8KLQkJY29tcGxldGUoJnJkYzMyMXhfd2R0X2RldmljZS5zdG9wKTsKLQl9Ci0KLX0KLQotc3RhdGljIHZvaWQgcmRjMzIxeF93ZHRfcmVzZXQodm9pZCkKLXsKLQl0aWNrcyA9IHJkYzMyMXhfd2R0X2RldmljZS5kZWZhdWx0X3RpY2tzOwotfQotCi1zdGF0aWMgdm9pZCByZGMzMjF4X3dkdF9zdGFydCh2b2lkKQotewotCWlmICghcmRjMzIxeF93ZHRfZGV2aWNlLnF1ZXVlKSB7Ci0JCXJkYzMyMXhfd2R0X2RldmljZS5xdWV1ZSA9IDE7Ci0KLQkJLyogQ2xlYXIgdGhlIHRpbWVyICovCi0JCW91dGwoUkRDX0NMU19UTVIsIFJEQzMyMTBfQ0ZHUkVHX0FERFIpOwotCi0JCS8qIEVuYWJsZSB3YXRjaGRvZyBhbmQgc2V0IHRoZSB0aW1lb3V0IHRvIDgxLjkyIHVzICovCi0JCW91dGwoUkRDX1dEVF9FTnxSRENfV0RUX0NOVCwgUkRDMzIxMF9DRkdSRUdfREFUQSk7Ci0KLQkJbW9kX3RpbWVyKCZyZGMzMjF4X3dkdF9kZXZpY2UudGltZXIsCi0JCQkJamlmZmllcyArIFJEQ19XRFRfSU5URVJWQUwpOwotCX0KLQotCS8qIGlmIHByb2Nlc3MgZGllcywgY291bnRlciBpcyBub3QgZGVjcmVtZW50ZWQgKi8KLQlyZGMzMjF4X3dkdF9kZXZpY2UucnVubmluZysrOwotfQotCi1zdGF0aWMgaW50IHJkYzMyMXhfd2R0X3N0b3Aodm9pZCkKLXsKLQlpZiAocmRjMzIxeF93ZHRfZGV2aWNlLnJ1bm5pbmcpCi0JCXJkYzMyMXhfd2R0X2RldmljZS5ydW5uaW5nID0gMDsKLQotCXRpY2tzID0gcmRjMzIxeF93ZHRfZGV2aWNlLmRlZmF1bHRfdGlja3M7Ci0KLQlyZXR1cm4gLUVJTzsKLX0KLQotLyogZmlsZXN5c3RlbSBvcGVyYXRpb25zICovCi0KLXN0YXRpYyBpbnQgcmRjMzIxeF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmcmRjMzIxeF93ZHRfZGV2aWNlLmludXNlKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIGludCByZGMzMjF4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmcmRjMzIxeF93ZHRfZGV2aWNlLmludXNlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByZGMzMjF4X3dkdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewotCQkub3B0aW9ucyA9IFdESU9GX0NBUkRSRVNFVCwKLQkJLmlkZW50aXR5ID0gIlJEQzMyMXggV0RUIiwKLQl9OwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFdESU9DX0tFRVBBTElWRToKLQkJcmRjMzIxeF93ZHRfcmVzZXQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBXRElPQ19HRVRTVEFUVVM6Ci0JCS8qIFJlYWQgdGhlIHZhbHVlIGZyb20gdGhlIERBVEEgcmVnaXN0ZXIgKi8KLQkJdmFsdWUgPSBpbmwoUkRDMzIxMF9DRkdSRUdfREFUQSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZhbHVlLCBzaXplb2YoaW50KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSBXRElPQ19HRVRTVVBQT1JUOgotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSBXRElPQ19TRVRPUFRJT05TOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVlLCBhcmdwLCBzaXplb2YoaW50KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJc3dpdGNoICh2YWx1ZSkgewotCQljYXNlIFdESU9TX0VOQUJMRUNBUkQ6Ci0JCQlyZGMzMjF4X3dkdF9zdGFydCgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0RJT1NfRElTQUJMRUNBUkQ6Ci0JCQlyZXR1cm4gcmRjMzIxeF93ZHRfc3RvcCgpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCByZGMzMjF4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlpZiAoIWNvdW50KQotCQlyZXR1cm4gLUVJTzsKLQotCXJkYzMyMXhfd2R0X3Jlc2V0KCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkYzMyMXhfd2R0X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5pb2N0bAkJPSByZGMzMjF4X3dkdF9pb2N0bCwKLQkub3BlbgkJPSByZGMzMjF4X3dkdF9vcGVuLAotCS53cml0ZQkJPSByZGMzMjF4X3dkdF93cml0ZSwKLQkucmVsZWFzZQk9IHJkYzMyMXhfd2R0X3JlbGVhc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcmRjMzIxeF93ZHRfbWlzYyA9IHsKLQkubWlub3IJPSBXQVRDSERPR19NSU5PUiwKLQkubmFtZQk9ICJ3YXRjaGRvZyIsCi0JLmZvcHMJPSAmcmRjMzIxeF93ZHRfZm9wcywKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJkYzMyMXhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IG1pc2NfcmVnaXN0ZXIoJnJkYzMyMXhfd2R0X21pc2MpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIndhdGNoZG9nIG1pc2NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBSZXNldCB0aGUgd2F0Y2hkb2cgKi8KLQlvdXRsKFJEQ19XRFRfUlNULCBSREMzMjEwX0NGR1JFR19EQVRBKTsKLQotCWluaXRfY29tcGxldGlvbigmcmRjMzIxeF93ZHRfZGV2aWNlLnN0b3ApOwotCXJkYzMyMXhfd2R0X2RldmljZS5xdWV1ZSA9IDA7Ci0KLQljbGVhcl9iaXQoMCwgJnJkYzMyMXhfd2R0X2RldmljZS5pbnVzZSk7Ci0KLQlzZXR1cF90aW1lcigmcmRjMzIxeF93ZHRfZGV2aWNlLnRpbWVyLCByZGMzMjF4X3dkdF90cmlnZ2VyLCAwKTsKLQotCXJkYzMyMXhfd2R0X2RldmljZS5kZWZhdWx0X3RpY2tzID0gdGlja3M7Ci0KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAid2F0Y2hkb2cgaW5pdCBzdWNjZXNzXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJkYzMyMXhfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWlmIChyZGMzMjF4X3dkdF9kZXZpY2UucXVldWUpIHsKLQkJcmRjMzIxeF93ZHRfZGV2aWNlLnF1ZXVlID0gMDsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmcmRjMzIxeF93ZHRfZGV2aWNlLnN0b3ApOwotCX0KLQotCW1pc2NfZGVyZWdpc3RlcigmcmRjMzIxeF93ZHRfbWlzYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmRjMzIxeF93ZHRfZHJpdmVyID0gewotCS5wcm9iZSA9IHJkYzMyMXhfd2R0X3Byb2JlLAotCS5yZW1vdmUgPSByZGMzMjF4X3dkdF9yZW1vdmUsCi0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gInJkYzMyMXgtd2R0IiwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcmRjMzIxeF93ZHRfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJkYzMyMXhfd2R0X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCByZGMzMjF4X3dkdF9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJkYzMyMXhfd2R0X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHJkYzMyMXhfd2R0X2luaXQpOwotbW9kdWxlX2V4aXQocmRjMzIxeF93ZHRfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJEQzMyMXggd2F0Y2hkb2cgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZpc3dzL3RyYXBzLmMgYi9hcmNoL3g4Ni9tYWNoLXZpc3dzL3RyYXBzLmMKaW5kZXggODQzYjY3YS4uYmZhYzZiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC12aXN3cy90cmFwcy5jCisrKyBiL2FyY2gveDg2L21hY2gtdmlzd3MvdHJhcHMuYwpAQCAtNDYsOCArNDYsOSBAQAogCSAqLwogCXNldF9maXhtYXAoRklYX0FQSUNfQkFTRSwgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSk7CiAJc2V0dXBfbG9jYWxfQVBJQygpOwotCXByaW50ayhLRVJOX0lORk8gIkxvY2FsIEFQSUMgVmVyc2lvbiAlI2x4LCBJRCAlI2x4XG4iLAotCQlhcGljX3JlYWQoQVBJQ19MVlIpLCBhcGljX3JlYWQoQVBJQ19JRCkpOworCXByaW50ayhLRVJOX0lORk8gIkxvY2FsIEFQSUMgVmVyc2lvbiAlI3gsIElEICUjeFxuIiwKKwkJKHVuc2lnbmVkIGludClhcGljX3JlYWQoQVBJQ19MVlIpLAorCQkodW5zaWduZWQgaW50KWFwaWNfcmVhZChBUElDX0lEKSk7CiAKIAlzZXRfZml4bWFwKEZJWF9DT19DUFUsIENPX0NQVV9QSFlTKTsKIAlzZXRfZml4bWFwKEZJWF9DT19BUElDLCBDT19BUElDX1BIWVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12aXN3cy92aXN3c19hcGljLmMgYi9hcmNoL3g4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYwppbmRleCA3MTBmYWY3Li5jZWY5Y2IxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKglsaW51eC9hcmNoL2kzODYvbWFjaC12aXN3cy92aXN3c19hcGljLmMKLSAqCiAgKglDb3B5cmlnaHQgKEMpIDE5OTkgQmVudCBIYWdlbWFyaywgSW5nbyBNb2xuYXIKICAqCiAgKiAgU0dJIFZpc3VhbCBXb3Jrc3RhdGlvbiBpbnRlcnJ1cHQgY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfYmFzaWMuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKaW5kZXggNmE5NDllNC4uNDZkNmY4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfYmFzaWMuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCkBAIC0yLDggKzIsNiBAQAogICoKICAqIEF1dGhvcjogSi5FLkouQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbQogICoKLSAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdm95YWdlci5jCi0gKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgdm95YWdlciBzcGVjaWZpYyByb3V0aW5lcyBmb3IgZ2V0dGluZwogICogaW5pdGlhbGlzYXRpb24gb2YgdGhlIGFyY2hpdGVjdHVyZSB0byBmdW5jdGlvbi4gIEZvciBhZGRpdGlvbmFsCiAgKiBmZWF0dXJlcyBzZWU6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCmluZGV4IDE3YTc5MDRmNy4uZWNhYjlmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMKKysrIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMKQEAgLTQsOCArNCw2IEBACiAgKgogICogQXV0aG9yOiBKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCiAgKgotICogbGludXgvYXJjaC9pMzg2L2tlcm5lbC92b3lhZ2VyX2NhdC5jCi0gKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbG9naWMgZm9yIG1hbmlwdWxhdGluZyB0aGUgQ0FUIGJ1cwogICogaW4gYSBsZXZlbCA1IG1hY2hpbmUuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwppbmRleCAzY2M4ZWIyLi45NmY2MGM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpAQCAtNCw4ICs0LDYgQEAKICAqCiAgKiBBdXRob3I6IEouRS5KLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20KICAqCi0gKiBsaW51eC9hcmNoL2kzODYva2VybmVsL3ZveWFnZXJfc21wLmMKLSAqCiAgKiBUaGlzIGZpbGUgcHJvdmlkZXMgYWxsIHRoZSBzYW1lIGV4dGVybmFsIGVudHJpZXMgYXMgc21wLmMgYnV0IHVzZXMKICAqIHRoZSB2b3lhZ2VyIGhhbCB0byBwcm92aWRlIHRoZSBmdW5jdGlvbmFsaXR5CiAgKi8KQEAgLTI3LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CisjaW5jbHVkZSA8YXNtL3RyYW1wb2xpbmUuaD4KIAogLyogVExCIHN0YXRlIC0tIHZpc2libGUgZXh0ZXJuYWxseSwgaW5kZXhlZCBwaHlzaWNhbGx5ICovCiBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpID0geyAmaW5pdF9tbSwgMCB9OwpAQCAtMjEwLDcgKzIwOSw3IEBACiAvKiBzdGVhbCBhIHBhZ2UgZnJvbSB0aGUgYm90dG9tIG9mIG1lbW9yeSBmb3IgdGhlIHRyYW1wb2xpbmUgYW5kCiAgKiBzcXVpcnJlbCBpdHMgYWRkcmVzcyBhd2F5IGhlcmUuICBUaGlzIHdpbGwgYmUgaW4ga2VybmVsIHZpcnR1YWwKICAqIHNwYWNlICovCi1zdGF0aWMgX191MzIgdHJhbXBvbGluZV9iYXNlOwordW5zaWduZWQgY2hhciAqdHJhbXBvbGluZV9iYXNlOwogCiAvKiBUaGUgcGVyIGNwdSBwcm9maWxlIHN0dWZmIC0gdXNlZCBpbiBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0ICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwcm9mX211bHRpcGxpZXIpID0gMTsKQEAgLTQyOSwxNSArNDI4LDE1IEBACiB9CiAKIC8qIHNldCB1cCB0aGUgdHJhbXBvbGluZSBhbmQgcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjb2RlICovCi1zdGF0aWMgX191MzIgX19pbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKK3Vuc2lnbmVkIGxvbmcgX19pbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKIHsKIAkvKiB0aGVzZSB0d28gYXJlIGdsb2JhbCBzeW1ib2xzIGluIHRyYW1wb2xpbmUuUyAqLwogCWV4dGVybiBjb25zdCBfX3U4IHRyYW1wb2xpbmVfZW5kW107CiAJZXh0ZXJuIGNvbnN0IF9fdTggdHJhbXBvbGluZV9kYXRhW107CiAKLQltZW1jcHkoKF9fdTggKikgdHJhbXBvbGluZV9iYXNlLCB0cmFtcG9saW5lX2RhdGEsCisJbWVtY3B5KHRyYW1wb2xpbmVfYmFzZSwgdHJhbXBvbGluZV9kYXRhLAogCSAgICAgICB0cmFtcG9saW5lX2VuZCAtIHRyYW1wb2xpbmVfZGF0YSk7Ci0JcmV0dXJuIHZpcnRfdG9fcGh5cygoX191OCAqKSB0cmFtcG9saW5lX2Jhc2UpOworCXJldHVybiB2aXJ0X3RvX3BoeXModHJhbXBvbGluZV9iYXNlKTsKIH0KIAogLyogUm91dGluZSBpbml0aWFsbHkgY2FsbGVkIHdoZW4gYSBub24tYm9vdCBDUFUgaXMgYnJvdWdodCBvbmxpbmUgKi8KQEAgLTUyMCwxMyArNTE5LDYgQEAKIAkgICAgJiB+KHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnMKIAkJJiB2b3lhZ2VyX2FsbG93ZWRfYm9vdF9wcm9jZXNzb3JzKTsKIAotCS8qIFRoaXMgaXMgYW4gYXJlYSBpbiBoZWFkLlMgd2hpY2ggd2FzIHVzZWQgdG8gc2V0IHVwIHRoZQotCSAqIGluaXRpYWwga2VybmVsIHN0YWNrLiAgV2UgbmVlZCB0byBhbHRlciB0aGlzIHRvIGdpdmUgdGhlCi0JICogYm9vdGluZyBDUFUgYSBuZXcgc3RhY2sgKHRha2VuIGZyb20gaXRzIGlkbGUgcHJvY2VzcykgKi8KLQlleHRlcm4gc3RydWN0IHsKLQkJX191OCAqc3A7Ci0JCXVuc2lnbmVkIHNob3J0IHNzOwotCX0gc3RhY2tfc3RhcnQ7CiAJLyogVGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBDUEkgSURUIGdhdGUgKGluIHJlYWwgbW9kZSkgd2hpY2gKIAkgKiB3ZSdyZSBoaWphY2tpbmcgdG8gYm9vdCB0aGUgQ1BVICovCiAJdW5pb24gSURURm9ybWF0IHsKQEAgLTExNjYsNyArMTE1OCw3IEBACiAgKiBpcyBzb3J0ZWQgb3V0ICovCiB2b2lkIF9faW5pdCBzbXBfYWxsb2NfbWVtb3J5KHZvaWQpCiB7Ci0JdHJhbXBvbGluZV9iYXNlID0gKF9fdTMyKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCXRyYW1wb2xpbmVfYmFzZSA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CiAJaWYgKF9fcGEodHJhbXBvbGluZV9iYXNlKSA+PSAweDkzMDAwKQogCQlCVUcoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKaW5kZXggYzY5YzkzMS4uMTU0NjRhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKKysrIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKQEAgLTQsOCArNCw2IEBACiAgKgogICogQXV0aG9yOiBKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tCiAgKgotICogbGludXgvYXJjaC9pMzg2L2tlcm5lbC92b3lhZ2VyX3RocmVhZC5jCi0gKgogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIG1hY2hpbmUgc3RhdHVzIG1vbml0b3IgdGhyZWFkIGZvciB0aGUKICAqIHZveWFnZXIgYXJjaGl0ZWN0dXJlLiAgVGhpcyBhbGxvd3MgdXMgdG8gbW9uaXRvciB0aGUgbWFjaGluZQogICogZW52aXJvbm1lbnQgKHRlbXAsIHZvbHRhZ2UsIGZhbiBmdW5jdGlvbikgYW5kIHRoZSBmcm9udCBwYW5lbCBhbmQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hdGgtZW11L2ZwdV9lbnRyeS5jIGIvYXJjaC94ODYvbWF0aC1lbXUvZnB1X2VudHJ5LmMKaW5kZXggNzYwYmFlZS4uNmUzOGQ4NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWF0aC1lbXUvZnB1X2VudHJ5LmMKKysrIGIvYXJjaC94ODYvbWF0aC1lbXUvZnB1X2VudHJ5LmMKQEAgLTI3Niw2ICsyNzYsNyBAQAogCWVudHJ5X3NlbF9vZmYub2Zmc2V0ID0gRlBVX09SSUdfRUlQOwogCWVudHJ5X3NlbF9vZmYuc2VsZWN0b3IgPSBGUFVfQ1M7CiAJZW50cnlfc2VsX29mZi5vcGNvZGUgPSAoYnl0ZTEgPDwgOCkgfCBGUFVfbW9kcm07CisJZW50cnlfc2VsX29mZi5lbXB0eSA9IDA7CiAKIAlGUFVfcm0gPSBGUFVfbW9kcm0gJiA3OwogCkBAIC02NzcsNyArNjc4LDcgQEAKIAkJICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKIAkJICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQogewotCXN0cnVjdCBpMzg3X3NvZnRfc3RydWN0ICpzMzg3ID0gJnRhcmdldC0+dGhyZWFkLmkzODcuc29mdDsKKwlzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCAqczM4NyA9ICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnNvZnQ7CiAJdm9pZCAqc3BhY2UgPSBzMzg3LT5zdF9zcGFjZTsKIAlpbnQgcmV0OwogCWludCBvZmZzZXQsIG90aGVyLCBpLCB0YWdzLCByZWduciwgdGFnLCBuZXd0b3A7CkBAIC03MjksNyArNzMwLDcgQEAKIAkJICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKIAkJICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQogewotCXN0cnVjdCBpMzg3X3NvZnRfc3RydWN0ICpzMzg3ID0gJnRhcmdldC0+dGhyZWFkLmkzODcuc29mdDsKKwlzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCAqczM4NyA9ICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnNvZnQ7CiAJY29uc3Qgdm9pZCAqc3BhY2UgPSBzMzg3LT5zdF9zcGFjZTsKIAlpbnQgcmV0OwogCWludCBvZmZzZXQgPSAoUzM4Ny0+ZnRvcCAmIDcpICogMTAsIG90aGVyID0gODAgLSBvZmZzZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYXRoLWVtdS9mcHVfc3lzdGVtLmggYi9hcmNoL3g4Ni9tYXRoLWVtdS9mcHVfc3lzdGVtLmgKaW5kZXggYTNhZTI4Yy4uMTM0ODhmYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWF0aC1lbXUvZnB1X3N5c3RlbS5oCisrKyBiL2FyY2gveDg2L21hdGgtZW11L2ZwdV9zeXN0ZW0uaApAQCAtMzUsOCArMzUsOCBAQAogI2RlZmluZSBTRUdfRVhQQU5EX0RPV04ocykJKCgocykuYiAmICgoMSA8PCAxMSkgfCAoMSA8PCAxMCkpKSBcCiAJCQkJID09ICgxIDw8IDEwKSkKIAotI2RlZmluZSBJMzg3CQkJKGN1cnJlbnQtPnRocmVhZC5pMzg3KQotI2RlZmluZSBGUFVfaW5mbwkJKEkzODcuc29mdC5pbmZvKQorI2RlZmluZSBJMzg3CQkJKGN1cnJlbnQtPnRocmVhZC54c3RhdGUpCisjZGVmaW5lIEZQVV9pbmZvCQkoSTM4Ny0+c29mdC5pbmZvKQogCiAjZGVmaW5lIEZQVV9DUwkJCSgqKHVuc2lnbmVkIHNob3J0ICopICYoRlBVX2luZm8tPl9fX2NzKSkKICNkZWZpbmUgRlBVX1NTCQkJKCoodW5zaWduZWQgc2hvcnQgKikgJihGUFVfaW5mby0+X19fc3MpKQpAQCAtNDYsMjUgKzQ2LDI1IEBACiAjZGVmaW5lIEZQVV9FSVAJCQkoRlBVX2luZm8tPl9fX2VpcCkKICNkZWZpbmUgRlBVX09SSUdfRUlQCQkoRlBVX2luZm8tPl9fX29yaWdfZWlwKQogCi0jZGVmaW5lIEZQVV9sb29rYWhlYWQgICAgICAgICAgIChJMzg3LnNvZnQubG9va2FoZWFkKQorI2RlZmluZSBGUFVfbG9va2FoZWFkICAgICAgICAgICAoSTM4Ny0+c29mdC5sb29rYWhlYWQpCiAKIC8qIG56IGlmIGlwX29mZnNldCBhbmQgY3Nfc2VsZWN0b3IgYXJlIG5vdCB0byBiZSBzZXQgZm9yIHRoZSBjdXJyZW50CiAgICBpbnN0cnVjdGlvbi4gKi8KLSNkZWZpbmUgbm9faXBfdXBkYXRlCQkoKih1X2NoYXIgKikmKEkzODcuc29mdC5ub191cGRhdGUpKQotI2RlZmluZSBGUFVfcm0JCQkoKih1X2NoYXIgKikmKEkzODcuc29mdC5ybSkpCisjZGVmaW5lIG5vX2lwX3VwZGF0ZQkJKCoodV9jaGFyICopJihJMzg3LT5zb2Z0Lm5vX3VwZGF0ZSkpCisjZGVmaW5lIEZQVV9ybQkJCSgqKHVfY2hhciAqKSYoSTM4Ny0+c29mdC5ybSkpCiAKIC8qIE51bWJlciBvZiBieXRlcyBvZiBkYXRhIHdoaWNoIGNhbiBiZSBsZWdhbGx5IGFjY2Vzc2VkIGJ5IHRoZSBjdXJyZW50CiAgICBpbnN0cnVjdGlvbi4gVGhpcyBvbmx5IG5lZWRzIHRvIGhvbGQgYSBudW1iZXIgPD0gMTA4LCBzbyBhIGJ5dGUgd2lsbCBkby4gKi8KLSNkZWZpbmUgYWNjZXNzX2xpbWl0CQkoKih1X2NoYXIgKikmKEkzODcuc29mdC5hbGltaXQpKQorI2RlZmluZSBhY2Nlc3NfbGltaXQJCSgqKHVfY2hhciAqKSYoSTM4Ny0+c29mdC5hbGltaXQpKQogCi0jZGVmaW5lIHBhcnRpYWxfc3RhdHVzCQkoSTM4Ny5zb2Z0LnN3ZCkKLSNkZWZpbmUgY29udHJvbF93b3JkCQkoSTM4Ny5zb2Z0LmN3ZCkKLSNkZWZpbmUgZnB1X3RhZ193b3JkCQkoSTM4Ny5zb2Z0LnR3ZCkKLSNkZWZpbmUgcmVnaXN0ZXJzCQkoSTM4Ny5zb2Z0LnN0X3NwYWNlKQotI2RlZmluZSB0b3AJCQkoSTM4Ny5zb2Z0LmZ0b3ApCisjZGVmaW5lIHBhcnRpYWxfc3RhdHVzCQkoSTM4Ny0+c29mdC5zd2QpCisjZGVmaW5lIGNvbnRyb2xfd29yZAkJKEkzODctPnNvZnQuY3dkKQorI2RlZmluZSBmcHVfdGFnX3dvcmQJCShJMzg3LT5zb2Z0LnR3ZCkKKyNkZWZpbmUgcmVnaXN0ZXJzCQkoSTM4Ny0+c29mdC5zdF9zcGFjZSkKKyNkZWZpbmUgdG9wCQkJKEkzODctPnNvZnQuZnRvcCkKIAotI2RlZmluZSBpbnN0cnVjdGlvbl9hZGRyZXNzCSgqKHN0cnVjdCBhZGRyZXNzICopJkkzODcuc29mdC5maXApCi0jZGVmaW5lIG9wZXJhbmRfYWRkcmVzcwkJKCooc3RydWN0IGFkZHJlc3MgKikmSTM4Ny5zb2Z0LmZvbykKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fYWRkcmVzcwkoKihzdHJ1Y3QgYWRkcmVzcyAqKSZJMzg3LT5zb2Z0LmZpcCkKKyNkZWZpbmUgb3BlcmFuZF9hZGRyZXNzCQkoKihzdHJ1Y3QgYWRkcmVzcyAqKSZJMzg3LT5zb2Z0LmZvbykKIAogI2RlZmluZSBGUFVfYWNjZXNzX29rKHgseSx6KQlpZiAoICFhY2Nlc3Nfb2soeCx5LHopICkgXAogCQkJCW1hdGhfYWJvcnQoRlBVX2luZm8sU0lHU0VHVikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hdGgtZW11L3JlZ19sZF9zdHIuYyBiL2FyY2gveDg2L21hdGgtZW11L3JlZ19sZF9zdHIuYwppbmRleCA3OTlkNGFmLi5kNTk3ZmU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYXRoLWVtdS9yZWdfbGRfc3RyLmMKKysrIGIvYXJjaC94ODYvbWF0aC1lbXUvcmVnX2xkX3N0ci5jCkBAIC0zODMsMTUgKzM4MywxNSBAQAogCWludCBleHA7CiAJRlBVX1JFRyB0bXA7CiAKKwlsWzBdID0gMDsKKwlsWzFdID0gMDsKIAlpZiAoc3QwX3RhZyA9PSBUQUdfVmFsaWQpIHsKIAkJcmVnX2NvcHkoc3QwX3B0ciwgJnRtcCk7CiAJCWV4cCA9IGV4cG9uZW50KCZ0bXApOwogCiAJCWlmIChleHAgPCBET1VCTEVfRW1pbikgewkvKiBJdCBtYXkgYmUgYSBkZW5vcm1hbCAqLwogCQkJYWRkZXhwb25lbnQoJnRtcCwgLURPVUJMRV9FbWluICsgNTIpOwkvKiBsYXJnZXN0IGV4cCB0byBiZSA1MSAqLwotCi0JCSAgICAgIGRlbm9ybWFsX2FyZzoKLQorZGVub3JtYWxfYXJnOgogCQkJaWYgKChwcmVjaXNpb25fbG9zcyA9IEZQVV9yb3VuZF90b19pbnQoJnRtcCwgc3QwX3RhZykpKSB7CiAjaWZkZWYgUEVDVUxJQVJfNDg2CiAJCQkJLyogRGlkIGl0IHJvdW5kIHRvIGEgbm9uLWRlbm9ybWFsID8gKi8KQEAgLTQ3Nyw4ICs0NzcsNyBAQAogCiAJCQkJLyogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZTogc2VlIHNlYyAxNi4yLjUuMSBvZiB0aGUgODA0ODYgYm9vayAqLwogCQkJCS8qIE92ZXJmbG93IHRvIGluZmluaXR5ICovCi0JCQkJbFswXSA9IDB4MDAwMDAwMDA7CS8qIFNldCB0byAqLwotCQkJCWxbMV0gPSAweDdmZjAwMDAwOwkvKiArIElORiAqLworCQkJCWxbMV0gPSAweDdmZjAwMDAwOwkvKiBTZXQgdG8gKyBJTkYgKi8KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHByZWNpc2lvbl9sb3NzKSB7CiAJCQkJCWlmIChpbmNyZW1lbnQpCkBAIC00OTIsOCArNDkxLDYgQEAKIAkJfQogCX0gZWxzZSBpZiAoc3QwX3RhZyA9PSBUQUdfWmVybykgewogCQkvKiBOdW1iZXIgaXMgemVybyAqLwotCQlsWzBdID0gMDsKLQkJbFsxXSA9IDA7CiAJfSBlbHNlIGlmIChzdDBfdGFnID09IFRBR19TcGVjaWFsKSB7CiAJCXN0MF90YWcgPSBGUFVfU3BlY2lhbChzdDBfcHRyKTsKIAkJaWYgKHN0MF90YWcgPT0gVFdfRGVub3JtYWwpIHsKQEAgLTUwOCw3ICs1MDUsNiBAQAogCQkJcmVnX2NvcHkoc3QwX3B0ciwgJnRtcCk7CiAJCQlnb3RvIGRlbm9ybWFsX2FyZzsKIAkJfSBlbHNlIGlmIChzdDBfdGFnID09IFRXX0luZmluaXR5KSB7Ci0JCQlsWzBdID0gMDsKIAkJCWxbMV0gPSAweDdmZjAwMDAwOwogCQl9IGVsc2UgaWYgKHN0MF90YWcgPT0gVFdfTmFOKSB7CiAJCQkvKiBJcyBpdCByZWFsbHkgYSBOYU4gPyAqLwpAQCAtNTMyLDcgKzUyOCw2IEBACiAJCQkJRVhDRVBUSU9OKEVYX0ludmFsaWQpOwogCQkJCWlmICghKGNvbnRyb2xfd29yZCAmIENXX0ludmFsaWQpKQogCQkJCQlyZXR1cm4gMDsKLQkJCQlsWzBdID0gMDsKIAkJCQlsWzFdID0gMHhmZmY4MDAwMDsKIAkJCX0KIAkJfQpAQCAtMTE4NSw4ICsxMTgwLDggQEAKIAkJY29udHJvbF93b3JkIHw9IDB4ZmZmZjAwNDA7CiAJCXBhcnRpYWxfc3RhdHVzID0gc3RhdHVzX3dvcmQoKSB8IDB4ZmZmZjAwMDA7CiAJCWZwdV90YWdfd29yZCB8PSAweGZmZmYwMDAwOwotCQlJMzg3LnNvZnQuZmNzICY9IH4weGY4MDAwMDAwOwotCQlJMzg3LnNvZnQuZm9zIHw9IDB4ZmZmZjAwMDA7CisJCUkzODctPnNvZnQuZmNzICY9IH4weGY4MDAwMDAwOworCQlJMzg3LT5zb2Z0LmZvcyB8PSAweGZmZmYwMDAwOwogI2VuZGlmIC8qIFBFQ1VMSUFSXzQ4NiAqLwogCQlpZiAoX19jb3B5X3RvX3VzZXIoZCwgJmNvbnRyb2xfd29yZCwgNyAqIDQpKQogCQkJRlBVX2Fib3J0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCA5ODMyOTEwLi4yMDk0MWQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMSw1ICsxLDE3IEBACitvYmoteQk6PSAgaW5pdF8kKEJJVFMpLm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8gbW1hcC5vIFwKKwkgICAgcGF0Lm8KKworb2JqLSQoQ09ORklHX1g4Nl8zMikJCSs9IHBndGFibGVfMzIubworCitvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKQkrPSBodWdldGxicGFnZS5vCitvYmotJChDT05GSUdfWDg2X1BURFVNUCkJKz0gZHVtcF9wYWdldGFibGVzLm8KKworb2JqLSQoQ09ORklHX0hJR0hNRU0pCQkrPSBoaWdobWVtXzMyLm8KKwogaWZlcSAoJChDT05GSUdfWDg2XzMyKSx5KQotaW5jbHVkZSAke3NyY3RyZWV9L2FyY2gveDg2L21tL01ha2VmaWxlXzMyCitvYmotJChDT05GSUdfTlVNQSkJCSs9IGRpc2NvbnRpZ18zMi5vCiBlbHNlCi1pbmNsdWRlICR7c3JjdHJlZX0vYXJjaC94ODYvbW0vTWFrZWZpbGVfNjQKK29iai0kKENPTkZJR19OVU1BKQkJKz0gbnVtYV82NC5vCitvYmotJChDT05GSUdfSzhfTlVNQSkJCSs9IGs4dG9wb2xvZ3lfNjQubworb2JqLSQoQ09ORklHX0FDUElfTlVNQSkJCSs9IHNyYXRfNjQubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlXzMyIGIvYXJjaC94ODYvbW0vTWFrZWZpbGVfMzIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNmFlODguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGVfMzIKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBpMzg2LXNwZWNpZmljIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlci4KLSMKLQotb2JqLXkJOj0gaW5pdF8zMi5vIHBndGFibGVfMzIubyBmYXVsdC5vIGlvcmVtYXAubyBleHRhYmxlLm8gcGFnZWF0dHIubyBtbWFwLm8KLQotb2JqLSQoQ09ORklHX05VTUEpICs9IGRpc2NvbnRpZ18zMi5vCi1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vCi1vYmotJChDT05GSUdfSElHSE1FTSkgKz0gaGlnaG1lbV8zMi5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZV82NCBiL2FyY2gveDg2L21tL01ha2VmaWxlXzY0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODhjOGMyLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L21tL01ha2VmaWxlXzY0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgbGludXggeDg2XzY0LXNwZWNpZmljIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlci4KLSMKLQotb2JqLXkJIDo9IGluaXRfNjQubyBmYXVsdC5vIGlvcmVtYXAubyBleHRhYmxlLm8gcGFnZWF0dHIubyBtbWFwLm8KLW9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpICs9IGh1Z2V0bGJwYWdlLm8KLW9iai0kKENPTkZJR19OVU1BKSArPSBudW1hXzY0Lm8KLW9iai0kKENPTkZJR19LOF9OVU1BKSArPSBrOHRvcG9sb2d5XzY0Lm8KLW9iai0kKENPTkZJR19BQ1BJX05VTUEpICs9IHNyYXRfNjQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZGlzY29udGlnXzMyLmMgYi9hcmNoL3g4Ni9tbS9kaXNjb250aWdfMzIuYwppbmRleCBjMzk0Y2EwLi4xODM3ODg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9kaXNjb250aWdfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9kaXNjb250aWdfMzIuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgotI2luY2x1ZGUgPGJpb3NfZWJkYS5oPgorI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KIAogc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJcHJpbnRrKCJOVU1BIC0gc2luZ2xlIG5vZGUsIGZsYXQgbWVtb3J5IG1vZGVcbiIpOwogCiAJLyogUnVuIHRoZSBtZW1vcnkgY29uZmlndXJhdGlvbiBhbmQgZmluZCB0aGUgdG9wIG9mIG1lbW9yeS4gKi8KLQlmaW5kX21heF9wZm4oKTsKKwlwcm9wYWdhdGVfZTgyMF9tYXAoKTsKIAlub2RlX3N0YXJ0X3BmblswXSA9IDA7CiAJbm9kZV9lbmRfcGZuWzBdID0gbWF4X3BmbjsKIAltZW1vcnlfcHJlc2VudCgwLCAwLCBtYXhfcGZuKTsKQEAgLTEzNCw3ICsxMzQsNyBAQAogLyoKICAqIEZpbmQgdGhlIGhpZ2hlc3QgcGFnZSBmcmFtZSBudW1iZXIgd2UgaGF2ZSBhdmFpbGFibGUgZm9yIHRoZSBub2RlCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX21heF9wZm5fbm9kZShpbnQgbmlkKQorc3RhdGljIHZvaWQgX19pbml0IHByb3BhZ2F0ZV9lODIwX21hcF9ub2RlKGludCBuaWQpCiB7CiAJaWYgKG5vZGVfZW5kX3BmbltuaWRdID4gbWF4X3BmbikKIAkJbm9kZV9lbmRfcGZuW25pZF0gPSBtYXhfcGZuOwpAQCAtMzI0LDcgKzMyNCw2IEBACiAJICogdGhpcyBzcGFjZSBhbmQgdXNlIGl0IHRvIGFkanVzdCB0aGUgYm91bmRhcnkgYmV0d2VlbiBaT05FX05PUk1BTAogCSAqIGFuZCBaT05FX0hJR0hNRU0uCiAJICovCi0JZmluZF9tYXhfcGZuKCk7CiAJZ2V0X21lbWNmZ19udW1hKCk7CiAKIAlrdmFfcGFnZXMgPSBjYWxjdWxhdGVfbnVtYV9yZW1hcF9wYWdlcygpOwpAQCAtMzgwLDcgKzM3OSw3IEBACiAJcHJpbnRrKCJIaWdoIG1lbW9yeSBzdGFydHMgYXQgdmFkZHIgJTA4bHhcbiIsCiAJCQkodWxvbmcpIHBmbl90b19rYWRkcihoaWdoc3RhcnRfcGZuKSk7CiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKQotCQlmaW5kX21heF9wZm5fbm9kZShuaWQpOworCQlwcm9wYWdhdGVfZTgyMF9tYXBfbm9kZShuaWQpOwogCiAJbWVtc2V0KE5PREVfREFUQSgwKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOwogCU5PREVfREFUQSgwKS0+YmRhdGEgPSAmbm9kZTBfYmRhdGE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTFiODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYwpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqIERlYnVnIGhlbHBlciB0byBkdW1wIHRoZSBjdXJyZW50IGtlcm5lbCBwYWdldGFibGVzIG9mIHRoZSBzeXN0ZW0KKyAqIHNvIHRoYXQgd2UgY2FuIHNlZSB3aGF0IHRoZSB2YXJpb3VzIG1lbW9yeSByYW5nZXMgYXJlIHNldCB0by4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3I6IEFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisvKgorICogVGhlIGR1bXBlciBncm91cHMgcGFnZXRhYmxlIGVudHJpZXMgb2YgdGhlIHNhbWUgdHlwZSBpbnRvIG9uZSwgYW5kIGZvcgorICogdGhhdCBpdCBuZWVkcyB0byBrZWVwIHNvbWUgc3RhdGUgd2hlbiB3YWxraW5nLCBhbmQgZmx1c2ggdGhpcyBzdGF0ZQorICogd2hlbiBhICJicmVhayIgaW4gdGhlIGNvbnRpbnVpdHkgaXMgZm91bmQuCisgKi8KK3N0cnVjdCBwZ19zdGF0ZSB7CisJaW50IGxldmVsOworCXBncHJvdF90IGN1cnJlbnRfcHJvdDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBjdXJyZW50X2FkZHJlc3M7CisJY29uc3Qgc3RydWN0IGFkZHJfbWFya2VyICptYXJrZXI7Cit9OworCitzdHJ1Y3QgYWRkcl9tYXJrZXIgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzczsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworLyogQWRkcmVzcyBzcGFjZSBtYXJrZXJzIGhpbnRzICovCitzdGF0aWMgc3RydWN0IGFkZHJfbWFya2VyIGFkZHJlc3NfbWFya2Vyc1tdID0geworCXsgMCwgIlVzZXIgU3BhY2UiIH0sCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXsgMHg4MDAwMDAwMDAwMDAwMDAwVUwsICJLZXJuZWwgU3BhY2UiIH0sCisJeyAweGZmZmY4MTAwMDAwMDAwMDBVTCwgIkxvdyBLZXJuZWwgTWFwcGluZyIgfSwKKwl7IFZNQUxMT0NfU1RBUlQsICAgICAgICAidm1hbGxvYygpIEFyZWEiIH0sCisJeyBWTUVNTUFQX1NUQVJULCAgICAgICAgIlZtZW1tYXAiIH0sCisJeyBfX1NUQVJUX0tFUk5FTF9tYXAsICAgIkhpZ2ggS2VybmVsIE1hcHBpbmciIH0sCisJeyBNT0RVTEVTX1ZBRERSLCAgICAgICAgIk1vZHVsZXMiIH0sCisJeyBNT0RVTEVTX0VORCwgICAgICAgICAgIkVuZCBNb2R1bGVzIiB9LAorI2Vsc2UKKwl7IFBBR0VfT0ZGU0VULCAgICAgICAgICAiS2VybmVsIE1hcHBpbmciIH0sCisJeyAwLyogVk1BTExPQ19TVEFSVCAqLywgInZtYWxsb2MoKSBBcmVhIiB9LAorCXsgMC8qVk1BTExPQ19FTkQqLywgICAgICJ2bWFsbG9jKCkgRW5kIiB9LAorIyBpZmRlZiBDT05GSUdfSElHSE1FTQorCXsgMC8qUEtNQVBfQkFTRSovLCAgICAgICJQZXJzaXNlbnQga21hcCgpIEFyZWEiIH0sCisjIGVuZGlmCisJeyAwLypGSVhBRERSX1NUQVJUKi8sICAgIkZpeG1hcCBBcmVhIiB9LAorI2VuZGlmCisJeyAtMSwgTlVMTCB9CQkvKiBFbmQgb2YgbGlzdCAqLworfTsKKworLyogTXVsdGlwbGllcnMgZm9yIG9mZnNldHMgd2l0aGluIHRoZSBQVEVzICovCisjZGVmaW5lIFBURV9MRVZFTF9NVUxUIChQQUdFX1NJWkUpCisjZGVmaW5lIFBNRF9MRVZFTF9NVUxUIChQVFJTX1BFUl9QVEUgKiBQVEVfTEVWRUxfTVVMVCkKKyNkZWZpbmUgUFVEX0xFVkVMX01VTFQgKFBUUlNfUEVSX1BNRCAqIFBNRF9MRVZFTF9NVUxUKQorI2RlZmluZSBQR0RfTEVWRUxfTVVMVCAoUFRSU19QRVJfUFVEICogUFVEX0xFVkVMX01VTFQpCisKKy8qCisgKiBQcmludCBhIHJlYWRhYmxlIGZvcm0gb2YgYSBwZ3Byb3RfdCB0byB0aGUgc2VxX2ZpbGUKKyAqLworc3RhdGljIHZvaWQgcHJpbnRrX3Byb3Qoc3RydWN0IHNlcV9maWxlICptLCBwZ3Byb3RfdCBwcm90LCBpbnQgbGV2ZWwpCit7CisJcGdwcm90dmFsX3QgcHIgPSBwZ3Byb3RfdmFsKHByb3QpOworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbGV2ZWxfbmFtZVtdID0KKwkJeyAiY3IzIiwgInBnZCIsICJwdWQiLCAicG1kIiwgInB0ZSIgfTsKKworCWlmICghcGdwcm90X3ZhbChwcm90KSkgeworCQkvKiBOb3QgcHJlc2VudCAqLworCQlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCX0gZWxzZSB7CisJCWlmIChwciAmIF9QQUdFX1VTRVIpCisJCQlzZXFfcHJpbnRmKG0sICJVU1IgIik7CisJCWVsc2UKKwkJCXNlcV9wcmludGYobSwgIiAgICAiKTsKKwkJaWYgKHByICYgX1BBR0VfUlcpCisJCQlzZXFfcHJpbnRmKG0sICJSVyAiKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihtLCAicm8gIik7CisJCWlmIChwciAmIF9QQUdFX1BXVCkKKwkJCXNlcV9wcmludGYobSwgIlBXVCAiKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihtLCAiICAgICIpOworCQlpZiAocHIgJiBfUEFHRV9QQ0QpCisJCQlzZXFfcHJpbnRmKG0sICJQQ0QgIik7CisJCWVsc2UKKwkJCXNlcV9wcmludGYobSwgIiAgICAiKTsKKworCQkvKiBCaXQgOSBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyBvbiBsZXZlbCAzIHZzIDQgKi8KKwkJaWYgKGxldmVsIDw9IDMpIHsKKwkJCWlmIChwciAmIF9QQUdFX1BTRSkKKwkJCQlzZXFfcHJpbnRmKG0sICJQU0UgIik7CisJCQllbHNlCisJCQkJc2VxX3ByaW50ZihtLCAiICAgICIpOworCQl9IGVsc2UgeworCQkJaWYgKHByICYgX1BBR0VfUEFUKQorCQkJCXNlcV9wcmludGYobSwgInBhdCAiKTsKKwkJCWVsc2UKKwkJCQlzZXFfcHJpbnRmKG0sICIgICAgIik7CisJCX0KKwkJaWYgKHByICYgX1BBR0VfR0xPQkFMKQorCQkJc2VxX3ByaW50ZihtLCAiR0xCICIpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKG0sICIgICAgIik7CisJCWlmIChwciAmIF9QQUdFX05YKQorCQkJc2VxX3ByaW50ZihtLCAiTlggIik7CisJCWVsc2UKKwkJCXNlcV9wcmludGYobSwgInggICIpOworCX0KKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgbGV2ZWxfbmFtZVtsZXZlbF0pOworfQorCisvKgorICogT24gNjQgYml0cywgc2lnbi1leHRlbmQgdGhlIDQ4IGJpdCBhZGRyZXNzIHRvIDY0IGJpdAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBub3JtYWxpemVfYWRkcih1bnNpZ25lZCBsb25nIHUpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXJldHVybiAoc2lnbmVkIGxvbmcpKHUgPDwgMTYpID4+IDE2OworI2Vsc2UKKwlyZXR1cm4gdTsKKyNlbmRpZgorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiBhIGJyZWFrIGluIGEgY29udGludW91cyBzZXJpZXMKKyAqIG9mIFBURSBlbnRyaWVzOyB0aGUgbmV4dCBvbmUgaXMgZGlmZmVyZW50IHNvIHdlIG5lZWQgdG8KKyAqIHByaW50IHdoYXQgd2UgY29sbGVjdGVkIHNvIGZhci4KKyAqLworc3RhdGljIHZvaWQgbm90ZV9wYWdlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBnX3N0YXRlICpzdCwKKwkJICAgICAgcGdwcm90X3QgbmV3X3Byb3QsIGludCBsZXZlbCkKK3sKKwlwZ3Byb3R2YWxfdCBwcm90LCBjdXI7CisJc3RhdGljIGNvbnN0IGNoYXIgdW5pdHNbXSA9ICJLTUdUUEUiOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgImJyZWFrIiBpbiB0aGUgc2VyaWVzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBzdGF0ZSB0aGF0CisJICogd2UgaGF2ZSBub3cuICJicmVhayIgaXMgZWl0aGVyIGNoYW5naW5nIHBlcm1zLCBsZXZlbHMgb3IKKwkgKiBhZGRyZXNzIHNwYWNlIG1hcmtlci4KKwkgKi8KKwlwcm90ID0gcGdwcm90X3ZhbChuZXdfcHJvdCkgJiB+KFBURV9NQVNLKTsKKwljdXIgPSBwZ3Byb3RfdmFsKHN0LT5jdXJyZW50X3Byb3QpICYgfihQVEVfTUFTSyk7CisKKwlpZiAoIXN0LT5sZXZlbCkgeworCQkvKiBGaXJzdCBlbnRyeSAqLworCQlzdC0+Y3VycmVudF9wcm90ID0gbmV3X3Byb3Q7CisJCXN0LT5sZXZlbCA9IGxldmVsOworCQlzdC0+bWFya2VyID0gYWRkcmVzc19tYXJrZXJzOworCQlzZXFfcHJpbnRmKG0sICItLS1bICVzIF0tLS1cbiIsIHN0LT5tYXJrZXItPm5hbWUpOworCX0gZWxzZSBpZiAocHJvdCAhPSBjdXIgfHwgbGV2ZWwgIT0gc3QtPmxldmVsIHx8CisJCSAgIHN0LT5jdXJyZW50X2FkZHJlc3MgPj0gc3QtPm1hcmtlclsxXS5zdGFydF9hZGRyZXNzKSB7CisJCWNvbnN0IGNoYXIgKnVuaXQgPSB1bml0czsKKwkJdW5zaWduZWQgbG9uZyBkZWx0YTsKKworCQkvKgorCQkgKiBOb3cgcHJpbnQgdGhlIGFjdHVhbCBmaW5pc2hlZCBzZXJpZXMKKwkJICovCisJCXNlcV9wcmludGYobSwgIjB4JXAtMHglcCAgICIsCisJCQkgICAodm9pZCAqKXN0LT5zdGFydF9hZGRyZXNzLAorCQkJICAgKHZvaWQgKilzdC0+Y3VycmVudF9hZGRyZXNzKTsKKworCQlkZWx0YSA9IChzdC0+Y3VycmVudF9hZGRyZXNzIC0gc3QtPnN0YXJ0X2FkZHJlc3MpID4+IDEwOworCQl3aGlsZSAoIShkZWx0YSAmIDEwMjMpICYmIHVuaXRbMV0pIHsKKwkJCWRlbHRhID4+PSAxMDsKKwkJCXVuaXQrKzsKKwkJfQorCQlzZXFfcHJpbnRmKG0sICIlOWx1JWMgIiwgZGVsdGEsICp1bml0KTsKKwkJcHJpbnRrX3Byb3QobSwgc3QtPmN1cnJlbnRfcHJvdCwgc3QtPmxldmVsKTsKKworCQkvKgorCQkgKiBXZSBwcmludCBtYXJrZXJzIGZvciBzcGVjaWFsIGFyZWFzIG9mIGFkZHJlc3Mgc3BhY2UsCisJCSAqIHN1Y2ggYXMgdGhlIHN0YXJ0IG9mIHZtYWxsb2Mgc3BhY2UgZXRjLgorCQkgKiBUaGlzIGhlbHBzIGluIHRoZSBpbnRlcnByZXRhdGlvbi4KKwkJICovCisJCWlmIChzdC0+Y3VycmVudF9hZGRyZXNzID49IHN0LT5tYXJrZXJbMV0uc3RhcnRfYWRkcmVzcykgeworCQkJc3QtPm1hcmtlcisrOworCQkJc2VxX3ByaW50ZihtLCAiLS0tWyAlcyBdLS0tXG4iLCBzdC0+bWFya2VyLT5uYW1lKTsKKwkJfQorCisJCXN0LT5zdGFydF9hZGRyZXNzID0gc3QtPmN1cnJlbnRfYWRkcmVzczsKKwkJc3QtPmN1cnJlbnRfcHJvdCA9IG5ld19wcm90OworCQlzdC0+bGV2ZWwgPSBsZXZlbDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcHRlX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBnX3N0YXRlICpzdCwgcG1kX3QgYWRkciwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIFApCit7CisJaW50IGk7CisJcHRlX3QgKnN0YXJ0OworCisJc3RhcnQgPSAocHRlX3QgKikgcG1kX3BhZ2VfdmFkZHIoYWRkcik7CisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BURTsgaSsrKSB7CisJCXBncHJvdF90IHByb3QgPSBwdGVfcGdwcm90KCpzdGFydCk7CisKKwkJc3QtPmN1cnJlbnRfYWRkcmVzcyA9IG5vcm1hbGl6ZV9hZGRyKFAgKyBpICogUFRFX0xFVkVMX01VTFQpOworCQlub3RlX3BhZ2UobSwgc3QsIHByb3QsIDQpOworCQlzdGFydCsrOworCX0KK30KKworI2lmIFBUUlNfUEVSX1BNRCA+IDEKKworc3RhdGljIHZvaWQgd2Fsa19wbWRfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBwdWRfdCBhZGRyLAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgUCkKK3sKKwlpbnQgaTsKKwlwbWRfdCAqc3RhcnQ7CisKKwlzdGFydCA9IChwbWRfdCAqKSBwdWRfcGFnZV92YWRkcihhZGRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUE1EOyBpKyspIHsKKwkJc3QtPmN1cnJlbnRfYWRkcmVzcyA9IG5vcm1hbGl6ZV9hZGRyKFAgKyBpICogUE1EX0xFVkVMX01VTFQpOworCQlpZiAoIXBtZF9ub25lKCpzdGFydCkpIHsKKwkJCXBncHJvdHZhbF90IHByb3QgPSBwbWRfdmFsKCpzdGFydCkgJiB+UFRFX01BU0s7CisKKwkJCWlmIChwbWRfbGFyZ2UoKnN0YXJ0KSB8fCAhcG1kX3ByZXNlbnQoKnN0YXJ0KSkKKwkJCQlub3RlX3BhZ2UobSwgc3QsIF9fcGdwcm90KHByb3QpLCAzKTsKKwkJCWVsc2UKKwkJCQl3YWxrX3B0ZV9sZXZlbChtLCBzdCwgKnN0YXJ0LAorCQkJCQkgICAgICAgUCArIGkgKiBQTURfTEVWRUxfTVVMVCk7CisJCX0gZWxzZQorCQkJbm90ZV9wYWdlKG0sIHN0LCBfX3BncHJvdCgwKSwgMyk7CisJCXN0YXJ0Kys7CisJfQorfQorCisjZWxzZQorI2RlZmluZSB3YWxrX3BtZF9sZXZlbChtLHMsYSxwKSB3YWxrX3B0ZV9sZXZlbChtLHMsX19wbWQocHVkX3ZhbChhKSkscCkKKyNkZWZpbmUgcHVkX2xhcmdlKGEpIHBtZF9sYXJnZShfX3BtZChwdWRfdmFsKGEpKSkKKyNkZWZpbmUgcHVkX25vbmUoYSkgIHBtZF9ub25lKF9fcG1kKHB1ZF92YWwoYSkpKQorI2VuZGlmCisKKyNpZiBQVFJTX1BFUl9QVUQgPiAxCisKK3N0YXRpYyB2b2lkIHdhbGtfcHVkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBnX3N0YXRlICpzdCwgcGdkX3QgYWRkciwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIFApCit7CisJaW50IGk7CisJcHVkX3QgKnN0YXJ0OworCisJc3RhcnQgPSAocHVkX3QgKikgcGdkX3BhZ2VfdmFkZHIoYWRkcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFVEOyBpKyspIHsKKwkJc3QtPmN1cnJlbnRfYWRkcmVzcyA9IG5vcm1hbGl6ZV9hZGRyKFAgKyBpICogUFVEX0xFVkVMX01VTFQpOworCQlpZiAoIXB1ZF9ub25lKCpzdGFydCkpIHsKKwkJCXBncHJvdHZhbF90IHByb3QgPSBwdWRfdmFsKCpzdGFydCkgJiB+UFRFX01BU0s7CisKKwkJCWlmIChwdWRfbGFyZ2UoKnN0YXJ0KSB8fCAhcHVkX3ByZXNlbnQoKnN0YXJ0KSkKKwkJCQlub3RlX3BhZ2UobSwgc3QsIF9fcGdwcm90KHByb3QpLCAyKTsKKwkJCWVsc2UKKwkJCQl3YWxrX3BtZF9sZXZlbChtLCBzdCwgKnN0YXJ0LAorCQkJCQkgICAgICAgUCArIGkgKiBQVURfTEVWRUxfTVVMVCk7CisJCX0gZWxzZQorCQkJbm90ZV9wYWdlKG0sIHN0LCBfX3BncHJvdCgwKSwgMik7CisKKwkJc3RhcnQrKzsKKwl9Cit9CisKKyNlbHNlCisjZGVmaW5lIHdhbGtfcHVkX2xldmVsKG0scyxhLHApIHdhbGtfcG1kX2xldmVsKG0scyxfX3B1ZChwZ2RfdmFsKGEpKSxwKQorI2RlZmluZSBwZ2RfbGFyZ2UoYSkgcHVkX2xhcmdlKF9fcHVkKHBnZF92YWwoYSkpKQorI2RlZmluZSBwZ2Rfbm9uZShhKSAgcHVkX25vbmUoX19wdWQocGdkX3ZhbChhKSkpCisjZW5kaWYKKworc3RhdGljIHZvaWQgd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwlwZ2RfdCAqc3RhcnQgPSAocGdkX3QgKikgJmluaXRfbGV2ZWw0X3BndDsKKyNlbHNlCisJcGdkX3QgKnN0YXJ0ID0gc3dhcHBlcl9wZ19kaXI7CisjZW5kaWYKKwlpbnQgaTsKKwlzdHJ1Y3QgcGdfc3RhdGUgc3Q7CisKKwltZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKKworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykgeworCQlzdC5jdXJyZW50X2FkZHJlc3MgPSBub3JtYWxpemVfYWRkcihpICogUEdEX0xFVkVMX01VTFQpOworCQlpZiAoIXBnZF9ub25lKCpzdGFydCkpIHsKKwkJCXBncHJvdHZhbF90IHByb3QgPSBwZ2RfdmFsKCpzdGFydCkgJiB+UFRFX01BU0s7CisKKwkJCWlmIChwZ2RfbGFyZ2UoKnN0YXJ0KSB8fCAhcGdkX3ByZXNlbnQoKnN0YXJ0KSkKKwkJCQlub3RlX3BhZ2UobSwgJnN0LCBfX3BncHJvdChwcm90KSwgMSk7CisJCQllbHNlCisJCQkJd2Fsa19wdWRfbGV2ZWwobSwgJnN0LCAqc3RhcnQsCisJCQkJCSAgICAgICBpICogUEdEX0xFVkVMX01VTFQpOworCQl9IGVsc2UKKwkJCW5vdGVfcGFnZShtLCAmc3QsIF9fcGdwcm90KDApLCAxKTsKKworCQlzdGFydCsrOworCX0KKworCS8qIEZsdXNoIG91dCB0aGUgbGFzdCBwYWdlICovCisJc3QuY3VycmVudF9hZGRyZXNzID0gbm9ybWFsaXplX2FkZHIoUFRSU19QRVJfUEdEKlBHRF9MRVZFTF9NVUxUKTsKKwlub3RlX3BhZ2UobSwgJnN0LCBfX3BncHJvdCgwKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXdhbGtfcGdkX2xldmVsKG0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB0ZHVtcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBwdGR1bXBfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB0ZHVtcF9mb3BzID0geworCS5vcGVuCQk9IHB0ZHVtcF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitpbnQgcHRfZHVtcF9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqcGU7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyogTm90IGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9uIHg4Ni0zMiAqLworCWFkZHJlc3NfbWFya2Vyc1syXS5zdGFydF9hZGRyZXNzID0gVk1BTExPQ19TVEFSVDsKKwlhZGRyZXNzX21hcmtlcnNbM10uc3RhcnRfYWRkcmVzcyA9IFZNQUxMT0NfRU5EOworIyBpZmRlZiBDT05GSUdfSElHSE1FTQorCWFkZHJlc3NfbWFya2Vyc1s0XS5zdGFydF9hZGRyZXNzID0gUEtNQVBfQkFTRTsKKwlhZGRyZXNzX21hcmtlcnNbNV0uc3RhcnRfYWRkcmVzcyA9IEZJWEFERFJfU1RBUlQ7CisjIGVsc2UKKwlhZGRyZXNzX21hcmtlcnNbNF0uc3RhcnRfYWRkcmVzcyA9IEZJWEFERFJfU1RBUlQ7CisjIGVuZGlmCisjZW5kaWYKKworCXBlID0gZGVidWdmc19jcmVhdGVfZmlsZSgia2VybmVsX3BhZ2VfdGFibGVzIiwgMDYwMCwgTlVMTCwgTlVMTCwKKwkJCQkgJnB0ZHVtcF9mb3BzKTsKKwlpZiAoIXBlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKHB0X2R1bXBfaW5pdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIktlcm5lbCBkZWJ1Z2dpbmcgaGVscGVyIHRoYXQgZHVtcHMgcGFnZXRhYmxlcyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggZmRjNjY3NC4uZmQ3ZTE3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC05MSwxMiArOTEsMTAgQEAKIAlpbnQgcHJlZmV0Y2ggPSAwOwogCXVuc2lnbmVkIGNoYXIgKm1heF9pbnN0cjsKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAoIShfX3N1cHBvcnRlZF9wdGVfbWFzayAmIF9QQUdFX05YKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCS8qIElmIGl0IHdhcyBhIGV4ZWMgZmF1bHQgb24gTlggcGFnZSwgaWdub3JlICovCisJLyoKKwkgKiBJZiBpdCB3YXMgYSBleGVjIChpbnN0cnVjdGlvbiBmZXRjaCkgZmF1bHQgb24gTlggcGFnZSwgdGhlbgorCSAqIGRvIG5vdCBpZ25vcmUgdGhlIGZhdWx0OgorCSAqLwogCWlmIChlcnJvcl9jb2RlICYgUEZfSU5TVFIpCiAJCXJldHVybiAwOwogCkBAIC02NDEsNyArNjM5LDcgQEAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyogSXQncyBzYWZlIHRvIGFsbG93IGlycSdzIGFmdGVyIGNyMiBoYXMgYmVlbiBzYXZlZCBhbmQgdGhlIHZtYWxsb2MKIAkgICBmYXVsdCBoYXMgYmVlbiBoYW5kbGVkLiAqLwotCWlmIChyZWdzLT5mbGFncyAmIChYODZfRUZMQUdTX0lGfFZNX01BU0spKQorCWlmIChyZWdzLT5mbGFncyAmIChYODZfRUZMQUdTX0lGIHwgWDg2X1ZNX01BU0spKQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAkvKgpAQCAtOTc4LDkgKzk3Niw1IEBACiAJCWlmIChhZGRyZXNzID09IHN0YXJ0KQogCQkJc3RhcnQgPSBhZGRyZXNzICsgUEdESVJfU0laRTsKIAl9Ci0JLyogQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIHRoZSBzYW1lIGZvciB0aGUgbW9kdWxlcyBhcmVhLiAqLwotCUJVSUxEX0JVR19PTighKE1PRFVMRVNfVkFERFIgPiBfX1NUQVJUX0tFUk5FTCkpOwotCUJVSUxEX0JVR19PTighKCgoTU9EVUxFU19FTkQgLSAxKSAmIFBHRElSX01BU0spID09Ci0JCQkJKF9fU1RBUlRfS0VSTkVMICYgUEdESVJfTUFTSykpKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCmluZGV4IDNkOTM2ZjIuLjljZjMzZDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYworKysgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKQEAgLTczLDE1ICs3MywxNSBAQAogewogCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDsKIAl1bnNpZ25lZCBsb25nIHZhZGRyOworCiAJLyogZXZlbiAhQ09ORklHX1BSRUVNUFQgbmVlZHMgdGhpcywgZm9yIGluX2F0b21pYyBpbiBkb19wYWdlX2ZhdWx0ICovCi0KLQlkZWJ1Z19rbWFwX2F0b21pY19wcm90KHR5cGUpOwotCiAJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAKKwlkZWJ1Z19rbWFwX2F0b21pY19wcm90KHR5cGUpOworCiAJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CiAJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlLWlkeCkpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jCmluZGV4IDRmYmFmYjQuLjBiM2Q1NjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIAlwYWdlID0gJnB0ZV9wYWdlKCpwdGUpW3ZwZm4gJSAoSFBBR0VfU0laRS9QQUdFX1NJWkUpXTsKIAotCVdBUk5fT04oIVBhZ2VDb21wb3VuZChwYWdlKSk7CisJV0FSTl9PTighUGFnZUhlYWQocGFnZSkpOwogCiAJcmV0dXJuIHBhZ2U7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggZWUxMDkxYS4uOWVjNjJkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtMSw1ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9pMzg2L21tL2luaXQuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKgpAQCAtNTEsNiArNTAsOCBAQAogCiB1bnNpZ25lZCBpbnQgX19WTUFMTE9DX1JFU0VSVkUgPSAxMjggPDwgMjA7CiAKK3Vuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CisKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiB1bnNpZ25lZCBsb25nIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuOwogCkBAIC0xNzksOCArMTgwLDEzIEBACiAJCQkvKgogCQkJICogTWFwIHdpdGggYmlnIHBhZ2VzIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UKIAkJCSAqIGNyZWF0ZSBub3JtYWwgcGFnZSB0YWJsZXM6CisJCQkgKgorCQkJICogRG9uJ3QgdXNlIGEgbGFyZ2UgcGFnZSBmb3IgdGhlIGZpcnN0IDIvNE1CIG9mIG1lbW9yeQorCQkJICogYmVjYXVzZSB0aGVyZSBhcmUgb2Z0ZW4gZml4ZWQgc2l6ZSBNVFJScyBpbiB0aGVyZQorCQkJICogYW5kIG92ZXJsYXBwaW5nIE1UUlJzIGludG8gbGFyZ2UgcGFnZXMgY2FuIGNhdXNlCisJCQkgKiBzbG93ZG93bnMuCiAJCQkgKi8KLQkJCWlmIChjcHVfaGFzX3BzZSkgeworCQkJaWYgKGNwdV9oYXNfcHNlICYmICEocGdkX2lkeCA9PSAwICYmIHBtZF9pZHggPT0gMCkpIHsKIAkJCQl1bnNpZ25lZCBpbnQgYWRkcjI7CiAJCQkJcGdwcm90X3QgcHJvdCA9IFBBR0VfS0VSTkVMX0xBUkdFOwogCkBAIC0xOTQsNiArMjAwLDcgQEAKIAkJCQlzZXRfcG1kKHBtZCwgcGZuX3BtZChwZm4sIHByb3QpKTsKIAogCQkJCXBmbiArPSBQVFJTX1BFUl9QVEU7CisJCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlwdGUgPSBvbmVfcGFnZV90YWJsZV9pbml0KHBtZCk7CkBAIC0yMDgsNiArMjE1LDcgQEAKIAogCQkJCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpOwogCQkJfQorCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47CiAJCX0KIAl9CiB9CkBAIC03MjMsMjUgKzczMSwxNyBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fQUxJR04oX3RleHQpOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBGTl9BTElHTihfZXRleHQpIC0gc3RhcnQ7CiAKLSNpZm5kZWYgQ09ORklHX0tQUk9CRVMKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQkvKiBJdCBtdXN0IHN0aWxsIGJlIHBvc3NpYmxlIHRvIGFwcGx5IFNNUCBhbHRlcm5hdGl2ZXMuICovCi0JaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPD0gMSkKLSNlbmRpZgotCXsKLQkJc2V0X3BhZ2VzX3JvKHZpcnRfdG9fcGFnZShzdGFydCksIHNpemUgPj4gUEFHRV9TSElGVCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIldyaXRlIHByb3RlY3RpbmcgdGhlIGtlcm5lbCB0ZXh0OiAlbHVrXG4iLAotCQkJc2l6ZSA+PiAxMCk7CisJc2V0X3BhZ2VzX3JvKHZpcnRfdG9fcGFnZShzdGFydCksIHNpemUgPj4gUEFHRV9TSElGVCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiV3JpdGUgcHJvdGVjdGluZyB0aGUga2VybmVsIHRleHQ6ICVsdWtcbiIsCisJCXNpemUgPj4gMTApOwogCiAjaWZkZWYgQ09ORklHX0NQQV9ERUJVRwotCQlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIENQQTogUmV2ZXJ0aW5nICVseC0lbHhcbiIsCi0JCQlzdGFydCwgc3RhcnQrc2l6ZSk7Ci0JCXNldF9wYWdlc19ydyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplPj5QQUdFX1NISUZUKTsKKwlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIENQQTogUmV2ZXJ0aW5nICVseC0lbHhcbiIsCisJCXN0YXJ0LCBzdGFydCtzaXplKTsKKwlzZXRfcGFnZXNfcncodmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZT4+UEFHRV9TSElGVCk7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVGVzdGluZyBDUEE6IHdyaXRlIHByb3RlY3RpbmcgYWdhaW5cbiIpOwotCQlzZXRfcGFnZXNfcm8odmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZT4+UEFHRV9TSElGVCk7Ci0jZW5kaWYKLQl9CisJcHJpbnRrKEtFUk5fSU5GTyAiVGVzdGluZyBDUEE6IHdyaXRlIHByb3RlY3RpbmcgYWdhaW5cbiIpOworCXNldF9wYWdlc19ybyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplPj5QQUdFX1NISUZUKTsKICNlbmRpZgogCXN0YXJ0ICs9IHNpemU7CiAJc2l6ZSA9ICh1bnNpZ25lZCBsb25nKV9fZW5kX3JvZGF0YSAtIHN0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF82NC5jIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCmluZGV4IGE0YTljY2MuLjFmZjc5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTQ3LDEzICs0NywzMCBAQAogI2luY2x1ZGUgPGFzbS9udW1hLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotY29uc3Qgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKLUVYUE9SVF9TWU1CT0woZG1hX29wcyk7Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9yZXNlcnZlIF9faW5pdGRhdGE7CiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKK2ludCBkaXJlY3RfZ2JwYWdlcyBfX21lbWluaXRkYXRhCisjaWZkZWYgQ09ORklHX0RJUkVDVF9HQlBBR0VTCisJCQkJPSAxCisjZW5kaWYKKzsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlyZWN0X2dicGFnZXNfb2ZmKGNoYXIgKmFyZykKK3sKKwlkaXJlY3RfZ2JwYWdlcyA9IDA7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9nYnBhZ2VzIiwgcGFyc2VfZGlyZWN0X2dicGFnZXNfb2ZmKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlyZWN0X2dicGFnZXNfb24oY2hhciAqYXJnKQoreworCWRpcmVjdF9nYnBhZ2VzID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJnYnBhZ2VzIiwgcGFyc2VfZGlyZWN0X2dicGFnZXNfb24pOworCiAvKgogICogTk9URTogcGFnZXRhYmxlX2luaXQgYWxsb2MgYWxsIHRoZSBmaXhtYXAgcGFnZXRhYmxlcyBjb250aWd1b3VzIG9uIHRoZQogICogcGh5c2ljYWwgc3BhY2Ugc28gd2UgY2FuIGNhY2hlIHRoZSBwbGFjZSBvZiB0aGUgZmlyc3Qgb25lIGFuZCBtb3ZlCkBAIC02OSw5ICs4Niw2IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW0taW5mbzpcbiIpOwogCXNob3dfZnJlZV9hcmVhcygpOwotCXByaW50ayhLRVJOX0lORk8gIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLAotCQlucl9zd2FwX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSk7Ci0KIAlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHsKIAkJZm9yIChpID0gMDsgaSA8IHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7ICsraSkgewogCQkJLyoKQEAgLTE3MSw2ICsxODUsMzQgQEAKIAlfX2ZsdXNoX3RsYl9vbmUodmFkZHIpOwogfQogCisvKgorICogVGhlIGhlYWQuUyBjb2RlIHNldHMgdXAgdGhlIGtlcm5lbCBoaWdoIG1hcHBpbmc6CisgKgorICogICBmcm9tIF9fU1RBUlRfS0VSTkVMX21hcCB0byBfX1NUQVJUX0tFUk5FTF9tYXAgKyBzaXplICg9PSBfZW5kLV90ZXh0KQorICoKKyAqIHBoeXNfYWRkciBob2xkcyB0aGUgbmVnYXRpdmUgb2Zmc2V0IHRvIHRoZSBrZXJuZWwsIHdoaWNoIGlzIGFkZGVkCisgKiB0byB0aGUgY29tcGlsZSB0aW1lIGdlbmVyYXRlZCBwbWRzLiBUaGlzIHJlc3VsdHMgaW4gaW52YWxpZCBwbWRzIHVwCisgKiB0byB0aGUgcG9pbnQgd2hlcmUgd2UgaGl0IHRoZSBwaHlzYWRkciAwIG1hcHBpbmcuCisgKgorICogV2UgbGltaXQgdGhlIG1hcHBpbmdzIHRvIHRoZSByZWdpb24gZnJvbSBfdGV4dCB0byBfZW5kLiAgX2VuZCBpcworICogcm91bmRlZCB1cCB0byB0aGUgMk1CIGJvdW5kYXJ5LiBUaGlzIGNhdGNoZXMgdGhlIGludmFsaWQgcG1kcyBhcworICogd2VsbCwgYXMgdGhleSBhcmUgbG9jYXRlZCBiZWZvcmUgX3RleHQ6CisgKi8KK3ZvaWQgX19pbml0IGNsZWFudXBfaGlnaG1hcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBfX1NUQVJUX0tFUk5FTF9tYXA7CisJdW5zaWduZWQgbG9uZyBlbmQgPSByb3VuZF91cCgodW5zaWduZWQgbG9uZylfZW5kLCBQTURfU0laRSkgLSAxOworCXBtZF90ICpwbWQgPSBsZXZlbDJfa2VybmVsX3BndDsKKwlwbWRfdCAqbGFzdF9wbWQgPSBwbWQgKyBQVFJTX1BFUl9QTUQ7CisKKwlmb3IgKDsgcG1kIDwgbGFzdF9wbWQ7IHBtZCsrLCB2YWRkciArPSBQTURfU0laRSkgeworCQlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQorCQkJY29udGludWU7CisJCWlmICh2YWRkciA8ICh1bnNpZ25lZCBsb25nKSBfdGV4dCB8fCB2YWRkciA+IGVuZCkKKwkJCXNldF9wbWQocG1kLCBfX3BtZCgwKSk7CisJfQorfQorCiAvKiBOT1RFOiB0aGlzIGlzIG1lYW50IHRvIGJlIHJ1biBvbmx5IGF0IGJvb3QgKi8KIHZvaWQgX19pbml0CiBfX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IHByb3QpCkBAIC0yNjgsNyArMzEwLDcgQEAKIAlfX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAotc3RhdGljIHZvaWQgX19tZW1pbml0CitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXQKIHBoeXNfcG1kX2luaXQocG1kX3QgKnBtZF9wYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWludCBpID0gcG1kX2luZGV4KGFkZHJlc3MpOwpAQCAtMjkwLDIxICszMzIsMjYgQEAKIAkJc2V0X3B0ZSgocHRlX3QgKilwbWQsCiAJCQlwZm5fcHRlKGFkZHJlc3MgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUxfTEFSR0UpKTsKIAl9CisJcmV0dXJuIGFkZHJlc3M7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbWVtaW5pdAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0CiBwaHlzX3BtZF91cGRhdGUocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwbWRfdCAqcG1kID0gcG1kX29mZnNldChwdWQsIDApOworCXVuc2lnbmVkIGxvbmcgbGFzdF9tYXBfYWRkcjsKKwogCXNwaW5fbG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOwotCXBoeXNfcG1kX2luaXQocG1kLCBhZGRyZXNzLCBlbmQpOworCWxhc3RfbWFwX2FkZHIgPSBwaHlzX3BtZF9pbml0KHBtZCwgYWRkcmVzcywgZW5kKTsKIAlzcGluX3VubG9jaygmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spOwogCV9fZmx1c2hfdGxiX2FsbCgpOworCXJldHVybiBsYXN0X21hcF9hZGRyOwogfQogCi1zdGF0aWMgdm9pZCBfX21lbWluaXQKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdAogcGh5c19wdWRfaW5pdChwdWRfdCAqcHVkX3BhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CisJdW5zaWduZWQgbG9uZyBsYXN0X21hcF9hZGRyID0gZW5kOwogCWludCBpID0gcHVkX2luZGV4KGFkZHIpOwogCiAJZm9yICg7IGkgPCBQVFJTX1BFUl9QVUQ7IGkrKywgYWRkciA9IChhZGRyICYgUFVEX01BU0spICsgUFVEX1NJWkUpIHsKQEAgLTMyMiw3ICszNjksMTUgQEAKIAkJfQogCiAJCWlmIChwdWRfdmFsKCpwdWQpKSB7Ci0JCQlwaHlzX3BtZF91cGRhdGUocHVkLCBhZGRyLCBlbmQpOworCQkJaWYgKCFwdWRfbGFyZ2UoKnB1ZCkpCisJCQkJbGFzdF9tYXBfYWRkciA9IHBoeXNfcG1kX3VwZGF0ZShwdWQsIGFkZHIsIGVuZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChkaXJlY3RfZ2JwYWdlcykgeworCQkJc2V0X3B0ZSgocHRlX3QgKilwdWQsCisJCQkJcGZuX3B0ZShhZGRyID4+IFBBR0VfU0hJRlQsIFBBR0VfS0VSTkVMX0xBUkdFKSk7CisJCQlsYXN0X21hcF9hZGRyID0gKGFkZHIgJiBQVURfTUFTSykgKyBQVURfU0laRTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTMzMCwxMiArMzg1LDE0IEBACiAKIAkJc3Bpbl9sb2NrKCZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7CiAJCXNldF9wdWQocHVkLCBfX3B1ZChwbWRfcGh5cyB8IF9LRVJOUEdfVEFCTEUpKTsKLQkJcGh5c19wbWRfaW5pdChwbWQsIGFkZHIsIGVuZCk7CisJCWxhc3RfbWFwX2FkZHIgPSBwaHlzX3BtZF9pbml0KHBtZCwgYWRkciwgZW5kKTsKIAkJc3Bpbl91bmxvY2soJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKIAogCQl1bm1hcF9sb3dfcGFnZShwbWQpOwogCX0KIAlfX2ZsdXNoX3RsYl9hbGwoKTsKKworCXJldHVybiBsYXN0X21hcF9hZGRyID4+IFBBR0VfU0hJRlQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kKQpAQCAtMzQzLDkgKzQwMCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgcHVkcywgcG1kcywgdGFibGVzLCBzdGFydDsKIAogCXB1ZHMgPSAoZW5kICsgUFVEX1NJWkUgLSAxKSA+PiBQVURfU0hJRlQ7Ci0JcG1kcyA9IChlbmQgKyBQTURfU0laRSAtIDEpID4+IFBNRF9TSElGVDsKLQl0YWJsZXMgPSByb3VuZF91cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKSArCi0JCSByb3VuZF91cChwbWRzICogc2l6ZW9mKHBtZF90KSwgUEFHRV9TSVpFKTsKKwl0YWJsZXMgPSByb3VuZF91cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTsKKwlpZiAoIWRpcmVjdF9nYnBhZ2VzKSB7CisJCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7CisJCXRhYmxlcyArPSByb3VuZF91cChwbWRzICogc2l6ZW9mKHBtZF90KSwgUEFHRV9TSVpFKTsKKwl9CiAKIAkvKgogCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZApAQCAtMzY1LDE2ICs0MjQsMTM1IEBACiAJCSh0YWJsZV9zdGFydCA8PCBQQUdFX1NISUZUKSArIHRhYmxlcyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2dicGFnZXModm9pZCkKK3sKKwlpZiAoZGlyZWN0X2dicGFnZXMgJiYgY3B1X2hhc19nYnBhZ2VzKQorCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBHQiBwYWdlcyBmb3IgZGlyZWN0IG1hcHBpbmdcbiIpOworCWVsc2UKKwkJZGlyZWN0X2dicGFnZXMgPSAwOworfQorCisjaWZkZWYgQ09ORklHX01FTVRFU1RfQk9PVFBBUkFNCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtZW10ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSB1bnNpZ25lZCBwYXR0ZXJuKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKwl1bnNpZ25lZCBsb25nICpzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2JhZDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYmFkOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGh5c19hbGlnbmVkOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyBpbmNyOworCisJc3dpdGNoIChwYXR0ZXJuKSB7CisJY2FzZSAwOgorCQl2YWwgPSAwVUw7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gLTFVTDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSAweDU1NTU1NTU1NTU1NTU1NTVVTDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl2YWwgPSAweGFhYWFhYWFhYWFhYWFhYWFVTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWluY3IgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJc3RhcnRfcGh5c19hbGlnbmVkID0gQUxJR04oc3RhcnRfcGh5cywgaW5jcik7CisJY291bnQgPSAoc2l6ZSAtIChzdGFydF9waHlzX2FsaWduZWQgLSBzdGFydF9waHlzKSkvaW5jcjsKKwlzdGFydCA9IF9fdmEoc3RhcnRfcGh5c19hbGlnbmVkKTsKKwlzdGFydF9iYWQgPSAwOworCWxhc3RfYmFkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlzdGFydFtpXSA9IHZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgc3RhcnQrKywgc3RhcnRfcGh5c19hbGlnbmVkICs9IGluY3IpIHsKKwkJaWYgKCpzdGFydCAhPSB2YWwpIHsKKwkJCWlmIChzdGFydF9waHlzX2FsaWduZWQgPT0gbGFzdF9iYWQgKyBpbmNyKSB7CisJCQkJbGFzdF9iYWQgKz0gaW5jcjsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHN0YXJ0X2JhZCkgeworCQkJCQlwcmludGsoS0VSTl9DT05UICJcbiAgJTAxNmx4IGJhZCBtZW0gYWRkciAlMDE2bHggLSAlMDE2bHggcmVzZXJ2ZWQiLAorCQkJCQkJdmFsLCBzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jcik7CisJCQkJCXJlc2VydmVfZWFybHkoc3RhcnRfYmFkLCBsYXN0X2JhZCAtIHN0YXJ0X2JhZCwgIkJBRCBSQU0iKTsKKwkJCQl9CisJCQkJc3RhcnRfYmFkID0gbGFzdF9iYWQgPSBzdGFydF9waHlzX2FsaWduZWQ7CisJCQl9CisJCX0KKwl9CisJaWYgKHN0YXJ0X2JhZCkgeworCQlwcmludGsoS0VSTl9DT05UICJcbiAgJTAxNmx4IGJhZCBtZW0gYWRkciAlMDE2bHggLSAlMDE2bHggcmVzZXJ2ZWQiLAorCQkJdmFsLCBzdGFydF9iYWQsIGxhc3RfYmFkICsgaW5jcik7CisJCXJlc2VydmVfZWFybHkoc3RhcnRfYmFkLCBsYXN0X2JhZCAtIHN0YXJ0X2JhZCwgIkJBRCBSQU0iKTsKKwl9CisKK30KKworc3RhdGljIGludCBtZW10ZXN0X3BhdHRlcm4gX19pbml0ZGF0YSA9IENPTkZJR19NRU1URVNUX0JPT1RQQVJBTV9WQUxVRTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbWVtdGVzdChjaGFyICphcmcpCit7CisJaWYgKGFyZykKKwkJbWVtdGVzdF9wYXR0ZXJuID0gc2ltcGxlX3N0cnRvdWwoYXJnLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oIm1lbXRlc3QiLCBwYXJzZV9tZW10ZXN0KTsKKworc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X21lbXRlc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyB0X3N0YXJ0LCB0X3NpemU7CisJdW5zaWduZWQgcGF0dGVybjsKKworCWlmICghbWVtdGVzdF9wYXR0ZXJuKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPICJlYXJseV9tZW10ZXN0OiBwYXR0ZXJuIG51bSAlZCIsIG1lbXRlc3RfcGF0dGVybik7CisJZm9yIChwYXR0ZXJuID0gMDsgcGF0dGVybiA8IG1lbXRlc3RfcGF0dGVybjsgcGF0dGVybisrKSB7CisJCXRfc3RhcnQgPSBzdGFydDsKKwkJdF9zaXplID0gMDsKKwkJd2hpbGUgKHRfc3RhcnQgPCBlbmQpIHsKKwkJCXRfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYV9zaXplKHRfc3RhcnQsICZ0X3NpemUsIDEpOworCisJCQkvKiBkb25lID8gKi8KKwkJCWlmICh0X3N0YXJ0ID49IGVuZCkKKwkJCQlicmVhazsKKwkJCWlmICh0X3N0YXJ0ICsgdF9zaXplID4gZW5kKQorCQkJCXRfc2l6ZSA9IGVuZCAtIHRfc3RhcnQ7CisKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuICAlMDE2bHggLSAlMDE2bHggcGF0dGVybiAlZCIsCisJCQkJdF9zdGFydCwgdF9zdGFydCArIHRfc2l6ZSwgcGF0dGVybik7CisKKwkJCW1lbXRlc3QodF9zdGFydCwgdF9zaXplLCBwYXR0ZXJuKTsKKworCQkJdF9zdGFydCArPSB0X3NpemU7CisJCX0KKwl9CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbWVtdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKK30KKyNlbmRpZgorCiAvKgogICogU2V0dXAgdGhlIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXQgUEFHRV9PRkZTRVQuCiAgKiBUaGlzIHJ1bnMgYmVmb3JlIGJvb3RtZW0gaXMgaW5pdGlhbGl6ZWQgYW5kIGdldHMgcGFnZXMgZGlyZWN0bHkgZnJvbQogICogdGhlIHBoeXNpY2FsIG1lbW9yeS4gVG8gYWNjZXNzIHRoZW0gdGhleSBhcmUgdGVtcG9yYXJpbHkgbWFwcGVkLgogICovCi12b2lkIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQordW5zaWduZWQgbG9uZyBfX2luaXRfcmVmb2sgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBuZXh0LCBsYXN0X21hcF9hZGRyID0gZW5kOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGh5cyA9IHN0YXJ0LCBlbmRfcGh5cyA9IGVuZDsKIAotCXByX2RlYnVnKCJpbml0X21lbW9yeV9tYXBwaW5nXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJpbml0X21lbW9yeV9tYXBwaW5nXG4iKTsKIAogCS8qCiAJICogRmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBkaXJlY3QgbWFwcGluZyB0YWJsZXMuCkBAIC0zODMsOCArNTYxLDEwIEBACiAJICogbWVtb3J5IG1hcHBlZC4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIGRvbmUgY3VycmVudGx5IGJlZm9yZSB0aGUKIAkgKiBub2RlcyBhcmUgZGlzY292ZXJlZC4KIAkgKi8KLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCisJaWYgKCFhZnRlcl9ib290bWVtKSB7CisJCWluaXRfZ2JwYWdlcygpOwogCQlmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKGVuZCk7CisJfQogCiAJc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KTsKIAllbmQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGVuZCk7CkBAIC00MDIsNyArNTgyLDcgQEAKIAkJbmV4dCA9IHN0YXJ0ICsgUEdESVJfU0laRTsKIAkJaWYgKG5leHQgPiBlbmQpCiAJCQluZXh0ID0gZW5kOwotCQlwaHlzX3B1ZF9pbml0KHB1ZCwgX19wYShzdGFydCksIF9fcGEobmV4dCkpOworCQlsYXN0X21hcF9hZGRyID0gcGh5c19wdWRfaW5pdChwdWQsIF9fcGEoc3RhcnQpLCBfX3BhKG5leHQpKTsKIAkJaWYgKCFhZnRlcl9ib290bWVtKQogCQkJc2V0X3BnZChwZ2Rfb2Zmc2V0X2soc3RhcnQpLCBta19rZXJuZWxfcGdkKHB1ZF9waHlzKSk7CiAJCXVubWFwX2xvd19wYWdlKHB1ZCk7CkBAIC00MTUsNiArNTk1LDExIEBACiAJaWYgKCFhZnRlcl9ib290bWVtKQogCQlyZXNlcnZlX2Vhcmx5KHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQsCiAJCQkJIHRhYmxlX2VuZCA8PCBQQUdFX1NISUZULCAiUEdUQUJMRSIpOworCisJaWYgKCFhZnRlcl9ib290bWVtKQorCQllYXJseV9tZW10ZXN0KHN0YXJ0X3BoeXMsIGVuZF9waHlzKTsKKworCXJldHVybiBsYXN0X21hcF9hZGRyOwogfQogCiAjaWZuZGVmIENPTkZJR19OVU1BCkBAIC00NTQsMTEgKzYzOSwxMyBAQAogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTsKIAlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgWk9ORV9OT1JNQUw7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbGFzdF9tYXBwZWRfcGZuLCBzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CiAJaW50IHJldDsKIAotCWluaXRfbWVtb3J5X21hcHBpbmcoc3RhcnQsIHN0YXJ0ICsgc2l6ZS0xKTsKKwlsYXN0X21hcHBlZF9wZm4gPSBpbml0X21lbW9yeV9tYXBwaW5nKHN0YXJ0LCBzdGFydCArIHNpemUtMSk7CisJaWYgKGxhc3RfbWFwcGVkX3BmbiA+IG1heF9wZm5fbWFwcGVkKQorCQltYXhfcGZuX21hcHBlZCA9IGxhc3RfbWFwcGVkX3BmbjsKIAogCXJldCA9IF9fYWRkX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogCVdBUk5fT04oMSk7CkBAIC00ODgsMTQgKzY3NSw2IEBACiAKIAkvKiBjbGVhcl9ic3MoKSBhbHJlYWR5IGNsZWFyIHRoZSBlbXB0eV96ZXJvX3BhZ2UgKi8KIAotCS8qIHRlbXBvcmFyeSBkZWJ1Z2dpbmcgLSBkb3VibGUgY2hlY2sgaXQncyB0cnVlOiAqLwotCXsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLQkJCVdBUk5fT05fT05DRShlbXB0eV96ZXJvX3BhZ2VbaV0pOwotCX0KLQogCXJlc2VydmVkcGFnZXMgPSAwOwogCiAJLyogdGhpcyB3aWxsIHB1dCBhbGwgbG93IG1lbW9yeSBvbnRvIHRoZSBmcmVlbGlzdHMgKi8KQEAgLTU3NiwyNCArNzU1LDcgQEAKIAogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylfc3RleHQsIGVuZDsKLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCS8qIEl0IG11c3Qgc3RpbGwgYmUgcG9zc2libGUgdG8gYXBwbHkgU01QIGFsdGVybmF0aXZlcy4gKi8KLQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCi0JCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX2V0ZXh0OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfS1BST0JFUwotCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX19zdGFydF9yb2RhdGE7Ci0jZW5kaWYKLQotCWVuZCA9ICh1bnNpZ25lZCBsb25nKV9fZW5kX3JvZGF0YTsKLQlzdGFydCA9IChzdGFydCArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLOwotCWVuZCAmPSBQQUdFX01BU0s7Ci0JaWYgKGVuZCA8PSBzdGFydCkKLQkJcmV0dXJuOwotCisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFBGTl9BTElHTihfc3RleHQpLCBlbmQgPSBQRk5fQUxJR04oX19lbmRfcm9kYXRhKTsKIAogCXByaW50ayhLRVJOX0lORk8gIldyaXRlIHByb3RlY3RpbmcgdGhlIGtlcm5lbCByZWFkLW9ubHkgZGF0YTogJWx1a1xuIiwKIAkgICAgICAgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7CkBAIC02MTYsNiArNzc4LDcgQEAKIAlzZXRfbWVtb3J5X3JvKHN0YXJ0LCAoZW5kLXN0YXJ0KSA+PiBQQUdFX1NISUZUKTsKICNlbmRpZgogfQorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApAQCAtNjM3LDcgKzgwMCw3IEBACiAJCSAqIFRoaXMgY2FuIGhhcHBlbiB3aXRoIGtkdW1wIGtlcm5lbHMgd2hlbiBhY2Nlc3NpbmcKIAkJICogZmlybXdhcmUgdGFibGVzOgogCQkgKi8KLQkJaWYgKHBmbiA8IGVuZF9wZm5fbWFwKQorCQlpZiAocGZuIDwgbWF4X3Bmbl9tYXBwZWQpCiAJCQlyZXR1cm47CiAKIAkJcHJpbnRrKEtFUk5fRVJSICJyZXNlcnZlX2Jvb3RtZW06IGlsbGVnYWwgcmVzZXJ2ZSAlbHggJXVcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggOWY0MmQ3ZS4uM2E0YmFmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMTksMTEgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0KLWVudW0gaW9yZW1hcF9tb2RlIHsKLQlJT1JfTU9ERV9VTkNBQ0hFRCwKLQlJT1JfTU9ERV9DQUNIRUQsCi19OworI2luY2x1ZGUgPGFzbS9wYXQuaD4KIAogI2lmZGVmIENPTkZJR19YODZfNjQKIApAQCAtMzUsMTMgKzMxLDQxIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fcGh5c19hZGRyKTsKIAorc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gYWRkciA8ICgxVUwgPDwgYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gMTsKK30KKwogI2VuZGlmCiAKIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDsKKwlyZXNvdXJjZV9zaXplX3QgYWRkciwgZW5kOwogCWludCBpOwogCisJLyoKKwkgKiBBIHNwZWNpYWwgY2FzZSBpcyB0aGUgZmlyc3QgNEtiIG9mIG1lbW9yeTsKKwkgKiBUaGlzIGlzIGEgQklPUyBvd25lZCBhcmVhLCBub3Qga2VybmVsIHJhbSwgYnV0IGdlbmVyYWxseQorCSAqIG5vdCBsaXN0ZWQgYXMgc3VjaCBpbiB0aGUgRTgyMCB0YWJsZS4KKwkgKi8KKwlpZiAocGFnZW5yID09IDApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBTZWNvbmQgc3BlY2lhbCBjYXNlOiBTb21lIEJJT1NlbiByZXBvcnQgdGhlIFBDIEJJT1MKKwkgKiBhcmVhICg2NDAtPjFNYikgYXMgcmFtIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdC4KKwkgKi8KKwlpZiAocGFnZW5yID49IChCSU9TX0JFR0lOID4+IFBBR0VfU0hJRlQpICYmCisJCSAgICBwYWdlbnIgPCAoQklPU19FTkQgPj4gUEFHRV9TSElGVCkpCisJCXJldHVybiAwOworCiAJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKIAkJLyoKIAkJICogTm90IHVzYWJsZSBtZW1vcnk6CkBAIC01MSwxNCArNzUsNiBAQAogCQlhZGRyID0gKGU4MjAubWFwW2ldLmFkZHIgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKIAkJZW5kID0gKGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplKSA+PiBQQUdFX1NISUZUOwogCi0JCS8qCi0JCSAqIFNhbml0eSBjaGVjazogU29tZSBCSU9TZW4gcmVwb3J0IGFyZWFzIGFzIFJBTSB0aGF0Ci0JCSAqIGFyZSBub3QuIE5vdGFibHkgdGhlIDY0MC0+MU1iIGFyZWEsIHdoaWNoIGlzIHRoZQotCQkgKiBQQ0kgQklPUyBhcmVhLgotCQkgKi8KLQkJaWYgKGFkZHIgPj0gKEJJT1NfQkVHSU4gPj4gUEFHRV9TSElGVCkgJiYKLQkJICAgIGVuZCA8IChCSU9TX0VORCA+PiBQQUdFX1NISUZUKSkKLQkJCWNvbnRpbnVlOwogCiAJCWlmICgocGFnZW5yID49IGFkZHIpICYmIChwYWdlbnIgPCBlbmQpKQogCQkJcmV0dXJuIDE7CkBAIC03MCwxOSArODYsMjIgQEAKICAqIEZpeCB1cCB0aGUgbGluZWFyIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBrZXJuZWwgdG8gYXZvaWQgY2FjaGUgYXR0cmlidXRlCiAgKiBjb25mbGljdHMuCiAgKi8KLXN0YXRpYyBpbnQgaW9yZW1hcF9jaGFuZ2VfYXR0cih1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgICAgICAgZW51bSBpb3JlbWFwX21vZGUgbW9kZSkKK2ludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHByb3RfdmFsKQogewogCXVuc2lnbmVkIGxvbmcgbnJwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlpbnQgZXJyOwogCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBJT1JfTU9ERV9VTkNBQ0hFRDoKKwlzd2l0Y2ggKHByb3RfdmFsKSB7CisJY2FzZSBfUEFHRV9DQUNIRV9VQzoKIAlkZWZhdWx0OgotCQllcnIgPSBzZXRfbWVtb3J5X3VjKHZhZGRyLCBucnBhZ2VzKTsKKwkJZXJyID0gX3NldF9tZW1vcnlfdWModmFkZHIsIG5ycGFnZXMpOwogCQlicmVhazsKLQljYXNlIElPUl9NT0RFX0NBQ0hFRDoKLQkJZXJyID0gc2V0X21lbW9yeV93Yih2YWRkciwgbnJwYWdlcyk7CisJY2FzZSBfUEFHRV9DQUNIRV9XQzoKKwkJZXJyID0gX3NldF9tZW1vcnlfd2ModmFkZHIsIG5ycGFnZXMpOworCQlicmVhazsKKwljYXNlIF9QQUdFX0NBQ0hFX1dCOgorCQllcnIgPSBfc2V0X21lbW9yeV93Yih2YWRkciwgbnJwYWdlcyk7CiAJCWJyZWFrOwogCX0KIApAQCAtOTgsMTggKzExNywyOCBAQAogICogaGF2ZSB0byBjb252ZXJ0IHRoZW0gaW50byBhbiBvZmZzZXQgaW4gYSBwYWdlLWFsaWduZWQgbWFwcGluZywgYnV0IHRoZQogICogY2FsbGVyIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhhdCBzbWFsbCBkZXRhaWwuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW9tZW0gKl9faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgICAgIGVudW0gaW9yZW1hcF9tb2RlIG1vZGUpCitzdGF0aWMgdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdF92YWwpCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm4sIG9mZnNldCwgbGFzdF9hZGRyLCB2YWRkcjsKKwl1bnNpZ25lZCBsb25nIHBmbiwgb2Zmc2V0LCB2YWRkcjsKKwlyZXNvdXJjZV9zaXplX3QgbGFzdF9hZGRyOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJdW5zaWduZWQgbG9uZyBuZXdfcHJvdF92YWw7CiAJcGdwcm90X3QgcHJvdDsKKwlpbnQgcmV0dmFsOwogCiAJLyogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUgKi8KIAlsYXN0X2FkZHIgPSBwaHlzX2FkZHIgKyBzaXplIC0gMTsKIAlpZiAoIXNpemUgfHwgbGFzdF9hZGRyIDwgcGh5c19hZGRyKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmICghcGh5c19hZGRyX3ZhbGlkKHBoeXNfYWRkcikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW9yZW1hcDogaW52YWxpZCBwaHlzaWNhbCBhZGRyZXNzICVsbHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkcik7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJLyoKIAkgKiBEb24ndCByZW1hcCB0aGUgbG93IFBDSS9JU0EgYXJlYSwgaXQncyBhbHdheXMgbWFwcGVkLi4KIAkgKi8KQEAgLTExOSwyMSArMTQ4LDE0IEBACiAJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCi0JZm9yIChwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsgcGZuIDwgbWF4X3Bmbl9tYXBwZWQgJiYKLQkgICAgIChwZm4gPDwgUEFHRV9TSElGVCkgPCBsYXN0X2FkZHI7IHBmbisrKSB7Ci0JCWlmIChwYWdlX2lzX3JhbShwZm4pICYmIHBmbl92YWxpZChwZm4pICYmCi0JCSAgICAhUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpKQotCQkJcmV0dXJuIE5VTEw7Ci0JfQorCWZvciAocGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7CisJCQkJKHBmbiA8PCBQQUdFX1NISUZUKSA8IGxhc3RfYWRkcjsgcGZuKyspIHsKIAotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgSU9SX01PREVfVU5DQUNIRUQ6Ci0JZGVmYXVsdDoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX05PQ0FDSEU7Ci0JCWJyZWFrOwotCWNhc2UgSU9SX01PREVfQ0FDSEVEOgotCQlwcm90ID0gUEFHRV9LRVJORUw7Ci0JCWJyZWFrOworCQlpbnQgaXNfcmFtID0gcGFnZV9pc19yYW0ocGZuKTsKKworCQlpZiAoaXNfcmFtICYmIHBmbl92YWxpZChwZm4pICYmICFQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJV0FSTl9PTl9PTkNFKGlzX3JhbSk7CiAJfQogCiAJLyoKQEAgLTE0Myw2ICsxNjUsNTAgQEAKIAlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOwogCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkcisxKSAtIHBoeXNfYWRkcjsKIAorCXJldHZhbCA9IHJlc2VydmVfbWVtdHlwZShwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUsCisJCQkJCQlwcm90X3ZhbCwgJm5ld19wcm90X3ZhbCk7CisJaWYgKHJldHZhbCkgeworCQlwcl9kZWJ1ZygiV2FybmluZzogcmVzZXJ2ZV9tZW10eXBlIHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAocHJvdF92YWwgIT0gbmV3X3Byb3RfdmFsKSB7CisJCS8qCisJCSAqIERvIG5vdCBmYWxsYmFjayB0byBjZXJ0YWluIG1lbW9yeSB0eXBlcyB3aXRoIGNlcnRhaW4KKwkJICogcmVxdWVzdGVkIHR5cGU6CisJCSAqIC0gcmVxdWVzdCBpcyB1bmNhY2hlZCwgcmV0dXJuIGNhbm5vdCBiZSB3cml0ZS1iYWNrCisJCSAqIC0gcmVxdWVzdCBpcyB1bmNhY2hlZCwgcmV0dXJuIGNhbm5vdCBiZSB3cml0ZS1jb21iaW5lCisJCSAqIC0gcmVxdWVzdCBpcyB3cml0ZS1jb21iaW5lLCByZXR1cm4gY2Fubm90IGJlIHdyaXRlLWJhY2sKKwkJICovCisJCWlmICgocHJvdF92YWwgPT0gX1BBR0VfQ0FDSEVfVUMgJiYKKwkJICAgICAobmV3X3Byb3RfdmFsID09IF9QQUdFX0NBQ0hFX1dCIHx8CisJCSAgICAgIG5ld19wcm90X3ZhbCA9PSBfUEFHRV9DQUNIRV9XQykpIHx8CisJCSAgICAocHJvdF92YWwgPT0gX1BBR0VfQ0FDSEVfV0MgJiYKKwkJICAgICBuZXdfcHJvdF92YWwgPT0gX1BBR0VfQ0FDSEVfV0IpKSB7CisJCQlwcl9kZWJ1ZygKKwkJImlvcmVtYXAgZXJyb3IgZm9yIDB4JWxseC0weCVsbHgsIHJlcXVlc3RlZCAweCVseCwgZ290IDB4JWx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGh5c19hZGRyLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHBoeXNfYWRkciArIHNpemUpLAorCQkJCXByb3RfdmFsLCBuZXdfcHJvdF92YWwpOworCQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlwcm90X3ZhbCA9IG5ld19wcm90X3ZhbDsKKwl9CisKKwlzd2l0Y2ggKHByb3RfdmFsKSB7CisJY2FzZSBfUEFHRV9DQUNIRV9VQzoKKwlkZWZhdWx0OgorCQlwcm90ID0gUEFHRV9LRVJORUxfTk9DQUNIRTsKKwkJYnJlYWs7CisJY2FzZSBfUEFHRV9DQUNIRV9XQzoKKwkJcHJvdCA9IFBBR0VfS0VSTkVMX1dDOworCQlicmVhazsKKwljYXNlIF9QQUdFX0NBQ0hFX1dCOgorCQlwcm90ID0gUEFHRV9LRVJORUw7CisJCWJyZWFrOworCX0KKwogCS8qCiAJICogT2ssIGdvIGZvciBpdC4uCiAJICovCkBAIC0xNTIsMTEgKzIxOCwxMyBAQAogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBhcmVhLT5hZGRyOwogCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UodmFkZHIsIHZhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwcm90KSkgewotCQlyZW1vdmVfdm1fYXJlYSgodm9pZCAqKSh2YWRkciAmIFBBR0VfTUFTSykpOworCQlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKKwkJZnJlZV92bV9hcmVhKGFyZWEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoaW9yZW1hcF9jaGFuZ2VfYXR0cih2YWRkciwgc2l6ZSwgbW9kZSkgPCAwKSB7CisJaWYgKGlvcmVtYXBfY2hhbmdlX2F0dHIodmFkZHIsIHNpemUsIHByb3RfdmFsKSA8IDApIHsKKwkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7CiAJCXZ1bm1hcChhcmVhLT5hZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTg1LDE1ICsyNTMsMzQgQEAKICAqCiAgKiBNdXN0IGJlIGZyZWVkIHdpdGggaW91bm1hcC4KICAqLwotdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3ZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX19pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSwgSU9SX01PREVfVU5DQUNIRUQpOworCXJldHVybiBfX2lvcmVtYXAocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9VQyk7CiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXBfbm9jYWNoZSk7CiAKLXZvaWQgX19pb21lbSAqaW9yZW1hcF9jYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQorLyoqCisgKiBpb3JlbWFwX3djCS0JbWFwIG1lbW9yeSBpbnRvIENQVSBzcGFjZSB3cml0ZSBjb21iaW5lZAorICogQG9mZnNldDoJYnVzIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQorICogQHNpemU6CXNpemUgb2YgdGhlIHJlc291cmNlIHRvIG1hcAorICoKKyAqIFRoaXMgdmVyc2lvbiBvZiBpb3JlbWFwIGVuc3VyZXMgdGhhdCB0aGUgbWVtb3J5IGlzIG1hcmtlZCB3cml0ZSBjb21iaW5pbmcuCisgKiBXcml0ZSBjb21iaW5pbmcgYWxsb3dzIGZhc3RlciB3cml0ZXMgdG8gc29tZSBoYXJkd2FyZSBkZXZpY2VzLgorICoKKyAqIE11c3QgYmUgZnJlZWQgd2l0aCBpb3VubWFwLgorICovCit2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2ModW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX19pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSwgSU9SX01PREVfQ0FDSEVEKTsKKwlpZiAocGF0X3djX2VuYWJsZWQpCisJCXJldHVybiBfX2lvcmVtYXAocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9XQyk7CisJZWxzZQorCQlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKHBoeXNfYWRkciwgc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGlvcmVtYXBfd2MpOworCit2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXAocGh5c19hZGRyLCBzaXplLCBfUEFHRV9DQUNIRV9XQik7CiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXBfY2FjaGUpOwogCkBAIC0yNDAsNiArMzI3LDggQEAKIAkJcmV0dXJuOwogCX0KIAorCWZyZWVfbWVtdHlwZShwLT5waHlzX2FkZHIsIHAtPnBoeXNfYWRkciArIGdldF92bV9hcmVhX3NpemUocCkpOworCiAJLyogRmluYWxseSByZW1vdmUgaXQgKi8KIAlvID0gcmVtb3ZlX3ZtX2FyZWEoKHZvaWQgKilhZGRyKTsKIAlCVUdfT04ocCAhPSBvIHx8IG8gPT0gTlVMTCk7CkBAIC0yNjAsOCArMzQ5LDggQEAKIGVhcmx5X3BhcmFtKCJlYXJseV9pb3JlbWFwX2RlYnVnIiwgZWFybHlfaW9yZW1hcF9kZWJ1Z19zZXR1cCk7CiAKIHN0YXRpYyBfX2luaXRkYXRhIGludCBhZnRlcl9wYWdpbmdfaW5pdDsKLXN0YXRpYyBfX2luaXRkYXRhIHB0ZV90IGJtX3B0ZVtQQUdFX1NJWkUvc2l6ZW9mKHB0ZV90KV0KLQkJCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsKK3N0YXRpYyBwdGVfdCBibV9wdGVbUEFHRV9TSVpFL3NpemVvZihwdGVfdCldCisJCV9fc2VjdGlvbiguYnNzLnBhZ2VfYWxpZ25lZCk7CiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKiBfX2luaXQgZWFybHlfaW9yZW1hcF9wbWQodW5zaWduZWQgbG9uZyBhZGRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vazh0b3BvbG9neV82NC5jIGIvYXJjaC94ODYvbW0vazh0b3BvbG9neV82NC5jCmluZGV4IDdhMmViY2UuLjg2ODA4ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2s4dG9wb2xvZ3lfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9rOHRvcG9sb2d5XzY0LmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCWlmICghZm91bmQpCiAJCXJldHVybiAtMTsKIAotCW1lbW5vZGVfc2hpZnQgPSBjb21wdXRlX2hhc2hfc2hpZnQobm9kZXMsIDgpOworCW1lbW5vZGVfc2hpZnQgPSBjb21wdXRlX2hhc2hfc2hpZnQobm9kZXMsIDgsIE5VTEwpOwogCWlmIChtZW1ub2RlX3NoaWZ0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIk5vIE5VTUEgbm9kZSBoYXNoIGZ1bmN0aW9uIGZvdW5kLiBDb250YWN0IG1haW50YWluZXJcbiIpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKaW5kZXggMWFlY2M2NS4uOWE2ODkyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV82NC5jCisrKyBiL2FyY2gveDg2L21tL251bWFfNjQuYwpAQCAtMzEsMTMgKzMxLDE1IEBACiAKIHN0cnVjdCBtZW1ub2RlIG1lbW5vZGU7CiAKKyNpZmRlZiBDT05GSUdfU01QCiBpbnQgeDg2X2NwdV90b19ub2RlX21hcF9pbml0W05SX0NQVVNdID0gewogCVswIC4uLiBOUl9DUFVTLTFdID0gTlVNQV9OT19OT0RFCiB9Owogdm9pZCAqeDg2X2NwdV90b19ub2RlX21hcF9lYXJseV9wdHI7CitFWFBPUlRfU1lNQk9MKHg4Nl9jcHVfdG9fbm9kZV9tYXBfZWFybHlfcHRyKTsKKyNlbmRpZgogREVGSU5FX1BFUl9DUFUoaW50LCB4ODZfY3B1X3RvX25vZGVfbWFwKSA9IE5VTUFfTk9fTk9ERTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh4ODZfY3B1X3RvX25vZGVfbWFwKTsKLUVYUE9SVF9TWU1CT0woeDg2X2NwdV90b19ub2RlX21hcF9lYXJseV9wdHIpOwogCiBzMTYgYXBpY2lkX3RvX25vZGVbTUFYX0xPQ0FMX0FQSUNdIF9fY3B1aW5pdGRhdGEgPSB7CiAJWzAgLi4uIE1BWF9MT0NBTF9BUElDLTFdID0gTlVNQV9OT19OT0RFCkBAIC01OCw3ICs2MCw3IEBACiAgKiAtMSBpZiBub2RlIG92ZXJsYXAgb3IgbG9zdCByYW0gKHNoaWZ0IHRvbyBiaWcpCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHBvcHVsYXRlX21lbW5vZGVtYXAoY29uc3Qgc3RydWN0IGJvb3Rub2RlICpub2RlcywKLQkJCQkgICAgICBpbnQgbnVtbm9kZXMsIGludCBzaGlmdCkKKwkJCQkgICAgICBpbnQgbnVtbm9kZXMsIGludCBzaGlmdCwgaW50ICpub2RlaWRzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kOwogCWludCBpLCByZXMgPSAtMTsKQEAgLTc0LDcgKzc2LDEyIEBACiAJCWRvIHsKIAkJCWlmIChtZW1ub2RlbWFwW2FkZHIgPj4gc2hpZnRdICE9IE5VTUFfTk9fTk9ERSkKIAkJCQlyZXR1cm4gLTE7Ci0JCQltZW1ub2RlbWFwW2FkZHIgPj4gc2hpZnRdID0gaTsKKworCQkJaWYgKCFub2RlaWRzKQorCQkJCW1lbW5vZGVtYXBbYWRkciA+PiBzaGlmdF0gPSBpOworCQkJZWxzZQorCQkJCW1lbW5vZGVtYXBbYWRkciA+PiBzaGlmdF0gPSBub2RlaWRzW2ldOworCiAJCQlhZGRyICs9ICgxVUwgPDwgc2hpZnQpOwogCQl9IHdoaWxlIChhZGRyIDwgZW5kKTsKIAkJcmVzID0gMTsKQEAgLTEzNyw3ICsxNDQsOCBAQAogCXJldHVybiBpOwogfQogCi1pbnQgX19pbml0IGNvbXB1dGVfaGFzaF9zaGlmdChzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzLCBpbnQgbnVtbm9kZXMpCitpbnQgX19pbml0IGNvbXB1dGVfaGFzaF9zaGlmdChzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzLCBpbnQgbnVtbm9kZXMsCisJCQkgICAgICBpbnQgKm5vZGVpZHMpCiB7CiAJaW50IHNoaWZ0OwogCkBAIC0xNDcsNyArMTU1LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiTlVNQTogVXNpbmcgJWQgZm9yIHRoZSBoYXNoIHNoaWZ0LlxuIiwKIAkJc2hpZnQpOwogCi0JaWYgKHBvcHVsYXRlX21lbW5vZGVtYXAobm9kZXMsIG51bW5vZGVzLCBzaGlmdCkgIT0gMSkgeworCWlmIChwb3B1bGF0ZV9tZW1ub2RlbWFwKG5vZGVzLCBudW1ub2Rlcywgc2hpZnQsIG5vZGVpZHMpICE9IDEpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiWW91ciBtZW1vcnkgaXMgbm90IGFsaWduZWQgeW91IG5lZWQgdG8gIgogCQkgICAgICAgInJlYnVpbGQgeW91ciBrZXJuZWwgd2l0aCBhIGJpZ2dlciBOT0RFTUFQU0laRSAiCiAJCSAgICAgICAic2hpZnQ9JWRcbiIsIHNoaWZ0KTsKQEAgLTIyMSw4ICsyMjksNyBAQAogCQkJCSBib290bWFwX3BhZ2VzPDxQQUdFX1NISUZULCBQQUdFX1NJWkUpOwogCWlmIChib290bWFwID09IE5VTEwpICB7CiAJCWlmIChub2RlZGF0YV9waHlzIDwgc3RhcnQgfHwgbm9kZWRhdGFfcGh5cyA+PSBlbmQpCi0JCQlmcmVlX2Jvb3RtZW0oKHVuc2lnbmVkIGxvbmcpbm9kZV9kYXRhW25vZGVpZF0sCi0JCQkJICAgICBwZ2RhdF9zaXplKTsKKwkJCWZyZWVfYm9vdG1lbShub2RlZGF0YV9waHlzLCBwZ2RhdF9zaXplKTsKIAkJbm9kZV9kYXRhW25vZGVpZF0gPSBOVUxMOwogCQlyZXR1cm47CiAJfQpAQCAtMzc5LDkgKzM4NiwxMCBAQAogICogU2V0cyB1cCB0aGUgc3lzdGVtIFJBTSBhcmVhIGZyb20gc3RhcnRfcGZuIHRvIGVuZF9wZm4gYWNjb3JkaW5nIHRvIHRoZQogICogbnVtYT1mYWtlIGNvbW1hbmQtbGluZSBvcHRpb24uCiAgKi8KK3N0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgbm9kZXNbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOworCiBzdGF0aWMgaW50IF9faW5pdCBudW1hX2VtdWxhdGlvbih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCXN0cnVjdCBib290bm9kZSBub2Rlc1tNQVhfTlVNTk9ERVNdOwogCXU2NCBzaXplLCBhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJdTY0IG1heF9hZGRyID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOwogCWludCBudW1fbm9kZXMgPSAwLCBudW0gPSAwLCBjb2VmZl9mbGFnLCBjb2VmZiA9IC0xLCBpOwpAQCAtNDYxLDcgKzQ2OSw3IEBACiAJCX0KIAl9CiBvdXQ6Ci0JbWVtbm9kZV9zaGlmdCA9IGNvbXB1dGVfaGFzaF9zaGlmdChub2RlcywgbnVtX25vZGVzKTsKKwltZW1ub2RlX3NoaWZ0ID0gY29tcHV0ZV9oYXNoX3NoaWZ0KG5vZGVzLCBudW1fbm9kZXMsIE5VTEwpOwogCWlmIChtZW1ub2RlX3NoaWZ0IDwgMCkgewogCQltZW1ub2RlX3NoaWZ0ID0gMDsKIAkJcHJpbnRrKEtFUk5fRVJSICJObyBOVU1BIGhhc2ggZnVuY3Rpb24gZm91bmQuICBOVU1BIGVtdWxhdGlvbiAiCkBAIC00OTQsMTEgKzUwMiwxMyBAQAogCWludCBpOwogCiAJbm9kZXNfY2xlYXIobm9kZV9wb3NzaWJsZV9tYXApOworCW5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7CiAKICNpZmRlZiBDT05GSUdfTlVNQV9FTVUKIAlpZiAoY21kbGluZSAmJiAhbnVtYV9lbXVsYXRpb24oc3RhcnRfcGZuLCBlbmRfcGZuKSkKIAkJcmV0dXJuOwogCW5vZGVzX2NsZWFyKG5vZGVfcG9zc2libGVfbWFwKTsKKwlub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCkBAIC01MDYsNiArNTE2LDcgQEAKIAkJCQkJICBlbmRfcGZuIDw8IFBBR0VfU0hJRlQpKQogCQlyZXR1cm47CiAJbm9kZXNfY2xlYXIobm9kZV9wb3NzaWJsZV9tYXApOworCW5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19LOF9OVU1BCkBAIC01MTMsNiArNTI0LDcgQEAKIAkJCQkJZW5kX3Bmbjw8UEFHRV9TSElGVCkpCiAJCXJldHVybjsKIAlub2Rlc19jbGVhcihub2RlX3Bvc3NpYmxlX21hcCk7CisJbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKICNlbmRpZgogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLAogCSAgICAgICBudW1hX29mZiA/ICJOVU1BIHR1cm5lZCBvZmYiIDogIk5vIE5VTUEgY29uZmlndXJhdGlvbiBmb3VuZCIpOwpAQCAtNTI0LDcgKzUzNiw2IEBACiAJbWVtbm9kZV9zaGlmdCA9IDYzOwogCW1lbW5vZGVtYXAgPSBtZW1ub2RlLmVtYmVkZGVkX21hcDsKIAltZW1ub2RlbWFwWzBdID0gMDsKLQlub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOwogCW5vZGVfc2V0X29ubGluZSgwKTsKIAlub2RlX3NldCgwLCBub2RlX3Bvc3NpYmxlX21hcCk7CiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKQEAgLTU0Niw4ICs1NTcsNiBAQAogewogCWludCAqY3B1X3RvX25vZGVfbWFwID0geDg2X2NwdV90b19ub2RlX21hcF9lYXJseV9wdHI7CiAKLQljcHVfcGRhKGNwdSktPm5vZGVudW1iZXIgPSBub2RlOwotCiAJaWYoY3B1X3RvX25vZGVfbWFwKQogCQljcHVfdG9fbm9kZV9tYXBbY3B1XSA9IG5vZGU7CiAJZWxzZSBpZihwZXJfY3B1X29mZnNldChjcHUpKQpAQCAtNjE5LDEzICs2MjgsMTcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJaW50IG5vZGU7CiAJCXUxNiBhcGljaWQgPSB4ODZfY3B1X3RvX2FwaWNpZF9pbml0W2ldOwogCiAJCWlmIChhcGljaWQgPT0gQkFEX0FQSUNJRCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoYXBpY2lkX3RvX25vZGVbYXBpY2lkXSA9PSBOVU1BX05PX05PREUpCisJCW5vZGUgPSBhcGljaWRfdG9fbm9kZVthcGljaWRdOworCQlpZiAobm9kZSA9PSBOVU1BX05PX05PREUpCiAJCQljb250aW51ZTsKLQkJbnVtYV9zZXRfbm9kZShpLCBhcGljaWRfdG9fbm9kZVthcGljaWRdKTsKKwkJaWYgKCFub2RlX29ubGluZShub2RlKSkKKwkJCWNvbnRpbnVlOworCQludW1hX3NldF9ub2RlKGksIG5vZGUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKaW5kZXggNDExOTM3OS4uZjc4MjNhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCkBAIC05LDYgKzksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xNiw2ICsxOCw4IEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9wYXQuaD4KIAogLyoKICAqIFRoZSBjdXJyZW50IGZsdXNoaW5nIGNvbnRleHQgLSB3ZSBwYXNzIGl0IGluc3RlYWQgb2YgNSBhcmd1bWVudHM6CkBAIC0yNiw4ICszMCwzMCBAQAogCXBncHJvdF90CW1hc2tfY2xyOwogCWludAkJbnVtcGFnZXM7CiAJaW50CQlmbHVzaHRsYjsKKwl1bnNpZ25lZCBsb25nCXBmbjsKKwl1bnNpZ25lZAlmb3JjZV9zcGxpdCA6IDE7CiB9OwogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGlnaG1hcF9zdGFydF9wZm4odm9pZCkKK3sKKwlyZXR1cm4gX19wYShfdGV4dCkgPj4gUEFHRV9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhpZ2htYXBfZW5kX3Bmbih2b2lkKQoreworCXJldHVybiBfX3BhKHJvdW5kX3VwKCh1bnNpZ25lZCBsb25nKV9lbmQsIFBNRF9TSVpFKSkgPj4gUEFHRV9TSElGVDsKK30KKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisjIGRlZmluZSBkZWJ1Z19wYWdlYWxsb2MgMQorI2Vsc2UKKyMgZGVmaW5lIGRlYnVnX3BhZ2VhbGxvYyAwCisjZW5kaWYKKwogc3RhdGljIGlubGluZSBpbnQKIHdpdGhpbih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtMTIzLDI5ICsxNDksMTQgQEAKIAl9CiB9CiAKLSNkZWZpbmUgSElHSF9NQVBfU1RBUlQJX19TVEFSVF9LRVJORUxfbWFwCi0jZGVmaW5lIEhJR0hfTUFQX0VORAkoX19TVEFSVF9LRVJORUxfbWFwICsgS0VSTkVMX1RFWFRfU0laRSkKLQotCi0vKgotICogQ29udmVydHMgYSB2aXJ0dWFsIGFkZHJlc3MgdG8gYSBYODYtNjQgaGlnaG1hcCBhZGRyZXNzCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZpcnRfdG9faGlnaG1hcCh2b2lkICphZGRyZXNzKQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gX19wYSgodW5zaWduZWQgbG9uZylhZGRyZXNzKSArIEhJR0hfTUFQX1NUQVJUIC0gcGh5c19iYXNlOwotI2Vsc2UKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWRkcmVzczsKLSNlbmRpZgotfQotCiAvKgogICogQ2VydGFpbiBhcmVhcyBvZiBtZW1vcnkgb24geDg2IHJlcXVpcmUgdmVyeSBzcGVjaWZpYyBwcm90ZWN0aW9uIGZsYWdzLAogICogZm9yIGV4YW1wbGUgdGhlIEJJT1MgYXJlYSBvciBrZXJuZWwgdGV4dC4gQ2FsbGVycyBkb24ndCBhbHdheXMgZ2V0IHRoaXMKICAqIHJpZ2h0IChhZ2FpbiwgaW9yZW1hcCgpIG9uIEJJT1MgbWVtb3J5IGlzIG5vdCB1bmNvbW1vbikgc28gdGhpcyBmdW5jdGlvbgogICogY2hlY2tzIGFuZCBmaXhlcyB0aGVzZSBrbm93biBzdGF0aWMgcmVxdWlyZWQgcHJvdGVjdGlvbiBiaXRzLgogICovCi1zdGF0aWMgaW5saW5lIHBncHJvdF90IHN0YXRpY19wcm90ZWN0aW9ucyhwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHBncHJvdF90IHN0YXRpY19wcm90ZWN0aW9ucyhwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJICAgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJcGdwcm90X3QgZm9yYmlkZGVuID0gX19wZ3Byb3QoMCk7CiAKQEAgLTE1MywzMCArMTY0LDIzIEBACiAJICogVGhlIEJJT1MgYXJlYSBiZXR3ZWVuIDY0MGsgYW5kIDFNYiBuZWVkcyB0byBiZSBleGVjdXRhYmxlIGZvcgogCSAqIFBDSSBCSU9TIGJhc2VkIGNvbmZpZyBhY2Nlc3MgKENPTkZJR19QQ0lfR09CSU9TKSBzdXBwb3J0LgogCSAqLwotCWlmICh3aXRoaW4oX19wYShhZGRyZXNzKSwgQklPU19CRUdJTiwgQklPU19FTkQpKQorCWlmICh3aXRoaW4ocGZuLCBCSU9TX0JFR0lOID4+IFBBR0VfU0hJRlQsIEJJT1NfRU5EID4+IFBBR0VfU0hJRlQpKQogCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfTlg7CiAKIAkvKgogCSAqIFRoZSBrZXJuZWwgdGV4dCBuZWVkcyB0byBiZSBleGVjdXRhYmxlIGZvciBvYnZpb3VzIHJlYXNvbnMKLQkgKiBEb2VzIG5vdCBjb3ZlciBfX2luaXR0ZXh0IHNpbmNlIHRoYXQgaXMgZ29uZSBsYXRlciBvbgorCSAqIERvZXMgbm90IGNvdmVyIF9faW5pdHRleHQgc2luY2UgdGhhdCBpcyBnb25lIGxhdGVyIG9uLiBPbgorCSAqIDY0Yml0IHdlIGRvIG5vdCBlbmZvcmNlICFOWCBvbiB0aGUgbG93IG1hcHBpbmcKIAkgKi8KIAlpZiAod2l0aGluKGFkZHJlc3MsICh1bnNpZ25lZCBsb25nKV90ZXh0LCAodW5zaWduZWQgbG9uZylfZXRleHQpKQogCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfTlg7Ci0JLyoKLQkgKiBEbyB0aGUgc2FtZSBmb3IgdGhlIHg4Ni02NCBoaWdoIGtlcm5lbCBtYXBwaW5nCi0JICovCi0JaWYgKHdpdGhpbihhZGRyZXNzLCB2aXJ0X3RvX2hpZ2htYXAoX3RleHQpLCB2aXJ0X3RvX2hpZ2htYXAoX2V0ZXh0KSkpCi0JCXBncHJvdF92YWwoZm9yYmlkZGVuKSB8PSBfUEFHRV9OWDsKIAotCS8qIFRoZSAucm9kYXRhIHNlY3Rpb24gbmVlZHMgdG8gYmUgcmVhZC1vbmx5ICovCi0JaWYgKHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfX3N0YXJ0X3JvZGF0YSwKLQkJCQkodW5zaWduZWQgbG9uZylfX2VuZF9yb2RhdGEpKQotCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfUlc7CiAJLyoKLQkgKiBEbyB0aGUgc2FtZSBmb3IgdGhlIHg4Ni02NCBoaWdoIGtlcm5lbCBtYXBwaW5nCisJICogVGhlIC5yb2RhdGEgc2VjdGlvbiBuZWVkcyB0byBiZSByZWFkLW9ubHkuIFVzaW5nIHRoZSBwZm4KKwkgKiBjYXRjaGVzIGFsbCBhbGlhc2VzLgogCSAqLwotCWlmICh3aXRoaW4oYWRkcmVzcywgdmlydF90b19oaWdobWFwKF9fc3RhcnRfcm9kYXRhKSwKLQkJCQl2aXJ0X3RvX2hpZ2htYXAoX19lbmRfcm9kYXRhKSkpCisJaWYgKHdpdGhpbihwZm4sIF9fcGEoKHVuc2lnbmVkIGxvbmcpX19zdGFydF9yb2RhdGEpID4+IFBBR0VfU0hJRlQsCisJCSAgIF9fcGEoKHVuc2lnbmVkIGxvbmcpX19lbmRfcm9kYXRhKSA+PiBQQUdFX1NISUZUKSkKIAkJcGdwcm90X3ZhbChmb3JiaWRkZW4pIHw9IF9QQUdFX1JXOwogCiAJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgJiB+cGdwcm90X3ZhbChmb3JiaWRkZW4pKTsKQEAgLTI1MywxMiArMjU3LDE1IEBACiB0cnlfcHJlc2VydmVfbGFyZ2VfcGFnZShwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJc3RydWN0IGNwYV9kYXRhICpjcGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXh0cGFnZV9hZGRyLCBudW1wYWdlcywgcG1hc2ssIHBzaXplLCBmbGFncywgYWRkcjsKKwl1bnNpZ25lZCBsb25nIG5leHRwYWdlX2FkZHIsIG51bXBhZ2VzLCBwbWFzaywgcHNpemUsIGZsYWdzLCBhZGRyLCBwZm47CiAJcHRlX3QgbmV3X3B0ZSwgb2xkX3B0ZSwgKnRtcDsKIAlwZ3Byb3RfdCBvbGRfcHJvdCwgbmV3X3Byb3Q7CiAJaW50IGksIGRvX3NwbGl0ID0gMTsKIAl1bnNpZ25lZCBpbnQgbGV2ZWw7CiAKKwlpZiAoY3BhLT5mb3JjZV9zcGxpdCkKKwkJcmV0dXJuIDE7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGdkX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIENoZWNrIGZvciByYWNlcywgYW5vdGhlciBDUFUgbWlnaHQgaGF2ZSBzcGxpdCB0aGlzIHBhZ2UKQEAgLTMwMSw3ICszMDgsMTUgQEAKIAogCXBncHJvdF92YWwobmV3X3Byb3QpICY9IH5wZ3Byb3RfdmFsKGNwYS0+bWFza19jbHIpOwogCXBncHJvdF92YWwobmV3X3Byb3QpIHw9IHBncHJvdF92YWwoY3BhLT5tYXNrX3NldCk7Ci0JbmV3X3Byb3QgPSBzdGF0aWNfcHJvdGVjdGlvbnMobmV3X3Byb3QsIGFkZHJlc3MpOworCisJLyoKKwkgKiBvbGRfcHRlIHBvaW50cyB0byB0aGUgbGFyZ2UgcGFnZSBiYXNlIGFkZHJlc3MuIFNvIHdlIG5lZWQKKwkgKiB0byBhZGQgdGhlIG9mZnNldCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzOgorCSAqLworCXBmbiA9IHB0ZV9wZm4ob2xkX3B0ZSkgKyAoKGFkZHJlc3MgJiAocHNpemUgLSAxKSkgPj4gUEFHRV9TSElGVCk7CisJY3BhLT5wZm4gPSBwZm47CisKKwluZXdfcHJvdCA9IHN0YXRpY19wcm90ZWN0aW9ucyhuZXdfcHJvdCwgYWRkcmVzcywgcGZuKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byBjaGVjayB0aGUgZnVsbCByYW5nZSwgd2hldGhlcgpAQCAtMzA5LDggKzMyNCw5IEBACiAJICogdGhlIHBhZ2VzIGluIHRoZSByYW5nZSB3ZSB0cnkgdG8gcHJlc2VydmU6CiAJICovCiAJYWRkciA9IGFkZHJlc3MgKyBQQUdFX1NJWkU7Ci0JZm9yIChpID0gMTsgaSA8IGNwYS0+bnVtcGFnZXM7IGkrKywgYWRkciArPSBQQUdFX1NJWkUpIHsKLQkJcGdwcm90X3QgY2hrX3Byb3QgPSBzdGF0aWNfcHJvdGVjdGlvbnMobmV3X3Byb3QsIGFkZHIpOworCXBmbisrOworCWZvciAoaSA9IDE7IGkgPCBjcGEtPm51bXBhZ2VzOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBwZm4rKykgeworCQlwZ3Byb3RfdCBjaGtfcHJvdCA9IHN0YXRpY19wcm90ZWN0aW9ucyhuZXdfcHJvdCwgYWRkciwgcGZuKTsKIAogCQlpZiAocGdwcm90X3ZhbChjaGtfcHJvdCkgIT0gcGdwcm90X3ZhbChuZXdfcHJvdCkpCiAJCQlnb3RvIG91dF91bmxvY2s7CkBAIC0zNTIsNDUgKzM2OCw0OCBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBhZ2VfcG9vbCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwb29sX3NpemUsIHBvb2xfcGFnZXMsIHBvb2xfbG93Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgcG9vbF91c2VkLCBwb29sX2ZhaWxlZCwgcG9vbF9yZWZpbGw7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwb29sX3VzZWQsIHBvb2xfZmFpbGVkOwogCi1zdGF0aWMgdm9pZCBjcGFfZmlsbF9wb29sKHZvaWQpCitzdGF0aWMgdm9pZCBjcGFfZmlsbF9wb29sKHN0cnVjdCBwYWdlICoqcmV0KQogewotCXN0cnVjdCBwYWdlICpwOwogCWdmcF90IGdmcCA9IEdGUF9LRVJORUw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqcDsKIAotCS8qIERvIG5vdCBhbGxvY2F0ZSBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCi0JaWYgKGluX2lycSgpIHx8IGlycXNfZGlzYWJsZWQoKSkKLQkJcmV0dXJuOwogCS8qCi0JICogQ2hlY2sgdW5sb2NrZWQuIEkgZG9lcyBub3QgbWF0dGVyIHdoZW4gd2UgaGF2ZSBvbmUgbW9yZQotCSAqIHBhZ2UgaW4gdGhlIHBvb2wuIFRoZSBiaXQgbG9jayBhdm9pZHMgcmVjdXJzaXZlIHBvb2wKLQkgKiBhbGxvY2F0aW9uczoKKwkgKiBBdm9pZCByZWN1cnNpb24gKG9uIGRlYnVnLXBhZ2VhbGxvYykgYW5kIGFsc28gc2lnbmFsCisJICogb3VyIHByaW9yaXR5IHRvIGdldCB0byB0aGVzZSBwYWdldGFibGVzOgogCSAqLwotCWlmIChwb29sX3BhZ2VzID49IHBvb2xfc2l6ZSB8fCB0ZXN0X2FuZF9zZXRfYml0X2xvY2soMCwgJnBvb2xfcmVmaWxsKSkKKwlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykKIAkJcmV0dXJuOworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogCS8qCi0JICogV2UgY291bGQgZG86Ci0JICogZ2ZwID0gaW5fYXRvbWljKCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTDsKLQkgKiBidXQgdGhpcyBmYWlscyBvbiAhUFJFRU1QVCBrZXJuZWxzCisJICogQWxsb2NhdGUgYXRvbWljYWxseSBmcm9tIGF0b21pYyBjb250ZXh0czoKIAkgKi8KLQlnZnAgPSAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47Ci0jZW5kaWYKKwlpZiAoaW5fYXRvbWljKCkgfHwgaXJxc19kaXNhYmxlZCgpIHx8IGRlYnVnX3BhZ2VhbGxvYykKKwkJZ2ZwID0gIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOOwogCi0Jd2hpbGUgKHBvb2xfcGFnZXMgPCBwb29sX3NpemUpIHsKKwl3aGlsZSAocG9vbF9wYWdlcyA8IHBvb2xfc2l6ZSB8fCAocmV0ICYmICEqcmV0KSkgewogCQlwID0gYWxsb2NfcGFnZXMoZ2ZwLCAwKTsKIAkJaWYgKCFwKSB7CiAJCQlwb29sX2ZhaWxlZCsrOwogCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl9sb2NrX2lycSgmcGdkX2xvY2spOworCQkvKgorCQkgKiBJZiB0aGUgY2FsbCBzaXRlIG5lZWRzIGEgcGFnZSByaWdodCBub3csIHByb3ZpZGUgaXQ6CisJCSAqLworCQlpZiAocmV0ICYmICEqcmV0KSB7CisJCQkqcmV0ID0gcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZCgmcC0+bHJ1LCAmcGFnZV9wb29sKTsKIAkJcG9vbF9wYWdlcysrOwotCQlzcGluX3VubG9ja19pcnEoJnBnZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGdkX2xvY2ssIGZsYWdzKTsKIAl9Ci0JY2xlYXJfYml0X3VubG9jaygwLCAmcG9vbF9yZWZpbGwpOworCisJY3VycmVudC0+ZmxhZ3MgJj0gflBGX01FTUFMTE9DOwogfQogCiAjZGVmaW5lIFNISUZUX01CCQkoMjAgLSBQQUdFX1NISUZUKQpAQCAtNDExLDExICs0MzAsMTUgQEAKIAkgKiBHaUIuIFNoaWZ0IE1pQiB0byBHaWIgYW5kIG11bHRpcGx5IHRoZSByZXN1bHQgYnkKIAkgKiBQT09MX1BBR0VTX1BFUl9HQjoKIAkgKi8KLQlnYiA9ICgoc2kudG90YWxyYW0gPj4gU0hJRlRfTUIpICsgUk9VTkRfTUJfR0IpID4+IFNISUZUX01CX0dCOwotCXBvb2xfc2l6ZSA9IFBPT0xfUEFHRVNfUEVSX0dCICogZ2I7CisJaWYgKGRlYnVnX3BhZ2VhbGxvYykgeworCQlnYiA9ICgoc2kudG90YWxyYW0gPj4gU0hJRlRfTUIpICsgUk9VTkRfTUJfR0IpID4+IFNISUZUX01CX0dCOworCQlwb29sX3NpemUgPSBQT09MX1BBR0VTX1BFUl9HQiAqIGdiOworCX0gZWxzZSB7CisJCXBvb2xfc2l6ZSA9IDE7CisJfQogCXBvb2xfbG93ID0gcG9vbF9zaXplOwogCi0JY3BhX2ZpbGxfcG9vbCgpOworCWNwYV9maWxsX3Bvb2woTlVMTCk7CiAJcHJpbnRrKEtFUk5fREVCVUcKIAkgICAgICAgIkNQQTogcGFnZSBwb29sIGluaXRpYWxpemVkICVsdSBvZiAlbHUgcGFnZXMgcHJlYWxsb2NhdGVkXG4iLAogCSAgICAgICBwb29sX3BhZ2VzLCBwb29sX3NpemUpOwpAQCAtNDM3LDE2ICs0NjAsMjAgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGdkX2xvY2ssIGZsYWdzKTsKIAlpZiAobGlzdF9lbXB0eSgmcGFnZV9wb29sKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJYmFzZSA9IE5VTEw7CisJCWNwYV9maWxsX3Bvb2woJmJhc2UpOworCQlpZiAoIWJhc2UpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBnZF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJYmFzZSA9IGxpc3RfZmlyc3RfZW50cnkoJnBhZ2VfcG9vbCwgc3RydWN0IHBhZ2UsIGxydSk7CisJCWxpc3RfZGVsKCZiYXNlLT5scnUpOworCQlwb29sX3BhZ2VzLS07CisKKwkJaWYgKHBvb2xfcGFnZXMgPCBwb29sX2xvdykKKwkJCXBvb2xfbG93ID0gcG9vbF9wYWdlczsKIAl9CiAKLQliYXNlID0gbGlzdF9maXJzdF9lbnRyeSgmcGFnZV9wb29sLCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKLQlsaXN0X2RlbCgmYmFzZS0+bHJ1KTsKLQlwb29sX3BhZ2VzLS07Ci0KLQlpZiAocG9vbF9wYWdlcyA8IHBvb2xfbG93KQotCQlwb29sX2xvdyA9IHBvb2xfcGFnZXM7Ci0KIAkvKgogCSAqIENoZWNrIGZvciByYWNlcywgYW5vdGhlciBDUFUgbWlnaHQgaGF2ZSBzcGxpdCB0aGlzIHBhZ2UKIAkgKiB1cCBmb3IgdXMgYWxyZWFkeToKQEAgLTUwNSw0NiArNTMyLDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IGNwYV9kYXRhICpjcGEpCitzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpCiB7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gY3BhLT52YWRkcjsKIAlpbnQgZG9fc3BsaXQsIGVycjsKIAl1bnNpZ25lZCBpbnQgbGV2ZWw7Ci0Jc3RydWN0IHBhZ2UgKmtwdGVfcGFnZTsKLQlwdGVfdCAqa3B0ZTsKKwlwdGVfdCAqa3B0ZSwgb2xkX3B0ZTsKIAogcmVwZWF0OgogCWtwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyZXNzLCAmbGV2ZWwpOwogCWlmICgha3B0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCi0Ja3B0ZV9wYWdlID0gdmlydF90b19wYWdlKGtwdGUpOwotCUJVR19PTihQYWdlTFJVKGtwdGVfcGFnZSkpOwotCUJVR19PTihQYWdlQ29tcG91bmQoa3B0ZV9wYWdlKSk7CisJb2xkX3B0ZSA9ICprcHRlOworCWlmICghcHRlX3ZhbChvbGRfcHRlKSkgeworCQlpZiAoIXByaW1hcnkpCisJCQlyZXR1cm4gMDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1BBOiBjYWxsZWQgZm9yIHplcm8gcHRlLiAiCisJCSAgICAgICAidmFkZHIgPSAlbHggY3BhLT52YWRkciA9ICVseFxuIiwgYWRkcmVzcywKKwkJICAgICAgIGNwYS0+dmFkZHIpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlpZiAobGV2ZWwgPT0gUEdfTEVWRUxfNEspIHsKLQkJcHRlX3QgbmV3X3B0ZSwgb2xkX3B0ZSA9ICprcHRlOworCQlwdGVfdCBuZXdfcHRlOwogCQlwZ3Byb3RfdCBuZXdfcHJvdCA9IHB0ZV9wZ3Byb3Qob2xkX3B0ZSk7Ci0KLQkJaWYoIXB0ZV92YWwob2xkX3B0ZSkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNQQTogY2FsbGVkIGZvciB6ZXJvIHB0ZS4gIgotCQkJICAgICAgICJ2YWRkciA9ICVseCBjcGEtPnZhZGRyID0gJWx4XG4iLCBhZGRyZXNzLAotCQkJCWNwYS0+dmFkZHIpOwotCQkJV0FSTl9PTigxKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihvbGRfcHRlKTsKIAogCQlwZ3Byb3RfdmFsKG5ld19wcm90KSAmPSB+cGdwcm90X3ZhbChjcGEtPm1hc2tfY2xyKTsKIAkJcGdwcm90X3ZhbChuZXdfcHJvdCkgfD0gcGdwcm90X3ZhbChjcGEtPm1hc2tfc2V0KTsKIAotCQluZXdfcHJvdCA9IHN0YXRpY19wcm90ZWN0aW9ucyhuZXdfcHJvdCwgYWRkcmVzcyk7CisJCW5ld19wcm90ID0gc3RhdGljX3Byb3RlY3Rpb25zKG5ld19wcm90LCBhZGRyZXNzLCBwZm4pOwogCiAJCS8qCiAJCSAqIFdlIG5lZWQgdG8ga2VlcCB0aGUgcGZuIGZyb20gdGhlIGV4aXN0aW5nIFBURSwKIAkJICogYWZ0ZXIgYWxsIHdlJ3JlIG9ubHkgZ29pbmcgdG8gY2hhbmdlIGl0J3MgYXR0cmlidXRlcwogCQkgKiBub3QgdGhlIG1lbW9yeSBpdCBwb2ludHMgdG8KIAkJICovCi0JCW5ld19wdGUgPSBwZm5fcHRlKHB0ZV9wZm4ob2xkX3B0ZSksIGNhbm9uX3BncHJvdChuZXdfcHJvdCkpOwotCisJCW5ld19wdGUgPSBwZm5fcHRlKHBmbiwgY2Fub25fcGdwcm90KG5ld19wcm90KSk7CisJCWNwYS0+cGZuID0gcGZuOwogCQkvKgogCQkgKiBEbyB3ZSByZWFsbHkgY2hhbmdlIGFueXRoaW5nID8KIAkJICovCkBAIC01ODEsNjcgKzYwOCw1OSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qKgotICogY2hhbmdlX3BhZ2VfYXR0cl9hZGRyIC0gQ2hhbmdlIHBhZ2UgdGFibGUgYXR0cmlidXRlcyBpbiBsaW5lYXIgbWFwcGluZwotICogQGFkZHJlc3M6IFZpcnR1YWwgYWRkcmVzcyBpbiBsaW5lYXIgbWFwcGluZy4KLSAqIEBwcm90OiAgICBOZXcgcGFnZSB0YWJsZSBhdHRyaWJ1dGUgKFBBR0VfKikKLSAqCi0gKiBDaGFuZ2UgcGFnZSBhdHRyaWJ1dGVzIG9mIGEgcGFnZSBpbiB0aGUgZGlyZWN0IG1hcHBpbmcuIFRoaXMgaXMgYSB2YXJpYW50Ci0gKiBvZiBjaGFuZ2VfcGFnZV9hdHRyKCkgdGhhdCBhbHNvIHdvcmtzIG9uIG1lbW9yeSBob2xlcyB0aGF0IGRvIG5vdCBoYXZlCi0gKiBtZW1fbWFwIGVudHJ5IChwZm5fdmFsaWQoKSBpcyBmYWxzZSkuCi0gKgotICogU2VlIGNoYW5nZV9wYWdlX2F0dHIoKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogTW9kdWxlcyBhbmQgZHJpdmVycyBzaG91bGQgdXNlIHRoZSBzZXRfbWVtb3J5XyogQVBJcyBpbnN0ZWFkLgotICovCi1zdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfYWRkcihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKLXsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IGNwYS0+dmFkZHI7CitzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2hlY2thbGlhcyk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIgPSBfX3BhKGFkZHJlc3MpOworc3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKK3sKKwlzdHJ1Y3QgY3BhX2RhdGEgYWxpYXNfY3BhOworCWludCByZXQgPSAwOworCisJaWYgKGNwYS0+cGZuID4gbWF4X3Bmbl9tYXBwZWQpCisJCXJldHVybiAwOwogCiAJLyoKLQkgKiBJZiB3ZSBhcmUgaW5zaWRlIHRoZSBoaWdoIG1hcHBlZCBrZXJuZWwgcmFuZ2UsIHRoZW4gd2UKLQkgKiBmaXh1cCB0aGUgbG93IG1hcHBpbmcgZmlyc3QuIF9fdmEoKSByZXR1cm5zIHRoZSB2aXJ0dWFsCi0JICogYWRkcmVzcyBpbiB0aGUgbGluZWFyIG1hcHBpbmc6CisJICogTm8gbmVlZCB0byByZWRvLCB3aGVuIHRoZSBwcmltYXJ5IGNhbGwgdG91Y2hlZCB0aGUgZGlyZWN0CisJICogbWFwcGluZyBhbHJlYWR5OgogCSAqLwotCWlmICh3aXRoaW4oYWRkcmVzcywgSElHSF9NQVBfU1RBUlQsIEhJR0hfTUFQX0VORCkpCi0JCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgX192YShwaHlzX2FkZHIpOwotI2VuZGlmCisJaWYgKCF3aXRoaW4oY3BhLT52YWRkciwgUEFHRV9PRkZTRVQsCisJCSAgICBQQUdFX09GRlNFVCArIChtYXhfcGZuX21hcHBlZCA8PCBQQUdFX1NISUZUKSkpIHsKIAotCWVyciA9IF9fY2hhbmdlX3BhZ2VfYXR0cihhZGRyZXNzLCBjcGEpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWFsaWFzX2NwYSA9ICpjcGE7CisJCWFsaWFzX2NwYS52YWRkciA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKGNwYS0+cGZuIDw8IFBBR0VfU0hJRlQpOworCisJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbGlhc19jcGEsIDApOworCX0KIAogI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogTm8gbmVlZCB0byByZWRvLCB3aGVuIHRoZSBwcmltYXJ5IGNhbGwgdG91Y2hlZCB0aGUgaGlnaAorCSAqIG1hcHBpbmcgYWxyZWFkeToKKwkgKi8KKwlpZiAod2l0aGluKGNwYS0+dmFkZHIsICh1bnNpZ25lZCBsb25nKSBfdGV4dCwgKHVuc2lnbmVkIGxvbmcpIF9lbmQpKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogSWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgaW5zaWRlIHRoZSBrZXJuZWwgbWFwLCB3ZSBuZWVkCiAJICogdG8gdG91Y2ggdGhlIGhpZ2ggbWFwcGVkIGtlcm5lbCBhcyB3ZWxsOgogCSAqLwotCWlmICh3aXRoaW4ocGh5c19hZGRyLCAwLCBLRVJORUxfVEVYVF9TSVpFKSkgewotCQkvKgotCQkgKiBDYWxjIHRoZSBoaWdoIG1hcHBpbmcgYWRkcmVzcy4gU2VlIF9fcGh5c19hZGRyKCkKLQkJICogZm9yIHRoZSBub24gb2J2aW91cyBkZXRhaWxzLgotCQkgKgotCQkgKiBOb3RlIHRoYXQgTlggYW5kIG90aGVyIHJlcXVpcmVkIHBlcm1pc3Npb25zIGFyZQotCQkgKiBjaGVja2VkIGluIHN0YXRpY19wcm90ZWN0aW9ucygpLgotCQkgKi8KLQkJYWRkcmVzcyA9IHBoeXNfYWRkciArIEhJR0hfTUFQX1NUQVJUIC0gcGh5c19iYXNlOworCWlmICghd2l0aGluKGNwYS0+cGZuLCBoaWdobWFwX3N0YXJ0X3BmbigpLCBoaWdobWFwX2VuZF9wZm4oKSkpCisJCXJldHVybiAwOwogCi0JCS8qCi0JCSAqIE91ciBoaWdoIGFsaWFzZXMgYXJlIGltcHJlY2lzZSwgYmVjYXVzZSB3ZSBjaGVjawotCQkgKiBldmVyeXRoaW5nIGJldHdlZW4gMCBhbmQgS0VSTkVMX1RFWFRfU0laRSwgc28gZG8KLQkJICogbm90IHByb3BhZ2F0ZSBsb29rdXAgZmFpbHVyZXMgYmFjayB0byB1c2VyczoKLQkJICovCi0JCV9fY2hhbmdlX3BhZ2VfYXR0cihhZGRyZXNzLCBjcGEpOwotCX0KKwlhbGlhc19jcGEgPSAqY3BhOworCWFsaWFzX2NwYS52YWRkciA9CisJCShjcGEtPnBmbiA8PCBQQUdFX1NISUZUKSArIF9fU1RBUlRfS0VSTkVMX21hcCAtIHBoeXNfYmFzZTsKKworCS8qCisJICogVGhlIGhpZ2ggbWFwcGluZyByYW5nZSBpcyBpbXByZWNpc2UsIHNvIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgorCSAqLworCV9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbGlhc19jcGEsIDApOwogI2VuZGlmCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHN0cnVjdCBjcGFfZGF0YSAqY3BhKQorc3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNoZWNrYWxpYXMpCiB7CiAJaW50IHJldCwgbnVtcGFnZXMgPSBjcGEtPm51bXBhZ2VzOwogCkBAIC02NTEsMTAgKzY3MCwxNyBAQAogCQkgKiBwcmVzZXJ2YXRpb24gY2hlY2suCiAJCSAqLwogCQljcGEtPm51bXBhZ2VzID0gbnVtcGFnZXM7Ci0JCXJldCA9IGNoYW5nZV9wYWdlX2F0dHJfYWRkcihjcGEpOworCisJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIGNoZWNrYWxpYXMpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAorCQlpZiAoY2hlY2thbGlhcykgeworCQkJcmV0ID0gY3BhX3Byb2Nlc3NfYWxpYXMoY3BhKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCS8qCiAJCSAqIEFkanVzdCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKIAkJICogQ1BBIG9wZXJhdGlvbi4gRWl0aGVyIGEgbGFyZ2UgcGFnZSBoYXMgYmVlbgpAQCAtNjc0LDEwICs3MDAsMTEgQEAKIH0KIAogc3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsCi0JCQkJICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NscikKKwkJCQkgICAgcGdwcm90X3QgbWFza19zZXQsIHBncHJvdF90IG1hc2tfY2xyLAorCQkJCSAgICBpbnQgZm9yY2Vfc3BsaXQpCiB7CiAJc3RydWN0IGNwYV9kYXRhIGNwYTsKLQlpbnQgcmV0LCBjYWNoZTsKKwlpbnQgcmV0LCBjYWNoZSwgY2hlY2thbGlhczsKIAogCS8qCiAJICogQ2hlY2ssIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gY2hhbmdlIGEgbm90IHN1cHBvcnRlZApAQCAtNjg1LDcgKzcxMiw3IEBACiAJICovCiAJbWFza19zZXQgPSBjYW5vbl9wZ3Byb3QobWFza19zZXQpOwogCW1hc2tfY2xyID0gY2Fub25fcGdwcm90KG1hc2tfY2xyKTsKLQlpZiAoIXBncHJvdF92YWwobWFza19zZXQpICYmICFwZ3Byb3RfdmFsKG1hc2tfY2xyKSkKKwlpZiAoIXBncHJvdF92YWwobWFza19zZXQpICYmICFwZ3Byb3RfdmFsKG1hc2tfY2xyKSAmJiAhZm9yY2Vfc3BsaXQpCiAJCXJldHVybiAwOwogCiAJLyogRW5zdXJlIHdlIGFyZSBQQUdFX1NJWkUgYWxpZ25lZCAqLwpAQCAtNzAyLDggKzcyOSwxMiBAQAogCWNwYS5tYXNrX3NldCA9IG1hc2tfc2V0OwogCWNwYS5tYXNrX2NsciA9IG1hc2tfY2xyOwogCWNwYS5mbHVzaHRsYiA9IDA7CisJY3BhLmZvcmNlX3NwbGl0ID0gZm9yY2Vfc3BsaXQ7CiAKLQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmY3BhKTsKKwkvKiBObyBhbGlhcyBjaGVja2luZyBmb3IgX05YIGJpdCBtb2RpZmljYXRpb25zICovCisJY2hlY2thbGlhcyA9IChwZ3Byb3RfdmFsKG1hc2tfc2V0KSB8IHBncHJvdF92YWwobWFza19jbHIpKSAhPSBfUEFHRV9OWDsKKworCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZjcGEsIGNoZWNrYWxpYXMpOwogCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHdlIHJlYWxseSBjaGFuZ2VkIHNvbWV0aGluZzoKQEAgLTcyOSwzMyArNzYwLDY5IEBACiAJCWNwYV9mbHVzaF9hbGwoY2FjaGUpOwogCiBvdXQ6Ci0JY3BhX2ZpbGxfcG9vbCgpOworCWNwYV9maWxsX3Bvb2woTlVMTCk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywKIAkJCQkgICAgICAgcGdwcm90X3QgbWFzaykKIHsKLQlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSk7CisJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLAogCQkJCQkgcGdwcm90X3QgbWFzaykKIHsKLQlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgbWFzayk7CisJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDApOworfQorCitpbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCit7CisJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0KGFkZHIsIG51bXBhZ2VzLAorCQkJCSAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9VQykpOwogfQogCiBpbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKIHsKLQlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXQoYWRkciwgbnVtcGFnZXMsCi0JCQkJICAgIF9fcGdwcm90KF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpOworCWlmIChyZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIG51bXBhZ2VzICogUEFHRV9TSVpFLAorCSAgICAgICAgICAgICAgICAgICAgX1BBR0VfQ0FDSEVfVUMsIE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBfc2V0X21lbW9yeV91YyhhZGRyLCBudW1wYWdlcyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfdWMpOwogCi1pbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKK2ludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKK3sKKwlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXQoYWRkciwgbnVtcGFnZXMsCisJCQkJICAgIF9fcGdwcm90KF9QQUdFX0NBQ0hFX1dDKSk7Cit9CisKK2ludCBzZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKQoreworCWlmICghcGF0X3djX2VuYWJsZWQpCisJCXJldHVybiBzZXRfbWVtb3J5X3VjKGFkZHIsIG51bXBhZ2VzKTsKKworCWlmIChyZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIG51bXBhZ2VzICogUEFHRV9TSVpFLAorCQlfUEFHRV9DQUNIRV9XQywgTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIF9zZXRfbWVtb3J5X3djKGFkZHIsIG51bXBhZ2VzKTsKK30KK0VYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yyk7CisKK2ludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9jbGVhcihhZGRyLCBudW1wYWdlcywKLQkJCQkgICAgICBfX3BncHJvdChfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKTsKKwkJCQkgICAgICBfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSk7Cit9CisKK2ludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKQoreworCWZyZWVfbWVtdHlwZShhZGRyLCBhZGRyICsgbnVtcGFnZXMgKiBQQUdFX1NJWkUpOworCisJcmV0dXJuIF9zZXRfbWVtb3J5X3diKGFkZHIsIG51bXBhZ2VzKTsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yik7CiAKQEAgLTc4Niw2ICs4NTMsMTIgQEAKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9jbGVhcihhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCkpOwogfQogCitpbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKK3sKKwlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwKKwkJCQkJX19wZ3Byb3QoMCksIDEpOworfQorCiBpbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtODQxLDcgKzkxNCw3IEBACiAJCQkJLm1hc2tfc2V0ID0gX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXKSwKIAkJCQkubWFza19jbHIgPSBfX3BncHJvdCgwKX07CiAKLQlyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoJmNwYSk7CisJcmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZjcGEsIDEpOwogfQogCiBzdGF0aWMgaW50IF9fc2V0X3BhZ2VzX25wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCkBAIC04NTEsNyArOTI0LDcgQEAKIAkJCQkubWFza19zZXQgPSBfX3BncHJvdCgwKSwKIAkJCQkubWFza19jbHIgPSBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcpfTsKIAotCXJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmY3BhKTsKKwlyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoJmNwYSwgMSk7CiB9CiAKIHZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKQpAQCAtODkyLDEwICs5NjUsNjYgQEAKIAkgKiBUcnkgdG8gcmVmaWxsIHRoZSBwYWdlIHBvb2wgaGVyZS4gV2UgY2FuIGRvIHRoaXMgb25seSBhZnRlcgogCSAqIHRoZSB0bGIgZmx1c2guCiAJICovCi0JY3BhX2ZpbGxfcG9vbCgpOworCWNwYV9maWxsX3Bvb2woTlVMTCk7CiB9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBpbnQgZHBhX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXNlcV9wdXRzKG0sICJERUJVR19QQUdFQUxMT0NcbiIpOworCXNlcV9wcmludGYobSwgInBvb2xfc2l6ZSAgICAgOiAlbHVcbiIsIHBvb2xfc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAicG9vbF9wYWdlcyAgICA6ICVsdVxuIiwgcG9vbF9wYWdlcyk7CisJc2VxX3ByaW50ZihtLCAicG9vbF9sb3cgICAgICA6ICVsdVxuIiwgcG9vbF9sb3cpOworCXNlcV9wcmludGYobSwgInBvb2xfdXNlZCAgICAgOiAlbHVcbiIsIHBvb2xfdXNlZCk7CisJc2VxX3ByaW50ZihtLCAicG9vbF9mYWlsZWQgICA6ICVsdVxuIiwgcG9vbF9mYWlsZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHBhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIGRwYV9zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHBhX2ZvcHMgPSB7CisJLm9wZW4JCT0gZHBhX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK2ludCBfX2luaXQgZGVidWdfcGFnZWFsbG9jX3Byb2NfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRlOworCisJZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZWJ1Z19wYWdlYWxsb2MiLCAwNjAwLCBOVUxMLCBOVUxMLAorCQkJCSAmZHBhX2ZvcHMpOworCWlmICghZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CitfX2luaXRjYWxsKGRlYnVnX3BhZ2VhbGxvY19wcm9jX2luaXQpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKworYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGludCBsZXZlbDsKKwlwdGVfdCAqcHRlOworCisJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlwdGUgPSBsb29rdXBfYWRkcmVzcygodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSksICZsZXZlbCk7CisJcmV0dXJuIChwdGVfdmFsKCpwdGUpICYgX1BBR0VfUFJFU0VOVCk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19QQUdFQUxMT0MgKi8KKwogLyoKICAqIFRoZSB0ZXN0Y2FzZXMgdXNlIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGRuJ3QKICAqIGJlIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gSW5jbHVkZSB0aGVzZSBkaXJlY3RseSBoZXJlLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmMwZjYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vcGF0LmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBIYW5kbGUgY2FjaGluZyBhdHRyaWJ1dGVzIGluIHBhZ2UgdGFibGVzIChQQVQpCisgKgorICogQXV0aG9yczogVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+CisgKiAgICAgICAgICBTdXJlc2ggQiBTaWRkaGEgPHN1cmVzaC5iLnNpZGRoYUBpbnRlbC5jb20+CisgKgorICogTG9vc2VseSBiYXNlZCBvbiBlYXJsaWVyIFBBVCBwYXRjaHNldCBmcm9tIEVyaWMgQmllZGVybWFuIGFuZCBBbmRpIEtsZWVuLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhdC5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZmNudGwuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorCitpbnQgcGF0X3djX2VuYWJsZWQgPSAxOworCitzdGF0aWMgdTY0IF9fcmVhZF9tb3N0bHkgYm9vdF9wYXRfc3RhdGU7CisKK3N0YXRpYyBpbnQgbm9wYXQoY2hhciAqc3RyKQoreworCXBhdF93Y19lbmFibGVkID0gMDsKKwlwcmludGsoS0VSTl9JTkZPICJ4ODY6IFBBVCBzdXBwb3J0IGRpc2FibGVkLlxuIik7CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub3BhdCIsIG5vcGF0KTsKKworc3RhdGljIGludCBwYXRfa25vd25fY3B1KHZvaWQpCit7CisJaWYgKCFwYXRfd2NfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3B1X2hhc19wYXQpCisJCXJldHVybiAxOworCisJcGF0X3djX2VuYWJsZWQgPSAwOworCXByaW50ayhLRVJOX0lORk8gIkNQVSBhbmQvb3Iga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgUEFULlxuIik7CisJcmV0dXJuIDA7Cit9CisKK2VudW0geworCVBBVF9VQyA9IDAsCQkvKiB1bmNhY2hlZCAqLworCVBBVF9XQyA9IDEsCQkvKiBXcml0ZSBjb21iaW5pbmcgKi8KKwlQQVRfV1QgPSA0LAkJLyogV3JpdGUgVGhyb3VnaCAqLworCVBBVF9XUCA9IDUsCQkvKiBXcml0ZSBQcm90ZWN0ZWQgKi8KKwlQQVRfV0IgPSA2LAkJLyogV3JpdGUgQmFjayAoZGVmYXVsdCkgKi8KKwlQQVRfVUNfTUlOVVMgPSA3LAkvKiBVQywgYnV0IGNhbiBiZSBvdmVycmlkZW4gYnkgTVRSUiAqLworfTsKKworI2RlZmluZSBQQVQoeCx5KQkoKHU2NClQQVRfICMjIHkgPDwgKCh4KSo4KSkKKwordm9pZCBwYXRfaW5pdCh2b2lkKQoreworCXU2NCBwYXQ7CisKKyNpZm5kZWYgQ09ORklHX1g4Nl9QQVQKKwlub3BhdChOVUxMKTsKKyNlbmRpZgorCisJLyogQm9vdCBDUFUgZW5hYmxlcyBQQVQgYmFzZWQgb24gQ1BVIGZlYXR1cmUgKi8KKwlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiAhcGF0X2tub3duX2NwdSgpKQorCQlyZXR1cm47CisKKwkvKiBBUHMgZW5hYmxlIFBBVCBpZmYgYm9vdCBDUFUgaGFzIGVuYWJsZWQgaXQgYmVmb3JlICovCisJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAmJiAhcGF0X3djX2VuYWJsZWQpCisJCXJldHVybjsKKworCS8qIFNldCBQV1QgdG8gV3JpdGUtQ29tYmluaW5nLiBBbGwgb3RoZXIgYml0cyBzdGF5IHRoZSBzYW1lICovCisJLyoKKwkgKiBQVEUgZW5jb2RpbmcgdXNlZCBpbiBMaW51eDoKKwkgKiAgICAgIFBBVAorCSAqICAgICAgfFBDRAorCSAqICAgICAgfHxQV1QKKwkgKiAgICAgIHx8fAorCSAqICAgICAgMDAwIFdCCQlfUEFHRV9DQUNIRV9XQgorCSAqICAgICAgMDAxIFdDCQlfUEFHRV9DQUNIRV9XQworCSAqICAgICAgMDEwIFVDLQkJX1BBR0VfQ0FDSEVfVUNfTUlOVVMKKwkgKiAgICAgIDAxMSBVQwkJX1BBR0VfQ0FDSEVfVUMKKwkgKiBQQVQgYml0IHVudXNlZAorCSAqLworCXBhdCA9IFBBVCgwLFdCKSB8IFBBVCgxLFdDKSB8IFBBVCgyLFVDX01JTlVTKSB8IFBBVCgzLFVDKSB8CisJICAgICAgUEFUKDQsV0IpIHwgUEFUKDUsV0MpIHwgUEFUKDYsVUNfTUlOVVMpIHwgUEFUKDcsVUMpOworCisJLyogQm9vdCBDUFUgY2hlY2sgKi8KKwlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSkgeworCQlyZG1zcmwoTVNSX0lBMzJfQ1JfUEFULCBib290X3BhdF9zdGF0ZSk7CisJfQorCisJd3Jtc3JsKE1TUl9JQTMyX0NSX1BBVCwgcGF0KTsKKwlwcmludGsoS0VSTl9JTkZPICJ4ODYgUEFUIGVuYWJsZWQ6IGNwdSAlZCwgb2xkIDB4JUx4LCBuZXcgMHglTHhcbiIsCisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7Cit9CisKKyN1bmRlZiBQQVQKKworc3RhdGljIGNoYXIgKmNhdHRyX25hbWUodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzd2l0Y2ggKGZsYWdzICYgX1BBR0VfQ0FDSEVfTUFTSykgeworCQljYXNlIF9QQUdFX0NBQ0hFX1VDOgkJcmV0dXJuICJ1bmNhY2hlZCI7CisJCWNhc2UgX1BBR0VfQ0FDSEVfVUNfTUlOVVM6CXJldHVybiAidW5jYWNoZWQtbWludXMiOworCQljYXNlIF9QQUdFX0NBQ0hFX1dCOgkJcmV0dXJuICJ3cml0ZS1iYWNrIjsKKwkJY2FzZSBfUEFHRV9DQUNIRV9XQzoJCXJldHVybiAid3JpdGUtY29tYmluaW5nIjsKKwkJZGVmYXVsdDoJCQlyZXR1cm4gImJyb2tlbiI7CisJfQorfQorCisvKgorICogVGhlIGdsb2JhbCBtZW10eXBlIGxpc3Qga2VlcHMgdHJhY2sgb2YgbWVtb3J5IHR5cGUgZm9yIHNwZWNpZmljCisgKiBwaHlzaWNhbCBtZW1vcnkgYXJlYXMuIENvbmZsaWN0aW5nIG1lbW9yeSB0eXBlcyBpbiBkaWZmZXJlbnQKKyAqIG1hcHBpbmdzIGNhbiBjYXVzZSBDUFUgY2FjaGUgY29ycnVwdGlvbi4gVG8gYXZvaWQgdGhpcyB3ZSBrZWVwIHRyYWNrLgorICoKKyAqIFRoZSBsaXN0IGlzIHNvcnRlZCBiYXNlZCBvbiBzdGFydGluZyBhZGRyZXNzIGFuZCBjYW4gY29udGFpbiBtdWx0aXBsZQorICogZW50cmllcyBmb3IgZWFjaCBhZGRyZXNzICh0aGlzIGFsbG93cyByZWZlcmVuY2UgY291bnRpbmcgZm9yIG92ZXJsYXBwaW5nCisgKiBhcmVhcykuIEFsbCB0aGUgYWxpYXNlcyBoYXZlIHRoZSBzYW1lIGNhY2hlIGF0dHJpYnV0ZXMgb2YgY291cnNlLgorICogWmVybyBhdHRyaWJ1dGVzIGFyZSByZXByZXNlbnRlZCBhcyBob2xlcy4KKyAqCisgKiBDdXJyZW50bHkgdGhlIGRhdGEgc3RydWN0dXJlIGlzIGEgbGlzdCBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWFwcGluZ3MKKyAqIGFyZSBleHBlY3RlZCB0byBiZSByZWxhdGl2ZWx5IHNtYWxsLiBJZiB0aGlzIHNob3VsZCBiZSBhIHByb2JsZW0KKyAqIGl0IGNvdWxkIGJlIGNoYW5nZWQgdG8gYSByYnRyZWUgb3Igc2ltaWxhci4KKyAqCisgKiBtZW10eXBlX2xvY2sgcHJvdGVjdHMgdGhlIHdob2xlIGxpc3QuCisgKi8KKworc3RydWN0IG1lbXR5cGUgeworCXU2NCBzdGFydDsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGxvbmcgdHlwZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5kOworfTsKKworc3RhdGljIExJU1RfSEVBRChtZW10eXBlX2xpc3QpOworc3RhdGljIERFRklORV9TUElOTE9DSyhtZW10eXBlX2xvY2spOyAJLyogcHJvdGVjdHMgbWVtdHlwZSBsaXN0ICovCisKKy8qCisgKiBEb2VzIGludGVyc2VjdGlvbiBvZiBQQVQgbWVtb3J5IHR5cGUgYW5kIE1UUlIgbWVtb3J5IHR5cGUgYW5kIHJldHVybnMKKyAqIHRoZSByZXN1bHRpbmcgbWVtb3J5IHR5cGUgYXMgUEFUIHVuZGVyc3RhbmRzIGl0LgorICogKFR5cGUgaW4gcGF0IGFuZCBtdHJyIHdpbGwgbm90IGhhdmUgc2FtZSB2YWx1ZSkKKyAqIFRoZSBpbnRlcnNlY3Rpb24gaXMgYmFzZWQgb24gIkVmZmVjdGl2ZSBNZW1vcnkgVHlwZSIgdGFibGVzIGluIElBLTMyCisgKiBTRE0gdm9sIDNhCisgKi8KK3N0YXRpYyBpbnQgcGF0X3hfbXRycl90eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgbG9uZyBwcm90LAorCQkJCXVuc2lnbmVkIGxvbmcgKnJldF9wcm90KQoreworCXVuc2lnbmVkIGxvbmcgcGF0X3R5cGU7CisJdTggbXRycl90eXBlOworCisJbXRycl90eXBlID0gbXRycl90eXBlX2xvb2t1cChzdGFydCwgZW5kKTsKKwlpZiAobXRycl90eXBlID09IDB4RkYpIHsJCS8qIE1UUlIgbm90IGVuYWJsZWQgKi8KKwkJKnJldF9wcm90ID0gcHJvdDsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChtdHJyX3R5cGUgPT0gMHhGRSkgewkJLyogTVRSUiBtYXRjaCBlcnJvciAqLworCQkqcmV0X3Byb3QgPSBfUEFHRV9DQUNIRV9VQzsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobXRycl90eXBlICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFICYmCisJICAgIG10cnJfdHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLICYmCisJICAgIG10cnJfdHlwZSAhPSBNVFJSX1RZUEVfV1JDT01CKSB7CS8qIE1UUlIgdHlwZSB1bmhhbmRsZWQgKi8KKwkJKnJldF9wcm90ID0gX1BBR0VfQ0FDSEVfVUM7CisJCXJldHVybiAtMTsKKwl9CisKKwlwYXRfdHlwZSA9IHByb3QgJiBfUEFHRV9DQUNIRV9NQVNLOworCXByb3QgJj0gKH5fUEFHRV9DQUNIRV9NQVNLKTsKKworCS8qIEN1cnJlbnRseSBkb2luZyBpbnRlcnNlY3Rpb24gYnkgaGFuZC4gT3B0aW1pemUgaXQgbGF0ZXIuICovCisJaWYgKHBhdF90eXBlID09IF9QQUdFX0NBQ0hFX1dDKSB7CisJCSpyZXRfcHJvdCA9IHByb3QgfCBfUEFHRV9DQUNIRV9XQzsKKwl9IGVsc2UgaWYgKHBhdF90eXBlID09IF9QQUdFX0NBQ0hFX1VDX01JTlVTKSB7CisJCSpyZXRfcHJvdCA9IHByb3QgfCBfUEFHRV9DQUNIRV9VQ19NSU5VUzsKKwl9IGVsc2UgaWYgKHBhdF90eXBlID09IF9QQUdFX0NBQ0hFX1VDIHx8CisJICAgICAgICAgICBtdHJyX3R5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpIHsKKwkJKnJldF9wcm90ID0gcHJvdCB8IF9QQUdFX0NBQ0hFX1VDOworCX0gZWxzZSBpZiAobXRycl90eXBlID09IE1UUlJfVFlQRV9XUkNPTUIpIHsKKwkJKnJldF9wcm90ID0gcHJvdCB8IF9QQUdFX0NBQ0hFX1dDOworCX0gZWxzZSB7CisJCSpyZXRfcHJvdCA9IHByb3QgfCBfUEFHRV9DQUNIRV9XQjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJlc2VydmVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQsIHVuc2lnbmVkIGxvbmcgcmVxX3R5cGUsCisJCQl1bnNpZ25lZCBsb25nICpyZXRfdHlwZSkKK3sKKwlzdHJ1Y3QgbWVtdHlwZSAqbmV3X2VudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgbWVtdHlwZSAqcGFyc2U7CisJdW5zaWduZWQgbG9uZyBhY3R1YWxfdHlwZTsKKwlpbnQgZXJyID0gMDsKKworCS8qIE9ubHkgdHJhY2sgd2hlbiBwYXRfd2NfZW5hYmxlZCAqLworCWlmICghcGF0X3djX2VuYWJsZWQpIHsKKwkJaWYgKHJldF90eXBlKQorCQkJKnJldF90eXBlID0gcmVxX3R5cGU7CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTG93IElTQSByZWdpb24gaXMgYWx3YXlzIG1hcHBlZCBXQiBpbiBwYWdlIHRhYmxlLiBObyBuZWVkIHRvIHRyYWNrICovCisJaWYgKHN0YXJ0ID49IElTQV9TVEFSVF9BRERSRVNTICYmIChlbmQgLSAxKSA8PSBJU0FfRU5EX0FERFJFU1MpIHsKKwkJaWYgKHJldF90eXBlKQorCQkJKnJldF90eXBlID0gX1BBR0VfQ0FDSEVfV0I7CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxX3R5cGUgJj0gX1BBR0VfQ0FDSEVfTUFTSzsKKwllcnIgPSBwYXRfeF9tdHJyX3R5cGUoc3RhcnQsIGVuZCwgcmVxX3R5cGUsICZhY3R1YWxfdHlwZSk7CisJaWYgKGVycikgeworCQlpZiAocmV0X3R5cGUpCisJCQkqcmV0X3R5cGUgPSBhY3R1YWxfdHlwZTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluZXdfZW50cnkgID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lbXR5cGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZXdfZW50cnktPnN0YXJ0ID0gc3RhcnQ7CisJbmV3X2VudHJ5LT5lbmQgPSBlbmQ7CisJbmV3X2VudHJ5LT50eXBlID0gYWN0dWFsX3R5cGU7CisKKwlpZiAocmV0X3R5cGUpCisJCSpyZXRfdHlwZSA9IGFjdHVhbF90eXBlOworCisJc3Bpbl9sb2NrKCZtZW10eXBlX2xvY2spOworCisJLyogU2VhcmNoIGZvciBleGlzdGluZyBtYXBwaW5nIHRoYXQgb3ZlcmxhcHMgdGhlIGN1cnJlbnQgcmFuZ2UgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcnNlLCAmbWVtdHlwZV9saXN0LCBuZCkgeworCQlzdHJ1Y3QgbWVtdHlwZSAqc2F2ZWRfcHRyOworCisJCWlmIChwYXJzZS0+c3RhcnQgPj0gZW5kKSB7CisJCQlwcmludGsoIk5ldyBFbnRyeVxuIik7CisJCQlsaXN0X2FkZCgmbmV3X2VudHJ5LT5uZCwgcGFyc2UtPm5kLnByZXYpOworCQkJbmV3X2VudHJ5ID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHN0YXJ0IDw9IHBhcnNlLT5zdGFydCAmJiBlbmQgPj0gcGFyc2UtPnN0YXJ0KSB7CisJCQlpZiAoYWN0dWFsX3R5cGUgIT0gcGFyc2UtPnR5cGUgJiYgcmV0X3R5cGUpIHsKKwkJCQlhY3R1YWxfdHlwZSA9IHBhcnNlLT50eXBlOworCQkJCSpyZXRfdHlwZSA9IGFjdHVhbF90eXBlOworCQkJCW5ld19lbnRyeS0+dHlwZSA9IGFjdHVhbF90eXBlOworCQkJfQorCisJCQlpZiAoYWN0dWFsX3R5cGUgIT0gcGFyc2UtPnR5cGUpIHsKKwkJCQlwcmludGsoCisJCUtFUk5fSU5GTyAiJXM6JWQgY29uZmxpY3RpbmcgbWVtb3J5IHR5cGVzICVMeC0lTHggJXM8LT4lc1xuIiwKKwkJCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCQlzdGFydCwgZW5kLAorCQkJCQljYXR0cl9uYW1lKGFjdHVhbF90eXBlKSwKKwkJCQkJY2F0dHJfbmFtZShwYXJzZS0+dHlwZSkpOworCQkJCWVyciA9IC1FQlVTWTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2F2ZWRfcHRyID0gcGFyc2U7CisJCQkvKgorCQkJICogQ2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhlIHJlcXVlc3Qgb3ZlcmxhcHMgbW9yZQorCQkJICogdGhhbiBvbmUgZW50cnkgaW4gdGhlIGxpc3QKKwkJCSAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwYXJzZSwgJm1lbXR5cGVfbGlzdCwgbmQpIHsKKwkJCQlpZiAoZW5kIDw9IHBhcnNlLT5zdGFydCkgeworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoYWN0dWFsX3R5cGUgIT0gcGFyc2UtPnR5cGUpIHsKKwkJCQkJcHJpbnRrKAorCQlLRVJOX0lORk8gIiVzOiVkIGNvbmZsaWN0aW5nIG1lbW9yeSB0eXBlcyAlTHgtJUx4ICVzPC0+JXNcbiIsCisJCQkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQkJCQlzdGFydCwgZW5kLAorCQkJCQkJY2F0dHJfbmFtZShhY3R1YWxfdHlwZSksCisJCQkJCQljYXR0cl9uYW1lKHBhcnNlLT50eXBlKSk7CisJCQkJCWVyciA9IC1FQlVTWTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoZXJyKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXByaW50aygiT3ZlcmxhcCBhdCAweCVMeC0weCVMeFxuIiwKKwkJCSAgICAgICBzYXZlZF9wdHItPnN0YXJ0LCBzYXZlZF9wdHItPmVuZCk7CisJCQkvKiBObyBjb25mbGljdC4gR28gYWhlYWQgYW5kIGFkZCB0aGlzIG5ldyBlbnRyeSAqLworCQkJbGlzdF9hZGQoJm5ld19lbnRyeS0+bmQsIHNhdmVkX3B0ci0+bmQucHJldik7CisJCQluZXdfZW50cnkgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc3RhcnQgPCBwYXJzZS0+ZW5kKSB7CisJCQlpZiAoYWN0dWFsX3R5cGUgIT0gcGFyc2UtPnR5cGUgJiYgcmV0X3R5cGUpIHsKKwkJCQlhY3R1YWxfdHlwZSA9IHBhcnNlLT50eXBlOworCQkJCSpyZXRfdHlwZSA9IGFjdHVhbF90eXBlOworCQkJCW5ld19lbnRyeS0+dHlwZSA9IGFjdHVhbF90eXBlOworCQkJfQorCisJCQlpZiAoYWN0dWFsX3R5cGUgIT0gcGFyc2UtPnR5cGUpIHsKKwkJCQlwcmludGsoCisJCUtFUk5fSU5GTyAiJXM6JWQgY29uZmxpY3RpbmcgbWVtb3J5IHR5cGVzICVMeC0lTHggJXM8LT4lc1xuIiwKKwkJCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCQlzdGFydCwgZW5kLAorCQkJCQljYXR0cl9uYW1lKGFjdHVhbF90eXBlKSwKKwkJCQkJY2F0dHJfbmFtZShwYXJzZS0+dHlwZSkpOworCQkJCWVyciA9IC1FQlVTWTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2F2ZWRfcHRyID0gcGFyc2U7CisJCQkvKgorCQkJICogQ2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhlIHJlcXVlc3Qgb3ZlcmxhcHMgbW9yZQorCQkJICogdGhhbiBvbmUgZW50cnkgaW4gdGhlIGxpc3QKKwkJCSAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwYXJzZSwgJm1lbXR5cGVfbGlzdCwgbmQpIHsKKwkJCQlpZiAoZW5kIDw9IHBhcnNlLT5zdGFydCkgeworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoYWN0dWFsX3R5cGUgIT0gcGFyc2UtPnR5cGUpIHsKKwkJCQkJcHJpbnRrKAorCQlLRVJOX0lORk8gIiVzOiVkIGNvbmZsaWN0aW5nIG1lbW9yeSB0eXBlcyAlTHgtJUx4ICVzPC0+JXNcbiIsCisJCQkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQkJCQlzdGFydCwgZW5kLAorCQkJCQkJY2F0dHJfbmFtZShhY3R1YWxfdHlwZSksCisJCQkJCQljYXR0cl9uYW1lKHBhcnNlLT50eXBlKSk7CisJCQkJCWVyciA9IC1FQlVTWTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoZXJyKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXByaW50aygiT3ZlcmxhcCBhdCAweCVMeC0weCVMeFxuIiwKKwkJCSAgICAgICBzYXZlZF9wdHItPnN0YXJ0LCBzYXZlZF9wdHItPmVuZCk7CisJCQkvKiBObyBjb25mbGljdC4gR28gYWhlYWQgYW5kIGFkZCB0aGlzIG5ldyBlbnRyeSAqLworCQkJbGlzdF9hZGQoJm5ld19lbnRyeS0+bmQsICZzYXZlZF9wdHItPm5kKTsKKwkJCW5ld19lbnRyeSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKAorCSJyZXNlcnZlX21lbXR5cGUgZmFpbGVkIDB4JUx4LTB4JUx4LCB0cmFjayAlcywgcmVxICVzXG4iLAorCQkJc3RhcnQsIGVuZCwgY2F0dHJfbmFtZShuZXdfZW50cnktPnR5cGUpLAorCQkJY2F0dHJfbmFtZShyZXFfdHlwZSkpOworCQlrZnJlZShuZXdfZW50cnkpOworCQlzcGluX3VubG9jaygmbWVtdHlwZV9sb2NrKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobmV3X2VudHJ5KSB7CisJCS8qIE5vIGNvbmZsaWN0LiBOb3QgeWV0IGFkZGVkIHRvIHRoZSBsaXN0LiBBZGQgdG8gdGhlIHRhaWwgKi8KKwkJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5uZCwgJm1lbXR5cGVfbGlzdCk7CisJCXByaW50aygiTmV3IEVudHJ5XG4iKTsKKyAgCX0KKworCWlmIChyZXRfdHlwZSkgeworCQlwcmludGsoCisJInJlc2VydmVfbWVtdHlwZSBhZGRlZCAweCVMeC0weCVMeCwgdHJhY2sgJXMsIHJlcSAlcywgcmV0ICVzXG4iLAorCQkJc3RhcnQsIGVuZCwgY2F0dHJfbmFtZShhY3R1YWxfdHlwZSksCisJCQljYXR0cl9uYW1lKHJlcV90eXBlKSwgY2F0dHJfbmFtZSgqcmV0X3R5cGUpKTsKKwl9IGVsc2UgeworCQlwcmludGsoCisJInJlc2VydmVfbWVtdHlwZSBhZGRlZCAweCVMeC0weCVMeCwgdHJhY2sgJXMsIHJlcSAlc1xuIiwKKwkJCXN0YXJ0LCBlbmQsIGNhdHRyX25hbWUoYWN0dWFsX3R5cGUpLAorCQkJY2F0dHJfbmFtZShyZXFfdHlwZSkpOworCX0KKworCXNwaW5fdW5sb2NrKCZtZW10eXBlX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKK2ludCBmcmVlX21lbXR5cGUodTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCXN0cnVjdCBtZW10eXBlICptbDsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCS8qIE9ubHkgdHJhY2sgd2hlbiBwYXRfd2NfZW5hYmxlZCAqLworCWlmICghcGF0X3djX2VuYWJsZWQpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTG93IElTQSByZWdpb24gaXMgYWx3YXlzIG1hcHBlZCBXQi4gTm8gbmVlZCB0byB0cmFjayAqLworCWlmIChzdGFydCA+PSBJU0FfU1RBUlRfQUREUkVTUyAmJiBlbmQgPD0gSVNBX0VORF9BRERSRVNTKSB7CisJCXJldHVybiAwOworCX0KKworCXNwaW5fbG9jaygmbWVtdHlwZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1sLCAmbWVtdHlwZV9saXN0LCBuZCkgeworCQlpZiAobWwtPnN0YXJ0ID09IHN0YXJ0ICYmIG1sLT5lbmQgPT0gZW5kKSB7CisJCQlsaXN0X2RlbCgmbWwtPm5kKTsKKwkJCWtmcmVlKG1sKTsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmbWVtdHlwZV9sb2NrKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVkIGZyZWVpbmcgaW52YWxpZCBtZW10eXBlICVMeC0lTHhcbiIsCisJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHN0YXJ0LCBlbmQpOworCX0KKworCXByaW50ayggImZyZWVfbWVtdHlwZSByZXF1ZXN0IDB4JUx4LTB4JUx4XG4iLCBzdGFydCwgZW5kKTsKKwlyZXR1cm4gZXJyOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggNzNhYmE3MS4uNmZiOWU3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gveDg2L21tL3BndGFibGVfMzIuYwpAQCAtMSw3ICsxLDMgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9pMzg2L21tL3BndGFibGUuYwotICovCi0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0zNiw3ICszMiw2IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW0taW5mbzpcbiIpOwogCXNob3dfZnJlZV9hcmVhcygpOwotCXByaW50ayhLRVJOX0lORk8gIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElGVC0xMCkpOwogCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQlwZ2RhdF9yZXNpemVfbG9jayhwZ2RhdCwgJmZsYWdzKTsKIAkJZm9yIChpID0gMDsgaSA8IHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7ICsraSkgewpAQCAtMzQyLDEyICszMzcsMTYgQEAKIAogcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlwZ2RfdCAqcGdkID0gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIHBnZF9jdG9yKTsKKwlwZ2RfdCAqcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKIAotCW1tLT5wZ2QgPSBwZ2Q7CQkvKiBzbyB0aGF0IGFsbG9jX3BkIGNhbiB1c2UgaXQgKi8KKwkvKiBzbyB0aGF0IGFsbG9jX3BkIGNhbiB1c2UgaXQgKi8KKwltbS0+cGdkID0gcGdkOworCWlmIChwZ2QpCisJCXBnZF9jdG9yKHBnZCk7CiAKIAlpZiAocGdkICYmICFwZ2RfcHJlcG9wdWxhdGVfcG1kKG1tLCBwZ2QpKSB7Ci0JCXF1aWNrbGlzdF9mcmVlKDAsIHBnZF9kdG9yLCBwZ2QpOworCQlwZ2RfZHRvcihwZ2QpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdkKTsKIAkJcGdkID0gTlVMTDsKIAl9CiAKQEAgLTM1NywxMiArMzU2LDggQEAKIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCiB7CiAJcGdkX21vcF91cF9wbWRzKG1tLCBwZ2QpOwotCXF1aWNrbGlzdF9mcmVlKDAsIHBnZF9kdG9yLCBwZ2QpOwotfQotCi12b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKQotewotCXF1aWNrbGlzdF90cmltKDAsIHBnZF9kdG9yLCAyNSwgMTYpOworCXBnZF9kdG9yKHBnZCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBnZCk7CiB9CiAKIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnB0ZSkKQEAgLTM4MSwzICszNzYsMTAgQEAKIH0KIAogI2VuZGlmCisKK2ludCBwbWRfYmFkKHBtZF90IHBtZCkKK3sKKwlXQVJOX09OX09OQ0UocG1kX2JhZF92MShwbWQpICE9IHBtZF9iYWRfdjIocG1kKSk7CisKKwlyZXR1cm4gcG1kX2JhZF92MShwbWQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc3JhdF82NC5jIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCmluZGV4IGVjZDkxZWEuLmZiNDNkODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3NyYXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KIAogaW50IGFjcGlfbnVtYSBfX2luaXRkYXRhOwogCkBAIC0zMSw2ICszMiwxMCBAQAogc3RhdGljIGludCBmb3VuZF9hZGRfYXJlYSBfX2luaXRkYXRhOwogaW50IGhvdGFkZF9wZXJjZW50IF9faW5pdGRhdGEgPSAwOwogCitzdGF0aWMgaW50IG51bV9ub2RlX21lbWJsa3MgX19pbml0ZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgbm9kZV9tZW1ibGtfcmFuZ2VbTlJfTk9ERV9NRU1CTEtTXSBfX2luaXRkYXRhOworc3RhdGljIGludCBtZW1ibGtfbm9kZWlkW05SX05PREVfTUVNQkxLU10gX19pbml0ZGF0YTsKKwogLyogVG9vIHNtYWxsIG5vZGVzIGNvbmZ1c2UgdGhlIFZNIGJhZGx5LiBVc3VhbGx5IHRoZXkgcmVzdWx0CiAgICBmcm9tIEJJT1MgYnVncy4gKi8KICNkZWZpbmUgTk9ERV9NSU5fU0laRSAoNCoxMDI0KjEwMjQpCkBAIC00MCwxNyArNDUsMTcgQEAKIAlyZXR1cm4gYWNwaV9tYXBfcHhtX3RvX25vZGUocHhtKTsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgY29uZmxpY3Rpbmdfbm9kZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgX19pbml0IGludCBjb25mbGljdGluZ19tZW1ibGtzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWludCBpOwotCWZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpIHsKLQkJc3RydWN0IGJvb3Rub2RlICpuZCA9ICZub2Rlc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX25vZGVfbWVtYmxrczsgaSsrKSB7CisJCXN0cnVjdCBib290bm9kZSAqbmQgPSAmbm9kZV9tZW1ibGtfcmFuZ2VbaV07CiAJCWlmIChuZC0+c3RhcnQgPT0gbmQtPmVuZCkKIAkJCWNvbnRpbnVlOwogCQlpZiAobmQtPmVuZCA+IHN0YXJ0ICYmIG5kLT5zdGFydCA8IGVuZCkKLQkJCXJldHVybiBpOworCQkJcmV0dXJuIG1lbWJsa19ub2RlaWRbaV07CiAJCWlmIChuZC0+ZW5kID09IGVuZCAmJiBuZC0+c3RhcnQgPT0gc3RhcnQpCi0JCQlyZXR1cm4gaTsKKwkJCXJldHVybiBtZW1ibGtfbm9kZWlkW2ldOwogCX0KIAlyZXR1cm4gLTE7CiB9CkBAIC0xMzIsNyArMTM3LDYgQEAKIAlpbnQgcHhtLCBub2RlOwogCWludCBhcGljX2lkOwogCi0JYXBpY19pZCA9IHBhLT5hcGljX2lkOwogCWlmIChzcmF0X2Rpc2FibGVkKCkpCiAJCXJldHVybjsKIAlpZiAocGEtPmhlYWRlci5sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBhY3BpX3NyYXRfY3B1X2FmZmluaXR5KSkgewpAQCAtMTQ4LDYgKzE1MiwxMSBAQAogCQliYWRfc3JhdCgpOwogCQlyZXR1cm47CiAJfQorCisJaWYgKGlzX3V2X3N5c3RlbSgpKQorCQlhcGljX2lkID0gKHBhLT5hcGljX2lkIDw8IDgpIHwgcGEtPmxvY2FsX3NhcGljX2VpZDsKKwllbHNlCisJCWFwaWNfaWQgPSBwYS0+YXBpY19pZDsKIAlhcGljaWRfdG9fbm9kZVthcGljX2lkXSA9IG5vZGU7CiAJYWNwaV9udW1hID0gMTsKIAlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBQWE0gJXUgLT4gQVBJQyAldSAtPiBOb2RlICV1XG4iLApAQCAtMTY2LDcgKzE3NSw4IEBACiAgKiBCb3RoIFNQQVJTRSBhbmQgUkVTRVJWRSBuZWVkIG5vZGVzX2FkZCBpbmZvcm1hdGlvbi4KICAqIFRoaXMgY29kZSBzdXBwb3J0cyBvbmUgY29udGlndW91cyBob3QgYWRkIGFyZWEgcGVyIG5vZGUuCiAgKi8KLXN0YXRpYyBpbnQgcmVzZXJ2ZV9ob3RhZGQoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGludCBfX2luaXQKK3Jlc2VydmVfaG90YWRkKGludCBub2RlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIGVfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CkBAIC0yNTIsNyArMjYyLDcgQEAKIAkJYmFkX3NyYXQoKTsKIAkJcmV0dXJuOwogCX0KLQlpID0gY29uZmxpY3Rpbmdfbm9kZXMoc3RhcnQsIGVuZCk7CisJaSA9IGNvbmZsaWN0aW5nX21lbWJsa3Moc3RhcnQsIGVuZCk7CiAJaWYgKGkgPT0gbm9kZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSJTUkFUOiBXYXJuaW5nOiBQWE0gJWQgKCVseC0lbHgpIG92ZXJsYXBzIHdpdGggaXRzZWxmICglTHgtJUx4KVxuIiwKQEAgLTI3NywxMCArMjg3LDEwIEBACiAJCQluZC0+ZW5kID0gZW5kOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IE5vZGUgJXUgUFhNICV1ICVMeC0lTHhcbiIsIG5vZGUsIHB4bSwKLQkgICAgICAgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKLQllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKG5vZGUsIG5kLT5zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCQkJbmQtPmVuZCA+PiBQQUdFX1NISUZUKTsKKwlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBOb2RlICV1IFBYTSAldSAlbHgtJWx4XG4iLCBub2RlLCBweG0sCisJICAgICAgIHN0YXJ0LCBlbmQpOworCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMobm9kZSwgc3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJCQkgICAgIGVuZCA+PiBQQUdFX1NISUZUKTsKIAlwdXNoX25vZGVfYm91bmRhcmllcyhub2RlLCBuZC0+c3RhcnQgPj4gUEFHRV9TSElGVCwKIAkJCQkJCW5kLT5lbmQgPj4gUEFHRV9TSElGVCk7CiAKQEAgLTI5Miw2ICszMDIsMTEgQEAKIAkJaWYgKChuZC0+c3RhcnQgfCBuZC0+ZW5kKSA9PSAwKQogCQkJbm9kZV9jbGVhcihub2RlLCBub2Rlc19wYXJzZWQpOwogCX0KKworCW5vZGVfbWVtYmxrX3JhbmdlW251bV9ub2RlX21lbWJsa3NdLnN0YXJ0ID0gc3RhcnQ7CisJbm9kZV9tZW1ibGtfcmFuZ2VbbnVtX25vZGVfbWVtYmxrc10uZW5kID0gZW5kOworCW1lbWJsa19ub2RlaWRbbnVtX25vZGVfbWVtYmxrc10gPSBub2RlOworCW51bV9ub2RlX21lbWJsa3MrKzsKIH0KIAogLyogU2FuaXR5IGNoZWNrIHRvIGNhdGNoIG1vcmUgYmFkIFNSQVRzICh0aGV5IGFyZSBhbWF6aW5nbHkgY29tbW9uKS4KQEAgLTM2Miw3ICszNzcsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtbm9kZV9zaGlmdCA9IGNvbXB1dGVfaGFzaF9zaGlmdChub2RlcywgTUFYX05VTU5PREVTKTsKKwltZW1ub2RlX3NoaWZ0ID0gY29tcHV0ZV9oYXNoX3NoaWZ0KG5vZGVfbWVtYmxrX3JhbmdlLCBudW1fbm9kZV9tZW1ibGtzLAorCQkJCQkgICBtZW1ibGtfbm9kZWlkKTsKIAlpZiAobWVtbm9kZV9zaGlmdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgIlNSQVQ6IE5vIE5VTUEgbm9kZSBoYXNoIGZ1bmN0aW9uIGZvdW5kLiBDb250YWN0IG1haW50YWluZXJcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvaW5pdC5jCmluZGV4IDUzNDFkNDguLmNkZmU0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL2luaXQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9pbml0LmMKQEAgLTEwLDE4ICsxMCwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0gCi0vKiBXZSBzdXBwb3J0IENQVXMgdGhhdCBoYXZlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGxpa2UgdGhlIFBlbnRpdW0gUHJvCisKKy8qCisgKiBXZSBzdXBwb3J0IENQVXMgdGhhdCBoYXZlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGxpa2UgdGhlIFBlbnRpdW0gUHJvCiAgKiB3aXRoIHRoZSBOTUkgbW9kZSBkcml2ZXIuCiAgKi8KLSAKLWV4dGVybiBpbnQgb3Bfbm1pX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKiBvcHMpOwotZXh0ZXJuIGludCBvcF9ubWlfdGltZXJfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqIG9wcyk7CisKK2V4dGVybiBpbnQgb3Bfbm1pX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcyk7CitleHRlcm4gaW50IG9wX25taV90aW1lcl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpOwogZXh0ZXJuIHZvaWQgb3Bfbm1pX2V4aXQodm9pZCk7CiBleHRlcm4gdm9pZCB4ODZfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywgdW5zaWduZWQgaW50IGRlcHRoKTsKIAogCi1pbnQgX19pbml0IG9wcm9maWxlX2FyY2hfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqIG9wcykKK2ludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCiB7CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IDFmMTFjZjAuLmNjNDhkM2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJvcF94ODZfbW9kZWwuaCIKIAogc3RhdGljIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWw7Ci1zdGF0aWMgc3RydWN0IG9wX21zcnMgY3B1X21zcnNbTlJfQ1BVU107Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9sdnRwY1tOUl9DUFVTXTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgb3BfbXNycywgY3B1X21zcnMpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHNhdmVkX2x2dHBjKTsKIAogc3RhdGljIGludCBubWlfc3RhcnQodm9pZCk7CiBzdGF0aWMgdm9pZCBubWlfc3RvcCh2b2lkKTsKQEAgLTg5LDcgKzg5LDcgQEAKIAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSBESUVfTk1JOgotCQlpZiAobW9kZWwtPmNoZWNrX2N0cnMoYXJncy0+cmVncywgJmNwdV9tc3JzW2NwdV0pKQorCQlpZiAobW9kZWwtPmNoZWNrX2N0cnMoYXJncy0+cmVncywgJnBlcl9jcHUoY3B1X21zcnMsIGNwdSkpKQogCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMjYsNyArMTI2LDcgQEAKIHN0YXRpYyB2b2lkIG5taV9zYXZlX3JlZ2lzdGVycyh2b2lkICpkdW1teSkKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBvcF9tc3JzICptc3JzID0gJmNwdV9tc3JzW2NwdV07CisJc3RydWN0IG9wX21zcnMgKm1zcnMgPSAmcGVyX2NwdShjcHVfbXNycywgY3B1KTsKIAlubWlfY3B1X3NhdmVfcmVnaXN0ZXJzKG1zcnMpOwogfQogCkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogewogCWludCBpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWtmcmVlKGNwdV9tc3JzW2ldLmNvdW50ZXJzKTsKLQkJY3B1X21zcnNbaV0uY291bnRlcnMgPSBOVUxMOwotCQlrZnJlZShjcHVfbXNyc1tpXS5jb250cm9scyk7Ci0JCWNwdV9tc3JzW2ldLmNvbnRyb2xzID0gTlVMTDsKKwkJa2ZyZWUocGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpOworCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IE5VTEw7CisJCWtmcmVlKHBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzKTsKKwkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBOVUxMOwogCX0KIH0KIApAQCAtMTQ5LDEzICsxNDksMTUgQEAKIAogCWludCBpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWNwdV9tc3JzW2ldLmNvdW50ZXJzID0ga21hbGxvYyhjb3VudGVyc19zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjcHVfbXNyc1tpXS5jb3VudGVycykgeworCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IGttYWxsb2MoY291bnRlcnNfc2l6ZSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpIHsKIAkJCXN1Y2Nlc3MgPSAwOwogCQkJYnJlYWs7CiAJCX0KLQkJY3B1X21zcnNbaV0uY29udHJvbHMgPSBrbWFsbG9jKGNvbnRyb2xzX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWNwdV9tc3JzW2ldLmNvbnRyb2xzKSB7CisJCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzID0ga21hbGxvYyhjb250cm9sc19zaXplLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb250cm9scykgewogCQkJc3VjY2VzcyA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMTcwLDExICsxNzIsMTEgQEAKIHN0YXRpYyB2b2lkIG5taV9jcHVfc2V0dXAodm9pZCAqZHVtbXkpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3Qgb3BfbXNycyAqbXNycyA9ICZjcHVfbXNyc1tjcHVdOworCXN0cnVjdCBvcF9tc3JzICptc3JzID0gJnBlcl9jcHUoY3B1X21zcnMsIGNwdSk7CiAJc3Bpbl9sb2NrKCZvcHJvZmlsZWZzX2xvY2spOwogCW1vZGVsLT5zZXR1cF9jdHJzKG1zcnMpOwogCXNwaW5fdW5sb2NrKCZvcHJvZmlsZWZzX2xvY2spOwotCXNhdmVkX2x2dHBjW2NwdV0gPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7CisJcGVyX2NwdShzYXZlZF9sdnRwYywgY3B1KSA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKIH0KIApAQCAtMjAzLDEzICsyMDUsMTUgQEAKIAkgKi8KIAogCS8qIEFzc3VtZSBzYXZlZC9yZXN0b3JlZCBjb3VudGVycyBhcmUgdGhlIHNhbWUgb24gYWxsIENQVXMgKi8KLQltb2RlbC0+ZmlsbF9pbl9hZGRyZXNzZXMoJmNwdV9tc3JzWzBdKTsKKwltb2RlbC0+ZmlsbF9pbl9hZGRyZXNzZXMoJnBlcl9jcHUoY3B1X21zcnMsIDApKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgIT0gMCkgewotCQkJbWVtY3B5KGNwdV9tc3JzW2NwdV0uY291bnRlcnMsIGNwdV9tc3JzWzBdLmNvdW50ZXJzLAorCQkJbWVtY3B5KHBlcl9jcHUoY3B1X21zcnMsIGNwdSkuY291bnRlcnMsCisJCQkJcGVyX2NwdShjcHVfbXNycywgMCkuY291bnRlcnMsCiAJCQkJc2l6ZW9mKHN0cnVjdCBvcF9tc3IpICogbW9kZWwtPm51bV9jb3VudGVycyk7CiAKLQkJCW1lbWNweShjcHVfbXNyc1tjcHVdLmNvbnRyb2xzLCBjcHVfbXNyc1swXS5jb250cm9scywKKwkJCW1lbWNweShwZXJfY3B1KGNwdV9tc3JzLCBjcHUpLmNvbnRyb2xzLAorCQkJCXBlcl9jcHUoY3B1X21zcnMsIDApLmNvbnRyb2xzLAogCQkJCXNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJvbHMpOwogCQl9CiAKQEAgLTI0OSw3ICsyNTMsNyBAQAogewogCXVuc2lnbmVkIGludCB2OwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IG9wX21zcnMgKm1zcnMgPSAmY3B1X21zcnNbY3B1XTsKKwlzdHJ1Y3Qgb3BfbXNycyAqbXNycyA9ICZfX2dldF9jcHVfdmFyKGNwdV9tc3JzKTsKIAogCS8qIHJlc3RvcmluZyBBUElDX0xWVFBDIGNhbiB0cmlnZ2VyIGFuIGFwaWMgZXJyb3IgYmVjYXVzZSB0aGUgZGVsaXZlcnkKIAkgKiBtb2RlIGFuZCB2ZWN0b3IgbnIgY29tYmluYXRpb24gY2FuIGJlIGlsbGVnYWwuIFRoYXQncyBieSBkZXNpZ246IG9uCkBAIC0yNTgsMjMgKzI2MiwyNCBAQAogCSAqLwogCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwogCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgc2F2ZWRfbHZ0cGNbY3B1XSk7CisJYXBpY193cml0ZShBUElDX0xWVFBDLCBwZXJfY3B1KHNhdmVkX2x2dHBjLCBjcHUpKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2KTsKIAlubWlfcmVzdG9yZV9yZWdpc3RlcnMobXNycyk7CiB9CiAKIHN0YXRpYyB2b2lkIG5taV9zaHV0ZG93bih2b2lkKQogeworCXN0cnVjdCBvcF9tc3JzICptc3JzID0gJl9fZ2V0X2NwdV92YXIoY3B1X21zcnMpOwogCW5taV9lbmFibGVkID0gMDsKIAlvbl9lYWNoX2NwdShubWlfY3B1X3NodXRkb3duLCBOVUxMLCAwLCAxKTsKIAl1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcHJvZmlsZV9leGNlcHRpb25zX25iKTsKLQltb2RlbC0+c2h1dGRvd24oY3B1X21zcnMpOworCW1vZGVsLT5zaHV0ZG93bihtc3JzKTsKIAlmcmVlX21zcnMoKTsKIH0KIAogc3RhdGljIHZvaWQgbm1pX2NwdV9zdGFydCh2b2lkICpkdW1teSkKIHsKLQlzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqbXNycyA9ICZjcHVfbXNyc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICptc3JzID0gJl9fZ2V0X2NwdV92YXIoY3B1X21zcnMpOwogCW1vZGVsLT5zdGFydChtc3JzKTsKIH0KIApAQCAtMjg2LDcgKzI5MSw3IEBACiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfc3RvcCh2b2lkICpkdW1teSkKIHsKLQlzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqbXNycyA9ICZjcHVfbXNyc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICptc3JzID0gJl9fZ2V0X2NwdV92YXIoY3B1X21zcnMpOwogCW1vZGVsLT5zdG9wKG1zcnMpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMKaW5kZXggMTQxOGUzNi4uZTNlY2I3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYwpAQCAtMTcsMTQgKzE3LDE0IEBACiAjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotIAorCiBzdGF0aWMgaW50IHByb2ZpbGVfdGltZXJfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSAoc3RydWN0IGRpZV9hcmdzICopZGF0YTsKIAlpbnQgcmV0ID0gTk9USUZZX0RPTkU7CiAKLQlzd2l0Y2godmFsKSB7CisJc3dpdGNoICh2YWwpIHsKIAljYXNlIERJRV9OTUk6CiAJCW9wcm9maWxlX2FkZF9zYW1wbGUoYXJncy0+cmVncywgMCk7CiAJCXJldCA9IE5PVElGWV9TVE9QOwpAQCAtNTYsNyArNTYsNyBAQAogfQogCiAKLWludCBfX2luaXQgb3Bfbm1pX3RpbWVyX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKiBvcHMpCitpbnQgX19pbml0IG9wX25taV90aW1lcl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCiB7CiAJaWYgKChubWlfd2F0Y2hkb2cgIT0gTk1JX0lPX0FQSUMpIHx8IChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPD0gMCkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfYXRobG9uLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hdGhsb24uYwppbmRleCBjM2VlNDMzLi4zZDUzNDg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hdGhsb24uYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hdGhsb24uYwpAQCAtMSw0ICsxLDQgQEAKLS8qKgorLyoKICAqIEBmaWxlIG9wX21vZGVsX2F0aGxvbi5oCiAgKiBhdGhsb24gLyBLNyAvIEs4IC8gRmFtaWx5IDEwaCBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0aW9ucwogICoKQEAgLTE0LDI4ICsxNCwyOCBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgotIAorCiAjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCiAjaW5jbHVkZSAib3BfY291bnRlci5oIgogCiAjZGVmaW5lIE5VTV9DT1VOVEVSUyA0CiAjZGVmaW5lIE5VTV9DT05UUk9MUyA0CiAKLSNkZWZpbmUgQ1RSX0lTX1JFU0VSVkVEKG1zcnMsYykgKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciA/IDEgOiAwKQotI2RlZmluZSBDVFJfUkVBRChsLGgsbXNycyxjKSBkbyB7cmRtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAobCksIChoKSk7fSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSX1dSSVRFKGwsbXNycyxjKSBkbyB7d3Jtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAtKHVuc2lnbmVkIGludCkobCksIC0xKTt9IHdoaWxlICgwKQorI2RlZmluZSBDVFJfSVNfUkVTRVJWRUQobXNycywgYykgKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciA/IDEgOiAwKQorI2RlZmluZSBDVFJfUkVBRChsLCBoLCBtc3JzLCBjKSBkbyB7cmRtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAobCksIChoKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIENUUl9XUklURShsLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAtKHVuc2lnbmVkIGludCkobCksIC0xKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQogCi0jZGVmaW5lIENUUkxfSVNfUkVTRVJWRUQobXNycyxjKSAobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyID8gMSA6IDApCi0jZGVmaW5lIENUUkxfUkVBRChsLGgsbXNycyxjKSBkbyB7cmRtc3IobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyLCAobCksIChoKSk7fSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSTF9XUklURShsLGgsbXNycyxjKSBkbyB7d3Jtc3IobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyLCAobCksIChoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBjKSAobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyID8gMSA6IDApCisjZGVmaW5lIENUUkxfUkVBRChsLCBoLCBtc3JzLCBjKSBkbyB7cmRtc3IobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyLCAobCksIChoKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIENUUkxfV1JJVEUobCwgaCwgbXNycywgYykgZG8ge3dybXNyKG1zcnMtPmNvbnRyb2xzWyhjKV0uYWRkciwgKGwpLCAoaCkpOyB9IHdoaWxlICgwKQogI2RlZmluZSBDVFJMX1NFVF9BQ1RJVkUobikgKG4gfD0gKDE8PDIyKSkKICNkZWZpbmUgQ1RSTF9TRVRfSU5BQ1RJVkUobikgKG4gJj0gfigxPDwyMikpCiAjZGVmaW5lIENUUkxfQ0xFQVJfTE8oeCkgKHggJj0gKDE8PDIxKSkKICNkZWZpbmUgQ1RSTF9DTEVBUl9ISSh4KSAoeCAmPSAweGZmZmZmY2YwKQogI2RlZmluZSBDVFJMX1NFVF9FTkFCTEUodmFsKSAodmFsIHw9IDE8PDIwKQotI2RlZmluZSBDVFJMX1NFVF9VU1IodmFsLHUpICh2YWwgfD0gKCh1ICYgMSkgPDwgMTYpKQotI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCxrKSAodmFsIHw9ICgoayAmIDEpIDw8IDE3KSkKKyNkZWZpbmUgQ1RSTF9TRVRfVVNSKHZhbCwgdSkgKHZhbCB8PSAoKHUgJiAxKSA8PCAxNikpCisjZGVmaW5lIENUUkxfU0VUX0tFUk4odmFsLCBrKSAodmFsIHw9ICgoayAmIDEpIDw8IDE3KSkKICNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQogI2RlZmluZSBDVFJMX1NFVF9FVkVOVF9MT1codmFsLCBlKSAodmFsIHw9IChlICYgMHhmZikpCiAjZGVmaW5lIENUUkxfU0VUX0VWRU5UX0hJR0godmFsLCBlKSAodmFsIHw9ICgoZSA+PiA4KSAmIDB4ZikpCkBAIC00MywxOSArNDMsMTkgQEAKICNkZWZpbmUgQ1RSTF9TRVRfR1VFU1RfT05MWSh2YWwsIGgpICh2YWwgfD0gKChoICYgMSkgPDwgOCkpCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2V0X3ZhbHVlW05VTV9DT1VOVEVSU107Ci0gCisKIHN0YXRpYyB2b2lkIGF0aGxvbl9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGk9MDsgaSA8IE5VTV9DT1VOVEVSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgaSsrKSB7CiAJCWlmIChyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpKQogCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IE1TUl9LN19QRVJGQ1RSMCArIGk7CiAJCWVsc2UKIAkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSAwOwogCX0KIAotCWZvciAoaT0wOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSkpCiAJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX0s3X0VWTlRTRUwwICsgaTsKIAkJZWxzZQpAQCAtNjMsMTUgKzYzLDE1IEBACiAJfQogfQogCi0gCisKIHN0YXRpYyB2b2lkIGF0aGxvbl9zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKIAl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOwogCWludCBpOwotIAorCiAJLyogY2xlYXIgYWxsIGNvdW50ZXJzICovCiAJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIUNUUkxfSVNfUkVTRVJWRUQobXNycyxpKSkpCisJCWlmICh1bmxpa2VseSghQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBpKSkpCiAJCQljb250aW51ZTsKIAkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CiAJCUNUUkxfQ0xFQVJfTE8obG93KTsKQEAgLTgxLDE0ICs4MSwxNCBAQAogCiAJLyogYXZvaWQgYSBmYWxzZSBkZXRlY3Rpb24gb2YgY3RyIG92ZXJmbG93cyBpbiBOTUkgaGFuZGxlciAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIUNUUl9JU19SRVNFUlZFRChtc3JzLGkpKSkKKwkJaWYgKHVubGlrZWx5KCFDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpKQogCQkJY29udGludWU7CiAJCUNUUl9XUklURSgxLCBtc3JzLCBpKTsKIAl9CiAKIAkvKiBlbmFibGUgYWN0aXZlIGNvdW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmICgoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkgJiYgKENUUl9JU19SRVNFUlZFRChtc3JzLGkpKSkgeworCQlpZiAoKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpICYmIChDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpKSB7CiAJCQlyZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OwogCiAJCQlDVFJfV1JJVEUoY291bnRlcl9jb25maWdbaV0uY291bnQsIG1zcnMsIGkpOwpAQCAtMTEyLDcgKzExMiw3IEBACiAJfQogfQogCi0gCisKIHN0YXRpYyBpbnQgYXRobG9uX2NoZWNrX2N0cnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAogCQkJICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CkBAIC0xMzMsNyArMTMzLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotIAorCiBzdGF0aWMgdm9pZCBhdGhsb25fc3RhcnQoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQogewogCXVuc2lnbmVkIGludCBsb3csIGhpZ2g7CkBAIC0xNTAsNyArMTUwLDcgQEAKIAogc3RhdGljIHZvaWQgYXRobG9uX3N0b3Aoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQogewotCXVuc2lnbmVkIGludCBsb3csaGlnaDsKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOwogCWludCBpOwogCiAJLyogU3VidGxlOiBzdG9wIG9uIGFsbCBjb3VudGVycyB0byBhdm9pZCByYWNlIHdpdGgKQEAgLTE2OSwxMSArMTY5LDExIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUyA7ICsraSkgewotCQlpZiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsaSkpCisJCWlmIChDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpCiAJCQlyZWxlYXNlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpOwogCX0KIAlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT05UUk9MUyA7ICsraSkgewotCQlpZiAoQ1RSTF9JU19SRVNFUlZFRChtc3JzLGkpKQorCQlpZiAoQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBpKSkKIAkJCXJlbGVhc2VfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCmluZGV4IGM1NTRmNTIuLmVmZjQzMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKQEAgLTEsNCArMSw0IEBACi0vKioKKy8qCiAgKiBAZmlsZSBvcF9tb2RlbF9wcHJvLmgKICAqIHBlbnRpdW0gcHJvIC8gUDYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKICAqCkBAIC0xNSw0NSArMTUsNDUgQEAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+Ci0gCisKICNpbmNsdWRlICJvcF94ODZfbW9kZWwuaCIKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAKICNkZWZpbmUgTlVNX0NPVU5URVJTIDIKICNkZWZpbmUgTlVNX0NPTlRST0xTIDIKIAotI2RlZmluZSBDVFJfSVNfUkVTRVJWRUQobXNycyxjKSAobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyID8gMSA6IDApCi0jZGVmaW5lIENUUl9SRUFEKGwsaCxtc3JzLGMpIGRvIHtyZG1zcihtc3JzLT5jb3VudGVyc1soYyldLmFkZHIsIChsKSwgKGgpKTt9IHdoaWxlICgwKQotI2RlZmluZSBDVFJfMzJCSVRfV1JJVEUobCxtc3JzLGMpCVwKLQlkbyB7d3Jtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAtKHUzMikobCksIDApO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9JU19SRVNFUlZFRChtc3JzLCBjKSAobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyID8gMSA6IDApCisjZGVmaW5lIENUUl9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcihtc3JzLT5jb3VudGVyc1soYyldLmFkZHIsIChsKSwgKGgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSXzMyQklUX1dSSVRFKGwsIG1zcnMsIGMpCVwKKwlkbyB7d3Jtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAtKHUzMikobCksIDApOyB9IHdoaWxlICgwKQogI2RlZmluZSBDVFJfT1ZFUkZMT1dFRChuKSAoISgobikgJiAoMVU8PDMxKSkpCiAKLSNkZWZpbmUgQ1RSTF9JU19SRVNFUlZFRChtc3JzLGMpIChtc3JzLT5jb250cm9sc1soYyldLmFkZHIgPyAxIDogMCkKLSNkZWZpbmUgQ1RSTF9SRUFEKGwsaCxtc3JzLGMpIGRvIHtyZG1zcigobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyKSwgKGwpLCAoaCkpO30gd2hpbGUgKDApCi0jZGVmaW5lIENUUkxfV1JJVEUobCxoLG1zcnMsYykgZG8ge3dybXNyKChtc3JzLT5jb250cm9sc1soYyldLmFkZHIpLCAobCksIChoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBjKSAobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyID8gMSA6IDApCisjZGVmaW5lIENUUkxfUkVBRChsLCBoLCBtc3JzLCBjKSBkbyB7cmRtc3IoKG1zcnMtPmNvbnRyb2xzWyhjKV0uYWRkciksIChsKSwgKGgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IoKG1zcnMtPmNvbnRyb2xzWyhjKV0uYWRkciksIChsKSwgKGgpKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1RSTF9TRVRfQUNUSVZFKG4pIChuIHw9ICgxPDwyMikpCiAjZGVmaW5lIENUUkxfU0VUX0lOQUNUSVZFKG4pIChuICY9IH4oMTw8MjIpKQogI2RlZmluZSBDVFJMX0NMRUFSKHgpICh4ICY9ICgxPDwyMSkpCiAjZGVmaW5lIENUUkxfU0VUX0VOQUJMRSh2YWwpICh2YWwgfD0gMTw8MjApCi0jZGVmaW5lIENUUkxfU0VUX1VTUih2YWwsdSkgKHZhbCB8PSAoKHUgJiAxKSA8PCAxNikpCi0jZGVmaW5lIENUUkxfU0VUX0tFUk4odmFsLGspICh2YWwgfD0gKChrICYgMSkgPDwgMTcpKQorI2RlZmluZSBDVFJMX1NFVF9VU1IodmFsLCB1KSAodmFsIHw9ICgodSAmIDEpIDw8IDE2KSkKKyNkZWZpbmUgQ1RSTF9TRVRfS0VSTih2YWwsIGspICh2YWwgfD0gKChrICYgMSkgPDwgMTcpKQogI2RlZmluZSBDVFJMX1NFVF9VTSh2YWwsIG0pICh2YWwgfD0gKG0gPDwgOCkpCiAjZGVmaW5lIENUUkxfU0VUX0VWRU5UKHZhbCwgZSkgKHZhbCB8PSBlKQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtOVU1fQ09VTlRFUlNdOwotIAorCiBzdGF0aWMgdm9pZCBwcHJvX2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykKIHsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgTlVNX0NPVU5URVJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX1A2X1BFUkZDVFIwICsgaSkpCiAJCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gTVNSX1A2X1BFUkZDVFIwICsgaTsKIAkJZWxzZQogCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7CiAJfQotCQotCWZvciAoaT0wOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTFM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9ldm50c2VsX25taShNU1JfUDZfRVZOVFNFTDAgKyBpKSkKIAkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBNU1JfUDZfRVZOVFNFTDAgKyBpOwogCQllbHNlCkBAIC02OSwyMyArNjksMjMgQEAKIAogCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwogCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPTlRST0xTOyArK2kpIHsKLQkJaWYgKHVubGlrZWx5KCFDVFJMX0lTX1JFU0VSVkVEKG1zcnMsaSkpKQorCQlpZiAodW5saWtlbHkoIUNUUkxfSVNfUkVTRVJWRUQobXNycywgaSkpKQogCQkJY29udGludWU7CiAJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwogCQlDVFJMX0NMRUFSKGxvdyk7CiAJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKIAl9Ci0JCisKIAkvKiBhdm9pZCBhIGZhbHNlIGRldGVjdGlvbiBvZiBjdHIgb3ZlcmZsb3dzIGluIE5NSSBoYW5kbGVyICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmICh1bmxpa2VseSghQ1RSX0lTX1JFU0VSVkVEKG1zcnMsaSkpKQorCQlpZiAodW5saWtlbHkoIUNUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkpCiAJCQljb250aW51ZTsKIAkJQ1RSXzMyQklUX1dSSVRFKDEsIG1zcnMsIGkpOwogCX0KIAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKLQkJaWYgKChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSAmJiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsaSkpKSB7CisJCWlmICgoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkgJiYgKENUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkpIHsKIAkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAKIAkJCUNUUl8zMkJJVF9XUklURShjb3VudGVyX2NvbmZpZ1tpXS5jb3VudCwgbXNycywgaSk7CkBAIC0xMDQsMTMgKzEwNCwxMyBAQAogCX0KIH0KIAotIAorCiBzdGF0aWMgaW50IHBwcm9fY2hlY2tfY3RycyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCiAJCQkgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CiAJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKIAlpbnQgaTsKLSAKKwogCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKIAkJaWYgKCFyZXNldF92YWx1ZVtpXSkKIAkJCWNvbnRpbnVlOwpAQCAtMTM1LDEwICsxMzUsMTAgQEAKIAlyZXR1cm4gMTsKIH0KIAotIAorCiBzdGF0aWMgdm9pZCBwcHJvX3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKLQl1bnNpZ25lZCBpbnQgbG93LGhpZ2g7CisJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIHN0YXRpYyB2b2lkIHBwcm9fc3RvcChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7Ci0JdW5zaWduZWQgaW50IGxvdyxoaWdoOworCXVuc2lnbmVkIGludCBsb3csIGhpZ2g7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKQEAgLTE3MCwxMSArMTcwLDExIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUyA7ICsraSkgewotCQlpZiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsaSkpCisJCWlmIChDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpCiAJCQlyZWxlYXNlX3BlcmZjdHJfbm1pKE1TUl9QNl9QRVJGQ1RSMCArIGkpOwogCX0KIAlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT05UUk9MUyA7ICsraSkgewotCQlpZiAoQ1RSTF9JU19SRVNFUlZFRChtc3JzLGkpKQorCQlpZiAoQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBpKSkKIAkJCXJlbGVhc2VfZXZudHNlbF9ubWkoTVNSX1A2X0VWTlRTRUwwICsgaSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2FjcGkuYyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKaW5kZXggMDIzNGYyOC4uMjY2NGNiMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2FjcGkuYworKysgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogc3RhdGljIHZvaWQKIGdldF9jdXJyZW50X3Jlc291cmNlcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IGJ1c251bSwKLQkJCXN0cnVjdCBwY2lfYnVzICpidXMpCisJCQlpbnQgZG9tYWluLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfcm9vdF9pbmZvIGluZm87CiAJc2l6ZV90IHNpemU7CkBAIC0xNjgsMTAgKzE2OCwxMCBAQAogCWlmICghaW5mby5yZXMpCiAJCWdvdG8gcmVzX2FsbG9jX2ZhaWw7CiAKLQlpbmZvLm5hbWUgPSBrbWFsbG9jKDEyLCBHRlBfS0VSTkVMKTsKKwlpbmZvLm5hbWUgPSBrbWFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8ubmFtZSkKIAkJZ290byBuYW1lX2FsbG9jX2ZhaWw7Ci0Jc3ByaW50ZihpbmZvLm5hbWUsICJQQ0kgQnVzICMlMDJ4IiwgYnVzbnVtKTsKKwlzcHJpbnRmKGluZm8ubmFtZSwgIlBDSSBCdXMgJTA0eDolMDJ4IiwgZG9tYWluLCBidXNudW0pOwogCiAJaW5mby5yZXNfbnVtID0gMDsKIAlhY3BpX3dhbGtfcmVzb3VyY2VzKGRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLCBzZXR1cF9yZXNvdXJjZSwKQEAgLTIxOSw4ICsyMTksMjEgQEAKIAlpZiAocHhtID49IDApCiAJCXNkLT5ub2RlID0gcHhtX3RvX25vZGUocHhtKTsKICNlbmRpZgorCS8qCisJICogTWF5YmUgdGhlIGRlc2lyZWQgcGNpIGJ1cyBoYXMgYmVlbiBhbHJlYWR5IHNjYW5uZWQuIEluIHN1Y2ggY2FzZQorCSAqIGl0IGlzIHVubmVjZXNzYXJ5IHRvIHNjYW4gdGhlIHBjaSBidXMgd2l0aCB0aGUgZ2l2ZW4gZG9tYWluLGJ1c251bS4KKwkgKi8KKwlidXMgPSBwY2lfZmluZF9idXMoZG9tYWluLCBidXNudW0pOworCWlmIChidXMpIHsKKwkJLyoKKwkJICogSWYgdGhlIGRlc2lyZWQgYnVzIGV4aXRzLCB0aGUgY29udGVudCBvZiBidXMtPnN5c2RhdGEgd2lsbAorCQkgKiBiZSByZXBsYWNlZCBieSBzZC4KKwkJICovCisJCW1lbWNweShidXMtPnN5c2RhdGEsIHNkLCBzaXplb2YoKnNkKSk7CisJCWtmcmVlKHNkKTsKKwl9IGVsc2UKKwkJYnVzID0gcGNpX3NjYW5fYnVzX3BhcmVudGVkKE5VTEwsIGJ1c251bSwgJnBjaV9yb290X29wcywgc2QpOwogCi0JYnVzID0gcGNpX3NjYW5fYnVzX3BhcmVudGVkKE5VTEwsIGJ1c251bSwgJnBjaV9yb290X29wcywgc2QpOwogCWlmICghYnVzKQogCQlrZnJlZShzZCk7CiAKQEAgLTIyOCwxMyArMjQxLDEzIEBACiAJaWYgKGJ1cyAhPSBOVUxMKSB7CiAJCWlmIChweG0gPj0gMCkgewogCQkJcHJpbnRrKCJidXMgJWQgLT4gcHhtICVkIC0+IG5vZGUgJWRcbiIsCi0JCQkJYnVzbnVtLCBweG0sIHNkLT5ub2RlKTsKKwkJCQlidXNudW0sIHB4bSwgcHhtX3RvX25vZGUocHhtKSk7CiAJCX0KIAl9CiAjZW5kaWYKIAogCWlmIChidXMgJiYgKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykpCi0JCWdldF9jdXJyZW50X3Jlc291cmNlcyhkZXZpY2UsIGJ1c251bSwgYnVzKTsKKwkJZ2V0X2N1cnJlbnRfcmVzb3VyY2VzKGRldmljZSwgYnVzbnVtLCBkb21haW4sIGJ1cyk7CiAJCiAJcmV0dXJuIGJ1czsKIH0KQEAgLTI2NSw4ICsyNzgsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFJvdXRpbmcgUENJIGludGVycnVwdHMgZm9yIGFsbCBkZXZpY2VzIGJlY2F1c2UgXCJwY2k9cm91dGVpcnFcIiBzcGVjaWZpZWRcbiIpOwogCQlmb3JfZWFjaF9wY2lfZGV2KGRldikKIAkJCWFjcGlfcGNpX2lycV9lbmFibGUoZGV2KTsKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBJZiBhIGRldmljZSBkb2Vzbid0IHdvcmssIHRyeSBcInBjaT1yb3V0ZWlycVwiLiAgSWYgaXQgaGVscHMsIHBvc3QgYSByZXBvcnRcbiIpOworCX0KIAogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCWlmIChhY3BpX2lvYXBpYykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9jb21tb24uYyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwppbmRleCBiN2M2N2ExLi43NWZjYzI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKKysrIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCkBAIC03Nyw1OSArNzcsNiBAQAogICovCiBERUZJTkVfU1BJTkxPQ0socGNpX2NvbmZpZ19sb2NrKTsKIAotLyoKLSAqIFNldmVyYWwgYnVnZ3kgbW90aGVyYm9hcmRzIGFkZHJlc3Mgb25seSAxNiBkZXZpY2VzIGFuZCBtaXJyb3IKLSAqIHRoZW0gdG8gbmV4dCAxNiBJRHMuIFdlIHRyeSB0byBkZXRlY3QgdGhpcyBgZmVhdHVyZScgb24gYWxsCi0gKiBwcmltYXJ5IGJ1c2VzICh0aG9zZSBjb250YWluaW5nIGhvc3QgYnJpZGdlcyBhcyB0aGV5IGFyZQotICogZXhwZWN0ZWQgdG8gYmUgdW5pcXVlKSBhbmQgcmVtb3ZlIHRoZSBnaG9zdCBkZXZpY2VzLgotICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX2ZpeHVwX2dob3N0cyhzdHJ1Y3QgcGNpX2J1cyAqYikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsbiwgKm1uOwotCXN0cnVjdCBwY2lfZGV2ICpkLCAqZTsKLQlpbnQgbWlycm9yID0gUENJX0RFVkZOKDE2LDApOwotCWludCBzZWVuX2hvc3RfYnJpZGdlID0gMDsKLQlpbnQgaTsKLQotCURCRygiUENJOiBTY2FubmluZyBmb3IgZ2hvc3QgZGV2aWNlcyBvbiBidXMgJWRcbiIsIGItPm51bWJlcik7Ci0JbGlzdF9mb3JfZWFjaChsbiwgJmItPmRldmljZXMpIHsKLQkJZCA9IHBjaV9kZXZfYihsbik7Ci0JCWlmICgoZC0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQotCQkJc2Vlbl9ob3N0X2JyaWRnZSsrOwotCQlmb3IgKG1uPWxuLT5uZXh0OyBtbiAhPSAmYi0+ZGV2aWNlczsgbW49bW4tPm5leHQpIHsKLQkJCWUgPSBwY2lfZGV2X2IobW4pOwotCQkJaWYgKGUtPmRldmZuICE9IGQtPmRldmZuICsgbWlycm9yIHx8Ci0JCQkgICAgZS0+dmVuZG9yICE9IGQtPnZlbmRvciB8fAotCQkJICAgIGUtPmRldmljZSAhPSBkLT5kZXZpY2UgfHwKLQkJCSAgICBlLT5jbGFzcyAhPSBkLT5jbGFzcykKLQkJCQljb250aW51ZTsKLQkJCWZvcihpPTA7IGk8UENJX05VTV9SRVNPVVJDRVM7IGkrKykKLQkJCQlpZiAoZS0+cmVzb3VyY2VbaV0uc3RhcnQgIT0gZC0+cmVzb3VyY2VbaV0uc3RhcnQgfHwKLQkJCQkgICAgZS0+cmVzb3VyY2VbaV0uZW5kICE9IGQtPnJlc291cmNlW2ldLmVuZCB8fAotCQkJCSAgICBlLT5yZXNvdXJjZVtpXS5mbGFncyAhPSBkLT5yZXNvdXJjZVtpXS5mbGFncykKLQkJCQkJY29udGludWU7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAobW4gPT0gJmItPmRldmljZXMpCi0JCQlyZXR1cm47Ci0JfQotCWlmICghc2Vlbl9ob3N0X2JyaWRnZSkKLQkJcmV0dXJuOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogSWdub3JpbmcgZ2hvc3QgZGV2aWNlcyBvbiBidXMgJTAyeFxuIiwgYi0+bnVtYmVyKTsKLQotCWxuID0gJmItPmRldmljZXM7Ci0Jd2hpbGUgKGxuLT5uZXh0ICE9ICZiLT5kZXZpY2VzKSB7Ci0JCWQgPSBwY2lfZGV2X2IobG4tPm5leHQpOwotCQlpZiAoZC0+ZGV2Zm4gPj0gbWlycm9yKSB7Ci0JCQlsaXN0X2RlbCgmZC0+Z2xvYmFsX2xpc3QpOwotCQkJbGlzdF9kZWwoJmQtPmJ1c19saXN0KTsKLQkJCWtmcmVlKGQpOwotCQl9IGVsc2UKLQkJCWxuID0gbG4tPm5leHQ7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpYmlvc19maXh1cF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyb21fciA9ICZkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdOwpAQCAtMTUyLDcgKzk5LDYgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCi0JcGNpYmlvc19maXh1cF9naG9zdHMoYik7CiAJcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKGIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYi0+ZGV2aWNlcywgYnVzX2xpc3QpCiAJCXBjaWJpb3NfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhkZXYpOwpAQCAtNDI3LDEwICszNzMsNiBAQAogCiAJaWYgKHBjaV9iZl9zb3J0ID49IHBjaV9mb3JjZV9iZikKIAkJcGNpX3NvcnRfYnJlYWR0aGZpcnN0KCk7Ci0jaWZkZWYgQ09ORklHX1BDSV9CSU9TCi0JaWYgKChwY2lfcHJvYmUgJiBQQ0lfQklPU19TT1JUKSAmJiAhKHBjaV9wcm9iZSAmIFBDSV9OT19TT1JUKSkKLQkJcGNpYmlvc19zb3J0KCk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDU1LDkgKzM5Nyw2IEBACiAJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgIm5vYmlvcyIpKSB7CiAJCXBjaV9wcm9iZSAmPSB+UENJX1BST0JFX0JJT1M7CiAJCXJldHVybiBOVUxMOwotCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJub3NvcnQiKSkgewotCQlwY2lfcHJvYmUgfD0gUENJX05PX1NPUlQ7Ci0JCXJldHVybiBOVUxMOwogCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJiaW9zaXJxIikpIHsKIAkJcGNpX3Byb2JlIHw9IFBDSV9CSU9TX0lSUV9TQ0FOOwogCQlyZXR1cm4gTlVMTDsKQEAgLTUyNyw3ICs0NjYsNyBAQAogewogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IHBjaWJpb3NfZW5hYmxlX3Jlc291cmNlcyhkZXYsIG1hc2spKSA8IDApCisJaWYgKChlcnIgPSBwY2lfZW5hYmxlX3Jlc291cmNlcyhkZXYsIG1hc2spKSA8IDApCiAJCXJldHVybiBlcnI7CiAKIAlpZiAoIWRldi0+bXNpX2VuYWJsZWQpCkBAIC01NDEsNyArNDgwLDcgQEAKIAkJcGNpYmlvc19kaXNhYmxlX2lycShkZXYpOwogfQogCi1zdHJ1Y3QgcGNpX2J1cyAqcGNpX3NjYW5fYnVzX3dpdGhfc3lzZGF0YShpbnQgYnVzbm8pCitzdHJ1Y3QgcGNpX2J1cyAqX19kZXZpbml0IHBjaV9zY2FuX2J1c193aXRoX3N5c2RhdGEoaW50IGJ1c25vKQogewogCXN0cnVjdCBwY2lfYnVzICpidXMgPSBOVUxMOwogCXN0cnVjdCBwY2lfc3lzZGF0YSAqc2Q7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jIGIvYXJjaC94ODYvcGNpL2kzODYuYwppbmRleCAxMDNiOWRmZi4uOTRmNmM3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL3BhdC5oPgogCiAjaW5jbHVkZSAicGNpLmgiCiAKQEAgLTIzOCw0NCArMjQxLDYgQEAKICAqLwogZnNfaW5pdGNhbGwocGNpYmlvc19hc3NpZ25fcmVzb3VyY2VzKTsKIAotaW50IHBjaWJpb3NfZW5hYmxlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKLXsKLQl1MTYgY21kLCBvbGRfY21kOwotCWludCBpZHg7Ci0Jc3RydWN0IHJlc291cmNlICpyOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0Jb2xkX2NtZCA9IGNtZDsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpZHgrKykgewotCQkvKiBPbmx5IHNldCB1cCB0aGUgcmVxdWVzdGVkIHN0dWZmICovCi0JCWlmICghKG1hc2sgJiAoMSA8PCBpZHgpKSkKLQkJCWNvbnRpbnVlOwotCi0JCXIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOwotCQlpZiAoIShyLT5mbGFncyAmIChJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0pKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKGlkeCA9PSBQQ0lfUk9NX1JFU09VUkNFKSAmJgotCQkJCSghKHItPmZsYWdzICYgSU9SRVNPVVJDRV9ST01fRU5BQkxFKSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFyLT5zdGFydCAmJiByLT5lbmQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBEZXZpY2UgJXMgbm90IGF2YWlsYWJsZSAiCi0JCQkJImJlY2F1c2Ugb2YgcmVzb3VyY2UgJWQgY29sbGlzaW9uc1xuIiwKLQkJCQlwY2lfbmFtZShkZXYpLCBpZHgpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKLQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOwotCX0KLQlpZiAoY21kICE9IG9sZF9jbWQpIHsKLQkJcHJpbnRrKCJQQ0k6IEVuYWJsaW5nIGRldmljZSAlcyAoJTA0eCAtPiAlMDR4KVxuIiwKLQkJCXBjaV9uYW1lKGRldiksIG9sZF9jbWQsIGNtZCk7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqICBJZiB3ZSBzZXQgdXAgYSBkZXZpY2UgZm9yIGJ1cyBtYXN0ZXJpbmcsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGxhdGVuY3kKICAqICB0aW1lciBhcyBjZXJ0YWluIGNyYXBweSBCSU9TZXMgZm9yZ2V0IHRvIHNldCBpdCBwcm9wZXJseS4KQEAgLTI5NywxMCArMjYyLDM1IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIGxhdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV91bm1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXU2NCBhZGRyID0gKHU2NCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJZnJlZV9tZW10eXBlKGFkZHIsIGFkZHIgKyB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOworfQorCitzdGF0aWMgdm9pZCBwY2lfdHJhY2tfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXU2NCBhZGRyID0gKHU2NCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpCisJCQkJCQkmIF9QQUdFX0NBQ0hFX01BU0s7CisKKwlyZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgZmxhZ3MsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9tbWFwX29wcyA9IHsKKwkub3BlbiAgPSBwY2lfdHJhY2tfbW1hcF9wYWdlX3JhbmdlLAorCS5jbG9zZSA9IHBjaV91bm1hcF9wYWdlX3JhbmdlLAorfTsKKwogaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKQogewogCXVuc2lnbmVkIGxvbmcgcHJvdDsKKwl1NjQgYWRkciA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzOworCWludCByZXR2YWw7CiAKIAkvKiBJL08gc3BhY2UgY2Fubm90IGJlIGFjY2Vzc2VkIHZpYSBub3JtYWwgcHJvY2Vzc29yIGxvYWRzIGFuZAogCSAqIHN0b3JlcyBvbiB0aGlzIHBsYXRmb3JtLgpAQCAtMzA4LDIxICsyOTgsNTAgQEAKIAlpZiAobW1hcF9zdGF0ZSA9PSBwY2lfbW1hcF9pbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBMZWF2ZSB2bV9wZ29mZiBhcy1pcywgdGhlIFBDSSBzcGFjZSBhZGRyZXNzIGlzIHRoZSBwaHlzaWNhbAotCSAqIGFkZHJlc3Mgb24gdGhpcyBwbGF0Zm9ybS4KLQkgKi8KIAlwcm90ID0gcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID4gMykKLQkJcHJvdCB8PSBfUEFHRV9QQ0QgfCBfUEFHRV9QV1Q7CisJaWYgKHBhdF93Y19lbmFibGVkICYmIHdyaXRlX2NvbWJpbmUpCisJCXByb3QgfD0gX1BBR0VfQ0FDSEVfV0M7CisJZWxzZSBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQorCQlwcm90IHw9IF9QQUdFX0NBQ0hFX1VDOworCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwcm90KTsKIAotCS8qIFdyaXRlLWNvbWJpbmUgc2V0dGluZyBpcyBpZ25vcmVkLCBpdCBpcyBjaGFuZ2VkIHZpYSB0aGUgbXRycgotCSAqIGludGVyZmFjZXMgb24gdGhpcyBwbGF0Zm9ybS4KLQkgKi8KKwlmbGFncyA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICYgX1BBR0VfQ0FDSEVfTUFTSzsKKwlyZXR2YWwgPSByZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIGxlbiwgZmxhZ3MsICZuZXdfZmxhZ3MpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoZmxhZ3MgIT0gbmV3X2ZsYWdzKSB7CisJCS8qCisJCSAqIERvIG5vdCBmYWxsYmFjayB0byBjZXJ0YWluIG1lbW9yeSB0eXBlcyB3aXRoIGNlcnRhaW4KKwkJICogcmVxdWVzdGVkIHR5cGU6CisJCSAqIC0gcmVxdWVzdCBpcyB1bmNhY2hlZCwgcmV0dXJuIGNhbm5vdCBiZSB3cml0ZS1iYWNrCisJCSAqIC0gcmVxdWVzdCBpcyB1bmNhY2hlZCwgcmV0dXJuIGNhbm5vdCBiZSB3cml0ZS1jb21iaW5lCisJCSAqIC0gcmVxdWVzdCBpcyB3cml0ZS1jb21iaW5lLCByZXR1cm4gY2Fubm90IGJlIHdyaXRlLWJhY2sKKwkJICovCisJCWlmICgoZmxhZ3MgPT0gX1BBR0VfQ0FDSEVfVUMgJiYKKwkJICAgICAobmV3X2ZsYWdzID09IF9QQUdFX0NBQ0hFX1dCIHx8CisJCSAgICAgIG5ld19mbGFncyA9PSBfUEFHRV9DQUNIRV9XQykpIHx8CisJCSAgICAoZmxhZ3MgPT0gX1BBR0VfQ0FDSEVfV0MgJiYKKwkJICAgICBuZXdfZmxhZ3MgPT0gX1BBR0VfQ0FDSEVfV0IpKSB7CisJCQlmcmVlX21lbXR5cGUoYWRkciwgYWRkcitsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZmxhZ3MgPSBuZXdfZmxhZ3M7CisJfQorCisJaWYgKHZtYS0+dm1fcGdvZmYgPD0gbWF4X3Bmbl9tYXBwZWQgJiYKKwkgICAgaW9yZW1hcF9jaGFuZ2VfYXR0cigodW5zaWduZWQgbG9uZylfX3ZhKGFkZHIpLCBsZW4sIGZsYWdzKSkgeworCQlmcmVlX21lbXR5cGUoYWRkciwgYWRkciArIGxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3Bnb2ZmLAogCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKIAkJCSAgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCkpCiAJCXJldHVybiAtRUFHQUlOOwogCisJdm1hLT52bV9vcHMgPSAmcGNpX21tYXBfb3BzOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaXJxLmMgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKaW5kZXggZWQwN2NlNi4uNTc5NzQ1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2lycS5jCisrKyBiL2FyY2gveDg2L3BjaS9pcnEuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXJxbWFwWzE2XSA9IHsgMCwgOSwgMywgMTAsIDQsIDUsIDcsIDYsIDEsIDExLCAwLCAxMiwgMCwgMTQsIDAsIDE1IH07CiAKLQlXQVJOX09OX09OQ0UocGlycSA+PSAxNik7CisJV0FSTl9PTl9PTkNFKHBpcnEgPiAxNik7CiAJcmV0dXJuIGlycW1hcFtyZWFkX2NvbmZpZ19ueWJibGUocm91dGVyLCAweDQ4LCBwaXJxLTEpXTsKIH0KIApAQCAtMjA5LDcgKzIwOSw3IEBACiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXJxbWFwWzE2XSA9IHsgMCwgOCwgMCwgMiwgNCwgNSwgNywgNiwgMCwgMSwgMywgOSwgMTEsIDAsIDEzLCAxNSB9OwogCXVuc2lnbmVkIGludCB2YWwgPSBpcnFtYXBbaXJxXTsKIAotCVdBUk5fT05fT05DRShwaXJxID49IDE2KTsKKwlXQVJOX09OX09OQ0UocGlycSA+IDE2KTsKIAlpZiAodmFsKSB7CiAJCXdyaXRlX2NvbmZpZ19ueWJibGUocm91dGVyLCAweDQ4LCBwaXJxLTEsIHZhbCk7CiAJCXJldHVybiAxOwpAQCAtMjYwLDcgKzI2MCw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwaXJxbWFwWzVdID0geyAzLCAyLCA1LCAxLCAxIH07CiAKLQlXQVJOX09OX09OQ0UocGlycSA+PSA1KTsKKwlXQVJOX09OX09OQ0UocGlycSA+IDUpOwogCXJldHVybiByZWFkX2NvbmZpZ19ueWJibGUocm91dGVyLCAweDU1LCBwaXJxbWFwW3BpcnEtMV0pOwogfQogCkBAIC0yNjgsNyArMjY4LDcgQEAKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBpcnFtYXBbNV0gPSB7IDMsIDIsIDUsIDEsIDEgfTsKIAotCVdBUk5fT05fT05DRShwaXJxID49IDUpOworCVdBUk5fT05fT05DRShwaXJxID4gNSk7CiAJd3JpdGVfY29uZmlnX255YmJsZShyb3V0ZXIsIDB4NTUsIHBpcnFtYXBbcGlycS0xXSwgaXJxKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTI4Miw3ICsyODIsNyBAQAogewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBpcnFtYXBbNF0gPSB7IDEsIDAsIDIsIDMgfTsKIAotCVdBUk5fT05fT05DRShwaXJxID49IDQpOworCVdBUk5fT05fT05DRShwaXJxID4gNCk7CiAJcmV0dXJuIHJlYWRfY29uZmlnX255YmJsZShyb3V0ZXIsMHg0MywgcGlycW1hcFtwaXJxLTFdKTsKIH0KIApAQCAtMjkwLDcgKzI5MCw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGlycW1hcFs0XSA9IHsgMSwgMCwgMiwgMyB9OwogCi0JV0FSTl9PTl9PTkNFKHBpcnEgPj0gNCk7CisJV0FSTl9PTl9PTkNFKHBpcnEgPiA0KTsKIAl3cml0ZV9jb25maWdfbnliYmxlKHJvdXRlciwgMHg0MywgcGlycW1hcFtwaXJxLTFdLCBpcnEpOwogCXJldHVybiAxOwogfQpAQCAtNTgzLDYgKzU4MywxMCBAQAogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV80OgogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV81OgogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfVE9MQVBBSV8wOgorCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMDoKKwkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzE6CisJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF8yOgorCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMzoKIAkJCXItPm5hbWUgPSAiUElJWC9JQ0giOwogCQkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKIAkJCXItPnNldCA9IHBpcnFfcGlpeF9zZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbnVtYS5jIGIvYXJjaC94ODYvcGNpL251bWEuYwppbmRleCA1NTI3MGMyLi5kOWFmYmFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbnVtYS5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hLmMKQEAgLTExLDExICsxMSw0MSBAQAogI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCiAjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCiAKK2ludCBtcF9idXNfaWRfdG9fbm9kZVtNQVhfTVBfQlVTU0VTXTsKICNkZWZpbmUgQlVTMlFVQUQoZ2xvYmFsKSAobXBfYnVzX2lkX3RvX25vZGVbZ2xvYmFsXSkKLSNkZWZpbmUgQlVTMkxPQ0FMKGdsb2JhbCkgKG1wX2J1c19pZF90b19sb2NhbFtnbG9iYWxdKQotI2RlZmluZSBRVUFETE9DQUwyQlVTKHF1YWQsbG9jYWwpIChxdWFkX2xvY2FsX3RvX21wX2J1c19pZFtxdWFkXVtsb2NhbF0pCiAKLWV4dGVybiB2b2lkICp4cXVhZF9wb3J0aW87ICAgIC8qIFdoZXJlIHRoZSBJTyBhcmVhIHdhcyBtYXBwZWQgKi8KK2ludCBtcF9idXNfaWRfdG9fbG9jYWxbTUFYX01QX0JVU1NFU107CisjZGVmaW5lIEJVUzJMT0NBTChnbG9iYWwpIChtcF9idXNfaWRfdG9fbG9jYWxbZ2xvYmFsXSkKKwordm9pZCBtcGNfb2VtX2J1c19pbmZvKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwgY2hhciAqbmFtZSwKKwlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCit7CisJaW50IHF1YWQgPSB0cmFuc2xhdGlvbi0+dHJhbnNfcXVhZDsKKwlpbnQgbG9jYWwgPSB0cmFuc2xhdGlvbi0+dHJhbnNfbG9jYWw7CisKKwltcF9idXNfaWRfdG9fbm9kZVttLT5tcGNfYnVzaWRdID0gcXVhZDsKKwltcF9idXNfaWRfdG9fbG9jYWxbbS0+bXBjX2J1c2lkXSA9IGxvY2FsOworCXByaW50ayhLRVJOX0lORk8gIkJ1cyAjJWQgaXMgJXMgKG5vZGUgJWQpXG4iLAorCSAgICAgICBtLT5tcGNfYnVzaWQsIG5hbWUsIHF1YWQpOworfQorCitpbnQgcXVhZF9sb2NhbF90b19tcF9idXNfaWQgW05SX0NQVVMvNF1bNF07CisjZGVmaW5lIFFVQURMT0NBTDJCVVMocXVhZCxsb2NhbCkgKHF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkW3F1YWRdW2xvY2FsXSkKK3ZvaWQgbXBjX29lbV9wY2lfYnVzKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwKKwlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCit7CisJaW50IHF1YWQgPSB0cmFuc2xhdGlvbi0+dHJhbnNfcXVhZDsKKwlpbnQgbG9jYWwgPSB0cmFuc2xhdGlvbi0+dHJhbnNfbG9jYWw7CisKKwlxdWFkX2xvY2FsX3RvX21wX2J1c19pZFtxdWFkXVtsb2NhbF0gPSBtLT5tcGNfYnVzaWQ7Cit9CisKKy8qIFdoZXJlIHRoZSBJTyBhcmVhIHdhcyBtYXBwZWQgb24gbXVsdGlxdWFkLCBhbHdheXMgMCBvdGhlcndpc2UgKi8KK3ZvaWQgKnhxdWFkX3BvcnRpbzsKKyNpZmRlZiBDT05GSUdfWDg2X05VTUFRCitFWFBPUlRfU1lNQk9MKHhxdWFkX3BvcnRpbyk7CisjZW5kaWYKKwogI2RlZmluZSBYUVVBRF9QT1JUX0FERFIocG9ydCwgcXVhZCkgKHhxdWFkX3BvcnRpbyArIChYUVVBRF9QT1JUSU9fUVVBRCpxdWFkKSArIHBvcnQpCiAKICNkZWZpbmUgUENJX0NPTkYxX01RX0FERFJFU1MoYnVzLCBkZXZmbiwgcmVnKSBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvcGNiaW9zLmMgYi9hcmNoL3g4Ni9wY2kvcGNiaW9zLmMKaW5kZXggMTBhYzhjMy4uMzc0NzJmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL3BjYmlvcy5jCisrKyBiL2FyY2gveDg2L3BjaS9wY2Jpb3MuYwpAQCAtMTUyLDI4ICsxNTIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwY2lfYmlvc19maW5kX2RldmljZSAodW5zaWduZWQgc2hvcnQgdmVuZG9yLCB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQsCi0JCQkJCXVuc2lnbmVkIHNob3J0IGluZGV4LCB1bnNpZ25lZCBjaGFyICpidXMsIHVuc2lnbmVkIGNoYXIgKmRldmljZV9mbikKLXsKLQl1bnNpZ25lZCBzaG9ydCBieDsKLQl1bnNpZ25lZCBzaG9ydCByZXQ7Ci0KLQlfX2FzbV9fKCJsY2FsbCAqKCUlZWRpKTsgY2xkXG5cdCIKLQkJImpjIDFmXG5cdCIKLQkJInhvciAlJWFoLCAlJWFoXG4iCi0JCSIxOiIKLQkJOiAiPWIiIChieCksCi0JCSAgIj1hIiAocmV0KQotCQk6ICIxIiAoUENJQklPU19GSU5EX1BDSV9ERVZJQ0UpLAotCQkgICJjIiAoZGV2aWNlX2lkKSwKLQkJICAiZCIgKHZlbmRvciksCi0JCSAgIlMiICgoaW50KSBpbmRleCksCi0JCSAgIkQiICgmcGNpX2luZGlyZWN0KSk7Ci0JKmJ1cyA9IChieCA+PiA4KSAmIDB4ZmY7Ci0JKmRldmljZV9mbiA9IGJ4ICYgMHhmZjsKLQlyZXR1cm4gKGludCkgKHJldCAmIDB4ZmYwMCkgPj4gODsKLX0KLQogc3RhdGljIGludCBwY2lfYmlvc19yZWFkKHVuc2lnbmVkIGludCBzZWcsIHVuc2lnbmVkIGludCBidXMsCiAJCQkgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgKnZhbHVlKQogewpAQCAtMTk4LDYgKzE3NiwxMSBAQAogCQkJICAiYiIgKGJ4KSwKIAkJCSAgIkQiICgobG9uZylyZWcpLAogCQkJICAiUyIgKCZwY2lfaW5kaXJlY3QpKTsKKwkJLyoKKwkJICogWmVyby1leHRlbmQgdGhlIHJlc3VsdCBiZXlvbmQgOCBiaXRzLCBkbyBub3QgdHJ1c3QgdGhlCisJCSAqIEJJT1MgaGF2aW5nIGRvbmUgaXQ6CisJCSAqLworCQkqdmFsdWUgJj0gMHhmZjsKIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlfX2FzbV9fKCJsY2FsbCAqKCUlZXNpKTsgY2xkXG5cdCIKQEAgLTIxMCw2ICsxOTMsMTEgQEAKIAkJCSAgImIiIChieCksCiAJCQkgICJEIiAoKGxvbmcpcmVnKSwKIAkJCSAgIlMiICgmcGNpX2luZGlyZWN0KSk7CisJCS8qCisJCSAqIFplcm8tZXh0ZW5kIHRoZSByZXN1bHQgYmV5b25kIDE2IGJpdHMsIGRvIG5vdCB0cnVzdCB0aGUKKwkJICogQklPUyBoYXZpbmcgZG9uZSBpdDoKKwkJICovCisJCSp2YWx1ZSAmPSAweGZmZmY7CiAJCWJyZWFrOwogCWNhc2UgNDoKIAkJX19hc21fXygibGNhbGwgKiglJWVzaSk7IGNsZFxuXHQiCkBAIC0zNTQsNTUgKzM0Miw2IEBACiB9CiAKIC8qCi0gKiBTb3J0IHRoZSBkZXZpY2UgbGlzdCBhY2NvcmRpbmcgdG8gUENJIEJJT1MuIE5hc3R5IGhhY2ssIGJ1dCBzaW5jZSBzb21lCi0gKiBmb29sIGZvcmdvdCB0byBkZWZpbmUgdGhlIGBjb3JyZWN0JyBkZXZpY2Ugb3JkZXIgaW4gdGhlIFBDSSBCSU9TIHNwZWNzCi0gKiBhbmQgd2Ugd2FudCB0byBiZSAocG9zc2libHkgYnVnLXRvLWJ1ZyA7LV0pIGNvbXBhdGlibGUgd2l0aCBvbGRlciBrZXJuZWxzCi0gKiB3aGljaCB1c2VkIEJJT1Mgb3JkZXJpbmcsIHdlIGFyZSBib3VuZCB0byBkbyB0aGlzLi4uCi0gKi8KLQotdm9pZCBfX2RldmluaXQgcGNpYmlvc19zb3J0KHZvaWQpCi17Ci0JTElTVF9IRUFEKHNvcnRlZF9kZXZpY2VzKTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsbjsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2LCAqZDsKLQlpbnQgaWR4LCBmb3VuZDsKLQl1bnNpZ25lZCBjaGFyIGJ1cywgZGV2Zm47Ci0KLQlEQkcoIlBDSTogU29ydGluZyBkZXZpY2UgbGlzdC4uLlxuIik7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZwY2lfZGV2aWNlcykpIHsKLQkJbG4gPSBwY2lfZGV2aWNlcy5uZXh0OwotCQlkZXYgPSBwY2lfZGV2X2cobG4pOwotCQlpZHggPSBmb3VuZCA9IDA7Ci0JCXdoaWxlIChwY2lfYmlvc19maW5kX2RldmljZShkZXYtPnZlbmRvciwgZGV2LT5kZXZpY2UsIGlkeCwgJmJ1cywgJmRldmZuKSA9PSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKLQkJCWlkeCsrOwotCQkJbGlzdF9mb3JfZWFjaChsbiwgJnBjaV9kZXZpY2VzKSB7Ci0JCQkJZCA9IHBjaV9kZXZfZyhsbik7Ci0JCQkJaWYgKGQtPmJ1cy0+bnVtYmVyID09IGJ1cyAmJiBkLT5kZXZmbiA9PSBkZXZmbikgewotCQkJCQlsaXN0X21vdmVfdGFpbCgmZC0+Z2xvYmFsX2xpc3QsICZzb3J0ZWRfZGV2aWNlcyk7Ci0JCQkJCWlmIChkID09IGRldikKLQkJCQkJCWZvdW5kID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGxuID09ICZwY2lfZGV2aWNlcykgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogQklPUyByZXBvcnRpbmcgdW5rbm93biBkZXZpY2UgJTAyeDolMDJ4XG4iLCBidXMsIGRldmZuKTsKLQkJCQkvKgotCQkJCSAqIFdlIG11c3Qgbm90IGNvbnRpbnVlIHNjYW5uaW5nIGFzIHNldmVyYWwgYnVnZ3kgQklPU2VzCi0JCQkJICogcmV0dXJuIGdhcmJhZ2UgYWZ0ZXIgdGhlIGxhc3QgZGV2aWNlLiBHcnIuCi0JCQkJICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBEZXZpY2UgJXMgbm90IGZvdW5kIGJ5IEJJT1NcbiIsCi0JCQkJcGNpX25hbWUoZGV2KSk7Ci0JCQlsaXN0X21vdmVfdGFpbCgmZGV2LT5nbG9iYWxfbGlzdCwgJnNvcnRlZF9kZXZpY2VzKTsKLQkJfQotCX0KLQlsaXN0X3NwbGljZSgmc29ydGVkX2RldmljZXMsICZwY2lfZGV2aWNlcyk7Ci19Ci0KLS8qCiAgKiAgQklPUyBGdW5jdGlvbnMgZm9yIElSUSBSb3V0aW5nCiAgKi8KIApAQCAtNDg1LDcgKzQyNCw2IEBACiB7CiAJaWYgKChwY2lfcHJvYmUgJiBQQ0lfUFJPQkVfQklPUykgCiAJCSYmICgocmF3X3BjaV9vcHMgPSBwY2lfZmluZF9iaW9zKCkpKSkgewotCQlwY2lfcHJvYmUgfD0gUENJX0JJT1NfU09SVDsKIAkJcGNpX2Jpb3NfcHJlc2VudCA9IDE7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL3BjaS5oIGIvYXJjaC94ODYvcGNpL3BjaS5oCmluZGV4IDM0MzE1MTguLmM0YmRkYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9wY2kuaAorKysgYi9hcmNoL3g4Ni9wY2kvcGNpLmgKQEAgLTE5LDggKzE5LDYgQEAKICNkZWZpbmUgUENJX1BST0JFX01BU0sJCTB4MDAwZgogI2RlZmluZSBQQ0lfUFJPQkVfTk9FQVJMWQkweDAwMTAKIAotI2RlZmluZSBQQ0lfTk9fU09SVAkJMHgwMTAwCi0jZGVmaW5lIFBDSV9CSU9TX1NPUlQJCTB4MDIwMAogI2RlZmluZSBQQ0lfTk9fQ0hFQ0tTCQkweDA0MDAKICNkZWZpbmUgUENJX1VTRV9QSVJRX01BU0sJMHgwODAwCiAjZGVmaW5lIFBDSV9BU1NJR05fUk9NUwkJMHgxMDAwCkBAIC00NCw3ICs0Miw2IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHBjaWJpb3NfbWF4X2xhdGVuY3k7CiAKIHZvaWQgcGNpYmlvc19yZXNvdXJjZV9zdXJ2ZXkodm9pZCk7Ci1pbnQgcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CiAKIC8qIHBjaS1wYy5jICovCiAKQEAgLTEwMSw3ICs5OCw2IEBACiBleHRlcm4gdm9pZCBwY2lfZGlyZWN0X2luaXQoaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgcGNpX3BjYmlvc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpX21tY2ZnX2luaXQoaW50IHR5cGUpOwotZXh0ZXJuIHZvaWQgcGNpYmlvc19zb3J0KHZvaWQpOwogCiAvKiBwY2ktbW1jb25maWcuYyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wb3dlci9jcHVfMzIuYyBiL2FyY2gveDg2L3Bvd2VyL2NwdV8zMi5jCmluZGV4IDdmOWM2ZGEuLjdkYzVkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL2NwdV8zMi5jCisrKyBiL2FyY2gveDg2L3Bvd2VyL2NwdV8zMi5jCkBAIC0yNywxNyArMjcsMTcgQEAKIAkvKgogCSAqIGRlc2NyaXB0b3IgdGFibGVzCiAJICovCi0gCXN0b3JlX2dkdCgmY3R4dC0+Z2R0KTsKLSAJc3RvcmVfaWR0KCZjdHh0LT5pZHQpOwotIAlzdG9yZV90cihjdHh0LT50cik7CisJc3RvcmVfZ2R0KCZjdHh0LT5nZHQpOworCXN0b3JlX2lkdCgmY3R4dC0+aWR0KTsKKwlzdG9yZV90cihjdHh0LT50cik7CiAKIAkvKgogCSAqIHNlZ21lbnQgcmVnaXN0ZXJzCiAJICovCi0gCXNhdmVzZWdtZW50KGVzLCBjdHh0LT5lcyk7Ci0gCXNhdmVzZWdtZW50KGZzLCBjdHh0LT5mcyk7Ci0gCXNhdmVzZWdtZW50KGdzLCBjdHh0LT5ncyk7Ci0gCXNhdmVzZWdtZW50KHNzLCBjdHh0LT5zcyk7CisJc2F2ZXNlZ21lbnQoZXMsIGN0eHQtPmVzKTsKKwlzYXZlc2VnbWVudChmcywgY3R4dC0+ZnMpOworCXNhdmVzZWdtZW50KGdzLCBjdHh0LT5ncyk7CisJc2F2ZXNlZ21lbnQoc3MsIGN0eHQtPnNzKTsKIAogCS8qCiAJICogY29udHJvbCByZWdpc3RlcnMKQEAgLTQ4LDEwICs0OCwxMiBAQAogCWN0eHQtPmNyNCA9IHJlYWRfY3I0KCk7CiB9CiAKKy8qIE5lZWRlZCBieSBhcG0uYyAqLwogdm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQogewogCV9fc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoJnNhdmVkX2NvbnRleHQpOwogfQorRVhQT1JUX1NZTUJPTChzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSk7CiAKIHN0YXRpYyB2b2lkIGRvX2ZwdV9lbmQodm9pZCkKIHsKQEAgLTY0LDkgKzY2LDE0IEBACiBzdGF0aWMgdm9pZCBmaXhfcHJvY2Vzc29yX2NvbnRleHQodm9pZCkKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCB0c3Nfc3RydWN0ICogdCA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOworCXN0cnVjdCB0c3Nfc3RydWN0ICp0ID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7CiAKLQlzZXRfdHNzX2Rlc2MoY3B1LHQpOwkvKiBUaGlzIGp1c3QgbW9kaWZpZXMgbWVtb3J5OyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gQnV0Li4uIFRoaXMgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIDM4NiBoYXJkd2FyZSBoYXMgY29uY2VwdCBvZiBidXN5IFRTUyBvciBzb21lIHNpbWlsYXIgc3R1cGlkaXR5LiAqLworCXNldF90c3NfZGVzYyhjcHUsIHQpOwkvKgorCQkJCSAqIFRoaXMganVzdCBtb2RpZmllcyBtZW1vcnk7IHNob3VsZCBub3QgYmUKKwkJCQkgKiBuZWNlc3NhcnkuIEJ1dC4uLiBUaGlzIGlzIG5lY2Vzc2FyeSwgYmVjYXVzZQorCQkJCSAqIDM4NiBoYXJkd2FyZSBoYXMgY29uY2VwdCBvZiBidXN5IFRTUyBvciBzb21lCisJCQkJICogc2ltaWxhciBzdHVwaWRpdHkuCisJCQkJICovCiAKIAlsb2FkX1RSX2Rlc2MoKTsJCQkJLyogVGhpcyBkb2VzIGx0ciAqLwogCWxvYWRfTERUKCZjdXJyZW50LT5hY3RpdmVfbW0tPmNvbnRleHQpOwkvKiBUaGlzIGRvZXMgbGxkdCAqLwpAQCAtMTAwLDE2ICsxMDcsMTYgQEAKIAkgKiBub3cgcmVzdG9yZSB0aGUgZGVzY3JpcHRvciB0YWJsZXMgdG8gdGhlaXIgcHJvcGVyIHZhbHVlcwogCSAqIGx0ciBpcyBkb25lIGkgZml4X3Byb2Nlc3Nvcl9jb250ZXh0KCkuCiAJICovCi0gCWxvYWRfZ2R0KCZjdHh0LT5nZHQpOwotIAlsb2FkX2lkdCgmY3R4dC0+aWR0KTsKKwlsb2FkX2dkdCgmY3R4dC0+Z2R0KTsKKwlsb2FkX2lkdCgmY3R4dC0+aWR0KTsKIAogCS8qCiAJICogc2VnbWVudCByZWdpc3RlcnMKIAkgKi8KLSAJbG9hZHNlZ21lbnQoZXMsIGN0eHQtPmVzKTsKLSAJbG9hZHNlZ21lbnQoZnMsIGN0eHQtPmZzKTsKLSAJbG9hZHNlZ21lbnQoZ3MsIGN0eHQtPmdzKTsKLSAJbG9hZHNlZ21lbnQoc3MsIGN0eHQtPnNzKTsKKwlsb2Fkc2VnbWVudChlcywgY3R4dC0+ZXMpOworCWxvYWRzZWdtZW50KGZzLCBjdHh0LT5mcyk7CisJbG9hZHNlZ21lbnQoZ3MsIGN0eHQtPmdzKTsKKwlsb2Fkc2VnbWVudChzcywgY3R4dC0+c3MpOwogCiAJLyoKIAkgKiBzeXNlbnRlciBNU1JzCkBAIC0xMjMsMTEgKzEzMCw5IEBACiAJbWNoZWNrX2luaXQoJmJvb3RfY3B1X2RhdGEpOwogfQogCisvKiBOZWVkZWQgYnkgYXBtLmMgKi8KIHZvaWQgcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKIHsKIAlfX3Jlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCZzYXZlZF9jb250ZXh0KTsKIH0KLQotLyogTmVlZGVkIGJ5IGFwbS5jICovCi1FWFBPUlRfU1lNQk9MKHNhdmVfcHJvY2Vzc29yX3N0YXRlKTsKIEVYUE9SVF9TWU1CT0wocmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV82NC5TIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV82NC5TCmluZGV4IDFkZWIzMjQ0Li4wMDA0MTU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfYXNtXzY0LlMKKysrIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlX2FzbV82NC5TCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAogRU5UUlkoc3dzdXNwX2FyY2hfc3VzcGVuZCkKIAltb3ZxCSRzYXZlZF9jb250ZXh0LCAlcmF4CkBAIC02MCw3ICs2MSw3IEBACiAJLyogRmx1c2ggVExCICovCiAJbW92cQltbXVfY3I0X2ZlYXR1cmVzKCVyaXApLCAlcmF4CiAJbW92cQklcmF4LCAlcmR4Ci0JYW5kcQkkfigxPDw3KSwgJXJkeAkjIFBHRQorCWFuZHEJJH4oWDg2X0NSNF9QR0UpLCAlcmR4CiAJbW92cQklcmR4LCAlY3I0OyAgIyB0dXJuIG9mZiBQR0UKIAltb3ZxCSVjcjMsICVyY3g7ICAjIGZsdXNoIFRMQgogCW1vdnEJJXJjeCwgJWNyMzsKQEAgLTExMiw3ICsxMTMsNyBAQAogCS8qIEZsdXNoIFRMQiwgaW5jbHVkaW5nICJnbG9iYWwiIHRoaW5ncyAodm1hbGxvYykgKi8KIAltb3ZxCW1tdV9jcjRfZmVhdHVyZXMoJXJpcCksICVyYXgKIAltb3ZxCSVyYXgsICVyZHgKLQlhbmRxCSR+KDE8PDcpLCAlcmR4OyAgIyBQR0UKKwlhbmRxCSR+KFg4Nl9DUjRfUEdFKSwgJXJkeAogCW1vdnEJJXJkeCwgJWNyNDsgICMgdHVybiBvZmYgUEdFCiAJbW92cQklY3IzLCAlcmN4OyAgIyBmbHVzaCBUTEIKIAltb3ZxCSVyY3gsICVjcjMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUgYi9hcmNoL3g4Ni92ZHNvL01ha2VmaWxlCmluZGV4IGYzODVhNGIuLmI3YWQ5ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvdmRzby9NYWtlZmlsZQpAQCAtMzcsOSArMzcsMTAgQEAKICQob2JqKS8lLnNvOiAkKG9iaikvJS5zby5kYmcgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQogCi1DRkwgOj0gJChQUk9GSUxJTkcpIC1tY21vZGVsPXNtYWxsIC1mUElDIC1nMCAtTzIgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcyAtbTY0CitDRkwgOj0gJChQUk9GSUxJTkcpIC1tY21vZGVsPXNtYWxsIC1mUElDIC1PMiAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIC1tNjQgXAorICAgICAgICQoZmlsdGVyIC1nJSwkKEtCVUlMRF9DRkxBR1MpKQogCi0kKHZvYmpzKTogS0JVSUxEX0NGTEFHUyA9ICQoQ0ZMKQorJCh2b2Jqcyk6IEtCVUlMRF9DRkxBR1MgKz0gJChDRkwpCiAKIHRhcmdldHMgKz0gdmRzby1zeW1zLmxkcwogb2JqLSQoVkRTTzY0LXkpCQkJKz0gdmRzby1zeW1zLmxkcwpAQCAtNTAsNyArNTEsOSBAQAogc2VkLXZkc29zeW0gOj0gLWUgJ3MvXjAwKi8wLycgXAogCS1lICdzL15cKFswLTlhLWZBLUZdKlwpIC4gXChWRFNPW2EtekEtWjAtOV9dKlwpJCQvXDIgPSAweFwxOy9wJwogcXVpZXRfY21kX3Zkc29zeW0gPSBWRFNPU1lNICRACi0gICAgICBjbWRfdmRzb3N5bSA9ICQoTk0pICQ8IHwgc2VkIC1uICQoc2VkLXZkc29zeW0pIHwgTENfQUxMPUMgc29ydCA+ICRACitkZWZpbmUgY21kX3Zkc29zeW0KKwkkKE5NKSAkPCB8IExDX0FMTD1DIHNlZCAtbiAkKHNlZC12ZHNvc3ltKSB8IExDX0FMTD1DIHNvcnQgPiAkQAorZW5kZWYKIAogJChvYmopLyUtc3ltcy5sZHM6ICQob2JqKS8lLnNvLmRiZyBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHZkc29zeW0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92ZHNvL3Zkc28zMi1zZXR1cC5jIGIvYXJjaC94ODYvdmRzby92ZHNvMzItc2V0dXAuYwppbmRleCAzNDhmMTM0Li5lMmFmOGVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92ZHNvL3Zkc28zMi1zZXR1cC5jCisrKyBiL2FyY2gveDg2L3Zkc28vdmRzbzMyLXNldHVwLmMKQEAgLTIxMCw4ICsyMTAsMTIgQEAKIC8qIE1heSBub3QgYmUgX19pbml0OiBjYWxsZWQgZHVyaW5nIHJlc3VtZSAqLwogdm9pZCBzeXNjYWxsMzJfY3B1X2luaXQodm9pZCkKIHsKLQlpZiAodXNlX3N5c2VudGVyIDwgMCkKLQkJdXNlX3N5c2VudGVyID0gKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKTsKKwlpZiAodXNlX3N5c2VudGVyIDwgMCkgeworCQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCisJCQl1c2Vfc3lzZW50ZXIgPSAxOworCQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQ0VOVEFVUikKKwkJCXVzZV9zeXNlbnRlciA9IDE7CisJfQogCiAJLyogTG9hZCB0aGVzZSBhbHdheXMgaW4gY2FzZSBzb21lIGZ1dHVyZSBBTUQgQ1BVIHN1cHBvcnRzCiAJICAgU1lTRU5URVIgZnJvbSBjb21wYXQgbW9kZSB0b28uICovCkBAIC0zMjUsNiArMzI5LDkgQEAKIAlpbnQgcmV0ID0gMDsKIAlib29sIGNvbXBhdDsKIAorCWlmICh2ZHNvX2VuYWJsZWQgPT0gVkRTT19ESVNBQkxFRCkKKwkJcmV0dXJuIDA7CisKIAlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCiAJLyogVGVzdCBjb21wYXQgbW9kZSBvbmNlIGhlcmUsIGluIGNhc2Ugc29tZW9uZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlkZW8vZmJkZXYuYyBiL2FyY2gveDg2L3ZpZGVvL2ZiZGV2LmMKaW5kZXggNDhmYjM4ZC4uNGRiNDJiZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlkZW8vZmJkZXYuYworKysgYi9hcmNoL3g4Ni92aWRlby9mYmRldi5jCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqIGFyY2gvaTM4Ni92aWRlby9mYmRldi5jIC0gaTM4NiBGcmFtZWJ1ZmZlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAZ21haWwuY29tPgogICoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCA0OWU1MzU4Li5jMDM4ODIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KIAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9waHlzZGV2Lmg+CkBAIC05NSw3ICs5Niw3IEBACiAgKgogICogMDogbm90IGF2YWlsYWJsZSwgMTogYXZhaWxhYmxlCiAgKi8KLXN0YXRpYyBpbnQgaGF2ZV92Y3B1X2luZm9fcGxhY2VtZW50ID0gMDsKK3N0YXRpYyBpbnQgaGF2ZV92Y3B1X2luZm9fcGxhY2VtZW50ID0gMTsKIAogc3RhdGljIHZvaWQgX19pbml0IHhlbl92Y3B1X3NldHVwKGludCBjcHUpCiB7CkBAIC0xMDMsNiArMTA0LDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVwOwogCisJQlVHX09OKEhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPT0gJmR1bW15X3NoYXJlZF9pbmZvKTsKIAlwZXJfY3B1KHhlbl92Y3B1LCBjcHUpID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1tjcHVdOwogCiAJaWYgKCFoYXZlX3ZjcHVfaW5mb19wbGFjZW1lbnQpCkBAIC0xNTMsNiArMTU1LDcgQEAKIAlpZiAoKmF4ID09IDEpCiAJCW1hc2tlZHggPSB+KCgxIDw8IFg4Nl9GRUFUVVJFX0FQSUMpIHwgIC8qIGRpc2FibGUgQVBJQyAqLwogCQkJICAgICgxIDw8IFg4Nl9GRUFUVVJFX0FDUEkpIHwgIC8qIGRpc2FibGUgQUNQSSAqLworCQkJICAgICgxIDw8IFg4Nl9GRUFUVVJFX1NFUCkgIHwgIC8qIGRpc2FibGUgU0VQICovCiAJCQkgICAgKDEgPDwgWDg2X0ZFQVRVUkVfQUNDKSk7ICAgLyogdGhlcm1hbCBtb25pdG9yaW5nICovCiAKIAlhc20oWEVOX0VNVUxBVEVfUFJFRklYICJjcHVpZCIKQEAgLTY2NSwxMCArNjY4LDEwIEBACiAJbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoX192YShQRk5fUEhZUyhwZm4pKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBpbl9wYWdldGFibGVfcGZuKHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBsb25nIHBmbikKK3N0YXRpYyB2b2lkIHBpbl9wYWdldGFibGVfcGZuKHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJc3RydWN0IG1tdWV4dF9vcCBvcDsKLQlvcC5jbWQgPSBsZXZlbDsKKwlvcC5jbWQgPSBjbWQ7CiAJb3AuYXJnMS5tZm4gPSBwZm5fdG9fbWZuKHBmbik7CiAJaWYgKEhZUEVSVklTT1JfbW11ZXh0X29wKCZvcCwgMSwgTlVMTCwgRE9NSURfU0VMRikpCiAJCUJVRygpOwpAQCAtNjg1LDcgKzY4OCw4IEBACiAKIAkJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkgewogCQkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShfX3ZhKFBGTl9QSFlTKHBmbikpKTsKLQkJCXBpbl9wYWdldGFibGVfcGZuKGxldmVsLCBwZm4pOworCQkJaWYgKGxldmVsID09IFBUX1BURSkKKwkJCQlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfUElOX0wxX1RBQkxFLCBwZm4pOwogCQl9IGVsc2UKIAkJCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3RyYXkgbWFwcGluZ3Mgb2YKIAkJCSAgIHRoaXMgcGFnZSAqLwpAQCAtNjk1LDI3ICs2OTksMzkgQEAKIAogc3RhdGljIHZvaWQgeGVuX2FsbG9jX3B0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgcGZuKQogewotCXhlbl9hbGxvY19wdHBhZ2UobW0sIHBmbiwgTU1VRVhUX1BJTl9MMV9UQUJMRSk7CisJeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBQVF9QVEUpOwogfQogCiBzdGF0aWMgdm9pZCB4ZW5fYWxsb2NfcGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHUzMiBwZm4pCiB7Ci0JeGVuX2FsbG9jX3B0cGFnZShtbSwgcGZuLCBNTVVFWFRfUElOX0wyX1RBQkxFKTsKKwl4ZW5fYWxsb2NfcHRwYWdlKG1tLCBwZm4sIFBUX1BNRCk7CiB9CiAKIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiB1bnRpbCB3ZSdyZSBPSyB0byB1c2Ugc3RydWN0IHBhZ2UgKi8KLXN0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3B0KHUzMiBwZm4pCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdHBhZ2UodTMyIHBmbiwgdW5zaWduZWQgbGV2ZWwpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCiAJaWYgKFBhZ2VQaW5uZWQocGFnZSkpIHsKIAkJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkgewotCQkJcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLCBwZm4pOworCQkJaWYgKGxldmVsID09IFBUX1BURSkKKwkJCQlwaW5fcGFnZXRhYmxlX3BmbihNTVVFWFRfVU5QSU5fVEFCTEUsIHBmbik7CiAJCQltYWtlX2xvd21lbV9wYWdlX3JlYWR3cml0ZShfX3ZhKFBGTl9QSFlTKHBmbikpKTsKIAkJfQorCQlDbGVhclBhZ2VQaW5uZWQocGFnZSk7CiAJfQogfQogCitzdGF0aWMgdm9pZCB4ZW5fcmVsZWFzZV9wdCh1MzIgcGZuKQoreworCXhlbl9yZWxlYXNlX3B0cGFnZShwZm4sIFBUX1BURSk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9yZWxlYXNlX3BkKHUzMiBwZm4pCit7CisJeGVuX3JlbGVhc2VfcHRwYWdlKHBmbiwgUFRfUE1EKTsKK30KKwogI2lmZGVmIENPTkZJR19ISUdIUFRFCiBzdGF0aWMgdm9pZCAqeGVuX2ttYXBfYXRvbWljX3B0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCiB7CkBAIC04MDQsNiArODIwLDMxIEBACiAJCQkgIFBGTl9ET1dOKF9fcGEoeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2UpKSk7CiB9CiAKK3N0YXRpYyBfX2luaXQgdm9pZCBzZXR1cF9zaGFyZWRfaW5mbyh2b2lkKQoreworCWlmICgheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gZml4X3RvX3ZpcnQoRklYX1BBUkFWSVJUX0JPT1RNQVApOworCisJCS8qCisJCSAqIENyZWF0ZSBhIG1hcHBpbmcgZm9yIHRoZSBzaGFyZWQgaW5mbyBwYWdlLgorCQkgKiBTaG91bGQgYmUgc2V0X2ZpeG1hcCgpLCBidXQgc2hhcmVkX2luZm8gaXMgYSBtYWNoaW5lCisJCSAqIGFkZHJlc3Mgd2l0aCBubyBjb3JyZXNwb25kaW5nIHBzZXVkby1waHlzIGFkZHJlc3MuCisJCSAqLworCQlzZXRfcHRlX21mbihhZGRyLAorCQkJICAgIFBGTl9ET1dOKHhlbl9zdGFydF9pbmZvLT5zaGFyZWRfaW5mbyksCisJCQkgICAgUEFHRV9LRVJORUwpOworCisJCUhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPSAoc3RydWN0IHNoYXJlZF9pbmZvICopYWRkcjsKKwl9IGVsc2UKKwkJSFlQRVJWSVNPUl9zaGFyZWRfaW5mbyA9CisJCQkoc3RydWN0IHNoYXJlZF9pbmZvICopX192YSh4ZW5fc3RhcnRfaW5mby0+c2hhcmVkX2luZm8pOworCisjaWZuZGVmIENPTkZJR19TTVAKKwkvKiBJbiBVUCB0aGlzIGlzIGFzIGdvb2QgYSBwbGFjZSBhcyBhbnkgdG8gc2V0IHVwIHNoYXJlZCBpbmZvICovCisJeGVuX3NldHVwX3ZjcHVfaW5mb19wbGFjZW1lbnQoKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgX19pbml0IHZvaWQgeGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKQogewogCS8qIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgcGF0Y2hpbmcgaGFzbid0IGhhcHBlbmVkIHlldApAQCAtODExLDI1ICs4NTIsMTAgQEAKIAlwdl9tbXVfb3BzLmFsbG9jX3B0ID0geGVuX2FsbG9jX3B0OwogCXB2X21tdV9vcHMuYWxsb2NfcGQgPSB4ZW5fYWxsb2NfcGQ7CiAJcHZfbW11X29wcy5yZWxlYXNlX3B0ID0geGVuX3JlbGVhc2VfcHQ7Ci0JcHZfbW11X29wcy5yZWxlYXNlX3BkID0geGVuX3JlbGVhc2VfcHQ7CisJcHZfbW11X29wcy5yZWxlYXNlX3BkID0geGVuX3JlbGVhc2VfcGQ7CiAJcHZfbW11X29wcy5zZXRfcHRlID0geGVuX3NldF9wdGU7CiAKLQlpZiAoIXhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKSB7Ci0JCS8qCi0JCSAqIENyZWF0ZSBhIG1hcHBpbmcgZm9yIHRoZSBzaGFyZWQgaW5mbyBwYWdlLgotCQkgKiBTaG91bGQgYmUgc2V0X2ZpeG1hcCgpLCBidXQgc2hhcmVkX2luZm8gaXMgYSBtYWNoaW5lCi0JCSAqIGFkZHJlc3Mgd2l0aCBubyBjb3JyZXNwb25kaW5nIHBzZXVkby1waHlzIGFkZHJlc3MuCi0JCSAqLwotCQlzZXRfcHRlX21mbihmaXhfdG9fdmlydChGSVhfUEFSQVZJUlRfQk9PVE1BUCksCi0JCQkgICAgUEZOX0RPV04oeGVuX3N0YXJ0X2luZm8tPnNoYXJlZF9pbmZvKSwKLQkJCSAgICBQQUdFX0tFUk5FTCk7Ci0KLQkJSFlQRVJWSVNPUl9zaGFyZWRfaW5mbyA9Ci0JCQkoc3RydWN0IHNoYXJlZF9pbmZvICopZml4X3RvX3ZpcnQoRklYX1BBUkFWSVJUX0JPT1RNQVApOwotCi0JfSBlbHNlCi0JCUhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPQotCQkJKHN0cnVjdCBzaGFyZWRfaW5mbyAqKV9fdmEoeGVuX3N0YXJ0X2luZm8tPnNoYXJlZF9pbmZvKTsKKwlzZXR1cF9zaGFyZWRfaW5mbygpOwogCiAJLyogQWN0dWFsbHkgcGluIHRoZSBwYWdldGFibGUgZG93biwgYnV0IHdlIGNhbid0IHNldCBQR19waW5uZWQKIAkgICB5ZXQgYmVjYXVzZSB0aGUgcGFnZSBzdHJ1Y3R1cmVzIGRvbid0IGV4aXN0IHlldC4gKi8KQEAgLTg2NCw3ICs4OTAsNiBAQAogCQlwdl9pcnFfb3BzLmlycV9kaXNhYmxlID0geGVuX2lycV9kaXNhYmxlX2RpcmVjdDsKIAkJcHZfaXJxX29wcy5pcnFfZW5hYmxlID0geGVuX2lycV9lbmFibGVfZGlyZWN0OwogCQlwdl9tbXVfb3BzLnJlYWRfY3IyID0geGVuX3JlYWRfY3IyX2RpcmVjdDsKLQkJcHZfY3B1X29wcy5pcmV0ID0geGVuX2lyZXRfZGlyZWN0OwogCX0KIH0KIApAQCAtOTY4LDcgKzk5Myw3IEBACiAJLnJlYWRfdHNjID0gbmF0aXZlX3JlYWRfdHNjLAogCS5yZWFkX3BtYyA9IG5hdGl2ZV9yZWFkX3BtYywKIAotCS5pcmV0ID0gKHZvaWQgKikmaHlwZXJjYWxsX3BhZ2VbX19IWVBFUlZJU09SX2lyZXRdLAorCS5pcmV0ID0geGVuX2lyZXQsCiAJLmlycV9lbmFibGVfc3lzY2FsbF9yZXQgPSBOVUxMLCAgLyogbmV2ZXIgY2FsbGVkICovCiAKIAkubG9hZF90cl9kZXNjID0gcGFyYXZpcnRfbm9wLApAQCAtMTE4MSwxNSArMTIwNiw5IEBACiAJeDg2X3dyaXRlX3BlcmNwdSh4ZW5fY3IzLCBfX3BhKHBnZCkpOwogCXg4Nl93cml0ZV9wZXJjcHUoeGVuX2N1cnJlbnRfY3IzLCBfX3BhKHBnZCkpOwogCi0jaWZkZWYgQ09ORklHX1NNUAogCS8qIERvbid0IGRvIHRoZSBmdWxsIHZjcHVfaW5mbyBwbGFjZW1lbnQgc3R1ZmYgdW50aWwgd2UgaGF2ZSBhCi0JICAgcG9zc2libGUgbWFwLiAqLworCSAgIHBvc3NpYmxlIG1hcCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwotI2Vsc2UKLQkvKiBNYXkgYXMgd2VsbCBkbyBpdCBub3csIHNpbmNlIHRoZXJlJ3Mgbm8gZ29vZCB0aW1lIHRvIGNhbGwKLQkgICBpdCBsYXRlciBvbiBVUC4gKi8KLQl4ZW5fc2V0dXBfdmNwdV9pbmZvX3BsYWNlbWVudCgpOwotI2VuZGlmCiAKIAlwdl9pbmZvLmtlcm5lbF9ycGwgPSAxOwogCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX3N1cGVydmlzb3JfbW9kZV9rZXJuZWwpKQpAQCAtMTIwOSw2ICsxMjI4LDkgQEAKIAkJPyBfX3BhKHhlbl9zdGFydF9pbmZvLT5tb2Rfc3RhcnQpIDogMDsKIAlib290X3BhcmFtcy5oZHIucmFtZGlza19zaXplID0geGVuX3N0YXJ0X2luZm8tPm1vZF9sZW47CiAKKwlpZiAoIWlzX2luaXRpYWxfeGVuZG9tYWluKCkpCisJCWFkZF9wcmVmZXJyZWRfY29uc29sZSgiaHZjIiwgMCwgTlVMTCk7CisKIAkvKiBTdGFydCB0aGUgd29ybGQgKi8KIAlzdGFydF9rZXJuZWwoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCAwMTQ0Mzk1Li4yYTA1NGVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0zMTAsMTMgKzMxMCw2IEBACiB9CiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KIAotZW51bSBwdF9sZXZlbCB7Ci0JUFRfUEdELAotCVBUX1BVRCwKLQlQVF9QTUQsCi0JUFRfUFRFCi19OwotCiAvKgogICAoWWV0IGFub3RoZXIpIHBhZ2V0YWJsZSB3YWxrZXIuICBUaGlzIG9uZSBpcyBpbnRlbmRlZCBmb3IgcGlubmluZyBhCiAgIHBhZ2V0YWJsZS4gIFRoaXMgbWVhbnMgdGhhdCBpdCB3YWxrcyBhIHBhZ2V0YWJsZSBhbmQgY2FsbHMgdGhlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmggYi9hcmNoL3g4Ni94ZW4vbW11LmgKaW5kZXggYzlmZjI3Zi4uYjVlMTg5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5oCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuaApAQCAtMyw2ICszLDEzIEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKK2VudW0gcHRfbGV2ZWwgeworCVBUX1BHRCwKKwlQVF9QVUQsCisJUFRfUE1ELAorCVBUX1BURQorfTsKKwogLyoKICAqIFBhZ2UtZGlyZWN0b3J5IGFkZHJlc3NlcyBhYm92ZSA0R0IgZG8gbm90IGZpdCBpbnRvIGFyY2hpdGVjdHVyYWwgJWNyMy4KICAqIFdoZW4gYWNjZXNzaW5nICVjcjMsIG9yIGVxdWl2YWxlbnQgZmllbGQgaW4gdmNwdV9ndWVzdF9jb250ZXh0LCBndWVzdHMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMgYi9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCmluZGV4IDVlNmYzNmYuLjU3OTFlYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKKysrIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYwpAQCAtNzYsNyArNzYsNyBAQAogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVkIG11bHRpY2FsbChzKSBmYWlsZWQ6IGNwdSAlZFxuIiwKIAkJCSAgICAgICByZXQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCQlmb3IoaSA9IDA7IGkgPCBiLT5tY2lkeDsgaSsrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgYi0+bWNpZHg7IGkrKykgewogCQkJCXByaW50aygiICBjYWxsICUyZC8lZDogb3A9JWx1IGFyZz1bJWx4XSByZXN1bHQ9JWxkXG4iLAogCQkJCSAgICAgICBpKzEsIGItPm1jaWR4LAogCQkJCSAgICAgICBiLT5kZWJ1Z1tpXS5vcCwKQEAgLTkzLDcgKzkzLDcgQEAKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCWZvcihpID0gMDsgaSA8IGItPmNiaWR4OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYi0+Y2JpZHg7IGkrKykgewogCQlzdHJ1Y3QgY2FsbGJhY2sgKmNiID0gJmItPmNhbGxiYWNrc1tpXTsKIAogCQkoKmNiLT5mbikoY2ItPmRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NldHVwLmMgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwppbmRleCAzYmFkNDc3Li4yMzQxNDkyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwpAQCAtMzgsNyArMzgsOCBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X3BmbiA9IHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlczsKIAogCWU4MjAubnJfbWFwID0gMDsKLQlhZGRfbWVtb3J5X3JlZ2lvbigwLCBQRk5fUEhZUyhtYXhfcGZuKSwgRTgyMF9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKDAsIExPV01FTVNJWkUoKSwgRTgyMF9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKEhJR0hfTUVNT1JZLCBQRk5fUEhZUyhtYXhfcGZuKS1ISUdIX01FTU9SWSwgRTgyMF9SQU0pOwogCiAJcmV0dXJuICJYZW4iOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94ODYveGVuL3NtcC5jCmluZGV4IGFhZmM1NDQuLmUzNDBmZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJ4ZW4tb3BzLmgiCiAjaW5jbHVkZSAibW11LmgiCiAKLXN0YXRpYyBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkX21hcDsKK3N0YXRpYyBjcHVtYXNrX3QgeGVuX2NwdV9pbml0aWFsaXplZF9tYXA7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCByZXNjaGVkX2lycSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjYWxsZnVuY19pcnEpOwogCkBAIC0xNzksNyArMTc5LDcgQEAKIAlpZiAoeGVuX3NtcF9pbnRyX2luaXQoMCkpCiAJCUJVRygpOwogCi0JY3B1X2luaXRpYWxpemVkX21hcCA9IGNwdW1hc2tfb2ZfY3B1KDApOworCXhlbl9jcHVfaW5pdGlhbGl6ZWRfbWFwID0gY3B1bWFza19vZl9jcHUoMCk7CiAKIAkvKiBSZXN0cmljdCB0aGUgcG9zc2libGVfbWFwIGFjY29yZGluZyB0byBtYXhfY3B1cy4gKi8KIAl3aGlsZSAoKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKSAmJiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IG1heF9jcHVzKSkgewpAQCAtMjEwLDcgKzIxMCw3IEBACiAJc3RydWN0IHZjcHVfZ3Vlc3RfY29udGV4dCAqY3R4dDsKIAlzdHJ1Y3QgZ2R0X3BhZ2UgKmdkdCA9ICZwZXJfY3B1KGdkdF9wYWdlLCBjcHUpOwogCi0JaWYgKGNwdV90ZXN0X2FuZF9zZXQoY3B1LCBjcHVfaW5pdGlhbGl6ZWRfbWFwKSkKKwlpZiAoY3B1X3Rlc3RfYW5kX3NldChjcHUsIHhlbl9jcHVfaW5pdGlhbGl6ZWRfbWFwKSkKIAkJcmV0dXJuIDA7CiAKIAljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tYXNtLlMgYi9hcmNoL3g4Ni94ZW4veGVuLWFzbS5TCmluZGV4IDFhNDNiNjAuLmZlMTYxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4tYXNtLlMKKysrIGIvYXJjaC94ODYveGVuL3hlbi1hc20uUwpAQCAtMzMsMTIgKzMzLDE3IEBACiAJZXZlbnRzLCB0aGVuIGVudGVyIHRoZSBoeXBlcnZpc29yIHRvIGdldCB0aGVtIGhhbmRsZWQuCiAgKi8KIEVOVFJZKHhlbl9pcnFfZW5hYmxlX2RpcmVjdCkKLQkvKiBDbGVhciBtYXNrIGFuZCB0ZXN0IHBlbmRpbmcgKi8KLQlhbmR3ICQweDAwZmYsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pK1hFTl92Y3B1X2luZm9fcGVuZGluZworCS8qIFVubWFzayBldmVudHMgKi8KKwltb3ZiICQwLCBQRVJfQ1BVX1ZBUih4ZW5fdmNwdV9pbmZvKStYRU5fdmNwdV9pbmZvX21hc2sKKwogCS8qIFByZWVtcHQgaGVyZSBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHRoYXQgd2lsbCBkZWFsIHdpdGgKIAkgICBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLiAgVGhlIHBlbmRpbmcgY2hlY2sgbWF5IGVuZCB1cCBiZWluZwogCSAgIHJ1biBvbiB0aGUgd3JvbmcgQ1BVLCBidXQgdGhhdCBkb2Vzbid0IGh1cnQuICovCisKKwkvKiBUZXN0IGZvciBwZW5kaW5nICovCisJdGVzdGIgJDB4ZmYsIFBFUl9DUFVfVkFSKHhlbl92Y3B1X2luZm8pK1hFTl92Y3B1X2luZm9fcGVuZGluZwogCWp6IDFmCisKIDI6CWNhbGwgY2hlY2tfZXZlbnRzCiAxOgogRU5EUEFUQ0goeGVuX2lycV9lbmFibGVfZGlyZWN0KQpAQCAtMTMwLDEzICsxMzUsOCBAQAogCWN1cnJlbnQgc3RhY2sgc3RhdGUgaW4gd2hhdGV2ZXIgZm9ybSBpdHMgaW4sIHdlIGtlZXAgdGhpbmdzCiAJc2ltcGxlIGJ5IG9ubHkgdXNpbmcgYSBzaW5nbGUgcmVnaXN0ZXIgd2hpY2ggaXMgcHVzaGVkL3BvcHBlZAogCW9uIHRoZSBzdGFjay4KLQotCU5vbi1kaXJlY3QgaXJldCBjb3VsZCBiZSBkb25lIGluIHRoZSBzYW1lIHdheSwgYnV0IGl0IHdvdWxkCi0JcmVxdWlyZSBhbiBhbm5veWluZyBhbW91bnQgb2YgY29kZSBkdXBsaWNhdGlvbi4gIFdlJ2xsIGFzc3VtZQotCXRoYXQgZGlyZWN0IG1vZGUgd2lsbCBiZSB0aGUgY29tbW9uIGNhc2Ugb25jZSB0aGUgaHlwZXJ2aXNvcgotCXN1cHBvcnQgYmVjb21lcyBjb21tb25wbGFjZS4KICAqLwotRU5UUlkoeGVuX2lyZXRfZGlyZWN0KQorRU5UUlkoeGVuX2lyZXQpCiAJLyogdGVzdCBlZmxhZ3MgZm9yIHNwZWNpYWwgY2FzZXMgKi8KIAl0ZXN0bCAkKFg4Nl9FRkxBR1NfVk0gfCBYRU5fRUZMQUdTX05NSSksIDgoJWVzcCkKIAlqbnogaHlwZXJfaXJldApAQCAtMTUwLDkgKzE1MCw5IEBACiAJR0VUX1RIUkVBRF9JTkZPKCVlYXgpCiAJbW92bCBUSV9jcHUoJWVheCksJWVheAogCW1vdmwgX19wZXJfY3B1X29mZnNldCgsJWVheCw0KSwlZWF4Ci0JbGVhIHBlcl9jcHVfX3hlbl92Y3B1X2luZm8oJWVheCksJWVheAorCW1vdiBwZXJfY3B1X194ZW5fdmNwdSglZWF4KSwlZWF4CiAjZWxzZQotCW1vdmwgJHBlcl9jcHVfX3hlbl92Y3B1X2luZm8sICVlYXgKKwltb3ZsIHBlcl9jcHVfX3hlbl92Y3B1LCAlZWF4CiAjZW5kaWYKIAogCS8qIGNoZWNrIElGIHN0YXRlIHdlJ3JlIHJlc3RvcmluZyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3hlbi1vcHMuaCBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKaW5kZXggYjAyYTkwOS4uOTU2YTQ5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3hlbi1vcHMuaAorKysgYi9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCkBAIC02Myw1ICs2Myw1IEBACiBERUNMX0FTTSh1bnNpZ25lZCBsb25nLCB4ZW5fc2F2ZV9mbF9kaXJlY3QsIHZvaWQpOwogREVDTF9BU00odm9pZCwgeGVuX3Jlc3RvcmVfZmxfZGlyZWN0LCB1bnNpZ25lZCBsb25nKTsKIAotdm9pZCB4ZW5faXJldF9kaXJlY3Qodm9pZCk7Cit2b2lkIHhlbl9pcmV0KHZvaWQpOwogI2VuZGlmIC8qIFhFTl9PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvTWFrZWZpbGUgYi9hcmNoL3h0ZW5zYS9NYWtlZmlsZQppbmRleCA1NjY4NWE4Li40YmQxZTE0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9NYWtlZmlsZQorKysgYi9hcmNoL3h0ZW5zYS9NYWtlZmlsZQpAQCAtNTksNyArNTksNyBAQAogaGVhZC15CQk6PSBhcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5vCiBjb3JlLXkJCSs9IGFyY2gveHRlbnNhL2tlcm5lbC8gYXJjaC94dGVuc2EvbW0vCiBpZm5lcSAoJChQTEFURk9STSksKQotY29yZS15CQkrPSBhcmNoL3h0ZW5zYS9wbGF0Zm9ybS0kKFBMQVRGT1JNKS8KK2NvcmUteQkJKz0gYXJjaC94dGVuc2EvcGxhdGZvcm1zLyQoUExBVEZPUk0pLwogZW5kaWYKIGxpYnMteQkJKz0gYXJjaC94dGVuc2EvbGliLyAkKExJQkdDQykKIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvYm9vdC9ib290LWVsZi9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1lbGYvTWFrZWZpbGUKaW5kZXggNzM0ZGI3Zi4uMDhlODgxNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvYm9vdC9ib290LWVsZi9NYWtlZmlsZQorKysgYi9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtZWxmL01ha2VmaWxlCkBAIC0xNCwyNSArMTQsMjYgQEAKIGVuZGlmCiAKIGV4cG9ydCBPQkpDT1BZX0FSR1MKK2V4cG9ydCBDUFBGTEFHU19ib290LmxkcyArPSAtUCAtQwogCiBib290LXkJCTo9IGJvb3RzdHJhcC5vCiAKIE9CSlMJCTo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChib290LXkpKQogCi1JbWFnZToJdm1saW51eCAkKE9CSlMpCi0JJChPQkpDT1BZKSAtLXN0cmlwLWFsbCAtUiAuY29tbWVudCAtUiAueHQuaW5zbiAtTyBiaW5hcnkgXAorSW1hZ2U6CXZtbGludXggJChPQkpTKSBhcmNoLyQoQVJDSCkvYm9vdC9ib290LWVsZi9ib290LmxkcworCSQoT0JKQ09QWSkgLS1zdHJpcC1hbGwgLVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmJ1aWxkLWlkIC1PIGJpbmFyeSBcCiAJCXZtbGludXggdm1saW51eC50bXAKIAkkKE9CSkNPUFkpICQoT0JKQ09QWV9BUkdTKSAtUiAuY29tbWVudCBcCiAJCS0tYWRkLXNlY3Rpb24gaW1hZ2U9dm1saW51eC50bXAgXAogCQktLXNldC1zZWN0aW9uLWZsYWdzIGltYWdlPWNvbnRlbnRzLGFsbG9jLGxvYWQsbG9hZCxkYXRhIFwKIAkJJChPQkpTKSAkQC50bXAKIAkkKExEKSAkKExERkxBR1MpICQoTERGTEFHU192bWxpbnV4KSBcCi0JCS1UICQoc3JjdHJlZSkvYXJjaC8kKEFSQ0gpL2Jvb3QvYm9vdC1lbGYvYm9vdC5sZCBcCisJCS1UIGFyY2gvJChBUkNIKS9ib290L2Jvb3QtZWxmL2Jvb3QubGRzIFwKIAkJLW8gYXJjaC8kKEFSQ0gpL2Jvb3QvJEAuZWxmICRALnRtcAogCXJtIC1mICRALnRtcCB2bWxpbnV4LnRtcAogCiBJbWFnZS5pbml0cmQ6CXZtbGludXggJChPQkpTKQotCSQoT0JKQ09QWSkgLS1zdHJpcC1hbGwgLVIgLmNvbW1lbnQgLVIgLnh0Lmluc24gLU8gYmluYXJ5IFwKKwkkKE9CSkNPUFkpIC0tc3RyaXAtYWxsIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5idWlsZC1pZCAtTyBiaW5hcnkgXAogCQktLWFkZC1zZWN0aW9uIC5pbml0cmQ9YXJjaC8kKEFSQ0gpL2Jvb3QvcmFtZGlzayBcCiAJCS0tc2V0LXNlY3Rpb24tZmxhZ3MgLmluaXRyZD1jb250ZW50cyxhbGxvYyxsb2FkLGxvYWQsZGF0YSBcCiAJCXZtbGludXggdm1saW51eC50bXAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1lbGYvYm9vdC5sZCBiL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1lbGYvYm9vdC5sZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiMDZhMC4uMDAwMDAwMAotLS0gYS9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtZWxmL2Jvb3QubGQKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1PVVRQVVRfQVJDSCh4dGVuc2EpCi0KLVNFQ1RJT05TCi17Ci0JLnN0YXJ0IDB4RDAwMDAwMDAgOiB7ICooLnN0YXJ0KSB9Ci0KLQkudGV4dCAweEQwMDAwMDAwOgotCXsKLQkJX19yZWxvY19zdGFydCA9IC4gOwotCQlfdGV4dF9zdGFydCA9IC4gOwotCQkqKC5saXRlcmFsIC50ZXh0LmxpdGVyYWwgLnRleHQpCi0JCV90ZXh0X2VuZCA9IC4gOwotCX0KLQotCS5yb2RhdGEgQUxJR04oMHgwNCk6Ci0JewotCQkqKC5yb2RhdGEpCi0JCSooLnJvZGF0YTEpCi0JfQotCi0JLmRhdGEgQUxJR04oMHgwNCk6Ci0JewotCQkqKC5kYXRhKQotCQkqKC5kYXRhMSkKLQkJKiguc2RhdGEpCi0JCSooLnNkYXRhMikKLQkJKiguZ290LnBsdCkKLQkJKiguZ290KQotCQkqKC5keW5hbWljKQotCX0KLQotCV9fcmVsb2NfZW5kID0gLiA7Ci0KLQkuaW5pdHJkIEFMSUdOKDB4MTApIDoKLQl7Ci0JCWJvb3RfaW5pdHJkX3N0YXJ0ID0gLiA7Ci0JCSooLmluaXRyZCkKLQkJYm9vdF9pbml0cmRfZW5kID0gLjsKLQl9Ci0KLQkuID0gQUxJR04oMHgxMCk7Ci0JX19pbWFnZV9sb2FkID0gLiA7Ci0JLmltYWdlIDB4ZDAwMDEwMDA6Ci0JewotCQlfaW1hZ2Vfc3RhcnQgPSAuOwotCQkqKGltYWdlKQotCQkuID0gKC4gKyAzKSAmIH4gMzsKLQkJX2ltYWdlX2VuZCA9IC4JOwotCX0KLQotCi0JLmJzcyAoKExPQURBRERSKC5pbWFnZSkgKyBTSVpFT0YoLmltYWdlKSArIDMpICYgfiAzKToKLQl7Ci0JCV9fYnNzX3N0YXJ0ID0gLjsKLQkJKiguc2JzcykKLQkJKiguc2NvbW1vbikKLQkJKiguZHluYnNzKQotCQkqKC5ic3MpCi0JCV9fYnNzX2VuZCA9IC47Ci0JfQotCV9lbmQgPSAuOwotCV9wYXJhbV9zdGFydCA9IC47Ci0KLQkuUmVzZXRWZWN0b3IudGV4dCAweGZlMDAwMDIwIDoKLQl7Ci0JCSooLlJlc2V0VmVjdG9yLnRleHQpCi0JfQotCi0KLQlQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1lbGYvYm9vdC5sZHMuUyBiL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1lbGYvYm9vdC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDlkZmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvYm9vdC9ib290LWVsZi9ib290Lmxkcy5TCkBAIC0wLDAgKzEsNzMgQEAKKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CitPVVRQVVRfQVJDSCh4dGVuc2EpCitFTlRSWShfUmVzZXRWZWN0b3IpCisKK1NFQ1RJT05TCit7CisJLnN0YXJ0IDB4RDAwMDAwMDAgOiB7ICooLnN0YXJ0KSB9CisKKwkudGV4dCAweEQwMDAwMDAwOgorCXsKKwkJX19yZWxvY19zdGFydCA9IC4gOworCQlfdGV4dF9zdGFydCA9IC4gOworCQkqKC5saXRlcmFsIC50ZXh0LmxpdGVyYWwgLnRleHQpCisJCV90ZXh0X2VuZCA9IC4gOworCX0KKworCS5yb2RhdGEgQUxJR04oMHgwNCk6CisJeworCQkqKC5yb2RhdGEpCisJCSooLnJvZGF0YTEpCisJfQorCisJLmRhdGEgQUxJR04oMHgwNCk6CisJeworCQkqKC5kYXRhKQorCQkqKC5kYXRhMSkKKwkJKiguc2RhdGEpCisJCSooLnNkYXRhMikKKwkJKiguZ290LnBsdCkKKwkJKiguZ290KQorCQkqKC5keW5hbWljKQorCX0KKworCV9fcmVsb2NfZW5kID0gLiA7CisKKwkuaW5pdHJkIEFMSUdOKDB4MTApIDoKKwl7CisJCWJvb3RfaW5pdHJkX3N0YXJ0ID0gLiA7CisJCSooLmluaXRyZCkKKwkJYm9vdF9pbml0cmRfZW5kID0gLjsKKwl9CisKKwkuID0gQUxJR04oMHgxMCk7CisJX19pbWFnZV9sb2FkID0gLiA7CisJLmltYWdlIDB4ZDAwMDEwMDA6CisJeworCQlfaW1hZ2Vfc3RhcnQgPSAuOworCQkqKGltYWdlKQorCQkuID0gKC4gKyAzKSAmIH4gMzsKKwkJX2ltYWdlX2VuZCA9IC4JOworCX0KKworCisJLmJzcyAoKExPQURBRERSKC5pbWFnZSkgKyBTSVpFT0YoLmltYWdlKSArIDMpICYgfiAzKToKKwl7CisJCV9fYnNzX3N0YXJ0ID0gLjsKKwkJKiguc2JzcykKKwkJKiguc2NvbW1vbikKKwkJKiguZHluYnNzKQorCQkqKC5ic3MpCisJCV9fYnNzX2VuZCA9IC47CisJfQorCV9lbmQgPSAuOworCV9wYXJhbV9zdGFydCA9IC47CisKKwkuUmVzZXRWZWN0b3IudGV4dCBYQ0hBTF9SRVNFVF9WRUNUT1JfVkFERFIgOgorCXsKKwkJKiguUmVzZXRWZWN0b3IudGV4dCkKKwl9CisKKworCVBST1ZJREUgKGVuZCA9IC4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvYm9vdC9ib290LXJlZGJvb3QvTWFrZWZpbGUgYi9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtcmVkYm9vdC9NYWtlZmlsZQppbmRleCA3NGQxNWQwLi44NzIwMjliIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtcmVkYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtcmVkYm9vdC9NYWtlZmlsZQpAQCAtMjIsNyArMjIsNyBAQAogTElCR0NDIDo9ICQoc2hlbGwgJChDQykgJChLQlVJTERfQ0ZMQUdTKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSkKIAogekltYWdlOiB2bWxpbnV4ICQoT0JKUykgJChMSUJTKQotCSQoT0JKQ09QWSkgLS1zdHJpcC1hbGwgLVIgLmNvbW1lbnQgLVIgLnh0Lmluc24gLU8gYmluYXJ5IFwKKwkkKE9CSkNPUFkpIC0tc3RyaXAtYWxsIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5idWlsZC1pZCAtTyBiaW5hcnkgXAogCQl2bWxpbnV4IHZtbGludXgudG1wCiAJZ3ppcCAtdmY5IHZtbGludXgudG1wCiAJJChPQkpDT1BZKSAkKE9CSkNPUFlfQVJHUykgLVIgLmNvbW1lbnQgXApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvYm9vdC9ib290LXJlZGJvb3QvYm9vdC5sZCBiL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1yZWRib290L2Jvb3QubGQKaW5kZXggNjViNzI2NC4uNzc0ZGIyMCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvYm9vdC9ib290LXJlZGJvb3QvYm9vdC5sZAorKysgYi9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtcmVkYm9vdC9ib290LmxkCkBAIC0yLDcgKzIsNyBAQAogCiBTRUNUSU9OUwogewotCS5zdGFydCAweEQwMjAwMDAwIDogeyAqKC5zdGFydCkgfQorCS5zdGFydCAweEQxMDAwMDAwIDogeyAqKC5zdGFydCkgfQogCiAJLnRleHQgOgogCXsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZQppbmRleCBmNTgyZDZhLi43NDE5ZGJjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogZXh0cmEteSA6PSBoZWFkLm8gdm1saW51eC5sZHMKIAogCi1vYmoteSA6PSBhbGlnbi5vIGVudHJ5Lm8gaXJxLm8gY29wcm9jZXNzb3IubyBwcm9jZXNzLm8gcHRyYWNlLm8gc2VtYXBob3JlLm8gIFwKK29iai15IDo9IGFsaWduLm8gZW50cnkubyBpcnEubyBjb3Byb2Nlc3Nvci5vIHByb2Nlc3MubyBwdHJhY2UubyBcCiAJIHNldHVwLm8gc2lnbmFsLm8gc3lzY2FsbC5vIHRpbWUubyB0cmFwcy5vIHZlY3RvcnMubyBwbGF0Zm9ybS5vICBcCiAJIHBjaS1kbWEubyBpbml0X3Rhc2subyBpby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZDVmZmU3Yi4uZWY2M2FkYSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIERFRklORShzeW0sIHZhbCkgYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCkBAIC02NCw2ICs2Myw4IEBACiAJREVGSU5FKFBUX1NJWkUsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogCURFRklORShQVF9BUkVHX0VORCwgb2Zmc2V0b2YgKHN0cnVjdCBwdF9yZWdzLCBhcmVnW1hDSEFMX05VTV9BUkVHU10pKTsKIAlERUZJTkUoUFRfVVNFUl9TSVpFLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYXJlZ1tYQ0hBTF9OVU1fQVJFR1NdKSk7CisJREVGSU5FKFBUX1hUUkVHU19PUFQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCB4dHJlZ3Nfb3B0KSk7CisJREVGSU5FKFhUUkVHU19PUFRfU0laRSwgc2l6ZW9mKHh0cmVnc19vcHRfdCkpOwogCiAJLyogc3RydWN0IHRhc2tfc3RydWN0ICovCiAJREVGSU5FKFRBU0tfUFRSQUNFLCBvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2UpKTsKQEAgLTc3LDcgKzc4LDE5IEBACiAJLyogc3RydWN0IHRocmVhZF9pbmZvIChvZmZzZXQgZnJvbSBzdGFydF9zdHJ1Y3QpICovCiAJREVGSU5FKFRIUkVBRF9SQSwgb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnJhKSk7CiAJREVGSU5FKFRIUkVBRF9TUCwgb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnNwKSk7Ci0JREVGSU5FKFRIUkVBRF9DUF9TQVZFLCBvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuY3Bfc2F2ZSkpOworCURFRklORShUSFJFQURfQ1BFTkFCTEUsIG9mZnNldG9mIChzdHJ1Y3QgdGhyZWFkX2luZm8sIGNwZW5hYmxlKSk7CisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisJREVGSU5FKFRIUkVBRF9YVFJFR1NfQ1AwLCBvZmZzZXRvZiAoc3RydWN0IHRocmVhZF9pbmZvLCB4dHJlZ3NfY3ApKTsKKwlERUZJTkUoVEhSRUFEX1hUUkVHU19DUDEsIG9mZnNldG9mIChzdHJ1Y3QgdGhyZWFkX2luZm8sIHh0cmVnc19jcCkpOworCURFRklORShUSFJFQURfWFRSRUdTX0NQMiwgb2Zmc2V0b2YgKHN0cnVjdCB0aHJlYWRfaW5mbywgeHRyZWdzX2NwKSk7CisJREVGSU5FKFRIUkVBRF9YVFJFR1NfQ1AzLCBvZmZzZXRvZiAoc3RydWN0IHRocmVhZF9pbmZvLCB4dHJlZ3NfY3ApKTsKKwlERUZJTkUoVEhSRUFEX1hUUkVHU19DUDQsIG9mZnNldG9mIChzdHJ1Y3QgdGhyZWFkX2luZm8sIHh0cmVnc19jcCkpOworCURFRklORShUSFJFQURfWFRSRUdTX0NQNSwgb2Zmc2V0b2YgKHN0cnVjdCB0aHJlYWRfaW5mbywgeHRyZWdzX2NwKSk7CisJREVGSU5FKFRIUkVBRF9YVFJFR1NfQ1A2LCBvZmZzZXRvZiAoc3RydWN0IHRocmVhZF9pbmZvLCB4dHJlZ3NfY3ApKTsKKwlERUZJTkUoVEhSRUFEX1hUUkVHU19DUDcsIG9mZnNldG9mIChzdHJ1Y3QgdGhyZWFkX2luZm8sIHh0cmVnc19jcCkpOworI2VuZGlmCisJREVGSU5FKFRIUkVBRF9YVFJFR1NfVVNFUiwgb2Zmc2V0b2YgKHN0cnVjdCB0aHJlYWRfaW5mbywgeHRyZWdzX3VzZXIpKTsKKwlERUZJTkUoWFRSRUdTX1VTRVJfU0laRSwgc2l6ZW9mKHh0cmVnc191c2VyX3QpKTsKIAlERUZJTkUoVEhSRUFEX0NVUlJFTlRfRFMsIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5jdXJyZW50X2RzKSk7CiAKIAkvKiBzdHJ1Y3QgbW1fc3RydWN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvY29wcm9jZXNzb3IuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC9jb3Byb2Nlc3Nvci5TCmluZGV4IDAxYmNiOWYuLjJiYzFlMTQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9jb3Byb2Nlc3Nvci5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9jb3Byb2Nlc3Nvci5TCkBAIC04LDE5MyArOCwzMjggQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBUZW5zaWxpY2EgSW5jLgotICoKLSAqIE1hcmMgR2F1dGhpZXIgPG1hcmNAdGVuc2lsaWNhLmNvbT4gPG1hcmNAYWx1bW5pLnV3YXRlcmxvby5jYT4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDcgVGVuc2lsaWNhIEluYy4KICAqLwogCi0vKgotICogVGhpcyBtb2R1bGUgY29udGFpbnMgYSB0YWJsZSB0aGF0IGRlc2NyaWJlcyB0aGUgbGF5b3V0IG9mIHRoZSB2YXJpb3VzCi0gKiBjdXN0b20gcmVnaXN0ZXJzIGFuZCBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggY29wcm9jZXNzb3IsIGFzIHdlbGwKLSAqIGFzIHRob3NlIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IGNvcHJvY2Vzc29yICgiZXh0cmEgc3RhdGUiKS4KLSAqIFRoaXMgdGFibGUgaXMgaW5jbHVkZWQgd2l0aCBjb3JlIGR1bXBzIGFuZCBpcyBhdmFpbGFibGUgdmlhIHRoZSBwdHJhY2UKLSAqIGludGVyZmFjZSwgYWxsb3dpbmcgdGhlIGxheW91dCBvZiBzdWNoIHJlZ2lzdGVyL3N0YXRlIGluZm9ybWF0aW9uIHRvCi0gKiBiZSBtb2RpZmllZCBpbiB0aGUga2VybmVsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBkZWJ1Z2dlci4gIEVhY2gKLSAqIHJlZ2lzdGVyIG9yIHN0YXRlIGlzIGlkZW50aWZpZWQgdXNpbmcgYSAzMi1iaXQgImxpYmRiIHRhcmdldCBudW1iZXIiCi0gKiBhc3NpZ25lZCB3aGVuIHRoZSBYdGVuc2EgcHJvY2Vzc29yIGlzIGdlbmVyYXRlZC4KLSAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY29wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi0jaWYgWENIQUxfSEFWRV9DUAorLyoKKyAqIEVudHJ5IGNvbmRpdGlvbjoKKyAqCisgKiAgIGEwOgl0cmFzaGVkLCBvcmlnaW5hbCB2YWx1ZSBzYXZlZCBvbiBzdGFjayAoUFRfQVJFRzApCisgKiAgIGExOglhMQorICogICBhMjoJbmV3IHN0YWNrIHBvaW50ZXIsIG9yaWdpbmFsIGluIERFUEMKKyAqICAgYTM6CWRpc3BhdGNoIHRhYmxlCisgKiAgIGRlcGM6CWEyLCBvcmlnaW5hbCB2YWx1ZSBzYXZlZCBvbiBzdGFjayAoUFRfREVQQykKKyAqICAgZXhjc2F2ZV8xOglhMworICoKKyAqICAgUFRfREVQQyA+PSBWQUxJRF9ET1VCTEVfRVhDRVBUSU9OX0FERFJFU1M6IGRvdWJsZSBleGNlcHRpb24sIERFUEMKKyAqCSAgICAgPCAgVkFMSURfRE9VQkxFX0VYQ0VQVElPTl9BRERSRVNTOiByZWd1bGFyIGV4Y2VwdGlvbgorICovCiAKLSNkZWZpbmUgQ1BfTEFTVCAoKFhDSEFMX0NQX01BWCAtIDEpICogQ09QUk9DRVNTT1JfSU5GT19TSVpFKQorLyogSU8gcHJvdGVjdGlvbiBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuICovCiAKLUVOVFJZKHJlbGVhc2VfY29wcm9jZXNzb3JzKQorRU5UUlkoZmFzdF9pb19wcm90ZWN0KQorCXdzcglhMCwgRVhDU0FWRV8xCisJbW92aQlhMCwgdW5yZWNvdmVyYWJsZV9leGNlcHRpb24KKwljYWxseDAJYTAKIAotCWVudHJ5CWExLCAxNgotCQkJCQkJIyBhMjogdGFzawotCW1vdmkJYTMsIDEgPDwgWENIQUxfQ1BfTUFYIAkJIyBhMzogY29wcm9jZXNzb3ItYml0Ci0JbW92aQlhNCwgY29wcm9jZXNzb3JfaW5mbytDUF9MQVNUCSMgYTQ6IG93bmVyLXRhYmxlCi0JCQkJCQkjIGE1OiB0bXAKLQltb3ZpCWE2LCAwCQkJCSMgYTY6IDAKLQlyc2lsCWE3LCBMT0NLTEVWRUwJCQkjIGE3OiBQUworI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SUwogCi0xOgkvKiBDaGVjayBpZiB0YXNrIGlzIGNvcHJvY2Vzc29yIG93bmVyIG9mIGNvcHJvY2Vzc29yW2ldLiAqLworLyoKKyAqIE1hY3JvcyBmb3IgbGF6eSBjb250ZXh0IHN3aXRjaC4gCisgKi8KIAotCWwzMmkJYTUsIGE0LCBDT1BST0NFU1NPUl9JTkZPX09XTkVSCi0Jc3JsaQlhMywgYTMsIDEKKyNkZWZpbmUgU0FWRV9DUF9SRUdTKHgpCQkJCQkJCVwKKwkuYWxpZ24gNDsJCQkJCQkJXAorCS5Mc2F2ZV9jcF9yZWdzX2NwIyN4OgkJCQkJCVwKKwkuaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1IoeCk7CQkJCQlcCisJCXhjaGFsX2NwIyN4IyNfc3RvcmUgYTIgYTQgYTUgYTYgYTc7CQkJXAorCS5lbmRpZjsJCQkJCQkJCVwKKwlqeAlhMAorCisjZGVmaW5lIFNBVkVfQ1BfUkVHU19UQUIoeCkJCQkJCQlcCisJLmlmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKHgpOwkJCQkJXAorCQkubG9uZyAuTHNhdmVfY3BfcmVnc19jcCMjeCAtIC5Mc2F2ZV9jcF9yZWdzX2p1bXBfdGFibGU7CVwKKwkuZWxzZTsJCQkJCQkJCVwKKwkJLmxvbmcgMDsJCQkJCQlcCisJLmVuZGlmOwkJCQkJCQkJXAorCS5sb25nIFRIUkVBRF9YVFJFR1NfQ1AjI3gKKworCisjZGVmaW5lIExPQURfQ1BfUkVHUyh4KQkJCQkJCQlcCisJLmFsaWduIDQ7CQkJCQkJCVwKKwkuTGxvYWRfY3BfcmVnc19jcCMjeDoJCQkJCQlcCisJLmlmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKHgpOwkJCQkJXAorCQl4Y2hhbF9jcCMjeCMjX2xvYWQgYTIgYTQgYTUgYTYgYTc7CQkJXAorCS5lbmRpZjsJCQkJCQkJCVwKKwlqeAlhMAorCisjZGVmaW5lIExPQURfQ1BfUkVHU19UQUIoeCkJCQkJCQlcCisJLmlmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKHgpOwkJCQkJXAorCQkubG9uZyAuTGxvYWRfY3BfcmVnc19jcCMjeCAtIC5MbG9hZF9jcF9yZWdzX2p1bXBfdGFibGU7IFwKKwkuZWxzZTsJCQkJCQkJCVwKKwkJLmxvbmcgMDsJCQkJCQlcCisJLmVuZGlmOwkJCQkJCQkJXAorCS5sb25nIFRIUkVBRF9YVFJFR1NfQ1AjI3gKKworCVNBVkVfQ1BfUkVHUygwKQorCVNBVkVfQ1BfUkVHUygxKQorCVNBVkVfQ1BfUkVHUygyKQorCVNBVkVfQ1BfUkVHUygzKQorCVNBVkVfQ1BfUkVHUyg0KQorCVNBVkVfQ1BfUkVHUyg1KQorCVNBVkVfQ1BfUkVHUyg2KQorCVNBVkVfQ1BfUkVHUyg3KQorCisJTE9BRF9DUF9SRUdTKDApCisJTE9BRF9DUF9SRUdTKDEpCisJTE9BRF9DUF9SRUdTKDIpCisJTE9BRF9DUF9SRUdTKDMpCisJTE9BRF9DUF9SRUdTKDQpCisJTE9BRF9DUF9SRUdTKDUpCisJTE9BRF9DUF9SRUdTKDYpCisJTE9BRF9DUF9SRUdTKDcpCisKKwkuYWxpZ24gNAorLkxzYXZlX2NwX3JlZ3NfanVtcF90YWJsZToKKwlTQVZFX0NQX1JFR1NfVEFCKDApCisJU0FWRV9DUF9SRUdTX1RBQigxKQorCVNBVkVfQ1BfUkVHU19UQUIoMikKKwlTQVZFX0NQX1JFR1NfVEFCKDMpCisJU0FWRV9DUF9SRUdTX1RBQig0KQorCVNBVkVfQ1BfUkVHU19UQUIoNSkKKwlTQVZFX0NQX1JFR1NfVEFCKDYpCisJU0FWRV9DUF9SRUdTX1RBQig3KQorCisuTGxvYWRfY3BfcmVnc19qdW1wX3RhYmxlOgorCUxPQURfQ1BfUkVHU19UQUIoMCkKKwlMT0FEX0NQX1JFR1NfVEFCKDEpCisJTE9BRF9DUF9SRUdTX1RBQigyKQorCUxPQURfQ1BfUkVHU19UQUIoMykKKwlMT0FEX0NQX1JFR1NfVEFCKDQpCisJTE9BRF9DUF9SRUdTX1RBQig1KQorCUxPQURfQ1BfUkVHU19UQUIoNikKKwlMT0FEX0NQX1JFR1NfVEFCKDcpCisKKy8qCisgKiBjb3Byb2Nlc3Nvcl9zYXZlKGJ1ZmZlciwgaW5kZXgpIAorICogICAgICAgICAgICAgICAgICAgIGEyICAgICAgYTMKKyAqIGNvcHJvY2Vzc29yX2xvYWQoYnVmZmVyLCBpbmRleCkKKyAqICAgICAgICAgICAgICAgICAgICBhMiAgICAgIGEzCisgKgorICogU2F2ZSBvciBsb2FkIGNvcHJvY2Vzc29yIHJlZ2lzdGVycyBmb3IgY29wcm9jZXNzb3IgJ2luZGV4Jy4gCisgKiBUaGUgcmVnaXN0ZXIgdmFsdWVzIGFyZSBzYXZlZCB0byBvciBsb2FkZWQgZnJvbSB0aGVtICdidWZmZXInIGFkZHJlc3MuCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24ndCB1cGRhdGUgdGhlIGNvcHJvY2Vzc29yX293bmVyIGluZm9ybWF0aW9uIQorICoKKyAqLworCitFTlRSWShjb3Byb2Nlc3Nvcl9zYXZlKQorCWVudHJ5CWExLCAzMgorCXMzMmkJYTAsIGExLCAwCisJbW92aQlhMCwgLkxzYXZlX2NwX3JlZ3NfanVtcF90YWJsZQorCWFkZHg4CWEzLCBhMywgYTAKKwlsMzJpCWEzLCBhMywgMAogCWJlcXoJYTMsIDFmCi0JYWRkaQlhNCwgYTQsIC04Ci0JYmVxCWEyLCBhNSwgMWIKLQotCS8qIEZvdW5kIGFuIGVudHJ5OiBDbGVhciBlbnRyeSBDUEVOQUJMRSBiaXQgdG8gZGlzYWJsZSBDUC4gKi8KLQotCXJzcglhNSwgQ1BFTkFCTEUKLQlzMzJpCWE2LCBhNCwgQ09QUk9DRVNTT1JfSU5GT19PV05FUgotCXhvcglhNSwgYTMsIGE1Ci0Jd3NyCWE1LCBDUEVOQUJMRQotCi0JYm5leglhMywgMWIKLQotMToJd3NyCWE3LCBQUwotCXJzeW5jCisJYWRkCWEwLCBhMCwgYTMKKwljYWxseDAJYTAKKzE6CWwzMmkJYTAsIGExLCAwCiAJcmV0dwogCi0KLUVOVFJZKGRpc2FibGVfY29wcm9jZXNzb3IpCi0JZW50cnkJc3AsIDE2Ci0JcnNpbAlhNywgTE9DS0xFVkVMCi0JcnNyCWEzLCBDUEVOQUJMRQotCW1vdmkJYTQsIDEKLQlzc2wJYTIKLQlzbGwJYTQsIGE0Ci0JYW5kCWE0LCBhMywgYTQKLQl4b3IJYTMsIGEzLCBhNAotCXdzcglhMywgQ1BFTkFCTEUKLQl3c3IJYTcsIFBTCi0JcnN5bmMKK0VOVFJZKGNvcHJvY2Vzc29yX2xvYWQpCisJZW50cnkJYTEsIDMyCisJczMyaQlhMCwgYTEsIDAKKwltb3ZpCWEwLCAuTGxvYWRfY3BfcmVnc19qdW1wX3RhYmxlCisJYWRkeDQJYTMsIGEzLCBhMAorCWwzMmkJYTMsIGEzLCAwCisJYmVxeglhMywgMWYKKwlhZGQJYTAsIGEwLCBhMworCWNhbGx4MAlhMAorMToJbDMyaQlhMCwgYTEsIDAKIAlyZXR3CiAKLUVOVFJZKGVuYWJsZV9jb3Byb2Nlc3NvcikKLQllbnRyeQlzcCwgMTYKLQlyc2lsCWE3LCBMT0NLTEVWRUwKLQlyc3IJYTMsIENQRU5BQkxFCi0JbW92aQlhNCwgMQotCXNzbAlhMgotCXNsbAlhNCwgYTQKLQlvcglhMywgYTMsIGE0Ci0Jd3NyCWEzLCBDUEVOQUJMRQotCXdzcglhNywgUFMKLQlyc3luYwotCXJldHcKLQotCi1FTlRSWShzYXZlX2NvcHJvY2Vzc29yX2V4dHJhKQotCWVudHJ5CXNwLCAxNgotCXhjaGFsX2V4dHJhX3N0b3JlX2Z1bmNib2R5Ci0JcmV0dwotCi1FTlRSWShyZXN0b3JlX2NvcHJvY2Vzc29yX2V4dHJhKQotCWVudHJ5CXNwLCAxNgotCXhjaGFsX2V4dHJhX2xvYWRfZnVuY2JvZHkKLQlyZXR3Ci0KLUVOVFJZKHNhdmVfY29wcm9jZXNzb3JfcmVnaXN0ZXJzKQotCWVudHJ5CXNwLCAxNgotCXhjaGFsX2NwaV9zdG9yZV9mdW5jYm9keQotCXJldHcKLQotRU5UUlkocmVzdG9yZV9jb3Byb2Nlc3Nvcl9yZWdpc3RlcnMpCi0JZW50cnkJc3AsIDE2Ci0JeGNoYWxfY3BpX2xvYWRfZnVuY2JvZHkKLQlyZXR3Ci0KLQogLyoKLSAqICBUaGUgWHRlbnNhIGNvbXBpbGUtdGltZSBIQUwgKGNvcmUuaCkgWENIQUxfKl9TQV9DT05URU5UU19MSUJEQiBtYWNyb3MKLSAqICBkZXNjcmliZSB0aGUgY29udGVudHMgb2YgY29wcm9jZXNzb3IgJiBleHRyYSBzYXZlIGFyZWFzIGluIHRlcm1zIG9mCi0gKiAgdW5kZWZpbmVkIENPTlRFTlRTX0xJQkRCX3tTUkVHLFVSRUcsUkVHRn0gbWFjcm9zLiAgV2UgZGVmaW5lIHRoZXNlCi0gKiAgbGF0dGVyIG1hY3JvcyBoZXJlOyB0aGV5IGV4cGFuZCBpbnRvIGEgdGFibGUgb2YgdGhlIGZvcm1hdCB3ZSB3YW50LgotICogIFRoZSBnZW5lcmFsIGZvcm1hdCBpczoKKyAqIGNvcHJvY2Vzc29yX2ZsdXNoKHN0cnVjdCB0YXNrX2luZm8qLCBpbmRleCkgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTIgICAgICAgIGEzCisgKiBjb3Byb2Nlc3Nvcl9yZXN0b3JlKHN0cnVjdCB0YXNrX2luZm8qLCBpbmRleCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTIgICAgICAgICBhMwogICoKLSAqCUNPTlRFTlRTX0xJQkRCX1NSRUcobGliZGJudW0sIG9mZnNldCwgc2l6ZSwgYWxpZ24sIHJzdjEsIG5hbWUsIHNyZWdudW0sCi0gKgkJCSAgICBiaXRtYXNrLCByc3YyLCByc3YzKQotICoJQ09OVEVOVFNfTElCREJfVVJFRyhsaWJkYm51bSwgb2Zmc2V0LCBzaXplLCBhbGlnbiwgcnN2MSwgbmFtZSwgdXJlZ251bSwKLSAqCQkJICAgIGJpdG1hc2ssIHJzdjIsIHJzdjMpCi0gKglDT05URU5UU19MSUJEQl9SRUdGKGxpYmRibnVtLCBvZmZzZXQsIHNpemUsIGFsaWduLCByc3YxLCBuYW1lLCBpbmRleCwKLSAqCQkJICAgIG51bWVudHJpZXMsIGNvbnRlbnRzaXplLCByZWduYW1lX2Jhc2UsCi0gKgkJCSAgICByZWdmaWxlX25hbWUsIHJzdjIsIHJzdjMpCisgKiBTYXZlIG9yIGxvYWQgY29wcm9jZXNzb3IgcmVnaXN0ZXJzIGZvciBjb3Byb2Nlc3NvciAnaW5kZXgnLiAKKyAqIFRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIHNhdmVkIHRvIG9yIGxvYWRlZCBmcm9tIHRoZSBjb3Byb2Nlc3NvciBhcmVhIAorICogaW5zaWRlIHRoZSB0YXNrX2luZm8gc3RydWN0dXJlLgogICoKLSAqICBGb3IgdGhpcyB0YWJsZSwgd2Ugb25seSBjYXJlIGFib3V0IHRoZSA8bGliZGJudW0+LCA8b2Zmc2V0PiBhbmQgPHNpemU+Ci0gKiAgZmllbGRzLgorICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24ndCB1cGRhdGUgdGhlIGNvcHJvY2Vzc29yX293bmVyIGluZm9ybWF0aW9uIQorICoKICAqLwogCi0vKiAgTWFwIGFsbCBYQ0hBTCBDT05URU5UUyBtYWNyb3MgdG8gdGhlIHJlZ19lbnRyeSBhc20gbWFjcm8gZGVmaW5lZCBiZWxvdzogICovCiAKLSNkZWZpbmUgQ09OVEVOVFNfTElCREJfU1JFRyhsaWJkYm51bSxvZmZzZXQsc2l6ZSxhbGlnbixyc3YxLG5hbWUsc3JlZ251bSwgICAgIFwKLQkJCSAgICBiaXRtYXNrLCByc3YyLCByc3YzKQkJCSAgICAgIFwKLQkJcmVnX2VudHJ5IGxpYmRibnVtLCBvZmZzZXQsIHNpemUgOwotI2RlZmluZSBDT05URU5UU19MSUJEQl9VUkVHKGxpYmRibnVtLG9mZnNldCxzaXplLGFsaWduLHJzdjEsbmFtZSx1cmVnbnVtLCAgICAgXAotCQkJICAgIGJpdG1hc2ssIHJzdjIsIHJzdjMpCQkJICAgICAgXAotCQlyZWdfZW50cnkgbGliZGJudW0sIG9mZnNldCwgc2l6ZSA7Ci0jZGVmaW5lIENPTlRFTlRTX0xJQkRCX1JFR0YobGliZGJudW0sIG9mZnNldCwgc2l6ZSwgYWxpZ24sIHJzdjEsIG5hbWUsIGluZGV4LCBcCi0JCQkgICAgbnVtZW50cmllcywgY29udGVudHNpemUsIHJlZ25hbWVfYmFzZSwJICAgICAgXAotCQkJICAgIHJlZ2ZpbGVfbmFtZSwgcnN2MiwgcnN2MykJCQkgICAgICBcCi0JCXJlZ19lbnRyeSBsaWJkYm51bSwgb2Zmc2V0LCBzaXplIDsKK0VOVFJZKGNvcHJvY2Vzc29yX2ZsdXNoKQorCWVudHJ5CWExLCAzMgorCXMzMmkJYTAsIGExLCAwCisJbW92aQlhMCwgLkxzYXZlX2NwX3JlZ3NfanVtcF90YWJsZQorCWFkZHg4CWEzLCBhMywgYTAKKwlsMzJpCWE0LCBhMywgNAorCWwzMmkJYTMsIGEzLCAwCisJYWRkCWEyLCBhMiwgYTQKKwliZXF6CWEzLCAxZgorCWFkZAlhMCwgYTAsIGEzCisJY2FsbHgwCWEwCisxOglsMzJpCWEwLCBhMSwgMAorCXJldHcKIAotLyogQSBzaW5nbGUgdGFibGUgZW50cnk6ICovCi0JLm1hY3JvCXJlZ19lbnRyeQlsaWJkYm51bSwgb2Zmc2V0LCBzaXplCi0JIC5pZm5lCShfX2xhc3Rfb2Zmc2V0LShfX2xhc3RfZ3JvdXBfb2Zmc2V0K1xvZmZzZXQpKQotCSAgLyogcGFkZGluZyBlbnRyeSAqLwotCSAgLndvcmQJKDB4RkMwMDAwMDArX19sYXN0X29mZnNldC0oX19sYXN0X2dyb3VwX29mZnNldCtcb2Zmc2V0KSkKLQkgLmVuZGlmCi0JIC53b3JkCVxsaWJkYm51bQkJCQkvKiBhY3R1YWwgZW50cnkgKi8KLQkgLnNldAlfX2xhc3Rfb2Zmc2V0LCBfX2xhc3RfZ3JvdXBfb2Zmc2V0K1xvZmZzZXQrXHNpemUKLQkuZW5kbQkvKiByZWdfZW50cnkgKi8KLQotCi0vKiBUYWJsZSBlbnRyeSB0aGF0IG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBncm91cCAoY29wcm9jZXNzb3Igb3IgImV4dHJhIik6ICovCi0JLm1hY3JvCXJlZ19ncm91cAljcG51bSwgbnVtX2VudHJpZXMsIGFsaWduCi0JIC5zZXQJX19sYXN0X2dyb3VwX29mZnNldCwgKF9fbGFzdF9vZmZzZXQgKyBcYWxpZ24tIDEpICYgLVxhbGlnbgotCSAuaWZuZQlcbnVtX2VudHJpZXMKLQkgIC53b3JkCTB4RkQwMDAwMDArKFxjcG51bTw8MTYpK1xudW1fZW50cmllcwotCSAuZW5kaWYKLQkuZW5kbQkvKiByZWdfZ3JvdXAgKi8KK0VOVFJZKGNvcHJvY2Vzc29yX3Jlc3RvcmUpCisJZW50cnkJYTEsIDMyCisJczMyaQlhMCwgYTEsIDAKKwltb3ZpCWEwLCAuTGxvYWRfY3BfcmVnc19qdW1wX3RhYmxlCisJYWRkeDQJYTMsIGEzLCBhMAorCWwzMmkJYTQsIGEzLCA0CisJbDMyaQlhMywgYTMsIDAKKwlhZGQJYTIsIGEyLCBhNAorCWJlcXoJYTMsIDFmCisJYWRkCWEwLCBhMCwgYTMKKwljYWxseDAJYTAKKzE6CWwzMmkJYTAsIGExLCAwCisJcmV0dwogCiAvKgotICogUmVnaXN0ZXIgaW5mbyB0YWJsZXMuCisgKiBFbnRyeSBjb25kaXRpb246CisgKgorICogICBhMDoJdHJhc2hlZCwgb3JpZ2luYWwgdmFsdWUgc2F2ZWQgb24gc3RhY2sgKFBUX0FSRUcwKQorICogICBhMToJYTEKKyAqICAgYTI6CW5ldyBzdGFjayBwb2ludGVyLCBvcmlnaW5hbCBpbiBERVBDCisgKiAgIGEzOglkaXNwYXRjaCB0YWJsZQorICogICBkZXBjOglhMiwgb3JpZ2luYWwgdmFsdWUgc2F2ZWQgb24gc3RhY2sgKFBUX0RFUEMpCisgKiAgIGV4Y3NhdmVfMToJYTMKKyAqCisgKiAgIFBUX0RFUEMgPj0gVkFMSURfRE9VQkxFX0VYQ0VQVElPTl9BRERSRVNTOiBkb3VibGUgZXhjZXB0aW9uLCBERVBDCisgKgkgICAgIDwgIFZBTElEX0RPVUJMRV9FWENFUFRJT05fQUREUkVTUzogcmVndWxhciBleGNlcHRpb24KICAqLwogCi0JLnNlY3Rpb24gLnJvZGF0YSwgImEiCi0JLmdsb2JsCV94dGVuc2FfcmVnaW5mb190YWJsZXMKLQkuZ2xvYmwJX3h0ZW5zYV9yZWdpbmZvX3RhYmxlX3NpemUKLQkuYWxpZ24JNAotX3h0ZW5zYV9yZWdpbmZvX3RhYmxlX3NpemU6Ci0JLndvcmQJX3h0ZW5zYV9yZWdpbmZvX3RhYmxlX2VuZCAtIF94dGVuc2FfcmVnaW5mb190YWJsZXMKK0VOVFJZKGZhc3RfY29wcm9jZXNzb3JfZG91YmxlKQorCXdzcglhMCwgRVhDU0FWRV8xCisJbW92aQlhMCwgdW5yZWNvdmVyYWJsZV9leGNlcHRpb24KKwljYWxseDAJYTAKIAotX3h0ZW5zYV9yZWdpbmZvX3RhYmxlczoKLQkuc2V0CV9fbGFzdF9vZmZzZXQsIDAKLQlyZWdfZ3JvdXAgMHhGRiwgWENIQUxfRVhUUkFfU0FfQ09OVEVOVFNfTElCREJfTlVNLCBYQ0hBTF9FWFRSQV9TQV9BTElHTgotCVhDSEFMX0VYVFJBX1NBX0NPTlRFTlRTX0xJQkRCCi0JcmVnX2dyb3VwIDAsIFhDSEFMX0NQMF9TQV9DT05URU5UU19MSUJEQl9OVU0sIFhDSEFMX0NQMF9TQV9BTElHTgotCVhDSEFMX0NQMF9TQV9DT05URU5UU19MSUJEQgotCXJlZ19ncm91cCAxLCBYQ0hBTF9DUDFfU0FfQ09OVEVOVFNfTElCREJfTlVNLCBYQ0hBTF9DUDFfU0FfQUxJR04KLQlYQ0hBTF9DUDFfU0FfQ09OVEVOVFNfTElCREIKLQlyZWdfZ3JvdXAgMiwgWENIQUxfQ1AyX1NBX0NPTlRFTlRTX0xJQkRCX05VTSwgWENIQUxfQ1AyX1NBX0FMSUdOCi0JWENIQUxfQ1AyX1NBX0NPTlRFTlRTX0xJQkRCCi0JcmVnX2dyb3VwIDMsIFhDSEFMX0NQM19TQV9DT05URU5UU19MSUJEQl9OVU0sIFhDSEFMX0NQM19TQV9BTElHTgotCVhDSEFMX0NQM19TQV9DT05URU5UU19MSUJEQgotCXJlZ19ncm91cCA0LCBYQ0hBTF9DUDRfU0FfQ09OVEVOVFNfTElCREJfTlVNLCBYQ0hBTF9DUDRfU0FfQUxJR04KLQlYQ0hBTF9DUDRfU0FfQ09OVEVOVFNfTElCREIKLQlyZWdfZ3JvdXAgNSwgWENIQUxfQ1A1X1NBX0NPTlRFTlRTX0xJQkRCX05VTSwgWENIQUxfQ1A1X1NBX0FMSUdOCi0JWENIQUxfQ1A1X1NBX0NPTlRFTlRTX0xJQkRCCi0JcmVnX2dyb3VwIDYsIFhDSEFMX0NQNl9TQV9DT05URU5UU19MSUJEQl9OVU0sIFhDSEFMX0NQNl9TQV9BTElHTgotCVhDSEFMX0NQNl9TQV9DT05URU5UU19MSUJEQgotCXJlZ19ncm91cCA3LCBYQ0hBTF9DUDdfU0FfQ09OVEVOVFNfTElCREJfTlVNLCBYQ0hBTF9DUDdfU0FfQUxJR04KLQlYQ0hBTF9DUDdfU0FfQ09OVEVOVFNfTElCREIKLQkud29yZAkweEZDMDAwMDAwCS8qIGludmFsaWQgcmVnaXN0ZXIgbnVtYmVyLG1hcmtzIGVuZCBvZiB0YWJsZSovCi1feHRlbnNhX3JlZ2luZm9fdGFibGVfZW5kOgotI2VuZGlmCisKK0VOVFJZKGZhc3RfY29wcm9jZXNzb3IpCisKKwkvKiBTYXZlIHJlbWFpbmluZyByZWdpc3RlcnMgYTEtYTMgYW5kIFNBUiAqLworCisJeHNyCWEzLCBFWENTQVZFXzEKKwlzMzJpCWEzLCBhMiwgUFRfQVJFRzMKKwlyc3IJYTMsIFNBUgorCXMzMmkJYTEsIGEyLCBQVF9BUkVHMQorCXMzMmkJYTMsIGEyLCBQVF9TQVIKKwltb3YJYTEsIGEyCisJcnNyCWEyLCBERVBDCisJczMyaQlhMiwgYTEsIFBUX0FSRUcyCisKKwkvKgorCSAqIFRoZSBoYWwgbWFjcm9zIHJlcXVpcmUgdXAgdG8gNCB0ZW1wb3JhcnkgcmVnaXN0ZXJzLiBXZSB1c2UgYTMuLmE2LgorCSAqLworCisJczMyaQlhNCwgYTEsIFBUX0FSRUc0CisJczMyaQlhNSwgYTEsIFBUX0FSRUc1CisJczMyaQlhNiwgYTEsIFBUX0FSRUc2CisKKwkvKiBGaW5kIGNvcHJvY2Vzc29yIG51bWJlci4gU3VidHJhY3QgZmlyc3QgQ1AgRVhDQ0FVU0UgZnJvbSBFWENDQVVTRSAqLworCisJcnNyCWEzLCBFWENDQVVTRQorCWFkZGkJYTMsIGEzLCAtRVhDQ0FVU0VfQ09QUk9DRVNTT1IwX0RJU0FCTEVECisKKwkvKiBTZXQgY29ycmVzcG9uZGluZyBDUEVOQUJMRSBiaXQgLT4gKHNhcjpjcC1pbmRleCwgYTM6IDE8PGNwLWluZGV4KSovCisKKwlzc2wJYTMJCQkjIFNBUjogMzIgLSBjb3Byb2Nlc3Nvcl9udW1iZXIKKwltb3ZpCWEyLCAxCisJcnNyCWEwLCBDUEVOQUJMRQorCXNsbAlhMiwgYTIKKwlvcglhMCwgYTAsIGEyCisJd3NyCWEwLCBDUEVOQUJMRQorCXJzeW5jCisKKwkvKiBSZXRyaWV2ZSBwcmV2aW91cyBvd25lci4gKGEzIHN0aWxsIGhvbGRzIENQIG51bWJlcikgKi8KKworCW1vdmkJYTAsIGNvcHJvY2Vzc29yX293bmVyCSMgbGlzdCBvZiBvd25lcnMKKwlhZGR4NAlhMCwgYTMsIGEwCQkjIGVudHJ5IGZvciBDUAorCWwzMmkJYTQsIGEwLCAwCisKKwliZXF6CWE0LCAxZgkJCSMgc2tpcCAnc2F2ZScgaWYgbm8gcHJldmlvdXMgb3duZXIKKworCS8qIERpc2FibGUgY29wcm9jZXNzb3IgZm9yIHByZXZpb3VzIG93bmVyLiAoYTIgPSAxIDw8IENQIG51bWJlcikgKi8KKworCWwzMmkJYTUsIGE0LCBUSFJFQURfQ1BFTkFCTEUKKwl4b3IJYTUsIGE1LCBhMgkJIyAoMSA8PCBjcC1pZCkgc3RpbGwgaW4gYTIKKwlzMzJpCWE1LCBhNCwgVEhSRUFEX0NQRU5BQkxFCisKKwkvKgorCSAqIEdldCBjb250ZXh0IHNhdmUgYXJlYSBhbmQgJ2NhbGwnIHNhdmUgcm91dGluZS4gCisJICogKGE0IHN0aWxsIGhvbGRzIHByZXZpb3VzIG93bmVyICh0aHJlYWRfaW5mbyksIGEzIENQIG51bWJlcikKKwkgKi8KKworCW1vdmkJYTUsIC5Mc2F2ZV9jcF9yZWdzX2p1bXBfdGFibGUKKwltb3ZpCWEwLCAyZgkJCSMgYTA6ICdyZXR1cm4nIGFkZHJlc3MKKwlhZGR4OAlhMywgYTMsIGE1CQkjIGEzOiBjb3Byb2Nlc3NvciBudW1iZXIKKwlsMzJpCWEyLCBhMywgNAkJIyBhMjogeHRyZWdzIG9mZnNldAorCWwzMmkJYTMsIGEzLCAwCQkjIGEzOiBqdW1wIG9mZnNldAorCWFkZAlhMiwgYTIsIGE0CisJYWRkCWE0LCBhMywgYTUJCSMgYTQ6IGFkZHJlc3Mgb2Ygc2F2ZSByb3V0aW5lCisJangJYTQKKworCS8qIE5vdGUgdGhhdCBvbmx5IGEwIGFuZCBhMSB3ZXJlIHByZXNlcnZlZC4gKi8KKworMjoJcnNyCWEzLCBFWENDQVVTRQorCWFkZGkJYTMsIGEzLCAtRVhDQ0FVU0VfQ09QUk9DRVNTT1IwX0RJU0FCTEVECisJbW92aQlhMCwgY29wcm9jZXNzb3Jfb3duZXIKKwlhZGR4NAlhMCwgYTMsIGEwCisKKwkvKiBTZXQgbmV3ICdvd25lcicgKGEwIHBvaW50cyB0byB0aGUgQ1Agb3duZXIsIGEzIGNvbnRhaW5zIHRoZSBDUCBucikgKi8KKworMToJR0VUX1RIUkVBRF9JTkZPIChhNCwgYTEpCisJczMyaQlhNCwgYTAsIDAKKworCS8qIEdldCBjb250ZXh0IHNhdmUgYXJlYSBhbmQgJ2NhbGwnIGxvYWQgcm91dGluZS4gKi8KKworCW1vdmkJYTUsIC5MbG9hZF9jcF9yZWdzX2p1bXBfdGFibGUKKwltb3ZpCWEwLCAxZgorCWFkZHg4CWEzLCBhMywgYTUKKwlsMzJpCWEyLCBhMywgNAkJIyBhMjogeHRyZWdzIG9mZnNldAorCWwzMmkJYTMsIGEzLCAwCQkjIGEzOiBqdW1wIG9mZnNldAorCWFkZAlhMiwgYTIsIGE0CisJYWRkCWE0LCBhMywgYTUKKwlqeAlhNAorCisJLyogUmVzdG9yZSBhbGwgcmVnaXN0ZXJzIGFuZCByZXR1cm4gZnJvbSBleGNlcHRpb24gaGFuZGxlci4gKi8KKworMToJbDMyaQlhNiwgYTEsIFBUX0FSRUc2CisJbDMyaQlhNSwgYTEsIFBUX0FSRUc1CisJbDMyaQlhNCwgYTEsIFBUX0FSRUc0CisKKwlsMzJpCWEwLCBhMSwgUFRfU0FSCisJbDMyaQlhMywgYTEsIFBUX0FSRUczCisJbDMyaQlhMiwgYTEsIFBUX0FSRUcyCisJd3NyCWEwLCBTQVIKKwlsMzJpCWEwLCBhMSwgUFRfQVJFRzAKKwlsMzJpCWExLCBhMSwgUFRfQVJFRzEKKworCXJmZQorCisJLmRhdGEKK0VOVFJZKGNvcHJvY2Vzc29yX293bmVyKQorCS5maWxsIFhDSEFMX0NQX01BWCwgNCwgMAorCisjZW5kaWYgLyogWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKaW5kZXggOTFhNjg5ZS4uZGZkMzVkYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKQEAgLTI1LDEwICsyNSwxMCBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS92YXJpYW50L3RpZS1hc20uaD4KIAogLyogVW5pbXBsZW1lbnRlZCBmZWF0dXJlcy4gKi8KIAotI3VuZGVmIFNJR05BTF9IQU5ETElOR19JTl9ET1VCTEVfRVhDRVBUSU9OCiAjdW5kZWYgS0VSTkVMX1NUQUNLX09WRVJGTE9XX0NIRUNLCiAjdW5kZWYgUFJFRU1QVElCTEVfS0VSTkVMCiAjdW5kZWYgQUxMT0NBX0VYQ0VQVElPTl9JTl9JUkFNCkBAIC0yMTQsMTkgKzIxNCw3IEBACiAKIAkvKiBXZSBhcmUgYmFjayB0byB0aGUgb3JpZ2luYWwgc3RhY2sgcG9pbnRlciAoYTEpICovCiAKLTI6Ci0jaWYgWENIQUxfRVhUUkFfU0FfU0laRQotCi0JLyogRm9yIHVzZXIgZXhjZXB0aW9ucywgc2F2ZSB0aGUgZXh0cmEgc3RhdGUgaW50byB0aGUgdXNlcidzIFRDQi4KLQkgKiBOb3RlOiBXZSBtdXN0IGFzc3VtZSB0aGF0IHhjaGFsX2V4dHJhX3N0b3JlX2Z1bmNib2R5IGRlc3Ryb3lzIGEyLi5hMTUKLQkgKi8KLQotCUdFVF9DVVJSRU5UKGEyLGExKQotCWFkZGkJYTIsIGEyLCBUSFJFQURfQ1BfU0FWRQotCXhjaGFsX2V4dHJhX3N0b3JlX2Z1bmNib2R5Ci0jZW5kaWYKLQotCS8qIE5vdywganVtcCB0byB0aGUgY29tbW9uIGV4Y2VwdGlvbiBoYW5kbGVyLiAqLworMjoJLyogTm93LCBqdW1wIHRvIHRoZSBjb21tb24gZXhjZXB0aW9uIGhhbmRsZXIuICovCiAKIAlqCWNvbW1vbl9leGNlcHRpb24KIApAQCAtMzgyLDYgKzM3MCwxMCBAQAogCXMzMmkJYTIsIGExLCBQVF9MQkVHCiAJczMyaQlhMywgYTEsIFBUX0xFTkQKIAorCS8qIFNhdmUgb3B0aW9uYWwgcmVnaXN0ZXJzLiAqLworCisJc2F2ZV94dHJlZ3Nfb3B0IGExIGEyIGE0IGE1IGE2IGE3IFBUX1hUUkVHU19PUFQKKwkKIAkvKiBHbyB0byBzZWNvbmQtbGV2ZWwgZGlzcGF0Y2hlci4gU2V0IHVwIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUKIAkgKiBleGNlcHRpb24gaGFuZGxlciBhbmQgY2FsbCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuCiAJICovCkBAIC00MDMsNzUgKzM5NSw1MCBAQAogCS8qIEp1bXAgaWYgd2UgYXJlIHJldHVybmluZyBmcm9tIGtlcm5lbCBleGNlcHRpb25zLiAqLwogCiAxOglsMzJpCWEzLCBhMSwgUFRfUFMKLQlfYmJzaS5sCWEzLCBQU19VTV9CSVQsIDJmCi0JaglrZXJuZWxfZXhjZXB0aW9uX2V4aXQKKwlfYmJjaS5sCWEzLCBQU19VTV9CSVQsIDRmCiAKIAkvKiBTcGVjaWZpYyB0byBhIHVzZXIgZXhjZXB0aW9uIGV4aXQ6CiAJICogV2UgbmVlZCB0byBjaGVjayBzb21lIGZsYWdzIGZvciBzaWduYWwgaGFuZGxpbmcgYW5kIHJlc2NoZWR1bGluZywKIAkgKiBhbmQgaGF2ZSB0byByZXN0b3JlIFdCIGFuZCBXUywgZXh0cmEgc3RhdGVzLCBhbmQgYWxsIHJlZ2lzdGVycwogCSAqIGluIHRoZSByZWdpc3RlciBmaWxlIHRoYXQgd2VyZSBpbiB1c2UgaW4gdGhlIHVzZXIgdGFzay4KLQkgKi8KLQotMjoJd3NyCWEzLCBQUwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0KLQkvKiBDaGVjayBmb3Igc2lnbmFscyAoa2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIHdoaWxlIHdlIHJlYWQgVElfRkxBR1MpCi0JICogTm90ZTogUFMuSU5UTEVWRUwgPSAwLCBQUy5FWENNID0gMQorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBkaXNhYmxlIGludGVycnVwdHMgaGVyZS4gCiAJICovCiAKIAlHRVRfVEhSRUFEX0lORk8oYTIsYTEpCiAJbDMyaQlhNCwgYTIsIFRJX0ZMQUdTCiAKLQkvKiBFbmFibGUgaW50ZXJydXB0cyBhZ2Fpbi4KLQkgKiBOb3RlOiBXaGVuIHdlIGdldCBoZXJlLCB3ZSBjZXJ0YWlubHkgaGF2ZSBoYW5kbGVkIGFueSBpbnRlcnJ1cHRzLgotCSAqICAgICAgIChIaW50OiBUaGVyZSBpcyBvbmx5IG9uZSB1c2VyIGV4Y2VwdGlvbiBmcmFtZSBvbiBzdGFjaykKLQkgKi8KLQotCW1vdmkJYTMsIDEgPDwgUFNfV09FX0JJVAotCiAJX2Jic2kubAlhNCwgVElGX05FRURfUkVTQ0hFRCwgM2YKIAlfYmJjaS5sCWE0LCBUSUZfU0lHUEVORElORywgNGYKIAotI2lmbmRlZiBTSUdOQUxfSEFORExJTkdfSU5fRE9VQkxFX0VYQ0VQVElPTgogCWwzMmkJYTQsIGExLCBQVF9ERVBDCiAJYmdldWkJYTQsIFZBTElEX0RPVUJMRV9FWENFUFRJT05fQUREUkVTUywgNGYKLSNlbmRpZgogCi0JLyogUmVlbmFibGUgaW50ZXJydXB0cyBhbmQgY2FsbCBkb19zaWduYWwoKSAqLworCS8qIENhbGwgZG9fc2lnbmFsKCkgKi8KIAotCXdzcglhMywgUFMKIAltb3ZpCWE0LCBkb19zaWduYWwJIyBpbnQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzKiwgc2lnc2V0X3QqKQogCW1vdglhNiwgYTEKIAltb3ZpCWE3LCAwCiAJY2FsbHg0CWE0CiAJagkxYgogCi0zOgkvKiBSZWVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZXNjaGVkdWxlICovCiszOgkvKiBSZXNjaGVkdWxlICovCiAKLQl3c3IJYTMsIFBTCiAJbW92aQlhNCwgc2NoZWR1bGUJIyB2b2lkIHNjaGVkdWxlICh2b2lkKQogCWNhbGx4NAlhNAogCWoJMWIKIAorNDoJLyogUmVzdG9yZSBvcHRpb25hbCByZWdpc3RlcnMuICovCisKKwlsb2FkX3h0cmVnc19vcHQgYTEgYTIgYTQgYTUgYTYgYTcgUFRfWFRSRUdTX09QVAorCisJd3NyCWEzLCBQUwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisKKwlfYmJjaS5sCWEzLCBQU19VTV9CSVQsIGtlcm5lbF9leGNlcHRpb25fZXhpdAorCit1c2VyX2V4Y2VwdGlvbl9leGl0OgorCiAJLyogUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIHRhc2sgYW5kIHJldHVybiBmcm9tIHRoZSBleGNlcHRpb24uICovCiAKLTQ6CS8qIGEyIGhvbGRzIEdFVF9DVVJSRU5UKGEyLGExKSAgKi8KLQotI2lmIFhDSEFMX0VYVFJBX1NBX1NJWkUKLQotCS8qIEZvciB1c2VyIGV4Y2VwdGlvbnMsIHJlc3RvcmUgdGhlIGV4dHJhIHN0YXRlIGZyb20gdGhlIHVzZXIncyBUQ0IuICovCi0KLQkvKiBOb3RlOiBhMiBzdGlsbCBjb250YWlucyBHRVRfQ1VSUkVOVChhMixhMSkgKi8KLQlhZGRpCWEyLCBhMiwgVEhSRUFEX0NQX1NBVkUKLQl4Y2hhbF9leHRyYV9sb2FkX2Z1bmNib2R5Ci0KLQkvKiBXZSBtdXN0IGFzc3VtZSB0aGF0IHhjaGFsX2V4dHJhX3N0b3JlX2Z1bmNib2R5IGRlc3Ryb3lzCi0JICogcmVnaXN0ZXJzIGEyLi5hMTUuICBGSVhNRSwgdGhpcyBsaXN0IGNhbiBldmVudHVhbGx5IGJlCi0JICogcmVkdWNlZCBvbmNlIHJlYWwgcmVnaXN0ZXIgcmVxdWlyZW1lbnRzIG9mIHRoZSBtYWNybyBhcmUKLQkgKiBmaW5hbGl6ZWQuICovCi0KLSNlbmRpZiAvKiBYQ0hBTF9FWFRSQV9TQV9TSVpFICovCi0KLQogCS8qIFN3aXRjaCB0byB0aGUgdXNlciB0aHJlYWQgV0lORE9XQkFTRS4gU2F2ZSBTUCB0ZW1wb3JhcmlseSBpbiBERVBDICovCiAKIAlsMzJpCWEyLCBhMSwgUFRfV0lORE9XQkFTRQpAQCAtNTM2LDEwICs1MDMsNiBAQAogCiBrZXJuZWxfZXhjZXB0aW9uX2V4aXQ6CiAKLQkvKiBEaXNhYmxlIGludGVycnVwdHMgKGEzIGhvbGRzIFBUX1BTKSAqLwotCi0Jd3NyCWEzLCBQUwotCiAjaWZkZWYgUFJFRU1QVElCTEVfS0VSTkVMCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtNjE4LDYgKzU4MSw4IEBACiAKIGNvbW1vbl9leGNlcHRpb25fZXhpdDoKIAorCS8qIFJlc3RvcmUgYWRkcmVzcyByZWdpc3RlcnMuICovCisKIAlfYmJzaS5sCWEyLCAxLCAxZgogCWwzMmkJYTQsICBhMSwgUFRfQVJFRzQKIAlsMzJpCWE1LCAgYTEsIFBUX0FSRUc1CkBAIC0xMTUwLDcgKzExMTUsNiBAQAogICogICBleGNzYXZlXzE6CWEzCiAgKgogICogTm90ZTogV2UgYXNzdW1lIHRoZSBzdGFjayBwb2ludGVyIGlzIEVYQ19UQUJMRV9LU1RLIGluIHRoZSBmaXh1cCBoYW5kbGVyLgotICogTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBzYXZlIGEyIGluIGRlcGMgKHJldHVybiB2YWx1ZSkKICAqLwogCiBFTlRSWShmYXN0X3N5c2NhbGxfc3BpbGxfcmVnaXN0ZXJzKQpAQCAtMTE2NiwyOSArMTEzMCwzMSBAQAogCiAJcnNyCWEwLCBTQVIKIAl4c3IJYTMsIEVYQ1NBVkVfMQkJIyByZXN0b3JlIGEzIGFuZCBleGNzYXZlXzEKLQlzMzJpCWEwLCBhMiwgUFRfQVJFRzQJIyBzdG9yZSBTQVIgdG8gUFRfQVJFRzQKIAlzMzJpCWEzLCBhMiwgUFRfQVJFRzMKKwlzMzJpCWE0LCBhMiwgUFRfQVJFRzQKKwlzMzJpCWEwLCBhMiwgUFRfQVJFRzUJIyBzdG9yZSBTQVIgdG8gUFRfQVJFRzUKIAogCS8qIFRoZSBzcGlsbCByb3V0aW5lIG1pZ2h0IGNsb2JiZXIgYTcsIGExMSwgYW5kIGExNS4gKi8KIAotCXMzMmkJYTcsIGEyLCBQVF9BUkVHNQotCXMzMmkJYTExLCBhMiwgUFRfQVJFRzYKLQlzMzJpCWExNSwgYTIsIFBUX0FSRUc3CisJczMyaQlhNywgYTIsIFBUX0FSRUc3CisJczMyaQlhMTEsIGEyLCBQVF9BUkVHMTEKKwlzMzJpCWExNSwgYTIsIFBUX0FSRUcxNQogCi0JY2FsbDAJX3NwaWxsX3JlZ2lzdGVycwkjIGRlc3Ryb3lzIGEzLCBERVBDLCBhbmQgU0FSCisJY2FsbDAJX3NwaWxsX3JlZ2lzdGVycwkjIGRlc3Ryb3lzIGEzLCBhNCwgYW5kIFNBUgogCiAJLyogQWR2YW5jZSBQQywgcmVzdG9yZSByZWdpc3RlcnMgYW5kIFNBUiwgYW5kIHJldHVybiBmcm9tIGV4Y2VwdGlvbi4gKi8KIAotCWwzMmkJYTMsIGEyLCBQVF9BUkVHNAorCWwzMmkJYTMsIGEyLCBQVF9BUkVHNQorCWwzMmkJYTQsIGEyLCBQVF9BUkVHNAogCWwzMmkJYTAsIGEyLCBQVF9BUkVHMAogCXdzcglhMywgU0FSCiAJbDMyaQlhMywgYTIsIFBUX0FSRUczCiAKIAkvKiBSZXN0b3JlIGNsb2JiZXJlZCByZWdpc3RlcnMuICovCiAKLQlsMzJpCWE3LCBhMiwgUFRfQVJFRzUKLQlsMzJpCWExMSwgYTIsIFBUX0FSRUc2Ci0JbDMyaQlhMTUsIGEyLCBQVF9BUkVHNworCWwzMmkJYTcsIGEyLCBQVF9BUkVHNworCWwzMmkJYTExLCBhMiwgUFRfQVJFRzExCisJbDMyaQlhMTUsIGEyLCBQVF9BUkVHMTUKIAogCW1vdmkJYTIsIDAKIAlyZmUKQEAgLTEyNDcsMTYgKzEyMTMsNiBAQAogCSAqIE5vdGU6IFRoaXMgZnJhbWUgbWlnaHQgYmUgdGhlIHNhbWUgYXMgYWJvdmUuCiAJICovCiAKLSNpZmRlZiBTSUdOQUxfSEFORExJTkdfSU5fRE9VQkxFX0VYQ0VQVElPTgotCS8qIFJlc3RvcmUgcmVnaXN0ZXJzIHdlIHByZWNhdXRpb3VzbHkgc2F2ZWQuCi0JICogV2UgaGF2ZSB0aGUgdmFsdWUgb2YgdGhlICdyaWdodCcgYTMKLQkgKi8KLQotCWwzMmkJYTcsIGEyLCBQVF9BUkVHNQotCWwzMmkJYTExLCBhMiwgUFRfQVJFRzYKLQlsMzJpCWExNSwgYTIsIFBUX0FSRUc3Ci0jZW5kaWYKLQogCS8qIFNldHVwIHN0YWNrIHBvaW50ZXIuICovCiAKIAlhZGRpCWEyLCBhMiwgLVBUX1VTRVJfU0laRQpAQCAtMTI3MSw5ICsxMjI3LDkgQEAKIAogCW1vdmkJYTMsIGV4Y190YWJsZQogCXJzcglhMCwgRVhDQ0FVU0UKLSAgICAgICAgYWRkeDQgICBhMCwgYTAsIGEzICAgICAgICAgICAgICAJIyBmaW5kIGVudHJ5IGluIHRhYmxlCi0gICAgICAgIGwzMmkgICAgYTAsIGEwLCBFWENfVEFCTEVfRkFTVF9VU0VSICAgICAjIGxvYWQgaGFuZGxlcgotICAgICAgICBqeCAgICAgIGEwCisgICAgICAgIGFkZHg0CWEwLCBhMCwgYTMgICAgICAgICAgICAgIAkjIGZpbmQgZW50cnkgaW4gdGFibGUKKyAgICAgICAgbDMyaQlhMCwgYTAsIEVYQ19UQUJMRV9GQVNUX1VTRVIgICAgICMgbG9hZCBoYW5kbGVyCisgICAgICAgIGp4CWEwCiAKIGZhc3Rfc3lzY2FsbF9zcGlsbF9yZWdpc3RlcnNfZml4dXBfcmV0dXJuOgogCkBAIC0xMjkwLDE0ICsxMjQ2LDYgQEAKIAlzMzJpCWEyLCBhMywgRVhDX1RBQkxFX1BBUkFNCiAJbDMyaQlhMiwgYTMsIEVYQ19UQUJMRV9LU1RLCiAKLSNpZmRlZiBTSUdOQUxfSEFORExJTkdfSU5fRE9VQkxFX0VYQ0VQVElPTgotCS8qIFNhdmUgcmVnaXN0ZXJzIGFnYWluIHRoYXQgbWlnaHQgYmUgY2xvYmJlcmVkLiAqLwotCi0JczMyaQlhNywgYTIsIFBUX0FSRUc1Ci0JczMyaQlhMTEsIGEyLCBQVF9BUkVHNgotCXMzMmkJYTE1LCBhMiwgUFRfQVJFRzcKLSNlbmRpZgotCiAJLyogTG9hZCBXQiBhdCB0aGUgdGltZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAqLwogCiAJcnNyCWEzLCBTQVIJCQkjIFdCIGlzIHN0aWxsIGluIFNBUgpAQCAtMTMxOSw3ICsxMjY3LDcgQEAKICAqIFRoaXMgaXMgbm90IGEgcmVhbCBmdW5jdGlvbi4gVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYmUgbWV0OgogICoKICAqICAtIG11c3QgYmUgY2FsbGVkIHdpdGggY2FsbDAuCi0gKiAgLSB1c2VzIERFUEMsIGEzIGFuZCBTQVIuCisgKiAgLSB1c2VzIGEzLCBhNCBhbmQgU0FSLgogICogIC0gdGhlIGxhc3QgJ3ZhbGlkJyByZWdpc3RlciBvZiBlYWNoIGZyYW1lIGFyZSBjbG9iYmVyZWQuCiAgKiAgLSB0aGUgY2FsbGVyIG11c3QgaGF2ZSByZWdpc3RlcmVkIGEgZml4dXAgaGFuZGxlcgogICogICAgKG9yIGJlIGluc2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24pCkBAIC0xMzMxLDQxICsxMjc5LDM5IEBACiAJLyoKIAkgKiBSb3RhdGUgd3Mgc28gdGhhdCB0aGUgY3VycmVudCB3aW5kb3diYXNlIGlzIGF0IGJpdCAwLgogCSAqIEFzc3VtZSB3cyA9IHh4eHd3dzF5eSAod3d3MSBjdXJyZW50IHdpbmRvdyBmcmFtZSkuCi0JICogUm90YXRlIHdzIHJpZ2h0IHNvIHRoYXQgYTIgPSB5eXh4eHd3dzEuCisJICogUm90YXRlIHdzIHJpZ2h0IHNvIHRoYXQgYTQgPSB5eXh4eHd3dzEuCiAJICovCiAKLQl3c3IJYTIsIERFUEMJCSMgcHJlc2VydmUgYTIKLQlyc3IJYTIsIFdJTkRPV0JBU0UKLQlyc3IJYTMsIFdJTkRPV1NUQVJUCi0Jc3NyCWEyCQkJIyBob2xkcyBXQgotCXNsbGkJYTIsIGEzLCBXU0JJVFMKLQlvcglhMywgYTMsIGEyCQkjIGEyID0geHh4d3d3MXl5eHh4d3d3MXl5Ci0Jc3JsCWEzLCBhMworCXJzcglhNCwgV0lORE9XQkFTRQorCXJzcglhMywgV0lORE9XU1RBUlQJCSMgYTMgPSB4eHh3d3cxeXkKKwlzc3IJYTQJCQkjIGhvbGRzIFdCCisJc2xsaQlhNCwgYTMsIFdTQklUUworCW9yCWEzLCBhMywgYTQJCSMgYTMgPSB4eHh3d3cxeXl4eHh3d3cxeXkKKwlzcmwJYTMsIGEzCQkJIyBhMyA9IDAweHh4d3d3MXl5eHh4d3d3MQogCiAJLyogV2UgYXJlIGRvbmUgaWYgdGhlcmUgYXJlIG5vIG1vcmUgdGhhbiB0aGUgY3VycmVudCByZWdpc3RlciBmcmFtZS4gKi8KIAotCWV4dHVpCWEzLCBhMywgMSwgV1NCSVRTLTIJIyBhMyA9IDB5eXh4eHd3dwotCW1vdmkJYTIsICgxIDw8IChXU0JJVFMtMSkpCisJZXh0dWkJYTMsIGEzLCAxLCBXU0JJVFMtMQkjIGEzID0gMHl5eHh4d3d3CisJbW92aQlhNCwgKDEgPDwgKFdTQklUUy0xKSkKIAlfYmVxeglhMywgLkxub3NwaWxsCQkjIG9ubHkgb25lIGFjdGl2ZSBmcmFtZT8ganVtcAogCiAJLyogV2Ugd2FudCAxIGF0IHRoZSB0b3AsIHNvIHRoYXQgd2UgcmV0dXJuIHRvIHRoZSBjdXJyZW50IHdpbmRvd2Jhc2UgKi8KIAotCW9yCWEzLCBhMywgYTIJCSMgMXl5eHh4d3d3CisJb3IJYTMsIGEzLCBhNAkJIyAxeXl4eHh3d3cKIAogCS8qIFNraXAgZW1wdHkgZnJhbWVzIC0gZ2V0ICdvbGRlc3QnIFdJTkRPV1NUQVJULWJpdC4gKi8KIAogCXdzcglhMywgV0lORE9XU1RBUlQJCSMgc2F2ZSBzaGlmdGVkIHdpbmRvd3N0YXJ0Ci0JbmVnCWEyLCBhMwotCWFuZAlhMywgYTIsIGEzCQkjIGZpcnN0IGJpdCBzZXQgZnJvbSByaWdodDogMDAwMDEwMDAwCisJbmVnCWE0LCBhMworCWFuZAlhMywgYTQsIGEzCQkjIGZpcnN0IGJpdCBzZXQgZnJvbSByaWdodDogMDAwMDEwMDAwCiAKLQlmZnNfd3MJYTIsIGEzCQkJIyBhMjogc2hpZnRzIHRvIHNraXAgZW1wdHkgZnJhbWVzCisJZmZzX3dzCWE0LCBhMwkJCSMgYTQ6IHNoaWZ0cyB0byBza2lwIGVtcHR5IGZyYW1lcwogCW1vdmkJYTMsIFdTQklUUwotCXN1YglhMiwgYTMsIGEyCQkjIFdTQklUUy1hMjpudW1iZXIgb2YgMC1iaXRzIGZyb20gcmlnaHQKLQlzc3IJYTIJCQkjIHNhdmUgaW4gU0FSIGZvciBsYXRlci4KKwlzdWIJYTQsIGEzLCBhNAkJIyBXU0JJVFMtYTQ6bnVtYmVyIG9mIDAtYml0cyBmcm9tIHJpZ2h0CisJc3NyCWE0CQkJIyBzYXZlIGluIFNBUiBmb3IgbGF0ZXIuCiAKIAlyc3IJYTMsIFdJTkRPV0JBU0UKLQlhZGQJYTMsIGEzLCBhMgotCXJzcglhMiwgREVQQwkJIyByZXN0b3JlIGEyCisJYWRkCWEzLCBhMywgYTQKIAl3c3IJYTMsIFdJTkRPV0JBU0UKIAlyc3luYwogCkBAIC0xMzk0LDYgKzEzNDAsOSBAQAogCWwzMmUJYTQsIGExLCAtMTYKIAlqCS5MYzEyYwogCisuTG5vc3BpbGw6CisJcmV0CisKIC5MbG9vcDogX2Jic2kubAlhMywgMSwgLkxjNAogCV9iYmNpLmwJYTMsIDIsIC5MYzEyCiAKQEAgLTE0MTksOSArMTM2OCw3IEBACiAJbW92aQlhMywgMQogCXNsbAlhMywgYTMKIAl3c3IJYTMsIFdJTkRPV1NUQVJUCi0KLS5Mbm9zcGlsbDoKLQlqeAlhMAorCXJldAogCiAuTGM0OglzMzJlCWE0LCBhOSwgLTE2CiAJczMyZQlhNSwgYTksIC0xMgpAQCAtMTgzMCwxNTQgKzE3NzcsNiBAQAogMToJaglfdXNlcl9leGNlcHRpb24KIAogCi0jaWYgWENIQUxfRVhUUkFfU0FfU0laRQotCi0jd2FybmluZyBmYXN0X2NvcHJvY2Vzc29yIHVudGVzdGVkCi0KLS8qCi0gKiBFbnRyeSBjb25kaXRpb246Ci0gKgotICogICBhMDoJdHJhc2hlZCwgb3JpZ2luYWwgdmFsdWUgc2F2ZWQgb24gc3RhY2sgKFBUX0FSRUcwKQotICogICBhMToJYTEKLSAqICAgYTI6CW5ldyBzdGFjayBwb2ludGVyLCBvcmlnaW5hbCBpbiBERVBDCi0gKiAgIGEzOglkaXNwYXRjaCB0YWJsZQotICogICBkZXBjOglhMiwgb3JpZ2luYWwgdmFsdWUgc2F2ZWQgb24gc3RhY2sgKFBUX0RFUEMpCi0gKiAgIGV4Y3NhdmVfMToJYTMKLSAqCi0gKiAgIFBUX0RFUEMgPj0gVkFMSURfRE9VQkxFX0VYQ0VQVElPTl9BRERSRVNTOiBkb3VibGUgZXhjZXB0aW9uLCBERVBDCi0gKgkgICAgIDwgIFZBTElEX0RPVUJMRV9FWENFUFRJT05fQUREUkVTUzogcmVndWxhciBleGNlcHRpb24KLSAqLwotCi1FTlRSWShmYXN0X2NvcHJvY2Vzc29yX2RvdWJsZSkKLQl3c3IJYTAsIEVYQ1NBVkVfMQotCW1vdmkJYTAsIHVucmVjb3ZlcmFibGVfZXhjZXB0aW9uCi0JY2FsbHgwCWEwCi0KLUVOVFJZKGZhc3RfY29wcm9jZXNzb3IpCi0KLQkvKiBGYXRhbCBpZiB3ZSBhcmUgaW4gYSBkb3VibGUgZXhjZXB0aW9uLiAqLwotCi0JbDMyaQlhMCwgYTIsIFBUX0RFUEMKLQlfYmdldWkJYTAsIFZBTElEX0RPVUJMRV9FWENFUFRJT05fQUREUkVTUywgZmFzdF9jb3Byb2Nlc3Nvcl9kb3VibGUKLQotCS8qIFNhdmUgc29tZSByZWdpc3RlcnMgYTEsIGEzLCBhNCwgU0FSICovCi0KLQl4c3IJYTMsIEVYQ1NBVkVfMQotCXMzMmkJYTMsIGEyLCBQVF9BUkVHMwotCXJzcglhMywgU0FSCi0JczMyaQlhNCwgYTIsIFBUX0FSRUc0Ci0JczMyaQlhMSwgYTIsIFBUX0FSRUcxCi0JczMyaQlhNSwgYTEsIFBUX0FSRUc1Ci0JczMyaQlhMywgYTIsIFBUX1NBUgotCW1vdglhMSwgYTIKLQotCS8qIEN1cnJlbnRseSwgdGhlIEhBTCBtYWNyb3Mgb25seSBndWFyYW50ZWUgc2F2aW5nIGEwIGFuZCBhMS4KLQkgKiBUaGVzZSBjYW4gYW5kIHdpbGwgYmUgcmVmaW5lZCBpbiB0aGUgZnV0dXJlLCBidXQgZm9yIG5vdywKLQkgKiBqdXN0IHNhdmUgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMgb2YgYTIuLi5hMTUuCi0JICovCi0JczMyaQlhNiwgYTEsIFBUX0FSRUc2Ci0JczMyaQlhNywgYTEsIFBUX0FSRUc3Ci0JczMyaQlhOCwgYTEsIFBUX0FSRUc4Ci0JczMyaQlhOSwgYTEsIFBUX0FSRUc5Ci0JczMyaQlhMTAsIGExLCBQVF9BUkVHMTAKLQlzMzJpCWExMSwgYTEsIFBUX0FSRUcxMQotCXMzMmkJYTEyLCBhMSwgUFRfQVJFRzEyCi0JczMyaQlhMTMsIGExLCBQVF9BUkVHMTMKLQlzMzJpCWExNCwgYTEsIFBUX0FSRUcxNAotCXMzMmkJYTE1LCBhMSwgUFRfQVJFRzE1Ci0KLQkvKiBGaW5kIGNvcHJvY2Vzc29yIG51bWJlci4gU3VidHJhY3QgZmlyc3QgQ1AgRVhDQ0FVU0UgZnJvbSBFWENDQVVTRSAqLwotCi0JcnNyCWEwLCBFWENDQVVTRQotCWFkZGkJYTMsIGEwLCAtWENIQUxfRVhDQ0FVU0VfQ09QUk9DRVNTT1IwX0RJU0FCTEVECi0KLQkvKiBTZXQgY29ycmVzcG9uZGluZyBDUEVOQUJMRSBiaXQgKi8KLQotCW1vdmkJYTQsIDEKLQlzc2wJYTMJCQkjIFNBUjogMzIgLSBjb3Byb2Nlc3Nvcl9udW1iZXIKLQlyc3IJYTUsIENQRU5BQkxFCi0Jc2xsCWE0LCBhNAotCW9yCWE0LCBhNSwgYTQKLQl3c3IJYTQsIENQRU5BQkxFCi0JcnN5bmMKLQltb3ZpCWE1LCBjb3Byb2Nlc3Nvcl9pbmZvCSMgbGlzdCBvZiBvd25lciBhbmQgb2Zmc2V0IGludG8gY3Bfc2F2ZQotCWFkZHg4CWEwLCBhNCwgYTUJCSMgZW50cnkgZm9yIENQCi0KLQlibmUJYTQsIGE1LCAuTGxvYWQJCSMgYml0IHdhc24ndCBzZXQgYmVmb3JlLCBjcCBub3QgaW4gdXNlCi0KLQkvKiBOb3cgY29tcGFyZSB0aGUgY3VycmVudCB0YXNrIHdpdGggdGhlIG93bmVyIG9mIHRoZSBjb3Byb2Nlc3Nvci4KLQkgKiBJZiB0aGV5IGFyZSB0aGUgc2FtZSwgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHNhdmUgb3IgcmVzdG9yZSBhbnkKLQkgKiBjb3Byb2Nlc3NvciBzdGF0ZS4gSGF2aW5nIGFscmVhZHkgZW5hYmxlZCB0aGUgY29wcm9jZXNzb3IsCi0JICogYnJhbmNoIGFoZWFkIHRvIHJldHVybi4KLQkgKi8KLQlHRVRfQ1VSUkVOVChhNSxhMSkKLQlsMzJpCWE0LCBhMCwgQ09QUk9DRVNTT1JfSU5GT19PV05FUgkjIGE0OiBjdXJyZW50IG93bmVyIGZvciB0aGlzIENQCi0JYmVxCWE0LCBhNSwgLkxkb25lCi0KLQkvKiBGaW5kIGxvY2F0aW9uIHRvIGR1bXAgY3VycmVudCBjb3Byb2Nlc3NvciBzdGF0ZToKLQkgKiAgdGFza19zdHJ1Y3QtPnRhc2tfY3Bfc2F2ZV9vZmZzZXQgKyBjb3Byb2Nlc3Nvcl9vZmZzZXRbY29wcm9jZXNzb3JdCi0JICoKLQkgKiBOb3RlOiBhMCBwb2ludGVyIHRvIHRoZSBlbnRyeSBpbiB0aGUgY29wcm9jZXNzb3Igb3duZXIgdGFibGUsCi0JICoJIGEzIGNvcHJvY2Vzc29yIG51bWJlciwKLSAgICAgICAgICoJIGE0IGN1cnJlbnQgb3duZXIgb2YgY29wcm9jZXNzb3IuCi0JICovCi0JbDMyaQlhNSwgYTAsIENPUFJPQ0VTU09SX0lORk9fT0ZGU0VUCi0JYWRkaQlhMiwgYTQsIFRIUkVBRF9DUF9TQVZFCi0JYWRkCWEyLCBhMiwgYTUKLQotCS8qIFN0b3JlIGN1cnJlbnQgY29wcm9jZXNzb3Igc3RhdGVzLiAoYTUgc3RpbGwgaGFzIENQIG51bWJlcikgKi8KLQotCXhjaGFsX2NwaV9zdG9yZV9mdW5jYm9keQotCi0JLyogVGhlIG1hY3JvIG1pZ2h0IGhhdmUgZGVzdHJveWVkIGEzIChjb3Byb2Nlc3NvciBudW1iZXIpLCBidXQKLQkgKiBTQVIgc3RpbGwgaGFzIDMyIC0gY29wcm9jZXNzb3JfbnVtYmVyIQotCSAqLwotCW1vdmkJYTMsIDMyCi0JcnNyCWE0LCBTQVIKLQlzdWIJYTMsIGEzLCBhNAotCi0uTGxvYWQ6CS8qIEEgbmV3IHRhc2sgbm93IG93bnMgdGhlIGNvcnBvY2Vzc29ycy4gU2F2ZSBpdHMgVENCIHBvaW50ZXIgaW50bwotCSAqIHRoZSBjb3Byb2Nlc3NvciBvd25lciB0YWJsZS4KLQkgKgotCSAqIE5vdGU6IGEwIHBvaW50ZXIgdG8gdGhlIGVudHJ5IGluIHRoZSBjb3Byb2Nlc3NvciBvd25lciB0YWJsZSwKLQkgKgkgYTMgY29wcm9jZXNzb3IgbnVtYmVyLgotCSAqLwotCUdFVF9DVVJSRU5UKGE0LGExKQotCXMzMmkJYTQsIGEwLCAwCi0KLQkvKiBGaW5kIGxvY2F0aW9uIGZyb20gd2hlcmUgdG8gcmVzdG9yZSB0aGUgY3VycmVudCBjb3Byb2Nlc3NvciBzdGF0ZS4qLwotCi0JbDMyaQlhNSwgYTAsIENPUFJPQ0VTU09SX0lORk9fT0ZGU0VUCi0JYWRkaQlhMiwgYTQsIFRIUkVBRF9DUF9TQVZFCi0JYWRkCWEyLCBhMiwgYTQKLQotCXhjaGFsX2NwaV9sb2FkX2Z1bmNib2R5Ci0KLQkvKiBXZSBtdXN0IGFzc3VtZSB0aGF0IHRoZSB4Y2hhbF9jcGlfc3RvcmVfZnVuY2JvZHkgbWFjcm8gZGVzdHJveWVkCi0JICogcmVnaXN0ZXJzIGEyLi5hMTUuCi0JICovCi0KLS5MZG9uZToJbDMyaQlhMTUsIGExLCBQVF9BUkVHMTUKLQlsMzJpCWExNCwgYTEsIFBUX0FSRUcxNAotCWwzMmkJYTEzLCBhMSwgUFRfQVJFRzEzCi0JbDMyaQlhMTIsIGExLCBQVF9BUkVHMTIKLQlsMzJpCWExMSwgYTEsIFBUX0FSRUcxMQotCWwzMmkJYTEwLCBhMSwgUFRfQVJFRzEwCi0JbDMyaQlhOSwgYTEsIFBUX0FSRUc5Ci0JbDMyaQlhOCwgYTEsIFBUX0FSRUc4Ci0JbDMyaQlhNywgYTEsIFBUX0FSRUc3Ci0JbDMyaQlhNiwgYTEsIFBUX0FSRUc2Ci0JbDMyaQlhNSwgYTEsIFBUX0FSRUc1Ci0JbDMyaQlhNCwgYTEsIFBUX0FSRUc0Ci0JbDMyaQlhMywgYTEsIFBUX0FSRUczCi0JbDMyaQlhMiwgYTEsIFBUX0FSRUcyCi0JbDMyaQlhMCwgYTEsIFBUX0FSRUcwCi0JbDMyaQlhMSwgYTEsIFBUX0FSRUcxCi0KLQlyZmUKLQotI2VuZGlmIC8qIFhDSEFMX0VYVFJBX1NBX1NJWkUgKi8KLQogLyoKICAqIFN5c3RlbSBDYWxscy4KICAqCkBAIC0yMDg2LDIwICsxODg1LDM2IEBACiAKIAllbnRyeQlhMSwgMTYKIAotCW1vdglhNCwgYTMJCQkjIHByZXNlcnZlIGEzCisJbW92CWExMiwgYTIJCQkjIHByZXNlcnZlICdwcmV2JyAoYTIpCisJbW92CWExMywgYTMJCQkjIGFuZCAnbmV4dCcgKGEzKQogCi0JczMyaQlhMCwgYTIsIFRIUkVBRF9SQQkjIHNhdmUgcmV0dXJuIGFkZHJlc3MKLQlzMzJpCWExLCBhMiwgVEhSRUFEX1NQCSMgc2F2ZSBzdGFjayBwb2ludGVyCisJbDMyaQlhNCwgYTIsIFRBU0tfVEhSRUFEX0lORk8KKwlsMzJpCWE1LCBhMywgVEFTS19USFJFQURfSU5GTwogCi0JLyogRGlzYWJsZSBpbnRzIHdoaWxlIHdlIG1hbmlwdWxhdGUgdGhlIHN0YWNrIHBvaW50ZXI7IHNwaWxsIHJlZ3MuICovCisJc2F2ZV94dHJlZ3NfdXNlciBhNCBhNiBhOCBhOSBhMTAgYTExIFRIUkVBRF9YVFJFR1NfVVNFUgogCi0JbW92aQlhNSwgKDEgPDwgUFNfRVhDTV9CSVQpIHwgTE9DS0xFVkVMCi0JeHNyCWE1LCBQUworCXMzMmkJYTAsIGExMiwgVEhSRUFEX1JBCSMgc2F2ZSByZXR1cm4gYWRkcmVzcworCXMzMmkJYTEsIGExMiwgVEhSRUFEX1NQCSMgc2F2ZSBzdGFjayBwb2ludGVyCisKKwkvKiBEaXNhYmxlIGludHMgd2hpbGUgd2UgbWFuaXB1bGF0ZSB0aGUgc3RhY2sgcG9pbnRlci4gKi8KKworCW1vdmkJYTE0LCAoMSA8PCBQU19FWENNX0JJVCkgfCBMT0NLTEVWRUwKKwl4c3IJYTE0LCBQUwogCXJzcglhMywgRVhDU0FWRV8xCiAJcnN5bmMKIAlzMzJpCWEzLCBhMywgRVhDX1RBQkxFX0ZJWFVQCS8qIGVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KIAotCWNhbGwwCV9zcGlsbF9yZWdpc3RlcnMKKwkvKiBTd2l0Y2ggQ1BFTkFCTEUgKi8KKworI2lmIChYVEVOU0FfSEFWRV9DT1BST0NFU1NPUlMgfHwgWFRFTlNBX0hBVkVfSU9fUE9SVFMpCisJbDMyaQlhMywgYTUsIFRIUkVBRF9DUEVOQUJMRQorCXhzcglhMywgQ1BFTkFCTEUKKwlzMzJpCWEzLCBhNCwgVEhSRUFEX0NQRU5BQkxFCisjZW5kaWYKKworCS8qIEZsdXNoIHJlZ2lzdGVyIGZpbGUuICovCisKKwljYWxsMAlfc3BpbGxfcmVnaXN0ZXJzCSMgZGVzdHJveXMgYTMsIGE0LCBhbmQgU0FSCiAKIAkvKiBTZXQga2VybmVsIHN0YWNrIChhbmQgbGVhdmUgY3JpdGljYWwgc2VjdGlvbikKIAkgKiBOb3RlOiBJdCdzIHNhdmUgdG8gc2V0IGl0IGhlcmUuIFRoZSBzdGFjayB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbgpAQCAtMjEwNywxOSArMTkyMiwyMSBAQAogCSAqICAgICAgIHdlIHJldHVybiBmcm9tIGtlcm5lbCBzcGFjZS4KIAkgKi8KIAotCWwzMmkJYTAsIGE0LCBUQVNLX1RIUkVBRF9JTkZPCiAJcnNyCWEzLCBFWENTQVZFXzEJCSMgZXhjX3RhYmxlCi0JbW92aQlhMSwgMAotCWFkZGkJYTAsIGEwLCBQVF9SRUdTX09GRlNFVAotCXMzMmkJYTEsIGEzLCBFWENfVEFCTEVfRklYVVAKLQlzMzJpCWEwLCBhMywgRVhDX1RBQkxFX0tTVEsKKwltb3ZpCWE2LCAwCisJYWRkaQlhNywgYTUsIFBUX1JFR1NfT0ZGU0VUCisJczMyaQlhNiwgYTMsIEVYQ19UQUJMRV9GSVhVUAorCXMzMmkJYTcsIGEzLCBFWENfVEFCTEVfS1NUSwogCiAJLyogcmVzdG9yZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgJ25leHQnIGFkZHJlc3NlcyAqLwogCi0JbDMyaQlhMCwgYTQsIFRIUkVBRF9SQQkvKiByZXN0b3JlIHJldHVybiBhZGRyZXNzICovCi0JbDMyaQlhMSwgYTQsIFRIUkVBRF9TUAkvKiByZXN0b3JlIHN0YWNrIHBvaW50ZXIgKi8KKwlsMzJpCWEwLCBhMTMsIFRIUkVBRF9SQQkjIHJlc3RvcmUgcmV0dXJuIGFkZHJlc3MKKwlsMzJpCWExLCBhMTMsIFRIUkVBRF9TUAkjIHJlc3RvcmUgc3RhY2sgcG9pbnRlcgogCi0Jd3NyCWE1LCBQUworCWxvYWRfeHRyZWdzX3VzZXIgYTUgYTYgYTggYTkgYTEwIGExMSBUSFJFQURfWFRSRUdTX1VTRVIKKworCXdzcglhMTQsIFBTCisJbW92CWEyLCBhMTIJCQkjIHJldHVybiAncHJldicKIAlyc3luYwogCiAJcmV0dwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL21vZHVsZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL21vZHVsZS5jCmluZGV4IGRkZjE0ZGMuLjM5ODFhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvbW9kdWxlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIHsKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gdm1hbGxvYyhzaXplKTsKKwlyZXR1cm4gdm1hbGxvY19leGVjKHNpemUpOwogfQogCiB2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGY1M2Q3YmQuLjkxODU1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwpAQCAtNTIsNiArNTIsNTUgQEAKIEVYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKIAogCisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisKK3ZvaWQgY29wcm9jZXNzb3JfcmVsZWFzZV9hbGwoc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwl1bnNpZ25lZCBsb25nIGNwZW5hYmxlOworCWludCBpOworCisJLyogTWFrZSBzdXJlIHdlIGRvbid0IHN3aXRjaCB0YXNrcyBkdXJpbmcgdGhpcyBvcGVyYXRpb24uICovCisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCS8qIFdhbGsgdGhyb3VnaCBhbGwgY3Agb3duZXJzIGFuZCByZWxlYXNlIGl0IGZvciB0aGUgcmVxdWVzdGVkIG9uZS4gKi8KKworCWNwZW5hYmxlID0gdGktPmNwZW5hYmxlOworCisJZm9yIChpID0gMDsgaSA8IFhDSEFMX0NQX01BWDsgaSsrKSB7CisJCWlmIChjb3Byb2Nlc3Nvcl9vd25lcltpXSA9PSB0aSkgeworCQkJY29wcm9jZXNzb3Jfb3duZXJbaV0gPSAwOworCQkJY3BlbmFibGUgJj0gfigxIDw8IGkpOworCQl9CisJfQorCisJdGktPmNwZW5hYmxlID0gY3BlbmFibGU7CisJY29wcm9jZXNzb3JfY2xlYXJfY3BlbmFibGUoKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3ZvaWQgY29wcm9jZXNzb3JfZmx1c2hfYWxsKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCit7CisJdW5zaWduZWQgbG9uZyBjcGVuYWJsZTsKKwlpbnQgaTsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCisJY3BlbmFibGUgPSB0aS0+Y3BlbmFibGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgWENIQUxfQ1BfTUFYOyBpKyspIHsKKwkJaWYgKChjcGVuYWJsZSAmIDEpICE9IDAgJiYgY29wcm9jZXNzb3Jfb3duZXJbaV0gPT0gdGkpCisJCQljb3Byb2Nlc3Nvcl9mbHVzaCh0aSwgaSk7CisJCWNwZW5hYmxlID4+PSAxOworCX0KKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKKyNlbmRpZgorCisKIC8qCiAgKiBQb3dlcm1hbmFnZW1lbnQgaWRsZSBmdW5jdGlvbiwgaWYgYW55IGlzIHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybS4KICAqLwpAQCAtNzEsMTUgKzEyMCwzNiBAQAogfQogCiAvKgotICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHRocmVhZCBjYWxscyBleGl0KCkuCiAgKi8KLQogdm9pZCBleGl0X3RocmVhZCh2b2lkKQogeworI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SUworCWNvcHJvY2Vzc29yX3JlbGVhc2VfYWxsKGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CisjZW5kaWYKIH0KIAorLyoKKyAqIEZsdXNoIHRocmVhZCBzdGF0ZS4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHRocmVhZCBkb2VzIGFuIGV4ZWN2ZSgpCisgKiBOb3RlIHRoYXQgd2UgZmx1c2ggY29wcm9jZXNzb3IgcmVnaXN0ZXJzIGZvciB0aGUgY2FzZSBleGVjdmUgZmFpbHMuCisgKi8KIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCiB7CisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwljb3Byb2Nlc3Nvcl9mbHVzaF9hbGwodGkpOworCWNvcHJvY2Vzc29yX3JlbGVhc2VfYWxsKHRpKTsKKyNlbmRpZgorfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSB0aHJlYWQgaXMgY29waWVkLiAKKyAqLwordm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisJY29wcm9jZXNzb3JfZmx1c2hfYWxsKHRhc2tfdGhyZWFkX2luZm8odHNrKSk7CisjZW5kaWYKIH0KIAogLyoKQEAgLTEwNyw2ICsxNzcsNyBAQAogICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CiAJdW5zaWduZWQgbG9uZyB0b3M7CiAJaW50IHVzZXJfbW9kZSA9IHVzZXJfbW9kZShyZWdzKTsKIApAQCAtMTI4LDEzICsxOTksMTQgQEAKIAlwLT5zZXRfY2hpbGRfdGlkID0gcC0+Y2xlYXJfY2hpbGRfdGlkID0gTlVMTDsKIAlwLT50aHJlYWQucmEgPSBNQUtFX1JBX0ZPUl9DQUxMKCh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2ZvcmssIDB4MSk7CiAJcC0+dGhyZWFkLnNwID0gKHVuc2lnbmVkIGxvbmcpY2hpbGRyZWdzOworCiAJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCiAJCWludCBsZW4gPSBjaGlsZHJlZ3MtPndtYXNrICYgfjB4ZjsKIAkJY2hpbGRyZWdzLT5hcmVnWzFdID0gdXNwOwogCQltZW1jcHkoJmNoaWxkcmVncy0+YXJlZ1tYQ0hBTF9OVU1fQVJFR1MgLSBsZW4vNF0sCiAJCSAgICAgICAmcmVncy0+YXJlZ1tYQ0hBTF9OVU1fQVJFR1MgLSBsZW4vNF0sIGxlbik7Ci0KKy8vIEZJWE1FOiB3ZSBuZWVkIHRvIHNldCBUSFJFQURQVFIgaW4gdGhyZWFkX2luZm8uLi4KIAkJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQogCQkJY2hpbGRyZWdzLT5hcmVnWzJdID0gY2hpbGRyZWdzLT5hcmVnWzZdOwogCkBAIC0xNDIsNiArMjE0LDEyIEBACiAJCS8qIEluIGtlcm5lbCBzcGFjZSwgd2Ugc3RhcnQgYSBuZXcgdGhyZWFkIHdpdGggYSBuZXcgc3RhY2suICovCiAJCWNoaWxkcmVncy0+d21hc2sgPSAxOwogCX0KKworI2lmIChYVEVOU0FfSEFWRV9DT1BST0NFU1NPUlMgfHwgWFRFTlNBX0hBVkVfSU9fUE9SVFMpCisJdGkgPSB0YXNrX3RocmVhZF9pbmZvKHApOworCXRpLT5jcGVuYWJsZSA9IDA7CisjZW5kaWYKKwogCXJldHVybiAwOwogfQogCkBAIC0xNzksMTAgKzI1Nyw2IEBACiB9CiAKIC8qCi0gKiBkb19jb3B5X3JlZ3MoKSBnYXRoZXJzIGluZm9ybWF0aW9uIGZyb20gJ3N0cnVjdCBwdF9yZWdzJyBhbmQKLSAqICdjdXJyZW50LT50aHJlYWQuYXJlZ1tdJyB0byBmaWxsIGluIHRoZSB4dGVuc2FfZ3JlZ3NldF90Ci0gKiBzdHJ1Y3R1cmUuCi0gKgogICogeHRlbnNhX2dyZWdzZXRfdCBhbmQgJ3N0cnVjdCBwdF9yZWdzJyBhcmUgdmFzdGx5IGRpZmZlcmVudCBmb3JtYXRzCiAgKiBvZiBwcm9jZXNzb3IgcmVnaXN0ZXJzLiAgQmVzaWRlcyBkaWZmZXJlbnQgb3JkZXJpbmcsCiAgKiB4dGVuc2FfZ3JlZ3NldF90IGNvbnRhaW5zIG5vbi1saXZlIHJlZ2lzdGVyIGluZm9ybWF0aW9uIHRoYXQKQEAgLTE5MSwxOCArMjY1LDE5IEBACiAgKgogICovCiAKLXZvaWQgZG9fY29weV9yZWdzICh4dGVuc2FfZ3JlZ3NldF90ICplbGZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit2b2lkIHh0ZW5zYV9lbGZfY29yZV9jb3B5X3JlZ3MgKHh0ZW5zYV9ncmVnc2V0X3QgKmVsZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWludCBpLCBuLCB3Yl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB3Yiwgd3MsIHdtOworCWludCBsaXZlLCBsYXN0OwogCi0JZWxmcmVncy0+eGNoYWxfY29uZmlnX2lkMCA9IFhDSEFMX0hXX0NPTkZJR0lEMDsKLQllbGZyZWdzLT54Y2hhbF9jb25maWdfaWQxID0gWENIQUxfSFdfQ09ORklHSUQxOworCXdiID0gcmVncy0+d2luZG93YmFzZTsKKwl3cyA9IHJlZ3MtPndpbmRvd3N0YXJ0OworCXdtID0gcmVncy0+d21hc2s7CisJd3MgPSAoKHdzID4+IHdiKSB8ICh3cyA8PCAoV1NCSVRTIC0gd2IpKSkgJiAoKDEgPDwgV1NCSVRTKSAtIDEpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyc3IgICUwLCAxNzZcbiIgOiAiPWEiIChpKSk7Ci0gCWVsZnJlZ3MtPmNwdXggPSBpOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgicnNyICAlMCwgMjA4XG4iIDogIj1hIiAoaSkpOwotIAllbGZyZWdzLT5jcHV5ID0gaTsKKwkvKiBEb24ndCBsZWFrIGFueSByYW5kb20gYml0cy4gKi8KKworCW1lbXNldChlbGZyZWdzLCAwLCBzaXplb2YgKGVsZnJlZ3MpKTsKIAogCS8qIE5vdGU6ICBQUy5FWENNIGlzIG5vdCBzZXQgd2hpbGUgdXNlciB0YXNrIGlzIHJ1bm5pbmc7IGl0cwogCSAqIGJlaW5nIHNldCBpbiByZWdzLT5wcyBpcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGNvbnZlbmllbmNlLgpAQCAtMjEwLDIwNCArMjg1LDIyIEBACiAKIAllbGZyZWdzLT5wYwkJPSByZWdzLT5wYzsKIAllbGZyZWdzLT5wcwkJPSAocmVncy0+cHMgJiB+KDEgPDwgUFNfRVhDTV9CSVQpKTsKLQllbGZyZWdzLT5leGNjYXVzZQk9IHJlZ3MtPmV4Y2NhdXNlOwotCWVsZnJlZ3MtPmV4Y3ZhZGRyCT0gcmVncy0+ZXhjdmFkZHI7Ci0JZWxmcmVncy0+d2luZG93YmFzZQk9IHJlZ3MtPndpbmRvd2Jhc2U7Ci0JZWxmcmVncy0+d2luZG93c3RhcnQJPSByZWdzLT53aW5kb3dzdGFydDsKIAllbGZyZWdzLT5sYmVnCQk9IHJlZ3MtPmxiZWc7CiAJZWxmcmVncy0+bGVuZAkJPSByZWdzLT5sZW5kOwogCWVsZnJlZ3MtPmxjb3VudAkJPSByZWdzLT5sY291bnQ7CiAJZWxmcmVncy0+c2FyCQk9IHJlZ3MtPnNhcjsKLQllbGZyZWdzLT5zeXNjYWxsCT0gcmVncy0+c3lzY2FsbDsKKwllbGZyZWdzLT53aW5kb3dzdGFydAk9IHdzOwogCi0JLyogQ29weSByZWdpc3RlciBmaWxlLgotCSAqIFRoZSBsYXlvdXQgbG9va3MgbGlrZSB0aGlzOgotCSAqCi0JICogfCAgYTAgLi4uIGExNSAgfCBaIC4uLiBaIHwgIGFyWCAuLi4gYXJZICB8Ci0JICogIGN1cnJlbnQgd2luZG93ICB1bnVzZWQgICAgc2F2ZWQgZnJhbWVzCi0JICovCi0KLQltZW1zZXQgKGVsZnJlZ3MtPmFyLCAwLCBzaXplb2YoZWxmcmVncy0+YXIpKTsKLQotCXdiX29mZnNldCA9IHJlZ3MtPndpbmRvd2Jhc2UgKiA0OwotCW4gPSAocmVncy0+d21hc2smMSk/IDQgOiAocmVncy0+d21hc2smMik/IDggOiAocmVncy0+d21hc2smNCk/IDEyIDogMTY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQllbGZyZWdzLT5hclsod2Jfb2Zmc2V0ICsgaSkgJSBYQ0hBTF9OVU1fQVJFR1NdID0gcmVncy0+YXJlZ1tpXTsKLQotCW4gPSAocmVncy0+d21hc2sgPj4gNCkgKiA0OwotCi0JZm9yIChpID0gWENIQUxfTlVNX0FSRUdTIC0gbjsgbiA+IDA7IGkrKywgbi0tKQotCQllbGZyZWdzLT5hclsod2Jfb2Zmc2V0ICsgaSkgJSBYQ0hBTF9OVU1fQVJFR1NdID0gcmVncy0+YXJlZ1tpXTsKKwlsaXZlID0gKHdtICYgMikgPyA0IDogKHdtICYgNCkgPyA4IDogKHdtICYgOCkgPyAxMiA6IDE2OworCWxhc3QgPSBYQ0hBTF9OVU1fQVJFR1MgLSAod20gPj4gNCkgKiA0OworCW1lbWNweShlbGZyZWdzLT5hLCByZWdzLT5hcmVnLCBsaXZlICogNCk7CisJbWVtY3B5KGVsZnJlZ3MtPmEgKyBsYXN0LCByZWdzLT5hcmVnICsgbGFzdCwgKHdtID4+IDQpICogMTYpOwogfQogCi12b2lkIHh0ZW5zYV9lbGZfY29yZV9jb3B5X3JlZ3MgKHh0ZW5zYV9ncmVnc2V0X3QgKmVsZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoraW50IGR1bXBfZnB1KHZvaWQpCiB7Ci0JZG9fY29weV9yZWdzICgoeHRlbnNhX2dyZWdzZXRfdCAqKWVsZnJlZ3MsIHJlZ3MsIGN1cnJlbnQpOwotfQotCi0KLS8qIFRoZSBpbnZlcnNlIG9mIGRvX2NvcHlfcmVncygpLiAgTm8gZXJyb3Igb3Igc2FuaXR5IGNoZWNraW5nLiAqLwotCi12b2lkIGRvX3Jlc3RvcmVfcmVncyAoeHRlbnNhX2dyZWdzZXRfdCAqZWxmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWludCBpLCBuLCB3Yl9vZmZzZXQ7Ci0KLQkvKiBOb3RlOiAgUFMuRVhDTSBpcyBub3Qgc2V0IHdoaWxlIHVzZXIgdGFzayBpcyBydW5uaW5nOyBpdAotCSAqIG5lZWRzIHRvIGJlIHNldCBpbiByZWdzLT5wcyBpcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGNvbnZlbmllbmNlLgotCSAqLwotCi0JcmVncy0+cGMJCT0gZWxmcmVncy0+cGM7Ci0JcmVncy0+cHMJCT0gKGVsZnJlZ3MtPnBzIHwgKDEgPDwgUFNfRVhDTV9CSVQpKTsKLQlyZWdzLT5leGNjYXVzZQkJPSBlbGZyZWdzLT5leGNjYXVzZTsKLQlyZWdzLT5leGN2YWRkcgkJPSBlbGZyZWdzLT5leGN2YWRkcjsKLQlyZWdzLT53aW5kb3diYXNlCT0gZWxmcmVncy0+d2luZG93YmFzZTsKLQlyZWdzLT53aW5kb3dzdGFydAk9IGVsZnJlZ3MtPndpbmRvd3N0YXJ0OwotCXJlZ3MtPmxiZWcJCT0gZWxmcmVncy0+bGJlZzsKLQlyZWdzLT5sZW5kCQk9IGVsZnJlZ3MtPmxlbmQ7Ci0JcmVncy0+bGNvdW50CQk9IGVsZnJlZ3MtPmxjb3VudDsKLQlyZWdzLT5zYXIJCT0gZWxmcmVncy0+c2FyOwotCXJlZ3MtPnN5c2NhbGwJPSBlbGZyZWdzLT5zeXNjYWxsOwotCi0JLyogQ2xlYXIgZXZlcnl0aGluZy4gKi8KLQotCW1lbXNldCAocmVncy0+YXJlZywgMCwgc2l6ZW9mKHJlZ3MtPmFyZWcpKTsKLQotCS8qIENvcHkgcmVncyBmcm9tIGxpdmUgd2luZG93IGZyYW1lLiAqLwotCi0Jd2Jfb2Zmc2V0ID0gcmVncy0+d2luZG93YmFzZSAqIDQ7Ci0JbiA9IChyZWdzLT53bWFzayYxKT8gNCA6IChyZWdzLT53bWFzayYyKT8gOCA6IChyZWdzLT53bWFzayY0KT8gMTIgOiAxNjsKLQotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCXJlZ3MtPmFyZWdbKHdiX29mZnNldCtpKSAlIFhDSEFMX05VTV9BUkVHU10gPSBlbGZyZWdzLT5hcltpXTsKLQotCW4gPSAocmVncy0+d21hc2sgPj4gNCkgKiA0OwotCi0JZm9yIChpID0gWENIQUxfTlVNX0FSRUdTIC0gbjsgbiA+IDA7IGkrKywgbi0tKQotCQlyZWdzLT5hcmVnWyh3Yl9vZmZzZXQraSkgJSBYQ0hBTF9OVU1fQVJFR1NdID0gZWxmcmVncy0+YXJbaV07Ci19Ci0KLS8qCi0gKiBkb19zYXZlX2ZwcmVncygpIGdhdGhlcnMgaW5mb3JtYXRpb24gZnJvbSAnc3RydWN0IHB0X3JlZ3MnIGFuZAotICogJ2N1cnJlbnQtPnRocmVhZCcgdG8gZmlsbCBpbiB0aGUgZWxmX2ZwcmVnc2V0X3Qgc3RydWN0dXJlLgotICoKLSAqIENvcmUgZmlsZXMgYW5kIHB0cmFjZSB1c2UgZWxmX2ZwcmVnc2V0X3QuCi0gKi8KLQotdm9pZCBkb19zYXZlX2ZwcmVncyAoZWxmX2ZwcmVnc2V0X3QgKmZwcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0jaWYgWENIQUxfSEFWRV9DUAotCi0JZXh0ZXJuIHVuc2lnbmVkIGNoYXIJX3h0ZW5zYV9yZWdpbmZvX3RhYmxlc1tdOwotCWV4dGVybiB1bnNpZ25lZAkJX3h0ZW5zYV9yZWdpbmZvX3RhYmxlX3NpemU7Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIEJlZm9yZSBkdW1waW5nIGNvcHJvY2Vzc29yIHN0YXRlIGZyb20gbWVtb3J5LAotCSAqIGVuc3VyZSBhbnkgbGl2ZSBjb3Byb2Nlc3NvciBjb250ZW50cyBmb3IgdGhpcwotCSAqIHRhc2sgYXJlIGZpcnN0IHNhdmVkIHRvIG1lbW9yeToKLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgWENIQUxfQ1BfTUFYOyBpKyspIHsKLQkJaWYgKHRzayA9PSBjb3Byb2Nlc3Nvcl9pbmZvW2ldLm93bmVyKSB7Ci0JCQllbmFibGVfY29wcm9jZXNzb3IoaSk7Ci0JCQlzYXZlX2NvcHJvY2Vzc29yX3JlZ2lzdGVycygKLQkJCSAgICB0c2stPnRocmVhZC5jcF9zYXZlK2NvcHJvY2Vzc29yX2luZm9baV0ub2Zmc2V0LGkpOwotCQkJZGlzYWJsZV9jb3Byb2Nlc3NvcihpKTsKLQkJfQotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIE5vdyBkdW1wIGNvcHJvY2Vzc29yICYgZXh0cmEgc3RhdGU6ICovCi0JbWVtY3B5KCh1bnNpZ25lZCBjaGFyKilmcHJlZ3MsCi0JCV94dGVuc2FfcmVnaW5mb190YWJsZXMsIF94dGVuc2FfcmVnaW5mb190YWJsZV9zaXplKTsKLQltZW1jcHkoKHVuc2lnbmVkIGNoYXIqKWZwcmVncyArIF94dGVuc2FfcmVnaW5mb190YWJsZV9zaXplLAotCQl0c2stPnRocmVhZC5jcF9zYXZlLCBYVEVOU0FfQ1BfRVhUUkFfU0laRSk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFRoZSBpbnZlcnNlIG9mIGRvX3NhdmVfZnByZWdzKCkuCi0gKiBDb3BpZXMgY29wcm9jZXNzb3IgYW5kIGV4dHJhIHN0YXRlIGZyb20gZnByZWdzIGludG8gcmVncyBhbmQgdHNrLT50aHJlYWQuCi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gaWYgbGF5b3V0IGRvZXNuJ3QgbWF0Y2guCi0gKi8KLQotaW50ICBkb19yZXN0b3JlX2ZwcmVncyAoZWxmX2ZwcmVnc2V0X3QgKmZwcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0jaWYgWENIQUxfSEFWRV9DUAotCi0JZXh0ZXJuIHVuc2lnbmVkIGNoYXIJX3h0ZW5zYV9yZWdpbmZvX3RhYmxlc1tdOwotCWV4dGVybiB1bnNpZ25lZAkJX3h0ZW5zYV9yZWdpbmZvX3RhYmxlX3NpemU7Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIE1ha2Ugc3VyZSBzYXZlIGFyZWEgbGF5b3V0cyBtYXRjaC4KLQkgKiBGSVhNRTogIGluIHRoZSBmdXR1cmUgd2UgY291bGQgYWxsb3cgcmVzdG9yaW5nIGZyb20KLQkgKiBhIGRpZmZlcmVudCBsYXlvdXQgb2YgdGhlIHNhbWUgcmVnaXN0ZXJzLCBieSBjb21wYXJpbmcKLQkgKiBmcHJlZ3MnIHRhYmxlIHdpdGggX3h0ZW5zYV9yZWdpbmZvX3RhYmxlcyBhbmQgbWF0Y2hpbmcKLQkgKiBlbnRyaWVzIGFuZCBjb3B5aW5nIHJlZ2lzdGVycyBvbmUgYXQgYSB0aW1lLgotCSAqIE5vdCB0b28gc3VyZSB5ZXQgd2hldGhlciB0aGF0J3MgdmVyeSB1c2VmdWwuCi0JICovCi0KLQlpZiggbWVtY21wKCh1bnNpZ25lZCBjaGFyKilmcHJlZ3MsCi0JCV94dGVuc2FfcmVnaW5mb190YWJsZXMsIF94dGVuc2FfcmVnaW5mb190YWJsZV9zaXplKSApIHsKLQkgICAgcmV0dXJuIC0xOwotCX0KLQotCS8qIEJlZm9yZSByZXN0b3JpbmcgY29wcm9jZXNzb3Igc3RhdGUgZnJvbSBtZW1vcnksCi0JICogZW5zdXJlIGFueSBsaXZlIGNvcHJvY2Vzc29yIGNvbnRlbnRzIGZvciB0aGlzCi0JICogdGFzayBhcmUgZmlyc3QgaW52YWxpZGF0ZWQuCi0JICovCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgWENIQUxfQ1BfTUFYOyBpKyspIHsKLQkJaWYgKHRzayA9PSBjb3Byb2Nlc3Nvcl9pbmZvW2ldLm93bmVyKSB7Ci0JCQllbmFibGVfY29wcm9jZXNzb3IoaSk7Ci0JCQlzYXZlX2NvcHJvY2Vzc29yX3JlZ2lzdGVycygKLQkJCSAgICB0c2stPnRocmVhZC5jcF9zYXZlK2NvcHJvY2Vzc29yX2luZm9baV0ub2Zmc2V0LGkpOwotCQkJY29wcm9jZXNzb3JfaW5mb1tpXS5vd25lciA9IDA7Ci0JCQlkaXNhYmxlX2NvcHJvY2Vzc29yKGkpOwotCQl9Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogIE5vdyByZXN0b3JlIGNvcHJvY2Vzc29yICYgZXh0cmEgc3RhdGU6ICAqLwotCi0JbWVtY3B5KHRzay0+dGhyZWFkLmNwX3NhdmUsCi0JCSh1bnNpZ25lZCBjaGFyKilmcHJlZ3MgKyBfeHRlbnNhX3JlZ2luZm9fdGFibGVfc2l6ZSwKLQkJWFRFTlNBX0NQX0VYVFJBX1NJWkUpOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9Ci0vKgotICogRmlsbCBpbiB0aGUgQ1Agc3RydWN0dXJlIGZvciBhIGNvcmUgZHVtcCBmb3IgYSBwYXJ0aWN1bGFyIHRhc2suCi0gKi8KLQotaW50Ci1kdW1wX3Rhc2tfZnB1KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVsZl9mcHJlZ3NldF90ICpyKQotewotCXJldHVybiAwOwkvKiBubyBjb3Byb2Nlc3NvcnMgYWN0aXZlIG9uIHRoaXMgcHJvY2Vzc29yICovCi19Ci0KLS8qCi0gKiBGaWxsIGluIHRoZSBDUCBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLgotICogVGhpcyBpbmNsdWRlcyBhbnkgRlBVIGNvcHJvY2Vzc29yLgotICogSGVyZSwgd2UgZHVtcCBhbGwgY29wcm9jZXNzb3JzLCBhbmQgb3RoZXIgKCJleHRyYSIpIGN1c3RvbSBzdGF0ZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBlbGZfY29yZV9kdW1wKCkgaW4gZnMvYmluZm10X2VsZi5jCi0gKiAoaW4gd2hpY2ggY2FzZSAncmVncycgY29tZXMgZnJvbSBjYWxscyB0byBkb19jb3JlZHVtcCwgc2VlIHNpZ25hbHMuYykuCi0gKi8KLWludCAgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGVsZl9mcHJlZ3NldF90ICpyKQotewotCXJldHVybiBkdW1wX3Rhc2tfZnB1KHJlZ3MsIGN1cnJlbnQsIHIpOwotfQogCiBhc21saW5rYWdlCiBsb25nIHh0ZW5zYV9jbG9uZSh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld3NwLApAQCAtNDIxLDggKzMxNCw4IEBACiB9CiAKIC8qCi0gKiAgKiB4dGVuc2FfZXhlY3ZlKCkgZXhlY3V0ZXMgYSBuZXcgcHJvZ3JhbS4KLSAqICAgKi8KKyAqIHh0ZW5zYV9leGVjdmUoKSBleGVjdXRlcyBhIG5ldyBwcm9ncmFtLgorICovCiAKIGFzbWxpbmthZ2UKIGxvbmcgeHRlbnNhX2V4ZWN2ZShjaGFyIF9fdXNlciAqbmFtZSwgY2hhciBfX3VzZXIgKiBfX3VzZXIgKmFyZ3YsCkBAIC00MzcsNyArMzMwLDYgQEAKIAllcnJvciA9IFBUUl9FUlIoZmlsZW5hbWUpOwogCWlmIChJU19FUlIoZmlsZW5hbWUpKQogCQlnb3RvIG91dDsKLQkvLyBGSVhNRTogcmVsZWFzZSBjb3Byb2Nlc3Nvcj8/CiAJZXJyb3IgPSBkb19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsIHJlZ3MpOwogCWlmIChlcnJvciA9PSAwKSB7CiAJCXRhc2tfbG9jayhjdXJyZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYwppbmRleCA1NTMzYzc4Li45NDg2ODgyIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCkBAIC00LDcgKzQsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA1ICBUZW5zaWxpY2EgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNyAgVGVuc2lsaWNhIEluYy4KICAqCiAgKiBKb2UgVGF5bG9yCTxqb2VAdGVuc2lsaWNhLmNvbSwgam9ldHlsckB5YWhvby5jb20+CiAgKiBDaHJpcyBaYW5rZWwgPGNocmlzQHphbmtlbC5uZXQ+CkBAIC0yOCwxNCArMjgsMTAgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+Ci0KLSNkZWZpbmUgVEVTVF9LRVJORUwJLy8gdmVyaWZ5IGtlcm5lbCBvcGVyYXRpb25zIEZJWE1FOiByZW1vdmUKLQorI2luY2x1ZGUgPGFzbS9jb3Byb2Nlc3Nvci5oPgogCiAvKgotICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCi0gKgotICogTWFrZSBzdXJlIHNpbmdsZSBzdGVwIGJpdHMgZXRjIGFyZSBub3Qgc2V0LgorICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZyB0byBkaXNhYmxlIHNpbmdsZSBzdGVwcGluZy4KICAqLwogCiB2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCkBAIC00MywxMzYgKzM5LDIzNyBAQAogCS8qIE5vdGhpbmcgdG8gZG8uLiAqLwogfQogCi1sb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCitpbnQgcHRyYWNlX2dldHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdm9pZCBfX3VzZXIgKnVyZWdzKQogewotCWludCByZXQgPSAtRVBFUk07CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOworCXh0ZW5zYV9ncmVnc2V0X3QgX191c2VyICpncmVnc2V0ID0gdXJlZ3M7CisJdW5zaWduZWQgbG9uZyB3bSA9IHJlZ3MtPndtYXNrOworCXVuc2lnbmVkIGxvbmcgd2IgPSByZWdzLT53aW5kb3diYXNlOworCWludCBsaXZlLCBpOwogCi0Jc3dpdGNoIChyZXF1ZXN0KSB7Ci0JY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6IC8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLwotCWNhc2UgUFRSQUNFX1BFRUtEQVRBOgotCQlyZXQgPSBnZW5lcmljX3B0cmFjZV9wZWVrZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7Ci0JCWdvdG8gb3V0OworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXJlZ3MsIHNpemVvZih4dGVuc2FfZ3JlZ3NldF90KSkpCisJCXJldHVybiAtRUlPOwogCi0JLyogUmVhZCB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEuICAqLworCV9fcHV0X3VzZXIocmVncy0+cGMsICZncmVnc2V0LT5wYyk7CisJX19wdXRfdXNlcihyZWdzLT5wcyAmIH4oMSA8PCBQU19FWENNX0JJVCksICZncmVnc2V0LT5wcyk7CisJX19wdXRfdXNlcihyZWdzLT5sYmVnLCAmZ3JlZ3NldC0+bGJlZyk7CisJX19wdXRfdXNlcihyZWdzLT5sZW5kLCAmZ3JlZ3NldC0+bGVuZCk7CisJX19wdXRfdXNlcihyZWdzLT5sY291bnQsICZncmVnc2V0LT5sY291bnQpOworCV9fcHV0X3VzZXIocmVncy0+d2luZG93c3RhcnQsICZncmVnc2V0LT53aW5kb3dzdGFydCk7CisJX19wdXRfdXNlcihyZWdzLT53aW5kb3diYXNlLCAmZ3JlZ3NldC0+d2luZG93YmFzZSk7CiAKLQljYXNlIFBUUkFDRV9QRUVLVVNSOgotCQl7Ci0JCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCQl1bnNpZ25lZCBsb25nIHRtcDsKKwlsaXZlID0gKHdtICYgMikgPyA0IDogKHdtICYgNCkgPyA4IDogKHdtICYgOCkgPyAxMiA6IDE2OwogCi0JCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOwotCQl0bXAgPSAwOyAgLyogRGVmYXVsdCByZXR1cm4gdmFsdWUuICovCisJZm9yIChpID0gMDsgaSA8IGxpdmU7IGkrKykKKwkJX19wdXRfdXNlcihyZWdzLT5hcmVnW2ldLGdyZWdzZXQtPmErKCh3Yio0K2kpJVhDSEFMX05VTV9BUkVHUykpOworCWZvciAoaSA9IFhDSEFMX05VTV9BUkVHUyAtICh3bSA+PiA0KSAqIDQ7IGkgPCBYQ0hBTF9OVU1fQVJFR1M7IGkrKykKKwkJX19wdXRfdXNlcihyZWdzLT5hcmVnW2ldLGdyZWdzZXQtPmErKCh3Yio0K2kpJVhDSEFMX05VTV9BUkVHUykpOwogCi0JCXN3aXRjaChhZGRyKSB7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwdHJhY2Vfc2V0cmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB2b2lkIF9fdXNlciAqdXJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOworCXh0ZW5zYV9ncmVnc2V0X3QgKmdyZWdzZXQgPSB1cmVnczsKKwljb25zdCB1bnNpZ25lZCBsb25nIHBzX21hc2sgPSBQU19DQUxMSU5DX01BU0sgfCBQU19PV0JfTUFTSzsKKwl1bnNpZ25lZCBsb25nIHBzOworCXVuc2lnbmVkIGxvbmcgd2I7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVyZWdzLCBzaXplb2YoeHRlbnNhX2dyZWdzZXRfdCkpKQorCQlyZXR1cm4gLUVJTzsKKworCV9fZ2V0X3VzZXIocmVncy0+cGMsICZncmVnc2V0LT5wYyk7CisJX19nZXRfdXNlcihwcywgJmdyZWdzZXQtPnBzKTsKKwlfX2dldF91c2VyKHJlZ3MtPmxiZWcsICZncmVnc2V0LT5sYmVnKTsKKwlfX2dldF91c2VyKHJlZ3MtPmxlbmQsICZncmVnc2V0LT5sZW5kKTsKKwlfX2dldF91c2VyKHJlZ3MtPmxjb3VudCwgJmdyZWdzZXQtPmxjb3VudCk7CisJX19nZXRfdXNlcihyZWdzLT53aW5kb3dzdGFydCwgJmdyZWdzZXQtPndpbmRvd3N0YXJ0KTsKKwlfX2dldF91c2VyKHdiLCAmZ3JlZ3NldC0+d2luZG93YmFzZSk7CisKKwlyZWdzLT5wcyA9IChyZWdzLT5wcyAmIH5wc19tYXNrKSB8IChwcyAmIHBzX21hc2spIHwgKDEgPDwgUFNfRVhDTV9CSVQpOworCisJaWYgKHdiID49IFhDSEFMX05VTV9BUkVHUyAvIDQpCisJCXJldHVybiAtRUZBVUxUOworCisJcmVncy0+d2luZG93YmFzZSA9IHdiOworCisJaWYgKHdiICE9IDAgJiYgIF9fY29weV9mcm9tX3VzZXIocmVncy0+YXJlZyArIFhDSEFMX05VTV9BUkVHUyAtIHdiICogNCwKKwkJCQkJIGdyZWdzZXQtPmEsIHdiICogMTYpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChfX2NvcHlfZnJvbV91c2VyKHJlZ3MtPmFyZWcsIGdyZWdzZXQtPmEgKyB3Yio0LCAoV1NCSVRTLXdiKSAqIDE2KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgcHRyYWNlX2dldHhyZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHZvaWQgX191c2VyICp1cmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjaGlsZCk7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8oY2hpbGQpOworCWVsZl94dHJlZ3NfdCBfX3VzZXIgKnh0cmVncyA9IHVyZWdzOworCWludCByZXQgPSAwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cmVncywgc2l6ZW9mKGVsZl94dHJlZ3NfdCkpKQorCQlyZXR1cm4gLUVJTzsKKworI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SUworCS8qIEZsdXNoIGFsbCBjb3Byb2Nlc3NvciByZWdpc3RlcnMgdG8gbWVtb3J5LiAqLworCWNvcHJvY2Vzc29yX2ZsdXNoX2FsbCh0aSk7CisJcmV0IHw9IF9fY29weV90b191c2VyKCZ4dHJlZ3MtPmNwMCwgJnRpLT54dHJlZ3NfY3AsCisJCQkgICAgICBzaXplb2YoeHRyZWdzX2NvcHJvY2Vzc29yX3QpKTsKKyNlbmRpZgorCXJldCB8PSBfX2NvcHlfdG9fdXNlcigmeHRyZWdzLT5vcHQsICZyZWdzLT54dHJlZ3Nfb3B0LAorCQkJICAgICAgc2l6ZW9mKHh0cmVncy0+b3B0KSk7CisJcmV0IHw9IF9fY29weV90b191c2VyKCZ4dHJlZ3MtPnVzZXIsJnRpLT54dHJlZ3NfdXNlciwKKwkJCSAgICAgIHNpemVvZih4dHJlZ3MtPnVzZXIpKTsKKworCXJldHVybiByZXQgPyAtRUZBVUxUIDogMDsKK30KKworaW50IHB0cmFjZV9zZXR4cmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB2b2lkIF9fdXNlciAqdXJlZ3MpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8oY2hpbGQpOworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGNoaWxkKTsKKwllbGZfeHRyZWdzX3QgKnh0cmVncyA9IHVyZWdzOworCWludCByZXQgPSAwOworCisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisJLyogRmx1c2ggYWxsIGNvcHJvY2Vzc29ycyBiZWZvcmUgd2Ugb3ZlcndyaXRlIHRoZW0uICovCisJY29wcm9jZXNzb3JfZmx1c2hfYWxsKHRpKTsKKwljb3Byb2Nlc3Nvcl9yZWxlYXNlX2FsbCh0aSk7CisKKwlyZXQgfD0gX19jb3B5X2Zyb21fdXNlcigmdGktPnh0cmVnc19jcCwgJnh0cmVncy0+Y3AwLCAKKwkJCQlzaXplb2YoeHRyZWdzX2NvcHJvY2Vzc29yX3QpKTsKKyNlbmRpZgorCXJldCB8PSBfX2NvcHlfZnJvbV91c2VyKCZyZWdzLT54dHJlZ3Nfb3B0LCAmeHRyZWdzLT5vcHQsCisJCQkJc2l6ZW9mKHh0cmVncy0+b3B0KSk7CisJcmV0IHw9IF9fY29weV9mcm9tX3VzZXIoJnRpLT54dHJlZ3NfdXNlciwgJnh0cmVncy0+dXNlciwKKwkJCQlzaXplb2YoeHRyZWdzLT51c2VyKSk7CisKKwlyZXR1cm4gcmV0ID8gLUVGQVVMVCA6IDA7Cit9CisKK2ludCBwdHJhY2VfcGVla3VzcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlZ25vLCBsb25nIF9fdXNlciAqcmV0KQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJcmVncyA9IHRhc2tfcHRfcmVncyhjaGlsZCk7CisJdG1wID0gMDsgIC8qIERlZmF1bHQgcmV0dXJuIHZhbHVlLiAqLworCisJc3dpdGNoKHJlZ25vKSB7CiAKIAkJY2FzZSBSRUdfQVJfQkFTRSAuLi4gUkVHX0FSX0JBU0UgKyBYQ0hBTF9OVU1fQVJFR1MgLSAxOgotCQkJewotCQkJaW50IGFyID0gYWRkciAtIFJFR19BUl9CQVNFIC0gcmVncy0+d2luZG93YmFzZSAqIDQ7Ci0JCQlhciAmPSAoWENIQUxfTlVNX0FSRUdTIC0gMSk7Ci0JCQlpZiAoYXIgPCAxNiAmJiBhciArIChyZWdzLT53bWFzayA+PiA0KSAqIDQgPj0gMCkKLQkJCQl0bXAgPSByZWdzLT5hcmVnW2FyXTsKLQkJCWVsc2UKLQkJCQlyZXQgPSAtRUlPOworCQkJdG1wID0gcmVncy0+YXJlZ1tyZWdubyAtIFJFR19BUl9CQVNFXTsKIAkJCWJyZWFrOwotCQkJfQorCiAJCWNhc2UgUkVHX0FfQkFTRSAuLi4gUkVHX0FfQkFTRSArIDE1OgotCQkJdG1wID0gcmVncy0+YXJlZ1thZGRyIC0gUkVHX0FfQkFTRV07CisJCQl0bXAgPSByZWdzLT5hcmVnW3JlZ25vIC0gUkVHX0FfQkFTRV07CiAJCQlicmVhazsKKwogCQljYXNlIFJFR19QQzoKIAkJCXRtcCA9IHJlZ3MtPnBjOwogCQkJYnJlYWs7CisKIAkJY2FzZSBSRUdfUFM6CiAJCQkvKiBOb3RlOiAgUFMuRVhDTSBpcyBub3Qgc2V0IHdoaWxlIHVzZXIgdGFzayBpcyBydW5uaW5nOwogCQkJICogaXRzIGJlaW5nIHNldCBpbiByZWdzIGlzIGZvciBleGNlcHRpb24gaGFuZGxpbmcKIAkJCSAqIGNvbnZlbmllbmNlLiAgKi8KIAkJCXRtcCA9IChyZWdzLT5wcyAmIH4oMSA8PCBQU19FWENNX0JJVCkpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBSRUdfV0I6Ci0JCQl0bXAgPSByZWdzLT53aW5kb3diYXNlOwotCQkJYnJlYWs7CisJCQlicmVhazsJCS8qIHRtcCA9IDAgKi8KKwogCQljYXNlIFJFR19XUzoKLQkJCXRtcCA9IHJlZ3MtPndpbmRvd3N0YXJ0OworCQl7CisJCQl1bnNpZ25lZCBsb25nIHdiID0gcmVncy0+d2luZG93YmFzZTsKKwkJCXVuc2lnbmVkIGxvbmcgd3MgPSByZWdzLT53aW5kb3dzdGFydDsKKwkJCXRtcCA9ICgod3M+PndiKSB8ICh3czw8KFdTQklUUy13YikpKSAmICgoMTw8V1NCSVRTKS0xKTsKIAkJCWJyZWFrOworCQl9CiAJCWNhc2UgUkVHX0xCRUc6CiAJCQl0bXAgPSByZWdzLT5sYmVnOwogCQkJYnJlYWs7CisKIAkJY2FzZSBSRUdfTEVORDoKIAkJCXRtcCA9IHJlZ3MtPmxlbmQ7CiAJCQlicmVhazsKKwogCQljYXNlIFJFR19MQ09VTlQ6CiAJCQl0bXAgPSByZWdzLT5sY291bnQ7CiAJCQlicmVhazsKKwogCQljYXNlIFJFR19TQVI6CiAJCQl0bXAgPSByZWdzLT5zYXI7CiAJCQlicmVhazsKLQkJY2FzZSBSRUdfREVQQzoKLQkJCXRtcCA9IHJlZ3MtPmRlcGM7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdfRVhDQ0FVU0U6Ci0JCQl0bXAgPSByZWdzLT5leGNjYXVzZTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19FWENWQUREUjoKLQkJCXRtcCA9IHJlZ3MtPmV4Y3ZhZGRyOwotCQkJYnJlYWs7CisKIAkJY2FzZSBTWVNDQUxMX05SOgogCQkJdG1wID0gcmVncy0+c3lzY2FsbDsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdG1wID0gMDsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlyZXQgPSBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nICopIGRhdGEpOwotCQlnb3RvIG91dDsKLQkJfQogCi0JY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6IC8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIHB1dF91c2VyKHRtcCwgcmV0KTsKK30KKworaW50IHB0cmFjZV9wb2tldXNyKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVnbm8sIGxvbmcgdmFsKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOworCisJc3dpdGNoIChyZWdubykgeworCQljYXNlIFJFR19BUl9CQVNFIC4uLiBSRUdfQVJfQkFTRSArIFhDSEFMX05VTV9BUkVHUyAtIDE6CisJCQlyZWdzLT5hcmVnW3JlZ25vIC0gUkVHX0FSX0JBU0VdID0gdmFsOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUdfQV9CQVNFIC4uLiBSRUdfQV9CQVNFICsgMTU6CisJCQlyZWdzLT5hcmVnW3JlZ25vIC0gUkVHX0FfQkFTRV0gPSB2YWw7CisJCQlicmVhazsKKworCQljYXNlIFJFR19QQzoKKwkJCXJlZ3MtPnBjID0gdmFsOworCQkJYnJlYWs7CisKKwkJY2FzZSBTWVNDQUxMX05SOgorCQkJcmVncy0+c3lzY2FsbCA9IHZhbDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2xvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKK3sKKwlpbnQgcmV0ID0gLUVQRVJNOworCisJc3dpdGNoIChyZXF1ZXN0KSB7CisJY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6CS8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLworCWNhc2UgUFRSQUNFX1BFRUtEQVRBOgorCQlyZXQgPSBnZW5lcmljX3B0cmFjZV9wZWVrZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7CisJCWJyZWFrOworCisJY2FzZSBQVFJBQ0VfUEVFS1VTUjoJLyogcmVhZCByZWdpc3RlciBzcGVjaWZpZWQgYnkgYWRkci4gKi8KKwkJcmV0ID0gcHRyYWNlX3BlZWt1c3IoY2hpbGQsIGFkZHIsICh2b2lkIF9fdXNlciAqKSBkYXRhKTsKKwkJYnJlYWs7CisKKwljYXNlIFBUUkFDRV9QT0tFVEVYVDoJLyogd3JpdGUgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8KIAljYXNlIFBUUkFDRV9QT0tFREFUQToKIAkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcG9rZWRhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQlnb3RvIG91dDsKLQotCWNhc2UgUFRSQUNFX1BPS0VVU1I6Ci0JCXsKLQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7Ci0JCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOwotCi0JCXN3aXRjaCAoYWRkcikgewotCQljYXNlIFJFR19BUl9CQVNFIC4uLiBSRUdfQVJfQkFTRSArIFhDSEFMX05VTV9BUkVHUyAtIDE6Ci0JCQl7Ci0JCQlpbnQgYXIgPSBhZGRyIC0gUkVHX0FSX0JBU0UgLSByZWdzLT53aW5kb3diYXNlICogNDsKLQkJCWlmIChhciA8IDE2ICYmIGFyICsgKHJlZ3MtPndtYXNrID4+IDQpICogNCA+PSAwKQotCQkJCXJlZ3MtPmFyZWdbYXIgJiAoWENIQUxfTlVNX0FSRUdTIC0gMSldID0gZGF0YTsKLQkJCWVsc2UKLQkJCQlyZXQgPSAtRUlPOwotCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgUkVHX0FfQkFTRSAuLi4gUkVHX0FfQkFTRSArIDE1OgotCQkJcmVncy0+YXJlZ1thZGRyIC0gUkVHX0FfQkFTRV0gPSBkYXRhOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHX1BDOgotCQkJcmVncy0+cGMgPSBkYXRhOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1lTQ0FMTF9OUjoKLQkJCXJlZ3MtPnN5c2NhbGwgPSBkYXRhOwotCQkJYnJlYWs7Ci0jaWZkZWYgVEVTVF9LRVJORUwKLQkJY2FzZSBSRUdfV0I6Ci0JCQlyZWdzLT53aW5kb3diYXNlID0gZGF0YTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19XUzoKLQkJCXJlZ3MtPndpbmRvd3N0YXJ0ID0gZGF0YTsKLQkJCWJyZWFrOwotI2VuZGlmCi0KLQkJZGVmYXVsdDoKLQkJCS8qIFRoZSByZXN0IGFyZSBub3QgYWxsb3dlZC4gKi8KLQkJCXJldCA9IC1FSU87Ci0JCQlicmVhazsKLQkJfQogCQlicmVhazsKLQkJfQorCisJY2FzZSBQVFJBQ0VfUE9LRVVTUjoJLyogd3JpdGUgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGFkZHIuICovCisJCXJldCA9IHB0cmFjZV9wb2tldXNyKGNoaWxkLCBhZGRyLCBkYXRhKTsKKwkJYnJlYWs7CiAKIAkvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLworCiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKIAljYXNlIFBUUkFDRV9DT05UOiAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAl7CkBAIC0yMTcsOTggKzMxNCwyNiBAQAogCQlicmVhazsKIAogCWNhc2UgUFRSQUNFX0dFVFJFR1M6Ci0JewotCQkvKiAnZGF0YScgcG9pbnRzIHRvIHVzZXIgbWVtb3J5IGluIHdoaWNoIHRvIHdyaXRlLgotCQkgKiBNYWlubHkgZHVlIHRvIHRoZSBub24tbGl2ZSByZWdpc3RlciB2YWx1ZXMsIHdlCi0JCSAqIHJlZm9ybWF0IHRoZSByZWdpc3RlciB2YWx1ZXMgaW50byBzb21ldGhpbmcgbW9yZQotCQkgKiBzdGFuZGFyZC4gIEZvciBjb252ZW5pZW5jZSwgd2UgdXNlIHRoZSBoYW5keQotCQkgKiBlbGZfZ3JlZ3NldF90IGZvcm1hdC4gKi8KLQotCQl4dGVuc2FfZ3JlZ3NldF90IGZvcm1hdDsKLQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOwotCi0JCWRvX2NvcHlfcmVncyAoJmZvcm1hdCwgcmVncywgY2hpbGQpOwotCi0JCS8qIE5vdywgY29weSB0byB1c2VyIHNwYWNlIG5pY2UgYW5kIGVhc3kuLi4gKi8KLQkJcmV0ID0gMDsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWRhdGEsICZmb3JtYXQsIHNpemVvZihlbGZfZ3JlZ3NldF90KSkpCi0JCQlyZXQgPSAtRUZBVUxUOworCQlyZXQgPSBwdHJhY2VfZ2V0cmVncyhjaGlsZCwgKHZvaWQgX191c2VyICopIGRhdGEpOwogCQlicmVhazsKLQl9CiAKIAljYXNlIFBUUkFDRV9TRVRSRUdTOgotCXsKLQkJLyogJ2RhdGEnIHBvaW50cyB0byB1c2VyIG1lbW9yeSB0aGF0IGNvbnRhaW5zIHRoZSBuZXcKLQkJICogdmFsdWVzIGluIHRoZSBlbGZfZ3JlZ3NldF90IGZvcm1hdC4gKi8KLQotCQl4dGVuc2FfZ3JlZ3NldF90IGZvcm1hdDsKLQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY2hpbGQpOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmZm9ybWF0LCh2b2lkICopZGF0YSxzaXplb2YoZWxmX2dyZWdzZXRfdCkpKXsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEZJWE1FOiBQZXJoYXBzIHdlIHdhbnQgc29tZSBzYW5pdHkgY2hlY2tzIG9uCi0JCSAqIHRoZXNlIHVzZXItc3BhY2UgdmFsdWVzPyAgU2VlIEFSTSB2ZXJzaW9uLiAgQXJlCi0JCSAqIGRlYnVnZ2VycyBhIHNlY3VyaXR5IGNvbmNlcm4/ICovCi0KLQkJZG9fcmVzdG9yZV9yZWdzICgmZm9ybWF0LCByZWdzLCBjaGlsZCk7Ci0KLQkJcmV0ID0gMDsKKwkJcmV0ID0gcHRyYWNlX3NldHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKSBkYXRhKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBQVFJBQ0VfR0VURlBSRUdTOgotCXsKLQkJLyogJ2RhdGEnIHBvaW50cyB0byB1c2VyIG1lbW9yeSBpbiB3aGljaCB0byB3cml0ZS4KLQkJICogRm9yIGNvbnZlbmllbmNlLCB3ZSB1c2UgdGhlIGhhbmR5Ci0JCSAqIGVsZl9mcHJlZ3NldF90IGZvcm1hdC4gKi8KLQotCQllbGZfZnByZWdzZXRfdCBmcHJlZ3M7Ci0JCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGNoaWxkKTsKLQotCQlkb19zYXZlX2ZwcmVncyAoJmZwcmVncywgcmVncywgY2hpbGQpOwotCi0JCS8qIE5vdywgY29weSB0byB1c2VyIHNwYWNlIG5pY2UgYW5kIGVhc3kuLi4gKi8KLQkJcmV0ID0gMDsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWRhdGEsICZmcHJlZ3MsIHNpemVvZihlbGZfZnByZWdzZXRfdCkpKQotCQkJcmV0ID0gLUVGQVVMVDsKLQorCWNhc2UgUFRSQUNFX0dFVFhUUkVHUzoKKwkJcmV0ID0gcHRyYWNlX2dldHhyZWdzKGNoaWxkLCAodm9pZCBfX3VzZXIgKikgZGF0YSk7CiAJCWJyZWFrOwotCX0KIAotCWNhc2UgUFRSQUNFX1NFVEZQUkVHUzoKLQl7Ci0JCS8qICdkYXRhJyBwb2ludHMgdG8gdXNlciBtZW1vcnkgdGhhdCBjb250YWlucyB0aGUgbmV3Ci0JCSAqIHZhbHVlcyBpbiB0aGUgZWxmX2ZwcmVnc2V0X3QgZm9ybWF0LgotCQkgKi8KLQkJZWxmX2ZwcmVnc2V0X3QgZnByZWdzOwotCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyhjaGlsZCk7Ci0KLQkJcmV0ID0gMDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmcHJlZ3MsICh2b2lkICopZGF0YSwgc2l6ZW9mKGVsZl9mcHJlZ3NldF90KSkpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChkb19yZXN0b3JlX2ZwcmVncyAoJmZwcmVncywgcmVncywgY2hpbGQpKQotCQkJcmV0ID0gLUVJTzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBQVFJBQ0VfR0VURlBSRUdTSVpFOgotCQkvKiAnZGF0YScgcG9pbnRzIHRvICd1bnNpZ25lZCBsb25nJyBzZXQgdG8gdGhlIHNpemUKLQkJICogb2YgZWxmX2ZwcmVnc2V0X3QKLQkJICovCi0JCXJldCA9IHB1dF91c2VyKHNpemVvZihlbGZfZnByZWdzZXRfdCksICh1bnNpZ25lZCBsb25nICopIGRhdGEpOworCWNhc2UgUFRSQUNFX1NFVFhUUkVHUzoKKwkJcmV0ID0gcHRyYWNlX3NldHhyZWdzKGNoaWxkLCAodm9pZCBfX3VzZXIgKikgZGF0YSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJfQotIG91dDoKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZW1hcGhvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1YzY0MS4uMDAwMDAwMAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2VtYXBob3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoKLSAqIGFyY2gveHRlbnNhL2tlcm5lbC9zZW1hcGhvcmUuYwotICoKLSAqIEdlbmVyaWMgc2VtYXBob3JlIGNvZGUuIEJ1eWVyIGJld2FyZS4gRG8geW91ciBvd24gc3BlY2lmaWMgY2hhbmdlcwotICogaW4gPGFzbS9zZW1hcGhvcmUtaGVscGVyLmg+Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNSBUZW5zaWxpY2EgSW5jLgotICoKLSAqIEpvZSBUYXlsb3IJPGpvZUB0ZW5zaWxpY2EuY29tLCBqb2V0eWxyQHlhaG9vLmNvbT4KLSAqIENocmlzIFphbmtlbAk8Y2hyaXNAemFua2VsLm5ldD4KLSAqIE1hcmMgR2F1dGhpZXI8bWFyY0B0ZW5zaWxpY2EuY29tLCBtYXJjQGFsdW1uaS51d2F0ZXJsb28uY2E+Ci0gKiBLZXZpbiBDaGVhCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLS8qCi0gKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KLSAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHdha2Vfb25lX21vcmUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlhdG9taWNfaW5jKChhdG9taWNfdCAqKSZzZW0tPnNsZWVwZXJzKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IHdha2luZ19ub25femVybyhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JaWYgKHNlbS0+c2xlZXBlcnMgPiAwKSB7Ci0JCXNlbS0+c2xlZXBlcnMtLTsKLQkJcmV0ID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZToKLSAqCTEJZ290IHRoZSBsb2NrCi0gKgkwCWdvIHRvIHNsZWVwCi0gKgktRUlOVFIJaW50ZXJydXB0ZWQKLSAqCi0gKiBXZSBtdXN0IHVuZG8gdGhlIHNlbS0+Y291bnQgZG93bl9pbnRlcnJ1cHRpYmxlKCkgaW5jcmVtZW50IHdoaWxlIHdlIGFyZQotICogcHJvdGVjdGVkIGJ5IHRoZSBzcGlubG9jayBpbiBvcmRlciB0byBtYWtlIGF0b21pYyB0aGlzIGF0b21pY19pbmMoKSB3aXRoIHRoZQotICogYXRvbWljX3JlYWQoKSBpbiB3YWtlX29uZV9tb3JlKCksIG90aGVyd2lzZSB3ZSBjYW4gcmFjZS4gLWFyY2EKLSAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLAotCQkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JaWYgKHNlbS0+c2xlZXBlcnMgPiAwKSB7Ci0JCXNlbS0+c2xlZXBlcnMtLTsKLQkJcmV0ID0gMTsKLQl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKLQkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7Ci0JCXJldCA9IC1FSU5UUjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jazoKLSAqCTEJZmFpbGVkIHRvIGxvY2sKLSAqCTAJZ290IHRoZSBsb2NrCi0gKgotICogV2UgbXVzdCB1bmRvIHRoZSBzZW0tPmNvdW50IGRvd25fdHJ5bG9jaygpIGluY3JlbWVudCB3aGlsZSB3ZSBhcmUKLSAqIHByb3RlY3RlZCBieSB0aGUgc3BpbmxvY2sgaW4gb3JkZXIgdG8gbWFrZSBhdG9taWMgdGhpcyBhdG9taWNfaW5jKCkgd2l0aCB0aGUKLSAqIGF0b21pY19yZWFkKCkgaW4gd2FrZV9vbmVfbW9yZSgpLCBvdGhlcndpc2Ugd2UgY2FuIHJhY2UuIC1hcmNhCi0gKi8KLQotc3RhdGljIF9faW5saW5lX18gaW50IHdha2luZ19ub25femVyb190cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAxOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlpZiAoc2VtLT5zbGVlcGVycyA8PSAwKQotCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKLQllbHNlIHsKLQkJc2VtLT5zbGVlcGVycy0tOwotCQlyZXQgPSAwOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotREVGSU5FX1NQSU5MT0NLKHNlbWFwaG9yZV93YWtlX2xvY2spOwotCi0vKgotICogU2VtYXBob3JlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0d28td2F5IGNvdW50ZXI6Ci0gKiBUaGUgImNvdW50IiB2YXJpYWJsZSBpcyBkZWNyZW1lbnRlZCBmb3IgZWFjaCBwcm9jZXNzCi0gKiB0aGF0IHRyaWVzIHRvIHNsZWVwLCB3aGlsZSB0aGUgIndha2luZyIgdmFyaWFibGUgaXMKLSAqIGluY3JlbWVudGVkIHdoZW4gdGhlICJ1cCgpIiBjb2RlIGdvZXMgdG8gd2FrZSB1cCB3YWl0aW5nCi0gKiBwcm9jZXNzZXMuCi0gKgotICogTm90YWJseSwgdGhlIGlubGluZSAidXAoKSIgYW5kICJkb3duKCkiIGZ1bmN0aW9ucyBjYW4KLSAqIGVmZmljaWVudGx5IHRlc3QgaWYgdGhleSBuZWVkIHRvIGRvIGFueSBleHRyYSB3b3JrICh1cAotICogbmVlZHMgdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQotICogdGhlIGluY3JlbWVudCBvcGVyYXRpb24uCi0gKgotICogd2FraW5nX25vbl96ZXJvKCkgKGZyb20gYXNtL3NlbWFwaG9yZS5oKSBtdXN0IGV4ZWN1dGUKLSAqIGF0b21pY2FsbHkuCi0gKgotICogV2hlbiBfX3VwKCkgaXMgY2FsbGVkLCB0aGUgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQotICogaW5jcmVtZW50aW5nIGl0LCBhbmQgd2UgbmVlZCB0byB3YWtlIHVwIHNvbWVib2R5LgotICoKLSAqIFRoaXMgcm91dGluZSBhZGRzIG9uZSB0byB0aGUgY291bnQgb2YgcHJvY2Vzc2VzIHRoYXQgbmVlZCB0bwotICogd2FrZSB1cCBhbmQgZXhpdC4gIEFMTCB3YWl0aW5nIHByb2Nlc3NlcyBhY3R1YWxseSB3YWtlIHVwIGJ1dAotICogb25seSB0aGUgb25lIHRoYXQgZ2V0cyB0byB0aGUgIndha2luZyIgZmllbGQgZmlyc3Qgd2lsbCBnYXRlCi0gKiB0aHJvdWdoIGFuZCBhY3F1aXJlIHRoZSBzZW1hcGhvcmUuICBUaGUgb3RoZXJzIHdpbGwgZ28gYmFjawotICogdG8gc2xlZXAuCi0gKgotICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcwotICogY29udGVudGlvbiBvbiB0aGUgbG9jaywgYW5kIGFzIHN1Y2ggYWxsIHRoaXMgaXMgdGhlCi0gKiAibm9uLWNyaXRpY2FsIiBwYXJ0IG9mIHRoZSB3aG9sZSBzZW1hcGhvcmUgYnVzaW5lc3MuIFRoZQotICogY3JpdGljYWwgcGFydCBpcyB0aGUgaW5saW5lIHN0dWZmIGluIDxhc20vc2VtYXBob3JlLmg+Ci0gKiB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkIGFueSBleHRyYSBqdW1wcyBhbmQgY2FsbHMuCi0gKi8KLQotdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl3YWtlX29uZV9tb3JlKHNlbSk7Ci0Jd2FrZV91cCgmc2VtLT53YWl0KTsKLX0KLQotLyoKLSAqIFBlcmZvcm0gdGhlICJkb3duIiBmdW5jdGlvbi4gIFJldHVybiB6ZXJvIGZvciBzZW1hcGhvcmUgYWNxdWlyZWQsCi0gKiByZXR1cm4gbmVnYXRpdmUgZm9yIHNpZ25hbGxlZCBvdXQgb2YgdGhlIGZ1bmN0aW9uLgotICoKLSAqIElmIGNhbGxlZCBmcm9tIF9fZG93biwgdGhlIHJldHVybiBpcyBpZ25vcmVkIGFuZCB0aGUgd2FpdCBsb29wIGlzCi0gKiBub3QgaW50ZXJydXB0aWJsZS4gIFRoaXMgbWVhbnMgdGhhdCBhIHRhc2sgd2FpdGluZyBvbiBhIHNlbWFwaG9yZQotICogdXNpbmcgImRvd24oKSIgY2Fubm90IGJlIGtpbGxlZCB1bnRpbCBzb21lb25lIGRvZXMgYW4gInVwKCkiIG9uCi0gKiB0aGUgc2VtYXBob3JlLgotICoKLSAqIElmIGNhbGxlZCBmcm9tIF9fZG93bl9pbnRlcnJ1cHRpYmxlLCB0aGUgcmV0dXJuIHZhbHVlIGdldHMgY2hlY2tlZAotICogdXBvbiByZXR1cm4uICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlIHRoZW4gdGhlIHRhc2sgY29udGludWVzCi0gKiB3aXRoIHRoZSBuZWdhdGl2ZSB2YWx1ZSBpbiB0aGUgcmV0dXJuIHJlZ2lzdGVyIChpdCBjYW4gYmUgdGVzdGVkIGJ5Ci0gKiB0aGUgY2FsbGVyKS4KLSAqCi0gKiBFaXRoZXIgZm9ybSBtYXkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICJ1cCgpIi4KLSAqCi0gKi8KLQotI2RlZmluZSBET1dOX1ZBUgkJCQlcCi0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwlcCi0Jd2FpdF9xdWV1ZV90IHdhaXQ7CQkJXAotCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCB0c2spOwotCi0jZGVmaW5lIERPV05fSEVBRCh0YXNrX3N0YXRlKQkJCQkJCVwKLQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0c2stPnN0YXRlID0gKHRhc2tfc3RhdGUpOwkJCQkJXAotCWFkZF93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsJCQkJXAotCQkJCQkJCQkJXAotCS8qCQkJCQkJCQlcCi0JICogT2ssIHdlJ3JlIHNldCB1cC4gIHNlbS0+Y291bnQgaXMga25vd24gdG8gYmUgbGVzcyB0aGFuIHplcm8JXAotCSAqIHNvIHdlIG11c3Qgd2FpdC4JCQkJCQlcCi0JICoJCQkJCQkJCVwKLQkgKiBXZSBjYW4gbGV0IGdvIHRoZSBsb2NrIGZvciBwdXJwb3NlcyBvZiB3YWl0aW5nLgkJXAotCSAqIFdlIHJlLWFjcXVpcmUgaXQgYWZ0ZXIgYXdha2luZyBzbyBhcyB0byBwcm90ZWN0CQlcCi0JICogYWxsIHNlbWFwaG9yZSBvcGVyYXRpb25zLgkJCQkJXAotCSAqCQkJCQkJCQlcCi0JICogSWYgInVwKCkiIGlzIGNhbGxlZCBiZWZvcmUgd2UgY2FsbCB3YWtpbmdfbm9uX3plcm8oKSB0aGVuCVwKLQkgKiB3ZSB3aWxsIGNhdGNoIGl0IHJpZ2h0IGF3YXkuICBJZiBpdCBpcyBjYWxsZWQgbGF0ZXIgdGhlbglcCi0JICogd2Ugd2lsbCBoYXZlIHRvIGdvIHRocm91Z2ggYSB3YWtldXAgY3ljbGUgdG8gY2F0Y2ggaXQuCVwKLQkgKgkJCQkJCQkJXAotCSAqIE11bHRpcGxlIHdhaXRlcnMgY29udGVuZCBmb3IgdGhlIHNlbWFwaG9yZSBsb2NrIHRvIHNlZQlcCi0JICogd2hvIGdldHMgdG8gZ2F0ZSB0aHJvdWdoIGFuZCB3aG8gaGFzIHRvIHdhaXQgc29tZSBtb3JlLglcCi0JICovCQkJCQkJCQlcCi0JZm9yICg7OykgewotCi0jZGVmaW5lIERPV05fVEFJTCh0YXNrX3N0YXRlKQkJCVwKLQkJdHNrLT5zdGF0ZSA9ICh0YXNrX3N0YXRlKTsJXAotCX0JCQkJCVwKLQl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOwkJXAotCXJlbW92ZV93YWl0X3F1ZXVlKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotdm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCURPV05fVkFSCi0JRE9XTl9IRUFEKFRBU0tfVU5JTlRFUlJVUFRJQkxFKQotCWlmICh3YWtpbmdfbm9uX3plcm8oc2VtKSkKLQkJYnJlYWs7Ci0Jc2NoZWR1bGUoKTsKLQlET1dOX1RBSUwoVEFTS19VTklOVEVSUlVQVElCTEUpCi19Ci0KLWludCBfX3NjaGVkIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0JRE9XTl9WQVIKLQlET1dOX0hFQUQoVEFTS19JTlRFUlJVUFRJQkxFKQotCi0JcmV0ID0gd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc2VtLCB0c2spOwotCWlmIChyZXQpCi0JewotCQlpZiAocmV0ID09IDEpCi0JCQkvKiByZXQgIT0gMCBvbmx5IGlmIHdlIGdldCBpbnRlcnJ1cHRlZCAtYXJjYSAqLwotCQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JfQotCXNjaGVkdWxlKCk7Ci0JRE9XTl9UQUlMKFRBU0tfSU5URVJSVVBUSUJMRSkKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlyZXR1cm4gd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc2VtKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKaW5kZXggYjgwZjJjYi4uNWU2ZDc1YyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKQEAgLTYwLDExICs2MCw2IEBACiBleHRlcm4gc3RydWN0IHJ0Y19vcHMgbm9fcnRjX29wczsKIHN0cnVjdCBydGNfb3BzICpydGNfb3BzOwogCi0jaWZkZWYgQ09ORklHX1BDX0tFWUIKLWV4dGVybiBzdHJ1Y3Qga2JkX29wcyBub19rYmRfb3BzOwotc3RydWN0IGtiZF9vcHMgKmtiZF9vcHM7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogZXh0ZXJuIHZvaWQgKmluaXRyZF9zdGFydDsKIGV4dGVybiB2b2lkICppbml0cmRfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3NpZ25hbC5jCmluZGV4IDAzM2FhZTAuLmYyMjIwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2lnbmFsLmMKQEAgLTM1LDEzICszNSwxNyBAQAogCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjb3Byb2Nfb3duZXJzW107CiAKLWV4dGVybiB2b2lkIHJlbGVhc2VfYWxsX2NwIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci0KIHN0cnVjdCBydF9zaWdmcmFtZQogewogCXN0cnVjdCBzaWdpbmZvIGluZm87CiAJc3RydWN0IHVjb250ZXh0IHVjOwotCWNwX3N0YXRlX3QgY3BzdGF0ZTsKKwlzdHJ1Y3QgeworCQl4dHJlZ3Nfb3B0X3Qgb3B0OworCQl4dHJlZ3NfdXNlcl90IHVzZXI7CisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisJCXh0cmVnc19jb3Byb2Nlc3Nvcl90IGNwOworI2VuZGlmCisJfSB4dHJlZ3M7CiAJdW5zaWduZWQgY2hhciByZXRjb2RlWzZdOwogCXVuc2lnbmVkIGludCB3aW5kb3dbNF07CiB9OwpAQCAtNDksOCArNTMsNiBAQAogLyogCiAgKiBGbHVzaCByZWdpc3RlciB3aW5kb3dzIHN0b3JlZCBpbiBwdF9yZWdzIHRvIHN0YWNrLgogICogUmV0dXJucyAxIGZvciBlcnJvcnMuCi0gKgotICogTm90ZSB0aGF0IHdpbmRvd2Jhc2UsIHdpbmRvd3N0YXJ0LCBhbmQgd21hc2sgYXJlIG5vdCB1cGRhdGVkIQogICovCiAKIGludApAQCAtMTE2LDYgKzExOCw5IEBACiAJCWJhc2UgKz0gaW5jOwogCX0KIAorCXJlZ3MtPndtYXNrID0gMTsKKwlyZWdzLT53aW5kb3dzdGFydCA9IDEgPDwgd2I7CisKIAlyZXR1cm4gMDsKIAogZXJyb3V0OgpAQCAtMTMxLDkgKzEzNiwxMCBAQAogICovCiAKIHN0YXRpYyBpbnQKLXNldHVwX3NpZ2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYywgY3Bfc3RhdGVfdCAqY3BzdGF0ZSwKLQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG1hc2spCitzZXR1cF9zaWdjb250ZXh0KHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjID0gJmZyYW1lLT51Yy51Y19tY29udGV4dDsKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gY3VycmVudF90aHJlYWRfaW5mbygpOwogCWludCBlcnIgPSAwOwogCiAjZGVmaW5lIENPUFkoeCkJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+eCwgJnNjLT5zY18jI3gpCkBAIC0xNDcsMjMgKzE1MywzMiBAQAogCiAJZXJyIHw9IGZsdXNoX3dpbmRvd19yZWdzX3VzZXIocmVncyk7CiAJZXJyIHw9IF9fY29weV90b191c2VyIChzYy0+c2NfYSwgcmVncy0+YXJlZywgMTYgKiA0KTsKKwllcnIgfD0gX19wdXRfdXNlcigwLCAmc2MtPnNjX3h0cmVncyk7CiAKLQkvLyBlcnIgfD0gX19jb3B5X3RvX3VzZXIgKHNjLT5zY19hLCByZWdzLT5hcmVnLCBYQ0hBTF9OVU1fQVJFR1MgKiA0KQorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKLSNpZiBYQ0hBTF9IQVZFX0NQCi0jIGVycm9yIENvcHJvY2Vzc29ycyB1bnN1cHBvcnRlZAotCWVyciB8PSBzYXZlX2NwZXh0cmEoY3BzdGF0ZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoZXJyID8gTlVMTCA6IGNwc3RhdGUsICZzYy0+c2NfY3BzdGF0ZSk7CisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisJY29wcm9jZXNzb3JfZmx1c2hfYWxsKHRpKTsKKwljb3Byb2Nlc3Nvcl9yZWxlYXNlX2FsbCh0aSk7CisJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+eHRyZWdzLmNwLCAmdGktPnh0cmVnc19jcCwKKwkJCSAgICAgIHNpemVvZiAoZnJhbWUtPnh0cmVncy5jcCkpOwogI2VuZGlmCi0JLyogbm9uLWlCQ1MyIGV4dGVuc2lvbnMuLiAqLwotCWVyciB8PSBfX3B1dF91c2VyKG1hc2ssICZzYy0+b2xkbWFzayk7CisJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+eHRyZWdzLm9wdCwgJnJlZ3MtPnh0cmVnc19vcHQsCisJCQkgICAgICBzaXplb2YgKHh0cmVnc19vcHRfdCkpOworCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnh0cmVncy51c2VyLCAmdGktPnh0cmVnc191c2VyLAorCQkJICAgICAgc2l6ZW9mICh4dHJlZ3NfdXNlcl90KSk7CisKKwllcnIgfD0gX19wdXRfdXNlcihlcnIgPyBOVUxMIDogJmZyYW1lLT54dHJlZ3MsICZzYy0+c2NfeHRyZWdzKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKLXJlc3RvcmVfc2lnY29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYykKK3Jlc3RvcmVfc2lnY29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWUpCiB7CisJc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyA9ICZmcmFtZS0+dWMudWNfbWNvbnRleHQ7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKIAl1bnNpZ25lZCBpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIHBzOwogCkBAIC0xODEsNiArMTk2LDggQEAKIAlyZWdzLT53aW5kb3diYXNlID0gMDsKIAlyZWdzLT53aW5kb3dzdGFydCA9IDE7CiAKKwlyZWdzLT5zeXNjYWxsID0gLTE7CQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCisKIAkvKiBGb3IgUFMsIHJlc3RvcmUgb25seSBQUy5DQUxMSU5DLgogCSAqIEFzc3VtZSB0aGF0IGFsbCBvdGhlciBiaXRzIGFyZSBlaXRoZXIgdGhlIHNhbWUgYXMgZm9yIHRoZSBzaWduYWwKIAkgKiBoYW5kbGVyLCBvciB0aGUgdXNlciBtb2RlIHZhbHVlIGRvZXNuJ3QgbWF0dGVyIChlLmcuIFBTLk9XQikuCkBAIC0xOTYsOCArMjEzLDkgQEAKIAogCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKHJlZ3MtPmFyZWcsIHNjLT5zY19hLCAxNiAqIDQpOwogCi0jaWYgWENIQUxfSEFWRV9DUAotIyBlcnJvciBDb3Byb2Nlc3NvcnMgdW5zdXBwb3J0ZWQKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAgCS8qIFRoZSBzaWduYWwgaGFuZGxlciBtYXkgaGF2ZSB1c2VkIGNvcHJvY2Vzc29ycyBpbiB3aGljaAogCSAqIGNhc2UgdGhleSBhcmUgc3RpbGwgZW5hYmxlZC4gIFdlIGRpc2FibGUgdGhlbSB0byBmb3JjZSBhCiAJICogcmVsb2FkaW5nIG9mIHRoZSBvcmlnaW5hbCB0YXNrJ3MgQ1Agc3RhdGUgYnkgdGhlIGxhenkKQEAgLTIwNSwyMCArMjIzLDIwIEBACiAJICogQWxzbywgd2UgZXNzZW50aWFsbHkgZGlzY2FyZCBhbnkgY29wcm9jZXNzb3Igc3RhdGUgdGhhdCB0aGUKIAkgKiBzaWduYWwgaGFuZGxlciBjcmVhdGVkLiAqLwogCi0JaWYgKCFlcnIpIHsKLQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQkgIHJlbGVhc2VfYWxsX2NwKHRzayk7Ci0JICBlcnIgfD0gX19jb3B5X2Zyb21fdXNlcih0c2stPnRocmVhZC5jcGV4dHJhLCBzYy0+c2NfY3BzdGF0ZSwgCi0JICAgICAgCQkJICBYVEVOU0FfQ1BfRVhUUkFfU0laRSk7Ci0JfQorI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SUworCWNvcHJvY2Vzc29yX3JlbGVhc2VfYWxsKHRpKTsKKwllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmdGktPnh0cmVnc19jcCwgJmZyYW1lLT54dHJlZ3MuY3AsCisJCQkJc2l6ZW9mIChmcmFtZS0+eHRyZWdzLmNwKSk7CiAjZW5kaWYKKwllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmdGktPnh0cmVnc191c2VyLCAmZnJhbWUtPnh0cmVncy51c2VyLAorCQkJCXNpemVvZiAoeHRyZWdzX3VzZXJfdCkpOworCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZyZWdzLT54dHJlZ3Nfb3B0LCAmZnJhbWUtPnh0cmVncy5vcHQsCisJCQkJc2l6ZW9mICh4dHJlZ3Nfb3B0X3QpKTsKIAotCXJlZ3MtPnN5c2NhbGwgPSAtMTsJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KIAlyZXR1cm4gZXJyOwogfQogCiAKLQogLyoKICAqIERvIGEgc2lnbmFsIHJldHVybjsgdW5kbyB0aGUgc2lnbmFsIHN0YWNrLgogICovCkBAIC0yNDcsNyArMjY1LDcgQEAKIAlyZWNhbGNfc2lncGVuZGluZygpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlpZiAocmVzdG9yZV9zaWdjb250ZXh0KHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQpKQorCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgZnJhbWUpKQogCQlnb3RvIGJhZGZyYW1lOwogCiAJcmV0ID0gcmVncy0+YXJlZ1syXTsKQEAgLTM2MCwxOCArMzc4LDIyIEBACiAJZXJyIHw9IF9fcHV0X3VzZXIoc2FzX3NzX2ZsYWdzKHJlZ3MtPmFyZWdbMV0pLAogCQkJICAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX2ZsYWdzKTsKIAllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc2l6ZSwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zaXplKTsKLQllcnIgfD0gc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnVjLnVjX21jb250ZXh0LCAmZnJhbWUtPmNwc3RhdGUsCi0JCQkgICAgICAgIHJlZ3MsIHNldC0+c2lnWzBdKTsKKwllcnIgfD0gc2V0dXBfc2lnY29udGV4dChmcmFtZSwgcmVncyk7CiAJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOwogCi0JLyogQ3JlYXRlIHN5c19ydF9zaWdyZXR1cm4gc3lzY2FsbCBpbiBzdGFjayBmcmFtZSAqLworCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgeworCQlyYSA9ICh1bnNpZ25lZCBsb25nKWthLT5zYS5zYV9yZXN0b3JlcjsKKwl9IGVsc2UgewogCi0JZXJyIHw9IGdlbl9yZXR1cm5fY29kZShmcmFtZS0+cmV0Y29kZSk7CisJCS8qIENyZWF0ZSBzeXNfcnRfc2lncmV0dXJuIHN5c2NhbGwgaW4gc3RhY2sgZnJhbWUgKi8KIAotCWlmIChlcnIpIHsKLQkJZ290byBnaXZlX3NpZ3NlZ3Y7CisJCWVyciB8PSBnZW5fcmV0dXJuX2NvZGUoZnJhbWUtPnJldGNvZGUpOworCisJCWlmIChlcnIpIHsKKwkJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCQl9CisJCXJhID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlOwogCX0KLQkJCiAKIAkvKiAKIAkgKiBDcmVhdGUgc2lnbmFsIGhhbmRsZXIgZXhlY3V0aW9uIGNvbnRleHQuCkBAIC0zODUsNyArNDA3LDYgQEAKIAkvKiBTZXQgdXAgYSBzdGFjayBmcmFtZSBmb3IgYSBjYWxsNAogCSAqIE5vdGU6IFBTLkNBTExJTkMgaXMgc2V0IHRvIG9uZSBieSBzdGFydF90aHJlYWQKIAkgKi8KLQlyYSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZS0+cmV0Y29kZTsKIAlyZWdzLT5hcmVnWzRdID0gKCgodW5zaWduZWQgbG9uZykgcmEpICYgMHgzZmZmZmZmZikgfCAweDQwMDAwMDAwOwogCXJlZ3MtPmFyZWdbNl0gPSAodW5zaWduZWQgbG9uZykgc2lnbmFsOwogCXJlZ3MtPmFyZWdbN10gPSAodW5zaWduZWQgbG9uZykgJmZyYW1lLT5pbmZvOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdHJhcHMuYwppbmRleCAzOTdiY2Q2Li5jN2EwMjFkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdHJhcHMuYwpAQCAtMTE4LDI4ICsxMTgsMjggQEAKIHsgRVhDQ0FVU0VfU1RPUkVfQ0FDSEVfQVRUUklCVVRFLAkwLAkgICBkb19wYWdlX2ZhdWx0IH0sCiB7IEVYQ0NBVVNFX0xPQURfQ0FDSEVfQVRUUklCVVRFLAkwLAkgICBkb19wYWdlX2ZhdWx0IH0sCiAvKiBYQ0NIQUxfRVhDQ0FVU0VfRkxPQVRJTkdfUE9JTlQgdW5oYW5kbGVkICovCi0jaWYgKFhDSEFMX0NQX01BU0sgJiAxKQorI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKDApCiBDT1BST0NFU1NPUigwKSwKICNlbmRpZgotI2lmIChYQ0hBTF9DUF9NQVNLICYgMikKKyNpZiBYVEVOU0FfSEFWRV9DT1BST0NFU1NPUigxKQogQ09QUk9DRVNTT1IoMSksCiAjZW5kaWYKLSNpZiAoWENIQUxfQ1BfTUFTSyAmIDQpCisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1IoMikKIENPUFJPQ0VTU09SKDIpLAogI2VuZGlmCi0jaWYgKFhDSEFMX0NQX01BU0sgJiA4KQorI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKDMpCiBDT1BST0NFU1NPUigzKSwKICNlbmRpZgotI2lmIChYQ0hBTF9DUF9NQVNLICYgMTYpCisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1IoNCkKIENPUFJPQ0VTU09SKDQpLAogI2VuZGlmCi0jaWYgKFhDSEFMX0NQX01BU0sgJiAzMikKKyNpZiBYVEVOU0FfSEFWRV9DT1BST0NFU1NPUig1KQogQ09QUk9DRVNTT1IoNSksCiAjZW5kaWYKLSNpZiAoWENIQUxfQ1BfTUFTSyAmIDY0KQorI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKDYpCiBDT1BST0NFU1NPUig2KSwKICNlbmRpZgotI2lmIChYQ0hBTF9DUF9NQVNLICYgMTI4KQorI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKDcpCiBDT1BST0NFU1NPUig3KSwKICNlbmRpZgogeyBFWENDQVVTRV9NQVBQRURfREVCVUcsCQkwLAkJZG9fZGVidWcgfSwKQEAgLTM0OSw5ICszNDksNyBAQAogCiAJd21hc2sgPSByZWdzLT53bWFzayAmIH4xOwogCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJaWYgKHdtYXNrICYgKDEgPDwgKGkgLyA0KSkpCi0JCQlicmVhazsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQlpZiAoKGkgJSA4KSA9PSAwKQogCQkJcHJpbnRrICgiXG4iIEtFUk5fSU5GTyAiYSUwMmQ6ICIsIGkpOwogCQlwcmludGsoIiUwOGx4ICIsIHJlZ3MtPmFyZWdbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3ZDBmNTVhLi41MWY0ZmI2IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTM2LDcgKzEzNiw5IEBACiAgIF9faW5pdF9iZWdpbiA9IC47CiAgIC5pbml0LnRleHQgOiB7CiAgIAlfc2luaXR0ZXh0ID0gLjsKLQkqKC5pbml0LmxpdGVyYWwpIElOSVRfVEVYVAorCSooLmluaXQubGl0ZXJhbCkgKiguY3B1aW5pdC5saXRlcmFsKSAKKwkqKC5kZXZpbml0LmxpdGVyYWwpICooLm1lbWluaXQubGl0ZXJhbCkKKwlJTklUX1RFWFQKIAlfZWluaXR0ZXh0ID0gLjsKICAgfQogCkBAIC0xNjEsNiArMTYzLDggQEAKIAkJICAgLkRvdWJsZUV4Y2VwdGlvblZlY3Rvci5saXRlcmFsKTsKICAgICBSRUxPQ0FURV9FTlRSWShfRG91YmxlRXhjZXB0aW9uVmVjdG9yX3RleHQsCiAJCSAgIC5Eb3VibGVFeGNlcHRpb25WZWN0b3IudGV4dCk7CisgICAgUkVMT0NBVEVfRU5UUlkoX0RlYnVnSW50ZXJydXB0VmVjdG9yX3RleHQsCisJCSAgIC5EZWJ1Z0ludGVycnVwdFZlY3Rvci50ZXh0KTsKICAgCiAgICAgX19ib290X3JlbG9jX3RhYmxlX2VuZCA9IEFCU09MVVRFKC4pIDsKICAgfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jCmluZGV4IDYwZGJkYjQuLjZlNTJjZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC94dGVuc2Ffa3N5bXMuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2lmZGVmIENPTkZJR19CTEtfREVWX0ZECiAjaW5jbHVkZSA8YXNtL2Zsb3BweS5oPgogI2VuZGlmCkBAIC03MSwxNCArNzAsNiBAQAogRVhQT1JUX1NZTUJPTChfX3VkaXZkaTMpOwogRVhQT1JUX1NZTUJPTChfX3Vtb2RkaTMpOwogCi0vKgotICogU2VtYXBob3JlIG9wZXJhdGlvbnMKLSAqLwotRVhQT1JUX1NZTUJPTChfX2Rvd24pOwotRVhQT1JUX1NZTUJPTChfX2Rvd25faW50ZXJydXB0aWJsZSk7Ci1FWFBPUlRfU1lNQk9MKF9fZG93bl90cnlsb2NrKTsKLUVYUE9SVF9TWU1CT0woX191cCk7Ci0KICNpZmRlZiBDT05GSUdfTkVUCiAvKgogICogTmV0d29ya2luZyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jIGIvYXJjaC94dGVuc2EvbW0vY2FjaGUuYwppbmRleCA5YTFmYTk0Li4zYmE5OTBjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jCisrKyBiL2FyY2gveHRlbnNhL21tL2NhY2hlLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgpAQCAtMTgxLDkgKzE4MCw5IEBACiAjZWxzZQogCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpICYmICF0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykKIAkgICAgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSAhPSAwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBhZGRyICYgUEFHRV9NQVNLOwotCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKHZhZGRyKTsKLQkJX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlKHZhZGRyKTsKKwkgICAgCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOworCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZGRyKTsKKwkJX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlKHBhZGRyKTsKIAkJc2V0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncyk7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMgYi9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKaW5kZXggYjMwODZmMy4uODFkMDU2MCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vaW5pdC5jCisrKyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAKIHN0cnVjdCBrbWVtX2NhY2hlICpwZ3RhYmxlX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyB2b2lkIHBnZF9jdG9yKHZvaWQgKmFkZHIsIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyB2b2lkIHBnZF9jdG9yKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCogYWRkcikKIHsKIAlwdGVfdCogcHRlcCA9IChwdGVfdCopYWRkcjsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL21pc2MuUyBiL2FyY2gveHRlbnNhL21tL21pc2MuUwppbmRleCBlMWY4ODAzLi5jODg1NjY0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9taXNjLlMKKysrIGIvYXJjaC94dGVuc2EvbW0vbWlzYy5TCkBAIC0yOTUsNyArMjk1LDcgQEAKIEVOVFJZKF9faW52YWxpZGF0ZV9pY2FjaGVfcGFnZV9hbGlhcykKIAllbnRyeQlzcCwgMTYKIAotCWFkZGkJYTYsIGEzLCAoUEFHRV9LRVJORUwgfCBfUEFHRV9IV19XUklURSkKKwlhZGRpCWE2LCBhMywgKFBBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9IV19XUklURSkKIAltb3YJYTQsIGEyCiAJd2l0bGIJYTYsIGEyCiAJaXN5bmMKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvY29uc29sZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTQ2NzdkLi4wMDAwMDAwCi0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoKLSAqIGFyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBUZW5zaWxpY2EgSW5jLgotICogICBBdXRob3JzCUNocmlzdGlhbiBaYW5rZWwsIEpvZSBUYXlsb3IKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxQLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS9zaW1jYWxsLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgotCi0jaWZkZWYgU0VSSUFMX0lOTElORQotI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKLSNlbmRpZgotCi0jZGVmaW5lIFNFUklBTF9NQVhfTlVNX0xJTkVTIDEKLSNkZWZpbmUgU0VSSUFMX1RJTUVSX1ZBTFVFICgyMCAqIEhaKQotCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnNlcmlhbF9kcml2ZXI7Ci1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qgc2VyaWFsX3RpbWVyOwotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVyX2xvY2spOwotCi1pbnQgZXJybm87Ci0KLXN0YXRpYyBpbnQgX19zaW1jIChpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgaW50IGUsIGludCBmKQotewotCWludCByZXQ7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzaW1jYWxsXG4iCi0JCQkibW92ICUwLCBhMlxuIgotCQkJIm1vdiAlMSwgYTNcbiIgOiAiPWEiIChyZXQpLCAiPWEiIChlcnJubykKLQkJCTogOiAiYTIiLCAiYTMiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY2hhciAqc2VyaWFsX3ZlcnNpb24gPSAiMC4xIjsKLXN0YXRpYyBjaGFyICpzZXJpYWxfbmFtZSA9ICJJU1Mgc2VyaWFsIGRyaXZlciI7Ci0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGEgc2VyaWFsIHBvcnQgaXMgb3BlbmVkLiAgSXQKLSAqIGVuYWJsZXMgaW50ZXJydXB0cyBmb3IgYSBzZXJpYWwgcG9ydCwgbGlua2luZyBpbiBpdHMgYXN5bmMgc3RydWN0dXJlIGludG8KLSAqIHRoZSBJUlEgY2hhaW4uICAgSXQgYWxzbyBwZXJmb3JtcyB0aGUgc2VyaWFsLXNwZWNpZmljCi0gKiBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHR0eSBzdHJ1Y3R1cmUuCi0gKi8KLQotc3RhdGljIHZvaWQgcnNfcG9sbCh1bnNpZ25lZCBsb25nKTsKLQotc3RhdGljIGludCByc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQlpbnQgbGluZSA9IHR0eS0+aW5kZXg7Ci0KLQlpZiAoKGxpbmUgPCAwKSB8fCAobGluZSA+PSBTRVJJQUxfTUFYX05VTV9MSU5FUykpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc3Bpbl9sb2NrKCZ0aW1lcl9sb2NrKTsKLQotCWlmICh0dHktPmNvdW50ID09IDEpIHsKLQkJaW5pdF90aW1lcigmc2VyaWFsX3RpbWVyKTsKLQkJc2VyaWFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgdHR5OwotCQlzZXJpYWxfdGltZXIuZnVuY3Rpb24gPSByc19wb2xsOwotCQltb2RfdGltZXIoJnNlcmlhbF90aW1lciwgamlmZmllcyArIFNFUklBTF9USU1FUl9WQUxVRSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZ0aW1lcl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGlzc19zZXJpYWxfY2xvc2UoKQotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsIHBvcnQgZ2V0cyBjbG9zZWQuICBGaXJzdCwgd2UKLSAqIHdhaXQgZm9yIHRoZSBsYXN0IHJlbWFpbmluZyBkYXRhIHRvIGJlIHNlbnQuICBUaGVuLCB3ZSB1bmxpbmsgaXRzCi0gKiBhc3luYyBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW50ZXJydXB0IGNoYWluIGlmIG5lY2Vzc2FyeSwgYW5kIHdlIGZyZWUKLSAqIHRoYXQgSVJRIGlmIG5vdGhpbmcgaXMgbGVmdCBpbiB0aGUgY2hhaW4uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIHZvaWQgcnNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQotewotCXNwaW5fbG9jaygmdGltZXJfbG9jayk7Ci0JaWYgKHR0eS0+Y291bnQgPT0gMSkKLQkJZGVsX3RpbWVyX3N5bmMoJnNlcmlhbF90aW1lcik7Ci0Jc3Bpbl91bmxvY2soJnRpbWVyX2xvY2spOwotfQotCi0KLXN0YXRpYyBpbnQgcnNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksCi0JCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKLXsKLQkvKiBzZWUgZHJpdmVycy9jaGFyL3NlcmlhbFguYyB0byByZWZlcmVuY2Ugb3JpZ2luYWwgdmVyc2lvbiAqLwotCi0JX19zaW1jIChTWVNfd3JpdGUsIDEsICh1bnNpZ25lZCBsb25nKWJ1ZiwgY291bnQsIDAsIDApOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHZvaWQgcnNfcG9sbCh1bnNpZ25lZCBsb25nIHByaXYpCi17Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QqIHR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCopIHByaXY7Ci0KLQlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3NlYyA9IDAsIC50dl91c2VjID0gMCB9OwotCWludCBpID0gMDsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlzcGluX2xvY2soJnRpbWVyX2xvY2spOwotCi0Jd2hpbGUgKF9fc2ltYyhTWVNfc2VsZWN0X29uZSwgMCwgWFRJU1NfU0VMRUNUX09ORV9SRUFELCAoaW50KSZ0diwwLDApKXsKLQkJX19zaW1jIChTWVNfcmVhZCwgMCwgKHVuc2lnbmVkIGxvbmcpJmMsIDEsIDAsIDApOwotCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGMsIFRUWV9OT1JNQUwpOwotCQlpKys7Ci0JfQotCi0JaWYgKGkpCi0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0KLQotCW1vZF90aW1lcigmc2VyaWFsX3RpbWVyLCBqaWZmaWVzICsgU0VSSUFMX1RJTUVSX1ZBTFVFKTsKLQlzcGluX3VubG9jaygmdGltZXJfbG9jayk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcnNfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKLXsKLQljaGFyIGJ1ZlsyXTsKLQotCWlmICghdHR5KQotCQlyZXR1cm47Ci0KLQlidWZbMF0gPSBjaDsKLQlidWZbMV0gPSAnXDAnOwkJLyogSXMgdGhpcyBOVUxMIG5lY2Vzc2FyeT8gKi8KLQlfX3NpbWMgKFNZU193cml0ZSwgMSwgKHVuc2lnbmVkIGxvbmcpIGJ1ZiwgMSwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJzX2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci19Ci0KLXN0YXRpYyBpbnQgcnNfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCS8qIExldCdzIHNheSBpc3MgY2FuIGFsd2F5cyBhY2NlcHQgMksgY2hhcmFjdGVycy4uICovCi0JcmV0dXJuIDIgKiAxMDI0OwotfQotCi1zdGF0aWMgaW50IHJzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCS8qIHRoZSBpc3MgZG9lc24ndCBidWZmZXIgY2hhcmFjdGVycyAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCByc19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQkvKiBTdHViLCBvbmNlIGFnYWluLi4gKi8KLX0KLQotc3RhdGljIHZvaWQgcnNfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQotewotCS8qIFN0dWIsIG9uY2UgYWdhaW4uLiAqLwotfQotCi1zdGF0aWMgaW50IHJzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbiA9IDA7Ci0Jb2ZmX3QgYmVnaW4gPSAwOwotCi0JbGVuICs9IHNwcmludGYocGFnZSwgInNlcmluZm86MS4wIGRyaXZlcjolc1xuIiwgc2VyaWFsX3ZlcnNpb24pOwotCSplb2YgPSAxOwotCi0JaWYgKG9mZiA+PSBsZW4gKyBiZWdpbikKLQkJcmV0dXJuIDA7Ci0KLQkqc3RhcnQgPSBwYWdlICsgKG9mZiAtIGJlZ2luKTsKLQlyZXR1cm4gKChjb3VudCA8IGJlZ2luICsgbGVuIC0gb2ZmKSA/IGNvdW50IDogYmVnaW4gKyBsZW4gLSBvZmYpOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2VyaWFsX29wcyA9IHsKLQkub3BlbiA9IHJzX29wZW4sCi0JLmNsb3NlID0gcnNfY2xvc2UsCi0JLndyaXRlID0gcnNfd3JpdGUsCi0JLnB1dF9jaGFyID0gcnNfcHV0X2NoYXIsCi0JLmZsdXNoX2NoYXJzID0gcnNfZmx1c2hfY2hhcnMsCi0JLndyaXRlX3Jvb20gPSByc193cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIgPSByc19jaGFyc19pbl9idWZmZXIsCi0JLmhhbmd1cCA9IHJzX2hhbmd1cCwKLQkud2FpdF91bnRpbF9zZW50ID0gcnNfd2FpdF91bnRpbF9zZW50LAotCS5yZWFkX3Byb2MgPSByc19yZWFkX3Byb2MKLX07Ci0KLWludCBfX2luaXQgcnNfaW5pdCh2b2lkKQotewotCXNlcmlhbF9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKDEpOwotCi0JcHJpbnRrICgiJXMgJXNcbiIsIHNlcmlhbF9uYW1lLCBzZXJpYWxfdmVyc2lvbik7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSB0dHlfZHJpdmVyIHN0cnVjdHVyZSAqLwotCi0Jc2VyaWFsX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlzZXJpYWxfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJpc3Nfc2VyaWFsIjsKLQlzZXJpYWxfZHJpdmVyLT5uYW1lID0gInR0eVMiOwotCXNlcmlhbF9kcml2ZXItPm1ham9yID0gVFRZX01BSk9SOwotCXNlcmlhbF9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gNjQ7Ci0Jc2VyaWFsX2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7Ci0Jc2VyaWFsX2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKLQlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0Jc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQotCQlCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7Ci0Jc2VyaWFsX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwotCi0JdHR5X3NldF9vcGVyYXRpb25zKHNlcmlhbF9kcml2ZXIsICZzZXJpYWxfb3BzKTsKLQotCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKHNlcmlhbF9kcml2ZXIpKQotCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgc2VyaWFsIGRyaXZlclxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIF9fZXhpdCB2b2lkIHJzX2V4aXQodm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoKGVycm9yID0gdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHNlcmlhbF9kcml2ZXIpKSkKLQkJcHJpbnRrKCJJU1NfU0VSSUFMOiBmYWlsZWQgdG8gdW5yZWdpc3RlciBzZXJpYWwgZHJpdmVyICglZClcbiIsCi0JCSAgICAgICBlcnJvcik7Ci0JcHV0X3R0eV9kcml2ZXIoc2VyaWFsX2RyaXZlcik7Ci19Ci0KLQotLyogV2UgdXNlIGBsYXRlX2luaXRjYWxsJyBpbnN0ZWFkIG9mIGp1c3QgYF9faW5pdGNhbGwnIGFzIGEgd29ya2Fyb3VuZCBmb3IKLSAqIHRoZSBmYWN0IHRoYXQgKDEpIHNpbWNvbnNfdHR5X2luaXQgY2FuJ3QgYmUgY2FsbGVkIGJlZm9yZSB0dHlfaW5pdCwKLSAqICgyKSB0dHlfaW5pdCBpcyBjYWxsZWQgdmlhIGBtb2R1bGVfaW5pdCcsICgzKSBpZiBzdGF0aWNhbGx5IGxpbmtlZCwKLSAqIG1vZHVsZV9pbml0ID09IGRldmljZV9pbml0LCBhbmQgKDQpIHRoZXJlJ3Mgbm8gb3JkZXJpbmcgb2YgaW5pdCBsaXN0cy4KLSAqIFdlIGNhbiBkbyB0aGlzIGVhc2lseSBiZWNhdXNlIHNpbWNvbnMgaXMgYWx3YXlzIHN0YXRpY2FsbHkgbGlua2VkLCBidXQKLSAqIG90aGVyIHR0eSBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHR0eV9pbml0IGFuZCB3aGljaCBtdXN0IHVzZQotICogYG1vZHVsZV9pbml0JyB0byBkZWNsYXJlIHRoZWlyIGluaXQgcm91dGluZXMgYXJlIGxpa2VseSB0byBiZSBicm9rZW4uCi0gKi8KLQotbGF0ZV9pbml0Y2FsbChyc19pbml0KTsKLQotCi0jaWZkZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCi0KLXN0YXRpYyB2b2lkIGlzc19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgY291bnQpCi17Ci0JaW50IGxlbiA9IHN0cmxlbihzKTsKLQotCWlmIChzICE9IDAgJiYgKnMgIT0gMCkKLQkJX19zaW1jIChTWVNfd3JpdGUsIDEsICh1bnNpZ25lZCBsb25nKXMsCi0JCQljb3VudCA8IGxlbiA/IGNvdW50IDogbGVuLDAsMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciogaXNzX2NvbnNvbGVfZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQotewotCSppbmRleCA9IGMtPmluZGV4OwotCXJldHVybiBzZXJpYWxfZHJpdmVyOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBzZXJjb25zID0gewotCS5uYW1lID0gInR0eVMiLAotCS53cml0ZSA9IGlzc19jb25zb2xlX3dyaXRlLAotCS5kZXZpY2UgPSBpc3NfY29uc29sZV9kZXZpY2UsCi0JLmZsYWdzID0gQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleCA9IC0xCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpc3NfY29uc29sZV9pbml0KHZvaWQpCi17Ci0JcmVnaXN0ZXJfY29uc29sZSgmc2VyY29ucyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWNvbnNvbGVfaW5pdGNhbGwoaXNzX2NvbnNvbGVfaW5pdCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX0NPTlNPTEUgKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMWI5YjAuLjAwMDAwMDAKLS0tIGEvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYworKysgL2Rldi9udWxsCkBAIC0xLDgyMyArMCwwIEBACi0vKgotICoKLSAqIGFyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKLSAqCi0gKiBQbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLSAqCi0gKiBBdXRob3JzOiBDaHJpcyBaYW5rZWwgPGNocmlzQHphbmtlbC5uZXQ+Ci0gKiBCYXNlZCBvbiB3b3JrIGZvcm0gdGhlIFVNTCB0ZWFtLgotICoKLSAqIENvcHlyaWdodCAyMDA1IFRlbnNpbGljYSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL3BsYXRmb3JtL3NpbWNhbGwuaD4KLQotI2RlZmluZSBEUklWRVJfTkFNRSAiaXNzLW5ldGRldiIKLSNkZWZpbmUgRVRIX01BWF9QQUNLRVQgMTUwMAotI2RlZmluZSBFVEhfSEVBREVSX09USEVSIDE0Ci0jZGVmaW5lIElTU19ORVRfVElNRVJfVkFMVUUgKDIgKiBIWikKLQotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9wZW5lZF9sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQob3BlbmVkKTsKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZpY2VzX2xvY2spOwotc3RhdGljIExJU1RfSEVBRChkZXZpY2VzKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHRoZSBUVU5UQVAgdHJhbnNwb3J0IHByb3RvY29sLiAqLwotCi0jZGVmaW5lIFRSQU5TUE9SVF9UVU5UQVBfTkFNRSAidHVudGFwIgotI2RlZmluZSBUUkFOU1BPUlRfVFVOVEFQX01UVSBFVEhfTUFYX1BBQ0tFVAotCi1zdHJ1Y3QgdHVudGFwX2luZm8gewotCWNoYXIgZGV2X25hbWVbSUZOQU1TSVpdOwotCWludCBmaXhlZF9jb25maWc7Ci0JdW5zaWduZWQgY2hhciBnd1tFVEhfQUxFTl07Ci0JaW50IGZkOwotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLS8qIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG91dCBwcml2YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgZHJpdmVyLiAqLwotCi1zdHJ1Y3QgaXNzX25ldF9wcml2YXRlIHsKLQotCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBvcGVuZWRfbGlzdDsKLQotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0bDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXVuc2lnbmVkIGludCB0aW1lcl92YWw7Ci0KLQlpbnQgaW5kZXg7Ci0JaW50IG10dTsKLQotCXVuc2lnbmVkIGNoYXIgbWFjW0VUSF9BTEVOXTsKLQlpbnQgaGF2ZV9tYWM7Ci0KLQlzdHJ1Y3QgewotCQl1bmlvbiB7Ci0JCQlzdHJ1Y3QgdHVudGFwX2luZm8gdHVudGFwOwotCQl9IGluZm87Ci0KLQkJaW50ICgqb3Blbikoc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHApOwotCQl2b2lkICgqY2xvc2UpKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwKTsKLQkJaW50ICgqcmVhZCkoc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHAsIHN0cnVjdCBza19idWZmICoqc2tiKTsKLQkJaW50ICgqd3JpdGUpKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYik7Ci0JCXVuc2lnbmVkIHNob3J0ICgqcHJvdG9jb2wpKHN0cnVjdCBza19idWZmICpza2IpOwotCQlpbnQgKCpwb2xsKShzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCk7Ci0JfSB0cDsKLQotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT0gSVNTIFNJTUNBTEwgSU5URVJGQUNFID09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKiBOb3RlOiBfX3NpbWMgbXVzdCBfbm90XyBiZSBkZWNsYXJlZCBpbmxpbmUhICovCi0KLXN0YXRpYyBpbnQgZXJybm87Ci0KLXN0YXRpYyBpbnQgX19zaW1jIChpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgaW50IGUsIGludCBmKQotewotCWludCByZXQ7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzaW1jYWxsXG4iCi0JICAgIAkJICAgICAgIm1vdiAlMCwgYTJcbiIKLQkJCSAgICAgICJtb3YgJTEsIGEzXG4iIDogIj1hIiAocmV0KSwgIj1hIiAoZXJybm8pCi0JCQkgICAgICA6IDogImEyIiwgImEzIik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpbmxpbmUgc2ltY19vcGVuKGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCi17Ci0JcmV0dXJuIF9fc2ltYyhTWVNfb3BlbiwgKGludCkgZmlsZSwgZmxhZ3MsIG1vZGUsIDAsIDApOwotfQotCi1zdGF0aWMgaW50IGlubGluZSBzaW1jX2Nsb3NlKGludCBmZCkKLXsKLQlyZXR1cm4gX19zaW1jKFNZU19jbG9zZSwgZmQsIDAsIDAsIDAsIDApOwotfQotCi1zdGF0aWMgaW50IGlubGluZSBzaW1jX2lvY3RsKGludCBmZCwgaW50IHJlcXVlc3QsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gX19zaW1jKFNZU19pb2N0bCwgZmQsIHJlcXVlc3QsIChpbnQpIGFyZywgMCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgaW5saW5lIHNpbWNfcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBfX3NpbWMoU1lTX3JlYWQsIGZkLCAoaW50KSBidWYsIGNvdW50LCAwLCAwKTsKLX0KLQotc3RhdGljIGludCBpbmxpbmUgc2ltY193cml0ZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBfX3NpbWMoU1lTX3dyaXRlLCBmZCwgKGludCkgYnVmLCBjb3VudCwgMCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgaW5saW5lIHNpbWNfcG9sbChpbnQgZmQpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl9zZWMgPSAwLCAudHZfdXNlYyA9IDAgfTsKLQotCXJldHVybiBfX3NpbWMoU1lTX3NlbGVjdF9vbmUsIGZkLCBYVElTU19TRUxFQ1RfT05FX1JFQUQsIChpbnQpJnR2LDAsMCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEhFTFBFUlMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotCi1zdGF0aWMgY2hhciAqc3BsaXRfaWZfc3BlYyhjaGFyICpzdHIsIC4uLikKLXsKLQljaGFyICoqYXJnLCAqZW5kOwotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgc3RyKTsKLQl3aGlsZSAoKGFyZyA9IHZhX2FyZyhhcCwgY2hhcioqKSkgIT0gTlVMTCkgewotCQlpZiAoKnN0ciA9PSAnXDAnKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWVuZCA9IHN0cmNocihzdHIsICcsJyk7Ci0JCWlmIChlbmQgIT0gc3RyKQotCQkJKmFyZyA9IHN0cjsKLQkJaWYgKGVuZCA9PSBOVUxMKQotCQkJcmV0dXJuIE5VTEw7Ci0JCSplbmQgKysgPSAnXDAnOwotCQlzdHIgPSBlbmQ7Ci0JfQotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIHN0cjsKLX0KLQotCi0jaWYgMAotLyogQWRqdXN0IFNLQi4gKi8KLQotc3RydWN0IHNrX2J1ZmYgKmV0aGVyX2FkanVzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGV4dHJhKQotewotCWlmICgoc2tiICE9IE5VTEwpICYmIChza2JfdGFpbHJvb20oc2tiKSA8IGV4dHJhKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKLQotCQlza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMCwgZXh0cmEsIEdGUF9BVE9NSUMpOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXNrYiA9IHNrYjI7Ci0JfQotCWlmIChza2IgIT0gTlVMTCkKLQkJc2tiX3B1dChza2IsIGV4dHJhKTsKLQotCXJldHVybiBza2I7Ci19Ci0jZW5kaWYKLQotLyogUmV0dXJuIHRoZSBJUCBhZGRyZXNzIGFzIGEgc3RyaW5nIGZvciBhIGdpdmVuIGRldmljZS4gKi8KLQotc3RhdGljIHZvaWQgZGV2X2lwX2FkZHIodm9pZCAqZCwgY2hhciAqYnVmLCBjaGFyICpiaW5fYnVmKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkOwotCXN0cnVjdCBpbl9kZXZpY2UgKmlwID0gZGV2LT5pcF9wdHI7Ci0Jc3RydWN0IGluX2lmYWRkciAqaW47Ci0JX19iZTMyIGFkZHI7Ci0KLQlpZiAoKGlwID09IE5VTEwpIHx8ICgoaW4gPSBpcC0+aWZhX2xpc3QpID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRldmljZSBub3QgYXNzaWduZWQgYW4gSVAgYWRkcmVzcyFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYWRkciA9IGluLT5pZmFfYWRkcmVzczsKLQlzcHJpbnRmKGJ1ZiwgIiVkLiVkLiVkLiVkIiwgYWRkciAmIDB4ZmYsIChhZGRyID4+IDgpICYgMHhmZiwKLQkJKGFkZHIgPj4gMTYpICYgMHhmZiwgYWRkciA+PiAyNCk7Ci0KLQlpZiAoYmluX2J1ZikgewotCQliaW5fYnVmWzBdID0gYWRkciAmIDB4ZmY7Ci0JCWJpbl9idWZbMV0gPSAoYWRkciA+PiA4KSAmIDB4ZmY7Ci0JCWJpbl9idWZbMl0gPSAoYWRkciA+PiAxNikgJiAweGZmOwotCQliaW5fYnVmWzNdID0gYWRkciA+PiAyNDsKLQl9Ci19Ci0KLS8qIFNldCBFdGhlcm5ldCBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgZGV2aWNlLiAqLwotCi1zdGF0aWMgdm9pZCBpbmxpbmUgc2V0X2V0aGVyX21hYyh2b2lkICpkLCB1bnNpZ25lZCBjaGFyICphZGRyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkOwotCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT0gVFVOVEFQIFRSQU5TUE9SVCBJTlRFUkZBQ0UgPT09PT09PT09PT09PT09PT09PT09PSAqLwotCi1zdGF0aWMgaW50IHR1bnRhcF9vcGVuKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwKQotewotCXN0cnVjdCBpZnJlcSBpZnI7Ci0JY2hhciAqZGV2X25hbWUgPSBscC0+dHAuaW5mby50dW50YXAuZGV2X25hbWU7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0JaW50IGZkOwotCi0JLyogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBhIGZpeGVkIGNvbmZpZ3VyYXRpb24uICovCi0KLQlpZiAoIWxwLT50cC5pbmZvLnR1bnRhcC5maXhlZF9jb25maWcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChmZCA9IHNpbWNfb3BlbigiL2Rldi9uZXQvdHVuIiwgMDIsIDApKSA8IDApIHsJLyogT19SRFdSICovCi0JCXByaW50aygiRmFpbGVkIHRvIG9wZW4gL2Rldi9uZXQvdHVuLCByZXR1cm5lZCAlZCAiCi0JCSAgICAgICAiKGVycm5vID0gJWQpXG4iLCBmZCwgZXJybm8pOwotCQlyZXR1cm4gZmQ7Ci0JfQotCi0JbWVtc2V0KCZpZnIsIDAsIHNpemVvZiBpZnIpOwotCWlmci5pZnJfZmxhZ3MgPSBJRkZfVEFQIHwgSUZGX05PX1BJOwotCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZfbmFtZSwgc2l6ZW9mIGlmci5pZnJfbmFtZSk7Ci0KLQlpZiAoKGVyciA9IHNpbWNfaW9jdGwoZmQsIFRVTlNFVElGRiwgKHZvaWQqKSAmaWZyKSkgPCAwKSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldCBpbnRlcmZhY2UsIHJldHVybmVkICVkICIKLQkJICAgICAgICIoZXJybm8gPSAlZClcbiIsIGVyciwgZXJybm8pOwotCQlzaW1jX2Nsb3NlKGZkKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlscC0+dHAuaW5mby50dW50YXAuZmQgPSBmZDsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCB0dW50YXBfY2xvc2Uoc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHApCi17Ci0jaWYgMAotCWlmIChscC0+dHAuaW5mby50dW50YXAuZml4ZWRfY29uZmlnKQotCQlpdGVyX2FkZHJlc3NlcyhscC0+dHAuaW5mby50dW50YXAuZGV2LCBjbG9zZV9hZGRyLCBscC0+aG9zdC5kZXZfbmFtZSk7Ci0jZW5kaWYKLQlzaW1jX2Nsb3NlKGxwLT50cC5pbmZvLnR1bnRhcC5mZCk7Ci0JbHAtPnRwLmluZm8udHVudGFwLmZkID0gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgdHVudGFwX3JlYWQgKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikKLXsKLSNpZiAwCi0JKnNrYiA9IGV0aGVyX2FkanVzdF9za2IoKnNrYiwgRVRIX0hFQURFUl9PVEhFUik7Ci0JaWYgKCpza2IgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0jZW5kaWYKLQotCXJldHVybiBzaW1jX3JlYWQobHAtPnRwLmluZm8udHVudGFwLmZkLAotCQkJKCpza2IpLT5kYXRhLCAoKnNrYiktPmRldi0+bXR1ICsgRVRIX0hFQURFUl9PVEhFUik7Ci19Ci0KLXN0YXRpYyBpbnQgdHVudGFwX3dyaXRlIChzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCwgc3RydWN0IHNrX2J1ZmYgKipza2IpCi17Ci0JcmV0dXJuIHNpbWNfd3JpdGUobHAtPnRwLmluZm8udHVudGFwLmZkLCAoKnNrYiktPmRhdGEsICgqc2tiKS0+bGVuKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgdHVudGFwX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuIGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwotfQotCi1zdGF0aWMgaW50IHR1bnRhcF9wb2xsKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwKQotewotCXJldHVybiBzaW1jX3BvbGwobHAtPnRwLmluZm8udHVudGFwLmZkKTsKLX0KLQotLyoKLSAqIEN1cnJlbnRseSBvbmx5IGEgZGV2aWNlIG5hbWUgaXMgc3VwcG9ydGVkLgotICogZXRoWD10dW50YXBbLFttYWMgYWRkcmVzc11bLFtkZXZpY2UgbmFtZV1dXQotICovCi0KLXN0YXRpYyBpbnQgdHVudGFwX3Byb2JlKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwLCBpbnQgaW5kZXgsIGNoYXIgKmluaXQpCi17Ci0JY29uc3QgaW50IGxlbiA9IHN0cmxlbihUUkFOU1BPUlRfVFVOVEFQX05BTUUpOwotCWNoYXIgKmRldl9uYW1lID0gTlVMTCwgKm1hY19zdHIgPSBOVUxMLCAqcmVtID0gTlVMTDsKLQotCS8qIFRyYW5zcG9ydCBzaG91bGQgYmUgJ3R1bnRhcCc6IGV0aFg9dHVudGFwLG1hYyxkZXZfbmFtZSAqLwotCi0JaWYgKHN0cm5jbXAoaW5pdCwgVFJBTlNQT1JUX1RVTlRBUF9OQU1FLCBsZW4pKQotCQlyZXR1cm4gMDsKLQotCWlmICgqKGluaXQgKz0gc3RybGVuKFRSQU5TUE9SVF9UVU5UQVBfTkFNRSkpID09ICcsJykgewotCQlpZiAoKHJlbT1zcGxpdF9pZl9zcGVjKGluaXQrMSwgJm1hY19zdHIsICZkZXZfbmFtZSkpICE9IE5VTEwpIHsKLQkJCXByaW50aygiRXh0cmEgZ2FyYmFnZSBvbiBzcGVjaWZpY2F0aW9uIDogJyVzJ1xuIiwgcmVtKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIGlmICgqaW5pdCAhPSAnXDAnKSB7Ci0JCXByaW50aygiSW52YWxpZCBhcmd1bWVudDogJXMuIFNraXBwaW5nIGRldmljZSFcbiIsIGluaXQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZGV2X25hbWUpIHsKLQkJc3RybmNweShscC0+dHAuaW5mby50dW50YXAuZGV2X25hbWUsIGRldl9uYW1lLAotCQkJIHNpemVvZiBscC0+dHAuaW5mby50dW50YXAuZGV2X25hbWUpOwotCQlscC0+dHAuaW5mby50dW50YXAuZml4ZWRfY29uZmlnID0gMTsKLQl9IGVsc2UKLQkJc3RyY3B5KGxwLT50cC5pbmZvLnR1bnRhcC5kZXZfbmFtZSwgVFJBTlNQT1JUX1RVTlRBUF9OQU1FKTsKLQotCi0jaWYgMAotCWlmIChzZXR1cF9ldGhlcmFkZHIobWFjX3N0ciwgbHAtPm1hYykpCi0JCWxwLT5oYXZlX21hYyA9IDE7Ci0jZW5kaWYKLQlscC0+bXR1ID0gVFJBTlNQT1JUX1RVTlRBUF9NVFU7Ci0KLQkvL2xwLT5pbmZvLnR1bnRhcC5nYXRlX2FkZHIgPSBnYXRlX2FkZHI7Ci0KLQlscC0+dHAuaW5mby50dW50YXAuZmQgPSAtMTsKLQotCWxwLT50cC5vcGVuID0gdHVudGFwX29wZW47Ci0JbHAtPnRwLmNsb3NlID0gdHVudGFwX2Nsb3NlOwotCWxwLT50cC5yZWFkID0gdHVudGFwX3JlYWQ7Ci0JbHAtPnRwLndyaXRlID0gdHVudGFwX3dyaXRlOwotCWxwLT50cC5wcm90b2NvbCA9IHR1bnRhcF9wcm90b2NvbDsKLQlscC0+dHAucG9sbCA9IHR1bnRhcF9wb2xsOwotCi0JcHJpbnRrKCJUVU4vVEFQIGJhY2tlbmQgLSAiKTsKLSNpZiAwCi0JaWYgKGxwLT5ob3N0LmdhdGVfYWRkciAhPSBOVUxMKQotCQlwcmludGsoIklQID0gJXMiLCBscC0+aG9zdC5nYXRlX2FkZHIpOwotI2VuZGlmCi0JcHJpbnRrKCJcbiIpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IElTUyBORVQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIGludCBpc3NfbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0JaW50IHBrdF9sZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8qIENoZWNrIGlmIHRoZXJlIGlzIGFueSBuZXcgZGF0YS4gKi8KLQotCWlmIChscC0+dHAucG9sbChscCkgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBUcnkgdG8gYWxsb2NhdGUgbWVtb3J5LCBpZiBpdCBmYWlscywgdHJ5IGFnYWluIG5leHQgcm91bmQuICovCi0KLQlpZiAoKHNrYiA9IGRldl9hbGxvY19za2IoZGV2LT5tdHUgKyAyICsgRVRIX0hFQURFUl9PVEhFUikpID09IE5VTEwpIHsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2tiX3Jlc2VydmUoc2tiLCAyKTsKLQotCS8qIFNldHVwIHNrYiAqLwotCi0Jc2tiLT5kZXYgPSBkZXY7Ci0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlwa3RfbGVuID0gbHAtPnRwLnJlYWQobHAsICZza2IpOwotCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKLQotCWlmIChwa3RfbGVuID4gMCkgewotCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOwotCQlza2ItPnByb3RvY29sID0gbHAtPnRwLnByb3RvY29sKHNrYik7Ci0KLQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQlscC0+c3RhdHMucnhfcGFja2V0cysrOwotCS8vCW5ldGlmX3J4KHNrYik7Ci0JCW5ldGlmX3J4X25pKHNrYik7Ci0JCXJldHVybiBwa3RfbGVuOwotCX0KLQlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gcGt0X2xlbjsKLX0KLQotc3RhdGljIGludCBpc3NfbmV0X3BvbGwodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbGU7Ci0JaW50IGVyciwgcmV0ID0gMDsKLQotCXNwaW5fbG9jaygmb3BlbmVkX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaChlbGUsICZvcGVuZWQpIHsKLQkJc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHA7Ci0KLQkJbHAgPSBsaXN0X2VudHJ5KGVsZSwgc3RydWN0IGlzc19uZXRfcHJpdmF0ZSwgb3BlbmVkX2xpc3QpOwotCi0JCWlmICghbmV0aWZfcnVubmluZyhscC0+ZGV2KSkKLQkJCWJyZWFrOwotCi0JCXNwaW5fbG9jaygmbHAtPmxvY2spOwotCi0JCXdoaWxlICgoZXJyID0gaXNzX25ldF9yeChscC0+ZGV2KSkgPiAwKQotCQkJcmV0Kys7Ci0KLQkJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKLQotCQlpZiAoZXJyIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJEZXZpY2UgJyVzJyByZWFkIHJldHVybmVkICVkLCAiCi0JCQkgICAgICAgInNodXR0aW5nIGl0IGRvd25cbiIsIGxwLT5kZXYtPm5hbWUsIGVycik7Ci0JCQlkZXZfY2xvc2UobHAtPmRldik7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBGSVhNRSByZWFjdGl2YXRlX2ZkKGxwLT5mZCwgSVNTX0VUSF9JUlEpOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2soJm9wZW5lZF9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyB2b2lkIGlzc19uZXRfdGltZXIodW5zaWduZWQgbG9uZyBwcml2KQotewotCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUqIGxwID0gKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUqKSBwcml2OwotCi0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7Ci0KLQlpc3NfbmV0X3BvbGwoKTsKLQotCW1vZF90aW1lcigmbHAtPnRpbWVyLCBqaWZmaWVzICsgbHAtPnRpbWVyX3ZhbCk7Ci0KLQlzcGluX3VubG9jaygmbHAtPmxvY2spOwotfQotCi0KLXN0YXRpYyBpbnQgaXNzX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0JY2hhciBhZGRyW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1XDAiXTsKLQlpbnQgZXJyOwotCi0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7Ci0KLQlpZiAoKGVyciA9IGxwLT50cC5vcGVuKGxwKSkgPCAwKQotCQlnb3RvIG91dDsKLQotCWlmICghbHAtPmhhdmVfbWFjKSB7Ci0JCWRldl9pcF9hZGRyKGRldiwgYWRkciwgJmxwLT5tYWNbMl0pOwotCQlzZXRfZXRoZXJfbWFjKGRldiwgbHAtPm1hYyk7Ci0JfQotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotCS8qIGNsZWFyIGJ1ZmZlciAtIGl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgaG9zdCBzaWRlIG9mIHRoZSBpbnRlcmZhY2UKLQkgKiBpcyBmdWxsIHdoZW4gd2UgZ2V0IGhlcmUuIEluIHRoaXMgY2FzZSwgbmV3IGRhdGEgaXMgbmV2ZXIgcXVldWVkLAotCSAqIFNJR0lPcyBuZXZlciBhcnJpdmUsIGFuZCB0aGUgbmV0IG5ldmVyIHdvcmtzLgotCSAqLwotCXdoaWxlICgoZXJyID0gaXNzX25ldF9yeChkZXYpKSA+IDApCi0JCTsKLQotCXNwaW5fbG9jaygmb3BlbmVkX2xvY2spOwotCWxpc3RfYWRkKCZscC0+b3BlbmVkX2xpc3QsICZvcGVuZWQpOwotCXNwaW5fdW5sb2NrKCZvcGVuZWRfbG9jayk7Ci0KLQlpbml0X3RpbWVyKCZscC0+dGltZXIpOwotCWxwLT50aW1lcl92YWwgPSBJU1NfTkVUX1RJTUVSX1ZBTFVFOwotCWxwLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGxwOwotCWxwLT50aW1lci5mdW5jdGlvbiA9IGlzc19uZXRfdGltZXI7Ci0JbW9kX3RpbWVyKCZscC0+dGltZXIsIGppZmZpZXMgKyBscC0+dGltZXJfdmFsKTsKLQotb3V0OgotCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBpc3NfbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci1wcmludGsoImlzc19uZXRfY2xvc2UhXG4iKTsKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7Ci0KLQlzcGluX2xvY2soJm9wZW5lZF9sb2NrKTsKLQlsaXN0X2RlbCgmb3BlbmVkKTsKLQlzcGluX3VubG9jaygmb3BlbmVkX2xvY2spOwotCi0JZGVsX3RpbWVyX3N5bmMoJmxwLT50aW1lcik7Ci0KLQlscC0+dHAuY2xvc2UobHApOwotCi0Jc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpc3NfbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBsZW47Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0KLQlsZW4gPSBscC0+dHAud3JpdGUobHAsICZza2IpOwotCi0JaWYgKGxlbiA9PSBza2ItPmxlbikgewotCQlscC0+c3RhdHMudHhfcGFja2V0cysrOwotCQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JCS8qIHRoaXMgaXMgbm9ybWFsbHkgZG9uZSBpbiB0aGUgaW50ZXJydXB0IHdoZW4gdHggZmluaXNoZXMgKi8KLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCi0JfSBlbHNlIGlmIChsZW4gPT0gMCkgewotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQlscC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCi0JfSBlbHNlIHsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJcHJpbnRrKEtFUk5fRVJSICJpc3NfbmV0X3N0YXJ0X3htaXQ6IGZhaWxlZCglZClcbiIsIGxlbik7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlzc19uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0JcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkIGlzc19uZXRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0jaWYgMAotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCXJldHVybjsKLQllbHNlIGlmIChkZXYtPm1jX2NvdW50KQotCQlkZXYtPmZsYWdzIHw9IElGRl9BTExNVUxUSTsKLQllbHNlCi0JCWRldi0+ZmxhZ3MgJj0gfklGRl9BTExNVUxUSTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpc3NfbmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSNpZiAwCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgaXNzX25ldF9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCi17Ci0jaWYgMAotCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotCXN0cnVjdCBzb2NrYWRkciAqaHdhZGRyID0gYWRkcjsKLQotCXNwaW5fbG9jaygmbHAtPmxvY2spOwotCW1lbWNweShkZXYtPmRldl9hZGRyLCBod2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQlzcGluX3VubG9jaygmbHAtPmxvY2spOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpc3NfbmV0X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0jaWYgMAotCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotCWludCBlcnIgPSAwOwotCi0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7Ci0KLQkvLyBGSVhNRSBub3QgbmVlZGVkIG5ld19tdHUgPSB0cmFuc3BvcnRfc2V0X210dShuZXdfbXR1LCAmbHAtPnVzZXIpOwotCi0JaWYgKG5ld19tdHUgPCAwKQotCQllcnIgPSBuZXdfbXR1OwotCWVsc2UKLQkJZGV2LT5tdHUgPSBuZXdfbXR1OwotCi0Jc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKLQlyZXR1cm4gZXJyOwotI2VuZGlmCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXZvaWQgaXNzX25ldF91c2VyX3RpbWVyX2V4cGlyZSh1bnNpZ25lZCBsb25nIF9jb25uKQotewotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzc19uZXRfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lICA9IERSSVZFUl9OQU1FLAotCX0sCi19OwotCi1zdGF0aWMgaW50IGRyaXZlcl9yZWdpc3RlcmVkOwotCi1zdGF0aWMgaW50IGlzc19uZXRfY29uZmlndXJlKGludCBpbmRleCwgY2hhciAqaW5pdCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwOwotCWludCBlcnI7Ci0KLQlpZiAoKGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZiAqbHApKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZXRoX2NvbmZpZ3VyZTogZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZVxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBlbGVtZW50LiAqLwotCi0JbHAgPSBkZXYtPnByaXY7Ci0JKmxwID0gKChzdHJ1Y3QgaXNzX25ldF9wcml2YXRlKSB7Ci0JCS5kZXZpY2VfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChscC0+ZGV2aWNlX2xpc3QpLAotCQkub3BlbmVkX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQobHAtPm9wZW5lZF9saXN0KSwKLQkJLmxvY2sJCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKLQkJLmRldgkJCT0gZGV2LAotCQkuaW5kZXgJCQk9IGluZGV4LAotCQkvLy5mZCAgICAgICAgICAgICAgICAgICA9IC0xLAotCQkubWFjCQkJPSB7IDB4ZmUsIDB4ZmQsIDB4MCwgMHgwLCAweDAsIDB4MCB9LAotCQkuaGF2ZV9tYWMJCT0gMCwKLQkJfSk7Ci0KLQkvKgotCSAqIFRyeSBhbGwgdHJhbnNwb3J0IHByb3RvY29scy4KLQkgKiBOb3RlOiBtb3JlIHByb3RvY29scyBjYW4gYmUgYWRkZWQgYnkgYWRkaW5nICcmJiAhWF9pbml0KGxwLCBldGgpJy4KLQkgKi8KLQotCWlmICghdHVudGFwX3Byb2JlKGxwLCBpbmRleCwgaW5pdCkpIHsKLQkJcHJpbnRrKCJJbnZhbGlkIGFyZ3VtZW50cy4gU2tpcHBpbmcgZGV2aWNlIVxuIik7Ci0JCWdvdG8gZXJyb3V0OwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIk5ldGRldmljZSAlZCAiLCBpbmRleCk7Ci0JaWYgKGxwLT5oYXZlX21hYykKLQkJcHJpbnRrKCIoJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngpICIsCi0JCQkJbHAtPm1hY1swXSwgbHAtPm1hY1sxXSwKLQkJCQlscC0+bWFjWzJdLCBscC0+bWFjWzNdLAotCQkJCWxwLT5tYWNbNF0sIGxwLT5tYWNbNV0pOwotCXByaW50aygiOiAiKTsKLQotCS8qIHN5c2ZzIHJlZ2lzdGVyICovCi0KLQlpZiAoIWRyaXZlcl9yZWdpc3RlcmVkKSB7Ci0JCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNzX25ldF9kcml2ZXIpOwotCQlkcml2ZXJfcmVnaXN0ZXJlZCA9IDE7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZkZXZpY2VzX2xvY2spOwotCWxpc3RfYWRkKCZscC0+ZGV2aWNlX2xpc3QsICZkZXZpY2VzKTsKLQlzcGluX3VubG9jaygmZGV2aWNlc19sb2NrKTsKLQotCWxwLT5wZGV2LmlkID0gaW5kZXg7Ci0JbHAtPnBkZXYubmFtZSA9IERSSVZFUl9OQU1FOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbHAtPnBkZXYpOwotCVNFVF9ORVRERVZfREVWKGRldiwmbHAtPnBkZXYuZGV2KTsKLQotCS8qCi0JICogSWYgdGhpcyBuYW1lIGVuZHMgdXAgY29uZmxpY3Rpbmcgd2l0aCBhbiBleGlzdGluZyByZWdpc3RlcmVkCi0JICogbmV0ZGV2aWNlLCB0aGF0IGlzIE9LLCByZWdpc3Rlcl9uZXRkZXZ7LGljZX0oKSB3aWxsIG5vdGljZSB0aGlzCi0JICogYW5kIGZhaWwuCi0JICovCi0Jc25wcmludGYoZGV2LT5uYW1lLCBzaXplb2YgZGV2LT5uYW1lLCAiZXRoJWQiLCBpbmRleCk7Ci0KLQlkZXYtPm10dSA9IGxwLT5tdHU7Ci0JZGV2LT5vcGVuID0gaXNzX25ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaXNzX25ldF9zdGFydF94bWl0OwotCWRldi0+c3RvcCA9IGlzc19uZXRfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBpc3NfbmV0X2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGlzc19uZXRfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IGlzc19uZXRfdHhfdGltZW91dDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGlzc19uZXRfc2V0X21hYzsKLQlkZXYtPmNoYW5nZV9tdHUgPSBpc3NfbmV0X2NoYW5nZV9tdHU7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IChIWiA+PiAxKTsKLQlkZXYtPmlycSA9IC0xOwotCi0JcnRubF9sb2NrKCk7Ci0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7Ci0JcnRubF91bmxvY2soKTsKLQotCWlmIChlcnIpIHsKLQkJcHJpbnRrKCJFcnJvciByZWdpc3RlcmluZyBuZXQgZGV2aWNlIVxuIik7Ci0JCS8qIFhYWDogc2hvdWxkIHdlIGNhbGwgLT5yZW1vdmUoKSBoZXJlPyAqLwotCQlmcmVlX25ldGRldihkZXYpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpbml0X3RpbWVyKCZscC0+dGwpOwotCWxwLT50bC5mdW5jdGlvbiA9IGlzc19uZXRfdXNlcl90aW1lcl9leHBpcmU7Ci0KLSNpZiAwCi0JaWYgKGxwLT5oYXZlX21hYykKLQkJc2V0X2V0aGVyX21hYyhkZXYsIGxwLT5tYWMpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci0KLWVycm91dDoKLQkvLyBGSVhNRTogdW5yZWdpc3RlcjsgZnJlZSwgZXRjLi4KLQlyZXR1cm4gLUVJTzsKLQotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIEZpbGxlZCBpbiBkdXJpbmcgZWFybHkgYm9vdCAqLwotCi1zdHJ1Y3QgbGlzdF9oZWFkIGV0aF9jbWRfbGluZSA9IExJU1RfSEVBRF9JTklUKGV0aF9jbWRfbGluZSk7Ci0KLXN0cnVjdCBpc3NfbmV0X2luaXQgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljaGFyICppbml0OwkJLyogaW5pdCBzdHJpbmcgKi8KLQlpbnQgaW5kZXg7Ci19OwotCi0vKgotICogUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhbmQgbG9vayBmb3IgJ2V0aFg9Li4uJyBmaWVsZHMsIGFuZCByZWdpc3RlciBhbGwKLSAqIHRob3NlIGZpZWxkcy4gVGhleSB3aWxsIGJlIGxhdGVyIGluaXRpYWxpemVkIGluIGlzc19uZXRfaW5pdC4KLSAqLwotCi0jZGVmaW5lIEVSUiBLRVJOX0VSUiAiaXNzX25ldF9zZXR1cDogIgotCi1zdGF0aWMgaW50IGlzc19uZXRfc2V0dXAoY2hhciAqc3RyKQotewotCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmRldmljZSA9IE5VTEw7Ci0Jc3RydWN0IGlzc19uZXRfaW5pdCAqbmV3OwotCXN0cnVjdCBsaXN0X2hlYWQgKmVsZTsKLQljaGFyICplbmQ7Ci0JaW50IG47Ci0KLQluID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kLCAwKTsKLQlpZiAoZW5kID09IHN0cikgewotCQlwcmludGsoRVJSICJGYWlsZWQgdG8gcGFyc2UgJyVzJ1xuIiwgc3RyKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmIChuIDwgMCkgewotCQlwcmludGsoRVJSICJEZXZpY2UgJWQgaXMgbmVnYXRpdmVcbiIsIG4pOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKCooc3RyID0gZW5kKSAhPSAnPScpIHsKLQkJcHJpbnRrKEVSUiAiRXhwZWN0ZWQgJz0nIGFmdGVyIGRldmljZSBudW1iZXJcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzcGluX2xvY2soJmRldmljZXNfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoKGVsZSwgJmRldmljZXMpIHsKLQkJZGV2aWNlID0gbGlzdF9lbnRyeShlbGUsIHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUsIGRldmljZV9saXN0KTsKLQkJaWYgKGRldmljZS0+aW5kZXggPT0gbikKLQkJCWJyZWFrOwotCX0KLQotCXNwaW5fdW5sb2NrKCZkZXZpY2VzX2xvY2spOwotCi0JaWYgKGRldmljZSAmJiBkZXZpY2UtPmluZGV4ID09IG4pIHsKLQkJcHJpbnRrKEVSUiAiRGV2aWNlICVkIGFscmVhZHkgY29uZmlndXJlZFxuIiwgbik7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgobmV3ID0gYWxsb2NfYm9vdG1lbShzaXplb2YgbmV3KSkgPT0gTlVMTCkgewotCQlwcmludGsoIkFsbG9jX2Jvb3RtZW0gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJm5ldy0+bGlzdCk7Ci0JbmV3LT5pbmRleCA9IG47Ci0JbmV3LT5pbml0ID0gc3RyICsgMTsKLQotCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgJmV0aF9jbWRfbGluZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLSN1bmRlZiBFUlIKLQotX19zZXR1cCgiZXRoPSIsIGlzc19uZXRfc2V0dXApOwotCi0vKgotICogSW5pdGlhbGl6ZSBhbGwgSVNTIEV0aGVybmV0IGRldmljZXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGluIGlzc19uZXRfc2V0dXAuCi0gKi8KLQotc3RhdGljIGludCBpc3NfbmV0X2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbGUsICpuZXh0OwotCi0JLyogV2FsayB0aHJvdWdoIGFsbCBFdGhlcm5ldCBkZXZpY2VzIHNwZWNpZmllZCBpbiB0aGUgY29tbWFuZCBsaW5lLiAqLwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKGVsZSwgbmV4dCwgJmV0aF9jbWRfbGluZSkgewotCQlzdHJ1Y3QgaXNzX25ldF9pbml0ICpldGg7Ci0JCWV0aCA9IGxpc3RfZW50cnkoZWxlLCBzdHJ1Y3QgaXNzX25ldF9pbml0LCBsaXN0KTsKLQkJaXNzX25ldF9jb25maWd1cmUoZXRoLT5pbmRleCwgZXRoLT5pbml0KTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotbW9kdWxlX2luaXQoaXNzX25ldF9pbml0KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL01ha2VmaWxlIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL01ha2VmaWxlCnJlbmFtZSB0byBhcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL01ha2VmaWxlCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2NvbnNvbGUuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDFlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2NvbnNvbGUuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIGFyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBUZW5zaWxpY2EgSW5jLgorICogICBBdXRob3JzCUNocmlzdGlhbiBaYW5rZWwsIEpvZSBUYXlsb3IKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxQLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS9zaW1jYWxsLmg+CisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorCisjaWZkZWYgU0VSSUFMX0lOTElORQorI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKKyNlbmRpZgorCisjZGVmaW5lIFNFUklBTF9NQVhfTlVNX0xJTkVTIDEKKyNkZWZpbmUgU0VSSUFMX1RJTUVSX1ZBTFVFICgyMCAqIEhaKQorCitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnNlcmlhbF9kcml2ZXI7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qgc2VyaWFsX3RpbWVyOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVyX2xvY2spOworCitpbnQgZXJybm87CisKK3N0YXRpYyBpbnQgX19zaW1jIChpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgaW50IGUsIGludCBmKSBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKTsKK3N0YXRpYyBpbnQgX19zaW1jIChpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgaW50IGUsIGludCBmKQoreworCWludCByZXQ7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzaW1jYWxsXG4iCisJCQkibW92ICUwLCBhMlxuIgorCQkJIm1vdiAlMSwgYTNcbiIgOiAiPWEiIChyZXQpLCAiPWEiIChlcnJubykKKwkJCTogOiAiYTIiLCAiYTMiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqc2VyaWFsX3ZlcnNpb24gPSAiMC4xIjsKK3N0YXRpYyBjaGFyICpzZXJpYWxfbmFtZSA9ICJJU1Mgc2VyaWFsIGRyaXZlciI7CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGEgc2VyaWFsIHBvcnQgaXMgb3BlbmVkLiAgSXQKKyAqIGVuYWJsZXMgaW50ZXJydXB0cyBmb3IgYSBzZXJpYWwgcG9ydCwgbGlua2luZyBpbiBpdHMgYXN5bmMgc3RydWN0dXJlIGludG8KKyAqIHRoZSBJUlEgY2hhaW4uICAgSXQgYWxzbyBwZXJmb3JtcyB0aGUgc2VyaWFsLXNwZWNpZmljCisgKiBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHR0eSBzdHJ1Y3R1cmUuCisgKi8KKworc3RhdGljIHZvaWQgcnNfcG9sbCh1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIGludCByc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlpbnQgbGluZSA9IHR0eS0+aW5kZXg7CisKKwlpZiAoKGxpbmUgPCAwKSB8fCAobGluZSA+PSBTRVJJQUxfTUFYX05VTV9MSU5FUykpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrKCZ0aW1lcl9sb2NrKTsKKworCWlmICh0dHktPmNvdW50ID09IDEpIHsKKwkJaW5pdF90aW1lcigmc2VyaWFsX3RpbWVyKTsKKwkJc2VyaWFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgdHR5OworCQlzZXJpYWxfdGltZXIuZnVuY3Rpb24gPSByc19wb2xsOworCQltb2RfdGltZXIoJnNlcmlhbF90aW1lciwgamlmZmllcyArIFNFUklBTF9USU1FUl9WQUxVRSk7CisJfQorCXNwaW5fdW5sb2NrKCZ0aW1lcl9sb2NrKTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGlzc19zZXJpYWxfY2xvc2UoKQorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsIHBvcnQgZ2V0cyBjbG9zZWQuICBGaXJzdCwgd2UKKyAqIHdhaXQgZm9yIHRoZSBsYXN0IHJlbWFpbmluZyBkYXRhIHRvIGJlIHNlbnQuICBUaGVuLCB3ZSB1bmxpbmsgaXRzCisgKiBhc3luYyBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW50ZXJydXB0IGNoYWluIGlmIG5lY2Vzc2FyeSwgYW5kIHdlIGZyZWUKKyAqIHRoYXQgSVJRIGlmIG5vdGhpbmcgaXMgbGVmdCBpbiB0aGUgY2hhaW4uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgcnNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXNwaW5fbG9jaygmdGltZXJfbG9jayk7CisJaWYgKHR0eS0+Y291bnQgPT0gMSkKKwkJZGVsX3RpbWVyX3N5bmMoJnNlcmlhbF90aW1lcik7CisJc3Bpbl91bmxvY2soJnRpbWVyX2xvY2spOworfQorCisKK3N0YXRpYyBpbnQgcnNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwkvKiBzZWUgZHJpdmVycy9jaGFyL3NlcmlhbFguYyB0byByZWZlcmVuY2Ugb3JpZ2luYWwgdmVyc2lvbiAqLworCisJX19zaW1jIChTWVNfd3JpdGUsIDEsICh1bnNpZ25lZCBsb25nKWJ1ZiwgY291bnQsIDAsIDApOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgcnNfcG9sbCh1bnNpZ25lZCBsb25nIHByaXYpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QqIHR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCopIHByaXY7CisKKwlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3NlYyA9IDAsIC50dl91c2VjID0gMCB9OworCWludCBpID0gMDsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlzcGluX2xvY2soJnRpbWVyX2xvY2spOworCisJd2hpbGUgKF9fc2ltYyhTWVNfc2VsZWN0X29uZSwgMCwgWFRJU1NfU0VMRUNUX09ORV9SRUFELCAoaW50KSZ0diwwLDApKXsKKwkJX19zaW1jIChTWVNfcmVhZCwgMCwgKHVuc2lnbmVkIGxvbmcpJmMsIDEsIDAsIDApOworCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGMsIFRUWV9OT1JNQUwpOworCQlpKys7CisJfQorCisJaWYgKGkpCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisKKworCW1vZF90aW1lcigmc2VyaWFsX3RpbWVyLCBqaWZmaWVzICsgU0VSSUFMX1RJTUVSX1ZBTFVFKTsKKwlzcGluX3VubG9jaygmdGltZXJfbG9jayk7Cit9CisKKworc3RhdGljIHZvaWQgcnNfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKK3sKKwljaGFyIGJ1ZlsyXTsKKworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwlidWZbMF0gPSBjaDsKKwlidWZbMV0gPSAnXDAnOwkJLyogSXMgdGhpcyBOVUxMIG5lY2Vzc2FyeT8gKi8KKwlfX3NpbWMgKFNZU193cml0ZSwgMSwgKHVuc2lnbmVkIGxvbmcpIGJ1ZiwgMSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJzX2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7Cit9CisKK3N0YXRpYyBpbnQgcnNfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIExldCdzIHNheSBpc3MgY2FuIGFsd2F5cyBhY2NlcHQgMksgY2hhcmFjdGVycy4uICovCisJcmV0dXJuIDIgKiAxMDI0OworfQorCitzdGF0aWMgaW50IHJzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIHRoZSBpc3MgZG9lc24ndCBidWZmZXIgY2hhcmFjdGVycyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByc19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwkvKiBTdHViLCBvbmNlIGFnYWluLi4gKi8KK30KKworc3RhdGljIHZvaWQgcnNfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQoreworCS8qIFN0dWIsIG9uY2UgYWdhaW4uLiAqLworfQorCitzdGF0aWMgaW50IHJzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAorCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisJb2ZmX3QgYmVnaW4gPSAwOworCisJbGVuICs9IHNwcmludGYocGFnZSwgInNlcmluZm86MS4wIGRyaXZlcjolc1xuIiwgc2VyaWFsX3ZlcnNpb24pOworCSplb2YgPSAxOworCisJaWYgKG9mZiA+PSBsZW4gKyBiZWdpbikKKwkJcmV0dXJuIDA7CisKKwkqc3RhcnQgPSBwYWdlICsgKG9mZiAtIGJlZ2luKTsKKwlyZXR1cm4gKChjb3VudCA8IGJlZ2luICsgbGVuIC0gb2ZmKSA/IGNvdW50IDogYmVnaW4gKyBsZW4gLSBvZmYpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2VyaWFsX29wcyA9IHsKKwkub3BlbiA9IHJzX29wZW4sCisJLmNsb3NlID0gcnNfY2xvc2UsCisJLndyaXRlID0gcnNfd3JpdGUsCisJLnB1dF9jaGFyID0gcnNfcHV0X2NoYXIsCisJLmZsdXNoX2NoYXJzID0gcnNfZmx1c2hfY2hhcnMsCisJLndyaXRlX3Jvb20gPSByc193cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPSByc19jaGFyc19pbl9idWZmZXIsCisJLmhhbmd1cCA9IHJzX2hhbmd1cCwKKwkud2FpdF91bnRpbF9zZW50ID0gcnNfd2FpdF91bnRpbF9zZW50LAorCS5yZWFkX3Byb2MgPSByc19yZWFkX3Byb2MKK307CisKK2ludCBfX2luaXQgcnNfaW5pdCh2b2lkKQoreworCXNlcmlhbF9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKDEpOworCisJcHJpbnRrICgiJXMgJXNcbiIsIHNlcmlhbF9uYW1lLCBzZXJpYWxfdmVyc2lvbik7CisKKwkvKiBJbml0aWFsaXplIHRoZSB0dHlfZHJpdmVyIHN0cnVjdHVyZSAqLworCisJc2VyaWFsX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlzZXJpYWxfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJpc3Nfc2VyaWFsIjsKKwlzZXJpYWxfZHJpdmVyLT5uYW1lID0gInR0eVMiOworCXNlcmlhbF9kcml2ZXItPm1ham9yID0gVFRZX01BSk9SOworCXNlcmlhbF9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gNjQ7CisJc2VyaWFsX2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CisJc2VyaWFsX2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKKwlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisJc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQorCQlCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJc2VyaWFsX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOworCisJdHR5X3NldF9vcGVyYXRpb25zKHNlcmlhbF9kcml2ZXIsICZzZXJpYWxfb3BzKTsKKworCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKHNlcmlhbF9kcml2ZXIpKQorCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgc2VyaWFsIGRyaXZlclxuIik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIF9fZXhpdCB2b2lkIHJzX2V4aXQodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoKGVycm9yID0gdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHNlcmlhbF9kcml2ZXIpKSkKKwkJcHJpbnRrKCJJU1NfU0VSSUFMOiBmYWlsZWQgdG8gdW5yZWdpc3RlciBzZXJpYWwgZHJpdmVyICglZClcbiIsCisJCSAgICAgICBlcnJvcik7CisJcHV0X3R0eV9kcml2ZXIoc2VyaWFsX2RyaXZlcik7Cit9CisKKworLyogV2UgdXNlIGBsYXRlX2luaXRjYWxsJyBpbnN0ZWFkIG9mIGp1c3QgYF9faW5pdGNhbGwnIGFzIGEgd29ya2Fyb3VuZCBmb3IKKyAqIHRoZSBmYWN0IHRoYXQgKDEpIHNpbWNvbnNfdHR5X2luaXQgY2FuJ3QgYmUgY2FsbGVkIGJlZm9yZSB0dHlfaW5pdCwKKyAqICgyKSB0dHlfaW5pdCBpcyBjYWxsZWQgdmlhIGBtb2R1bGVfaW5pdCcsICgzKSBpZiBzdGF0aWNhbGx5IGxpbmtlZCwKKyAqIG1vZHVsZV9pbml0ID09IGRldmljZV9pbml0LCBhbmQgKDQpIHRoZXJlJ3Mgbm8gb3JkZXJpbmcgb2YgaW5pdCBsaXN0cy4KKyAqIFdlIGNhbiBkbyB0aGlzIGVhc2lseSBiZWNhdXNlIHNpbWNvbnMgaXMgYWx3YXlzIHN0YXRpY2FsbHkgbGlua2VkLCBidXQKKyAqIG90aGVyIHR0eSBkcml2ZXJzIHRoYXQgZGVwZW5kIG9uIHR0eV9pbml0IGFuZCB3aGljaCBtdXN0IHVzZQorICogYG1vZHVsZV9pbml0JyB0byBkZWNsYXJlIHRoZWlyIGluaXQgcm91dGluZXMgYXJlIGxpa2VseSB0byBiZSBicm9rZW4uCisgKi8KKworbGF0ZV9pbml0Y2FsbChyc19pbml0KTsKKworCisjaWZkZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCisKK3N0YXRpYyB2b2lkIGlzc19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgY291bnQpCit7CisJaW50IGxlbiA9IHN0cmxlbihzKTsKKworCWlmIChzICE9IDAgJiYgKnMgIT0gMCkKKwkJX19zaW1jIChTWVNfd3JpdGUsIDEsICh1bnNpZ25lZCBsb25nKXMsCisJCQljb3VudCA8IGxlbiA/IGNvdW50IDogbGVuLDAsMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciogaXNzX2NvbnNvbGVfZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQoreworCSppbmRleCA9IGMtPmluZGV4OworCXJldHVybiBzZXJpYWxfZHJpdmVyOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzZXJjb25zID0geworCS5uYW1lID0gInR0eVMiLAorCS53cml0ZSA9IGlzc19jb25zb2xlX3dyaXRlLAorCS5kZXZpY2UgPSBpc3NfY29uc29sZV9kZXZpY2UsCisJLmZsYWdzID0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9IC0xCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc3NfY29uc29sZV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfY29uc29sZSgmc2VyY29ucyk7CisJcmV0dXJuIDA7Cit9CisKK2NvbnNvbGVfaW5pdGNhbGwoaXNzX2NvbnNvbGVfaW5pdCk7CisKKyNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX0NPTlNPTEUgKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL2lvLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2lvLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9pby5jCnJlbmFtZSB0byBhcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2lvLmMKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvbmV0d29yay5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlMjUyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvbmV0d29yay5jCkBAIC0wLDAgKzEsODIzIEBACisvKgorICoKKyAqIGFyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKKyAqCisgKiBQbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBBdXRob3JzOiBDaHJpcyBaYW5rZWwgPGNocmlzQHphbmtlbC5uZXQ+CisgKiBCYXNlZCBvbiB3b3JrIGZvcm0gdGhlIFVNTCB0ZWFtLgorICoKKyAqIENvcHlyaWdodCAyMDA1IFRlbnNpbGljYSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS9zaW1jYWxsLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImlzcy1uZXRkZXYiCisjZGVmaW5lIEVUSF9NQVhfUEFDS0VUIDE1MDAKKyNkZWZpbmUgRVRIX0hFQURFUl9PVEhFUiAxNAorI2RlZmluZSBJU1NfTkVUX1RJTUVSX1ZBTFVFICgyICogSFopCisKKworc3RhdGljIERFRklORV9TUElOTE9DSyhvcGVuZWRfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKG9wZW5lZCk7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGV2aWNlc19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoZGV2aWNlcyk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCB0aGUgVFVOVEFQIHRyYW5zcG9ydCBwcm90b2NvbC4gKi8KKworI2RlZmluZSBUUkFOU1BPUlRfVFVOVEFQX05BTUUgInR1bnRhcCIKKyNkZWZpbmUgVFJBTlNQT1JUX1RVTlRBUF9NVFUgRVRIX01BWF9QQUNLRVQKKworc3RydWN0IHR1bnRhcF9pbmZvIHsKKwljaGFyIGRldl9uYW1lW0lGTkFNU0laXTsKKwlpbnQgZml4ZWRfY29uZmlnOworCXVuc2lnbmVkIGNoYXIgZ3dbRVRIX0FMRU5dOworCWludCBmZDsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvdXQgcHJpdmF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGRyaXZlci4gKi8KKworc3RydWN0IGlzc19uZXRfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgb3BlbmVkX2xpc3Q7CisKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBkZXY7CisJc3RydWN0IHRpbWVyX2xpc3QgdGw7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwl1bnNpZ25lZCBpbnQgdGltZXJfdmFsOworCisJaW50IGluZGV4OworCWludCBtdHU7CisKKwl1bnNpZ25lZCBjaGFyIG1hY1tFVEhfQUxFTl07CisJaW50IGhhdmVfbWFjOworCisJc3RydWN0IHsKKwkJdW5pb24geworCQkJc3RydWN0IHR1bnRhcF9pbmZvIHR1bnRhcDsKKwkJfSBpbmZvOworCisJCWludCAoKm9wZW4pKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwKTsKKwkJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCk7CisJCWludCAoKnJlYWQpKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYik7CisJCWludCAoKndyaXRlKShzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCwgc3RydWN0IHNrX2J1ZmYgKipza2IpOworCQl1bnNpZ25lZCBzaG9ydCAoKnByb3RvY29sKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwkJaW50ICgqcG9sbCkoc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHApOworCX0gdHA7CisKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09IElTUyBTSU1DQUxMIElOVEVSRkFDRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogTm90ZTogX19zaW1jIG11c3QgX25vdF8gYmUgZGVjbGFyZWQgaW5saW5lISAqLworCitzdGF0aWMgaW50IGVycm5vOworCitzdGF0aWMgaW50IF9fc2ltYyAoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQsIGludCBlLCBpbnQgZikgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSk7CitzdGF0aWMgaW50IF9fc2ltYyAoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQsIGludCBlLCBpbnQgZikKK3sKKwlpbnQgcmV0OworCV9fYXNtX18gX192b2xhdGlsZV9fICgic2ltY2FsbFxuIgorCSAgICAJCSAgICAgICJtb3YgJTAsIGEyXG4iCisJCQkgICAgICAibW92ICUxLCBhM1xuIiA6ICI9YSIgKHJldCksICI9YSIgKGVycm5vKQorCQkJICAgICAgOiA6ICJhMiIsICJhMyIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lIHNpbWNfb3BlbihjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQoreworCXJldHVybiBfX3NpbWMoU1lTX29wZW4sIChpbnQpIGZpbGUsIGZsYWdzLCBtb2RlLCAwLCAwKTsKK30KKworc3RhdGljIGludCBpbmxpbmUgc2ltY19jbG9zZShpbnQgZmQpCit7CisJcmV0dXJuIF9fc2ltYyhTWVNfY2xvc2UsIGZkLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCBpbmxpbmUgc2ltY19pb2N0bChpbnQgZmQsIGludCByZXF1ZXN0LCB2b2lkICphcmcpCit7CisJcmV0dXJuIF9fc2ltYyhTWVNfaW9jdGwsIGZkLCByZXF1ZXN0LCAoaW50KSBhcmcsIDAsIDApOworfQorCitzdGF0aWMgaW50IGlubGluZSBzaW1jX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gX19zaW1jKFNZU19yZWFkLCBmZCwgKGludCkgYnVmLCBjb3VudCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lIHNpbWNfd3JpdGUoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gX19zaW1jKFNZU193cml0ZSwgZmQsIChpbnQpIGJ1ZiwgY291bnQsIDAsIDApOworfQorCitzdGF0aWMgaW50IGlubGluZSBzaW1jX3BvbGwoaW50IGZkKQoreworCXN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gMCwgLnR2X3VzZWMgPSAwIH07CisKKwlyZXR1cm4gX19zaW1jKFNZU19zZWxlY3Rfb25lLCBmZCwgWFRJU1NfU0VMRUNUX09ORV9SRUFELCAoaW50KSZ0diwwLDApOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBIRUxQRVJTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworc3RhdGljIGNoYXIgKnNwbGl0X2lmX3NwZWMoY2hhciAqc3RyLCAuLi4pCit7CisJY2hhciAqKmFyZywgKmVuZDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIHN0cik7CisJd2hpbGUgKChhcmcgPSB2YV9hcmcoYXAsIGNoYXIqKikpICE9IE5VTEwpIHsKKwkJaWYgKCpzdHIgPT0gJ1wwJykKKwkJCXJldHVybiBOVUxMOworCQllbmQgPSBzdHJjaHIoc3RyLCAnLCcpOworCQlpZiAoZW5kICE9IHN0cikKKwkJCSphcmcgPSBzdHI7CisJCWlmIChlbmQgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQkqZW5kICsrID0gJ1wwJzsKKwkJc3RyID0gZW5kOworCX0KKwl2YV9lbmQoYXApOworCXJldHVybiBzdHI7Cit9CisKKworI2lmIDAKKy8qIEFkanVzdCBTS0IuICovCisKK3N0cnVjdCBza19idWZmICpldGhlcl9hZGp1c3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGludCBleHRyYSkKK3sKKwlpZiAoKHNrYiAhPSBOVUxMKSAmJiAoc2tiX3RhaWxyb29tKHNrYikgPCBleHRyYSkpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CisKKwkJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDAsIGV4dHJhLCBHRlBfQVRPTUlDKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlza2IgPSBza2IyOworCX0KKwlpZiAoc2tiICE9IE5VTEwpCisJCXNrYl9wdXQoc2tiLCBleHRyYSk7CisKKwlyZXR1cm4gc2tiOworfQorI2VuZGlmCisKKy8qIFJldHVybiB0aGUgSVAgYWRkcmVzcyBhcyBhIHN0cmluZyBmb3IgYSBnaXZlbiBkZXZpY2UuICovCisKK3N0YXRpYyB2b2lkIGRldl9pcF9hZGRyKHZvaWQgKmQsIGNoYXIgKmJ1ZiwgY2hhciAqYmluX2J1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgaW5fZGV2aWNlICppcCA9IGRldi0+aXBfcHRyOworCXN0cnVjdCBpbl9pZmFkZHIgKmluOworCV9fYmUzMiBhZGRyOworCisJaWYgKChpcCA9PSBOVUxMKSB8fCAoKGluID0gaXAtPmlmYV9saXN0KSA9PSBOVUxMKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJEZXZpY2Ugbm90IGFzc2lnbmVkIGFuIElQIGFkZHJlc3MhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWFkZHIgPSBpbi0+aWZhX2FkZHJlc3M7CisJc3ByaW50ZihidWYsICIlZC4lZC4lZC4lZCIsIGFkZHIgJiAweGZmLCAoYWRkciA+PiA4KSAmIDB4ZmYsCisJCShhZGRyID4+IDE2KSAmIDB4ZmYsIGFkZHIgPj4gMjQpOworCisJaWYgKGJpbl9idWYpIHsKKwkJYmluX2J1ZlswXSA9IGFkZHIgJiAweGZmOworCQliaW5fYnVmWzFdID0gKGFkZHIgPj4gOCkgJiAweGZmOworCQliaW5fYnVmWzJdID0gKGFkZHIgPj4gMTYpICYgMHhmZjsKKwkJYmluX2J1ZlszXSA9IGFkZHIgPj4gMjQ7CisJfQorfQorCisvKiBTZXQgRXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgc3BlY2lmaWVkIGRldmljZS4gKi8KKworc3RhdGljIHZvaWQgaW5saW5lIHNldF9ldGhlcl9tYWModm9pZCAqZCwgdW5zaWduZWQgY2hhciAqYWRkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZDsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pOworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09IFRVTlRBUCBUUkFOU1BPUlQgSU5URVJGQUNFID09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RhdGljIGludCB0dW50YXBfb3BlbihzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWNoYXIgKmRldl9uYW1lID0gbHAtPnRwLmluZm8udHVudGFwLmRldl9uYW1lOworCWludCBlcnIgPSAtRUlOVkFMOworCWludCBmZDsKKworCS8qIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgYSBmaXhlZCBjb25maWd1cmF0aW9uLiAqLworCisJaWYgKCFscC0+dHAuaW5mby50dW50YXAuZml4ZWRfY29uZmlnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoZmQgPSBzaW1jX29wZW4oIi9kZXYvbmV0L3R1biIsIDAyLCAwKSkgPCAwKSB7CS8qIE9fUkRXUiAqLworCQlwcmludGsoIkZhaWxlZCB0byBvcGVuIC9kZXYvbmV0L3R1biwgcmV0dXJuZWQgJWQgIgorCQkgICAgICAgIihlcnJubyA9ICVkKVxuIiwgZmQsIGVycm5vKTsKKwkJcmV0dXJuIGZkOworCX0KKworCW1lbXNldCgmaWZyLCAwLCBzaXplb2YgaWZyKTsKKwlpZnIuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSTsKKwlzdHJsY3B5KGlmci5pZnJfbmFtZSwgZGV2X25hbWUsIHNpemVvZiBpZnIuaWZyX25hbWUpOworCisJaWYgKChlcnIgPSBzaW1jX2lvY3RsKGZkLCBUVU5TRVRJRkYsICh2b2lkKikgJmlmcikpIDwgMCkgeworCQlwcmludGsoIkZhaWxlZCB0byBzZXQgaW50ZXJmYWNlLCByZXR1cm5lZCAlZCAiCisJCSAgICAgICAiKGVycm5vID0gJWQpXG4iLCBlcnIsIGVycm5vKTsKKwkJc2ltY19jbG9zZShmZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJbHAtPnRwLmluZm8udHVudGFwLmZkID0gZmQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdHVudGFwX2Nsb3NlKHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwKQoreworI2lmIDAKKwlpZiAobHAtPnRwLmluZm8udHVudGFwLmZpeGVkX2NvbmZpZykKKwkJaXRlcl9hZGRyZXNzZXMobHAtPnRwLmluZm8udHVudGFwLmRldiwgY2xvc2VfYWRkciwgbHAtPmhvc3QuZGV2X25hbWUpOworI2VuZGlmCisJc2ltY19jbG9zZShscC0+dHAuaW5mby50dW50YXAuZmQpOworCWxwLT50cC5pbmZvLnR1bnRhcC5mZCA9IC0xOworfQorCitzdGF0aWMgaW50IHR1bnRhcF9yZWFkIChzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCwgc3RydWN0IHNrX2J1ZmYgKipza2IpCit7CisjaWYgMAorCSpza2IgPSBldGhlcl9hZGp1c3Rfc2tiKCpza2IsIEVUSF9IRUFERVJfT1RIRVIpOworCWlmICgqc2tiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworI2VuZGlmCisKKwlyZXR1cm4gc2ltY19yZWFkKGxwLT50cC5pbmZvLnR1bnRhcC5mZCwKKwkJCSgqc2tiKS0+ZGF0YSwgKCpza2IpLT5kZXYtPm10dSArIEVUSF9IRUFERVJfT1RIRVIpOworfQorCitzdGF0aWMgaW50IHR1bnRhcF93cml0ZSAoc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHAsIHN0cnVjdCBza19idWZmICoqc2tiKQoreworCXJldHVybiBzaW1jX3dyaXRlKGxwLT50cC5pbmZvLnR1bnRhcC5mZCwgKCpza2IpLT5kYXRhLCAoKnNrYiktPmxlbik7Cit9CisKK3Vuc2lnbmVkIHNob3J0IHR1bnRhcF9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKK30KKworc3RhdGljIGludCB0dW50YXBfcG9sbChzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCkKK3sKKwlyZXR1cm4gc2ltY19wb2xsKGxwLT50cC5pbmZvLnR1bnRhcC5mZCk7Cit9CisKKy8qCisgKiBDdXJyZW50bHkgb25seSBhIGRldmljZSBuYW1lIGlzIHN1cHBvcnRlZC4KKyAqIGV0aFg9dHVudGFwWyxbbWFjIGFkZHJlc3NdWyxbZGV2aWNlIG5hbWVdXV0KKyAqLworCitzdGF0aWMgaW50IHR1bnRhcF9wcm9iZShzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCwgaW50IGluZGV4LCBjaGFyICppbml0KQoreworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4oVFJBTlNQT1JUX1RVTlRBUF9OQU1FKTsKKwljaGFyICpkZXZfbmFtZSA9IE5VTEwsICptYWNfc3RyID0gTlVMTCwgKnJlbSA9IE5VTEw7CisKKwkvKiBUcmFuc3BvcnQgc2hvdWxkIGJlICd0dW50YXAnOiBldGhYPXR1bnRhcCxtYWMsZGV2X25hbWUgKi8KKworCWlmIChzdHJuY21wKGluaXQsIFRSQU5TUE9SVF9UVU5UQVBfTkFNRSwgbGVuKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKihpbml0ICs9IHN0cmxlbihUUkFOU1BPUlRfVFVOVEFQX05BTUUpKSA9PSAnLCcpIHsKKwkJaWYgKChyZW09c3BsaXRfaWZfc3BlYyhpbml0KzEsICZtYWNfc3RyLCAmZGV2X25hbWUpKSAhPSBOVUxMKSB7CisJCQlwcmludGsoIkV4dHJhIGdhcmJhZ2Ugb24gc3BlY2lmaWNhdGlvbiA6ICclcydcbiIsIHJlbSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSBpZiAoKmluaXQgIT0gJ1wwJykgeworCQlwcmludGsoIkludmFsaWQgYXJndW1lbnQ6ICVzLiBTa2lwcGluZyBkZXZpY2UhXG4iLCBpbml0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRldl9uYW1lKSB7CisJCXN0cm5jcHkobHAtPnRwLmluZm8udHVudGFwLmRldl9uYW1lLCBkZXZfbmFtZSwKKwkJCSBzaXplb2YgbHAtPnRwLmluZm8udHVudGFwLmRldl9uYW1lKTsKKwkJbHAtPnRwLmluZm8udHVudGFwLmZpeGVkX2NvbmZpZyA9IDE7CisJfSBlbHNlCisJCXN0cmNweShscC0+dHAuaW5mby50dW50YXAuZGV2X25hbWUsIFRSQU5TUE9SVF9UVU5UQVBfTkFNRSk7CisKKworI2lmIDAKKwlpZiAoc2V0dXBfZXRoZXJhZGRyKG1hY19zdHIsIGxwLT5tYWMpKQorCQlscC0+aGF2ZV9tYWMgPSAxOworI2VuZGlmCisJbHAtPm10dSA9IFRSQU5TUE9SVF9UVU5UQVBfTVRVOworCisJLy9scC0+aW5mby50dW50YXAuZ2F0ZV9hZGRyID0gZ2F0ZV9hZGRyOworCisJbHAtPnRwLmluZm8udHVudGFwLmZkID0gLTE7CisKKwlscC0+dHAub3BlbiA9IHR1bnRhcF9vcGVuOworCWxwLT50cC5jbG9zZSA9IHR1bnRhcF9jbG9zZTsKKwlscC0+dHAucmVhZCA9IHR1bnRhcF9yZWFkOworCWxwLT50cC53cml0ZSA9IHR1bnRhcF93cml0ZTsKKwlscC0+dHAucHJvdG9jb2wgPSB0dW50YXBfcHJvdG9jb2w7CisJbHAtPnRwLnBvbGwgPSB0dW50YXBfcG9sbDsKKworCXByaW50aygiVFVOL1RBUCBiYWNrZW5kIC0gIik7CisjaWYgMAorCWlmIChscC0+aG9zdC5nYXRlX2FkZHIgIT0gTlVMTCkKKwkJcHJpbnRrKCJJUCA9ICVzIiwgbHAtPmhvc3QuZ2F0ZV9hZGRyKTsKKyNlbmRpZgorCXByaW50aygiXG4iKTsKKworCXJldHVybiAxOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJU1MgTkVUID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyBpbnQgaXNzX25ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCWludCBwa3RfbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgbmV3IGRhdGEuICovCisKKwlpZiAobHAtPnRwLnBvbGwobHApID09IDApCisJCXJldHVybiAwOworCisJLyogVHJ5IHRvIGFsbG9jYXRlIG1lbW9yeSwgaWYgaXQgZmFpbHMsIHRyeSBhZ2FpbiBuZXh0IHJvdW5kLiAqLworCisJaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKGRldi0+bXR1ICsgMiArIEVUSF9IRUFERVJfT1RIRVIpKSA9PSBOVUxMKSB7CisJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCXJldHVybiAwOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwkvKiBTZXR1cCBza2IgKi8KKworCXNrYi0+ZGV2ID0gZGV2OworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJcGt0X2xlbiA9IGxwLT50cC5yZWFkKGxwLCAmc2tiKTsKKwlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisKKwlpZiAocGt0X2xlbiA+IDApIHsKKwkJc2tiX3RyaW0oc2tiLCBwa3RfbGVuKTsKKwkJc2tiLT5wcm90b2NvbCA9IGxwLT50cC5wcm90b2NvbChza2IpOworCisJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkvLwluZXRpZl9yeChza2IpOworCQluZXRpZl9yeF9uaShza2IpOworCQlyZXR1cm4gcGt0X2xlbjsKKwl9CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIHBrdF9sZW47Cit9CisKK3N0YXRpYyBpbnQgaXNzX25ldF9wb2xsKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlOworCWludCBlcnIsIHJldCA9IDA7CisKKwlzcGluX2xvY2soJm9wZW5lZF9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2goZWxlLCAmb3BlbmVkKSB7CisJCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwOworCisJCWxwID0gbGlzdF9lbnRyeShlbGUsIHN0cnVjdCBpc3NfbmV0X3ByaXZhdGUsIG9wZW5lZF9saXN0KTsKKworCQlpZiAoIW5ldGlmX3J1bm5pbmcobHAtPmRldikpCisJCQlicmVhazsKKworCQlzcGluX2xvY2soJmxwLT5sb2NrKTsKKworCQl3aGlsZSAoKGVyciA9IGlzc19uZXRfcngobHAtPmRldikpID4gMCkKKwkJCXJldCsrOworCisJCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRGV2aWNlICclcycgcmVhZCByZXR1cm5lZCAlZCwgIgorCQkJICAgICAgICJzaHV0dGluZyBpdCBkb3duXG4iLCBscC0+ZGV2LT5uYW1lLCBlcnIpOworCQkJZGV2X2Nsb3NlKGxwLT5kZXYpOworCQl9IGVsc2UgeworCQkJLy8gRklYTUUgcmVhY3RpdmF0ZV9mZChscC0+ZmQsIElTU19FVEhfSVJRKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZvcGVuZWRfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgdm9pZCBpc3NfbmV0X3RpbWVyKHVuc2lnbmVkIGxvbmcgcHJpdikKK3sKKwlzdHJ1Y3QgaXNzX25ldF9wcml2YXRlKiBscCA9IChzdHJ1Y3QgaXNzX25ldF9wcml2YXRlKikgcHJpdjsKKworCXNwaW5fbG9jaygmbHAtPmxvY2spOworCisJaXNzX25ldF9wb2xsKCk7CisKKwltb2RfdGltZXIoJmxwLT50aW1lciwgamlmZmllcyArIGxwLT50aW1lcl92YWwpOworCisJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKK30KKworCitzdGF0aWMgaW50IGlzc19uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCWNoYXIgYWRkcltzaXplb2YgIjI1NS4yNTUuMjU1LjI1NVwwIl07CisJaW50IGVycjsKKworCXNwaW5fbG9jaygmbHAtPmxvY2spOworCisJaWYgKChlcnIgPSBscC0+dHAub3BlbihscCkpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIWxwLT5oYXZlX21hYykgeworCQlkZXZfaXBfYWRkcihkZXYsIGFkZHIsICZscC0+bWFjWzJdKTsKKwkJc2V0X2V0aGVyX21hYyhkZXYsIGxwLT5tYWMpOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwkvKiBjbGVhciBidWZmZXIgLSBpdCBjYW4gaGFwcGVuIHRoYXQgdGhlIGhvc3Qgc2lkZSBvZiB0aGUgaW50ZXJmYWNlCisJICogaXMgZnVsbCB3aGVuIHdlIGdldCBoZXJlLiBJbiB0aGlzIGNhc2UsIG5ldyBkYXRhIGlzIG5ldmVyIHF1ZXVlZCwKKwkgKiBTSUdJT3MgbmV2ZXIgYXJyaXZlLCBhbmQgdGhlIG5ldCBuZXZlciB3b3Jrcy4KKwkgKi8KKwl3aGlsZSAoKGVyciA9IGlzc19uZXRfcngoZGV2KSkgPiAwKQorCQk7CisKKwlzcGluX2xvY2soJm9wZW5lZF9sb2NrKTsKKwlsaXN0X2FkZCgmbHAtPm9wZW5lZF9saXN0LCAmb3BlbmVkKTsKKwlzcGluX3VubG9jaygmb3BlbmVkX2xvY2spOworCisJaW5pdF90aW1lcigmbHAtPnRpbWVyKTsKKwlscC0+dGltZXJfdmFsID0gSVNTX05FVF9USU1FUl9WQUxVRTsKKwlscC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBscDsKKwlscC0+dGltZXIuZnVuY3Rpb24gPSBpc3NfbmV0X3RpbWVyOworCW1vZF90aW1lcigmbHAtPnRpbWVyLCBqaWZmaWVzICsgbHAtPnRpbWVyX3ZhbCk7CisKK291dDoKKwlzcGluX3VubG9jaygmbHAtPmxvY2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXNzX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworcHJpbnRrKCJpc3NfbmV0X2Nsb3NlIVxuIik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXNwaW5fbG9jaygmbHAtPmxvY2spOworCisJc3Bpbl9sb2NrKCZvcGVuZWRfbG9jayk7CisJbGlzdF9kZWwoJm9wZW5lZCk7CisJc3Bpbl91bmxvY2soJm9wZW5lZF9sb2NrKTsKKworCWRlbF90aW1lcl9zeW5jKCZscC0+dGltZXIpOworCisJbHAtPnRwLmNsb3NlKGxwKTsKKworCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNzX25ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlzc19uZXRfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbGVuOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCisJbGVuID0gbHAtPnRwLndyaXRlKGxwLCAmc2tiKTsKKworCWlmIChsZW4gPT0gc2tiLT5sZW4pIHsKKwkJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCQkvKiB0aGlzIGlzIG5vcm1hbGx5IGRvbmUgaW4gdGhlIGludGVycnVwdCB3aGVuIHR4IGZpbmlzaGVzICovCisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKworCX0gZWxzZSBpZiAobGVuID09IDApIHsKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJbHAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKworCX0gZWxzZSB7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCXByaW50ayhLRVJOX0VSUiAiaXNzX25ldF9zdGFydF94bWl0OiBmYWlsZWQoJWQpXG4iLCBsZW4pOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppc3NfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpc3NfbmV0X3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXJldHVybiAmbHAtPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBpc3NfbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworI2lmIDAKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQlyZXR1cm47CisJZWxzZSBpZiAoZGV2LT5tY19jb3VudCkKKwkJZGV2LT5mbGFncyB8PSBJRkZfQUxMTVVMVEk7CisJZWxzZQorCQlkZXYtPmZsYWdzICY9IH5JRkZfQUxMTVVMVEk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgaXNzX25ldF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisjaWYgMAorCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGlzc19uZXRfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQoreworI2lmIDAKKwlzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmh3YWRkciA9IGFkZHI7CisKKwlzcGluX2xvY2soJmxwLT5sb2NrKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgaHdhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNzX25ldF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworI2lmIDAKKwlzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCXNwaW5fbG9jaygmbHAtPmxvY2spOworCisJLy8gRklYTUUgbm90IG5lZWRlZCBuZXdfbXR1ID0gdHJhbnNwb3J0X3NldF9tdHUobmV3X210dSwgJmxwLT51c2VyKTsKKworCWlmIChuZXdfbXR1IDwgMCkKKwkJZXJyID0gbmV3X210dTsKKwllbHNlCisJCWRldi0+bXR1ID0gbmV3X210dTsKKworCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CisJcmV0dXJuIGVycjsKKyNlbmRpZgorCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIGlzc19uZXRfdXNlcl90aW1lcl9leHBpcmUodW5zaWduZWQgbG9uZyBfY29ubikKK3sKK30KKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpc3NfbmV0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgPSBEUklWRVJfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBkcml2ZXJfcmVnaXN0ZXJlZDsKKworc3RhdGljIGludCBpc3NfbmV0X2NvbmZpZ3VyZShpbnQgaW5kZXgsIGNoYXIgKmluaXQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpscDsKKwlpbnQgZXJyOworCisJaWYgKChkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YgKmxwKSkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImV0aF9jb25maWd1cmU6IGZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHByaXZhdGUgZWxlbWVudC4gKi8KKworCWxwID0gZGV2LT5wcml2OworCSpscCA9ICgoc3RydWN0IGlzc19uZXRfcHJpdmF0ZSkgeworCQkuZGV2aWNlX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQobHAtPmRldmljZV9saXN0KSwKKwkJLm9wZW5lZF9saXN0CQk9IExJU1RfSEVBRF9JTklUKGxwLT5vcGVuZWRfbGlzdCksCisJCS5sb2NrCQkJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJCS5kZXYJCQk9IGRldiwKKwkJLmluZGV4CQkJPSBpbmRleCwKKwkJLy8uZmQgICAgICAgICAgICAgICAgICAgPSAtMSwKKwkJLm1hYwkJCT0geyAweGZlLCAweGZkLCAweDAsIDB4MCwgMHgwLCAweDAgfSwKKwkJLmhhdmVfbWFjCQk9IDAsCisJCX0pOworCisJLyoKKwkgKiBUcnkgYWxsIHRyYW5zcG9ydCBwcm90b2NvbHMuCisJICogTm90ZTogbW9yZSBwcm90b2NvbHMgY2FuIGJlIGFkZGVkIGJ5IGFkZGluZyAnJiYgIVhfaW5pdChscCwgZXRoKScuCisJICovCisKKwlpZiAoIXR1bnRhcF9wcm9iZShscCwgaW5kZXgsIGluaXQpKSB7CisJCXByaW50aygiSW52YWxpZCBhcmd1bWVudHMuIFNraXBwaW5nIGRldmljZSFcbiIpOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJOZXRkZXZpY2UgJWQgIiwgaW5kZXgpOworCWlmIChscC0+aGF2ZV9tYWMpCisJCXByaW50aygiKCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4KSAiLAorCQkJCWxwLT5tYWNbMF0sIGxwLT5tYWNbMV0sCisJCQkJbHAtPm1hY1syXSwgbHAtPm1hY1szXSwKKwkJCQlscC0+bWFjWzRdLCBscC0+bWFjWzVdKTsKKwlwcmludGsoIjogIik7CisKKwkvKiBzeXNmcyByZWdpc3RlciAqLworCisJaWYgKCFkcml2ZXJfcmVnaXN0ZXJlZCkgeworCQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlzc19uZXRfZHJpdmVyKTsKKwkJZHJpdmVyX3JlZ2lzdGVyZWQgPSAxOworCX0KKworCXNwaW5fbG9jaygmZGV2aWNlc19sb2NrKTsKKwlsaXN0X2FkZCgmbHAtPmRldmljZV9saXN0LCAmZGV2aWNlcyk7CisJc3Bpbl91bmxvY2soJmRldmljZXNfbG9jayk7CisKKwlscC0+cGRldi5pZCA9IGluZGV4OworCWxwLT5wZGV2Lm5hbWUgPSBEUklWRVJfTkFNRTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmxwLT5wZGV2KTsKKwlTRVRfTkVUREVWX0RFVihkZXYsJmxwLT5wZGV2LmRldik7CisKKwkvKgorCSAqIElmIHRoaXMgbmFtZSBlbmRzIHVwIGNvbmZsaWN0aW5nIHdpdGggYW4gZXhpc3RpbmcgcmVnaXN0ZXJlZAorCSAqIG5ldGRldmljZSwgdGhhdCBpcyBPSywgcmVnaXN0ZXJfbmV0ZGV2eyxpY2V9KCkgd2lsbCBub3RpY2UgdGhpcworCSAqIGFuZCBmYWlsLgorCSAqLworCXNucHJpbnRmKGRldi0+bmFtZSwgc2l6ZW9mIGRldi0+bmFtZSwgImV0aCVkIiwgaW5kZXgpOworCisJZGV2LT5tdHUgPSBscC0+bXR1OworCWRldi0+b3BlbiA9IGlzc19uZXRfb3BlbjsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlzc19uZXRfc3RhcnRfeG1pdDsKKwlkZXYtPnN0b3AgPSBpc3NfbmV0X2Nsb3NlOworCWRldi0+Z2V0X3N0YXRzID0gaXNzX25ldF9nZXRfc3RhdHM7CisJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpc3NfbmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPnR4X3RpbWVvdXQgPSBpc3NfbmV0X3R4X3RpbWVvdXQ7CisJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpc3NfbmV0X3NldF9tYWM7CisJZGV2LT5jaGFuZ2VfbXR1ID0gaXNzX25ldF9jaGFuZ2VfbXR1OworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoSFogPj4gMSk7CisJZGV2LT5pcnEgPSAtMTsKKworCXJ0bmxfbG9jaygpOworCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisKKwlpZiAoZXJyKSB7CisJCXByaW50aygiRXJyb3IgcmVnaXN0ZXJpbmcgbmV0IGRldmljZSFcbiIpOworCQkvKiBYWFg6IHNob3VsZCB3ZSBjYWxsIC0+cmVtb3ZlKCkgaGVyZT8gKi8KKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcmV0dXJuIDE7CisJfQorCisJaW5pdF90aW1lcigmbHAtPnRsKTsKKwlscC0+dGwuZnVuY3Rpb24gPSBpc3NfbmV0X3VzZXJfdGltZXJfZXhwaXJlOworCisjaWYgMAorCWlmIChscC0+aGF2ZV9tYWMpCisJCXNldF9ldGhlcl9tYWMoZGV2LCBscC0+bWFjKTsKKyNlbmRpZgorCXJldHVybiAwOworCitlcnJvdXQ6CisJLy8gRklYTUU6IHVucmVnaXN0ZXI7IGZyZWUsIGV0Yy4uCisJcmV0dXJuIC1FSU87CisKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBGaWxsZWQgaW4gZHVyaW5nIGVhcmx5IGJvb3QgKi8KKworc3RydWN0IGxpc3RfaGVhZCBldGhfY21kX2xpbmUgPSBMSVNUX0hFQURfSU5JVChldGhfY21kX2xpbmUpOworCitzdHJ1Y3QgaXNzX25ldF9pbml0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqaW5pdDsJCS8qIGluaXQgc3RyaW5nICovCisJaW50IGluZGV4OworfTsKKworLyoKKyAqIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYW5kIGxvb2sgZm9yICdldGhYPS4uLicgZmllbGRzLCBhbmQgcmVnaXN0ZXIgYWxsCisgKiB0aG9zZSBmaWVsZHMuIFRoZXkgd2lsbCBiZSBsYXRlciBpbml0aWFsaXplZCBpbiBpc3NfbmV0X2luaXQuCisgKi8KKworI2RlZmluZSBFUlIgS0VSTl9FUlIgImlzc19uZXRfc2V0dXA6ICIKKworc3RhdGljIGludCBpc3NfbmV0X3NldHVwKGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QgaXNzX25ldF9wcml2YXRlICpkZXZpY2UgPSBOVUxMOworCXN0cnVjdCBpc3NfbmV0X2luaXQgKm5ldzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGU7CisJY2hhciAqZW5kOworCWludCBuOworCisJbiA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZCwgMCk7CisJaWYgKGVuZCA9PSBzdHIpIHsKKwkJcHJpbnRrKEVSUiAiRmFpbGVkIHRvIHBhcnNlICclcydcbiIsIHN0cik7CisJCXJldHVybiAxOworCX0KKwlpZiAobiA8IDApIHsKKwkJcHJpbnRrKEVSUiAiRGV2aWNlICVkIGlzIG5lZ2F0aXZlXG4iLCBuKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICgqKHN0ciA9IGVuZCkgIT0gJz0nKSB7CisJCXByaW50ayhFUlIgIkV4cGVjdGVkICc9JyBhZnRlciBkZXZpY2UgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3Bpbl9sb2NrKCZkZXZpY2VzX2xvY2spOworCisJbGlzdF9mb3JfZWFjaChlbGUsICZkZXZpY2VzKSB7CisJCWRldmljZSA9IGxpc3RfZW50cnkoZWxlLCBzdHJ1Y3QgaXNzX25ldF9wcml2YXRlLCBkZXZpY2VfbGlzdCk7CisJCWlmIChkZXZpY2UtPmluZGV4ID09IG4pCisJCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9jaygmZGV2aWNlc19sb2NrKTsKKworCWlmIChkZXZpY2UgJiYgZGV2aWNlLT5pbmRleCA9PSBuKSB7CisJCXByaW50ayhFUlIgIkRldmljZSAlZCBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIsIG4pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKG5ldyA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mIG5ldykpID09IE5VTEwpIHsKKwkJcHJpbnRrKCJBbGxvY19ib290bWVtIGZhaWxlZFxuIik7CisJCXJldHVybiAxOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZuZXctPmxpc3QpOworCW5ldy0+aW5kZXggPSBuOworCW5ldy0+aW5pdCA9IHN0ciArIDE7CisKKwlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsICZldGhfY21kX2xpbmUpOworCXJldHVybiAxOworfQorCisjdW5kZWYgRVJSCisKK19fc2V0dXAoImV0aD0iLCBpc3NfbmV0X3NldHVwKTsKKworLyoKKyAqIEluaXRpYWxpemUgYWxsIElTUyBFdGhlcm5ldCBkZXZpY2VzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBpbiBpc3NfbmV0X3NldHVwLgorICovCisKK3N0YXRpYyBpbnQgaXNzX25ldF9pbml0KHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlLCAqbmV4dDsKKworCS8qIFdhbGsgdGhyb3VnaCBhbGwgRXRoZXJuZXQgZGV2aWNlcyBzcGVjaWZpZWQgaW4gdGhlIGNvbW1hbmQgbGluZS4gKi8KKworCWxpc3RfZm9yX2VhY2hfc2FmZShlbGUsIG5leHQsICZldGhfY21kX2xpbmUpIHsKKwkJc3RydWN0IGlzc19uZXRfaW5pdCAqZXRoOworCQlldGggPSBsaXN0X2VudHJ5KGVsZSwgc3RydWN0IGlzc19uZXRfaW5pdCwgbGlzdCk7CisJCWlzc19uZXRfY29uZmlndXJlKGV0aC0+aW5kZXgsIGV0aC0+aW5pdCk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK21vZHVsZV9pbml0KGlzc19uZXRfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9zZXR1cC5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zZXR1cC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3Mvc2V0dXAuYwpyZW5hbWUgdG8gYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zZXR1cC5jCmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZwppbmRleCA5YmRhN2JjLi4zZTk3ZjJiIDEwMDY0NAotLS0gYS9ibG9jay9LY29uZmlnCisrKyBiL2Jsb2NrL0tjb25maWcKQEAgLTUsMTQgKzUsMTggQEAKICAgICAgICBib29sICJFbmFibGUgdGhlIGJsb2NrIGxheWVyIiBpZiBFTUJFRERFRAogICAgICAgIGRlZmF1bHQgeQogICAgICAgIGhlbHAKLQkgVGhpcyBwZXJtaXRzIHRoZSBibG9jayBsYXllciB0byBiZSByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCBpZiBpdCdzIG5vdAotCSBuZWVkZWQgKG9uIHNvbWUgZW1iZWRkZWQgZGV2aWNlcyBmb3IgZXhhbXBsZSkuICBJZiB0aGlzIG9wdGlvbiBpcwotCSBkaXNhYmxlZCwgdGhlbiBibG9ja2RldiBmaWxlcyB3aWxsIGJlY29tZSB1bnVzYWJsZSBhbmQgc29tZQotCSBmaWxlc3lzdGVtcyAoc3VjaCBhcyBleHQzKSB3aWxsIGJlY29tZSB1bmF2YWlsYWJsZS4KKwkgUHJvdmlkZSBibG9jayBsYXllciBzdXBwb3J0IGZvciB0aGUga2VybmVsLgogCi0JIFRoaXMgb3B0aW9uIHdpbGwgYWxzbyBkaXNhYmxlIFNDU0kgY2hhcmFjdGVyIGRldmljZXMgYW5kIFVTQiBzdG9yYWdlCi0JIHNpbmNlIHRoZXkgbWFrZSB1c2Ugb2YgdmFyaW91cyBibG9jayBsYXllciBkZWZpbml0aW9ucyBhbmQKLQkgZmFjaWxpdGllcy4KKwkgRGlzYWJsZSB0aGlzIG9wdGlvbiB0byByZW1vdmUgdGhlIGJsb2NrIGxheWVyIHN1cHBvcnQgZnJvbSB0aGUKKwkga2VybmVsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZXMuCisKKwkgSWYgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQ6CisKKwkgICAtIGJsb2NrIGRldmljZSBmaWxlcyB3aWxsIGJlY29tZSB1bnVzYWJsZQorCSAgIC0gc29tZSBmaWxlc3lzdGVtcyAoc3VjaCBhcyBleHQzKSB3aWxsIGJlY29tZSB1bmF2YWlsYWJsZS4KKworCSBBbHNvLCBTQ1NJIGNoYXJhY3RlciBkZXZpY2VzIGFuZCBVU0Igc3RvcmFnZSB3aWxsIGJlIGRpc2FibGVkIHNpbmNlCisJIHRoZXkgbWFrZSB1c2Ugb2YgdmFyaW91cyBibG9jayBsYXllciBkZWZpbml0aW9ucyBhbmQgZmFjaWxpdGllcy4KIAogCSBTYXkgWSBoZXJlIHVubGVzcyB5b3Uga25vdyB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gbW91bnQgZGlza3MgYW5kCiAJIHN1Y2hsaWtlLgpAQCAtMjMsOSArMjcsMjAgQEAKIAlib29sICJTdXBwb3J0IGZvciBMYXJnZSBCbG9jayBEZXZpY2VzIgogCWRlcGVuZHMgb24gITY0QklUCiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBhdHRhY2ggbGFyZ2UgKGJpZ2dlciB0aGFuIDJUQikgZGlzY3MgdG8KLQkgIHlvdXIgbWFjaGluZSwgb3IgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHJhaWQgb3IgbG9vcGJhY2sgZGV2aWNlCi0JICBiaWdnZXIgdGhhbiAyVEIuICBPdGhlcndpc2Ugc2F5IE4uCisJICBFbmFibGUgYmxvY2sgZGV2aWNlcyBvZiBzaXplIDJUQiBhbmQgbGFyZ2VyLgorCisJICBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBmdWxsIGNhcGFjaXR5IG9mIGxhcmdlCisJICAoMlRCKykgYmxvY2sgZGV2aWNlcywgaW5jbHVkaW5nIFJBSUQsIGRpc2ssIE5ldHdvcmsgQmxvY2sgRGV2aWNlLAorCSAgTG9naWNhbCBWb2x1bWUgTWFuYWdlciAoTFZNKSBhbmQgbG9vcGJhY2suCisKKwkgIEZvciBleGFtcGxlLCBSQUlEIGRldmljZXMgYXJlIGZyZXF1ZW50bHkgYmlnZ2VyIHRoYW4gdGhlIGNhcGFjaXR5CisJICBvZiB0aGUgbGFyZ2VzdCBpbmRpdmlkdWFsIGhhcmQgZHJpdmUuCisKKwkgIFRoaXMgb3B0aW9uIGlzIG5vdCByZXF1aXJlZCBpZiB5b3UgaGF2ZSBpbmRpdmlkdWFsIGRpc2sgZHJpdmVzCisJICB3aGljaCB0b3RhbCAyVEIrIGFuZCB5b3UgYXJlIG5vdCBhZ2dyZWdhdGluZyB0aGUgY2FwYWNpdHkgaW50bworCSAgYSBsYXJnZSBibG9jayBkZXZpY2UgKGUuZy4gdXNpbmcgUkFJRCBvciBMVk0pLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQkxLX0RFVl9JT19UUkFDRQogCWJvb2wgIlN1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgaW8gYWN0aW9ucyIKQEAgLTMzLDE5ICs0OCwyMSBAQAogCXNlbGVjdCBSRUxBWQogCXNlbGVjdCBERUJVR19GUwogCWhlbHAKLQkgIFNheSBZIGhlcmUsIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnMKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0cmFjZSB0aGUgYmxvY2sgbGF5ZXIgYWN0aW9ucwogCSAgb24gYSBnaXZlbiBxdWV1ZS4gVHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSBhbnkgdHJhZmZpYyBoYXBwZW5pbmcKLQkgIG9uIGEgYmxvY2sgZGV2aWNlIHF1ZXVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiAoYW5kIHRoZSB1c2VyIHNwYWNlCi0JICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSBhcHAgZnJvbToKKwkgIG9uIGEgYmxvY2sgZGV2aWNlIHF1ZXVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiAoYW5kIHRoZSB1c2Vyc3BhY2UKKwkgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIHRvb2xzIGZyb206CiAKLQkgIGdpdDovL2JyaWNrLmtlcm5lbC5kay9kYXRhL2dpdC9ibGt0cmFjZS5naXQKKwkgIGdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0CisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBMU0YKIAlib29sICJTdXBwb3J0IGZvciBMYXJnZSBTaW5nbGUgRmlsZXMiCiAJZGVwZW5kcyBvbiAhNjRCSVQKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gaGFuZGxlIHZlcnkgbGFyZ2UgZmlsZXMgKGJpZ2dlcgotCSAgdGhhbiAyVEIpLCBvdGhlcndpc2Ugc2F5IE4uCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gaGFuZGxlIHZlcnkgbGFyZ2UgZmlsZXMgKDJUQgorCSAgYW5kIGxhcmdlciksIG90aGVyd2lzZSBzYXkgTi4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIApAQCAtNTMsMTQgKzcwLDE2IEBACiAJYm9vbCAiQmxvY2sgbGF5ZXIgU0cgc3VwcG9ydCB2NCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KLQlTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIGdlbmVyaWMgU0cgKFNDU0kgZ2VuZXJpYykgdjQgc3VwcG9ydAotCWZvciBhbnkgYmxvY2sgZGV2aWNlLgorCSAgU2F5aW5nIFkgaGVyZSB3aWxsIGVuYWJsZSBnZW5lcmljIFNHIChTQ1NJIGdlbmVyaWMpIHY0IHN1cHBvcnQKKwkgIGZvciBhbnkgYmxvY2sgZGV2aWNlLgogCi0JVW5saWtlIFNHIHYzIChha2EgYmxvY2svc2NzaV9pb2N0bC5jIGRyaXZlcnMvc2NzaS9zZy5jKSwgU0cgdjQKLQljYW4gaGFuZGxlIGNvbXBsaWNhdGVkIFNDU0kgY29tbWFuZHM6IHRhZ2dlZCB2YXJpYWJsZSBsZW5ndGggY2RicwotCXdpdGggYmlkaXJlY3Rpb25hbCBkYXRhIHRyYW5zZmVycyBhbmQgZ2VuZXJpYyByZXF1ZXN0L3Jlc3BvbnNlCi0JcHJvdG9jb2xzIChlLmcuIFRhc2sgTWFuYWdlbWVudCBGdW5jdGlvbnMgYW5kIFNNUCBpbiBTZXJpYWwKLQlBdHRhY2hlZCBTQ1NJKS4KKwkgIFVubGlrZSBTRyB2MyAoYWthIGJsb2NrL3Njc2lfaW9jdGwuYyBkcml2ZXJzL3Njc2kvc2cuYyksIFNHIHY0CisJICBjYW4gaGFuZGxlIGNvbXBsaWNhdGVkIFNDU0kgY29tbWFuZHM6IHRhZ2dlZCB2YXJpYWJsZSBsZW5ndGggY2RicworCSAgd2l0aCBiaWRpcmVjdGlvbmFsIGRhdGEgdHJhbnNmZXJzIGFuZCBnZW5lcmljIHJlcXVlc3QvcmVzcG9uc2UKKwkgIHByb3RvY29scyAoZS5nLiBUYXNrIE1hbmFnZW1lbnQgRnVuY3Rpb25zIGFuZCBTTVAgaW4gU2VyaWFsCisJICBBdHRhY2hlZCBTQ1NJKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogZW5kaWYgIyBCTE9DSwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstYmFycmllci5jIGIvYmxvY2svYmxrLWJhcnJpZXIuYwppbmRleCA2OTAxZWVkLi41NWM1ZjFmIDEwMDY0NAotLS0gYS9ibG9jay9ibGstYmFycmllci5jCisrKyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKQEAgLTI1OSw4ICsyNTksMTEgQEAKIAogc3RhdGljIHZvaWQgYmlvX2VuZF9lbXB0eV9iYXJyaWVyKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKIHsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkKKwkJCXNldF9iaXQoQklPX0VPUE5PVFNVUFAsICZiaW8tPmJpX2ZsYWdzKTsKIAkJY2xlYXJfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOworCX0KIAogCWNvbXBsZXRlKGJpby0+YmlfcHJpdmF0ZSk7CiB9CkBAIC0zMDksNyArMzEyLDkgQEAKIAkJKmVycm9yX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwogCiAJcmV0ID0gMDsKLQlpZiAoIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSkKKwlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fRU9QTk9UU1VQUCkpCisJCXJldCA9IC1FT1BOT1RTVVBQOworCWVsc2UgaWYgKCFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSkpCiAJCXJldCA9IC1FSU87CiAKIAliaW9fcHV0KGJpbyk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCBlOTc1NGRjLi4yYTQzOGE5IDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTM4LDcgKzM4LDcgQEAKIC8qCiAgKiBGb3IgdGhlIGFsbG9jYXRlZCByZXF1ZXN0IHRhYmxlcwogICovCi1zdHJ1Y3Qga21lbV9jYWNoZSAqcmVxdWVzdF9jYWNoZXA7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJlcXVlc3RfY2FjaGVwOwogCiAvKgogICogRm9yIHF1ZXVlIGFsbG9jYXRpb24KQEAgLTEzNCw2ICsxMzQsNyBAQAogCXJxLT5jbWRfbGVuID0gMDsKIAltZW1zZXQocnEtPmNtZCwgMCwgc2l6ZW9mKHJxLT5jbWQpKTsKIAlycS0+ZGF0YV9sZW4gPSAwOworCXJxLT5leHRyYV9sZW4gPSAwOwogCXJxLT5zZW5zZV9sZW4gPSAwOwogCXJxLT5kYXRhID0gTlVMTDsKIAlycS0+c2Vuc2UgPSBOVUxMOwpAQCAtNDIzLDcgKzQyNCw2IEBACiB7CiAJa29iamVjdF9wdXQoJnEtPmtvYmopOwogfQotRVhQT1JUX1NZTUJPTChibGtfcHV0X3F1ZXVlKTsKIAogdm9pZCBibGtfY2xlYW51cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKQEAgLTU5MSw3ICs1OTEsNiBAQAogCiAJcmV0dXJuIDE7CiB9Ci1FWFBPUlRfU1lNQk9MKGJsa19nZXRfcXVldWUpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewpAQCAtMTc2Nyw2ICsxNzY2LDcgQEAKIAogLyoqCiAgKiBibGtfcnFfYnl0ZXMgLSBSZXR1cm5zIGJ5dGVzIGxlZnQgdG8gY29tcGxldGUgaW4gdGhlIGVudGlyZSByZXF1ZXN0CisgKiBAcnE6IHRoZSByZXF1ZXN0IGJlaW5nIHByb2Nlc3NlZAogICoqLwogdW5zaWduZWQgaW50IGJsa19ycV9ieXRlcyhzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CkBAIC0xNzc5LDYgKzE3NzksNyBAQAogCiAvKioKICAqIGJsa19ycV9jdXJfYnl0ZXMgLSBSZXR1cm5zIGJ5dGVzIGxlZnQgdG8gY29tcGxldGUgaW4gdGhlIGN1cnJlbnQgc2VnbWVudAorICogQHJxOiB0aGUgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQKICAqKi8KIHVuc2lnbmVkIGludCBibGtfcnFfY3VyX2J5dGVzKHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1pb2MuYyBiL2Jsb2NrL2Jsay1pb2MuYwppbmRleCA4MDI0NWRjLi5lMzRkZjdjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstaW9jLmMKKysrIGIvYmxvY2svYmxrLWlvYy5jCkBAIC0xNywxNyArMTcsMTMgQEAKIAogc3RhdGljIHZvaWQgY2ZxX2R0b3Ioc3RydWN0IGlvX2NvbnRleHQgKmlvYykKIHsKLQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpY1sxXTsKLQlpbnQgcjsKKwlpZiAoIWhsaXN0X2VtcHR5KCZpb2MtPmNpY19saXN0KSkgeworCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAotCS8qCi0JICogV2UgZG9uJ3QgaGF2ZSBhIHNwZWNpZmljIGtleSB0byBsb29rdXAgd2l0aCwgc28gdXNlIHRoZSBnYW5nCi0JICogbG9va3VwIHRvIGp1c3QgcmV0cmlldmUgdGhlIGZpcnN0IGl0ZW0gc3RvcmVkLiBUaGUgY2ZxIGV4aXQKLQkgKiBmdW5jdGlvbiB3aWxsIGl0ZXJhdGUgdGhlIGZ1bGwgdHJlZSwgc28gYW55IG1lbWJlciB3aWxsIGRvLgotCSAqLwotCXIgPSByYWRpeF90cmVlX2dhbmdfbG9va3VwKCZpb2MtPnJhZGl4X3Jvb3QsICh2b2lkICoqKSBjaWMsIDAsIDEpOwotCWlmIChyID4gMCkKLQkJY2ljWzBdLT5kdG9yKGlvYyk7CisJCWNpYyA9IGxpc3RfZW50cnkoaW9jLT5jaWNfbGlzdC5maXJzdCwgc3RydWN0IGNmcV9pb19jb250ZXh0LAorCQkJCQkJCQljaWNfbGlzdCk7CisJCWNpYy0+ZHRvcihpb2MpOworCX0KIH0KIAogLyoKQEAgLTU3LDE4ICs1MywxNiBAQAogCiBzdGF0aWMgdm9pZCBjZnFfZXhpdChzdHJ1Y3QgaW9fY29udGV4dCAqaW9jKQogewotCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljWzFdOwotCWludCByOwotCiAJcmN1X3JlYWRfbG9jaygpOwotCS8qCi0JICogU2VlIGNvbW1lbnQgZm9yIGNmcV9kdG9yKCkKLQkgKi8KLQlyID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cCgmaW9jLT5yYWRpeF9yb290LCAodm9pZCAqKikgY2ljLCAwLCAxKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKIAotCWlmIChyID4gMCkKLQkJY2ljWzBdLT5leGl0KGlvYyk7CisJaWYgKCFobGlzdF9lbXB0eSgmaW9jLT5jaWNfbGlzdCkpIHsKKwkJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CisKKwkJY2ljID0gbGlzdF9lbnRyeShpb2MtPmNpY19saXN0LmZpcnN0LCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsCisJCQkJCQkJCWNpY19saXN0KTsKKwkJY2ljLT5leGl0KGlvYyk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBDYWxsZWQgYnkgdGhlIGV4aXR0aW5nIHRhc2sgKi8KQEAgLTEwNSw2ICs5OSw3IEBACiAJCXJldC0+bnJfYmF0Y2hfcmVxdWVzdHMgPSAwOyAvKiBiZWNhdXNlIHRoaXMgaXMgMCAqLwogCQlyZXQtPmFpYyA9IE5VTEw7CiAJCUlOSVRfUkFESVhfVFJFRSgmcmV0LT5yYWRpeF9yb290LCBHRlBfQVRPTUlDIHwgX19HRlBfSElHSCk7CisJCUlOSVRfSExJU1RfSEVBRCgmcmV0LT5jaWNfbGlzdCk7CiAJCXJldC0+aW9jX2RhdGEgPSBOVUxMOwogCX0KIApAQCAtMTc2LDcgKzE3MSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNvcHlfaW9fY29udGV4dCk7CiAKLWludCBfX2luaXQgYmxrX2lvY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBibGtfaW9jX2luaXQodm9pZCkKIHsKIAlpb2NvbnRleHRfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImJsa2Rldl9pb2MiLAogCQkJc2l6ZW9mKHN0cnVjdCBpb19jb250ZXh0KSwgMCwgU0xBQl9QQU5JQywgTlVMTCk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWFwLmMgYi9ibG9jay9ibGstbWFwLmMKaW5kZXggOTU1ZDc1Yy4uM2M5NDJiZCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1hcC5jCisrKyBiL2Jsb2NrL2Jsay1tYXAuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxzY3NpL3NnLmg+CQkvKiBmb3Igc3RydWN0IHNnX2lvdmVjICovCiAKICNpbmNsdWRlICJibGsuaCIKIApAQCAtNDMsNiArNDQsNyBAQAogCQkJICAgICB2b2lkIF9fdXNlciAqdWJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIHVhZGRyOworCXVuc2lnbmVkIGludCBhbGlnbm1lbnQ7CiAJc3RydWN0IGJpbyAqYmlvLCAqb3JpZ19iaW87CiAJaW50IHJlYWRpbmcsIHJldDsKIApAQCAtNTMsOCArNTUsOCBAQAogCSAqIGRpcmVjdCBkbWEuIGVsc2UsIHNldCB1cCBrZXJuZWwgYm91bmNlIGJ1ZmZlcnMKIAkgKi8KIAl1YWRkciA9ICh1bnNpZ25lZCBsb25nKSB1YnVmOwotCWlmICghKHVhZGRyICYgcXVldWVfZG1hX2FsaWdubWVudChxKSkgJiYKLQkgICAgIShsZW4gJiBxdWV1ZV9kbWFfYWxpZ25tZW50KHEpKSkKKwlhbGlnbm1lbnQgPSBxdWV1ZV9kbWFfYWxpZ25tZW50KHEpIHwgcS0+ZG1hX3BhZF9tYXNrOworCWlmICghKHVhZGRyICYgYWxpZ25tZW50KSAmJiAhKGxlbiAmIGFsaWdubWVudCkpCiAJCWJpbyA9IGJpb19tYXBfdXNlcihxLCBOVUxMLCB1YWRkciwgbGVuLCByZWFkaW5nKTsKIAllbHNlCiAJCWJpbyA9IGJpb19jb3B5X3VzZXIocSwgdWFkZHIsIGxlbiwgcmVhZGluZyk7CkBAIC0xMzksMTAgKzE0MSwxNCBAQAogCQl1YnVmICs9IHJldDsKIAl9CiAKKwlpZiAoIWJpb19mbGFnZ2VkKGJpbywgQklPX1VTRVJfTUFQUEVEKSkKKwkJcnEtPmNtZF9mbGFncyB8PSBSRVFfQ09QWV9VU0VSOworCiAJcnEtPmJ1ZmZlciA9IHJxLT5kYXRhID0gTlVMTDsKIAlyZXR1cm4gMDsKIHVubWFwX3JxOgogCWJsa19ycV91bm1hcF91c2VyKGJpbyk7CisJcnEtPmJpbyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3JxX21hcF91c2VyKTsKQEAgLTE3MiwxNSArMTc4LDI2IEBACiAJCQlzdHJ1Y3Qgc2dfaW92ZWMgKmlvdiwgaW50IGlvdl9jb3VudCwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CisJaW50IGksIHJlYWQgPSBycV9kYXRhX2RpcihycSkgPT0gUkVBRDsKKwlpbnQgdW5hbGlnbmVkID0gMDsKIAogCWlmICghaW92IHx8IGlvdl9jb3VudCA8PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIHdlIGRvbid0IGFsbG93IG1pc2FsaWduZWQgZGF0YSBsaWtlIGJpb19tYXBfdXNlcigpIGRvZXMuICBJZiB0aGUKLQkgKiB1c2VyIGlzIHVzaW5nIHNnLCB0aGV5J3JlIGV4cGVjdGVkIHRvIGtub3cgdGhlIGFsaWdubWVudCBjb25zdHJhaW50cwotCSAqIGFuZCByZXNwZWN0IHRoZW0gYWNjb3JkaW5nbHkgKi8KLQliaW8gPSBiaW9fbWFwX3VzZXJfaW92KHEsIE5VTEwsIGlvdiwgaW92X2NvdW50LAotCQkJCXJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW92X2NvdW50OyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKWlvdltpXS5pb3ZfYmFzZTsKKworCQlpZiAodWFkZHIgJiBxdWV1ZV9kbWFfYWxpZ25tZW50KHEpKSB7CisJCQl1bmFsaWduZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodW5hbGlnbmVkIHx8IChxLT5kbWFfcGFkX21hc2sgJiBsZW4pKQorCQliaW8gPSBiaW9fY29weV91c2VyX2lvdihxLCBpb3YsIGlvdl9jb3VudCwgcmVhZCk7CisJZWxzZQorCQliaW8gPSBiaW9fbWFwX3VzZXJfaW92KHEsIE5VTEwsIGlvdiwgaW92X2NvdW50LCByZWFkKTsKKwogCWlmIChJU19FUlIoYmlvKSkKIAkJcmV0dXJuIFBUUl9FUlIoYmlvKTsKIApAQCAtMTkwLDEyICsyMDcsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKCFiaW9fZmxhZ2dlZChiaW8sIEJJT19VU0VSX01BUFBFRCkpCisJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0NPUFlfVVNFUjsKKwogCWJpb19nZXQoYmlvKTsKIAlibGtfcnFfYmlvX3ByZXAocSwgcnEsIGJpbyk7CiAJcnEtPmJ1ZmZlciA9IHJxLT5kYXRhID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woYmxrX3JxX21hcF91c2VyX2lvdik7CiAKIC8qKgogICogYmxrX3JxX3VubWFwX3VzZXIgLSB1bm1hcCBhIHJlcXVlc3Qgd2l0aCB1c2VyIGRhdGEKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggZDNiODRiYi4uYjVjNWM0YSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTIyMCw3ICsyMjAsMTkgQEAKIAkJYnZwcnYgPSBidmVjOwogCX0gLyogc2VnbWVudHMgaW4gcnEgKi8KIAotCWlmIChxLT5kbWFfZHJhaW5fc2l6ZSkgeworCisJaWYgKHVubGlrZWx5KHJxLT5jbWRfZmxhZ3MgJiBSRVFfQ09QWV9VU0VSKSAmJgorCSAgICAocnEtPmRhdGFfbGVuICYgcS0+ZG1hX3BhZF9tYXNrKSkgeworCQl1bnNpZ25lZCBpbnQgcGFkX2xlbiA9IChxLT5kbWFfcGFkX21hc2sgJiB+cnEtPmRhdGFfbGVuKSArIDE7CisKKwkJc2ctPmxlbmd0aCArPSBwYWRfbGVuOworCQlycS0+ZXh0cmFfbGVuICs9IHBhZF9sZW47CisJfQorCisJaWYgKHEtPmRtYV9kcmFpbl9zaXplICYmIHEtPmRtYV9kcmFpbl9uZWVkZWQocnEpKSB7CisJCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1JXKQorCQkJbWVtc2V0KHEtPmRtYV9kcmFpbl9idWZmZXIsIDAsIHEtPmRtYV9kcmFpbl9zaXplKTsKKwogCQlzZy0+cGFnZV9saW5rICY9IH4weDAyOwogCQlzZyA9IHNnX25leHQoc2cpOwogCQlzZ19zZXRfcGFnZShzZywgdmlydF90b19wYWdlKHEtPmRtYV9kcmFpbl9idWZmZXIpLApAQCAtMjI4LDYgKzI0MCw3IEBACiAJCQkgICAgKCh1bnNpZ25lZCBsb25nKXEtPmRtYV9kcmFpbl9idWZmZXIpICYKIAkJCSAgICAoUEFHRV9TSVpFIC0gMSkpOwogCQluc2VncysrOworCQlycS0+ZXh0cmFfbGVuICs9IHEtPmRtYV9kcmFpbl9zaXplOwogCX0KIAogCWlmIChzZykKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKaW5kZXggYzhkMGM1Ny4uNTcxM2Y3ZSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNldHRpbmdzLmMKKysrIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCS8qIEFzc3VtZSBhbnl0aGluZyA8PSA0R0IgY2FuIGJlIGhhbmRsZWQgYnkgSU9NTVUuCiAJICAgQWN0dWFsbHkgc29tZSBJT01NVXMgY2FuIGhhbmRsZSBldmVyeXRoaW5nLCBidXQgSSBkb24ndAogCSAgIGtub3cgb2YgYSB3YXkgdG8gdGVzdCB0aGlzIGhlcmUuICovCi0JaWYgKGJfcGZuIDwgKG1pbl90KHU2NCwgMHhmZmZmZmZmZiwgQkxLX0JPVU5DRV9ISUdIKSA+PiBQQUdFX1NISUZUKSkKKwlpZiAoYl9wZm4gPCAobWluX3QodTY0LCAweDEwMDAwMDAwMFVMLCBCTEtfQk9VTkNFX0hJR0gpID4+IFBBR0VfU0hJRlQpKQogCQlkbWEgPSAxOwogCXEtPmJvdW5jZV9wZm4gPSBtYXhfbG93X3BmbjsKICNlbHNlCkBAIC0yOTMsOSArMjkzLDI2IEBACiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9zdGFja19saW1pdHMpOwogCiAvKioKLSAqIGJsa19xdWV1ZV9kbWFfZHJhaW4gLSBTZXQgdXAgYSBkcmFpbiBidWZmZXIgZm9yIGV4Y2VzcyBkbWEuCisgKiBibGtfcXVldWVfZG1hX3BhZCAtIHNldCBwYWQgbWFzaworICogQHE6ICAgICB0aGUgcmVxdWVzdCBxdWV1ZSBmb3IgdGhlIGRldmljZQorICogQG1hc2s6ICBwYWQgbWFzawogICoKKyAqIFNldCBwYWQgbWFzay4gIERpcmVjdCBJTyByZXF1ZXN0cyBhcmUgcGFkZGVkIHRvIHRoZSBtYXNrIHNwZWNpZmllZC4KKyAqCisgKiBBcHBlbmRpbmcgcGFkIGJ1ZmZlciB0byBhIHJlcXVlc3QgbW9kaWZpZXMgLT5kYXRhX2xlbiBzdWNoIHRoYXQgaXQKKyAqIGluY2x1ZGVzIHRoZSBwYWQgYnVmZmVyLiAgVGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRhIGxlbmd0aCBjYW4gYmUKKyAqIG9idGFpbmVkIHVzaW5nIGJsa19ycV9yYXdfZGF0YV9sZW4oKS4KKyAqKi8KK3ZvaWQgYmxrX3F1ZXVlX2RtYV9wYWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXEtPmRtYV9wYWRfbWFzayA9IG1hc2s7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9kbWFfcGFkKTsKKworLyoqCisgKiBibGtfcXVldWVfZG1hX2RyYWluIC0gU2V0IHVwIGEgZHJhaW4gYnVmZmVyIGZvciBleGNlc3MgZG1hLgogICogQHE6ICB0aGUgcmVxdWVzdCBxdWV1ZSBmb3IgdGhlIGRldmljZQorICogQGRtYV9kcmFpbl9uZWVkZWQ6IGZuIHdoaWNoIHJldHVybnMgbm9uLXplcm8gaWYgZHJhaW4gaXMgbmVjZXNzYXJ5CiAgKiBAYnVmOglwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYnVmZmVyCiAgKiBAc2l6ZToJc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzCiAgKgpAQCAtMzE1LDE0ICszMzIsMTYgQEAKICAqIGRldmljZSBjYW4gc3VwcG9ydCBvdGhlcndpc2UgdGhlcmUgd29uJ3QgYmUgcm9vbSBmb3IgdGhlIGRyYWluCiAgKiBidWZmZXIuCiAgKi8KLWludCBibGtfcXVldWVfZG1hX2RyYWluKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB2b2lkICpidWYsCi0JCQkJdW5zaWduZWQgaW50IHNpemUpCitpbnQgYmxrX3F1ZXVlX2RtYV9kcmFpbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCSAgICAgICBkbWFfZHJhaW5fbmVlZGVkX2ZuICpkbWFfZHJhaW5fbmVlZGVkLAorCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJaWYgKHEtPm1heF9od19zZWdtZW50cyA8IDIgfHwgcS0+bWF4X3BoeXNfc2VnbWVudHMgPCAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBtYWtlIHJvb20gZm9yIGFwcGVuZGluZyB0aGUgZHJhaW4gKi8KIAktLXEtPm1heF9od19zZWdtZW50czsKIAktLXEtPm1heF9waHlzX3NlZ21lbnRzOworCXEtPmRtYV9kcmFpbl9uZWVkZWQgPSBkbWFfZHJhaW5fbmVlZGVkOwogCXEtPmRtYV9kcmFpbl9idWZmZXIgPSBidWY7CiAJcS0+ZG1hX2RyYWluX3NpemUgPSBzaXplOwogCkBAIC0zODYsNyArNDA1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KTsKIAotaW50IF9faW5pdCBibGtfc2V0dGluZ3NfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmxrX3NldHRpbmdzX2luaXQodm9pZCkKIHsKIAlibGtfbWF4X2xvd19wZm4gPSBtYXhfbG93X3BmbiAtIDE7CiAJYmxrX21heF9wZm4gPSBtYXhfcGZuIC0gMTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggNTRkMGRiMS4uZmM0MWQ4MyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTI3Niw5ICsyNzYsMTIgQEAKIAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0+cXVldWU7CiAKLQlpZiAoIXEgfHwgIXEtPnJlcXVlc3RfZm4pCisJaWYgKFdBUk5fT04oIXEpKQogCQlyZXR1cm4gLUVOWElPOwogCisJaWYgKCFxLT5yZXF1ZXN0X2ZuKQorCQlyZXR1cm4gMDsKKwogCXJldCA9IGtvYmplY3RfYWRkKCZxLT5rb2JqLCBrb2JqZWN0X2dldCgmZGlzay0+ZGV2LmtvYmopLAogCQkJICAiJXMiLCAicXVldWUiKTsKIAlpZiAocmV0IDwgMCkKQEAgLTMwMCw3ICszMDMsMTAgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwogCi0JaWYgKHEgJiYgcS0+cmVxdWVzdF9mbikgeworCWlmIChXQVJOX09OKCFxKSkKKwkJcmV0dXJuOworCisJaWYgKHEtPnJlcXVlc3RfZm4pIHsKIAkJZWx2X3VucmVnaXN0ZXJfcXVldWUocSk7CiAKIAkJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfUkVNT1ZFKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10YWcuYyBiL2Jsb2NrL2Jsay10YWcuYwppbmRleCBhOGMzN2Q0Li40NzgwYTQ2IDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGFnLmMKKysrIGIvYmxvY2svYmxrLXRhZy5jCkBAIC02LDYgKzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogCisjaW5jbHVkZSAiYmxrLmgiCisKIC8qKgogICogYmxrX3F1ZXVlX2ZpbmRfdGFnIC0gZmluZCBhIHJlcXVlc3QgYnkgaXRzIHRhZyBhbmQgcXVldWUKICAqIEBxOgkgVGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmgKaW5kZXggZWM4OThkZC4uZWM5MTIwZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKKysrIGIvYmxvY2svYmxrLmgKQEAgLTMyLDYgKzMyLDggQEAKIAogdm9pZCBibGtfcXVldWVfY29uZ2VzdGlvbl90aHJlc2hvbGQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogCitpbnQgYmxrX2Rldl9pbml0KHZvaWQpOworCiAvKgogICogUmV0dXJuIHRoZSB0aHJlc2hvbGQgKG51bWJlciBvZiB1c2VkIHJlcXVlc3RzKSBhdCB3aGljaCB0aGUgcXVldWUgaXMKICAqIGNvbnNpZGVyZWQgdG8gYmUgY29uZ2VzdGVkLiAgSXQgaW5jbHVkZSBhIGxpdHRsZSBoeXN0ZXJlc2lzIHRvIGtlZXAgdGhlCmRpZmYgLS1naXQgYS9ibG9jay9ic2cuYyBiL2Jsb2NrL2JzZy5jCmluZGV4IDg5MTdjNTEuLmY1MTE3MmUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JzZy5jCisrKyBiL2Jsb2NrL2JzZy5jCkBAIC0zNyw3ICszNyw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBkb25lX2xpc3Q7CiAJc3RydWN0IGhsaXN0X25vZGUgZGV2X2xpc3Q7CiAJYXRvbWljX3QgcmVmX2NvdW50OwotCWludCBtaW5vcjsKIAlpbnQgcXVldWVkX2NtZHM7CiAJaW50IGRvbmVfY21kczsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cV9kb25lOwpAQCAtMzY4LDcgKzM2Nyw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZiZC0+bG9jayk7CiAJaWYgKGJkLT5kb25lX2NtZHMpIHsKLQkJYmMgPSBsaXN0X2VudHJ5KGJkLT5kb25lX2xpc3QubmV4dCwgc3RydWN0IGJzZ19jb21tYW5kLCBsaXN0KTsKKwkJYmMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZiZC0+ZG9uZV9saXN0LCBzdHJ1Y3QgYnNnX2NvbW1hbmQsIGxpc3QpOwogCQlsaXN0X2RlbCgmYmMtPmxpc3QpOwogCQliZC0+ZG9uZV9jbWRzLS07CiAJfQpAQCAtNDY4LDggKzQ2Nyw2IEBACiAKIAlkcHJpbnRrKCIlczogZW50ZXJlZFxuIiwgYmQtPm5hbWUpOwogCi0Jc2V0X2JpdChCU0dfRl9CTE9DSywgJmJkLT5mbGFncyk7Ci0KIAkvKgogCSAqIHdhaXQgZm9yIGFsbCBjb21tYW5kcyB0byBjb21wbGV0ZQogCSAqLwpAQCAtNzA1LDYgKzcwMiw3IEBACiBzdGF0aWMgaW50IGJzZ19wdXRfZGV2aWNlKHN0cnVjdCBic2dfZGV2aWNlICpiZCkKIHsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBiZC0+cXVldWUtPmJzZ19kZXYuZGV2OwogCiAJbXV0ZXhfbG9jaygmYnNnX211dGV4KTsKIApAQCAtNzMwLDYgKzcyOCw3IEBACiAJa2ZyZWUoYmQpOwogb3V0OgogCW11dGV4X3VubG9jaygmYnNnX211dGV4KTsKKwlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzM4LDI0ICs3MzcsMjggQEAKIAkJCQkJIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBic2dfZGV2aWNlICpiZDsKKwlpbnQgcmV0OwogI2lmZGVmIEJTR19ERUJVRwogCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKICNlbmRpZgorCXJldCA9IGJsa19nZXRfcXVldWUocnEpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7CiAKIAliZCA9IGJzZ19hbGxvY19kZXZpY2UoKTsKLQlpZiAoIWJkKQorCWlmICghYmQpIHsKKwkJYmxrX3B1dF9xdWV1ZShycSk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KIAogCWJkLT5xdWV1ZSA9IHJxOwotCWtvYmplY3RfZ2V0KCZycS0+a29iaik7CiAJYnNnX3NldF9ibG9jayhiZCwgZmlsZSk7CiAKIAlhdG9taWNfc2V0KCZiZC0+cmVmX2NvdW50LCAxKTsKLQliZC0+bWlub3IgPSBpbWlub3IoaW5vZGUpOwogCW11dGV4X2xvY2soJmJzZ19tdXRleCk7Ci0JaGxpc3RfYWRkX2hlYWQoJmJkLT5kZXZfbGlzdCwgYnNnX2Rldl9pZHhfaGFzaChiZC0+bWlub3IpKTsKKwlobGlzdF9hZGRfaGVhZCgmYmQtPmRldl9saXN0LCBic2dfZGV2X2lkeF9oYXNoKGltaW5vcihpbm9kZSkpKTsKIAotCXN0cm5jcHkoYmQtPm5hbWUsIHJxLT5ic2dfZGV2LmNsYXNzX2Rldi0+Y2xhc3NfaWQsIHNpemVvZihiZC0+bmFtZSkgLSAxKTsKKwlzdHJuY3B5KGJkLT5uYW1lLCBycS0+YnNnX2Rldi5jbGFzc19kZXYtPmJ1c19pZCwgc2l6ZW9mKGJkLT5uYW1lKSAtIDEpOwogCWRwcmludGsoImJvdW5kIHRvIDwlcz4sIG1heCBxdWV1ZSAlZFxuIiwKIAkJZm9ybWF0X2Rldl90KGJ1ZiwgaW5vZGUtPmlfcmRldiksIGJkLT5tYXhfcXVldWUpOwogCkBAIC03NjMsMjMgKzc2NiwyMSBAQAogCXJldHVybiBiZDsKIH0KIAotc3RhdGljIHN0cnVjdCBic2dfZGV2aWNlICpfX2JzZ19nZXRfZGV2aWNlKGludCBtaW5vcikKK3N0YXRpYyBzdHJ1Y3QgYnNnX2RldmljZSAqX19ic2dfZ2V0X2RldmljZShpbnQgbWlub3IsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewotCXN0cnVjdCBic2dfZGV2aWNlICpiZCA9IE5VTEw7CisJc3RydWN0IGJzZ19kZXZpY2UgKmJkOwogCXN0cnVjdCBobGlzdF9ub2RlICplbnRyeTsKIAogCW11dGV4X2xvY2soJmJzZ19tdXRleCk7CiAKLQlobGlzdF9mb3JfZWFjaChlbnRyeSwgYnNnX2Rldl9pZHhfaGFzaChtaW5vcikpIHsKLQkJYmQgPSBobGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGJzZ19kZXZpY2UsIGRldl9saXN0KTsKLQkJaWYgKGJkLT5taW5vciA9PSBtaW5vcikgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkLCBlbnRyeSwgYnNnX2Rldl9pZHhfaGFzaChtaW5vciksIGRldl9saXN0KSB7CisJCWlmIChiZC0+cXVldWUgPT0gcSkgewogCQkJYXRvbWljX2luYygmYmQtPnJlZl9jb3VudCk7Ci0JCQlicmVhazsKKwkJCWdvdG8gZm91bmQ7CiAJCX0KLQotCQliZCA9IE5VTEw7CiAJfQotCisJYmQgPSBOVUxMOworZm91bmQ6CiAJbXV0ZXhfdW5sb2NrKCZic2dfbXV0ZXgpOwogCXJldHVybiBiZDsKIH0KQEAgLTc4OSwyMSArNzkwLDI3IEBACiAJc3RydWN0IGJzZ19kZXZpY2UgKmJkOwogCXN0cnVjdCBic2dfY2xhc3NfZGV2aWNlICpiY2Q7CiAKLQliZCA9IF9fYnNnX2dldF9kZXZpY2UoaW1pbm9yKGlub2RlKSk7Ci0JaWYgKGJkKQotCQlyZXR1cm4gYmQ7Ci0KIAkvKgogCSAqIGZpbmQgdGhlIGNsYXNzIGRldmljZQogCSAqLwogCW11dGV4X2xvY2soJmJzZ19tdXRleCk7CiAJYmNkID0gaWRyX2ZpbmQoJmJzZ19taW5vcl9pZHIsIGltaW5vcihpbm9kZSkpOworCWlmIChiY2QpCisJCWdldF9kZXZpY2UoYmNkLT5kZXYpOwogCW11dGV4X3VubG9jaygmYnNnX211dGV4KTsKIAogCWlmICghYmNkKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAotCXJldHVybiBic2dfYWRkX2RldmljZShpbm9kZSwgYmNkLT5xdWV1ZSwgZmlsZSk7CisJYmQgPSBfX2JzZ19nZXRfZGV2aWNlKGltaW5vcihpbm9kZSksIGJjZC0+cXVldWUpOworCWlmIChiZCkKKwkJcmV0dXJuIGJkOworCisJYmQgPSBic2dfYWRkX2RldmljZShpbm9kZSwgYmNkLT5xdWV1ZSwgZmlsZSk7CisJaWYgKElTX0VSUihiZCkpCisJCXB1dF9kZXZpY2UoYmNkLT5kZXYpOworCisJcmV0dXJuIGJkOwogfQogCiBzdGF0aWMgaW50IGJzZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtOTM5LDEwICs5NDYsOSBAQAogCW11dGV4X2xvY2soJmJzZ19tdXRleCk7CiAJaWRyX3JlbW92ZSgmYnNnX21pbm9yX2lkciwgYmNkLT5taW5vcik7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJnEtPmtvYmosICJic2ciKTsKLQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihiY2QtPmNsYXNzX2Rldik7CisJZGV2aWNlX3VucmVnaXN0ZXIoYmNkLT5jbGFzc19kZXYpOwogCXB1dF9kZXZpY2UoYmNkLT5kZXYpOwogCWJjZC0+Y2xhc3NfZGV2ID0gTlVMTDsKLQliY2QtPmRldiA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZic2dfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnNnX3VucmVnaXN0ZXJfcXVldWUpOwpAQCAtOTUzLDcgKzk1OSw3IEBACiAJc3RydWN0IGJzZ19jbGFzc19kZXZpY2UgKmJjZDsKIAlkZXZfdCBkZXY7CiAJaW50IHJldCwgbWlub3I7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmRldm5hbWU7CiAKIAlpZiAobmFtZSkKQEAgLTk5Miw4ICs5OTgsNyBAQAogCWJjZC0+cXVldWUgPSBxOwogCWJjZC0+ZGV2ID0gZ2V0X2RldmljZShnZGV2KTsKIAlkZXYgPSBNS0RFVihic2dfbWFqb3IsIGJjZC0+bWlub3IpOwotCWNsYXNzX2RldiA9IGNsYXNzX2RldmljZV9jcmVhdGUoYnNnX2NsYXNzLCBOVUxMLCBkZXYsIGdkZXYsICIlcyIsCi0JCQkJCWRldm5hbWUpOworCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoYnNnX2NsYXNzLCBnZGV2LCBkZXYsICIlcyIsIGRldm5hbWUpOwogCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgewogCQlyZXQgPSBQVFJfRVJSKGNsYXNzX2Rldik7CiAJCWdvdG8gcHV0X2RldjsKQEAgLTEwMTAsNyArMTAxNSw3IEBACiAJcmV0dXJuIDA7CiAKIHVucmVnaXN0ZXJfY2xhc3NfZGV2OgotCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7CisJZGV2aWNlX3VucmVnaXN0ZXIoY2xhc3NfZGV2KTsKIHB1dF9kZXY6CiAJcHV0X2RldmljZShnZGV2KTsKIHJlbW92ZV9pZHI6CmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCBjYTE5OGU2Li5mNGUxMDA2IDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTExNDMsNDMgKzExNDMsMzcgQEAKIH0KIAogLyoKLSAqIENhbGwgZnVuYyBmb3IgZWFjaCBjaWMgYXR0YWNoZWQgdG8gdGhpcyBpb2MuIFJldHVybnMgbnVtYmVyIG9mIGNpYydzIHNlZW4uCisgKiBDYWxsIGZ1bmMgZm9yIGVhY2ggY2ljIGF0dGFjaGVkIHRvIHRoaXMgaW9jLgogICovCi0jZGVmaW5lIENJQ19HQU5HX05SCTE2Ci1zdGF0aWMgdW5zaWduZWQgaW50CitzdGF0aWMgdm9pZAogY2FsbF9mb3JfZWFjaF9jaWMoc3RydWN0IGlvX2NvbnRleHQgKmlvYywKIAkJICB2b2lkICgqZnVuYykoc3RydWN0IGlvX2NvbnRleHQgKiwgc3RydWN0IGNmcV9pb19jb250ZXh0ICopKQogewotCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljc1tDSUNfR0FOR19OUl07Ci0JdW5zaWduZWQgbG9uZyBpbmRleCA9IDA7Ci0JdW5zaWduZWQgaW50IGNhbGxlZCA9IDA7Ci0JaW50IG5yOworCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOworCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCi0JZG8gewotCQlpbnQgaTsKLQotCQkvKgotCQkgKiBQZXJoYXBzIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IC0gdGhpcyBqdXN0IGdhbmcgbG9va3VwcyBmcm9tCi0JCSAqIDAgdG8gdGhlIGVuZCwgcmVzdGFydGluZyBhZnRlciBlYWNoIENJQ19HQU5HX05SIGZyb20gdGhlCi0JCSAqIGxhc3Qga2V5ICsgMS4KLQkJICovCi0JCW5yID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cCgmaW9jLT5yYWRpeF9yb290LCAodm9pZCAqKikgY2ljcywKLQkJCQkJCWluZGV4LCBDSUNfR0FOR19OUik7Ci0JCWlmICghbnIpCi0JCQlicmVhazsKLQotCQljYWxsZWQgKz0gbnI7Ci0JCWluZGV4ID0gMSArICh1bnNpZ25lZCBsb25nKSBjaWNzW25yIC0gMV0tPmtleTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQkJCWZ1bmMoaW9jLCBjaWNzW2ldKTsKLQl9IHdoaWxlIChuciA9PSBDSUNfR0FOR19OUik7Ci0KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2ljLCBuLCAmaW9jLT5jaWNfbGlzdCwgY2ljX2xpc3QpCisJCWZ1bmMoaW9jLCBjaWMpOwogCXJjdV9yZWFkX3VubG9jaygpOworfQogCi0JcmV0dXJuIGNhbGxlZDsKK3N0YXRpYyB2b2lkIGNmcV9jaWNfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOworCisJY2ljID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBjZnFfaW9fY29udGV4dCwgcmN1X2hlYWQpOworCisJa21lbV9jYWNoZV9mcmVlKGNmcV9pb2NfcG9vbCwgY2ljKTsKKwllbHZfaW9jX2NvdW50X2RlYyhpb2NfY291bnQpOworCisJaWYgKGlvY19nb25lICYmICFlbHZfaW9jX2NvdW50X3JlYWQoaW9jX2NvdW50KSkKKwkJY29tcGxldGUoaW9jX2dvbmUpOworfQorCitzdGF0aWMgdm9pZCBjZnFfY2ljX2ZyZWUoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMpCit7CisJY2FsbF9yY3UoJmNpYy0+cmN1X2hlYWQsIGNmcV9jaWNfZnJlZV9yY3UpOwogfQogCiBzdGF0aWMgdm9pZCBjaWNfZnJlZV9mdW5jKHN0cnVjdCBpb19jb250ZXh0ICppb2MsIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljKQpAQCAtMTE5MCwyNiArMTE4NCwyMSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+bG9jaywgZmxhZ3MpOwogCXJhZGl4X3RyZWVfZGVsZXRlKCZpb2MtPnJhZGl4X3Jvb3QsIGNpYy0+ZGVhZF9rZXkpOworCWhsaXN0X2RlbF9yY3UoJmNpYy0+Y2ljX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+bG9jaywgZmxhZ3MpOwogCi0Ja21lbV9jYWNoZV9mcmVlKGNmcV9pb2NfcG9vbCwgY2ljKTsKKwljZnFfY2ljX2ZyZWUoY2ljKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX2ZyZWVfaW9fY29udGV4dChzdHJ1Y3QgaW9fY29udGV4dCAqaW9jKQogewotCWludCBmcmVlZDsKLQogCS8qCi0JICogaW9jLT5yZWZjb3VudCBpcyB6ZXJvIGhlcmUsIHNvIG5vIG1vcmUgY2ljJ3MgYXJlIGFsbG93ZWQgdG8gYmUKLQkgKiBsaW5rZWQgaW50byB0aGlzIGlvYy4gU28gaXQgc2hvdWxkIGJlIG9rIHRvIGl0ZXJhdGUgb3ZlciB0aGUga25vd24KLQkgKiBsaXN0LCB3ZSB3aWxsIHNlZSBhbGwgY2ljJ3Mgc2luY2Ugbm8gbmV3IG9uZXMgYXJlIGFkZGVkLgorCSAqIGlvYy0+cmVmY291bnQgaXMgemVybyBoZXJlLCBvciB3ZSBhcmUgY2FsbGVkIGZyb20gZWx2X3VucmVnaXN0ZXIoKSwKKwkgKiBzbyBubyBtb3JlIGNpYydzIGFyZSBhbGxvd2VkIHRvIGJlIGxpbmtlZCBpbnRvIHRoaXMgaW9jLiAgU28gaXQKKwkgKiBzaG91bGQgYmUgb2sgdG8gaXRlcmF0ZSBvdmVyIHRoZSBrbm93biBsaXN0LCB3ZSB3aWxsIHNlZSBhbGwgY2ljJ3MKKwkgKiBzaW5jZSBubyBuZXcgb25lcyBhcmUgYWRkZWQuCiAJICovCi0JZnJlZWQgPSBjYWxsX2Zvcl9lYWNoX2NpYyhpb2MsIGNpY19mcmVlX2Z1bmMpOwotCi0JZWx2X2lvY19jb3VudF9tb2QoaW9jX2NvdW50LCAtZnJlZWQpOwotCi0JaWYgKGlvY19nb25lICYmICFlbHZfaW9jX2NvdW50X3JlYWQoaW9jX2NvdW50KSkKLQkJY29tcGxldGUoaW9jX2dvbmUpOworCWNhbGxfZm9yX2VhY2hfY2ljKGlvYywgY2ljX2ZyZWVfZnVuYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9leGl0X2NmcXEoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQpAQCAtMTIyNSw2ICsxMjE0LDggQEAKIHN0YXRpYyB2b2lkIF9fY2ZxX2V4aXRfc2luZ2xlX2lvX2NvbnRleHQoc3RydWN0IGNmcV9kYXRhICpjZnFkLAogCQkJCQkgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMpCiB7CisJc3RydWN0IGlvX2NvbnRleHQgKmlvYyA9IGNpYy0+aW9jOworCiAJbGlzdF9kZWxfaW5pdCgmY2ljLT5xdWV1ZV9saXN0KTsKIAogCS8qCkBAIC0xMjM0LDYgKzEyMjUsOSBAQAogCWNpYy0+ZGVhZF9rZXkgPSAodW5zaWduZWQgbG9uZykgY2ljLT5rZXk7CiAJY2ljLT5rZXkgPSBOVUxMOwogCisJaWYgKGlvYy0+aW9jX2RhdGEgPT0gY2ljKQorCQlyY3VfYXNzaWduX3BvaW50ZXIoaW9jLT5pb2NfZGF0YSwgTlVMTCk7CisKIAlpZiAoY2ljLT5jZnFxW0FTWU5DXSkgewogCQljZnFfZXhpdF9jZnFxKGNmcWQsIGNpYy0+Y2ZxcVtBU1lOQ10pOwogCQljaWMtPmNmcXFbQVNZTkNdID0gTlVMTDsKQEAgLTEyNjYsNyArMTI2MCw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNmcV9leGl0X2lvX2NvbnRleHQoc3RydWN0IGlvX2NvbnRleHQgKmlvYykKIHsKLQlyY3VfYXNzaWduX3BvaW50ZXIoaW9jLT5pb2NfZGF0YSwgTlVMTCk7CiAJY2FsbF9mb3JfZWFjaF9jaWMoaW9jLCBjZnFfZXhpdF9zaW5nbGVfaW9fY29udGV4dCk7CiB9CiAKQEAgLTEyODAsNiArMTI3Myw3IEBACiAJaWYgKGNpYykgewogCQljaWMtPmxhc3RfZW5kX3JlcXVlc3QgPSBqaWZmaWVzOwogCQlJTklUX0xJU1RfSEVBRCgmY2ljLT5xdWV1ZV9saXN0KTsKKwkJSU5JVF9ITElTVF9OT0RFKCZjaWMtPmNpY19saXN0KTsKIAkJY2ljLT5kdG9yID0gY2ZxX2ZyZWVfaW9fY29udGV4dDsKIAkJY2ljLT5leGl0ID0gY2ZxX2V4aXRfaW9fY29udGV4dDsKIAkJZWx2X2lvY19jb3VudF9pbmMoaW9jX2NvdW50KTsKQEAgLTE0NzUsMTUgKzE0NjksNiBAQAogCXJldHVybiBjZnFxOwogfQogCi1zdGF0aWMgdm9pZCBjZnFfY2ljX2ZyZWUoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMpCi17Ci0Ja21lbV9jYWNoZV9mcmVlKGNmcV9pb2NfcG9vbCwgY2ljKTsKLQllbHZfaW9jX2NvdW50X2RlYyhpb2NfY291bnQpOwotCi0JaWYgKGlvY19nb25lICYmICFlbHZfaW9jX2NvdW50X3JlYWQoaW9jX2NvdW50KSkKLQkJY29tcGxldGUoaW9jX2dvbmUpOwotfQotCiAvKgogICogV2UgZHJvcCBjZnEgaW8gY29udGV4dHMgbGF6aWx5LCBzbyB3ZSBtYXkgZmluZCBhIGRlYWQgb25lLgogICovCkBAIC0xNDk3LDEwICsxNDgyLDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoaW9jLT5pb2NfZGF0YSA9PSBjaWMpCi0JCXJjdV9hc3NpZ25fcG9pbnRlcihpb2MtPmlvY19kYXRhLCBOVUxMKTsKKwlCVUdfT04oaW9jLT5pb2NfZGF0YSA9PSBjaWMpOwogCiAJcmFkaXhfdHJlZV9kZWxldGUoJmlvYy0+cmFkaXhfcm9vdCwgKHVuc2lnbmVkIGxvbmcpIGNmcWQpOworCWhsaXN0X2RlbF9yY3UoJmNpYy0+Y2ljX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+bG9jaywgZmxhZ3MpOwogCiAJY2ZxX2NpY19mcmVlKGNpYyk7CkBAIC0xNTYxLDYgKzE1NDYsOCBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpb2MtPnJhZGl4X3Jvb3QsCiAJCQkJCQkodW5zaWduZWQgbG9uZykgY2ZxZCwgY2ljKTsKKwkJaWYgKCFyZXQpCisJCQlobGlzdF9hZGRfaGVhZF9yY3UoJmNpYy0+Y2ljX2xpc3QsICZpb2MtPmNpY19saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5sb2NrLCBmbGFncyk7CiAKIAkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwpAQCAtMjE1Miw3ICsyMTM5LDcgQEAKIAlpZiAoIWNmcV9wb29sKQogCQlnb3RvIGZhaWw7CiAKLQljZnFfaW9jX3Bvb2wgPSBLTUVNX0NBQ0hFKGNmcV9pb19jb250ZXh0LCBTTEFCX0RFU1RST1lfQllfUkNVKTsKKwljZnFfaW9jX3Bvb2wgPSBLTUVNX0NBQ0hFKGNmcV9pb19jb250ZXh0LCAwKTsKIAlpZiAoIWNmcV9pb2NfcG9vbCkKIAkJZ290byBmYWlsOwogCkBAIC0yMzAwLDcgKzIyODcsNiBAQAogCXNtcF93bWIoKTsKIAlpZiAoZWx2X2lvY19jb3VudF9yZWFkKGlvY19jb3VudCkpCiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oaW9jX2dvbmUpOwotCXN5bmNocm9uaXplX3JjdSgpOwogCWNmcV9zbGFiX2tpbGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svY29tcGF0X2lvY3RsLmMgYi9ibG9jay9jb21wYXRfaW9jdGwuYwppbmRleCBiNzMzNzMyLi5jNzBkMGI2IDEwMDY0NAotLS0gYS9ibG9jay9jb21wYXRfaW9jdGwuYworKysgYi9ibG9jay9jb21wYXRfaW9jdGwuYwpAQCAtNjI0LDcgKzYyNCw2IEBACiAJY2FzZSBIRElPX0dFVF9JREVOVElUWToKIAljYXNlIEhESU9fRFJJVkVfVEFTSzoKIAljYXNlIEhESU9fRFJJVkVfQ01EOgotCWNhc2UgSERJT19TQ0FOX0hXSUY6CiAJLyogMHgzMzAgaXMgcmVzZXJ2ZWQgLS0gaXQgdXNlZCB0byBiZSBIRElPX0dFVEdFT19CSUcgKi8KIAljYXNlIDB4MzMwOgogCS8qIDB4MDIgLS0gRmxvcHB5IGlvY3RscyAqLwpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggYmFmYmFlMC4uODgzMThjMyAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC0xMzQsNiArMTM0LDIxIEBACiAJc3Bpbl9sb2NrKCZlbHZfbGlzdF9sb2NrKTsKIAogCWUgPSBlbGV2YXRvcl9maW5kKG5hbWUpOworCWlmICghZSkgeworCQljaGFyIGVsdltFTFZfTkFNRV9NQVggKyBzdHJsZW4oIi1pb3NjaGVkIildOworCisJCXNwaW5fdW5sb2NrKCZlbHZfbGlzdF9sb2NrKTsKKworCQlpZiAoIXN0cmNtcChuYW1lLCAiYW50aWNpcGF0b3J5IikpCisJCQlzcHJpbnRmKGVsdiwgImFzLWlvc2NoZWQiKTsKKwkJZWxzZQorCQkJc3ByaW50ZihlbHYsICIlcy1pb3NjaGVkIiwgbmFtZSk7CisKKwkJcmVxdWVzdF9tb2R1bGUoZWx2KTsKKwkJc3Bpbl9sb2NrKCZlbHZfbGlzdF9sb2NrKTsKKwkJZSA9IGVsZXZhdG9yX2ZpbmQobmFtZSk7CisJfQorCiAJaWYgKGUgJiYgIXRyeV9tb2R1bGVfZ2V0KGUtPmVsZXZhdG9yX293bmVyKSkKIAkJZSA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDUzZjIyMzguLjAwZGE1MjEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMTcsMTEgKzE3LDE1IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCisjaW5jbHVkZSAiYmxrLmgiCisKIHN0YXRpYyBERUZJTkVfTVVURVgoYmxvY2tfY2xhc3NfbG9jayk7CiAjaWZuZGVmIENPTkZJR19TWVNGU19ERVBSRUNBVEVECiBzdHJ1Y3Qga29iamVjdCAqYmxvY2tfZGVwcjsKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGRpc2tfdHlwZTsKKwogLyoKICAqIENhbiBiZSBkZWxldGVkIGFsdG9nZXRoZXIuIExhdGVyLgogICoKQEAgLTM0Niw4ICszNTAsNiBAQAogI2VuZGlmCiAKIAotZXh0ZXJuIGludCBibGtfZGV2X2luaXQodm9pZCk7Ci0KIHN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqYmFzZV9wcm9iZShkZXZfdCBkZXZ0LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCiB7CiAJaWYgKHJlcXVlc3RfbW9kdWxlKCJibG9jay1tYWpvci0lZC0lZCIsIE1BSk9SKGRldnQpLCBNSU5PUihkZXZ0KSkgPiAwKQpAQCAtMzU4LDcgKzM2MCw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdlbmhkX2RldmljZV9pbml0KHZvaWQpCiB7Ci0JY2xhc3NfcmVnaXN0ZXIoJmJsb2NrX2NsYXNzKTsKKwlpbnQgZXJyb3IgPSBjbGFzc19yZWdpc3RlcigmYmxvY2tfY2xhc3MpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCXJldHVybiBlcnJvcjsKIAliZGV2X21hcCA9IGtvYmpfbWFwX2luaXQoYmFzZV9wcm9iZSwgJmJsb2NrX2NsYXNzX2xvY2spOwogCWJsa19kZXZfaW5pdCgpOwogCkBAIC01MDIsNyArNTA2LDcgQEAKIAkubmFtZQkJPSAiYmxvY2siLAogfTsKIAotc3RydWN0IGRldmljZV90eXBlIGRpc2tfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgZGlza190eXBlID0gewogCS5uYW1lCQk9ICJkaXNrIiwKIAkuZ3JvdXBzCQk9IGRpc2tfYXR0cl9ncm91cHMsCiAJLnJlbGVhc2UJPSBkaXNrX3JlbGVhc2UsCkBAIC02MzIsMTIgKzYzNiwxNCBAQAogCXB1dF9kZXZpY2UoZ2QtPmRyaXZlcmZzX2Rldik7CiB9CiAKKyNpZiAwCiB2b2lkIGdlbmhkX21lZGlhX2NoYW5nZV9ub3RpZnkoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJZ2V0X2RldmljZShkaXNrLT5kcml2ZXJmc19kZXYpOwogCXNjaGVkdWxlX3dvcmsoJmRpc2stPmFzeW5jX25vdGlmeSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnZW5oZF9tZWRpYV9jaGFuZ2Vfbm90aWZ5KTsKKyNlbmRpZiAgLyogIDAgICovCiAKIGRldl90IGJsa19sb29rdXBfZGV2dChjb25zdCBjaGFyICpuYW1lKQogewpkaWZmIC0tZ2l0IGEvYmxvY2svc2NzaV9pb2N0bC5jIGIvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IDk2NzViMzQuLmEyYzNhOTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3Njc2lfaW9jdGwuYworKysgYi9ibG9jay9zY3NpX2lvY3RsLmMKQEAgLTUyOSw2ICs1MjksNyBAQAogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwogCXJxLT5kYXRhID0gTlVMTDsKIAlycS0+ZGF0YV9sZW4gPSAwOworCXJxLT5leHRyYV9sZW4gPSAwOwogCXJxLT50aW1lb3V0ID0gQkxLX0RFRkFVTFRfU0dfVElNRU9VVDsKIAltZW1zZXQocnEtPmNtZCwgMCwgc2l6ZW9mKHJxLT5jbWQpKTsKIAlycS0+Y21kWzBdID0gY21kOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCBjMzE2NmExLi44NjQ0NTZjIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtMTMsMTIgKzEzLDE0IEBACiAjIENyeXB0b2dyYXBoaWMgQVBJIENvbmZpZ3VyYXRpb24KICMKIG1lbnVjb25maWcgQ1JZUFRPCi0JYm9vbCAiQ3J5cHRvZ3JhcGhpYyBBUEkiCisJdHJpc3RhdGUgIkNyeXB0b2dyYXBoaWMgQVBJIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRoZSBjb3JlIENyeXB0b2dyYXBoaWMgQVBJLgogCiBpZiBDUllQVE8KIAorY29tbWVudCAiQ3J5cHRvIGNvcmUgb3IgaGVscGVyIgorCiBjb25maWcgQ1JZUFRPX0FMR0FQSQogCXRyaXN0YXRlCiAJaGVscApAQCAtMzIsMTUgKzM0LDYgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAKLWNvbmZpZyBDUllQVE9fU0VRSVYKLQl0cmlzdGF0ZSAiU2VxdWVuY2UgTnVtYmVyIElWIEdlbmVyYXRvciIKLQlzZWxlY3QgQ1JZUFRPX0FFQUQKLQlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgotCWhlbHAKLQkgIFRoaXMgSVYgZ2VuZXJhdG9yIGdlbmVyYXRlcyBhbiBJViBiYXNlZCBvbiBhIHNlcXVlbmNlIG51bWJlciBieQotCSAgeG9yaW5nIGl0IHdpdGggYSBzYWx0LiAgVGhpcyBhbGdvcml0aG0gaXMgbWFpbmx5IHVzZWZ1bCBmb3IgQ1RSCi0JICBhbmQgc2ltaWxhciBtb2Rlcy4KLQogY29uZmlnIENSWVBUT19IQVNICiAJdHJpc3RhdGUKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpAQCAtNTIsNiArNDUsMTUwIEBACiAJICBDcmVhdGUgZGVmYXVsdCBjcnlwdG9ncmFwaGljIHRlbXBsYXRlIGluc3RhbnRpYXRpb25zIHN1Y2ggYXMKIAkgIGNiYyhhZXMpLgogCitjb25maWcgQ1JZUFRPX0dGMTI4TVVMCisJdHJpc3RhdGUgIkdGKDJeMTI4KSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBFZmZpY2llbnQgdGFibGUgZHJpdmVuIGltcGxlbWVudGF0aW9uIG9mIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUKKwkgIGZpZWxkIEdGKDJeMTI4KS4gIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgY3lwaGVyIG1vZGVzLiBUaGlzCisJICBvcHRpb24gd2lsbCBiZSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGlmIHlvdSBzZWxlY3Qgc3VjaCBhCisJICBjaXBoZXIgbW9kZS4gIE9ubHkgc2VsZWN0IHRoaXMgb3B0aW9uIGJ5IGhhbmQgaWYgeW91IGV4cGVjdCB0byBsb2FkCisJICBhbiBleHRlcm5hbCBtb2R1bGUgdGhhdCByZXF1aXJlcyB0aGVzZSBmdW5jdGlvbnMuCisKK2NvbmZpZyBDUllQVE9fTlVMTAorCXRyaXN0YXRlICJOdWxsIGFsZ29yaXRobXMiCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCWhlbHAKKwkgIFRoZXNlIGFyZSAnTnVsbCcgYWxnb3JpdGhtcywgdXNlZCBieSBJUHNlYywgd2hpY2ggZG8gbm90aGluZy4KKworY29uZmlnIENSWVBUT19DUllQVEQKKwl0cmlzdGF0ZSAiU29mdHdhcmUgYXN5bmMgY3J5cHRvIGRhZW1vbiIKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCWhlbHAKKwkgIFRoaXMgaXMgYSBnZW5lcmljIHNvZnR3YXJlIGFzeW5jaHJvbm91cyBjcnlwdG8gZGFlbW9uIHRoYXQKKwkgIGNvbnZlcnRzIGFuIGFyYml0cmFyeSBzeW5jaHJvbm91cyBzb2Z0d2FyZSBjcnlwdG8gYWxnb3JpdGhtCisJICBpbnRvIGFuIGFzeW5jaHJvbm91cyBhbGdvcml0aG0gdGhhdCBleGVjdXRlcyBpbiBhIGtlcm5lbCB0aHJlYWQuCisKK2NvbmZpZyBDUllQVE9fQVVUSEVOQworCXRyaXN0YXRlICJBdXRoZW5jIHN1cHBvcnQiCisJc2VsZWN0IENSWVBUT19BRUFECisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKKwloZWxwCisJICBBdXRoZW5jOiBDb21iaW5lZCBtb2RlIHdyYXBwZXIgZm9yIElQc2VjLgorCSAgVGhpcyBpcyByZXF1aXJlZCBmb3IgSVBTZWMuCisKK2NvbmZpZyBDUllQVE9fVEVTVAorCXRyaXN0YXRlICJUZXN0aW5nIG1vZHVsZSIKKwlkZXBlbmRzIG9uIG0KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fQUVBRAorCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisJaGVscAorCSAgUXVpY2sgJiBkaXJ0eSBjcnlwdG8gdGVzdCBtb2R1bGUuCisKK2NvbW1lbnQgIkF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YSIKKworY29uZmlnIENSWVBUT19DQ00KKwl0cmlzdGF0ZSAiQ0NNIHN1cHBvcnQiCisJc2VsZWN0IENSWVBUT19DVFIKKwlzZWxlY3QgQ1JZUFRPX0FFQUQKKwloZWxwCisJICBTdXBwb3J0IGZvciBDb3VudGVyIHdpdGggQ0JDIE1BQy4gUmVxdWlyZWQgZm9yIElQc2VjLgorCitjb25maWcgQ1JZUFRPX0dDTQorCXRyaXN0YXRlICJHQ00vR01BQyBzdXBwb3J0IgorCXNlbGVjdCBDUllQVE9fQ1RSCisJc2VsZWN0IENSWVBUT19BRUFECisJc2VsZWN0IENSWVBUT19HRjEyOE1VTAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIEdhbG9pcy9Db3VudGVyIE1vZGUgKEdDTSkgYW5kIEdhbG9pcyBNZXNzYWdlCisJICBBdXRoZW50aWNhdGlvbiBDb2RlIChHTUFDKS4gUmVxdWlyZWQgZm9yIElQU2VjLgorCitjb25maWcgQ1JZUFRPX1NFUUlWCisJdHJpc3RhdGUgIlNlcXVlbmNlIE51bWJlciBJViBHZW5lcmF0b3IiCisJc2VsZWN0IENSWVBUT19BRUFECisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwloZWxwCisJICBUaGlzIElWIGdlbmVyYXRvciBnZW5lcmF0ZXMgYW4gSVYgYmFzZWQgb24gYSBzZXF1ZW5jZSBudW1iZXIgYnkKKwkgIHhvcmluZyBpdCB3aXRoIGEgc2FsdC4gIFRoaXMgYWxnb3JpdGhtIGlzIG1haW5seSB1c2VmdWwgZm9yIENUUgorCitjb21tZW50ICJCbG9jayBtb2RlcyIKKworY29uZmlnIENSWVBUT19DQkMKKwl0cmlzdGF0ZSAiQ0JDIHN1cHBvcnQiCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKwloZWxwCisJICBDQkM6IENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlCisJICBUaGlzIGJsb2NrIGNpcGhlciBhbGdvcml0aG0gaXMgcmVxdWlyZWQgZm9yIElQU2VjLgorCitjb25maWcgQ1JZUFRPX0NUUgorCXRyaXN0YXRlICJDVFIgc3VwcG9ydCIKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCXNlbGVjdCBDUllQVE9fU0VRSVYKKwlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKwloZWxwCisJICBDVFI6IENvdW50ZXIgbW9kZQorCSAgVGhpcyBibG9jayBjaXBoZXIgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIGZvciBJUFNlYy4KKworY29uZmlnIENSWVBUT19DVFMKKwl0cmlzdGF0ZSAiQ1RTIHN1cHBvcnQiCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwloZWxwCisJICBDVFM6IENpcGhlciBUZXh0IFN0ZWFsaW5nCisJICBUaGlzIGlzIHRoZSBDaXBoZXIgVGV4dCBTdGVhbGluZyBtb2RlIGFzIGRlc2NyaWJlZCBieQorCSAgU2VjdGlvbiA4IG9mIHJmYzIwNDAgYW5kIHJlZmVyZW5jZWQgYnkgcmZjMzk2Mi4KKwkgIChyZmMzOTYyIGluY2x1ZGVzIGVycmF0YSBpbmZvcm1hdGlvbiBpbiBpdHMgQXBwZW5kaXggQSkKKwkgIFRoaXMgbW9kZSBpcyByZXF1aXJlZCBmb3IgS2VyYmVyb3MgZ3NzIG1lY2hhbmlzbSBzdXBwb3J0CisJICBmb3IgQUVTIGVuY3J5cHRpb24uCisKK2NvbmZpZyBDUllQVE9fRUNCCisJdHJpc3RhdGUgIkVDQiBzdXBwb3J0IgorCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisJc2VsZWN0IENSWVBUT19NQU5BR0VSCisJaGVscAorCSAgRUNCOiBFbGVjdHJvbmljIENvZGVCb29rIG1vZGUKKwkgIFRoaXMgaXMgdGhlIHNpbXBsZXN0IGJsb2NrIGNpcGhlciBhbGdvcml0aG0uICBJdCBzaW1wbHkgZW5jcnlwdHMKKwkgIHRoZSBpbnB1dCBibG9jayBieSBibG9jay4KKworY29uZmlnIENSWVBUT19MUlcKKwl0cmlzdGF0ZSAiTFJXIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCXNlbGVjdCBDUllQVE9fR0YxMjhNVUwKKwloZWxwCisJICBMUlc6IExpc2tvdiBSaXZlc3QgV2FnbmVyLCBhIHR3ZWFrYWJsZSwgbm9uIG1hbGxlYWJsZSwgbm9uIG1vdmFibGUKKwkgIG5hcnJvdyBibG9jayBjaXBoZXIgbW9kZSBmb3IgZG0tY3J5cHQuICBVc2UgaXQgd2l0aCBjaXBoZXIKKwkgIHNwZWNpZmljYXRpb24gc3RyaW5nIGFlcy1scnctYmVuYmksIHRoZSBrZXkgbXVzdCBiZSAyNTYsIDMyMCBvciAzODQuCisJICBUaGUgZmlyc3QgMTI4LCAxOTIgb3IgMjU2IGJpdHMgaW4gdGhlIGtleSBhcmUgdXNlZCBmb3IgQUVTIGFuZCB0aGUKKwkgIHJlc3QgaXMgdXNlZCB0byB0aWUgZWFjaCBjaXBoZXIgYmxvY2sgdG8gaXRzIGxvZ2ljYWwgcG9zaXRpb24uCisKK2NvbmZpZyBDUllQVE9fUENCQworCXRyaXN0YXRlICJQQ0JDIHN1cHBvcnQiCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKKwloZWxwCisJICBQQ0JDOiBQcm9wYWdhdGluZyBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZQorCSAgVGhpcyBibG9jayBjaXBoZXIgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIGZvciBSeFJQQy4KKworY29uZmlnIENSWVBUT19YVFMKKwl0cmlzdGF0ZSAiWFRTIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCXNlbGVjdCBDUllQVE9fR0YxMjhNVUwKKwloZWxwCisJICBYVFM6IElFRUUxNjE5L0QxNiBuYXJyb3cgYmxvY2sgY2lwaGVyIHVzZSB3aXRoIGFlcy14dHMtcGxhaW4sCisJICBrZXkgc2l6ZSAyNTYsIDM4NCBvciA1MTIgYml0cy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBjdXJyZW50bHkKKwkgIGNhbid0IGhhbmRsZSBhIHNlY3RvcnNpemUgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCisKK2NvbW1lbnQgIkhhc2ggbW9kZXMiCisKIGNvbmZpZyBDUllQVE9fSE1BQwogCXRyaXN0YXRlICJITUFDIHN1cHBvcnQiCiAJc2VsZWN0IENSWVBUT19IQVNICkBAIC03MSwxMSArMjA4LDE3IEBACiAJCWh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vbW9kZXMvcHJvcG9zZWRtb2Rlcy8KIAkJIHhjYmMtbWFjL3hjYmMtbWFjLXNwZWMucGRmCiAKLWNvbmZpZyBDUllQVE9fTlVMTAotCXRyaXN0YXRlICJOdWxsIGFsZ29yaXRobXMiCitjb21tZW50ICJEaWdlc3QiCisKK2NvbmZpZyBDUllQVE9fQ1JDMzJDCisJdHJpc3RhdGUgIkNSQzMyYyBDUkMgYWxnb3JpdGhtIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IExJQkNSQzMyQwogCWhlbHAKLQkgIFRoZXNlIGFyZSAnTnVsbCcgYWxnb3JpdGhtcywgdXNlZCBieSBJUHNlYywgd2hpY2ggZG8gbm90aGluZy4KKwkgIENhc3RhZ25vbGksIGV0IGFsIEN5Y2xpYyBSZWR1bmRhbmN5LUNoZWNrIEFsZ29yaXRobS4gIFVzZWQKKwkgIGJ5IGlTQ1NJIGZvciBoZWFkZXIgYW5kIGRhdGEgZGlnZXN0cyBhbmQgYnkgb3RoZXJzLgorCSAgU2VlIENhc3RhZ25vbGk5My4gIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBsaWIvbGliY3JjMzJjLgorICAgICAgICAgIE1vZHVsZSB3aWxsIGJlIGNyYzMyYy4KIAogY29uZmlnIENSWVBUT19NRDQKIAl0cmlzdGF0ZSAiTUQ0IGRpZ2VzdCBhbGdvcml0aG0iCkBAIC04OSw2ICsyMzIsMTUgQEAKIAloZWxwCiAJICBNRDUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIChSRkMxMzIxKS4KIAorY29uZmlnIENSWVBUT19NSUNIQUVMX01JQworCXRyaXN0YXRlICJNaWNoYWVsIE1JQyBrZXllZCBkaWdlc3QgYWxnb3JpdGhtIgorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJaGVscAorCSAgTWljaGFlbCBNSUMgaXMgdXNlZCBmb3IgbWVzc2FnZSBpbnRlZ3JpdHkgcHJvdGVjdGlvbiBpbiBUS0lQCisJICAoSUVFRSA4MDIuMTFpKS4gVGhpcyBhbGdvcml0aG0gaXMgcmVxdWlyZWQgZm9yIFRLSVAsIGJ1dCBpdAorCSAgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3NlcyBiZWNhdXNlIG9mIHRoZSB3ZWFrbmVzcworCSAgb2YgdGhlIGFsZ29yaXRobS4KKwogY29uZmlnIENSWVBUT19TSEExCiAJdHJpc3RhdGUgIlNIQTEgZGlnZXN0IGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpAQCAtMTAwLDcgKzI1Miw3IEBACiAJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBTSEEyNTYgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKERGSVBTIDE4MC0yKS4KLQkgIAorCiAJICBUaGlzIHZlcnNpb24gb2YgU0hBIGltcGxlbWVudHMgYSAyNTYgYml0IGhhc2ggd2l0aCAxMjggYml0cyBvZgogCSAgc2VjdXJpdHkgYWdhaW5zdCBjb2xsaXNpb24gYXR0YWNrcy4KIApAQCAtMTEyLDI1ICsyNjQsMTMgQEAKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIFNIQTUxMiBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoREZJUFMgMTgwLTIpLgotCSAgCisKIAkgIFRoaXMgdmVyc2lvbiBvZiBTSEEgaW1wbGVtZW50cyBhIDUxMiBiaXQgaGFzaCB3aXRoIDI1NiBiaXRzIG9mCiAJICBzZWN1cml0eSBhZ2FpbnN0IGNvbGxpc2lvbiBhdHRhY2tzLgogCiAJICBUaGlzIGNvZGUgYWxzbyBpbmNsdWRlcyBTSEEtMzg0LCBhIDM4NCBiaXQgaGFzaCB3aXRoIDE5MiBiaXRzCiAJICBvZiBzZWN1cml0eSBhZ2FpbnN0IGNvbGxpc2lvbiBhdHRhY2tzLgogCi1jb25maWcgQ1JZUFRPX1dQNTEyCi0JdHJpc3RhdGUgIldoaXJscG9vbCBkaWdlc3QgYWxnb3JpdGhtcyIKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotCWhlbHAKLQkgIFdoaXJscG9vbCBoYXNoIGFsZ29yaXRobSA1MTIsIDM4NCBhbmQgMjU2LWJpdCBoYXNoZXMKLQotCSAgV2hpcmxwb29sLTUxMiBpcyBwYXJ0IG9mIHRoZSBORVNTSUUgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzLgotCSAgV2hpcmxwb29sIHdpbGwgYmUgcGFydCBvZiB0aGUgSVNPL0lFQyAxMDExOC0zOjIwMDMoRSkgc3RhbmRhcmQKLQotCSAgU2VlIGFsc286Ci0JICA8aHR0cDovL3BsYW5ldGEudGVycmEuY29tLmJyL2luZm9ybWF0aWNhL3BhdWxvYmFycmV0by9XaGlybHBvb2xQYWdlLmh0bWw+Ci0KIGNvbmZpZyBDUllQVE9fVEdSMTkyCiAJdHJpc3RhdGUgIlRpZ2VyIGRpZ2VzdCBhbGdvcml0aG1zIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCkBAIC0xNDQsMjA4ICsyODQsMzcgQEAKIAkgIFNlZSBhbHNvOgogCSAgPGh0dHA6Ly93d3cuY3MudGVjaG5pb24uYWMuaWwvfmJpaGFtL1JlcG9ydHMvVGlnZXIvPi4KIAotY29uZmlnIENSWVBUT19HRjEyOE1VTAotCXRyaXN0YXRlICJHRigyXjEyOCkgbXVsdGlwbGljYXRpb24gZnVuY3Rpb25zIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgRWZmaWNpZW50IHRhYmxlIGRyaXZlbiBpbXBsZW1lbnRhdGlvbiBvZiBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlCi0JICBmaWVsZCBHRigyXjEyOCkuICBUaGlzIGlzIG5lZWRlZCBieSBzb21lIGN5cGhlciBtb2Rlcy4gVGhpcwotCSAgb3B0aW9uIHdpbGwgYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBpZiB5b3Ugc2VsZWN0IHN1Y2ggYQotCSAgY2lwaGVyIG1vZGUuICBPbmx5IHNlbGVjdCB0aGlzIG9wdGlvbiBieSBoYW5kIGlmIHlvdSBleHBlY3QgdG8gbG9hZAotCSAgYW4gZXh0ZXJuYWwgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdGhlc2UgZnVuY3Rpb25zLgotCi1jb25maWcgQ1JZUFRPX0VDQgotCXRyaXN0YXRlICJFQ0Igc3VwcG9ydCIKLQlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgotCXNlbGVjdCBDUllQVE9fTUFOQUdFUgotCWhlbHAKLQkgIEVDQjogRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlCi0JICBUaGlzIGlzIHRoZSBzaW1wbGVzdCBibG9jayBjaXBoZXIgYWxnb3JpdGhtLiAgSXQgc2ltcGx5IGVuY3J5cHRzCi0JICB0aGUgaW5wdXQgYmxvY2sgYnkgYmxvY2suCi0KLWNvbmZpZyBDUllQVE9fQ0JDCi0JdHJpc3RhdGUgIkNCQyBzdXBwb3J0IgotCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCi0Jc2VsZWN0IENSWVBUT19NQU5BR0VSCi0JaGVscAotCSAgQ0JDOiBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZQotCSAgVGhpcyBibG9jayBjaXBoZXIgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIGZvciBJUFNlYy4KLQotY29uZmlnIENSWVBUT19QQ0JDCi0JdHJpc3RhdGUgIlBDQkMgc3VwcG9ydCIKLQlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgotCXNlbGVjdCBDUllQVE9fTUFOQUdFUgotCWhlbHAKLQkgIFBDQkM6IFByb3BhZ2F0aW5nIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlCi0JICBUaGlzIGJsb2NrIGNpcGhlciBhbGdvcml0aG0gaXMgcmVxdWlyZWQgZm9yIFJ4UlBDLgotCi1jb25maWcgQ1JZUFRPX0xSVwotCXRyaXN0YXRlICJMUlcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCi0Jc2VsZWN0IENSWVBUT19NQU5BR0VSCi0Jc2VsZWN0IENSWVBUT19HRjEyOE1VTAotCWhlbHAKLQkgIExSVzogTGlza292IFJpdmVzdCBXYWduZXIsIGEgdHdlYWthYmxlLCBub24gbWFsbGVhYmxlLCBub24gbW92YWJsZQotCSAgbmFycm93IGJsb2NrIGNpcGhlciBtb2RlIGZvciBkbS1jcnlwdC4gIFVzZSBpdCB3aXRoIGNpcGhlcgotCSAgc3BlY2lmaWNhdGlvbiBzdHJpbmcgYWVzLWxydy1iZW5iaSwgdGhlIGtleSBtdXN0IGJlIDI1NiwgMzIwIG9yIDM4NC4KLQkgIFRoZSBmaXJzdCAxMjgsIDE5MiBvciAyNTYgYml0cyBpbiB0aGUga2V5IGFyZSB1c2VkIGZvciBBRVMgYW5kIHRoZQotCSAgcmVzdCBpcyB1c2VkIHRvIHRpZSBlYWNoIGNpcGhlciBibG9jayB0byBpdHMgbG9naWNhbCBwb3NpdGlvbi4KLQotY29uZmlnIENSWVBUT19YVFMKLQl0cmlzdGF0ZSAiWFRTIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgotCXNlbGVjdCBDUllQVE9fTUFOQUdFUgotCXNlbGVjdCBDUllQVE9fR0YxMjhNVUwKLQloZWxwCi0JICBYVFM6IElFRUUxNjE5L0QxNiBuYXJyb3cgYmxvY2sgY2lwaGVyIHVzZSB3aXRoIGFlcy14dHMtcGxhaW4sCi0JICBrZXkgc2l6ZSAyNTYsIDM4NCBvciA1MTIgYml0cy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBjdXJyZW50bHkKLQkgIGNhbid0IGhhbmRsZSBhIHNlY3RvcnNpemUgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCi0KLWNvbmZpZyBDUllQVE9fQ1RSCi0JdHJpc3RhdGUgIkNUUiBzdXBwb3J0IgotCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCi0Jc2VsZWN0IENSWVBUT19TRVFJVgotCXNlbGVjdCBDUllQVE9fTUFOQUdFUgotCWhlbHAKLQkgIENUUjogQ291bnRlciBtb2RlCi0JICBUaGlzIGJsb2NrIGNpcGhlciBhbGdvcml0aG0gaXMgcmVxdWlyZWQgZm9yIElQU2VjLgotCi1jb25maWcgQ1JZUFRPX0dDTQotCXRyaXN0YXRlICJHQ00vR01BQyBzdXBwb3J0IgotCXNlbGVjdCBDUllQVE9fQ1RSCi0Jc2VsZWN0IENSWVBUT19BRUFECi0Jc2VsZWN0IENSWVBUT19HRjEyOE1VTAotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEdhbG9pcy9Db3VudGVyIE1vZGUgKEdDTSkgYW5kIEdhbG9pcyBNZXNzYWdlCi0JICBBdXRoZW50aWNhdGlvbiBDb2RlIChHTUFDKS4gUmVxdWlyZWQgZm9yIElQU2VjLgotCi1jb25maWcgQ1JZUFRPX0NDTQotCXRyaXN0YXRlICJDQ00gc3VwcG9ydCIKLQlzZWxlY3QgQ1JZUFRPX0NUUgotCXNlbGVjdCBDUllQVE9fQUVBRAotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIENvdW50ZXIgd2l0aCBDQkMgTUFDLiBSZXF1aXJlZCBmb3IgSVBzZWMuCi0KLWNvbmZpZyBDUllQVE9fQ1JZUFRECi0JdHJpc3RhdGUgIlNvZnR3YXJlIGFzeW5jIGNyeXB0byBkYWVtb24iCi0Jc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKLQlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKLQloZWxwCi0JICBUaGlzIGlzIGEgZ2VuZXJpYyBzb2Z0d2FyZSBhc3luY2hyb25vdXMgY3J5cHRvIGRhZW1vbiB0aGF0Ci0JICBjb252ZXJ0cyBhbiBhcmJpdHJhcnkgc3luY2hyb25vdXMgc29mdHdhcmUgY3J5cHRvIGFsZ29yaXRobQotCSAgaW50byBhbiBhc3luY2hyb25vdXMgYWxnb3JpdGhtIHRoYXQgZXhlY3V0ZXMgaW4gYSBrZXJuZWwgdGhyZWFkLgotCi1jb25maWcgQ1JZUFRPX0RFUwotCXRyaXN0YXRlICJERVMgYW5kIFRyaXBsZSBERVMgRURFIGNpcGhlciBhbGdvcml0aG1zIgorY29uZmlnIENSWVBUT19XUDUxMgorCXRyaXN0YXRlICJXaGlybHBvb2wgZGlnZXN0IGFsZ29yaXRobXMiCiAJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCi0JICBERVMgY2lwaGVyIGFsZ29yaXRobSAoRklQUyA0Ni0yKSwgYW5kIFRyaXBsZSBERVMgRURFIChGSVBTIDQ2LTMpLgorCSAgV2hpcmxwb29sIGhhc2ggYWxnb3JpdGhtIDUxMiwgMzg0IGFuZCAyNTYtYml0IGhhc2hlcwogCi1jb25maWcgQ1JZUFRPX0ZDUllQVAotCXRyaXN0YXRlICJGQ3J5cHQgY2lwaGVyIGFsZ29yaXRobSIKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCi0JaGVscAotCSAgRkNyeXB0IGFsZ29yaXRobSB1c2VkIGJ5IFJ4UlBDLgotCi1jb25maWcgQ1JZUFRPX0JMT1dGSVNICi0JdHJpc3RhdGUgIkJsb3dmaXNoIGNpcGhlciBhbGdvcml0aG0iCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKLQloZWxwCi0JICBCbG93ZmlzaCBjaXBoZXIgYWxnb3JpdGhtLCBieSBCcnVjZSBTY2huZWllci4KLQkgIAotCSAgVGhpcyBpcyBhIHZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVyIHdoaWNoIGNhbiB1c2Uga2V5cyBmcm9tIDMyCi0JICBiaXRzIHRvIDQ0OCBiaXRzIGluIGxlbmd0aC4gIEl0J3MgZmFzdCwgc2ltcGxlIGFuZCBzcGVjaWZpY2FsbHkKLQkgIGRlc2lnbmVkIGZvciB1c2Ugb24gImxhcmdlIG1pY3JvcHJvY2Vzc29ycyIuCi0JICAKLQkgIFNlZSBhbHNvOgotCSAgPGh0dHA6Ly93d3cuc2NobmVpZXIuY29tL2Jsb3dmaXNoLmh0bWw+Ci0KLWNvbmZpZyBDUllQVE9fVFdPRklTSAotCXRyaXN0YXRlICJUd29maXNoIGNpcGhlciBhbGdvcml0aG0iCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKLQlzZWxlY3QgQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OCi0JaGVscAotCSAgVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtLgotCSAgCi0JICBUd29maXNoIHdhcyBzdWJtaXR0ZWQgYXMgYW4gQUVTIChBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkKQotCSAgY2FuZGlkYXRlIGNpcGhlciBieSByZXNlYXJjaGVycyBhdCBDb3VudGVyUGFuZSBTeXN0ZW1zLiAgSXQgaXMgYQotCSAgMTYgcm91bmQgYmxvY2sgY2lwaGVyIHN1cHBvcnRpbmcga2V5IHNpemVzIG9mIDEyOCwgMTkyLCBhbmQgMjU2Ci0JICBiaXRzLgotCSAgCi0JICBTZWUgYWxzbzoKLQkgIDxodHRwOi8vd3d3LnNjaG5laWVyLmNvbS90d29maXNoLmh0bWw+Ci0KLWNvbmZpZyBDUllQVE9fVFdPRklTSF9DT01NT04KLQl0cmlzdGF0ZQotCWhlbHAKLQkgIENvbW1vbiBwYXJ0cyBvZiB0aGUgVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtIHNoYXJlZCBieSB0aGUKLQkgIGdlbmVyaWMgYyBhbmQgdGhlIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbnMuCi0KLWNvbmZpZyBDUllQVE9fVFdPRklTSF81ODYKLQl0cmlzdGF0ZSAiVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtcyAoaTU4NikiCi0JZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpICYmICE2NEJJVAotCXNlbGVjdCBDUllQVE9fQUxHQVBJCi0Jc2VsZWN0IENSWVBUT19UV09GSVNIX0NPTU1PTgotCWhlbHAKLQkgIFR3b2Zpc2ggY2lwaGVyIGFsZ29yaXRobS4KLQotCSAgVHdvZmlzaCB3YXMgc3VibWl0dGVkIGFzIGFuIEFFUyAoQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCkKLQkgIGNhbmRpZGF0ZSBjaXBoZXIgYnkgcmVzZWFyY2hlcnMgYXQgQ291bnRlclBhbmUgU3lzdGVtcy4gIEl0IGlzIGEKLQkgIDE2IHJvdW5kIGJsb2NrIGNpcGhlciBzdXBwb3J0aW5nIGtleSBzaXplcyBvZiAxMjgsIDE5MiwgYW5kIDI1NgotCSAgYml0cy4KKwkgIFdoaXJscG9vbC01MTIgaXMgcGFydCBvZiB0aGUgTkVTU0lFIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcy4KKwkgIFdoaXJscG9vbCB3aWxsIGJlIHBhcnQgb2YgdGhlIElTTy9JRUMgMTAxMTgtMzoyMDAzKEUpIHN0YW5kYXJkCiAKIAkgIFNlZSBhbHNvOgotCSAgPGh0dHA6Ly93d3cuc2NobmVpZXIuY29tL3R3b2Zpc2guaHRtbD4KKwkgIDxodHRwOi8vcGxhbmV0YS50ZXJyYS5jb20uYnIvaW5mb3JtYXRpY2EvcGF1bG9iYXJyZXRvL1doaXJscG9vbFBhZ2UuaHRtbD4KIAotY29uZmlnIENSWVBUT19UV09GSVNIX1g4Nl82NAotCXRyaXN0YXRlICJUd29maXNoIGNpcGhlciBhbGdvcml0aG0gKHg4Nl82NCkiCi0JZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpICYmIDY0QklUCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKLQlzZWxlY3QgQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OCi0JaGVscAotCSAgVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtICh4ODZfNjQpLgotCi0JICBUd29maXNoIHdhcyBzdWJtaXR0ZWQgYXMgYW4gQUVTIChBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkKQotCSAgY2FuZGlkYXRlIGNpcGhlciBieSByZXNlYXJjaGVycyBhdCBDb3VudGVyUGFuZSBTeXN0ZW1zLiAgSXQgaXMgYQotCSAgMTYgcm91bmQgYmxvY2sgY2lwaGVyIHN1cHBvcnRpbmcga2V5IHNpemVzIG9mIDEyOCwgMTkyLCBhbmQgMjU2Ci0JICBiaXRzLgotCi0JICBTZWUgYWxzbzoKLQkgIDxodHRwOi8vd3d3LnNjaG5laWVyLmNvbS90d29maXNoLmh0bWw+Ci0KLWNvbmZpZyBDUllQVE9fU0VSUEVOVAotCXRyaXN0YXRlICJTZXJwZW50IGNpcGhlciBhbGdvcml0aG0iCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKLQloZWxwCi0JICBTZXJwZW50IGNpcGhlciBhbGdvcml0aG0sIGJ5IEFuZGVyc29uLCBCaWhhbSAmIEtudWRzZW4uCi0KLQkgIEtleXMgYXJlIGFsbG93ZWQgdG8gYmUgZnJvbSAwIHRvIDI1NiBiaXRzIGluIGxlbmd0aCwgaW4gc3RlcHMKLQkgIG9mIDggYml0cy4gIEFsc28gaW5jbHVkZXMgdGhlICdUbmVwcmVzJyBhbGdvcml0aG0sIGEgcmV2ZXJzZWQKLQkgIHZhcmlhbnQgb2YgU2VycGVudCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBrZXJuZWxpLm9yZyBjb2RlLgotCi0JICBTZWUgYWxzbzoKLQkgIDxodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+cmphMTQvc2VycGVudC5odG1sPgorY29tbWVudCAiQ2lwaGVycyIKIAogY29uZmlnIENSWVBUT19BRVMKIAl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAotCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbCAKKwkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwKIAkgIGFsZ29yaXRobS4KIAogCSAgUmlqbmRhZWwgYXBwZWFycyB0byBiZSBjb25zaXN0ZW50bHkgYSB2ZXJ5IGdvb2QgcGVyZm9ybWVyIGluCi0JICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZyAKLQkgIGVudmlyb25tZW50cyByZWdhcmRsZXNzIG9mIGl0cyB1c2UgaW4gZmVlZGJhY2sgb3Igbm9uLWZlZWRiYWNrIAotCSAgbW9kZXMuIEl0cyBrZXkgc2V0dXAgdGltZSBpcyBleGNlbGxlbnQsIGFuZCBpdHMga2V5IGFnaWxpdHkgaXMgCi0JICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwgCi0JICBzdWl0ZWQgZm9yIHJlc3RyaWN0ZWQtc3BhY2UgZW52aXJvbm1lbnRzLCBpbiB3aGljaCBpdCBhbHNvIAotCSAgZGVtb25zdHJhdGVzIGV4Y2VsbGVudCBwZXJmb3JtYW5jZS4gUmlqbmRhZWwncyBvcGVyYXRpb25zIGFyZSAKLQkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4JCisJICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZworCSAgZW52aXJvbm1lbnRzIHJlZ2FyZGxlc3Mgb2YgaXRzIHVzZSBpbiBmZWVkYmFjayBvciBub24tZmVlZGJhY2sKKwkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzCisJICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwKKwkgIHN1aXRlZCBmb3IgcmVzdHJpY3RlZC1zcGFjZSBlbnZpcm9ubWVudHMsIGluIHdoaWNoIGl0IGFsc28KKwkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUKKwkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4KIAotCSAgVGhlIEFFUyBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMJICAKKwkgIFRoZSBBRVMgc3BlY2lmaWVzIHRocmVlIGtleSBzaXplczogMTI4LCAxOTIgYW5kIDI1NiBiaXRzCiAKIAkgIFNlZSA8aHR0cDovL2NzcmMubmlzdC5nb3YvQ3J5cHRvVG9vbGtpdC9hZXMvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIApAQCAtMzU1LDE5ICszMjQsMTkgQEAKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCXNlbGVjdCBDUllQVE9fQUVTCiAJaGVscAotCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbCAKKwkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwKIAkgIGFsZ29yaXRobS4KIAogCSAgUmlqbmRhZWwgYXBwZWFycyB0byBiZSBjb25zaXN0ZW50bHkgYSB2ZXJ5IGdvb2QgcGVyZm9ybWVyIGluCi0JICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZyAKLQkgIGVudmlyb25tZW50cyByZWdhcmRsZXNzIG9mIGl0cyB1c2UgaW4gZmVlZGJhY2sgb3Igbm9uLWZlZWRiYWNrIAotCSAgbW9kZXMuIEl0cyBrZXkgc2V0dXAgdGltZSBpcyBleGNlbGxlbnQsIGFuZCBpdHMga2V5IGFnaWxpdHkgaXMgCi0JICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwgCi0JICBzdWl0ZWQgZm9yIHJlc3RyaWN0ZWQtc3BhY2UgZW52aXJvbm1lbnRzLCBpbiB3aGljaCBpdCBhbHNvIAotCSAgZGVtb25zdHJhdGVzIGV4Y2VsbGVudCBwZXJmb3JtYW5jZS4gUmlqbmRhZWwncyBvcGVyYXRpb25zIGFyZSAKLQkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4JCisJICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZworCSAgZW52aXJvbm1lbnRzIHJlZ2FyZGxlc3Mgb2YgaXRzIHVzZSBpbiBmZWVkYmFjayBvciBub24tZmVlZGJhY2sKKwkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzCisJICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwKKwkgIHN1aXRlZCBmb3IgcmVzdHJpY3RlZC1zcGFjZSBlbnZpcm9ubWVudHMsIGluIHdoaWNoIGl0IGFsc28KKwkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUKKwkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4KIAotCSAgVGhlIEFFUyBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMJICAKKwkgIFRoZSBBRVMgc3BlY2lmaWVzIHRocmVlIGtleSBzaXplczogMTI4LCAxOTIgYW5kIDI1NiBiaXRzCiAKIAkgIFNlZSA8aHR0cDovL2NzcmMubmlzdC5nb3YvZW5jcnlwdGlvbi9hZXMvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIApAQCAtMzc3LDIyICszNDYsNzUgQEAKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCXNlbGVjdCBDUllQVE9fQUVTCiAJaGVscAotCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbCAKKwkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwKIAkgIGFsZ29yaXRobS4KIAogCSAgUmlqbmRhZWwgYXBwZWFycyB0byBiZSBjb25zaXN0ZW50bHkgYSB2ZXJ5IGdvb2QgcGVyZm9ybWVyIGluCi0JICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZyAKLQkgIGVudmlyb25tZW50cyByZWdhcmRsZXNzIG9mIGl0cyB1c2UgaW4gZmVlZGJhY2sgb3Igbm9uLWZlZWRiYWNrIAotCSAgbW9kZXMuIEl0cyBrZXkgc2V0dXAgdGltZSBpcyBleGNlbGxlbnQsIGFuZCBpdHMga2V5IGFnaWxpdHkgaXMgCi0JICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwgCi0JICBzdWl0ZWQgZm9yIHJlc3RyaWN0ZWQtc3BhY2UgZW52aXJvbm1lbnRzLCBpbiB3aGljaCBpdCBhbHNvIAotCSAgZGVtb25zdHJhdGVzIGV4Y2VsbGVudCBwZXJmb3JtYW5jZS4gUmlqbmRhZWwncyBvcGVyYXRpb25zIGFyZSAKLQkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4JCisJICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZworCSAgZW52aXJvbm1lbnRzIHJlZ2FyZGxlc3Mgb2YgaXRzIHVzZSBpbiBmZWVkYmFjayBvciBub24tZmVlZGJhY2sKKwkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzCisJICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwKKwkgIHN1aXRlZCBmb3IgcmVzdHJpY3RlZC1zcGFjZSBlbnZpcm9ubWVudHMsIGluIHdoaWNoIGl0IGFsc28KKwkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUKKwkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4KIAotCSAgVGhlIEFFUyBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMJICAKKwkgIFRoZSBBRVMgc3BlY2lmaWVzIHRocmVlIGtleSBzaXplczogMTI4LCAxOTIgYW5kIDI1NiBiaXRzCiAKIAkgIFNlZSA8aHR0cDovL2NzcmMubmlzdC5nb3YvZW5jcnlwdGlvbi9hZXMvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorY29uZmlnIENSWVBUT19BTlVCSVMKKwl0cmlzdGF0ZSAiQW51YmlzIGNpcGhlciBhbGdvcml0aG0iCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwloZWxwCisJICBBbnViaXMgY2lwaGVyIGFsZ29yaXRobS4KKworCSAgQW51YmlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb20KKwkgIDEyOCBiaXRzIHRvIDMyMCBiaXRzIGluIGxlbmd0aC4gIEl0IHdhcyBldmFsdWF0ZWQgYXMgYSBlbnRyYW50CisJICBpbiB0aGUgTkVTU0lFIGNvbXBldGl0aW9uLgorCisJICBTZWUgYWxzbzoKKwkgIDxodHRwczovL3d3dy5jb3NpYy5lc2F0Lmt1bGV1dmVuLmFjLmJlL25lc3NpZS9yZXBvcnRzLz4KKwkgIDxodHRwOi8vcGxhbmV0YS50ZXJyYS5jb20uYnIvaW5mb3JtYXRpY2EvcGF1bG9iYXJyZXRvL0FudWJpc1BhZ2UuaHRtbD4KKworY29uZmlnIENSWVBUT19BUkM0CisJdHJpc3RhdGUgIkFSQzQgY2lwaGVyIGFsZ29yaXRobSIKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCWhlbHAKKwkgIEFSQzQgY2lwaGVyIGFsZ29yaXRobS4KKworCSAgQVJDNCBpcyBhIHN0cmVhbSBjaXBoZXIgdXNpbmcga2V5cyByYW5naW5nIGZyb20gOCBiaXRzIHRvIDIwNDgKKwkgIGJpdHMgaW4gbGVuZ3RoLiAgVGhpcyBhbGdvcml0aG0gaXMgcmVxdWlyZWQgZm9yIGRyaXZlci1iYXNlZAorCSAgV0VQLCBidXQgaXQgc2hvdWxkIG5vdCBiZSBmb3Igb3RoZXIgcHVycG9zZXMgYmVjYXVzZSBvZiB0aGUKKwkgIHdlYWtuZXNzIG9mIHRoZSBhbGdvcml0aG0uCisKK2NvbmZpZyBDUllQVE9fQkxPV0ZJU0gKKwl0cmlzdGF0ZSAiQmxvd2Zpc2ggY2lwaGVyIGFsZ29yaXRobSIKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCWhlbHAKKwkgIEJsb3dmaXNoIGNpcGhlciBhbGdvcml0aG0sIGJ5IEJydWNlIFNjaG5laWVyLgorCisJICBUaGlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb20gMzIKKwkgIGJpdHMgdG8gNDQ4IGJpdHMgaW4gbGVuZ3RoLiAgSXQncyBmYXN0LCBzaW1wbGUgYW5kIHNwZWNpZmljYWxseQorCSAgZGVzaWduZWQgZm9yIHVzZSBvbiAibGFyZ2UgbWljcm9wcm9jZXNzb3JzIi4KKworCSAgU2VlIGFsc286CisJICA8aHR0cDovL3d3dy5zY2huZWllci5jb20vYmxvd2Zpc2guaHRtbD4KKworY29uZmlnIENSWVBUT19DQU1FTExJQQorCXRyaXN0YXRlICJDYW1lbGxpYSBjaXBoZXIgYWxnb3JpdGhtcyIKKwlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJaGVscAorCSAgQ2FtZWxsaWEgY2lwaGVyIGFsZ29yaXRobXMgbW9kdWxlLgorCisJICBDYW1lbGxpYSBpcyBhIHN5bW1ldHJpYyBrZXkgYmxvY2sgY2lwaGVyIGRldmVsb3BlZCBqb2ludGx5CisJICBhdCBOVFQgYW5kIE1pdHN1YmlzaGkgRWxlY3RyaWMgQ29ycG9yYXRpb24uCisKKwkgIFRoZSBDYW1lbGxpYSBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMuCisKKwkgIFNlZSBhbHNvOgorCSAgPGh0dHBzOi8vaW5mby5pc2wubnR0LmNvLmpwL2NyeXB0L2VuZy9jYW1lbGxpYS9pbmRleF9zLmh0bWw+CisKIGNvbmZpZyBDUllQVE9fQ0FTVDUKIAl0cmlzdGF0ZSAiQ0FTVDUgKENBU1QtMTI4KSBjaXBoZXIgYWxnb3JpdGhtIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCkBAIC00MDcsMzMgKzQyOSwxOCBAQAogCSAgVGhlIENBU1Q2IGVuY3J5cHRpb24gYWxnb3JpdGhtIChzeW5vbnltb3VzIHdpdGggQ0FTVC0yNTYpIGlzCiAJICBkZXNjcmliZWQgaW4gUkZDMjYxMi4KIAotY29uZmlnIENSWVBUT19URUEKLQl0cmlzdGF0ZSAiVEVBLCBYVEVBIGFuZCBYRVRBIGNpcGhlciBhbGdvcml0aG1zIgorY29uZmlnIENSWVBUT19ERVMKKwl0cmlzdGF0ZSAiREVTIGFuZCBUcmlwbGUgREVTIEVERSBjaXBoZXIgYWxnb3JpdGhtcyIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKLQkgIFRFQSBjaXBoZXIgYWxnb3JpdGhtLgorCSAgREVTIGNpcGhlciBhbGdvcml0aG0gKEZJUFMgNDYtMiksIGFuZCBUcmlwbGUgREVTIEVERSAoRklQUyA0Ni0zKS4KIAotCSAgVGlueSBFbmNyeXB0aW9uIEFsZ29yaXRobSBpcyBhIHNpbXBsZSBjaXBoZXIgdGhhdCB1c2VzCi0JICBtYW55IHJvdW5kcyBmb3Igc2VjdXJpdHkuICBJdCBpcyB2ZXJ5IGZhc3QgYW5kIHVzZXMKLQkgIGxpdHRsZSBtZW1vcnkuCi0KLQkgIFh0ZW5kZW5kIFRpbnkgRW5jcnlwdGlvbiBBbGdvcml0aG0gaXMgYSBtb2RpZmljYXRpb24gdG8KLQkgIHRoZSBURUEgYWxnb3JpdGhtIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwga2V5IHdlYWtuZXNzCi0JICBpbiB0aGUgVEVBIGFsZ29yaXRobS4KLQotCSAgWHRlbmRlbmQgRW5jcnlwdGlvbiBUaW55IEFsZ29yaXRobSBpcyBhIG1pcy1pbXBsZW1lbnRhdGlvbiAKLQkgIG9mIHRoZSBYVEVBIGFsZ29yaXRobSBmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy4KLQotY29uZmlnIENSWVBUT19BUkM0Ci0JdHJpc3RhdGUgIkFSQzQgY2lwaGVyIGFsZ29yaXRobSIKK2NvbmZpZyBDUllQVE9fRkNSWVBUCisJdHJpc3RhdGUgIkZDcnlwdCBjaXBoZXIgYWxnb3JpdGhtIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKIAloZWxwCi0JICBBUkM0IGNpcGhlciBhbGdvcml0aG0uCi0KLQkgIEFSQzQgaXMgYSBzdHJlYW0gY2lwaGVyIHVzaW5nIGtleXMgcmFuZ2luZyBmcm9tIDggYml0cyB0byAyMDQ4Ci0JICBiaXRzIGluIGxlbmd0aC4gIFRoaXMgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIGZvciBkcml2ZXItYmFzZWQgCi0JICBXRVAsIGJ1dCBpdCBzaG91bGQgbm90IGJlIGZvciBvdGhlciBwdXJwb3NlcyBiZWNhdXNlIG9mIHRoZQotCSAgd2Vha25lc3Mgb2YgdGhlIGFsZ29yaXRobS4KKwkgIEZDcnlwdCBhbGdvcml0aG0gdXNlZCBieSBSeFJQQy4KIAogY29uZmlnIENSWVBUT19LSEFaQUQKIAl0cmlzdGF0ZSAiS2hhemFkIGNpcGhlciBhbGdvcml0aG0iCkBAIC00NDgsMzQgKzQ1NSw2IEBACiAJICBTZWUgYWxzbzoKIAkgIDxodHRwOi8vcGxhbmV0YS50ZXJyYS5jb20uYnIvaW5mb3JtYXRpY2EvcGF1bG9iYXJyZXRvL0toYXphZFBhZ2UuaHRtbD4KIAotY29uZmlnIENSWVBUT19BTlVCSVMKLQl0cmlzdGF0ZSAiQW51YmlzIGNpcGhlciBhbGdvcml0aG0iCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKLQloZWxwCi0JICBBbnViaXMgY2lwaGVyIGFsZ29yaXRobS4KLQotCSAgQW51YmlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb20gCi0JICAxMjggYml0cyB0byAzMjAgYml0cyBpbiBsZW5ndGguICBJdCB3YXMgZXZhbHVhdGVkIGFzIGEgZW50cmFudAotCSAgaW4gdGhlIE5FU1NJRSBjb21wZXRpdGlvbi4KLQkgIAotCSAgU2VlIGFsc286Ci0JICA8aHR0cHM6Ly93d3cuY29zaWMuZXNhdC5rdWxldXZlbi5hYy5iZS9uZXNzaWUvcmVwb3J0cy8+Ci0JICA8aHR0cDovL3BsYW5ldGEudGVycmEuY29tLmJyL2luZm9ybWF0aWNhL3BhdWxvYmFycmV0by9BbnViaXNQYWdlLmh0bWw+Ci0KLWNvbmZpZyBDUllQVE9fU0VFRAotCXRyaXN0YXRlICJTRUVEIGNpcGhlciBhbGdvcml0aG0iCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKLQloZWxwCi0JICBTRUVEIGNpcGhlciBhbGdvcml0aG0gKFJGQzQyNjkpLgotCi0JICBTRUVEIGlzIGEgMTI4LWJpdCBzeW1tZXRyaWMga2V5IGJsb2NrIGNpcGhlciB0aGF0IGhhcyBiZWVuCi0JICBkZXZlbG9wZWQgYnkgS0lTQSAoS29yZWEgSW5mb3JtYXRpb24gU2VjdXJpdHkgQWdlbmN5KSBhcyBhCi0JICBuYXRpb25hbCBzdGFuZGFyZCBlbmNyeXB0aW9uIGFsZ29yaXRobSBvZiB0aGUgUmVwdWJsaWMgb2YgS29yZWEuCi0JICBJdCBpcyBhIDE2IHJvdW5kIGJsb2NrIGNpcGhlciB3aXRoIHRoZSBrZXkgc2l6ZSBvZiAxMjggYml0LgotCi0JICBTZWUgYWxzbzoKLQkgIDxodHRwOi8vd3d3Lmtpc2Eub3Iua3Iva2lzYS9zZWVkL2pzcC9zZWVkX2VuZy5qc3A+Ci0KIGNvbmZpZyBDUllQVE9fU0FMU0EyMAogCXRyaXN0YXRlICJTYWxzYTIwIHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCkBAIC01MTcsNiArNDk2LDEwNSBAQAogCSAgVGhlIFNhbHNhMjAgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0gaXMgZGVzaWduZWQgYnkgRGFuaWVsIEouCiAJICBCZXJuc3RlaW4gPGRqYkBjci55cC50bz4uIFNlZSA8aHR0cDovL2NyLnlwLnRvL3NudWZmbGUuaHRtbD4KIAorY29uZmlnIENSWVBUT19TRUVECisJdHJpc3RhdGUgIlNFRUQgY2lwaGVyIGFsZ29yaXRobSIKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCWhlbHAKKwkgIFNFRUQgY2lwaGVyIGFsZ29yaXRobSAoUkZDNDI2OSkuCisKKwkgIFNFRUQgaXMgYSAxMjgtYml0IHN5bW1ldHJpYyBrZXkgYmxvY2sgY2lwaGVyIHRoYXQgaGFzIGJlZW4KKwkgIGRldmVsb3BlZCBieSBLSVNBIChLb3JlYSBJbmZvcm1hdGlvbiBTZWN1cml0eSBBZ2VuY3kpIGFzIGEKKwkgIG5hdGlvbmFsIHN0YW5kYXJkIGVuY3J5cHRpb24gYWxnb3JpdGhtIG9mIHRoZSBSZXB1YmxpYyBvZiBLb3JlYS4KKwkgIEl0IGlzIGEgMTYgcm91bmQgYmxvY2sgY2lwaGVyIHdpdGggdGhlIGtleSBzaXplIG9mIDEyOCBiaXQuCisKKwkgIFNlZSBhbHNvOgorCSAgPGh0dHA6Ly93d3cua2lzYS5vci5rci9raXNhL3NlZWQvanNwL3NlZWRfZW5nLmpzcD4KKworY29uZmlnIENSWVBUT19TRVJQRU5UCisJdHJpc3RhdGUgIlNlcnBlbnQgY2lwaGVyIGFsZ29yaXRobSIKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCWhlbHAKKwkgIFNlcnBlbnQgY2lwaGVyIGFsZ29yaXRobSwgYnkgQW5kZXJzb24sIEJpaGFtICYgS251ZHNlbi4KKworCSAgS2V5cyBhcmUgYWxsb3dlZCB0byBiZSBmcm9tIDAgdG8gMjU2IGJpdHMgaW4gbGVuZ3RoLCBpbiBzdGVwcworCSAgb2YgOCBiaXRzLiAgQWxzbyBpbmNsdWRlcyB0aGUgJ1RuZXByZXMnIGFsZ29yaXRobSwgYSByZXZlcnNlZAorCSAgdmFyaWFudCBvZiBTZXJwZW50IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGtlcm5lbGkub3JnIGNvZGUuCisKKwkgIFNlZSBhbHNvOgorCSAgPGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35yamExNC9zZXJwZW50Lmh0bWw+CisKK2NvbmZpZyBDUllQVE9fVEVBCisJdHJpc3RhdGUgIlRFQSwgWFRFQSBhbmQgWEVUQSBjaXBoZXIgYWxnb3JpdGhtcyIKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCWhlbHAKKwkgIFRFQSBjaXBoZXIgYWxnb3JpdGhtLgorCisJICBUaW55IEVuY3J5cHRpb24gQWxnb3JpdGhtIGlzIGEgc2ltcGxlIGNpcGhlciB0aGF0IHVzZXMKKwkgIG1hbnkgcm91bmRzIGZvciBzZWN1cml0eS4gIEl0IGlzIHZlcnkgZmFzdCBhbmQgdXNlcworCSAgbGl0dGxlIG1lbW9yeS4KKworCSAgWHRlbmRlbmQgVGlueSBFbmNyeXB0aW9uIEFsZ29yaXRobSBpcyBhIG1vZGlmaWNhdGlvbiB0bworCSAgdGhlIFRFQSBhbGdvcml0aG0gdG8gYWRkcmVzcyBhIHBvdGVudGlhbCBrZXkgd2Vha25lc3MKKwkgIGluIHRoZSBURUEgYWxnb3JpdGhtLgorCisJICBYdGVuZGVuZCBFbmNyeXB0aW9uIFRpbnkgQWxnb3JpdGhtIGlzIGEgbWlzLWltcGxlbWVudGF0aW9uCisJICBvZiB0aGUgWFRFQSBhbGdvcml0aG0gZm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXMuCisKK2NvbmZpZyBDUllQVE9fVFdPRklTSAorCXRyaXN0YXRlICJUd29maXNoIGNpcGhlciBhbGdvcml0aG0iCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OCisJaGVscAorCSAgVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtLgorCisJICBUd29maXNoIHdhcyBzdWJtaXR0ZWQgYXMgYW4gQUVTIChBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkKQorCSAgY2FuZGlkYXRlIGNpcGhlciBieSByZXNlYXJjaGVycyBhdCBDb3VudGVyUGFuZSBTeXN0ZW1zLiAgSXQgaXMgYQorCSAgMTYgcm91bmQgYmxvY2sgY2lwaGVyIHN1cHBvcnRpbmcga2V5IHNpemVzIG9mIDEyOCwgMTkyLCBhbmQgMjU2CisJICBiaXRzLgorCisJICBTZWUgYWxzbzoKKwkgIDxodHRwOi8vd3d3LnNjaG5laWVyLmNvbS90d29maXNoLmh0bWw+CisKK2NvbmZpZyBDUllQVE9fVFdPRklTSF9DT01NT04KKwl0cmlzdGF0ZQorCWhlbHAKKwkgIENvbW1vbiBwYXJ0cyBvZiB0aGUgVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtIHNoYXJlZCBieSB0aGUKKwkgIGdlbmVyaWMgYyBhbmQgdGhlIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbnMuCisKK2NvbmZpZyBDUllQVE9fVFdPRklTSF81ODYKKwl0cmlzdGF0ZSAiVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtcyAoaTU4NikiCisJZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpICYmICE2NEJJVAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19UV09GSVNIX0NPTU1PTgorCWhlbHAKKwkgIFR3b2Zpc2ggY2lwaGVyIGFsZ29yaXRobS4KKworCSAgVHdvZmlzaCB3YXMgc3VibWl0dGVkIGFzIGFuIEFFUyAoQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCkKKwkgIGNhbmRpZGF0ZSBjaXBoZXIgYnkgcmVzZWFyY2hlcnMgYXQgQ291bnRlclBhbmUgU3lzdGVtcy4gIEl0IGlzIGEKKwkgIDE2IHJvdW5kIGJsb2NrIGNpcGhlciBzdXBwb3J0aW5nIGtleSBzaXplcyBvZiAxMjgsIDE5MiwgYW5kIDI1NgorCSAgYml0cy4KKworCSAgU2VlIGFsc286CisJICA8aHR0cDovL3d3dy5zY2huZWllci5jb20vdHdvZmlzaC5odG1sPgorCitjb25maWcgQ1JZUFRPX1RXT0ZJU0hfWDg2XzY0CisJdHJpc3RhdGUgIlR3b2Zpc2ggY2lwaGVyIGFsZ29yaXRobSAoeDg2XzY0KSIKKwlkZXBlbmRzIG9uIChYODYgfHwgVU1MX1g4NikgJiYgNjRCSVQKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fVFdPRklTSF9DT01NT04KKwloZWxwCisJICBUd29maXNoIGNpcGhlciBhbGdvcml0aG0gKHg4Nl82NCkuCisKKwkgIFR3b2Zpc2ggd2FzIHN1Ym1pdHRlZCBhcyBhbiBBRVMgKEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQpCisJICBjYW5kaWRhdGUgY2lwaGVyIGJ5IHJlc2VhcmNoZXJzIGF0IENvdW50ZXJQYW5lIFN5c3RlbXMuICBJdCBpcyBhCisJICAxNiByb3VuZCBibG9jayBjaXBoZXIgc3VwcG9ydGluZyBrZXkgc2l6ZXMgb2YgMTI4LCAxOTIsIGFuZCAyNTYKKwkgIGJpdHMuCisKKwkgIFNlZSBhbHNvOgorCSAgPGh0dHA6Ly93d3cuc2NobmVpZXIuY29tL3R3b2Zpc2guaHRtbD4KKworY29tbWVudCAiQ29tcHJlc3Npb24iCisKIGNvbmZpZyBDUllQVE9fREVGTEFURQogCXRyaXN0YXRlICJEZWZsYXRlIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpAQCAtNTI1LDYwICs2MDMsOSBAQAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIERlZmxhdGUgYWxnb3JpdGhtIChSRkMxOTUxKSwgc3BlY2lmaWVkIGZvciB1c2UgaW4KIAkgIElQU2VjIHdpdGggdGhlIElQQ09NUCBwcm90b2NvbCAoUkZDMzE3MywgUkZDMjM5NCkuCi0JICAKKwogCSAgWW91IHdpbGwgbW9zdCBwcm9iYWJseSB3YW50IHRoaXMgaWYgdXNpbmcgSVBTZWMuCiAKLWNvbmZpZyBDUllQVE9fTUlDSEFFTF9NSUMKLQl0cmlzdGF0ZSAiTWljaGFlbCBNSUMga2V5ZWQgZGlnZXN0IGFsZ29yaXRobSIKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotCWhlbHAKLQkgIE1pY2hhZWwgTUlDIGlzIHVzZWQgZm9yIG1lc3NhZ2UgaW50ZWdyaXR5IHByb3RlY3Rpb24gaW4gVEtJUAotCSAgKElFRUUgODAyLjExaSkuIFRoaXMgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIGZvciBUS0lQLCBidXQgaXQKLQkgIHNob3VsZCBub3QgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMgYmVjYXVzZSBvZiB0aGUgd2Vha25lc3MKLQkgIG9mIHRoZSBhbGdvcml0aG0uCi0KLWNvbmZpZyBDUllQVE9fQ1JDMzJDCi0JdHJpc3RhdGUgIkNSQzMyYyBDUkMgYWxnb3JpdGhtIgotCXNlbGVjdCBDUllQVE9fQUxHQVBJCi0Jc2VsZWN0IExJQkNSQzMyQwotCWhlbHAKLQkgIENhc3RhZ25vbGksIGV0IGFsIEN5Y2xpYyBSZWR1bmRhbmN5LUNoZWNrIEFsZ29yaXRobS4gIFVzZWQKLQkgIGJ5IGlTQ1NJIGZvciBoZWFkZXIgYW5kIGRhdGEgZGlnZXN0cyBhbmQgYnkgb3RoZXJzLgotCSAgU2VlIENhc3RhZ25vbGk5My4gIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBsaWIvbGliY3JjMzJjLgotICAgICAgICAgIE1vZHVsZSB3aWxsIGJlIGNyYzMyYy4KLQotY29uZmlnIENSWVBUT19DQU1FTExJQQotCXRyaXN0YXRlICJDYW1lbGxpYSBjaXBoZXIgYWxnb3JpdGhtcyIKLQlkZXBlbmRzIG9uIENSWVBUTwotCXNlbGVjdCBDUllQVE9fQUxHQVBJCi0JaGVscAotCSAgQ2FtZWxsaWEgY2lwaGVyIGFsZ29yaXRobXMgbW9kdWxlLgotCi0JICBDYW1lbGxpYSBpcyBhIHN5bW1ldHJpYyBrZXkgYmxvY2sgY2lwaGVyIGRldmVsb3BlZCBqb2ludGx5Ci0JICBhdCBOVFQgYW5kIE1pdHN1YmlzaGkgRWxlY3RyaWMgQ29ycG9yYXRpb24uCi0KLQkgIFRoZSBDYW1lbGxpYSBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMuCi0KLQkgIFNlZSBhbHNvOgotCSAgPGh0dHBzOi8vaW5mby5pc2wubnR0LmNvLmpwL2NyeXB0L2VuZy9jYW1lbGxpYS9pbmRleF9zLmh0bWw+Ci0KLWNvbmZpZyBDUllQVE9fVEVTVAotCXRyaXN0YXRlICJUZXN0aW5nIG1vZHVsZSIKLQlkZXBlbmRzIG9uIG0KLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotCXNlbGVjdCBDUllQVE9fQUVBRAotCWhlbHAKLQkgIFF1aWNrICYgZGlydHkgY3J5cHRvIHRlc3QgbW9kdWxlLgotCi1jb25maWcgQ1JZUFRPX0FVVEhFTkMKLQl0cmlzdGF0ZSAiQXV0aGVuYyBzdXBwb3J0IgotCXNlbGVjdCBDUllQVE9fQUVBRAotCXNlbGVjdCBDUllQVE9fTUFOQUdFUgotCXNlbGVjdCBDUllQVE9fSEFTSAotCWhlbHAKLQkgIEF1dGhlbmM6IENvbWJpbmVkIG1vZGUgd3JhcHBlciBmb3IgSVBzZWMuCi0JICBUaGlzIGlzIHJlcXVpcmVkIGZvciBJUFNlYy4KLQogY29uZmlnIENSWVBUT19MWk8KIAl0cmlzdGF0ZSAiTFpPIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCmluZGV4IDQ4Yzc1ODMuLmNhMDI0NDEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9NYWtlZmlsZQorKysgYi9jcnlwdG8vTWFrZWZpbGUKQEAgLTIsNyArMiw4IEBACiAjIENyeXB0b2dyYXBoaWMgQVBJCiAjCiAKLW9iai0kKENPTkZJR19DUllQVE8pICs9IGFwaS5vIGNpcGhlci5vIGRpZ2VzdC5vIGNvbXByZXNzLm8KK29iai0kKENPTkZJR19DUllQVE8pICs9IGNyeXB0by5vCitjcnlwdG8tb2JqcyA6PSBhcGkubyBjaXBoZXIubyBkaWdlc3QubyBjb21wcmVzcy5vCiAKIGNyeXB0b19hbGdhcGktJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBjcnlwdG9fYWxnYXBpLW9ianMgOj0gYWxnYXBpLm8gc2NhdHRlcndhbGsubyAkKGNyeXB0b19hbGdhcGkteSkKQEAgLTEyLDkgKzEzLDkgQEAKIAogY3J5cHRvX2Jsa2NpcGhlci1vYmpzIDo9IGFibGtjaXBoZXIubwogY3J5cHRvX2Jsa2NpcGhlci1vYmpzICs9IGJsa2NpcGhlci5vCitjcnlwdG9fYmxrY2lwaGVyLW9ianMgKz0gY2hhaW5pdi5vCitjcnlwdG9fYmxrY2lwaGVyLW9ianMgKz0gZXNlcWl2Lm8KIG9iai0kKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSKSArPSBjcnlwdG9fYmxrY2lwaGVyLm8KLW9iai0kKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSKSArPSBjaGFpbml2Lm8KLW9iai0kKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSKSArPSBlc2VxaXYubwogb2JqLSQoQ09ORklHX0NSWVBUT19TRVFJVikgKz0gc2VxaXYubwogCiBjcnlwdG9faGFzaC1vYmpzIDo9IGhhc2gubwpAQCAtMjgsMTMgKzI5LDE0IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX01ENSkgKz0gbWQ1Lm8KIG9iai0kKENPTkZJR19DUllQVE9fU0hBMSkgKz0gc2hhMV9nZW5lcmljLm8KIG9iai0kKENPTkZJR19DUllQVE9fU0hBMjU2KSArPSBzaGEyNTZfZ2VuZXJpYy5vCi1vYmotJChDT05GSUdfQ1JZUFRPX1NIQTUxMikgKz0gc2hhNTEyLm8KK29iai0kKENPTkZJR19DUllQVE9fU0hBNTEyKSArPSBzaGE1MTJfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1dQNTEyKSArPSB3cDUxMi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1RHUjE5MikgKz0gdGdyMTkyLm8KIG9iai0kKENPTkZJR19DUllQVE9fR0YxMjhNVUwpICs9IGdmMTI4bXVsLm8KIG9iai0kKENPTkZJR19DUllQVE9fRUNCKSArPSBlY2Iubwogb2JqLSQoQ09ORklHX0NSWVBUT19DQkMpICs9IGNiYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1BDQkMpICs9IHBjYmMubworb2JqLSQoQ09ORklHX0NSWVBUT19DVFMpICs9IGN0cy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0xSVykgKz0gbHJ3Lm8KIG9iai0kKENPTkZJR19DUllQVE9fWFRTKSArPSB4dHMubwogb2JqLSQoQ09ORklHX0NSWVBUT19DVFIpICs9IGN0ci5vCmRpZmYgLS1naXQgYS9jcnlwdG8vYWJsa2NpcGhlci5jIGIvY3J5cHRvL2FibGtjaXBoZXIuYwppbmRleCAzYmNiMDk5Li45NDE0MGIzIDEwMDY0NAotLS0gYS9jcnlwdG8vYWJsa2NpcGhlci5jCisrKyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKQEAgLTM0MSw2ICszNDEsMyBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcik7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQXN5bmNocm9ub3VzIGJsb2NrIGNoYWluaW5nIGNpcGhlciB0eXBlIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzX2dlbmVyaWMuYyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCmluZGV4IGNmMzBhZjc0Li4xMzZkYzk4IDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzX2dlbmVyaWMuYworKysgYi9jcnlwdG8vYWVzX2dlbmVyaWMuYwpAQCAtMjI5LDE4ICsyMjksMjkgQEAKIAljdHgtPmtleV9lbmNbOCAqIGkgKyAxNV0gPSB0OwkJCVwKIH0gd2hpbGUgKDApCiAKLWludCBjcnlwdG9fYWVzX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKy8qKgorICogY3J5cHRvX2Flc19leHBhbmRfa2V5IC0gRXhwYW5kcyB0aGUgQUVTIGtleSBhcyBkZXNjcmliZWQgaW4gRklQUy0xOTcKKyAqIEBjdHg6CVRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY29tcHV0ZWQga2V5IHdpbGwgYmUgc3RvcmVkLgorICogQGluX2tleToJVGhlIHN1cHBsaWVkIGtleS4KKyAqIEBrZXlfbGVuOglUaGUgbGVuZ3RoIG9mIHRoZSBzdXBwbGllZCBrZXkuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIFRoZSBmdW5jdGlvbiBmYWlscyBvbmx5IGlmIGFuIGludmFsaWQga2V5IHNpemUgKG9yCisgKiBwb2ludGVyKSBpcyBzdXBwbGllZC4KKyAqIFRoZSBleHBhbmRlZCBrZXkgc2l6ZSBpcyAyNDAgYnl0ZXMgKG1heCBvZiAxNCByb3VuZHMgd2l0aCBhIHVuaXF1ZSAxNiBieXRlcworICoga2V5IHNjaGVkdWxlIHBsdXMgYSAxNiBieXRlcyBrZXkgd2hpY2ggaXMgdXNlZCBiZWZvcmUgdGhlIGZpcnN0IHJvdW5kKS4KKyAqIFRoZSBkZWNyeXB0aW9uIGtleSBpcyBwcmVwYXJlZCBmb3IgdGhlICJFcXVpdmFsZW50IEludmVyc2UgQ2lwaGVyIiBhcworICogZGVzY3JpYmVkIGluIEZJUFMtMTk3LiBUaGUgZmlyc3Qgc2xvdCAoMTYgYnl0ZXMpIG9mIGVhY2gga2V5IChlbmMgb3IgZGVjKSBpcworICogZm9yIHRoZSBpbml0aWFsIGNvbWJpbmF0aW9uLCB0aGUgc2Vjb25kIHNsb3QgZm9yIHRoZSBmaXJzdCByb3VuZCBhbmQgc28gb24uCisgKi8KK2ludCBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCiAJCXVuc2lnbmVkIGludCBrZXlfbGVuKQogewotCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7Ci0JdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKIAl1MzIgaSwgdCwgdSwgdiwgdywgajsKIAotCWlmIChrZXlfbGVuICUgOCkgewotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CisJaWYgKGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTI4ICYmIGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTkyICYmCisJCQlrZXlfbGVuICE9IEFFU19LRVlTSVpFXzI1NikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJY3R4LT5rZXlfbGVuZ3RoID0ga2V5X2xlbjsKIApAQCAtMjUwLDIwICsyNjEsMjAgQEAKIAljdHgtPmtleV9kZWNba2V5X2xlbiArIDI3XSA9IGN0eC0+a2V5X2VuY1szXSA9IGxlMzJfdG9fY3B1KGtleVszXSk7CiAKIAlzd2l0Y2ggKGtleV9sZW4pIHsKLQljYXNlIDE2OgorCWNhc2UgQUVTX0tFWVNJWkVfMTI4OgogCQl0ID0gY3R4LT5rZXlfZW5jWzNdOwogCQlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkKIAkJCWxvb3A0KGkpOwogCQlicmVhazsKIAotCWNhc2UgMjQ6CisJY2FzZSBBRVNfS0VZU0laRV8xOTI6CiAJCWN0eC0+a2V5X2VuY1s0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7CiAJCXQgPSBjdHgtPmtleV9lbmNbNV0gPSBsZTMyX3RvX2NwdShrZXlbNV0pOwogCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQogCQkJbG9vcDYoaSk7CiAJCWJyZWFrOwogCi0JY2FzZSAzMjoKKwljYXNlIEFFU19LRVlTSVpFXzI1NjoKIAkJY3R4LT5rZXlfZW5jWzRdID0gbGUzMl90b19jcHUoa2V5WzRdKTsKIAkJY3R4LT5rZXlfZW5jWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKTsKIAkJY3R4LT5rZXlfZW5jWzZdID0gbGUzMl90b19jcHUoa2V5WzZdKTsKQEAgLTI4NCw2ICsyOTUsMzMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWVzX2V4cGFuZF9rZXkpOworCisvKioKKyAqIGNyeXB0b19hZXNfc2V0X2tleSAtIFNldCB0aGUgQUVTIGtleS4KKyAqIEB0Zm06CVRoZSAlY3J5cHRvX3RmbSB0aGF0IGlzIHVzZWQgaW4gdGhlIGNvbnRleHQuCisgKiBAaW5fa2V5OglUaGUgaW5wdXQga2V5LgorICogQGtleV9sZW46CVRoZSBzaXplIG9mIHRoZSBrZXkuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9uIGZhaWx1cmUgdGhlICVDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTiBmbGFnIGluIHRmbQorICogaXMgc2V0LiBUaGUgZnVuY3Rpb24gdXNlcyBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoKSB0byBleHBhbmQgdGhlIGtleS4KKyAqICZjcnlwdG9fYWVzX2N0eCBfbXVzdF8gYmUgdGhlIHByaXZhdGUgZGF0YSBlbWJlZGRlZCBpbiBAdGZtIHdoaWNoIGlzCisgKiByZXRyaWV2ZWQgd2l0aCBjcnlwdG9fdGZtX2N0eCgpLgorICovCitpbnQgY3J5cHRvX2Flc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCXVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOworCWludCByZXQ7CisKKwlyZXQgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKKwlyZXR1cm4gLUVJTlZBTDsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hZXNfc2V0X2tleSk7CiAKIC8qIGVuY3J5cHQgYSBibG9jayBvZiB0ZXh0ICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYW51YmlzLmMgYi9jcnlwdG8vYW51YmlzLmMKaW5kZXggNGZmMGUxZS4uZTQyYzNhOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FudWJpcy5jCisrKyBiL2NyeXB0by9hbnViaXMuYwpAQCAtNjg3LDcgKzY4Nyw3IEBACiAJLmNpYV9kZWNyeXB0CQk9CWFudWJpc19kZWNyeXB0IH0gfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYW51YmlzX21vZF9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CiAJCkBAIC02OTUsMTMgKzY5NSwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYW51YmlzX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbnViaXNfYWxnKTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KGFudWJpc19tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChhbnViaXNfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFudWJpcyBDcnlwdG9ncmFwaGljIEFsZ29yaXRobSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FwaS5jIGIvY3J5cHRvL2FwaS5jCmluZGV4IGEyNDk2ZDEuLjBhMGY0MWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcGkuYworKysgYi9jcnlwdG8vYXBpLmMKQEAgLTQ0NSwzICs0NDUsNiBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9faGFzX2FsZyk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQ3J5cHRvZ3JhcGhpYyBjb3JlIEFQSSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbWNweS5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbWNweS5jCmluZGV4IDBmNjI4MjIuLmE1ZWRhODAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19tZW1jcHkuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfbWVtY3B5LmMKQEAgLTY2LDIxICs2NiwyMSBAQAogCX0KIAogCWlmICh0eCkgewotCQlwcl9kZWJ1ZygiJXM6IChhc3luYykgbGVuOiAlenVcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwkJcHJfZGVidWcoIiVzOiAoYXN5bmMpIGxlbjogJXp1XG4iLCBfX2Z1bmNfXywgbGVuKTsKIAkJYXN5bmNfdHhfc3VibWl0KGNoYW4sIHR4LCBmbGFncywgZGVwZW5kX3R4LCBjYl9mbiwgY2JfcGFyYW0pOwogCX0gZWxzZSB7CiAJCXZvaWQgKmRlc3RfYnVmLCAqc3JjX2J1ZjsKLQkJcHJfZGVidWcoIiVzOiAoc3luYykgbGVuOiAlenVcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwkJcHJfZGVidWcoIiVzOiAoc3luYykgbGVuOiAlenVcbiIsIF9fZnVuY19fLCBsZW4pOwogCiAJCS8qIHdhaXQgZm9yIGFueSBwcmVyZXF1aXNpdGUgb3BlcmF0aW9ucyAqLwogCQlpZiAoZGVwZW5kX3R4KSB7CiAJCQkvKiBpZiBhY2sgaXMgYWxyZWFkeSBzZXQgdGhlbiB3ZSBjYW5ub3QgYmUgc3VyZQogCQkJICogd2UgYXJlIHJlZmVycmluZyB0byB0aGUgY29ycmVjdCBvcGVyYXRpb24KIAkJCSAqLwotCQkJQlVHX09OKGRlcGVuZF90eC0+YWNrKTsKKwkJCUJVR19PTihhc3luY190eF90ZXN0X2FjayhkZXBlbmRfdHgpKTsKIAkJCWlmIChkbWFfd2FpdF9mb3JfYXN5bmNfdHgoZGVwZW5kX3R4KSA9PSBETUFfRVJST1IpCiAJCQkJcGFuaWMoIiVzOiBETUFfRVJST1Igd2FpdGluZyBmb3IgZGVwZW5kX3R4XG4iLAotCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCQlfX2Z1bmNfXyk7CiAJCX0KIAogCQlkZXN0X2J1ZiA9IGttYXBfYXRvbWljKGRlc3QsIEtNX1VTRVIwKSArIGRlc3Rfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbXNldC5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbXNldC5jCmluZGV4IDA5YzBlODMuLmY1ZmYzOTA2IDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfbWVtc2V0LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX21lbXNldC5jCkBAIC02MywxMSArNjMsMTEgQEAKIAl9CiAKIAlpZiAodHgpIHsKLQkJcHJfZGVidWcoIiVzOiAoYXN5bmMpIGxlbjogJXp1XG4iLCBfX0ZVTkNUSU9OX18sIGxlbik7CisJCXByX2RlYnVnKCIlczogKGFzeW5jKSBsZW46ICV6dVxuIiwgX19mdW5jX18sIGxlbik7CiAJCWFzeW5jX3R4X3N1Ym1pdChjaGFuLCB0eCwgZmxhZ3MsIGRlcGVuZF90eCwgY2JfZm4sIGNiX3BhcmFtKTsKIAl9IGVsc2UgeyAvKiBydW4gdGhlIG1lbXNldCBzeW5jaHJvbm91c2x5ICovCiAJCXZvaWQgKmRlc3RfYnVmOwotCQlwcl9kZWJ1ZygiJXM6IChzeW5jKSBsZW46ICV6dVxuIiwgX19GVU5DVElPTl9fLCBsZW4pOworCQlwcl9kZWJ1ZygiJXM6IChzeW5jKSBsZW46ICV6dVxuIiwgX19mdW5jX18sIGxlbik7CiAKIAkJZGVzdF9idWYgPSAodm9pZCAqKSAoKChjaGFyICopIHBhZ2VfYWRkcmVzcyhkZXN0KSkgKyBvZmZzZXQpOwogCkBAIC03OSw3ICs3OSw3IEBACiAJCQlCVUdfT04oZGVwZW5kX3R4LT5hY2spOwogCQkJaWYgKGRtYV93YWl0X2Zvcl9hc3luY190eChkZXBlbmRfdHgpID09IERNQV9FUlJPUikKIAkJCQlwYW5pYygiJXM6IERNQV9FUlJPUiB3YWl0aW5nIGZvciBkZXBlbmRfdHhcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCV9fZnVuY19fKTsKIAkJfQogCiAJCW1lbXNldChkZXN0X2J1ZiwgdmFsLCBsZW4pOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwppbmRleCA1NjI4ODIxOC4uYzZlNzcyZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKQEAgLTg5LDEzICs4OSwxOSBAQAogCQlpdGVyID0gdHg7CiAKIAkJLyogZmluZCB0aGUgcm9vdCBvZiB0aGUgdW5zdWJtaXR0ZWQgZGVwZW5kZW5jeSBjaGFpbiAqLwotCQl3aGlsZSAoaXRlci0+Y29va2llID09IC1FQlVTWSkgeworCQlkbyB7CiAJCQlwYXJlbnQgPSBpdGVyLT5wYXJlbnQ7Ci0JCQlpZiAocGFyZW50ICYmIHBhcmVudC0+Y29va2llID09IC1FQlVTWSkKLQkJCQlpdGVyID0gaXRlci0+cGFyZW50OwotCQkJZWxzZQorCQkJaWYgKCFwYXJlbnQpCiAJCQkJYnJlYWs7Ci0JCX0KKwkJCWVsc2UKKwkJCQlpdGVyID0gcGFyZW50OworCQl9IHdoaWxlIChwYXJlbnQpOworCisJCS8qIHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGZvciAtPnBhcmVudCA9PSBOVUxMIGFuZAorCQkgKiAtPmNvb2tpZSA9PSAtRUJVU1kKKwkJICovCisJCXdoaWxlIChpdGVyLT5jb29raWUgPT0gLUVCVVNZKQorCQkJY3B1X3JlbGF4KCk7CiAKIAkJc3RhdHVzID0gZG1hX3N5bmNfd2FpdChpdGVyLT5jaGFuLCBpdGVyLT5jb29raWUpOwogCX0gd2hpbGUgKHN0YXR1cyA9PSBETUFfSU5fUFJPR1JFU1MgfHwgKGl0ZXIgIT0gdHgpKTsKQEAgLTExMSwyNCArMTE3LDMzIEBACiB2b2lkCiBhc3luY190eF9ydW5fZGVwZW5kZW5jaWVzKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7Ci0Jc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXBfdHgsICpfZGVwX3R4OwotCXN0cnVjdCBkbWFfZGV2aWNlICpkZXY7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpuZXh0ID0gdHgtPm5leHQ7CiAJc3RydWN0IGRtYV9jaGFuICpjaGFuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlcF90eCwgX2RlcF90eCwgJnR4LT5kZXBlbmRfbGlzdCwKLQkJZGVwZW5kX25vZGUpIHsKLQkJY2hhbiA9IGRlcF90eC0+Y2hhbjsKLQkJZGV2ID0gY2hhbi0+ZGV2aWNlOwotCQkvKiB3ZSBjYW4ndCBkZXBlbmQgb24gb3Vyc2VsdmVzICovCi0JCUJVR19PTihjaGFuID09IHR4LT5jaGFuKTsKLQkJbGlzdF9kZWwoJmRlcF90eC0+ZGVwZW5kX25vZGUpOwotCQl0eC0+dHhfc3VibWl0KGRlcF90eCk7CisJaWYgKCFuZXh0KQorCQlyZXR1cm47CiAKLQkJLyogd2UgbmVlZCB0byBwb2tlIHRoZSBlbmdpbmUgYXMgY2xpZW50IGNvZGUgZG9lcyBub3QKLQkJICoga25vdyBhYm91dCBkZXBlbmRlbmN5IHN1Ym1pc3Npb24gZXZlbnRzCi0JCSAqLwotCQlkZXYtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCXR4LT5uZXh0ID0gTlVMTDsKKwljaGFuID0gbmV4dC0+Y2hhbjsKKworCS8qIGtlZXAgc3VibWl0dGluZyB1cCB1bnRpbCBhIGNoYW5uZWwgc3dpdGNoIGlzIGRldGVjdGVkCisJICogaW4gdGhhdCBjYXNlIHdlIHdpbGwgYmUgY2FsbGVkIGFnYWluIGFzIGEgcmVzdWx0IG9mCisJICogcHJvY2Vzc2luZyB0aGUgaW50ZXJydXB0IGZyb20gYXN5bmNfdHhfY2hhbm5lbF9zd2l0Y2gKKwkgKi8KKwl3aGlsZSAobmV4dCAmJiBuZXh0LT5jaGFuID09IGNoYW4pIHsKKwkJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpfbmV4dDsKKworCQlzcGluX2xvY2tfYmgoJm5leHQtPmxvY2spOworCQluZXh0LT5wYXJlbnQgPSBOVUxMOworCQlfbmV4dCA9IG5leHQtPm5leHQ7CisJCW5leHQtPm5leHQgPSBOVUxMOworCQlzcGluX3VubG9ja19iaCgmbmV4dC0+bG9jayk7CisKKwkJbmV4dC0+dHhfc3VibWl0KG5leHQpOworCQluZXh0ID0gX25leHQ7CiAJfQorCisJY2hhbi0+ZGV2aWNlLT5kZXZpY2VfaXNzdWVfcGVuZGluZyhjaGFuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFzeW5jX3R4X3J1bl9kZXBlbmRlbmNpZXMpOwogCkBAIC0zOTcsNiArNDEyLDkyIEBACiB9CiAjZW5kaWYKIAorCisvKioKKyAqIGFzeW5jX3R4X2NoYW5uZWxfc3dpdGNoIC0gcXVldWUgYW4gaW50ZXJydXB0IGRlc2NyaXB0b3Igd2l0aCBhIGRlcGVuZGVuY3kKKyAqIAlwcmUtYXR0YWNoZWQuCisgKiBAZGVwZW5kX3R4OiB0aGUgb3BlcmF0aW9uIHRoYXQgbXVzdCBmaW5pc2ggYmVmb3JlIHRoZSBuZXcgb3BlcmF0aW9uIHJ1bnMKKyAqIEB0eDogdGhlIG5ldyBvcGVyYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2FzeW5jX3R4X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVwZW5kX3R4LAorCQkJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmludHJfdHggPSAodm9pZCAqKSB+MDsKKworCS8qIGZpcnN0IGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gc3RpbGwgYXBwZW5kIHRvIGRlcGVuZF90eCAqLworCXNwaW5fbG9ja19iaCgmZGVwZW5kX3R4LT5sb2NrKTsKKwlpZiAoZGVwZW5kX3R4LT5wYXJlbnQgJiYgZGVwZW5kX3R4LT5jaGFuID09IHR4LT5jaGFuKSB7CisJCXR4LT5wYXJlbnQgPSBkZXBlbmRfdHg7CisJCWRlcGVuZF90eC0+bmV4dCA9IHR4OworCQlpbnRyX3R4ID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRlcGVuZF90eC0+bG9jayk7CisKKwlpZiAoIWludHJfdHgpCisJCXJldHVybjsKKworCWNoYW4gPSBkZXBlbmRfdHgtPmNoYW47CisJZGV2aWNlID0gY2hhbi0+ZGV2aWNlOworCisJLyogc2VlIGlmIHdlIGNhbiBzY2hlZHVsZSBhbiBpbnRlcnJ1cHQKKwkgKiBvdGhlcndpc2UgcG9sbCBmb3IgY29tcGxldGlvbgorCSAqLworCWlmIChkbWFfaGFzX2NhcChETUFfSU5URVJSVVBULCBkZXZpY2UtPmNhcF9tYXNrKSkKKwkJaW50cl90eCA9IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX2ludGVycnVwdChjaGFuLCAwKTsKKwllbHNlCisJCWludHJfdHggPSBOVUxMOworCisJaWYgKGludHJfdHgpIHsKKwkJaW50cl90eC0+Y2FsbGJhY2sgPSBOVUxMOworCQlpbnRyX3R4LT5jYWxsYmFja19wYXJhbSA9IE5VTEw7CisJCXR4LT5wYXJlbnQgPSBpbnRyX3R4OworCQkvKiBzYWZlIHRvIHNldCAtPm5leHQgb3V0c2lkZSB0aGUgbG9jayBzaW5jZSB3ZSBrbm93IHdlIGFyZQorCQkgKiBub3Qgc3VibWl0dGVkIHlldAorCQkgKi8KKwkJaW50cl90eC0+bmV4dCA9IHR4OworCisJCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gYXBwZW5kICovCisJCXNwaW5fbG9ja19iaCgmZGVwZW5kX3R4LT5sb2NrKTsKKwkJaWYgKGRlcGVuZF90eC0+cGFyZW50KSB7CisJCQlpbnRyX3R4LT5wYXJlbnQgPSBkZXBlbmRfdHg7CisJCQlkZXBlbmRfdHgtPm5leHQgPSBpbnRyX3R4OworCQkJYXN5bmNfdHhfYWNrKGludHJfdHgpOworCQkJaW50cl90eCA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmRlcGVuZF90eC0+bG9jayk7CisKKwkJaWYgKGludHJfdHgpIHsKKwkJCWludHJfdHgtPnBhcmVudCA9IE5VTEw7CisJCQlpbnRyX3R4LT50eF9zdWJtaXQoaW50cl90eCk7CisJCQlhc3luY190eF9hY2soaW50cl90eCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZG1hX3dhaXRfZm9yX2FzeW5jX3R4KGRlcGVuZF90eCkgPT0gRE1BX0VSUk9SKQorCQkJcGFuaWMoIiVzOiBETUFfRVJST1Igd2FpdGluZyBmb3IgZGVwZW5kX3R4XG4iLAorCQkJICAgICAgX19mdW5jX18pOworCQl0eC0+dHhfc3VibWl0KHR4KTsKKwl9Cit9CisKKworLyoqCisgKiBzdWJtaXRfZGlzcG9zaXRpb24gLSB3aGlsZSBob2xkaW5nIGRlcGVuZF90eC0+bG9jayB3ZSBtdXN0IGF2b2lkIHN1Ym1pdHRpbmcKKyAqIAluZXcgb3BlcmF0aW9ucyB0byBwcmV2ZW50IGEgY2lyY3VsYXIgbG9ja2luZyBkZXBlbmRlbmN5IHdpdGgKKyAqIAlkcml2ZXJzIHRoYXQgYWxyZWFkeSBob2xkIGEgY2hhbm5lbCBsb2NrIHdoZW4gY2FsbGluZworICogCWFzeW5jX3R4X3J1bl9kZXBlbmRlbmNpZXMuCisgKiBAQVNZTkNfVFhfU1VCTUlUVEVEOiB3ZSB3ZXJlIGFibGUgdG8gYXBwZW5kIHRoZSBuZXcgb3BlcmF0aW9uIHVuZGVyIHRoZSBsb2NrCisgKiBAQVNZTkNfVFhfQ0hBTk5FTF9TV0lUQ0g6IHdoZW4gdGhlIGxvY2sgaXMgZHJvcHBlZCBzY2hlZHVsZSBhIGNoYW5uZWwgc3dpdGNoCisgKiBAQVNZTkNfVFhfRElSRUNUX1NVQk1JVDogd2hlbiB0aGUgbG9jayBpcyBkcm9wcGVkIHN1Ym1pdCBkaXJlY3RseQorICovCitlbnVtIHN1Ym1pdF9kaXNwb3NpdGlvbiB7CisJQVNZTkNfVFhfU1VCTUlUVEVELAorCUFTWU5DX1RYX0NIQU5ORUxfU1dJVENILAorCUFTWU5DX1RYX0RJUkVDVF9TVUJNSVQsCit9OworCiB2b2lkCiBhc3luY190eF9zdWJtaXQoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4LAogCWVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3MsIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVwZW5kX3R4LApAQCAtNDA1LDI4ICs1MDYsNTUgQEAKIAl0eC0+Y2FsbGJhY2sgPSBjYl9mbjsKIAl0eC0+Y2FsbGJhY2tfcGFyYW0gPSBjYl9wYXJhbTsKIAotCS8qIHNldCB0aGlzIG5ldyB0eCB0byBydW4gYWZ0ZXIgZGVwZW5kX3R4IGlmOgotCSAqIDEvIGEgZGVwZW5kZW5jeSBleGlzdHMgKGRlcGVuZF90eCBpcyAhTlVMTCkKLQkgKiAyLyB0aGUgdHggY2FuIG5vdCBiZSBzdWJtaXR0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbm5lbAotCSAqLwotCWlmIChkZXBlbmRfdHggJiYgZGVwZW5kX3R4LT5jaGFuICE9IGNoYW4pIHsKLQkJLyogaWYgYWNrIGlzIGFscmVhZHkgc2V0IHRoZW4gd2UgY2Fubm90IGJlIHN1cmUKLQkJICogd2UgYXJlIHJlZmVycmluZyB0byB0aGUgY29ycmVjdCBvcGVyYXRpb24KLQkJICovCi0JCUJVR19PTihkZXBlbmRfdHgtPmFjayk7CisJaWYgKGRlcGVuZF90eCkgeworCQllbnVtIHN1Ym1pdF9kaXNwb3NpdGlvbiBzOwogCi0JCXR4LT5wYXJlbnQgPSBkZXBlbmRfdHg7CisJCS8qIHNhbml0eSBjaGVjayB0aGUgZGVwZW5kZW5jeSBjaGFpbjoKKwkJICogMS8gaWYgYWNrIGlzIGFscmVhZHkgc2V0IHRoZW4gd2UgY2Fubm90IGJlIHN1cmUKKwkJICogd2UgYXJlIHJlZmVycmluZyB0byB0aGUgY29ycmVjdCBvcGVyYXRpb24KKwkJICogMi8gZGVwZW5kZW5jaWVzIGFyZSAxOjEgaS5lLiB0d28gdHJhbnNhY3Rpb25zIGNhbgorCQkgKiBub3QgZGVwZW5kIG9uIHRoZSBzYW1lIHBhcmVudAorCQkgKi8KKwkJQlVHX09OKGFzeW5jX3R4X3Rlc3RfYWNrKGRlcGVuZF90eCkgfHwgZGVwZW5kX3R4LT5uZXh0IHx8CisJCSAgICAgICB0eC0+cGFyZW50KTsKKworCQkvKiB0aGUgbG9jayBwcmV2ZW50cyBhc3luY190eF9ydW5fZGVwZW5kZW5jaWVzIGZyb20gbWlzc2luZworCQkgKiB0aGUgc2V0dGluZyBvZiAtPm5leHQgd2hlbiAtPnBhcmVudCAhPSBOVUxMCisJCSAqLwogCQlzcGluX2xvY2tfYmgoJmRlcGVuZF90eC0+bG9jayk7Ci0JCWxpc3RfYWRkX3RhaWwoJnR4LT5kZXBlbmRfbm9kZSwgJmRlcGVuZF90eC0+ZGVwZW5kX2xpc3QpOwotCQlpZiAoZGVwZW5kX3R4LT5jb29raWUgPT0gMCkgewotCQkJc3RydWN0IGRtYV9jaGFuICpkZXBfY2hhbiA9IGRlcGVuZF90eC0+Y2hhbjsKLQkJCXN0cnVjdCBkbWFfZGV2aWNlICpkZXBfZGV2ID0gZGVwX2NoYW4tPmRldmljZTsKLQkJCWRlcF9kZXYtPmRldmljZV9kZXBlbmRlbmN5X2FkZGVkKGRlcF9jaGFuKTsKKwkJaWYgKGRlcGVuZF90eC0+cGFyZW50KSB7CisJCQkvKiB3ZSBoYXZlIGEgcGFyZW50IHNvIHdlIGNhbiBub3Qgc3VibWl0IGRpcmVjdGx5CisJCQkgKiBpZiB3ZSBhcmUgc3RheWluZyBvbiB0aGUgc2FtZSBjaGFubmVsOiBhcHBlbmQKKwkJCSAqIGVsc2U6IGNoYW5uZWwgc3dpdGNoCisJCQkgKi8KKwkJCWlmIChkZXBlbmRfdHgtPmNoYW4gPT0gY2hhbikgeworCQkJCXR4LT5wYXJlbnQgPSBkZXBlbmRfdHg7CisJCQkJZGVwZW5kX3R4LT5uZXh0ID0gdHg7CisJCQkJcyA9IEFTWU5DX1RYX1NVQk1JVFRFRDsKKwkJCX0gZWxzZQorCQkJCXMgPSBBU1lOQ19UWF9DSEFOTkVMX1NXSVRDSDsKKwkJfSBlbHNlIHsKKwkJCS8qIHdlIGRvIG5vdCBoYXZlIGEgcGFyZW50IHNvIHdlIG1heSBiZSBhYmxlIHRvIHN1Ym1pdAorCQkJICogZGlyZWN0bHkgaWYgd2UgYXJlIHN0YXlpbmcgb24gdGhlIHNhbWUgY2hhbm5lbAorCQkJICovCisJCQlpZiAoZGVwZW5kX3R4LT5jaGFuID09IGNoYW4pCisJCQkJcyA9IEFTWU5DX1RYX0RJUkVDVF9TVUJNSVQ7CisJCQllbHNlCisJCQkJcyA9IEFTWU5DX1RYX0NIQU5ORUxfU1dJVENIOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZkZXBlbmRfdHgtPmxvY2spOwogCi0JCS8qIHNjaGVkdWxlIGFuIGludGVycnVwdCB0byB0cmlnZ2VyIHRoZSBjaGFubmVsIHN3aXRjaCAqLwotCQlhc3luY190cmlnZ2VyX2NhbGxiYWNrKEFTWU5DX1RYX0FDSywgZGVwZW5kX3R4LCBOVUxMLCBOVUxMKTsKKwkJc3dpdGNoIChzKSB7CisJCWNhc2UgQVNZTkNfVFhfU1VCTUlUVEVEOgorCQkJYnJlYWs7CisJCWNhc2UgQVNZTkNfVFhfQ0hBTk5FTF9TV0lUQ0g6CisJCQlhc3luY190eF9jaGFubmVsX3N3aXRjaChkZXBlbmRfdHgsIHR4KTsKKwkJCWJyZWFrOworCQljYXNlIEFTWU5DX1RYX0RJUkVDVF9TVUJNSVQ6CisJCQl0eC0+cGFyZW50ID0gTlVMTDsKKwkJCXR4LT50eF9zdWJtaXQodHgpOworCQkJYnJlYWs7CisJCX0KIAl9IGVsc2UgewogCQl0eC0+cGFyZW50ID0gTlVMTDsKIAkJdHgtPnR4X3N1Ym1pdCh0eCk7CkBAIC00NjcsMjYgKzU5NSwyNiBAQAogCQlpZiAoZGV2aWNlICYmICFkbWFfaGFzX2NhcChETUFfSU5URVJSVVBULCBkZXZpY2UtPmNhcF9tYXNrKSkKIAkJCWRldmljZSA9IE5VTEw7CiAKLQkJdHggPSBkZXZpY2UgPyBkZXZpY2UtPmRldmljZV9wcmVwX2RtYV9pbnRlcnJ1cHQoY2hhbikgOiBOVUxMOworCQl0eCA9IGRldmljZSA/IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX2ludGVycnVwdChjaGFuLCAwKSA6IE5VTEw7CiAJfSBlbHNlCiAJCXR4ID0gTlVMTDsKIAogCWlmICh0eCkgewotCQlwcl9kZWJ1ZygiJXM6IChhc3luYylcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByX2RlYnVnKCIlczogKGFzeW5jKVxuIiwgX19mdW5jX18pOwogCiAJCWFzeW5jX3R4X3N1Ym1pdChjaGFuLCB0eCwgZmxhZ3MsIGRlcGVuZF90eCwgY2JfZm4sIGNiX3BhcmFtKTsKIAl9IGVsc2UgewotCQlwcl9kZWJ1ZygiJXM6IChzeW5jKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJfZGVidWcoIiVzOiAoc3luYylcbiIsIF9fZnVuY19fKTsKIAogCQkvKiB3YWl0IGZvciBhbnkgcHJlcmVxdWlzaXRlIG9wZXJhdGlvbnMgKi8KIAkJaWYgKGRlcGVuZF90eCkgewogCQkJLyogaWYgYWNrIGlzIGFscmVhZHkgc2V0IHRoZW4gd2UgY2Fubm90IGJlIHN1cmUKIAkJCSAqIHdlIGFyZSByZWZlcnJpbmcgdG8gdGhlIGNvcnJlY3Qgb3BlcmF0aW9uCiAJCQkgKi8KLQkJCUJVR19PTihkZXBlbmRfdHgtPmFjayk7CisJCQlCVUdfT04oYXN5bmNfdHhfdGVzdF9hY2soZGVwZW5kX3R4KSk7CiAJCQlpZiAoZG1hX3dhaXRfZm9yX2FzeW5jX3R4KGRlcGVuZF90eCkgPT0gRE1BX0VSUk9SKQogCQkJCXBhbmljKCIlczogRE1BX0VSUk9SIHdhaXRpbmcgZm9yIGRlcGVuZF90eFxuIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJX19mdW5jX18pOwogCQl9CiAKIAkJYXN5bmNfdHhfc3luY19lcGlsb2coZmxhZ3MsIGRlcGVuZF90eCwgY2JfZm4sIGNiX3BhcmFtKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwppbmRleCAyMjU5YTRmLi4zYTBkZGRjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBkbWFfcHJlcF9mbGFncyA9IGNiX2ZuID8gRE1BX1BSRVBfSU5URVJSVVBUIDogMDsKIAotCXByX2RlYnVnKCIlczogbGVuOiAlenVcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwlwcl9kZWJ1ZygiJXM6IGxlbjogJXp1XG4iLCBfX2Z1bmNfXywgbGVuKTsKIAogCWRtYV9kZXN0ID0gZG1hX21hcF9wYWdlKGRldmljZS0+ZGV2LCBkZXN0LCBvZmZzZXQsIGxlbiwKIAkJCQlETUFfRlJPTV9ERVZJQ0UpOwpAQCAtODYsNyArODYsNyBAQAogCXZvaWQgKl9kZXN0OwogCWludCBpOwogCi0JcHJfZGVidWcoIiVzOiBsZW46ICV6dVxuIiwgX19GVU5DVElPTl9fLCBsZW4pOworCXByX2RlYnVnKCIlczogbGVuOiAlenVcbiIsIF9fZnVuY19fLCBsZW4pOwogCiAJLyogcmV1c2UgdGhlICdzcmNfbGlzdCcgYXJyYXkgdG8gY29udmVydCB0byBidWZmZXIgcG9pbnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKQpAQCAtMTkxLDEyICsxOTEsMTIgQEAKIAkJCQkvKiBpZiBhY2sgaXMgYWxyZWFkeSBzZXQgdGhlbiB3ZSBjYW5ub3QgYmUgc3VyZQogCQkJCSAqIHdlIGFyZSByZWZlcnJpbmcgdG8gdGhlIGNvcnJlY3Qgb3BlcmF0aW9uCiAJCQkJICovCi0JCQkJQlVHX09OKGRlcGVuZF90eC0+YWNrKTsKKwkJCQlCVUdfT04oYXN5bmNfdHhfdGVzdF9hY2soZGVwZW5kX3R4KSk7CiAJCQkJaWYgKGRtYV93YWl0X2Zvcl9hc3luY190eChkZXBlbmRfdHgpID09CiAJCQkJCURNQV9FUlJPUikKIAkJCQkJcGFuaWMoIiVzOiBETUFfRVJST1Igd2FpdGluZyBmb3IgIgogCQkJCQkJImRlcGVuZF90eFxuIiwKLQkJCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCQlfX2Z1bmNfXyk7CiAJCQl9CiAKIAkJCWRvX3N5bmNfeG9yKGRlc3QsICZzcmNfbGlzdFtzcmNfb2ZmXSwgb2Zmc2V0LApAQCAtMjcxLDEyICsyNzEsMTIgQEAKIAogCUJVR19PTihzcmNfY250IDw9IDEpOwogCi0JaWYgKGRldmljZSkgeworCWlmIChkZXZpY2UgJiYgc3JjX2NudCA8PSBkZXZpY2UtPm1heF94b3IpIHsKIAkJZG1hX2FkZHJfdCAqZG1hX3NyYyA9IChkbWFfYWRkcl90ICopIHNyY19saXN0OwogCQl1bnNpZ25lZCBsb25nIGRtYV9wcmVwX2ZsYWdzID0gY2JfZm4gPyBETUFfUFJFUF9JTlRFUlJVUFQgOiAwOwogCQlpbnQgaTsKIAotCQlwcl9kZWJ1ZygiJXM6IChhc3luYykgbGVuOiAlenVcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwkJcHJfZGVidWcoIiVzOiAoYXN5bmMpIGxlbjogJXp1XG4iLCBfX2Z1bmNfXywgbGVuKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc3JjX2NudDsgaSsrKQogCQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkZXZpY2UtPmRldiwgc3JjX2xpc3RbaV0sCkBAIC0yOTksNyArMjk5LDcgQEAKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBsb25nIHhvcl9mbGFncyA9IGZsYWdzOwogCi0JCXByX2RlYnVnKCIlczogKHN5bmMpIGxlbjogJXp1XG4iLCBfX0ZVTkNUSU9OX18sIGxlbik7CisJCXByX2RlYnVnKCIlczogKHN5bmMpIGxlbjogJXp1XG4iLCBfX2Z1bmNfXywgbGVuKTsKIAogCQl4b3JfZmxhZ3MgfD0gQVNZTkNfVFhfWE9SX0RST1BfRFNUOwogCQl4b3JfZmxhZ3MgJj0gfkFTWU5DX1RYX0FDSzsKQEAgLTMxMCw3ICszMTAsNyBAQAogCQlpZiAodHgpIHsKIAkJCWlmIChkbWFfd2FpdF9mb3JfYXN5bmNfdHgodHgpID09IERNQV9FUlJPUikKIAkJCQlwYW5pYygiJXM6IERNQV9FUlJPUiB3YWl0aW5nIGZvciB0eFxuIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJX19mdW5jX18pOwogCQkJYXN5bmNfdHhfYWNrKHR4KTsKIAkJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vYmxrY2lwaGVyLmMgYi9jcnlwdG8vYmxrY2lwaGVyLmMKaW5kZXggNGE3ZTY1Yy4uMTg1Zjk1NSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jsa2NpcGhlci5jCisrKyBiL2NyeXB0by9ibGtjaXBoZXIuYwpAQCAtNjk2LDUgKzY5NiwzNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tjaXBoZXJfZ2VuaXZfZXhpdCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IGJsa2NpcGhlcl9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBjaGFpbml2X21vZHVsZV9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBlc2VxaXZfbW9kdWxlX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVzZXFpdl9lcnI7CisKK291dDoKKwlyZXR1cm4gZXJyOworCitlc2VxaXZfZXJyOgorCWNoYWluaXZfbW9kdWxlX2V4aXQoKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJsa2NpcGhlcl9tb2R1bGVfZXhpdCh2b2lkKQoreworCWVzZXFpdl9tb2R1bGVfZXhpdCgpOworCWNoYWluaXZfbW9kdWxlX2V4aXQoKTsKK30KKworbW9kdWxlX2luaXQoYmxrY2lwaGVyX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGJsa2NpcGhlcl9tb2R1bGVfZXhpdCk7CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBibG9jayBjaGFpbmluZyBjaXBoZXIgdHlwZSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsb3dmaXNoLmMgYi9jcnlwdG8vYmxvd2Zpc2guYwppbmRleCA4MGMzZmQ4Li42ZjViNDg3IDEwMDY0NAotLS0gYS9jcnlwdG8vYmxvd2Zpc2guYworKysgYi9jcnlwdG8vYmxvd2Zpc2guYwpAQCAtNDY1LDE4ICs0NjUsMTggQEAKIAkuY2lhX2RlY3J5cHQgIAkJPQliZl9kZWNyeXB0IH0gfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmxvd2Zpc2hfbW9kX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBibG93ZmlzaF9tb2RfZmluaSh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KGJsb3dmaXNoX21vZF9pbml0KTsKK21vZHVsZV9leGl0KGJsb3dmaXNoX21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCbG93ZmlzaCBDaXBoZXIgQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vY2FzdDUuYyBiL2NyeXB0by9jYXN0NS5jCmluZGV4IDEzZWE2MGEuLjhjYmUyOGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0NS5jCisrKyBiL2NyeXB0by9jYXN0NS5jCkBAIC04MTcsMTggKzgxNywxOCBAQAogCX0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNhc3Q1X21vZF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FzdDVfbW9kX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Cittb2R1bGVfaW5pdChjYXN0NV9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChjYXN0NV9tb2RfZmluaSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ2FzdDUgQ2lwaGVyIEFsZ29yaXRobSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q2LmMgYi9jcnlwdG8vY2FzdDYuYwppbmRleCA1ZmQ5NDIwLi4wMDdkMDJiIDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDYuYworKysgYi9jcnlwdG8vY2FzdDYuYwpAQCAtNTI4LDE4ICs1MjgsMTggQEAKIAkJICB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjYXN0Nl9tb2RfaW5pdCh2b2lkKQogewogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNhc3Q2X21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOwogfQogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQoY2FzdDZfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoY2FzdDZfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNhc3Q2IENpcGhlciBBbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jaGFpbml2LmMgYi9jcnlwdG8vY2hhaW5pdi5jCmluZGV4IGQxN2ZhMDQuLjZkYTNmNTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jaGFpbml2LmMKKysrIGIvY3J5cHRvL2NoYWluaXYuYwpAQCAtMzE0LDE4ICszMTQsMTIgQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjaGFpbml2X21vZHVsZV9pbml0KHZvaWQpCitpbnQgX19pbml0IGNoYWluaXZfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjaGFpbml2X3RtcGwpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2hhaW5pdl9tb2R1bGVfZXhpdCh2b2lkKQordm9pZCBjaGFpbml2X21vZHVsZV9leGl0KHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNoYWluaXZfdG1wbCk7CiB9Ci0KLW1vZHVsZV9pbml0KGNoYWluaXZfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQoY2hhaW5pdl9tb2R1bGVfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQ2hhaW4gSVYgR2VuZXJhdG9yIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vY3JjMzJjLmMgYi9jcnlwdG8vY3JjMzJjLmMKaW5kZXggMGZhNzQ0My4uMGRjZjY0YSAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyYzMyYy5jCisrKyBiL2NyeXB0by9jcmMzMmMuYwpAQCAtOTgsMTggKzk4LDE4IEBACiAJfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3JjMzJjX21vZF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY3JjMzJjX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOwogfQogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQoY3JjMzJjX21vZF9pbml0KTsKK21vZHVsZV9leGl0KGNyYzMyY19tb2RfZmluaSk7CiAKIE1PRFVMRV9BVVRIT1IoIkNsYXkgSGFhcGFsYSA8Y2hhYXBhbGFAY2lzY28uY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDUkMzMmMgKENhc3RhZ25vbGkpIGNhbGN1bGF0aW9ucyB3cmFwcGVyIGZvciBsaWIvY3JjMzJjIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvX251bGwuYyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCmluZGV4IGZmN2IzZGUuLjFmN2Q1MzAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdG9fbnVsbC5jCisrKyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIE1PRFVMRV9BTElBUygiZGlnZXN0X251bGwiKTsKIE1PRFVMRV9BTElBUygiY2lwaGVyX251bGwiKTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3J5cHRvX251bGxfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIAkKQEAgLTE3NCw3ICsxNzQsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNyeXB0b19udWxsX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjb21wcmVzc19udWxsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRpZ2VzdF9udWxsKTsKQEAgLTE4Miw4ICsxODIsOCBAQAogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2lwaGVyX251bGwpOwogfQogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQoY3J5cHRvX251bGxfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoY3J5cHRvX251bGxfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk51bGwgQ3J5cHRvZ3JhcGhpYyBBbGdvcml0aG1zIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vY3RzLmMgYi9jcnlwdG8vY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlNzBiZgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jdHMuYwpAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIENUUzogQ2lwaGVyIFRleHQgU3RlYWxpbmcgbW9kZQorICoKKyAqIENPUFlSSUdIVCAoYykgMjAwOAorICogVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4KKyAqIEFMTCBSSUdIVFMgUkVTRVJWRUQKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcworICogYW5kIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MKKyAqIGZvciBhbnkgcHVycG9zZSwgc28gbG9uZyBhcyB0aGUgbmFtZSBvZiBUaGUgVW5pdmVyc2l0eSBvZgorICogTWljaGlnYW4gaXMgbm90IHVzZWQgaW4gYW55IGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eQorICogcGVydGFpbmluZyB0byB0aGUgdXNlIG9mIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIGF1dGhvcml6YXRpb24uICBJZiB0aGUKKyAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ugb3IgYW55IG90aGVyIGlkZW50aWZpY2F0aW9uIG9mIHRoZQorICogVW5pdmVyc2l0eSBvZiBNaWNoaWdhbiBpcyBpbmNsdWRlZCBpbiBhbnkgY29weSBvZiBhbnkKKyAqIHBvcnRpb24gb2YgdGhpcyBzb2Z0d2FyZSwgdGhlbiB0aGUgZGlzY2xhaW1lciBiZWxvdyBtdXN0CisgKiBhbHNvIGJlIGluY2x1ZGVkLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQVMgSVMsIFdJVEhPVVQgUkVQUkVTRU5UQVRJT04KKyAqIEZST00gVEhFIFVOSVZFUlNJVFkgT0YgTUlDSElHQU4gQVMgVE8gSVRTIEZJVE5FU1MgRk9SIEFOWQorICogUFVSUE9TRSwgQU5EIFdJVEhPVVQgV0FSUkFOVFkgQlkgVEhFIFVOSVZFUlNJVFkgT0YKKyAqIE1JQ0hJR0FOIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcKKyAqIFdJVEhPVVQgTElNSVRBVElPTiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUKKyAqIFJFR0VOVFMgT0YgVEhFIFVOSVZFUlNJVFkgT0YgTUlDSElHQU4gU0hBTEwgTk9UIEJFIExJQUJMRQorICogRk9SIEFOWSBEQU1BR0VTLCBJTkNMVURJTkcgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdJVEggUkVTUEVDVCBUTyBBTlkgQ0xBSU0gQVJJU0lORworICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSwgRVZFTgorICogSUYgSVQgSEFTIEJFRU4gT1IgSVMgSEVSRUFGVEVSIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRVMuCisgKi8KKworLyogRGVyaXZlZCBmcm9tIHZhcmlvdXM6CisgKglDb3B5cmlnaHQgKGMpIDIwMDYgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBDaXBoZXIgVGV4dCBTdGVhbGluZyBtb2RlIGFzIGRlc2NyaWJlZCBieQorICogU2VjdGlvbiA4IG9mIHJmYzIwNDAgYW5kIHJlZmVyZW5jZWQgYnkgcmZjMzk2Mi4KKyAqIHJmYzM5NjIgaW5jbHVkZXMgZXJyYXRhIGluZm9ybWF0aW9uIGluIGl0cyBBcHBlbmRpeCBBLgorICovCisKKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGNyeXB0by9zY2F0dGVyd2Fsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IGNyeXB0b19jdHNfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqY2hpbGQ7Cit9OworCitzdGF0aWMgaW50IGNyeXB0b19jdHNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICpwYXJlbnQsIGNvbnN0IHU4ICprZXksCisJCQkgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJc3RydWN0IGNyeXB0b19jdHNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChwYXJlbnQpOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjaGlsZCA9IGN0eC0+Y2hpbGQ7CisJaW50IGVycjsKKworCWNyeXB0b19ibGtjaXBoZXJfY2xlYXJfZmxhZ3MoY2hpbGQsIENSWVBUT19URk1fUkVRX01BU0spOworCWNyeXB0b19ibGtjaXBoZXJfc2V0X2ZsYWdzKGNoaWxkLCBjcnlwdG9fdGZtX2dldF9mbGFncyhwYXJlbnQpICYKKwkJCQkgICAgICAgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisJZXJyID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoY2hpbGQsIGtleSwga2V5bGVuKTsKKwljcnlwdG9fdGZtX3NldF9mbGFncyhwYXJlbnQsIGNyeXB0b19ibGtjaXBoZXJfZ2V0X2ZsYWdzKGNoaWxkKSAmCisJCQkJICAgICBDUllQVE9fVEZNX1JFU19NQVNLKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGN0c19jYmNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX2N0c19jdHggKmN0eCwKKwkJCSAgIHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlpbnQgYnNpemUgPSBjcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOworCXU4IHRtcFtic2l6ZV0sIHRtcDJbYnNpemVdOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBsY2xkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ3NyY1sxXSwgc2dkc3RbMV07CisJaW50IGxhc3RuID0gbmJ5dGVzIC0gYnNpemU7CisJdTggaXZbYnNpemVdOworCXU4IHNbYnNpemUgKiAyXSwgZFtic2l6ZSAqIDJdOworCWludCBlcnI7CisKKwlpZiAobGFzdG4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChzLCAwLCBzaXplb2YocykpOworCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShzLCBzcmMsIG9mZnNldCwgbmJ5dGVzLCAwKTsKKworCW1lbWNweShpdiwgZGVzYy0+aW5mbywgYnNpemUpOworCisJbGNsZGVzYy50Zm0gPSBjdHgtPmNoaWxkOworCWxjbGRlc2MuaW5mbyA9IGl2OworCWxjbGRlc2MuZmxhZ3MgPSBkZXNjLT5mbGFnczsKKworCXNnX3NldF9idWYoJnNnc3JjWzBdLCBzLCBic2l6ZSk7CisJc2dfc2V0X2J1Zigmc2dkc3RbMF0sIHRtcCwgYnNpemUpOworCWVyciA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdF9pdigmbGNsZGVzYywgc2dkc3QsIHNnc3JjLCBic2l6ZSk7CisKKwltZW1jcHkoZCArIGJzaXplLCB0bXAsIGxhc3RuKTsKKworCWxjbGRlc2MuaW5mbyA9IHRtcDsKKworCXNnX3NldF9idWYoJnNnc3JjWzBdLCBzICsgYnNpemUsIGJzaXplKTsKKwlzZ19zZXRfYnVmKCZzZ2RzdFswXSwgdG1wMiwgYnNpemUpOworCWVyciA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdF9pdigmbGNsZGVzYywgc2dkc3QsIHNnc3JjLCBic2l6ZSk7CisKKwltZW1jcHkoZCwgdG1wMiwgYnNpemUpOworCisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGQsIGRzdCwgb2Zmc2V0LCBuYnl0ZXMsIDEpOworCisJbWVtY3B5KGRlc2MtPmluZm8sIHRtcDIsIGJzaXplKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX2N0c19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19jdHNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCWludCBic2l6ZSA9IGNyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplKGRlc2MtPnRmbSk7CisJaW50IHRvdF9ibG9ja3MgPSAobmJ5dGVzICsgYnNpemUgLSAxKSAvIGJzaXplOworCWludCBjYmNfYmxvY2tzID0gdG90X2Jsb2NrcyA+IDIgPyB0b3RfYmxvY2tzIC0gMiA6IDA7CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGxjbGRlc2M7CisJaW50IGVycjsKKworCWxjbGRlc2MudGZtID0gY3R4LT5jaGlsZDsKKwlsY2xkZXNjLmluZm8gPSBkZXNjLT5pbmZvOworCWxjbGRlc2MuZmxhZ3MgPSBkZXNjLT5mbGFnczsKKworCWlmICh0b3RfYmxvY2tzID09IDEpIHsKKwkJZXJyID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0X2l2KCZsY2xkZXNjLCBkc3QsIHNyYywgYnNpemUpOworCX0gZWxzZSBpZiAobmJ5dGVzIDw9IGJzaXplICogMikgeworCQllcnIgPSBjdHNfY2JjX2VuY3J5cHQoY3R4LCBkZXNjLCBkc3QsIHNyYywgMCwgbmJ5dGVzKTsKKwl9IGVsc2UgeworCQkvKiBkbyBub3JtYWwgZnVuY3Rpb24gZm9yIHRvdF9ibG9ja3MgLSAyICovCisJCWVyciA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdF9pdigmbGNsZGVzYywgZHN0LCBzcmMsCisJCQkJCQkJY2JjX2Jsb2NrcyAqIGJzaXplKTsKKwkJaWYgKGVyciA9PSAwKSB7CisJCQkvKiBkbyBjdHMgZm9yIGZpbmFsIHR3byBibG9ja3MgKi8KKwkJCWVyciA9IGN0c19jYmNfZW5jcnlwdChjdHgsIGRlc2MsIGRzdCwgc3JjLAorCQkJCQkJY2JjX2Jsb2NrcyAqIGJzaXplLAorCQkJCQkJbmJ5dGVzIC0gKGNiY19ibG9ja3MgKiBic2l6ZSkpOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjdHNfY2JjX2RlY3J5cHQoc3RydWN0IGNyeXB0b19jdHNfY3R4ICpjdHgsCisJCQkgICBzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJaW50IGJzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUoZGVzYy0+dGZtKTsKKwl1OCB0bXBbYnNpemVdOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBsY2xkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ3NyY1sxXSwgc2dkc3RbMV07CisJaW50IGxhc3RuID0gbmJ5dGVzIC0gYnNpemU7CisJdTggaXZbYnNpemVdOworCXU4IHNbYnNpemUgKiAyXSwgZFtic2l6ZSAqIDJdOworCWludCBlcnI7CisKKwlpZiAobGFzdG4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShzLCBzcmMsIG9mZnNldCwgbmJ5dGVzLCAwKTsKKworCWxjbGRlc2MudGZtID0gY3R4LT5jaGlsZDsKKwlsY2xkZXNjLmluZm8gPSBpdjsKKwlsY2xkZXNjLmZsYWdzID0gZGVzYy0+ZmxhZ3M7CisKKwkvKiAxLiBEZWNyeXB0IENuLTEgKHMpIHRvIGNyZWF0ZSBEbiAodG1wKSovCisJbWVtc2V0KGl2LCAwLCBzaXplb2YoaXYpKTsKKwlzZ19zZXRfYnVmKCZzZ3NyY1swXSwgcywgYnNpemUpOworCXNnX3NldF9idWYoJnNnZHN0WzBdLCB0bXAsIGJzaXplKTsKKwllcnIgPSBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHRfaXYoJmxjbGRlc2MsIHNnZHN0LCBzZ3NyYywgYnNpemUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJLyogMi4gUGFkIENuIHdpdGggemVyb3MgYXQgdGhlIGVuZCB0byBjcmVhdGUgQyBvZiBsZW5ndGggQkIgKi8KKwltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOworCW1lbWNweShpdiwgcyArIGJzaXplLCBsYXN0bik7CisJLyogMy4gRXhjbHVzaXZlLW9yIERuICh0bXApIHdpdGggQyAoaXYpIHRvIGNyZWF0ZSBYbiAodG1wKSAqLworCWNyeXB0b194b3IodG1wLCBpdiwgYnNpemUpOworCS8qIDQuIFNlbGVjdCB0aGUgZmlyc3QgTG4gYnl0ZXMgb2YgWG4gKHRtcCkgdG8gY3JlYXRlIFBuICovCisJbWVtY3B5KGQgKyBic2l6ZSwgdG1wLCBsYXN0bik7CisKKwkvKiA1LiBBcHBlbmQgdGhlIHRhaWwgKEJCIC0gTG4pIGJ5dGVzIG9mIFhuICh0bXApIHRvIENuIHRvIGNyZWF0ZSBFbiAqLworCW1lbWNweShzICsgYnNpemUgKyBsYXN0biwgdG1wICsgbGFzdG4sIGJzaXplIC0gbGFzdG4pOworCS8qIDYuIERlY3J5cHQgRW4gdG8gY3JlYXRlIFBuLTEgKi8KKwltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOworCXNnX3NldF9idWYoJnNnc3JjWzBdLCBzICsgYnNpemUsIGJzaXplKTsKKwlzZ19zZXRfYnVmKCZzZ2RzdFswXSwgZCwgYnNpemUpOworCWVyciA9IGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdF9pdigmbGNsZGVzYywgc2dkc3QsIHNnc3JjLCBic2l6ZSk7CisKKwkvKiBYT1Igd2l0aCBwcmV2aW91cyBibG9jayAqLworCWNyeXB0b194b3IoZCwgZGVzYy0+aW5mbywgYnNpemUpOworCisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGQsIGRzdCwgb2Zmc2V0LCBuYnl0ZXMsIDEpOworCisJbWVtY3B5KGRlc2MtPmluZm8sIHMsIGJzaXplKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNyeXB0b19jdHNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fY3RzX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlpbnQgYnNpemUgPSBjcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZShkZXNjLT50Zm0pOworCWludCB0b3RfYmxvY2tzID0gKG5ieXRlcyArIGJzaXplIC0gMSkgLyBic2l6ZTsKKwlpbnQgY2JjX2Jsb2NrcyA9IHRvdF9ibG9ja3MgPiAyID8gdG90X2Jsb2NrcyAtIDIgOiAwOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBsY2xkZXNjOworCWludCBlcnI7CisKKwlsY2xkZXNjLnRmbSA9IGN0eC0+Y2hpbGQ7CisJbGNsZGVzYy5pbmZvID0gZGVzYy0+aW5mbzsKKwlsY2xkZXNjLmZsYWdzID0gZGVzYy0+ZmxhZ3M7CisKKwlpZiAodG90X2Jsb2NrcyA9PSAxKSB7CisJCWVyciA9IGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdF9pdigmbGNsZGVzYywgZHN0LCBzcmMsIGJzaXplKTsKKwl9IGVsc2UgaWYgKG5ieXRlcyA8PSBic2l6ZSAqIDIpIHsKKwkJZXJyID0gY3RzX2NiY19kZWNyeXB0KGN0eCwgZGVzYywgZHN0LCBzcmMsIDAsIG5ieXRlcyk7CisJfSBlbHNlIHsKKwkJLyogZG8gbm9ybWFsIGZ1bmN0aW9uIGZvciB0b3RfYmxvY2tzIC0gMiAqLworCQllcnIgPSBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHRfaXYoJmxjbGRlc2MsIGRzdCwgc3JjLAorCQkJCQkJCWNiY19ibG9ja3MgKiBic2l6ZSk7CisJCWlmIChlcnIgPT0gMCkgeworCQkJLyogZG8gY3RzIGZvciBmaW5hbCB0d28gYmxvY2tzICovCisJCQllcnIgPSBjdHNfY2JjX2RlY3J5cHQoY3R4LCBkZXNjLCBkc3QsIHNyYywKKwkJCQkJCWNiY19ibG9ja3MgKiBic2l6ZSwKKwkJCQkJCW5ieXRlcyAtIChjYmNfYmxvY2tzICogYnNpemUpKTsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNyeXB0b19jdHNfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gKHZvaWQgKil0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7CisJc3RydWN0IGNyeXB0b19jdHNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjaXBoZXI7CisKKwljaXBoZXIgPSBjcnlwdG9fc3Bhd25fYmxrY2lwaGVyKHNwYXduKTsKKwlpZiAoSVNfRVJSKGNpcGhlcikpCisJCXJldHVybiBQVFJfRVJSKGNpcGhlcik7CisKKwljdHgtPmNoaWxkID0gY2lwaGVyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG9fY3RzX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19jdHNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjdHgtPmNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0b19jdHNfYWxsb2Moc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlpbnQgZXJyOworCisJZXJyID0gY3J5cHRvX2NoZWNrX2F0dHJfdHlwZSh0YiwgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUik7CisJaWYgKGVycikKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCWFsZyA9IGNyeXB0b19hdHRyX2FsZyh0YlsxXSwgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkJCQkgIENSWVBUT19BTEdfVFlQRV9NQVNLKTsKKwllcnIgPSBQVFJfRVJSKGFsZyk7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaW5zdCA9IEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKCFpc19wb3dlcl9vZl8yKGFsZy0+Y3JhX2Jsb2Nrc2l6ZSkpCisJCWdvdG8gb3V0X3B1dF9hbGc7CisKKwlpbnN0ID0gY3J5cHRvX2FsbG9jX2luc3RhbmNlKCJjdHMiLCBhbGcpOworCWlmIChJU19FUlIoaW5zdCkpCisJCWdvdG8gb3V0X3B1dF9hbGc7CisKKwlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUjsKKwlpbnN0LT5hbGcuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHk7CisJaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSBhbGctPmNyYV9ibG9ja3NpemU7CisJaW5zdC0+YWxnLmNyYV9hbGlnbm1hc2sgPSBhbGctPmNyYV9hbGlnbm1hc2s7CisJaW5zdC0+YWxnLmNyYV90eXBlID0gJmNyeXB0b19ibGtjaXBoZXJfdHlwZTsKKworCS8qIFdlIGFjY2VzcyB0aGUgZGF0YSBhcyB1MzJzIHdoZW4geG9yaW5nLiAqLworCWluc3QtPmFsZy5jcmFfYWxpZ25tYXNrIHw9IF9fYWxpZ25vZl9fKHUzMikgLSAxOworCisJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuaXZzaXplID0gYWxnLT5jcmFfYmxvY2tzaXplOworCWluc3QtPmFsZy5jcmFfYmxrY2lwaGVyLm1pbl9rZXlzaXplID0gYWxnLT5jcmFfYmxrY2lwaGVyLm1pbl9rZXlzaXplOworCWluc3QtPmFsZy5jcmFfYmxrY2lwaGVyLm1heF9rZXlzaXplID0gYWxnLT5jcmFfYmxrY2lwaGVyLm1heF9rZXlzaXplOworCisJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuZ2VuaXYgPSAic2VxaXYiOworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fY3RzX2N0eCk7CisKKwlpbnN0LT5hbGcuY3JhX2luaXQgPSBjcnlwdG9fY3RzX2luaXRfdGZtOworCWluc3QtPmFsZy5jcmFfZXhpdCA9IGNyeXB0b19jdHNfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2Jsa2NpcGhlci5zZXRrZXkgPSBjcnlwdG9fY3RzX3NldGtleTsKKwlpbnN0LT5hbGcuY3JhX2Jsa2NpcGhlci5lbmNyeXB0ID0gY3J5cHRvX2N0c19lbmNyeXB0OworCWluc3QtPmFsZy5jcmFfYmxrY2lwaGVyLmRlY3J5cHQgPSBjcnlwdG9fY3RzX2RlY3J5cHQ7CisKK291dF9wdXRfYWxnOgorCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJcmV0dXJuIGluc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19jdHNfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCWNyeXB0b19kcm9wX3NwYXduKGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCkpOworCWtmcmVlKGluc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBjcnlwdG9fY3RzX3RtcGwgPSB7CisJLm5hbWUgPSAiY3RzIiwKKwkuYWxsb2MgPSBjcnlwdG9fY3RzX2FsbG9jLAorCS5mcmVlID0gY3J5cHRvX2N0c19mcmVlLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0b19jdHNfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fY3RzX3RtcGwpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvX2N0c19tb2R1bGVfZXhpdCh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fY3RzX3RtcGwpOworfQorCittb2R1bGVfaW5pdChjcnlwdG9fY3RzX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGNyeXB0b19jdHNfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNUUy1DQkMgQ2lwaGVyVGV4dCBTdGVhbGluZyBmb3IgQ0JDIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVmbGF0ZS5jIGIvY3J5cHRvL2RlZmxhdGUuYwppbmRleCA2NTg4YmJmLi45MTI4ZGE0IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVmbGF0ZS5jCisrKyBiL2NyeXB0by9kZWZsYXRlLmMKQEAgLTIwOCwxOCArMjA4LDE4IEBACiAJLmNvYV9kZWNvbXByZXNzICAJPSBkZWZsYXRlX2RlY29tcHJlc3MgfSB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBkZWZsYXRlX21vZF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZGVmbGF0ZV9tb2RfZmluaSh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KGRlZmxhdGVfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoZGVmbGF0ZV9tb2RfZmluaSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRGVmbGF0ZSBDb21wcmVzc2lvbiBBbGdvcml0aG0gZm9yIElQQ09NUCIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlc19nZW5lcmljLmMgYi9jcnlwdG8vZGVzX2dlbmVyaWMuYwppbmRleCAzNTVlY2I3Li41ZDBlNDU4IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzX2dlbmVyaWMuYworKysgYi9jcnlwdG8vZGVzX2dlbmVyaWMuYwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAKIE1PRFVMRV9BTElBUygiZGVzM19lZGUiKTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZGVzX2dlbmVyaWNfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtOTkyLDE0ICs5OTIsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGRlc19nZW5lcmljX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXMzX2VkZV9hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzX2FsZyk7CiB9CiAKLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Cittb2R1bGVfaW5pdChkZXNfZ2VuZXJpY19tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChkZXNfZ2VuZXJpY19tb2RfZmluaSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiREVTICYgVHJpcGxlIERFUyBFREUgQ2lwaGVyIEFsZ29yaXRobXMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9kaWdlc3QuYyBiL2NyeXB0by9kaWdlc3QuYwppbmRleCA2ZmQ0M2JkLi5iNTI2Y2MzIDEwMDY0NAotLS0gYS9jcnlwdG8vZGlnZXN0LmMKKysrIGIvY3J5cHRvL2RpZ2VzdC5jCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIHN0YXRpYyBpbnQgaW5pdChzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjKQogewogCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9faGFzaF90Zm0oZGVzYy0+dGZtKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9lc2VxaXYuYyBiL2NyeXB0by9lc2VxaXYuYwppbmRleCBlYjkwZDI3Li5iMTRmMTRlIDEwMDY0NAotLS0gYS9jcnlwdG8vZXNlcWl2LmMKKysrIGIvY3J5cHRvL2VzZXFpdi5jCkBAIC0yNDcsMTggKzI0NywxMiBAQAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGVzZXFpdl9tb2R1bGVfaW5pdCh2b2lkKQoraW50IF9faW5pdCBlc2VxaXZfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZlc2VxaXZfdG1wbCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBlc2VxaXZfbW9kdWxlX2V4aXQodm9pZCkKK3ZvaWQgX19leGl0IGVzZXFpdl9tb2R1bGVfZXhpdCh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZlc2VxaXZfdG1wbCk7CiB9Ci0KLW1vZHVsZV9pbml0KGVzZXFpdl9tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChlc2VxaXZfbW9kdWxlX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkVuY3J5cHRlZCBTZXF1ZW5jZSBOdW1iZXIgSVYgR2VuZXJhdG9yIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZmNyeXB0LmMgYi9jcnlwdG8vZmNyeXB0LmMKaW5kZXggYTMyY2I2OC4uMTMwMmY0YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2ZjcnlwdC5jCisrKyBiL2NyeXB0by9mY3J5cHQuYwpAQCAtNDA1LDE4ICs0MDUsMTggQEAKIAkuY2lhX2RlY3J5cHQJCT0JZmNyeXB0X2RlY3J5cHQgfSB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBmY3J5cHRfbW9kX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZmNyeXB0X2FsZyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZmNyeXB0X21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZmY3J5cHRfYWxnKTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KGZjcnlwdF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChmY3J5cHRfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkZDcnlwdCBDaXBoZXIgQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8va2hhemFkLmMgYi9jcnlwdG8va2hhemFkLmMKaW5kZXggNzA0ZWJmZS4uNTI3ZTRlMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2toYXphZC5jCisrKyBiL2NyeXB0by9raGF6YWQuYwpAQCAtODYyLDcgKzg2Miw3IEBACiAJLmNpYV9kZWNyeXB0CQk9CWtoYXphZF9kZWNyeXB0IH0gfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQga2hhemFkX21vZF9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CiAJCkBAIC04NzAsMTQgKzg3MCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQga2hhemFkX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZraGF6YWRfYWxnKTsKIH0KIAogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQoa2hhemFkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KGtoYXphZF9tb2RfZmluaSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiS2hhemFkIENyeXB0b2dyYXBoaWMgQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vbHJ3LmMgYi9jcnlwdG8vbHJ3LmMKaW5kZXggOWQ1MmU1OC4uOGVmNjY0ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2xydy5jCisrKyBiL2NyeXB0by9scncuYwpAQCAtOTEsOCArOTEsOSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5jKGJlMTI4ICppdikKIHsKLQlpZiAoIShpdi0+YiA9IGNwdV90b19iZTY0KGJlNjRfdG9fY3B1KGl2LT5iKSArIDEpKSkKLQkJaXYtPmEgPSBjcHVfdG9fYmU2NChiZTY0X3RvX2NwdShpdi0+YSkgKyAxKTsKKwliZTY0X2FkZF9jcHUoJml2LT5iLCAxKTsKKwlpZiAoIWl2LT5iKQorCQliZTY0X2FkZF9jcHUoJml2LT5hLCAxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxyd19yb3VuZChzdHJ1Y3Qgc2luZm8gKnMsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2x6by5jIGIvY3J5cHRvL2x6by5jCmluZGV4IDQ4YzMyODguLmI1ZTc3MDcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9sem8uYworKysgYi9jcnlwdG8vbHpvLmMKQEAgLTg5LDE4ICs4OSwxOCBAQAogCS5jb2FfZGVjb21wcmVzcyAgCT0gbHpvX2RlY29tcHJlc3MgfSB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBsem9fbW9kX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBsem9fbW9kX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Cittb2R1bGVfaW5pdChsem9fbW9kX2luaXQpOworbW9kdWxlX2V4aXQobHpvX21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJMWk8gQ29tcHJlc3Npb24gQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ0LmMgYi9jcnlwdG8vbWQ0LmMKaW5kZXggYzFiYzcxYi4uM2MxOWFhMCAxMDA2NDQKLS0tIGEvY3J5cHRvL21kNC5jCisrKyBiL2NyeXB0by9tZDQuYwpAQCAtMjMzLDE4ICsyMzMsMTggQEAKIAkuZGlhX2ZpbmFsICAJPQltZDRfZmluYWwgfSB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtZDRfbW9kX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtZDRfbW9kX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Cittb2R1bGVfaW5pdChtZDRfbW9kX2luaXQpOworbW9kdWxlX2V4aXQobWQ0X21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNRDQgTWVzc2FnZSBEaWdlc3QgQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ1LmMgYi9jcnlwdG8vbWQ1LmMKaW5kZXggOTNkMThlOC4uMzkyNjhmMyAxMDA2NDQKLS0tIGEvY3J5cHRvL21kNS5jCisrKyBiL2NyeXB0by9tZDUuYwpAQCAtMjI4LDE4ICsyMjgsMTggQEAKIAkuZGlhX2ZpbmFsICAJPQltZDVfZmluYWwgfSB9CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtZDVfbW9kX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtZDVfbW9kX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CiB9CiAKLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Cittb2R1bGVfaW5pdChtZDVfbW9kX2luaXQpOworbW9kdWxlX2V4aXQobWQ1X21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNRDUgTWVzc2FnZSBEaWdlc3QgQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vcHJvYy5jIGIvY3J5cHRvL3Byb2MuYwppbmRleCAzZDczMzIzLi4wMmZmNTY3IDEwMDY0NAotLS0gYS9jcnlwdG8vcHJvYy5jCisrKyBiL2NyeXB0by9wcm9jLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcnlwdG9fc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3J5cHRvX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CQk9IGNfc3RhcnQsCiAJLm5leHQJCT0gY19uZXh0LAogCS5zdG9wCQk9IGNfc3RvcCwKQEAgLTk5LDExICs5OSw3IEBACiAKIHZvaWQgX19pbml0IGNyeXB0b19pbml0X3Byb2Modm9pZCkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7Ci0JCi0JcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJjcnlwdG8iLCAwLCBOVUxMKTsKLQlpZiAocHJvYykKLQkJcHJvYy0+cHJvY19mb3BzID0gJnByb2NfY3J5cHRvX29wczsKKwlwcm9jX2NyZWF0ZSgiY3J5cHRvIiwgMCwgTlVMTCwgJnByb2NfY3J5cHRvX29wcyk7CiB9CiAKIHZvaWQgX19leGl0IGNyeXB0b19leGl0X3Byb2Modm9pZCkKZGlmZiAtLWdpdCBhL2NyeXB0by9zYWxzYTIwX2dlbmVyaWMuYyBiL2NyeXB0by9zYWxzYTIwX2dlbmVyaWMuYwppbmRleCAxZmE0ZTRkLi5iMDdkNTU5IDEwMDY0NAotLS0gYS9jcnlwdG8vc2Fsc2EyMF9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3NhbHNhMjBfZ2VuZXJpYy5jCkBAIC0yMzcsMTggKzIzNywxOCBAQAogCX0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhbHNhMjBfZ2VuZXJpY19tb2RfaW5pdCh2b2lkKQogewogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNhbHNhMjBfZ2VuZXJpY19tb2RfZmluaSh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KHNhbHNhMjBfZ2VuZXJpY19tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzYWxzYTIwX2dlbmVyaWNfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJTYWxzYTIwIHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2VycGVudC5jIGIvY3J5cHRvL3NlcnBlbnQuYwppbmRleCAyYjBhMTlhLi5iNjUxYTU1IDEwMDY0NAotLS0gYS9jcnlwdG8vc2VycGVudC5jCisrKyBiL2NyeXB0by9zZXJwZW50LmMKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCS5jaWFfZGVjcnlwdCAgCQk9CXRuZXByZXNfZGVjcnlwdCB9IH0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNlcnBlbnRfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2VycGVudF9hbGcpOwogCkBAIC01NzIsMTQgKzU3MiwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2VycGVudF9tb2RfZmluaSh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmdG5lcHJlc19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2VycGVudF9hbGcpOwogfQogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQoc2VycGVudF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZXJwZW50X21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTZXJwZW50IGFuZCB0bmVwcmVzIChrZXJuZWxpIGNvbXBhdGlibGUgc2VycGVudCByZXZlcnNlZCkgQ2lwaGVyIEFsZ29yaXRobSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTFfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTFfZ2VuZXJpYy5jCmluZGV4IDY4YzYyZjUuLmM3YzY4OTkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGExX2dlbmVyaWMuYworKysgYi9jcnlwdG8vc2hhMV9nZW5lcmljLmMKQEAgLTEyMCwxOCArMTIwLDE4IEBACiAJLmRpYV9maW5hbCAgCT0Jc2hhMV9maW5hbCB9IH0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNoYTFfZ2VuZXJpY19tb2RfaW5pdCh2b2lkKQogewogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGcpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNoYTFfZ2VuZXJpY19tb2RfZmluaSh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KHNoYTFfZ2VuZXJpY19tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzaGExX2dlbmVyaWNfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNIQTEgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCmluZGV4IDNjYzkzZmQuLjVhOGRkNDcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkuZGlhX2ZpbmFsCT0gc2hhMjI0X2ZpbmFsIH0gfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2hhMjU2X2dlbmVyaWNfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMzcwLDE0ICszNzAsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNoYTI1Nl9nZW5lcmljX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEyMjQpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMjU2KTsKIH0KIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KHNoYTI1Nl9nZW5lcmljX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNoYTI1Nl9nZW5lcmljX21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEEtMjI0IGFuZCBTSEEtMjU2IFNlY3VyZSBIYXNoIEFsZ29yaXRobSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTUxMi5jIGIvY3J5cHRvL3NoYTUxMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzljODAzLi4wMDAwMDAwCi0tLSBhL2NyeXB0by9zaGE1MTIuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKiBTSEEtNTEyIGNvZGUgYnkgSmVhbi1MdWMgQ29va2UgPGpsY29va2VAY2VydGFpbmtleS5jb20+Ci0gKgotICogQ29weXJpZ2h0IChjKSBKZWFuLUx1YyBDb29rZSA8amxjb29rZUBjZXJ0YWlua2V5LmNvbT4KLSAqIENvcHlyaWdodCAoYykgQW5kcmV3IE1jRG9uYWxkIDxhbmRyZXdAbWNkb25hbGQub3JnLnVrPgotICogQ29weXJpZ2h0IChjKSAyMDAzIEt5bGUgTWNNYXJ0aW4gPGt5bGVAZGViaWFuLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+Ci0KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLXN0cnVjdCBzaGE1MTJfY3R4IHsKLQl1NjQgc3RhdGVbOF07Ci0JdTMyIGNvdW50WzRdOwotCXU4IGJ1ZlsxMjhdOwotCXU2NCBXWzgwXTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdTY0IENoKHU2NCB4LCB1NjQgeSwgdTY0IHopCi17Ci0gICAgICAgIHJldHVybiB6IF4gKHggJiAoeSBeIHopKTsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgTWFqKHU2NCB4LCB1NjQgeSwgdTY0IHopCi17Ci0gICAgICAgIHJldHVybiAoeCAmIHkpIHwgKHogJiAoeCB8IHkpKTsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgUk9SdTY0KHU2NCB4LCB1NjQgeSkKLXsKLSAgICAgICAgcmV0dXJuICh4ID4+IHkpIHwgKHggPDwgKDY0IC0geSkpOwotfQotCi1zdGF0aWMgY29uc3QgdTY0IHNoYTUxMl9LWzgwXSA9IHsKLSAgICAgICAgMHg0MjhhMmY5OGQ3MjhhZTIyVUxMLCAweDcxMzc0NDkxMjNlZjY1Y2RVTEwsIDB4YjVjMGZiY2ZlYzRkM2IyZlVMTCwKLSAgICAgICAgMHhlOWI1ZGJhNTgxODlkYmJjVUxMLCAweDM5NTZjMjViZjM0OGI1MzhVTEwsIDB4NTlmMTExZjFiNjA1ZDAxOVVMTCwKLSAgICAgICAgMHg5MjNmODJhNGFmMTk0ZjliVUxMLCAweGFiMWM1ZWQ1ZGE2ZDgxMThVTEwsIDB4ZDgwN2FhOThhMzAzMDI0MlVMTCwKLSAgICAgICAgMHgxMjgzNWIwMTQ1NzA2ZmJlVUxMLCAweDI0MzE4NWJlNGVlNGIyOGNVTEwsIDB4NTUwYzdkYzNkNWZmYjRlMlVMTCwKLSAgICAgICAgMHg3MmJlNWQ3NGYyN2I4OTZmVUxMLCAweDgwZGViMWZlM2IxNjk2YjFVTEwsIDB4OWJkYzA2YTcyNWM3MTIzNVVMTCwKLSAgICAgICAgMHhjMTliZjE3NGNmNjkyNjk0VUxMLCAweGU0OWI2OWMxOWVmMTRhZDJVTEwsIDB4ZWZiZTQ3ODYzODRmMjVlM1VMTCwKLSAgICAgICAgMHgwZmMxOWRjNjhiOGNkNWI1VUxMLCAweDI0MGNhMWNjNzdhYzljNjVVTEwsIDB4MmRlOTJjNmY1OTJiMDI3NVVMTCwKLSAgICAgICAgMHg0YTc0ODRhYTZlYTZlNDgzVUxMLCAweDVjYjBhOWRjYmQ0MWZiZDRVTEwsIDB4NzZmOTg4ZGE4MzExNTNiNVVMTCwKLSAgICAgICAgMHg5ODNlNTE1MmVlNjZkZmFiVUxMLCAweGE4MzFjNjZkMmRiNDMyMTBVTEwsIDB4YjAwMzI3Yzg5OGZiMjEzZlVMTCwKLSAgICAgICAgMHhiZjU5N2ZjN2JlZWYwZWU0VUxMLCAweGM2ZTAwYmYzM2RhODhmYzJVTEwsIDB4ZDVhNzkxNDc5MzBhYTcyNVVMTCwKLSAgICAgICAgMHgwNmNhNjM1MWUwMDM4MjZmVUxMLCAweDE0MjkyOTY3MGEwZTZlNzBVTEwsIDB4MjdiNzBhODU0NmQyMmZmY1VMTCwKLSAgICAgICAgMHgyZTFiMjEzODVjMjZjOTI2VUxMLCAweDRkMmM2ZGZjNWFjNDJhZWRVTEwsIDB4NTMzODBkMTM5ZDk1YjNkZlVMTCwKLSAgICAgICAgMHg2NTBhNzM1NDhiYWY2M2RlVUxMLCAweDc2NmEwYWJiM2M3N2IyYThVTEwsIDB4ODFjMmM5MmU0N2VkYWVlNlVMTCwKLSAgICAgICAgMHg5MjcyMmM4NTE0ODIzNTNiVUxMLCAweGEyYmZlOGExNGNmMTAzNjRVTEwsIDB4YTgxYTY2NGJiYzQyMzAwMVVMTCwKLSAgICAgICAgMHhjMjRiOGI3MGQwZjg5NzkxVUxMLCAweGM3NmM1MWEzMDY1NGJlMzBVTEwsIDB4ZDE5MmU4MTlkNmVmNTIxOFVMTCwKLSAgICAgICAgMHhkNjk5MDYyNDU1NjVhOTEwVUxMLCAweGY0MGUzNTg1NTc3MTIwMmFVTEwsIDB4MTA2YWEwNzAzMmJiZDFiOFVMTCwKLSAgICAgICAgMHgxOWE0YzExNmI4ZDJkMGM4VUxMLCAweDFlMzc2YzA4NTE0MWFiNTNVTEwsIDB4Mjc0ODc3NGNkZjhlZWI5OVVMTCwKLSAgICAgICAgMHgzNGIwYmNiNWUxOWI0OGE4VUxMLCAweDM5MWMwY2IzYzVjOTVhNjNVTEwsIDB4NGVkOGFhNGFlMzQxOGFjYlVMTCwKLSAgICAgICAgMHg1YjljY2E0Zjc3NjNlMzczVUxMLCAweDY4MmU2ZmYzZDZiMmI4YTNVTEwsIDB4NzQ4ZjgyZWU1ZGVmYjJmY1VMTCwKLSAgICAgICAgMHg3OGE1NjM2ZjQzMTcyZjYwVUxMLCAweDg0Yzg3ODE0YTFmMGFiNzJVTEwsIDB4OGNjNzAyMDgxYTY0MzllY1VMTCwKLSAgICAgICAgMHg5MGJlZmZmYTIzNjMxZTI4VUxMLCAweGE0NTA2Y2ViZGU4MmJkZTlVTEwsIDB4YmVmOWEzZjdiMmM2NzkxNVVMTCwKLSAgICAgICAgMHhjNjcxNzhmMmUzNzI1MzJiVUxMLCAweGNhMjczZWNlZWEyNjYxOWNVTEwsIDB4ZDE4NmI4YzcyMWMwYzIwN1VMTCwKLSAgICAgICAgMHhlYWRhN2RkNmNkZTBlYjFlVUxMLCAweGY1N2Q0ZjdmZWU2ZWQxNzhVTEwsIDB4MDZmMDY3YWE3MjE3NmZiYVVMTCwKLSAgICAgICAgMHgwYTYzN2RjNWEyYzg5OGE2VUxMLCAweDExM2Y5ODA0YmVmOTBkYWVVTEwsIDB4MWI3MTBiMzUxMzFjNDcxYlVMTCwKLSAgICAgICAgMHgyOGRiNzdmNTIzMDQ3ZDg0VUxMLCAweDMyY2FhYjdiNDBjNzI0OTNVTEwsIDB4M2M5ZWJlMGExNWM5YmViY1VMTCwKLSAgICAgICAgMHg0MzFkNjdjNDljMTAwZDRjVUxMLCAweDRjYzVkNGJlY2IzZTQyYjZVTEwsIDB4NTk3ZjI5OWNmYzY1N2UyYVVMTCwKLSAgICAgICAgMHg1ZmNiNmZhYjNhZDZmYWVjVUxMLCAweDZjNDQxOThjNGE0NzU4MTdVTEwsCi19OwotCi0jZGVmaW5lIGUwKHgpICAgICAgIChST1J1NjQoeCwyOCkgXiBST1J1NjQoeCwzNCkgXiBST1J1NjQoeCwzOSkpCi0jZGVmaW5lIGUxKHgpICAgICAgIChST1J1NjQoeCwxNCkgXiBST1J1NjQoeCwxOCkgXiBST1J1NjQoeCw0MSkpCi0jZGVmaW5lIHMwKHgpICAgICAgIChST1J1NjQoeCwgMSkgXiBST1J1NjQoeCwgOCkgXiAoeCA+PiA3KSkKLSNkZWZpbmUgczEoeCkgICAgICAgKFJPUnU2NCh4LDE5KSBeIFJPUnU2NCh4LDYxKSBeICh4ID4+IDYpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgTE9BRF9PUChpbnQgSSwgdTY0ICpXLCBjb25zdCB1OCAqaW5wdXQpCi17Ci0JV1tJXSA9IF9fYmU2NF90b19jcHUoICgoX19iZTY0KikoaW5wdXQpKVtJXSApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgQkxFTkRfT1AoaW50IEksIHU2NCAqVykKLXsKLQlXW0ldID0gczEoV1tJLTJdKSArIFdbSS03XSArIHMwKFdbSS0xNV0pICsgV1tJLTE2XTsKLX0KLQotc3RhdGljIHZvaWQKLXNoYTUxMl90cmFuc2Zvcm0odTY0ICpzdGF0ZSwgdTY0ICpXLCBjb25zdCB1OCAqaW5wdXQpCi17Ci0JdTY0IGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIHQxLCB0MjsKLQotCWludCBpOwotCi0JLyogbG9hZCB0aGUgaW5wdXQgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0gICAgICAgICAgICAgICAgTE9BRF9PUChpLCBXLCBpbnB1dCk7Ci0KLSAgICAgICAgZm9yIChpID0gMTY7IGkgPCA4MDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQkxFTkRfT1AoaSwgVyk7Ci0gICAgICAgIH0KLQotCS8qIGxvYWQgdGhlIHN0YXRlIGludG8gb3VyIHJlZ2lzdGVycyAqLwotCWE9c3RhdGVbMF07ICAgYj1zdGF0ZVsxXTsgICBjPXN0YXRlWzJdOyAgIGQ9c3RhdGVbM107ICAKLQllPXN0YXRlWzRdOyAgIGY9c3RhdGVbNV07ICAgZz1zdGF0ZVs2XTsgICBoPXN0YXRlWzddOyAgCi0gIAotCS8qIG5vdyBpdGVyYXRlICovCi0JZm9yIChpPTA7IGk8ODA7IGkrPTgpIHsKLQkJdDEgPSBoICsgZTEoZSkgKyBDaChlLGYsZykgKyBzaGE1MTJfS1tpICBdICsgV1tpICBdOwotCQl0MiA9IGUwKGEpICsgTWFqKGEsYixjKTsgICAgZCs9dDE7ICAgIGg9dDErdDI7Ci0JCXQxID0gZyArIGUxKGQpICsgQ2goZCxlLGYpICsgc2hhNTEyX0tbaSsxXSArIFdbaSsxXTsKLQkJdDIgPSBlMChoKSArIE1haihoLGEsYik7ICAgIGMrPXQxOyAgICBnPXQxK3QyOwotCQl0MSA9IGYgKyBlMShjKSArIENoKGMsZCxlKSArIHNoYTUxMl9LW2krMl0gKyBXW2krMl07Ci0JCXQyID0gZTAoZykgKyBNYWooZyxoLGEpOyAgICBiKz10MTsgICAgZj10MSt0MjsKLQkJdDEgPSBlICsgZTEoYikgKyBDaChiLGMsZCkgKyBzaGE1MTJfS1tpKzNdICsgV1tpKzNdOwotCQl0MiA9IGUwKGYpICsgTWFqKGYsZyxoKTsgICAgYSs9dDE7ICAgIGU9dDErdDI7Ci0JCXQxID0gZCArIGUxKGEpICsgQ2goYSxiLGMpICsgc2hhNTEyX0tbaSs0XSArIFdbaSs0XTsKLQkJdDIgPSBlMChlKSArIE1haihlLGYsZyk7ICAgIGgrPXQxOyAgICBkPXQxK3QyOwotCQl0MSA9IGMgKyBlMShoKSArIENoKGgsYSxiKSArIHNoYTUxMl9LW2krNV0gKyBXW2krNV07Ci0JCXQyID0gZTAoZCkgKyBNYWooZCxlLGYpOyAgICBnKz10MTsgICAgYz10MSt0MjsKLQkJdDEgPSBiICsgZTEoZykgKyBDaChnLGgsYSkgKyBzaGE1MTJfS1tpKzZdICsgV1tpKzZdOwotCQl0MiA9IGUwKGMpICsgTWFqKGMsZCxlKTsgICAgZis9dDE7ICAgIGI9dDErdDI7Ci0JCXQxID0gYSArIGUxKGYpICsgQ2goZixnLGgpICsgc2hhNTEyX0tbaSs3XSArIFdbaSs3XTsKLQkJdDIgPSBlMChiKSArIE1haihiLGMsZCk7ICAgIGUrPXQxOyAgICBhPXQxK3QyOwotCX0KLSAgCi0Jc3RhdGVbMF0gKz0gYTsgc3RhdGVbMV0gKz0gYjsgc3RhdGVbMl0gKz0gYzsgc3RhdGVbM10gKz0gZDsgIAotCXN0YXRlWzRdICs9IGU7IHN0YXRlWzVdICs9IGY7IHN0YXRlWzZdICs9IGc7IHN0YXRlWzddICs9IGg7ICAKLQotCS8qIGVyYXNlIG91ciBkYXRhICovCi0JYSA9IGIgPSBjID0gZCA9IGUgPSBmID0gZyA9IGggPSB0MSA9IHQyID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLXNoYTUxMl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCi17Ci0Jc3RydWN0IHNoYTUxMl9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXNjdHgtPnN0YXRlWzBdID0gU0hBNTEyX0gwOwotCXNjdHgtPnN0YXRlWzFdID0gU0hBNTEyX0gxOwotCXNjdHgtPnN0YXRlWzJdID0gU0hBNTEyX0gyOwotCXNjdHgtPnN0YXRlWzNdID0gU0hBNTEyX0gzOwotCXNjdHgtPnN0YXRlWzRdID0gU0hBNTEyX0g0OwotCXNjdHgtPnN0YXRlWzVdID0gU0hBNTEyX0g1OwotCXNjdHgtPnN0YXRlWzZdID0gU0hBNTEyX0g2OwotCXNjdHgtPnN0YXRlWzddID0gU0hBNTEyX0g3OwotCXNjdHgtPmNvdW50WzBdID0gc2N0eC0+Y291bnRbMV0gPSBzY3R4LT5jb3VudFsyXSA9IHNjdHgtPmNvdW50WzNdID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLXNoYTM4NF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCi17Ci0Jc3RydWN0IHNoYTUxMl9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXNjdHgtPnN0YXRlWzBdID0gU0hBMzg0X0gwOwotCXNjdHgtPnN0YXRlWzFdID0gU0hBMzg0X0gxOwotCXNjdHgtPnN0YXRlWzJdID0gU0hBMzg0X0gyOwotCXNjdHgtPnN0YXRlWzNdID0gU0hBMzg0X0gzOwotCXNjdHgtPnN0YXRlWzRdID0gU0hBMzg0X0g0OwotCXNjdHgtPnN0YXRlWzVdID0gU0hBMzg0X0g1OwotCXNjdHgtPnN0YXRlWzZdID0gU0hBMzg0X0g2OwotCXNjdHgtPnN0YXRlWzddID0gU0hBMzg0X0g3OwotICAgICAgICBzY3R4LT5jb3VudFswXSA9IHNjdHgtPmNvdW50WzFdID0gc2N0eC0+Y291bnRbMl0gPSBzY3R4LT5jb3VudFszXSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zaGE1MTJfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXN0cnVjdCBzaGE1MTJfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQotCXVuc2lnbmVkIGludCBpLCBpbmRleCwgcGFydF9sZW47Ci0KLQkvKiBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgMTI4ICovCi0JaW5kZXggPSAodW5zaWduZWQgaW50KSgoc2N0eC0+Y291bnRbMF0gPj4gMykgJiAweDdGKTsKLQkKLQkvKiBVcGRhdGUgbnVtYmVyIG9mIGJpdHMgKi8KLQlpZiAoKHNjdHgtPmNvdW50WzBdICs9IChsZW4gPDwgMykpIDwgKGxlbiA8PCAzKSkgewotCQlpZiAoKHNjdHgtPmNvdW50WzFdICs9IDEpIDwgMSkKLQkJCWlmICgoc2N0eC0+Y291bnRbMl0gKz0gMSkgPCAxKQotCQkJCXNjdHgtPmNvdW50WzNdKys7Ci0JCXNjdHgtPmNvdW50WzFdICs9IChsZW4gPj4gMjkpOwotCX0KLQkKLSAgICAgICAgcGFydF9sZW4gPSAxMjggLSBpbmRleDsKLQkKLQkvKiBUcmFuc2Zvcm0gYXMgbWFueSB0aW1lcyBhcyBwb3NzaWJsZS4gKi8KLQlpZiAobGVuID49IHBhcnRfbGVuKSB7Ci0JCW1lbWNweSgmc2N0eC0+YnVmW2luZGV4XSwgZGF0YSwgcGFydF9sZW4pOwotCQlzaGE1MTJfdHJhbnNmb3JtKHNjdHgtPnN0YXRlLCBzY3R4LT5XLCBzY3R4LT5idWYpOwotCi0JCWZvciAoaSA9IHBhcnRfbGVuOyBpICsgMTI3IDwgbGVuOyBpKz0xMjgpCi0JCQlzaGE1MTJfdHJhbnNmb3JtKHNjdHgtPnN0YXRlLCBzY3R4LT5XLCAmZGF0YVtpXSk7Ci0KLQkJaW5kZXggPSAwOwotCX0gZWxzZSB7Ci0JCWkgPSAwOwotCX0KLQotCS8qIEJ1ZmZlciByZW1haW5pbmcgaW5wdXQgKi8KLQltZW1jcHkoJnNjdHgtPmJ1ZltpbmRleF0sICZkYXRhW2ldLCBsZW4gLSBpKTsKLQotCS8qIGVyYXNlIG91ciBkYXRhICovCi0JbWVtc2V0KHNjdHgtPlcsIDAsIHNpemVvZihzY3R4LT5XKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zaGE1MTJfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmhhc2gpCi17Ci0Jc3RydWN0IHNoYTUxMl9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotICAgICAgICBzdGF0aWMgdTggcGFkZGluZ1sxMjhdID0geyAweDgwLCB9OwotCV9fYmU2NCAqZHN0ID0gKF9fYmU2NCAqKWhhc2g7Ci0JX19iZTMyIGJpdHNbNF07Ci0JdW5zaWduZWQgaW50IGluZGV4LCBwYWRfbGVuOwotCWludCBpOwotCi0JLyogU2F2ZSBudW1iZXIgb2YgYml0cyAqLwotCWJpdHNbM10gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFswXSk7Ci0JYml0c1syXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzFdKTsKLQliaXRzWzFdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbMl0pOwotCWJpdHNbMF0gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFszXSk7Ci0KLQkvKiBQYWQgb3V0IHRvIDExMiBtb2QgMTI4LiAqLwotCWluZGV4ID0gKHNjdHgtPmNvdW50WzBdID4+IDMpICYgMHg3ZjsKLQlwYWRfbGVuID0gKGluZGV4IDwgMTEyKSA/ICgxMTIgLSBpbmRleCkgOiAoKDEyOCsxMTIpIC0gaW5kZXgpOwotCXNoYTUxMl91cGRhdGUodGZtLCBwYWRkaW5nLCBwYWRfbGVuKTsKLQotCS8qIEFwcGVuZCBsZW5ndGggKGJlZm9yZSBwYWRkaW5nKSAqLwotCXNoYTUxMl91cGRhdGUodGZtLCAoY29uc3QgdTggKiliaXRzLCBzaXplb2YoYml0cykpOwotCi0JLyogU3RvcmUgc3RhdGUgaW4gZGlnZXN0ICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZHN0W2ldID0gY3B1X3RvX2JlNjQoc2N0eC0+c3RhdGVbaV0pOwotCi0JLyogWmVyb2l6ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICovCi0JbWVtc2V0KHNjdHgsIDAsIHNpemVvZihzdHJ1Y3Qgc2hhNTEyX2N0eCkpOwotfQotCi1zdGF0aWMgdm9pZCBzaGEzODRfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmhhc2gpCi17Ci0gICAgICAgIHU4IERbNjRdOwotCi0Jc2hhNTEyX2ZpbmFsKHRmbSwgRCk7Ci0KLSAgICAgICAgbWVtY3B5KGhhc2gsIEQsIDQ4KTsKLSAgICAgICAgbWVtc2V0KEQsIDAsIDY0KTsKLX0KLQotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTUxMiA9IHsKLSAgICAgICAgLmNyYV9uYW1lICAgICAgID0gInNoYTUxMiIsCi0gICAgICAgIC5jcmFfZmxhZ3MgICAgICA9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUgID0gU0hBNTEyX0JMT0NLX1NJWkUsCi0gICAgICAgIC5jcmFfY3R4c2l6ZSAgICA9IHNpemVvZihzdHJ1Y3Qgc2hhNTEyX2N0eCksCi0gICAgICAgIC5jcmFfbW9kdWxlICAgICA9IFRISVNfTU9EVUxFLAotCS5jcmFfYWxpZ25tYXNrCT0gMywKLSAgICAgICAgLmNyYV9saXN0ICAgICAgID0gTElTVF9IRUFEX0lOSVQoc2hhNTEyLmNyYV9saXN0KSwKLSAgICAgICAgLmNyYV91ICAgICAgICAgID0geyAuZGlnZXN0ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlhX2RpZ2VzdHNpemUgPSBTSEE1MTJfRElHRVNUX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWFfaW5pdCAgICAgICA9IHNoYTUxMl9pbml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlhX3VwZGF0ZSAgICAgPSBzaGE1MTJfdXBkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlhX2ZpbmFsICAgICAgPSBzaGE1MTJfZmluYWwgfQotICAgICAgICB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhMzg0ID0gewotICAgICAgICAuY3JhX25hbWUgICAgICAgPSAic2hhMzg0IiwKLSAgICAgICAgLmNyYV9mbGFncyAgICAgID0gQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZSAgPSBTSEEzODRfQkxPQ0tfU0laRSwKLSAgICAgICAgLmNyYV9jdHhzaXplICAgID0gc2l6ZW9mKHN0cnVjdCBzaGE1MTJfY3R4KSwKLQkuY3JhX2FsaWdubWFzawk9IDMsCi0gICAgICAgIC5jcmFfbW9kdWxlICAgICA9IFRISVNfTU9EVUxFLAotICAgICAgICAuY3JhX2xpc3QgICAgICAgPSBMSVNUX0hFQURfSU5JVChzaGEzODQuY3JhX2xpc3QpLAotICAgICAgICAuY3JhX3UgICAgICAgICAgPSB7IC5kaWdlc3QgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWFfZGlnZXN0c2l6ZSA9IFNIQTM4NF9ESUdFU1RfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpYV9pbml0ICAgICAgID0gc2hhMzg0X2luaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWFfdXBkYXRlICAgICA9IHNoYTUxMl91cGRhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWFfZmluYWwgICAgICA9IHNoYTM4NF9maW5hbCB9Ci0gICAgICAgIH0KLX07Ci0KLU1PRFVMRV9BTElBUygic2hhMzg0Iik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKLXsKLSAgICAgICAgaW50IHJldCA9IDA7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGEzODQpKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIGlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhNTEyKSkgPCAwKQotICAgICAgICAgICAgICAgIGNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMzg0KTsKLW91dDoKLSAgICAgICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKLXsKLSAgICAgICAgY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEzODQpOwotICAgICAgICBjcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMik7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU0hBLTUxMiBhbmQgU0hBLTM4NCBTZWN1cmUgSGFzaCBBbGdvcml0aG1zIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhNTEyX2dlbmVyaWMuYyBiL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMzY4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhNTEyX2dlbmVyaWMuYwpAQCAtMCwwICsxLDMwNiBAQAorLyogU0hBLTUxMiBjb2RlIGJ5IEplYW4tTHVjIENvb2tlIDxqbGNvb2tlQGNlcnRhaW5rZXkuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgSmVhbi1MdWMgQ29va2UgPGpsY29va2VAY2VydGFpbmtleS5jb20+CisgKiBDb3B5cmlnaHQgKGMpIEFuZHJldyBNY0RvbmFsZCA8YW5kcmV3QG1jZG9uYWxkLm9yZy51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBLeWxlIE1jTWFydGluIDxreWxlQGRlYmlhbi5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCitzdHJ1Y3Qgc2hhNTEyX2N0eCB7CisJdTY0IHN0YXRlWzhdOworCXUzMiBjb3VudFs0XTsKKwl1OCBidWZbMTI4XTsKKwl1NjQgV1s4MF07Cit9OworCitzdGF0aWMgaW5saW5lIHU2NCBDaCh1NjQgeCwgdTY0IHksIHU2NCB6KQoreworICAgICAgICByZXR1cm4geiBeICh4ICYgKHkgXiB6KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IE1haih1NjQgeCwgdTY0IHksIHU2NCB6KQoreworICAgICAgICByZXR1cm4gKHggJiB5KSB8ICh6ICYgKHggfCB5KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IFJPUnU2NCh1NjQgeCwgdTY0IHkpCit7CisgICAgICAgIHJldHVybiAoeCA+PiB5KSB8ICh4IDw8ICg2NCAtIHkpKTsKK30KKworc3RhdGljIGNvbnN0IHU2NCBzaGE1MTJfS1s4MF0gPSB7CisgICAgICAgIDB4NDI4YTJmOThkNzI4YWUyMlVMTCwgMHg3MTM3NDQ5MTIzZWY2NWNkVUxMLCAweGI1YzBmYmNmZWM0ZDNiMmZVTEwsCisgICAgICAgIDB4ZTliNWRiYTU4MTg5ZGJiY1VMTCwgMHgzOTU2YzI1YmYzNDhiNTM4VUxMLCAweDU5ZjExMWYxYjYwNWQwMTlVTEwsCisgICAgICAgIDB4OTIzZjgyYTRhZjE5NGY5YlVMTCwgMHhhYjFjNWVkNWRhNmQ4MTE4VUxMLCAweGQ4MDdhYTk4YTMwMzAyNDJVTEwsCisgICAgICAgIDB4MTI4MzViMDE0NTcwNmZiZVVMTCwgMHgyNDMxODViZTRlZTRiMjhjVUxMLCAweDU1MGM3ZGMzZDVmZmI0ZTJVTEwsCisgICAgICAgIDB4NzJiZTVkNzRmMjdiODk2ZlVMTCwgMHg4MGRlYjFmZTNiMTY5NmIxVUxMLCAweDliZGMwNmE3MjVjNzEyMzVVTEwsCisgICAgICAgIDB4YzE5YmYxNzRjZjY5MjY5NFVMTCwgMHhlNDliNjljMTllZjE0YWQyVUxMLCAweGVmYmU0Nzg2Mzg0ZjI1ZTNVTEwsCisgICAgICAgIDB4MGZjMTlkYzY4YjhjZDViNVVMTCwgMHgyNDBjYTFjYzc3YWM5YzY1VUxMLCAweDJkZTkyYzZmNTkyYjAyNzVVTEwsCisgICAgICAgIDB4NGE3NDg0YWE2ZWE2ZTQ4M1VMTCwgMHg1Y2IwYTlkY2JkNDFmYmQ0VUxMLCAweDc2Zjk4OGRhODMxMTUzYjVVTEwsCisgICAgICAgIDB4OTgzZTUxNTJlZTY2ZGZhYlVMTCwgMHhhODMxYzY2ZDJkYjQzMjEwVUxMLCAweGIwMDMyN2M4OThmYjIxM2ZVTEwsCisgICAgICAgIDB4YmY1OTdmYzdiZWVmMGVlNFVMTCwgMHhjNmUwMGJmMzNkYTg4ZmMyVUxMLCAweGQ1YTc5MTQ3OTMwYWE3MjVVTEwsCisgICAgICAgIDB4MDZjYTYzNTFlMDAzODI2ZlVMTCwgMHgxNDI5Mjk2NzBhMGU2ZTcwVUxMLCAweDI3YjcwYTg1NDZkMjJmZmNVTEwsCisgICAgICAgIDB4MmUxYjIxMzg1YzI2YzkyNlVMTCwgMHg0ZDJjNmRmYzVhYzQyYWVkVUxMLCAweDUzMzgwZDEzOWQ5NWIzZGZVTEwsCisgICAgICAgIDB4NjUwYTczNTQ4YmFmNjNkZVVMTCwgMHg3NjZhMGFiYjNjNzdiMmE4VUxMLCAweDgxYzJjOTJlNDdlZGFlZTZVTEwsCisgICAgICAgIDB4OTI3MjJjODUxNDgyMzUzYlVMTCwgMHhhMmJmZThhMTRjZjEwMzY0VUxMLCAweGE4MWE2NjRiYmM0MjMwMDFVTEwsCisgICAgICAgIDB4YzI0YjhiNzBkMGY4OTc5MVVMTCwgMHhjNzZjNTFhMzA2NTRiZTMwVUxMLCAweGQxOTJlODE5ZDZlZjUyMThVTEwsCisgICAgICAgIDB4ZDY5OTA2MjQ1NTY1YTkxMFVMTCwgMHhmNDBlMzU4NTU3NzEyMDJhVUxMLCAweDEwNmFhMDcwMzJiYmQxYjhVTEwsCisgICAgICAgIDB4MTlhNGMxMTZiOGQyZDBjOFVMTCwgMHgxZTM3NmMwODUxNDFhYjUzVUxMLCAweDI3NDg3NzRjZGY4ZWViOTlVTEwsCisgICAgICAgIDB4MzRiMGJjYjVlMTliNDhhOFVMTCwgMHgzOTFjMGNiM2M1Yzk1YTYzVUxMLCAweDRlZDhhYTRhZTM0MThhY2JVTEwsCisgICAgICAgIDB4NWI5Y2NhNGY3NzYzZTM3M1VMTCwgMHg2ODJlNmZmM2Q2YjJiOGEzVUxMLCAweDc0OGY4MmVlNWRlZmIyZmNVTEwsCisgICAgICAgIDB4NzhhNTYzNmY0MzE3MmY2MFVMTCwgMHg4NGM4NzgxNGExZjBhYjcyVUxMLCAweDhjYzcwMjA4MWE2NDM5ZWNVTEwsCisgICAgICAgIDB4OTBiZWZmZmEyMzYzMWUyOFVMTCwgMHhhNDUwNmNlYmRlODJiZGU5VUxMLCAweGJlZjlhM2Y3YjJjNjc5MTVVTEwsCisgICAgICAgIDB4YzY3MTc4ZjJlMzcyNTMyYlVMTCwgMHhjYTI3M2VjZWVhMjY2MTljVUxMLCAweGQxODZiOGM3MjFjMGMyMDdVTEwsCisgICAgICAgIDB4ZWFkYTdkZDZjZGUwZWIxZVVMTCwgMHhmNTdkNGY3ZmVlNmVkMTc4VUxMLCAweDA2ZjA2N2FhNzIxNzZmYmFVTEwsCisgICAgICAgIDB4MGE2MzdkYzVhMmM4OThhNlVMTCwgMHgxMTNmOTgwNGJlZjkwZGFlVUxMLCAweDFiNzEwYjM1MTMxYzQ3MWJVTEwsCisgICAgICAgIDB4MjhkYjc3ZjUyMzA0N2Q4NFVMTCwgMHgzMmNhYWI3YjQwYzcyNDkzVUxMLCAweDNjOWViZTBhMTVjOWJlYmNVTEwsCisgICAgICAgIDB4NDMxZDY3YzQ5YzEwMGQ0Y1VMTCwgMHg0Y2M1ZDRiZWNiM2U0MmI2VUxMLCAweDU5N2YyOTljZmM2NTdlMmFVTEwsCisgICAgICAgIDB4NWZjYjZmYWIzYWQ2ZmFlY1VMTCwgMHg2YzQ0MTk4YzRhNDc1ODE3VUxMLAorfTsKKworI2RlZmluZSBlMCh4KSAgICAgICAoUk9SdTY0KHgsMjgpIF4gUk9SdTY0KHgsMzQpIF4gUk9SdTY0KHgsMzkpKQorI2RlZmluZSBlMSh4KSAgICAgICAoUk9SdTY0KHgsMTQpIF4gUk9SdTY0KHgsMTgpIF4gUk9SdTY0KHgsNDEpKQorI2RlZmluZSBzMCh4KSAgICAgICAoUk9SdTY0KHgsIDEpIF4gUk9SdTY0KHgsIDgpIF4gKHggPj4gNykpCisjZGVmaW5lIHMxKHgpICAgICAgIChST1J1NjQoeCwxOSkgXiBST1J1NjQoeCw2MSkgXiAoeCA+PiA2KSkKKworc3RhdGljIGlubGluZSB2b2lkIExPQURfT1AoaW50IEksIHU2NCAqVywgY29uc3QgdTggKmlucHV0KQoreworCVdbSV0gPSBfX2JlNjRfdG9fY3B1KCAoKF9fYmU2NCopKGlucHV0KSlbSV0gKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEJMRU5EX09QKGludCBJLCB1NjQgKlcpCit7CisJV1tJXSA9IHMxKFdbSS0yXSkgKyBXW0ktN10gKyBzMChXW0ktMTVdKSArIFdbSS0xNl07Cit9CisKK3N0YXRpYyB2b2lkCitzaGE1MTJfdHJhbnNmb3JtKHU2NCAqc3RhdGUsIHU2NCAqVywgY29uc3QgdTggKmlucHV0KQoreworCXU2NCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCB0MSwgdDI7CisKKwlpbnQgaTsKKworCS8qIGxvYWQgdGhlIGlucHV0ICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorICAgICAgICAgICAgICAgIExPQURfT1AoaSwgVywgaW5wdXQpOworCisgICAgICAgIGZvciAoaSA9IDE2OyBpIDwgODA7IGkrKykgeworICAgICAgICAgICAgICAgIEJMRU5EX09QKGksIFcpOworICAgICAgICB9CisKKwkvKiBsb2FkIHRoZSBzdGF0ZSBpbnRvIG91ciByZWdpc3RlcnMgKi8KKwlhPXN0YXRlWzBdOyAgIGI9c3RhdGVbMV07ICAgYz1zdGF0ZVsyXTsgICBkPXN0YXRlWzNdOworCWU9c3RhdGVbNF07ICAgZj1zdGF0ZVs1XTsgICBnPXN0YXRlWzZdOyAgIGg9c3RhdGVbN107CisKKwkvKiBub3cgaXRlcmF0ZSAqLworCWZvciAoaT0wOyBpPDgwOyBpKz04KSB7CisJCXQxID0gaCArIGUxKGUpICsgQ2goZSxmLGcpICsgc2hhNTEyX0tbaSAgXSArIFdbaSAgXTsKKwkJdDIgPSBlMChhKSArIE1haihhLGIsYyk7ICAgIGQrPXQxOyAgICBoPXQxK3QyOworCQl0MSA9IGcgKyBlMShkKSArIENoKGQsZSxmKSArIHNoYTUxMl9LW2krMV0gKyBXW2krMV07CisJCXQyID0gZTAoaCkgKyBNYWooaCxhLGIpOyAgICBjKz10MTsgICAgZz10MSt0MjsKKwkJdDEgPSBmICsgZTEoYykgKyBDaChjLGQsZSkgKyBzaGE1MTJfS1tpKzJdICsgV1tpKzJdOworCQl0MiA9IGUwKGcpICsgTWFqKGcsaCxhKTsgICAgYis9dDE7ICAgIGY9dDErdDI7CisJCXQxID0gZSArIGUxKGIpICsgQ2goYixjLGQpICsgc2hhNTEyX0tbaSszXSArIFdbaSszXTsKKwkJdDIgPSBlMChmKSArIE1haihmLGcsaCk7ICAgIGErPXQxOyAgICBlPXQxK3QyOworCQl0MSA9IGQgKyBlMShhKSArIENoKGEsYixjKSArIHNoYTUxMl9LW2krNF0gKyBXW2krNF07CisJCXQyID0gZTAoZSkgKyBNYWooZSxmLGcpOyAgICBoKz10MTsgICAgZD10MSt0MjsKKwkJdDEgPSBjICsgZTEoaCkgKyBDaChoLGEsYikgKyBzaGE1MTJfS1tpKzVdICsgV1tpKzVdOworCQl0MiA9IGUwKGQpICsgTWFqKGQsZSxmKTsgICAgZys9dDE7ICAgIGM9dDErdDI7CisJCXQxID0gYiArIGUxKGcpICsgQ2goZyxoLGEpICsgc2hhNTEyX0tbaSs2XSArIFdbaSs2XTsKKwkJdDIgPSBlMChjKSArIE1haihjLGQsZSk7ICAgIGYrPXQxOyAgICBiPXQxK3QyOworCQl0MSA9IGEgKyBlMShmKSArIENoKGYsZyxoKSArIHNoYTUxMl9LW2krN10gKyBXW2krN107CisJCXQyID0gZTAoYikgKyBNYWooYixjLGQpOyAgICBlKz10MTsgICAgYT10MSt0MjsKKwl9CisKKwlzdGF0ZVswXSArPSBhOyBzdGF0ZVsxXSArPSBiOyBzdGF0ZVsyXSArPSBjOyBzdGF0ZVszXSArPSBkOworCXN0YXRlWzRdICs9IGU7IHN0YXRlWzVdICs9IGY7IHN0YXRlWzZdICs9IGc7IHN0YXRlWzddICs9IGg7CisKKwkvKiBlcmFzZSBvdXIgZGF0YSAqLworCWEgPSBiID0gYyA9IGQgPSBlID0gZiA9IGcgPSBoID0gdDEgPSB0MiA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitzaGE1MTJfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBzaGE1MTJfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzY3R4LT5zdGF0ZVswXSA9IFNIQTUxMl9IMDsKKwlzY3R4LT5zdGF0ZVsxXSA9IFNIQTUxMl9IMTsKKwlzY3R4LT5zdGF0ZVsyXSA9IFNIQTUxMl9IMjsKKwlzY3R4LT5zdGF0ZVszXSA9IFNIQTUxMl9IMzsKKwlzY3R4LT5zdGF0ZVs0XSA9IFNIQTUxMl9INDsKKwlzY3R4LT5zdGF0ZVs1XSA9IFNIQTUxMl9INTsKKwlzY3R4LT5zdGF0ZVs2XSA9IFNIQTUxMl9INjsKKwlzY3R4LT5zdGF0ZVs3XSA9IFNIQTUxMl9INzsKKwlzY3R4LT5jb3VudFswXSA9IHNjdHgtPmNvdW50WzFdID0gc2N0eC0+Y291bnRbMl0gPSBzY3R4LT5jb3VudFszXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitzaGEzODRfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBzaGE1MTJfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzY3R4LT5zdGF0ZVswXSA9IFNIQTM4NF9IMDsKKwlzY3R4LT5zdGF0ZVsxXSA9IFNIQTM4NF9IMTsKKwlzY3R4LT5zdGF0ZVsyXSA9IFNIQTM4NF9IMjsKKwlzY3R4LT5zdGF0ZVszXSA9IFNIQTM4NF9IMzsKKwlzY3R4LT5zdGF0ZVs0XSA9IFNIQTM4NF9INDsKKwlzY3R4LT5zdGF0ZVs1XSA9IFNIQTM4NF9INTsKKwlzY3R4LT5zdGF0ZVs2XSA9IFNIQTM4NF9INjsKKwlzY3R4LT5zdGF0ZVs3XSA9IFNIQTM4NF9INzsKKyAgICAgICAgc2N0eC0+Y291bnRbMF0gPSBzY3R4LT5jb3VudFsxXSA9IHNjdHgtPmNvdW50WzJdID0gc2N0eC0+Y291bnRbM10gPSAwOworfQorCitzdGF0aWMgdm9pZAorc2hhNTEyX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2hhNTEyX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwl1bnNpZ25lZCBpbnQgaSwgaW5kZXgsIHBhcnRfbGVuOworCisJLyogQ29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDEyOCAqLworCWluZGV4ID0gKHVuc2lnbmVkIGludCkoKHNjdHgtPmNvdW50WzBdID4+IDMpICYgMHg3Rik7CisKKwkvKiBVcGRhdGUgbnVtYmVyIG9mIGJpdHMgKi8KKwlpZiAoKHNjdHgtPmNvdW50WzBdICs9IChsZW4gPDwgMykpIDwgKGxlbiA8PCAzKSkgeworCQlpZiAoKHNjdHgtPmNvdW50WzFdICs9IDEpIDwgMSkKKwkJCWlmICgoc2N0eC0+Y291bnRbMl0gKz0gMSkgPCAxKQorCQkJCXNjdHgtPmNvdW50WzNdKys7CisJCXNjdHgtPmNvdW50WzFdICs9IChsZW4gPj4gMjkpOworCX0KKworICAgICAgICBwYXJ0X2xlbiA9IDEyOCAtIGluZGV4OworCisJLyogVHJhbnNmb3JtIGFzIG1hbnkgdGltZXMgYXMgcG9zc2libGUuICovCisJaWYgKGxlbiA+PSBwYXJ0X2xlbikgeworCQltZW1jcHkoJnNjdHgtPmJ1ZltpbmRleF0sIGRhdGEsIHBhcnRfbGVuKTsKKwkJc2hhNTEyX3RyYW5zZm9ybShzY3R4LT5zdGF0ZSwgc2N0eC0+Vywgc2N0eC0+YnVmKTsKKworCQlmb3IgKGkgPSBwYXJ0X2xlbjsgaSArIDEyNyA8IGxlbjsgaSs9MTI4KQorCQkJc2hhNTEyX3RyYW5zZm9ybShzY3R4LT5zdGF0ZSwgc2N0eC0+VywgJmRhdGFbaV0pOworCisJCWluZGV4ID0gMDsKKwl9IGVsc2UgeworCQlpID0gMDsKKwl9CisKKwkvKiBCdWZmZXIgcmVtYWluaW5nIGlucHV0ICovCisJbWVtY3B5KCZzY3R4LT5idWZbaW5kZXhdLCAmZGF0YVtpXSwgbGVuIC0gaSk7CisKKwkvKiBlcmFzZSBvdXIgZGF0YSAqLworCW1lbXNldChzY3R4LT5XLCAwLCBzaXplb2Yoc2N0eC0+VykpOworfQorCitzdGF0aWMgdm9pZAorc2hhNTEyX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpoYXNoKQoreworCXN0cnVjdCBzaGE1MTJfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKyAgICAgICAgc3RhdGljIHU4IHBhZGRpbmdbMTI4XSA9IHsgMHg4MCwgfTsKKwlfX2JlNjQgKmRzdCA9IChfX2JlNjQgKiloYXNoOworCV9fYmUzMiBiaXRzWzRdOworCXVuc2lnbmVkIGludCBpbmRleCwgcGFkX2xlbjsKKwlpbnQgaTsKKworCS8qIFNhdmUgbnVtYmVyIG9mIGJpdHMgKi8KKwliaXRzWzNdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbMF0pOworCWJpdHNbMl0gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFsxXSk7CisJYml0c1sxXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzJdKTsKKwliaXRzWzBdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbM10pOworCisJLyogUGFkIG91dCB0byAxMTIgbW9kIDEyOC4gKi8KKwlpbmRleCA9IChzY3R4LT5jb3VudFswXSA+PiAzKSAmIDB4N2Y7CisJcGFkX2xlbiA9IChpbmRleCA8IDExMikgPyAoMTEyIC0gaW5kZXgpIDogKCgxMjgrMTEyKSAtIGluZGV4KTsKKwlzaGE1MTJfdXBkYXRlKHRmbSwgcGFkZGluZywgcGFkX2xlbik7CisKKwkvKiBBcHBlbmQgbGVuZ3RoIChiZWZvcmUgcGFkZGluZykgKi8KKwlzaGE1MTJfdXBkYXRlKHRmbSwgKGNvbnN0IHU4ICopYml0cywgc2l6ZW9mKGJpdHMpKTsKKworCS8qIFN0b3JlIHN0YXRlIGluIGRpZ2VzdCAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWRzdFtpXSA9IGNwdV90b19iZTY0KHNjdHgtPnN0YXRlW2ldKTsKKworCS8qIFplcm9pemUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAqLworCW1lbXNldChzY3R4LCAwLCBzaXplb2Yoc3RydWN0IHNoYTUxMl9jdHgpKTsKK30KKworc3RhdGljIHZvaWQgc2hhMzg0X2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpoYXNoKQoreworICAgICAgICB1OCBEWzY0XTsKKworCXNoYTUxMl9maW5hbCh0Zm0sIEQpOworCisgICAgICAgIG1lbWNweShoYXNoLCBELCA0OCk7CisgICAgICAgIG1lbXNldChELCAwLCA2NCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGE1MTIgPSB7CisgICAgICAgIC5jcmFfbmFtZSAgICAgICA9ICJzaGE1MTIiLAorICAgICAgICAuY3JhX2ZsYWdzICAgICAgPSBDUllQVE9fQUxHX1RZUEVfRElHRVNULAorCS5jcmFfYmxvY2tzaXplICA9IFNIQTUxMl9CTE9DS19TSVpFLAorICAgICAgICAuY3JhX2N0eHNpemUgICAgPSBzaXplb2Yoc3RydWN0IHNoYTUxMl9jdHgpLAorICAgICAgICAuY3JhX21vZHVsZSAgICAgPSBUSElTX01PRFVMRSwKKwkuY3JhX2FsaWdubWFzawk9IDMsCisgICAgICAgIC5jcmFfbGlzdCAgICAgICA9IExJU1RfSEVBRF9JTklUKHNoYTUxMi5jcmFfbGlzdCksCisgICAgICAgIC5jcmFfdSAgICAgICAgICA9IHsgLmRpZ2VzdCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpYV9kaWdlc3RzaXplID0gU0hBNTEyX0RJR0VTVF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlhX2luaXQgICAgICAgPSBzaGE1MTJfaW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpYV91cGRhdGUgICAgID0gc2hhNTEyX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpYV9maW5hbCAgICAgID0gc2hhNTEyX2ZpbmFsIH0KKyAgICAgICAgfQorfTsKKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTM4NCA9IHsKKyAgICAgICAgLmNyYV9uYW1lICAgICAgID0gInNoYTM4NCIsCisgICAgICAgIC5jcmFfZmxhZ3MgICAgICA9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QsCisJLmNyYV9ibG9ja3NpemUgID0gU0hBMzg0X0JMT0NLX1NJWkUsCisgICAgICAgIC5jcmFfY3R4c2l6ZSAgICA9IHNpemVvZihzdHJ1Y3Qgc2hhNTEyX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJPSAzLAorICAgICAgICAuY3JhX21vZHVsZSAgICAgPSBUSElTX01PRFVMRSwKKyAgICAgICAgLmNyYV9saXN0ICAgICAgID0gTElTVF9IRUFEX0lOSVQoc2hhMzg0LmNyYV9saXN0KSwKKyAgICAgICAgLmNyYV91ICAgICAgICAgID0geyAuZGlnZXN0ID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlhX2RpZ2VzdHNpemUgPSBTSEEzODRfRElHRVNUX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWFfaW5pdCAgICAgICA9IHNoYTM4NF9pbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlhX3VwZGF0ZSAgICAgPSBzaGE1MTJfdXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlhX2ZpbmFsICAgICAgPSBzaGEzODRfZmluYWwgfQorICAgICAgICB9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaGE1MTJfZ2VuZXJpY19tb2RfaW5pdCh2b2lkKQoreworICAgICAgICBpbnQgcmV0ID0gMDsKKworICAgICAgICBpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnNoYTM4NCkpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGE1MTIpKSA8IDApCisgICAgICAgICAgICAgICAgY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEzODQpOworb3V0OgorICAgICAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hhNTEyX2dlbmVyaWNfbW9kX2Zpbmkodm9pZCkKK3sKKyAgICAgICAgY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEzODQpOworICAgICAgICBjcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTUxMik7Cit9CisKK21vZHVsZV9pbml0KHNoYTUxMl9nZW5lcmljX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNoYTUxMl9nZW5lcmljX21vZF9maW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEEtNTEyIGFuZCBTSEEtMzg0IFNlY3VyZSBIYXNoIEFsZ29yaXRobXMiKTsKKworTU9EVUxFX0FMSUFTKCJzaGEzODQiKTsKK01PRFVMRV9BTElBUygic2hhNTEyIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGNyeXB0LmMgYi9jcnlwdG8vdGNyeXB0LmMKaW5kZXggMWFiOGMwMS4uNmJlYWJjNSAxMDA2NDQKLS0tIGEvY3J5cHRvL3RjcnlwdC5jCisrKyBiL2NyeXB0by90Y3J5cHQuYwpAQCAtODIsOSArODIsOCBAQAogCSJkZXMiLCAibWQ1IiwgImRlczNfZWRlIiwgInJvdDEzIiwgInNoYTEiLCAic2hhMjI0IiwgInNoYTI1NiIsCiAJImJsb3dmaXNoIiwgInR3b2Zpc2giLCAic2VycGVudCIsICJzaGEzODQiLCAic2hhNTEyIiwgIm1kNCIsICJhZXMiLAogCSJjYXN0NiIsICJhcmM0IiwgIm1pY2hhZWxfbWljIiwgImRlZmxhdGUiLCAiY3JjMzJjIiwgInRlYSIsICJ4dGVhIiwKLQkiYXJjNCIsICJtaWNoYWVsX21pYyIsICJkZWZsYXRlIiwgImNyYzMyYyIsICJ0ZWEiLCAieHRlYSIsCiAJImtoYXphZCIsICJ3cDUxMiIsICJ3cDM4NCIsICJ3cDI1NiIsICJ0bmVwcmVzIiwgInhldGEiLCAgImZjcnlwdCIsCi0JImNhbWVsbGlhIiwgInNlZWQiLCAic2Fsc2EyMCIsICJsem8iLCBOVUxMCisJImNhbWVsbGlhIiwgInNlZWQiLCAic2Fsc2EyMCIsICJsem8iLCAiY3RzIiwgTlVMTAogfTsKIAogc3RhdGljIHZvaWQgaGV4ZHVtcCh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pCkBAIC0xMTMsMjMgKzExMiwxMSBAQAogCWNoYXIgcmVzdWx0WzY0XTsKIAlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbTsKIAlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7Ci0Jc3RydWN0IGhhc2hfdGVzdHZlYyAqaGFzaF90djsKLQl1bnNpZ25lZCBpbnQgdHNpemU7CiAJaW50IHJldDsKKwl2b2lkICpoYXNoX2J1ZmY7CiAKIAlwcmludGsoIlxudGVzdGluZyAlc1xuIiwgYWxnbyk7CiAKLQl0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGFzaF90ZXN0dmVjKTsKLQl0c2l6ZSAqPSB0Y291bnQ7Ci0KLQlpZiAodHNpemUgPiBUVk1FTVNJWkUpIHsKLQkJcHJpbnRrKCJ0ZW1wbGF0ZSAoJXUpIHRvbyBiaWcgZm9yIHR2bWVtICgldSlcbiIsIHRzaXplLCBUVk1FTVNJWkUpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtY3B5KHR2bWVtLCB0ZW1wbGF0ZSwgdHNpemUpOwotCWhhc2hfdHYgPSAodm9pZCAqKXR2bWVtOwotCiAJdGZtID0gY3J5cHRvX2FsbG9jX2hhc2goYWxnbywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUih0Zm0pKSB7CiAJCXByaW50aygiZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLCBhbGdvLApAQCAtMTQ0LDI4ICsxMzEsMzYgQEAKIAkJcHJpbnRrKCJ0ZXN0ICV1OlxuIiwgaSArIDEpOwogCQltZW1zZXQocmVzdWx0LCAwLCA2NCk7CiAKLQkJc2dfaW5pdF9vbmUoJnNnWzBdLCBoYXNoX3R2W2ldLnBsYWludGV4dCwgaGFzaF90dltpXS5wc2l6ZSk7CisJCWhhc2hfYnVmZiA9IGt6YWxsb2ModGVtcGxhdGVbaV0ucHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWhhc2hfYnVmZikKKwkJCWNvbnRpbnVlOwogCi0JCWlmIChoYXNoX3R2W2ldLmtzaXplKSB7Ci0JCQlyZXQgPSBjcnlwdG9faGFzaF9zZXRrZXkodGZtLCBoYXNoX3R2W2ldLmtleSwKLQkJCQkJCSBoYXNoX3R2W2ldLmtzaXplKTsKKwkJbWVtY3B5KGhhc2hfYnVmZiwgdGVtcGxhdGVbaV0ucGxhaW50ZXh0LCB0ZW1wbGF0ZVtpXS5wc2l6ZSk7CisJCXNnX2luaXRfb25lKCZzZ1swXSwgaGFzaF9idWZmLCB0ZW1wbGF0ZVtpXS5wc2l6ZSk7CisKKwkJaWYgKHRlbXBsYXRlW2ldLmtzaXplKSB7CisJCQlyZXQgPSBjcnlwdG9faGFzaF9zZXRrZXkodGZtLCB0ZW1wbGF0ZVtpXS5rZXksCisJCQkJCQkgdGVtcGxhdGVbaV0ua3NpemUpOwogCQkJaWYgKHJldCkgewogCQkJCXByaW50aygic2V0a2V5KCkgZmFpbGVkIHJldD0lZFxuIiwgcmV0KTsKKwkJCQlrZnJlZShoYXNoX2J1ZmYpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAKLQkJcmV0ID0gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgaGFzaF90dltpXS5wc2l6ZSwgcmVzdWx0KTsKKwkJcmV0ID0gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgdGVtcGxhdGVbaV0ucHNpemUsIHJlc3VsdCk7CiAJCWlmIChyZXQpIHsKIAkJCXByaW50aygiZGlnZXN0ICgpIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7CisJCQlrZnJlZShoYXNoX2J1ZmYpOwogCQkJZ290byBvdXQ7CiAJCX0KIAogCQloZXhkdW1wKHJlc3VsdCwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZSh0Zm0pKTsKIAkJcHJpbnRrKCIlc1xuIiwKLQkJICAgICAgIG1lbWNtcChyZXN1bHQsIGhhc2hfdHZbaV0uZGlnZXN0LAorCQkgICAgICAgbWVtY21wKHJlc3VsdCwgdGVtcGxhdGVbaV0uZGlnZXN0LAogCQkJICAgICAgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZSh0Zm0pKSA/CiAJCSAgICAgICAiZmFpbCIgOiAicGFzcyIpOworCQlrZnJlZShoYXNoX2J1ZmYpOwogCX0KIAogCXByaW50aygidGVzdGluZyAlcyBhY3Jvc3MgcGFnZXNcbiIsIGFsZ28pOwpAQCAtMTc1LDI1ICsxNzAsMjUgQEAKIAogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCB0Y291bnQ7IGkrKykgewotCQlpZiAoaGFzaF90dltpXS5ucCkgeworCQlpZiAodGVtcGxhdGVbaV0ubnApIHsKIAkJCWorKzsKIAkJCXByaW50aygidGVzdCAldTpcbiIsIGopOwogCQkJbWVtc2V0KHJlc3VsdCwgMCwgNjQpOwogCiAJCQl0ZW1wID0gMDsKLQkJCXNnX2luaXRfdGFibGUoc2csIGhhc2hfdHZbaV0ubnApOwotCQkJZm9yIChrID0gMDsgayA8IGhhc2hfdHZbaV0ubnA7IGsrKykgeworCQkJc2dfaW5pdF90YWJsZShzZywgdGVtcGxhdGVbaV0ubnApOworCQkJZm9yIChrID0gMDsgayA8IHRlbXBsYXRlW2ldLm5wOyBrKyspIHsKIAkJCQltZW1jcHkoJnhidWZbSURYW2tdXSwKLQkJCQkgICAgICAgaGFzaF90dltpXS5wbGFpbnRleHQgKyB0ZW1wLAotCQkJCSAgICAgICBoYXNoX3R2W2ldLnRhcFtrXSk7Ci0JCQkJdGVtcCArPSBoYXNoX3R2W2ldLnRhcFtrXTsKKwkJCQkgICAgICAgdGVtcGxhdGVbaV0ucGxhaW50ZXh0ICsgdGVtcCwKKwkJCQkgICAgICAgdGVtcGxhdGVbaV0udGFwW2tdKTsKKwkJCQl0ZW1wICs9IHRlbXBsYXRlW2ldLnRhcFtrXTsKIAkJCQlzZ19zZXRfYnVmKCZzZ1trXSwgJnhidWZbSURYW2tdXSwKLQkJCQkJICAgIGhhc2hfdHZbaV0udGFwW2tdKTsKKwkJCQkJICAgIHRlbXBsYXRlW2ldLnRhcFtrXSk7CiAJCQl9CiAKLQkJCWlmIChoYXNoX3R2W2ldLmtzaXplKSB7Ci0JCQkJcmV0ID0gY3J5cHRvX2hhc2hfc2V0a2V5KHRmbSwgaGFzaF90dltpXS5rZXksCi0JCQkJCQkJIGhhc2hfdHZbaV0ua3NpemUpOworCQkJaWYgKHRlbXBsYXRlW2ldLmtzaXplKSB7CisJCQkJcmV0ID0gY3J5cHRvX2hhc2hfc2V0a2V5KHRmbSwgdGVtcGxhdGVbaV0ua2V5LAorCQkJCQkJCSB0ZW1wbGF0ZVtpXS5rc2l6ZSk7CiAKIAkJCQlpZiAocmV0KSB7CiAJCQkJCXByaW50aygic2V0a2V5KCkgZmFpbGVkIHJldD0lZFxuIiwgcmV0KTsKQEAgLTIwMSw3ICsxOTYsNyBAQAogCQkJCX0KIAkJCX0KIAotCQkJcmV0ID0gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgaGFzaF90dltpXS5wc2l6ZSwKKwkJCXJldCA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2csIHRlbXBsYXRlW2ldLnBzaXplLAogCQkJCQkJIHJlc3VsdCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKCJkaWdlc3QgKCkgZmFpbGVkIHJldD0lZFxuIiwgcmV0KTsKQEAgLTIxMCw3ICsyMDUsNyBAQAogCiAJCQloZXhkdW1wKHJlc3VsdCwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZSh0Zm0pKTsKIAkJCXByaW50aygiJXNcbiIsCi0JCQkgICAgICAgbWVtY21wKHJlc3VsdCwgaGFzaF90dltpXS5kaWdlc3QsCisJCQkgICAgICAgbWVtY21wKHJlc3VsdCwgdGVtcGxhdGVbaV0uZGlnZXN0LAogCQkJCSAgICAgIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUodGZtKSkgPwogCQkJICAgICAgICJmYWlsIiA6ICJwYXNzIik7CiAJCX0KQEAgLTIyNCwxNyArMjE5LDE4IEBACiAJCSAgICAgIHVuc2lnbmVkIGludCB0Y291bnQpCiB7CiAJdW5zaWduZWQgaW50IHJldCwgaSwgaiwgaywgdGVtcDsKLQl1bnNpZ25lZCBpbnQgdHNpemU7CiAJY2hhciAqcTsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbTsKIAljaGFyICprZXk7Ci0Jc3RydWN0IGFlYWRfdGVzdHZlYyAqYWVhZF90djsKIAlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzhdOwogCXN0cnVjdCBzY2F0dGVybGlzdCBhc2dbOF07CiAJY29uc3QgY2hhciAqZTsKIAlzdHJ1Y3QgdGNyeXB0X3Jlc3VsdCByZXN1bHQ7CiAJdW5zaWduZWQgaW50IGF1dGhzaXplOworCXZvaWQgKmlucHV0OworCXZvaWQgKmFzc29jOworCWNoYXIgaXZbTUFYX0lWTEVOXTsKIAogCWlmIChlbmMgPT0gRU5DUllQVCkKIAkJZSA9ICJlbmNyeXB0aW9uIjsKQEAgLTI0MywxOCArMjM5LDYgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIlxudGVzdGluZyAlcyAlc1xuIiwgYWxnbywgZSk7CiAKLQl0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVhZF90ZXN0dmVjKTsKLQl0c2l6ZSAqPSB0Y291bnQ7Ci0KLQlpZiAodHNpemUgPiBUVk1FTVNJWkUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAidGVtcGxhdGUgKCV1KSB0b28gYmlnIGZvciB0dm1lbSAoJXUpXG4iLAotCQkgICAgICAgdHNpemUsIFRWTUVNU0laRSk7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkodHZtZW0sIHRlbXBsYXRlLCB0c2l6ZSk7Ci0JYWVhZF90diA9ICh2b2lkICopdHZtZW07Ci0KIAlpbml0X2NvbXBsZXRpb24oJnJlc3VsdC5jb21wbGV0aW9uKTsKIAogCXRmbSA9IGNyeXB0b19hbGxvY19hZWFkKGFsZ28sIDAsIDApOwpAQCAtMjc1LDQ2ICsyNTksNjggQEAKIAkJCQkgIHRjcnlwdF9jb21wbGV0ZSwgJnJlc3VsdCk7CiAKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHRjb3VudDsgaSsrKSB7Ci0JCWlmICghYWVhZF90dltpXS5ucCkgeworCQlpZiAoIXRlbXBsYXRlW2ldLm5wKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJ0ZXN0ICV1ICglZCBiaXQga2V5KTpcbiIsCi0JCQkgICAgICAgKytqLCBhZWFkX3R2W2ldLmtsZW4gKiA4KTsKKwkJCSAgICAgICArK2osIHRlbXBsYXRlW2ldLmtsZW4gKiA4KTsKKworCQkJLyogc29tZSB0ZXBtcGxhdGVzIGhhdmUgbm8gaW5wdXQgZGF0YSBidXQgdGhleSB3aWxsCisJCQkgKiB0b3VjaCBpbnB1dAorCQkJICovCisJCQlpbnB1dCA9IGt6YWxsb2ModGVtcGxhdGVbaV0uaWxlbiArIHRlbXBsYXRlW2ldLnJsZW4sIEdGUF9LRVJORUwpOworCQkJaWYgKCFpbnB1dCkKKwkJCQljb250aW51ZTsKKworCQkJYXNzb2MgPSBremFsbG9jKHRlbXBsYXRlW2ldLmFsZW4sIEdGUF9LRVJORUwpOworCQkJaWYgKCFhc3NvYykgeworCQkJCWtmcmVlKGlucHV0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbWVtY3B5KGlucHV0LCB0ZW1wbGF0ZVtpXS5pbnB1dCwgdGVtcGxhdGVbaV0uaWxlbik7CisJCQltZW1jcHkoYXNzb2MsIHRlbXBsYXRlW2ldLmFzc29jLCB0ZW1wbGF0ZVtpXS5hbGVuKTsKKwkJCWlmICh0ZW1wbGF0ZVtpXS5pdikKKwkJCQltZW1jcHkoaXYsIHRlbXBsYXRlW2ldLml2LCBNQVhfSVZMRU4pOworCQkJZWxzZQorCQkJCW1lbXNldChpdiwgMCwgTUFYX0lWTEVOKTsKIAogCQkJY3J5cHRvX2FlYWRfY2xlYXJfZmxhZ3ModGZtLCB+MCk7Ci0JCQlpZiAoYWVhZF90dltpXS53aykKKwkJCWlmICh0ZW1wbGF0ZVtpXS53aykKIAkJCQljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoCiAJCQkJCXRmbSwgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpOwotCQkJa2V5ID0gYWVhZF90dltpXS5rZXk7CisKKwkJCWlmICh0ZW1wbGF0ZVtpXS5rZXkpCisJCQkJa2V5ID0gdGVtcGxhdGVbaV0ua2V5OworCQkJZWxzZQorCQkJCWtleSA9IGt6YWxsb2ModGVtcGxhdGVbaV0ua2xlbiwgR0ZQX0tFUk5FTCk7CiAKIAkJCXJldCA9IGNyeXB0b19hZWFkX3NldGtleSh0Zm0sIGtleSwKLQkJCQkJCSBhZWFkX3R2W2ldLmtsZW4pOworCQkJCQkJIHRlbXBsYXRlW2ldLmtsZW4pOwogCQkJaWYgKHJldCkgewogCQkJCXByaW50ayhLRVJOX0lORk8gInNldGtleSgpIGZhaWxlZCBmbGFncz0leFxuIiwKIAkJCQkgICAgICAgY3J5cHRvX2FlYWRfZ2V0X2ZsYWdzKHRmbSkpOwogCi0JCQkJaWYgKCFhZWFkX3R2W2ldLmZhaWwpCi0JCQkJCWdvdG8gb3V0OworCQkJCWlmICghdGVtcGxhdGVbaV0uZmFpbCkKKwkJCQkJZ290byBuZXh0X29uZTsKIAkJCX0KIAotCQkJYXV0aHNpemUgPSBhYnMoYWVhZF90dltpXS5ybGVuIC0gYWVhZF90dltpXS5pbGVuKTsKKwkJCWF1dGhzaXplID0gYWJzKHRlbXBsYXRlW2ldLnJsZW4gLSB0ZW1wbGF0ZVtpXS5pbGVuKTsKIAkJCXJldCA9IGNyeXB0b19hZWFkX3NldGF1dGhzaXplKHRmbSwgYXV0aHNpemUpOwogCQkJaWYgKHJldCkgewogCQkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgYXV0aHNpemUgPSAldVxuIiwKIAkJCQkgICAgICAgYXV0aHNpemUpOwotCQkJCWdvdG8gb3V0OworCQkJCWdvdG8gbmV4dF9vbmU7CiAJCQl9CiAKLQkJCXNnX2luaXRfb25lKCZzZ1swXSwgYWVhZF90dltpXS5pbnB1dCwKLQkJCQkgICAgYWVhZF90dltpXS5pbGVuICsgKGVuYyA/IGF1dGhzaXplIDogMCkpOworCQkJc2dfaW5pdF9vbmUoJnNnWzBdLCBpbnB1dCwKKwkJCQkgICAgdGVtcGxhdGVbaV0uaWxlbiArIChlbmMgPyBhdXRoc2l6ZSA6IDApKTsKIAotCQkJc2dfaW5pdF9vbmUoJmFzZ1swXSwgYWVhZF90dltpXS5hc3NvYywKLQkJCQkgICAgYWVhZF90dltpXS5hbGVuKTsKKwkJCXNnX2luaXRfb25lKCZhc2dbMF0sIGFzc29jLCB0ZW1wbGF0ZVtpXS5hbGVuKTsKIAogCQkJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBzZywKLQkJCQkJICAgICAgIGFlYWRfdHZbaV0uaWxlbiwKLQkJCQkJICAgICAgIGFlYWRfdHZbaV0uaXYpOworCQkJCQkgICAgICAgdGVtcGxhdGVbaV0uaWxlbiwgaXYpOwogCi0JCQlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKHJlcSwgYXNnLCBhZWFkX3R2W2ldLmFsZW4pOworCQkJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhyZXEsIGFzZywgdGVtcGxhdGVbaV0uYWxlbik7CiAKIAkJCXJldCA9IGVuYyA/CiAJCQkJY3J5cHRvX2FlYWRfZW5jcnlwdChyZXEpIDoKQEAgLTMzNSwxNSArMzQxLDIxIEBACiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzICgpIGZhaWxlZCBlcnI9JWRcbiIsCiAJCQkJICAgICAgIGUsIC1yZXQpOwotCQkJCWdvdG8gb3V0OworCQkJCWdvdG8gbmV4dF9vbmU7CiAJCQl9CiAKIAkJCXEgPSBrbWFwKHNnX3BhZ2UoJnNnWzBdKSkgKyBzZ1swXS5vZmZzZXQ7Ci0JCQloZXhkdW1wKHEsIGFlYWRfdHZbaV0ucmxlbik7CisJCQloZXhkdW1wKHEsIHRlbXBsYXRlW2ldLnJsZW4pOwogCiAJCQlwcmludGsoS0VSTl9JTkZPICJlbmMvZGVjOiAlc1xuIiwKLQkJCSAgICAgICBtZW1jbXAocSwgYWVhZF90dltpXS5yZXN1bHQsCi0JCQkJICAgICAgYWVhZF90dltpXS5ybGVuKSA/ICJmYWlsIiA6ICJwYXNzIik7CisJCQkgICAgICAgbWVtY21wKHEsIHRlbXBsYXRlW2ldLnJlc3VsdCwKKwkJCQkgICAgICB0ZW1wbGF0ZVtpXS5ybGVuKSA/ICJmYWlsIiA6ICJwYXNzIik7CisJCQlrdW5tYXAoc2dfcGFnZSgmc2dbMF0pKTsKK25leHRfb25lOgorCQkJaWYgKCF0ZW1wbGF0ZVtpXS5rZXkpCisJCQkJa2ZyZWUoa2V5KTsKKwkJCWtmcmVlKGFzc29jKTsKKwkJCWtmcmVlKGlucHV0KTsKIAkJfQogCX0KIApAQCAtMzUyLDM2ICszNjQsNDEgQEAKIAltZW1zZXQoYXhidWYsIDAsIFhCVUZTSVpFKTsKIAogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgdGNvdW50OyBpKyspIHsKLQkJaWYgKGFlYWRfdHZbaV0ubnApIHsKKwkJaWYgKHRlbXBsYXRlW2ldLm5wKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJ0ZXN0ICV1ICglZCBiaXQga2V5KTpcbiIsCi0JCQkgICAgICAgKytqLCBhZWFkX3R2W2ldLmtsZW4gKiA4KTsKKwkJCSAgICAgICArK2osIHRlbXBsYXRlW2ldLmtsZW4gKiA4KTsKKworCQkJaWYgKHRlbXBsYXRlW2ldLml2KQorCQkJCW1lbWNweShpdiwgdGVtcGxhdGVbaV0uaXYsIE1BWF9JVkxFTik7CisJCQllbHNlCisJCQkJbWVtc2V0KGl2LCAwLCBNQVhfSVZMRU4pOwogCiAJCQljcnlwdG9fYWVhZF9jbGVhcl9mbGFncyh0Zm0sIH4wKTsKLQkJCWlmIChhZWFkX3R2W2ldLndrKQorCQkJaWYgKHRlbXBsYXRlW2ldLndrKQogCQkJCWNyeXB0b19hZWFkX3NldF9mbGFncygKIAkJCQkJdGZtLCBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSk7Ci0JCQlrZXkgPSBhZWFkX3R2W2ldLmtleTsKKwkJCWtleSA9IHRlbXBsYXRlW2ldLmtleTsKIAotCQkJcmV0ID0gY3J5cHRvX2FlYWRfc2V0a2V5KHRmbSwga2V5LCBhZWFkX3R2W2ldLmtsZW4pOworCQkJcmV0ID0gY3J5cHRvX2FlYWRfc2V0a2V5KHRmbSwga2V5LCB0ZW1wbGF0ZVtpXS5rbGVuKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJzZXRrZXkoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsCiAJCQkJICAgICAgIGNyeXB0b19hZWFkX2dldF9mbGFncyh0Zm0pKTsKIAotCQkJCWlmICghYWVhZF90dltpXS5mYWlsKQorCQkJCWlmICghdGVtcGxhdGVbaV0uZmFpbCkKIAkJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXNnX2luaXRfdGFibGUoc2csIGFlYWRfdHZbaV0ubnApOwotCQkJZm9yIChrID0gMCwgdGVtcCA9IDA7IGsgPCBhZWFkX3R2W2ldLm5wOyBrKyspIHsKKwkJCXNnX2luaXRfdGFibGUoc2csIHRlbXBsYXRlW2ldLm5wKTsKKwkJCWZvciAoayA9IDAsIHRlbXAgPSAwOyBrIDwgdGVtcGxhdGVbaV0ubnA7IGsrKykgewogCQkJCW1lbWNweSgmeGJ1ZltJRFhba11dLAotCQkJCSAgICAgICBhZWFkX3R2W2ldLmlucHV0ICsgdGVtcCwKLQkJCQkgICAgICAgYWVhZF90dltpXS50YXBba10pOwotCQkJCXRlbXAgKz0gYWVhZF90dltpXS50YXBba107CisJCQkJICAgICAgIHRlbXBsYXRlW2ldLmlucHV0ICsgdGVtcCwKKwkJCQkgICAgICAgdGVtcGxhdGVbaV0udGFwW2tdKTsKKwkJCQl0ZW1wICs9IHRlbXBsYXRlW2ldLnRhcFtrXTsKIAkJCQlzZ19zZXRfYnVmKCZzZ1trXSwgJnhidWZbSURYW2tdXSwKLQkJCQkJICAgYWVhZF90dltpXS50YXBba10pOworCQkJCQkgICB0ZW1wbGF0ZVtpXS50YXBba10pOwogCQkJfQogCi0JCQlhdXRoc2l6ZSA9IGFicyhhZWFkX3R2W2ldLnJsZW4gLSBhZWFkX3R2W2ldLmlsZW4pOworCQkJYXV0aHNpemUgPSBhYnModGVtcGxhdGVbaV0ucmxlbiAtIHRlbXBsYXRlW2ldLmlsZW4pOwogCQkJcmV0ID0gY3J5cHRvX2FlYWRfc2V0YXV0aHNpemUodGZtLCBhdXRoc2l6ZSk7CiAJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTwpAQCAtMzkzLDIxICs0MTAsMjEgQEAKIAkJCWlmIChlbmMpCiAJCQkJc2dbayAtIDFdLmxlbmd0aCArPSBhdXRoc2l6ZTsKIAotCQkJc2dfaW5pdF90YWJsZShhc2csIGFlYWRfdHZbaV0uYW5wKTsKLQkJCWZvciAoayA9IDAsIHRlbXAgPSAwOyBrIDwgYWVhZF90dltpXS5hbnA7IGsrKykgeworCQkJc2dfaW5pdF90YWJsZShhc2csIHRlbXBsYXRlW2ldLmFucCk7CisJCQlmb3IgKGsgPSAwLCB0ZW1wID0gMDsgayA8IHRlbXBsYXRlW2ldLmFucDsgaysrKSB7CiAJCQkJbWVtY3B5KCZheGJ1ZltJRFhba11dLAotCQkJCSAgICAgICBhZWFkX3R2W2ldLmFzc29jICsgdGVtcCwKLQkJCQkgICAgICAgYWVhZF90dltpXS5hdGFwW2tdKTsKLQkJCQl0ZW1wICs9IGFlYWRfdHZbaV0uYXRhcFtrXTsKKwkJCQkgICAgICAgdGVtcGxhdGVbaV0uYXNzb2MgKyB0ZW1wLAorCQkJCSAgICAgICB0ZW1wbGF0ZVtpXS5hdGFwW2tdKTsKKwkJCQl0ZW1wICs9IHRlbXBsYXRlW2ldLmF0YXBba107CiAJCQkJc2dfc2V0X2J1ZigmYXNnW2tdLCAmYXhidWZbSURYW2tdXSwKLQkJCQkJICAgYWVhZF90dltpXS5hdGFwW2tdKTsKKwkJCQkJICAgdGVtcGxhdGVbaV0uYXRhcFtrXSk7CiAJCQl9CiAKIAkJCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZywgc2csCi0JCQkJCSAgICAgICBhZWFkX3R2W2ldLmlsZW4sCi0JCQkJCSAgICAgICBhZWFkX3R2W2ldLml2KTsKKwkJCQkJICAgICAgIHRlbXBsYXRlW2ldLmlsZW4sCisJCQkJCSAgICAgICBpdik7CiAKLQkJCWFlYWRfcmVxdWVzdF9zZXRfYXNzb2MocmVxLCBhc2csIGFlYWRfdHZbaV0uYWxlbik7CisJCQlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKHJlcSwgYXNnLCB0ZW1wbGF0ZVtpXS5hbGVuKTsKIAogCQkJcmV0ID0gZW5jID8KIAkJCQljcnlwdG9fYWVhZF9lbmNyeXB0KHJlcSkgOgpAQCAtNDMxLDE4ICs0NDgsMTkgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJZm9yIChrID0gMCwgdGVtcCA9IDA7IGsgPCBhZWFkX3R2W2ldLm5wOyBrKyspIHsKKwkJCWZvciAoayA9IDAsIHRlbXAgPSAwOyBrIDwgdGVtcGxhdGVbaV0ubnA7IGsrKykgewogCQkJCXByaW50ayhLRVJOX0lORk8gInBhZ2UgJXVcbiIsIGspOwogCQkJCXEgPSBrbWFwKHNnX3BhZ2UoJnNnW2tdKSkgKyBzZ1trXS5vZmZzZXQ7Ci0JCQkJaGV4ZHVtcChxLCBhZWFkX3R2W2ldLnRhcFtrXSk7CisJCQkJaGV4ZHVtcChxLCB0ZW1wbGF0ZVtpXS50YXBba10pOwogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLAotCQkJCSAgICAgICBtZW1jbXAocSwgYWVhZF90dltpXS5yZXN1bHQgKyB0ZW1wLAotCQkJCQkgICAgICBhZWFkX3R2W2ldLnRhcFtrXSAtCi0JCQkJCSAgICAgIChrIDwgYWVhZF90dltpXS5ucCAtIDEgfHwgZW5jID8KKwkJCQkgICAgICAgbWVtY21wKHEsIHRlbXBsYXRlW2ldLnJlc3VsdCArIHRlbXAsCisJCQkJCSAgICAgIHRlbXBsYXRlW2ldLnRhcFtrXSAtCisJCQkJCSAgICAgIChrIDwgdGVtcGxhdGVbaV0ubnAgLSAxIHx8IGVuYyA/CiAJCQkJCSAgICAgICAwIDogYXV0aHNpemUpKSA/CiAJCQkJICAgICAgICJmYWlsIiA6ICJwYXNzIik7CiAKLQkJCQl0ZW1wICs9IGFlYWRfdHZbaV0udGFwW2tdOworCQkJCXRlbXAgKz0gdGVtcGxhdGVbaV0udGFwW2tdOworCQkJCWt1bm1hcChzZ19wYWdlKCZzZ1trXSkpOwogCQkJfQogCQl9CiAJfQpAQCAtNDU2LDE1ICs0NzQsMTQgQEAKIAkJCXN0cnVjdCBjaXBoZXJfdGVzdHZlYyAqdGVtcGxhdGUsIHVuc2lnbmVkIGludCB0Y291bnQpCiB7CiAJdW5zaWduZWQgaW50IHJldCwgaSwgaiwgaywgdGVtcDsKLQl1bnNpZ25lZCBpbnQgdHNpemU7CiAJY2hhciAqcTsKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbTsKLQljaGFyICprZXk7Ci0Jc3RydWN0IGNpcGhlcl90ZXN0dmVjICpjaXBoZXJfdHY7CiAJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1s4XTsKIAljb25zdCBjaGFyICplOwogCXN0cnVjdCB0Y3J5cHRfcmVzdWx0IHJlc3VsdDsKKwl2b2lkICpkYXRhOworCWNoYXIgaXZbTUFYX0lWTEVOXTsKIAogCWlmIChlbmMgPT0gRU5DUllQVCkKIAkgICAgICAgIGUgPSAiZW5jcnlwdGlvbiI7CkBAIC00NzMsMTYgKzQ5MCw3IEBACiAKIAlwcmludGsoIlxudGVzdGluZyAlcyAlc1xuIiwgYWxnbywgZSk7CiAKLQl0c2l6ZSA9IHNpemVvZiAoc3RydWN0IGNpcGhlcl90ZXN0dmVjKTsKLQlpZiAodHNpemUgPiBUVk1FTVNJWkUpIHsKLQkJcHJpbnRrKCJ0ZW1wbGF0ZSAoJXUpIHRvbyBiaWcgZm9yIHR2bWVtICgldSlcbiIsIHRzaXplLAotCQkgICAgICAgVFZNRU1TSVpFKTsKLQkJcmV0dXJuOwotCX0KLQljaXBoZXJfdHYgPSAodm9pZCAqKXR2bWVtOwotCiAJaW5pdF9jb21wbGV0aW9uKCZyZXN1bHQuY29tcGxldGlvbik7Ci0KIAl0Zm0gPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihhbGdvLCAwLCAwKTsKIAogCWlmIChJU19FUlIodGZtKSkgewpAQCAtNTAyLDM1ICs1MTAsNDMgQEAKIAogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCB0Y291bnQ7IGkrKykgewotCQltZW1jcHkoY2lwaGVyX3R2LCAmdGVtcGxhdGVbaV0sIHRzaXplKTsKLQkJaWYgKCEoY2lwaGVyX3R2LT5ucCkpIHsKKworCQlkYXRhID0ga3phbGxvYyh0ZW1wbGF0ZVtpXS5pbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkYXRhKQorCQkJY29udGludWU7CisKKwkJbWVtY3B5KGRhdGEsIHRlbXBsYXRlW2ldLmlucHV0LCB0ZW1wbGF0ZVtpXS5pbGVuKTsKKwkJaWYgKHRlbXBsYXRlW2ldLml2KQorCQkJbWVtY3B5KGl2LCB0ZW1wbGF0ZVtpXS5pdiwgTUFYX0lWTEVOKTsKKwkJZWxzZQorCQkJbWVtc2V0KGl2LCAwLCBNQVhfSVZMRU4pOworCisJCWlmICghKHRlbXBsYXRlW2ldLm5wKSkgewogCQkJaisrOwogCQkJcHJpbnRrKCJ0ZXN0ICV1ICglZCBiaXQga2V5KTpcbiIsCi0JCQlqLCBjaXBoZXJfdHYtPmtsZW4gKiA4KTsKKwkJCWosIHRlbXBsYXRlW2ldLmtsZW4gKiA4KTsKIAogCQkJY3J5cHRvX2FibGtjaXBoZXJfY2xlYXJfZmxhZ3ModGZtLCB+MCk7Ci0JCQlpZiAoY2lwaGVyX3R2LT53aykKKwkJCWlmICh0ZW1wbGF0ZVtpXS53aykKIAkJCQljcnlwdG9fYWJsa2NpcGhlcl9zZXRfZmxhZ3MoCiAJCQkJCXRmbSwgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpOwotCQkJa2V5ID0gY2lwaGVyX3R2LT5rZXk7CiAKLQkJCXJldCA9IGNyeXB0b19hYmxrY2lwaGVyX3NldGtleSh0Zm0sIGtleSwKLQkJCQkJCSAgICAgICBjaXBoZXJfdHYtPmtsZW4pOworCQkJcmV0ID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KHRmbSwgdGVtcGxhdGVbaV0ua2V5LAorCQkJCQkJICAgICAgIHRlbXBsYXRlW2ldLmtsZW4pOwogCQkJaWYgKHJldCkgewogCQkJCXByaW50aygic2V0a2V5KCkgZmFpbGVkIGZsYWdzPSV4XG4iLAogCQkJCSAgICAgICBjcnlwdG9fYWJsa2NpcGhlcl9nZXRfZmxhZ3ModGZtKSk7CiAKLQkJCQlpZiAoIWNpcGhlcl90di0+ZmFpbCkKKwkJCQlpZiAoIXRlbXBsYXRlW2ldLmZhaWwpIHsKKwkJCQkJa2ZyZWUoZGF0YSk7CiAJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCX0KIAotCQkJc2dfaW5pdF9vbmUoJnNnWzBdLCBjaXBoZXJfdHYtPmlucHV0LAotCQkJCSAgICBjaXBoZXJfdHYtPmlsZW4pOworCQkJc2dfaW5pdF9vbmUoJnNnWzBdLCBkYXRhLCB0ZW1wbGF0ZVtpXS5pbGVuKTsKIAogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBzZywKLQkJCQkJCSAgICAgY2lwaGVyX3R2LT5pbGVuLAotCQkJCQkJICAgICBjaXBoZXJfdHYtPml2KTsKLQorCQkJCQkJICAgICB0ZW1wbGF0ZVtpXS5pbGVuLCBpdik7CiAJCQlyZXQgPSBlbmMgPwogCQkJCWNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQocmVxKSA6CiAJCQkJY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChyZXEpOwpAQCAtNTQ5LDE2ICs1NjUsMTkgQEAKIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJCWRlZmF1bHQ6CiAJCQkJcHJpbnRrKCIlcyAoKSBmYWlsZWQgZXJyPSVkXG4iLCBlLCAtcmV0KTsKKwkJCQlrZnJlZShkYXRhKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAogCQkJcSA9IGttYXAoc2dfcGFnZSgmc2dbMF0pKSArIHNnWzBdLm9mZnNldDsKLQkJCWhleGR1bXAocSwgY2lwaGVyX3R2LT5ybGVuKTsKKwkJCWhleGR1bXAocSwgdGVtcGxhdGVbaV0ucmxlbik7CiAKIAkJCXByaW50aygiJXNcbiIsCi0JCQkgICAgICAgbWVtY21wKHEsIGNpcGhlcl90di0+cmVzdWx0LAotCQkJCSAgICAgIGNpcGhlcl90di0+cmxlbikgPyAiZmFpbCIgOiAicGFzcyIpOworCQkJICAgICAgIG1lbWNtcChxLCB0ZW1wbGF0ZVtpXS5yZXN1bHQsCisJCQkJICAgICAgdGVtcGxhdGVbaV0ucmxlbikgPyAiZmFpbCIgOiAicGFzcyIpOworCQkJa3VubWFwKHNnX3BhZ2UoJnNnWzBdKSk7CiAJCX0KKwkJa2ZyZWUoZGF0YSk7CiAJfQogCiAJcHJpbnRrKCJcbnRlc3RpbmcgJXMgJXMgYWNyb3NzIHBhZ2VzIChjaHVua2luZylcbiIsIGFsZ28sIGUpOwpAQCAtNTY2LDQyICs1ODUsNTMgQEAKIAogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCB0Y291bnQ7IGkrKykgewotCQltZW1jcHkoY2lwaGVyX3R2LCAmdGVtcGxhdGVbaV0sIHRzaXplKTsKLQkJaWYgKGNpcGhlcl90di0+bnApIHsKKworCQlkYXRhID0ga3phbGxvYyh0ZW1wbGF0ZVtpXS5pbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkYXRhKQorCQkJY29udGludWU7CisKKwkJbWVtY3B5KGRhdGEsIHRlbXBsYXRlW2ldLmlucHV0LCB0ZW1wbGF0ZVtpXS5pbGVuKTsKKworCQlpZiAodGVtcGxhdGVbaV0uaXYpCisJCQltZW1jcHkoaXYsIHRlbXBsYXRlW2ldLml2LCBNQVhfSVZMRU4pOworCQllbHNlCisJCQltZW1zZXQoaXYsIDAsIE1BWF9JVkxFTik7CisKKwkJaWYgKHRlbXBsYXRlW2ldLm5wKSB7CiAJCQlqKys7CiAJCQlwcmludGsoInRlc3QgJXUgKCVkIGJpdCBrZXkpOlxuIiwKLQkJCWosIGNpcGhlcl90di0+a2xlbiAqIDgpOworCQkJaiwgdGVtcGxhdGVbaV0ua2xlbiAqIDgpOwogCiAJCQljcnlwdG9fYWJsa2NpcGhlcl9jbGVhcl9mbGFncyh0Zm0sIH4wKTsKLQkJCWlmIChjaXBoZXJfdHYtPndrKQorCQkJaWYgKHRlbXBsYXRlW2ldLndrKQogCQkJCWNyeXB0b19hYmxrY2lwaGVyX3NldF9mbGFncygKIAkJCQkJdGZtLCBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSk7Ci0JCQlrZXkgPSBjaXBoZXJfdHYtPmtleTsKIAotCQkJcmV0ID0gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KHRmbSwga2V5LAotCQkJCQkJICAgICAgIGNpcGhlcl90di0+a2xlbik7CisJCQlyZXQgPSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkodGZtLCB0ZW1wbGF0ZVtpXS5rZXksCisJCQkJCQkgICAgICAgdGVtcGxhdGVbaV0ua2xlbik7CiAJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKCJzZXRrZXkoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsCi0JCQkJICAgICAgIGNyeXB0b19hYmxrY2lwaGVyX2dldF9mbGFncyh0Zm0pKTsKKwkJCQkJCWNyeXB0b19hYmxrY2lwaGVyX2dldF9mbGFncyh0Zm0pKTsKIAotCQkJCWlmICghY2lwaGVyX3R2LT5mYWlsKQorCQkJCWlmICghdGVtcGxhdGVbaV0uZmFpbCkgeworCQkJCQlrZnJlZShkYXRhKTsKIAkJCQkJZ290byBvdXQ7CisJCQkJfQogCQkJfQogCiAJCQl0ZW1wID0gMDsKLQkJCXNnX2luaXRfdGFibGUoc2csIGNpcGhlcl90di0+bnApOwotCQkJZm9yIChrID0gMDsgayA8IGNpcGhlcl90di0+bnA7IGsrKykgeworCQkJc2dfaW5pdF90YWJsZShzZywgdGVtcGxhdGVbaV0ubnApOworCQkJZm9yIChrID0gMDsgayA8IHRlbXBsYXRlW2ldLm5wOyBrKyspIHsKIAkJCQltZW1jcHkoJnhidWZbSURYW2tdXSwKLQkJCQkgICAgICAgY2lwaGVyX3R2LT5pbnB1dCArIHRlbXAsCi0JCQkJICAgICAgIGNpcGhlcl90di0+dGFwW2tdKTsKLQkJCQl0ZW1wICs9IGNpcGhlcl90di0+dGFwW2tdOworCQkJCQkJdGVtcGxhdGVbaV0uaW5wdXQgKyB0ZW1wLAorCQkJCQkJdGVtcGxhdGVbaV0udGFwW2tdKTsKKwkJCQl0ZW1wICs9IHRlbXBsYXRlW2ldLnRhcFtrXTsKIAkJCQlzZ19zZXRfYnVmKCZzZ1trXSwgJnhidWZbSURYW2tdXSwKLQkJCQkJICAgY2lwaGVyX3R2LT50YXBba10pOworCQkJCQkJdGVtcGxhdGVbaV0udGFwW2tdKTsKIAkJCX0KIAogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBzZywKLQkJCQkJCSAgICAgY2lwaGVyX3R2LT5pbGVuLAotCQkJCQkJICAgICBjaXBoZXJfdHYtPml2KTsKKwkJCQkJdGVtcGxhdGVbaV0uaWxlbiwgaXYpOwogCiAJCQlyZXQgPSBlbmMgPwogCQkJCWNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQocmVxKSA6CkBAIC02MjUsMTkgKzY1NSwxOSBAQAogCQkJfQogCiAJCQl0ZW1wID0gMDsKLQkJCWZvciAoayA9IDA7IGsgPCBjaXBoZXJfdHYtPm5wOyBrKyspIHsKKwkJCWZvciAoayA9IDA7IGsgPCB0ZW1wbGF0ZVtpXS5ucDsgaysrKSB7CiAJCQkJcHJpbnRrKCJwYWdlICV1XG4iLCBrKTsKIAkJCQlxID0ga21hcChzZ19wYWdlKCZzZ1trXSkpICsgc2dba10ub2Zmc2V0OwotCQkJCWhleGR1bXAocSwgY2lwaGVyX3R2LT50YXBba10pOworCQkJCWhleGR1bXAocSwgdGVtcGxhdGVbaV0udGFwW2tdKTsKIAkJCQlwcmludGsoIiVzXG4iLAotCQkJCQltZW1jbXAocSwgY2lwaGVyX3R2LT5yZXN1bHQgKyB0ZW1wLAotCQkJCQkJY2lwaGVyX3R2LT50YXBba10pID8gImZhaWwiIDoKKwkJCQkJbWVtY21wKHEsIHRlbXBsYXRlW2ldLnJlc3VsdCArIHRlbXAsCisJCQkJCQl0ZW1wbGF0ZVtpXS50YXBba10pID8gImZhaWwiIDoKIAkJCQkJInBhc3MiKTsKLQkJCQl0ZW1wICs9IGNpcGhlcl90di0+dGFwW2tdOworCQkJCXRlbXAgKz0gdGVtcGxhdGVbaV0udGFwW2tdOworCQkJCWt1bm1hcChzZ19wYWdlKCZzZ1trXSkpOwogCQkJfQogCQl9CiAJfQotCiBvdXQ6CiAJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcih0Zm0pOwogCWFibGtjaXBoZXJfcmVxdWVzdF9mcmVlKHJlcSk7CkBAIC03MjEsMTUgKzc1MSwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1MzIgYmxvY2tfc2l6ZXNbXSA9IHsgMTYsIDY0LCAyNTYsIDEwMjQsIDgxOTIsIDAgfTsKKwogc3RhdGljIHZvaWQgdGVzdF9jaXBoZXJfc3BlZWQoY2hhciAqYWxnbywgaW50IGVuYywgdW5zaWduZWQgaW50IHNlYywKIAkJCSAgICAgIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyAqdGVtcGxhdGUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgdGNvdW50LCBzdHJ1Y3QgY2lwaGVyX3NwZWVkICpzcGVlZCkKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0Y291bnQsIHU4ICprZXlzaXplKQogewogCXVuc2lnbmVkIGludCByZXQsIGksIGosIGl2X2xlbjsKIAl1bnNpZ25lZCBjaGFyICprZXksICpwLCBpdlsxMjhdOwogCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm07CiAJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CiAJY29uc3QgY2hhciAqZTsKKwl1MzIgKmJfc2l6ZTsKIAogCWlmIChlbmMgPT0gRU5DUllQVCkKIAkgICAgICAgIGUgPSAiZW5jcnlwdGlvbiI7CkBAIC03NDgsNTIgKzc4MSw2MCBAQAogCWRlc2MudGZtID0gdGZtOwogCWRlc2MuZmxhZ3MgPSAwOwogCi0JZm9yIChpID0gMDsgc3BlZWRbaV0ua2xlbiAhPSAwOyBpKyspIHsKLQkJaWYgKChzcGVlZFtpXS5ibGVuICsgc3BlZWRbaV0ua2xlbikgPiBUVk1FTVNJWkUpIHsKLQkJCXByaW50aygidGVtcGxhdGUgKCV1KSB0b28gYmlnIGZvciB0dm1lbSAoJXUpXG4iLAotCQkJICAgICAgIHNwZWVkW2ldLmJsZW4gKyBzcGVlZFtpXS5rbGVuLCBUVk1FTVNJWkUpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlpID0gMDsKKwlkbyB7CiAKLQkJcHJpbnRrKCJ0ZXN0ICV1ICglZCBiaXQga2V5LCAlZCBieXRlIGJsb2Nrcyk6ICIsIGksCi0JCSAgICAgICBzcGVlZFtpXS5rbGVuICogOCwgc3BlZWRbaV0uYmxlbik7CisJCWJfc2l6ZSA9IGJsb2NrX3NpemVzOworCQlkbyB7CiAKLQkJbWVtc2V0KHR2bWVtLCAweGZmLCBzcGVlZFtpXS5rbGVuICsgc3BlZWRbaV0uYmxlbik7CisJCQlpZiAoKCprZXlzaXplICsgKmJfc2l6ZSkgPiBUVk1FTVNJWkUpIHsKKwkJCQlwcmludGsoInRlbXBsYXRlICgldSkgdG9vIGJpZyBmb3IgdHZtZW0gKCV1KVxuIiwKKwkJCQkJCSprZXlzaXplICsgKmJfc2l6ZSwgVFZNRU1TSVpFKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KIAotCQkvKiBzZXQga2V5LCBwbGFpbiB0ZXh0IGFuZCBJViAqLwotCQlrZXkgPSAodW5zaWduZWQgY2hhciAqKXR2bWVtOwotCQlmb3IgKGogPSAwOyBqIDwgdGNvdW50OyBqKyspIHsKLQkJCWlmICh0ZW1wbGF0ZVtqXS5rbGVuID09IHNwZWVkW2ldLmtsZW4pIHsKLQkJCQlrZXkgPSB0ZW1wbGF0ZVtqXS5rZXk7CisJCQlwcmludGsoInRlc3QgJXUgKCVkIGJpdCBrZXksICVkIGJ5dGUgYmxvY2tzKTogIiwgaSwKKwkJCQkJKmtleXNpemUgKiA4LCAqYl9zaXplKTsKKworCQkJbWVtc2V0KHR2bWVtLCAweGZmLCAqa2V5c2l6ZSArICpiX3NpemUpOworCisJCQkvKiBzZXQga2V5LCBwbGFpbiB0ZXh0IGFuZCBJViAqLworCQkJa2V5ID0gKHVuc2lnbmVkIGNoYXIgKil0dm1lbTsKKwkJCWZvciAoaiA9IDA7IGogPCB0Y291bnQ7IGorKykgeworCQkJCWlmICh0ZW1wbGF0ZVtqXS5rbGVuID09ICprZXlzaXplKSB7CisJCQkJCWtleSA9IHRlbXBsYXRlW2pdLmtleTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJcCA9ICh1bnNpZ25lZCBjaGFyICopdHZtZW0gKyAqa2V5c2l6ZTsKKworCQkJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGZtLCBrZXksICprZXlzaXplKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcmludGsoInNldGtleSgpIGZhaWxlZCBmbGFncz0leFxuIiwKKwkJCQkJCWNyeXB0b19ibGtjaXBoZXJfZ2V0X2ZsYWdzKHRmbSkpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlpdl9sZW4gPSBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pOworCQkJaWYgKGl2X2xlbikgeworCQkJCW1lbXNldCgmaXYsIDB4ZmYsIGl2X2xlbik7CisJCQkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRfaXYodGZtLCBpdiwgaXZfbGVuKTsKKwkJCX0KKworCQkJaWYgKHNlYykKKwkJCQlyZXQgPSB0ZXN0X2NpcGhlcl9qaWZmaWVzKCZkZXNjLCBlbmMsIHAsICpiX3NpemUsIHNlYyk7CisJCQllbHNlCisJCQkJcmV0ID0gdGVzdF9jaXBoZXJfY3ljbGVzKCZkZXNjLCBlbmMsIHAsICpiX3NpemUpOworCisJCQlpZiAocmV0KSB7CisJCQkJcHJpbnRrKCIlcygpIGZhaWxlZCBmbGFncz0leFxuIiwgZSwgZGVzYy5mbGFncyk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCX0KLQkJcCA9ICh1bnNpZ25lZCBjaGFyICopdHZtZW0gKyBzcGVlZFtpXS5rbGVuOwotCi0JCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbSwga2V5LCBzcGVlZFtpXS5rbGVuKTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRrKCJzZXRrZXkoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsCi0JCQkgICAgICAgY3J5cHRvX2Jsa2NpcGhlcl9nZXRfZmxhZ3ModGZtKSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWl2X2xlbiA9IGNyeXB0b19ibGtjaXBoZXJfaXZzaXplKHRmbSk7Ci0JCWlmIChpdl9sZW4pIHsKLQkJCW1lbXNldCgmaXYsIDB4ZmYsIGl2X2xlbik7Ci0JCQljcnlwdG9fYmxrY2lwaGVyX3NldF9pdih0Zm0sIGl2LCBpdl9sZW4pOwotCQl9Ci0KLQkJaWYgKHNlYykKLQkJCXJldCA9IHRlc3RfY2lwaGVyX2ppZmZpZXMoJmRlc2MsIGVuYywgcCwgc3BlZWRbaV0uYmxlbiwKLQkJCQkJCSAgc2VjKTsKLQkJZWxzZQotCQkJcmV0ID0gdGVzdF9jaXBoZXJfY3ljbGVzKCZkZXNjLCBlbmMsIHAsIHNwZWVkW2ldLmJsZW4pOwotCi0JCWlmIChyZXQpIHsKLQkJCXByaW50aygiJXMoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsIGUsIGRlc2MuZmxhZ3MpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJCQliX3NpemUrKzsKKwkJCWkrKzsKKwkJfSB3aGlsZSAoKmJfc2l6ZSk7CisJCWtleXNpemUrKzsKKwl9IHdoaWxlICgqa2V5c2l6ZSk7CiAKIG91dDoKIAljcnlwdG9fZnJlZV9ibGtjaXBoZXIodGZtKTsKQEAgLTEwNDEsMjIgKzEwODIsMTAgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAljaGFyIHJlc3VsdFtDT01QX0JVRl9TSVpFXTsKIAlzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbTsKLQlzdHJ1Y3QgY29tcF90ZXN0dmVjICp0djsKIAl1bnNpZ25lZCBpbnQgdHNpemU7CiAKIAlwcmludGsoIlxudGVzdGluZyAlcyBjb21wcmVzc2lvblxuIiwgYWxnbyk7CiAKLQl0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY29tcF90ZXN0dmVjKTsKLQl0c2l6ZSAqPSBjdGNvdW50OwotCWlmICh0c2l6ZSA+IFRWTUVNU0laRSkgewotCQlwcmludGsoInRlbXBsYXRlICgldSkgdG9vIGJpZyBmb3IgdHZtZW0gKCV1KVxuIiwgdHNpemUsCi0JCSAgICAgICBUVk1FTVNJWkUpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtY3B5KHR2bWVtLCBjdGVtcGxhdGUsIHRzaXplKTsKLQl0diA9ICh2b2lkICopdHZtZW07Ci0KIAl0Zm0gPSBjcnlwdG9fYWxsb2NfY29tcChhbGdvLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKIAlpZiAoSVNfRVJSKHRmbSkpIHsKIAkJcHJpbnRrKCJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzXG4iLCBhbGdvKTsKQEAgLTEwNjksOCArMTA5OCw4IEBACiAJCXByaW50aygidGVzdCAldTpcbiIsIGkgKyAxKTsKIAkJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mIChyZXN1bHQpKTsKIAotCQlpbGVuID0gdHZbaV0uaW5sZW47Ci0JCXJldCA9IGNyeXB0b19jb21wX2NvbXByZXNzKHRmbSwgdHZbaV0uaW5wdXQsCisJCWlsZW4gPSBjdGVtcGxhdGVbaV0uaW5sZW47CisJCXJldCA9IGNyeXB0b19jb21wX2NvbXByZXNzKHRmbSwgY3RlbXBsYXRlW2ldLmlucHV0LAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpbGVuLCByZXN1bHQsICZkbGVuKTsKIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKCJmYWlsOiByZXQ9JWRcbiIsIHJldCk7CkBAIC0xMDc4LDcgKzExMDcsNyBAQAogCQl9CiAJCWhleGR1bXAocmVzdWx0LCBkbGVuKTsKIAkJcHJpbnRrKCIlcyAocmF0aW8gJWQ6JWQpXG4iLAotCQkgICAgICAgbWVtY21wKHJlc3VsdCwgdHZbaV0ub3V0cHV0LCBkbGVuKSA/ICJmYWlsIiA6ICJwYXNzIiwKKwkJICAgICAgIG1lbWNtcChyZXN1bHQsIGN0ZW1wbGF0ZVtpXS5vdXRwdXQsIGRsZW4pID8gImZhaWwiIDogInBhc3MiLAogCQkgICAgICAgaWxlbiwgZGxlbik7CiAJfQogCkBAIC0xMDkyLDE3ICsxMTIxLDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbWNweSh0dm1lbSwgZHRlbXBsYXRlLCB0c2l6ZSk7Ci0JdHYgPSAodm9pZCAqKXR2bWVtOwotCiAJZm9yIChpID0gMDsgaSA8IGR0Y291bnQ7IGkrKykgewogCQlpbnQgaWxlbiwgcmV0LCBkbGVuID0gQ09NUF9CVUZfU0laRTsKIAogCQlwcmludGsoInRlc3QgJXU6XG4iLCBpICsgMSk7CiAJCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZiAocmVzdWx0KSk7CiAKLQkJaWxlbiA9IHR2W2ldLmlubGVuOwotCQlyZXQgPSBjcnlwdG9fY29tcF9kZWNvbXByZXNzKHRmbSwgdHZbaV0uaW5wdXQsCisJCWlsZW4gPSBkdGVtcGxhdGVbaV0uaW5sZW47CisJCXJldCA9IGNyeXB0b19jb21wX2RlY29tcHJlc3ModGZtLCBkdGVtcGxhdGVbaV0uaW5wdXQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWxlbiwgcmVzdWx0LCAmZGxlbik7CiAJCWlmIChyZXQpIHsKIAkJCXByaW50aygiZmFpbDogcmV0PSVkXG4iLCByZXQpOwpAQCAtMTExMCw3ICsxMTM2LDcgQEAKIAkJfQogCQloZXhkdW1wKHJlc3VsdCwgZGxlbik7CiAJCXByaW50aygiJXMgKHJhdGlvICVkOiVkKVxuIiwKLQkJICAgICAgIG1lbWNtcChyZXN1bHQsIHR2W2ldLm91dHB1dCwgZGxlbikgPyAiZmFpbCIgOiAicGFzcyIsCisJCSAgICAgICBtZW1jbXAocmVzdWx0LCBkdGVtcGxhdGVbaV0ub3V0cHV0LCBkbGVuKSA/ICJmYWlsIiA6ICJwYXNzIiwKIAkJICAgICAgIGlsZW4sIGRsZW4pOwogCX0KIG91dDoKQEAgLTEzMDEsNiArMTMyNywxMiBAQAogCQl0ZXN0X2NpcGhlcigiZWNiKHNlZWQpIiwgREVDUllQVCwgc2VlZF9kZWNfdHZfdGVtcGxhdGUsCiAJCQkgICAgU0VFRF9ERUNfVEVTVF9WRUNUT1JTKTsKIAorCQkvL0NUUworCQl0ZXN0X2NpcGhlcigiY3RzKGNiYyhhZXMpKSIsIEVOQ1JZUFQsIGN0c19tb2RlX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBDVFNfTU9ERV9FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImN0cyhjYmMoYWVzKSkiLCBERUNSWVBULCBjdHNfbW9kZV9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgQ1RTX01PREVfREVDX1RFU1RfVkVDVE9SUyk7CisKIAkJdGVzdF9oYXNoKCJzaGEzODQiLCBzaGEzODRfdHZfdGVtcGxhdGUsIFNIQTM4NF9URVNUX1ZFQ1RPUlMpOwogCQl0ZXN0X2hhc2goInNoYTUxMiIsIHNoYTUxMl90dl90ZW1wbGF0ZSwgU0hBNTEyX1RFU1RfVkVDVE9SUyk7CiAJCXRlc3RfaGFzaCgid3A1MTIiLCB3cDUxMl90dl90ZW1wbGF0ZSwgV1A1MTJfVEVTVF9WRUNUT1JTKTsKQEAgLTE1ODQsNiArMTYxNiwxMyBAQAogCQkJICBBRVNfQ0NNX0RFQ19URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAorCWNhc2UgMzg6CisJCXRlc3RfY2lwaGVyKCJjdHMoY2JjKGFlcykpIiwgRU5DUllQVCwgY3RzX21vZGVfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIENUU19NT0RFX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiY3RzKGNiYyhhZXMpKSIsIERFQ1JZUFQsIGN0c19tb2RlX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBDVFNfTU9ERV9ERUNfVEVTVF9WRUNUT1JTKTsKKwkJYnJlYWs7CisKIAljYXNlIDEwMDoKIAkJdGVzdF9oYXNoKCJobWFjKG1kNSkiLCBobWFjX21kNV90dl90ZW1wbGF0ZSwKIAkJCSAgSE1BQ19NRDVfVEVTVF9WRUNUT1JTKTsKQEAgLTE2MjEsODkgKzE2NjAsODUgQEAKIAogCWNhc2UgMjAwOgogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKGFlcykiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBhZXNfc3BlZWRfdGVtcGxhdGUpOworCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihhZXMpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAotCQkJCSAgYWVzX3NwZWVkX3RlbXBsYXRlKTsKKwkJCQlzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7CiAJCXRlc3RfY2lwaGVyX3NwZWVkKCJjYmMoYWVzKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIGFlc19zcGVlZF90ZW1wbGF0ZSk7CisJCQkJc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpOwogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiY2JjKGFlcykiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBhZXNfc3BlZWRfdGVtcGxhdGUpOworCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImxydyhhZXMpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAotCQkJCSAgYWVzX2xyd19zcGVlZF90ZW1wbGF0ZSk7CisJCQkJc3BlZWRfdGVtcGxhdGVfMzJfNDBfNDgpOwogCQl0ZXN0X2NpcGhlcl9zcGVlZCgibHJ3KGFlcykiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBhZXNfbHJ3X3NwZWVkX3RlbXBsYXRlKTsKKwkJCQlzcGVlZF90ZW1wbGF0ZV8zMl80MF80OCk7CiAJCXRlc3RfY2lwaGVyX3NwZWVkKCJ4dHMoYWVzKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIGFlc194dHNfc3BlZWRfdGVtcGxhdGUpOworCQkJCXNwZWVkX3RlbXBsYXRlXzMyXzQ4XzY0KTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoInh0cyhhZXMpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAotCQkJCSAgYWVzX3h0c19zcGVlZF90ZW1wbGF0ZSk7CisJCQkJc3BlZWRfdGVtcGxhdGVfMzJfNDhfNjQpOwogCQlicmVhazsKIAogCWNhc2UgMjAxOgogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKGRlczNfZWRlKSIsIEVOQ1JZUFQsIHNlYywKLQkJCQkgIGRlczNfZWRlX2VuY190dl90ZW1wbGF0ZSwKLQkJCQkgIERFUzNfRURFX0VOQ19URVNUX1ZFQ1RPUlMsCi0JCQkJICBkZXMzX2VkZV9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJZGVzM19lZGVfZW5jX3R2X3RlbXBsYXRlLCBERVMzX0VERV9FTkNfVEVTVF9WRUNUT1JTLAorCQkJCXNwZWVkX3RlbXBsYXRlXzI0KTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihkZXMzX2VkZSkiLCBERUNSWVBULCBzZWMsCi0JCQkJICBkZXMzX2VkZV9kZWNfdHZfdGVtcGxhdGUsCi0JCQkJICBERVMzX0VERV9ERUNfVEVTVF9WRUNUT1JTLAotCQkJCSAgZGVzM19lZGVfc3BlZWRfdGVtcGxhdGUpOworCQkJCWRlczNfZWRlX2VuY190dl90ZW1wbGF0ZSwgREVTM19FREVfRU5DX1RFU1RfVkVDVE9SUywKKwkJCQlzcGVlZF90ZW1wbGF0ZV8yNCk7CiAJCXRlc3RfY2lwaGVyX3NwZWVkKCJjYmMoZGVzM19lZGUpIiwgRU5DUllQVCwgc2VjLAotCQkJCSAgZGVzM19lZGVfZW5jX3R2X3RlbXBsYXRlLAotCQkJCSAgREVTM19FREVfRU5DX1RFU1RfVkVDVE9SUywKLQkJCQkgIGRlczNfZWRlX3NwZWVkX3RlbXBsYXRlKTsKKwkJCQlkZXMzX2VkZV9lbmNfdHZfdGVtcGxhdGUsIERFUzNfRURFX0VOQ19URVNUX1ZFQ1RPUlMsCisJCQkJc3BlZWRfdGVtcGxhdGVfMjQpOwogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiY2JjKGRlczNfZWRlKSIsIERFQ1JZUFQsIHNlYywKLQkJCQkgIGRlczNfZWRlX2RlY190dl90ZW1wbGF0ZSwKLQkJCQkgIERFUzNfRURFX0RFQ19URVNUX1ZFQ1RPUlMsCi0JCQkJICBkZXMzX2VkZV9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJZGVzM19lZGVfZW5jX3R2X3RlbXBsYXRlLCBERVMzX0VERV9FTkNfVEVTVF9WRUNUT1JTLAorCQkJCXNwZWVkX3RlbXBsYXRlXzI0KTsKIAkJYnJlYWs7CiAKIAljYXNlIDIwMjoKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYih0d29maXNoKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIHR3b2Zpc2hfc3BlZWRfdGVtcGxhdGUpOworCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYih0d29maXNoKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIHR3b2Zpc2hfc3BlZWRfdGVtcGxhdGUpOworCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyh0d29maXNoKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIHR3b2Zpc2hfc3BlZWRfdGVtcGxhdGUpOworCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyh0d29maXNoKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIHR3b2Zpc2hfc3BlZWRfdGVtcGxhdGUpOworCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKIAkJYnJlYWs7CiAKIAljYXNlIDIwMzoKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihibG93ZmlzaCkiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBibG93ZmlzaF9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJICBzcGVlZF90ZW1wbGF0ZV84XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihibG93ZmlzaCkiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBibG93ZmlzaF9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJICBzcGVlZF90ZW1wbGF0ZV84XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyhibG93ZmlzaCkiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBibG93ZmlzaF9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJICBzcGVlZF90ZW1wbGF0ZV84XzMyKTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyhibG93ZmlzaCkiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBibG93ZmlzaF9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJICBzcGVlZF90ZW1wbGF0ZV84XzMyKTsKIAkJYnJlYWs7CiAKIAljYXNlIDIwNDoKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihkZXMpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAotCQkJCSAgZGVzX3NwZWVkX3RlbXBsYXRlKTsKKwkJCQkgIHNwZWVkX3RlbXBsYXRlXzgpOwogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKGRlcykiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCi0JCQkJICBkZXNfc3BlZWRfdGVtcGxhdGUpOworCQkJCSAgc3BlZWRfdGVtcGxhdGVfOCk7CiAJCXRlc3RfY2lwaGVyX3NwZWVkKCJjYmMoZGVzKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIGRlc19zcGVlZF90ZW1wbGF0ZSk7CisJCQkJICBzcGVlZF90ZW1wbGF0ZV84KTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyhkZXMpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAotCQkJCSAgZGVzX3NwZWVkX3RlbXBsYXRlKTsKKwkJCQkgIHNwZWVkX3RlbXBsYXRlXzgpOwogCQlicmVhazsKIAogCWNhc2UgMjA1OgogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKGNhbWVsbGlhKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQljYW1lbGxpYV9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpOwogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKGNhbWVsbGlhKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQljYW1lbGxpYV9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpOwogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiY2JjKGNhbWVsbGlhKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQljYW1lbGxpYV9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpOwogCQl0ZXN0X2NpcGhlcl9zcGVlZCgiY2JjKGNhbWVsbGlhKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQljYW1lbGxpYV9zcGVlZF90ZW1wbGF0ZSk7CisJCQkJc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpOwogCQlicmVhazsKIAogCWNhc2UgMjA2OgogCQl0ZXN0X2NpcGhlcl9zcGVlZCgic2Fsc2EyMCIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKLQkJCQkgIHNhbHNhMjBfc3BlZWRfdGVtcGxhdGUpOworCQkJCSAgc3BlZWRfdGVtcGxhdGVfMTZfMzIpOwogCQlicmVhazsKIAogCWNhc2UgMzAwOgpAQCAtMTc3NSw3ICsxODEwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHRjcnlwdF9tb2RfaW5pdCh2b2lkKQogewogCWludCBlcnIgPSAtRU5PTUVNOwogCkBAIC0xODE0LDEwICsxODQ5LDEwIEBACiAgKiBJZiBhbiBpbml0IGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBhbiBleGl0IGZ1bmN0aW9uIG11c3QgYWxzbyBiZSBwcm92aWRlZAogICogdG8gYWxsb3cgbW9kdWxlIHVubG9hZC4KICAqLwotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkgeyB9CitzdGF0aWMgdm9pZCBfX2V4aXQgdGNyeXB0X21vZF9maW5pKHZvaWQpIHsgfQogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQodGNyeXB0X21vZF9pbml0KTsKK21vZHVsZV9leGl0KHRjcnlwdF9tb2RfZmluaSk7CiAKIG1vZHVsZV9wYXJhbShtb2RlLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtKHNlYywgdWludCwgMCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGNyeXB0LmggYi9jcnlwdG8vdGNyeXB0LmgKaW5kZXggZjc4NWU1NjEuLjQ3YmMwZWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by90Y3J5cHQuaAorKysgYi9jcnlwdG8vdGNyeXB0LmgKQEAgLTMxLDkgKzMxLDkgQEAKIAogc3RydWN0IGhhc2hfdGVzdHZlYyB7CiAJLyogb25seSB1c2VkIHdpdGgga2V5ZWQgaGFzaCBhbGdvcml0aG1zICovCi0JY2hhciBrZXlbMTMyXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oNCkpKTsKLQljaGFyIHBsYWludGV4dFsyNDBdOwotCWNoYXIgZGlnZXN0W01BWF9ESUdFU1RfU0laRV07CisJY2hhciAqa2V5OworCWNoYXIgKnBsYWludGV4dDsKKwljaGFyICpkaWdlc3Q7CiAJdW5zaWduZWQgY2hhciB0YXBbTUFYX1RBUF07CiAJdW5zaWduZWQgY2hhciBwc2l6ZTsKIAl1bnNpZ25lZCBjaGFyIG5wOwpAQCAtNDEsMTAgKzQxLDEwIEBACiB9OwogCiBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgewotCWNoYXIga2V5W01BWF9LRVlMRU5dIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXyg0KSkpOwotCWNoYXIgaXZbTUFYX0lWTEVOXTsKLQljaGFyIGlucHV0WzQxMDBdOwotCWNoYXIgcmVzdWx0WzQxMDBdOworCWNoYXIgKmtleTsKKwljaGFyICppdjsKKwljaGFyICppbnB1dDsKKwljaGFyICpyZXN1bHQ7CiAJdW5zaWduZWQgY2hhciB0YXBbTUFYX1RBUF07CiAJaW50IG5wOwogCXVuc2lnbmVkIGNoYXIgZmFpbDsKQEAgLTU1LDExICs1NSwxMSBAQAogfTsKIAogc3RydWN0IGFlYWRfdGVzdHZlYyB7Ci0JY2hhciBrZXlbTUFYX0tFWUxFTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDQpKSk7Ci0JY2hhciBpdltNQVhfSVZMRU5dOwotCWNoYXIgaW5wdXRbNTEyXTsKLQljaGFyIGFzc29jWzUxMl07Ci0JY2hhciByZXN1bHRbNTEyXTsKKwljaGFyICprZXk7CisJY2hhciAqaXY7CisJY2hhciAqaW5wdXQ7CisJY2hhciAqYXNzb2M7CisJY2hhciAqcmVzdWx0OwogCXVuc2lnbmVkIGNoYXIgdGFwW01BWF9UQVBdOwogCXVuc2lnbmVkIGNoYXIgYXRhcFtNQVhfVEFQXTsKIAlpbnQgbnA7CkBAIC03MiwxNiArNzIsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCBybGVuOwogfTsKIAotc3RydWN0IGNpcGhlcl9zcGVlZCB7Ci0JdW5zaWduZWQgY2hhciBrbGVuOwotCXVuc2lnbmVkIGludCBibGVuOwotfTsKLQogc3RydWN0IGhhc2hfc3BlZWQgewogCXVuc2lnbmVkIGludCBibGVuOwkvKiBidWZmZXIgbGVuZ3RoICovCiAJdW5zaWduZWQgaW50IHBsZW47CS8qIHBlci11cGRhdGUgbGVuZ3RoICovCiB9OwogCitzdGF0aWMgY2hhciB6ZXJvZWRfc3RyaW5nWzQ4XTsKKwogLyoKICAqIE1ENCB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMxMzIwCiAgKi8KQEAgLTkwLDQxICs4Nyw0MSBAQAogc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgbWQ0X3R2X3RlbXBsYXRlIFtdID0gewogCXsKIAkJLnBsYWludGV4dCA9ICIiLAotCQkuZGlnZXN0CT0geyAweDMxLCAweGQ2LCAweGNmLCAweGUwLCAweGQxLCAweDZhLCAweGU5LCAweDMxLAotCQkJICAgIDB4YjcsIDB4M2MsIDB4NTksIDB4ZDcsIDB4ZTAsIDB4YzAsIDB4ODksIDB4YzAgfSwKKwkJLmRpZ2VzdAk9ICJceDMxXHhkNlx4Y2ZceGUwXHhkMVx4NmFceGU5XHgzMSIKKwkJCSAgIlx4YjdceDNjXHg1OVx4ZDdceGUwXHhjMFx4ODlceGMwIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYSIsCiAJCS5wc2l6ZQk9IDEsCi0JCS5kaWdlc3QJPSB7IDB4YmQsIDB4ZTUsIDB4MmMsIDB4YjMsIDB4MWQsIDB4ZTMsIDB4M2UsIDB4NDYsCi0JCQkgICAgMHgyNCwgMHg1ZSwgMHgwNSwgMHhmYiwgMHhkYiwgMHhkNiwgMHhmYiwgMHgyNCB9LAorCQkuZGlnZXN0CT0gIlx4YmRceGU1XHgyY1x4YjNceDFkXHhlM1x4M2VceDQ2IgorCQkJICAiXHgyNFx4NWVceDA1XHhmYlx4ZGJceGQ2XHhmYlx4MjQiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmMiLAogCQkucHNpemUJPSAzLAotCQkuZGlnZXN0CT0geyAweGE0LCAweDQ4LCAweDAxLCAweDdhLCAweGFmLCAweDIxLCAweGQ4LCAweDUyLAotCQkJICAgIDB4NWYsIDB4YzEsIDB4MGEsIDB4ZTgsIDB4N2EsIDB4YTYsIDB4NzIsIDB4OWQgfSwKKwkJLmRpZ2VzdAk9ICJceGE0XHg0OFx4MDFceDdhXHhhZlx4MjFceGQ4XHg1MiIKKwkJCSAgIlx4NWZceGMxXHgwYVx4ZThceDdhXHhhNlx4NzJceDlkIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAibWVzc2FnZSBkaWdlc3QiLAogCQkucHNpemUJPSAxNCwKLQkJLmRpZ2VzdAk9IHsgMHhkOSwgMHgxMywgMHgwYSwgMHg4MSwgMHg2NCwgMHg1NCwgMHg5ZiwgMHhlOCwKLQkJCSAgICAweDE4LCAweDg3LCAweDQ4LCAweDA2LCAweGUxLCAweGM3LCAweDAxLCAweDRiIH0sCisJCS5kaWdlc3QJPSAiXHhkOVx4MTNceDBhXHg4MVx4NjRceDU0XHg5Zlx4ZTgiCisJCQkiXHgxOFx4ODdceDQ4XHgwNlx4ZTFceGM3XHgwMVx4NGIiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCiAJCS5wc2l6ZQk9IDI2LAotCQkuZGlnZXN0CT0geyAweGQ3LCAweDllLCAweDFjLCAweDMwLCAweDhhLCAweGE1LCAweGJiLCAweGNkLAotCQkJICAgIDB4ZWUsIDB4YTgsIDB4ZWQsIDB4NjMsIDB4ZGYsIDB4NDEsIDB4MmQsIDB4YTkgfSwKKwkJLmRpZ2VzdAk9ICJceGQ3XHg5ZVx4MWNceDMwXHg4YVx4YTVceGJiXHhjZCIKKwkJCSAgIlx4ZWVceGE4XHhlZFx4NjNceGRmXHg0MVx4MmRceGE5IiwKIAkJLm5wCT0gMiwKIAkJLnRhcAk9IHsgMTMsIDEzIH0sCiAJfSwgewogCQkucGxhaW50ZXh0ID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiwKIAkJLnBzaXplCT0gNjIsCi0JCS5kaWdlc3QJPSB7IDB4MDQsIDB4M2YsIDB4ODUsIDB4ODIsIDB4ZjIsIDB4NDEsIDB4ZGIsIDB4MzUsCi0JCQkgICAgMHgxYywgMHhlNiwgMHgyNywgMHhlMSwgMHg1MywgMHhlNywgMHhmMCwgMHhlNCB9LAorCQkuZGlnZXN0CT0gIlx4MDRceDNmXHg4NVx4ODJceGYyXHg0MVx4ZGJceDM1IgorCQkJICAiXHgxY1x4ZTZceDI3XHhlMVx4NTNceGU3XHhmMFx4ZTQiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMiCi0JCQkgICAgICI0NTY3ODkwMTIzNDU2Nzg5MCIsCisJCQkgICAiNDU2Nzg5MDEyMzQ1Njc4OTAiLAogCQkucHNpemUJPSA4MCwKLQkJLmRpZ2VzdAk9IHsgMHhlMywgMHgzYiwgMHg0ZCwgMHhkYywgMHg5YywgMHgzOCwgMHhmMiwgMHgxOSwKLQkJCSAgICAweDljLCAweDNlLCAweDdiLCAweDE2LCAweDRmLCAweGNjLCAweDA1LCAweDM2IH0sCisJCS5kaWdlc3QJPSAiXHhlM1x4M2JceDRkXHhkY1x4OWNceDM4XHhmMlx4MTkiCisJCQkgICJceDljXHgzZVx4N2JceDE2XHg0Zlx4Y2NceDA1XHgzNiIsCiAJfSwKIH07CiAKQEAgLTEzNSw0MSArMTMyLDQxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGFzaF90ZXN0dmVjIG1kNV90dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmRpZ2VzdAk9IHsgMHhkNCwgMHgxZCwgMHg4YywgMHhkOSwgMHg4ZiwgMHgwMCwgMHhiMiwgMHgwNCwKLQkJCSAgICAweGU5LCAweDgwLCAweDA5LCAweDk4LCAweGVjLCAweGY4LCAweDQyLCAweDdlIH0sCisJCS5kaWdlc3QJPSAiXHhkNFx4MWRceDhjXHhkOVx4OGZceDAwXHhiMlx4MDQiCisJCQkgICJceGU5XHg4MFx4MDlceDk4XHhlY1x4ZjhceDQyXHg3ZSIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gImEiLAogCQkucHNpemUJPSAxLAotCQkuZGlnZXN0CT0geyAweDBjLCAweGMxLCAweDc1LCAweGI5LCAweGMwLCAweGYxLCAweGI2LCAweGE4LAotCQkJICAgIDB4MzEsIDB4YzMsIDB4OTksIDB4ZTIsIDB4NjksIDB4NzcsIDB4MjYsIDB4NjEgfSwKKwkJLmRpZ2VzdAk9ICJceDBjXHhjMVx4NzVceGI5XHhjMFx4ZjFceGI2XHhhOCIKKwkJCSAgIlx4MzFceGMzXHg5OVx4ZTJceDY5XHg3N1x4MjZceDYxIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjIiwKIAkJLnBzaXplCT0gMywKLQkJLmRpZ2VzdAk9IHsgMHg5MCwgMHgwMSwgMHg1MCwgMHg5OCwgMHgzYywgMHhkMiwgMHg0ZiwgMHhiMCwKLQkJCSAgICAweGQ2LCAweDk2LCAweDNmLCAweDdkLCAweDI4LCAweGUxLCAweDdmLCAweDcyIH0sCisJCS5kaWdlc3QJPSAiXHg5MFx4MDFceDUwXHg5OFx4M2NceGQyXHg0Zlx4YjAiCisJCQkgICJceGQ2XHg5Nlx4M2ZceDdkXHgyOFx4ZTFceDdmXHg3MiIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gIm1lc3NhZ2UgZGlnZXN0IiwKIAkJLnBzaXplCT0gMTQsCi0JCS5kaWdlc3QJPSB7IDB4ZjksIDB4NmIsIDB4NjksIDB4N2QsIDB4N2MsIDB4YjcsIDB4OTMsIDB4OGQsCi0JCQkgICAgMHg1MiwgMHg1YSwgMHgyZiwgMHgzMSwgMHhhYSwgMHhmMSwgMHg2MSwgMHhkMCB9LAorCQkuZGlnZXN0CT0gIlx4ZjlceDZiXHg2OVx4N2RceDdjXHhiN1x4OTNceDhkIgorCQkJICAiXHg1Mlx4NWFceDJmXHgzMVx4YWFceGYxXHg2MVx4ZDAiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCiAJCS5wc2l6ZQk9IDI2LAotCQkuZGlnZXN0CT0geyAweGMzLCAweGZjLCAweGQzLCAweGQ3LCAweDYxLCAweDkyLCAweGU0LCAweDAwLAotCQkJICAgIDB4N2QsIDB4ZmIsIDB4NDksIDB4NmMsIDB4Y2EsIDB4NjcsIDB4ZTEsIDB4M2IgfSwKKwkJLmRpZ2VzdAk9ICJceGMzXHhmY1x4ZDNceGQ3XHg2MVx4OTJceGU0XHgwMCIKKwkJCSAgIlx4N2RceGZiXHg0OVx4NmNceGNhXHg2N1x4ZTFceDNiIiwKIAkJLm5wCT0gMiwKIAkJLnRhcAk9IHsxMywgMTN9CiAJfSwgewogCQkucGxhaW50ZXh0ID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiwKIAkJLnBzaXplCT0gNjIsCi0JCS5kaWdlc3QJPSB7IDB4ZDEsIDB4NzQsIDB4YWIsIDB4OTgsIDB4ZDIsIDB4NzcsIDB4ZDksIDB4ZjUsCi0JCQkgICAgMHhhNSwgMHg2MSwgMHgxYywgMHgyYywgMHg5ZiwgMHg0MSwgMHg5ZCwgMHg5ZiB9LAorCQkuZGlnZXN0CT0gIlx4ZDFceDc0XHhhYlx4OThceGQyXHg3N1x4ZDlceGY1IgorCQkJICAiXHhhNVx4NjFceDFjXHgyY1x4OWZceDQxXHg5ZFx4OWYiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMiIKLQkJCSAgICAgIjM0NTY3ODkwMTIzNDU2Nzg5MCIsCisJCQkgICAiMzQ1Njc4OTAxMjM0NTY3ODkwIiwKIAkJLnBzaXplCT0gODAsCi0JCS5kaWdlc3QJPSB7IDB4NTcsIDB4ZWQsIDB4ZjQsIDB4YTIsIDB4MmIsIDB4ZTMsIDB4YzksIDB4NTUsCi0JCQkgICAgMHhhYywgMHg0OSwgMHhkYSwgMHgyZSwgMHgyMSwgMHgwNywgMHhiNiwgMHg3YSB9LAorCQkuZGlnZXN0CT0gIlx4NTdceGVkXHhmNFx4YTJceDJiXHhlM1x4YzlceDU1IgorCQkJICAiXHhhY1x4NDlceGRhXHgyZVx4MjFceDA3XHhiNlx4N2EiLAogCX0KIH07CiAKQEAgLTE4MiwxMyArMTc5LDEzIEBACiAJewogCQkucGxhaW50ZXh0ID0gImFiYyIsCiAJCS5wc2l6ZQk9IDMsCi0JCS5kaWdlc3QJPSB7IDB4YTksIDB4OTksIDB4M2UsIDB4MzYsIDB4NDcsIDB4MDYsIDB4ODEsIDB4NmEsIDB4YmEsIDB4M2UsCi0JCQkgICAgMHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhjMiwgMHg2YywgMHg5YywgMHhkMCwgMHhkOCwgMHg5ZCB9LAorCQkuZGlnZXN0CT0gIlx4YTlceDk5XHgzZVx4MzZceDQ3XHgwNlx4ODFceDZhXHhiYVx4M2UiCisJCQkgICJceDI1XHg3MVx4NzhceDUwXHhjMlx4NmNceDljXHhkMFx4ZDhceDlkIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAogCQkucHNpemUJPSA1NiwKLQkJLmRpZ2VzdAk9IHsgMHg4NCwgMHg5OCwgMHgzZSwgMHg0NCwgMHgxYywgMHgzYiwgMHhkMiwgMHg2ZSwgMHhiYSwgMHhhZSwKLQkJCSAgICAweDRhLCAweGExLCAweGY5LCAweDUxLCAweDI5LCAweGU1LCAweGU1LCAweDQ2LCAweDcwLCAweGYxIH0sCisJCS5kaWdlc3QJPSAiXHg4NFx4OThceDNlXHg0NFx4MWNceDNiXHhkMlx4NmVceGJhXHhhZSIKKwkJCSAgIlx4NGFceGExXHhmOVx4NTFceDI5XHhlNVx4ZTVceDQ2XHg3MFx4ZjEiLAogCQkubnAJPSAyLAogCQkudGFwCT0geyAyOCwgMjggfQogCX0KQEAgLTIwNCwxOCArMjAxLDE4IEBACiAJewogCQkucGxhaW50ZXh0ID0gImFiYyIsCiAJCS5wc2l6ZSAgPSAzLAotCQkuZGlnZXN0ID0geyAweDIzLCAweDA5LCAweDdELCAweDIyLCAweDM0LCAweDA1LCAweEQ4LCAweDIyLAotCQkJMHg4NiwgMHg0MiwgMHhBNCwgMHg3NywgMHhCRCwgMHhBMiwgMHg1NSwgMHhCMywKLQkJCTB4MkEsIDB4QUQsIDB4QkMsIDB4RTQsIDB4QkQsIDB4QTAsIDB4QjMsIDB4RjcsCi0JCQkweEUzLCAweDZDLCAweDlELCAweEE3fSwKKwkJLmRpZ2VzdCA9ICJceDIzXHgwOVx4N0RceDIyXHgzNFx4MDVceEQ4XHgyMiIKKwkJCSAgIlx4ODZceDQyXHhBNFx4NzdceEJEXHhBMlx4NTVceEIzIgorCQkJICAiXHgyQVx4QURceEJDXHhFNFx4QkRceEEwXHhCM1x4RjciCisJCQkgICJceEUzXHg2Q1x4OURceEE3IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPQogCQkiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAogCQkucHNpemUgID0gNTYsCi0JCS5kaWdlc3QgPSB7IDB4NzUsIDB4MzgsIDB4OEIsIDB4MTYsIDB4NTEsIDB4MjcsIDB4NzYsIDB4Q0MsCi0JCQkweDVELCAweEJBLCAweDVELCAweEExLCAweEZELCAweDg5LCAweDAxLCAweDUwLAotCQkJMHhCMCwgMHhDNiwgMHg0NSwgMHg1QywgMHhCNCwgMHhGNSwgMHg4QiwgMHgxOSwKLQkJCTB4NTIsIDB4NTIsIDB4MjUsIDB4MjUgfSwKKwkJLmRpZ2VzdCA9ICJceDc1XHgzOFx4OEJceDE2XHg1MVx4MjdceDc2XHhDQyIKKwkJCSAgIlx4NURceEJBXHg1RFx4QTFceEZEXHg4OVx4MDFceDUwIgorCQkJICAiXHhCMFx4QzZceDQ1XHg1Q1x4QjRceEY1XHg4Qlx4MTkiCisJCQkgICJceDUyXHg1Mlx4MjVceDI1IiwKIAkJLm5wICAgICA9IDIsCiAJCS50YXAgICAgPSB7IDI4LCAyOCB9CiAJfQpAQCAtMjMwLDE3ICsyMjcsMTcgQEAKIAl7CiAJCS5wbGFpbnRleHQgPSAiYWJjIiwKIAkJLnBzaXplCT0gMywKLQkJLmRpZ2VzdAk9IHsgMHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwKLQkJCSAgICAweDQxLCAweDQxLCAweDQwLCAweGRlLCAweDVkLCAweGFlLCAweDIyLCAweDIzLAotCQkJICAgIDB4YjAsIDB4MDMsIDB4NjEsIDB4YTMsIDB4OTYsIDB4MTcsIDB4N2EsIDB4OWMsCi0JCQkgICAgMHhiNCwgMHgxMCwgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZCB9LAorCQkuZGlnZXN0CT0gIlx4YmFceDc4XHgxNlx4YmZceDhmXHgwMVx4Y2ZceGVhIgorCQkJICAiXHg0MVx4NDFceDQwXHhkZVx4NWRceGFlXHgyMlx4MjMiCisJCQkgICJceGIwXHgwM1x4NjFceGEzXHg5Nlx4MTdceDdhXHg5YyIKKwkJCSAgIlx4YjRceDEwXHhmZlx4NjFceGYyXHgwMFx4MTVceGFkIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAogCQkucHNpemUJPSA1NiwKLQkJLmRpZ2VzdAk9IHsgMHgyNCwgMHg4ZCwgMHg2YSwgMHg2MSwgMHhkMiwgMHgwNiwgMHgzOCwgMHhiOCwKLQkJCSAgICAweGU1LCAweGMwLCAweDI2LCAweDkzLCAweDBjLCAweDNlLCAweDYwLCAweDM5LAotCQkJICAgIDB4YTMsIDB4M2MsIDB4ZTQsIDB4NTksIDB4NjQsIDB4ZmYsIDB4MjEsIDB4NjcsCi0JCQkgICAgMHhmNiwgMHhlYywgMHhlZCwgMHhkNCwgMHgxOSwgMHhkYiwgMHgwNiwgMHhjMSB9LAorCQkuZGlnZXN0CT0gIlx4MjRceDhkXHg2YVx4NjFceGQyXHgwNlx4MzhceGI4IgorCQkJICAiXHhlNVx4YzBceDI2XHg5M1x4MGNceDNlXHg2MFx4MzkiCisJCQkgICJceGEzXHgzY1x4ZTRceDU5XHg2NFx4ZmZceDIxXHg2NyIKKwkJCSAgIlx4ZjZceGVjXHhlZFx4ZDRceDE5XHhkYlx4MDZceGMxIiwKIAkJLm5wCT0gMiwKIAkJLnRhcAk9IHsgMjgsIDI4IH0KIAl9LApAQCAtMjU1LDQxICsyNTIsNDEgQEAKIAl7CiAJCS5wbGFpbnRleHQ9ICJhYmMiLAogCQkucHNpemUJPSAzLAotCQkuZGlnZXN0CT0geyAweGNiLCAweDAwLCAweDc1LCAweDNmLCAweDQ1LCAweGEzLCAweDVlLCAweDhiLAotCQkJICAgIDB4YjUsIDB4YTAsIDB4M2QsIDB4NjksIDB4OWEsIDB4YzYsIDB4NTAsIDB4MDcsCi0JCQkgICAgMHgyNywgMHgyYywgMHgzMiwgMHhhYiwgMHgwZSwgMHhkZSwgMHhkMSwgMHg2MywKLQkJCSAgICAweDFhLCAweDhiLCAweDYwLCAweDVhLCAweDQzLCAweGZmLCAweDViLCAweGVkLAotCQkJICAgIDB4ODAsIDB4ODYsIDB4MDcsIDB4MmIsIDB4YTEsIDB4ZTcsIDB4Y2MsIDB4MjMsCi0JCQkgICAgMHg1OCwgMHhiYSwgMHhlYywgMHhhMSwgMHgzNCwgMHhjOCwgMHgyNSwgMHhhNyB9LAorCQkuZGlnZXN0CT0gIlx4Y2JceDAwXHg3NVx4M2ZceDQ1XHhhM1x4NWVceDhiIgorCQkJICAiXHhiNVx4YTBceDNkXHg2OVx4OWFceGM2XHg1MFx4MDciCisJCQkgICJceDI3XHgyY1x4MzJceGFiXHgwZVx4ZGVceGQxXHg2MyIKKwkJCSAgIlx4MWFceDhiXHg2MFx4NWFceDQzXHhmZlx4NWJceGVkIgorCQkJICAiXHg4MFx4ODZceDA3XHgyYlx4YTFceGU3XHhjY1x4MjMiCisJCQkgICJceDU4XHhiYVx4ZWNceGExXHgzNFx4YzhceDI1XHhhNyIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiwKIAkJLnBzaXplCT0gNTYsCi0JCS5kaWdlc3QJPSB7IDB4MzMsIDB4OTEsIDB4ZmQsIDB4ZGQsIDB4ZmMsIDB4OGQsIDB4YzcsIDB4MzksCi0JCQkgICAgMHgzNywgMHgwNywgMHhhNiwgMHg1YiwgMHgxYiwgMHg0NywgMHgwOSwgMHgzOSwKLQkJCSAgICAweDdjLCAweGY4LCAweGIxLCAweGQxLCAweDYyLCAweGFmLCAweDA1LCAweGFiLAotCQkJICAgIDB4ZmUsIDB4OGYsIDB4NDUsIDB4MGQsIDB4ZTUsIDB4ZjMsIDB4NmIsIDB4YzYsCi0JCQkgICAgMHhiMCwgMHg0NSwgMHg1YSwgMHg4NSwgMHgyMCwgMHhiYywgMHg0ZSwgMHg2ZiwKLQkJCSAgICAweDVmLCAweGU5LCAweDViLCAweDFmLCAweGUzLCAweGM4LCAweDQ1LCAweDJifSwKKwkJLmRpZ2VzdAk9ICJceDMzXHg5MVx4ZmRceGRkXHhmY1x4OGRceGM3XHgzOSIKKwkJCSAgIlx4MzdceDA3XHhhNlx4NWJceDFiXHg0N1x4MDlceDM5IgorCQkJICAiXHg3Y1x4ZjhceGIxXHhkMVx4NjJceGFmXHgwNVx4YWIiCisJCQkgICJceGZlXHg4Zlx4NDVceDBkXHhlNVx4ZjNceDZiXHhjNiIKKwkJCSAgIlx4YjBceDQ1XHg1YVx4ODVceDIwXHhiY1x4NGVceDZmIgorCQkJICAiXHg1Zlx4ZTlceDViXHgxZlx4ZTNceGM4XHg0NVx4MmIiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkZWZnaGJjZGVmZ2hpY2RlZmdoaWpkZWZnaGlqa2VmZ2hpamtsZmdoaWprbG1naGlqa2xtbiIKLQkJCSAgICAgImhpamtsbW5vaWprbG1ub3Bqa2xtbm9wcWtsbW5vcHFybG1ub3BxcnNtbm9wcXJzdG5vcHFyc3R1IiwKKwkJCSAgICJoaWprbG1ub2lqa2xtbm9wamtsbW5vcHFrbG1ub3Bxcmxtbm9wcXJzbW5vcHFyc3Rub3BxcnN0dSIsCiAJCS5wc2l6ZQk9IDExMiwKLQkJLmRpZ2VzdAk9IHsgMHgwOSwgMHgzMywgMHgwYywgMHgzMywgMHhmNywgMHgxMSwgMHg0NywgMHhlOCwKLQkJCSAgICAweDNkLCAweDE5LCAweDJmLCAweGM3LCAweDgyLCAweGNkLCAweDFiLCAweDQ3LAotCQkJICAgIDB4NTMsIDB4MTEsIDB4MWIsIDB4MTcsIDB4M2IsIDB4M2IsIDB4MDUsIDB4ZDIsCi0JCQkgICAgMHgyZiwgMHhhMCwgMHg4MCwgMHg4NiwgMHhlMywgMHhiMCwgMHhmNywgMHgxMiwKLQkJCSAgICAweGZjLCAweGM3LCAweGM3LCAweDFhLCAweDU1LCAweDdlLCAweDJkLCAweGI5LAotCQkJICAgIDB4NjYsIDB4YzMsIDB4ZTksIDB4ZmEsIDB4OTEsIDB4NzQsIDB4NjAsIDB4MzkgIH0sCisJCS5kaWdlc3QJPSAiXHgwOVx4MzNceDBjXHgzM1x4ZjdceDExXHg0N1x4ZTgiCisJCQkgICJceDNkXHgxOVx4MmZceGM3XHg4Mlx4Y2RceDFiXHg0NyIKKwkJCSAgIlx4NTNceDExXHgxYlx4MTdceDNiXHgzYlx4MDVceGQyIgorCQkJICAiXHgyZlx4YTBceDgwXHg4Nlx4ZTNceGIwXHhmN1x4MTIiCisJCQkgICJceGZjXHhjN1x4YzdceDFhXHg1NVx4N2VceDJkXHhiOSIKKwkJCSAgIlx4NjZceGMzXHhlOVx4ZmFceDkxXHg3NFx4NjBceDM5IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emFiY2QiCi0JCQkgICAgICJlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAorCQkJICAgImVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCiAJCS5wc2l6ZQk9IDEwNCwKLQkJLmRpZ2VzdAk9IHsgMHgzZCwgMHgyMCwgMHg4OSwgMHg3MywgMHhhYiwgMHgzNSwgMHgwOCwgMHhkYiwKLQkJCSAgICAweGJkLCAweDdlLCAweDJjLCAweDI4LCAweDYyLCAweGJhLCAweDI5LCAweDBhLAotCQkJICAgIDB4ZDMsIDB4MDEsIDB4MGUsIDB4NDksIDB4NzgsIDB4YzEsIDB4OTgsIDB4ZGMsCi0JCQkgICAgMHg0ZCwgMHg4ZiwgMHhkMCwgMHgxNCwgMHhlNSwgMHg4MiwgMHg4MiwgMHgzYSwKLQkJCSAgICAweDg5LCAweGUxLCAweDZmLCAweDliLCAweDJhLCAweDdiLCAweGJjLCAweDFhLAotCQkJICAgIDB4YzksIDB4MzgsIDB4ZTIsIDB4ZDEsIDB4OTksIDB4ZTgsIDB4YmUsIDB4YTQgfSwKKwkJLmRpZ2VzdAk9ICJceDNkXHgyMFx4ODlceDczXHhhYlx4MzVceDA4XHhkYiIKKwkJCSAgIlx4YmRceDdlXHgyY1x4MjhceDYyXHhiYVx4MjlceDBhIgorCQkJICAiXHhkM1x4MDFceDBlXHg0OVx4NzhceGMxXHg5OFx4ZGMiCisJCQkgICJceDRkXHg4Zlx4ZDBceDE0XHhlNVx4ODJceDgyXHgzYSIKKwkJCSAgIlx4ODlceGUxXHg2Zlx4OWJceDJhXHg3Ylx4YmNceDFhIgorCQkJICAiXHhjOVx4MzhceGUyXHhkMVx4OTlceGU4XHhiZVx4YTQiLAogCQkubnAJPSA0LAogCQkudGFwCT0geyAyNiwgMjYsIDI2LCAyNiB9CiAJfSwKQEAgLTMwNCw0OSArMzAxLDQ5IEBACiAJewogCQkucGxhaW50ZXh0ID0gImFiYyIsCiAJCS5wc2l6ZQk9IDMsCi0JCS5kaWdlc3QJPSB7IDB4ZGQsIDB4YWYsIDB4MzUsIDB4YTEsIDB4OTMsIDB4NjEsIDB4N2EsIDB4YmEsCi0JCQkgICAgMHhjYywgMHg0MSwgMHg3MywgMHg0OSwgMHhhZSwgMHgyMCwgMHg0MSwgMHgzMSwKLQkJCSAgICAweDEyLCAweGU2LCAweGZhLCAweDRlLCAweDg5LCAweGE5LCAweDdlLCAweGEyLAotCQkJICAgIDB4MGEsIDB4OWUsIDB4ZWUsIDB4ZTYsIDB4NGIsIDB4NTUsIDB4ZDMsIDB4OWEsCi0JCQkgICAgMHgyMSwgMHg5MiwgMHg5OSwgMHgyYSwgMHgyNywgMHg0ZiwgMHhjMSwgMHhhOCwKLQkJCSAgICAweDM2LCAweGJhLCAweDNjLCAweDIzLCAweGEzLCAweGZlLCAweGViLCAweGJkLAotCQkJICAgIDB4NDUsIDB4NGQsIDB4NDQsIDB4MjMsIDB4NjQsIDB4M2MsIDB4ZTgsIDB4MGUsCi0JCQkgICAgMHgyYSwgMHg5YSwgMHhjOSwgMHg0ZiwgMHhhNSwgMHg0YywgMHhhNCwgMHg5ZiB9LAorCQkuZGlnZXN0CT0gIlx4ZGRceGFmXHgzNVx4YTFceDkzXHg2MVx4N2FceGJhIgorCQkJICAiXHhjY1x4NDFceDczXHg0OVx4YWVceDIwXHg0MVx4MzEiCisJCQkgICJceDEyXHhlNlx4ZmFceDRlXHg4OVx4YTlceDdlXHhhMiIKKwkJCSAgIlx4MGFceDllXHhlZVx4ZTZceDRiXHg1NVx4ZDNceDlhIgorCQkJICAiXHgyMVx4OTJceDk5XHgyYVx4MjdceDRmXHhjMVx4YTgiCisJCQkgICJceDM2XHhiYVx4M2NceDIzXHhhM1x4ZmVceGViXHhiZCIKKwkJCSAgIlx4NDVceDRkXHg0NFx4MjNceDY0XHgzY1x4ZThceDBlIgorCQkJICAiXHgyYVx4OWFceGM5XHg0Zlx4YTVceDRjXHhhNFx4OWYiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCiAJCS5wc2l6ZQk9IDU2LAotCQkuZGlnZXN0CT0geyAweDIwLCAweDRhLCAweDhmLCAweGM2LCAweGRkLCAweGE4LCAweDJmLCAweDBhLAotCQkJICAgIDB4MGMsIDB4ZWQsIDB4N2IsIDB4ZWIsIDB4OGUsIDB4MDgsIDB4YTQsIDB4MTYsCi0JCQkgICAgMHg1NywgMHhjMSwgMHg2ZSwgMHhmNCwgMHg2OCwgMHhiMiwgMHgyOCwgMHhhOCwKLQkJCSAgICAweDI3LCAweDliLCAweGUzLCAweDMxLCAweGE3LCAweDAzLCAweGMzLCAweDM1LAotCQkJICAgIDB4OTYsIDB4ZmQsIDB4MTUsIDB4YzEsIDB4M2IsIDB4MWIsIDB4MDcsIDB4ZjksCi0JCQkgICAgMHhhYSwgMHgxZCwgMHgzYiwgMHhlYSwgMHg1NywgMHg3OCwgMHg5YywgMHhhMCwKLQkJCSAgICAweDMxLCAweGFkLCAweDg1LCAweGM3LCAweGE3LCAweDFkLCAweGQ3LCAweDAzLAotCQkJICAgIDB4NTQsIDB4ZWMsIDB4NjMsIDB4MTIsIDB4MzgsIDB4Y2EsIDB4MzQsIDB4NDUgfSwKKwkJLmRpZ2VzdAk9ICJceDIwXHg0YVx4OGZceGM2XHhkZFx4YThceDJmXHgwYSIKKwkJCSAgIlx4MGNceGVkXHg3Ylx4ZWJceDhlXHgwOFx4YTRceDE2IgorCQkJICAiXHg1N1x4YzFceDZlXHhmNFx4NjhceGIyXHgyOFx4YTgiCisJCQkgICJceDI3XHg5Ylx4ZTNceDMxXHhhN1x4MDNceGMzXHgzNSIKKwkJCSAgIlx4OTZceGZkXHgxNVx4YzFceDNiXHgxYlx4MDdceGY5IgorCQkJICAiXHhhYVx4MWRceDNiXHhlYVx4NTdceDc4XHg5Y1x4YTAiCisJCQkgICJceDMxXHhhZFx4ODVceGM3XHhhN1x4MWRceGQ3XHgwMyIKKwkJCSAgIlx4NTRceGVjXHg2M1x4MTJceDM4XHhjYVx4MzRceDQ1IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjZGVmZ2hiY2RlZmdoaWNkZWZnaGlqZGVmZ2hpamtlZmdoaWprbGZnaGlqa2xtZ2hpamtsbW4iCi0JCQkgICAgICJoaWprbG1ub2lqa2xtbm9wamtsbW5vcHFrbG1ub3Bxcmxtbm9wcXJzbW5vcHFyc3Rub3BxcnN0dSIsCisJCQkgICAiaGlqa2xtbm9pamtsbW5vcGprbG1ub3Bxa2xtbm9wcXJsbW5vcHFyc21ub3BxcnN0bm9wcXJzdHUiLAogCQkucHNpemUJPSAxMTIsCi0JCS5kaWdlc3QJPSB7IDB4OGUsIDB4OTUsIDB4OWIsIDB4NzUsIDB4ZGEsIDB4ZTMsIDB4MTMsIDB4ZGEsCi0JCQkgICAgMHg4YywgMHhmNCwgMHhmNywgMHgyOCwgMHgxNCwgMHhmYywgMHgxNCwgMHgzZiwKLQkJCSAgICAweDhmLCAweDc3LCAweDc5LCAweGM2LCAweGViLCAweDlmLCAweDdmLCAweGExLAotCQkJICAgIDB4NzIsIDB4OTksIDB4YWUsIDB4YWQsIDB4YjYsIDB4ODgsIDB4OTAsIDB4MTgsCi0JCQkgICAgMHg1MCwgMHgxZCwgMHgyOCwgMHg5ZSwgMHg0OSwgMHgwMCwgMHhmNywgMHhlNCwKLQkJCSAgICAweDMzLCAweDFiLCAweDk5LCAweGRlLCAweGM0LCAweGI1LCAweDQzLCAweDNhLAotCQkJICAgIDB4YzcsIDB4ZDMsIDB4MjksIDB4ZWUsIDB4YjYsIDB4ZGQsIDB4MjYsIDB4NTQsCi0JCQkgICAgMHg1ZSwgMHg5NiwgMHhlNSwgMHg1YiwgMHg4NywgMHg0YiwgMHhlOSwgMHgwOSB9LAorCQkuZGlnZXN0CT0gIlx4OGVceDk1XHg5Ylx4NzVceGRhXHhlM1x4MTNceGRhIgorCQkJICAiXHg4Y1x4ZjRceGY3XHgyOFx4MTRceGZjXHgxNFx4M2YiCisJCQkgICJceDhmXHg3N1x4NzlceGM2XHhlYlx4OWZceDdmXHhhMSIKKwkJCSAgIlx4NzJceDk5XHhhZVx4YWRceGI2XHg4OFx4OTBceDE4IgorCQkJICAiXHg1MFx4MWRceDI4XHg5ZVx4NDlceDAwXHhmN1x4ZTQiCisJCQkgICJceDMzXHgxYlx4OTlceGRlXHhjNFx4YjVceDQzXHgzYSIKKwkJCSAgIlx4YzdceGQzXHgyOVx4ZWVceGI2XHhkZFx4MjZceDU0IgorCQkJICAiXHg1ZVx4OTZceGU1XHg1Ylx4ODdceDRiXHhlOVx4MDkiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YWJjZCIKLQkJCSAgICAgImVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCisJCQkgICAiZWZnaGlqa2xtbm9wcXJzdHV2d3h5emFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKIAkJLnBzaXplCT0gMTA0LAotCQkuZGlnZXN0CT0geyAweDkzLCAweDBkLCAweDBjLCAweGVmLCAweGNiLCAweDMwLCAweGZmLCAweDExLAotCQkJICAgIDB4MzMsIDB4YjYsIDB4ODksIDB4ODEsIDB4MjEsIDB4ZjEsIDB4Y2YsIDB4M2QsCi0JCQkgICAgMHgyNywgMHg1NywgMHg4YSwgMHhmYywgMHhhZiwgMHhlOCwgMHg2NywgMHg3YywKLQkJCSAgICAweDUyLCAweDU3LCAweGNmLCAweDA2LCAweDk5LCAweDExLCAweGY3LCAweDVkLAotCQkJICAgIDB4OGYsIDB4NTgsIDB4MzEsIDB4YjUsIDB4NmUsIDB4YmYsIDB4ZGEsIDB4NjcsCi0JCQkgICAgMHhiMiwgMHg3OCwgMHhlNiwgMHg2ZCwgMHhmZiwgMHg4YiwgMHg4NCwgMHhmZSwKLQkJCSAgICAweDJiLCAweDI4LCAweDcwLCAweGY3LCAweDQyLCAweGE1LCAweDgwLCAweGQ4LAotCQkJICAgIDB4ZWQsIDB4YjQsIDB4MTksIDB4ODcsIDB4MjMsIDB4MjgsIDB4NTAsIDB4YzkgfSwKKwkJLmRpZ2VzdAk9ICJceDkzXHgwZFx4MGNceGVmXHhjYlx4MzBceGZmXHgxMSIKKwkJCSAgIlx4MzNceGI2XHg4OVx4ODFceDIxXHhmMVx4Y2ZceDNkIgorCQkJICAiXHgyN1x4NTdceDhhXHhmY1x4YWZceGU4XHg2N1x4N2MiCisJCQkgICJceDUyXHg1N1x4Y2ZceDA2XHg5OVx4MTFceGY3XHg1ZCIKKwkJCSAgIlx4OGZceDU4XHgzMVx4YjVceDZlXHhiZlx4ZGFceDY3IgorCQkJICAiXHhiMlx4NzhceGU2XHg2ZFx4ZmZceDhiXHg4NFx4ZmUiCisJCQkgICJceDJiXHgyOFx4NzBceGY3XHg0Mlx4YTVceDgwXHhkOCIKKwkJCSAgIlx4ZWRceGI0XHgxOVx4ODdceDIzXHgyOFx4NTBceGM5IiwKIAkJLm5wCT0gNCwKIAkJLnRhcAk9IHsgMjYsIDI2LCAyNiwgMjYgfQogCX0sCkBAIC0zNjQsOTUgKzM2MSw5NSBAQAogCXsKIAkJLnBsYWludGV4dCA9ICIiLAogCQkucHNpemUJPSAwLAotCQkuZGlnZXN0CT0geyAweDE5LCAweEZBLCAweDYxLCAweEQ3LCAweDU1LCAweDIyLCAweEE0LCAweDY2LAotCQkJICAgIDB4OUIsIDB4NDQsIDB4RTMsIDB4OUMsIDB4MUQsIDB4MkUsIDB4MTcsIDB4MjYsCi0JCQkgICAgMHhDNSwgMHgzMCwgMHgyMywgMHgyMSwgMHgzMCwgMHhENCwgMHgwNywgMHhGOCwKLQkJCSAgICAweDlBLCAweEZFLCAweEUwLCAweDk2LCAweDQ5LCAweDk3LCAweEY3LCAweEE3LAotCQkJICAgIDB4M0UsIDB4ODMsIDB4QkUsIDB4NjksIDB4OEIsIDB4MjgsIDB4OEYsIDB4RUIsCi0JCQkgICAgMHhDRiwgMHg4OCwgMHhFMywgMHhFMCwgMHgzQywgMHg0RiwgMHgwNywgMHg1NywKLQkJCSAgICAweEVBLCAweDg5LCAweDY0LCAweEU1LCAweDlCLCAweDYzLCAweEQ5LCAweDM3LAotCQkJICAgIDB4MDgsIDB4QjEsIDB4MzgsIDB4Q0MsIDB4NDIsIDB4QTYsIDB4NkUsIDB4QjMgfSwKKwkJLmRpZ2VzdAk9ICJceDE5XHhGQVx4NjFceEQ3XHg1NVx4MjJceEE0XHg2NiIKKwkJCSAgIlx4OUJceDQ0XHhFM1x4OUNceDFEXHgyRVx4MTdceDI2IgorCQkJICAiXHhDNVx4MzBceDIzXHgyMVx4MzBceEQ0XHgwN1x4RjgiCisJCQkgICJceDlBXHhGRVx4RTBceDk2XHg0OVx4OTdceEY3XHhBNyIKKwkJCSAgIlx4M0VceDgzXHhCRVx4NjlceDhCXHgyOFx4OEZceEVCIgorCQkJICAiXHhDRlx4ODhceEUzXHhFMFx4M0NceDRGXHgwN1x4NTciCisJCQkgICJceEVBXHg4OVx4NjRceEU1XHg5Qlx4NjNceEQ5XHgzNyIKKwkJCSAgIlx4MDhceEIxXHgzOFx4Q0NceDQyXHhBNlx4NkVceEIzIiwKIAogCiAJfSwgewogCQkucGxhaW50ZXh0ID0gImEiLAogCQkucHNpemUJPSAxLAotCQkuZGlnZXN0CT0geyAweDhBLCAweENBLCAweDI2LCAweDAyLCAweDc5LCAweDJBLCAweEVDLCAweDZGLAotCQkJICAgIDB4MTEsIDB4QTYsIDB4NzIsIDB4MDYsIDB4NTMsIDB4MUYsIDB4QjcsIDB4RDcsCi0JCQkgICAgMHhGMCwgMHhERiwgMHhGNSwgMHg5NCwgMHgxMywgMHgxNCwgMHg1RSwgMHg2OSwKLQkJCSAgICAweDczLCAweEM0LCAweDUwLCAweDAxLCAweEQwLCAweDA4LCAweDdCLCAweDQyLAotCQkJICAgIDB4RDEsIDB4MUIsIDB4QzYsIDB4NDUsIDB4NDEsIDB4M0EsIDB4RUYsIDB4RjYsCi0JCQkgICAgMHgzQSwgMHg0MiwgMHgzOSwgMHgxQSwgMHgzOSwgMHgxNCwgMHg1QSwgMHg1OSwKLQkJCSAgICAweDFBLCAweDkyLCAweDIwLCAweDBELCAweDU2LCAweDAxLCAweDk1LCAweEU1LAotCQkJICAgIDB4M0IsIDB4NDcsIDB4ODUsIDB4ODQsIDB4RkQsIDB4QUUsIDB4MjMsIDB4MUEgfSwKKwkJLmRpZ2VzdAk9ICJceDhBXHhDQVx4MjZceDAyXHg3OVx4MkFceEVDXHg2RiIKKwkJCSAgIlx4MTFceEE2XHg3Mlx4MDZceDUzXHgxRlx4QjdceEQ3IgorCQkJICAiXHhGMFx4REZceEY1XHg5NFx4MTNceDE0XHg1RVx4NjkiCisJCQkgICJceDczXHhDNFx4NTBceDAxXHhEMFx4MDhceDdCXHg0MiIKKwkJCSAgIlx4RDFceDFCXHhDNlx4NDVceDQxXHgzQVx4RUZceEY2IgorCQkJICAiXHgzQVx4NDJceDM5XHgxQVx4MzlceDE0XHg1QVx4NTkiCisJCQkgICJceDFBXHg5Mlx4MjBceDBEXHg1Nlx4MDFceDk1XHhFNSIKKwkJCSAgIlx4M0JceDQ3XHg4NVx4ODRceEZEXHhBRVx4MjNceDFBIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjIiwKIAkJLnBzaXplCT0gMywKLQkJLmRpZ2VzdAk9IHsgMHg0RSwgMHgyNCwgMHg0OCwgMHhBNCwgMHhDNiwgMHhGNCwgMHg4NiwgMHhCQiwKLQkJCSAgICAweDE2LCAweEI2LCAweDU2LCAweDJDLCAweDczLCAweEI0LCAweDAyLCAweDBCLAotCQkJICAgIDB4RjMsIDB4MDQsIDB4M0UsIDB4M0EsIDB4NzMsIDB4MUIsIDB4Q0UsIDB4NzIsCi0JCQkgICAgMHgxQSwgMHhFMSwgMHhCMywgMHgwMywgMHhEOSwgMHg3RSwgMHg2RCwgMHg0QywKLQkJCSAgICAweDcxLCAweDgxLCAweEVFLCAweEJELCAweEI2LCAweEM1LCAweDdFLCAweDI3LAotCQkJICAgIDB4N0QsIDB4MEUsIDB4MzQsIDB4OTUsIDB4NzEsIDB4MTQsIDB4Q0IsIDB4RDYsCi0JCQkgICAgMHhDNywgMHg5NywgMHhGQywgMHg5RCwgMHg5NSwgMHhEOCwgMHhCNSwgMHg4MiwKLQkJCSAgICAweEQyLCAweDI1LCAweDI5LCAweDIwLCAweDc2LCAweEQ0LCAweEVFLCAweEY1IH0sCisJCS5kaWdlc3QJPSAiXHg0RVx4MjRceDQ4XHhBNFx4QzZceEY0XHg4Nlx4QkIiCisJCQkgICJceDE2XHhCNlx4NTZceDJDXHg3M1x4QjRceDAyXHgwQiIKKwkJCSAgIlx4RjNceDA0XHgzRVx4M0FceDczXHgxQlx4Q0VceDcyIgorCQkJICAiXHgxQVx4RTFceEIzXHgwM1x4RDlceDdFXHg2RFx4NEMiCisJCQkgICJceDcxXHg4MVx4RUVceEJEXHhCNlx4QzVceDdFXHgyNyIKKwkJCSAgIlx4N0RceDBFXHgzNFx4OTVceDcxXHgxNFx4Q0JceEQ2IgorCQkJICAiXHhDN1x4OTdceEZDXHg5RFx4OTVceEQ4XHhCNVx4ODIiCisJCQkgICJceEQyXHgyNVx4MjlceDIwXHg3Nlx4RDRceEVFXHhGNSIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gIm1lc3NhZ2UgZGlnZXN0IiwKIAkJLnBzaXplCT0gMTQsCi0JCS5kaWdlc3QJPSB7IDB4MzcsIDB4OEMsIDB4ODQsIDB4QTQsIDB4MTIsIDB4NkUsIDB4MkQsIDB4QzYsCi0JCQkgICAgMHhFNSwgMHg2RCwgMHhDQywgMHg3NCwgMHg1OCwgMHgzNywgMHg3QSwgMHhBQywKLQkJCSAgICAweDgzLCAweDhELCAweDAwLCAweDAzLCAweDIyLCAweDMwLCAweEY1LCAweDNDLAotCQkJICAgIDB4RTEsIDB4RjUsIDB4NzAsIDB4MEMsIDB4MEYsIDB4RkIsIDB4NEQsIDB4M0IsCi0JCQkgICAgMHg4NCwgMHgyMSwgMHg1NSwgMHg3NiwgMHg1OSwgMHhFRiwgMHg1NSwgMHhDMSwKLQkJCSAgICAweDA2LCAweEI0LCAweEI1LCAweDJBLCAweEM1LCAweEE0LCAweEFBLCAweEE2LAotCQkJICAgIDB4OTIsIDB4RUQsIDB4OTIsIDB4MDAsIDB4NTIsIDB4ODMsIDB4OEYsIDB4MzMsCi0JCQkgICAgMHg2MiwgMHhFOCwgMHg2RCwgMHhCRCwgMHgzNywgMHhBOCwgMHg5MCwgMHgzRSB9LAorCQkuZGlnZXN0CT0gIlx4MzdceDhDXHg4NFx4QTRceDEyXHg2RVx4MkRceEM2IgorCQkJICAiXHhFNVx4NkRceENDXHg3NFx4NThceDM3XHg3QVx4QUMiCisJCQkgICJceDgzXHg4RFx4MDBceDAzXHgyMlx4MzBceEY1XHgzQyIKKwkJCSAgIlx4RTFceEY1XHg3MFx4MENceDBGXHhGQlx4NERceDNCIgorCQkJICAiXHg4NFx4MjFceDU1XHg3Nlx4NTlceEVGXHg1NVx4QzEiCisJCQkgICJceDA2XHhCNFx4QjVceDJBXHhDNVx4QTRceEFBXHhBNiIKKwkJCSAgIlx4OTJceEVEXHg5Mlx4MDBceDUyXHg4M1x4OEZceDMzIgorCQkJICAiXHg2Mlx4RThceDZEXHhCRFx4MzdceEE4XHg5MFx4M0UiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCiAJCS5wc2l6ZQk9IDI2LAotCQkuZGlnZXN0CT0geyAweEYxLCAweEQ3LCAweDU0LCAweDY2LCAweDI2LCAweDM2LCAweEZGLCAweEU5LAotCQkJICAgIDB4MkMsIDB4ODIsIDB4RUIsIDB4QjksIDB4MjEsIDB4MkEsIDB4NDgsIDB4NEEsCi0JCQkgICAgMHg4RCwgMHgzOCwgMHg2MywgMHgxRSwgMHhBRCwgMHg0MiwgMHgzOCwgMHhGNSwKLQkJCSAgICAweDQ0LCAweDJFLCAweEUxLCAweDNCLCAweDgwLCAweDU0LCAweEU0LCAweDFCLAotCQkJICAgIDB4MDgsIDB4QkYsIDB4MkEsIDB4OTIsIDB4NTEsIDB4QzMsIDB4MEIsIDB4NkEsCi0JCQkgICAgMHgwQiwgMHg4QSwgMHhBRSwgMHg4NiwgMHgxNywgMHg3QSwgMHhCNCwgMHhBNiwKLQkJCSAgICAweEY2LCAweDhGLCAweDY3LCAweDNFLCAweDcyLCAweDA3LCAweDg2LCAweDVELAotCQkJICAgIDB4NUQsIDB4OTgsIDB4MTksIDB4QTMsIDB4REIsIDB4QTQsIDB4RUIsIDB4M0IgfSwKKwkJLmRpZ2VzdAk9ICJceEYxXHhEN1x4NTRceDY2XHgyNlx4MzZceEZGXHhFOSIKKwkJCSAgIlx4MkNceDgyXHhFQlx4QjlceDIxXHgyQVx4NDhceDRBIgorCQkJICAiXHg4RFx4MzhceDYzXHgxRVx4QURceDQyXHgzOFx4RjUiCisJCQkgICJceDQ0XHgyRVx4RTFceDNCXHg4MFx4NTRceEU0XHgxQiIKKwkJCSAgIlx4MDhceEJGXHgyQVx4OTJceDUxXHhDM1x4MEJceDZBIgorCQkJICAiXHgwQlx4OEFceEFFXHg4Nlx4MTdceDdBXHhCNFx4QTYiCisJCQkgICJceEY2XHg4Rlx4NjdceDNFXHg3Mlx4MDdceDg2XHg1RCIKKwkJCSAgIlx4NURceDk4XHgxOVx4QTNceERCXHhBNFx4RUJceDNCIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCi0JCQkgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLAorCQkJICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsCiAJCS5wc2l6ZQk9IDYyLAotCQkuZGlnZXN0CT0geyAweERDLCAweDM3LCAweEUwLCAweDA4LCAweENGLCAweDlFLCAweEU2LCAweDlCLAotCQkJICAgIDB4RjEsIDB4MUYsIDB4MDAsIDB4RUQsIDB4OUEsIDB4QkEsIDB4MjYsIDB4OTAsCi0JCQkgICAgMHgxRCwgMHhENywgMHhDMiwgMHg4QywgMHhERSwgMHhDMCwgMHg2NiwgMHhDQywKLQkJCSAgICAweDZBLCAweEY0LCAweDJFLCAweDQwLCAweEY4LCAweDJGLCAweDNBLCAweDFFLAotCQkJICAgIDB4MDgsIDB4RUIsIDB4QTIsIDB4NjYsIDB4MjksIDB4MTIsIDB4OUQsIDB4OEYsCi0JCQkgICAgMHhCNywgMHhDQiwgMHg1NywgMHgyMSwgMHgxQiwgMHg5MiwgMHg4MSwgMHhBNiwKLQkJCSAgICAweDU1LCAweDE3LCAweENDLCAweDg3LCAweDlELCAweDdCLCAweDk2LCAweDIxLAotCQkJICAgIDB4NDIsIDB4QzYsIDB4NUYsIDB4NUEsIDB4N0EsIDB4RjAsIDB4MTQsIDB4NjcgfSwKKwkJLmRpZ2VzdAk9ICJceERDXHgzN1x4RTBceDA4XHhDRlx4OUVceEU2XHg5QiIKKwkJCSAgIlx4RjFceDFGXHgwMFx4RURceDlBXHhCQVx4MjZceDkwIgorCQkJICAiXHgxRFx4RDdceEMyXHg4Q1x4REVceEMwXHg2Nlx4Q0MiCisJCQkgICJceDZBXHhGNFx4MkVceDQwXHhGOFx4MkZceDNBXHgxRSIKKwkJCSAgIlx4MDhceEVCXHhBMlx4NjZceDI5XHgxMlx4OURceDhGIgorCQkJICAiXHhCN1x4Q0JceDU3XHgyMVx4MUJceDkyXHg4MVx4QTYiCisJCQkgICJceDU1XHgxN1x4Q0NceDg3XHg5RFx4N0JceDk2XHgyMSIKKwkJCSAgIlx4NDJceEM2XHg1Rlx4NUFceDdBXHhGMFx4MTRceDY3IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIKLQkJCSAgICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAorCQkJICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAogCQkucHNpemUJPSA4MCwKLQkJLmRpZ2VzdAk9IHsgMHg0NiwgMHg2RSwgMHhGMSwgMHg4QiwgMHhBQiwgMHhCMCwgMHgxNSwgMHg0RCwKLQkJCSAgICAweDI1LCAweEI5LCAweEQzLCAweDhBLCAweDY0LCAweDE0LCAweEY1LCAweEMwLAotCQkJICAgIDB4ODcsIDB4ODQsIDB4MzcsIDB4MkIsIDB4Q0MsIDB4QjIsIDB4MDQsIDB4RDYsCi0JCQkgICAgMHg1NCwgMHg5QywgMHg0QSwgMHhGQSwgMHhEQiwgMHg2MCwgMHgxNCwgMHgyOSwKLQkJCSAgICAweDRELCAweDVCLCAweEQ4LCAweERGLCAweDJBLCAweDZDLCAweDQ0LCAweEU1LAotCQkJICAgIDB4MzgsIDB4Q0QsIDB4MDQsIDB4N0IsIDB4MjYsIDB4ODEsIDB4QTUsIDB4MUEsCi0JCQkgICAgMHgyQywgMHg2MCwgMHg0OCwgMHgxRSwgMHg4OCwgMHhDNSwgMHhBMiwgMHgwQiwKLQkJCSAgICAweDJDLCAweDJBLCAweDgwLCAweENGLCAweDNBLCAweDlBLCAweDA4LCAweDNCIH0sCisJCS5kaWdlc3QJPSAiXHg0Nlx4NkVceEYxXHg4Qlx4QUJceEIwXHgxNVx4NEQiCisJCQkgICJceDI1XHhCOVx4RDNceDhBXHg2NFx4MTRceEY1XHhDMCIKKwkJCSAgIlx4ODdceDg0XHgzN1x4MkJceENDXHhCMlx4MDRceEQ2IgorCQkJICAiXHg1NFx4OUNceDRBXHhGQVx4REJceDYwXHgxNFx4MjkiCisJCQkgICJceDREXHg1Qlx4RDhceERGXHgyQVx4NkNceDQ0XHhFNSIKKwkJCSAgIlx4MzhceENEXHgwNFx4N0JceDI2XHg4MVx4QTVceDFBIgorCQkJICAiXHgyQ1x4NjBceDQ4XHgxRVx4ODhceEM1XHhBMlx4MEIiCisJCQkgICJceDJDXHgyQVx4ODBceENGXHgzQVx4OUFceDA4XHgzQiIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWprIiwKIAkJLnBzaXplCT0gMzIsCi0JCS5kaWdlc3QJPSB7IDB4MkEsIDB4OTgsIDB4N0UsIDB4QTQsIDB4MEYsIDB4OTEsIDB4NzAsIDB4NjEsCi0JCQkgICAgMHhGNSwgMHhENiwgMHhGMCwgMHhBMCwgMHhFNCwgMHg2NCwgMHg0RiwgMHg0OCwKLQkJCSAgICAweDhBLCAweDdBLCAweDVBLCAweDUyLCAweERFLCAweEVFLCAweDY1LCAweDYyLAotCQkJICAgIDB4MDcsIDB4QzUsIDB4NjIsIDB4RjksIDB4ODgsIDB4RTksIDB4NUMsIDB4NjksCi0JCQkgICAgMHgxNiwgMHhCRCwgMHhDOCwgMHgwMywgMHgxQiwgMHhDNSwgMHhCRSwgMHgxQiwKLQkJCSAgICAweDdCLCAweDk0LCAweDc2LCAweDM5LCAweEZFLCAweDA1LCAweDBCLCAweDU2LAotCQkJICAgIDB4OTMsIDB4OUIsIDB4QUEsIDB4QTAsIDB4QUQsIDB4RkYsIDB4OUEsIDB4RTYsCi0JCQkgICAgMHg3NCwgMHg1QiwgMHg3QiwgMHgxOCwgMHgxQywgMHgzQiwgMHhFMywgMHhGRCB9LAorCQkuZGlnZXN0CT0gIlx4MkFceDk4XHg3RVx4QTRceDBGXHg5MVx4NzBceDYxIgorCQkJICAiXHhGNVx4RDZceEYwXHhBMFx4RTRceDY0XHg0Rlx4NDgiCisJCQkgICJceDhBXHg3QVx4NUFceDUyXHhERVx4RUVceDY1XHg2MiIKKwkJCSAgIlx4MDdceEM1XHg2Mlx4RjlceDg4XHhFOVx4NUNceDY5IgorCQkJICAiXHgxNlx4QkRceEM4XHgwM1x4MUJceEM1XHhCRVx4MUIiCisJCQkgICJceDdCXHg5NFx4NzZceDM5XHhGRVx4MDVceDBCXHg1NiIKKwkJCSAgIlx4OTNceDlCXHhBQVx4QTBceEFEXHhGRlx4OUFceEU2IgorCQkJICAiXHg3NFx4NUJceDdCXHgxOFx4MUNceDNCXHhFM1x4RkQiLAogCX0sCiB9OwogCkBAIC00NjIsNzkgKzQ1OSw3OSBAQAogCXsKIAkJLnBsYWludGV4dCA9ICIiLAogCQkucHNpemUJPSAwLAotCQkuZGlnZXN0CT0geyAweDE5LCAweEZBLCAweDYxLCAweEQ3LCAweDU1LCAweDIyLCAweEE0LCAweDY2LAotCQkJICAgIDB4OUIsIDB4NDQsIDB4RTMsIDB4OUMsIDB4MUQsIDB4MkUsIDB4MTcsIDB4MjYsCi0JCQkgICAgMHhDNSwgMHgzMCwgMHgyMywgMHgyMSwgMHgzMCwgMHhENCwgMHgwNywgMHhGOCwKLQkJCSAgICAweDlBLCAweEZFLCAweEUwLCAweDk2LCAweDQ5LCAweDk3LCAweEY3LCAweEE3LAotCQkJICAgIDB4M0UsIDB4ODMsIDB4QkUsIDB4NjksIDB4OEIsIDB4MjgsIDB4OEYsIDB4RUIsCi0JCQkgICAgMHhDRiwgMHg4OCwgMHhFMywgMHhFMCwgMHgzQywgMHg0RiwgMHgwNywgMHg1NyB9LAorCQkuZGlnZXN0CT0gIlx4MTlceEZBXHg2MVx4RDdceDU1XHgyMlx4QTRceDY2IgorCQkJICAiXHg5Qlx4NDRceEUzXHg5Q1x4MURceDJFXHgxN1x4MjYiCisJCQkgICJceEM1XHgzMFx4MjNceDIxXHgzMFx4RDRceDA3XHhGOCIKKwkJCSAgIlx4OUFceEZFXHhFMFx4OTZceDQ5XHg5N1x4RjdceEE3IgorCQkJICAiXHgzRVx4ODNceEJFXHg2OVx4OEJceDI4XHg4Rlx4RUIiCisJCQkgICJceENGXHg4OFx4RTNceEUwXHgzQ1x4NEZceDA3XHg1NyIsCiAKIAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhIiwKIAkJLnBzaXplCT0gMSwKLQkJLmRpZ2VzdAk9IHsgMHg4QSwgMHhDQSwgMHgyNiwgMHgwMiwgMHg3OSwgMHgyQSwgMHhFQywgMHg2RiwKLQkJCSAgICAweDExLCAweEE2LCAweDcyLCAweDA2LCAweDUzLCAweDFGLCAweEI3LCAweEQ3LAotCQkJICAgIDB4RjAsIDB4REYsIDB4RjUsIDB4OTQsIDB4MTMsIDB4MTQsIDB4NUUsIDB4NjksCi0JCQkgICAgMHg3MywgMHhDNCwgMHg1MCwgMHgwMSwgMHhEMCwgMHgwOCwgMHg3QiwgMHg0MiwKLQkJCSAgICAweEQxLCAweDFCLCAweEM2LCAweDQ1LCAweDQxLCAweDNBLCAweEVGLCAweEY2LAotCQkJICAgIDB4M0EsIDB4NDIsIDB4MzksIDB4MUEsIDB4MzksIDB4MTQsIDB4NUEsIDB4NTkgfSwKKwkJLmRpZ2VzdAk9ICJceDhBXHhDQVx4MjZceDAyXHg3OVx4MkFceEVDXHg2RiIKKwkJCSAgIlx4MTFceEE2XHg3Mlx4MDZceDUzXHgxRlx4QjdceEQ3IgorCQkJICAiXHhGMFx4REZceEY1XHg5NFx4MTNceDE0XHg1RVx4NjkiCisJCQkgICJceDczXHhDNFx4NTBceDAxXHhEMFx4MDhceDdCXHg0MiIKKwkJCSAgIlx4RDFceDFCXHhDNlx4NDVceDQxXHgzQVx4RUZceEY2IgorCQkJICAiXHgzQVx4NDJceDM5XHgxQVx4MzlceDE0XHg1QVx4NTkiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmMiLAogCQkucHNpemUJPSAzLAotCQkuZGlnZXN0CT0geyAweDRFLCAweDI0LCAweDQ4LCAweEE0LCAweEM2LCAweEY0LCAweDg2LCAweEJCLAotCQkJICAgIDB4MTYsIDB4QjYsIDB4NTYsIDB4MkMsIDB4NzMsIDB4QjQsIDB4MDIsIDB4MEIsCi0JCQkgICAgMHhGMywgMHgwNCwgMHgzRSwgMHgzQSwgMHg3MywgMHgxQiwgMHhDRSwgMHg3MiwKLQkJCSAgICAweDFBLCAweEUxLCAweEIzLCAweDAzLCAweEQ5LCAweDdFLCAweDZELCAweDRDLAotCQkJICAgIDB4NzEsIDB4ODEsIDB4RUUsIDB4QkQsIDB4QjYsIDB4QzUsIDB4N0UsIDB4MjcsCi0JCQkgICAgMHg3RCwgMHgwRSwgMHgzNCwgMHg5NSwgMHg3MSwgMHgxNCwgMHhDQiwgMHhENiB9LAorCQkuZGlnZXN0CT0gIlx4NEVceDI0XHg0OFx4QTRceEM2XHhGNFx4ODZceEJCIgorCQkJICAiXHgxNlx4QjZceDU2XHgyQ1x4NzNceEI0XHgwMlx4MEIiCisJCQkgICJceEYzXHgwNFx4M0VceDNBXHg3M1x4MUJceENFXHg3MiIKKwkJCSAgIlx4MUFceEUxXHhCM1x4MDNceEQ5XHg3RVx4NkRceDRDIgorCQkJICAiXHg3MVx4ODFceEVFXHhCRFx4QjZceEM1XHg3RVx4MjciCisJCQkgICJceDdEXHgwRVx4MzRceDk1XHg3MVx4MTRceENCXHhENiIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gIm1lc3NhZ2UgZGlnZXN0IiwKIAkJLnBzaXplCT0gMTQsCi0JCS5kaWdlc3QJPSB7IDB4MzcsIDB4OEMsIDB4ODQsIDB4QTQsIDB4MTIsIDB4NkUsIDB4MkQsIDB4QzYsCi0JCQkgICAgMHhFNSwgMHg2RCwgMHhDQywgMHg3NCwgMHg1OCwgMHgzNywgMHg3QSwgMHhBQywKLQkJCSAgICAweDgzLCAweDhELCAweDAwLCAweDAzLCAweDIyLCAweDMwLCAweEY1LCAweDNDLAotCQkJICAgIDB4RTEsIDB4RjUsIDB4NzAsIDB4MEMsIDB4MEYsIDB4RkIsIDB4NEQsIDB4M0IsCi0JCQkgICAgMHg4NCwgMHgyMSwgMHg1NSwgMHg3NiwgMHg1OSwgMHhFRiwgMHg1NSwgMHhDMSwKLQkJCSAgICAweDA2LCAweEI0LCAweEI1LCAweDJBLCAweEM1LCAweEE0LCAweEFBLCAweEE2IH0sCisJCS5kaWdlc3QJPSAiXHgzN1x4OENceDg0XHhBNFx4MTJceDZFXHgyRFx4QzYiCisJCQkgICJceEU1XHg2RFx4Q0NceDc0XHg1OFx4MzdceDdBXHhBQyIKKwkJCSAgIlx4ODNceDhEXHgwMFx4MDNceDIyXHgzMFx4RjVceDNDIgorCQkJICAiXHhFMVx4RjVceDcwXHgwQ1x4MEZceEZCXHg0RFx4M0IiCisJCQkgICJceDg0XHgyMVx4NTVceDc2XHg1OVx4RUZceDU1XHhDMSIKKwkJCSAgIlx4MDZceEI0XHhCNVx4MkFceEM1XHhBNFx4QUFceEE2IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAogCQkucHNpemUJPSAyNiwKLQkJLmRpZ2VzdAk9IHsgMHhGMSwgMHhENywgMHg1NCwgMHg2NiwgMHgyNiwgMHgzNiwgMHhGRiwgMHhFOSwKLQkJCSAgICAweDJDLCAweDgyLCAweEVCLCAweEI5LCAweDIxLCAweDJBLCAweDQ4LCAweDRBLAotCQkJICAgIDB4OEQsIDB4MzgsIDB4NjMsIDB4MUUsIDB4QUQsIDB4NDIsIDB4MzgsIDB4RjUsCi0JCQkgICAgMHg0NCwgMHgyRSwgMHhFMSwgMHgzQiwgMHg4MCwgMHg1NCwgMHhFNCwgMHgxQiwKLQkJCSAgICAweDA4LCAweEJGLCAweDJBLCAweDkyLCAweDUxLCAweEMzLCAweDBCLCAweDZBLAotCQkJICAgIDB4MEIsIDB4OEEsIDB4QUUsIDB4ODYsIDB4MTcsIDB4N0EsIDB4QjQsIDB4QTYgfSwKKwkJLmRpZ2VzdAk9ICJceEYxXHhEN1x4NTRceDY2XHgyNlx4MzZceEZGXHhFOSIKKwkJCSAgIlx4MkNceDgyXHhFQlx4QjlceDIxXHgyQVx4NDhceDRBIgorCQkJICAiXHg4RFx4MzhceDYzXHgxRVx4QURceDQyXHgzOFx4RjUiCisJCQkgICJceDQ0XHgyRVx4RTFceDNCXHg4MFx4NTRceEU0XHgxQiIKKwkJCSAgIlx4MDhceEJGXHgyQVx4OTJceDUxXHhDM1x4MEJceDZBIgorCQkJICAiXHgwQlx4OEFceEFFXHg4Nlx4MTdceDdBXHhCNFx4QTYiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKLQkJCSAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsCisJCQkgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiwKIAkJLnBzaXplCT0gNjIsCi0JCS5kaWdlc3QJPSB7IDB4REMsIDB4MzcsIDB4RTAsIDB4MDgsIDB4Q0YsIDB4OUUsIDB4RTYsIDB4OUIsCi0JCQkgICAgMHhGMSwgMHgxRiwgMHgwMCwgMHhFRCwgMHg5QSwgMHhCQSwgMHgyNiwgMHg5MCwKLQkJCSAgICAweDFELCAweEQ3LCAweEMyLCAweDhDLCAweERFLCAweEMwLCAweDY2LCAweENDLAotCQkJICAgIDB4NkEsIDB4RjQsIDB4MkUsIDB4NDAsIDB4RjgsIDB4MkYsIDB4M0EsIDB4MUUsCi0JCQkgICAgMHgwOCwgMHhFQiwgMHhBMiwgMHg2NiwgMHgyOSwgMHgxMiwgMHg5RCwgMHg4RiwKLQkJCSAgICAweEI3LCAweENCLCAweDU3LCAweDIxLCAweDFCLCAweDkyLCAweDgxLCAweEE2IH0sCisJCS5kaWdlc3QJPSAiXHhEQ1x4MzdceEUwXHgwOFx4Q0ZceDlFXHhFNlx4OUIiCisJCQkgICJceEYxXHgxRlx4MDBceEVEXHg5QVx4QkFceDI2XHg5MCIKKwkJCSAgIlx4MURceEQ3XHhDMlx4OENceERFXHhDMFx4NjZceENDIgorCQkJICAiXHg2QVx4RjRceDJFXHg0MFx4RjhceDJGXHgzQVx4MUUiCisJCQkgICJceDA4XHhFQlx4QTJceDY2XHgyOVx4MTJceDlEXHg4RiIKKwkJCSAgIlx4QjdceENCXHg1N1x4MjFceDFCXHg5Mlx4ODFceEE2IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIKLQkJCSAgICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAorCQkJICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAogCQkucHNpemUJPSA4MCwKLQkJLmRpZ2VzdAk9IHsgMHg0NiwgMHg2RSwgMHhGMSwgMHg4QiwgMHhBQiwgMHhCMCwgMHgxNSwgMHg0RCwKLQkJCSAgICAweDI1LCAweEI5LCAweEQzLCAweDhBLCAweDY0LCAweDE0LCAweEY1LCAweEMwLAotCQkJICAgIDB4ODcsIDB4ODQsIDB4MzcsIDB4MkIsIDB4Q0MsIDB4QjIsIDB4MDQsIDB4RDYsCi0JCQkgICAgMHg1NCwgMHg5QywgMHg0QSwgMHhGQSwgMHhEQiwgMHg2MCwgMHgxNCwgMHgyOSwKLQkJCSAgICAweDRELCAweDVCLCAweEQ4LCAweERGLCAweDJBLCAweDZDLCAweDQ0LCAweEU1LAotCQkJICAgIDB4MzgsIDB4Q0QsIDB4MDQsIDB4N0IsIDB4MjYsIDB4ODEsIDB4QTUsIDB4MUEgfSwKKwkJLmRpZ2VzdAk9ICJceDQ2XHg2RVx4RjFceDhCXHhBQlx4QjBceDE1XHg0RCIKKwkJCSAgIlx4MjVceEI5XHhEM1x4OEFceDY0XHgxNFx4RjVceEMwIgorCQkJICAiXHg4N1x4ODRceDM3XHgyQlx4Q0NceEIyXHgwNFx4RDYiCisJCQkgICJceDU0XHg5Q1x4NEFceEZBXHhEQlx4NjBceDE0XHgyOSIKKwkJCSAgIlx4NERceDVCXHhEOFx4REZceDJBXHg2Q1x4NDRceEU1IgorCQkJICAiXHgzOFx4Q0RceDA0XHg3Qlx4MjZceDgxXHhBNVx4MUEiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqayIsCiAJCS5wc2l6ZQk9IDMyLAotCQkuZGlnZXN0CT0geyAweDJBLCAweDk4LCAweDdFLCAweEE0LCAweDBGLCAweDkxLCAweDcwLCAweDYxLAotCQkJICAgIDB4RjUsIDB4RDYsIDB4RjAsIDB4QTAsIDB4RTQsIDB4NjQsIDB4NEYsIDB4NDgsCi0JCQkgICAgMHg4QSwgMHg3QSwgMHg1QSwgMHg1MiwgMHhERSwgMHhFRSwgMHg2NSwgMHg2MiwKLQkJCSAgICAweDA3LCAweEM1LCAweDYyLCAweEY5LCAweDg4LCAweEU5LCAweDVDLCAweDY5LAotCQkJICAgIDB4MTYsIDB4QkQsIDB4QzgsIDB4MDMsIDB4MUIsIDB4QzUsIDB4QkUsIDB4MUIsCi0JCQkgICAgMHg3QiwgMHg5NCwgMHg3NiwgMHgzOSwgMHhGRSwgMHgwNSwgMHgwQiwgMHg1NiB9LAorCQkuZGlnZXN0CT0gIlx4MkFceDk4XHg3RVx4QTRceDBGXHg5MVx4NzBceDYxIgorCQkJICAiXHhGNVx4RDZceEYwXHhBMFx4RTRceDY0XHg0Rlx4NDgiCisJCQkgICJceDhBXHg3QVx4NUFceDUyXHhERVx4RUVceDY1XHg2MiIKKwkJCSAgIlx4MDdceEM1XHg2Mlx4RjlceDg4XHhFOVx4NUNceDY5IgorCQkJICAiXHgxNlx4QkRceEM4XHgwM1x4MUJceEM1XHhCRVx4MUIiCisJCQkgICJceDdCXHg5NFx4NzZceDM5XHhGRVx4MDVceDBCXHg1NiIsCiAJfSwKIH07CiAKQEAgLTU0NCw2MyArNTQxLDYzIEBACiAJewogCQkucGxhaW50ZXh0ID0gIiIsCiAJCS5wc2l6ZQk9IDAsCi0JCS5kaWdlc3QJPSB7IDB4MTksIDB4RkEsIDB4NjEsIDB4RDcsIDB4NTUsIDB4MjIsIDB4QTQsIDB4NjYsCi0JCQkgICAgMHg5QiwgMHg0NCwgMHhFMywgMHg5QywgMHgxRCwgMHgyRSwgMHgxNywgMHgyNiwKLQkJCSAgICAweEM1LCAweDMwLCAweDIzLCAweDIxLCAweDMwLCAweEQ0LCAweDA3LCAweEY4LAotCQkJICAgIDB4OUEsIDB4RkUsIDB4RTAsIDB4OTYsIDB4NDksIDB4OTcsIDB4RjcsIDB4QTcgfSwKKwkJLmRpZ2VzdAk9ICJceDE5XHhGQVx4NjFceEQ3XHg1NVx4MjJceEE0XHg2NiIKKwkJCSAgIlx4OUJceDQ0XHhFM1x4OUNceDFEXHgyRVx4MTdceDI2IgorCQkJICAiXHhDNVx4MzBceDIzXHgyMVx4MzBceEQ0XHgwN1x4RjgiCisJCQkgICJceDlBXHhGRVx4RTBceDk2XHg0OVx4OTdceEY3XHhBNyIsCiAKIAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhIiwKIAkJLnBzaXplCT0gMSwKLQkJLmRpZ2VzdAk9IHsgMHg4QSwgMHhDQSwgMHgyNiwgMHgwMiwgMHg3OSwgMHgyQSwgMHhFQywgMHg2RiwKLQkJCSAgICAweDExLCAweEE2LCAweDcyLCAweDA2LCAweDUzLCAweDFGLCAweEI3LCAweEQ3LAotCQkJICAgIDB4RjAsIDB4REYsIDB4RjUsIDB4OTQsIDB4MTMsIDB4MTQsIDB4NUUsIDB4NjksCi0JCQkgICAgMHg3MywgMHhDNCwgMHg1MCwgMHgwMSwgMHhEMCwgMHgwOCwgMHg3QiwgMHg0MiB9LAorCQkuZGlnZXN0CT0gIlx4OEFceENBXHgyNlx4MDJceDc5XHgyQVx4RUNceDZGIgorCQkJICAiXHgxMVx4QTZceDcyXHgwNlx4NTNceDFGXHhCN1x4RDciCisJCQkgICJceEYwXHhERlx4RjVceDk0XHgxM1x4MTRceDVFXHg2OSIKKwkJCSAgIlx4NzNceEM0XHg1MFx4MDFceEQwXHgwOFx4N0JceDQyIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjIiwKIAkJLnBzaXplCT0gMywKLQkJLmRpZ2VzdAk9IHsgMHg0RSwgMHgyNCwgMHg0OCwgMHhBNCwgMHhDNiwgMHhGNCwgMHg4NiwgMHhCQiwKLQkJCSAgICAweDE2LCAweEI2LCAweDU2LCAweDJDLCAweDczLCAweEI0LCAweDAyLCAweDBCLAotCQkJICAgIDB4RjMsIDB4MDQsIDB4M0UsIDB4M0EsIDB4NzMsIDB4MUIsIDB4Q0UsIDB4NzIsCi0JCQkgICAgMHgxQSwgMHhFMSwgMHhCMywgMHgwMywgMHhEOSwgMHg3RSwgMHg2RCwgMHg0QyB9LAorCQkuZGlnZXN0CT0gIlx4NEVceDI0XHg0OFx4QTRceEM2XHhGNFx4ODZceEJCIgorCQkJICAiXHgxNlx4QjZceDU2XHgyQ1x4NzNceEI0XHgwMlx4MEIiCisJCQkgICJceEYzXHgwNFx4M0VceDNBXHg3M1x4MUJceENFXHg3MiIKKwkJCSAgIlx4MUFceEUxXHhCM1x4MDNceEQ5XHg3RVx4NkRceDRDIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAibWVzc2FnZSBkaWdlc3QiLAogCQkucHNpemUJPSAxNCwKLQkJLmRpZ2VzdAk9IHsgMHgzNywgMHg4QywgMHg4NCwgMHhBNCwgMHgxMiwgMHg2RSwgMHgyRCwgMHhDNiwKLQkJCSAgICAweEU1LCAweDZELCAweENDLCAweDc0LCAweDU4LCAweDM3LCAweDdBLCAweEFDLAotCQkJICAgIDB4ODMsIDB4OEQsIDB4MDAsIDB4MDMsIDB4MjIsIDB4MzAsIDB4RjUsIDB4M0MsCi0JCQkgICAgMHhFMSwgMHhGNSwgMHg3MCwgMHgwQywgMHgwRiwgMHhGQiwgMHg0RCwgMHgzQiB9LAorCQkuZGlnZXN0CT0gIlx4MzdceDhDXHg4NFx4QTRceDEyXHg2RVx4MkRceEM2IgorCQkJICAiXHhFNVx4NkRceENDXHg3NFx4NThceDM3XHg3QVx4QUMiCisJCQkgICJceDgzXHg4RFx4MDBceDAzXHgyMlx4MzBceEY1XHgzQyIKKwkJCSAgIlx4RTFceEY1XHg3MFx4MENceDBGXHhGQlx4NERceDNCIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAogCQkucHNpemUJPSAyNiwKLQkJLmRpZ2VzdAk9IHsgMHhGMSwgMHhENywgMHg1NCwgMHg2NiwgMHgyNiwgMHgzNiwgMHhGRiwgMHhFOSwKLQkJCSAgICAweDJDLCAweDgyLCAweEVCLCAweEI5LCAweDIxLCAweDJBLCAweDQ4LCAweDRBLAotCQkJICAgIDB4OEQsIDB4MzgsIDB4NjMsIDB4MUUsIDB4QUQsIDB4NDIsIDB4MzgsIDB4RjUsCi0JCQkgICAgMHg0NCwgMHgyRSwgMHhFMSwgMHgzQiwgMHg4MCwgMHg1NCwgMHhFNCwgMHgxQiB9LAorCQkuZGlnZXN0CT0gIlx4RjFceEQ3XHg1NFx4NjZceDI2XHgzNlx4RkZceEU5IgorCQkJICAiXHgyQ1x4ODJceEVCXHhCOVx4MjFceDJBXHg0OFx4NEEiCisJCQkgICJceDhEXHgzOFx4NjNceDFFXHhBRFx4NDJceDM4XHhGNSIKKwkJCSAgIlx4NDRceDJFXHhFMVx4M0JceDgwXHg1NFx4RTRceDFCIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCi0JCQkgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLAorCQkJICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsCiAJCS5wc2l6ZQk9IDYyLAotCQkuZGlnZXN0CT0geyAweERDLCAweDM3LCAweEUwLCAweDA4LCAweENGLCAweDlFLCAweEU2LCAweDlCLAotCQkJICAgIDB4RjEsIDB4MUYsIDB4MDAsIDB4RUQsIDB4OUEsIDB4QkEsIDB4MjYsIDB4OTAsCi0JCQkgICAgMHgxRCwgMHhENywgMHhDMiwgMHg4QywgMHhERSwgMHhDMCwgMHg2NiwgMHhDQywKLQkJCSAgICAweDZBLCAweEY0LCAweDJFLCAweDQwLCAweEY4LCAweDJGLCAweDNBLCAweDFFIH0sCisJCS5kaWdlc3QJPSAiXHhEQ1x4MzdceEUwXHgwOFx4Q0ZceDlFXHhFNlx4OUIiCisJCQkgICJceEYxXHgxRlx4MDBceEVEXHg5QVx4QkFceDI2XHg5MCIKKwkJCSAgIlx4MURceEQ3XHhDMlx4OENceERFXHhDMFx4NjZceENDIgorCQkJICAiXHg2QVx4RjRceDJFXHg0MFx4RjhceDJGXHgzQVx4MUUiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIgotCQkJICAgICAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsCisJCQkgICAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsCiAJCS5wc2l6ZQk9IDgwLAotCQkuZGlnZXN0CT0geyAweDQ2LCAweDZFLCAweEYxLCAweDhCLCAweEFCLCAweEIwLCAweDE1LCAweDRELAotCQkJICAgIDB4MjUsIDB4QjksIDB4RDMsIDB4OEEsIDB4NjQsIDB4MTQsIDB4RjUsIDB4QzAsCi0JCQkgICAgMHg4NywgMHg4NCwgMHgzNywgMHgyQiwgMHhDQywgMHhCMiwgMHgwNCwgMHhENiwKLQkJCSAgICAweDU0LCAweDlDLCAweDRBLCAweEZBLCAweERCLCAweDYwLCAweDE0LCAweDI5IH0sCisJCS5kaWdlc3QJPSAiXHg0Nlx4NkVceEYxXHg4Qlx4QUJceEIwXHgxNVx4NEQiCisJCQkgICJceDI1XHhCOVx4RDNceDhBXHg2NFx4MTRceEY1XHhDMCIKKwkJCSAgIlx4ODdceDg0XHgzN1x4MkJceENDXHhCMlx4MDRceEQ2IgorCQkJICAiXHg1NFx4OUNceDRBXHhGQVx4REJceDYwXHgxNFx4MjkiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqayIsCiAJCS5wc2l6ZQk9IDMyLAotCQkuZGlnZXN0CT0geyAweDJBLCAweDk4LCAweDdFLCAweEE0LCAweDBGLCAweDkxLCAweDcwLCAweDYxLAotCQkJICAgIDB4RjUsIDB4RDYsIDB4RjAsIDB4QTAsIDB4RTQsIDB4NjQsIDB4NEYsIDB4NDgsCi0JCQkgICAgMHg4QSwgMHg3QSwgMHg1QSwgMHg1MiwgMHhERSwgMHhFRSwgMHg2NSwgMHg2MiwKLQkJCSAgICAweDA3LCAweEM1LCAweDYyLCAweEY5LCAweDg4LCAweEU5LCAweDVDLCAweDY5IH0sCisJCS5kaWdlc3QJPSAiXHgyQVx4OThceDdFXHhBNFx4MEZceDkxXHg3MFx4NjEiCisJCQkgICJceEY1XHhENlx4RjBceEEwXHhFNFx4NjRceDRGXHg0OCIKKwkJCSAgIlx4OEFceDdBXHg1QVx4NTJceERFXHhFRVx4NjVceDYyIgorCQkJICAiXHgwN1x4QzVceDYyXHhGOVx4ODhceEU5XHg1Q1x4NjkiLAogCX0sCiB9OwogCkBAIC02MTMsNDIgKzYxMCw0MiBAQAogCXsKIAkJLnBsYWludGV4dCA9ICIiLAogCQkucHNpemUJPSAwLAotCQkuZGlnZXN0ID0geyAweDI0LCAweGYwLCAweDEzLCAweDBjLCAweDYzLCAweGFjLCAweDkzLCAweDMyLAotCQkJICAgIDB4MTYsIDB4MTYsIDB4NmUsIDB4NzYsIDB4YjEsIDB4YmIsIDB4OTIsIDB4NWYsCi0JCQkgICAgMHhmMywgMHg3MywgMHhkZSwgMHgyZCwgMHg0OSwgMHg1OCwgMHg0ZSwgMHg3YSB9LAorCQkuZGlnZXN0ID0gIlx4MjRceGYwXHgxM1x4MGNceDYzXHhhY1x4OTNceDMyIgorCQkJICAiXHgxNlx4MTZceDZlXHg3Nlx4YjFceGJiXHg5Mlx4NWYiCisJCQkgICJceGYzXHg3M1x4ZGVceDJkXHg0OVx4NThceDRlXHg3YSIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gImFiYyIsCiAJCS5wc2l6ZQk9IDMsCi0JCS5kaWdlc3QgPSB7IDB4ZjIsIDB4NTgsIDB4YzEsIDB4ZTgsIDB4ODQsIDB4MTQsIDB4YWIsIDB4MmEsCi0JCQkgICAgMHg1MiwgMHg3YSwgMHhiNSwgMHg0MSwgMHhmZiwgMHhjNSwgMHhiOCwgMHhiZiwKLQkJCSAgICAweDkzLCAweDVmLCAweDdiLCAweDk1LCAweDFjLCAweDEzLCAweDI5LCAweDUxIH0sCisJCS5kaWdlc3QgPSAiXHhmMlx4NThceGMxXHhlOFx4ODRceDE0XHhhYlx4MmEiCisJCQkgICJceDUyXHg3YVx4YjVceDQxXHhmZlx4YzVceGI4XHhiZiIKKwkJCSAgIlx4OTNceDVmXHg3Ylx4OTVceDFjXHgxM1x4MjlceDUxIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiVGlnZXIiLAogCQkucHNpemUJPSA1LAotCQkuZGlnZXN0ID0geyAweDlmLCAweDAwLCAweGY1LCAweDk5LCAweDA3LCAweDIzLCAweDAwLCAweGRkLAotCQkJICAgIDB4MjcsIDB4NmEsIDB4YmIsIDB4MzgsIDB4YzgsIDB4ZWIsIDB4NmQsIDB4ZWMsCi0JCQkgICAgMHgzNywgMHg3OSwgMHgwYywgMHgxMSwgMHg2ZiwgMHg5ZCwgMHgyYiwgMHhkZiB9LAorCQkuZGlnZXN0ID0gIlx4OWZceDAwXHhmNVx4OTlceDA3XHgyM1x4MDBceGRkIgorCQkJICAiXHgyN1x4NmFceGJiXHgzOFx4YzhceGViXHg2ZFx4ZWMiCisJCQkgICJceDM3XHg3OVx4MGNceDExXHg2Zlx4OWRceDJiXHhkZiIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky0iLAogCQkucHNpemUJPSA2NCwKLQkJLmRpZ2VzdCA9IHsgMHg4NywgMHhmYiwgMHgyYSwgMHg5MCwgMHg4MywgMHg4NSwgMHgxYywgMHhmNywKLQkJCSAgICAweDQ3LCAweDBkLCAweDJjLCAweGY4LCAweDEwLCAweGU2LCAweGRmLCAweDllLAotCQkJICAgIDB4YjUsIDB4ODYsIDB4NDQsIDB4NTAsIDB4MzQsIDB4YTUsIDB4YTMsIDB4ODYgfSwKKwkJLmRpZ2VzdCA9ICJceDg3XHhmYlx4MmFceDkwXHg4M1x4ODVceDFjXHhmNyIKKwkJCSAgIlx4NDdceDBkXHgyY1x4ZjhceDEwXHhlNlx4ZGZceDllIgorCQkJICAiXHhiNVx4ODZceDQ0XHg1MFx4MzRceGE1XHhhM1x4ODYiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWj1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiswMTIzNDU2Nzg5IiwKIAkJLnBzaXplCT0gNjQsCi0JCS5kaWdlc3QgPSB7IDB4NDYsIDB4N2QsIDB4YjgsIDB4MDgsIDB4NjMsIDB4ZWIsIDB4Y2UsIDB4NDgsCi0JCQkgICAgMHg4ZCwgMHhmMSwgMHhjZCwgMHgxMiwgMHg2MSwgMHg2NSwgMHg1ZCwgMHhlOSwKLQkJCSAgICAweDU3LCAweDg5LCAweDY1LCAweDY1LCAweDk3LCAweDVmLCAweDkxLCAweDk3IH0sCisJCS5kaWdlc3QgPSAiXHg0Nlx4N2RceGI4XHgwOFx4NjNceGViXHhjZVx4NDgiCisJCQkgICJceDhkXHhmMVx4Y2RceDEyXHg2MVx4NjVceDVkXHhlOSIKKwkJCSAgIlx4NTdceDg5XHg2NVx4NjVceDk3XHg1Zlx4OTFceDk3IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiVGlnZXIgLSBBIEZhc3QgTmV3IEhhc2ggRnVuY3Rpb24sICIKLQkJCSAgICAgImJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSwgIgotCQkJICAgICAicHJvY2VlZGluZ3Mgb2YgRmFzdCBTb2Z0d2FyZSBFbmNyeXB0aW9uIDMsICIKLQkJCSAgICAgIkNhbWJyaWRnZSwgMTk5Ni4iLAorCQkJICAgImJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSwgIgorCQkJICAgInByb2NlZWRpbmdzIG9mIEZhc3QgU29mdHdhcmUgRW5jcnlwdGlvbiAzLCAiCisJCQkgICAiQ2FtYnJpZGdlLCAxOTk2LiIsCiAJCS5wc2l6ZSAgPSAxMjUsCi0JCS5kaWdlc3QgPSB7IDB4M2QsIDB4OWEsIDB4ZWIsIDB4MDMsIDB4ZDEsIDB4YmQsIDB4MWEsIDB4NjMsCi0JCQkgICAgMHg1NywgMHhiMiwgMHg3NywgMHg0ZCwgMHhmZCwgMHg2ZCwgMHg1YiwgMHgyNCwKLQkJCSAgICAweGRkLCAweDY4LCAweDE1LCAweDFkLCAweDUwLCAweDM5LCAweDc0LCAweGZjIH0sCisJCS5kaWdlc3QgPSAiXHgzZFx4OWFceGViXHgwM1x4ZDFceGJkXHgxYVx4NjMiCisJCQkgICJceDU3XHhiMlx4NzdceDRkXHhmZFx4NmRceDViXHgyNCIKKwkJCSAgIlx4ZGRceDY4XHgxNVx4MWRceDUwXHgzOVx4NzRceGZjIiwKIAl9LAogfTsKIApAQCAtNjU4LDQyICs2NTUsNDIgQEAKIAl7CiAJCS5wbGFpbnRleHQgPSAiIiwKIAkJLnBzaXplCT0gMCwKLQkJLmRpZ2VzdCA9IHsgMHgyNCwgMHhmMCwgMHgxMywgMHgwYywgMHg2MywgMHhhYywgMHg5MywgMHgzMiwKLQkJCSAgICAweDE2LCAweDE2LCAweDZlLCAweDc2LCAweGIxLCAweGJiLCAweDkyLCAweDVmLAotCQkJICAgIDB4ZjMsIDB4NzMsIDB4ZGUsIDB4MmQgfSwKKwkJLmRpZ2VzdCA9ICJceDI0XHhmMFx4MTNceDBjXHg2M1x4YWNceDkzXHgzMiIKKwkJCSAgIlx4MTZceDE2XHg2ZVx4NzZceGIxXHhiYlx4OTJceDVmIgorCQkJICAiXHhmM1x4NzNceGRlXHgyZCIsCiAJfSwgewogCQkucGxhaW50ZXh0ID0gImFiYyIsCiAJCS5wc2l6ZQk9IDMsCi0JCS5kaWdlc3QgPSB7IDB4ZjIsIDB4NTgsIDB4YzEsIDB4ZTgsIDB4ODQsIDB4MTQsIDB4YWIsIDB4MmEsCi0JCQkgICAgMHg1MiwgMHg3YSwgMHhiNSwgMHg0MSwgMHhmZiwgMHhjNSwgMHhiOCwgMHhiZiwKLQkJCSAgICAweDkzLCAweDVmLCAweDdiLCAweDk1IH0sCisJCS5kaWdlc3QgPSAiXHhmMlx4NThceGMxXHhlOFx4ODRceDE0XHhhYlx4MmEiCisJCQkgICJceDUyXHg3YVx4YjVceDQxXHhmZlx4YzVceGI4XHhiZiIKKwkJCSAgIlx4OTNceDVmXHg3Ylx4OTUiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJUaWdlciIsCiAJCS5wc2l6ZQk9IDUsCi0JCS5kaWdlc3QgPSB7IDB4OWYsIDB4MDAsIDB4ZjUsIDB4OTksIDB4MDcsIDB4MjMsIDB4MDAsIDB4ZGQsCi0JCQkgICAgMHgyNywgMHg2YSwgMHhiYiwgMHgzOCwgMHhjOCwgMHhlYiwgMHg2ZCwgMHhlYywKLQkJCSAgICAweDM3LCAweDc5LCAweDBjLCAweDExIH0sCisJCS5kaWdlc3QgPSAiXHg5Zlx4MDBceGY1XHg5OVx4MDdceDIzXHgwMFx4ZGQiCisJCQkgICJceDI3XHg2YVx4YmJceDM4XHhjOFx4ZWJceDZkXHhlYyIKKwkJCSAgIlx4MzdceDc5XHgwY1x4MTEiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSstIiwKIAkJLnBzaXplCT0gNjQsCi0JCS5kaWdlc3QgPSB7IDB4ODcsIDB4ZmIsIDB4MmEsIDB4OTAsIDB4ODMsIDB4ODUsIDB4MWMsIDB4ZjcsCi0JCQkgICAgMHg0NywgMHgwZCwgMHgyYywgMHhmOCwgMHgxMCwgMHhlNiwgMHhkZiwgMHg5ZSwKLQkJCSAgICAweGI1LCAweDg2LCAweDQ0LCAweDUwIH0sCisJCS5kaWdlc3QgPSAiXHg4N1x4ZmJceDJhXHg5MFx4ODNceDg1XHgxY1x4ZjciCisJCQkgICJceDQ3XHgwZFx4MmNceGY4XHgxMFx4ZTZceGRmXHg5ZSIKKwkJCSAgIlx4YjVceDg2XHg0NFx4NTAiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWj1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiswMTIzNDU2Nzg5IiwKIAkJLnBzaXplCT0gNjQsCi0JCS5kaWdlc3QgPSB7IDB4NDYsIDB4N2QsIDB4YjgsIDB4MDgsIDB4NjMsIDB4ZWIsIDB4Y2UsIDB4NDgsCi0JCQkgICAgMHg4ZCwgMHhmMSwgMHhjZCwgMHgxMiwgMHg2MSwgMHg2NSwgMHg1ZCwgMHhlOSwKLQkJCSAgICAweDU3LCAweDg5LCAweDY1LCAweDY1IH0sCisJCS5kaWdlc3QgPSAiXHg0Nlx4N2RceGI4XHgwOFx4NjNceGViXHhjZVx4NDgiCisJCQkgICJceDhkXHhmMVx4Y2RceDEyXHg2MVx4NjVceDVkXHhlOSIKKwkJCSAgIlx4NTdceDg5XHg2NVx4NjUiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJUaWdlciAtIEEgRmFzdCBOZXcgSGFzaCBGdW5jdGlvbiwgIgotCQkJICAgICAiYnkgUm9zcyBBbmRlcnNvbiBhbmQgRWxpIEJpaGFtLCAiCi0JCQkgICAgICJwcm9jZWVkaW5ncyBvZiBGYXN0IFNvZnR3YXJlIEVuY3J5cHRpb24gMywgIgotCQkJICAgICAiQ2FtYnJpZGdlLCAxOTk2LiIsCisJCQkgICAiYnkgUm9zcyBBbmRlcnNvbiBhbmQgRWxpIEJpaGFtLCAiCisJCQkgICAicHJvY2VlZGluZ3Mgb2YgRmFzdCBTb2Z0d2FyZSBFbmNyeXB0aW9uIDMsICIKKwkJCSAgICJDYW1icmlkZ2UsIDE5OTYuIiwKIAkJLnBzaXplICA9IDEyNSwKLQkJLmRpZ2VzdCA9IHsgMHgzZCwgMHg5YSwgMHhlYiwgMHgwMywgMHhkMSwgMHhiZCwgMHgxYSwgMHg2MywKLQkJCSAgICAweDU3LCAweGIyLCAweDc3LCAweDRkLCAweGZkLCAweDZkLCAweDViLCAweDI0LAotCQkJICAgIDB4ZGQsIDB4NjgsIDB4MTUsIDB4MWQgfSwKKwkJLmRpZ2VzdCA9ICJceDNkXHg5YVx4ZWJceDAzXHhkMVx4YmRceDFhXHg2MyIKKwkJCSAgIlx4NTdceGIyXHg3N1x4NGRceGZkXHg2ZFx4NWJceDI0IgorCQkJICAiXHhkZFx4NjhceDE1XHgxZCIsCiAJfSwKIH07CiAKQEAgLTcwMywzNiArNzAwLDM2IEBACiAJewogCQkucGxhaW50ZXh0ID0gIiIsCiAJCS5wc2l6ZQk9IDAsCi0JCS5kaWdlc3QgPSB7IDB4MjQsIDB4ZjAsIDB4MTMsIDB4MGMsIDB4NjMsIDB4YWMsIDB4OTMsIDB4MzIsCi0JCQkgICAgMHgxNiwgMHgxNiwgMHg2ZSwgMHg3NiwgMHhiMSwgMHhiYiwgMHg5MiwgMHg1ZiB9LAorCQkuZGlnZXN0ID0gIlx4MjRceGYwXHgxM1x4MGNceDYzXHhhY1x4OTNceDMyIgorCQkJICAiXHgxNlx4MTZceDZlXHg3Nlx4YjFceGJiXHg5Mlx4NWYiLAogCX0sIHsKIAkJLnBsYWludGV4dCA9ICJhYmMiLAogCQkucHNpemUJPSAzLAotCQkuZGlnZXN0ID0geyAweGYyLCAweDU4LCAweGMxLCAweGU4LCAweDg0LCAweDE0LCAweGFiLCAweDJhLAotCQkJICAgIDB4NTIsIDB4N2EsIDB4YjUsIDB4NDEsIDB4ZmYsIDB4YzUsIDB4YjgsIDB4YmYgfSwKKwkJLmRpZ2VzdCA9ICJceGYyXHg1OFx4YzFceGU4XHg4NFx4MTRceGFiXHgyYSIKKwkJCSAgIlx4NTJceDdhXHhiNVx4NDFceGZmXHhjNVx4YjhceGJmIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiVGlnZXIiLAogCQkucHNpemUJPSA1LAotCQkuZGlnZXN0ID0geyAweDlmLCAweDAwLCAweGY1LCAweDk5LCAweDA3LCAweDIzLCAweDAwLCAweGRkLAotCQkJICAgIDB4MjcsIDB4NmEsIDB4YmIsIDB4MzgsIDB4YzgsIDB4ZWIsIDB4NmQsIDB4ZWMgfSwKKwkJLmRpZ2VzdCA9ICJceDlmXHgwMFx4ZjVceDk5XHgwN1x4MjNceDAwXHhkZCIKKwkJCSAgIlx4MjdceDZhXHhiYlx4MzhceGM4XHhlYlx4NmRceGVjIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLSIsCiAJCS5wc2l6ZQk9IDY0LAotCQkuZGlnZXN0ID0geyAweDg3LCAweGZiLCAweDJhLCAweDkwLCAweDgzLCAweDg1LCAweDFjLCAweGY3LAotCQkJICAgIDB4NDcsIDB4MGQsIDB4MmMsIDB4ZjgsIDB4MTAsIDB4ZTYsIDB4ZGYsIDB4OWUgfSwKKwkJLmRpZ2VzdCA9ICJceDg3XHhmYlx4MmFceDkwXHg4M1x4ODVceDFjXHhmNyIKKwkJCSAgIlx4NDdceDBkXHgyY1x4ZjhceDEwXHhlNlx4ZGZceDllIiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo9YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXorMDEyMzQ1Njc4OSIsCiAJCS5wc2l6ZQk9IDY0LAotCQkuZGlnZXN0ID0geyAweDQ2LCAweDdkLCAweGI4LCAweDA4LCAweDYzLCAweGViLCAweGNlLCAweDQ4LAotCQkJICAgIDB4OGQsIDB4ZjEsIDB4Y2QsIDB4MTIsIDB4NjEsIDB4NjUsIDB4NWQsIDB4ZTkgfSwKKwkJLmRpZ2VzdCA9ICJceDQ2XHg3ZFx4YjhceDA4XHg2M1x4ZWJceGNlXHg0OCIKKwkJCSAgIlx4OGRceGYxXHhjZFx4MTJceDYxXHg2NVx4NWRceGU5IiwKIAl9LCB7CiAJCS5wbGFpbnRleHQgPSAiVGlnZXIgLSBBIEZhc3QgTmV3IEhhc2ggRnVuY3Rpb24sICIKLQkJCSAgICAgImJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSwgIgotCQkJICAgICAicHJvY2VlZGluZ3Mgb2YgRmFzdCBTb2Z0d2FyZSBFbmNyeXB0aW9uIDMsICIKLQkJCSAgICAgIkNhbWJyaWRnZSwgMTk5Ni4iLAorCQkJICAgImJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSwgIgorCQkJICAgInByb2NlZWRpbmdzIG9mIEZhc3QgU29mdHdhcmUgRW5jcnlwdGlvbiAzLCAiCisJCQkgICAiQ2FtYnJpZGdlLCAxOTk2LiIsCiAJCS5wc2l6ZSAgPSAxMjUsCi0JCS5kaWdlc3QgPSB7IDB4M2QsIDB4OWEsIDB4ZWIsIDB4MDMsIDB4ZDEsIDB4YmQsIDB4MWEsIDB4NjMsCi0JCQkgICAgMHg1NywgMHhiMiwgMHg3NywgMHg0ZCwgMHhmZCwgMHg2ZCwgMHg1YiwgMHgyNCB9LAorCQkuZGlnZXN0ID0gIlx4M2RceDlhXHhlYlx4MDNceGQxXHhiZFx4MWFceDYzIgorCQkJICAiXHg1N1x4YjJceDc3XHg0ZFx4ZmRceDZkXHg1Ylx4MjQiLAogCX0sCiB9OwogCkBAIC03NDUsNTkgKzc0Miw3NyBAQAogc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgaG1hY19tZDVfdHZfdGVtcGxhdGVbXSA9CiB7CiAJewotCQkua2V5CT0geyBbMCAuLi4gMTVdID0gIDB4MGIgfSwKKwkJLmtleQk9ICJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIiwKIAkJLmtzaXplCT0gMTYsCiAJCS5wbGFpbnRleHQgPSAiSGkgVGhlcmUiLAogCQkucHNpemUJPSA4LAotCQkuZGlnZXN0CT0geyAweDkyLCAweDk0LCAweDcyLCAweDdhLCAweDM2LCAweDM4LCAweGJiLCAweDFjLAotCQkJICAgIDB4MTMsIDB4ZjQsIDB4OGUsIDB4ZjgsIDB4MTUsIDB4OGIsIDB4ZmMsIDB4OWQgfSwKKwkJLmRpZ2VzdAk9ICJceDkyXHg5NFx4NzJceDdhXHgzNlx4MzhceGJiXHgxYyIKKwkJCSAgIlx4MTNceGY0XHg4ZVx4ZjhceDE1XHg4Ylx4ZmNceDlkIiwKIAl9LCB7Ci0JCS5rZXkJPSB7ICdKJywgJ2UnLCAnZicsICdlJyB9LAorCQkua2V5CT0gIkplZmUiLAogCQkua3NpemUJPSA0LAogCQkucGxhaW50ZXh0ID0gIndoYXQgZG8geWEgd2FudCBmb3Igbm90aGluZz8iLAogCQkucHNpemUJPSAyOCwKLQkJLmRpZ2VzdAk9IHsgMHg3NSwgMHgwYywgMHg3OCwgMHgzZSwgMHg2YSwgMHhiMCwgMHhiNSwgMHgwMywKLQkJCSAgICAweGVhLCAweGE4LCAweDZlLCAweDMxLCAweDBhLCAweDVkLCAweGI3LCAweDM4IH0sCisJCS5kaWdlc3QJPSAiXHg3NVx4MGNceDc4XHgzZVx4NmFceGIwXHhiNVx4MDMiCisJCQkgICJceGVhXHhhOFx4NmVceDMxXHgwYVx4NWRceGI3XHgzOCIsCiAJCS5ucAk9IDIsCiAJCS50YXAJPSB7MTQsIDE0fQogCX0sIHsKLQkJLmtleQk9IHsgWzAgLi4uIDE1XSA9IDB4YWEgfSwKKwkJLmtleQk9ICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIiwKIAkJLmtzaXplCT0gMTYsCi0JCS5wbGFpbnRleHQgPSB7IFswIC4uLiA0OV0gPSAgMHhkZCB9LAorCQkucGxhaW50ZXh0ID0gIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkJCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCQkJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJCQkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIiwKIAkJLnBzaXplCT0gNTAsCi0JCS5kaWdlc3QJPSB7IDB4NTYsIDB4YmUsIDB4MzQsIDB4NTIsIDB4MWQsIDB4MTQsIDB4NGMsIDB4ODgsCi0JCQkgICAgMHhkYiwgMHhiOCwgMHhjNywgMHgzMywgMHhmMCwgMHhlOCwgMHhiMywgMHhmNiB9LAorCQkuZGlnZXN0CT0gIlx4NTZceGJlXHgzNFx4NTJceDFkXHgxNFx4NGNceDg4IgorCQkJICAiXHhkYlx4YjhceGM3XHgzM1x4ZjBceGU4XHhiM1x4ZjYiLAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKLQkJCSAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLAotCQkJICAgIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksIH0sCisJCS5rZXkJPSAiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDgiCisJCQkgICJceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMCIKKwkJCSAgIlx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOSIsCiAJCS5rc2l6ZQk9IDI1LAotCQkucGxhaW50ZXh0ID0geyBbMCAuLi4gNDldID0gIDB4Y2QgfSwKKwkJLnBsYWludGV4dCA9ICJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJCQkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkJCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCQkJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIsCiAJCS5wc2l6ZQk9IDUwLAotCQkuZGlnZXN0CT0geyAweDY5LCAweDdlLCAweGFmLCAweDBhLCAweGNhLCAweDNhLCAweDNhLCAweGVhLAotCQkJICAgIDB4M2EsIDB4NzUsIDB4MTYsIDB4NDcsIDB4NDYsIDB4ZmYsIDB4YWEsIDB4NzkgfSwKKwkJLmRpZ2VzdAk9ICJceDY5XHg3ZVx4YWZceDBhXHhjYVx4M2FceDNhXHhlYSIKKwkJCSAgIlx4M2FceDc1XHgxNlx4NDdceDQ2XHhmZlx4YWFceDc5IiwKIAl9LCB7Ci0JCS5rZXkJPSB7IFswIC4uLiAxNV0gPSAweDBjIH0sCisJCS5rZXkJPSAiXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwYyIsCiAJCS5rc2l6ZQk9IDE2LAogCQkucGxhaW50ZXh0ID0gIlRlc3QgV2l0aCBUcnVuY2F0aW9uIiwKIAkJLnBzaXplCT0gMjAsCi0JCS5kaWdlc3QJPSB7IDB4NTYsIDB4NDYsIDB4MWUsIDB4ZjIsIDB4MzQsIDB4MmUsIDB4ZGMsIDB4MDAsCi0JCQkgICAgMHhmOSwgMHhiYSwgMHhiOSwgMHg5NSwgMHg2OSwgMHgwZSwgMHhmZCwgMHg0YyB9LAorCQkuZGlnZXN0CT0gIlx4NTZceDQ2XHgxZVx4ZjJceDM0XHgyZVx4ZGNceDAwIgorCQkJICAiXHhmOVx4YmFceGI5XHg5NVx4NjlceDBlXHhmZFx4NGMiLAogCX0sIHsKLQkJLmtleQk9IHsgWzAgLi4uIDc5XSA9ICAweGFhIH0sCisJCS5rZXkJPSAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWEiLAogCQkua3NpemUJPSA4MCwKIAkJLnBsYWludGV4dCA9ICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiLAogCQkucHNpemUJPSA1NCwKLQkJLmRpZ2VzdAk9IHsgMHg2YiwgMHgxYSwgMHhiNywgMHhmZSwgMHg0YiwgMHhkNywgMHhiZiwgMHg4ZiwKLQkJCSAgICAweDBiLCAweDYyLCAweGU2LCAweGNlLCAweDYxLCAweGI5LCAweGQwLCAweGNkIH0sCisJCS5kaWdlc3QJPSAiXHg2Ylx4MWFceGI3XHhmZVx4NGJceGQ3XHhiZlx4OGYiCisJCQkgICJceDBiXHg2Mlx4ZTZceGNlXHg2MVx4YjlceGQwXHhjZCIsCiAJfSwgewotCQkua2V5CT0geyBbMCAuLi4gNzldID0gIDB4YWEgfSwKKwkJLmtleQk9ICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYSIsCiAJCS5rc2l6ZQk9IDgwLAogCQkucGxhaW50ZXh0ID0gIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgYW5kIExhcmdlciBUaGFuIE9uZSAiCi0JCQkgICAgICJCbG9jay1TaXplIERhdGEiLAorCQkJICAgIkJsb2NrLVNpemUgRGF0YSIsCiAJCS5wc2l6ZQk9IDczLAotCQkuZGlnZXN0CT0geyAweDZmLCAweDYzLCAweDBmLCAweGFkLCAweDY3LCAweGNkLCAweGEwLCAweGVlLAotCQkJICAgIDB4MWYsIDB4YjEsIDB4ZjUsIDB4NjIsIDB4ZGIsIDB4M2EsIDB4YTUsIDB4M2UgfSwKKwkJLmRpZ2VzdAk9ICJceDZmXHg2M1x4MGZceGFkXHg2N1x4Y2RceGEwXHhlZSIKKwkJCSAgIlx4MWZceGIxXHhmNVx4NjJceGRiXHgzYVx4YTVceDNlIiwKIAl9LAogfTsKIApAQCAtODA4LDYwICs4MjMsNzggQEAKIAogc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgaG1hY19zaGExX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5CT0geyBbMCAuLi4gMTldID0gMHgwYiB9LAorCQkua2V5CT0gIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIiwKIAkJLmtzaXplCT0gMjAsCiAJCS5wbGFpbnRleHQgPSAiSGkgVGhlcmUiLAogCQkucHNpemUJPSA4LAotCQkuZGlnZXN0CT0geyAweGI2LCAweDE3LCAweDMxLCAweDg2LCAweDU1LCAweDA1LCAweDcyLCAweDY0LAotCQkJICAgIDB4ZTIsIDB4OGIsIDB4YzAsIDB4YjYsIDB4ZmIsIDB4MzcsIDB4OGMsIDB4OGUsIDB4ZjEsCi0JCQkgICAgMHg0NiwgMHhiZSB9LAorCQkuZGlnZXN0CT0gIlx4YjZceDE3XHgzMVx4ODZceDU1XHgwNVx4NzJceDY0IgorCQkJICAiXHhlMlx4OGJceGMwXHhiNlx4ZmJceDM3XHg4Y1x4OGVceGYxIgorCQkJICAiXHg0Nlx4YmUiLAogCX0sIHsKLQkJLmtleQk9IHsgJ0onLCAnZScsICdmJywgJ2UnIH0sCisJCS5rZXkJPSAiSmVmZSIsCiAJCS5rc2l6ZQk9IDQsCiAJCS5wbGFpbnRleHQgPSAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsCiAJCS5wc2l6ZQk9IDI4LAotCQkuZGlnZXN0CT0geyAweGVmLCAweGZjLCAweGRmLCAweDZhLCAweGU1LCAweGViLCAweDJmLCAweGEyLCAweGQyLCAweDc0LAotCQkJICAgIDB4MTYsIDB4ZDUsIDB4ZjEsIDB4ODQsIDB4ZGYsIDB4OWMsIDB4MjUsIDB4OWEsIDB4N2MsIDB4NzkgfSwKKwkJLmRpZ2VzdAk9ICJceGVmXHhmY1x4ZGZceDZhXHhlNVx4ZWJceDJmXHhhMlx4ZDJceDc0IgorCQkJICAiXHgxNlx4ZDVceGYxXHg4NFx4ZGZceDljXHgyNVx4OWFceDdjXHg3OSIsCiAJCS5ucAk9IDIsCiAJCS50YXAJPSB7IDE0LCAxNCB9CiAJfSwgewotCQkua2V5CT0geyBbMCAuLi4gMTldID0gMHhhYSB9LAorCQkua2V5CT0gIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIiwKIAkJLmtzaXplCT0gMjAsCi0JCS5wbGFpbnRleHQgPSB7IFswIC4uLiA0OV0gPSAweGRkIH0sCisJCS5wbGFpbnRleHQgPSAiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCQkJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJCQkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkJCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiLAogCQkucHNpemUJPSA1MCwKLQkJLmRpZ2VzdAk9IHsgMHgxMiwgMHg1ZCwgMHg3MywgMHg0MiwgMHhiOSwgMHhhYywgMHgxMSwgMHhjZCwgMHg5MSwgMHhhMywKLQkJCSAgICAweDlhLCAweGY0LCAweDhhLCAweGExLCAweDdiLCAweDRmLCAweDYzLCAweGYxLCAweDc1LCAweGQzIH0sCisJCS5kaWdlc3QJPSAiXHgxMlx4NWRceDczXHg0Mlx4YjlceGFjXHgxMVx4Y2RceDkxXHhhMyIKKwkJCSAgIlx4OWFceGY0XHg4YVx4YTFceDdiXHg0Zlx4NjNceGYxXHg3NVx4ZDMiLAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKLQkJCSAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLAotCQkJICAgIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTkgfSwKKwkJLmtleQk9ICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOCIKKwkJCSAgIlx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorCQkJICAiXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5IiwKIAkJLmtzaXplCT0gMjUsCi0JCS5wbGFpbnRleHQgPSB7IFswIC4uLiA0OV0gPSAweGNkIH0sCisJCS5wbGFpbnRleHQgPSAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCQkJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJCQkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkJCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiLAogCQkucHNpemUJPSA1MCwKLQkJLmRpZ2VzdAk9IHsgMHg0YywgMHg5MCwgMHgwNywgMHhmNCwgMHgwMiwgMHg2MiwgMHg1MCwgMHhjNiwgMHhiYywgMHg4NCwKLQkJCSAgICAweDE0LCAweGY5LCAweGJmLCAweDUwLCAweGM4LCAweDZjLCAweDJkLCAweDcyLCAweDM1LCAweGRhIH0sCisJCS5kaWdlc3QJPSAiXHg0Y1x4OTBceDA3XHhmNFx4MDJceDYyXHg1MFx4YzZceGJjXHg4NCIKKwkJCSAgIlx4MTRceGY5XHhiZlx4NTBceGM4XHg2Y1x4MmRceDcyXHgzNVx4ZGEiLAogCX0sIHsKLQkJLmtleQk9IHsgWzAgLi4uIDE5XSA9IDB4MGMgfSwKKwkJLmtleQk9ICJceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwYyIsCiAJCS5rc2l6ZQk9IDIwLAogCQkucGxhaW50ZXh0ID0gIlRlc3QgV2l0aCBUcnVuY2F0aW9uIiwKIAkJLnBzaXplCT0gMjAsCi0JCS5kaWdlc3QJPSB7IDB4NGMsIDB4MWEsIDB4MDMsIDB4NDIsIDB4NGIsIDB4NTUsIDB4ZTAsIDB4N2YsIDB4ZTcsIDB4ZjIsCi0JCQkgICAgMHg3YiwgMHhlMSwgMHhkNSwgMHg4YiwgMHhiOSwgMHgzMiwgMHg0YSwgMHg5YSwgMHg1YSwgMHgwNCB9LAorCQkuZGlnZXN0CT0gIlx4NGNceDFhXHgwM1x4NDJceDRiXHg1NVx4ZTBceDdmXHhlN1x4ZjIiCisJCQkgICJceDdiXHhlMVx4ZDVceDhiXHhiOVx4MzJceDRhXHg5YVx4NWFceDA0IiwKIAl9LCB7Ci0JCS5rZXkJPSB7IFswIC4uLiA3OV0gPSAweGFhIH0sCisJCS5rZXkJPSAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWEiLAogCQkua3NpemUJPSA4MCwKIAkJLnBsYWludGV4dCA9ICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiLAogCQkucHNpemUJPSA1NCwKLQkJLmRpZ2VzdAk9IHsgMHhhYSwgMHg0YSwgMHhlNSwgMHhlMSwgMHg1MiwgMHg3MiwgMHhkMCwgMHgwZSwgMHg5NSwgMHg3MCwKLQkJCSAgICAweDU2LCAweDM3LCAweGNlLCAweDhhLCAweDNiLCAweDU1LCAweGVkLCAweDQwLCAweDIxLCAweDEyIH0sCisJCS5kaWdlc3QJPSAiXHhhYVx4NGFceGU1XHhlMVx4NTJceDcyXHhkMFx4MGVceDk1XHg3MCIKKwkJCSAgIlx4NTZceDM3XHhjZVx4OGFceDNiXHg1NVx4ZWRceDQwXHgyMVx4MTIiLAogCX0sIHsKLQkJLmtleQk9IHsgWzAgLi4uIDc5XSA9IDB4YWEgfSwKKwkJLmtleQk9ICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYSIsCiAJCS5rc2l6ZQk9IDgwLAogCQkucGxhaW50ZXh0ID0gIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgYW5kIExhcmdlciBUaGFuIE9uZSAiCi0JCQkgICAgICJCbG9jay1TaXplIERhdGEiLAorCQkJICAgIkJsb2NrLVNpemUgRGF0YSIsCiAJCS5wc2l6ZQk9IDczLAotCQkuZGlnZXN0CT0geyAweGU4LCAweGU5LCAweDlkLCAweDBmLCAweDQ1LCAweDIzLCAweDdkLCAweDc4LCAweDZkLCAweDZiLAotCQkJICAgIDB4YmEsIDB4YTcsIDB4OTYsIDB4NWMsIDB4NzgsIDB4MDgsIDB4YmIsIDB4ZmYsIDB4MWEsIDB4OTEgfSwKKwkJLmRpZ2VzdAk9ICJceGU4XHhlOVx4OWRceDBmXHg0NVx4MjNceDdkXHg3OFx4NmRceDZiIgorCQkJICAiXHhiYVx4YTdceDk2XHg1Y1x4NzhceDA4XHhiYlx4ZmZceDFhXHg5MSIsCiAJfSwKIH07CiAKQEAgLTg3MywxMTAgKzkwNiwxMTAgQEAKIAogc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgaG1hY19zaGEyMjRfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkgICAgPSB7IDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCi0JCQkweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAotCQkJMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiB9LAorCQkua2V5ICAgID0gIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIgorCQkJIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiIgorCQkJIlx4MGJceDBiXHgwYlx4MGIiLAogCQkua3NpemUgID0gMjAsCiAJCS8qICAoIkhpIFRoZXJlIikgKi8KLQkJLnBsYWludGV4dCA9IHsgMHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NSB9LAorCQkucGxhaW50ZXh0ID0gIlx4NDhceDY5XHgyMFx4NTRceDY4XHg2NVx4NzJceDY1IiwKIAkJLnBzaXplICA9IDgsCi0JCS5kaWdlc3QgPSB7IDB4ODksIDB4NmYsIDB4YjEsIDB4MTIsIDB4OGEsIDB4YmIsIDB4ZGYsIDB4MTksCi0JCQkweDY4LCAweDMyLCAweDEwLCAweDdjLCAweGQ0LCAweDlkLCAweGYzLCAweDNmLAotCQkJMHg0NywgMHhiNCwgMHhiMSwgMHgxNiwgMHg5OSwgMHgxMiwgMHhiYSwgMHg0ZiwKLQkJCTB4NTMsIDB4NjgsIDB4NGIsIDB4MjJ9LAorCQkuZGlnZXN0ID0gIlx4ODlceDZmXHhiMVx4MTJceDhhXHhiYlx4ZGZceDE5IgorCQkJIlx4NjhceDMyXHgxMFx4N2NceGQ0XHg5ZFx4ZjNceDNmIgorCQkJIlx4NDdceGI0XHhiMVx4MTZceDk5XHgxMlx4YmFceDRmIgorCQkJIlx4NTNceDY4XHg0Ylx4MjIiLAogCX0sIHsKLQkJLmtleSAgICA9IHsgMHg0YSwgMHg2NSwgMHg2NiwgMHg2NSB9LCAvKiAoIkplZmUiKSAqLworCQkua2V5ICAgID0gIkplZmUiLAogCQkua3NpemUgID0gNCwKIAkJLyogKCJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IikgKi8KLQkJLnBsYWludGV4dCA9IHsgMHg3NywgMHg2OCwgMHg2MSwgMHg3NCwgMHgyMCwgMHg2NCwgMHg2ZiwgMHgyMCwKLQkJCTB4NzksIDB4NjEsIDB4MjAsIDB4NzcsIDB4NjEsIDB4NmUsIDB4NzQsIDB4MjAsCi0JCQkweDY2LCAweDZmLCAweDcyLCAweDIwLCAweDZlLCAweDZmLCAweDc0LCAweDY4LAotCQkJMHg2OSwgMHg2ZSwgMHg2NywgMHgzZiB9LAorCQkucGxhaW50ZXh0ID0gIlx4NzdceDY4XHg2MVx4NzRceDIwXHg2NFx4NmZceDIwIgorCQkJIlx4NzlceDYxXHgyMFx4NzdceDYxXHg2ZVx4NzRceDIwIgorCQkJIlx4NjZceDZmXHg3Mlx4MjBceDZlXHg2Zlx4NzRceDY4IgorCQkJIlx4NjlceDZlXHg2N1x4M2YiLAogCQkucHNpemUgID0gMjgsCi0JCS5kaWdlc3QgPSB7IDB4YTMsIDB4MGUsIDB4MDEsIDB4MDksIDB4OGIsIDB4YzYsIDB4ZGIsIDB4YmYsCi0JCQkweDQ1LCAweDY5LCAweDBmLCAweDNhLCAweDdlLCAweDllLCAweDZkLCAweDBmLAotCQkJMHg4YiwgMHhiZSwgMHhhMiwgMHhhMywgMHg5ZSwgMHg2MSwgMHg0OCwgMHgwMCwKLQkJCTB4OGYsIDB4ZDAsIDB4NWUsIDB4NDQgfSwKKwkJLmRpZ2VzdCA9ICJceGEzXHgwZVx4MDFceDA5XHg4Ylx4YzZceGRiXHhiZiIKKwkJCSJceDQ1XHg2OVx4MGZceDNhXHg3ZVx4OWVceDZkXHgwZiIKKwkJCSJceDhiXHhiZVx4YTJceGEzXHg5ZVx4NjFceDQ4XHgwMCIKKwkJCSJceDhmXHhkMFx4NWVceDQ0IiwKIAkJLm5wID0gNCwKIAkJLnRhcCAgICA9IHsgNywgNywgNywgNyB9CiAJfSwgewotCQkua2V5ICAgID0geyAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSB9LAorCQkua2V5ICAgID0gIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYSIsCiAJCS5rc2l6ZSAgPSAxMzEsCiAJCS8qICgiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IikgKi8KLQkJLnBsYWludGV4dCA9IHsgMHg1NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgyMCwgMHg1NSwgMHg3MywgMHg2OSwKLQkJCTB4NmUsIDB4NjcsIDB4MjAsIDB4NGMsIDB4NjEsIDB4NzIsIDB4NjcsIDB4NjUsCi0JCQkweDcyLCAweDIwLCAweDU0LCAweDY4LCAweDYxLCAweDZlLCAweDIwLCAweDQyLAotCQkJMHg2YywgMHg2ZiwgMHg2MywgMHg2YiwgMHgyZCwgMHg1MywgMHg2OSwgMHg3YSwKLQkJCTB4NjUsIDB4MjAsIDB4NGIsIDB4NjUsIDB4NzksIDB4MjAsIDB4MmQsIDB4MjAsCi0JCQkweDQ4LCAweDYxLCAweDczLCAweDY4LCAweDIwLCAweDRiLCAweDY1LCAweDc5LAotCQkJMHgyMCwgMHg0NiwgMHg2OSwgMHg3MiwgMHg3MywgMHg3NCB9LAorCQkucGxhaW50ZXh0ID0gIlx4NTRceDY1XHg3M1x4NzRceDIwXHg1NVx4NzNceDY5IgorCQkJIlx4NmVceDY3XHgyMFx4NGNceDYxXHg3Mlx4NjdceDY1IgorCQkJIlx4NzJceDIwXHg1NFx4NjhceDYxXHg2ZVx4MjBceDQyIgorCQkJIlx4NmNceDZmXHg2M1x4NmJceDJkXHg1M1x4NjlceDdhIgorCQkJIlx4NjVceDIwXHg0Ylx4NjVceDc5XHgyMFx4MmRceDIwIgorCQkJIlx4NDhceDYxXHg3M1x4NjhceDIwXHg0Ylx4NjVceDc5IgorCQkJIlx4MjBceDQ2XHg2OVx4NzJceDczXHg3NCIsCiAJCS5wc2l6ZSAgPSA1NCwKLQkJLmRpZ2VzdCA9IHsgMHg5NSwgMHhlOSwgMHhhMCwgMHhkYiwgMHg5NiwgMHgyMCwgMHg5NSwgMHhhZCwKLQkJCTB4YWUsIDB4YmUsIDB4OWIsIDB4MmQsIDB4NmYsIDB4MGQsIDB4YmMsIDB4ZTIsCi0JCQkweGQ0LCAweDk5LCAweGYxLCAweDEyLCAweGYyLCAweGQyLCAweGI3LCAweDI3LAotCQkJMHgzZiwgMHhhNiwgMHg4NywgMHgwZSB9LAorCQkuZGlnZXN0ID0gIlx4OTVceGU5XHhhMFx4ZGJceDk2XHgyMFx4OTVceGFkIgorCQkJIlx4YWVceGJlXHg5Ylx4MmRceDZmXHgwZFx4YmNceGUyIgorCQkJIlx4ZDRceDk5XHhmMVx4MTJceGYyXHhkMlx4YjdceDI3IgorCQkJIlx4M2ZceGE2XHg4N1x4MGUiLAogCX0sIHsKLQkJLmtleSAgICA9IHsgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCTB4YWEsIDB4YWEsIDB4YWEgfSwKKwkJLmtleSAgICA9ICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWEiLAogCQkua3NpemUgID0gMTMxLAogCQkvKiAoIlRoaXMgaXMgYSB0ZXN0IHVzaW5nIGEgbGFyZ2VyIHRoYW4gYmxvY2stc2l6ZSBrZXkgYW5kIGEiKQogCQkoIiBsYXJnZXIgdGhhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlZHMgdG8gYmUiKQogCQkJKCIgaGFzaGVkIGJlZm9yZSBiZWluZyB1c2VkIGJ5IHRoZSBITUFDIGFsZ29yaXRobS4iKSAqLwotCQkucGxhaW50ZXh0ID0geyAweDU0LCAweDY4LCAweDY5LCAweDczLCAweDIwLCAweDY5LCAweDczLCAweDIwLAotCQkJMHg2MSwgMHgyMCwgMHg3NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgyMCwgMHg3NSwKLQkJCTB4NzMsIDB4NjksIDB4NmUsIDB4NjcsIDB4MjAsIDB4NjEsIDB4MjAsIDB4NmMsCi0JCQkweDYxLCAweDcyLCAweDY3LCAweDY1LCAweDcyLCAweDIwLCAweDc0LCAweDY4LAotCQkJMHg2MSwgMHg2ZSwgMHgyMCwgMHg2MiwgMHg2YywgMHg2ZiwgMHg2MywgMHg2YiwKLQkJCTB4MmQsIDB4NzMsIDB4NjksIDB4N2EsIDB4NjUsIDB4MjAsIDB4NmIsIDB4NjUsCi0JCQkweDc5LCAweDIwLCAweDYxLCAweDZlLCAweDY0LCAweDIwLCAweDYxLCAweDIwLAotCQkJMHg2YywgMHg2MSwgMHg3MiwgMHg2NywgMHg2NSwgMHg3MiwgMHgyMCwgMHg3NCwKLQkJCTB4NjgsIDB4NjEsIDB4NmUsIDB4MjAsIDB4NjIsIDB4NmMsIDB4NmYsIDB4NjMsCi0JCQkweDZiLCAweDJkLCAweDczLCAweDY5LCAweDdhLCAweDY1LCAweDIwLCAweDY0LAotCQkJMHg2MSwgMHg3NCwgMHg2MSwgMHgyZSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwKLQkJCTB4MjAsIDB4NmIsIDB4NjUsIDB4NzksIDB4MjAsIDB4NmUsIDB4NjUsIDB4NjUsCi0JCQkweDY0LCAweDczLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDYyLCAweDY1LAotCQkJMHgyMCwgMHg2OCwgMHg2MSwgMHg3MywgMHg2OCwgMHg2NSwgMHg2NCwgMHgyMCwKLQkJCTB4NjIsIDB4NjUsIDB4NjYsIDB4NmYsIDB4NzIsIDB4NjUsIDB4MjAsIDB4NjIsCi0JCQkweDY1LCAweDY5LCAweDZlLCAweDY3LCAweDIwLCAweDc1LCAweDczLCAweDY1LAotCQkJMHg2NCwgMHgyMCwgMHg2MiwgMHg3OSwgMHgyMCwgMHg3NCwgMHg2OCwgMHg2NSwKLQkJCTB4MjAsIDB4NDgsIDB4NGQsIDB4NDEsIDB4NDMsIDB4MjAsIDB4NjEsIDB4NmMsCi0JCQkweDY3LCAweDZmLCAweDcyLCAweDY5LCAweDc0LCAweDY4LCAweDZkLCAweDJlIH0sCisJCS5wbGFpbnRleHQgPSAiXHg1NFx4NjhceDY5XHg3M1x4MjBceDY5XHg3M1x4MjAiCisJCQkiXHg2MVx4MjBceDc0XHg2NVx4NzNceDc0XHgyMFx4NzUiCisJCQkiXHg3M1x4NjlceDZlXHg2N1x4MjBceDYxXHgyMFx4NmMiCisJCQkiXHg2MVx4NzJceDY3XHg2NVx4NzJceDIwXHg3NFx4NjgiCisJCQkiXHg2MVx4NmVceDIwXHg2Mlx4NmNceDZmXHg2M1x4NmIiCisJCQkiXHgyZFx4NzNceDY5XHg3YVx4NjVceDIwXHg2Ylx4NjUiCisJCQkiXHg3OVx4MjBceDYxXHg2ZVx4NjRceDIwXHg2MVx4MjAiCisJCQkiXHg2Y1x4NjFceDcyXHg2N1x4NjVceDcyXHgyMFx4NzQiCisJCQkiXHg2OFx4NjFceDZlXHgyMFx4NjJceDZjXHg2Zlx4NjMiCisJCQkiXHg2Ylx4MmRceDczXHg2OVx4N2FceDY1XHgyMFx4NjQiCisJCQkiXHg2MVx4NzRceDYxXHgyZVx4MjBceDU0XHg2OFx4NjUiCisJCQkiXHgyMFx4NmJceDY1XHg3OVx4MjBceDZlXHg2NVx4NjUiCisJCQkiXHg2NFx4NzNceDIwXHg3NFx4NmZceDIwXHg2Mlx4NjUiCisJCQkiXHgyMFx4NjhceDYxXHg3M1x4NjhceDY1XHg2NFx4MjAiCisJCQkiXHg2Mlx4NjVceDY2XHg2Zlx4NzJceDY1XHgyMFx4NjIiCisJCQkiXHg2NVx4NjlceDZlXHg2N1x4MjBceDc1XHg3M1x4NjUiCisJCQkiXHg2NFx4MjBceDYyXHg3OVx4MjBceDc0XHg2OFx4NjUiCisJCQkiXHgyMFx4NDhceDRkXHg0MVx4NDNceDIwXHg2MVx4NmMiCisJCQkiXHg2N1x4NmZceDcyXHg2OVx4NzRceDY4XHg2ZFx4MmUiLAogCQkucHNpemUgID0gMTUyLAotCQkuZGlnZXN0ID0geyAweDNhLCAweDg1LCAweDQxLCAweDY2LCAweGFjLCAweDVkLCAweDlmLCAweDAyLAotCQkJMHgzZiwgMHg1NCwgMHhkNSwgMHgxNywgMHhkMCwgMHhiMywgMHg5ZCwgMHhiZCwKLQkJCTB4OTQsIDB4NjcsIDB4NzAsIDB4ZGIsIDB4OWMsIDB4MmIsIDB4OTUsIDB4YzksCi0JCQkweGY2LCAweGY1LCAweDY1LCAweGQxIH0sCisJCS5kaWdlc3QgPSAiXHgzYVx4ODVceDQxXHg2Nlx4YWNceDVkXHg5Zlx4MDIiCisJCQkiXHgzZlx4NTRceGQ1XHgxN1x4ZDBceGIzXHg5ZFx4YmQiCisJCQkiXHg5NFx4NjdceDcwXHhkYlx4OWNceDJiXHg5NVx4YzkiCisJCQkiXHhmNlx4ZjVceDY1XHhkMSIsCiAJfSwKIH07CiAKQEAgLTk4OCwxMTIgKzEwMjEsMTM2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGFzaF90ZXN0dmVjIGhtYWNfc2hhMjU2X3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5CT0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAotCQkJICAgIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsCi0JCQkgICAgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwKLQkJCSAgICAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIwfSwKKwkJLmtleQk9ICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOCIKKwkJCSAgIlx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorCQkJICAiXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MTgiCisJCQkgICJceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmXHgyMCIsCiAJCS5rc2l6ZQk9IDMyLAogCQkucGxhaW50ZXh0ID0gImFiYyIsCiAJCS5wc2l6ZQk9IDMsCi0JCS5kaWdlc3QJPSB7IDB4YTIsIDB4MWIsIDB4MWYsIDB4NWQsIDB4NGMsIDB4ZjQsIDB4ZjcsIDB4M2EsCi0JCQkgICAgMHg0ZCwgMHhkOSwgMHgzOSwgMHg3NSwgMHgwZiwgMHg3YSwgMHgwNiwgMHg2YSwKLQkJCSAgICAweDdmLCAweDk4LCAweGNjLCAweDEzLCAweDFjLCAweGIxLCAweDZhLCAweDY2LAotCQkJICAgIDB4OTIsIDB4NzUsIDB4OTAsIDB4MjEsIDB4Y2YsIDB4YWIsIDB4ODEsIDB4ODEgfSwKKwkJLmRpZ2VzdAk9ICJceGEyXHgxYlx4MWZceDVkXHg0Y1x4ZjRceGY3XHgzYSIKKwkJCSAgIlx4NGRceGQ5XHgzOVx4NzVceDBmXHg3YVx4MDZceDZhIgorCQkJICAiXHg3Zlx4OThceGNjXHgxM1x4MWNceGIxXHg2YVx4NjYiCisJCQkgICJceDkyXHg3NVx4OTBceDIxXHhjZlx4YWJceDgxXHg4MSIsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAotCQkJICAgIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsCi0JCQkgICAgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwKLQkJCSAgICAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIwIH0sCisJCS5rZXkJPSAiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDgiCisJCQkgICJceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMCIKKwkJCSAgIlx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4IgorCQkJICAiXHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZlx4MjAiLAogCQkua3NpemUJPSAzMiwKIAkJLnBsYWludGV4dCA9ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCiAJCS5wc2l6ZQk9IDU2LAotCQkuZGlnZXN0CT0geyAweDEwLCAweDRmLCAweGRjLCAweDEyLCAweDU3LCAweDMyLCAweDhmLCAweDA4LAotCQkJICAgIDB4MTgsIDB4NGIsIDB4YTcsIDB4MzEsIDB4MzEsIDB4YzUsIDB4M2MsIDB4YWUsCi0JCQkgICAgMHhlNiwgMHg5OCwgMHhlMywgMHg2MSwgMHgxOSwgMHg0MiwgMHgxMSwgMHg0OSwKLQkJCSAgICAweGVhLCAweDhjLCAweDcxLCAweDI0LCAweDU2LCAweDY5LCAweDdkLCAweDMwIH0sCisJCS5kaWdlc3QJPSAiXHgxMFx4NGZceGRjXHgxMlx4NTdceDMyXHg4Zlx4MDgiCisJCQkgICJceDE4XHg0Ylx4YTdceDMxXHgzMVx4YzVceDNjXHhhZSIKKwkJCSAgIlx4ZTZceDk4XHhlM1x4NjFceDE5XHg0Mlx4MTFceDQ5IgorCQkJICAiXHhlYVx4OGNceDcxXHgyNFx4NTZceDY5XHg3ZFx4MzAiLAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKLQkJCSAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLAotCQkJICAgIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsCi0JCQkgICAgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgMHgyMCB9LAorCQkua2V5CT0gIlx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4IgorCQkJICAiXHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZlx4MTAiCisJCQkgICJceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOCIKKwkJCSAgIlx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWZceDIwIiwKIAkJLmtzaXplCT0gMzIsCiAJCS5wbGFpbnRleHQgPSAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCi0JCQkgICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisJCQkgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAogCQkucHNpemUJPSAxMTIsCi0JCS5kaWdlc3QJPSB7IDB4NDcsIDB4MDMsIDB4MDUsIDB4ZmMsIDB4N2UsIDB4NDAsIDB4ZmUsIDB4MzQsCi0JCQkgICAgMHhkMywgMHhlZSwgMHhiMywgMHhlNywgMHg3MywgMHhkOSwgMHg1YSwgMHhhYiwKLQkJCSAgICAweDczLCAweGFjLCAweGYwLCAweGZkLCAweDA2LCAweDA0LCAweDQ3LCAweGE1LAotCQkJICAgIDB4ZWIsIDB4NDUsIDB4OTUsIDB4YmYsIDB4MzMsIDB4YTksIDB4ZDEsIDB4YTMgfSwKKwkJLmRpZ2VzdAk9ICJceDQ3XHgwM1x4MDVceGZjXHg3ZVx4NDBceGZlXHgzNCIKKwkJCSAgIlx4ZDNceGVlXHhiM1x4ZTdceDczXHhkOVx4NWFceGFiIgorCQkJICAiXHg3M1x4YWNceGYwXHhmZFx4MDZceDA0XHg0N1x4YTUiCisJCQkgICJceGViXHg0NVx4OTVceGJmXHgzM1x4YTlceGQxXHhhMyIsCiAJfSwgewotCQkua2V5CT0geyBbMCAuLi4gMzFdID0gMHgwYiB9LAorCQkua2V5CT0gIlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiCisJCQkiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKwkJCSJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiLAogCQkua3NpemUJPSAzMiwKIAkJLnBsYWludGV4dCA9ICJIaSBUaGVyZSIsCiAJCS5wc2l6ZQk9IDgsCi0JCS5kaWdlc3QJPSB7IDB4MTksIDB4OGEsIDB4NjAsIDB4N2UsIDB4YjQsIDB4NGIsIDB4ZmIsIDB4YzYsCi0JCQkgICAgMHg5OSwgMHgwMywgMHhhMCwgMHhmMSwgMHhjZiwgMHgyYiwgMHhiZCwgMHhjNSwKLQkJCSAgICAweGJhLCAweDBhLCAweGEzLCAweGYzLCAweGQ5LCAweGFlLCAweDNjLCAweDFjLAotCQkJICAgIDB4N2EsIDB4M2IsIDB4MTYsIDB4OTYsIDB4YTAsIDB4YjYsIDB4OGMsIDB4ZjcgfSwKKwkJLmRpZ2VzdAk9ICJceDE5XHg4YVx4NjBceDdlXHhiNFx4NGJceGZiXHhjNiIKKwkJCSAgIlx4OTlceDAzXHhhMFx4ZjFceGNmXHgyYlx4YmRceGM1IgorCQkJICAiXHhiYVx4MGFceGEzXHhmM1x4ZDlceGFlXHgzY1x4MWMiCisJCQkgICJceDdhXHgzYlx4MTZceDk2XHhhMFx4YjZceDhjXHhmNyIsCiAJfSwgewogCQkua2V5CT0gIkplZmUiLAogCQkua3NpemUJPSA0LAogCQkucGxhaW50ZXh0ID0gIndoYXQgZG8geWEgd2FudCBmb3Igbm90aGluZz8iLAogCQkucHNpemUJPSAyOCwKLQkJLmRpZ2VzdAk9IHsgMHg1YiwgMHhkYywgMHhjMSwgMHg0NiwgMHhiZiwgMHg2MCwgMHg3NSwgMHg0ZSwKLQkJCSAgICAweDZhLCAweDA0LCAweDI0LCAweDI2LCAweDA4LCAweDk1LCAweDc1LCAweGM3LAotCQkJICAgIDB4NWEsIDB4MDAsIDB4M2YsIDB4MDgsIDB4OWQsIDB4MjcsIDB4MzksIDB4ODMsCi0JCQkgICAgMHg5ZCwgMHhlYywgMHg1OCwgMHhiOSwgMHg2NCwgMHhlYywgMHgzOCwgMHg0MyB9LAorCQkuZGlnZXN0CT0gIlx4NWJceGRjXHhjMVx4NDZceGJmXHg2MFx4NzVceDRlIgorCQkJICAiXHg2YVx4MDRceDI0XHgyNlx4MDhceDk1XHg3NVx4YzciCisJCQkgICJceDVhXHgwMFx4M2ZceDA4XHg5ZFx4MjdceDM5XHg4MyIKKwkJCSAgIlx4OWRceGVjXHg1OFx4YjlceDY0XHhlY1x4MzhceDQzIiwKIAkJLm5wCT0gMiwKIAkJLnRhcAk9IHsgMTQsIDE0IH0KIAl9LCB7Ci0JCS5rZXkJPSB7IFswIC4uLiAzMV0gPSAweGFhIH0sCisJCS5rZXkJPSAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIsCiAJCS5rc2l6ZQk9IDMyLAotCQkucGxhaW50ZXh0ID0geyBbMCAuLi4gNDldID0gMHhkZCB9LAorCQkucGxhaW50ZXh0ID0gIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZCIKKwkJCSJceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIgorCQkJIlx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGQiCisJCQkiXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkXHhkZFx4ZGRceGRkIiwKIAkJLnBzaXplCT0gNTAsCi0JCS5kaWdlc3QJPSB7IDB4Y2QsIDB4Y2IsIDB4MTIsIDB4MjAsIDB4ZDEsIDB4ZWMsIDB4Y2MsIDB4ZWEsCi0JCQkgICAgMHg5MSwgMHhlNSwgMHgzYSwgMHhiYSwgMHgzMCwgMHg5MiwgMHhmOSwgMHg2MiwKLQkJCSAgICAweGU1LCAweDQ5LCAweGZlLCAweDZjLCAweGU5LCAweGVkLCAweDdmLCAweGRjLAotCQkJICAgIDB4NDMsIDB4MTksIDB4MWYsIDB4YmQsIDB4ZTQsIDB4NWMsIDB4MzAsIDB4YjAgfSwKKwkJLmRpZ2VzdAk9ICJceGNkXHhjYlx4MTJceDIwXHhkMVx4ZWNceGNjXHhlYSIKKwkJCSAgIlx4OTFceGU1XHgzYVx4YmFceDMwXHg5Mlx4ZjlceDYyIgorCQkJICAiXHhlNVx4NDlceGZlXHg2Y1x4ZTlceGVkXHg3Zlx4ZGMiCisJCQkgICJceDQzXHgxOVx4MWZceGJkXHhlNFx4NWNceDMwXHhiMCIsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAotCQkJICAgIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsCi0JCQkgICAgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwKLQkJCSAgICAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIwLAotCQkJICAgIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUgfSwKKwkJLmtleQk9ICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOCIKKwkJCSAgIlx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorCQkJICAiXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MTgiCisJCQkgICJceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmXHgyMCIKKwkJCSAgIlx4MjFceDIyXHgyM1x4MjRceDI1IiwKIAkJLmtzaXplCT0gMzcsCi0JCS5wbGFpbnRleHQgPSB7IFswIC4uLiA0OV0gPSAweGNkIH0sCisJCS5wbGFpbnRleHQgPSAiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkIgorCQkJIlx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiCisJCQkiXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZCIKKwkJCSJceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2RceGNkXHhjZFx4Y2QiLAogCQkucHNpemUJPSA1MCwKLQkJLmRpZ2VzdAk9IHsgMHhkNCwgMHg2MywgMHgzYywgMHgxNywgMHhmNiwgMHhmYiwgMHg4ZCwgMHg3NCwKLQkJCSAgICAweDRjLCAweDY2LCAweGRlLCAweGUwLCAweGY4LCAweGYwLCAweDc0LCAweDU1LAotCQkJICAgIDB4NmUsIDB4YzQsIDB4YWYsIDB4NTUsIDB4ZWYsIDB4MDcsIDB4OTksIDB4ODUsCi0JCQkgICAgMHg0MSwgMHg0NiwgMHg4ZSwgMHhiNCwgMHg5YiwgMHhkMiwgMHhlOSwgMHgxNyB9LAorCQkuZGlnZXN0CT0gIlx4ZDRceDYzXHgzY1x4MTdceGY2XHhmYlx4OGRceDc0IgorCQkJICAiXHg0Y1x4NjZceGRlXHhlMFx4ZjhceGYwXHg3NFx4NTUiCisJCQkgICJceDZlXHhjNFx4YWZceDU1XHhlZlx4MDdceDk5XHg4NSIKKwkJCSAgIlx4NDFceDQ2XHg4ZVx4YjRceDliXHhkMlx4ZTlceDE3IiwKIAl9LCB7Ci0JCS5rZXkJPSB7IFswIC4uLiAzMV0gPSAweDBjIH0sCisJCS5rZXkJPSAiXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwYyIKKwkJCSJceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjXHgwY1x4MGNceDBjIgorCQkJIlx4MGNceDBjXHgwY1x4MGNceDBjXHgwYyIsCiAJCS5rc2l6ZQk9IDMyLAogCQkucGxhaW50ZXh0ID0gIlRlc3QgV2l0aCBUcnVuY2F0aW9uIiwKIAkJLnBzaXplCT0gMjAsCi0JCS5kaWdlc3QJPSB7IDB4NzUsIDB4NDYsIDB4YWYsIDB4MDEsIDB4ODQsIDB4MWYsIDB4YzAsIDB4OWIsCi0JCQkgICAgMHgxYSwgMHhiOSwgMHhjMywgMHg3NCwgMHg5YSwgMHg1ZiwgMHgxYywgMHgxNywKLQkJCSAgICAweGQ0LCAweGY1LCAweDg5LCAweDY2LCAweDhhLCAweDU4LCAweDdiLCAweDI3LAotCQkJICAgIDB4MDAsIDB4YTksIDB4YzksIDB4N2MsIDB4MTEsIDB4OTMsIDB4Y2YsIDB4NDIgfSwKKwkJLmRpZ2VzdAk9ICJceDc1XHg0Nlx4YWZceDAxXHg4NFx4MWZceGMwXHg5YiIKKwkJCSAgIlx4MWFceGI5XHhjM1x4NzRceDlhXHg1Zlx4MWNceDE3IgorCQkJICAiXHhkNFx4ZjVceDg5XHg2Nlx4OGFceDU4XHg3Ylx4MjciCisJCQkgICJceDAwXHhhOVx4YzlceDdjXHgxMVx4OTNceGNmXHg0MiIsCiAJfSwgewotCQkua2V5CT0geyBbMCAuLi4gNzldID0gMHhhYSB9LAorCQkua2V5CT0gIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhIiwKIAkJLmtzaXplCT0gODAsCiAJCS5wbGFpbnRleHQgPSAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKIAkJLnBzaXplCT0gNTQsCi0JCS5kaWdlc3QJPSB7IDB4NjksIDB4NTMsIDB4MDIsIDB4NWUsIDB4ZDksIDB4NmYsIDB4MGMsIDB4MDksCi0JCQkgICAgMHhmOCwgMHgwYSwgMHg5NiwgMHhmNywgMHg4ZSwgMHg2NSwgMHgzOCwgMHhkYiwKLQkJCSAgICAweGUyLCAweGU3LCAweGI4LCAweDIwLCAweGUzLCAweGRkLCAweDk3LCAweDBlLAotCQkJICAgIDB4N2QsIDB4ZGQsIDB4MzksIDB4MDksIDB4MWIsIDB4MzIsIDB4MzUsIDB4MmYgfSwKKwkJLmRpZ2VzdAk9ICJceDY5XHg1M1x4MDJceDVlXHhkOVx4NmZceDBjXHgwOSIKKwkJCSAgIlx4ZjhceDBhXHg5Nlx4ZjdceDhlXHg2NVx4MzhceGRiIgorCQkJICAiXHhlMlx4ZTdceGI4XHgyMFx4ZTNceGRkXHg5N1x4MGUiCisJCQkgICJceDdkXHhkZFx4MzlceDA5XHgxYlx4MzJceDM1XHgyZiIsCiAJfSwgewotCQkua2V5CT0geyBbMCAuLi4gNzldID0gMHhhYSB9LAorCQkua2V5CT0gIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJIlx4YWFceGFhIiwKIAkJLmtzaXplCT0gODAsCiAJCS5wbGFpbnRleHQgPSAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSBhbmQgTGFyZ2VyIFRoYW4gIgotCQkJICAgICAiT25lIEJsb2NrLVNpemUgRGF0YSIsCisJCQkgICAiT25lIEJsb2NrLVNpemUgRGF0YSIsCiAJCS5wc2l6ZQk9IDczLAotCQkuZGlnZXN0CT0geyAweDYzLCAweDU1LCAweGFjLCAweDIyLCAweGU4LCAweDkwLCAweGQwLCAweGEzLAotCQkJICAgIDB4YzgsIDB4NDgsIDB4MWEsIDB4NWMsIDB4YTQsIDB4ODIsIDB4NWIsIDB4YzgsCi0JCQkgICAgMHg4NCwgMHhkMywgMHhlNywgMHhhMSwgMHhmZiwgMHg5OCwgMHhhMiwgMHhmYywKLQkJCSAgICAweDJhLCAweGM3LCAweGQ4LCAweGUwLCAweDY0LCAweGMzLCAweGIyLCAweGU2IH0sCisJCS5kaWdlc3QJPSAiXHg2M1x4NTVceGFjXHgyMlx4ZThceDkwXHhkMFx4YTMiCisJCQkgICJceGM4XHg0OFx4MWFceDVjXHhhNFx4ODJceDViXHhjOCIKKwkJCSAgIlx4ODRceGQzXHhlN1x4YTFceGZmXHg5OFx4YTJceGZjIgorCQkJICAiXHgyYVx4YzdceGQ4XHhlMFx4NjRceGMzXHhiMlx4ZTYiLAogCX0sCiB9OwogCkBAIC0xMTAxLDYzICsxMTU4LDYzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGFzaF90ZXN0dmVjIGFlc194Y2JjMTI4X3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKLQkJLnBsYWludGV4dCA9IHsgWzAgLi4uIDE1XSA9IDAgfSwKLQkJLmRpZ2VzdCA9IHsgMHg3NSwgMHhmMCwgMHgyNSwgMHgxZCwgMHg1MiwgMHg4YSwgMHhjMCwgMHgxYywKLQkJCSAgICAweDQ1LCAweDczLCAweGRmLCAweGQ1LCAweDg0LCAweGQ3LCAweDlmLCAweDI5IH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisJCS5wbGFpbnRleHQgPSB6ZXJvZWRfc3RyaW5nLAorCQkuZGlnZXN0ID0gIlx4NzVceGYwXHgyNVx4MWRceDUyXHg4YVx4YzBceDFjIgorCQkJICAiXHg0NVx4NzNceGRmXHhkNVx4ODRceGQ3XHg5Zlx4MjkiLAogCQkucHNpemUJPSAwLAogCQkua3NpemUJPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAotCQkucGxhaW50ZXh0ID0geyAweDAwLCAweDAxLCAweDAyIH0sCi0JCS5kaWdlc3QJPSB7IDB4NWIsIDB4MzcsIDB4NjUsIDB4ODAsIDB4YWUsIDB4MmYsIDB4MTksIDB4YWYsCi0JCQkgICAgMHhlNywgMHgyMSwgMHg5YywgMHhlZSwgMHhmMSwgMHg3MiwgMHg3NSwgMHg2ZiB9LAorCQkua2V5CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorCQkucGxhaW50ZXh0ID0gIlx4MDBceDAxXHgwMiIsCisJCS5kaWdlc3QJPSAiXHg1Ylx4MzdceDY1XHg4MFx4YWVceDJmXHgxOVx4YWYiCisJCQkgICJceGU3XHgyMVx4OWNceGVlXHhmMVx4NzJceDc1XHg2ZiIsCiAJCS5wc2l6ZQk9IDMsCiAJCS5rc2l6ZQk9IDE2LAogCX0gLCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAotCQkucGxhaW50ZXh0ID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKLQkJLmRpZ2VzdCA9IHsgMHhkMiwgMHhhMiwgMHg0NiwgMHhmYSwgMHgzNCwgMHg5YiwgMHg2OCwgMHhhNywKLQkJCSAgICAweDk5LCAweDk4LCAweGE0LCAweDM5LCAweDRmLCAweGY3LCAweGEyLCAweDYzIH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisJCS5wbGFpbnRleHQgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICAgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisJCS5kaWdlc3QgPSAiXHhkMlx4YTJceDQ2XHhmYVx4MzRceDliXHg2OFx4YTciCisJCQkgICJceDk5XHg5OFx4YTRceDM5XHg0Zlx4ZjdceGEyXHg2MyIsCiAJCS5wc2l6ZQk9IDE2LAogCQkua3NpemUJPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAotCQkucGxhaW50ZXh0ID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMyB9LAotCQkuZGlnZXN0ID0geyAweDQ3LCAweGY1LCAweDFiLCAweDQ1LCAweDY0LCAweDk2LCAweDYyLCAweDE1LAotCQkJICAgIDB4YjgsIDB4OTgsIDB4NWMsIDB4NjMsIDB4MDUsIDB4NWUsIDB4ZDMsIDB4MDggfSwKKwkJLmtleQk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKKwkJLnBsYWludGV4dCA9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgICAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAgICAiXHgxMFx4MTFceDEyXHgxMyIsCisJCS5kaWdlc3QgPSAiXHg0N1x4ZjVceDFiXHg0NVx4NjRceDk2XHg2Mlx4MTUiCisJCQkgICJceGI4XHg5OFx4NWNceDYzXHgwNVx4NWVceGQzXHgwOCIsCiAJCS50YXAJPSB7IDEwLCAxMCB9LAogCQkucHNpemUJPSAyMCwKIAkJLm5wCT0gMiwKIAkJLmtzaXplCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKLQkJLnBsYWludGV4dCA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAotCQkuZGlnZXN0ID0geyAweGY1LCAweDRmLCAweDBlLCAweGM4LCAweGQyLCAweGI5LCAweGYzLCAweGQzLAotCQkJICAgIDB4NjgsIDB4MDcsIDB4NzMsIDB4NGIsIDB4ZDUsIDB4MjgsIDB4M2YsIDB4ZDQgfSwKKwkJLmtleQk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKKwkJLnBsYWludGV4dCA9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgICAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICAgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIsCisJCS5kaWdlc3QgPSAiXHhmNVx4NGZceDBlXHhjOFx4ZDJceGI5XHhmM1x4ZDMiCisJCQkgICJceDY4XHgwN1x4NzNceDRiXHhkNVx4MjhceDNmXHhkNCIsCiAJCS5wc2l6ZQk9IDMyLAogCQkua3NpemUJPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAotCQkucGxhaW50ZXh0ID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAotCQkJICAgICAgIDB4MjAsIDB4MjEgfSwKLQkJLmRpZ2VzdCA9IHsgMHhiZSwgMHhjYiwgMHhiMywgMHhiYywgMHhjZCwgMHhiNSwgMHgxOCwgMHhhMywKLQkJCSAgICAweDA2LCAweDc3LCAweGQ1LCAweDQ4LCAweDFmLCAweGI2LCAweGI0LCAweGQ4IH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisJCS5wbGFpbnRleHQgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICAgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgICAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAgICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiCisJCQkgICAgICJceDIwXHgyMSIsCisJCS5kaWdlc3QgPSAiXHhiZVx4Y2JceGIzXHhiY1x4Y2RceGI1XHgxOFx4YTMiCisJCQkgICJceDA2XHg3N1x4ZDVceDQ4XHgxZlx4YjZceGI0XHhkOCIsCiAJCS50YXAJPSB7IDE3LCAxNyB9LAogCQkucHNpemUJPSAzNCwKIAkJLm5wCT0gMiwKQEAgLTExNzMsMTEyICsxMjMwLDk1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGFzaF90ZXN0dmVjIGhtYWNfc2hhMzg0X3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5CT0geyAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAotCQkJICAgIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCi0JCQkgICAgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiB9LCAvLyAoMjAgYnl0ZXMpCisJCS5rZXkJPSAiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiCisJCQkgICJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKwkJCSAgIlx4MGJceDBiXHgwYlx4MGIiLAogCQkua3NpemUJPSAyMCwKLQkJLnBsYWludGV4dCA9IHsgMHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NSB9LCAvLyAoIkhpIFRoZXJlIikKKwkJLnBsYWludGV4dCA9ICJIaSBUaGVyZSIsCiAJCS5wc2l6ZQk9IDgsCi0JCS5kaWdlc3QJPSB7IDB4YWYsIDB4ZDAsIDB4MzksIDB4NDQsIDB4ZDgsIDB4NDgsIDB4OTUsIDB4NjIsCi0JCQkgICAgMHg2YiwgMHgwOCwgMHgyNSwgMHhmNCwgMHhhYiwgMHg0NiwgMHg5MCwgMHg3ZiwKLQkJCSAgICAweDE1LCAweGY5LCAweGRhLCAweGRiLCAweGU0LCAweDEwLCAweDFlLCAweGM2LAotCQkJICAgIDB4ODIsIDB4YWEsIDB4MDMsIDB4NGMsIDB4N2MsIDB4ZWIsIDB4YzUsIDB4OWMsCi0JCQkgICAgMHhmYSwgMHhlYSwgMHg5ZSwgMHhhOSwgMHgwNywgMHg2ZSwgMHhkZSwgMHg3ZiwKLQkJCSAgICAweDRhLCAweGYxLCAweDUyLCAweGU4LCAweGIyLCAweGZhLCAweDljLCAweGI2IH0sCisJCS5kaWdlc3QJPSAiXHhhZlx4ZDBceDM5XHg0NFx4ZDhceDQ4XHg5NVx4NjIiCisJCQkgICJceDZiXHgwOFx4MjVceGY0XHhhYlx4NDZceDkwXHg3ZiIKKwkJCSAgIlx4MTVceGY5XHhkYVx4ZGJceGU0XHgxMFx4MWVceGM2IgorCQkJICAiXHg4Mlx4YWFceDAzXHg0Y1x4N2NceGViXHhjNVx4OWMiCisJCQkgICJceGZhXHhlYVx4OWVceGE5XHgwN1x4NmVceGRlXHg3ZiIKKwkJCSAgIlx4NGFceGYxXHg1Mlx4ZThceGIyXHhmYVx4OWNceGI2IiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4NGEsIDB4NjUsIDB4NjYsIDB4NjUgfSwgLy8gKCJKZWZlIikKKwkJLmtleQk9ICJKZWZlIiwKIAkJLmtzaXplCT0gNCwKLQkJLnBsYWludGV4dCA9IHsgMHg3NywgMHg2OCwgMHg2MSwgMHg3NCwgMHgyMCwgMHg2NCwgMHg2ZiwgMHgyMCwKLQkJCSAgICAgICAweDc5LCAweDYxLCAweDIwLCAweDc3LCAweDYxLCAweDZlLCAweDc0LCAweDIwLCAvLyAoIndoYXQgZG8geWEgd2FudCAiKQotCQkJICAgICAgIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NmUsIDB4NmYsIDB4NzQsIDB4NjgsCi0JCQkgICAgICAgMHg2OSwgMHg2ZSwgMHg2NywgMHgzZiB9LCAvLyAoImZvciBub3RoaW5nPyIpCisJCS5wbGFpbnRleHQgPSAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsCiAJCS5wc2l6ZQk9IDI4LAotCQkuZGlnZXN0CT0geyAweGFmLCAweDQ1LCAweGQyLCAweGUzLCAweDc2LCAweDQ4LCAweDQwLCAweDMxLAotCQkJICAgIDB4NjEsIDB4N2YsIDB4NzgsIDB4ZDIsIDB4YjUsIDB4OGEsIDB4NmIsIDB4MWIsCi0JCQkgICAgMHg5YywgMHg3ZSwgMHhmNCwgMHg2NCwgMHhmNSwgMHhhMCwgMHgxYiwgMHg0NywKLQkJCSAgICAweGU0LCAweDJlLCAweGMzLCAweDczLCAweDYzLCAweDIyLCAweDQ0LCAweDVlLAotCQkJICAgIDB4OGUsIDB4MjIsIDB4NDAsIDB4Y2EsIDB4NWUsIDB4NjksIDB4ZTIsIDB4YzcsCi0JCQkgICAgMHg4YiwgMHgzMiwgMHgzOSwgMHhlYywgMHhmYSwgMHhiMiwgMHgxNiwgMHg0OSB9LAorCQkuZGlnZXN0CT0gIlx4YWZceDQ1XHhkMlx4ZTNceDc2XHg0OFx4NDBceDMxIgorCQkJICAiXHg2MVx4N2ZceDc4XHhkMlx4YjVceDhhXHg2Ylx4MWIiCisJCQkgICJceDljXHg3ZVx4ZjRceDY0XHhmNVx4YTBceDFiXHg0NyIKKwkJCSAgIlx4ZTRceDJlXHhjM1x4NzNceDYzXHgyMlx4NDRceDVlIgorCQkJICAiXHg4ZVx4MjJceDQwXHhjYVx4NWVceDY5XHhlMlx4YzciCisJCQkgICJceDhiXHgzMlx4MzlceGVjXHhmYVx4YjJceDE2XHg0OSIsCiAJCS5ucAk9IDQsCiAJCS50YXAJPSB7IDcsIDcsIDcsIDcgfQogCX0sIHsKLQkJLmtleQk9IHsgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhIH0sIC8vICgxMzEgYnl0ZXMpCisJCS5rZXkJPSAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWEiLAogCQkua3NpemUJPSAxMzEsCi0JCS5wbGFpbnRleHQgPSB7IDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NTUsIDB4NzMsIDB4NjksCi0JCQkgICAgICAgMHg2ZSwgMHg2NywgMHgyMCwgMHg0YywgMHg2MSwgMHg3MiwgMHg2NywgMHg2NSwgLy8gKCJUZXN0IFVzaW5nIExhcmdlIikKLQkJCSAgICAgICAweDcyLCAweDIwLCAweDU0LCAweDY4LCAweDYxLCAweDZlLCAweDIwLCAweDQyLAotCQkJICAgICAgIDB4NmMsIDB4NmYsIDB4NjMsIDB4NmIsIDB4MmQsIDB4NTMsIDB4NjksIDB4N2EsIC8vICgiciBUaGFuIEJsb2NrLVNpeiIpCi0JCQkgICAgICAgMHg2NSwgMHgyMCwgMHg0YiwgMHg2NSwgMHg3OSwgMHgyMCwgMHgyZCwgMHgyMCwKLQkJCSAgICAgICAweDQ4LCAweDYxLCAweDczLCAweDY4LCAweDIwLCAweDRiLCAweDY1LCAweDc5LCAvLyAoImUgS2V5IC0gSGFzaCBLZXkiKQotCQkJICAgICAgIDB4MjAsIDB4NDYsIDB4NjksIDB4NzIsIDB4NzMsIDB4NzQgfSwgLy8gKCIgRmlyc3QiKQorCQkucGxhaW50ZXh0ID0gIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6IgorCQkJICAgImUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiLAogCQkucHNpemUJPSA1NCwKLQkJLmRpZ2VzdAk9IHsgMHg0ZSwgMHhjZSwgMHgwOCwgMHg0NCwgMHg4NSwgMHg4MSwgMHgzZSwgMHg5MCwKLQkJCSAgICAweDg4LCAweGQyLCAweGM2LCAweDNhLCAweDA0LCAweDFiLCAweGM1LCAweGI0LAotCQkJICAgIDB4NGYsIDB4OWUsIDB4ZjEsIDB4MDEsIDB4MmEsIDB4MmIsIDB4NTgsIDB4OGYsCi0JCQkgICAgMHgzYywgMHhkMSwgMHgxZiwgMHgwNSwgMHgwMywgMHgzYSwgMHhjNCwgMHhjNiwKLQkJCSAgICAweDBjLCAweDJlLCAweGY2LCAweGFiLCAweDQwLCAweDMwLCAweGZlLCAweDgyLAotCQkJICAgIDB4OTYsIDB4MjQsIDB4OGQsIDB4ZjEsIDB4NjMsIDB4ZjQsIDB4NDksIDB4NTIgfSwKKwkJLmRpZ2VzdAk9ICJceDRlXHhjZVx4MDhceDQ0XHg4NVx4ODFceDNlXHg5MCIKKwkJCSAgIlx4ODhceGQyXHhjNlx4M2FceDA0XHgxYlx4YzVceGI0IgorCQkJICAiXHg0Zlx4OWVceGYxXHgwMVx4MmFceDJiXHg1OFx4OGYiCisJCQkgICJceDNjXHhkMVx4MWZceDA1XHgwM1x4M2FceGM0XHhjNiIKKwkJCSAgIlx4MGNceDJlXHhmNlx4YWJceDQwXHgzMFx4ZmVceDgyIgorCQkJICAiXHg5Nlx4MjRceDhkXHhmMVx4NjNceGY0XHg0OVx4NTIiLAogCX0sIHsKLQkJLmtleQk9IHsgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhIH0sIC8vICgxMzEgYnl0ZXMpCisJCS5rZXkJPSAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWEiLAogCQkua3NpemUJPSAxMzEsCi0JCS5wbGFpbnRleHQgPSB7IDB4NTQsIDB4NjgsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsCi0JCQkgICAgICAgMHg2MSwgMHgyMCwgMHg3NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgyMCwgMHg3NSwgLy8gKCJUaGlzIGlzIGEgdGVzdCB1IikKLQkJCSAgICAgICAweDczLCAweDY5LCAweDZlLCAweDY3LCAweDIwLCAweDYxLCAweDIwLCAweDZjLAotCQkJICAgICAgIDB4NjEsIDB4NzIsIDB4NjcsIDB4NjUsIDB4NzIsIDB4MjAsIDB4NzQsIDB4NjgsIC8vICgic2luZyBhIGxhcmdlciB0aCIpCi0JCQkgICAgICAgMHg2MSwgMHg2ZSwgMHgyMCwgMHg2MiwgMHg2YywgMHg2ZiwgMHg2MywgMHg2YiwKLQkJCSAgICAgICAweDJkLCAweDczLCAweDY5LCAweDdhLCAweDY1LCAweDIwLCAweDZiLCAweDY1LCAvLyAoImFuIGJsb2NrLXNpemUga2UiKQotCQkJICAgICAgIDB4NzksIDB4MjAsIDB4NjEsIDB4NmUsIDB4NjQsIDB4MjAsIDB4NjEsIDB4MjAsCi0JCQkgICAgICAgMHg2YywgMHg2MSwgMHg3MiwgMHg2NywgMHg2NSwgMHg3MiwgMHgyMCwgMHg3NCwgLy8gKCJ5IGFuZCBhIGxhcmdlciB0IikKLQkJCSAgICAgICAweDY4LCAweDYxLCAweDZlLCAweDIwLCAweDYyLCAweDZjLCAweDZmLCAweDYzLAotCQkJICAgICAgIDB4NmIsIDB4MmQsIDB4NzMsIDB4NjksIDB4N2EsIDB4NjUsIDB4MjAsIDB4NjQsIC8vICgiaGFuIGJsb2NrLXNpemUgZCIpCi0JCQkgICAgICAgMHg2MSwgMHg3NCwgMHg2MSwgMHgyZSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwKLQkJCSAgICAgICAweDIwLCAweDZiLCAweDY1LCAweDc5LCAweDIwLCAweDZlLCAweDY1LCAweDY1LCAvLyAoImF0YS4gVGhlIGtleSBuZWUiKQotCQkJICAgICAgIDB4NjQsIDB4NzMsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NjIsIDB4NjUsCi0JCQkgICAgICAgMHgyMCwgMHg2OCwgMHg2MSwgMHg3MywgMHg2OCwgMHg2NSwgMHg2NCwgMHgyMCwgLy8gKCJkcyB0byBiZSBoYXNoZWQgIikKLQkJCSAgICAgICAweDYyLCAweDY1LCAweDY2LCAweDZmLCAweDcyLCAweDY1LCAweDIwLCAweDYyLAotCQkJICAgICAgIDB4NjUsIDB4NjksIDB4NmUsIDB4NjcsIDB4MjAsIDB4NzUsIDB4NzMsIDB4NjUsIC8vICgiYmVmb3JlIGJlaW5nIHVzZSIpCi0JCQkgICAgICAgMHg2NCwgMHgyMCwgMHg2MiwgMHg3OSwgMHgyMCwgMHg3NCwgMHg2OCwgMHg2NSwKLQkJCSAgICAgICAweDIwLCAweDQ4LCAweDRkLCAweDQxLCAweDQzLCAweDIwLCAweDYxLCAweDZjLCAvLyAoImQgYnkgdGhlIEhNQUMgYWwiKQotCQkJICAgICAgIDB4NjcsIDB4NmYsIDB4NzIsIDB4NjksIDB4NzQsIDB4NjgsIDB4NmQsIDB4MmUgfSwgLy8gKCJnb3JpdGhtLiIpCisJCS5wbGFpbnRleHQgPSAiVGhpcyBpcyBhIHRlc3QgdSIKKwkJCSAgICJzaW5nIGEgbGFyZ2VyIHRoIgorCQkJICAgImFuIGJsb2NrLXNpemUga2UiCisJCQkgICAieSBhbmQgYSBsYXJnZXIgdCIKKwkJCSAgICJoYW4gYmxvY2stc2l6ZSBkIgorCQkJICAgImF0YS4gVGhlIGtleSBuZWUiCisJCQkgICAiZHMgdG8gYmUgaGFzaGVkICIKKwkJCSAgICJiZWZvcmUgYmVpbmcgdXNlIgorCQkJICAgImQgYnkgdGhlIEhNQUMgYWwiCisJCQkgICAiZ29yaXRobS4iLAogCQkucHNpemUJPSAxNTIsCi0JCS5kaWdlc3QJPSB7IDB4NjYsIDB4MTcsIDB4MTcsIDB4OGUsIDB4OTQsIDB4MWYsIDB4MDIsIDB4MGQsCi0JCQkgICAgMHgzNSwgMHgxZSwgMHgyZiwgMHgyNSwgMHg0ZSwgMHg4ZiwgMHhkMywgMHgyYywKLQkJCSAgICAweDYwLCAweDI0LCAweDIwLCAweGZlLCAweGIwLCAweGI4LCAweGZiLCAweDlhLAotCQkJICAgIDB4ZGMsIDB4Y2UsIDB4YmIsIDB4ODIsIDB4NDYsIDB4MWUsIDB4OTksIDB4YzUsCi0JCQkgICAgMHhhNiwgMHg3OCwgMHhjYywgMHgzMSwgMHhlNywgMHg5OSwgMHgxNywgMHg2ZCwKLQkJCSAgICAweDM4LCAweDYwLCAweGU2LCAweDExLCAweDBjLCAweDQ2LCAweDUyLCAweDNlIH0sCisJCS5kaWdlc3QJPSAiXHg2Nlx4MTdceDE3XHg4ZVx4OTRceDFmXHgwMlx4MGQiCisJCQkgICJceDM1XHgxZVx4MmZceDI1XHg0ZVx4OGZceGQzXHgyYyIKKwkJCSAgIlx4NjBceDI0XHgyMFx4ZmVceGIwXHhiOFx4ZmJceDlhIgorCQkJICAiXHhkY1x4Y2VceGJiXHg4Mlx4NDZceDFlXHg5OVx4YzUiCisJCQkgICJceGE2XHg3OFx4Y2NceDMxXHhlN1x4OTlceDE3XHg2ZCIKKwkJCSAgIlx4MzhceDYwXHhlNlx4MTFceDBjXHg0Nlx4NTJceDNlIiwKIAl9LAogfTsKIApAQCAtMTI5MCwxMjAgKzEzMzAsMTA2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGFzaF90ZXN0dmVjIGhtYWNfc2hhNTEyX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5CT0geyAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLCAweDBiLAotCQkJICAgIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsCi0JCQkgICAgMHgwYiwgMHgwYiwgMHgwYiwgMHgwYiB9LCAvLyAoMjAgYnl0ZXMpCisJCS5rZXkJPSAiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiCisJCQkgICJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYiIKKwkJCSAgIlx4MGJceDBiXHgwYlx4MGIiLAogCQkua3NpemUJPSAyMCwKLQkJLnBsYWludGV4dCA9IHsgMHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NSB9LCAvLyAoIkhpIFRoZXJlIikKKwkJLnBsYWludGV4dCA9ICJIaSBUaGVyZSIsCiAJCS5wc2l6ZQk9IDgsCi0JCS5kaWdlc3QJPSB7IDB4ODcsIDB4YWEsIDB4N2MsIDB4ZGUsIDB4YTUsIDB4ZWYsIDB4NjEsIDB4OWQsCi0JCQkgICAgMHg0ZiwgMHhmMCwgMHhiNCwgMHgyNCwgMHgxYSwgMHgxZCwgMHg2YywgMHhiMCwKLQkJCSAgICAweDIzLCAweDc5LCAweGY0LCAweGUyLCAweGNlLCAweDRlLCAweGMyLCAweDc4LAotCQkJICAgIDB4N2EsIDB4ZDAsIDB4YjMsIDB4MDUsIDB4NDUsIDB4ZTEsIDB4N2MsIDB4ZGUsCi0JCQkgICAgMHhkYSwgMHhhOCwgMHgzMywgMHhiNywgMHhkNiwgMHhiOCwgMHhhNywgMHgwMiwKLQkJCSAgICAweDAzLCAweDhiLCAweDI3LCAweDRlLCAweGFlLCAweGEzLCAweGY0LCAweGU0LAotCQkJICAgIDB4YmUsIDB4OWQsIDB4OTEsIDB4NGUsIDB4ZWIsIDB4NjEsIDB4ZjEsIDB4NzAsCi0JCQkgICAgMHgyZSwgMHg2OSwgMHg2YywgMHgyMCwgMHgzYSwgMHgxMiwgMHg2OCwgMHg1NCB9LAorCQkuZGlnZXN0CT0gIlx4ODdceGFhXHg3Y1x4ZGVceGE1XHhlZlx4NjFceDlkIgorCQkJICAiXHg0Zlx4ZjBceGI0XHgyNFx4MWFceDFkXHg2Y1x4YjAiCisJCQkgICJceDIzXHg3OVx4ZjRceGUyXHhjZVx4NGVceGMyXHg3OCIKKwkJCSAgIlx4N2FceGQwXHhiM1x4MDVceDQ1XHhlMVx4N2NceGRlIgorCQkJICAiXHhkYVx4YThceDMzXHhiN1x4ZDZceGI4XHhhN1x4MDIiCisJCQkgICJceDAzXHg4Ylx4MjdceDRlXHhhZVx4YTNceGY0XHhlNCIKKwkJCSAgIlx4YmVceDlkXHg5MVx4NGVceGViXHg2MVx4ZjFceDcwIgorCQkJICAiXHgyZVx4NjlceDZjXHgyMFx4M2FceDEyXHg2OFx4NTQiLAogCX0sIHsKLQkJLmtleQk9IHsgMHg0YSwgMHg2NSwgMHg2NiwgMHg2NSB9LCAvLyAoIkplZmUiKQorCQkua2V5CT0gIkplZmUiLAogCQkua3NpemUJPSA0LAotCQkucGxhaW50ZXh0ID0geyAweDc3LCAweDY4LCAweDYxLCAweDc0LCAweDIwLCAweDY0LCAweDZmLCAweDIwLAotCQkJICAgICAgIDB4NzksIDB4NjEsIDB4MjAsIDB4NzcsIDB4NjEsIDB4NmUsIDB4NzQsIDB4MjAsIC8vICgid2hhdCBkbyB5YSB3YW50ICIpCi0JCQkgICAgICAgMHg2NiwgMHg2ZiwgMHg3MiwgMHgyMCwgMHg2ZSwgMHg2ZiwgMHg3NCwgMHg2OCwKLQkJCSAgICAgICAweDY5LCAweDZlLCAweDY3LCAweDNmIH0sIC8vICgiZm9yIG5vdGhpbmc/IikKKwkJLnBsYWludGV4dCA9ICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwKIAkJLnBzaXplCT0gMjgsCi0JCS5kaWdlc3QJPSB7IDB4MTYsIDB4NGIsIDB4N2EsIDB4N2IsIDB4ZmMsIDB4ZjgsIDB4MTksIDB4ZTIsCi0JCQkgICAgMHhlMywgMHg5NSwgMHhmYiwgMHhlNywgMHgzYiwgMHg1NiwgMHhlMCwgMHhhMywKLQkJCSAgICAweDg3LCAweGJkLCAweDY0LCAweDIyLCAweDJlLCAweDgzLCAweDFmLCAweGQ2LAotCQkJICAgIDB4MTAsIDB4MjcsIDB4MGMsIDB4ZDcsIDB4ZWEsIDB4MjUsIDB4MDUsIDB4NTQsCi0JCQkgICAgMHg5NywgMHg1OCwgMHhiZiwgMHg3NSwgMHhjMCwgMHg1YSwgMHg5OSwgMHg0YSwKLQkJCSAgICAweDZkLCAweDAzLCAweDRmLCAweDY1LCAweGY4LCAweGYwLCAweGU2LCAweGZkLAotCQkJICAgIDB4Y2EsIDB4ZWEsIDB4YjEsIDB4YTMsIDB4NGQsIDB4NGEsIDB4NmIsIDB4NGIsCi0JCQkgICAgMHg2MywgMHg2ZSwgMHgwNywgMHgwYSwgMHgzOCwgMHhiYywgMHhlNywgMHgzNyB9LAorCQkuZGlnZXN0CT0gIlx4MTZceDRiXHg3YVx4N2JceGZjXHhmOFx4MTlceGUyIgorCQkJICAiXHhlM1x4OTVceGZiXHhlN1x4M2JceDU2XHhlMFx4YTMiCisJCQkgICJceDg3XHhiZFx4NjRceDIyXHgyZVx4ODNceDFmXHhkNiIKKwkJCSAgIlx4MTBceDI3XHgwY1x4ZDdceGVhXHgyNVx4MDVceDU0IgorCQkJICAiXHg5N1x4NThceGJmXHg3NVx4YzBceDVhXHg5OVx4NGEiCisJCQkgICJceDZkXHgwM1x4NGZceDY1XHhmOFx4ZjBceGU2XHhmZCIKKwkJCSAgIlx4Y2FceGVhXHhiMVx4YTNceDRkXHg0YVx4NmJceDRiIgorCQkJICAiXHg2M1x4NmVceDA3XHgwYVx4MzhceGJjXHhlN1x4MzciLAogCQkubnAJPSA0LAogCQkudGFwCT0geyA3LCA3LCA3LCA3IH0KIAl9LCB7Ci0JCS5rZXkJPSB7IDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSB9LCAvLyAoMTMxIGJ5dGVzKQorCQkua2V5CT0gIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkgICJceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYSIKKwkJCSAgIlx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhIgorCQkJICAiXHhhYVx4YWFceGFhIiwKIAkJLmtzaXplCT0gMTMxLAotCQkucGxhaW50ZXh0ID0geyAweDU0LCAweDY1LCAweDczLCAweDc0LCAweDIwLCAweDU1LCAweDczLCAweDY5LAotCQkJICAgICAgIDB4NmUsIDB4NjcsIDB4MjAsIDB4NGMsIDB4NjEsIDB4NzIsIDB4NjcsIDB4NjUsIC8vICgiVGVzdCBVc2luZyBMYXJnZSIpCi0JCQkgICAgICAgMHg3MiwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2MSwgMHg2ZSwgMHgyMCwgMHg0MiwKLQkJCSAgICAgICAweDZjLCAweDZmLCAweDYzLCAweDZiLCAweDJkLCAweDUzLCAweDY5LCAweDdhLCAvLyAoInIgVGhhbiBCbG9jay1TaXoiKQotCQkJICAgICAgIDB4NjUsIDB4MjAsIDB4NGIsIDB4NjUsIDB4NzksIDB4MjAsIDB4MmQsIDB4MjAsCi0JCQkgICAgICAgMHg0OCwgMHg2MSwgMHg3MywgMHg2OCwgMHgyMCwgMHg0YiwgMHg2NSwgMHg3OSwgLy8gKCJlIEtleSAtIEhhc2ggS2V5IikKLQkJCSAgICAgICAweDIwLCAweDQ2LCAweDY5LCAweDcyLCAweDczLCAweDc0IH0sIC8vICgiIEZpcnN0IikKKwkJLnBsYWludGV4dCA9ICJUZXN0IFVzaW5nIExhcmdlIgorCQkJICAgInIgVGhhbiBCbG9jay1TaXoiCisJCQkgICAiZSBLZXkgLSBIYXNoIEtleSIKKwkJCSAgICIgRmlyc3QiLAogCQkucHNpemUJPSA1NCwKLQkJLmRpZ2VzdAk9IHsgMHg4MCwgMHhiMiwgMHg0MiwgMHg2MywgMHhjNywgMHhjMSwgMHhhMywgMHhlYiwKLQkJCSAgICAweGI3LCAweDE0LCAweDkzLCAweGMxLCAweGRkLCAweDdiLCAweGU4LCAweGI0LAotCQkJICAgIDB4OWIsIDB4NDYsIDB4ZDEsIDB4ZjQsIDB4MWIsIDB4NGEsIDB4ZWUsIDB4YzEsCi0JCQkgICAgMHgxMiwgMHgxYiwgMHgwMSwgMHgzNywgMHg4MywgMHhmOCwgMHhmMywgMHg1MiwKLQkJCSAgICAweDZiLCAweDU2LCAweGQwLCAweDM3LCAweGUwLCAweDVmLCAweDI1LCAweDk4LAotCQkJICAgIDB4YmQsIDB4MGYsIDB4ZDIsIDB4MjEsIDB4NWQsIDB4NmEsIDB4MWUsIDB4NTIsCi0JCQkgICAgMHg5NSwgMHhlNiwgMHg0ZiwgMHg3MywgMHhmNiwgMHgzZiwgMHgwYSwgMHhlYywKLQkJCSAgICAweDhiLCAweDkxLCAweDVhLCAweDk4LCAweDVkLCAweDc4LCAweDY1LCAweDk4IH0sCisJCS5kaWdlc3QJPSAiXHg4MFx4YjJceDQyXHg2M1x4YzdceGMxXHhhM1x4ZWIiCisJCQkiXHhiN1x4MTRceDkzXHhjMVx4ZGRceDdiXHhlOFx4YjQiCisJCQkiXHg5Ylx4NDZceGQxXHhmNFx4MWJceDRhXHhlZVx4YzEiCisJCQkiXHgxMlx4MWJceDAxXHgzN1x4ODNceGY4XHhmM1x4NTIiCisJCQkiXHg2Ylx4NTZceGQwXHgzN1x4ZTBceDVmXHgyNVx4OTgiCisJCQkiXHhiZFx4MGZceGQyXHgyMVx4NWRceDZhXHgxZVx4NTIiCisJCQkiXHg5NVx4ZTZceDRmXHg3M1x4ZjZceDNmXHgwYVx4ZWMiCisJCQkiXHg4Ylx4OTFceDVhXHg5OFx4NWRceDc4XHg2NVx4OTgiLAogCX0sIHsKLQkJLmtleQk9IHsgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAotCQkJICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCi0JCQkgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLQkJCSAgICAweGFhLCAweGFhLCAweGFhIH0sIC8vICgxMzEgYnl0ZXMpCisJCS5rZXkJPSAiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhXHhhYVx4YWFceGFhXHhhYVx4YWEiCisJCQkiXHhhYVx4YWFceGFhIiwKIAkJLmtzaXplCT0gMTMxLAotCQkucGxhaW50ZXh0ID0geyAweDU0LCAweDY4LCAweDY5LCAweDczLCAweDIwLCAweDY5LCAweDczLCAweDIwLAotCQkJICAgICAgIDB4NjEsIDB4MjAsIDB4NzQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NzUsIC8vICgiVGhpcyBpcyBhIHRlc3QgdSIpCi0JCQkgICAgICAgMHg3MywgMHg2OSwgMHg2ZSwgMHg2NywgMHgyMCwgMHg2MSwgMHgyMCwgMHg2YywKLQkJCSAgICAgICAweDYxLCAweDcyLCAweDY3LCAweDY1LCAweDcyLCAweDIwLCAweDc0LCAweDY4LCAvLyAoInNpbmcgYSBsYXJnZXIgdGgiKQotCQkJICAgICAgIDB4NjEsIDB4NmUsIDB4MjAsIDB4NjIsIDB4NmMsIDB4NmYsIDB4NjMsIDB4NmIsCi0JCQkgICAgICAgMHgyZCwgMHg3MywgMHg2OSwgMHg3YSwgMHg2NSwgMHgyMCwgMHg2YiwgMHg2NSwgLy8gKCJhbiBibG9jay1zaXplIGtlIikKLQkJCSAgICAgICAweDc5LCAweDIwLCAweDYxLCAweDZlLCAweDY0LCAweDIwLCAweDYxLCAweDIwLAotCQkJICAgICAgIDB4NmMsIDB4NjEsIDB4NzIsIDB4NjcsIDB4NjUsIDB4NzIsIDB4MjAsIDB4NzQsIC8vICgieSBhbmQgYSBsYXJnZXIgdCIpCi0JCQkgICAgICAgMHg2OCwgMHg2MSwgMHg2ZSwgMHgyMCwgMHg2MiwgMHg2YywgMHg2ZiwgMHg2MywKLQkJCSAgICAgICAweDZiLCAweDJkLCAweDczLCAweDY5LCAweDdhLCAweDY1LCAweDIwLCAweDY0LCAvLyAoImhhbiBibG9jay1zaXplIGQiKQotCQkJICAgICAgIDB4NjEsIDB4NzQsIDB4NjEsIDB4MmUsIDB4MjAsIDB4NTQsIDB4NjgsIDB4NjUsCi0JCQkgICAgICAgMHgyMCwgMHg2YiwgMHg2NSwgMHg3OSwgMHgyMCwgMHg2ZSwgMHg2NSwgMHg2NSwgLy8gKCJhdGEuIFRoZSBrZXkgbmVlIikKLQkJCSAgICAgICAweDY0LCAweDczLCAweDIwLCAweDc0LCAweDZmLCAweDIwLCAweDYyLCAweDY1LAotCQkJICAgICAgIDB4MjAsIDB4NjgsIDB4NjEsIDB4NzMsIDB4NjgsIDB4NjUsIDB4NjQsIDB4MjAsIC8vICgiZHMgdG8gYmUgaGFzaGVkICIpCi0JCQkgICAgICAgMHg2MiwgMHg2NSwgMHg2NiwgMHg2ZiwgMHg3MiwgMHg2NSwgMHgyMCwgMHg2MiwKLQkJCSAgICAgICAweDY1LCAweDY5LCAweDZlLCAweDY3LCAweDIwLCAweDc1LCAweDczLCAweDY1LCAvLyAoImJlZm9yZSBiZWluZyB1c2UiKQotCQkJICAgICAgIDB4NjQsIDB4MjAsIDB4NjIsIDB4NzksIDB4MjAsIDB4NzQsIDB4NjgsIDB4NjUsCi0JCQkgICAgICAgMHgyMCwgMHg0OCwgMHg0ZCwgMHg0MSwgMHg0MywgMHgyMCwgMHg2MSwgMHg2YywgLy8gKCJkIGJ5IHRoZSBITUFDIGFsIikKLQkJCSAgICAgICAweDY3LCAweDZmLCAweDcyLCAweDY5LCAweDc0LCAweDY4LCAweDZkLCAweDJlIH0sIC8vICgiZ29yaXRobS4iKQorCQkucGxhaW50ZXh0ID0KKwkJCSAgIlRoaXMgaXMgYSB0ZXN0IHUiCisJCQkgICJzaW5nIGEgbGFyZ2VyIHRoIgorCQkJICAiYW4gYmxvY2stc2l6ZSBrZSIKKwkJCSAgInkgYW5kIGEgbGFyZ2VyIHQiCisJCQkgICJoYW4gYmxvY2stc2l6ZSBkIgorCQkJICAiYXRhLiBUaGUga2V5IG5lZSIKKwkJCSAgImRzIHRvIGJlIGhhc2hlZCAiCisJCQkgICJiZWZvcmUgYmVpbmcgdXNlIgorCQkJICAiZCBieSB0aGUgSE1BQyBhbCIKKwkJCSAgImdvcml0aG0uIiwKIAkJLnBzaXplCT0gMTUyLAotCQkuZGlnZXN0CT0geyAweGUzLCAweDdiLCAweDZhLCAweDc3LCAweDVkLCAweGM4LCAweDdkLCAweGJhLAotCQkJICAgIDB4YTQsIDB4ZGYsIDB4YTksIDB4ZjksIDB4NmUsIDB4NWUsIDB4M2YsIDB4ZmQsCi0JCQkgICAgMHhkZSwgMHhiZCwgMHg3MSwgMHhmOCwgMHg4NiwgMHg3MiwgMHg4OSwgMHg4NiwKLQkJCSAgICAweDVkLCAweGY1LCAweGEzLCAweDJkLCAweDIwLCAweGNkLCAweGM5LCAweDQ0LAotCQkJICAgIDB4YjYsIDB4MDIsIDB4MmMsIDB4YWMsIDB4M2MsIDB4NDksIDB4ODIsIDB4YjEsCi0JCQkgICAgMHgwZCwgMHg1ZSwgMHhlYiwgMHg1NSwgMHhjMywgMHhlNCwgMHhkZSwgMHgxNSwKLQkJCSAgICAweDEzLCAweDQ2LCAweDc2LCAweGZiLCAweDZkLCAweGUwLCAweDQ0LCAweDYwLAotCQkJICAgIDB4NjUsIDB4YzksIDB4NzQsIDB4NDAsIDB4ZmEsIDB4OGMsIDB4NmEsIDB4NTggfSwKKwkJLmRpZ2VzdAk9ICJceGUzXHg3Ylx4NmFceDc3XHg1ZFx4YzhceDdkXHhiYSIKKwkJCSJceGE0XHhkZlx4YTlceGY5XHg2ZVx4NWVceDNmXHhmZCIKKwkJCSJceGRlXHhiZFx4NzFceGY4XHg4Nlx4NzJceDg5XHg4NiIKKwkJCSJceDVkXHhmNVx4YTNceDJkXHgyMFx4Y2RceGM5XHg0NCIKKwkJCSJceGI2XHgwMlx4MmNceGFjXHgzY1x4NDlceDgyXHhiMSIKKwkJCSJceDBkXHg1ZVx4ZWJceDU1XHhjM1x4ZTRceGRlXHgxNSIKKwkJCSJceDEzXHg0Nlx4NzZceGZiXHg2ZFx4ZTBceDQ0XHg2MCIKKwkJCSJceDY1XHhjOVx4NzRceDQwXHhmYVx4OGNceDZhXHg1OCIsCiAJfSwKIH07CiAKQEAgLTE0MTksMTAyICsxNDQ1LDEwMiBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGRlc19lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gQXBwbGllZCBDcnlwdG9ncmFwaHkgKi8KLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZTcgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGU3IiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGM5LCAweDU3LCAweDQ0LCAweDI1LCAweDZhLCAweDVlLCAweGQzLCAweDFkIH0sCisJCS5yZXN1bHQJPSAiXHhjOVx4NTdceDQ0XHgyNVx4NmFceDVlXHhkM1x4MWQiLAogCQkucmxlbgk9IDgsCiAJfSwgeyAvKiBTYW1lIGtleSwgZGlmZmVyZW50IHBsYWludGV4dCBibG9jayAqLwotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSB9LAorCQkuaW5wdXQJPSAiXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3XHg4OFx4OTkiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4ZjcsIDB4OWMsIDB4ODksIDB4MmEsIDB4MzMsIDB4OGYsIDB4NGEsIDB4OGIgfSwKKwkJLnJlc3VsdAk9ICJceGY3XHg5Y1x4ODlceDJhXHgzM1x4OGZceDRhXHg4YiIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7IC8qIFNib3ggdGVzdCBmcm9tIE5CUyAqLwotCQkua2V5CT0geyAweDdjLCAweGExLCAweDEwLCAweDQ1LCAweDRhLCAweDFhLCAweDZlLCAweDU3IH0sCisJCS5rZXkJPSAiXHg3Y1x4YTFceDEwXHg0NVx4NGFceDFhXHg2ZVx4NTciLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHgwMSwgMHhhMSwgMHhkNiwgMHhkMCwgMHgzOSwgMHg3NywgMHg2NywgMHg0MiB9LAorCQkuaW5wdXQJPSAiXHgwMVx4YTFceGQ2XHhkMFx4MzlceDc3XHg2N1x4NDIiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NjksIDB4MGYsIDB4NWIsIDB4MGQsIDB4OWEsIDB4MjYsIDB4OTMsIDB4OWIgfSwKKwkJLnJlc3VsdAk9ICJceDY5XHgwZlx4NWJceDBkXHg5YVx4MjZceDkzXHg5YiIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7IC8qIFRocmVlIGJsb2NrcyAqLwotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlNywKLQkJCSAgICAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LCAweDg4LCAweDk5LAotCQkJICAgIDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmUsIDB4ZWQsIDB4YmUsIDB4ZWYgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGU3IgorCQkJICAiXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3XHg4OFx4OTkiCisJCQkgICJceGNhXHhmZVx4YmFceGJlXHhmZVx4ZWRceGJlXHhlZiIsCiAJCS5pbGVuCT0gMjQsCi0JCS5yZXN1bHQJPSB7IDB4YzksIDB4NTcsIDB4NDQsIDB4MjUsIDB4NmEsIDB4NWUsIDB4ZDMsIDB4MWQsCi0JCQkgICAgMHhmNywgMHg5YywgMHg4OSwgMHgyYSwgMHgzMywgMHg4ZiwgMHg0YSwgMHg4YiwKLQkJCSAgICAweGI0LCAweDk5LCAweDI2LCAweGY3LCAweDFmLCAweGUxLCAweGQ0LCAweDkwIH0sCisJCS5yZXN1bHQJPSAiXHhjOVx4NTdceDQ0XHgyNVx4NmFceDVlXHhkM1x4MWQiCisJCQkgICJceGY3XHg5Y1x4ODlceDJhXHgzM1x4OGZceDRhXHg4YiIKKwkJCSAgIlx4YjRceDk5XHgyNlx4ZjdceDFmXHhlMVx4ZDRceDkwIiwKIAkJLnJsZW4JPSAyNCwKIAl9LCB7IC8qIFdlYWsga2V5ICovCiAJCS5mYWlsCT0gMSwKIAkJLndrCT0gMSwKLQkJLmtleQk9IHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorCQkua2V5CT0gIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZTcgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGU3IiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGM5LCAweDU3LCAweDQ0LCAweDI1LCAweDZhLCAweDVlLCAweGQzLCAweDFkIH0sCisJCS5yZXN1bHQJPSAiXHhjOVx4NTdceDQ0XHgyNVx4NmFceDVlXHhkM1x4MWQiLAogCQkucmxlbgk9IDgsCiAJfSwgeyAvKiBUd28gYmxvY2tzIC0tIGZvciB0ZXN0aW5nIGVuY3J5cHRpb24gYWNyb3NzIHBhZ2VzICovCi0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGU3LAotCQkJICAgIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIDB4ODgsIDB4OTkgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGU3IgorCQkJICAiXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3XHg4OFx4OTkiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweGM5LCAweDU3LCAweDQ0LCAweDI1LCAweDZhLCAweDVlLCAweGQzLCAweDFkLAotCQkJICAgIDB4ZjcsIDB4OWMsIDB4ODksIDB4MmEsIDB4MzMsIDB4OGYsIDB4NGEsIDB4OGIgfSwKKwkJLnJlc3VsdAk9ICJceGM5XHg1N1x4NDRceDI1XHg2YVx4NWVceGQzXHgxZCIKKwkJCSAgIlx4ZjdceDljXHg4OVx4MmFceDMzXHg4Zlx4NGFceDhiIiwKIAkJLnJsZW4JPSAxNiwKIAkJLm5wCT0gMiwKIAkJLnRhcAk9IHsgOCwgOCB9CiAJfSwgeyAvKiBGb3VyIGJsb2NrcyAtLSBmb3IgdGVzdGluZyBlbmNyeXB0aW9uIHdpdGggY2h1bmtpbmcgKi8KLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZTcsCi0JCQkgICAgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwKLQkJCSAgICAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZlLCAweGVkLCAweGJlLCAweGVmLAotCQkJICAgIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIDB4ODgsIDB4OTkgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGU3IgorCQkJICAiXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3XHg4OFx4OTkiCisJCQkgICJceGNhXHhmZVx4YmFceGJlXHhmZVx4ZWRceGJlXHhlZiIKKwkJCSAgIlx4MjJceDMzXHg0NFx4NTVceDY2XHg3N1x4ODhceDk5IiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHhjOSwgMHg1NywgMHg0NCwgMHgyNSwgMHg2YSwgMHg1ZSwgMHhkMywgMHgxZCwKLQkJCSAgICAweGY3LCAweDljLCAweDg5LCAweDJhLCAweDMzLCAweDhmLCAweDRhLCAweDhiLAotCQkJICAgIDB4YjQsIDB4OTksIDB4MjYsIDB4ZjcsIDB4MWYsIDB4ZTEsIDB4ZDQsIDB4OTAsCi0JCQkgICAgMHhmNywgMHg5YywgMHg4OSwgMHgyYSwgMHgzMywgMHg4ZiwgMHg0YSwgMHg4YiB9LAorCQkucmVzdWx0CT0gIlx4YzlceDU3XHg0NFx4MjVceDZhXHg1ZVx4ZDNceDFkIgorCQkJICAiXHhmN1x4OWNceDg5XHgyYVx4MzNceDhmXHg0YVx4OGIiCisJCQkgICJceGI0XHg5OVx4MjZceGY3XHgxZlx4ZTFceGQ0XHg5MCIKKwkJCSAgIlx4ZjdceDljXHg4OVx4MmFceDMzXHg4Zlx4NGFceDhiIiwKIAkJLnJsZW4JPSAzMiwKIAkJLm5wCT0gMywKIAkJLnRhcAk9IHsgMTQsIDEwLCA4IH0KIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGU3LAotCQkJICAgIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIDB4ODgsIDB4OTksCi0JCQkgICAgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhmZSwgMHhlZCwgMHhiZSwgMHhlZiB9LAorCQkuaW5wdXQJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZTciCisJCQkgICJceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzdceDg4XHg5OSIKKwkJCSAgIlx4Y2FceGZlXHhiYVx4YmVceGZlXHhlZFx4YmVceGVmIiwKIAkJLmlsZW4JPSAyNCwKLQkJLnJlc3VsdAk9IHsgMHhjOSwgMHg1NywgMHg0NCwgMHgyNSwgMHg2YSwgMHg1ZSwgMHhkMywgMHgxZCwKLQkJCSAgICAweGY3LCAweDljLCAweDg5LCAweDJhLCAweDMzLCAweDhmLCAweDRhLCAweDhiLAotCQkJICAgIDB4YjQsIDB4OTksIDB4MjYsIDB4ZjcsIDB4MWYsIDB4ZTEsIDB4ZDQsIDB4OTAgfSwKKwkJLnJlc3VsdAk9ICJceGM5XHg1N1x4NDRceDI1XHg2YVx4NWVceGQzXHgxZCIKKwkJCSAgIlx4ZjdceDljXHg4OVx4MmFceDMzXHg4Zlx4NGFceDhiIgorCQkJICAiXHhiNFx4OTlceDI2XHhmN1x4MWZceGUxXHhkNFx4OTAiLAogCQkucmxlbgk9IDI0LAogCQkubnAJPSA0LAogCQkudGFwCT0geyAyLCAxLCAzLCAxOCB9CiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlNywKLQkJCSAgICAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LCAweDg4LCAweDk5IH0sCisJCS5pbnB1dAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlNyIKKwkJCSAgIlx4MjJceDMzXHg0NFx4NTVceDY2XHg3N1x4ODhceDk5IiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHhjOSwgMHg1NywgMHg0NCwgMHgyNSwgMHg2YSwgMHg1ZSwgMHhkMywgMHgxZCwKLQkJCSAgICAweGY3LCAweDljLCAweDg5LCAweDJhLCAweDMzLCAweDhmLCAweDRhLCAweDhiIH0sCisJCS5yZXN1bHQJPSAiXHhjOVx4NTdceDQ0XHgyNVx4NmFceDVlXHhkM1x4MWQiCisJCQkgICJceGY3XHg5Y1x4ODlceDJhXHgzM1x4OGZceDRhXHg4YiIsCiAJCS5ybGVuCT0gMTYsCiAJCS5ucAk9IDUsCiAJCS50YXAJPSB7IDIsIDIsIDIsIDIsIDggfQogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZTcgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGU3IiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGM5LCAweDU3LCAweDQ0LCAweDI1LCAweDZhLCAweDVlLCAweGQzLCAweDFkIH0sCisJCS5yZXN1bHQJPSAiXHhjOVx4NTdceDQ0XHgyNVx4NmFceDVlXHhkM1x4MWQiLAogCQkucmxlbgk9IDgsCiAJCS5ucAk9IDgsCiAJCS50YXAJPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfQpAQCAtMTUyMywzOCArMTU0OSwzOCBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGRlc19kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gQXBwbGllZCBDcnlwdG9ncmFwaHkgKi8KLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4YzksIDB4NTcsIDB4NDQsIDB4MjUsIDB4NmEsIDB4NWUsIDB4ZDMsIDB4MWQgfSwKKwkJLmlucHV0CT0gIlx4YzlceDU3XHg0NFx4MjVceDZhXHg1ZVx4ZDNceDFkIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGU3IH0sCisJCS5yZXN1bHQJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZTciLAogCQkucmxlbgk9IDgsCiAJfSwgeyAvKiBTYm94IHRlc3QgZnJvbSBOQlMgKi8KLQkJLmtleQk9IHsgMHg3YywgMHhhMSwgMHgxMCwgMHg0NSwgMHg0YSwgMHgxYSwgMHg2ZSwgMHg1NyB9LAorCQkua2V5CT0gIlx4N2NceGExXHgxMFx4NDVceDRhXHgxYVx4NmVceDU3IiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4NjksIDB4MGYsIDB4NWIsIDB4MGQsIDB4OWEsIDB4MjYsIDB4OTMsIDB4OWIgfSwKKwkJLmlucHV0CT0gIlx4NjlceDBmXHg1Ylx4MGRceDlhXHgyNlx4OTNceDliIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDAxLCAweGExLCAweGQ2LCAweGQwLCAweDM5LCAweDc3LCAweDY3LCAweDQyIH0sCisJCS5yZXN1bHQJPSAiXHgwMVx4YTFceGQ2XHhkMFx4MzlceDc3XHg2N1x4NDIiLAogCQkucmxlbgk9IDgsCiAJfSwgeyAvKiBUd28gYmxvY2tzLCBmb3IgY2h1bmtpbmcgdGVzdCAqLwotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHhjOSwgMHg1NywgMHg0NCwgMHgyNSwgMHg2YSwgMHg1ZSwgMHhkMywgMHgxZCwKLQkJCSAgICAweDY5LCAweDBmLCAweDViLCAweDBkLCAweDlhLCAweDI2LCAweDkzLCAweDliIH0sCisJCS5pbnB1dAk9ICJceGM5XHg1N1x4NDRceDI1XHg2YVx4NWVceGQzXHgxZCIKKwkJCSAgIlx4NjlceDBmXHg1Ylx4MGRceDlhXHgyNlx4OTNceDliIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlNywKLQkJCSAgICAweGEzLCAweDk5LCAweDdiLCAweGNhLCAweGFmLCAweDY5LCAweGEwLCAweGY1IH0sCisJCS5yZXN1bHQJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZTciCisJCQkgICJceGEzXHg5OVx4N2JceGNhXHhhZlx4NjlceGEwXHhmNSIsCiAJCS5ybGVuCT0gMTYsCiAJCS5ucAk9IDIsCiAJCS50YXAJPSB7IDgsIDggfQogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4YzksIDB4NTcsIDB4NDQsIDB4MjUsIDB4NmEsIDB4NWUsIDB4ZDMsIDB4MWQsCi0JCQkgICAgMHg2OSwgMHgwZiwgMHg1YiwgMHgwZCwgMHg5YSwgMHgyNiwgMHg5MywgMHg5YiB9LAorCQkuaW5wdXQJPSAiXHhjOVx4NTdceDQ0XHgyNVx4NmFceDVlXHhkM1x4MWQiCisJCQkgICJceDY5XHgwZlx4NWJceDBkXHg5YVx4MjZceDkzXHg5YiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZTcsCi0JCQkgICAgMHhhMywgMHg5OSwgMHg3YiwgMHhjYSwgMHhhZiwgMHg2OSwgMHhhMCwgMHhmNSB9LAorCQkucmVzdWx0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGU3IgorCQkJICAiXHhhM1x4OTlceDdiXHhjYVx4YWZceDY5XHhhMFx4ZjUiLAogCQkucmxlbgk9IDE2LAogCQkubnAJPSAzLAogCQkudGFwCT0geyAzLCAxMiwgMSB9CkBAIC0xNTYzLDUzICsxNTg5LDUzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgZGVzX2NiY19lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gT3BlblNTTCAqLwotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLml2CT0geyAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwfSwKLQkJLmlucHV0CT0geyAweDM3LCAweDM2LCAweDM1LCAweDM0LCAweDMzLCAweDMyLCAweDMxLCAweDIwLAotCQkJICAgIDB4NGUsIDB4NmYsIDB4NzcsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NzQsCi0JCQkgICAgMHg2OCwgMHg2NSwgMHgyMCwgMHg3NCwgMHg2OSwgMHg2ZCwgMHg2NSwgMHgyMCB9LAorCQkuaXYJPSAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAorCQkuaW5wdXQJPSAiXHgzN1x4MzZceDM1XHgzNFx4MzNceDMyXHgzMVx4MjAiCisJCQkgICJceDRlXHg2Zlx4NzdceDIwXHg2OVx4NzNceDIwXHg3NCIKKwkJCSAgIlx4NjhceDY1XHgyMFx4NzRceDY5XHg2ZFx4NjVceDIwIiwKIAkJLmlsZW4JPSAyNCwKLQkJLnJlc3VsdAk9IHsgMHhjYywgMHhkMSwgMHg3MywgMHhmZiwgMHhhYiwgMHgyMCwgMHgzOSwgMHhmNCwKLQkJCSAgICAweGFjLCAweGQ4LCAweGFlLCAweGZkLCAweGRmLCAweGQ4LCAweGExLCAweGViLAotCQkJICAgIDB4NDYsIDB4OGUsIDB4OTEsIDB4MTUsIDB4NzgsIDB4ODgsIDB4YmEsIDB4NjggfSwKKwkJLnJlc3VsdAk9ICJceGNjXHhkMVx4NzNceGZmXHhhYlx4MjBceDM5XHhmNCIKKwkJCSAgIlx4YWNceGQ4XHhhZVx4ZmRceGRmXHhkOFx4YTFceGViIgorCQkJICAiXHg0Nlx4OGVceDkxXHgxNVx4NzhceDg4XHhiYVx4NjgiLAogCQkucmxlbgk9IDI0LAogCX0sIHsgLyogRklQUyBQdWIgODEgKi8KLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaXYJPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OTAsIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKLQkJLmlucHV0CT0geyAweDRlLCAweDZmLCAweDc3LCAweDIwLCAweDY5LCAweDczLCAweDIwLCAweDc0IH0sCisJCS5pdgk9ICJceDEyXHgzNFx4NTZceDc4XHg5MFx4YWJceGNkXHhlZiIsCisJCS5pbnB1dAk9ICJceDRlXHg2Zlx4NzdceDIwXHg2OVx4NzNceDIwXHg3NCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHhlNSwgMHhjNywgMHhjZCwgMHhkZSwgMHg4NywgMHgyYiwgMHhmMiwgMHg3YyB9LAorCQkucmVzdWx0CT0gIlx4ZTVceGM3XHhjZFx4ZGVceDg3XHgyYlx4ZjJceDdjIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaXYJPSB7IDB4ZTUsIDB4YzcsIDB4Y2QsIDB4ZGUsIDB4ODcsIDB4MmIsIDB4ZjIsIDB4N2MgfSwKLQkJLmlucHV0CT0geyAweDY4LCAweDY1LCAweDIwLCAweDc0LCAweDY5LCAweDZkLCAweDY1LCAweDIwIH0sCisJCS5pdgk9ICJceGU1XHhjN1x4Y2RceGRlXHg4N1x4MmJceGYyXHg3YyIsCisJCS5pbnB1dAk9ICJceDY4XHg2NVx4MjBceDc0XHg2OVx4NmRceDY1XHgyMCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg0MywgMHhlOSwgMHgzNCwgMHgwMCwgMHg4YywgMHgzOCwgMHg5YywgMHgwZiB9LAorCQkucmVzdWx0CT0gIlx4NDNceGU5XHgzNFx4MDBceDhjXHgzOFx4OWNceDBmIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaXYJPSB7IDB4NDMsIDB4ZTksIDB4MzQsIDB4MDAsIDB4OGMsIDB4MzgsIDB4OWMsIDB4MGYgfSwKLQkJLmlucHV0CT0geyAweDY2LCAweDZmLCAweDcyLCAweDIwLCAweDYxLCAweDZjLCAweDZjLCAweDIwIH0sCisJCS5pdgk9ICJceDQzXHhlOVx4MzRceDAwXHg4Y1x4MzhceDljXHgwZiIsCisJCS5pbnB1dAk9ICJceDY2XHg2Zlx4NzJceDIwXHg2MVx4NmNceDZjXHgyMCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg2OCwgMHgzNywgMHg4OCwgMHg0OSwgMHg5YSwgMHg3YywgMHgwNSwgMHhmNiB9LAorCQkucmVzdWx0CT0gIlx4NjhceDM3XHg4OFx4NDlceDlhXHg3Y1x4MDVceGY2IiwKIAkJLnJsZW4JPSA4LAogCX0sIHsgLyogQ29weSBvZiBvcGVuc3NsIHZlY3RvciBmb3IgY2h1bmsgdGVzdGluZyAqLwogCSAgICAgLyogRnJvbSBPcGVuU1NMICovCi0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWZ9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaXYJPSB7IDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTB9LAotCQkuaW5wdXQJPSB7IDB4MzcsIDB4MzYsIDB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsIDB4MjAsCi0JCQkgICAgMHg0ZSwgMHg2ZiwgMHg3NywgMHgyMCwgMHg2OSwgMHg3MywgMHgyMCwgMHg3NCwKLQkJCSAgICAweDY4LCAweDY1LCAweDIwLCAweDc0LCAweDY5LCAweDZkLCAweDY1LCAweDIwIH0sCisJCS5pdgk9ICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIsCisJCS5pbnB1dAk9ICJceDM3XHgzNlx4MzVceDM0XHgzM1x4MzJceDMxXHgyMCIKKwkJCSAgIlx4NGVceDZmXHg3N1x4MjBceDY5XHg3M1x4MjBceDc0IgorCQkJICAiXHg2OFx4NjVceDIwXHg3NFx4NjlceDZkXHg2NVx4MjAiLAogCQkuaWxlbgk9IDI0LAotCQkucmVzdWx0CT0geyAweGNjLCAweGQxLCAweDczLCAweGZmLCAweGFiLCAweDIwLCAweDM5LCAweGY0LAotCQkJICAgIDB4YWMsIDB4ZDgsIDB4YWUsIDB4ZmQsIDB4ZGYsIDB4ZDgsIDB4YTEsIDB4ZWIsCi0JCQkgICAgMHg0NiwgMHg4ZSwgMHg5MSwgMHgxNSwgMHg3OCwgMHg4OCwgMHhiYSwgMHg2OCB9LAorCQkucmVzdWx0CT0gIlx4Y2NceGQxXHg3M1x4ZmZceGFiXHgyMFx4MzlceGY0IgorCQkJICAiXHhhY1x4ZDhceGFlXHhmZFx4ZGZceGQ4XHhhMVx4ZWIiCisJCQkgICJceDQ2XHg4ZVx4OTFceDE1XHg3OFx4ODhceGJhXHg2OCIsCiAJCS5ybGVuCT0gMjQsCiAJCS5ucAk9IDIsCiAJCS50YXAJPSB7IDEzLCAxMSB9CkBAIC0xNjE4LDM2ICsxNjQ0LDM2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgZGVzX2NiY19kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZJUFMgUHViIDgxICovCi0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLml2CT0geyAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDkwLCAweGFiLCAweGNkLCAweGVmIH0sCi0JCS5pbnB1dAk9IHsgMHhlNSwgMHhjNywgMHhjZCwgMHhkZSwgMHg4NywgMHgyYiwgMHhmMiwgMHg3YyB9LAorCQkuaXYJPSAiXHgxMlx4MzRceDU2XHg3OFx4OTBceGFiXHhjZFx4ZWYiLAorCQkuaW5wdXQJPSAiXHhlNVx4YzdceGNkXHhkZVx4ODdceDJiXHhmMlx4N2MiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NGUsIDB4NmYsIDB4NzcsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NzQgfSwKKwkJLnJlc3VsdAk9ICJceDRlXHg2Zlx4NzdceDIwXHg2OVx4NzNceDIwXHg3NCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLml2CT0geyAweGU1LCAweGM3LCAweGNkLCAweGRlLCAweDg3LCAweDJiLCAweGYyLCAweDdjIH0sCi0JCS5pbnB1dAk9IHsgMHg0MywgMHhlOSwgMHgzNCwgMHgwMCwgMHg4YywgMHgzOCwgMHg5YywgMHgwZiB9LAorCQkuaXYJPSAiXHhlNVx4YzdceGNkXHhkZVx4ODdceDJiXHhmMlx4N2MiLAorCQkuaW5wdXQJPSAiXHg0M1x4ZTlceDM0XHgwMFx4OGNceDM4XHg5Y1x4MGYiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NjgsIDB4NjUsIDB4MjAsIDB4NzQsIDB4NjksIDB4NmQsIDB4NjUsIDB4MjAgfSwKKwkJLnJlc3VsdAk9ICJceDY4XHg2NVx4MjBceDc0XHg2OVx4NmRceDY1XHgyMCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLml2CT0geyAweDQzLCAweGU5LCAweDM0LCAweDAwLCAweDhjLCAweDM4LCAweDljLCAweDBmIH0sCi0JCS5pbnB1dAk9IHsgMHg2OCwgMHgzNywgMHg4OCwgMHg0OSwgMHg5YSwgMHg3YywgMHgwNSwgMHhmNiB9LAorCQkuaXYJPSAiXHg0M1x4ZTlceDM0XHgwMFx4OGNceDM4XHg5Y1x4MGYiLAorCQkuaW5wdXQJPSAiXHg2OFx4MzdceDg4XHg0OVx4OWFceDdjXHgwNVx4ZjYiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NjEsIDB4NmMsIDB4NmMsIDB4MjAgfSwKKwkJLnJlc3VsdAk9ICJceDY2XHg2Zlx4NzJceDIwXHg2MVx4NmNceDZjXHgyMCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7IC8qIENvcHkgb2YgYWJvdmUsIGZvciBjaHVuayB0ZXN0aW5nICovCi0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLml2CT0geyAweDQzLCAweGU5LCAweDM0LCAweDAwLCAweDhjLCAweDM4LCAweDljLCAweDBmIH0sCi0JCS5pbnB1dAk9IHsgMHg2OCwgMHgzNywgMHg4OCwgMHg0OSwgMHg5YSwgMHg3YywgMHgwNSwgMHhmNiB9LAorCQkuaXYJPSAiXHg0M1x4ZTlceDM0XHgwMFx4OGNceDM4XHg5Y1x4MGYiLAorCQkuaW5wdXQJPSAiXHg2OFx4MzdceDg4XHg0OVx4OWFceDdjXHgwNVx4ZjYiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NjEsIDB4NmMsIDB4NmMsIDB4MjAgfSwKKwkJLnJlc3VsdAk9ICJceDY2XHg2Zlx4NzJceDIwXHg2MVx4NmNceDZjXHgyMCIsCiAJCS5ybGVuCT0gOCwKIAkJLm5wCT0gMiwKIAkJLnRhcAk9IHsgNCwgNCB9CkBAIC0xNjU5LDYyICsxNjg1LDYyIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgZGVzM19lZGVfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBUaGVzZSBhcmUgZnJvbSBvcGVuc3NsICovCi0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0JCQkgICAgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwKLQkJCSAgICAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIKKwkJCSAgIlx4NTVceDU1XHg1NVx4NTVceDU1XHg1NVx4NTVceDU1IgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkua2xlbgk9IDI0LAotCQkuaW5wdXQJPSB7IDB4NzMsIDB4NmYsIDB4NmQsIDB4NjUsIDB4NjQsIDB4NjEsIDB4NzQsIDB4NjEgfSwKKwkJLmlucHV0CT0gIlx4NzNceDZmXHg2ZFx4NjVceDY0XHg2MVx4NzRceDYxIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDE4LCAweGQ3LCAweDQ4LCAweGU1LCAweDYzLCAweDYyLCAweDA1LCAweDcyIH0sCisJCS5yZXN1bHQJPSAiXHgxOFx4ZDdceDQ4XHhlNVx4NjNceDYyXHgwNVx4NzIiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDAzLCAweDUyLCAweDAyLCAweDA3LCAweDY3LCAweDIwLCAweDgyLCAweDE3LAotCQkJICAgIDB4ODYsIDB4MDIsIDB4ODcsIDB4NjYsIDB4NTksIDB4MDgsIDB4MjEsIDB4OTgsCi0JCQkgICAgMHg2NCwgMHgwNSwgMHg2YSwgMHhiZCwgMHhmZSwgMHhhOSwgMHgzNCwgMHg1NyB9LAorCQkua2V5CT0gIlx4MDNceDUyXHgwMlx4MDdceDY3XHgyMFx4ODJceDE3IgorCQkJICAiXHg4Nlx4MDJceDg3XHg2Nlx4NTlceDA4XHgyMVx4OTgiCisJCQkgICJceDY0XHgwNVx4NmFceGJkXHhmZVx4YTlceDM0XHg1NyIsCiAJCS5rbGVuCT0gMjQsCi0JCS5pbnB1dAk9IHsgMHg3MywgMHg3MSwgMHg3NSwgMHg2OSwgMHg2NywgMHg2NywgMHg2YywgMHg2NSB9LAorCQkuaW5wdXQJPSAiXHg3M1x4NzFceDc1XHg2OVx4NjdceDY3XHg2Y1x4NjUiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4YzAsIDB4N2QsIDB4MmEsIDB4MGYsIDB4YTUsIDB4NjYsIDB4ZmEsIDB4MzAgfSwKKwkJLnJlc3VsdAk9ICJceGMwXHg3ZFx4MmFceDBmXHhhNVx4NjZceGZhXHgzMCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MTAsIDB4NDYsIDB4MTAsIDB4MzQsIDB4ODksIDB4OTgsIDB4ODAsIDB4MjAsCi0JCQkgICAgMHg5MSwgMHgwNywgMHhkMCwgMHgxNSwgMHg4OSwgMHgxOSwgMHgwMSwgMHgwMSwKLQkJCSAgICAweDE5LCAweDA3LCAweDkyLCAweDEwLCAweDk4LCAweDFhLCAweDAxLCAweDAxIH0sCisJCS5rZXkJPSAiXHgxMFx4NDZceDEwXHgzNFx4ODlceDk4XHg4MFx4MjAiCisJCQkgICJceDkxXHgwN1x4ZDBceDE1XHg4OVx4MTlceDAxXHgwMSIKKwkJCSAgIlx4MTlceDA3XHg5Mlx4MTBceDk4XHgxYVx4MDFceDAxIiwKIAkJLmtsZW4JPSAyNCwKLQkJLmlucHV0CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5pbnB1dAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHhlMSwgMHhlZiwgMHg2MiwgMHhjMywgMHgzMiwgMHhmZSwgMHg4MiwgMHg1YiB9LAorCQkucmVzdWx0CT0gIlx4ZTFceGVmXHg2Mlx4YzNceDMyXHhmZVx4ODJceDViIiwKIAkJLnJsZW4JPSA4LAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGRlczNfZWRlX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsgLyogVGhlc2UgYXJlIGZyb20gb3BlbnNzbCAqLwotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotCQkJICAgIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsCi0JCQkgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisJCQkgICJceDU1XHg1NVx4NTVceDU1XHg1NVx4NTVceDU1XHg1NSIKKwkJCSAgIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKIAkJLmtsZW4JPSAyNCwKLQkJLmlucHV0CT0geyAweDE4LCAweGQ3LCAweDQ4LCAweGU1LCAweDYzLCAweDYyLCAweDA1LCAweDcyIH0sCisJCS5pbnB1dAk9ICJceDE4XHhkN1x4NDhceGU1XHg2M1x4NjJceDA1XHg3MiIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg3MywgMHg2ZiwgMHg2ZCwgMHg2NSwgMHg2NCwgMHg2MSwgMHg3NCwgMHg2MSB9LAorCQkucmVzdWx0CT0gIlx4NzNceDZmXHg2ZFx4NjVceDY0XHg2MVx4NzRceDYxIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMywgMHg1MiwgMHgwMiwgMHgwNywgMHg2NywgMHgyMCwgMHg4MiwgMHgxNywKLQkJCSAgICAweDg2LCAweDAyLCAweDg3LCAweDY2LCAweDU5LCAweDA4LCAweDIxLCAweDk4LAotCQkJICAgIDB4NjQsIDB4MDUsIDB4NmEsIDB4YmQsIDB4ZmUsIDB4YTksIDB4MzQsIDB4NTcgfSwKKwkJLmtleQk9ICJceDAzXHg1Mlx4MDJceDA3XHg2N1x4MjBceDgyXHgxNyIKKwkJCSAgIlx4ODZceDAyXHg4N1x4NjZceDU5XHgwOFx4MjFceDk4IgorCQkJICAiXHg2NFx4MDVceDZhXHhiZFx4ZmVceGE5XHgzNFx4NTciLAogCQkua2xlbgk9IDI0LAotCQkuaW5wdXQJPSB7IDB4YzAsIDB4N2QsIDB4MmEsIDB4MGYsIDB4YTUsIDB4NjYsIDB4ZmEsIDB4MzAgfSwKKwkJLmlucHV0CT0gIlx4YzBceDdkXHgyYVx4MGZceGE1XHg2Nlx4ZmFceDMwIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDczLCAweDcxLCAweDc1LCAweDY5LCAweDY3LCAweDY3LCAweDZjLCAweDY1IH0sCisJCS5yZXN1bHQJPSAiXHg3M1x4NzFceDc1XHg2OVx4NjdceDY3XHg2Y1x4NjUiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDEwLCAweDQ2LCAweDEwLCAweDM0LCAweDg5LCAweDk4LCAweDgwLCAweDIwLAotCQkJICAgIDB4OTEsIDB4MDcsIDB4ZDAsIDB4MTUsIDB4ODksIDB4MTksIDB4MDEsIDB4MDEsCi0JCQkgICAgMHgxOSwgMHgwNywgMHg5MiwgMHgxMCwgMHg5OCwgMHgxYSwgMHgwMSwgMHgwMSB9LAorCQkua2V5CT0gIlx4MTBceDQ2XHgxMFx4MzRceDg5XHg5OFx4ODBceDIwIgorCQkJICAiXHg5MVx4MDdceGQwXHgxNVx4ODlceDE5XHgwMVx4MDEiCisJCQkgICJceDE5XHgwN1x4OTJceDEwXHg5OFx4MWFceDAxXHgwMSIsCiAJCS5rbGVuCT0gMjQsCi0JCS5pbnB1dAk9IHsgMHhlMSwgMHhlZiwgMHg2MiwgMHhjMywgMHgzMiwgMHhmZSwgMHg4MiwgMHg1YiB9LAorCQkuaW5wdXQJPSAiXHhlMVx4ZWZceDYyXHhjM1x4MzJceGZlXHg4Mlx4NWIiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5ybGVuCT0gOCwKIAl9LAogfTsKQEAgLTE3MjksMTQ4ICsxNzU1LDE0OCBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGJmX2VuY190dl90ZW1wbGF0ZVtdID0gewogCXsgLyogREVTIHRlc3QgdmVjdG9ycyBmcm9tIE9wZW5TU0wgKi8KLQkJLmtleQk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgfSwKKwkJLmtleQk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5rbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5pbnB1dAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg0ZSwgMHhmOSwgMHg5NywgMHg0NSwgMHg2MSwgMHg5OCwgMHhkZCwgMHg3OCB9LAorCQkucmVzdWx0CT0gIlx4NGVceGY5XHg5N1x4NDVceDYxXHg5OFx4ZGRceDc4IiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgwZSwgMHgwZSwgMHgwZSwgMHgwZSB9LAorCQkua2V5CT0gIlx4MWZceDFmXHgxZlx4MWZceDBlXHgwZVx4MGVceDBlIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGE3LCAweDkwLCAweDc5LCAweDUxLCAweDA4LCAweGVhLCAweDNjLCAweGFlIH0sCisJCS5yZXN1bHQJPSAiXHhhN1x4OTBceDc5XHg1MVx4MDhceGVhXHgzY1x4YWUiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweGYwLCAweGUxLCAweGQyLCAweGMzLCAweGI0LCAweGE1LCAweDk2LCAweDg3IH0sCisJCS5rZXkJPSAiXHhmMFx4ZTFceGQyXHhjM1x4YjRceGE1XHg5Nlx4ODciLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkuaW5wdXQJPSAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4ZTgsIDB4N2EsIDB4MjQsIDB4NGUsIDB4MmMsIDB4YzgsIDB4NWUsIDB4ODIgfSwKKwkJLnJlc3VsdAk9ICJceGU4XHg3YVx4MjRceDRlXHgyY1x4YzhceDVlXHg4MiIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7IC8qIFZhcnkgdGhlIGtleWxlbmd0aC4uLiAqLwotCQkua2V5CT0geyAweGYwLCAweGUxLCAweGQyLCAweGMzLCAweGI0LCAweGE1LCAweDk2LCAweDg3LAotCQkJICAgIDB4NzgsIDB4NjksIDB4NWEsIDB4NGIsIDB4M2MsIDB4MmQsIDB4MWUsIDB4MGYgfSwKKwkJLmtleQk9ICJceGYwXHhlMVx4ZDJceGMzXHhiNFx4YTVceDk2XHg4NyIKKwkJCSAgIlx4NzhceDY5XHg1YVx4NGJceDNjXHgyZFx4MWVceDBmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwIH0sCisJCS5pbnB1dAk9ICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg5MywgMHgxNCwgMHgyOCwgMHg4NywgMHhlZSwgMHgzYiwgMHhlMSwgMHg1YyB9LAorCQkucmVzdWx0CT0gIlx4OTNceDE0XHgyOFx4ODdceGVlXHgzYlx4ZTFceDVjIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NywKLQkJCSAgICAweDc4LCAweDY5LCAweDVhLCAweDRiLCAweDNjLCAweDJkLCAweDFlLCAweDBmLAotCQkJICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQgfSwKKwkJLmtleQk9ICJceGYwXHhlMVx4ZDJceGMzXHhiNFx4YTVceDk2XHg4NyIKKwkJCSAgIlx4NzhceDY5XHg1YVx4NGJceDNjXHgyZFx4MWVceDBmIgorCQkJICAiXHgwMFx4MTFceDIyXHgzM1x4NDQiLAogCQkua2xlbgk9IDIxLAotCQkuaW5wdXQJPSB7IDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLmlucHV0CT0gIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGU2LCAweGY1LCAweDFlLCAweGQ3LCAweDliLCAweDlkLCAweGIyLCAweDFmIH0sCisJCS5yZXN1bHQJPSAiXHhlNlx4ZjVceDFlXHhkN1x4OWJceDlkXHhiMlx4MWYiLAogCQkucmxlbgk9IDgsCiAJfSwgeyAvKiBHZW5lcmF0ZWQgd2l0aCBiZjQ4OCAqLwotCQkua2V5CT0geyAweGYwLCAweGUxLCAweGQyLCAweGMzLCAweGI0LCAweGE1LCAweDk2LCAweDg3LAotCQkJICAgIDB4NzgsIDB4NjksIDB4NWEsIDB4NGIsIDB4M2MsIDB4MmQsIDB4MWUsIDB4MGYsCi0JCQkgICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKLQkJCSAgICAweDA0LCAweDY4LCAweDkxLCAweDA0LCAweGMyLCAweGZkLCAweDNiLCAweDJmLAotCQkJICAgIDB4NTgsIDB4NDAsIDB4MjMsIDB4NjQsIDB4MWEsIDB4YmEsIDB4NjEsIDB4NzYsCi0JCQkgICAgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgwZSwgMHgwZSwgMHgwZSwgMHgwZSwKLQkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisJCS5rZXkJPSAiXHhmMFx4ZTFceGQyXHhjM1x4YjRceGE1XHg5Nlx4ODciCisJCQkgICJceDc4XHg2OVx4NWFceDRiXHgzY1x4MmRceDFlXHgwZiIKKwkJCSAgIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3IgorCQkJICAiXHgwNFx4NjhceDkxXHgwNFx4YzJceGZkXHgzYlx4MmYiCisJCQkgICJceDU4XHg0MFx4MjNceDY0XHgxYVx4YmFceDYxXHg3NiIKKwkJCSAgIlx4MWZceDFmXHgxZlx4MWZceDBlXHgwZVx4MGVceDBlIgorCQkJICAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLAogCQkua2xlbgk9IDU2LAotCQkuaW5wdXQJPSB7IDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLmlucHV0CT0gIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGMwLCAweDQ1LCAweDA0LCAweDAxLCAweDJlLCAweDRlLCAweDFmLCAweDUzIH0sCisJCS5yZXN1bHQJPSAiXHhjMFx4NDVceDA0XHgwMVx4MmVceDRlXHgxZlx4NTMiLAogCQkucmxlbgk9IDgsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYmZfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBERVMgdGVzdCB2ZWN0b3JzIGZyb20gT3BlblNTTCAqLwotCQkua2V5CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5rZXkJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHg0ZSwgMHhmOSwgMHg5NywgMHg0NSwgMHg2MSwgMHg5OCwgMHhkZCwgMHg3OCB9LAorCQkuaW5wdXQJPSAiXHg0ZVx4ZjlceDk3XHg0NVx4NjFceDk4XHhkZFx4NzgiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MGUsIDB4MGUsIDB4MGUsIDB4MGUgfSwKKwkJLmtleQk9ICJceDFmXHgxZlx4MWZceDFmXHgwZVx4MGVceDBlXHgwZSIsCiAJCS5rbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweGE3LCAweDkwLCAweDc5LCAweDUxLCAweDA4LCAweGVhLCAweDNjLCAweGFlIH0sCisJCS5pbnB1dAk9ICJceGE3XHg5MFx4NzlceDUxXHgwOFx4ZWFceDNjXHhhZSIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkucmVzdWx0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NyB9LAorCQkua2V5CT0gIlx4ZjBceGUxXHhkMlx4YzNceGI0XHhhNVx4OTZceDg3IiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4ZTgsIDB4N2EsIDB4MjQsIDB4NGUsIDB4MmMsIDB4YzgsIDB4NWUsIDB4ODIgfSwKKwkJLmlucHV0CT0gIlx4ZThceDdhXHgyNFx4NGVceDJjXHhjOFx4NWVceDgyIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwIH0sCisJCS5yZXN1bHQJPSAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkucmxlbgk9IDgsCiAJfSwgeyAvKiBWYXJ5IHRoZSBrZXlsZW5ndGguLi4gKi8KLQkJLmtleQk9IHsgMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NywKLQkJCSAgICAweDc4LCAweDY5LCAweDVhLCAweDRiLCAweDNjLCAweDJkLCAweDFlLCAweDBmIH0sCisJCS5rZXkJPSAiXHhmMFx4ZTFceGQyXHhjM1x4YjRceGE1XHg5Nlx4ODciCisJCQkgICJceDc4XHg2OVx4NWFceDRiXHgzY1x4MmRceDFlXHgwZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg5MywgMHgxNCwgMHgyOCwgMHg4NywgMHhlZSwgMHgzYiwgMHhlMSwgMHg1YyB9LAorCQkuaW5wdXQJPSAiXHg5M1x4MTRceDI4XHg4N1x4ZWVceDNiXHhlMVx4NWMiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLnJlc3VsdAk9ICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZjAsIDB4ZTEsIDB4ZDIsIDB4YzMsIDB4YjQsIDB4YTUsIDB4OTYsIDB4ODcsCi0JCQkgICAgMHg3OCwgMHg2OSwgMHg1YSwgMHg0YiwgMHgzYywgMHgyZCwgMHgxZSwgMHgwZiwKLQkJCSAgICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0IH0sCisJCS5rZXkJPSAiXHhmMFx4ZTFceGQyXHhjM1x4YjRceGE1XHg5Nlx4ODciCisJCQkgICJceDc4XHg2OVx4NWFceDRiXHgzY1x4MmRceDFlXHgwZiIKKwkJCSAgIlx4MDBceDExXHgyMlx4MzNceDQ0IiwKIAkJLmtsZW4JPSAyMSwKLQkJLmlucHV0CT0geyAweGU2LCAweGY1LCAweDFlLCAweGQ3LCAweDliLCAweDlkLCAweGIyLCAweDFmIH0sCisJCS5pbnB1dAk9ICJceGU2XHhmNVx4MWVceGQ3XHg5Ylx4OWRceGIyXHgxZiIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkucmVzdWx0CT0gIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsgLyogR2VuZXJhdGVkIHdpdGggYmY0ODgsIHVzaW5nIE9wZW5TU0wsIExpYmdjcnlwdCBhbmQgTmV0dGxlICovCi0JCS5rZXkJPSB7IDB4ZjAsIDB4ZTEsIDB4ZDIsIDB4YzMsIDB4YjQsIDB4YTUsIDB4OTYsIDB4ODcsCi0JCQkgICAgMHg3OCwgMHg2OSwgMHg1YSwgMHg0YiwgMHgzYywgMHgyZCwgMHgxZSwgMHgwZiwKLQkJCSAgICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAotCQkJICAgIDB4MDQsIDB4NjgsIDB4OTEsIDB4MDQsIDB4YzIsIDB4ZmQsIDB4M2IsIDB4MmYsCi0JCQkgICAgMHg1OCwgMHg0MCwgMHgyMywgMHg2NCwgMHgxYSwgMHhiYSwgMHg2MSwgMHg3NiwKLQkJCSAgICAweDFmLCAweDFmLCAweDFmLCAweDFmLCAweDBlLCAweDBlLCAweDBlLCAweDBlLAotCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKwkJLmtleQk9ICJceGYwXHhlMVx4ZDJceGMzXHhiNFx4YTVceDk2XHg4NyIKKwkJCSAgIlx4NzhceDY5XHg1YVx4NGJceDNjXHgyZFx4MWVceDBmIgorCQkJICAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzciCisJCQkgICJceDA0XHg2OFx4OTFceDA0XHhjMlx4ZmRceDNiXHgyZiIKKwkJCSAgIlx4NThceDQwXHgyM1x4NjRceDFhXHhiYVx4NjFceDc2IgorCQkJICAiXHgxZlx4MWZceDFmXHgxZlx4MGVceDBlXHgwZVx4MGUiCisJCQkgICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIsCiAJCS5rbGVuCT0gNTYsCi0JCS5pbnB1dAk9IHsgMHhjMCwgMHg0NSwgMHgwNCwgMHgwMSwgMHgyZSwgMHg0ZSwgMHgxZiwgMHg1MyB9LAorCQkuaW5wdXQJPSAiXHhjMFx4NDVceDA0XHgwMVx4MmVceDRlXHgxZlx4NTMiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLnJlc3VsdAk9ICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIsCiAJCS5ybGVuCT0gOCwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBiZl9jYmNfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBGcm9tIE9wZW5TU0wgKi8KLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLQkJCSAgICAweGYwLCAweGUxLCAweGQyLCAweGMzLCAweGI0LCAweGE1LCAweDk2LCAweDg3IH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisJCQkgICJceGYwXHhlMVx4ZDJceGMzXHhiNFx4YTVceDk2XHg4NyIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAotCQkuaW5wdXQJPSB7IDB4MzcsIDB4MzYsIDB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsIDB4MjAsCi0JCQkgICAgMHg0ZSwgMHg2ZiwgMHg3NywgMHgyMCwgMHg2OSwgMHg3MywgMHgyMCwgMHg3NCwKLQkJCSAgICAweDY4LCAweDY1LCAweDIwLCAweDc0LCAweDY5LCAweDZkLCAweDY1LCAweDIwLAotCQkJICAgIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLml2CT0gIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKKwkJLmlucHV0CT0gIlx4MzdceDM2XHgzNVx4MzRceDMzXHgzMlx4MzFceDIwIgorCQkJICAiXHg0ZVx4NmZceDc3XHgyMFx4NjlceDczXHgyMFx4NzQiCisJCQkgICJceDY4XHg2NVx4MjBceDc0XHg2OVx4NmRceDY1XHgyMCIKKwkJCSAgIlx4NjZceDZmXHg3Mlx4MjBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHg2YiwgMHg3NywgMHhiNCwgMHhkNiwgMHgzMCwgMHgwNiwgMHhkZSwgMHhlNiwKLQkJCSAgICAweDA1LCAweGIxLCAweDU2LCAweGUyLCAweDc0LCAweDAzLCAweDk3LCAweDkzLAotCQkJICAgIDB4NTgsIDB4ZGUsIDB4YjksIDB4ZTcsIDB4MTUsIDB4NDYsIDB4MTYsIDB4ZDksCi0JCQkgICAgMHg1OSwgMHhmMSwgMHg2NSwgMHgyYiwgMHhkNSwgMHhmZiwgMHg5MiwgMHhjYyB9LAorCQkucmVzdWx0CT0gIlx4NmJceDc3XHhiNFx4ZDZceDMwXHgwNlx4ZGVceGU2IgorCQkJICAiXHgwNVx4YjFceDU2XHhlMlx4NzRceDAzXHg5N1x4OTMiCisJCQkgICJceDU4XHhkZVx4YjlceGU3XHgxNVx4NDZceDE2XHhkOSIKKwkJCSAgIlx4NTlceGYxXHg2NVx4MmJceGQ1XHhmZlx4OTJceGNjIiwKIAkJLnJsZW4JPSAzMiwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBiZl9jYmNfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBGcm9tIE9wZW5TU0wgKi8KLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLQkJCSAgICAweGYwLCAweGUxLCAweGQyLCAweGMzLCAweGI0LCAweGE1LCAweDk2LCAweDg3IH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisJCQkgICJceGYwXHhlMVx4ZDJceGMzXHhiNFx4YTVceDk2XHg4NyIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAotCQkuaW5wdXQJPSB7IDB4NmIsIDB4NzcsIDB4YjQsIDB4ZDYsIDB4MzAsIDB4MDYsIDB4ZGUsIDB4ZTYsCi0JCQkgICAgMHgwNSwgMHhiMSwgMHg1NiwgMHhlMiwgMHg3NCwgMHgwMywgMHg5NywgMHg5MywKLQkJCSAgICAweDU4LCAweGRlLCAweGI5LCAweGU3LCAweDE1LCAweDQ2LCAweDE2LCAweGQ5LAotCQkJICAgIDB4NTksIDB4ZjEsIDB4NjUsIDB4MmIsIDB4ZDUsIDB4ZmYsIDB4OTIsIDB4Y2MgfSwKKwkJLml2CT0gIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKKwkJLmlucHV0CT0gIlx4NmJceDc3XHhiNFx4ZDZceDMwXHgwNlx4ZGVceGU2IgorCQkJICAiXHgwNVx4YjFceDU2XHhlMlx4NzRceDAzXHg5N1x4OTMiCisJCQkgICJceDU4XHhkZVx4YjlceGU3XHgxNVx4NDZceDE2XHhkOSIKKwkJCSAgIlx4NTlceGYxXHg2NVx4MmJceGQ1XHhmZlx4OTJceGNjIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHgzNywgMHgzNiwgMHgzNSwgMHgzNCwgMHgzMywgMHgzMiwgMHgzMSwgMHgyMCwKLQkJCSAgICAweDRlLCAweDZmLCAweDc3LCAweDIwLCAweDY5LCAweDczLCAweDIwLCAweDc0LAotCQkJICAgIDB4NjgsIDB4NjUsIDB4MjAsIDB4NzQsIDB4NjksIDB4NmQsIDB4NjUsIDB4MjAsCi0JCQkgICAgMHg2NiwgMHg2ZiwgMHg3MiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkucmVzdWx0CT0gIlx4MzdceDM2XHgzNVx4MzRceDMzXHgzMlx4MzFceDIwIgorCQkJICAiXHg0ZVx4NmZceDc3XHgyMFx4NjlceDczXHgyMFx4NzQiCisJCQkgICJceDY4XHg2NVx4MjBceDc0XHg2OVx4NmRceDY1XHgyMCIKKwkJCSAgIlx4NjZceDZmXHg3Mlx4MjBceDAwXHgwMFx4MDBceDAwIiwKIAkJLnJsZW4JPSAzMiwKIAl9LAogfTsKQEAgLTE4ODUsMTU4ICsxOTExLDE1OCBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHRmX2VuY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmtleQk9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmlucHV0CT0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg5ZiwgMHg1OCwgMHg5ZiwgMHg1YywgMHhmNiwgMHgxMiwgMHgyYywgMHgzMiwKLQkJCSAgICAweGI2LCAweGJmLCAweGVjLCAweDJmLCAweDJhLCAweGU4LCAweGMzLCAweDVhIH0sCisJCS5yZXN1bHQJPSAiXHg5Zlx4NThceDlmXHg1Y1x4ZjZceDEyXHgyY1x4MzIiCisJCQkgICJceGI2XHhiZlx4ZWNceDJmXHgyYVx4ZThceGMzXHg1YSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotCQkJICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsCi0JCQkgICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NyB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiCisJCQkgICJceDAwXHgxMVx4MjJceDMzXHg0NFx4NTVceDY2XHg3NyIsCiAJCS5rbGVuCT0gMjQsCi0JCS5pbnB1dAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmlucHV0CT0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHhjZiwgMHhkMSwgMHhkMiwgMHhlNSwgMHhhOSwgMHhiZSwgMHg5YywgMHhkZiwKLQkJCSAgICAweDUwLCAweDFmLCAweDEzLCAweGI4LCAweDkyLCAweGJkLCAweDIyLCAweDQ4IH0sCisJCS5yZXN1bHQJPSAiXHhjZlx4ZDFceGQyXHhlNVx4YTlceGJlXHg5Y1x4ZGYiCisJCQkgICJceDUwXHgxZlx4MTNceGI4XHg5Mlx4YmRceDIyXHg0OCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotCQkJICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsCi0JCQkgICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKLQkJCSAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisJCQkgICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIKKwkJCSAgIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3IgorCQkJICAiXHg4OFx4OTlceGFhXHhiYlx4Y2NceGRkXHhlZVx4ZmYiLAogCQkua2xlbgk9IDMyLAotCQkuaW5wdXQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5pbnB1dAk9IHplcm9lZF9zdHJpbmcsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MzcsIDB4NTIsIDB4N2IsIDB4ZTAsIDB4MDUsIDB4MjMsIDB4MzQsIDB4YjgsCi0JCQkgICAgMHg5ZiwgMHgwYywgMHhmYywgMHhjYSwgMHhlOCwgMHg3YywgMHhmYSwgMHgyMCB9LAorCQkucmVzdWx0CT0gIlx4MzdceDUyXHg3Ylx4ZTBceDA1XHgyM1x4MzRceGI4IgorCQkJICAiXHg5Zlx4MGNceGZjXHhjYVx4ZThceDdjXHhmYVx4MjAiLAogCQkucmxlbgk9IDE2LAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHRmX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmtleQk9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg5ZiwgMHg1OCwgMHg5ZiwgMHg1YywgMHhmNiwgMHgxMiwgMHgyYywgMHgzMiwKLQkJCSAgICAweGI2LCAweGJmLCAweGVjLCAweDJmLCAweDJhLCAweGU4LCAweGMzLCAweDVhIH0sCisJCS5pbnB1dAk9ICJceDlmXHg1OFx4OWZceDVjXHhmNlx4MTJceDJjXHgzMiIKKwkJCSAgIlx4YjZceGJmXHhlY1x4MmZceDJhXHhlOFx4YzNceDVhIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLnJlc3VsdAk9IHplcm9lZF9zdHJpbmcsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotCQkJICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsCi0JCQkgICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NyB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiCisJCQkgICJceDAwXHgxMVx4MjJceDMzXHg0NFx4NTVceDY2XHg3NyIsCiAJCS5rbGVuCT0gMjQsCi0JCS5pbnB1dAk9IHsgMHhjZiwgMHhkMSwgMHhkMiwgMHhlNSwgMHhhOSwgMHhiZSwgMHg5YywgMHhkZiwKLQkJCSAgICAweDUwLCAweDFmLCAweDEzLCAweGI4LCAweDkyLCAweGJkLCAweDIyLCAweDQ4IH0sCisJCS5pbnB1dAk9ICJceGNmXHhkMVx4ZDJceGU1XHhhOVx4YmVceDljXHhkZiIKKwkJCSAgIlx4NTBceDFmXHgxM1x4YjhceDkyXHhiZFx4MjJceDQ4IiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLnJlc3VsdAk9IHplcm9lZF9zdHJpbmcsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotCQkJICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsCi0JCQkgICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKLQkJCSAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisJCQkgICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIKKwkJCSAgIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3IgorCQkJICAiXHg4OFx4OTlceGFhXHhiYlx4Y2NceGRkXHhlZVx4ZmYiLAogCQkua2xlbgk9IDMyLAotCQkuaW5wdXQJPSB7IDB4MzcsIDB4NTIsIDB4N2IsIDB4ZTAsIDB4MDUsIDB4MjMsIDB4MzQsIDB4YjgsCi0JCQkgICAgMHg5ZiwgMHgwYywgMHhmYywgMHhjYSwgMHhlOCwgMHg3YywgMHhmYSwgMHgyMCB9LAorCQkuaW5wdXQJPSAiXHgzN1x4NTJceDdiXHhlMFx4MDVceDIzXHgzNFx4YjgiCisJCQkgICJceDlmXHgwY1x4ZmNceGNhXHhlOFx4N2NceGZhXHgyMCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5yZXN1bHQJPSB6ZXJvZWRfc3RyaW5nLAogCQkucmxlbgk9IDE2LAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHRmX2NiY19lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEdlbmVyYXRlZCB3aXRoIE5ldHRsZSAqLwotCQkua2V5CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5CT0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLml2CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAotCQkuaW5wdXQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5pdgk9IHplcm9lZF9zdHJpbmcsCisJCS5pbnB1dAk9IHplcm9lZF9zdHJpbmcsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4OWYsIDB4NTgsIDB4OWYsIDB4NWMsIDB4ZjYsIDB4MTIsIDB4MmMsIDB4MzIsCi0JCQkgICAgMHhiNiwgMHhiZiwgMHhlYywgMHgyZiwgMHgyYSwgMHhlOCwgMHhjMywgMHg1YSB9LAorCQkucmVzdWx0CT0gIlx4OWZceDU4XHg5Zlx4NWNceGY2XHgxMlx4MmNceDMyIgorCQkJICAiXHhiNlx4YmZceGVjXHgyZlx4MmFceGU4XHhjM1x4NWEiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmtleQk9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHg5ZiwgMHg1OCwgMHg5ZiwgMHg1YywgMHhmNiwgMHgxMiwgMHgyYywgMHgzMiwKLQkJCSAgICAweGI2LCAweGJmLCAweGVjLCAweDJmLCAweDJhLCAweGU4LCAweGMzLCAweDVhIH0sCi0JCS5pbnB1dAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLml2CT0gIlx4OWZceDU4XHg5Zlx4NWNceGY2XHgxMlx4MmNceDMyIgorCQkJICAiXHhiNlx4YmZceGVjXHgyZlx4MmFceGU4XHhjM1x4NWEiLAorCQkuaW5wdXQJPSB6ZXJvZWRfc3RyaW5nLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweGQ0LCAweDkxLCAweGRiLCAweDE2LCAweGU3LCAweGIxLCAweGMzLCAweDllLAotCQkJICAgIDB4ODYsIDB4Y2IsIDB4MDgsIDB4NmIsIDB4NzgsIDB4OWYsIDB4NTQsIDB4MTkgfSwKKwkJLnJlc3VsdAk9ICJceGQ0XHg5MVx4ZGJceDE2XHhlN1x4YjFceGMzXHg5ZSIKKwkJCSAgIlx4ODZceGNiXHgwOFx4NmJceDc4XHg5Zlx4NTRceDE5IiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5rZXkJPSB6ZXJvZWRfc3RyaW5nLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4ZDQsIDB4OTEsIDB4ZGIsIDB4MTYsIDB4ZTcsIDB4YjEsIDB4YzMsIDB4OWUsCi0JCQkgICAgMHg4NiwgMHhjYiwgMHgwOCwgMHg2YiwgMHg3OCwgMHg5ZiwgMHg1NCwgMHgxOSB9LAotCQkuaW5wdXQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5pdgk9ICJceGQ0XHg5MVx4ZGJceDE2XHhlN1x4YjFceGMzXHg5ZSIKKwkJCSAgIlx4ODZceGNiXHgwOFx4NmJceDc4XHg5Zlx4NTRceDE5IiwKKwkJLmlucHV0CT0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHgwNSwgMHhlZiwgMHg4YywgMHg2MSwgMHhhOCwgMHgxMSwgMHg1OCwgMHgyNiwKLQkJCSAgICAweDM0LCAweGJhLCAweDVjLCAweGI3LCAweDEwLCAweDZhLCAweGE2LCAweDQxIH0sCisJCS5yZXN1bHQJPSAiXHgwNVx4ZWZceDhjXHg2MVx4YThceDExXHg1OFx4MjYiCisJCQkgICJceDM0XHhiYVx4NWNceGI3XHgxMFx4NmFceGE2XHg0MSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5CT0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLml2CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAotCQkuaW5wdXQJPSB7IFswIC4uLiA0N10gPSAweDAwIH0sCisJCS5pdgk9IHplcm9lZF9zdHJpbmcsCisJCS5pbnB1dAk9IHplcm9lZF9zdHJpbmcsCiAJCS5pbGVuCT0gNDgsCi0JCS5yZXN1bHQJPSB7IDB4OWYsIDB4NTgsIDB4OWYsIDB4NWMsIDB4ZjYsIDB4MTIsIDB4MmMsIDB4MzIsCi0JCQkgICAgMHhiNiwgMHhiZiwgMHhlYywgMHgyZiwgMHgyYSwgMHhlOCwgMHhjMywgMHg1YSwKLQkJCSAgICAweGQ0LCAweDkxLCAweGRiLCAweDE2LCAweGU3LCAweGIxLCAweGMzLCAweDllLAotCQkJICAgIDB4ODYsIDB4Y2IsIDB4MDgsIDB4NmIsIDB4NzgsIDB4OWYsIDB4NTQsIDB4MTksCi0JCQkgICAgMHgwNSwgMHhlZiwgMHg4YywgMHg2MSwgMHhhOCwgMHgxMSwgMHg1OCwgMHgyNiwKLQkJCSAgICAweDM0LCAweGJhLCAweDVjLCAweGI3LCAweDEwLCAweDZhLCAweGE2LCAweDQxIH0sCisJCS5yZXN1bHQJPSAiXHg5Zlx4NThceDlmXHg1Y1x4ZjZceDEyXHgyY1x4MzIiCisJCQkgICJceGI2XHhiZlx4ZWNceDJmXHgyYVx4ZThceGMzXHg1YSIKKwkJCSAgIlx4ZDRceDkxXHhkYlx4MTZceGU3XHhiMVx4YzNceDllIgorCQkJICAiXHg4Nlx4Y2JceDA4XHg2Ylx4NzhceDlmXHg1NFx4MTkiCisJCQkgICJceDA1XHhlZlx4OGNceDYxXHhhOFx4MTFceDU4XHgyNiIKKwkJCSAgIlx4MzRceGJhXHg1Y1x4YjdceDEwXHg2YVx4YTZceDQxIiwKIAkJLnJsZW4JPSA0OCwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyB0Zl9jYmNfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBSZXZlcnNlIG9mIHRoZSBmaXJzdCBmb3VyIGFib3ZlICovCi0JCS5rZXkJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5rZXkJPSB6ZXJvZWRfc3RyaW5nLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCi0JCS5pbnB1dAk9IHsgMHg5ZiwgMHg1OCwgMHg5ZiwgMHg1YywgMHhmNiwgMHgxMiwgMHgyYywgMHgzMiwKLQkJCSAgICAweGI2LCAweGJmLCAweGVjLCAweDJmLCAweDJhLCAweGU4LCAweGMzLCAweDVhIH0sCisJCS5pdgk9IHplcm9lZF9zdHJpbmcsCisJCS5pbnB1dAk9ICJceDlmXHg1OFx4OWZceDVjXHhmNlx4MTJceDJjXHgzMiIKKwkJCSAgIlx4YjZceGJmXHhlY1x4MmZceDJhXHhlOFx4YzNceDVhIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLnJlc3VsdAk9IHplcm9lZF9zdHJpbmcsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5CT0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLml2CT0geyAweDlmLCAweDU4LCAweDlmLCAweDVjLCAweGY2LCAweDEyLCAweDJjLCAweDMyLAotCQkJICAgIDB4YjYsIDB4YmYsIDB4ZWMsIDB4MmYsIDB4MmEsIDB4ZTgsIDB4YzMsIDB4NWEgfSwKLQkJLmlucHV0CT0geyAweGQ0LCAweDkxLCAweGRiLCAweDE2LCAweGU3LCAweGIxLCAweGMzLCAweDllLAotCQkJICAgIDB4ODYsIDB4Y2IsIDB4MDgsIDB4NmIsIDB4NzgsIDB4OWYsIDB4NTQsIDB4MTkgfSwKKwkJLml2CT0gIlx4OWZceDU4XHg5Zlx4NWNceGY2XHgxMlx4MmNceDMyIgorCQkJICAiXHhiNlx4YmZceGVjXHgyZlx4MmFceGU4XHhjM1x4NWEiLAorCQkuaW5wdXQJPSAiXHhkNFx4OTFceGRiXHgxNlx4ZTdceGIxXHhjM1x4OWUiCisJCQkgICJceDg2XHhjYlx4MDhceDZiXHg3OFx4OWZceDU0XHgxOSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5yZXN1bHQJPSB6ZXJvZWRfc3RyaW5nLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmtleQk9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHhkNCwgMHg5MSwgMHhkYiwgMHgxNiwgMHhlNywgMHhiMSwgMHhjMywgMHg5ZSwKLQkJCSAgICAweDg2LCAweGNiLCAweDA4LCAweDZiLCAweDc4LCAweDlmLCAweDU0LCAweDE5IH0sCi0JCS5pbnB1dAk9IHsgMHgwNSwgMHhlZiwgMHg4YywgMHg2MSwgMHhhOCwgMHgxMSwgMHg1OCwgMHgyNiwKLQkJCSAgICAweDM0LCAweGJhLCAweDVjLCAweGI3LCAweDEwLCAweDZhLCAweGE2LCAweDQxIH0sCisJCS5pdgk9ICJceGQ0XHg5MVx4ZGJceDE2XHhlN1x4YjFceGMzXHg5ZSIKKwkJCSAgIlx4ODZceGNiXHgwOFx4NmJceDc4XHg5Zlx4NTRceDE5IiwKKwkJLmlucHV0CT0gIlx4MDVceGVmXHg4Y1x4NjFceGE4XHgxMVx4NThceDI2IgorCQkJICAiXHgzNFx4YmFceDVjXHhiN1x4MTBceDZhXHhhNlx4NDEiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkucmVzdWx0CT0gemVyb2VkX3N0cmluZywKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5rZXkJPSB6ZXJvZWRfc3RyaW5nLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCi0JCS5pbnB1dAk9IHsgMHg5ZiwgMHg1OCwgMHg5ZiwgMHg1YywgMHhmNiwgMHgxMiwgMHgyYywgMHgzMiwKLQkJCSAgICAweGI2LCAweGJmLCAweGVjLCAweDJmLCAweDJhLCAweGU4LCAweGMzLCAweDVhLAotCQkJICAgIDB4ZDQsIDB4OTEsIDB4ZGIsIDB4MTYsIDB4ZTcsIDB4YjEsIDB4YzMsIDB4OWUsCi0JCQkgICAgMHg4NiwgMHhjYiwgMHgwOCwgMHg2YiwgMHg3OCwgMHg5ZiwgMHg1NCwgMHgxOSwKLQkJCSAgICAweDA1LCAweGVmLCAweDhjLCAweDYxLCAweGE4LCAweDExLCAweDU4LCAweDI2LAotCQkJICAgIDB4MzQsIDB4YmEsIDB4NWMsIDB4YjcsIDB4MTAsIDB4NmEsIDB4YTYsIDB4NDEgfSwKKwkJLml2CT0gemVyb2VkX3N0cmluZywKKwkJLmlucHV0CT0gIlx4OWZceDU4XHg5Zlx4NWNceGY2XHgxMlx4MmNceDMyIgorCQkJICAiXHhiNlx4YmZceGVjXHgyZlx4MmFceGU4XHhjM1x4NWEiCisJCQkgICJceGQ0XHg5MVx4ZGJceDE2XHhlN1x4YjFceGMzXHg5ZSIKKwkJCSAgIlx4ODZceGNiXHgwOFx4NmJceDc4XHg5Zlx4NTRceDE5IgorCQkJICAiXHgwNVx4ZWZceDhjXHg2MVx4YThceDExXHg1OFx4MjYiCisJCQkgICJceDM0XHhiYVx4NWNceGI3XHgxMFx4NmFceGE2XHg0MSIsCiAJCS5pbGVuCT0gNDgsCi0JCS5yZXN1bHQJPSB7IFswIC4uLiA0N10gPSAweDAwIH0sCisJCS5yZXN1bHQJPSB6ZXJvZWRfc3RyaW5nLAogCQkucmxlbgk9IDQ4LAogCX0sCiB9OwpAQCAtMjA1Myw5MCArMjA3OSw5MCBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHNlcnBlbnRfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCQkuaW5wdXQJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MTIsIDB4MDcsIDB4ZmMsIDB4Y2UsIDB4OWIsIDB4ZDAsIDB4ZDYsIDB4NDcsCi0JCQkgICAgMHg2YSwgMHhlOSwgMHg4ZiwgMHhiZSwgMHhkMSwgMHg0MywgMHhhMCwgMHhlMiB9LAorCQkucmVzdWx0CT0gIlx4MTJceDA3XHhmY1x4Y2VceDliXHhkMFx4ZDZceDQ3IgorCQkJICAiXHg2YVx4ZTlceDhmXHhiZVx4ZDFceDQzXHhhMFx4ZTIiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisJCS5pbnB1dAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg0YywgMHg3ZCwgMHg4YSwgMHgzMiwgMHg4MCwgMHg3MiwgMHhhMiwgMHgyYywKLQkJCSAgICAweDgyLCAweDNlLCAweDRhLCAweDFmLCAweDNhLCAweGNkLCAweGExLCAweDZkIH0sCisJCS5yZXN1bHQJPSAiXHg0Y1x4N2RceDhhXHgzMlx4ODBceDcyXHhhMlx4MmMiCisJCQkgICJceDgyXHgzZVx4NGFceDFmXHgzYVx4Y2RceGExXHg2ZCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiLAogCQkua2xlbgk9IDMyLAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCQkuaW5wdXQJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4ZGUsIDB4MjYsIDB4OWYsIDB4ZjgsIDB4MzMsIDB4ZTQsIDB4MzIsIDB4YjgsCi0JCQkgICAgMHg1YiwgMHgyZSwgMHg4OCwgMHhkMiwgMHg3MCwgMHgxYywgMHhlNywgMHg1YyB9LAorCQkucmVzdWx0CT0gIlx4ZGVceDI2XHg5Zlx4ZjhceDMzXHhlNFx4MzJceGI4IgorCQkJICAiXHg1Ylx4MmVceDg4XHhkMlx4NzBceDFjXHhlN1x4NWMiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgWzE1XSA9IDB4ODAgfSwKKwkJLmtleQk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkuaW5wdXQJPSB6ZXJvZWRfc3RyaW5nLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweGRkLCAweGQyLCAweDZiLCAweDk4LCAweGE1LCAweGZmLCAweGQ4LCAweDJjLAotCQkJICAgIDB4MDUsIDB4MzQsIDB4NWEsIDB4OWQsIDB4YWQsIDB4YmYsIDB4YWYsIDB4NDl9LAorCQkucmVzdWx0CT0gIlx4ZGRceGQyXHg2Ylx4OThceGE1XHhmZlx4ZDhceDJjIgorCQkJICAiXHgwNVx4MzRceDVhXHg5ZFx4YWRceGJmXHhhZlx4NDkiLAogCQkucmxlbgk9IDE2LAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHRuZXByZXNfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBLZXlTaXplPTEyOCwgUFQ9MCwgST0xICovCi0JCS5pbnB1dAk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCS5rZXkgICAgPSB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkuaW5wdXQJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5rZXkgICAgPSAiXHg4MFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5rbGVuICAgPSAxNiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg0OSwgMHhhZiwgMHhiZiwgMHhhZCwgMHg5ZCwgMHg1YSwgMHgzNCwgMHgwNSwKLQkJCSAgICAweDJjLCAweGQ4LCAweGZmLCAweGE1LCAweDk4LCAweDZiLCAweGQyLCAweGRkIH0sCisJCS5yZXN1bHQJPSAiXHg0OVx4YWZceGJmXHhhZFx4OWRceDVhXHgzNFx4MDUiCisJCQkgICJceDJjXHhkOFx4ZmZceGE1XHg5OFx4NmJceGQyXHhkZCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgeyAvKiBLZXlTaXplPTE5MiwgUFQ9MCwgST0xICovCi0JCS5rZXkJPSB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5rZXkJPSAiXHg4MFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmtsZW4JPSAyNCwKLQkJLmlucHV0CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLmlucHV0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweGU3LCAweDhlLCAweDU0LCAweDAyLCAweGM3LCAweDE5LCAweDU1LCAweDY4LAotCQkJICAgIDB4YWMsIDB4MzYsIDB4NzgsIDB4ZjcsIDB4YTMsIDB4ZjYsIDB4MGMsIDB4NjYgfSwKKwkJLnJlc3VsdAk9ICJceGU3XHg4ZVx4NTRceDAyXHhjN1x4MTlceDU1XHg2OCIKKwkJCSAgIlx4YWNceDM2XHg3OFx4ZjdceGEzXHhmNlx4MGNceDY2IiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7IC8qIEtleVNpemU9MjU2LCBQVD0wLCBJPTEgKi8KLQkJLmtleQk9IHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkua2V5CT0gIlx4ODBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLmlucHV0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweGFiLCAweGVkLCAweDk2LCAweGU3LCAweDY2LCAweGJmLCAweDI4LCAweGNiLAotCQkJICAgIDB4YzAsIDB4ZWIsIDB4ZDIsIDB4MWEsIDB4ODIsIDB4ZWYsIDB4MDgsIDB4MTkgfSwKKwkJLnJlc3VsdAk9ICJceGFiXHhlZFx4OTZceGU3XHg2Nlx4YmZceDI4XHhjYiIKKwkJCSAgIlx4YzBceGViXHhkMlx4MWFceDgyXHhlZlx4MDhceDE5IiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7IC8qIEtleVNpemU9MjU2LCBJPTI1NyAqLwotCSAgICAgICAgLmtleQk9IHsgMHgxZiwgMHgxZSwgMHgxZCwgMHgxYywgMHgxYiwgMHgxYSwgMHgxOSwgMHgxOCwKLQkJCSAgICAweDE3LCAweDE2LCAweDE1LCAweDE0LCAweDEzLCAweDEyLCAweDExLCAweDEwLAotCQkJICAgIDB4MGYsIDB4MGUsIDB4MGQsIDB4MGMsIDB4MGIsIDB4MGEsIDB4MDksIDB4MDgsCi0JCQkgICAgMHgwNywgMHgwNiwgMHgwNSwgMHgwNCwgMHgwMywgMHgwMiwgMHgwMSwgMHgwMCB9LAorCQkua2V5CT0gIlx4MWZceDFlXHgxZFx4MWNceDFiXHgxYVx4MTlceDE4IgorCQkJICAiXHgxN1x4MTZceDE1XHgxNFx4MTNceDEyXHgxMVx4MTAiCisJCQkgICJceDBmXHgwZVx4MGRceDBjXHgwYlx4MGFceDA5XHgwOCIKKwkJCSAgIlx4MDdceDA2XHgwNVx4MDRceDAzXHgwMlx4MDFceDAwIiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweDBmLCAweDBlLCAweDBkLCAweDBjLCAweDBiLCAweDBhLCAweDA5LCAweDA4LAotCQkJICAgIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDAgfSwKKwkJLmlucHV0CT0gIlx4MGZceDBlXHgwZFx4MGNceDBiXHgwYVx4MDlceDA4IgorCQkJICAiXHgwN1x4MDZceDA1XHgwNFx4MDNceDAyXHgwMVx4MDAiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDVjLCAweGU3LCAweDFjLCAweDcwLCAweGQyLCAweDg4LCAweDJlLCAweDViLAotCQkJICAgIDB4YjgsIDB4MzIsIDB4ZTQsIDB4MzMsIDB4ZjgsIDB4OWYsIDB4MjYsIDB4ZGUgfSwKKwkJLnJlc3VsdAk9ICJceDVjXHhlN1x4MWNceDcwXHhkMlx4ODhceDJlXHg1YiIKKwkJCSAgIlx4YjhceDMyXHhlNFx4MzNceGY4XHg5Zlx4MjZceGRlIiwKIAkJLnJsZW4JPSAxNiwKIAl9LAogfTsKQEAgLTIxNDQsODIgKzIxNzAsODIgQEAKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBzZXJwZW50X2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmlucHV0CT0geyAweDEyLCAweDA3LCAweGZjLCAweGNlLCAweDliLCAweGQwLCAweGQ2LCAweDQ3LAotCQkJICAgIDB4NmEsIDB4ZTksIDB4OGYsIDB4YmUsIDB4ZDEsIDB4NDMsIDB4YTAsIDB4ZTIgfSwKKwkJLmlucHV0CT0gIlx4MTJceDA3XHhmY1x4Y2VceDliXHhkMFx4ZDZceDQ3IgorCQkJICAiXHg2YVx4ZTlceDhmXHhiZVx4ZDFceDQzXHhhMFx4ZTIiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCQkua2V5CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4NGMsIDB4N2QsIDB4OGEsIDB4MzIsIDB4ODAsIDB4NzIsIDB4YTIsIDB4MmMsCi0JCQkgICAgMHg4MiwgMHgzZSwgMHg0YSwgMHgxZiwgMHgzYSwgMHhjZCwgMHhhMSwgMHg2ZCB9LAorCQkuaW5wdXQJPSAiXHg0Y1x4N2RceDhhXHgzMlx4ODBceDcyXHhhMlx4MmMiCisJCQkgICJceDgyXHgzZVx4NGFceDFmXHgzYVx4Y2RceGExXHg2ZCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCQkucmVzdWx0CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAorCQkua2V5CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxNyIKKwkJCSAgIlx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweGRlLCAweDI2LCAweDlmLCAweGY4LCAweDMzLCAweGU0LCAweDMyLCAweGI4LAotCQkJICAgIDB4NWIsIDB4MmUsIDB4ODgsIDB4ZDIsIDB4NzAsIDB4MWMsIDB4ZTcsIDB4NWMgfSwKKwkJLmlucHV0CT0gIlx4ZGVceDI2XHg5Zlx4ZjhceDMzXHhlNFx4MzJceGI4IgorCQkJICAiXHg1Ylx4MmVceDg4XHhkMlx4NzBceDFjXHhlN1x4NWMiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IFsxNV0gPSAweDgwIH0sCisJCS5rZXkJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MCIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHhkZCwgMHhkMiwgMHg2YiwgMHg5OCwgMHhhNSwgMHhmZiwgMHhkOCwgMHgyYywKLQkJCSAgICAweDA1LCAweDM0LCAweDVhLCAweDlkLCAweGFkLCAweGJmLCAweGFmLCAweDQ5fSwKKwkJLmlucHV0CT0gIlx4ZGRceGQyXHg2Ylx4OThceGE1XHhmZlx4ZDhceDJjIgorCQkJICAiXHgwNVx4MzRceDVhXHg5ZFx4YWRceGJmXHhhZlx4NDkiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkucmVzdWx0CT0gemVyb2VkX3N0cmluZywKIAkJLnJsZW4JPSAxNiwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyB0bmVwcmVzX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmlucHV0CT0geyAweDQxLCAweGNjLCAweDZiLCAweDMxLCAweDU5LCAweDMxLCAweDQ1LCAweDk3LAotCQkJICAgIDB4NmQsIDB4NmYsIDB4YmIsIDB4MzgsIDB4NGIsIDB4MzcsIDB4MjEsIDB4MjggfSwKKwkJLmlucHV0CT0gIlx4NDFceGNjXHg2Ylx4MzFceDU5XHgzMVx4NDVceDk3IgorCQkJICAiXHg2ZFx4NmZceGJiXHgzOFx4NGJceDM3XHgyMVx4MjgiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCQkua2V5CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4ZWEsIDB4ZjQsIDB4ZDcsIDB4ZmMsIDB4ZDgsIDB4MDEsIDB4MzQsIDB4NDcsCi0JCQkgICAgMHg4MSwgMHg0NSwgMHgwYiwgMHhmYSwgMHgwYywgMHhkNiwgMHhhZCwgMHg2ZSB9LAorCQkuaW5wdXQJPSAiXHhlYVx4ZjRceGQ3XHhmY1x4ZDhceDAxXHgzNFx4NDciCisJCQkgICJceDgxXHg0NVx4MGJceGZhXHgwY1x4ZDZceGFkXHg2ZSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCQkucmVzdWx0CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAorCQkua2V5CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxNyIKKwkJCSAgIlx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweDY0LCAweGE5LCAweDFhLCAweDM3LCAweGVkLCAweDlmLCAweGU3LCAweDQ5LAotCQkJICAgIDB4YTgsIDB4NGUsIDB4NzYsIDB4ZDYsIDB4ZjUsIDB4MGQsIDB4NzgsIDB4ZWUgfSwKKwkJLmlucHV0CT0gIlx4NjRceGE5XHgxYVx4MzdceGVkXHg5Zlx4ZTdceDQ5IgorCQkJICAiXHhhOFx4NGVceDc2XHhkNlx4ZjVceDBkXHg3OFx4ZWUiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7IC8qIEtleVNpemU9MTI4LCBJPTEyMSAqLwotCQkua2V5CT0geyBbMTVdID0gMHg4MCB9LAorCQkua2V5CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODAiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4M2QsIDB4ZGEsIDB4YmYsIDB4YzAsIDB4MDYsIDB4ZGEsIDB4YWIsIDB4MDYsCi0JCQkgICAgMHg0NiwgMHgyYSwgMHhmNCwgMHhlZiwgMHg4MSwgMHg1NCwgMHg0ZSwgMHgyNiB9LAorCQkuaW5wdXQJPSAiXHgzZFx4ZGFceGJmXHhjMFx4MDZceGRhXHhhYlx4MDYiCisJCQkgICJceDQ2XHgyYVx4ZjRceGVmXHg4MVx4NTRceDRlXHgyNiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5yZXN1bHQJPSB6ZXJvZWRfc3RyaW5nLAogCQkucmxlbgk9IDE2LAogCX0sCiB9OwpAQCAtMjIzMSw2OCArMjI1Nyw2OCBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGNhc3Q2X2VuY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgMHgyMywgMHg0MiwgMHhiYiwgMHg5ZSwgMHhmYSwgMHgzOCwgMHg1NCwgMHgyYywKLQkJCSAgICAweDBhLCAweGY3LCAweDU2LCAweDQ3LCAweGYyLCAweDlmLCAweDYxLCAweDVkIH0sCisJCS5rZXkJPSAiXHgyM1x4NDJceGJiXHg5ZVx4ZmFceDM4XHg1NFx4MmMiCisJCQkgICJceDBhXHhmN1x4NTZceDQ3XHhmMlx4OWZceDYxXHg1ZCIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmlucHV0CT0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHhjOCwgMHg0MiwgMHhhMCwgMHg4OSwgMHg3MiwgMHhiNCwgMHgzZCwgMHgyMCwKLQkJCSAgICAweDgzLCAweDZjLCAweDkxLCAweGQxLCAweGI3LCAweDUzLCAweDBmLCAweDZiIH0sCisJCS5yZXN1bHQJPSAiXHhjOFx4NDJceGEwXHg4OVx4NzJceGI0XHgzZFx4MjAiCisJCQkgICJceDgzXHg2Y1x4OTFceGQxXHhiN1x4NTNceDBmXHg2YiIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDIzLCAweDQyLCAweGJiLCAweDllLCAweGZhLCAweDM4LCAweDU0LCAweDJjLAotCQkJICAgIDB4YmUsIDB4ZDAsIDB4YWMsIDB4ODMsIDB4OTQsIDB4MGEsIDB4YzIsIDB4OTgsCi0JCQkgICAgMHhiYSwgMHhjNywgMHg3YSwgMHg3NywgMHgxNywgMHg5NCwgMHgyOCwgMHg2MyB9LAorCQkua2V5CT0gIlx4MjNceDQyXHhiYlx4OWVceGZhXHgzOFx4NTRceDJjIgorCQkJICAiXHhiZVx4ZDBceGFjXHg4M1x4OTRceDBhXHhjMlx4OTgiCisJCQkgICJceGJhXHhjN1x4N2FceDc3XHgxN1x4OTRceDI4XHg2MyIsCiAJCS5rbGVuCT0gMjQsCi0JCS5pbnB1dAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmlucHV0CT0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHgxYiwgMHgzOCwgMHg2YywgMHgwMiwgMHgxMCwgMHhkYywgMHhhZCwgMHhjYiwKLQkJCSAgICAweGRkLCAweDBlLCAweDQxLCAweGFhLCAweDA4LCAweGE3LCAweGE3LCAweGU4IH0sCisJCS5yZXN1bHQJPSAiXHgxYlx4MzhceDZjXHgwMlx4MTBceGRjXHhhZFx4Y2IiCisJCQkgICJceGRkXHgwZVx4NDFceGFhXHgwOFx4YTdceGE3XHhlOCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDIzLCAweDQyLCAweGJiLCAweDllLCAweGZhLCAweDM4LCAweDU0LCAweDJjLAotCQkJICAgIDB4YmUsIDB4ZDAsIDB4YWMsIDB4ODMsIDB4OTQsIDB4MGEsIDB4YzIsIDB4OTgsCi0JCQkgICAgMHg4ZCwgMHg3YywgMHg0NywgMHhjZSwgMHgyNiwgMHg0OSwgMHgwOCwgMHg0NiwKLQkJCSAgICAweDFjLCAweGMxLCAweGI1LCAweDEzLCAweDdhLCAweGU2LCAweGI2LCAweDA0IH0sCisJCS5rZXkJPSAiXHgyM1x4NDJceGJiXHg5ZVx4ZmFceDM4XHg1NFx4MmMiCisJCQkgICJceGJlXHhkMFx4YWNceDgzXHg5NFx4MGFceGMyXHg5OCIKKwkJCSAgIlx4OGRceDdjXHg0N1x4Y2VceDI2XHg0OVx4MDhceDQ2IgorCQkJICAiXHgxY1x4YzFceGI1XHgxM1x4N2FceGU2XHhiNlx4MDQiLAogCQkua2xlbgk9IDMyLAotCQkuaW5wdXQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5pbnB1dAk9IHplcm9lZF9zdHJpbmcsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4NGYsIDB4NmEsIDB4MjAsIDB4MzgsIDB4MjgsIDB4NjgsIDB4OTcsIDB4YjksCi0JCQkgICAgMHhjOSwgMHg4NywgMHgwMSwgMHgzNiwgMHg1NSwgMHgzMywgMHgxNywgMHhmYSB9LAorCQkucmVzdWx0CT0gIlx4NGZceDZhXHgyMFx4MzhceDI4XHg2OFx4OTdceGI5IgorCQkJICAiXHhjOVx4ODdceDAxXHgzNlx4NTVceDMzXHgxN1x4ZmEiLAogCQkucmxlbgk9IDE2LAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGNhc3Q2X2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgMHgyMywgMHg0MiwgMHhiYiwgMHg5ZSwgMHhmYSwgMHgzOCwgMHg1NCwgMHgyYywKLQkJCSAgICAweDBhLCAweGY3LCAweDU2LCAweDQ3LCAweGYyLCAweDlmLCAweDYxLCAweDVkIH0sCisJCS5rZXkJPSAiXHgyM1x4NDJceGJiXHg5ZVx4ZmFceDM4XHg1NFx4MmMiCisJCQkgICJceDBhXHhmN1x4NTZceDQ3XHhmMlx4OWZceDYxXHg1ZCIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHhjOCwgMHg0MiwgMHhhMCwgMHg4OSwgMHg3MiwgMHhiNCwgMHgzZCwgMHgyMCwKLQkJCSAgICAweDgzLCAweDZjLCAweDkxLCAweGQxLCAweGI3LCAweDUzLCAweDBmLCAweDZiIH0sCisJCS5pbnB1dAk9ICJceGM4XHg0Mlx4YTBceDg5XHg3Mlx4YjRceDNkXHgyMCIKKwkJCSAgIlx4ODNceDZjXHg5MVx4ZDFceGI3XHg1M1x4MGZceDZiIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLnJlc3VsdAk9IHplcm9lZF9zdHJpbmcsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDIzLCAweDQyLCAweGJiLCAweDllLCAweGZhLCAweDM4LCAweDU0LCAweDJjLAotCQkJICAgIDB4YmUsIDB4ZDAsIDB4YWMsIDB4ODMsIDB4OTQsIDB4MGEsIDB4YzIsIDB4OTgsCi0JCQkgICAgMHhiYSwgMHhjNywgMHg3YSwgMHg3NywgMHgxNywgMHg5NCwgMHgyOCwgMHg2MyB9LAorCQkua2V5CT0gIlx4MjNceDQyXHhiYlx4OWVceGZhXHgzOFx4NTRceDJjIgorCQkJICAiXHhiZVx4ZDBceGFjXHg4M1x4OTRceDBhXHhjMlx4OTgiCisJCQkgICJceGJhXHhjN1x4N2FceDc3XHgxN1x4OTRceDI4XHg2MyIsCiAJCS5rbGVuCT0gMjQsCi0JCS5pbnB1dAk9IHsgMHgxYiwgMHgzOCwgMHg2YywgMHgwMiwgMHgxMCwgMHhkYywgMHhhZCwgMHhjYiwKLQkJCSAgICAweGRkLCAweDBlLCAweDQxLCAweGFhLCAweDA4LCAweGE3LCAweGE3LCAweGU4IH0sCisJCS5pbnB1dAk9ICJceDFiXHgzOFx4NmNceDAyXHgxMFx4ZGNceGFkXHhjYiIKKwkJCSAgIlx4ZGRceDBlXHg0MVx4YWFceDA4XHhhN1x4YTdceGU4IiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLnJlc3VsdAk9IHplcm9lZF9zdHJpbmcsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDIzLCAweDQyLCAweGJiLCAweDllLCAweGZhLCAweDM4LCAweDU0LCAweDJjLAotCQkJICAgIDB4YmUsIDB4ZDAsIDB4YWMsIDB4ODMsIDB4OTQsIDB4MGEsIDB4YzIsIDB4OTgsCi0JCQkgICAgMHg4ZCwgMHg3YywgMHg0NywgMHhjZSwgMHgyNiwgMHg0OSwgMHgwOCwgMHg0NiwKLQkJCSAgICAweDFjLCAweGMxLCAweGI1LCAweDEzLCAweDdhLCAweGU2LCAweGI2LCAweDA0IH0sCisJCS5rZXkJPSAiXHgyM1x4NDJceGJiXHg5ZVx4ZmFceDM4XHg1NFx4MmMiCisJCQkgICJceGJlXHhkMFx4YWNceDgzXHg5NFx4MGFceGMyXHg5OCIKKwkJCSAgIlx4OGRceDdjXHg0N1x4Y2VceDI2XHg0OVx4MDhceDQ2IgorCQkJICAiXHgxY1x4YzFceGI1XHgxM1x4N2FceGU2XHhiNlx4MDQiLAogCQkua2xlbgk9IDMyLAotCQkuaW5wdXQJPSB7IDB4NGYsIDB4NmEsIDB4MjAsIDB4MzgsIDB4MjgsIDB4NjgsIDB4OTcsIDB4YjksCi0JCQkgICAgMHhjOSwgMHg4NywgMHgwMSwgMHgzNiwgMHg1NSwgMHgzMywgMHgxNywgMHhmYSB9LAorCQkuaW5wdXQJPSAiXHg0Zlx4NmFceDIwXHgzOFx4MjhceDY4XHg5N1x4YjkiCisJCQkgICJceGM5XHg4N1x4MDFceDM2XHg1NVx4MzNceDE3XHhmYSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5yZXN1bHQJPSB6ZXJvZWRfc3RyaW5nLAogCQkucmxlbgk9IDE2LAogCX0sCiB9OwpAQCAtMjMxOCwyMzggKzIzNDQsMjM4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYWVzX2VuY190dl90ZW1wbGF0ZVtdID0gewogCXsgLyogRnJvbSBGSVBTLTE5NyAqLwotCQkua2V5CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKwkJLmtleQk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAotCQkJICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmYgfSwKKwkJLmlucHV0CT0gIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3IgorCQkJICAiXHg4OFx4OTlceGFhXHhiYlx4Y2NceGRkXHhlZVx4ZmYiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDY5LCAweGM0LCAweGUwLCAweGQ4LCAweDZhLCAweDdiLCAweDA0LCAweDMwLAotCQkJICAgIDB4ZDgsIDB4Y2QsIDB4YjcsIDB4ODAsIDB4NzAsIDB4YjQsIDB4YzUsIDB4NWEgfSwKKwkJLnJlc3VsdAk9ICJceDY5XHhjNFx4ZTBceGQ4XHg2YVx4N2JceDA0XHgzMCIKKwkJCSAgIlx4ZDhceGNkXHhiN1x4ODBceDcwXHhiNFx4YzVceDVhIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3IH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IiwKIAkJLmtsZW4JPSAyNCwKLQkJLmlucHV0CT0geyAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAotCQkJICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmYgfSwKKwkJLmlucHV0CT0gIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3IgorCQkJICAiXHg4OFx4OTlceGFhXHhiYlx4Y2NceGRkXHhlZVx4ZmYiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweGRkLCAweGE5LCAweDdjLCAweGE0LCAweDg2LCAweDRjLCAweGRmLCAweGUwLAotCQkJICAgIDB4NmUsIDB4YWYsIDB4NzAsIDB4YTAsIDB4ZWMsIDB4MGQsIDB4NzEsIDB4OTEgfSwKKwkJLnJlc3VsdAk9ICJceGRkXHhhOVx4N2NceGE0XHg4Nlx4NGNceGRmXHhlMCIKKwkJCSAgIlx4NmVceGFmXHg3MFx4YTBceGVjXHgwZFx4NzFceDkxIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYgfSwKKwkJLmtleQk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIsCiAJCS5rbGVuCT0gMzIsCi0JCS5pbnB1dAk9IHsgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKLQkJCSAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmIH0sCisJCS5pbnB1dAk9ICJceDAwXHgxMVx4MjJceDMzXHg0NFx4NTVceDY2XHg3NyIKKwkJCSAgIlx4ODhceDk5XHhhYVx4YmJceGNjXHhkZFx4ZWVceGZmIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg4ZSwgMHhhMiwgMHhiNywgMHhjYSwgMHg1MSwgMHg2NywgMHg0NSwgMHhiZiwKLQkJCSAgICAweGVhLCAweGZjLCAweDQ5LCAweDkwLCAweDRiLCAweDQ5LCAweDYwLCAweDg5IH0sCisJCS5yZXN1bHQJPSAiXHg4ZVx4YTJceGI3XHhjYVx4NTFceDY3XHg0NVx4YmYiCisJCQkgICJceGVhXHhmY1x4NDlceDkwXHg0Ylx4NDlceDYwXHg4OSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYWVzX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsgLyogRnJvbSBGSVBTLTE5NyAqLwotCQkua2V5CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKwkJLmtleQk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDY5LCAweGM0LCAweGUwLCAweGQ4LCAweDZhLCAweDdiLCAweDA0LCAweDMwLAotCQkJICAgIDB4ZDgsIDB4Y2QsIDB4YjcsIDB4ODAsIDB4NzAsIDB4YjQsIDB4YzUsIDB4NWEgfSwKKwkJLmlucHV0CT0gIlx4NjlceGM0XHhlMFx4ZDhceDZhXHg3Ylx4MDRceDMwIgorCQkJICAiXHhkOFx4Y2RceGI3XHg4MFx4NzBceGI0XHhjNVx4NWEiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAotCQkJICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmYgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgxMVx4MjJceDMzXHg0NFx4NTVceDY2XHg3NyIKKwkJCSAgIlx4ODhceDk5XHhhYVx4YmJceGNjXHhkZFx4ZWVceGZmIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3IH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IiwKIAkJLmtsZW4JPSAyNCwKLQkJLmlucHV0CT0geyAweGRkLCAweGE5LCAweDdjLCAweGE0LCAweDg2LCAweDRjLCAweGRmLCAweGUwLAotCQkJICAgIDB4NmUsIDB4YWYsIDB4NzAsIDB4YTAsIDB4ZWMsIDB4MGQsIDB4NzEsIDB4OTEgfSwKKwkJLmlucHV0CT0gIlx4ZGRceGE5XHg3Y1x4YTRceDg2XHg0Y1x4ZGZceGUwIgorCQkJICAiXHg2ZVx4YWZceDcwXHhhMFx4ZWNceDBkXHg3MVx4OTEiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAotCQkJICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmYgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgxMVx4MjJceDMzXHg0NFx4NTVceDY2XHg3NyIKKwkJCSAgIlx4ODhceDk5XHhhYVx4YmJceGNjXHhkZFx4ZWVceGZmIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYgfSwKKwkJLmtleQk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIsCiAJCS5rbGVuCT0gMzIsCi0JCS5pbnB1dAk9IHsgMHg4ZSwgMHhhMiwgMHhiNywgMHhjYSwgMHg1MSwgMHg2NywgMHg0NSwgMHhiZiwKLQkJCSAgICAweGVhLCAweGZjLCAweDQ5LCAweDkwLCAweDRiLCAweDQ5LCAweDYwLCAweDg5IH0sCisJCS5pbnB1dAk9ICJceDhlXHhhMlx4YjdceGNhXHg1MVx4NjdceDQ1XHhiZiIKKwkJCSAgIlx4ZWFceGZjXHg0OVx4OTBceDRiXHg0OVx4NjBceDg5IiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKLQkJCSAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmIH0sCisJCS5yZXN1bHQJPSAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzciCisJCQkgICJceDg4XHg5OVx4YWFceGJiXHhjY1x4ZGRceGVlXHhmZiIsCiAJCS5ybGVuCT0gMTYsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYWVzX2NiY19lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gUkZDIDM2MDIgKi8KLQkJLmtleSAgICA9IHsgMHgwNiwgMHhhOSwgMHgyMSwgMHg0MCwgMHgzNiwgMHhiOCwgMHhhMSwgMHg1YiwKLQkJCSAgICAweDUxLCAweDJlLCAweDAzLCAweGQ1LCAweDM0LCAweDEyLCAweDAwLCAweDA2IH0sCisJCS5rZXkgICAgPSAiXHgwNlx4YTlceDIxXHg0MFx4MzZceGI4XHhhMVx4NWIiCisJCQkgICJceDUxXHgyZVx4MDNceGQ1XHgzNFx4MTJceDAwXHgwNiIsCiAJCS5rbGVuICAgPSAxNiwKLQkJLml2CT0geyAweDNkLCAweGFmLCAweGJhLCAweDQyLCAweDlkLCAweDllLCAweGI0LCAweDMwLAotCQkJICAgIDB4YjQsIDB4MjIsIDB4ZGEsIDB4ODAsIDB4MmMsIDB4OWYsIDB4YWMsIDB4NDEgfSwKLQkJLmlucHV0CT0geyAiU2luZ2xlIGJsb2NrIG1zZyIgfSwKKwkJLml2CT0gIlx4M2RceGFmXHhiYVx4NDJceDlkXHg5ZVx4YjRceDMwIgorCQkJICAiXHhiNFx4MjJceGRhXHg4MFx4MmNceDlmXHhhY1x4NDEiLAorCQkuaW5wdXQJPSAiU2luZ2xlIGJsb2NrIG1zZyIsCiAJCS5pbGVuICAgPSAxNiwKLQkJLnJlc3VsdCA9IHsgMHhlMywgMHg1MywgMHg3NywgMHg5YywgMHgxMCwgMHg3OSwgMHhhZSwgMHhiOCwKLQkJCSAgICAweDI3LCAweDA4LCAweDk0LCAweDJkLCAweGJlLCAweDc3LCAweDE4LCAweDFhIH0sCisJCS5yZXN1bHQgPSAiXHhlM1x4NTNceDc3XHg5Y1x4MTBceDc5XHhhZVx4YjgiCisJCQkgICJceDI3XHgwOFx4OTRceDJkXHhiZVx4NzdceDE4XHgxYSIsCiAJCS5ybGVuICAgPSAxNiwKIAl9LCB7Ci0JCS5rZXkgICAgPSB7IDB4YzIsIDB4ODYsIDB4NjksIDB4NmQsIDB4ODgsIDB4N2MsIDB4OWEsIDB4YTAsCi0JCQkgICAgMHg2MSwgMHgxYiwgMHhiYiwgMHgzZSwgMHgyMCwgMHgyNSwgMHhhNCwgMHg1YSB9LAorCQkua2V5ICAgID0gIlx4YzJceDg2XHg2OVx4NmRceDg4XHg3Y1x4OWFceGEwIgorCQkJICAiXHg2MVx4MWJceGJiXHgzZVx4MjBceDI1XHhhNFx4NWEiLAogCQkua2xlbiAgID0gMTYsCi0JCS5pdiAgICAgPSB7IDB4NTYsIDB4MmUsIDB4MTcsIDB4OTksIDB4NmQsIDB4MDksIDB4M2QsIDB4MjgsCi0JCQkgICAgMHhkZCwgMHhiMywgMHhiYSwgMHg2OSwgMHg1YSwgMHgyZSwgMHg2ZiwgMHg1OCB9LAotCQkuaW5wdXQgID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisJCS5pdiAgICAgPSAiXHg1Nlx4MmVceDE3XHg5OVx4NmRceDA5XHgzZFx4MjgiCisJCQkgICJceGRkXHhiM1x4YmFceDY5XHg1YVx4MmVceDZmXHg1OCIsCisJCS5pbnB1dCAgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiLAogCQkuaWxlbiAgID0gMzIsCi0JCS5yZXN1bHQgPSB7IDB4ZDIsIDB4OTYsIDB4Y2QsIDB4OTQsIDB4YzIsIDB4Y2MsIDB4Y2YsIDB4OGEsCi0JCQkgICAgMHgzYSwgMHg4NiwgMHgzMCwgMHgyOCwgMHhiNSwgMHhlMSwgMHhkYywgMHgwYSwKLQkJCSAgICAweDc1LCAweDg2LCAweDYwLCAweDJkLCAweDI1LCAweDNjLCAweGZmLCAweGY5LAotCQkJICAgIDB4MWIsIDB4ODIsIDB4NjYsIDB4YmUsIDB4YTYsIDB4ZDYsIDB4MWEsIDB4YjEgfSwKKwkJLnJlc3VsdCA9ICJceGQyXHg5Nlx4Y2RceDk0XHhjMlx4Y2NceGNmXHg4YSIKKwkJCSAgIlx4M2FceDg2XHgzMFx4MjhceGI1XHhlMVx4ZGNceDBhIgorCQkJICAiXHg3NVx4ODZceDYwXHgyZFx4MjVceDNjXHhmZlx4ZjkiCisJCQkgICJceDFiXHg4Mlx4NjZceGJlXHhhNlx4ZDZceDFhXHhiMSIsCiAJCS5ybGVuICAgPSAzMiwKIAl9LCB7IC8qIEZyb20gTklTVCBTUDgwMC0zOEEgKi8KLQkJLmtleQk9IHsgMHg4ZSwgMHg3MywgMHhiMCwgMHhmNywgMHhkYSwgMHgwZSwgMHg2NCwgMHg1MiwKLQkJCSAgICAweGM4LCAweDEwLCAweGYzLCAweDJiLCAweDgwLCAweDkwLCAweDc5LCAweGU1LAotCQkJICAgIDB4NjIsIDB4ZjgsIDB4ZWEsIDB4ZDIsIDB4NTIsIDB4MmMsIDB4NmIsIDB4N2IgfSwKKwkJLmtleQk9ICJceDhlXHg3M1x4YjBceGY3XHhkYVx4MGVceDY0XHg1MiIKKwkJCSAgIlx4YzhceDEwXHhmM1x4MmJceDgwXHg5MFx4NzlceGU1IgorCQkJICAiXHg2Mlx4ZjhceGVhXHhkMlx4NTJceDJjXHg2Ylx4N2IiLAogCQkua2xlbgk9IDI0LAotCQkuaXYJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAotCQkuaW5wdXQJPSB7IDB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsCi0JCQkgICAgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyYSwKLQkJCSAgICAweGFlLCAweDJkLCAweDhhLCAweDU3LCAweDFlLCAweDAzLCAweGFjLCAweDljLAotCQkJICAgIDB4OWUsIDB4YjcsIDB4NmYsIDB4YWMsIDB4NDUsIDB4YWYsIDB4OGUsIDB4NTEsCi0JCQkgICAgMHgzMCwgMHhjOCwgMHgxYywgMHg0NiwgMHhhMywgMHg1YywgMHhlNCwgMHgxMSwKLQkJCSAgICAweGU1LCAweGZiLCAweGMxLCAweDE5LCAweDFhLCAweDBhLCAweDUyLCAweGVmLAotCQkJICAgIDB4ZjYsIDB4OWYsIDB4MjQsIDB4NDUsIDB4ZGYsIDB4NGYsIDB4OWIsIDB4MTcsCi0JCQkgICAgMHhhZCwgMHgyYiwgMHg0MSwgMHg3YiwgMHhlNiwgMHg2YywgMHgzNywgMHgxMCB9LAorCQkuaXYJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisJCS5pbnB1dAk9ICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5NiIKKwkJCSAgIlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIgorCQkJICAiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWMiCisJCQkgICJceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIKKwkJCSAgIlx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExIgorCQkJICAiXHhlNVx4ZmJceGMxXHgxOVx4MWFceDBhXHg1Mlx4ZWYiCisJCQkgICJceGY2XHg5Zlx4MjRceDQ1XHhkZlx4NGZceDliXHgxNyIKKwkJCSAgIlx4YWRceDJiXHg0MVx4N2JceGU2XHg2Y1x4MzdceDEwIiwKIAkJLmlsZW4JPSA2NCwKLQkJLnJlc3VsdAk9IHsgMHg0ZiwgMHgwMiwgMHgxZCwgMHhiMiwgMHg0MywgMHhiYywgMHg2MywgMHgzZCwKLQkJCSAgICAweDcxLCAweDc4LCAweDE4LCAweDNhLCAweDlmLCAweGEwLCAweDcxLCAweGU4LAotCQkJICAgIDB4YjQsIDB4ZDksIDB4YWQsIDB4YTksIDB4YWQsIDB4N2QsIDB4ZWQsIDB4ZjQsCi0JCQkgICAgMHhlNSwgMHhlNywgMHgzOCwgMHg3NiwgMHgzZiwgMHg2OSwgMHgxNCwgMHg1YSwKLQkJCSAgICAweDU3LCAweDFiLCAweDI0LCAweDIwLCAweDEyLCAweGZiLCAweDdhLCAweGUwLAotCQkJICAgIDB4N2YsIDB4YTksIDB4YmEsIDB4YWMsIDB4M2QsIDB4ZjEsIDB4MDIsIDB4ZTAsCi0JCQkgICAgMHgwOCwgMHhiMCwgMHhlMiwgMHg3OSwgMHg4OCwgMHg1OSwgMHg4OCwgMHg4MSwKLQkJCSAgICAweGQ5LCAweDIwLCAweGE5LCAweGU2LCAweDRmLCAweDU2LCAweDE1LCAweGNkIH0sCisJCS5yZXN1bHQJPSAiXHg0Zlx4MDJceDFkXHhiMlx4NDNceGJjXHg2M1x4M2QiCisJCQkgICJceDcxXHg3OFx4MThceDNhXHg5Zlx4YTBceDcxXHhlOCIKKwkJCSAgIlx4YjRceGQ5XHhhZFx4YTlceGFkXHg3ZFx4ZWRceGY0IgorCQkJICAiXHhlNVx4ZTdceDM4XHg3Nlx4M2ZceDY5XHgxNFx4NWEiCisJCQkgICJceDU3XHgxYlx4MjRceDIwXHgxMlx4ZmJceDdhXHhlMCIKKwkJCSAgIlx4N2ZceGE5XHhiYVx4YWNceDNkXHhmMVx4MDJceGUwIgorCQkJICAiXHgwOFx4YjBceGUyXHg3OVx4ODhceDU5XHg4OFx4ODEiCisJCQkgICJceGQ5XHgyMFx4YTlceGU2XHg0Zlx4NTZceDE1XHhjZCIsCiAJCS5ybGVuCT0gNjQsCiAJfSwgewotCQkua2V5CT0geyAweDYwLCAweDNkLCAweGViLCAweDEwLCAweDE1LCAweGNhLCAweDcxLCAweGJlLAotCQkJICAgIDB4MmIsIDB4NzMsIDB4YWUsIDB4ZjAsIDB4ODUsIDB4N2QsIDB4NzcsIDB4ODEsCi0JCQkgICAgMHgxZiwgMHgzNSwgMHgyYywgMHgwNywgMHgzYiwgMHg2MSwgMHgwOCwgMHhkNywKLQkJCSAgICAweDJkLCAweDk4LCAweDEwLCAweGEzLCAweDA5LCAweDE0LCAweGRmLCAweGY0IH0sCisJCS5rZXkJPSAiXHg2MFx4M2RceGViXHgxMFx4MTVceGNhXHg3MVx4YmUiCisJCQkgICJceDJiXHg3M1x4YWVceGYwXHg4NVx4N2RceDc3XHg4MSIKKwkJCSAgIlx4MWZceDM1XHgyY1x4MDdceDNiXHg2MVx4MDhceGQ3IgorCQkJICAiXHgyZFx4OThceDEwXHhhM1x4MDlceDE0XHhkZlx4ZjQiLAogCQkua2xlbgk9IDMyLAotCQkuaXYJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAotCQkuaW5wdXQJPSB7IDB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsCi0JCQkgICAgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyYSwKLQkJCSAgICAweGFlLCAweDJkLCAweDhhLCAweDU3LCAweDFlLCAweDAzLCAweGFjLCAweDljLAotCQkJICAgIDB4OWUsIDB4YjcsIDB4NmYsIDB4YWMsIDB4NDUsIDB4YWYsIDB4OGUsIDB4NTEsCi0JCQkgICAgMHgzMCwgMHhjOCwgMHgxYywgMHg0NiwgMHhhMywgMHg1YywgMHhlNCwgMHgxMSwKLQkJCSAgICAweGU1LCAweGZiLCAweGMxLCAweDE5LCAweDFhLCAweDBhLCAweDUyLCAweGVmLAotCQkJICAgIDB4ZjYsIDB4OWYsIDB4MjQsIDB4NDUsIDB4ZGYsIDB4NGYsIDB4OWIsIDB4MTcsCi0JCQkgICAgMHhhZCwgMHgyYiwgMHg0MSwgMHg3YiwgMHhlNiwgMHg2YywgMHgzNywgMHgxMCB9LAorCQkuaXYJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisJCS5pbnB1dAk9ICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5NiIKKwkJCSAgIlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIgorCQkJICAiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWMiCisJCQkgICJceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIKKwkJCSAgIlx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExIgorCQkJICAiXHhlNVx4ZmJceGMxXHgxOVx4MWFceDBhXHg1Mlx4ZWYiCisJCQkgICJceGY2XHg5Zlx4MjRceDQ1XHhkZlx4NGZceDliXHgxNyIKKwkJCSAgIlx4YWRceDJiXHg0MVx4N2JceGU2XHg2Y1x4MzdceDEwIiwKIAkJLmlsZW4JPSA2NCwKLQkJLnJlc3VsdAk9IHsgMHhmNSwgMHg4YywgMHg0YywgMHgwNCwgMHhkNiwgMHhlNSwgMHhmMSwgMHhiYSwKLQkJCSAgICAweDc3LCAweDllLCAweGFiLCAweGZiLCAweDVmLCAweDdiLCAweGZiLCAweGQ2LAotCQkJICAgIDB4OWMsIDB4ZmMsIDB4NGUsIDB4OTYsIDB4N2UsIDB4ZGIsIDB4ODAsIDB4OGQsCi0JCQkgICAgMHg2NywgMHg5ZiwgMHg3NywgMHg3YiwgMHhjNiwgMHg3MCwgMHgyYywgMHg3ZCwKLQkJCSAgICAweDM5LCAweGYyLCAweDMzLCAweDY5LCAweGE5LCAweGQ5LCAweGJhLCAweGNmLAotCQkJICAgIDB4YTUsIDB4MzAsIDB4ZTIsIDB4NjMsIDB4MDQsIDB4MjMsIDB4MTQsIDB4NjEsCi0JCQkgICAgMHhiMiwgMHhlYiwgMHgwNSwgMHhlMiwgMHhjMywgMHg5YiwgMHhlOSwgMHhmYywKLQkJCSAgICAweGRhLCAweDZjLCAweDE5LCAweDA3LCAweDhjLCAweDZhLCAweDlkLCAweDFiIH0sCisJCS5yZXN1bHQJPSAiXHhmNVx4OGNceDRjXHgwNFx4ZDZceGU1XHhmMVx4YmEiCisJCQkgICJceDc3XHg5ZVx4YWJceGZiXHg1Zlx4N2JceGZiXHhkNiIKKwkJCSAgIlx4OWNceGZjXHg0ZVx4OTZceDdlXHhkYlx4ODBceDhkIgorCQkJICAiXHg2N1x4OWZceDc3XHg3Ylx4YzZceDcwXHgyY1x4N2QiCisJCQkgICJceDM5XHhmMlx4MzNceDY5XHhhOVx4ZDlceGJhXHhjZiIKKwkJCSAgIlx4YTVceDMwXHhlMlx4NjNceDA0XHgyM1x4MTRceDYxIgorCQkJICAiXHhiMlx4ZWJceDA1XHhlMlx4YzNceDliXHhlOVx4ZmMiCisJCQkgICJceGRhXHg2Y1x4MTlceDA3XHg4Y1x4NmFceDlkXHgxYiIsCiAJCS5ybGVuCT0gNjQsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYWVzX2NiY19kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gUkZDIDM2MDIgKi8KLQkJLmtleSAgICA9IHsgMHgwNiwgMHhhOSwgMHgyMSwgMHg0MCwgMHgzNiwgMHhiOCwgMHhhMSwgMHg1YiwKLQkJCSAgICAweDUxLCAweDJlLCAweDAzLCAweGQ1LCAweDM0LCAweDEyLCAweDAwLCAweDA2IH0sCisJCS5rZXkgICAgPSAiXHgwNlx4YTlceDIxXHg0MFx4MzZceGI4XHhhMVx4NWIiCisJCQkgICJceDUxXHgyZVx4MDNceGQ1XHgzNFx4MTJceDAwXHgwNiIsCiAJCS5rbGVuICAgPSAxNiwKLQkJLml2ICAgICA9IHsgMHgzZCwgMHhhZiwgMHhiYSwgMHg0MiwgMHg5ZCwgMHg5ZSwgMHhiNCwgMHgzMCwKLQkJCSAgICAweGI0LCAweDIyLCAweGRhLCAweDgwLCAweDJjLCAweDlmLCAweGFjLCAweDQxIH0sCi0JCS5pbnB1dCAgPSB7IDB4ZTMsIDB4NTMsIDB4NzcsIDB4OWMsIDB4MTAsIDB4NzksIDB4YWUsIDB4YjgsCi0JCQkgICAgMHgyNywgMHgwOCwgMHg5NCwgMHgyZCwgMHhiZSwgMHg3NywgMHgxOCwgMHgxYSB9LAorCQkuaXYgICAgID0gIlx4M2RceGFmXHhiYVx4NDJceDlkXHg5ZVx4YjRceDMwIgorCQkJICAiXHhiNFx4MjJceGRhXHg4MFx4MmNceDlmXHhhY1x4NDEiLAorCQkuaW5wdXQgID0gIlx4ZTNceDUzXHg3N1x4OWNceDEwXHg3OVx4YWVceGI4IgorCQkJICAiXHgyN1x4MDhceDk0XHgyZFx4YmVceDc3XHgxOFx4MWEiLAogCQkuaWxlbiAgID0gMTYsCi0JCS5yZXN1bHQgPSB7ICJTaW5nbGUgYmxvY2sgbXNnIiB9LAorCQkucmVzdWx0ID0gIlNpbmdsZSBibG9jayBtc2ciLAogCQkucmxlbiAgID0gMTYsCiAJfSwgewotCQkua2V5ICAgID0geyAweGMyLCAweDg2LCAweDY5LCAweDZkLCAweDg4LCAweDdjLCAweDlhLCAweGEwLAotCQkJICAgIDB4NjEsIDB4MWIsIDB4YmIsIDB4M2UsIDB4MjAsIDB4MjUsIDB4YTQsIDB4NWEgfSwKKwkJLmtleSAgICA9ICJceGMyXHg4Nlx4NjlceDZkXHg4OFx4N2NceDlhXHhhMCIKKwkJCSAgIlx4NjFceDFiXHhiYlx4M2VceDIwXHgyNVx4YTRceDVhIiwKIAkJLmtsZW4gICA9IDE2LAotCQkuaXYgICAgID0geyAweDU2LCAweDJlLCAweDE3LCAweDk5LCAweDZkLCAweDA5LCAweDNkLCAweDI4LAotCQkJICAgIDB4ZGQsIDB4YjMsIDB4YmEsIDB4NjksIDB4NWEsIDB4MmUsIDB4NmYsIDB4NTggfSwKLQkJLmlucHV0ICA9IHsgMHhkMiwgMHg5NiwgMHhjZCwgMHg5NCwgMHhjMiwgMHhjYywgMHhjZiwgMHg4YSwKLQkJCSAgICAweDNhLCAweDg2LCAweDMwLCAweDI4LCAweGI1LCAweGUxLCAweGRjLCAweDBhLAotCQkJICAgIDB4NzUsIDB4ODYsIDB4NjAsIDB4MmQsIDB4MjUsIDB4M2MsIDB4ZmYsIDB4ZjksCi0JCQkgICAgMHgxYiwgMHg4MiwgMHg2NiwgMHhiZSwgMHhhNiwgMHhkNiwgMHgxYSwgMHhiMSB9LAorCQkuaXYgICAgID0gIlx4NTZceDJlXHgxN1x4OTlceDZkXHgwOVx4M2RceDI4IgorCQkJICAiXHhkZFx4YjNceGJhXHg2OVx4NWFceDJlXHg2Zlx4NTgiLAorCQkuaW5wdXQgID0gIlx4ZDJceDk2XHhjZFx4OTRceGMyXHhjY1x4Y2ZceDhhIgorCQkJICAiXHgzYVx4ODZceDMwXHgyOFx4YjVceGUxXHhkY1x4MGEiCisJCQkgICJceDc1XHg4Nlx4NjBceDJkXHgyNVx4M2NceGZmXHhmOSIKKwkJCSAgIlx4MWJceDgyXHg2Nlx4YmVceGE2XHhkNlx4MWFceGIxIiwKIAkJLmlsZW4gICA9IDMyLAotCQkucmVzdWx0ID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisJCS5yZXN1bHQgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiLAogCQkucmxlbiAgID0gMzIsCiAJfSwgeyAvKiBGcm9tIE5JU1QgU1A4MDAtMzhBICovCi0JCS5rZXkJPSB7IDB4OGUsIDB4NzMsIDB4YjAsIDB4ZjcsIDB4ZGEsIDB4MGUsIDB4NjQsIDB4NTIsCi0JCQkgICAgMHhjOCwgMHgxMCwgMHhmMywgMHgyYiwgMHg4MCwgMHg5MCwgMHg3OSwgMHhlNSwKLQkJCSAgICAweDYyLCAweGY4LCAweGVhLCAweGQyLCAweDUyLCAweDJjLCAweDZiLCAweDdiIH0sCisJCS5rZXkJPSAiXHg4ZVx4NzNceGIwXHhmN1x4ZGFceDBlXHg2NFx4NTIiCisJCQkgICJceGM4XHgxMFx4ZjNceDJiXHg4MFx4OTBceDc5XHhlNSIKKwkJCSAgIlx4NjJceGY4XHhlYVx4ZDJceDUyXHgyY1x4NmJceDdiIiwKIAkJLmtsZW4JPSAyNCwKLQkJLml2CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKLQkJLmlucHV0CT0geyAweDRmLCAweDAyLCAweDFkLCAweGIyLCAweDQzLCAweGJjLCAweDYzLCAweDNkLAotCQkJICAgIDB4NzEsIDB4NzgsIDB4MTgsIDB4M2EsIDB4OWYsIDB4YTAsIDB4NzEsIDB4ZTgsCi0JCQkgICAgMHhiNCwgMHhkOSwgMHhhZCwgMHhhOSwgMHhhZCwgMHg3ZCwgMHhlZCwgMHhmNCwKLQkJCSAgICAweGU1LCAweGU3LCAweDM4LCAweDc2LCAweDNmLCAweDY5LCAweDE0LCAweDVhLAotCQkJICAgIDB4NTcsIDB4MWIsIDB4MjQsIDB4MjAsIDB4MTIsIDB4ZmIsIDB4N2EsIDB4ZTAsCi0JCQkgICAgMHg3ZiwgMHhhOSwgMHhiYSwgMHhhYywgMHgzZCwgMHhmMSwgMHgwMiwgMHhlMCwKLQkJCSAgICAweDA4LCAweGIwLCAweGUyLCAweDc5LCAweDg4LCAweDU5LCAweDg4LCAweDgxLAotCQkJICAgIDB4ZDksIDB4MjAsIDB4YTksIDB4ZTYsIDB4NGYsIDB4NTYsIDB4MTUsIDB4Y2QgfSwKKwkJLml2CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorCQkuaW5wdXQJPSAiXHg0Zlx4MDJceDFkXHhiMlx4NDNceGJjXHg2M1x4M2QiCisJCQkgICJceDcxXHg3OFx4MThceDNhXHg5Zlx4YTBceDcxXHhlOCIKKwkJCSAgIlx4YjRceGQ5XHhhZFx4YTlceGFkXHg3ZFx4ZWRceGY0IgorCQkJICAiXHhlNVx4ZTdceDM4XHg3Nlx4M2ZceDY5XHgxNFx4NWEiCisJCQkgICJceDU3XHgxYlx4MjRceDIwXHgxMlx4ZmJceDdhXHhlMCIKKwkJCSAgIlx4N2ZceGE5XHhiYVx4YWNceDNkXHhmMVx4MDJceGUwIgorCQkJICAiXHgwOFx4YjBceGUyXHg3OVx4ODhceDU5XHg4OFx4ODEiCisJCQkgICJceGQ5XHgyMFx4YTlceGU2XHg0Zlx4NTZceDE1XHhjZCIsCiAJCS5pbGVuCT0gNjQsCi0JCS5yZXN1bHQJPSB7IDB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsCi0JCQkgICAgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyYSwKLQkJCSAgICAweGFlLCAweDJkLCAweDhhLCAweDU3LCAweDFlLCAweDAzLCAweGFjLCAweDljLAotCQkJICAgIDB4OWUsIDB4YjcsIDB4NmYsIDB4YWMsIDB4NDUsIDB4YWYsIDB4OGUsIDB4NTEsCi0JCQkgICAgMHgzMCwgMHhjOCwgMHgxYywgMHg0NiwgMHhhMywgMHg1YywgMHhlNCwgMHgxMSwKLQkJCSAgICAweGU1LCAweGZiLCAweGMxLCAweDE5LCAweDFhLCAweDBhLCAweDUyLCAweGVmLAotCQkJICAgIDB4ZjYsIDB4OWYsIDB4MjQsIDB4NDUsIDB4ZGYsIDB4NGYsIDB4OWIsIDB4MTcsCi0JCQkgICAgMHhhZCwgMHgyYiwgMHg0MSwgMHg3YiwgMHhlNiwgMHg2YywgMHgzNywgMHgxMCB9LAorCQkucmVzdWx0CT0gIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2IgorCQkJICAiXHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisJCQkgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5YyIKKwkJCSAgIlx4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorCQkJICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTEiCisJCQkgICJceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIKKwkJCSAgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3IgorCQkJICAiXHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAogCQkucmxlbgk9IDY0LAogCX0sIHsKLQkJLmtleQk9IHsgMHg2MCwgMHgzZCwgMHhlYiwgMHgxMCwgMHgxNSwgMHhjYSwgMHg3MSwgMHhiZSwKLQkJCSAgICAweDJiLCAweDczLCAweGFlLCAweGYwLCAweDg1LCAweDdkLCAweDc3LCAweDgxLAotCQkJICAgIDB4MWYsIDB4MzUsIDB4MmMsIDB4MDcsIDB4M2IsIDB4NjEsIDB4MDgsIDB4ZDcsCi0JCQkgICAgMHgyZCwgMHg5OCwgMHgxMCwgMHhhMywgMHgwOSwgMHgxNCwgMHhkZiwgMHhmNCB9LAorCQkua2V5CT0gIlx4NjBceDNkXHhlYlx4MTBceDE1XHhjYVx4NzFceGJlIgorCQkJICAiXHgyYlx4NzNceGFlXHhmMFx4ODVceDdkXHg3N1x4ODEiCisJCQkgICJceDFmXHgzNVx4MmNceDA3XHgzYlx4NjFceDA4XHhkNyIKKwkJCSAgIlx4MmRceDk4XHgxMFx4YTNceDA5XHgxNFx4ZGZceGY0IiwKIAkJLmtsZW4JPSAzMiwKLQkJLml2CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKLQkJLmlucHV0CT0geyAweGY1LCAweDhjLCAweDRjLCAweDA0LCAweGQ2LCAweGU1LCAweGYxLCAweGJhLAotCQkJICAgIDB4NzcsIDB4OWUsIDB4YWIsIDB4ZmIsIDB4NWYsIDB4N2IsIDB4ZmIsIDB4ZDYsCi0JCQkgICAgMHg5YywgMHhmYywgMHg0ZSwgMHg5NiwgMHg3ZSwgMHhkYiwgMHg4MCwgMHg4ZCwKLQkJCSAgICAweDY3LCAweDlmLCAweDc3LCAweDdiLCAweGM2LCAweDcwLCAweDJjLCAweDdkLAotCQkJICAgIDB4MzksIDB4ZjIsIDB4MzMsIDB4NjksIDB4YTksIDB4ZDksIDB4YmEsIDB4Y2YsCi0JCQkgICAgMHhhNSwgMHgzMCwgMHhlMiwgMHg2MywgMHgwNCwgMHgyMywgMHgxNCwgMHg2MSwKLQkJCSAgICAweGIyLCAweGViLCAweDA1LCAweGUyLCAweGMzLCAweDliLCAweGU5LCAweGZjLAotCQkJICAgIDB4ZGEsIDB4NmMsIDB4MTksIDB4MDcsIDB4OGMsIDB4NmEsIDB4OWQsIDB4MWIgfSwKKwkJLml2CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorCQkuaW5wdXQJPSAiXHhmNVx4OGNceDRjXHgwNFx4ZDZceGU1XHhmMVx4YmEiCisJCQkgICJceDc3XHg5ZVx4YWJceGZiXHg1Zlx4N2JceGZiXHhkNiIKKwkJCSAgIlx4OWNceGZjXHg0ZVx4OTZceDdlXHhkYlx4ODBceDhkIgorCQkJICAiXHg2N1x4OWZceDc3XHg3Ylx4YzZceDcwXHgyY1x4N2QiCisJCQkgICJceDM5XHhmMlx4MzNceDY5XHhhOVx4ZDlceGJhXHhjZiIKKwkJCSAgIlx4YTVceDMwXHhlMlx4NjNceDA0XHgyM1x4MTRceDYxIgorCQkJICAiXHhiMlx4ZWJceDA1XHhlMlx4YzNceDliXHhlOVx4ZmMiCisJCQkgICJceGRhXHg2Y1x4MTlceDA3XHg4Y1x4NmFceDlkXHgxYiIsCiAJCS5pbGVuCT0gNjQsCi0JCS5yZXN1bHQJPSB7IDB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsCi0JCQkgICAgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyYSwKLQkJCSAgICAweGFlLCAweDJkLCAweDhhLCAweDU3LCAweDFlLCAweDAzLCAweGFjLCAweDljLAotCQkJICAgIDB4OWUsIDB4YjcsIDB4NmYsIDB4YWMsIDB4NDUsIDB4YWYsIDB4OGUsIDB4NTEsCi0JCQkgICAgMHgzMCwgMHhjOCwgMHgxYywgMHg0NiwgMHhhMywgMHg1YywgMHhlNCwgMHgxMSwKLQkJCSAgICAweGU1LCAweGZiLCAweGMxLCAweDE5LCAweDFhLCAweDBhLCAweDUyLCAweGVmLAotCQkJICAgIDB4ZjYsIDB4OWYsIDB4MjQsIDB4NDUsIDB4ZGYsIDB4NGYsIDB4OWIsIDB4MTcsCi0JCQkgICAgMHhhZCwgMHgyYiwgMHg0MSwgMHg3YiwgMHhlNiwgMHg2YywgMHgzNywgMHgxMCB9LAorCQkucmVzdWx0CT0gIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2IgorCQkJICAiXHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisJCQkgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5YyIKKwkJCSAgIlx4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorCQkJICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTEiCisJCQkgICJceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIKKwkJCSAgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3IgorCQkJICAiXHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAogCQkucmxlbgk9IDY0LAogCX0sCiB9OwpAQCAtMjU1NywyNTAgKzI1ODMsMjQ5IEBACiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFlc19scndfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJLyogZnJvbSBodHRwOi8vZ3JvdXBlci5pZWVlLm9yZy9ncm91cHMvMTYxOS9lbWFpbC9wZGYwMDAxNy5wZGYgKi8KIAl7IC8qIExSVy0zMi1BRVMgMSAqLwotCQkua2V5ICAgID0geyAweDQ1LCAweDYyLCAweGFjLCAweDI1LCAweGY4LCAweDI4LCAweDE3LCAweDZkLAotCQkJICAgIDB4NGMsIDB4MjYsIDB4ODQsIDB4MTQsIDB4YjUsIDB4NjgsIDB4MDEsIDB4ODUsCi0JCQkgICAgMHgyNSwgMHg4ZSwgMHgyYSwgMHgwNSwgMHhlNywgMHgzZSwgMHg5ZCwgMHgwMywKLQkJCSAgICAweGVlLCAweDVhLCAweDgzLCAweDBjLCAweGNjLCAweDA5LCAweDRjLCAweDg3IH0sCisJCS5rZXkgICAgPSAiXHg0NVx4NjJceGFjXHgyNVx4ZjhceDI4XHgxN1x4NmQiCisJCQkgICJceDRjXHgyNlx4ODRceDE0XHhiNVx4NjhceDAxXHg4NSIKKwkJCSAgIlx4MjVceDhlXHgyYVx4MDVceGU3XHgzZVx4OWRceDAzIgorCQkJICAiXHhlZVx4NWFceDgzXHgwY1x4Y2NceDA5XHg0Y1x4ODciLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAotCQkuaW5wdXQgID0geyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxIiwKKwkJLmlucHV0ICA9ICJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzNyIKKwkJCSAgIlx4MzhceDM5XHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2IiwKIAkJLmlsZW4gICA9IDE2LAotCQkucmVzdWx0ID0geyAweGYxLCAweGIyLCAweDczLCAweGNkLCAweDY1LCAweGEzLCAweGRmLCAweDVmLAotCQkJICAgIDB4ZTksIDB4NWQsIDB4NDgsIDB4OTIsIDB4NTQsIDB4NjMsIDB4NGUsIDB4YjggfSwKKwkJLnJlc3VsdCA9ICJceGYxXHhiMlx4NzNceGNkXHg2NVx4YTNceGRmXHg1ZiIKKwkJCSAgIlx4ZTlceDVkXHg0OFx4OTJceDU0XHg2M1x4NGVceGI4IiwKIAkJLnJsZW4gICA9IDE2LAogCX0sIHsgLyogTFJXLTMyLUFFUyAyICovCi0JCS5rZXkgICAgPSB7IDB4NTksIDB4NzAsIDB4NDcsIDB4MTQsIDB4ZjUsIDB4NTcsIDB4NDcsIDB4OGMsCi0JCSAgCSAgICAweGQ3LCAweDc5LCAweGU4LCAweDBmLCAweDU0LCAweDg4LCAweDc5LCAweDQ0LAotCQkJICAgIDB4MGQsIDB4NDgsIDB4ZjAsIDB4YjcsIDB4YjEsIDB4NWEsIDB4NTMsIDB4ZWEsCi0JCQkgICAgMHgxYywgMHhhYSwgMHg2YiwgMHgyOSwgMHhjMiwgMHhjYSwgMHhmYiwgMHhhZgotCQl9LAorCQkua2V5ICAgID0gIlx4NTlceDcwXHg0N1x4MTRceGY1XHg1N1x4NDdceDhjIgorCQkJICAiXHhkN1x4NzlceGU4XHgwZlx4NTRceDg4XHg3OVx4NDQiCisJCQkgICJceDBkXHg0OFx4ZjBceGI3XHhiMVx4NWFceDUzXHhlYSIKKwkJCSAgIlx4MWNceGFhXHg2Ylx4MjlceGMyXHhjYVx4ZmJceGFmIiwKIAkJLmtsZW4gICA9IDMyLAotCQkuaXYgICAgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIgfSwKLQkJLmlucHV0ICA9IHsgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkJCSAgICAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMiIsCisJCS5pbnB1dCAgPSAiXHgzMFx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzciCisJCQkgICJceDM4XHgzOVx4NDFceDQyXHg0M1x4NDRceDQ1XHg0NiIsCiAJCS5pbGVuICAgPSAxNiwKLQkJLnJlc3VsdCA9IHsgMHgwMCwgMHhjOCwgMHgyYiwgMHhhZSwgMHg5NSwgMHhiYiwgMHhjZCwgMHhlNSwKLQkJCSAgICAweDI3LCAweDRmLCAweDA3LCAweDY5LCAweGIyLCAweDYwLCAweGUxLCAweDM2IH0sCisJCS5yZXN1bHQgPSAiXHgwMFx4YzhceDJiXHhhZVx4OTVceGJiXHhjZFx4ZTUiCisJCQkgICJceDI3XHg0Zlx4MDdceDY5XHhiMlx4NjBceGUxXHgzNiIsCiAJCS5ybGVuICAgPSAxNiwKIAl9LCB7IC8qIExSVy0zMi1BRVMgMyAqLwotCQkua2V5ICAgID0geyAweGQ4LCAweDJhLCAweDkxLCAweDM0LCAweGIyLCAweDZhLCAweDU2LCAweDUwLAotCQkgIAkgICAgMHgzMCwgMHhmZSwgMHg2OSwgMHhlMiwgMHgzNywgMHg3ZiwgMHg5OCwgMHg0NywKLQkJCSAgICAweGNkLCAweGY5LCAweDBiLCAweDE2LCAweDBjLCAweDY0LCAweDhmLCAweGI2LAotCQkJICAgIDB4YjAsIDB4MGQsIDB4MGQsIDB4MWIsIDB4YWUsIDB4ODUsIDB4ODcsIDB4MWYgfSwKKwkJLmtleSAgICA9ICJceGQ4XHgyYVx4OTFceDM0XHhiMlx4NmFceDU2XHg1MCIKKwkJCSAgIlx4MzBceGZlXHg2OVx4ZTJceDM3XHg3Zlx4OThceDQ3IgorCQkJICAiXHhjZFx4ZjlceDBiXHgxNlx4MGNceDY0XHg4Zlx4YjYiCisJCQkgICJceGIwXHgwZFx4MGRceDFiXHhhZVx4ODVceDg3XHgxZiIsCiAJCS5rbGVuICAgPSAzMiwKLQkJLml2ICAgICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCS5pbnB1dCAgPSB7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0JCQkgICAgMHgzOCwgMHgzOSwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiB9LAorCQkuaXYgICAgID0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQgID0gIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJICAiXHgzOFx4MzlceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDYiLAogCQkuaWxlbiAgID0gMTYsCi0JCS5yZXN1bHQgPSB7IDB4NzYsIDB4MzIsIDB4MjEsIDB4ODMsIDB4ZWQsIDB4OGYsIDB4ZjEsIDB4ODIsCi0JCQkgICAgMHhmOSwgMHg1OSwgMHg2MiwgMHgwMywgMHg2OSwgMHgwZSwgMHg1ZSwgMHgwMSB9LAorCQkucmVzdWx0ID0gIlx4NzZceDMyXHgyMVx4ODNceGVkXHg4Zlx4ZjFceDgyIgorCQkJICAiXHhmOVx4NTlceDYyXHgwM1x4NjlceDBlXHg1ZVx4MDEiLAogCQkucmxlbiAgID0gMTYsCiAJfSwgeyAvKiBMUlctMzItQUVTIDQgKi8KLQkJLmtleSAgICA9IHsgMHgwZiwgMHg2YSwgMHhlZiwgMHhmOCwgMHhkMywgMHhkMiwgMHhiYiwgMHgxNSwKLQkJICAJICAgIDB4MjUsIDB4ODMsIDB4ZjcsIDB4M2MsIDB4MWYsIDB4MDEsIDB4MjgsIDB4NzQsCi0JCQkgICAgMHhjYSwgMHhjNiwgMHhiYywgMHgzNSwgMHg0ZCwgMHg0YSwgMHg2NSwgMHg1NCwKLQkJCSAgICAweDkwLCAweGFlLCAweDYxLCAweGNmLCAweDdiLCAweGFlLCAweGJkLCAweGNjLAotCQkJICAgIDB4YWQsIDB4ZTQsIDB4OTQsIDB4YzUsIDB4NGEsIDB4MjksIDB4YWUsIDB4NzAgfSwKKwkJLmtleSAgICA9ICJceDBmXHg2YVx4ZWZceGY4XHhkM1x4ZDJceGJiXHgxNSIKKwkJCSAgIlx4MjVceDgzXHhmN1x4M2NceDFmXHgwMVx4MjhceDc0IgorCQkJICAiXHhjYVx4YzZceGJjXHgzNVx4NGRceDRhXHg2NVx4NTQiCisJCQkgICJceDkwXHhhZVx4NjFceGNmXHg3Ylx4YWVceGJkXHhjYyIKKwkJCSAgIlx4YWRceGU0XHg5NFx4YzVceDRhXHgyOVx4YWVceDcwIiwKIAkJLmtsZW4gICA9IDQwLAotCQkuaXYgICAgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKLQkJLmlucHV0ICA9IHsgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkJCSAgICAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMSIsCisJCS5pbnB1dCAgPSAiXHgzMFx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzciCisJCQkgICJceDM4XHgzOVx4NDFceDQyXHg0M1x4NDRceDQ1XHg0NiIsCiAJCS5pbGVuICAgPSAxNiwKLQkJLnJlc3VsdCA9IHsgMHg5YywgMHgwZiwgMHgxNSwgMHgyZiwgMHg1NSwgMHhhMiwgMHhkOCwgMHhmMCwKLQkJCSAgICAweGQ2LCAweDdiLCAweDhmLCAweDllLCAweDI4LCAweDIyLCAweGJjLCAweDQxIH0sCisJCS5yZXN1bHQgPSAiXHg5Y1x4MGZceDE1XHgyZlx4NTVceGEyXHhkOFx4ZjAiCisJCQkgICJceGQ2XHg3Ylx4OGZceDllXHgyOFx4MjJceGJjXHg0MSIsCiAJCS5ybGVuICAgPSAxNiwKIAl9LCB7IC8qIExSVy0zMi1BRVMgNSAqLwotCQkua2V5ICAgID0geyAweDhhLCAweGQ0LCAweGVlLCAweDEwLCAweDJmLCAweGJkLCAweDgxLCAweGZmLAotCQkgIAkgICAgMHhmOCwgMHg4NiwgMHhjZSwgMHhhYywgMHg5MywgMHhjNSwgMHhhZCwgMHhjNiwKLQkJCSAgICAweGEwLCAweDE5LCAweDA3LCAweGMwLCAweDlkLCAweGY3LCAweGJiLCAweGRkLAotCQkJICAgIDB4NTIsIDB4MTMsIDB4YjIsIDB4YjcsIDB4ZjAsIDB4ZmYsIDB4MTEsIDB4ZDgsCi0JCQkgICAgMHhkNiwgMHgwOCwgMHhkMCwgMHhjZCwgMHgyZSwgMHhiMSwgMHgxNywgMHg2ZiB9LAorCQkua2V5ICAgID0gIlx4OGFceGQ0XHhlZVx4MTBceDJmXHhiZFx4ODFceGZmIgorCQkJICAiXHhmOFx4ODZceGNlXHhhY1x4OTNceGM1XHhhZFx4YzYiCisJCQkgICJceGEwXHgxOVx4MDdceGMwXHg5ZFx4ZjdceGJiXHhkZCIKKwkJCSAgIlx4NTJceDEzXHhiMlx4YjdceGYwXHhmZlx4MTFceGQ4IgorCQkJICAiXHhkNlx4MDhceGQwXHhjZFx4MmVceGIxXHgxN1x4NmYiLAogCQkua2xlbiAgID0gNDAsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0ICA9ICJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzNyIKKwkJCSAgIlx4MzhceDM5XHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2IiwKIAkJLmlsZW4gICA9IDE2LAotCQkucmVzdWx0ID0geyAweGQ0LCAweDI3LCAweDZhLCAweDdmLCAweDE0LCAweDkxLCAweDNkLCAweDY1LAotCQkJICAgIDB4YzgsIDB4NjAsIDB4NDgsIDB4MDIsIDB4ODcsIDB4ZTMsIDB4MzQsIDB4MDYgfSwKKwkJLnJlc3VsdCA9ICJceGQ0XHgyN1x4NmFceDdmXHgxNFx4OTFceDNkXHg2NSIKKwkJCSAgIlx4YzhceDYwXHg0OFx4MDJceDg3XHhlM1x4MzRceDA2IiwKIAkJLnJsZW4gICA9IDE2LAogCX0sIHsgLyogTFJXLTMyLUFFUyA2ICovCi0JCS5rZXkgICAgPSB7IDB4ZjgsIDB4ZDQsIDB4NzYsIDB4ZmYsIDB4ZDYsIDB4NDYsIDB4ZWUsIDB4NmMsCi0JCSAgCSAgICAweDIzLCAweDg0LCAweGNiLCAweDFjLCAweDc3LCAweGQ2LCAweDE5LCAweDVkLAotCQkJICAgIDB4ZmUsIDB4ZjEsIDB4YTksIDB4ZjMsIDB4N2IsIDB4YmMsIDB4OGQsIDB4MjEsCi0JCQkgICAgMHhhNywgMHg5YywgMHgyMSwgMHhmOCwgMHhjYiwgMHg5MCwgMHgwMiwgMHg4OSwKLQkJCSAgICAweGE4LCAweDQ1LCAweDM0LCAweDhlLCAweGM4LCAweGM1LCAweGI1LCAweGYxLAotCQkJICAgIDB4MjYsIDB4ZjUsIDB4MGUsIDB4NzYsIDB4ZmUsIDB4ZmQsIDB4MWIsIDB4MWUgfSwKKwkJLmtleSAgICA9ICJceGY4XHhkNFx4NzZceGZmXHhkNlx4NDZceGVlXHg2YyIKKwkJCSAgIlx4MjNceDg0XHhjYlx4MWNceDc3XHhkNlx4MTlceDVkIgorCQkJICAiXHhmZVx4ZjFceGE5XHhmM1x4N2JceGJjXHg4ZFx4MjEiCisJCQkgICJceGE3XHg5Y1x4MjFceGY4XHhjYlx4OTBceDAyXHg4OSIKKwkJCSAgIlx4YThceDQ1XHgzNFx4OGVceGM4XHhjNVx4YjVceGYxIgorCQkJICAiXHgyNlx4ZjVceDBlXHg3Nlx4ZmVceGZkXHgxYlx4MWUiLAogCQkua2xlbiAgID0gNDgsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAotCQkuaW5wdXQgID0geyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxIiwKKwkJLmlucHV0ICA9ICJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzNyIKKwkJCSAgIlx4MzhceDM5XHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2IiwKIAkJLmlsZW4gICA9IDE2LAotCQkucmVzdWx0ID0geyAweGJkLCAweDA2LCAweGI4LCAweGUxLCAweGRiLCAweDk4LCAweDg5LCAweDllLAotCQkJICAgIDB4YzQsIDB4OTgsIDB4ZTQsIDB4OTEsIDB4Y2YsIDB4MWMsIDB4NzAsIDB4MmIgfSwKKwkJLnJlc3VsdCA9ICJceGJkXHgwNlx4YjhceGUxXHhkYlx4OThceDg5XHg5ZSIKKwkJCSAgIlx4YzRceDk4XHhlNFx4OTFceGNmXHgxY1x4NzBceDJiIiwKIAkJLnJsZW4gICA9IDE2LAogCX0sIHsgLyogTFJXLTMyLUFFUyA3ICovCi0JCS5rZXkgICAgPSB7IDB4ZmIsIDB4NzYsIDB4MTUsIDB4YjIsIDB4M2QsIDB4ODAsIDB4ODksIDB4MWQsCi0JCSAgCSAgICAweGQ0LCAweDcwLCAweDk4LCAweDBiLCAweGM3LCAweDk1LCAweDg0LCAweGM4LAotCQkJICAgIDB4YjIsIDB4ZmIsIDB4NjQsIDB4Y2UsIDB4NjAsIDB4OTcsIDB4ODcsIDB4OGQsCi0JCQkgICAgMHgxNywgMHhmYywgMHhlNCwgMHg1YSwgMHg0OSwgMHhlOCwgMHgzMCwgMHhiNywKLQkJCSAgICAweDZlLCAweDc4LCAweDE3LCAweGU3LCAweDJkLCAweDVlLCAweDEyLCAweGQ0LAotCQkJICAgIDB4NjAsIDB4NjQsIDB4MDQsIDB4N2EsIDB4ZjEsIDB4MmYsIDB4OWUsIDB4MGMgfSwKKwkJLmtleSAgICA9ICJceGZiXHg3Nlx4MTVceGIyXHgzZFx4ODBceDg5XHgxZCIKKwkJCSAgIlx4ZDRceDcwXHg5OFx4MGJceGM3XHg5NVx4ODRceGM4IgorCQkJICAiXHhiMlx4ZmJceDY0XHhjZVx4NjBceDk3XHg4N1x4OGQiCisJCQkgICJceDE3XHhmY1x4ZTRceDVhXHg0OVx4ZThceDMwXHhiNyIKKwkJCSAgIlx4NmVceDc4XHgxN1x4ZTdceDJkXHg1ZVx4MTJceGQ0IgorCQkJICAiXHg2MFx4NjRceDA0XHg3YVx4ZjFceDJmXHg5ZVx4MGMiLAogCQkua2xlbiAgID0gNDgsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0ICA9ICJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzNyIKKwkJCSAgIlx4MzhceDM5XHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2IiwKIAkJLmlsZW4gICA9IDE2LAotCQkucmVzdWx0ID0geyAweDViLCAweDkwLCAweDhlLCAweGMxLCAweGFiLCAweGRkLCAweDY3LCAweDVmLAotCQkJICAgIDB4M2QsIDB4NjksIDB4OGEsIDB4OTUsIDB4NTMsIDB4YzgsIDB4OWMsIDB4ZTUgfSwKKwkJLnJlc3VsdCA9ICJceDViXHg5MFx4OGVceGMxXHhhYlx4ZGRceDY3XHg1ZiIKKwkJCSAgIlx4M2RceDY5XHg4YVx4OTVceDUzXHhjOFx4OWNceGU1IiwKIAkJLnJsZW4gICA9IDE2LAogCX0sIHsKIC8qIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9zdGRzLXAxNjE5QGxpc3RzZXJ2LmllZWUub3JnL21zZzAwMTczLmh0bWwgKi8KLQkJLmtleSAgICA9IHsgMHhmOCwgMHhkNCwgMHg3NiwgMHhmZiwgMHhkNiwgMHg0NiwgMHhlZSwgMHg2YywKLQkJCSAgICAweDIzLCAweDg0LCAweGNiLCAweDFjLCAweDc3LCAweGQ2LCAweDE5LCAweDVkLAotCQkJICAgIDB4ZmUsIDB4ZjEsIDB4YTksIDB4ZjMsIDB4N2IsIDB4YmMsIDB4OGQsIDB4MjEsCi0JCQkgICAgMHhhNywgMHg5YywgMHgyMSwgMHhmOCwgMHhjYiwgMHg5MCwgMHgwMiwgMHg4OSwKLQkJCSAgICAweGE4LCAweDQ1LCAweDM0LCAweDhlLCAweGM4LCAweGM1LCAweGI1LCAweGYxLAotCQkJICAgIDB4MjYsIDB4ZjUsIDB4MGUsIDB4NzYsIDB4ZmUsIDB4ZmQsIDB4MWIsIDB4MWUgfSwKKwkJLmtleSAgICA9ICJceGY4XHhkNFx4NzZceGZmXHhkNlx4NDZceGVlXHg2YyIKKwkJCSAgIlx4MjNceDg0XHhjYlx4MWNceDc3XHhkNlx4MTlceDVkIgorCQkJICAiXHhmZVx4ZjFceGE5XHhmM1x4N2JceGJjXHg4ZFx4MjEiCisJCQkgICJceGE3XHg5Y1x4MjFceGY4XHhjYlx4OTBceDAyXHg4OSIKKwkJCSAgIlx4YThceDQ1XHgzNFx4OGVceGM4XHhjNVx4YjVceGYxIgorCQkJICAiXHgyNlx4ZjVceDBlXHg3Nlx4ZmVceGZkXHgxYlx4MWUiLAogCQkua2xlbiAgID0gNDgsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAotCQkuaW5wdXQgID0geyAweDA1LCAweDExLCAweGI3LCAweDE4LCAweGFiLCAweGM2LCAweDJkLCAweGFjLAotCQkJICAgIDB4NzAsIDB4NWQsIDB4ZjYsIDB4MjIsIDB4OTQsIDB4Y2QsIDB4ZTUsIDB4NmMsCi0JCQkgICAgMHgxNywgMHg2YiwgMHhmNiwgMHgxYywgMHhmMCwgMHhmMywgMHg2ZSwgMHhmOCwKLQkJCSAgICAweDUwLCAweDM4LCAweDFmLCAweDcxLCAweDQ5LCAweGI2LCAweDU3LCAweGQ2LAotCQkJICAgIDB4OGYsIDB4Y2IsIDB4OGQsIDB4NmIsIDB4ZTMsIDB4YTYsIDB4MjksIDB4OTAsCi0JCQkgICAgMHhmZSwgMHgyYSwgMHg2MiwgMHg4MiwgMHhhZSwgMHg2ZCwgMHg4YiwgMHhmNiwKLQkJCSAgICAweGFkLCAweDFlLCAweDllLCAweDIwLCAweDVmLCAweDM4LCAweGJlLCAweDA0LAotCQkJICAgIDB4ZGEsIDB4MTAsIDB4OGUsIDB4ZWQsIDB4YTIsIDB4YTQsIDB4ODcsIDB4YWIsCi0JCQkgICAgMHhkYSwgMHg2YiwgMHhiNCwgMHgwYywgMHg3NSwgMHhiYSwgMHhkMywgMHg3YywKLQkJCSAgICAweGM5LCAweGFjLCAweDQyLCAweDMxLCAweDk1LCAweDdjLCAweGM5LCAweDA0LAotCQkJICAgIDB4ZWIsIDB4ZDUsIDB4NmUsIDB4MzIsIDB4NjksIDB4OGEsIDB4ZGIsIDB4YTYsCi0JCQkgICAgMHgxNSwgMHhkNywgMHgzZiwgMHg0ZiwgMHgyZiwgMHg2NiwgMHg2OSwgMHgwMywKLQkJCSAgICAweDljLCAweDFmLCAweDU0LCAweDBmLCAweGRlLCAweDFmLCAweGYzLCAweDY1LAotCQkJICAgIDB4NGMsIDB4OTYsIDB4MTIsIDB4ZWQsIDB4N2MsIDB4OTIsIDB4MDMsIDB4MDEsCi0JCQkgICAgMHg2ZiwgMHhiYywgMHgzNSwgMHg5MywgMHhhYywgMHhmMSwgMHgyNywgMHhmMSwKLQkJCSAgICAweGI0LCAweDk2LCAweDgyLCAweDVhLCAweDVmLCAweGIwLCAweGEwLCAweDUwLAotCQkJICAgIDB4ODksIDB4YTQsIDB4OGUsIDB4NjYsIDB4NDQsIDB4ODUsIDB4Y2MsIDB4ZmQsCi0JCQkgICAgMHgzMywgMHgxNCwgMHg3MCwgMHhlMywgMHg5NiwgMHhiMiwgMHhjMywgMHhkMywKLQkJCSAgICAweGJiLCAweDU0LCAweDVhLCAweDFhLCAweGY5LCAweDc0LCAweGEyLCAweGM1LAotCQkJICAgIDB4MmQsIDB4NjQsIDB4NzUsIDB4ZGQsIDB4YjQsIDB4NTQsIDB4ZTYsIDB4NzQsCi0JCQkgICAgMHg4YywgMHhkMywgMHg5ZCwgMHg5ZSwgMHg4NiwgMHhhYiwgMHg1MSwgMHg1MywKLQkJCSAgICAweGI3LCAweDkzLCAweDNlLCAweDZmLCAweGQwLCAweDRlLCAweDJjLCAweDQwLAotCQkJICAgIDB4ZjYsIDB4YTgsIDB4MmUsIDB4M2UsIDB4OWQsIDB4ZjQsIDB4NjYsIDB4YTUsCi0JCQkgICAgMHg3NiwgMHgxMiwgMHg3MywgMHg0NCwgMHgxYSwgMHg1NiwgMHhkNywgMHg3MiwKLQkJCSAgICAweDg4LCAweGNkLCAweDIxLCAweDhjLCAweDRjLCAweDBmLCAweGZlLCAweGRhLAotCQkJICAgIDB4OTUsIDB4ZTAsIDB4M2EsIDB4YTYsIDB4YTUsIDB4ODQsIDB4NDYsIDB4Y2QsCi0JCQkgICAgMHhkNSwgMHgzZSwgMHg5ZCwgMHgzYSwgMHhlMiwgMHg2NywgMHhlNiwgMHg2MCwKLQkJCSAgICAweDFhLCAweGUyLCAweDcwLCAweDg1LCAweDU4LCAweGMyLCAweDFiLCAweDA5LAotCQkJICAgIDB4ZTEsIDB4ZDcsIDB4MmMsIDB4Y2EsIDB4YWQsIDB4YTgsIDB4OGYsIDB4ZjksCi0JCQkgICAgMHhhYywgMHhiMywgMHgwZSwgMHhkYiwgMHhjYSwgMHgyZSwgMHhlMiwgMHhiOCwKLQkJCSAgICAweDUxLCAweDcxLCAweGQ5LCAweDNjLCAweDZjLCAweGYxLCAweDU2LCAweGY4LAotCQkJICAgIDB4ZWEsIDB4OWMsIDB4ZjEsIDB4ZmIsIDB4MGMsIDB4ZTYsIDB4YjcsIDB4MTAsCi0JCQkgICAgMHgxYywgMHhmOCwgMHhhOSwgMHg3YywgMHhlOCwgMHg1MywgMHgzNSwgMHhjMSwKLQkJCSAgICAweDkwLCAweDNlLCAweDc2LCAweDRhLCAweDc0LCAweGE0LCAweDIxLCAweDJjLAotCQkJICAgIDB4ZjYsIDB4MmMsIDB4NGUsIDB4MGYsIDB4OTQsIDB4M2EsIDB4ODgsIDB4MmUsCi0JCQkgICAgMHg0MSwgMHgwOSwgMHg2YSwgMHgzMywgMHg3ZCwgMHhmNiwgMHhkZCwgMHgzZiwKLQkJCSAgICAweDhkLCAweDIzLCAweDMxLCAweDc0LCAweDg0LCAweGViLCAweDg4LCAweDZlLAotCQkJICAgIDB4Y2MsIDB4YjksIDB4YmMsIDB4MjIsIDB4ODMsIDB4MTksIDB4MDcsIDB4MjIsCi0JCQkgICAgMHhhNSwgMHgyZCwgMHhkZiwgMHhhNSwgMHhmMywgMHg4MCwgMHg4NSwgMHg3OCwKLQkJCSAgICAweDg0LCAweDM5LCAweDZhLCAweDZkLCAweDZhLCAweDk5LCAweDRmLCAweGE1LAotCQkJICAgIDB4MTUsIDB4ZmUsIDB4NDYsIDB4YjAsIDB4ZTQsIDB4NmMsIDB4YTUsIDB4NDEsCi0JCQkgICAgMHgzYywgMHhjZSwgMHg4ZiwgMHg0MiwgMHg2MCwgMHg3MSwgMHhhNywgMHg3NSwKLQkJCSAgICAweDA4LCAweDQwLCAweDY1LCAweDhhLCAweDgyLCAweGJmLCAweGY1LCAweDQzLAotCQkJICAgIDB4NzEsIDB4OTYsIDB4YTksIDB4NGQsIDB4NDQsIDB4OGEsIDB4MjAsIDB4YmUsCi0JCQkgICAgMHhmYSwgMHg0ZCwgMHhiYiwgMHhjMCwgMHg3ZCwgMHgzMSwgMHg5NiwgMHg2NSwKLQkJCSAgICAweGU3LCAweDc1LCAweGU1LCAweDNlLCAweGZkLCAweDkyLCAweDNiLCAweGM5LAotCQkJICAgIDB4NTUsIDB4YmIsIDB4MTYsIDB4N2UsIDB4ZjcsIDB4YzIsIDB4OGMsIDB4YTQsCi0JCQkgICAgMHg0MCwgMHgxZCwgMHhlNSwgMHhlZiwgMHgwZSwgMHhkZiwgMHhlNCwgMHg5YSwKLQkJCSAgICAweDYyLCAweDczLCAweDY1LCAweGZkLCAweDQ2LCAweDYzLCAweDI1LCAweDNkLAotCQkJICAgIDB4MmIsIDB4YWYsIDB4ZTUsIDB4NjQsIDB4ZmUsIDB4YTUsIDB4NWMsIDB4Y2YsCi0JCQkgICAgMHgyNCwgMHhmMywgMHhiNCwgMHhhYywgMHg2NCwgMHhiYSwgMHhkZiwgMHg0YiwKLQkJCSAgICAweGM2LCAweDk2LCAweDdkLCAweDgxLCAweDJkLCAweDhkLCAweDk3LCAweGY3LAotCQkJICAgIDB4YzUsIDB4NjgsIDB4NzcsIDB4ODQsIDB4MzIsIDB4MmIsIDB4Y2MsIDB4ODUsCi0JCQkgICAgMHg3NCwgMHg5NiwgMHhmMCwgMHgxMiwgMHg3NywgMHg2MSwgMHhiOSwgMHhlYiwKLQkJCSAgICAweDcxLCAweGFhLCAweDgyLCAweGNiLCAweDFjLCAweGRiLCAweDg5LCAweGM4LAotCQkJICAgIDB4YzYsIDB4YjUsIDB4ZTMsIDB4NWMsIDB4N2QsIDB4MzksIDB4MDcsIDB4MjQsCi0JCQkgICAgMHhkYSwgMHgzOSwgMHg4NywgMHg0NSwgMHhjMCwgMHgyYiwgMHhiYiwgMHgwMSwKLQkJCSAgICAweGFjLCAweGJjLCAweDJhLCAweDVjLCAweDdmLCAweGZjLCAweGU4LCAweGNlLAotCQkJICAgIDB4NmQsIDB4OWMsIDB4NmYsIDB4ZWQsIDB4ZDMsIDB4YzEsIDB4YTEsIDB4ZDYsCi0JCQkgICAgMHhjNSwgMHg1NSwgMHhhOSwgMHg2NiwgMHgyZiwgMHhlMSwgMHhjOCwgMHgzMiwKLQkJCSAgICAweGE2LCAweDVkLCAweGE0LCAweDNhLCAweDk4LCAweDczLCAweGU4LCAweDQ1LAotCQkJICAgIDB4YTQsIDB4YzcsIDB4YTgsIDB4YjQsIDB4ZjYsIDB4MTMsIDB4MDMsIDB4ZjYsCi0JCQkgICAgMHhlOSwgMHgyZSwgMHhjNCwgMHgyOSwgMHgwZiwgMHg4NCwgMHhkYiwgMHhjNCwKLQkJCSAgICAweDIxLCAweGM0LCAweGMyLCAweDc1LCAweDY3LCAweDg5LCAweDM3LCAweDBhIH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMSIsCisJCS5pbnB1dCAgPSAiXHgwNVx4MTFceGI3XHgxOFx4YWJceGM2XHgyZFx4YWMiCisJCQkgICJceDcwXHg1ZFx4ZjZceDIyXHg5NFx4Y2RceGU1XHg2YyIKKwkJCSAgIlx4MTdceDZiXHhmNlx4MWNceGYwXHhmM1x4NmVceGY4IgorCQkJICAiXHg1MFx4MzhceDFmXHg3MVx4NDlceGI2XHg1N1x4ZDYiCisJCQkgICJceDhmXHhjYlx4OGRceDZiXHhlM1x4YTZceDI5XHg5MCIKKwkJCSAgIlx4ZmVceDJhXHg2Mlx4ODJceGFlXHg2ZFx4OGJceGY2IgorCQkJICAiXHhhZFx4MWVceDllXHgyMFx4NWZceDM4XHhiZVx4MDQiCisJCQkgICJceGRhXHgxMFx4OGVceGVkXHhhMlx4YTRceDg3XHhhYiIKKwkJCSAgIlx4ZGFceDZiXHhiNFx4MGNceDc1XHhiYVx4ZDNceDdjIgorCQkJICAiXHhjOVx4YWNceDQyXHgzMVx4OTVceDdjXHhjOVx4MDQiCisJCQkgICJceGViXHhkNVx4NmVceDMyXHg2OVx4OGFceGRiXHhhNiIKKwkJCSAgIlx4MTVceGQ3XHgzZlx4NGZceDJmXHg2Nlx4NjlceDAzIgorCQkJICAiXHg5Y1x4MWZceDU0XHgwZlx4ZGVceDFmXHhmM1x4NjUiCisJCQkgICJceDRjXHg5Nlx4MTJceGVkXHg3Y1x4OTJceDAzXHgwMSIKKwkJCSAgIlx4NmZceGJjXHgzNVx4OTNceGFjXHhmMVx4MjdceGYxIgorCQkJICAiXHhiNFx4OTZceDgyXHg1YVx4NWZceGIwXHhhMFx4NTAiCisJCQkgICJceDg5XHhhNFx4OGVceDY2XHg0NFx4ODVceGNjXHhmZCIKKwkJCSAgIlx4MzNceDE0XHg3MFx4ZTNceDk2XHhiMlx4YzNceGQzIgorCQkJICAiXHhiYlx4NTRceDVhXHgxYVx4ZjlceDc0XHhhMlx4YzUiCisJCQkgICJceDJkXHg2NFx4NzVceGRkXHhiNFx4NTRceGU2XHg3NCIKKwkJCSAgIlx4OGNceGQzXHg5ZFx4OWVceDg2XHhhYlx4NTFceDUzIgorCQkJICAiXHhiN1x4OTNceDNlXHg2Zlx4ZDBceDRlXHgyY1x4NDAiCisJCQkgICJceGY2XHhhOFx4MmVceDNlXHg5ZFx4ZjRceDY2XHhhNSIKKwkJCSAgIlx4NzZceDEyXHg3M1x4NDRceDFhXHg1Nlx4ZDdceDcyIgorCQkJICAiXHg4OFx4Y2RceDIxXHg4Y1x4NGNceDBmXHhmZVx4ZGEiCisJCQkgICJceDk1XHhlMFx4M2FceGE2XHhhNVx4ODRceDQ2XHhjZCIKKwkJCSAgIlx4ZDVceDNlXHg5ZFx4M2FceGUyXHg2N1x4ZTZceDYwIgorCQkJICAiXHgxYVx4ZTJceDcwXHg4NVx4NThceGMyXHgxYlx4MDkiCisJCQkgICJceGUxXHhkN1x4MmNceGNhXHhhZFx4YThceDhmXHhmOSIKKwkJCSAgIlx4YWNceGIzXHgwZVx4ZGJceGNhXHgyZVx4ZTJceGI4IgorCQkJICAiXHg1MVx4NzFceGQ5XHgzY1x4NmNceGYxXHg1Nlx4ZjgiCisJCQkgICJceGVhXHg5Y1x4ZjFceGZiXHgwY1x4ZTZceGI3XHgxMCIKKwkJCSAgIlx4MWNceGY4XHhhOVx4N2NceGU4XHg1M1x4MzVceGMxIgorCQkJICAiXHg5MFx4M2VceDc2XHg0YVx4NzRceGE0XHgyMVx4MmMiCisJCQkgICJceGY2XHgyY1x4NGVceDBmXHg5NFx4M2FceDg4XHgyZSIKKwkJCSAgIlx4NDFceDA5XHg2YVx4MzNceDdkXHhmNlx4ZGRceDNmIgorCQkJICAiXHg4ZFx4MjNceDMxXHg3NFx4ODRceGViXHg4OFx4NmUiCisJCQkgICJceGNjXHhiOVx4YmNceDIyXHg4M1x4MTlceDA3XHgyMiIKKwkJCSAgIlx4YTVceDJkXHhkZlx4YTVceGYzXHg4MFx4ODVceDc4IgorCQkJICAiXHg4NFx4MzlceDZhXHg2ZFx4NmFceDk5XHg0Zlx4YTUiCisJCQkgICJceDE1XHhmZVx4NDZceGIwXHhlNFx4NmNceGE1XHg0MSIKKwkJCSAgIlx4M2NceGNlXHg4Zlx4NDJceDYwXHg3MVx4YTdceDc1IgorCQkJICAiXHgwOFx4NDBceDY1XHg4YVx4ODJceGJmXHhmNVx4NDMiCisJCQkgICJceDcxXHg5Nlx4YTlceDRkXHg0NFx4OGFceDIwXHhiZSIKKwkJCSAgIlx4ZmFceDRkXHhiYlx4YzBceDdkXHgzMVx4OTZceDY1IgorCQkJICAiXHhlN1x4NzVceGU1XHgzZVx4ZmRceDkyXHgzYlx4YzkiCisJCQkgICJceDU1XHhiYlx4MTZceDdlXHhmN1x4YzJceDhjXHhhNCIKKwkJCSAgIlx4NDBceDFkXHhlNVx4ZWZceDBlXHhkZlx4ZTRceDlhIgorCQkJICAiXHg2Mlx4NzNceDY1XHhmZFx4NDZceDYzXHgyNVx4M2QiCisJCQkgICJceDJiXHhhZlx4ZTVceDY0XHhmZVx4YTVceDVjXHhjZiIKKwkJCSAgIlx4MjRceGYzXHhiNFx4YWNceDY0XHhiYVx4ZGZceDRiIgorCQkJICAiXHhjNlx4OTZceDdkXHg4MVx4MmRceDhkXHg5N1x4ZjciCisJCQkgICJceGM1XHg2OFx4NzdceDg0XHgzMlx4MmJceGNjXHg4NSIKKwkJCSAgIlx4NzRceDk2XHhmMFx4MTJceDc3XHg2MVx4YjlceGViIgorCQkJICAiXHg3MVx4YWFceDgyXHhjYlx4MWNceGRiXHg4OVx4YzgiCisJCQkgICJceGM2XHhiNVx4ZTNceDVjXHg3ZFx4MzlceDA3XHgyNCIKKwkJCSAgIlx4ZGFceDM5XHg4N1x4NDVceGMwXHgyYlx4YmJceDAxIgorCQkJICAiXHhhY1x4YmNceDJhXHg1Y1x4N2ZceGZjXHhlOFx4Y2UiCisJCQkgICJceDZkXHg5Y1x4NmZceGVkXHhkM1x4YzFceGExXHhkNiIKKwkJCSAgIlx4YzVceDU1XHhhOVx4NjZceDJmXHhlMVx4YzhceDMyIgorCQkJICAiXHhhNlx4NWRceGE0XHgzYVx4OThceDczXHhlOFx4NDUiCisJCQkgICJceGE0XHhjN1x4YThceGI0XHhmNlx4MTNceDAzXHhmNiIKKwkJCSAgIlx4ZTlceDJlXHhjNFx4MjlceDBmXHg4NFx4ZGJceGM0IgorCQkJICAiXHgyMVx4YzRceGMyXHg3NVx4NjdceDg5XHgzN1x4MGEiLAogCQkuaWxlbiAgID0gNTEyLAotCQkucmVzdWx0ID0geyAweDFhLCAweDFkLCAweGE5LCAweDMwLCAweGFkLCAweGY5LCAweDJmLCAweDliLAotCQkJICAgIDB4YjYsIDB4MWQsIDB4YWUsIDB4ZWYsIDB4ZjAsIDB4MmYsIDB4ZjgsIDB4NWEsCi0JCQkgICAgMHgzOSwgMHgzYywgMHhiZiwgMHgyYSwgMHhiMiwgMHg0NSwgMHhiMiwgMHgyMywKLQkJCSAgICAweDFiLCAweDYzLCAweDNjLCAweGNmLCAweGFhLCAweGJlLCAweGNmLCAweDRlLAotCQkJICAgIDB4ZmEsIDB4ZTgsIDB4MjksIDB4YzIsIDB4MjAsIDB4NjgsIDB4MmIsIDB4M2MsCi0JCQkgICAgMHgyZSwgMHg4YiwgMHhmNywgMHg2ZSwgMHgyNSwgMHhiZCwgMHhlMywgMHgzZCwKLQkJCSAgICAweDY2LCAweDI3LCAweGQ2LCAweGFmLCAweGQ2LCAweDY0LCAweDNlLCAweGUzLAotCQkJICAgIDB4ZTgsIDB4NTgsIDB4NDYsIDB4OTcsIDB4MzksIDB4NTEsIDB4MDcsIDB4ZGUsCi0JCQkgICAgMHhjYiwgMHgzNywgMHhiYywgMHhhOSwgMHhjMCwgMHg1ZiwgMHg3NSwgMHhjMywKLQkJCSAgICAweDBlLCAweDg0LCAweDIzLCAweDFkLCAweDE2LCAweGQ0LCAweDFjLCAweDU5LAotCQkJICAgIDB4OWMsIDB4MWEsIDB4MDIsIDB4NTUsIDB4YWIsIDB4M2EsIDB4OTcsIDB4MWQsCi0JCQkgICAgMHhkZiwgMHhkZCwgMHhjNywgMHgwNiwgMHg1MSwgMHhkNywgMHg3MCwgMHhhZSwKLQkJCSAgICAweDIzLCAweGM2LCAweDhjLCAweGY1LCAweDFlLCAweGEwLCAweGU1LCAweDgyLAotCQkJICAgIDB4YjgsIDB4YjIsIDB4YmYsIDB4MDQsIDB4YTAsIDB4MzIsIDB4OGUsIDB4NjgsCi0JCQkgICAgMHhlYiwgMHhhZiwgMHg2ZSwgMHgyZCwgMHg5NCwgMHgyMiwgMHgyZiwgMHhjZSwKLQkJCSAgICAweDRjLCAweGI1LCAweDU5LCAweGUyLCAweGEyLCAweDJmLCAweGEwLCAweDk4LAotCQkJICAgIDB4MWEsIDB4OTcsIDB4YzYsIDB4ZDQsIDB4YjUsIDB4MDAsIDB4NTksIDB4ZjIsCi0JCQkgICAgMHg4NCwgMHgxNCwgMHg3MiwgMHhiMSwgMHg5YSwgMHg2ZSwgMHhhMywgMHg3ZiwKLQkJCSAgICAweGVhLCAweDIwLCAweGU3LCAweGNiLCAweDY1LCAweDc3LCAweDNhLCAweGRmLAotCQkJICAgIDB4YzgsIDB4OTcsIDB4NjcsIDB4MTUsIDB4YzIsIDB4MmEsIDB4MjcsIDB4Y2MsCi0JCQkgICAgMHgxOCwgMHg1NSwgMHhhMSwgMHgyNCwgMHgwYiwgMHgyNCwgMHgyNCwgMHhhZiwKLQkJCSAgICAweDViLCAweGVjLCAweDY4LCAweGI4LCAweGM4LCAweGY1LCAweGJhLCAweDYzLAotCQkJICAgIDB4ZmYsIDB4ZWQsIDB4ODksIDB4Y2UsIDB4ZDUsIDB4M2QsIDB4ODgsIDB4ZjMsCi0JCQkgICAgMHgyNSwgMHhlZiwgMHgwNSwgMHg3YywgMHgzYSwgMHhlZiwgMHhlYiwgMHhkOCwKLQkJCSAgICAweDdhLCAweDMyLCAweDBkLCAweGQxLCAweDFlLCAweDU4LCAweDU5LCAweDk5LAotCQkJICAgIDB4OTAsIDB4MjUsIDB4YjUsIDB4MjYsIDB4YjAsIDB4ZTMsIDB4MmIsIDB4NmMsCi0JCQkgICAgMHg0YywgMHhhOSwgMHg4YiwgMHg4NCwgMHg0ZiwgMHg1ZSwgMHgwMSwgMHg1MCwKLQkJCSAgICAweDQxLCAweDMwLCAweDU4LCAweGM1LCAweDYyLCAweDc0LCAweDUyLCAweDFkLAotCQkJICAgIDB4NDUsIDB4MjQsIDB4NmEsIDB4NDIsIDB4NjQsIDB4NGYsIDB4OTcsIDB4MWMsCi0JCQkgICAgMHhhOCwgMHg2NiwgMHhiNSwgMHg2ZCwgMHg3OSwgMHhkNCwgMHgwZCwgMHg0OCwKLQkJCSAgICAweGM1LCAweDVmLCAweGYzLCAweDkwLCAweDMyLCAweGRkLCAweGRkLCAweGUxLAotCQkJICAgIDB4ZTQsIDB4YTksIDB4OWYsIDB4ZmMsIDB4YzMsIDB4NTIsIDB4NWEsIDB4NDYsCi0JCQkgICAgMHhlNCwgMHg4MSwgMHg4NCwgMHg5NSwgMHgzNiwgMHg1OSwgMHg3YSwgMHg2YiwKLQkJCSAgICAweGFhLCAweGIzLCAweDYwLCAweGFkLCAweGNlLCAweDlmLCAweDlmLCAweDI4LAotCQkJICAgIDB4ZTAsIDB4MDEsIDB4NzUsIDB4MjIsIDB4YzQsIDB4NGUsIDB4YTksIDB4NjIsCi0JCQkgICAgMHg1YywgMHg2MiwgMHgwZCwgMHgwMCwgMHhjYiwgMHgxMywgMHhlOCwgMHg0MywKLQkJCSAgICAweDcyLCAweGQ0LCAweDJkLCAweDUzLCAweDQ2LCAweGI1LCAweGQxLCAweDE2LAotCQkJICAgIDB4MjIsIDB4MTgsIDB4ZGYsIDB4MzQsIDB4MzMsIDB4ZjUsIDB4ZDYsIDB4MWMsCi0JCQkgICAgMHhiOCwgMHg3OSwgMHg3OCwgMHg5NywgMHg5NCwgMHhmZiwgMHg3MiwgMHgxMywKLQkJCSAgICAweDRjLCAweDI3LCAweGZjLCAweGNiLCAweGJmLCAweDAxLCAweDUzLCAweGE2LAotCQkJICAgIDB4YjQsIDB4NTAsIDB4NmUsIDB4ZGUsIDB4ZGYsIDB4YjUsIDB4NDMsIDB4YTQsCi0JCQkgICAgMHg1OSwgMHhkZiwgMHg1MiwgMHhmOSwgMHg3YywgMHhlMCwgMHgxMSwgMHg2ZiwKLQkJCSAgICAweDJkLCAweDE0LCAweDhlLCAweDI0LCAweDYxLCAweDJjLCAweGUxLCAweDE3LAotCQkJICAgIDB4Y2MsIDB4Y2UsIDB4NTEsIDB4MGMsIDB4MTksIDB4OGEsIDB4ODIsIDB4MzAsCi0JCQkgICAgMHg5NCwgMHhkNSwgMHgzZCwgMHg2YSwgMHg1MywgMHgwNiwgMHg1ZSwgMHhiZCwKLQkJCSAgICAweGI3LCAweGViLCAweGZhLCAweGZkLCAweDI3LCAweDUxLCAweGRlLCAweDg1LAotCQkJICAgIDB4MWUsIDB4ODYsIDB4NTMsIDB4MTEsIDB4NTMsIDB4OTQsIDB4MDAsIDB4ZWUsCi0JCQkgICAgMHgyYiwgMHg4YywgMHgwOCwgMHgyYSwgMHhiZiwgMHhkZCwgMHhhZSwgMHgxMSwKLQkJCSAgICAweGNiLCAweDFlLCAweGEyLCAweDA3LCAweDlhLCAweDgwLCAweGNmLCAweDYyLAotCQkJICAgIDB4OWIsIDB4MDksIDB4ZGMsIDB4OTUsIDB4M2MsIDB4OTYsIDB4OGUsIDB4YjEsCi0JCQkgICAgMHgwOSwgMHhiZCwgMHhlNCwgMHhlYiwgMHhkYiwgMHhjYSwgMHg3MCwgMHg3YSwKLQkJCSAgICAweDllLCAweGZhLCAweDMxLCAweDE4LCAweDQ1LCAweDNjLCAweDIxLCAweDMzLAotCQkJICAgIDB4YjAsIDB4YjMsIDB4MmIsIDB4ZWEsIDB4ZjMsIDB4NzEsIDB4MmQsIDB4ZTEsCi0JCQkgICAgMHgwMywgMHhhZCwgMHgxYiwgMHg0OCwgMHhkNCwgMHg2NywgMHgyNywgMHhmMCwKLQkJCSAgICAweDYyLCAweGU0LCAweDNkLCAweGZiLCAweDliLCAweDA4LCAweDc2LCAweGU3LAotCQkJICAgIDB4ZGQsIDB4MmIsIDB4MDEsIDB4MzksIDB4MDQsIDB4NWEsIDB4NTgsIDB4N2EsCi0JCQkgICAgMHhmNywgMHgxMSwgMHg5MCwgMHhlYywgMHhiZCwgMHg1MSwgMHg1YywgMHgzMiwKLQkJCSAgICAweDZiLCAweGQ3LCAweDM1LCAweDM5LCAweDAyLCAweDZiLCAweGYyLCAweGE2LAotCQkJICAgIDB4ZDAsIDB4MGQsIDB4MDcsIDB4ZTEsIDB4MDYsIDB4YzQsIDB4NWIsIDB4N2QsCi0JCQkgICAgMHhlNCwgMHg2YSwgMHhkNywgMHhlZSwgMHgxNSwgMHgxZiwgMHg4MywgMHhiNCwKLQkJCSAgICAweGEzLCAweGE3LCAweDVlLCAweGMzLCAweDkwLCAweGI3LCAweGVmLCAweGQzLAotCQkJICAgIDB4YjcsIDB4NGYsIDB4ZjgsIDB4OTIsIDB4NGMsIDB4YjcsIDB4M2MsIDB4MjksCi0JCQkgICAgMHhjZCwgMHg3ZSwgMHgyYiwgMHg1ZCwgMHg0MywgMHhlYSwgMHg0MiwgMHhlNywKLQkJCSAgICAweDc0LCAweDNmLCAweDdkLCAweDU4LCAweDg4LCAweDc1LCAweGRlLCAweDNlIH0sCisJCS5yZXN1bHQgPSAiXHgxYVx4MWRceGE5XHgzMFx4YWRceGY5XHgyZlx4OWIiCisJCQkgICJceGI2XHgxZFx4YWVceGVmXHhmMFx4MmZceGY4XHg1YSIKKwkJCSAgIlx4MzlceDNjXHhiZlx4MmFceGIyXHg0NVx4YjJceDIzIgorCQkJICAiXHgxYlx4NjNceDNjXHhjZlx4YWFceGJlXHhjZlx4NGUiCisJCQkgICJceGZhXHhlOFx4MjlceGMyXHgyMFx4NjhceDJiXHgzYyIKKwkJCSAgIlx4MmVceDhiXHhmN1x4NmVceDI1XHhiZFx4ZTNceDNkIgorCQkJICAiXHg2Nlx4MjdceGQ2XHhhZlx4ZDZceDY0XHgzZVx4ZTMiCisJCQkgICJceGU4XHg1OFx4NDZceDk3XHgzOVx4NTFceDA3XHhkZSIKKwkJCSAgIlx4Y2JceDM3XHhiY1x4YTlceGMwXHg1Zlx4NzVceGMzIgorCQkJICAiXHgwZVx4ODRceDIzXHgxZFx4MTZceGQ0XHgxY1x4NTkiCisJCQkgICJceDljXHgxYVx4MDJceDU1XHhhYlx4M2FceDk3XHgxZCIKKwkJCSAgIlx4ZGZceGRkXHhjN1x4MDZceDUxXHhkN1x4NzBceGFlIgorCQkJICAiXHgyM1x4YzZceDhjXHhmNVx4MWVceGEwXHhlNVx4ODIiCisJCQkgICJceGI4XHhiMlx4YmZceDA0XHhhMFx4MzJceDhlXHg2OCIKKwkJCSAgIlx4ZWJceGFmXHg2ZVx4MmRceDk0XHgyMlx4MmZceGNlIgorCQkJICAiXHg0Y1x4YjVceDU5XHhlMlx4YTJceDJmXHhhMFx4OTgiCisJCQkgICJceDFhXHg5N1x4YzZceGQ0XHhiNVx4MDBceDU5XHhmMiIKKwkJCSAgIlx4ODRceDE0XHg3Mlx4YjFceDlhXHg2ZVx4YTNceDdmIgorCQkJICAiXHhlYVx4MjBceGU3XHhjYlx4NjVceDc3XHgzYVx4ZGYiCisJCQkgICJceGM4XHg5N1x4NjdceDE1XHhjMlx4MmFceDI3XHhjYyIKKwkJCSAgIlx4MThceDU1XHhhMVx4MjRceDBiXHgyNFx4MjRceGFmIgorCQkJICAiXHg1Ylx4ZWNceDY4XHhiOFx4YzhceGY1XHhiYVx4NjMiCisJCQkgICJceGZmXHhlZFx4ODlceGNlXHhkNVx4M2RceDg4XHhmMyIKKwkJCSAgIlx4MjVceGVmXHgwNVx4N2NceDNhXHhlZlx4ZWJceGQ4IgorCQkJICAiXHg3YVx4MzJceDBkXHhkMVx4MWVceDU4XHg1OVx4OTkiCisJCQkgICJceDkwXHgyNVx4YjVceDI2XHhiMFx4ZTNceDJiXHg2YyIKKwkJCSAgIlx4NGNceGE5XHg4Ylx4ODRceDRmXHg1ZVx4MDFceDUwIgorCQkJICAiXHg0MVx4MzBceDU4XHhjNVx4NjJceDc0XHg1Mlx4MWQiCisJCQkgICJceDQ1XHgyNFx4NmFceDQyXHg2NFx4NGZceDk3XHgxYyIKKwkJCSAgIlx4YThceDY2XHhiNVx4NmRceDc5XHhkNFx4MGRceDQ4IgorCQkJICAiXHhjNVx4NWZceGYzXHg5MFx4MzJceGRkXHhkZFx4ZTEiCisJCQkgICJceGU0XHhhOVx4OWZceGZjXHhjM1x4NTJceDVhXHg0NiIKKwkJCSAgIlx4ZTRceDgxXHg4NFx4OTVceDM2XHg1OVx4N2FceDZiIgorCQkJICAiXHhhYVx4YjNceDYwXHhhZFx4Y2VceDlmXHg5Zlx4MjgiCisJCQkgICJceGUwXHgwMVx4NzVceDIyXHhjNFx4NGVceGE5XHg2MiIKKwkJCSAgIlx4NWNceDYyXHgwZFx4MDBceGNiXHgxM1x4ZThceDQzIgorCQkJICAiXHg3Mlx4ZDRceDJkXHg1M1x4NDZceGI1XHhkMVx4MTYiCisJCQkgICJceDIyXHgxOFx4ZGZceDM0XHgzM1x4ZjVceGQ2XHgxYyIKKwkJCSAgIlx4YjhceDc5XHg3OFx4OTdceDk0XHhmZlx4NzJceDEzIgorCQkJICAiXHg0Y1x4MjdceGZjXHhjYlx4YmZceDAxXHg1M1x4YTYiCisJCQkgICJceGI0XHg1MFx4NmVceGRlXHhkZlx4YjVceDQzXHhhNCIKKwkJCSAgIlx4NTlceGRmXHg1Mlx4ZjlceDdjXHhlMFx4MTFceDZmIgorCQkJICAiXHgyZFx4MTRceDhlXHgyNFx4NjFceDJjXHhlMVx4MTciCisJCQkgICJceGNjXHhjZVx4NTFceDBjXHgxOVx4OGFceDgyXHgzMCIKKwkJCSAgIlx4OTRceGQ1XHgzZFx4NmFceDUzXHgwNlx4NWVceGJkIgorCQkJICAiXHhiN1x4ZWJceGZhXHhmZFx4MjdceDUxXHhkZVx4ODUiCisJCQkgICJceDFlXHg4Nlx4NTNceDExXHg1M1x4OTRceDAwXHhlZSIKKwkJCSAgIlx4MmJceDhjXHgwOFx4MmFceGJmXHhkZFx4YWVceDExIgorCQkJICAiXHhjYlx4MWVceGEyXHgwN1x4OWFceDgwXHhjZlx4NjIiCisJCQkgICJceDliXHgwOVx4ZGNceDk1XHgzY1x4OTZceDhlXHhiMSIKKwkJCSAgIlx4MDlceGJkXHhlNFx4ZWJceGRiXHhjYVx4NzBceDdhIgorCQkJICAiXHg5ZVx4ZmFceDMxXHgxOFx4NDVceDNjXHgyMVx4MzMiCisJCQkgICJceGIwXHhiM1x4MmJceGVhXHhmM1x4NzFceDJkXHhlMSIKKwkJCSAgIlx4MDNceGFkXHgxYlx4NDhceGQ0XHg2N1x4MjdceGYwIgorCQkJICAiXHg2Mlx4ZTRceDNkXHhmYlx4OWJceDA4XHg3Nlx4ZTciCisJCQkgICJceGRkXHgyYlx4MDFceDM5XHgwNFx4NWFceDU4XHg3YSIKKwkJCSAgIlx4ZjdceDExXHg5MFx4ZWNceGJkXHg1MVx4NWNceDMyIgorCQkJICAiXHg2Ylx4ZDdceDM1XHgzOVx4MDJceDZiXHhmMlx4YTYiCisJCQkgICJceGQwXHgwZFx4MDdceGUxXHgwNlx4YzRceDViXHg3ZCIKKwkJCSAgIlx4ZTRceDZhXHhkN1x4ZWVceDE1XHgxZlx4ODNceGI0IgorCQkJICAiXHhhM1x4YTdceDVlXHhjM1x4OTBceGI3XHhlZlx4ZDMiCisJCQkgICJceGI3XHg0Zlx4ZjhceDkyXHg0Y1x4YjdceDNjXHgyOSIKKwkJCSAgIlx4Y2RceDdlXHgyYlx4NWRceDQzXHhlYVx4NDJceGU3IgorCQkJICAiXHg3NFx4M2ZceDdkXHg1OFx4ODhceDc1XHhkZVx4M2UiLAogCQkucmxlbiAgID0gNTEyLAogCX0KIH07CkBAIC0yODA5LDI1MCArMjgzNCwyNDkgQEAKIAkvKiBmcm9tIGh0dHA6Ly9ncm91cGVyLmllZWUub3JnL2dyb3Vwcy8xNjE5L2VtYWlsL3BkZjAwMDE3LnBkZiAqLwogCS8qIHNhbWUgYXMgZW5jIHZlY3RvcnMgd2l0aCBpbnB1dCBhbmQgcmVzdWx0IHJldmVyc2VkICovCiAJeyAvKiBMUlctMzItQUVTIDEgKi8KLQkJLmtleSAgICA9IHsgMHg0NSwgMHg2MiwgMHhhYywgMHgyNSwgMHhmOCwgMHgyOCwgMHgxNywgMHg2ZCwKLQkJCSAgICAweDRjLCAweDI2LCAweDg0LCAweDE0LCAweGI1LCAweDY4LCAweDAxLCAweDg1LAotCQkJICAgIDB4MjUsIDB4OGUsIDB4MmEsIDB4MDUsIDB4ZTcsIDB4M2UsIDB4OWQsIDB4MDMsCi0JCQkgICAgMHhlZSwgMHg1YSwgMHg4MywgMHgwYywgMHhjYywgMHgwOSwgMHg0YywgMHg4NyB9LAorCQkua2V5ICAgID0gIlx4NDVceDYyXHhhY1x4MjVceGY4XHgyOFx4MTdceDZkIgorCQkJICAiXHg0Y1x4MjZceDg0XHgxNFx4YjVceDY4XHgwMVx4ODUiCisJCQkgICJceDI1XHg4ZVx4MmFceDA1XHhlN1x4M2VceDlkXHgwMyIKKwkJCSAgIlx4ZWVceDVhXHg4M1x4MGNceGNjXHgwOVx4NGNceDg3IiwKIAkJLmtsZW4gICA9IDMyLAotCQkuaXYgICAgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKLQkJLmlucHV0ICA9IHsgMHhmMSwgMHhiMiwgMHg3MywgMHhjZCwgMHg2NSwgMHhhMywgMHhkZiwgMHg1ZiwKLQkJCSAgICAweGU5LCAweDVkLCAweDQ4LCAweDkyLCAweDU0LCAweDYzLCAweDRlLCAweGI4IH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMSIsCisJCS5pbnB1dCAgPSAiXHhmMVx4YjJceDczXHhjZFx4NjVceGEzXHhkZlx4NWYiCisJCQkgICJceGU5XHg1ZFx4NDhceDkyXHg1NFx4NjNceDRlXHhiOCIsCiAJCS5pbGVuICAgPSAxNiwKLQkJLnJlc3VsdCA9IHsgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkJCSAgICAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCisJCS5yZXN1bHQgPSAiXHgzMFx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzciCisJCQkgICJceDM4XHgzOVx4NDFceDQyXHg0M1x4NDRceDQ1XHg0NiIsCiAJCS5ybGVuICAgPSAxNiwKIAl9LCB7IC8qIExSVy0zMi1BRVMgMiAqLwotCQkua2V5ICAgID0geyAweDU5LCAweDcwLCAweDQ3LCAweDE0LCAweGY1LCAweDU3LCAweDQ3LCAweDhjLAotCQkgIAkgICAgMHhkNywgMHg3OSwgMHhlOCwgMHgwZiwgMHg1NCwgMHg4OCwgMHg3OSwgMHg0NCwKLQkJCSAgICAweDBkLCAweDQ4LCAweGYwLCAweGI3LCAweGIxLCAweDVhLCAweDUzLCAweGVhLAotCQkJICAgIDB4MWMsIDB4YWEsIDB4NmIsIDB4MjksIDB4YzIsIDB4Y2EsIDB4ZmIsIDB4YWYKLQkJfSwKKwkJLmtleSAgICA9ICJceDU5XHg3MFx4NDdceDE0XHhmNVx4NTdceDQ3XHg4YyIKKwkJCSAgIlx4ZDdceDc5XHhlOFx4MGZceDU0XHg4OFx4NzlceDQ0IgorCQkJICAiXHgwZFx4NDhceGYwXHhiN1x4YjFceDVhXHg1M1x4ZWEiCisJCQkgICJceDFjXHhhYVx4NmJceDI5XHhjMlx4Y2FceGZiXHhhZiIsCiAJCS5rbGVuICAgPSAzMiwKLQkJLml2ICAgICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyIH0sCi0JCS5pbnB1dCAgPSB7IDB4MDAsIDB4YzgsIDB4MmIsIDB4YWUsIDB4OTUsIDB4YmIsIDB4Y2QsIDB4ZTUsCi0JCQkgICAgMHgyNywgMHg0ZiwgMHgwNywgMHg2OSwgMHhiMiwgMHg2MCwgMHhlMSwgMHgzNiB9LAorCQkuaXYgICAgID0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDIiLAorCQkuaW5wdXQgID0gIlx4MDBceGM4XHgyYlx4YWVceDk1XHhiYlx4Y2RceGU1IgorCQkJICAiXHgyN1x4NGZceDA3XHg2OVx4YjJceDYwXHhlMVx4MzYiLAogCQkuaWxlbiAgID0gMTYsCi0JCS5yZXN1bHQgID0geyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgICAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCisJCS5yZXN1bHQgID0gIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJICAgIlx4MzhceDM5XHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2IiwKIAkJLnJsZW4gICA9IDE2LAogCX0sIHsgLyogTFJXLTMyLUFFUyAzICovCi0JCS5rZXkgICAgPSB7IDB4ZDgsIDB4MmEsIDB4OTEsIDB4MzQsIDB4YjIsIDB4NmEsIDB4NTYsIDB4NTAsCi0JCSAgCSAgICAweDMwLCAweGZlLCAweDY5LCAweGUyLCAweDM3LCAweDdmLCAweDk4LCAweDQ3LAotCQkJICAgIDB4Y2QsIDB4ZjksIDB4MGIsIDB4MTYsIDB4MGMsIDB4NjQsIDB4OGYsIDB4YjYsCi0JCQkgICAgMHhiMCwgMHgwZCwgMHgwZCwgMHgxYiwgMHhhZSwgMHg4NSwgMHg4NywgMHgxZiB9LAorCQkua2V5ICAgID0gIlx4ZDhceDJhXHg5MVx4MzRceGIyXHg2YVx4NTZceDUwIgorCQkJICAiXHgzMFx4ZmVceDY5XHhlMlx4MzdceDdmXHg5OFx4NDciCisJCQkgICJceGNkXHhmOVx4MGJceDE2XHgwY1x4NjRceDhmXHhiNiIKKwkJCSAgIlx4YjBceDBkXHgwZFx4MWJceGFlXHg4NVx4ODdceDFmIiwKIAkJLmtsZW4gICA9IDMyLAotCQkuaXYgICAgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKLQkJLmlucHV0ICA9IHsgMHg3NiwgMHgzMiwgMHgyMSwgMHg4MywgMHhlZCwgMHg4ZiwgMHhmMSwgMHg4MiwKLQkJCSAgICAweGY5LCAweDU5LCAweDYyLCAweDAzLCAweDY5LCAweDBlLCAweDVlLCAweDAxIH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCAgPSAiXHg3Nlx4MzJceDIxXHg4M1x4ZWRceDhmXHhmMVx4ODIiCisJCQkgICJceGY5XHg1OVx4NjJceDAzXHg2OVx4MGVceDVlXHgwMSIsCiAJCS5pbGVuICAgPSAxNiwKLQkJLnJlc3VsdCA9IHsgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkJCSAgICAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCisJCS5yZXN1bHQgPSAiXHgzMFx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzciCisJCQkgICJceDM4XHgzOVx4NDFceDQyXHg0M1x4NDRceDQ1XHg0NiIsCiAJCS5ybGVuICAgPSAxNiwKIAl9LCB7IC8qIExSVy0zMi1BRVMgNCAqLwotCQkua2V5ICAgID0geyAweDBmLCAweDZhLCAweGVmLCAweGY4LCAweGQzLCAweGQyLCAweGJiLCAweDE1LAotCQkgIAkgICAgMHgyNSwgMHg4MywgMHhmNywgMHgzYywgMHgxZiwgMHgwMSwgMHgyOCwgMHg3NCwKLQkJCSAgICAweGNhLCAweGM2LCAweGJjLCAweDM1LCAweDRkLCAweDRhLCAweDY1LCAweDU0LAotCQkJICAgIDB4OTAsIDB4YWUsIDB4NjEsIDB4Y2YsIDB4N2IsIDB4YWUsIDB4YmQsIDB4Y2MsCi0JCQkgICAgMHhhZCwgMHhlNCwgMHg5NCwgMHhjNSwgMHg0YSwgMHgyOSwgMHhhZSwgMHg3MCB9LAorCQkua2V5ICAgID0gIlx4MGZceDZhXHhlZlx4ZjhceGQzXHhkMlx4YmJceDE1IgorCQkJICAiXHgyNVx4ODNceGY3XHgzY1x4MWZceDAxXHgyOFx4NzQiCisJCQkgICJceGNhXHhjNlx4YmNceDM1XHg0ZFx4NGFceDY1XHg1NCIKKwkJCSAgIlx4OTBceGFlXHg2MVx4Y2ZceDdiXHhhZVx4YmRceGNjIgorCQkJICAiXHhhZFx4ZTRceDk0XHhjNVx4NGFceDI5XHhhZVx4NzAiLAogCQkua2xlbiAgID0gNDAsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAotCQkuaW5wdXQgID0geyAweDljLCAweDBmLCAweDE1LCAweDJmLCAweDU1LCAweGEyLCAweGQ4LCAweGYwLAotCQkJICAgIDB4ZDYsIDB4N2IsIDB4OGYsIDB4OWUsIDB4MjgsIDB4MjIsIDB4YmMsIDB4NDEgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxIiwKKwkJLmlucHV0ICA9ICJceDljXHgwZlx4MTVceDJmXHg1NVx4YTJceGQ4XHhmMCIKKwkJCSAgIlx4ZDZceDdiXHg4Zlx4OWVceDI4XHgyMlx4YmNceDQxIiwKIAkJLmlsZW4gICA9IDE2LAotCQkucmVzdWx0ID0geyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKKwkJLnJlc3VsdCA9ICJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzNyIKKwkJCSAgIlx4MzhceDM5XHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2IiwKIAkJLnJsZW4gICA9IDE2LAogCX0sIHsgLyogTFJXLTMyLUFFUyA1ICovCi0JCS5rZXkgICAgPSB7IDB4OGEsIDB4ZDQsIDB4ZWUsIDB4MTAsIDB4MmYsIDB4YmQsIDB4ODEsIDB4ZmYsCi0JCSAgCSAgICAweGY4LCAweDg2LCAweGNlLCAweGFjLCAweDkzLCAweGM1LCAweGFkLCAweGM2LAotCQkJICAgIDB4YTAsIDB4MTksIDB4MDcsIDB4YzAsIDB4OWQsIDB4ZjcsIDB4YmIsIDB4ZGQsCi0JCQkgICAgMHg1MiwgMHgxMywgMHhiMiwgMHhiNywgMHhmMCwgMHhmZiwgMHgxMSwgMHhkOCwKLQkJCSAgICAweGQ2LCAweDA4LCAweGQwLCAweGNkLCAweDJlLCAweGIxLCAweDE3LCAweDZmIH0sCisJCS5rZXkgICAgPSAiXHg4YVx4ZDRceGVlXHgxMFx4MmZceGJkXHg4MVx4ZmYiCisJCQkgICJceGY4XHg4Nlx4Y2VceGFjXHg5M1x4YzVceGFkXHhjNiIKKwkJCSAgIlx4YTBceDE5XHgwN1x4YzBceDlkXHhmN1x4YmJceGRkIgorCQkJICAiXHg1Mlx4MTNceGIyXHhiN1x4ZjBceGZmXHgxMVx4ZDgiCisJCQkgICJceGQ2XHgwOFx4ZDBceGNkXHgyZVx4YjFceDE3XHg2ZiIsCiAJCS5rbGVuICAgPSA0MCwKLQkJLml2ICAgICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCS5pbnB1dCAgPSB7IDB4ZDQsIDB4MjcsIDB4NmEsIDB4N2YsIDB4MTQsIDB4OTEsIDB4M2QsIDB4NjUsCi0JCQkgICAgMHhjOCwgMHg2MCwgMHg0OCwgMHgwMiwgMHg4NywgMHhlMywgMHgzNCwgMHgwNiB9LAorCQkuaXYgICAgID0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQgID0gIlx4ZDRceDI3XHg2YVx4N2ZceDE0XHg5MVx4M2RceDY1IgorCQkJICAiXHhjOFx4NjBceDQ4XHgwMlx4ODdceGUzXHgzNFx4MDYiLAogCQkuaWxlbiAgID0gMTYsCi0JCS5yZXN1bHQgPSB7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0JCQkgICAgMHgzOCwgMHgzOSwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiB9LAorCQkucmVzdWx0ID0gIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJICAiXHgzOFx4MzlceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDYiLAogCQkucmxlbiAgID0gMTYsCiAJfSwgeyAvKiBMUlctMzItQUVTIDYgKi8KLQkJLmtleSAgICA9IHsgMHhmOCwgMHhkNCwgMHg3NiwgMHhmZiwgMHhkNiwgMHg0NiwgMHhlZSwgMHg2YywKLQkJICAJICAgIDB4MjMsIDB4ODQsIDB4Y2IsIDB4MWMsIDB4NzcsIDB4ZDYsIDB4MTksIDB4NWQsCi0JCQkgICAgMHhmZSwgMHhmMSwgMHhhOSwgMHhmMywgMHg3YiwgMHhiYywgMHg4ZCwgMHgyMSwKLQkJCSAgICAweGE3LCAweDljLCAweDIxLCAweGY4LCAweGNiLCAweDkwLCAweDAyLCAweDg5LAotCQkJICAgIDB4YTgsIDB4NDUsIDB4MzQsIDB4OGUsIDB4YzgsIDB4YzUsIDB4YjUsIDB4ZjEsCi0JCQkgICAgMHgyNiwgMHhmNSwgMHgwZSwgMHg3NiwgMHhmZSwgMHhmZCwgMHgxYiwgMHgxZSB9LAorCQkua2V5ICAgID0gIlx4ZjhceGQ0XHg3Nlx4ZmZceGQ2XHg0Nlx4ZWVceDZjIgorCQkJICAiXHgyM1x4ODRceGNiXHgxY1x4NzdceGQ2XHgxOVx4NWQiCisJCQkgICJceGZlXHhmMVx4YTlceGYzXHg3Ylx4YmNceDhkXHgyMSIKKwkJCSAgIlx4YTdceDljXHgyMVx4ZjhceGNiXHg5MFx4MDJceDg5IgorCQkJICAiXHhhOFx4NDVceDM0XHg4ZVx4YzhceGM1XHhiNVx4ZjEiCisJCQkgICJceDI2XHhmNVx4MGVceDc2XHhmZVx4ZmRceDFiXHgxZSIsCiAJCS5rbGVuICAgPSA0OCwKLQkJLml2ICAgICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCi0JCS5pbnB1dCAgPSB7IDB4YmQsIDB4MDYsIDB4YjgsIDB4ZTEsIDB4ZGIsIDB4OTgsIDB4ODksIDB4OWUsCi0JCQkgICAgMHhjNCwgMHg5OCwgMHhlNCwgMHg5MSwgMHhjZiwgMHgxYywgMHg3MCwgMHgyYiB9LAorCQkuaXYgICAgID0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEiLAorCQkuaW5wdXQgID0gIlx4YmRceDA2XHhiOFx4ZTFceGRiXHg5OFx4ODlceDllIgorCQkJICAiXHhjNFx4OThceGU0XHg5MVx4Y2ZceDFjXHg3MFx4MmIiLAogCQkuaWxlbiAgID0gMTYsCi0JCS5yZXN1bHQgPSB7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0JCQkgICAgMHgzOCwgMHgzOSwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiB9LAorCQkucmVzdWx0ID0gIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJICAiXHgzOFx4MzlceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDYiLAogCQkucmxlbiAgID0gMTYsCiAJfSwgeyAvKiBMUlctMzItQUVTIDcgKi8KLQkJLmtleSAgICA9IHsgMHhmYiwgMHg3NiwgMHgxNSwgMHhiMiwgMHgzZCwgMHg4MCwgMHg4OSwgMHgxZCwKLQkJICAJICAgIDB4ZDQsIDB4NzAsIDB4OTgsIDB4MGIsIDB4YzcsIDB4OTUsIDB4ODQsIDB4YzgsCi0JCQkgICAgMHhiMiwgMHhmYiwgMHg2NCwgMHhjZSwgMHg2MCwgMHg5NywgMHg4NywgMHg4ZCwKLQkJCSAgICAweDE3LCAweGZjLCAweGU0LCAweDVhLCAweDQ5LCAweGU4LCAweDMwLCAweGI3LAotCQkJICAgIDB4NmUsIDB4NzgsIDB4MTcsIDB4ZTcsIDB4MmQsIDB4NWUsIDB4MTIsIDB4ZDQsCi0JCQkgICAgMHg2MCwgMHg2NCwgMHgwNCwgMHg3YSwgMHhmMSwgMHgyZiwgMHg5ZSwgMHgwYyB9LAorCQkua2V5ICAgID0gIlx4ZmJceDc2XHgxNVx4YjJceDNkXHg4MFx4ODlceDFkIgorCQkJICAiXHhkNFx4NzBceDk4XHgwYlx4YzdceDk1XHg4NFx4YzgiCisJCQkgICJceGIyXHhmYlx4NjRceGNlXHg2MFx4OTdceDg3XHg4ZCIKKwkJCSAgIlx4MTdceGZjXHhlNFx4NWFceDQ5XHhlOFx4MzBceGI3IgorCQkJICAiXHg2ZVx4NzhceDE3XHhlN1x4MmRceDVlXHgxMlx4ZDQiCisJCQkgICJceDYwXHg2NFx4MDRceDdhXHhmMVx4MmZceDllXHgwYyIsCiAJCS5rbGVuICAgPSA0OCwKLQkJLml2ICAgICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCS5pbnB1dCAgPSB7IDB4NWIsIDB4OTAsIDB4OGUsIDB4YzEsIDB4YWIsIDB4ZGQsIDB4NjcsIDB4NWYsCi0JCQkgICAgMHgzZCwgMHg2OSwgMHg4YSwgMHg5NSwgMHg1MywgMHhjOCwgMHg5YywgMHhlNSB9LAorCQkuaXYgICAgID0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQgID0gIlx4NWJceDkwXHg4ZVx4YzFceGFiXHhkZFx4NjdceDVmIgorCQkJICAiXHgzZFx4NjlceDhhXHg5NVx4NTNceGM4XHg5Y1x4ZTUiLAogCQkuaWxlbiAgID0gMTYsCi0JCS5yZXN1bHQgPSB7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0JCQkgICAgMHgzOCwgMHgzOSwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiB9LAorCQkucmVzdWx0ID0gIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJICAiXHgzOFx4MzlceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDYiLAogCQkucmxlbiAgID0gMTYsCiAJfSwgewogLyogaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3N0ZHMtcDE2MTlAbGlzdHNlcnYuaWVlZS5vcmcvbXNnMDAxNzMuaHRtbCAqLwotCQkua2V5ICAgID0geyAweGY4LCAweGQ0LCAweDc2LCAweGZmLCAweGQ2LCAweDQ2LCAweGVlLCAweDZjLAotCQkJICAgIDB4MjMsIDB4ODQsIDB4Y2IsIDB4MWMsIDB4NzcsIDB4ZDYsIDB4MTksIDB4NWQsCi0JCQkgICAgMHhmZSwgMHhmMSwgMHhhOSwgMHhmMywgMHg3YiwgMHhiYywgMHg4ZCwgMHgyMSwKLQkJCSAgICAweGE3LCAweDljLCAweDIxLCAweGY4LCAweGNiLCAweDkwLCAweDAyLCAweDg5LAotCQkJICAgIDB4YTgsIDB4NDUsIDB4MzQsIDB4OGUsIDB4YzgsIDB4YzUsIDB4YjUsIDB4ZjEsCi0JCQkgICAgMHgyNiwgMHhmNSwgMHgwZSwgMHg3NiwgMHhmZSwgMHhmZCwgMHgxYiwgMHgxZSB9LAorCQkua2V5ICAgID0gIlx4ZjhceGQ0XHg3Nlx4ZmZceGQ2XHg0Nlx4ZWVceDZjIgorCQkJICAiXHgyM1x4ODRceGNiXHgxY1x4NzdceGQ2XHgxOVx4NWQiCisJCQkgICJceGZlXHhmMVx4YTlceGYzXHg3Ylx4YmNceDhkXHgyMSIKKwkJCSAgIlx4YTdceDljXHgyMVx4ZjhceGNiXHg5MFx4MDJceDg5IgorCQkJICAiXHhhOFx4NDVceDM0XHg4ZVx4YzhceGM1XHhiNVx4ZjEiCisJCQkgICJceDI2XHhmNVx4MGVceDc2XHhmZVx4ZmRceDFiXHgxZSIsCiAJCS5rbGVuICAgPSA0OCwKLQkJLml2ICAgICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCi0JCS5pbnB1dAk9IHsgMHgxYSwgMHgxZCwgMHhhOSwgMHgzMCwgMHhhZCwgMHhmOSwgMHgyZiwgMHg5YiwKLQkJCSAgICAweGI2LCAweDFkLCAweGFlLCAweGVmLCAweGYwLCAweDJmLCAweGY4LCAweDVhLAotCQkJICAgIDB4MzksIDB4M2MsIDB4YmYsIDB4MmEsIDB4YjIsIDB4NDUsIDB4YjIsIDB4MjMsCi0JCQkgICAgMHgxYiwgMHg2MywgMHgzYywgMHhjZiwgMHhhYSwgMHhiZSwgMHhjZiwgMHg0ZSwKLQkJCSAgICAweGZhLCAweGU4LCAweDI5LCAweGMyLCAweDIwLCAweDY4LCAweDJiLCAweDNjLAotCQkJICAgIDB4MmUsIDB4OGIsIDB4ZjcsIDB4NmUsIDB4MjUsIDB4YmQsIDB4ZTMsIDB4M2QsCi0JCQkgICAgMHg2NiwgMHgyNywgMHhkNiwgMHhhZiwgMHhkNiwgMHg2NCwgMHgzZSwgMHhlMywKLQkJCSAgICAweGU4LCAweDU4LCAweDQ2LCAweDk3LCAweDM5LCAweDUxLCAweDA3LCAweGRlLAotCQkJICAgIDB4Y2IsIDB4MzcsIDB4YmMsIDB4YTksIDB4YzAsIDB4NWYsIDB4NzUsIDB4YzMsCi0JCQkgICAgMHgwZSwgMHg4NCwgMHgyMywgMHgxZCwgMHgxNiwgMHhkNCwgMHgxYywgMHg1OSwKLQkJCSAgICAweDljLCAweDFhLCAweDAyLCAweDU1LCAweGFiLCAweDNhLCAweDk3LCAweDFkLAotCQkJICAgIDB4ZGYsIDB4ZGQsIDB4YzcsIDB4MDYsIDB4NTEsIDB4ZDcsIDB4NzAsIDB4YWUsCi0JCQkgICAgMHgyMywgMHhjNiwgMHg4YywgMHhmNSwgMHgxZSwgMHhhMCwgMHhlNSwgMHg4MiwKLQkJCSAgICAweGI4LCAweGIyLCAweGJmLCAweDA0LCAweGEwLCAweDMyLCAweDhlLCAweDY4LAotCQkJICAgIDB4ZWIsIDB4YWYsIDB4NmUsIDB4MmQsIDB4OTQsIDB4MjIsIDB4MmYsIDB4Y2UsCi0JCQkgICAgMHg0YywgMHhiNSwgMHg1OSwgMHhlMiwgMHhhMiwgMHgyZiwgMHhhMCwgMHg5OCwKLQkJCSAgICAweDFhLCAweDk3LCAweGM2LCAweGQ0LCAweGI1LCAweDAwLCAweDU5LCAweGYyLAotCQkJICAgIDB4ODQsIDB4MTQsIDB4NzIsIDB4YjEsIDB4OWEsIDB4NmUsIDB4YTMsIDB4N2YsCi0JCQkgICAgMHhlYSwgMHgyMCwgMHhlNywgMHhjYiwgMHg2NSwgMHg3NywgMHgzYSwgMHhkZiwKLQkJCSAgICAweGM4LCAweDk3LCAweDY3LCAweDE1LCAweGMyLCAweDJhLCAweDI3LCAweGNjLAotCQkJICAgIDB4MTgsIDB4NTUsIDB4YTEsIDB4MjQsIDB4MGIsIDB4MjQsIDB4MjQsIDB4YWYsCi0JCQkgICAgMHg1YiwgMHhlYywgMHg2OCwgMHhiOCwgMHhjOCwgMHhmNSwgMHhiYSwgMHg2MywKLQkJCSAgICAweGZmLCAweGVkLCAweDg5LCAweGNlLCAweGQ1LCAweDNkLCAweDg4LCAweGYzLAotCQkJICAgIDB4MjUsIDB4ZWYsIDB4MDUsIDB4N2MsIDB4M2EsIDB4ZWYsIDB4ZWIsIDB4ZDgsCi0JCQkgICAgMHg3YSwgMHgzMiwgMHgwZCwgMHhkMSwgMHgxZSwgMHg1OCwgMHg1OSwgMHg5OSwKLQkJCSAgICAweDkwLCAweDI1LCAweGI1LCAweDI2LCAweGIwLCAweGUzLCAweDJiLCAweDZjLAotCQkJICAgIDB4NGMsIDB4YTksIDB4OGIsIDB4ODQsIDB4NGYsIDB4NWUsIDB4MDEsIDB4NTAsCi0JCQkgICAgMHg0MSwgMHgzMCwgMHg1OCwgMHhjNSwgMHg2MiwgMHg3NCwgMHg1MiwgMHgxZCwKLQkJCSAgICAweDQ1LCAweDI0LCAweDZhLCAweDQyLCAweDY0LCAweDRmLCAweDk3LCAweDFjLAotCQkJICAgIDB4YTgsIDB4NjYsIDB4YjUsIDB4NmQsIDB4NzksIDB4ZDQsIDB4MGQsIDB4NDgsCi0JCQkgICAgMHhjNSwgMHg1ZiwgMHhmMywgMHg5MCwgMHgzMiwgMHhkZCwgMHhkZCwgMHhlMSwKLQkJCSAgICAweGU0LCAweGE5LCAweDlmLCAweGZjLCAweGMzLCAweDUyLCAweDVhLCAweDQ2LAotCQkJICAgIDB4ZTQsIDB4ODEsIDB4ODQsIDB4OTUsIDB4MzYsIDB4NTksIDB4N2EsIDB4NmIsCi0JCQkgICAgMHhhYSwgMHhiMywgMHg2MCwgMHhhZCwgMHhjZSwgMHg5ZiwgMHg5ZiwgMHgyOCwKLQkJCSAgICAweGUwLCAweDAxLCAweDc1LCAweDIyLCAweGM0LCAweDRlLCAweGE5LCAweDYyLAotCQkJICAgIDB4NWMsIDB4NjIsIDB4MGQsIDB4MDAsIDB4Y2IsIDB4MTMsIDB4ZTgsIDB4NDMsCi0JCQkgICAgMHg3MiwgMHhkNCwgMHgyZCwgMHg1MywgMHg0NiwgMHhiNSwgMHhkMSwgMHgxNiwKLQkJCSAgICAweDIyLCAweDE4LCAweGRmLCAweDM0LCAweDMzLCAweGY1LCAweGQ2LCAweDFjLAotCQkJICAgIDB4YjgsIDB4NzksIDB4NzgsIDB4OTcsIDB4OTQsIDB4ZmYsIDB4NzIsIDB4MTMsCi0JCQkgICAgMHg0YywgMHgyNywgMHhmYywgMHhjYiwgMHhiZiwgMHgwMSwgMHg1MywgMHhhNiwKLQkJCSAgICAweGI0LCAweDUwLCAweDZlLCAweGRlLCAweGRmLCAweGI1LCAweDQzLCAweGE0LAotCQkJICAgIDB4NTksIDB4ZGYsIDB4NTIsIDB4ZjksIDB4N2MsIDB4ZTAsIDB4MTEsIDB4NmYsCi0JCQkgICAgMHgyZCwgMHgxNCwgMHg4ZSwgMHgyNCwgMHg2MSwgMHgyYywgMHhlMSwgMHgxNywKLQkJCSAgICAweGNjLCAweGNlLCAweDUxLCAweDBjLCAweDE5LCAweDhhLCAweDgyLCAweDMwLAotCQkJICAgIDB4OTQsIDB4ZDUsIDB4M2QsIDB4NmEsIDB4NTMsIDB4MDYsIDB4NWUsIDB4YmQsCi0JCQkgICAgMHhiNywgMHhlYiwgMHhmYSwgMHhmZCwgMHgyNywgMHg1MSwgMHhkZSwgMHg4NSwKLQkJCSAgICAweDFlLCAweDg2LCAweDUzLCAweDExLCAweDUzLCAweDk0LCAweDAwLCAweGVlLAotCQkJICAgIDB4MmIsIDB4OGMsIDB4MDgsIDB4MmEsIDB4YmYsIDB4ZGQsIDB4YWUsIDB4MTEsCi0JCQkgICAgMHhjYiwgMHgxZSwgMHhhMiwgMHgwNywgMHg5YSwgMHg4MCwgMHhjZiwgMHg2MiwKLQkJCSAgICAweDliLCAweDA5LCAweGRjLCAweDk1LCAweDNjLCAweDk2LCAweDhlLCAweGIxLAotCQkJICAgIDB4MDksIDB4YmQsIDB4ZTQsIDB4ZWIsIDB4ZGIsIDB4Y2EsIDB4NzAsIDB4N2EsCi0JCQkgICAgMHg5ZSwgMHhmYSwgMHgzMSwgMHgxOCwgMHg0NSwgMHgzYywgMHgyMSwgMHgzMywKLQkJCSAgICAweGIwLCAweGIzLCAweDJiLCAweGVhLCAweGYzLCAweDcxLCAweDJkLCAweGUxLAotCQkJICAgIDB4MDMsIDB4YWQsIDB4MWIsIDB4NDgsIDB4ZDQsIDB4NjcsIDB4MjcsIDB4ZjAsCi0JCQkgICAgMHg2MiwgMHhlNCwgMHgzZCwgMHhmYiwgMHg5YiwgMHgwOCwgMHg3NiwgMHhlNywKLQkJCSAgICAweGRkLCAweDJiLCAweDAxLCAweDM5LCAweDA0LCAweDVhLCAweDU4LCAweDdhLAotCQkJICAgIDB4ZjcsIDB4MTEsIDB4OTAsIDB4ZWMsIDB4YmQsIDB4NTEsIDB4NWMsIDB4MzIsCi0JCQkgICAgMHg2YiwgMHhkNywgMHgzNSwgMHgzOSwgMHgwMiwgMHg2YiwgMHhmMiwgMHhhNiwKLQkJCSAgICAweGQwLCAweDBkLCAweDA3LCAweGUxLCAweDA2LCAweGM0LCAweDViLCAweDdkLAotCQkJICAgIDB4ZTQsIDB4NmEsIDB4ZDcsIDB4ZWUsIDB4MTUsIDB4MWYsIDB4ODMsIDB4YjQsCi0JCQkgICAgMHhhMywgMHhhNywgMHg1ZSwgMHhjMywgMHg5MCwgMHhiNywgMHhlZiwgMHhkMywKLQkJCSAgICAweGI3LCAweDRmLCAweGY4LCAweDkyLCAweDRjLCAweGI3LCAweDNjLCAweDI5LAotCQkJICAgIDB4Y2QsIDB4N2UsIDB4MmIsIDB4NWQsIDB4NDMsIDB4ZWEsIDB4NDIsIDB4ZTcsCi0JCQkgICAgMHg3NCwgMHgzZiwgMHg3ZCwgMHg1OCwgMHg4OCwgMHg3NSwgMHhkZSwgMHgzZSB9LAorCQkuaXYgICAgID0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEiLAorCQkuaW5wdXQJPSAiXHgxYVx4MWRceGE5XHgzMFx4YWRceGY5XHgyZlx4OWIiCisJCQkgICJceGI2XHgxZFx4YWVceGVmXHhmMFx4MmZceGY4XHg1YSIKKwkJCSAgIlx4MzlceDNjXHhiZlx4MmFceGIyXHg0NVx4YjJceDIzIgorCQkJICAiXHgxYlx4NjNceDNjXHhjZlx4YWFceGJlXHhjZlx4NGUiCisJCQkgICJceGZhXHhlOFx4MjlceGMyXHgyMFx4NjhceDJiXHgzYyIKKwkJCSAgIlx4MmVceDhiXHhmN1x4NmVceDI1XHhiZFx4ZTNceDNkIgorCQkJICAiXHg2Nlx4MjdceGQ2XHhhZlx4ZDZceDY0XHgzZVx4ZTMiCisJCQkgICJceGU4XHg1OFx4NDZceDk3XHgzOVx4NTFceDA3XHhkZSIKKwkJCSAgIlx4Y2JceDM3XHhiY1x4YTlceGMwXHg1Zlx4NzVceGMzIgorCQkJICAiXHgwZVx4ODRceDIzXHgxZFx4MTZceGQ0XHgxY1x4NTkiCisJCQkgICJceDljXHgxYVx4MDJceDU1XHhhYlx4M2FceDk3XHgxZCIKKwkJCSAgIlx4ZGZceGRkXHhjN1x4MDZceDUxXHhkN1x4NzBceGFlIgorCQkJICAiXHgyM1x4YzZceDhjXHhmNVx4MWVceGEwXHhlNVx4ODIiCisJCQkgICJceGI4XHhiMlx4YmZceDA0XHhhMFx4MzJceDhlXHg2OCIKKwkJCSAgIlx4ZWJceGFmXHg2ZVx4MmRceDk0XHgyMlx4MmZceGNlIgorCQkJICAiXHg0Y1x4YjVceDU5XHhlMlx4YTJceDJmXHhhMFx4OTgiCisJCQkgICJceDFhXHg5N1x4YzZceGQ0XHhiNVx4MDBceDU5XHhmMiIKKwkJCSAgIlx4ODRceDE0XHg3Mlx4YjFceDlhXHg2ZVx4YTNceDdmIgorCQkJICAiXHhlYVx4MjBceGU3XHhjYlx4NjVceDc3XHgzYVx4ZGYiCisJCQkgICJceGM4XHg5N1x4NjdceDE1XHhjMlx4MmFceDI3XHhjYyIKKwkJCSAgIlx4MThceDU1XHhhMVx4MjRceDBiXHgyNFx4MjRceGFmIgorCQkJICAiXHg1Ylx4ZWNceDY4XHhiOFx4YzhceGY1XHhiYVx4NjMiCisJCQkgICJceGZmXHhlZFx4ODlceGNlXHhkNVx4M2RceDg4XHhmMyIKKwkJCSAgIlx4MjVceGVmXHgwNVx4N2NceDNhXHhlZlx4ZWJceGQ4IgorCQkJICAiXHg3YVx4MzJceDBkXHhkMVx4MWVceDU4XHg1OVx4OTkiCisJCQkgICJceDkwXHgyNVx4YjVceDI2XHhiMFx4ZTNceDJiXHg2YyIKKwkJCSAgIlx4NGNceGE5XHg4Ylx4ODRceDRmXHg1ZVx4MDFceDUwIgorCQkJICAiXHg0MVx4MzBceDU4XHhjNVx4NjJceDc0XHg1Mlx4MWQiCisJCQkgICJceDQ1XHgyNFx4NmFceDQyXHg2NFx4NGZceDk3XHgxYyIKKwkJCSAgIlx4YThceDY2XHhiNVx4NmRceDc5XHhkNFx4MGRceDQ4IgorCQkJICAiXHhjNVx4NWZceGYzXHg5MFx4MzJceGRkXHhkZFx4ZTEiCisJCQkgICJceGU0XHhhOVx4OWZceGZjXHhjM1x4NTJceDVhXHg0NiIKKwkJCSAgIlx4ZTRceDgxXHg4NFx4OTVceDM2XHg1OVx4N2FceDZiIgorCQkJICAiXHhhYVx4YjNceDYwXHhhZFx4Y2VceDlmXHg5Zlx4MjgiCisJCQkgICJceGUwXHgwMVx4NzVceDIyXHhjNFx4NGVceGE5XHg2MiIKKwkJCSAgIlx4NWNceDYyXHgwZFx4MDBceGNiXHgxM1x4ZThceDQzIgorCQkJICAiXHg3Mlx4ZDRceDJkXHg1M1x4NDZceGI1XHhkMVx4MTYiCisJCQkgICJceDIyXHgxOFx4ZGZceDM0XHgzM1x4ZjVceGQ2XHgxYyIKKwkJCSAgIlx4YjhceDc5XHg3OFx4OTdceDk0XHhmZlx4NzJceDEzIgorCQkJICAiXHg0Y1x4MjdceGZjXHhjYlx4YmZceDAxXHg1M1x4YTYiCisJCQkgICJceGI0XHg1MFx4NmVceGRlXHhkZlx4YjVceDQzXHhhNCIKKwkJCSAgIlx4NTlceGRmXHg1Mlx4ZjlceDdjXHhlMFx4MTFceDZmIgorCQkJICAiXHgyZFx4MTRceDhlXHgyNFx4NjFceDJjXHhlMVx4MTciCisJCQkgICJceGNjXHhjZVx4NTFceDBjXHgxOVx4OGFceDgyXHgzMCIKKwkJCSAgIlx4OTRceGQ1XHgzZFx4NmFceDUzXHgwNlx4NWVceGJkIgorCQkJICAiXHhiN1x4ZWJceGZhXHhmZFx4MjdceDUxXHhkZVx4ODUiCisJCQkgICJceDFlXHg4Nlx4NTNceDExXHg1M1x4OTRceDAwXHhlZSIKKwkJCSAgIlx4MmJceDhjXHgwOFx4MmFceGJmXHhkZFx4YWVceDExIgorCQkJICAiXHhjYlx4MWVceGEyXHgwN1x4OWFceDgwXHhjZlx4NjIiCisJCQkgICJceDliXHgwOVx4ZGNceDk1XHgzY1x4OTZceDhlXHhiMSIKKwkJCSAgIlx4MDlceGJkXHhlNFx4ZWJceGRiXHhjYVx4NzBceDdhIgorCQkJICAiXHg5ZVx4ZmFceDMxXHgxOFx4NDVceDNjXHgyMVx4MzMiCisJCQkgICJceGIwXHhiM1x4MmJceGVhXHhmM1x4NzFceDJkXHhlMSIKKwkJCSAgIlx4MDNceGFkXHgxYlx4NDhceGQ0XHg2N1x4MjdceGYwIgorCQkJICAiXHg2Mlx4ZTRceDNkXHhmYlx4OWJceDA4XHg3Nlx4ZTciCisJCQkgICJceGRkXHgyYlx4MDFceDM5XHgwNFx4NWFceDU4XHg3YSIKKwkJCSAgIlx4ZjdceDExXHg5MFx4ZWNceGJkXHg1MVx4NWNceDMyIgorCQkJICAiXHg2Ylx4ZDdceDM1XHgzOVx4MDJceDZiXHhmMlx4YTYiCisJCQkgICJceGQwXHgwZFx4MDdceGUxXHgwNlx4YzRceDViXHg3ZCIKKwkJCSAgIlx4ZTRceDZhXHhkN1x4ZWVceDE1XHgxZlx4ODNceGI0IgorCQkJICAiXHhhM1x4YTdceDVlXHhjM1x4OTBceGI3XHhlZlx4ZDMiCisJCQkgICJceGI3XHg0Zlx4ZjhceDkyXHg0Y1x4YjdceDNjXHgyOSIKKwkJCSAgIlx4Y2RceDdlXHgyYlx4NWRceDQzXHhlYVx4NDJceGU3IgorCQkJICAiXHg3NFx4M2ZceDdkXHg1OFx4ODhceDc1XHhkZVx4M2UiLAogCQkuaWxlbiAgID0gNTEyLAotCQkucmVzdWx0CT0geyAweDA1LCAweDExLCAweGI3LCAweDE4LCAweGFiLCAweGM2LCAweDJkLCAweGFjLAotCQkJICAgIDB4NzAsIDB4NWQsIDB4ZjYsIDB4MjIsIDB4OTQsIDB4Y2QsIDB4ZTUsIDB4NmMsCi0JCQkgICAgMHgxNywgMHg2YiwgMHhmNiwgMHgxYywgMHhmMCwgMHhmMywgMHg2ZSwgMHhmOCwKLQkJCSAgICAweDUwLCAweDM4LCAweDFmLCAweDcxLCAweDQ5LCAweGI2LCAweDU3LCAweGQ2LAotCQkJICAgIDB4OGYsIDB4Y2IsIDB4OGQsIDB4NmIsIDB4ZTMsIDB4YTYsIDB4MjksIDB4OTAsCi0JCQkgICAgMHhmZSwgMHgyYSwgMHg2MiwgMHg4MiwgMHhhZSwgMHg2ZCwgMHg4YiwgMHhmNiwKLQkJCSAgICAweGFkLCAweDFlLCAweDllLCAweDIwLCAweDVmLCAweDM4LCAweGJlLCAweDA0LAotCQkJICAgIDB4ZGEsIDB4MTAsIDB4OGUsIDB4ZWQsIDB4YTIsIDB4YTQsIDB4ODcsIDB4YWIsCi0JCQkgICAgMHhkYSwgMHg2YiwgMHhiNCwgMHgwYywgMHg3NSwgMHhiYSwgMHhkMywgMHg3YywKLQkJCSAgICAweGM5LCAweGFjLCAweDQyLCAweDMxLCAweDk1LCAweDdjLCAweGM5LCAweDA0LAotCQkJICAgIDB4ZWIsIDB4ZDUsIDB4NmUsIDB4MzIsIDB4NjksIDB4OGEsIDB4ZGIsIDB4YTYsCi0JCQkgICAgMHgxNSwgMHhkNywgMHgzZiwgMHg0ZiwgMHgyZiwgMHg2NiwgMHg2OSwgMHgwMywKLQkJCSAgICAweDljLCAweDFmLCAweDU0LCAweDBmLCAweGRlLCAweDFmLCAweGYzLCAweDY1LAotCQkJICAgIDB4NGMsIDB4OTYsIDB4MTIsIDB4ZWQsIDB4N2MsIDB4OTIsIDB4MDMsIDB4MDEsCi0JCQkgICAgMHg2ZiwgMHhiYywgMHgzNSwgMHg5MywgMHhhYywgMHhmMSwgMHgyNywgMHhmMSwKLQkJCSAgICAweGI0LCAweDk2LCAweDgyLCAweDVhLCAweDVmLCAweGIwLCAweGEwLCAweDUwLAotCQkJICAgIDB4ODksIDB4YTQsIDB4OGUsIDB4NjYsIDB4NDQsIDB4ODUsIDB4Y2MsIDB4ZmQsCi0JCQkgICAgMHgzMywgMHgxNCwgMHg3MCwgMHhlMywgMHg5NiwgMHhiMiwgMHhjMywgMHhkMywKLQkJCSAgICAweGJiLCAweDU0LCAweDVhLCAweDFhLCAweGY5LCAweDc0LCAweGEyLCAweGM1LAotCQkJICAgIDB4MmQsIDB4NjQsIDB4NzUsIDB4ZGQsIDB4YjQsIDB4NTQsIDB4ZTYsIDB4NzQsCi0JCQkgICAgMHg4YywgMHhkMywgMHg5ZCwgMHg5ZSwgMHg4NiwgMHhhYiwgMHg1MSwgMHg1MywKLQkJCSAgICAweGI3LCAweDkzLCAweDNlLCAweDZmLCAweGQwLCAweDRlLCAweDJjLCAweDQwLAotCQkJICAgIDB4ZjYsIDB4YTgsIDB4MmUsIDB4M2UsIDB4OWQsIDB4ZjQsIDB4NjYsIDB4YTUsCi0JCQkgICAgMHg3NiwgMHgxMiwgMHg3MywgMHg0NCwgMHgxYSwgMHg1NiwgMHhkNywgMHg3MiwKLQkJCSAgICAweDg4LCAweGNkLCAweDIxLCAweDhjLCAweDRjLCAweDBmLCAweGZlLCAweGRhLAotCQkJICAgIDB4OTUsIDB4ZTAsIDB4M2EsIDB4YTYsIDB4YTUsIDB4ODQsIDB4NDYsIDB4Y2QsCi0JCQkgICAgMHhkNSwgMHgzZSwgMHg5ZCwgMHgzYSwgMHhlMiwgMHg2NywgMHhlNiwgMHg2MCwKLQkJCSAgICAweDFhLCAweGUyLCAweDcwLCAweDg1LCAweDU4LCAweGMyLCAweDFiLCAweDA5LAotCQkJICAgIDB4ZTEsIDB4ZDcsIDB4MmMsIDB4Y2EsIDB4YWQsIDB4YTgsIDB4OGYsIDB4ZjksCi0JCQkgICAgMHhhYywgMHhiMywgMHgwZSwgMHhkYiwgMHhjYSwgMHgyZSwgMHhlMiwgMHhiOCwKLQkJCSAgICAweDUxLCAweDcxLCAweGQ5LCAweDNjLCAweDZjLCAweGYxLCAweDU2LCAweGY4LAotCQkJICAgIDB4ZWEsIDB4OWMsIDB4ZjEsIDB4ZmIsIDB4MGMsIDB4ZTYsIDB4YjcsIDB4MTAsCi0JCQkgICAgMHgxYywgMHhmOCwgMHhhOSwgMHg3YywgMHhlOCwgMHg1MywgMHgzNSwgMHhjMSwKLQkJCSAgICAweDkwLCAweDNlLCAweDc2LCAweDRhLCAweDc0LCAweGE0LCAweDIxLCAweDJjLAotCQkJICAgIDB4ZjYsIDB4MmMsIDB4NGUsIDB4MGYsIDB4OTQsIDB4M2EsIDB4ODgsIDB4MmUsCi0JCQkgICAgMHg0MSwgMHgwOSwgMHg2YSwgMHgzMywgMHg3ZCwgMHhmNiwgMHhkZCwgMHgzZiwKLQkJCSAgICAweDhkLCAweDIzLCAweDMxLCAweDc0LCAweDg0LCAweGViLCAweDg4LCAweDZlLAotCQkJICAgIDB4Y2MsIDB4YjksIDB4YmMsIDB4MjIsIDB4ODMsIDB4MTksIDB4MDcsIDB4MjIsCi0JCQkgICAgMHhhNSwgMHgyZCwgMHhkZiwgMHhhNSwgMHhmMywgMHg4MCwgMHg4NSwgMHg3OCwKLQkJCSAgICAweDg0LCAweDM5LCAweDZhLCAweDZkLCAweDZhLCAweDk5LCAweDRmLCAweGE1LAotCQkJICAgIDB4MTUsIDB4ZmUsIDB4NDYsIDB4YjAsIDB4ZTQsIDB4NmMsIDB4YTUsIDB4NDEsCi0JCQkgICAgMHgzYywgMHhjZSwgMHg4ZiwgMHg0MiwgMHg2MCwgMHg3MSwgMHhhNywgMHg3NSwKLQkJCSAgICAweDA4LCAweDQwLCAweDY1LCAweDhhLCAweDgyLCAweGJmLCAweGY1LCAweDQzLAotCQkJICAgIDB4NzEsIDB4OTYsIDB4YTksIDB4NGQsIDB4NDQsIDB4OGEsIDB4MjAsIDB4YmUsCi0JCQkgICAgMHhmYSwgMHg0ZCwgMHhiYiwgMHhjMCwgMHg3ZCwgMHgzMSwgMHg5NiwgMHg2NSwKLQkJCSAgICAweGU3LCAweDc1LCAweGU1LCAweDNlLCAweGZkLCAweDkyLCAweDNiLCAweGM5LAotCQkJICAgIDB4NTUsIDB4YmIsIDB4MTYsIDB4N2UsIDB4ZjcsIDB4YzIsIDB4OGMsIDB4YTQsCi0JCQkgICAgMHg0MCwgMHgxZCwgMHhlNSwgMHhlZiwgMHgwZSwgMHhkZiwgMHhlNCwgMHg5YSwKLQkJCSAgICAweDYyLCAweDczLCAweDY1LCAweGZkLCAweDQ2LCAweDYzLCAweDI1LCAweDNkLAotCQkJICAgIDB4MmIsIDB4YWYsIDB4ZTUsIDB4NjQsIDB4ZmUsIDB4YTUsIDB4NWMsIDB4Y2YsCi0JCQkgICAgMHgyNCwgMHhmMywgMHhiNCwgMHhhYywgMHg2NCwgMHhiYSwgMHhkZiwgMHg0YiwKLQkJCSAgICAweGM2LCAweDk2LCAweDdkLCAweDgxLCAweDJkLCAweDhkLCAweDk3LCAweGY3LAotCQkJICAgIDB4YzUsIDB4NjgsIDB4NzcsIDB4ODQsIDB4MzIsIDB4MmIsIDB4Y2MsIDB4ODUsCi0JCQkgICAgMHg3NCwgMHg5NiwgMHhmMCwgMHgxMiwgMHg3NywgMHg2MSwgMHhiOSwgMHhlYiwKLQkJCSAgICAweDcxLCAweGFhLCAweDgyLCAweGNiLCAweDFjLCAweGRiLCAweDg5LCAweGM4LAotCQkJICAgIDB4YzYsIDB4YjUsIDB4ZTMsIDB4NWMsIDB4N2QsIDB4MzksIDB4MDcsIDB4MjQsCi0JCQkgICAgMHhkYSwgMHgzOSwgMHg4NywgMHg0NSwgMHhjMCwgMHgyYiwgMHhiYiwgMHgwMSwKLQkJCSAgICAweGFjLCAweGJjLCAweDJhLCAweDVjLCAweDdmLCAweGZjLCAweGU4LCAweGNlLAotCQkJICAgIDB4NmQsIDB4OWMsIDB4NmYsIDB4ZWQsIDB4ZDMsIDB4YzEsIDB4YTEsIDB4ZDYsCi0JCQkgICAgMHhjNSwgMHg1NSwgMHhhOSwgMHg2NiwgMHgyZiwgMHhlMSwgMHhjOCwgMHgzMiwKLQkJCSAgICAweGE2LCAweDVkLCAweGE0LCAweDNhLCAweDk4LCAweDczLCAweGU4LCAweDQ1LAotCQkJICAgIDB4YTQsIDB4YzcsIDB4YTgsIDB4YjQsIDB4ZjYsIDB4MTMsIDB4MDMsIDB4ZjYsCi0JCQkgICAgMHhlOSwgMHgyZSwgMHhjNCwgMHgyOSwgMHgwZiwgMHg4NCwgMHhkYiwgMHhjNCwKLQkJCSAgICAweDIxLCAweGM0LCAweGMyLCAweDc1LCAweDY3LCAweDg5LCAweDM3LCAweDBhIH0sCisJCS5yZXN1bHQJPSAiXHgwNVx4MTFceGI3XHgxOFx4YWJceGM2XHgyZFx4YWMiCisJCQkgICJceDcwXHg1ZFx4ZjZceDIyXHg5NFx4Y2RceGU1XHg2YyIKKwkJCSAgIlx4MTdceDZiXHhmNlx4MWNceGYwXHhmM1x4NmVceGY4IgorCQkJICAiXHg1MFx4MzhceDFmXHg3MVx4NDlceGI2XHg1N1x4ZDYiCisJCQkgICJceDhmXHhjYlx4OGRceDZiXHhlM1x4YTZceDI5XHg5MCIKKwkJCSAgIlx4ZmVceDJhXHg2Mlx4ODJceGFlXHg2ZFx4OGJceGY2IgorCQkJICAiXHhhZFx4MWVceDllXHgyMFx4NWZceDM4XHhiZVx4MDQiCisJCQkgICJceGRhXHgxMFx4OGVceGVkXHhhMlx4YTRceDg3XHhhYiIKKwkJCSAgIlx4ZGFceDZiXHhiNFx4MGNceDc1XHhiYVx4ZDNceDdjIgorCQkJICAiXHhjOVx4YWNceDQyXHgzMVx4OTVceDdjXHhjOVx4MDQiCisJCQkgICJceGViXHhkNVx4NmVceDMyXHg2OVx4OGFceGRiXHhhNiIKKwkJCSAgIlx4MTVceGQ3XHgzZlx4NGZceDJmXHg2Nlx4NjlceDAzIgorCQkJICAiXHg5Y1x4MWZceDU0XHgwZlx4ZGVceDFmXHhmM1x4NjUiCisJCQkgICJceDRjXHg5Nlx4MTJceGVkXHg3Y1x4OTJceDAzXHgwMSIKKwkJCSAgIlx4NmZceGJjXHgzNVx4OTNceGFjXHhmMVx4MjdceGYxIgorCQkJICAiXHhiNFx4OTZceDgyXHg1YVx4NWZceGIwXHhhMFx4NTAiCisJCQkgICJceDg5XHhhNFx4OGVceDY2XHg0NFx4ODVceGNjXHhmZCIKKwkJCSAgIlx4MzNceDE0XHg3MFx4ZTNceDk2XHhiMlx4YzNceGQzIgorCQkJICAiXHhiYlx4NTRceDVhXHgxYVx4ZjlceDc0XHhhMlx4YzUiCisJCQkgICJceDJkXHg2NFx4NzVceGRkXHhiNFx4NTRceGU2XHg3NCIKKwkJCSAgIlx4OGNceGQzXHg5ZFx4OWVceDg2XHhhYlx4NTFceDUzIgorCQkJICAiXHhiN1x4OTNceDNlXHg2Zlx4ZDBceDRlXHgyY1x4NDAiCisJCQkgICJceGY2XHhhOFx4MmVceDNlXHg5ZFx4ZjRceDY2XHhhNSIKKwkJCSAgIlx4NzZceDEyXHg3M1x4NDRceDFhXHg1Nlx4ZDdceDcyIgorCQkJICAiXHg4OFx4Y2RceDIxXHg4Y1x4NGNceDBmXHhmZVx4ZGEiCisJCQkgICJceDk1XHhlMFx4M2FceGE2XHhhNVx4ODRceDQ2XHhjZCIKKwkJCSAgIlx4ZDVceDNlXHg5ZFx4M2FceGUyXHg2N1x4ZTZceDYwIgorCQkJICAiXHgxYVx4ZTJceDcwXHg4NVx4NThceGMyXHgxYlx4MDkiCisJCQkgICJceGUxXHhkN1x4MmNceGNhXHhhZFx4YThceDhmXHhmOSIKKwkJCSAgIlx4YWNceGIzXHgwZVx4ZGJceGNhXHgyZVx4ZTJceGI4IgorCQkJICAiXHg1MVx4NzFceGQ5XHgzY1x4NmNceGYxXHg1Nlx4ZjgiCisJCQkgICJceGVhXHg5Y1x4ZjFceGZiXHgwY1x4ZTZceGI3XHgxMCIKKwkJCSAgIlx4MWNceGY4XHhhOVx4N2NceGU4XHg1M1x4MzVceGMxIgorCQkJICAiXHg5MFx4M2VceDc2XHg0YVx4NzRceGE0XHgyMVx4MmMiCisJCQkgICJceGY2XHgyY1x4NGVceDBmXHg5NFx4M2FceDg4XHgyZSIKKwkJCSAgIlx4NDFceDA5XHg2YVx4MzNceDdkXHhmNlx4ZGRceDNmIgorCQkJICAiXHg4ZFx4MjNceDMxXHg3NFx4ODRceGViXHg4OFx4NmUiCisJCQkgICJceGNjXHhiOVx4YmNceDIyXHg4M1x4MTlceDA3XHgyMiIKKwkJCSAgIlx4YTVceDJkXHhkZlx4YTVceGYzXHg4MFx4ODVceDc4IgorCQkJICAiXHg4NFx4MzlceDZhXHg2ZFx4NmFceDk5XHg0Zlx4YTUiCisJCQkgICJceDE1XHhmZVx4NDZceGIwXHhlNFx4NmNceGE1XHg0MSIKKwkJCSAgIlx4M2NceGNlXHg4Zlx4NDJceDYwXHg3MVx4YTdceDc1IgorCQkJICAiXHgwOFx4NDBceDY1XHg4YVx4ODJceGJmXHhmNVx4NDMiCisJCQkgICJceDcxXHg5Nlx4YTlceDRkXHg0NFx4OGFceDIwXHhiZSIKKwkJCSAgIlx4ZmFceDRkXHhiYlx4YzBceDdkXHgzMVx4OTZceDY1IgorCQkJICAiXHhlN1x4NzVceGU1XHgzZVx4ZmRceDkyXHgzYlx4YzkiCisJCQkgICJceDU1XHhiYlx4MTZceDdlXHhmN1x4YzJceDhjXHhhNCIKKwkJCSAgIlx4NDBceDFkXHhlNVx4ZWZceDBlXHhkZlx4ZTRceDlhIgorCQkJICAiXHg2Mlx4NzNceDY1XHhmZFx4NDZceDYzXHgyNVx4M2QiCisJCQkgICJceDJiXHhhZlx4ZTVceDY0XHhmZVx4YTVceDVjXHhjZiIKKwkJCSAgIlx4MjRceGYzXHhiNFx4YWNceDY0XHhiYVx4ZGZceDRiIgorCQkJICAiXHhjNlx4OTZceDdkXHg4MVx4MmRceDhkXHg5N1x4ZjciCisJCQkgICJceGM1XHg2OFx4NzdceDg0XHgzMlx4MmJceGNjXHg4NSIKKwkJCSAgIlx4NzRceDk2XHhmMFx4MTJceDc3XHg2MVx4YjlceGViIgorCQkJICAiXHg3MVx4YWFceDgyXHhjYlx4MWNceGRiXHg4OVx4YzgiCisJCQkgICJceGM2XHhiNVx4ZTNceDVjXHg3ZFx4MzlceDA3XHgyNCIKKwkJCSAgIlx4ZGFceDM5XHg4N1x4NDVceGMwXHgyYlx4YmJceDAxIgorCQkJICAiXHhhY1x4YmNceDJhXHg1Y1x4N2ZceGZjXHhlOFx4Y2UiCisJCQkgICJceDZkXHg5Y1x4NmZceGVkXHhkM1x4YzFceGExXHhkNiIKKwkJCSAgIlx4YzVceDU1XHhhOVx4NjZceDJmXHhlMVx4YzhceDMyIgorCQkJICAiXHhhNlx4NWRceGE0XHgzYVx4OThceDczXHhlOFx4NDUiCisJCQkgICJceGE0XHhjN1x4YThceGI0XHhmNlx4MTNceDAzXHhmNiIKKwkJCSAgIlx4ZTlceDJlXHhjNFx4MjlceDBmXHg4NFx4ZGJceGM0IgorCQkJICAiXHgyMVx4YzRceGMyXHg3NVx4NjdceDg5XHgzN1x4MGEiLAogCQkucmxlbiAgID0gNTEyLAogCX0KIH07CkBAIC0zMDYwLDE5NiArMzA4NCwxOTYgQEAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYWVzX3h0c19lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAkvKiBodHRwOi8vZ3JvdXBlci5pZWVlLm9yZy9ncm91cHMvMTYxOS9lbWFpbC9wZGYwMDA4Ni5wZGYgKi8KIAl7IC8qIFhUUy1BRVMgMSAqLwotCQkua2V5ICAgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5rZXkgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkuaWxlbiAgID0gMzIsCi0JCS5yZXN1bHQgPSB7IDB4OTEsIDB4N2MsIDB4ZjYsIDB4OWUsIDB4YmQsIDB4NjgsIDB4YjIsIDB4ZWMsCi0JCQkgICAgMHg5YiwgMHg5ZiwgMHhlOSwgMHhhMywgMHhlYSwgMHhkZCwgMHhhNiwgMHg5MiwKLQkJCSAgICAweGNkLCAweDQzLCAweGQyLCAweGY1LCAweDk1LCAweDk4LCAweGVkLCAweDg1LAotCQkJICAgIDB4OGMsIDB4MDIsIDB4YzIsIDB4NjUsIDB4MmYsIDB4YmYsIDB4OTIsIDB4MmUgfSwKKwkJLnJlc3VsdCA9ICJceDkxXHg3Y1x4ZjZceDllXHhiZFx4NjhceGIyXHhlYyIKKwkJCSAgIlx4OWJceDlmXHhlOVx4YTNceGVhXHhkZFx4YTZceDkyIgorCQkJICAiXHhjZFx4NDNceGQyXHhmNVx4OTVceDk4XHhlZFx4ODUiCisJCQkgICJceDhjXHgwMlx4YzJceDY1XHgyZlx4YmZceDkyXHgyZSIsCiAJCS5ybGVuICAgPSAzMiwKIAl9LCB7IC8qIFhUUy1BRVMgMiAqLwotCQkua2V5ICAgID0geyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLAotCQkJICAgIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsCi0JCQkgICAgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwKLQkJCSAgICAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyIH0sCisJCS5rZXkgICAgPSAiXHgxMVx4MTFceDExXHgxMVx4MTFceDExXHgxMVx4MTEiCisJCQkgICJceDExXHgxMVx4MTFceDExXHgxMVx4MTFceDExXHgxMSIKKwkJCSAgIlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyIgorCQkJICAiXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjIiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LAotCQkJICAgIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsCi0JCQkgICAgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwKLQkJCSAgICAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0IH0sCisJCS5pdiAgICAgPSAiXHgzM1x4MzNceDMzXHgzM1x4MzNceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCAgPSAiXHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDQiCisJCQkgICJceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NCIKKwkJCSAgIlx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0IgorCQkJICAiXHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDQiLAogCQkuaWxlbiAgID0gMzIsCi0JCS5yZXN1bHQgPSB7IDB4YzQsIDB4NTQsIDB4MTgsIDB4NWUsIDB4NmEsIDB4MTYsIDB4OTMsIDB4NmUsCi0JCQkgICAgMHgzOSwgMHgzMywgMHg0MCwgMHgzOCwgMHhhYywgMHhlZiwgMHg4MywgMHg4YiwKLQkJCSAgICAweGZiLCAweDE4LCAweDZmLCAweGZmLCAweDc0LCAweDgwLCAweGFkLCAweGM0LAotCQkJICAgIDB4MjgsIDB4OTMsIDB4ODIsIDB4ZWMsIDB4ZDYsIDB4ZDMsIDB4OTQsIDB4ZjAgfSwKKwkJLnJlc3VsdCA9ICJceGM0XHg1NFx4MThceDVlXHg2YVx4MTZceDkzXHg2ZSIKKwkJCSAgIlx4MzlceDMzXHg0MFx4MzhceGFjXHhlZlx4ODNceDhiIgorCQkJICAiXHhmYlx4MThceDZmXHhmZlx4NzRceDgwXHhhZFx4YzQiCisJCQkgICJceDI4XHg5M1x4ODJceGVjXHhkNlx4ZDNceDk0XHhmMCIsCiAJCS5ybGVuICAgPSAzMiwKIAl9LCB7IC8qIFhUUy1BRVMgMyAqLwotCQkua2V5ICAgID0geyAweGZmLCAweGZlLCAweGZkLCAweGZjLCAweGZiLCAweGZhLCAweGY5LCAweGY4LAotCQkJICAgIDB4ZjcsIDB4ZjYsIDB4ZjUsIDB4ZjQsIDB4ZjMsIDB4ZjIsIDB4ZjEsIDB4ZjAsCi0JCQkgICAgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwKLQkJCSAgICAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyIH0sCisJCS5rZXkgICAgPSAiXHhmZlx4ZmVceGZkXHhmY1x4ZmJceGZhXHhmOVx4ZjgiCisJCQkgICJceGY3XHhmNlx4ZjVceGY0XHhmM1x4ZjJceGYxXHhmMCIKKwkJCSAgIlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyIgorCQkJICAiXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjIiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LAotCQkJICAgIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsCi0JCQkgICAgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwKLQkJCSAgICAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0IH0sCisJCS5pdiAgICAgPSAiXHgzM1x4MzNceDMzXHgzM1x4MzNceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCAgPSAiXHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDQiCisJCQkgICJceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NCIKKwkJCSAgIlx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0IgorCQkJICAiXHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDQiLAogCQkuaWxlbiAgID0gMzIsCi0JCS5yZXN1bHQgPSB7IDB4YWYsIDB4ODUsIDB4MzMsIDB4NmIsIDB4NTksIDB4N2EsIDB4ZmMsIDB4MWEsCi0JCQkgICAgMHg5MCwgMHgwYiwgMHgyZSwgMHhiMiwgMHgxZSwgMHhjOSwgMHg0OSwgMHhkMiwKLQkJCSAgICAweDkyLCAweGRmLCAweDRjLCAweDA0LCAweDdlLCAweDBiLCAweDIxLCAweDUzLAotCQkJICAgIDB4MjEsIDB4ODYsIDB4YTUsIDB4OTcsIDB4MWEsIDB4MjIsIDB4N2EsIDB4ODkgfSwKKwkJLnJlc3VsdCA9ICJceGFmXHg4NVx4MzNceDZiXHg1OVx4N2FceGZjXHgxYSIKKwkJCSAgIlx4OTBceDBiXHgyZVx4YjJceDFlXHhjOVx4NDlceGQyIgorCQkJICAiXHg5Mlx4ZGZceDRjXHgwNFx4N2VceDBiXHgyMVx4NTMiCisJCQkgICJceDIxXHg4Nlx4YTVceDk3XHgxYVx4MjJceDdhXHg4OSIsCiAJCS5ybGVuICAgPSAzMiwKIAl9LCB7IC8qIFhUUy1BRVMgNCAqLwotCQkua2V5ICAgID0geyAweDI3LCAweDE4LCAweDI4LCAweDE4LCAweDI4LCAweDQ1LCAweDkwLCAweDQ1LAotCQkJICAgIDB4MjMsIDB4NTMsIDB4NjAsIDB4MjgsIDB4NzQsIDB4NzEsIDB4MzUsIDB4MjYsCi0JCQkgICAgMHgzMSwgMHg0MSwgMHg1OSwgMHgyNiwgMHg1MywgMHg1OCwgMHg5NywgMHg5MywKLQkJCSAgICAweDIzLCAweDg0LCAweDYyLCAweDY0LCAweDMzLCAweDgzLCAweDI3LCAweDk1IH0sCisJCS5rZXkgICAgPSAiXHgyN1x4MThceDI4XHgxOFx4MjhceDQ1XHg5MFx4NDUiCisJCQkgICJceDIzXHg1M1x4NjBceDI4XHg3NFx4NzFceDM1XHgyNiIKKwkJCSAgIlx4MzFceDQxXHg1OVx4MjZceDUzXHg1OFx4OTdceDkzIgorCQkJICAiXHgyM1x4ODRceDYyXHg2NFx4MzNceDgzXHgyN1x4OTUiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAotCQkJICAgIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCi0JCQkgICAgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKLQkJCSAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCi0JCQkgICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKLQkJCSAgICAweDQ4LCAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmLAotCQkJICAgIDB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsCi0JCQkgICAgMHg1OCwgMHg1OSwgMHg1YSwgMHg1YiwgMHg1YywgMHg1ZCwgMHg1ZSwgMHg1ZiwKLQkJCSAgICAweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotCQkJICAgIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCi0JCQkgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywKLQkJCSAgICAweDc4LCAweDc5LCAweDdhLCAweDdiLCAweDdjLCAweDdkLCAweDdlLCAweDdmLAotCQkJICAgIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0JCQkgICAgMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKLQkJCSAgICAweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAotCQkJICAgIDB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCi0JCQkgICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKLQkJCSAgICAweGE4LCAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLAotCQkJICAgIDB4YjAsIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCi0JCQkgICAgMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKLQkJCSAgICAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAotCQkJICAgIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCi0JCQkgICAgMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywKLQkJCSAgICAweGQ4LCAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLAotCQkJICAgIDB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCi0JCQkgICAgMHhlOCwgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwKLQkJCSAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAotCQkJICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYsCi0JCQkgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLQkJCSAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAotCQkJICAgIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCi0JCQkgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkJCSAgICAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAotCQkJICAgIDB4NDAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCi0JCQkgICAgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKLQkJCSAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LAotCQkJICAgIDB4NTgsIDB4NTksIDB4NWEsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsCi0JCQkgICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQkJCSAgICAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAotCQkJICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCi0JCQkgICAgMHg3OCwgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKLQkJCSAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAotCQkJICAgIDB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCi0JCQkgICAgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKLQkJCSAgICAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAotCQkJICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCi0JCQkgICAgMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKLQkJCSAgICAweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAotCQkJICAgIDB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCi0JCQkgICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLQkJCSAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAotCQkJICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCi0JCQkgICAgMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKLQkJCSAgICAweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LAotCQkJICAgIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCi0JCQkgICAgMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKLQkJCSAgICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmIH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCAgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiCisJCQkgICJceDIwXHgyMVx4MjJceDIzXHgyNFx4MjVceDI2XHgyNyIKKwkJCSAgIlx4MjhceDI5XHgyYVx4MmJceDJjXHgyZFx4MmVceDJmIgorCQkJICAiXHgzMFx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzciCisJCQkgICJceDM4XHgzOVx4M2FceDNiXHgzY1x4M2RceDNlXHgzZiIKKwkJCSAgIlx4NDBceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3IgorCQkJICAiXHg0OFx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGYiCisJCQkgICJceDUwXHg1MVx4NTJceDUzXHg1NFx4NTVceDU2XHg1NyIKKwkJCSAgIlx4NThceDU5XHg1YVx4NWJceDVjXHg1ZFx4NWVceDVmIgorCQkJICAiXHg2MFx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjciCisJCQkgICJceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2ZiIKKwkJCSAgIlx4NzBceDcxXHg3Mlx4NzNceDc0XHg3NVx4NzZceDc3IgorCQkJICAiXHg3OFx4NzlceDdhXHg3Ylx4N2NceDdkXHg3ZVx4N2YiCisJCQkgICJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4NyIKKwkJCSAgIlx4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmIgorCQkJICAiXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTciCisJCQkgICJceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5ZiIKKwkJCSAgIlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3IgorCQkJICAiXHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWYiCisJCQkgICJceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiNyIKKwkJCSAgIlx4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmIgorCQkJICAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzciCisJCQkgICJceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIKKwkJCSAgIlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3IgorCQkJICAiXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGYiCisJCQkgICJceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlNyIKKwkJCSAgIlx4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmIgorCQkJICAiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjciCisJCQkgICJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIKKwkJCSAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxNyIKKwkJCSAgIlx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgorCQkJICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjciCisJCQkgICJceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKKwkJCSAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJICAiXHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCisJCQkgICJceDQwXHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2XHg0NyIKKwkJCSAgIlx4NDhceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmIgorCQkJICAiXHg1MFx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTciCisJCQkgICJceDU4XHg1OVx4NWFceDViXHg1Y1x4NWRceDVlXHg1ZiIKKwkJCSAgIlx4NjBceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3IgorCQkJICAiXHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmYiCisJCQkgICJceDcwXHg3MVx4NzJceDczXHg3NFx4NzVceDc2XHg3NyIKKwkJCSAgIlx4NzhceDc5XHg3YVx4N2JceDdjXHg3ZFx4N2VceDdmIgorCQkJICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODciCisJCQkgICJceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKKwkJCSAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3IgorCQkJICAiXHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCisJCQkgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhNyIKKwkJCSAgIlx4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgorCQkJICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjciCisJCQkgICJceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKKwkJCSAgIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3IgorCQkJICAiXHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiCisJCQkgICJceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkNyIKKwkJCSAgIlx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmIgorCQkJICAiXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTciCisJCQkgICJceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZiIKKwkJCSAgIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3IgorCQkJICAiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLAogCQkuaWxlbiAgID0gNTEyLAotCQkucmVzdWx0ID0geyAweDI3LCAweGE3LCAweDQ3LCAweDliLCAweGVmLCAweGExLCAweGQ0LCAweDc2LAotCQkJICAgIDB4NDgsIDB4OWYsIDB4MzAsIDB4OGMsIDB4ZDQsIDB4Y2YsIDB4YTYsIDB4ZTIsCi0JCQkgICAgMHhhOSwgMHg2ZSwgMHg0YiwgMHhiZSwgMHgzMiwgMHgwOCwgMHhmZiwgMHgyNSwKLQkJCSAgICAweDI4LCAweDdkLCAweGQzLCAweDgxLCAweDk2LCAweDE2LCAweGU4LCAweDljLAotCQkJICAgIDB4YzcsIDB4OGMsIDB4ZjcsIDB4ZjUsIDB4ZTUsIDB4NDMsIDB4NDQsIDB4NWYsCi0JCQkgICAgMHg4MywgMHgzMywgMHhkOCwgMHhmYSwgMHg3ZiwgMHg1NiwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDA1LCAweDI3LCAweDlmLCAweGE1LCAweGQ4LCAweGI1LCAweGU0LCAweGFkLAotCQkJICAgIDB4NDAsIDB4ZTcsIDB4MzYsIDB4ZGQsIDB4YjQsIDB4ZDMsIDB4NTQsIDB4MTIsCi0JCQkgICAgMHgzMiwgMHg4MCwgMHg2MywgMHhmZCwgMHgyYSwgMHhhYiwgMHg1MywgMHhlNSwKLQkJCSAgICAweGVhLCAweDFlLCAweDBhLCAweDlmLCAweDMzLCAweDI1LCAweDAwLCAweGE1LAotCQkJICAgIDB4ZGYsIDB4OTQsIDB4ODcsIDB4ZDAsIDB4N2EsIDB4NWMsIDB4OTIsIDB4Y2MsCi0JCQkgICAgMHg1MSwgMHgyYywgMHg4OCwgMHg2NiwgMHhjNywgMHhlOCwgMHg2MCwgMHhjZSwKLQkJCSAgICAweDkzLCAweGZkLCAweGYxLCAweDY2LCAweGEyLCAweDQ5LCAweDEyLCAweGI0LAotCQkJICAgIDB4MjIsIDB4OTcsIDB4NjEsIDB4NDYsIDB4YWUsIDB4MjAsIDB4Y2UsIDB4ODQsCi0JCQkgICAgMHg2YiwgMHhiNywgMHhkYywgMHg5YiwgMHhhOSwgMHg0YSwgMHg3NiwgMHg3YSwKLQkJCSAgICAweGFlLCAweGYyLCAweDBjLCAweDBkLCAweDYxLCAweGFkLCAweDAyLCAweDY1LAotCQkJICAgIDB4NWUsIDB4YTksIDB4MmQsIDB4YzQsIDB4YzQsIDB4ZTQsIDB4MWEsIDB4ODksCi0JCQkgICAgMHg1MiwgMHhjNiwgMHg1MSwgMHhkMywgMHgzMSwgMHg3NCwgMHhiZSwgMHg1MSwKLQkJCSAgICAweGExLCAweDBjLCAweDQyLCAweDExLCAweDEwLCAweGU2LCAweGQ4LCAweDE1LAotCQkJICAgIDB4ODgsIDB4ZWQsIDB4ZTgsIDB4MjEsIDB4MDMsIDB4YTIsIDB4NTIsIDB4ZDgsCi0JCQkgICAgMHhhNywgMHg1MCwgMHhlOCwgMHg3NiwgMHg4ZCwgMHhlZiwgMHhmZiwgMHhlZCwKLQkJCSAgICAweDkxLCAweDIyLCAweDgxLCAweDBhLCAweGFlLCAweGI5LCAweDlmLCAweDkxLAotCQkJICAgIDB4NzIsIDB4YWYsIDB4ODIsIDB4YjYsIDB4MDQsIDB4ZGMsIDB4NGIsIDB4OGUsCi0JCQkgICAgMHg1MSwgMHhiYywgMHhiMCwgMHg4MiwgMHgzNSwgMHhhNiwgMHhmNCwgMHgzNCwKLQkJCSAgICAweDEzLCAweDMyLCAweGU0LCAweGNhLCAweDYwLCAweDQ4LCAweDJhLCAweDRiLAotCQkJICAgIDB4YTEsIDB4YTAsIDB4M2IsIDB4M2UsIDB4NjUsIDB4MDAsIDB4OGYsIDB4YzUsCi0JCQkgICAgMHhkYSwgMHg3NiwgMHhiNywgMHgwYiwgMHhmMSwgMHg2OSwgMHgwZCwgMHhiNCwKLQkJCSAgICAweGVhLCAweGUyLCAweDljLCAweDVmLCAweDFiLCAweGFkLCAweGQwLCAweDNjLAotCQkJICAgIDB4NWMsIDB4Y2YsIDB4MmEsIDB4NTUsIDB4ZDcsIDB4MDUsIDB4ZGQsIDB4Y2QsCi0JCQkgICAgMHg4NiwgMHhkNCwgMHg0OSwgMHg1MSwgMHgxYywgMHhlYiwgMHg3ZSwgMHhjMywKLQkJCSAgICAweDBiLCAweGYxLCAweDJiLCAweDFmLCAweGEzLCAweDViLCAweDkxLCAweDNmLAotCQkJICAgIDB4OWYsIDB4NzQsIDB4N2EsIDB4OGEsIDB4ZmQsIDB4MWIsIDB4MTMsIDB4MGUsCi0JCQkgICAgMHg5NCwgMHhiZiwgMHhmOSwgMHg0ZSwgMHhmZiwgMHhkMCwgMHgxYSwgMHg5MSwKLQkJCSAgICAweDczLCAweDVjLCAweGExLCAweDcyLCAweDZhLCAweGNkLCAweDBiLCAweDE5LAotCQkJICAgIDB4N2MsIDB4NGUsIDB4NWIsIDB4MDMsIDB4MzksIDB4MzYsIDB4OTcsIDB4ZTEsCi0JCQkgICAgMHgyNiwgMHg4MiwgMHg2ZiwgMHhiNiwgMHhiYiwgMHhkZSwgMHg4ZSwgMHhjYywKLQkJCSAgICAweDFlLCAweDA4LCAweDI5LCAweDg1LCAweDE2LCAweGUyLCAweGM5LCAweGVkLAotCQkJICAgIDB4MDMsIDB4ZmYsIDB4M2MsIDB4MWIsIDB4NzgsIDB4NjAsIDB4ZjYsIDB4ZGUsCi0JCQkgICAgMHg3NiwgMHhkNCwgMHhjZSwgMHhjZCwgMHg5NCwgMHhjOCwgMHgxMSwgMHg5OCwKLQkJCSAgICAweDU1LCAweGVmLCAweDUyLCAweDk3LCAweGNhLCAweDY3LCAweGU5LCAweGYzLAotCQkJICAgIDB4ZTcsIDB4ZmYsIDB4NzIsIDB4YjEsIDB4ZTksIDB4OTcsIDB4ODUsIDB4Y2EsCi0JCQkgICAgMHgwYSwgMHg3ZSwgMHg3NywgMHgyMCwgMHhjNSwgMHhiMywgMHg2ZCwgMHhjNiwKLQkJCSAgICAweGQ3LCAweDJjLCAweGFjLCAweDk1LCAweDc0LCAweGM4LCAweGNiLCAweGJjLAotCQkJICAgIDB4MmYsIDB4ODAsIDB4MWUsIDB4MjMsIDB4ZTUsIDB4NmYsIDB4ZDMsIDB4NDQsCi0JCQkgICAgMHhiMCwgMHg3ZiwgMHgyMiwgMHgxNSwgMHg0YiwgMHhlYiwgMHhhMCwgMHhmMCwKLQkJCSAgICAweDhjLCAweGU4LCAweDg5LCAweDFlLCAweDY0LCAweDNlLCAweGQ5LCAweDk1LAotCQkJICAgIDB4YzksIDB4NGQsIDB4OWEsIDB4NjksIDB4YzksIDB4ZjEsIDB4YjUsIDB4ZjQsCi0JCQkgICAgMHg5OSwgMHgwMiwgMHg3YSwgMHg3OCwgMHg1NywgMHgyYSwgMHhlZSwgMHhiZCwKLQkJCSAgICAweDc0LCAweGQyLCAweDBjLCAweGMzLCAweDk4LCAweDgxLCAweGMyLCAweDEzLAotCQkJICAgIDB4ZWUsIDB4NzcsIDB4MGIsIDB4MTAsIDB4MTAsIDB4ZTQsIDB4YmUsIDB4YTcsCi0JCQkgICAgMHgxOCwgMHg4NCwgMHg2OSwgMHg3NywgMHhhZSwgMHgxMSwgMHg5ZiwgMHg3YSwKLQkJCSAgICAweDAyLCAweDNhLCAweGI1LCAweDhjLCAweGNhLCAweDBhLCAweGQ3LCAweDUyLAotCQkJICAgIDB4YWYsIDB4ZTYsIDB4NTYsIDB4YmIsIDB4M2MsIDB4MTcsIDB4MjUsIDB4NmEsCi0JCQkgICAgMHg5ZiwgMHg2ZSwgMHg5YiwgMHhmMSwgMHg5ZiwgMHhkZCwgMHg1YSwgMHgzOCwKLQkJCSAgICAweGZjLCAweDgyLCAweGJiLCAweGU4LCAweDcyLCAweGM1LCAweDUzLCAweDllLAotCQkJICAgIDB4ZGIsIDB4NjAsIDB4OWUsIDB4ZjQsIDB4ZjcsIDB4OWMsIDB4MjAsIDB4M2UsCi0JCQkgICAgMHhiYiwgMHgxNCwgMHgwZiwgMHgyZSwgMHg1OCwgMHgzYywgMHhiMiwgMHhhZCwKLQkJCSAgICAweDE1LCAweGI0LCAweGFhLCAweDViLCAweDY1LCAweDUwLCAweDE2LCAweGE4LAotCQkJICAgIDB4NDQsIDB4OTIsIDB4NzcsIDB4ZGIsIDB4ZDQsIDB4NzcsIDB4ZWYsIDB4MmMsCi0JCQkgICAgMHg4ZCwgMHg2YywgMHgwMSwgMHg3ZCwgMHhiNywgMHgzOCwgMHhiMSwgMHg4ZCwKLQkJCSAgICAweGViLCAweDRhLCAweDQyLCAweDdkLCAweDE5LCAweDIzLCAweGNlLCAweDNmLAotCQkJICAgIDB4ZjIsIDB4NjIsIDB4NzMsIDB4NTcsIDB4NzksIDB4YTQsIDB4MTgsIDB4ZjIsCi0JCQkgICAgMHgwYSwgMHgyOCwgMHgyZCwgMHhmOSwgMHgyMCwgMHgxNCwgMHg3YiwgMHhlYSwKLQkJCSAgICAweGJlLCAweDQyLCAweDFlLCAweGU1LCAweDMxLCAweDlkLCAweDA1LCAweDY4IH0sCisJCS5yZXN1bHQgPSAiXHgyN1x4YTdceDQ3XHg5Ylx4ZWZceGExXHhkNFx4NzYiCisJCQkgICJceDQ4XHg5Zlx4MzBceDhjXHhkNFx4Y2ZceGE2XHhlMiIKKwkJCSAgIlx4YTlceDZlXHg0Ylx4YmVceDMyXHgwOFx4ZmZceDI1IgorCQkJICAiXHgyOFx4N2RceGQzXHg4MVx4OTZceDE2XHhlOFx4OWMiCisJCQkgICJceGM3XHg4Y1x4ZjdceGY1XHhlNVx4NDNceDQ0XHg1ZiIKKwkJCSAgIlx4ODNceDMzXHhkOFx4ZmFceDdmXHg1Nlx4MDBceDAwIgorCQkJICAiXHgwNVx4MjdceDlmXHhhNVx4ZDhceGI1XHhlNFx4YWQiCisJCQkgICJceDQwXHhlN1x4MzZceGRkXHhiNFx4ZDNceDU0XHgxMiIKKwkJCSAgIlx4MzJceDgwXHg2M1x4ZmRceDJhXHhhYlx4NTNceGU1IgorCQkJICAiXHhlYVx4MWVceDBhXHg5Zlx4MzNceDI1XHgwMFx4YTUiCisJCQkgICJceGRmXHg5NFx4ODdceGQwXHg3YVx4NWNceDkyXHhjYyIKKwkJCSAgIlx4NTFceDJjXHg4OFx4NjZceGM3XHhlOFx4NjBceGNlIgorCQkJICAiXHg5M1x4ZmRceGYxXHg2Nlx4YTJceDQ5XHgxMlx4YjQiCisJCQkgICJceDIyXHg5N1x4NjFceDQ2XHhhZVx4MjBceGNlXHg4NCIKKwkJCSAgIlx4NmJceGI3XHhkY1x4OWJceGE5XHg0YVx4NzZceDdhIgorCQkJICAiXHhhZVx4ZjJceDBjXHgwZFx4NjFceGFkXHgwMlx4NjUiCisJCQkgICJceDVlXHhhOVx4MmRceGM0XHhjNFx4ZTRceDFhXHg4OSIKKwkJCSAgIlx4NTJceGM2XHg1MVx4ZDNceDMxXHg3NFx4YmVceDUxIgorCQkJICAiXHhhMVx4MGNceDQyXHgxMVx4MTBceGU2XHhkOFx4MTUiCisJCQkgICJceDg4XHhlZFx4ZThceDIxXHgwM1x4YTJceDUyXHhkOCIKKwkJCSAgIlx4YTdceDUwXHhlOFx4NzZceDhkXHhlZlx4ZmZceGVkIgorCQkJICAiXHg5MVx4MjJceDgxXHgwYVx4YWVceGI5XHg5Zlx4OTEiCisJCQkgICJceDcyXHhhZlx4ODJceGI2XHgwNFx4ZGNceDRiXHg4ZSIKKwkJCSAgIlx4NTFceGJjXHhiMFx4ODJceDM1XHhhNlx4ZjRceDM0IgorCQkJICAiXHgxM1x4MzJceGU0XHhjYVx4NjBceDQ4XHgyYVx4NGIiCisJCQkgICJceGExXHhhMFx4M2JceDNlXHg2NVx4MDBceDhmXHhjNSIKKwkJCSAgIlx4ZGFceDc2XHhiN1x4MGJceGYxXHg2OVx4MGRceGI0IgorCQkJICAiXHhlYVx4ZTJceDljXHg1Zlx4MWJceGFkXHhkMFx4M2MiCisJCQkgICJceDVjXHhjZlx4MmFceDU1XHhkN1x4MDVceGRkXHhjZCIKKwkJCSAgIlx4ODZceGQ0XHg0OVx4NTFceDFjXHhlYlx4N2VceGMzIgorCQkJICAiXHgwYlx4ZjFceDJiXHgxZlx4YTNceDViXHg5MVx4M2YiCisJCQkgICJceDlmXHg3NFx4N2FceDhhXHhmZFx4MWJceDEzXHgwZSIKKwkJCSAgIlx4OTRceGJmXHhmOVx4NGVceGZmXHhkMFx4MWFceDkxIgorCQkJICAiXHg3M1x4NWNceGExXHg3Mlx4NmFceGNkXHgwYlx4MTkiCisJCQkgICJceDdjXHg0ZVx4NWJceDAzXHgzOVx4MzZceDk3XHhlMSIKKwkJCSAgIlx4MjZceDgyXHg2Zlx4YjZceGJiXHhkZVx4OGVceGNjIgorCQkJICAiXHgxZVx4MDhceDI5XHg4NVx4MTZceGUyXHhjOVx4ZWQiCisJCQkgICJceDAzXHhmZlx4M2NceDFiXHg3OFx4NjBceGY2XHhkZSIKKwkJCSAgIlx4NzZceGQ0XHhjZVx4Y2RceDk0XHhjOFx4MTFceDk4IgorCQkJICAiXHg1NVx4ZWZceDUyXHg5N1x4Y2FceDY3XHhlOVx4ZjMiCisJCQkgICJceGU3XHhmZlx4NzJceGIxXHhlOVx4OTdceDg1XHhjYSIKKwkJCSAgIlx4MGFceDdlXHg3N1x4MjBceGM1XHhiM1x4NmRceGM2IgorCQkJICAiXHhkN1x4MmNceGFjXHg5NVx4NzRceGM4XHhjYlx4YmMiCisJCQkgICJceDJmXHg4MFx4MWVceDIzXHhlNVx4NmZceGQzXHg0NCIKKwkJCSAgIlx4YjBceDdmXHgyMlx4MTVceDRiXHhlYlx4YTBceGYwIgorCQkJICAiXHg4Y1x4ZThceDg5XHgxZVx4NjRceDNlXHhkOVx4OTUiCisJCQkgICJceGM5XHg0ZFx4OWFceDY5XHhjOVx4ZjFceGI1XHhmNCIKKwkJCSAgIlx4OTlceDAyXHg3YVx4NzhceDU3XHgyYVx4ZWVceGJkIgorCQkJICAiXHg3NFx4ZDJceDBjXHhjM1x4OThceDgxXHhjMlx4MTMiCisJCQkgICJceGVlXHg3N1x4MGJceDEwXHgxMFx4ZTRceGJlXHhhNyIKKwkJCSAgIlx4MThceDg0XHg2OVx4NzdceGFlXHgxMVx4OWZceDdhIgorCQkJICAiXHgwMlx4M2FceGI1XHg4Y1x4Y2FceDBhXHhkN1x4NTIiCisJCQkgICJceGFmXHhlNlx4NTZceGJiXHgzY1x4MTdceDI1XHg2YSIKKwkJCSAgIlx4OWZceDZlXHg5Ylx4ZjFceDlmXHhkZFx4NWFceDM4IgorCQkJICAiXHhmY1x4ODJceGJiXHhlOFx4NzJceGM1XHg1M1x4OWUiCisJCQkgICJceGRiXHg2MFx4OWVceGY0XHhmN1x4OWNceDIwXHgzZSIKKwkJCSAgIlx4YmJceDE0XHgwZlx4MmVceDU4XHgzY1x4YjJceGFkIgorCQkJICAiXHgxNVx4YjRceGFhXHg1Ylx4NjVceDUwXHgxNlx4YTgiCisJCQkgICJceDQ0XHg5Mlx4NzdceGRiXHhkNFx4NzdceGVmXHgyYyIKKwkJCSAgIlx4OGRceDZjXHgwMVx4N2RceGI3XHgzOFx4YjFceDhkIgorCQkJICAiXHhlYlx4NGFceDQyXHg3ZFx4MTlceDIzXHhjZVx4M2YiCisJCQkgICJceGYyXHg2Mlx4NzNceDU3XHg3OVx4YTRceDE4XHhmMiIKKwkJCSAgIlx4MGFceDI4XHgyZFx4ZjlceDIwXHgxNFx4N2JceGVhIgorCQkJICAiXHhiZVx4NDJceDFlXHhlNVx4MzFceDlkXHgwNVx4NjgiLAogCQkucmxlbiAgID0gNTEyLAogCX0KIH07CkBAIC0zMjU3LDE5NiArMzI4MSwxOTYgQEAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYWVzX3h0c19kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAkvKiBodHRwOi8vZ3JvdXBlci5pZWVlLm9yZy9ncm91cHMvMTYxOS9lbWFpbC9wZGYwMDA4Ni5wZGYgKi8KIAl7IC8qIFhUUy1BRVMgMSAqLwotCQkua2V5ICAgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5rZXkgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgPSB7IDB4OTEsIDB4N2MsIDB4ZjYsIDB4OWUsIDB4YmQsIDB4NjgsIDB4YjIsIDB4ZWMsCi0JCQkgICAweDliLCAweDlmLCAweGU5LCAweGEzLCAweGVhLCAweGRkLCAweGE2LCAweDkyLAotCQkJICAgMHhjZCwgMHg0MywgMHhkMiwgMHhmNSwgMHg5NSwgMHg5OCwgMHhlZCwgMHg4NSwKLQkJCSAgIDB4OGMsIDB4MDIsIDB4YzIsIDB4NjUsIDB4MmYsIDB4YmYsIDB4OTIsIDB4MmUgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0ID0gIlx4OTFceDdjXHhmNlx4OWVceGJkXHg2OFx4YjJceGVjIgorCQkJICJceDliXHg5Zlx4ZTlceGEzXHhlYVx4ZGRceGE2XHg5MiIKKwkJCSAiXHhjZFx4NDNceGQyXHhmNVx4OTVceDk4XHhlZFx4ODUiCisJCQkgIlx4OGNceDAyXHhjMlx4NjVceDJmXHhiZlx4OTJceDJlIiwKIAkJLmlsZW4gICA9IDMyLAotCQkucmVzdWx0ICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkucmVzdWx0ICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5ybGVuICAgPSAzMiwKIAl9LCB7IC8qIFhUUy1BRVMgMiAqLwotCQkua2V5ICAgID0geyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLAotCQkJICAgIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsCi0JCQkgICAgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwKLQkJCSAgICAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyIH0sCisJCS5rZXkgICAgPSAiXHgxMVx4MTFceDExXHgxMVx4MTFceDExXHgxMVx4MTEiCisJCQkgICJceDExXHgxMVx4MTFceDExXHgxMVx4MTFceDExXHgxMSIKKwkJCSAgIlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyIgorCQkJICAiXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjIiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweGM0LCAweDU0LCAweDE4LCAweDVlLCAweDZhLCAweDE2LCAweDkzLCAweDZlLAotCQkJICAgIDB4MzksIDB4MzMsIDB4NDAsIDB4MzgsIDB4YWMsIDB4ZWYsIDB4ODMsIDB4OGIsCi0JCQkgICAgMHhmYiwgMHgxOCwgMHg2ZiwgMHhmZiwgMHg3NCwgMHg4MCwgMHhhZCwgMHhjNCwKLQkJCSAgICAweDI4LCAweDkzLCAweDgyLCAweGVjLCAweGQ2LCAweGQzLCAweDk0LCAweGYwIH0sCisJCS5pdiAgICAgPSAiXHgzM1x4MzNceDMzXHgzM1x4MzNceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCAgPSAiXHhjNFx4NTRceDE4XHg1ZVx4NmFceDE2XHg5M1x4NmUiCisJCQkgICJceDM5XHgzM1x4NDBceDM4XHhhY1x4ZWZceDgzXHg4YiIKKwkJCSAgIlx4ZmJceDE4XHg2Zlx4ZmZceDc0XHg4MFx4YWRceGM0IgorCQkJICAiXHgyOFx4OTNceDgyXHhlY1x4ZDZceGQzXHg5NFx4ZjAiLAogCQkuaWxlbiAgID0gMzIsCi0JCS5yZXN1bHQgPSB7IDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsCi0JCQkgICAgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwKLQkJCSAgICAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LAotCQkJICAgIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQgfSwKKwkJLnJlc3VsdCA9ICJceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NCIKKwkJCSAgIlx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0IgorCQkJICAiXHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDQiCisJCQkgICJceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NCIsCiAJCS5ybGVuICAgPSAzMiwKIAl9LCB7IC8qIFhUUy1BRVMgMyAqLwotCQkua2V5ICAgID0geyAweGZmLCAweGZlLCAweGZkLCAweGZjLCAweGZiLCAweGZhLCAweGY5LCAweGY4LAotCQkJICAgIDB4ZjcsIDB4ZjYsIDB4ZjUsIDB4ZjQsIDB4ZjMsIDB4ZjIsIDB4ZjEsIDB4ZjAsCi0JCQkgICAgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwKLQkJCSAgICAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyLCAweDIyIH0sCisJCS5rZXkgICAgPSAiXHhmZlx4ZmVceGZkXHhmY1x4ZmJceGZhXHhmOVx4ZjgiCisJCQkgICJceGY3XHhmNlx4ZjVceGY0XHhmM1x4ZjJceGYxXHhmMCIKKwkJCSAgIlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyIgorCQkJICAiXHgyMlx4MjJceDIyXHgyMlx4MjJceDIyXHgyMlx4MjIiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgPSB7IDB4YWYsIDB4ODUsIDB4MzMsIDB4NmIsIDB4NTksIDB4N2EsIDB4ZmMsIDB4MWEsCi0JCQkgICAgMHg5MCwgMHgwYiwgMHgyZSwgMHhiMiwgMHgxZSwgMHhjOSwgMHg0OSwgMHhkMiwKLQkJCSAgICAweDkyLCAweGRmLCAweDRjLCAweDA0LCAweDdlLCAweDBiLCAweDIxLCAweDUzLAotCQkJICAgIDB4MjEsIDB4ODYsIDB4YTUsIDB4OTcsIDB4MWEsIDB4MjIsIDB4N2EsIDB4ODkgfSwKKwkJLml2ICAgICA9ICJceDMzXHgzM1x4MzNceDMzXHgzM1x4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0ID0gIlx4YWZceDg1XHgzM1x4NmJceDU5XHg3YVx4ZmNceDFhIgorCQkJICAiXHg5MFx4MGJceDJlXHhiMlx4MWVceGM5XHg0OVx4ZDIiCisJCQkgICJceDkyXHhkZlx4NGNceDA0XHg3ZVx4MGJceDIxXHg1MyIKKwkJCSAgIlx4MjFceDg2XHhhNVx4OTdceDFhXHgyMlx4N2FceDg5IiwKIAkJLmlsZW4gICA9IDMyLAotCQkucmVzdWx0ICA9IHsgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwKLQkJCSAgICAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LCAweDQ0LAotCQkJICAgIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsIDB4NDQsCi0JCQkgICAgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCwgMHg0NCB9LAorCQkucmVzdWx0ICA9ICJceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NCIKKwkJCSAgIlx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0IgorCQkJICAiXHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDQiCisJCQkgICJceDQ0XHg0NFx4NDRceDQ0XHg0NFx4NDRceDQ0XHg0NCIsCiAJCS5ybGVuICAgPSAzMiwKIAl9LCB7IC8qIFhUUy1BRVMgNCAqLwotCQkua2V5ICAgID0geyAweDI3LCAweDE4LCAweDI4LCAweDE4LCAweDI4LCAweDQ1LCAweDkwLCAweDQ1LAotCQkJICAgIDB4MjMsIDB4NTMsIDB4NjAsIDB4MjgsIDB4NzQsIDB4NzEsIDB4MzUsIDB4MjYsCi0JCQkgICAgMHgzMSwgMHg0MSwgMHg1OSwgMHgyNiwgMHg1MywgMHg1OCwgMHg5NywgMHg5MywKLQkJCSAgICAweDIzLCAweDg0LCAweDYyLCAweDY0LCAweDMzLCAweDgzLCAweDI3LCAweDk1IH0sCisJCS5rZXkgICAgPSAiXHgyN1x4MThceDI4XHgxOFx4MjhceDQ1XHg5MFx4NDUiCisJCQkgICJceDIzXHg1M1x4NjBceDI4XHg3NFx4NzFceDM1XHgyNiIKKwkJCSAgIlx4MzFceDQxXHg1OVx4MjZceDUzXHg1OFx4OTdceDkzIgorCQkJICAiXHgyM1x4ODRceDYyXHg2NFx4MzNceDgzXHgyN1x4OTUiLAogCQkua2xlbiAgID0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQgID0geyAweDI3LCAweGE3LCAweDQ3LCAweDliLCAweGVmLCAweGExLCAweGQ0LCAweDc2LAotCQkJICAgIDB4NDgsIDB4OWYsIDB4MzAsIDB4OGMsIDB4ZDQsIDB4Y2YsIDB4YTYsIDB4ZTIsCi0JCQkgICAgMHhhOSwgMHg2ZSwgMHg0YiwgMHhiZSwgMHgzMiwgMHgwOCwgMHhmZiwgMHgyNSwKLQkJCSAgICAweDI4LCAweDdkLCAweGQzLCAweDgxLCAweDk2LCAweDE2LCAweGU4LCAweDljLAotCQkJICAgIDB4YzcsIDB4OGMsIDB4ZjcsIDB4ZjUsIDB4ZTUsIDB4NDMsIDB4NDQsIDB4NWYsCi0JCQkgICAgMHg4MywgMHgzMywgMHhkOCwgMHhmYSwgMHg3ZiwgMHg1NiwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDA1LCAweDI3LCAweDlmLCAweGE1LCAweGQ4LCAweGI1LCAweGU0LCAweGFkLAotCQkJICAgIDB4NDAsIDB4ZTcsIDB4MzYsIDB4ZGQsIDB4YjQsIDB4ZDMsIDB4NTQsIDB4MTIsCi0JCQkgICAgMHgzMiwgMHg4MCwgMHg2MywgMHhmZCwgMHgyYSwgMHhhYiwgMHg1MywgMHhlNSwKLQkJCSAgICAweGVhLCAweDFlLCAweDBhLCAweDlmLCAweDMzLCAweDI1LCAweDAwLCAweGE1LAotCQkJICAgIDB4ZGYsIDB4OTQsIDB4ODcsIDB4ZDAsIDB4N2EsIDB4NWMsIDB4OTIsIDB4Y2MsCi0JCQkgICAgMHg1MSwgMHgyYywgMHg4OCwgMHg2NiwgMHhjNywgMHhlOCwgMHg2MCwgMHhjZSwKLQkJCSAgICAweDkzLCAweGZkLCAweGYxLCAweDY2LCAweGEyLCAweDQ5LCAweDEyLCAweGI0LAotCQkJICAgIDB4MjIsIDB4OTcsIDB4NjEsIDB4NDYsIDB4YWUsIDB4MjAsIDB4Y2UsIDB4ODQsCi0JCQkgICAgMHg2YiwgMHhiNywgMHhkYywgMHg5YiwgMHhhOSwgMHg0YSwgMHg3NiwgMHg3YSwKLQkJCSAgICAweGFlLCAweGYyLCAweDBjLCAweDBkLCAweDYxLCAweGFkLCAweDAyLCAweDY1LAotCQkJICAgIDB4NWUsIDB4YTksIDB4MmQsIDB4YzQsIDB4YzQsIDB4ZTQsIDB4MWEsIDB4ODksCi0JCQkgICAgMHg1MiwgMHhjNiwgMHg1MSwgMHhkMywgMHgzMSwgMHg3NCwgMHhiZSwgMHg1MSwKLQkJCSAgICAweGExLCAweDBjLCAweDQyLCAweDExLCAweDEwLCAweGU2LCAweGQ4LCAweDE1LAotCQkJICAgIDB4ODgsIDB4ZWQsIDB4ZTgsIDB4MjEsIDB4MDMsIDB4YTIsIDB4NTIsIDB4ZDgsCi0JCQkgICAgMHhhNywgMHg1MCwgMHhlOCwgMHg3NiwgMHg4ZCwgMHhlZiwgMHhmZiwgMHhlZCwKLQkJCSAgICAweDkxLCAweDIyLCAweDgxLCAweDBhLCAweGFlLCAweGI5LCAweDlmLCAweDkxLAotCQkJICAgIDB4NzIsIDB4YWYsIDB4ODIsIDB4YjYsIDB4MDQsIDB4ZGMsIDB4NGIsIDB4OGUsCi0JCQkgICAgMHg1MSwgMHhiYywgMHhiMCwgMHg4MiwgMHgzNSwgMHhhNiwgMHhmNCwgMHgzNCwKLQkJCSAgICAweDEzLCAweDMyLCAweGU0LCAweGNhLCAweDYwLCAweDQ4LCAweDJhLCAweDRiLAotCQkJICAgIDB4YTEsIDB4YTAsIDB4M2IsIDB4M2UsIDB4NjUsIDB4MDAsIDB4OGYsIDB4YzUsCi0JCQkgICAgMHhkYSwgMHg3NiwgMHhiNywgMHgwYiwgMHhmMSwgMHg2OSwgMHgwZCwgMHhiNCwKLQkJCSAgICAweGVhLCAweGUyLCAweDljLCAweDVmLCAweDFiLCAweGFkLCAweGQwLCAweDNjLAotCQkJICAgIDB4NWMsIDB4Y2YsIDB4MmEsIDB4NTUsIDB4ZDcsIDB4MDUsIDB4ZGQsIDB4Y2QsCi0JCQkgICAgMHg4NiwgMHhkNCwgMHg0OSwgMHg1MSwgMHgxYywgMHhlYiwgMHg3ZSwgMHhjMywKLQkJCSAgICAweDBiLCAweGYxLCAweDJiLCAweDFmLCAweGEzLCAweDViLCAweDkxLCAweDNmLAotCQkJICAgIDB4OWYsIDB4NzQsIDB4N2EsIDB4OGEsIDB4ZmQsIDB4MWIsIDB4MTMsIDB4MGUsCi0JCQkgICAgMHg5NCwgMHhiZiwgMHhmOSwgMHg0ZSwgMHhmZiwgMHhkMCwgMHgxYSwgMHg5MSwKLQkJCSAgICAweDczLCAweDVjLCAweGExLCAweDcyLCAweDZhLCAweGNkLCAweDBiLCAweDE5LAotCQkJICAgIDB4N2MsIDB4NGUsIDB4NWIsIDB4MDMsIDB4MzksIDB4MzYsIDB4OTcsIDB4ZTEsCi0JCQkgICAgMHgyNiwgMHg4MiwgMHg2ZiwgMHhiNiwgMHhiYiwgMHhkZSwgMHg4ZSwgMHhjYywKLQkJCSAgICAweDFlLCAweDA4LCAweDI5LCAweDg1LCAweDE2LCAweGUyLCAweGM5LCAweGVkLAotCQkJICAgIDB4MDMsIDB4ZmYsIDB4M2MsIDB4MWIsIDB4NzgsIDB4NjAsIDB4ZjYsIDB4ZGUsCi0JCQkgICAgMHg3NiwgMHhkNCwgMHhjZSwgMHhjZCwgMHg5NCwgMHhjOCwgMHgxMSwgMHg5OCwKLQkJCSAgICAweDU1LCAweGVmLCAweDUyLCAweDk3LCAweGNhLCAweDY3LCAweGU5LCAweGYzLAotCQkJICAgIDB4ZTcsIDB4ZmYsIDB4NzIsIDB4YjEsIDB4ZTksIDB4OTcsIDB4ODUsIDB4Y2EsCi0JCQkgICAgMHgwYSwgMHg3ZSwgMHg3NywgMHgyMCwgMHhjNSwgMHhiMywgMHg2ZCwgMHhjNiwKLQkJCSAgICAweGQ3LCAweDJjLCAweGFjLCAweDk1LCAweDc0LCAweGM4LCAweGNiLCAweGJjLAotCQkJICAgIDB4MmYsIDB4ODAsIDB4MWUsIDB4MjMsIDB4ZTUsIDB4NmYsIDB4ZDMsIDB4NDQsCi0JCQkgICAgMHhiMCwgMHg3ZiwgMHgyMiwgMHgxNSwgMHg0YiwgMHhlYiwgMHhhMCwgMHhmMCwKLQkJCSAgICAweDhjLCAweGU4LCAweDg5LCAweDFlLCAweDY0LCAweDNlLCAweGQ5LCAweDk1LAotCQkJICAgIDB4YzksIDB4NGQsIDB4OWEsIDB4NjksIDB4YzksIDB4ZjEsIDB4YjUsIDB4ZjQsCi0JCQkgICAgMHg5OSwgMHgwMiwgMHg3YSwgMHg3OCwgMHg1NywgMHgyYSwgMHhlZSwgMHhiZCwKLQkJCSAgICAweDc0LCAweGQyLCAweDBjLCAweGMzLCAweDk4LCAweDgxLCAweGMyLCAweDEzLAotCQkJICAgIDB4ZWUsIDB4NzcsIDB4MGIsIDB4MTAsIDB4MTAsIDB4ZTQsIDB4YmUsIDB4YTcsCi0JCQkgICAgMHgxOCwgMHg4NCwgMHg2OSwgMHg3NywgMHhhZSwgMHgxMSwgMHg5ZiwgMHg3YSwKLQkJCSAgICAweDAyLCAweDNhLCAweGI1LCAweDhjLCAweGNhLCAweDBhLCAweGQ3LCAweDUyLAotCQkJICAgIDB4YWYsIDB4ZTYsIDB4NTYsIDB4YmIsIDB4M2MsIDB4MTcsIDB4MjUsIDB4NmEsCi0JCQkgICAgMHg5ZiwgMHg2ZSwgMHg5YiwgMHhmMSwgMHg5ZiwgMHhkZCwgMHg1YSwgMHgzOCwKLQkJCSAgICAweGZjLCAweDgyLCAweGJiLCAweGU4LCAweDcyLCAweGM1LCAweDUzLCAweDllLAotCQkJICAgIDB4ZGIsIDB4NjAsIDB4OWUsIDB4ZjQsIDB4ZjcsIDB4OWMsIDB4MjAsIDB4M2UsCi0JCQkgICAgMHhiYiwgMHgxNCwgMHgwZiwgMHgyZSwgMHg1OCwgMHgzYywgMHhiMiwgMHhhZCwKLQkJCSAgICAweDE1LCAweGI0LCAweGFhLCAweDViLCAweDY1LCAweDUwLCAweDE2LCAweGE4LAotCQkJICAgIDB4NDQsIDB4OTIsIDB4NzcsIDB4ZGIsIDB4ZDQsIDB4NzcsIDB4ZWYsIDB4MmMsCi0JCQkgICAgMHg4ZCwgMHg2YywgMHgwMSwgMHg3ZCwgMHhiNywgMHgzOCwgMHhiMSwgMHg4ZCwKLQkJCSAgICAweGViLCAweDRhLCAweDQyLCAweDdkLCAweDE5LCAweDIzLCAweGNlLCAweDNmLAotCQkJICAgIDB4ZjIsIDB4NjIsIDB4NzMsIDB4NTcsIDB4NzksIDB4YTQsIDB4MTgsIDB4ZjIsCi0JCQkgICAgMHgwYSwgMHgyOCwgMHgyZCwgMHhmOSwgMHgyMCwgMHgxNCwgMHg3YiwgMHhlYSwKLQkJCSAgICAweGJlLCAweDQyLCAweDFlLCAweGU1LCAweDMxLCAweDlkLCAweDA1LCAweDY4IH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCAgPSAiXHgyN1x4YTdceDQ3XHg5Ylx4ZWZceGExXHhkNFx4NzYiCisJCQkgICJceDQ4XHg5Zlx4MzBceDhjXHhkNFx4Y2ZceGE2XHhlMiIKKwkJCSAgIlx4YTlceDZlXHg0Ylx4YmVceDMyXHgwOFx4ZmZceDI1IgorCQkJICAiXHgyOFx4N2RceGQzXHg4MVx4OTZceDE2XHhlOFx4OWMiCisJCQkgICJceGM3XHg4Y1x4ZjdceGY1XHhlNVx4NDNceDQ0XHg1ZiIKKwkJCSAgIlx4ODNceDMzXHhkOFx4ZmFceDdmXHg1Nlx4MDBceDAwIgorCQkJICAiXHgwNVx4MjdceDlmXHhhNVx4ZDhceGI1XHhlNFx4YWQiCisJCQkgICJceDQwXHhlN1x4MzZceGRkXHhiNFx4ZDNceDU0XHgxMiIKKwkJCSAgIlx4MzJceDgwXHg2M1x4ZmRceDJhXHhhYlx4NTNceGU1IgorCQkJICAiXHhlYVx4MWVceDBhXHg5Zlx4MzNceDI1XHgwMFx4YTUiCisJCQkgICJceGRmXHg5NFx4ODdceGQwXHg3YVx4NWNceDkyXHhjYyIKKwkJCSAgIlx4NTFceDJjXHg4OFx4NjZceGM3XHhlOFx4NjBceGNlIgorCQkJICAiXHg5M1x4ZmRceGYxXHg2Nlx4YTJceDQ5XHgxMlx4YjQiCisJCQkgICJceDIyXHg5N1x4NjFceDQ2XHhhZVx4MjBceGNlXHg4NCIKKwkJCSAgIlx4NmJceGI3XHhkY1x4OWJceGE5XHg0YVx4NzZceDdhIgorCQkJICAiXHhhZVx4ZjJceDBjXHgwZFx4NjFceGFkXHgwMlx4NjUiCisJCQkgICJceDVlXHhhOVx4MmRceGM0XHhjNFx4ZTRceDFhXHg4OSIKKwkJCSAgIlx4NTJceGM2XHg1MVx4ZDNceDMxXHg3NFx4YmVceDUxIgorCQkJICAiXHhhMVx4MGNceDQyXHgxMVx4MTBceGU2XHhkOFx4MTUiCisJCQkgICJceDg4XHhlZFx4ZThceDIxXHgwM1x4YTJceDUyXHhkOCIKKwkJCSAgIlx4YTdceDUwXHhlOFx4NzZceDhkXHhlZlx4ZmZceGVkIgorCQkJICAiXHg5MVx4MjJceDgxXHgwYVx4YWVceGI5XHg5Zlx4OTEiCisJCQkgICJceDcyXHhhZlx4ODJceGI2XHgwNFx4ZGNceDRiXHg4ZSIKKwkJCSAgIlx4NTFceGJjXHhiMFx4ODJceDM1XHhhNlx4ZjRceDM0IgorCQkJICAiXHgxM1x4MzJceGU0XHhjYVx4NjBceDQ4XHgyYVx4NGIiCisJCQkgICJceGExXHhhMFx4M2JceDNlXHg2NVx4MDBceDhmXHhjNSIKKwkJCSAgIlx4ZGFceDc2XHhiN1x4MGJceGYxXHg2OVx4MGRceGI0IgorCQkJICAiXHhlYVx4ZTJceDljXHg1Zlx4MWJceGFkXHhkMFx4M2MiCisJCQkgICJceDVjXHhjZlx4MmFceDU1XHhkN1x4MDVceGRkXHhjZCIKKwkJCSAgIlx4ODZceGQ0XHg0OVx4NTFceDFjXHhlYlx4N2VceGMzIgorCQkJICAiXHgwYlx4ZjFceDJiXHgxZlx4YTNceDViXHg5MVx4M2YiCisJCQkgICJceDlmXHg3NFx4N2FceDhhXHhmZFx4MWJceDEzXHgwZSIKKwkJCSAgIlx4OTRceGJmXHhmOVx4NGVceGZmXHhkMFx4MWFceDkxIgorCQkJICAiXHg3M1x4NWNceGExXHg3Mlx4NmFceGNkXHgwYlx4MTkiCisJCQkgICJceDdjXHg0ZVx4NWJceDAzXHgzOVx4MzZceDk3XHhlMSIKKwkJCSAgIlx4MjZceDgyXHg2Zlx4YjZceGJiXHhkZVx4OGVceGNjIgorCQkJICAiXHgxZVx4MDhceDI5XHg4NVx4MTZceGUyXHhjOVx4ZWQiCisJCQkgICJceDAzXHhmZlx4M2NceDFiXHg3OFx4NjBceGY2XHhkZSIKKwkJCSAgIlx4NzZceGQ0XHhjZVx4Y2RceDk0XHhjOFx4MTFceDk4IgorCQkJICAiXHg1NVx4ZWZceDUyXHg5N1x4Y2FceDY3XHhlOVx4ZjMiCisJCQkgICJceGU3XHhmZlx4NzJceGIxXHhlOVx4OTdceDg1XHhjYSIKKwkJCSAgIlx4MGFceDdlXHg3N1x4MjBceGM1XHhiM1x4NmRceGM2IgorCQkJICAiXHhkN1x4MmNceGFjXHg5NVx4NzRceGM4XHhjYlx4YmMiCisJCQkgICJceDJmXHg4MFx4MWVceDIzXHhlNVx4NmZceGQzXHg0NCIKKwkJCSAgIlx4YjBceDdmXHgyMlx4MTVceDRiXHhlYlx4YTBceGYwIgorCQkJICAiXHg4Y1x4ZThceDg5XHgxZVx4NjRceDNlXHhkOVx4OTUiCisJCQkgICJceGM5XHg0ZFx4OWFceDY5XHhjOVx4ZjFceGI1XHhmNCIKKwkJCSAgIlx4OTlceDAyXHg3YVx4NzhceDU3XHgyYVx4ZWVceGJkIgorCQkJICAiXHg3NFx4ZDJceDBjXHhjM1x4OThceDgxXHhjMlx4MTMiCisJCQkgICJceGVlXHg3N1x4MGJceDEwXHgxMFx4ZTRceGJlXHhhNyIKKwkJCSAgIlx4MThceDg0XHg2OVx4NzdceGFlXHgxMVx4OWZceDdhIgorCQkJICAiXHgwMlx4M2FceGI1XHg4Y1x4Y2FceDBhXHhkN1x4NTIiCisJCQkgICJceGFmXHhlNlx4NTZceGJiXHgzY1x4MTdceDI1XHg2YSIKKwkJCSAgIlx4OWZceDZlXHg5Ylx4ZjFceDlmXHhkZFx4NWFceDM4IgorCQkJICAiXHhmY1x4ODJceGJiXHhlOFx4NzJceGM1XHg1M1x4OWUiCisJCQkgICJceGRiXHg2MFx4OWVceGY0XHhmN1x4OWNceDIwXHgzZSIKKwkJCSAgIlx4YmJceDE0XHgwZlx4MmVceDU4XHgzY1x4YjJceGFkIgorCQkJICAiXHgxNVx4YjRceGFhXHg1Ylx4NjVceDUwXHgxNlx4YTgiCisJCQkgICJceDQ0XHg5Mlx4NzdceGRiXHhkNFx4NzdceGVmXHgyYyIKKwkJCSAgIlx4OGRceDZjXHgwMVx4N2RceGI3XHgzOFx4YjFceDhkIgorCQkJICAiXHhlYlx4NGFceDQyXHg3ZFx4MTlceDIzXHhjZVx4M2YiCisJCQkgICJceGYyXHg2Mlx4NzNceDU3XHg3OVx4YTRceDE4XHhmMiIKKwkJCSAgIlx4MGFceDI4XHgyZFx4ZjlceDIwXHgxNFx4N2JceGVhIgorCQkJICAiXHhiZVx4NDJceDFlXHhlNVx4MzFceDlkXHgwNVx4NjgiLAogCQkuaWxlbiAgID0gNTEyLAotCQkucmVzdWx0ID0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAotCQkJICAgIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCi0JCQkgICAgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKLQkJCSAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJICAgIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCi0JCQkgICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKLQkJCSAgICAweDQ4LCAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmLAotCQkJICAgIDB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsCi0JCQkgICAgMHg1OCwgMHg1OSwgMHg1YSwgMHg1YiwgMHg1YywgMHg1ZCwgMHg1ZSwgMHg1ZiwKLQkJCSAgICAweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotCQkJICAgIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCi0JCQkgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywKLQkJCSAgICAweDc4LCAweDc5LCAweDdhLCAweDdiLCAweDdjLCAweDdkLCAweDdlLCAweDdmLAotCQkJICAgIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0JCQkgICAgMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKLQkJCSAgICAweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAotCQkJICAgIDB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCi0JCQkgICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKLQkJCSAgICAweGE4LCAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLAotCQkJICAgIDB4YjAsIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCi0JCQkgICAgMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKLQkJCSAgICAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAotCQkJICAgIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCi0JCQkgICAgMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywKLQkJCSAgICAweGQ4LCAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLAotCQkJICAgIDB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCi0JCQkgICAgMHhlOCwgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwKLQkJCSAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAotCQkJICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYsCi0JCQkgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLQkJCSAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAotCQkJICAgIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCi0JCQkgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkJCSAgICAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAotCQkJICAgIDB4NDAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCi0JCQkgICAgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKLQkJCSAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LAotCQkJICAgIDB4NTgsIDB4NTksIDB4NWEsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsCi0JCQkgICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQkJCSAgICAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAotCQkJICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCi0JCQkgICAgMHg3OCwgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKLQkJCSAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAotCQkJICAgIDB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCi0JCQkgICAgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKLQkJCSAgICAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAotCQkJICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCi0JCQkgICAgMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKLQkJCSAgICAweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAotCQkJICAgIDB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCi0JCQkgICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLQkJCSAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAotCQkJICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCi0JCQkgICAgMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKLQkJCSAgICAweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LAotCQkJICAgIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCi0JCQkgICAgMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKLQkJCSAgICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmIH0sCisJCS5yZXN1bHQgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiCisJCQkgICJceDIwXHgyMVx4MjJceDIzXHgyNFx4MjVceDI2XHgyNyIKKwkJCSAgIlx4MjhceDI5XHgyYVx4MmJceDJjXHgyZFx4MmVceDJmIgorCQkJICAiXHgzMFx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzciCisJCQkgICJceDM4XHgzOVx4M2FceDNiXHgzY1x4M2RceDNlXHgzZiIKKwkJCSAgIlx4NDBceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3IgorCQkJICAiXHg0OFx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGYiCisJCQkgICJceDUwXHg1MVx4NTJceDUzXHg1NFx4NTVceDU2XHg1NyIKKwkJCSAgIlx4NThceDU5XHg1YVx4NWJceDVjXHg1ZFx4NWVceDVmIgorCQkJICAiXHg2MFx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjciCisJCQkgICJceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2ZiIKKwkJCSAgIlx4NzBceDcxXHg3Mlx4NzNceDc0XHg3NVx4NzZceDc3IgorCQkJICAiXHg3OFx4NzlceDdhXHg3Ylx4N2NceDdkXHg3ZVx4N2YiCisJCQkgICJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4NyIKKwkJCSAgIlx4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmIgorCQkJICAiXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTciCisJCQkgICJceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5ZiIKKwkJCSAgIlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3IgorCQkJICAiXHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWYiCisJCQkgICJceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiNyIKKwkJCSAgIlx4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmIgorCQkJICAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzciCisJCQkgICJceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIKKwkJCSAgIlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3IgorCQkJICAiXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGYiCisJCQkgICJceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlNyIKKwkJCSAgIlx4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmIgorCQkJICAiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjciCisJCQkgICJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIKKwkJCSAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxNyIKKwkJCSAgIlx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgorCQkJICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjciCisJCQkgICJceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKKwkJCSAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJICAiXHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCisJCQkgICJceDQwXHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2XHg0NyIKKwkJCSAgIlx4NDhceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmIgorCQkJICAiXHg1MFx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTciCisJCQkgICJceDU4XHg1OVx4NWFceDViXHg1Y1x4NWRceDVlXHg1ZiIKKwkJCSAgIlx4NjBceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3IgorCQkJICAiXHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmYiCisJCQkgICJceDcwXHg3MVx4NzJceDczXHg3NFx4NzVceDc2XHg3NyIKKwkJCSAgIlx4NzhceDc5XHg3YVx4N2JceDdjXHg3ZFx4N2VceDdmIgorCQkJICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODciCisJCQkgICJceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKKwkJCSAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3IgorCQkJICAiXHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCisJCQkgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhNyIKKwkJCSAgIlx4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgorCQkJICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjciCisJCQkgICJceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKKwkJCSAgIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3IgorCQkJICAiXHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiCisJCQkgICJceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkNyIKKwkJCSAgIlx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmIgorCQkJICAiXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTciCisJCQkgICJceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZiIKKwkJCSAgIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3IgorCQkJICAiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLAogCQkucmxlbiAgID0gNTEyLAogCX0KIH07CkBAIC0zNDU0LDE4MzYgKzM0NzgsMTg0MSBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFlc19jdHJfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBGcm9tIFJGQyAzNjg2ICovCi0JCS5rZXkJPSB7IDB4YWUsIDB4NjgsIDB4NTIsIDB4ZjgsIDB4MTIsIDB4MTAsIDB4NjcsIDB4Y2MsCi0JCQkgICAgMHg0YiwgMHhmNywgMHhhNSwgMHg3NiwgMHg1NSwgMHg3NywgMHhmMywgMHg5ZSwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDMwIH0sCisJCS5rZXkJPSAiXHhhZVx4NjhceDUyXHhmOFx4MTJceDEwXHg2N1x4Y2MiCisJCQkgICJceDRiXHhmN1x4YTVceDc2XHg1NVx4NzdceGYzXHg5ZSIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MzAiLAogCQkua2xlbgk9IDIwLAotCQkuaXYgCT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCS5pbnB1dCAJPSB7ICJTaW5nbGUgYmxvY2sgbXNnIiB9LAorCQkuaXYJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQJPSAiU2luZ2xlIGJsb2NrIG1zZyIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQgPSB7IDB4ZTQsIDB4MDksIDB4NWQsIDB4NGYsIDB4YjcsIDB4YTcsIDB4YjMsIDB4NzksCi0JCQkgICAgMHgyZCwgMHg2MSwgMHg3NSwgMHhhMywgMHgyNiwgMHgxMywgMHgxMSwgMHhiOCB9LAorCQkucmVzdWx0ID0gIlx4ZTRceDA5XHg1ZFx4NGZceGI3XHhhN1x4YjNceDc5IgorCQkJICAiXHgyZFx4NjFceDc1XHhhM1x4MjZceDEzXHgxMVx4YjgiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHg3ZSwgMHgyNCwgMHgwNiwgMHg3OCwgMHgxNywgMHhmYSwgMHhlMCwgMHhkNywKLQkJCSAgICAweDQzLCAweGQ2LCAweGNlLCAweDFmLCAweDMyLCAweDUzLCAweDkxLCAweDYzLAotCQkJICAgIDB4MDAsIDB4NmMsIDB4YjYsIDB4ZGIgfSwKKwkJLmtleQk9ICJceDdlXHgyNFx4MDZceDc4XHgxN1x4ZmFceGUwXHhkNyIKKwkJCSAgIlx4NDNceGQ2XHhjZVx4MWZceDMyXHg1M1x4OTFceDYzIgorCQkJICAiXHgwMFx4NmNceGI2XHhkYiIsCiAJCS5rbGVuCT0gMjAsCi0JCS5pdiAJPSB7IDB4YzAsIDB4NTQsIDB4M2IsIDB4NTksIDB4ZGEsIDB4NDgsIDB4ZDksIDB4MGIgfSwKLQkJLmlucHV0CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCi0JCS5pbGVuIAk9IDMyLAotCQkucmVzdWx0ID0geyAweDUxLCAweDA0LCAweGExLCAweDA2LCAweDE2LCAweDhhLCAweDcyLCAweGQ5LAotCQkJICAgIDB4NzksIDB4MGQsIDB4NDEsIDB4ZWUsIDB4OGUsIDB4ZGEsIDB4ZDMsIDB4ODgsCi0JCQkgICAgMHhlYiwgMHgyZSwgMHgxZSwgMHhmYywgMHg0NiwgMHhkYSwgMHg1NywgMHhjOCwKLQkJCSAgICAweGZjLCAweGU2LCAweDMwLCAweGRmLCAweDkxLCAweDQxLCAweGJlLCAweDI4IH0sCisJCS5pdgk9ICJceGMwXHg1NFx4M2JceDU5XHhkYVx4NDhceGQ5XHgwYiIsCisJCS5pbnB1dAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIsCisJCS5pbGVuCT0gMzIsCisJCS5yZXN1bHQgPSAiXHg1MVx4MDRceGExXHgwNlx4MTZceDhhXHg3Mlx4ZDkiCisJCQkgICJceDc5XHgwZFx4NDFceGVlXHg4ZVx4ZGFceGQzXHg4OCIKKwkJCSAgIlx4ZWJceDJlXHgxZVx4ZmNceDQ2XHhkYVx4NTdceGM4IgorCQkJICAiXHhmY1x4ZTZceDMwXHhkZlx4OTFceDQxXHhiZVx4MjgiLAogCQkucmxlbgk9IDMyLAogCX0sIHsKLQkJLmtleSAJPSB7IDB4MTYsIDB4YWYsIDB4NWIsIDB4MTQsIDB4NWYsIDB4YzksIDB4ZjUsIDB4NzksCi0JCQkgICAgMHhjMSwgMHg3NSwgMHhmOSwgMHgzZSwgMHgzYiwgMHhmYiwgMHgwZSwgMHhlZCwKLQkJCSAgICAweDg2LCAweDNkLCAweDA2LCAweGNjLCAweGZkLCAweGI3LCAweDg1LCAweDE1LAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDggfSwKLQkJLmtsZW4gCT0gMjgsCi0JCS5pdgk9IHsgMHgzNiwgMHg3MywgMHgzYywgMHgxNCwgMHg3ZCwgMHg2ZCwgMHg5MywgMHhjYiB9LAotCQkuaW5wdXQJPSB7ICJTaW5nbGUgYmxvY2sgbXNnIiB9LAotCQkuaWxlbiAJPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg0YiwgMHg1NSwgMHgzOCwgMHg0ZiwgMHhlMiwgMHg1OSwgMHhjOSwgMHhjOCwKLQkJCSAgICAweDRlLCAweDc5LCAweDM1LCAweGEwLCAweDAzLCAweGNiLCAweGU5LCAweDI4IH0sCisJCS5rZXkJPSAiXHgxNlx4YWZceDViXHgxNFx4NWZceGM5XHhmNVx4NzkiCisJCQkgICJceGMxXHg3NVx4ZjlceDNlXHgzYlx4ZmJceDBlXHhlZCIKKwkJCSAgIlx4ODZceDNkXHgwNlx4Y2NceGZkXHhiN1x4ODVceDE1IgorCQkJICAiXHgwMFx4MDBceDAwXHg0OCIsCisJCS5rbGVuCT0gMjgsCisJCS5pdgk9ICJceDM2XHg3M1x4M2NceDE0XHg3ZFx4NmRceDkzXHhjYiIsCisJCS5pbnB1dAk9ICJTaW5nbGUgYmxvY2sgbXNnIiwKKwkJLmlsZW4JPSAxNiwKKwkJLnJlc3VsdAk9ICJceDRiXHg1NVx4MzhceDRmXHhlMlx4NTlceGM5XHhjOCIKKwkJCSAgIlx4NGVceDc5XHgzNVx4YTBceDAzXHhjYlx4ZTlceDI4IiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4N2MsIDB4NWMsIDB4YjIsIDB4NDAsIDB4MWIsIDB4M2QsIDB4YzMsIDB4M2MsCi0JCQkgICAgMHgxOSwgMHhlNywgMHgzNCwgMHgwOCwgMHgxOSwgMHhlMCwgMHhmNiwgMHg5YywKLQkJCSAgICAweDY3LCAweDhjLCAweDNkLCAweGI4LCAweGU2LCAweGY2LCAweGE5LCAweDFhLAotCQkJICAgIDB4MDAsIDB4OTYsIDB4YjAsIDB4M2IgfSwKKwkJLmtleQk9ICJceDdjXHg1Y1x4YjJceDQwXHgxYlx4M2RceGMzXHgzYyIKKwkJCSAgIlx4MTlceGU3XHgzNFx4MDhceDE5XHhlMFx4ZjZceDljIgorCQkJICAiXHg2N1x4OGNceDNkXHhiOFx4ZTZceGY2XHhhOVx4MWEiCisJCQkgICJceDAwXHg5Nlx4YjBceDNiIiwKIAkJLmtsZW4JPSAyOCwKLQkJLml2IAk9IHsgMHgwMiwgMHgwYywgMHg2ZSwgMHhhZCwgMHhjMiwgMHhjYiwgMHg1MCwgMHgwZCB9LAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYgfSwKKwkJLml2CT0gIlx4MDJceDBjXHg2ZVx4YWRceGMyXHhjYlx4NTBceDBkIiwKKwkJLmlucHV0CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxNyIKKwkJCSAgIlx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHg0NSwgMHgzMiwgMHg0MywgMHhmYywgMHg2MCwgMHg5YiwgMHgyMywgMHgzMiwKLQkJCSAgICAweDdlLCAweGRmLCAweGFhLCAweGZhLCAweDcxLCAweDMxLCAweGNkLCAweDlmLAotCQkJICAgIDB4ODQsIDB4OTAsIDB4NzAsIDB4MWMsIDB4NWEsIDB4ZDQsIDB4YTcsIDB4OWMsCi0JCQkgICAgMHhmYywgMHgxZiwgMHhlMCwgMHhmZiwgMHg0MiwgMHhmNCwgMHhmYiwgMHgwMCB9LAotCQkucmxlbiAJPSAzMiwKKwkJLnJlc3VsdAk9ICJceDQ1XHgzMlx4NDNceGZjXHg2MFx4OWJceDIzXHgzMiIKKwkJCSAgIlx4N2VceGRmXHhhYVx4ZmFceDcxXHgzMVx4Y2RceDlmIgorCQkJICAiXHg4NFx4OTBceDcwXHgxY1x4NWFceGQ0XHhhN1x4OWMiCisJCQkgICJceGZjXHgxZlx4ZTBceGZmXHg0Mlx4ZjRceGZiXHgwMCIsCisJCS5ybGVuCT0gMzIsCiAJfSwgewotCQkua2V5IAk9IHsgMHg3NywgMHg2YiwgMHhlZiwgMHhmMiwgMHg4NSwgMHgxZCwgMHhiMCwgMHg2ZiwKLQkJCSAgICAweDRjLCAweDhhLCAweDA1LCAweDQyLCAweGM4LCAweDY5LCAweDZmLCAweDZjLAotCQkJICAgIDB4NmEsIDB4ODEsIDB4YWYsIDB4MWUsIDB4ZWMsIDB4OTYsIDB4YjQsIDB4ZDMsCi0JCQkgICAgMHg3ZiwgMHhjMSwgMHhkNiwgMHg4OSwgMHhlNiwgMHhjMSwgMHhjMSwgMHgwNCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDYwIH0sCisJCS5rZXkJPSAiXHg3N1x4NmJceGVmXHhmMlx4ODVceDFkXHhiMFx4NmYiCisJCQkgICJceDRjXHg4YVx4MDVceDQyXHhjOFx4NjlceDZmXHg2YyIKKwkJCSAgIlx4NmFceDgxXHhhZlx4MWVceGVjXHg5Nlx4YjRceGQzIgorCQkJICAiXHg3Zlx4YzFceGQ2XHg4OVx4ZTZceGMxXHhjMVx4MDQiCisJCQkgICJceDAwXHgwMFx4MDBceDYwIiwKIAkJLmtsZW4JPSAzNiwKLQkJLml2IAk9IHsgMHhkYiwgMHg1NiwgMHg3MiwgMHhjOSwgMHg3YSwgMHhhOCwgMHhmMCwgMHhiMiB9LAotCQkuaW5wdXQJPSB7ICJTaW5nbGUgYmxvY2sgbXNnIiB9LAorCQkuaXYJPSAiXHhkYlx4NTZceDcyXHhjOVx4N2FceGE4XHhmMFx4YjIiLAorCQkuaW5wdXQJPSAiU2luZ2xlIGJsb2NrIG1zZyIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQgPSB7IDB4MTQsIDB4NWEsIDB4ZDAsIDB4MWQsIDB4YmYsIDB4ODIsIDB4NGUsIDB4YzcsCi0JCQkgICAgMHg1NiwgMHgwOCwgMHg2MywgMHhkYywgMHg3MSwgMHhlMywgMHhlMCwgMHhjMCB9LAotCQkucmxlbiAJPSAxNiwKKwkJLnJlc3VsdCA9ICJceDE0XHg1YVx4ZDBceDFkXHhiZlx4ODJceDRlXHhjNyIKKwkJCSAgIlx4NTZceDA4XHg2M1x4ZGNceDcxXHhlM1x4ZTBceGMwIiwKKwkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZjYsIDB4ZDYsIDB4NmQsIDB4NmIsIDB4ZDUsIDB4MmQsIDB4NTksIDB4YmIsCi0JCQkgICAgMHgwNywgMHg5NiwgMHgzNiwgMHg1OCwgMHg3OSwgMHhlZiwgMHhmOCwgMHg4NiwKLQkJCSAgICAweGM2LCAweDZkLCAweGQ1LCAweDFhLCAweDViLCAweDZhLCAweDk5LCAweDc0LAotCQkJICAgIDB4NGIsIDB4NTAsIDB4NTksIDB4MGMsIDB4ODcsIDB4YTIsIDB4MzgsIDB4ODQsCi0JCQkgICAgMHgwMCwgMHhmYSwgMHhhYywgMHgyNCB9LAotCQkua2xlbiAJPSAzNiwKLQkJLml2CT0geyAweGMxLCAweDU4LCAweDVlLCAweGYxLCAweDVhLCAweDQzLCAweGQ4LCAweDc1IH0sCi0JCS5pbnB1dAk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAorCQkua2V5CT0gIlx4ZjZceGQ2XHg2ZFx4NmJceGQ1XHgyZFx4NTlceGJiIgorCQkJICAiXHgwN1x4OTZceDM2XHg1OFx4NzlceGVmXHhmOFx4ODYiCisJCQkgICJceGM2XHg2ZFx4ZDVceDFhXHg1Ylx4NmFceDk5XHg3NCIKKwkJCSAgIlx4NGJceDUwXHg1OVx4MGNceDg3XHhhMlx4MzhceDg0IgorCQkJICAiXHgwMFx4ZmFceGFjXHgyNCIsCisJCS5rbGVuCT0gMzYsCisJCS5pdgk9ICJceGMxXHg1OFx4NWVceGYxXHg1YVx4NDNceGQ4XHg3NSIsCisJCS5pbnB1dAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIsCiAJCS5pbGVuCT0gMzIsCi0JCS5yZXN1bHQgPSB7IDB4ZjAsIDB4NWUsIDB4MjMsIDB4MWIsIDB4MzgsIDB4OTQsIDB4NjEsIDB4MmMsCi0JCQkgICAgMHg0OSwgMHhlZSwgMHgwMCwgMHgwYiwgMHg4MCwgMHg0ZSwgMHhiMiwgMHhhOSwKLQkJCSAgICAweGI4LCAweDMwLCAweDZiLCAweDUwLCAweDhmLCAweDgzLCAweDlkLCAweDZhLAotCQkJICAgIDB4NTUsIDB4MzAsIDB4ODMsIDB4MWQsIDB4OTMsIDB4NDQsIDB4YWYsIDB4MWMgfSwKKwkJLnJlc3VsdCA9ICJceGYwXHg1ZVx4MjNceDFiXHgzOFx4OTRceDYxXHgyYyIKKwkJCSAgIlx4NDlceGVlXHgwMFx4MGJceDgwXHg0ZVx4YjJceGE5IgorCQkJICAiXHhiOFx4MzBceDZiXHg1MFx4OGZceDgzXHg5ZFx4NmEiCisJCQkgICJceDU1XHgzMFx4ODNceDFkXHg5M1x4NDRceGFmXHgxYyIsCiAJCS5ybGVuCT0gMzIsCiAJfSwgewogCS8vIGdlbmVyYXRlZCB1c2luZyBDcnlwdG8rKwotCQkua2V5ID0gewotCQkJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCX0sCisJCS5rZXkgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiCisJCQkiXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5rbGVuID0gMzIgKyA0LAotCQkuaXYgPSB7Ci0JCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQl9LAotCQkuaW5wdXQgPSB7Ci0JCQkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCTB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAotCQkJMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywKLQkJCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCi0JCQkweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAotCQkJMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKLQkJCTB4NDAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCi0JCQkweDQ4LCAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmLAotCQkJMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywKLQkJCTB4NTgsIDB4NTksIDB4NWEsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsCi0JCQkweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAotCQkJMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwKLQkJCTB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCi0JCQkweDc4LCAweDc5LCAweDdhLCAweDdiLCAweDdjLCAweDdkLCAweDdlLCAweDdmLAotCQkJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKLQkJCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCi0JCQkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAotCQkJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKLQkJCTB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCi0JCQkweGE4LCAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLAotCQkJMHhiMCwgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywKLQkJCTB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCi0JCQkweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAotCQkJMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKLQkJCTB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCi0JCQkweGQ4LCAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLAotCQkJMHhlMCwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywKLQkJCTB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCi0JCQkweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAotCQkJMHhmOCwgMHhmOSwgMHhmYSwgMHhmYiwgMHhmYywgMHhmZCwgMHhmZSwgMHhmZiwKLQkJCTB4MDAsIDB4MDMsIDB4MDYsIDB4MDksIDB4MGMsIDB4MGYsIDB4MTIsIDB4MTUsCi0JCQkweDE4LCAweDFiLCAweDFlLCAweDIxLCAweDI0LCAweDI3LCAweDJhLCAweDJkLAotCQkJMHgzMCwgMHgzMywgMHgzNiwgMHgzOSwgMHgzYywgMHgzZiwgMHg0MiwgMHg0NSwKLQkJCTB4NDgsIDB4NGIsIDB4NGUsIDB4NTEsIDB4NTQsIDB4NTcsIDB4NWEsIDB4NWQsCi0JCQkweDYwLCAweDYzLCAweDY2LCAweDY5LCAweDZjLCAweDZmLCAweDcyLCAweDc1LAotCQkJMHg3OCwgMHg3YiwgMHg3ZSwgMHg4MSwgMHg4NCwgMHg4NywgMHg4YSwgMHg4ZCwKLQkJCTB4OTAsIDB4OTMsIDB4OTYsIDB4OTksIDB4OWMsIDB4OWYsIDB4YTIsIDB4YTUsCi0JCQkweGE4LCAweGFiLCAweGFlLCAweGIxLCAweGI0LCAweGI3LCAweGJhLCAweGJkLAotCQkJMHhjMCwgMHhjMywgMHhjNiwgMHhjOSwgMHhjYywgMHhjZiwgMHhkMiwgMHhkNSwKLQkJCTB4ZDgsIDB4ZGIsIDB4ZGUsIDB4ZTEsIDB4ZTQsIDB4ZTcsIDB4ZWEsIDB4ZWQsCi0JCQkweGYwLCAweGYzLCAweGY2LCAweGY5LCAweGZjLCAweGZmLCAweDAyLCAweDA1LAotCQkJMHgwOCwgMHgwYiwgMHgwZSwgMHgxMSwgMHgxNCwgMHgxNywgMHgxYSwgMHgxZCwKLQkJCTB4MjAsIDB4MjMsIDB4MjYsIDB4MjksIDB4MmMsIDB4MmYsIDB4MzIsIDB4MzUsCi0JCQkweDM4LCAweDNiLCAweDNlLCAweDQxLCAweDQ0LCAweDQ3LCAweDRhLCAweDRkLAotCQkJMHg1MCwgMHg1MywgMHg1NiwgMHg1OSwgMHg1YywgMHg1ZiwgMHg2MiwgMHg2NSwKLQkJCTB4NjgsIDB4NmIsIDB4NmUsIDB4NzEsIDB4NzQsIDB4NzcsIDB4N2EsIDB4N2QsCi0JCQkweDgwLCAweDgzLCAweDg2LCAweDg5LCAweDhjLCAweDhmLCAweDkyLCAweDk1LAotCQkJMHg5OCwgMHg5YiwgMHg5ZSwgMHhhMSwgMHhhNCwgMHhhNywgMHhhYSwgMHhhZCwKLQkJCTB4YjAsIDB4YjMsIDB4YjYsIDB4YjksIDB4YmMsIDB4YmYsIDB4YzIsIDB4YzUsCi0JCQkweGM4LCAweGNiLCAweGNlLCAweGQxLCAweGQ0LCAweGQ3LCAweGRhLCAweGRkLAotCQkJMHhlMCwgMHhlMywgMHhlNiwgMHhlOSwgMHhlYywgMHhlZiwgMHhmMiwgMHhmNSwKLQkJCTB4ZjgsIDB4ZmIsIDB4ZmUsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MGEsIDB4MGQsCi0JCQkweDEwLCAweDEzLCAweDE2LCAweDE5LCAweDFjLCAweDFmLCAweDIyLCAweDI1LAotCQkJMHgyOCwgMHgyYiwgMHgyZSwgMHgzMSwgMHgzNCwgMHgzNywgMHgzYSwgMHgzZCwKLQkJCTB4NDAsIDB4NDMsIDB4NDYsIDB4NDksIDB4NGMsIDB4NGYsIDB4NTIsIDB4NTUsCi0JCQkweDU4LCAweDViLCAweDVlLCAweDYxLCAweDY0LCAweDY3LCAweDZhLCAweDZkLAotCQkJMHg3MCwgMHg3MywgMHg3NiwgMHg3OSwgMHg3YywgMHg3ZiwgMHg4MiwgMHg4NSwKLQkJCTB4ODgsIDB4OGIsIDB4OGUsIDB4OTEsIDB4OTQsIDB4OTcsIDB4OWEsIDB4OWQsCi0JCQkweGEwLCAweGEzLCAweGE2LCAweGE5LCAweGFjLCAweGFmLCAweGIyLCAweGI1LAotCQkJMHhiOCwgMHhiYiwgMHhiZSwgMHhjMSwgMHhjNCwgMHhjNywgMHhjYSwgMHhjZCwKLQkJCTB4ZDAsIDB4ZDMsIDB4ZDYsIDB4ZDksIDB4ZGMsIDB4ZGYsIDB4ZTIsIDB4ZTUsCi0JCQkweGU4LCAweGViLCAweGVlLCAweGYxLCAweGY0LCAweGY3LCAweGZhLCAweGZkLAotCQkJMHgwMCwgMHgwNSwgMHgwYSwgMHgwZiwgMHgxNCwgMHgxOSwgMHgxZSwgMHgyMywKLQkJCTB4MjgsIDB4MmQsIDB4MzIsIDB4MzcsIDB4M2MsIDB4NDEsIDB4NDYsIDB4NGIsCi0JCQkweDUwLCAweDU1LCAweDVhLCAweDVmLCAweDY0LCAweDY5LCAweDZlLCAweDczLAotCQkJMHg3OCwgMHg3ZCwgMHg4MiwgMHg4NywgMHg4YywgMHg5MSwgMHg5NiwgMHg5YiwKLQkJCTB4YTAsIDB4YTUsIDB4YWEsIDB4YWYsIDB4YjQsIDB4YjksIDB4YmUsIDB4YzMsCi0JCQkweGM4LCAweGNkLCAweGQyLCAweGQ3LCAweGRjLCAweGUxLCAweGU2LCAweGViLAotCQkJMHhmMCwgMHhmNSwgMHhmYSwgMHhmZiwgMHgwNCwgMHgwOSwgMHgwZSwgMHgxMywKLQkJCTB4MTgsIDB4MWQsIDB4MjIsIDB4MjcsIDB4MmMsIDB4MzEsIDB4MzYsIDB4M2IsCi0JCQkweDQwLCAweDQ1LCAweDRhLCAweDRmLCAweDU0LCAweDU5LCAweDVlLCAweDYzLAotCQkJMHg2OCwgMHg2ZCwgMHg3MiwgMHg3NywgMHg3YywgMHg4MSwgMHg4NiwgMHg4YiwKLQkJCTB4OTAsIDB4OTUsIDB4OWEsIDB4OWYsIDB4YTQsIDB4YTksIDB4YWUsIDB4YjMsCi0JCQkweGI4LCAweGJkLCAweGMyLCAweGM3LCAweGNjLCAweGQxLCAweGQ2LCAweGRiLAotCQkJMHhlMCwgMHhlNSwgMHhlYSwgMHhlZiwgMHhmNCwgMHhmOSwgMHhmZSwgMHgwMywKLQkJCTB4MDgsIDB4MGQsIDB4MTIsIDB4MTcsIDB4MWMsIDB4MjEsIDB4MjYsIDB4MmIsCi0JCQkweDMwLCAweDM1LCAweDNhLCAweDNmLCAweDQ0LCAweDQ5LCAweDRlLCAweDUzLAotCQkJMHg1OCwgMHg1ZCwgMHg2MiwgMHg2NywgMHg2YywgMHg3MSwgMHg3NiwgMHg3YiwKLQkJCTB4ODAsIDB4ODUsIDB4OGEsIDB4OGYsIDB4OTQsIDB4OTksIDB4OWUsIDB4YTMsCi0JCQkweGE4LCAweGFkLCAweGIyLCAweGI3LCAweGJjLCAweGMxLCAweGM2LCAweGNiLAotCQkJMHhkMCwgMHhkNSwgMHhkYSwgMHhkZiwgMHhlNCwgMHhlOSwgMHhlZSwgMHhmMywKLQkJCTB4ZjgsIDB4ZmQsIDB4MDIsIDB4MDcsIDB4MGMsIDB4MTEsIDB4MTYsIDB4MWIsCi0JCQkweDIwLCAweDI1LCAweDJhLCAweDJmLCAweDM0LCAweDM5LCAweDNlLCAweDQzLAotCQkJMHg0OCwgMHg0ZCwgMHg1MiwgMHg1NywgMHg1YywgMHg2MSwgMHg2NiwgMHg2YiwKLQkJCTB4NzAsIDB4NzUsIDB4N2EsIDB4N2YsIDB4ODQsIDB4ODksIDB4OGUsIDB4OTMsCi0JCQkweDk4LCAweDlkLCAweGEyLCAweGE3LCAweGFjLCAweGIxLCAweGI2LCAweGJiLAotCQkJMHhjMCwgMHhjNSwgMHhjYSwgMHhjZiwgMHhkNCwgMHhkOSwgMHhkZSwgMHhlMywKLQkJCTB4ZTgsIDB4ZWQsIDB4ZjIsIDB4ZjcsIDB4ZmMsIDB4MDEsIDB4MDYsIDB4MGIsCi0JCQkweDEwLCAweDE1LCAweDFhLCAweDFmLCAweDI0LCAweDI5LCAweDJlLCAweDMzLAotCQkJMHgzOCwgMHgzZCwgMHg0MiwgMHg0NywgMHg0YywgMHg1MSwgMHg1NiwgMHg1YiwKLQkJCTB4NjAsIDB4NjUsIDB4NmEsIDB4NmYsIDB4NzQsIDB4NzksIDB4N2UsIDB4ODMsCi0JCQkweDg4LCAweDhkLCAweDkyLCAweDk3LCAweDljLCAweGExLCAweGE2LCAweGFiLAotCQkJMHhiMCwgMHhiNSwgMHhiYSwgMHhiZiwgMHhjNCwgMHhjOSwgMHhjZSwgMHhkMywKLQkJCTB4ZDgsIDB4ZGQsIDB4ZTIsIDB4ZTcsIDB4ZWMsIDB4ZjEsIDB4ZjYsIDB4ZmIsCi0JCQkweDAwLCAweDA3LCAweDBlLCAweDE1LCAweDFjLCAweDIzLCAweDJhLCAweDMxLAotCQkJMHgzOCwgMHgzZiwgMHg0NiwgMHg0ZCwgMHg1NCwgMHg1YiwgMHg2MiwgMHg2OSwKLQkJCTB4NzAsIDB4NzcsIDB4N2UsIDB4ODUsIDB4OGMsIDB4OTMsIDB4OWEsIDB4YTEsCi0JCQkweGE4LCAweGFmLCAweGI2LCAweGJkLCAweGM0LCAweGNiLCAweGQyLCAweGQ5LAotCQkJMHhlMCwgMHhlNywgMHhlZSwgMHhmNSwgMHhmYywgMHgwMywgMHgwYSwgMHgxMSwKLQkJCTB4MTgsIDB4MWYsIDB4MjYsIDB4MmQsIDB4MzQsIDB4M2IsIDB4NDIsIDB4NDksCi0JCQkweDUwLCAweDU3LCAweDVlLCAweDY1LCAweDZjLCAweDczLCAweDdhLCAweDgxLAotCQkJMHg4OCwgMHg4ZiwgMHg5NiwgMHg5ZCwgMHhhNCwgMHhhYiwgMHhiMiwgMHhiOSwKLQkJCTB4YzAsIDB4YzcsIDB4Y2UsIDB4ZDUsIDB4ZGMsIDB4ZTMsIDB4ZWEsIDB4ZjEsCi0JCQkweGY4LCAweGZmLCAweDA2LCAweDBkLCAweDE0LCAweDFiLCAweDIyLCAweDI5LAotCQkJMHgzMCwgMHgzNywgMHgzZSwgMHg0NSwgMHg0YywgMHg1MywgMHg1YSwgMHg2MSwKLQkJCTB4NjgsIDB4NmYsIDB4NzYsIDB4N2QsIDB4ODQsIDB4OGIsIDB4OTIsIDB4OTksCi0JCQkweGEwLCAweGE3LCAweGFlLCAweGI1LCAweGJjLCAweGMzLCAweGNhLCAweGQxLAotCQkJMHhkOCwgMHhkZiwgMHhlNiwgMHhlZCwgMHhmNCwgMHhmYiwgMHgwMiwgMHgwOSwKLQkJCTB4MTAsIDB4MTcsIDB4MWUsIDB4MjUsIDB4MmMsIDB4MzMsIDB4M2EsIDB4NDEsCi0JCQkweDQ4LCAweDRmLCAweDU2LCAweDVkLCAweDY0LCAweDZiLCAweDcyLCAweDc5LAotCQkJMHg4MCwgMHg4NywgMHg4ZSwgMHg5NSwgMHg5YywgMHhhMywgMHhhYSwgMHhiMSwKLQkJCTB4YjgsIDB4YmYsIDB4YzYsIDB4Y2QsIDB4ZDQsIDB4ZGIsIDB4ZTIsIDB4ZTksCi0JCQkweGYwLCAweGY3LCAweGZlLCAweDA1LCAweDBjLCAweDEzLCAweDFhLCAweDIxLAotCQkJMHgyOCwgMHgyZiwgMHgzNiwgMHgzZCwgMHg0NCwgMHg0YiwgMHg1MiwgMHg1OSwKLQkJCTB4NjAsIDB4NjcsIDB4NmUsIDB4NzUsIDB4N2MsIDB4ODMsIDB4OGEsIDB4OTEsCi0JCQkweDk4LCAweDlmLCAweGE2LCAweGFkLCAweGI0LCAweGJiLCAweGMyLCAweGM5LAotCQkJMHhkMCwgMHhkNywgMHhkZSwgMHhlNSwgMHhlYywgMHhmMywgMHhmYSwgMHgwMSwKLQkJCTB4MDgsIDB4MGYsIDB4MTYsIDB4MWQsIDB4MjQsIDB4MmIsIDB4MzIsIDB4MzksCi0JCQkweDQwLCAweDQ3LCAweDRlLCAweDU1LCAweDVjLCAweDYzLCAweDZhLCAweDcxLAotCQkJMHg3OCwgMHg3ZiwgMHg4NiwgMHg4ZCwgMHg5NCwgMHg5YiwgMHhhMiwgMHhhOSwKLQkJCTB4YjAsIDB4YjcsIDB4YmUsIDB4YzUsIDB4Y2MsIDB4ZDMsIDB4ZGEsIDB4ZTEsCi0JCQkweGU4LCAweGVmLCAweGY2LCAweGZkLCAweDA0LCAweDBiLCAweDEyLCAweDE5LAotCQkJMHgyMCwgMHgyNywgMHgyZSwgMHgzNSwgMHgzYywgMHg0MywgMHg0YSwgMHg1MSwKLQkJCTB4NTgsIDB4NWYsIDB4NjYsIDB4NmQsIDB4NzQsIDB4N2IsIDB4ODIsIDB4ODksCi0JCQkweDkwLCAweDk3LCAweDllLCAweGE1LCAweGFjLCAweGIzLCAweGJhLCAweGMxLAotCQkJMHhjOCwgMHhjZiwgMHhkNiwgMHhkZCwgMHhlNCwgMHhlYiwgMHhmMiwgMHhmOSwKLQkJCTB4MDAsIDB4MDksIDB4MTIsIDB4MWIsIDB4MjQsIDB4MmQsIDB4MzYsIDB4M2YsCi0JCQkweDQ4LCAweDUxLCAweDVhLCAweDYzLCAweDZjLCAweDc1LCAweDdlLCAweDg3LAotCQkJMHg5MCwgMHg5OSwgMHhhMiwgMHhhYiwgMHhiNCwgMHhiZCwgMHhjNiwgMHhjZiwKLQkJCTB4ZDgsIDB4ZTEsIDB4ZWEsIDB4ZjMsIDB4ZmMsIDB4MDUsIDB4MGUsIDB4MTcsCi0JCQkweDIwLCAweDI5LCAweDMyLCAweDNiLCAweDQ0LCAweDRkLCAweDU2LCAweDVmLAotCQkJMHg2OCwgMHg3MSwgMHg3YSwgMHg4MywgMHg4YywgMHg5NSwgMHg5ZSwgMHhhNywKLQkJCTB4YjAsIDB4YjksIDB4YzIsIDB4Y2IsIDB4ZDQsIDB4ZGQsIDB4ZTYsIDB4ZWYsCi0JCQkweGY4LCAweDAxLCAweDBhLCAweDEzLCAweDFjLCAweDI1LCAweDJlLCAweDM3LAotCQkJMHg0MCwgMHg0OSwgMHg1MiwgMHg1YiwgMHg2NCwgMHg2ZCwgMHg3NiwgMHg3ZiwKLQkJCTB4ODgsIDB4OTEsIDB4OWEsIDB4YTMsIDB4YWMsIDB4YjUsIDB4YmUsIDB4YzcsCi0JCQkweGQwLCAweGQ5LCAweGUyLCAweGViLCAweGY0LCAweGZkLCAweDA2LCAweDBmLAotCQkJMHgxOCwgMHgyMSwgMHgyYSwgMHgzMywgMHgzYywgMHg0NSwgMHg0ZSwgMHg1NywKLQkJCTB4NjAsIDB4NjksIDB4NzIsIDB4N2IsIDB4ODQsIDB4OGQsIDB4OTYsIDB4OWYsCi0JCQkweGE4LCAweGIxLCAweGJhLCAweGMzLCAweGNjLCAweGQ1LCAweGRlLCAweGU3LAotCQkJMHhmMCwgMHhmOSwgMHgwMiwgMHgwYiwgMHgxNCwgMHgxZCwgMHgyNiwgMHgyZiwKLQkJCTB4MzgsIDB4NDEsIDB4NGEsIDB4NTMsIDB4NWMsIDB4NjUsIDB4NmUsIDB4NzcsCi0JCQkweDgwLCAweDg5LCAweDkyLCAweDliLCAweGE0LCAweGFkLCAweGI2LCAweGJmLAotCQkJMHhjOCwgMHhkMSwgMHhkYSwgMHhlMywgMHhlYywgMHhmNSwgMHhmZSwgMHgwNywKLQkJCTB4MTAsIDB4MTksIDB4MjIsIDB4MmIsIDB4MzQsIDB4M2QsIDB4NDYsIDB4NGYsCi0JCQkweDU4LCAweDYxLCAweDZhLCAweDczLCAweDdjLCAweDg1LCAweDhlLCAweDk3LAotCQkJMHhhMCwgMHhhOSwgMHhiMiwgMHhiYiwgMHhjNCwgMHhjZCwgMHhkNiwgMHhkZiwKLQkJCTB4ZTgsIDB4ZjEsIDB4ZmEsIDB4MDMsIDB4MGMsIDB4MTUsIDB4MWUsIDB4MjcsCi0JCQkweDMwLCAweDM5LCAweDQyLCAweDRiLCAweDU0LCAweDVkLCAweDY2LCAweDZmLAotCQkJMHg3OCwgMHg4MSwgMHg4YSwgMHg5MywgMHg5YywgMHhhNSwgMHhhZSwgMHhiNywKLQkJCTB4YzAsIDB4YzksIDB4ZDIsIDB4ZGIsIDB4ZTQsIDB4ZWQsIDB4ZjYsIDB4ZmYsCi0JCQkweDA4LCAweDExLCAweDFhLCAweDIzLCAweDJjLCAweDM1LCAweDNlLCAweDQ3LAotCQkJMHg1MCwgMHg1OSwgMHg2MiwgMHg2YiwgMHg3NCwgMHg3ZCwgMHg4NiwgMHg4ZiwKLQkJCTB4OTgsIDB4YTEsIDB4YWEsIDB4YjMsIDB4YmMsIDB4YzUsIDB4Y2UsIDB4ZDcsCi0JCQkweGUwLCAweGU5LCAweGYyLCAweGZiLCAweDA0LCAweDBkLCAweDE2LCAweDFmLAotCQkJMHgyOCwgMHgzMSwgMHgzYSwgMHg0MywgMHg0YywgMHg1NSwgMHg1ZSwgMHg2NywKLQkJCTB4NzAsIDB4NzksIDB4ODIsIDB4OGIsIDB4OTQsIDB4OWQsIDB4YTYsIDB4YWYsCi0JCQkweGI4LCAweGMxLCAweGNhLCAweGQzLCAweGRjLCAweGU1LCAweGVlLCAweGY3LAotCQkJMHgwMCwgMHgwYiwgMHgxNiwgMHgyMSwgMHgyYywgMHgzNywgMHg0MiwgMHg0ZCwKLQkJCTB4NTgsIDB4NjMsIDB4NmUsIDB4NzksIDB4ODQsIDB4OGYsIDB4OWEsIDB4YTUsCi0JCQkweGIwLCAweGJiLCAweGM2LCAweGQxLCAweGRjLCAweGU3LCAweGYyLCAweGZkLAotCQkJMHgwOCwgMHgxMywgMHgxZSwgMHgyOSwgMHgzNCwgMHgzZiwgMHg0YSwgMHg1NSwKLQkJCTB4NjAsIDB4NmIsIDB4NzYsIDB4ODEsIDB4OGMsIDB4OTcsIDB4YTIsIDB4YWQsCi0JCQkweGI4LCAweGMzLCAweGNlLCAweGQ5LCAweGU0LCAweGVmLCAweGZhLCAweDA1LAotCQkJMHgxMCwgMHgxYiwgMHgyNiwgMHgzMSwgMHgzYywgMHg0NywgMHg1MiwgMHg1ZCwKLQkJCTB4NjgsIDB4NzMsIDB4N2UsIDB4ODksIDB4OTQsIDB4OWYsIDB4YWEsIDB4YjUsCi0JCQkweGMwLCAweGNiLCAweGQ2LCAweGUxLCAweGVjLCAweGY3LCAweDAyLCAweDBkLAotCQkJMHgxOCwgMHgyMywgMHgyZSwgMHgzOSwgMHg0NCwgMHg0ZiwgMHg1YSwgMHg2NSwKLQkJCTB4NzAsIDB4N2IsIDB4ODYsIDB4OTEsIDB4OWMsIDB4YTcsIDB4YjIsIDB4YmQsCi0JCQkweGM4LCAweGQzLCAweGRlLCAweGU5LCAweGY0LCAweGZmLCAweDBhLCAweDE1LAotCQkJMHgyMCwgMHgyYiwgMHgzNiwgMHg0MSwgMHg0YywgMHg1NywgMHg2MiwgMHg2ZCwKLQkJCTB4NzgsIDB4ODMsIDB4OGUsIDB4OTksIDB4YTQsIDB4YWYsIDB4YmEsIDB4YzUsCi0JCQkweGQwLCAweGRiLCAweGU2LCAweGYxLCAweGZjLCAweDA3LCAweDEyLCAweDFkLAotCQkJMHgyOCwgMHgzMywgMHgzZSwgMHg0OSwgMHg1NCwgMHg1ZiwgMHg2YSwgMHg3NSwKLQkJCTB4ODAsIDB4OGIsIDB4OTYsIDB4YTEsIDB4YWMsIDB4YjcsIDB4YzIsIDB4Y2QsCi0JCQkweGQ4LCAweGUzLCAweGVlLCAweGY5LCAweDA0LCAweDBmLCAweDFhLCAweDI1LAotCQkJMHgzMCwgMHgzYiwgMHg0NiwgMHg1MSwgMHg1YywgMHg2NywgMHg3MiwgMHg3ZCwKLQkJCTB4ODgsIDB4OTMsIDB4OWUsIDB4YTksIDB4YjQsIDB4YmYsIDB4Y2EsIDB4ZDUsCi0JCQkweGUwLCAweGViLCAweGY2LCAweDAxLCAweDBjLCAweDE3LCAweDIyLCAweDJkLAotCQkJMHgzOCwgMHg0MywgMHg0ZSwgMHg1OSwgMHg2NCwgMHg2ZiwgMHg3YSwgMHg4NSwKLQkJCTB4OTAsIDB4OWIsIDB4YTYsIDB4YjEsIDB4YmMsIDB4YzcsIDB4ZDIsIDB4ZGQsCi0JCQkweGU4LCAweGYzLCAweGZlLCAweDA5LCAweDE0LCAweDFmLCAweDJhLCAweDM1LAotCQkJMHg0MCwgMHg0YiwgMHg1NiwgMHg2MSwgMHg2YywgMHg3NywgMHg4MiwgMHg4ZCwKLQkJCTB4OTgsIDB4YTMsIDB4YWUsIDB4YjksIDB4YzQsIDB4Y2YsIDB4ZGEsIDB4ZTUsCi0JCQkweGYwLCAweGZiLCAweDA2LCAweDExLCAweDFjLCAweDI3LCAweDMyLCAweDNkLAotCQkJMHg0OCwgMHg1MywgMHg1ZSwgMHg2OSwgMHg3NCwgMHg3ZiwgMHg4YSwgMHg5NSwKLQkJCTB4YTAsIDB4YWIsIDB4YjYsIDB4YzEsIDB4Y2MsIDB4ZDcsIDB4ZTIsIDB4ZWQsCi0JCQkweGY4LCAweDAzLCAweDBlLCAweDE5LCAweDI0LCAweDJmLCAweDNhLCAweDQ1LAotCQkJMHg1MCwgMHg1YiwgMHg2NiwgMHg3MSwgMHg3YywgMHg4NywgMHg5MiwgMHg5ZCwKLQkJCTB4YTgsIDB4YjMsIDB4YmUsIDB4YzksIDB4ZDQsIDB4ZGYsIDB4ZWEsIDB4ZjUsCi0JCQkweDAwLCAweDBkLCAweDFhLCAweDI3LCAweDM0LCAweDQxLCAweDRlLCAweDViLAotCQkJMHg2OCwgMHg3NSwgMHg4MiwgMHg4ZiwgMHg5YywgMHhhOSwgMHhiNiwgMHhjMywKLQkJCTB4ZDAsIDB4ZGQsIDB4ZWEsIDB4ZjcsIDB4MDQsIDB4MTEsIDB4MWUsIDB4MmIsCi0JCQkweDM4LCAweDQ1LCAweDUyLCAweDVmLCAweDZjLCAweDc5LCAweDg2LCAweDkzLAotCQkJMHhhMCwgMHhhZCwgMHhiYSwgMHhjNywgMHhkNCwgMHhlMSwgMHhlZSwgMHhmYiwKLQkJCTB4MDgsIDB4MTUsIDB4MjIsIDB4MmYsIDB4M2MsIDB4NDksIDB4NTYsIDB4NjMsCi0JCQkweDcwLCAweDdkLCAweDhhLCAweDk3LCAweGE0LCAweGIxLCAweGJlLCAweGNiLAotCQkJMHhkOCwgMHhlNSwgMHhmMiwgMHhmZiwgMHgwYywgMHgxOSwgMHgyNiwgMHgzMywKLQkJCTB4NDAsIDB4NGQsIDB4NWEsIDB4NjcsIDB4NzQsIDB4ODEsIDB4OGUsIDB4OWIsCi0JCQkweGE4LCAweGI1LCAweGMyLCAweGNmLCAweGRjLCAweGU5LCAweGY2LCAweDAzLAotCQkJMHgxMCwgMHgxZCwgMHgyYSwgMHgzNywgMHg0NCwgMHg1MSwgMHg1ZSwgMHg2YiwKLQkJCTB4NzgsIDB4ODUsIDB4OTIsIDB4OWYsIDB4YWMsIDB4YjksIDB4YzYsIDB4ZDMsCi0JCQkweGUwLCAweGVkLCAweGZhLCAweDA3LCAweDE0LCAweDIxLCAweDJlLCAweDNiLAotCQkJMHg0OCwgMHg1NSwgMHg2MiwgMHg2ZiwgMHg3YywgMHg4OSwgMHg5NiwgMHhhMywKLQkJCTB4YjAsIDB4YmQsIDB4Y2EsIDB4ZDcsIDB4ZTQsIDB4ZjEsIDB4ZmUsIDB4MGIsCi0JCQkweDE4LCAweDI1LCAweDMyLCAweDNmLCAweDRjLCAweDU5LCAweDY2LCAweDczLAotCQkJMHg4MCwgMHg4ZCwgMHg5YSwgMHhhNywgMHhiNCwgMHhjMSwgMHhjZSwgMHhkYiwKLQkJCTB4ZTgsIDB4ZjUsIDB4MDIsIDB4MGYsIDB4MWMsIDB4MjksIDB4MzYsIDB4NDMsCi0JCQkweDUwLCAweDVkLCAweDZhLCAweDc3LCAweDg0LCAweDkxLCAweDllLCAweGFiLAotCQkJMHhiOCwgMHhjNSwgMHhkMiwgMHhkZiwgMHhlYywgMHhmOSwgMHgwNiwgMHgxMywKLQkJCTB4MjAsIDB4MmQsIDB4M2EsIDB4NDcsIDB4NTQsIDB4NjEsIDB4NmUsIDB4N2IsCi0JCQkweDg4LCAweDk1LCAweGEyLCAweGFmLCAweGJjLCAweGM5LCAweGQ2LCAweGUzLAotCQkJMHhmMCwgMHhmZCwgMHgwYSwgMHgxNywgMHgyNCwgMHgzMSwgMHgzZSwgMHg0YiwKLQkJCTB4NTgsIDB4NjUsIDB4NzIsIDB4N2YsIDB4OGMsIDB4OTksIDB4YTYsIDB4YjMsCi0JCQkweGMwLCAweGNkLCAweGRhLCAweGU3LCAweGY0LCAweDAxLCAweDBlLCAweDFiLAotCQkJMHgyOCwgMHgzNSwgMHg0MiwgMHg0ZiwgMHg1YywgMHg2OSwgMHg3NiwgMHg4MywKLQkJCTB4OTAsIDB4OWQsIDB4YWEsIDB4YjcsIDB4YzQsIDB4ZDEsIDB4ZGUsIDB4ZWIsCi0JCQkweGY4LCAweDA1LCAweDEyLCAweDFmLCAweDJjLCAweDM5LCAweDQ2LCAweDUzLAotCQkJMHg2MCwgMHg2ZCwgMHg3YSwgMHg4NywgMHg5NCwgMHhhMSwgMHhhZSwgMHhiYiwKLQkJCTB4YzgsIDB4ZDUsIDB4ZTIsIDB4ZWYsIDB4ZmMsIDB4MDksIDB4MTYsIDB4MjMsCi0JCQkweDMwLCAweDNkLCAweDRhLCAweDU3LCAweDY0LCAweDcxLCAweDdlLCAweDhiLAotCQkJMHg5OCwgMHhhNSwgMHhiMiwgMHhiZiwgMHhjYywgMHhkOSwgMHhlNiwgMHhmMywKLQkJCTB4MDAsIDB4MGYsIDB4MWUsIDB4MmQsIDB4M2MsIDB4NGIsIDB4NWEsIDB4NjksCi0JCQkweDc4LCAweDg3LCAweDk2LCAweGE1LCAweGI0LCAweGMzLCAweGQyLCAweGUxLAotCQkJMHhmMCwgMHhmZiwgMHgwZSwgMHgxZCwgMHgyYywgMHgzYiwgMHg0YSwgMHg1OSwKLQkJCTB4NjgsIDB4NzcsIDB4ODYsIDB4OTUsIDB4YTQsIDB4YjMsIDB4YzIsIDB4ZDEsCi0JCQkweGUwLCAweGVmLCAweGZlLCAweDBkLCAweDFjLCAweDJiLCAweDNhLCAweDQ5LAotCQkJMHg1OCwgMHg2NywgMHg3NiwgMHg4NSwgMHg5NCwgMHhhMywgMHhiMiwgMHhjMSwKLQkJCTB4ZDAsIDB4ZGYsIDB4ZWUsIDB4ZmQsIDB4MGMsIDB4MWIsIDB4MmEsIDB4MzksCi0JCQkweDQ4LCAweDU3LCAweDY2LCAweDc1LCAweDg0LCAweDkzLCAweGEyLCAweGIxLAotCQkJMHhjMCwgMHhjZiwgMHhkZSwgMHhlZCwgMHhmYywgMHgwYiwgMHgxYSwgMHgyOSwKLQkJCTB4MzgsIDB4NDcsIDB4NTYsIDB4NjUsIDB4NzQsIDB4ODMsIDB4OTIsIDB4YTEsCi0JCQkweGIwLCAweGJmLCAweGNlLCAweGRkLCAweGVjLCAweGZiLCAweDBhLCAweDE5LAotCQkJMHgyOCwgMHgzNywgMHg0NiwgMHg1NSwgMHg2NCwgMHg3MywgMHg4MiwgMHg5MSwKLQkJCTB4YTAsIDB4YWYsIDB4YmUsIDB4Y2QsIDB4ZGMsIDB4ZWIsIDB4ZmEsIDB4MDksCi0JCQkweDE4LCAweDI3LCAweDM2LCAweDQ1LCAweDU0LCAweDYzLCAweDcyLCAweDgxLAotCQkJMHg5MCwgMHg5ZiwgMHhhZSwgMHhiZCwgMHhjYywgMHhkYiwgMHhlYSwgMHhmOSwKLQkJCTB4MDgsIDB4MTcsIDB4MjYsIDB4MzUsIDB4NDQsIDB4NTMsIDB4NjIsIDB4NzEsCi0JCQkweDgwLCAweDhmLCAweDllLCAweGFkLCAweGJjLCAweGNiLCAweGRhLCAweGU5LAotCQkJMHhmOCwgMHgwNywgMHgxNiwgMHgyNSwgMHgzNCwgMHg0MywgMHg1MiwgMHg2MSwKLQkJCTB4NzAsIDB4N2YsIDB4OGUsIDB4OWQsIDB4YWMsIDB4YmIsIDB4Y2EsIDB4ZDksCi0JCQkweGU4LCAweGY3LCAweDA2LCAweDE1LCAweDI0LCAweDMzLCAweDQyLCAweDUxLAotCQkJMHg2MCwgMHg2ZiwgMHg3ZSwgMHg4ZCwgMHg5YywgMHhhYiwgMHhiYSwgMHhjOSwKLQkJCTB4ZDgsIDB4ZTcsIDB4ZjYsIDB4MDUsIDB4MTQsIDB4MjMsIDB4MzIsIDB4NDEsCi0JCQkweDUwLCAweDVmLCAweDZlLCAweDdkLCAweDhjLCAweDliLCAweGFhLCAweGI5LAotCQkJMHhjOCwgMHhkNywgMHhlNiwgMHhmNSwgMHgwNCwgMHgxMywgMHgyMiwgMHgzMSwKLQkJCTB4NDAsIDB4NGYsIDB4NWUsIDB4NmQsIDB4N2MsIDB4OGIsIDB4OWEsIDB4YTksCi0JCQkweGI4LCAweGM3LCAweGQ2LCAweGU1LCAweGY0LCAweDAzLCAweDEyLCAweDIxLAotCQkJMHgzMCwgMHgzZiwgMHg0ZSwgMHg1ZCwgMHg2YywgMHg3YiwgMHg4YSwgMHg5OSwKLQkJCTB4YTgsIDB4YjcsIDB4YzYsIDB4ZDUsIDB4ZTQsIDB4ZjMsIDB4MDIsIDB4MTEsCi0JCQkweDIwLCAweDJmLCAweDNlLCAweDRkLCAweDVjLCAweDZiLCAweDdhLCAweDg5LAotCQkJMHg5OCwgMHhhNywgMHhiNiwgMHhjNSwgMHhkNCwgMHhlMywgMHhmMiwgMHgwMSwKLQkJCTB4MTAsIDB4MWYsIDB4MmUsIDB4M2QsIDB4NGMsIDB4NWIsIDB4NmEsIDB4NzksCi0JCQkweDg4LCAweDk3LCAweGE2LCAweGI1LCAweGM0LCAweGQzLCAweGUyLCAweGYxLAotCQkJMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKLQkJCTB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmYsCi0JCQkweDEwLCAweDIxLCAweDMyLCAweDQzLCAweDU0LCAweDY1LCAweDc2LCAweDg3LAotCQkJMHg5OCwgMHhhOSwgMHhiYSwgMHhjYiwgMHhkYywgMHhlZCwgMHhmZSwgMHgwZiwKLQkJCTB4MjAsIDB4MzEsIDB4NDIsIDB4NTMsIDB4NjQsIDB4NzUsIDB4ODYsIDB4OTcsCi0JCQkweGE4LCAweGI5LCAweGNhLCAweGRiLCAweGVjLCAweGZkLCAweDBlLCAweDFmLAotCQkJMHgzMCwgMHg0MSwgMHg1MiwgMHg2MywgMHg3NCwgMHg4NSwgMHg5NiwgMHhhNywKLQkJCTB4YjgsIDB4YzksIDB4ZGEsIDB4ZWIsIDB4ZmMsIDB4MGQsIDB4MWUsIDB4MmYsCi0JCQkweDQwLCAweDUxLCAweDYyLCAweDczLCAweDg0LCAweDk1LCAweGE2LCAweGI3LAotCQkJMHhjOCwgMHhkOSwgMHhlYSwgMHhmYiwgMHgwYywgMHgxZCwgMHgyZSwgMHgzZiwKLQkJCTB4NTAsIDB4NjEsIDB4NzIsIDB4ODMsIDB4OTQsIDB4YTUsIDB4YjYsIDB4YzcsCi0JCQkweGQ4LCAweGU5LCAweGZhLCAweDBiLCAweDFjLCAweDJkLCAweDNlLCAweDRmLAotCQkJMHg2MCwgMHg3MSwgMHg4MiwgMHg5MywgMHhhNCwgMHhiNSwgMHhjNiwgMHhkNywKLQkJCTB4ZTgsIDB4ZjksIDB4MGEsIDB4MWIsIDB4MmMsIDB4M2QsIDB4NGUsIDB4NWYsCi0JCQkweDcwLCAweDgxLCAweDkyLCAweGEzLCAweGI0LCAweGM1LCAweGQ2LCAweGU3LAotCQkJMHhmOCwgMHgwOSwgMHgxYSwgMHgyYiwgMHgzYywgMHg0ZCwgMHg1ZSwgMHg2ZiwKLQkJCTB4ODAsIDB4OTEsIDB4YTIsIDB4YjMsIDB4YzQsIDB4ZDUsIDB4ZTYsIDB4ZjcsCi0JCQkweDA4LCAweDE5LCAweDJhLCAweDNiLCAweDRjLCAweDVkLCAweDZlLCAweDdmLAotCQkJMHg5MCwgMHhhMSwgMHhiMiwgMHhjMywgMHhkNCwgMHhlNSwgMHhmNiwgMHgwNywKLQkJCTB4MTgsIDB4MjksIDB4M2EsIDB4NGIsIDB4NWMsIDB4NmQsIDB4N2UsIDB4OGYsCi0JCQkweGEwLCAweGIxLCAweGMyLCAweGQzLCAweGU0LCAweGY1LCAweDA2LCAweDE3LAotCQkJMHgyOCwgMHgzOSwgMHg0YSwgMHg1YiwgMHg2YywgMHg3ZCwgMHg4ZSwgMHg5ZiwKLQkJCTB4YjAsIDB4YzEsIDB4ZDIsIDB4ZTMsIDB4ZjQsIDB4MDUsIDB4MTYsIDB4MjcsCi0JCQkweDM4LCAweDQ5LCAweDVhLCAweDZiLCAweDdjLCAweDhkLCAweDllLCAweGFmLAotCQkJMHhjMCwgMHhkMSwgMHhlMiwgMHhmMywgMHgwNCwgMHgxNSwgMHgyNiwgMHgzNywKLQkJCTB4NDgsIDB4NTksIDB4NmEsIDB4N2IsIDB4OGMsIDB4OWQsIDB4YWUsIDB4YmYsCi0JCQkweGQwLCAweGUxLCAweGYyLCAweDAzLCAweDE0LCAweDI1LCAweDM2LCAweDQ3LAotCQkJMHg1OCwgMHg2OSwgMHg3YSwgMHg4YiwgMHg5YywgMHhhZCwgMHhiZSwgMHhjZiwKLQkJCTB4ZTAsIDB4ZjEsIDB4MDIsIDB4MTMsIDB4MjQsIDB4MzUsIDB4NDYsIDB4NTcsCi0JCQkweDY4LCAweDc5LCAweDhhLCAweDliLCAweGFjLCAweGJkLCAweGNlLCAweGRmLAotCQkJMHhmMCwgMHgwMSwgMHgxMiwgMHgyMywgMHgzNCwgMHg0NSwgMHg1NiwgMHg2NywKLQkJCTB4NzgsIDB4ODksIDB4OWEsIDB4YWIsIDB4YmMsIDB4Y2QsIDB4ZGUsIDB4ZWYsCi0JCQkweDAwLCAweDEzLCAweDI2LCAweDM5LCAweDRjLCAweDVmLCAweDcyLCAweDg1LAotCQkJMHg5OCwgMHhhYiwgMHhiZSwgMHhkMSwgMHhlNCwgMHhmNywgMHgwYSwgMHgxZCwKLQkJCTB4MzAsIDB4NDMsIDB4NTYsIDB4NjksIDB4N2MsIDB4OGYsIDB4YTIsIDB4YjUsCi0JCQkweGM4LCAweGRiLCAweGVlLCAweDAxLCAweDE0LCAweDI3LCAweDNhLCAweDRkLAotCQkJMHg2MCwgMHg3MywgMHg4NiwgMHg5OSwgMHhhYywgMHhiZiwgMHhkMiwgMHhlNSwKLQkJCTB4ZjgsIDB4MGIsIDB4MWUsIDB4MzEsIDB4NDQsIDB4NTcsIDB4NmEsIDB4N2QsCi0JCQkweDkwLCAweGEzLCAweGI2LCAweGM5LCAweGRjLCAweGVmLCAweDAyLCAweDE1LAotCQkJMHgyOCwgMHgzYiwgMHg0ZSwgMHg2MSwgMHg3NCwgMHg4NywgMHg5YSwgMHhhZCwKLQkJCTB4YzAsIDB4ZDMsIDB4ZTYsIDB4ZjksIDB4MGMsIDB4MWYsIDB4MzIsIDB4NDUsCi0JCQkweDU4LCAweDZiLCAweDdlLCAweDkxLCAweGE0LCAweGI3LCAweGNhLCAweGRkLAotCQkJMHhmMCwgMHgwMywgMHgxNiwgMHgyOSwgMHgzYywgMHg0ZiwgMHg2MiwgMHg3NSwKLQkJCTB4ODgsIDB4OWIsIDB4YWUsIDB4YzEsIDB4ZDQsIDB4ZTcsIDB4ZmEsIDB4MGQsCi0JCQkweDIwLCAweDMzLCAweDQ2LCAweDU5LCAweDZjLCAweDdmLCAweDkyLCAweGE1LAotCQkJMHhiOCwgMHhjYiwgMHhkZSwgMHhmMSwgMHgwNCwgMHgxNywgMHgyYSwgMHgzZCwKLQkJCTB4NTAsIDB4NjMsIDB4NzYsIDB4ODksIDB4OWMsIDB4YWYsIDB4YzIsIDB4ZDUsCi0JCQkweGU4LCAweGZiLCAweDBlLCAweDIxLCAweDM0LCAweDQ3LCAweDVhLCAweDZkLAotCQkJMHg4MCwgMHg5MywgMHhhNiwgMHhiOSwgMHhjYywgMHhkZiwgMHhmMiwgMHgwNSwKLQkJCTB4MTgsIDB4MmIsIDB4M2UsIDB4NTEsIDB4NjQsIDB4NzcsIDB4OGEsIDB4OWQsCi0JCQkweGIwLCAweGMzLCAweGQ2LCAweGU5LCAweGZjLCAweDBmLCAweDIyLCAweDM1LAotCQkJMHg0OCwgMHg1YiwgMHg2ZSwgMHg4MSwgMHg5NCwgMHhhNywgMHhiYSwgMHhjZCwKLQkJCTB4ZTAsIDB4ZjMsIDB4MDYsIDB4MTksIDB4MmMsIDB4M2YsIDB4NTIsIDB4NjUsCi0JCQkweDc4LCAweDhiLCAweDllLCAweGIxLCAweGM0LCAweGQ3LCAweGVhLCAweGZkLAotCQkJMHgxMCwgMHgyMywgMHgzNiwgMHg0OSwgMHg1YywgMHg2ZiwgMHg4MiwgMHg5NSwKLQkJCTB4YTgsIDB4YmIsIDB4Y2UsIDB4ZTEsIDB4ZjQsIDB4MDcsIDB4MWEsIDB4MmQsCi0JCQkweDQwLCAweDUzLCAweDY2LCAweDc5LCAweDhjLCAweDlmLCAweGIyLCAweGM1LAotCQkJMHhkOCwgMHhlYiwgMHhmZSwgMHgxMSwgMHgyNCwgMHgzNywgMHg0YSwgMHg1ZCwKLQkJCTB4NzAsIDB4ODMsIDB4OTYsIDB4YTksIDB4YmMsIDB4Y2YsIDB4ZTIsIDB4ZjUsCi0JCQkweDA4LCAweDFiLCAweDJlLCAweDQxLCAweDU0LCAweDY3LCAweDdhLCAweDhkLAotCQkJMHhhMCwgMHhiMywgMHhjNiwgMHhkOSwgMHhlYywgMHhmZiwgMHgxMiwgMHgyNSwKLQkJCTB4MzgsIDB4NGIsIDB4NWUsIDB4NzEsIDB4ODQsIDB4OTcsIDB4YWEsIDB4YmQsCi0JCQkweGQwLCAweGUzLCAweGY2LCAweDA5LCAweDFjLCAweDJmLCAweDQyLCAweDU1LAotCQkJMHg2OCwgMHg3YiwgMHg4ZSwgMHhhMSwgMHhiNCwgMHhjNywgMHhkYSwgMHhlZCwKLQkJCTB4MDAsIDB4MTUsIDB4MmEsIDB4M2YsIDB4NTQsIDB4NjksIDB4N2UsIDB4OTMsCi0JCQkweGE4LCAweGJkLCAweGQyLCAweGU3LCAweGZjLCAweDExLCAweDI2LCAweDNiLAotCQkJMHg1MCwgMHg2NSwgMHg3YSwgMHg4ZiwgMHhhNCwgMHhiOSwgMHhjZSwgMHhlMywKLQkJCTB4ZjgsIDB4MGQsIDB4MjIsIDB4MzcsIDB4NGMsIDB4NjEsIDB4NzYsIDB4OGIsCi0JCQkweGEwLCAweGI1LCAweGNhLCAweGRmLCAweGY0LCAweDA5LCAweDFlLCAweDMzLAotCQkJMHg0OCwgMHg1ZCwgMHg3MiwgMHg4NywgMHg5YywgMHhiMSwgMHhjNiwgMHhkYiwKLQkJCTB4ZjAsIDB4MDUsIDB4MWEsIDB4MmYsIDB4NDQsIDB4NTksIDB4NmUsIDB4ODMsCi0JCQkweDk4LCAweGFkLCAweGMyLCAweGQ3LCAweGVjLCAweDAxLCAweDE2LCAweDJiLAotCQkJMHg0MCwgMHg1NSwgMHg2YSwgMHg3ZiwgMHg5NCwgMHhhOSwgMHhiZSwgMHhkMywKLQkJCTB4ZTgsIDB4ZmQsIDB4MTIsIDB4MjcsIDB4M2MsIDB4NTEsIDB4NjYsIDB4N2IsCi0JCQkweDkwLCAweGE1LCAweGJhLCAweGNmLCAweGU0LCAweGY5LCAweDBlLCAweDIzLAotCQkJMHgzOCwgMHg0ZCwgMHg2MiwgMHg3NywgMHg4YywgMHhhMSwgMHhiNiwgMHhjYiwKLQkJCTB4ZTAsIDB4ZjUsIDB4MGEsIDB4MWYsIDB4MzQsIDB4NDksIDB4NWUsIDB4NzMsCi0JCQkweDg4LCAweDlkLCAweGIyLCAweGM3LCAweGRjLCAweGYxLCAweDA2LCAweDFiLAotCQkJMHgzMCwgMHg0NSwgMHg1YSwgMHg2ZiwgMHg4NCwgMHg5OSwgMHhhZSwgMHhjMywKLQkJCTB4ZDgsIDB4ZWQsIDB4MDIsIDB4MTcsIDB4MmMsIDB4NDEsIDB4NTYsIDB4NmIsCi0JCQkweDgwLCAweDk1LCAweGFhLCAweGJmLCAweGQ0LCAweGU5LCAweGZlLCAweDEzLAotCQkJMHgyOCwgMHgzZCwgMHg1MiwgMHg2NywgMHg3YywgMHg5MSwgMHhhNiwgMHhiYiwKLQkJCTB4ZDAsIDB4ZTUsIDB4ZmEsIDB4MGYsIDB4MjQsIDB4MzksIDB4NGUsIDB4NjMsCi0JCQkweDc4LCAweDhkLCAweGEyLCAweGI3LCAweGNjLCAweGUxLCAweGY2LCAweDBiLAotCQkJMHgyMCwgMHgzNSwgMHg0YSwgMHg1ZiwgMHg3NCwgMHg4OSwgMHg5ZSwgMHhiMywKLQkJCTB4YzgsIDB4ZGQsIDB4ZjIsIDB4MDcsIDB4MWMsIDB4MzEsIDB4NDYsIDB4NWIsCi0JCQkweDcwLCAweDg1LCAweDlhLCAweGFmLCAweGM0LCAweGQ5LCAweGVlLCAweDAzLAotCQkJMHgxOCwgMHgyZCwgMHg0MiwgMHg1NywgMHg2YywgMHg4MSwgMHg5NiwgMHhhYiwKLQkJCTB4YzAsIDB4ZDUsIDB4ZWEsIDB4ZmYsIDB4MTQsIDB4MjksIDB4M2UsIDB4NTMsCi0JCQkweDY4LCAweDdkLCAweDkyLCAweGE3LCAweGJjLCAweGQxLCAweGU2LCAweGZiLAotCQkJMHgxMCwgMHgyNSwgMHgzYSwgMHg0ZiwgMHg2NCwgMHg3OSwgMHg4ZSwgMHhhMywKLQkJCTB4YjgsIDB4Y2QsIDB4ZTIsIDB4ZjcsIDB4MGMsIDB4MjEsIDB4MzYsIDB4NGIsCi0JCQkweDYwLCAweDc1LCAweDhhLCAweDlmLCAweGI0LCAweGM5LCAweGRlLCAweGYzLAotCQkJMHgwOCwgMHgxZCwgMHgzMiwgMHg0NywgMHg1YywgMHg3MSwgMHg4NiwgMHg5YiwKLQkJCTB4YjAsIDB4YzUsIDB4ZGEsIDB4ZWYsIDB4MDQsIDB4MTksIDB4MmUsIDB4NDMsCi0JCQkweDU4LCAweDZkLCAweDgyLCAweDk3LCAweGFjLCAweGMxLCAweGQ2LCAweGViLAotCQkJMHgwMCwgMHgxNywgMHgyZSwgMHg0NSwgMHg1YywgMHg3MywgMHg4YSwgMHhhMSwKLQkJCTB4YjgsIDB4Y2YsIDB4ZTYsIDB4ZmQsIDB4MTQsIDB4MmIsIDB4NDIsIDB4NTksCi0JCQkweDcwLCAweDg3LCAweDllLCAweGI1LCAweGNjLCAweGUzLCAweGZhLCAweDExLAotCQkJMHgyOCwgMHgzZiwgMHg1NiwgMHg2ZCwgMHg4NCwgMHg5YiwgMHhiMiwgMHhjOSwKLQkJCTB4ZTAsIDB4ZjcsIDB4MGUsIDB4MjUsIDB4M2MsIDB4NTMsIDB4NmEsIDB4ODEsCi0JCQkweDk4LCAweGFmLCAweGM2LCAweGRkLCAweGY0LCAweDBiLCAweDIyLCAweDM5LAotCQkJMHg1MCwgMHg2NywgMHg3ZSwgMHg5NSwgMHhhYywgMHhjMywgMHhkYSwgMHhmMSwKLQkJCTB4MDgsIDB4MWYsIDB4MzYsIDB4NGQsIDB4NjQsIDB4N2IsIDB4OTIsIDB4YTksCi0JCQkweGMwLCAweGQ3LCAweGVlLCAweDA1LCAweDFjLCAweDMzLCAweDRhLCAweDYxLAotCQkJMHg3OCwgMHg4ZiwgMHhhNiwgMHhiZCwgMHhkNCwgMHhlYiwgMHgwMiwgMHgxOSwKLQkJCTB4MzAsIDB4NDcsIDB4NWUsIDB4NzUsIDB4OGMsIDB4YTMsIDB4YmEsIDB4ZDEsCi0JCQkweGU4LCAweGZmLCAweDE2LCAweDJkLCAweDQ0LCAweDViLCAweDcyLCAweDg5LAotCQkJMHhhMCwgMHhiNywgMHhjZSwgMHhlNSwgMHhmYywgMHgxMywgMHgyYSwgMHg0MSwKLQkJCTB4NTgsIDB4NmYsIDB4ODYsIDB4OWQsIDB4YjQsIDB4Y2IsIDB4ZTIsIDB4ZjksCi0JCQkweDEwLCAweDI3LCAweDNlLCAweDU1LCAweDZjLCAweDgzLCAweDlhLCAweGIxLAotCQkJMHhjOCwgMHhkZiwgMHhmNiwgMHgwZCwgMHgyNCwgMHgzYiwgMHg1MiwgMHg2OSwKLQkJCTB4ODAsIDB4OTcsIDB4YWUsIDB4YzUsIDB4ZGMsIDB4ZjMsIDB4MGEsIDB4MjEsCi0JCQkweDM4LCAweDRmLCAweDY2LCAweDdkLCAweDk0LCAweGFiLCAweGMyLCAweGQ5LAotCQkJMHhmMCwgMHgwNywgMHgxZSwgMHgzNSwgMHg0YywgMHg2MywgMHg3YSwgMHg5MSwKLQkJCTB4YTgsIDB4YmYsIDB4ZDYsIDB4ZWQsIDB4MDQsIDB4MWIsIDB4MzIsIDB4NDksCi0JCQkweDYwLCAweDc3LCAweDhlLCAweGE1LCAweGJjLCAweGQzLCAweGVhLCAweDAxLAotCQkJMHgxOCwgMHgyZiwgMHg0NiwgMHg1ZCwgMHg3NCwgMHg4YiwgMHhhMiwgMHhiOSwKLQkJCTB4ZDAsIDB4ZTcsIDB4ZmUsIDB4MTUsIDB4MmMsIDB4NDMsIDB4NWEsIDB4NzEsCi0JCQkweDg4LCAweDlmLCAweGI2LCAweGNkLCAweGU0LCAweGZiLCAweDEyLCAweDI5LAotCQkJMHg0MCwgMHg1NywgMHg2ZSwgMHg4NSwgMHg5YywgMHhiMywgMHhjYSwgMHhlMSwKLQkJCTB4ZjgsIDB4MGYsIDB4MjYsIDB4M2QsIDB4NTQsIDB4NmIsIDB4ODIsIDB4OTksCi0JCQkweGIwLCAweGM3LCAweGRlLCAweGY1LCAweDBjLCAweDIzLCAweDNhLCAweDUxLAotCQkJMHg2OCwgMHg3ZiwgMHg5NiwgMHhhZCwgMHhjNCwgMHhkYiwgMHhmMiwgMHgwOSwKLQkJCTB4MjAsIDB4MzcsIDB4NGUsIDB4NjUsIDB4N2MsIDB4OTMsIDB4YWEsIDB4YzEsCi0JCQkweGQ4LCAweGVmLCAweDA2LCAweDFkLCAweDM0LCAweDRiLCAweDYyLCAweDc5LAotCQkJMHg5MCwgMHhhNywgMHhiZSwgMHhkNSwgMHhlYywgMHgwMywgMHgxYSwgMHgzMSwKLQkJCTB4NDgsIDB4NWYsIDB4NzYsIDB4OGQsIDB4YTQsIDB4YmIsIDB4ZDIsIDB4ZTksCi0JCQkweDAwLCAweDE5LCAweDMyLCAweDRiLCAweDY0LCAweDdkLCAweDk2LCAweGFmLAotCQkJMHhjOCwgMHhlMSwgMHhmYSwgMHgxMywgMHgyYywgMHg0NSwgMHg1ZSwgMHg3NywKLQkJCTB4OTAsIDB4YTksIDB4YzIsIDB4ZGIsIDB4ZjQsIDB4MGQsIDB4MjYsIDB4M2YsCi0JCQkweDU4LCAweDcxLCAweDhhLCAweGEzLCAweGJjLCAweGQ1LCAweGVlLCAweDA3LAotCQkJMHgyMCwgMHgzOSwgMHg1MiwgMHg2YiwgMHg4NCwgMHg5ZCwgMHhiNiwgMHhjZiwKLQkJCTB4ZTgsIDB4MDEsIDB4MWEsIDB4MzMsIDB4NGMsIDB4NjUsIDB4N2UsIDB4OTcsCi0JCQkweGIwLCAweGM5LCAweGUyLCAweGZiLCAweDE0LCAweDJkLCAweDQ2LCAweDVmLAotCQkJMHg3OCwgMHg5MSwgMHhhYSwgMHhjMywgMHhkYywgMHhmNSwgMHgwZSwgMHgyNywKLQkJCTB4NDAsIDB4NTksIDB4NzIsIDB4OGIsIDB4YTQsIDB4YmQsIDB4ZDYsIDB4ZWYsCi0JCQkweDA4LCAweDIxLCAweDNhLCAweDUzLCAweDZjLCAweDg1LCAweDllLCAweGI3LAotCQkJMHhkMCwgMHhlOSwgMHgwMiwgMHgxYiwgMHgzNCwgMHg0ZCwgMHg2NiwgMHg3ZiwKLQkJCTB4OTgsIDB4YjEsIDB4Y2EsIDB4ZTMsIDB4ZmMsIDB4MTUsIDB4MmUsIDB4NDcsCi0JCQkweDYwLCAweDc5LCAweDkyLCAweGFiLCAweGM0LCAweGRkLCAweGY2LCAweDBmLAotCQkJMHgyOCwgMHg0MSwgMHg1YSwgMHg3MywgMHg4YywgMHhhNSwgMHhiZSwgMHhkNywKLQkJCTB4ZjAsIDB4MDksIDB4MjIsIDB4M2IsIDB4NTQsIDB4NmQsIDB4ODYsIDB4OWYsCi0JCQkweGI4LCAweGQxLCAweGVhLCAweDAzLCAweDFjLCAweDM1LCAweDRlLCAweDY3LAotCQkJMHg4MCwgMHg5OSwgMHhiMiwgMHhjYiwgMHhlNCwgMHhmZCwgMHgxNiwgMHgyZiwKLQkJCTB4NDgsIDB4NjEsIDB4N2EsIDB4OTMsIDB4YWMsIDB4YzUsIDB4ZGUsIDB4ZjcsCi0JCQkweDEwLCAweDI5LCAweDQyLCAweDViLCAweDc0LCAweDhkLCAweGE2LCAweGJmLAotCQkJMHhkOCwgMHhmMSwgMHgwYSwgMHgyMywgMHgzYywgMHg1NSwgMHg2ZSwgMHg4NywKLQkJCTB4YTAsIDB4YjksIDB4ZDIsIDB4ZWIsIDB4MDQsIDB4MWQsIDB4MzYsIDB4NGYsCi0JCQkweDY4LCAweDgxLCAweDlhLCAweGIzLCAweGNjLCAweGU1LCAweGZlLCAweDE3LAotCQkJMHgzMCwgMHg0OSwgMHg2MiwgMHg3YiwgMHg5NCwgMHhhZCwgMHhjNiwgMHhkZiwKLQkJCTB4ZjgsIDB4MTEsIDB4MmEsIDB4NDMsIDB4NWMsIDB4NzUsIDB4OGUsIDB4YTcsCi0JCQkweGMwLCAweGQ5LCAweGYyLCAweDBiLCAweDI0LCAweDNkLCAweDU2LCAweDZmLAotCQkJMHg4OCwgMHhhMSwgMHhiYSwgMHhkMywgMHhlYywgMHgwNSwgMHgxZSwgMHgzNywKLQkJCTB4NTAsIDB4NjksIDB4ODIsIDB4OWIsIDB4YjQsIDB4Y2QsIDB4ZTYsIDB4ZmYsCi0JCQkweDE4LCAweDMxLCAweDRhLCAweDYzLCAweDdjLCAweDk1LCAweGFlLCAweGM3LAotCQkJMHhlMCwgMHhmOSwgMHgxMiwgMHgyYiwgMHg0NCwgMHg1ZCwgMHg3NiwgMHg4ZiwKLQkJCTB4YTgsIDB4YzEsIDB4ZGEsIDB4ZjMsIDB4MGMsIDB4MjUsIDB4M2UsIDB4NTcsCi0JCQkweDcwLCAweDg5LCAweGEyLCAweGJiLCAweGQ0LCAweGVkLCAweDA2LCAweDFmLAotCQkJMHgzOCwgMHg1MSwgMHg2YSwgMHg4MywgMHg5YywgMHhiNSwgMHhjZSwgMHhlNywKLQkJCTB4MDAsIDB4MWIsIDB4MzYsIDB4NTEsIDB4NmMsIDB4ODcsIDB4YTIsIDB4YmQsCi0JCQkweGQ4LCAweGYzLCAweDBlLCAweDI5LCAweDQ0LCAweDVmLCAweDdhLCAweDk1LAotCQkJMHhiMCwgMHhjYiwgMHhlNiwgMHgwMSwgMHgxYywgMHgzNywgMHg1MiwgMHg2ZCwKLQkJCTB4ODgsIDB4YTMsIDB4YmUsIDB4ZDksIDB4ZjQsIDB4MGYsIDB4MmEsIDB4NDUsCi0JCQkweDYwLCAweDdiLCAweDk2LCAweGIxLCAweGNjLCAweGU3LCAweDAyLCAweDFkLAotCQkJMHgzOCwgMHg1MywgMHg2ZSwgMHg4OSwgMHhhNCwgMHhiZiwgMHhkYSwgMHhmNSwKLQkJCTB4MTAsIDB4MmIsIDB4NDYsIDB4NjEsIDB4N2MsIDB4OTcsIDB4YjIsIDB4Y2QsCi0JCQkweGU4LCAweDAzLCAweDFlLCAweDM5LCAweDU0LCAweDZmLCAweDhhLCAweGE1LAotCQkJMHhjMCwgMHhkYiwgMHhmNiwgMHgxMSwgMHgyYywgMHg0NywgMHg2MiwgMHg3ZCwKLQkJCTB4OTgsIDB4YjMsIDB4Y2UsIDB4ZTksIDB4MDQsIDB4MWYsIDB4M2EsIDB4NTUsCi0JCQkweDcwLCAweDhiLCAweGE2LCAweGMxLCAweGRjLCAweGY3LCAweDEyLCAweDJkLAotCQkJMHg0OCwgMHg2MywgMHg3ZSwgMHg5OSwgMHhiNCwgMHhjZiwgMHhlYSwgMHgwNSwKLQkJCTB4MjAsIDB4M2IsIDB4NTYsIDB4NzEsIDB4OGMsIDB4YTcsIDB4YzIsIDB4ZGQsCi0JCQkweGY4LCAweDEzLCAweDJlLCAweDQ5LCAweDY0LCAweDdmLCAweDlhLCAweGI1LAotCQkJMHhkMCwgMHhlYiwgMHgwNiwgMHgyMSwgMHgzYywgMHg1NywgMHg3MiwgMHg4ZCwKLQkJCTB4YTgsIDB4YzMsIDB4ZGUsIDB4ZjksIDB4MTQsIDB4MmYsIDB4NGEsIDB4NjUsCi0JCQkweDgwLCAweDliLCAweGI2LCAweGQxLCAweGVjLCAweDA3LCAweDIyLCAweDNkLAotCQkJMHg1OCwgMHg3MywgMHg4ZSwgMHhhOSwgMHhjNCwgMHhkZiwgMHhmYSwgMHgxNSwKLQkJCTB4MzAsIDB4NGIsIDB4NjYsIDB4ODEsIDB4OWMsIDB4YjcsIDB4ZDIsIDB4ZWQsCi0JCQkweDA4LCAweDIzLCAweDNlLCAweDU5LCAweDc0LCAweDhmLCAweGFhLCAweGM1LAotCQkJMHhlMCwgMHhmYiwgMHgxNiwgMHgzMSwgMHg0YywgMHg2NywgMHg4MiwgMHg5ZCwKLQkJCTB4YjgsIDB4ZDMsIDB4ZWUsIDB4MDksIDB4MjQsIDB4M2YsIDB4NWEsIDB4NzUsCi0JCQkweDkwLCAweGFiLCAweGM2LCAweGUxLCAweGZjLCAweDE3LCAweDMyLCAweDRkLAotCQkJMHg2OCwgMHg4MywgMHg5ZSwgMHhiOSwgMHhkNCwgMHhlZiwgMHgwYSwgMHgyNSwKLQkJCTB4NDAsIDB4NWIsIDB4NzYsIDB4OTEsIDB4YWMsIDB4YzcsIDB4ZTIsIDB4ZmQsCi0JCQkweDE4LCAweDMzLCAweDRlLCAweDY5LCAweDg0LCAweDlmLCAweGJhLCAweGQ1LAotCQkJMHhmMCwgMHgwYiwgMHgyNiwgMHg0MSwgMHg1YywgMHg3NywgMHg5MiwgMHhhZCwKLQkJCTB4YzgsIDB4ZTMsIDB4ZmUsIDB4MTksIDB4MzQsIDB4NGYsIDB4NmEsIDB4ODUsCi0JCQkweGEwLCAweGJiLCAweGQ2LCAweGYxLCAweDBjLCAweDI3LCAweDQyLCAweDVkLAotCQkJMHg3OCwgMHg5MywgMHhhZSwgMHhjOSwgMHhlNCwgMHhmZiwgMHgxYSwgMHgzNSwKLQkJCTB4NTAsIDB4NmIsIDB4ODYsIDB4YTEsIDB4YmMsIDB4ZDcsIDB4ZjIsIDB4MGQsCi0JCQkweDI4LCAweDQzLCAweDVlLCAweDc5LCAweDk0LCAweGFmLCAweGNhLCAweGU1LAotCQkJMHgwMCwgMHgxZCwgMHgzYSwgMHg1NywgMHg3NCwgMHg5MSwgMHhhZSwgMHhjYiwKLQkJCTB4ZTgsIDB4MDUsIDB4MjIsIDB4M2YsIDB4NWMsIDB4NzksIDB4OTYsIDB4YjMsCi0JCQkweGQwLCAweGVkLCAweDBhLCAweDI3LCAweDQ0LCAweDYxLCAweDdlLCAweDliLAotCQkJMHhiOCwgMHhkNSwgMHhmMiwgMHgwZiwgMHgyYywgMHg0OSwgMHg2NiwgMHg4MywKLQkJCTB4YTAsIDB4YmQsIDB4ZGEsIDB4ZjcsIDB4MTQsIDB4MzEsIDB4NGUsIDB4NmIsCi0JCQkweDg4LCAweGE1LCAweGMyLCAweGRmLCAweGZjLCAweDE5LCAweDM2LCAweDUzLAotCQkJMHg3MCwgMHg4ZCwgMHhhYSwgMHhjNywgMHhlNCwgMHgwMSwgMHgxZSwgMHgzYiwKLQkJCTB4NTgsIDB4NzUsIDB4OTIsIDB4YWYsIDB4Y2MsIDB4ZTksIDB4MDYsIDB4MjMsCi0JCQkweDQwLCAweDVkLCAweDdhLCAweDk3LCAweGI0LCAweGQxLCAweGVlLCAweDBiLAotCQkJMHgyOCwgMHg0NSwgMHg2MiwgMHg3ZiwgMHg5YywgMHhiOSwgMHhkNiwgMHhmMywKLQkJCTB4MTAsIDB4MmQsIDB4NGEsIDB4NjcsIDB4ODQsIDB4YTEsIDB4YmUsIDB4ZGIsCi0JCQkweGY4LCAweDE1LCAweDMyLCAweDRmLCAweDZjLCAweDg5LCAweGE2LCAweGMzLAotCQkJMHhlMCwgMHhmZCwgMHgxYSwgMHgzNywgMHg1NCwgMHg3MSwgMHg4ZSwgMHhhYiwKLQkJCTB4YzgsIDB4ZTUsIDB4MDIsIDB4MWYsIDB4M2MsIDB4NTksIDB4NzYsIDB4OTMsCi0JCQkweGIwLCAweGNkLCAweGVhLCAweDA3LCAweDI0LCAweDQxLCAweDVlLCAweDdiLAotCQkJMHg5OCwgMHhiNSwgMHhkMiwgMHhlZiwgMHgwYywgMHgyOSwgMHg0NiwgMHg2MywKLQkJCTB4ODAsIDB4OWQsIDB4YmEsIDB4ZDcsIDB4ZjQsIDB4MTEsIDB4MmUsIDB4NGIsCi0JCQkweDY4LCAweDg1LCAweGEyLCAweGJmLCAweGRjLCAweGY5LCAweDE2LCAweDMzLAotCQkJMHg1MCwgMHg2ZCwgMHg4YSwgMHhhNywgMHhjNCwgMHhlMSwgMHhmZSwgMHgxYiwKLQkJCTB4MzgsIDB4NTUsIDB4NzIsIDB4OGYsIDB4YWMsIDB4YzksIDB4ZTYsIDB4MDMsCi0JCQkweDIwLCAweDNkLCAweDVhLCAweDc3LCAweDk0LCAweGIxLCAweGNlLCAweGViLAotCQkJMHgwOCwgMHgyNSwgMHg0MiwgMHg1ZiwgMHg3YywgMHg5OSwgMHhiNiwgMHhkMywKLQkJCTB4ZjAsIDB4MGQsIDB4MmEsIDB4NDcsIDB4NjQsIDB4ODEsIDB4OWUsIDB4YmIsCi0JCQkweGQ4LCAweGY1LCAweDEyLCAweDJmLCAweDRjLCAweDY5LCAweDg2LCAweGEzLAotCQkJMHhjMCwgMHhkZCwgMHhmYSwgMHgxNywgMHgzNCwgMHg1MSwgMHg2ZSwgMHg4YiwKLQkJCTB4YTgsIDB4YzUsIDB4ZTIsIDB4ZmYsIDB4MWMsIDB4MzksIDB4NTYsIDB4NzMsCi0JCQkweDkwLCAweGFkLCAweGNhLCAweGU3LCAweDA0LCAweDIxLCAweDNlLCAweDViLAotCQkJMHg3OCwgMHg5NSwgMHhiMiwgMHhjZiwgMHhlYywgMHgwOSwgMHgyNiwgMHg0MywKLQkJCTB4NjAsIDB4N2QsIDB4OWEsIDB4YjcsIDB4ZDQsIDB4ZjEsIDB4MGUsIDB4MmIsCi0JCQkweDQ4LCAweDY1LCAweDgyLCAweDlmLCAweGJjLCAweGQ5LCAweGY2LCAweDEzLAotCQkJMHgzMCwgMHg0ZCwgMHg2YSwgMHg4NywgMHhhNCwgMHhjMSwgMHhkZSwgMHhmYiwKLQkJCTB4MTgsIDB4MzUsIDB4NTIsIDB4NmYsIDB4OGMsIDB4YTksIDB4YzYsIDB4ZTMsCi0JCQkweDAwLCAweDFmLCAweDNlLCAweDVkLCAweDdjLCAweDliLCAweGJhLCAweGQ5LAotCQkJMHhmOCwgMHgxNywgMHgzNiwgMHg1NSwgMHg3NCwgMHg5MywgMHhiMiwgMHhkMSwKLQkJCTB4ZjAsIDB4MGYsIDB4MmUsIDB4NGQsIDB4NmMsIDB4OGIsIDB4YWEsIDB4YzksCi0JCQkweGU4LCAweDA3LCAweDI2LCAweDQ1LCAweDY0LCAweDgzLCAweGEyLCAweGMxLAotCQkJMHhlMCwgMHhmZiwgMHgxZSwgMHgzZCwgMHg1YywgMHg3YiwgMHg5YSwgMHhiOSwKLQkJCTB4ZDgsIDB4ZjcsIDB4MTYsIDB4MzUsIDB4NTQsIDB4NzMsIDB4OTIsIDB4YjEsCi0JCQkweGQwLCAweGVmLCAweDBlLCAweDJkLCAweDRjLCAweDZiLCAweDhhLCAweGE5LAotCQkJMHhjOCwgMHhlNywgMHgwNiwgMHgyNSwgMHg0NCwgMHg2MywgMHg4MiwgMHhhMSwKLQkJCTB4YzAsIDB4ZGYsIDB4ZmUsIDB4MWQsIDB4M2MsIDB4NWIsIDB4N2EsIDB4OTksCi0JCQkweGI4LCAweGQ3LCAweGY2LCAweDE1LCAweDM0LCAweDUzLCAweDcyLCAweDkxLAotCQkJMHhiMCwgMHhjZiwgMHhlZSwgMHgwZCwgMHgyYywgMHg0YiwgMHg2YSwgMHg4OSwKLQkJCTB4YTgsIDB4YzcsIDB4ZTYsIDB4MDUsIDB4MjQsIDB4NDMsIDB4NjIsIDB4ODEsCi0JCQkweGEwLCAweGJmLCAweGRlLCAweGZkLCAweDFjLCAweDNiLCAweDVhLCAweDc5LAotCQkJMHg5OCwgMHhiNywgMHhkNiwgMHhmNSwgMHgxNCwgMHgzMywgMHg1MiwgMHg3MSwKLQkJCTB4OTAsIDB4YWYsIDB4Y2UsIDB4ZWQsIDB4MGMsIDB4MmIsIDB4NGEsIDB4NjksCi0JCQkweDg4LCAweGE3LCAweGM2LCAweGU1LCAweDA0LCAweDIzLCAweDQyLCAweDYxLAotCQkJMHg4MCwgMHg5ZiwgMHhiZSwgMHhkZCwgMHhmYywgMHgxYiwgMHgzYSwgMHg1OSwKLQkJCTB4NzgsIDB4OTcsIDB4YjYsIDB4ZDUsIDB4ZjQsIDB4MTMsIDB4MzIsIDB4NTEsCi0JCQkweDcwLCAweDhmLCAweGFlLCAweGNkLCAweGVjLCAweDBiLCAweDJhLCAweDQ5LAotCQkJMHg2OCwgMHg4NywgMHhhNiwgMHhjNSwgMHhlNCwgMHgwMywgMHgyMiwgMHg0MSwKLQkJCTB4NjAsIDB4N2YsIDB4OWUsIDB4YmQsIDB4ZGMsIDB4ZmIsIDB4MWEsIDB4MzksCi0JCQkweDU4LCAweDc3LCAweDk2LCAweGI1LCAweGQ0LCAweGYzLCAweDEyLCAweDMxLAotCQkJMHg1MCwgMHg2ZiwgMHg4ZSwgMHhhZCwgMHhjYywgMHhlYiwgMHgwYSwgMHgyOSwKLQkJCTB4NDgsIDB4NjcsIDB4ODYsIDB4YTUsIDB4YzQsIDB4ZTMsIDB4MDIsIDB4MjEsCi0JCQkweDQwLCAweDVmLCAweDdlLCAweDlkLCAweGJjLCAweGRiLCAweGZhLCAweDE5LAotCQkJMHgzOCwgMHg1NywgMHg3NiwgMHg5NSwgMHhiNCwgMHhkMywgMHhmMiwgMHgxMSwKLQkJCTB4MzAsIDB4NGYsIDB4NmUsIDB4OGQsIDB4YWMsIDB4Y2IsIDB4ZWEsIDB4MDksCi0JCQkweDI4LCAweDQ3LCAweDY2LCAweDg1LCAweGE0LCAweGMzLCAweGUyLCAweDAxLAotCQkJMHgyMCwgMHgzZiwgMHg1ZSwgMHg3ZCwgMHg5YywgMHhiYiwgMHhkYSwgMHhmOSwKLQkJCTB4MTgsIDB4MzcsIDB4NTYsIDB4NzUsIDB4OTQsIDB4YjMsIDB4ZDIsIDB4ZjEsCi0JCQkweDEwLCAweDJmLCAweDRlLCAweDZkLCAweDhjLCAweGFiLCAweGNhLCAweGU5LAotCQkJMHgwOCwgMHgyNywgMHg0NiwgMHg2NSwgMHg4NCwgMHhhMywgMHhjMiwgMHhlMSwKLQkJCTB4MDAsIDB4MjEsIDB4NDIsIDB4NjMsCi0JCX0sCisJCS5pdiA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dCA9CisJCQkiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiCisJCQkiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjciCisJCQkiXHgyOFx4MjlceDJhXHgyYlx4MmNceDJkXHgyZVx4MmYiCisJCQkiXHgzMFx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzciCisJCQkiXHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCisJCQkiXHg0MFx4NDFceDQyXHg0M1x4NDRceDQ1XHg0Nlx4NDciCisJCQkiXHg0OFx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGYiCisJCQkiXHg1MFx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTciCisJCQkiXHg1OFx4NTlceDVhXHg1Ylx4NWNceDVkXHg1ZVx4NWYiCisJCQkiXHg2MFx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjciCisJCQkiXHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmYiCisJCQkiXHg3MFx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzciCisJCQkiXHg3OFx4NzlceDdhXHg3Ylx4N2NceDdkXHg3ZVx4N2YiCisJCQkiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODciCisJCQkiXHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGYiCisJCQkiXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTciCisJCQkiXHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCisJCQkiXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTciCisJCQkiXHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWYiCisJCQkiXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjciCisJCQkiXHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmYiCisJCQkiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzciCisJCQkiXHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiCisJCQkiXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDciCisJCQkiXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGYiCisJCQkiXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTciCisJCQkiXHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWYiCisJCQkiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjciCisJCQkiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiCisJCQkiXHgwMFx4MDNceDA2XHgwOVx4MGNceDBmXHgxMlx4MTUiCisJCQkiXHgxOFx4MWJceDFlXHgyMVx4MjRceDI3XHgyYVx4MmQiCisJCQkiXHgzMFx4MzNceDM2XHgzOVx4M2NceDNmXHg0Mlx4NDUiCisJCQkiXHg0OFx4NGJceDRlXHg1MVx4NTRceDU3XHg1YVx4NWQiCisJCQkiXHg2MFx4NjNceDY2XHg2OVx4NmNceDZmXHg3Mlx4NzUiCisJCQkiXHg3OFx4N2JceDdlXHg4MVx4ODRceDg3XHg4YVx4OGQiCisJCQkiXHg5MFx4OTNceDk2XHg5OVx4OWNceDlmXHhhMlx4YTUiCisJCQkiXHhhOFx4YWJceGFlXHhiMVx4YjRceGI3XHhiYVx4YmQiCisJCQkiXHhjMFx4YzNceGM2XHhjOVx4Y2NceGNmXHhkMlx4ZDUiCisJCQkiXHhkOFx4ZGJceGRlXHhlMVx4ZTRceGU3XHhlYVx4ZWQiCisJCQkiXHhmMFx4ZjNceGY2XHhmOVx4ZmNceGZmXHgwMlx4MDUiCisJCQkiXHgwOFx4MGJceDBlXHgxMVx4MTRceDE3XHgxYVx4MWQiCisJCQkiXHgyMFx4MjNceDI2XHgyOVx4MmNceDJmXHgzMlx4MzUiCisJCQkiXHgzOFx4M2JceDNlXHg0MVx4NDRceDQ3XHg0YVx4NGQiCisJCQkiXHg1MFx4NTNceDU2XHg1OVx4NWNceDVmXHg2Mlx4NjUiCisJCQkiXHg2OFx4NmJceDZlXHg3MVx4NzRceDc3XHg3YVx4N2QiCisJCQkiXHg4MFx4ODNceDg2XHg4OVx4OGNceDhmXHg5Mlx4OTUiCisJCQkiXHg5OFx4OWJceDllXHhhMVx4YTRceGE3XHhhYVx4YWQiCisJCQkiXHhiMFx4YjNceGI2XHhiOVx4YmNceGJmXHhjMlx4YzUiCisJCQkiXHhjOFx4Y2JceGNlXHhkMVx4ZDRceGQ3XHhkYVx4ZGQiCisJCQkiXHhlMFx4ZTNceGU2XHhlOVx4ZWNceGVmXHhmMlx4ZjUiCisJCQkiXHhmOFx4ZmJceGZlXHgwMVx4MDRceDA3XHgwYVx4MGQiCisJCQkiXHgxMFx4MTNceDE2XHgxOVx4MWNceDFmXHgyMlx4MjUiCisJCQkiXHgyOFx4MmJceDJlXHgzMVx4MzRceDM3XHgzYVx4M2QiCisJCQkiXHg0MFx4NDNceDQ2XHg0OVx4NGNceDRmXHg1Mlx4NTUiCisJCQkiXHg1OFx4NWJceDVlXHg2MVx4NjRceDY3XHg2YVx4NmQiCisJCQkiXHg3MFx4NzNceDc2XHg3OVx4N2NceDdmXHg4Mlx4ODUiCisJCQkiXHg4OFx4OGJceDhlXHg5MVx4OTRceDk3XHg5YVx4OWQiCisJCQkiXHhhMFx4YTNceGE2XHhhOVx4YWNceGFmXHhiMlx4YjUiCisJCQkiXHhiOFx4YmJceGJlXHhjMVx4YzRceGM3XHhjYVx4Y2QiCisJCQkiXHhkMFx4ZDNceGQ2XHhkOVx4ZGNceGRmXHhlMlx4ZTUiCisJCQkiXHhlOFx4ZWJceGVlXHhmMVx4ZjRceGY3XHhmYVx4ZmQiCisJCQkiXHgwMFx4MDVceDBhXHgwZlx4MTRceDE5XHgxZVx4MjMiCisJCQkiXHgyOFx4MmRceDMyXHgzN1x4M2NceDQxXHg0Nlx4NGIiCisJCQkiXHg1MFx4NTVceDVhXHg1Zlx4NjRceDY5XHg2ZVx4NzMiCisJCQkiXHg3OFx4N2RceDgyXHg4N1x4OGNceDkxXHg5Nlx4OWIiCisJCQkiXHhhMFx4YTVceGFhXHhhZlx4YjRceGI5XHhiZVx4YzMiCisJCQkiXHhjOFx4Y2RceGQyXHhkN1x4ZGNceGUxXHhlNlx4ZWIiCisJCQkiXHhmMFx4ZjVceGZhXHhmZlx4MDRceDA5XHgwZVx4MTMiCisJCQkiXHgxOFx4MWRceDIyXHgyN1x4MmNceDMxXHgzNlx4M2IiCisJCQkiXHg0MFx4NDVceDRhXHg0Zlx4NTRceDU5XHg1ZVx4NjMiCisJCQkiXHg2OFx4NmRceDcyXHg3N1x4N2NceDgxXHg4Nlx4OGIiCisJCQkiXHg5MFx4OTVceDlhXHg5Zlx4YTRceGE5XHhhZVx4YjMiCisJCQkiXHhiOFx4YmRceGMyXHhjN1x4Y2NceGQxXHhkNlx4ZGIiCisJCQkiXHhlMFx4ZTVceGVhXHhlZlx4ZjRceGY5XHhmZVx4MDMiCisJCQkiXHgwOFx4MGRceDEyXHgxN1x4MWNceDIxXHgyNlx4MmIiCisJCQkiXHgzMFx4MzVceDNhXHgzZlx4NDRceDQ5XHg0ZVx4NTMiCisJCQkiXHg1OFx4NWRceDYyXHg2N1x4NmNceDcxXHg3Nlx4N2IiCisJCQkiXHg4MFx4ODVceDhhXHg4Zlx4OTRceDk5XHg5ZVx4YTMiCisJCQkiXHhhOFx4YWRceGIyXHhiN1x4YmNceGMxXHhjNlx4Y2IiCisJCQkiXHhkMFx4ZDVceGRhXHhkZlx4ZTRceGU5XHhlZVx4ZjMiCisJCQkiXHhmOFx4ZmRceDAyXHgwN1x4MGNceDExXHgxNlx4MWIiCisJCQkiXHgyMFx4MjVceDJhXHgyZlx4MzRceDM5XHgzZVx4NDMiCisJCQkiXHg0OFx4NGRceDUyXHg1N1x4NWNceDYxXHg2Nlx4NmIiCisJCQkiXHg3MFx4NzVceDdhXHg3Zlx4ODRceDg5XHg4ZVx4OTMiCisJCQkiXHg5OFx4OWRceGEyXHhhN1x4YWNceGIxXHhiNlx4YmIiCisJCQkiXHhjMFx4YzVceGNhXHhjZlx4ZDRceGQ5XHhkZVx4ZTMiCisJCQkiXHhlOFx4ZWRceGYyXHhmN1x4ZmNceDAxXHgwNlx4MGIiCisJCQkiXHgxMFx4MTVceDFhXHgxZlx4MjRceDI5XHgyZVx4MzMiCisJCQkiXHgzOFx4M2RceDQyXHg0N1x4NGNceDUxXHg1Nlx4NWIiCisJCQkiXHg2MFx4NjVceDZhXHg2Zlx4NzRceDc5XHg3ZVx4ODMiCisJCQkiXHg4OFx4OGRceDkyXHg5N1x4OWNceGExXHhhNlx4YWIiCisJCQkiXHhiMFx4YjVceGJhXHhiZlx4YzRceGM5XHhjZVx4ZDMiCisJCQkiXHhkOFx4ZGRceGUyXHhlN1x4ZWNceGYxXHhmNlx4ZmIiCisJCQkiXHgwMFx4MDdceDBlXHgxNVx4MWNceDIzXHgyYVx4MzEiCisJCQkiXHgzOFx4M2ZceDQ2XHg0ZFx4NTRceDViXHg2Mlx4NjkiCisJCQkiXHg3MFx4NzdceDdlXHg4NVx4OGNceDkzXHg5YVx4YTEiCisJCQkiXHhhOFx4YWZceGI2XHhiZFx4YzRceGNiXHhkMlx4ZDkiCisJCQkiXHhlMFx4ZTdceGVlXHhmNVx4ZmNceDAzXHgwYVx4MTEiCisJCQkiXHgxOFx4MWZceDI2XHgyZFx4MzRceDNiXHg0Mlx4NDkiCisJCQkiXHg1MFx4NTdceDVlXHg2NVx4NmNceDczXHg3YVx4ODEiCisJCQkiXHg4OFx4OGZceDk2XHg5ZFx4YTRceGFiXHhiMlx4YjkiCisJCQkiXHhjMFx4YzdceGNlXHhkNVx4ZGNceGUzXHhlYVx4ZjEiCisJCQkiXHhmOFx4ZmZceDA2XHgwZFx4MTRceDFiXHgyMlx4MjkiCisJCQkiXHgzMFx4MzdceDNlXHg0NVx4NGNceDUzXHg1YVx4NjEiCisJCQkiXHg2OFx4NmZceDc2XHg3ZFx4ODRceDhiXHg5Mlx4OTkiCisJCQkiXHhhMFx4YTdceGFlXHhiNVx4YmNceGMzXHhjYVx4ZDEiCisJCQkiXHhkOFx4ZGZceGU2XHhlZFx4ZjRceGZiXHgwMlx4MDkiCisJCQkiXHgxMFx4MTdceDFlXHgyNVx4MmNceDMzXHgzYVx4NDEiCisJCQkiXHg0OFx4NGZceDU2XHg1ZFx4NjRceDZiXHg3Mlx4NzkiCisJCQkiXHg4MFx4ODdceDhlXHg5NVx4OWNceGEzXHhhYVx4YjEiCisJCQkiXHhiOFx4YmZceGM2XHhjZFx4ZDRceGRiXHhlMlx4ZTkiCisJCQkiXHhmMFx4ZjdceGZlXHgwNVx4MGNceDEzXHgxYVx4MjEiCisJCQkiXHgyOFx4MmZceDM2XHgzZFx4NDRceDRiXHg1Mlx4NTkiCisJCQkiXHg2MFx4NjdceDZlXHg3NVx4N2NceDgzXHg4YVx4OTEiCisJCQkiXHg5OFx4OWZceGE2XHhhZFx4YjRceGJiXHhjMlx4YzkiCisJCQkiXHhkMFx4ZDdceGRlXHhlNVx4ZWNceGYzXHhmYVx4MDEiCisJCQkiXHgwOFx4MGZceDE2XHgxZFx4MjRceDJiXHgzMlx4MzkiCisJCQkiXHg0MFx4NDdceDRlXHg1NVx4NWNceDYzXHg2YVx4NzEiCisJCQkiXHg3OFx4N2ZceDg2XHg4ZFx4OTRceDliXHhhMlx4YTkiCisJCQkiXHhiMFx4YjdceGJlXHhjNVx4Y2NceGQzXHhkYVx4ZTEiCisJCQkiXHhlOFx4ZWZceGY2XHhmZFx4MDRceDBiXHgxMlx4MTkiCisJCQkiXHgyMFx4MjdceDJlXHgzNVx4M2NceDQzXHg0YVx4NTEiCisJCQkiXHg1OFx4NWZceDY2XHg2ZFx4NzRceDdiXHg4Mlx4ODkiCisJCQkiXHg5MFx4OTdceDllXHhhNVx4YWNceGIzXHhiYVx4YzEiCisJCQkiXHhjOFx4Y2ZceGQ2XHhkZFx4ZTRceGViXHhmMlx4ZjkiCisJCQkiXHgwMFx4MDlceDEyXHgxYlx4MjRceDJkXHgzNlx4M2YiCisJCQkiXHg0OFx4NTFceDVhXHg2M1x4NmNceDc1XHg3ZVx4ODciCisJCQkiXHg5MFx4OTlceGEyXHhhYlx4YjRceGJkXHhjNlx4Y2YiCisJCQkiXHhkOFx4ZTFceGVhXHhmM1x4ZmNceDA1XHgwZVx4MTciCisJCQkiXHgyMFx4MjlceDMyXHgzYlx4NDRceDRkXHg1Nlx4NWYiCisJCQkiXHg2OFx4NzFceDdhXHg4M1x4OGNceDk1XHg5ZVx4YTciCisJCQkiXHhiMFx4YjlceGMyXHhjYlx4ZDRceGRkXHhlNlx4ZWYiCisJCQkiXHhmOFx4MDFceDBhXHgxM1x4MWNceDI1XHgyZVx4MzciCisJCQkiXHg0MFx4NDlceDUyXHg1Ylx4NjRceDZkXHg3Nlx4N2YiCisJCQkiXHg4OFx4OTFceDlhXHhhM1x4YWNceGI1XHhiZVx4YzciCisJCQkiXHhkMFx4ZDlceGUyXHhlYlx4ZjRceGZkXHgwNlx4MGYiCisJCQkiXHgxOFx4MjFceDJhXHgzM1x4M2NceDQ1XHg0ZVx4NTciCisJCQkiXHg2MFx4NjlceDcyXHg3Ylx4ODRceDhkXHg5Nlx4OWYiCisJCQkiXHhhOFx4YjFceGJhXHhjM1x4Y2NceGQ1XHhkZVx4ZTciCisJCQkiXHhmMFx4ZjlceDAyXHgwYlx4MTRceDFkXHgyNlx4MmYiCisJCQkiXHgzOFx4NDFceDRhXHg1M1x4NWNceDY1XHg2ZVx4NzciCisJCQkiXHg4MFx4ODlceDkyXHg5Ylx4YTRceGFkXHhiNlx4YmYiCisJCQkiXHhjOFx4ZDFceGRhXHhlM1x4ZWNceGY1XHhmZVx4MDciCisJCQkiXHgxMFx4MTlceDIyXHgyYlx4MzRceDNkXHg0Nlx4NGYiCisJCQkiXHg1OFx4NjFceDZhXHg3M1x4N2NceDg1XHg4ZVx4OTciCisJCQkiXHhhMFx4YTlceGIyXHhiYlx4YzRceGNkXHhkNlx4ZGYiCisJCQkiXHhlOFx4ZjFceGZhXHgwM1x4MGNceDE1XHgxZVx4MjciCisJCQkiXHgzMFx4MzlceDQyXHg0Ylx4NTRceDVkXHg2Nlx4NmYiCisJCQkiXHg3OFx4ODFceDhhXHg5M1x4OWNceGE1XHhhZVx4YjciCisJCQkiXHhjMFx4YzlceGQyXHhkYlx4ZTRceGVkXHhmNlx4ZmYiCisJCQkiXHgwOFx4MTFceDFhXHgyM1x4MmNceDM1XHgzZVx4NDciCisJCQkiXHg1MFx4NTlceDYyXHg2Ylx4NzRceDdkXHg4Nlx4OGYiCisJCQkiXHg5OFx4YTFceGFhXHhiM1x4YmNceGM1XHhjZVx4ZDciCisJCQkiXHhlMFx4ZTlceGYyXHhmYlx4MDRceDBkXHgxNlx4MWYiCisJCQkiXHgyOFx4MzFceDNhXHg0M1x4NGNceDU1XHg1ZVx4NjciCisJCQkiXHg3MFx4NzlceDgyXHg4Ylx4OTRceDlkXHhhNlx4YWYiCisJCQkiXHhiOFx4YzFceGNhXHhkM1x4ZGNceGU1XHhlZVx4ZjciCisJCQkiXHgwMFx4MGJceDE2XHgyMVx4MmNceDM3XHg0Mlx4NGQiCisJCQkiXHg1OFx4NjNceDZlXHg3OVx4ODRceDhmXHg5YVx4YTUiCisJCQkiXHhiMFx4YmJceGM2XHhkMVx4ZGNceGU3XHhmMlx4ZmQiCisJCQkiXHgwOFx4MTNceDFlXHgyOVx4MzRceDNmXHg0YVx4NTUiCisJCQkiXHg2MFx4NmJceDc2XHg4MVx4OGNceDk3XHhhMlx4YWQiCisJCQkiXHhiOFx4YzNceGNlXHhkOVx4ZTRceGVmXHhmYVx4MDUiCisJCQkiXHgxMFx4MWJceDI2XHgzMVx4M2NceDQ3XHg1Mlx4NWQiCisJCQkiXHg2OFx4NzNceDdlXHg4OVx4OTRceDlmXHhhYVx4YjUiCisJCQkiXHhjMFx4Y2JceGQ2XHhlMVx4ZWNceGY3XHgwMlx4MGQiCisJCQkiXHgxOFx4MjNceDJlXHgzOVx4NDRceDRmXHg1YVx4NjUiCisJCQkiXHg3MFx4N2JceDg2XHg5MVx4OWNceGE3XHhiMlx4YmQiCisJCQkiXHhjOFx4ZDNceGRlXHhlOVx4ZjRceGZmXHgwYVx4MTUiCisJCQkiXHgyMFx4MmJceDM2XHg0MVx4NGNceDU3XHg2Mlx4NmQiCisJCQkiXHg3OFx4ODNceDhlXHg5OVx4YTRceGFmXHhiYVx4YzUiCisJCQkiXHhkMFx4ZGJceGU2XHhmMVx4ZmNceDA3XHgxMlx4MWQiCisJCQkiXHgyOFx4MzNceDNlXHg0OVx4NTRceDVmXHg2YVx4NzUiCisJCQkiXHg4MFx4OGJceDk2XHhhMVx4YWNceGI3XHhjMlx4Y2QiCisJCQkiXHhkOFx4ZTNceGVlXHhmOVx4MDRceDBmXHgxYVx4MjUiCisJCQkiXHgzMFx4M2JceDQ2XHg1MVx4NWNceDY3XHg3Mlx4N2QiCisJCQkiXHg4OFx4OTNceDllXHhhOVx4YjRceGJmXHhjYVx4ZDUiCisJCQkiXHhlMFx4ZWJceGY2XHgwMVx4MGNceDE3XHgyMlx4MmQiCisJCQkiXHgzOFx4NDNceDRlXHg1OVx4NjRceDZmXHg3YVx4ODUiCisJCQkiXHg5MFx4OWJceGE2XHhiMVx4YmNceGM3XHhkMlx4ZGQiCisJCQkiXHhlOFx4ZjNceGZlXHgwOVx4MTRceDFmXHgyYVx4MzUiCisJCQkiXHg0MFx4NGJceDU2XHg2MVx4NmNceDc3XHg4Mlx4OGQiCisJCQkiXHg5OFx4YTNceGFlXHhiOVx4YzRceGNmXHhkYVx4ZTUiCisJCQkiXHhmMFx4ZmJceDA2XHgxMVx4MWNceDI3XHgzMlx4M2QiCisJCQkiXHg0OFx4NTNceDVlXHg2OVx4NzRceDdmXHg4YVx4OTUiCisJCQkiXHhhMFx4YWJceGI2XHhjMVx4Y2NceGQ3XHhlMlx4ZWQiCisJCQkiXHhmOFx4MDNceDBlXHgxOVx4MjRceDJmXHgzYVx4NDUiCisJCQkiXHg1MFx4NWJceDY2XHg3MVx4N2NceDg3XHg5Mlx4OWQiCisJCQkiXHhhOFx4YjNceGJlXHhjOVx4ZDRceGRmXHhlYVx4ZjUiCisJCQkiXHgwMFx4MGRceDFhXHgyN1x4MzRceDQxXHg0ZVx4NWIiCisJCQkiXHg2OFx4NzVceDgyXHg4Zlx4OWNceGE5XHhiNlx4YzMiCisJCQkiXHhkMFx4ZGRceGVhXHhmN1x4MDRceDExXHgxZVx4MmIiCisJCQkiXHgzOFx4NDVceDUyXHg1Zlx4NmNceDc5XHg4Nlx4OTMiCisJCQkiXHhhMFx4YWRceGJhXHhjN1x4ZDRceGUxXHhlZVx4ZmIiCisJCQkiXHgwOFx4MTVceDIyXHgyZlx4M2NceDQ5XHg1Nlx4NjMiCisJCQkiXHg3MFx4N2RceDhhXHg5N1x4YTRceGIxXHhiZVx4Y2IiCisJCQkiXHhkOFx4ZTVceGYyXHhmZlx4MGNceDE5XHgyNlx4MzMiCisJCQkiXHg0MFx4NGRceDVhXHg2N1x4NzRceDgxXHg4ZVx4OWIiCisJCQkiXHhhOFx4YjVceGMyXHhjZlx4ZGNceGU5XHhmNlx4MDMiCisJCQkiXHgxMFx4MWRceDJhXHgzN1x4NDRceDUxXHg1ZVx4NmIiCisJCQkiXHg3OFx4ODVceDkyXHg5Zlx4YWNceGI5XHhjNlx4ZDMiCisJCQkiXHhlMFx4ZWRceGZhXHgwN1x4MTRceDIxXHgyZVx4M2IiCisJCQkiXHg0OFx4NTVceDYyXHg2Zlx4N2NceDg5XHg5Nlx4YTMiCisJCQkiXHhiMFx4YmRceGNhXHhkN1x4ZTRceGYxXHhmZVx4MGIiCisJCQkiXHgxOFx4MjVceDMyXHgzZlx4NGNceDU5XHg2Nlx4NzMiCisJCQkiXHg4MFx4OGRceDlhXHhhN1x4YjRceGMxXHhjZVx4ZGIiCisJCQkiXHhlOFx4ZjVceDAyXHgwZlx4MWNceDI5XHgzNlx4NDMiCisJCQkiXHg1MFx4NWRceDZhXHg3N1x4ODRceDkxXHg5ZVx4YWIiCisJCQkiXHhiOFx4YzVceGQyXHhkZlx4ZWNceGY5XHgwNlx4MTMiCisJCQkiXHgyMFx4MmRceDNhXHg0N1x4NTRceDYxXHg2ZVx4N2IiCisJCQkiXHg4OFx4OTVceGEyXHhhZlx4YmNceGM5XHhkNlx4ZTMiCisJCQkiXHhmMFx4ZmRceDBhXHgxN1x4MjRceDMxXHgzZVx4NGIiCisJCQkiXHg1OFx4NjVceDcyXHg3Zlx4OGNceDk5XHhhNlx4YjMiCisJCQkiXHhjMFx4Y2RceGRhXHhlN1x4ZjRceDAxXHgwZVx4MWIiCisJCQkiXHgyOFx4MzVceDQyXHg0Zlx4NWNceDY5XHg3Nlx4ODMiCisJCQkiXHg5MFx4OWRceGFhXHhiN1x4YzRceGQxXHhkZVx4ZWIiCisJCQkiXHhmOFx4MDVceDEyXHgxZlx4MmNceDM5XHg0Nlx4NTMiCisJCQkiXHg2MFx4NmRceDdhXHg4N1x4OTRceGExXHhhZVx4YmIiCisJCQkiXHhjOFx4ZDVceGUyXHhlZlx4ZmNceDA5XHgxNlx4MjMiCisJCQkiXHgzMFx4M2RceDRhXHg1N1x4NjRceDcxXHg3ZVx4OGIiCisJCQkiXHg5OFx4YTVceGIyXHhiZlx4Y2NceGQ5XHhlNlx4ZjMiCisJCQkiXHgwMFx4MGZceDFlXHgyZFx4M2NceDRiXHg1YVx4NjkiCisJCQkiXHg3OFx4ODdceDk2XHhhNVx4YjRceGMzXHhkMlx4ZTEiCisJCQkiXHhmMFx4ZmZceDBlXHgxZFx4MmNceDNiXHg0YVx4NTkiCisJCQkiXHg2OFx4NzdceDg2XHg5NVx4YTRceGIzXHhjMlx4ZDEiCisJCQkiXHhlMFx4ZWZceGZlXHgwZFx4MWNceDJiXHgzYVx4NDkiCisJCQkiXHg1OFx4NjdceDc2XHg4NVx4OTRceGEzXHhiMlx4YzEiCisJCQkiXHhkMFx4ZGZceGVlXHhmZFx4MGNceDFiXHgyYVx4MzkiCisJCQkiXHg0OFx4NTdceDY2XHg3NVx4ODRceDkzXHhhMlx4YjEiCisJCQkiXHhjMFx4Y2ZceGRlXHhlZFx4ZmNceDBiXHgxYVx4MjkiCisJCQkiXHgzOFx4NDdceDU2XHg2NVx4NzRceDgzXHg5Mlx4YTEiCisJCQkiXHhiMFx4YmZceGNlXHhkZFx4ZWNceGZiXHgwYVx4MTkiCisJCQkiXHgyOFx4MzdceDQ2XHg1NVx4NjRceDczXHg4Mlx4OTEiCisJCQkiXHhhMFx4YWZceGJlXHhjZFx4ZGNceGViXHhmYVx4MDkiCisJCQkiXHgxOFx4MjdceDM2XHg0NVx4NTRceDYzXHg3Mlx4ODEiCisJCQkiXHg5MFx4OWZceGFlXHhiZFx4Y2NceGRiXHhlYVx4ZjkiCisJCQkiXHgwOFx4MTdceDI2XHgzNVx4NDRceDUzXHg2Mlx4NzEiCisJCQkiXHg4MFx4OGZceDllXHhhZFx4YmNceGNiXHhkYVx4ZTkiCisJCQkiXHhmOFx4MDdceDE2XHgyNVx4MzRceDQzXHg1Mlx4NjEiCisJCQkiXHg3MFx4N2ZceDhlXHg5ZFx4YWNceGJiXHhjYVx4ZDkiCisJCQkiXHhlOFx4ZjdceDA2XHgxNVx4MjRceDMzXHg0Mlx4NTEiCisJCQkiXHg2MFx4NmZceDdlXHg4ZFx4OWNceGFiXHhiYVx4YzkiCisJCQkiXHhkOFx4ZTdceGY2XHgwNVx4MTRceDIzXHgzMlx4NDEiCisJCQkiXHg1MFx4NWZceDZlXHg3ZFx4OGNceDliXHhhYVx4YjkiCisJCQkiXHhjOFx4ZDdceGU2XHhmNVx4MDRceDEzXHgyMlx4MzEiCisJCQkiXHg0MFx4NGZceDVlXHg2ZFx4N2NceDhiXHg5YVx4YTkiCisJCQkiXHhiOFx4YzdceGQ2XHhlNVx4ZjRceDAzXHgxMlx4MjEiCisJCQkiXHgzMFx4M2ZceDRlXHg1ZFx4NmNceDdiXHg4YVx4OTkiCisJCQkiXHhhOFx4YjdceGM2XHhkNVx4ZTRceGYzXHgwMlx4MTEiCisJCQkiXHgyMFx4MmZceDNlXHg0ZFx4NWNceDZiXHg3YVx4ODkiCisJCQkiXHg5OFx4YTdceGI2XHhjNVx4ZDRceGUzXHhmMlx4MDEiCisJCQkiXHgxMFx4MWZceDJlXHgzZFx4NGNceDViXHg2YVx4NzkiCisJCQkiXHg4OFx4OTdceGE2XHhiNVx4YzRceGQzXHhlMlx4ZjEiCisJCQkiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzciCisJCQkiXHg4OFx4OTlceGFhXHhiYlx4Y2NceGRkXHhlZVx4ZmYiCisJCQkiXHgxMFx4MjFceDMyXHg0M1x4NTRceDY1XHg3Nlx4ODciCisJCQkiXHg5OFx4YTlceGJhXHhjYlx4ZGNceGVkXHhmZVx4MGYiCisJCQkiXHgyMFx4MzFceDQyXHg1M1x4NjRceDc1XHg4Nlx4OTciCisJCQkiXHhhOFx4YjlceGNhXHhkYlx4ZWNceGZkXHgwZVx4MWYiCisJCQkiXHgzMFx4NDFceDUyXHg2M1x4NzRceDg1XHg5Nlx4YTciCisJCQkiXHhiOFx4YzlceGRhXHhlYlx4ZmNceDBkXHgxZVx4MmYiCisJCQkiXHg0MFx4NTFceDYyXHg3M1x4ODRceDk1XHhhNlx4YjciCisJCQkiXHhjOFx4ZDlceGVhXHhmYlx4MGNceDFkXHgyZVx4M2YiCisJCQkiXHg1MFx4NjFceDcyXHg4M1x4OTRceGE1XHhiNlx4YzciCisJCQkiXHhkOFx4ZTlceGZhXHgwYlx4MWNceDJkXHgzZVx4NGYiCisJCQkiXHg2MFx4NzFceDgyXHg5M1x4YTRceGI1XHhjNlx4ZDciCisJCQkiXHhlOFx4ZjlceDBhXHgxYlx4MmNceDNkXHg0ZVx4NWYiCisJCQkiXHg3MFx4ODFceDkyXHhhM1x4YjRceGM1XHhkNlx4ZTciCisJCQkiXHhmOFx4MDlceDFhXHgyYlx4M2NceDRkXHg1ZVx4NmYiCisJCQkiXHg4MFx4OTFceGEyXHhiM1x4YzRceGQ1XHhlNlx4ZjciCisJCQkiXHgwOFx4MTlceDJhXHgzYlx4NGNceDVkXHg2ZVx4N2YiCisJCQkiXHg5MFx4YTFceGIyXHhjM1x4ZDRceGU1XHhmNlx4MDciCisJCQkiXHgxOFx4MjlceDNhXHg0Ylx4NWNceDZkXHg3ZVx4OGYiCisJCQkiXHhhMFx4YjFceGMyXHhkM1x4ZTRceGY1XHgwNlx4MTciCisJCQkiXHgyOFx4MzlceDRhXHg1Ylx4NmNceDdkXHg4ZVx4OWYiCisJCQkiXHhiMFx4YzFceGQyXHhlM1x4ZjRceDA1XHgxNlx4MjciCisJCQkiXHgzOFx4NDlceDVhXHg2Ylx4N2NceDhkXHg5ZVx4YWYiCisJCQkiXHhjMFx4ZDFceGUyXHhmM1x4MDRceDE1XHgyNlx4MzciCisJCQkiXHg0OFx4NTlceDZhXHg3Ylx4OGNceDlkXHhhZVx4YmYiCisJCQkiXHhkMFx4ZTFceGYyXHgwM1x4MTRceDI1XHgzNlx4NDciCisJCQkiXHg1OFx4NjlceDdhXHg4Ylx4OWNceGFkXHhiZVx4Y2YiCisJCQkiXHhlMFx4ZjFceDAyXHgxM1x4MjRceDM1XHg0Nlx4NTciCisJCQkiXHg2OFx4NzlceDhhXHg5Ylx4YWNceGJkXHhjZVx4ZGYiCisJCQkiXHhmMFx4MDFceDEyXHgyM1x4MzRceDQ1XHg1Nlx4NjciCisJCQkiXHg3OFx4ODlceDlhXHhhYlx4YmNceGNkXHhkZVx4ZWYiCisJCQkiXHgwMFx4MTNceDI2XHgzOVx4NGNceDVmXHg3Mlx4ODUiCisJCQkiXHg5OFx4YWJceGJlXHhkMVx4ZTRceGY3XHgwYVx4MWQiCisJCQkiXHgzMFx4NDNceDU2XHg2OVx4N2NceDhmXHhhMlx4YjUiCisJCQkiXHhjOFx4ZGJceGVlXHgwMVx4MTRceDI3XHgzYVx4NGQiCisJCQkiXHg2MFx4NzNceDg2XHg5OVx4YWNceGJmXHhkMlx4ZTUiCisJCQkiXHhmOFx4MGJceDFlXHgzMVx4NDRceDU3XHg2YVx4N2QiCisJCQkiXHg5MFx4YTNceGI2XHhjOVx4ZGNceGVmXHgwMlx4MTUiCisJCQkiXHgyOFx4M2JceDRlXHg2MVx4NzRceDg3XHg5YVx4YWQiCisJCQkiXHhjMFx4ZDNceGU2XHhmOVx4MGNceDFmXHgzMlx4NDUiCisJCQkiXHg1OFx4NmJceDdlXHg5MVx4YTRceGI3XHhjYVx4ZGQiCisJCQkiXHhmMFx4MDNceDE2XHgyOVx4M2NceDRmXHg2Mlx4NzUiCisJCQkiXHg4OFx4OWJceGFlXHhjMVx4ZDRceGU3XHhmYVx4MGQiCisJCQkiXHgyMFx4MzNceDQ2XHg1OVx4NmNceDdmXHg5Mlx4YTUiCisJCQkiXHhiOFx4Y2JceGRlXHhmMVx4MDRceDE3XHgyYVx4M2QiCisJCQkiXHg1MFx4NjNceDc2XHg4OVx4OWNceGFmXHhjMlx4ZDUiCisJCQkiXHhlOFx4ZmJceDBlXHgyMVx4MzRceDQ3XHg1YVx4NmQiCisJCQkiXHg4MFx4OTNceGE2XHhiOVx4Y2NceGRmXHhmMlx4MDUiCisJCQkiXHgxOFx4MmJceDNlXHg1MVx4NjRceDc3XHg4YVx4OWQiCisJCQkiXHhiMFx4YzNceGQ2XHhlOVx4ZmNceDBmXHgyMlx4MzUiCisJCQkiXHg0OFx4NWJceDZlXHg4MVx4OTRceGE3XHhiYVx4Y2QiCisJCQkiXHhlMFx4ZjNceDA2XHgxOVx4MmNceDNmXHg1Mlx4NjUiCisJCQkiXHg3OFx4OGJceDllXHhiMVx4YzRceGQ3XHhlYVx4ZmQiCisJCQkiXHgxMFx4MjNceDM2XHg0OVx4NWNceDZmXHg4Mlx4OTUiCisJCQkiXHhhOFx4YmJceGNlXHhlMVx4ZjRceDA3XHgxYVx4MmQiCisJCQkiXHg0MFx4NTNceDY2XHg3OVx4OGNceDlmXHhiMlx4YzUiCisJCQkiXHhkOFx4ZWJceGZlXHgxMVx4MjRceDM3XHg0YVx4NWQiCisJCQkiXHg3MFx4ODNceDk2XHhhOVx4YmNceGNmXHhlMlx4ZjUiCisJCQkiXHgwOFx4MWJceDJlXHg0MVx4NTRceDY3XHg3YVx4OGQiCisJCQkiXHhhMFx4YjNceGM2XHhkOVx4ZWNceGZmXHgxMlx4MjUiCisJCQkiXHgzOFx4NGJceDVlXHg3MVx4ODRceDk3XHhhYVx4YmQiCisJCQkiXHhkMFx4ZTNceGY2XHgwOVx4MWNceDJmXHg0Mlx4NTUiCisJCQkiXHg2OFx4N2JceDhlXHhhMVx4YjRceGM3XHhkYVx4ZWQiCisJCQkiXHgwMFx4MTVceDJhXHgzZlx4NTRceDY5XHg3ZVx4OTMiCisJCQkiXHhhOFx4YmRceGQyXHhlN1x4ZmNceDExXHgyNlx4M2IiCisJCQkiXHg1MFx4NjVceDdhXHg4Zlx4YTRceGI5XHhjZVx4ZTMiCisJCQkiXHhmOFx4MGRceDIyXHgzN1x4NGNceDYxXHg3Nlx4OGIiCisJCQkiXHhhMFx4YjVceGNhXHhkZlx4ZjRceDA5XHgxZVx4MzMiCisJCQkiXHg0OFx4NWRceDcyXHg4N1x4OWNceGIxXHhjNlx4ZGIiCisJCQkiXHhmMFx4MDVceDFhXHgyZlx4NDRceDU5XHg2ZVx4ODMiCisJCQkiXHg5OFx4YWRceGMyXHhkN1x4ZWNceDAxXHgxNlx4MmIiCisJCQkiXHg0MFx4NTVceDZhXHg3Zlx4OTRceGE5XHhiZVx4ZDMiCisJCQkiXHhlOFx4ZmRceDEyXHgyN1x4M2NceDUxXHg2Nlx4N2IiCisJCQkiXHg5MFx4YTVceGJhXHhjZlx4ZTRceGY5XHgwZVx4MjMiCisJCQkiXHgzOFx4NGRceDYyXHg3N1x4OGNceGExXHhiNlx4Y2IiCisJCQkiXHhlMFx4ZjVceDBhXHgxZlx4MzRceDQ5XHg1ZVx4NzMiCisJCQkiXHg4OFx4OWRceGIyXHhjN1x4ZGNceGYxXHgwNlx4MWIiCisJCQkiXHgzMFx4NDVceDVhXHg2Zlx4ODRceDk5XHhhZVx4YzMiCisJCQkiXHhkOFx4ZWRceDAyXHgxN1x4MmNceDQxXHg1Nlx4NmIiCisJCQkiXHg4MFx4OTVceGFhXHhiZlx4ZDRceGU5XHhmZVx4MTMiCisJCQkiXHgyOFx4M2RceDUyXHg2N1x4N2NceDkxXHhhNlx4YmIiCisJCQkiXHhkMFx4ZTVceGZhXHgwZlx4MjRceDM5XHg0ZVx4NjMiCisJCQkiXHg3OFx4OGRceGEyXHhiN1x4Y2NceGUxXHhmNlx4MGIiCisJCQkiXHgyMFx4MzVceDRhXHg1Zlx4NzRceDg5XHg5ZVx4YjMiCisJCQkiXHhjOFx4ZGRceGYyXHgwN1x4MWNceDMxXHg0Nlx4NWIiCisJCQkiXHg3MFx4ODVceDlhXHhhZlx4YzRceGQ5XHhlZVx4MDMiCisJCQkiXHgxOFx4MmRceDQyXHg1N1x4NmNceDgxXHg5Nlx4YWIiCisJCQkiXHhjMFx4ZDVceGVhXHhmZlx4MTRceDI5XHgzZVx4NTMiCisJCQkiXHg2OFx4N2RceDkyXHhhN1x4YmNceGQxXHhlNlx4ZmIiCisJCQkiXHgxMFx4MjVceDNhXHg0Zlx4NjRceDc5XHg4ZVx4YTMiCisJCQkiXHhiOFx4Y2RceGUyXHhmN1x4MGNceDIxXHgzNlx4NGIiCisJCQkiXHg2MFx4NzVceDhhXHg5Zlx4YjRceGM5XHhkZVx4ZjMiCisJCQkiXHgwOFx4MWRceDMyXHg0N1x4NWNceDcxXHg4Nlx4OWIiCisJCQkiXHhiMFx4YzVceGRhXHhlZlx4MDRceDE5XHgyZVx4NDMiCisJCQkiXHg1OFx4NmRceDgyXHg5N1x4YWNceGMxXHhkNlx4ZWIiCisJCQkiXHgwMFx4MTdceDJlXHg0NVx4NWNceDczXHg4YVx4YTEiCisJCQkiXHhiOFx4Y2ZceGU2XHhmZFx4MTRceDJiXHg0Mlx4NTkiCisJCQkiXHg3MFx4ODdceDllXHhiNVx4Y2NceGUzXHhmYVx4MTEiCisJCQkiXHgyOFx4M2ZceDU2XHg2ZFx4ODRceDliXHhiMlx4YzkiCisJCQkiXHhlMFx4ZjdceDBlXHgyNVx4M2NceDUzXHg2YVx4ODEiCisJCQkiXHg5OFx4YWZceGM2XHhkZFx4ZjRceDBiXHgyMlx4MzkiCisJCQkiXHg1MFx4NjdceDdlXHg5NVx4YWNceGMzXHhkYVx4ZjEiCisJCQkiXHgwOFx4MWZceDM2XHg0ZFx4NjRceDdiXHg5Mlx4YTkiCisJCQkiXHhjMFx4ZDdceGVlXHgwNVx4MWNceDMzXHg0YVx4NjEiCisJCQkiXHg3OFx4OGZceGE2XHhiZFx4ZDRceGViXHgwMlx4MTkiCisJCQkiXHgzMFx4NDdceDVlXHg3NVx4OGNceGEzXHhiYVx4ZDEiCisJCQkiXHhlOFx4ZmZceDE2XHgyZFx4NDRceDViXHg3Mlx4ODkiCisJCQkiXHhhMFx4YjdceGNlXHhlNVx4ZmNceDEzXHgyYVx4NDEiCisJCQkiXHg1OFx4NmZceDg2XHg5ZFx4YjRceGNiXHhlMlx4ZjkiCisJCQkiXHgxMFx4MjdceDNlXHg1NVx4NmNceDgzXHg5YVx4YjEiCisJCQkiXHhjOFx4ZGZceGY2XHgwZFx4MjRceDNiXHg1Mlx4NjkiCisJCQkiXHg4MFx4OTdceGFlXHhjNVx4ZGNceGYzXHgwYVx4MjEiCisJCQkiXHgzOFx4NGZceDY2XHg3ZFx4OTRceGFiXHhjMlx4ZDkiCisJCQkiXHhmMFx4MDdceDFlXHgzNVx4NGNceDYzXHg3YVx4OTEiCisJCQkiXHhhOFx4YmZceGQ2XHhlZFx4MDRceDFiXHgzMlx4NDkiCisJCQkiXHg2MFx4NzdceDhlXHhhNVx4YmNceGQzXHhlYVx4MDEiCisJCQkiXHgxOFx4MmZceDQ2XHg1ZFx4NzRceDhiXHhhMlx4YjkiCisJCQkiXHhkMFx4ZTdceGZlXHgxNVx4MmNceDQzXHg1YVx4NzEiCisJCQkiXHg4OFx4OWZceGI2XHhjZFx4ZTRceGZiXHgxMlx4MjkiCisJCQkiXHg0MFx4NTdceDZlXHg4NVx4OWNceGIzXHhjYVx4ZTEiCisJCQkiXHhmOFx4MGZceDI2XHgzZFx4NTRceDZiXHg4Mlx4OTkiCisJCQkiXHhiMFx4YzdceGRlXHhmNVx4MGNceDIzXHgzYVx4NTEiCisJCQkiXHg2OFx4N2ZceDk2XHhhZFx4YzRceGRiXHhmMlx4MDkiCisJCQkiXHgyMFx4MzdceDRlXHg2NVx4N2NceDkzXHhhYVx4YzEiCisJCQkiXHhkOFx4ZWZceDA2XHgxZFx4MzRceDRiXHg2Mlx4NzkiCisJCQkiXHg5MFx4YTdceGJlXHhkNVx4ZWNceDAzXHgxYVx4MzEiCisJCQkiXHg0OFx4NWZceDc2XHg4ZFx4YTRceGJiXHhkMlx4ZTkiCisJCQkiXHgwMFx4MTlceDMyXHg0Ylx4NjRceDdkXHg5Nlx4YWYiCisJCQkiXHhjOFx4ZTFceGZhXHgxM1x4MmNceDQ1XHg1ZVx4NzciCisJCQkiXHg5MFx4YTlceGMyXHhkYlx4ZjRceDBkXHgyNlx4M2YiCisJCQkiXHg1OFx4NzFceDhhXHhhM1x4YmNceGQ1XHhlZVx4MDciCisJCQkiXHgyMFx4MzlceDUyXHg2Ylx4ODRceDlkXHhiNlx4Y2YiCisJCQkiXHhlOFx4MDFceDFhXHgzM1x4NGNceDY1XHg3ZVx4OTciCisJCQkiXHhiMFx4YzlceGUyXHhmYlx4MTRceDJkXHg0Nlx4NWYiCisJCQkiXHg3OFx4OTFceGFhXHhjM1x4ZGNceGY1XHgwZVx4MjciCisJCQkiXHg0MFx4NTlceDcyXHg4Ylx4YTRceGJkXHhkNlx4ZWYiCisJCQkiXHgwOFx4MjFceDNhXHg1M1x4NmNceDg1XHg5ZVx4YjciCisJCQkiXHhkMFx4ZTlceDAyXHgxYlx4MzRceDRkXHg2Nlx4N2YiCisJCQkiXHg5OFx4YjFceGNhXHhlM1x4ZmNceDE1XHgyZVx4NDciCisJCQkiXHg2MFx4NzlceDkyXHhhYlx4YzRceGRkXHhmNlx4MGYiCisJCQkiXHgyOFx4NDFceDVhXHg3M1x4OGNceGE1XHhiZVx4ZDciCisJCQkiXHhmMFx4MDlceDIyXHgzYlx4NTRceDZkXHg4Nlx4OWYiCisJCQkiXHhiOFx4ZDFceGVhXHgwM1x4MWNceDM1XHg0ZVx4NjciCisJCQkiXHg4MFx4OTlceGIyXHhjYlx4ZTRceGZkXHgxNlx4MmYiCisJCQkiXHg0OFx4NjFceDdhXHg5M1x4YWNceGM1XHhkZVx4ZjciCisJCQkiXHgxMFx4MjlceDQyXHg1Ylx4NzRceDhkXHhhNlx4YmYiCisJCQkiXHhkOFx4ZjFceDBhXHgyM1x4M2NceDU1XHg2ZVx4ODciCisJCQkiXHhhMFx4YjlceGQyXHhlYlx4MDRceDFkXHgzNlx4NGYiCisJCQkiXHg2OFx4ODFceDlhXHhiM1x4Y2NceGU1XHhmZVx4MTciCisJCQkiXHgzMFx4NDlceDYyXHg3Ylx4OTRceGFkXHhjNlx4ZGYiCisJCQkiXHhmOFx4MTFceDJhXHg0M1x4NWNceDc1XHg4ZVx4YTciCisJCQkiXHhjMFx4ZDlceGYyXHgwYlx4MjRceDNkXHg1Nlx4NmYiCisJCQkiXHg4OFx4YTFceGJhXHhkM1x4ZWNceDA1XHgxZVx4MzciCisJCQkiXHg1MFx4NjlceDgyXHg5Ylx4YjRceGNkXHhlNlx4ZmYiCisJCQkiXHgxOFx4MzFceDRhXHg2M1x4N2NceDk1XHhhZVx4YzciCisJCQkiXHhlMFx4ZjlceDEyXHgyYlx4NDRceDVkXHg3Nlx4OGYiCisJCQkiXHhhOFx4YzFceGRhXHhmM1x4MGNceDI1XHgzZVx4NTciCisJCQkiXHg3MFx4ODlceGEyXHhiYlx4ZDRceGVkXHgwNlx4MWYiCisJCQkiXHgzOFx4NTFceDZhXHg4M1x4OWNceGI1XHhjZVx4ZTciCisJCQkiXHgwMFx4MWJceDM2XHg1MVx4NmNceDg3XHhhMlx4YmQiCisJCQkiXHhkOFx4ZjNceDBlXHgyOVx4NDRceDVmXHg3YVx4OTUiCisJCQkiXHhiMFx4Y2JceGU2XHgwMVx4MWNceDM3XHg1Mlx4NmQiCisJCQkiXHg4OFx4YTNceGJlXHhkOVx4ZjRceDBmXHgyYVx4NDUiCisJCQkiXHg2MFx4N2JceDk2XHhiMVx4Y2NceGU3XHgwMlx4MWQiCisJCQkiXHgzOFx4NTNceDZlXHg4OVx4YTRceGJmXHhkYVx4ZjUiCisJCQkiXHgxMFx4MmJceDQ2XHg2MVx4N2NceDk3XHhiMlx4Y2QiCisJCQkiXHhlOFx4MDNceDFlXHgzOVx4NTRceDZmXHg4YVx4YTUiCisJCQkiXHhjMFx4ZGJceGY2XHgxMVx4MmNceDQ3XHg2Mlx4N2QiCisJCQkiXHg5OFx4YjNceGNlXHhlOVx4MDRceDFmXHgzYVx4NTUiCisJCQkiXHg3MFx4OGJceGE2XHhjMVx4ZGNceGY3XHgxMlx4MmQiCisJCQkiXHg0OFx4NjNceDdlXHg5OVx4YjRceGNmXHhlYVx4MDUiCisJCQkiXHgyMFx4M2JceDU2XHg3MVx4OGNceGE3XHhjMlx4ZGQiCisJCQkiXHhmOFx4MTNceDJlXHg0OVx4NjRceDdmXHg5YVx4YjUiCisJCQkiXHhkMFx4ZWJceDA2XHgyMVx4M2NceDU3XHg3Mlx4OGQiCisJCQkiXHhhOFx4YzNceGRlXHhmOVx4MTRceDJmXHg0YVx4NjUiCisJCQkiXHg4MFx4OWJceGI2XHhkMVx4ZWNceDA3XHgyMlx4M2QiCisJCQkiXHg1OFx4NzNceDhlXHhhOVx4YzRceGRmXHhmYVx4MTUiCisJCQkiXHgzMFx4NGJceDY2XHg4MVx4OWNceGI3XHhkMlx4ZWQiCisJCQkiXHgwOFx4MjNceDNlXHg1OVx4NzRceDhmXHhhYVx4YzUiCisJCQkiXHhlMFx4ZmJceDE2XHgzMVx4NGNceDY3XHg4Mlx4OWQiCisJCQkiXHhiOFx4ZDNceGVlXHgwOVx4MjRceDNmXHg1YVx4NzUiCisJCQkiXHg5MFx4YWJceGM2XHhlMVx4ZmNceDE3XHgzMlx4NGQiCisJCQkiXHg2OFx4ODNceDllXHhiOVx4ZDRceGVmXHgwYVx4MjUiCisJCQkiXHg0MFx4NWJceDc2XHg5MVx4YWNceGM3XHhlMlx4ZmQiCisJCQkiXHgxOFx4MzNceDRlXHg2OVx4ODRceDlmXHhiYVx4ZDUiCisJCQkiXHhmMFx4MGJceDI2XHg0MVx4NWNceDc3XHg5Mlx4YWQiCisJCQkiXHhjOFx4ZTNceGZlXHgxOVx4MzRceDRmXHg2YVx4ODUiCisJCQkiXHhhMFx4YmJceGQ2XHhmMVx4MGNceDI3XHg0Mlx4NWQiCisJCQkiXHg3OFx4OTNceGFlXHhjOVx4ZTRceGZmXHgxYVx4MzUiCisJCQkiXHg1MFx4NmJceDg2XHhhMVx4YmNceGQ3XHhmMlx4MGQiCisJCQkiXHgyOFx4NDNceDVlXHg3OVx4OTRceGFmXHhjYVx4ZTUiCisJCQkiXHgwMFx4MWRceDNhXHg1N1x4NzRceDkxXHhhZVx4Y2IiCisJCQkiXHhlOFx4MDVceDIyXHgzZlx4NWNceDc5XHg5Nlx4YjMiCisJCQkiXHhkMFx4ZWRceDBhXHgyN1x4NDRceDYxXHg3ZVx4OWIiCisJCQkiXHhiOFx4ZDVceGYyXHgwZlx4MmNceDQ5XHg2Nlx4ODMiCisJCQkiXHhhMFx4YmRceGRhXHhmN1x4MTRceDMxXHg0ZVx4NmIiCisJCQkiXHg4OFx4YTVceGMyXHhkZlx4ZmNceDE5XHgzNlx4NTMiCisJCQkiXHg3MFx4OGRceGFhXHhjN1x4ZTRceDAxXHgxZVx4M2IiCisJCQkiXHg1OFx4NzVceDkyXHhhZlx4Y2NceGU5XHgwNlx4MjMiCisJCQkiXHg0MFx4NWRceDdhXHg5N1x4YjRceGQxXHhlZVx4MGIiCisJCQkiXHgyOFx4NDVceDYyXHg3Zlx4OWNceGI5XHhkNlx4ZjMiCisJCQkiXHgxMFx4MmRceDRhXHg2N1x4ODRceGExXHhiZVx4ZGIiCisJCQkiXHhmOFx4MTVceDMyXHg0Zlx4NmNceDg5XHhhNlx4YzMiCisJCQkiXHhlMFx4ZmRceDFhXHgzN1x4NTRceDcxXHg4ZVx4YWIiCisJCQkiXHhjOFx4ZTVceDAyXHgxZlx4M2NceDU5XHg3Nlx4OTMiCisJCQkiXHhiMFx4Y2RceGVhXHgwN1x4MjRceDQxXHg1ZVx4N2IiCisJCQkiXHg5OFx4YjVceGQyXHhlZlx4MGNceDI5XHg0Nlx4NjMiCisJCQkiXHg4MFx4OWRceGJhXHhkN1x4ZjRceDExXHgyZVx4NGIiCisJCQkiXHg2OFx4ODVceGEyXHhiZlx4ZGNceGY5XHgxNlx4MzMiCisJCQkiXHg1MFx4NmRceDhhXHhhN1x4YzRceGUxXHhmZVx4MWIiCisJCQkiXHgzOFx4NTVceDcyXHg4Zlx4YWNceGM5XHhlNlx4MDMiCisJCQkiXHgyMFx4M2RceDVhXHg3N1x4OTRceGIxXHhjZVx4ZWIiCisJCQkiXHgwOFx4MjVceDQyXHg1Zlx4N2NceDk5XHhiNlx4ZDMiCisJCQkiXHhmMFx4MGRceDJhXHg0N1x4NjRceDgxXHg5ZVx4YmIiCisJCQkiXHhkOFx4ZjVceDEyXHgyZlx4NGNceDY5XHg4Nlx4YTMiCisJCQkiXHhjMFx4ZGRceGZhXHgxN1x4MzRceDUxXHg2ZVx4OGIiCisJCQkiXHhhOFx4YzVceGUyXHhmZlx4MWNceDM5XHg1Nlx4NzMiCisJCQkiXHg5MFx4YWRceGNhXHhlN1x4MDRceDIxXHgzZVx4NWIiCisJCQkiXHg3OFx4OTVceGIyXHhjZlx4ZWNceDA5XHgyNlx4NDMiCisJCQkiXHg2MFx4N2RceDlhXHhiN1x4ZDRceGYxXHgwZVx4MmIiCisJCQkiXHg0OFx4NjVceDgyXHg5Zlx4YmNceGQ5XHhmNlx4MTMiCisJCQkiXHgzMFx4NGRceDZhXHg4N1x4YTRceGMxXHhkZVx4ZmIiCisJCQkiXHgxOFx4MzVceDUyXHg2Zlx4OGNceGE5XHhjNlx4ZTMiCisJCQkiXHgwMFx4MWZceDNlXHg1ZFx4N2NceDliXHhiYVx4ZDkiCisJCQkiXHhmOFx4MTdceDM2XHg1NVx4NzRceDkzXHhiMlx4ZDEiCisJCQkiXHhmMFx4MGZceDJlXHg0ZFx4NmNceDhiXHhhYVx4YzkiCisJCQkiXHhlOFx4MDdceDI2XHg0NVx4NjRceDgzXHhhMlx4YzEiCisJCQkiXHhlMFx4ZmZceDFlXHgzZFx4NWNceDdiXHg5YVx4YjkiCisJCQkiXHhkOFx4ZjdceDE2XHgzNVx4NTRceDczXHg5Mlx4YjEiCisJCQkiXHhkMFx4ZWZceDBlXHgyZFx4NGNceDZiXHg4YVx4YTkiCisJCQkiXHhjOFx4ZTdceDA2XHgyNVx4NDRceDYzXHg4Mlx4YTEiCisJCQkiXHhjMFx4ZGZceGZlXHgxZFx4M2NceDViXHg3YVx4OTkiCisJCQkiXHhiOFx4ZDdceGY2XHgxNVx4MzRceDUzXHg3Mlx4OTEiCisJCQkiXHhiMFx4Y2ZceGVlXHgwZFx4MmNceDRiXHg2YVx4ODkiCisJCQkiXHhhOFx4YzdceGU2XHgwNVx4MjRceDQzXHg2Mlx4ODEiCisJCQkiXHhhMFx4YmZceGRlXHhmZFx4MWNceDNiXHg1YVx4NzkiCisJCQkiXHg5OFx4YjdceGQ2XHhmNVx4MTRceDMzXHg1Mlx4NzEiCisJCQkiXHg5MFx4YWZceGNlXHhlZFx4MGNceDJiXHg0YVx4NjkiCisJCQkiXHg4OFx4YTdceGM2XHhlNVx4MDRceDIzXHg0Mlx4NjEiCisJCQkiXHg4MFx4OWZceGJlXHhkZFx4ZmNceDFiXHgzYVx4NTkiCisJCQkiXHg3OFx4OTdceGI2XHhkNVx4ZjRceDEzXHgzMlx4NTEiCisJCQkiXHg3MFx4OGZceGFlXHhjZFx4ZWNceDBiXHgyYVx4NDkiCisJCQkiXHg2OFx4ODdceGE2XHhjNVx4ZTRceDAzXHgyMlx4NDEiCisJCQkiXHg2MFx4N2ZceDllXHhiZFx4ZGNceGZiXHgxYVx4MzkiCisJCQkiXHg1OFx4NzdceDk2XHhiNVx4ZDRceGYzXHgxMlx4MzEiCisJCQkiXHg1MFx4NmZceDhlXHhhZFx4Y2NceGViXHgwYVx4MjkiCisJCQkiXHg0OFx4NjdceDg2XHhhNVx4YzRceGUzXHgwMlx4MjEiCisJCQkiXHg0MFx4NWZceDdlXHg5ZFx4YmNceGRiXHhmYVx4MTkiCisJCQkiXHgzOFx4NTdceDc2XHg5NVx4YjRceGQzXHhmMlx4MTEiCisJCQkiXHgzMFx4NGZceDZlXHg4ZFx4YWNceGNiXHhlYVx4MDkiCisJCQkiXHgyOFx4NDdceDY2XHg4NVx4YTRceGMzXHhlMlx4MDEiCisJCQkiXHgyMFx4M2ZceDVlXHg3ZFx4OWNceGJiXHhkYVx4ZjkiCisJCQkiXHgxOFx4MzdceDU2XHg3NVx4OTRceGIzXHhkMlx4ZjEiCisJCQkiXHgxMFx4MmZceDRlXHg2ZFx4OGNceGFiXHhjYVx4ZTkiCisJCQkiXHgwOFx4MjdceDQ2XHg2NVx4ODRceGEzXHhjMlx4ZTEiCisJCQkiXHgwMFx4MjFceDQyXHg2MyIsCiAJCS5pbGVuID0gNDEwMCwKLQkJLnJlc3VsdCA9IHsKLQkJCTB4ZjAsIDB4NWMsIDB4NzQsIDB4YWQsIDB4NGUsIDB4YmMsIDB4OTksIDB4ZTIsCi0JCQkweGFlLCAweGZmLCAweDkxLCAweDNhLCAweDQ0LCAweGNmLCAweDM4LCAweDMyLAotCQkJMHgxZSwgMHhhZCwgMHhhNywgMHhjZCwgMHhhMSwgMHgzOSwgMHg5NSwgMHhhYSwKLQkJCTB4MTAsIDB4YjEsIDB4YjMsIDB4MmUsIDB4MDQsIDB4MzEsIDB4OGYsIDB4ODYsCi0JCQkweGYyLCAweDYyLCAweDc0LCAweDcwLCAweDBjLCAweGE0LCAweDQ2LCAweDA4LAotCQkJMHhhOCwgMHhiNywgMHg5OSwgMHhhOCwgMHhlOSwgMHhkMiwgMHg3MywgMHg3OSwKLQkJCTB4N2UsIDB4NmUsIDB4ZDQsIDB4OGYsIDB4MWUsIDB4YzcsIDB4OGUsIDB4MzEsCi0JCQkweDBiLCAweGZhLCAweDRiLCAweGNlLCAweGZkLCAweGYzLCAweDU3LCAweDcxLAotCQkJMHhlOSwgMHg0NiwgMHgwMywgMHhhNSwgMHgzZCwgMHgzNCwgMHgwMCwgMHhlMiwKLQkJCTB4MTgsIDB4ZmYsIDB4NzUsIDB4NmQsIDB4MDYsIDB4MmQsIDB4MDAsIDB4YWIsCi0JCQkweGI5LCAweDNlLCAweDZjLCAweDU5LCAweGM1LCAweDg0LCAweDA2LCAweGI1LAotCQkJMHg4YiwgMHhkMCwgMHg4OSwgMHg5YywgMHg0YSwgMHg3OSwgMHgxNiwgMHhjNiwKLQkJCTB4M2QsIDB4NzQsIDB4NTQsIDB4ZmEsIDB4NDQsIDB4Y2QsIDB4MjMsIDB4MjYsCi0JCQkweDVjLCAweGNmLCAweDdlLCAweDI4LCAweDkyLCAweDMyLCAweGJmLCAweGRmLAotCQkJMHhhNywgMHgyMCwgMHgzYywgMHg3NCwgMHg1OCwgMHgyYSwgMHg5YSwgMHhkZSwKLQkJCTB4NjEsIDB4MDAsIDB4MWMsIDB4NGYsIDB4ZmYsIDB4NTksIDB4YzQsIDB4MjIsCi0JCQkweGFjLCAweDNjLCAweGQwLCAweGU4LCAweDZjLCAweGY5LCAweDk3LCAweDFiLAotCQkJMHg1OCwgMHg5YiwgMHhhZCwgMHg3MSwgMHhlOCwgMHhhOSwgMHhiNSwgMHgwZCwKLQkJCTB4ZWUsIDB4MmYsIDB4MDQsIDB4MWYsIDB4N2YsIDB4YmMsIDB4OTksIDB4ZWUsCi0JCQkweDg0LCAweGZmLCAweDQyLCAweDYwLCAweGRjLCAweDNhLCAweDE4LCAweGE1LAotCQkJMHg4MSwgMHhmOSwgMHhlZiwgMHhkYywgMHg3YSwgMHgwZiwgMHg2NSwgMHg0MSwKLQkJCTB4MmYsIDB4YTMsIDB4ZDMsIDB4ZjksIDB4YzIsIDB4Y2IsIDB4YzAsIDB4NGQsCi0JCQkweDhmLCAweGQzLCAweDc2LCAweDk2LCAweGFkLCAweDQ5LCAweDZkLCAweDM4LAotCQkJMHgzZCwgMHgzOSwgMHgwYiwgMHg2YywgMHg4MCwgMHhiNywgMHg1NCwgMHg2OSwKLQkJCTB4ZjAsIDB4MmMsIDB4OTAsIDB4MDIsIDB4MjksIDB4MGQsIDB4MWMsIDB4MTIsCi0JCQkweGFkLCAweDU1LCAweGMzLCAweDhiLCAweDY4LCAweGQ5LCAweGNjLCAweGIzLAotCQkJMHhiMiwgMHg2NCwgMHgzMywgMHg5MCwgMHg1ZSwgMHhjYSwgMHg0YiwgMHhlMiwKLQkJCTB4ZmIsIDB4NzUsIDB4ZGMsIDB4NjMsIDB4ZjcsIDB4OWYsIDB4ODIsIDB4NzQsCi0JCQkweGYwLCAweGM5LCAweGFhLCAweDdmLCAweGU5LCAweDJhLCAweDliLCAweDMzLAotCQkJMHhiYywgMHg4OCwgMHgwMCwgMHg3ZiwgMHhjYSwgMHhiMiwgMHgxZiwgMHgxNCwKLQkJCTB4ZGIsIDB4YzUsIDB4OGUsIDB4N2IsIDB4MTEsIDB4M2MsIDB4M2UsIDB4MDgsCi0JCQkweGYzLCAweDgzLCAweGU4LCAweGUwLCAweDk0LCAweDg2LCAweDJlLCAweDkyLAotCQkJMHg3OCwgMHg2YiwgMHgwMSwgMHhjOSwgMHhjNywgMHg4MywgMHhiYSwgMHgyMSwKLQkJCTB4NmEsIDB4MjUsIDB4MTUsIDB4MzMsIDB4NGUsIDB4NDUsIDB4MDgsIDB4ZWMsCi0JCQkweDM1LCAweGRiLCAweGUwLCAweDZlLCAweDMxLCAweDUxLCAweDc5LCAweGE5LAotCQkJMHg0MiwgMHg0NCwgMHg2NSwgMHhjMSwgMHhhMCwgMHhmMSwgMHhmOSwgMHgyYSwKLQkJCTB4NzAsIDB4ZDUsIDB4YjYsIDB4YzYsIDB4YzEsIDB4OGMsIDB4MzksIDB4ZmMsCi0JCQkweDI1LCAweGE2LCAweDU1LCAweGQ5LCAweGRkLCAweDJkLCAweDRjLCAweGVjLAotCQkJMHg0OSwgMHhjNiwgMHhlYiwgMHgwZSwgMHhhOCwgMHgyNSwgMHgyYSwgMHgxNiwKLQkJCTB4MWIsIDB4NjYsIDB4ODQsIDB4ZGEsIDB4ZTIsIDB4OTIsIDB4ZTUsIDB4YzAsCi0JCQkweGM4LCAweDUzLCAweDA3LCAweGFmLCAweDgwLCAweDg0LCAweGVjLCAweGZkLAotCQkJMHhjZCwgMHhkMSwgMHg2ZSwgMHhjZCwgMHg2ZiwgMHg2YSwgMHhmNSwgMHgzNiwKLQkJCTB4YzUsIDB4MTUsIDB4ZTUsIDB4MjUsIDB4N2QsIDB4NzcsIDB4ZDEsIDB4MWEsCi0JCQkweDkzLCAweDM2LCAweGE5LCAweGNmLCAweDdjLCAweGE0LCAweDU0LCAweDRhLAotCQkJMHgwNiwgMHg1MSwgMHg0OCwgMHg0ZSwgMHhmNiwgMHg1OSwgMHg4NywgMHhkMiwKLQkJCTB4MDQsIDB4MDIsIDB4ZWYsIDB4ZDMsIDB4NDQsIDB4ZGUsIDB4NzYsIDB4MzEsCi0JCQkweGIzLCAweDM0LCAweDE3LCAweDFiLCAweDlkLCAweDY2LCAweDExLCAweDlmLAotCQkJMHgxZSwgMHhjYywgMHgxNywgMHhlOSwgMHhjNywgMHgzYywgMHgxYiwgMHhlNywKLQkJCTB4Y2IsIDB4NTAsIDB4MDgsIDB4ZmMsIDB4ZGMsIDB4MmIsIDB4MjQsIDB4ZGIsCi0JCQkweDY1LCAweDgzLCAweGQwLCAweDNiLCAweGUzLCAweDMwLCAweGVhLCAweDk0LAotCQkJMHg2YywgMHhlNywgMHhlOCwgMHgzNSwgMHgzMiwgMHhjNywgMHhkYiwgMHg2NCwKLQkJCTB4YjQsIDB4MDEsIDB4YWIsIDB4MzYsIDB4MmMsIDB4NzcsIDB4MTMsIDB4YWYsCi0JCQkweGY4LCAweDJiLCAweDg4LCAweDNmLCAweDU0LCAweDM5LCAweGM0LCAweDQ0LAotCQkJMHhmZSwgMHhlZiwgMHg2ZiwgMHg2OCwgMHgzNCwgMHhiZSwgMHgwZiwgMHgwNSwKLQkJCTB4MTYsIDB4NmQsIDB4ZjYsIDB4MGEsIDB4MzAsIDB4ZTcsIDB4ZTMsIDB4ZWQsCi0JCQkweGM0LCAweGRlLCAweDNjLCAweDFiLCAweDEzLCAweGQ4LCAweGRiLCAweGZlLAotCQkJMHg0MSwgMHg2MiwgMHhlNSwgMHgyOCwgMHhkNCwgMHg4ZCwgMHhhMywgMHhjNywKLQkJCTB4OTMsIDB4OTcsIDB4YzYsIDB4NDgsIDB4NDUsIDB4MWQsIDB4OWYsIDB4ODMsCi0JCQkweGRmLCAweDRiLCAweDQwLCAweDNlLCAweDQyLCAweDI1LCAweDg3LCAweDgwLAotCQkJMHg0YywgMHg3ZCwgMHhhOCwgMHhkNCwgMHg5OCwgMHgyMywgMHg5NSwgMHg3NSwKLQkJCTB4NDEsIDB4OGMsIDB4ZGEsIDB4NDEsIDB4OWIsIDB4ZDQsIDB4YTcsIDB4MDYsCi0JCQkweGI1LCAweGYxLCAweDcxLCAweDA5LCAweDUzLCAweGJlLCAweGNhLCAweGJmLAotCQkJMHgzMiwgMHgwMywgMHhlZCwgMHhmMCwgMHg1MCwgMHgxYywgMHg1NiwgMHgzOSwKLQkJCTB4NWIsIDB4YTQsIDB4NzUsIDB4MTgsIDB4ZjcsIDB4OWIsIDB4NTgsIDB4ZWYsCi0JCQkweDUzLCAweGZjLCAweDJhLCAweDM4LCAweDIzLCAweDE1LCAweDc1LCAweGNkLAotCQkJMHg0NSwgMHhlNSwgMHg1YSwgMHg4MiwgMHg1NSwgMHhiYSwgMHgyMSwgMHhmYSwKLQkJCTB4ZDQsIDB4YmQsIDB4YzYsIDB4OTQsIDB4N2MsIDB4YzUsIDB4ODAsIDB4MTIsCi0JCQkweGY3LCAweDRiLCAweDMyLCAweGM0LCAweDlhLCAweDgyLCAweGQ4LCAweDI4LAotCQkJMHg4ZiwgMHhkOSwgMHhjMiwgMHgwZiwgMHg2MCwgMHgwMywgMHhiZSwgMHg1ZSwKLQkJCTB4MjEsIDB4ZDYsIDB4NWYsIDB4NTgsIDB4YmYsIDB4NWMsIDB4YjEsIDB4MzIsCi0JCQkweDgyLCAweDhkLCAweGE5LCAweGU1LCAweGYyLCAweDY2LCAweDFhLCAweGMwLAotCQkJMHhhMCwgMHhiYywgMHg1OCwgMHgyZiwgMHg3MSwgMHhmNSwgMHgyZiwgMHhlZCwKLQkJCTB4ZDEsIDB4MjYsIDB4YjksIDB4ZDgsIDB4NDksIDB4NWEsIDB4MDcsIDB4MTksCi0JCQkweDAxLCAweDdjLCAweDU5LCAweGIwLCAweGY4LCAweGE0LCAweGI3LCAweGQzLAotCQkJMHg3YiwgMHgxYSwgMHg4YywgMHgzOCwgMHhmNCwgMHg1MCwgMHhhNCwgMHg1OSwKLQkJCTB4YjAsIDB4Y2MsIDB4NDEsIDB4MGIsIDB4ODgsIDB4N2YsIDB4ZTUsIDB4MzEsCi0JCQkweGIzLCAweDQyLCAweGJhLCAweGEyLCAweDdlLCAweGQ0LCAweDMyLCAweDcxLAotCQkJMHg0NSwgMHg4NywgMHg0OCwgMHhhOSwgMHhjMiwgMHhmMiwgMHg4OSwgMHhiMywKLQkJCTB4ZTQsIDB4YTcsIDB4N2UsIDB4NTIsIDB4MTUsIDB4NjEsIDB4ZmEsIDB4ZmUsCi0JCQkweGM5LCAweGRkLCAweDgxLCAweGViLCAweDEzLCAweGFiLCAweGFiLCAweGMzLAotCQkJMHg5OCwgMHg1OSwgMHhkOCwgMHgxNiwgMHgzZCwgMHgxNCwgMHg3YSwgMHgxYywKLQkJCTB4M2MsIDB4NDEsIDB4OWEsIDB4MTYsIDB4MTYsIDB4OWIsIDB4ZDIsIDB4ZDIsCi0JCQkweDY5LCAweDNhLCAweDI5LCAweDIzLCAweGFjLCAweDg2LCAweDMyLCAweGE1LAotCQkJMHg0OCwgMHg5YywgMHg5ZSwgMHhmMywgMHg0NywgMHg3NywgMHg4MSwgMHg3MCwKLQkJCTB4MjQsIDB4ZTgsIDB4ODUsIDB4ZDIsIDB4ZjUsIDB4YjUsIDB4ZmEsIDB4ZmYsCi0JCQkweDU5LCAweDZhLCAweGQzLCAweDUwLCAweDU5LCAweDQzLCAweDU5LCAweGRlLAotCQkJMHhkOSwgMHhmMSwgMHg1NSwgMHhhNSwgMHgwYywgMHhjMywgMHgxYSwgMHgxYSwKLQkJCTB4MTgsIDB4MzQsIDB4MGQsIDB4MWEsIDB4NjMsIDB4MzMsIDB4ZWQsIDB4MTAsCi0JCQkweGUwLCAweDFkLCAweDJhLCAweDE4LCAweGQyLCAweGMwLCAweDU0LCAweGE4LAotCQkJMHhjYSwgMHhiNSwgMHg5YSwgMHhkMywgMHhkZCwgMHhjYSwgMHg0NSwgMHg4NCwKLQkJCTB4NTAsIDB4ZTcsIDB4MGYsIDB4ZmUsIDB4YTQsIDB4OTksIDB4NWEsIDB4YmUsCi0JCQkweDQzLCAweDJkLCAweDlhLCAweGNiLCAweDkyLCAweDNmLCAweDVhLCAweDFkLAotCQkJMHg4NSwgMHhkOCwgMHhjOSwgMHhkZiwgMHg2OCwgMHhjOSwgMHgxMiwgMHg4MCwKLQkJCTB4NTYsIDB4MGMsIDB4ZGMsIDB4MDAsIDB4ZGMsIDB4M2EsIDB4N2QsIDB4OWQsCi0JCQkweGEzLCAweGEyLCAweGU4LCAweDRkLCAweGJmLCAweGY5LCAweDcwLCAweGEwLAotCQkJMHhhNCwgMHgxMywgMHg0ZiwgMHg2YiwgMHhhZiwgMHgwYSwgMHg4OSwgMHg3ZiwKLQkJCTB4ZGEsIDB4ZjAsIDB4YmYsIDB4OWIsIDB4YzgsIDB4MWQsIDB4ZTUsIDB4ZjgsCi0JCQkweDJlLCAweDhiLCAweDA3LCAweGI1LCAweDczLCAweDFiLCAweGNjLCAweGEyLAotCQkJMHhhNiwgMHhhZCwgMHgzMCwgMHhiYywgMHg3OCwgMHgzYywgMHg1YiwgMHgxMCwKLQkJCTB4ZmEsIDB4NWUsIDB4NjIsIDB4MmQsIDB4OWUsIDB4NjQsIDB4YjMsIDB4MzMsCi0JCQkweGNlLCAweGY5LCAweDFmLCAweDg2LCAweGU3LCAweDhiLCAweGEyLCAweGI4LAotCQkJMHhlOCwgMHg5OSwgMHg1NywgMHg4YywgMHgxMSwgMHhlZCwgMHg2NiwgMHhkOSwKLQkJCTB4M2MsIDB4NzIsIDB4YjksIDB4YzMsIDB4ZTYsIDB4NGUsIDB4MTcsIDB4M2EsCi0JCQkweDZhLCAweGNiLCAweDQyLCAweDI0LCAweDA2LCAweGVkLCAweDNlLCAweDRlLAotCQkJMHhhMywgMHhlOCwgMHg2YSwgMHg5NCwgMHhkYSwgMHgwZCwgMHg0ZSwgMHhkNSwKLQkJCTB4MTQsIDB4MTksIDB4Y2YsIDB4YjYsIDB4MjYsIDB4ZDgsIDB4MmUsIDB4Y2MsCi0JCQkweDY0LCAweDc2LCAweDM4LCAweDQ5LCAweDRkLCAweGZlLCAweDMwLCAweDZkLAotCQkJMHhlNCwgMHhjOCwgMHg4YywgMHg3YiwgMHhjNCwgMHhlMCwgMHgzNSwgMHhiYSwKLQkJCTB4MjIsIDB4NmUsIDB4NzYsIDB4ZTEsIDB4MWEsIDB4ZjIsIDB4NTMsIDB4YzMsCi0JCQkweDI4LCAweGEyLCAweDgyLCAweDFmLCAweDYxLCAweDY5LCAweGFkLCAweGMxLAotCQkJMHg3YiwgMHgyOCwgMHg0YiwgMHgxZSwgMHg2YywgMHg4NSwgMHg5NSwgMHg5YiwKLQkJCTB4NTEsIDB4YjUsIDB4MTcsIDB4N2YsIDB4MTIsIDB4NjksIDB4OGMsIDB4MjQsCi0JCQkweGQ1LCAweGM3LCAweDVhLCAweDVhLCAweDExLCAweDU0LCAweGZmLCAweDVhLAotCQkJMHhmNywgMHgxNiwgMHhjMywgMHg5MSwgMHhhNiwgMHhmMCwgMHhkYywgMHgwYSwKLQkJCTB4YjYsIDB4YTcsIDB4NGEsIDB4MGQsIDB4N2EsIDB4NTgsIDB4ZmUsIDB4YTUsCi0JCQkweGY1LCAweGNiLCAweDhmLCAweDdiLCAweDBlLCAweGVhLCAweDU3LCAweGU3LAotCQkJMHhiZCwgMHg3OSwgMHhkNiwgMHgxYywgMHg4OCwgMHgyMywgMHg2YywgMHhmMiwKLQkJCTB4NGQsIDB4MjksIDB4NzcsIDB4NTMsIDB4MzUsIDB4NmEsIDB4MDAsIDB4OGQsCi0JCQkweGNkLCAweGEzLCAweDU4LCAweGJlLCAweDc3LCAweDk5LCAweDE4LCAweGY4LAotCQkJMHhlNiwgMHhlMSwgMHg4ZiwgMHhlOSwgMHgzNywgMHg4ZiwgMHhlMywgMHhlMiwKLQkJCTB4NWEsIDB4OGEsIDB4OTMsIDB4MjUsIDB4YWYsIDB4ZjMsIDB4NzgsIDB4ODAsCi0JCQkweGJlLCAweGE2LCAweDFiLCAweGM2LCAweGFjLCAweDhiLCAweDFjLCAweDkxLAotCQkJMHg1OCwgMHhlMSwgMHg5ZiwgMHg4OSwgMHgzNSwgMHg5ZCwgMHgxZCwgMHgyMSwKLQkJCTB4MjksIDB4OWYsIDB4ZjQsIDB4OTksIDB4MDIsIDB4MjcsIDB4MGYsIDB4YTgsCi0JCQkweDRmLCAweDc5LCAweDk0LCAweDJiLCAweDMzLCAweDJjLCAweGRhLCAweGEyLAotCQkJMHgyNiwgMHgzOSwgMHg4MywgMHg5NCwgMHhlZiwgMHgyNywgMHhkOCwgMHg1MywKLQkJCTB4OGYsIDB4NjYsIDB4MGQsIDB4ZTQsIDB4NDEsIDB4N2QsIDB4MzQsIDB4Y2QsCi0JCQkweDQzLCAweDdjLCAweDk1LCAweDBhLCAweDUzLCAweGVmLCAweDY2LCAweGRhLAotCQkJMHg3ZSwgMHg5YiwgMHhmMywgMHg5MywgMHhhZiwgMHhkMCwgMHg3MywgMHg3MSwKLQkJCTB4YmEsIDB4NDAsIDB4OWIsIDB4NzQsIDB4ZjgsIDB4ZDcsIDB4ZDcsIDB4NDEsCi0JCQkweDZkLCAweGFmLCAweDcyLCAweDljLCAweDhkLCAweDIxLCAweDg3LCAweDNjLAotCQkJMHhmZCwgMHgwYSwgMHg5MCwgMHhhOSwgMHg0NywgMHg5NiwgMHg5ZSwgMHhkMywKLQkJCTB4ODgsIDB4ZWUsIDB4NzMsIDB4Y2YsIDB4NjYsIDB4MmYsIDB4NTIsIDB4NTYsCi0JCQkweDZkLCAweGE5LCAweDgwLCAweDRjLCAweGUyLCAweDZmLCAweDYyLCAweDg4LAotCQkJMHgzZiwgMHgwZSwgMHg1NCwgMHgxNywgMHg0OCwgMHg4MCwgMHg1ZCwgMHhkMywKLQkJCTB4YzMsIDB4ZGEsIDB4MjUsIDB4M2QsIDB4YTEsIDB4YzgsIDB4Y2IsIDB4OWYsCi0JCQkweDliLCAweDcwLCAweGIzLCAweGExLCAweGViLCAweDA0LCAweDUyLCAweGExLAotCQkJMHhmMiwgMHgyMiwgMHgwZiwgMHhmYywgMHhjOCwgMHgxOCwgMHhmYSwgMHhmOSwKLQkJCTB4ODUsIDB4OWMsIDB4ZjEsIDB4YWMsIDB4ZWIsIDB4MGMsIDB4MDIsIDB4NDYsCi0JCQkweDc1LCAweGQyLCAweGY1LCAweDJjLCAweGUzLCAweGQyLCAweDU5LCAweDk0LAotCQkJMHgxMiwgMHhmMywgMHgzYywgMHhmYywgMHhkNywgMHg5MiwgMHhmYSwgMHgzNiwKLQkJCTB4YmEsIDB4NjEsIDB4MzQsIDB4MzgsIDB4N2MsIDB4ZGEsIDB4NDgsIDB4M2UsCi0JCQkweDA4LCAweGM5LCAweDM5LCAweDIzLCAweDVlLCAweDAyLCAweDJjLCAweDFhLAotCQkJMHgxOCwgMHg3ZSwgMHhiNCwgMHhkOSwgMHhmZCwgMHg5ZSwgMHg0MCwgMHgwMiwKLQkJCTB4YjEsIDB4MzMsIDB4MzcsIDB4MzIsIDB4ZTcsIDB4ZGUsIDB4ZDYsIDB4ZDAsCi0JCQkweDdjLCAweDU4LCAweDY1LCAweDRiLCAweGY4LCAweDM0LCAweDI3LCAweDljLAotCQkJMHg0NCwgMHhiNCwgMHhiZCwgMHhlOSwgMHhlOSwgMHg0YywgMHg3OCwgMHg3ZCwKLQkJCTB4NGIsIDB4OWYsIDB4Y2UsIDB4YjEsIDB4Y2QsIDB4NDcsIDB4YTUsIDB4MzcsCi0JCQkweGU1LCAweDZkLCAweGJkLCAweGI5LCAweDQzLCAweDk0LCAweDBhLCAweGQ0LAotCQkJMHhkNiwgMHhmOSwgMHgwNCwgMHg1ZiwgMHhiNSwgMHg2NiwgMHg2YywgMHgxYSwKLQkJCTB4MzUsIDB4MTIsIDB4ZTMsIDB4MzYsIDB4MjgsIDB4MjcsIDB4MzYsIDB4NTgsCi0JCQkweDAxLCAweDJiLCAweDc5LCAweGU0LCAweGJhLCAweDZkLCAweDEwLCAweDdkLAotCQkJMHg2NSwgMHhkZiwgMHg4NCwgMHg5NSwgMHhmNCwgMHhkNSwgMHhiNiwgMHg4ZiwKLQkJCTB4MmIsIDB4OWYsIDB4OTYsIDB4MDAsIDB4ODYsIDB4NjAsIDB4ZjAsIDB4MjEsCi0JCQkweDc2LCAweGE4LCAweDZhLCAweDhjLCAweDI4LCAweDFjLCAweGIzLCAweDZiLAotCQkJMHg5NywgMHhkNywgMHhiNiwgMHg1MywgMHgyYSwgMHhjYywgMHhhYiwgMHg0MCwKLQkJCTB4OWQsIDB4NjIsIDB4NzksIDB4NTgsIDB4NTIsIDB4ZTYsIDB4NjUsIDB4YjcsCi0JCQkweGFiLCAweDU1LCAweDY3LCAweDljLCAweDg5LCAweDdjLCAweDAzLCAweGIwLAotCQkJMHg3MywgMHg1OSwgMHhjNSwgMHg4MSwgMHhmNSwgMHgxOCwgMHgxNywgMHg1YywKLQkJCTB4ODksIDB4ZjMsIDB4NzgsIDB4MzUsIDB4NDQsIDB4NjIsIDB4NzgsIDB4NzIsCi0JCQkweGQwLCAweDk2LCAweGViLCAweDMxLCAweGU3LCAweDg3LCAweDc3LCAweDE0LAotCQkJMHg5OSwgMHg1MSwgMHhmMiwgMHg1OSwgMHgyNiwgMHg5ZSwgMHhiNSwgMHhhNiwKLQkJCTB4NDUsIDB4ZmUsIDB4NmUsIDB4YmQsIDB4MDcsIDB4NGMsIDB4OTQsIDB4NWEsCi0JCQkweGE1LCAweDdkLCAweGZjLCAweGYxLCAweDJiLCAweDc3LCAweGUyLCAweGZlLAotCQkJMHgxNywgMHhkNCwgMHg4NCwgMHhhMCwgMHhhYywgMHhiNSwgMHhjNywgMHhkYSwKLQkJCTB4YTksIDB4MWEsIDB4YjYsIDB4ZjMsIDB4NzQsIDB4MTEsIDB4YjQsIDB4OWQsCi0JCQkweGZiLCAweDc5LCAweDJlLCAweDA0LCAweDJkLCAweDUwLCAweDI4LCAweDgzLAotCQkJMHhiZiwgMHhjNiwgMHg1MiwgMHhkMywgMHgzNCwgMHhkNiwgMHhlOCwgMHg3YSwKLQkJCTB4YjYsIDB4ZWEsIDB4ZTcsIDB4YTgsIDB4NmMsIDB4MTUsIDB4MWUsIDB4MmMsCi0JCQkweDU3LCAweGJjLCAweDQ4LCAweDRlLCAweDVmLCAweDVjLCAweGI2LCAweDkyLAotCQkJMHhkMiwgMHg0OSwgMHg3NywgMHg4MSwgMHg2ZCwgMHg5MCwgMHg3MCwgMHhhZSwKLQkJCTB4OTgsIDB4YTEsIDB4MDMsIDB4MGQsIDB4NmIsIDB4YjksIDB4NzcsIDB4MTQsCi0JCQkweGYxLCAweDRlLCAweDIzLCAweGQzLCAweGY4LCAweDY4LCAweGJkLCAweGMyLAotCQkJMHhmZSwgMHgwNCwgMHhiNywgMHg1YywgMHhjNSwgMHgxNywgMHg2MCwgMHg4ZiwKLQkJCTB4NjUsIDB4NTQsIDB4YTQsIDB4N2EsIDB4NDIsIDB4ZGMsIDB4MTgsIDB4MGQsCi0JCQkweGI1LCAweGNmLCAweDBmLCAweGQzLCAweGM3LCAweDkxLCAweDY2LCAweDFiLAotCQkJMHg0NSwgMHg0MiwgMHgyNywgMHg3NSwgMHg1MCwgMHhlNSwgMHhlZSwgMHhiOCwKLQkJCTB4N2YsIDB4MzMsIDB4MmMsIDB4YmEsIDB4NGEsIDB4OTIsIDB4NGQsIDB4MmMsCi0JCQkweDNjLCAweGUzLCAweDBkLCAweDgwLCAweDAxLCAweGJhLCAweDBkLCAweDI5LAotCQkJMHhkOCwgMHgzYywgMHhlOSwgMHgxMywgMHgxNiwgMHg1NywgMHhlNiwgMHhlYSwKLQkJCTB4OTQsIDB4NTIsIDB4ZTcsIDB4MDAsIDB4NGQsIDB4MzAsIDB4YjAsIDB4MGYsCi0JCQkweDM1LCAweGI4LCAweGI4LCAweGE3LCAweGIxLCAweGI1LCAweDNiLCAweDQ0LAotCQkJMHhlMSwgMHgyZiwgMHhmZCwgMHg4OCwgMHhlZCwgMHg0MywgMHhlNywgMHg1MiwKLQkJCTB4MTAsIDB4OTMsIDB4YjMsIDB4OGEsIDB4MzAsIDB4NmIsIDB4MGEsIDB4ZjcsCi0JCQkweDIzLCAweGM2LCAweDUwLCAweDlkLCAweDRhLCAweGIwLCAweGRlLCAweGMzLAotCQkJMHhkYywgMHg5YiwgMHgyZiwgMHgwMSwgMHg1NiwgMHgzNiwgMHgwOSwgMHhjNSwKLQkJCTB4MmYsIDB4NmIsIDB4ZmUsIDB4ZjEsIDB4ZDgsIDB4MjcsIDB4NDUsIDB4MDMsCi0JCQkweDMwLCAweDVlLCAweDVjLCAweDViLCAweGI0LCAweDYyLCAweDBlLCAweDFhLAotCQkJMHhhOSwgMHgyMSwgMHgyYiwgMHg5MiwgMHg5NCwgMHg4NywgMHg2MiwgMHg1NywKLQkJCTB4NGMsIDB4MTAsIDB4NzQsIDB4MWEsIDB4ZjEsIDB4MGEsIDB4YzUsIDB4ODQsCi0JCQkweDNiLCAweDllLCAweDcyLCAweDAyLCAweGQ3LCAweGNjLCAweDA5LCAweDU2LAotCQkJMHhiZCwgMHg1NCwgMHhjMSwgMHhmMCwgMHhjMywgMHhlMywgMHhiMywgMHhmOCwKLQkJCTB4ZDIsIDB4MGQsIDB4NjEsIDB4Y2IsIDB4ZWYsIDB4Y2UsIDB4MGQsIDB4MDUsCi0JCQkweGIwLCAweDk4LCAweGQ5LCAweDhlLCAweDRmLCAweGY5LCAweGJjLCAweDkzLAotCQkJMHhhNiwgMHhlYSwgMHhjOCwgMHhjZiwgMHgxMCwgMHg1MywgMHg0YiwgMHhmMSwKLQkJCTB4ZWMsIDB4ZmMsIDB4ODksIDB4ZjksIDB4NjQsIDB4YjAsIDB4MjIsIDB4YmYsCi0JCQkweDllLCAweDU1LCAweDQ2LCAweDlmLCAweDdjLCAweDUwLCAweDhlLCAweDg0LAotCQkJMHg1NCwgMHgyMCwgMHg5OCwgMHhkNywgMHg2YywgMHg0MCwgMHgxZSwgMHhkYiwKLQkJCTB4NjksIDB4MzQsIDB4NzgsIDB4NjEsIDB4MjQsIDB4MjEsIDB4OWMsIDB4OGEsCi0JCQkweGIzLCAweDYyLCAweDMxLCAweDhiLCAweDZlLCAweGY1LCAweDJhLCAweDM1LAotCQkJMHg4NiwgMHgxMywgMHhiMSwgMHg2YywgMHg2NCwgMHgyZSwgMHg0MSwgMHhhNSwKLQkJCTB4MDUsIDB4ZjIsIDB4NDIsIDB4YmEsIDB4ZDIsIDB4M2EsIDB4MGQsIDB4OGUsCi0JCQkweDhhLCAweDU5LCAweDk0LCAweDNjLCAweGNmLCAweDM2LCAweDI3LCAweDgyLAotCQkJMHhjMiwgMHg0NSwgMHhlZSwgMHg1OCwgMHhjZCwgMHg4OCwgMHhiNCwgMHhlYywKLQkJCTB4ZGUsIDB4YjIsIDB4OTYsIDB4MGEsIDB4YWYsIDB4MzgsIDB4NmYsIDB4ODgsCi0JCQkweGQ3LCAweGQ4LCAweGUxLCAweGRmLCAweGI5LCAweDk2LCAweGE5LCAweDBhLAotCQkJMHhiMSwgMHg5NSwgMHgyOCwgMHg4NiwgMHgyMCwgMHhlOSwgMHgxNywgMHg0OSwKLQkJCTB4YTIsIDB4MjksIDB4MzgsIDB4YWEsIDB4YTUsIDB4ZTksIDB4NmUsIDB4ZjEsCi0JCQkweDE5LCAweDI3LCAweGMwLCAweGQ1LCAweDJhLCAweDIyLCAweGMzLCAweDBiLAotCQkJMHhkYiwgMHg3YywgMHg3MywgMHgxMCwgMHhiOSwgMHhiYSwgMHg4OSwgMHg3NiwKLQkJCTB4NTQsIDB4YWUsIDB4N2QsIDB4NzEsIDB4YjMsIDB4OTMsIDB4ZjYsIDB4MzIsCi0JCQkweGU2LCAweDQ3LCAweDQzLCAweDU1LCAweGFjLCAweGEwLCAweDBkLCAweGMyLAotCQkJMHg5MywgMHgyNywgMHg0YSwgMHg4ZSwgMHgwZSwgMHg3NCwgMHgxNSwgMHhjNywKLQkJCTB4MGIsIDB4ODUsIDB4ZDksIDB4MGMsIDB4YTksIDB4MzAsIDB4N2EsIDB4M2UsCi0JCQkweGVhLCAweDhmLCAweDg1LCAweDZkLCAweDNhLCAweDEyLCAweDRmLCAweDcyLAotCQkJMHg2OSwgMHg1OCwgMHg3YSwgMHg4MCwgMHhiYiwgMHhiNSwgMHg5NywgMHhmMywKLQkJCTB4Y2YsIDB4NzAsIDB4ZDIsIDB4NWQsIDB4ZGQsIDB4NGQsIDB4MjEsIDB4NzksCi0JCQkweDU0LCAweDRkLCAweGU0LCAweDA1LCAweGU4LCAweGJkLCAweGMyLCAweDYyLAotCQkJMHhiMSwgMHgzYiwgMHg3NywgMHgxYywgMHhkNiwgMHg1YywgMHhmMywgMHhhMCwKLQkJCTB4NzksIDB4MDAsIDB4YTgsIDB4NmMsIDB4MjksIDB4ZDksIDB4MTgsIDB4MjQsCi0JCQkweDM2LCAweGEyLCAweDQ2LCAweGMwLCAweDk2LCAweDY1LCAweDdmLCAweGJkLAotCQkJMHgyYSwgMHhlZCwgMHgzNiwgMHgxNiwgMHgwYywgMHhhYSwgMHg5ZiwgMHhmNCwKLQkJCTB4YzUsIDB4YjQsIDB4ZTIsIDB4MTIsIDB4ZWQsIDB4NjksIDB4ZWQsIDB4NGYsCi0JCQkweDI2LCAweDJjLCAweDM5LCAweDUyLCAweDg5LCAweDk4LCAweGU3LCAweDJjLAotCQkJMHg5OSwgMHhhNCwgMHg5ZSwgMHhhMywgMHg5YiwgMHg5OSwgMHg0NiwgMHg3YSwKLQkJCTB4M2EsIDB4ZGMsIDB4YTgsIDB4NTksIDB4YTMsIDB4ZGIsIDB4YzMsIDB4M2IsCi0JCQkweDk1LCAweDBkLCAweDNiLCAweDA5LCAweDZlLCAweGVlLCAweDgzLCAweDVkLAotCQkJMHgzMiwgMHg0ZCwgMHhlZCwgMHhhYiwgMHhmYSwgMHg5OCwgMHgxNCwgMHg0ZSwKLQkJCTB4YzMsIDB4MTUsIDB4NDUsIDB4NTMsIDB4NjEsIDB4YzQsIDB4OTMsIDB4YmQsCi0JCQkweDkwLCAweGY0LCAweDk5LCAweDk1LCAweDRjLCAweGU2LCAweDc2LCAweDkyLAotCQkJMHgyOSwgMHg5MCwgMHg0NiwgMHgzMCwgMHg5MiwgMHg2OSwgMHg3ZCwgMHgxMywKLQkJCTB4ZjIsIDB4YTUsIDB4Y2QsIDB4NjksIDB4NDksIDB4NDQsIDB4YjIsIDB4MGYsCi0JCQkweDYzLCAweDQwLCAweDM2LCAweDVmLCAweDA5LCAweGUyLCAweDc4LCAweGY4LAotCQkJMHg5MSwgMHhlMywgMHhlMiwgMHhmYSwgMHgxMCwgMHhmNywgMHhjOCwgMHgyNCwKLQkJCTB4YTgsIDB4ODksIDB4MzIsIDB4NWMsIDB4MzcsIDB4MjUsIDB4MWQsIDB4YjIsCi0JCQkweGVhLCAweDE3LCAweDhhLCAweDBhLCAweGE5LCAweDY0LCAweGMzLCAweDdjLAotCQkJMHgzYywgMHg3YywgMHhiZCwgMHhjNiwgMHg3OSwgMHgzNCwgMHhlNywgMHhlMiwKLQkJCTB4ODUsIDB4OGUsIDB4YmYsIDB4ZjgsIDB4ZGUsIDB4OTIsIDB4YTAsIDB4YWUsCi0JCQkweDIwLCAweGM0LCAweGY2LCAweGJiLCAweDFmLCAweDM4LCAweDE5LCAweDBlLAotCQkJMHhlOCwgMHg3OSwgMHg5YywgMHhhMSwgMHgyMywgMHhlOSwgMHg1NCwgMHg3ZSwKLQkJCTB4MzcsIDB4MmYsIDB4ZTIsIDB4OTQsIDB4MzIsIDB4YWYsIDB4YTAsIDB4MjMsCi0JCQkweDQ5LCAweGU0LCAweGMwLCAweGIzLCAweGFjLCAweDAwLCAweDhmLCAweDM2LAotCQkJMHgwNSwgMHhjNCwgMHhhNiwgMHg5NiwgMHhlYywgMHgwNSwgMHg5OCwgMHg0ZiwKLQkJCTB4OTYsIDB4NjcsIDB4NTcsIDB4MWYsIDB4MjAsIDB4ODYsIDB4MWIsIDB4MmQsCi0JCQkweDY5LCAweGU0LCAweDI5LCAweDkzLCAweDY2LCAweDVmLCAweGFmLCAweDZiLAotCQkJMHg4OCwgMHgyNiwgMHgyYywgMHg2NywgMHgwMiwgMHg0YiwgMHg1MiwgMHhkMCwKLQkJCTB4ODMsIDB4N2EsIDB4NDMsIDB4MWYsIDB4YzAsIDB4NzEsIDB4MTUsIDB4MjUsCi0JCQkweDc3LCAweDY1LCAweDA4LCAweDYwLCAweDExLCAweDc2LCAweDRjLCAweDhkLAotCQkJMHhlZCwgMHhhOSwgMHgyNywgMHhjNiwgMHhiMSwgMHgyYSwgMHgyYywgMHg2YSwKLQkJCTB4NGEsIDB4OTcsIDB4ZjUsIDB4YzYsIDB4YjcsIDB4NzAsIDB4NDIsIDB4ZDMsCi0JCQkweDAzLCAweGQxLCAweDI0LCAweDk1LCAweGVjLCAweDZkLCAweGFiLCAweDM4LAotCQkJMHg3MiwgMHhjZSwgMHhlMiwgMHg4YiwgMHgzMywgMHhkNywgMHg1MSwgMHgwOSwKLQkJCTB4ZGMsIDB4NDUsIDB4ZTAsIDB4MDksIDB4OTYsIDB4MzIsIDB4ZjMsIDB4YzQsCi0JCQkweDg0LCAweGRjLCAweDczLCAweDczLCAweDJkLCAweDFiLCAweDExLCAweDk4LAotCQkJMHhjNSwgMHgwZSwgMHg2OSwgMHgyOCwgMHg5NCwgMHhjNywgMHhiNSwgMHg0ZCwKLQkJCTB4YzgsIDB4OGEsIDB4ZDAsIDB4YWEsIDB4MTMsIDB4MmUsIDB4MTgsIDB4NzQsCi0JCQkweGRkLCAweGQxLCAweDFlLCAweGYzLCAweDkwLCAweGU4LCAweGZjLCAweDlhLAotCQkJMHg3MiwgMHg0YSwgMHgwZSwgMHhkMSwgMHhlNCwgMHhmYiwgMHgwZCwgMHg5NiwKLQkJCTB4ZDEsIDB4MGMsIDB4NzksIDB4ODUsIDB4MWIsIDB4MWMsIDB4ZmUsIDB4ZTEsCi0JCQkweDYyLCAweDhmLCAweDdhLCAweDczLCAweDMyLCAweGFiLCAweGM4LCAweDE4LAotCQkJMHg2OSwgMHhlMywgMHgzNCwgMHgzMCwgMHhkZiwgMHgxMywgMHhhNiwgMHhlNSwKLQkJCTB4ZTgsIDB4MGUsIDB4NjcsIDB4N2YsIDB4ODEsIDB4MTEsIDB4YjQsIDB4NjAsCi0JCQkweGM3LCAweGJkLCAweDc5LCAweDY1LCAweDUwLCAweGRjLCAweGM0LCAweDViLAotCQkJMHhkZSwgMHgzOSwgMHhhNCwgMHgwMSwgMHg3MiwgMHg2MywgMHhmMywgMHhkMSwKLQkJCTB4NjQsIDB4NGUsIDB4ZGYsIDB4ZmMsIDB4MjcsIDB4OTIsIDB4MzcsIDB4MGQsCi0JCQkweDU3LCAweGNkLCAweDExLCAweDRmLCAweDExLCAweDA0LCAweDhlLCAweDFkLAotCQkJMHgxNiwgMHhmNywgMHhjZCwgMHg5MiwgMHg5YSwgMHg5OSwgMHgzMCwgMHgxNCwKLQkJCTB4ZjEsIDB4N2MsIDB4NjcsIDB4MWIsIDB4MWYsIDB4NDEsIDB4MGIsIDB4ZTgsCi0JCQkweDMyLCAweGU4LCAweGI4LCAweGMxLCAweDRmLCAweDU0LCAweDg2LCAweDRmLAotCQkJMHhlNSwgMHg3OSwgMHg4MSwgMHg3MywgMHhjZCwgMHg0MywgMHg1OSwgMHg2OCwKLQkJCTB4NzMsIDB4MDIsIDB4M2IsIDB4NzgsIDB4MjEsIDB4NzIsIDB4NDMsIDB4MDAsCi0JCQkweDQ5LCAweDE3LCAweGY3LCAweDAwLCAweGFmLCAweDY4LCAweDI0LCAweDUzLAotCQkJMHgwNSwgMHgwYSwgMHhjMywgMHgzMywgMHhlMCwgMHgzMywgMHgzZiwgMHg2OSwKLQkJCTB4ZDIsIDB4ODQsIDB4MmYsIDB4MGIsIDB4ZWQsIDB4ZGUsIDB4MDQsIDB4ZjQsCi0JCQkweDExLCAweDk0LCAweDEzLCAweDY5LCAweDUxLCAweDA5LCAweDI4LCAweGRlLAotCQkJMHg1NywgMHg1YywgMHhlZiwgMHhkYywgMHg5YSwgMHg0OSwgMHgxYywgMHgxNywKLQkJCTB4OTcsIDB4ZjMsIDB4OTYsIDB4YzEsIDB4N2YsIDB4NWQsIDB4MmUsIDB4N2QsCi0JCQkweDU1LCAweGI4LCAweGIzLCAweDAyLCAweDA5LCAweGIzLCAweDFmLCAweGU3LAotCQkJMHhjOSwgMHg4ZCwgMHhhMywgMHgzNiwgMHgzNCwgMHg4YSwgMHg3NywgMHgxMywKLQkJCTB4MzAsIDB4NjMsIDB4NGMsIDB4YTUsIDB4Y2QsIDB4YzMsIDB4ZTAsIDB4N2UsCi0JCQkweDA1LCAweGExLCAweDdiLCAweDBjLCAweGNiLCAweDc0LCAweDQ3LCAweDMxLAotCQkJMHg2MiwgMHgwMywgMHg0MywgMHhmMSwgMHg4NywgMHhiNCwgMHhiMCwgMHg4NSwKLQkJCTB4ODcsIDB4OGUsIDB4NGIsIDB4MjUsIDB4YzcsIDB4Y2YsIDB4YWUsIDB4NGIsCi0JCQkweDM2LCAweDQ2LCAweDNlLCAweDYyLCAweGJjLCAweDZmLCAweGViLCAweDVmLAotCQkJMHg3MywgMHhhYywgMHhlNiwgMHgwNywgMHhlZSwgMHhjMSwgMHhhMSwgMHhkNiwKLQkJCTB4YzQsIDB4YWIsIDB4YzksIDB4ZDYsIDB4ODksIDB4NDUsIDB4ZTEsIDB4ZjEsCi0JCQkweDA0LCAweDRlLCAweDFhLCAweDZmLCAweGJiLCAweDRmLCAweDNhLCAweGEzLAotCQkJMHhhMCwgMHhjYiwgMHhhMywgMHgwYSwgMHhkOCwgMHg3MSwgMHgzNSwgMHg1NSwKLQkJCTB4ZTQsIDB4YmMsIDB4MmUsIDB4MDQsIDB4MDYsIDB4ZTYsIDB4ZmYsIDB4NWIsCi0JCQkweDFjLCAweGMwLCAweDExLCAweDdjLCAweGM1LCAweDE3LCAweGYzLCAweDM4LAotCQkJMHhjZiwgMHhlOSwgMHhiYSwgMHgwZiwgMHgwZSwgMHhlZiwgMHgwMiwgMHhjMiwKLQkJCTB4OGQsIDB4YzYsIDB4YmMsIDB4NGIsIDB4NjcsIDB4MjAsIDB4OTUsIDB4ZDcsCi0JCQkweDJjLCAweDQ1LCAweDViLCAweDg2LCAweDQ0LCAweDhjLCAweDZmLCAweDJlLAotCQkJMHg3ZSwgMHg5ZiwgMHgxYywgMHg3NywgMHhiYSwgMHg2YiwgMHgwZSwgMHhhMywKLQkJCTB4NjksIDB4ZGMsIDB4YWIsIDB4MjQsIDB4NTcsIDB4NjAsIDB4NDcsIDB4YzEsCi0JCQkweGQxLCAweGE1LCAweDlkLCAweDIzLCAweGU2LCAweGIxLCAweDM3LCAweGZlLAotCQkJMHg5MywgMHhkMiwgMHg0YywgMHg0NiwgMHhmOSwgMHgwYywgMHhjNiwgMHhmYiwKLQkJCTB4ZDYsIDB4OWQsIDB4OTksIDB4NjksIDB4YWIsIDB4N2EsIDB4MDcsIDB4MGMsCi0JCQkweDY1LCAweGU3LCAweGM0LCAweDA4LCAweDk2LCAweGUyLCAweGE1LCAweDAxLAotCQkJMHgzZiwgMHg0NiwgMHgwNywgMHgwNSwgMHg3ZSwgMHhlOCwgMHg5YSwgMHg5MCwKLQkJCTB4NTAsIDB4ZGMsIDB4ZTksIDB4N2EsIDB4ZWEsIDB4YTEsIDB4MzksIDB4NmUsCi0JCQkweDY2LCAweGU0LCAweDZmLCAweGE1LCAweDVmLCAweGIyLCAweGQ5LCAweDViLAotCQkJMHhmNSwgMHhkYiwgMHgyYSwgMHgzMiwgMHhmMCwgMHgxMSwgMHg2ZiwgMHg3YywKLQkJCTB4MjYsIDB4MTAsIDB4OGYsIDB4M2QsIDB4ODAsIDB4ZTksIDB4NTgsIDB4ZjcsCi0JCQkweGUwLCAweGE4LCAweDU3LCAweGY4LCAweGRiLCAweDBlLCAweGNlLCAweDk5LAotCQkJMHg2MywgMHgxOSwgMHgzZCwgMHhkNSwgMHhlYywgMHgxYiwgMHg3NywgMHg2OSwKLQkJCTB4OTgsIDB4ZjYsIDB4ZTQsIDB4NWYsIDB4NjcsIDB4MTcsIDB4NGIsIDB4MDksCi0JCQkweDg1LCAweDYyLCAweDgyLCAweDcwLCAweDE4LCAweGUyLCAweDlhLCAweDc4LAotCQkJMHhlMiwgMHg2MiwgMHhiZCwgMHhiNCwgMHhmMSwgMHg0MiwgMHhjNiwgMHhmYiwKLQkJCTB4MDgsIDB4ZDAsIDB4YmQsIDB4ZWIsIDB4NGUsIDB4MDksIDB4ZjIsIDB4YzgsCi0JCQkweDFlLCAweGRjLCAweDNkLCAweDMyLCAweDIxLCAweDU2LCAweDljLCAweDRmLAotCQkJMHgzNSwgMHhmMywgMHg2MSwgMHgwNiwgMHg3MiwgMHg4NCwgMHhjNCwgMHgzMiwKLQkJCTB4ZjIsIDB4ZjEsIDB4ZmEsIDB4MGIsIDB4MmYsIDB4YzMsIDB4ZGIsIDB4MDIsCi0JCQkweDA0LCAweGMyLCAweGRlLCAweDU3LCAweDY0LCAweDYwLCAweDhkLCAweGNmLAotCQkJMHhjYiwgMHg4NiwgMHg1ZCwgMHg5NywgMHgzZSwgMHhiMSwgMHg5YywgMHgwMSwKLQkJCTB4ZDYsIDB4MjgsIDB4OGYsIDB4OTksIDB4YmMsIDB4NDYsIDB4ZWIsIDB4MDUsCi0JCQkweGFmLCAweDdlLCAweGI4LCAweDIxLCAweDJhLCAweDU2LCAweDg1LCAweDFjLAotCQkJMHhiMywgMHg3MSwgMHhhMCwgMHhkZSwgMHhjYSwgMHg5NiwgMHhmMSwgMHg3OCwKLQkJCTB4NDksIDB4YTIsIDB4OTksIDB4ODEsIDB4ODAsIDB4NWMsIDB4MDEsIDB4ZjUsCi0JCQkweGEwLCAweGEyLCAweDU2LCAweDYzLCAweGUyLCAweDcwLCAweDA3LCAweGE1LAotCQkJMHg5NSwgMHhkNiwgMHg4NSwgMHhlYiwgMHgzNiwgMHg5ZSwgMHhhOSwgMHg1MSwKLQkJCTB4NjYsIDB4NTYsIDB4NWYsIDB4MWQsIDB4MDIsIDB4MTksIDB4ZTIsIDB4ZjYsCi0JCQkweDRmLCAweDczLCAweDM4LCAweDA5LCAweDc1LCAweDY0LCAweDQ4LCAweGUwLAotCQkJMHhmMSwgMHg3ZSwgMHgwZSwgMHhlOCwgMHg5ZCwgMHhmOSwgMHhlZCwgMHg5NCwKLQkJCTB4ZmUsIDB4MTYsIDB4MjYsIDB4NjIsIDB4NDksIDB4NzQsIDB4ZjQsIDB4YjAsCi0JCQkweGQ0LCAweGE5LCAweDZjLCAweGIwLCAweGZkLCAweDUzLCAweGU5LCAweDgxLAotCQkJMHhlMCwgMHg3YSwgMHhiZiwgMHhjZiwgMHhiNSwgMHhjNCwgMHgwMSwgMHg4MSwKLQkJCTB4NzksIDB4OTksIDB4NzcsIDB4MDEsIDB4M2IsIDB4ZTksIDB4YTIsIDB4YjYsCi0JCQkweGU2LCAweDZhLCAweDhhLCAweDllLCAweDU2LCAweDFjLCAweDhkLCAweDFlLAotCQkJMHg4ZiwgMHgwNiwgMHg1NSwgMHgyYywgMHg2YywgMHhkYywgMHg5MiwgMHg4NywKLQkJCTB4NjQsIDB4M2IsIDB4NGIsIDB4MTksIDB4YTEsIDB4MTMsIDB4NjQsIDB4MWQsCi0JCQkweDRhLCAweGU5LCAweGMwLCAweDAwLCAweGI4LCAweDk1LCAweGVmLCAweDZiLAotCQkJMHgxYSwgMHg4NiwgMHg2ZCwgMHgzNywgMHg1MiwgMHgwMiwgMHhjMiwgMHhlMCwKLQkJCTB4YzgsIDB4YmIsIDB4NDIsIDB4MGMsIDB4MDIsIDB4MjEsIDB4NGEsIDB4YzksCi0JCQkweGVmLCAweGEwLCAweDU0LCAweGU0LCAweDVlLCAweDE2LCAweDUzLCAweDgxLAotCQkJMHg3MCwgMHg2MiwgMHgxMCwgMHhhZiwgMHhkZSwgMHhiOCwgMHhiNSwgMHhkMywKLQkJCTB4ZTgsIDB4NWUsIDB4NmMsIDB4YzMsIDB4OGEsIDB4M2UsIDB4MTgsIDB4MDcsCi0JCQkweGYyLCAweDJmLCAweDdkLCAweGE3LCAweGUxLCAweDNkLCAweDRlLCAweGI0LAotCQkJMHgyNiwgMHhhNywgMHhhMywgMHg5MywgMHg4NiwgMHhiMiwgMHgwNCwgMHgxZSwKLQkJCTB4NTMsIDB4NWQsIDB4ODYsIDB4ZDYsIDB4ZGUsIDB4NjUsIDB4Y2EsIDB4ZTMsCi0JCQkweDRlLCAweGMxLCAweGNmLCAweGVmLCAweGM4LCAweDcwLCAweDFiLCAweDgzLAotCQkJMHgxMywgMHhkZCwgMHgxOCwgMHg4YiwgMHgwZCwgMHg3NiwgMHhkMiwgMHhmNiwKLQkJCTB4MzcsIDB4N2EsIDB4OTMsIDB4N2EsIDB4NTAsIDB4MTEsIDB4OWYsIDB4OTYsCi0JCQkweDg2LCAweDI1LCAweGZkLCAweGFjLCAweGRjLCAweGJlLCAweDE4LCAweDkzLAotCQkJMHgxOSwgMHg2YiwgMHhlYywgMHg1OCwgMHg0ZiwgMHhiOSwgMHg3NSwgMHhhNywKLQkJCTB4ZGQsIDB4M2YsIDB4MmYsIDB4ZWMsIDB4YzgsIDB4NWEsIDB4ODQsIDB4YWIsCi0JCQkweGQ1LCAweGU0LCAweDhhLCAweDA3LCAweGY2LCAweDRkLCAweDIzLCAweGQ2LAotCQkJMHgwMywgMHhmYiwgMHgwMywgMHg2YSwgMHhlYSwgMHg2NiwgMHhiZiwgMHhkNCwKLQkJCTB4YjEsIDB4MzQsIDB4ZmIsIDB4NzgsIDB4ZTksIDB4NTUsIDB4ZGMsIDB4N2MsCi0JCQkweDNkLCAweDljLCAweGU1LCAweDlhLCAweGFjLCAweGMzLCAweDdhLCAweDgwLAotCQkJMHgyNCwgMHg2ZCwgMHhhMCwgMHhlZiwgMHgyNSwgMHg3YywgMHhiNywgMHhlYSwKLQkJCTB4Y2UsIDB4NGQsIDB4NWYsIDB4MTgsIDB4NjAsIDB4Y2UsIDB4ODcsIDB4MjIsCi0JCQkweDY2LCAweDJmLCAweGQ1LCAweGRkLCAweGRkLCAweDAyLCAweDIxLCAweDc1LAotCQkJMHg4MiwgMHhhMCwgMHgxZiwgMHg1OCwgMHhjNiwgMHhkMywgMHg2MiwgMHhmNywKLQkJCTB4MzIsIDB4ZDgsIDB4YWYsIDB4MWUsIDB4MDcsIDB4NzcsIDB4NTEsIDB4OTYsCi0JCQkweGQ1LCAweDZiLCAweDFlLCAweDdlLCAweDgwLCAweDAyLCAweGU4LCAweDY3LAotCQkJMHhlYSwgMHgxNywgMHgwYiwgMHgxMCwgMHhkMiwgMHgzZiwgMHgyOCwgMHgyNSwKLQkJCTB4NGYsIDB4MDUsIDB4NzcsIDB4MDIsIDB4MTQsIDB4NjksIDB4ZjAsIDB4MmMsCi0JCQkweGJlLCAweDBjLCAweGYxLCAweDc0LCAweDMwLCAweGQxLCAweGI5LCAweDliLAotCQkJMHhmYywgMHg4YywgMHhiYiwgMHgwNCwgMHgxNiwgMHhkOSwgMHhiYSwgMHhjMywKLQkJCTB4YmMsIDB4OTEsIDB4OGEsIDB4YzQsIDB4MzAsIDB4YTQsIDB4YjAsIDB4MTIsCi0JCQkweDRjLCAweDIxLCAweDg3LCAweGNiLCAweGM5LCAweDFkLCAweDE2LCAweDk2LAotCQkJMHgwNywgMHg2ZiwgMHgyMywgMHg1NCwgMHhiOSwgMHg2ZiwgMHg3OSwgMHhlNSwKLQkJCTB4NjQsIDB4YzAsIDB4NjQsIDB4ZGEsIDB4YjEsIDB4YWUsIDB4ZGQsIDB4NjAsCi0JCQkweDZjLCAweDFhLCAweDlkLCAweGQzLCAweDA0LCAweDhlLCAweDQ1LCAweGIwLAotCQkJMHg5MiwgMHg2MSwgMHhkMCwgMHg0OCwgMHg4MSwgMHhlZCwgMHg1ZSwgMHgxZCwKLQkJCTB4YTAsIDB4YzksIDB4YTQsIDB4MzMsIDB4YzcsIDB4MTMsIDB4NTEsIDB4NWQsCi0JCQkweDdmLCAweDgzLCAweDczLCAweGI2LCAweDcwLCAweDE4LCAweDY1LCAweDNlLAotCQkJMHgyZiwgMHgwZSwgMHg3YSwgMHgxMiwgMHgzOSwgMHg5OCwgMHhhYiwgMHhkOCwKLQkJCTB4N2UsIDB4NmYsIDB4YTMsIDB4ZDEsIDB4YmEsIDB4NTYsIDB4YWQsIDB4YmQsCi0JCQkweGYwLCAweDAzLCAweDAxLCAweDFjLCAweDg1LCAweDM1LCAweDlmLCAweGViLAotCQkJMHgxOSwgMHg2MywgMHhhMSwgMHhhZiwgMHhmZSwgMHgyZCwgMHgzNSwgMHg1MCwKLQkJCTB4MzksIDB4YTAsIDB4NjUsIDB4N2MsIDB4OTUsIDB4N2UsIDB4NmIsIDB4ZmUsCi0JCQkweGMxLCAweGFjLCAweDA3LCAweDdjLCAweDk4LCAweDRmLCAweGJlLCAweDU3LAotCQkJMHhhNywgMHgyMiwgMHhlYywgMHhlMiwgMHg3ZSwgMHgyOSwgMHgwOSwgMHg1MywKLQkJCTB4ZTgsIDB4YmYsIDB4YjQsIDB4N2UsIDB4M2YsIDB4OGYsIDB4ZmMsIDB4MTQsCi0JCQkweGNlLCAweDU0LCAweGY5LCAweDE4LCAweDU4LCAweGI1LCAweGZmLCAweDQ0LAotCQkJMHgwNSwgMHg5ZCwgMHhjZSwgMHgxYiwgMHhiNiwgMHg4MiwgMHgyMywgMHhjOCwKLQkJCTB4MmUsIDB4YmMsIDB4NjksIDB4YmIsIDB4NGEsIDB4MjksIDB4MGYsIDB4NjUsCi0JCQkweDk0LCAweGYwLCAweDYzLCAweDA2LCAweDBlLCAweGVmLCAweDhjLCAweGJkLAotCQkJMHhmZiwgMHhmZCwgMHhiMCwgMHgyMSwgMHg2ZSwgMHg1NywgMHgwNSwgMHg3NSwKLQkJCTB4ZGEsIDB4ZDUsIDB4YzQsIDB4ZWIsIDB4OGQsIDB4MzIsIDB4ZjcsIDB4NTAsCi0JCQkweGQzLCAweDZmLCAweDIyLCAweGVkLCAweDVmLCAweDhlLCAweGEyLCAweDViLAotCQkJMHg4MCwgMHg4YywgMHhjOCwgMHg3OCwgMHg0MCwgMHgyNCwgMHg0YiwgMHg4OSwKLQkJCTB4MzAsIDB4Y2UsIDB4N2EsIDB4OTcsIDB4MGUsIDB4YzQsIDB4YWYsIDB4ZWYsCi0JCQkweDliLCAweGI0LCAweGNkLCAweDY2LCAweDc0LCAweDE0LCAweDA0LCAweDJiLAotCQkJMHhmNywgMHhjZSwgMHgwYiwgMHgxYywgMHg2ZSwgMHhjMiwgMHg3OCwgMHg4YywKLQkJCTB4Y2EsIDB4YzUsIDB4ZDAsIDB4MWMsIDB4OTUsIDB4NGEsIDB4OTEsIDB4MmQsCi0JCQkweGE3LCAweDIwLCAweGViLCAweDg2LCAweDUyLCAweGI3LCAweDY3LCAweGQ4LAotCQkJMHgwYywgMHhkNiwgMHgwNCwgMHgxNCwgMHhkZSwgMHg1MSwgMHg3NCwgMHg3NSwKLQkJCTB4ZTcsIDB4MTEsIDB4YjQsIDB4ODcsIDB4YTMsIDB4M2QsIDB4MmQsIDB4YWQsCi0JCQkweDRmLCAweGVmLCAweGEwLCAweDBmLCAweDcwLCAweDAwLCAweDZkLCAweDEzLAotCQkJMHgxOSwgMHgxZCwgMHg0MSwgMHg1MCwgMHhlOSwgMHhkOCwgMHhmMCwgMHgzMiwKLQkJCTB4NzEsIDB4YmMsIDB4ZDMsIDB4MTEsIDB4ZjIsIDB4YWMsIDB4YmUsIDB4YWYsCi0JCQkweDc1LCAweDQ2LCAweDY1LCAweDRlLCAweDA3LCAweDM0LCAweDM3LCAweGEzLAotCQkJMHg4OSwgMHhmZSwgMHg3NSwgMHhkNCwgMHg3MCwgMHg0YywgMHhjNiwgMHgzZiwKLQkJCTB4NjksIDB4MjQsIDB4MGUsIDB4MzgsIDB4NjcsIDB4NDMsIDB4OGMsIDB4ZGUsCi0JCQkweDA2LCAweGI1LCAweGI4LCAweGU3LCAweGM0LCAweGYwLCAweDQxLCAweDhmLAotCQkJMHhmMCwgMHhiZCwgMHgyZiwgMHgwYiwgMHhiOSwgMHgxOCwgMHhmOCwgMHhkZSwKLQkJCTB4NjQsIDB4YjEsIDB4ZGIsIDB4ZWUsIDB4MDAsIDB4NTAsIDB4NzcsIDB4ZTEsCi0JCQkweGM3LCAweGZmLCAweGE2LCAweGZhLCAweGRkLCAweDcwLCAweGY0LCAweGUzLAotCQkJMHg5MywgMHhlOSwgMHg3NywgMHgzNSwgMHgzZCwgMHg0YiwgMHgyZiwgMHgyYiwKLQkJCTB4NmQsIDB4NTUsIDB4ZjAsIDB4ZmMsIDB4ODgsIDB4NTQsIDB4NGUsIDB4ODksCi0JCQkweGMxLCAweDhhLCAweDIzLCAweDMxLCAweDJkLCAweDE0LCAweDJhLCAweGI4LAotCQkJMHgxYiwgMHgxNSwgMHhkZCwgMHg5ZSwgMHg2ZSwgMHg3YiwgMHhkYSwgMHgwNSwKLQkJCTB4OTEsIDB4N2QsIDB4NjIsIDB4NjQsIDB4OTYsIDB4NzIsIDB4ZGUsIDB4ZmMsCi0JCQkweGMxLCAweGVjLCAweGYwLCAweDIzLCAweDUxLCAweDZmLCAweGRiLCAweDViLAotCQkJMHgxZCwgMHgwOCwgMHg1NywgMHhjZSwgMHgwOSwgMHhiOCwgMHhmNiwgMHhjZCwKLQkJCTB4OGQsIDB4OTUsIDB4ZjIsIDB4MjAsIDB4YmYsIDB4MGYsIDB4MjAsIDB4NTcsCi0JCQkweDk4LCAweDgxLCAweDg0LCAweDRmLCAweDE1LCAweDVjLCAweDc2LCAweGU3LAotCQkJMHgzZSwgMHgwYSwgMHgzYSwgMHg2YywgMHhjNCwgMHg4YSwgMHhiZSwgMHg3OCwKLQkJCTB4NzQsIDB4NzcsIDB4YzMsIDB4MDksIDB4NGIsIDB4NWQsIDB4NDgsIDB4ZTQsCi0JCQkweGM4LCAweGNiLCAweDBiLCAweGVhLCAweDE3LCAweDI4LCAweGNmLCAweGNmLAotCQkJMHgzMSwgMHgzMiwgMHg0NCwgMHhhNCwgMHhlNSwgMHgwZSwgMHgxYSwgMHg5OCwKLQkJCTB4OTQsIDB4YzQsIDB4ZjAsIDB4ZmYsIDB4YWUsIDB4M2UsIDB4NDQsIDB4ZTgsCi0JCQkweGE1LCAweGIzLCAweGI1LCAweDM3LCAweDJmLCAweGU4LCAweGFmLCAweDZmLAotCQkJMHgyOCwgMHhjMSwgMHgzNywgMHg1ZiwgMHgzMSwgMHhkMiwgMHhiOSwgMHgzMywKLQkJCTB4YjEsIDB4YjIsIDB4NTIsIDB4OTQsIDB4NzUsIDB4MmMsIDB4MjksIDB4NTksCi0JCQkweDA2LCAweGMyLCAweDI1LCAweGU4LCAweDcxLCAweDY1LCAweDRlLCAweGVkLAotCQkJMHhjMCwgMHg5YywgMHhiMSwgMHhiYiwgMHgyNSwgMHhkYywgMHg2YywgMHhlNywKLQkJCTB4NGIsIDB4YTUsIDB4N2EsIDB4NTQsIDB4N2EsIDB4NjAsIDB4ZmYsIDB4N2EsCi0JCQkweGUwLCAweDUwLCAweDQwLCAweDk2LCAweDM1LCAweDYzLCAweGU0LCAweDBiLAotCQkJMHg3NiwgMHhiZCwgMHhhNCwgMHg2NSwgMHgwMCwgMHgxYiwgMHg1NywgMHg4OCwKLQkJCTB4YWUsIDB4ZWQsIDB4MzksIDB4ODgsIDB4NDIsIDB4MTEsIDB4M2MsIDB4ZWQsCi0JCQkweDg1LCAweDY3LCAweDdkLCAweGI5LCAweDY4LCAweDgyLCAweGU5LCAweDQzLAotCQkJMHgzYywgMHg0NywgMHg1MywgMHhmYSwgMHhlOCwgMHhmOCwgMHg5ZiwgMHgxZiwKLQkJCTB4OWYsIDB4ZWYsIDB4MGYsIDB4ZjcsIDB4MzAsIDB4ZDksIDB4MzAsIDB4MGUsCi0JCQkweGI5LCAweDlmLCAweDY5LCAweDE4LCAweDJmLCAweDdlLCAweGY4LCAweGY4LAotCQkJMHhmOCwgMHg4YywgMHgwZiwgMHhkNCwgMHgwMiwgMHg0ZCwgMHhlYSwgMHhjZCwKLQkJCTB4MGEsIDB4OWMsIDB4NmYsIDB4NzEsIDB4NmQsIDB4NWEsIDB4NGMsIDB4NjAsCi0JCQkweGNlLCAweDIwLCAweDU2LCAweDMyLCAweGM2LCAweGM1LCAweDk5LCAweDFmLAotCQkJMHgwOSwgMHhlNiwgMHg0ZSwgMHgxOCwgMHgxYSwgMHgxNSwgMHgxMywgMHhhOCwKLQkJCTB4N2QsIDB4YjEsIDB4NmIsIDB4YzAsIDB4YjIsIDB4NmQsIDB4ZjgsIDB4MjYsCi0JCQkweDY2LCAweGY4LCAweDNkLCAweDE4LCAweDc0LCAweDcwLCAweDY2LCAweDdhLAotCQkJMHgzNCwgMHgxNywgMHhkZSwgMHhiYSwgMHg0NywgMHhmMSwgMHgwNiwgMHgxOCwKLQkJCTB4Y2IsIDB4YWYsIDB4ZWIsIDB4NGEsIDB4MWUsIDB4OGYsIDB4YTcsIDB4NzcsCi0JCQkweGUwLCAweDNiLCAweDc4LCAweDYyLCAweDY2LCAweGM5LCAweDEwLCAweGVhLAotCQkJMHgxZiwgMHhiNywgMHgyOSwgMHgwYSwgMHg0NSwgMHhhMSwgMHgxZCwgMHgxZSwKLQkJCTB4MWQsIDB4ZTIsIDB4NjUsIDB4NjEsIDB4NTAsIDB4OWMsIDB4ZDcsIDB4MDUsCi0JCQkweGYyLCAweDBiLCAweDViLCAweDEyLCAweDYxLCAweDAyLCAweGM4LCAweGU1LAotCQkJMHg2MywgMHg0ZiwgMHgyMCwgMHgwYywgMHgwNywgMHgxNywgMHgzMywgMHg1ZSwKLQkJCTB4MDMsIDB4OWEsIDB4NTMsIDB4MGYsIDB4MmUsIDB4NTUsIDB4ZmUsIDB4NTAsCi0JCQkweDQzLCAweDdkLCAweGQwLCAweGI2LCAweDdlLCAweDVhLCAweGRhLCAweGFlLAotCQkJMHg1OCwgMHhlZiwgMHgxNSwgMHhhOSwgMHg4MywgMHhkOSwgMHg0NiwgMHhiMSwKLQkJCTB4NDIsIDB4YWEsIDB4ZjUsIDB4MDIsIDB4NmMsIDB4Y2UsIDB4OTIsIDB4MDYsCi0JCQkweDFiLCAweGRiLCAweDY2LCAweDQ1LCAweDkxLCAweDc5LCAweGMyLCAweDJkLAotCQkJMHhlNiwgMHg1MywgMHhkMywgMHgxNCwgMHhmZCwgMHhiYiwgMHg0NCwgMHg2MywKLQkJCTB4YzYsIDB4ZDcsIDB4M2QsIDB4N2EsIDB4MGMsIDB4NzUsIDB4NzgsIDB4OWQsCi0JCQkweDVjLCAweGE2LCAweDM5LCAweGIzLCAweGU1LCAweDYzLCAweGNhLCAweDhiLAotCQkJMHhmZSwgMHhkMywgMHhlZiwgMHg2MCwgMHg4MywgMHhmNiwgMHg4ZSwgMHg3MCwKLQkJCTB4YjYsIDB4NjcsIDB4YzcsIDB4NzcsIDB4ZWQsIDB4MjMsIDB4ZWYsIDB4NGMsCi0JCQkweGYwLCAweGVkLCAweDJkLCAweDA3LCAweDU5LCAweDZmLCAweGMxLCAweDAxLAotCQkJMHgzNCwgMHgzNywgMHgwOCwgMHhhYiwgMHhkOSwgMHgxZiwgMHgwOSwgMHhiMSwKLQkJCTB4Y2UsIDB4NWIsIDB4MTcsIDB4ZmYsIDB4NzQsIDB4ZjgsIDB4OWMsIDB4ZDUsCi0JCQkweDJjLCAweDU2LCAweDM5LCAweDc5LCAweDBmLCAweDY5LCAweDQ0LCAweDc1LAotCQkJMHg1OCwgMHgyNywgMHgwMSwgMHhjNCwgMHhiZiwgMHhhNywgMHhhMSwgMHgxZCwKLQkJCTB4OTAsIDB4MTcsIDB4NzcsIDB4ODYsIDB4NWEsIDB4M2YsIDB4ZDksIDB4ZDEsCi0JCQkweDBlLCAweGEwLCAweDEwLCAweGY4LCAweGVjLCAweDFlLCAweGE1LCAweDdmLAotCQkJMHg1ZSwgMHgzNiwgMHhkMSwgMHhlMywgMHgwNCwgMHgyYywgMHg3MCwgMHhmNywKLQkJCTB4OGUsIDB4YzAsIDB4OTgsIDB4MmYsIDB4NmMsIDB4OTQsIDB4MmIsIDB4NDEsCi0JCQkweGI3LCAweDYwLCAweDAwLCAweGI3LCAweDJlLCAweGI4LCAweDAyLCAweDhkLAotCQkJMHhiOCwgMHhiMCwgMHhkMywgMHg4NiwgMHhiYSwgMHgxZCwgMHhkNywgMHg5MCwKLQkJCTB4ZDYsIDB4YjYsIDB4ZTEsIDB4ZmMsIDB4ZDcsIDB4ZDgsIDB4MjgsIDB4MDYsCi0JCQkweDYzLCAweDliLCAweGNlLCAweDYxLCAweDI0LCAweDc5LCAweGMwLCAweDcwLAotCQkJMHg1MiwgMHhkMCwgMHhiNiwgMHhkNCwgMHgyOCwgMHg5NSwgMHgyNCwgMHg4NywKLQkJCTB4MDMsIDB4MWYsIDB4YjcsIDB4OWEsIDB4ZGEsIDB4YTMsIDB4ZmIsIDB4NTIsCi0JCQkweDViLCAweDY4LCAweGU3LCAweDRjLCAweDhjLCAweDI0LCAweGUxLCAweDQyLAotCQkJMHhmNywgMHhkNSwgMHhmZCwgMHhhZCwgMHgwNiwgMHgzMiwgMHg5ZiwgMHhiYSwKLQkJCTB4YzEsIDB4ZmMsIDB4ZGQsIDB4YzYsIDB4ZmMsIDB4ZmMsIDB4YjMsIDB4MzgsCi0JCQkweDc0LCAweDU2LCAweDU4LCAweDQwLCAweDAyLCAweDM3LCAweDUyLCAweDJjLAotCQkJMHg1NSwgMHhjYywgMHhiMywgMHg5ZSwgMHg3YSwgMHhlOSwgMHhkNCwgMHgzOCwKLQkJCTB4NDEsIDB4NWUsIDB4MGMsIDB4MzUsIDB4ZTIsIDB4MTEsIDB4ZDEsIDB4MTMsCi0JCQkweGY4LCAweGI3LCAweDhkLCAweDcyLCAweDZiLCAweDIyLCAweDJhLCAweGIwLAotCQkJMHhkYiwgMHgwOCwgMHhiYSwgMHgzNSwgMHhiOSwgMHgzZiwgMHhjOCwgMHhkMywKLQkJCTB4MjQsIDB4OTAsIDB4ZWMsIDB4NTgsIDB4ZDIsIDB4MDksIDB4YzcsIDB4MmQsCi0JCQkweGVkLCAweDM4LCAweDgwLCAweDM2LCAweDcyLCAweDQzLCAweDI3LCAweDQ5LAotCQkJMHg0YSwgMHg4MCwgMHg4YSwgMHhhMiwgMHhlOCwgMHhkMywgMHhkYSwgMHgzMCwKLQkJCTB4N2QsIDB4YjYsIDB4ODIsIDB4MzcsIDB4ODYsIDB4OTIsIDB4ODYsIDB4M2UsCi0JCQkweDA4LCAweGIyLCAweDI4LCAweDVhLCAweDU1LCAweDQ0LCAweDI0LCAweDdkLAotCQkJMHg0MCwgMHg0OCwgMHg4YSwgMHhiNiwgMHg4OSwgMHg1OCwgMHgwOCwgMHhhMCwKLQkJCTB4ZDYsIDB4NmQsIDB4M2EsIDB4MTcsIDB4YmYsIDB4ZjYsIDB4NTQsIDB4YTIsCi0JCQkweGY1LCAweGQzLCAweDhjLCAweDBmLCAweDc4LCAweDEyLCAweDU3LCAweDhiLAotCQkJMHhkNSwgMHhjMiwgMHhmZCwgMHg1OCwgMHg1YiwgMHg3ZiwgMHgzOCwgMHhlMywKLQkJCTB4Y2MsIDB4YjcsIDB4N2MsIDB4NDgsIDB4YjMsIDB4MjAsIDB4ZTgsIDB4ODEsCi0JCQkweDE0LCAweDMyLCAweDQ1LCAweDA1LCAweGUwLCAweGRiLCAweDlmLCAweDc1LAotCQkJMHg4NSwgMHhiNCwgMHg2YSwgMHhmYywgMHg5NSwgMHhlMywgMHg1NCwgMHgyMiwKLQkJCTB4MTIsIDB4ZWUsIDB4MzAsIDB4ZmUsIDB4ZDgsIDB4MzAsIDB4ZWYsIDB4MzQsCi0JCQkweDUwLCAweGFiLCAweDQ2LCAweDMwLCAweDk4LCAweDJmLCAweGI3LCAweGMwLAotCQkJMHgxNSwgMHhhMiwgMHg4MywgMHhiNiwgMHhmMiwgMHgwNiwgMHgyMSwgMHhhMiwKLQkJCTB4YzMsIDB4MjYsIDB4MzcsIDB4MTQsIDB4ZDEsIDB4NGQsIDB4YjUsIDB4MTAsCi0JCQkweDUyLCAweDc2LCAweDRkLCAweDZhLCAweGVlLCAweGI1LCAweDJiLCAweDE1LAotCQkJMHhiNywgMHhmOSwgMHg1MSwgMHhlOCwgMHgyYSwgMHhhZiwgMHhjNywgMHhmYSwKLQkJCTB4NzcsIDB4YWYsIDB4YjAsIDB4MDUsIDB4NGQsIDB4ZDEsIDB4NjgsIDB4OGUsCi0JCQkweDc0LCAweDA1LCAweDlmLCAweDlkLCAweDkzLCAweGE1LCAweDNlLCAweDdmLAotCQkJMHg0ZSwgMHg1ZiwgMHg5ZCwgMHhjYiwgMHgwOSwgMHhjNywgMHg4MywgMHhlMywKLQkJCTB4MDIsIDB4OWQsIDB4MjcsIDB4MWYsIDB4ZWYsIDB4ODUsIDB4MDUsIDB4OGQsCi0JCQkweGVjLCAweDU1LCAweDg4LCAweDBmLCAweDBkLCAweDdjLCAweDRjLCAweGU4LAotCQkJMHhhMSwgMHg3NSwgMHhhMCwgMHhkOCwgMHgwNiwgMHg0NywgMHgxNCwgMHhlZiwKLQkJCTB4YWEsIDB4NjEsIDB4Y2YsIDB4MjYsIDB4MTUsIDB4YWQsIDB4ZDgsIDB4YTMsCi0JCQkweGFhLCAweDc1LCAweGYyLCAweDc4LCAweDRhLCAweDVhLCAweDYxLCAweGRmLAotCQkJMHg4YiwgMHhjNywgMHgwNCwgMHhiYywgMHhiMiwgMHgzMiwgMHhkMiwgMHg3ZSwKLQkJCTB4NDIsIDB4ZWUsIDB4YjQsIDB4MmYsIDB4NTEsIDB4ZmYsIDB4N2IsIDB4MmUsCi0JCQkweGQzLCAweDAyLCAweGU4LCAweGRjLCAweDVkLCAweDBkLCAweDUwLCAweGRjLAotCQkJMHhhZSwgMHhiNywgMHg0NiwgMHhmOSwgMHhhOCwgMHhlNiwgMHhkMCwgMHgxNiwKLQkJCTB4Y2MsIDB4ZTYsIDB4MmMsIDB4ODEsIDB4YzcsIDB4YWQsIDB4ZTksIDB4ZjAsCi0JCQkweDA1LCAweDcyLCAweDZkLCAweDNkLCAweDBhLCAweDdhLCAweGE5LCAweDAyLAotCQkJMHhhYywgMHg4MiwgMHg5MywgMHg2ZSwgMHhiNiwgMHgxYywgMHgyOCwgMHhmYywKLQkJCTB4NDQsIDB4MTIsIDB4ZmIsIDB4NzMsIDB4NzcsIDB4ZDQsIDB4MTMsIDB4MzksCi0JCQkweDI5LCAweDg4LCAweDhhLCAweGYzLCAweDVjLCAweGE2LCAweDM2LCAweGEwLAotCQkJMHgyYSwgMHhlZCwgMHg3ZSwgMHhiMSwgMHgxZCwgMHhkNiwgMHg0YywgMHg2YiwKLQkJCTB4NDEsIDB4MDEsIDB4MTgsIDB4NWQsIDB4NWQsIDB4MDcsIDB4OTcsIDB4YTYsCi0JCQkweDRiLCAweGVmLCAweDMxLCAweDE4LCAweGVhLCAweGFjLCAweGIxLCAweDg0LAotCQkJMHgyMSwgMHhlZCwgMHhkYSwgMHg4NiwKLQkJfSwKKwkJLnJlc3VsdCA9CisJCQkiXHhmMFx4NWNceDc0XHhhZFx4NGVceGJjXHg5OVx4ZTIiCisJCQkiXHhhZVx4ZmZceDkxXHgzYVx4NDRceGNmXHgzOFx4MzIiCisJCQkiXHgxZVx4YWRceGE3XHhjZFx4YTFceDM5XHg5NVx4YWEiCisJCQkiXHgxMFx4YjFceGIzXHgyZVx4MDRceDMxXHg4Zlx4ODYiCisJCQkiXHhmMlx4NjJceDc0XHg3MFx4MGNceGE0XHg0Nlx4MDgiCisJCQkiXHhhOFx4YjdceDk5XHhhOFx4ZTlceGQyXHg3M1x4NzkiCisJCQkiXHg3ZVx4NmVceGQ0XHg4Zlx4MWVceGM3XHg4ZVx4MzEiCisJCQkiXHgwYlx4ZmFceDRiXHhjZVx4ZmRceGYzXHg1N1x4NzEiCisJCQkiXHhlOVx4NDZceDAzXHhhNVx4M2RceDM0XHgwMFx4ZTIiCisJCQkiXHgxOFx4ZmZceDc1XHg2ZFx4MDZceDJkXHgwMFx4YWIiCisJCQkiXHhiOVx4M2VceDZjXHg1OVx4YzVceDg0XHgwNlx4YjUiCisJCQkiXHg4Ylx4ZDBceDg5XHg5Y1x4NGFceDc5XHgxNlx4YzYiCisJCQkiXHgzZFx4NzRceDU0XHhmYVx4NDRceGNkXHgyM1x4MjYiCisJCQkiXHg1Y1x4Y2ZceDdlXHgyOFx4OTJceDMyXHhiZlx4ZGYiCisJCQkiXHhhN1x4MjBceDNjXHg3NFx4NThceDJhXHg5YVx4ZGUiCisJCQkiXHg2MVx4MDBceDFjXHg0Zlx4ZmZceDU5XHhjNFx4MjIiCisJCQkiXHhhY1x4M2NceGQwXHhlOFx4NmNceGY5XHg5N1x4MWIiCisJCQkiXHg1OFx4OWJceGFkXHg3MVx4ZThceGE5XHhiNVx4MGQiCisJCQkiXHhlZVx4MmZceDA0XHgxZlx4N2ZceGJjXHg5OVx4ZWUiCisJCQkiXHg4NFx4ZmZceDQyXHg2MFx4ZGNceDNhXHgxOFx4YTUiCisJCQkiXHg4MVx4ZjlceGVmXHhkY1x4N2FceDBmXHg2NVx4NDEiCisJCQkiXHgyZlx4YTNceGQzXHhmOVx4YzJceGNiXHhjMFx4NGQiCisJCQkiXHg4Zlx4ZDNceDc2XHg5Nlx4YWRceDQ5XHg2ZFx4MzgiCisJCQkiXHgzZFx4MzlceDBiXHg2Y1x4ODBceGI3XHg1NFx4NjkiCisJCQkiXHhmMFx4MmNceDkwXHgwMlx4MjlceDBkXHgxY1x4MTIiCisJCQkiXHhhZFx4NTVceGMzXHg4Ylx4NjhceGQ5XHhjY1x4YjMiCisJCQkiXHhiMlx4NjRceDMzXHg5MFx4NWVceGNhXHg0Ylx4ZTIiCisJCQkiXHhmYlx4NzVceGRjXHg2M1x4ZjdceDlmXHg4Mlx4NzQiCisJCQkiXHhmMFx4YzlceGFhXHg3Zlx4ZTlceDJhXHg5Ylx4MzMiCisJCQkiXHhiY1x4ODhceDAwXHg3Zlx4Y2FceGIyXHgxZlx4MTQiCisJCQkiXHhkYlx4YzVceDhlXHg3Ylx4MTFceDNjXHgzZVx4MDgiCisJCQkiXHhmM1x4ODNceGU4XHhlMFx4OTRceDg2XHgyZVx4OTIiCisJCQkiXHg3OFx4NmJceDAxXHhjOVx4YzdceDgzXHhiYVx4MjEiCisJCQkiXHg2YVx4MjVceDE1XHgzM1x4NGVceDQ1XHgwOFx4ZWMiCisJCQkiXHgzNVx4ZGJceGUwXHg2ZVx4MzFceDUxXHg3OVx4YTkiCisJCQkiXHg0Mlx4NDRceDY1XHhjMVx4YTBceGYxXHhmOVx4MmEiCisJCQkiXHg3MFx4ZDVceGI2XHhjNlx4YzFceDhjXHgzOVx4ZmMiCisJCQkiXHgyNVx4YTZceDU1XHhkOVx4ZGRceDJkXHg0Y1x4ZWMiCisJCQkiXHg0OVx4YzZceGViXHgwZVx4YThceDI1XHgyYVx4MTYiCisJCQkiXHgxYlx4NjZceDg0XHhkYVx4ZTJceDkyXHhlNVx4YzAiCisJCQkiXHhjOFx4NTNceDA3XHhhZlx4ODBceDg0XHhlY1x4ZmQiCisJCQkiXHhjZFx4ZDFceDZlXHhjZFx4NmZceDZhXHhmNVx4MzYiCisJCQkiXHhjNVx4MTVceGU1XHgyNVx4N2RceDc3XHhkMVx4MWEiCisJCQkiXHg5M1x4MzZceGE5XHhjZlx4N2NceGE0XHg1NFx4NGEiCisJCQkiXHgwNlx4NTFceDQ4XHg0ZVx4ZjZceDU5XHg4N1x4ZDIiCisJCQkiXHgwNFx4MDJceGVmXHhkM1x4NDRceGRlXHg3Nlx4MzEiCisJCQkiXHhiM1x4MzRceDE3XHgxYlx4OWRceDY2XHgxMVx4OWYiCisJCQkiXHgxZVx4Y2NceDE3XHhlOVx4YzdceDNjXHgxYlx4ZTciCisJCQkiXHhjYlx4NTBceDA4XHhmY1x4ZGNceDJiXHgyNFx4ZGIiCisJCQkiXHg2NVx4ODNceGQwXHgzYlx4ZTNceDMwXHhlYVx4OTQiCisJCQkiXHg2Y1x4ZTdceGU4XHgzNVx4MzJceGM3XHhkYlx4NjQiCisJCQkiXHhiNFx4MDFceGFiXHgzNlx4MmNceDc3XHgxM1x4YWYiCisJCQkiXHhmOFx4MmJceDg4XHgzZlx4NTRceDM5XHhjNFx4NDQiCisJCQkiXHhmZVx4ZWZceDZmXHg2OFx4MzRceGJlXHgwZlx4MDUiCisJCQkiXHgxNlx4NmRceGY2XHgwYVx4MzBceGU3XHhlM1x4ZWQiCisJCQkiXHhjNFx4ZGVceDNjXHgxYlx4MTNceGQ4XHhkYlx4ZmUiCisJCQkiXHg0MVx4NjJceGU1XHgyOFx4ZDRceDhkXHhhM1x4YzciCisJCQkiXHg5M1x4OTdceGM2XHg0OFx4NDVceDFkXHg5Zlx4ODMiCisJCQkiXHhkZlx4NGJceDQwXHgzZVx4NDJceDI1XHg4N1x4ODAiCisJCQkiXHg0Y1x4N2RceGE4XHhkNFx4OThceDIzXHg5NVx4NzUiCisJCQkiXHg0MVx4OGNceGRhXHg0MVx4OWJceGQ0XHhhN1x4MDYiCisJCQkiXHhiNVx4ZjFceDcxXHgwOVx4NTNceGJlXHhjYVx4YmYiCisJCQkiXHgzMlx4MDNceGVkXHhmMFx4NTBceDFjXHg1Nlx4MzkiCisJCQkiXHg1Ylx4YTRceDc1XHgxOFx4ZjdceDliXHg1OFx4ZWYiCisJCQkiXHg1M1x4ZmNceDJhXHgzOFx4MjNceDE1XHg3NVx4Y2QiCisJCQkiXHg0NVx4ZTVceDVhXHg4Mlx4NTVceGJhXHgyMVx4ZmEiCisJCQkiXHhkNFx4YmRceGM2XHg5NFx4N2NceGM1XHg4MFx4MTIiCisJCQkiXHhmN1x4NGJceDMyXHhjNFx4OWFceDgyXHhkOFx4MjgiCisJCQkiXHg4Zlx4ZDlceGMyXHgwZlx4NjBceDAzXHhiZVx4NWUiCisJCQkiXHgyMVx4ZDZceDVmXHg1OFx4YmZceDVjXHhiMVx4MzIiCisJCQkiXHg4Mlx4OGRceGE5XHhlNVx4ZjJceDY2XHgxYVx4YzAiCisJCQkiXHhhMFx4YmNceDU4XHgyZlx4NzFceGY1XHgyZlx4ZWQiCisJCQkiXHhkMVx4MjZceGI5XHhkOFx4NDlceDVhXHgwN1x4MTkiCisJCQkiXHgwMVx4N2NceDU5XHhiMFx4ZjhceGE0XHhiN1x4ZDMiCisJCQkiXHg3Ylx4MWFceDhjXHgzOFx4ZjRceDUwXHhhNFx4NTkiCisJCQkiXHhiMFx4Y2NceDQxXHgwYlx4ODhceDdmXHhlNVx4MzEiCisJCQkiXHhiM1x4NDJceGJhXHhhMlx4N2VceGQ0XHgzMlx4NzEiCisJCQkiXHg0NVx4ODdceDQ4XHhhOVx4YzJceGYyXHg4OVx4YjMiCisJCQkiXHhlNFx4YTdceDdlXHg1Mlx4MTVceDYxXHhmYVx4ZmUiCisJCQkiXHhjOVx4ZGRceDgxXHhlYlx4MTNceGFiXHhhYlx4YzMiCisJCQkiXHg5OFx4NTlceGQ4XHgxNlx4M2RceDE0XHg3YVx4MWMiCisJCQkiXHgzY1x4NDFceDlhXHgxNlx4MTZceDliXHhkMlx4ZDIiCisJCQkiXHg2OVx4M2FceDI5XHgyM1x4YWNceDg2XHgzMlx4YTUiCisJCQkiXHg0OFx4OWNceDllXHhmM1x4NDdceDc3XHg4MVx4NzAiCisJCQkiXHgyNFx4ZThceDg1XHhkMlx4ZjVceGI1XHhmYVx4ZmYiCisJCQkiXHg1OVx4NmFceGQzXHg1MFx4NTlceDQzXHg1OVx4ZGUiCisJCQkiXHhkOVx4ZjFceDU1XHhhNVx4MGNceGMzXHgxYVx4MWEiCisJCQkiXHgxOFx4MzRceDBkXHgxYVx4NjNceDMzXHhlZFx4MTAiCisJCQkiXHhlMFx4MWRceDJhXHgxOFx4ZDJceGMwXHg1NFx4YTgiCisJCQkiXHhjYVx4YjVceDlhXHhkM1x4ZGRceGNhXHg0NVx4ODQiCisJCQkiXHg1MFx4ZTdceDBmXHhmZVx4YTRceDk5XHg1YVx4YmUiCisJCQkiXHg0M1x4MmRceDlhXHhjYlx4OTJceDNmXHg1YVx4MWQiCisJCQkiXHg4NVx4ZDhceGM5XHhkZlx4NjhceGM5XHgxMlx4ODAiCisJCQkiXHg1Nlx4MGNceGRjXHgwMFx4ZGNceDNhXHg3ZFx4OWQiCisJCQkiXHhhM1x4YTJceGU4XHg0ZFx4YmZceGY5XHg3MFx4YTAiCisJCQkiXHhhNFx4MTNceDRmXHg2Ylx4YWZceDBhXHg4OVx4N2YiCisJCQkiXHhkYVx4ZjBceGJmXHg5Ylx4YzhceDFkXHhlNVx4ZjgiCisJCQkiXHgyZVx4OGJceDA3XHhiNVx4NzNceDFiXHhjY1x4YTIiCisJCQkiXHhhNlx4YWRceDMwXHhiY1x4NzhceDNjXHg1Ylx4MTAiCisJCQkiXHhmYVx4NWVceDYyXHgyZFx4OWVceDY0XHhiM1x4MzMiCisJCQkiXHhjZVx4ZjlceDFmXHg4Nlx4ZTdceDhiXHhhMlx4YjgiCisJCQkiXHhlOFx4OTlceDU3XHg4Y1x4MTFceGVkXHg2Nlx4ZDkiCisJCQkiXHgzY1x4NzJceGI5XHhjM1x4ZTZceDRlXHgxN1x4M2EiCisJCQkiXHg2YVx4Y2JceDQyXHgyNFx4MDZceGVkXHgzZVx4NGUiCisJCQkiXHhhM1x4ZThceDZhXHg5NFx4ZGFceDBkXHg0ZVx4ZDUiCisJCQkiXHgxNFx4MTlceGNmXHhiNlx4MjZceGQ4XHgyZVx4Y2MiCisJCQkiXHg2NFx4NzZceDM4XHg0OVx4NGRceGZlXHgzMFx4NmQiCisJCQkiXHhlNFx4YzhceDhjXHg3Ylx4YzRceGUwXHgzNVx4YmEiCisJCQkiXHgyMlx4NmVceDc2XHhlMVx4MWFceGYyXHg1M1x4YzMiCisJCQkiXHgyOFx4YTJceDgyXHgxZlx4NjFceDY5XHhhZFx4YzEiCisJCQkiXHg3Ylx4MjhceDRiXHgxZVx4NmNceDg1XHg5NVx4OWIiCisJCQkiXHg1MVx4YjVceDE3XHg3Zlx4MTJceDY5XHg4Y1x4MjQiCisJCQkiXHhkNVx4YzdceDVhXHg1YVx4MTFceDU0XHhmZlx4NWEiCisJCQkiXHhmN1x4MTZceGMzXHg5MVx4YTZceGYwXHhkY1x4MGEiCisJCQkiXHhiNlx4YTdceDRhXHgwZFx4N2FceDU4XHhmZVx4YTUiCisJCQkiXHhmNVx4Y2JceDhmXHg3Ylx4MGVceGVhXHg1N1x4ZTciCisJCQkiXHhiZFx4NzlceGQ2XHgxY1x4ODhceDIzXHg2Y1x4ZjIiCisJCQkiXHg0ZFx4MjlceDc3XHg1M1x4MzVceDZhXHgwMFx4OGQiCisJCQkiXHhjZFx4YTNceDU4XHhiZVx4NzdceDk5XHgxOFx4ZjgiCisJCQkiXHhlNlx4ZTFceDhmXHhlOVx4MzdceDhmXHhlM1x4ZTIiCisJCQkiXHg1YVx4OGFceDkzXHgyNVx4YWZceGYzXHg3OFx4ODAiCisJCQkiXHhiZVx4YTZceDFiXHhjNlx4YWNceDhiXHgxY1x4OTEiCisJCQkiXHg1OFx4ZTFceDlmXHg4OVx4MzVceDlkXHgxZFx4MjEiCisJCQkiXHgyOVx4OWZceGY0XHg5OVx4MDJceDI3XHgwZlx4YTgiCisJCQkiXHg0Zlx4NzlceDk0XHgyYlx4MzNceDJjXHhkYVx4YTIiCisJCQkiXHgyNlx4MzlceDgzXHg5NFx4ZWZceDI3XHhkOFx4NTMiCisJCQkiXHg4Zlx4NjZceDBkXHhlNFx4NDFceDdkXHgzNFx4Y2QiCisJCQkiXHg0M1x4N2NceDk1XHgwYVx4NTNceGVmXHg2Nlx4ZGEiCisJCQkiXHg3ZVx4OWJceGYzXHg5M1x4YWZceGQwXHg3M1x4NzEiCisJCQkiXHhiYVx4NDBceDliXHg3NFx4ZjhceGQ3XHhkN1x4NDEiCisJCQkiXHg2ZFx4YWZceDcyXHg5Y1x4OGRceDIxXHg4N1x4M2MiCisJCQkiXHhmZFx4MGFceDkwXHhhOVx4NDdceDk2XHg5ZVx4ZDMiCisJCQkiXHg4OFx4ZWVceDczXHhjZlx4NjZceDJmXHg1Mlx4NTYiCisJCQkiXHg2ZFx4YTlceDgwXHg0Y1x4ZTJceDZmXHg2Mlx4ODgiCisJCQkiXHgzZlx4MGVceDU0XHgxN1x4NDhceDgwXHg1ZFx4ZDMiCisJCQkiXHhjM1x4ZGFceDI1XHgzZFx4YTFceGM4XHhjYlx4OWYiCisJCQkiXHg5Ylx4NzBceGIzXHhhMVx4ZWJceDA0XHg1Mlx4YTEiCisJCQkiXHhmMlx4MjJceDBmXHhmY1x4YzhceDE4XHhmYVx4ZjkiCisJCQkiXHg4NVx4OWNceGYxXHhhY1x4ZWJceDBjXHgwMlx4NDYiCisJCQkiXHg3NVx4ZDJceGY1XHgyY1x4ZTNceGQyXHg1OVx4OTQiCisJCQkiXHgxMlx4ZjNceDNjXHhmY1x4ZDdceDkyXHhmYVx4MzYiCisJCQkiXHhiYVx4NjFceDM0XHgzOFx4N2NceGRhXHg0OFx4M2UiCisJCQkiXHgwOFx4YzlceDM5XHgyM1x4NWVceDAyXHgyY1x4MWEiCisJCQkiXHgxOFx4N2VceGI0XHhkOVx4ZmRceDllXHg0MFx4MDIiCisJCQkiXHhiMVx4MzNceDM3XHgzMlx4ZTdceGRlXHhkNlx4ZDAiCisJCQkiXHg3Y1x4NThceDY1XHg0Ylx4ZjhceDM0XHgyN1x4OWMiCisJCQkiXHg0NFx4YjRceGJkXHhlOVx4ZTlceDRjXHg3OFx4N2QiCisJCQkiXHg0Ylx4OWZceGNlXHhiMVx4Y2RceDQ3XHhhNVx4MzciCisJCQkiXHhlNVx4NmRceGJkXHhiOVx4NDNceDk0XHgwYVx4ZDQiCisJCQkiXHhkNlx4ZjlceDA0XHg1Zlx4YjVceDY2XHg2Y1x4MWEiCisJCQkiXHgzNVx4MTJceGUzXHgzNlx4MjhceDI3XHgzNlx4NTgiCisJCQkiXHgwMVx4MmJceDc5XHhlNFx4YmFceDZkXHgxMFx4N2QiCisJCQkiXHg2NVx4ZGZceDg0XHg5NVx4ZjRceGQ1XHhiNlx4OGYiCisJCQkiXHgyYlx4OWZceDk2XHgwMFx4ODZceDYwXHhmMFx4MjEiCisJCQkiXHg3Nlx4YThceDZhXHg4Y1x4MjhceDFjXHhiM1x4NmIiCisJCQkiXHg5N1x4ZDdceGI2XHg1M1x4MmFceGNjXHhhYlx4NDAiCisJCQkiXHg5ZFx4NjJceDc5XHg1OFx4NTJceGU2XHg2NVx4YjciCisJCQkiXHhhYlx4NTVceDY3XHg5Y1x4ODlceDdjXHgwM1x4YjAiCisJCQkiXHg3M1x4NTlceGM1XHg4MVx4ZjVceDE4XHgxN1x4NWMiCisJCQkiXHg4OVx4ZjNceDc4XHgzNVx4NDRceDYyXHg3OFx4NzIiCisJCQkiXHhkMFx4OTZceGViXHgzMVx4ZTdceDg3XHg3N1x4MTQiCisJCQkiXHg5OVx4NTFceGYyXHg1OVx4MjZceDllXHhiNVx4YTYiCisJCQkiXHg0NVx4ZmVceDZlXHhiZFx4MDdceDRjXHg5NFx4NWEiCisJCQkiXHhhNVx4N2RceGZjXHhmMVx4MmJceDc3XHhlMlx4ZmUiCisJCQkiXHgxN1x4ZDRceDg0XHhhMFx4YWNceGI1XHhjN1x4ZGEiCisJCQkiXHhhOVx4MWFceGI2XHhmM1x4NzRceDExXHhiNFx4OWQiCisJCQkiXHhmYlx4NzlceDJlXHgwNFx4MmRceDUwXHgyOFx4ODMiCisJCQkiXHhiZlx4YzZceDUyXHhkM1x4MzRceGQ2XHhlOFx4N2EiCisJCQkiXHhiNlx4ZWFceGU3XHhhOFx4NmNceDE1XHgxZVx4MmMiCisJCQkiXHg1N1x4YmNceDQ4XHg0ZVx4NWZceDVjXHhiNlx4OTIiCisJCQkiXHhkMlx4NDlceDc3XHg4MVx4NmRceDkwXHg3MFx4YWUiCisJCQkiXHg5OFx4YTFceDAzXHgwZFx4NmJceGI5XHg3N1x4MTQiCisJCQkiXHhmMVx4NGVceDIzXHhkM1x4ZjhceDY4XHhiZFx4YzIiCisJCQkiXHhmZVx4MDRceGI3XHg1Y1x4YzVceDE3XHg2MFx4OGYiCisJCQkiXHg2NVx4NTRceGE0XHg3YVx4NDJceGRjXHgxOFx4MGQiCisJCQkiXHhiNVx4Y2ZceDBmXHhkM1x4YzdceDkxXHg2Nlx4MWIiCisJCQkiXHg0NVx4NDJceDI3XHg3NVx4NTBceGU1XHhlZVx4YjgiCisJCQkiXHg3Zlx4MzNceDJjXHhiYVx4NGFceDkyXHg0ZFx4MmMiCisJCQkiXHgzY1x4ZTNceDBkXHg4MFx4MDFceGJhXHgwZFx4MjkiCisJCQkiXHhkOFx4M2NceGU5XHgxM1x4MTZceDU3XHhlNlx4ZWEiCisJCQkiXHg5NFx4NTJceGU3XHgwMFx4NGRceDMwXHhiMFx4MGYiCisJCQkiXHgzNVx4YjhceGI4XHhhN1x4YjFceGI1XHgzYlx4NDQiCisJCQkiXHhlMVx4MmZceGZkXHg4OFx4ZWRceDQzXHhlN1x4NTIiCisJCQkiXHgxMFx4OTNceGIzXHg4YVx4MzBceDZiXHgwYVx4ZjciCisJCQkiXHgyM1x4YzZceDUwXHg5ZFx4NGFceGIwXHhkZVx4YzMiCisJCQkiXHhkY1x4OWJceDJmXHgwMVx4NTZceDM2XHgwOVx4YzUiCisJCQkiXHgyZlx4NmJceGZlXHhmMVx4ZDhceDI3XHg0NVx4MDMiCisJCQkiXHgzMFx4NWVceDVjXHg1Ylx4YjRceDYyXHgwZVx4MWEiCisJCQkiXHhhOVx4MjFceDJiXHg5Mlx4OTRceDg3XHg2Mlx4NTciCisJCQkiXHg0Y1x4MTBceDc0XHgxYVx4ZjFceDBhXHhjNVx4ODQiCisJCQkiXHgzYlx4OWVceDcyXHgwMlx4ZDdceGNjXHgwOVx4NTYiCisJCQkiXHhiZFx4NTRceGMxXHhmMFx4YzNceGUzXHhiM1x4ZjgiCisJCQkiXHhkMlx4MGRceDYxXHhjYlx4ZWZceGNlXHgwZFx4MDUiCisJCQkiXHhiMFx4OThceGQ5XHg4ZVx4NGZceGY5XHhiY1x4OTMiCisJCQkiXHhhNlx4ZWFceGM4XHhjZlx4MTBceDUzXHg0Ylx4ZjEiCisJCQkiXHhlY1x4ZmNceDg5XHhmOVx4NjRceGIwXHgyMlx4YmYiCisJCQkiXHg5ZVx4NTVceDQ2XHg5Zlx4N2NceDUwXHg4ZVx4ODQiCisJCQkiXHg1NFx4MjBceDk4XHhkN1x4NmNceDQwXHgxZVx4ZGIiCisJCQkiXHg2OVx4MzRceDc4XHg2MVx4MjRceDIxXHg5Y1x4OGEiCisJCQkiXHhiM1x4NjJceDMxXHg4Ylx4NmVceGY1XHgyYVx4MzUiCisJCQkiXHg4Nlx4MTNceGIxXHg2Y1x4NjRceDJlXHg0MVx4YTUiCisJCQkiXHgwNVx4ZjJceDQyXHhiYVx4ZDJceDNhXHgwZFx4OGUiCisJCQkiXHg4YVx4NTlceDk0XHgzY1x4Y2ZceDM2XHgyN1x4ODIiCisJCQkiXHhjMlx4NDVceGVlXHg1OFx4Y2RceDg4XHhiNFx4ZWMiCisJCQkiXHhkZVx4YjJceDk2XHgwYVx4YWZceDM4XHg2Zlx4ODgiCisJCQkiXHhkN1x4ZDhceGUxXHhkZlx4YjlceDk2XHhhOVx4MGEiCisJCQkiXHhiMVx4OTVceDI4XHg4Nlx4MjBceGU5XHgxN1x4NDkiCisJCQkiXHhhMlx4MjlceDM4XHhhYVx4YTVceGU5XHg2ZVx4ZjEiCisJCQkiXHgxOVx4MjdceGMwXHhkNVx4MmFceDIyXHhjM1x4MGIiCisJCQkiXHhkYlx4N2NceDczXHgxMFx4YjlceGJhXHg4OVx4NzYiCisJCQkiXHg1NFx4YWVceDdkXHg3MVx4YjNceDkzXHhmNlx4MzIiCisJCQkiXHhlNlx4NDdceDQzXHg1NVx4YWNceGEwXHgwZFx4YzIiCisJCQkiXHg5M1x4MjdceDRhXHg4ZVx4MGVceDc0XHgxNVx4YzciCisJCQkiXHgwYlx4ODVceGQ5XHgwY1x4YTlceDMwXHg3YVx4M2UiCisJCQkiXHhlYVx4OGZceDg1XHg2ZFx4M2FceDEyXHg0Zlx4NzIiCisJCQkiXHg2OVx4NThceDdhXHg4MFx4YmJceGI1XHg5N1x4ZjMiCisJCQkiXHhjZlx4NzBceGQyXHg1ZFx4ZGRceDRkXHgyMVx4NzkiCisJCQkiXHg1NFx4NGRceGU0XHgwNVx4ZThceGJkXHhjMlx4NjIiCisJCQkiXHhiMVx4M2JceDc3XHgxY1x4ZDZceDVjXHhmM1x4YTAiCisJCQkiXHg3OVx4MDBceGE4XHg2Y1x4MjlceGQ5XHgxOFx4MjQiCisJCQkiXHgzNlx4YTJceDQ2XHhjMFx4OTZceDY1XHg3Zlx4YmQiCisJCQkiXHgyYVx4ZWRceDM2XHgxNlx4MGNceGFhXHg5Zlx4ZjQiCisJCQkiXHhjNVx4YjRceGUyXHgxMlx4ZWRceDY5XHhlZFx4NGYiCisJCQkiXHgyNlx4MmNceDM5XHg1Mlx4ODlceDk4XHhlN1x4MmMiCisJCQkiXHg5OVx4YTRceDllXHhhM1x4OWJceDk5XHg0Nlx4N2EiCisJCQkiXHgzYVx4ZGNceGE4XHg1OVx4YTNceGRiXHhjM1x4M2IiCisJCQkiXHg5NVx4MGRceDNiXHgwOVx4NmVceGVlXHg4M1x4NWQiCisJCQkiXHgzMlx4NGRceGVkXHhhYlx4ZmFceDk4XHgxNFx4NGUiCisJCQkiXHhjM1x4MTVceDQ1XHg1M1x4NjFceGM0XHg5M1x4YmQiCisJCQkiXHg5MFx4ZjRceDk5XHg5NVx4NGNceGU2XHg3Nlx4OTIiCisJCQkiXHgyOVx4OTBceDQ2XHgzMFx4OTJceDY5XHg3ZFx4MTMiCisJCQkiXHhmMlx4YTVceGNkXHg2OVx4NDlceDQ0XHhiMlx4MGYiCisJCQkiXHg2M1x4NDBceDM2XHg1Zlx4MDlceGUyXHg3OFx4ZjgiCisJCQkiXHg5MVx4ZTNceGUyXHhmYVx4MTBceGY3XHhjOFx4MjQiCisJCQkiXHhhOFx4ODlceDMyXHg1Y1x4MzdceDI1XHgxZFx4YjIiCisJCQkiXHhlYVx4MTdceDhhXHgwYVx4YTlceDY0XHhjM1x4N2MiCisJCQkiXHgzY1x4N2NceGJkXHhjNlx4NzlceDM0XHhlN1x4ZTIiCisJCQkiXHg4NVx4OGVceGJmXHhmOFx4ZGVceDkyXHhhMFx4YWUiCisJCQkiXHgyMFx4YzRceGY2XHhiYlx4MWZceDM4XHgxOVx4MGUiCisJCQkiXHhlOFx4NzlceDljXHhhMVx4MjNceGU5XHg1NFx4N2UiCisJCQkiXHgzN1x4MmZceGUyXHg5NFx4MzJceGFmXHhhMFx4MjMiCisJCQkiXHg0OVx4ZTRceGMwXHhiM1x4YWNceDAwXHg4Zlx4MzYiCisJCQkiXHgwNVx4YzRceGE2XHg5Nlx4ZWNceDA1XHg5OFx4NGYiCisJCQkiXHg5Nlx4NjdceDU3XHgxZlx4MjBceDg2XHgxYlx4MmQiCisJCQkiXHg2OVx4ZTRceDI5XHg5M1x4NjZceDVmXHhhZlx4NmIiCisJCQkiXHg4OFx4MjZceDJjXHg2N1x4MDJceDRiXHg1Mlx4ZDAiCisJCQkiXHg4M1x4N2FceDQzXHgxZlx4YzBceDcxXHgxNVx4MjUiCisJCQkiXHg3N1x4NjVceDA4XHg2MFx4MTFceDc2XHg0Y1x4OGQiCisJCQkiXHhlZFx4YTlceDI3XHhjNlx4YjFceDJhXHgyY1x4NmEiCisJCQkiXHg0YVx4OTdceGY1XHhjNlx4YjdceDcwXHg0Mlx4ZDMiCisJCQkiXHgwM1x4ZDFceDI0XHg5NVx4ZWNceDZkXHhhYlx4MzgiCisJCQkiXHg3Mlx4Y2VceGUyXHg4Ylx4MzNceGQ3XHg1MVx4MDkiCisJCQkiXHhkY1x4NDVceGUwXHgwOVx4OTZceDMyXHhmM1x4YzQiCisJCQkiXHg4NFx4ZGNceDczXHg3M1x4MmRceDFiXHgxMVx4OTgiCisJCQkiXHhjNVx4MGVceDY5XHgyOFx4OTRceGM3XHhiNVx4NGQiCisJCQkiXHhjOFx4OGFceGQwXHhhYVx4MTNceDJlXHgxOFx4NzQiCisJCQkiXHhkZFx4ZDFceDFlXHhmM1x4OTBceGU4XHhmY1x4OWEiCisJCQkiXHg3Mlx4NGFceDBlXHhkMVx4ZTRceGZiXHgwZFx4OTYiCisJCQkiXHhkMVx4MGNceDc5XHg4NVx4MWJceDFjXHhmZVx4ZTEiCisJCQkiXHg2Mlx4OGZceDdhXHg3M1x4MzJceGFiXHhjOFx4MTgiCisJCQkiXHg2OVx4ZTNceDM0XHgzMFx4ZGZceDEzXHhhNlx4ZTUiCisJCQkiXHhlOFx4MGVceDY3XHg3Zlx4ODFceDExXHhiNFx4NjAiCisJCQkiXHhjN1x4YmRceDc5XHg2NVx4NTBceGRjXHhjNFx4NWIiCisJCQkiXHhkZVx4MzlceGE0XHgwMVx4NzJceDYzXHhmM1x4ZDEiCisJCQkiXHg2NFx4NGVceGRmXHhmY1x4MjdceDkyXHgzN1x4MGQiCisJCQkiXHg1N1x4Y2RceDExXHg0Zlx4MTFceDA0XHg4ZVx4MWQiCisJCQkiXHgxNlx4ZjdceGNkXHg5Mlx4OWFceDk5XHgzMFx4MTQiCisJCQkiXHhmMVx4N2NceDY3XHgxYlx4MWZceDQxXHgwYlx4ZTgiCisJCQkiXHgzMlx4ZThceGI4XHhjMVx4NGZceDU0XHg4Nlx4NGYiCisJCQkiXHhlNVx4NzlceDgxXHg3M1x4Y2RceDQzXHg1OVx4NjgiCisJCQkiXHg3M1x4MDJceDNiXHg3OFx4MjFceDcyXHg0M1x4MDAiCisJCQkiXHg0OVx4MTdceGY3XHgwMFx4YWZceDY4XHgyNFx4NTMiCisJCQkiXHgwNVx4MGFceGMzXHgzM1x4ZTBceDMzXHgzZlx4NjkiCisJCQkiXHhkMlx4ODRceDJmXHgwYlx4ZWRceGRlXHgwNFx4ZjQiCisJCQkiXHgxMVx4OTRceDEzXHg2OVx4NTFceDA5XHgyOFx4ZGUiCisJCQkiXHg1N1x4NWNceGVmXHhkY1x4OWFceDQ5XHgxY1x4MTciCisJCQkiXHg5N1x4ZjNceDk2XHhjMVx4N2ZceDVkXHgyZVx4N2QiCisJCQkiXHg1NVx4YjhceGIzXHgwMlx4MDlceGIzXHgxZlx4ZTciCisJCQkiXHhjOVx4OGRceGEzXHgzNlx4MzRceDhhXHg3N1x4MTMiCisJCQkiXHgzMFx4NjNceDRjXHhhNVx4Y2RceGMzXHhlMFx4N2UiCisJCQkiXHgwNVx4YTFceDdiXHgwY1x4Y2JceDc0XHg0N1x4MzEiCisJCQkiXHg2Mlx4MDNceDQzXHhmMVx4ODdceGI0XHhiMFx4ODUiCisJCQkiXHg4N1x4OGVceDRiXHgyNVx4YzdceGNmXHhhZVx4NGIiCisJCQkiXHgzNlx4NDZceDNlXHg2Mlx4YmNceDZmXHhlYlx4NWYiCisJCQkiXHg3M1x4YWNceGU2XHgwN1x4ZWVceGMxXHhhMVx4ZDYiCisJCQkiXHhjNFx4YWJceGM5XHhkNlx4ODlceDQ1XHhlMVx4ZjEiCisJCQkiXHgwNFx4NGVceDFhXHg2Zlx4YmJceDRmXHgzYVx4YTMiCisJCQkiXHhhMFx4Y2JceGEzXHgwYVx4ZDhceDcxXHgzNVx4NTUiCisJCQkiXHhlNFx4YmNceDJlXHgwNFx4MDZceGU2XHhmZlx4NWIiCisJCQkiXHgxY1x4YzBceDExXHg3Y1x4YzVceDE3XHhmM1x4MzgiCisJCQkiXHhjZlx4ZTlceGJhXHgwZlx4MGVceGVmXHgwMlx4YzIiCisJCQkiXHg4ZFx4YzZceGJjXHg0Ylx4NjdceDIwXHg5NVx4ZDciCisJCQkiXHgyY1x4NDVceDViXHg4Nlx4NDRceDhjXHg2Zlx4MmUiCisJCQkiXHg3ZVx4OWZceDFjXHg3N1x4YmFceDZiXHgwZVx4YTMiCisJCQkiXHg2OVx4ZGNceGFiXHgyNFx4NTdceDYwXHg0N1x4YzEiCisJCQkiXHhkMVx4YTVceDlkXHgyM1x4ZTZceGIxXHgzN1x4ZmUiCisJCQkiXHg5M1x4ZDJceDRjXHg0Nlx4ZjlceDBjXHhjNlx4ZmIiCisJCQkiXHhkNlx4OWRceDk5XHg2OVx4YWJceDdhXHgwN1x4MGMiCisJCQkiXHg2NVx4ZTdceGM0XHgwOFx4OTZceGUyXHhhNVx4MDEiCisJCQkiXHgzZlx4NDZceDA3XHgwNVx4N2VceGU4XHg5YVx4OTAiCisJCQkiXHg1MFx4ZGNceGU5XHg3YVx4ZWFceGExXHgzOVx4NmUiCisJCQkiXHg2Nlx4ZTRceDZmXHhhNVx4NWZceGIyXHhkOVx4NWIiCisJCQkiXHhmNVx4ZGJceDJhXHgzMlx4ZjBceDExXHg2Zlx4N2MiCisJCQkiXHgyNlx4MTBceDhmXHgzZFx4ODBceGU5XHg1OFx4ZjciCisJCQkiXHhlMFx4YThceDU3XHhmOFx4ZGJceDBlXHhjZVx4OTkiCisJCQkiXHg2M1x4MTlceDNkXHhkNVx4ZWNceDFiXHg3N1x4NjkiCisJCQkiXHg5OFx4ZjZceGU0XHg1Zlx4NjdceDE3XHg0Ylx4MDkiCisJCQkiXHg4NVx4NjJceDgyXHg3MFx4MThceGUyXHg5YVx4NzgiCisJCQkiXHhlMlx4NjJceGJkXHhiNFx4ZjFceDQyXHhjNlx4ZmIiCisJCQkiXHgwOFx4ZDBceGJkXHhlYlx4NGVceDA5XHhmMlx4YzgiCisJCQkiXHgxZVx4ZGNceDNkXHgzMlx4MjFceDU2XHg5Y1x4NGYiCisJCQkiXHgzNVx4ZjNceDYxXHgwNlx4NzJceDg0XHhjNFx4MzIiCisJCQkiXHhmMlx4ZjFceGZhXHgwYlx4MmZceGMzXHhkYlx4MDIiCisJCQkiXHgwNFx4YzJceGRlXHg1N1x4NjRceDYwXHg4ZFx4Y2YiCisJCQkiXHhjYlx4ODZceDVkXHg5N1x4M2VceGIxXHg5Y1x4MDEiCisJCQkiXHhkNlx4MjhceDhmXHg5OVx4YmNceDQ2XHhlYlx4MDUiCisJCQkiXHhhZlx4N2VceGI4XHgyMVx4MmFceDU2XHg4NVx4MWMiCisJCQkiXHhiM1x4NzFceGEwXHhkZVx4Y2FceDk2XHhmMVx4NzgiCisJCQkiXHg0OVx4YTJceDk5XHg4MVx4ODBceDVjXHgwMVx4ZjUiCisJCQkiXHhhMFx4YTJceDU2XHg2M1x4ZTJceDcwXHgwN1x4YTUiCisJCQkiXHg5NVx4ZDZceDg1XHhlYlx4MzZceDllXHhhOVx4NTEiCisJCQkiXHg2Nlx4NTZceDVmXHgxZFx4MDJceDE5XHhlMlx4ZjYiCisJCQkiXHg0Zlx4NzNceDM4XHgwOVx4NzVceDY0XHg0OFx4ZTAiCisJCQkiXHhmMVx4N2VceDBlXHhlOFx4OWRceGY5XHhlZFx4OTQiCisJCQkiXHhmZVx4MTZceDI2XHg2Mlx4NDlceDc0XHhmNFx4YjAiCisJCQkiXHhkNFx4YTlceDZjXHhiMFx4ZmRceDUzXHhlOVx4ODEiCisJCQkiXHhlMFx4N2FceGJmXHhjZlx4YjVceGM0XHgwMVx4ODEiCisJCQkiXHg3OVx4OTlceDc3XHgwMVx4M2JceGU5XHhhMlx4YjYiCisJCQkiXHhlNlx4NmFceDhhXHg5ZVx4NTZceDFjXHg4ZFx4MWUiCisJCQkiXHg4Zlx4MDZceDU1XHgyY1x4NmNceGRjXHg5Mlx4ODciCisJCQkiXHg2NFx4M2JceDRiXHgxOVx4YTFceDEzXHg2NFx4MWQiCisJCQkiXHg0YVx4ZTlceGMwXHgwMFx4YjhceDk1XHhlZlx4NmIiCisJCQkiXHgxYVx4ODZceDZkXHgzN1x4NTJceDAyXHhjMlx4ZTAiCisJCQkiXHhjOFx4YmJceDQyXHgwY1x4MDJceDIxXHg0YVx4YzkiCisJCQkiXHhlZlx4YTBceDU0XHhlNFx4NWVceDE2XHg1M1x4ODEiCisJCQkiXHg3MFx4NjJceDEwXHhhZlx4ZGVceGI4XHhiNVx4ZDMiCisJCQkiXHhlOFx4NWVceDZjXHhjM1x4OGFceDNlXHgxOFx4MDciCisJCQkiXHhmMlx4MmZceDdkXHhhN1x4ZTFceDNkXHg0ZVx4YjQiCisJCQkiXHgyNlx4YTdceGEzXHg5M1x4ODZceGIyXHgwNFx4MWUiCisJCQkiXHg1M1x4NWRceDg2XHhkNlx4ZGVceDY1XHhjYVx4ZTMiCisJCQkiXHg0ZVx4YzFceGNmXHhlZlx4YzhceDcwXHgxYlx4ODMiCisJCQkiXHgxM1x4ZGRceDE4XHg4Ylx4MGRceDc2XHhkMlx4ZjYiCisJCQkiXHgzN1x4N2FceDkzXHg3YVx4NTBceDExXHg5Zlx4OTYiCisJCQkiXHg4Nlx4MjVceGZkXHhhY1x4ZGNceGJlXHgxOFx4OTMiCisJCQkiXHgxOVx4NmJceGVjXHg1OFx4NGZceGI5XHg3NVx4YTciCisJCQkiXHhkZFx4M2ZceDJmXHhlY1x4YzhceDVhXHg4NFx4YWIiCisJCQkiXHhkNVx4ZTRceDhhXHgwN1x4ZjZceDRkXHgyM1x4ZDYiCisJCQkiXHgwM1x4ZmJceDAzXHg2YVx4ZWFceDY2XHhiZlx4ZDQiCisJCQkiXHhiMVx4MzRceGZiXHg3OFx4ZTlceDU1XHhkY1x4N2MiCisJCQkiXHgzZFx4OWNceGU1XHg5YVx4YWNceGMzXHg3YVx4ODAiCisJCQkiXHgyNFx4NmRceGEwXHhlZlx4MjVceDdjXHhiN1x4ZWEiCisJCQkiXHhjZVx4NGRceDVmXHgxOFx4NjBceGNlXHg4N1x4MjIiCisJCQkiXHg2Nlx4MmZceGQ1XHhkZFx4ZGRceDAyXHgyMVx4NzUiCisJCQkiXHg4Mlx4YTBceDFmXHg1OFx4YzZceGQzXHg2Mlx4ZjciCisJCQkiXHgzMlx4ZDhceGFmXHgxZVx4MDdceDc3XHg1MVx4OTYiCisJCQkiXHhkNVx4NmJceDFlXHg3ZVx4ODBceDAyXHhlOFx4NjciCisJCQkiXHhlYVx4MTdceDBiXHgxMFx4ZDJceDNmXHgyOFx4MjUiCisJCQkiXHg0Zlx4MDVceDc3XHgwMlx4MTRceDY5XHhmMFx4MmMiCisJCQkiXHhiZVx4MGNceGYxXHg3NFx4MzBceGQxXHhiOVx4OWIiCisJCQkiXHhmY1x4OGNceGJiXHgwNFx4MTZceGQ5XHhiYVx4YzMiCisJCQkiXHhiY1x4OTFceDhhXHhjNFx4MzBceGE0XHhiMFx4MTIiCisJCQkiXHg0Y1x4MjFceDg3XHhjYlx4YzlceDFkXHgxNlx4OTYiCisJCQkiXHgwN1x4NmZceDIzXHg1NFx4YjlceDZmXHg3OVx4ZTUiCisJCQkiXHg2NFx4YzBceDY0XHhkYVx4YjFceGFlXHhkZFx4NjAiCisJCQkiXHg2Y1x4MWFceDlkXHhkM1x4MDRceDhlXHg0NVx4YjAiCisJCQkiXHg5Mlx4NjFceGQwXHg0OFx4ODFceGVkXHg1ZVx4MWQiCisJCQkiXHhhMFx4YzlceGE0XHgzM1x4YzdceDEzXHg1MVx4NWQiCisJCQkiXHg3Zlx4ODNceDczXHhiNlx4NzBceDE4XHg2NVx4M2UiCisJCQkiXHgyZlx4MGVceDdhXHgxMlx4MzlceDk4XHhhYlx4ZDgiCisJCQkiXHg3ZVx4NmZceGEzXHhkMVx4YmFceDU2XHhhZFx4YmQiCisJCQkiXHhmMFx4MDNceDAxXHgxY1x4ODVceDM1XHg5Zlx4ZWIiCisJCQkiXHgxOVx4NjNceGExXHhhZlx4ZmVceDJkXHgzNVx4NTAiCisJCQkiXHgzOVx4YTBceDY1XHg3Y1x4OTVceDdlXHg2Ylx4ZmUiCisJCQkiXHhjMVx4YWNceDA3XHg3Y1x4OThceDRmXHhiZVx4NTciCisJCQkiXHhhN1x4MjJceGVjXHhlMlx4N2VceDI5XHgwOVx4NTMiCisJCQkiXHhlOFx4YmZceGI0XHg3ZVx4M2ZceDhmXHhmY1x4MTQiCisJCQkiXHhjZVx4NTRceGY5XHgxOFx4NThceGI1XHhmZlx4NDQiCisJCQkiXHgwNVx4OWRceGNlXHgxYlx4YjZceDgyXHgyM1x4YzgiCisJCQkiXHgyZVx4YmNceDY5XHhiYlx4NGFceDI5XHgwZlx4NjUiCisJCQkiXHg5NFx4ZjBceDYzXHgwNlx4MGVceGVmXHg4Y1x4YmQiCisJCQkiXHhmZlx4ZmRceGIwXHgyMVx4NmVceDU3XHgwNVx4NzUiCisJCQkiXHhkYVx4ZDVceGM0XHhlYlx4OGRceDMyXHhmN1x4NTAiCisJCQkiXHhkM1x4NmZceDIyXHhlZFx4NWZceDhlXHhhMlx4NWIiCisJCQkiXHg4MFx4OGNceGM4XHg3OFx4NDBceDI0XHg0Ylx4ODkiCisJCQkiXHgzMFx4Y2VceDdhXHg5N1x4MGVceGM0XHhhZlx4ZWYiCisJCQkiXHg5Ylx4YjRceGNkXHg2Nlx4NzRceDE0XHgwNFx4MmIiCisJCQkiXHhmN1x4Y2VceDBiXHgxY1x4NmVceGMyXHg3OFx4OGMiCisJCQkiXHhjYVx4YzVceGQwXHgxY1x4OTVceDRhXHg5MVx4MmQiCisJCQkiXHhhN1x4MjBceGViXHg4Nlx4NTJceGI3XHg2N1x4ZDgiCisJCQkiXHgwY1x4ZDZceDA0XHgxNFx4ZGVceDUxXHg3NFx4NzUiCisJCQkiXHhlN1x4MTFceGI0XHg4N1x4YTNceDNkXHgyZFx4YWQiCisJCQkiXHg0Zlx4ZWZceGEwXHgwZlx4NzBceDAwXHg2ZFx4MTMiCisJCQkiXHgxOVx4MWRceDQxXHg1MFx4ZTlceGQ4XHhmMFx4MzIiCisJCQkiXHg3MVx4YmNceGQzXHgxMVx4ZjJceGFjXHhiZVx4YWYiCisJCQkiXHg3NVx4NDZceDY1XHg0ZVx4MDdceDM0XHgzN1x4YTMiCisJCQkiXHg4OVx4ZmVceDc1XHhkNFx4NzBceDRjXHhjNlx4M2YiCisJCQkiXHg2OVx4MjRceDBlXHgzOFx4NjdceDQzXHg4Y1x4ZGUiCisJCQkiXHgwNlx4YjVceGI4XHhlN1x4YzRceGYwXHg0MVx4OGYiCisJCQkiXHhmMFx4YmRceDJmXHgwYlx4YjlceDE4XHhmOFx4ZGUiCisJCQkiXHg2NFx4YjFceGRiXHhlZVx4MDBceDUwXHg3N1x4ZTEiCisJCQkiXHhjN1x4ZmZceGE2XHhmYVx4ZGRceDcwXHhmNFx4ZTMiCisJCQkiXHg5M1x4ZTlceDc3XHgzNVx4M2RceDRiXHgyZlx4MmIiCisJCQkiXHg2ZFx4NTVceGYwXHhmY1x4ODhceDU0XHg0ZVx4ODkiCisJCQkiXHhjMVx4OGFceDIzXHgzMVx4MmRceDE0XHgyYVx4YjgiCisJCQkiXHgxYlx4MTVceGRkXHg5ZVx4NmVceDdiXHhkYVx4MDUiCisJCQkiXHg5MVx4N2RceDYyXHg2NFx4OTZceDcyXHhkZVx4ZmMiCisJCQkiXHhjMVx4ZWNceGYwXHgyM1x4NTFceDZmXHhkYlx4NWIiCisJCQkiXHgxZFx4MDhceDU3XHhjZVx4MDlceGI4XHhmNlx4Y2QiCisJCQkiXHg4ZFx4OTVceGYyXHgyMFx4YmZceDBmXHgyMFx4NTciCisJCQkiXHg5OFx4ODFceDg0XHg0Zlx4MTVceDVjXHg3Nlx4ZTciCisJCQkiXHgzZVx4MGFceDNhXHg2Y1x4YzRceDhhXHhiZVx4NzgiCisJCQkiXHg3NFx4NzdceGMzXHgwOVx4NGJceDVkXHg0OFx4ZTQiCisJCQkiXHhjOFx4Y2JceDBiXHhlYVx4MTdceDI4XHhjZlx4Y2YiCisJCQkiXHgzMVx4MzJceDQ0XHhhNFx4ZTVceDBlXHgxYVx4OTgiCisJCQkiXHg5NFx4YzRceGYwXHhmZlx4YWVceDNlXHg0NFx4ZTgiCisJCQkiXHhhNVx4YjNceGI1XHgzN1x4MmZceGU4XHhhZlx4NmYiCisJCQkiXHgyOFx4YzFceDM3XHg1Zlx4MzFceGQyXHhiOVx4MzMiCisJCQkiXHhiMVx4YjJceDUyXHg5NFx4NzVceDJjXHgyOVx4NTkiCisJCQkiXHgwNlx4YzJceDI1XHhlOFx4NzFceDY1XHg0ZVx4ZWQiCisJCQkiXHhjMFx4OWNceGIxXHhiYlx4MjVceGRjXHg2Y1x4ZTciCisJCQkiXHg0Ylx4YTVceDdhXHg1NFx4N2FceDYwXHhmZlx4N2EiCisJCQkiXHhlMFx4NTBceDQwXHg5Nlx4MzVceDYzXHhlNFx4MGIiCisJCQkiXHg3Nlx4YmRceGE0XHg2NVx4MDBceDFiXHg1N1x4ODgiCisJCQkiXHhhZVx4ZWRceDM5XHg4OFx4NDJceDExXHgzY1x4ZWQiCisJCQkiXHg4NVx4NjdceDdkXHhiOVx4NjhceDgyXHhlOVx4NDMiCisJCQkiXHgzY1x4NDdceDUzXHhmYVx4ZThceGY4XHg5Zlx4MWYiCisJCQkiXHg5Zlx4ZWZceDBmXHhmN1x4MzBceGQ5XHgzMFx4MGUiCisJCQkiXHhiOVx4OWZceDY5XHgxOFx4MmZceDdlXHhmOFx4ZjgiCisJCQkiXHhmOFx4OGNceDBmXHhkNFx4MDJceDRkXHhlYVx4Y2QiCisJCQkiXHgwYVx4OWNceDZmXHg3MVx4NmRceDVhXHg0Y1x4NjAiCisJCQkiXHhjZVx4MjBceDU2XHgzMlx4YzZceGM1XHg5OVx4MWYiCisJCQkiXHgwOVx4ZTZceDRlXHgxOFx4MWFceDE1XHgxM1x4YTgiCisJCQkiXHg3ZFx4YjFceDZiXHhjMFx4YjJceDZkXHhmOFx4MjYiCisJCQkiXHg2Nlx4ZjhceDNkXHgxOFx4NzRceDcwXHg2Nlx4N2EiCisJCQkiXHgzNFx4MTdceGRlXHhiYVx4NDdceGYxXHgwNlx4MTgiCisJCQkiXHhjYlx4YWZceGViXHg0YVx4MWVceDhmXHhhN1x4NzciCisJCQkiXHhlMFx4M2JceDc4XHg2Mlx4NjZceGM5XHgxMFx4ZWEiCisJCQkiXHgxZlx4YjdceDI5XHgwYVx4NDVceGExXHgxZFx4MWUiCisJCQkiXHgxZFx4ZTJceDY1XHg2MVx4NTBceDljXHhkN1x4MDUiCisJCQkiXHhmMlx4MGJceDViXHgxMlx4NjFceDAyXHhjOFx4ZTUiCisJCQkiXHg2M1x4NGZceDIwXHgwY1x4MDdceDE3XHgzM1x4NWUiCisJCQkiXHgwM1x4OWFceDUzXHgwZlx4MmVceDU1XHhmZVx4NTAiCisJCQkiXHg0M1x4N2RceGQwXHhiNlx4N2VceDVhXHhkYVx4YWUiCisJCQkiXHg1OFx4ZWZceDE1XHhhOVx4ODNceGQ5XHg0Nlx4YjEiCisJCQkiXHg0Mlx4YWFceGY1XHgwMlx4NmNceGNlXHg5Mlx4MDYiCisJCQkiXHgxYlx4ZGJceDY2XHg0NVx4OTFceDc5XHhjMlx4MmQiCisJCQkiXHhlNlx4NTNceGQzXHgxNFx4ZmRceGJiXHg0NFx4NjMiCisJCQkiXHhjNlx4ZDdceDNkXHg3YVx4MGNceDc1XHg3OFx4OWQiCisJCQkiXHg1Y1x4YTZceDM5XHhiM1x4ZTVceDYzXHhjYVx4OGIiCisJCQkiXHhmZVx4ZDNceGVmXHg2MFx4ODNceGY2XHg4ZVx4NzAiCisJCQkiXHhiNlx4NjdceGM3XHg3N1x4ZWRceDIzXHhlZlx4NGMiCisJCQkiXHhmMFx4ZWRceDJkXHgwN1x4NTlceDZmXHhjMVx4MDEiCisJCQkiXHgzNFx4MzdceDA4XHhhYlx4ZDlceDFmXHgwOVx4YjEiCisJCQkiXHhjZVx4NWJceDE3XHhmZlx4NzRceGY4XHg5Y1x4ZDUiCisJCQkiXHgyY1x4NTZceDM5XHg3OVx4MGZceDY5XHg0NFx4NzUiCisJCQkiXHg1OFx4MjdceDAxXHhjNFx4YmZceGE3XHhhMVx4MWQiCisJCQkiXHg5MFx4MTdceDc3XHg4Nlx4NWFceDNmXHhkOVx4ZDEiCisJCQkiXHgwZVx4YTBceDEwXHhmOFx4ZWNceDFlXHhhNVx4N2YiCisJCQkiXHg1ZVx4MzZceGQxXHhlM1x4MDRceDJjXHg3MFx4ZjciCisJCQkiXHg4ZVx4YzBceDk4XHgyZlx4NmNceDk0XHgyYlx4NDEiCisJCQkiXHhiN1x4NjBceDAwXHhiN1x4MmVceGI4XHgwMlx4OGQiCisJCQkiXHhiOFx4YjBceGQzXHg4Nlx4YmFceDFkXHhkN1x4OTAiCisJCQkiXHhkNlx4YjZceGUxXHhmY1x4ZDdceGQ4XHgyOFx4MDYiCisJCQkiXHg2M1x4OWJceGNlXHg2MVx4MjRceDc5XHhjMFx4NzAiCisJCQkiXHg1Mlx4ZDBceGI2XHhkNFx4MjhceDk1XHgyNFx4ODciCisJCQkiXHgwM1x4MWZceGI3XHg5YVx4ZGFceGEzXHhmYlx4NTIiCisJCQkiXHg1Ylx4NjhceGU3XHg0Y1x4OGNceDI0XHhlMVx4NDIiCisJCQkiXHhmN1x4ZDVceGZkXHhhZFx4MDZceDMyXHg5Zlx4YmEiCisJCQkiXHhjMVx4ZmNceGRkXHhjNlx4ZmNceGZjXHhiM1x4MzgiCisJCQkiXHg3NFx4NTZceDU4XHg0MFx4MDJceDM3XHg1Mlx4MmMiCisJCQkiXHg1NVx4Y2NceGIzXHg5ZVx4N2FceGU5XHhkNFx4MzgiCisJCQkiXHg0MVx4NWVceDBjXHgzNVx4ZTJceDExXHhkMVx4MTMiCisJCQkiXHhmOFx4YjdceDhkXHg3Mlx4NmJceDIyXHgyYVx4YjAiCisJCQkiXHhkYlx4MDhceGJhXHgzNVx4YjlceDNmXHhjOFx4ZDMiCisJCQkiXHgyNFx4OTBceGVjXHg1OFx4ZDJceDA5XHhjN1x4MmQiCisJCQkiXHhlZFx4MzhceDgwXHgzNlx4NzJceDQzXHgyN1x4NDkiCisJCQkiXHg0YVx4ODBceDhhXHhhMlx4ZThceGQzXHhkYVx4MzAiCisJCQkiXHg3ZFx4YjZceDgyXHgzN1x4ODZceDkyXHg4Nlx4M2UiCisJCQkiXHgwOFx4YjJceDI4XHg1YVx4NTVceDQ0XHgyNFx4N2QiCisJCQkiXHg0MFx4NDhceDhhXHhiNlx4ODlceDU4XHgwOFx4YTAiCisJCQkiXHhkNlx4NmRceDNhXHgxN1x4YmZceGY2XHg1NFx4YTIiCisJCQkiXHhmNVx4ZDNceDhjXHgwZlx4NzhceDEyXHg1N1x4OGIiCisJCQkiXHhkNVx4YzJceGZkXHg1OFx4NWJceDdmXHgzOFx4ZTMiCisJCQkiXHhjY1x4YjdceDdjXHg0OFx4YjNceDIwXHhlOFx4ODEiCisJCQkiXHgxNFx4MzJceDQ1XHgwNVx4ZTBceGRiXHg5Zlx4NzUiCisJCQkiXHg4NVx4YjRceDZhXHhmY1x4OTVceGUzXHg1NFx4MjIiCisJCQkiXHgxMlx4ZWVceDMwXHhmZVx4ZDhceDMwXHhlZlx4MzQiCisJCQkiXHg1MFx4YWJceDQ2XHgzMFx4OThceDJmXHhiN1x4YzAiCisJCQkiXHgxNVx4YTJceDgzXHhiNlx4ZjJceDA2XHgyMVx4YTIiCisJCQkiXHhjM1x4MjZceDM3XHgxNFx4ZDFceDRkXHhiNVx4MTAiCisJCQkiXHg1Mlx4NzZceDRkXHg2YVx4ZWVceGI1XHgyYlx4MTUiCisJCQkiXHhiN1x4ZjlceDUxXHhlOFx4MmFceGFmXHhjN1x4ZmEiCisJCQkiXHg3N1x4YWZceGIwXHgwNVx4NGRceGQxXHg2OFx4OGUiCisJCQkiXHg3NFx4MDVceDlmXHg5ZFx4OTNceGE1XHgzZVx4N2YiCisJCQkiXHg0ZVx4NWZceDlkXHhjYlx4MDlceGM3XHg4M1x4ZTMiCisJCQkiXHgwMlx4OWRceDI3XHgxZlx4ZWZceDg1XHgwNVx4OGQiCisJCQkiXHhlY1x4NTVceDg4XHgwZlx4MGRceDdjXHg0Y1x4ZTgiCisJCQkiXHhhMVx4NzVceGEwXHhkOFx4MDZceDQ3XHgxNFx4ZWYiCisJCQkiXHhhYVx4NjFceGNmXHgyNlx4MTVceGFkXHhkOFx4YTMiCisJCQkiXHhhYVx4NzVceGYyXHg3OFx4NGFceDVhXHg2MVx4ZGYiCisJCQkiXHg4Ylx4YzdceDA0XHhiY1x4YjJceDMyXHhkMlx4N2UiCisJCQkiXHg0Mlx4ZWVceGI0XHgyZlx4NTFceGZmXHg3Ylx4MmUiCisJCQkiXHhkM1x4MDJceGU4XHhkY1x4NWRceDBkXHg1MFx4ZGMiCisJCQkiXHhhZVx4YjdceDQ2XHhmOVx4YThceGU2XHhkMFx4MTYiCisJCQkiXHhjY1x4ZTZceDJjXHg4MVx4YzdceGFkXHhlOVx4ZjAiCisJCQkiXHgwNVx4NzJceDZkXHgzZFx4MGFceDdhXHhhOVx4MDIiCisJCQkiXHhhY1x4ODJceDkzXHg2ZVx4YjZceDFjXHgyOFx4ZmMiCisJCQkiXHg0NFx4MTJceGZiXHg3M1x4NzdceGQ0XHgxM1x4MzkiCisJCQkiXHgyOVx4ODhceDhhXHhmM1x4NWNceGE2XHgzNlx4YTAiCisJCQkiXHgyYVx4ZWRceDdlXHhiMVx4MWRceGQ2XHg0Y1x4NmIiCisJCQkiXHg0MVx4MDFceDE4XHg1ZFx4NWRceDA3XHg5N1x4YTYiCisJCQkiXHg0Ylx4ZWZceDMxXHgxOFx4ZWFceGFjXHhiMVx4ODQiCisJCQkiXHgyMVx4ZWRceGRhXHg4NiIsCiAJCS5ybGVuID0gNDEwMCwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBhZXNfY3RyX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsgLyogRnJvbSBSRkMgMzY4NiAqLwotCQkua2V5CT0geyAweGFlLCAweDY4LCAweDUyLCAweGY4LCAweDEyLCAweDEwLCAweDY3LCAweGNjLAotCQkJICAgIDB4NGIsIDB4ZjcsIDB4YTUsIDB4NzYsIDB4NTUsIDB4NzcsIDB4ZjMsIDB4OWUsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCB9LAorCQkua2V5CT0gIlx4YWVceDY4XHg1Mlx4ZjhceDEyXHgxMFx4NjdceGNjIgorCQkJICAiXHg0Ylx4ZjdceGE1XHg3Nlx4NTVceDc3XHhmM1x4OWUiCisJCQkgICJceDAwXHgwMFx4MDBceDMwIiwKIAkJLmtsZW4JPSAyMCwKLQkJLml2IAk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQJPSB7IDB4ZTQsIDB4MDksIDB4NWQsIDB4NGYsIDB4YjcsIDB4YTcsIDB4YjMsIDB4NzksCi0JCQkgICAgMHgyZCwgMHg2MSwgMHg3NSwgMHhhMywgMHgyNiwgMHgxMywgMHgxMSwgMHhiOCB9LAorCQkuaXYJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQJPSAiXHhlNFx4MDlceDVkXHg0Zlx4YjdceGE3XHhiM1x4NzkiCisJCQkgICJceDJkXHg2MVx4NzVceGEzXHgyNlx4MTNceDExXHhiOCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7ICJTaW5nbGUgYmxvY2sgbXNnIiB9LAorCQkucmVzdWx0CT0gIlNpbmdsZSBibG9jayBtc2ciLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHg3ZSwgMHgyNCwgMHgwNiwgMHg3OCwgMHgxNywgMHhmYSwgMHhlMCwgMHhkNywKLQkJCSAgICAweDQzLCAweGQ2LCAweGNlLCAweDFmLCAweDMyLCAweDUzLCAweDkxLCAweDYzLAotCQkJICAgIDB4MDAsIDB4NmMsIDB4YjYsIDB4ZGIgfSwKKwkJLmtleQk9ICJceDdlXHgyNFx4MDZceDc4XHgxN1x4ZmFceGUwXHhkNyIKKwkJCSAgIlx4NDNceGQ2XHhjZVx4MWZceDMyXHg1M1x4OTFceDYzIgorCQkJICAiXHgwMFx4NmNceGI2XHhkYiIsCiAJCS5rbGVuCT0gMjAsCi0JCS5pdiAJPSB7IDB4YzAsIDB4NTQsIDB4M2IsIDB4NTksIDB4ZGEsIDB4NDgsIDB4ZDksIDB4MGIgfSwKLQkJLmlucHV0CT0geyAweDUxLCAweDA0LCAweGExLCAweDA2LCAweDE2LCAweDhhLCAweDcyLCAweGQ5LAotCQkJICAgIDB4NzksIDB4MGQsIDB4NDEsIDB4ZWUsIDB4OGUsIDB4ZGEsIDB4ZDMsIDB4ODgsCi0JCQkgICAgMHhlYiwgMHgyZSwgMHgxZSwgMHhmYywgMHg0NiwgMHhkYSwgMHg1NywgMHhjOCwKLQkJCSAgICAweGZjLCAweGU2LCAweDMwLCAweGRmLCAweDkxLCAweDQxLCAweGJlLCAweDI4IH0sCi0JCS5pbGVuIAk9IDMyLAotCQkucmVzdWx0CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisJCS5pdgk9ICJceGMwXHg1NFx4M2JceDU5XHhkYVx4NDhceGQ5XHgwYiIsCisJCS5pbnB1dAk9ICJceDUxXHgwNFx4YTFceDA2XHgxNlx4OGFceDcyXHhkOSIKKwkJCSAgIlx4NzlceDBkXHg0MVx4ZWVceDhlXHhkYVx4ZDNceDg4IgorCQkJICAiXHhlYlx4MmVceDFlXHhmY1x4NDZceGRhXHg1N1x4YzgiCisJCQkgICJceGZjXHhlNlx4MzBceGRmXHg5MVx4NDFceGJlXHgyOCIsCisJCS5pbGVuCT0gMzIsCisJCS5yZXN1bHQJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiLAogCQkucmxlbgk9IDMyLAogCX0sIHsKLQkJLmtleSAJPSB7IDB4MTYsIDB4YWYsIDB4NWIsIDB4MTQsIDB4NWYsIDB4YzksIDB4ZjUsIDB4NzksCi0JCQkgICAgMHhjMSwgMHg3NSwgMHhmOSwgMHgzZSwgMHgzYiwgMHhmYiwgMHgwZSwgMHhlZCwKLQkJCSAgICAweDg2LCAweDNkLCAweDA2LCAweGNjLCAweGZkLCAweGI3LCAweDg1LCAweDE1LAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDggfSwKLQkJLmtsZW4gCT0gMjgsCi0JCS5pdgk9IHsgMHgzNiwgMHg3MywgMHgzYywgMHgxNCwgMHg3ZCwgMHg2ZCwgMHg5MywgMHhjYiB9LAotCQkuaW5wdXQJPSB7IDB4NGIsIDB4NTUsIDB4MzgsIDB4NGYsIDB4ZTIsIDB4NTksIDB4YzksIDB4YzgsCi0JCQkgICAgMHg0ZSwgMHg3OSwgMHgzNSwgMHhhMCwgMHgwMywgMHhjYiwgMHhlOSwgMHgyOCB9LAotCQkuaWxlbiAJPSAxNiwKLQkJLnJlc3VsdAk9IHsgIlNpbmdsZSBibG9jayBtc2ciIH0sCisJCS5rZXkJPSAiXHgxNlx4YWZceDViXHgxNFx4NWZceGM5XHhmNVx4NzkiCisJCQkgICJceGMxXHg3NVx4ZjlceDNlXHgzYlx4ZmJceDBlXHhlZCIKKwkJCSAgIlx4ODZceDNkXHgwNlx4Y2NceGZkXHhiN1x4ODVceDE1IgorCQkJICAiXHgwMFx4MDBceDAwXHg0OCIsCisJCS5rbGVuCT0gMjgsCisJCS5pdgk9ICJceDM2XHg3M1x4M2NceDE0XHg3ZFx4NmRceDkzXHhjYiIsCisJCS5pbnB1dAk9ICJceDRiXHg1NVx4MzhceDRmXHhlMlx4NTlceGM5XHhjOCIKKwkJCSAgIlx4NGVceDc5XHgzNVx4YTBceDAzXHhjYlx4ZTlceDI4IiwKKwkJLmlsZW4JPSAxNiwKKwkJLnJlc3VsdAk9ICJTaW5nbGUgYmxvY2sgbXNnIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4N2MsIDB4NWMsIDB4YjIsIDB4NDAsIDB4MWIsIDB4M2QsIDB4YzMsIDB4M2MsCi0JCQkgICAgMHgxOSwgMHhlNywgMHgzNCwgMHgwOCwgMHgxOSwgMHhlMCwgMHhmNiwgMHg5YywKLQkJCSAgICAweDY3LCAweDhjLCAweDNkLCAweGI4LCAweGU2LCAweGY2LCAweGE5LCAweDFhLAotCQkJICAgIDB4MDAsIDB4OTYsIDB4YjAsIDB4M2IgfSwKKwkJLmtleQk9ICJceDdjXHg1Y1x4YjJceDQwXHgxYlx4M2RceGMzXHgzYyIKKwkJCSAgIlx4MTlceGU3XHgzNFx4MDhceDE5XHhlMFx4ZjZceDljIgorCQkJICAiXHg2N1x4OGNceDNkXHhiOFx4ZTZceGY2XHhhOVx4MWEiCisJCQkgICJceDAwXHg5Nlx4YjBceDNiIiwKIAkJLmtsZW4JPSAyOCwKLQkJLml2IAk9IHsgMHgwMiwgMHgwYywgMHg2ZSwgMHhhZCwgMHhjMiwgMHhjYiwgMHg1MCwgMHgwZCB9LAotCQkuaW5wdXQJPSB7IDB4NDUsIDB4MzIsIDB4NDMsIDB4ZmMsIDB4NjAsIDB4OWIsIDB4MjMsIDB4MzIsCi0JCQkgICAgMHg3ZSwgMHhkZiwgMHhhYSwgMHhmYSwgMHg3MSwgMHgzMSwgMHhjZCwgMHg5ZiwKLQkJCSAgICAweDg0LCAweDkwLCAweDcwLCAweDFjLCAweDVhLCAweGQ0LCAweGE3LCAweDljLAotCQkJICAgIDB4ZmMsIDB4MWYsIDB4ZTAsIDB4ZmYsIDB4NDIsIDB4ZjQsIDB4ZmIsIDB4MDAgfSwKKwkJLml2CT0gIlx4MDJceDBjXHg2ZVx4YWRceGMyXHhjYlx4NTBceDBkIiwKKwkJLmlucHV0CT0gIlx4NDVceDMyXHg0M1x4ZmNceDYwXHg5Ylx4MjNceDMyIgorCQkJICAiXHg3ZVx4ZGZceGFhXHhmYVx4NzFceDMxXHhjZFx4OWYiCisJCQkgICJceDg0XHg5MFx4NzBceDFjXHg1YVx4ZDRceGE3XHg5YyIKKwkJCSAgIlx4ZmNceDFmXHhlMFx4ZmZceDQyXHhmNFx4ZmJceDAwIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAotCQkucmxlbiAJPSAzMiwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIsCisJCS5ybGVuCT0gMzIsCiAJfSwgeyAKLQkJLmtleSAJPSB7IDB4NzcsIDB4NmIsIDB4ZWYsIDB4ZjIsIDB4ODUsIDB4MWQsIDB4YjAsIDB4NmYsCi0JCQkgICAgMHg0YywgMHg4YSwgMHgwNSwgMHg0MiwgMHhjOCwgMHg2OSwgMHg2ZiwgMHg2YywKLQkJCSAgICAweDZhLCAweDgxLCAweGFmLCAweDFlLCAweGVjLCAweDk2LCAweGI0LCAweGQzLAotCQkJICAgIDB4N2YsIDB4YzEsIDB4ZDYsIDB4ODksIDB4ZTYsIDB4YzEsIDB4YzEsIDB4MDQsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCB9LAorCQkua2V5CT0gIlx4NzdceDZiXHhlZlx4ZjJceDg1XHgxZFx4YjBceDZmIgorCQkJICAiXHg0Y1x4OGFceDA1XHg0Mlx4YzhceDY5XHg2Zlx4NmMiCisJCQkgICJceDZhXHg4MVx4YWZceDFlXHhlY1x4OTZceGI0XHhkMyIKKwkJCSAgIlx4N2ZceGMxXHhkNlx4ODlceGU2XHhjMVx4YzFceDA0IgorCQkJICAiXHgwMFx4MDBceDAwXHg2MCIsCiAJCS5rbGVuCT0gMzYsCi0JCS5pdiAJPSB7IDB4ZGIsIDB4NTYsIDB4NzIsIDB4YzksIDB4N2EsIDB4YTgsIDB4ZjAsIDB4YjIgfSwKLQkJLmlucHV0CT0geyAweDE0LCAweDVhLCAweGQwLCAweDFkLCAweGJmLCAweDgyLCAweDRlLCAweGM3LAotCQkJICAgIDB4NTYsIDB4MDgsIDB4NjMsIDB4ZGMsIDB4NzEsIDB4ZTMsIDB4ZTAsIDB4YzAgfSwKKwkJLml2CT0gIlx4ZGJceDU2XHg3Mlx4YzlceDdhXHhhOFx4ZjBceGIyIiwKKwkJLmlucHV0CT0gIlx4MTRceDVhXHhkMFx4MWRceGJmXHg4Mlx4NGVceGM3IgorCQkJICAiXHg1Nlx4MDhceDYzXHhkY1x4NzFceGUzXHhlMFx4YzAiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAiU2luZ2xlIGJsb2NrIG1zZyIgfSwKLQkJLnJsZW4gCT0gMTYsCisJCS5yZXN1bHQJPSAiU2luZ2xlIGJsb2NrIG1zZyIsCisJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweGY2LCAweGQ2LCAweDZkLCAweDZiLCAweGQ1LCAweDJkLCAweDU5LCAweGJiLAotCQkJICAgIDB4MDcsIDB4OTYsIDB4MzYsIDB4NTgsIDB4NzksIDB4ZWYsIDB4ZjgsIDB4ODYsCi0JCQkgICAgMHhjNiwgMHg2ZCwgMHhkNSwgMHgxYSwgMHg1YiwgMHg2YSwgMHg5OSwgMHg3NCwKLQkJCSAgICAweDRiLCAweDUwLCAweDU5LCAweDBjLCAweDg3LCAweGEyLCAweDM4LCAweDg0LAotCQkJICAgIDB4MDAsIDB4ZmEsIDB4YWMsIDB4MjQgfSwKLQkJLmtsZW4gCT0gMzYsCi0JCS5pdgk9IHsgMHhjMSwgMHg1OCwgMHg1ZSwgMHhmMSwgMHg1YSwgMHg0MywgMHhkOCwgMHg3NSB9LAotCQkuaW5wdXQJPSB7IDB4ZjAsIDB4NWUsIDB4MjMsIDB4MWIsIDB4MzgsIDB4OTQsIDB4NjEsIDB4MmMsCi0JCQkgICAgMHg0OSwgMHhlZSwgMHgwMCwgMHgwYiwgMHg4MCwgMHg0ZSwgMHhiMiwgMHhhOSwKLQkJCSAgICAweGI4LCAweDMwLCAweDZiLCAweDUwLCAweDhmLCAweDgzLCAweDlkLCAweDZhLAotCQkJICAgIDB4NTUsIDB4MzAsIDB4ODMsIDB4MWQsIDB4OTMsIDB4NDQsIDB4YWYsIDB4MWMgfSwKKwkJLmtleQk9ICJceGY2XHhkNlx4NmRceDZiXHhkNVx4MmRceDU5XHhiYiIKKwkJCSAgIlx4MDdceDk2XHgzNlx4NThceDc5XHhlZlx4ZjhceDg2IgorCQkJICAiXHhjNlx4NmRceGQ1XHgxYVx4NWJceDZhXHg5OVx4NzQiCisJCQkgICJceDRiXHg1MFx4NTlceDBjXHg4N1x4YTJceDM4XHg4NCIKKwkJCSAgIlx4MDBceGZhXHhhY1x4MjQiLAorCQkua2xlbgk9IDM2LAorCQkuaXYJPSAiXHhjMVx4NThceDVlXHhmMVx4NWFceDQzXHhkOFx4NzUiLAorCQkuaW5wdXQJPSAiXHhmMFx4NWVceDIzXHgxYlx4MzhceDk0XHg2MVx4MmMiCisJCQkgICJceDQ5XHhlZVx4MDBceDBiXHg4MFx4NGVceGIyXHhhOSIKKwkJCSAgIlx4YjhceDMwXHg2Ylx4NTBceDhmXHg4M1x4OWRceDZhIgorCQkJICAiXHg1NVx4MzBceDgzXHgxZFx4OTNceDQ0XHhhZlx4MWMiLAogCQkuaWxlbgk9IDMyLAotCQkucmVzdWx0CT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisJCS5yZXN1bHQJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiLAogCQkucmxlbgk9IDMyLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGFlYWRfdGVzdHZlYyBhZXNfZ2NtX2VuY190dl90ZW1wbGF0ZVtdID0gewogCXsgLyogRnJvbSBNY0dyZXcgJiBWaWVnYSAtIGh0dHA6Ly9jaXRlc2Vlci5pc3QucHN1LmVkdS82NTY5ODkuaHRtbCAqLworCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg1OCwgMHhlMiwgMHhmYywgMHhjZSwgMHhmYSwgMHg3ZSwgMHgzMCwgMHg2MSwKLQkJCSAgICAweDM2LCAweDdmLCAweDFkLCAweDU3LCAweGE0LCAweGU3LCAweDQ1LCAweDVhIH0sCisJCS5yZXN1bHQJPSAiXHg1OFx4ZTJceGZjXHhjZVx4ZmFceDdlXHgzMFx4NjEiCisJCQkgICJceDM2XHg3Zlx4MWRceDU3XHhhNFx4ZTdceDQ1XHg1YSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgeworCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKKwkJLmlucHV0ICA9IHplcm9lZF9zdHJpbmcsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQgPSB7IDB4MDMsIDB4ODgsIDB4ZGEsIDB4Y2UsIDB4NjAsIDB4YjYsIDB4YTMsIDB4OTIsCi0JCQkgICAgMHhmMywgMHgyOCwgMHhjMiwgMHhiOSwgMHg3MSwgMHhiMiwgMHhmZSwgMHg3OCwKLQkJCSAgICAweGFiLCAweDZlLCAweDQ3LCAweGQ0LCAweDJjLCAweGVjLCAweDEzLCAweGJkLAotCQkJICAgIDB4ZjUsIDB4M2EsIDB4NjcsIDB4YjIsIDB4MTIsIDB4NTcsIDB4YmQsIDB4ZGYgfSwKKwkJLnJlc3VsdCA9ICJceDAzXHg4OFx4ZGFceGNlXHg2MFx4YjZceGEzXHg5MiIKKwkJCSAgIlx4ZjNceDI4XHhjMlx4YjlceDcxXHhiMlx4ZmVceDc4IgorCQkJICAiXHhhYlx4NmVceDQ3XHhkNFx4MmNceGVjXHgxM1x4YmQiCisJCQkgICJceGY1XHgzYVx4NjdceGIyXHgxMlx4NTdceGJkXHhkZiIsCiAJCS5ybGVuCT0gMzIsCiAJfSwgewotCQkua2V5CT0geyAweGZlLCAweGZmLCAweGU5LCAweDkyLCAweDg2LCAweDY1LCAweDczLCAweDFjLAotCQkJICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDggfSwKKwkJLmtleQk9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IiwKIAkJLmtsZW4JPSAxNiwKLQkJLml2CT0geyAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZhLCAweGNlLCAweGRiLCAweGFkLAotCQkJICAgIDB4ZGUsIDB4Y2EsIDB4ZjgsIDB4ODggfSwKLQkJLmlucHV0CT0geyAweGQ5LCAweDMxLCAweDMyLCAweDI1LCAweGY4LCAweDg0LCAweDA2LCAweGU1LAotCQkJICAgIDB4YTUsIDB4NTksIDB4MDksIDB4YzUsIDB4YWYsIDB4ZjUsIDB4MjYsIDB4OWEsCi0JCQkgICAgMHg4NiwgMHhhNywgMHhhOSwgMHg1MywgMHgxNSwgMHgzNCwgMHhmNywgMHhkYSwKLQkJCSAgICAweDJlLCAweDRjLCAweDMwLCAweDNkLCAweDhhLCAweDMxLCAweDhhLCAweDcyLAotCQkJICAgIDB4MWMsIDB4M2MsIDB4MGMsIDB4OTUsIDB4OTUsIDB4NjgsIDB4MDksIDB4NTMsCi0JCQkgICAgMHgyZiwgMHhjZiwgMHgwZSwgMHgyNCwgMHg0OSwgMHhhNiwgMHhiNSwgMHgyNSwKLQkJCSAgICAweGIxLCAweDZhLCAweGVkLCAweGY1LCAweGFhLCAweDBkLCAweGU2LCAweDU3LAotCQkJICAgIDB4YmEsIDB4NjMsIDB4N2IsIDB4MzksIDB4MWEsIDB4YWYsIDB4ZDIsIDB4NTUgfSwKKwkJLml2CT0gIlx4Y2FceGZlXHhiYVx4YmVceGZhXHhjZVx4ZGJceGFkIgorCQkJICAiXHhkZVx4Y2FceGY4XHg4OCIsCisJCS5pbnB1dAk9ICJceGQ5XHgzMVx4MzJceDI1XHhmOFx4ODRceDA2XHhlNSIKKwkJCSAgIlx4YTVceDU5XHgwOVx4YzVceGFmXHhmNVx4MjZceDlhIgorCQkJICAiXHg4Nlx4YTdceGE5XHg1M1x4MTVceDM0XHhmN1x4ZGEiCisJCQkgICJceDJlXHg0Y1x4MzBceDNkXHg4YVx4MzFceDhhXHg3MiIKKwkJCSAgIlx4MWNceDNjXHgwY1x4OTVceDk1XHg2OFx4MDlceDUzIgorCQkJICAiXHgyZlx4Y2ZceDBlXHgyNFx4NDlceGE2XHhiNVx4MjUiCisJCQkgICJceGIxXHg2YVx4ZWRceGY1XHhhYVx4MGRceGU2XHg1NyIKKwkJCSAgIlx4YmFceDYzXHg3Ylx4MzlceDFhXHhhZlx4ZDJceDU1IiwKIAkJLmlsZW4JPSA2NCwKLQkJLnJlc3VsdCA9IHsgMHg0MiwgMHg4MywgMHgxZSwgMHhjMiwgMHgyMSwgMHg3NywgMHg3NCwgMHgyNCwKLQkJCSAgICAweDRiLCAweDcyLCAweDIxLCAweGI3LCAweDg0LCAweGQwLCAweGQ0LCAweDljLAotCQkJICAgIDB4ZTMsIDB4YWEsIDB4MjEsIDB4MmYsIDB4MmMsIDB4MDIsIDB4YTQsIDB4ZTAsCi0JCQkgICAgMHgzNSwgMHhjMSwgMHg3ZSwgMHgyMywgMHgyOSwgMHhhYywgMHhhMSwgMHgyZSwKLQkJCSAgICAweDIxLCAweGQ1LCAweDE0LCAweGIyLCAweDU0LCAweDY2LCAweDkzLCAweDFjLAotCQkJICAgIDB4N2QsIDB4OGYsIDB4NmEsIDB4NWEsIDB4YWMsIDB4ODQsIDB4YWEsIDB4MDUsCi0JCQkgICAgMHgxYiwgMHhhMywgMHgwYiwgMHgzOSwgMHg2YSwgMHgwYSwgMHhhYywgMHg5NywKLQkJCSAgICAweDNkLCAweDU4LCAweGUwLCAweDkxLCAweDQ3LCAweDNmLCAweDU5LCAweDg1LAotCQkJICAgIDB4NGQsIDB4NWMsIDB4MmEsIDB4ZjMsIDB4MjcsIDB4Y2QsIDB4NjQsIDB4YTYsCi0JCQkgICAgMHgyYywgMHhmMywgMHg1YSwgMHhiZCwgMHgyYiwgMHhhNiwgMHhmYSwgMHhiNCB9LAorCQkucmVzdWx0ID0gIlx4NDJceDgzXHgxZVx4YzJceDIxXHg3N1x4NzRceDI0IgorCQkJICAiXHg0Ylx4NzJceDIxXHhiN1x4ODRceGQwXHhkNFx4OWMiCisJCQkgICJceGUzXHhhYVx4MjFceDJmXHgyY1x4MDJceGE0XHhlMCIKKwkJCSAgIlx4MzVceGMxXHg3ZVx4MjNceDI5XHhhY1x4YTFceDJlIgorCQkJICAiXHgyMVx4ZDVceDE0XHhiMlx4NTRceDY2XHg5M1x4MWMiCisJCQkgICJceDdkXHg4Zlx4NmFceDVhXHhhY1x4ODRceGFhXHgwNSIKKwkJCSAgIlx4MWJceGEzXHgwYlx4MzlceDZhXHgwYVx4YWNceDk3IgorCQkJICAiXHgzZFx4NThceGUwXHg5MVx4NDdceDNmXHg1OVx4ODUiCisJCQkgICJceDRkXHg1Y1x4MmFceGYzXHgyN1x4Y2RceDY0XHhhNiIKKwkJCSAgIlx4MmNceGYzXHg1YVx4YmRceDJiXHhhNlx4ZmFceGI0IiwKIAkJLnJsZW4JPSA4MCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMsCi0JCQkgICAgMHg2ZCwgMHg2YSwgMHg4ZiwgMHg5NCwgMHg2NywgMHgzMCwgMHg4MywgMHgwOCB9LAorCQkua2V5CT0gIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjIgorCQkJICAiXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCi0JCQkgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCB9LAotCQkuaW5wdXQJPSB7IDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCi0JCQkgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKLQkJCSAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLAotCQkJICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCi0JCQkgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKLQkJCSAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LAotCQkJICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCi0JCQkgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOSB9LAorCQkuaXYJPSAiXHhjYVx4ZmVceGJhXHhiZVx4ZmFceGNlXHhkYlx4YWQiCisJCQkgICJceGRlXHhjYVx4ZjhceDg4IiwKKwkJLmlucHV0CT0gIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1IgorCQkJICAiXHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisJCQkgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYSIKKwkJCSAgIlx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorCQkJICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTMiCisJCQkgICJceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKwkJCSAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3IgorCQkJICAiXHhiYVx4NjNceDdiXHgzOSIsCiAJCS5pbGVuCT0gNjAsCi0JCS5hc3NvYwk9IHsgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKLQkJCSAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAotCQkJICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIgfSwKKwkJLmFzc29jCT0gIlx4ZmVceGVkXHhmYVx4Y2VceGRlXHhhZFx4YmVceGVmIgorCQkJICAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWYiCisJCQkgICJceGFiXHhhZFx4ZGFceGQyIiwKIAkJLmFsZW4JPSAyMCwKLQkJLnJlc3VsdCA9IHsgMHg0MiwgMHg4MywgMHgxZSwgMHhjMiwgMHgyMSwgMHg3NywgMHg3NCwgMHgyNCwKLQkJCSAgICAweDRiLCAweDcyLCAweDIxLCAweGI3LCAweDg0LCAweGQwLCAweGQ0LCAweDljLAotCQkJICAgIDB4ZTMsIDB4YWEsIDB4MjEsIDB4MmYsIDB4MmMsIDB4MDIsIDB4YTQsIDB4ZTAsCi0JCQkgICAgMHgzNSwgMHhjMSwgMHg3ZSwgMHgyMywgMHgyOSwgMHhhYywgMHhhMSwgMHgyZSwKLQkJCSAgICAweDIxLCAweGQ1LCAweDE0LCAweGIyLCAweDU0LCAweDY2LCAweDkzLCAweDFjLAotCQkJICAgIDB4N2QsIDB4OGYsIDB4NmEsIDB4NWEsIDB4YWMsIDB4ODQsIDB4YWEsIDB4MDUsCi0JCQkgICAgMHgxYiwgMHhhMywgMHgwYiwgMHgzOSwgMHg2YSwgMHgwYSwgMHhhYywgMHg5NywKLQkJCSAgICAweDNkLCAweDU4LCAweGUwLCAweDkxLAotCQkJICAgIDB4NWIsIDB4YzksIDB4NGYsIDB4YmMsIDB4MzIsIDB4MjEsIDB4YTUsIDB4ZGIsCi0JCQkgICAgMHg5NCwgMHhmYSwgMHhlOSwgMHg1YSwgMHhlNywgMHgxMiwgMHgxYSwgMHg0NyB9LAorCQkucmVzdWx0ID0gIlx4NDJceDgzXHgxZVx4YzJceDIxXHg3N1x4NzRceDI0IgorCQkJICAiXHg0Ylx4NzJceDIxXHhiN1x4ODRceGQwXHhkNFx4OWMiCisJCQkgICJceGUzXHhhYVx4MjFceDJmXHgyY1x4MDJceGE0XHhlMCIKKwkJCSAgIlx4MzVceGMxXHg3ZVx4MjNceDI5XHhhY1x4YTFceDJlIgorCQkJICAiXHgyMVx4ZDVceDE0XHhiMlx4NTRceDY2XHg5M1x4MWMiCisJCQkgICJceDdkXHg4Zlx4NmFceDVhXHhhY1x4ODRceGFhXHgwNSIKKwkJCSAgIlx4MWJceGEzXHgwYlx4MzlceDZhXHgwYVx4YWNceDk3IgorCQkJICAiXHgzZFx4NThceGUwXHg5MSIKKwkJCSAgIlx4NWJceGM5XHg0Zlx4YmNceDMyXHgyMVx4YTVceGRiIgorCQkJICAiXHg5NFx4ZmFceGU5XHg1YVx4ZTdceDEyXHgxYVx4NDciLAogCQkucmxlbgk9IDc2LAogCX0sIHsKKwkJLmtleSAgICA9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMjQsCi0JCS5yZXN1bHQJPSB7IDB4Y2QsIDB4MzMsIDB4YjIsIDB4OGEsIDB4YzcsIDB4NzMsIDB4ZjcsIDB4NGIsCi0JCQkgICAgMHhhMCwgMHgwZSwgMHhkMSwgMHhmMywgMHgxMiwgMHg1NywgMHgyNCwgMHgzNSB9LAorCQkucmVzdWx0CT0gIlx4Y2RceDMzXHhiMlx4OGFceGM3XHg3M1x4ZjdceDRiIgorCQkJICAiXHhhMFx4MGVceGQxXHhmM1x4MTJceDU3XHgyNFx4MzUiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKKwkJLmtleSAgICA9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMjQsCisJCS5pbnB1dCAgPSB6ZXJvZWRfc3RyaW5nLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0ID0geyAweDk4LCAweGU3LCAweDI0LCAweDdjLCAweDA3LCAweGYwLCAweGZlLCAweDQxLAotCQkJICAgIDB4MWMsIDB4MjYsIDB4N2UsIDB4NDMsIDB4ODQsIDB4YjAsIDB4ZjYsIDB4MDAsCi0JCQkgICAgMHgyZiwgMHhmNSwgMHg4ZCwgMHg4MCwgMHgwMywgMHgzOSwgMHgyNywgMHhhYiwKLQkJCSAgICAweDhlLCAweGY0LCAweGQ0LCAweDU4LCAweDc1LCAweDE0LCAweGYwLCAweGZiIH0sCisJCS5yZXN1bHQgPSAiXHg5OFx4ZTdceDI0XHg3Y1x4MDdceGYwXHhmZVx4NDEiCisJCQkgICJceDFjXHgyNlx4N2VceDQzXHg4NFx4YjBceGY2XHgwMCIKKwkJCSAgIlx4MmZceGY1XHg4ZFx4ODBceDAzXHgzOVx4MjdceGFiIgorCQkJICAiXHg4ZVx4ZjRceGQ0XHg1OFx4NzVceDE0XHhmMFx4ZmIiLAogCQkucmxlbgk9IDMyLAogCX0sIHsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKLQkJCSAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LAotCQkJICAgIDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMgfSwKKwkJLmtleQk9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorCQkJICAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiLAogCQkua2xlbgk9IDI0LAotCQkuaXYJPSB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCi0JCQkgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCB9LAotCQkuaW5wdXQJPSB7IDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCi0JCQkgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKLQkJCSAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLAotCQkJICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCi0JCQkgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKLQkJCSAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LAotCQkJICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCi0JCQkgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOSwgMHgxYSwgMHhhZiwgMHhkMiwgMHg1NSB9LAorCQkuaXYJPSAiXHhjYVx4ZmVceGJhXHhiZVx4ZmFceGNlXHhkYlx4YWQiCisJCQkgICJceGRlXHhjYVx4ZjhceDg4IiwKKwkJLmlucHV0CT0gIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1IgorCQkJICAiXHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisJCQkgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYSIKKwkJCSAgIlx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorCQkJICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTMiCisJCQkgICJceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKwkJCSAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3IgorCQkJICAiXHhiYVx4NjNceDdiXHgzOVx4MWFceGFmXHhkMlx4NTUiLAogCQkuaWxlbgk9IDY0LAotCQkucmVzdWx0ID0geyAweDM5LCAweDgwLCAweGNhLCAweDBiLCAweDNjLCAweDAwLCAweGU4LCAweDQxLAotCQkJICAgIDB4ZWIsIDB4MDYsIDB4ZmEsIDB4YzQsIDB4ODcsIDB4MmEsIDB4MjcsIDB4NTcsCi0JCQkgICAgMHg4NSwgMHg5ZSwgMHgxYywgMHhlYSwgMHhhNiwgMHhlZiwgMHhkOSwgMHg4NCwKLQkJCSAgICAweDYyLCAweDg1LCAweDkzLCAweGI0LCAweDBjLCAweGExLCAweGUxLCAweDljLAotCQkJICAgIDB4N2QsIDB4NzcsIDB4M2QsIDB4MDAsIDB4YzEsIDB4NDQsIDB4YzUsIDB4MjUsCi0JCQkgICAgMHhhYywgMHg2MSwgMHg5ZCwgMHgxOCwgMHhjOCwgMHg0YSwgMHgzZiwgMHg0NywKLQkJCSAgICAweDE4LCAweGUyLCAweDQ0LCAweDhiLCAweDJmLCAweGUzLCAweDI0LCAweGQ5LAotCQkJICAgIDB4Y2MsIDB4ZGEsIDB4MjcsIDB4MTAsIDB4YWMsIDB4YWQsIDB4ZTIsIDB4NTYsCi0JCQkgICAgMHg5OSwgMHgyNCwgMHhhNywgMHhjOCwgMHg1OCwgMHg3MywgMHgzNiwgMHhiZiwKLQkJCSAgICAweGIxLCAweDE4LCAweDAyLCAweDRkLCAweGI4LCAweDY3LCAweDRhLCAweDE0IH0sCisJCS5yZXN1bHQgPSAiXHgzOVx4ODBceGNhXHgwYlx4M2NceDAwXHhlOFx4NDEiCisJCQkgICJceGViXHgwNlx4ZmFceGM0XHg4N1x4MmFceDI3XHg1NyIKKwkJCSAgIlx4ODVceDllXHgxY1x4ZWFceGE2XHhlZlx4ZDlceDg0IgorCQkJICAiXHg2Mlx4ODVceDkzXHhiNFx4MGNceGExXHhlMVx4OWMiCisJCQkgICJceDdkXHg3N1x4M2RceDAwXHhjMVx4NDRceGM1XHgyNSIKKwkJCSAgIlx4YWNceDYxXHg5ZFx4MThceGM4XHg0YVx4M2ZceDQ3IgorCQkJICAiXHgxOFx4ZTJceDQ0XHg4Ylx4MmZceGUzXHgyNFx4ZDkiCisJCQkgICJceGNjXHhkYVx4MjdceDEwXHhhY1x4YWRceGUyXHg1NiIKKwkJCSAgIlx4OTlceDI0XHhhN1x4YzhceDU4XHg3M1x4MzZceGJmIgorCQkJICAiXHhiMVx4MThceDAyXHg0ZFx4YjhceDY3XHg0YVx4MTQiLAogCQkucmxlbgk9IDgwLAogCX0sIHsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKLQkJCSAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LAotCQkJICAgIDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMgfSwKKwkJLmtleQk9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorCQkJICAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiLAogCQkua2xlbgk9IDI0LAotCQkuaXYJPSB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCi0JCQkgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCB9LAotCQkuaW5wdXQJPSB7IDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCi0JCQkgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKLQkJCSAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLAotCQkJICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCi0JCQkgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKLQkJCSAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LAotCQkJICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCi0JCQkgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOSB9LAorCQkuaXYJPSAiXHhjYVx4ZmVceGJhXHhiZVx4ZmFceGNlXHhkYlx4YWQiCisJCQkgICJceGRlXHhjYVx4ZjhceDg4IiwKKwkJLmlucHV0CT0gIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1IgorCQkJICAiXHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisJCQkgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYSIKKwkJCSAgIlx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorCQkJICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTMiCisJCQkgICJceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKwkJCSAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3IgorCQkJICAiXHhiYVx4NjNceDdiXHgzOSIsCiAJCS5pbGVuCT0gNjAsCi0JCS5hc3NvYwk9IHsgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKLQkJCSAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAotCQkJICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIgfSwKKwkJLmFzc29jCT0gIlx4ZmVceGVkXHhmYVx4Y2VceGRlXHhhZFx4YmVceGVmIgorCQkJICAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWYiCisJCQkgICJceGFiXHhhZFx4ZGFceGQyIiwKIAkJLmFsZW4JPSAyMCwKLQkJLnJlc3VsdCA9IHsgMHgzOSwgMHg4MCwgMHhjYSwgMHgwYiwgMHgzYywgMHgwMCwgMHhlOCwgMHg0MSwKLQkJCSAgICAweGViLCAweDA2LCAweGZhLCAweGM0LCAweDg3LCAweDJhLCAweDI3LCAweDU3LAotCQkJICAgIDB4ODUsIDB4OWUsIDB4MWMsIDB4ZWEsIDB4YTYsIDB4ZWYsIDB4ZDksIDB4ODQsCi0JCQkgICAgMHg2MiwgMHg4NSwgMHg5MywgMHhiNCwgMHgwYywgMHhhMSwgMHhlMSwgMHg5YywKLQkJCSAgICAweDdkLCAweDc3LCAweDNkLCAweDAwLCAweGMxLCAweDQ0LCAweGM1LCAweDI1LAotCQkJICAgIDB4YWMsIDB4NjEsIDB4OWQsIDB4MTgsIDB4YzgsIDB4NGEsIDB4M2YsIDB4NDcsCi0JCQkgICAgMHgxOCwgMHhlMiwgMHg0NCwgMHg4YiwgMHgyZiwgMHhlMywgMHgyNCwgMHhkOSwKLQkJCSAgICAweGNjLCAweGRhLCAweDI3LCAweDEwLAotCQkJICAgIDB4MjUsIDB4MTksIDB4NDksIDB4OGUsIDB4ODAsIDB4ZjEsIDB4NDcsIDB4OGYsCi0JCQkgICAgMHgzNywgMHhiYSwgMHg1NSwgMHhiZCwgMHg2ZCwgMHgyNywgMHg2MSwgMHg4YyB9LAorCQkucmVzdWx0ID0gIlx4MzlceDgwXHhjYVx4MGJceDNjXHgwMFx4ZThceDQxIgorCQkJICAiXHhlYlx4MDZceGZhXHhjNFx4ODdceDJhXHgyN1x4NTciCisJCQkgICJceDg1XHg5ZVx4MWNceGVhXHhhNlx4ZWZceGQ5XHg4NCIKKwkJCSAgIlx4NjJceDg1XHg5M1x4YjRceDBjXHhhMVx4ZTFceDljIgorCQkJICAiXHg3ZFx4NzdceDNkXHgwMFx4YzFceDQ0XHhjNVx4MjUiCisJCQkgICJceGFjXHg2MVx4OWRceDE4XHhjOFx4NGFceDNmXHg0NyIKKwkJCSAgIlx4MThceGUyXHg0NFx4OGJceDJmXHhlM1x4MjRceGQ5IgorCQkJICAiXHhjY1x4ZGFceDI3XHgxMCIKKwkJCSAgIlx4MjVceDE5XHg0OVx4OGVceDgwXHhmMVx4NDdceDhmIgorCQkJICAiXHgzN1x4YmFceDU1XHhiZFx4NmRceDI3XHg2MVx4OGMiLAogCQkucmxlbgk9IDc2LAogCQkubnAJPSAyLAogCQkudGFwCT0geyAzMiwgMjggfSwKIAkJLmFucAk9IDIsCiAJCS5hdGFwCT0geyA4LCAxMiB9CiAJfSwgeworCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHg1MywgMHgwZiwgMHg4YSwgMHhmYiwgMHhjNywgMHg0NSwgMHgzNiwgMHhiOSwKLQkJCSAgICAweGE5LCAweDYzLCAweGI0LCAweGYxLCAweGM0LCAweGNiLCAweDczLCAweDhiIH0sCisJCS5yZXN1bHQJPSAiXHg1M1x4MGZceDhhXHhmYlx4YzdceDQ1XHgzNlx4YjkiCisJCQkgICJceGE5XHg2M1x4YjRceGYxXHhjNFx4Y2JceDczXHg4YiIsCiAJCS5ybGVuCT0gMTYsCiAJfQogfTsKIAogc3RhdGljIHN0cnVjdCBhZWFkX3Rlc3R2ZWMgYWVzX2djbV9kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gTWNHcmV3ICYgVmllZ2EgLSBodHRwOi8vY2l0ZXNlZXIuaXN0LnBzdS5lZHUvNjU2OTg5Lmh0bWwgKi8KKwkJLmtleSAgICA9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMzIsCi0JCS5pbnB1dAk9IHsgMHhjZSwgMHhhNywgMHg0MCwgMHgzZCwgMHg0ZCwgMHg2MCwgMHg2YiwgMHg2ZSwKLQkJCSAgICAweDA3LCAweDRlLCAweGM1LCAweGQzLCAweGJhLCAweGYzLCAweDlkLCAweDE4LAotCQkJICAgIDB4ZDAsIDB4ZDEsIDB4YzgsIDB4YTcsIDB4OTksIDB4OTksIDB4NmIsIDB4ZjAsCi0JCQkgICAgMHgyNiwgMHg1YiwgMHg5OCwgMHhiNSwgMHhkNCwgMHg4YSwgMHhiOSwgMHgxOSB9LAorCQkuaW5wdXQJPSAiXHhjZVx4YTdceDQwXHgzZFx4NGRceDYwXHg2Ylx4NmUiCisJCQkgICJceDA3XHg0ZVx4YzVceGQzXHhiYVx4ZjNceDlkXHgxOCIKKwkJCSAgIlx4ZDBceGQxXHhjOFx4YTdceDk5XHg5OVx4NmJceGYwIgorCQkJICAiXHgyNlx4NWJceDk4XHhiNVx4ZDRceDhhXHhiOVx4MTkiLAogCQkuaWxlbgk9IDMyLAorCQkucmVzdWx0ICA9IHplcm9lZF9zdHJpbmcsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweGZlLCAweGZmLCAweGU5LCAweDkyLCAweDg2LCAweDY1LCAweDczLCAweDFjLAotCQkJICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDgsCi0JCQkgICAgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKLQkJCSAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4IH0sCisJCS5rZXkJPSAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiCisJCQkgICJceDZkXHg2YVx4OGZceDk0XHg2N1x4MzBceDgzXHgwOCIKKwkJCSAgIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjIgorCQkJICAiXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiLAogCQkua2xlbgk9IDMyLAotCQkuaXYJPSB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCi0JCQkgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCB9LAotCQkuaW5wdXQJPSB7IDB4NTIsIDB4MmQsIDB4YzEsIDB4ZjAsIDB4OTksIDB4NTYsIDB4N2QsIDB4MDcsCi0JCQkgICAgMHhmNCwgMHg3ZiwgMHgzNywgMHhhMywgMHgyYSwgMHg4NCwgMHg0MiwgMHg3ZCwKLQkJCSAgICAweDY0LCAweDNhLCAweDhjLCAweGRjLCAweGJmLCAweGU1LCAweGMwLCAweGM5LAotCQkJICAgIDB4NzUsIDB4OTgsIDB4YTIsIDB4YmQsIDB4MjUsIDB4NTUsIDB4ZDEsIDB4YWEsCi0JCQkgICAgMHg4YywgMHhiMCwgMHg4ZSwgMHg0OCwgMHg1OSwgMHgwZCwgMHhiYiwgMHgzZCwKLQkJCSAgICAweGE3LCAweGIwLCAweDhiLCAweDEwLCAweDU2LCAweDgyLCAweDg4LCAweDM4LAotCQkJICAgIDB4YzUsIDB4ZjYsIDB4MWUsIDB4NjMsIDB4OTMsIDB4YmEsIDB4N2EsIDB4MGEsCi0JCQkgICAgMHhiYywgMHhjOSwgMHhmNiwgMHg2MiwgMHg4OSwgMHg4MCwgMHgxNSwgMHhhZCwKLQkJCSAgICAweGIwLCAweDk0LCAweGRhLCAweGM1LCAweGQ5LCAweDM0LCAweDcxLCAweGJkLAotCQkJICAgIDB4ZWMsIDB4MWEsIDB4NTAsIDB4MjIsIDB4NzAsIDB4ZTMsIDB4Y2MsIDB4NmMgfSwKKwkJLml2CT0gIlx4Y2FceGZlXHhiYVx4YmVceGZhXHhjZVx4ZGJceGFkIgorCQkJICAiXHhkZVx4Y2FceGY4XHg4OCIsCisJCS5pbnB1dAk9ICJceDUyXHgyZFx4YzFceGYwXHg5OVx4NTZceDdkXHgwNyIKKwkJCSAgIlx4ZjRceDdmXHgzN1x4YTNceDJhXHg4NFx4NDJceDdkIgorCQkJICAiXHg2NFx4M2FceDhjXHhkY1x4YmZceGU1XHhjMFx4YzkiCisJCQkgICJceDc1XHg5OFx4YTJceGJkXHgyNVx4NTVceGQxXHhhYSIKKwkJCSAgIlx4OGNceGIwXHg4ZVx4NDhceDU5XHgwZFx4YmJceDNkIgorCQkJICAiXHhhN1x4YjBceDhiXHgxMFx4NTZceDgyXHg4OFx4MzgiCisJCQkgICJceGM1XHhmNlx4MWVceDYzXHg5M1x4YmFceDdhXHgwYSIKKwkJCSAgIlx4YmNceGM5XHhmNlx4NjJceDg5XHg4MFx4MTVceGFkIgorCQkJICAiXHhiMFx4OTRceGRhXHhjNVx4ZDlceDM0XHg3MVx4YmQiCisJCQkgICJceGVjXHgxYVx4NTBceDIyXHg3MFx4ZTNceGNjXHg2YyIsCiAJCS5pbGVuCT0gODAsCi0JCS5yZXN1bHQgPSB7IDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCi0JCQkgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKLQkJCSAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLAotCQkJICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCi0JCQkgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKLQkJCSAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LAotCQkJICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCi0JCQkgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOSwgMHgxYSwgMHhhZiwgMHhkMiwgMHg1NSB9LAorCQkucmVzdWx0ID0gIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1IgorCQkJICAiXHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisJCQkgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYSIKKwkJCSAgIlx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorCQkJICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTMiCisJCQkgICJceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKwkJCSAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3IgorCQkJICAiXHhiYVx4NjNceDdiXHgzOVx4MWFceGFmXHhkMlx4NTUiLAogCQkucmxlbgk9IDY0LAogCX0sIHsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKLQkJCSAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LAotCQkJICAgIDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMsCi0JCQkgICAgMHg2ZCwgMHg2YSwgMHg4ZiwgMHg5NCwgMHg2NywgMHgzMCwgMHg4MywgMHgwOCB9LAorCQkua2V5CT0gIlx4ZmVceGZmXHhlOVx4OTJceDg2XHg2NVx4NzNceDFjIgorCQkJICAiXHg2ZFx4NmFceDhmXHg5NFx4NjdceDMwXHg4M1x4MDgiCisJCQkgICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IiwKIAkJLmtsZW4JPSAzMiwKLQkJLml2CT0geyAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZhLCAweGNlLCAweGRiLCAweGFkLAotCQkJICAgIDB4ZGUsIDB4Y2EsIDB4ZjgsIDB4ODggfSwKLQkJLmlucHV0CT0geyAweDUyLCAweDJkLCAweGMxLCAweGYwLCAweDk5LCAweDU2LCAweDdkLCAweDA3LAotCQkJICAgIDB4ZjQsIDB4N2YsIDB4MzcsIDB4YTMsIDB4MmEsIDB4ODQsIDB4NDIsIDB4N2QsCi0JCQkgICAgMHg2NCwgMHgzYSwgMHg4YywgMHhkYywgMHhiZiwgMHhlNSwgMHhjMCwgMHhjOSwKLQkJCSAgICAweDc1LCAweDk4LCAweGEyLCAweGJkLCAweDI1LCAweDU1LCAweGQxLCAweGFhLAotCQkJICAgIDB4OGMsIDB4YjAsIDB4OGUsIDB4NDgsIDB4NTksIDB4MGQsIDB4YmIsIDB4M2QsCi0JCQkgICAgMHhhNywgMHhiMCwgMHg4YiwgMHgxMCwgMHg1NiwgMHg4MiwgMHg4OCwgMHgzOCwKLQkJCSAgICAweGM1LCAweGY2LCAweDFlLCAweDYzLCAweDkzLCAweGJhLCAweDdhLCAweDBhLAotCQkJICAgIDB4YmMsIDB4YzksIDB4ZjYsIDB4NjIsCi0JCQkgICAgMHg3NiwgMHhmYywgMHg2ZSwgMHhjZSwgMHgwZiwgMHg0ZSwgMHgxNywgMHg2OCwKLQkJCSAgICAweGNkLCAweGRmLCAweDg4LCAweDUzLCAweGJiLCAweDJkLCAweDU1LCAweDFiIH0sCisJCS5pdgk9ICJceGNhXHhmZVx4YmFceGJlXHhmYVx4Y2VceGRiXHhhZCIKKwkJCSAgIlx4ZGVceGNhXHhmOFx4ODgiLAorCQkuaW5wdXQJPSAiXHg1Mlx4MmRceGMxXHhmMFx4OTlceDU2XHg3ZFx4MDciCisJCQkgICJceGY0XHg3Zlx4MzdceGEzXHgyYVx4ODRceDQyXHg3ZCIKKwkJCSAgIlx4NjRceDNhXHg4Y1x4ZGNceGJmXHhlNVx4YzBceGM5IgorCQkJICAiXHg3NVx4OThceGEyXHhiZFx4MjVceDU1XHhkMVx4YWEiCisJCQkgICJceDhjXHhiMFx4OGVceDQ4XHg1OVx4MGRceGJiXHgzZCIKKwkJCSAgIlx4YTdceGIwXHg4Ylx4MTBceDU2XHg4Mlx4ODhceDM4IgorCQkJICAiXHhjNVx4ZjZceDFlXHg2M1x4OTNceGJhXHg3YVx4MGEiCisJCQkgICJceGJjXHhjOVx4ZjZceDYyIgorCQkJICAiXHg3Nlx4ZmNceDZlXHhjZVx4MGZceDRlXHgxN1x4NjgiCisJCQkgICJceGNkXHhkZlx4ODhceDUzXHhiYlx4MmRceDU1XHgxYiIsCiAJCS5pbGVuCT0gNzYsCi0JCS5hc3NvYwk9IHsgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKLQkJCSAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAotCQkJICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIgfSwKKwkJLmFzc29jCT0gIlx4ZmVceGVkXHhmYVx4Y2VceGRlXHhhZFx4YmVceGVmIgorCQkJICAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWYiCisJCQkgICJceGFiXHhhZFx4ZGFceGQyIiwKIAkJLmFsZW4JPSAyMCwKLQkJLnJlc3VsdCA9IHsgMHhkOSwgMHgzMSwgMHgzMiwgMHgyNSwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwKLQkJCSAgICAweGE1LCAweDU5LCAweDA5LCAweGM1LCAweGFmLCAweGY1LCAweDI2LCAweDlhLAotCQkJICAgIDB4ODYsIDB4YTcsIDB4YTksIDB4NTMsIDB4MTUsIDB4MzQsIDB4ZjcsIDB4ZGEsCi0JCQkgICAgMHgyZSwgMHg0YywgMHgzMCwgMHgzZCwgMHg4YSwgMHgzMSwgMHg4YSwgMHg3MiwKLQkJCSAgICAweDFjLCAweDNjLCAweDBjLCAweDk1LCAweDk1LCAweDY4LCAweDA5LCAweDUzLAotCQkJICAgIDB4MmYsIDB4Y2YsIDB4MGUsIDB4MjQsIDB4NDksIDB4YTYsIDB4YjUsIDB4MjUsCi0JCQkgICAgMHhiMSwgMHg2YSwgMHhlZCwgMHhmNSwgMHhhYSwgMHgwZCwgMHhlNiwgMHg1NywKLQkJCSAgICAweGJhLCAweDYzLCAweDdiLCAweDM5IH0sCisJCS5yZXN1bHQgPSAiXHhkOVx4MzFceDMyXHgyNVx4ZjhceDg0XHgwNlx4ZTUiCisJCQkgICJceGE1XHg1OVx4MDlceGM1XHhhZlx4ZjVceDI2XHg5YSIKKwkJCSAgIlx4ODZceGE3XHhhOVx4NTNceDE1XHgzNFx4ZjdceGRhIgorCQkJICAiXHgyZVx4NGNceDMwXHgzZFx4OGFceDMxXHg4YVx4NzIiCisJCQkgICJceDFjXHgzY1x4MGNceDk1XHg5NVx4NjhceDA5XHg1MyIKKwkJCSAgIlx4MmZceGNmXHgwZVx4MjRceDQ5XHhhNlx4YjVceDI1IgorCQkJICAiXHhiMVx4NmFceGVkXHhmNVx4YWFceDBkXHhlNlx4NTciCisJCQkgICJceGJhXHg2M1x4N2JceDM5IiwKIAkJLnJsZW4JPSA2MCwKIAkJLm5wICAgICA9IDIsCiAJCS50YXAgICAgPSB7IDQ4LCAyOCB9LAogCQkuYW5wCT0gMywKIAkJLmF0YXAJPSB7IDgsIDgsIDQgfQogCX0sIHsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKLQkJCSAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4IH0sCisJCS5rZXkJPSAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiCisJCQkgICJceDZkXHg2YVx4OGZceDk0XHg2N1x4MzBceDgzXHgwOCIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhmYSwgMHhjZSwgMHhkYiwgMHhhZCwKLQkJCSAgICAweGRlLCAweGNhLCAweGY4LCAweDg4IH0sCi0JCS5pbnB1dAk9IHsgMHg0MiwgMHg4MywgMHgxZSwgMHhjMiwgMHgyMSwgMHg3NywgMHg3NCwgMHgyNCwKLQkJCSAgICAweDRiLCAweDcyLCAweDIxLCAweGI3LCAweDg0LCAweGQwLCAweGQ0LCAweDljLAotCQkJICAgIDB4ZTMsIDB4YWEsIDB4MjEsIDB4MmYsIDB4MmMsIDB4MDIsIDB4YTQsIDB4ZTAsCi0JCQkgICAgMHgzNSwgMHhjMSwgMHg3ZSwgMHgyMywgMHgyOSwgMHhhYywgMHhhMSwgMHgyZSwKLQkJCSAgICAweDIxLCAweGQ1LCAweDE0LCAweGIyLCAweDU0LCAweDY2LCAweDkzLCAweDFjLAotCQkJICAgIDB4N2QsIDB4OGYsIDB4NmEsIDB4NWEsIDB4YWMsIDB4ODQsIDB4YWEsIDB4MDUsCi0JCQkgICAgMHgxYiwgMHhhMywgMHgwYiwgMHgzOSwgMHg2YSwgMHgwYSwgMHhhYywgMHg5NywKLQkJCSAgICAweDNkLCAweDU4LCAweGUwLCAweDkxLCAweDQ3LCAweDNmLCAweDU5LCAweDg1LAotCQkJICAgIDB4NGQsIDB4NWMsIDB4MmEsIDB4ZjMsIDB4MjcsIDB4Y2QsIDB4NjQsIDB4YTYsCi0JCQkgICAgMHgyYywgMHhmMywgMHg1YSwgMHhiZCwgMHgyYiwgMHhhNiwgMHhmYSwgMHhiNCB9LAorCQkuaXYJPSAiXHhjYVx4ZmVceGJhXHhiZVx4ZmFceGNlXHhkYlx4YWQiCisJCQkgICJceGRlXHhjYVx4ZjhceDg4IiwKKwkJLmlucHV0CT0gIlx4NDJceDgzXHgxZVx4YzJceDIxXHg3N1x4NzRceDI0IgorCQkJICAiXHg0Ylx4NzJceDIxXHhiN1x4ODRceGQwXHhkNFx4OWMiCisJCQkgICJceGUzXHhhYVx4MjFceDJmXHgyY1x4MDJceGE0XHhlMCIKKwkJCSAgIlx4MzVceGMxXHg3ZVx4MjNceDI5XHhhY1x4YTFceDJlIgorCQkJICAiXHgyMVx4ZDVceDE0XHhiMlx4NTRceDY2XHg5M1x4MWMiCisJCQkgICJceDdkXHg4Zlx4NmFceDVhXHhhY1x4ODRceGFhXHgwNSIKKwkJCSAgIlx4MWJceGEzXHgwYlx4MzlceDZhXHgwYVx4YWNceDk3IgorCQkJICAiXHgzZFx4NThceGUwXHg5MVx4NDdceDNmXHg1OVx4ODUiCisJCQkgICJceDRkXHg1Y1x4MmFceGYzXHgyN1x4Y2RceDY0XHhhNiIKKwkJCSAgIlx4MmNceGYzXHg1YVx4YmRceDJiXHhhNlx4ZmFceGI0IiwKIAkJLmlsZW4JPSA4MCwKLQkJLnJlc3VsdCA9IHsgMHhkOSwgMHgzMSwgMHgzMiwgMHgyNSwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwKLQkJCSAgICAweGE1LCAweDU5LCAweDA5LCAweGM1LCAweGFmLCAweGY1LCAweDI2LCAweDlhLAotCQkJICAgIDB4ODYsIDB4YTcsIDB4YTksIDB4NTMsIDB4MTUsIDB4MzQsIDB4ZjcsIDB4ZGEsCi0JCQkgICAgMHgyZSwgMHg0YywgMHgzMCwgMHgzZCwgMHg4YSwgMHgzMSwgMHg4YSwgMHg3MiwKLQkJCSAgICAweDFjLCAweDNjLCAweDBjLCAweDk1LCAweDk1LCAweDY4LCAweDA5LCAweDUzLAotCQkJICAgIDB4MmYsIDB4Y2YsIDB4MGUsIDB4MjQsIDB4NDksIDB4YTYsIDB4YjUsIDB4MjUsCi0JCQkgICAgMHhiMSwgMHg2YSwgMHhlZCwgMHhmNSwgMHhhYSwgMHgwZCwgMHhlNiwgMHg1NywKLQkJCSAgICAweGJhLCAweDYzLCAweDdiLCAweDM5LCAweDFhLCAweGFmLCAweGQyLCAweDU1IH0sCisJCS5yZXN1bHQgPSAiXHhkOVx4MzFceDMyXHgyNVx4ZjhceDg0XHgwNlx4ZTUiCisJCQkgICJceGE1XHg1OVx4MDlceGM1XHhhZlx4ZjVceDI2XHg5YSIKKwkJCSAgIlx4ODZceGE3XHhhOVx4NTNceDE1XHgzNFx4ZjdceGRhIgorCQkJICAiXHgyZVx4NGNceDMwXHgzZFx4OGFceDMxXHg4YVx4NzIiCisJCQkgICJceDFjXHgzY1x4MGNceDk1XHg5NVx4NjhceDA5XHg1MyIKKwkJCSAgIlx4MmZceGNmXHgwZVx4MjRceDQ5XHhhNlx4YjVceDI1IgorCQkJICAiXHhiMVx4NmFceGVkXHhmNVx4YWFceDBkXHhlNlx4NTciCisJCQkgICJceGJhXHg2M1x4N2JceDM5XHgxYVx4YWZceGQyXHg1NSIsCiAJCS5ybGVuCT0gNjQsCiAJfSwgewotCQkua2V5CT0geyAweGZlLCAweGZmLCAweGU5LCAweDkyLCAweDg2LCAweDY1LCAweDczLCAweDFjLAotCQkJICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDggfSwKKwkJLmtleQk9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IiwKIAkJLmtsZW4JPSAxNiwKLQkJLml2CT0geyAweGNhLCAweGZlLCAweGJhLCAweGJlLCAweGZhLCAweGNlLCAweGRiLCAweGFkLAotCQkJICAgIDB4ZGUsIDB4Y2EsIDB4ZjgsIDB4ODggfSwKLQkJLmlucHV0CT0geyAweDQyLCAweDgzLCAweDFlLCAweGMyLCAweDIxLCAweDc3LCAweDc0LCAweDI0LAotCQkJICAgIDB4NGIsIDB4NzIsIDB4MjEsIDB4YjcsIDB4ODQsIDB4ZDAsIDB4ZDQsIDB4OWMsCi0JCQkgICAgMHhlMywgMHhhYSwgMHgyMSwgMHgyZiwgMHgyYywgMHgwMiwgMHhhNCwgMHhlMCwKLQkJCSAgICAweDM1LCAweGMxLCAweDdlLCAweDIzLCAweDI5LCAweGFjLCAweGExLCAweDJlLAotCQkJICAgIDB4MjEsIDB4ZDUsIDB4MTQsIDB4YjIsIDB4NTQsIDB4NjYsIDB4OTMsIDB4MWMsCi0JCQkgICAgMHg3ZCwgMHg4ZiwgMHg2YSwgMHg1YSwgMHhhYywgMHg4NCwgMHhhYSwgMHgwNSwKLQkJCSAgICAweDFiLCAweGEzLCAweDBiLCAweDM5LCAweDZhLCAweDBhLCAweGFjLCAweDk3LAotCQkJICAgIDB4M2QsIDB4NTgsIDB4ZTAsIDB4OTEsCi0JCQkgICAgMHg1YiwgMHhjOSwgMHg0ZiwgMHhiYywgMHgzMiwgMHgyMSwgMHhhNSwgMHhkYiwKLQkJCSAgICAweDk0LCAweGZhLCAweGU5LCAweDVhLCAweGU3LCAweDEyLCAweDFhLCAweDQ3IH0sCisJCS5pdgk9ICJceGNhXHhmZVx4YmFceGJlXHhmYVx4Y2VceGRiXHhhZCIKKwkJCSAgIlx4ZGVceGNhXHhmOFx4ODgiLAorCQkuaW5wdXQJPSAiXHg0Mlx4ODNceDFlXHhjMlx4MjFceDc3XHg3NFx4MjQiCisJCQkgICJceDRiXHg3Mlx4MjFceGI3XHg4NFx4ZDBceGQ0XHg5YyIKKwkJCSAgIlx4ZTNceGFhXHgyMVx4MmZceDJjXHgwMlx4YTRceGUwIgorCQkJICAiXHgzNVx4YzFceDdlXHgyM1x4MjlceGFjXHhhMVx4MmUiCisJCQkgICJceDIxXHhkNVx4MTRceGIyXHg1NFx4NjZceDkzXHgxYyIKKwkJCSAgIlx4N2RceDhmXHg2YVx4NWFceGFjXHg4NFx4YWFceDA1IgorCQkJICAiXHgxYlx4YTNceDBiXHgzOVx4NmFceDBhXHhhY1x4OTciCisJCQkgICJceDNkXHg1OFx4ZTBceDkxIgorCQkJICAiXHg1Ylx4YzlceDRmXHhiY1x4MzJceDIxXHhhNVx4ZGIiCisJCQkgICJceDk0XHhmYVx4ZTlceDVhXHhlN1x4MTJceDFhXHg0NyIsCiAJCS5pbGVuCT0gNzYsCi0JCS5hc3NvYwk9IHsgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKLQkJCSAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAotCQkJICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIgfSwKKwkJLmFzc29jCT0gIlx4ZmVceGVkXHhmYVx4Y2VceGRlXHhhZFx4YmVceGVmIgorCQkJICAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWYiCisJCQkgICJceGFiXHhhZFx4ZGFceGQyIiwKIAkJLmFsZW4JPSAyMCwKLQkJLnJlc3VsdCA9IHsgMHhkOSwgMHgzMSwgMHgzMiwgMHgyNSwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwKLQkJCSAgICAweGE1LCAweDU5LCAweDA5LCAweGM1LCAweGFmLCAweGY1LCAweDI2LCAweDlhLAotCQkJICAgIDB4ODYsIDB4YTcsIDB4YTksIDB4NTMsIDB4MTUsIDB4MzQsIDB4ZjcsIDB4ZGEsCi0JCQkgICAgMHgyZSwgMHg0YywgMHgzMCwgMHgzZCwgMHg4YSwgMHgzMSwgMHg4YSwgMHg3MiwKLQkJCSAgICAweDFjLCAweDNjLCAweDBjLCAweDk1LCAweDk1LCAweDY4LCAweDA5LCAweDUzLAotCQkJICAgIDB4MmYsIDB4Y2YsIDB4MGUsIDB4MjQsIDB4NDksIDB4YTYsIDB4YjUsIDB4MjUsCi0JCQkgICAgMHhiMSwgMHg2YSwgMHhlZCwgMHhmNSwgMHhhYSwgMHgwZCwgMHhlNiwgMHg1NywKLQkJCSAgICAweGJhLCAweDYzLCAweDdiLCAweDM5IH0sCisJCS5yZXN1bHQgPSAiXHhkOVx4MzFceDMyXHgyNVx4ZjhceDg0XHgwNlx4ZTUiCisJCQkgICJceGE1XHg1OVx4MDlceGM1XHhhZlx4ZjVceDI2XHg5YSIKKwkJCSAgIlx4ODZceGE3XHhhOVx4NTNceDE1XHgzNFx4ZjdceGRhIgorCQkJICAiXHgyZVx4NGNceDMwXHgzZFx4OGFceDMxXHg4YVx4NzIiCisJCQkgICJceDFjXHgzY1x4MGNceDk1XHg5NVx4NjhceDA5XHg1MyIKKwkJCSAgIlx4MmZceGNmXHgwZVx4MjRceDQ5XHhhNlx4YjVceDI1IgorCQkJICAiXHhiMVx4NmFceGVkXHhmNVx4YWFceDBkXHhlNlx4NTciCisJCQkgICJceGJhXHg2M1x4N2JceDM5IiwKIAkJLnJsZW4JPSA2MCwKIAl9LCB7CisJCS5rZXkgICAgPSB6ZXJvZWRfc3RyaW5nLAogCQkua2xlbgk9IDI0LAotCQkuaW5wdXQJPSB7IDB4OTgsIDB4ZTcsIDB4MjQsIDB4N2MsIDB4MDcsIDB4ZjAsIDB4ZmUsIDB4NDEsCi0JCQkgICAgMHgxYywgMHgyNiwgMHg3ZSwgMHg0MywgMHg4NCwgMHhiMCwgMHhmNiwgMHgwMCwKLQkJCSAgICAweDJmLCAweGY1LCAweDhkLCAweDgwLCAweDAzLCAweDM5LCAweDI3LCAweGFiLAotCQkJICAgIDB4OGUsIDB4ZjQsIDB4ZDQsIDB4NTgsIDB4NzUsIDB4MTQsIDB4ZjAsIDB4ZmIgfSwKKwkJLmlucHV0CT0gIlx4OThceGU3XHgyNFx4N2NceDA3XHhmMFx4ZmVceDQxIgorCQkJICAiXHgxY1x4MjZceDdlXHg0M1x4ODRceGIwXHhmNlx4MDAiCisJCQkgICJceDJmXHhmNVx4OGRceDgwXHgwM1x4MzlceDI3XHhhYiIKKwkJCSAgIlx4OGVceGY0XHhkNFx4NThceDc1XHgxNFx4ZjBceGZiIiwKIAkJLmlsZW4JPSAzMiwKKwkJLnJlc3VsdCAgPSB6ZXJvZWRfc3RyaW5nLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKLQkJCSAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LAotCQkJICAgIDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMgfSwKKwkJLmtleQk9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorCQkJICAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiLAogCQkua2xlbgk9IDI0LAotCQkuaXYJPSB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCi0JCQkgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCB9LAotCQkuaW5wdXQJPSB7IDB4MzksIDB4ODAsIDB4Y2EsIDB4MGIsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4NDEsCi0JCQkgICAgMHhlYiwgMHgwNiwgMHhmYSwgMHhjNCwgMHg4NywgMHgyYSwgMHgyNywgMHg1NywKLQkJCSAgICAweDg1LCAweDllLCAweDFjLCAweGVhLCAweGE2LCAweGVmLCAweGQ5LCAweDg0LAotCQkJICAgIDB4NjIsIDB4ODUsIDB4OTMsIDB4YjQsIDB4MGMsIDB4YTEsIDB4ZTEsIDB4OWMsCi0JCQkgICAgMHg3ZCwgMHg3NywgMHgzZCwgMHgwMCwgMHhjMSwgMHg0NCwgMHhjNSwgMHgyNSwKLQkJCSAgICAweGFjLCAweDYxLCAweDlkLCAweDE4LCAweGM4LCAweDRhLCAweDNmLCAweDQ3LAotCQkJICAgIDB4MTgsIDB4ZTIsIDB4NDQsIDB4OGIsIDB4MmYsIDB4ZTMsIDB4MjQsIDB4ZDksCi0JCQkgICAgMHhjYywgMHhkYSwgMHgyNywgMHgxMCwgMHhhYywgMHhhZCwgMHhlMiwgMHg1NiwKLQkJCSAgICAweDk5LCAweDI0LCAweGE3LCAweGM4LCAweDU4LCAweDczLCAweDM2LCAweGJmLAotCQkJICAgIDB4YjEsIDB4MTgsIDB4MDIsIDB4NGQsIDB4YjgsIDB4NjcsIDB4NGEsIDB4MTQgfSwKKwkJLml2CT0gIlx4Y2FceGZlXHhiYVx4YmVceGZhXHhjZVx4ZGJceGFkIgorCQkJICAiXHhkZVx4Y2FceGY4XHg4OCIsCisJCS5pbnB1dAk9ICJceDM5XHg4MFx4Y2FceDBiXHgzY1x4MDBceGU4XHg0MSIKKwkJCSAgIlx4ZWJceDA2XHhmYVx4YzRceDg3XHgyYVx4MjdceDU3IgorCQkJICAiXHg4NVx4OWVceDFjXHhlYVx4YTZceGVmXHhkOVx4ODQiCisJCQkgICJceDYyXHg4NVx4OTNceGI0XHgwY1x4YTFceGUxXHg5YyIKKwkJCSAgIlx4N2RceDc3XHgzZFx4MDBceGMxXHg0NFx4YzVceDI1IgorCQkJICAiXHhhY1x4NjFceDlkXHgxOFx4YzhceDRhXHgzZlx4NDciCisJCQkgICJceDE4XHhlMlx4NDRceDhiXHgyZlx4ZTNceDI0XHhkOSIKKwkJCSAgIlx4Y2NceGRhXHgyN1x4MTBceGFjXHhhZFx4ZTJceDU2IgorCQkJICAiXHg5OVx4MjRceGE3XHhjOFx4NThceDczXHgzNlx4YmYiCisJCQkgICJceGIxXHgxOFx4MDJceDRkXHhiOFx4NjdceDRhXHgxNCIsCiAJCS5pbGVuCT0gODAsCi0JCS5yZXN1bHQgPSB7IDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCi0JCQkgICAgMHhhNSwgMHg1OSwgMHgwOSwgMHhjNSwgMHhhZiwgMHhmNSwgMHgyNiwgMHg5YSwKLQkJCSAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLAotCQkJICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCi0JCQkgICAgMHgxYywgMHgzYywgMHgwYywgMHg5NSwgMHg5NSwgMHg2OCwgMHgwOSwgMHg1MywKLQkJCSAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LAotCQkJICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCi0JCQkgICAgMHhiYSwgMHg2MywgMHg3YiwgMHgzOSwgMHgxYSwgMHhhZiwgMHhkMiwgMHg1NSB9LAorCQkucmVzdWx0ID0gIlx4ZDlceDMxXHgzMlx4MjVceGY4XHg4NFx4MDZceGU1IgorCQkJICAiXHhhNVx4NTlceDA5XHhjNVx4YWZceGY1XHgyNlx4OWEiCisJCQkgICJceDg2XHhhN1x4YTlceDUzXHgxNVx4MzRceGY3XHhkYSIKKwkJCSAgIlx4MmVceDRjXHgzMFx4M2RceDhhXHgzMVx4OGFceDcyIgorCQkJICAiXHgxY1x4M2NceDBjXHg5NVx4OTVceDY4XHgwOVx4NTMiCisJCQkgICJceDJmXHhjZlx4MGVceDI0XHg0OVx4YTZceGI1XHgyNSIKKwkJCSAgIlx4YjFceDZhXHhlZFx4ZjVceGFhXHgwZFx4ZTZceDU3IgorCQkJICAiXHhiYVx4NjNceDdiXHgzOVx4MWFceGFmXHhkMlx4NTUiLAogCQkucmxlbgk9IDY0LAogCX0sIHsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywKLQkJCSAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LAotCQkJICAgIDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMgfSwKKwkJLmtleQk9ICJceGZlXHhmZlx4ZTlceDkyXHg4Nlx4NjVceDczXHgxYyIKKwkJCSAgIlx4NmRceDZhXHg4Zlx4OTRceDY3XHgzMFx4ODNceDA4IgorCQkJICAiXHhmZVx4ZmZceGU5XHg5Mlx4ODZceDY1XHg3M1x4MWMiLAogCQkua2xlbgk9IDI0LAotCQkuaXYJPSB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsCi0JCQkgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCB9LAotCQkuaW5wdXQJPSB7IDB4MzksIDB4ODAsIDB4Y2EsIDB4MGIsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4NDEsCi0JCQkgICAgMHhlYiwgMHgwNiwgMHhmYSwgMHhjNCwgMHg4NywgMHgyYSwgMHgyNywgMHg1NywKLQkJCSAgICAweDg1LCAweDllLCAweDFjLCAweGVhLCAweGE2LCAweGVmLCAweGQ5LCAweDg0LAotCQkJICAgIDB4NjIsIDB4ODUsIDB4OTMsIDB4YjQsIDB4MGMsIDB4YTEsIDB4ZTEsIDB4OWMsCi0JCQkgICAgMHg3ZCwgMHg3NywgMHgzZCwgMHgwMCwgMHhjMSwgMHg0NCwgMHhjNSwgMHgyNSwKLQkJCSAgICAweGFjLCAweDYxLCAweDlkLCAweDE4LCAweGM4LCAweDRhLCAweDNmLCAweDQ3LAotCQkJICAgIDB4MTgsIDB4ZTIsIDB4NDQsIDB4OGIsIDB4MmYsIDB4ZTMsIDB4MjQsIDB4ZDksCi0JCQkgICAgMHhjYywgMHhkYSwgMHgyNywgMHgxMCwKLQkJCSAgICAweDI1LCAweDE5LCAweDQ5LCAweDhlLCAweDgwLCAweGYxLCAweDQ3LCAweDhmLAotCQkJICAgIDB4MzcsIDB4YmEsIDB4NTUsIDB4YmQsIDB4NmQsIDB4MjcsIDB4NjEsIDB4OGMgfSwKKwkJLml2CT0gIlx4Y2FceGZlXHhiYVx4YmVceGZhXHhjZVx4ZGJceGFkIgorCQkJICAiXHhkZVx4Y2FceGY4XHg4OCIsCisJCS5pbnB1dAk9ICJceDM5XHg4MFx4Y2FceDBiXHgzY1x4MDBceGU4XHg0MSIKKwkJCSAgIlx4ZWJceDA2XHhmYVx4YzRceDg3XHgyYVx4MjdceDU3IgorCQkJICAiXHg4NVx4OWVceDFjXHhlYVx4YTZceGVmXHhkOVx4ODQiCisJCQkgICJceDYyXHg4NVx4OTNceGI0XHgwY1x4YTFceGUxXHg5YyIKKwkJCSAgIlx4N2RceDc3XHgzZFx4MDBceGMxXHg0NFx4YzVceDI1IgorCQkJICAiXHhhY1x4NjFceDlkXHgxOFx4YzhceDRhXHgzZlx4NDciCisJCQkgICJceDE4XHhlMlx4NDRceDhiXHgyZlx4ZTNceDI0XHhkOSIKKwkJCSAgIlx4Y2NceGRhXHgyN1x4MTAiCisJCQkgICJceDI1XHgxOVx4NDlceDhlXHg4MFx4ZjFceDQ3XHg4ZiIKKwkJCSAgIlx4MzdceGJhXHg1NVx4YmRceDZkXHgyN1x4NjFceDhjIiwKIAkJLmlsZW4JPSA3NiwKLQkJLmFzc29jCT0geyAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAotCQkJICAgIDB4ZmUsIDB4ZWQsIDB4ZmEsIDB4Y2UsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsCi0JCQkgICAgMHhhYiwgMHhhZCwgMHhkYSwgMHhkMiB9LAorCQkuYXNzb2MJPSAiXHhmZVx4ZWRceGZhXHhjZVx4ZGVceGFkXHhiZVx4ZWYiCisJCQkgICJceGZlXHhlZFx4ZmFceGNlXHhkZVx4YWRceGJlXHhlZiIKKwkJCSAgIlx4YWJceGFkXHhkYVx4ZDIiLAogCQkuYWxlbgk9IDIwLAotCQkucmVzdWx0ID0geyAweGQ5LCAweDMxLCAweDMyLCAweDI1LCAweGY4LCAweDg0LCAweDA2LCAweGU1LAotCQkJICAgIDB4YTUsIDB4NTksIDB4MDksIDB4YzUsIDB4YWYsIDB4ZjUsIDB4MjYsIDB4OWEsCi0JCQkgICAgMHg4NiwgMHhhNywgMHhhOSwgMHg1MywgMHgxNSwgMHgzNCwgMHhmNywgMHhkYSwKLQkJCSAgICAweDJlLCAweDRjLCAweDMwLCAweDNkLCAweDhhLCAweDMxLCAweDhhLCAweDcyLAotCQkJICAgIDB4MWMsIDB4M2MsIDB4MGMsIDB4OTUsIDB4OTUsIDB4NjgsIDB4MDksIDB4NTMsCi0JCQkgICAgMHgyZiwgMHhjZiwgMHgwZSwgMHgyNCwgMHg0OSwgMHhhNiwgMHhiNSwgMHgyNSwKLQkJCSAgICAweGIxLCAweDZhLCAweGVkLCAweGY1LCAweGFhLCAweDBkLCAweGU2LCAweDU3LAotCQkJICAgIDB4YmEsIDB4NjMsIDB4N2IsIDB4MzkgfSwKKwkJLnJlc3VsdCA9ICJceGQ5XHgzMVx4MzJceDI1XHhmOFx4ODRceDA2XHhlNSIKKwkJCSAgIlx4YTVceDU5XHgwOVx4YzVceGFmXHhmNVx4MjZceDlhIgorCQkJICAiXHg4Nlx4YTdceGE5XHg1M1x4MTVceDM0XHhmN1x4ZGEiCisJCQkgICJceDJlXHg0Y1x4MzBceDNkXHg4YVx4MzFceDhhXHg3MiIKKwkJCSAgIlx4MWNceDNjXHgwY1x4OTVceDk1XHg2OFx4MDlceDUzIgorCQkJICAiXHgyZlx4Y2ZceDBlXHgyNFx4NDlceGE2XHhiNVx4MjUiCisJCQkgICJceGIxXHg2YVx4ZWRceGY1XHhhYVx4MGRceGU2XHg1NyIKKwkJCSAgIlx4YmFceDYzXHg3Ylx4MzkiLAogCQkucmxlbgk9IDYwLAogCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWVhZF90ZXN0dmVjIGFlc19jY21fZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBGcm9tIFJGQyAzNjEwICovCi0JCS5rZXkJPSB7IDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCi0JCQkgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiB9LAorCQkua2V5CT0gIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3IgorCQkJICAiXHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDAsCi0JCQkgICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHgwMCwgMHgwMCB9LAotCQkuYXNzb2MJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcgfSwKKwkJLml2CT0gIlx4MDFceDAwXHgwMFx4MDBceDAzXHgwMlx4MDFceDAwIgorCQkJICAiXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHgwMFx4MDAiLAorCQkuYXNzb2MJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLAogCQkuYWxlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUgfSwKKwkJLmlucHV0CT0gIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlIiwKIAkJLmlsZW4JPSAyMywKLQkJLnJlc3VsdAk9IHsgMHg1OCwgMHg4YywgMHg5NywgMHg5YSwgMHg2MSwgMHhjNiwgMHg2MywgMHhkMiwKLQkJCSAgICAweGYwLCAweDY2LCAweGQwLCAweGMyLCAweGMwLCAweGY5LCAweDg5LCAweDgwLAotCQkJICAgIDB4NmQsIDB4NWYsIDB4NmIsIDB4NjEsIDB4ZGEsIDB4YzMsIDB4ODQsIDB4MTcsCi0JCQkgICAgMHhlOCwgMHhkMSwgMHgyYywgMHhmZCwgMHhmOSwgMHgyNiwgMHhlMCB9LAorCQkucmVzdWx0CT0gIlx4NThceDhjXHg5N1x4OWFceDYxXHhjNlx4NjNceGQyIgorCQkJICAiXHhmMFx4NjZceGQwXHhjMlx4YzBceGY5XHg4OVx4ODAiCisJCQkgICJceDZkXHg1Zlx4NmJceDYxXHhkYVx4YzNceDg0XHgxNyIKKwkJCSAgIlx4ZThceGQxXHgyY1x4ZmRceGY5XHgyNlx4ZTAiLAogCQkucmxlbgk9IDMxLAogCX0sIHsKLQkJLmtleQk9IHsgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLQkJCSAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmIH0sCisJCS5rZXkJPSAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzciCisJCQkgICJceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNiwgMHgwNSwgMHgwNCwKLQkJCSAgICAweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweDAwLCAweDAwIH0sCi0JCS5hc3NvYwk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiIH0sCisJCS5pdgk9ICJceDAxXHgwMFx4MDBceDAwXHgwN1x4MDZceDA1XHgwNCIKKwkJCSAgIlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4MDBceDAwIiwKKwkJLmFzc29jCT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYiIsCiAJCS5hbGVuCT0gMTIsCi0JCS5pbnB1dAk9IHsgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLQkJCSAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDFiLAotCQkJICAgIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYgfSwKKwkJLmlucHV0CT0gIlx4MGNceDBkXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzIgorCQkJICAiXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWIiCisJCQkgICJceDFjXHgxZFx4MWVceDFmIiwKIAkJLmlsZW4JPSAyMCwKLQkJLnJlc3VsdAk9IHsgMHhkYywgMHhmMSwgMHhmYiwgMHg3YiwgMHg1ZCwgMHg5ZSwgMHgyMywgMHhmYiwKLQkJCSAgICAweDlkLCAweDRlLCAweDEzLCAweDEyLCAweDUzLCAweDY1LCAweDhhLCAweGQ4LAotCQkJICAgIDB4NmUsIDB4YmQsIDB4Y2EsIDB4M2UsIDB4NTEsIDB4ZTgsIDB4M2YsIDB4MDcsCi0JCQkgICAgMHg3ZCwgMHg5YywgMHgyZCwgMHg5MyB9LAorCQkucmVzdWx0CT0gIlx4ZGNceGYxXHhmYlx4N2JceDVkXHg5ZVx4MjNceGZiIgorCQkJICAiXHg5ZFx4NGVceDEzXHgxMlx4NTNceDY1XHg4YVx4ZDgiCisJCQkgICJceDZlXHhiZFx4Y2FceDNlXHg1MVx4ZThceDNmXHgwNyIKKwkJCSAgIlx4N2RceDljXHgyZFx4OTMiLAogCQkucmxlbgk9IDI4LAogCX0sIHsKLQkJLmtleQk9IHsgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLQkJCSAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmIH0sCisJCS5rZXkJPSAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzciCisJCQkgICJceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwYSwgMHgwOSwgMHgwOCwKLQkJCSAgICAweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweDAwLCAweDAwIH0sCi0JCS5hc3NvYwk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNyB9LAorCQkuaXYJPSAiXHgwMVx4MDBceDAwXHgwMFx4MGJceDBhXHgwOVx4MDgiCisJCQkgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceDAwXHgwMCIsCisJCS5hc3NvYwk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIsCiAJCS5hbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLQkJCSAgICAweDIwIH0sCisJCS5pbnB1dAk9ICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiCisJCQkgICJceDIwIiwKIAkJLmlsZW4JPSAyNSwKLQkJLnJlc3VsdAk9IHsgMHg4MiwgMHg1MywgMHgxYSwgMHg2MCwgMHhjYywgMHgyNCwgMHg5NCwgMHg1YSwKLQkJCSAgICAweDRiLCAweDgyLCAweDc5LCAweDE4LCAweDFhLCAweGI1LCAweGM4LCAweDRkLAotCQkJICAgIDB4ZjIsIDB4MWMsIDB4ZTcsIDB4ZjksIDB4YjcsIDB4M2YsIDB4NDIsIDB4ZTEsCi0JCQkgICAgMHg5NywgMHhlYSwgMHg5YywgMHgwNywgMHhlNSwgMHg2YiwgMHg1ZSwgMHhiMSwKLQkJCSAgICAweDdlLCAweDVmLCAweDRlIH0sCisJCS5yZXN1bHQJPSAiXHg4Mlx4NTNceDFhXHg2MFx4Y2NceDI0XHg5NFx4NWEiCisJCQkgICJceDRiXHg4Mlx4NzlceDE4XHgxYVx4YjVceGM4XHg0ZCIKKwkJCSAgIlx4ZjJceDFjXHhlN1x4ZjlceGI3XHgzZlx4NDJceGUxIgorCQkJICAiXHg5N1x4ZWFceDljXHgwN1x4ZTVceDZiXHg1ZVx4YjEiCisJCQkgICJceDdlXHg1Zlx4NGUiLAogCQkucmxlbgk9IDM1LAogCX0sIHsKLQkJLmtleQk9IHsgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLQkJCSAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmIH0sCisJCS5rZXkJPSAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzciCisJCQkgICJceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwYSwgMHgwOSwKLQkJCSAgICAweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweDAwLCAweDAwIH0sCi0JCS5hc3NvYwk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiIH0sCisJCS5pdgk9ICJceDAxXHgwMFx4MDBceDAwXHgwY1x4MGJceDBhXHgwOSIKKwkJCSAgIlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4MDBceDAwIiwKKwkJLmFzc29jCT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYiIsCiAJCS5hbGVuCT0gMTIsCi0JCS5pbnB1dAk9IHsgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLQkJCSAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDFiLAotCQkJICAgIDB4MWMsIDB4MWQsIDB4MWUgfSwKKwkJLmlucHV0CT0gIlx4MGNceDBkXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzIgorCQkJICAiXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWIiCisJCQkgICJceDFjXHgxZFx4MWUiLAogCQkuaWxlbgk9IDE5LAotCQkucmVzdWx0CT0geyAweDA3LCAweDM0LCAweDI1LCAweDk0LCAweDE1LCAweDc3LCAweDg1LCAweDE1LAotCQkJICAgIDB4MmIsIDB4MDcsIDB4NDAsIDB4OTgsIDB4MzMsIDB4MGEsIDB4YmIsIDB4MTQsCi0JCQkgICAgMHgxYiwgMHg5NCwgMHg3YiwgMHg1NiwgMHg2YSwgMHhhOSwgMHg0MCwgMHg2YiwKLQkJCSAgICAweDRkLCAweDk5LCAweDk5LCAweDg4LCAweGRkIH0sCisJCS5yZXN1bHQJPSAiXHgwN1x4MzRceDI1XHg5NFx4MTVceDc3XHg4NVx4MTUiCisJCQkgICJceDJiXHgwN1x4NDBceDk4XHgzM1x4MGFceGJiXHgxNCIKKwkJCSAgIlx4MWJceDk0XHg3Ylx4NTZceDZhXHhhOVx4NDBceDZiIgorCQkJICAiXHg0ZFx4OTlceDk5XHg4OFx4ZGQiLAogCQkucmxlbgk9IDI5LAogCX0sIHsKLQkJLmtleQk9IHsgMHhkNywgMHg4MiwgMHg4ZCwgMHgxMywgMHhiMiwgMHhiMCwgMHhiZCwgMHhjMywKLQkJCSAgICAweDI1LCAweGE3LCAweDYyLCAweDM2LCAweGRmLCAweDkzLCAweGNjLCAweDZiIH0sCisJCS5rZXkJPSAiXHhkN1x4ODJceDhkXHgxM1x4YjJceGIwXHhiZFx4YzMiCisJCQkgICJceDI1XHhhN1x4NjJceDM2XHhkZlx4OTNceGNjXHg2YiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHgwMSwgMHgwMCwgMHgzMywgMHg1NiwgMHg4ZSwgMHhmNywgMHhiMiwgMHg2MywKLQkJCSAgICAweDNjLCAweDk2LCAweDk2LCAweDc2LCAweDZjLCAweGZhLCAweDAwLCAweDAwIH0sCi0JCS5hc3NvYwk9IHsgMHg2MywgMHgwMSwgMHg4ZiwgMHg3NiwgMHhkYywgMHg4YSwgMHgxYiwgMHhjYiB9LAorCQkuaXYJPSAiXHgwMVx4MDBceDMzXHg1Nlx4OGVceGY3XHhiMlx4NjMiCisJCQkgICJceDNjXHg5Nlx4OTZceDc2XHg2Y1x4ZmFceDAwXHgwMCIsCisJCS5hc3NvYwk9ICJceDYzXHgwMVx4OGZceDc2XHhkY1x4OGFceDFiXHhjYiIsCiAJCS5hbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDkwLCAweDIwLCAweGVhLCAweDZmLCAweDkxLCAweGJkLCAweGQ4LCAweDVhLAotCQkJICAgIDB4ZmEsIDB4MDAsIDB4MzksIDB4YmEsIDB4NGIsIDB4YWYsIDB4ZjksIDB4YmYsCi0JCQkgICAgMHhiNywgMHg5YywgMHg3MCwgMHgyOCwgMHg5NCwgMHg5YywgMHhkMCwgMHhlYyB9LAorCQkuaW5wdXQJPSAiXHg5MFx4MjBceGVhXHg2Zlx4OTFceGJkXHhkOFx4NWEiCisJCQkgICJceGZhXHgwMFx4MzlceGJhXHg0Ylx4YWZceGY5XHhiZiIKKwkJCSAgIlx4YjdceDljXHg3MFx4MjhceDk0XHg5Y1x4ZDBceGVjIiwKIAkJLmlsZW4JPSAyNCwKLQkJLnJlc3VsdAk9IHsgMHg0YywgMHhjYiwgMHgxZSwgMHg3YywgMHhhOSwgMHg4MSwgMHhiZSwgMHhmYSwKLQkJCSAgICAweGEwLCAweDcyLCAweDZjLCAweDU1LCAweGQzLCAweDc4LCAweDA2LCAweDEyLAotCQkJICAgIDB4OTgsIDB4YzgsIDB4NWMsIDB4OTIsIDB4ODEsIDB4NGEsIDB4YmMsIDB4MzMsCi0JCQkgICAgMHhjNSwgMHgyZSwgMHhlOCwgMHgxZCwgMHg3ZCwgMHg3NywgMHhjMCwgMHg4YSB9LAorCQkucmVzdWx0CT0gIlx4NGNceGNiXHgxZVx4N2NceGE5XHg4MVx4YmVceGZhIgorCQkJICAiXHhhMFx4NzJceDZjXHg1NVx4ZDNceDc4XHgwNlx4MTIiCisJCQkgICJceDk4XHhjOFx4NWNceDkyXHg4MVx4NGFceGJjXHgzMyIKKwkJCSAgIlx4YzVceDJlXHhlOFx4MWRceDdkXHg3N1x4YzBceDhhIiwKIAkJLnJsZW4JPSAzMiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZDcsIDB4ODIsIDB4OGQsIDB4MTMsIDB4YjIsIDB4YjAsIDB4YmQsIDB4YzMsCi0JCQkgICAgMHgyNSwgMHhhNywgMHg2MiwgMHgzNiwgMHhkZiwgMHg5MywgMHhjYywgMHg2YiB9LAorCQkua2V5CT0gIlx4ZDdceDgyXHg4ZFx4MTNceGIyXHhiMFx4YmRceGMzIgorCQkJICAiXHgyNVx4YTdceDYyXHgzNlx4ZGZceDkzXHhjY1x4NmIiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4MDEsIDB4MDAsIDB4ZDUsIDB4NjAsIDB4OTEsIDB4MmQsIDB4M2YsIDB4NzAsCi0JCQkgICAgMHgzYywgMHg5NiwgMHg5NiwgMHg3NiwgMHg2YywgMHhmYSwgMHgwMCwgMHgwMCB9LAotCQkuYXNzb2MJPSB7IDB4Y2QsIDB4OTAsIDB4NDQsIDB4ZDIsIDB4YjcsIDB4MWYsIDB4ZGIsIDB4ODEsCi0JCQkgICAgMHgyMCwgMHhlYSwgMHg2MCwgMHhjMCB9LAorCQkuaXYJPSAiXHgwMVx4MDBceGQ1XHg2MFx4OTFceDJkXHgzZlx4NzAiCisJCQkgICJceDNjXHg5Nlx4OTZceDc2XHg2Y1x4ZmFceDAwXHgwMCIsCisJCS5hc3NvYwk9ICJceGNkXHg5MFx4NDRceGQyXHhiN1x4MWZceGRiXHg4MSIKKwkJCSAgIlx4MjBceGVhXHg2MFx4YzAiLAogCQkuYWxlbgk9IDEyLAotCQkuaW5wdXQJPSB7IDB4NjQsIDB4MzUsIDB4YWMsIDB4YmEsIDB4ZmIsIDB4MTEsIDB4YTgsIDB4MmUsCi0JCQkgICAgMHgyZiwgMHgwNywgMHgxZCwgMHg3YywgMHhhNCwgMHhhNSwgMHhlYiwgMHhkOSwKLQkJCSAgICAweDNhLCAweDgwLCAweDNiLCAweGE4LCAweDdmIH0sCisJCS5pbnB1dAk9ICJceDY0XHgzNVx4YWNceGJhXHhmYlx4MTFceGE4XHgyZSIKKwkJCSAgIlx4MmZceDA3XHgxZFx4N2NceGE0XHhhNVx4ZWJceGQ5IgorCQkJICAiXHgzYVx4ODBceDNiXHhhOFx4N2YiLAogCQkuaWxlbgk9IDIxLAotCQkucmVzdWx0CT0geyAweDAwLCAweDk3LCAweDY5LCAweGVjLCAweGFiLCAweGRmLCAweDQ4LCAweDYyLAotCQkJICAgIDB4NTUsIDB4OTQsIDB4YzUsIDB4OTIsIDB4NTEsIDB4ZTYsIDB4MDMsIDB4NTcsCi0JCQkgICAgMHgyMiwgMHg2NywgMHg1ZSwgMHgwNCwgMHhjOCwgMHg0NywgMHgwOSwgMHg5ZSwKLQkJCSAgICAweDVhLCAweGUwLCAweDcwLCAweDQ1LCAweDUxIH0sCisJCS5yZXN1bHQJPSAiXHgwMFx4OTdceDY5XHhlY1x4YWJceGRmXHg0OFx4NjIiCisJCQkgICJceDU1XHg5NFx4YzVceDkyXHg1MVx4ZTZceDAzXHg1NyIKKwkJCSAgIlx4MjJceDY3XHg1ZVx4MDRceGM4XHg0N1x4MDlceDllIgorCQkJICAiXHg1YVx4ZTBceDcwXHg0NVx4NTEiLAogCQkucmxlbgk9IDI5LAogCX0sIHsKLQkJLmtleQk9IHsgMHhkNywgMHg4MiwgMHg4ZCwgMHgxMywgMHhiMiwgMHhiMCwgMHhiZCwgMHhjMywKLQkJCSAgICAweDI1LCAweGE3LCAweDYyLCAweDM2LCAweGRmLCAweDkzLCAweGNjLCAweDZiIH0sCisJCS5rZXkJPSAiXHhkN1x4ODJceDhkXHgxM1x4YjJceGIwXHhiZFx4YzMiCisJCQkgICJceDI1XHhhN1x4NjJceDM2XHhkZlx4OTNceGNjXHg2YiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdgk9IHsgMHgwMSwgMHgwMCwgMHg0MiwgMHhmZiwgMHhmOCwgMHhmMSwgMHg5NSwgMHgxYywKLQkJCSAgICAweDNjLCAweDk2LCAweDk2LCAweDc2LCAweDZjLCAweGZhLCAweDAwLCAweDAwIH0sCi0JCS5hc3NvYwk9IHsgMHhkOCwgMHg1YiwgMHhjNywgMHhlNiwgMHg5ZiwgMHg5NCwgMHg0ZiwgMHhiOCB9LAorCQkuaXYJPSAiXHgwMVx4MDBceDQyXHhmZlx4ZjhceGYxXHg5NVx4MWMiCisJCQkgICJceDNjXHg5Nlx4OTZceDc2XHg2Y1x4ZmFceDAwXHgwMCIsCisJCS5hc3NvYwk9ICJceGQ4XHg1Ylx4YzdceGU2XHg5Zlx4OTRceDRmXHhiOCIsCiAJCS5hbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDhhLCAweDE5LCAweGI5LCAweDUwLCAweGJjLCAweGY3LCAweDFhLCAweDAxLAotCQkJICAgIDB4OGUsIDB4NWUsIDB4NjcsIDB4MDEsIDB4YzksIDB4MTcsIDB4ODcsIDB4NjUsCi0JCQkgICAgMHg5OCwgMHgwOSwgMHhkNiwgMHg3ZCwgMHhiZSwgMHhkZCwgMHgxOCB9LAorCQkuaW5wdXQJPSAiXHg4YVx4MTlceGI5XHg1MFx4YmNceGY3XHgxYVx4MDEiCisJCQkgICJceDhlXHg1ZVx4NjdceDAxXHhjOVx4MTdceDg3XHg2NSIKKwkJCSAgIlx4OThceDA5XHhkNlx4N2RceGJlXHhkZFx4MTgiLAogCQkuaWxlbgk9IDIzLAotCQkucmVzdWx0CT0geyAweGJjLCAweDIxLCAweDhkLCAweGFhLCAweDk0LCAweDc0LCAweDI3LCAweGI2LAotCQkJICAgIDB4ZGIsIDB4MzgsIDB4NmEsIDB4OTksIDB4YWMsIDB4MWEsIDB4ZWYsIDB4MjMsCi0JCQkgICAgMHhhZCwgMHhlMCwgMHhiNSwgMHgyOSwgMHgzOSwgMHhjYiwgMHg2YSwgMHg2MywKLQkJCSAgICAweDdjLCAweGY5LCAweGJlLCAweGMyLCAweDQwLCAweDg4LCAweDk3LCAweGM2LAotCQkJICAgIDB4YmEgfSwKKwkJLnJlc3VsdAk9ICJceGJjXHgyMVx4OGRceGFhXHg5NFx4NzRceDI3XHhiNiIKKwkJCSAgIlx4ZGJceDM4XHg2YVx4OTlceGFjXHgxYVx4ZWZceDIzIgorCQkJICAiXHhhZFx4ZTBceGI1XHgyOVx4MzlceGNiXHg2YVx4NjMiCisJCQkgICJceDdjXHhmOVx4YmVceGMyXHg0MFx4ODhceDk3XHhjNiIKKwkJCSAgIlx4YmEiLAogCQkucmxlbgk9IDMzLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGFlYWRfdGVzdHZlYyBhZXNfY2NtX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsgLyogRnJvbSBSRkMgMzYxMCAqLwotCQkua2V5CT0geyAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAotCQkJICAgIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YgfSwKKwkJLmtleQk9ICJceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjNyIKKwkJCSAgIlx4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLml2CT0geyAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAyLCAweDAxLCAweDAwLAotCQkJICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4MDAsIDB4MDAgfSwKLQkJLmFzc29jCT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3IH0sCisJCS5pdgk9ICJceDAxXHgwMFx4MDBceDAwXHgwM1x4MDJceDAxXHgwMCIKKwkJCSAgIlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4MDBceDAwIiwKKwkJLmFzc29jCT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IiwKIAkJLmFsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4NTgsIDB4OGMsIDB4OTcsIDB4OWEsIDB4NjEsIDB4YzYsIDB4NjMsIDB4ZDIsCi0JCQkgICAgMHhmMCwgMHg2NiwgMHhkMCwgMHhjMiwgMHhjMCwgMHhmOSwgMHg4OSwgMHg4MCwKLQkJCSAgICAweDZkLCAweDVmLCAweDZiLCAweDYxLCAweGRhLCAweGMzLCAweDg0LCAweDE3LAotCQkJICAgIDB4ZTgsIDB4ZDEsIDB4MmMsIDB4ZmQsIDB4ZjksIDB4MjYsIDB4ZTAgfSwKKwkJLmlucHV0CT0gIlx4NThceDhjXHg5N1x4OWFceDYxXHhjNlx4NjNceGQyIgorCQkJICAiXHhmMFx4NjZceGQwXHhjMlx4YzBceGY5XHg4OVx4ODAiCisJCQkgICJceDZkXHg1Zlx4NmJceDYxXHhkYVx4YzNceDg0XHgxNyIKKwkJCSAgIlx4ZThceGQxXHgyY1x4ZmRceGY5XHgyNlx4ZTAiLAogCQkuaWxlbgk9IDMxLAotCQkucmVzdWx0CT0geyAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSB9LAorCQkucmVzdWx0CT0gIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlIiwKIAkJLnJsZW4JPSAyMywKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCi0JCQkgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiB9LAorCQkua2V5CT0gIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3IgorCQkJICAiXHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsCi0JCQkgICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHgwMCwgMHgwMCB9LAotCQkuYXNzb2MJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiB9LAorCQkuaXYJPSAiXHgwMVx4MDBceDAwXHgwMFx4MDdceDA2XHgwNVx4MDQiCisJCQkgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceDAwXHgwMCIsCisJCS5hc3NvYwk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGIiLAogCQkuYWxlbgk9IDEyLAotCQkuaW5wdXQJPSB7IDB4ZGMsIDB4ZjEsIDB4ZmIsIDB4N2IsIDB4NWQsIDB4OWUsIDB4MjMsIDB4ZmIsCi0JCQkgICAgMHg5ZCwgMHg0ZSwgMHgxMywgMHgxMiwgMHg1MywgMHg2NSwgMHg4YSwgMHhkOCwKLQkJCSAgICAweDZlLCAweGJkLCAweGNhLCAweDNlLCAweDUxLCAweGU4LCAweDNmLCAweDA3LAotCQkJICAgIDB4N2QsIDB4OWMsIDB4MmQsIDB4OTMgfSwKKwkJLmlucHV0CT0gIlx4ZGNceGYxXHhmYlx4N2JceDVkXHg5ZVx4MjNceGZiIgorCQkJICAiXHg5ZFx4NGVceDEzXHgxMlx4NTNceDY1XHg4YVx4ZDgiCisJCQkgICJceDZlXHhiZFx4Y2FceDNlXHg1MVx4ZThceDNmXHgwNyIKKwkJCSAgIlx4N2RceDljXHgyZFx4OTMiLAogCQkuaWxlbgk9IDI4LAotCQkucmVzdWx0CT0geyAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLAotCQkJICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsCi0JCQkgICAgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAorCQkucmVzdWx0CT0gIlx4MGNceDBkXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzIgorCQkJICAiXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWIiCisJCQkgICJceDFjXHgxZFx4MWVceDFmIiwKIAkJLnJsZW4JPSAyMCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCi0JCQkgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiB9LAorCQkua2V5CT0gIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3IgorCQkJICAiXHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MGEsIDB4MDksIDB4MDgsCi0JCQkgICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHgwMCwgMHgwMCB9LAotCQkuYXNzb2MJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcgfSwKKwkJLml2CT0gIlx4MDFceDAwXHgwMFx4MDBceDBiXHgwYVx4MDlceDA4IgorCQkJICAiXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHgwMFx4MDAiLAorCQkuYXNzb2MJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLAogCQkuYWxlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHg4MiwgMHg1MywgMHgxYSwgMHg2MCwgMHhjYywgMHgyNCwgMHg5NCwgMHg1YSwKLQkJCSAgICAweDRiLCAweDgyLCAweDc5LCAweDE4LCAweDFhLCAweGI1LCAweGM4LCAweDRkLAotCQkJICAgIDB4ZjIsIDB4MWMsIDB4ZTcsIDB4ZjksIDB4YjcsIDB4M2YsIDB4NDIsIDB4ZTEsCi0JCQkgICAgMHg5NywgMHhlYSwgMHg5YywgMHgwNywgMHhlNSwgMHg2YiwgMHg1ZSwgMHhiMSwKLQkJCSAgICAweDdlLCAweDVmLCAweDRlIH0sCisJCS5pbnB1dAk9ICJceDgyXHg1M1x4MWFceDYwXHhjY1x4MjRceDk0XHg1YSIKKwkJCSAgIlx4NGJceDgyXHg3OVx4MThceDFhXHhiNVx4YzhceDRkIgorCQkJICAiXHhmMlx4MWNceGU3XHhmOVx4YjdceDNmXHg0Mlx4ZTEiCisJCQkgICJceDk3XHhlYVx4OWNceDA3XHhlNVx4NmJceDVlXHhiMSIKKwkJCSAgIlx4N2VceDVmXHg0ZSIsCiAJCS5pbGVuCT0gMzUsCi0JCS5yZXN1bHQJPSB7IDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkJCSAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAotCQkJICAgIDB4MjAgfSwKKwkJLnJlc3VsdAk9ICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIKKwkJCSAgIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJICAiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiCisJCQkgICJceDIwIiwKIAkJLnJsZW4JPSAyNSwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCi0JCQkgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiB9LAorCQkua2V5CT0gIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3IgorCQkJICAiXHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MGEsIDB4MDksCi0JCQkgICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHgwMCwgMHgwMCB9LAotCQkuYXNzb2MJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiB9LAorCQkuaXYJPSAiXHgwMVx4MDBceDAwXHgwMFx4MGNceDBiXHgwYVx4MDkiCisJCQkgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceDAwXHgwMCIsCisJCS5hc3NvYwk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGIiLAogCQkuYWxlbgk9IDEyLAotCQkuaW5wdXQJPSB7IDB4MDcsIDB4MzQsIDB4MjUsIDB4OTQsIDB4MTUsIDB4NzcsIDB4ODUsIDB4MTUsCi0JCQkgICAgMHgyYiwgMHgwNywgMHg0MCwgMHg5OCwgMHgzMywgMHgwYSwgMHhiYiwgMHgxNCwKLQkJCSAgICAweDFiLCAweDk0LCAweDdiLCAweDU2LCAweDZhLCAweGE5LCAweDQwLCAweDZiLAotCQkJICAgIDB4NGQsIDB4OTksIDB4OTksIDB4ODgsIDB4ZGQgfSwKKwkJLmlucHV0CT0gIlx4MDdceDM0XHgyNVx4OTRceDE1XHg3N1x4ODVceDE1IgorCQkJICAiXHgyYlx4MDdceDQwXHg5OFx4MzNceDBhXHhiYlx4MTQiCisJCQkgICJceDFiXHg5NFx4N2JceDU2XHg2YVx4YTlceDQwXHg2YiIKKwkJCSAgIlx4NGRceDk5XHg5OVx4ODhceGRkIiwKIAkJLmlsZW4JPSAyOSwKLQkJLnJlc3VsdAk9IHsgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKLQkJCSAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDFiLAotCQkJICAgIDB4MWMsIDB4MWQsIDB4MWUgfSwKKwkJLnJlc3VsdAk9ICJceDBjXHgwZFx4MGVceDBmXHgxMFx4MTFceDEyXHgxMyIKKwkJCSAgIlx4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiIgorCQkJICAiXHgxY1x4MWRceDFlIiwKIAkJLnJsZW4JPSAxOSwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZDcsIDB4ODIsIDB4OGQsIDB4MTMsIDB4YjIsIDB4YjAsIDB4YmQsIDB4YzMsCi0JCQkgICAgMHgyNSwgMHhhNywgMHg2MiwgMHgzNiwgMHhkZiwgMHg5MywgMHhjYywgMHg2YiB9LAorCQkua2V5CT0gIlx4ZDdceDgyXHg4ZFx4MTNceGIyXHhiMFx4YmRceGMzIgorCQkJICAiXHgyNVx4YTdceDYyXHgzNlx4ZGZceDkzXHhjY1x4NmIiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4MDEsIDB4MDAsIDB4MzMsIDB4NTYsIDB4OGUsIDB4ZjcsIDB4YjIsIDB4NjMsCi0JCQkgICAgMHgzYywgMHg5NiwgMHg5NiwgMHg3NiwgMHg2YywgMHhmYSwgMHgwMCwgMHgwMCB9LAotCQkuYXNzb2MJPSB7IDB4NjMsIDB4MDEsIDB4OGYsIDB4NzYsIDB4ZGMsIDB4OGEsIDB4MWIsIDB4Y2IgfSwKKwkJLml2CT0gIlx4MDFceDAwXHgzM1x4NTZceDhlXHhmN1x4YjJceDYzIgorCQkJICAiXHgzY1x4OTZceDk2XHg3Nlx4NmNceGZhXHgwMFx4MDAiLAorCQkuYXNzb2MJPSAiXHg2M1x4MDFceDhmXHg3Nlx4ZGNceDhhXHgxYlx4Y2IiLAogCQkuYWxlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHg0YywgMHhjYiwgMHgxZSwgMHg3YywgMHhhOSwgMHg4MSwgMHhiZSwgMHhmYSwKLQkJCSAgICAweGEwLCAweDcyLCAweDZjLCAweDU1LCAweGQzLCAweDc4LCAweDA2LCAweDEyLAotCQkJICAgIDB4OTgsIDB4YzgsIDB4NWMsIDB4OTIsIDB4ODEsIDB4NGEsIDB4YmMsIDB4MzMsCi0JCQkgICAgMHhjNSwgMHgyZSwgMHhlOCwgMHgxZCwgMHg3ZCwgMHg3NywgMHhjMCwgMHg4YSB9LAorCQkuaW5wdXQJPSAiXHg0Y1x4Y2JceDFlXHg3Y1x4YTlceDgxXHhiZVx4ZmEiCisJCQkgICJceGEwXHg3Mlx4NmNceDU1XHhkM1x4NzhceDA2XHgxMiIKKwkJCSAgIlx4OThceGM4XHg1Y1x4OTJceDgxXHg0YVx4YmNceDMzIgorCQkJICAiXHhjNVx4MmVceGU4XHgxZFx4N2RceDc3XHhjMFx4OGEiLAogCQkuaWxlbgk9IDMyLAotCQkucmVzdWx0CT0geyAweDkwLCAweDIwLCAweGVhLCAweDZmLCAweDkxLCAweGJkLCAweGQ4LCAweDVhLAotCQkJICAgIDB4ZmEsIDB4MDAsIDB4MzksIDB4YmEsIDB4NGIsIDB4YWYsIDB4ZjksIDB4YmYsCi0JCQkgICAgMHhiNywgMHg5YywgMHg3MCwgMHgyOCwgMHg5NCwgMHg5YywgMHhkMCwgMHhlYyB9LAorCQkucmVzdWx0CT0gIlx4OTBceDIwXHhlYVx4NmZceDkxXHhiZFx4ZDhceDVhIgorCQkJICAiXHhmYVx4MDBceDM5XHhiYVx4NGJceGFmXHhmOVx4YmYiCisJCQkgICJceGI3XHg5Y1x4NzBceDI4XHg5NFx4OWNceGQwXHhlYyIsCiAJCS5ybGVuCT0gMjQsCiAJfSwgewotCQkua2V5CT0geyAweGQ3LCAweDgyLCAweDhkLCAweDEzLCAweGIyLCAweGIwLCAweGJkLCAweGMzLAotCQkJICAgIDB4MjUsIDB4YTcsIDB4NjIsIDB4MzYsIDB4ZGYsIDB4OTMsIDB4Y2MsIDB4NmIgfSwKKwkJLmtleQk9ICJceGQ3XHg4Mlx4OGRceDEzXHhiMlx4YjBceGJkXHhjMyIKKwkJCSAgIlx4MjVceGE3XHg2Mlx4MzZceGRmXHg5M1x4Y2NceDZiIiwKIAkJLmtsZW4JPSAxNiwKLQkJLml2CT0geyAweDAxLCAweDAwLCAweGQ1LCAweDYwLCAweDkxLCAweDJkLCAweDNmLCAweDcwLAotCQkJICAgIDB4M2MsIDB4OTYsIDB4OTYsIDB4NzYsIDB4NmMsIDB4ZmEsIDB4MDAsIDB4MDAgfSwKLQkJLmFzc29jCT0geyAweGNkLCAweDkwLCAweDQ0LCAweGQyLCAweGI3LCAweDFmLCAweGRiLCAweDgxLAotCQkJICAgIDB4MjAsIDB4ZWEsIDB4NjAsIDB4YzAgfSwKKwkJLml2CT0gIlx4MDFceDAwXHhkNVx4NjBceDkxXHgyZFx4M2ZceDcwIgorCQkJICAiXHgzY1x4OTZceDk2XHg3Nlx4NmNceGZhXHgwMFx4MDAiLAorCQkuYXNzb2MJPSAiXHhjZFx4OTBceDQ0XHhkMlx4YjdceDFmXHhkYlx4ODEiCisJCQkgICJceDIwXHhlYVx4NjBceGMwIiwKIAkJLmFsZW4JPSAxMiwKLQkJLmlucHV0CT0geyAweDAwLCAweDk3LCAweDY5LCAweGVjLCAweGFiLCAweGRmLCAweDQ4LCAweDYyLAotCQkJICAgIDB4NTUsIDB4OTQsIDB4YzUsIDB4OTIsIDB4NTEsIDB4ZTYsIDB4MDMsIDB4NTcsCi0JCQkgICAgMHgyMiwgMHg2NywgMHg1ZSwgMHgwNCwgMHhjOCwgMHg0NywgMHgwOSwgMHg5ZSwKLQkJCSAgICAweDVhLCAweGUwLCAweDcwLCAweDQ1LCAweDUxIH0sCisJCS5pbnB1dAk9ICJceDAwXHg5N1x4NjlceGVjXHhhYlx4ZGZceDQ4XHg2MiIKKwkJCSAgIlx4NTVceDk0XHhjNVx4OTJceDUxXHhlNlx4MDNceDU3IgorCQkJICAiXHgyMlx4NjdceDVlXHgwNFx4YzhceDQ3XHgwOVx4OWUiCisJCQkgICJceDVhXHhlMFx4NzBceDQ1XHg1MSIsCiAJCS5pbGVuCT0gMjksCi0JCS5yZXN1bHQJPSB7IDB4NjQsIDB4MzUsIDB4YWMsIDB4YmEsIDB4ZmIsIDB4MTEsIDB4YTgsIDB4MmUsCi0JCQkgICAgMHgyZiwgMHgwNywgMHgxZCwgMHg3YywgMHhhNCwgMHhhNSwgMHhlYiwgMHhkOSwKLQkJCSAgICAweDNhLCAweDgwLCAweDNiLCAweGE4LCAweDdmIH0sCisJCS5yZXN1bHQJPSAiXHg2NFx4MzVceGFjXHhiYVx4ZmJceDExXHhhOFx4MmUiCisJCQkgICJceDJmXHgwN1x4MWRceDdjXHhhNFx4YTVceGViXHhkOSIKKwkJCSAgIlx4M2FceDgwXHgzYlx4YThceDdmIiwKIAkJLnJsZW4JPSAyMSwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZDcsIDB4ODIsIDB4OGQsIDB4MTMsIDB4YjIsIDB4YjAsIDB4YmQsIDB4YzMsCi0JCQkgICAgMHgyNSwgMHhhNywgMHg2MiwgMHgzNiwgMHhkZiwgMHg5MywgMHhjYywgMHg2YiB9LAorCQkua2V5CT0gIlx4ZDdceDgyXHg4ZFx4MTNceGIyXHhiMFx4YmRceGMzIgorCQkJICAiXHgyNVx4YTdceDYyXHgzNlx4ZGZceDkzXHhjY1x4NmIiLAogCQkua2xlbgk9IDE2LAotCQkuaXYJPSB7IDB4MDEsIDB4MDAsIDB4NDIsIDB4ZmYsIDB4ZjgsIDB4ZjEsIDB4OTUsIDB4MWMsCi0JCQkgICAgMHgzYywgMHg5NiwgMHg5NiwgMHg3NiwgMHg2YywgMHhmYSwgMHgwMCwgMHgwMCB9LAotCQkuYXNzb2MJPSB7IDB4ZDgsIDB4NWIsIDB4YzcsIDB4ZTYsIDB4OWYsIDB4OTQsIDB4NGYsIDB4YjggfSwKKwkJLml2CT0gIlx4MDFceDAwXHg0Mlx4ZmZceGY4XHhmMVx4OTVceDFjIgorCQkJICAiXHgzY1x4OTZceDk2XHg3Nlx4NmNceGZhXHgwMFx4MDAiLAorCQkuYXNzb2MJPSAiXHhkOFx4NWJceGM3XHhlNlx4OWZceDk0XHg0Zlx4YjgiLAogCQkuYWxlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHhiYywgMHgyMSwgMHg4ZCwgMHhhYSwgMHg5NCwgMHg3NCwgMHgyNywgMHhiNiwKLQkJCSAgICAweGRiLCAweDM4LCAweDZhLCAweDk5LCAweGFjLCAweDFhLCAweGVmLCAweDIzLAotCQkJICAgIDB4YWQsIDB4ZTAsIDB4YjUsIDB4MjksIDB4MzksIDB4Y2IsIDB4NmEsIDB4NjMsCi0JCQkgICAgMHg3YywgMHhmOSwgMHhiZSwgMHhjMiwgMHg0MCwgMHg4OCwgMHg5NywgMHhjNiwKLQkJCSAgICAweGJhIH0sCisJCS5pbnB1dAk9ICJceGJjXHgyMVx4OGRceGFhXHg5NFx4NzRceDI3XHhiNiIKKwkJCSAgIlx4ZGJceDM4XHg2YVx4OTlceGFjXHgxYVx4ZWZceDIzIgorCQkJICAiXHhhZFx4ZTBceGI1XHgyOVx4MzlceGNiXHg2YVx4NjMiCisJCQkgICJceDdjXHhmOVx4YmVceGMyXHg0MFx4ODhceDk3XHhjNiIKKwkJCSAgIlx4YmEiLAogCQkuaWxlbgk9IDMzLAotCQkucmVzdWx0CT0geyAweDhhLCAweDE5LCAweGI5LCAweDUwLCAweGJjLCAweGY3LCAweDFhLCAweDAxLAotCQkJICAgIDB4OGUsIDB4NWUsIDB4NjcsIDB4MDEsIDB4YzksIDB4MTcsIDB4ODcsIDB4NjUsCi0JCQkgICAgMHg5OCwgMHgwOSwgMHhkNiwgMHg3ZCwgMHhiZSwgMHhkZCwgMHgxOCB9LAorCQkucmVzdWx0CT0gIlx4OGFceDE5XHhiOVx4NTBceGJjXHhmN1x4MWFceDAxIgorCQkJICAiXHg4ZVx4NWVceDY3XHgwMVx4YzlceDE3XHg4N1x4NjUiCisJCQkgICJceDk4XHgwOVx4ZDZceDdkXHhiZVx4ZGRceDE4IiwKIAkJLnJsZW4JPSAyMywKIAl9LAogfTsKQEAgLTUyOTQsNTQgKzUzMjMsNTQgQEAKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBjYXN0NV9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsCi0JCQkgICAgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5YSB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDEyXHgzNFx4NTZceDc4IgorCQkJICAiXHgyM1x4NDVceDY3XHg4OVx4MzRceDU2XHg3OFx4OWEiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDIzLCAweDhiLCAweDRmLCAweGU1LCAweDg0LCAweDdlLCAweDQ0LCAweGIyIH0sCisJCS5yZXN1bHQJPSAiXHgyM1x4OGJceDRmXHhlNVx4ODRceDdlXHg0NFx4YjIiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDEyLCAweDM0LCAweDU2LCAweDc4LAotCQkJICAgIDB4MjMsIDB4NDUgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHgxMlx4MzRceDU2XHg3OCIKKwkJCSAgIlx4MjNceDQ1IiwKIAkJLmtsZW4JPSAxMCwKLQkJLmlucHV0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5pbnB1dAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHhlYiwgMHg2YSwgMHg3MSwgMHgxYSwgMHgyYywgMHgwMiwgMHgyNywgMHgxYiB9LAorCQkucmVzdWx0CT0gIlx4ZWJceDZhXHg3MVx4MWFceDJjXHgwMlx4MjdceDFiIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHgxMiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDEyIiwKIAkJLmtsZW4JPSA1LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDdhLCAweGM4LCAweDE2LCAweGQxLCAweDZlLCAweDliLCAweDMwLCAweDJlIH0sCisJCS5yZXN1bHQJPSAiXHg3YVx4YzhceDE2XHhkMVx4NmVceDliXHgzMFx4MmUiLAogCQkucmxlbgk9IDgsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgY2FzdDVfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDEyLCAweDM0LCAweDU2LCAweDc4LAotCQkJICAgIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4MzQsIDB4NTYsIDB4NzgsIDB4OWEgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHgxMlx4MzRceDU2XHg3OCIKKwkJCSAgIlx4MjNceDQ1XHg2N1x4ODlceDM0XHg1Nlx4NzhceDlhIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDIzLCAweDhiLCAweDRmLCAweGU1LCAweDg0LCAweDdlLCAweDQ0LCAweGIyIH0sCisJCS5pbnB1dAk9ICJceDIzXHg4Ylx4NGZceGU1XHg4NFx4N2VceDQ0XHhiMiIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkucmVzdWx0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwKLQkJCSAgICAweDIzLCAweDQ1IH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4MTJceDM0XHg1Nlx4NzgiCisJCQkgICJceDIzXHg0NSIsCiAJCS5rbGVuCT0gMTAsCi0JCS5pbnB1dAk9IHsgMHhlYiwgMHg2YSwgMHg3MSwgMHgxYSwgMHgyYywgMHgwMiwgMHgyNywgMHgxYiB9LAorCQkuaW5wdXQJPSAiXHhlYlx4NmFceDcxXHgxYVx4MmNceDAyXHgyN1x4MWIiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLnJlc3VsdAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4MTIgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHgxMiIsCiAJCS5rbGVuCT0gNSwKLQkJLmlucHV0CT0geyAweDdhLCAweGM4LCAweDE2LCAweGQxLCAweDZlLCAweDliLCAweDMwLCAweDJlIH0sCisJCS5pbnB1dAk9ICJceDdhXHhjOFx4MTZceGQxXHg2ZVx4OWJceDMwXHgyZSIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkucmVzdWx0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLnJsZW4JPSA4LAogCX0sCiB9OwpAQCAtNTM1NCwxMzIgKzUzODMsMTMyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYXJjNF9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5pbnB1dAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg3NSwgMHhiNywgMHg4NywgMHg4MCwgMHg5OSwgMHhlMCwgMHhjNSwgMHg5NiB9LAorCQkucmVzdWx0CT0gIlx4NzVceGI3XHg4N1x4ODBceDk5XHhlMFx4YzVceDk2IiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLmlucHV0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDc0LCAweDk0LCAweGMyLCAweGU3LCAweDEwLCAweDRiLCAweDA4LCAweDc5IH0sCisJCS5yZXN1bHQJPSAiXHg3NFx4OTRceGMyXHhlN1x4MTBceDRiXHgwOFx4NzkiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5rZXkJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkuaW5wdXQJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4ZGUsIDB4MTgsIDB4ODksIDB4NDEsIDB4YTMsIDB4MzcsIDB4NWQsIDB4M2EgfSwKKwkJLnJlc3VsdAk9ICJceGRlXHgxOFx4ODlceDQxXHhhM1x4MzdceDVkXHgzYSIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZWYsIDB4MDEsIDB4MjMsIDB4NDV9LAorCQkua2V5CT0gIlx4ZWZceDAxXHgyM1x4NDUiLAogCQkua2xlbgk9IDQsCi0JCS5pbnB1dAk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLmlucHV0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSAyMCwKLQkJLnJlc3VsdAk9IHsgMHhkNiwgMHhhMSwgMHg0MSwgMHhhNywgMHhlYywgMHgzYywgMHgzOCwgMHhkZiwKLQkJCSAgICAweGJkLCAweDYxLCAweDVhLCAweDExLCAweDYyLCAweGUxLCAweGM3LCAweGJhLAotCQkJICAgIDB4MzYsIDB4YjYsIDB4NzgsIDB4NTggfSwKKwkJLnJlc3VsdAk9ICJceGQ2XHhhMVx4NDFceGE3XHhlY1x4M2NceDM4XHhkZiIKKwkJCSAgIlx4YmRceDYxXHg1YVx4MTFceDYyXHhlMVx4YzdceGJhIgorCQkJICAiXHgzNlx4YjZceDc4XHg1OCIsCiAJCS5ybGVuCT0gMjAsCiAJfSwgewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5QSwgMHhCQywgMHhERSwgMHhGMCwKLQkJCSAgICAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDlBLCAweEJDLCAweERFLCAweEYwLAotCQkJICAgIDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OUEsIDB4QkMsIDB4REUsIDB4RjAsCi0JCQkgICAgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCB9LAorCQkuaW5wdXQJPSAiXHgxMlx4MzRceDU2XHg3OFx4OUFceEJDXHhERVx4RjAiCisJCQkgICJceDEyXHgzNFx4NTZceDc4XHg5QVx4QkNceERFXHhGMCIKKwkJCSAgIlx4MTJceDM0XHg1Nlx4NzhceDlBXHhCQ1x4REVceEYwIgorCQkJICAiXHgxMlx4MzRceDU2XHg3OCIsCiAJCS5pbGVuCT0gMjgsCi0JCS5yZXN1bHQJPSB7IDB4NjYsIDB4YTAsIDB4OTQsIDB4OWYsIDB4OGEsIDB4ZjcsIDB4ZDYsIDB4ODksCi0JCQkgICAgMHgxZiwgMHg3ZiwgMHg4MywgMHgyYiwgMHhhOCwgMHgzMywgMHhjMCwgMHgwYywKLQkJCSAgICAweDg5LCAweDJlLCAweGJlLCAweDMwLCAweDE0LCAweDNjLCAweGUyLCAweDg3LAotCQkJICAgIDB4NDAsIDB4MDEsIDB4MWUsIDB4Y2YgfSwKKwkJLnJlc3VsdAk9ICJceDY2XHhhMFx4OTRceDlmXHg4YVx4ZjdceGQ2XHg4OSIKKwkJCSAgIlx4MWZceDdmXHg4M1x4MmJceGE4XHgzM1x4YzBceDBjIgorCQkJICAiXHg4OVx4MmVceGJlXHgzMFx4MTRceDNjXHhlMlx4ODciCisJCQkgICJceDQwXHgwMVx4MWVceGNmIiwKIAkJLnJsZW4JPSAyOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4ZWYsIDB4MDEsIDB4MjMsIDB4NDUgfSwKKwkJLmtleQk9ICJceGVmXHgwMVx4MjNceDQ1IiwKIAkJLmtsZW4JPSA0LAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCB9LAorCQkuaW5wdXQJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMCIsCiAJCS5pbGVuCT0gMTAsCi0JCS5yZXN1bHQJPSB7IDB4ZDYsIDB4YTEsIDB4NDEsIDB4YTcsIDB4ZWMsIDB4M2MsIDB4MzgsIDB4ZGYsCi0JCQkgICAgMHhiZCwgMHg2MSB9LAorCQkucmVzdWx0CT0gIlx4ZDZceGExXHg0MVx4YTdceGVjXHgzY1x4MzhceGRmIgorCQkJICAiXHhiZFx4NjEiLAogCQkucmxlbgk9IDEwLAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwKLQkJICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhBQlx4Q0RceEVGIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGIH0sCisJCS5pbnB1dAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4QUJceENEXHhFRiIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg2OSwgMHg3MiwgMHgzNiwgMHg1OSwgMHgxQiwgMHg1MiwgMHg0MiwgMHhCMSB9LAorCQkucmVzdWx0CT0gIlx4NjlceDcyXHgzNlx4NTlceDFCXHg1Mlx4NDJceEIxIiwKIAkJLnJsZW4JPSA4LAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFyYzRfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisJCS5rZXkJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiLAogCQkua2xlbgk9IDgsCi0JCS5pbnB1dAk9IHsgMHg3NSwgMHhiNywgMHg4NywgMHg4MCwgMHg5OSwgMHhlMCwgMHhjNSwgMHg5NiB9LAorCQkuaW5wdXQJPSAiXHg3NVx4YjdceDg3XHg4MFx4OTlceGUwXHhjNVx4OTYiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLnJlc3VsdAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIsCiAJCS5rbGVuCT0gOCwKLQkJLmlucHV0CT0geyAweDc0LCAweDk0LCAweGMyLCAweGU3LCAweDEwLCAweDRiLCAweDA4LCAweDc5IH0sCisJCS5pbnB1dAk9ICJceDc0XHg5NFx4YzJceGU3XHgxMFx4NGJceDA4XHg3OSIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkucmVzdWx0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkua2V5CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4ZGUsIDB4MTgsIDB4ODksIDB4NDEsIDB4YTMsIDB4MzcsIDB4NWQsIDB4M2EgfSwKKwkJLmlucHV0CT0gIlx4ZGVceDE4XHg4OVx4NDFceGEzXHgzN1x4NWRceDNhIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5yZXN1bHQJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweGVmLCAweDAxLCAweDIzLCAweDQ1fSwKKwkJLmtleQk9ICJceGVmXHgwMVx4MjNceDQ1IiwKIAkJLmtsZW4JPSA0LAotCQkuaW5wdXQJPSB7IDB4ZDYsIDB4YTEsIDB4NDEsIDB4YTcsIDB4ZWMsIDB4M2MsIDB4MzgsIDB4ZGYsCi0JCQkgICAgMHhiZCwgMHg2MSwgMHg1YSwgMHgxMSwgMHg2MiwgMHhlMSwgMHhjNywgMHhiYSwKLQkJCSAgICAweDM2LCAweGI2LCAweDc4LCAweDU4IH0sCisJCS5pbnB1dAk9ICJceGQ2XHhhMVx4NDFceGE3XHhlY1x4M2NceDM4XHhkZiIKKwkJCSAgIlx4YmRceDYxXHg1YVx4MTFceDYyXHhlMVx4YzdceGJhIgorCQkJICAiXHgzNlx4YjZceDc4XHg1OCIsCiAJCS5pbGVuCT0gMjAsCi0JCS5yZXN1bHQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5yZXN1bHQJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwXHgwMFx4MDAiLAogCQkucmxlbgk9IDIwLAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIiwKIAkJLmtsZW4JPSA4LAotCQkuaW5wdXQJPSB7IDB4NjYsIDB4YTAsIDB4OTQsIDB4OWYsIDB4OGEsIDB4ZjcsIDB4ZDYsIDB4ODksCi0JCQkgICAgMHgxZiwgMHg3ZiwgMHg4MywgMHgyYiwgMHhhOCwgMHgzMywgMHhjMCwgMHgwYywKLQkJCSAgICAweDg5LCAweDJlLCAweGJlLCAweDMwLCAweDE0LCAweDNjLCAweGUyLCAweDg3LAotCQkJICAgIDB4NDAsIDB4MDEsIDB4MWUsIDB4Y2YgfSwKKwkJLmlucHV0CT0gIlx4NjZceGEwXHg5NFx4OWZceDhhXHhmN1x4ZDZceDg5IgorCQkJICAiXHgxZlx4N2ZceDgzXHgyYlx4YThceDMzXHhjMFx4MGMiCisJCQkgICJceDg5XHgyZVx4YmVceDMwXHgxNFx4M2NceGUyXHg4NyIKKwkJCSAgIlx4NDBceDAxXHgxZVx4Y2YiLAogCQkuaWxlbgk9IDI4LAotCQkucmVzdWx0CT0geyAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDlBLCAweEJDLCAweERFLCAweEYwLAotCQkJICAgIDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OUEsIDB4QkMsIDB4REUsIDB4RjAsCi0JCQkgICAgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5QSwgMHhCQywgMHhERSwgMHhGMCwKLQkJCSAgICAweDEyLCAweDM0LCAweDU2LCAweDc4IH0sCisJCS5yZXN1bHQJPSAiXHgxMlx4MzRceDU2XHg3OFx4OUFceEJDXHhERVx4RjAiCisJCQkgICJceDEyXHgzNFx4NTZceDc4XHg5QVx4QkNceERFXHhGMCIKKwkJCSAgIlx4MTJceDM0XHg1Nlx4NzhceDlBXHhCQ1x4REVceEYwIgorCQkJICAiXHgxMlx4MzRceDU2XHg3OCIsCiAJCS5ybGVuCT0gMjgsCiAJfSwgewotCQkua2V5CT0geyAweGVmLCAweDAxLCAweDIzLCAweDQ1IH0sCisJCS5rZXkJPSAiXHhlZlx4MDFceDIzXHg0NSIsCiAJCS5rbGVuCT0gNCwKLQkJLmlucHV0CT0geyAweGQ2LCAweGExLCAweDQxLCAweGE3LCAweGVjLCAweDNjLCAweDM4LCAweGRmLAotCQkJICAgIDB4YmQsIDB4NjEgfSwKKwkJLmlucHV0CT0gIlx4ZDZceGExXHg0MVx4YTdceGVjXHgzY1x4MzhceGRmIgorCQkJICAiXHhiZFx4NjEiLAogCQkuaWxlbgk9IDEwLAotCQkucmVzdWx0CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSAgIlx4MDBceDAwIiwKIAkJLnJsZW4JPSAxMCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsCi0JCSAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4QUJceENEXHhFRiIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg2OSwgMHg3MiwgMHgzNiwgMHg1OSwgMHgxQiwgMHg1MiwgMHg0MiwgMHhCMSB9LAorCQkuaW5wdXQJPSAiXHg2OVx4NzJceDM2XHg1OVx4MUJceDUyXHg0Mlx4QjEiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYgfSwKKwkJLnJlc3VsdAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4QUJceENEXHhFRiIsCiAJCS5ybGVuCT0gOCwKIAl9LAogfTsKQEAgLTU0OTIsODYgKzU1MjEsODYgQEAKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyB0ZWFfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5ICAgID0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0ICA9IHsgWzAgLi4uIDhdID0gMHgwMCB9LAorCQkuaW5wdXQgID0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDBhLCAweDNhLCAweGVhLCAweDQxLCAweDQwLCAweGE5LCAweGJhLCAweDk0IH0sCisJCS5yZXN1bHQJPSAiXHgwYVx4M2FceGVhXHg0MVx4NDBceGE5XHhiYVx4OTQiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDJiLCAweDAyLCAweDA1LCAweDY4LCAweDA2LCAweDE0LCAweDQ5LCAweDc2LAotCQkJICAgIDB4NzcsIDB4NWQsIDB4MGUsIDB4MjYsIDB4NmMsIDB4MjgsIDB4NzgsIDB4NDMgfSwKKwkJLmtleQk9ICJceDJiXHgwMlx4MDVceDY4XHgwNlx4MTRceDQ5XHg3NiIKKwkJCSAgIlx4NzdceDVkXHgwZVx4MjZceDZjXHgyOFx4NzhceDQzIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDc0LCAweDY1LCAweDczLCAweDc0LCAweDIwLCAweDZkLCAweDY1LCAweDJlIH0sCisJCS5pbnB1dAk9ICJceDc0XHg2NVx4NzNceDc0XHgyMFx4NmRceDY1XHgyZSIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg3NywgMHg1ZCwgMHgyYSwgMHg2YSwgMHhmNiwgMHhjZSwgMHg5MiwgMHgwOSB9LAorCQkucmVzdWx0CT0gIlx4NzdceDVkXHgyYVx4NmFceGY2XHhjZVx4OTJceDA5IiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwOSwgMHg2NSwgMHg0MywgMHgxMSwgMHg2NiwgMHg0NCwgMHgzOSwgMHgyNSwKLQkJCSAgICAweDUxLCAweDNhLCAweDE2LCAweDEwLCAweDBhLCAweDA4LCAweDEyLCAweDZlIH0sCisJCS5rZXkJPSAiXHgwOVx4NjVceDQzXHgxMVx4NjZceDQ0XHgzOVx4MjUiCisJCQkgICJceDUxXHgzYVx4MTZceDEwXHgwYVx4MDhceDEyXHg2ZSIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg2YywgMHg2ZiwgMHg2ZSwgMHg2NywgMHg2NSwgMHg3MiwgMHg1ZiwgMHg3NCwKLQkJCSAgICAweDY1LCAweDczLCAweDc0LCAweDVmLCAweDc2LCAweDY1LCAweDYzLCAweDc0IH0sCisJCS5pbnB1dAk9ICJceDZjXHg2Zlx4NmVceDY3XHg2NVx4NzJceDVmXHg3NCIKKwkJCSAgIlx4NjVceDczXHg3NFx4NWZceDc2XHg2NVx4NjNceDc0IiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHhiZSwgMHg3YSwgMHhiYiwgMHg4MSwgMHg5NSwgMHgyZCwgMHgxZiwgMHgxZSwKLQkJCSAgICAweGRkLCAweDg5LCAweGExLCAweDI1LCAweDA0LCAweDIxLCAweGRmLCAweDk1IH0sCisJCS5yZXN1bHQJPSAiXHhiZVx4N2FceGJiXHg4MVx4OTVceDJkXHgxZlx4MWUiCisJCQkgICJceGRkXHg4OVx4YTFceDI1XHgwNFx4MjFceGRmXHg5NSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDRkLCAweDc2LCAweDMyLCAweDE3LCAweDA1LCAweDNmLCAweDc1LCAweDJjLAotCQkJICAgIDB4NWQsIDB4MDQsIDB4MTYsIDB4MzYsIDB4MTUsIDB4NzIsIDB4NjMsIDB4MmYgfSwKKwkJLmtleQk9ICJceDRkXHg3Nlx4MzJceDE3XHgwNVx4M2ZceDc1XHgyYyIKKwkJCSAgIlx4NWRceDA0XHgxNlx4MzZceDE1XHg3Mlx4NjNceDJmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDU0LCAweDY1LCAweDYxLCAweDIwLCAweDY5LCAweDczLCAweDIwLCAweDY3LAotCQkJICAgIDB4NmYsIDB4NmYsIDB4NjQsIDB4MjAsIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsCi0JCQkgICAgMHg3OSwgMHg2ZiwgMHg3NSwgMHgyMSwgMHgyMSwgMHgyMSwgMHgyMCwgMHg3MiwKLQkJCSAgICAweDY1LCAweDYxLCAweDZjLCAweDZjLCAweDc5LCAweDIxLCAweDIxLCAweDIxIH0sCisJCS5pbnB1dAk9ICJceDU0XHg2NVx4NjFceDIwXHg2OVx4NzNceDIwXHg2NyIKKwkJCSAgIlx4NmZceDZmXHg2NFx4MjBceDY2XHg2Zlx4NzJceDIwIgorCQkJICAiXHg3OVx4NmZceDc1XHgyMVx4MjFceDIxXHgyMFx4NzIiCisJCQkgICJceDY1XHg2MVx4NmNceDZjXHg3OVx4MjFceDIxXHgyMSIsCiAJCS5pbGVuCT0gMzIsCi0JCS5yZXN1bHQJPSB7IDB4ZTAsIDB4NGQsIDB4NWQsIDB4M2MsIDB4YjcsIDB4OGMsIDB4MzYsIDB4NDcsCi0JCQkgICAgMHg5NCwgMHgxOCwgMHg5NSwgMHg5MSwgMHhhOSwgMHhmYywgMHg0OSwgMHhmOCwKLQkJCSAgICAweDQ0LCAweGQxLCAweDJkLCAweGMyLCAweDk5LCAweGI4LCAweDA4LCAweDJhLAotCQkJICAgIDB4MDcsIDB4ODksIDB4NzMsIDB4YzIsIDB4NDUsIDB4OTIsIDB4YzYsIDB4OTAgfSwKKwkJLnJlc3VsdAk9ICJceGUwXHg0ZFx4NWRceDNjXHhiN1x4OGNceDM2XHg0NyIKKwkJCSAgIlx4OTRceDE4XHg5NVx4OTFceGE5XHhmY1x4NDlceGY4IgorCQkJICAiXHg0NFx4ZDFceDJkXHhjMlx4OTlceGI4XHgwOFx4MmEiCisJCQkgICJceDA3XHg4OVx4NzNceGMyXHg0NVx4OTJceGM2XHg5MCIsCiAJCS5ybGVuCT0gMzIsCiAJfQogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyB0ZWFfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5ICAgID0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDBhLCAweDNhLCAweGVhLCAweDQxLCAweDQwLCAweGE5LCAweGJhLCAweDk0IH0sCisJCS5pbnB1dAk9ICJceDBhXHgzYVx4ZWFceDQxXHg0MFx4YTlceGJhXHg5NCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdCA9IHsgWzAgLi4uIDhdID0gMHgwMCB9LAorCQkucmVzdWx0ID0gemVyb2VkX3N0cmluZywKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyYiwgMHgwMiwgMHgwNSwgMHg2OCwgMHgwNiwgMHgxNCwgMHg0OSwgMHg3NiwKLQkJCSAgICAweDc3LCAweDVkLCAweDBlLCAweDI2LCAweDZjLCAweDI4LCAweDc4LCAweDQzIH0sCisJCS5rZXkJPSAiXHgyYlx4MDJceDA1XHg2OFx4MDZceDE0XHg0OVx4NzYiCisJCQkgICJceDc3XHg1ZFx4MGVceDI2XHg2Y1x4MjhceDc4XHg0MyIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg3NywgMHg1ZCwgMHgyYSwgMHg2YSwgMHhmNiwgMHhjZSwgMHg5MiwgMHgwOSB9LAorCQkuaW5wdXQJPSAiXHg3N1x4NWRceDJhXHg2YVx4ZjZceGNlXHg5Mlx4MDkiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NzQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NmQsIDB4NjUsIDB4MmUgfSwKKwkJLnJlc3VsdAk9ICJceDc0XHg2NVx4NzNceDc0XHgyMFx4NmRceDY1XHgyZSIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDksIDB4NjUsIDB4NDMsIDB4MTEsIDB4NjYsIDB4NDQsIDB4MzksIDB4MjUsCi0JCQkgICAgMHg1MSwgMHgzYSwgMHgxNiwgMHgxMCwgMHgwYSwgMHgwOCwgMHgxMiwgMHg2ZSB9LAorCQkua2V5CT0gIlx4MDlceDY1XHg0M1x4MTFceDY2XHg0NFx4MzlceDI1IgorCQkJICAiXHg1MVx4M2FceDE2XHgxMFx4MGFceDA4XHgxMlx4NmUiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4YmUsIDB4N2EsIDB4YmIsIDB4ODEsIDB4OTUsIDB4MmQsIDB4MWYsIDB4MWUsCi0JCQkgICAgMHhkZCwgMHg4OSwgMHhhMSwgMHgyNSwgMHgwNCwgMHgyMSwgMHhkZiwgMHg5NSB9LAorCQkuaW5wdXQJPSAiXHhiZVx4N2FceGJiXHg4MVx4OTVceDJkXHgxZlx4MWUiCisJCQkgICJceGRkXHg4OVx4YTFceDI1XHgwNFx4MjFceGRmXHg5NSIsCiAJCS5pbGVuICAgPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg2YywgMHg2ZiwgMHg2ZSwgMHg2NywgMHg2NSwgMHg3MiwgMHg1ZiwgMHg3NCwKLQkJCSAgICAweDY1LCAweDczLCAweDc0LCAweDVmLCAweDc2LCAweDY1LCAweDYzLCAweDc0IH0sCisJCS5yZXN1bHQJPSAiXHg2Y1x4NmZceDZlXHg2N1x4NjVceDcyXHg1Zlx4NzQiCisJCQkgICJceDY1XHg3M1x4NzRceDVmXHg3Nlx4NjVceDYzXHg3NCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDRkLCAweDc2LCAweDMyLCAweDE3LCAweDA1LCAweDNmLCAweDc1LCAweDJjLAotCQkJICAgIDB4NWQsIDB4MDQsIDB4MTYsIDB4MzYsIDB4MTUsIDB4NzIsIDB4NjMsIDB4MmYgfSwKKwkJLmtleQk9ICJceDRkXHg3Nlx4MzJceDE3XHgwNVx4M2ZceDc1XHgyYyIKKwkJCSAgIlx4NWRceDA0XHgxNlx4MzZceDE1XHg3Mlx4NjNceDJmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweGUwLCAweDRkLCAweDVkLCAweDNjLCAweGI3LCAweDhjLCAweDM2LCAweDQ3LAotCQkJICAgIDB4OTQsIDB4MTgsIDB4OTUsIDB4OTEsIDB4YTksIDB4ZmMsIDB4NDksIDB4ZjgsCi0JCQkgICAgMHg0NCwgMHhkMSwgMHgyZCwgMHhjMiwgMHg5OSwgMHhiOCwgMHgwOCwgMHgyYSwKLQkJCSAgICAweDA3LCAweDg5LCAweDczLCAweGMyLCAweDQ1LCAweDkyLCAweGM2LCAweDkwIH0sCisJCS5pbnB1dAk9ICJceGUwXHg0ZFx4NWRceDNjXHhiN1x4OGNceDM2XHg0NyIKKwkJCSAgIlx4OTRceDE4XHg5NVx4OTFceGE5XHhmY1x4NDlceGY4IgorCQkJICAiXHg0NFx4ZDFceDJkXHhjMlx4OTlceGI4XHgwOFx4MmEiCisJCQkgICJceDA3XHg4OVx4NzNceGMyXHg0NVx4OTJceGM2XHg5MCIsCiAJCS5pbGVuCT0gMzIsCi0JCS5yZXN1bHQJPSB7IDB4NTQsIDB4NjUsIDB4NjEsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjcsCi0JCQkgICAgMHg2ZiwgMHg2ZiwgMHg2NCwgMHgyMCwgMHg2NiwgMHg2ZiwgMHg3MiwgMHgyMCwKLQkJCSAgICAweDc5LCAweDZmLCAweDc1LCAweDIxLCAweDIxLCAweDIxLCAweDIwLCAweDcyLAotCQkJICAgIDB4NjUsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NzksIDB4MjEsIDB4MjEsIDB4MjEgfSwKKwkJLnJlc3VsdAk9ICJceDU0XHg2NVx4NjFceDIwXHg2OVx4NzNceDIwXHg2NyIKKwkJCSAgIlx4NmZceDZmXHg2NFx4MjBceDY2XHg2Zlx4NzJceDIwIgorCQkJICAiXHg3OVx4NmZceDc1XHgyMVx4MjFceDIxXHgyMFx4NzIiCisJCQkgICJceDY1XHg2MVx4NmNceDZjXHg3OVx4MjFceDIxXHgyMSIsCiAJCS5ybGVuCT0gMzIsCiAJfQogfTsKQEAgLTU1ODQsODYgKzU2MTMsODYgQEAKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyB4dGVhX2VuY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleSAgICA9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmtleSAgICA9IHplcm9lZF9zdHJpbmcsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dCAgPSB7IFswIC4uLiA4XSA9IDB4MDAgfSwKKwkJLmlucHV0ICA9IHplcm9lZF9zdHJpbmcsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHhkOCwgMHhkNCwgMHhlOSwgMHhkZSwgMHhkOSwgMHgxZSwgMHgxMywgMHhmNyB9LAorCQkucmVzdWx0CT0gIlx4ZDhceGQ0XHhlOVx4ZGVceGQ5XHgxZVx4MTNceGY3IiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyYiwgMHgwMiwgMHgwNSwgMHg2OCwgMHgwNiwgMHgxNCwgMHg0OSwgMHg3NiwKLQkJCSAgICAweDc3LCAweDVkLCAweDBlLCAweDI2LCAweDZjLCAweDI4LCAweDc4LCAweDQzIH0sCisJCS5rZXkJPSAiXHgyYlx4MDJceDA1XHg2OFx4MDZceDE0XHg0OVx4NzYiCisJCQkgICJceDc3XHg1ZFx4MGVceDI2XHg2Y1x4MjhceDc4XHg0MyIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg3NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgyMCwgMHg2ZCwgMHg2NSwgMHgyZSB9LAorCQkuaW5wdXQJPSAiXHg3NFx4NjVceDczXHg3NFx4MjBceDZkXHg2NVx4MmUiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4OTQsIDB4ZWIsIDB4YzgsIDB4OTYsIDB4ODQsIDB4NmEsIDB4NDksIDB4YTggfSwKKwkJLnJlc3VsdAk9ICJceDk0XHhlYlx4YzhceDk2XHg4NFx4NmFceDQ5XHhhOCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDksIDB4NjUsIDB4NDMsIDB4MTEsIDB4NjYsIDB4NDQsIDB4MzksIDB4MjUsCi0JCQkgICAgMHg1MSwgMHgzYSwgMHgxNiwgMHgxMCwgMHgwYSwgMHgwOCwgMHgxMiwgMHg2ZSB9LAorCQkua2V5CT0gIlx4MDlceDY1XHg0M1x4MTFceDY2XHg0NFx4MzlceDI1IgorCQkJICAiXHg1MVx4M2FceDE2XHgxMFx4MGFceDA4XHgxMlx4NmUiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4M2UsIDB4Y2UsIDB4YWUsIDB4MjIsIDB4NjAsIDB4NTYsIDB4YTgsIDB4OWQsCi0JCQkgICAgMHg2NSwgMHg3MywgMHg3NCwgMHg1ZiwgMHg3NiwgMHg2NSwgMHg2MywgMHg3NCB9LAorCQkuaW5wdXQJPSAiXHg2Y1x4NmZceDZlXHg2N1x4NjVceDcyXHg1Zlx4NzQiCisJCQkgICJceDY1XHg3M1x4NzRceDVmXHg3Nlx4NjVceDYzXHg3NCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4ZTIsIDB4MDQsIDB4ZGIsIDB4ZjIsIDB4ODksIDB4ODUsIDB4OWUsIDB4ZWEsIAotCQkJICAgIDB4NjEsIDB4MzUsIDB4YWEsIDB4ZWQsIDB4YjUsIDB4Y2IsIDB4NzEsIDB4MmMgfSwKKwkJLnJlc3VsdAk9ICJceDNlXHhjZVx4YWVceDIyXHg2MFx4NTZceGE4XHg5ZCIKKwkJCSAgIlx4NzdceDRkXHhkNFx4YjRceDg3XHgyNFx4ZTNceDlhIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4NGQsIDB4NzYsIDB4MzIsIDB4MTcsIDB4MDUsIDB4M2YsIDB4NzUsIDB4MmMsCi0JCQkgICAgMHg1ZCwgMHgwNCwgMHgxNiwgMHgzNiwgMHgxNSwgMHg3MiwgMHg2MywgMHgyZiB9LAorCQkua2V5CT0gIlx4NGRceDc2XHgzMlx4MTdceDA1XHgzZlx4NzVceDJjIgorCQkJICAiXHg1ZFx4MDRceDE2XHgzNlx4MTVceDcyXHg2M1x4MmYiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4NTQsIDB4NjUsIDB4NjEsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjcsIAotCQkJICAgIDB4NmYsIDB4NmYsIDB4NjQsIDB4MjAsIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIAotCQkJICAgIDB4NzksIDB4NmYsIDB4NzUsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjAsIDB4NzIsIAotCQkJICAgIDB4NjUsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NzksIDB4MjEsIDB4MjEsIDB4MjEgfSwKKwkJLmlucHV0CT0gIlx4NTRceDY1XHg2MVx4MjBceDY5XHg3M1x4MjBceDY3IgorCQkJICAiXHg2Zlx4NmZceDY0XHgyMFx4NjZceDZmXHg3Mlx4MjAiCisJCQkgICJceDc5XHg2Zlx4NzVceDIxXHgyMVx4MjFceDIwXHg3MiIKKwkJCSAgIlx4NjVceDYxXHg2Y1x4NmNceDc5XHgyMVx4MjFceDIxIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHg5OSwgMHg4MSwgMHg5ZiwgMHg1ZCwgMHg2ZiwgMHg0YiwgMHgzMSwgMHgzYSwKLQkJCSAgICAweDg2LCAweGZmLCAweDZmLCAweGQwLCAweGUzLCAweDg3LCAweDcwLCAweDA3LAotCQkJICAgIDB4NGQsIDB4YjgsIDB4Y2YsIDB4ZjMsIDB4OTksIDB4NTAsIDB4YjMsIDB4ZDQsCi0JCQkgICAgMHg3MywgMHhhMiwgMHhmYSwgMHhjOSwgMHgxNiwgMHg1OSwgMHg1ZCwgMHg4MSB9LAorCQkucmVzdWx0CT0gIlx4OTlceDgxXHg5Zlx4NWRceDZmXHg0Ylx4MzFceDNhIgorCQkJICAiXHg4Nlx4ZmZceDZmXHhkMFx4ZTNceDg3XHg3MFx4MDciCisJCQkgICJceDRkXHhiOFx4Y2ZceGYzXHg5OVx4NTBceGIzXHhkNCIKKwkJCSAgIlx4NzNceGEyXHhmYVx4YzlceDE2XHg1OVx4NWRceDgxIiwKIAkJLnJsZW4JPSAzMiwKIAl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHh0ZWFfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5ICAgID0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweGQ4LCAweGQ0LCAweGU5LCAweGRlLCAweGQ5LCAweDFlLCAweDEzLCAweGY3IH0sCisJCS5pbnB1dAk9ICJceGQ4XHhkNFx4ZTlceGRlXHhkOVx4MWVceDEzXHhmNyIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdCA9IHsgWzAgLi4uIDhdID0gMHgwMCB9LAorCQkucmVzdWx0ID0gemVyb2VkX3N0cmluZywKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyYiwgMHgwMiwgMHgwNSwgMHg2OCwgMHgwNiwgMHgxNCwgMHg0OSwgMHg3NiwKLQkJCSAgICAweDc3LCAweDVkLCAweDBlLCAweDI2LCAweDZjLCAweDI4LCAweDc4LCAweDQzIH0sCisJCS5rZXkJPSAiXHgyYlx4MDJceDA1XHg2OFx4MDZceDE0XHg0OVx4NzYiCisJCQkgICJceDc3XHg1ZFx4MGVceDI2XHg2Y1x4MjhceDc4XHg0MyIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg5NCwgMHhlYiwgMHhjOCwgMHg5NiwgMHg4NCwgMHg2YSwgMHg0OSwgMHhhOCB9LAorCQkuaW5wdXQJPSAiXHg5NFx4ZWJceGM4XHg5Nlx4ODRceDZhXHg0OVx4YTgiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NzQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NmQsIDB4NjUsIDB4MmUgfSwKKwkJLnJlc3VsdAk9ICJceDc0XHg2NVx4NzNceDc0XHgyMFx4NmRceDY1XHgyZSIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDksIDB4NjUsIDB4NDMsIDB4MTEsIDB4NjYsIDB4NDQsIDB4MzksIDB4MjUsCi0JCQkgICAgMHg1MSwgMHgzYSwgMHgxNiwgMHgxMCwgMHgwYSwgMHgwOCwgMHgxMiwgMHg2ZSB9LAorCQkua2V5CT0gIlx4MDlceDY1XHg0M1x4MTFceDY2XHg0NFx4MzlceDI1IgorCQkJICAiXHg1MVx4M2FceDE2XHgxMFx4MGFceDA4XHgxMlx4NmUiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4M2UsIDB4Y2UsIDB4YWUsIDB4MjIsIDB4NjAsIDB4NTYsIDB4YTgsIDB4OWQsCi0JCQkgICAgMHg3NywgMHg0ZCwgMHhkNCwgMHhiNCwgMHg4NywgMHgyNCwgMHhlMywgMHg5YSB9LAorCQkuaW5wdXQJPSAiXHgzZVx4Y2VceGFlXHgyMlx4NjBceDU2XHhhOFx4OWQiCisJCQkgICJceDc3XHg0ZFx4ZDRceGI0XHg4N1x4MjRceGUzXHg5YSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4NmMsIDB4NmYsIDB4NmUsIDB4NjcsIDB4NjUsIDB4NzIsIDB4NWYsIDB4NzQsIAotCQkJICAgIDB4NjUsIDB4NzMsIDB4NzQsIDB4NWYsIDB4NzYsIDB4NjUsIDB4NjMsIDB4NzQgfSwKKwkJLnJlc3VsdAk9ICJceDZjXHg2Zlx4NmVceDY3XHg2NVx4NzJceDVmXHg3NCIKKwkJCSAgIlx4NjVceDczXHg3NFx4NWZceDc2XHg2NVx4NjNceDc0IiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4NGQsIDB4NzYsIDB4MzIsIDB4MTcsIDB4MDUsIDB4M2YsIDB4NzUsIDB4MmMsCi0JCQkgICAgMHg1ZCwgMHgwNCwgMHgxNiwgMHgzNiwgMHgxNSwgMHg3MiwgMHg2MywgMHgyZiB9LAorCQkua2V5CT0gIlx4NGRceDc2XHgzMlx4MTdceDA1XHgzZlx4NzVceDJjIgorCQkJICAiXHg1ZFx4MDRceDE2XHgzNlx4MTVceDcyXHg2M1x4MmYiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4OTksIDB4ODEsIDB4OWYsIDB4NWQsIDB4NmYsIDB4NGIsIDB4MzEsIDB4M2EsCi0JCQkgICAgMHg4NiwgMHhmZiwgMHg2ZiwgMHhkMCwgMHhlMywgMHg4NywgMHg3MCwgMHgwNywKLQkJCSAgICAweDRkLCAweGI4LCAweGNmLCAweGYzLCAweDk5LCAweDUwLCAweGIzLCAweGQ0LAotCQkJICAgIDB4NzMsIDB4YTIsIDB4ZmEsIDB4YzksIDB4MTYsIDB4NTksIDB4NWQsIDB4ODEgfSwKKwkJLmlucHV0CT0gIlx4OTlceDgxXHg5Zlx4NWRceDZmXHg0Ylx4MzFceDNhIgorCQkJICAiXHg4Nlx4ZmZceDZmXHhkMFx4ZTNceDg3XHg3MFx4MDciCisJCQkgICJceDRkXHhiOFx4Y2ZceGYzXHg5OVx4NTBceGIzXHhkNCIKKwkJCSAgIlx4NzNceGEyXHhmYVx4YzlceDE2XHg1OVx4NWRceDgxIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHg1NCwgMHg2NSwgMHg2MSwgMHgyMCwgMHg2OSwgMHg3MywgMHgyMCwgMHg2NywgCi0JCQkgICAgMHg2ZiwgMHg2ZiwgMHg2NCwgMHgyMCwgMHg2NiwgMHg2ZiwgMHg3MiwgMHgyMCwgCi0JCQkgICAgMHg3OSwgMHg2ZiwgMHg3NSwgMHgyMSwgMHgyMSwgMHgyMSwgMHgyMCwgMHg3MiwgCi0JCQkgICAgMHg2NSwgMHg2MSwgMHg2YywgMHg2YywgMHg3OSwgMHgyMSwgMHgyMSwgMHgyMSB9LAorCQkucmVzdWx0CT0gIlx4NTRceDY1XHg2MVx4MjBceDY5XHg3M1x4MjBceDY3IgorCQkJICAiXHg2Zlx4NmZceDY0XHgyMFx4NjZceDZmXHg3Mlx4MjAiCisJCQkgICJceDc5XHg2Zlx4NzVceDIxXHgyMVx4MjFceDIwXHg3MiIKKwkJCSAgIlx4NjVceDYxXHg2Y1x4NmNceDc5XHgyMVx4MjFceDIxIiwKIAkJLnJsZW4JPSAzMiwKIAl9CiB9OwpAQCAtNTY3Niw5MiArNTcwNSw5MiBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGtoYXphZF9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkJPSB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkua2V5CT0gIlx4ODBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJICAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLmlucHV0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDQ5LCAweGE0LCAweGNlLCAweDMyLCAweGFjLCAweDE5LCAweDBlLCAweDNmIH0sCisJCS5yZXN1bHQJPSAiXHg0OVx4YTRceGNlXHgzMlx4YWNceDE5XHgwZVx4M2YiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LAotCQkJICAgIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzggfSwKKwkJLmtleQk9ICJceDM4XHgzOFx4MzhceDM4XHgzOFx4MzhceDM4XHgzOCIKKwkJCSAgIlx4MzhceDM4XHgzOFx4MzhceDM4XHgzOFx4MzhceDM4IiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4IH0sCisJCS5pbnB1dAk9ICJceDM4XHgzOFx4MzhceDM4XHgzOFx4MzhceDM4XHgzOCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg3ZSwgMHg4MiwgMHgxMiwgMHhhMSwgMFhkOSwgMFg1YiwgMFhlNCwgMFhmOSB9LAorCQkucmVzdWx0CT0gIlx4N2VceDgyXHgxMlx4YTFceGQ5XHg1Ylx4ZTRceGY5IiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMFhhMiwgMFhhMiwgMFhhMiwgMFhhMiwgMFhhMiwgMFhhMiwgMFhhMiwgMFhhMiwKLQkJCSAgICAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyIH0sCisJCS5rZXkJPSAiXHhhMlx4YTJceGEyXHhhMlx4YTJceGEyXHhhMlx4YTIiCisJCQkiXHhhMlx4YTJceGEyXHhhMlx4YTJceGEyXHhhMlx4YTIiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIgfSwKKwkJLmlucHV0CT0gIlx4YTJceGEyXHhhMlx4YTJceGEyXHhhMlx4YTJceGEyIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAwWGFhLCAwWGJlLCAwWGMxLCAwWDk1LCAwWGM1LCAwWDk0LCAwWDFhLCAwWDljIH0sCisJCS5yZXN1bHQJPSAiXHhhYVx4YmVceGMxXHg5NVx4YzVceDk0XHgxYVx4OWMiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLAotCQkJICAgIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYgfSwKKwkJLmtleQk9ICJceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZiIKKwkJCSJceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiB9LAorCQkuaW5wdXQJPSAiXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmYiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQgPSB7IDBYMDQsIDBYNzQsIDBYZjUsIDBYNzAsIDBYNTAsIDBYMTYsIDBYZDMsIDBYYjggfSwKKwkJLnJlc3VsdCA9ICJceDA0XHg3NFx4ZjVceDcwXHg1MFx4MTZceGQzXHhiOCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsCi0JCQkgICAgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiB9LAorCQkua2V5CT0gIlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmIgorCQkJIlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmICwKLQkJCSAgICAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmIH0sCisJCS5pbnB1dAk9ICJceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZiIKKwkJCSJceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQgPSB7IDBYMDQsIDBYNzQsIDBYZjUsIDBYNzAsIDBYNTAsIDBYMTYsIDBYZDMsIDBYYjggLAotCQkJICAgIDBYMDQsIDBYNzQsIDBYZjUsIDBYNzAsIDBYNTAsIDBYMTYsIDBYZDMsIDBYYjggfSwKKwkJLnJlc3VsdCA9ICJceDA0XHg3NFx4ZjVceDcwXHg1MFx4MTZceGQzXHhiOCIKKwkJCSJceDA0XHg3NFx4ZjVceDcwXHg1MFx4MTZceGQzXHhiOCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMga2hhemFkX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5rZXkJPSAiXHg4MFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMFg0OSwgMFhhNCwgMFhjZSwgMFgzMiwgMFhhYywgMFgxOSwgMFgwZSwgMFgzZiB9LAorCQkuaW5wdXQJPSAiXHg0OVx4YTRceGNlXHgzMlx4YWNceDE5XHgwZVx4M2YiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLnJlc3VsdAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsIDB4MzgsCi0JCQkgICAgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOCB9LAorCQkua2V5CT0gIlx4MzhceDM4XHgzOFx4MzhceDM4XHgzOFx4MzhceDM4IgorCQkJICAiXHgzOFx4MzhceDM4XHgzOFx4MzhceDM4XHgzOFx4MzgiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDBYN2UsIDBYODIsIDBYMTIsIDBYYTEsIDBYZDksIDBYNWIsIDBYZTQsIDBYZjkgfSwKKwkJLmlucHV0CT0gIlx4N2VceDgyXHgxMlx4YTFceGQ5XHg1Ylx4ZTRceGY5IiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4LCAweDM4IH0sCisJCS5yZXN1bHQJPSAiXHgzOFx4MzhceDM4XHgzOFx4MzhceDM4XHgzOFx4MzgiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLCAwWGEyLAotCQkJICAgIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIgfSwKKwkJLmtleQk9ICJceGEyXHhhMlx4YTJceGEyXHhhMlx4YTJceGEyXHhhMiIKKwkJCSJceGEyXHhhMlx4YTJceGEyXHhhMlx4YTJceGEyXHhhMiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMFhhYSwgMFhiZSwgMFhjMSwgMFg5NSwgMFhjNSwgMFg5NCwgMFgxYSwgMFg5YyB9LAorCQkuaW5wdXQJPSAiXHhhYVx4YmVceGMxXHg5NVx4YzVceDk0XHgxYVx4OWMiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIsIDBYYTIgfSwKKwkJLnJlc3VsdAk9ICJceGEyXHhhMlx4YTJceGEyXHhhMlx4YTJceGEyXHhhMiIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsCi0JCQkgICAgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiB9LAorCQkua2V5CT0gIlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmIgorCQkJIlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0ID0geyAwWDA0LCAwWDc0LCAwWGY1LCAwWDcwLCAwWDUwLCAwWDE2LCAwWGQzLCAwWGI4IH0sCisJCS5pbnB1dCAgPSAiXHgwNFx4NzRceGY1XHg3MFx4NTBceDE2XHhkM1x4YjgiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYgfSwKKwkJLnJlc3VsdAk9ICJceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZiIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsIDBYMmYsCi0JCQkgICAgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiwgMFgyZiB9LAorCQkua2V5CT0gIlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmIgorCQkJIlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0ID0geyAwWDA0LCAwWDc0LCAwWGY1LCAwWDcwLCAwWDUwLCAwWDE2LCAwWGQzLCAwWGI4ICwKLQkJCSAgICAwWDA0LCAwWDc0LCAwWGY1LCAwWDcwLCAwWDUwLCAwWDE2LCAwWGQzLCAwWGI4IH0sCisJCS5pbnB1dCAgPSAiXHgwNFx4NzRceGY1XHg3MFx4NTBceDE2XHhkM1x4YjgiCisJCQkiXHgwNFx4NzRceGY1XHg3MFx4NTBceDE2XHhkM1x4YjgiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmICwKLQkJCSAgICAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmLCAwWDJmIH0sCisJCS5yZXN1bHQJPSAiXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmYiCisJCQkiXHgyZlx4MmZceDJmXHgyZlx4MmZceDJmXHgyZlx4MmYiLAogCQkucmxlbgk9IDE2LAogCX0sCiB9OwpAQCAtNTc3NywxOTYgKzU4MDYsMTk2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYW51YmlzX2VuY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwKLQkJCSAgICAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlIH0sCisJCS5rZXkJPSAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiCisJCQkgICJceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZSIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwKLQkJCSAgICAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlIH0sCisJCS5pbnB1dAk9ICJceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZSIKKwkJCSAgIlx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHg2ZCwgMHhjNSwgMHhkYSwgMHhhMiwgMHgyNiwgMHg3ZCwgMHg2MiwgMHg2ZiwKLQkJCSAgICAweDA4LCAweGI3LCAweDUyLCAweDhlLCAweDZlLCAweDZlLCAweDg2LCAweDkwIH0sCisJCS5yZXN1bHQJPSAiXHg2ZFx4YzVceGRhXHhhMlx4MjZceDdkXHg2Mlx4NmYiCisJCQkgICJceDA4XHhiN1x4NTJceDhlXHg2ZVx4NmVceDg2XHg5MCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewogCi0JCS5rZXkJPSB7IDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCi0JCQkgICAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywKLQkJCSAgICAweDAzLCAweDAzLCAweDAzLCAweDAzIH0sCisJCS5rZXkJPSAiXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzXHgwM1x4MDMiCisJCQkgICJceDAzXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzXHgwMyIKKwkJCSAgIlx4MDNceDAzXHgwM1x4MDMiLAogCQkua2xlbgk9IDIwLAotCQkuaW5wdXQJPSB7IDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCi0JCQkgICAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMyB9LAorCQkuaW5wdXQJPSAiXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzXHgwM1x4MDMiCisJCQkgICJceDAzXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzXHgwMyIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4ZGIsIDB4ZjEsIDB4NDIsIDB4ZjQsIDB4ZDEsIDB4OGEsIDB4YzcsIDB4NDksCi0JCQkgICAgMHg4NywgMHg0MSwgMHg2ZiwgMHg4MiwgMHgwYSwgMHg5OCwgMHg2NCwgMHhhZSB9LAorCQkucmVzdWx0CT0gIlx4ZGJceGYxXHg0Mlx4ZjRceGQxXHg4YVx4YzdceDQ5IgorCQkJICAiXHg4N1x4NDFceDZmXHg4Mlx4MGFceDk4XHg2NFx4YWUiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwKLQkJCSAgICAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LAotCQkJICAgIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsCi0JCQkgICAgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCB9LAorCQkua2V5CT0gIlx4MjRceDI0XHgyNFx4MjRceDI0XHgyNFx4MjRceDI0IgorCQkJICAiXHgyNFx4MjRceDI0XHgyNFx4MjRceDI0XHgyNFx4MjQiCisJCQkgICJceDI0XHgyNFx4MjRceDI0XHgyNFx4MjRceDI0XHgyNCIKKwkJCSAgIlx4MjRceDI0XHgyNFx4MjQiLAogCQkua2xlbgk9IDI4LAotCQkuaW5wdXQJPSB7IDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsCi0JCQkgICAgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCB9LAorCQkuaW5wdXQJPSAiXHgyNFx4MjRceDI0XHgyNFx4MjRceDI0XHgyNFx4MjQiCisJCQkgICJceDI0XHgyNFx4MjRceDI0XHgyNFx4MjRceDI0XHgyNCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4ZmQsIDB4MWIsIDB4NGEsIDB4ZTMsIDB4YmYsIDB4ZjAsIDB4YWQsIDB4M2QsCi0JCQkgICAgMHgwNiwgMHhkMywgMHg2MSwgMHgyNywgMHhmZCwgMHgxMywgMHg5ZSwgMHhkZSB9LAorCQkucmVzdWx0CT0gIlx4ZmRceDFiXHg0YVx4ZTNceGJmXHhmMFx4YWRceDNkIgorCQkJICAiXHgwNlx4ZDNceDYxXHgyN1x4ZmRceDEzXHg5ZVx4ZGUiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwKLQkJCSAgICAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LAotCQkJICAgIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsCi0JCQkgICAgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSB9LAorCQkua2V5CT0gIlx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1IgorCQkJICAiXHgyNVx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjUiCisJCQkgICJceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1XHgyNSIKKwkJCSAgIlx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1IiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LAotCQkJICAgIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUgfSwKKwkJLmlucHV0CT0gIlx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1IgorCQkJICAiXHgyNVx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjUiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDFhLCAweDkxLCAweGZiLCAweDJiLCAweGI3LCAweDc4LCAweDZiLCAweGM0LAotCQkgICAgICAgICAgICAweDE3LCAweGQ5LCAweGZmLCAweDQwLCAweDNiLCAweDBlLCAweGU1LCAweGZlIH0sCisJCS5yZXN1bHQJPSAiXHgxYVx4OTFceGZiXHgyYlx4YjdceDc4XHg2Ylx4YzQiCisJCQkiXHgxN1x4ZDlceGZmXHg0MFx4M2JceDBlXHhlNVx4ZmUiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LAotCQkJICAgIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsCi0JCQkgICAgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1IH0sCisJCS5rZXkJPSAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIKKwkJCSAgIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIsCiAJCS5rbGVuCT0gNDAsCi0JCS5pbnB1dAk9IHsgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1IH0sCisJCS5pbnB1dAk9ICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIKKwkJCSAgIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdCA9IHsgMHhhNSwgMHgyYywgMHg4NSwgMHg2ZiwgMHg5YywgMHhiYSwgMHhhMCwgMHg5NywKLQkJCSAgICAweDllLCAweGM2LCAweDg0LCAweDBmLCAweDE3LCAweDIxLCAweDA3LCAweGVlIH0sCisJCS5yZXN1bHQgPSAiXHhhNVx4MmNceDg1XHg2Zlx4OWNceGJhXHhhMFx4OTciCisJCQkgICJceDllXHhjNlx4ODRceDBmXHgxN1x4MjFceDA3XHhlZSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYW51YmlzX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwKLQkJCSAgICAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlIH0sCisJCS5rZXkJPSAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiCisJCQkgICJceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZSIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg2ZCwgMHhjNSwgMHhkYSwgMHhhMiwgMHgyNiwgMHg3ZCwgMHg2MiwgMHg2ZiwKLQkJCSAgICAweDA4LCAweGI3LCAweDUyLCAweDhlLCAweDZlLCAweDZlLCAweDg2LCAweDkwIH0sCisJCS5pbnB1dAk9ICJceDZkXHhjNVx4ZGFceGEyXHgyNlx4N2RceDYyXHg2ZiIKKwkJCSAgIlx4MDhceGI3XHg1Mlx4OGVceDZlXHg2ZVx4ODZceDkwIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwKLQkJCSAgICAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlIH0sCisJCS5yZXN1bHQJPSAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiCisJCQkgICJceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewogCi0JCS5rZXkJPSB7IDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCi0JCQkgICAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywKLQkJCSAgICAweDAzLCAweDAzLCAweDAzLCAweDAzIH0sCisJCS5rZXkJPSAiXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzXHgwM1x4MDMiCisJCQkgICJceDAzXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzXHgwMyIKKwkJCSAgIlx4MDNceDAzXHgwM1x4MDMiLAogCQkua2xlbgk9IDIwLAotCQkuaW5wdXQJPSB7IDB4ZGIsIDB4ZjEsIDB4NDIsIDB4ZjQsIDB4ZDEsIDB4OGEsIDB4YzcsIDB4NDksCi0JCQkgICAgMHg4NywgMHg0MSwgMHg2ZiwgMHg4MiwgMHgwYSwgMHg5OCwgMHg2NCwgMHhhZSB9LAorCQkuaW5wdXQJPSAiXHhkYlx4ZjFceDQyXHhmNFx4ZDFceDhhXHhjN1x4NDkiCisJCQkgICJceDg3XHg0MVx4NmZceDgyXHgwYVx4OThceDY0XHhhZSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCi0JCQkgICAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMyB9LAorCQkucmVzdWx0CT0gIlx4MDNceDAzXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzIgorCQkJICAiXHgwM1x4MDNceDAzXHgwM1x4MDNceDAzXHgwM1x4MDMiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwKLQkJCSAgICAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LCAweDI0LAotCQkJICAgIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsCi0JCQkgICAgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCB9LAorCQkua2V5CT0gIlx4MjRceDI0XHgyNFx4MjRceDI0XHgyNFx4MjRceDI0IgorCQkJICAiXHgyNFx4MjRceDI0XHgyNFx4MjRceDI0XHgyNFx4MjQiCisJCQkgICJceDI0XHgyNFx4MjRceDI0XHgyNFx4MjRceDI0XHgyNCIKKwkJCSAgIlx4MjRceDI0XHgyNFx4MjQiLAogCQkua2xlbgk9IDI4LAotCQkuaW5wdXQJPSB7IDB4ZmQsIDB4MWIsIDB4NGEsIDB4ZTMsIDB4YmYsIDB4ZjAsIDB4YWQsIDB4M2QsCi0JCQkgICAgMHgwNiwgMHhkMywgMHg2MSwgMHgyNywgMHhmZCwgMHgxMywgMHg5ZSwgMHhkZSB9LAorCQkuaW5wdXQJPSAiXHhmZFx4MWJceDRhXHhlM1x4YmZceGYwXHhhZFx4M2QiCisJCQkgICJceDA2XHhkM1x4NjFceDI3XHhmZFx4MTNceDllXHhkZSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsCi0JCQkgICAgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCB9LAorCQkucmVzdWx0CT0gIlx4MjRceDI0XHgyNFx4MjRceDI0XHgyNFx4MjRceDI0IgorCQkJICAiXHgyNFx4MjRceDI0XHgyNFx4MjRceDI0XHgyNFx4MjQiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwKLQkJCSAgICAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LCAweDI1LAotCQkJICAgIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsCi0JCQkgICAgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSB9LAorCQkua2V5CT0gIlx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1IgorCQkJICAiXHgyNVx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjUiCisJCQkgICJceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1XHgyNSIKKwkJCSAgIlx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1IiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweDFhLCAweDkxLCAweGZiLCAweDJiLCAweGI3LCAweDc4LCAweDZiLCAweGM0LAotCQkgICAgICAgICAgICAweDE3LCAweGQ5LCAweGZmLCAweDQwLCAweDNiLCAweDBlLCAweGU1LCAweGZlIH0sCisJCS5pbnB1dAk9ICJceDFhXHg5MVx4ZmJceDJiXHhiN1x4NzhceDZiXHhjNCIKKwkJCSJceDE3XHhkOVx4ZmZceDQwXHgzYlx4MGVceGU1XHhmZSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsIDB4MjUsCi0JCQkgICAgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSwgMHgyNSB9LAorCQkucmVzdWx0CT0gIlx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjVceDI1IgorCQkJICAiXHgyNVx4MjVceDI1XHgyNVx4MjVceDI1XHgyNVx4MjUiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LAotCQkJICAgIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsCi0JCQkgICAgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1IH0sCi0JCS5pbnB1dCA9IHsgIDB4YTUsIDB4MmMsIDB4ODUsIDB4NmYsIDB4OWMsIDB4YmEsIDB4YTAsIDB4OTcsCi0JCQkgICAgMHg5ZSwgMHhjNiwgMHg4NCwgMHgwZiwgMHgxNywgMHgyMSwgMHgwNywgMHhlZSB9LAorCQkua2V5CT0gIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIKKwkJCSAgIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiLAorCQkuaW5wdXQgPSAiXHhhNVx4MmNceDg1XHg2Zlx4OWNceGJhXHhhMFx4OTciCisJCQkgIlx4OWVceGM2XHg4NFx4MGZceDE3XHgyMVx4MDdceGVlIiwKIAkJLmtsZW4JPSA0MCwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1IH0sCisJCS5yZXN1bHQJPSAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIsCiAJCS5ybGVuCT0gMTYsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYW51YmlzX2NiY19lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkJPSB7IDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsCi0JCQkgICAgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSB9LAorCQkua2V5CT0gIlx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlIgorCQkJICAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsCi0JCQkgICAgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwKLQkJCSAgICAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLAotCQkJICAgIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUgfSwKKwkJLmlucHV0CT0gIlx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlIgorCQkJICAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiCisJCQkgICJceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZSIKKwkJCSAgIlx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHg2ZCwgMHhjNSwgMHhkYSwgMHhhMiwgMHgyNiwgMHg3ZCwgMHg2MiwgMHg2ZiwKLQkJCSAgICAweDA4LCAweGI3LCAweDUyLCAweDhlLCAweDZlLCAweDZlLCAweDg2LCAweDkwLAotCQkJICAgIDB4ODYsIDB4ZDgsIDB4YjUsIDB4NmYsIDB4OTgsIDB4NWUsIDB4OGEsIDB4NjYsCi0JCQkgICAgMHg0ZiwgMHgxZiwgMHg3OCwgMHhhMSwgMHhiYiwgMHgzNywgMHhmMSwgMHhiZSB9LAorCQkucmVzdWx0CT0gIlx4NmRceGM1XHhkYVx4YTJceDI2XHg3ZFx4NjJceDZmIgorCQkJICAiXHgwOFx4YjdceDUyXHg4ZVx4NmVceDZlXHg4Nlx4OTAiCisJCQkgICJceDg2XHhkOFx4YjVceDZmXHg5OFx4NWVceDhhXHg2NiIKKwkJCSAgIlx4NGZceDFmXHg3OFx4YTFceGJiXHgzN1x4ZjFceGJlIiwKIAkJLnJsZW4JPSAzMiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsCi0JCQkgICAgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LAotCQkJICAgIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsCi0JCQkgICAgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSB9LAorCQkua2V5CT0gIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIKKwkJCSAgIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiLAogCQkua2xlbgk9IDQwLAotCQkuaW5wdXQJPSB7IDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsCi0JCQkgICAgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LAotCQkJICAgIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUgfSwKKwkJLmlucHV0CT0gIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIKKwkJCSAgIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdCA9IHsgMHhhNSwgMHgyYywgMHg4NSwgMHg2ZiwgMHg5YywgMHhiYSwgMHhhMCwgMHg5NywKLQkJCSAgICAweDllLCAweGM2LCAweDg0LCAweDBmLCAweDE3LCAweDIxLCAweDA3LCAweGVlLAotCQkJICAgIDB4YTIsIDB4YmMsIDB4MDYsIDB4OTgsIDB4YzYsIDB4NGIsIDB4ZGEsIDB4NzUsCi0JCQkgICAgMHgyZSwgMHhhYSwgMHhiZSwgMHg1OCwgMHhjZSwgMHgwMSwgMHg1YiwgMHhjNyB9LAorCQkucmVzdWx0ID0gIlx4YTVceDJjXHg4NVx4NmZceDljXHhiYVx4YTBceDk3IgorCQkJICAiXHg5ZVx4YzZceDg0XHgwZlx4MTdceDIxXHgwN1x4ZWUiCisJCQkgICJceGEyXHhiY1x4MDZceDk4XHhjNlx4NGJceGRhXHg3NSIKKwkJCSAgIlx4MmVceGFhXHhiZVx4NThceGNlXHgwMVx4NWJceGM3IiwKIAkJLnJsZW4JPSAzMiwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBhbnViaXNfY2JjX2RlY190dl90ZW1wbGF0ZVtdID0gewogCXsKLQkJLmtleQk9IHsgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwKLQkJCSAgICAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlIH0sCisJCS5rZXkJPSAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiCisJCQkgICJceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZSIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg2ZCwgMHhjNSwgMHhkYSwgMHhhMiwgMHgyNiwgMHg3ZCwgMHg2MiwgMHg2ZiwKLQkJCSAgICAweDA4LCAweGI3LCAweDUyLCAweDhlLCAweDZlLCAweDZlLCAweDg2LCAweDkwLAotCQkJICAgIDB4ODYsIDB4ZDgsIDB4YjUsIDB4NmYsIDB4OTgsIDB4NWUsIDB4OGEsIDB4NjYsCi0JCQkgICAgMHg0ZiwgMHgxZiwgMHg3OCwgMHhhMSwgMHhiYiwgMHgzNywgMHhmMSwgMHhiZSB9LAorCQkuaW5wdXQJPSAiXHg2ZFx4YzVceGRhXHhhMlx4MjZceDdkXHg2Mlx4NmYiCisJCQkgICJceDA4XHhiN1x4NTJceDhlXHg2ZVx4NmVceDg2XHg5MCIKKwkJCSAgIlx4ODZceGQ4XHhiNVx4NmZceDk4XHg1ZVx4OGFceDY2IgorCQkJICAiXHg0Zlx4MWZceDc4XHhhMVx4YmJceDM3XHhmMVx4YmUiLAogCQkuaWxlbgk9IDMyLAotCQkucmVzdWx0CT0geyAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLAotCQkJICAgIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4ZmUsCi0JCQkgICAgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwgMHhmZSwKLQkJCSAgICAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlLCAweGZlIH0sCisJCS5yZXN1bHQJPSAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiCisJCQkgICJceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZSIKKwkJCSAgIlx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlIgorCQkJICAiXHhmZVx4ZmVceGZlXHhmZVx4ZmVceGZlXHhmZVx4ZmUiLAogCQkucmxlbgk9IDMyLAogCX0sIHsKLQkJLmtleQk9IHsgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LAotCQkJICAgIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsCi0JCQkgICAgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1IH0sCisJCS5rZXkJPSAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIKKwkJCSAgIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIsCiAJCS5rbGVuCT0gNDAsCi0JCS5pbnB1dCA9IHsgMHhhNSwgMHgyYywgMHg4NSwgMHg2ZiwgMHg5YywgMHhiYSwgMHhhMCwgMHg5NywKLQkJCSAgICAweDllLCAweGM2LCAweDg0LCAweDBmLCAweDE3LCAweDIxLCAweDA3LCAweGVlLAotCQkJICAgIDB4YTIsIDB4YmMsIDB4MDYsIDB4OTgsIDB4YzYsIDB4NGIsIDB4ZGEsIDB4NzUsCi0JCQkgICAgMHgyZSwgMHhhYSwgMHhiZSwgMHg1OCwgMHhjZSwgMHgwMSwgMHg1YiwgMHhjNyB9LAorCQkuaW5wdXQgPSAiXHhhNVx4MmNceDg1XHg2Zlx4OWNceGJhXHhhMFx4OTciCisJCQkgICJceDllXHhjNlx4ODRceDBmXHgxN1x4MjFceDA3XHhlZSIKKwkJCSAgIlx4YTJceGJjXHgwNlx4OThceGM2XHg0Ylx4ZGFceDc1IgorCQkJICAiXHgyZVx4YWFceGJlXHg1OFx4Y2VceDAxXHg1Ylx4YzciLAogCQkuaWxlbgk9IDMyLAotCQkucmVzdWx0CT0geyAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LAotCQkJICAgIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsIDB4MzUsCi0JCQkgICAgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwgMHgzNSwKLQkJCSAgICAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1LCAweDM1IH0sCisJCS5yZXN1bHQJPSAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiCisJCQkgICJceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNSIKKwkJCSAgIlx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzVceDM1IgorCQkJICAiXHgzNVx4MzVceDM1XHgzNVx4MzVceDM1XHgzNVx4MzUiLAogCQkucmxlbgk9IDMyLAogCX0sCiB9OwpAQCAtNTk3OSw4NiArNjAwOCw4NiBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHhldGFfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5ICAgID0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0ICA9IHsgWzAgLi4uIDhdID0gMHgwMCB9LAorCQkuaW5wdXQgID0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweGFhLCAweDIyLCAweDk2LCAweGU1LCAweDZjLCAweDYxLCAweGYzLCAweDQ1IH0sCisJCS5yZXN1bHQJPSAiXHhhYVx4MjJceDk2XHhlNVx4NmNceDYxXHhmM1x4NDUiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDJiLCAweDAyLCAweDA1LCAweDY4LCAweDA2LCAweDE0LCAweDQ5LCAweDc2LAotCQkJICAgIDB4NzcsIDB4NWQsIDB4MGUsIDB4MjYsIDB4NmMsIDB4MjgsIDB4NzgsIDB4NDMgfSwKKwkJLmtleQk9ICJceDJiXHgwMlx4MDVceDY4XHgwNlx4MTRceDQ5XHg3NiIKKwkJCSAgIlx4NzdceDVkXHgwZVx4MjZceDZjXHgyOFx4NzhceDQzIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDc0LCAweDY1LCAweDczLCAweDc0LCAweDIwLCAweDZkLCAweDY1LCAweDJlIH0sCisJCS5pbnB1dAk9ICJceDc0XHg2NVx4NzNceDc0XHgyMFx4NmRceDY1XHgyZSIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHg4MiwgMHgzZSwgMHhlYiwgMHgzNSwgMHhkYywgMHhkZCwgMHhkOSwgMHhjMyB9LAorCQkucmVzdWx0CT0gIlx4ODJceDNlXHhlYlx4MzVceGRjXHhkZFx4ZDlceGMzIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwOSwgMHg2NSwgMHg0MywgMHgxMSwgMHg2NiwgMHg0NCwgMHgzOSwgMHgyNSwKLQkJCSAgICAweDUxLCAweDNhLCAweDE2LCAweDEwLCAweDBhLCAweDA4LCAweDEyLCAweDZlIH0sCisJCS5rZXkJPSAiXHgwOVx4NjVceDQzXHgxMVx4NjZceDQ0XHgzOVx4MjUiCisJCQkgICJceDUxXHgzYVx4MTZceDEwXHgwYVx4MDhceDEyXHg2ZSIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg2YywgMHg2ZiwgMHg2ZSwgMHg2NywgMHg2NSwgMHg3MiwgMHg1ZiwgMHg3NCwgCi0JCQkgICAgMHg2NSwgMHg3MywgMHg3NCwgMHg1ZiwgMHg3NiwgMHg2NSwgMHg2MywgMHg3NCB9LAorCQkuaW5wdXQJPSAiXHg2Y1x4NmZceDZlXHg2N1x4NjVceDcyXHg1Zlx4NzQiCisJCQkgICJceDY1XHg3M1x4NzRceDVmXHg3Nlx4NjVceDYzXHg3NCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4ZTIsIDB4MDQsIDB4ZGIsIDB4ZjIsIDB4ODksIDB4ODUsIDB4OWUsIDB4ZWEsIAotCQkJICAgIDB4NjEsIDB4MzUsIDB4YWEsIDB4ZWQsIDB4YjUsIDB4Y2IsIDB4NzEsIDB4MmMgfSwKKwkJLnJlc3VsdAk9ICJceGUyXHgwNFx4ZGJceGYyXHg4OVx4ODVceDllXHhlYSIKKwkJCSAgIlx4NjFceDM1XHhhYVx4ZWRceGI1XHhjYlx4NzFceDJjIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4NGQsIDB4NzYsIDB4MzIsIDB4MTcsIDB4MDUsIDB4M2YsIDB4NzUsIDB4MmMsCi0JCQkgICAgMHg1ZCwgMHgwNCwgMHgxNiwgMHgzNiwgMHgxNSwgMHg3MiwgMHg2MywgMHgyZiB9LAorCQkua2V5CT0gIlx4NGRceDc2XHgzMlx4MTdceDA1XHgzZlx4NzVceDJjIgorCQkJICAiXHg1ZFx4MDRceDE2XHgzNlx4MTVceDcyXHg2M1x4MmYiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4NTQsIDB4NjUsIDB4NjEsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjcsIAotCQkJICAgIDB4NmYsIDB4NmYsIDB4NjQsIDB4MjAsIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIAotCQkJICAgIDB4NzksIDB4NmYsIDB4NzUsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjAsIDB4NzIsIAotCQkJICAgIDB4NjUsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NzksIDB4MjEsIDB4MjEsIDB4MjEgfSwKKwkJLmlucHV0CT0gIlx4NTRceDY1XHg2MVx4MjBceDY5XHg3M1x4MjBceDY3IgorCQkJICAiXHg2Zlx4NmZceDY0XHgyMFx4NjZceDZmXHg3Mlx4MjAiCisJCQkgICJceDc5XHg2Zlx4NzVceDIxXHgyMVx4MjFceDIwXHg3MiIKKwkJCSAgIlx4NjVceDYxXHg2Y1x4NmNceDc5XHgyMVx4MjFceDIxIiwKIAkJLmlsZW4JPSAzMiwKLQkJLnJlc3VsdAk9IHsgMHgwYiwgMHgwMywgMHhjZCwgMHg4YSwgMHhiZSwgMHg5NSwgMHhmZCwgMHhiMSwgCi0JCQkgICAgMHhjMSwgMHg0NCwgMHg5MSwgMHgwYiwgMHhhNSwgMHhjOSwgMHgxYiwgMHhiNCwgCi0JCQkgICAgMHhhOSwgMHhkYSwgMHgxZSwgMHg5ZSwgMHhiMSwgMHgzZSwgMHgyYSwgMHg4ZiwgCi0JCQkgICAgMHhlYSwgMHhhNSwgMHg2YSwgMHg4NSwgMHhkMSwgMHhmNCwgMHhhOCwgMHhhNSB9LAorCQkucmVzdWx0CT0gIlx4MGJceDAzXHhjZFx4OGFceGJlXHg5NVx4ZmRceGIxIgorCQkJICAiXHhjMVx4NDRceDkxXHgwYlx4YTVceGM5XHgxYlx4YjQiCisJCQkgICJceGE5XHhkYVx4MWVceDllXHhiMVx4M2VceDJhXHg4ZiIKKwkJCSAgIlx4ZWFceGE1XHg2YVx4ODVceGQxXHhmNFx4YThceGE1IiwKIAkJLnJsZW4JPSAzMiwKIAl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHhldGFfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5ICAgID0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweGFhLCAweDIyLCAweDk2LCAweGU1LCAweDZjLCAweDYxLCAweGYzLCAweDQ1IH0sCisJCS5pbnB1dAk9ICJceGFhXHgyMlx4OTZceGU1XHg2Y1x4NjFceGYzXHg0NSIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdCA9IHsgWzAgLi4uIDhdID0gMHgwMCB9LAorCQkucmVzdWx0ID0gemVyb2VkX3N0cmluZywKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgyYiwgMHgwMiwgMHgwNSwgMHg2OCwgMHgwNiwgMHgxNCwgMHg0OSwgMHg3NiwKLQkJCSAgICAweDc3LCAweDVkLCAweDBlLCAweDI2LCAweDZjLCAweDI4LCAweDc4LCAweDQzIH0sCisJCS5rZXkJPSAiXHgyYlx4MDJceDA1XHg2OFx4MDZceDE0XHg0OVx4NzYiCisJCQkgICJceDc3XHg1ZFx4MGVceDI2XHg2Y1x4MjhceDc4XHg0MyIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHg4MiwgMHgzZSwgMHhlYiwgMHgzNSwgMHhkYywgMHhkZCwgMHhkOSwgMHhjMyB9LAorCQkuaW5wdXQJPSAiXHg4Mlx4M2VceGViXHgzNVx4ZGNceGRkXHhkOVx4YzMiLAogCQkuaWxlbgk9IDgsCi0JCS5yZXN1bHQJPSB7IDB4NzQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NmQsIDB4NjUsIDB4MmUgfSwKKwkJLnJlc3VsdAk9ICJceDc0XHg2NVx4NzNceDc0XHgyMFx4NmRceDY1XHgyZSIsCiAJCS5ybGVuCT0gOCwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MDksIDB4NjUsIDB4NDMsIDB4MTEsIDB4NjYsIDB4NDQsIDB4MzksIDB4MjUsCi0JCQkgICAgMHg1MSwgMHgzYSwgMHgxNiwgMHgxMCwgMHgwYSwgMHgwOCwgMHgxMiwgMHg2ZSB9LAorCQkua2V5CT0gIlx4MDlceDY1XHg0M1x4MTFceDY2XHg0NFx4MzlceDI1IgorCQkJICAiXHg1MVx4M2FceDE2XHgxMFx4MGFceDA4XHgxMlx4NmUiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4ZTIsIDB4MDQsIDB4ZGIsIDB4ZjIsIDB4ODksIDB4ODUsIDB4OWUsIDB4ZWEsIAotCQkJICAgIDB4NjEsIDB4MzUsIDB4YWEsIDB4ZWQsIDB4YjUsIDB4Y2IsIDB4NzEsIDB4MmMgfSwKKwkJLmlucHV0CT0gIlx4ZTJceDA0XHhkYlx4ZjJceDg5XHg4NVx4OWVceGVhIgorCQkJICAiXHg2MVx4MzVceGFhXHhlZFx4YjVceGNiXHg3MVx4MmMiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDZjLCAweDZmLCAweDZlLCAweDY3LCAweDY1LCAweDcyLCAweDVmLCAweDc0LCAKLQkJCSAgICAweDY1LCAweDczLCAweDc0LCAweDVmLCAweDc2LCAweDY1LCAweDYzLCAweDc0IH0sCisJCS5yZXN1bHQJPSAiXHg2Y1x4NmZceDZlXHg2N1x4NjVceDcyXHg1Zlx4NzQiCisJCQkgICJceDY1XHg3M1x4NzRceDVmXHg3Nlx4NjVceDYzXHg3NCIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDRkLCAweDc2LCAweDMyLCAweDE3LCAweDA1LCAweDNmLCAweDc1LCAweDJjLAotCQkJICAgIDB4NWQsIDB4MDQsIDB4MTYsIDB4MzYsIDB4MTUsIDB4NzIsIDB4NjMsIDB4MmYgfSwKKwkJLmtleQk9ICJceDRkXHg3Nlx4MzJceDE3XHgwNVx4M2ZceDc1XHgyYyIKKwkJCSAgIlx4NWRceDA0XHgxNlx4MzZceDE1XHg3Mlx4NjNceDJmIiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDBiLCAweDAzLCAweGNkLCAweDhhLCAweGJlLCAweDk1LCAweGZkLCAweGIxLCAKLQkJCSAgICAweGMxLCAweDQ0LCAweDkxLCAweDBiLCAweGE1LCAweGM5LCAweDFiLCAweGI0LCAKLQkJCSAgICAweGE5LCAweGRhLCAweDFlLCAweDllLCAweGIxLCAweDNlLCAweDJhLCAweDhmLCAKLQkJCSAgICAweGVhLCAweGE1LCAweDZhLCAweDg1LCAweGQxLCAweGY0LCAweGE4LCAweGE1IH0sCisJCS5pbnB1dAk9ICJceDBiXHgwM1x4Y2RceDhhXHhiZVx4OTVceGZkXHhiMSIKKwkJCSAgIlx4YzFceDQ0XHg5MVx4MGJceGE1XHhjOVx4MWJceGI0IgorCQkJICAiXHhhOVx4ZGFceDFlXHg5ZVx4YjFceDNlXHgyYVx4OGYiCisJCQkgICJceGVhXHhhNVx4NmFceDg1XHhkMVx4ZjRceGE4XHhhNSIsCiAJCS5pbGVuCT0gMzIsCi0JCS5yZXN1bHQJPSB7IDB4NTQsIDB4NjUsIDB4NjEsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjcsIAotCQkJICAgIDB4NmYsIDB4NmYsIDB4NjQsIDB4MjAsIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIAotCQkJICAgIDB4NzksIDB4NmYsIDB4NzUsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjAsIDB4NzIsIAotCQkJICAgIDB4NjUsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NzksIDB4MjEsIDB4MjEsIDB4MjEgfSwKKwkJLnJlc3VsdAk9ICJceDU0XHg2NVx4NjFceDIwXHg2OVx4NzNceDIwXHg2NyIKKwkJCSAgIlx4NmZceDZmXHg2NFx4MjBceDY2XHg2Zlx4NzJceDIwIgorCQkJICAiXHg3OVx4NmZceDc1XHgyMVx4MjFceDIxXHgyMFx4NzIiCisJCQkgICJceDY1XHg2MVx4NmNceDZjXHg3OVx4MjFceDIxXHgyMSIsCiAJCS5ybGVuCT0gMzIsCiAJfQogfTsKQEAgLTYwNzEsNTkgKzYxMDAsNTkgQEAKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBmY3J5cHRfcGNiY19lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIGh0dHA6Ly93d3cub3BlbmFmcy5vcmcvcGlwZXJtYWlsL29wZW5hZnMtZGV2ZWwvMjAwMC1EZWNlbWJlci8wMDUzMjAuaHRtbCAqLwotCQkua2V5CT0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5rZXkJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAogCQkua2xlbgk9IDgsCi0JCS5pdgk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLml2CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweDBFLCAweDA5LCAweDAwLCAweEM3LCAweDNFLCAweEY3LCAweEVELCAweDQxIH0sCisJCS5yZXN1bHQJPSAiXHgwRVx4MDlceDAwXHhDN1x4M0VceEY3XHhFRFx4NDEiLAogCQkucmxlbgk9IDgsCiAJfSwgewotCQkua2V5CT0geyAweDExLCAweDQ0LCAweDc3LCAweEFBLCAweERELCAweDAwLCAweDMzLCAweDY2IH0sCisJCS5rZXkJPSAiXHgxMVx4NDRceDc3XHhBQVx4RERceDAwXHgzM1x4NjYiLAogCQkua2xlbgk9IDgsCi0JCS5pdgk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQJPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OUEsIDB4QkMsIDB4REUsIDB4RjAgfSwKKwkJLml2CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0CT0gIlx4MTJceDM0XHg1Nlx4NzhceDlBXHhCQ1x4REVceEYwIiwKIAkJLmlsZW4JPSA4LAotCQkucmVzdWx0CT0geyAweEQ4LCAweEVELCAweDc4LCAweDc0LCAweDc3LCAweEVDLCAweDA2LCAweDgwIH0sCisJCS5yZXN1bHQJPSAiXHhEOFx4RURceDc4XHg3NFx4NzdceEVDXHgwNlx4ODAiLAogCQkucmxlbgk9IDgsCiAJfSwgeyAvKiBGcm9tIEFybGEgKi8KLQkJLmtleQk9IHsgMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NyB9LAorCQkua2V5CT0gIlx4ZjBceGUxXHhkMlx4YzNceGI0XHhhNVx4OTZceDg3IiwKIAkJLmtsZW4JPSA4LAotCQkuaXYJPSB7IDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLml2CT0gIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKIAkJLmlucHV0CT0gIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2dzLlwwXDAiLAogCQkuaWxlbgk9IDQ4LAotCQkucmVzdWx0CT0geyAweDAwLCAweGYwLCAweGUsICAweDExLCAweDc1LCAweGU2LCAweDIzLCAweDgyLAotCQkJICAgIDB4ZWUsIDB4YWMsIDB4OTgsIDB4NjIsIDB4NDQsIDB4NTEsIDB4ZTQsIDB4ODQsCi0JCQkgICAgMHhjMywgMHg1OSwgMHhkOCwgMHhhYSwgMHg2NCwgMHg2MCwgMHhhZSwgMHhmNywKLQkJCSAgICAweGQyLCAweGQ5LCAweDEzLCAweDc5LCAweDcyLCAweGEzLCAweDQ1LCAweDAzLAotCQkJICAgIDB4MjMsIDB4YjUsIDB4NjIsIDB4ZDcsIDB4MGMsIDB4ZjUsIDB4MjcsIDB4ZDEsCi0JCQkgICAgMHhmOCwgMHg5MSwgMHgzYywgMHhhYywgMHg0NCwgMHgyMiwgMHg5MiwgMHhlZiB9LAorCQkucmVzdWx0CT0gIlx4MDBceGYwXHgwZVx4MTFceDc1XHhlNlx4MjNceDgyIgorCQkJICAiXHhlZVx4YWNceDk4XHg2Mlx4NDRceDUxXHhlNFx4ODQiCisJCQkgICJceGMzXHg1OVx4ZDhceGFhXHg2NFx4NjBceGFlXHhmNyIKKwkJCSAgIlx4ZDJceGQ5XHgxM1x4NzlceDcyXHhhM1x4NDVceDAzIgorCQkJICAiXHgyM1x4YjVceDYyXHhkN1x4MGNceGY1XHgyN1x4ZDEiCisJCQkgICJceGY4XHg5MVx4M2NceGFjXHg0NFx4MjJceDkyXHhlZiIsCiAJCS5ybGVuCT0gNDgsCiAJfSwgewotCQkua2V5CT0geyAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwIH0sCisJCS5rZXkJPSAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkua2xlbgk9IDgsCi0JCS5pdgk9IHsgMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NyB9LAorCQkuaXYJPSAiXHhmMFx4ZTFceGQyXHhjM1x4YjRceGE1XHg5Nlx4ODciLAogCQkuaW5wdXQJPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZ3MuXDBcMCIsCiAJCS5pbGVuCT0gNDgsCi0JCS5yZXN1bHQJPSB7IDB4Y2EsIDB4OTAsIDB4ZjUsIDB4OWQsIDB4Y2IsIDB4ZDQsIDB4ZDIsIDB4M2MsCi0JCQkgICAgMHgwMSwgMHg4OCwgMHg3ZiwgMHgzZSwgMHgzMSwgMHg2ZSwgMHg2MiwgMHg5ZCwKLQkJCSAgICAweGQ4LCAweGUwLCAweDU3LCAweGEzLCAweDA2LCAweDNhLCAweDQyLCAweDU4LAotCQkJICAgIDB4MmEsIDB4MjgsIDB4ZmUsIDB4NzIsIDB4NTIsIDB4MmYsIDB4ZGQsIDB4ZTAsCi0JCQkgICAgMHgxOSwgMHg4OSwgMHgwOSwgMHgxYywgMHgyYSwgMHg4ZSwgMHg4YywgMHg5NCwKLQkJCSAgICAweGZjLCAweGM3LCAweDY4LCAweGU0LCAweDg4LCAweGFhLCAweGRlLCAweDBmIH0sCisJCS5yZXN1bHQJPSAiXHhjYVx4OTBceGY1XHg5ZFx4Y2JceGQ0XHhkMlx4M2MiCisJCQkgICJceDAxXHg4OFx4N2ZceDNlXHgzMVx4NmVceDYyXHg5ZCIKKwkJCSAgIlx4ZDhceGUwXHg1N1x4YTNceDA2XHgzYVx4NDJceDU4IgorCQkJICAiXHgyYVx4MjhceGZlXHg3Mlx4NTJceDJmXHhkZFx4ZTAiCisJCQkgICJceDE5XHg4OVx4MDlceDFjXHgyYVx4OGVceDhjXHg5NCIKKwkJCSAgIlx4ZmNceGM3XHg2OFx4ZTRceDg4XHhhYVx4ZGVceDBmIiwKIAkJLnJsZW4JPSA0OCwKIAl9LCB7IC8qIHNwbGl0LXBhZ2UgdmVyc2lvbiAqLwotCQkua2V5CT0geyAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwIH0sCisJCS5rZXkJPSAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkua2xlbgk9IDgsCi0JCS5pdgk9IHsgMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NyB9LAorCQkuaXYJPSAiXHhmMFx4ZTFceGQyXHhjM1x4YjRceGE1XHg5Nlx4ODciLAogCQkuaW5wdXQJPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZ3MuXDBcMCIsCiAJCS5pbGVuCT0gNDgsCi0JCS5yZXN1bHQJPSB7IDB4Y2EsIDB4OTAsIDB4ZjUsIDB4OWQsIDB4Y2IsIDB4ZDQsIDB4ZDIsIDB4M2MsCi0JCQkgICAgMHgwMSwgMHg4OCwgMHg3ZiwgMHgzZSwgMHgzMSwgMHg2ZSwgMHg2MiwgMHg5ZCwKLQkJCSAgICAweGQ4LCAweGUwLCAweDU3LCAweGEzLCAweDA2LCAweDNhLCAweDQyLCAweDU4LAotCQkJICAgIDB4MmEsIDB4MjgsIDB4ZmUsIDB4NzIsIDB4NTIsIDB4MmYsIDB4ZGQsIDB4ZTAsCi0JCQkgICAgMHgxOSwgMHg4OSwgMHgwOSwgMHgxYywgMHgyYSwgMHg4ZSwgMHg4YywgMHg5NCwKLQkJCSAgICAweGZjLCAweGM3LCAweDY4LCAweGU0LCAweDg4LCAweGFhLCAweGRlLCAweDBmIH0sCisJCS5yZXN1bHQJPSAiXHhjYVx4OTBceGY1XHg5ZFx4Y2JceGQ0XHhkMlx4M2MiCisJCQkgICJceDAxXHg4OFx4N2ZceDNlXHgzMVx4NmVceDYyXHg5ZCIKKwkJCSAgIlx4ZDhceGUwXHg1N1x4YTNceDA2XHgzYVx4NDJceDU4IgorCQkJICAiXHgyYVx4MjhceGZlXHg3Mlx4NTJceDJmXHhkZFx4ZTAiCisJCQkgICJceDE5XHg4OVx4MDlceDFjXHgyYVx4OGVceDhjXHg5NCIKKwkJCSAgIlx4ZmNceGM3XHg2OFx4ZTRceDg4XHhhYVx4ZGVceDBmIiwKIAkJLnJsZW4JPSA0OCwKIAkJLm5wCT0gMiwKIAkJLnRhcAk9IHsgMjAsIDI4IH0sCkBAIC02MTMyLDU3ICs2MTYxLDU3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgZmNyeXB0X3BjYmNfZGVjX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBodHRwOi8vd3d3Lm9wZW5hZnMub3JnL3BpcGVybWFpbC9vcGVuYWZzLWRldmVsLzIwMDAtRGVjZW1iZXIvMDA1MzIwLmh0bWwgKi8KLQkJLmtleQk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkua2V5CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmtsZW4JPSA4LAotCQkuaXYJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKLQkJLmlucHV0CT0geyAweDBFLCAweDA5LCAweDAwLCAweEM3LCAweDNFLCAweEY3LCAweEVELCAweDQxIH0sCisJCS5pdgk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dAk9ICJceDBFXHgwOVx4MDBceEM3XHgzRVx4RjdceEVEXHg0MSIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCQkucmVzdWx0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsKLQkJLmtleQk9IHsgMHgxMSwgMHg0NCwgMHg3NywgMHhBQSwgMHhERCwgMHgwMCwgMHgzMywgMHg2NiB9LAorCQkua2V5CT0gIlx4MTFceDQ0XHg3N1x4QUFceEREXHgwMFx4MzNceDY2IiwKIAkJLmtsZW4JPSA4LAotCQkuaXYJPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKLQkJLmlucHV0CT0geyAweEQ4LCAweEVELCAweDc4LCAweDc0LCAweDc3LCAweEVDLCAweDA2LCAweDgwIH0sCisJCS5pdgk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dAk9ICJceEQ4XHhFRFx4NzhceDc0XHg3N1x4RUNceDA2XHg4MCIsCiAJCS5pbGVuCT0gOCwKLQkJLnJlc3VsdAk9IHsgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5QSwgMHhCQywgMHhERSwgMHhGMCB9LAorCQkucmVzdWx0CT0gIlx4MTJceDM0XHg1Nlx4NzhceDlBXHhCQ1x4REVceEYwIiwKIAkJLnJsZW4JPSA4LAogCX0sIHsgLyogRnJvbSBBcmxhICovCi0JCS5rZXkJPSB7IDB4ZjAsIDB4ZTEsIDB4ZDIsIDB4YzMsIDB4YjQsIDB4YTUsIDB4OTYsIDB4ODcgfSwKKwkJLmtleQk9ICJceGYwXHhlMVx4ZDJceGMzXHhiNFx4YTVceDk2XHg4NyIsCiAJCS5rbGVuCT0gOCwKLQkJLml2CT0geyAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwIH0sCi0JCS5pbnB1dAk9IHsgMHgwMCwgMHhmMCwgMHhlLCAgMHgxMSwgMHg3NSwgMHhlNiwgMHgyMywgMHg4MiwKLQkJCSAgICAweGVlLCAweGFjLCAweDk4LCAweDYyLCAweDQ0LCAweDUxLCAweGU0LCAweDg0LAotCQkJICAgIDB4YzMsIDB4NTksIDB4ZDgsIDB4YWEsIDB4NjQsIDB4NjAsIDB4YWUsIDB4ZjcsCi0JCQkgICAgMHhkMiwgMHhkOSwgMHgxMywgMHg3OSwgMHg3MiwgMHhhMywgMHg0NSwgMHgwMywKLQkJCSAgICAweDIzLCAweGI1LCAweDYyLCAweGQ3LCAweDBjLCAweGY1LCAweDI3LCAweGQxLAotCQkJICAgIDB4ZjgsIDB4OTEsIDB4M2MsIDB4YWMsIDB4NDQsIDB4MjIsIDB4OTIsIDB4ZWYgfSwKKwkJLml2CT0gIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKKwkJLmlucHV0CT0gIlx4MDBceGYwXHgwZVx4MTFceDc1XHhlNlx4MjNceDgyIgorCQkJICAiXHhlZVx4YWNceDk4XHg2Mlx4NDRceDUxXHhlNFx4ODQiCisJCQkgICJceGMzXHg1OVx4ZDhceGFhXHg2NFx4NjBceGFlXHhmNyIKKwkJCSAgIlx4ZDJceGQ5XHgxM1x4NzlceDcyXHhhM1x4NDVceDAzIgorCQkJICAiXHgyM1x4YjVceDYyXHhkN1x4MGNceGY1XHgyN1x4ZDEiCisJCQkgICJceGY4XHg5MVx4M2NceGFjXHg0NFx4MjJceDkyXHhlZiIsCiAJCS5pbGVuCT0gNDgsCiAJCS5yZXN1bHQJPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZ3MuXDBcMCIsCiAJCS5ybGVuCT0gNDgsCiAJfSwgewotCQkua2V5CT0geyAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwIH0sCisJCS5rZXkJPSAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkua2xlbgk9IDgsCi0JCS5pdgk9IHsgMHhmMCwgMHhlMSwgMHhkMiwgMHhjMywgMHhiNCwgMHhhNSwgMHg5NiwgMHg4NyB9LAotCQkuaW5wdXQJPSB7IDB4Y2EsIDB4OTAsIDB4ZjUsIDB4OWQsIDB4Y2IsIDB4ZDQsIDB4ZDIsIDB4M2MsCi0JCQkgICAgMHgwMSwgMHg4OCwgMHg3ZiwgMHgzZSwgMHgzMSwgMHg2ZSwgMHg2MiwgMHg5ZCwKLQkJCSAgICAweGQ4LCAweGUwLCAweDU3LCAweGEzLCAweDA2LCAweDNhLCAweDQyLCAweDU4LAotCQkJICAgIDB4MmEsIDB4MjgsIDB4ZmUsIDB4NzIsIDB4NTIsIDB4MmYsIDB4ZGQsIDB4ZTAsCi0JCQkgICAgMHgxOSwgMHg4OSwgMHgwOSwgMHgxYywgMHgyYSwgMHg4ZSwgMHg4YywgMHg5NCwKLQkJCSAgICAweGZjLCAweGM3LCAweDY4LCAweGU0LCAweDg4LCAweGFhLCAweGRlLCAweDBmIH0sCisJCS5pdgk9ICJceGYwXHhlMVx4ZDJceGMzXHhiNFx4YTVceDk2XHg4NyIsCisJCS5pbnB1dAk9ICJceGNhXHg5MFx4ZjVceDlkXHhjYlx4ZDRceGQyXHgzYyIKKwkJCSAgIlx4MDFceDg4XHg3Zlx4M2VceDMxXHg2ZVx4NjJceDlkIgorCQkJICAiXHhkOFx4ZTBceDU3XHhhM1x4MDZceDNhXHg0Mlx4NTgiCisJCQkgICJceDJhXHgyOFx4ZmVceDcyXHg1Mlx4MmZceGRkXHhlMCIKKwkJCSAgIlx4MTlceDg5XHgwOVx4MWNceDJhXHg4ZVx4OGNceDk0IgorCQkJICAiXHhmY1x4YzdceDY4XHhlNFx4ODhceGFhXHhkZVx4MGYiLAogCQkuaWxlbgk9IDQ4LAogCQkucmVzdWx0CT0gIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2dzLlwwXDAiLAogCQkucmxlbgk9IDQ4LAogCX0sIHsgLyogc3BsaXQtcGFnZSB2ZXJzaW9uICovCi0JCS5rZXkJPSB7IDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLmtleQk9ICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIsCiAJCS5rbGVuCT0gOCwKLQkJLml2CT0geyAweGYwLCAweGUxLCAweGQyLCAweGMzLCAweGI0LCAweGE1LCAweDk2LCAweDg3IH0sCi0JCS5pbnB1dAk9IHsgMHhjYSwgMHg5MCwgMHhmNSwgMHg5ZCwgMHhjYiwgMHhkNCwgMHhkMiwgMHgzYywKLQkJCSAgICAweDAxLCAweDg4LCAweDdmLCAweDNlLCAweDMxLCAweDZlLCAweDYyLCAweDlkLAotCQkJICAgIDB4ZDgsIDB4ZTAsIDB4NTcsIDB4YTMsIDB4MDYsIDB4M2EsIDB4NDIsIDB4NTgsCi0JCQkgICAgMHgyYSwgMHgyOCwgMHhmZSwgMHg3MiwgMHg1MiwgMHgyZiwgMHhkZCwgMHhlMCwKLQkJCSAgICAweDE5LCAweDg5LCAweDA5LCAweDFjLCAweDJhLCAweDhlLCAweDhjLCAweDk0LAotCQkJICAgIDB4ZmMsIDB4YzcsIDB4NjgsIDB4ZTQsIDB4ODgsIDB4YWEsIDB4ZGUsIDB4MGYgfSwKKwkJLml2CT0gIlx4ZjBceGUxXHhkMlx4YzNceGI0XHhhNVx4OTZceDg3IiwKKwkJLmlucHV0CT0gIlx4Y2FceDkwXHhmNVx4OWRceGNiXHhkNFx4ZDJceDNjIgorCQkJICAiXHgwMVx4ODhceDdmXHgzZVx4MzFceDZlXHg2Mlx4OWQiCisJCQkgICJceGQ4XHhlMFx4NTdceGEzXHgwNlx4M2FceDQyXHg1OCIKKwkJCSAgIlx4MmFceDI4XHhmZVx4NzJceDUyXHgyZlx4ZGRceGUwIgorCQkJICAiXHgxOVx4ODlceDA5XHgxY1x4MmFceDhlXHg4Y1x4OTQiCisJCQkgICJceGZjXHhjN1x4NjhceGU0XHg4OFx4YWFceGRlXHgwZiIsCiAJCS5pbGVuCT0gNDgsCiAJCS5yZXN1bHQJPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZ3MuXDBcMCIsCiAJCS5ybGVuCT0gNDgsCkBAIC02MjAxLDEzNiArNjIzMCwxMzYgQEAKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBjYW1lbGxpYV9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0JCQkgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0JCQkgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkuaW5wdXQJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisJCQkgICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4NjcsIDB4NjcsIDB4MzEsIDB4MzgsIDB4NTQsIDB4OTYsIDB4NjksIDB4NzMsCi0JCQkgICAgMHgwOCwgMHg1NywgMHgwNiwgMHg1NiwgMHg0OCwgMHhlYSwgMHhiZSwgMHg0MyB9LAorCQkucmVzdWx0CT0gIlx4NjdceDY3XHgzMVx4MzhceDU0XHg5Nlx4NjlceDczIgorCQkJICAiXHgwOFx4NTdceDA2XHg1Nlx4NDhceGVhXHhiZVx4NDMiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLQkJCSAgICAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAotCQkJICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIKKwkJCSAgIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIgorCQkJICAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzciLAogCQkua2xlbgk9IDI0LAotCQkuaW5wdXQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0JCQkgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkuaW5wdXQJPSAiXHgwMVx4MjNceDQ1XHg2N1x4ODlceGFiXHhjZFx4ZWYiCisJCQkgICJceGZlXHhkY1x4YmFceDk4XHg3Nlx4NTRceDMyXHgxMCIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4YjQsIDB4OTksIDB4MzQsIDB4MDEsIDB4YjMsIDB4ZTksIDB4OTYsIDB4ZjgsCi0JCQkgICAgMHg0ZSwgMHhlNSwgMHhjZSwgMHhlNywgMHhkNywgMHg5YiwgMHgwOSwgMHhiOSB9LAorCQkucmVzdWx0CT0gIlx4YjRceDk5XHgzNFx4MDFceGIzXHhlOVx4OTZceGY4IgorCQkJICAiXHg0ZVx4ZTVceGNlXHhlN1x4ZDdceDliXHgwOVx4YjkiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLQkJCSAgICAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAotCQkJICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCi0JCQkgICAgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiCisJCQkgICJceDAwXHgxMVx4MjJceDMzXHg0NFx4NTVceDY2XHg3NyIKKwkJCSAgIlx4ODhceDk5XHhhYVx4YmJceGNjXHhkZFx4ZWVceGZmIiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotCQkJICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLmlucHV0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDlhLCAweGNjLCAweDIzLCAweDdkLCAweGZmLCAweDE2LCAweGQ3LCAweDZjLAotCQkJICAgIDB4MjAsIDB4ZWYsIDB4N2MsIDB4OTEsIDB4OWUsIDB4M2EsIDB4NzUsIDB4MDkgfSwKKwkJLnJlc3VsdAk9ICJceDlhXHhjY1x4MjNceDdkXHhmZlx4MTZceGQ3XHg2YyIKKwkJCSAgIlx4MjBceGVmXHg3Y1x4OTFceDllXHgzYVx4NzVceDA5IiwKIAkJLnJsZW4JPSAxNiwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBjYW1lbGxpYV9kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0JCQkgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4NjcsIDB4NjcsIDB4MzEsIDB4MzgsIDB4NTQsIDB4OTYsIDB4NjksIDB4NzMsCi0JCQkgICAgMHgwOCwgMHg1NywgMHgwNiwgMHg1NiwgMHg0OCwgMHhlYSwgMHhiZSwgMHg0MyB9LAorCQkuaW5wdXQJPSAiXHg2N1x4NjdceDMxXHgzOFx4NTRceDk2XHg2OVx4NzMiCisJCQkgICJceDA4XHg1N1x4MDZceDU2XHg0OFx4ZWFceGJlXHg0MyIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0JCQkgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkucmVzdWx0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLQkJCSAgICAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAotCQkJICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcgfSwKKwkJLmtleQk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIKKwkJCSAgIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIgorCQkJICAiXHgwMFx4MTFceDIyXHgzM1x4NDRceDU1XHg2Nlx4NzciLAogCQkua2xlbgk9IDI0LAotCQkuaW5wdXQJPSB7IDB4YjQsIDB4OTksIDB4MzQsIDB4MDEsIDB4YjMsIDB4ZTksIDB4OTYsIDB4ZjgsCi0JCQkgICAgMHg0ZSwgMHhlNSwgMHhjZSwgMHhlNywgMHhkNywgMHg5YiwgMHgwOSwgMHhiOSB9LAorCQkuaW5wdXQJPSAiXHhiNFx4OTlceDM0XHgwMVx4YjNceGU5XHg5Nlx4ZjgiCisJCQkgICJceDRlXHhlNVx4Y2VceGU3XHhkN1x4OWJceDA5XHhiOSIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCi0JCQkgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorCQkucmVzdWx0CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKLQkJCSAgICAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAotCQkJICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCi0JCQkgICAgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZiB9LAorCQkua2V5CT0gIlx4MDFceDIzXHg0NVx4NjdceDg5XHhhYlx4Y2RceGVmIgorCQkJICAiXHhmZVx4ZGNceGJhXHg5OFx4NzZceDU0XHgzMlx4MTAiCisJCQkgICJceDAwXHgxMVx4MjJceDMzXHg0NFx4NTVceDY2XHg3NyIKKwkJCSAgIlx4ODhceDk5XHhhYVx4YmJceGNjXHhkZFx4ZWVceGZmIiwKIAkJLmtsZW4JPSAzMiwKLQkJLmlucHV0CT0geyAweDlhLCAweGNjLCAweDIzLCAweDdkLCAweGZmLCAweDE2LCAweGQ3LCAweDZjLAotCQkJICAgIDB4MjAsIDB4ZWYsIDB4N2MsIDB4OTEsIDB4OWUsIDB4M2EsIDB4NzUsIDB4MDkgfSwKKwkJLmlucHV0CT0gIlx4OWFceGNjXHgyM1x4N2RceGZmXHgxNlx4ZDdceDZjIgorCQkJICAiXHgyMFx4ZWZceDdjXHg5MVx4OWVceDNhXHg3NVx4MDkiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotCQkJICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAgfSwKKwkJLnJlc3VsdAk9ICJceDAxXHgyM1x4NDVceDY3XHg4OVx4YWJceGNkXHhlZiIKKwkJCSAgIlx4ZmVceGRjXHhiYVx4OThceDc2XHg1NFx4MzJceDEwIiwKIAkJLnJsZW4JPSAxNiwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBjYW1lbGxpYV9jYmNfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5ICAgID0geyAweDA2LCAweGE5LCAweDIxLCAweDQwLCAweDM2LCAweGI4LCAweGExLCAweDViLAotCQkJICAgIDB4NTEsIDB4MmUsIDB4MDMsIDB4ZDUsIDB4MzQsIDB4MTIsIDB4MDAsIDB4MDYgfSwKKwkJLmtleSAgICA9ICJceDA2XHhhOVx4MjFceDQwXHgzNlx4YjhceGExXHg1YiIKKwkJCSAgIlx4NTFceDJlXHgwM1x4ZDVceDM0XHgxMlx4MDBceDA2IiwKIAkJLmtsZW4gICA9IDE2LAotCQkuaXYJPSB7IDB4M2QsIDB4YWYsIDB4YmEsIDB4NDIsIDB4OWQsIDB4OWUsIDB4YjQsIDB4MzAsCi0JCQkgICAgMHhiNCwgMHgyMiwgMHhkYSwgMHg4MCwgMHgyYywgMHg5ZiwgMHhhYywgMHg0MSB9LAotCQkuaW5wdXQJPSB7ICJTaW5nbGUgYmxvY2sgbXNnIiB9LAorCQkuaXYJPSAiXHgzZFx4YWZceGJhXHg0Mlx4OWRceDllXHhiNFx4MzAiCisJCQkgICJceGI0XHgyMlx4ZGFceDgwXHgyY1x4OWZceGFjXHg0MSIsCisJCS5pbnB1dAk9ICJTaW5nbGUgYmxvY2sgbXNnIiwKIAkJLmlsZW4gICA9IDE2LAotCQkucmVzdWx0ID0geyAweGVhLCAweDMyLCAweDEyLCAweDc2LCAweDNiLCAweDUwLCAweDEwLCAweGU3LAotCQkJICAgIDB4MTgsIDB4ZjYsIDB4ZmQsIDB4NWQsIDB4ZjYsIDB4OGYsIDB4MTMsIDB4NTEgfSwKKwkJLnJlc3VsdCA9ICJceGVhXHgzMlx4MTJceDc2XHgzYlx4NTBceDEwXHhlNyIKKwkJCSAgIlx4MThceGY2XHhmZFx4NWRceGY2XHg4Zlx4MTNceDUxIiwKIAkJLnJsZW4gICA9IDE2LAogCX0sIHsKLQkJLmtleSAgICA9IHsgMHhjMiwgMHg4NiwgMHg2OSwgMHg2ZCwgMHg4OCwgMHg3YywgMHg5YSwgMHhhMCwKLQkJCSAgICAweDYxLCAweDFiLCAweGJiLCAweDNlLCAweDIwLCAweDI1LCAweGE0LCAweDVhIH0sCisJCS5rZXkgICAgPSAiXHhjMlx4ODZceDY5XHg2ZFx4ODhceDdjXHg5YVx4YTAiCisJCQkgICJceDYxXHgxYlx4YmJceDNlXHgyMFx4MjVceGE0XHg1YSIsCiAJCS5rbGVuICAgPSAxNiwKLQkJLml2ICAgICA9IHsgMHg1NiwgMHgyZSwgMHgxNywgMHg5OSwgMHg2ZCwgMHgwOSwgMHgzZCwgMHgyOCwKLQkJCSAgICAweGRkLCAweGIzLCAweGJhLCAweDY5LCAweDVhLCAweDJlLCAweDZmLCAweDU4IH0sCi0JCS5pbnB1dCAgPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLQkJCSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYgfSwKKwkJLml2ICAgICA9ICJceDU2XHgyZVx4MTdceDk5XHg2ZFx4MDlceDNkXHgyOCIKKwkJCSAgIlx4ZGRceGIzXHhiYVx4NjlceDVhXHgyZVx4NmZceDU4IiwKKwkJLmlucHV0ICA9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSAgIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkgICJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIsCiAJCS5pbGVuICAgPSAzMiwKLQkJLnJlc3VsdCA9IHsgMHhhNSwgMHhkZiwgMHg2ZSwgMHg1MCwgMHhkYSwgMHg3MCwgMHg2YywgMHgwMSwKLQkJCSAgICAweDRhLCAweGFiLCAweGYzLCAweGYyLCAweGQ2LCAweGZjLCAweDZjLCAweGZkLAotCQkJICAgIDB4MTksIDB4YjQsIDB4M2UsIDB4NTcsIDB4MWMsIDB4MDIsIDB4NWUsIDB4YTAsCi0JCQkgICAgMHgxNSwgMHg3OCwgMHhlMCwgMHg1ZSwgMHhmMiwgMHhjYiwgMHg4NywgMHgxNiB9LAorCQkucmVzdWx0ID0gIlx4YTVceGRmXHg2ZVx4NTBceGRhXHg3MFx4NmNceDAxIgorCQkJICAiXHg0YVx4YWJceGYzXHhmMlx4ZDZceGZjXHg2Y1x4ZmQiCisJCQkgICJceDE5XHhiNFx4M2VceDU3XHgxY1x4MDJceDVlXHhhMCIKKwkJCSAgIlx4MTVceDc4XHhlMFx4NWVceGYyXHhjYlx4ODdceDE2IiwKIAkJLnJsZW4gICA9IDMyLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGNhbWVsbGlhX2NiY19kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkgICAgPSB7IDB4MDYsIDB4YTksIDB4MjEsIDB4NDAsIDB4MzYsIDB4YjgsIDB4YTEsIDB4NWIsCi0JCQkgICAgMHg1MSwgMHgyZSwgMHgwMywgMHhkNSwgMHgzNCwgMHgxMiwgMHgwMCwgMHgwNiB9LAorCQkua2V5ICAgID0gIlx4MDZceGE5XHgyMVx4NDBceDM2XHhiOFx4YTFceDViIgorCQkJICAiXHg1MVx4MmVceDAzXHhkNVx4MzRceDEyXHgwMFx4MDYiLAogCQkua2xlbiAgID0gMTYsCi0JCS5pdgk9IHsgMHgzZCwgMHhhZiwgMHhiYSwgMHg0MiwgMHg5ZCwgMHg5ZSwgMHhiNCwgMHgzMCwKLQkJCSAgICAweGI0LCAweDIyLCAweGRhLCAweDgwLCAweDJjLCAweDlmLCAweGFjLCAweDQxIH0sCi0JCS5pbnB1dAk9IHsgMHhlYSwgMHgzMiwgMHgxMiwgMHg3NiwgMHgzYiwgMHg1MCwgMHgxMCwgMHhlNywKLQkJCSAgICAweDE4LCAweGY2LCAweGZkLCAweDVkLCAweGY2LCAweDhmLCAweDEzLCAweDUxIH0sCisJCS5pdgk9ICJceDNkXHhhZlx4YmFceDQyXHg5ZFx4OWVceGI0XHgzMCIKKwkJCSAgIlx4YjRceDIyXHhkYVx4ODBceDJjXHg5Zlx4YWNceDQxIiwKKwkJLmlucHV0CT0gIlx4ZWFceDMyXHgxMlx4NzZceDNiXHg1MFx4MTBceGU3IgorCQkJICAiXHgxOFx4ZjZceGZkXHg1ZFx4ZjZceDhmXHgxM1x4NTEiLAogCQkuaWxlbiAgID0gMTYsCi0JCS5yZXN1bHQgPSB7ICJTaW5nbGUgYmxvY2sgbXNnIiB9LAorCQkucmVzdWx0ID0gIlNpbmdsZSBibG9jayBtc2ciLAogCQkucmxlbiAgID0gMTYsCiAJfSwgewotCQkua2V5ICAgID0geyAweGMyLCAweDg2LCAweDY5LCAweDZkLCAweDg4LCAweDdjLCAweDlhLCAweGEwLAotCQkJICAgIDB4NjEsIDB4MWIsIDB4YmIsIDB4M2UsIDB4MjAsIDB4MjUsIDB4YTQsIDB4NWEgfSwKKwkJLmtleSAgICA9ICJceGMyXHg4Nlx4NjlceDZkXHg4OFx4N2NceDlhXHhhMCIKKwkJCSAgIlx4NjFceDFiXHhiYlx4M2VceDIwXHgyNVx4YTRceDVhIiwKIAkJLmtsZW4gICA9IDE2LAotCQkuaXYgICAgID0geyAweDU2LCAweDJlLCAweDE3LCAweDk5LCAweDZkLCAweDA5LCAweDNkLCAweDI4LAotCQkJICAgIDB4ZGQsIDB4YjMsIDB4YmEsIDB4NjksIDB4NWEsIDB4MmUsIDB4NmYsIDB4NTggfSwKLQkJLmlucHV0ID0geyAweGE1LCAweGRmLCAweDZlLCAweDUwLCAweGRhLCAweDcwLCAweDZjLCAweDAxLAotCQkJICAgIDB4NGEsIDB4YWIsIDB4ZjMsIDB4ZjIsIDB4ZDYsIDB4ZmMsIDB4NmMsIDB4ZmQsCi0JCQkgICAgMHgxOSwgMHhiNCwgMHgzZSwgMHg1NywgMHgxYywgMHgwMiwgMHg1ZSwgMHhhMCwKLQkJCSAgICAweDE1LCAweDc4LCAweGUwLCAweDVlLCAweGYyLCAweGNiLCAweDg3LCAweDE2IH0sCisJCS5pdiAgICAgPSAiXHg1Nlx4MmVceDE3XHg5OVx4NmRceDA5XHgzZFx4MjgiCisJCQkgICJceGRkXHhiM1x4YmFceDY5XHg1YVx4MmVceDZmXHg1OCIsCisJCS5pbnB1dCA9ICJceGE1XHhkZlx4NmVceDUwXHhkYVx4NzBceDZjXHgwMSIKKwkJCSAgIlx4NGFceGFiXHhmM1x4ZjJceGQ2XHhmY1x4NmNceGZkIgorCQkJICAiXHgxOVx4YjRceDNlXHg1N1x4MWNceDAyXHg1ZVx4YTAiCisJCQkgICJceDE1XHg3OFx4ZTBceDVlXHhmMlx4Y2JceDg3XHgxNiIsCiAJCS5pbGVuICAgPSAzMiwKLQkJLnJlc3VsdCA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotCQkJICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0JCQkgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAorCQkucmVzdWx0ID0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxNyIKKwkJCSAgIlx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIiwKIAkJLnJsZW4gICA9IDMyLAogCX0sCiB9OwpAQCAtNjM0Myw4NCArNjM3Miw4NCBAQAogCiBzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIHNlZWRfZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJewotCQkua2V5ICAgID0geyBbMCAuLi4gMTVdID0gMHgwMCB9LAorCQkua2V5ICAgID0gemVyb2VkX3N0cmluZywKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0ICA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisJCS5pbnB1dCAgPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4NWUsIDB4YmEsIDB4YzYsIDB4ZTAsIDB4MDUsIDB4NGUsIDB4MTYsIDB4NjgsCi0JCQkgICAgMHgxOSwgMHhhZiwgMHhmMSwgMHhjYywgMHg2ZCwgMHgzNCwgMHg2YywgMHhkYiB9LAorCQkucmVzdWx0CT0gIlx4NWVceGJhXHhjNlx4ZTBceDA1XHg0ZVx4MTZceDY4IgorCQkJICAiXHgxOVx4YWZceGYxXHhjY1x4NmRceDM0XHg2Y1x4ZGIiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLmlucHV0CT0gemVyb2VkX3N0cmluZywKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgMHhjMSwgMHgxZiwgMHgyMiwgMHhmMiwgMHgwMSwgMHg0MCwgMHg1MCwgMHg1MCwKLQkJCSAgICAweDg0LCAweDQ4LCAweDM1LCAweDk3LCAweGU0LCAweDM3LCAweDBmLCAweDQzIH0sCisJCS5yZXN1bHQJPSAiXHhjMVx4MWZceDIyXHhmMlx4MDFceDQwXHg1MFx4NTAiCisJCQkgICJceDg0XHg0OFx4MzVceDk3XHhlNFx4MzdceDBmXHg0MyIsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDQ3LCAweDA2LCAweDQ4LCAweDA4LCAweDUxLCAweGU2LCAweDFiLCAweGU4LAotCQkJICAgIDB4NWQsIDB4NzQsIDB4YmYsIDB4YjMsIDB4ZmQsIDB4OTUsIDB4NjEsIDB4ODUgfSwKKwkJLmtleQk9ICJceDQ3XHgwNlx4NDhceDA4XHg1MVx4ZTZceDFiXHhlOCIKKwkJCSAgIlx4NWRceDc0XHhiZlx4YjNceGZkXHg5NVx4NjFceDg1IiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweDgzLCAweGEyLCAweGY4LCAweGEyLCAweDg4LCAweDY0LCAweDFmLCAweGI5LAotCQkJICAgIDB4YTQsIDB4ZTksIDB4YTUsIDB4Y2MsIDB4MmYsIDB4MTMsIDB4MWMsIDB4N2QgfSwKKwkJLmlucHV0CT0gIlx4ODNceGEyXHhmOFx4YTJceDg4XHg2NFx4MWZceGI5IgorCQkJICAiXHhhNFx4ZTlceGE1XHhjY1x4MmZceDEzXHgxY1x4N2QiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweGVlLCAweDU0LCAweGQxLCAweDNlLCAweGJjLCAweGFlLCAweDcwLCAweDZkLAotCQkJICAgIDB4MjIsIDB4NmIsIDB4YzMsIDB4MTQsIDB4MmMsIDB4ZDQsIDB4MGQsIDB4NGEgfSwKKwkJLnJlc3VsdAk9ICJceGVlXHg1NFx4ZDFceDNlXHhiY1x4YWVceDcwXHg2ZCIKKwkJCSAgIlx4MjJceDZiXHhjM1x4MTRceDJjXHhkNFx4MGRceDRhIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MjgsIDB4ZGIsIDB4YzMsIDB4YmMsIDB4NDksIDB4ZmYsIDB4ZDgsIDB4N2QsCi0JCQkgICAgMHhjZiwgMHhhNSwgMHgwOSwgMHhiMSwgMHgxZCwgMHg0MiwgMHgyYiwgMHhlNyB9LAorCQkua2V5CT0gIlx4MjhceGRiXHhjM1x4YmNceDQ5XHhmZlx4ZDhceDdkIgorCQkJICAiXHhjZlx4YTVceDA5XHhiMVx4MWRceDQyXHgyYlx4ZTciLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4YjQsIDB4MWUsIDB4NmIsIDB4ZTIsIDB4ZWIsIDB4YTgsIDB4NGEsIDB4MTQsCi0JCQkgICAgMHg4ZSwgMHgyZSwgMHhlZCwgMHg4NCwgMHg1OSwgMHgzYywgMHg1ZSwgMHhjNyB9LAorCQkuaW5wdXQJPSAiXHhiNFx4MWVceDZiXHhlMlx4ZWJceGE4XHg0YVx4MTQiCisJCQkgICJceDhlXHgyZVx4ZWRceDg0XHg1OVx4M2NceDVlXHhjNyIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4OWIsIDB4OWIsIDB4N2IsIDB4ZmMsIDB4ZDEsIDB4ODEsIDB4M2MsIDB4YjksCi0JCQkgICAgMHg1ZCwgMHgwYiwgMHgzNiwgMHgxOCwgMHhmNCwgMHgwZiwgMHg1MSwgMHgyMiB9LAorCQkucmVzdWx0CT0gIlx4OWJceDliXHg3Ylx4ZmNceGQxXHg4MVx4M2NceGI5IgorCQkJICAiXHg1ZFx4MGJceDM2XHgxOFx4ZjRceDBmXHg1MVx4MjIiLAogCQkucmxlbgk9IDE2LAogCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgc2VlZF9kZWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkgICAgPSB7IFswIC4uLiAxNV0gPSAweDAwIH0sCisJCS5rZXkgICAgPSB6ZXJvZWRfc3RyaW5nLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4NWUsIDB4YmEsIDB4YzYsIDB4ZTAsIDB4MDUsIDB4NGUsIDB4MTYsIDB4NjgsCi0JCQkgICAgMHgxOSwgMHhhZiwgMHhmMSwgMHhjYywgMHg2ZCwgMHgzNCwgMHg2YywgMHhkYiB9LAorCQkuaW5wdXQJPSAiXHg1ZVx4YmFceGM2XHhlMFx4MDVceDRlXHgxNlx4NjgiCisJCQkgICJceDE5XHhhZlx4ZjFceGNjXHg2ZFx4MzRceDZjXHhkYiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0JCQkgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCQkucmVzdWx0CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAogCQkucmxlbgk9IDE2LAogCX0sIHsKLQkJLmtleQk9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisJCS5rZXkJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkgICJceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pbnB1dAk9IHsgMHhjMSwgMHgxZiwgMHgyMiwgMHhmMiwgMHgwMSwgMHg0MCwgMHg1MCwgMHg1MCwKLQkJCSAgICAweDg0LCAweDQ4LCAweDM1LCAweDk3LCAweGU0LCAweDM3LCAweDBmLCAweDQzIH0sCisJCS5pbnB1dAk9ICJceGMxXHgxZlx4MjJceGYyXHgwMVx4NDBceDUwXHg1MCIKKwkJCSAgIlx4ODRceDQ4XHgzNVx4OTdceGU0XHgzN1x4MGZceDQzIiwKIAkJLmlsZW4JPSAxNiwKLQkJLnJlc3VsdAk9IHsgWzAgLi4uIDE1XSA9IDB4MDAgfSwKKwkJLnJlc3VsdAk9IHplcm9lZF9zdHJpbmcsCiAJCS5ybGVuCT0gMTYsCiAJfSwgewotCQkua2V5CT0geyAweDQ3LCAweDA2LCAweDQ4LCAweDA4LCAweDUxLCAweGU2LCAweDFiLCAweGU4LAotCQkJICAgIDB4NWQsIDB4NzQsIDB4YmYsIDB4YjMsIDB4ZmQsIDB4OTUsIDB4NjEsIDB4ODUgfSwKKwkJLmtleQk9ICJceDQ3XHgwNlx4NDhceDA4XHg1MVx4ZTZceDFiXHhlOCIKKwkJCSAgIlx4NWRceDc0XHhiZlx4YjNceGZkXHg5NVx4NjFceDg1IiwKIAkJLmtsZW4JPSAxNiwKLQkJLmlucHV0CT0geyAweGVlLCAweDU0LCAweGQxLCAweDNlLCAweGJjLCAweGFlLCAweDcwLCAweDZkLAotCQkJICAgIDB4MjIsIDB4NmIsIDB4YzMsIDB4MTQsIDB4MmMsIDB4ZDQsIDB4MGQsIDB4NGEgfSwKKwkJLmlucHV0CT0gIlx4ZWVceDU0XHhkMVx4M2VceGJjXHhhZVx4NzBceDZkIgorCQkJICAiXHgyMlx4NmJceGMzXHgxNFx4MmNceGQ0XHgwZFx4NGEiLAogCQkuaWxlbgk9IDE2LAotCQkucmVzdWx0CT0geyAweDgzLCAweGEyLCAweGY4LCAweGEyLCAweDg4LCAweDY0LCAweDFmLCAweGI5LAotCQkJICAgIDB4YTQsIDB4ZTksIDB4YTUsIDB4Y2MsIDB4MmYsIDB4MTMsIDB4MWMsIDB4N2QgfSwKKwkJLnJlc3VsdAk9ICJceDgzXHhhMlx4ZjhceGEyXHg4OFx4NjRceDFmXHhiOSIKKwkJCSAgIlx4YTRceGU5XHhhNVx4Y2NceDJmXHgxM1x4MWNceDdkIiwKIAkJLnJsZW4JPSAxNiwKIAl9LCB7Ci0JCS5rZXkJPSB7IDB4MjgsIDB4ZGIsIDB4YzMsIDB4YmMsIDB4NDksIDB4ZmYsIDB4ZDgsIDB4N2QsCi0JCQkgICAgMHhjZiwgMHhhNSwgMHgwOSwgMHhiMSwgMHgxZCwgMHg0MiwgMHgyYiwgMHhlNyB9LAorCQkua2V5CT0gIlx4MjhceGRiXHhjM1x4YmNceDQ5XHhmZlx4ZDhceDdkIgorCQkJICAiXHhjZlx4YTVceDA5XHhiMVx4MWRceDQyXHgyYlx4ZTciLAogCQkua2xlbgk9IDE2LAotCQkuaW5wdXQJPSB7IDB4OWIsIDB4OWIsIDB4N2IsIDB4ZmMsIDB4ZDEsIDB4ODEsIDB4M2MsIDB4YjksCi0JCQkgICAgMHg1ZCwgMHgwYiwgMHgzNiwgMHgxOCwgMHhmNCwgMHgwZiwgMHg1MSwgMHgyMiB9LAorCQkuaW5wdXQJPSAiXHg5Ylx4OWJceDdiXHhmY1x4ZDFceDgxXHgzY1x4YjkiCisJCQkgICJceDVkXHgwYlx4MzZceDE4XHhmNFx4MGZceDUxXHgyMiIsCiAJCS5pbGVuCT0gMTYsCi0JCS5yZXN1bHQJPSB7IDB4YjQsIDB4MWUsIDB4NmIsIDB4ZTIsIDB4ZWIsIDB4YTgsIDB4NGEsIDB4MTQsCi0JCQkgICAgMHg4ZSwgMHgyZSwgMHhlZCwgMHg4NCwgMHg1OSwgMHgzYywgMHg1ZSwgMHhjNyB9LAorCQkucmVzdWx0CT0gIlx4YjRceDFlXHg2Ylx4ZTJceGViXHhhOFx4NGFceDE0IgorCQkJICAiXHg4ZVx4MmVceGVkXHg4NFx4NTlceDNjXHg1ZVx4YzciLAogCQkucmxlbgk9IDE2LAogCX0KIH07CkBAIC02NDMzLDEyMDQgKzY0NjIsMTM3NiBAQAogCSogb2YgaW5wdXQgbGVuZ3RoLgogCSovCiAJeyAvKiBTZXQgMywgdmVjdG9yIDAgKi8KLQkJLmtleQk9IHsKLQkJCSAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotCQkJICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYKLQkJCSAgfSwKKwkJLmtleQk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKwkJCSJceDA4XHgwOVx4MEFceDBCXHgwQ1x4MERceDBFXHgwRiIsCiAJCS5rbGVuCT0gMTYsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKLQkJLmlucHV0CT0gewotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSAzOSwKLQkJLnJlc3VsdAk9IHsKLQkJCSAgICAweDJELCAweEQ1LCAweEMzLCAweEY3LCAweEJBLCAweDJCLCAweDIwLCAweEY3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgsIDB4MDIsIDB4NDEsIDB4MEMsIDB4NjgsIDB4ODYsIDB4ODgsIDB4ODksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1QSwgMHhEOCwgMHhDMSwgMHhCRCwgMHg0RSwgMHhBNiwgMHhDOSwgMHhCMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwLCAweEZCLCAweDlCLCAweDkwLCAweEUyLCAweDEwLCAweDQ5LCAweEJGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTgsIDB4M0YsIDB4NTIsIDB4NzksIDB4NzAsIDB4RUIsIDB4QzEsCi0JCQl9LAorCQkucmVzdWx0CT0gIlx4MkRceEQ1XHhDM1x4RjdceEJBXHgyQlx4MjBceEY3IgorCQkJICJceDY4XHgwMlx4NDFceDBDXHg2OFx4ODZceDg4XHg4OSIKKwkJCSAiXHg1QVx4RDhceEMxXHhCRFx4NEVceEE2XHhDOVx4QjEiCisJCQkgIlx4NDBceEZCXHg5Qlx4OTBceEUyXHgxMFx4NDlceEJGIgorCQkJICJceDU4XHgzRlx4NTJceDc5XHg3MFx4RUJceEMxIiwKIAkJLnJsZW4JPSAzOSwKIAl9LCB7IC8qIFNldCA1LCB2ZWN0b3IgMCAqLwotCQkua2V5CT0gewotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotCQkJICB9LAorCQkua2V5CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmtsZW4JPSAxNiwKLQkJLml2ICAgICA9IHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkuaW5wdXQJPSB7Ci0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICB9LAorCQkuaXYgICAgID0gIlx4ODBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKKwkJLmlucHV0CT0gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSA2NCwKLQkJLnJlc3VsdAk9IHsKLQkJCSAgICAweEI2LCAweDZDLCAweDFFLCAweDQ0LCAweDQ2LCAweERELCAweDk1LCAweDU3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RTUsIDB4NzgsIDB4RTIsIDB4MjMsIDB4QjAsIDB4QjcsIDB4NjgsIDB4MDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3QiwgMHgyMywgMHhCMiwgMHg2NywgMHhCQiwgMHgwMiwgMHgzNCwgMHhBRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ2LCAweDI2LCAweEJGLCAweDQ0LCAweDNGLCAweDIxLCAweDk3LCAweDc2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDMsIDB4NkYsIDB4QjEsIDB4OUYsIDB4RDAsIDB4RTgsIDB4ODYsIDB4NkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDRCwgMHgwRCwgMHhFOSwgMHhBOSwgMHg1MywgMHg4RiwgMHg0QSwgMHgwOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweENBLCAweDlBLCAweEMwLCAweDczLCAweDJFLCAweDMwLCAweEJDLCAweEY5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEUsIDB4NEYsIDB4MTMsIDB4RTQsIDB4QjksIDB4RTIsIDB4MDEsIDB4RDksCi0JCQkgIH0sCisJCS5yZXN1bHQJPSAiXHhCNlx4NkNceDFFXHg0NFx4NDZceEREXHg5NVx4NTciCisJCQkgIlx4RTVceDc4XHhFMlx4MjNceEIwXHhCN1x4NjhceDAxIgorCQkJICJceDdCXHgyM1x4QjJceDY3XHhCQlx4MDJceDM0XHhBRSIKKwkJCSAiXHg0Nlx4MjZceEJGXHg0NFx4M0ZceDIxXHg5N1x4NzYiCisJCQkgIlx4NDNceDZGXHhCMVx4OUZceEQwXHhFOFx4ODZceDZGIgorCQkJICJceENEXHgwRFx4RTlceEE5XHg1M1x4OEZceDRBXHgwOSIKKwkJCSAiXHhDQVx4OUFceEMwXHg3M1x4MkVceDMwXHhCQ1x4RjkiCisJCQkgIlx4OEVceDRGXHgxM1x4RTRceEI5XHhFMlx4MDFceEQ5IiwKIAkJLnJsZW4JPSA2NCwKIAl9LCB7IC8qIFNldCAzLCB2ZWN0b3IgMjcgKi8KLQkJLmtleQk9IHsKLQkJCSAgICAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGLCAweDIwLCAweDIxLCAweDIyLAotCQkJICAgIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MkEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQiwgMHgyQywgMHgyRCwgMHgyRSwgMHgyRiwgMHgzMCwgMHgzMSwgMHgzMiwKLQkJCSAgICAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNBCi0JCQkgIH0sCisJCS5rZXkJPSAiXHgxQlx4MUNceDFEXHgxRVx4MUZceDIwXHgyMVx4MjIiCisJCQkiXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MkEiCisJCQkiXHgyQlx4MkNceDJEXHgyRVx4MkZceDMwXHgzMVx4MzIiCisJCQkiXHgzM1x4MzRceDM1XHgzNlx4MzdceDM4XHgzOVx4M0EiLAogCQkua2xlbgk9IDMyLAotCQkuaXYgICAgID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCS5pbnB1dAk9IHsKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0KLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgfSwKKwkJLml2ICAgICA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCisJCS5pbnB1dAk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwKIAkJLmlsZW4JPSAxMTEsCi0JCS5yZXN1bHQJPSB7Ci0JCQkgICAgMHhBRSwgMHgzOSwgMHg1MCwgMHg4RSwgMHhBQywgMHg5QSwgMHhFQywgMHhFNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEJGLCAweDk3LCAweEJCLCAweDIwLCAweEI5LCAweERFLCAweEU0LCAweDFGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODcsIDB4RDksIDB4NDcsIDB4RjgsIDB4MjgsIDB4OTEsIDB4MzUsIDB4OTgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEQiwgMHg3MiwgMHhDQywgMHgyMywgMHgyOSwgMHg0OCwgMHg1NiwgMHg1RSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzLCAweDdFLCAweDBCLCAweEYzLCAweDdELCAweDVELCAweDM4LCAweDdCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkQsIDB4NzEsIDB4MDIsIDB4QjQsIDB4M0IsIDB4QjUsIDB4RDgsIDB4MjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCMCwgMHg0QSwgMHhERiwgMHgzQywgMHhFQywgMHhCNiwgMHhEOSwgMHgzQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDlCLCAweEE3LCAweDUyLCAweEJFLCAweEM1LCAweEQ0LCAweDUwLCAweDU5LAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHgxNCwgMHhCNCwgMHgwRSwgMHg0MCwgMHhFNiwgMHg1MywgMHhEMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzLCAweDlDLCAweDVCLCAweEEwLCAweDkyLCAweDI5LCAweDZCLCAweDVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTYsIDB4NUIsIDB4MUUsIDB4MkYsIDB4RDMsIDB4QUMsIDB4QzEsIDB4OTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCMSwgMHg0MSwgMHgzRiwgMHgxOSwgMHgyRiwgMHhDNCwgMHgzQiwgMHhDNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk1LCAweDQ2LCAweDQ1LCAweDU0LCAweEU5LCAweDc1LCAweDAzLCAweDA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4QUYsIDB4RTUsIDB4OEEsIDB4ODEsIDB4MTIsIDB4MDksCi0JCQkgIH0sCisJCS5yZXN1bHQJPSAiXHhBRVx4MzlceDUwXHg4RVx4QUNceDlBXHhFQ1x4RTciCisJCQkgIlx4QkZceDk3XHhCQlx4MjBceEI5XHhERVx4RTRceDFGIgorCQkJICJceDg3XHhEOVx4NDdceEY4XHgyOFx4OTFceDM1XHg5OCIKKwkJCSAiXHhEQlx4NzJceENDXHgyM1x4MjlceDQ4XHg1Nlx4NUUiCisJCQkgIlx4ODNceDdFXHgwQlx4RjNceDdEXHg1RFx4MzhceDdCIgorCQkJICJceDJEXHg3MVx4MDJceEI0XHgzQlx4QjVceEQ4XHgyMyIKKwkJCSAiXHhCMFx4NEFceERGXHgzQ1x4RUNceEI2XHhEOVx4M0IiCisJCQkgIlx4OUJceEE3XHg1Mlx4QkVceEM1XHhENFx4NTBceDU5IgorCQkJICJceDE1XHgxNFx4QjRceDBFXHg0MFx4RTZceDUzXHhEMSIKKwkJCSAiXHg4M1x4OUNceDVCXHhBMFx4OTJceDI5XHg2Qlx4NUUiCisJCQkgIlx4OTZceDVCXHgxRVx4MkZceEQzXHhBQ1x4QzFceDkyIgorCQkJICJceEIxXHg0MVx4M0ZceDE5XHgyRlx4QzRceDNCXHhDNiIKKwkJCSAiXHg5NVx4NDZceDQ1XHg1NFx4RTlceDc1XHgwM1x4MDgiCisJCQkgIlx4NDRceEFGXHhFNVx4OEFceDgxXHgxMlx4MDkiLAogCQkucmxlbgk9IDExMSwKLQogCX0sIHsgLyogU2V0IDUsIHZlY3RvciAyNyAqLwotCQkua2V5CT0gewotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLQkJCSAgfSwKKwkJLmtleQk9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5rbGVuCT0gMzIsCi0JCS5pdiAgICAgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKLQkJLmlucHV0CT0gewotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQotCQkJICAgIDB4MDAsCi0JCQkgIH0sCisJCS5pdiAgICAgPSAiXHgwMFx4MDBceDAwXHgxMFx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQJPSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMCIsCiAJCS5pbGVuCT0gMTI5LAotCQkucmVzdWx0CT0gewotCQkJICAgIDB4RDIsIDB4REIsIDB4MUEsIDB4NUMsIDB4RjEsIDB4QzEsIDB4QUMsIDB4REIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFOCwgMHgxQSwgMHg3QSwgMHg0MywgMHg0MCwgMHhFRiwgMHg1MywgMHg0MywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDVFLCAweDdGLCAweDRCLCAweDFBLCAweDUwLCAweDUyLCAweDNGLCAweDhELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgsIDB4M0QsIDB4Q0YsIDB4ODUsIDB4MUQsIDB4NjksIDB4NkUsIDB4NjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMiwgMHhERSwgMHg3NCwgMHg1NiwgMHgxOCwgMHgxQiwgMHg4NCwgMHgxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQ0LCAweDYyLCAweEJBLCAweDYwLCAweDUwLCAweEYwLCAweDYxLCAweEYyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4NzgsIDB4N0YsIDB4QzEsIDB4MjQsIDB4MzQsIDB4QUYsIDB4NTgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRiwgMHgyQywgMHg1OSwgMHhDQSwgMHg5MCwgMHg3NywgMHhGMywgMHhCMCwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NUIsIDB4NEEsIDB4REYsIDB4ODksIDB4Q0UsIDB4MkMsIDB4MkYsIDB4RkMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywgMHhGMCwgMHhFMywgMHg0NSwgMHhFOCwgMHhCMywgMHhCMywgMHg3NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEEwLCAweDk1LCAweDcxLCAweEExLCAweDI5LCAweDM5LCAweDk0LCAweENBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDUsIDB4MkYsIDB4QkQsIDB4Q0IsIDB4MTAsIDB4QjYsIDB4QkUsIDB4OUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RSwgMHhGOSwgMHhCMiwgMHgwMSwgMHgwQSwgMHg1QSwgMHgwQSwgMHhCNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZCLCAweDlELCAweDcwLCAweDhFLCAweDRCLCAweEQ2LCAweDJGLCAweENELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkUsIDB4NDAsIDB4NDgsIDB4NzUsIDB4RTksIDB4RTIsIDB4MjEsIDB4NDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiwgMHhDOSwgMHhCNiwgMHhCNSwgMHg2NiwgMHhCQywgMHg5QSwgMHg1OSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NUEsCi0JCQkgIH0sCisJCS5yZXN1bHQJPSAiXHhEMlx4REJceDFBXHg1Q1x4RjFceEMxXHhBQ1x4REIiCisJCQkgIlx4RThceDFBXHg3QVx4NDNceDQwXHhFRlx4NTNceDQzIgorCQkJICJceDVFXHg3Rlx4NEJceDFBXHg1MFx4NTJceDNGXHg4RCIKKwkJCSAiXHgyOFx4M0RceENGXHg4NVx4MURceDY5XHg2RVx4NjAiCisJCQkgIlx4RjJceERFXHg3NFx4NTZceDE4XHgxQlx4ODRceDEwIgorCQkJICJceEQ0XHg2Mlx4QkFceDYwXHg1MFx4RjBceDYxXHhGMiIKKwkJCSAiXHgxQ1x4NzhceDdGXHhDMVx4MjRceDM0XHhBRlx4NTgiCisJCQkgIlx4QkZceDJDXHg1OVx4Q0FceDkwXHg3N1x4RjNceEIwIgorCQkJICJceDVCXHg0QVx4REZceDg5XHhDRVx4MkNceDJGXHhGQyIKKwkJCSAiXHg2N1x4RjBceEUzXHg0NVx4RThceEIzXHhCM1x4NzUiCisJCQkgIlx4QTBceDk1XHg3MVx4QTFceDI5XHgzOVx4OTRceENBIgorCQkJICJceDQ1XHgyRlx4QkRceENCXHgxMFx4QjZceEJFXHg5RiIKKwkJCSAiXHg4RVx4RjlceEIyXHgwMVx4MEFceDVBXHgwQVx4QjciCisJCQkgIlx4NkJceDlEXHg3MFx4OEVceDRCXHhENlx4MkZceENEIgorCQkJICJceDJFXHg0MFx4NDhceDc1XHhFOVx4RTJceDIxXHg0NSIKKwkJCSAiXHgwQlx4QzlceEI2XHhCNVx4NjZceEJDXHg5QVx4NTkiCisJCQkgIlx4NUEiLAogCQkucmxlbgk9IDEyOSwKIAl9LCB7IC8qIGxhcmdlIHRlc3QgdmVjdG9yIGdlbmVyYXRlZCB1c2luZyBDcnlwdG8rKyAqLwotCQkua2V5ID0gewotCQkJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLQkJfSwKKwkJLmtleSA9ICAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciCisJCQkiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCisJCQkiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisJCQkiXHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYiLAogCQkua2xlbiA9IDMyLAotCQkuaXYgPSB7Ci0JCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJfSwKLQkJLmlucHV0ID0gewotCQkJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLQkJCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0JCQkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotCQkJMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLQkJCTB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCi0JCQkweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAotCQkJMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLQkJCTB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCi0JCQkweDQwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAotCQkJMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKLQkJCTB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsCi0JCQkweDU4LCAweDU5LCAweDVhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLAotCQkJMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLQkJCTB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCi0JCQkweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LAotCQkJMHg3OCwgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKLQkJCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0JCQkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAotCQkJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKLQkJCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCi0JCQkweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LAotCQkJMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKLQkJCTB4YjAsIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCi0JCQkweGI4LCAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLAotCQkJMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLQkJCTB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCi0JCQkweGQwLCAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LAotCQkJMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKLQkJCTB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCi0JCQkweGU4LCAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAweGVmLAotCQkJMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKLQkJCTB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYsCi0JCQkweDAwLCAweDAzLCAweDA2LCAweDA5LCAweDBjLCAweDBmLCAweDEyLCAweDE1LAotCQkJMHgxOCwgMHgxYiwgMHgxZSwgMHgyMSwgMHgyNCwgMHgyNywgMHgyYSwgMHgyZCwKLQkJCTB4MzAsIDB4MzMsIDB4MzYsIDB4MzksIDB4M2MsIDB4M2YsIDB4NDIsIDB4NDUsCi0JCQkweDQ4LCAweDRiLCAweDRlLCAweDUxLCAweDU0LCAweDU3LCAweDVhLCAweDVkLAotCQkJMHg2MCwgMHg2MywgMHg2NiwgMHg2OSwgMHg2YywgMHg2ZiwgMHg3MiwgMHg3NSwKLQkJCTB4NzgsIDB4N2IsIDB4N2UsIDB4ODEsIDB4ODQsIDB4ODcsIDB4OGEsIDB4OGQsCi0JCQkweDkwLCAweDkzLCAweDk2LCAweDk5LCAweDljLCAweDlmLCAweGEyLCAweGE1LAotCQkJMHhhOCwgMHhhYiwgMHhhZSwgMHhiMSwgMHhiNCwgMHhiNywgMHhiYSwgMHhiZCwKLQkJCTB4YzAsIDB4YzMsIDB4YzYsIDB4YzksIDB4Y2MsIDB4Y2YsIDB4ZDIsIDB4ZDUsCi0JCQkweGQ4LCAweGRiLCAweGRlLCAweGUxLCAweGU0LCAweGU3LCAweGVhLCAweGVkLAotCQkJMHhmMCwgMHhmMywgMHhmNiwgMHhmOSwgMHhmYywgMHhmZiwgMHgwMiwgMHgwNSwKLQkJCTB4MDgsIDB4MGIsIDB4MGUsIDB4MTEsIDB4MTQsIDB4MTcsIDB4MWEsIDB4MWQsCi0JCQkweDIwLCAweDIzLCAweDI2LCAweDI5LCAweDJjLCAweDJmLCAweDMyLCAweDM1LAotCQkJMHgzOCwgMHgzYiwgMHgzZSwgMHg0MSwgMHg0NCwgMHg0NywgMHg0YSwgMHg0ZCwKLQkJCTB4NTAsIDB4NTMsIDB4NTYsIDB4NTksIDB4NWMsIDB4NWYsIDB4NjIsIDB4NjUsCi0JCQkweDY4LCAweDZiLCAweDZlLCAweDcxLCAweDc0LCAweDc3LCAweDdhLCAweDdkLAotCQkJMHg4MCwgMHg4MywgMHg4NiwgMHg4OSwgMHg4YywgMHg4ZiwgMHg5MiwgMHg5NSwKLQkJCTB4OTgsIDB4OWIsIDB4OWUsIDB4YTEsIDB4YTQsIDB4YTcsIDB4YWEsIDB4YWQsCi0JCQkweGIwLCAweGIzLCAweGI2LCAweGI5LCAweGJjLCAweGJmLCAweGMyLCAweGM1LAotCQkJMHhjOCwgMHhjYiwgMHhjZSwgMHhkMSwgMHhkNCwgMHhkNywgMHhkYSwgMHhkZCwKLQkJCTB4ZTAsIDB4ZTMsIDB4ZTYsIDB4ZTksIDB4ZWMsIDB4ZWYsIDB4ZjIsIDB4ZjUsCi0JCQkweGY4LCAweGZiLCAweGZlLCAweDAxLCAweDA0LCAweDA3LCAweDBhLCAweDBkLAotCQkJMHgxMCwgMHgxMywgMHgxNiwgMHgxOSwgMHgxYywgMHgxZiwgMHgyMiwgMHgyNSwKLQkJCTB4MjgsIDB4MmIsIDB4MmUsIDB4MzEsIDB4MzQsIDB4MzcsIDB4M2EsIDB4M2QsCi0JCQkweDQwLCAweDQzLCAweDQ2LCAweDQ5LCAweDRjLCAweDRmLCAweDUyLCAweDU1LAotCQkJMHg1OCwgMHg1YiwgMHg1ZSwgMHg2MSwgMHg2NCwgMHg2NywgMHg2YSwgMHg2ZCwKLQkJCTB4NzAsIDB4NzMsIDB4NzYsIDB4NzksIDB4N2MsIDB4N2YsIDB4ODIsIDB4ODUsCi0JCQkweDg4LCAweDhiLCAweDhlLCAweDkxLCAweDk0LCAweDk3LCAweDlhLCAweDlkLAotCQkJMHhhMCwgMHhhMywgMHhhNiwgMHhhOSwgMHhhYywgMHhhZiwgMHhiMiwgMHhiNSwKLQkJCTB4YjgsIDB4YmIsIDB4YmUsIDB4YzEsIDB4YzQsIDB4YzcsIDB4Y2EsIDB4Y2QsCi0JCQkweGQwLCAweGQzLCAweGQ2LCAweGQ5LCAweGRjLCAweGRmLCAweGUyLCAweGU1LAotCQkJMHhlOCwgMHhlYiwgMHhlZSwgMHhmMSwgMHhmNCwgMHhmNywgMHhmYSwgMHhmZCwKLQkJCTB4MDAsIDB4MDUsIDB4MGEsIDB4MGYsIDB4MTQsIDB4MTksIDB4MWUsIDB4MjMsCi0JCQkweDI4LCAweDJkLCAweDMyLCAweDM3LCAweDNjLCAweDQxLCAweDQ2LCAweDRiLAotCQkJMHg1MCwgMHg1NSwgMHg1YSwgMHg1ZiwgMHg2NCwgMHg2OSwgMHg2ZSwgMHg3MywKLQkJCTB4NzgsIDB4N2QsIDB4ODIsIDB4ODcsIDB4OGMsIDB4OTEsIDB4OTYsIDB4OWIsCi0JCQkweGEwLCAweGE1LCAweGFhLCAweGFmLCAweGI0LCAweGI5LCAweGJlLCAweGMzLAotCQkJMHhjOCwgMHhjZCwgMHhkMiwgMHhkNywgMHhkYywgMHhlMSwgMHhlNiwgMHhlYiwKLQkJCTB4ZjAsIDB4ZjUsIDB4ZmEsIDB4ZmYsIDB4MDQsIDB4MDksIDB4MGUsIDB4MTMsCi0JCQkweDE4LCAweDFkLCAweDIyLCAweDI3LCAweDJjLCAweDMxLCAweDM2LCAweDNiLAotCQkJMHg0MCwgMHg0NSwgMHg0YSwgMHg0ZiwgMHg1NCwgMHg1OSwgMHg1ZSwgMHg2MywKLQkJCTB4NjgsIDB4NmQsIDB4NzIsIDB4NzcsIDB4N2MsIDB4ODEsIDB4ODYsIDB4OGIsCi0JCQkweDkwLCAweDk1LCAweDlhLCAweDlmLCAweGE0LCAweGE5LCAweGFlLCAweGIzLAotCQkJMHhiOCwgMHhiZCwgMHhjMiwgMHhjNywgMHhjYywgMHhkMSwgMHhkNiwgMHhkYiwKLQkJCTB4ZTAsIDB4ZTUsIDB4ZWEsIDB4ZWYsIDB4ZjQsIDB4ZjksIDB4ZmUsIDB4MDMsCi0JCQkweDA4LCAweDBkLCAweDEyLCAweDE3LCAweDFjLCAweDIxLCAweDI2LCAweDJiLAotCQkJMHgzMCwgMHgzNSwgMHgzYSwgMHgzZiwgMHg0NCwgMHg0OSwgMHg0ZSwgMHg1MywKLQkJCTB4NTgsIDB4NWQsIDB4NjIsIDB4NjcsIDB4NmMsIDB4NzEsIDB4NzYsIDB4N2IsCi0JCQkweDgwLCAweDg1LCAweDhhLCAweDhmLCAweDk0LCAweDk5LCAweDllLCAweGEzLAotCQkJMHhhOCwgMHhhZCwgMHhiMiwgMHhiNywgMHhiYywgMHhjMSwgMHhjNiwgMHhjYiwKLQkJCTB4ZDAsIDB4ZDUsIDB4ZGEsIDB4ZGYsIDB4ZTQsIDB4ZTksIDB4ZWUsIDB4ZjMsCi0JCQkweGY4LCAweGZkLCAweDAyLCAweDA3LCAweDBjLCAweDExLCAweDE2LCAweDFiLAotCQkJMHgyMCwgMHgyNSwgMHgyYSwgMHgyZiwgMHgzNCwgMHgzOSwgMHgzZSwgMHg0MywKLQkJCTB4NDgsIDB4NGQsIDB4NTIsIDB4NTcsIDB4NWMsIDB4NjEsIDB4NjYsIDB4NmIsCi0JCQkweDcwLCAweDc1LCAweDdhLCAweDdmLCAweDg0LCAweDg5LCAweDhlLCAweDkzLAotCQkJMHg5OCwgMHg5ZCwgMHhhMiwgMHhhNywgMHhhYywgMHhiMSwgMHhiNiwgMHhiYiwKLQkJCTB4YzAsIDB4YzUsIDB4Y2EsIDB4Y2YsIDB4ZDQsIDB4ZDksIDB4ZGUsIDB4ZTMsCi0JCQkweGU4LCAweGVkLCAweGYyLCAweGY3LCAweGZjLCAweDAxLCAweDA2LCAweDBiLAotCQkJMHgxMCwgMHgxNSwgMHgxYSwgMHgxZiwgMHgyNCwgMHgyOSwgMHgyZSwgMHgzMywKLQkJCTB4MzgsIDB4M2QsIDB4NDIsIDB4NDcsIDB4NGMsIDB4NTEsIDB4NTYsIDB4NWIsCi0JCQkweDYwLCAweDY1LCAweDZhLCAweDZmLCAweDc0LCAweDc5LCAweDdlLCAweDgzLAotCQkJMHg4OCwgMHg4ZCwgMHg5MiwgMHg5NywgMHg5YywgMHhhMSwgMHhhNiwgMHhhYiwKLQkJCTB4YjAsIDB4YjUsIDB4YmEsIDB4YmYsIDB4YzQsIDB4YzksIDB4Y2UsIDB4ZDMsCi0JCQkweGQ4LCAweGRkLCAweGUyLCAweGU3LCAweGVjLCAweGYxLCAweGY2LCAweGZiLAotCQkJMHgwMCwgMHgwNywgMHgwZSwgMHgxNSwgMHgxYywgMHgyMywgMHgyYSwgMHgzMSwKLQkJCTB4MzgsIDB4M2YsIDB4NDYsIDB4NGQsIDB4NTQsIDB4NWIsIDB4NjIsIDB4NjksCi0JCQkweDcwLCAweDc3LCAweDdlLCAweDg1LCAweDhjLCAweDkzLCAweDlhLCAweGExLAotCQkJMHhhOCwgMHhhZiwgMHhiNiwgMHhiZCwgMHhjNCwgMHhjYiwgMHhkMiwgMHhkOSwKLQkJCTB4ZTAsIDB4ZTcsIDB4ZWUsIDB4ZjUsIDB4ZmMsIDB4MDMsIDB4MGEsIDB4MTEsCi0JCQkweDE4LCAweDFmLCAweDI2LCAweDJkLCAweDM0LCAweDNiLCAweDQyLCAweDQ5LAotCQkJMHg1MCwgMHg1NywgMHg1ZSwgMHg2NSwgMHg2YywgMHg3MywgMHg3YSwgMHg4MSwKLQkJCTB4ODgsIDB4OGYsIDB4OTYsIDB4OWQsIDB4YTQsIDB4YWIsIDB4YjIsIDB4YjksCi0JCQkweGMwLCAweGM3LCAweGNlLCAweGQ1LCAweGRjLCAweGUzLCAweGVhLCAweGYxLAotCQkJMHhmOCwgMHhmZiwgMHgwNiwgMHgwZCwgMHgxNCwgMHgxYiwgMHgyMiwgMHgyOSwKLQkJCTB4MzAsIDB4MzcsIDB4M2UsIDB4NDUsIDB4NGMsIDB4NTMsIDB4NWEsIDB4NjEsCi0JCQkweDY4LCAweDZmLCAweDc2LCAweDdkLCAweDg0LCAweDhiLCAweDkyLCAweDk5LAotCQkJMHhhMCwgMHhhNywgMHhhZSwgMHhiNSwgMHhiYywgMHhjMywgMHhjYSwgMHhkMSwKLQkJCTB4ZDgsIDB4ZGYsIDB4ZTYsIDB4ZWQsIDB4ZjQsIDB4ZmIsIDB4MDIsIDB4MDksCi0JCQkweDEwLCAweDE3LCAweDFlLCAweDI1LCAweDJjLCAweDMzLCAweDNhLCAweDQxLAotCQkJMHg0OCwgMHg0ZiwgMHg1NiwgMHg1ZCwgMHg2NCwgMHg2YiwgMHg3MiwgMHg3OSwKLQkJCTB4ODAsIDB4ODcsIDB4OGUsIDB4OTUsIDB4OWMsIDB4YTMsIDB4YWEsIDB4YjEsCi0JCQkweGI4LCAweGJmLCAweGM2LCAweGNkLCAweGQ0LCAweGRiLCAweGUyLCAweGU5LAotCQkJMHhmMCwgMHhmNywgMHhmZSwgMHgwNSwgMHgwYywgMHgxMywgMHgxYSwgMHgyMSwKLQkJCTB4MjgsIDB4MmYsIDB4MzYsIDB4M2QsIDB4NDQsIDB4NGIsIDB4NTIsIDB4NTksCi0JCQkweDYwLCAweDY3LCAweDZlLCAweDc1LCAweDdjLCAweDgzLCAweDhhLCAweDkxLAotCQkJMHg5OCwgMHg5ZiwgMHhhNiwgMHhhZCwgMHhiNCwgMHhiYiwgMHhjMiwgMHhjOSwKLQkJCTB4ZDAsIDB4ZDcsIDB4ZGUsIDB4ZTUsIDB4ZWMsIDB4ZjMsIDB4ZmEsIDB4MDEsCi0JCQkweDA4LCAweDBmLCAweDE2LCAweDFkLCAweDI0LCAweDJiLCAweDMyLCAweDM5LAotCQkJMHg0MCwgMHg0NywgMHg0ZSwgMHg1NSwgMHg1YywgMHg2MywgMHg2YSwgMHg3MSwKLQkJCTB4NzgsIDB4N2YsIDB4ODYsIDB4OGQsIDB4OTQsIDB4OWIsIDB4YTIsIDB4YTksCi0JCQkweGIwLCAweGI3LCAweGJlLCAweGM1LCAweGNjLCAweGQzLCAweGRhLCAweGUxLAotCQkJMHhlOCwgMHhlZiwgMHhmNiwgMHhmZCwgMHgwNCwgMHgwYiwgMHgxMiwgMHgxOSwKLQkJCTB4MjAsIDB4MjcsIDB4MmUsIDB4MzUsIDB4M2MsIDB4NDMsIDB4NGEsIDB4NTEsCi0JCQkweDU4LCAweDVmLCAweDY2LCAweDZkLCAweDc0LCAweDdiLCAweDgyLCAweDg5LAotCQkJMHg5MCwgMHg5NywgMHg5ZSwgMHhhNSwgMHhhYywgMHhiMywgMHhiYSwgMHhjMSwKLQkJCTB4YzgsIDB4Y2YsIDB4ZDYsIDB4ZGQsIDB4ZTQsIDB4ZWIsIDB4ZjIsIDB4ZjksCi0JCQkweDAwLCAweDA5LCAweDEyLCAweDFiLCAweDI0LCAweDJkLCAweDM2LCAweDNmLAotCQkJMHg0OCwgMHg1MSwgMHg1YSwgMHg2MywgMHg2YywgMHg3NSwgMHg3ZSwgMHg4NywKLQkJCTB4OTAsIDB4OTksIDB4YTIsIDB4YWIsIDB4YjQsIDB4YmQsIDB4YzYsIDB4Y2YsCi0JCQkweGQ4LCAweGUxLCAweGVhLCAweGYzLCAweGZjLCAweDA1LCAweDBlLCAweDE3LAotCQkJMHgyMCwgMHgyOSwgMHgzMiwgMHgzYiwgMHg0NCwgMHg0ZCwgMHg1NiwgMHg1ZiwKLQkJCTB4NjgsIDB4NzEsIDB4N2EsIDB4ODMsIDB4OGMsIDB4OTUsIDB4OWUsIDB4YTcsCi0JCQkweGIwLCAweGI5LCAweGMyLCAweGNiLCAweGQ0LCAweGRkLCAweGU2LCAweGVmLAotCQkJMHhmOCwgMHgwMSwgMHgwYSwgMHgxMywgMHgxYywgMHgyNSwgMHgyZSwgMHgzNywKLQkJCTB4NDAsIDB4NDksIDB4NTIsIDB4NWIsIDB4NjQsIDB4NmQsIDB4NzYsIDB4N2YsCi0JCQkweDg4LCAweDkxLCAweDlhLCAweGEzLCAweGFjLCAweGI1LCAweGJlLCAweGM3LAotCQkJMHhkMCwgMHhkOSwgMHhlMiwgMHhlYiwgMHhmNCwgMHhmZCwgMHgwNiwgMHgwZiwKLQkJCTB4MTgsIDB4MjEsIDB4MmEsIDB4MzMsIDB4M2MsIDB4NDUsIDB4NGUsIDB4NTcsCi0JCQkweDYwLCAweDY5LCAweDcyLCAweDdiLCAweDg0LCAweDhkLCAweDk2LCAweDlmLAotCQkJMHhhOCwgMHhiMSwgMHhiYSwgMHhjMywgMHhjYywgMHhkNSwgMHhkZSwgMHhlNywKLQkJCTB4ZjAsIDB4ZjksIDB4MDIsIDB4MGIsIDB4MTQsIDB4MWQsIDB4MjYsIDB4MmYsCi0JCQkweDM4LCAweDQxLCAweDRhLCAweDUzLCAweDVjLCAweDY1LCAweDZlLCAweDc3LAotCQkJMHg4MCwgMHg4OSwgMHg5MiwgMHg5YiwgMHhhNCwgMHhhZCwgMHhiNiwgMHhiZiwKLQkJCTB4YzgsIDB4ZDEsIDB4ZGEsIDB4ZTMsIDB4ZWMsIDB4ZjUsIDB4ZmUsIDB4MDcsCi0JCQkweDEwLCAweDE5LCAweDIyLCAweDJiLCAweDM0LCAweDNkLCAweDQ2LCAweDRmLAotCQkJMHg1OCwgMHg2MSwgMHg2YSwgMHg3MywgMHg3YywgMHg4NSwgMHg4ZSwgMHg5NywKLQkJCTB4YTAsIDB4YTksIDB4YjIsIDB4YmIsIDB4YzQsIDB4Y2QsIDB4ZDYsIDB4ZGYsCi0JCQkweGU4LCAweGYxLCAweGZhLCAweDAzLCAweDBjLCAweDE1LCAweDFlLCAweDI3LAotCQkJMHgzMCwgMHgzOSwgMHg0MiwgMHg0YiwgMHg1NCwgMHg1ZCwgMHg2NiwgMHg2ZiwKLQkJCTB4NzgsIDB4ODEsIDB4OGEsIDB4OTMsIDB4OWMsIDB4YTUsIDB4YWUsIDB4YjcsCi0JCQkweGMwLCAweGM5LCAweGQyLCAweGRiLCAweGU0LCAweGVkLCAweGY2LCAweGZmLAotCQkJMHgwOCwgMHgxMSwgMHgxYSwgMHgyMywgMHgyYywgMHgzNSwgMHgzZSwgMHg0NywKLQkJCTB4NTAsIDB4NTksIDB4NjIsIDB4NmIsIDB4NzQsIDB4N2QsIDB4ODYsIDB4OGYsCi0JCQkweDk4LCAweGExLCAweGFhLCAweGIzLCAweGJjLCAweGM1LCAweGNlLCAweGQ3LAotCQkJMHhlMCwgMHhlOSwgMHhmMiwgMHhmYiwgMHgwNCwgMHgwZCwgMHgxNiwgMHgxZiwKLQkJCTB4MjgsIDB4MzEsIDB4M2EsIDB4NDMsIDB4NGMsIDB4NTUsIDB4NWUsIDB4NjcsCi0JCQkweDcwLCAweDc5LCAweDgyLCAweDhiLCAweDk0LCAweDlkLCAweGE2LCAweGFmLAotCQkJMHhiOCwgMHhjMSwgMHhjYSwgMHhkMywgMHhkYywgMHhlNSwgMHhlZSwgMHhmNywKLQkJCTB4MDAsIDB4MGIsIDB4MTYsIDB4MjEsIDB4MmMsIDB4MzcsIDB4NDIsIDB4NGQsCi0JCQkweDU4LCAweDYzLCAweDZlLCAweDc5LCAweDg0LCAweDhmLCAweDlhLCAweGE1LAotCQkJMHhiMCwgMHhiYiwgMHhjNiwgMHhkMSwgMHhkYywgMHhlNywgMHhmMiwgMHhmZCwKLQkJCTB4MDgsIDB4MTMsIDB4MWUsIDB4MjksIDB4MzQsIDB4M2YsIDB4NGEsIDB4NTUsCi0JCQkweDYwLCAweDZiLCAweDc2LCAweDgxLCAweDhjLCAweDk3LCAweGEyLCAweGFkLAotCQkJMHhiOCwgMHhjMywgMHhjZSwgMHhkOSwgMHhlNCwgMHhlZiwgMHhmYSwgMHgwNSwKLQkJCTB4MTAsIDB4MWIsIDB4MjYsIDB4MzEsIDB4M2MsIDB4NDcsIDB4NTIsIDB4NWQsCi0JCQkweDY4LCAweDczLCAweDdlLCAweDg5LCAweDk0LCAweDlmLCAweGFhLCAweGI1LAotCQkJMHhjMCwgMHhjYiwgMHhkNiwgMHhlMSwgMHhlYywgMHhmNywgMHgwMiwgMHgwZCwKLQkJCTB4MTgsIDB4MjMsIDB4MmUsIDB4MzksIDB4NDQsIDB4NGYsIDB4NWEsIDB4NjUsCi0JCQkweDcwLCAweDdiLCAweDg2LCAweDkxLCAweDljLCAweGE3LCAweGIyLCAweGJkLAotCQkJMHhjOCwgMHhkMywgMHhkZSwgMHhlOSwgMHhmNCwgMHhmZiwgMHgwYSwgMHgxNSwKLQkJCTB4MjAsIDB4MmIsIDB4MzYsIDB4NDEsIDB4NGMsIDB4NTcsIDB4NjIsIDB4NmQsCi0JCQkweDc4LCAweDgzLCAweDhlLCAweDk5LCAweGE0LCAweGFmLCAweGJhLCAweGM1LAotCQkJMHhkMCwgMHhkYiwgMHhlNiwgMHhmMSwgMHhmYywgMHgwNywgMHgxMiwgMHgxZCwKLQkJCTB4MjgsIDB4MzMsIDB4M2UsIDB4NDksIDB4NTQsIDB4NWYsIDB4NmEsIDB4NzUsCi0JCQkweDgwLCAweDhiLCAweDk2LCAweGExLCAweGFjLCAweGI3LCAweGMyLCAweGNkLAotCQkJMHhkOCwgMHhlMywgMHhlZSwgMHhmOSwgMHgwNCwgMHgwZiwgMHgxYSwgMHgyNSwKLQkJCTB4MzAsIDB4M2IsIDB4NDYsIDB4NTEsIDB4NWMsIDB4NjcsIDB4NzIsIDB4N2QsCi0JCQkweDg4LCAweDkzLCAweDllLCAweGE5LCAweGI0LCAweGJmLCAweGNhLCAweGQ1LAotCQkJMHhlMCwgMHhlYiwgMHhmNiwgMHgwMSwgMHgwYywgMHgxNywgMHgyMiwgMHgyZCwKLQkJCTB4MzgsIDB4NDMsIDB4NGUsIDB4NTksIDB4NjQsIDB4NmYsIDB4N2EsIDB4ODUsCi0JCQkweDkwLCAweDliLCAweGE2LCAweGIxLCAweGJjLCAweGM3LCAweGQyLCAweGRkLAotCQkJMHhlOCwgMHhmMywgMHhmZSwgMHgwOSwgMHgxNCwgMHgxZiwgMHgyYSwgMHgzNSwKLQkJCTB4NDAsIDB4NGIsIDB4NTYsIDB4NjEsIDB4NmMsIDB4NzcsIDB4ODIsIDB4OGQsCi0JCQkweDk4LCAweGEzLCAweGFlLCAweGI5LCAweGM0LCAweGNmLCAweGRhLCAweGU1LAotCQkJMHhmMCwgMHhmYiwgMHgwNiwgMHgxMSwgMHgxYywgMHgyNywgMHgzMiwgMHgzZCwKLQkJCTB4NDgsIDB4NTMsIDB4NWUsIDB4NjksIDB4NzQsIDB4N2YsIDB4OGEsIDB4OTUsCi0JCQkweGEwLCAweGFiLCAweGI2LCAweGMxLCAweGNjLCAweGQ3LCAweGUyLCAweGVkLAotCQkJMHhmOCwgMHgwMywgMHgwZSwgMHgxOSwgMHgyNCwgMHgyZiwgMHgzYSwgMHg0NSwKLQkJCTB4NTAsIDB4NWIsIDB4NjYsIDB4NzEsIDB4N2MsIDB4ODcsIDB4OTIsIDB4OWQsCi0JCQkweGE4LCAweGIzLCAweGJlLCAweGM5LCAweGQ0LCAweGRmLCAweGVhLCAweGY1LAotCQkJMHgwMCwgMHgwZCwgMHgxYSwgMHgyNywgMHgzNCwgMHg0MSwgMHg0ZSwgMHg1YiwKLQkJCTB4NjgsIDB4NzUsIDB4ODIsIDB4OGYsIDB4OWMsIDB4YTksIDB4YjYsIDB4YzMsCi0JCQkweGQwLCAweGRkLCAweGVhLCAweGY3LCAweDA0LCAweDExLCAweDFlLCAweDJiLAotCQkJMHgzOCwgMHg0NSwgMHg1MiwgMHg1ZiwgMHg2YywgMHg3OSwgMHg4NiwgMHg5MywKLQkJCTB4YTAsIDB4YWQsIDB4YmEsIDB4YzcsIDB4ZDQsIDB4ZTEsIDB4ZWUsIDB4ZmIsCi0JCQkweDA4LCAweDE1LCAweDIyLCAweDJmLCAweDNjLCAweDQ5LCAweDU2LCAweDYzLAotCQkJMHg3MCwgMHg3ZCwgMHg4YSwgMHg5NywgMHhhNCwgMHhiMSwgMHhiZSwgMHhjYiwKLQkJCTB4ZDgsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4MGMsIDB4MTksIDB4MjYsIDB4MzMsCi0JCQkweDQwLCAweDRkLCAweDVhLCAweDY3LCAweDc0LCAweDgxLCAweDhlLCAweDliLAotCQkJMHhhOCwgMHhiNSwgMHhjMiwgMHhjZiwgMHhkYywgMHhlOSwgMHhmNiwgMHgwMywKLQkJCTB4MTAsIDB4MWQsIDB4MmEsIDB4MzcsIDB4NDQsIDB4NTEsIDB4NWUsIDB4NmIsCi0JCQkweDc4LCAweDg1LCAweDkyLCAweDlmLCAweGFjLCAweGI5LCAweGM2LCAweGQzLAotCQkJMHhlMCwgMHhlZCwgMHhmYSwgMHgwNywgMHgxNCwgMHgyMSwgMHgyZSwgMHgzYiwKLQkJCTB4NDgsIDB4NTUsIDB4NjIsIDB4NmYsIDB4N2MsIDB4ODksIDB4OTYsIDB4YTMsCi0JCQkweGIwLCAweGJkLCAweGNhLCAweGQ3LCAweGU0LCAweGYxLCAweGZlLCAweDBiLAotCQkJMHgxOCwgMHgyNSwgMHgzMiwgMHgzZiwgMHg0YywgMHg1OSwgMHg2NiwgMHg3MywKLQkJCTB4ODAsIDB4OGQsIDB4OWEsIDB4YTcsIDB4YjQsIDB4YzEsIDB4Y2UsIDB4ZGIsCi0JCQkweGU4LCAweGY1LCAweDAyLCAweDBmLCAweDFjLCAweDI5LCAweDM2LCAweDQzLAotCQkJMHg1MCwgMHg1ZCwgMHg2YSwgMHg3NywgMHg4NCwgMHg5MSwgMHg5ZSwgMHhhYiwKLQkJCTB4YjgsIDB4YzUsIDB4ZDIsIDB4ZGYsIDB4ZWMsIDB4ZjksIDB4MDYsIDB4MTMsCi0JCQkweDIwLCAweDJkLCAweDNhLCAweDQ3LCAweDU0LCAweDYxLCAweDZlLCAweDdiLAotCQkJMHg4OCwgMHg5NSwgMHhhMiwgMHhhZiwgMHhiYywgMHhjOSwgMHhkNiwgMHhlMywKLQkJCTB4ZjAsIDB4ZmQsIDB4MGEsIDB4MTcsIDB4MjQsIDB4MzEsIDB4M2UsIDB4NGIsCi0JCQkweDU4LCAweDY1LCAweDcyLCAweDdmLCAweDhjLCAweDk5LCAweGE2LCAweGIzLAotCQkJMHhjMCwgMHhjZCwgMHhkYSwgMHhlNywgMHhmNCwgMHgwMSwgMHgwZSwgMHgxYiwKLQkJCTB4MjgsIDB4MzUsIDB4NDIsIDB4NGYsIDB4NWMsIDB4NjksIDB4NzYsIDB4ODMsCi0JCQkweDkwLCAweDlkLCAweGFhLCAweGI3LCAweGM0LCAweGQxLCAweGRlLCAweGViLAotCQkJMHhmOCwgMHgwNSwgMHgxMiwgMHgxZiwgMHgyYywgMHgzOSwgMHg0NiwgMHg1MywKLQkJCTB4NjAsIDB4NmQsIDB4N2EsIDB4ODcsIDB4OTQsIDB4YTEsIDB4YWUsIDB4YmIsCi0JCQkweGM4LCAweGQ1LCAweGUyLCAweGVmLCAweGZjLCAweDA5LCAweDE2LCAweDIzLAotCQkJMHgzMCwgMHgzZCwgMHg0YSwgMHg1NywgMHg2NCwgMHg3MSwgMHg3ZSwgMHg4YiwKLQkJCTB4OTgsIDB4YTUsIDB4YjIsIDB4YmYsIDB4Y2MsIDB4ZDksIDB4ZTYsIDB4ZjMsCi0JCQkweDAwLCAweDBmLCAweDFlLCAweDJkLCAweDNjLCAweDRiLCAweDVhLCAweDY5LAotCQkJMHg3OCwgMHg4NywgMHg5NiwgMHhhNSwgMHhiNCwgMHhjMywgMHhkMiwgMHhlMSwKLQkJCTB4ZjAsIDB4ZmYsIDB4MGUsIDB4MWQsIDB4MmMsIDB4M2IsIDB4NGEsIDB4NTksCi0JCQkweDY4LCAweDc3LCAweDg2LCAweDk1LCAweGE0LCAweGIzLCAweGMyLCAweGQxLAotCQkJMHhlMCwgMHhlZiwgMHhmZSwgMHgwZCwgMHgxYywgMHgyYiwgMHgzYSwgMHg0OSwKLQkJCTB4NTgsIDB4NjcsIDB4NzYsIDB4ODUsIDB4OTQsIDB4YTMsIDB4YjIsIDB4YzEsCi0JCQkweGQwLCAweGRmLCAweGVlLCAweGZkLCAweDBjLCAweDFiLCAweDJhLCAweDM5LAotCQkJMHg0OCwgMHg1NywgMHg2NiwgMHg3NSwgMHg4NCwgMHg5MywgMHhhMiwgMHhiMSwKLQkJCTB4YzAsIDB4Y2YsIDB4ZGUsIDB4ZWQsIDB4ZmMsIDB4MGIsIDB4MWEsIDB4MjksCi0JCQkweDM4LCAweDQ3LCAweDU2LCAweDY1LCAweDc0LCAweDgzLCAweDkyLCAweGExLAotCQkJMHhiMCwgMHhiZiwgMHhjZSwgMHhkZCwgMHhlYywgMHhmYiwgMHgwYSwgMHgxOSwKLQkJCTB4MjgsIDB4MzcsIDB4NDYsIDB4NTUsIDB4NjQsIDB4NzMsIDB4ODIsIDB4OTEsCi0JCQkweGEwLCAweGFmLCAweGJlLCAweGNkLCAweGRjLCAweGViLCAweGZhLCAweDA5LAotCQkJMHgxOCwgMHgyNywgMHgzNiwgMHg0NSwgMHg1NCwgMHg2MywgMHg3MiwgMHg4MSwKLQkJCTB4OTAsIDB4OWYsIDB4YWUsIDB4YmQsIDB4Y2MsIDB4ZGIsIDB4ZWEsIDB4ZjksCi0JCQkweDA4LCAweDE3LCAweDI2LCAweDM1LCAweDQ0LCAweDUzLCAweDYyLCAweDcxLAotCQkJMHg4MCwgMHg4ZiwgMHg5ZSwgMHhhZCwgMHhiYywgMHhjYiwgMHhkYSwgMHhlOSwKLQkJCTB4ZjgsIDB4MDcsIDB4MTYsIDB4MjUsIDB4MzQsIDB4NDMsIDB4NTIsIDB4NjEsCi0JCQkweDcwLCAweDdmLCAweDhlLCAweDlkLCAweGFjLCAweGJiLCAweGNhLCAweGQ5LAotCQkJMHhlOCwgMHhmNywgMHgwNiwgMHgxNSwgMHgyNCwgMHgzMywgMHg0MiwgMHg1MSwKLQkJCTB4NjAsIDB4NmYsIDB4N2UsIDB4OGQsIDB4OWMsIDB4YWIsIDB4YmEsIDB4YzksCi0JCQkweGQ4LCAweGU3LCAweGY2LCAweDA1LCAweDE0LCAweDIzLCAweDMyLCAweDQxLAotCQkJMHg1MCwgMHg1ZiwgMHg2ZSwgMHg3ZCwgMHg4YywgMHg5YiwgMHhhYSwgMHhiOSwKLQkJCTB4YzgsIDB4ZDcsIDB4ZTYsIDB4ZjUsIDB4MDQsIDB4MTMsIDB4MjIsIDB4MzEsCi0JCQkweDQwLCAweDRmLCAweDVlLCAweDZkLCAweDdjLCAweDhiLCAweDlhLCAweGE5LAotCQkJMHhiOCwgMHhjNywgMHhkNiwgMHhlNSwgMHhmNCwgMHgwMywgMHgxMiwgMHgyMSwKLQkJCTB4MzAsIDB4M2YsIDB4NGUsIDB4NWQsIDB4NmMsIDB4N2IsIDB4OGEsIDB4OTksCi0JCQkweGE4LCAweGI3LCAweGM2LCAweGQ1LCAweGU0LCAweGYzLCAweDAyLCAweDExLAotCQkJMHgyMCwgMHgyZiwgMHgzZSwgMHg0ZCwgMHg1YywgMHg2YiwgMHg3YSwgMHg4OSwKLQkJCTB4OTgsIDB4YTcsIDB4YjYsIDB4YzUsIDB4ZDQsIDB4ZTMsIDB4ZjIsIDB4MDEsCi0JCQkweDEwLCAweDFmLCAweDJlLCAweDNkLCAweDRjLCAweDViLCAweDZhLCAweDc5LAotCQkJMHg4OCwgMHg5NywgMHhhNiwgMHhiNSwgMHhjNCwgMHhkMywgMHhlMiwgMHhmMSwKLQkJCTB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCi0JCQkweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmLAotCQkJMHgxMCwgMHgyMSwgMHgzMiwgMHg0MywgMHg1NCwgMHg2NSwgMHg3NiwgMHg4NywKLQkJCTB4OTgsIDB4YTksIDB4YmEsIDB4Y2IsIDB4ZGMsIDB4ZWQsIDB4ZmUsIDB4MGYsCi0JCQkweDIwLCAweDMxLCAweDQyLCAweDUzLCAweDY0LCAweDc1LCAweDg2LCAweDk3LAotCQkJMHhhOCwgMHhiOSwgMHhjYSwgMHhkYiwgMHhlYywgMHhmZCwgMHgwZSwgMHgxZiwKLQkJCTB4MzAsIDB4NDEsIDB4NTIsIDB4NjMsIDB4NzQsIDB4ODUsIDB4OTYsIDB4YTcsCi0JCQkweGI4LCAweGM5LCAweGRhLCAweGViLCAweGZjLCAweDBkLCAweDFlLCAweDJmLAotCQkJMHg0MCwgMHg1MSwgMHg2MiwgMHg3MywgMHg4NCwgMHg5NSwgMHhhNiwgMHhiNywKLQkJCTB4YzgsIDB4ZDksIDB4ZWEsIDB4ZmIsIDB4MGMsIDB4MWQsIDB4MmUsIDB4M2YsCi0JCQkweDUwLCAweDYxLCAweDcyLCAweDgzLCAweDk0LCAweGE1LCAweGI2LCAweGM3LAotCQkJMHhkOCwgMHhlOSwgMHhmYSwgMHgwYiwgMHgxYywgMHgyZCwgMHgzZSwgMHg0ZiwKLQkJCTB4NjAsIDB4NzEsIDB4ODIsIDB4OTMsIDB4YTQsIDB4YjUsIDB4YzYsIDB4ZDcsCi0JCQkweGU4LCAweGY5LCAweDBhLCAweDFiLCAweDJjLCAweDNkLCAweDRlLCAweDVmLAotCQkJMHg3MCwgMHg4MSwgMHg5MiwgMHhhMywgMHhiNCwgMHhjNSwgMHhkNiwgMHhlNywKLQkJCTB4ZjgsIDB4MDksIDB4MWEsIDB4MmIsIDB4M2MsIDB4NGQsIDB4NWUsIDB4NmYsCi0JCQkweDgwLCAweDkxLCAweGEyLCAweGIzLCAweGM0LCAweGQ1LCAweGU2LCAweGY3LAotCQkJMHgwOCwgMHgxOSwgMHgyYSwgMHgzYiwgMHg0YywgMHg1ZCwgMHg2ZSwgMHg3ZiwKLQkJCTB4OTAsIDB4YTEsIDB4YjIsIDB4YzMsIDB4ZDQsIDB4ZTUsIDB4ZjYsIDB4MDcsCi0JCQkweDE4LCAweDI5LCAweDNhLCAweDRiLCAweDVjLCAweDZkLCAweDdlLCAweDhmLAotCQkJMHhhMCwgMHhiMSwgMHhjMiwgMHhkMywgMHhlNCwgMHhmNSwgMHgwNiwgMHgxNywKLQkJCTB4MjgsIDB4MzksIDB4NGEsIDB4NWIsIDB4NmMsIDB4N2QsIDB4OGUsIDB4OWYsCi0JCQkweGIwLCAweGMxLCAweGQyLCAweGUzLCAweGY0LCAweDA1LCAweDE2LCAweDI3LAotCQkJMHgzOCwgMHg0OSwgMHg1YSwgMHg2YiwgMHg3YywgMHg4ZCwgMHg5ZSwgMHhhZiwKLQkJCTB4YzAsIDB4ZDEsIDB4ZTIsIDB4ZjMsIDB4MDQsIDB4MTUsIDB4MjYsIDB4MzcsCi0JCQkweDQ4LCAweDU5LCAweDZhLCAweDdiLCAweDhjLCAweDlkLCAweGFlLCAweGJmLAotCQkJMHhkMCwgMHhlMSwgMHhmMiwgMHgwMywgMHgxNCwgMHgyNSwgMHgzNiwgMHg0NywKLQkJCTB4NTgsIDB4NjksIDB4N2EsIDB4OGIsIDB4OWMsIDB4YWQsIDB4YmUsIDB4Y2YsCi0JCQkweGUwLCAweGYxLCAweDAyLCAweDEzLCAweDI0LCAweDM1LCAweDQ2LCAweDU3LAotCQkJMHg2OCwgMHg3OSwgMHg4YSwgMHg5YiwgMHhhYywgMHhiZCwgMHhjZSwgMHhkZiwKLQkJCTB4ZjAsIDB4MDEsIDB4MTIsIDB4MjMsIDB4MzQsIDB4NDUsIDB4NTYsIDB4NjcsCi0JCQkweDc4LCAweDg5LCAweDlhLCAweGFiLCAweGJjLCAweGNkLCAweGRlLCAweGVmLAotCQkJMHgwMCwgMHgxMywgMHgyNiwgMHgzOSwgMHg0YywgMHg1ZiwgMHg3MiwgMHg4NSwKLQkJCTB4OTgsIDB4YWIsIDB4YmUsIDB4ZDEsIDB4ZTQsIDB4ZjcsIDB4MGEsIDB4MWQsCi0JCQkweDMwLCAweDQzLCAweDU2LCAweDY5LCAweDdjLCAweDhmLCAweGEyLCAweGI1LAotCQkJMHhjOCwgMHhkYiwgMHhlZSwgMHgwMSwgMHgxNCwgMHgyNywgMHgzYSwgMHg0ZCwKLQkJCTB4NjAsIDB4NzMsIDB4ODYsIDB4OTksIDB4YWMsIDB4YmYsIDB4ZDIsIDB4ZTUsCi0JCQkweGY4LCAweDBiLCAweDFlLCAweDMxLCAweDQ0LCAweDU3LCAweDZhLCAweDdkLAotCQkJMHg5MCwgMHhhMywgMHhiNiwgMHhjOSwgMHhkYywgMHhlZiwgMHgwMiwgMHgxNSwKLQkJCTB4MjgsIDB4M2IsIDB4NGUsIDB4NjEsIDB4NzQsIDB4ODcsIDB4OWEsIDB4YWQsCi0JCQkweGMwLCAweGQzLCAweGU2LCAweGY5LCAweDBjLCAweDFmLCAweDMyLCAweDQ1LAotCQkJMHg1OCwgMHg2YiwgMHg3ZSwgMHg5MSwgMHhhNCwgMHhiNywgMHhjYSwgMHhkZCwKLQkJCTB4ZjAsIDB4MDMsIDB4MTYsIDB4MjksIDB4M2MsIDB4NGYsIDB4NjIsIDB4NzUsCi0JCQkweDg4LCAweDliLCAweGFlLCAweGMxLCAweGQ0LCAweGU3LCAweGZhLCAweDBkLAotCQkJMHgyMCwgMHgzMywgMHg0NiwgMHg1OSwgMHg2YywgMHg3ZiwgMHg5MiwgMHhhNSwKLQkJCTB4YjgsIDB4Y2IsIDB4ZGUsIDB4ZjEsIDB4MDQsIDB4MTcsIDB4MmEsIDB4M2QsCi0JCQkweDUwLCAweDYzLCAweDc2LCAweDg5LCAweDljLCAweGFmLCAweGMyLCAweGQ1LAotCQkJMHhlOCwgMHhmYiwgMHgwZSwgMHgyMSwgMHgzNCwgMHg0NywgMHg1YSwgMHg2ZCwKLQkJCTB4ODAsIDB4OTMsIDB4YTYsIDB4YjksIDB4Y2MsIDB4ZGYsIDB4ZjIsIDB4MDUsCi0JCQkweDE4LCAweDJiLCAweDNlLCAweDUxLCAweDY0LCAweDc3LCAweDhhLCAweDlkLAotCQkJMHhiMCwgMHhjMywgMHhkNiwgMHhlOSwgMHhmYywgMHgwZiwgMHgyMiwgMHgzNSwKLQkJCTB4NDgsIDB4NWIsIDB4NmUsIDB4ODEsIDB4OTQsIDB4YTcsIDB4YmEsIDB4Y2QsCi0JCQkweGUwLCAweGYzLCAweDA2LCAweDE5LCAweDJjLCAweDNmLCAweDUyLCAweDY1LAotCQkJMHg3OCwgMHg4YiwgMHg5ZSwgMHhiMSwgMHhjNCwgMHhkNywgMHhlYSwgMHhmZCwKLQkJCTB4MTAsIDB4MjMsIDB4MzYsIDB4NDksIDB4NWMsIDB4NmYsIDB4ODIsIDB4OTUsCi0JCQkweGE4LCAweGJiLCAweGNlLCAweGUxLCAweGY0LCAweDA3LCAweDFhLCAweDJkLAotCQkJMHg0MCwgMHg1MywgMHg2NiwgMHg3OSwgMHg4YywgMHg5ZiwgMHhiMiwgMHhjNSwKLQkJCTB4ZDgsIDB4ZWIsIDB4ZmUsIDB4MTEsIDB4MjQsIDB4MzcsIDB4NGEsIDB4NWQsCi0JCQkweDcwLCAweDgzLCAweDk2LCAweGE5LCAweGJjLCAweGNmLCAweGUyLCAweGY1LAotCQkJMHgwOCwgMHgxYiwgMHgyZSwgMHg0MSwgMHg1NCwgMHg2NywgMHg3YSwgMHg4ZCwKLQkJCTB4YTAsIDB4YjMsIDB4YzYsIDB4ZDksIDB4ZWMsIDB4ZmYsIDB4MTIsIDB4MjUsCi0JCQkweDM4LCAweDRiLCAweDVlLCAweDcxLCAweDg0LCAweDk3LCAweGFhLCAweGJkLAotCQkJMHhkMCwgMHhlMywgMHhmNiwgMHgwOSwgMHgxYywgMHgyZiwgMHg0MiwgMHg1NSwKLQkJCTB4NjgsIDB4N2IsIDB4OGUsIDB4YTEsIDB4YjQsIDB4YzcsIDB4ZGEsIDB4ZWQsCi0JCQkweDAwLCAweDE1LCAweDJhLCAweDNmLCAweDU0LCAweDY5LCAweDdlLCAweDkzLAotCQkJMHhhOCwgMHhiZCwgMHhkMiwgMHhlNywgMHhmYywgMHgxMSwgMHgyNiwgMHgzYiwKLQkJCTB4NTAsIDB4NjUsIDB4N2EsIDB4OGYsIDB4YTQsIDB4YjksIDB4Y2UsIDB4ZTMsCi0JCQkweGY4LCAweDBkLCAweDIyLCAweDM3LCAweDRjLCAweDYxLCAweDc2LCAweDhiLAotCQkJMHhhMCwgMHhiNSwgMHhjYSwgMHhkZiwgMHhmNCwgMHgwOSwgMHgxZSwgMHgzMywKLQkJCTB4NDgsIDB4NWQsIDB4NzIsIDB4ODcsIDB4OWMsIDB4YjEsIDB4YzYsIDB4ZGIsCi0JCQkweGYwLCAweDA1LCAweDFhLCAweDJmLCAweDQ0LCAweDU5LCAweDZlLCAweDgzLAotCQkJMHg5OCwgMHhhZCwgMHhjMiwgMHhkNywgMHhlYywgMHgwMSwgMHgxNiwgMHgyYiwKLQkJCTB4NDAsIDB4NTUsIDB4NmEsIDB4N2YsIDB4OTQsIDB4YTksIDB4YmUsIDB4ZDMsCi0JCQkweGU4LCAweGZkLCAweDEyLCAweDI3LCAweDNjLCAweDUxLCAweDY2LCAweDdiLAotCQkJMHg5MCwgMHhhNSwgMHhiYSwgMHhjZiwgMHhlNCwgMHhmOSwgMHgwZSwgMHgyMywKLQkJCTB4MzgsIDB4NGQsIDB4NjIsIDB4NzcsIDB4OGMsIDB4YTEsIDB4YjYsIDB4Y2IsCi0JCQkweGUwLCAweGY1LCAweDBhLCAweDFmLCAweDM0LCAweDQ5LCAweDVlLCAweDczLAotCQkJMHg4OCwgMHg5ZCwgMHhiMiwgMHhjNywgMHhkYywgMHhmMSwgMHgwNiwgMHgxYiwKLQkJCTB4MzAsIDB4NDUsIDB4NWEsIDB4NmYsIDB4ODQsIDB4OTksIDB4YWUsIDB4YzMsCi0JCQkweGQ4LCAweGVkLCAweDAyLCAweDE3LCAweDJjLCAweDQxLCAweDU2LCAweDZiLAotCQkJMHg4MCwgMHg5NSwgMHhhYSwgMHhiZiwgMHhkNCwgMHhlOSwgMHhmZSwgMHgxMywKLQkJCTB4MjgsIDB4M2QsIDB4NTIsIDB4NjcsIDB4N2MsIDB4OTEsIDB4YTYsIDB4YmIsCi0JCQkweGQwLCAweGU1LCAweGZhLCAweDBmLCAweDI0LCAweDM5LCAweDRlLCAweDYzLAotCQkJMHg3OCwgMHg4ZCwgMHhhMiwgMHhiNywgMHhjYywgMHhlMSwgMHhmNiwgMHgwYiwKLQkJCTB4MjAsIDB4MzUsIDB4NGEsIDB4NWYsIDB4NzQsIDB4ODksIDB4OWUsIDB4YjMsCi0JCQkweGM4LCAweGRkLCAweGYyLCAweDA3LCAweDFjLCAweDMxLCAweDQ2LCAweDViLAotCQkJMHg3MCwgMHg4NSwgMHg5YSwgMHhhZiwgMHhjNCwgMHhkOSwgMHhlZSwgMHgwMywKLQkJCTB4MTgsIDB4MmQsIDB4NDIsIDB4NTcsIDB4NmMsIDB4ODEsIDB4OTYsIDB4YWIsCi0JCQkweGMwLCAweGQ1LCAweGVhLCAweGZmLCAweDE0LCAweDI5LCAweDNlLCAweDUzLAotCQkJMHg2OCwgMHg3ZCwgMHg5MiwgMHhhNywgMHhiYywgMHhkMSwgMHhlNiwgMHhmYiwKLQkJCTB4MTAsIDB4MjUsIDB4M2EsIDB4NGYsIDB4NjQsIDB4NzksIDB4OGUsIDB4YTMsCi0JCQkweGI4LCAweGNkLCAweGUyLCAweGY3LCAweDBjLCAweDIxLCAweDM2LCAweDRiLAotCQkJMHg2MCwgMHg3NSwgMHg4YSwgMHg5ZiwgMHhiNCwgMHhjOSwgMHhkZSwgMHhmMywKLQkJCTB4MDgsIDB4MWQsIDB4MzIsIDB4NDcsIDB4NWMsIDB4NzEsIDB4ODYsIDB4OWIsCi0JCQkweGIwLCAweGM1LCAweGRhLCAweGVmLCAweDA0LCAweDE5LCAweDJlLCAweDQzLAotCQkJMHg1OCwgMHg2ZCwgMHg4MiwgMHg5NywgMHhhYywgMHhjMSwgMHhkNiwgMHhlYiwKLQkJCTB4MDAsIDB4MTcsIDB4MmUsIDB4NDUsIDB4NWMsIDB4NzMsIDB4OGEsIDB4YTEsCi0JCQkweGI4LCAweGNmLCAweGU2LCAweGZkLCAweDE0LCAweDJiLCAweDQyLCAweDU5LAotCQkJMHg3MCwgMHg4NywgMHg5ZSwgMHhiNSwgMHhjYywgMHhlMywgMHhmYSwgMHgxMSwKLQkJCTB4MjgsIDB4M2YsIDB4NTYsIDB4NmQsIDB4ODQsIDB4OWIsIDB4YjIsIDB4YzksCi0JCQkweGUwLCAweGY3LCAweDBlLCAweDI1LCAweDNjLCAweDUzLCAweDZhLCAweDgxLAotCQkJMHg5OCwgMHhhZiwgMHhjNiwgMHhkZCwgMHhmNCwgMHgwYiwgMHgyMiwgMHgzOSwKLQkJCTB4NTAsIDB4NjcsIDB4N2UsIDB4OTUsIDB4YWMsIDB4YzMsIDB4ZGEsIDB4ZjEsCi0JCQkweDA4LCAweDFmLCAweDM2LCAweDRkLCAweDY0LCAweDdiLCAweDkyLCAweGE5LAotCQkJMHhjMCwgMHhkNywgMHhlZSwgMHgwNSwgMHgxYywgMHgzMywgMHg0YSwgMHg2MSwKLQkJCTB4NzgsIDB4OGYsIDB4YTYsIDB4YmQsIDB4ZDQsIDB4ZWIsIDB4MDIsIDB4MTksCi0JCQkweDMwLCAweDQ3LCAweDVlLCAweDc1LCAweDhjLCAweGEzLCAweGJhLCAweGQxLAotCQkJMHhlOCwgMHhmZiwgMHgxNiwgMHgyZCwgMHg0NCwgMHg1YiwgMHg3MiwgMHg4OSwKLQkJCTB4YTAsIDB4YjcsIDB4Y2UsIDB4ZTUsIDB4ZmMsIDB4MTMsIDB4MmEsIDB4NDEsCi0JCQkweDU4LCAweDZmLCAweDg2LCAweDlkLCAweGI0LCAweGNiLCAweGUyLCAweGY5LAotCQkJMHgxMCwgMHgyNywgMHgzZSwgMHg1NSwgMHg2YywgMHg4MywgMHg5YSwgMHhiMSwKLQkJCTB4YzgsIDB4ZGYsIDB4ZjYsIDB4MGQsIDB4MjQsIDB4M2IsIDB4NTIsIDB4NjksCi0JCQkweDgwLCAweDk3LCAweGFlLCAweGM1LCAweGRjLCAweGYzLCAweDBhLCAweDIxLAotCQkJMHgzOCwgMHg0ZiwgMHg2NiwgMHg3ZCwgMHg5NCwgMHhhYiwgMHhjMiwgMHhkOSwKLQkJCTB4ZjAsIDB4MDcsIDB4MWUsIDB4MzUsIDB4NGMsIDB4NjMsIDB4N2EsIDB4OTEsCi0JCQkweGE4LCAweGJmLCAweGQ2LCAweGVkLCAweDA0LCAweDFiLCAweDMyLCAweDQ5LAotCQkJMHg2MCwgMHg3NywgMHg4ZSwgMHhhNSwgMHhiYywgMHhkMywgMHhlYSwgMHgwMSwKLQkJCTB4MTgsIDB4MmYsIDB4NDYsIDB4NWQsIDB4NzQsIDB4OGIsIDB4YTIsIDB4YjksCi0JCQkweGQwLCAweGU3LCAweGZlLCAweDE1LCAweDJjLCAweDQzLCAweDVhLCAweDcxLAotCQkJMHg4OCwgMHg5ZiwgMHhiNiwgMHhjZCwgMHhlNCwgMHhmYiwgMHgxMiwgMHgyOSwKLQkJCTB4NDAsIDB4NTcsIDB4NmUsIDB4ODUsIDB4OWMsIDB4YjMsIDB4Y2EsIDB4ZTEsCi0JCQkweGY4LCAweDBmLCAweDI2LCAweDNkLCAweDU0LCAweDZiLCAweDgyLCAweDk5LAotCQkJMHhiMCwgMHhjNywgMHhkZSwgMHhmNSwgMHgwYywgMHgyMywgMHgzYSwgMHg1MSwKLQkJCTB4NjgsIDB4N2YsIDB4OTYsIDB4YWQsIDB4YzQsIDB4ZGIsIDB4ZjIsIDB4MDksCi0JCQkweDIwLCAweDM3LCAweDRlLCAweDY1LCAweDdjLCAweDkzLCAweGFhLCAweGMxLAotCQkJMHhkOCwgMHhlZiwgMHgwNiwgMHgxZCwgMHgzNCwgMHg0YiwgMHg2MiwgMHg3OSwKLQkJCTB4OTAsIDB4YTcsIDB4YmUsIDB4ZDUsIDB4ZWMsIDB4MDMsIDB4MWEsIDB4MzEsCi0JCQkweDQ4LCAweDVmLCAweDc2LCAweDhkLCAweGE0LCAweGJiLCAweGQyLCAweGU5LAotCQkJMHgwMCwgMHgxOSwgMHgzMiwgMHg0YiwgMHg2NCwgMHg3ZCwgMHg5NiwgMHhhZiwKLQkJCTB4YzgsIDB4ZTEsIDB4ZmEsIDB4MTMsIDB4MmMsIDB4NDUsIDB4NWUsIDB4NzcsCi0JCQkweDkwLCAweGE5LCAweGMyLCAweGRiLCAweGY0LCAweDBkLCAweDI2LCAweDNmLAotCQkJMHg1OCwgMHg3MSwgMHg4YSwgMHhhMywgMHhiYywgMHhkNSwgMHhlZSwgMHgwNywKLQkJCTB4MjAsIDB4MzksIDB4NTIsIDB4NmIsIDB4ODQsIDB4OWQsIDB4YjYsIDB4Y2YsCi0JCQkweGU4LCAweDAxLCAweDFhLCAweDMzLCAweDRjLCAweDY1LCAweDdlLCAweDk3LAotCQkJMHhiMCwgMHhjOSwgMHhlMiwgMHhmYiwgMHgxNCwgMHgyZCwgMHg0NiwgMHg1ZiwKLQkJCTB4NzgsIDB4OTEsIDB4YWEsIDB4YzMsIDB4ZGMsIDB4ZjUsIDB4MGUsIDB4MjcsCi0JCQkweDQwLCAweDU5LCAweDcyLCAweDhiLCAweGE0LCAweGJkLCAweGQ2LCAweGVmLAotCQkJMHgwOCwgMHgyMSwgMHgzYSwgMHg1MywgMHg2YywgMHg4NSwgMHg5ZSwgMHhiNywKLQkJCTB4ZDAsIDB4ZTksIDB4MDIsIDB4MWIsIDB4MzQsIDB4NGQsIDB4NjYsIDB4N2YsCi0JCQkweDk4LCAweGIxLCAweGNhLCAweGUzLCAweGZjLCAweDE1LCAweDJlLCAweDQ3LAotCQkJMHg2MCwgMHg3OSwgMHg5MiwgMHhhYiwgMHhjNCwgMHhkZCwgMHhmNiwgMHgwZiwKLQkJCTB4MjgsIDB4NDEsIDB4NWEsIDB4NzMsIDB4OGMsIDB4YTUsIDB4YmUsIDB4ZDcsCi0JCQkweGYwLCAweDA5LCAweDIyLCAweDNiLCAweDU0LCAweDZkLCAweDg2LCAweDlmLAotCQkJMHhiOCwgMHhkMSwgMHhlYSwgMHgwMywgMHgxYywgMHgzNSwgMHg0ZSwgMHg2NywKLQkJCTB4ODAsIDB4OTksIDB4YjIsIDB4Y2IsIDB4ZTQsIDB4ZmQsIDB4MTYsIDB4MmYsCi0JCQkweDQ4LCAweDYxLCAweDdhLCAweDkzLCAweGFjLCAweGM1LCAweGRlLCAweGY3LAotCQkJMHgxMCwgMHgyOSwgMHg0MiwgMHg1YiwgMHg3NCwgMHg4ZCwgMHhhNiwgMHhiZiwKLQkJCTB4ZDgsIDB4ZjEsIDB4MGEsIDB4MjMsIDB4M2MsIDB4NTUsIDB4NmUsIDB4ODcsCi0JCQkweGEwLCAweGI5LCAweGQyLCAweGViLCAweDA0LCAweDFkLCAweDM2LCAweDRmLAotCQkJMHg2OCwgMHg4MSwgMHg5YSwgMHhiMywgMHhjYywgMHhlNSwgMHhmZSwgMHgxNywKLQkJCTB4MzAsIDB4NDksIDB4NjIsIDB4N2IsIDB4OTQsIDB4YWQsIDB4YzYsIDB4ZGYsCi0JCQkweGY4LCAweDExLCAweDJhLCAweDQzLCAweDVjLCAweDc1LCAweDhlLCAweGE3LAotCQkJMHhjMCwgMHhkOSwgMHhmMiwgMHgwYiwgMHgyNCwgMHgzZCwgMHg1NiwgMHg2ZiwKLQkJCTB4ODgsIDB4YTEsIDB4YmEsIDB4ZDMsIDB4ZWMsIDB4MDUsIDB4MWUsIDB4MzcsCi0JCQkweDUwLCAweDY5LCAweDgyLCAweDliLCAweGI0LCAweGNkLCAweGU2LCAweGZmLAotCQkJMHgxOCwgMHgzMSwgMHg0YSwgMHg2MywgMHg3YywgMHg5NSwgMHhhZSwgMHhjNywKLQkJCTB4ZTAsIDB4ZjksIDB4MTIsIDB4MmIsIDB4NDQsIDB4NWQsIDB4NzYsIDB4OGYsCi0JCQkweGE4LCAweGMxLCAweGRhLCAweGYzLCAweDBjLCAweDI1LCAweDNlLCAweDU3LAotCQkJMHg3MCwgMHg4OSwgMHhhMiwgMHhiYiwgMHhkNCwgMHhlZCwgMHgwNiwgMHgxZiwKLQkJCTB4MzgsIDB4NTEsIDB4NmEsIDB4ODMsIDB4OWMsIDB4YjUsIDB4Y2UsIDB4ZTcsCi0JCQkweDAwLCAweDFiLCAweDM2LCAweDUxLCAweDZjLCAweDg3LCAweGEyLCAweGJkLAotCQkJMHhkOCwgMHhmMywgMHgwZSwgMHgyOSwgMHg0NCwgMHg1ZiwgMHg3YSwgMHg5NSwKLQkJCTB4YjAsIDB4Y2IsIDB4ZTYsIDB4MDEsIDB4MWMsIDB4MzcsIDB4NTIsIDB4NmQsCi0JCQkweDg4LCAweGEzLCAweGJlLCAweGQ5LCAweGY0LCAweDBmLCAweDJhLCAweDQ1LAotCQkJMHg2MCwgMHg3YiwgMHg5NiwgMHhiMSwgMHhjYywgMHhlNywgMHgwMiwgMHgxZCwKLQkJCTB4MzgsIDB4NTMsIDB4NmUsIDB4ODksIDB4YTQsIDB4YmYsIDB4ZGEsIDB4ZjUsCi0JCQkweDEwLCAweDJiLCAweDQ2LCAweDYxLCAweDdjLCAweDk3LCAweGIyLCAweGNkLAotCQkJMHhlOCwgMHgwMywgMHgxZSwgMHgzOSwgMHg1NCwgMHg2ZiwgMHg4YSwgMHhhNSwKLQkJCTB4YzAsIDB4ZGIsIDB4ZjYsIDB4MTEsIDB4MmMsIDB4NDcsIDB4NjIsIDB4N2QsCi0JCQkweDk4LCAweGIzLCAweGNlLCAweGU5LCAweDA0LCAweDFmLCAweDNhLCAweDU1LAotCQkJMHg3MCwgMHg4YiwgMHhhNiwgMHhjMSwgMHhkYywgMHhmNywgMHgxMiwgMHgyZCwKLQkJCTB4NDgsIDB4NjMsIDB4N2UsIDB4OTksIDB4YjQsIDB4Y2YsIDB4ZWEsIDB4MDUsCi0JCQkweDIwLCAweDNiLCAweDU2LCAweDcxLCAweDhjLCAweGE3LCAweGMyLCAweGRkLAotCQkJMHhmOCwgMHgxMywgMHgyZSwgMHg0OSwgMHg2NCwgMHg3ZiwgMHg5YSwgMHhiNSwKLQkJCTB4ZDAsIDB4ZWIsIDB4MDYsIDB4MjEsIDB4M2MsIDB4NTcsIDB4NzIsIDB4OGQsCi0JCQkweGE4LCAweGMzLCAweGRlLCAweGY5LCAweDE0LCAweDJmLCAweDRhLCAweDY1LAotCQkJMHg4MCwgMHg5YiwgMHhiNiwgMHhkMSwgMHhlYywgMHgwNywgMHgyMiwgMHgzZCwKLQkJCTB4NTgsIDB4NzMsIDB4OGUsIDB4YTksIDB4YzQsIDB4ZGYsIDB4ZmEsIDB4MTUsCi0JCQkweDMwLCAweDRiLCAweDY2LCAweDgxLCAweDljLCAweGI3LCAweGQyLCAweGVkLAotCQkJMHgwOCwgMHgyMywgMHgzZSwgMHg1OSwgMHg3NCwgMHg4ZiwgMHhhYSwgMHhjNSwKLQkJCTB4ZTAsIDB4ZmIsIDB4MTYsIDB4MzEsIDB4NGMsIDB4NjcsIDB4ODIsIDB4OWQsCi0JCQkweGI4LCAweGQzLCAweGVlLCAweDA5LCAweDI0LCAweDNmLCAweDVhLCAweDc1LAotCQkJMHg5MCwgMHhhYiwgMHhjNiwgMHhlMSwgMHhmYywgMHgxNywgMHgzMiwgMHg0ZCwKLQkJCTB4NjgsIDB4ODMsIDB4OWUsIDB4YjksIDB4ZDQsIDB4ZWYsIDB4MGEsIDB4MjUsCi0JCQkweDQwLCAweDViLCAweDc2LCAweDkxLCAweGFjLCAweGM3LCAweGUyLCAweGZkLAotCQkJMHgxOCwgMHgzMywgMHg0ZSwgMHg2OSwgMHg4NCwgMHg5ZiwgMHhiYSwgMHhkNSwKLQkJCTB4ZjAsIDB4MGIsIDB4MjYsIDB4NDEsIDB4NWMsIDB4NzcsIDB4OTIsIDB4YWQsCi0JCQkweGM4LCAweGUzLCAweGZlLCAweDE5LCAweDM0LCAweDRmLCAweDZhLCAweDg1LAotCQkJMHhhMCwgMHhiYiwgMHhkNiwgMHhmMSwgMHgwYywgMHgyNywgMHg0MiwgMHg1ZCwKLQkJCTB4NzgsIDB4OTMsIDB4YWUsIDB4YzksIDB4ZTQsIDB4ZmYsIDB4MWEsIDB4MzUsCi0JCQkweDUwLCAweDZiLCAweDg2LCAweGExLCAweGJjLCAweGQ3LCAweGYyLCAweDBkLAotCQkJMHgyOCwgMHg0MywgMHg1ZSwgMHg3OSwgMHg5NCwgMHhhZiwgMHhjYSwgMHhlNSwKLQkJCTB4MDAsIDB4MWQsIDB4M2EsIDB4NTcsIDB4NzQsIDB4OTEsIDB4YWUsIDB4Y2IsCi0JCQkweGU4LCAweDA1LCAweDIyLCAweDNmLCAweDVjLCAweDc5LCAweDk2LCAweGIzLAotCQkJMHhkMCwgMHhlZCwgMHgwYSwgMHgyNywgMHg0NCwgMHg2MSwgMHg3ZSwgMHg5YiwKLQkJCTB4YjgsIDB4ZDUsIDB4ZjIsIDB4MGYsIDB4MmMsIDB4NDksIDB4NjYsIDB4ODMsCi0JCQkweGEwLCAweGJkLCAweGRhLCAweGY3LCAweDE0LCAweDMxLCAweDRlLCAweDZiLAotCQkJMHg4OCwgMHhhNSwgMHhjMiwgMHhkZiwgMHhmYywgMHgxOSwgMHgzNiwgMHg1MywKLQkJCTB4NzAsIDB4OGQsIDB4YWEsIDB4YzcsIDB4ZTQsIDB4MDEsIDB4MWUsIDB4M2IsCi0JCQkweDU4LCAweDc1LCAweDkyLCAweGFmLCAweGNjLCAweGU5LCAweDA2LCAweDIzLAotCQkJMHg0MCwgMHg1ZCwgMHg3YSwgMHg5NywgMHhiNCwgMHhkMSwgMHhlZSwgMHgwYiwKLQkJCTB4MjgsIDB4NDUsIDB4NjIsIDB4N2YsIDB4OWMsIDB4YjksIDB4ZDYsIDB4ZjMsCi0JCQkweDEwLCAweDJkLCAweDRhLCAweDY3LCAweDg0LCAweGExLCAweGJlLCAweGRiLAotCQkJMHhmOCwgMHgxNSwgMHgzMiwgMHg0ZiwgMHg2YywgMHg4OSwgMHhhNiwgMHhjMywKLQkJCTB4ZTAsIDB4ZmQsIDB4MWEsIDB4MzcsIDB4NTQsIDB4NzEsIDB4OGUsIDB4YWIsCi0JCQkweGM4LCAweGU1LCAweDAyLCAweDFmLCAweDNjLCAweDU5LCAweDc2LCAweDkzLAotCQkJMHhiMCwgMHhjZCwgMHhlYSwgMHgwNywgMHgyNCwgMHg0MSwgMHg1ZSwgMHg3YiwKLQkJCTB4OTgsIDB4YjUsIDB4ZDIsIDB4ZWYsIDB4MGMsIDB4MjksIDB4NDYsIDB4NjMsCi0JCQkweDgwLCAweDlkLCAweGJhLCAweGQ3LCAweGY0LCAweDExLCAweDJlLCAweDRiLAotCQkJMHg2OCwgMHg4NSwgMHhhMiwgMHhiZiwgMHhkYywgMHhmOSwgMHgxNiwgMHgzMywKLQkJCTB4NTAsIDB4NmQsIDB4OGEsIDB4YTcsIDB4YzQsIDB4ZTEsIDB4ZmUsIDB4MWIsCi0JCQkweDM4LCAweDU1LCAweDcyLCAweDhmLCAweGFjLCAweGM5LCAweGU2LCAweDAzLAotCQkJMHgyMCwgMHgzZCwgMHg1YSwgMHg3NywgMHg5NCwgMHhiMSwgMHhjZSwgMHhlYiwKLQkJCTB4MDgsIDB4MjUsIDB4NDIsIDB4NWYsIDB4N2MsIDB4OTksIDB4YjYsIDB4ZDMsCi0JCQkweGYwLCAweDBkLCAweDJhLCAweDQ3LCAweDY0LCAweDgxLCAweDllLCAweGJiLAotCQkJMHhkOCwgMHhmNSwgMHgxMiwgMHgyZiwgMHg0YywgMHg2OSwgMHg4NiwgMHhhMywKLQkJCTB4YzAsIDB4ZGQsIDB4ZmEsIDB4MTcsIDB4MzQsIDB4NTEsIDB4NmUsIDB4OGIsCi0JCQkweGE4LCAweGM1LCAweGUyLCAweGZmLCAweDFjLCAweDM5LCAweDU2LCAweDczLAotCQkJMHg5MCwgMHhhZCwgMHhjYSwgMHhlNywgMHgwNCwgMHgyMSwgMHgzZSwgMHg1YiwKLQkJCTB4NzgsIDB4OTUsIDB4YjIsIDB4Y2YsIDB4ZWMsIDB4MDksIDB4MjYsIDB4NDMsCi0JCQkweDYwLCAweDdkLCAweDlhLCAweGI3LCAweGQ0LCAweGYxLCAweDBlLCAweDJiLAotCQkJMHg0OCwgMHg2NSwgMHg4MiwgMHg5ZiwgMHhiYywgMHhkOSwgMHhmNiwgMHgxMywKLQkJCTB4MzAsIDB4NGQsIDB4NmEsIDB4ODcsIDB4YTQsIDB4YzEsIDB4ZGUsIDB4ZmIsCi0JCQkweDE4LCAweDM1LCAweDUyLCAweDZmLCAweDhjLCAweGE5LCAweGM2LCAweGUzLAotCQkJMHgwMCwgMHgxZiwgMHgzZSwgMHg1ZCwgMHg3YywgMHg5YiwgMHhiYSwgMHhkOSwKLQkJCTB4ZjgsIDB4MTcsIDB4MzYsIDB4NTUsIDB4NzQsIDB4OTMsIDB4YjIsIDB4ZDEsCi0JCQkweGYwLCAweDBmLCAweDJlLCAweDRkLCAweDZjLCAweDhiLCAweGFhLCAweGM5LAotCQkJMHhlOCwgMHgwNywgMHgyNiwgMHg0NSwgMHg2NCwgMHg4MywgMHhhMiwgMHhjMSwKLQkJCTB4ZTAsIDB4ZmYsIDB4MWUsIDB4M2QsIDB4NWMsIDB4N2IsIDB4OWEsIDB4YjksCi0JCQkweGQ4LCAweGY3LCAweDE2LCAweDM1LCAweDU0LCAweDczLCAweDkyLCAweGIxLAotCQkJMHhkMCwgMHhlZiwgMHgwZSwgMHgyZCwgMHg0YywgMHg2YiwgMHg4YSwgMHhhOSwKLQkJCTB4YzgsIDB4ZTcsIDB4MDYsIDB4MjUsIDB4NDQsIDB4NjMsIDB4ODIsIDB4YTEsCi0JCQkweGMwLCAweGRmLCAweGZlLCAweDFkLCAweDNjLCAweDViLCAweDdhLCAweDk5LAotCQkJMHhiOCwgMHhkNywgMHhmNiwgMHgxNSwgMHgzNCwgMHg1MywgMHg3MiwgMHg5MSwKLQkJCTB4YjAsIDB4Y2YsIDB4ZWUsIDB4MGQsIDB4MmMsIDB4NGIsIDB4NmEsIDB4ODksCi0JCQkweGE4LCAweGM3LCAweGU2LCAweDA1LCAweDI0LCAweDQzLCAweDYyLCAweDgxLAotCQkJMHhhMCwgMHhiZiwgMHhkZSwgMHhmZCwgMHgxYywgMHgzYiwgMHg1YSwgMHg3OSwKLQkJCTB4OTgsIDB4YjcsIDB4ZDYsIDB4ZjUsIDB4MTQsIDB4MzMsIDB4NTIsIDB4NzEsCi0JCQkweDkwLCAweGFmLCAweGNlLCAweGVkLCAweDBjLCAweDJiLCAweDRhLCAweDY5LAotCQkJMHg4OCwgMHhhNywgMHhjNiwgMHhlNSwgMHgwNCwgMHgyMywgMHg0MiwgMHg2MSwKLQkJCTB4ODAsIDB4OWYsIDB4YmUsIDB4ZGQsIDB4ZmMsIDB4MWIsIDB4M2EsIDB4NTksCi0JCQkweDc4LCAweDk3LCAweGI2LCAweGQ1LCAweGY0LCAweDEzLCAweDMyLCAweDUxLAotCQkJMHg3MCwgMHg4ZiwgMHhhZSwgMHhjZCwgMHhlYywgMHgwYiwgMHgyYSwgMHg0OSwKLQkJCTB4NjgsIDB4ODcsIDB4YTYsIDB4YzUsIDB4ZTQsIDB4MDMsIDB4MjIsIDB4NDEsCi0JCQkweDYwLCAweDdmLCAweDllLCAweGJkLCAweGRjLCAweGZiLCAweDFhLCAweDM5LAotCQkJMHg1OCwgMHg3NywgMHg5NiwgMHhiNSwgMHhkNCwgMHhmMywgMHgxMiwgMHgzMSwKLQkJCTB4NTAsIDB4NmYsIDB4OGUsIDB4YWQsIDB4Y2MsIDB4ZWIsIDB4MGEsIDB4MjksCi0JCQkweDQ4LCAweDY3LCAweDg2LCAweGE1LCAweGM0LCAweGUzLCAweDAyLCAweDIxLAotCQkJMHg0MCwgMHg1ZiwgMHg3ZSwgMHg5ZCwgMHhiYywgMHhkYiwgMHhmYSwgMHgxOSwKLQkJCTB4MzgsIDB4NTcsIDB4NzYsIDB4OTUsIDB4YjQsIDB4ZDMsIDB4ZjIsIDB4MTEsCi0JCQkweDMwLCAweDRmLCAweDZlLCAweDhkLCAweGFjLCAweGNiLCAweGVhLCAweDA5LAotCQkJMHgyOCwgMHg0NywgMHg2NiwgMHg4NSwgMHhhNCwgMHhjMywgMHhlMiwgMHgwMSwKLQkJCTB4MjAsIDB4M2YsIDB4NWUsIDB4N2QsIDB4OWMsIDB4YmIsIDB4ZGEsIDB4ZjksCi0JCQkweDE4LCAweDM3LCAweDU2LCAweDc1LCAweDk0LCAweGIzLCAweGQyLCAweGYxLAotCQkJMHgxMCwgMHgyZiwgMHg0ZSwgMHg2ZCwgMHg4YywgMHhhYiwgMHhjYSwgMHhlOSwKLQkJCTB4MDgsIDB4MjcsIDB4NDYsIDB4NjUsIDB4ODQsIDB4YTMsIDB4YzIsIDB4ZTEsCi0JCQkweDAwLCAweDIxLCAweDQyLCAweDYzLAotCQl9LAorCQkuaXYgPQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiCisJCQkiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLAorCQkuaW5wdXQgPQorCQkJIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorCQkJIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3IgorCQkJIlx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgorCQkJIlx4MjBceDIxXHgyMlx4MjNceDI0XHgyNVx4MjZceDI3IgorCQkJIlx4MjhceDI5XHgyYVx4MmJceDJjXHgyZFx4MmVceDJmIgorCQkJIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3IgorCQkJIlx4MzhceDM5XHgzYVx4M2JceDNjXHgzZFx4M2VceDNmIgorCQkJIlx4NDBceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3IgorCQkJIlx4NDhceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmIgorCQkJIlx4NTBceDUxXHg1Mlx4NTNceDU0XHg1NVx4NTZceDU3IgorCQkJIlx4NThceDU5XHg1YVx4NWJceDVjXHg1ZFx4NWVceDVmIgorCQkJIlx4NjBceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3IgorCQkJIlx4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmIgorCQkJIlx4NzBceDcxXHg3Mlx4NzNceDc0XHg3NVx4NzZceDc3IgorCQkJIlx4NzhceDc5XHg3YVx4N2JceDdjXHg3ZFx4N2VceDdmIgorCQkJIlx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3IgorCQkJIlx4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmIgorCQkJIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3IgorCQkJIlx4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmIgorCQkJIlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3IgorCQkJIlx4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgorCQkJIlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3IgorCQkJIlx4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmIgorCQkJIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3IgorCQkJIlx4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmIgorCQkJIlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3IgorCQkJIlx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmIgorCQkJIlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3IgorCQkJIlx4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmIgorCQkJIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3IgorCQkJIlx4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIgorCQkJIlx4MDBceDAzXHgwNlx4MDlceDBjXHgwZlx4MTJceDE1IgorCQkJIlx4MThceDFiXHgxZVx4MjFceDI0XHgyN1x4MmFceDJkIgorCQkJIlx4MzBceDMzXHgzNlx4MzlceDNjXHgzZlx4NDJceDQ1IgorCQkJIlx4NDhceDRiXHg0ZVx4NTFceDU0XHg1N1x4NWFceDVkIgorCQkJIlx4NjBceDYzXHg2Nlx4NjlceDZjXHg2Zlx4NzJceDc1IgorCQkJIlx4NzhceDdiXHg3ZVx4ODFceDg0XHg4N1x4OGFceDhkIgorCQkJIlx4OTBceDkzXHg5Nlx4OTlceDljXHg5Zlx4YTJceGE1IgorCQkJIlx4YThceGFiXHhhZVx4YjFceGI0XHhiN1x4YmFceGJkIgorCQkJIlx4YzBceGMzXHhjNlx4YzlceGNjXHhjZlx4ZDJceGQ1IgorCQkJIlx4ZDhceGRiXHhkZVx4ZTFceGU0XHhlN1x4ZWFceGVkIgorCQkJIlx4ZjBceGYzXHhmNlx4ZjlceGZjXHhmZlx4MDJceDA1IgorCQkJIlx4MDhceDBiXHgwZVx4MTFceDE0XHgxN1x4MWFceDFkIgorCQkJIlx4MjBceDIzXHgyNlx4MjlceDJjXHgyZlx4MzJceDM1IgorCQkJIlx4MzhceDNiXHgzZVx4NDFceDQ0XHg0N1x4NGFceDRkIgorCQkJIlx4NTBceDUzXHg1Nlx4NTlceDVjXHg1Zlx4NjJceDY1IgorCQkJIlx4NjhceDZiXHg2ZVx4NzFceDc0XHg3N1x4N2FceDdkIgorCQkJIlx4ODBceDgzXHg4Nlx4ODlceDhjXHg4Zlx4OTJceDk1IgorCQkJIlx4OThceDliXHg5ZVx4YTFceGE0XHhhN1x4YWFceGFkIgorCQkJIlx4YjBceGIzXHhiNlx4YjlceGJjXHhiZlx4YzJceGM1IgorCQkJIlx4YzhceGNiXHhjZVx4ZDFceGQ0XHhkN1x4ZGFceGRkIgorCQkJIlx4ZTBceGUzXHhlNlx4ZTlceGVjXHhlZlx4ZjJceGY1IgorCQkJIlx4ZjhceGZiXHhmZVx4MDFceDA0XHgwN1x4MGFceDBkIgorCQkJIlx4MTBceDEzXHgxNlx4MTlceDFjXHgxZlx4MjJceDI1IgorCQkJIlx4MjhceDJiXHgyZVx4MzFceDM0XHgzN1x4M2FceDNkIgorCQkJIlx4NDBceDQzXHg0Nlx4NDlceDRjXHg0Zlx4NTJceDU1IgorCQkJIlx4NThceDViXHg1ZVx4NjFceDY0XHg2N1x4NmFceDZkIgorCQkJIlx4NzBceDczXHg3Nlx4NzlceDdjXHg3Zlx4ODJceDg1IgorCQkJIlx4ODhceDhiXHg4ZVx4OTFceDk0XHg5N1x4OWFceDlkIgorCQkJIlx4YTBceGEzXHhhNlx4YTlceGFjXHhhZlx4YjJceGI1IgorCQkJIlx4YjhceGJiXHhiZVx4YzFceGM0XHhjN1x4Y2FceGNkIgorCQkJIlx4ZDBceGQzXHhkNlx4ZDlceGRjXHhkZlx4ZTJceGU1IgorCQkJIlx4ZThceGViXHhlZVx4ZjFceGY0XHhmN1x4ZmFceGZkIgorCQkJIlx4MDBceDA1XHgwYVx4MGZceDE0XHgxOVx4MWVceDIzIgorCQkJIlx4MjhceDJkXHgzMlx4MzdceDNjXHg0MVx4NDZceDRiIgorCQkJIlx4NTBceDU1XHg1YVx4NWZceDY0XHg2OVx4NmVceDczIgorCQkJIlx4NzhceDdkXHg4Mlx4ODdceDhjXHg5MVx4OTZceDliIgorCQkJIlx4YTBceGE1XHhhYVx4YWZceGI0XHhiOVx4YmVceGMzIgorCQkJIlx4YzhceGNkXHhkMlx4ZDdceGRjXHhlMVx4ZTZceGViIgorCQkJIlx4ZjBceGY1XHhmYVx4ZmZceDA0XHgwOVx4MGVceDEzIgorCQkJIlx4MThceDFkXHgyMlx4MjdceDJjXHgzMVx4MzZceDNiIgorCQkJIlx4NDBceDQ1XHg0YVx4NGZceDU0XHg1OVx4NWVceDYzIgorCQkJIlx4NjhceDZkXHg3Mlx4NzdceDdjXHg4MVx4ODZceDhiIgorCQkJIlx4OTBceDk1XHg5YVx4OWZceGE0XHhhOVx4YWVceGIzIgorCQkJIlx4YjhceGJkXHhjMlx4YzdceGNjXHhkMVx4ZDZceGRiIgorCQkJIlx4ZTBceGU1XHhlYVx4ZWZceGY0XHhmOVx4ZmVceDAzIgorCQkJIlx4MDhceDBkXHgxMlx4MTdceDFjXHgyMVx4MjZceDJiIgorCQkJIlx4MzBceDM1XHgzYVx4M2ZceDQ0XHg0OVx4NGVceDUzIgorCQkJIlx4NThceDVkXHg2Mlx4NjdceDZjXHg3MVx4NzZceDdiIgorCQkJIlx4ODBceDg1XHg4YVx4OGZceDk0XHg5OVx4OWVceGEzIgorCQkJIlx4YThceGFkXHhiMlx4YjdceGJjXHhjMVx4YzZceGNiIgorCQkJIlx4ZDBceGQ1XHhkYVx4ZGZceGU0XHhlOVx4ZWVceGYzIgorCQkJIlx4ZjhceGZkXHgwMlx4MDdceDBjXHgxMVx4MTZceDFiIgorCQkJIlx4MjBceDI1XHgyYVx4MmZceDM0XHgzOVx4M2VceDQzIgorCQkJIlx4NDhceDRkXHg1Mlx4NTdceDVjXHg2MVx4NjZceDZiIgorCQkJIlx4NzBceDc1XHg3YVx4N2ZceDg0XHg4OVx4OGVceDkzIgorCQkJIlx4OThceDlkXHhhMlx4YTdceGFjXHhiMVx4YjZceGJiIgorCQkJIlx4YzBceGM1XHhjYVx4Y2ZceGQ0XHhkOVx4ZGVceGUzIgorCQkJIlx4ZThceGVkXHhmMlx4ZjdceGZjXHgwMVx4MDZceDBiIgorCQkJIlx4MTBceDE1XHgxYVx4MWZceDI0XHgyOVx4MmVceDMzIgorCQkJIlx4MzhceDNkXHg0Mlx4NDdceDRjXHg1MVx4NTZceDViIgorCQkJIlx4NjBceDY1XHg2YVx4NmZceDc0XHg3OVx4N2VceDgzIgorCQkJIlx4ODhceDhkXHg5Mlx4OTdceDljXHhhMVx4YTZceGFiIgorCQkJIlx4YjBceGI1XHhiYVx4YmZceGM0XHhjOVx4Y2VceGQzIgorCQkJIlx4ZDhceGRkXHhlMlx4ZTdceGVjXHhmMVx4ZjZceGZiIgorCQkJIlx4MDBceDA3XHgwZVx4MTVceDFjXHgyM1x4MmFceDMxIgorCQkJIlx4MzhceDNmXHg0Nlx4NGRceDU0XHg1Ylx4NjJceDY5IgorCQkJIlx4NzBceDc3XHg3ZVx4ODVceDhjXHg5M1x4OWFceGExIgorCQkJIlx4YThceGFmXHhiNlx4YmRceGM0XHhjYlx4ZDJceGQ5IgorCQkJIlx4ZTBceGU3XHhlZVx4ZjVceGZjXHgwM1x4MGFceDExIgorCQkJIlx4MThceDFmXHgyNlx4MmRceDM0XHgzYlx4NDJceDQ5IgorCQkJIlx4NTBceDU3XHg1ZVx4NjVceDZjXHg3M1x4N2FceDgxIgorCQkJIlx4ODhceDhmXHg5Nlx4OWRceGE0XHhhYlx4YjJceGI5IgorCQkJIlx4YzBceGM3XHhjZVx4ZDVceGRjXHhlM1x4ZWFceGYxIgorCQkJIlx4ZjhceGZmXHgwNlx4MGRceDE0XHgxYlx4MjJceDI5IgorCQkJIlx4MzBceDM3XHgzZVx4NDVceDRjXHg1M1x4NWFceDYxIgorCQkJIlx4NjhceDZmXHg3Nlx4N2RceDg0XHg4Ylx4OTJceDk5IgorCQkJIlx4YTBceGE3XHhhZVx4YjVceGJjXHhjM1x4Y2FceGQxIgorCQkJIlx4ZDhceGRmXHhlNlx4ZWRceGY0XHhmYlx4MDJceDA5IgorCQkJIlx4MTBceDE3XHgxZVx4MjVceDJjXHgzM1x4M2FceDQxIgorCQkJIlx4NDhceDRmXHg1Nlx4NWRceDY0XHg2Ylx4NzJceDc5IgorCQkJIlx4ODBceDg3XHg4ZVx4OTVceDljXHhhM1x4YWFceGIxIgorCQkJIlx4YjhceGJmXHhjNlx4Y2RceGQ0XHhkYlx4ZTJceGU5IgorCQkJIlx4ZjBceGY3XHhmZVx4MDVceDBjXHgxM1x4MWFceDIxIgorCQkJIlx4MjhceDJmXHgzNlx4M2RceDQ0XHg0Ylx4NTJceDU5IgorCQkJIlx4NjBceDY3XHg2ZVx4NzVceDdjXHg4M1x4OGFceDkxIgorCQkJIlx4OThceDlmXHhhNlx4YWRceGI0XHhiYlx4YzJceGM5IgorCQkJIlx4ZDBceGQ3XHhkZVx4ZTVceGVjXHhmM1x4ZmFceDAxIgorCQkJIlx4MDhceDBmXHgxNlx4MWRceDI0XHgyYlx4MzJceDM5IgorCQkJIlx4NDBceDQ3XHg0ZVx4NTVceDVjXHg2M1x4NmFceDcxIgorCQkJIlx4NzhceDdmXHg4Nlx4OGRceDk0XHg5Ylx4YTJceGE5IgorCQkJIlx4YjBceGI3XHhiZVx4YzVceGNjXHhkM1x4ZGFceGUxIgorCQkJIlx4ZThceGVmXHhmNlx4ZmRceDA0XHgwYlx4MTJceDE5IgorCQkJIlx4MjBceDI3XHgyZVx4MzVceDNjXHg0M1x4NGFceDUxIgorCQkJIlx4NThceDVmXHg2Nlx4NmRceDc0XHg3Ylx4ODJceDg5IgorCQkJIlx4OTBceDk3XHg5ZVx4YTVceGFjXHhiM1x4YmFceGMxIgorCQkJIlx4YzhceGNmXHhkNlx4ZGRceGU0XHhlYlx4ZjJceGY5IgorCQkJIlx4MDBceDA5XHgxMlx4MWJceDI0XHgyZFx4MzZceDNmIgorCQkJIlx4NDhceDUxXHg1YVx4NjNceDZjXHg3NVx4N2VceDg3IgorCQkJIlx4OTBceDk5XHhhMlx4YWJceGI0XHhiZFx4YzZceGNmIgorCQkJIlx4ZDhceGUxXHhlYVx4ZjNceGZjXHgwNVx4MGVceDE3IgorCQkJIlx4MjBceDI5XHgzMlx4M2JceDQ0XHg0ZFx4NTZceDVmIgorCQkJIlx4NjhceDcxXHg3YVx4ODNceDhjXHg5NVx4OWVceGE3IgorCQkJIlx4YjBceGI5XHhjMlx4Y2JceGQ0XHhkZFx4ZTZceGVmIgorCQkJIlx4ZjhceDAxXHgwYVx4MTNceDFjXHgyNVx4MmVceDM3IgorCQkJIlx4NDBceDQ5XHg1Mlx4NWJceDY0XHg2ZFx4NzZceDdmIgorCQkJIlx4ODhceDkxXHg5YVx4YTNceGFjXHhiNVx4YmVceGM3IgorCQkJIlx4ZDBceGQ5XHhlMlx4ZWJceGY0XHhmZFx4MDZceDBmIgorCQkJIlx4MThceDIxXHgyYVx4MzNceDNjXHg0NVx4NGVceDU3IgorCQkJIlx4NjBceDY5XHg3Mlx4N2JceDg0XHg4ZFx4OTZceDlmIgorCQkJIlx4YThceGIxXHhiYVx4YzNceGNjXHhkNVx4ZGVceGU3IgorCQkJIlx4ZjBceGY5XHgwMlx4MGJceDE0XHgxZFx4MjZceDJmIgorCQkJIlx4MzhceDQxXHg0YVx4NTNceDVjXHg2NVx4NmVceDc3IgorCQkJIlx4ODBceDg5XHg5Mlx4OWJceGE0XHhhZFx4YjZceGJmIgorCQkJIlx4YzhceGQxXHhkYVx4ZTNceGVjXHhmNVx4ZmVceDA3IgorCQkJIlx4MTBceDE5XHgyMlx4MmJceDM0XHgzZFx4NDZceDRmIgorCQkJIlx4NThceDYxXHg2YVx4NzNceDdjXHg4NVx4OGVceDk3IgorCQkJIlx4YTBceGE5XHhiMlx4YmJceGM0XHhjZFx4ZDZceGRmIgorCQkJIlx4ZThceGYxXHhmYVx4MDNceDBjXHgxNVx4MWVceDI3IgorCQkJIlx4MzBceDM5XHg0Mlx4NGJceDU0XHg1ZFx4NjZceDZmIgorCQkJIlx4NzhceDgxXHg4YVx4OTNceDljXHhhNVx4YWVceGI3IgorCQkJIlx4YzBceGM5XHhkMlx4ZGJceGU0XHhlZFx4ZjZceGZmIgorCQkJIlx4MDhceDExXHgxYVx4MjNceDJjXHgzNVx4M2VceDQ3IgorCQkJIlx4NTBceDU5XHg2Mlx4NmJceDc0XHg3ZFx4ODZceDhmIgorCQkJIlx4OThceGExXHhhYVx4YjNceGJjXHhjNVx4Y2VceGQ3IgorCQkJIlx4ZTBceGU5XHhmMlx4ZmJceDA0XHgwZFx4MTZceDFmIgorCQkJIlx4MjhceDMxXHgzYVx4NDNceDRjXHg1NVx4NWVceDY3IgorCQkJIlx4NzBceDc5XHg4Mlx4OGJceDk0XHg5ZFx4YTZceGFmIgorCQkJIlx4YjhceGMxXHhjYVx4ZDNceGRjXHhlNVx4ZWVceGY3IgorCQkJIlx4MDBceDBiXHgxNlx4MjFceDJjXHgzN1x4NDJceDRkIgorCQkJIlx4NThceDYzXHg2ZVx4NzlceDg0XHg4Zlx4OWFceGE1IgorCQkJIlx4YjBceGJiXHhjNlx4ZDFceGRjXHhlN1x4ZjJceGZkIgorCQkJIlx4MDhceDEzXHgxZVx4MjlceDM0XHgzZlx4NGFceDU1IgorCQkJIlx4NjBceDZiXHg3Nlx4ODFceDhjXHg5N1x4YTJceGFkIgorCQkJIlx4YjhceGMzXHhjZVx4ZDlceGU0XHhlZlx4ZmFceDA1IgorCQkJIlx4MTBceDFiXHgyNlx4MzFceDNjXHg0N1x4NTJceDVkIgorCQkJIlx4NjhceDczXHg3ZVx4ODlceDk0XHg5Zlx4YWFceGI1IgorCQkJIlx4YzBceGNiXHhkNlx4ZTFceGVjXHhmN1x4MDJceDBkIgorCQkJIlx4MThceDIzXHgyZVx4MzlceDQ0XHg0Zlx4NWFceDY1IgorCQkJIlx4NzBceDdiXHg4Nlx4OTFceDljXHhhN1x4YjJceGJkIgorCQkJIlx4YzhceGQzXHhkZVx4ZTlceGY0XHhmZlx4MGFceDE1IgorCQkJIlx4MjBceDJiXHgzNlx4NDFceDRjXHg1N1x4NjJceDZkIgorCQkJIlx4NzhceDgzXHg4ZVx4OTlceGE0XHhhZlx4YmFceGM1IgorCQkJIlx4ZDBceGRiXHhlNlx4ZjFceGZjXHgwN1x4MTJceDFkIgorCQkJIlx4MjhceDMzXHgzZVx4NDlceDU0XHg1Zlx4NmFceDc1IgorCQkJIlx4ODBceDhiXHg5Nlx4YTFceGFjXHhiN1x4YzJceGNkIgorCQkJIlx4ZDhceGUzXHhlZVx4ZjlceDA0XHgwZlx4MWFceDI1IgorCQkJIlx4MzBceDNiXHg0Nlx4NTFceDVjXHg2N1x4NzJceDdkIgorCQkJIlx4ODhceDkzXHg5ZVx4YTlceGI0XHhiZlx4Y2FceGQ1IgorCQkJIlx4ZTBceGViXHhmNlx4MDFceDBjXHgxN1x4MjJceDJkIgorCQkJIlx4MzhceDQzXHg0ZVx4NTlceDY0XHg2Zlx4N2FceDg1IgorCQkJIlx4OTBceDliXHhhNlx4YjFceGJjXHhjN1x4ZDJceGRkIgorCQkJIlx4ZThceGYzXHhmZVx4MDlceDE0XHgxZlx4MmFceDM1IgorCQkJIlx4NDBceDRiXHg1Nlx4NjFceDZjXHg3N1x4ODJceDhkIgorCQkJIlx4OThceGEzXHhhZVx4YjlceGM0XHhjZlx4ZGFceGU1IgorCQkJIlx4ZjBceGZiXHgwNlx4MTFceDFjXHgyN1x4MzJceDNkIgorCQkJIlx4NDhceDUzXHg1ZVx4NjlceDc0XHg3Zlx4OGFceDk1IgorCQkJIlx4YTBceGFiXHhiNlx4YzFceGNjXHhkN1x4ZTJceGVkIgorCQkJIlx4ZjhceDAzXHgwZVx4MTlceDI0XHgyZlx4M2FceDQ1IgorCQkJIlx4NTBceDViXHg2Nlx4NzFceDdjXHg4N1x4OTJceDlkIgorCQkJIlx4YThceGIzXHhiZVx4YzlceGQ0XHhkZlx4ZWFceGY1IgorCQkJIlx4MDBceDBkXHgxYVx4MjdceDM0XHg0MVx4NGVceDViIgorCQkJIlx4NjhceDc1XHg4Mlx4OGZceDljXHhhOVx4YjZceGMzIgorCQkJIlx4ZDBceGRkXHhlYVx4ZjdceDA0XHgxMVx4MWVceDJiIgorCQkJIlx4MzhceDQ1XHg1Mlx4NWZceDZjXHg3OVx4ODZceDkzIgorCQkJIlx4YTBceGFkXHhiYVx4YzdceGQ0XHhlMVx4ZWVceGZiIgorCQkJIlx4MDhceDE1XHgyMlx4MmZceDNjXHg0OVx4NTZceDYzIgorCQkJIlx4NzBceDdkXHg4YVx4OTdceGE0XHhiMVx4YmVceGNiIgorCQkJIlx4ZDhceGU1XHhmMlx4ZmZceDBjXHgxOVx4MjZceDMzIgorCQkJIlx4NDBceDRkXHg1YVx4NjdceDc0XHg4MVx4OGVceDliIgorCQkJIlx4YThceGI1XHhjMlx4Y2ZceGRjXHhlOVx4ZjZceDAzIgorCQkJIlx4MTBceDFkXHgyYVx4MzdceDQ0XHg1MVx4NWVceDZiIgorCQkJIlx4NzhceDg1XHg5Mlx4OWZceGFjXHhiOVx4YzZceGQzIgorCQkJIlx4ZTBceGVkXHhmYVx4MDdceDE0XHgyMVx4MmVceDNiIgorCQkJIlx4NDhceDU1XHg2Mlx4NmZceDdjXHg4OVx4OTZceGEzIgorCQkJIlx4YjBceGJkXHhjYVx4ZDdceGU0XHhmMVx4ZmVceDBiIgorCQkJIlx4MThceDI1XHgzMlx4M2ZceDRjXHg1OVx4NjZceDczIgorCQkJIlx4ODBceDhkXHg5YVx4YTdceGI0XHhjMVx4Y2VceGRiIgorCQkJIlx4ZThceGY1XHgwMlx4MGZceDFjXHgyOVx4MzZceDQzIgorCQkJIlx4NTBceDVkXHg2YVx4NzdceDg0XHg5MVx4OWVceGFiIgorCQkJIlx4YjhceGM1XHhkMlx4ZGZceGVjXHhmOVx4MDZceDEzIgorCQkJIlx4MjBceDJkXHgzYVx4NDdceDU0XHg2MVx4NmVceDdiIgorCQkJIlx4ODhceDk1XHhhMlx4YWZceGJjXHhjOVx4ZDZceGUzIgorCQkJIlx4ZjBceGZkXHgwYVx4MTdceDI0XHgzMVx4M2VceDRiIgorCQkJIlx4NThceDY1XHg3Mlx4N2ZceDhjXHg5OVx4YTZceGIzIgorCQkJIlx4YzBceGNkXHhkYVx4ZTdceGY0XHgwMVx4MGVceDFiIgorCQkJIlx4MjhceDM1XHg0Mlx4NGZceDVjXHg2OVx4NzZceDgzIgorCQkJIlx4OTBceDlkXHhhYVx4YjdceGM0XHhkMVx4ZGVceGViIgorCQkJIlx4ZjhceDA1XHgxMlx4MWZceDJjXHgzOVx4NDZceDUzIgorCQkJIlx4NjBceDZkXHg3YVx4ODdceDk0XHhhMVx4YWVceGJiIgorCQkJIlx4YzhceGQ1XHhlMlx4ZWZceGZjXHgwOVx4MTZceDIzIgorCQkJIlx4MzBceDNkXHg0YVx4NTdceDY0XHg3MVx4N2VceDhiIgorCQkJIlx4OThceGE1XHhiMlx4YmZceGNjXHhkOVx4ZTZceGYzIgorCQkJIlx4MDBceDBmXHgxZVx4MmRceDNjXHg0Ylx4NWFceDY5IgorCQkJIlx4NzhceDg3XHg5Nlx4YTVceGI0XHhjM1x4ZDJceGUxIgorCQkJIlx4ZjBceGZmXHgwZVx4MWRceDJjXHgzYlx4NGFceDU5IgorCQkJIlx4NjhceDc3XHg4Nlx4OTVceGE0XHhiM1x4YzJceGQxIgorCQkJIlx4ZTBceGVmXHhmZVx4MGRceDFjXHgyYlx4M2FceDQ5IgorCQkJIlx4NThceDY3XHg3Nlx4ODVceDk0XHhhM1x4YjJceGMxIgorCQkJIlx4ZDBceGRmXHhlZVx4ZmRceDBjXHgxYlx4MmFceDM5IgorCQkJIlx4NDhceDU3XHg2Nlx4NzVceDg0XHg5M1x4YTJceGIxIgorCQkJIlx4YzBceGNmXHhkZVx4ZWRceGZjXHgwYlx4MWFceDI5IgorCQkJIlx4MzhceDQ3XHg1Nlx4NjVceDc0XHg4M1x4OTJceGExIgorCQkJIlx4YjBceGJmXHhjZVx4ZGRceGVjXHhmYlx4MGFceDE5IgorCQkJIlx4MjhceDM3XHg0Nlx4NTVceDY0XHg3M1x4ODJceDkxIgorCQkJIlx4YTBceGFmXHhiZVx4Y2RceGRjXHhlYlx4ZmFceDA5IgorCQkJIlx4MThceDI3XHgzNlx4NDVceDU0XHg2M1x4NzJceDgxIgorCQkJIlx4OTBceDlmXHhhZVx4YmRceGNjXHhkYlx4ZWFceGY5IgorCQkJIlx4MDhceDE3XHgyNlx4MzVceDQ0XHg1M1x4NjJceDcxIgorCQkJIlx4ODBceDhmXHg5ZVx4YWRceGJjXHhjYlx4ZGFceGU5IgorCQkJIlx4ZjhceDA3XHgxNlx4MjVceDM0XHg0M1x4NTJceDYxIgorCQkJIlx4NzBceDdmXHg4ZVx4OWRceGFjXHhiYlx4Y2FceGQ5IgorCQkJIlx4ZThceGY3XHgwNlx4MTVceDI0XHgzM1x4NDJceDUxIgorCQkJIlx4NjBceDZmXHg3ZVx4OGRceDljXHhhYlx4YmFceGM5IgorCQkJIlx4ZDhceGU3XHhmNlx4MDVceDE0XHgyM1x4MzJceDQxIgorCQkJIlx4NTBceDVmXHg2ZVx4N2RceDhjXHg5Ylx4YWFceGI5IgorCQkJIlx4YzhceGQ3XHhlNlx4ZjVceDA0XHgxM1x4MjJceDMxIgorCQkJIlx4NDBceDRmXHg1ZVx4NmRceDdjXHg4Ylx4OWFceGE5IgorCQkJIlx4YjhceGM3XHhkNlx4ZTVceGY0XHgwM1x4MTJceDIxIgorCQkJIlx4MzBceDNmXHg0ZVx4NWRceDZjXHg3Ylx4OGFceDk5IgorCQkJIlx4YThceGI3XHhjNlx4ZDVceGU0XHhmM1x4MDJceDExIgorCQkJIlx4MjBceDJmXHgzZVx4NGRceDVjXHg2Ylx4N2FceDg5IgorCQkJIlx4OThceGE3XHhiNlx4YzVceGQ0XHhlM1x4ZjJceDAxIgorCQkJIlx4MTBceDFmXHgyZVx4M2RceDRjXHg1Ylx4NmFceDc5IgorCQkJIlx4ODhceDk3XHhhNlx4YjVceGM0XHhkM1x4ZTJceGYxIgorCQkJIlx4MDBceDExXHgyMlx4MzNceDQ0XHg1NVx4NjZceDc3IgorCQkJIlx4ODhceDk5XHhhYVx4YmJceGNjXHhkZFx4ZWVceGZmIgorCQkJIlx4MTBceDIxXHgzMlx4NDNceDU0XHg2NVx4NzZceDg3IgorCQkJIlx4OThceGE5XHhiYVx4Y2JceGRjXHhlZFx4ZmVceDBmIgorCQkJIlx4MjBceDMxXHg0Mlx4NTNceDY0XHg3NVx4ODZceDk3IgorCQkJIlx4YThceGI5XHhjYVx4ZGJceGVjXHhmZFx4MGVceDFmIgorCQkJIlx4MzBceDQxXHg1Mlx4NjNceDc0XHg4NVx4OTZceGE3IgorCQkJIlx4YjhceGM5XHhkYVx4ZWJceGZjXHgwZFx4MWVceDJmIgorCQkJIlx4NDBceDUxXHg2Mlx4NzNceDg0XHg5NVx4YTZceGI3IgorCQkJIlx4YzhceGQ5XHhlYVx4ZmJceDBjXHgxZFx4MmVceDNmIgorCQkJIlx4NTBceDYxXHg3Mlx4ODNceDk0XHhhNVx4YjZceGM3IgorCQkJIlx4ZDhceGU5XHhmYVx4MGJceDFjXHgyZFx4M2VceDRmIgorCQkJIlx4NjBceDcxXHg4Mlx4OTNceGE0XHhiNVx4YzZceGQ3IgorCQkJIlx4ZThceGY5XHgwYVx4MWJceDJjXHgzZFx4NGVceDVmIgorCQkJIlx4NzBceDgxXHg5Mlx4YTNceGI0XHhjNVx4ZDZceGU3IgorCQkJIlx4ZjhceDA5XHgxYVx4MmJceDNjXHg0ZFx4NWVceDZmIgorCQkJIlx4ODBceDkxXHhhMlx4YjNceGM0XHhkNVx4ZTZceGY3IgorCQkJIlx4MDhceDE5XHgyYVx4M2JceDRjXHg1ZFx4NmVceDdmIgorCQkJIlx4OTBceGExXHhiMlx4YzNceGQ0XHhlNVx4ZjZceDA3IgorCQkJIlx4MThceDI5XHgzYVx4NGJceDVjXHg2ZFx4N2VceDhmIgorCQkJIlx4YTBceGIxXHhjMlx4ZDNceGU0XHhmNVx4MDZceDE3IgorCQkJIlx4MjhceDM5XHg0YVx4NWJceDZjXHg3ZFx4OGVceDlmIgorCQkJIlx4YjBceGMxXHhkMlx4ZTNceGY0XHgwNVx4MTZceDI3IgorCQkJIlx4MzhceDQ5XHg1YVx4NmJceDdjXHg4ZFx4OWVceGFmIgorCQkJIlx4YzBceGQxXHhlMlx4ZjNceDA0XHgxNVx4MjZceDM3IgorCQkJIlx4NDhceDU5XHg2YVx4N2JceDhjXHg5ZFx4YWVceGJmIgorCQkJIlx4ZDBceGUxXHhmMlx4MDNceDE0XHgyNVx4MzZceDQ3IgorCQkJIlx4NThceDY5XHg3YVx4OGJceDljXHhhZFx4YmVceGNmIgorCQkJIlx4ZTBceGYxXHgwMlx4MTNceDI0XHgzNVx4NDZceDU3IgorCQkJIlx4NjhceDc5XHg4YVx4OWJceGFjXHhiZFx4Y2VceGRmIgorCQkJIlx4ZjBceDAxXHgxMlx4MjNceDM0XHg0NVx4NTZceDY3IgorCQkJIlx4NzhceDg5XHg5YVx4YWJceGJjXHhjZFx4ZGVceGVmIgorCQkJIlx4MDBceDEzXHgyNlx4MzlceDRjXHg1Zlx4NzJceDg1IgorCQkJIlx4OThceGFiXHhiZVx4ZDFceGU0XHhmN1x4MGFceDFkIgorCQkJIlx4MzBceDQzXHg1Nlx4NjlceDdjXHg4Zlx4YTJceGI1IgorCQkJIlx4YzhceGRiXHhlZVx4MDFceDE0XHgyN1x4M2FceDRkIgorCQkJIlx4NjBceDczXHg4Nlx4OTlceGFjXHhiZlx4ZDJceGU1IgorCQkJIlx4ZjhceDBiXHgxZVx4MzFceDQ0XHg1N1x4NmFceDdkIgorCQkJIlx4OTBceGEzXHhiNlx4YzlceGRjXHhlZlx4MDJceDE1IgorCQkJIlx4MjhceDNiXHg0ZVx4NjFceDc0XHg4N1x4OWFceGFkIgorCQkJIlx4YzBceGQzXHhlNlx4ZjlceDBjXHgxZlx4MzJceDQ1IgorCQkJIlx4NThceDZiXHg3ZVx4OTFceGE0XHhiN1x4Y2FceGRkIgorCQkJIlx4ZjBceDAzXHgxNlx4MjlceDNjXHg0Zlx4NjJceDc1IgorCQkJIlx4ODhceDliXHhhZVx4YzFceGQ0XHhlN1x4ZmFceDBkIgorCQkJIlx4MjBceDMzXHg0Nlx4NTlceDZjXHg3Zlx4OTJceGE1IgorCQkJIlx4YjhceGNiXHhkZVx4ZjFceDA0XHgxN1x4MmFceDNkIgorCQkJIlx4NTBceDYzXHg3Nlx4ODlceDljXHhhZlx4YzJceGQ1IgorCQkJIlx4ZThceGZiXHgwZVx4MjFceDM0XHg0N1x4NWFceDZkIgorCQkJIlx4ODBceDkzXHhhNlx4YjlceGNjXHhkZlx4ZjJceDA1IgorCQkJIlx4MThceDJiXHgzZVx4NTFceDY0XHg3N1x4OGFceDlkIgorCQkJIlx4YjBceGMzXHhkNlx4ZTlceGZjXHgwZlx4MjJceDM1IgorCQkJIlx4NDhceDViXHg2ZVx4ODFceDk0XHhhN1x4YmFceGNkIgorCQkJIlx4ZTBceGYzXHgwNlx4MTlceDJjXHgzZlx4NTJceDY1IgorCQkJIlx4NzhceDhiXHg5ZVx4YjFceGM0XHhkN1x4ZWFceGZkIgorCQkJIlx4MTBceDIzXHgzNlx4NDlceDVjXHg2Zlx4ODJceDk1IgorCQkJIlx4YThceGJiXHhjZVx4ZTFceGY0XHgwN1x4MWFceDJkIgorCQkJIlx4NDBceDUzXHg2Nlx4NzlceDhjXHg5Zlx4YjJceGM1IgorCQkJIlx4ZDhceGViXHhmZVx4MTFceDI0XHgzN1x4NGFceDVkIgorCQkJIlx4NzBceDgzXHg5Nlx4YTlceGJjXHhjZlx4ZTJceGY1IgorCQkJIlx4MDhceDFiXHgyZVx4NDFceDU0XHg2N1x4N2FceDhkIgorCQkJIlx4YTBceGIzXHhjNlx4ZDlceGVjXHhmZlx4MTJceDI1IgorCQkJIlx4MzhceDRiXHg1ZVx4NzFceDg0XHg5N1x4YWFceGJkIgorCQkJIlx4ZDBceGUzXHhmNlx4MDlceDFjXHgyZlx4NDJceDU1IgorCQkJIlx4NjhceDdiXHg4ZVx4YTFceGI0XHhjN1x4ZGFceGVkIgorCQkJIlx4MDBceDE1XHgyYVx4M2ZceDU0XHg2OVx4N2VceDkzIgorCQkJIlx4YThceGJkXHhkMlx4ZTdceGZjXHgxMVx4MjZceDNiIgorCQkJIlx4NTBceDY1XHg3YVx4OGZceGE0XHhiOVx4Y2VceGUzIgorCQkJIlx4ZjhceDBkXHgyMlx4MzdceDRjXHg2MVx4NzZceDhiIgorCQkJIlx4YTBceGI1XHhjYVx4ZGZceGY0XHgwOVx4MWVceDMzIgorCQkJIlx4NDhceDVkXHg3Mlx4ODdceDljXHhiMVx4YzZceGRiIgorCQkJIlx4ZjBceDA1XHgxYVx4MmZceDQ0XHg1OVx4NmVceDgzIgorCQkJIlx4OThceGFkXHhjMlx4ZDdceGVjXHgwMVx4MTZceDJiIgorCQkJIlx4NDBceDU1XHg2YVx4N2ZceDk0XHhhOVx4YmVceGQzIgorCQkJIlx4ZThceGZkXHgxMlx4MjdceDNjXHg1MVx4NjZceDdiIgorCQkJIlx4OTBceGE1XHhiYVx4Y2ZceGU0XHhmOVx4MGVceDIzIgorCQkJIlx4MzhceDRkXHg2Mlx4NzdceDhjXHhhMVx4YjZceGNiIgorCQkJIlx4ZTBceGY1XHgwYVx4MWZceDM0XHg0OVx4NWVceDczIgorCQkJIlx4ODhceDlkXHhiMlx4YzdceGRjXHhmMVx4MDZceDFiIgorCQkJIlx4MzBceDQ1XHg1YVx4NmZceDg0XHg5OVx4YWVceGMzIgorCQkJIlx4ZDhceGVkXHgwMlx4MTdceDJjXHg0MVx4NTZceDZiIgorCQkJIlx4ODBceDk1XHhhYVx4YmZceGQ0XHhlOVx4ZmVceDEzIgorCQkJIlx4MjhceDNkXHg1Mlx4NjdceDdjXHg5MVx4YTZceGJiIgorCQkJIlx4ZDBceGU1XHhmYVx4MGZceDI0XHgzOVx4NGVceDYzIgorCQkJIlx4NzhceDhkXHhhMlx4YjdceGNjXHhlMVx4ZjZceDBiIgorCQkJIlx4MjBceDM1XHg0YVx4NWZceDc0XHg4OVx4OWVceGIzIgorCQkJIlx4YzhceGRkXHhmMlx4MDdceDFjXHgzMVx4NDZceDViIgorCQkJIlx4NzBceDg1XHg5YVx4YWZceGM0XHhkOVx4ZWVceDAzIgorCQkJIlx4MThceDJkXHg0Mlx4NTdceDZjXHg4MVx4OTZceGFiIgorCQkJIlx4YzBceGQ1XHhlYVx4ZmZceDE0XHgyOVx4M2VceDUzIgorCQkJIlx4NjhceDdkXHg5Mlx4YTdceGJjXHhkMVx4ZTZceGZiIgorCQkJIlx4MTBceDI1XHgzYVx4NGZceDY0XHg3OVx4OGVceGEzIgorCQkJIlx4YjhceGNkXHhlMlx4ZjdceDBjXHgyMVx4MzZceDRiIgorCQkJIlx4NjBceDc1XHg4YVx4OWZceGI0XHhjOVx4ZGVceGYzIgorCQkJIlx4MDhceDFkXHgzMlx4NDdceDVjXHg3MVx4ODZceDliIgorCQkJIlx4YjBceGM1XHhkYVx4ZWZceDA0XHgxOVx4MmVceDQzIgorCQkJIlx4NThceDZkXHg4Mlx4OTdceGFjXHhjMVx4ZDZceGViIgorCQkJIlx4MDBceDE3XHgyZVx4NDVceDVjXHg3M1x4OGFceGExIgorCQkJIlx4YjhceGNmXHhlNlx4ZmRceDE0XHgyYlx4NDJceDU5IgorCQkJIlx4NzBceDg3XHg5ZVx4YjVceGNjXHhlM1x4ZmFceDExIgorCQkJIlx4MjhceDNmXHg1Nlx4NmRceDg0XHg5Ylx4YjJceGM5IgorCQkJIlx4ZTBceGY3XHgwZVx4MjVceDNjXHg1M1x4NmFceDgxIgorCQkJIlx4OThceGFmXHhjNlx4ZGRceGY0XHgwYlx4MjJceDM5IgorCQkJIlx4NTBceDY3XHg3ZVx4OTVceGFjXHhjM1x4ZGFceGYxIgorCQkJIlx4MDhceDFmXHgzNlx4NGRceDY0XHg3Ylx4OTJceGE5IgorCQkJIlx4YzBceGQ3XHhlZVx4MDVceDFjXHgzM1x4NGFceDYxIgorCQkJIlx4NzhceDhmXHhhNlx4YmRceGQ0XHhlYlx4MDJceDE5IgorCQkJIlx4MzBceDQ3XHg1ZVx4NzVceDhjXHhhM1x4YmFceGQxIgorCQkJIlx4ZThceGZmXHgxNlx4MmRceDQ0XHg1Ylx4NzJceDg5IgorCQkJIlx4YTBceGI3XHhjZVx4ZTVceGZjXHgxM1x4MmFceDQxIgorCQkJIlx4NThceDZmXHg4Nlx4OWRceGI0XHhjYlx4ZTJceGY5IgorCQkJIlx4MTBceDI3XHgzZVx4NTVceDZjXHg4M1x4OWFceGIxIgorCQkJIlx4YzhceGRmXHhmNlx4MGRceDI0XHgzYlx4NTJceDY5IgorCQkJIlx4ODBceDk3XHhhZVx4YzVceGRjXHhmM1x4MGFceDIxIgorCQkJIlx4MzhceDRmXHg2Nlx4N2RceDk0XHhhYlx4YzJceGQ5IgorCQkJIlx4ZjBceDA3XHgxZVx4MzVceDRjXHg2M1x4N2FceDkxIgorCQkJIlx4YThceGJmXHhkNlx4ZWRceDA0XHgxYlx4MzJceDQ5IgorCQkJIlx4NjBceDc3XHg4ZVx4YTVceGJjXHhkM1x4ZWFceDAxIgorCQkJIlx4MThceDJmXHg0Nlx4NWRceDc0XHg4Ylx4YTJceGI5IgorCQkJIlx4ZDBceGU3XHhmZVx4MTVceDJjXHg0M1x4NWFceDcxIgorCQkJIlx4ODhceDlmXHhiNlx4Y2RceGU0XHhmYlx4MTJceDI5IgorCQkJIlx4NDBceDU3XHg2ZVx4ODVceDljXHhiM1x4Y2FceGUxIgorCQkJIlx4ZjhceDBmXHgyNlx4M2RceDU0XHg2Ylx4ODJceDk5IgorCQkJIlx4YjBceGM3XHhkZVx4ZjVceDBjXHgyM1x4M2FceDUxIgorCQkJIlx4NjhceDdmXHg5Nlx4YWRceGM0XHhkYlx4ZjJceDA5IgorCQkJIlx4MjBceDM3XHg0ZVx4NjVceDdjXHg5M1x4YWFceGMxIgorCQkJIlx4ZDhceGVmXHgwNlx4MWRceDM0XHg0Ylx4NjJceDc5IgorCQkJIlx4OTBceGE3XHhiZVx4ZDVceGVjXHgwM1x4MWFceDMxIgorCQkJIlx4NDhceDVmXHg3Nlx4OGRceGE0XHhiYlx4ZDJceGU5IgorCQkJIlx4MDBceDE5XHgzMlx4NGJceDY0XHg3ZFx4OTZceGFmIgorCQkJIlx4YzhceGUxXHhmYVx4MTNceDJjXHg0NVx4NWVceDc3IgorCQkJIlx4OTBceGE5XHhjMlx4ZGJceGY0XHgwZFx4MjZceDNmIgorCQkJIlx4NThceDcxXHg4YVx4YTNceGJjXHhkNVx4ZWVceDA3IgorCQkJIlx4MjBceDM5XHg1Mlx4NmJceDg0XHg5ZFx4YjZceGNmIgorCQkJIlx4ZThceDAxXHgxYVx4MzNceDRjXHg2NVx4N2VceDk3IgorCQkJIlx4YjBceGM5XHhlMlx4ZmJceDE0XHgyZFx4NDZceDVmIgorCQkJIlx4NzhceDkxXHhhYVx4YzNceGRjXHhmNVx4MGVceDI3IgorCQkJIlx4NDBceDU5XHg3Mlx4OGJceGE0XHhiZFx4ZDZceGVmIgorCQkJIlx4MDhceDIxXHgzYVx4NTNceDZjXHg4NVx4OWVceGI3IgorCQkJIlx4ZDBceGU5XHgwMlx4MWJceDM0XHg0ZFx4NjZceDdmIgorCQkJIlx4OThceGIxXHhjYVx4ZTNceGZjXHgxNVx4MmVceDQ3IgorCQkJIlx4NjBceDc5XHg5Mlx4YWJceGM0XHhkZFx4ZjZceDBmIgorCQkJIlx4MjhceDQxXHg1YVx4NzNceDhjXHhhNVx4YmVceGQ3IgorCQkJIlx4ZjBceDA5XHgyMlx4M2JceDU0XHg2ZFx4ODZceDlmIgorCQkJIlx4YjhceGQxXHhlYVx4MDNceDFjXHgzNVx4NGVceDY3IgorCQkJIlx4ODBceDk5XHhiMlx4Y2JceGU0XHhmZFx4MTZceDJmIgorCQkJIlx4NDhceDYxXHg3YVx4OTNceGFjXHhjNVx4ZGVceGY3IgorCQkJIlx4MTBceDI5XHg0Mlx4NWJceDc0XHg4ZFx4YTZceGJmIgorCQkJIlx4ZDhceGYxXHgwYVx4MjNceDNjXHg1NVx4NmVceDg3IgorCQkJIlx4YTBceGI5XHhkMlx4ZWJceDA0XHgxZFx4MzZceDRmIgorCQkJIlx4NjhceDgxXHg5YVx4YjNceGNjXHhlNVx4ZmVceDE3IgorCQkJIlx4MzBceDQ5XHg2Mlx4N2JceDk0XHhhZFx4YzZceGRmIgorCQkJIlx4ZjhceDExXHgyYVx4NDNceDVjXHg3NVx4OGVceGE3IgorCQkJIlx4YzBceGQ5XHhmMlx4MGJceDI0XHgzZFx4NTZceDZmIgorCQkJIlx4ODhceGExXHhiYVx4ZDNceGVjXHgwNVx4MWVceDM3IgorCQkJIlx4NTBceDY5XHg4Mlx4OWJceGI0XHhjZFx4ZTZceGZmIgorCQkJIlx4MThceDMxXHg0YVx4NjNceDdjXHg5NVx4YWVceGM3IgorCQkJIlx4ZTBceGY5XHgxMlx4MmJceDQ0XHg1ZFx4NzZceDhmIgorCQkJIlx4YThceGMxXHhkYVx4ZjNceDBjXHgyNVx4M2VceDU3IgorCQkJIlx4NzBceDg5XHhhMlx4YmJceGQ0XHhlZFx4MDZceDFmIgorCQkJIlx4MzhceDUxXHg2YVx4ODNceDljXHhiNVx4Y2VceGU3IgorCQkJIlx4MDBceDFiXHgzNlx4NTFceDZjXHg4N1x4YTJceGJkIgorCQkJIlx4ZDhceGYzXHgwZVx4MjlceDQ0XHg1Zlx4N2FceDk1IgorCQkJIlx4YjBceGNiXHhlNlx4MDFceDFjXHgzN1x4NTJceDZkIgorCQkJIlx4ODhceGEzXHhiZVx4ZDlceGY0XHgwZlx4MmFceDQ1IgorCQkJIlx4NjBceDdiXHg5Nlx4YjFceGNjXHhlN1x4MDJceDFkIgorCQkJIlx4MzhceDUzXHg2ZVx4ODlceGE0XHhiZlx4ZGFceGY1IgorCQkJIlx4MTBceDJiXHg0Nlx4NjFceDdjXHg5N1x4YjJceGNkIgorCQkJIlx4ZThceDAzXHgxZVx4MzlceDU0XHg2Zlx4OGFceGE1IgorCQkJIlx4YzBceGRiXHhmNlx4MTFceDJjXHg0N1x4NjJceDdkIgorCQkJIlx4OThceGIzXHhjZVx4ZTlceDA0XHgxZlx4M2FceDU1IgorCQkJIlx4NzBceDhiXHhhNlx4YzFceGRjXHhmN1x4MTJceDJkIgorCQkJIlx4NDhceDYzXHg3ZVx4OTlceGI0XHhjZlx4ZWFceDA1IgorCQkJIlx4MjBceDNiXHg1Nlx4NzFceDhjXHhhN1x4YzJceGRkIgorCQkJIlx4ZjhceDEzXHgyZVx4NDlceDY0XHg3Zlx4OWFceGI1IgorCQkJIlx4ZDBceGViXHgwNlx4MjFceDNjXHg1N1x4NzJceDhkIgorCQkJIlx4YThceGMzXHhkZVx4ZjlceDE0XHgyZlx4NGFceDY1IgorCQkJIlx4ODBceDliXHhiNlx4ZDFceGVjXHgwN1x4MjJceDNkIgorCQkJIlx4NThceDczXHg4ZVx4YTlceGM0XHhkZlx4ZmFceDE1IgorCQkJIlx4MzBceDRiXHg2Nlx4ODFceDljXHhiN1x4ZDJceGVkIgorCQkJIlx4MDhceDIzXHgzZVx4NTlceDc0XHg4Zlx4YWFceGM1IgorCQkJIlx4ZTBceGZiXHgxNlx4MzFceDRjXHg2N1x4ODJceDlkIgorCQkJIlx4YjhceGQzXHhlZVx4MDlceDI0XHgzZlx4NWFceDc1IgorCQkJIlx4OTBceGFiXHhjNlx4ZTFceGZjXHgxN1x4MzJceDRkIgorCQkJIlx4NjhceDgzXHg5ZVx4YjlceGQ0XHhlZlx4MGFceDI1IgorCQkJIlx4NDBceDViXHg3Nlx4OTFceGFjXHhjN1x4ZTJceGZkIgorCQkJIlx4MThceDMzXHg0ZVx4NjlceDg0XHg5Zlx4YmFceGQ1IgorCQkJIlx4ZjBceDBiXHgyNlx4NDFceDVjXHg3N1x4OTJceGFkIgorCQkJIlx4YzhceGUzXHhmZVx4MTlceDM0XHg0Zlx4NmFceDg1IgorCQkJIlx4YTBceGJiXHhkNlx4ZjFceDBjXHgyN1x4NDJceDVkIgorCQkJIlx4NzhceDkzXHhhZVx4YzlceGU0XHhmZlx4MWFceDM1IgorCQkJIlx4NTBceDZiXHg4Nlx4YTFceGJjXHhkN1x4ZjJceDBkIgorCQkJIlx4MjhceDQzXHg1ZVx4NzlceDk0XHhhZlx4Y2FceGU1IgorCQkJIlx4MDBceDFkXHgzYVx4NTdceDc0XHg5MVx4YWVceGNiIgorCQkJIlx4ZThceDA1XHgyMlx4M2ZceDVjXHg3OVx4OTZceGIzIgorCQkJIlx4ZDBceGVkXHgwYVx4MjdceDQ0XHg2MVx4N2VceDliIgorCQkJIlx4YjhceGQ1XHhmMlx4MGZceDJjXHg0OVx4NjZceDgzIgorCQkJIlx4YTBceGJkXHhkYVx4ZjdceDE0XHgzMVx4NGVceDZiIgorCQkJIlx4ODhceGE1XHhjMlx4ZGZceGZjXHgxOVx4MzZceDUzIgorCQkJIlx4NzBceDhkXHhhYVx4YzdceGU0XHgwMVx4MWVceDNiIgorCQkJIlx4NThceDc1XHg5Mlx4YWZceGNjXHhlOVx4MDZceDIzIgorCQkJIlx4NDBceDVkXHg3YVx4OTdceGI0XHhkMVx4ZWVceDBiIgorCQkJIlx4MjhceDQ1XHg2Mlx4N2ZceDljXHhiOVx4ZDZceGYzIgorCQkJIlx4MTBceDJkXHg0YVx4NjdceDg0XHhhMVx4YmVceGRiIgorCQkJIlx4ZjhceDE1XHgzMlx4NGZceDZjXHg4OVx4YTZceGMzIgorCQkJIlx4ZTBceGZkXHgxYVx4MzdceDU0XHg3MVx4OGVceGFiIgorCQkJIlx4YzhceGU1XHgwMlx4MWZceDNjXHg1OVx4NzZceDkzIgorCQkJIlx4YjBceGNkXHhlYVx4MDdceDI0XHg0MVx4NWVceDdiIgorCQkJIlx4OThceGI1XHhkMlx4ZWZceDBjXHgyOVx4NDZceDYzIgorCQkJIlx4ODBceDlkXHhiYVx4ZDdceGY0XHgxMVx4MmVceDRiIgorCQkJIlx4NjhceDg1XHhhMlx4YmZceGRjXHhmOVx4MTZceDMzIgorCQkJIlx4NTBceDZkXHg4YVx4YTdceGM0XHhlMVx4ZmVceDFiIgorCQkJIlx4MzhceDU1XHg3Mlx4OGZceGFjXHhjOVx4ZTZceDAzIgorCQkJIlx4MjBceDNkXHg1YVx4NzdceDk0XHhiMVx4Y2VceGViIgorCQkJIlx4MDhceDI1XHg0Mlx4NWZceDdjXHg5OVx4YjZceGQzIgorCQkJIlx4ZjBceDBkXHgyYVx4NDdceDY0XHg4MVx4OWVceGJiIgorCQkJIlx4ZDhceGY1XHgxMlx4MmZceDRjXHg2OVx4ODZceGEzIgorCQkJIlx4YzBceGRkXHhmYVx4MTdceDM0XHg1MVx4NmVceDhiIgorCQkJIlx4YThceGM1XHhlMlx4ZmZceDFjXHgzOVx4NTZceDczIgorCQkJIlx4OTBceGFkXHhjYVx4ZTdceDA0XHgyMVx4M2VceDViIgorCQkJIlx4NzhceDk1XHhiMlx4Y2ZceGVjXHgwOVx4MjZceDQzIgorCQkJIlx4NjBceDdkXHg5YVx4YjdceGQ0XHhmMVx4MGVceDJiIgorCQkJIlx4NDhceDY1XHg4Mlx4OWZceGJjXHhkOVx4ZjZceDEzIgorCQkJIlx4MzBceDRkXHg2YVx4ODdceGE0XHhjMVx4ZGVceGZiIgorCQkJIlx4MThceDM1XHg1Mlx4NmZceDhjXHhhOVx4YzZceGUzIgorCQkJIlx4MDBceDFmXHgzZVx4NWRceDdjXHg5Ylx4YmFceGQ5IgorCQkJIlx4ZjhceDE3XHgzNlx4NTVceDc0XHg5M1x4YjJceGQxIgorCQkJIlx4ZjBceDBmXHgyZVx4NGRceDZjXHg4Ylx4YWFceGM5IgorCQkJIlx4ZThceDA3XHgyNlx4NDVceDY0XHg4M1x4YTJceGMxIgorCQkJIlx4ZTBceGZmXHgxZVx4M2RceDVjXHg3Ylx4OWFceGI5IgorCQkJIlx4ZDhceGY3XHgxNlx4MzVceDU0XHg3M1x4OTJceGIxIgorCQkJIlx4ZDBceGVmXHgwZVx4MmRceDRjXHg2Ylx4OGFceGE5IgorCQkJIlx4YzhceGU3XHgwNlx4MjVceDQ0XHg2M1x4ODJceGExIgorCQkJIlx4YzBceGRmXHhmZVx4MWRceDNjXHg1Ylx4N2FceDk5IgorCQkJIlx4YjhceGQ3XHhmNlx4MTVceDM0XHg1M1x4NzJceDkxIgorCQkJIlx4YjBceGNmXHhlZVx4MGRceDJjXHg0Ylx4NmFceDg5IgorCQkJIlx4YThceGM3XHhlNlx4MDVceDI0XHg0M1x4NjJceDgxIgorCQkJIlx4YTBceGJmXHhkZVx4ZmRceDFjXHgzYlx4NWFceDc5IgorCQkJIlx4OThceGI3XHhkNlx4ZjVceDE0XHgzM1x4NTJceDcxIgorCQkJIlx4OTBceGFmXHhjZVx4ZWRceDBjXHgyYlx4NGFceDY5IgorCQkJIlx4ODhceGE3XHhjNlx4ZTVceDA0XHgyM1x4NDJceDYxIgorCQkJIlx4ODBceDlmXHhiZVx4ZGRceGZjXHgxYlx4M2FceDU5IgorCQkJIlx4NzhceDk3XHhiNlx4ZDVceGY0XHgxM1x4MzJceDUxIgorCQkJIlx4NzBceDhmXHhhZVx4Y2RceGVjXHgwYlx4MmFceDQ5IgorCQkJIlx4NjhceDg3XHhhNlx4YzVceGU0XHgwM1x4MjJceDQxIgorCQkJIlx4NjBceDdmXHg5ZVx4YmRceGRjXHhmYlx4MWFceDM5IgorCQkJIlx4NThceDc3XHg5Nlx4YjVceGQ0XHhmM1x4MTJceDMxIgorCQkJIlx4NTBceDZmXHg4ZVx4YWRceGNjXHhlYlx4MGFceDI5IgorCQkJIlx4NDhceDY3XHg4Nlx4YTVceGM0XHhlM1x4MDJceDIxIgorCQkJIlx4NDBceDVmXHg3ZVx4OWRceGJjXHhkYlx4ZmFceDE5IgorCQkJIlx4MzhceDU3XHg3Nlx4OTVceGI0XHhkM1x4ZjJceDExIgorCQkJIlx4MzBceDRmXHg2ZVx4OGRceGFjXHhjYlx4ZWFceDA5IgorCQkJIlx4MjhceDQ3XHg2Nlx4ODVceGE0XHhjM1x4ZTJceDAxIgorCQkJIlx4MjBceDNmXHg1ZVx4N2RceDljXHhiYlx4ZGFceGY5IgorCQkJIlx4MThceDM3XHg1Nlx4NzVceDk0XHhiM1x4ZDJceGYxIgorCQkJIlx4MTBceDJmXHg0ZVx4NmRceDhjXHhhYlx4Y2FceGU5IgorCQkJIlx4MDhceDI3XHg0Nlx4NjVceDg0XHhhM1x4YzJceGUxIgorCQkJIlx4MDBceDIxXHg0Mlx4NjMiLAogCQkuaWxlbiA9IDQxMDAsCi0JCS5yZXN1bHQgPSB7Ci0JCQkweGI1LCAweDgxLCAweGY1LCAweDY0LCAweDE4LCAweDczLCAweGUzLCAweGYwLAotCQkJMHg0YywgMHgxMywgMHhmMiwgMHg3NywgMHgxOCwgMHg2MCwgMHg2NSwgMHg1ZSwKLQkJCTB4MjksIDB4MDEsIDB4Y2UsIDB4OTgsIDB4NTUsIDB4NTMsIDB4ZjksIDB4MGMsCi0JCQkweDJhLCAweDA4LCAweGQ1LCAweDA5LCAweGIzLCAweDU3LCAweDU1LCAweDU2LAotCQkJMHhjNSwgMHhlOSwgMHg1NiwgMHg5MCwgMHhjYiwgMHg2YSwgMHhhMywgMHhjMCwKLQkJCTB4ZmYsIDB4YzQsIDB4NzksIDB4YjQsIDB4ZDIsIDB4OTcsIDB4NWQsIDB4YzQsCi0JCQkweDQzLCAweGQxLCAweGZlLCAweDk0LCAweDdiLCAweDg4LCAweDA2LCAweDVhLAotCQkJMHhiMiwgMHg5ZSwgMHgyYywgMHhmYywgMHg0NCwgMHgwMywgMHhiNywgMHg5MCwKLQkJCTB4YTAsIDB4YzEsIDB4YmEsIDB4NmEsIDB4MzMsIDB4YjgsIDB4YzcsIDB4YjIsCi0JCQkweDlkLCAweGUxLCAweDEyLCAweDRmLCAweGMwLCAweDY0LCAweGQ0LCAweDAxLAotCQkJMHhmZSwgMHg4YywgMHg3YSwgMHg2NiwgMHhmNywgMHhlNiwgMHg1YSwgMHg5MSwKLQkJCTB4YmIsIDB4ZGUsIDB4NTYsIDB4ODYsIDB4YWIsIDB4NjUsIDB4MjEsIDB4MzAsCi0JCQkweDAwLCAweDg0LCAweDY1LCAweDI0LCAweGE1LCAweDdkLCAweDg1LCAweGI0LAotCQkJMHhlMywgMHgxNywgMHhlZCwgMHgzYSwgMHhiNywgMHg2ZiwgMHhiNCwgMHgwYiwKLQkJCTB4MGIsIDB4YWYsIDB4MTUsIDB4YWUsIDB4NWEsIDB4OGYsIDB4ZjIsIDB4MGMsCi0JCQkweDJmLCAweDI3LCAweGY0LCAweDA5LCAweGQ4LCAweGQyLCAweDk2LCAweGI3LAotCQkJMHg3MSwgMHhmMiwgMHhjNSwgMHg5OSwgMHg0ZCwgMHg3ZSwgMHg3ZiwgMHg3NSwKLQkJCTB4NzcsIDB4ODksIDB4MzAsIDB4OGIsIDB4NTksIDB4ZGIsIDB4YTIsIDB4YjIsCi0JCQkweGEwLCAweGYzLCAweDE5LCAweDM5LCAweDJiLCAweGM1LCAweDdlLCAweDNmLAotCQkJMHg0ZiwgMHhkOSwgMHhkMywgMHg1NiwgMHgyOCwgMHg5NywgMHg0NCwgMHhkYywKLQkJCTB4YzAsIDB4OGIsIDB4NzcsIDB4MjQsIDB4ZDksIDB4NTIsIDB4ZTcsIDB4YzUsCi0JCQkweGFmLCAweGY2LCAweDdkLCAweDU5LCAweGIyLCAweDQ0LCAweDA1LCAweDFkLAotCQkJMHhiMSwgMHhiMCwgMHgxMSwgMHhhNSwgMHgwZiwgMHhlYywgMHgzMywgMHhlMSwKLQkJCTB4NmQsIDB4MWIsIDB4NGUsIDB4MWYsIDB4ZmYsIDB4NTcsIDB4OTEsIDB4YjQsCi0JCQkweDViLCAweDlhLCAweDk2LCAweGM1LCAweDUzLCAweGJjLCAweGFlLCAweDIwLAotCQkJMHgzYywgMHhiYiwgMHgxNCwgMHhlMiwgMHhlOCwgMHgyMiwgMHgzMywgMHhjMSwKLQkJCTB4NWUsIDB4NzYsIDB4OWUsIDB4NDYsIDB4OTksIDB4ZjYsIDB4MmEsIDB4MTUsCi0JCQkweGM2LCAweDk3LCAweDAyLCAweGEwLCAweDY2LCAweDQzLCAweGQxLCAweGE2LAotCQkJMHgzMSwgMHhhNiwgMHg5ZiwgMHhmYiwgMHhmNCwgMHhkMywgMHg2OSwgMHhlNSwKLQkJCTB4Y2QsIDB4NzYsIDB4OTUsIDB4YjgsIDB4N2EsIDB4ODIsIDB4N2YsIDB4MjEsCi0JCQkweDQ1LCAweGZmLCAweDNmLCAweGNlLCAweDU1LCAweGY2LCAweDk1LCAweDEwLAotCQkJMHgwOCwgMHg3NywgMHgxMCwgMHg0MywgMHhjNiwgMHhmMywgMHgwOSwgMHhlNSwKLQkJCTB4NjgsIDB4ZTcsIDB4M2MsIDB4YWQsIDB4MDAsIDB4NTIsIDB4NDUsIDB4MGQsCi0JCQkweGZlLCAweDJkLCAweGM2LCAweGMyLCAweDk0LCAweDhjLCAweDEyLCAweDFkLAotCQkJMHhlNiwgMHgyNSwgMHhhZSwgMHg5OCwgMHgxMiwgMHg4ZSwgMHgxOSwgMHg5YywKLQkJCTB4ODEsIDB4NjgsIDB4YjEsIDB4MTEsIDB4ZjYsIDB4NjksIDB4ZGEsIDB4ZTMsCi0JCQkweDYyLCAweDA4LCAweDE4LCAweDdhLCAweDI1LCAweDQ5LCAweDI4LCAweGFjLAotCQkJMHhiYSwgMHg3MSwgMHgxMiwgMHgwYiwgMHhlNCwgMHhhMiwgMHhlNSwgMHhjNywKLQkJCTB4NWQsIDB4OGUsIDB4ZWMsIDB4NDksIDB4NDAsIDB4MjEsIDB4YmYsIDB4NWEsCi0JCQkweDk4LCAweGYzLCAweDAyLCAweDY4LCAweDU1LCAweDAzLCAweDdmLCAweDhhLAotCQkJMHhlNSwgMHg5NCwgMHgwYywgMHgzMiwgMHg1YywgMHgwNywgMHg4MiwgMHg2MywKLQkJCTB4YWYsIDB4NmYsIDB4OTEsIDB4NDAsIDB4ODQsIDB4OGUsIDB4NTIsIDB4MjUsCi0JCQkweGQwLCAweGIwLCAweDI5LCAweDUzLCAweDA1LCAweGUyLCAweDUwLCAweDdhLAotCQkJMHgzNCwgMHhlYiwgMHhjOSwgMHg0NiwgMHgyMCwgMHhhOCwgMHgzZCwgMHhkZSwKLQkJCTB4N2YsIDB4MTYsIDB4NWYsIDB4MzYsIDB4YzUsIDB4MmUsIDB4ZGMsIDB4ZDEsCi0JCQkweDE1LCAweDQ3LCAweGM3LCAweDUwLCAweDQwLCAweDZkLCAweDkxLCAweGM1LAotCQkJMHhlNywgMHg5MywgMHg5NSwgMHgxYSwgMHhkMywgMHg1NywgMHhiYywgMHg1MiwKLQkJCTB4MzMsIDB4ZWUsIDB4MTQsIDB4MTksIDB4MjIsIDB4NTIsIDB4ODksIDB4YTcsCi0JCQkweDRhLCAweDI1LCAweDU2LCAweDc3LCAweDRiLCAweGNhLCAweGNmLCAweDBhLAotCQkJMHhlMSwgMHhmNSwgMHgzNSwgMHg4NSwgMHgzMCwgMHg3ZSwgMHg1OSwgMHg0YSwKLQkJCTB4YmQsIDB4MTQsIDB4NWIsIDB4ZGYsIDB4ZTMsIDB4NDYsIDB4Y2IsIDB4YWMsCi0JCQkweDFmLCAweDZjLCAweDk2LCAweDBlLCAweGY0LCAweDgxLCAweGQxLCAweDk5LAotCQkJMHhjYSwgMHg4OCwgMHg2MywgMHgzZCwgMHgwMiwgMHg1OCwgMHg2YiwgMHhhOSwKLQkJCTB4ZTUsIDB4OWYsIDB4YjMsIDB4MDAsIDB4YjIsIDB4NTQsIDB4YzYsIDB4NzQsCi0JCQkweDFjLCAweGJmLCAweDQ2LCAweGFiLCAweDk3LCAweGNjLCAweGY4LCAweDU0LAotCQkJMHgwNCwgMHgwNywgMHgwOCwgMHg1MiwgMHhlNiwgMHhjMCwgMHhkYSwgMHg5MywKLQkJCTB4NzQsIDB4N2QsIDB4OTMsIDB4OTksIDB4NWQsIDB4NzgsIDB4NjgsIDB4YTYsCi0JCQkweDJlLCAweDZiLCAweGQzLCAweDZhLCAweDY5LCAweGNjLCAweDEyLCAweDZiLAotCQkJMHhkNCwgMHhjNywgMHhhNSwgMHhjNiwgMHhlNywgMHhmNiwgMHgwMywgMHgwNCwKLQkJCTB4NWQsIDB4Y2QsIDB4NjEsIDB4NWUsIDB4MTcsIDB4NDAsIDB4ZGMsIDB4ZDEsCi0JCQkweDVjLCAweGY1LCAweDA4LCAweGRmLCAweDVjLCAweDkwLCAweDg1LCAweGE0LAotCQkJMHhhZiwgMHhmNiwgMHg3OCwgMHhiYiwgMHgwZCwgMHhmMSwgMHhmNCwgMHhhNCwKLQkJCTB4NTQsIDB4MjYsIDB4NzIsIDB4OWUsIDB4NjEsIDB4ZmEsIDB4ODYsIDB4Y2YsCi0JCQkweGU4LCAweDllLCAweGExLCAweGUwLCAweGM3LCAweDQ4LCAweDIzLCAweGFlLAotCQkJMHg1YSwgMHg5MCwgMHhhZSwgMHg3NSwgMHgwYSwgMHg3NCwgMHgxOCwgMHg4OSwKLQkJCTB4MDUsIDB4YjEsIDB4OTIsIDB4YjIsIDB4N2YsIDB4ZDAsIDB4MWIsIDB4YTYsCi0JCQkweDYyLCAweDA3LCAweDI1LCAweDAxLCAweGM3LCAweGMyLCAweDRmLCAweGY5LAotCQkJMHhlOCwgMHhmZSwgMHg2MywgMHg5NSwgMHg4MCwgMHgwNywgMHhiNCwgMHgyNiwKLQkJCTB4Y2MsIDB4ZDEsIDB4MjYsIDB4YjYsIDB4YzQsIDB4M2YsIDB4OWUsIDB4Y2IsCi0JCQkweDhlLCAweDNiLCAweDJlLCAweDQ0LCAweDE2LCAweGQzLCAweDEwLCAweDlhLAotCQkJMHg5NSwgMHgwOCwgMHhlYiwgMHhjOCwgMHhjYiwgMHhlYiwgMHhiZiwgMHg2ZiwKLQkJCTB4MGIsIDB4Y2QsIDB4MWYsIDB4YzgsIDB4Y2EsIDB4ODYsIDB4YWEsIDB4ZWMsCi0JCQkweDMzLCAweGU2LCAweDY5LCAweGY0LCAweDQ1LCAweDI1LCAweDg2LCAweDNhLAotCQkJMHgyMiwgMHg5NCwgMHg0ZiwgMHgwMCwgMHgyMywgMHg2YSwgMHg0NCwgMHhjMiwKLQkJCTB4NDksIDB4OTcsIDB4MzMsIDB4YWIsIDB4MzYsIDB4MTQsIDB4MGEsIDB4NzAsCi0JCQkweDI0LCAweGMzLCAweGJlLCAweDA0LCAweDNiLCAweDc5LCAweGEwLCAweGY5LAotCQkJMHhiOCwgMHhlNywgMHg3NiwgMHgyOSwgMHgyMiwgMHg4MywgMHhkNywgMHhmMiwKLQkJCTB4OTQsIDB4ZjQsIDB4NDEsIDB4NDksIDB4YmEsIDB4NWYsIDB4N2IsIDB4MDcsCi0JCQkweGI1LCAweGZiLCAweGRiLCAweDAzLCAweDFhLCAweDlmLCAweGI2LCAweDRjLAotCQkJMHhjMiwgMHgyZSwgMHgzNywgMHg0MCwgMHg0OSwgMHhjMywgMHgzOCwgMHgxNiwKLQkJCTB4ZTIsIDB4NGYsIDB4NzcsIDB4ODIsIDB4YjAsIDB4NjgsIDB4NGMsIDB4NzEsCi0JCQkweDFkLCAweDU3LCAweDYxLCAweDljLCAweGQ5LCAweDRlLCAweDU0LCAweDk5LAotCQkJMHg0NywgMHgxMywgMHgyOCwgMHg3MywgMHgzYywgMHhiYiwgMHgwMCwgMHg5MCwKLQkJCTB4ZjMsIDB4NGQsIDB4YzksIDB4MGUsIDB4ZmQsIDB4ZTcsIDB4YjEsIDB4NzEsCi0JCQkweGQzLCAweDE1LCAweDc5LCAweGJmLCAweGNjLCAweDI2LCAweDJmLCAweGJkLAotCQkJMHhhZCwgMHg2YywgMHg1MCwgMHg2OSwgMHg2YywgMHgzZSwgMHg2ZCwgMHg4MCwKLQkJCTB4OWEsIDB4ZWEsIDB4NzgsIDB4YWYsIDB4MTksIDB4YjIsIDB4MGQsIDB4NGQsCi0JCQkweGFkLCAweDA0LCAweDA3LCAweGFlLCAweDIyLCAweDkwLCAweDRhLCAweDkzLAotCQkJMHgzMiwgMHgwZSwgMHgzNiwgMHg5YiwgMHgxYiwgMHg0NiwgMHhiYSwgMHgzYiwKLQkJCTB4YjQsIDB4YWMsIDB4YzYsIDB4ZDEsIDB4YTIsIDB4MzEsIDB4NTMsIDB4M2IsCi0JCQkweDJhLCAweDNkLCAweDQ1LCAweGZlLCAweDAzLCAweDYxLCAweDEwLCAweDg1LAotCQkJMHgxNywgMHg2OSwgMHhhNiwgMHg3OCwgMHhjYywgMHg2YywgMHg4NywgMHg0OSwKLQkJCTB4NTMsIDB4ZjksIDB4ODAsIDB4MTAsIDB4ZGUsIDB4ODAsIDB4YTIsIDB4NDEsCi0JCQkweDZhLCAweGMzLCAweDMyLCAweDAyLCAweGFkLCAweDZkLCAweDNjLCAweDU2LAotCQkJMHgwMCwgMHg3MSwgMHg1MSwgMHgwNiwgMHhhNywgMHhiZCwgMHhmYiwgMHhlZiwKLQkJCTB4M2MsIDB4YjUsIDB4OWYsIDB4ZmMsIDB4NDgsIDB4N2QsIDB4NTMsIDB4N2MsCi0JCQkweDY2LCAweGIwLCAweDQ5LCAweDIzLCAweGM0LCAweDQ3LCAweDEwLCAweDBlLAotCQkJMHhlNSwgMHg2YywgMHg3NCwgMHgxMywgMHhlNiwgMHhjNSwgMHgzZiwgMHhhYSwKLQkJCTB4ZGUsIDB4ZmYsIDB4MDcsIDB4NDQsIDB4ZGQsIDB4NTYsIDB4MWIsIDB4YWQsCi0JCQkweDA5LCAweDc3LCAweGZiLCAweDViLCAweDEyLCAweGI4LCAweDBkLCAweDM4LAotCQkJMHgxNywgMHgzNywgMHgzNSwgMHg3YiwgMHg5YiwgMHhiYywgMHhmZSwgMHhkNCwKLQkJCTB4N2UsIDB4OGIsIDB4ZGEsIDB4N2UsIDB4NWIsIDB4MDQsIDB4YTcsIDB4MjIsCi0JCQkweGE3LCAweDMxLCAweGExLCAweDIwLCAweDg2LCAweGM3LCAweDFiLCAweDk5LAotCQkJMHhkYiwgMHhkMSwgMHg4OSwgMHhmNCwgMHg5NCwgMHhhMywgMHg1MywgMHg2OSwKLQkJCTB4OGQsIDB4ZTcsIDB4ZTgsIDB4NzQsIDB4MTEsIDB4OGQsIDB4NzQsIDB4ZDYsCi0JCQkweDA3LCAweDM3LCAweDkxLCAweDlmLCAweGZkLCAweDY3LCAweDUwLCAweDNhLAotCQkJMHhjOSwgMHhlMSwgMHhmNCwgMHgzNiwgMHhkNSwgMHhhMCwgMHg0NywgMHhkMSwKLQkJCTB4ZjksIDB4ZTUsIDB4MzksIDB4YTMsIDB4MzEsIDB4YWMsIDB4MDcsIDB4MzYsCi0JCQkweDIzLCAweGY4LCAweDY2LCAweDE4LCAweDE0LCAweDI4LCAweDM0LCAweDBmLAotCQkJMHhiOCwgMHhkMCwgMHhlNywgMHgyOSwgMHhiMywgMHgwNCwgMHg0YiwgMHg1NSwKLQkJCTB4MDEsIDB4NDEsIDB4YjIsIDB4NzUsIDB4OGQsIDB4Y2IsIDB4OTYsIDB4ODUsCi0JCQkweDNhLCAweGZiLCAweGFiLCAweDJiLCAweDllLCAweGZhLCAweDU4LCAweDIwLAotCQkJMHg0NCwgMHgxZiwgMHhjMCwgMHgxNCwgMHgyMiwgMHg3NSwgMHg2MSwgMHhlOCwKLQkJCTB4YWEsIDB4MTksIDB4Y2YsIDB4ZjEsIDB4ODIsIDB4NTYsIDB4ZjQsIDB4ZDcsCi0JCQkweDc4LCAweDdiLCAweDNkLCAweDVmLCAweGIzLCAweDllLCAweDBiLCAweDhhLAotCQkJMHg1NywgMHg1MCwgMHhkYiwgMHgxNywgMHg0MSwgMHg2NSwgMHg0ZCwgMHhhMywKLQkJCTB4MDIsIDB4YzksIDB4OWMsIDB4OWMsIDB4NTMsIDB4ZmIsIDB4MzksIDB4MzksCi0JCQkweDliLCAweDFkLCAweDcyLCAweDI0LCAweGRhLCAweGI3LCAweDM5LCAweGJlLAotCQkJMHgxMywgMHgzYiwgMHhmYSwgMHgyOSwgMHhkYSwgMHg5ZSwgMHg1NCwgMHg2NCwKLQkJCTB4NmUsIDB4YmEsIDB4ZDgsIDB4YTEsIDB4Y2IsIDB4YjMsIDB4MzYsIDB4ZmEsCi0JCQkweGNiLCAweDQ3LCAweDg1LCAweGU5LCAweDYxLCAweDM4LCAweGJjLCAweGJlLAotCQkJMHhjNSwgMHgwMCwgMHgzOCwgMHgyYSwgMHg1NCwgMHhmNywgMHhjNCwgMHhiOSwKLQkJCTB4YjMsIDB4ZDMsIDB4N2IsIDB4YTAsIDB4YTAsIDB4ZjgsIDB4NzIsIDB4N2YsCi0JCQkweDhjLCAweDhlLCAweDgyLCAweDBlLCAweGM2LCAweDFjLCAweDc1LCAweDlkLAotCQkJMHhjYSwgMHg4ZSwgMHg2MSwgMHg4NywgMHhkZSwgMHhhZCwgMHg4MCwgMHhkMiwKLQkJCTB4ZjUsIDB4ZjksIDB4ODAsIDB4ZWYsIDB4MTUsIDB4NzUsIDB4YWYsIDB4ZjUsCi0JCQkweDgwLCAweGZiLCAweGZmLCAweDZkLCAweDFlLCAweDI1LCAweGI3LCAweDQwLAotCQkJMHg2MSwgMHg2YSwgMHgzOSwgMHg1YSwgMHg2YSwgMHhiNSwgMHgzMSwgMHhhYiwKLQkJCTB4OTcsIDB4OGEsIDB4MTksIDB4ODksIDB4NDQsIDB4NDAsIDB4YzAsIDB4YTYsCi0JCQkweGI0LCAweDRlLCAweDMwLCAweDMyLCAweDdiLCAweDEzLCAweGU3LCAweDY3LAotCQkJMHhhOSwgMHg4YiwgMHg1NywgMHgwNCwgMHhjMiwgMHgwMSwgMHhhNiwgMHhmNCwKLQkJCTB4MjgsIDB4OTksIDB4YWQsIDB4MmMsIDB4NzYsIDB4YTMsIDB4NzgsIDB4YzIsCi0JCQkweDRhLCAweGU2LCAweGNhLCAweDVjLCAweDUwLCAweDZhLCAweGMxLCAweGIwLAotCQkJMHg2MiwgMHg0YiwgMHgxMCwgMHg4ZSwgMHg3YywgMHgxNywgMHg0MywgMHhiMywKLQkJCTB4MTcsIDB4NjYsIDB4MWMsIDB4M2UsIDB4OGQsIDB4NjksIDB4ZjAsIDB4NWEsCi0JCQkweDcxLCAweGY1LCAweDk3LCAweGRjLCAweGQxLCAweDQ1LCAweGRkLCAweDI4LAotCQkJMHhmMywgMHg1ZCwgMHhkZiwgMHg1MywgMHg3YiwgMHgxMSwgMHhlNSwgMHhiYywKLQkJCTB4NGMsIDB4ZGIsIDB4MWIsIDB4NTEsIDB4NmIsIDB4ZTksIDB4ZmIsIDB4M2QsCi0JCQkweGMxLCAweGMzLCAweDJjLCAweGI5LCAweDcxLCAweGY1LCAweGI2LCAweGIyLAotCQkJMHgxMywgMHgzNiwgMHg3OSwgMHg4MCwgMHg1MywgMHhlOCwgMHhkMywgMHhhNiwKLQkJCTB4MGEsIDB4YWYsIDB4ZmQsIDB4NTYsIDB4OTcsIDB4ZjcsIDB4NDAsIDB4OGUsCi0JCQkweDQ1LCAweGNlLCAweGY4LCAweGIwLCAweDllLCAweDVjLCAweDMzLCAweDgyLAotCQkJMHhiMCwgMHg0NCwgMHg1NiwgMHhmYywgMHgwNSwgMHgwOSwgMHhlOSwgMHgyYSwKLQkJCTB4YWMsIDB4MjYsIDB4ODAsIDB4MTQsIDB4MWQsIDB4YzgsIDB4M2EsIDB4MzUsCi0JCQkweDRjLCAweDgyLCAweDk3LCAweGZkLCAweDc2LCAweGI3LCAweGE5LCAweDBhLAotCQkJMHgzNSwgMHg1OCwgMHg3OSwgMHg4ZSwgMHgwZiwgMHg2NiwgMHhlYSwgMHhhZiwKLQkJCTB4NTEsIDB4NmMsIDB4MDksIDB4YTksIDB4NmUsIDB4OWIsIDB4Y2IsIDB4OWEsCi0JCQkweDMxLCAweDQ3LCAweGEwLCAweDJmLCAweDdjLCAweDcxLCAweGI0LCAweDRhLAotCQkJMHgxMSwgMHhhYSwgMHg4YywgMHg2NiwgMHhjNSwgMHg2NCwgMHhlNiwgMHgzYSwKLQkJCTB4NTQsIDB4ZGEsIDB4MjQsIDB4NmEsIDB4YzQsIDB4NDEsIDB4NjUsIDB4NDYsCi0JCQkweDgyLCAweGEwLCAweDBhLCAweDBmLCAweDVmLCAweGZiLCAweDI1LCAweGQwLAotCQkJMHgyYywgMHg5MSwgMHhhNywgMHhlZSwgMHhjNCwgMHg4MSwgMHgwNywgMHg4NiwKLQkJCTB4NzUsIDB4NWUsIDB4MzMsIDB4NjksIDB4OTcsIDB4ZTQsIDB4MmMsIDB4YTgsCi0JCQkweDlkLCAweDlmLCAweDBiLCAweDZhLCAweGJlLCAweGFkLCAweDk4LCAweGRhLAotCQkJMHg2ZCwgMHg5NCwgMHg0MSwgMHhkYSwgMHgyYywgMHgxZSwgMHg4OSwgMHhjNCwKLQkJCTB4YzIsIDB4YWYsIDB4MWUsIDB4MDAsIDB4MDUsIDB4MGIsIDB4ODMsIDB4NjAsCi0JCQkweGJkLCAweDQzLCAweGVhLCAweDE1LCAweDIzLCAweDdmLCAweGI5LCAweGFjLAotCQkJMHhlZSwgMHg0ZiwgMHgyYywgMHhhZiwgMHgyYSwgMHhmMywgMHhkZiwgMHhkMCwKLQkJCTB4ZjMsIDB4MTksIDB4MzEsIDB4YmIsIDB4NGEsIDB4NzQsIDB4ODQsIDB4MTcsCi0JCQkweDUyLCAweDMyLCAweDJjLCAweDdkLCAweDYxLCAweGU0LCAweGNiLCAweGViLAotCQkJMHg4MCwgMHgzOCwgMHgxNSwgMHg1MiwgMHhjYiwgMHg2ZiwgMHhlYSwgMHhlNSwKLQkJCTB4NzMsIDB4OWMsIDB4ZDksIDB4MjQsIDB4NjksIDB4YzYsIDB4OTUsIDB4MzIsCi0JCQkweDIxLCAweGM4LCAweDExLCAweGU0LCAweGRjLCAweDM2LCAweGQ3LCAweDkzLAotCQkJMHgzOCwgMHg2NiwgMHhmYiwgMHhiMiwgMHg3ZiwgMHgzYSwgMHhiOSwgMHhhZiwKLQkJCTB4MzEsIDB4ZGQsIDB4OTMsIDB4NzUsIDB4NzgsIDB4OGEsIDB4MmMsIDB4OTQsCi0JCQkweDg3LCAweDFhLCAweDU4LCAweGVjLCAweDllLCAweDdkLCAweDRkLCAweGJhLAotCQkJMHhlMSwgMHhlNSwgMHg0ZCwgMHhmYywgMHhiYywgMHhhNCwgMHgyYSwgMHgxNCwKLQkJCTB4ZWYsIDB4Y2MsIDB4YTcsIDB4ZWMsIDB4YWIsIDB4NDMsIDB4MDksIDB4MTgsCi0JCQkweGQzLCAweGFiLCAweDY4LCAweGQxLCAweDA3LCAweDk5LCAweDQ0LCAweDQ3LAotCQkJMHhkNiwgMHg4MywgMHg4NSwgMHgzYiwgMHgzMCwgMHhlYSwgMHhhOSwgMHg2YiwKLQkJCTB4NjMsIDB4ZWEsIDB4YzQsIDB4MDcsIDB4ZmIsIDB4NDMsIDB4MmYsIDB4YTQsCi0JCQkweGFhLCAweGIwLCAweGFiLCAweDAzLCAweDg5LCAweGNlLCAweDNmLCAweDhjLAotCQkJMHgwMiwgMHg3YywgMHg4NiwgMHg1NCwgMHhiYywgMHg4OCwgMHhhZiwgMHg3NSwKLQkJCTB4ZDIsIDB4ZGMsIDB4NjMsIDB4MTcsIDB4ZDMsIDB4MjYsIDB4ZjYsIDB4OTYsCi0JCQkweGE5LCAweDNjLCAweGYxLCAweDYxLCAweDhjLCAweDExLCAweDE4LCAweGNjLAotCQkJMHhkNiwgMHhlYSwgMHg1YiwgMHhlMiwgMHhjZCwgMHhmMCwgMHhmMSwgMHhiMiwKLQkJCTB4ZTUsIDB4MzUsIDB4OTAsIDB4MWYsIDB4ODUsIDB4NGMsIDB4NzYsIDB4NWIsCi0JCQkweDY2LCAweGNlLCAweDQ0LCAweGE0LCAweDMyLCAweDlmLCAweGU2LCAweDdiLAotCQkJMHg3MSwgMHg2ZSwgMHg5ZiwgMHg1OCwgMHgxNSwgMHg2NywgMHg3MiwgMHg4NywKLQkJCTB4NjQsIDB4OGUsIDB4M2EsIDB4NDQsIDB4NDUsIDB4ZDQsIDB4NzYsIDB4ZmEsCi0JCQkweGMyLCAweGY2LCAweGVmLCAweDg1LCAweDA1LCAweDE4LCAweDdhLCAweDliLAotCQkJMHhiYSwgMHg0MSwgMHg1NCwgMHhhYywgMHhmMCwgMHhmYywgMHg1OSwgMHgxMiwKLQkJCTB4M2YsIDB4ZGYsIDB4YTAsIDB4ZTUsIDB4OGEsIDB4NjUsIDB4ZmQsIDB4M2EsCi0JCQkweDYyLCAweDhkLCAweDgzLCAweDJjLCAweDAzLCAweGJlLCAweDA1LCAweDc2LAotCQkJMHgyZSwgMHg1MywgMHg0OSwgMHg5NywgMHg5NCwgMHgzMywgMHhhZSwgMHg0MCwKLQkJCTB4ODEsIDB4MTUsIDB4ZGIsIDB4NmUsIDB4YWQsIDB4YWEsIDB4ZjUsIDB4NGIsCi0JCQkweGUzLCAweDk4LCAweDcwLCAweGRmLCAweGUwLCAweDdjLCAweGNkLCAweGRiLAotCQkJMHgwMiwgMHhkNCwgMHg3ZCwgMHgyZiwgMHhjMSwgMHhlNiwgMHhiNCwgMHhmMywKLQkJCTB4ZDcsIDB4MGQsIDB4N2EsIDB4ZDksIDB4MjMsIDB4OWUsIDB4ODcsIDB4MmQsCi0JCQkweGNlLCAweDg3LCAweGFkLCAweGNjLCAweDcyLCAweDA1LCAweDAwLCAweDI5LAotCQkJMHhkYywgMHg3MywgMHg3ZiwgMHg2NCwgMHhjMSwgMHgxNSwgMHgwZSwgMHhjMiwKLQkJCTB4ZGYsIDB4YTcsIDB4NWYsIDB4ZWIsIDB4NDEsIDB4YTEsIDB4Y2QsIDB4ZWYsCi0JCQkweDVjLCAweDUwLCAweDc5LCAweDJhLCAweDU2LCAweDU2LCAweDcxLCAweDhjLAotCQkJMHhhYywgMHhjMCwgMHg3OSwgMHg1MCwgMHg2OSwgMHhjYSwgMHg1OSwgMHgzMiwKLQkJCTB4NjUsIDB4ZjIsIDB4NTQsIDB4ZTQsIDB4NTIsIDB4MzgsIDB4NzYsIDB4ZDEsCi0JCQkweDVlLCAweGRlLCAweDI2LCAweDllLCAweGZiLCAweDc1LCAweDJlLCAweDExLAotCQkJMHhiNSwgMHgxMCwgMHhmNCwgMHgxNywgMHg3MywgMHhmNSwgMHg4OSwgMHhjNywKLQkJCTB4NGYsIDB4NDMsIDB4NWMsIDB4OGUsIDB4N2MsIDB4YjksIDB4MDUsIDB4NTIsCi0JCQkweDI0LCAweDQwLCAweDk5LCAweGZlLCAweDliLCAweDg1LCAweDBiLCAweDZjLAotCQkJMHgyMiwgMHgzZSwgMHg4YiwgMHhhZSwgMHg4NiwgMHhhMSwgMHhkMiwgMHg3OSwKLQkJCTB4MDUsIDB4NjgsIDB4NmIsIDB4YWIsIDB4ZTMsIDB4NDEsIDB4NDksIDB4ZWQsCi0JCQkweDE1LCAweGExLCAweDhkLCAweDQwLCAweDJkLCAweDYxLCAweGRmLCAweDFhLAotCQkJMHg1OSwgMHhjOSwgMHgyNiwgMHg4YiwgMHhlZiwgMHgzMCwgMHg0YywgMHg4OCwKLQkJCTB4NGIsIDB4MTAsIDB4ZjgsIDB4OGQsIDB4YTYsIDB4OTIsIDB4OWYsIDB4NGIsCi0JCQkweGYzLCAweGM0LCAweDUzLCAweDBiLCAweDg5LCAweDVkLCAweDI4LCAweDkyLAotCQkJMHhjZiwgMHg3OCwgMHhiMiwgMHhjMCwgMHg1ZCwgMHhlZCwgMHg3ZSwgMHhmYywKLQkJCTB4YzAsIDB4MTIsIDB4MjMsIDB4NWYsIDB4NWEsIDB4NzgsIDB4ODYsIDB4NDMsCi0JCQkweDZlLCAweDI3LCAweGY3LCAweDVhLCAweGE3LCAweDZhLCAweGVkLCAweDE5LAotCQkJMHgwNCwgMHhmMCwgMHhiMywgMHgxMiwgMHhkMSwgMHhiZCwgMHgwZSwgMHg4OSwKLQkJCTB4NmUsIDB4YmMsIDB4OTYsIDB4YTgsIDB4ZDgsIDB4NDksIDB4MzksIDB4OWYsCi0JCQkweDdlLCAweDY3LCAweGYwLCAweDJlLCAweDNlLCAweDAxLCAweGE5LCAweGJhLAotCQkJMHhlYywgMHg4YiwgMHg2MiwgMHg4ZSwgMHhjYiwgMHg0YSwgMHg3MCwgMHg0MywKLQkJCTB4YzcsIDB4YzIsIDB4YzQsIDB4Y2EsIDB4ODIsIDB4MDMsIDB4NzMsIDB4ZTksCi0JCQkweDExLCAweGRmLCAweGNmLCAweDU0LCAweGVhLCAweGM5LCAweGIwLCAweDk1LAotCQkJMHg1MSwgMHhjMCwgMHgxMywgMHgzZCwgMHg5MiwgMHgwNSwgMHhmYSwgMHhmNCwKLQkJCTB4YTksIDB4MzQsIDB4YzgsIDB4Y2UsIDB4NmMsIDB4M2QsIDB4NTQsIDB4Y2MsCi0JCQkweGM0LCAweGFmLCAweGYxLCAweGRjLCAweDExLCAweDQ0LCAweDI2LCAweGEyLAotCQkJMHhhZiwgMHhmMSwgMHg4NSwgMHg3NSwgMHg3ZCwgMHgwMywgMHg2MSwgMHg2OCwKLQkJCTB4NGUsIDB4NzgsIDB4YzYsIDB4OTIsIDB4N2QsIDB4ODYsIDB4N2QsIDB4NzcsCi0JCQkweGRjLCAweDcxLCAweDcyLCAweGRiLCAweGM2LCAweGFlLCAweGExLCAweGNiLAotCQkJMHg3MCwgMHg5YSwgMHgwYiwgMHgxOSwgMHhiZSwgMHg0YSwgMHg2YywgMHgyYSwKLQkJCTB4ZTIsIDB4YmEsIDB4NmMsIDB4NjQsIDB4OWEsIDB4MTMsIDB4MjgsIDB4ZGYsCi0JCQkweDg1LCAweDc1LCAweGU2LCAweDQzLCAweGY2LCAweDg3LCAweDA4LCAweDY4LAotCQkJMHg2ZSwgMHhiYSwgMHg2ZSwgMHg3OSwgMHg5ZiwgMHgwNCwgMHhiYywgMHgyMywKLQkJCTB4NTAsIDB4ZjYsIDB4MzMsIDB4NWMsIDB4MWYsIDB4MjQsIDB4MjUsIDB4YmUsCi0JCQkweDMzLCAweDQ3LCAweDgwLCAweDQ1LCAweDU2LCAweGEzLCAweGE3LCAweGQ3LAotCQkJMHg3YSwgMHhiMSwgMHgzNCwgMHgwYiwgMHg5MCwgMHgzYywgMHg5YywgMHhhZCwKLQkJCTB4NDQsIDB4NWYsIDB4OWUsIDB4MGUsIDB4OWQsIDB4ZDQsIDB4YmQsIDB4OTMsCi0JCQkweDVlLCAweGZhLCAweDNjLCAweGUwLCAweGIwLCAweGQ5LCAweGVkLCAweGYzLAotCQkJMHhkNiwgMHgyZSwgMHhmZiwgMHgyNCwgMHhkOCwgMHg3MSwgMHg2YywgMHhlZCwKLQkJCTB4YWYsIDB4NTUsIDB4ZWIsIDB4MjIsIDB4YWMsIDB4OTMsIDB4NjgsIDB4MzIsCi0JCQkweDA1LCAweDViLCAweDQ3LCAweGRkLCAweGM2LCAweDRhLCAweGNiLCAweGM3LAotCQkJMHgxMCwgMHhlMSwgMHgzYywgMHg5MiwgMHgxYSwgMHhmMywgMHgyMywgMHg3OCwKLQkJCTB4MmIsIDB4YTEsIDB4ZDIsIDB4ODAsIDB4ZjQsIDB4MTIsIDB4YjEsIDB4MjAsCi0JCQkweDhmLCAweGZmLCAweDI2LCAweDM1LCAweGRkLCAweGZiLCAweGM3LCAweDRlLAotCQkJMHg3OCwgMHhmMSwgMHgyZCwgMHg1MCwgMHgxMiwgMHg3NywgMHhhOCwgMHg2MCwKLQkJCTB4N2MsIDB4MGYsIDB4ZjUsIDB4MTYsIDB4MmYsIDB4NjMsIDB4NzAsIDB4MmEsCi0JCQkweGMwLCAweDk2LCAweDgwLCAweDRlLCAweDBhLCAweGI0LCAweDkzLCAweDM1LAotCQkJMHg1ZCwgMHgxZCwgMHgzZiwgMHg1NiwgMHhmNywgMHgyZiwgMHhiYiwgMHg5MCwKLQkJCTB4MTEsIDB4MTYsIDB4OGYsIDB4YTIsIDB4ZWMsIDB4NDcsIDB4YmUsIDB4YWMsCi0JCQkweDU2LCAweDAxLCAweDI2LCAweDU2LCAweGIxLCAweDhjLCAweGIyLCAweDEwLAotCQkJMHhmOSwgMHgxYSwgMHhjYSwgMHhmNSwgMHhkMSwgMHhiNywgMHgzOSwgMHgyMCwKLQkJCTB4NjMsIDB4ZjEsIDB4NjksIDB4MjAsIDB4NGYsIDB4MTMsIDB4MTIsIDB4MWYsCi0JCQkweDViLCAweDY1LCAweGZjLCAweDk4LCAweGY3LCAweGM0LCAweDdhLCAweGJlLAotCQkJMHhmNywgMHgyNiwgMHg0ZCwgMHgyYiwgMHg4NCwgMHg3YiwgMHg0MiwgMHhhZCwKLQkJCTB4ZDgsIDB4N2EsIDB4MGEsIDB4YjQsIDB4ZDgsIDB4NzQsIDB4YmYsIDB4YzEsCi0JCQkweGYwLCAweDZlLCAweGI0LCAweDI5LCAweGEzLCAweGJiLCAweGNhLCAweDQ2LAotCQkJMHg2NywgMHg3MCwgMHg2YSwgMHgyZCwgMHhjZSwgMHgwZSwgMHhhMiwgMHg4YSwKLQkJCTB4YTksIDB4ODcsIDB4YmYsIDB4MDUsIDB4YzQsIDB4YzEsIDB4MDQsIDB4YTMsCi0JCQkweGFiLCAweGQ0LCAweDQ1LCAweDQzLCAweDhjLCAweGI2LCAweDAyLCAweGIwLAotCQkJMHg0MSwgMHhjOCwgMHhmYywgMHg0NCwgMHgzZCwgMHg1OSwgMHhhYSwgMHgyZSwKLQkJCTB4NDQsIDB4MjEsIDB4MmEsIDB4OGQsIDB4ODgsIDB4OWQsIDB4NTcsIDB4ZjQsCi0JCQkweGEwLCAweDAyLCAweDc3LCAweGI4LCAweGE2LCAweGEwLCAweGU2LCAweDc1LAotCQkJMHg1YywgMHg4MiwgMHg2NSwgMHgzZSwgMHgwMywgMHg1YywgMHgyOSwgMHg4ZiwKLQkJCTB4MzgsIDB4NTUsIDB4YWIsIDB4MzMsIDB4MjYsIDB4ZWYsIDB4OWYsIDB4NDMsCi0JCQkweDUyLCAweGZkLCAweDY4LCAweGFmLCAweDM2LCAweGI0LCAweGJiLCAweDlhLAotCQkJMHg1OCwgMHgwOSwgMHgwOSwgMHgxYiwgMHhjMywgMHg2NSwgMHg0NiwgMHg0NiwKLQkJCTB4MWQsIDB4YTcsIDB4OTQsIDB4MTgsIDB4MjMsIDB4NTAsIDB4MmMsIDB4Y2EsCi0JCQkweDJjLCAweDU1LCAweDE5LCAweDk3LCAweDAxLCAweDlkLCAweDkzLCAweDNiLAotCQkJMHg2MywgMHg4NiwgMHhmMiwgMHgwMywgMHg2NywgMHg0NSwgMHhkMiwgMHg3MiwKLQkJCTB4MjgsIDB4NTIsIDB4NmMsIDB4ZjQsIDB4ZTMsIDB4MWMsIDB4YjUsIDB4MTEsCi0JCQkweDEzLCAweGYxLCAweGViLCAweDIxLCAweGM3LCAweGQ5LCAweDU2LCAweDgyLAotCQkJMHgyYiwgMHg4MiwgMHgzOSwgMHhiZCwgMHg2OSwgMHg1NCwgMHhlZCwgMHg2MiwKLQkJCTB4YzMsIDB4ZTIsIDB4ZGUsIDB4NzMsIDB4ZDQsIDB4NmEsIDB4MTIsIDB4YWUsCi0JCQkweDEzLCAweDIxLCAweDdmLCAweDRiLCAweDViLCAweGZjLCAweGJmLCAweGU4LAotCQkJMHgyYiwgMHhiZSwgMHg1NiwgMHhiYSwgMHg2OCwgMHg4YiwgMHg5YSwgMHhiMSwKLQkJCTB4NmUsIDB4ZmEsIDB4YmYsIDB4N2UsIDB4NWEsIDB4NGIsIDB4ZjEsIDB4YWMsCi0JCQkweDk4LCAweDY1LCAweDg1LCAweGQxLCAweDkzLCAweDUzLCAweGQzLCAweDdiLAotCQkJMHgwOSwgMHhkZCwgMHg0YiwgMHgxMCwgMHg2ZCwgMHg4NCwgMHhiMCwgMHgxMywKLQkJCTB4NjUsIDB4YmQsIDB4Y2YsIDB4NTIsIDB4MDksIDB4YzQsIDB4ODUsIDB4ZTIsCi0JCQkweDg0LCAweDc0LCAweDE1LCAweDY1LCAweGI3LCAweGY3LCAweDUxLCAweGFmLAotCQkJMHg1NSwgMHhhZCwgMHhhNCwgMHhkMSwgMHgyMiwgMHg1NCwgMHg3MCwgMHg5NCwKLQkJCTB4YTAsIDB4MWMsIDB4OTAsIDB4NDEsIDB4ZmQsIDB4OTksIDB4ZDcsIDB4NWEsCi0JCQkweDMxLCAweGVmLCAweGFhLCAweDI1LCAweGQwLCAweDdmLCAweDRmLCAweGVhLAotCQkJMHgxZCwgMHg1NSwgMHg0MiwgMHhlNSwgMHg0OSwgMHhiMCwgMHhkMCwgMHg0NiwKLQkJCTB4NjIsIDB4MzYsIDB4NDMsIDB4YjIsIDB4ODIsIDB4MTUsIDB4NzUsIDB4NTAsCi0JCQkweGE0LCAweDcyLCAweGViLCAweDU0LCAweDI3LCAweDFmLCAweDhhLCAweGU0LAotCQkJMHg3ZCwgMHhlOSwgMHg2NiwgMHhjNSwgMHhmMSwgMHg1MywgMHhhNCwgMHhkMSwKLQkJCTB4MGMsIDB4ZWIsIDB4YjgsIDB4ZjgsIDB4YmMsIDB4ZDQsIDB4ZTIsIDB4ZTcsCi0JCQkweGUxLCAweGY4LCAweDRiLCAweGNiLCAweGE5LCAweGExLCAweGFmLCAweDE1LAotCQkJMHg4MywgMHhjYiwgMHg3MiwgMHhkMCwgMHgzMywgMHg3OSwgMHgwMCwgMHgyZCwKLQkJCTB4OWYsIDB4ZDcsIDB4ZjEsIDB4MmUsIDB4MWUsIDB4MTAsIDB4ZTQsIDB4NDUsCi0JCQkweGMwLCAweDc1LCAweDNhLCAweDM5LCAweGVhLCAweDY4LCAweGY3LCAweDVkLAotCQkJMHgxYiwgMHg3MywgMHg4ZiwgMHhlOSwgMHg4ZSwgMHgwZiwgMHg3MiwgMHg0NywKLQkJCTB4YWUsIDB4MzUsIDB4MGEsIDB4MzEsIDB4N2EsIDB4MTQsIDB4NGQsIDB4NGEsCi0JCQkweDZmLCAweDQ3LCAweGY3LCAweDdlLCAweDkxLCAweDZlLCAweDc0LCAweDhiLAotCQkJMHgyNiwgMHg0NywgMHhmOSwgMHhjMywgMHhmOSwgMHhkZSwgMHg3MCwgMHhmNSwKLQkJCTB4NjEsIDB4YWIsIDB4YTksIDB4MjcsIDB4OWYsIDB4ODIsIDB4ZTQsIDB4OWMsCi0JCQkweDg5LCAweDkxLCAweDNmLCAweDJlLCAweDZhLCAweGZkLCAweGI1LCAweDQ5LAotCQkJMHhlOSwgMHhmZCwgMHg1OSwgMHgxNCwgMHgzNiwgMHg0OSwgMHg0MCwgMHg2ZCwKLQkJCTB4MzIsIDB4ZDgsIDB4ODUsIDB4NDIsIDB4ZjMsIDB4YTUsIDB4ZGYsIDB4MGMsCi0JCQkweGE4LCAweDI3LCAweGQ3LCAweDU0LCAweGUyLCAweDYzLCAweDJmLCAweGYyLAotCQkJMHg3ZSwgMHg4YiwgMHg4YiwgMHhlNywgMHhmMSwgMHg5YSwgMHg5NSwgMHgzNSwKLQkJCTB4NDMsIDB4ZGMsIDB4M2EsIDB4ZTQsIDB4YjYsIDB4ZjQsIDB4ZDAsIDB4ZGYsCi0JCQkweDljLCAweGNiLCAweDk0LCAweGYzLCAweDIxLCAweGEwLCAweDc3LCAweDUwLAotCQkJMHhlMiwgMHhjNiwgMHhjNCwgMHhjNiwgMHg1ZiwgMHgwOSwgMHg2NCwgMHg1YiwKLQkJCTB4OTIsIDB4OTAsIDB4ZDgsIDB4ZTEsIDB4ZDEsIDB4ZWQsIDB4NGIsIDB4NDIsCi0JCQkweGQ3LCAweDM3LCAweGFmLCAweDY1LCAweDNkLCAweDExLCAweDM5LCAweGI2LAotCQkJMHgyNCwgMHg4YSwgMHg2MCwgMHhhZSwgMHhkNiwgMHgxZSwgMHhiZiwgMHgwZSwKLQkJCTB4MGQsIDB4ZDcsIDB4ZGMsIDB4OTYsIDB4MGUsIDB4NjUsIDB4NzUsIDB4NGUsCi0JCQkweDI5LCAweDA2LCAweDlkLCAweGE0LCAweDUxLCAweDNhLCAweDEwLCAweDYzLAotCQkJMHg4ZiwgMHgxNywgMHgwNywgMHhkNSwgMHg4ZSwgMHgzYywgMHhmNCwgMHgyOCwKLQkJCTB4MDAsIDB4NWEsIDB4NWIsIDB4MDUsIDB4MTksIDB4ZDgsIDB4YzAsIDB4NmMsCi0JCQkweGU1LCAweDE1LCAweGU0LCAweDljLCAweDlkLCAweDcxLCAweDlkLCAweDVlLAotCQkJMHg5NCwgMHgyOSwgMHgxYSwgMHhhNywgMHg4MCwgMHhmYSwgMHgwZSwgMHgzMywKLQkJCTB4MDMsIDB4ZGQsIDB4YjcsIDB4M2UsIDB4OWEsIDB4YTksIDB4MjYsIDB4MTgsCi0JCQkweDM3LCAweGE5LCAweDY0LCAweDA4LCAweDRkLCAweDk0LCAweDVhLCAweDg4LAotCQkJMHhjYSwgMHgzNSwgMHhjZSwgMHg4MSwgMHgwMiwgMHhlMywgMHgxZiwgMHgxYiwKLQkJCTB4ODksIDB4MWEsIDB4NzcsIDB4ODUsIDB4ZTMsIDB4NDEsIDB4NmQsIDB4MzIsCi0JCQkweDQyLCAweDE5LCAweDIzLCAweDdkLCAweGM4LCAweDczLCAweGVlLCAweDI1LAotCQkJMHg4NSwgMHgwZCwgMHhmOCwgMHgzMSwgMHgyNSwgMHg3OSwgMHgxYiwgMHg2ZiwKLQkJCTB4NzksIDB4MjUsIDB4ZDIsIDB4ZDgsIDB4ZDQsIDB4MjMsIDB4ZmQsIDB4ZjcsCi0JCQkweDgyLCAweDM2LCAweDZhLCAweDBjLCAweDQ2LCAweDIyLCAweDE1LCAweGU5LAotCQkJMHhmZiwgMHg3MiwgMHg0MSwgMHg5MSwgMHg5MSwgMHg3ZCwgMHgzYSwgMHhiNywKLQkJCTB4ZGQsIDB4NjUsIDB4OTksIDB4NzAsIDB4ZjYsIDB4OGQsIDB4ODQsIDB4ZjgsCi0JCQkweDY3LCAweDE1LCAweDIwLCAweDExLCAweGQ2LCAweGIyLCAweDU1LCAweDdiLAotCQkJMHhkYiwgMHg4NywgMHhlZSwgMHhlZiwgMHg1NSwgMHg4OSwgMHgyYSwgMHg1OSwKLQkJCTB4MmIsIDB4MDcsIDB4OGYsIDB4NDMsIDB4OGEsIDB4NTksIDB4M2MsIDB4MDEsCi0JCQkweDhiLCAweDY1LCAweDU0LCAweGExLCAweDY2LCAweGQ1LCAweDM4LCAweGJkLAotCQkJMHhjNiwgMHgzMCwgMHhhOSwgMHhjYywgMHg0OSwgMHhiNiwgMHhhOCwgMHgxYiwKLQkJCTB4YjgsIDB4YzAsIDB4MGUsIDB4ZTMsIDB4NDUsIDB4MjgsIDB4ZTIsIDB4ZmYsCi0JCQkweDQxLCAweDlmLCAweDdlLCAweDdjLCAweGQxLCAweGFlLCAweDllLCAweDI1LAotCQkJMHgzZiwgMHg0YywgMHg3YywgMHg3YywgMHhmNCwgMHhhOCwgMHgyNiwgMHg0ZCwKLQkJCTB4NWMsIDB4ZmQsIDB4NGIsIDB4MjcsIDB4MTgsIDB4ZjksIDB4NjEsIDB4NzYsCi0JCQkweDQ4LCAweGJhLCAweDBjLCAweDZiLCAweGE5LCAweDRkLCAweGZjLCAweGY1LAotCQkJMHgzYiwgMHgzNSwgMHg3ZSwgMHgyZiwgMHg0YSwgMHhhOSwgMHhjMiwgMHg5YSwKLQkJCTB4YWUsIDB4YWIsIDB4ODYsIDB4MDksIDB4ODksIDB4YzksIDB4YzIsIDB4NDAsCi0JCQkweDM5LCAweDJjLCAweDgxLCAweGIzLCAweGI4LCAweDE3LCAweDY3LCAweGMyLAotCQkJMHgwZCwgMHgzMiwgMHg0YSwgMHgzYSwgMHg2NywgMHg4MSwgMHhkNywgMHgxYSwKLQkJCTB4MzQsIDB4NTIsIDB4YzUsIDB4ZGIsIDB4MGEsIDB4ZjUsIDB4NjMsIDB4MzksCi0JCQkweGVhLCAweDFmLCAweGUxLCAweDdjLCAweGExLCAweDllLCAweGMxLCAweDM1LAotCQkJMHhlMywgMHhiMSwgMHgxOCwgMHg0NSwgMHg2NywgMHhmOSwgMHgyMiwgMHgzOCwKLQkJCTB4OTUsIDB4ZDksIDB4MzQsIDB4MzQsIDB4ODYsIDB4YzYsIDB4NDEsIDB4OTQsCi0JCQkweDE1LCAweGY5LCAweDViLCAweDQxLCAweGE2LCAweDg3LCAweDhiLCAweGY4LAotCQkJMHhkNSwgMHhlMSwgMHgxYiwgMHhlMiwgMHg1YiwgMHhmMywgMHg4NiwgMHgxMCwKLQkJCTB4ZmYsIDB4ZTYsIDB4YWUsIDB4NjksIDB4NzYsIDB4YmMsIDB4MGQsIDB4YjQsCi0JCQkweDA5LCAweDkwLCAweDBjLCAweGEyLCAweDY1LCAweDBjLCAweGFkLCAweDc0LAotCQkJMHhmNSwgMHhkNywgMHhmZiwgMHhkYSwgMHhjMSwgMHhjZSwgMHg4NSwgMHhiZSwKLQkJCTB4MDAsIDB4YTcsIDB4ZmYsIDB4NGQsIDB4MmYsIDB4NjUsIDB4ZDMsIDB4OGMsCi0JCQkweDg2LCAweDJkLCAweDA1LCAweGU4LCAweGVkLCAweDNlLCAweDZiLCAweDhiLAotCQkJMHgwZiwgMHgzZCwgMHg4MywgMHg4YywgMHhmMSwgMHgxZCwgMHg1YiwgMHg5NiwKLQkJCTB4MmUsIDB4YjEsIDB4OWMsIDB4YzIsIDB4OTgsIDB4ZTEsIDB4NzAsIDB4YjksCi0JCQkweGJhLCAweDVjLCAweDhhLCAweDQzLCAweGQ2LCAweDM0LCAweGE3LCAweDJkLAotCQkJMHhjOSwgMHg5MiwgMHhhZSwgMHhmMiwgMHhhNSwgMHg3YiwgMHgwNSwgMHg0OSwKLQkJCTB4YTcsIDB4MzMsIDB4MzQsIDB4ODYsIDB4Y2EsIDB4ZTQsIDB4OTYsIDB4MjMsCi0JCQkweDc2LCAweDViLCAweGYyLCAweGM2LCAweGYxLCAweDUxLCAweDI4LCAweDQyLAotCQkJMHg3YiwgMHhjYywgMHg3NiwgMHg4ZiwgMHhmYSwgMHhhMiwgMHhhZCwgMHgzMSwKLQkJCTB4ZDQsIDB4ZDYsIDB4N2EsIDB4NmQsIDB4MjUsIDB4MjUsIDB4NTQsIDB4ZTQsCi0JCQkweDNmLCAweDUwLCAweDU5LCAweGUxLCAweDVjLCAweDA1LCAweGI3LCAweDI3LAotCQkJMHg0OCwgMHhiZiwgMHgwNywgMHhlYywgMHgxYiwgMHgxMywgMHhiZSwgMHgyYiwKLQkJCTB4YTEsIDB4NTcsIDB4MmIsIDB4ZDUsIDB4YWIsIDB4ZDcsIDB4ZDAsIDB4NGMsCi0JCQkweDFlLCAweGNiLCAweDcxLCAweDliLCAweGM1LCAweDkwLCAweDg1LCAweGQzLAotCQkJMHhkZSwgMHg1OSwgMHhlYywgMHg3MSwgMHhlYiwgMHg4OSwgMHhiYiwgMHhkMCwKLQkJCTB4MDksIDB4NTAsIDB4ZTEsIDB4MTYsIDB4M2YsIDB4ZmQsIDB4MWMsIDB4MzQsCi0JCQkweGMzLCAweDFjLCAweGExLCAweDEwLCAweDc3LCAweDUzLCAweDk4LCAweGVmLAotCQkJMHhmMiwgMHhmZCwgMHhhNSwgMHgwMSwgMHg1OSwgMHhjMiwgMHg5YiwgMHgyNiwKLQkJCTB4YzcsIDB4NDIsIDB4ZDksIDB4NDksIDB4ZGEsIDB4NTgsIDB4MmIsIDB4NmUsCi0JCQkweDlmLCAweDUzLCAweDE5LCAweDc2LCAweDdlLCAweGQ5LCAweGM5LCAweDBlLAotCQkJMHg2OCwgMHhjOCwgMHg3ZiwgMHg1MSwgMHgyMiwgMHg0MiwgMHhlZiwgMHg0OSwKLQkJCTB4YTQsIDB4NTUsIDB4YjYsIDB4MzYsIDB4YWMsIDB4MDksIDB4YzcsIDB4MzEsCi0JCQkweDg4LCAweDE1LCAweDRiLCAweDJlLCAweDhmLCAweDNhLCAweDA4LCAweGY3LAotCQkJMHhkOCwgMHhmNywgMHhhOCwgMHhjNSwgMHhhOSwgMHgzMywgMHhhNiwgMHg0NSwKLQkJCTB4ZTQsIDB4YzQsIDB4OTQsIDB4NzYsIDB4ZjMsIDB4MGQsIDB4OGYsIDB4N2UsCi0JCQkweGM4LCAweGY2LCAweGJjLCAweDIzLCAweDBhLCAweGI2LCAweDRjLCAweGQzLAotCQkJMHg2YSwgMHhjZCwgMHgzNiwgMHhjMiwgMHg5MCwgMHg1YywgMHg1YywgMHgzYywKLQkJCTB4NjUsIDB4N2IsIDB4YzIsIDB4ZDYsIDB4Y2MsIDB4ZTYsIDB4MGQsIDB4ODcsCi0JCQkweDczLCAweDJlLCAweDcxLCAweDc5LCAweDE2LCAweDA2LCAweDYzLCAweDI4LAotCQkJMHgwOSwgMHgxNSwgMHhkOCwgMHg4OSwgMHgzOCwgMHgzOCwgMHgzZCwgMHhiNSwKLQkJCTB4NDIsIDB4MWMsIDB4MDgsIDB4MjQsIDB4ZjcsIDB4MmEsIDB4ZDIsIDB4OWQsCi0JCQkweGM4LCAweGNhLCAweGVmLCAweGY5LCAweDI3LCAweGQ4LCAweDA3LCAweDg2LAotCQkJMHhmNywgMHg0MywgMHgwYiwgMHg1NSwgMHgxNSwgMHgzZiwgMHg5ZiwgMHg4MywKLQkJCTB4ZWYsIDB4ZGMsIDB4NDksIDB4OWQsIDB4MmEsIDB4YzEsIDB4NTQsIDB4NjIsCi0JCQkweGJkLCAweDliLCAweDY2LCAweDU1LCAweDlmLCAweGI3LCAweDEyLCAweGYzLAotCQkJMHgxYiwgMHg0ZCwgMHg5ZCwgMHgyYSwgMHg1YywgMHhlZCwgMHg4NywgMHg3NSwKLQkJCTB4ODcsIDB4MjYsIDB4ZWMsIDB4NjEsIDB4MmMsIDB4YjQsIDB4MGYsIDB4ODksCi0JCQkweGIwLCAweGZiLCAweDJlLCAweDY4LCAweDVkLCAweDE1LCAweGM3LCAweDhkLAotCQkJMHgyZSwgMHhjMCwgMHhkOSwgMHhlYywgMHhhZiwgMHg0ZiwgMHhkMiwgMHgyNSwKLQkJCTB4MjksIDB4ZTgsIDB4ZDIsIDB4MjYsIDB4MmIsIDB4NjcsIDB4ZTksIDB4ZmMsCi0JCQkweDJiLCAweGE4LCAweDY3LCAweDk2LCAweDEyLCAweDFmLCAweDViLCAweDk2LAotCQkJMHhjNiwgMHgxNCwgMHg1MywgMHhhZiwgMHg0NCwgMHhlYSwgMHhkNiwgMHhlMiwKLQkJCTB4OTQsIDB4OTgsIDB4ZTQsIDB4MTIsIDB4OTMsIDB4NGMsIDB4OTIsIDB4ZTAsCi0JCQkweDE4LCAweGE1LCAweDhkLCAweDJkLCAweGU0LCAweDcxLCAweDNjLCAweDQ3LAotCQkJMHg0YywgMHhmNywgMHhlNiwgMHg0NywgMHg5ZSwgMHhjMCwgMHg2OCwgMHhkZiwKLQkJCTB4ZDQsIDB4ZjUsIDB4NWEsIDB4NzQsIDB4YjEsIDB4MmIsIDB4MjksIDB4MDMsCi0JCQkweDE5LCAweDA3LCAweGFmLCAweDkwLCAweDYyLCAweDVjLCAweDY4LCAweDk4LAotCQkJMHg0OCwgMHgxNiwgMHgxMSwgMHgwMiwgMHg5ZCwgMHhlZSwgMHhiNCwgMHg5YiwKLQkJCTB4ZTUsIDB4NDIsIDB4N2YsIDB4MDgsIDB4ZmQsIDB4MTYsIDB4MzIsIDB4MGIsCi0JCQkweGQwLCAweGIzLCAweGZhLCAweDJiLCAweGI3LCAweDk5LCAweGY5LCAweDI5LAotCQkJMHhjZCwgMHgyMCwgMHg0NSwgMHg5ZiwgMHhiMywgMHgxYSwgMHg1ZCwgMHhhMiwKLQkJCTB4YWYsIDB4NGQsIDB4ZTAsIDB4YmQsIDB4NDIsIDB4MGQsIDB4YmMsIDB4NzQsCi0JCQkweDk5LCAweDljLCAweDhlLCAweDUzLCAweDFhLCAweGI0LCAweDNlLCAweGJkLAotCQkJMHhhMiwgMHg5YSwgMHgyZCwgMHhmNywgMHhmOCwgMHgzOSwgMHgwZiwgMHg2NywKLQkJCTB4NjMsIDB4ZmMsIDB4NmIsIDB4YzAsIDB4YWYsIDB4YjMsIDB4NGIsIDB4NGYsCi0JCQkweDU1LCAweGM0LCAweGNmLCAweGE3LCAweGM4LCAweDA0LCAweDExLCAweDNlLAotCQkJMHgxNCwgMHgzMiwgMHhiYiwgMHgxYiwgMHgzOCwgMHg3NywgMHhkNiwgMHg3ZiwKLQkJCTB4NTQsIDB4NGMsIDB4ZGYsIDB4NzUsIDB4ZjMsIDB4MDcsIDB4MmQsIDB4MzMsCi0JCQkweDliLCAweGE4LCAweDIwLCAweGUxLCAweDdiLCAweDEyLCAweGI1LCAweGYzLAotCQkJMHhlZiwgMHgyZiwgMHhjZSwgMHg3MiwgMHhlNSwgMHgyNCwgMHg2MCwgMHhjMSwKLQkJCTB4MzAsIDB4ZTIsIDB4YWIsIDB4YTEsIDB4OGUsIDB4MTEsIDB4MDksIDB4YTgsCi0JCQkweDIxLCAweDMzLCAweDQ0LCAweGZlLCAweDdmLCAweDM1LCAweDMyLCAweDkzLAotCQkJMHgzOSwgMHhhNywgMHhhZCwgMHg4YiwgMHg3OSwgMHgwNiwgMHhiMiwgMHhjYiwKLQkJCTB4NGUsIDB4YTksIDB4NWYsIDB4YzcsIDB4YmEsIDB4NzQsIDB4MjksIDB4ZWMsCi0JCQkweDkzLCAweGEwLCAweDRlLCAweDU0LCAweDkzLCAweGMwLCAweGJjLCAweDU1LAotCQkJMHg2NCwgMHhmMCwgMHg0OCwgMHhlNSwgMHg1NywgMHg5OSwgMHhlZSwgMHg3NSwKLQkJCTB4ZDYsIDB4NzksIDB4MGYsIDB4NjYsIDB4YjcsIDB4YzYsIDB4NTcsIDB4NzYsCi0JCQkweGY3LCAweGI3LCAweGYzLCAweDljLCAweGM1LCAweDYwLCAweGU4LCAweDdmLAotCQkJMHg4MywgMHg3NiwgMHhkNiwgMHgwZSwgMHhhYSwgMHhlNiwgMHg5MCwgMHgzOSwKLQkJCTB4MWQsIDB4YTYsIDB4MzIsIDB4NmEsIDB4MzQsIDB4ZTMsIDB4NTUsIDB4ZjgsCi0JCQkweDU4LCAweGEwLCAweDU4LCAweDdkLCAweDMzLCAweGUwLCAweDIyLCAweDM5LAotCQkJMHg0NCwgMHg2NCwgMHg4NywgMHg4NiwgMHg1YSwgMHgyZiwgMHhhNywgMHg3ZSwKLQkJCTB4MGYsIDB4MzgsIDB4ZWEsIDB4YjAsIDB4MzAsIDB4Y2MsIDB4NjEsIDB4YTUsCi0JCQkweDZhLCAweDMyLCAweGFlLCAweDFlLCAweGY3LCAweGU5LCAweGQwLCAweGE5LAotCQkJMHgwYywgMHgzMiwgMHg0YiwgMHhiNSwgMHg0OSwgMHgyOCwgMHhhYiwgMHg4NSwKLQkJCTB4MmYsIDB4OGUsIDB4MDEsIDB4MzYsIDB4MzgsIDB4NTIsIDB4ZDAsIDB4YmEsCi0JCQkweGQ2LCAweDAyLCAweDc4LCAweGY4LCAweDBlLCAweDNlLCAweDljLCAweDhiLAotCQkJMHg2YiwgMHg0NSwgMHg5OSwgMHgzZiwgMHg1YywgMHhmZSwgMHg1OCwgMHhmMSwKLQkJCTB4NWMsIDB4OTQsIDB4MDQsIDB4ZTEsIDB4ZjUsIDB4MTgsIDB4NmQsIDB4NTEsCi0JCQkweGIyLCAweDVkLCAweDE4LCAweDIwLCAweGI2LCAweGMyLCAweDlhLCAweDQyLAotCQkJMHgxZCwgMHhiMywgMHhhYiwgMHgzYywgMHhiNiwgMHgzYSwgMHgxMywgMHgwMywKLQkJCTB4YjIsIDB4NDYsIDB4ODIsIDB4NGYsIDB4ZmMsIDB4NjQsIDB4YmMsIDB4NGYsCi0JCQkweGNhLCAweGZhLCAweDljLCAweGMwLCAweGQ1LCAweGE3LCAweGJkLCAweDExLAotCQkJMHhiNywgMHhlNCwgMHg1YSwgMHhmNiwgMHg2ZiwgMHg0ZCwgMHg0ZCwgMHg1NCwKLQkJCTB4ZWEsIDB4YTQsIDB4OTgsIDB4NjYsIDB4ZDQsIDB4MjIsIDB4M2IsIDB4ZDMsCi0JCQkweDhmLCAweDM0LCAweDQ3LCAweGQ5LCAweDdjLCAweGY0LCAweDcyLCAweDNiLAotCQkJMHg0ZCwgMHgwMiwgMHg3NywgMHhmNiwgMHhkNiwgMHhkZCwgMHgwOCwgMHgwYSwKLQkJCTB4ODEsIDB4ZTEsIDB4ODYsIDB4ODksIDB4M2UsIDB4NTYsIDB4MTAsIDB4M2MsCi0JCQkweGJhLCAweGQ3LCAweDgxLCAweDhjLCAweDA4LCAweGJjLCAweDhiLCAweGUyLAotCQkJMHg1MywgMHhlYywgMHhhNywgMHg4OSwgMHhlZSwgMHhjOCwgMHg1NiwgMHhiNSwKLQkJCTB4MzYsIDB4MmMsIDB4YjIsIDB4MDMsIDB4YmEsIDB4OTksIDB4ZGQsIDB4N2MsCi0JCQkweDQ4LCAweGEwLCAweGIwLCAweGJjLCAweDkxLCAweDMzLCAweGU5LCAweGE4LAotCQkJMHhjYiwgMHhjZCwgMHhjZiwgMHg1OSwgMHg1ZiwgMHgxZiwgMHgxNSwgMHhlMiwKLQkJCTB4NTYsIDB4ZjUsIDB4NGUsIDB4MDEsIDB4MzUsIDB4MjcsIDB4NDUsIDB4NzcsCi0JCQkweDQ3LCAweGM4LCAweGJjLCAweGNiLCAweDdlLCAweDM5LCAweGMxLCAweDk3LAotCQkJMHgyOCwgMHhkMywgMHg4NCwgMHhmYywgMHgyYywgMHgzZSwgMHhjOCwgMHhhZCwKLQkJCTB4OWMsIDB4ZjgsIDB4OGEsIDB4NjEsIDB4OWMsIDB4MjgsIDB4YWEsIDB4YzUsCi0JCQkweDk5LCAweDIwLCAweDQzLCAweDg1LCAweDlkLCAweGE1LCAweGUyLCAweDhiLAotCQkJMHhiOCwgMHhhZSwgMHhlYiwgMHhkMCwgMHgzMiwgMHgwZCwgMHg1MiwgMHg3OCwKLQkJCTB4MDksIDB4NTYsIDB4M2YsIDB4YzcsIDB4ZDgsIDB4N2UsIDB4MjYsIDB4ZmMsCi0JCQkweDM3LCAweGZiLCAweDZmLCAweDA0LCAweGZjLCAweGZhLCAweDkyLCAweDEwLAotCQkJMHhhYywgMHhmOCwgMHgzZSwgMHgyMSwgMHhkYywgMHg4YywgMHgyMSwgMHgxNiwKLQkJCTB4N2QsIDB4NjcsIDB4NmUsIDB4ZjYsIDB4Y2QsIDB4ZGEsIDB4YjYsIDB4OTgsCi0JCQkweDIzLCAweGFiLCAweDIzLCAweDNjLCAweGIyLCAweDEwLCAweGEwLCAweDUzLAotCQkJMHg1YSwgMHg1NiwgMHg5ZiwgMHhjNSwgMHhkMCwgMHhmZiwgMHhiYiwgMHhlNCwKLQkJCTB4OTgsIDB4M2MsIDB4NjksIDB4MWUsIDB4ZGIsIDB4MzgsIDB4OGYsIDB4N2UsCi0JCQkweDBmLCAweGQyLCAweDk4LCAweDg4LCAweDgxLCAweDhiLCAweDQ1LCAweDY3LAotCQkJMHhlYSwgMHgzMywgMHhmMSwgMHhlYiwgMHhlOSwgMHg5NywgMHg1NSwgMHgyZSwKLQkJCTB4ZDksIDB4YWEsIDB4ZWIsIDB4NWEsIDB4ZWMsIDB4ZGEsIDB4ZTEsIDB4NjgsCi0JCQkweGE4LCAweDlkLCAweDNjLCAweDg0LCAweDdjLCAweDA1LCAweDNkLCAweDYyLAotCQkJMHg4NywgMHg4ZiwgMHgwMywgMHgyMSwgMHgyOCwgMHg5NSwgMHgwYywgMHg4OSwKLQkJCTB4MjUsIDB4MjIsIDB4NGEsIDB4YjAsIDB4OTMsIDB4YTksIDB4NTAsIDB4YTIsCi0JCQkweDJmLCAweDU3LCAweDZlLCAweDE4LCAweDQyLCAweDE5LCAweDU0LCAweDBjLAotCQkJMHg1NSwgMHg2NywgMHhjNiwgMHgxMSwgMHg0OSwgMHhmNCwgMHg1YywgMHhkMiwKLQkJCTB4ZTksIDB4M2QsIDB4ZGQsIDB4OGIsIDB4NDgsIDB4NzEsIDB4MjEsIDB4MDAsCi0JCQkweGMzLCAweDlhLCAweDZjLCAweDg1LCAweDc0LCAweDI4LCAweDgzLCAweDRhLAotCQkJMHgxYiwgMHgzMSwgMHgwNSwgMHhlMSwgMHgwNiwgMHg5MiwgMHhlNywgMHhkYSwKLQkJCTB4ODUsIDB4NzMsIDB4NzgsIDB4NDUsIDB4MjAsIDB4N2YsIDB4YWUsIDB4MTMsCi0JCQkweDdjLCAweDMzLCAweDA2LCAweDIyLCAweGY0LCAweDgzLCAweGY5LCAweDM1LAotCQkJMHgzZiwgMHg2YywgMHg3MSwgMHhhOCwgMHg0ZSwgMHg0OCwgMHhiZSwgMHg5YiwKLQkJCTB4Y2UsIDB4OGEsIDB4YmEsIDB4ZGEsIDB4YmUsIDB4MjgsIDB4MDgsIDB4ZjcsCi0JCQkweGUyLCAweDE0LCAweDhjLCAweDcxLCAweGVhLCAweDcyLCAweGY5LCAweDMzLAotCQkJMHhmMiwgMHg4OCwgMHgzZiwgMHhkNywgMHhiYiwgMHg2OSwgMHg2YywgMHgyOSwKLQkJCTB4MTksIDB4ZGMsIDB4ODQsIDB4Y2UsIDB4MWYsIDB4MTIsIDB4NGYsIDB4YzgsCi0JCQkweGFmLCAweGE1LCAweDA0LCAweGJhLCAweDVhLCAweGFiLCAweGIwLCAweGQ5LAotCQkJMHgxNCwgMHgxZiwgMHg2YywgMHg2OCwgMHg5OCwgMHgzOSwgMHg4OSwgMHg3YSwKLQkJCTB4ZDksIDB4ZDgsIDB4MmYsIDB4ZGYsIDB4YTgsIDB4NDcsIDB4NGEsIDB4MjUsCi0JCQkweGUyLCAweGZiLCAweDMzLCAweGY0LCAweDU5LCAweDc4LCAweGUxLCAweDY4LAotCQkJMHg4NSwgMHhjZiwgMHhmZSwgMHg1OSwgMHgyMCwgMHhkNCwgMHgwNSwgMHgxZCwKLQkJCTB4ODAsIDB4OTksIDB4YWUsIDB4YmMsIDB4Y2EsIDB4YWUsIDB4MGYsIDB4MmYsCi0JCQkweDY1LCAweDQzLCAweDM0LCAweDhlLCAweDdlLCAweGFjLCAweGQzLCAweDkzLAotCQkJMHgyZiwgMHhhYywgMHg2ZCwgMHgxNCwgMHgzZCwgMHgwMiwgMHgwNywgMHg3MCwKLQkJCTB4OWQsIDB4YTQsIDB4ZjMsIDB4MWIsIDB4NWMsIDB4MzYsIDB4ZmMsIDB4MDEsCi0JCQkweDczLCAweDM0LCAweDg1LCAweDBjLCAweDZjLCAweGQ2LCAweGYxLCAweGJkLAotCQkJMHgzZiwgMHhkZiwgMHhlZSwgMHhmNSwgMHhkOSwgMHhiYSwgMHg1NiwgMHhlZiwKLQkJCTB4ZjQsIDB4OWIsIDB4NmIsIDB4ZWUsIDB4OWYsIDB4NWEsIDB4NzgsIDB4NmQsCi0JCQkweDMyLCAweDE5LCAweGY0LCAweGY3LCAweGY4LCAweDRjLCAweDY5LCAweDBiLAotCQkJMHg0YiwgMHhiYywgMHhiYiwgMHhiNywgMHhmMiwgMHg4NSwgMHhhZiwgMHg3MCwKLQkJCTB4NzUsIDB4MjQsIDB4NmMsIDB4NTQsIDB4YTcsIDB4MGUsIDB4NGQsIDB4MWQsCi0JCQkweDAxLCAweGJmLCAweDA4LCAweGFjLCAweGNmLCAweDdmLCAweDJjLCAweGUzLAotCQkJMHgxNCwgMHg4OSwgMHg1ZSwgMHg3MCwgMHg1YSwgMHg5OSwgMHg5MiwgMHhjZCwKLQkJCTB4MDEsIDB4ODQsIDB4YzgsIDB4ZDIsIDB4YWIsIDB4ZTUsIDB4NGYsIDB4NTgsCi0JCQkweGU3LCAweDBmLCAweDJmLCAweDBlLCAweGZmLCAweDY4LCAweGVhLCAweGZkLAotCQkJMHgxNSwgMHhiMywgMHgxNywgMHhlNiwgMHhiMCwgMHhlNywgMHg4NSwgMHhkOCwKLQkJCTB4MjMsIDB4MmUsIDB4MDUsIDB4YzcsIDB4YzksIDB4YzQsIDB4NDYsIDB4MWYsCi0JCQkweGUxLCAweDllLCAweDQ5LCAweDIwLCAweDIzLCAweDI0LCAweDRkLCAweDdlLAotCQkJMHgyOSwgMHg2NSwgMHhmZiwgMHhmNCwgMHhiNiwgMHhmZCwgMHgxYSwgMHg4NSwKLQkJCTB4YzQsIDB4MTYsIDB4ZWMsIDB4ZmMsIDB4ZWEsIDB4N2IsIDB4ZDYsIDB4MmMsCi0JCQkweDQzLCAweGY4LCAweGI3LCAweGJmLCAweDc5LCAweGMwLCAweDg1LCAweGNkLAotCQkJMHhlZiwgMHhlMSwgMHg5OCwgMHhkMywgMHhhNSwgMHhmNywgMHg5MCwgMHg4YywKLQkJCTB4ZTksIDB4N2YsIDB4ODAsIDB4NmIsIDB4ZDIsIDB4YWMsIDB4NGMsIDB4MzAsCi0JCQkweGE3LCAweGM2LCAweDYxLCAweDZjLCAweGQyLCAweGY5LCAweDJjLCAweGZmLAotCQkJMHgzMCwgMHhiYywgMHgyMiwgMHg4MSwgMHg3ZCwgMHg5MywgMHgxMiwgMHhlNCwKLQkJCTB4MGEsIDB4Y2QsIDB4YWYsIDB4ZGQsIDB4ZTgsIDB4YWIsIDB4MGEsIDB4MWUsCi0JCQkweDEzLCAweGE0LCAweDI3LCAweGMzLCAweDVmLCAweGY3LCAweDRiLCAweGJiLAotCQkJMHgzNywgMHgwOSwgMHg0YiwgMHg5MSwgMHg2ZiwgMHg5MiwgMHg0ZiwgMHhhZiwKLQkJCTB4NTIsIDB4ZWUsIDB4ZGYsIDB4ZWYsIDB4MDksIDB4NmYsIDB4ZjcsIDB4NWMsCi0JCQkweDZlLCAweDEyLCAweDE3LCAweDcyLCAweDYzLCAweDU3LCAweGM3LCAweGJhLAotCQkJMHgzYiwgMHg2YiwgMHgzOCwgMHgzMiwgMHg3MywgMHgxYiwgMHg5YywgMHg4MCwKLQkJCTB4YzEsIDB4N2EsIDB4YzYsIDB4Y2YsIDB4Y2QsIDB4MzUsIDB4YzAsIDB4NmIsCi0JCQkweDMxLCAweDFhLCAweDZiLCAweGU5LCAweGQ4LCAweDJjLCAweDI5LCAweDNmLAotCQkJMHg5NiwgMHhmYiwgMHhiNiwgMHhjZCwgMHgxMywgMHg5MSwgMHgzYiwgMHhjMiwKLQkJCTB4ZDIsIDB4YTMsIDB4MzEsIDB4OGQsIDB4YTQsIDB4Y2QsIDB4NTcsIDB4Y2QsCi0JCQkweDEzLCAweDNkLCAweDY0LCAweGZkLCAweDA2LCAweGNlLCAweGU2LCAweGRjLAotCQkJMHgwYywgMHgyNCwgMHg0MywgMHgzMSwgMHg0MCwgMHg1NywgMHhmMSwgMHg3MiwKLQkJCTB4MTcsIDB4ZTMsIDB4M2EsIDB4NjMsIDB4NmQsIDB4MzUsIDB4Y2YsIDB4NWQsCi0JCQkweDk3LCAweDQwLCAweDU5LCAweGRkLCAweGY3LCAweDNjLCAweDAyLCAweGY3LAotCQkJMHgxYywgMHg3ZSwgMHgwNSwgMHhiYiwgMHhhOSwgMHgwZCwgMHgwMSwgMHhiMSwKLQkJCTB4OGUsIDB4YzAsIDB4MzAsIDB4YTksIDB4NTMsIDB4MjQsIDB4YzksIDB4ODksCi0JCQkweDg0LCAweDZkLCAweGFhLCAweGQwLCAweGNkLCAweDkxLCAweGMyLCAweDRkLAotCQkJMHg5MSwgMHhiMCwgMHg4OSwgMHhlMiwgMHhiZiwgMHg4MywgMHg0NCwgMHhhYSwKLQkJCTB4MjgsIDB4NzIsIDB4MjMsIDB4YTAsIDB4YzIsIDB4YWQsIDB4YWQsIDB4MWMsCi0JCQkweGZjLCAweDNmLCAweDA5LCAweDdhLCAweDBiLCAweGRjLCAweGM1LCAweDFiLAotCQkJMHg4NywgMHgxMywgMHhjNiwgMHg1YiwgMHg1OSwgMHg4ZCwgMHhmMiwgMHhjOCwKLQkJCTB4YWYsIDB4ZGYsIDB4MTEsIDB4OTUsCi0JCX0sCisJCS5yZXN1bHQgPQorCQkJIlx4YjVceDgxXHhmNVx4NjRceDE4XHg3M1x4ZTNceGYwIgorCQkJIlx4NGNceDEzXHhmMlx4NzdceDE4XHg2MFx4NjVceDVlIgorCQkJIlx4MjlceDAxXHhjZVx4OThceDU1XHg1M1x4ZjlceDBjIgorCQkJIlx4MmFceDA4XHhkNVx4MDlceGIzXHg1N1x4NTVceDU2IgorCQkJIlx4YzVceGU5XHg1Nlx4OTBceGNiXHg2YVx4YTNceGMwIgorCQkJIlx4ZmZceGM0XHg3OVx4YjRceGQyXHg5N1x4NWRceGM0IgorCQkJIlx4NDNceGQxXHhmZVx4OTRceDdiXHg4OFx4MDZceDVhIgorCQkJIlx4YjJceDllXHgyY1x4ZmNceDQ0XHgwM1x4YjdceDkwIgorCQkJIlx4YTBceGMxXHhiYVx4NmFceDMzXHhiOFx4YzdceGIyIgorCQkJIlx4OWRceGUxXHgxMlx4NGZceGMwXHg2NFx4ZDRceDAxIgorCQkJIlx4ZmVceDhjXHg3YVx4NjZceGY3XHhlNlx4NWFceDkxIgorCQkJIlx4YmJceGRlXHg1Nlx4ODZceGFiXHg2NVx4MjFceDMwIgorCQkJIlx4MDBceDg0XHg2NVx4MjRceGE1XHg3ZFx4ODVceGI0IgorCQkJIlx4ZTNceDE3XHhlZFx4M2FceGI3XHg2Zlx4YjRceDBiIgorCQkJIlx4MGJceGFmXHgxNVx4YWVceDVhXHg4Zlx4ZjJceDBjIgorCQkJIlx4MmZceDI3XHhmNFx4MDlceGQ4XHhkMlx4OTZceGI3IgorCQkJIlx4NzFceGYyXHhjNVx4OTlceDRkXHg3ZVx4N2ZceDc1IgorCQkJIlx4NzdceDg5XHgzMFx4OGJceDU5XHhkYlx4YTJceGIyIgorCQkJIlx4YTBceGYzXHgxOVx4MzlceDJiXHhjNVx4N2VceDNmIgorCQkJIlx4NGZceGQ5XHhkM1x4NTZceDI4XHg5N1x4NDRceGRjIgorCQkJIlx4YzBceDhiXHg3N1x4MjRceGQ5XHg1Mlx4ZTdceGM1IgorCQkJIlx4YWZceGY2XHg3ZFx4NTlceGIyXHg0NFx4MDVceDFkIgorCQkJIlx4YjFceGIwXHgxMVx4YTVceDBmXHhlY1x4MzNceGUxIgorCQkJIlx4NmRceDFiXHg0ZVx4MWZceGZmXHg1N1x4OTFceGI0IgorCQkJIlx4NWJceDlhXHg5Nlx4YzVceDUzXHhiY1x4YWVceDIwIgorCQkJIlx4M2NceGJiXHgxNFx4ZTJceGU4XHgyMlx4MzNceGMxIgorCQkJIlx4NWVceDc2XHg5ZVx4NDZceDk5XHhmNlx4MmFceDE1IgorCQkJIlx4YzZceDk3XHgwMlx4YTBceDY2XHg0M1x4ZDFceGE2IgorCQkJIlx4MzFceGE2XHg5Zlx4ZmJceGY0XHhkM1x4NjlceGU1IgorCQkJIlx4Y2RceDc2XHg5NVx4YjhceDdhXHg4Mlx4N2ZceDIxIgorCQkJIlx4NDVceGZmXHgzZlx4Y2VceDU1XHhmNlx4OTVceDEwIgorCQkJIlx4MDhceDc3XHgxMFx4NDNceGM2XHhmM1x4MDlceGU1IgorCQkJIlx4NjhceGU3XHgzY1x4YWRceDAwXHg1Mlx4NDVceDBkIgorCQkJIlx4ZmVceDJkXHhjNlx4YzJceDk0XHg4Y1x4MTJceDFkIgorCQkJIlx4ZTZceDI1XHhhZVx4OThceDEyXHg4ZVx4MTlceDljIgorCQkJIlx4ODFceDY4XHhiMVx4MTFceGY2XHg2OVx4ZGFceGUzIgorCQkJIlx4NjJceDA4XHgxOFx4N2FceDI1XHg0OVx4MjhceGFjIgorCQkJIlx4YmFceDcxXHgxMlx4MGJceGU0XHhhMlx4ZTVceGM3IgorCQkJIlx4NWRceDhlXHhlY1x4NDlceDQwXHgyMVx4YmZceDVhIgorCQkJIlx4OThceGYzXHgwMlx4NjhceDU1XHgwM1x4N2ZceDhhIgorCQkJIlx4ZTVceDk0XHgwY1x4MzJceDVjXHgwN1x4ODJceDYzIgorCQkJIlx4YWZceDZmXHg5MVx4NDBceDg0XHg4ZVx4NTJceDI1IgorCQkJIlx4ZDBceGIwXHgyOVx4NTNceDA1XHhlMlx4NTBceDdhIgorCQkJIlx4MzRceGViXHhjOVx4NDZceDIwXHhhOFx4M2RceGRlIgorCQkJIlx4N2ZceDE2XHg1Zlx4MzZceGM1XHgyZVx4ZGNceGQxIgorCQkJIlx4MTVceDQ3XHhjN1x4NTBceDQwXHg2ZFx4OTFceGM1IgorCQkJIlx4ZTdceDkzXHg5NVx4MWFceGQzXHg1N1x4YmNceDUyIgorCQkJIlx4MzNceGVlXHgxNFx4MTlceDIyXHg1Mlx4ODlceGE3IgorCQkJIlx4NGFceDI1XHg1Nlx4NzdceDRiXHhjYVx4Y2ZceDBhIgorCQkJIlx4ZTFceGY1XHgzNVx4ODVceDMwXHg3ZVx4NTlceDRhIgorCQkJIlx4YmRceDE0XHg1Ylx4ZGZceGUzXHg0Nlx4Y2JceGFjIgorCQkJIlx4MWZceDZjXHg5Nlx4MGVceGY0XHg4MVx4ZDFceDk5IgorCQkJIlx4Y2FceDg4XHg2M1x4M2RceDAyXHg1OFx4NmJceGE5IgorCQkJIlx4ZTVceDlmXHhiM1x4MDBceGIyXHg1NFx4YzZceDc0IgorCQkJIlx4MWNceGJmXHg0Nlx4YWJceDk3XHhjY1x4ZjhceDU0IgorCQkJIlx4MDRceDA3XHgwOFx4NTJceGU2XHhjMFx4ZGFceDkzIgorCQkJIlx4NzRceDdkXHg5M1x4OTlceDVkXHg3OFx4NjhceGE2IgorCQkJIlx4MmVceDZiXHhkM1x4NmFceDY5XHhjY1x4MTJceDZiIgorCQkJIlx4ZDRceGM3XHhhNVx4YzZceGU3XHhmNlx4MDNceDA0IgorCQkJIlx4NWRceGNkXHg2MVx4NWVceDE3XHg0MFx4ZGNceGQxIgorCQkJIlx4NWNceGY1XHgwOFx4ZGZceDVjXHg5MFx4ODVceGE0IgorCQkJIlx4YWZceGY2XHg3OFx4YmJceDBkXHhmMVx4ZjRceGE0IgorCQkJIlx4NTRceDI2XHg3Mlx4OWVceDYxXHhmYVx4ODZceGNmIgorCQkJIlx4ZThceDllXHhhMVx4ZTBceGM3XHg0OFx4MjNceGFlIgorCQkJIlx4NWFceDkwXHhhZVx4NzVceDBhXHg3NFx4MThceDg5IgorCQkJIlx4MDVceGIxXHg5Mlx4YjJceDdmXHhkMFx4MWJceGE2IgorCQkJIlx4NjJceDA3XHgyNVx4MDFceGM3XHhjMlx4NGZceGY5IgorCQkJIlx4ZThceGZlXHg2M1x4OTVceDgwXHgwN1x4YjRceDI2IgorCQkJIlx4Y2NceGQxXHgyNlx4YjZceGM0XHgzZlx4OWVceGNiIgorCQkJIlx4OGVceDNiXHgyZVx4NDRceDE2XHhkM1x4MTBceDlhIgorCQkJIlx4OTVceDA4XHhlYlx4YzhceGNiXHhlYlx4YmZceDZmIgorCQkJIlx4MGJceGNkXHgxZlx4YzhceGNhXHg4Nlx4YWFceGVjIgorCQkJIlx4MzNceGU2XHg2OVx4ZjRceDQ1XHgyNVx4ODZceDNhIgorCQkJIlx4MjJceDk0XHg0Zlx4MDBceDIzXHg2YVx4NDRceGMyIgorCQkJIlx4NDlceDk3XHgzM1x4YWJceDM2XHgxNFx4MGFceDcwIgorCQkJIlx4MjRceGMzXHhiZVx4MDRceDNiXHg3OVx4YTBceGY5IgorCQkJIlx4YjhceGU3XHg3Nlx4MjlceDIyXHg4M1x4ZDdceGYyIgorCQkJIlx4OTRceGY0XHg0MVx4NDlceGJhXHg1Zlx4N2JceDA3IgorCQkJIlx4YjVceGZiXHhkYlx4MDNceDFhXHg5Zlx4YjZceDRjIgorCQkJIlx4YzJceDJlXHgzN1x4NDBceDQ5XHhjM1x4MzhceDE2IgorCQkJIlx4ZTJceDRmXHg3N1x4ODJceGIwXHg2OFx4NGNceDcxIgorCQkJIlx4MWRceDU3XHg2MVx4OWNceGQ5XHg0ZVx4NTRceDk5IgorCQkJIlx4NDdceDEzXHgyOFx4NzNceDNjXHhiYlx4MDBceDkwIgorCQkJIlx4ZjNceDRkXHhjOVx4MGVceGZkXHhlN1x4YjFceDcxIgorCQkJIlx4ZDNceDE1XHg3OVx4YmZceGNjXHgyNlx4MmZceGJkIgorCQkJIlx4YWRceDZjXHg1MFx4NjlceDZjXHgzZVx4NmRceDgwIgorCQkJIlx4OWFceGVhXHg3OFx4YWZceDE5XHhiMlx4MGRceDRkIgorCQkJIlx4YWRceDA0XHgwN1x4YWVceDIyXHg5MFx4NGFceDkzIgorCQkJIlx4MzJceDBlXHgzNlx4OWJceDFiXHg0Nlx4YmFceDNiIgorCQkJIlx4YjRceGFjXHhjNlx4ZDFceGEyXHgzMVx4NTNceDNiIgorCQkJIlx4MmFceDNkXHg0NVx4ZmVceDAzXHg2MVx4MTBceDg1IgorCQkJIlx4MTdceDY5XHhhNlx4NzhceGNjXHg2Y1x4ODdceDQ5IgorCQkJIlx4NTNceGY5XHg4MFx4MTBceGRlXHg4MFx4YTJceDQxIgorCQkJIlx4NmFceGMzXHgzMlx4MDJceGFkXHg2ZFx4M2NceDU2IgorCQkJIlx4MDBceDcxXHg1MVx4MDZceGE3XHhiZFx4ZmJceGVmIgorCQkJIlx4M2NceGI1XHg5Zlx4ZmNceDQ4XHg3ZFx4NTNceDdjIgorCQkJIlx4NjZceGIwXHg0OVx4MjNceGM0XHg0N1x4MTBceDBlIgorCQkJIlx4ZTVceDZjXHg3NFx4MTNceGU2XHhjNVx4M2ZceGFhIgorCQkJIlx4ZGVceGZmXHgwN1x4NDRceGRkXHg1Nlx4MWJceGFkIgorCQkJIlx4MDlceDc3XHhmYlx4NWJceDEyXHhiOFx4MGRceDM4IgorCQkJIlx4MTdceDM3XHgzNVx4N2JceDliXHhiY1x4ZmVceGQ0IgorCQkJIlx4N2VceDhiXHhkYVx4N2VceDViXHgwNFx4YTdceDIyIgorCQkJIlx4YTdceDMxXHhhMVx4MjBceDg2XHhjN1x4MWJceDk5IgorCQkJIlx4ZGJceGQxXHg4OVx4ZjRceDk0XHhhM1x4NTNceDY5IgorCQkJIlx4OGRceGU3XHhlOFx4NzRceDExXHg4ZFx4NzRceGQ2IgorCQkJIlx4MDdceDM3XHg5MVx4OWZceGZkXHg2N1x4NTBceDNhIgorCQkJIlx4YzlceGUxXHhmNFx4MzZceGQ1XHhhMFx4NDdceGQxIgorCQkJIlx4ZjlceGU1XHgzOVx4YTNceDMxXHhhY1x4MDdceDM2IgorCQkJIlx4MjNceGY4XHg2Nlx4MThceDE0XHgyOFx4MzRceDBmIgorCQkJIlx4YjhceGQwXHhlN1x4MjlceGIzXHgwNFx4NGJceDU1IgorCQkJIlx4MDFceDQxXHhiMlx4NzVceDhkXHhjYlx4OTZceDg1IgorCQkJIlx4M2FceGZiXHhhYlx4MmJceDllXHhmYVx4NThceDIwIgorCQkJIlx4NDRceDFmXHhjMFx4MTRceDIyXHg3NVx4NjFceGU4IgorCQkJIlx4YWFceDE5XHhjZlx4ZjFceDgyXHg1Nlx4ZjRceGQ3IgorCQkJIlx4NzhceDdiXHgzZFx4NWZceGIzXHg5ZVx4MGJceDhhIgorCQkJIlx4NTdceDUwXHhkYlx4MTdceDQxXHg2NVx4NGRceGEzIgorCQkJIlx4MDJceGM5XHg5Y1x4OWNceDUzXHhmYlx4MzlceDM5IgorCQkJIlx4OWJceDFkXHg3Mlx4MjRceGRhXHhiN1x4MzlceGJlIgorCQkJIlx4MTNceDNiXHhmYVx4MjlceGRhXHg5ZVx4NTRceDY0IgorCQkJIlx4NmVceGJhXHhkOFx4YTFceGNiXHhiM1x4MzZceGZhIgorCQkJIlx4Y2JceDQ3XHg4NVx4ZTlceDYxXHgzOFx4YmNceGJlIgorCQkJIlx4YzVceDAwXHgzOFx4MmFceDU0XHhmN1x4YzRceGI5IgorCQkJIlx4YjNceGQzXHg3Ylx4YTBceGEwXHhmOFx4NzJceDdmIgorCQkJIlx4OGNceDhlXHg4Mlx4MGVceGM2XHgxY1x4NzVceDlkIgorCQkJIlx4Y2FceDhlXHg2MVx4ODdceGRlXHhhZFx4ODBceGQyIgorCQkJIlx4ZjVceGY5XHg4MFx4ZWZceDE1XHg3NVx4YWZceGY1IgorCQkJIlx4ODBceGZiXHhmZlx4NmRceDFlXHgyNVx4YjdceDQwIgorCQkJIlx4NjFceDZhXHgzOVx4NWFceDZhXHhiNVx4MzFceGFiIgorCQkJIlx4OTdceDhhXHgxOVx4ODlceDQ0XHg0MFx4YzBceGE2IgorCQkJIlx4YjRceDRlXHgzMFx4MzJceDdiXHgxM1x4ZTdceDY3IgorCQkJIlx4YTlceDhiXHg1N1x4MDRceGMyXHgwMVx4YTZceGY0IgorCQkJIlx4MjhceDk5XHhhZFx4MmNceDc2XHhhM1x4NzhceGMyIgorCQkJIlx4NGFceGU2XHhjYVx4NWNceDUwXHg2YVx4YzFceGIwIgorCQkJIlx4NjJceDRiXHgxMFx4OGVceDdjXHgxN1x4NDNceGIzIgorCQkJIlx4MTdceDY2XHgxY1x4M2VceDhkXHg2OVx4ZjBceDVhIgorCQkJIlx4NzFceGY1XHg5N1x4ZGNceGQxXHg0NVx4ZGRceDI4IgorCQkJIlx4ZjNceDVkXHhkZlx4NTNceDdiXHgxMVx4ZTVceGJjIgorCQkJIlx4NGNceGRiXHgxYlx4NTFceDZiXHhlOVx4ZmJceDNkIgorCQkJIlx4YzFceGMzXHgyY1x4YjlceDcxXHhmNVx4YjZceGIyIgorCQkJIlx4MTNceDM2XHg3OVx4ODBceDUzXHhlOFx4ZDNceGE2IgorCQkJIlx4MGFceGFmXHhmZFx4NTZceDk3XHhmN1x4NDBceDhlIgorCQkJIlx4NDVceGNlXHhmOFx4YjBceDllXHg1Y1x4MzNceDgyIgorCQkJIlx4YjBceDQ0XHg1Nlx4ZmNceDA1XHgwOVx4ZTlceDJhIgorCQkJIlx4YWNceDI2XHg4MFx4MTRceDFkXHhjOFx4M2FceDM1IgorCQkJIlx4NGNceDgyXHg5N1x4ZmRceDc2XHhiN1x4YTlceDBhIgorCQkJIlx4MzVceDU4XHg3OVx4OGVceDBmXHg2Nlx4ZWFceGFmIgorCQkJIlx4NTFceDZjXHgwOVx4YTlceDZlXHg5Ylx4Y2JceDlhIgorCQkJIlx4MzFceDQ3XHhhMFx4MmZceDdjXHg3MVx4YjRceDRhIgorCQkJIlx4MTFceGFhXHg4Y1x4NjZceGM1XHg2NFx4ZTZceDNhIgorCQkJIlx4NTRceGRhXHgyNFx4NmFceGM0XHg0MVx4NjVceDQ2IgorCQkJIlx4ODJceGEwXHgwYVx4MGZceDVmXHhmYlx4MjVceGQwIgorCQkJIlx4MmNceDkxXHhhN1x4ZWVceGM0XHg4MVx4MDdceDg2IgorCQkJIlx4NzVceDVlXHgzM1x4NjlceDk3XHhlNFx4MmNceGE4IgorCQkJIlx4OWRceDlmXHgwYlx4NmFceGJlXHhhZFx4OThceGRhIgorCQkJIlx4NmRceDk0XHg0MVx4ZGFceDJjXHgxZVx4ODlceGM0IgorCQkJIlx4YzJceGFmXHgxZVx4MDBceDA1XHgwYlx4ODNceDYwIgorCQkJIlx4YmRceDQzXHhlYVx4MTVceDIzXHg3Zlx4YjlceGFjIgorCQkJIlx4ZWVceDRmXHgyY1x4YWZceDJhXHhmM1x4ZGZceGQwIgorCQkJIlx4ZjNceDE5XHgzMVx4YmJceDRhXHg3NFx4ODRceDE3IgorCQkJIlx4NTJceDMyXHgyY1x4N2RceDYxXHhlNFx4Y2JceGViIgorCQkJIlx4ODBceDM4XHgxNVx4NTJceGNiXHg2Zlx4ZWFceGU1IgorCQkJIlx4NzNceDljXHhkOVx4MjRceDY5XHhjNlx4OTVceDMyIgorCQkJIlx4MjFceGM4XHgxMVx4ZTRceGRjXHgzNlx4ZDdceDkzIgorCQkJIlx4MzhceDY2XHhmYlx4YjJceDdmXHgzYVx4YjlceGFmIgorCQkJIlx4MzFceGRkXHg5M1x4NzVceDc4XHg4YVx4MmNceDk0IgorCQkJIlx4ODdceDFhXHg1OFx4ZWNceDllXHg3ZFx4NGRceGJhIgorCQkJIlx4ZTFceGU1XHg0ZFx4ZmNceGJjXHhhNFx4MmFceDE0IgorCQkJIlx4ZWZceGNjXHhhN1x4ZWNceGFiXHg0M1x4MDlceDE4IgorCQkJIlx4ZDNceGFiXHg2OFx4ZDFceDA3XHg5OVx4NDRceDQ3IgorCQkJIlx4ZDZceDgzXHg4NVx4M2JceDMwXHhlYVx4YTlceDZiIgorCQkJIlx4NjNceGVhXHhjNFx4MDdceGZiXHg0M1x4MmZceGE0IgorCQkJIlx4YWFceGIwXHhhYlx4MDNceDg5XHhjZVx4M2ZceDhjIgorCQkJIlx4MDJceDdjXHg4Nlx4NTRceGJjXHg4OFx4YWZceDc1IgorCQkJIlx4ZDJceGRjXHg2M1x4MTdceGQzXHgyNlx4ZjZceDk2IgorCQkJIlx4YTlceDNjXHhmMVx4NjFceDhjXHgxMVx4MThceGNjIgorCQkJIlx4ZDZceGVhXHg1Ylx4ZTJceGNkXHhmMFx4ZjFceGIyIgorCQkJIlx4ZTVceDM1XHg5MFx4MWZceDg1XHg0Y1x4NzZceDViIgorCQkJIlx4NjZceGNlXHg0NFx4YTRceDMyXHg5Zlx4ZTZceDdiIgorCQkJIlx4NzFceDZlXHg5Zlx4NThceDE1XHg2N1x4NzJceDg3IgorCQkJIlx4NjRceDhlXHgzYVx4NDRceDQ1XHhkNFx4NzZceGZhIgorCQkJIlx4YzJceGY2XHhlZlx4ODVceDA1XHgxOFx4N2FceDliIgorCQkJIlx4YmFceDQxXHg1NFx4YWNceGYwXHhmY1x4NTlceDEyIgorCQkJIlx4M2ZceGRmXHhhMFx4ZTVceDhhXHg2NVx4ZmRceDNhIgorCQkJIlx4NjJceDhkXHg4M1x4MmNceDAzXHhiZVx4MDVceDc2IgorCQkJIlx4MmVceDUzXHg0OVx4OTdceDk0XHgzM1x4YWVceDQwIgorCQkJIlx4ODFceDE1XHhkYlx4NmVceGFkXHhhYVx4ZjVceDRiIgorCQkJIlx4ZTNceDk4XHg3MFx4ZGZceGUwXHg3Y1x4Y2RceGRiIgorCQkJIlx4MDJceGQ0XHg3ZFx4MmZceGMxXHhlNlx4YjRceGYzIgorCQkJIlx4ZDdceDBkXHg3YVx4ZDlceDIzXHg5ZVx4ODdceDJkIgorCQkJIlx4Y2VceDg3XHhhZFx4Y2NceDcyXHgwNVx4MDBceDI5IgorCQkJIlx4ZGNceDczXHg3Zlx4NjRceGMxXHgxNVx4MGVceGMyIgorCQkJIlx4ZGZceGE3XHg1Zlx4ZWJceDQxXHhhMVx4Y2RceGVmIgorCQkJIlx4NWNceDUwXHg3OVx4MmFceDU2XHg1Nlx4NzFceDhjIgorCQkJIlx4YWNceGMwXHg3OVx4NTBceDY5XHhjYVx4NTlceDMyIgorCQkJIlx4NjVceGYyXHg1NFx4ZTRceDUyXHgzOFx4NzZceGQxIgorCQkJIlx4NWVceGRlXHgyNlx4OWVceGZiXHg3NVx4MmVceDExIgorCQkJIlx4YjVceDEwXHhmNFx4MTdceDczXHhmNVx4ODlceGM3IgorCQkJIlx4NGZceDQzXHg1Y1x4OGVceDdjXHhiOVx4MDVceDUyIgorCQkJIlx4MjRceDQwXHg5OVx4ZmVceDliXHg4NVx4MGJceDZjIgorCQkJIlx4MjJceDNlXHg4Ylx4YWVceDg2XHhhMVx4ZDJceDc5IgorCQkJIlx4MDVceDY4XHg2Ylx4YWJceGUzXHg0MVx4NDlceGVkIgorCQkJIlx4MTVceGExXHg4ZFx4NDBceDJkXHg2MVx4ZGZceDFhIgorCQkJIlx4NTlceGM5XHgyNlx4OGJceGVmXHgzMFx4NGNceDg4IgorCQkJIlx4NGJceDEwXHhmOFx4OGRceGE2XHg5Mlx4OWZceDRiIgorCQkJIlx4ZjNceGM0XHg1M1x4MGJceDg5XHg1ZFx4MjhceDkyIgorCQkJIlx4Y2ZceDc4XHhiMlx4YzBceDVkXHhlZFx4N2VceGZjIgorCQkJIlx4YzBceDEyXHgyM1x4NWZceDVhXHg3OFx4ODZceDQzIgorCQkJIlx4NmVceDI3XHhmN1x4NWFceGE3XHg2YVx4ZWRceDE5IgorCQkJIlx4MDRceGYwXHhiM1x4MTJceGQxXHhiZFx4MGVceDg5IgorCQkJIlx4NmVceGJjXHg5Nlx4YThceGQ4XHg0OVx4MzlceDlmIgorCQkJIlx4N2VceDY3XHhmMFx4MmVceDNlXHgwMVx4YTlceGJhIgorCQkJIlx4ZWNceDhiXHg2Mlx4OGVceGNiXHg0YVx4NzBceDQzIgorCQkJIlx4YzdceGMyXHhjNFx4Y2FceDgyXHgwM1x4NzNceGU5IgorCQkJIlx4MTFceGRmXHhjZlx4NTRceGVhXHhjOVx4YjBceDk1IgorCQkJIlx4NTFceGMwXHgxM1x4M2RceDkyXHgwNVx4ZmFceGY0IgorCQkJIlx4YTlceDM0XHhjOFx4Y2VceDZjXHgzZFx4NTRceGNjIgorCQkJIlx4YzRceGFmXHhmMVx4ZGNceDExXHg0NFx4MjZceGEyIgorCQkJIlx4YWZceGYxXHg4NVx4NzVceDdkXHgwM1x4NjFceDY4IgorCQkJIlx4NGVceDc4XHhjNlx4OTJceDdkXHg4Nlx4N2RceDc3IgorCQkJIlx4ZGNceDcxXHg3Mlx4ZGJceGM2XHhhZVx4YTFceGNiIgorCQkJIlx4NzBceDlhXHgwYlx4MTlceGJlXHg0YVx4NmNceDJhIgorCQkJIlx4ZTJceGJhXHg2Y1x4NjRceDlhXHgxM1x4MjhceGRmIgorCQkJIlx4ODVceDc1XHhlNlx4NDNceGY2XHg4N1x4MDhceDY4IgorCQkJIlx4NmVceGJhXHg2ZVx4NzlceDlmXHgwNFx4YmNceDIzIgorCQkJIlx4NTBceGY2XHgzM1x4NWNceDFmXHgyNFx4MjVceGJlIgorCQkJIlx4MzNceDQ3XHg4MFx4NDVceDU2XHhhM1x4YTdceGQ3IgorCQkJIlx4N2FceGIxXHgzNFx4MGJceDkwXHgzY1x4OWNceGFkIgorCQkJIlx4NDRceDVmXHg5ZVx4MGVceDlkXHhkNFx4YmRceDkzIgorCQkJIlx4NWVceGZhXHgzY1x4ZTBceGIwXHhkOVx4ZWRceGYzIgorCQkJIlx4ZDZceDJlXHhmZlx4MjRceGQ4XHg3MVx4NmNceGVkIgorCQkJIlx4YWZceDU1XHhlYlx4MjJceGFjXHg5M1x4NjhceDMyIgorCQkJIlx4MDVceDViXHg0N1x4ZGRceGM2XHg0YVx4Y2JceGM3IgorCQkJIlx4MTBceGUxXHgzY1x4OTJceDFhXHhmM1x4MjNceDc4IgorCQkJIlx4MmJceGExXHhkMlx4ODBceGY0XHgxMlx4YjFceDIwIgorCQkJIlx4OGZceGZmXHgyNlx4MzVceGRkXHhmYlx4YzdceDRlIgorCQkJIlx4NzhceGYxXHgyZFx4NTBceDEyXHg3N1x4YThceDYwIgorCQkJIlx4N2NceDBmXHhmNVx4MTZceDJmXHg2M1x4NzBceDJhIgorCQkJIlx4YzBceDk2XHg4MFx4NGVceDBhXHhiNFx4OTNceDM1IgorCQkJIlx4NWRceDFkXHgzZlx4NTZceGY3XHgyZlx4YmJceDkwIgorCQkJIlx4MTFceDE2XHg4Zlx4YTJceGVjXHg0N1x4YmVceGFjIgorCQkJIlx4NTZceDAxXHgyNlx4NTZceGIxXHg4Y1x4YjJceDEwIgorCQkJIlx4ZjlceDFhXHhjYVx4ZjVceGQxXHhiN1x4MzlceDIwIgorCQkJIlx4NjNceGYxXHg2OVx4MjBceDRmXHgxM1x4MTJceDFmIgorCQkJIlx4NWJceDY1XHhmY1x4OThceGY3XHhjNFx4N2FceGJlIgorCQkJIlx4ZjdceDI2XHg0ZFx4MmJceDg0XHg3Ylx4NDJceGFkIgorCQkJIlx4ZDhceDdhXHgwYVx4YjRceGQ4XHg3NFx4YmZceGMxIgorCQkJIlx4ZjBceDZlXHhiNFx4MjlceGEzXHhiYlx4Y2FceDQ2IgorCQkJIlx4NjdceDcwXHg2YVx4MmRceGNlXHgwZVx4YTJceDhhIgorCQkJIlx4YTlceDg3XHhiZlx4MDVceGM0XHhjMVx4MDRceGEzIgorCQkJIlx4YWJceGQ0XHg0NVx4NDNceDhjXHhiNlx4MDJceGIwIgorCQkJIlx4NDFceGM4XHhmY1x4NDRceDNkXHg1OVx4YWFceDJlIgorCQkJIlx4NDRceDIxXHgyYVx4OGRceDg4XHg5ZFx4NTdceGY0IgorCQkJIlx4YTBceDAyXHg3N1x4YjhceGE2XHhhMFx4ZTZceDc1IgorCQkJIlx4NWNceDgyXHg2NVx4M2VceDAzXHg1Y1x4MjlceDhmIgorCQkJIlx4MzhceDU1XHhhYlx4MzNceDI2XHhlZlx4OWZceDQzIgorCQkJIlx4NTJceGZkXHg2OFx4YWZceDM2XHhiNFx4YmJceDlhIgorCQkJIlx4NThceDA5XHgwOVx4MWJceGMzXHg2NVx4NDZceDQ2IgorCQkJIlx4MWRceGE3XHg5NFx4MThceDIzXHg1MFx4MmNceGNhIgorCQkJIlx4MmNceDU1XHgxOVx4OTdceDAxXHg5ZFx4OTNceDNiIgorCQkJIlx4NjNceDg2XHhmMlx4MDNceDY3XHg0NVx4ZDJceDcyIgorCQkJIlx4MjhceDUyXHg2Y1x4ZjRceGUzXHgxY1x4YjVceDExIgorCQkJIlx4MTNceGYxXHhlYlx4MjFceGM3XHhkOVx4NTZceDgyIgorCQkJIlx4MmJceDgyXHgzOVx4YmRceDY5XHg1NFx4ZWRceDYyIgorCQkJIlx4YzNceGUyXHhkZVx4NzNceGQ0XHg2YVx4MTJceGFlIgorCQkJIlx4MTNceDIxXHg3Zlx4NGJceDViXHhmY1x4YmZceGU4IgorCQkJIlx4MmJceGJlXHg1Nlx4YmFceDY4XHg4Ylx4OWFceGIxIgorCQkJIlx4NmVceGZhXHhiZlx4N2VceDVhXHg0Ylx4ZjFceGFjIgorCQkJIlx4OThceDY1XHg4NVx4ZDFceDkzXHg1M1x4ZDNceDdiIgorCQkJIlx4MDlceGRkXHg0Ylx4MTBceDZkXHg4NFx4YjBceDEzIgorCQkJIlx4NjVceGJkXHhjZlx4NTJceDA5XHhjNFx4ODVceGUyIgorCQkJIlx4ODRceDc0XHgxNVx4NjVceGI3XHhmN1x4NTFceGFmIgorCQkJIlx4NTVceGFkXHhhNFx4ZDFceDIyXHg1NFx4NzBceDk0IgorCQkJIlx4YTBceDFjXHg5MFx4NDFceGZkXHg5OVx4ZDdceDVhIgorCQkJIlx4MzFceGVmXHhhYVx4MjVceGQwXHg3Zlx4NGZceGVhIgorCQkJIlx4MWRceDU1XHg0Mlx4ZTVceDQ5XHhiMFx4ZDBceDQ2IgorCQkJIlx4NjJceDM2XHg0M1x4YjJceDgyXHgxNVx4NzVceDUwIgorCQkJIlx4YTRceDcyXHhlYlx4NTRceDI3XHgxZlx4OGFceGU0IgorCQkJIlx4N2RceGU5XHg2Nlx4YzVceGYxXHg1M1x4YTRceGQxIgorCQkJIlx4MGNceGViXHhiOFx4ZjhceGJjXHhkNFx4ZTJceGU3IgorCQkJIlx4ZTFceGY4XHg0Ylx4Y2JceGE5XHhhMVx4YWZceDE1IgorCQkJIlx4ODNceGNiXHg3Mlx4ZDBceDMzXHg3OVx4MDBceDJkIgorCQkJIlx4OWZceGQ3XHhmMVx4MmVceDFlXHgxMFx4ZTRceDQ1IgorCQkJIlx4YzBceDc1XHgzYVx4MzlceGVhXHg2OFx4ZjdceDVkIgorCQkJIlx4MWJceDczXHg4Zlx4ZTlceDhlXHgwZlx4NzJceDQ3IgorCQkJIlx4YWVceDM1XHgwYVx4MzFceDdhXHgxNFx4NGRceDRhIgorCQkJIlx4NmZceDQ3XHhmN1x4N2VceDkxXHg2ZVx4NzRceDhiIgorCQkJIlx4MjZceDQ3XHhmOVx4YzNceGY5XHhkZVx4NzBceGY1IgorCQkJIlx4NjFceGFiXHhhOVx4MjdceDlmXHg4Mlx4ZTRceDljIgorCQkJIlx4ODlceDkxXHgzZlx4MmVceDZhXHhmZFx4YjVceDQ5IgorCQkJIlx4ZTlceGZkXHg1OVx4MTRceDM2XHg0OVx4NDBceDZkIgorCQkJIlx4MzJceGQ4XHg4NVx4NDJceGYzXHhhNVx4ZGZceDBjIgorCQkJIlx4YThceDI3XHhkN1x4NTRceGUyXHg2M1x4MmZceGYyIgorCQkJIlx4N2VceDhiXHg4Ylx4ZTdceGYxXHg5YVx4OTVceDM1IgorCQkJIlx4NDNceGRjXHgzYVx4ZTRceGI2XHhmNFx4ZDBceGRmIgorCQkJIlx4OWNceGNiXHg5NFx4ZjNceDIxXHhhMFx4NzdceDUwIgorCQkJIlx4ZTJceGM2XHhjNFx4YzZceDVmXHgwOVx4NjRceDViIgorCQkJIlx4OTJceDkwXHhkOFx4ZTFceGQxXHhlZFx4NGJceDQyIgorCQkJIlx4ZDdceDM3XHhhZlx4NjVceDNkXHgxMVx4MzlceGI2IgorCQkJIlx4MjRceDhhXHg2MFx4YWVceGQ2XHgxZVx4YmZceDBlIgorCQkJIlx4MGRceGQ3XHhkY1x4OTZceDBlXHg2NVx4NzVceDRlIgorCQkJIlx4MjlceDA2XHg5ZFx4YTRceDUxXHgzYVx4MTBceDYzIgorCQkJIlx4OGZceDE3XHgwN1x4ZDVceDhlXHgzY1x4ZjRceDI4IgorCQkJIlx4MDBceDVhXHg1Ylx4MDVceDE5XHhkOFx4YzBceDZjIgorCQkJIlx4ZTVceDE1XHhlNFx4OWNceDlkXHg3MVx4OWRceDVlIgorCQkJIlx4OTRceDI5XHgxYVx4YTdceDgwXHhmYVx4MGVceDMzIgorCQkJIlx4MDNceGRkXHhiN1x4M2VceDlhXHhhOVx4MjZceDE4IgorCQkJIlx4MzdceGE5XHg2NFx4MDhceDRkXHg5NFx4NWFceDg4IgorCQkJIlx4Y2FceDM1XHhjZVx4ODFceDAyXHhlM1x4MWZceDFiIgorCQkJIlx4ODlceDFhXHg3N1x4ODVceGUzXHg0MVx4NmRceDMyIgorCQkJIlx4NDJceDE5XHgyM1x4N2RceGM4XHg3M1x4ZWVceDI1IgorCQkJIlx4ODVceDBkXHhmOFx4MzFceDI1XHg3OVx4MWJceDZmIgorCQkJIlx4NzlceDI1XHhkMlx4ZDhceGQ0XHgyM1x4ZmRceGY3IgorCQkJIlx4ODJceDM2XHg2YVx4MGNceDQ2XHgyMlx4MTVceGU5IgorCQkJIlx4ZmZceDcyXHg0MVx4OTFceDkxXHg3ZFx4M2FceGI3IgorCQkJIlx4ZGRceDY1XHg5OVx4NzBceGY2XHg4ZFx4ODRceGY4IgorCQkJIlx4NjdceDE1XHgyMFx4MTFceGQ2XHhiMlx4NTVceDdiIgorCQkJIlx4ZGJceDg3XHhlZVx4ZWZceDU1XHg4OVx4MmFceDU5IgorCQkJIlx4MmJceDA3XHg4Zlx4NDNceDhhXHg1OVx4M2NceDAxIgorCQkJIlx4OGJceDY1XHg1NFx4YTFceDY2XHhkNVx4MzhceGJkIgorCQkJIlx4YzZceDMwXHhhOVx4Y2NceDQ5XHhiNlx4YThceDFiIgorCQkJIlx4YjhceGMwXHgwZVx4ZTNceDQ1XHgyOFx4ZTJceGZmIgorCQkJIlx4NDFceDlmXHg3ZVx4N2NceGQxXHhhZVx4OWVceDI1IgorCQkJIlx4M2ZceDRjXHg3Y1x4N2NceGY0XHhhOFx4MjZceDRkIgorCQkJIlx4NWNceGZkXHg0Ylx4MjdceDE4XHhmOVx4NjFceDc2IgorCQkJIlx4NDhceGJhXHgwY1x4NmJceGE5XHg0ZFx4ZmNceGY1IgorCQkJIlx4M2JceDM1XHg3ZVx4MmZceDRhXHhhOVx4YzJceDlhIgorCQkJIlx4YWVceGFiXHg4Nlx4MDlceDg5XHhjOVx4YzJceDQwIgorCQkJIlx4MzlceDJjXHg4MVx4YjNceGI4XHgxN1x4NjdceGMyIgorCQkJIlx4MGRceDMyXHg0YVx4M2FceDY3XHg4MVx4ZDdceDFhIgorCQkJIlx4MzRceDUyXHhjNVx4ZGJceDBhXHhmNVx4NjNceDM5IgorCQkJIlx4ZWFceDFmXHhlMVx4N2NceGExXHg5ZVx4YzFceDM1IgorCQkJIlx4ZTNceGIxXHgxOFx4NDVceDY3XHhmOVx4MjJceDM4IgorCQkJIlx4OTVceGQ5XHgzNFx4MzRceDg2XHhjNlx4NDFceDk0IgorCQkJIlx4MTVceGY5XHg1Ylx4NDFceGE2XHg4N1x4OGJceGY4IgorCQkJIlx4ZDVceGUxXHgxYlx4ZTJceDViXHhmM1x4ODZceDEwIgorCQkJIlx4ZmZceGU2XHhhZVx4NjlceDc2XHhiY1x4MGRceGI0IgorCQkJIlx4MDlceDkwXHgwY1x4YTJceDY1XHgwY1x4YWRceDc0IgorCQkJIlx4ZjVceGQ3XHhmZlx4ZGFceGMxXHhjZVx4ODVceGJlIgorCQkJIlx4MDBceGE3XHhmZlx4NGRceDJmXHg2NVx4ZDNceDhjIgorCQkJIlx4ODZceDJkXHgwNVx4ZThceGVkXHgzZVx4NmJceDhiIgorCQkJIlx4MGZceDNkXHg4M1x4OGNceGYxXHgxZFx4NWJceDk2IgorCQkJIlx4MmVceGIxXHg5Y1x4YzJceDk4XHhlMVx4NzBceGI5IgorCQkJIlx4YmFceDVjXHg4YVx4NDNceGQ2XHgzNFx4YTdceDJkIgorCQkJIlx4YzlceDkyXHhhZVx4ZjJceGE1XHg3Ylx4MDVceDQ5IgorCQkJIlx4YTdceDMzXHgzNFx4ODZceGNhXHhlNFx4OTZceDIzIgorCQkJIlx4NzZceDViXHhmMlx4YzZceGYxXHg1MVx4MjhceDQyIgorCQkJIlx4N2JceGNjXHg3Nlx4OGZceGZhXHhhMlx4YWRceDMxIgorCQkJIlx4ZDRceGQ2XHg3YVx4NmRceDI1XHgyNVx4NTRceGU0IgorCQkJIlx4M2ZceDUwXHg1OVx4ZTFceDVjXHgwNVx4YjdceDI3IgorCQkJIlx4NDhceGJmXHgwN1x4ZWNceDFiXHgxM1x4YmVceDJiIgorCQkJIlx4YTFceDU3XHgyYlx4ZDVceGFiXHhkN1x4ZDBceDRjIgorCQkJIlx4MWVceGNiXHg3MVx4OWJceGM1XHg5MFx4ODVceGQzIgorCQkJIlx4ZGVceDU5XHhlY1x4NzFceGViXHg4OVx4YmJceGQwIgorCQkJIlx4MDlceDUwXHhlMVx4MTZceDNmXHhmZFx4MWNceDM0IgorCQkJIlx4YzNceDFjXHhhMVx4MTBceDc3XHg1M1x4OThceGVmIgorCQkJIlx4ZjJceGZkXHhhNVx4MDFceDU5XHhjMlx4OWJceDI2IgorCQkJIlx4YzdceDQyXHhkOVx4NDlceGRhXHg1OFx4MmJceDZlIgorCQkJIlx4OWZceDUzXHgxOVx4NzZceDdlXHhkOVx4YzlceDBlIgorCQkJIlx4NjhceGM4XHg3Zlx4NTFceDIyXHg0Mlx4ZWZceDQ5IgorCQkJIlx4YTRceDU1XHhiNlx4MzZceGFjXHgwOVx4YzdceDMxIgorCQkJIlx4ODhceDE1XHg0Ylx4MmVceDhmXHgzYVx4MDhceGY3IgorCQkJIlx4ZDhceGY3XHhhOFx4YzVceGE5XHgzM1x4YTZceDQ1IgorCQkJIlx4ZTRceGM0XHg5NFx4NzZceGYzXHgwZFx4OGZceDdlIgorCQkJIlx4YzhceGY2XHhiY1x4MjNceDBhXHhiNlx4NGNceGQzIgorCQkJIlx4NmFceGNkXHgzNlx4YzJceDkwXHg1Y1x4NWNceDNjIgorCQkJIlx4NjVceDdiXHhjMlx4ZDZceGNjXHhlNlx4MGRceDg3IgorCQkJIlx4NzNceDJlXHg3MVx4NzlceDE2XHgwNlx4NjNceDI4IgorCQkJIlx4MDlceDE1XHhkOFx4ODlceDM4XHgzOFx4M2RceGI1IgorCQkJIlx4NDJceDFjXHgwOFx4MjRceGY3XHgyYVx4ZDJceDlkIgorCQkJIlx4YzhceGNhXHhlZlx4ZjlceDI3XHhkOFx4MDdceDg2IgorCQkJIlx4ZjdceDQzXHgwYlx4NTVceDE1XHgzZlx4OWZceDgzIgorCQkJIlx4ZWZceGRjXHg0OVx4OWRceDJhXHhjMVx4NTRceDYyIgorCQkJIlx4YmRceDliXHg2Nlx4NTVceDlmXHhiN1x4MTJceGYzIgorCQkJIlx4MWJceDRkXHg5ZFx4MmFceDVjXHhlZFx4ODdceDc1IgorCQkJIlx4ODdceDI2XHhlY1x4NjFceDJjXHhiNFx4MGZceDg5IgorCQkJIlx4YjBceGZiXHgyZVx4NjhceDVkXHgxNVx4YzdceDhkIgorCQkJIlx4MmVceGMwXHhkOVx4ZWNceGFmXHg0Zlx4ZDJceDI1IgorCQkJIlx4MjlceGU4XHhkMlx4MjZceDJiXHg2N1x4ZTlceGZjIgorCQkJIlx4MmJceGE4XHg2N1x4OTZceDEyXHgxZlx4NWJceDk2IgorCQkJIlx4YzZceDE0XHg1M1x4YWZceDQ0XHhlYVx4ZDZceGUyIgorCQkJIlx4OTRceDk4XHhlNFx4MTJceDkzXHg0Y1x4OTJceGUwIgorCQkJIlx4MThceGE1XHg4ZFx4MmRceGU0XHg3MVx4M2NceDQ3IgorCQkJIlx4NGNceGY3XHhlNlx4NDdceDllXHhjMFx4NjhceGRmIgorCQkJIlx4ZDRceGY1XHg1YVx4NzRceGIxXHgyYlx4MjlceDAzIgorCQkJIlx4MTlceDA3XHhhZlx4OTBceDYyXHg1Y1x4NjhceDk4IgorCQkJIlx4NDhceDE2XHgxMVx4MDJceDlkXHhlZVx4YjRceDliIgorCQkJIlx4ZTVceDQyXHg3Zlx4MDhceGZkXHgxNlx4MzJceDBiIgorCQkJIlx4ZDBceGIzXHhmYVx4MmJceGI3XHg5OVx4ZjlceDI5IgorCQkJIlx4Y2RceDIwXHg0NVx4OWZceGIzXHgxYVx4NWRceGEyIgorCQkJIlx4YWZceDRkXHhlMFx4YmRceDQyXHgwZFx4YmNceDc0IgorCQkJIlx4OTlceDljXHg4ZVx4NTNceDFhXHhiNFx4M2VceGJkIgorCQkJIlx4YTJceDlhXHgyZFx4ZjdceGY4XHgzOVx4MGZceDY3IgorCQkJIlx4NjNceGZjXHg2Ylx4YzBceGFmXHhiM1x4NGJceDRmIgorCQkJIlx4NTVceGM0XHhjZlx4YTdceGM4XHgwNFx4MTFceDNlIgorCQkJIlx4MTRceDMyXHhiYlx4MWJceDM4XHg3N1x4ZDZceDdmIgorCQkJIlx4NTRceDRjXHhkZlx4NzVceGYzXHgwN1x4MmRceDMzIgorCQkJIlx4OWJceGE4XHgyMFx4ZTFceDdiXHgxMlx4YjVceGYzIgorCQkJIlx4ZWZceDJmXHhjZVx4NzJceGU1XHgyNFx4NjBceGMxIgorCQkJIlx4MzBceGUyXHhhYlx4YTFceDhlXHgxMVx4MDlceGE4IgorCQkJIlx4MjFceDMzXHg0NFx4ZmVceDdmXHgzNVx4MzJceDkzIgorCQkJIlx4MzlceGE3XHhhZFx4OGJceDc5XHgwNlx4YjJceGNiIgorCQkJIlx4NGVceGE5XHg1Zlx4YzdceGJhXHg3NFx4MjlceGVjIgorCQkJIlx4OTNceGEwXHg0ZVx4NTRceDkzXHhjMFx4YmNceDU1IgorCQkJIlx4NjRceGYwXHg0OFx4ZTVceDU3XHg5OVx4ZWVceDc1IgorCQkJIlx4ZDZceDc5XHgwZlx4NjZceGI3XHhjNlx4NTdceDc2IgorCQkJIlx4ZjdceGI3XHhmM1x4OWNceGM1XHg2MFx4ZThceDdmIgorCQkJIlx4ODNceDc2XHhkNlx4MGVceGFhXHhlNlx4OTBceDM5IgorCQkJIlx4MWRceGE2XHgzMlx4NmFceDM0XHhlM1x4NTVceGY4IgorCQkJIlx4NThceGEwXHg1OFx4N2RceDMzXHhlMFx4MjJceDM5IgorCQkJIlx4NDRceDY0XHg4N1x4ODZceDVhXHgyZlx4YTdceDdlIgorCQkJIlx4MGZceDM4XHhlYVx4YjBceDMwXHhjY1x4NjFceGE1IgorCQkJIlx4NmFceDMyXHhhZVx4MWVceGY3XHhlOVx4ZDBceGE5IgorCQkJIlx4MGNceDMyXHg0Ylx4YjVceDQ5XHgyOFx4YWJceDg1IgorCQkJIlx4MmZceDhlXHgwMVx4MzZceDM4XHg1Mlx4ZDBceGJhIgorCQkJIlx4ZDZceDAyXHg3OFx4ZjhceDBlXHgzZVx4OWNceDhiIgorCQkJIlx4NmJceDQ1XHg5OVx4M2ZceDVjXHhmZVx4NThceGYxIgorCQkJIlx4NWNceDk0XHgwNFx4ZTFceGY1XHgxOFx4NmRceDUxIgorCQkJIlx4YjJceDVkXHgxOFx4MjBceGI2XHhjMlx4OWFceDQyIgorCQkJIlx4MWRceGIzXHhhYlx4M2NceGI2XHgzYVx4MTNceDAzIgorCQkJIlx4YjJceDQ2XHg4Mlx4NGZceGZjXHg2NFx4YmNceDRmIgorCQkJIlx4Y2FceGZhXHg5Y1x4YzBceGQ1XHhhN1x4YmRceDExIgorCQkJIlx4YjdceGU0XHg1YVx4ZjZceDZmXHg0ZFx4NGRceDU0IgorCQkJIlx4ZWFceGE0XHg5OFx4NjZceGQ0XHgyMlx4M2JceGQzIgorCQkJIlx4OGZceDM0XHg0N1x4ZDlceDdjXHhmNFx4NzJceDNiIgorCQkJIlx4NGRceDAyXHg3N1x4ZjZceGQ2XHhkZFx4MDhceDBhIgorCQkJIlx4ODFceGUxXHg4Nlx4ODlceDNlXHg1Nlx4MTBceDNjIgorCQkJIlx4YmFceGQ3XHg4MVx4OGNceDA4XHhiY1x4OGJceGUyIgorCQkJIlx4NTNceGVjXHhhN1x4ODlceGVlXHhjOFx4NTZceGI1IgorCQkJIlx4MzZceDJjXHhiMlx4MDNceGJhXHg5OVx4ZGRceDdjIgorCQkJIlx4NDhceGEwXHhiMFx4YmNceDkxXHgzM1x4ZTlceGE4IgorCQkJIlx4Y2JceGNkXHhjZlx4NTlceDVmXHgxZlx4MTVceGUyIgorCQkJIlx4NTZceGY1XHg0ZVx4MDFceDM1XHgyN1x4NDVceDc3IgorCQkJIlx4NDdceGM4XHhiY1x4Y2JceDdlXHgzOVx4YzFceDk3IgorCQkJIlx4MjhceGQzXHg4NFx4ZmNceDJjXHgzZVx4YzhceGFkIgorCQkJIlx4OWNceGY4XHg4YVx4NjFceDljXHgyOFx4YWFceGM1IgorCQkJIlx4OTlceDIwXHg0M1x4ODVceDlkXHhhNVx4ZTJceDhiIgorCQkJIlx4YjhceGFlXHhlYlx4ZDBceDMyXHgwZFx4NTJceDc4IgorCQkJIlx4MDlceDU2XHgzZlx4YzdceGQ4XHg3ZVx4MjZceGZjIgorCQkJIlx4MzdceGZiXHg2Zlx4MDRceGZjXHhmYVx4OTJceDEwIgorCQkJIlx4YWNceGY4XHgzZVx4MjFceGRjXHg4Y1x4MjFceDE2IgorCQkJIlx4N2RceDY3XHg2ZVx4ZjZceGNkXHhkYVx4YjZceDk4IgorCQkJIlx4MjNceGFiXHgyM1x4M2NceGIyXHgxMFx4YTBceDUzIgorCQkJIlx4NWFceDU2XHg5Zlx4YzVceGQwXHhmZlx4YmJceGU0IgorCQkJIlx4OThceDNjXHg2OVx4MWVceGRiXHgzOFx4OGZceDdlIgorCQkJIlx4MGZceGQyXHg5OFx4ODhceDgxXHg4Ylx4NDVceDY3IgorCQkJIlx4ZWFceDMzXHhmMVx4ZWJceGU5XHg5N1x4NTVceDJlIgorCQkJIlx4ZDlceGFhXHhlYlx4NWFceGVjXHhkYVx4ZTFceDY4IgorCQkJIlx4YThceDlkXHgzY1x4ODRceDdjXHgwNVx4M2RceDYyIgorCQkJIlx4ODdceDhmXHgwM1x4MjFceDI4XHg5NVx4MGNceDg5IgorCQkJIlx4MjVceDIyXHg0YVx4YjBceDkzXHhhOVx4NTBceGEyIgorCQkJIlx4MmZceDU3XHg2ZVx4MThceDQyXHgxOVx4NTRceDBjIgorCQkJIlx4NTVceDY3XHhjNlx4MTFceDQ5XHhmNFx4NWNceGQyIgorCQkJIlx4ZTlceDNkXHhkZFx4OGJceDQ4XHg3MVx4MjFceDAwIgorCQkJIlx4YzNceDlhXHg2Y1x4ODVceDc0XHgyOFx4ODNceDRhIgorCQkJIlx4MWJceDMxXHgwNVx4ZTFceDA2XHg5Mlx4ZTdceGRhIgorCQkJIlx4ODVceDczXHg3OFx4NDVceDIwXHg3Zlx4YWVceDEzIgorCQkJIlx4N2NceDMzXHgwNlx4MjJceGY0XHg4M1x4ZjlceDM1IgorCQkJIlx4M2ZceDZjXHg3MVx4YThceDRlXHg0OFx4YmVceDliIgorCQkJIlx4Y2VceDhhXHhiYVx4ZGFceGJlXHgyOFx4MDhceGY3IgorCQkJIlx4ZTJceDE0XHg4Y1x4NzFceGVhXHg3Mlx4ZjlceDMzIgorCQkJIlx4ZjJceDg4XHgzZlx4ZDdceGJiXHg2OVx4NmNceDI5IgorCQkJIlx4MTlceGRjXHg4NFx4Y2VceDFmXHgxMlx4NGZceGM4IgorCQkJIlx4YWZceGE1XHgwNFx4YmFceDVhXHhhYlx4YjBceGQ5IgorCQkJIlx4MTRceDFmXHg2Y1x4NjhceDk4XHgzOVx4ODlceDdhIgorCQkJIlx4ZDlceGQ4XHgyZlx4ZGZceGE4XHg0N1x4NGFceDI1IgorCQkJIlx4ZTJceGZiXHgzM1x4ZjRceDU5XHg3OFx4ZTFceDY4IgorCQkJIlx4ODVceGNmXHhmZVx4NTlceDIwXHhkNFx4MDVceDFkIgorCQkJIlx4ODBceDk5XHhhZVx4YmNceGNhXHhhZVx4MGZceDJmIgorCQkJIlx4NjVceDQzXHgzNFx4OGVceDdlXHhhY1x4ZDNceDkzIgorCQkJIlx4MmZceGFjXHg2ZFx4MTRceDNkXHgwMlx4MDdceDcwIgorCQkJIlx4OWRceGE0XHhmM1x4MWJceDVjXHgzNlx4ZmNceDAxIgorCQkJIlx4NzNceDM0XHg4NVx4MGNceDZjXHhkNlx4ZjFceGJkIgorCQkJIlx4M2ZceGRmXHhlZVx4ZjVceGQ5XHhiYVx4NTZceGVmIgorCQkJIlx4ZjRceDliXHg2Ylx4ZWVceDlmXHg1YVx4NzhceDZkIgorCQkJIlx4MzJceDE5XHhmNFx4ZjdceGY4XHg0Y1x4NjlceDBiIgorCQkJIlx4NGJceGJjXHhiYlx4YjdceGYyXHg4NVx4YWZceDcwIgorCQkJIlx4NzVceDI0XHg2Y1x4NTRceGE3XHgwZVx4NGRceDFkIgorCQkJIlx4MDFceGJmXHgwOFx4YWNceGNmXHg3Zlx4MmNceGUzIgorCQkJIlx4MTRceDg5XHg1ZVx4NzBceDVhXHg5OVx4OTJceGNkIgorCQkJIlx4MDFceDg0XHhjOFx4ZDJceGFiXHhlNVx4NGZceDU4IgorCQkJIlx4ZTdceDBmXHgyZlx4MGVceGZmXHg2OFx4ZWFceGZkIgorCQkJIlx4MTVceGIzXHgxN1x4ZTZceGIwXHhlN1x4ODVceGQ4IgorCQkJIlx4MjNceDJlXHgwNVx4YzdceGM5XHhjNFx4NDZceDFmIgorCQkJIlx4ZTFceDllXHg0OVx4MjBceDIzXHgyNFx4NGRceDdlIgorCQkJIlx4MjlceDY1XHhmZlx4ZjRceGI2XHhmZFx4MWFceDg1IgorCQkJIlx4YzRceDE2XHhlY1x4ZmNceGVhXHg3Ylx4ZDZceDJjIgorCQkJIlx4NDNceGY4XHhiN1x4YmZceDc5XHhjMFx4ODVceGNkIgorCQkJIlx4ZWZceGUxXHg5OFx4ZDNceGE1XHhmN1x4OTBceDhjIgorCQkJIlx4ZTlceDdmXHg4MFx4NmJceGQyXHhhY1x4NGNceDMwIgorCQkJIlx4YTdceGM2XHg2MVx4NmNceGQyXHhmOVx4MmNceGZmIgorCQkJIlx4MzBceGJjXHgyMlx4ODFceDdkXHg5M1x4MTJceGU0IgorCQkJIlx4MGFceGNkXHhhZlx4ZGRceGU4XHhhYlx4MGFceDFlIgorCQkJIlx4MTNceGE0XHgyN1x4YzNceDVmXHhmN1x4NGJceGJiIgorCQkJIlx4MzdceDA5XHg0Ylx4OTFceDZmXHg5Mlx4NGZceGFmIgorCQkJIlx4NTJceGVlXHhkZlx4ZWZceDA5XHg2Zlx4ZjdceDVjIgorCQkJIlx4NmVceDEyXHgxN1x4NzJceDYzXHg1N1x4YzdceGJhIgorCQkJIlx4M2JceDZiXHgzOFx4MzJceDczXHgxYlx4OWNceDgwIgorCQkJIlx4YzFceDdhXHhjNlx4Y2ZceGNkXHgzNVx4YzBceDZiIgorCQkJIlx4MzFceDFhXHg2Ylx4ZTlceGQ4XHgyY1x4MjlceDNmIgorCQkJIlx4OTZceGZiXHhiNlx4Y2RceDEzXHg5MVx4M2JceGMyIgorCQkJIlx4ZDJceGEzXHgzMVx4OGRceGE0XHhjZFx4NTdceGNkIgorCQkJIlx4MTNceDNkXHg2NFx4ZmRceDA2XHhjZVx4ZTZceGRjIgorCQkJIlx4MGNceDI0XHg0M1x4MzFceDQwXHg1N1x4ZjFceDcyIgorCQkJIlx4MTdceGUzXHgzYVx4NjNceDZkXHgzNVx4Y2ZceDVkIgorCQkJIlx4OTdceDQwXHg1OVx4ZGRceGY3XHgzY1x4MDJceGY3IgorCQkJIlx4MWNceDdlXHgwNVx4YmJceGE5XHgwZFx4MDFceGIxIgorCQkJIlx4OGVceGMwXHgzMFx4YTlceDUzXHgyNFx4YzlceDg5IgorCQkJIlx4ODRceDZkXHhhYVx4ZDBceGNkXHg5MVx4YzJceDRkIgorCQkJIlx4OTFceGIwXHg4OVx4ZTJceGJmXHg4M1x4NDRceGFhIgorCQkJIlx4MjhceDcyXHgyM1x4YTBceGMyXHhhZFx4YWRceDFjIgorCQkJIlx4ZmNceDNmXHgwOVx4N2FceDBiXHhkY1x4YzVceDFiIgorCQkJIlx4ODdceDEzXHhjNlx4NWJceDU5XHg4ZFx4ZjJceGM4IgorCQkJIlx4YWZceGRmXHgxMVx4OTUiLAogCQkucmxlbiA9IDQxMDAsCiAJfSwKIH07CiAKIC8qCisgKiBDVFMgKENpcGhlciBUZXh0IFN0ZWFsaW5nKSBtb2RlIHRlc3RzCisgKi8KKyNkZWZpbmUgQ1RTX01PREVfRU5DX1RFU1RfVkVDVE9SUyA2CisjZGVmaW5lIENUU19NT0RFX0RFQ19URVNUX1ZFQ1RPUlMgNgorc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBjdHNfbW9kZV9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKKwl7IC8qIGZyb20gcmZjMzk2MiAqLworCQkua2xlbgk9IDE2LAorCQkua2V5ICAgID0gIlx4NjNceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDIwIgorCQkJICAiXHg3NFx4NjVceDcyXHg2OVx4NzlceDYxXHg2Ylx4NjkiLAorCQkuaWxlbgk9IDE3LAorCQkuaW5wdXQgID0gIlx4NDlceDIwXHg3N1x4NmZceDc1XHg2Y1x4NjRceDIwIgorCQkJICAiXHg2Y1x4NjlceDZiXHg2NVx4MjBceDc0XHg2OFx4NjUiCisJCQkgICJceDIwIiwKKwkJLnJsZW4JPSAxNywKKwkJLnJlc3VsdAk9ICJceGM2XHgzNVx4MzVceDY4XHhmMlx4YmZceDhjXHhiNCIKKwkJCSAgIlx4ZDhceGE1XHg4MFx4MzZceDJkXHhhN1x4ZmZceDdmIgorCQkJICAiXHg5NyIsCisJfSwgeworCQkua2xlbgk9IDE2LAorCQkua2V5ICAgID0gIlx4NjNceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDIwIgorCQkJICAiXHg3NFx4NjVceDcyXHg2OVx4NzlceDYxXHg2Ylx4NjkiLAorCQkuaWxlbiAgID0gMzEsCisJCS5pbnB1dCAgPSAiXHg0OVx4MjBceDc3XHg2Zlx4NzVceDZjXHg2NFx4MjAiCisJCQkgICJceDZjXHg2OVx4NmJceDY1XHgyMFx4NzRceDY4XHg2NSIKKwkJCSAgIlx4MjBceDQ3XHg2NVx4NmVceDY1XHg3Mlx4NjFceDZjIgorCQkJICAiXHgyMFx4NDdceDYxXHg3NVx4MjdceDczXHgyMCIsCisJCS5ybGVuICAgPSAzMSwKKwkJLnJlc3VsdCA9ICJceGZjXHgwMFx4NzhceDNlXHgwZVx4ZmRceGIyXHhjMSIKKwkJCSAgIlx4ZDRceDQ1XHhkNFx4YzhceGVmXHhmN1x4ZWRceDIyIgorCQkJICAiXHg5N1x4NjhceDcyXHg2OFx4ZDZceGVjXHhjY1x4YzAiCisJCQkgICJceGMwXHg3Ylx4MjVceGUyXHg1ZVx4Y2ZceGU1IiwKKwl9LCB7CisJCS5rbGVuCT0gMTYsCisJCS5rZXkgICAgPSAiXHg2M1x4NjhceDY5XHg2M1x4NmJceDY1XHg2ZVx4MjAiCisJCQkgICJceDc0XHg2NVx4NzJceDY5XHg3OVx4NjFceDZiXHg2OSIsCisJCS5pbGVuICAgPSAzMiwKKwkJLmlucHV0ICA9ICJceDQ5XHgyMFx4NzdceDZmXHg3NVx4NmNceDY0XHgyMCIKKwkJCSAgIlx4NmNceDY5XHg2Ylx4NjVceDIwXHg3NFx4NjhceDY1IgorCQkJICAiXHgyMFx4NDdceDY1XHg2ZVx4NjVceDcyXHg2MVx4NmMiCisJCQkgICJceDIwXHg0N1x4NjFceDc1XHgyN1x4NzNceDIwXHg0MyIsCisJCS5ybGVuICAgPSAzMiwKKwkJLnJlc3VsdCA9ICJceDM5XHgzMVx4MjVceDIzXHhhN1x4ODZceDYyXHhkNSIKKwkJCSAgIlx4YmVceDdmXHhjYlx4Y2NceDk4XHhlYlx4ZjVceGE4IgorCQkJICAiXHg5N1x4NjhceDcyXHg2OFx4ZDZceGVjXHhjY1x4YzAiCisJCQkgICJceGMwXHg3Ylx4MjVceGUyXHg1ZVx4Y2ZceGU1XHg4NCIsCisJfSwgeworCQkua2xlbgk9IDE2LAorCQkua2V5ICAgID0gIlx4NjNceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDIwIgorCQkJICAiXHg3NFx4NjVceDcyXHg2OVx4NzlceDYxXHg2Ylx4NjkiLAorCQkuaWxlbiAgID0gNDcsCisJCS5pbnB1dCAgPSAiXHg0OVx4MjBceDc3XHg2Zlx4NzVceDZjXHg2NFx4MjAiCisJCQkgICJceDZjXHg2OVx4NmJceDY1XHgyMFx4NzRceDY4XHg2NSIKKwkJCSAgIlx4MjBceDQ3XHg2NVx4NmVceDY1XHg3Mlx4NjFceDZjIgorCQkJICAiXHgyMFx4NDdceDYxXHg3NVx4MjdceDczXHgyMFx4NDMiCisJCQkgICJceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDJjXHgyMCIKKwkJCSAgIlx4NzBceDZjXHg2NVx4NjFceDczXHg2NVx4MmMiLAorCQkucmxlbiAgID0gNDcsCisJCS5yZXN1bHQgPSAiXHg5N1x4NjhceDcyXHg2OFx4ZDZceGVjXHhjY1x4YzAiCisJCQkgICJceGMwXHg3Ylx4MjVceGUyXHg1ZVx4Y2ZceGU1XHg4NCIKKwkJCSAgIlx4YjNceGZmXHhmZFx4OTRceDBjXHgxNlx4YTFceDhjIgorCQkJICAiXHgxYlx4NTVceDQ5XHhkMlx4ZjhceDM4XHgwMlx4OWUiCisJCQkgICJceDM5XHgzMVx4MjVceDIzXHhhN1x4ODZceDYyXHhkNSIKKwkJCSAgIlx4YmVceDdmXHhjYlx4Y2NceDk4XHhlYlx4ZjUiLAorCX0sIHsKKwkJLmtsZW4JPSAxNiwKKwkJLmtleSAgICA9ICJceDYzXHg2OFx4NjlceDYzXHg2Ylx4NjVceDZlXHgyMCIKKwkJCSAgIlx4NzRceDY1XHg3Mlx4NjlceDc5XHg2MVx4NmJceDY5IiwKKwkJLmlsZW4gICA9IDQ4LAorCQkuaW5wdXQgID0gIlx4NDlceDIwXHg3N1x4NmZceDc1XHg2Y1x4NjRceDIwIgorCQkJICAiXHg2Y1x4NjlceDZiXHg2NVx4MjBceDc0XHg2OFx4NjUiCisJCQkgICJceDIwXHg0N1x4NjVceDZlXHg2NVx4NzJceDYxXHg2YyIKKwkJCSAgIlx4MjBceDQ3XHg2MVx4NzVceDI3XHg3M1x4MjBceDQzIgorCQkJICAiXHg2OFx4NjlceDYzXHg2Ylx4NjVceDZlXHgyY1x4MjAiCisJCQkgICJceDcwXHg2Y1x4NjVceDYxXHg3M1x4NjVceDJjXHgyMCIsCisJCS5ybGVuICAgPSA0OCwKKwkJLnJlc3VsdCA9ICJceDk3XHg2OFx4NzJceDY4XHhkNlx4ZWNceGNjXHhjMCIKKwkJCSAgIlx4YzBceDdiXHgyNVx4ZTJceDVlXHhjZlx4ZTVceDg0IgorCQkJICAiXHg5ZFx4YWRceDhiXHhiYlx4OTZceGM0XHhjZFx4YzAiCisJCQkgICJceDNiXHhjMVx4MDNceGUxXHhhMVx4OTRceGJiXHhkOCIKKwkJCSAgIlx4MzlceDMxXHgyNVx4MjNceGE3XHg4Nlx4NjJceGQ1IgorCQkJICAiXHhiZVx4N2ZceGNiXHhjY1x4OThceGViXHhmNVx4YTgiLAorCX0sIHsKKwkJLmtsZW4JPSAxNiwKKwkJLmtleSAgICA9ICJceDYzXHg2OFx4NjlceDYzXHg2Ylx4NjVceDZlXHgyMCIKKwkJCSAgIlx4NzRceDY1XHg3Mlx4NjlceDc5XHg2MVx4NmJceDY5IiwKKwkJLmlsZW4gICA9IDY0LAorCQkuaW5wdXQgID0gIlx4NDlceDIwXHg3N1x4NmZceDc1XHg2Y1x4NjRceDIwIgorCQkJICAiXHg2Y1x4NjlceDZiXHg2NVx4MjBceDc0XHg2OFx4NjUiCisJCQkgICJceDIwXHg0N1x4NjVceDZlXHg2NVx4NzJceDYxXHg2YyIKKwkJCSAgIlx4MjBceDQ3XHg2MVx4NzVceDI3XHg3M1x4MjBceDQzIgorCQkJICAiXHg2OFx4NjlceDYzXHg2Ylx4NjVceDZlXHgyY1x4MjAiCisJCQkgICJceDcwXHg2Y1x4NjVceDYxXHg3M1x4NjVceDJjXHgyMCIKKwkJCSAgIlx4NjFceDZlXHg2NFx4MjBceDc3XHg2Zlx4NmVceDc0IgorCQkJICAiXHg2Zlx4NmVceDIwXHg3M1x4NmZceDc1XHg3MFx4MmUiLAorCQkucmxlbiAgID0gNjQsCisJCS5yZXN1bHQgPSAiXHg5N1x4NjhceDcyXHg2OFx4ZDZceGVjXHhjY1x4YzAiCisJCQkgICJceGMwXHg3Ylx4MjVceGUyXHg1ZVx4Y2ZceGU1XHg4NCIKKwkJCSAgIlx4MzlceDMxXHgyNVx4MjNceGE3XHg4Nlx4NjJceGQ1IgorCQkJICAiXHhiZVx4N2ZceGNiXHhjY1x4OThceGViXHhmNVx4YTgiCisJCQkgICJceDQ4XHgwN1x4ZWZceGU4XHgzNlx4ZWVceDg5XHhhNSIKKwkJCSAgIlx4MjZceDczXHgwZFx4YmNceDJmXHg3Ylx4YzhceDQwIgorCQkJICAiXHg5ZFx4YWRceDhiXHhiYlx4OTZceGM0XHhjZFx4YzAiCisJCQkgICJceDNiXHhjMVx4MDNceGUxXHhhMVx4OTRceGJiXHhkOCIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBjdHNfbW9kZV9kZWNfdHZfdGVtcGxhdGVbXSA9IHsKKwl7IC8qIGZyb20gcmZjMzk2MiAqLworCQkua2xlbgk9IDE2LAorCQkua2V5ICAgID0gIlx4NjNceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDIwIgorCQkJICAiXHg3NFx4NjVceDcyXHg2OVx4NzlceDYxXHg2Ylx4NjkiLAorCQkucmxlbgk9IDE3LAorCQkucmVzdWx0ID0gIlx4NDlceDIwXHg3N1x4NmZceDc1XHg2Y1x4NjRceDIwIgorCQkJICAiXHg2Y1x4NjlceDZiXHg2NVx4MjBceDc0XHg2OFx4NjUiCisJCQkgICJceDIwIiwKKwkJLmlsZW4JPSAxNywKKwkJLmlucHV0CT0gIlx4YzZceDM1XHgzNVx4NjhceGYyXHhiZlx4OGNceGI0IgorCQkJICAiXHhkOFx4YTVceDgwXHgzNlx4MmRceGE3XHhmZlx4N2YiCisJCQkgICJceDk3IiwKKwl9LCB7CisJCS5rbGVuCT0gMTYsCisJCS5rZXkgICAgPSAiXHg2M1x4NjhceDY5XHg2M1x4NmJceDY1XHg2ZVx4MjAiCisJCQkgICJceDc0XHg2NVx4NzJceDY5XHg3OVx4NjFceDZiXHg2OSIsCisJCS5ybGVuICAgPSAzMSwKKwkJLnJlc3VsdCA9ICJceDQ5XHgyMFx4NzdceDZmXHg3NVx4NmNceDY0XHgyMCIKKwkJCSAgIlx4NmNceDY5XHg2Ylx4NjVceDIwXHg3NFx4NjhceDY1IgorCQkJICAiXHgyMFx4NDdceDY1XHg2ZVx4NjVceDcyXHg2MVx4NmMiCisJCQkgICJceDIwXHg0N1x4NjFceDc1XHgyN1x4NzNceDIwIiwKKwkJLmlsZW4gICA9IDMxLAorCQkuaW5wdXQgID0gIlx4ZmNceDAwXHg3OFx4M2VceDBlXHhmZFx4YjJceGMxIgorCQkJICAiXHhkNFx4NDVceGQ0XHhjOFx4ZWZceGY3XHhlZFx4MjIiCisJCQkgICJceDk3XHg2OFx4NzJceDY4XHhkNlx4ZWNceGNjXHhjMCIKKwkJCSAgIlx4YzBceDdiXHgyNVx4ZTJceDVlXHhjZlx4ZTUiLAorCX0sIHsKKwkJLmtsZW4JPSAxNiwKKwkJLmtleSAgICA9ICJceDYzXHg2OFx4NjlceDYzXHg2Ylx4NjVceDZlXHgyMCIKKwkJCSAgIlx4NzRceDY1XHg3Mlx4NjlceDc5XHg2MVx4NmJceDY5IiwKKwkJLnJsZW4gICA9IDMyLAorCQkucmVzdWx0ID0gIlx4NDlceDIwXHg3N1x4NmZceDc1XHg2Y1x4NjRceDIwIgorCQkJICAiXHg2Y1x4NjlceDZiXHg2NVx4MjBceDc0XHg2OFx4NjUiCisJCQkgICJceDIwXHg0N1x4NjVceDZlXHg2NVx4NzJceDYxXHg2YyIKKwkJCSAgIlx4MjBceDQ3XHg2MVx4NzVceDI3XHg3M1x4MjBceDQzIiwKKwkJLmlsZW4gICA9IDMyLAorCQkuaW5wdXQgID0gIlx4MzlceDMxXHgyNVx4MjNceGE3XHg4Nlx4NjJceGQ1IgorCQkJICAiXHhiZVx4N2ZceGNiXHhjY1x4OThceGViXHhmNVx4YTgiCisJCQkgICJceDk3XHg2OFx4NzJceDY4XHhkNlx4ZWNceGNjXHhjMCIKKwkJCSAgIlx4YzBceDdiXHgyNVx4ZTJceDVlXHhjZlx4ZTVceDg0IiwKKwl9LCB7CisJCS5rbGVuCT0gMTYsCisJCS5rZXkgICAgPSAiXHg2M1x4NjhceDY5XHg2M1x4NmJceDY1XHg2ZVx4MjAiCisJCQkgICJceDc0XHg2NVx4NzJceDY5XHg3OVx4NjFceDZiXHg2OSIsCisJCS5ybGVuICAgPSA0NywKKwkJLnJlc3VsdCA9ICJceDQ5XHgyMFx4NzdceDZmXHg3NVx4NmNceDY0XHgyMCIKKwkJCSAgIlx4NmNceDY5XHg2Ylx4NjVceDIwXHg3NFx4NjhceDY1IgorCQkJICAiXHgyMFx4NDdceDY1XHg2ZVx4NjVceDcyXHg2MVx4NmMiCisJCQkgICJceDIwXHg0N1x4NjFceDc1XHgyN1x4NzNceDIwXHg0MyIKKwkJCSAgIlx4NjhceDY5XHg2M1x4NmJceDY1XHg2ZVx4MmNceDIwIgorCQkJICAiXHg3MFx4NmNceDY1XHg2MVx4NzNceDY1XHgyYyIsCisJCS5pbGVuICAgPSA0NywKKwkJLmlucHV0ICA9ICJceDk3XHg2OFx4NzJceDY4XHhkNlx4ZWNceGNjXHhjMCIKKwkJCSAgIlx4YzBceDdiXHgyNVx4ZTJceDVlXHhjZlx4ZTVceDg0IgorCQkJICAiXHhiM1x4ZmZceGZkXHg5NFx4MGNceDE2XHhhMVx4OGMiCisJCQkgICJceDFiXHg1NVx4NDlceGQyXHhmOFx4MzhceDAyXHg5ZSIKKwkJCSAgIlx4MzlceDMxXHgyNVx4MjNceGE3XHg4Nlx4NjJceGQ1IgorCQkJICAiXHhiZVx4N2ZceGNiXHhjY1x4OThceGViXHhmNSIsCisJfSwgeworCQkua2xlbgk9IDE2LAorCQkua2V5ICAgID0gIlx4NjNceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDIwIgorCQkJICAiXHg3NFx4NjVceDcyXHg2OVx4NzlceDYxXHg2Ylx4NjkiLAorCQkucmxlbiAgID0gNDgsCisJCS5yZXN1bHQgPSAiXHg0OVx4MjBceDc3XHg2Zlx4NzVceDZjXHg2NFx4MjAiCisJCQkgICJceDZjXHg2OVx4NmJceDY1XHgyMFx4NzRceDY4XHg2NSIKKwkJCSAgIlx4MjBceDQ3XHg2NVx4NmVceDY1XHg3Mlx4NjFceDZjIgorCQkJICAiXHgyMFx4NDdceDYxXHg3NVx4MjdceDczXHgyMFx4NDMiCisJCQkgICJceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDJjXHgyMCIKKwkJCSAgIlx4NzBceDZjXHg2NVx4NjFceDczXHg2NVx4MmNceDIwIiwKKwkJLmlsZW4gICA9IDQ4LAorCQkuaW5wdXQgID0gIlx4OTdceDY4XHg3Mlx4NjhceGQ2XHhlY1x4Y2NceGMwIgorCQkJICAiXHhjMFx4N2JceDI1XHhlMlx4NWVceGNmXHhlNVx4ODQiCisJCQkgICJceDlkXHhhZFx4OGJceGJiXHg5Nlx4YzRceGNkXHhjMCIKKwkJCSAgIlx4M2JceGMxXHgwM1x4ZTFceGExXHg5NFx4YmJceGQ4IgorCQkJICAiXHgzOVx4MzFceDI1XHgyM1x4YTdceDg2XHg2Mlx4ZDUiCisJCQkgICJceGJlXHg3Zlx4Y2JceGNjXHg5OFx4ZWJceGY1XHhhOCIsCisJfSwgeworCQkua2xlbgk9IDE2LAorCQkua2V5ICAgID0gIlx4NjNceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDIwIgorCQkJICAiXHg3NFx4NjVceDcyXHg2OVx4NzlceDYxXHg2Ylx4NjkiLAorCQkucmxlbiAgID0gNjQsCisJCS5yZXN1bHQgPSAiXHg0OVx4MjBceDc3XHg2Zlx4NzVceDZjXHg2NFx4MjAiCisJCQkgICJceDZjXHg2OVx4NmJceDY1XHgyMFx4NzRceDY4XHg2NSIKKwkJCSAgIlx4MjBceDQ3XHg2NVx4NmVceDY1XHg3Mlx4NjFceDZjIgorCQkJICAiXHgyMFx4NDdceDYxXHg3NVx4MjdceDczXHgyMFx4NDMiCisJCQkgICJceDY4XHg2OVx4NjNceDZiXHg2NVx4NmVceDJjXHgyMCIKKwkJCSAgIlx4NzBceDZjXHg2NVx4NjFceDczXHg2NVx4MmNceDIwIgorCQkJICAiXHg2MVx4NmVceDY0XHgyMFx4NzdceDZmXHg2ZVx4NzQiCisJCQkgICJceDZmXHg2ZVx4MjBceDczXHg2Zlx4NzVceDcwXHgyZSIsCisJCS5pbGVuICAgPSA2NCwKKwkJLmlucHV0ICA9ICJceDk3XHg2OFx4NzJceDY4XHhkNlx4ZWNceGNjXHhjMCIKKwkJCSAgIlx4YzBceDdiXHgyNVx4ZTJceDVlXHhjZlx4ZTVceDg0IgorCQkJICAiXHgzOVx4MzFceDI1XHgyM1x4YTdceDg2XHg2Mlx4ZDUiCisJCQkgICJceGJlXHg3Zlx4Y2JceGNjXHg5OFx4ZWJceGY1XHhhOCIKKwkJCSAgIlx4NDhceDA3XHhlZlx4ZThceDM2XHhlZVx4ODlceGE1IgorCQkJICAiXHgyNlx4NzNceDBkXHhiY1x4MmZceDdiXHhjOFx4NDAiCisJCQkgICJceDlkXHhhZFx4OGJceGJiXHg5Nlx4YzRceGNkXHhjMCIKKwkJCSAgIlx4M2JceGMxXHgwM1x4ZTFceGExXHg5NFx4YmJceGQ4IiwKKwl9Cit9OworCisvKgogICogQ29tcHJlc3Npb24gc3R1ZmYuCiAgKi8KICNkZWZpbmUgQ09NUF9CVUZfU0laRSAgICAgICAgICAgNTEyCkBAIC03NjUyLDM1ICs3ODUzLDM1IEBACiAJewogCQkuaW5sZW4JPSA3MCwKIAkJLm91dGxlbgk9IDM4LAotCSAgCS5pbnB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKLQkJCSAgIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIiwKLQkJLm91dHB1dAk9IHsgMHhmMywgMHhjYSwgMHhjZiwgMHhjYywgMHg1MywgMHgyOCwgMHgyZCwgMHg1NiwKLQkJCSAgICAweGM4LCAweGNiLCAweDJmLCAweDU3LCAweDQ4LCAweGNjLCAweDRiLCAweDUxLAotCQkJICAgIDB4MjgsIDB4Y2UsIDB4NDgsIDB4MmMsIDB4NGEsIDB4NTUsIDB4MjgsIDB4YzksCi0JCQkgICAgMHg0OCwgMHg1NSwgMHgyOCwgMHhjZSwgMHg0ZiwgMHgyYiwgMHgyOSwgMHgwNywKLQkJCSAgICAweDcxLCAweGJjLCAweDA4LCAweDJiLCAweDAxLCAweDAwIH0sCisJCS5pbnB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJCS5vdXRwdXQJPSAiXHhmM1x4Y2FceGNmXHhjY1x4NTNceDI4XHgyZFx4NTYiCisJCQkgICJceGM4XHhjYlx4MmZceDU3XHg0OFx4Y2NceDRiXHg1MSIKKwkJCSAgIlx4MjhceGNlXHg0OFx4MmNceDRhXHg1NVx4MjhceGM5IgorCQkJICAiXHg0OFx4NTVceDI4XHhjZVx4NGZceDJiXHgyOVx4MDciCisJCQkgICJceDcxXHhiY1x4MDhceDJiXHgwMVx4MDAiLAogCX0sIHsKIAkJLmlubGVuCT0gMTkxLAogCQkub3V0bGVuCT0gMTIyLAogCQkuaW5wdXQJPSAiVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIERFRkxBVEUiCi0JCQkgICJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKLQkJCSAgInRoZSBERUZMQVRFIGFsZ29yaXRobSB0byB0aGUgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbC4iLAotCQkub3V0cHV0CT0geyAweDVkLCAweDhkLCAweDMxLCAweDBlLCAweGMyLCAweDMwLCAweDEwLCAweDA0LAotCQkJICAgIDB4YmYsIDB4YjIsIDB4MmYsIDB4YzgsIDB4MWYsIDB4MTAsIDB4MDQsIDB4MDksCi0JCQkgICAgMHg4OSwgMHhjMiwgMHg4NSwgMHgzZiwgMHg3MCwgMHhiMSwgMHgyZiwgMHhmOCwKLQkJCSAgICAweDI0LCAweGRiLCAweDY3LCAweGQ5LCAweDQ3LCAweGMxLCAweGVmLCAweDQ5LAotCQkJICAgIDB4NjgsIDB4MTIsIDB4NTEsIDB4YWUsIDB4NzYsIDB4NjcsIDB4ZDYsIDB4MjcsCi0JCQkgICAgMHgxOSwgMHg4OCwgMHgxYSwgMHhkZSwgMHg4NSwgMHhhYiwgMHgyMSwgMHhmMiwKLQkJCSAgICAweDA4LCAweDVkLCAweDE2LCAweDFlLCAweDIwLCAweDA0LCAweDJkLCAweGFkLAotCQkJICAgIDB4ZjMsIDB4MTgsIDB4YTIsIDB4MTUsIDB4ODUsIDB4MmQsIDB4NjksIDB4YzQsCi0JCQkgICAgMHg0MiwgMHg4MywgMHgyMywgMHhiNiwgMHg2YywgMHg4OSwgMHg3MSwgMHg5YiwKLQkJCSAgICAweGVmLCAweGNmLCAweDhiLCAweDlmLCAweGNmLCAweDMzLCAweGNhLCAweDJmLAotCQkJICAgIDB4ZWQsIDB4NjIsIDB4YTksIDB4NGMsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4YWYsCi0JCQkgICAgMHg1MiwgMHgzNywgMHhlZCwgMHgwZSwgMHg1MiwgMHg2YiwgMHg1OSwgMHgwMiwKLQkJCSAgICAweGQ5LCAweDRlLCAweGU4LCAweDdhLCAweDc2LCAweDFkLCAweDAyLCAweDk4LAotCQkJICAgIDB4ZmUsIDB4OGEsIDB4ODcsIDB4ODMsIDB4YTMsIDB4NGYsIDB4NTYsIDB4OGEsCi0JCQkgICAgMHhiOCwgMHg5ZSwgMHg4ZSwgMHg1YywgMHg1NywgMHhkMywgMHhhMCwgMHg3OSwKLQkJCSAgICAweGZhLCAweDAyIH0sCisJCQkiY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgVGhpcyBkb2N1bWVudCBkZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiBvZiAiCisJCQkidGhlIERFRkxBVEUgYWxnb3JpdGhtIHRvIHRoZSBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sLiIsCisJCS5vdXRwdXQJPSAiXHg1ZFx4OGRceDMxXHgwZVx4YzJceDMwXHgxMFx4MDQiCisJCQkgICJceGJmXHhiMlx4MmZceGM4XHgxZlx4MTBceDA0XHgwOSIKKwkJCSAgIlx4ODlceGMyXHg4NVx4M2ZceDcwXHhiMVx4MmZceGY4IgorCQkJICAiXHgyNFx4ZGJceDY3XHhkOVx4NDdceGMxXHhlZlx4NDkiCisJCQkgICJceDY4XHgxMlx4NTFceGFlXHg3Nlx4NjdceGQ2XHgyNyIKKwkJCSAgIlx4MTlceDg4XHgxYVx4ZGVceDg1XHhhYlx4MjFceGYyIgorCQkJICAiXHgwOFx4NWRceDE2XHgxZVx4MjBceDA0XHgyZFx4YWQiCisJCQkgICJceGYzXHgxOFx4YTJceDE1XHg4NVx4MmRceDY5XHhjNCIKKwkJCSAgIlx4NDJceDgzXHgyM1x4YjZceDZjXHg4OVx4NzFceDliIgorCQkJICAiXHhlZlx4Y2ZceDhiXHg5Zlx4Y2ZceDMzXHhjYVx4MmYiCisJCQkgICJceGVkXHg2Mlx4YTlceDRjXHg4MFx4ZmZceDEzXHhhZiIKKwkJCSAgIlx4NTJceDM3XHhlZFx4MGVceDUyXHg2Ylx4NTlceDAyIgorCQkJICAiXHhkOVx4NGVceGU4XHg3YVx4NzZceDFkXHgwMlx4OTgiCisJCQkgICJceGZlXHg4YVx4ODdceDgzXHhhM1x4NGZceDU2XHg4YSIKKwkJCSAgIlx4YjhceDllXHg4ZVx4NWNceDU3XHhkM1x4YTBceDc5IgorCQkJICAiXHhmYVx4MDIiLAogCX0sCiB9OwogCkBAIC03Njg4LDM1ICs3ODg5LDM1IEBACiAJewogCQkuaW5sZW4JPSAxMjIsCiAJCS5vdXRsZW4JPSAxOTEsCi0JCS5pbnB1dAk9IHsgMHg1ZCwgMHg4ZCwgMHgzMSwgMHgwZSwgMHhjMiwgMHgzMCwgMHgxMCwgMHgwNCwKLQkJCSAgICAweGJmLCAweGIyLCAweDJmLCAweGM4LCAweDFmLCAweDEwLCAweDA0LCAweDA5LAotCQkJICAgIDB4ODksIDB4YzIsIDB4ODUsIDB4M2YsIDB4NzAsIDB4YjEsIDB4MmYsIDB4ZjgsCi0JCQkgICAgMHgyNCwgMHhkYiwgMHg2NywgMHhkOSwgMHg0NywgMHhjMSwgMHhlZiwgMHg0OSwKLQkJCSAgICAweDY4LCAweDEyLCAweDUxLCAweGFlLCAweDc2LCAweDY3LCAweGQ2LCAweDI3LAotCQkJICAgIDB4MTksIDB4ODgsIDB4MWEsIDB4ZGUsIDB4ODUsIDB4YWIsIDB4MjEsIDB4ZjIsCi0JCQkgICAgMHgwOCwgMHg1ZCwgMHgxNiwgMHgxZSwgMHgyMCwgMHgwNCwgMHgyZCwgMHhhZCwKLQkJCSAgICAweGYzLCAweDE4LCAweGEyLCAweDE1LCAweDg1LCAweDJkLCAweDY5LCAweGM0LAotCQkJICAgIDB4NDIsIDB4ODMsIDB4MjMsIDB4YjYsIDB4NmMsIDB4ODksIDB4NzEsIDB4OWIsCi0JCQkgICAgMHhlZiwgMHhjZiwgMHg4YiwgMHg5ZiwgMHhjZiwgMHgzMywgMHhjYSwgMHgyZiwKLQkJCSAgICAweGVkLCAweDYyLCAweGE5LCAweDRjLCAweDgwLCAweGZmLCAweDEzLCAweGFmLAotCQkJICAgIDB4NTIsIDB4MzcsIDB4ZWQsIDB4MGUsIDB4NTIsIDB4NmIsIDB4NTksIDB4MDIsCi0JCQkgICAgMHhkOSwgMHg0ZSwgMHhlOCwgMHg3YSwgMHg3NiwgMHgxZCwgMHgwMiwgMHg5OCwKLQkJCSAgICAweGZlLCAweDhhLCAweDg3LCAweDgzLCAweGEzLCAweDRmLCAweDU2LCAweDhhLAotCQkJICAgIDB4YjgsIDB4OWUsIDB4OGUsIDB4NWMsIDB4NTcsIDB4ZDMsIDB4YTAsIDB4NzksCi0JCQkgICAgMHhmYSwgMHgwMiB9LAorCQkuaW5wdXQJPSAiXHg1ZFx4OGRceDMxXHgwZVx4YzJceDMwXHgxMFx4MDQiCisJCQkgICJceGJmXHhiMlx4MmZceGM4XHgxZlx4MTBceDA0XHgwOSIKKwkJCSAgIlx4ODlceGMyXHg4NVx4M2ZceDcwXHhiMVx4MmZceGY4IgorCQkJICAiXHgyNFx4ZGJceDY3XHhkOVx4NDdceGMxXHhlZlx4NDkiCisJCQkgICJceDY4XHgxMlx4NTFceGFlXHg3Nlx4NjdceGQ2XHgyNyIKKwkJCSAgIlx4MTlceDg4XHgxYVx4ZGVceDg1XHhhYlx4MjFceGYyIgorCQkJICAiXHgwOFx4NWRceDE2XHgxZVx4MjBceDA0XHgyZFx4YWQiCisJCQkgICJceGYzXHgxOFx4YTJceDE1XHg4NVx4MmRceDY5XHhjNCIKKwkJCSAgIlx4NDJceDgzXHgyM1x4YjZceDZjXHg4OVx4NzFceDliIgorCQkJICAiXHhlZlx4Y2ZceDhiXHg5Zlx4Y2ZceDMzXHhjYVx4MmYiCisJCQkgICJceGVkXHg2Mlx4YTlceDRjXHg4MFx4ZmZceDEzXHhhZiIKKwkJCSAgIlx4NTJceDM3XHhlZFx4MGVceDUyXHg2Ylx4NTlceDAyIgorCQkJICAiXHhkOVx4NGVceGU4XHg3YVx4NzZceDFkXHgwMlx4OTgiCisJCQkgICJceGZlXHg4YVx4ODdceDgzXHhhM1x4NGZceDU2XHg4YSIKKwkJCSAgIlx4YjhceDllXHg4ZVx4NWNceDU3XHhkM1x4YTBceDc5IgorCQkJICAiXHhmYVx4MDIiLAogCQkub3V0cHV0CT0gIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGEgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIHRoZSBERUZMQVRFIgotCQkJICAiY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgVGhpcyBkb2N1bWVudCBkZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiBvZiAiCi0JCQkgICJ0aGUgREVGTEFURSBhbGdvcml0aG0gdG8gdGhlIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wuIiwKKwkJCSJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKKwkJCSJ0aGUgREVGTEFURSBhbGdvcml0aG0gdG8gdGhlIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wuIiwKIAl9LCB7CiAJCS5pbmxlbgk9IDM4LAogCQkub3V0bGVuCT0gNzAsCi0JCS5pbnB1dAk9IHsgMHhmMywgMHhjYSwgMHhjZiwgMHhjYywgMHg1MywgMHgyOCwgMHgyZCwgMHg1NiwKLQkJCSAgICAweGM4LCAweGNiLCAweDJmLCAweDU3LCAweDQ4LCAweGNjLCAweDRiLCAweDUxLAotCQkJICAgIDB4MjgsIDB4Y2UsIDB4NDgsIDB4MmMsIDB4NGEsIDB4NTUsIDB4MjgsIDB4YzksCi0JCQkgICAgMHg0OCwgMHg1NSwgMHgyOCwgMHhjZSwgMHg0ZiwgMHgyYiwgMHgyOSwgMHgwNywKLQkJCSAgICAweDcxLCAweGJjLCAweDA4LCAweDJiLCAweDAxLCAweDAwIH0sCisJCS5pbnB1dAk9ICJceGYzXHhjYVx4Y2ZceGNjXHg1M1x4MjhceDJkXHg1NiIKKwkJCSAgIlx4YzhceGNiXHgyZlx4NTdceDQ4XHhjY1x4NGJceDUxIgorCQkJICAiXHgyOFx4Y2VceDQ4XHgyY1x4NGFceDU1XHgyOFx4YzkiCisJCQkgICJceDQ4XHg1NVx4MjhceGNlXHg0Zlx4MmJceDI5XHgwNyIKKwkJCSAgIlx4NzFceGJjXHgwOFx4MmJceDAxXHgwMCIsCiAJCS5vdXRwdXQJPSAiSm9pbiB1cyBub3cgYW5kIHNoYXJlIHRoZSBzb2Z0d2FyZSAiCi0JCQkgICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJCQkiSm9pbiB1cyBub3cgYW5kIHNoYXJlIHRoZSBzb2Z0d2FyZSAiLAogCX0sCiB9OwogCkBAIC03NzMxLDM2ICs3OTMyLDM2IEBACiAJCS5pbmxlbgk9IDcwLAogCQkub3V0bGVuCT0gNDYsCiAJCS5pbnB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKLQkJCSAgIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIiwKLQkJLm91dHB1dAk9IHsgIDB4MDAsIDB4MGQsIDB4NGEsIDB4NmYsIDB4NjksIDB4NmUsIDB4MjAsIDB4NzUsCi0JCQkgICAgIDB4NzMsIDB4MjAsIDB4NmUsIDB4NmYsIDB4NzcsIDB4MjAsIDB4NjEsIDB4NmUsCi0JCQkgICAgIDB4NjQsIDB4MjAsIDB4NzMsIDB4NjgsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjAsCi0JCQkgICAgIDB4NzQsIDB4NjgsIDB4NjUsIDB4MjAsIDB4NzMsIDB4NmYsIDB4NjYsIDB4NzQsCi0JCQkgICAgIDB4NzcsIDB4NzAsIDB4MDEsIDB4MDEsIDB4NGEsIDB4NmYsIDB4NjksIDB4NmUsCi0JCQkgICAgIDB4M2QsIDB4ODgsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAgfSwKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJCS5vdXRwdXQJPSAiXHgwMFx4MGRceDRhXHg2Zlx4NjlceDZlXHgyMFx4NzUiCisJCQkiXHg3M1x4MjBceDZlXHg2Zlx4NzdceDIwXHg2MVx4NmUiCisJCQkiXHg2NFx4MjBceDczXHg2OFx4NjFceDcyXHg2NVx4MjAiCisJCQkiXHg3NFx4NjhceDY1XHgyMFx4NzNceDZmXHg2Nlx4NzQiCisJCQkiXHg3N1x4NzBceDAxXHgwMVx4NGFceDZmXHg2OVx4NmUiCisJCQkiXHgzZFx4ODhceDAwXHgxMVx4MDBceDAwIiwKIAl9LCB7CiAJCS5pbmxlbgk9IDE1OSwKIAkJLm91dGxlbgk9IDEzMywKIAkJLmlucHV0CT0gIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGEgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIHRoZSBMWk8gIgotCQkJICAiY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgVGhpcyBkb2N1bWVudCBkZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiBvZiAiCi0JCQkgICJ0aGUgTFpPIGFsZ29yaXRobSB1c2VkIGluIFVCSUZTLiIsCi0JCS5vdXRwdXQJPSB7IDB4MDAsIDB4MmIsIDB4NTQsIDB4NjgsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjQsCi0JCQkgICAgMHg2ZiwgMHg2MywgMHg3NSwgMHg2ZCwgMHg2NSwgMHg2ZSwgMHg3NCwgMHgyMCwKLQkJCSAgICAweDY0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDYyLCAweDY1LAotCQkJICAgIDB4NzMsIDB4MjAsIDB4NjEsIDB4MjAsIDB4NjMsIDB4NmYsIDB4NmQsIDB4NzAsCi0JCQkgICAgMHg3MiwgMHg2NSwgMHg3MywgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyMCwKLQkJCSAgICAweDZkLCAweDY1LCAweDc0LCAweDY4LCAweDZmLCAweDY0LCAweDIwLCAweDYyLAotCQkJICAgIDB4NjEsIDB4NzMsIDB4NjUsIDB4NjQsIDB4MjAsIDB4NmYsIDB4NmUsIDB4MjAsCi0JCQkgICAgMHg3NCwgMHg2OCwgMHg2NSwgMHgyMCwgMHg0YywgMHg1YSwgMHg0ZiwgMHgyYiwKLQkJCSAgICAweDhjLCAweDAwLCAweDBkLCAweDYxLCAweDZjLCAweDY3LCAweDZmLCAweDcyLAotCQkJICAgIDB4NjksIDB4NzQsIDB4NjgsIDB4NmQsIDB4MmUsIDB4MjAsIDB4MjAsIDB4NTQsCi0JCQkgICAgMHg2OCwgMHg2OSwgMHg3MywgMHgyYSwgMHg1NCwgMHgwMSwgMHgwMiwgMHg2NiwKLQkJCSAgICAweDY5LCAweDZlLCAweDY1LCAweDczLCAweDk0LCAweDA2LCAweDA1LCAweDYxLAotCQkJICAgIDB4NzAsIDB4NzAsIDB4NmMsIDB4NjksIDB4NjMsIDB4NjEsIDB4NzQsIDB4NzYsCi0JCQkgICAgMHgwYSwgMHg2ZiwgMHg2NiwgMHg4OCwgMHgwMiwgMHg2MCwgMHgwOSwgMHgyNywKLQkJCSAgICAweGYwLCAweDAwLCAweDBjLCAweDIwLCAweDc1LCAweDczLCAweDY1LCAweDY0LAotCQkJICAgIDB4MjAsIDB4NjksIDB4NmUsIDB4MjAsIDB4NTUsIDB4NDIsIDB4NDksIDB4NDYsCi0JCQkgICAgMHg1MywgMHgyZSwgMHgxMSwgMHgwMCwgMHgwMCB9LAorCQkJImNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFRoaXMgZG9jdW1lbnQgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gb2YgIgorCQkJInRoZSBMWk8gYWxnb3JpdGhtIHVzZWQgaW4gVUJJRlMuIiwKKwkJLm91dHB1dAk9ICJceDAwXHgyYlx4NTRceDY4XHg2OVx4NzNceDIwXHg2NCIKKwkJCSAgIlx4NmZceDYzXHg3NVx4NmRceDY1XHg2ZVx4NzRceDIwIgorCQkJICAiXHg2NFx4NjVceDczXHg2M1x4NzJceDY5XHg2Mlx4NjUiCisJCQkgICJceDczXHgyMFx4NjFceDIwXHg2M1x4NmZceDZkXHg3MCIKKwkJCSAgIlx4NzJceDY1XHg3M1x4NzNceDY5XHg2Zlx4NmVceDIwIgorCQkJICAiXHg2ZFx4NjVceDc0XHg2OFx4NmZceDY0XHgyMFx4NjIiCisJCQkgICJceDYxXHg3M1x4NjVceDY0XHgyMFx4NmZceDZlXHgyMCIKKwkJCSAgIlx4NzRceDY4XHg2NVx4MjBceDRjXHg1YVx4NGZceDJiIgorCQkJICAiXHg4Y1x4MDBceDBkXHg2MVx4NmNceDY3XHg2Zlx4NzIiCisJCQkgICJceDY5XHg3NFx4NjhceDZkXHgyZVx4MjBceDIwXHg1NCIKKwkJCSAgIlx4NjhceDY5XHg3M1x4MmFceDU0XHgwMVx4MDJceDY2IgorCQkJICAiXHg2OVx4NmVceDY1XHg3M1x4OTRceDA2XHgwNVx4NjEiCisJCQkgICJceDcwXHg3MFx4NmNceDY5XHg2M1x4NjFceDc0XHg3NiIKKwkJCSAgIlx4MGFceDZmXHg2Nlx4ODhceDAyXHg2MFx4MDlceDI3IgorCQkJICAiXHhmMFx4MDBceDBjXHgyMFx4NzVceDczXHg2NVx4NjQiCisJCQkgICJceDIwXHg2OVx4NmVceDIwXHg1NVx4NDJceDQ5XHg0NiIKKwkJCSAgIlx4NTNceDJlXHgxMVx4MDBceDAwIiwKIAl9LAogfTsKIApAQCAtNzc2OCwzNyArNzk2OSwzNyBAQAogCXsKIAkJLmlubGVuCT0gMTMzLAogCQkub3V0bGVuCT0gMTU5LAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MmIsIDB4NTQsIDB4NjgsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjQsCi0JCQkgICAgMHg2ZiwgMHg2MywgMHg3NSwgMHg2ZCwgMHg2NSwgMHg2ZSwgMHg3NCwgMHgyMCwKLQkJCSAgICAweDY0LCAweDY1LCAweDczLCAweDYzLCAweDcyLCAweDY5LCAweDYyLCAweDY1LAotCQkJICAgIDB4NzMsIDB4MjAsIDB4NjEsIDB4MjAsIDB4NjMsIDB4NmYsIDB4NmQsIDB4NzAsCi0JCQkgICAgMHg3MiwgMHg2NSwgMHg3MywgMHg3MywgMHg2OSwgMHg2ZiwgMHg2ZSwgMHgyMCwKLQkJCSAgICAweDZkLCAweDY1LCAweDc0LCAweDY4LCAweDZmLCAweDY0LCAweDIwLCAweDYyLAotCQkJICAgIDB4NjEsIDB4NzMsIDB4NjUsIDB4NjQsIDB4MjAsIDB4NmYsIDB4NmUsIDB4MjAsCi0JCQkgICAgMHg3NCwgMHg2OCwgMHg2NSwgMHgyMCwgMHg0YywgMHg1YSwgMHg0ZiwgMHgyYiwKLQkJCSAgICAweDhjLCAweDAwLCAweDBkLCAweDYxLCAweDZjLCAweDY3LCAweDZmLCAweDcyLAotCQkJICAgIDB4NjksIDB4NzQsIDB4NjgsIDB4NmQsIDB4MmUsIDB4MjAsIDB4MjAsIDB4NTQsCi0JCQkgICAgMHg2OCwgMHg2OSwgMHg3MywgMHgyYSwgMHg1NCwgMHgwMSwgMHgwMiwgMHg2NiwKLQkJCSAgICAweDY5LCAweDZlLCAweDY1LCAweDczLCAweDk0LCAweDA2LCAweDA1LCAweDYxLAotCQkJICAgIDB4NzAsIDB4NzAsIDB4NmMsIDB4NjksIDB4NjMsIDB4NjEsIDB4NzQsIDB4NzYsCi0JCQkgICAgMHgwYSwgMHg2ZiwgMHg2NiwgMHg4OCwgMHgwMiwgMHg2MCwgMHgwOSwgMHgyNywKLQkJCSAgICAweGYwLCAweDAwLCAweDBjLCAweDIwLCAweDc1LCAweDczLCAweDY1LCAweDY0LAotCQkJICAgIDB4MjAsIDB4NjksIDB4NmUsIDB4MjAsIDB4NTUsIDB4NDIsIDB4NDksIDB4NDYsCi0JCQkgICAgMHg1MywgMHgyZSwgMHgxMSwgMHgwMCwgMHgwMCB9LAorCQkuaW5wdXQJPSAiXHgwMFx4MmJceDU0XHg2OFx4NjlceDczXHgyMFx4NjQiCisJCQkgICJceDZmXHg2M1x4NzVceDZkXHg2NVx4NmVceDc0XHgyMCIKKwkJCSAgIlx4NjRceDY1XHg3M1x4NjNceDcyXHg2OVx4NjJceDY1IgorCQkJICAiXHg3M1x4MjBceDYxXHgyMFx4NjNceDZmXHg2ZFx4NzAiCisJCQkgICJceDcyXHg2NVx4NzNceDczXHg2OVx4NmZceDZlXHgyMCIKKwkJCSAgIlx4NmRceDY1XHg3NFx4NjhceDZmXHg2NFx4MjBceDYyIgorCQkJICAiXHg2MVx4NzNceDY1XHg2NFx4MjBceDZmXHg2ZVx4MjAiCisJCQkgICJceDc0XHg2OFx4NjVceDIwXHg0Y1x4NWFceDRmXHgyYiIKKwkJCSAgIlx4OGNceDAwXHgwZFx4NjFceDZjXHg2N1x4NmZceDcyIgorCQkJICAiXHg2OVx4NzRceDY4XHg2ZFx4MmVceDIwXHgyMFx4NTQiCisJCQkgICJceDY4XHg2OVx4NzNceDJhXHg1NFx4MDFceDAyXHg2NiIKKwkJCSAgIlx4NjlceDZlXHg2NVx4NzNceDk0XHgwNlx4MDVceDYxIgorCQkJICAiXHg3MFx4NzBceDZjXHg2OVx4NjNceDYxXHg3NFx4NzYiCisJCQkgICJceDBhXHg2Zlx4NjZceDg4XHgwMlx4NjBceDA5XHgyNyIKKwkJCSAgIlx4ZjBceDAwXHgwY1x4MjBceDc1XHg3M1x4NjVceDY0IgorCQkJICAiXHgyMFx4NjlceDZlXHgyMFx4NTVceDQyXHg0OVx4NDYiCisJCQkgICJceDUzXHgyZVx4MTFceDAwXHgwMCIsCiAJCS5vdXRwdXQJPSAiVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIExaTyAiCi0JCQkgICJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKLQkJCSAgInRoZSBMWk8gYWxnb3JpdGhtIHVzZWQgaW4gVUJJRlMuIiwKKwkJCSJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKKwkJCSJ0aGUgTFpPIGFsZ29yaXRobSB1c2VkIGluIFVCSUZTLiIsCiAJfSwgewogCQkuaW5sZW4JPSA0NiwKIAkJLm91dGxlbgk9IDcwLAotCQkuaW5wdXQJPSB7IDB4MDAsIDB4MGQsIDB4NGEsIDB4NmYsIDB4NjksIDB4NmUsIDB4MjAsIDB4NzUsCi0JCQkgICAgMHg3MywgMHgyMCwgMHg2ZSwgMHg2ZiwgMHg3NywgMHgyMCwgMHg2MSwgMHg2ZSwKLQkJCSAgICAweDY0LCAweDIwLCAweDczLCAweDY4LCAweDYxLCAweDcyLCAweDY1LCAweDIwLAotCQkJICAgIDB4NzQsIDB4NjgsIDB4NjUsIDB4MjAsIDB4NzMsIDB4NmYsIDB4NjYsIDB4NzQsCi0JCQkgICAgMHg3NywgMHg3MCwgMHgwMSwgMHgwMSwgMHg0YSwgMHg2ZiwgMHg2OSwgMHg2ZSwKLQkJCSAgICAweDNkLCAweDg4LCAweDAwLCAweDExLCAweDAwLCAweDAwIH0sCisJCS5pbnB1dAk9ICJceDAwXHgwZFx4NGFceDZmXHg2OVx4NmVceDIwXHg3NSIKKwkJCSAgIlx4NzNceDIwXHg2ZVx4NmZceDc3XHgyMFx4NjFceDZlIgorCQkJICAiXHg2NFx4MjBceDczXHg2OFx4NjFceDcyXHg2NVx4MjAiCisJCQkgICJceDc0XHg2OFx4NjVceDIwXHg3M1x4NmZceDY2XHg3NCIKKwkJCSAgIlx4NzdceDcwXHgwMVx4MDFceDRhXHg2Zlx4NjlceDZlIgorCQkJICAiXHgzZFx4ODhceDAwXHgxMVx4MDBceDAwIiwKIAkJLm91dHB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKLQkJCSAgIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIiwKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCiAJfSwKIH07CiAKQEAgLTc4MDksNDYgKzgwMTAsNDYgQEAKIAogc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgbWljaGFlbF9taWNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7Ci0JCS5rZXkgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKwkJLmtleSA9ICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsCiAJCS5rc2l6ZSA9IDgsCi0JCS5wbGFpbnRleHQgPSB7IH0sCisJCS5wbGFpbnRleHQgPSB6ZXJvZWRfc3RyaW5nLAogCQkucHNpemUgPSAwLAotCQkuZGlnZXN0ID0geyAweDgyLCAweDkyLCAweDVjLCAweDFjLCAweGExLCAweGQxLCAweDMwLCAweGI4IH0KKwkJLmRpZ2VzdCA9ICJceDgyXHg5Mlx4NWNceDFjXHhhMVx4ZDFceDMwXHhiOCIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4ODIsIDB4OTIsIDB4NWMsIDB4MWMsIDB4YTEsIDB4ZDEsIDB4MzAsIDB4YjggfSwKKwkJLmtleSA9ICJceDgyXHg5Mlx4NWNceDFjXHhhMVx4ZDFceDMwXHhiOCIsCiAJCS5rc2l6ZSA9IDgsCi0JCS5wbGFpbnRleHQgPSB7ICdNJyB9LAorCQkucGxhaW50ZXh0ID0gIk0iLAogCQkucHNpemUgPSAxLAotCQkuZGlnZXN0ID0geyAweDQzLCAweDQ3LCAweDIxLCAweGNhLCAweDQwLCAweDYzLCAweDliLCAweDNmIH0KKwkJLmRpZ2VzdCA9ICJceDQzXHg0N1x4MjFceGNhXHg0MFx4NjNceDliXHgzZiIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4NDMsIDB4NDcsIDB4MjEsIDB4Y2EsIDB4NDAsIDB4NjMsIDB4OWIsIDB4M2YgfSwKKwkJLmtleSA9ICJceDQzXHg0N1x4MjFceGNhXHg0MFx4NjNceDliXHgzZiIsCiAJCS5rc2l6ZSA9IDgsCi0JCS5wbGFpbnRleHQgPSB7ICdNJywgJ2knIH0sCisJCS5wbGFpbnRleHQgPSAiTWkiLAogCQkucHNpemUgPSAyLAotCQkuZGlnZXN0ID0geyAweGU4LCAweGY5LCAweGJlLCAweGNhLCAweGU5LCAweDdlLCAweDVkLCAweDI5IH0KKwkJLmRpZ2VzdCA9ICJceGU4XHhmOVx4YmVceGNhXHhlOVx4N2VceDVkXHgyOSIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4ZTgsIDB4ZjksIDB4YmUsIDB4Y2EsIDB4ZTksIDB4N2UsIDB4NWQsIDB4MjkgfSwKKwkJLmtleSA9ICJceGU4XHhmOVx4YmVceGNhXHhlOVx4N2VceDVkXHgyOSIsCiAJCS5rc2l6ZSA9IDgsCi0JCS5wbGFpbnRleHQgPSB7ICdNJywgJ2knLCAnYycgfSwKKwkJLnBsYWludGV4dCA9ICJNaWMiLAogCQkucHNpemUgPSAzLAotCQkuZGlnZXN0ID0geyAweDkwLCAweDAzLCAweDhmLCAweGM2LCAweGNmLCAweDEzLCAweGMxLCAweGRiIH0KKwkJLmRpZ2VzdCA9ICJceDkwXHgwM1x4OGZceGM2XHhjZlx4MTNceGMxXHhkYiIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4OTAsIDB4MDMsIDB4OGYsIDB4YzYsIDB4Y2YsIDB4MTMsIDB4YzEsIDB4ZGIgfSwKKwkJLmtleSA9ICJceDkwXHgwM1x4OGZceGM2XHhjZlx4MTNceGMxXHhkYiIsCiAJCS5rc2l6ZSA9IDgsCi0JCS5wbGFpbnRleHQgPSB7ICdNJywgJ2knLCAnYycsICdoJyB9LAorCQkucGxhaW50ZXh0ID0gIk1pY2giLAogCQkucHNpemUgPSA0LAotCQkuZGlnZXN0ID0geyAweGQ1LCAweDVlLCAweDEwLCAweDA1LCAweDEwLCAweDEyLCAweDg5LCAweDg2IH0KKwkJLmRpZ2VzdCA9ICJceGQ1XHg1ZVx4MTBceDA1XHgxMFx4MTJceDg5XHg4NiIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4ZDUsIDB4NWUsIDB4MTAsIDB4MDUsIDB4MTAsIDB4MTIsIDB4ODksIDB4ODYgfSwKKwkJLmtleSA9ICJceGQ1XHg1ZVx4MTBceDA1XHgxMFx4MTJceDg5XHg4NiIsCiAJCS5rc2l6ZSA9IDgsCi0JCS5wbGFpbnRleHQgPSB7ICdNJywgJ2knLCAnYycsICdoJywgJ2EnLCAnZScsICdsJyB9LAorCQkucGxhaW50ZXh0ID0gIk1pY2hhZWwiLAogCQkucHNpemUgPSA3LAotCQkuZGlnZXN0ID0geyAweDBhLCAweDk0LCAweDJiLCAweDEyLCAweDRlLCAweGNhLCAweGE1LCAweDQ2IH0sCisJCS5kaWdlc3QgPSAiXHgwYVx4OTRceDJiXHgxMlx4NGVceGNhXHhhNVx4NDYiLAogCX0KIH07CiAKQEAgLTc4NjAsMTcwICs4MDYxLDE3MCBAQAogc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgY3JjMzJjX3R2X3RlbXBsYXRlW10gPSB7CiAJewogCQkucHNpemUgPSAwLAotCQkuZGlnZXN0ID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KKwkJLmRpZ2VzdCA9ICJceDAwXHgwMFx4MDBceDAwIiwKIAl9LAogCXsKLQkJLmtleSA9IHsgMHg4NywgMHhhOSwgMHhjYiwgMHhlZCB9LAorCQkua2V5ID0gIlx4ODdceGE5XHhjYlx4ZWQiLAogCQkua3NpemUgPSA0LAogCQkucHNpemUgPSAwLAotCQkuZGlnZXN0ID0geyAweDc4LCAweDU2LCAweDM0LCAweDEyIH0sCisJCS5kaWdlc3QgPSAiXHg3OFx4NTZceDM0XHgxMiIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKwkJLmtleSA9ICJceGZmXHhmZlx4ZmZceGZmIiwKIAkJLmtzaXplID0gNCwKLQkJLnBsYWludGV4dCA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKLQkJCSAgICAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLAotCQkJICAgICAgIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsCi0JCQkgICAgICAgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgMHgyMCwKLQkJCSAgICAgICAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LCAweDI4IH0sCisJCS5wbGFpbnRleHQgPSAiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDgiCisJCQkgICAgICJceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMCIKKwkJCSAgICAgIlx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4IgorCQkJICAgICAiXHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZlx4MjAiCisJCQkgICAgICJceDIxXHgyMlx4MjNceDI0XHgyNVx4MjZceDI3XHgyOCIsCiAJCS5wc2l6ZSA9IDQwLAotCQkuZGlnZXN0ID0geyAweDdmLCAweDE1LCAweDJjLCAweDBlIH0KKwkJLmRpZ2VzdCA9ICJceDdmXHgxNVx4MmNceDBlIiwKIAl9LAogCXsKLQkJLmtleSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorCQkua2V5ID0gIlx4ZmZceGZmXHhmZlx4ZmYiLAogCQkua3NpemUgPSA0LAotCQkucGxhaW50ZXh0ID0geyAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLCAweDMwLAotCQkJICAgICAgIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCi0JCQkgICAgICAgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwgMHg0MCwKLQkJCSAgICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAotCQkJICAgICAgIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsIDB4NTAgfSwKKwkJLnBsYWludGV4dCA9ICJceDI5XHgyYVx4MmJceDJjXHgyZFx4MmVceDJmXHgzMCIKKwkJCSAgICAgIlx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzdceDM4IgorCQkJICAgICAiXHgzOVx4M2FceDNiXHgzY1x4M2RceDNlXHgzZlx4NDAiCisJCQkgICAgICJceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3XHg0OCIKKwkJCSAgICAgIlx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGZceDUwIiwKIAkJLnBzaXplID0gNDAsCi0JCS5kaWdlc3QgPSB7IDB4ZjYsIDB4ZWIsIDB4ODAsIDB4ZTkgfQorCQkuZGlnZXN0ID0gIlx4ZjZceGViXHg4MFx4ZTkiLAogCX0sCiAJewotCQkua2V5ID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisJCS5rZXkgPSAiXHhmZlx4ZmZceGZmXHhmZiIsCiAJCS5rc2l6ZSA9IDQsCi0JCS5wbGFpbnRleHQgPSB7IDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCi0JCQkgICAgICAgMHg1OSwgMHg1YSwgMHg1YiwgMHg1YywgMHg1ZCwgMHg1ZSwgMHg1ZiwgMHg2MCwKLQkJCSAgICAgICAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LAotCQkJICAgICAgIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsCi0JCQkgICAgICAgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCB9LAorCQkucGxhaW50ZXh0ID0gIlx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTdceDU4IgorCQkJICAgICAiXHg1OVx4NWFceDViXHg1Y1x4NWRceDVlXHg1Zlx4NjAiCisJCQkgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OCIKKwkJCSAgICAgIlx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmZceDcwIgorCQkJICAgICAiXHg3MVx4NzJceDczXHg3NFx4NzVceDc2XHg3N1x4NzgiLAogCQkucHNpemUgPSA0MCwKLQkJLmRpZ2VzdCA9IHsgMHhlZCwgMHhiZCwgMHg3NCwgMHhkZSB9CisJCS5kaWdlc3QgPSAiXHhlZFx4YmRceDc0XHhkZSIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKwkJLmtleSA9ICJceGZmXHhmZlx4ZmZceGZmIiwKIAkJLmtzaXplID0gNCwKLQkJLnBsYWludGV4dCA9IHsgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwgMHg4MCwKLQkJCSAgICAgICAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LAotCQkJICAgICAgIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsIDB4OTAsCi0JCQkgICAgICAgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgMHg5OCwKLQkJCSAgICAgICAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLCAweGEwIH0sCisJCS5wbGFpbnRleHQgPSAiXHg3OVx4N2FceDdiXHg3Y1x4N2RceDdlXHg3Zlx4ODAiCisJCQkgICAgICJceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OCIKKwkJCSAgICAgIlx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwIgorCQkJICAgICAiXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OTgiCisJCQkgICAgICJceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMCIsCiAJCS5wc2l6ZSA9IDQwLAotCQkuZGlnZXN0ID0geyAweDYyLCAweGM4LCAweDc5LCAweGQ1IH0KKwkJLmRpZ2VzdCA9ICJceDYyXHhjOFx4NzlceGQ1IiwKIAl9LAogCXsKLQkJLmtleSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorCQkua2V5ID0gIlx4ZmZceGZmXHhmZlx4ZmYiLAogCQkua3NpemUgPSA0LAotCQkucGxhaW50ZXh0ID0geyAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LCAweGE4LAotCQkJICAgICAgIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsIDB4YjAsCi0JCQkgICAgICAgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwKLQkJCSAgICAgICAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLCAweGMwLAotCQkJICAgICAgIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzggfSwKKwkJLnBsYWludGV4dCA9ICJceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOCIKKwkJCSAgICAgIlx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwIgorCQkJICAgICAiXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjgiCisJCQkgICAgICJceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMCIKKwkJCSAgICAgIlx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4IiwKIAkJLnBzaXplID0gNDAsCi0JCS5kaWdlc3QgPSB7IDB4ZDAsIDB4OWEsIDB4OTcsIDB4YmEgfQorCQkuZGlnZXN0ID0gIlx4ZDBceDlhXHg5N1x4YmEiLAogCX0sCiAJewotCQkua2V5ID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisJCS5rZXkgPSAiXHhmZlx4ZmZceGZmXHhmZiIsCiAJCS5rc2l6ZSA9IDQsCi0JCS5wbGFpbnRleHQgPSB7IDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsIDB4ZDAsCi0JCQkgICAgICAgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwKLQkJCSAgICAgICAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLCAweGUwLAotCQkJICAgICAgIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsCi0JCQkgICAgICAgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwgMHhmMCB9LAorCQkucGxhaW50ZXh0ID0gIlx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwIgorCQkJICAgICAiXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDgiCisJCQkgICAgICJceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMCIKKwkJCSAgICAgIlx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4IgorCQkJICAgICAiXHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjAiLAogCQkucHNpemUgPSA0MCwKLQkJLmRpZ2VzdCA9IHsgMHgxMywgMHhkOSwgMHgyOSwgMHgyYiB9CisJCS5kaWdlc3QgPSAiXHgxM1x4ZDlceDI5XHgyYiIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4ODAsIDB4ZWEsIDB4ZDMsIDB4ZjEgfSwKKwkJLmtleSA9ICJceDgwXHhlYVx4ZDNceGYxIiwKIAkJLmtzaXplID0gNCwKLQkJLnBsYWludGV4dCA9IHsgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgMHgzMCwKLQkJCSAgICAgICAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LAotCQkJICAgICAgIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsIDB4NDAsCi0JCQkgICAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKLQkJCSAgICAgICAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmLCAweDUwIH0sCisJCS5wbGFpbnRleHQgPSAiXHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZlx4MzAiCisJCQkgICAgICJceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOCIKKwkJCSAgICAgIlx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2ZceDQwIgorCQkJICAgICAiXHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2XHg0N1x4NDgiCisJCQkgICAgICJceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmXHg1MCIsCiAJCS5wc2l6ZSA9IDQwLAotCQkuZGlnZXN0ID0geyAweDBjLCAweGI1LCAweGUyLCAweGEyIH0KKwkJLmRpZ2VzdCA9ICJceDBjXHhiNVx4ZTJceGEyIiwKIAl9LAogCXsKLQkJLmtleSA9IHsgMHhmMywgMHg0YSwgMHgxZCwgMHg1ZCB9LAorCQkua2V5ID0gIlx4ZjNceDRhXHgxZFx4NWQiLAogCQkua3NpemUgPSA0LAotCQkucGxhaW50ZXh0ID0geyAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAotCQkJICAgICAgIDB4NTksIDB4NWEsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsIDB4NjAsCi0JCQkgICAgICAgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwKLQkJCSAgICAgICAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLCAweDcwLAotCQkJICAgICAgIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzggfSwKKwkJLnBsYWludGV4dCA9ICJceDUxXHg1Mlx4NTNceDU0XHg1NVx4NTZceDU3XHg1OCIKKwkJCSAgICAgIlx4NTlceDVhXHg1Ylx4NWNceDVkXHg1ZVx4NWZceDYwIgorCQkJICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjgiCisJCQkgICAgICJceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmXHg3MCIKKwkJCSAgICAgIlx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzdceDc4IiwKIAkJLnBzaXplID0gNDAsCi0JCS5kaWdlc3QgPSB7IDB4ZDEsIDB4N2YsIDB4ZmIsIDB4YTYgfQorCQkuZGlnZXN0ID0gIlx4ZDFceDdmXHhmYlx4YTYiLAogCX0sCiAJewotCQkua2V5ID0geyAweDJlLCAweDgwLCAweDA0LCAweDU5IH0sCisJCS5rZXkgPSAiXHgyZVx4ODBceDA0XHg1OSIsCiAJCS5rc2l6ZSA9IDQsCi0JCS5wbGFpbnRleHQgPSB7IDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsIDB4ODAsCi0JCQkgICAgICAgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwKLQkJCSAgICAgICAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLCAweDkwLAotCQkJICAgICAgIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCi0JCQkgICAgICAgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwgMHhhMCB9LAorCQkucGxhaW50ZXh0ID0gIlx4NzlceDdhXHg3Ylx4N2NceDdkXHg3ZVx4N2ZceDgwIgorCQkJICAgICAiXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODgiCisJCQkgICAgICJceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MCIKKwkJCSAgICAgIlx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4IgorCQkJICAgICAiXHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTAiLAogCQkucHNpemUgPSA0MCwKLQkJLmRpZ2VzdCA9IHsgMHg1OSwgMHgzMywgMHhlNiwgMHg3YSB9CisJCS5kaWdlc3QgPSAiXHg1OVx4MzNceGU2XHg3YSIsCiAJfSwKIAl7Ci0JCS5rZXkgPSB7IDB4YTYsIDB4Y2MsIDB4MTksIDB4ODUgfSwKKwkJLmtleSA9ICJceGE2XHhjY1x4MTlceDg1IiwKIAkJLmtzaXplID0gNCwKLQkJLnBsYWludGV4dCA9IHsgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywgMHhhOCwKLQkJCSAgICAgICAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLCAweGIwLAotCQkJICAgICAgIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsCi0JCQkgICAgICAgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwgMHhjMCwKLQkJCSAgICAgICAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4IH0sCisJCS5wbGFpbnRleHQgPSAiXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YTgiCisJCQkgICAgICJceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMCIKKwkJCSAgICAgIlx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4IgorCQkJICAgICAiXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzAiCisJCQkgICAgICJceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOCIsCiAJCS5wc2l6ZSA9IDQwLAotCQkuZGlnZXN0ID0geyAweGJlLCAweDAzLCAweDAxLCAweGQyIH0KKwkJLmRpZ2VzdCA9ICJceGJlXHgwM1x4MDFceGQyIiwKIAl9LAogCXsKLQkJLmtleSA9IHsgMHg0MSwgMHhmYywgMHhmZSwgMHgyZCB9LAorCQkua2V5ID0gIlx4NDFceGZjXHhmZVx4MmQiLAogCQkua3NpemUgPSA0LAotCQkucGxhaW50ZXh0ID0geyAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLCAweGQwLAotCQkJICAgICAgIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsCi0JCQkgICAgICAgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwgMHhlMCwKLQkJCSAgICAgICAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LAotCQkJICAgICAgIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsIDB4ZjAgfSwKKwkJLnBsYWludGV4dCA9ICJceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMCIKKwkJCSAgICAgIlx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4IgorCQkJICAgICAiXHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTAiCisJCQkgICAgICJceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOCIKKwkJCSAgICAgIlx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwIiwKIAkJLnBzaXplID0gNDAsCi0JCS5kaWdlc3QgPSB7IDB4NzUsIDB4ZDMsIDB4YzUsIDB4MjQgfQorCQkuZGlnZXN0ID0gIlx4NzVceGQzXHhjNVx4MjQiLAogCX0sCiAJewotCQkua2V5ID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisJCS5rZXkgPSAiXHhmZlx4ZmZceGZmXHhmZiIsCiAJCS5rc2l6ZSA9IDQsCi0JCS5wbGFpbnRleHQgPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCi0JCQkgICAgICAgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwKLQkJCSAgICAgICAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LAotCQkJICAgICAgIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsCi0JCQkgICAgICAgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywgMHgyOCwKLQkJCSAgICAgICAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLCAweDMwLAotCQkJICAgICAgIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCi0JCQkgICAgICAgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwgMHg0MCwKLQkJCSAgICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAotCQkJICAgICAgIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsIDB4NTAsCi0JCQkgICAgICAgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKLQkJCSAgICAgICAweDU5LCAweDVhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLCAweDYwLAotCQkJICAgICAgIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsCi0JCQkgICAgICAgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwgMHg3MCwKLQkJCSAgICAgICAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAotCQkJICAgICAgIDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsIDB4ODAsCi0JCQkgICAgICAgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwKLQkJCSAgICAgICAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLCAweDkwLAotCQkJICAgICAgIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCi0JCQkgICAgICAgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwgMHhhMCwKLQkJCSAgICAgICAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LCAweGE4LAotCQkJICAgICAgIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsIDB4YjAsCi0JCQkgICAgICAgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwKLQkJCSAgICAgICAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLCAweGMwLAotCQkJICAgICAgIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsCi0JCQkgICAgICAgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwgMHhkMCwKLQkJCSAgICAgICAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LAotCQkJICAgICAgIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsIDB4ZTAsCi0JCQkgICAgICAgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwKLQkJCSAgICAgICAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAweGVmLCAweGYwIH0sCisJCS5wbGFpbnRleHQgPSAiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDgiCisJCQkgICAgICJceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMCIKKwkJCSAgICAgIlx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4IgorCQkJICAgICAiXHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZlx4MjAiCisJCQkgICAgICJceDIxXHgyMlx4MjNceDI0XHgyNVx4MjZceDI3XHgyOCIKKwkJCSAgICAgIlx4MjlceDJhXHgyYlx4MmNceDJkXHgyZVx4MmZceDMwIgorCQkJICAgICAiXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzN1x4MzgiCisJCQkgICAgICJceDM5XHgzYVx4M2JceDNjXHgzZFx4M2VceDNmXHg0MCIKKwkJCSAgICAgIlx4NDFceDQyXHg0M1x4NDRceDQ1XHg0Nlx4NDdceDQ4IgorCQkJICAgICAiXHg0OVx4NGFceDRiXHg0Y1x4NGRceDRlXHg0Zlx4NTAiCisJCQkgICAgICJceDUxXHg1Mlx4NTNceDU0XHg1NVx4NTZceDU3XHg1OCIKKwkJCSAgICAgIlx4NTlceDVhXHg1Ylx4NWNceDVkXHg1ZVx4NWZceDYwIgorCQkJICAgICAiXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjgiCisJCQkgICAgICJceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmXHg3MCIKKwkJCSAgICAgIlx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzdceDc4IgorCQkJICAgICAiXHg3OVx4N2FceDdiXHg3Y1x4N2RceDdlXHg3Zlx4ODAiCisJCQkgICAgICJceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OCIKKwkJCSAgICAgIlx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwIgorCQkJICAgICAiXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OTgiCisJCQkgICAgICJceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMCIKKwkJCSAgICAgIlx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4IgorCQkJICAgICAiXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjAiCisJCQkgICAgICJceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOCIKKwkJCSAgICAgIlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwIgorCQkJICAgICAiXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzgiCisJCQkgICAgICJceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMCIKKwkJCSAgICAgIlx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4IgorCQkJICAgICAiXHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTAiCisJCQkgICAgICJceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOCIKKwkJCSAgICAgIlx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwIiwKIAkJLnBzaXplID0gMjQwLAotCQkuZGlnZXN0ID0geyAweDc1LCAweGQzLCAweGM1LCAweDI0IH0sCisJCS5kaWdlc3QgPSAiXHg3NVx4ZDNceGM1XHgyNCIsCiAJCS5ucCA9IDIsCiAJCS50YXAgPSB7IDMxLCAyMDkgfQogCX0sCkBAIC04MDMyLDEzNCArODIzMywxOSBAQAogLyoKICAqIENpcGhlciBzcGVlZCB0ZXN0cwogICovCi1zdGF0aWMgc3RydWN0IGNpcGhlcl9zcGVlZCBhZXNfc3BlZWRfdGVtcGxhdGVbXSA9IHsKLQl7IC5rbGVuID0gMTYsIC5ibGVuID0gMTYsIH0sCi0JeyAua2xlbiA9IDE2LCAuYmxlbiA9IDY0LCB9LAotCXsgLmtsZW4gPSAxNiwgLmJsZW4gPSAyNTYsIH0sCi0JeyAua2xlbiA9IDE2LCAuYmxlbiA9IDEwMjQsIH0sCi0JeyAua2xlbiA9IDE2LCAuYmxlbiA9IDgxOTIsIH0sCi0JeyAua2xlbiA9IDI0LCAuYmxlbiA9IDE2LCB9LAotCXsgLmtsZW4gPSAyNCwgLmJsZW4gPSA2NCwgfSwKLQl7IC5rbGVuID0gMjQsIC5ibGVuID0gMjU2LCB9LAotCXsgLmtsZW4gPSAyNCwgLmJsZW4gPSAxMDI0LCB9LAotCXsgLmtsZW4gPSAyNCwgLmJsZW4gPSA4MTkyLCB9LAotCXsgLmtsZW4gPSAzMiwgLmJsZW4gPSAxNiwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gNjQsIH0sCi0JeyAua2xlbiA9IDMyLCAuYmxlbiA9IDI1NiwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gMTAyNCwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gODE5MiwgfSwKLQotCS8qIEVuZCBtYXJrZXIgKi8KLQl7ICAua2xlbiA9IDAsIC5ibGVuID0gMCwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjaXBoZXJfc3BlZWQgYWVzX2xyd19zcGVlZF90ZW1wbGF0ZVtdID0gewotCXsgLmtsZW4gPSAzMiwgLmJsZW4gPSAxNiwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gNjQsIH0sCi0JeyAua2xlbiA9IDMyLCAuYmxlbiA9IDI1NiwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gMTAyNCwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gODE5MiwgfSwKLQl7IC5rbGVuID0gNDAsIC5ibGVuID0gMTYsIH0sCi0JeyAua2xlbiA9IDQwLCAuYmxlbiA9IDY0LCB9LAotCXsgLmtsZW4gPSA0MCwgLmJsZW4gPSAyNTYsIH0sCi0JeyAua2xlbiA9IDQwLCAuYmxlbiA9IDEwMjQsIH0sCi0JeyAua2xlbiA9IDQwLCAuYmxlbiA9IDgxOTIsIH0sCi0JeyAua2xlbiA9IDQ4LCAuYmxlbiA9IDE2LCB9LAotCXsgLmtsZW4gPSA0OCwgLmJsZW4gPSA2NCwgfSwKLQl7IC5rbGVuID0gNDgsIC5ibGVuID0gMjU2LCB9LAotCXsgLmtsZW4gPSA0OCwgLmJsZW4gPSAxMDI0LCB9LAotCXsgLmtsZW4gPSA0OCwgLmJsZW4gPSA4MTkyLCB9LAotCi0JLyogRW5kIG1hcmtlciAqLwotCXsgIC5rbGVuID0gMCwgLmJsZW4gPSAwLCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNpcGhlcl9zcGVlZCBhZXNfeHRzX3NwZWVkX3RlbXBsYXRlW10gPSB7Ci0JeyAua2xlbiA9IDMyLCAuYmxlbiA9IDE2LCB9LAotCXsgLmtsZW4gPSAzMiwgLmJsZW4gPSA2NCwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gMjU2LCB9LAotCXsgLmtsZW4gPSAzMiwgLmJsZW4gPSAxMDI0LCB9LAotCXsgLmtsZW4gPSAzMiwgLmJsZW4gPSA4MTkyLCB9LAotCXsgLmtsZW4gPSA0OCwgLmJsZW4gPSAxNiwgfSwKLQl7IC5rbGVuID0gNDgsIC5ibGVuID0gNjQsIH0sCi0JeyAua2xlbiA9IDQ4LCAuYmxlbiA9IDI1NiwgfSwKLQl7IC5rbGVuID0gNDgsIC5ibGVuID0gMTAyNCwgfSwKLQl7IC5rbGVuID0gNDgsIC5ibGVuID0gODE5MiwgfSwKLQl7IC5rbGVuID0gNjQsIC5ibGVuID0gMTYsIH0sCi0JeyAua2xlbiA9IDY0LCAuYmxlbiA9IDY0LCB9LAotCXsgLmtsZW4gPSA2NCwgLmJsZW4gPSAyNTYsIH0sCi0JeyAua2xlbiA9IDY0LCAuYmxlbiA9IDEwMjQsIH0sCi0JeyAua2xlbiA9IDY0LCAuYmxlbiA9IDgxOTIsIH0sCi0KLQkvKiBFbmQgbWFya2VyICovCi0JeyAgLmtsZW4gPSAwLCAuYmxlbiA9IDAsIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3NwZWVkIGRlczNfZWRlX3NwZWVkX3RlbXBsYXRlW10gPSB7Ci0JeyAua2xlbiA9IDI0LCAuYmxlbiA9IDE2LCB9LAotCXsgLmtsZW4gPSAyNCwgLmJsZW4gPSA2NCwgfSwKLQl7IC5rbGVuID0gMjQsIC5ibGVuID0gMjU2LCB9LAotCXsgLmtsZW4gPSAyNCwgLmJsZW4gPSAxMDI0LCB9LAotCXsgLmtsZW4gPSAyNCwgLmJsZW4gPSA4MTkyLCB9LAotCi0JLyogRW5kIG1hcmtlciAqLwotCXsgIC5rbGVuID0gMCwgLmJsZW4gPSAwLCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNpcGhlcl9zcGVlZCB0d29maXNoX3NwZWVkX3RlbXBsYXRlW10gPSB7Ci0JeyAua2xlbiA9IDE2LCAuYmxlbiA9IDE2LCB9LAotCXsgLmtsZW4gPSAxNiwgLmJsZW4gPSA2NCwgfSwKLQl7IC5rbGVuID0gMTYsIC5ibGVuID0gMjU2LCB9LAotCXsgLmtsZW4gPSAxNiwgLmJsZW4gPSAxMDI0LCB9LAotCXsgLmtsZW4gPSAxNiwgLmJsZW4gPSA4MTkyLCB9LAotCXsgLmtsZW4gPSAyNCwgLmJsZW4gPSAxNiwgfSwKLQl7IC5rbGVuID0gMjQsIC5ibGVuID0gNjQsIH0sCi0JeyAua2xlbiA9IDI0LCAuYmxlbiA9IDI1NiwgfSwKLQl7IC5rbGVuID0gMjQsIC5ibGVuID0gMTAyNCwgfSwKLQl7IC5rbGVuID0gMjQsIC5ibGVuID0gODE5MiwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gMTYsIH0sCi0JeyAua2xlbiA9IDMyLCAuYmxlbiA9IDY0LCB9LAotCXsgLmtsZW4gPSAzMiwgLmJsZW4gPSAyNTYsIH0sCi0JeyAua2xlbiA9IDMyLCAuYmxlbiA9IDEwMjQsIH0sCi0JeyAua2xlbiA9IDMyLCAuYmxlbiA9IDgxOTIsIH0sCi0KLQkvKiBFbmQgbWFya2VyICovCi0JeyAgLmtsZW4gPSAwLCAuYmxlbiA9IDAsIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2lwaGVyX3NwZWVkIGJsb3dmaXNoX3NwZWVkX3RlbXBsYXRlW10gPSB7Ci0JLyogRG9uJ3Qgc3VwcG9ydCBibG93ZmlzaCBrZXlzID4gMjU2IGJpdCBpbiB0aGlzIHRlc3QgKi8KLQl7IC5rbGVuID0gOCwgLmJsZW4gPSAxNiwgfSwKLQl7IC5rbGVuID0gOCwgLmJsZW4gPSA2NCwgfSwKLQl7IC5rbGVuID0gOCwgLmJsZW4gPSAyNTYsIH0sCi0JeyAua2xlbiA9IDgsIC5ibGVuID0gMTAyNCwgfSwKLQl7IC5rbGVuID0gOCwgLmJsZW4gPSA4MTkyLCB9LAotCXsgLmtsZW4gPSAzMiwgLmJsZW4gPSAxNiwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gNjQsIH0sCi0JeyAua2xlbiA9IDMyLCAuYmxlbiA9IDI1NiwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gMTAyNCwgfSwKLQl7IC5rbGVuID0gMzIsIC5ibGVuID0gODE5MiwgfSwKLQotCS8qIEVuZCBtYXJrZXIgKi8KLQl7ICAua2xlbiA9IDAsIC5ibGVuID0gMCwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjaXBoZXJfc3BlZWQgZGVzX3NwZWVkX3RlbXBsYXRlW10gPSB7Ci0JeyAua2xlbiA9IDgsIC5ibGVuID0gMTYsIH0sCi0JeyAua2xlbiA9IDgsIC5ibGVuID0gNjQsIH0sCi0JeyAua2xlbiA9IDgsIC5ibGVuID0gMjU2LCB9LAotCXsgLmtsZW4gPSA4LCAuYmxlbiA9IDEwMjQsIH0sCi0JeyAua2xlbiA9IDgsIC5ibGVuID0gODE5MiwgfSwKLQotCS8qIEVuZCBtYXJrZXIgKi8KLQl7ICAua2xlbiA9IDAsIC5ibGVuID0gMCwgfQotfTsKK3N0YXRpYyB1OCBzcGVlZF90ZW1wbGF0ZV84W10gPSB7OCwgMH07CitzdGF0aWMgdTggc3BlZWRfdGVtcGxhdGVfMjRbXSA9IHsyNCwgMH07CitzdGF0aWMgdTggc3BlZWRfdGVtcGxhdGVfOF8zMltdID0gezgsIDMyLCAwfTsKK3N0YXRpYyB1OCBzcGVlZF90ZW1wbGF0ZV8xNl8zMltdID0gezE2LCAzMiwgMH07CitzdGF0aWMgdTggc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzJbXSA9IHsxNiwgMjQsIDMyLCAwfTsKK3N0YXRpYyB1OCBzcGVlZF90ZW1wbGF0ZV8zMl80MF80OFtdID0gezMyLCA0MCwgNDgsIDB9Oworc3RhdGljIHU4IHNwZWVkX3RlbXBsYXRlXzMyXzQ4XzY0W10gPSB7MzIsIDQ4LCA2NCwgMH07CiAKIC8qCiAgKiBEaWdlc3Qgc3BlZWQgdGVzdHMKICAqLwogc3RhdGljIHN0cnVjdCBoYXNoX3NwZWVkIGdlbmVyaWNfaGFzaF9zcGVlZF90ZW1wbGF0ZVtdID0gewotCXsgLmJsZW4gPSAxNiwgCS5wbGVuID0gMTYsIH0sCisJeyAuYmxlbiA9IDE2LAkucGxlbiA9IDE2LCB9LAogCXsgLmJsZW4gPSA2NCwJLnBsZW4gPSAxNiwgfSwKIAl7IC5ibGVuID0gNjQsCS5wbGVuID0gNjQsIH0sCiAJeyAuYmxlbiA9IDI1NiwJLnBsZW4gPSAxNiwgfSwKQEAgLTgxODYsNDEgKzgyNzIsNCBAQAogCXsgIC5ibGVuID0gMCwJLnBsZW4gPSAwLCB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGNpcGhlcl9zcGVlZCBjYW1lbGxpYV9zcGVlZF90ZW1wbGF0ZVtdID0gewotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDE2LCB9LAotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDY0LCB9LAotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDI1NiwgfSwKLSAgICAgIHsgLmtsZW4gPSAxNiwgLmJsZW4gPSAxMDI0LCB9LAotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDgxOTIsIH0sCi0gICAgICB7IC5rbGVuID0gMjQsIC5ibGVuID0gMTYsIH0sCi0gICAgICB7IC5rbGVuID0gMjQsIC5ibGVuID0gNjQsIH0sCi0gICAgICB7IC5rbGVuID0gMjQsIC5ibGVuID0gMjU2LCB9LAotICAgICAgeyAua2xlbiA9IDI0LCAuYmxlbiA9IDEwMjQsIH0sCi0gICAgICB7IC5rbGVuID0gMjQsIC5ibGVuID0gODE5MiwgfSwKLSAgICAgIHsgLmtsZW4gPSAzMiwgLmJsZW4gPSAxNiwgfSwKLSAgICAgIHsgLmtsZW4gPSAzMiwgLmJsZW4gPSA2NCwgfSwKLSAgICAgIHsgLmtsZW4gPSAzMiwgLmJsZW4gPSAyNTYsIH0sCi0gICAgICB7IC5rbGVuID0gMzIsIC5ibGVuID0gMTAyNCwgfSwKLSAgICAgIHsgLmtsZW4gPSAzMiwgLmJsZW4gPSA4MTkyLCB9LAotCi0gICAgICAvKiBFbmQgbWFya2VyICovCi0gICAgICB7ICAua2xlbiA9IDAsIC5ibGVuID0gMCwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjaXBoZXJfc3BlZWQgc2Fsc2EyMF9zcGVlZF90ZW1wbGF0ZVtdID0gewotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDE2LCB9LAotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDY0LCB9LAotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDI1NiwgfSwKLSAgICAgIHsgLmtsZW4gPSAxNiwgLmJsZW4gPSAxMDI0LCB9LAotICAgICAgeyAua2xlbiA9IDE2LCAuYmxlbiA9IDgxOTIsIH0sCi0gICAgICB7IC5rbGVuID0gMzIsIC5ibGVuID0gMTYsIH0sCi0gICAgICB7IC5rbGVuID0gMzIsIC5ibGVuID0gNjQsIH0sCi0gICAgICB7IC5rbGVuID0gMzIsIC5ibGVuID0gMjU2LCB9LAotICAgICAgeyAua2xlbiA9IDMyLCAuYmxlbiA9IDEwMjQsIH0sCi0gICAgICB7IC5rbGVuID0gMzIsIC5ibGVuID0gODE5MiwgfSwKLQotICAgICAgLyogRW5kIG1hcmtlciAqLwotICAgICAgeyAgLmtsZW4gPSAwLCAuYmxlbiA9IDAsIH0KLX07Ci0KICNlbmRpZgkvKiBfQ1JZUFRPX1RDUllQVF9IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vdGVhLmMgYi9jcnlwdG8vdGVhLmMKaW5kZXggNjg5M2IzZi4uNDEyYmM3NCAxMDA2NDQKLS0tIGEvY3J5cHRvL3RlYS5jCisrKyBiL2NyeXB0by90ZWEuYwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJLmNpYV9kZWNyeXB0CQk9CXhldGFfZGVjcnlwdCB9IH0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHRlYV9tb2RfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwogCQpAQCAtMjkyLDcgKzI5Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZWFfbW9kX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnRlYV9hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmeHRlYV9hbGcpOwpAQCAtMzAyLDggKzMwMiw4IEBACiBNT0RVTEVfQUxJQVMoInh0ZWEiKTsKIE1PRFVMRV9BTElBUygieGV0YSIpOwogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQodGVhX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHRlYV9tb2RfZmluaSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVEVBLCBYVEVBICYgWEVUQSBDcnlwdG9ncmFwaGljIEFsZ29yaXRobXMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90Z3IxOTIuYyBiL2NyeXB0by90Z3IxOTIuYwppbmRleCAyZTdlYTE2Li5hOTI0MTRmIDEwMDY0NAotLS0gYS9jcnlwdG8vdGdyMTkyLmMKKysrIGIvY3J5cHRvL3RncjE5Mi5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAkJCSAgICAgLmRpYV9maW5hbCA9IHRncjEyOF9maW5hbH19CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB0Z3IxOTJfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNjg4LDcgKzY4OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0Z3IxOTJfbW9kX2Zpbmkodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnRncjE5Mik7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZ0Z3IxNjApOwpAQCAtNjk4LDggKzY5OCw4IEBACiBNT0RVTEVfQUxJQVMoInRncjE2MCIpOwogTU9EVUxFX0FMSUFTKCJ0Z3IxMjgiKTsKIAotbW9kdWxlX2luaXQoaW5pdCk7Ci1tb2R1bGVfZXhpdChmaW5pKTsKK21vZHVsZV9pbml0KHRncjE5Ml9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdCh0Z3IxOTJfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlRpZ2VyIE1lc3NhZ2UgRGlnZXN0IEFsZ29yaXRobSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3R3b2Zpc2guYyBiL2NyeXB0by90d29maXNoLmMKaW5kZXggNDk3OWEyYi4uZGZjZGEyMyAxMDA2NDQKLS0tIGEvY3J5cHRvL3R3b2Zpc2guYworKysgYi9jcnlwdG8vdHdvZmlzaC5jCkBAIC0xOTcsMTggKzE5NywxOCBAQAogCS5jaWFfZGVjcnlwdCAgICAgICAgPSAgIHR3b2Zpc2hfZGVjcnlwdCB9IH0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHR3b2Zpc2hfbW9kX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0d29maXNoX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOwogfQogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQodHdvZmlzaF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdCh0d29maXNoX21vZF9maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiVHdvZmlzaCBDaXBoZXIgQWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vd3A1MTIuYyBiL2NyeXB0by93cDUxMi5jCmluZGV4IGY3NDY5NTIuLmJmZjI4NTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by93cDUxMi5jCisrKyBiL2NyeXB0by93cDUxMi5jCkBAIC0xMTQ2LDcgKzExNDYsNyBAQAogCS5kaWFfZmluYWwgIAk9CXdwMjU2X2ZpbmFsIH0gfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgd3A1MTJfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTE3Miw3ICsxMTcyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHdwNTEyX21vZF9maW5pKHZvaWQpCiB7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZ3cDUxMik7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZ3cDM4NCk7CkBAIC0xMTgyLDggKzExODIsOCBAQAogTU9EVUxFX0FMSUFTKCJ3cDM4NCIpOwogTU9EVUxFX0FMSUFTKCJ3cDI1NiIpOwogCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOworbW9kdWxlX2luaXQod3A1MTJfbW9kX2luaXQpOworbW9kdWxlX2V4aXQod3A1MTJfbW9kX2ZpbmkpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIldoaXJscG9vbCBNZXNzYWdlIERpZ2VzdCBBbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by94Y2JjLmMgYi9jcnlwdG8veGNiYy5jCmluZGV4IDg2NzI3NDAuLmI2M2I2MzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by94Y2JjLmMKKysrIGIvY3J5cHRvL3hjYmMuYwpAQCAtMTE2LDEzICsxMTYsMTYgQEAKIAlzdHJ1Y3QgY3J5cHRvX3hjYmNfY3R4ICpjdHggPSBjcnlwdG9faGFzaF9jdHhfYWxpZ25lZChwYXJlbnQpOwogCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0gPSBjdHgtPmNoaWxkOwogCWludCBicyA9IGNyeXB0b19oYXNoX2Jsb2Nrc2l6ZShwYXJlbnQpOwotCXVuc2lnbmVkIGludCBpID0gMDsKIAotCWRvIHsKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBwYWdlICpwZyA9IHNnX3BhZ2Uoc2cpOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2ctPm9mZnNldDsKKwkJdW5zaWduZWQgaW50IHNsZW4gPSBzZy0+bGVuZ3RoOwogCi0JCXN0cnVjdCBwYWdlICpwZyA9IHNnX3BhZ2UoJnNnW2ldKTsKLQkJdW5zaWduZWQgaW50IG9mZnNldCA9IHNnW2ldLm9mZnNldDsKLQkJdW5zaWduZWQgaW50IHNsZW4gPSBzZ1tpXS5sZW5ndGg7CisJCWlmICh1bmxpa2VseShzbGVuID4gbmJ5dGVzKSkKKwkJCXNsZW4gPSBuYnl0ZXM7CisKKwkJbmJ5dGVzIC09IHNsZW47CiAKIAkJd2hpbGUgKHNsZW4gPiAwKSB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuID0gbWluKHNsZW4sICgodW5zaWduZWQgaW50KShQQUdFX1NJWkUpKSAtIG9mZnNldCk7CkBAIC0xNzcsOSArMTgwLDExIEBACiAJCQlvZmZzZXQgPSAwOwogCQkJcGcrKzsKIAkJfQotCQluYnl0ZXMtPXNnW2ldLmxlbmd0aDsKLQkJaSsrOwotCX0gd2hpbGUgKG5ieXRlcz4wKTsKKworCQlpZiAoIW5ieXRlcykKKwkJCWJyZWFrOworCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3h0cy5jIGIvY3J5cHRvL3h0cy5jCmluZGV4IDhlYjA4YmYuLmQ4N2IwZjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by94dHMuYworKysgYi9jcnlwdG8veHRzLmMKQEAgLTc3LDE2ICs3NywxNiBAQAogfQogCiBzdHJ1Y3Qgc2luZm8gewotCWJlMTI4IHQ7CisJYmUxMjggKnQ7CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKIAl2b2lkICgqZm4pKHN0cnVjdCBjcnlwdG9fdGZtICosIHU4ICosIGNvbnN0IHU4ICopOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHh0c19yb3VuZChzdHJ1Y3Qgc2luZm8gKnMsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewotCWJlMTI4X3hvcihkc3QsICZzLT50LCBzcmMpOwkJLyogUFAgPC0gVCB4b3IgUCAqLworCWJlMTI4X3hvcihkc3QsIHMtPnQsIHNyYyk7CQkvKiBQUCA8LSBUIHhvciBQICovCiAJcy0+Zm4ocy0+dGZtLCBkc3QsIGRzdCk7CQkvKiBDQyA8LSBFKEtleTEsUFApICovCi0JYmUxMjhfeG9yKGRzdCwgZHN0LCAmcy0+dCk7CQkvKiBDIDwtIFQgeG9yIENDICovCisJYmUxMjhfeG9yKGRzdCwgZHN0LCBzLT50KTsJCS8qIEMgPC0gVCB4b3IgQ0MgKi8KIH0KIAogc3RhdGljIGludCBjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmQsCkBAIC0xMDEsNyArMTAxLDYgQEAKIAkJLnRmbSA9IGNyeXB0b19jaXBoZXJfdGZtKGN0eC0+Y2hpbGQpLAogCQkuZm4gPSBmbgogCX07Ci0JYmUxMjggKml2OwogCXU4ICp3c3JjOwogCXU4ICp3ZHN0OwogCkBAIC0xMDksMjAgKzEwOCwyMCBAQAogCWlmICghdy0+bmJ5dGVzKQogCQlyZXR1cm4gZXJyOwogCisJcy50ID0gKGJlMTI4ICopdy0+aXY7CiAJYXZhaWwgPSB3LT5uYnl0ZXM7CiAKIAl3c3JjID0gdy0+c3JjLnZpcnQuYWRkcjsKIAl3ZHN0ID0gdy0+ZHN0LnZpcnQuYWRkcjsKIAogCS8qIGNhbGN1bGF0ZSBmaXJzdCB2YWx1ZSBvZiBUICovCi0JaXYgPSAoYmUxMjggKil3LT5pdjsKLQl0dyhjcnlwdG9fY2lwaGVyX3RmbShjdHgtPnR3ZWFrKSwgKHZvaWQgKikmcy50LCB3LT5pdik7CisJdHcoY3J5cHRvX2NpcGhlcl90Zm0oY3R4LT50d2VhayksIHctPml2LCB3LT5pdik7CiAKIAlnb3RvIGZpcnN0OwogCiAJZm9yICg7OykgewogCQlkbyB7Ci0JCQlnZjEyOG11bF94X2JsZSgmcy50LCAmcy50KTsKKwkJCWdmMTI4bXVsX3hfYmxlKHMudCwgcy50KTsKIAogZmlyc3Q6CiAJCQl4dHNfcm91bmQoJnMsIHdkc3QsIHdzcmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY29ybi9jaGFyL2RlZmtleW1hcC1sNzIwMC5jIGIvZHJpdmVycy9hY29ybi9jaGFyL2RlZmtleW1hcC1sNzIwMC5jCmluZGV4IDI4YTVmYmMuLjkzZDgwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNvcm4vY2hhci9kZWZrZXltYXAtbDcyMDAuYworKysgYi9kcml2ZXJzL2Fjb3JuL2NoYXIvZGVma2V5bWFwLWw3MjAwLmMKQEAgLTM0Nyw0MCArMzQ3LDQwIEBACiB9OwogCiBzdHJ1Y3Qga2JkaWFjcnVjIGFjY2VudF90YWJsZVtNQVhfRElBQ1JdID0gewotCXsnYCcsICdBJywgJ1wzMDAnfSwJeydgJywgJ2EnLCAnXDM0MCd9LAotCXsnXCcnLCAnQScsICdcMzAxJ30sCXsnXCcnLCAnYScsICdcMzQxJ30sCi0JeydeJywgJ0EnLCAnXDMwMid9LAl7J14nLCAnYScsICdcMzQyJ30sCi0Jeyd+JywgJ0EnLCAnXDMwMyd9LAl7J34nLCAnYScsICdcMzQzJ30sCi0JeyciJywgJ0EnLCAnXDMwNCd9LAl7JyInLCAnYScsICdcMzQ0J30sCi0JeydPJywgJ0EnLCAnXDMwNSd9LAl7J28nLCAnYScsICdcMzQ1J30sCi0JeycwJywgJ0EnLCAnXDMwNSd9LAl7JzAnLCAnYScsICdcMzQ1J30sCi0JeydBJywgJ0EnLCAnXDMwNSd9LAl7J2EnLCAnYScsICdcMzQ1J30sCi0JeydBJywgJ0UnLCAnXDMwNid9LAl7J2EnLCAnZScsICdcMzQ2J30sCi0JeycsJywgJ0MnLCAnXDMwNyd9LAl7JywnLCAnYycsICdcMzQ3J30sCi0JeydgJywgJ0UnLCAnXDMxMCd9LAl7J2AnLCAnZScsICdcMzUwJ30sCi0JeydcJycsICdFJywgJ1wzMTEnfSwJeydcJycsICdlJywgJ1wzNTEnfSwKLQl7J14nLCAnRScsICdcMzEyJ30sCXsnXicsICdlJywgJ1wzNTInfSwKLQl7JyInLCAnRScsICdcMzEzJ30sCXsnIicsICdlJywgJ1wzNTMnfSwKLQl7J2AnLCAnSScsICdcMzE0J30sCXsnYCcsICdpJywgJ1wzNTQnfSwKLQl7J1wnJywgJ0knLCAnXDMxNSd9LAl7J1wnJywgJ2knLCAnXDM1NSd9LAotCXsnXicsICdJJywgJ1wzMTYnfSwJeydeJywgJ2knLCAnXDM1Nid9LAotCXsnIicsICdJJywgJ1wzMTcnfSwJeyciJywgJ2knLCAnXDM1Nyd9LAotCXsnLScsICdEJywgJ1wzMjAnfSwJeyctJywgJ2QnLCAnXDM2MCd9LAotCXsnficsICdOJywgJ1wzMjEnfSwJeyd+JywgJ24nLCAnXDM2MSd9LAotCXsnYCcsICdPJywgJ1wzMjInfSwJeydgJywgJ28nLCAnXDM2Mid9LAotCXsnXCcnLCAnTycsICdcMzIzJ30sCXsnXCcnLCAnbycsICdcMzYzJ30sCi0JeydeJywgJ08nLCAnXDMyNCd9LAl7J14nLCAnbycsICdcMzY0J30sCi0Jeyd+JywgJ08nLCAnXDMyNSd9LAl7J34nLCAnbycsICdcMzY1J30sCi0JeyciJywgJ08nLCAnXDMyNid9LAl7JyInLCAnbycsICdcMzY2J30sCi0JeycvJywgJ08nLCAnXDMzMCd9LAl7Jy8nLCAnbycsICdcMzcwJ30sCi0JeydgJywgJ1UnLCAnXDMzMSd9LAl7J2AnLCAndScsICdcMzcxJ30sCi0JeydcJycsICdVJywgJ1wzMzInfSwJeydcJycsICd1JywgJ1wzNzInfSwKLQl7J14nLCAnVScsICdcMzMzJ30sCXsnXicsICd1JywgJ1wzNzMnfSwKLQl7JyInLCAnVScsICdcMzM0J30sCXsnIicsICd1JywgJ1wzNzQnfSwKLQl7J1wnJywgJ1knLCAnXDMzNSd9LAl7J1wnJywgJ3knLCAnXDM3NSd9LAotCXsnVCcsICdIJywgJ1wzMzYnfSwJeyd0JywgJ2gnLCAnXDM3Nid9LAotCXsncycsICdzJywgJ1wzMzcnfSwJeyciJywgJ3knLCAnXDM3Nyd9LAotCXsncycsICd6JywgJ1wzMzcnfSwJeydpJywgJ2onLCAnXDM3Nyd9LAorCXsnYCcsICdBJywgMDMwMH0sCXsnYCcsICdhJywgMDM0MH0sCisJeydcJycsICdBJywgMDMwMX0sCXsnXCcnLCAnYScsIDAzNDF9LAorCXsnXicsICdBJywgMDMwMn0sCXsnXicsICdhJywgMDM0Mn0sCisJeyd+JywgJ0EnLCAwMzAzfSwJeyd+JywgJ2EnLCAwMzQzfSwKKwl7JyInLCAnQScsIDAzMDR9LAl7JyInLCAnYScsIDAzNDR9LAorCXsnTycsICdBJywgMDMwNX0sCXsnbycsICdhJywgMDM0NX0sCisJeycwJywgJ0EnLCAwMzA1fSwJeycwJywgJ2EnLCAwMzQ1fSwKKwl7J0EnLCAnQScsIDAzMDV9LAl7J2EnLCAnYScsIDAzNDV9LAorCXsnQScsICdFJywgMDMwNn0sCXsnYScsICdlJywgMDM0Nn0sCisJeycsJywgJ0MnLCAwMzA3fSwJeycsJywgJ2MnLCAwMzQ3fSwKKwl7J2AnLCAnRScsIDAzMTB9LAl7J2AnLCAnZScsIDAzNTB9LAorCXsnXCcnLCAnRScsIDAzMTF9LAl7J1wnJywgJ2UnLCAwMzUxfSwKKwl7J14nLCAnRScsIDAzMTJ9LAl7J14nLCAnZScsIDAzNTJ9LAorCXsnIicsICdFJywgMDMxM30sCXsnIicsICdlJywgMDM1M30sCisJeydgJywgJ0knLCAwMzE0fSwJeydgJywgJ2knLCAwMzU0fSwKKwl7J1wnJywgJ0knLCAwMzE1fSwJeydcJycsICdpJywgMDM1NX0sCisJeydeJywgJ0knLCAwMzE2fSwJeydeJywgJ2knLCAwMzU2fSwKKwl7JyInLCAnSScsIDAzMTd9LAl7JyInLCAnaScsIDAzNTd9LAorCXsnLScsICdEJywgMDMyMH0sCXsnLScsICdkJywgMDM2MH0sCisJeyd+JywgJ04nLCAwMzIxfSwJeyd+JywgJ24nLCAwMzYxfSwKKwl7J2AnLCAnTycsIDAzMjJ9LAl7J2AnLCAnbycsIDAzNjJ9LAorCXsnXCcnLCAnTycsIDAzMjN9LAl7J1wnJywgJ28nLCAwMzYzfSwKKwl7J14nLCAnTycsIDAzMjR9LAl7J14nLCAnbycsIDAzNjR9LAorCXsnficsICdPJywgMDMyNX0sCXsnficsICdvJywgMDM2NX0sCisJeyciJywgJ08nLCAwMzI2fSwJeyciJywgJ28nLCAwMzY2fSwKKwl7Jy8nLCAnTycsIDAzMzB9LAl7Jy8nLCAnbycsIDAzNzB9LAorCXsnYCcsICdVJywgMDMzMX0sCXsnYCcsICd1JywgMDM3MX0sCisJeydcJycsICdVJywgMDMzMn0sCXsnXCcnLCAndScsIDAzNzJ9LAorCXsnXicsICdVJywgMDMzM30sCXsnXicsICd1JywgMDM3M30sCisJeyciJywgJ1UnLCAwMzM0fSwJeyciJywgJ3UnLCAwMzc0fSwKKwl7J1wnJywgJ1knLCAwMzM1fSwJeydcJycsICd5JywgMDM3NX0sCisJeydUJywgJ0gnLCAwMzM2fSwJeyd0JywgJ2gnLCAwMzc2fSwKKwl7J3MnLCAncycsIDAzMzd9LAl7JyInLCAneScsIDAzNzd9LAorCXsncycsICd6JywgMDMzN30sCXsnaScsICdqJywgMDM3N30sCiB9OwogCiB1bnNpZ25lZCBpbnQgYWNjZW50X3RhYmxlX3NpemUgPSA2ODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggZjY4OGMyMS4uYjRmNWU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTI4MywzNCArMjgzLDIyIEBACiAJICBJZiB5b3UgaGF2ZSBhIGxlZ2FjeSBmcmVlIFRvc2hpYmEgbGFwdG9wIChzdWNoIGFzIHRoZSBMaWJyZXR0byBMMQogCSAgc2VyaWVzKSwgc2F5IFkuCiAKLWNvbmZpZyBBQ1BJX0NVU1RPTV9EU0RUCi0JYm9vbCAiSW5jbHVkZSBDdXN0b20gRFNEVCIKK2NvbmZpZyBBQ1BJX0NVU1RPTV9EU0RUX0ZJTEUKKwlzdHJpbmcgIkN1c3RvbSBEU0RUIFRhYmxlIGZpbGUgdG8gaW5jbHVkZSIKKwlkZWZhdWx0ICIiCiAJZGVwZW5kcyBvbiAhU1RBTkRBTE9ORQotCWRlZmF1bHQgbiAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBzdXBwb3J0cyBhIGN1c3RvbSBEU0RUIGJ5IGxpbmtpbmcgaXQgaW50byB0aGUga2VybmVsLgogCSAgU2VlIERvY3VtZW50YXRpb24vYWNwaS9kc2R0LW92ZXJyaWRlLnR4dAogCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQUNQSV9DVVNUT01fRFNEVF9GSUxFCi0Jc3RyaW5nICJDdXN0b20gRFNEVCBUYWJsZSBmaWxlIHRvIGluY2x1ZGUiCi0JZGVwZW5kcyBvbiBBQ1BJX0NVU1RPTV9EU0RUCi0JZGVmYXVsdCAiIgotCWhlbHAKIAkgIEVudGVyIHRoZSBmdWxsIHBhdGggbmFtZSB0byB0aGUgZmlsZSB3aGljaCBpbmNsdWRlcyB0aGUgQW1sQ29kZQogCSAgZGVjbGFyYXRpb24uCiAKLWNvbmZpZyBBQ1BJX0NVU1RPTV9EU0RUX0lOSVRSRAotCWJvb2wgIlJlYWQgQ3VzdG9tIERTRFQgZnJvbSBpbml0cmFtZnMiCi0JZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHN1cHBvcnRzIGEgY3VzdG9tIERTRFQgYnkgb3B0aW9uYWxseSBsb2FkaW5nIGl0IGZyb20gaW5pdHJkLgotCSAgU2VlIERvY3VtZW50YXRpb24vYWNwaS9kc2R0LW92ZXJyaWRlLnR4dAorCSAgSWYgdW5zdXJlLCBkb24ndCBlbnRlciBhIGZpbGUgbmFtZS4KIAotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgdGhpcyBmZWF0dXJlIG5vdywgYnV0IG1heSB1c2UgaXQgbGF0ZXIsCi0JICBpdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuCitjb25maWcgQUNQSV9DVVNUT01fRFNEVAorCWJvb2wKKwlkZWZhdWx0IEFDUElfQ1VTVE9NX0RTRFRfRklMRSAhPSAiIgogCiBjb25maWcgQUNQSV9CTEFDS0xJU1RfWUVBUgogCWludCAiRGlzYWJsZSBBQ1BJIGZvciBzeXN0ZW1zIGJlZm9yZSBKYW4gMXN0IHRoaXMgeWVhciIgaWYgWDg2XzMyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDc2YjliZWE5Li40M2E5NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWMuYworKysgYi9kcml2ZXJzL2FjcGkvYWMuYwpAQCAtNjMsNyArNjMsNyBAQAogc3RhdGljIGludCBhY3BpX2FjX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogc3RhdGljIGludCBhY3BpX2FjX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgYWNfZGV2aWNlX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBhY19kZXZpY2VfaWRzW10gPSB7CiAJeyJBQ1BJMDAwMyIsIDB9LAogCXsiIiwgMH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCmluZGV4IGQyNWVmOTYuLjQ0YWQ5MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogCSAgICAobGVkX291dCkgPyAoaG90ay0+c3RhdHVzIHwgbGVkbWFzaykgOiAoaG90ay0+c3RhdHVzICYgfmxlZG1hc2spOwogCiAJaWYgKGludmVydCkJCS8qIGludmVydCB0YXJnZXQgdmFsdWUgKi8KLQkJbGVkX291dCA9ICFsZWRfb3V0ICYgMHgxOworCQlsZWRfb3V0ID0gIWxlZF9vdXQ7CiAKIAlpZiAoIXdyaXRlX2FjcGlfaW50KGhvdGstPmhhbmRsZSwgbGVkbmFtZSwgbGVkX291dCwgTlVMTCkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFzdXMgQUNQSTogTEVEICglcykgd3JpdGUgZmFpbGVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggZjYyMTVlOC4uZDU3MjlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0yOTMsMTMgKzI5MywxMiBAQAogCQkJCXN0cm5jcHkocHRyLCAodTggKikmZWxlbWVudC0+aW50ZWdlci52YWx1ZSwKIAkJCQkJc2l6ZW9mKGFjcGlfaW50ZWdlcikpOwogCQkJCXB0cltzaXplb2YoYWNwaV9pbnRlZ2VyKV0gPSAwOwotCQkJfSBlbHNlIHJldHVybiAtRUZBVUxUOworCQkJfSBlbHNlCisJCQkJKnB0ciA9IDA7IC8qIGRvbid0IGhhdmUgdmFsdWUgKi8KIAkJfSBlbHNlIHsKLQkJCWlmIChlbGVtZW50LT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7Ci0JCQkJaW50ICp4ID0gKGludCAqKSgodTggKiliYXR0ZXJ5ICsKLQkJCQkJCW9mZnNldHNbaV0ub2Zmc2V0KTsKLQkJCQkqeCA9IGVsZW1lbnQtPmludGVnZXIudmFsdWU7Ci0JCQl9IGVsc2UgcmV0dXJuIC1FRkFVTFQ7CisJCQlpbnQgKnggPSAoaW50ICopKCh1OCAqKWJhdHRlcnkgKyBvZmZzZXRzW2ldLm9mZnNldCk7CisJCQkqeCA9IChlbGVtZW50LT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSA/CisJCQkJZWxlbWVudC0+aW50ZWdlci52YWx1ZSA6IC0xOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGNlM2MwYTIuLjJkMTk1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTM3MywxMCArMzczLDExIEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFjcGlfYnVzX2V2ZW50X2xvY2ssIGZsYWdzKTsKLQllbnRyeSA9Ci0JICAgIGxpc3RfZW50cnkoYWNwaV9idXNfZXZlbnRfbGlzdC5uZXh0LCBzdHJ1Y3QgYWNwaV9idXNfZXZlbnQsIG5vZGUpOwotCWlmIChlbnRyeSkKKwlpZiAoIWxpc3RfZW1wdHkoJmFjcGlfYnVzX2V2ZW50X2xpc3QpKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShhY3BpX2J1c19ldmVudF9saXN0Lm5leHQsCisJCQkJICAgc3RydWN0IGFjcGlfYnVzX2V2ZW50LCBub2RlKTsKIAkJbGlzdF9kZWwoJmVudHJ5LT5ub2RlKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNwaV9idXNfZXZlbnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFlbnRyeSkKQEAgLTc3Niw3ICs3NzcsNyBAQAogCiAJYWNwaV9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiYWNwaSIsIGZpcm13YXJlX2tvYmopOwogCWlmICghYWNwaV9rb2JqKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBrc2V0IGNyZWF0ZSBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGtzZXQgY3JlYXRlIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCWFjcGlfa29iaiA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggMjRhNzg2NS4uNmM1ZGE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAJaW5wdXQtPnBoeXMgPSBidXR0b24tPnBoeXM7CiAJaW5wdXQtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKIAlpbnB1dC0+aWQucHJvZHVjdCA9IGJ1dHRvbi0+dHlwZTsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9ICZkZXZpY2UtPmRldjsKIAogCXN3aXRjaCAoYnV0dG9uLT50eXBlKSB7CiAJY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1BPV0VSOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggMzA3Y2VmNi4uZmE0NGZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RvY2suYworKysgYi9kcml2ZXJzL2FjcGkvZG9jay5jCkBAIC03MTAsNiArNzEwLDcgQEAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWJlZ2luX3VuZG9jayhkb2NrX3N0YXRpb24pOwogCXJldCA9IGhhbmRsZV9lamVjdF9yZXF1ZXN0KGRvY2tfc3RhdGlvbiwgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVCk7CiAJcmV0dXJuIHJldCA/IHJldDogY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCmluZGV4IDJlOWNlOTQuLjNmNTFiN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlZ2lvbi5jCkBAIC0zMzgsNiArMzM4LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9wY2lfaWQgKnBjaV9pZDsKIAl1MTYgcGNpX3JlZ2lzdGVyOworCXUzMiB2YWx1ZTMyOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShleF9wY2lfY29uZmlnX3NwYWNlX2hhbmRsZXIpOwogCkBAIC0zNjQsOSArMzY1LDkgQEAKIAlzd2l0Y2ggKGZ1bmN0aW9uKSB7CiAJY2FzZSBBQ1BJX1JFQUQ6CiAKLQkJKnZhbHVlID0gMDsKIAkJc3RhdHVzID0gYWNwaV9vc19yZWFkX3BjaV9jb25maWd1cmF0aW9uKHBjaV9pZCwgcGNpX3JlZ2lzdGVyLAotCQkJCQkJCXZhbHVlLCBiaXRfd2lkdGgpOworCQkJCQkJCSZ2YWx1ZTMyLCBiaXRfd2lkdGgpOworCQkqdmFsdWUgPSB2YWx1ZTMyOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9XUklURToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9mYW4uYyBiL2RyaXZlcnMvYWNwaS9mYW4uYwppbmRleCA0OGNiNzA1Li5jOGUzY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZmFuLmMKKysrIGIvZHJpdmVycy9hY3BpL2Zhbi5jCkBAIC0yNTYsMjIgKzI1NiwyOCBAQAogCiAJY2RldiA9IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoIkZhbiIsIGRldmljZSwKIAkJCQkJCSZmYW5fY29vbGluZ19vcHMpOwotCWlmIChjZGV2KQorCWlmIChJU19FUlIoY2RldikpIHsKKwkJcmVzdWx0ID0gUFRSX0VSUihjZGV2KTsKKwkJZ290byBlbmQ7CisJfQorCWlmIChjZGV2KSB7CiAJCXByaW50ayhLRVJOX0lORk8gUFJFRklYCiAJCQkiJXMgaXMgcmVnaXN0ZXJlZCBhcyBjb29saW5nX2RldmljZSVkXG4iLAogCQkJZGV2aWNlLT5kZXYuYnVzX2lkLCBjZGV2LT5pZCk7Ci0JZWxzZQotCQlnb3RvIGVuZDsKLQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBjZGV2OwotCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLCAmY2Rldi0+ZGV2aWNlLmtvYmosCi0JCQkJCSJ0aGVybWFsX2Nvb2xpbmciKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwogCi0JcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmNkZXYtPmRldmljZS5rb2JqLCAmZGV2aWNlLT5kZXYua29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2UiKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCQlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBjZGV2OworCQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2aWNlLT5kZXYua29iaiwKKwkJCQkJICAgJmNkZXYtPmRldmljZS5rb2JqLAorCQkJCQkgICAidGhlcm1hbF9jb29saW5nIik7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCisJCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZjZGV2LT5kZXZpY2Uua29iaiwKKwkJCQkJICAgJmRldmljZS0+ZGV2LmtvYmosCisJCQkJCSAgICJkZXZpY2UiKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQogCiAJcmVzdWx0ID0gYWNwaV9mYW5fYWRkX2ZzKGRldmljZSk7CiAJaWYgKHJlc3VsdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCA4ZWRiYTdiLi5hNDk4YTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC00LDYgKzQsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMCAgICAgICBBbmRyZXcgSGVucm9pZAogICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBbmR5IEdyb3ZlciA8YW5kcmV3Lmdyb3ZlckBpbnRlbC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFBhdWwgRGllZmVuYmF1Z2ggPHBhdWwucy5kaWVmZW5iYXVnaEBpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiAgIEF1dGhvcjogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGxpbnV4LmludGVsLmNvbT4KICAqCiAgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogICoKQEAgLTM3LDE1ICszOSwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+Ci0jaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX09TX1NFUlZJQ0VTCiBBQ1BJX01PRFVMRV9OQU1FKCJvc2wiKTsKQEAgLTkxLDEwICs5Niw2IEBACiAjZGVmaW5lCU9TSV9TVFJJTkdfTEVOR1RIX01BWCA2NAkvKiBhcmJpdHJhcnkgKi8KIHN0YXRpYyBjaGFyIG9zaV9hZGRpdGlvbmFsX3N0cmluZ1tPU0lfU1RSSU5HX0xFTkdUSF9NQVhdOwogCi0jaWZkZWYgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFRfSU5JVFJECi1zdGF0aWMgaW50IGFjcGlfbm9faW5pdHJkX292ZXJyaWRlOwotI2VuZGlmCi0KIC8qCiAgKiAiT2RlIHRvIF9PU0koTGludXgpIgogICoKQEAgLTMyNCw2NyArMzI1LDYgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLSNpZmRlZiBDT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQKLXN0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmFjcGlfZmluZF9kc2R0X2luaXRyZCh2b2lkKQotewotCXN0cnVjdCBmaWxlICpmaXJtd2FyZV9maWxlOwotCW1tX3NlZ21lbnRfdCBvbGRmczsKLQl1bnNpZ25lZCBsb25nIGxlbiwgbGVuMjsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmRzZHRfYnVmZmVyLCAqcmV0ID0gTlVMTDsKLQlzdHJ1Y3Qga3N0YXQgc3RhdDsKLQljaGFyICpyYW1mc19kc2R0X25hbWUgPSAiL0RTRFQuYW1sIjsKLQotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJDaGVja2luZyBpbml0cmFtZnMgZm9yIGN1c3RvbSBEU0RUXG4iKTsKLQotCS8qCi0JICogTmV2ZXIgZG8gdGhpcyBhdCBob21lLCBvbmx5IHRoZSB1c2VyLXNwYWNlIGlzIGFsbG93ZWQgdG8gb3BlbiBhIGZpbGUuCi0JICogVGhlIGNsZWFuIHdheSB3b3VsZCBiZSB0byB1c2UgdGhlIGZpcm13YXJlIGxvYWRlci4KLQkgKiBCdXQgdGhpcyBjb2RlIG11c3QgYmUgcnVuIGJlZm9yZSB0aGVyZSBpcyBhbnkgdXNlcnNwYWNlIGF2YWlsYWJsZS4KLQkgKiBBIHN0YXRpYy9pbml0IGZpcm13YXJlIGluZnJhc3RydWN0dXJlIGRvZXNuJ3QgZXhpc3QgeWV0Li4uCi0JICovCi0JaWYgKHZmc19zdGF0KHJhbWZzX2RzZHRfbmFtZSwgJnN0YXQpIDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWxlbiA9IHN0YXQuc2l6ZTsKLQkvKiBjaGVjayBlc3BlY2lhbGx5IGFnYWluc3QgZW1wdHkgZmlsZXMgKi8KLQlpZiAobGVuIDw9IDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkOiBEU0RUIG9ubHkgJWx1IGJ5dGVzLlxuIiwgbGVuKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlmaXJtd2FyZV9maWxlID0gZmlscF9vcGVuKHJhbWZzX2RzZHRfbmFtZSwgT19SRE9OTFksIDApOwotCWlmIChJU19FUlIoZmlybXdhcmVfZmlsZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkIHRvIG9wZW4gJXMuXG4iLCByYW1mc19kc2R0X25hbWUpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWRzZHRfYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwotCWlmICghZHNkdF9idWZmZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkIHRvIGFsbG9jYXRlICVsdSBieXRlcy5cbiIsIGxlbik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JbGVuMiA9IHZmc19yZWFkKGZpcm13YXJlX2ZpbGUsIChjaGFyIF9fdXNlciAqKWRzZHRfYnVmZmVyLCBsZW4sCi0JCSZmaXJtd2FyZV9maWxlLT5mX3Bvcyk7Ci0Jc2V0X2ZzKG9sZGZzKTsKLQlpZiAobGVuMiA8IGxlbikgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJGYWlsZWQgdG8gcmVhZCAlbHUgYnl0ZXMgZnJvbSAlcy5cbiIsCi0JCQlsZW4sIHJhbWZzX2RzZHRfbmFtZSk7Ci0JCUFDUElfRlJFRShkc2R0X2J1ZmZlcik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJGb3VuZCAlbHUgYnl0ZSBEU0RUIGluICVzLlxuIiwKLQkJCWxlbiwgcmFtZnNfZHNkdF9uYW1lKTsKLQlyZXQgPSBkc2R0X2J1ZmZlcjsKLWVycjoKLQlmaWxwX2Nsb3NlKGZpcm13YXJlX2ZpbGUsIE5VTEwpOwotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQogYWNwaV9zdGF0dXMKIGFjcGlfb3NfdGFibGVfb3ZlcnJpZGUoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICogZXhpc3RpbmdfdGFibGUsCiAJCSAgICAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiogbmV3X3RhYmxlKQpAQCAtMzk4LDE2ICszMzgsNiBAQAogCWlmIChzdHJuY21wKGV4aXN0aW5nX3RhYmxlLT5zaWduYXR1cmUsICJEU0RUIiwgNCkgPT0gMCkKIAkJKm5ld190YWJsZSA9IChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilBbWxDb2RlOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFRfSU5JVFJECi0JaWYgKChzdHJuY21wKGV4aXN0aW5nX3RhYmxlLT5zaWduYXR1cmUsICJEU0RUIiwgNCkgPT0gMCkgJiYKLQkgICAgIWFjcGlfbm9faW5pdHJkX292ZXJyaWRlKSB7Ci0JCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaW5pdHJkX3RhYmxlOwotCi0JCWluaXRyZF90YWJsZSA9IGFjcGlfZmluZF9kc2R0X2luaXRyZCgpOwotCQlpZiAoaW5pdHJkX3RhYmxlKQotCQkJKm5ld190YWJsZSA9IGluaXRyZF90YWJsZTsKLQl9Ci0jZW5kaWYKIAlpZiAoKm5ld190YWJsZSAhPSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJPdmVycmlkZSBbJTQuNHMtJTguOHNdLCAiCiAJCQkgICAidGhpcyBpcyB1bnNhZmU6IHRhaW50aW5nIGtlcm5lbFxuIiwKQEAgLTQxOCwxNSArMzQ4LDYgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLSNpZmRlZiBDT05GSUdfQUNQSV9DVVNUT01fRFNEVF9JTklUUkQKLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfbm9faW5pdHJkX292ZXJyaWRlX3NldHVwKGNoYXIgKnMpCi17Ci0JYWNwaV9ub19pbml0cmRfb3ZlcnJpZGUgPSAxOwotCXJldHVybiAxOwotfQotX19zZXR1cCgiYWNwaV9ub19pbml0cmRfb3ZlcnJpZGUiLCBhY3BpX25vX2luaXRyZF9vdmVycmlkZV9zZXR1cCk7Ci0jZW5kaWYKLQogc3RhdGljIGlycXJldHVybl90IGFjcGlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAl1MzIgaGFuZGxlZDsKQEAgLTg0OCw3ICs3NjksNiBAQAogewogCXN0cnVjdCBzZW1hcGhvcmUgKnNlbSA9IE5VTEw7CiAKLQogCXNlbSA9IGFjcGlfb3NfYWxsb2NhdGUoc2l6ZW9mKHN0cnVjdCBzZW1hcGhvcmUpKTsKIAlpZiAoIXNlbSkKIAkJcmV0dXJuIEFFX05PX01FTU9SWTsKQEAgLTg3NSwxMiArNzk1LDEyIEBACiB7CiAJc3RydWN0IHNlbWFwaG9yZSAqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUgKiloYW5kbGU7CiAKLQogCWlmICghc2VtKQogCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsICJEZWxldGluZyBzZW1hcGhvcmVbJXBdLlxuIiwgaGFuZGxlKSk7CiAKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnNlbS0+d2FpdF9saXN0KSk7CiAJa2ZyZWUoc2VtKTsKIAlzZW0gPSBOVUxMOwogCkBAIC04ODgsMjEgKzgwOCwxNSBAQAogfQogCiAvKgotICogVE9ETzogVGhlIGtlcm5lbCBkb2Vzbid0IGhhdmUgYSAnZG93bl90aW1lb3V0JyBmdW5jdGlvbiAtLSBoYWQgdG8KLSAqIGltcHJvdmlzZS4gIFRoZSBwcm9jZXNzIGlzIHRvIHNsZWVwIGZvciBvbmUgc2NoZWR1bGVyIHF1YW50dW0KLSAqIHVudGlsIHRoZSBzZW1hcGhvcmUgYmVjb21lcyBhdmFpbGFibGUuICBEb3duc2lkZSBpcyB0aGF0IHRoaXMKLSAqIG1heSByZXN1bHQgaW4gc3RhcnZhdGlvbiBmb3IgdGltZW91dC1iYXNlZCB3YWl0cyB3aGVuIHRoZXJlJ3MKLSAqIGxvdHMgb2Ygc2VtYXBob3JlIGFjdGl2aXR5LgotICoKICAqIFRPRE86IFN1cHBvcnQgZm9yIHVuaXRzID4gMT8KICAqLwogYWNwaV9zdGF0dXMgYWNwaV9vc193YWl0X3NlbWFwaG9yZShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiB1bml0cywgdTE2IHRpbWVvdXQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IHNlbWFwaG9yZSAqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUgKiloYW5kbGU7CisJbG9uZyBqaWZmaWVzOwogCWludCByZXQgPSAwOwogCi0KIAlpZiAoIXNlbSB8fCAodW5pdHMgPCAxKSkKIAkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKQEAgLTkxMiw1OCArODI2LDE0IEBACiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwgIldhaXRpbmcgZm9yIHNlbWFwaG9yZVslcHwlZHwlZF1cbiIsCiAJCQkgIGhhbmRsZSwgdW5pdHMsIHRpbWVvdXQpKTsKIAotCS8qCi0JICogVGhpcyBjYW4gYmUgY2FsbGVkIGR1cmluZyByZXN1bWUgd2l0aCBpbnRlcnJ1cHRzIG9mZi4KLQkgKiBMaWtlIGJvb3QtdGltZSwgd2Ugc2hvdWxkIGJlIHNpbmdsZSB0aHJlYWRlZCBhbmQgd2lsbAotCSAqIGFsd2F5cyBnZXQgdGhlIGxvY2sgaWYgd2UgdHJ5IC0tIHRpbWVvdXQgb3Igbm90LgotCSAqIElmIHRoaXMgZG9lc24ndCBzdWNjZWVkLCB0aGVuIHdlIHdpbGwgb29wcyBjb3VydGVzeSBvZgotCSAqIG1pZ2h0X3NsZWVwKCkgaW4gZG93bigpLgotCSAqLwotCWlmICghZG93bl90cnlsb2NrKHNlbSkpCi0JCXJldHVybiBBRV9PSzsKLQotCXN3aXRjaCAodGltZW91dCkgewotCQkvKgotCQkgKiBObyBXYWl0OgotCQkgKiAtLS0tLS0tLQotCQkgKiBBIHplcm8gdGltZW91dCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRuJ3Qgd2FpdCAtIGp1c3QKLQkJICogYWNxdWlyZSB0aGUgc2VtYXBob3JlIGlmIGF2YWlsYWJsZSBvdGhlcndpc2UgcmV0dXJuIEFFX1RJTUUKLQkJICogKGEuay5hLiAnd291bGQgYmxvY2snKS4KLQkJICovCi0JY2FzZSAwOgotCQlpZiAoZG93bl90cnlsb2NrKHNlbSkpCi0JCQlzdGF0dXMgPSBBRV9USU1FOwotCQlicmVhazsKLQotCQkvKgotCQkgKiBXYWl0IEluZGVmaW5pdGVseToKLQkJICogLS0tLS0tLS0tLS0tLS0tLS0tCi0JCSAqLwotCWNhc2UgQUNQSV9XQUlUX0ZPUkVWRVI6Ci0JCWRvd24oc2VtKTsKLQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogV2FpdCB3LyBUaW1lb3V0OgotCQkgKiAtLS0tLS0tLS0tLS0tLS0tCi0JCSAqLwotCWRlZmF1bHQ6Ci0JCS8vIFRPRE86IEEgYmV0dGVyIHRpbWVvdXQgYWxnb3JpdGhtPwotCQl7Ci0JCQlpbnQgaSA9IDA7Ci0JCQlzdGF0aWMgY29uc3QgaW50IHF1YW50dW1fbXMgPSAxMDAwIC8gSFo7Ci0KLQkJCXJldCA9IGRvd25fdHJ5bG9jayhzZW0pOwotCQkJZm9yIChpID0gdGltZW91dDsgKGkgPiAwICYmIHJldCAhPSAwKTsgaSAtPSBxdWFudHVtX21zKSB7Ci0JCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOwotCQkJCXJldCA9IGRvd25fdHJ5bG9jayhzZW0pOwotCQkJfQotCi0JCQlpZiAocmV0ICE9IDApCi0JCQkJc3RhdHVzID0gQUVfVElNRTsKLQkJfQotCQlicmVhazsKLQl9CisJaWYgKHRpbWVvdXQgPT0gQUNQSV9XQUlUX0ZPUkVWRVIpCisJCWppZmZpZXMgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwllbHNlCisJCWppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQorCXJldCA9IGRvd25fdGltZW91dChzZW0sIGppZmZpZXMpOworCWlmIChyZXQpCisJCXN0YXR1cyA9IEFFX1RJTUU7CiAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwKQEAgLTk4Niw3ICs4NTYsNiBAQAogewogCXN0cnVjdCBzZW1hcGhvcmUgKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopaGFuZGxlOwogCi0KIAlpZiAoIXNlbSB8fCAodW5pdHMgPCAxKSkKIAkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKQEAgLTEyMzcsNyArMTEwNiw3IEBACiAKIAlpZiAoY2xhc2gpIHsKIAkJaWYgKGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgIT0gRU5GT1JDRV9SRVNPVVJDRVNfTk8pIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzQUNQSTogJXMgcmVzb3VyY2UgJXMgWzB4JWxseC0weCVsbHhdIgorCQkJcHJpbnRrKCIlc0FDUEk6ICVzIHJlc291cmNlICVzIFsweCVsbHgtMHglbGx4XSIKIAkJCSAgICAgICAiIGNvbmZsaWN0cyB3aXRoIEFDUEkgcmVnaW9uICVzIgogCQkJICAgICAgICIgWzB4JWxseC0weCVsbHhdXG4iLAogCQkJICAgICAgIGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPT0gRU5GT1JDRV9SRVNPVVJDRVNfTEFYCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwppbmRleCA3ZjE5ODU5Li44OTAyMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqLwogCiAKKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC03Niw2ICs3NywxMDEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzMgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBtZWRpb25fbWQ5NTgwW10gPSB7CisJeworCQkuaWRlbnQgPSAiTWVkaW9uIE1EOTU4MC1GIGxhcHRvcCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUVESU9OTkIiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQTU1NSIpLAorCQl9LAorCX0sCisJeyB9Cit9OworCisvKiBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0NCAqLworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGRlbGxfb3B0aXBsZXhbXSA9IHsKKwl7CisJCS5pZGVudCA9ICJEZWxsIE9wdGlwbGV4IEdYMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBDb21wdXRlciBDb3Jwb3JhdGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJPcHRpUGxleCBHWDEgNjAwUysiKSwKKwkJfSwKKwl9LAorCXsgfQorfTsKKworLyogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTM4ICovCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgaHBfdDU3MTBbXSA9IHsKKwl7CisJCS5pZGVudCA9ICJIUCB0NTcxMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgImhwIHQ1MDAwIHNlcmllcyIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMDk4Q2giKSwKKwkJfSwKKwl9LAorCXsgfQorfTsKKworc3RydWN0IHBydF9xdWlyayB7CisJc3RydWN0IGRtaV9zeXN0ZW1faWQJKnN5c3RlbTsKKwl1bnNpZ25lZCBpbnQJCXNlZ21lbnQ7CisJdW5zaWduZWQgaW50CQlidXM7CisJdW5zaWduZWQgaW50CQlkZXZpY2U7CisJdW5zaWduZWQgY2hhcgkJcGluOworCWNoYXIJCQkqc291cmNlOwkvKiBhY2NvcmRpbmcgdG8gQklPUyAqLworCWNoYXIJCQkqYWN0dWFsX3NvdXJjZTsKK307CisKKy8qCisgKiBUaGVzZSBzeXN0ZW1zIGhhdmUgaW5jb3JyZWN0IF9QUlQgZW50cmllcy4gIFRoZSBCSU9TIGNsYWltcyB0aGUgUENJCisgKiBpbnRlcnJ1cHQgYXQgdGhlIGxpc3RlZCBzZWdtZW50L2J1cy9kZXZpY2UvcGluIGlzIGNvbm5lY3RlZCB0byB0aGUgZmlyc3QKKyAqIGxpbmsgZGV2aWNlLCBidXQgaXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBzZWNvbmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHJ0X3F1aXJrIHBydF9xdWlya3NbXSA9IHsKKwl7IG1lZGlvbl9tZDk1ODAsIDAsIDAsIDksICdBJywKKwkJIlxcX1NCXy5QQ0kwLklTQV8uTE5LQSIsCisJCSJcXF9TQl8uUENJMC5JU0FfLkxOS0IifSwKKwl7IGRlbGxfb3B0aXBsZXgsIDAsIDAsIDB4ZCwgJ0EnLAorCQkiXFxfU0JfLkxOS0IiLAorCQkiXFxfU0JfLkxOS0EifSwKKwl7IGhwX3Q1NzEwLCAwLCAwLCAxLCAnQScsCisJCSJcXF9TQl8uUENJMC5MTksxIiwKKwkJIlxcX1NCXy5QQ0kwLkxOSzMifSwKK307CisKK3N0YXRpYyB2b2lkCitkb19wcnRfZml4dXBzKHN0cnVjdCBhY3BpX3BydF9lbnRyeSAqZW50cnksIHN0cnVjdCBhY3BpX3BjaV9yb3V0aW5nX3RhYmxlICpwcnQpCit7CisJaW50IGk7CisJc3RydWN0IHBydF9xdWlyayAqcXVpcms7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcnRfcXVpcmtzKTsgaSsrKSB7CisJCXF1aXJrID0gJnBydF9xdWlya3NbaV07CisKKwkJLyogQWxsIGN1cnJlbnQgcXVpcmtzIGludm9sdmUgbGluayBkZXZpY2VzLCBub3QgR1NJcyAqLworCQlpZiAoIXBydC0+c291cmNlKQorCQkJY29udGludWU7CisKKwkJaWYgKGRtaV9jaGVja19zeXN0ZW0ocXVpcmstPnN5c3RlbSkgJiYKKwkJICAgIGVudHJ5LT5pZC5zZWdtZW50ID09IHF1aXJrLT5zZWdtZW50ICYmCisJCSAgICBlbnRyeS0+aWQuYnVzID09IHF1aXJrLT5idXMgJiYKKwkJICAgIGVudHJ5LT5pZC5kZXZpY2UgPT0gcXVpcmstPmRldmljZSAmJgorCQkgICAgZW50cnktPnBpbiArICdBJyA9PSBxdWlyay0+cGluICYmCisJCSAgICAhc3RyY21wKHBydC0+c291cmNlLCBxdWlyay0+c291cmNlKSAmJgorCQkgICAgc3RybGVuKHBydC0+c291cmNlKSA+PSBzdHJsZW4ocXVpcmstPmFjdHVhbF9zb3VyY2UpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiZmlybXdhcmUgcmVwb3J0cyAiCisJCQkJIiUwNHg6JTAyeDolMDJ4WyVjXSBjb25uZWN0ZWQgdG8gJXM7ICIKKwkJCQkiY2hhbmdpbmcgdG8gJXNcbiIsCisJCQkJZW50cnktPmlkLnNlZ21lbnQsIGVudHJ5LT5pZC5idXMsCisJCQkJZW50cnktPmlkLmRldmljZSwgJ0EnICsgZW50cnktPnBpbiwKKwkJCQlwcnQtPnNvdXJjZSwgcXVpcmstPmFjdHVhbF9zb3VyY2UpOworCQkJc3RyY3B5KHBydC0+c291cmNlLCBxdWlyay0+YWN0dWFsX3NvdXJjZSk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQKIGFjcGlfcGNpX2lycV9hZGRfZW50cnkoYWNwaV9oYW5kbGUgaGFuZGxlLAogCQkgICAgICAgaW50IHNlZ21lbnQsIGludCBidXMsIHN0cnVjdCBhY3BpX3BjaV9yb3V0aW5nX3RhYmxlICpwcnQpCkBAIC05Niw2ICsxOTIsOCBAQAogCWVudHJ5LT5pZC5mdW5jdGlvbiA9IHBydC0+YWRkcmVzcyAmIDB4RkZGRjsKIAllbnRyeS0+cGluID0gcHJ0LT5waW47CiAKKwlkb19wcnRfZml4dXBzKGVudHJ5LCBwcnQpOworCiAJLyoKIAkgKiBUeXBlIDE6IER5bmFtaWMKIAkgKiAtLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggZjE0ZmYxZi4uYzNmZWQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCQl9CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9wY2lfcm9vdF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhY3BpX3BjaV9yb290X2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqcm9vdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDc1Y2NmNWQuLmE4MjViNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC02NzAsMjEgKzY3MCwyNiBAQAogCiAJcHItPmNkZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKCJQcm9jZXNzb3IiLCBkZXZpY2UsCiAJCQkJCQkmcHJvY2Vzc29yX2Nvb2xpbmdfb3BzKTsKLQlpZiAocHItPmNkZXYpCisJaWYgKElTX0VSUihwci0+Y2RldikpIHsKKwkJcmVzdWx0ID0gUFRSX0VSUihwci0+Y2Rldik7CisJCWdvdG8gZW5kOworCX0KKwlpZiAocHItPmNkZXYpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVgKIAkJCSIlcyBpcyByZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCiAJCQlkZXZpY2UtPmRldi5idXNfaWQsIHByLT5jZGV2LT5pZCk7Ci0JZWxzZQotCQlnb3RvIGVuZDsKIAotCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLCAmcHItPmNkZXYtPmRldmljZS5rb2JqLAotCQkJCQkidGhlcm1hbF9jb29saW5nIik7Ci0JaWYgKHJlc3VsdCkKLQkJcmV0dXJuIHJlc3VsdDsKLQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmcHItPmNkZXYtPmRldmljZS5rb2JqLCAmZGV2aWNlLT5kZXYua29iaiwKLQkJCQkJImRldmljZSIpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7CisJCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLAorCQkJCQkgICAmcHItPmNkZXYtPmRldmljZS5rb2JqLAorCQkJCQkgICAidGhlcm1hbF9jb29saW5nIik7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfbGluaygmcHItPmNkZXYtPmRldmljZS5rb2JqLAorCQkJCQkgICAmZGV2aWNlLT5kZXYua29iaiwKKwkJCQkJICAgImRldmljZSIpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CiAKIAlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKHN1cHBvcnRzIiwKQEAgLTgwOSwxMyArODE0LDE1IEBACiAKIAlhY3BpX3Byb2Nlc3Nvcl9yZW1vdmVfZnMoZGV2aWNlKTsKIAotCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXZpY2UtPmRldi5rb2JqLCAidGhlcm1hbF9jb29saW5nIik7Ci0Jc3lzZnNfcmVtb3ZlX2xpbmsoJnByLT5jZGV2LT5kZXZpY2Uua29iaiwgImRldmljZSIpOwotCXRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3Rlcihwci0+Y2Rldik7Ci0JcHItPmNkZXYgPSBOVUxMOworCWlmIChwci0+Y2RldikgeworCQlzeXNmc19yZW1vdmVfbGluaygmZGV2aWNlLT5kZXYua29iaiwgInRoZXJtYWxfY29vbGluZyIpOworCQlzeXNmc19yZW1vdmVfbGluaygmcHItPmNkZXYtPmRldmljZS5rb2JqLCAiZGV2aWNlIik7CisJCXRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3Rlcihwci0+Y2Rldik7CisJCXByLT5jZGV2ID0gTlVMTDsKKwl9CiAKIAlwcm9jZXNzb3JzW3ByLT5pZF0gPSBOVUxMOwotCisJcHJvY2Vzc29yX2RldmljZV9hcnJheVtwci0+aWRdID0gTlVMTDsKIAlrZnJlZShwcik7CiAKIAlyZXR1cm4gMDsKQEAgLTgyNiw4ICs4MzMsNiBAQAogICogCUFjcGkgcHJvY2Vzc29yIGhvdHBsdWcgc3VwcG9ydCAJCQkJICAgICAgIAkgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgaXNfcHJvY2Vzc29yX3ByZXNlbnQoYWNwaV9oYW5kbGUgaGFuZGxlKTsKLQogc3RhdGljIGludCBpc19wcm9jZXNzb3JfcHJlc2VudChhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtODM1LDE3ICs4NDAsMTkgQEAKIAogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKLQkvKgotCSAqIGlmIGEgcHJvY2Vzc29yIG9iamVjdCBkb2VzIG5vdCBoYXZlIGFuIF9TVEEgb2JqZWN0LAotCSAqIE9TUE0gYXNzdW1lcyB0aGF0IHRoZSBwcm9jZXNzb3IgaXMgcHJlc2VudC4KLQkgKi8KLQlpZiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkKLQkJcmV0dXJuIDE7CiAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgKHN0YSAmIEFDUElfU1RBX0RFVklDRV9QUkVTRU5UKSkKIAkJcmV0dXJuIDE7CiAKLQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiUHJvY2Vzc29yIERldmljZSBpcyBub3QgcHJlc2VudCIpKTsKKwkvKgorCSAqIF9TVEEgaXMgbWFuZGF0b3J5IGZvciBhIHByb2Nlc3NvciB0aGF0IHN1cHBvcnRzIGhvdCBwbHVnCisJICovCisJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCQkiUHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgaG90IHBsdWdcbiIpKTsKKwllbHNlCisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIlByb2Nlc3NvciBEZXZpY2UgaXMgbm90IHByZXNlbnQiKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4MSw4ICs4ODgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotYWNwaV9wcm9jZXNzb3JfaG90cGx1Z19ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBfX3JlZiBhY3BpX3Byb2Nlc3Nvcl9ob3RwbHVnX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJCQl1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CkBAIC04OTIsOSArODk5LDEwIEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQUNQSV9OT1RJRllfQlVTX0NIRUNLOgogCWNhc2UgQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLOgotCQlwcmludGsoIlByb2Nlc3NvciBkcml2ZXIgcmVjZWl2ZWQgJXMgZXZlbnRcbiIsCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJIlByb2Nlc3NvciBkcml2ZXIgcmVjZWl2ZWQgJXMgZXZlbnRcbiIsCiAJCSAgICAgICAoZXZlbnQgPT0gQUNQSV9OT1RJRllfQlVTX0NIRUNLKSA/Ci0JCSAgICAgICAiQUNQSV9OT1RJRllfQlVTX0NIRUNLIiA6ICJBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0siKTsKKwkJICAgICAgICJBQ1BJX05PVElGWV9CVVNfQ0hFQ0siIDogIkFDUElfTk9USUZZX0RFVklDRV9DSEVDSyIpKTsKIAogCQlpZiAoIWlzX3Byb2Nlc3Nvcl9wcmVzZW50KGhhbmRsZSkpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggOTgwZTFjMy4uNzg4ZGE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTIxNiw4ICsyMTYsMTAgQEAKIAkgKiB0ZXN0IE5FRURfUkVTQ0hFRDoKIAkgKi8KIAlzbXBfbWIoKTsKLQlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJc2FmZV9oYWx0KCk7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJfQogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CiB9CiAKQEAgLTM2NCw3ICszNjYsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZCAoQ09ORklHX0dFTkVSSUNfVElNRSkgJiYgZGVmaW5lZCAoQ09ORklHX1g4Nl9UU0MpCisjaWYgZGVmaW5lZCAoQ09ORklHX0dFTkVSSUNfVElNRSkgJiYgZGVmaW5lZCAoQ09ORklHX1g4NikKIHN0YXRpYyBpbnQgdHNjX2hhbHRzX2luX2MoaW50IHN0YXRlKQogewogCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CkBAIC00MjEsNyArNDIzLDkgQEAKIAkJZWxzZQogCQkJYWNwaV9zYWZlX2hhbHQoKTsKIAotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWlmIChpcnFzX2Rpc2FibGVkKCkpCisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKIAkJcmV0dXJuOwogCX0KIApAQCAtNTMwLDcgKzUzNCw5IEBACiAJCSAqICAgICAgIHNrZXcgb3RoZXJ3aXNlLgogCQkgKi8KIAkJc2xlZXBfdGlja3MgPSAweEZGRkZGRkZGOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWlmIChpcnFzX2Rpc2FibGVkKCkpCisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfU1RBVEVfQzI6CkBAIC01NDQsNyArNTUwLDcgQEAKIAkJLyogR2V0IGVuZCB0aW1lICh0aWNrcykgKi8KIAkJdDIgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CiAKLSNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2X1RTQykKKyNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2KQogCQkvKiBUU0MgaGFsdHMgaW4gQzIsIHNvIG5vdGlmeSB1c2VycyAqLwogCQlpZiAodHNjX2hhbHRzX2luX2MoQUNQSV9TVEFURV9DMikpCiAJCQltYXJrX3RzY191bnN0YWJsZSgicG9zc2libGUgVFNDIGhhbHQgaW4gQzIiKTsKQEAgLTYwOSw3ICs2MTUsNyBAQAogCQkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDApOwogCQl9CiAKLSNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2X1RTQykKKyNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2KQogCQkvKiBUU0MgaGFsdHMgaW4gQzMsIHNvIG5vdGlmeSB1c2VycyAqLwogCQlpZiAodHNjX2hhbHRzX2luX2MoQUNQSV9TVEFURV9DMykpCiAJCQltYXJrX3RzY191bnN0YWJsZSgiVFNDIGhhbHRzIGluIEMzIik7CkBAIC0xNDgxLDcgKzE0ODcsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhY3BpX3VubGF6eV90bGIoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkvKgogCSAqIE11c3QgYmUgZG9uZSBiZWZvcmUgYnVzbWFzdGVyIGRpc2FibGUgYXMgd2UgbWlnaHQgbmVlZCB0bwogCSAqIGFjY2VzcyBIUEVUICEKQEAgLTE1MDAsNyArMTUwNSw3IEBACiAJYWNwaV9pZGxlX2RvX2VudHJ5KGN4KTsKIAl0MiA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKIAotI2lmIGRlZmluZWQgKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQgKENPTkZJR19YODZfVFNDKQorI2lmIGRlZmluZWQgKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQgKENPTkZJR19YODYpCiAJLyogVFNDIGNvdWxkIGhhbHQgaW4gaWRsZSwgc28gbm90aWZ5IHVzZXJzICovCiAJaWYgKHRzY19oYWx0c19pbl9jKGN4LT50eXBlKSkKIAkJbWFya190c2NfdW5zdGFibGUoIlRTQyBoYWx0cyBpbiBpZGxlIik7OwpAQCAtMTU3MSw2ICsxNTc2LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJYWNwaV91bmxhenlfdGxiKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKIAkvKiBUZWxsIHRoZSBzY2hlZHVsZXIgdGhhdCB3ZSBhcmUgZ29pbmcgZGVlcC1pZGxlOiAqLwogCXNjaGVkX2Nsb2NrX2lkbGVfc2xlZXBfZXZlbnQoKTsKIAkvKgpAQCAtMTYxNCw3ICsxNjIxLDcgQEAKIAkJc3Bpbl91bmxvY2soJmMzX2xvY2spOwogCX0KIAotI2lmIGRlZmluZWQgKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQgKENPTkZJR19YODZfVFNDKQorI2lmIGRlZmluZWQgKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQgKENPTkZJR19YODYpCiAJLyogVFNDIGNvdWxkIGhhbHQgaW4gaWRsZSwgc28gbm90aWZ5IHVzZXJzICovCiAJaWYgKHRzY19oYWx0c19pbl9jKEFDUElfU1RBVEVfQzMpKQogCQltYXJrX3RzY191bnN0YWJsZSgiVFNDIGhhbHRzIGluIGlkbGUiKTsKQEAgLTE2ODYsNyArMTY5Myw5IEBACiAJCXN3aXRjaCAoY3gtPnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9TVEFURV9DMToKIAkJCXN0YXRlLT5mbGFncyB8PSBDUFVJRExFX0ZMQUdfU0hBTExPVzsKLQkJCXN0YXRlLT5mbGFncyB8PSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRDsKKwkJCWlmIChjeC0+ZW50cnlfbWV0aG9kID09IEFDUElfQ1NUQVRFX0ZGSCkKKwkJCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQ7CisKIAkJCXN0YXRlLT5lbnRlciA9IGFjcGlfaWRsZV9lbnRlcl9jMTsKIAkJCWRldi0+c2FmZV9zdGF0ZSA9IHN0YXRlOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCmluZGV4IDFiOGU1OTIuLjBiYmEzYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCkBAIC04MzgsMTAgKzgzOCwxMCBAQAogCSAqIE1pZ3JhdGUgdGFzayB0byB0aGUgY3B1IHBvaW50ZWQgYnkgcHIuCiAJICovCiAJc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KHByLT5pZCkpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShwci0+aWQpKTsKIAlyZXQgPSBwci0+dGhyb3R0bGluZy5hY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZyhwcik7CiAJLyogcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgKi8KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNhdmVkX21hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZzYXZlZF9tYXNrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCSAqIGl0IGNhbiBiZSBjYWxsZWQgb25seSBmb3IgdGhlIGNwdSBwb2ludGVkIGJ5IHByLgogCSAqLwogCWlmIChwX3Rocm90dGxpbmctPnNoYXJlZF90eXBlID09IERPTUFJTl9DT09SRF9UWVBFX1NXX0FOWSkgewotCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KHByLT5pZCkpOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUocHItPmlkKSk7CiAJCXJldCA9IHBfdGhyb3R0bGluZy0+YWNwaV9wcm9jZXNzb3Jfc2V0X3Rocm90dGxpbmcocHIsCiAJCQkJCQl0X3N0YXRlLnRhcmdldF9zdGF0ZSk7CiAJfSBlbHNlIHsKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQl0X3N0YXRlLmNwdSA9IGk7Ci0JCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGkpKTsKKwkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShpKSk7CiAJCQlyZXQgPSBtYXRjaF9wci0+dGhyb3R0bGluZy4KIAkJCQlhY3BpX3Byb2Nlc3Nvcl9zZXRfdGhyb3R0bGluZygKIAkJCQltYXRjaF9wciwgdF9zdGF0ZS50YXJnZXRfc3RhdGUpOwpAQCAtMTA3NCw3ICsxMDc0LDcgQEAKIAkJCQkJCQkmdF9zdGF0ZSk7CiAJfQogCS8qIHJlc3RvcmUgdGhlIHByZXZpb3VzIHN0YXRlICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBzYXZlZF9tYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmc2F2ZWRfbWFzayk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nic2hjLmMgYi9kcml2ZXJzL2FjcGkvc2JzaGMuYwppbmRleCBhMmNmMzAwLi5iY2YyYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2JzaGMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzaGMuYwpAQCAtMTMwLDcgKzEzMCw2IEBACiAJCWdvdG8gZW5kOwogCX0KIAlzbWJfaGNfd3JpdGUoaGMsIEFDUElfU01CX0NPTU1BTkQsIGNvbW1hbmQpOwotCXNtYl9oY193cml0ZShoYywgQUNQSV9TTUJfQ09NTUFORCwgY29tbWFuZCk7CiAJaWYgKCEocHJvdG9jb2wgJiAweDAxKSkgewogCQlzbWJfaGNfd3JpdGUoaGMsIEFDUElfU01CX0JMT0NLX0NPVU5ULCBsZW5ndGgpOwogCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCAzZmFjMDExLi5lNmNlMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTM5LDIwICszOSwyNiBAQAogCQkJICAgaW50IHNpemUpCiB7CiAJaW50IGxlbjsKKwlpbnQgY291bnQ7CiAKLQlpZiAoIWFjcGlfZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkKKwlpZiAoIWFjcGlfZGV2LT5mbGFncy5oYXJkd2FyZV9pZCAmJiAhYWNwaV9kZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWxlbiA9IHNucHJpbnRmKG1vZGFsaWFzLCBzaXplLCAiYWNwaTolczoiLAotCQkgICAgICAgYWNwaV9kZXYtPnBucC5oYXJkd2FyZV9pZCk7Ci0JaWYgKGxlbiA8IDAgfHwgbGVuID49IHNpemUpCi0JCXJldHVybiAtRUlOVkFMOworCWxlbiA9IHNucHJpbnRmKG1vZGFsaWFzLCBzaXplLCAiYWNwaToiKTsKIAlzaXplIC09IGxlbjsKIAorCWlmIChhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpIHsKKwkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCisJCQkJIGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOworCQlpZiAoY291bnQgPCAwIHx8IGNvdW50ID49IHNpemUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuICs9IGNvdW50OworCQlzaXplIC09IGNvdW50OworCX0KKwogCWlmIChhY3BpX2Rldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKIAkJc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZF9saXN0ICpjaWRfbGlzdDsKIAkJaW50IGk7Ci0JCWludCBjb3VudDsKIAogCQljaWRfbGlzdCA9IGFjcGlfZGV2LT5wbnAuY2lkX2xpc3Q7CiAJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewpAQCAtNjA5LDcgKzYxNSw4IEBACiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX0VKRCIsIE5VTEwsICZidWZmZXIpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQlvYmogPSBidWZmZXIucG9pbnRlcjsKLQkJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsIG9iai0+c3RyaW5nLnBvaW50ZXIsIGVqZCk7CisJCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShBQ1BJX1JPT1RfT0JKRUNULCBvYmotPnN0cmluZy5wb2ludGVyLAorCQkJCQkgZWpkKTsKIAkJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwpAQCAtOTY2LDcgKzk3Myw3IEBACiAJY2FzZSBBQ1BJX0JVU19UWVBFX0RFVklDRToKIAkJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICIlczogRXJyb3IgcmVhZGluZyBkZXZpY2UgaW5mb1xuIiwgX19GVU5DVElPTl9fKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiVzOiBFcnJvciByZWFkaW5nIGRldmljZSBpbmZvXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9tYWluLmMKaW5kZXggMjkzYTFjYi4uNzExODNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jCkBAIC0yNiwyMSArMjYsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgdTMyIGFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKLXN0YXRpYyBib29sIGFjcGlfc2xlZXBfZmluaXNoX3dha2VfdXA7Ci0KLS8qCi0gKiBBQ1BJIDIuMCBhbmQgbGF0ZXIgd2FudCB1cyB0byBleGVjdXRlIF9QVFMgYWZ0ZXIgc3VzcGVuZGluZyBkZXZpY2VzLCBzbyB3ZQotICogYWxsb3cgdGhlIHVzZXIgdG8gcmVxdWVzdCB0aGF0IGJlaGF2aW9yIGJ5IHVzaW5nIHRoZSAnYWNwaV9uZXdfcHRzX29yZGVyaW5nJwotICoga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gdGhhdCBjYXVzZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSB0byBiZSBzZXQuCi0gKi8KLXN0YXRpYyBib29sIG5ld19wdHNfb3JkZXJpbmc7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfbmV3X3B0c19vcmRlcmluZyhjaGFyICpzdHIpCi17Ci0JbmV3X3B0c19vcmRlcmluZyA9IHRydWU7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJhY3BpX25ld19wdHNfb3JkZXJpbmciLCBhY3BpX25ld19wdHNfb3JkZXJpbmcpOwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgYWNwaV9zbGVlcF9wcmVwYXJlKHUzMiBhY3BpX3N0YXRlKQpAQCAtOTEsMTQgKzc2LDYgQEAKIAogCWlmIChzbGVlcF9zdGF0ZXNbYWNwaV9zdGF0ZV0pIHsKIAkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBhY3BpX3N0YXRlOwotCQlpZiAobmV3X3B0c19vcmRlcmluZykKLQkJCXJldHVybiAwOwotCi0JCWVycm9yID0gYWNwaV9zbGVlcF9wcmVwYXJlKGFjcGlfc3RhdGUpOwotCQlpZiAoZXJyb3IpCi0JCQlhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IEFDUElfU1RBVEVfUzA7Ci0JCWVsc2UKLQkJCWFjcGlfc2xlZXBfZmluaXNoX3dha2VfdXAgPSB0cnVlOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQUNQSSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgc3RhdGU6ICVkXG4iLAogCQkJcG1fc3RhdGUpOwpAQCAtMTE2LDE0ICs5MywxMSBAQAogCiBzdGF0aWMgaW50IGFjcGlfcG1fcHJlcGFyZSh2b2lkKQogewotCWlmIChuZXdfcHRzX29yZGVyaW5nKSB7Ci0JCWludCBlcnJvciA9IGFjcGlfc2xlZXBfcHJlcGFyZShhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSk7CisJaW50IGVycm9yID0gYWNwaV9zbGVlcF9wcmVwYXJlKGFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlKTsKIAotCQlpZiAoZXJyb3IpIHsKLQkJCWFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKLQkJCXJldHVybiBlcnJvcjsKLQkJfQotCQlhY3BpX3NsZWVwX2ZpbmlzaF93YWtlX3VwID0gdHJ1ZTsKKwlpZiAoZXJyb3IpIHsKKwkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBBQ1BJX1NUQVRFX1MwOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJcmV0dXJuIEFDUElfU1VDQ0VTUyhhY3BpX2h3X2Rpc2FibGVfYWxsX2dwZXMoKSkgPyAwIDogLUVGQVVMVDsKQEAgLTIxMiw3ICsxODYsNiBAQAogCWFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgMCk7CiAKIAlhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IEFDUElfU1RBVEVfUzA7Ci0JYWNwaV9zbGVlcF9maW5pc2hfd2FrZV91cCA9IGZhbHNlOwogCiAjaWZkZWYgQ09ORklHX1g4NgogCWlmIChpbml0XzgyNTlBX2FmdGVyX1MxKSB7CkBAIC0yMjksMTEgKzIwMiwxMCBAQAogc3RhdGljIHZvaWQgYWNwaV9wbV9lbmQodm9pZCkKIHsKIAkvKgotCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGluIGNhc2UgYWNwaV9wbV9maW5pc2goKSBpcyBub3QgY2FsbGVkIGRpcmVjdGx5Ci0JICogZHVyaW5nIGEgZmFpbGluZyB0cmFuc2l0aW9uIHRvIGEgc2xlZXAgc3RhdGUuCisJICogVGhpcyBpcyBuZWNlc3NhcnkgaW4gY2FzZSBhY3BpX3BtX2ZpbmlzaCgpIGlzIG5vdCBjYWxsZWQgZHVyaW5nIGEKKwkgKiBmYWlsaW5nIHRyYW5zaXRpb24gdG8gYSBzbGVlcCBzdGF0ZS4KIAkgKi8KLQlpZiAoYWNwaV9zbGVlcF9maW5pc2hfd2FrZV91cCkKLQkJYWNwaV9wbV9maW5pc2goKTsKKwlhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IEFDUElfU1RBVEVfUzA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wbV9zdGF0ZV92YWxpZChzdXNwZW5kX3N0YXRlX3QgcG1fc3RhdGUpCkBAIC0yODUsMzEgKzI1NywxOCBAQAogI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgogc3RhdGljIGludCBhY3BpX2hpYmVybmF0aW9uX2JlZ2luKHZvaWQpCiB7Ci0JaW50IGVycm9yOwotCiAJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBBQ1BJX1NUQVRFX1M0OwotCWlmIChuZXdfcHRzX29yZGVyaW5nKQotCQlyZXR1cm4gMDsKIAotCWVycm9yID0gYWNwaV9zbGVlcF9wcmVwYXJlKEFDUElfU1RBVEVfUzQpOwotCWlmIChlcnJvcikKLQkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBBQ1BJX1NUQVRFX1MwOwotCWVsc2UKLQkJYWNwaV9zbGVlcF9maW5pc2hfd2FrZV91cCA9IHRydWU7Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9oaWJlcm5hdGlvbl9wcmVwYXJlKHZvaWQpCiB7Ci0JaWYgKG5ld19wdHNfb3JkZXJpbmcpIHsKLQkJaW50IGVycm9yID0gYWNwaV9zbGVlcF9wcmVwYXJlKEFDUElfU1RBVEVfUzQpOworCWludCBlcnJvciA9IGFjcGlfc2xlZXBfcHJlcGFyZShBQ1BJX1NUQVRFX1M0KTsKIAotCQlpZiAoZXJyb3IpIHsKLQkJCWFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKLQkJCXJldHVybiBlcnJvcjsKLQkJfQotCQlhY3BpX3NsZWVwX2ZpbmlzaF93YWtlX3VwID0gdHJ1ZTsKKwlpZiAoZXJyb3IpIHsKKwkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUgPSBBQ1BJX1NUQVRFX1MwOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJcmV0dXJuIEFDUElfU1VDQ0VTUyhhY3BpX2h3X2Rpc2FibGVfYWxsX2dwZXMoKSkgPyAwIDogLUVGQVVMVDsKQEAgLTM1MywxNyArMzEyLDE1IEBACiAJYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvcigoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSAwKTsKIAogCWFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKLQlhY3BpX3NsZWVwX2ZpbmlzaF93YWtlX3VwID0gZmFsc2U7CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfaGliZXJuYXRpb25fZW5kKHZvaWQpCiB7CiAJLyoKIAkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIGFjcGlfaGliZXJuYXRpb25fZmluaXNoKCkgaXMgbm90IGNhbGxlZAotCSAqIGRpcmVjdGx5IGR1cmluZyBhIGZhaWxpbmcgdHJhbnNpdGlvbiB0byB0aGUgc2xlZXAgc3RhdGUuCisJICogZHVyaW5nIGEgZmFpbGluZyB0cmFuc2l0aW9uIHRvIHRoZSBzbGVlcCBzdGF0ZS4KIAkgKi8KLQlpZiAoYWNwaV9zbGVlcF9maW5pc2hfd2FrZV91cCkKLQkJYWNwaV9oaWJlcm5hdGlvbl9maW5pc2goKTsKKwlhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IEFDUElfU1RBVEVfUzA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9oaWJlcm5hdGlvbl9wcmVfcmVzdG9yZSh2b2lkKQpAQCAtNTA0LDcgKzQ2MSw3IEBACiBzdGF0aWMgdm9pZCBhY3BpX3Bvd2VyX29mZih2b2lkKQogewogCS8qIGFjcGlfc2xlZXBfcHJlcGFyZShBQ1BJX1NUQVRFX1M1KSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkICovCi0JcHJpbnRrKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKCIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2UoQUNQSV9TVEFURV9TNSk7CiAJYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZShBQ1BJX1NUQVRFX1M1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCA1NWNmNGMwLi40NzQ5ZjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zMTksNyArMzE5LDcgQEAKIAkJZ290byBmYWlsOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7Ci0JCWNoYXIgYnVmZmVyWzEwXTsKKwkJY2hhciBidWZmZXJbMTJdOwogCQljaGFyICpuYW1lOwogCiAJCWlmIChpIDwgbnVtX2dwZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwppbmRleCA4ZDRiNzliLi4xYmNlY2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKQEAgLTg3OSw2ICs4NzksOCBAQAogfQogCiAvKiBzeXMgSS9GIGZvciBnZW5lcmljIHRoZXJtYWwgc3lzZnMgc3VwcG9ydCAqLworI2RlZmluZSBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKHQpICh0ICogMTAwIC0gMjczMjAwKQorCiBzdGF0aWMgaW50IHRoZXJtYWxfZ2V0X3RlbXAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWwsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IHRoZXJtYWwtPmRldmRhdGE7CkBAIC04ODYsNyArODg4LDcgQEAKIAlpZiAoIXR6KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgS0VMVklOX1RPX0NFTFNJVVModHotPnRlbXBlcmF0dXJlKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKHR6LT50ZW1wZXJhdHVyZSkpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciBlbmFibGVkW10gPSAia2VybmVsIjsKQEAgLTk4MCwyMSArOTgyLDIxIEBACiAKIAlpZiAodHotPnRyaXBzLmNyaXRpY2FsLmZsYWdzLnZhbGlkKSB7CiAJCWlmICghdHJpcCkKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgS0VMVklOX1RPX0NFTFNJVVMoCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIEtFTFZJTl9UT19NSUxMSUNFTFNJVVMoCiAJCQkJdHotPnRyaXBzLmNyaXRpY2FsLnRlbXBlcmF0dXJlKSk7CiAJCXRyaXAtLTsKIAl9CiAKIAlpZiAodHotPnRyaXBzLmhvdC5mbGFncy52YWxpZCkgewogCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIEtFTFZJTl9UT19DRUxTSVVTKAorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAogCQkJCQl0ei0+dHJpcHMuaG90LnRlbXBlcmF0dXJlKSk7CiAJCXRyaXAtLTsKIAl9CiAKIAlpZiAodHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MudmFsaWQpIHsKIAkJaWYgKCF0cmlwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBLRUxWSU5fVE9fQ0VMU0lVUygKKwkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgS0VMVklOX1RPX01JTExJQ0VMU0lVUygKIAkJCQkJdHotPnRyaXBzLnBhc3NpdmUudGVtcGVyYXR1cmUpKTsKIAkJdHJpcC0tOwogCX0KQEAgLTEwMDIsNyArMTAwNCw3IEBACiAJZm9yIChpID0gMDsgaSA8IEFDUElfVEhFUk1BTF9NQVhfQUNUSVZFICYmCiAJCXR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MudmFsaWQ7IGkrKykgewogCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIEtFTFZJTl9UT19DRUxTSVVTKAorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAogCQkJCQl0ei0+dHJpcHMuYWN0aXZlW2ldLnRlbXBlcmF0dXJlKSk7CiAJCXRyaXAtLTsKIAl9CkBAIC0xMTIzLDcgKzExMjUsNyBAQAogCQkJdHotPnRyaXBzLmFjdGl2ZVtpXS5mbGFncy52YWxpZDsgaSsrLCB0cmlwcysrKTsKIAl0ei0+dGhlcm1hbF96b25lID0gdGhlcm1hbF96b25lX2RldmljZV9yZWdpc3RlcigiQUNQSSB0aGVybWFsIHpvbmUiLAogCQkJCQl0cmlwcywgdHosICZhY3BpX3RoZXJtYWxfem9uZV9vcHMpOwotCWlmICghdHotPnRoZXJtYWxfem9uZSkKKwlpZiAoSVNfRVJSKHR6LT50aGVybWFsX3pvbmUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZ0ei0+ZGV2aWNlLT5kZXYua29iaiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90b3NoaWJhX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS90b3NoaWJhX2FjcGkuYwppbmRleCA5ZThjMjBjLi4wYTQzYzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdG9zaGliYV9hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL3Rvc2hpYmFfYWNwaS5jCkBAIC05OSw2ICs5OSwxMyBAQAogI2RlZmluZSBIQ0lfVklERU9fT1VUX0NSVAkJMHgyCiAjZGVmaW5lIEhDSV9WSURFT19PVVRfVFYJCTB4NAogCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHRvc2hpYmFfZGV2aWNlX2lkc1tdID0geworCXsiVE9TNjIwMCIsIDB9LAorCXsiVE9TMTkwMCIsIDB9LAorCXsiIiwgMH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCB0b3NoaWJhX2RldmljZV9pZHMpOworCiAvKiB1dGlsaXR5CiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlYnVnLmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVidWcuYwppbmRleCBjN2UxMjhlLi43MzYxMjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVidWcuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVidWcuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgKiBSRVRVUk46ICAgICAgVXBkYXRlZCBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiBuYW1lCiAgKgogICogREVTQ1JJUFRJT046IFJlbW92ZSB0aGUgIkFjcGkiIHByZWZpeCBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lLCBpZiBwcmVzZW50LgotICogICAgICAgICAgICAgIFRoaXMgYWxsb3dzIGNvbXBpbGVyIG1hY3JvcyBzdWNoIGFzIF9fRlVOQ1RJT05fXyB0byBiZSB1c2VkCisgKiAgICAgICAgICAgICAgVGhpcyBhbGxvd3MgY29tcGlsZXIgbWFjcm9zIHN1Y2ggYXMgX19mdW5jX18gdG8gYmUgdXNlZAogICogICAgICAgICAgICAgIHdpdGggbm8gY2hhbmdlIHRvIHRoZSBkZWJ1ZyBvdXRwdXQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYwppbmRleCA3NmVlNzY2Li5lMDhiM2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0b2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG9iamVjdC5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkgKiBlbGVtZW50IC0tIHdoaWNoIGlzIGxlZ2FsKQogCSAqLwogCWlmICghaW50ZXJuYWxfb2JqZWN0KSB7Ci0JCSpvYmpfbGVuZ3RoID0gMDsKKwkJKm9ial9sZW5ndGggPSBzaXplb2YodW5pb24gYWNwaV9vYmplY3QpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwppbmRleCAzNGYxNTc1Li40NGVhNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwpAQCAtMzYsMTYgKzM2LDIwIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBFdmFsdWF0aW9uIEhlbHBlcnMKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgdm9pZAorYWNwaV91dGlsX2V2YWxfZXJyb3IoYWNwaV9oYW5kbGUgaCwgYWNwaV9zdHJpbmcgcCwgYWNwaV9zdGF0dXMgcykKK3sKICNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAotI2RlZmluZSBhY3BpX3V0aWxfZXZhbF9lcnJvcihoLHAscykge1wKLQljaGFyIHByZWZpeFs4MF0gPSB7J1wwJ307XAotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7c2l6ZW9mKHByZWZpeCksIHByZWZpeH07XAotCWFjcGlfZ2V0X25hbWUoaCwgQUNQSV9GVUxMX1BBVEhOQU1FLCAmYnVmZmVyKTtcCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRXZhbHVhdGUgWyVzLiVzXTogJXNcbiIsXAotCQkoY2hhciAqKSBwcmVmaXgsIHAsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzKSkpOyB9CisJY2hhciBwcmVmaXhbODBdID0geydcMCd9OworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7c2l6ZW9mKHByZWZpeCksIHByZWZpeH07CisJYWNwaV9nZXRfbmFtZShoLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZidWZmZXIpOworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkV2YWx1YXRlIFslcy4lc106ICVzXG4iLAorCQkoY2hhciAqKSBwcmVmaXgsIHAsIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzKSkpOwogI2Vsc2UKLSNkZWZpbmUgYWNwaV91dGlsX2V2YWxfZXJyb3IoaCxwLHMpCisJcmV0dXJuOwogI2VuZGlmCit9CisKIGFjcGlfc3RhdHVzCiBhY3BpX2V4dHJhY3RfcGFja2FnZSh1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZSwKIAkJICAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKmZvcm1hdCwgc3RydWN0IGFjcGlfYnVmZmVyICpidWZmZXIpCkBAIC00MDMsNiArNDA3LDEyIEBACiAJCQlicmVhazsKIAkJfQogCisJCWlmICghZWxlbWVudC0+cmVmZXJlbmNlLmhhbmRsZSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkludmFsaWQgcmVmZXJlbmNlIGluIgorCQkJICAgICAgICIgcGFja2FnZSAlc1xuIiwgcGF0aG5hbWUpOworCQkJc3RhdHVzID0gQUVfTlVMTF9FTlRSWTsKKwkJCWJyZWFrOworCQl9CiAJCS8qIEdldCB0aGUgIGFjcGlfaGFuZGxlLiAqLwogCiAJCWxpc3QtPmhhbmRsZXNbaV0gPSBlbGVtZW50LT5yZWZlcmVuY2UuaGFuZGxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCA3ZjcxNGZhLi45ODBhNzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNzMxLDYgKzczMSw5IEBACiAKIAkJZGV2aWNlLT5jZGV2ID0gdGhlcm1hbF9jb29saW5nX2RldmljZV9yZWdpc3RlcigiTENEIiwKIAkJCQkJZGV2aWNlLT5kZXYsICZ2aWRlb19jb29saW5nX29wcyk7CisJCWlmIChJU19FUlIoZGV2aWNlLT5jZGV2KSkKKwkJCXJldHVybjsKKwogCQlpZiAoZGV2aWNlLT5jZGV2KSB7CiAJCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWAogCQkJCSIlcyBpcyByZWdpc3RlcmVkIGFzIGNvb2xpbmdfZGV2aWNlJWRcbiIsCkBAIC04MDQsNDAgKzgwNywxMSBAQAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19jaGVjayhzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IC1FTk9FTlQ7Ci0JbG9uZyBkZXZpY2VfaWQ7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworCiAKIAlpZiAoIXZpZGVvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRldmljZSA9IHZpZGVvLT5kZXZpY2U7Ci0KLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2aWNlLT5oYW5kbGUsICJfQURSIiwgTlVMTCwgJmRldmljZV9pZCk7Ci0KLQlpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFdlIG5lZWQgdG8gYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgX0FEUiByZWZlcnMgdG8gYQotCSAgIFBDSSBkZXZpY2Ugb3Igbm90LiBUaGVyZSdzIG5vIHRlcnJpYmx5IGdvb2Qgd2F5IHRvIGRvIHRoaXMsCi0JICAgc28gdGhlIGJlc3Qgd2UgY2FuIGhvcGUgZm9yIGlzIHRvIGFzc3VtZSB0aGF0IHRoZXJlJ2xsIG5ldmVyCi0JICAgYmUgYSB2aWRlbyBkZXZpY2UgaW4gdGhlIGhvc3QgYnJpZGdlICovCi0JaWYgKGRldmljZV9pZCA+PSAweDEwMDAwKSB7Ci0JCS8qIEl0IGxvb2tzIGxpa2UgYSBQQ0kgZGV2aWNlLiBEb2VzIGl0IGV4aXN0PyAqLwotCQlkZXYgPSBhY3BpX2dldF9waHlzaWNhbF9kZXZpY2UoZGV2aWNlLT5oYW5kbGUpOwotCX0gZWxzZSB7Ci0JCS8qIEl0IGRvZXNuJ3QgbG9vayBsaWtlIGEgUENJIGRldmljZS4gRG9lcyBpdHMgcGFyZW50Ci0JCSAgIGV4aXN0PyAqLwotCQlhY3BpX2hhbmRsZSBwaGFuZGxlOwotCQlpZiAoYWNwaV9nZXRfcGFyZW50KGRldmljZS0+aGFuZGxlLCAmcGhhbmRsZSkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJZGV2ID0gYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlKHBoYW5kbGUpOwotCX0KLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JcHV0X2RldmljZShkZXYpOwotCiAJLyogU2luY2UgdGhlcmUgaXMgbm8gSElELCBDSUQgYW5kIHNvIG9uIGZvciBWR0EgZHJpdmVyLCB3ZSBoYXZlCiAJICogdG8gY2hlY2sgd2VsbCBrbm93biByZXF1aXJlZCBub2Rlcy4KIAkgKi8KQEAgLTExOTgsNyArMTE3Miw3IEBACiAJaWYgKCF2aWRlbykKIAkJZ290byBlbmQ7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiUGxlYXNlIGltcGxlbWVudCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiUGxlYXNlIGltcGxlbWVudCAlc1xuIiwgX19mdW5jX18pOwogCXNlcV9wcmludGYoc2VxLCAiPFRPRE8+XG4iKTsKIAogICAgICAgZW5kOgpAQCAtMTM2MywzNyArMTMzNyw4IEBACiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCWxvbmcgZGV2aWNlX2lkOwotCWludCBzdGF0dXM7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbzsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0KLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2aWNlLT5oYW5kbGUsICJfQURSIiwgTlVMTCwgJmRldmljZV9pZCk7Ci0KLQlpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIFdlIG5lZWQgdG8gYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgX0FEUiByZWZlcnMgdG8gYQotCSAgIFBDSSBkZXZpY2Ugb3Igbm90LiBUaGVyZSdzIG5vIHRlcnJpYmx5IGdvb2Qgd2F5IHRvIGRvIHRoaXMsCi0JICAgc28gdGhlIGJlc3Qgd2UgY2FuIGhvcGUgZm9yIGlzIHRvIGFzc3VtZSB0aGF0IHRoZXJlJ2xsIG5ldmVyCi0JICAgYmUgYSB2aWRlbyBkZXZpY2UgaW4gdGhlIGhvc3QgYnJpZGdlICovCi0JaWYgKGRldmljZV9pZCA+PSAweDEwMDAwKSB7Ci0JCS8qIEl0IGxvb2tzIGxpa2UgYSBQQ0kgZGV2aWNlLiBEb2VzIGl0IGV4aXN0PyAqLwotCQlkZXYgPSBhY3BpX2dldF9waHlzaWNhbF9kZXZpY2UoZGV2aWNlLT5oYW5kbGUpOwotCX0gZWxzZSB7Ci0JCS8qIEl0IGRvZXNuJ3QgbG9vayBsaWtlIGEgUENJIGRldmljZS4gRG9lcyBpdHMgcGFyZW50Ci0JCSAgIGV4aXN0PyAqLwotCQlhY3BpX2hhbmRsZSBwaGFuZGxlOwotCQlpZiAoYWNwaV9nZXRfcGFyZW50KGRldmljZS0+aGFuZGxlLCAmcGhhbmRsZSkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJZGV2ID0gYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlKHBoYW5kbGUpOwotCX0KLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JcHV0X2RldmljZShkZXYpOwotCiAKIAogCXZpZGVvID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3dtaS5jIGIvZHJpdmVycy9hY3BpL3dtaS5jCmluZGV4IGVmYWNjOWYuLmMzM2IxYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS93bWkuYworKysgYi9kcml2ZXJzL2FjcGkvd21pLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogewogCXN0cnVjdCBndWlkX2Jsb2NrICpibG9jayA9IE5VTEw7CiAJc3RydWN0IHdtaV9ibG9jayAqd2Jsb2NrID0gTlVMTDsKLQlhY3BpX2hhbmRsZSBoYW5kbGU7CisJYWNwaV9oYW5kbGUgaGFuZGxlLCB3Y19oYW5kbGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzLCB3Y19zdGF0dXMgPSBBRV9FUlJPUjsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dCwgd2NfaW5wdXQ7CiAJdW5pb24gYWNwaV9vYmplY3Qgd2NfcGFyYW1zWzFdLCB3cV9wYXJhbXNbMV07CkBAIC0zMzgsOCArMzM4LDEwIEBACiAJCSAqIGV4cGVuc2l2ZSwgYnV0IGhhdmUgbm8gY29ycmVzcG9uZGluZyBXQ3h4IG1ldGhvZC4gU28gd2UKIAkJICogc2hvdWxkIG5vdCBmYWlsIGlmIHRoaXMgaGFwcGVucy4KIAkJICovCi0JCXdjX3N0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgd2NfbWV0aG9kLAotCQkJJndjX2lucHV0LCBOVUxMKTsKKwkJd2Nfc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgd2NfbWV0aG9kLCAmd2NfaGFuZGxlKTsKKwkJaWYgKEFDUElfU1VDQ0VTUyh3Y19zdGF0dXMpKQorCQkJd2Nfc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCB3Y19tZXRob2QsCisJCQkJJndjX2lucHV0LCBOVUxMKTsKIAl9CiAKIAlzdHJjcHkobWV0aG9kLCAiV1EiKTsKQEAgLTM1MSw3ICszNTMsNyBAQAogCSAqIElmIEFDUElfV01JX0VYUEVOU0lWRSwgY2FsbCB0aGUgcmVsZXZhbnQgV0N4eCBtZXRob2QsIGV2ZW4gaWYKIAkgKiB0aGUgV1F4eCBtZXRob2QgZmFpbGVkIC0gd2Ugc2hvdWxkIGRpc2FibGUgY29sbGVjdGlvbiBhbnl3YXkuCiAJICovCi0JaWYgKChibG9jay0+ZmxhZ3MgJiBBQ1BJX1dNSV9FWFBFTlNJVkUpICYmIHdjX3N0YXR1cykgeworCWlmICgoYmxvY2stPmZsYWdzICYgQUNQSV9XTUlfRVhQRU5TSVZFKSAmJiBBQ1BJX1NVQ0NFU1Mod2Nfc3RhdHVzKSkgewogCQl3Y19wYXJhbXNbMF0uaW50ZWdlci52YWx1ZSA9IDA7CiAJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwKIAkJd2NfbWV0aG9kLCAmd2NfaW5wdXQsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggYmE4ZjdmNC4uMjkyYWE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC0yOCw4ICsyOCw5IEBACiAgICAgICAgZGVmYXVsdCBuCiAKIGNvbmZpZyBBVEFfQUNQSQotCWJvb2wKKwlib29sICJBVEEgQUNQSSBTdXBwb3J0IgogCWRlcGVuZHMgb24gQUNQSSAmJiBQQ0kKKwlzZWxlY3QgQUNQSV9ET0NLCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBVEEtcmVsYXRlZCBBQ1BJIG9iamVjdHMuCkBAIC00MCw2ICs0MSwxMyBAQAogCSAgWW91IGNhbiBkaXNhYmxlIHRoaXMgYXQga2VybmVsIGJvb3QgdGltZSBieSB1c2luZyB0aGUKIAkgIG9wdGlvbiBsaWJhdGEubm9hY3BpPTEKIAorY29uZmlnIFNBVEFfUE1QCisJYm9vbCAiU0FUQSBQb3J0IE11bHRpcGxpZXIgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFNBVEEgUG9ydCBNdWx0aXBsaWVycworCSAgKHRoZSBTQVRBIHZlcnNpb24gb2YgYW4gZXRoZXJuZXQgaHViLCBvciBTQVMgZXhwYW5kZXIpLgorCiBjb25maWcgU0FUQV9BSENJCiAJdHJpc3RhdGUgIkFIQ0kgU0FUQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC00OCw2ICs1Niw0MyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgU0FUQV9TSUwyNAorCXRyaXN0YXRlICJTaWxpY29uIEltYWdlIDMxMjQvMzEzMiBTQVRBIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIFNpbGljb24gSW1hZ2UgMzEyNC8zMTMyIFNlcmlhbCBBVEEuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBTQVRBX0ZTTAorCXRyaXN0YXRlICJGcmVlc2NhbGUgMy4wR2JwcyBTQVRBIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGU0xfU09DCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUgMy4wR2JwcyBTQVRBIGNvbnRyb2xsZXIuCisJICBJdCBjYW4gYmUgZm91bmQgb24gTVBDODM3eCBhbmQgTVBDODMxNS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEFUQV9TRkYKKwlib29sICJBVEEgU0ZGIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBBVEEgY29udHJvbGxlcnMgd2l0aCBTRkYKKwkgIGNvbXBsaWFudCBvciBzaW1pbGFyIHByb2dyYW1taW5nIGludGVyZmFjZS4KKworCSAgU0ZGIGlzIHRoZSBsZWdhY3kgSURFIGludGVyZmFjZSB0aGF0IGhhcyBiZWVuIGFyb3VuZCBzaW5jZQorCSAgdGhlIGRhd24gb2YgdGltZS4gIEFsbW9zdCBhbGwgUEFUQSBjb250cm9sbGVycyBoYXZlIGFuCisJICBTRkYgaW50ZXJmYWNlLiAgTWFueSBTQVRBIGNvbnRyb2xsZXJzIGhhdmUgYW4gU0ZGIGludGVyZmFjZQorCSAgd2hlbiBjb25maWd1cmVkIGludG8gYSBsZWdhY3kgY29tcGF0aWJpbGl0eSBtb2RlLgorCisJICBGb3IgdXNlcnMgd2l0aCBleGNsdXNpdmVseSBtb2Rlcm4gY29udHJvbGxlcnMgbGlrZSBBSENJLAorCSAgU2lsaWNvbiBJbWFnZSAzMTI0LCBvciBNYXJ2ZWxsIDY0NDAsIHlvdSBtYXkgY2hvb3NlIHRvCisJICBkaXNhYmxlIHRoaXMgdW5lZWRlZCBTRkYgc3VwcG9ydC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworaWYgQVRBX1NGRgorCiBjb25maWcgU0FUQV9TVlcKIAl0cmlzdGF0ZSAiU2VydmVyV29ya3MgRnJvZG8gLyBBcHBsZSBLMiBTQVRBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTEyNCwxNCArMTY5LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFNBVEFfU0lMMjQKLQl0cmlzdGF0ZSAiU2lsaWNvbiBJbWFnZSAzMTI0LzMxMzIgU0FUQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBTaWxpY29uIEltYWdlIDMxMjQvMzEzMiBTZXJpYWwgQVRBLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgU0FUQV9TSVMKIAl0cmlzdGF0ZSAiU2lTIDk2NC85NjUvOTY2LzE4MCBTQVRBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTE4MiwxNSArMjE5LDYgQEAKIAkgIGZpcm13YXJlIGluIHRoZSBCSU9TLiBUaGlzIGRyaXZlciBjYW4gc29tZXRpbWVzIGhhbmRsZQogCSAgb3RoZXJ3aXNlIHVuc3VwcG9ydGVkIGhhcmR3YXJlLgogCi1jb25maWcgU0FUQV9GU0wKLQl0cmlzdGF0ZSAiRnJlZXNjYWxlIDMuMEdicHMgU0FUQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gRlNMX1NPQwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIDMuMEdicHMgU0FUQSBjb250cm9sbGVyLgotCSAgSXQgY2FuIGJlIGZvdW5kIG9uIE1QQzgzN3ggYW5kIE1QQzgzMTUuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBQQVRBX0FMSQogCXRyaXN0YXRlICJBTGkgUEFUQSBzdXBwb3J0IChFeHBlcmltZW50YWwpIgogCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTApAQCAtNTM4LDYgKzU2NiwxNSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgUEFUQV9SQjUwMAorCXRyaXN0YXRlICJSb3V0ZXJCb2FyZCA1MDAgUEFUQSBDb21wYWN0Rmxhc2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1JS1JPVElLX1JCNTAwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUm91dGVyQm9hcmQgNTAwCisJICBQQVRBIENvbXBhY3RGbGFzaCBjb250cm9sbGVyLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgUEFUQV9SWjEwMDAKIAl0cmlzdGF0ZSAiUEMgVGVjaCBSWjEwMDAgUEFUQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC02NjksNCArNzA2LDUgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorZW5kaWYgIyBBVEFfU0ZGCiBlbmRpZiAjIEFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvTWFrZWZpbGUgYi9kcml2ZXJzL2F0YS9NYWtlZmlsZQppbmRleCA3MDE2NTFlLi4xZmJjMmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2F0YS9NYWtlZmlsZQpAQCAtNTUsNiArNTUsNyBAQAogb2JqLSQoQ09ORklHX1BBVEFfUERDX09MRCkJKz0gcGF0YV9wZGMyMDJ4eF9vbGQubwogb2JqLSQoQ09ORklHX1BBVEFfUURJKQkJKz0gcGF0YV9xZGkubwogb2JqLSQoQ09ORklHX1BBVEFfUkFESVNZUykJKz0gcGF0YV9yYWRpc3lzLm8KK29iai0kKENPTkZJR19QQVRBX1JCNTAwKQkrPSBwYXRhX3JiNTAwX2NmLm8KIG9iai0kKENPTkZJR19QQVRBX1JaMTAwMCkJKz0gcGF0YV9yejEwMDAubwogb2JqLSQoQ09ORklHX1BBVEFfU0MxMjAwKQkrPSBwYXRhX3NjMTIwMC5vCiBvYmotJChDT05GSUdfUEFUQV9TRVJWRVJXT1JLUykJKz0gcGF0YV9zZXJ2ZXJ3b3Jrcy5vCkBAIC03Nyw2ICs3OCw3IEBACiAjIFNob3VsZCBiZSBsYXN0IGxpYmF0YSBkcml2ZXIKIG9iai0kKENPTkZJR19QQVRBX0xFR0FDWSkJKz0gcGF0YV9sZWdhY3kubwogCi1saWJhdGEtb2Jqcwk6PSBsaWJhdGEtY29yZS5vIGxpYmF0YS1zY3NpLm8gbGliYXRhLXNmZi5vIGxpYmF0YS1laC5vIFwKLQkJICAgbGliYXRhLXBtcC5vCitsaWJhdGEtb2Jqcwk6PSBsaWJhdGEtY29yZS5vIGxpYmF0YS1zY3NpLm8gbGliYXRhLWVoLm8KK2xpYmF0YS0kKENPTkZJR19BVEFfU0ZGKQkrPSBsaWJhdGEtc2ZmLm8KK2xpYmF0YS0kKENPTkZJR19TQVRBX1BNUCkJKz0gbGliYXRhLXBtcC5vCiBsaWJhdGEtJChDT05GSUdfQVRBX0FDUEkpCSs9IGxpYmF0YS1hY3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCAyOWU3MWJkLi45ODZlMzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC00OSw2ICs0OSwxMCBAQAogI2RlZmluZSBEUlZfTkFNRQkiYWhjaSIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjMuMCIKIAorc3RhdGljIGludCBhaGNpX3NraXBfaG9zdF9yZXNldDsKK21vZHVsZV9wYXJhbV9uYW1lZChza2lwX2hvc3RfcmVzZXQsIGFoY2lfc2tpcF9ob3N0X3Jlc2V0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhza2lwX2hvc3RfcmVzZXQsICJza2lwIGdsb2JhbCBob3N0IHJlc2V0ICgwPWRvbid0IHNraXAsIDE9c2tpcCkiKTsKKwogc3RhdGljIGludCBhaGNpX2VuYWJsZV9hbHBtKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCWVudW0gbGlua19wbSBwb2xpY3kpOwogc3RhdGljIHZvaWQgYWhjaV9kaXNhYmxlX2FscG0oc3RydWN0IGF0YV9wb3J0ICphcCk7CkBAIC01OCw3ICs2Miw2IEBACiAJQUhDSV9NQVhfUE9SVFMJCT0gMzIsCiAJQUhDSV9NQVhfU0cJCT0gMTY4LCAvKiBoYXJkd2FyZSBtYXggaXMgNjRLICovCiAJQUhDSV9ETUFfQk9VTkRBUlkJPSAweGZmZmZmZmZmLAotCUFIQ0lfVVNFX0NMVVNURVJJTkcJPSAxLAogCUFIQ0lfTUFYX0NNRFMJCT0gMzIsCiAJQUhDSV9DTURfU1oJCT0gMzIsCiAJQUhDSV9DTURfU0xPVF9TWgk9IEFIQ0lfTUFYX0NNRFMgKiBBSENJX0NNRF9TWiwKQEAgLTg1LDYgKzg4LDcgQEAKIAlib2FyZF9haGNpX2lnbl9pZmVycgk9IDIsCiAJYm9hcmRfYWhjaV9zYjYwMAk9IDMsCiAJYm9hcmRfYWhjaV9tdgkJPSA0LAorCWJvYXJkX2FoY2lfc2I3MDAJPSA1LAogCiAJLyogZ2xvYmFsIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCiAJSE9TVF9DQVAJCT0gMHgwMCwgLyogaG9zdCBjYXBhYmlsaXRpZXMgKi8KQEAgLTE4NSw2ICsxODksNyBAQAogCUFIQ0lfSEZMQUdfTk9fTVNJCQk9ICgxIDw8IDUpLCAvKiBubyBQQ0kgTVNJICovCiAJQUhDSV9IRkxBR19OT19QTVAJCT0gKDEgPDwgNiksIC8qIG5vIFBNUCAqLwogCUFIQ0lfSEZMQUdfTk9fSE9UUExVRwkJPSAoMSA8PCA3KSwgLyogaWdub3JlIFB4U0VSUi5ESUFHLk4gKi8KKwlBSENJX0hGTEFHX1NFQ1QyNTUJCT0gKDEgPDwgOCksIC8qIG1heCAyNTUgc2VjdG9ycyAqLwogCiAJLyogYXAtPmZsYWdzIGJpdHMgKi8KIApAQCAtMTkyLDcgKzE5Nyw2IEBACiAJCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19ETUEgfAogCQkJCQkgIEFUQV9GTEFHX0FDUElfU0FUQSB8IEFUQV9GTEFHX0FOIHwKIAkJCQkJICBBVEFfRkxBR19JUE0sCi0JQUhDSV9MRkxBR19DT01NT04JCT0gQVRBX0xGTEFHX1NLSVBfRDJIX0JTWSwKIAogCUlDSF9NQVAJCQkJPSAweDkwLCAvKiBJQ0ggTUFQIHJlZ2lzdGVyICovCiB9OwpAQCAtMjM5LDIxICsyNDMsMjcgQEAKIHN0YXRpYyBpbnQgYWhjaV9zY3Jfd3JpdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CiBzdGF0aWMgaW50IGFoY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogc3RhdGljIHVuc2lnbmVkIGludCBhaGNpX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotc3RhdGljIHZvaWQgYWhjaV9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgYm9vbCBhaGNpX3FjX2ZpbGxfcnRmKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIGludCBhaGNpX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBhaGNpX3BvcnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIGFoY2lfdGZfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CiBzdGF0aWMgdm9pZCBhaGNpX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci1zdGF0aWMgdTggYWhjaV9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBhaGNpX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIGFoY2lfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIGFoY2lfcG1wX2F0dGFjaChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIGFoY2lfcG1wX2RldGFjaChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyBpbnQgYWhjaV9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkJICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK3N0YXRpYyBpbnQgYWhjaV9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkJICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK3N0YXRpYyBpbnQgYWhjaV92dDgyNTFfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCQkgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CitzdGF0aWMgaW50IGFoY2lfcDV3ZGhfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCQl1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK3N0YXRpYyB2b2lkIGFoY2lfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcyk7CiBzdGF0aWMgdm9pZCBhaGNpX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1zdGF0aWMgdm9pZCBhaGNpX3Z0ODI1MV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotc3RhdGljIHZvaWQgYWhjaV9wNXdkaF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9wb3N0X2ludGVybmFsX2NtZChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyBpbnQgYWhjaV9wb3J0X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyB2b2lkIGFoY2lfZGV2X2NvbmZpZyhzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWhjaV9maWxsX3NnKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHZvaWQgKmNtZF90YmwpOwogc3RhdGljIHZvaWQgYWhjaV9maWxsX2NtZF9zbG90KHN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAsIHVuc2lnbmVkIGludCB0YWcsCiAJCQkgICAgICAgdTMyIG9wdHMpOwpAQCAtMjYzLDEzMyArMjczLDYwIEBACiBzdGF0aWMgaW50IGFoY2lfcGNpX2RldmljZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqYWhjaV9zaG9zdF9hdHRyc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5LAorc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphaGNpX3Nob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2xpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xpY3ksCiAJTlVMTAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYWhjaV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCUFUQV9OQ1FfU0hUKERSVl9OQU1FKSwKIAkuY2FuX3F1ZXVlCQk9IEFIQ0lfTUFYX0NNRFMgLSAxLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IEFIQ0lfTUFYX1NHLAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBSENJX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCiAJLmRtYV9ib3VuZGFyeQkJPSBBSENJX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogCS5zaG9zdF9hdHRycwkJPSBhaGNpX3Nob3N0X2F0dHJzLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFoY2lfb3BzID0gewotCS5jaGVja19zdGF0dXMJCT0gYWhjaV9jaGVja19zdGF0dXMsCi0JLmNoZWNrX2FsdHN0YXR1cwk9IGFoY2lfY2hlY2tfc3RhdHVzLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9ub29wX2Rldl9zZWxlY3QsCi0KLQkudGZfcmVhZAkJPSBhaGNpX3RmX3JlYWQsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWhjaV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZzYXRhX3BtcF9wb3J0X29wcywKIAogCS5xY19kZWZlcgkJPSBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoLAogCS5xY19wcmVwCQk9IGFoY2lfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gYWhjaV9xY19pc3N1ZSwKLQotCS5pcnFfY2xlYXIJCT0gYWhjaV9pcnFfY2xlYXIsCi0KLQkuc2NyX3JlYWQJCT0gYWhjaV9zY3JfcmVhZCwKLQkuc2NyX3dyaXRlCQk9IGFoY2lfc2NyX3dyaXRlLAorCS5xY19maWxsX3J0ZgkJPSBhaGNpX3FjX2ZpbGxfcnRmLAogCiAJLmZyZWV6ZQkJCT0gYWhjaV9mcmVlemUsCiAJLnRoYXcJCQk9IGFoY2lfdGhhdywKLQorCS5zb2Z0cmVzZXQJCT0gYWhjaV9zb2Z0cmVzZXQsCisJLmhhcmRyZXNldAkJPSBhaGNpX2hhcmRyZXNldCwKKwkucG9zdHJlc2V0CQk9IGFoY2lfcG9zdHJlc2V0LAorCS5wbXBfc29mdHJlc2V0CQk9IGFoY2lfc29mdHJlc2V0LAogCS5lcnJvcl9oYW5kbGVyCQk9IGFoY2lfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBhaGNpX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5kZXZfY29uZmlnCQk9IGFoY2lfZGV2X2NvbmZpZywKIAorCS5zY3JfcmVhZAkJPSBhaGNpX3Njcl9yZWFkLAorCS5zY3Jfd3JpdGUJCT0gYWhjaV9zY3Jfd3JpdGUsCiAJLnBtcF9hdHRhY2gJCT0gYWhjaV9wbXBfYXR0YWNoLAogCS5wbXBfZGV0YWNoCQk9IGFoY2lfcG1wX2RldGFjaCwKIAotI2lmZGVmIENPTkZJR19QTQotCS5wb3J0X3N1c3BlbmQJCT0gYWhjaV9wb3J0X3N1c3BlbmQsCi0JLnBvcnRfcmVzdW1lCQk9IGFoY2lfcG9ydF9yZXN1bWUsCi0jZW5kaWYKIAkuZW5hYmxlX3BtCQk9IGFoY2lfZW5hYmxlX2FscG0sCiAJLmRpc2FibGVfcG0JCT0gYWhjaV9kaXNhYmxlX2FscG0sCi0KLQkucG9ydF9zdGFydAkJPSBhaGNpX3BvcnRfc3RhcnQsCi0JLnBvcnRfc3RvcAkJPSBhaGNpX3BvcnRfc3RvcCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhaGNpX3Z0ODI1MV9vcHMgPSB7Ci0JLmNoZWNrX3N0YXR1cwkJPSBhaGNpX2NoZWNrX3N0YXR1cywKLQkuY2hlY2tfYWx0c3RhdHVzCT0gYWhjaV9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QJCT0gYXRhX25vb3BfZGV2X3NlbGVjdCwKLQotCS50Zl9yZWFkCQk9IGFoY2lfdGZfcmVhZCwKLQotCS5xY19kZWZlcgkJPSBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoLAotCS5xY19wcmVwCQk9IGFoY2lfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYWhjaV9xY19pc3N1ZSwKLQotCS5pcnFfY2xlYXIJCT0gYWhjaV9pcnFfY2xlYXIsCi0KLQkuc2NyX3JlYWQJCT0gYWhjaV9zY3JfcmVhZCwKLQkuc2NyX3dyaXRlCQk9IGFoY2lfc2NyX3dyaXRlLAotCi0JLmZyZWV6ZQkJCT0gYWhjaV9mcmVlemUsCi0JLnRoYXcJCQk9IGFoY2lfdGhhdywKLQotCS5lcnJvcl9oYW5kbGVyCQk9IGFoY2lfdnQ4MjUxX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYWhjaV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5wbXBfYXR0YWNoCQk9IGFoY2lfcG1wX2F0dGFjaCwKLQkucG1wX2RldGFjaAkJPSBhaGNpX3BtcF9kZXRhY2gsCi0KICNpZmRlZiBDT05GSUdfUE0KIAkucG9ydF9zdXNwZW5kCQk9IGFoY2lfcG9ydF9zdXNwZW5kLAogCS5wb3J0X3Jlc3VtZQkJPSBhaGNpX3BvcnRfcmVzdW1lLAogI2VuZGlmCi0KIAkucG9ydF9zdGFydAkJPSBhaGNpX3BvcnRfc3RhcnQsCiAJLnBvcnRfc3RvcAkJPSBhaGNpX3BvcnRfc3RvcCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhaGNpX3A1d2RoX29wcyA9IHsKLQkuY2hlY2tfc3RhdHVzCQk9IGFoY2lfY2hlY2tfc3RhdHVzLAotCS5jaGVja19hbHRzdGF0dXMJPSBhaGNpX2NoZWNrX3N0YXR1cywKLQkuZGV2X3NlbGVjdAkJPSBhdGFfbm9vcF9kZXZfc2VsZWN0LAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFoY2lfdnQ4MjUxX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmFoY2lfb3BzLAorCS5oYXJkcmVzZXQJCT0gYWhjaV92dDgyNTFfaGFyZHJlc2V0LAorfTsKIAotCS50Zl9yZWFkCQk9IGFoY2lfdGZfcmVhZCwKLQotCS5xY19kZWZlcgkJPSBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoLAotCS5xY19wcmVwCQk9IGFoY2lfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYWhjaV9xY19pc3N1ZSwKLQotCS5pcnFfY2xlYXIJCT0gYWhjaV9pcnFfY2xlYXIsCi0KLQkuc2NyX3JlYWQJCT0gYWhjaV9zY3JfcmVhZCwKLQkuc2NyX3dyaXRlCQk9IGFoY2lfc2NyX3dyaXRlLAotCi0JLmZyZWV6ZQkJCT0gYWhjaV9mcmVlemUsCi0JLnRoYXcJCQk9IGFoY2lfdGhhdywKLQotCS5lcnJvcl9oYW5kbGVyCQk9IGFoY2lfcDV3ZGhfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhaGNpX3Bvc3RfaW50ZXJuYWxfY21kLAotCi0JLnBtcF9hdHRhY2gJCT0gYWhjaV9wbXBfYXR0YWNoLAotCS5wbXBfZGV0YWNoCQk9IGFoY2lfcG1wX2RldGFjaCwKLQotI2lmZGVmIENPTkZJR19QTQotCS5wb3J0X3N1c3BlbmQJCT0gYWhjaV9wb3J0X3N1c3BlbmQsCi0JLnBvcnRfcmVzdW1lCQk9IGFoY2lfcG9ydF9yZXN1bWUsCi0jZW5kaWYKLQotCS5wb3J0X3N0YXJ0CQk9IGFoY2lfcG9ydF9zdGFydCwKLQkucG9ydF9zdG9wCQk9IGFoY2lfcG9ydF9zdG9wLAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFoY2lfcDV3ZGhfb3BzID0geworCS5pbmhlcml0cwkJPSAmYWhjaV9vcHMsCisJLmhhcmRyZXNldAkJPSBhaGNpX3A1d2RoX2hhcmRyZXNldCwKIH07CiAKICNkZWZpbmUgQUhDSV9IRkxBR1MoZmxhZ3MpCS5wcml2YXRlX2RhdGEJPSAodm9pZCAqKShmbGFncykKQEAgLTM5OCw3ICszMzUsNiBAQAogCS8qIGJvYXJkX2FoY2kgKi8KIAl7CiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkubGlua19mbGFncwk9IEFIQ0lfTEZMQUdfQ09NTU9OLAogCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLApAQCAtNDA3LDcgKzM0Myw2IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19OQ1EgfCBBSENJX0hGTEFHX05PX1BNUCksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkubGlua19mbGFncwk9IEFIQ0lfTEZMQUdfQ09NTU9OIHwgQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FLAogCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfdnQ4MjUxX29wcywKQEAgLTQxNiw3ICszNTEsNiBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfSUdOX0lSUV9JRl9FUlIpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLmxpbmtfZmxhZ3MJPSBBSENJX0xGTEFHX0NPTU1PTiwKIAkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKQEAgLTQyNCw5ICszNTgsOSBAQAogCS8qIGJvYXJkX2FoY2lfc2I2MDAgKi8KIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMIHwKLQkJCQkgQUhDSV9IRkxBR18zMkJJVF9PTkxZIHwgQUhDSV9IRkxBR19OT19QTVApLAorCQkJCSBBSENJX0hGTEFHXzMyQklUX09OTFkgfAorCQkJCSBBSENJX0hGTEFHX1NFQ1QyNTUgfCBBSENJX0hGTEFHX05PX1BNUCksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkubGlua19mbGFncwk9IEFIQ0lfTEZMQUdfQ09NTU9OLAogCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLApAQCAtNDM3LDcgKzM3MSwxNSBAQAogCQkJCSBBSENJX0hGTEFHX01WX1BBVEEpLAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSwKLQkJLmxpbmtfZmxhZ3MJPSBBSENJX0xGTEFHX0NPTU1PTiwKKwkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCisJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKKwl9LAorCS8qIGJvYXJkX2FoY2lfc2I3MDAgKi8KKwl7CisJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMIHwKKwkJCQkgQUhDSV9IRkxBR19OT19QTVApLAorCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKIAkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKQEAgLTQ4NCwxMiArNDI2LDEyIEBACiAKIAkvKiBBVEkgKi8KIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzgwKSwgYm9hcmRfYWhjaV9zYjYwMCB9LCAvKiBBVEkgU0I2MDAgKi8KLQl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzkwKSwgYm9hcmRfYWhjaV9zYjYwMCB9LCAvKiBBVEkgU0I3MDAvODAwICovCi0JeyBQQ0lfVkRFVklDRShBVEksIDB4NDM5MSksIGJvYXJkX2FoY2lfc2I2MDAgfSwgLyogQVRJIFNCNzAwLzgwMCAqLwotCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTIpLCBib2FyZF9haGNpX3NiNjAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KLQl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzkzKSwgYm9hcmRfYWhjaV9zYjYwMCB9LCAvKiBBVEkgU0I3MDAvODAwICovCi0JeyBQQ0lfVkRFVklDRShBVEksIDB4NDM5NCksIGJvYXJkX2FoY2lfc2I2MDAgfSwgLyogQVRJIFNCNzAwLzgwMCAqLwotCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTUpLCBib2FyZF9haGNpX3NiNjAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzkwKSwgYm9hcmRfYWhjaV9zYjcwMCB9LCAvKiBBVEkgU0I3MDAvODAwICovCisJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM5MSksIGJvYXJkX2FoY2lfc2I3MDAgfSwgLyogQVRJIFNCNzAwLzgwMCAqLworCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTIpLCBib2FyZF9haGNpX3NiNzAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzkzKSwgYm9hcmRfYWhjaV9zYjcwMCB9LCAvKiBBVEkgU0I3MDAvODAwICovCisJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM5NCksIGJvYXJkX2FoY2lfc2I3MDAgfSwgLyogQVRJIFNCNzAwLzgwMCAqLworCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTUpLCBib2FyZF9haGNpX3NiNzAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KIAogCS8qIFZJQSAqLwogCXsgUENJX1ZERVZJQ0UoVklBLCAweDMzNDkpLCBib2FyZF9haGNpX3Z0ODI1MSB9LCAvKiBWSUEgVlQ4MjUxICovCkBAIC01NTIsNiArNDk0LDE4IEBACiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGFiZCksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDc5ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGFiZSksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDc5ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGFiZiksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDc5ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjOCksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjOSksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjYSksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjYiksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjYyksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjZCksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjZSksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJjZiksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJkMCksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJkMSksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJkMiksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MGJkMyksIGJvYXJkX2FoY2kgfSwJCS8qIE1DUDdCICovCiAKIAkvKiBTaVMgKi8KIAl7IFBDSV9WREVWSUNFKFNJLCAweDExODQpLCBib2FyZF9haGNpIH0sIC8qIFNpUyA5NjYgKi8KQEAgLTU2MCw2ICs1MTQsNyBAQAogCiAJLyogTWFydmVsbCAqLwogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2MTQ1KSwgYm9hcmRfYWhjaV9tdiB9LAkvKiA2MTQ1ICovCisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDYxMjEpLCBib2FyZF9haGNpX212IH0sCS8qIDYxMjEgKi8KIAogCS8qIEdlbmVyaWMsIFBDSSBjbGFzcyBjb2RlIGZvciBBSENJICovCiAJeyBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApAQCAtNjM0LDYgKzU4OSw3IEBACiAJdm9pZCBfX2lvbWVtICptbWlvID0gcGNpbV9pb21hcF90YWJsZShwZGV2KVtBSENJX1BDSV9CQVJdOwogCXUzMiBjYXAsIHBvcnRfbWFwOwogCWludCBpOworCWludCBtdjsKIAogCS8qIG1ha2Ugc3VyZSBBSENJIG1vZGUgaXMgZW5hYmxlZCBiZWZvcmUgYWNjZXNzaW5nIENBUCAqLwogCWFoY2lfZW5hYmxlX2FoY2kobW1pbyk7CkBAIC02NTcsNyArNjEzLDcgQEAKIAkJY2FwICY9IH5IT1NUX0NBUF9OQ1E7CiAJfQogCi0JaWYgKChjYXAgJiYgSE9TVF9DQVBfUE1QKSAmJiAoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19OT19QTVApKSB7CisJaWYgKChjYXAgJiBIT1NUX0NBUF9QTVApICYmIChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX1BNUCkpIHsKIAkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsCiAJCQkgICAiY29udHJvbGxlciBjYW4ndCBkbyBQTVAsIHR1cm5pbmcgb2ZmIENBUF9QTVBcbiIpOwogCQljYXAgJj0gfkhPU1RfQ0FQX1BNUDsKQEAgLTY2OSwxMiArNjI1LDE2IEBACiAJICogcHJlc2VuY2UgcmVnaXN0ZXIsIGFzIGJpdCA0IChjb3VudGluZyBmcm9tIDApCiAJICovCiAJaWYgKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTVZfUEFUQSkgeworCQlpZiAocGRldi0+ZGV2aWNlID09IDB4NjEyMSkKKwkJCW12ID0gMHgzOworCQllbHNlCisJCQltdiA9IDB4ZjsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKIAkJCSAgICJNVl9BSENJIEhBQ0s6IHBvcnRfbWFwICV4IC0+ICV4XG4iLAotCQkJICAgaHByaXYtPnBvcnRfbWFwLAotCQkJICAgaHByaXYtPnBvcnRfbWFwICYgMHhmKTsKKwkJCSAgIHBvcnRfbWFwLAorCQkJICAgcG9ydF9tYXAgJiBtdik7CiAKLQkJcG9ydF9tYXAgJj0gMHhmOworCQlwb3J0X21hcCAmPSBtdjsKIAl9CiAKIAkvKiBjcm9zcyBjaGVjayBwb3J0X21hcCBhbmQgY2FwLm5fcG9ydHMgKi8KQEAgLTEwNjEsMjkgKzEwMjEsMzUgQEAKIAlhaGNpX2VuYWJsZV9haGNpKG1taW8pOwogCiAJLyogZ2xvYmFsIGNvbnRyb2xsZXIgcmVzZXQgKi8KLQl0bXAgPSByZWFkbChtbWlvICsgSE9TVF9DVEwpOwotCWlmICgodG1wICYgSE9TVF9SRVNFVCkgPT0gMCkgewotCQl3cml0ZWwodG1wIHwgSE9TVF9SRVNFVCwgbW1pbyArIEhPU1RfQ1RMKTsKLQkJcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsgLyogZmx1c2ggKi8KLQl9CisJaWYgKCFhaGNpX3NraXBfaG9zdF9yZXNldCkgeworCQl0bXAgPSByZWFkbChtbWlvICsgSE9TVF9DVEwpOworCQlpZiAoKHRtcCAmIEhPU1RfUkVTRVQpID09IDApIHsKKwkJCXdyaXRlbCh0bXAgfCBIT1NUX1JFU0VULCBtbWlvICsgSE9TVF9DVEwpOworCQkJcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsgLyogZmx1c2ggKi8KKwkJfQogCi0JLyogcmVzZXQgbXVzdCBjb21wbGV0ZSB3aXRoaW4gMSBzZWNvbmQsIG9yCi0JICogdGhlIGhhcmR3YXJlIHNob3VsZCBiZSBjb25zaWRlcmVkIGZyaWVkLgotCSAqLwotCXNzbGVlcCgxKTsKKwkJLyogcmVzZXQgbXVzdCBjb21wbGV0ZSB3aXRoaW4gMSBzZWNvbmQsIG9yCisJCSAqIHRoZSBoYXJkd2FyZSBzaG91bGQgYmUgY29uc2lkZXJlZCBmcmllZC4KKwkJICovCisJCXNzbGVlcCgxKTsKIAotCXRtcCA9IHJlYWRsKG1taW8gKyBIT1NUX0NUTCk7Ci0JaWYgKHRtcCAmIEhPU1RfUkVTRVQpIHsKLQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgaG9zdC0+ZGV2LAotCQkJICAgImNvbnRyb2xsZXIgcmVzZXQgZmFpbGVkICgweCV4KVxuIiwgdG1wKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCQl0bXAgPSByZWFkbChtbWlvICsgSE9TVF9DVEwpOworCQlpZiAodG1wICYgSE9TVF9SRVNFVCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgaG9zdC0+ZGV2LAorCQkJCSAgICJjb250cm9sbGVyIHJlc2V0IGZhaWxlZCAoMHgleClcbiIsIHRtcCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCi0JLyogdHVybiBvbiBBSENJIG1vZGUgKi8KLQlhaGNpX2VuYWJsZV9haGNpKG1taW8pOworCQkvKiB0dXJuIG9uIEFIQ0kgbW9kZSAqLworCQlhaGNpX2VuYWJsZV9haGNpKG1taW8pOwogCi0JLyogc29tZSByZWdpc3RlcnMgbWlnaHQgYmUgY2xlYXJlZCBvbiByZXNldC4gIHJlc3RvcmUgaW5pdGlhbCB2YWx1ZXMgKi8KLQlhaGNpX3Jlc3RvcmVfaW5pdGlhbF9jb25maWcoaG9zdCk7CisJCS8qIFNvbWUgcmVnaXN0ZXJzIG1pZ2h0IGJlIGNsZWFyZWQgb24gcmVzZXQuICBSZXN0b3JlCisJCSAqIGluaXRpYWwgdmFsdWVzLgorCQkgKi8KKwkJYWhjaV9yZXN0b3JlX2luaXRpYWxfY29uZmlnKGhvc3QpOworCX0gZWxzZQorCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgaG9zdC0+ZGV2LAorCQkJICAgInNraXBwaW5nIGdsb2JhbCBob3N0IHJlc2V0XG4iKTsKIAogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkgewogCQl1MTYgdG1wMTY7CkBAIC0xMTM1LDkgKzExMDEsMTQgQEAKIAlpbnQgaTsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbzsKIAl1MzIgdG1wOworCWludCBtdjsKIAogCWlmIChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX01WX1BBVEEpIHsKLQkJcG9ydF9tbWlvID0gX19haGNpX3BvcnRfYmFzZShob3N0LCA0KTsKKwkJaWYgKHBkZXYtPmRldmljZSA9PSAweDYxMjEpCisJCQltdiA9IDI7CisJCWVsc2UKKwkJCW12ID0gNDsKKwkJcG9ydF9tbWlvID0gX19haGNpX3BvcnRfYmFzZShob3N0LCBtdik7CiAKIAkJd3JpdGVsKDAsIHBvcnRfbW1pbyArIFBPUlRfSVJRX01BU0spOwogCkBAIC0xMTY1LDYgKzExMzYsMTcgQEAKIAlWUFJJTlRLKCJIT1NUX0NUTCAweCV4XG4iLCB0bXApOwogfQogCitzdGF0aWMgdm9pZCBhaGNpX2Rldl9jb25maWcoc3RydWN0IGF0YV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gZGV2LT5saW5rLT5hcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfU0VDVDI1NSkgeworCQlkZXYtPm1heF9zZWN0b3JzID0gMjU1OworCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywKKwkJCSAgICAgICAiU0I2MDAgQUhDSTogbGltaXRpbmcgdG8gMjU1IHNlY3RvcnMgcGVyIGNtZFxuIik7CisJfQorfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGFoY2lfZGV2X2NsYXNzaWZ5KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CkBAIC0xMTk1LDEzICsxMTc3LDE0IEBACiAKIHN0YXRpYyBpbnQgYWhjaV9raWNrX2VuZ2luZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgZm9yY2VfcmVzdGFydCkKIHsKLQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IGFwLT5pb2FkZHIuY21kX2FkZHI7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CiAJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdTggc3RhdHVzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9URkRBVEEpICYgMHhGRjsKIAl1MzIgdG1wOwogCWludCBidXN5LCByYzsKIAogCS8qIGRvIHdlIG5lZWQgdG8ga2ljayB0aGUgcG9ydD8gKi8KLQlidXN5ID0gYWhjaV9jaGVja19zdGF0dXMoYXApICYgKEFUQV9CVVNZIHwgQVRBX0RSUSk7CisJYnVzeSA9IHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9EUlEpOwogCWlmICghYnVzeSAmJiAhZm9yY2VfcmVzdGFydCkKIAkJcmV0dXJuIDA7CiAKQEAgLTEyNjgsMTAgKzEyNTEsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhaGNpX2RvX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCi0JCQkgICAgIGludCBwbXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCitzdGF0aWMgaW50IGFoY2lfY2hlY2tfcmVhZHkoc3RydWN0IGF0YV9saW5rICpsaW5rKQoreworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UobGluay0+YXApOworCXU4IHN0YXR1cyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfVEZEQVRBKSAmIDB4RkY7CisKKwlpZiAoIShzdGF0dXMgJiBBVEFfQlVTWSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFoY2lfc29mdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CisJaW50IHBtcCA9IHNhdGFfc3JzdF9wbXAobGluayk7CiAJY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG5vdywgbXNlY3M7CiAJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKQEAgLTEyNzksMTIgKzEyNzMsNiBAQAogCiAJRFBSSU5USygiRU5URVJcbiIpOwogCi0JaWYgKGF0YV9saW5rX29mZmxpbmUobGluaykpIHsKLQkJRFBSSU5USygiUEhZIHJlcG9ydHMgbm8gZGV2aWNlXG4iKTsKLQkJKmNsYXNzID0gQVRBX0RFVl9OT05FOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKiBwcmVwYXJlIGZvciBTUlNUIChBSENJLTEuMSAxMC40LjEpICovCiAJcmMgPSBhaGNpX2tpY2tfZW5naW5lKGFwLCAxKTsKIAlpZiAocmMgJiYgcmMgIT0gLUVPUE5PVFNVUFApCkBAIC0xMzE0LDEwICsxMzAyLDggQEAKIAl0Zi5jdGwgJj0gfkFUQV9TUlNUOwogCWFoY2lfZXhlY19wb2xsZWRfY21kKGFwLCBwbXAsICZ0ZiwgMCwgMCwgMCk7CiAKLQkvKiB3YWl0IGEgd2hpbGUgYmVmb3JlIGNoZWNraW5nIHN0YXR1cyAqLwotCWF0YV93YWl0X2FmdGVyX3Jlc2V0KGFwLCBkZWFkbGluZSk7Ci0KLQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7CisJLyogd2FpdCBmb3IgbGluayB0byBiZWNvbWUgcmVhZHkgKi8KKwlyYyA9IGF0YV93YWl0X2FmdGVyX3Jlc2V0KGxpbmssIGRlYWRsaW5lLCBhaGNpX2NoZWNrX3JlYWR5KTsKIAkvKiBsaW5rIG9jY3VwaWVkLCAtRU5PREVWIHRvbyBpcyBhbiBlcnJvciAqLwogCWlmIChyYykgewogCQlyZWFzb24gPSAiZGV2aWNlIG5vdCByZWFkeSI7CkBAIC0xMzMzLDI0ICsxMzE5LDE1IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGFoY2lfc29mdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKLQkJCSAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKLXsKLQlpbnQgcG1wID0gMDsKLQotCWlmIChsaW5rLT5hcC0+ZmxhZ3MgJiBBVEFfRkxBR19QTVApCi0JCXBtcCA9IFNBVEFfUE1QX0NUUkxfUE9SVDsKLQotCXJldHVybiBhaGNpX2RvX3NvZnRyZXNldChsaW5rLCBjbGFzcywgcG1wLCBkZWFkbGluZSk7Ci19Ci0KIHN0YXRpYyBpbnQgYWhjaV9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAogCQkJICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogeworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnRpbWluZyA9IHNhdGFfZWhjX2RlYl90aW1pbmcoJmxpbmstPmVoX2NvbnRleHQpOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl1OCAqZDJoX2ZpcyA9IHBwLT5yeF9maXMgKyBSWF9GSVNfRDJIX1JFRzsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOworCWJvb2wgb25saW5lOwogCWludCByYzsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKQEAgLTEzNjIsMTQgKzEzMzksMTMgQEAKIAl0Zi5jb21tYW5kID0gMHg4MDsKIAlhdGFfdGZfdG9fZmlzKCZ0ZiwgMCwgMCwgZDJoX2Zpcyk7CiAKLQlyYyA9IHNhdGFfc3RkX2hhcmRyZXNldChsaW5rLCBjbGFzcywgZGVhZGxpbmUpOworCXJjID0gc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCB0aW1pbmcsIGRlYWRsaW5lLCAmb25saW5lLAorCQkJCSBhaGNpX2NoZWNrX3JlYWR5KTsKIAogCWFoY2lfc3RhcnRfZW5naW5lKGFwKTsKIAotCWlmIChyYyA9PSAwICYmIGF0YV9saW5rX29ubGluZShsaW5rKSkKKwlpZiAob25saW5lKQogCQkqY2xhc3MgPSBhaGNpX2Rldl9jbGFzc2lmeShhcCk7Ci0JaWYgKHJjICE9IC1FQUdBSU4gJiYgKmNsYXNzID09IEFUQV9ERVZfVU5LTk9XTikKLQkJKmNsYXNzID0gQVRBX0RFVl9OT05FOwogCiAJRFBSSU5USygiRVhJVCwgcmM9JWQsIGNsYXNzPSV1XG4iLCByYywgKmNsYXNzKTsKIAlyZXR1cm4gcmM7CkBAIC0xMzc5LDcgKzEzNTUsNyBAQAogCQkJCSB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKLQl1MzIgc2Vycm9yOworCWJvb2wgb25saW5lOwogCWludCByYzsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKQEAgLTEzODcsMTEgKzEzNjMsNyBAQAogCWFoY2lfc3RvcF9lbmdpbmUoYXApOwogCiAJcmMgPSBzYXRhX2xpbmtfaGFyZHJlc2V0KGxpbmssIHNhdGFfZWhjX2RlYl90aW1pbmcoJmxpbmstPmVoX2NvbnRleHQpLAotCQkJCSBkZWFkbGluZSk7Ci0KLQkvKiB2dDgyNTEgbmVlZHMgU0Vycm9yIGNsZWFyZWQgZm9yIHRoZSBwb3J0IHRvIG9wZXJhdGUgKi8KLQlhaGNpX3Njcl9yZWFkKGFwLCBTQ1JfRVJST1IsICZzZXJyb3IpOwotCWFoY2lfc2NyX3dyaXRlKGFwLCBTQ1JfRVJST1IsIHNlcnJvcik7CisJCQkJIGRlYWRsaW5lLCAmb25saW5lLCBOVUxMKTsKIAogCWFoY2lfc3RhcnRfZW5naW5lKGFwKTsKIApAQCAtMTQwMCw3ICsxMzcyLDcgQEAKIAkvKiB2dDgyNTEgZG9lc24ndCBjbGVhciBCU1kgb24gc2lnbmF0dXJlIEZJUyByZWNlcHRpb24sCiAJICogcmVxdWVzdCBmb2xsb3ctdXAgc29mdHJlc2V0LgogCSAqLwotCXJldHVybiByYyA/OiAtRUFHQUlOOworCXJldHVybiBvbmxpbmUgPyAtRUFHQUlOIDogcmM7CiB9CiAKIHN0YXRpYyBpbnQgYWhjaV9wNXdkaF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLApAQCAtMTQxMCw2ICsxMzgyLDcgQEAKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl1OCAqZDJoX2ZpcyA9IHBwLT5yeF9maXMgKyBSWF9GSVNfRDJIX1JFRzsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOworCWJvb2wgb25saW5lOwogCWludCByYzsKIAogCWFoY2lfc3RvcF9lbmdpbmUoYXApOwpAQCAtMTQyMCwxNiArMTM5MywxMCBAQAogCWF0YV90Zl90b19maXMoJnRmLCAwLCAwLCBkMmhfZmlzKTsKIAogCXJjID0gc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCBzYXRhX2VoY19kZWJfdGltaW5nKCZsaW5rLT5laF9jb250ZXh0KSwKLQkJCQkgZGVhZGxpbmUpOworCQkJCSBkZWFkbGluZSwgJm9ubGluZSwgTlVMTCk7CiAKIAlhaGNpX3N0YXJ0X2VuZ2luZShhcCk7CiAKLQlpZiAocmMgfHwgYXRhX2xpbmtfb2ZmbGluZShsaW5rKSkKLQkJcmV0dXJuIHJjOwotCi0JLyogc3BlYyBtYW5kYXRlcyAiPj0gMm1zIiBiZWZvcmUgY2hlY2tpbmcgc3RhdHVzICovCi0JbXNsZWVwKDE1MCk7Ci0KIAkvKiBUaGUgcHNldWRvIGNvbmZpZ3VyYXRpb24gZGV2aWNlIG9uIFNJTUc0NzI2IGF0dGFjaGVkIHRvCiAJICogQVNVUyBQNVctREggRGVsdXhlIGRvZXNuJ3Qgc2VuZCBzaWduYXR1cmUgRklTIGFmdGVyCiAJICogaGFyZHJlc2V0IGlmIG5vIGRldmljZSBpcyBhdHRhY2hlZCB0byB0aGUgZmlyc3QgZG93bnN0cmVhbQpAQCAtMTQ0MywxMSArMTQxMCwxMyBAQAogCSAqIGhhdmUgdG8gYmUgcmVzZXQgYWdhaW4uICBGb3IgbW9zdCBjYXNlcywgdGhpcyBzaG91bGQKIAkgKiBzdWZmaWNlIHdoaWxlIG1ha2luZyBwcm9iaW5nIHNuYXBwaXNoIGVub3VnaC4KIAkgKi8KLQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBqaWZmaWVzICsgMiAqIEhaKTsKLQlpZiAocmMpCi0JCWFoY2lfa2lja19lbmdpbmUoYXAsIDApOwotCi0JcmV0dXJuIDA7CisJaWYgKG9ubGluZSkgeworCQlyYyA9IGF0YV93YWl0X2FmdGVyX3Jlc2V0KGxpbmssIGppZmZpZXMgKyAyICogSFosCisJCQkJCSAgYWhjaV9jaGVja19yZWFkeSk7CisJCWlmIChyYykKKwkJCWFoY2lfa2lja19lbmdpbmUoYXAsIDApOworCX0KKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIGFoY2lfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcykKQEAgLTE0NzAsMjcgKzE0MzksNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBhaGNpX3BtcF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKLXsKLQlyZXR1cm4gYWhjaV9kb19zb2Z0cmVzZXQobGluaywgY2xhc3MsIGxpbmstPnBtcCwgZGVhZGxpbmUpOwotfQotCi1zdGF0aWMgdTggYWhjaV9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQl2b2lkIF9faW9tZW0gKm1taW8gPSBhcC0+aW9hZGRyLmNtZF9hZGRyOwotCi0JcmV0dXJuIHJlYWRsKG1taW8gKyBQT1JUX1RGREFUQSkgJiAweEZGOwotfQotCi1zdGF0aWMgdm9pZCBhaGNpX3RmX3JlYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCi17Ci0Jc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7Ci0JdTggKmQyaF9maXMgPSBwcC0+cnhfZmlzICsgUlhfRklTX0QySF9SRUc7Ci0KLQlhdGFfdGZfZnJvbV9maXMoZDJoX2ZpcywgdGYpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGFoY2lfZmlsbF9zZyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCB2b2lkICpjbWRfdGJsKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CkBAIC0xNjAzLDI3ICsxNTUxLDI3IEBACiAJCXUzMiAqdW5rID0gKHUzMiAqKShwcC0+cnhfZmlzICsgUlhfRklTX1VOSyk7CiAKIAkJYWN0aXZlX2VoaS0+ZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKLQkJYWN0aXZlX2VoaS0+YWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCWFjdGl2ZV9laGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCWF0YV9laGlfcHVzaF9kZXNjKGFjdGl2ZV9laGksCiAJCQkJICAidW5rbm93biBGSVMgJTA4eCAlMDh4ICUwOHggJTA4eCIgLAogCQkJCSAgdW5rWzBdLCB1bmtbMV0sIHVua1syXSwgdW5rWzNdKTsKIAl9CiAKLQlpZiAoYXAtPm5yX3BtcF9saW5rcyAmJiAoaXJxX3N0YXQgJiBQT1JUX0lSUV9CQURfUE1QKSkgeworCWlmIChzYXRhX3BtcF9hdHRhY2hlZChhcCkgJiYgKGlycV9zdGF0ICYgUE9SVF9JUlFfQkFEX1BNUCkpIHsKIAkJYWN0aXZlX2VoaS0+ZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKLQkJYWN0aXZlX2VoaS0+YWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCWFjdGl2ZV9laGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCWF0YV9laGlfcHVzaF9kZXNjKGFjdGl2ZV9laGksICJpbmNvcnJlY3QgUE1QIik7CiAJfQogCiAJaWYgKGlycV9zdGF0ICYgKFBPUlRfSVJRX0hCVVNfRVJSIHwgUE9SVF9JUlFfSEJVU19EQVRBX0VSUikpIHsKIAkJaG9zdF9laGktPmVycl9tYXNrIHw9IEFDX0VSUl9IT1NUX0JVUzsKLQkJaG9zdF9laGktPmFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOworCQlob3N0X2VoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJYXRhX2VoaV9wdXNoX2Rlc2MoaG9zdF9laGksICJob3N0IGJ1cyBlcnJvciIpOwogCX0KIAogCWlmIChpcnFfc3RhdCAmIFBPUlRfSVJRX0lGX0VSUikgewogCQlob3N0X2VoaS0+ZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7Ci0JCWhvc3RfZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJaG9zdF9laGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCWF0YV9laGlfcHVzaF9kZXNjKGhvc3RfZWhpLCAiaW50ZXJmYWNlIGZhdGFsIGVycm9yIik7CiAJfQogCkBAIC0xNjQ0LDcgKzE1OTIsNyBAQAogCiBzdGF0aWMgdm9pZCBhaGNpX3BvcnRfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKGFwKTsKIAlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+bGluay5laF9pbmZvOwogCXN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwpAQCAtMTcwNiwyMSArMTY1NCwxNiBAQAogCWVsc2UKIAkJcWNfYWN0aXZlID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUpOwogCi0JcmMgPSBhdGFfcWNfY29tcGxldGVfbXVsdGlwbGUoYXAsIHFjX2FjdGl2ZSwgTlVMTCk7CisJcmMgPSBhdGFfcWNfY29tcGxldGVfbXVsdGlwbGUoYXAsIHFjX2FjdGl2ZSk7CiAKIAkvKiB3aGlsZSByZXNldHRpbmcsIGludmFsaWQgY29tcGxldGlvbnMgYXJlIGV4cGVjdGVkICovCiAJaWYgKHVubGlrZWx5KHJjIDwgMCAmJiAhcmVzZXR0aW5nKSkgewogCQllaGktPmVycl9tYXNrIHw9IEFDX0VSUl9IU007Ci0JCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJYXRhX3BvcnRfZnJlZXplKGFwKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFoY2lfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JLyogVE9ETyAqLwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWhjaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewogCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9pbnN0YW5jZTsKQEAgLTE3OTQsNiArMTczNywxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbCBhaGNpX3FjX2ZpbGxfcnRmKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IHFjLT5hcC0+cHJpdmF0ZV9kYXRhOworCXU4ICpkMmhfZmlzID0gcHAtPnJ4X2ZpcyArIFJYX0ZJU19EMkhfUkVHOworCisJYXRhX3RmX2Zyb21fZmlzKGQyaF9maXMsICZxYy0+cmVzdWx0X3RmKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgYWhjaV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKGFwKTsKQEAgLTE4MjYsMzcgKzE3NzgsNyBAQAogCQlhaGNpX3N0YXJ0X2VuZ2luZShhcCk7CiAJfQogCi0JLyogcGVyZm9ybSByZWNvdmVyeSAqLwotCXNhdGFfcG1wX2RvX2VoKGFwLCBhdGFfc3RkX3ByZXJlc2V0LCBhaGNpX3NvZnRyZXNldCwKLQkJICAgICAgIGFoY2lfaGFyZHJlc2V0LCBhaGNpX3Bvc3RyZXNldCwKLQkJICAgICAgIHNhdGFfcG1wX3N0ZF9wcmVyZXNldCwgYWhjaV9wbXBfc29mdHJlc2V0LAotCQkgICAgICAgc2F0YV9wbXBfc3RkX2hhcmRyZXNldCwgc2F0YV9wbXBfc3RkX3Bvc3RyZXNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFoY2lfdnQ4MjUxX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlpZiAoIShhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTikpIHsKLQkJLyogcmVzdGFydCBlbmdpbmUgKi8KLQkJYWhjaV9zdG9wX2VuZ2luZShhcCk7Ci0JCWFoY2lfc3RhcnRfZW5naW5lKGFwKTsKLQl9Ci0KLQkvKiBwZXJmb3JtIHJlY292ZXJ5ICovCi0JYXRhX2RvX2VoKGFwLCBhdGFfc3RkX3ByZXJlc2V0LCBhaGNpX3NvZnRyZXNldCwgYWhjaV92dDgyNTFfaGFyZHJlc2V0LAotCQkgIGFoY2lfcG9zdHJlc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgYWhjaV9wNXdkaF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pKSB7Ci0JCS8qIHJlc3RhcnQgZW5naW5lICovCi0JCWFoY2lfc3RvcF9lbmdpbmUoYXApOwotCQlhaGNpX3N0YXJ0X2VuZ2luZShhcCk7Ci0JfQotCi0JLyogcGVyZm9ybSByZWNvdmVyeSAqLwotCWF0YV9kb19laChhcCwgYXRhX3N0ZF9wcmVyZXNldCwgYWhjaV9zb2Z0cmVzZXQsIGFoY2lfcDV3ZGhfaGFyZHJlc2V0LAotCQkgIGFoY2lfcG9zdHJlc2V0KTsKKwlzYXRhX3BtcF9lcnJvcl9oYW5kbGVyKGFwKTsKIH0KIAogc3RhdGljIHZvaWQgYWhjaV9wb3N0X2ludGVybmFsX2NtZChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQpAQCAtMTkwMSw3ICsxODIzLDcgQEAKIAlhaGNpX3Bvd2VyX3VwKGFwKTsKIAlhaGNpX3N0YXJ0X3BvcnQoYXApOwogCi0JaWYgKGFwLT5ucl9wbXBfbGlua3MpCisJaWYgKHNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKIAkJYWhjaV9wbXBfYXR0YWNoKGFwKTsKIAllbHNlCiAJCWFoY2lfcG1wX2RldGFjaChhcCk7CkBAIC0xOTMyLDcgKzE4NTQsNyBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhvc3QtPmlvbWFwW0FIQ0lfUENJX0JBUl07CiAJdTMyIGN0bDsKIAotCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKKwlpZiAobWVzZy5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKSB7CiAJCS8qIEFIQ0kgc3BlYyByZXYxLjEgc2VjdGlvbiA4LjMuMzoKIAkJICogU29mdHdhcmUgbXVzdCBkaXNhYmxlIGludGVycnVwdHMgcHJpb3IgdG8gcmVxdWVzdGluZyBhCiAJCSAqIHRyYW5zaXRpb24gb2YgdGhlIEhCQSB0byBEMyBzdGF0ZS4KQEAgLTE5NzUsMTYgKzE4OTcsMTEgQEAKIAlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwOwogCXZvaWQgKm1lbTsKIAlkbWFfYWRkcl90IG1lbV9kbWE7Ci0JaW50IHJjOwogCiAJcHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyYyA9IGF0YV9wYWRfYWxsb2MoYXAsIGRldik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAltZW0gPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQUhDSV9QT1JUX1BSSVZfRE1BX1NaLCAmbWVtX2RtYSwKIAkJCQkgIEdGUF9LRVJORUwpOwogCWlmICghbWVtKQpAQCAtMjIxMSw3ICsyMTI4LDEwIEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyYyA9IHBjaW1faW9tYXBfcmVnaW9ucyhwZGV2LCAxIDw8IEFIQ0lfUENJX0JBUiwgRFJWX05BTUUpOworCS8qIEFIQ0kgY29udHJvbGxlcnMgb2Z0ZW4gaW1wbGVtZW50IFNGRiBjb21wYXRpYmxlIGludGVyZmFjZS4KKwkgKiBHcmFiIGFsbCBQQ0kgQkFScyBqdXN0IGluIGNhc2UuCisJICovCisJcmMgPSBwY2ltX2lvbWFwX3JlZ2lvbnNfcmVxdWVzdF9hbGwocGRldiwgMSA8PCBBSENJX1BDSV9CQVIsIERSVl9OQU1FKTsKIAlpZiAocmMgPT0gLUVCVVNZKQogCQlwY2ltX3Bpbl9kZXZpY2UocGRldik7CiAJaWYgKHJjKQpAQCAtMjI2Niw3ICsyMTg2LDYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW2ldOwotCQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKGFwKTsKIAogCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIEFIQ0lfUENJX0JBUiwgLTEsICJhYmFyIik7CiAJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgQUhDSV9QQ0lfQkFSLApAQCAtMjI3NSwxMiArMjE5NCw4IEBACiAJCS8qIHNldCBpbml0aWFsIGxpbmsgcG0gcG9saWN5ICovCiAJCWFwLT5wbV9wb2xpY3kgPSBOT1RfQVZBSUxBQkxFOwogCi0JCS8qIHN0YW5kYXJkIFNBVEEgcG9ydCBzZXR1cCAqLwotCQlpZiAoaHByaXYtPnBvcnRfbWFwICYgKDEgPDwgaSkpCi0JCQlhcC0+aW9hZGRyLmNtZF9hZGRyID0gcG9ydF9tbWlvOwotCiAJCS8qIGRpc2FibGVkL25vdC1pbXBsZW1lbnRlZCBwb3J0ICovCi0JCWVsc2UKKwkJaWYgKCEoaHByaXYtPnBvcnRfbWFwICYgKDEgPDwgaSkpKQogCQkJYXAtPm9wcyA9ICZhdGFfZHVtbXlfcG9ydF9vcHM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwppbmRleCAyMDUzNDIwLi40N2FlY2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKQEAgLTk1LDUzICs5NSwxMyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBnZW5lcmljX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGdlbmVyaWNfcG9ydF9vcHMgPSB7Ci0JLnNldF9tb2RlCT0gZ2VuZXJpY19zZXRfbW9kZSwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlX3Vua25vd24sCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNldF9tb2RlCT0gZ2VuZXJpY19zZXRfbW9kZSwKIH07CiAKIHN0YXRpYyBpbnQgYWxsX2dlbmVyaWNfaWRlOwkJLyogU2V0IHRvIGNsYWltIGFsbCBkZXZpY2VzICovCkBAIC0xNjAsNyArMTIwLDYgQEAKIHsKIAl1MTYgY29tbWFuZDsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZnZW5lcmljX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtMTkxLDkgKzE1MCw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQUwpCi0JICAgIAlhdGFfcGNpX2NsZWFyX3NpbXBsZXgoZGV2KTsKKwkJYXRhX3BjaV9ibWRtYV9jbGVhcl9zaW1wbGV4KGRldik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmZ2VuZXJpY19zaHQsIE5VTEwpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRhX2dlbmVyaWNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCmluZGV4IDc1MmU3ZDIuLmI3YzM4ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwpAQCAtMTAwLDEzICsxMDAsMTEgQEAKIAlQSUlYX0lPQ0ZHCQk9IDB4NTQsIC8qIElERSBJL08gY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwogCUlDSDVfUE1SCQk9IDB4OTAsIC8qIHBvcnQgbWFwcGluZyByZWdpc3RlciAqLwogCUlDSDVfUENTCQk9IDB4OTIsCS8qIHBvcnQgY29udHJvbCBhbmQgc3RhdHVzICovCi0JUElJWF9TQ0MJCT0gMHgwQSwgLyogc3ViLWNsYXNzIGNvZGUgcmVnaXN0ZXIgKi8KIAlQSUlYX1NJRFBSX0JBUgkJPSA1LAogCVBJSVhfU0lEUFJfTEVOCQk9IDE2LAogCVBJSVhfU0lEUFJfSURYCQk9IDAsCiAJUElJWF9TSURQUl9EQVRBCQk9IDQsCiAKLQlQSUlYX0ZMQUdfQUhDSQkJPSAoMSA8PCAyNyksIC8qIEFIQ0kgcG9zc2libGUgKi8KIAlQSUlYX0ZMQUdfQ0hFQ0tJTlRSCT0gKDEgPDwgMjgpLCAvKiBtYWtlIHN1cmUgUENJIElOVHggZW5hYmxlZCAqLwogCVBJSVhfRkxBR19TSURQUgkJPSAoMSA8PCAyOSksIC8qIFNBVEEgaWR4L2RhdGEgcGFpciByZWdzICovCiAKQEAgLTE0MCwxMiArMTM4LDExIEBACiAJaWNoX3BhdGFfMTAwLAkJLyogSUNIIHVwIHRvIFVETUEgMTAwICovCiAJaWNoNV9zYXRhLAogCWljaDZfc2F0YSwKLQlpY2g2X3NhdGFfYWhjaSwKLQlpY2g2bV9zYXRhX2FoY2ksCi0JaWNoOF9zYXRhX2FoY2ksCisJaWNoNm1fc2F0YSwKKwlpY2g4X3NhdGEsCiAJaWNoOF8ycG9ydF9zYXRhLAotCWljaDhtX2FwcGxlX3NhdGFfYWhjaSwJLyogbG9ja3MgdXAgb24gc2Vjb25kIHBvcnQgZW5hYmxlICovCi0JdG9sYXBhaV9zYXRhX2FoY2ksCisJaWNoOG1fYXBwbGVfc2F0YSwJLyogbG9ja3MgdXAgb24gc2Vjb25kIHBvcnQgZW5hYmxlICovCisJdG9sYXBhaV9zYXRhLAogCXBpaXhfcGF0YV92bXcsCQkJLyogUElJWDQgZm9yIFZNd2FyZSwgc3B1cmlvdXMgRE1BX0VSUiAqLwogfTsKIApAQCAtMTYyLDcgKzE1OSw3IEBACiAKIHN0YXRpYyBpbnQgcGlpeF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKLXN0YXRpYyB2b2lkIHBpaXhfcGF0YV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGludCBwaWl4X3BhdGFfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIHN0YXRpYyB2b2lkIHBpaXhfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpOwogc3RhdGljIHZvaWQgcGlpeF9zZXRfZG1hbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9pZCBpY2hfc2V0X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpOwpAQCAtMTcwLDcgKzE2Nyw2IEBACiBzdGF0aWMgdTggcGlpeF92bXdfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGludCBwaWl4X3NpZHByX3Njcl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKTsKIHN0YXRpYyBpbnQgcGlpeF9zaWRwcl9zY3Jfd3JpdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHJlZywgdTMyIHZhbCk7Ci1zdGF0aWMgdm9pZCBwaWl4X3NpZHByX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHBpaXhfcGNpX2RldmljZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZyk7CiBzdGF0aWMgaW50IHBpaXhfcGNpX2RldmljZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtMjM2LDI1ICsyMzIsMjcgQEAKIAkvKiA4MjgwMUZCL0ZXIChJQ0g2L0lDSDZXKSAqLwogCXsgMHg4MDg2LCAweDI2NTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZfc2F0YSB9LAogCS8qIDgyODAxRlIvRlJXIChJQ0g2Ui9JQ0g2UlcpICovCi0JeyAweDgwODYsIDB4MjY1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNl9zYXRhX2FoY2kgfSwKLQkvKiA4MjgwMUZCTSBJQ0g2TSAoSUNINlIgd2l0aCBvbmx5IHBvcnQgMCBhbmQgMiBpbXBsZW1lbnRlZCkgKi8KLQl7IDB4ODA4NiwgMHgyNjUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2bV9zYXRhX2FoY2kgfSwKKwl7IDB4ODA4NiwgMHgyNjUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGEgfSwKKwkvKiA4MjgwMUZCTSBJQ0g2TSAoSUNINlIgd2l0aCBvbmx5IHBvcnQgMCBhbmQgMiBpbXBsZW1lbnRlZCkuCisJICogQXR0YWNoIGlmZiB0aGUgY29udHJvbGxlciBpcyBpbiBJREUgbW9kZS4gKi8KKwl7IDB4ODA4NiwgMHgyNjUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCSAgUENJX0NMQVNTX1NUT1JBR0VfSURFIDw8IDgsIDB4ZmZmZjAwLCBpY2g2bV9zYXRhIH0sCiAJLyogODI4MDFHQi9HUi9HSCAoSUNINywgaWRlbnRpY2FsIHRvIElDSDYpICovCi0JeyAweDgwODYsIDB4MjdjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNl9zYXRhX2FoY2kgfSwKKwl7IDB4ODA4NiwgMHgyN2MwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGEgfSwKIAkvKiAyODAxR0JNL0dITSAoSUNIN00sIGlkZW50aWNhbCB0byBJQ0g2TSkgKi8KLQl7IDB4ODA4NiwgMHgyN2M0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2bV9zYXRhX2FoY2kgfSwKKwl7IDB4ODA4NiwgMHgyN2M0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2bV9zYXRhIH0sCiAJLyogRW50ZXJwcmlzZSBTb3V0aGJyaWRnZSAyICg2MzF4RVNCLzYzMnhFU0IpICovCi0JeyAweDgwODYsIDB4MjY4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNl9zYXRhX2FoY2kgfSwKKwl7IDB4ODA4NiwgMHgyNjgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgMSBJREUgKElDSDgpICovCi0JeyAweDgwODYsIDB4MjgyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhX2FoY2kgfSwKKwl7IDB4ODA4NiwgMHgyODIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgMiBJREUgKElDSDgpICovCiAJeyAweDgwODYsIDB4MjgyNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCiAJLyogTW9iaWxlIFNBVEEgQ29udHJvbGxlciBJREUgKElDSDhNKSAqLwotCXsgMHg4MDg2LCAweDI4MjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YV9haGNpIH0sCisJeyAweDgwODYsIDB4MjgyOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhIH0sCiAJLyogTW9iaWxlIFNBVEEgQ29udHJvbGxlciBJREUgKElDSDhNKSwgQXBwbGUgKi8KLQl7IDB4ODA4NiwgMHgyODI4LCAweDEwNmIsIDB4MDBhMCwgMCwgMCwgaWNoOG1fYXBwbGVfc2F0YV9haGNpIH0sCisJeyAweDgwODYsIDB4MjgyOCwgMHgxMDZiLCAweDAwYTAsIDAsIDAsIGljaDhtX2FwcGxlX3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g5KSAqLwotCXsgMHg4MDg2LCAweDI5MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YV9haGNpIH0sCisJeyAweDgwODYsIDB4MjkyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhIH0sCiAJLyogU0FUQSBDb250cm9sbGVyIElERSAoSUNIOSkgKi8KIAl7IDB4ODA4NiwgMHgyOTIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g5KSAqLwpAQCAtMjY0LDE1ICsyNjIsMTUgQEAKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g5TSkgKi8KIAl7IDB4ODA4NiwgMHgyOTJkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g5TSkgKi8KLQl7IDB4ODA4NiwgMHgyOTJlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGFfYWhjaSB9LAorCXsgMHg4MDg2LCAweDI5MmUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAogCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKFRvbGFwYWkpICovCi0JeyAweDgwODYsIDB4NTAyOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgdG9sYXBhaV9zYXRhX2FoY2kgfSwKKwl7IDB4ODA4NiwgMHg1MDI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB0b2xhcGFpX3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0gxMCkgKi8KLQl7IDB4ODA4NiwgMHgzYTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGFfYWhjaSB9LAorCXsgMHg4MDg2LCAweDNhMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAogCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKElDSDEwKSAqLwogCXsgMHg4MDg2LCAweDNhMDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfMnBvcnRfc2F0YSB9LAogCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKElDSDEwKSAqLwotCXsgMHg4MDg2LCAweDNhMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YV9haGNpIH0sCisJeyAweDgwODYsIDB4M2EyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhIH0sCiAJLyogU0FUQSBDb250cm9sbGVyIElERSAoSUNIMTApICovCiAJeyAweDgwODYsIDB4M2EyNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCiAKQEAgLTI5MSwxNzAgKzI4OSwzNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGlpeF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaWl4X3BhdGFfb3BzID0gewotCS5zZXRfcGlvbW9kZQkJPSBwaWl4X3NldF9waW9tb2RlLAotCS5zZXRfZG1hbW9kZQkJPSBwaWl4X3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBwaWl4X3BhdGFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGlpeF9wYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGljaF9wYXRhX29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJCT0gcGlpeF9zZXRfcGlvbW9kZSwKLQkuc2V0X2RtYW1vZGUJCT0gaWNoX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBwaWl4X3BhdGFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBpY2hfcGF0YV9jYWJsZV9kZXRlY3QsCi0KLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfc2F0YV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0KLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfdm13X29wcyA9IHsKIAkuc2V0X3Bpb21vZGUJCT0gcGlpeF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gcGlpeF9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKKwkucHJlcmVzZXQJCT0gcGlpeF9wYXRhX3ByZXJlc2V0LAorfTsKIAotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfdm13X29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJnBpaXhfcGF0YV9vcHMsCiAJLmJtZG1hX3N0YXR1cwkJPSBwaWl4X3Ztd19ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IHBpaXhfcGF0YV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfc2lkcHJfc2F0YV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaWNoX3BhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmcGlpeF9wYXRhX29wcywKKwkuY2FibGVfZGV0ZWN0CQk9IGljaF9wYXRhX2NhYmxlX2RldGVjdCwKKwkuc2V0X2RtYW1vZGUJCT0gaWNoX3NldF9kbWFtb2RlLAorfTsKIAotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaWl4X3NhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorfTsKIAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBpaXhfc2lkcHJfc2F0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZwaWl4X3NhdGFfb3BzLAorCS5oYXJkcmVzZXQJCT0gc2F0YV9zdGRfaGFyZHJlc2V0LAogCS5zY3JfcmVhZAkJPSBwaWl4X3NpZHByX3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gcGlpeF9zaWRwcl9zY3Jfd3JpdGUsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBwaWl4X3NpZHByX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlpeF9tYXBfZGIgaWNoNV9tYXBfZGIgPSB7CkBAIC01NTMsMTIgKzQxOCwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwaWl4X21hcF9kYiAqcGlpeF9tYXBfZGJfdGFibGVbXSA9IHsKIAlbaWNoNV9zYXRhXQkJPSAmaWNoNV9tYXBfZGIsCiAJW2ljaDZfc2F0YV0JCT0gJmljaDZfbWFwX2RiLAotCVtpY2g2X3NhdGFfYWhjaV0JPSAmaWNoNl9tYXBfZGIsCi0JW2ljaDZtX3NhdGFfYWhjaV0JPSAmaWNoNm1fbWFwX2RiLAotCVtpY2g4X3NhdGFfYWhjaV0JPSAmaWNoOF9tYXBfZGIsCisJW2ljaDZtX3NhdGFdCQk9ICZpY2g2bV9tYXBfZGIsCisJW2ljaDhfc2F0YV0JCT0gJmljaDhfbWFwX2RiLAogCVtpY2g4XzJwb3J0X3NhdGFdCT0gJmljaDhfMnBvcnRfbWFwX2RiLAotCVtpY2g4bV9hcHBsZV9zYXRhX2FoY2ldCT0gJmljaDhtX2FwcGxlX21hcF9kYiwKLQlbdG9sYXBhaV9zYXRhX2FoY2ldCT0gJnRvbGFwYWlfbWFwX2RiLAorCVtpY2g4bV9hcHBsZV9zYXRhXQk9ICZpY2g4bV9hcHBsZV9tYXBfZGIsCisJW3RvbGFwYWlfc2F0YV0JCT0gJnRvbGFwYWlfbWFwX2RiLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHBpaXhfcG9ydF9pbmZvW10gPSB7CkBAIC02MjQsMjggKzQ4OCwxOCBAQAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LAogCi0JW2ljaDZfc2F0YV9haGNpXSA9CisJW2ljaDZtX3NhdGFdID0KIAl7Ci0JCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfQUhDSSwKKwkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKIAotCVtpY2g2bV9zYXRhX2FoY2ldID0KKwlbaWNoOF9zYXRhXSA9CiAJewotCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTIHwgUElJWF9GTEFHX0FIQ0ksCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCi0JCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAotCX0sCi0KLQlbaWNoOF9zYXRhX2FoY2ldID0KLQl7Ci0JCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfQUhDSSB8Ci0JCQkJICBQSUlYX0ZMQUdfU0lEUFIsCisJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfU0lEUFIsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCkBAIC02NTQsMjcgKzUwOCwyNSBAQAogCiAJW2ljaDhfMnBvcnRfc2F0YV0gPQogCXsKLQkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19BSENJIHwKLQkJCQkgIFBJSVhfRkxBR19TSURQUiwKKwkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19TSURQUiwKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKIAotCVt0b2xhcGFpX3NhdGFfYWhjaV0gPQorCVt0b2xhcGFpX3NhdGFdID0KIAl7Ci0JCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfQUhDSSwKKwkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKIAotCVtpY2g4bV9hcHBsZV9zYXRhX2FoY2ldID0KKwlbaWNoOG1fYXBwbGVfc2F0YV0gPQogCXsKLQkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19BSENJIHwKLQkJCQkgIFBJSVhfRkxBR19TSURQUiwKKwkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19TSURQUiwKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKQEAgLTY4Myw3ICs1MzUsNiBAQAogCiAJW3BpaXhfcGF0YV92bXddID0KIAl7Ci0JCS5zaHQJCT0gJnBpaXhfc2h0LAogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwpAQCAtNzc2LDEzICs2MjcsNyBAQAogCiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmcGlpeF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBpaXhfcGF0YV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBwaWl4X3BhdGFfcHJlcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLAotCQkJICAgYXRhX3N0ZF9wb3N0cmVzZXQpOworCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0xMTY4LDM1ICsxMDEzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwaWl4X3NpZHByX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCi0JCQkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKLXsKLQljb25zdCB1bnNpZ25lZCBsb25nICp0aW1pbmcgPSBzYXRhX2VoY19kZWJfdGltaW5nKCZsaW5rLT5laF9jb250ZXh0KTsKLQlpbnQgcmM7Ci0KLQkvKiBkbyBoYXJkcmVzZXQgKi8KLQlyYyA9IHNhdGFfbGlua19oYXJkcmVzZXQobGluaywgdGltaW5nLCBkZWFkbGluZSk7Ci0JaWYgKHJjKSB7Ci0JCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX0VSUiwKLQkJCQkiQ09NUkVTRVQgZmFpbGVkIChlcnJubz0lZClcbiIsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIFRPRE86IHBoeSBsYXllciB3aXRoIHBvbGxpbmcsIHRpbWVvdXRzLCBldGMuICovCi0JaWYgKGF0YV9saW5rX29mZmxpbmUobGluaykpIHsKLQkJKmNsYXNzID0gQVRBX0RFVl9OT05FOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVBR0FJTjsKLX0KLQotc3RhdGljIHZvaWQgcGlpeF9zaWRwcl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBhdGFfc3RkX3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwKLQkJCSAgIHBpaXhfc2lkcHJfaGFyZHJlc2V0LCBhdGFfc3RkX3Bvc3RyZXNldCk7Ci19Ci0KICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcGlpeF9icm9rZW5fc3VzcGVuZCh2b2lkKQogewpAQCAtMTMzOSw3ICsxMTU1LDcgQEAKIAkgKiBjeWNsZXMgYW5kIHBvd2VyIHRyeWluZyB0byBkbyBzb21ldGhpbmcgdG8gdGhlIHNsZWVwaW5nCiAJICogYmVhdXR5LgogCSAqLwotCWlmIChwaWl4X2Jyb2tlbl9zdXNwZW5kKCkgJiYgbWVzZy5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7CisJaWYgKHBpaXhfYnJva2VuX3N1c3BlbmQoKSAmJiAobWVzZy5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKSkgewogCQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCQkvKiBtYXJrIGl0cyBwb3dlciBzdGF0ZSBhcyAidW5rbm93biIsIHNpbmNlIHdlIGRvbid0CkBAIC0xNjMzLDYgKzE0NDksMTYgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCS8qIElDSDZSIG1heSBiZSBkcml2ZW4gYnkgZWl0aGVyIGF0YV9waWl4IG9yIGFoY2kgZHJpdmVyCisJICogcmVnYXJkbGVzcyBvZiBCSU9TIGNvbmZpZ3VyYXRpb24uICBNYWtlIHN1cmUgQUhDSSBtb2RlIGlzCisJICogb2ZmLgorCSAqLworCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCAmJiBwZGV2LT5kZXZpY2UgPT0gMHgyNjUyKSB7CisJCWludCByYyA9IHBpaXhfZGlzYWJsZV9haGNpKHBkZXYpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCiAJLyogU0FUQSBtYXAgaW5pdCBjYW4gY2hhbmdlIHBvcnRfaW5mbywgZG8gaXQgYmVmb3JlIHByZXBwaW5nIGhvc3QgKi8KIAlocHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaHByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhwcml2KQpAQCAtMTY0MiwyMiArMTQ2OCwxMiBAQAogCQlocHJpdi0+bWFwID0gcGlpeF9pbml0X3NhdGFfbWFwKHBkZXYsIHBvcnRfaW5mbywKIAkJCQkJcGlpeF9tYXBfZGJfdGFibGVbZW50LT5kcml2ZXJfZGF0YV0pOwogCi0JcmMgPSBhdGFfcGNpX3ByZXBhcmVfc2ZmX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7CisJcmMgPSBhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaHByaXY7CiAKIAkvKiBpbml0aWFsaXplIGNvbnRyb2xsZXIgKi8KLQlpZiAocG9ydF9mbGFncyAmIFBJSVhfRkxBR19BSENJKSB7Ci0JCXU4IHRtcDsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUElJWF9TQ0MsICZ0bXApOwotCQlpZiAodG1wID09IFBJSVhfQUhDSV9ERVZJQ0UpIHsKLQkJCXJjID0gcGlpeF9kaXNhYmxlX2FoY2kocGRldik7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCiAJaWYgKHBvcnRfZmxhZ3MgJiBBVEFfRkxBR19TQVRBKSB7CiAJCXBpaXhfaW5pdF9wY3MoaG9zdCwgcGlpeF9tYXBfZGJfdGFibGVbZW50LT5kcml2ZXJfZGF0YV0pOwogCQlwaWl4X2luaXRfc2lkcHIoaG9zdCk7CkBAIC0xNjg2LDcgKzE1MDIsNyBAQAogCX0KIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCXJldHVybiBhdGFfcGNpX2FjdGl2YXRlX3NmZl9ob3N0KGhvc3QsIGF0YV9pbnRlcnJ1cHQsICZwaWl4X3NodCk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2FjdGl2YXRlX2hvc3QoaG9zdCwgYXRhX3NmZl9pbnRlcnJ1cHQsICZwaWl4X3NodCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBpaXhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKaW5kZXggOWU4ZWMxOS4uOGMxY2ZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCkBAIC03Nyw3ICs3Nyw3IEBACiB7CiAJV0FSTl9PTighKGFwLT5mbGFncyAmIEFUQV9GTEFHX0FDUElfU0FUQSkpOwogCi0JaWYgKCFhcC0+bnJfcG1wX2xpbmtzKSB7CisJaWYgKCFzYXRhX3BtcF9hdHRhY2hlZChhcCkpIHsKIAkJYWNwaV9pbnRlZ2VyIGFkciA9IFNBVEFfQURSKGFwLT5wb3J0X25vLCBOT19QT1JUX01VTFQpOwogCiAJCWFwLT5saW5rLmRldmljZS0+YWNwaV9oYW5kbGUgPQpAQCAtMTE4LDQ1ICsxMTgsNzcgQEAKIAkJYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfSU5JVF9HVE1fVkFMSUQ7CiB9CiAKLXN0YXRpYyB2b2lkIGF0YV9hY3BpX2hhbmRsZV9ob3RwbHVnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorc3RhdGljIHZvaWQgYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKIAkJCQkgICAgdTMyIGV2ZW50KQogewogCWNoYXIgZXZlbnRfc3RyaW5nWzEyXTsKIAljaGFyICplbnZwW10gPSB7IGV2ZW50X3N0cmluZywgTlVMTCB9OwotCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmFwLT5saW5rLmVoX2luZm87CisJc3RydWN0IGF0YV9laF9pbmZvICplaGk7CisJc3RydWN0IGtvYmplY3QgKmtvYmogPSBOVUxMOworCWludCB3YWl0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGV2ZW50ID09IDAgfHwgZXZlbnQgPT0gMSkgewotCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCSAgICAgICBzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwotCSAgICAgICBhdGFfZWhpX2NsZWFyX2Rlc2MoZWhpKTsKLQkgICAgICAgYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLCAiQUNQSSBldmVudCIpOwotCSAgICAgICBhdGFfZWhpX2hvdHBsdWdnZWQoZWhpKTsKLQkgICAgICAgYXRhX3BvcnRfZnJlZXplKGFwKTsKLQkgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOworCWlmICghYXApCisJCWFwID0gZGV2LT5saW5rLT5hcDsKKwllaGkgPSAmYXAtPmxpbmsuZWhfaW5mbzsKKworCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0s6CisJY2FzZSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0s6CisJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkFDUEkgZXZlbnQiKTsKKwkJYXRhX2VoaV9ob3RwbHVnZ2VkKGVoaSk7CisJCWF0YV9wb3J0X2ZyZWV6ZShhcCk7CisJCWJyZWFrOworCisJY2FzZSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUOgorCQlhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJBQ1BJIGV2ZW50Iik7CisJCWlmIChkZXYpCisJCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19ERVRBQ0g7CisJCWVsc2UgeworCQkJc3RydWN0IGF0YV9saW5rICp0bGluazsKKwkJCXN0cnVjdCBhdGFfZGV2aWNlICp0ZGV2OworCisJCQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKHRsaW5rLCBhcCkKKwkJCQlhdGFfbGlua19mb3JfZWFjaF9kZXYodGRldiwgdGxpbmspCisJCQkJCXRkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19ERVRBQ0g7CisJCX0KKworCQlhdGFfcG9ydF9zY2hlZHVsZV9laChhcCk7CisJCXdhaXQgPSAxOworCQlicmVhazsKIAl9CiAKKwlpZiAoZGV2KSB7CisJCWlmIChkZXYtPnNkZXYpCisJCQlrb2JqID0gJmRldi0+c2Rldi0+c2Rldl9nZW5kZXYua29iajsKKwl9IGVsc2UKKwkJa29iaiA9ICZhcC0+ZGV2LT5rb2JqOworCiAJaWYgKGtvYmopIHsKIAkJc3ByaW50ZihldmVudF9zdHJpbmcsICJCQVlfRVZFTlQ9JWQiLCBldmVudCk7CiAJCWtvYmplY3RfdWV2ZW50X2Vudihrb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CiAJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHdhaXQpCisJCWF0YV9wb3J0X3dhaXRfZWgoYXApOwogfQogCiBzdGF0aWMgdm9pZCBhdGFfYWNwaV9kZXZfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gTlVMTDsKIAotCWlmIChkZXYtPnNkZXYpCi0JCWtvYmogPSAmZGV2LT5zZGV2LT5zZGV2X2dlbmRldi5rb2JqOwotCi0JYXRhX2FjcGlfaGFuZGxlX2hvdHBsdWcoZGV2LT5saW5rLT5hcCwga29iaiwgZXZlbnQpOworCWF0YV9hY3BpX2hhbmRsZV9ob3RwbHVnKE5VTEwsIGRldiwgZXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBhdGFfYWNwaV9hcF9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGRhdGE7CiAKLQlhdGFfYWNwaV9oYW5kbGVfaG90cGx1ZyhhcCwgJmFwLT5kZXYtPmtvYmosIGV2ZW50KTsKKwlhdGFfYWNwaV9oYW5kbGVfaG90cGx1ZyhhcCwgTlVMTCwgZXZlbnQpOwogfQogCiAvKioKQEAgLTE5MSwyMCArMjIzLDMwIEBACiAJCWVsc2UKIAkJCWF0YV9hY3BpX2Fzc29jaWF0ZV9pZGVfcG9ydChhcCk7CiAKLQkJaWYgKGFwLT5hY3BpX2hhbmRsZSkKLQkJCWFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlciAoYXAtPmFjcGlfaGFuZGxlLAotCQkJCQkJICAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCi0JCQkJCQkgICAgIGF0YV9hY3BpX2FwX25vdGlmeSwKLQkJCQkJCSAgICAgYXApOworCQlpZiAoYXAtPmFjcGlfaGFuZGxlKSB7CisJCQlhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoYXAtPmFjcGlfaGFuZGxlLAorCQkJCQkJICAgIEFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJCSAgICBhdGFfYWNwaV9hcF9ub3RpZnksIGFwKTsKKyNpZiBkZWZpbmVkKENPTkZJR19BQ1BJX0RPQ0spIHx8IGRlZmluZWQoQ09ORklHX0FDUElfRE9DS19NT0RVTEUpCisJCQkvKiB3ZSBtaWdodCBiZSBvbiBhIGRvY2tpbmcgc3RhdGlvbiAqLworCQkJcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhcC0+YWNwaV9oYW5kbGUsCisJCQkJCQkgICAgIGF0YV9hY3BpX2FwX25vdGlmeSwgYXApOworI2VuZGlmCisJCX0KIAogCQlmb3IgKGogPSAwOyBqIDwgYXRhX2xpbmtfbWF4X2RldmljZXMoJmFwLT5saW5rKTsgaisrKSB7CiAJCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5saW5rLmRldmljZVtqXTsKIAotCQkJaWYgKGRldi0+YWNwaV9oYW5kbGUpCi0JCQkJYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyIChkZXYtPmFjcGlfaGFuZGxlLAotCQkJCQkJCSAgICAgQUNQSV9TWVNURU1fTk9USUZZLAotCQkJCQkJCSAgICAgYXRhX2FjcGlfZGV2X25vdGlmeSwKLQkJCQkJCQkgICAgIGRldik7CisJCQlpZiAoZGV2LT5hY3BpX2hhbmRsZSkgeworCQkJCWFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihkZXYtPmFjcGlfaGFuZGxlLAorCQkJCQkJQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQkJYXRhX2FjcGlfZGV2X25vdGlmeSwgZGV2KTsKKyNpZiBkZWZpbmVkKENPTkZJR19BQ1BJX0RPQ0spIHx8IGRlZmluZWQoQ09ORklHX0FDUElfRE9DS19NT0RVTEUpCisJCQkJLyogd2UgbWlnaHQgYmUgb24gYSBkb2NraW5nIHN0YXRpb24gKi8KKwkJCQlyZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGRldi0+YWNwaV9oYW5kbGUsCisJCQkJCQlhdGFfYWNwaV9kZXZfbm90aWZ5LCBkZXYpOworI2VuZGlmCisJCQl9CiAJCX0KIAl9CiB9CkBAIC0zODIsNyArNDI0LDcgQEAKIAogCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKIAkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IEVOVEVSOiBwb3J0IzogJWRcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBhcC0+cG9ydF9ubyk7CisJCQkgICAgICAgX19mdW5jX18sIGFwLT5wb3J0X25vKTsKIAogCS8qIF9HVEYgaGFzIG5vIGlucHV0IHBhcmFtZXRlcnMgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXYtPmFjcGlfaGFuZGxlLCAiX0dURiIsIE5VTEwsICZvdXRwdXQpOwpAQCAtNDAyLDcgKzQ0NCw3IEBACiAJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKIAkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgIiVzOiBSdW4gX0dURjogIgogCQkJCSJsZW5ndGggb3IgcHRyIGlzIE5VTEwgKDB4JWxseCwgMHglcClcbiIsCi0JCQkJX19GVU5DVElPTl9fLAorCQkJCV9fZnVuY19fLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb3V0cHV0Lmxlbmd0aCwKIAkJCQlvdXRwdXQucG9pbnRlcik7CiAJCXJjID0gLUVJTlZBTDsKQEAgLTQzMiw3ICs0NzQsNyBAQAogCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCiAJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCiAJCQkJICAgICAgICIlczogcmV0dXJuaW5nIGd0Zj0lcCwgZ3RmX2NvdW50PSVkXG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sICpndGYsIHJjKTsKKwkJCQkgICAgICAgX19mdW5jX18sICpndGYsIHJjKTsKIAl9CiAJcmV0dXJuIHJjOwogCkBAIC03MjUsNyArNzY3LDcgQEAKIAogCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKIAkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IGl4ID0gJWQsIHBvcnQjOiAlZFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRldi0+ZGV2bm8sIGFwLT5wb3J0X25vKTsKKwkJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5kZXZubywgYXAtPnBvcnRfbm8pOwogCiAJLyogR2l2ZSB0aGUgZHJpdmUgSWRlbnRpZnkgZGF0YSB0byB0aGUgZHJpdmUgdmlhIHRoZSBfU0REIG1ldGhvZCAqLwogCS8qIF9TREQ6IHNldCB1cCBpbnB1dCBwYXJhbWV0ZXJzICovCkBAIC03OTcsNyArODM5LDggQEAKIAkJICovCiAJCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykgewogCQkJYXRhX2FjcGlfY2xlYXJfZ3RmKGRldik7Ci0JCQlpZiAoYXRhX2Rldl9nZXRfR1RGKGRldiwgTlVMTCkgPj0gMCkKKwkJCWlmIChhdGFfZGV2X2VuYWJsZWQoZGV2KSAmJgorCQkJICAgIGF0YV9kZXZfZ2V0X0dURihkZXYsIE5VTEwpID49IDApCiAJCQkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfQUNQSV9QRU5ESU5HOwogCQl9CiAJfSBlbHNlIHsKQEAgLTgwNyw3ICs4NTAsOCBAQAogCQkgKi8KIAkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rKSB7CiAJCQlhdGFfYWNwaV9jbGVhcl9ndGYoZGV2KTsKLQkJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX0FDUElfUEVORElORzsKKwkJCWlmIChhdGFfZGV2X2VuYWJsZWQoZGV2KSkKKwkJCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19BQ1BJX1BFTkRJTkc7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBiZWFhM2E5Li5iMGIwMGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTYyLDcgKzYxLDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgogCkBAIC03NCw2ICs3MiwxOSBAQAogY29uc3QgdW5zaWduZWQgbG9uZyBzYXRhX2RlYl90aW1pbmdfaG90cGx1Z1tdCQk9IHsgIDI1LCAgNTAwLCAyMDAwIH07CiBjb25zdCB1bnNpZ25lZCBsb25nIHNhdGFfZGViX3RpbWluZ19sb25nW10JCT0geyAxMDAsIDIwMDAsIDUwMDAgfTsKIAorY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXRhX2Jhc2VfcG9ydF9vcHMgPSB7CisJLnByZXJlc2V0CQk9IGF0YV9zdGRfcHJlcmVzZXQsCisJLnBvc3RyZXNldAkJPSBhdGFfc3RkX3Bvc3RyZXNldCwKKwkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfc3RkX2Vycm9yX2hhbmRsZXIsCit9OworCitjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzYXRhX3BvcnRfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2Jhc2VfcG9ydF9vcHMsCisKKwkucWNfZGVmZXIJCT0gYXRhX3N0ZF9xY19kZWZlciwKKwkuaGFyZHJlc2V0CQk9IHNhdGFfc3RkX2hhcmRyZXNldCwKK307CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2Rldl9pbml0X3BhcmFtcyhzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJCQl1MTYgaGVhZHMsIHUxNiBzZWN0b3JzKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2Rldl9zZXRfeGZlcm1vZGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CkBAIC04NywxMSArOTgsMzQgQEAKIAogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmF0YV9hdXhfd3E7CiAKK3N0cnVjdCBhdGFfZm9yY2VfcGFyYW0geworCWNvbnN0IGNoYXIJKm5hbWU7CisJdW5zaWduZWQgaW50CWNibDsKKwlpbnQJCXNwZF9saW1pdDsKKwl1bnNpZ25lZCBsb25nCXhmZXJfbWFzazsKKwl1bnNpZ25lZCBpbnQJaG9ya2FnZV9vbjsKKwl1bnNpZ25lZCBpbnQJaG9ya2FnZV9vZmY7Cit9OworCitzdHJ1Y3QgYXRhX2ZvcmNlX2VudCB7CisJaW50CQkJcG9ydDsKKwlpbnQJCQlkZXZpY2U7CisJc3RydWN0IGF0YV9mb3JjZV9wYXJhbQlwYXJhbTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX2ZvcmNlX2VudCAqYXRhX2ZvcmNlX3RibDsKK3N0YXRpYyBpbnQgYXRhX2ZvcmNlX3RibF9zaXplOworCitzdGF0aWMgY2hhciBhdGFfZm9yY2VfcGFyYW1fYnVmW1BBR0VfU0laRV0gX19pbml0ZGF0YTsKKy8qIHBhcmFtX2J1ZiBpcyB0aHJvd24gYXdheSBhZnRlciBpbml0aWFsaXphdGlvbiwgZGlzYWxsb3cgcmVhZCAqLworbW9kdWxlX3BhcmFtX3N0cmluZyhmb3JjZSwgYXRhX2ZvcmNlX3BhcmFtX2J1Ziwgc2l6ZW9mKGF0YV9mb3JjZV9wYXJhbV9idWYpLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2UsICJGb3JjZSBBVEEgY29uZmlndXJhdGlvbnMgaW5jbHVkaW5nIGNhYmxlIHR5cGUsIGxpbmsgc3BlZWQgYW5kIHRyYW5zZmVyIG1vZGUgKHNlZSBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBmb3IgZGV0YWlscykiKTsKKwogaW50IGF0YXBpX2VuYWJsZWQgPSAxOwogbW9kdWxlX3BhcmFtKGF0YXBpX2VuYWJsZWQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGF0YXBpX2VuYWJsZWQsICJFbmFibGUgZGlzY292ZXJ5IG9mIEFUQVBJIGRldmljZXMgKDA9b2ZmLCAxPW9uKSIpOwogCi1pbnQgYXRhcGlfZG1hZGlyID0gMDsKK3N0YXRpYyBpbnQgYXRhcGlfZG1hZGlyID0gMDsKIG1vZHVsZV9wYXJhbShhdGFwaV9kbWFkaXIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGF0YXBpX2RtYWRpciwgIkVuYWJsZSBBVEFQSSBETUFESVIgYnJpZGdlIHN1cHBvcnQgKDA9b2ZmLCAxPW9uKSIpOwogCkBAIC0xMzAsNiArMTY0LDIxNyBAQAogCiAKIC8qKgorICoJYXRhX2ZvcmNlX2NibCAtIGZvcmNlIGNhYmxlIHR5cGUgYWNjb3JkaW5nIHRvIGxpYmF0YS5mb3JjZQorICoJQGFwOiBBVEEgcG9ydCBvZiBpbnRlcmVzdAorICoKKyAqCUZvcmNlIGNhYmxlIHR5cGUgYWNjb3JkaW5nIHRvIGxpYmF0YS5mb3JjZSBhbmQgd2hpbmUgYWJvdXQgaXQuCisgKglUaGUgbGFzdCBlbnRyeSB3aGljaCBoYXMgbWF0Y2hpbmcgcG9ydCBudW1iZXIgaXMgdXNlZCwgc28gaXQKKyAqCWNhbiBiZSBzcGVjaWZpZWQgYXMgcGFydCBvZiBkZXZpY2UgZm9yY2UgcGFyYW1ldGVycy4gIEZvcgorICoJZXhhbXBsZSwgYm90aCAiYTo0MGMsMS4wMDp1ZG1hNCIgYW5kICIxLjAwOjQwYyx1ZG1hNCIgaGF2ZSB0aGUKKyAqCXNhbWUgZWZmZWN0LgorICoKKyAqCUxPQ0tJTkc6CisgKglFSCBjb250ZXh0LgorICovCit2b2lkIGF0YV9mb3JjZV9jYmwoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IGF0YV9mb3JjZV90Ymxfc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IHN0cnVjdCBhdGFfZm9yY2VfZW50ICpmZSA9ICZhdGFfZm9yY2VfdGJsW2ldOworCisJCWlmIChmZS0+cG9ydCAhPSAtMSAmJiBmZS0+cG9ydCAhPSBhcC0+cHJpbnRfaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoZmUtPnBhcmFtLmNibCA9PSBBVEFfQ0JMX05PTkUpCisJCQljb250aW51ZTsKKworCQlhcC0+Y2JsID0gZmUtPnBhcmFtLmNibDsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX05PVElDRSwKKwkJCQkiRk9SQ0U6IGNhYmxlIHNldCB0byAlc1xuIiwgZmUtPnBhcmFtLm5hbWUpOworCQlyZXR1cm47CisJfQorfQorCisvKioKKyAqCWF0YV9mb3JjZV9zcGRfbGltaXQgLSBmb3JjZSBTQVRBIHNwZCBsaW1pdCBhY2NvcmRpbmcgdG8gbGliYXRhLmZvcmNlCisgKglAbGluazogQVRBIGxpbmsgb2YgaW50ZXJlc3QKKyAqCisgKglGb3JjZSBTQVRBIHNwZCBsaW1pdCBhY2NvcmRpbmcgdG8gbGliYXRhLmZvcmNlIGFuZCB3aGluZSBhYm91dAorICoJaXQuICBXaGVuIG9ubHkgdGhlIHBvcnQgcGFydCBpcyBzcGVjaWZpZWQgKGUuZy4gMTopLCB0aGUgbGltaXQKKyAqCWFwcGxpZXMgdG8gYWxsIGxpbmtzIGNvbm5lY3RlZCB0byBib3RoIHRoZSBob3N0IGxpbmsgYW5kIGFsbAorICoJZmFuLW91dCBwb3J0cyBjb25uZWN0ZWQgdmlhIFBNUC4gIElmIHRoZSBkZXZpY2UgcGFydCBpcworICoJc3BlY2lmaWVkIGFzIDAgKGUuZy4gMS4wMDopLCBpdCBzcGVjaWZpZXMgdGhlIGZpcnN0IGZhbi1vdXQKKyAqCWxpbmsgbm90IHRoZSBob3N0IGxpbmsuICBEZXZpY2UgbnVtYmVyIDE1IGFsd2F5cyBwb2ludHMgdG8gdGhlCisgKglob3N0IGxpbmsgd2hldGhlciBQTVAgaXMgYXR0YWNoZWQgb3Igbm90LgorICoKKyAqCUxPQ0tJTkc6CisgKglFSCBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBhdGFfZm9yY2Vfc3BkX2xpbWl0KHN0cnVjdCBhdGFfbGluayAqbGluaykKK3sKKwlpbnQgbGlua25vLCBpOworCisJaWYgKGF0YV9pc19ob3N0X2xpbmsobGluaykpCisJCWxpbmtubyA9IDE1OworCWVsc2UKKwkJbGlua25vID0gbGluay0+cG1wOworCisJZm9yIChpID0gYXRhX2ZvcmNlX3RibF9zaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJY29uc3Qgc3RydWN0IGF0YV9mb3JjZV9lbnQgKmZlID0gJmF0YV9mb3JjZV90YmxbaV07CisKKwkJaWYgKGZlLT5wb3J0ICE9IC0xICYmIGZlLT5wb3J0ICE9IGxpbmstPmFwLT5wcmludF9pZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmZS0+ZGV2aWNlICE9IC0xICYmIGZlLT5kZXZpY2UgIT0gbGlua25vKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmZS0+cGFyYW0uc3BkX2xpbWl0KQorCQkJY29udGludWU7CisKKwkJbGluay0+aHdfc2F0YV9zcGRfbGltaXQgPSAoMSA8PCBmZS0+cGFyYW0uc3BkX2xpbWl0KSAtIDE7CisJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX05PVElDRSwKKwkJCSJGT1JDRTogUEhZIHNwZCBsaW1pdCBzZXQgdG8gJXNcbiIsIGZlLT5wYXJhbS5uYW1lKTsKKwkJcmV0dXJuOworCX0KK30KKworLyoqCisgKglhdGFfZm9yY2VfeGZlcm1hc2sgLSBmb3JjZSB4ZmVybWFzayBhY2NvcmRpbmcgdG8gbGliYXRhLmZvcmNlCisgKglAZGV2OiBBVEEgZGV2aWNlIG9mIGludGVyZXN0CisgKgorICoJRm9yY2UgeGZlcl9tYXNrIGFjY29yZGluZyB0byBsaWJhdGEuZm9yY2UgYW5kIHdoaW5lIGFib3V0IGl0LgorICoJRm9yIGNvbnNpc3RlbmN5IHdpdGggbGluayBzZWxlY3Rpb24sIGRldmljZSBudW1iZXIgMTUgc2VsZWN0cworICoJdGhlIGZpcnN0IGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIGhvc3QgbGluay4KKyAqCisgKglMT0NLSU5HOgorICoJRUggY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgYXRhX2ZvcmNlX3hmZXJtYXNrKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCit7CisJaW50IGRldm5vID0gZGV2LT5saW5rLT5wbXAgKyBkZXYtPmRldm5vOworCWludCBhbHRfZGV2bm8gPSBkZXZubzsKKwlpbnQgaTsKKworCS8qIGFsbG93IG4uMTUgZm9yIHRoZSBmaXJzdCBkZXZpY2UgYXR0YWNoZWQgdG8gaG9zdCBwb3J0ICovCisJaWYgKGF0YV9pc19ob3N0X2xpbmsoZGV2LT5saW5rKSAmJiBkZXZubyA9PSAwKQorCQlhbHRfZGV2bm8gPSAxNTsKKworCWZvciAoaSA9IGF0YV9mb3JjZV90Ymxfc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IHN0cnVjdCBhdGFfZm9yY2VfZW50ICpmZSA9ICZhdGFfZm9yY2VfdGJsW2ldOworCQl1bnNpZ25lZCBsb25nIHBpb19tYXNrLCBtd2RtYV9tYXNrLCB1ZG1hX21hc2s7CisKKwkJaWYgKGZlLT5wb3J0ICE9IC0xICYmIGZlLT5wb3J0ICE9IGRldi0+bGluay0+YXAtPnByaW50X2lkKQorCQkJY29udGludWU7CisKKwkJaWYgKGZlLT5kZXZpY2UgIT0gLTEgJiYgZmUtPmRldmljZSAhPSBkZXZubyAmJgorCQkgICAgZmUtPmRldmljZSAhPSBhbHRfZGV2bm8pCisJCQljb250aW51ZTsKKworCQlpZiAoIWZlLT5wYXJhbS54ZmVyX21hc2spCisJCQljb250aW51ZTsKKworCQlhdGFfdW5wYWNrX3hmZXJtYXNrKGZlLT5wYXJhbS54ZmVyX21hc2ssCisJCQkJICAgICZwaW9fbWFzaywgJm13ZG1hX21hc2ssICZ1ZG1hX21hc2spOworCQlpZiAodWRtYV9tYXNrKQorCQkJZGV2LT51ZG1hX21hc2sgPSB1ZG1hX21hc2s7CisJCWVsc2UgaWYgKG13ZG1hX21hc2spIHsKKwkJCWRldi0+dWRtYV9tYXNrID0gMDsKKwkJCWRldi0+bXdkbWFfbWFzayA9IG13ZG1hX21hc2s7CisJCX0gZWxzZSB7CisJCQlkZXYtPnVkbWFfbWFzayA9IDA7CisJCQlkZXYtPm13ZG1hX21hc2sgPSAwOworCQkJZGV2LT5waW9fbWFzayA9IHBpb19tYXNrOworCQl9CisKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX05PVElDRSwKKwkJCSJGT1JDRTogeGZlcl9tYXNrIHNldCB0byAlc1xuIiwgZmUtPnBhcmFtLm5hbWUpOworCQlyZXR1cm47CisJfQorfQorCisvKioKKyAqCWF0YV9mb3JjZV9ob3JrYWdlIC0gZm9yY2UgaG9ya2FnZSBhY2NvcmRpbmcgdG8gbGliYXRhLmZvcmNlCisgKglAZGV2OiBBVEEgZGV2aWNlIG9mIGludGVyZXN0CisgKgorICoJRm9yY2UgaG9ya2FnZSBhY2NvcmRpbmcgdG8gbGliYXRhLmZvcmNlIGFuZCB3aGluZSBhYm91dCBpdC4KKyAqCUZvciBjb25zaXN0ZW5jeSB3aXRoIGxpbmsgc2VsZWN0aW9uLCBkZXZpY2UgbnVtYmVyIDE1IHNlbGVjdHMKKyAqCXRoZSBmaXJzdCBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSBob3N0IGxpbmsuCisgKgorICoJTE9DS0lORzoKKyAqCUVIIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIGF0YV9mb3JjZV9ob3JrYWdlKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCit7CisJaW50IGRldm5vID0gZGV2LT5saW5rLT5wbXAgKyBkZXYtPmRldm5vOworCWludCBhbHRfZGV2bm8gPSBkZXZubzsKKwlpbnQgaTsKKworCS8qIGFsbG93IG4uMTUgZm9yIHRoZSBmaXJzdCBkZXZpY2UgYXR0YWNoZWQgdG8gaG9zdCBwb3J0ICovCisJaWYgKGF0YV9pc19ob3N0X2xpbmsoZGV2LT5saW5rKSAmJiBkZXZubyA9PSAwKQorCQlhbHRfZGV2bm8gPSAxNTsKKworCWZvciAoaSA9IDA7IGkgPCBhdGFfZm9yY2VfdGJsX3NpemU7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgYXRhX2ZvcmNlX2VudCAqZmUgPSAmYXRhX2ZvcmNlX3RibFtpXTsKKworCQlpZiAoZmUtPnBvcnQgIT0gLTEgJiYgZmUtPnBvcnQgIT0gZGV2LT5saW5rLT5hcC0+cHJpbnRfaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoZmUtPmRldmljZSAhPSAtMSAmJiBmZS0+ZGV2aWNlICE9IGRldm5vICYmCisJCSAgICBmZS0+ZGV2aWNlICE9IGFsdF9kZXZubykKKwkJCWNvbnRpbnVlOworCisJCWlmICghKH5kZXYtPmhvcmthZ2UgJiBmZS0+cGFyYW0uaG9ya2FnZV9vbikgJiYKKwkJICAgICEoZGV2LT5ob3JrYWdlICYgZmUtPnBhcmFtLmhvcmthZ2Vfb2ZmKSkKKwkJCWNvbnRpbnVlOworCisJCWRldi0+aG9ya2FnZSB8PSBmZS0+cGFyYW0uaG9ya2FnZV9vbjsKKwkJZGV2LT5ob3JrYWdlICY9IH5mZS0+cGFyYW0uaG9ya2FnZV9vZmY7CisKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX05PVElDRSwKKwkJCSJGT1JDRTogaG9ya2FnZSBtb2RpZmllZCAoJXMpXG4iLCBmZS0+cGFyYW0ubmFtZSk7CisJfQorfQorCisvKioKKyAqCWF0YXBpX2NtZF90eXBlIC0gRGV0ZXJtaW5lIEFUQVBJIGNvbW1hbmQgdHlwZSBmcm9tIFNDU0kgb3Bjb2RlCisgKglAb3Bjb2RlOiBTQ1NJIG9wY29kZQorICoKKyAqCURldGVybWluZSBBVEFQSSBjb21tYW5kIHR5cGUgZnJvbSBAb3Bjb2RlLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lLgorICoKKyAqCVJFVFVSTlM6CisgKglBVEFQSV97UkVBRHxXUklURXxSRUFEX0NEfFBBU1NfVEhSVXxNSVNDfQorICovCitpbnQgYXRhcGlfY21kX3R5cGUodTggb3Bjb2RlKQoreworCXN3aXRjaCAob3Bjb2RlKSB7CisJY2FzZSBHUENNRF9SRUFEXzEwOgorCWNhc2UgR1BDTURfUkVBRF8xMjoKKwkJcmV0dXJuIEFUQVBJX1JFQUQ7CisKKwljYXNlIEdQQ01EX1dSSVRFXzEwOgorCWNhc2UgR1BDTURfV1JJVEVfMTI6CisJY2FzZSBHUENNRF9XUklURV9BTkRfVkVSSUZZXzEwOgorCQlyZXR1cm4gQVRBUElfV1JJVEU7CisKKwljYXNlIEdQQ01EX1JFQURfQ0Q6CisJY2FzZSBHUENNRF9SRUFEX0NEX01TRjoKKwkJcmV0dXJuIEFUQVBJX1JFQURfQ0Q7CisKKwljYXNlIEFUQV8xNjoKKwljYXNlIEFUQV8xMjoKKwkJaWYgKGF0YXBpX3Bhc3N0aHJ1MTYpCisJCQlyZXR1cm4gQVRBUElfUEFTU19USFJVOworCQkvKiBmYWxsIHRocnUgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gQVRBUElfTUlTQzsKKwl9Cit9CisKKy8qKgogICoJYXRhX3RmX3RvX2ZpcyAtIENvbnZlcnQgQVRBIHRhc2tmaWxlIHRvIFNBVEEgRklTIHN0cnVjdHVyZQogICoJQHRmOiBUYXNrZmlsZSB0byBjb252ZXJ0CiAgKglAcG1wOiBQb3J0IG11bHRpcGxpZXIgcG9ydApAQCAtNzc2LDcgKzEwMjEsNyBAQAogdm9pZCBhdGFfbHBtX3NjaGVkdWxlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGVudW0gbGlua19wbSBwb2xpY3kpCiB7CiAJYXAtPnBtX3BvbGljeSA9IHBvbGljeTsKLQlhcC0+bGluay5laF9pbmZvLmFjdGlvbiB8PSBBVEFfRUhJX0xQTTsKKwlhcC0+bGluay5laF9pbmZvLmFjdGlvbiB8PSBBVEFfRUhfTFBNOwogCWFwLT5saW5rLmVoX2luZm8uZmxhZ3MgfD0gQVRBX0VISV9OT19BVVRPUFNZOwogCWF0YV9wb3J0X3NjaGVkdWxlX2VoKGFwKTsKIH0KQEAgLTgwOSw1MCArMTA1NCw2IEBACiB9CiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKLQotLyoqCi0gKglhdGFfZGV2Y2hrIC0gUEFUQSBkZXZpY2UgcHJlc2VuY2UgZGV0ZWN0aW9uCi0gKglAYXA6IEFUQSBjaGFubmVsIHRvIGV4YW1pbmUKLSAqCUBkZXZpY2U6IERldmljZSB0byBleGFtaW5lIChzdGFydGluZyBhdCB6ZXJvKQotICoKLSAqCVRoaXMgdGVjaG5pcXVlIHdhcyBvcmlnaW5hbGx5IGRlc2NyaWJlZCBpbgotICoJSGFsZSBMYW5kaXMncyBBVEFEUlZSICh3d3cuYXRhLWF0YXBpLmNvbSksIGFuZAotICoJbGF0ZXIgZm91bmQgaXRzIHdheSBpbnRvIHRoZSBBVEEvQVRBUEkgc3BlYy4KLSAqCi0gKglXcml0ZSBhIHBhdHRlcm4gdG8gdGhlIEFUQSBzaGFkb3cgcmVnaXN0ZXJzLAotICoJYW5kIGlmIGEgZGV2aWNlIGlzIHByZXNlbnQsIGl0IHdpbGwgcmVzcG9uZCBieQotICoJY29ycmVjdGx5IHN0b3JpbmcgYW5kIGVjaG9pbmcgYmFjayB0aGUKLSAqCUFUQSBzaGFkb3cgcmVnaXN0ZXIgY29udGVudHMuCi0gKgotICoJTE9DS0lORzoKLSAqCWNhbGxlci4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0YV9kZXZjaGsoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSkKLXsKLQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwotCXU4IG5zZWN0LCBsYmFsOwotCi0JYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgZGV2aWNlKTsKLQotCWlvd3JpdGU4KDB4NTUsIGlvYWRkci0+bnNlY3RfYWRkcik7Ci0JaW93cml0ZTgoMHhhYSwgaW9hZGRyLT5sYmFsX2FkZHIpOwotCi0JaW93cml0ZTgoMHhhYSwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKLQlpb3dyaXRlOCgweDU1LCBpb2FkZHItPmxiYWxfYWRkcik7Ci0KLQlpb3dyaXRlOCgweDU1LCBpb2FkZHItPm5zZWN0X2FkZHIpOwotCWlvd3JpdGU4KDB4YWEsIGlvYWRkci0+bGJhbF9hZGRyKTsKLQotCW5zZWN0ID0gaW9yZWFkOChpb2FkZHItPm5zZWN0X2FkZHIpOwotCWxiYWwgPSBpb3JlYWQ4KGlvYWRkci0+bGJhbF9hZGRyKTsKLQotCWlmICgobnNlY3QgPT0gMHg1NSkgJiYgKGxiYWwgPT0gMHhhYSkpCi0JCXJldHVybiAxOwkvKiB3ZSBmb3VuZCBhIGRldmljZSAqLwotCi0JcmV0dXJuIDA7CQkvKiBub3RoaW5nIGZvdW5kICovCi19Ci0KIC8qKgogICoJYXRhX2Rldl9jbGFzc2lmeSAtIGRldGVybWluZSBkZXZpY2UgdHlwZSBiYXNlZCBvbiBBVEEtc3BlYyBzaWduYXR1cmUKICAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldCBmb3IgZGV2aWNlIHRvIGJlIGlkZW50aWZpZWQKQEAgLTkxMyw3NSArMTExNCw2IEBACiB9CiAKIC8qKgotICoJYXRhX2Rldl90cnlfY2xhc3NpZnkgLSBQYXJzZSByZXR1cm5lZCBBVEEgZGV2aWNlIHNpZ25hdHVyZQotICoJQGRldjogQVRBIGRldmljZSB0byBjbGFzc2lmeSAoc3RhcnRpbmcgYXQgemVybykKLSAqCUBwcmVzZW50OiBkZXZpY2Ugc2VlbXMgcHJlc2VudAotICoJQHJfZXJyOiBWYWx1ZSBvZiBlcnJvciByZWdpc3RlciBvbiBjb21wbGV0aW9uCi0gKgotICoJQWZ0ZXIgYW4gZXZlbnQgLS0gU1JTVCwgRS5ELkQuLCBvciBTQVRBIENPTVJFU0VUIC0tIG9jY3VycywKLSAqCWFuIEFUQS9BVEFQSS1kZWZpbmVkIHNldCBvZiB2YWx1ZXMgaXMgcGxhY2VkIGluIHRoZSBBVEEKLSAqCXNoYWRvdyByZWdpc3RlcnMsIGluZGljYXRpbmcgdGhlIHJlc3VsdHMgb2YgZGV2aWNlIGRldGVjdGlvbgotICoJYW5kIGRpYWdub3N0aWNzLgotICoKLSAqCVNlbGVjdCB0aGUgQVRBIGRldmljZSwgYW5kIHJlYWQgdGhlIHZhbHVlcyBmcm9tIHRoZSBBVEEgc2hhZG93Ci0gKglyZWdpc3RlcnMuICBUaGVuIHBhcnNlIGFjY29yZGluZyB0byB0aGUgRXJyb3IgcmVnaXN0ZXIgdmFsdWUsCi0gKglhbmQgdGhlIHNwZWMtZGVmaW5lZCB2YWx1ZXMgZXhhbWluZWQgYnkgYXRhX2Rldl9jbGFzc2lmeSgpLgotICoKLSAqCUxPQ0tJTkc6Ci0gKgljYWxsZXIuCi0gKgotICoJUkVUVVJOUzoKLSAqCURldmljZSB0eXBlIC0gJUFUQV9ERVZfQVRBLCAlQVRBX0RFVl9BVEFQSSBvciAlQVRBX0RFVl9OT05FLgotICovCi11bnNpZ25lZCBpbnQgYXRhX2Rldl90cnlfY2xhc3NpZnkoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgaW50IHByZXNlbnQsCi0JCQkJICB1OCAqcl9lcnIpCi17Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IGRldi0+bGluay0+YXA7Ci0Jc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKLQl1bnNpZ25lZCBpbnQgY2xhc3M7Ci0JdTggZXJyOwotCi0JYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgZGV2LT5kZXZubyk7Ci0KLQltZW1zZXQoJnRmLCAwLCBzaXplb2YodGYpKTsKLQotCWFwLT5vcHMtPnRmX3JlYWQoYXAsICZ0Zik7Ci0JZXJyID0gdGYuZmVhdHVyZTsKLQlpZiAocl9lcnIpCi0JCSpyX2VyciA9IGVycjsKLQotCS8qIHNlZSBpZiBkZXZpY2UgcGFzc2VkIGRpYWdzOiBjb250aW51ZSBhbmQgd2FybiBsYXRlciAqLwotCWlmIChlcnIgPT0gMCkKLQkJLyogZGlhZ25vc3RpYyBmYWlsIDogZG8gbm90aGluZyBfWUVUXyAqLwotCQlkZXYtPmhvcmthZ2UgfD0gQVRBX0hPUktBR0VfRElBR05PU1RJQzsKLQllbHNlIGlmIChlcnIgPT0gMSkKLQkJLyogZG8gbm90aGluZyAqLyA7Ci0JZWxzZSBpZiAoKGRldi0+ZGV2bm8gPT0gMCkgJiYgKGVyciA9PSAweDgxKSkKLQkJLyogZG8gbm90aGluZyAqLyA7Ci0JZWxzZQotCQlyZXR1cm4gQVRBX0RFVl9OT05FOwotCi0JLyogZGV0ZXJtaW5lIGlmIGRldmljZSBpcyBBVEEgb3IgQVRBUEkgKi8KLQljbGFzcyA9IGF0YV9kZXZfY2xhc3NpZnkoJnRmKTsKLQotCWlmIChjbGFzcyA9PSBBVEFfREVWX1VOS05PV04pIHsKLQkJLyogSWYgdGhlIGRldmljZSBmYWlsZWQgZGlhZ25vc3RpYywgaXQncyBsaWtlbHkgdG8KLQkJICogaGF2ZSByZXBvcnRlZCBpbmNvcnJlY3QgZGV2aWNlIHNpZ25hdHVyZSB0b28uCi0JCSAqIEFzc3VtZSBBVEEgZGV2aWNlIGlmIHRoZSBkZXZpY2Ugc2VlbXMgcHJlc2VudCBidXQKLQkJICogZGV2aWNlIHNpZ25hdHVyZSBpcyBpbnZhbGlkIHdpdGggZGlhZ25vc3RpYwotCQkgKiBmYWlsdXJlLgotCQkgKi8KLQkJaWYgKHByZXNlbnQgJiYgKGRldi0+aG9ya2FnZSAmIEFUQV9IT1JLQUdFX0RJQUdOT1NUSUMpKQotCQkJY2xhc3MgPSBBVEFfREVWX0FUQTsKLQkJZWxzZQotCQkJY2xhc3MgPSBBVEFfREVWX05PTkU7Ci0JfSBlbHNlIGlmICgoY2xhc3MgPT0gQVRBX0RFVl9BVEEpICYmIChhdGFfY2hrX3N0YXR1cyhhcCkgPT0gMCkpCi0JCWNsYXNzID0gQVRBX0RFVl9OT05FOwotCi0JcmV0dXJuIGNsYXNzOwotfQotCi0vKioKICAqCWF0YV9pZF9zdHJpbmcgLSBDb252ZXJ0IElERU5USUZZIERFVklDRSBwYWdlIGludG8gc3RyaW5nCiAgKglAaWQ6IElERU5USUZZIERFVklDRSByZXN1bHRzIHdlIHdpbGwgZXhhbWluZQogICoJQHM6IHN0cmluZyBpbnRvIHdoaWNoIGRhdGEgaXMgb3V0cHV0CkBAIC0xMDU5LDcgKzExOTEsNyBAQAogCX0KIH0KIAotc3RhdGljIHU2NCBhdGFfdGZfdG9fbGJhNDgoc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit1NjQgYXRhX3RmX3RvX2xiYTQ4KGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQogewogCXU2NCBzZWN0b3JzID0gMDsKIApAQCAtMTA3MCwxMCArMTIwMiwxMCBAQAogCXNlY3RvcnMgfD0gKHRmLT5sYmFtICYgMHhmZikgPDwgODsKIAlzZWN0b3JzIHw9ICh0Zi0+bGJhbCAmIDB4ZmYpOwogCi0JcmV0dXJuICsrc2VjdG9yczsKKwlyZXR1cm4gc2VjdG9yczsKIH0KIAotc3RhdGljIHU2NCBhdGFfdGZfdG9fbGJhKHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQordTY0IGF0YV90Zl90b19sYmEoY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCiB7CiAJdTY0IHNlY3RvcnMgPSAwOwogCkBAIC0xMDgyLDcgKzEyMTQsNyBAQAogCXNlY3RvcnMgfD0gKHRmLT5sYmFtICYgMHhmZikgPDwgODsKIAlzZWN0b3JzIHw9ICh0Zi0+bGJhbCAmIDB4ZmYpOwogCi0JcmV0dXJuICsrc2VjdG9yczsKKwlyZXR1cm4gc2VjdG9yczsKIH0KIAogLyoqCkBAIC0xMTI3LDkgKzEyNTksOSBAQAogCX0KIAogCWlmIChsYmE0OCkKLQkJKm1heF9zZWN0b3JzID0gYXRhX3RmX3RvX2xiYTQ4KCZ0Zik7CisJCSptYXhfc2VjdG9ycyA9IGF0YV90Zl90b19sYmE0OCgmdGYpICsgMTsKIAllbHNlCi0JCSptYXhfc2VjdG9ycyA9IGF0YV90Zl90b19sYmEoJnRmKTsKKwkJKm1heF9zZWN0b3JzID0gYXRhX3RmX3RvX2xiYSgmdGYpICsgMTsKIAlpZiAoZGV2LT5ob3JrYWdlICYgQVRBX0hPUktBR0VfSFBBX1NJWkUpCiAJCSgqbWF4X3NlY3RvcnMpLS07CiAJcmV0dXJuIDA7CkBAIC0xMjIwLDEyICsxMzUyLDEyIEBACiAJLyogcmVhZCBuYXRpdmUgbWF4IGFkZHJlc3MgKi8KIAlyYyA9IGF0YV9yZWFkX25hdGl2ZV9tYXhfYWRkcmVzcyhkZXYsICZuYXRpdmVfc2VjdG9ycyk7CiAJaWYgKHJjKSB7Ci0JCS8qIElmIEhQQSBpc24ndCBnb2luZyB0byBiZSB1bmxvY2tlZCwgc2tpcCBIUEEKLQkJICogcmVzaXppbmcgZnJvbSB0aGUgbmV4dCB0cnkuCisJCS8qIElmIGRldmljZSBhYm9ydGVkIHRoZSBjb21tYW5kIG9yIEhQQSBpc24ndCBnb2luZyB0bworCQkgKiBiZSB1bmxvY2tlZCwgc2tpcCBIUEEgcmVzaXppbmcuCiAJCSAqLwotCQlpZiAoIWF0YV9pZ25vcmVfaHBhKSB7CisJCWlmIChyYyA9PSAtRUFDQ0VTIHx8ICFhdGFfaWdub3JlX2hwYSkgewogCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsICJIUEEgc3VwcG9ydCBzZWVtcyAiCi0JCQkJICAgICAgICJicm9rZW4sIHdpbGwgc2tpcCBIUEEgaGFuZGxpbmdcbiIpOworCQkJCSAgICAgICAiYnJva2VuLCBza2lwcGluZyBIUEEgaGFuZGxpbmdcbiIpOwogCQkJZGV2LT5ob3JrYWdlIHw9IEFUQV9IT1JLQUdFX0JST0tFTl9IUEE7CiAKIAkJCS8qIHdlIGNhbiBjb250aW51ZSBpZiBkZXZpY2UgYWJvcnRlZCB0aGUgY29tbWFuZCAqLwpAQCAtMTI4OSw4OSArMTQyMSw2IEBACiB9CiAKIC8qKgotICoJYXRhX25vb3BfZGV2X3NlbGVjdCAtIFNlbGVjdCBkZXZpY2UgMC8xIG9uIEFUQSBidXMKLSAqCUBhcDogQVRBIGNoYW5uZWwgdG8gbWFuaXB1bGF0ZQotICoJQGRldmljZTogQVRBIGRldmljZSAobnVtYmVyZWQgZnJvbSB6ZXJvKSB0byBzZWxlY3QKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIG5vIGFjdHVhbCBmdW5jdGlvbi4KLSAqCi0gKglNYXkgYmUgdXNlZCBhcyB0aGUgZGV2X3NlbGVjdCgpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCi0gKgotICoJTE9DS0lORzoKLSAqCWNhbGxlci4KLSAqLwotdm9pZCBhdGFfbm9vcF9kZXZfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpCi17Ci19Ci0KLQotLyoqCi0gKglhdGFfc3RkX2Rldl9zZWxlY3QgLSBTZWxlY3QgZGV2aWNlIDAvMSBvbiBBVEEgYnVzCi0gKglAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKLSAqCUBkZXZpY2U6IEFUQSBkZXZpY2UgKG51bWJlcmVkIGZyb20gemVybykgdG8gc2VsZWN0Ci0gKgotICoJVXNlIHRoZSBtZXRob2QgZGVmaW5lZCBpbiB0aGUgQVRBIHNwZWNpZmljYXRpb24gdG8KLSAqCW1ha2UgZWl0aGVyIGRldmljZSAwLCBvciBkZXZpY2UgMSwgYWN0aXZlIG9uIHRoZQotICoJQVRBIGNoYW5uZWwuICBXb3JrcyB3aXRoIGJvdGggUElPIGFuZCBNTUlPLgotICoKLSAqCU1heSBiZSB1c2VkIGFzIHRoZSBkZXZfc2VsZWN0KCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJY2FsbGVyLgotICovCi0KLXZvaWQgYXRhX3N0ZF9kZXZfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpCi17Ci0JdTggdG1wOwotCi0JaWYgKGRldmljZSA9PSAwKQotCQl0bXAgPSBBVEFfREVWSUNFX09CUzsKLQllbHNlCi0JCXRtcCA9IEFUQV9ERVZJQ0VfT0JTIHwgQVRBX0RFVjE7Ci0KLQlpb3dyaXRlOCh0bXAsIGFwLT5pb2FkZHIuZGV2aWNlX2FkZHIpOwotCWF0YV9wYXVzZShhcCk7CQkvKiBuZWVkZWQ7IGFsc28gZmx1c2hlcywgZm9yIG1taW8gKi8KLX0KLQotLyoqCi0gKglhdGFfZGV2X3NlbGVjdCAtIFNlbGVjdCBkZXZpY2UgMC8xIG9uIEFUQSBidXMKLSAqCUBhcDogQVRBIGNoYW5uZWwgdG8gbWFuaXB1bGF0ZQotICoJQGRldmljZTogQVRBIGRldmljZSAobnVtYmVyZWQgZnJvbSB6ZXJvKSB0byBzZWxlY3QKLSAqCUB3YWl0OiBub24temVybyB0byB3YWl0IGZvciBTdGF0dXMgcmVnaXN0ZXIgQlNZIGJpdCB0byBjbGVhcgotICoJQGNhbl9zbGVlcDogbm9uLXplcm8gaWYgY29udGV4dCBhbGxvd3Mgc2xlZXBpbmcKLSAqCi0gKglVc2UgdGhlIG1ldGhvZCBkZWZpbmVkIGluIHRoZSBBVEEgc3BlY2lmaWNhdGlvbiB0bwotICoJbWFrZSBlaXRoZXIgZGV2aWNlIDAsIG9yIGRldmljZSAxLCBhY3RpdmUgb24gdGhlCi0gKglBVEEgY2hhbm5lbC4KLSAqCi0gKglUaGlzIGlzIGEgaGlnaC1sZXZlbCB2ZXJzaW9uIG9mIGF0YV9zdGRfZGV2X3NlbGVjdCgpLAotICoJd2hpY2ggYWRkaXRpb25hbGx5IHByb3ZpZGVzIHRoZSBzZXJ2aWNlcyBvZiBpbnNlcnRpbmcKLSAqCXRoZSBwcm9wZXIgcGF1c2VzIGFuZCBzdGF0dXMgcG9sbGluZywgd2hlcmUgbmVlZGVkLgotICoKLSAqCUxPQ0tJTkc6Ci0gKgljYWxsZXIuCi0gKi8KLQotdm9pZCBhdGFfZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCQkJICAgdW5zaWduZWQgaW50IHdhaXQsIHVuc2lnbmVkIGludCBjYW5fc2xlZXApCi17Ci0JaWYgKGF0YV9tc2dfcHJvYmUoYXApKQotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywgImF0YV9kZXZfc2VsZWN0OiBFTlRFUiwgIgotCQkJCSJkZXZpY2UgJXUsIHdhaXQgJXVcbiIsIGRldmljZSwgd2FpdCk7Ci0KLQlpZiAod2FpdCkKLQkJYXRhX3dhaXRfaWRsZShhcCk7Ci0KLQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCBkZXZpY2UpOwotCi0JaWYgKHdhaXQpIHsKLQkJaWYgKGNhbl9zbGVlcCAmJiBhcC0+bGluay5kZXZpY2VbZGV2aWNlXS5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKQotCQkJbXNsZWVwKDE1MCk7Ci0JCWF0YV93YWl0X2lkbGUoYXApOwotCX0KLX0KLQotLyoqCiAgKglhdGFfZHVtcF9pZCAtIElERU5USUZZIERFVklDRSBpbmZvIGRlYnVnZ2luZyBvdXRwdXQKICAqCUBpZDogSURFTlRJRlkgREVWSUNFIHBhZ2UgdG8gZHVtcAogICoKQEAgLTE0OTgsOCArMTU0Nyw3IEBACiAgKglMT0NLSU5HOgogICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgogICovCi1zdGF0aWMgdm9pZCBhdGFfcGlvX3F1ZXVlX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCAqZGF0YSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlbGF5KQordm9pZCBhdGFfcGlvX3F1ZXVlX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAlhcC0+cG9ydF90YXNrX2RhdGEgPSBkYXRhOwogCkBAIC0xNTI0LDcgKzE1NzIsNyBAQAogCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmFwLT5wb3J0X3Rhc2spOwogCiAJaWYgKGF0YV9tc2dfY3RsKGFwKSkKLQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0RFQlVHLCAiJXM6IEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9ERUJVRywgIiVzOiBFWElUXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0YV9xY19jb21wbGV0ZV9pbnRlcm5hbChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQpAQCAtMTg2MSw5ICsxOTA5LDggQEAKIAlpbnQgcmM7CiAKIAlpZiAoYXRhX21zZ19jdGwoYXApKQotCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICIlczogRU5URVJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgIiVzOiBFTlRFUlxuIiwgX19mdW5jX18pOwogCi0JYXRhX2Rldl9zZWxlY3QoYXAsIGRldi0+ZGV2bm8sIDEsIDEpOyAvKiBzZWxlY3QgZGV2aWNlIDAvMSAqLwogIHJldHJ5OgogCWF0YV90Zl9pbml0KGRldiwgJnRmKTsKIApAQCAtMTg5NiwyNCArMTk0MywzNCBAQAogCQkJCSAgICAgaWQsIHNpemVvZihpZFswXSkgKiBBVEFfSURfV09SRFMsIDApOwogCWlmIChlcnJfbWFzaykgewogCQlpZiAoZXJyX21hc2sgJiBBQ19FUlJfTk9ERVZfSElOVCkgewotCQkJRFBSSU5USygiYXRhJXUuJWQ6IE5PREVWIGFmdGVyIHBvbGxpbmcgZGV0ZWN0aW9uXG4iLAotCQkJCWFwLT5wcmludF9pZCwgZGV2LT5kZXZubyk7CisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCisJCQkJICAgICAgICJOT0RFViBhZnRlciBwb2xsaW5nIGRldGVjdGlvblxuIik7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCi0JCS8qIERldmljZSBvciBjb250cm9sbGVyIG1pZ2h0IGhhdmUgcmVwb3J0ZWQgdGhlIHdyb25nCi0JCSAqIGRldmljZSBjbGFzcy4gIEdpdmUgYSBzaG90IGF0IHRoZSBvdGhlciBJREVOVElGWSBpZgotCQkgKiB0aGUgY3VycmVudCBvbmUgaXMgYWJvcnRlZCBieSB0aGUgZGV2aWNlLgotCQkgKi8KLQkJaWYgKG1heV9mYWxsYmFjayAmJgotCQkgICAgKGVycl9tYXNrID09IEFDX0VSUl9ERVYpICYmICh0Zi5mZWF0dXJlICYgQVRBX0FCT1JURUQpKSB7Ci0JCQltYXlfZmFsbGJhY2sgPSAwOworCQlpZiAoKGVycl9tYXNrID09IEFDX0VSUl9ERVYpICYmICh0Zi5mZWF0dXJlICYgQVRBX0FCT1JURUQpKSB7CisJCQkvKiBEZXZpY2Ugb3IgY29udHJvbGxlciBtaWdodCBoYXZlIHJlcG9ydGVkCisJCQkgKiB0aGUgd3JvbmcgZGV2aWNlIGNsYXNzLiAgR2l2ZSBhIHNob3QgYXQgdGhlCisJCQkgKiBvdGhlciBJREVOVElGWSBpZiB0aGUgY3VycmVudCBvbmUgaXMKKwkJCSAqIGFib3J0ZWQgYnkgdGhlIGRldmljZS4KKwkJCSAqLworCQkJaWYgKG1heV9mYWxsYmFjaykgeworCQkJCW1heV9mYWxsYmFjayA9IDA7CiAKLQkJCWlmIChjbGFzcyA9PSBBVEFfREVWX0FUQSkKLQkJCQljbGFzcyA9IEFUQV9ERVZfQVRBUEk7Ci0JCQllbHNlCi0JCQkJY2xhc3MgPSBBVEFfREVWX0FUQTsKLQkJCWdvdG8gcmV0cnk7CisJCQkJaWYgKGNsYXNzID09IEFUQV9ERVZfQVRBKQorCQkJCQljbGFzcyA9IEFUQV9ERVZfQVRBUEk7CisJCQkJZWxzZQorCQkJCQljbGFzcyA9IEFUQV9ERVZfQVRBOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CisKKwkJCS8qIENvbnRyb2wgcmVhY2hlcyBoZXJlIGlmZiB0aGUgZGV2aWNlIGFib3J0ZWQKKwkJCSAqIGJvdGggZmxhdm9ycyBvZiBJREVOVElGWXMgd2hpY2ggaGFwcGVucworCQkJICogc29tZXRpbWVzIHdpdGggcGhhbnRvbSBkZXZpY2VzLgorCQkJICovCisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCisJCQkJICAgICAgICJib3RoIElERU5USUZZcyBhYm9ydGVkLCBhc3N1bWluZyBOT0RFVlxuIik7CisJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCiAJCXJjID0gLUVJTzsKQEAgLTIwNTgsMTUgKzIxMTUsMTYgQEAKIAogCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikgJiYgYXRhX21zZ19pbmZvKGFwKSkgewogCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgIiVzOiBFTlRFUi9FWElUIC0tIG5vZGV2XG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgICAgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgIiVzOiBFTlRFUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IEVOVEVSXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBzZXQgaG9ya2FnZSAqLwogCWRldi0+aG9ya2FnZSB8PSBhdGFfZGV2X2JsYWNrbGlzdGVkKGRldik7CisJYXRhX2ZvcmNlX2hvcmthZ2UoZGV2KTsKIAogCS8qIGxldCBBQ1BJIHdvcmsgaXRzIG1hZ2ljICovCiAJcmMgPSBhdGFfYWNwaV9vbl9kZXZjZmcoZGV2KTsKQEAgLTIwODMsNyArMjE0MSw3IEBACiAJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywKIAkJCSAgICAgICAiJXM6IGNmZyA0OTolMDR4IDgyOiUwNHggODM6JTA0eCA4NDolMDR4ICIKIAkJCSAgICAgICAiODU6JTA0eCA4NjolMDR4IDg3OiUwNHggODg6JTA0eFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sCisJCQkgICAgICAgX19mdW5jX18sCiAJCQkgICAgICAgaWRbNDldLCBpZFs4Ml0sIGlkWzgzXSwgaWRbODRdLAogCQkJICAgICAgIGlkWzg1XSwgaWRbODZdLCBpZFs4N10sIGlkWzg4XSk7CiAKQEAgLTIyMDAsNiArMjI1OCw3IEBACiAJZWxzZSBpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKSB7CiAJCWNvbnN0IGNoYXIgKmNkYl9pbnRyX3N0cmluZyA9ICIiOwogCQljb25zdCBjaGFyICphdGFwaV9hbl9zdHJpbmcgPSAiIjsKKwkJY29uc3QgY2hhciAqZG1hX2Rpcl9zdHJpbmcgPSAiIjsKIAkJdTMyIHNudGY7CiAKIAkJcmMgPSBhdGFwaV9jZGJfbGVuKGlkKTsKQEAgLTIyMTgsNyArMjI3Nyw3IEBACiAJCSAqIGNoYW5nZWQgbm90aWZpY2F0aW9ucyBhbmQgQVRBUEkgQU5zLgogCQkgKi8KIAkJaWYgKChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19BTikgJiYgYXRhX2lkX2hhc19hdGFwaV9BTihpZCkgJiYKLQkJICAgICghYXAtPm5yX3BtcF9saW5rcyB8fAorCQkgICAgKCFzYXRhX3BtcF9hdHRhY2hlZChhcCkgfHwKIAkJICAgICBzYXRhX3Njcl9yZWFkKCZhcC0+bGluaywgU0NSX05PVElGSUNBVElPTiwgJnNudGYpID09IDApKSB7CiAJCQl1bnNpZ25lZCBpbnQgZXJyX21hc2s7CiAKQEAgLTIyNDAsMTMgKzIyOTksMTkgQEAKIAkJCWNkYl9pbnRyX3N0cmluZyA9ICIsIENEQiBpbnRyIjsKIAkJfQogCisJCWlmIChhdGFwaV9kbWFkaXIgfHwgYXRhcGlfaWRfZG1hZGlyKGRldi0+aWQpKSB7CisJCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19ETUFESVI7CisJCQlkbWFfZGlyX3N0cmluZyA9ICIsIERNQURJUiI7CisJCX0KKwogCQkvKiBwcmludCBkZXZpY2UgaW5mbyB0byBkbWVzZyAqLwogCQlpZiAoYXRhX21zZ19kcnYoYXApICYmIHByaW50X2luZm8pCiAJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywKLQkJCQkgICAgICAgIkFUQVBJOiAlcywgJXMsIG1heCAlcyVzJXNcbiIsCisJCQkJICAgICAgICJBVEFQSTogJXMsICVzLCBtYXggJXMlcyVzJXNcbiIsCiAJCQkJICAgICAgIG1vZGVsYnVmLCBmd3JldmJ1ZiwKIAkJCQkgICAgICAgYXRhX21vZGVfc3RyaW5nKHhmZXJfbWFzayksCi0JCQkJICAgICAgIGNkYl9pbnRyX3N0cmluZywgYXRhcGlfYW5fc3RyaW5nKTsKKwkJCQkgICAgICAgY2RiX2ludHJfc3RyaW5nLCBhdGFwaV9hbl9zdHJpbmcsCisJCQkJICAgICAgIGRtYV9kaXJfc3RyaW5nKTsKIAl9CiAKIAkvKiBkZXRlcm1pbmUgbWF4X3NlY3RvcnMgKi8KQEAgLTIzMDYsMTUgKzIzNzEsMTIgQEAKIAkJfQogCX0KIAotCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKLQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IEVYSVQsIGRydl9zdGF0ID0gMHgleFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgYXRhX2Noa19zdGF0dXMoYXApKTsKIAlyZXR1cm4gMDsKIAogZXJyX291dF9ub3N1cDoKIAlpZiAoYXRhX21zZ19wcm9iZShhcCkpCiAJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywKLQkJCSAgICAgICAiJXM6IEVYSVQsIGVyclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgICAiJXM6IEVYSVQsIGVyclxuIiwgX19mdW5jX18pOwogCXJldHVybiByYzsKIH0KIApAQCAtMjQ0Niw3ICsyNTA4LDcgQEAKIAkgICBzcGVjaWZpYyBzZXF1ZW5jZSBiYXNzLWFja3dhcmRzIHNvIHRoYXQgUERJQUctIGlzIHJlbGVhc2VkIGJ5CiAJICAgdGhlIHNsYXZlIGRldmljZSAqLwogCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rKSB7CisJYXRhX2xpbmtfZm9yX2VhY2hfZGV2X3JldmVyc2UoZGV2LCAmYXAtPmxpbmspIHsKIAkJaWYgKHRyaWVzW2Rldi0+ZGV2bm9dKQogCQkJZGV2LT5jbGFzcyA9IGNsYXNzZXNbZGV2LT5kZXZub107CiAKQEAgLTMwNjksMTYgKzMxMzEsMjEgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCS8qIE9sZCBDRkEgbWF5IHJlZnVzZSB0aGlzIGNvbW1hbmQsIHdoaWNoIGlzIGp1c3QgZmluZSAqLwotCWlmIChkZXYtPnhmZXJfc2hpZnQgPT0gQVRBX1NISUZUX1BJTyAmJiBhdGFfaWRfaXNfY2ZhKGRldi0+aWQpKQotCQlpZ25fZGV2X2VyciA9IDE7Ci0KLQkvKiBTb21lIHZlcnkgb2xkIGRldmljZXMgYW5kIHNvbWUgYmFkIG5ld2VyIG9uZXMgZmFpbCBhbnkga2luZCBvZgotCSAgIFNFVF9YRkVSTU9ERSByZXF1ZXN0IGJ1dCBzdXBwb3J0IFBJTzAtMiB0aW1pbmdzIGFuZCBubyBJT1JEWSAqLwotCWlmIChkZXYtPnhmZXJfc2hpZnQgPT0gQVRBX1NISUZUX1BJTyAmJiAhYXRhX2lkX2hhc19pb3JkeShkZXYtPmlkKSAmJgotCQkJZGV2LT5waW9fbW9kZSA8PSBYRkVSX1BJT18yKQotCQlpZ25fZGV2X2VyciA9IDE7Ci0KKwlpZiAoZGV2LT54ZmVyX3NoaWZ0ID09IEFUQV9TSElGVF9QSU8pIHsKKwkJLyogT2xkIENGQSBtYXkgcmVmdXNlIHRoaXMgY29tbWFuZCwgd2hpY2ggaXMganVzdCBmaW5lICovCisJCWlmIChhdGFfaWRfaXNfY2ZhKGRldi0+aWQpKQorCQkJaWduX2Rldl9lcnIgPSAxOworCQkvKiBDYXRjaCBzZXZlcmFsIGJyb2tlbiBnYXJiYWdlIGVtdWxhdGlvbnMgcGx1cyBzb21lIHByZQorCQkgICBBVEEgZGV2aWNlcyAqLworCQlpZiAoYXRhX2lkX21ham9yX3ZlcnNpb24oZGV2LT5pZCkgPT0gMCAmJgorCQkJCQlkZXYtPnBpb19tb2RlIDw9IFhGRVJfUElPXzIpCisJCQlpZ25fZGV2X2VyciA9IDE7CisJCS8qIFNvbWUgdmVyeSBvbGQgZGV2aWNlcyBhbmQgc29tZSBiYWQgbmV3ZXIgb25lcyBmYWlsCisJCSAgIGFueSBraW5kIG9mIFNFVF9YRkVSTU9ERSByZXF1ZXN0IGJ1dCBzdXBwb3J0IFBJTzAtMgorCQkgICB0aW1pbmdzIGFuZCBubyBJT1JEWSAqLworCQlpZiAoIWF0YV9pZF9oYXNfaW9yZHkoZGV2LT5pZCkgJiYgZGV2LT5waW9fbW9kZSA8PSBYRkVSX1BJT18yKQorCQkJaWduX2Rldl9lcnIgPSAxOworCX0KIAkvKiBFYXJseSBNV0RNQSBkZXZpY2VzIGRvIERNQSBidXQgZG9uJ3QgYWxsb3cgRE1BIG1vZGUgc2V0dGluZy4KIAkgICBEb24ndCBmYWlsIGFuIE1XRE1BMCBzZXQgSUZGIHRoZSBkZXZpY2UgaW5kaWNhdGVzIGl0IGlzIGluIE1XRE1BMCAqLwogCWlmIChkZXYtPnhmZXJfc2hpZnQgPT0gQVRBX1NISUZUX01XRE1BICYmCkBAIC0zMTUwLDYgKzMyMTcsNyBAQAogCQkJbW9kZV9tYXNrID0gQVRBX0RNQV9NQVNLX0NGQTsKIAogCQlhdGFfZGV2X3hmZXJtYXNrKGRldik7CisJCWF0YV9mb3JjZV94ZmVybWFzayhkZXYpOwogCiAJCXBpb19tYXNrID0gYXRhX3BhY2tfeGZlcm1hc2soZGV2LT5waW9fbWFzaywgMCwgMCk7CiAJCWRtYV9tYXNrID0gYXRhX3BhY2tfeGZlcm1hc2soMCwgZGV2LT5td2RtYV9tYXNrLCBkZXYtPnVkbWFfbWFzayk7CkBAIC0zMjIxLDE3MCArMzI4OSw3MyBAQAogfQogCiAvKioKLSAqCWF0YV90Zl90b19ob3N0IC0gaXNzdWUgQVRBIHRhc2tmaWxlIHRvIGhvc3QgY29udHJvbGxlcgotICoJQGFwOiBwb3J0IHRvIHdoaWNoIGNvbW1hbmQgaXMgYmVpbmcgaXNzdWVkCi0gKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKKyAqCWF0YV93YWl0X3JlYWR5IC0gd2FpdCBmb3IgbGluayB0byBiZWNvbWUgcmVhZHkKKyAqCUBsaW5rOiBsaW5rIHRvIGJlIHdhaXRlZCBvbgorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCisgKglAY2hlY2tfcmVhZHk6IGNhbGxiYWNrIHRvIGNoZWNrIGxpbmsgcmVhZGluZXNzCiAgKgotICoJSXNzdWVzIEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgdG8gQVRBIGhvc3QgY29udHJvbGxlciwKLSAqCXdpdGggcHJvcGVyIHN5bmNocm9uaXphdGlvbiB3aXRoIGludGVycnVwdCBoYW5kbGVyIGFuZAotICoJb3RoZXIgdGhyZWFkcy4KKyAqCVdhaXQgZm9yIEBsaW5rIHRvIGJlY29tZSByZWFkeS4gIEBjaGVja19yZWFkeSBzaG91bGQgcmV0dXJuCisgKglwb3NpdGl2ZSBudW1iZXIgaWYgQGxpbmsgaXMgcmVhZHksIDAgaWYgaXQgaXNuJ3QsIC1FTk9ERVYgaWYKKyAqCWxpbmsgZG9lc24ndCBzZWVtIHRvIGJlIG9jY3VwaWVkLCBvdGhlciBlcnJubyBmb3Igb3RoZXIgZXJyb3IKKyAqCWNvbmRpdGlvbnMuCisgKgorICoJVHJhbnNpZW50IC1FTk9ERVYgY29uZGl0aW9ucyBhcmUgYWxsb3dlZCBmb3IKKyAqCUFUQV9UTU9VVF9GRl9XQUlULgogICoKICAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGF0YV90Zl90b19ob3N0KHN0cnVjdCBhdGFfcG9ydCAqYXAsCi0JCQkJICBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKLXsKLQlhcC0+b3BzLT50Zl9sb2FkKGFwLCB0Zik7Ci0JYXAtPm9wcy0+ZXhlY19jb21tYW5kKGFwLCB0Zik7Ci19Ci0KLS8qKgotICoJYXRhX2J1c3lfc2xlZXAgLSBzbGVlcCB1bnRpbCBCU1kgY2xlYXJzLCBvciB0aW1lb3V0Ci0gKglAYXA6IHBvcnQgY29udGFpbmluZyBzdGF0dXMgcmVnaXN0ZXIgdG8gYmUgcG9sbGVkCi0gKglAdG1vdXRfcGF0OiBpbXBhdGllbmNlIHRpbWVvdXQKLSAqCUB0bW91dDogb3ZlcmFsbCB0aW1lb3V0Ci0gKgotICoJU2xlZXAgdW50aWwgQVRBIFN0YXR1cyByZWdpc3RlciBiaXQgQlNZIGNsZWFycywKLSAqCW9yIGEgdGltZW91dCBvY2N1cnMuCi0gKgotICoJTE9DS0lORzoKLSAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKS4KKyAqCUVIIGNvbnRleHQuCiAgKgogICoJUkVUVVJOUzoKLSAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqCTAgaWYgQGxpbmtlIGlzIHJlYWR5IGJlZm9yZSBAZGVhZGxpbmU7IG90aGVyd2lzZSwgLWVycm5vLgogICovCi1pbnQgYXRhX2J1c3lfc2xlZXAoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJICAgdW5zaWduZWQgbG9uZyB0bW91dF9wYXQsIHVuc2lnbmVkIGxvbmcgdG1vdXQpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lcl9zdGFydCwgdGltZW91dDsKLQl1OCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBhdGFfYnVzeV93YWl0KGFwLCBBVEFfQlVTWSwgMzAwKTsKLQl0aW1lcl9zdGFydCA9IGppZmZpZXM7Ci0JdGltZW91dCA9IHRpbWVyX3N0YXJ0ICsgdG1vdXRfcGF0OwotCXdoaWxlIChzdGF0dXMgIT0gMHhmZiAmJiAoc3RhdHVzICYgQVRBX0JVU1kpICYmCi0JICAgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCW1zbGVlcCg1MCk7Ci0JCXN0YXR1cyA9IGF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZLCAzKTsKLQl9Ci0KLQlpZiAoc3RhdHVzICE9IDB4ZmYgJiYgKHN0YXR1cyAmIEFUQV9CVVNZKSkKLQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsCi0JCQkJInBvcnQgaXMgc2xvdyB0byByZXNwb25kLCBwbGVhc2UgYmUgcGF0aWVudCAiCi0JCQkJIihTdGF0dXMgMHgleClcbiIsIHN0YXR1cyk7Ci0KLQl0aW1lb3V0ID0gdGltZXJfc3RhcnQgKyB0bW91dDsKLQl3aGlsZSAoc3RhdHVzICE9IDB4ZmYgJiYgKHN0YXR1cyAmIEFUQV9CVVNZKSAmJgotCSAgICAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewotCQltc2xlZXAoNTApOwotCQlzdGF0dXMgPSBhdGFfY2hrX3N0YXR1cyhhcCk7Ci0JfQotCi0JaWYgKHN0YXR1cyA9PSAweGZmKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkgewotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAicG9ydCBmYWlsZWQgdG8gcmVzcG9uZCAiCi0JCQkJIiglbHUgc2VjcywgU3RhdHVzIDB4JXgpXG4iLAotCQkJCXRtb3V0IC8gSFosIHN0YXR1cyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJYXRhX3dhaXRfYWZ0ZXJfcmVzZXQgLSB3YWl0IGJlZm9yZSBjaGVja2luZyBzdGF0dXMgYWZ0ZXIgcmVzZXQKLSAqCUBhcDogcG9ydCBjb250YWluaW5nIHN0YXR1cyByZWdpc3RlciB0byBiZSBwb2xsZWQKLSAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgotICoKLSAqCUFmdGVyIHJlc2V0LCB3ZSBuZWVkIHRvIHBhdXNlIGEgd2hpbGUgYmVmb3JlIHJlYWRpbmcgc3RhdHVzLgotICoJQWxzbywgY2VydGFpbiBjb21iaW5hdGlvbiBvZiBjb250cm9sbGVyIGFuZCBkZXZpY2UgcmVwb3J0IDB4ZmYKLSAqCWZvciBzb21lIGR1cmF0aW9uIChlLmcuIHVudGlsIFNBVEEgUEhZIGlzIHVwIGFuZCBydW5uaW5nKQotICoJd2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgZW1wdHkgcG9ydCBpbiBBVEEgd29ybGQuICBUaGlzCi0gKglmdW5jdGlvbiBhbHNvIHdhaXRzIGZvciBzdWNoIGRldmljZXMgdG8gZ2V0IG91dCBvZiAweGZmCi0gKglzdGF0dXMuCi0gKgotICoJTE9DS0lORzoKLSAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKS4KLSAqLwotdm9pZCBhdGFfd2FpdF9hZnRlcl9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQotewotCXVuc2lnbmVkIGxvbmcgdW50aWwgPSBqaWZmaWVzICsgQVRBX1RNT1VUX0ZGX1dBSVQ7Ci0KLQlpZiAodGltZV9iZWZvcmUodW50aWwsIGRlYWRsaW5lKSkKLQkJZGVhZGxpbmUgPSB1bnRpbDsKLQotCS8qIFNwZWMgbWFuZGF0ZXMgIj49IDJtcyIgYmVmb3JlIGNoZWNraW5nIHN0YXR1cy4gIFdlIHdhaXQKLQkgKiAxNTBtcywgYmVjYXVzZSB0aGF0IHdhcyB0aGUgbWFnaWMgZGVsYXkgdXNlZCBmb3IgQVRBUEkKLQkgKiBkZXZpY2VzIGluIEhhbGUgTGFuZGlzJ3MgQVRBRFJWUiwgZm9yIHRoZSBwZXJpb2Qgb2YgdGltZQotCSAqIGJldHdlZW4gd2hlbiB0aGUgQVRBIGNvbW1hbmQgcmVnaXN0ZXIgaXMgd3JpdHRlbiwgYW5kIHRoZW4KLQkgKiBzdGF0dXMgaXMgY2hlY2tlZC4gIEJlY2F1c2Ugd2FpdGluZyBmb3IgImEgd2hpbGUiIGJlZm9yZQotCSAqIGNoZWNraW5nIHN0YXR1cyBpcyBmaW5lLCBwb3N0IFNSU1QsIHdlIHBlcmZvcm0gdGhpcyBtYWdpYwotCSAqIGRlbGF5IGhlcmUgYXMgd2VsbC4KLQkgKgotCSAqIE9sZCBkcml2ZXJzL2lkZSB1c2VzIHRoZSAybVMgcnVsZSBhbmQgdGhlbiB3YWl0cyBmb3IgcmVhZHkuCi0JICovCi0JbXNsZWVwKDE1MCk7Ci0KLQkvKiBXYWl0IGZvciAweGZmIHRvIGNsZWFyLiAgU29tZSBTQVRBIGRldmljZXMgdGFrZSBhIGxvbmcgdGltZQotCSAqIHRvIGNsZWFyIDB4ZmYgYWZ0ZXIgcmVzZXQuICBGb3IgZXhhbXBsZSwgSEhENDI0MDIwRjdTVjAwCi0JICogaVZEUiBuZWVkcyA+PSA4MDBtcyB3aGlsZS4gIFF1YW50dW0gR29WYXVsdCBuZWVkcyBldmVuIG1vcmUKLQkgKiB0aGFuIHRoYXQuCi0JICoKLQkgKiBOb3RlIHRoYXQgc29tZSBQQVRBIGNvbnRyb2xsZXJzIChwYXRhX2FsaSkgZXhwbG9kZSBpZgotCSAqIHN0YXR1cyByZWdpc3RlciBpcyByZWFkIG1vcmUgdGhhbiBvbmNlIHdoZW4gdGhlcmUncyBubwotCSAqIGRldmljZSBhdHRhY2hlZC4KLQkgKi8KLQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0FUQSkgewotCQl3aGlsZSAoMSkgewotCQkJdTggc3RhdHVzID0gYXRhX2Noa19zdGF0dXMoYXApOwotCi0JCQlpZiAoc3RhdHVzICE9IDB4ZmYgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBkZWFkbGluZSkpCi0JCQkJcmV0dXJuOwotCi0JCQltc2xlZXAoNTApOwotCQl9Ci0JfQotfQotCi0vKioKLSAqCWF0YV93YWl0X3JlYWR5IC0gc2xlZXAgdW50aWwgQlNZIGNsZWFycywgb3IgdGltZW91dAotICoJQGFwOiBwb3J0IGNvbnRhaW5pbmcgc3RhdHVzIHJlZ2lzdGVyIHRvIGJlIHBvbGxlZAotICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCi0gKgotICoJU2xlZXAgdW50aWwgQVRBIFN0YXR1cyByZWdpc3RlciBiaXQgQlNZIGNsZWFycywgb3IgdGltZW91dAotICoJb2NjdXJzLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCi0gKgotICoJUkVUVVJOUzoKLSAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KLSAqLwotaW50IGF0YV93YWl0X3JlYWR5KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCitpbnQgYXRhX3dhaXRfcmVhZHkoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lLAorCQkgICBpbnQgKCpjaGVja19yZWFkeSkoc3RydWN0IGF0YV9saW5rICpsaW5rKSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKKwl1bnNpZ25lZCBsb25nIG5vZGV2X2RlYWRsaW5lID0gc3RhcnQgKyBBVEFfVE1PVVRfRkZfV0FJVDsKIAlpbnQgd2FybmVkID0gMDsKIAotCXdoaWxlICgxKSB7Ci0JCXU4IHN0YXR1cyA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKLQkJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCWlmICh0aW1lX2FmdGVyKG5vZGV2X2RlYWRsaW5lLCBkZWFkbGluZSkpCisJCW5vZGV2X2RlYWRsaW5lID0gZGVhZGxpbmU7CiAKLQkJaWYgKCEoc3RhdHVzICYgQVRBX0JVU1kpKQorCXdoaWxlICgxKSB7CisJCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwkJaW50IHJlYWR5LCB0bXA7CisKKwkJcmVhZHkgPSB0bXAgPSBjaGVja19yZWFkeShsaW5rKTsKKwkJaWYgKHJlYWR5ID4gMCkKIAkJCXJldHVybiAwOwotCQlpZiAoIWF0YV9saW5rX29ubGluZSgmYXAtPmxpbmspICYmIHN0YXR1cyA9PSAweGZmKQotCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJLyogLUVOT0RFViBjb3VsZCBiZSB0cmFuc2llbnQuICBJZ25vcmUgLUVOT0RFViBpZiBsaW5rCisJCSAqIGlzIG9ubGluZS4gIEFsc28sIHNvbWUgU0FUQSBkZXZpY2VzIHRha2UgYSBsb25nCisJCSAqIHRpbWUgdG8gY2xlYXIgMHhmZiBhZnRlciByZXNldC4gIEZvciBleGFtcGxlLAorCQkgKiBISEQ0MjQwMjBGN1NWMDAgaVZEUiBuZWVkcyA+PSA4MDBtcyB3aGlsZSBRdWFudHVtCisJCSAqIEdvVmF1bHQgbmVlZHMgZXZlbiBtb3JlIHRoYW4gdGhhdC4gIFdhaXQgZm9yCisJCSAqIEFUQV9UTU9VVF9GRl9XQUlUIG9uIC1FTk9ERVYgaWYgbGluayBpc24ndCBvZmZsaW5lLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgc29tZSBQQVRBIGNvbnRyb2xsZXJzIChwYXRhX2FsaSkgZXhwbG9kZQorCQkgKiBpZiBzdGF0dXMgcmVnaXN0ZXIgaXMgcmVhZCBtb3JlIHRoYW4gb25jZSB3aGVuCisJCSAqIHRoZXJlJ3Mgbm8gZGV2aWNlIGF0dGFjaGVkLgorCQkgKi8KKwkJaWYgKHJlYWR5ID09IC1FTk9ERVYpIHsKKwkJCWlmIChhdGFfbGlua19vbmxpbmUobGluaykpCisJCQkJcmVhZHkgPSAwOworCQkJZWxzZSBpZiAoKGxpbmstPmFwLT5mbGFncyAmIEFUQV9GTEFHX1NBVEEpICYmCisJCQkJICFhdGFfbGlua19vZmZsaW5lKGxpbmspICYmCisJCQkJIHRpbWVfYmVmb3JlKG5vdywgbm9kZXZfZGVhZGxpbmUpKQorCQkJCXJlYWR5ID0gMDsKKwkJfQorCisJCWlmIChyZWFkeSkKKwkJCXJldHVybiByZWFkeTsKIAkJaWYgKHRpbWVfYWZ0ZXIobm93LCBkZWFkbGluZSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCiAJCWlmICghd2FybmVkICYmIHRpbWVfYWZ0ZXIobm93LCBzdGFydCArIDUgKiBIWikgJiYKIAkJICAgIChkZWFkbGluZSAtIG5vdyA+IDMgKiBIWikpIHsKLQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLAotCQkJCSJwb3J0IGlzIHNsb3cgdG8gcmVzcG9uZCwgcGxlYXNlIGJlIHBhdGllbnQgIgotCQkJCSIoU3RhdHVzIDB4JXgpXG4iLCBzdGF0dXMpOworCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywKKwkJCQkibGluayBpcyBzbG93IHRvIHJlc3BvbmQsIHBsZWFzZSBiZSBwYXRpZW50ICIKKwkJCQkiKHJlYWR5PSVkKVxuIiwgdG1wKTsKIAkJCXdhcm5lZCA9IDE7CiAJCX0KIApAQCAtMzM5MiwxNzkgKzMzNjMsMjYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXRhX2J1c19wb3N0X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZtYXNrLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKLXsKLQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBkZXYwID0gZGV2bWFzayAmICgxIDw8IDApOwotCXVuc2lnbmVkIGludCBkZXYxID0gZGV2bWFzayAmICgxIDw8IDEpOwotCWludCByYywgcmV0ID0gMDsKLQotCS8qIGlmIGRldmljZSAwIHdhcyBmb3VuZCBpbiBhdGFfZGV2Y2hrLCB3YWl0IGZvciBpdHMKLQkgKiBCU1kgYml0IHRvIGNsZWFyCi0JICovCi0JaWYgKGRldjApIHsKLQkJcmMgPSBhdGFfd2FpdF9yZWFkeShhcCwgZGVhZGxpbmUpOwotCQlpZiAocmMpIHsKLQkJCWlmIChyYyAhPSAtRU5PREVWKQotCQkJCXJldHVybiByYzsKLQkJCXJldCA9IHJjOwotCQl9Ci0JfQotCi0JLyogaWYgZGV2aWNlIDEgd2FzIGZvdW5kIGluIGF0YV9kZXZjaGssIHdhaXQgZm9yIHJlZ2lzdGVyCi0JICogYWNjZXNzIGJyaWVmbHksIHRoZW4gd2FpdCBmb3IgQlNZIHRvIGNsZWFyLgotCSAqLwotCWlmIChkZXYxKSB7Ci0JCWludCBpOwotCi0JCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDEpOwotCi0JCS8qIFdhaXQgZm9yIHJlZ2lzdGVyIGFjY2Vzcy4gIFNvbWUgQVRBUEkgZGV2aWNlcyBmYWlsCi0JCSAqIHRvIHNldCBuc2VjdC9sYmFsIGFmdGVyIHJlc2V0LCBzbyBkb24ndCB3YXN0ZSB0b28KLQkJICogbXVjaCB0aW1lIG9uIGl0LiAgV2UncmUgZ29ubmEgd2FpdCBmb3IgIUJTWSBhbnl3YXkuCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCQl1OCBuc2VjdCwgbGJhbDsKLQotCQkJbnNlY3QgPSBpb3JlYWQ4KGlvYWRkci0+bnNlY3RfYWRkcik7Ci0JCQlsYmFsID0gaW9yZWFkOChpb2FkZHItPmxiYWxfYWRkcik7Ci0JCQlpZiAoKG5zZWN0ID09IDEpICYmIChsYmFsID09IDEpKQotCQkJCWJyZWFrOwotCQkJbXNsZWVwKDUwKTsJLyogZ2l2ZSBkcml2ZSBhIGJyZWF0aGVyICovCi0JCX0KLQotCQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7Ci0JCWlmIChyYykgewotCQkJaWYgKHJjICE9IC1FTk9ERVYpCi0JCQkJcmV0dXJuIHJjOwotCQkJcmV0ID0gcmM7Ci0JCX0KLQl9Ci0KLQkvKiBpcyBhbGwgdGhpcyByZWFsbHkgbmVjZXNzYXJ5PyAqLwotCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOwotCWlmIChkZXYxKQotCQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAxKTsKLQlpZiAoZGV2MCkKLQkJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGF0YV9idXNfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZtYXNrLAotCQkJICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQotewotCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7Ci0KLQlEUFJJTlRLKCJhdGEldTogYnVzIHJlc2V0IHZpYSBTUlNUXG4iLCBhcC0+cHJpbnRfaWQpOwotCi0JLyogc29mdHdhcmUgcmVzZXQuICBjYXVzZXMgZGV2MCB0byBiZSBzZWxlY3RlZCAqLwotCWlvd3JpdGU4KGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOwotCXVkZWxheSgyMCk7CS8qIEZJWE1FOiBmbHVzaCAqLwotCWlvd3JpdGU4KGFwLT5jdGwgfCBBVEFfU1JTVCwgaW9hZGRyLT5jdGxfYWRkcik7Ci0JdWRlbGF5KDIwKTsJLyogRklYTUU6IGZsdXNoICovCi0JaW93cml0ZTgoYXAtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7Ci0KLQkvKiB3YWl0IGEgd2hpbGUgYmVmb3JlIGNoZWNraW5nIHN0YXR1cyAqLwotCWF0YV93YWl0X2FmdGVyX3Jlc2V0KGFwLCBkZWFkbGluZSk7Ci0KLQkvKiBCZWZvcmUgd2UgcGVyZm9ybSBwb3N0IHJlc2V0IHByb2Nlc3Npbmcgd2Ugd2FudCB0byBzZWUgaWYKLQkgKiB0aGUgYnVzIHNob3dzIDB4RkYgYmVjYXVzZSB0aGUgb2RkIGNsb3duIGZvcmdldHMgdGhlIEQ3Ci0JICogcHVsbGRvd24gcmVzaXN0b3IuCi0JICovCi0JaWYgKGF0YV9jaGtfc3RhdHVzKGFwKSA9PSAweEZGKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiBhdGFfYnVzX3Bvc3RfcmVzZXQoYXAsIGRldm1hc2ssIGRlYWRsaW5lKTsKLX0KLQogLyoqCi0gKglhdGFfYnVzX3Jlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IGFuZCBhc3NvY2lhdGVkIEFUQSBjaGFubmVsCi0gKglAYXA6IHBvcnQgdG8gcmVzZXQKKyAqCWF0YV93YWl0X2FmdGVyX3Jlc2V0IC0gd2FpdCBmb3IgbGluayB0byBiZWNvbWUgcmVhZHkgYWZ0ZXIgcmVzZXQKKyAqCUBsaW5rOiBsaW5rIHRvIGJlIHdhaXRlZCBvbgorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCisgKglAY2hlY2tfcmVhZHk6IGNhbGxiYWNrIHRvIGNoZWNrIGxpbmsgcmVhZGluZXNzCiAgKgotICoJVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IHRpbWUgd2UgYWN0dWFsbHkgc3RhcnQgaXNzdWluZwotICoJY29tbWFuZHMgdG8gdGhlIEFUQSBjaGFubmVsLiAgV2Ugd2FpdCBmb3IgQlNZIHRvIGNsZWFyLCB0aGVuCi0gKglpc3N1ZSBFWEVDVVRFIERFVklDRSBESUFHTk9TVElDIGNvbW1hbmQsIHBvbGxpbmcgZm9yIGl0cwotICoJcmVzdWx0LiAgRGV0ZXJtaW5lIHdoYXQgZGV2aWNlcywgaWYgYW55LCBhcmUgb24gdGhlIGNoYW5uZWwKLSAqCWJ5IGxvb2tpbmcgYXQgdGhlIGRldmljZSAwLzEgZXJyb3IgcmVnaXN0ZXIuICBMb29rIGF0IHRoZSBzaWduYXR1cmUKLSAqCXN0b3JlZCBpbiBlYWNoIGRldmljZSdzIHRhc2tmaWxlIHJlZ2lzdGVycywgdG8gZGV0ZXJtaW5lIGlmCi0gKgl0aGUgZGV2aWNlIGlzIEFUQSBvciBBVEFQSS4KKyAqCVdhaXQgZm9yIEBsaW5rIHRvIGJlY29tZSByZWFkeSBhZnRlciByZXNldC4KICAqCiAgKglMT0NLSU5HOgotICoJUENJL2V0Yy4gYnVzIHByb2JlIHNlbS4KLSAqCU9idGFpbnMgaG9zdCBsb2NrLgorICoJRUggY29udGV4dC4KICAqCi0gKglTSURFIEVGRkVDVFM6Ci0gKglTZXRzIEFUQV9GTEFHX0RJU0FCTEVEIGlmIGJ1cyByZXNldCBmYWlscy4KKyAqCVJFVFVSTlM6CisgKgkwIGlmIEBsaW5rZSBpcyByZWFkeSBiZWZvcmUgQGRlYWRsaW5lOyBvdGhlcndpc2UsIC1lcnJuby4KICAqLwotCi12b2lkIGF0YV9idXNfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK2V4dGVybiBpbnQgYXRhX3dhaXRfYWZ0ZXJfcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lLAorCQkJCWludCAoKmNoZWNrX3JlYWR5KShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspKQogewotCXN0cnVjdCBhdGFfZGV2aWNlICpkZXZpY2UgPSBhcC0+bGluay5kZXZpY2U7Ci0Jc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKLQl1bnNpZ25lZCBpbnQgc2xhdmVfcG9zc2libGUgPSBhcC0+ZmxhZ3MgJiBBVEFfRkxBR19TTEFWRV9QT1NTOwotCXU4IGVycjsKLQl1bnNpZ25lZCBpbnQgZGV2MCwgZGV2MSA9IDAsIGRldm1hc2sgPSAwOwotCWludCByYzsKKwltc2xlZXAoQVRBX1dBSVRfQUZURVJfUkVTRVRfTVNFQ1MpOwogCi0JRFBSSU5USygiRU5URVIsIGhvc3QgJXUsIHBvcnQgJXVcbiIsIGFwLT5wcmludF9pZCwgYXAtPnBvcnRfbm8pOwotCi0JLyogZGV0ZXJtaW5lIGlmIGRldmljZSAwLzEgYXJlIHByZXNlbnQgKi8KLQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0FUQV9SRVNFVCkKLQkJZGV2MCA9IDE7Ci0JZWxzZSB7Ci0JCWRldjAgPSBhdGFfZGV2Y2hrKGFwLCAwKTsKLQkJaWYgKHNsYXZlX3Bvc3NpYmxlKQotCQkJZGV2MSA9IGF0YV9kZXZjaGsoYXAsIDEpOwotCX0KLQotCWlmIChkZXYwKQotCQlkZXZtYXNrIHw9ICgxIDw8IDApOwotCWlmIChkZXYxKQotCQlkZXZtYXNrIHw9ICgxIDw8IDEpOwotCi0JLyogc2VsZWN0IGRldmljZSAwIGFnYWluICovCi0JYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMCk7Ci0KLQkvKiBpc3N1ZSBidXMgcmVzZXQgKi8KLQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU1JTVCkgewotCQlyYyA9IGF0YV9idXNfc29mdHJlc2V0KGFwLCBkZXZtYXNrLCBqaWZmaWVzICsgNDAgKiBIWik7Ci0JCWlmIChyYyAmJiByYyAhPSAtRU5PREVWKQotCQkJZ290byBlcnJfb3V0OwotCX0KLQotCS8qCi0JICogZGV0ZXJtaW5lIGJ5IHNpZ25hdHVyZSB3aGV0aGVyIHdlIGhhdmUgQVRBIG9yIEFUQVBJIGRldmljZXMKLQkgKi8KLQlkZXZpY2VbMF0uY2xhc3MgPSBhdGFfZGV2X3RyeV9jbGFzc2lmeSgmZGV2aWNlWzBdLCBkZXYwLCAmZXJyKTsKLQlpZiAoKHNsYXZlX3Bvc3NpYmxlKSAmJiAoZXJyICE9IDB4ODEpKQotCQlkZXZpY2VbMV0uY2xhc3MgPSBhdGFfZGV2X3RyeV9jbGFzc2lmeSgmZGV2aWNlWzFdLCBkZXYxLCAmZXJyKTsKLQotCS8qIGlzIGRvdWJsZS1zZWxlY3QgcmVhbGx5IG5lY2Vzc2FyeT8gKi8KLQlpZiAoZGV2aWNlWzFdLmNsYXNzICE9IEFUQV9ERVZfTk9ORSkKLQkJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMSk7Ci0JaWYgKGRldmljZVswXS5jbGFzcyAhPSBBVEFfREVWX05PTkUpCi0JCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOwotCi0JLyogaWYgbm8gZGV2aWNlcyB3ZXJlIGRldGVjdGVkLCBkaXNhYmxlIHRoaXMgcG9ydCAqLwotCWlmICgoZGV2aWNlWzBdLmNsYXNzID09IEFUQV9ERVZfTk9ORSkgJiYKLQkgICAgKGRldmljZVsxXS5jbGFzcyA9PSBBVEFfREVWX05PTkUpKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQlpZiAoYXAtPmZsYWdzICYgKEFUQV9GTEFHX1NBVEFfUkVTRVQgfCBBVEFfRkxBR19TUlNUKSkgewotCQkvKiBzZXQgdXAgZGV2aWNlIGNvbnRyb2wgZm9yIEFUQV9GTEFHX1NBVEFfUkVTRVQgKi8KLQkJaW93cml0ZTgoYXAtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7Ci0JfQotCi0JRFBSSU5USygiRVhJVFxuIik7Ci0JcmV0dXJuOwotCi1lcnJfb3V0OgotCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsICJkaXNhYmxpbmcgcG9ydFxuIik7Ci0JYXRhX3BvcnRfZGlzYWJsZShhcCk7Ci0KLQlEUFJJTlRLKCJFWElUXG4iKTsKKwlyZXR1cm4gYXRhX3dhaXRfcmVhZHkobGluaywgZGVhZGxpbmUsIGNoZWNrX3JlYWR5KTsKIH0KIAogLyoqCkBAIC0zNjUzLDcgKzM0NzEsNyBAQAogaW50IHNhdGFfbGlua19yZXN1bWUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBjb25zdCB1bnNpZ25lZCBsb25nICpwYXJhbXMsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKLQl1MzIgc2NvbnRyb2w7CisJdTMyIHNjb250cm9sLCBzZXJyb3I7CiAJaW50IHJjOwogCiAJaWYgKChyYyA9IHNhdGFfc2NyX3JlYWQobGluaywgU0NSX0NPTlRST0wsICZzY29udHJvbCkpKQpAQCAtMzY2OSw3ICszNDg3LDI1IEBACiAJICovCiAJbXNsZWVwKDIwMCk7CiAKLQlyZXR1cm4gc2F0YV9saW5rX2RlYm91bmNlKGxpbmssIHBhcmFtcywgZGVhZGxpbmUpOworCWlmICgocmMgPSBzYXRhX2xpbmtfZGVib3VuY2UobGluaywgcGFyYW1zLCBkZWFkbGluZSkpKQorCQlyZXR1cm4gcmM7CisKKwkvKiBDbGVhciBTRXJyb3IuICBQTVAgYW5kIHNvbWUgaG9zdCBQSFlzIHJlcXVpcmUgdGhpcyB0bworCSAqIG9wZXJhdGUgYW5kIGNsZWFyaW5nIHNob3VsZCBiZSBkb25lIGJlZm9yZSBjaGVja2luZyBQSFkKKwkgKiBvbmxpbmUgc3RhdHVzIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIChob3RwbHVnZ2luZyBiZXR3ZWVuCisJICogbGluayByZXN1bWUgYW5kIHN0YXR1cyBjaGVjaykuCisJICovCisJaWYgKCEocmMgPSBzYXRhX3Njcl9yZWFkKGxpbmssIFNDUl9FUlJPUiwgJnNlcnJvcikpKQorCQlyYyA9IHNhdGFfc2NyX3dyaXRlKGxpbmssIFNDUl9FUlJPUiwgc2Vycm9yKTsKKwlpZiAocmMgPT0gMCB8fCByYyA9PSAtRUlOVkFMKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKKwkJbGluay0+ZWhfaW5mby5zZXJyb3IgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxpbmstPmFwLT5sb2NrLCBmbGFncyk7CisJCXJjID0gMDsKKwl9CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTM2OTYsMTcgKzM1MzIsNiBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnRpbWluZyA9IHNhdGFfZWhjX2RlYl90aW1pbmcoZWhjKTsKIAlpbnQgcmM7CiAKLQkvKiBoYW5kbGUgbGluayByZXN1bWUgKi8KLQlpZiAoKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUkVTVU1FX0xJTkspICYmCi0JICAgIChsaW5rLT5mbGFncyAmIEFUQV9MRkxBR19IUlNUX1RPX1JFU1VNRSkpCi0JCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX0hBUkRSRVNFVDsKLQotCS8qIFNvbWUgUE1QcyBkb24ndCB3b3JrIHdpdGggb25seSBTUlNULCBmb3JjZSBoYXJkcmVzZXQgaWYgUE1QCi0JICogaXMgc3VwcG9ydGVkLgotCSAqLwotCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QTVApCi0JCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX0hBUkRSRVNFVDsKLQogCS8qIGlmIHdlJ3JlIGFib3V0IHRvIGRvIGhhcmRyZXNldCwgbm90aGluZyBtb3JlIHRvIGRvICovCiAJaWYgKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfSEFSRFJFU0VUKQogCQlyZXR1cm4gMDsKQEAgLTM3MjAsODggKzM1NDUsMzAgQEAKIAkJCQkJImxpbmsgZm9yIHJlc2V0IChlcnJubz0lZClcbiIsIHJjKTsKIAl9CiAKLQkvKiBXYWl0IGZvciAhQlNZIGlmIHRoZSBjb250cm9sbGVyIGNhbiB3YWl0IGZvciB0aGUgZmlyc3QgRDJICi0JICogUmVnIEZJUyBhbmQgd2UgZG9uJ3Qga25vdyB0aGF0IG5vIGRldmljZSBpcyBhdHRhY2hlZC4KLQkgKi8KLQlpZiAoIShsaW5rLT5mbGFncyAmIEFUQV9MRkxBR19TS0lQX0QySF9CU1kpICYmICFhdGFfbGlua19vZmZsaW5lKGxpbmspKSB7Ci0JCXJjID0gYXRhX3dhaXRfcmVhZHkoYXAsIGRlYWRsaW5lKTsKLQkJaWYgKHJjICYmIHJjICE9IC1FTk9ERVYpIHsKLQkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsICJkZXZpY2Ugbm90IHJlYWR5ICIKLQkJCQkJIihlcnJubz0lZCksIGZvcmNpbmcgaGFyZHJlc2V0XG4iLCByYyk7Ci0JCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7Ci0JCX0KLQl9CisJLyogbm8gcG9pbnQgaW4gdHJ5aW5nIHNvZnRyZXNldCBvbiBvZmZsaW5lIGxpbmsgKi8KKwlpZiAoYXRhX2xpbmtfb2ZmbGluZShsaW5rKSkKKwkJZWhjLT5pLmFjdGlvbiAmPSB+QVRBX0VIX1NPRlRSRVNFVDsKIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqCWF0YV9zdGRfc29mdHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBBVEEgU1JTVAotICoJQGxpbms6IEFUQSBsaW5rIHRvIHJlc2V0Ci0gKglAY2xhc3NlczogcmVzdWx0aW5nIGNsYXNzZXMgb2YgYXR0YWNoZWQgZGV2aWNlcwotICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCi0gKgotICoJUmVzZXQgaG9zdCBwb3J0IHVzaW5nIEFUQSBTUlNULgotICoKLSAqCUxPQ0tJTkc6Ci0gKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKLSAqCi0gKglSRVRVUk5TOgotICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLgotICovCi1pbnQgYXRhX3N0ZF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCi17Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwotCXVuc2lnbmVkIGludCBzbGF2ZV9wb3NzaWJsZSA9IGFwLT5mbGFncyAmIEFUQV9GTEFHX1NMQVZFX1BPU1M7Ci0JdW5zaWduZWQgaW50IGRldm1hc2sgPSAwOwotCWludCByYzsKLQl1OCBlcnI7Ci0KLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KLQlpZiAoYXRhX2xpbmtfb2ZmbGluZShsaW5rKSkgewotCQljbGFzc2VzWzBdID0gQVRBX0RFVl9OT05FOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBkZXRlcm1pbmUgaWYgZGV2aWNlIDAvMSBhcmUgcHJlc2VudCAqLwotCWlmIChhdGFfZGV2Y2hrKGFwLCAwKSkKLQkJZGV2bWFzayB8PSAoMSA8PCAwKTsKLQlpZiAoc2xhdmVfcG9zc2libGUgJiYgYXRhX2RldmNoayhhcCwgMSkpCi0JCWRldm1hc2sgfD0gKDEgPDwgMSk7Ci0KLQkvKiBzZWxlY3QgZGV2aWNlIDAgYWdhaW4gKi8KLQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAwKTsKLQotCS8qIGlzc3VlIGJ1cyByZXNldCAqLwotCURQUklOVEsoImFib3V0IHRvIHNvZnRyZXNldCwgZGV2bWFzaz0leFxuIiwgZGV2bWFzayk7Ci0JcmMgPSBhdGFfYnVzX3NvZnRyZXNldChhcCwgZGV2bWFzaywgZGVhZGxpbmUpOwotCS8qIGlmIGxpbmsgaXMgb2NjdXBpZWQsIC1FTk9ERVYgdG9vIGlzIGFuIGVycm9yICovCi0JaWYgKHJjICYmIChyYyAhPSAtRU5PREVWIHx8IHNhdGFfc2NyX3ZhbGlkKGxpbmspKSkgewotCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9FUlIsICJTUlNUIGZhaWxlZCAoZXJybm89JWQpXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQkvKiBkZXRlcm1pbmUgYnkgc2lnbmF0dXJlIHdoZXRoZXIgd2UgaGF2ZSBBVEEgb3IgQVRBUEkgZGV2aWNlcyAqLwotCWNsYXNzZXNbMF0gPSBhdGFfZGV2X3RyeV9jbGFzc2lmeSgmbGluay0+ZGV2aWNlWzBdLAotCQkJCQkgIGRldm1hc2sgJiAoMSA8PCAwKSwgJmVycik7Ci0JaWYgKHNsYXZlX3Bvc3NpYmxlICYmIGVyciAhPSAweDgxKQotCQljbGFzc2VzWzFdID0gYXRhX2Rldl90cnlfY2xhc3NpZnkoJmxpbmstPmRldmljZVsxXSwKLQkJCQkJCSAgZGV2bWFzayAmICgxIDw8IDEpLCAmZXJyKTsKLQotIG91dDoKLQlEUFJJTlRLKCJFWElULCBjbGFzc2VzWzBdPSV1IFsxXT0ldVxuIiwgY2xhc3Nlc1swXSwgY2xhc3Nlc1sxXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICoJc2F0YV9saW5rX2hhcmRyZXNldCAtIHJlc2V0IGxpbmsgdmlhIFNBVEEgcGh5IHJlc2V0CiAgKglAbGluazogbGluayB0byByZXNldAogICoJQHRpbWluZzogdGltaW5nIHBhcmFtZXRlcnMgeyBpbnRlcnZhbCwgZHVyYXRpbm9uLCB0aW1lb3V0IH0gaW4gbXNlYwogICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCisgKglAb25saW5lOiBvcHRpb25hbCBvdXQgcGFyYW1ldGVyIGluZGljYXRpbmcgbGluayBvbmxpbmVuZXNzCisgKglAY2hlY2tfcmVhZHk6IG9wdGlvbmFsIGNhbGxiYWNrIHRvIGNoZWNrIGxpbmsgcmVhZGluZXNzCiAgKgogICoJU0FUQSBwaHktcmVzZXQgQGxpbmsgdXNpbmcgREVUIGJpdHMgb2YgU0NvbnRyb2wgcmVnaXN0ZXIuCisgKglBZnRlciBoYXJkcmVzZXQsIGxpbmsgcmVhZGluZXNzIGlzIHdhaXRlZCB1cG9uIHVzaW5nCisgKglhdGFfd2FpdF9yZWFkeSgpIGlmIEBjaGVja19yZWFkeSBpcyBzcGVjaWZpZWQuICBMTERzIGFyZQorICoJYWxsb3dlZCB0byBub3Qgc3BlY2lmeSBAY2hlY2tfcmVhZHkgYW5kIHdhaXQgaXRzZWxmIGFmdGVyIHRoaXMKKyAqCWZ1bmN0aW9uIHJldHVybnMuICBEZXZpY2UgY2xhc3NpZmljYXRpb24gaXMgTExEJ3MKKyAqCXJlc3BvbnNpYmlsaXR5LgorICoKKyAqCSpAb25saW5lIGlzIHNldCB0byBvbmUgaWZmIHJlc2V0IHN1Y2NlZWRlZCBhbmQgQGxpbmsgaXMgb25saW5lCisgKglhZnRlciByZXNldC4KICAqCiAgKglMT0NLSU5HOgogICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCkBAIC0zODEwLDEzICszNTc3LDE3IEBACiAgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCiAgKi8KIGludCBzYXRhX2xpbmtfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nLAotCQkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKKwkJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUsCisJCQlib29sICpvbmxpbmUsIGludCAoKmNoZWNrX3JlYWR5KShzdHJ1Y3QgYXRhX2xpbmsgKikpCiB7CiAJdTMyIHNjb250cm9sOwogCWludCByYzsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAorCWlmIChvbmxpbmUpCisJCSpvbmxpbmUgPSBmYWxzZTsKKwogCWlmIChzYXRhX3NldF9zcGRfbmVlZGVkKGxpbmspKSB7CiAJCS8qIFNBVEEgc3BlYyBzYXlzIG5vdGhpbmcgYWJvdXQgaG93IHRvIHJlY29uZmlndXJlCiAJCSAqIHNwZC4gIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIHR1cm4gb2ZmIHBoeSBkdXJpbmcKQEAgLTM4NTAsNzcgKzM2MjEsNjkgQEAKIAogCS8qIGJyaW5nIGxpbmsgYmFjayAqLwogCXJjID0gc2F0YV9saW5rX3Jlc3VtZShsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCS8qIGlmIGxpbmsgaXMgb2ZmbGluZSBub3RoaW5nIG1vcmUgdG8gZG8gKi8KKwlpZiAoYXRhX2xpbmtfb2ZmbGluZShsaW5rKSkKKwkJZ290byBvdXQ7CisKKwkvKiBMaW5rIGlzIG9ubGluZS4gIEZyb20gdGhpcyBwb2ludCwgLUVOT0RFViB0b28gaXMgYW4gZXJyb3IuICovCisJaWYgKG9ubGluZSkKKwkJKm9ubGluZSA9IHRydWU7CisKKwlpZiAoc2F0YV9wbXBfc3VwcG9ydGVkKGxpbmstPmFwKSAmJiBhdGFfaXNfaG9zdF9saW5rKGxpbmspKSB7CisJCS8qIElmIFBNUCBpcyBzdXBwb3J0ZWQsIHdlIGhhdmUgdG8gZG8gZm9sbG93LXVwIFNSU1QuCisJCSAqIFNvbWUgUE1QcyBkb24ndCBzZW5kIEQySCBSZWcgRklTIGFmdGVyIGhhcmRyZXNldCBpZgorCQkgKiB0aGUgZmlyc3QgcG9ydCBpcyBlbXB0eS4gIFdhaXQgb25seSBmb3IKKwkJICogQVRBX1RNT1VUX1BNUF9TUlNUX1dBSVQuCisJCSAqLworCQlpZiAoY2hlY2tfcmVhZHkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcG1wX2RlYWRsaW5lOworCisJCQlwbXBfZGVhZGxpbmUgPSBqaWZmaWVzICsgQVRBX1RNT1VUX1BNUF9TUlNUX1dBSVQ7CisJCQlpZiAodGltZV9hZnRlcihwbXBfZGVhZGxpbmUsIGRlYWRsaW5lKSkKKwkJCQlwbXBfZGVhZGxpbmUgPSBkZWFkbGluZTsKKwkJCWF0YV93YWl0X3JlYWR5KGxpbmssIHBtcF9kZWFkbGluZSwgY2hlY2tfcmVhZHkpOworCQl9CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOworCWlmIChjaGVja19yZWFkeSkKKwkJcmMgPSBhdGFfd2FpdF9yZWFkeShsaW5rLCBkZWFkbGluZSwgY2hlY2tfcmVhZHkpOwogIG91dDoKKwlpZiAocmMgJiYgcmMgIT0gLUVBR0FJTikKKwkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fRVJSLAorCQkJCSJDT01SRVNFVCBmYWlsZWQgKGVycm5vPSVkKVxuIiwgcmMpOwogCURQUklOVEsoIkVYSVQsIHJjPSVkXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCiAvKioKLSAqCXNhdGFfc3RkX2hhcmRyZXNldCAtIHJlc2V0IGhvc3QgcG9ydCB2aWEgU0FUQSBwaHkgcmVzZXQKKyAqCXNhdGFfc3RkX2hhcmRyZXNldCAtIENPTVJFU0VUIHcvbyB3YWl0aW5nIG9yIGNsYXNzaWZpY2F0aW9uCiAgKglAbGluazogbGluayB0byByZXNldAogICoJQGNsYXNzOiByZXN1bHRpbmcgY2xhc3Mgb2YgYXR0YWNoZWQgZGV2aWNlCiAgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCi0gKglTQVRBIHBoeS1yZXNldCBob3N0IHBvcnQgdXNpbmcgREVUIGJpdHMgb2YgU0NvbnRyb2wgcmVnaXN0ZXIsCi0gKgl3YWl0IGZvciAhQlNZIGFuZCBjbGFzc2lmeSB0aGUgYXR0YWNoZWQgZGV2aWNlLgorICoJU3RhbmRhcmQgU0FUQSBDT01SRVNFVCB3L28gd2FpdGluZyBvciBjbGFzc2lmaWNhdGlvbi4KICAqCiAgKglMT0NLSU5HOgogICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCiAgKgogICoJUkVUVVJOUzoKLSAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqCTAgaWYgbGluayBvZmZsaW5lLCAtRUFHQUlOIGlmIGxpbmsgb25saW5lLCAtZXJybm8gb24gZXJyb3JzLgogICovCiBpbnQgc2F0YV9zdGRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnRpbWluZyA9IHNhdGFfZWhjX2RlYl90aW1pbmcoJmxpbmstPmVoX2NvbnRleHQpOworCWJvb2wgb25saW5lOwogCWludCByYzsKIAotCURQUklOVEsoIkVOVEVSXG4iKTsKLQogCS8qIGRvIGhhcmRyZXNldCAqLwotCXJjID0gc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKLQlpZiAocmMpIHsKLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fRVJSLAotCQkJCSJDT01SRVNFVCBmYWlsZWQgKGVycm5vPSVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogVE9ETzogcGh5IGxheWVyIHdpdGggcG9sbGluZywgdGltZW91dHMsIGV0Yy4gKi8KLQlpZiAoYXRhX2xpbmtfb2ZmbGluZShsaW5rKSkgewotCQkqY2xhc3MgPSBBVEFfREVWX05PTkU7Ci0JCURQUklOVEsoIkVYSVQsIGxpbmsgb2ZmbGluZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIHdhaXQgYSB3aGlsZSBiZWZvcmUgY2hlY2tpbmcgc3RhdHVzICovCi0JYXRhX3dhaXRfYWZ0ZXJfcmVzZXQoYXAsIGRlYWRsaW5lKTsKLQotCS8qIElmIFBNUCBpcyBzdXBwb3J0ZWQsIHdlIGhhdmUgdG8gZG8gZm9sbG93LXVwIFNSU1QuICBOb3RlCi0JICogdGhhdCBzb21lIFBNUHMgZG9uJ3Qgc2VuZCBEMkggUmVnIEZJUyBhZnRlciBoYXJkcmVzZXQgYXQKLQkgKiBhbGwgaWYgdGhlIGZpcnN0IHBvcnQgaXMgZW1wdHkuICBXYWl0IGZvciBpdCBqdXN0IGZvciBhCi0JICogc2Vjb25kIGFuZCByZXF1ZXN0IGZvbGxvdy11cCBTUlNULgotCSAqLwotCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QTVApIHsKLQkJYXRhX3dhaXRfcmVhZHkoYXAsIGppZmZpZXMgKyBIWik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCXJjID0gYXRhX3dhaXRfcmVhZHkoYXAsIGRlYWRsaW5lKTsKLQkvKiBsaW5rIG9jY3VwaWVkLCAtRU5PREVWIHRvbyBpcyBhbiBlcnJvciAqLwotCWlmIChyYykgewotCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9FUlIsCi0JCQkJIkNPTVJFU0VUIGZhaWxlZCAoZXJybm89JWQpXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAwKTsJLyogcHJvYmFibHkgdW5uZWNlc3NhcnkgKi8KLQotCSpjbGFzcyA9IGF0YV9kZXZfdHJ5X2NsYXNzaWZ5KGxpbmstPmRldmljZSwgMSwgTlVMTCk7Ci0KLQlEUFJJTlRLKCJFWElULCBjbGFzcz0ldVxuIiwgKmNsYXNzKTsKLQlyZXR1cm4gMDsKKwlyYyA9IHNhdGFfbGlua19oYXJkcmVzZXQobGluaywgdGltaW5nLCBkZWFkbGluZSwgJm9ubGluZSwgTlVMTCk7CisJcmV0dXJuIG9ubGluZSA/IC1FQUdBSU4gOiByYzsKIH0KIAogLyoqCkBAIC0zOTM3LDM1ICszNzAwLDExIEBACiAgKi8KIHZvaWQgYXRhX3N0ZF9wb3N0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwotCXUzMiBzZXJyb3I7Ci0KIAlEUFJJTlRLKCJFTlRFUlxuIik7CiAKIAkvKiBwcmludCBsaW5rIHN0YXR1cyAqLwogCXNhdGFfcHJpbnRfbGlua19zdGF0dXMobGluayk7CiAKLQkvKiBjbGVhciBTRXJyb3IgKi8KLQlpZiAoc2F0YV9zY3JfcmVhZChsaW5rLCBTQ1JfRVJST1IsICZzZXJyb3IpID09IDApCi0JCXNhdGFfc2NyX3dyaXRlKGxpbmssIFNDUl9FUlJPUiwgc2Vycm9yKTsKLQlsaW5rLT5laF9pbmZvLnNlcnJvciA9IDA7Ci0KLQkvKiBpcyBkb3VibGUtc2VsZWN0IHJlYWxseSBuZWNlc3Nhcnk/ICovCi0JaWYgKGNsYXNzZXNbMF0gIT0gQVRBX0RFVl9OT05FKQotCQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAxKTsKLQlpZiAoY2xhc3Nlc1sxXSAhPSBBVEFfREVWX05PTkUpCi0JCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOwotCi0JLyogYmFpbCBvdXQgaWYgbm8gZGV2aWNlIGlzIHByZXNlbnQgKi8KLQlpZiAoY2xhc3Nlc1swXSA9PSBBVEFfREVWX05PTkUgJiYgY2xhc3Nlc1sxXSA9PSBBVEFfREVWX05PTkUpIHsKLQkJRFBSSU5USygiRVhJVCwgbm8gZGV2aWNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHNldCB1cCBkZXZpY2UgY29udHJvbCAqLwotCWlmIChhcC0+aW9hZGRyLmN0bF9hZGRyKQotCQlpb3dyaXRlOChhcC0+Y3RsLCBhcC0+aW9hZGRyLmN0bF9hZGRyKTsKLQogCURQUklOVEsoIkVYSVRcbiIpOwogfQogCkBAIC00MTkwLDYgKzM5MjksNyBAQAogCS8qIERldmljZXMgd2hpY2ggcmVwb3J0IDEgc2VjdG9yIG92ZXIgc2l6ZSBIUEEgKi8KIAl7ICJTVDM0MDgyM0EiLAkJTlVMTCwJCUFUQV9IT1JLQUdFX0hQQV9TSVpFLCB9LAogCXsgIlNUMzIwNDEzQSIsCQlOVUxMLAkJQVRBX0hPUktBR0VfSFBBX1NJWkUsIH0sCisJeyAiU1QzMTAyMTFBIiwJCU5VTEwsCQlBVEFfSE9SS0FHRV9IUEFfU0laRSwgfSwKIAogCS8qIERldmljZXMgd2hpY2ggZ2V0IHRoZSBJVkIgd3JvbmcgKi8KIAl7ICJRVUFOVFVNIEZJUkVCQUxMbGN0MTAgMDUiLCAiQTAzLjA5MDAiLCBBVEFfSE9SS0FHRV9JVkIsIH0sCkBAIC00Mjc0LDYgKzQwMTQsNTMgQEAKIH0KIAogLyoqCisgKgljYWJsZV9pc180MHdpcmUJCS0JNDAvODAvU0FUQSBkZWNpZGVyCisgKglAYXA6IHBvcnQgdG8gY29uc2lkZXIKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGVuY2Fwc3VsYXRlcyB0aGUgcG9saWN5IGZvciBzcGVlZCBtYW5hZ2VtZW50CisgKglpbiBvbmUgcGxhY2UuIEF0IHRoZSBtb21lbnQgd2UgZG9uJ3QgY2FjaGUgdGhlIHJlc3VsdCBidXQKKyAqCXRoZXJlIGlzIGEgZ29vZCBjYXNlIGZvciBzZXR0aW5nIGFwLT5jYmwgdG8gdGhlIHJlc3VsdCB3aGVuCisgKgl3ZSBhcmUgY2FsbGVkIHdpdGggdW5rbm93biBjYWJsZXMgKGFuZCBmaWd1cmluZyBvdXQgaWYgaXQKKyAqCWltcGFjdHMgaG90cGx1ZyBhdCBhbGwpLgorICoKKyAqCVJldHVybiAxIGlmIHRoZSBjYWJsZSBhcHBlYXJzIHRvIGJlIDQwIHdpcmUuCisgKi8KKworc3RhdGljIGludCBjYWJsZV9pc180MHdpcmUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CisJc3RydWN0IGF0YV9kZXZpY2UgKmRldjsKKworCS8qIElmIHRoZSBjb250cm9sbGVyIHRoaW5rcyB3ZSBhcmUgNDAgd2lyZSwgd2UgYXJlICovCisJaWYgKGFwLT5jYmwgPT0gQVRBX0NCTF9QQVRBNDApCisJCXJldHVybiAxOworCS8qIElmIHRoZSBjb250cm9sbGVyIHRoaW5rcyB3ZSBhcmUgODAgd2lyZSwgd2UgYXJlICovCisJaWYgKGFwLT5jYmwgPT0gQVRBX0NCTF9QQVRBODAgfHwgYXAtPmNibCA9PSBBVEFfQ0JMX1NBVEEpCisJCXJldHVybiAwOworCS8qIElmIHRoZSBzeXN0ZW0gaXMga25vd24gdG8gYmUgNDAgd2lyZSBzaG9ydCBjYWJsZSAoZWcgbGFwdG9wKSwKKwkgICB0aGVuIHdlIGFsbG93IDgwIHdpcmUgbW9kZXMgZXZlbiBpZiB0aGUgZHJpdmUgaXNuJ3Qgc3VyZSAqLworCWlmIChhcC0+Y2JsID09IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQorCQlyZXR1cm4gMDsKKwkvKiBJZiB0aGUgY29udHJvbGxlciBkb2Vzbid0IGtub3cgd2Ugc2NhbgorCisJICAgLSBOb3RlOiBXZSBsb29rIGZvciBhbGwgNDAgd2lyZSBkZXRlY3RzIGF0IHRoaXMgcG9pbnQuCisJICAgICBBbnkgODAgd2lyZSBkZXRlY3QgaXMgdGFrZW4gdG8gYmUgODAgd2lyZSBjYWJsZQorCSAgICAgYmVjYXVzZQorCSAgICAgLSBJbiBtYW55IHNldHVwcyBvbmx5IHRoZSBvbmUgZHJpdmUgKHNsYXZlIGlmIHByZXNlbnQpCisgICAgICAgICAgICAgICB3aWxsIGdpdmUgYSB2YWxpZCBkZXRlY3QKKyAgICAgICAgICAgICAtIElmIHlvdSBoYXZlIGEgbm9uIGRldGVjdCBjYXBhYmxlIGRyaXZlIHlvdSBkb24ndAorICAgICAgICAgICAgICAgd2FudCBpdCB0byBjb2xvdXIgdGhlIGNob2ljZQorICAgICAgICAqLworCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKKwkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgeworCQkJaWYgKCFhdGFfaXNfNDB3aXJlKGRldikpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qKgogICoJYXRhX2Rldl94ZmVybWFzayAtIENvbXB1dGUgc3VwcG9ydGVkIHhmZXJtYXNrIG9mIHRoZSBnaXZlbiBkZXZpY2UKICAqCUBkZXY6IERldmljZSB0byBjb21wdXRlIHhmZXJtYXNrIGZvcgogICoKQEAgLTQzNDEsMTAgKzQxMjgsNyBAQAogCSAqLwogCWlmICh4ZmVyX21hc2sgJiAoMHhGOCA8PCBBVEFfU0hJRlRfVURNQSkpCiAJCS8qIFVETUEvNDQgb3IgaGlnaGVyIHdvdWxkIGJlIGF2YWlsYWJsZSAqLwotCQlpZiAoKGFwLT5jYmwgPT0gQVRBX0NCTF9QQVRBNDApIHx8Ci0JCSAgICAoYXRhX2lzXzQwd2lyZShkZXYpICYmCi0JCSAgICAoYXAtPmNibCA9PSBBVEFfQ0JMX1BBVEFfVU5LIHx8Ci0JCSAgICAgYXAtPmNibCA9PSBBVEFfQ0JMX1BBVEE4MCkpKSB7CisJCWlmIChjYWJsZV9pc180MHdpcmUoYXApKSB7CiAJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fV0FSTklORywKIAkJCQkgImxpbWl0ZWQgdG8gVURNQS8zMyBkdWUgdG8gNDAtd2lyZSBjYWJsZVxuIik7CiAJCQl4ZmVyX21hc2sgJj0gfigweEY4IDw8IEFUQV9TSElGVF9VRE1BKTsKQEAgLTQ0OTIsMTQyICs0Mjc2LDE5IEBACiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gcWMtPnNnOwogCWludCBkaXIgPSBxYy0+ZG1hX2RpcjsKLQl2b2lkICpwYWRfYnVmID0gTlVMTDsKIAogCVdBUk5fT04oc2cgPT0gTlVMTCk7CiAKLQlWUFJJTlRLKCJ1bm1hcHBpbmcgJXUgc2cgZWxlbWVudHNcbiIsIHFjLT5tYXBwZWRfbl9lbGVtKTsKKwlWUFJJTlRLKCJ1bm1hcHBpbmcgJXUgc2cgZWxlbWVudHNcbiIsIHFjLT5uX2VsZW0pOwogCi0JLyogaWYgd2UgcGFkZGVkIHRoZSBidWZmZXIgb3V0IHRvIDMyLWJpdCBib3VuZCwgYW5kIGRhdGEKLQkgKiB4ZmVyIGRpcmVjdGlvbiBpcyBmcm9tLWRldmljZSwgd2UgbXVzdCBjb3B5IGZyb20gdGhlCi0JICogcGFkIGJ1ZmZlciBiYWNrIGludG8gdGhlIHN1cHBsaWVkIGJ1ZmZlcgotCSAqLwotCWlmIChxYy0+cGFkX2xlbiAmJiAhKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkpCi0JCXBhZF9idWYgPSBhcC0+cGFkICsgKHFjLT50YWcgKiBBVEFfRE1BX1BBRF9TWik7Ci0KLQlpZiAocWMtPm1hcHBlZF9uX2VsZW0pCi0JCWRtYV91bm1hcF9zZyhhcC0+ZGV2LCBzZywgcWMtPm1hcHBlZF9uX2VsZW0sIGRpcik7Ci0JLyogcmVzdG9yZSBsYXN0IHNnICovCi0JaWYgKHFjLT5sYXN0X3NnKQotCQkqcWMtPmxhc3Rfc2cgPSBxYy0+c2F2ZWRfbGFzdF9zZzsKLQlpZiAocGFkX2J1ZikgewotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZyA9ICZxYy0+ZXh0cmFfc2dbMV07Ci0JCXZvaWQgKmFkZHIgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHBzZyksIEtNX0lSUTApOwotCQltZW1jcHkoYWRkciArIHBzZy0+b2Zmc2V0LCBwYWRfYnVmLCBxYy0+cGFkX2xlbik7Ci0JCWt1bm1hcF9hdG9taWMoYWRkciwgS01fSVJRMCk7Ci0JfQorCWlmIChxYy0+bl9lbGVtKQorCQlkbWFfdW5tYXBfc2coYXAtPmRldiwgc2csIHFjLT5uX2VsZW0sIGRpcik7CiAKIAlxYy0+ZmxhZ3MgJj0gfkFUQV9RQ0ZMQUdfRE1BTUFQOwogCXFjLT5zZyA9IE5VTEw7CiB9CiAKIC8qKgotICoJYXRhX2ZpbGxfc2cgLSBGaWxsIFBDSSBJREUgUFJEIHRhYmxlCi0gKglAcWM6IE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0YXNrZmlsZSB0byBiZSB0cmFuc2ZlcnJlZAotICoKLSAqCUZpbGwgUENJIElERSBQUkQgKHNjYXR0ZXItZ2F0aGVyKSB0YWJsZSB3aXRoIHNlZ21lbnRzCi0gKglhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZGlzayBjb21tYW5kLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCi0gKgotICovCi1zdGF0aWMgdm9pZCBhdGFfZmlsbF9zZyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1bnNpZ25lZCBpbnQgc2ksIHBpOwotCi0JcGkgPSAwOwotCWZvcl9lYWNoX3NnKHFjLT5zZywgc2csIHFjLT5uX2VsZW0sIHNpKSB7Ci0JCXUzMiBhZGRyLCBvZmZzZXQ7Ci0JCXUzMiBzZ19sZW4sIGxlbjsKLQotCQkvKiBkZXRlcm1pbmUgaWYgcGh5c2ljYWwgRE1BIGFkZHIgc3BhbnMgNjRLIGJvdW5kYXJ5LgotCQkgKiBOb3RlIGgvdyBkb2Vzbid0IHN1cHBvcnQgNjQtYml0LCBzbyB3ZSB1bmNvbmRpdGlvbmFsbHkKLQkJICogdHJ1bmNhdGUgZG1hX2FkZHJfdCB0byB1MzIuCi0JCSAqLwotCQlhZGRyID0gKHUzMikgc2dfZG1hX2FkZHJlc3Moc2cpOwotCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQotCQl3aGlsZSAoc2dfbGVuKSB7Ci0JCQlvZmZzZXQgPSBhZGRyICYgMHhmZmZmOwotCQkJbGVuID0gc2dfbGVuOwotCQkJaWYgKChvZmZzZXQgKyBzZ19sZW4pID4gMHgxMDAwMCkKLQkJCQlsZW4gPSAweDEwMDAwIC0gb2Zmc2V0OwotCi0JCQlhcC0+cHJkW3BpXS5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcik7Ci0JCQlhcC0+cHJkW3BpXS5mbGFnc19sZW4gPSBjcHVfdG9fbGUzMihsZW4gJiAweGZmZmYpOwotCQkJVlBSSU5USygiUFJEWyV1XSA9ICgweCVYLCAweCVYKVxuIiwgcGksIGFkZHIsIGxlbik7Ci0KLQkJCXBpKys7Ci0JCQlzZ19sZW4gLT0gbGVuOwotCQkJYWRkciArPSBsZW47Ci0JCX0KLQl9Ci0KLQlhcC0+cHJkW3BpIC0gMV0uZmxhZ3NfbGVuIHw9IGNwdV90b19sZTMyKEFUQV9QUkRfRU9UKTsKLX0KLQotLyoqCi0gKglhdGFfZmlsbF9zZ19kdW1iIC0gRmlsbCBQQ0kgSURFIFBSRCB0YWJsZQotICoJQHFjOiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGFza2ZpbGUgdG8gYmUgdHJhbnNmZXJyZWQKLSAqCi0gKglGaWxsIFBDSSBJREUgUFJEIChzY2F0dGVyLWdhdGhlcikgdGFibGUgd2l0aCBzZWdtZW50cwotICoJYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGRpc2sgY29tbWFuZC4gUGVyZm9ybSB0aGUgZmlsbAotICoJc28gdGhhdCB3ZSBhdm9pZCB3cml0aW5nIGFueSBsZW5ndGggNjRLIHJlY29yZHMgZm9yCi0gKgljb250cm9sbGVycyB0aGF0IGRvbid0IGZvbGxvdyB0aGUgc3BlYy4KLSAqCi0gKglMT0NLSU5HOgotICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdCBsb2NrKQotICoKLSAqLwotc3RhdGljIHZvaWQgYXRhX2ZpbGxfc2dfZHVtYihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1bnNpZ25lZCBpbnQgc2ksIHBpOwotCi0JcGkgPSAwOwotCWZvcl9lYWNoX3NnKHFjLT5zZywgc2csIHFjLT5uX2VsZW0sIHNpKSB7Ci0JCXUzMiBhZGRyLCBvZmZzZXQ7Ci0JCXUzMiBzZ19sZW4sIGxlbiwgYmxlbjsKLQotCQkvKiBkZXRlcm1pbmUgaWYgcGh5c2ljYWwgRE1BIGFkZHIgc3BhbnMgNjRLIGJvdW5kYXJ5LgotCQkgKiBOb3RlIGgvdyBkb2Vzbid0IHN1cHBvcnQgNjQtYml0LCBzbyB3ZSB1bmNvbmRpdGlvbmFsbHkKLQkJICogdHJ1bmNhdGUgZG1hX2FkZHJfdCB0byB1MzIuCi0JCSAqLwotCQlhZGRyID0gKHUzMikgc2dfZG1hX2FkZHJlc3Moc2cpOwotCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQotCQl3aGlsZSAoc2dfbGVuKSB7Ci0JCQlvZmZzZXQgPSBhZGRyICYgMHhmZmZmOwotCQkJbGVuID0gc2dfbGVuOwotCQkJaWYgKChvZmZzZXQgKyBzZ19sZW4pID4gMHgxMDAwMCkKLQkJCQlsZW4gPSAweDEwMDAwIC0gb2Zmc2V0OwotCi0JCQlibGVuID0gbGVuICYgMHhmZmZmOwotCQkJYXAtPnByZFtwaV0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOwotCQkJaWYgKGJsZW4gPT0gMCkgewotCQkJICAgLyogU29tZSBQQVRBIGNoaXBzZXRzIGxpa2UgdGhlIENTNTUzMCBjYW4ndAotCQkJICAgICAgY29wZSB3aXRoIDB4MDAwMCBtZWFuaW5nIDY0SyBhcyB0aGUgc3BlYyBzYXlzICovCi0JCQkJYXAtPnByZFtwaV0uZmxhZ3NfbGVuID0gY3B1X3RvX2xlMzIoMHg4MDAwKTsKLQkJCQlibGVuID0gMHg4MDAwOwotCQkJCWFwLT5wcmRbKytwaV0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIgKyAweDgwMDApOwotCQkJfQotCQkJYXAtPnByZFtwaV0uZmxhZ3NfbGVuID0gY3B1X3RvX2xlMzIoYmxlbik7Ci0JCQlWUFJJTlRLKCJQUkRbJXVdID0gKDB4JVgsIDB4JVgpXG4iLCBwaSwgYWRkciwgbGVuKTsKLQotCQkJcGkrKzsKLQkJCXNnX2xlbiAtPSBsZW47Ci0JCQlhZGRyICs9IGxlbjsKLQkJfQotCX0KLQotCWFwLT5wcmRbcGkgLSAxXS5mbGFnc19sZW4gfD0gY3B1X3RvX2xlMzIoQVRBX1BSRF9FT1QpOwotfQotCi0vKioKICAqCWF0YV9jaGVja19hdGFwaV9kbWEgLSBDaGVjayB3aGV0aGVyIEFUQVBJIERNQSBjYW4gYmUgc3VwcG9ydGVkCiAgKglAcWM6IE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0YXNrZmlsZSB0byBjaGVjawogICoKQEAgLTQ2NTgsNDMgKzQzMTksNiBAQAogfQogCiAvKioKLSAqCWF0YXBpX3FjX21heV9vdmVyZmxvdyAtIENoZWNrIHdoZXRoZXIgZGF0YSB0cmFuc2ZlciBtYXkgb3ZlcmZsb3cKLSAqCUBxYzogQVRBIGNvbW1hbmQgaW4gcXVlc3Rpb24KLSAqCi0gKglBVEFQSSBjb21tYW5kcyB3aGljaCB0cmFuc2ZlciB2YXJpYWJsZSBsZW5ndGggZGF0YSB0byBob3N0Ci0gKgltaWdodCBvdmVyZmxvdyBkdWUgdG8gYXBwbGljYXRpb24gZXJyb3Igb3IgaGFyZGFyZSBidWcuICBUaGlzCi0gKglmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBvdmVyZmxvdyBzaG91bGQgYmUgZHJhaW5lZCBhbmQgaWdub3JlZAotICoJZm9yIEBxYy4KLSAqCi0gKglMT0NLSU5HOgotICoJTm9uZS4KLSAqCi0gKglSRVRVUk5TOgotICoJMSBpZiBAcWMgbWF5IG92ZXJmbG93OyBvdGhlcndpc2UsIDAuCi0gKi8KLXN0YXRpYyBpbnQgYXRhcGlfcWNfbWF5X292ZXJmbG93KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCi17Ci0JaWYgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFQSV9QUk9UX1BJTyAmJgotCSAgICBxYy0+dGYucHJvdG9jb2wgIT0gQVRBUElfUFJPVF9ETUEpCi0JCXJldHVybiAwOwotCi0JaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKHFjLT5jZGJbMF0pIHsKLQljYXNlIFJFQURfMTA6Ci0JY2FzZSBSRUFEXzEyOgotCWNhc2UgV1JJVEVfMTA6Ci0JY2FzZSBXUklURV8xMjoKLQljYXNlIEdQQ01EX1JFQURfQ0Q6Ci0JY2FzZSBHUENNRF9SRUFEX0NEX01TRjoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qKgogICoJYXRhX3N0ZF9xY19kZWZlciAtIENoZWNrIHdoZXRoZXIgYSBxYyBuZWVkcyB0byBiZSBkZWZlcnJlZAogICoJQHFjOiBBVEEgY29tbWFuZCBpbiBxdWVzdGlvbgogICoKQEAgLTQ3MjQsNDAgKzQzNDgsNiBAQAogCXJldHVybiBBVEFfREVGRVJfTElOSzsKIH0KIAotLyoqCi0gKglhdGFfcWNfcHJlcCAtIFByZXBhcmUgdGFza2ZpbGUgZm9yIHN1Ym1pc3Npb24KLSAqCUBxYzogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRhc2tmaWxlIHRvIGJlIHByZXBhcmVkCi0gKgotICoJUHJlcGFyZSBBVEEgdGFza2ZpbGUgZm9yIHN1Ym1pc3Npb24uCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKLSAqLwotdm9pZCBhdGFfcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCWlmICghKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSkKLQkJcmV0dXJuOwotCi0JYXRhX2ZpbGxfc2cocWMpOwotfQotCi0vKioKLSAqCWF0YV9kdW1iX3FjX3ByZXAgLSBQcmVwYXJlIHRhc2tmaWxlIGZvciBzdWJtaXNzaW9uCi0gKglAcWM6IE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0YXNrZmlsZSB0byBiZSBwcmVwYXJlZAotICoKLSAqCVByZXBhcmUgQVRBIHRhc2tmaWxlIGZvciBzdWJtaXNzaW9uLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCi0gKi8KLXZvaWQgYXRhX2R1bWJfcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCWlmICghKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSkKLQkJcmV0dXJuOwotCi0JYXRhX2ZpbGxfc2dfZHVtYihxYyk7Ci19Ci0KIHZvaWQgYXRhX25vb3BfcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKSB7IH0KIAogLyoqCkBAIC00NzgxLDk3ICs0MzcxLDYgQEAKIAlxYy0+Y3Vyc2cgPSBxYy0+c2c7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX3NnX3NldHVwX2V4dHJhKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqbl9lbGVtX2V4dHJhLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKm5ieXRlc19leHRyYSkKLXsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXVuc2lnbmVkIGludCBuX2VsZW0gPSBxYy0+bl9lbGVtOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqbHNnLCAqY29weV9sc2cgPSBOVUxMLCAqdHNnID0gTlVMTCwgKmVzZyA9IE5VTEw7Ci0KLQkqbl9lbGVtX2V4dHJhID0gMDsKLQkqbmJ5dGVzX2V4dHJhID0gMDsKLQotCS8qIG5lZWRzIHBhZGRpbmc/ICovCi0JcWMtPnBhZF9sZW4gPSBxYy0+bmJ5dGVzICYgMzsKLQotCWlmIChsaWtlbHkoIXFjLT5wYWRfbGVuKSkKLQkJcmV0dXJuIG5fZWxlbTsKLQotCS8qIGxvY2F0ZSBsYXN0IHNnIGFuZCBzYXZlIGl0ICovCi0JbHNnID0gc2dfbGFzdChxYy0+c2csIG5fZWxlbSk7Ci0JcWMtPmxhc3Rfc2cgPSBsc2c7Ci0JcWMtPnNhdmVkX2xhc3Rfc2cgPSAqbHNnOwotCi0Jc2dfaW5pdF90YWJsZShxYy0+ZXh0cmFfc2csIEFSUkFZX1NJWkUocWMtPmV4dHJhX3NnKSk7Ci0KLQlpZiAocWMtPnBhZF9sZW4pIHsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2cgPSAmcWMtPmV4dHJhX3NnWzFdOwotCQl2b2lkICpwYWRfYnVmID0gYXAtPnBhZCArIChxYy0+dGFnICogQVRBX0RNQV9QQURfU1opOwotCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCi0JCVdBUk5fT04ocWMtPmRldi0+Y2xhc3MgIT0gQVRBX0RFVl9BVEFQSSk7Ci0KLQkJbWVtc2V0KHBhZF9idWYsIDAsIEFUQV9ETUFfUEFEX1NaKTsKLQotCQkvKiBwc2ctPnBhZ2Uvb2Zmc2V0IGFyZSB1c2VkIHRvIGNvcHkgdG8tYmUtd3JpdHRlbgotCQkgKiBkYXRhIGluIHRoaXMgZnVuY3Rpb24gb3IgcmVhZCBkYXRhIGluIGF0YV9zZ19jbGVhbi4KLQkJICovCi0JCW9mZnNldCA9IGxzZy0+b2Zmc2V0ICsgbHNnLT5sZW5ndGggLSBxYy0+cGFkX2xlbjsKLQkJc2dfc2V0X3BhZ2UocHNnLCBudGhfcGFnZShzZ19wYWdlKGxzZyksIG9mZnNldCA+PiBQQUdFX1NISUZUKSwKLQkJCSAgICBxYy0+cGFkX2xlbiwgb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KSk7Ci0KLQkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkgewotCQkJdm9pZCAqYWRkciA9IGttYXBfYXRvbWljKHNnX3BhZ2UocHNnKSwgS01fSVJRMCk7Ci0JCQltZW1jcHkocGFkX2J1ZiwgYWRkciArIHBzZy0+b2Zmc2V0LCBxYy0+cGFkX2xlbik7Ci0JCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX0lSUTApOwotCQl9Ci0KLQkJc2dfZG1hX2FkZHJlc3MocHNnKSA9IGFwLT5wYWRfZG1hICsgKHFjLT50YWcgKiBBVEFfRE1BX1BBRF9TWik7Ci0JCXNnX2RtYV9sZW4ocHNnKSA9IEFUQV9ETUFfUEFEX1NaOwotCi0JCS8qIFRyaW0gdGhlIGxhc3Qgc2cgZW50cnkgYW5kIGNoYWluIHRoZSBvcmlnaW5hbCBhbmQKLQkJICogcGFkZGluZyBzZyBsaXN0cy4KLQkJICoKLQkJICogQmVjYXVzZSBjaGFpbmluZyBjb25zdW1lcyBvbmUgc2cgZW50cnksIG9uZSBleHRyYQotCQkgKiBzZyBlbnRyeSBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBsYXN0IHNnIGVudHJ5IGlzCi0JCSAqIGNvcGllZCB0byBpdCBpZiB0aGUgbGVuZ3RoIGlzbid0IHplcm8gYWZ0ZXIgcGFkZGVkCi0JCSAqIGFtb3VudCBpcyByZW1vdmVkLgotCQkgKgotCQkgKiBJZiB0aGUgbGFzdCBzZyBlbnRyeSBpcyBjb21wbGV0ZWx5IHJlcGxhY2VkIGJ5Ci0JCSAqIHBhZGRpbmcgc2cgZW50cnksIHRoZSBmaXJzdCBzZyBlbnRyeSBpcyBza2lwcGVkCi0JCSAqIHdoaWxlIGNoYWluaW5nLgotCQkgKi8KLQkJbHNnLT5sZW5ndGggLT0gcWMtPnBhZF9sZW47Ci0JCWlmIChsc2ctPmxlbmd0aCkgewotCQkJY29weV9sc2cgPSAmcWMtPmV4dHJhX3NnWzBdOwotCQkJdHNnID0gJnFjLT5leHRyYV9zZ1swXTsKLQkJfSBlbHNlIHsKLQkJCW5fZWxlbS0tOwotCQkJdHNnID0gJnFjLT5leHRyYV9zZ1sxXTsKLQkJfQotCi0JCWVzZyA9ICZxYy0+ZXh0cmFfc2dbMV07Ci0KLQkJKCpuX2VsZW1fZXh0cmEpKys7Ci0JCSgqbmJ5dGVzX2V4dHJhKSArPSA0IC0gcWMtPnBhZF9sZW47Ci0JfQotCi0JaWYgKGNvcHlfbHNnKQotCQlzZ19zZXRfcGFnZShjb3B5X2xzZywgc2dfcGFnZShsc2cpLCBsc2ctPmxlbmd0aCwgbHNnLT5vZmZzZXQpOwotCi0Jc2dfY2hhaW4obHNnLCAxLCB0c2cpOwotCXNnX21hcmtfZW5kKGVzZyk7Ci0KLQkvKiBzZ2xpc3QgY2FuJ3Qgc3RhcnQgd2l0aCBjaGFpbmluZyBzZyBlbnRyeSwgZmFzdCBmb3J3YXJkICovCi0JaWYgKHFjLT5zZyA9PSBsc2cpIHsKLQkJcWMtPnNnID0gdHNnOwotCQlxYy0+Y3Vyc2cgPSB0c2c7Ci0JfQotCi0JcmV0dXJuIG5fZWxlbTsKLX0KLQogLyoqCiAgKglhdGFfc2dfc2V0dXAgLSBETUEtbWFwIHRoZSBzY2F0dGVyLWdhdGhlciB0YWJsZSBhc3NvY2lhdGVkIHdpdGggYSBjb21tYW5kLgogICoJQHFjOiBDb21tYW5kIHdpdGggc2NhdHRlci1nYXRoZXIgdGFibGUgdG8gYmUgbWFwcGVkLgpAQCAtNDg4OCwyNiArNDM4NywxNyBAQAogc3RhdGljIGludCBhdGFfc2dfc2V0dXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXVuc2lnbmVkIGludCBuX2VsZW0sIG5fZWxlbV9leHRyYSwgbmJ5dGVzX2V4dHJhOworCXVuc2lnbmVkIGludCBuX2VsZW07CiAKIAlWUFJJTlRLKCJFTlRFUiwgYXRhJXVcbiIsIGFwLT5wcmludF9pZCk7CiAKLQluX2VsZW0gPSBhdGFfc2dfc2V0dXBfZXh0cmEocWMsICZuX2VsZW1fZXh0cmEsICZuYnl0ZXNfZXh0cmEpOworCW5fZWxlbSA9IGRtYV9tYXBfc2coYXAtPmRldiwgcWMtPnNnLCBxYy0+bl9lbGVtLCBxYy0+ZG1hX2Rpcik7CisJaWYgKG5fZWxlbSA8IDEpCisJCXJldHVybiAtMTsKIAotCWlmIChuX2VsZW0pIHsKLQkJbl9lbGVtID0gZG1hX21hcF9zZyhhcC0+ZGV2LCBxYy0+c2csIG5fZWxlbSwgcWMtPmRtYV9kaXIpOwotCQlpZiAobl9lbGVtIDwgMSkgewotCQkJLyogcmVzdG9yZSBsYXN0IHNnICovCi0JCQlpZiAocWMtPmxhc3Rfc2cpCi0JCQkJKnFjLT5sYXN0X3NnID0gcWMtPnNhdmVkX2xhc3Rfc2c7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJRFBSSU5USygiJWQgc2cgZWxlbWVudHMgbWFwcGVkXG4iLCBuX2VsZW0pOwotCX0KKwlEUFJJTlRLKCIlZCBzZyBlbGVtZW50cyBtYXBwZWRcbiIsIG5fZWxlbSk7CiAKLQlxYy0+bl9lbGVtID0gcWMtPm1hcHBlZF9uX2VsZW0gPSBuX2VsZW07Ci0JcWMtPm5fZWxlbSArPSBuX2VsZW1fZXh0cmE7Ci0JcWMtPm5ieXRlcyArPSBuYnl0ZXNfZXh0cmE7CisJcWMtPm5fZWxlbSA9IG5fZWxlbTsKIAlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19ETUFNQVA7CiAKIAlyZXR1cm4gMDsKQEAgLTQ5MzYsNzE5ICs0NDI2LDYgQEAKIH0KIAogLyoqCi0gKglhdGFfZGF0YV94ZmVyIC0gVHJhbnNmZXIgZGF0YSBieSBQSU8KLSAqCUBkZXY6IGRldmljZSB0byB0YXJnZXQKLSAqCUBidWY6IGRhdGEgYnVmZmVyCi0gKglAYnVmbGVuOiBidWZmZXIgbGVuZ3RoCi0gKglAcnc6IHJlYWQvd3JpdGUKLSAqCi0gKglUcmFuc2ZlciBkYXRhIGZyb20vdG8gdGhlIGRldmljZSBkYXRhIHJlZ2lzdGVyIGJ5IFBJTy4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICoKLSAqCVJFVFVSTlM6Ci0gKglCeXRlcyBjb25zdW1lZC4KLSAqLwotdW5zaWduZWQgaW50IGF0YV9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJICAgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IHJ3KQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBkZXYtPmxpbmstPmFwOwotCXZvaWQgX19pb21lbSAqZGF0YV9hZGRyID0gYXAtPmlvYWRkci5kYXRhX2FkZHI7Ci0JdW5zaWduZWQgaW50IHdvcmRzID0gYnVmbGVuID4+IDE7Ci0KLQkvKiBUcmFuc2ZlciBtdWx0aXBsZSBvZiAyIGJ5dGVzICovCi0JaWYgKHJ3ID09IFJFQUQpCi0JCWlvcmVhZDE2X3JlcChkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOwotCWVsc2UKLQkJaW93cml0ZTE2X3JlcChkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOwotCi0JLyogVHJhbnNmZXIgdHJhaWxpbmcgMSBieXRlLCBpZiBhbnkuICovCi0JaWYgKHVubGlrZWx5KGJ1ZmxlbiAmIDB4MDEpKSB7Ci0JCV9fbGUxNiBhbGlnbl9idWZbMV0gPSB7IDAgfTsKLQkJdW5zaWduZWQgY2hhciAqdHJhaWxpbmdfYnVmID0gYnVmICsgYnVmbGVuIC0gMTsKLQotCQlpZiAocncgPT0gUkVBRCkgewotCQkJYWxpZ25fYnVmWzBdID0gY3B1X3RvX2xlMTYoaW9yZWFkMTYoZGF0YV9hZGRyKSk7Ci0JCQltZW1jcHkodHJhaWxpbmdfYnVmLCBhbGlnbl9idWYsIDEpOwotCQl9IGVsc2UgewotCQkJbWVtY3B5KGFsaWduX2J1ZiwgdHJhaWxpbmdfYnVmLCAxKTsKLQkJCWlvd3JpdGUxNihsZTE2X3RvX2NwdShhbGlnbl9idWZbMF0pLCBkYXRhX2FkZHIpOwotCQl9Ci0JCXdvcmRzKys7Ci0JfQotCi0JcmV0dXJuIHdvcmRzIDw8IDE7Ci19Ci0KLS8qKgotICoJYXRhX2RhdGFfeGZlcl9ub2lycSAtIFRyYW5zZmVyIGRhdGEgYnkgUElPCi0gKglAZGV2OiBkZXZpY2UgdG8gdGFyZ2V0Ci0gKglAYnVmOiBkYXRhIGJ1ZmZlcgotICoJQGJ1ZmxlbjogYnVmZmVyIGxlbmd0aAotICoJQHJ3OiByZWFkL3dyaXRlCi0gKgotICoJVHJhbnNmZXIgZGF0YSBmcm9tL3RvIHRoZSBkZXZpY2UgZGF0YSByZWdpc3RlciBieSBQSU8uIERvIHRoZQotICoJdHJhbnNmZXIgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCi0gKgotICoJUkVUVVJOUzoKLSAqCUJ5dGVzIGNvbnN1bWVkLgotICovCi11bnNpZ25lZCBpbnQgYXRhX2RhdGFfeGZlcl9ub2lycShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBydykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBjb25zdW1lZDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljb25zdW1lZCA9IGF0YV9kYXRhX3hmZXIoZGV2LCBidWYsIGJ1ZmxlbiwgcncpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiBjb25zdW1lZDsKLX0KLQotCi0vKioKLSAqCWF0YV9waW9fc2VjdG9yIC0gVHJhbnNmZXIgYSBzZWN0b3Igb2YgZGF0YS4KLSAqCUBxYzogQ29tbWFuZCBvbiBnb2luZwotICoKLSAqCVRyYW5zZmVyIHFjLT5zZWN0X3NpemUgYnl0ZXMgb2YgZGF0YSBmcm9tL3RvIHRoZSBBVEEgZGV2aWNlLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCi0gKi8KLQotc3RhdGljIHZvaWQgYXRhX3Bpb19zZWN0b3Ioc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlpbnQgZG9fd3JpdGUgPSAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCi0JaWYgKHFjLT5jdXJieXRlcyA9PSBxYy0+bmJ5dGVzIC0gcWMtPnNlY3Rfc2l6ZSkKLQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7Ci0KLQlwYWdlID0gc2dfcGFnZShxYy0+Y3Vyc2cpOwotCW9mZnNldCA9IHFjLT5jdXJzZy0+b2Zmc2V0ICsgcWMtPmN1cnNnX29mczsKLQotCS8qIGdldCB0aGUgY3VycmVudCBwYWdlIGFuZCBvZmZzZXQgKi8KLQlwYWdlID0gbnRoX3BhZ2UocGFnZSwgKG9mZnNldCA+PiBQQUdFX1NISUZUKSk7Ci0Jb2Zmc2V0ICU9IFBBR0VfU0laRTsKLQotCURQUklOVEsoImRhdGEgJXNcbiIsIHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSA/ICJ3cml0ZSIgOiAicmVhZCIpOwotCi0JaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJLyogRklYTUU6IHVzZSBhIGJvdW5jZSBidWZmZXIgKi8KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9JUlEwKTsKLQotCQkvKiBkbyB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXIgKi8KLQkJYXAtPm9wcy0+ZGF0YV94ZmVyKHFjLT5kZXYsIGJ1ZiArIG9mZnNldCwgcWMtPnNlY3Rfc2l6ZSwgZG9fd3JpdGUpOwotCi0JCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9JUlEwKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCWJ1ZiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQkJYXAtPm9wcy0+ZGF0YV94ZmVyKHFjLT5kZXYsIGJ1ZiArIG9mZnNldCwgcWMtPnNlY3Rfc2l6ZSwgZG9fd3JpdGUpOwotCX0KLQotCXFjLT5jdXJieXRlcyArPSBxYy0+c2VjdF9zaXplOwotCXFjLT5jdXJzZ19vZnMgKz0gcWMtPnNlY3Rfc2l6ZTsKLQotCWlmIChxYy0+Y3Vyc2dfb2ZzID09IHFjLT5jdXJzZy0+bGVuZ3RoKSB7Ci0JCXFjLT5jdXJzZyA9IHNnX25leHQocWMtPmN1cnNnKTsKLQkJcWMtPmN1cnNnX29mcyA9IDA7Ci0JfQotfQotCi0vKioKLSAqCWF0YV9waW9fc2VjdG9ycyAtIFRyYW5zZmVyIG9uZSBvciBtYW55IHNlY3RvcnMuCi0gKglAcWM6IENvbW1hbmQgb24gZ29pbmcKLSAqCi0gKglUcmFuc2ZlciBvbmUgb3IgbWFueSBzZWN0b3JzIG9mIGRhdGEgZnJvbS90byB0aGUKLSAqCUFUQSBkZXZpY2UgZm9yIHRoZSBEUlEgcmVxdWVzdC4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCi0KLXN0YXRpYyB2b2lkIGF0YV9waW9fc2VjdG9ycyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCWlmIChpc19tdWx0aV90YXNrZmlsZSgmcWMtPnRmKSkgewotCQkvKiBSRUFEL1dSSVRFIE1VTFRJUExFICovCi0JCXVuc2lnbmVkIGludCBuc2VjdDsKLQotCQlXQVJOX09OKHFjLT5kZXYtPm11bHRpX2NvdW50ID09IDApOwotCi0JCW5zZWN0ID0gbWluKChxYy0+bmJ5dGVzIC0gcWMtPmN1cmJ5dGVzKSAvIHFjLT5zZWN0X3NpemUsCi0JCQkgICAgcWMtPmRldi0+bXVsdGlfY291bnQpOwotCQl3aGlsZSAobnNlY3QtLSkKLQkJCWF0YV9waW9fc2VjdG9yKHFjKTsKLQl9IGVsc2UKLQkJYXRhX3Bpb19zZWN0b3IocWMpOwotCi0JYXRhX2FsdHN0YXR1cyhxYy0+YXApOyAvKiBmbHVzaCAqLwotfQotCi0vKioKLSAqCWF0YXBpX3NlbmRfY2RiIC0gV3JpdGUgQ0RCIGJ5dGVzIHRvIGhhcmR3YXJlCi0gKglAYXA6IFBvcnQgdG8gd2hpY2ggQVRBUEkgZGV2aWNlIGlzIGF0dGFjaGVkLgotICoJQHFjOiBUYXNrZmlsZSBjdXJyZW50bHkgYWN0aXZlCi0gKgotICoJV2hlbiBkZXZpY2UgaGFzIGluZGljYXRlZCBpdHMgcmVhZGluZXNzIHRvIGFjY2VwdAotICoJYSBDREIsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAgU2VuZCB0aGUgQ0RCLgotICoKLSAqCUxPQ0tJTkc6Ci0gKgljYWxsZXIuCi0gKi8KLQotc3RhdGljIHZvaWQgYXRhcGlfc2VuZF9jZGIoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQkvKiBzZW5kIFNDU0kgY2RiICovCi0JRFBSSU5USygic2VuZCBjZGJcbiIpOwotCVdBUk5fT04ocWMtPmRldi0+Y2RiX2xlbiA8IDEyKTsKLQotCWFwLT5vcHMtPmRhdGFfeGZlcihxYy0+ZGV2LCBxYy0+Y2RiLCBxYy0+ZGV2LT5jZGJfbGVuLCAxKTsKLQlhdGFfYWx0c3RhdHVzKGFwKTsgLyogZmx1c2ggKi8KLQotCXN3aXRjaCAocWMtPnRmLnByb3RvY29sKSB7Ci0JY2FzZSBBVEFQSV9QUk9UX1BJTzoKLQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUOwotCQlicmVhazsKLQljYXNlIEFUQVBJX1BST1RfTk9EQVRBOgotCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfTEFTVDsKLQkJYnJlYWs7Ci0JY2FzZSBBVEFQSV9QUk9UX0RNQToKLQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7Ci0JCS8qIGluaXRpYXRlIGJtZG1hICovCi0JCWFwLT5vcHMtPmJtZG1hX3N0YXJ0KHFjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKioKLSAqCV9fYXRhcGlfcGlvX2J5dGVzIC0gVHJhbnNmZXIgZGF0YSBmcm9tL3RvIHRoZSBBVEFQSSBkZXZpY2UuCi0gKglAcWM6IENvbW1hbmQgb24gZ29pbmcKLSAqCUBieXRlczogbnVtYmVyIG9mIGJ5dGVzCi0gKgotICoJVHJhbnNmZXIgVHJhbnNmZXIgZGF0YSBmcm9tL3RvIHRoZSBBVEFQSSBkZXZpY2UuCi0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgX19hdGFwaV9waW9fYnl0ZXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdW5zaWduZWQgaW50IGJ5dGVzKQotewotCWludCBkb193cml0ZSA9IChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpOwotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0Jc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmcWMtPmRldi0+bGluay0+ZWhfaW5mbzsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBjb3VudDsKLQotbmV4dF9zZzoKLQlzZyA9IHFjLT5jdXJzZzsKLQlpZiAodW5saWtlbHkoIXNnKSkgewotCQkvKgotCQkgKiBUaGUgZW5kIG9mIHFjLT5zZyBpcyByZWFjaGVkIGFuZCB0aGUgZGV2aWNlIGV4cGVjdHMKLQkJICogbW9yZSBkYXRhIHRvIHRyYW5zZmVyLiBJbiBvcmRlciBub3QgdG8gb3ZlcnJ1biBxYy0+c2cKLQkJICogYW5kIGZ1bGZpbGwgbGVuZ3RoIHNwZWNpZmllZCBpbiB0aGUgYnl0ZSBjb3VudCByZWdpc3RlciwKLQkJICogICAgLSBmb3IgcmVhZCBjYXNlLCBkaXNjYXJkIHRyYWlsaW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlCi0JCSAqICAgIC0gZm9yIHdyaXRlIGNhc2UsIHBhZGRpbmcgemVybyBkYXRhIHRvIHRoZSBkZXZpY2UKLQkJICovCi0JCXUxNiBwYWRfYnVmWzFdID0geyAwIH07Ci0JCXVuc2lnbmVkIGludCBpOwotCi0JCWlmIChieXRlcyA+IHFjLT5jdXJieXRlcyAtIHFjLT5uYnl0ZXMgKyBBVEFQSV9NQVhfRFJBSU4pIHsKLQkJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgInRvbyBtdWNoIHRyYWlsaW5nIGRhdGEgIgotCQkJCQkgICJidWY9JXUgY3VyPSV1IGJ5dGVzPSV1IiwKLQkJCQkJICBxYy0+bmJ5dGVzLCBxYy0+Y3VyYnl0ZXMsIGJ5dGVzKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCSAvKiBvdmVyZmxvdyBpcyBleHB0ZWN0ZWQgZm9yIG1pc2MgQVRBUEkgY29tbWFuZHMgKi8KLQkJaWYgKGJ5dGVzICYmICFhdGFwaV9xY19tYXlfb3ZlcmZsb3cocWMpKQotCQkJYXRhX2Rldl9wcmludGsocWMtPmRldiwgS0VSTl9XQVJOSU5HLCAiQVRBUEkgJXUgYnl0ZXMgIgotCQkJCSAgICAgICAidHJhaWxpbmcgZGF0YSAoY2RiPSUwMnggbmJ5dGVzPSV1KVxuIiwKLQkJCQkgICAgICAgYnl0ZXMsIHFjLT5jZGJbMF0sIHFjLT5uYnl0ZXMpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAoYnl0ZXMgKyAxKSAvIDI7IGkrKykKLQkJCWFwLT5vcHMtPmRhdGFfeGZlcihxYy0+ZGV2LCAodW5zaWduZWQgY2hhciAqKXBhZF9idWYsIDIsIGRvX3dyaXRlKTsKLQotCQlxYy0+Y3VyYnl0ZXMgKz0gYnl0ZXM7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcGFnZSA9IHNnX3BhZ2Uoc2cpOwotCW9mZnNldCA9IHNnLT5vZmZzZXQgKyBxYy0+Y3Vyc2dfb2ZzOwotCi0JLyogZ2V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIG9mZnNldCAqLwotCXBhZ2UgPSBudGhfcGFnZShwYWdlLCAob2Zmc2V0ID4+IFBBR0VfU0hJRlQpKTsKLQlvZmZzZXQgJT0gUEFHRV9TSVpFOwotCi0JLyogZG9uJ3Qgb3ZlcnJ1biBjdXJyZW50IHNnICovCi0JY291bnQgPSBtaW4oc2ctPmxlbmd0aCAtIHFjLT5jdXJzZ19vZnMsIGJ5dGVzKTsKLQotCS8qIGRvbid0IGNyb3NzIHBhZ2UgYm91bmRhcmllcyAqLwotCWNvdW50ID0gbWluKGNvdW50LCAodW5zaWduZWQgaW50KVBBR0VfU0laRSAtIG9mZnNldCk7Ci0KLQlEUFJJTlRLKCJkYXRhICVzXG4iLCBxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUgPyAid3JpdGUiIDogInJlYWQiKTsKLQotCWlmIChQYWdlSGlnaE1lbShwYWdlKSkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCS8qIEZJWE1FOiB1c2UgYm91bmNlIGJ1ZmZlciAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWJ1ZiA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0lSUTApOwotCi0JCS8qIGRvIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciAqLwotCQlhcC0+b3BzLT5kYXRhX3hmZXIocWMtPmRldiwgIGJ1ZiArIG9mZnNldCwgY291bnQsIGRvX3dyaXRlKTsKLQotCQlrdW5tYXBfYXRvbWljKGJ1ZiwgS01fSVJRMCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9IGVsc2UgewotCQlidWYgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JCWFwLT5vcHMtPmRhdGFfeGZlcihxYy0+ZGV2LCAgYnVmICsgb2Zmc2V0LCBjb3VudCwgZG9fd3JpdGUpOwotCX0KLQotCWJ5dGVzIC09IGNvdW50OwotCWlmICgoY291bnQgJiAxKSAmJiBieXRlcykKLQkJYnl0ZXMtLTsKLQlxYy0+Y3VyYnl0ZXMgKz0gY291bnQ7Ci0JcWMtPmN1cnNnX29mcyArPSBjb3VudDsKLQotCWlmIChxYy0+Y3Vyc2dfb2ZzID09IHNnLT5sZW5ndGgpIHsKLQkJcWMtPmN1cnNnID0gc2dfbmV4dChxYy0+Y3Vyc2cpOwotCQlxYy0+Y3Vyc2dfb2ZzID0gMDsKLQl9Ci0KLQlpZiAoYnl0ZXMpCi0JCWdvdG8gbmV4dF9zZzsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWF0YXBpX3Bpb19ieXRlcyAtIFRyYW5zZmVyIGRhdGEgZnJvbS90byB0aGUgQVRBUEkgZGV2aWNlLgotICoJQHFjOiBDb21tYW5kIG9uIGdvaW5nCi0gKgotICoJVHJhbnNmZXIgVHJhbnNmZXIgZGF0YSBmcm9tL3RvIHRoZSBBVEFQSSBkZXZpY2UuCi0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KLSAqLwotCi1zdGF0aWMgdm9pZCBhdGFwaV9waW9fYnl0ZXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSBxYy0+ZGV2OwotCXVuc2lnbmVkIGludCBpcmVhc29uLCBiY19sbywgYmNfaGksIGJ5dGVzOwotCWludCBpX3dyaXRlLCBkb193cml0ZSA9IChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpID8gMSA6IDA7Ci0KLQkvKiBBYnVzZSBxYy0+cmVzdWx0X3RmIGZvciB0ZW1wIHN0b3JhZ2Ugb2YgaW50ZXJtZWRpYXRlIFRGCi0JICogaGVyZSB0byBzYXZlIHNvbWUga2VybmVsIHN0YWNrIHVzYWdlLgotCSAqIEZvciBub3JtYWwgY29tcGxldGlvbiwgcWMtPnJlc3VsdF90ZiBpcyBub3QgcmVsZXZhbnQuIEZvcgotCSAqIGVycm9yLCBxYy0+cmVzdWx0X3RmIGlzIGxhdGVyIG92ZXJ3cml0dGVuIGJ5IGF0YV9xY19jb21wbGV0ZSgpLgotCSAqIFNvLCB0aGUgY29ycmVjdG5lc3Mgb2YgcWMtPnJlc3VsdF90ZiBpcyBub3QgYWZmZWN0ZWQuCi0JICovCi0JYXAtPm9wcy0+dGZfcmVhZChhcCwgJnFjLT5yZXN1bHRfdGYpOwotCWlyZWFzb24gPSBxYy0+cmVzdWx0X3RmLm5zZWN0OwotCWJjX2xvID0gcWMtPnJlc3VsdF90Zi5sYmFtOwotCWJjX2hpID0gcWMtPnJlc3VsdF90Zi5sYmFoOwotCWJ5dGVzID0gKGJjX2hpIDw8IDgpIHwgYmNfbG87Ci0KLQkvKiBzaGFsbCBiZSBjbGVhcmVkIHRvIHplcm8sIGluZGljYXRpbmcgeGZlciBvZiBkYXRhICovCi0JaWYgKHVubGlrZWx5KGlyZWFzb24gJiAoMSA8PCAwKSkpCi0JCWdvdG8gZXJyX291dDsKLQotCS8qIG1ha2Ugc3VyZSB0cmFuc2ZlciBkaXJlY3Rpb24gbWF0Y2hlcyBleHBlY3RlZCAqLwotCWlfd3JpdGUgPSAoKGlyZWFzb24gJiAoMSA8PCAxKSkgPT0gMCkgPyAxIDogMDsKLQlpZiAodW5saWtlbHkoZG9fd3JpdGUgIT0gaV93cml0ZSkpCi0JCWdvdG8gZXJyX291dDsKLQotCWlmICh1bmxpa2VseSghYnl0ZXMpKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQlWUFJJTlRLKCJhdGEldTogeGZlcmluZyAlZCBieXRlc1xuIiwgYXAtPnByaW50X2lkLCBieXRlcyk7Ci0KLQlpZiAoX19hdGFwaV9waW9fYnl0ZXMocWMsIGJ5dGVzKSkKLQkJZ290byBlcnJfb3V0OwotCWF0YV9hbHRzdGF0dXMoYXApOyAvKiBmbHVzaCAqLwotCi0JcmV0dXJuOwotCi1lcnJfb3V0OgotCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9JTkZPLCAiQVRBUEkgY2hlY2sgZmFpbGVkXG4iKTsKLQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKLQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOwotfQotCi0vKioKLSAqCWF0YV9oc21fb2tfaW5fd3EgLSBDaGVjayBpZiB0aGUgcWMgY2FuIGJlIGhhbmRsZWQgaW4gdGhlIHdvcmtxdWV1ZS4KLSAqCUBhcDogdGhlIHRhcmdldCBhdGFfcG9ydAotICoJQHFjOiBxYyBvbiBnb2luZwotICoKLSAqCVJFVFVSTlM6Ci0gKgkxIGlmIG9rIGluIHdvcmtxdWV1ZSwgMCBvdGhlcndpc2UuCi0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgYXRhX2hzbV9va19pbl93cShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoYXAtPmhzbV90YXNrX3N0YXRlID09IEhTTV9TVF9GSVJTVCkgewotCQlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX1BJTyAmJgotCQkgICAgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkpCi0JCSAgICByZXR1cm4gMTsKLQotCQlpZiAoYXRhX2lzX2F0YXBpKHFjLT50Zi5wcm90b2NvbCkgJiYKLQkJICAgICEocWMtPmRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfQ0RCX0lOVFIpKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJYXRhX2hzbV9xY19jb21wbGV0ZSAtIGZpbmlzaCBhIHFjIHJ1bm5pbmcgb24gc3RhbmRhcmQgSFNNCi0gKglAcWM6IENvbW1hbmQgdG8gY29tcGxldGUKLSAqCUBpbl93cTogMSBpZiBjYWxsZWQgZnJvbSB3b3JrcXVldWUsIDAgb3RoZXJ3aXNlCi0gKgotICoJRmluaXNoIEBxYyB3aGljaCBpcyBydW5uaW5nIG9uIHN0YW5kYXJkIEhTTS4KLSAqCi0gKglMT0NLSU5HOgotICoJSWYgQGluX3dxIGlzIHplcm8sIHNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykuCi0gKglPdGhlcndpc2UsIG5vbmUgb24gZW50cnkgYW5kIGdyYWJzIGhvc3QgbG9jay4KLSAqLwotc3RhdGljIHZvaWQgYXRhX2hzbV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCBpbnQgaW5fd3EpCi17Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGFwLT5vcHMtPmVycm9yX2hhbmRsZXIpIHsKLQkJaWYgKGluX3dxKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwotCi0JCQkvKiBFSCBtaWdodCBoYXZlIGtpY2tlZCBpbiB3aGlsZSBob3N0IGxvY2sgaXMKLQkJCSAqIHJlbGVhc2VkLgotCQkJICovCi0JCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgcWMtPnRhZyk7Ci0JCQlpZiAocWMpIHsKLQkJCQlpZiAobGlrZWx5KCEocWMtPmVycl9tYXNrICYgQUNfRVJSX0hTTSkpKSB7Ci0JCQkJCWFwLT5vcHMtPmlycV9vbihhcCk7Ci0JCQkJCWF0YV9xY19jb21wbGV0ZShxYyk7Ci0JCQkJfSBlbHNlCi0JCQkJCWF0YV9wb3J0X2ZyZWV6ZShhcCk7Ci0JCQl9Ci0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChsaWtlbHkoIShxYy0+ZXJyX21hc2sgJiBBQ19FUlJfSFNNKSkpCi0JCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKLQkJCWVsc2UKLQkJCQlhdGFfcG9ydF9mcmVlemUoYXApOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGluX3dxKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwotCQkJYXAtPm9wcy0+aXJxX29uKGFwKTsKLQkJCWF0YV9xY19jb21wbGV0ZShxYyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7Ci0JCX0gZWxzZQotCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKLQl9Ci19Ci0KLS8qKgotICoJYXRhX2hzbV9tb3ZlIC0gbW92ZSB0aGUgSFNNIHRvIHRoZSBuZXh0IHN0YXRlLgotICoJQGFwOiB0aGUgdGFyZ2V0IGF0YV9wb3J0Ci0gKglAcWM6IHFjIG9uIGdvaW5nCi0gKglAc3RhdHVzOiBjdXJyZW50IGRldmljZSBzdGF0dXMKLSAqCUBpbl93cTogMSBpZiBjYWxsZWQgZnJvbSB3b3JrcXVldWUsIDAgb3RoZXJ3aXNlCi0gKgotICoJUkVUVVJOUzoKLSAqCTEgd2hlbiBwb2xsIG5leHQgc3RhdHVzIG5lZWRlZCwgMCBvdGhlcndpc2UuCi0gKi8KLWludCBhdGFfaHNtX21vdmUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywKLQkJIHU4IHN0YXR1cywgaW50IGluX3dxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCWludCBwb2xsX25leHQ7Ci0KLQlXQVJOX09OKChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkgPT0gMCk7Ci0KLQkvKiBNYWtlIHN1cmUgYXRhX3FjX2lzc3VlX3Byb3QoKSBkb2VzIG5vdCB0aHJvdyB0aGluZ3MKLQkgKiBsaWtlIERNQSBwb2xsaW5nIGludG8gdGhlIHdvcmtxdWV1ZS4gTm90aWNlIHRoYXQKLQkgKiBpbl93cSBpcyBub3QgZXF1aXZhbGVudCB0byAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpLgotCSAqLwotCVdBUk5fT04oaW5fd3EgIT0gYXRhX2hzbV9va19pbl93cShhcCwgcWMpKTsKLQotZnNtX3N0YXJ0OgotCURQUklOVEsoImF0YSV1OiBwcm90b2NvbCAlZCB0YXNrX3N0YXRlICVkIChkZXZfc3RhdCAweCVYKVxuIiwKLQkJYXAtPnByaW50X2lkLCBxYy0+dGYucHJvdG9jb2wsIGFwLT5oc21fdGFza19zdGF0ZSwgc3RhdHVzKTsKLQotCXN3aXRjaCAoYXAtPmhzbV90YXNrX3N0YXRlKSB7Ci0JY2FzZSBIU01fU1RfRklSU1Q6Ci0JCS8qIFNlbmQgZmlyc3QgZGF0YSBibG9jayBvciBQQUNLRVQgQ0RCICovCi0KLQkJLyogSWYgcG9sbGluZywgd2Ugd2lsbCBzdGF5IGluIHRoZSB3b3JrIHF1ZXVlIGFmdGVyCi0JCSAqIHNlbmRpbmcgdGhlIGRhdGEuIE90aGVyd2lzZSwgaW50ZXJydXB0IGhhbmRsZXIKLQkJICogdGFrZXMgb3ZlciBhZnRlciBzZW5kaW5nIHRoZSBkYXRhLgotCQkgKi8KLQkJcG9sbF9uZXh0ID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKTsKLQotCQkvKiBjaGVjayBkZXZpY2Ugc3RhdHVzICovCi0JCWlmICh1bmxpa2VseSgoc3RhdHVzICYgQVRBX0RSUSkgPT0gMCkpIHsKLQkJCS8qIGhhbmRsZSBCU1k9MCwgRFJRPTAgYXMgZXJyb3IgKi8KLQkJCWlmIChsaWtlbHkoc3RhdHVzICYgKEFUQV9FUlIgfCBBVEFfREYpKSkKLQkJCQkvKiBkZXZpY2Ugc3RvcHMgSFNNIGZvciBhYm9ydC9lcnJvciAqLwotCQkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfREVWOwotCQkJZWxzZQotCQkJCS8qIEhTTSB2aW9sYXRpb24uIExldCBFSCBoYW5kbGUgdGhpcyAqLwotCQkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNOwotCi0JCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOwotCQkJZ290byBmc21fc3RhcnQ7Ci0JCX0KLQotCQkvKiBEZXZpY2Ugc2hvdWxkIG5vdCBhc2sgZm9yIGRhdGEgdHJhbnNmZXIgKERSUT0xKQotCQkgKiB3aGVuIGl0IGZpbmRzIHNvbWV0aGluZyB3cm9uZy4KLQkJICogV2UgaWdub3JlIERSUSBoZXJlIGFuZCBzdG9wIHRoZSBIU00gYnkKLQkJICogY2hhbmdpbmcgaHNtX3Rhc2tfc3RhdGUgdG8gSFNNX1NUX0VSUiBhbmQKLQkJICogbGV0IHRoZSBFSCBhYm9ydCB0aGUgY29tbWFuZCBvciByZXNldCB0aGUgZGV2aWNlLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIChBVEFfRVJSIHwgQVRBX0RGKSkpIHsKLQkJCS8qIFNvbWUgQVRBUEkgdGFwZSBkcml2ZXMgZm9yZ2V0IHRvIGNsZWFyIHRoZSBFUlIgYml0Ci0JCQkgKiB3aGVuIGRvaW5nIHRoZSBuZXh0IGNvbW1hbmQgKG1vc3RseSByZXF1ZXN0IHNlbnNlKS4KLQkJCSAqIFdlIGlnbm9yZSBFUlIgaGVyZSB0byB3b3JrYXJvdW5kIGFuZCBwcm9jZWVkIHNlbmRpbmcKLQkJCSAqIHRoZSBDREIuCi0JCQkgKi8KLQkJCWlmICghKHFjLT5kZXYtPmhvcmthZ2UgJiBBVEFfSE9SS0FHRV9TVFVDS19FUlIpKSB7Ci0JCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsCi0JCQkJCQkiRFJRPTEgd2l0aCBkZXZpY2UgZXJyb3IsICIKLQkJCQkJCSJkZXZfc3RhdCAweCVYXG4iLCBzdGF0dXMpOwotCQkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNOwotCQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7Ci0JCQkJZ290byBmc21fc3RhcnQ7Ci0JCQl9Ci0JCX0KLQotCQkvKiBTZW5kIHRoZSBDREIgKGF0YXBpKSBvciB0aGUgZmlyc3QgZGF0YSBibG9jayAoYXRhIHBpbyBvdXQpLgotCQkgKiBEdXJpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb24sIGludGVycnVwdCBoYW5kbGVyIHNob3VsZG4ndAotCQkgKiBiZSBpbnZva2VkIGJlZm9yZSB0aGUgZGF0YSB0cmFuc2ZlciBpcyBjb21wbGV0ZSBhbmQKLQkJICogaHNtX3Rhc2tfc3RhdGUgaXMgY2hhbmdlZC4gSGVuY2UsIHRoZSBmb2xsb3dpbmcgbG9ja2luZy4KLQkJICovCi0JCWlmIChpbl93cSkKLQkJCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKHFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9QSU8pIHsKLQkJCS8qIFBJTyBkYXRhIG91dCBwcm90b2NvbC4KLQkJCSAqIHNlbmQgZmlyc3QgZGF0YSBibG9jay4KLQkJCSAqLwotCi0JCQkvKiBhdGFfcGlvX3NlY3RvcnMoKSBtaWdodCBjaGFuZ2UgdGhlIHN0YXRlCi0JCQkgKiB0byBIU01fU1RfTEFTVC4gc28sIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkIGhlcmUKLQkJCSAqIGJlZm9yZSBhdGFfcGlvX3NlY3RvcnMoKS4KLQkJCSAqLwotCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUOwotCQkJYXRhX3Bpb19zZWN0b3JzKHFjKTsKLQkJfSBlbHNlCi0JCQkvKiBzZW5kIENEQiAqLwotCQkJYXRhcGlfc2VuZF9jZGIoYXAsIHFjKTsKLQotCQlpZiAoaW5fd3EpCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7Ci0KLQkJLyogaWYgcG9sbGluZywgYXRhX3Bpb190YXNrKCkgaGFuZGxlcyB0aGUgcmVzdC4KLQkJICogb3RoZXJ3aXNlLCBpbnRlcnJ1cHQgaGFuZGxlciB0YWtlcyBvdmVyIGZyb20gaGVyZS4KLQkJICovCi0JCWJyZWFrOwotCi0JY2FzZSBIU01fU1Q6Ci0JCS8qIGNvbXBsZXRlIGNvbW1hbmQgb3IgcmVhZC93cml0ZSB0aGUgZGF0YSByZWdpc3RlciAqLwotCQlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQVBJX1BST1RfUElPKSB7Ci0JCQkvKiBBVEFQSSBQSU8gcHJvdG9jb2wgKi8KLQkJCWlmICgoc3RhdHVzICYgQVRBX0RSUSkgPT0gMCkgewotCQkJCS8qIE5vIG1vcmUgZGF0YSB0byB0cmFuc2ZlciBvciBkZXZpY2UgZXJyb3IuCi0JCQkJICogRGV2aWNlIGVycm9yIHdpbGwgYmUgdGFnZ2VkIGluIEhTTV9TVF9MQVNULgotCQkJCSAqLwotCQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9MQVNUOwotCQkJCWdvdG8gZnNtX3N0YXJ0OwotCQkJfQotCi0JCQkvKiBEZXZpY2Ugc2hvdWxkIG5vdCBhc2sgZm9yIGRhdGEgdHJhbnNmZXIgKERSUT0xKQotCQkJICogd2hlbiBpdCBmaW5kcyBzb21ldGhpbmcgd3JvbmcuCi0JCQkgKiBXZSBpZ25vcmUgRFJRIGhlcmUgYW5kIHN0b3AgdGhlIEhTTSBieQotCQkJICogY2hhbmdpbmcgaHNtX3Rhc2tfc3RhdGUgdG8gSFNNX1NUX0VSUiBhbmQKLQkJCSAqIGxldCB0aGUgRUggYWJvcnQgdGhlIGNvbW1hbmQgb3IgcmVzZXQgdGhlIGRldmljZS4KLQkJCSAqLwotCQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIChBVEFfRVJSIHwgQVRBX0RGKSkpIHsKLQkJCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgIkRSUT0xIHdpdGggIgotCQkJCQkJImRldmljZSBlcnJvciwgZGV2X3N0YXQgMHglWFxuIiwKLQkJCQkJCXN0YXR1cyk7Ci0JCQkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9IU007Ci0JCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0VSUjsKLQkJCQlnb3RvIGZzbV9zdGFydDsKLQkJCX0KLQotCQkJYXRhcGlfcGlvX2J5dGVzKHFjKTsKLQotCQkJaWYgKHVubGlrZWx5KGFwLT5oc21fdGFza19zdGF0ZSA9PSBIU01fU1RfRVJSKSkKLQkJCQkvKiBiYWQgaXJlYXNvbiByZXBvcnRlZCBieSBkZXZpY2UgKi8KLQkJCQlnb3RvIGZzbV9zdGFydDsKLQotCQl9IGVsc2UgewotCQkJLyogQVRBIFBJTyBwcm90b2NvbCAqLwotCQkJaWYgKHVubGlrZWx5KChzdGF0dXMgJiBBVEFfRFJRKSA9PSAwKSkgewotCQkJCS8qIGhhbmRsZSBCU1k9MCwgRFJRPTAgYXMgZXJyb3IgKi8KLQkJCQlpZiAobGlrZWx5KHN0YXR1cyAmIChBVEFfRVJSIHwgQVRBX0RGKSkpCi0JCQkJCS8qIGRldmljZSBzdG9wcyBIU00gZm9yIGFib3J0L2Vycm9yICovCi0JCQkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfREVWOwotCQkJCWVsc2UKLQkJCQkJLyogSFNNIHZpb2xhdGlvbi4gTGV0IEVIIGhhbmRsZSB0aGlzLgotCQkJCQkgKiBQaGFudG9tIGRldmljZXMgYWxzbyB0cmlnZ2VyIHRoaXMKLQkJCQkJICogY29uZGl0aW9uLiAgTWFyayBoaW50LgotCQkJCQkgKi8KLQkJCQkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9IU00gfAotCQkJCQkJCUFDX0VSUl9OT0RFVl9ISU5UOwotCi0JCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0VSUjsKLQkJCQlnb3RvIGZzbV9zdGFydDsKLQkJCX0KLQotCQkJLyogRm9yIFBJTyByZWFkcywgc29tZSBkZXZpY2VzIG1heSBhc2sgZm9yCi0JCQkgKiBkYXRhIHRyYW5zZmVyIChEUlE9MSkgYWxvbmUgd2l0aCBFUlI9MS4KLQkJCSAqIFdlIHJlc3BlY3QgRFJRIGhlcmUgYW5kIHRyYW5zZmVyIG9uZQotCQkJICogYmxvY2sgb2YganVuayBkYXRhIGJlZm9yZSBjaGFuZ2luZyB0aGUKLQkJCSAqIGhzbV90YXNrX3N0YXRlIHRvIEhTTV9TVF9FUlIuCi0JCQkgKgotCQkJICogRm9yIFBJTyB3cml0ZXMsIEVSUj0xIERSUT0xIGRvZXNuJ3QgbWFrZQotCQkJICogc2Vuc2Ugc2luY2UgdGhlIGRhdGEgYmxvY2sgaGFzIGJlZW4KLQkJCSAqIHRyYW5zZmVycmVkIHRvIHRoZSBkZXZpY2UuCi0JCQkgKi8KLQkJCWlmICh1bmxpa2VseShzdGF0dXMgJiAoQVRBX0VSUiB8IEFUQV9ERikpKSB7Ci0JCQkJLyogZGF0YSBtaWdodCBiZSBjb3JycHV0ZWQgKi8KLQkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0RFVjsKLQotCQkJCWlmICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkpIHsKLQkJCQkJYXRhX3Bpb19zZWN0b3JzKHFjKTsKLQkJCQkJc3RhdHVzID0gYXRhX3dhaXRfaWRsZShhcCk7Ci0JCQkJfQotCi0JCQkJaWYgKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQotCQkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKLQotCQkJCS8qIGF0YV9waW9fc2VjdG9ycygpIG1pZ2h0IGNoYW5nZSB0aGUKLQkJCQkgKiBzdGF0ZSB0byBIU01fU1RfTEFTVC4gc28sIHRoZSBzdGF0ZQotCQkJCSAqIGlzIGNoYW5nZWQgYWZ0ZXIgYXRhX3Bpb19zZWN0b3JzKCkuCi0JCQkJICovCi0JCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0VSUjsKLQkJCQlnb3RvIGZzbV9zdGFydDsKLQkJCX0KLQotCQkJYXRhX3Bpb19zZWN0b3JzKHFjKTsKLQotCQkJaWYgKGFwLT5oc21fdGFza19zdGF0ZSA9PSBIU01fU1RfTEFTVCAmJgotCQkJICAgICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkpKSB7Ci0JCQkJLyogYWxsIGRhdGEgcmVhZCAqLwotCQkJCXN0YXR1cyA9IGF0YV93YWl0X2lkbGUoYXApOwotCQkJCWdvdG8gZnNtX3N0YXJ0OwotCQkJfQotCQl9Ci0KLQkJcG9sbF9uZXh0ID0gMTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhTTV9TVF9MQVNUOgotCQlpZiAodW5saWtlbHkoIWF0YV9vayhzdGF0dXMpKSkgewotCQkJcWMtPmVycl9tYXNrIHw9IF9fYWNfZXJyX21hc2soc3RhdHVzKTsKLQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7Ci0JCQlnb3RvIGZzbV9zdGFydDsKLQkJfQotCi0JCS8qIG5vIG1vcmUgZGF0YSB0byB0cmFuc2ZlciAqLwotCQlEUFJJTlRLKCJhdGEldTogZGV2ICV1IGNvbW1hbmQgY29tcGxldGUsIGRydl9zdGF0IDB4JXhcbiIsCi0JCQlhcC0+cHJpbnRfaWQsIHFjLT5kZXYtPmRldm5vLCBzdGF0dXMpOwotCi0JCVdBUk5fT04ocWMtPmVycl9tYXNrKTsKLQotCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfSURMRTsKLQotCQkvKiBjb21wbGV0ZSB0YXNrZmlsZSB0cmFuc2FjdGlvbiAqLwotCQlhdGFfaHNtX3FjX2NvbXBsZXRlKHFjLCBpbl93cSk7Ci0KLQkJcG9sbF9uZXh0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIEhTTV9TVF9FUlI6Ci0JCS8qIG1ha2Ugc3VyZSBxYy0+ZXJyX21hc2sgaXMgYXZhaWxhYmxlIHRvCi0JCSAqIGtub3cgd2hhdCdzIHdyb25nIGFuZCByZWNvdmVyCi0JCSAqLwotCQlXQVJOX09OKHFjLT5lcnJfbWFzayA9PSAwKTsKLQotCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfSURMRTsKLQotCQkvKiBjb21wbGV0ZSB0YXNrZmlsZSB0cmFuc2FjdGlvbiAqLwotCQlhdGFfaHNtX3FjX2NvbXBsZXRlKHFjLCBpbl93cSk7Ci0KLQkJcG9sbF9uZXh0ID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcG9sbF9uZXh0ID0gMDsKLQkJQlVHKCk7Ci0JfQotCi0JcmV0dXJuIHBvbGxfbmV4dDsKLX0KLQotc3RhdGljIHZvaWQgYXRhX3Bpb190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGFfcG9ydCwgcG9ydF90YXNrLndvcmspOwotCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMgPSBhcC0+cG9ydF90YXNrX2RhdGE7Ci0JdTggc3RhdHVzOwotCWludCBwb2xsX25leHQ7Ci0KLWZzbV9zdGFydDoKLQlXQVJOX09OKGFwLT5oc21fdGFza19zdGF0ZSA9PSBIU01fU1RfSURMRSk7Ci0KLQkvKgotCSAqIFRoaXMgaXMgcHVyZWx5IGhldXJpc3RpYy4gIFRoaXMgaXMgYSBmYXN0IHBhdGguCi0JICogU29tZXRpbWVzIHdoZW4gd2UgZW50ZXIsIEJTWSB3aWxsIGJlIGNsZWFyZWQgaW4KLQkgKiBhIGNoay1zdGF0dXMgb3IgdHdvLiAgSWYgbm90LCB0aGUgZHJpdmUgaXMgcHJvYmFibHkgc2Vla2luZwotCSAqIG9yIHNvbWV0aGluZy4gIFNub296ZSBmb3IgYSBjb3VwbGUgbXNlY3MsIHRoZW4KLQkgKiBjaGstc3RhdHVzIGFnYWluLiAgSWYgc3RpbGwgYnVzeSwgcXVldWUgZGVsYXllZCB3b3JrLgotCSAqLwotCXN0YXR1cyA9IGF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZLCA1KTsKLQlpZiAoc3RhdHVzICYgQVRBX0JVU1kpIHsKLQkJbXNsZWVwKDIpOwotCQlzdGF0dXMgPSBhdGFfYnVzeV93YWl0KGFwLCBBVEFfQlVTWSwgMTApOwotCQlpZiAoc3RhdHVzICYgQVRBX0JVU1kpIHsKLQkJCWF0YV9waW9fcXVldWVfdGFzayhhcCwgcWMsIEFUQV9TSE9SVF9QQVVTRSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKiBtb3ZlIHRoZSBIU00gKi8KLQlwb2xsX25leHQgPSBhdGFfaHNtX21vdmUoYXAsIHFjLCBzdGF0dXMsIDEpOwotCi0JLyogYW5vdGhlciBjb21tYW5kIG9yIGludGVycnVwdCBoYW5kbGVyCi0JICogbWF5IGJlIHJ1bm5pbmcgYXQgdGhpcyBwb2ludC4KLQkgKi8KLQlpZiAocG9sbF9uZXh0KQotCQlnb3RvIGZzbV9zdGFydDsKLX0KLQotLyoqCiAgKglhdGFfcWNfbmV3IC0gUmVxdWVzdCBhbiBhdmFpbGFibGUgQVRBIGNvbW1hbmQsIGZvciBxdWV1ZWluZwogICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UgQGRldgogICoJQGRldjogRGV2aWNlIGZyb20gd2hvbSB3ZSByZXF1ZXN0IGFuIGF2YWlsYWJsZSBjb21tYW5kIHN0cnVjdHVyZQpAQCAtNTc3MSw3ICs0NTQ4LDcgQEAKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCiAJcWMtPnJlc3VsdF90Zi5mbGFncyA9IHFjLT50Zi5mbGFnczsKLQlhcC0+b3BzLT50Zl9yZWFkKGFwLCAmcWMtPnJlc3VsdF90Zik7CisJYXAtPm9wcy0+cWNfZmlsbF9ydGYocWMpOwogfQogCiBzdGF0aWMgdm9pZCBhdGFfdmVyaWZ5X3hmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKQEAgLTU4ODEsNyArNDY1OCw2IEBACiAgKglhdGFfcWNfY29tcGxldGVfbXVsdGlwbGUgLSBDb21wbGV0ZSBtdWx0aXBsZSBxY3Mgc3VjY2Vzc2Z1bGx5CiAgKglAYXA6IHBvcnQgaW4gcXVlc3Rpb24KICAqCUBxY19hY3RpdmU6IG5ldyBxY19hY3RpdmUgbWFzawotICoJQGZpbmlzaF9xYzogTExERCBjYWxsYmFjayBpbnZva2VkIGJlZm9yZSBjb21wbGV0aW5nIGEgcWMKICAqCiAgKglDb21wbGV0ZSBpbi1mbGlnaHQgY29tbWFuZHMuICBUaGlzIGZ1bmN0aW9ucyBpcyBtZWFudCB0byBiZQogICoJY2FsbGVkIGZyb20gbG93LWxldmVsIGRyaXZlcidzIGludGVycnVwdCByb3V0aW5lIHRvIGNvbXBsZXRlCkBAIC01ODk0LDggKzQ2NzAsNyBAQAogICoJUkVUVVJOUzoKICAqCU51bWJlciBvZiBjb21wbGV0ZWQgY29tbWFuZHMgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotaW50IGF0YV9xY19jb21wbGV0ZV9tdWx0aXBsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1MzIgcWNfYWN0aXZlLAotCQkJICAgICB2b2lkICgqZmluaXNoX3FjKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKikpCitpbnQgYXRhX3FjX2NvbXBsZXRlX211bHRpcGxlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBxY19hY3RpdmUpCiB7CiAJaW50IG5yX2RvbmUgPSAwOwogCXUzMiBkb25lX21hc2s7CkBAIC01OTE2LDggKzQ2OTEsNiBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKChxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgaSkpKSB7Ci0JCQlpZiAoZmluaXNoX3FjKQotCQkJCWZpbmlzaF9xYyhxYyk7CiAJCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQkJbnJfZG9uZSsrOwogCQl9CkBAIC01OTcxLDE3ICs0NzQ0LDE0IEBACiAJICovCiAJQlVHX09OKGF0YV9pc19kYXRhKHByb3QpICYmICghcWMtPnNnIHx8ICFxYy0+bl9lbGVtIHx8ICFxYy0+bmJ5dGVzKSk7CiAKLQkvKiBhdGFfc2dfc2V0dXAoKSBtYXkgdXBkYXRlIG5ieXRlcyAqLwotCXFjLT5yYXdfbmJ5dGVzID0gcWMtPm5ieXRlczsKLQogCWlmIChhdGFfaXNfZG1hKHByb3QpIHx8IChhdGFfaXNfcGlvKHByb3QpICYmCiAJCQkJIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QSU9fRE1BKSkpCiAJCWlmIChhdGFfc2dfc2V0dXAocWMpKQogCQkJZ290byBzZ19lcnI7CiAKLQkvKiBpZiBkZXZpY2UgaXMgc2xlZXBpbmcsIHNjaGVkdWxlIHNvZnRyZXNldCBhbmQgYWJvcnQgdGhlIGxpbmsgKi8KKwkvKiBpZiBkZXZpY2UgaXMgc2xlZXBpbmcsIHNjaGVkdWxlIHJlc2V0IGFuZCBhYm9ydCB0aGUgbGluayAqLwogCWlmICh1bmxpa2VseShxYy0+ZGV2LT5mbGFncyAmIEFUQV9ERkxBR19TTEVFUElORykpIHsKLQkJbGluay0+ZWhfaW5mby5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJbGluay0+ZWhfaW5mby5hY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQlhdGFfZWhpX3B1c2hfZGVzYygmbGluay0+ZWhfaW5mbywgIndha2luZyB1cCBmcm9tIHNsZWVwIik7CiAJCWF0YV9saW5rX2Fib3J0KGxpbmspOwogCQlyZXR1cm47CkBAIC02MDAxLDI4NSArNDc3MSw2IEBACiB9CiAKIC8qKgotICoJYXRhX3FjX2lzc3VlX3Byb3QgLSBpc3N1ZSB0YXNrZmlsZSB0byBkZXZpY2UgaW4gcHJvdG8tZGVwZW5kZW50IG1hbm5lcgotICoJQHFjOiBjb21tYW5kIHRvIGlzc3VlIHRvIGRldmljZQotICoKLSAqCVVzaW5nIHZhcmlvdXMgbGliYXRhIGZ1bmN0aW9ucyBhbmQgaG9va3MsIHRoaXMgZnVuY3Rpb24KLSAqCXN0YXJ0cyBhbiBBVEEgY29tbWFuZC4gIEFUQSBjb21tYW5kcyBhcmUgZ3JvdXBlZCBpbnRvCi0gKgljbGFzc2VzIGNhbGxlZCAicHJvdG9jb2xzIiwgYW5kIGlzc3VpbmcgZWFjaCB0eXBlIG9mIHByb3RvY29sCi0gKglpcyBzbGlnaHRseSBkaWZmZXJlbnQuCi0gKgotICoJTWF5IGJlIHVzZWQgYXMgdGhlIHFjX2lzc3VlKCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdCBsb2NrKQotICoKLSAqCVJFVFVSTlM6Ci0gKglaZXJvIG9uIHN1Y2Nlc3MsIEFDX0VSUl8qIG1hc2sgb24gZmFpbHVyZQotICovCi0KLXVuc2lnbmVkIGludCBhdGFfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0KLQkvKiBVc2UgcG9sbGluZyBwaW8gaWYgdGhlIExMRCBkb2Vzbid0IGhhbmRsZQotCSAqIGludGVycnVwdCBkcml2ZW4gcGlvIGFuZCBhdGFwaSBDREIgaW50ZXJydXB0LgotCSAqLwotCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QSU9fUE9MTElORykgewotCQlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgewotCQljYXNlIEFUQV9QUk9UX1BJTzoKLQkJY2FzZSBBVEFfUFJPVF9OT0RBVEE6Ci0JCWNhc2UgQVRBUElfUFJPVF9QSU86Ci0JCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6Ci0JCQlxYy0+dGYuZmxhZ3MgfD0gQVRBX1RGTEFHX1BPTExJTkc7Ci0JCQlicmVhazsKLQkJY2FzZSBBVEFQSV9QUk9UX0RNQToKLQkJCWlmIChxYy0+ZGV2LT5mbGFncyAmIEFUQV9ERkxBR19DREJfSU5UUikKLQkJCQkvKiBzZWUgYXRhX2RtYV9ibGFja2xpc3RlZCgpICovCi0JCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogc2VsZWN0IHRoZSBkZXZpY2UgKi8KLQlhdGFfZGV2X3NlbGVjdChhcCwgcWMtPmRldi0+ZGV2bm8sIDEsIDApOwotCi0JLyogc3RhcnQgdGhlIGNvbW1hbmQgKi8KLQlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgewotCWNhc2UgQVRBX1BST1RfTk9EQVRBOgotCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCi0JCQlhdGFfcWNfc2V0X3BvbGxpbmcocWMpOwotCi0JCWF0YV90Zl90b19ob3N0KGFwLCAmcWMtPnRmKTsKLQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7Ci0KLQkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQotCQkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgMCk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIEFUQV9QUk9UX0RNQToKLQkJV0FSTl9PTihxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORyk7Ci0KLQkJYXAtPm9wcy0+dGZfbG9hZChhcCwgJnFjLT50Zik7CSAvKiBsb2FkIHRmIHJlZ2lzdGVycyAqLwotCQlhcC0+b3BzLT5ibWRtYV9zZXR1cChxYyk7CSAgICAvKiBzZXQgdXAgYm1kbWEgKi8KLQkJYXAtPm9wcy0+Ym1kbWFfc3RhcnQocWMpOwkgICAgLyogaW5pdGlhdGUgYm1kbWEgKi8KLQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0xBU1Q7Ci0JCWJyZWFrOwotCi0JY2FzZSBBVEFfUFJPVF9QSU86Ci0JCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKLQkJCWF0YV9xY19zZXRfcG9sbGluZyhxYyk7Ci0KLQkJYXRhX3RmX3RvX2hvc3QoYXAsICZxYy0+dGYpOwotCi0JCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpIHsKLQkJCS8qIFBJTyBkYXRhIG91dCBwcm90b2NvbCAqLwotCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0ZJUlNUOwotCQkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgMCk7Ci0KLQkJCS8qIGFsd2F5cyBzZW5kIGZpcnN0IGRhdGEgYmxvY2sgdXNpbmcKLQkJCSAqIHRoZSBhdGFfcGlvX3Rhc2soKSBjb2RlcGF0aC4KLQkJCSAqLwotCQl9IGVsc2UgewotCQkJLyogUElPIGRhdGEgaW4gcHJvdG9jb2wgKi8KLQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKLQotCQkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQotCQkJCWF0YV9waW9fcXVldWVfdGFzayhhcCwgcWMsIDApOwotCi0JCQkvKiBpZiBwb2xsaW5nLCBhdGFfcGlvX3Rhc2soKSBoYW5kbGVzIHRoZSByZXN0LgotCQkJICogb3RoZXJ3aXNlLCBpbnRlcnJ1cHQgaGFuZGxlciB0YWtlcyBvdmVyIGZyb20gaGVyZS4KLQkJCSAqLwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIEFUQVBJX1BST1RfUElPOgotCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6Ci0JCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKLQkJCWF0YV9xY19zZXRfcG9sbGluZyhxYyk7Ci0KLQkJYXRhX3RmX3RvX2hvc3QoYXAsICZxYy0+dGYpOwotCi0JCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9GSVJTVDsKLQotCQkvKiBzZW5kIGNkYiBieSBwb2xsaW5nIGlmIG5vIGNkYiBpbnRlcnJ1cHQgKi8KLQkJaWYgKCghKHFjLT5kZXYtPmZsYWdzICYgQVRBX0RGTEFHX0NEQl9JTlRSKSkgfHwKLQkJICAgIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykpCi0JCQlhdGFfcGlvX3F1ZXVlX3Rhc2soYXAsIHFjLCAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFUQVBJX1BST1RfRE1BOgotCQlXQVJOX09OKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKTsKLQotCQlhcC0+b3BzLT50Zl9sb2FkKGFwLCAmcWMtPnRmKTsJIC8qIGxvYWQgdGYgcmVnaXN0ZXJzICovCi0JCWFwLT5vcHMtPmJtZG1hX3NldHVwKHFjKTsJICAgIC8qIHNldCB1cCBibWRtYSAqLwotCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7Ci0KLQkJLyogc2VuZCBjZGIgYnkgcG9sbGluZyBpZiBubyBjZGIgaW50ZXJydXB0ICovCi0JCWlmICghKHFjLT5kZXYtPmZsYWdzICYgQVRBX0RGTEFHX0NEQl9JTlRSKSkKLQkJCWF0YV9waW9fcXVldWVfdGFzayhhcCwgcWMsIDApOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybiBBQ19FUlJfU1lTVEVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWF0YV9ob3N0X2ludHIgLSBIYW5kbGUgaG9zdCBpbnRlcnJ1cHQgZm9yIGdpdmVuIChwb3J0LCB0YXNrKQotICoJQGFwOiBQb3J0IG9uIHdoaWNoIGludGVycnVwdCBhcnJpdmVkIChwb3NzaWJseS4uLikKLSAqCUBxYzogVGFza2ZpbGUgY3VycmVudGx5IGFjdGl2ZSBpbiBlbmdpbmUKLSAqCi0gKglIYW5kbGUgaG9zdCBpbnRlcnJ1cHQgZm9yIGdpdmVuIHF1ZXVlZCBjb21tYW5kLiAgQ3VycmVudGx5LAotICoJb25seSBETUEgaW50ZXJydXB0cyBhcmUgaGFuZGxlZC4gIEFsbCBvdGhlciBjb21tYW5kcyBhcmUKLSAqCWhhbmRsZWQgdmlhIHBvbGxpbmcgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIChuSUVOIGJpdCkuCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKLSAqCi0gKglSRVRVUk5TOgotICoJT25lIGlmIGludGVycnVwdCB3YXMgaGFuZGxlZCwgemVybyBpZiBub3QgKHNoYXJlZCBpcnEpLgotICovCi0KLWlubGluZSB1bnNpZ25lZCBpbnQgYXRhX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCSAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+bGluay5laF9pbmZvOwotCXU4IHN0YXR1cywgaG9zdF9zdGF0ID0gMDsKLQotCVZQUklOVEsoImF0YSV1OiBwcm90b2NvbCAlZCB0YXNrX3N0YXRlICVkXG4iLAotCQlhcC0+cHJpbnRfaWQsIHFjLT50Zi5wcm90b2NvbCwgYXAtPmhzbV90YXNrX3N0YXRlKTsKLQotCS8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGV4cGVjdGluZyBpbnRlcnJ1cHQgaW4gdGhpcyBzdGF0ZSAqLwotCXN3aXRjaCAoYXAtPmhzbV90YXNrX3N0YXRlKSB7Ci0JY2FzZSBIU01fU1RfRklSU1Q6Ci0JCS8qIFNvbWUgcHJlLUFUQVBJLTQgZGV2aWNlcyBhc3NlcnQgSU5UUlEKLQkJICogYXQgdGhpcyBzdGF0ZSB3aGVuIHJlYWR5IHRvIHJlY2VpdmUgQ0RCLgotCQkgKi8KLQotCQkvKiBDaGVjayB0aGUgQVRBX0RGTEFHX0NEQl9JTlRSIGZsYWcgaXMgZW5vdWdoIGhlcmUuCi0JCSAqIFRoZSBmbGFnIHdhcyB0dXJuZWQgb24gb25seSBmb3IgYXRhcGkgZGV2aWNlcy4gIE5vCi0JCSAqIG5lZWQgdG8gY2hlY2sgYXRhX2lzX2F0YXBpKHFjLT50Zi5wcm90b2NvbCkgYWdhaW4uCi0JCSAqLwotCQlpZiAoIShxYy0+ZGV2LT5mbGFncyAmIEFUQV9ERkxBR19DREJfSU5UUikpCi0JCQlnb3RvIGlkbGVfaXJxOwotCQlicmVhazsKLQljYXNlIEhTTV9TVF9MQVNUOgotCQlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX0RNQSB8fAotCQkgICAgcWMtPnRmLnByb3RvY29sID09IEFUQVBJX1BST1RfRE1BKSB7Ci0JCQkvKiBjaGVjayBzdGF0dXMgb2YgRE1BIGVuZ2luZSAqLwotCQkJaG9zdF9zdGF0ID0gYXAtPm9wcy0+Ym1kbWFfc3RhdHVzKGFwKTsKLQkJCVZQUklOVEsoImF0YSV1OiBob3N0X3N0YXQgMHglWFxuIiwKLQkJCQlhcC0+cHJpbnRfaWQsIGhvc3Rfc3RhdCk7Ci0KLQkJCS8qIGlmIGl0J3Mgbm90IG91ciBpcnEuLi4gKi8KLQkJCWlmICghKGhvc3Rfc3RhdCAmIEFUQV9ETUFfSU5UUikpCi0JCQkJZ290byBpZGxlX2lycTsKLQotCQkJLyogYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIGNsZWFyIERNQS1TdGFydCBiaXQgKi8KLQkJCWFwLT5vcHMtPmJtZG1hX3N0b3AocWMpOwotCi0JCQlpZiAodW5saWtlbHkoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7Ci0JCQkJLyogZXJyb3Igd2hlbiB0cmFuc2ZlcmluZyBkYXRhIHRvL2Zyb20gbWVtb3J5ICovCi0JCQkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9IT1NUX0JVUzsKLQkJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSFNNX1NUOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb3RvIGlkbGVfaXJxOwotCX0KLQotCS8qIGNoZWNrIGFsdHN0YXR1cyAqLwotCXN0YXR1cyA9IGF0YV9hbHRzdGF0dXMoYXApOwotCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkKLQkJZ290byBpZGxlX2lycTsKLQotCS8qIGNoZWNrIG1haW4gc3RhdHVzLCBjbGVhcmluZyBJTlRSUSAqLwotCXN0YXR1cyA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKLQlpZiAodW5saWtlbHkoc3RhdHVzICYgQVRBX0JVU1kpKQotCQlnb3RvIGlkbGVfaXJxOwotCi0JLyogYWNrIGJtZG1hIGlycSBldmVudHMgKi8KLQlhcC0+b3BzLT5pcnFfY2xlYXIoYXApOwotCi0JYXRhX2hzbV9tb3ZlKGFwLCBxYywgc3RhdHVzLCAwKTsKLQotCWlmICh1bmxpa2VseShxYy0+ZXJyX21hc2spICYmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfRE1BIHx8Ci0JCQkJICAgICAgIHFjLT50Zi5wcm90b2NvbCA9PSBBVEFQSV9QUk9UX0RNQSkpCi0JCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkJNRE1BIHN0YXQgMHgleCIsIGhvc3Rfc3RhdCk7Ci0KLQlyZXR1cm4gMTsJLyogaXJxIGhhbmRsZWQgKi8KLQotaWRsZV9pcnE6Ci0JYXAtPnN0YXRzLmlkbGVfaXJxKys7Ci0KLSNpZmRlZiBBVEFfSVJRX1RSQVAKLQlpZiAoKGFwLT5zdGF0cy5pZGxlX2lycSAlIDEwMDApID09IDApIHsKLQkJYXRhX2Noa19zdGF0dXMoYXApOwotCQlhcC0+b3BzLT5pcnFfY2xlYXIoYXApOwotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImlycSB0cmFwXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIDA7CS8qIGlycSBub3QgaGFuZGxlZCAqLwotfQotCi0vKioKLSAqCWF0YV9pbnRlcnJ1cHQgLSBEZWZhdWx0IEFUQSBob3N0IGludGVycnVwdCBoYW5kbGVyCi0gKglAaXJxOiBpcnEgbGluZSAodW51c2VkKQotICoJQGRldl9pbnN0YW5jZTogcG9pbnRlciB0byBvdXIgYXRhX2hvc3QgaW5mb3JtYXRpb24gc3RydWN0dXJlCi0gKgotICoJRGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgUENJIElERSBkZXZpY2VzLiAgQ2FsbHMKLSAqCWF0YV9ob3N0X2ludHIoKSBmb3IgZWFjaCBwb3J0IHRoYXQgaXMgbm90IGRpc2FibGVkLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglPYnRhaW5zIGhvc3QgbG9jayBkdXJpbmcgb3BlcmF0aW9uLgotICoKLSAqCVJFVFVSTlM6Ci0gKglJUlFfTk9ORSBvciBJUlFfSEFORExFRC4KLSAqLwotCi1pcnFyZXR1cm5fdCBhdGFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfaW5zdGFuY2U7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IGhhbmRsZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBUT0RPOiBtYWtlIF9pcnFzYXZlIGNvbmRpdGlvbmFsIG9uIHg4NiBQQ0kgSURFIGxlZ2FjeSBtb2RlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKLQkJc3RydWN0IGF0YV9wb3J0ICphcDsKLQotCQlhcCA9IGhvc3QtPnBvcnRzW2ldOwotCQlpZiAoYXAgJiYKLQkJICAgICEoYXAtPmZsYWdzICYgQVRBX0ZMQUdfRElTQUJMRUQpKSB7Ci0JCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwotCi0JCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7Ci0JCQlpZiAocWMgJiYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKSAmJgotCQkJICAgIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCi0JCQkJaGFuZGxlZCB8PSBhdGFfaG9zdF9pbnRyKGFwLCBxYyk7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKLX0KLQotLyoqCiAgKglzYXRhX3Njcl92YWxpZCAtIHRlc3Qgd2hldGhlciBTQ1JzIGFyZSBhY2Nlc3NpYmxlCiAgKglAbGluazogQVRBIGxpbmsgdG8gdGVzdCBTQ1IgYWNjZXNzaWJpbGl0eSBmb3IKICAqCkBAIC02NDM3LDMyICs0OTI4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF0YV9mbHVzaF9jYWNoZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGludCBlcnJfbWFzazsKLQl1OCBjbWQ7Ci0KLQlpZiAoIWF0YV90cnlfZmx1c2hfY2FjaGUoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19GTFVTSF9FWFQpCi0JCWNtZCA9IEFUQV9DTURfRkxVU0hfRVhUOwotCWVsc2UKLQkJY21kID0gQVRBX0NNRF9GTFVTSDsKLQotCS8qIFRoaXMgaXMgd3JvbmcuIE9uIGEgZmFpbGVkIGZsdXNoIHdlIGdldCBiYWNrIHRoZSBMQkEgb2YgdGhlIGxvc3QKLQkgICBzZWN0b3IgYW5kIHdlIHNob3VsZCAoYXNzdW1pbmcgaXQgd2Fzbid0IGFib3J0ZWQgYXMgdW5rbm93bikgaXNzdWUKLQkgICBhIGZ1cnRoZXIgZmx1c2ggY29tbWFuZCB0byBjb250aW51ZSB0aGUgd3JpdGViYWNrIHVudGlsIGl0Ci0JICAgZG9lcyBub3QgZXJyb3IgKi8KLQllcnJfbWFzayA9IGF0YV9kb19zaW1wbGVfY21kKGRldiwgY21kKTsKLQlpZiAoZXJyX21hc2spIHsKLQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0VSUiwgImZhaWxlZCB0byBmbHVzaCBjYWNoZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAwOwotfQotCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGF0YV9ob3N0X3JlcXVlc3RfcG0oc3RydWN0IGF0YV9ob3N0ICpob3N0LCBwbV9tZXNzYWdlX3QgbWVzZywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgYWN0aW9uLCB1bnNpZ25lZCBpbnQgZWhpX2ZsYWdzLApAQCAtNjU1OCw3ICs1MDIzLDcgQEAKICAqLwogdm9pZCBhdGFfaG9zdF9yZXN1bWUoc3RydWN0IGF0YV9ob3N0ICpob3N0KQogewotCWF0YV9ob3N0X3JlcXVlc3RfcG0oaG9zdCwgUE1TR19PTiwgQVRBX0VIX1NPRlRSRVNFVCwKKwlhdGFfaG9zdF9yZXF1ZXN0X3BtKGhvc3QsIFBNU0dfT04sIEFUQV9FSF9SRVNFVCwKIAkJCSAgICBBVEFfRUhJX05PX0FVVE9QU1kgfCBBVEFfRUhJX1FVSUVULCAwKTsKIAlob3N0LT5kZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIApAQCAtNjU4MiwxOSArNTA0NywxMiBAQAogaW50IGF0YV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYXAtPmRldjsKLQlpbnQgcmM7CiAKIAlhcC0+cHJkID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFUQV9QUkRfVEJMX1NaLCAmYXAtPnByZF9kbWEsCiAJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhcC0+cHJkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJjID0gYXRhX3BhZF9hbGxvYyhhcCwgZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCURQUklOVEsoInByZCBhbGxvYywgdmlydCAlcCwgZG1hICVsbHhcbiIsIGFwLT5wcmQsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpYXAtPnByZF9kbWEpOwogCXJldHVybiAwOwogfQogCkBAIC02NjgxLDcgKzUxMzksOCBAQAogICovCiBpbnQgc2F0YV9saW5rX2luaXRfc3BkKHN0cnVjdCBhdGFfbGluayAqbGluaykKIHsKLQl1MzIgc2NvbnRyb2wsIHNwZDsKKwl1MzIgc2NvbnRyb2w7CisJdTggc3BkOwogCWludCByYzsKIAogCXJjID0gc2F0YV9zY3JfcmVhZChsaW5rLCBTQ1JfQ09OVFJPTCwgJnNjb250cm9sKTsKQEAgLTY2OTIsNiArNTE1MSw4IEBACiAJaWYgKHNwZCkKIAkJbGluay0+aHdfc2F0YV9zcGRfbGltaXQgJj0gKDEgPDwgc3BkKSAtIDE7CiAKKwlhdGFfZm9yY2Vfc3BkX2xpbWl0KGxpbmspOworCiAJbGluay0+c2F0YV9zcGRfbGltaXQgPSBsaW5rLT5od19zYXRhX3NwZF9saW1pdDsKIAogCXJldHVybiAwOwpAQCAtNjczNyw3ICs1MTk4LDkgQEAKIAlhcC0+bXNnX2VuYWJsZSA9IEFUQV9NU0dfRFJWIHwgQVRBX01TR19FUlIgfCBBVEFfTVNHX1dBUk47CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BVEFfU0ZGCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFwLT5wb3J0X3Rhc2ssIGF0YV9waW9fdGFzayk7CisjZW5kaWYKIAlJTklUX0RFTEFZRURfV09SSygmYXAtPmhvdHBsdWdfdGFzaywgYXRhX3Njc2lfaG90cGx1Zyk7CiAJSU5JVF9XT1JLKCZhcC0+c2NzaV9yZXNjYW5fdGFzaywgYXRhX3Njc2lfZGV2X3Jlc2Nhbik7CiAJSU5JVF9MSVNUX0hFQUQoJmFwLT5laF9kb25lX3EpOwpAQCAtNjg4Nyw4ICs1MzUwLDYgQEAKIAogCQlpZiAoIWhvc3QtPm9wcyAmJiAocGktPnBvcnRfb3BzICE9ICZhdGFfZHVtbXlfcG9ydF9vcHMpKQogCQkJaG9zdC0+b3BzID0gcGktPnBvcnRfb3BzOwotCQlpZiAoIWhvc3QtPnByaXZhdGVfZGF0YSAmJiBwaS0+cHJpdmF0ZV9kYXRhKQotCQkJaG9zdC0+cHJpdmF0ZV9kYXRhID0gcGktPnByaXZhdGVfZGF0YTsKIAl9CiAKIAlyZXR1cm4gaG9zdDsKQEAgLTY5MTMsNiArNTM3NCw1NiBAQAogfQogCiAvKioKKyAqCWF0YV9maW5hbGl6ZV9wb3J0X29wcyAtIGZpbmFsaXplIGF0YV9wb3J0X29wZXJhdGlvbnMKKyAqCUBvcHM6IGF0YV9wb3J0X29wZXJhdGlvbnMgdG8gZmluYWxpemUKKyAqCisgKglBbiBhdGFfcG9ydF9vcGVyYXRpb25zIGNhbiBpbmhlcml0IGZyb20gYW5vdGhlciBvcHMgYW5kIHRoYXQKKyAqCW9wcyBjYW4gYWdhaW4gaW5oZXJpdCBmcm9tIGFub3RoZXIuICBUaGlzIGNhbiBnbyBvbiBhcyBtYW55CisgKgl0aW1lcyBhcyBuZWNlc3NhcnkgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBsb29wIGluIHRoZQorICoJaW5oZXJpdGFuY2UgY2hhaW4uCisgKgorICoJT3BzIHRhYmxlcyBhcmUgZmluYWxpemVkIHdoZW4gdGhlIGhvc3QgaXMgc3RhcnRlZC4gIE5VTEwgb3IKKyAqCXVuc3BlY2lmaWVkIGVudHJpZXMgYXJlIGluaGVyaXRlZCBmcm9tIHRoZSBjbG9zZXQgYW5jZXN0b3IKKyAqCXdoaWNoIGhhcyB0aGUgbWV0aG9kIGFuZCB0aGUgZW50cnkgaXMgcG9wdWxhdGVkIHdpdGggaXQuCisgKglBZnRlciBmaW5hbGl6YXRpb24sIHRoZSBvcHMgdGFibGUgZGlyZWN0bHkgcG9pbnRzIHRvIGFsbCB0aGUKKyAqCW1ldGhvZHMgYW5kIC0+aW5oZXJpdHMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBhbmQgY2xlYXJlZC4KKyAqCisgKglVc2luZyBBVEFfT1BfTlVMTCwgaW5oZXJpdGluZyBvcHMgY2FuIGZvcmNlIGEgbWV0aG9kIHRvIE5VTEwuCisgKgorICoJTE9DS0lORzoKKyAqCU5vbmUuCisgKi8KK3N0YXRpYyB2b2lkIGF0YV9maW5hbGl6ZV9wb3J0X29wcyhzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyAqb3BzKQoreworCXN0YXRpYyBzcGlubG9ja190IGxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKmN1cjsKKwl2b2lkICoqYmVnaW4gPSAodm9pZCAqKilvcHM7CisJdm9pZCAqKmVuZCA9ICh2b2lkICoqKSZvcHMtPmluaGVyaXRzOworCXZvaWQgKipwcDsKKworCWlmICghb3BzIHx8ICFvcHMtPmluaGVyaXRzKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmxvY2spOworCisJZm9yIChjdXIgPSBvcHMtPmluaGVyaXRzOyBjdXI7IGN1ciA9IGN1ci0+aW5oZXJpdHMpIHsKKwkJdm9pZCAqKmluaGVyaXQgPSAodm9pZCAqKiljdXI7CisKKwkJZm9yIChwcCA9IGJlZ2luOyBwcCA8IGVuZDsgcHArKywgaW5oZXJpdCsrKQorCQkJaWYgKCEqcHApCisJCQkJKnBwID0gKmluaGVyaXQ7CisJfQorCisJZm9yIChwcCA9IGJlZ2luOyBwcCA8IGVuZDsgcHArKykKKwkJaWYgKElTX0VSUigqcHApKQorCQkJKnBwID0gTlVMTDsKKworCW9wcy0+aW5oZXJpdHMgPSBOVUxMOworCisJc3Bpbl91bmxvY2soJmxvY2spOworfQorCisvKioKICAqCWF0YV9ob3N0X3N0YXJ0IC0gc3RhcnQgYW5kIGZyZWV6ZSBwb3J0cyBvZiBhbiBBVEEgaG9zdAogICoJQGhvc3Q6IEFUQSBob3N0IHRvIHN0YXJ0IHBvcnRzIGZvcgogICoKQEAgLTY5MzcsOSArNTQ0OCwxMyBAQAogCWlmIChob3N0LT5mbGFncyAmIEFUQV9IT1NUX1NUQVJURUQpCiAJCXJldHVybiAwOwogCisJYXRhX2ZpbmFsaXplX3BvcnRfb3BzKGhvc3QtPm9wcyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKIAorCQlhdGFfZmluYWxpemVfcG9ydF9vcHMoYXAtPm9wcyk7CisKIAkJaWYgKCFob3N0LT5vcHMgJiYgIWF0YV9wb3J0X2lzX2R1bW15KGFwKSkKIAkJCWhvc3QtPm9wcyA9IGFwLT5vcHM7CiAKQEAgLTcwMDEsNyArNTUxNiw3IEBACiAgKi8KIC8qIEtJTExNRSAtIHRoZSBvbmx5IHVzZXIgbGVmdCBpcyBpcHIgKi8KIHZvaWQgYXRhX2hvc3RfaW5pdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKm9wcykKKwkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKm9wcykKIHsKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CiAJaG9zdC0+ZGV2ID0gZGV2OwpAQCAtNzA5Nyw5ICs1NjEyLDggQEAKIAkJCS8qIGtpY2sgRUggZm9yIGJvb3QgcHJvYmluZyAqLwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKIAotCQkJZWhpLT5wcm9iZV9tYXNrID0KLQkJCQkoMSA8PCBhdGFfbGlua19tYXhfZGV2aWNlcygmYXAtPmxpbmspKSAtIDE7Ci0JCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOworCQkJZWhpLT5wcm9iZV9tYXNrIHw9IEFUQV9BTExfREVWSUNFUzsKKwkJCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJCWVoaS0+ZmxhZ3MgfD0gQVRBX0VISV9OT19BVVRPUFNZIHwgQVRBX0VISV9RVUlFVDsKIAogCQkJYXAtPnBmbGFncyAmPSB+QVRBX1BGTEFHX0lOSVRJQUxJWklORzsKQEAgLTcyNjQsMzMgKzU3NzgsNiBAQAogCWF0YV9hY3BpX2Rpc3NvY2lhdGUoaG9zdCk7CiB9CiAKLS8qKgotICoJYXRhX3N0ZF9wb3J0cyAtIGluaXRpYWxpemUgaW9hZGRyIHdpdGggc3RhbmRhcmQgcG9ydCBvZmZzZXRzLgotICoJQGlvYWRkcjogSU8gYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKLSAqCi0gKglVdGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemVzIGRhdGFfYWRkciwgZXJyb3JfYWRkciwKLSAqCWZlYXR1cmVfYWRkciwgbnNlY3RfYWRkciwgbGJhbF9hZGRyLCBsYmFtX2FkZHIsIGxiYWhfYWRkciwKLSAqCWRldmljZV9hZGRyLCBzdGF0dXNfYWRkciwgYW5kIGNvbW1hbmRfYWRkciB0byBzdGFuZGFyZCBvZmZzZXRzCi0gKglyZWxhdGl2ZSB0byBjbWRfYWRkci4KLSAqCi0gKglEb2VzIG5vdCBzZXQgY3RsX2FkZHIsIGFsdHN0YXR1c19hZGRyLCBibWRtYV9hZGRyLCBvciBzY3JfYWRkci4KLSAqLwotCi12b2lkIGF0YV9zdGRfcG9ydHMoc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIpCi17Ci0JaW9hZGRyLT5kYXRhX2FkZHIgPSBpb2FkZHItPmNtZF9hZGRyICsgQVRBX1JFR19EQVRBOwotCWlvYWRkci0+ZXJyb3JfYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX0VSUjsKLQlpb2FkZHItPmZlYXR1cmVfYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX0ZFQVRVUkU7Ci0JaW9hZGRyLT5uc2VjdF9hZGRyID0gaW9hZGRyLT5jbWRfYWRkciArIEFUQV9SRUdfTlNFQ1Q7Ci0JaW9hZGRyLT5sYmFsX2FkZHIgPSBpb2FkZHItPmNtZF9hZGRyICsgQVRBX1JFR19MQkFMOwotCWlvYWRkci0+bGJhbV9hZGRyID0gaW9hZGRyLT5jbWRfYWRkciArIEFUQV9SRUdfTEJBTTsKLQlpb2FkZHItPmxiYWhfYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX0xCQUg7Ci0JaW9hZGRyLT5kZXZpY2VfYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX0RFVklDRTsKLQlpb2FkZHItPnN0YXR1c19hZGRyID0gaW9hZGRyLT5jbWRfYWRkciArIEFUQV9SRUdfU1RBVFVTOwotCWlvYWRkci0+Y29tbWFuZF9hZGRyID0gaW9hZGRyLT5jbWRfYWRkciArIEFUQV9SRUdfQ01EOwotfQotCi0KICNpZmRlZiBDT05GSUdfUENJCiAKIC8qKgpAQCAtNzM1Miw3ICs1ODM5LDcgQEAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKLQlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKQorCWlmIChtZXNnLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApCiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIH0KIApAQCAtNzQwMiwxMCArNTg4OSwxODcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAorc3RhdGljIGludCBfX2luaXQgYXRhX3BhcnNlX2ZvcmNlX29uZShjaGFyICoqY3VyLAorCQkJCSAgICAgIHN0cnVjdCBhdGFfZm9yY2VfZW50ICpmb3JjZV9lbnQsCisJCQkJICAgICAgY29uc3QgY2hhciAqKnJlYXNvbikKK3sKKwkvKiBGSVhNRTogQ3VycmVudGx5LCB0aGVyZSdzIG5vIHdheSB0byB0YWcgaW5pdCBjb25zdCBkYXRhIGFuZAorCSAqIHVzaW5nIF9faW5pdGRhdGEgY2F1c2VzIGJ1aWxkIGZhaWx1cmUgb24gc29tZSB2ZXJzaW9ucyBvZgorCSAqIGdjYy4gIE9uY2UgX19pbml0ZGF0YWNvbnN0IGlzIGltcGxlbWVudGVkLCBhZGQgY29uc3QgdG8gdGhlCisJICogZm9sbG93aW5nIHN0cnVjdHVyZS4KKwkgKi8KKwlzdGF0aWMgc3RydWN0IGF0YV9mb3JjZV9wYXJhbSBmb3JjZV90YmxbXSBfX2luaXRkYXRhID0geworCQl7ICI0MGMiLAkuY2JsCQk9IEFUQV9DQkxfUEFUQTQwIH0sCisJCXsgIjgwYyIsCS5jYmwJCT0gQVRBX0NCTF9QQVRBODAgfSwKKwkJeyAic2hvcnQ0MGMiLAkuY2JsCQk9IEFUQV9DQkxfUEFUQTQwX1NIT1JUIH0sCisJCXsgInVuayIsCS5jYmwJCT0gQVRBX0NCTF9QQVRBX1VOSyB9LAorCQl7ICJpZ24iLAkuY2JsCQk9IEFUQV9DQkxfUEFUQV9JR04gfSwKKwkJeyAic2F0YSIsCS5jYmwJCT0gQVRBX0NCTF9TQVRBIH0sCisJCXsgIjEuNUdicHMiLAkuc3BkX2xpbWl0CT0gMSB9LAorCQl7ICIzLjBHYnBzIiwJLnNwZF9saW1pdAk9IDIgfSwKKwkJeyAibm9uY3EiLAkuaG9ya2FnZV9vbgk9IEFUQV9IT1JLQUdFX05PTkNRIH0sCisJCXsgIm5jcSIsCS5ob3JrYWdlX29mZgk9IEFUQV9IT1JLQUdFX05PTkNRIH0sCisJCXsgInBpbzAiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1BJTyArIDApIH0sCisJCXsgInBpbzEiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1BJTyArIDEpIH0sCisJCXsgInBpbzIiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1BJTyArIDIpIH0sCisJCXsgInBpbzMiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1BJTyArIDMpIH0sCisJCXsgInBpbzQiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1BJTyArIDQpIH0sCisJCXsgInBpbzUiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1BJTyArIDUpIH0sCisJCXsgInBpbzYiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1BJTyArIDYpIH0sCisJCXsgIm13ZG1hMCIsCS54ZmVyX21hc2sJPSAxIDw8IChBVEFfU0hJRlRfTVdETUEgKyAwKSB9LAorCQl7ICJtd2RtYTEiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX01XRE1BICsgMSkgfSwKKwkJeyAibXdkbWEyIiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9NV0RNQSArIDIpIH0sCisJCXsgIm13ZG1hMyIsCS54ZmVyX21hc2sJPSAxIDw8IChBVEFfU0hJRlRfTVdETUEgKyAzKSB9LAorCQl7ICJtd2RtYTQiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX01XRE1BICsgNCkgfSwKKwkJeyAidWRtYTAiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAwKSB9LAorCQl7ICJ1ZG1hMTYiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAwKSB9LAorCQl7ICJ1ZG1hLzE2IiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9VRE1BICsgMCkgfSwKKwkJeyAidWRtYTEiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAxKSB9LAorCQl7ICJ1ZG1hMjUiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAxKSB9LAorCQl7ICJ1ZG1hLzI1IiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9VRE1BICsgMSkgfSwKKwkJeyAidWRtYTIiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAyKSB9LAorCQl7ICJ1ZG1hMzMiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAyKSB9LAorCQl7ICJ1ZG1hLzMzIiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9VRE1BICsgMikgfSwKKwkJeyAidWRtYTMiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAzKSB9LAorCQl7ICJ1ZG1hNDQiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyAzKSB9LAorCQl7ICJ1ZG1hLzQ0IiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9VRE1BICsgMykgfSwKKwkJeyAidWRtYTQiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyA0KSB9LAorCQl7ICJ1ZG1hNjYiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyA0KSB9LAorCQl7ICJ1ZG1hLzY2IiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9VRE1BICsgNCkgfSwKKwkJeyAidWRtYTUiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyA1KSB9LAorCQl7ICJ1ZG1hMTAwIiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9VRE1BICsgNSkgfSwKKwkJeyAidWRtYS8xMDAiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyA1KSB9LAorCQl7ICJ1ZG1hNiIsCS54ZmVyX21hc2sJPSAxIDw8IChBVEFfU0hJRlRfVURNQSArIDYpIH0sCisJCXsgInVkbWExMzMiLAkueGZlcl9tYXNrCT0gMSA8PCAoQVRBX1NISUZUX1VETUEgKyA2KSB9LAorCQl7ICJ1ZG1hLzEzMyIsCS54ZmVyX21hc2sJPSAxIDw8IChBVEFfU0hJRlRfVURNQSArIDYpIH0sCisJCXsgInVkbWE3IiwJLnhmZXJfbWFzawk9IDEgPDwgKEFUQV9TSElGVF9VRE1BICsgNykgfSwKKwl9OworCWNoYXIgKnN0YXJ0ID0gKmN1ciwgKnAgPSAqY3VyOworCWNoYXIgKmlkLCAqdmFsLCAqZW5kcDsKKwljb25zdCBzdHJ1Y3QgYXRhX2ZvcmNlX3BhcmFtICptYXRjaF9mcCA9IE5VTEw7CisJaW50IG5yX21hdGNoZXMgPSAwLCBpOworCisJLyogZmluZCB3aGVyZSB0aGlzIHBhcmFtIGVuZHMgYW5kIHVwZGF0ZSAqY3VyICovCisJd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJywnKQorCQlwKys7CisKKwlpZiAoKnAgPT0gJ1wwJykKKwkJKmN1ciA9IHA7CisJZWxzZQorCQkqY3VyID0gcCArIDE7CisKKwkqcCA9ICdcMCc7CisKKwkvKiBwYXJzZSAqLworCXAgPSBzdHJjaHIoc3RhcnQsICc6Jyk7CisJaWYgKCFwKSB7CisJCXZhbCA9IHN0cnN0cmlwKHN0YXJ0KTsKKwkJZ290byBwYXJzZV92YWw7CisJfQorCSpwID0gJ1wwJzsKKworCWlkID0gc3Ryc3RyaXAoc3RhcnQpOworCXZhbCA9IHN0cnN0cmlwKHAgKyAxKTsKKworCS8qIHBhcnNlIGlkICovCisJcCA9IHN0cmNocihpZCwgJy4nKTsKKwlpZiAocCkgeworCQkqcCsrID0gJ1wwJzsKKwkJZm9yY2VfZW50LT5kZXZpY2UgPSBzaW1wbGVfc3RydG91bChwLCAmZW5kcCwgMTApOworCQlpZiAocCA9PSBlbmRwIHx8ICplbmRwICE9ICdcMCcpIHsKKwkJCSpyZWFzb24gPSAiaW52YWxpZCBkZXZpY2UiOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlmb3JjZV9lbnQtPnBvcnQgPSBzaW1wbGVfc3RydG91bChpZCwgJmVuZHAsIDEwKTsKKwlpZiAocCA9PSBlbmRwIHx8ICplbmRwICE9ICdcMCcpIHsKKwkJKnJlYXNvbiA9ICJpbnZhbGlkIHBvcnQvbGluayI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworIHBhcnNlX3ZhbDoKKwkvKiBwYXJzZSB2YWwsIGFsbG93IHNob3J0Y3V0cyBzbyB0aGF0IGJvdGggMS41IGFuZCAxLjVHYnBzIHdvcmsgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JjZV90YmwpOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGF0YV9mb3JjZV9wYXJhbSAqZnAgPSAmZm9yY2VfdGJsW2ldOworCisJCWlmIChzdHJuY2FzZWNtcCh2YWwsIGZwLT5uYW1lLCBzdHJsZW4odmFsKSkpCisJCQljb250aW51ZTsKKworCQlucl9tYXRjaGVzKys7CisJCW1hdGNoX2ZwID0gZnA7CisKKwkJaWYgKHN0cmNhc2VjbXAodmFsLCBmcC0+bmFtZSkgPT0gMCkgeworCQkJbnJfbWF0Y2hlcyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghbnJfbWF0Y2hlcykgeworCQkqcmVhc29uID0gInVua25vd24gdmFsdWUiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKG5yX21hdGNoZXMgPiAxKSB7CisJCSpyZWFzb24gPSAiYW1iaWdpb3VzIHZhbHVlIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yY2VfZW50LT5wYXJhbSA9ICptYXRjaF9mcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYXRhX3BhcnNlX2ZvcmNlX3BhcmFtKHZvaWQpCit7CisJaW50IGlkeCA9IDAsIHNpemUgPSAxOworCWludCBsYXN0X3BvcnQgPSAtMSwgbGFzdF9kZXZpY2UgPSAtMTsKKwljaGFyICpwLCAqY3VyLCAqbmV4dDsKKworCS8qIGNhbGN1bGF0ZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbXMgYW5kIGFsbG9jYXRlIGZvcmNlX3RibCAqLworCWZvciAocCA9IGF0YV9mb3JjZV9wYXJhbV9idWY7ICpwOyBwKyspCisJCWlmICgqcCA9PSAnLCcpCisJCQlzaXplKys7CisKKwlhdGFfZm9yY2VfdGJsID0ga3phbGxvYyhzaXplb2YoYXRhX2ZvcmNlX3RibFswXSkgKiBzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF0YV9mb3JjZV90YmwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRhOiBmYWlsZWQgdG8gZXh0ZW5kIGZvcmNlIHRhYmxlLCAiCisJCSAgICAgICAibGliYXRhLmZvcmNlIGlnbm9yZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogcGFyc2UgYW5kIHBvcHVsYXRlIHRoZSB0YWJsZSAqLworCWZvciAoY3VyID0gYXRhX2ZvcmNlX3BhcmFtX2J1ZjsgKmN1ciAhPSAnXDAnOyBjdXIgPSBuZXh0KSB7CisJCWNvbnN0IGNoYXIgKnJlYXNvbiA9ICIiOworCQlzdHJ1Y3QgYXRhX2ZvcmNlX2VudCB0ZSA9IHsgLnBvcnQgPSAtMSwgLmRldmljZSA9IC0xIH07CisKKwkJbmV4dCA9IGN1cjsKKwkJaWYgKGF0YV9wYXJzZV9mb3JjZV9vbmUoJm5leHQsICZ0ZSwgJnJlYXNvbikpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YTogZmFpbGVkIHRvIHBhcnNlIGZvcmNlICIKKwkJCSAgICAgICAicGFyYW1ldGVyIFwiJXNcIiAoJXMpXG4iLAorCQkJICAgICAgIGN1ciwgcmVhc29uKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHRlLnBvcnQgPT0gLTEpIHsKKwkJCXRlLnBvcnQgPSBsYXN0X3BvcnQ7CisJCQl0ZS5kZXZpY2UgPSBsYXN0X2RldmljZTsKKwkJfQorCisJCWF0YV9mb3JjZV90YmxbaWR4KytdID0gdGU7CisKKwkJbGFzdF9wb3J0ID0gdGUucG9ydDsKKwkJbGFzdF9kZXZpY2UgPSB0ZS5kZXZpY2U7CisJfQorCisJYXRhX2ZvcmNlX3RibF9zaXplID0gaWR4OworfQogCiBzdGF0aWMgaW50IF9faW5pdCBhdGFfaW5pdCh2b2lkKQogewogCWF0YV9wcm9iZV90aW1lb3V0ICo9IEhaOworCisJYXRhX3BhcnNlX2ZvcmNlX3BhcmFtKCk7CisKIAlhdGFfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJhdGEiKTsKIAlpZiAoIWF0YV93cSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03NDIyLDYgKzYwODYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXRhX2V4aXQodm9pZCkKIHsKKwlrZnJlZShhdGFfZm9yY2VfdGJsKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShhdGFfd3EpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGF0YV9hdXhfd3EpOwogfQpAQCAtNzQ5OSwzMyArNjE2NCwyMCBAQAogLyoKICAqIER1bW15IHBvcnRfb3BzCiAgKi8KLXN0YXRpYyB2b2lkIGF0YV9kdW1teV9ub3JldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQl7IH0KLXN0YXRpYyBpbnQgYXRhX2R1bW15X3JldDAoc3RydWN0IGF0YV9wb3J0ICphcCkJCXsgcmV0dXJuIDA7IH0KLXN0YXRpYyB2b2lkIGF0YV9kdW1teV9xY19ub3JldChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKSB7IH0KLQotc3RhdGljIHU4IGF0YV9kdW1teV9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlyZXR1cm4gQVRBX0RSRFk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2R1bW15X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJcmV0dXJuIEFDX0VSUl9TWVNURU07CiB9CiAKLWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGF0YV9kdW1teV9wb3J0X29wcyA9IHsKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9kdW1teV9jaGVja19zdGF0dXMsCi0JLmNoZWNrX2FsdHN0YXR1cwk9IGF0YV9kdW1teV9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QJCT0gYXRhX25vb3BfZGV2X3NlbGVjdCwKK3N0YXRpYyB2b2lkIGF0YV9kdW1teV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJLyogdHJ1bHkgZHVtbXkgKi8KK30KKworc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXRhX2R1bW15X3BvcnRfb3BzID0gewogCS5xY19wcmVwCQk9IGF0YV9ub29wX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGF0YV9kdW1teV9xY19pc3N1ZSwKLQkuZnJlZXplCQkJPSBhdGFfZHVtbXlfbm9yZXQsCi0JLnRoYXcJCQk9IGF0YV9kdW1teV9ub3JldCwKLQkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfZHVtbXlfbm9yZXQsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2R1bW15X3FjX25vcmV0LAotCS5pcnFfY2xlYXIJCT0gYXRhX2R1bW15X25vcmV0LAotCS5wb3J0X3N0YXJ0CQk9IGF0YV9kdW1teV9yZXQwLAotCS5wb3J0X3N0b3AJCT0gYXRhX2R1bW15X25vcmV0LAorCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9kdW1teV9lcnJvcl9oYW5kbGVyLAogfTsKIAogY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gYXRhX2R1bW15X3BvcnRfaW5mbyA9IHsKQEAgLTc1NDEsMTAgKzYxOTMsMTEgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNhdGFfZGViX3RpbWluZ19ub3JtYWwpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9kZWJfdGltaW5nX2hvdHBsdWcpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9kZWJfdGltaW5nX2xvbmcpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2Jhc2VfcG9ydF9vcHMpOworRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9wb3J0X29wcyk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZHVtbXlfcG9ydF9vcHMpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2R1bW15X3BvcnRfaW5mbyk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc3RkX2Jpb3NfcGFyYW0pOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3N0ZF9wb3J0cyk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfaG9zdF9pbml0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X2FsbG9jKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X2FsbG9jX3BpbmZvKTsKQEAgLTc1NTMsMTUgKzYyMDYsMTAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X2FjdGl2YXRlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X2RldGFjaCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2dfaW5pdCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfaHNtX21vdmUpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3FjX2NvbXBsZXRlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9xY19jb21wbGV0ZV9tdWx0aXBsZSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfcWNfaXNzdWVfcHJvdCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfdGZfbG9hZCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfdGZfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfbm9vcF9kZXZfc2VsZWN0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zdGRfZGV2X3NlbGVjdCk7CiBFWFBPUlRfU1lNQk9MX0dQTChzYXRhX3ByaW50X2xpbmtfc3RhdHVzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YXBpX2NtZF90eXBlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV90Zl90b19maXMpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3RmX2Zyb21fZmlzKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wYWNrX3hmZXJtYXNrKTsKQEAgLTc1NzEsMzcgKzYyMTksMTcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV94ZmVyX21vZGUyc2hpZnQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX21vZGVfc3RyaW5nKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9pZF94ZmVybWFzayk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfY2hlY2tfc3RhdHVzKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9hbHRzdGF0dXMpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2V4ZWNfY29tbWFuZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9zdGFydCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3BvcnRfc3RhcnQpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2ludGVycnVwdCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZG9fc2V0X21vZGUpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2RhdGFfeGZlcik7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfZGF0YV94ZmVyX25vaXJxKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zdGRfcWNfZGVmZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3FjX3ByZXApOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2R1bWJfcWNfcHJlcCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfbm9vcF9xY19wcmVwKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9zZXR1cCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfYm1kbWFfc3RhcnQpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX2lycV9jbGVhcik7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfYm1kbWFfc3RhdHVzKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9zdG9wKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9mcmVlemUpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX3RoYXcpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX2RyaXZlX2VoKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9wcm9iZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZGV2X2Rpc2FibGUpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9zZXRfc3BkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV93YWl0X2FmdGVyX3Jlc2V0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNhdGFfbGlua19kZWJvdW5jZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChzYXRhX2xpbmtfcmVzdW1lKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9idXNfcmVzZXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3N0ZF9wcmVyZXNldCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfc3RkX3NvZnRyZXNldCk7CiBFWFBPUlRfU1lNQk9MX0dQTChzYXRhX2xpbmtfaGFyZHJlc2V0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNhdGFfc3RkX2hhcmRyZXNldCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc3RkX3Bvc3RyZXNldCk7CkBAIC03NjEwLDE1ICs2MjM4LDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9kaXNhYmxlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9yYXRlbGltaXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3dhaXRfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2J1c3lfc2xlZXApOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3dhaXRfYWZ0ZXJfcmVzZXQpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3dhaXRfcmVhZHkpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfaW9jdGwpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfcXVldWVjbWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfc2xhdmVfY29uZmlnKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3kpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X2ludHIpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9zY3JfdmFsaWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9zY3JfcmVhZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChzYXRhX3Njcl93cml0ZSk7CkBAIC03NjQxLDExICs2MjY1LDYgQEAKIAogI2lmZGVmIENPTkZJR19QQ0kKIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV90ZXN0X2NvbmZpZ19iaXRzKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfaW5pdF9zZmZfaG9zdCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX2luaXRfYm1kbWEpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9wcmVwYXJlX3NmZl9ob3N0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfYWN0aXZhdGVfc2ZmX2hvc3QpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9pbml0X29uZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX3JlbW92ZV9vbmUpOwogI2lmZGVmIENPTkZJR19QTQogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9kZXZpY2VfZG9fc3VzcGVuZCk7CkBAIC03NjUzLDE2ICs2MjcyLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9kZXZpY2VfcmVzdW1lKTsKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9jbGVhcl9zaW1wbGV4KTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKLUVYUE9SVF9TWU1CT0xfR1BMKHNhdGFfcG1wX3FjX2RlZmVyX2NtZF9zd2l0Y2gpOwotRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9wbXBfc3RkX3ByZXJlc2V0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNhdGFfcG1wX3N0ZF9oYXJkcmVzZXQpOwotRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9wbXBfc3RkX3Bvc3RyZXNldCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChzYXRhX3BtcF9kb19laCk7Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fYXRhX2VoaV9wdXNoX2Rlc2MpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2VoaV9wdXNoX2Rlc2MpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2VoaV9jbGVhcl9kZXNjKTsKQEAgLTc2ODAsOCArNjI5MSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZWhfcWNfY29tcGxldGUpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2VoX3FjX3JldHJ5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kb19laCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdGFfaXJxX29uKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kZXZfdHJ5X2NsYXNzaWZ5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zdGRfZXJyb3JfaGFuZGxlcik7CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9jYWJsZV80MHdpcmUpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2NhYmxlXzgwd2lyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IDRlMzEwNzEuLmQ5NDM1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC04NzMsOSArODczLDkgQEAKIAlpZiAocmMgPT0gMCkKIAkJc2F0YV9zY3Jfd3JpdGUoJmFwLT5saW5rLCBTQ1JfTk9USUZJQ0FUSU9OLCBzbnRmKTsKIAotCWlmICghYXAtPm5yX3BtcF9saW5rcyB8fCByYykgeworCWlmICghc2F0YV9wbXBfYXR0YWNoZWQoYXApIHx8IHJjKSB7CiAJCS8qIFBNUCBpcyBub3QgYXR0YWNoZWQgb3IgU05URiBpcyBub3QgYXZhaWxhYmxlICovCi0JCWlmICghYXAtPm5yX3BtcF9saW5rcykgeworCQlpZiAoIXNhdGFfcG1wX2F0dGFjaGVkKGFwKSkgewogCQkJLyogUE1QIGlzIG5vdCBhdHRhY2hlZC4gIENoZWNrIHdoZXRoZXIgQVRBUEkKIAkJCSAqIEFOIGlzIGNvbmZpZ3VyZWQuICBJZiBzbywgbm90aWZ5IG1lZGlhCiAJCQkgKiBjaGFuZ2UuCkBAIC0xMDc5LDE5ICsxMDc5LDYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBSZXNldCBpcyByZXByZXNlbnRlZCBieSBjb21iaW5hdGlvbiBvZiBhY3Rpb25zIGFuZCBFSEkKLQkgKiBmbGFncy4gIFN1Y2sgaW4gYWxsIHJlbGF0ZWQgYml0cyBiZWZvcmUgY2xlYXJpbmcgZWhfaW5mbyB0bwotCSAqIGF2b2lkIGxvc2luZyByZXF1ZXN0ZWQgYWN0aW9uLgotCSAqLwotCWlmIChhY3Rpb24gJiBBVEFfRUhfUkVTRVRfTUFTSykgewotCQllaGMtPmkuYWN0aW9uIHw9IGVoaS0+YWN0aW9uICYgQVRBX0VIX1JFU0VUX01BU0s7Ci0JCWVoYy0+aS5mbGFncyB8PSBlaGktPmZsYWdzICYgQVRBX0VISV9SRVNFVF9NT0RJRklFUl9NQVNLOwotCi0JCS8qIG1ha2Ugc3VyZSBhbGwgcmVzZXQgYWN0aW9ucyBhcmUgY2xlYXJlZCAmIGNsZWFyIEVISSBmbGFncyAqLwotCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUX01BU0s7Ci0JCWVoaS0+ZmxhZ3MgJj0gfkFUQV9FSElfUkVTRVRfTU9ESUZJRVJfTUFTSzsKLQl9Ci0KIAlhdGFfZWhfY2xlYXJfYWN0aW9uKGxpbmssIGRldiwgZWhpLCBhY3Rpb24pOwogCiAJaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCkBAIC0xMTE3LDEyICsxMTA0LDYgQEAKIHsKIAlzdHJ1Y3QgYXRhX2VoX2NvbnRleHQgKmVoYyA9ICZsaW5rLT5laF9jb250ZXh0OwogCi0JLyogaWYgcmVzZXQgaXMgY29tcGxldGUsIGNsZWFyIGFsbCByZXNldCBhY3Rpb25zICYgcmVzZXQgbW9kaWZpZXIgKi8KLQlpZiAoYWN0aW9uICYgQVRBX0VIX1JFU0VUX01BU0spIHsKLQkJYWN0aW9uIHw9IEFUQV9FSF9SRVNFVF9NQVNLOwotCQllaGMtPmkuZmxhZ3MgJj0gfkFUQV9FSElfUkVTRVRfTU9ESUZJRVJfTUFTSzsKLQl9Ci0KIAlhdGFfZWhfY2xlYXJfYWN0aW9uKGxpbmssIGRldiwgJmVoYy0+aSwgYWN0aW9uKTsKIH0KIApAQCAtMTMyOSwyMCArMTMxMCwyMCBAQAogCiAJaWYgKHNlcnJvciAmIFNFUlJfUEVSU0lTVEVOVCkgewogCQllcnJfbWFzayB8PSBBQ19FUlJfQVRBX0JVUzsKLQkJYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCWFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJfQogCWlmIChzZXJyb3IgJgogCSAgICAoU0VSUl9EQVRBX1JFQ09WRVJFRCB8IFNFUlJfQ09NTV9SRUNPVkVSRUQgfCBTRVJSX0RBVEEpKSB7CiAJCWVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOwotCQlhY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAl9CiAJaWYgKHNlcnJvciAmIFNFUlJfUFJPVE9DT0wpIHsKIAkJZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKLQkJYWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCWFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJfQogCWlmIChzZXJyb3IgJiBTRVJSX0lOVEVSTkFMKSB7CiAJCWVycl9tYXNrIHw9IEFDX0VSUl9TWVNURU07Ci0JCWFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOworCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCX0KIAogCS8qIERldGVybWluZSB3aGV0aGVyIGEgaG90cGx1ZyBldmVudCBoYXMgb2NjdXJyZWQuICBCb3RoCkBAIC0xNDQ4LDcgKzE0MjksNyBAQAogCiAJaWYgKChzdGF0ICYgKEFUQV9CVVNZIHwgQVRBX0RSUSB8IEFUQV9EUkRZKSkgIT0gQVRBX0RSRFkpIHsKIAkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9IU007Ci0JCXJldHVybiBBVEFfRUhfU09GVFJFU0VUOworCQlyZXR1cm4gQVRBX0VIX1JFU0VUOwogCX0KIAogCWlmIChzdGF0ICYgKEFUQV9FUlIgfCBBVEFfREYpKQpAQCAtMTQ4NCw3ICsxNDY1LDcgQEAKIAl9CiAKIAlpZiAocWMtPmVycl9tYXNrICYgKEFDX0VSUl9IU00gfCBBQ19FUlJfVElNRU9VVCB8IEFDX0VSUl9BVEFfQlVTKSkKLQkJYWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCWFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAKIAlyZXR1cm4gYWN0aW9uOwogfQpAQCAtMTY4NSw3ICsxNjY2LDcgQEAKIAlpZiAodmVyZGljdCAmIEFUQV9FSF9TUEROX1NQRUVEX0RPV04pIHsKIAkJLyogc3BlZWQgZG93biBTQVRBIGxpbmsgc3BlZWQgaWYgcG9zc2libGUgKi8KIAkJaWYgKHNhdGFfZG93bl9zcGRfbGltaXQobGluaykgPT0gMCkgewotCQkJYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTE3MDUsNyArMTY4Niw3IEBACiAJCQlkZXYtPnNwZG5fY250Kys7CiAKIAkJCWlmIChhdGFfZG93bl94ZmVybWFza19saW1pdChkZXYsIHNlbCkgPT0gMCkgewotCQkJCWFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOworCQkJCWFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCQkJZ290byBkb25lOwogCQkJfQogCQl9CkBAIC0xNzE5LDcgKzE3MDAsNyBAQAogCSAgICAoZGV2LT54ZmVyX3NoaWZ0ICE9IEFUQV9TSElGVF9QSU8pKSB7CiAJCWlmIChhdGFfZG93bl94ZmVybWFza19saW1pdChkZXYsIEFUQV9ETlhGRVJfRk9SQ0VfUElPKSA9PSAwKSB7CiAJCQlkZXYtPnNwZG5fY250ID0gMDsKLQkJCWFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOworCQkJYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KQEAgLTE3NjQsOSArMTc0NSw5IEBACiAJCWVoYy0+aS5zZXJyb3IgfD0gc2Vycm9yOwogCQlhdGFfZWhfYW5hbHl6ZV9zZXJyb3IobGluayk7CiAJfSBlbHNlIGlmIChyYyAhPSAtRU9QTk9UU1VQUCkgewotCQkvKiBTRXJyb3IgcmVhZCBmYWlsZWQsIGZvcmNlIGhhcmRyZXNldCBhbmQgcHJvYmluZyAqLwotCQlhdGFfZWhpX3NjaGVkdWxlX3Byb2JlKCZlaGMtPmkpOwotCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCS8qIFNFcnJvciByZWFkIGZhaWxlZCwgZm9yY2UgcmVzZXQgYW5kIHByb2JpbmcgKi8KKwkJZWhjLT5pLnByb2JlX21hc2sgfD0gQVRBX0FMTF9ERVZJQ0VTOworCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJZWhjLT5pLmVycl9tYXNrIHw9IEFDX0VSUl9PVEhFUjsKIAl9CiAKQEAgLTE4MDQsNiArMTc4NSwxMSBAQAogCQlpZiAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19TRU5TRV9WQUxJRCkKIAkJCXFjLT5lcnJfbWFzayAmPSB+KEFDX0VSUl9ERVYgfCBBQ19FUlJfT1RIRVIpOwogCisJCS8qIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIHdvcnRoIHJldHJ5aW5nICovCisJCWlmICghKHFjLT5lcnJfbWFzayAmIEFDX0VSUl9JTlZBTElEKSAmJgorCQkgICAgKChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0lPKSB8fCBxYy0+ZXJyX21hc2sgIT0gQUNfRVJSX0RFVikpCisJCQlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19SRVRSWTsKKwogCQkvKiBhY2N1bXVsYXRlIGVycm9yIGluZm8gKi8KIAkJZWhjLT5pLmRldiA9IHFjLT5kZXY7CiAJCWFsbF9lcnJfbWFzayB8PSBxYy0+ZXJyX21hc2s7CkBAIC0xODE0LDcgKzE4MDAsNyBAQAogCS8qIGVuZm9yY2UgZGVmYXVsdCBFSCBhY3Rpb25zICovCiAJaWYgKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOIHx8CiAJICAgIGFsbF9lcnJfbWFzayAmIChBQ19FUlJfSFNNIHwgQUNfRVJSX1RJTUVPVVQpKQotCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCWVsc2UgaWYgKCgoZWZsYWdzICYgQVRBX0VGTEFHX0lTX0lPKSAmJiBhbGxfZXJyX21hc2spIHx8CiAJCSAoIShlZmxhZ3MgJiBBVEFfRUZMQUdfSVNfSU8pICYmIChhbGxfZXJyX21hc2sgJiB+QUNfRVJSX0RFVikpKQogCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9SRVZBTElEQVRFOwpAQCAtMTg2Nyw3ICsxODUzLDcgQEAKIAkvKiBBdXRvcHN5IG9mIGZhbm91dCBwb3J0cyBjYW4gYWZmZWN0IGhvc3QgbGluayBhdXRvcHN5LgogCSAqIFBlcmZvcm0gaG9zdCBsaW5rIGF1dG9wc3kgbGFzdC4KIAkgKi8KLQlpZiAoYXAtPm5yX3BtcF9saW5rcykKKwlpZiAoc2F0YV9wbXBfYXR0YWNoZWQoYXApKQogCQlhdGFfZWhfbGlua19hdXRvcHN5KCZhcC0+bGluayk7CiB9CiAKQEAgLTIwNjYsNDEgKzIwNTIsMjkgQEAKIAkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfVU5LTk9XTjsKIAogCXJjID0gcmVzZXQobGluaywgY2xhc3NlcywgZGVhZGxpbmUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCi0JLyogSWYgYW55IGNsYXNzIGlzbid0IEFUQV9ERVZfVU5LTk9XTiwgY29uc2lkZXIgY2xhc3NpZmljYXRpb24KLQkgKiBpcyBjb21wbGV0ZSBhbmQgY29udmVydCBhbGwgQVRBX0RFVl9VTktOT1dOIHRvCi0JICogQVRBX0RFVl9OT05FLgotCSAqLworCS8qIGNvbnZlcnQgYWxsIEFUQV9ERVZfVU5LTk9XTiB0byBBVEFfREVWX05PTkUgKi8KIAlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKQotCQlpZiAoY2xhc3Nlc1tkZXYtPmRldm5vXSAhPSBBVEFfREVWX1VOS05PV04pCi0JCQlicmVhazsKKwkJaWYgKGNsYXNzZXNbZGV2LT5kZXZub10gPT0gQVRBX0RFVl9VTktOT1dOKQorCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKIAotCWlmIChkZXYpIHsKLQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgewotCQkJaWYgKGNsYXNzZXNbZGV2LT5kZXZub10gPT0gQVRBX0RFVl9VTktOT1dOKQotCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgYXRhX2VoX2ZvbGxvd3VwX3Nyc3RfbmVlZGVkKHN0cnVjdCBhdGFfbGluayAqbGluaywKIAkJCQkgICAgICAgaW50IHJjLCBpbnQgY2xhc3NpZnksCiAJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqY2xhc3NlcykKIHsKLQlpZiAobGluay0+ZmxhZ3MgJiBBVEFfTEZMQUdfTk9fU1JTVCkKKwlpZiAoKGxpbmstPmZsYWdzICYgQVRBX0xGTEFHX05PX1NSU1QpIHx8IGF0YV9saW5rX29mZmxpbmUobGluaykpCiAJCXJldHVybiAwOwotCWlmIChyYyA9PSAtRUFHQUlOKQotCQlyZXR1cm4gMTsKKwlpZiAocmMgPT0gLUVBR0FJTikgeworCQlpZiAoY2xhc3NpZnkpCisJCQlyZXR1cm4gMTsKKwkJcmMgPSAwOworCX0KIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIDA7Ci0JaWYgKChsaW5rLT5hcC0+ZmxhZ3MgJiBBVEFfRkxBR19QTVApICYmIGF0YV9pc19ob3N0X2xpbmsobGluaykpCi0JCXJldHVybiAxOwotCWlmIChjbGFzc2lmeSAmJiAhKGxpbmstPmZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9DTEFTUykgJiYKLQkgICAgY2xhc3Nlc1swXSA9PSBBVEFfREVWX1VOS05PV04pCisJaWYgKHNhdGFfcG1wX3N1cHBvcnRlZChsaW5rLT5hcCkgJiYgYXRhX2lzX2hvc3RfbGluayhsaW5rKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTE4LDcgKzIwOTIsNiBAQAogCWludCB0cnkgPSAwOwogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBkZWFkbGluZSwgbm93OwotCXVuc2lnbmVkIGludCB0bXBfYWN0aW9uOwogCWF0YV9yZXNldF9mbl90IHJlc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHNzdGF0dXM7CkBAIC0yMTI5LDcgKzIxMDIsNyBAQAogCWFwLT5wZmxhZ3MgfD0gQVRBX1BGTEFHX1JFU0VUVElORzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CiAKLQlhdGFfZWhfYWJvdXRfdG9fZG8obGluaywgTlVMTCwgZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVF9NQVNLKTsKKwlhdGFfZWhfYWJvdXRfdG9fZG8obGluaywgTlVMTCwgQVRBX0VIX1JFU0VUKTsKIAogCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKIAkJLyogSWYgd2UgaXNzdWUgYW4gU1JTVCB0aGVuIGFuIEFUQSBkcml2ZSAobm90IEFUQVBJKQpAQCAtMjE1MCwxNyArMjEyMywyOSBAQAogCQkJYXAtPm9wcy0+c2V0X3Bpb21vZGUoYXAsIGRldik7CiAJfQogCi0JLyogRGV0ZXJtaW5lIHdoaWNoIHJlc2V0IHRvIHVzZSBhbmQgcmVjb3JkIGluIGVoYy0+aS5hY3Rpb24uCi0JICogcHJlcmVzZXQoKSBtYXkgZXhhbWluZSBhbmQgbW9kaWZ5IGl0LgotCSAqLwotCWlmIChzb2Z0cmVzZXQgJiYgKCFoYXJkcmVzZXQgfHwgKCEobGZsYWdzICYgQVRBX0xGTEFHX05PX1NSU1QpICYmCi0JCQkJCSAhc2F0YV9zZXRfc3BkX25lZWRlZChsaW5rKSAmJgotCQkJCQkgIShlaGMtPmkuYWN0aW9uICYgQVRBX0VIX0hBUkRSRVNFVCkpKSkKLQkJdG1wX2FjdGlvbiA9IEFUQV9FSF9TT0ZUUkVTRVQ7Ci0JZWxzZQotCQl0bXBfYWN0aW9uID0gQVRBX0VIX0hBUkRSRVNFVDsKKwlpZiAoIXNvZnRyZXNldCAmJiAhaGFyZHJlc2V0KSB7CisJCWlmICh2ZXJib3NlKQorCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fSU5GTywgIm5vIHJlc2V0IG1ldGhvZCAiCisJCQkJCSJhdmFpbGFibGUsIHNraXBwaW5nIHJlc2V0XG4iKTsKKwkJaWYgKCEobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9DTEFTUykpCisJCQlsZmxhZ3MgfD0gQVRBX0xGTEFHX0FTU1VNRV9BVEE7CisJCWdvdG8gZG9uZTsKKwl9CiAKLQllaGMtPmkuYWN0aW9uID0gKGVoYy0+aS5hY3Rpb24gJiB+QVRBX0VIX1JFU0VUX01BU0spIHwgdG1wX2FjdGlvbjsKKwkvKiBwcmVmZXIgaGFyZHJlc2V0ICovCisJZWhjLT5pLmFjdGlvbiAmPSB+QVRBX0VIX1JFU0VUOworCWlmIChoYXJkcmVzZXQpIHsKKwkJcmVzZXQgPSBoYXJkcmVzZXQ7CisJCWVoYy0+aS5hY3Rpb24gPSBBVEFfRUhfSEFSRFJFU0VUOworCX0gZWxzZSBpZiAoc29mdHJlc2V0KSB7CisJCXJlc2V0ID0gc29mdHJlc2V0OworCQllaGMtPmkuYWN0aW9uID0gQVRBX0VIX1NPRlRSRVNFVDsKKwl9IGVsc2UgeworCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9FUlIsICJCVUc6IG5vIHJlc2V0IG1ldGhvZCwgIgorCQkJCSJwbGVhc2UgcmVwb3J0IHRvIGxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmdcbiIpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmIChwcmVyZXNldCkgewogCQlyYyA9IHByZXJlc2V0KGxpbmssIGppZmZpZXMgKyBBVEFfRUhfUFJFUkVTRVRfVElNRU9VVCk7CkBAIC0yMTY4LDcgKzIxNTMsNyBAQAogCQkJaWYgKHJjID09IC1FTk9FTlQpIHsKIAkJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9ERUJVRywKIAkJCQkJCSJwb3J0IGRpc2FibGVkLiBpZ25vcmluZy5cbiIpOwotCQkJCWVoYy0+aS5hY3Rpb24gJj0gfkFUQV9FSF9SRVNFVF9NQVNLOworCQkJCWVoYy0+aS5hY3Rpb24gJj0gfkFUQV9FSF9SRVNFVDsKIAogCQkJCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspCiAJCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CkBAIC0yMTgxLDEyICsyMTY2LDggQEAKIAkJfQogCX0KIAotCS8qIHByZXJlc2V0KCkgbWlnaHQgaGF2ZSBtb2RpZmllZCBlaGMtPmkuYWN0aW9uICovCi0JaWYgKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfSEFSRFJFU0VUKQotCQlyZXNldCA9IGhhcmRyZXNldDsKLQllbHNlIGlmIChlaGMtPmkuYWN0aW9uICYgQVRBX0VIX1NPRlRSRVNFVCkKLQkJcmVzZXQgPSBzb2Z0cmVzZXQ7Ci0JZWxzZSB7CisJLyogcHJlcmVzZXQoKSBtaWdodCBoYXZlIGNsZWFyZWQgQVRBX0VIX1JFU0VUICovCisJaWYgKCEoZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVCkpIHsKIAkJLyogcHJlcmVzZXQgdG9sZCB1cyBub3QgdG8gcmVzZXQsIGJhbmcgY2xhc3NlcyBhbmQgcmV0dXJuICovCiAJCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspCiAJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOwpAQCAtMjE5NCwxNCArMjE3NSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIGRpZCBwcmVyZXNldCgpIHNjcmV3IHVwPyAgaWYgc28sIGZpeCB1cCB0byBhdm9pZCBvb3BzaW5nICovCi0JaWYgKCFyZXNldCkgewotCQlpZiAoc29mdHJlc2V0KQotCQkJcmVzZXQgPSBzb2Z0cmVzZXQ7Ci0JCWVsc2UKLQkJCXJlc2V0ID0gaGFyZHJlc2V0OwotCX0KLQogIHJldHJ5OgogCWRlYWRsaW5lID0gamlmZmllcyArIGF0YV9laF9yZXNldF90aW1lb3V0c1t0cnkrK107CiAKQEAgLTIyMzEsNyArMjIwNCw3IEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAotCQlhdGFfZWhfYWJvdXRfdG9fZG8obGluaywgTlVMTCwgQVRBX0VIX1JFU0VUX01BU0spOworCQlhdGFfZWhfYWJvdXRfdG9fZG8obGluaywgTlVMTCwgQVRBX0VIX1JFU0VUKTsKIAkJcmMgPSBhdGFfZG9fcmVzZXQobGluaywgcmVzZXQsIGNsYXNzZXMsIGRlYWRsaW5lKTsKIAl9CiAKQEAgLTIyMzksMjEgKzIyMTIsNyBAQAogCWlmIChyYyAmJiByYyAhPSAtRUFHQUlOKQogCQlnb3RvIGZhaWw7CiAKLQkvKiB3YXMgY2xhc3NpZmljYXRpb24gc3VjY2Vzc2Z1bD8gKi8KLQlpZiAoY2xhc3NpZnkgJiYgY2xhc3Nlc1swXSA9PSBBVEFfREVWX1VOS05PV04gJiYKLQkgICAgIShsZmxhZ3MgJiBBVEFfTEZMQUdfQVNTVU1FX0NMQVNTKSkgewotCQlpZiAodHJ5IDwgbWF4X3RyaWVzKSB7Ci0JCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLAotCQkJCQkiY2xhc3NpZmljYXRpb24gZmFpbGVkXG4iKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCi0JCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsCi0JCQkJImNsYXNzZmljYXRpb24gZmFpbGVkLCBhc3N1bWluZyBBVEFcbiIpOwotCQlsZmxhZ3MgfD0gQVRBX0xGTEFHX0FTU1VNRV9BVEE7Ci0JfQotCisgZG9uZToKIAlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CiAJCS8qIEFmdGVyIHRoZSByZXNldCwgdGhlIGRldmljZSBzdGF0ZSBpcyBQSU8gMCBhbmQgdGhlCiAJCSAqIGNvbnRyb2xsZXIgc3RhdGUgaXMgdW5kZWZpbmVkLiAgUmVzZXQgYWxzbyB3YWtlcyB1cApAQCAtMjI4MCw3ICsyMjM5LDcgQEAKIAkJcG9zdHJlc2V0KGxpbmssIGNsYXNzZXMpOwogCiAJLyogcmVzZXQgc3VjY2Vzc2Z1bCwgc2NoZWR1bGUgcmV2YWxpZGF0aW9uICovCi0JYXRhX2VoX2RvbmUobGluaywgTlVMTCwgZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVF9NQVNLKTsKKwlhdGFfZWhfZG9uZShsaW5rLCBOVUxMLCBBVEFfRUhfUkVTRVQpOwogCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX1JFVkFMSURBVEU7CiAKIAlyYyA9IDA7CkBAIC0yMjk1LDYgKzIyNTQsMTEgQEAKIAlyZXR1cm4gcmM7CiAKICBmYWlsOgorCS8qIGlmIFNDUiBpc24ndCBhY2Nlc3NpYmxlIG9uIGEgZmFuLW91dCBwb3J0LCBQTVAgbmVlZHMgdG8gYmUgcmVzZXQgKi8KKwlpZiAoIWF0YV9pc19ob3N0X2xpbmsobGluaykgJiYKKwkgICAgc2F0YV9zY3JfcmVhZChsaW5rLCBTQ1JfU1RBVFVTLCAmc3N0YXR1cykpCisJCXJjID0gLUVSRVNUQVJUOworCiAJaWYgKHJjID09IC1FUkVTVEFSVCB8fCB0cnkgPj0gbWF4X3RyaWVzKQogCQlnb3RvIG91dDsKIApAQCAtMjM5Myw5ICsyMzU3LDExIEBACiAJfQogCiAJLyogUERJQUctIHNob3VsZCBoYXZlIGJlZW4gcmVsZWFzZWQsIGFzayBjYWJsZSB0eXBlIGlmIHBvc3QtcmVzZXQgKi8KLQlpZiAoYXRhX2lzX2hvc3RfbGluayhsaW5rKSAmJiBhcC0+b3BzLT5jYWJsZV9kZXRlY3QgJiYKLQkgICAgKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfRElEX1JFU0VUKSkKLQkJYXAtPmNibCA9IGFwLT5vcHMtPmNhYmxlX2RldGVjdChhcCk7CisJaWYgKChlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX0RJRF9SRVNFVCkgJiYgYXRhX2lzX2hvc3RfbGluayhsaW5rKSkgeworCQlpZiAoYXAtPm9wcy0+Y2FibGVfZGV0ZWN0KQorCQkJYXAtPmNibCA9IGFwLT5vcHMtPmNhYmxlX2RldGVjdChhcCk7CisJCWF0YV9mb3JjZV9jYmwoYXApOworCX0KIAogCS8qIENvbmZpZ3VyZSBuZXcgZGV2aWNlcyBmb3J3YXJkIHN1Y2ggdGhhdCB1c2VyIGRvZXNuJ3Qgc2VlCiAJICogZGV2aWNlIGRldGVjdGlvbiBtZXNzYWdlcyBiYWNrd2FyZHMuCkBAIC0yNTAzLDYgKzI0NjksNyBAQAogCiBzdGF0aWMgaW50IGF0YV9laF9za2lwX3JlY292ZXJ5KHN0cnVjdCBhdGFfbGluayAqbGluaykKIHsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CiAJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCkBAIC0yNTEwLDkgKzI0NzcsMTMgQEAKIAlpZiAobGluay0+ZmxhZ3MgJiBBVEFfTEZMQUdfRElTQUJMRUQpCiAJCXJldHVybiAxOwogCi0JLyogdGhhdyBmcm96ZW4gcG9ydCwgcmVzdW1lIGxpbmsgYW5kIHJlY292ZXIgZmFpbGVkIGRldmljZXMgKi8KLQlpZiAoKGxpbmstPmFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKSB8fAotCSAgICAoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9SRVNVTUVfTElOSykgfHwgYXRhX2xpbmtfbnJfZW5hYmxlZChsaW5rKSkKKwkvKiB0aGF3IGZyb3plbiBwb3J0IGFuZCByZWNvdmVyIGZhaWxlZCBkZXZpY2VzICovCisJaWYgKChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTikgfHwgYXRhX2xpbmtfbnJfZW5hYmxlZChsaW5rKSkKKwkJcmV0dXJuIDA7CisKKwkvKiByZXNldCBhdCBsZWFzdCBvbmNlIGlmIHJlc2V0IGlzIHJlcXVlc3RlZCAqLworCWlmICgoZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVCkgJiYKKwkgICAgIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX0RJRF9SRVNFVCkpCiAJCXJldHVybiAwOwogCiAJLyogc2tpcCBpZiBjbGFzcyBjb2RlcyBmb3IgYWxsIHZhY2FudCBzbG90cyBhcmUgQVRBX0RFVl9OT05FICovCkBAIC0yNTM2LDcgKzI1MDcsNyBAQAogCWF0YV9laF9kZXRhY2hfZGV2KGRldik7CiAJYXRhX2Rldl9pbml0KGRldik7CiAJZWhjLT5kaWRfcHJvYmVfbWFzayB8PSAoMSA8PCBkZXYtPmRldm5vKTsKLQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJZWhjLT5zYXZlZF94ZmVyX21vZGVbZGV2LT5kZXZub10gPSAwOwogCWVoYy0+c2F2ZWRfbmNxX2VuYWJsZWQgJj0gfigxIDw8IGRldi0+ZGV2bm8pOwogCkBAIC0yNTgwLDEyICsyNTUxLDcgQEAKIAogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQkvKiBzb2Z0IGRpZG4ndCB3b3JrPyAgYmUgaGFhYWFhcmQgKi8KLQkJaWYgKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfRElEX1JFU0VUKQotCQkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOwotCQllbHNlCi0JCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7Ci0KKwkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCXJldHVybiAwOwogCX0KIH0KQEAgLTI2NzgsNyArMjY0NCw3IEBACiAJCQllaGMtPmkuYWN0aW9uID0gMDsKIAogCQkvKiBkbyB3ZSBuZWVkIHRvIHJlc2V0PyAqLwotCQlpZiAoZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVF9NQVNLKQorCQlpZiAoZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVCkKIAkJCXJlc2V0ID0gMTsKIAogCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKQpAQCAtMjY5MCwxMyArMjY1NiwxMyBAQAogCQkvKiBpZiBQTVAgaXMgYXR0YWNoZWQsIHRoaXMgZnVuY3Rpb24gb25seSBkZWFscyB3aXRoCiAJCSAqIGRvd25zdHJlYW0gbGlua3MsIHBvcnQgc2hvdWxkIHN0YXkgdGhhd2VkLgogCQkgKi8KLQkJaWYgKCFhcC0+bnJfcG1wX2xpbmtzKQorCQlpZiAoIXNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKIAkJCWF0YV9laF9mcmVlemVfcG9ydChhcCk7CiAKIAkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgewogCQkJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAotCQkJaWYgKCEoZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVF9NQVNLKSkKKwkJCWlmICghKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfUkVTRVQpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlyYyA9IGF0YV9laF9yZXNldChsaW5rLCBhdGFfbGlua19ucl92YWNhbnQobGluayksCkBAIC0yNzA5LDcgKzI2NzUsNyBAQAogCQkJfQogCQl9CiAKLQkJaWYgKCFhcC0+bnJfcG1wX2xpbmtzKQorCQlpZiAoIXNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKIAkJCWF0YV9laF90aGF3X3BvcnQoYXApOwogCX0KIApAQCAtMjczNiw3ICsyNzAyLDcgQEAKIAkJCWVoYy0+aS5mbGFncyAmPSB+QVRBX0VISV9TRVRNT0RFOwogCQl9CiAKLQkJaWYgKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhJX0xQTSkKKwkJaWYgKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfTFBNKQogCQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykKIAkJCQlhdGFfZGV2X2VuYWJsZV9wbShkZXYsIGFwLT5wbV9wb2xpY3kpOwogCkBAIC0yNzUzLDcgKzI3MTksNyBAQAogCQkJLyogUE1QIHJlc2V0IHJlcXVpcmVzIHdvcmtpbmcgaG9zdCBwb3J0LgogCQkJICogQ2FuJ3QgcmV0cnkgaWYgaXQncyBmcm96ZW4uCiAJCQkgKi8KLQkJCWlmIChhcC0+bnJfcG1wX2xpbmtzKQorCQkJaWYgKHNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKIAkJCQlnb3RvIG91dDsKIAkJCWJyZWFrOwogCQl9CkBAIC0yODA1LDE4ICsyNzcxLDExIEBACiAJCQkvKiBGSVhNRTogT25jZSBFSCBtaWdyYXRpb24gaXMgY29tcGxldGUsCiAJCQkgKiBnZW5lcmF0ZSBzZW5zZSBkYXRhIGluIHRoaXMgZnVuY3Rpb24sCiAJCQkgKiBjb25zaWRlcmluZyBib3RoIGVycl9tYXNrIGFuZCB0Zi4KLQkJCSAqCi0JCQkgKiBUaGVyZSdzIG5vIHBvaW50IGluIHJldHJ5aW5nIGludmFsaWQKLQkJCSAqIChkZXRlY3RlZCBieSBsaWJhdGEpIGFuZCBub24tSU8gZGV2aWNlCi0JCQkgKiBlcnJvcnMgKHJlamVjdGVkIGJ5IGRldmljZSkuICBGaW5pc2ggdGhlbQotCQkJICogaW1tZWRpYXRlbHkuCiAJCQkgKi8KLQkJCWlmICgocWMtPmVycl9tYXNrICYgQUNfRVJSX0lOVkFMSUQpIHx8Ci0JCQkgICAgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19JTykgJiYKLQkJCSAgICAgcWMtPmVycl9tYXNrID09IEFDX0VSUl9ERVYpKQotCQkJCWF0YV9laF9xY19jb21wbGV0ZShxYyk7Ci0JCQllbHNlCisJCQlpZiAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19SRVRSWSkKIAkJCQlhdGFfZWhfcWNfcmV0cnkocWMpOworCQkJZWxzZQorCQkJCWF0YV9laF9xY19jb21wbGV0ZShxYyk7CiAJCX0gZWxzZSB7CiAJCQlpZiAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19TRU5TRV9WQUxJRCkgewogCQkJCWF0YV9laF9xY19jb21wbGV0ZShxYyk7CkBAIC0yODM2LDYgKzI3OTUsNyBAQAogLyoqCiAgKglhdGFfZG9fZWggLSBkbyBzdGFuZGFyZCBlcnJvciBoYW5kbGluZwogICoJQGFwOiBob3N0IHBvcnQgdG8gaGFuZGxlIGVycm9yIGZvcgorICoKICAqCUBwcmVyZXNldDogcHJlcmVzZXQgbWV0aG9kIChjYW4gYmUgTlVMTCkKICAqCUBzb2Z0cmVzZXQ6IHNvZnRyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQogICoJQGhhcmRyZXNldDogaGFyZHJlc2V0IG1ldGhvZCAoY2FuIGJlIE5VTEwpCkBAIC0yODY2LDYgKzI4MjYsMjcgQEAKIAlhdGFfZWhfZmluaXNoKGFwKTsKIH0KIAorLyoqCisgKglhdGFfc3RkX2Vycm9yX2hhbmRsZXIgLSBzdGFuZGFyZCBlcnJvciBoYW5kbGVyCisgKglAYXA6IGhvc3QgcG9ydCB0byBoYW5kbGUgZXJyb3IgZm9yCisgKgorICoJU3RhbmRhcmQgZXJyb3IgaGFuZGxlcgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCisgKi8KK3ZvaWQgYXRhX3N0ZF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKm9wcyA9IGFwLT5vcHM7CisJYXRhX3Jlc2V0X2ZuX3QgaGFyZHJlc2V0ID0gb3BzLT5oYXJkcmVzZXQ7CisKKwkvKiBpZ25vcmUgYnVpbHQtaW4gaGFyZHJlc2V0IGlmIFNDUiBhY2Nlc3MgaXMgbm90IGF2YWlsYWJsZSAqLworCWlmIChhdGFfaXNfYnVpbHRpbl9oYXJkcmVzZXQoaGFyZHJlc2V0KSAmJiAhc2F0YV9zY3JfdmFsaWQoJmFwLT5saW5rKSkKKwkJaGFyZHJlc2V0ID0gTlVMTDsKKworCWF0YV9kb19laChhcCwgb3BzLT5wcmVyZXNldCwgb3BzLT5zb2Z0cmVzZXQsIGhhcmRyZXNldCwgb3BzLT5wb3N0cmVzZXQpOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiAvKioKICAqCWF0YV9laF9oYW5kbGVfcG9ydF9zdXNwZW5kIC0gcGVyZm9ybSBwb3J0IHN1c3BlbmQgb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtcG1wLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtcG1wLmMKaW5kZXggY2FlZjJiYi4uZmYxODIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1wbXAuYwpAQCAtMTEsNiArMTEsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KICNpbmNsdWRlICJsaWJhdGEuaCIKIAorY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2F0YV9wbXBfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZzYXRhX3BvcnRfb3BzLAorCS5wbXBfcHJlcmVzZXQJCT0gYXRhX3N0ZF9wcmVyZXNldCwKKwkucG1wX2hhcmRyZXNldAkJPSBzYXRhX3N0ZF9oYXJkcmVzZXQsCisJLnBtcF9wb3N0cmVzZXQJCT0gYXRhX3N0ZF9wb3N0cmVzZXQsCisJLmVycm9yX2hhbmRsZXIJCT0gc2F0YV9wbXBfZXJyb3JfaGFuZGxlciwKK307CisKIC8qKgogICoJc2F0YV9wbXBfcmVhZCAtIHJlYWQgUE1QIHJlZ2lzdGVyCiAgKglAbGluazogbGluayB0byByZWFkIFBNUCByZWdpc3RlciBmb3IKQEAgLTM1LDcgKzQzLDcgQEAKIAlhdGFfdGZfaW5pdChwbXBfZGV2LCAmdGYpOwogCXRmLmNvbW1hbmQgPSBBVEFfQ01EX1BNUF9SRUFEOwogCXRmLnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwotCXRmLmZsYWdzIHw9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFOworCXRmLmZsYWdzIHw9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFIHwgQVRBX1RGTEFHX0xCQTQ4OwogCXRmLmZlYXR1cmUgPSByZWc7CiAJdGYuZGV2aWNlID0gbGluay0+cG1wOwogCkBAIC03MSw3ICs3OSw3IEBACiAJYXRhX3RmX2luaXQocG1wX2RldiwgJnRmKTsKIAl0Zi5jb21tYW5kID0gQVRBX0NNRF9QTVBfV1JJVEU7CiAJdGYucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7Ci0JdGYuZmxhZ3MgfD0gQVRBX1RGTEFHX0lTQUREUiB8IEFUQV9URkxBR19ERVZJQ0U7CisJdGYuZmxhZ3MgfD0gQVRBX1RGTEFHX0lTQUREUiB8IEFUQV9URkxBR19ERVZJQ0UgfCBBVEFfVEZMQUdfTEJBNDg7CiAJdGYuZmVhdHVyZSA9IHJlZzsKIAl0Zi5kZXZpY2UgPSBsaW5rLT5wbXA7CiAJdGYubnNlY3QgPSB2YWwgJiAweGZmOwpAQCAtMTc2LDE0MCArMTg0LDYgQEAKIH0KIAogLyoqCi0gKglzYXRhX3BtcF9zdGRfcHJlcmVzZXQgLSBwcmVwYXJlIFBNUCBsaW5rIGZvciByZXNldAotICoJQGxpbms6IGxpbmsgdG8gYmUgcmVzZXQKLSAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgotICoKLSAqCUBsaW5rIGlzIGFib3V0IHRvIGJlIHJlc2V0LiAgSW5pdGlhbGl6ZSBpdC4KLSAqCi0gKglMT0NLSU5HOgotICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCi0gKgotICoJUkVUVVJOUzoKLSAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KLSAqLwotaW50IHNhdGFfcG1wX3N0ZF9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCi17Ci0Jc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKLQljb25zdCB1bnNpZ25lZCBsb25nICp0aW1pbmcgPSBzYXRhX2VoY19kZWJfdGltaW5nKGVoYyk7Ci0JaW50IHJjOwotCi0JLyogZm9yY2UgSFJTVD8gKi8KLQlpZiAobGluay0+ZmxhZ3MgJiBBVEFfTEZMQUdfTk9fU1JTVCkKLQkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOwotCi0JLyogaGFuZGxlIGxpbmsgcmVzdW1lICovCi0JaWYgKChlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1JFU1VNRV9MSU5LKSAmJgotCSAgICAobGluay0+ZmxhZ3MgJiBBVEFfTEZMQUdfSFJTVF9UT19SRVNVTUUpKQotCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7Ci0KLQkvKiBpZiB3ZSdyZSBhYm91dCB0byBkbyBoYXJkcmVzZXQsIG5vdGhpbmcgbW9yZSB0byBkbyAqLwotCWlmIChlaGMtPmkuYWN0aW9uICYgQVRBX0VIX0hBUkRSRVNFVCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiByZXN1bWUgbGluayAqLwotCXJjID0gc2F0YV9saW5rX3Jlc3VtZShsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKLQlpZiAocmMpIHsKLQkJLyogcGh5IHJlc3VtZSBmYWlsZWQgKi8KLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywgImZhaWxlZCB0byByZXN1bWUgbGluayAiCi0JCQkJImZvciByZXNldCAoZXJybm89JWQpXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQkvKiBjbGVhciBTRXJyb3IgYml0cyBpbmNsdWRpbmcgLlggd2hpY2ggYmxvY2tzIHRoZSBwb3J0IHdoZW4gc2V0ICovCi0JcmMgPSBzYXRhX3Njcl93cml0ZShsaW5rLCBTQ1JfRVJST1IsIDB4ZmZmZmZmZmYpOwotCWlmIChyYykgewotCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9FUlIsCi0JCQkJImZhaWxlZCB0byBjbGVhciBTRXJyb3IgKGVycm5vPSVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJc2F0YV9wbXBfc3RkX2hhcmRyZXNldCAtIHN0YW5kYXJkIGhhcmRyZXNldCBtZXRob2QgZm9yIFBNUCBsaW5rCi0gKglAbGluazogbGluayB0byBiZSByZXNldAotICoJQGNsYXNzOiByZXN1bHRpbmcgY2xhc3Mgb2YgYXR0YWNoZWQgZGV2aWNlCi0gKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KLSAqCi0gKglIYXJkcmVzZXQgUE1QIHBvcnQgQGxpbmsuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2Vzbid0Ci0gKgl3YWl0IGZvciBCU1kgY2xlYXJhbmNlLiAgVGhlcmUgc2ltcGx5IGlzbid0IGEgZ2VuZXJpYyB3YXkgdG8KLSAqCXdhaXQgdGhlIGV2ZW50LiAgSW5zdGVhZCwgdGhpcyBmdW5jdGlvbiByZXR1cm4gLUVBR0FJTiB0aHVzCi0gKgl0ZWxsaW5nIGxpYmF0YS1FSCB0byBmb2xsb3d1cCB3aXRoIHNvZnRyZXNldC4KLSAqCi0gKglMT0NLSU5HOgotICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCi0gKgotICoJUkVUVVJOUzoKLSAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KLSAqLwotaW50IHNhdGFfcG1wX3N0ZF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAotCQkJICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKLXsKLQljb25zdCB1bnNpZ25lZCBsb25nICp0aW1pbmcgPSBzYXRhX2VoY19kZWJfdGltaW5nKCZsaW5rLT5laF9jb250ZXh0KTsKLQl1MzIgdG1wOwotCWludCByYzsKLQotCURQUklOVEsoIkVOVEVSXG4iKTsKLQotCS8qIGRvIGhhcmRyZXNldCAqLwotCXJjID0gc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKLQlpZiAocmMpIHsKLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fRVJSLAotCQkJCSJDT01SRVNFVCBmYWlsZWQgKGVycm5vPSVkKVxuIiwgcmMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBjbGVhciBTRXJyb3IgYml0cyBpbmNsdWRpbmcgLlggd2hpY2ggYmxvY2tzIHRoZSBwb3J0IHdoZW4gc2V0ICovCi0JcmMgPSBzYXRhX3Njcl93cml0ZShsaW5rLCBTQ1JfRVJST1IsIDB4ZmZmZmZmZmYpOwotCWlmIChyYykgewotCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9FUlIsICJmYWlsZWQgdG8gY2xlYXIgU0Vycm9yICIKLQkJCQkiZHVyaW5nIGhhcmRyZXNldCAoZXJybm89JWQpXG4iLCByYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGlmIGRldmljZSBpcyBwcmVzZW50LCBmb2xsb3cgdXAgd2l0aCBzcnN0IHRvIHdhaXQgZm9yICFCU1kgKi8KLQlpZiAoYXRhX2xpbmtfb25saW5lKGxpbmspKQotCQlyYyA9IC1FQUdBSU47Ci0gb3V0OgotCS8qIGlmIFNDUiBpc24ndCBhY2Nlc3NpYmxlLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBQTVAgKi8KLQlpZiAocmMgJiYgcmMgIT0gLUVBR0FJTiAmJiBzYXRhX3Njcl9yZWFkKGxpbmssIFNDUl9TVEFUVVMsICZ0bXApKQotCQlyYyA9IC1FUkVTVEFSVDsKLQotCURQUklOVEsoIkVYSVQsIHJjPSVkXG4iLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqCWF0YV9zdGRfcG9zdHJlc2V0IC0gc3RhbmRhcmQgcG9zdHJlc2V0IG1ldGhvZCBmb3IgUE1QIGxpbmsKLSAqCUBsaW5rOiB0aGUgdGFyZ2V0IGF0YV9saW5rCi0gKglAY2xhc3NlczogY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCi0gKgotICoJVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZXNldC4gIE5vdGUgdGhhdAotICoJdGhlIGRldmljZSBtaWdodCBoYXZlIGJlZW4gcmVzZXQgbW9yZSB0aGFuIG9uY2UgdXNpbmcKLSAqCWRpZmZlcmVudCByZXNldCBtZXRob2RzIGJlZm9yZSBwb3N0cmVzZXQgaXMgaW52b2tlZC4KLSAqCi0gKglMT0NLSU5HOgotICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCi0gKi8KLXZvaWQgc2F0YV9wbXBfc3RkX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MpCi17Ci0JdTMyIHNlcnJvcjsKLQotCURQUklOVEsoIkVOVEVSXG4iKTsKLQotCS8qIGNsZWFyIFNFcnJvciAqLwotCWlmIChzYXRhX3Njcl9yZWFkKGxpbmssIFNDUl9FUlJPUiwgJnNlcnJvcikgPT0gMCkKLQkJc2F0YV9zY3Jfd3JpdGUobGluaywgU0NSX0VSUk9SLCBzZXJyb3IpOwotCi0JLyogcHJpbnQgbGluayBzdGF0dXMgKi8KLQlzYXRhX3ByaW50X2xpbmtfc3RhdHVzKGxpbmspOwotCi0JRFBSSU5USygiRVhJVFxuIik7Ci19Ci0KLS8qKgogICoJc2F0YV9wbXBfcmVhZF9nc2NyIC0gcmVhZCBHU0NSIGJsb2NrIG9mIFNBVEEgUE1QCiAgKglAZGV2OiBQTVAgZGV2aWNlCiAgKglAZ3NjcjogYnVmZmVyIHRvIHJlYWQgR1NDUiBibG9jayBpbnRvCkBAIC00NDQsOSArMzE4LDggQEAKIAkJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAogCQlsaW5rLT5mbGFncyA9IDA7Ci0JCWVoYy0+aS5wcm9iZV9tYXNrIHw9IDE7Ci0JCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKLQkJZWhjLT5pLmZsYWdzIHw9IEFUQV9FSElfUkVTVU1FX0xJTks7CisJCWVoYy0+aS5wcm9iZV9tYXNrIHw9IEFUQV9BTExfREVWSUNFUzsKKwkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NjIsOSArMzM1LDYgQEAKIAlpZiAodmVuZG9yID09IDB4MTA5NSAmJiBkZXZpZCA9PSAweDM3MjYpIHsKIAkJLyogc2lsMzcyNiBxdWlya3MgKi8KIAkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgewotCQkJLyogU0Vycm9yLk4gbmVlZCBhIGtpY2sgaW4gdGhlIGFzcyB0byBnZXQgd29ya2luZyAqLwotCQkJbGluay0+ZmxhZ3MgfD0gQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FOwotCiAJCQkvKiBjbGFzcyBjb2RlIHJlcG9ydCBpcyB1bnJlbGlhYmxlICovCiAJCQlpZiAobGluay0+cG1wIDwgNSkKIAkJCQlsaW5rLT5mbGFncyB8PSBBVEFfTEZMQUdfQVNTVU1FX0FUQTsKQEAgLTQ3Nyw5ICszNDcsNiBAQAogCX0gZWxzZSBpZiAodmVuZG9yID09IDB4MTA5NSAmJiBkZXZpZCA9PSAweDQ3MjMpIHsKIAkJLyogc2lsNDcyMyBxdWlya3MgKi8KIAkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgewotCQkJLyogU0Vycm9yLk4gbmVlZCBhIGtpY2sgaW4gdGhlIGFzcyB0byBnZXQgd29ya2luZyAqLwotCQkJbGluay0+ZmxhZ3MgfD0gQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FOwotCiAJCQkvKiBjbGFzcyBjb2RlIHJlcG9ydCBpcyB1bnJlbGlhYmxlICovCiAJCQlpZiAobGluay0+cG1wIDwgMikKIAkJCQlsaW5rLT5mbGFncyB8PSBBVEFfTEZMQUdfQVNTVU1FX0FUQTsKQEAgLTQ5Miw5ICszNTksNiBAQAogCX0gZWxzZSBpZiAodmVuZG9yID09IDB4MTA5NSAmJiBkZXZpZCA9PSAweDQ3MjYpIHsKIAkJLyogc2lsNDcyNiBxdWlya3MgKi8KIAkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgewotCQkJLyogU0Vycm9yLk4gbmVlZCBhIGtpY2sgaW4gdGhlIGFzcyB0byBnZXQgd29ya2luZyAqLwotCQkJbGluay0+ZmxhZ3MgfD0gQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FOwotCiAJCQkvKiBDbGFzcyBjb2RlIHJlcG9ydCBpcyB1bnJlbGlhYmxlIGFuZCBTUlNUCiAJCQkgKiB0aW1lcyBvdXQgdW5kZXIgY2VydGFpbiBjb25maWd1cmF0aW9ucy4KIAkJCSAqIENvbmZpZyBkZXZpY2UgY2FuIGJlIGF0IHBvcnQgMCBvciA1IGFuZApAQCAtNTIyLDEzICszODYsNiBAQAogCQkgKiBvdGhlcndpc2UuICBEb24ndCB0cnkgaGFyZCB0byByZWNvdmVyIGl0LgogCQkgKi8KIAkJYXAtPnBtcF9saW5rW2FwLT5ucl9wbXBfbGlua3MgLSAxXS5mbGFncyB8PSBBVEFfTEZMQUdfTk9fUkVUUlk7Ci0JfSBlbHNlIGlmICh2ZW5kb3IgPT0gMHgxMWFiICYmIGRldmlkID09IDB4NDE0MCkgewotCQkvKiBNYXJ2ZWxsIDg4U000MTQwIHF1aXJrcy4gIEZhbi1vdXQgcG9ydHMgcmVxdWlyZSBQSFkKLQkJICogcmVzZXQgdG8gd29yazsgb3RoZXIgdGhhbiB0aGF0LCBpdCBiZWhhdmVzIHZlcnkKLQkJICogbmljZWx5LgotCQkgKi8KLQkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkKLQkJCWxpbmstPmZsYWdzIHw9IEFUQV9MRkxBR19IUlNUX1RPX1JFU1VNRTsKIAl9CiB9CiAKQEAgLTU1NCw3ICs0MTEsNyBAQAogCWludCByYzsKIAogCS8qIGlzIGl0IGhhbmdpbmcgb2ZmIHRoZSByaWdodCBwbGFjZT8gKi8KLQlpZiAoIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QTVApKSB7CisJaWYgKCFzYXRhX3BtcF9zdXBwb3J0ZWQoYXApKSB7CiAJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9FUlIsCiAJCQkgICAgICAgImhvc3QgZG9lcyBub3Qgc3VwcG9ydCBQb3J0IE11bHRpcGxpZXJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg0MCwxMyArNjk3LDEyIEBACiAgcmV0cnk6CiAJZWhjLT5jbGFzc2VzWzBdID0gQVRBX0RFVl9VTktOT1dOOwogCi0JaWYgKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfUkVTRVRfTUFTSykgeworCWlmIChlaGMtPmkuYWN0aW9uICYgQVRBX0VIX1JFU0VUKSB7CiAJCXN0cnVjdCBhdGFfbGluayAqdGxpbms7CiAKIAkJYXRhX2VoX2ZyZWV6ZV9wb3J0KGFwKTsKIAogCQkvKiByZXNldCAqLwotCQllaGMtPmkuYWN0aW9uID0gQVRBX0VIX0hBUkRSRVNFVDsKIAkJcmMgPSBhdGFfZWhfcmVzZXQobGluaywgMCwgcHJlcmVzZXQsIHNvZnRyZXNldCwgaGFyZHJlc2V0LAogCQkJCSAgcG9zdHJlc2V0KTsKIAkJaWYgKHJjKSB7CkBAIC04NTgsOCArNzE0LDEyIEBACiAJCWF0YV9laF90aGF3X3BvcnQoYXApOwogCiAJCS8qIFBNUCBpcyByZXNldCwgU0Vycm9ycyBjYW5ub3QgYmUgdHJ1c3RlZCwgc2NhbiBhbGwgKi8KLQkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayh0bGluaywgYXApCi0JCQlhdGFfZWhpX3NjaGVkdWxlX3Byb2JlKCZ0bGluay0+ZWhfY29udGV4dC5pKTsKKwkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayh0bGluaywgYXApIHsKKwkJCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJnRsaW5rLT5laF9jb250ZXh0OworCisJCQllaGMtPmkucHJvYmVfbWFzayB8PSBBVEFfQUxMX0RFVklDRVM7CisJCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKKwkJfQogCX0KIAogCS8qIElmIHJldmFsaWRhdGlvbiBpcyByZXF1ZXN0ZWQsIHJldmFsaWRhdGUgYW5kIHJlY29uZmlndXJlOwpAQCAtODc0LDcgKzczNCw3IEBACiAJCXRyaWVzLS07CiAKIAkJaWYgKHJjID09IC1FTk9ERVYpIHsKLQkJCWVoYy0+aS5wcm9iZV9tYXNrIHw9IDE7CisJCQllaGMtPmkucHJvYmVfbWFzayB8PSBBVEFfQUxMX0RFVklDRVM7CiAJCQlkZXRhY2ggPSAxOwogCQkJLyogZ2l2ZSBpdCBqdXN0IHR3byBtb3JlIGNoYW5jZXMgKi8KIAkJCXRyaWVzID0gbWluKHRyaWVzLCAyKTsKQEAgLTg5MCwxMSArNzUwLDExIEBACiAJCQkJcmV2YWxfZmFpbGVkID0gMTsKIAogCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsCi0JCQkJICAgICAgICJyZXRyeWluZyBoYXJkcmVzZXQlc1xuIiwKKwkJCQkgICAgICAgInJldHJ5aW5nIHJlc2V0JXNcbiIsCiAJCQkJICAgICAgIHNsZWVwID8gIiBpbiA1IHNlY3MiIDogIiIpOwogCQkJaWYgKHNsZWVwKQogCQkJCXNzbGVlcCg1KTsKLQkJCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX0hBUkRSRVNFVDsKKwkJCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQkJZ290byByZXRyeTsKIAkJfSBlbHNlIHsKIAkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9FUlIsICJmYWlsZWQgdG8gcmVjb3ZlciBQTVAgIgpAQCAtOTM4LDEwICs3OTgsOCBAQAogCQkvKiBTb21lIFBNUHMgcmVxdWlyZSBoYXJkcmVzZXQgc2VxdWVuY2UgdG8gZ2V0CiAJCSAqIFNFcnJvci5OIHdvcmtpbmcuCiAJCSAqLwotCQlpZiAoKGxpbmstPmZsYWdzICYgQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FKSAmJgotCQkgICAgKGxpbmstPmVoX2NvbnRleHQuaS5mbGFncyAmIEFUQV9FSElfUkVTVU1FX0xJTkspKQotCQkJc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCBzYXRhX2RlYl90aW1pbmdfbm9ybWFsLAotCQkJCQkgICAgamlmZmllcyArIEFUQV9UTU9VVF9JTlRFUk5BTF9RVUlDSyk7CisJCXNhdGFfbGlua19oYXJkcmVzZXQobGluaywgc2F0YV9kZWJfdGltaW5nX25vcm1hbCwKKwkJCQlqaWZmaWVzICsgQVRBX1RNT1VUX0lOVEVSTkFMX1FVSUNLLCBOVUxMLCBOVUxMKTsKIAogCQkvKiB1bmNvbmRpdGlvbmFsbHkgY2xlYXIgU0Vycm9yLk4gKi8KIAkJcmMgPSBzYXRhX3Njcl93cml0ZShsaW5rLCBTQ1JfRVJST1IsIFNFUlJfUEhZUkRZX0NIRyk7CkBAIC05ODcsMTQgKzg0NSw2IEBACiAvKioKICAqCXNhdGFfcG1wX2VoX3JlY292ZXIgLSByZWNvdmVyIFBNUC1lbmFibGVkIHBvcnQKICAqCUBhcDogQVRBIHBvcnQgdG8gcmVjb3ZlcgotICoJQHByZXJlc2V0OiBwcmVyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQotICoJQHNvZnRyZXNldDogc29mdHJlc2V0IG1ldGhvZAotICoJQGhhcmRyZXNldDogaGFyZHJlc2V0IG1ldGhvZAotICoJQHBvc3RyZXNldDogcG9zdHJlc2V0IG1ldGhvZCAoY2FuIGJlIE5VTEwpCi0gKglAcG1wX3ByZXJlc2V0OiBQTVAgcHJlcmVzZXQgbWV0aG9kIChjYW4gYmUgTlVMTCkKLSAqCUBwbXBfc29mdHJlc2V0OiBQTVAgc29mdHJlc2V0IG1ldGhvZCAoY2FuIGJlIE5VTEwpCi0gKglAcG1wX2hhcmRyZXNldDogUE1QIGhhcmRyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQotICoJQHBtcF9wb3N0cmVzZXQ6IFBNUCBwb3N0cmVzZXQgbWV0aG9kIChjYW4gYmUgTlVMTCkKICAqCiAgKglEcml2ZSBFSCByZWNvdmVyeSBvcGVyYXRpb24gZm9yIFBNUCBlbmFibGVkIHBvcnQgQGFwLiAgVGhpcwogICoJZnVuY3Rpb24gcmVjb3ZlcnMgaG9zdCBhbmQgUE1QIHBvcnRzIHdpdGggcHJvcGVyIHJldHJpYWxzIGFuZApAQCAtMTAwNywxMiArODU3LDkgQEAKICAqCVJFVFVSTlM6CiAgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHNhdGFfcG1wX2VoX3JlY292ZXIoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJYXRhX3ByZXJlc2V0X2ZuX3QgcHJlcmVzZXQsIGF0YV9yZXNldF9mbl90IHNvZnRyZXNldCwKLQkJYXRhX3Jlc2V0X2ZuX3QgaGFyZHJlc2V0LCBhdGFfcG9zdHJlc2V0X2ZuX3QgcG9zdHJlc2V0LAotCQlhdGFfcHJlcmVzZXRfZm5fdCBwbXBfcHJlcmVzZXQsIGF0YV9yZXNldF9mbl90IHBtcF9zb2Z0cmVzZXQsCi0JCWF0YV9yZXNldF9mbl90IHBtcF9oYXJkcmVzZXQsIGF0YV9wb3N0cmVzZXRfZm5fdCBwbXBfcG9zdHJlc2V0KQorc3RhdGljIGludCBzYXRhX3BtcF9laF9yZWNvdmVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CisJc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKm9wcyA9IGFwLT5vcHM7CiAJaW50IHBtcF90cmllcywgbGlua190cmllc1tTQVRBX1BNUF9NQVhfUE9SVFNdOwogCXN0cnVjdCBhdGFfbGluayAqcG1wX2xpbmsgPSAmYXAtPmxpbms7CiAJc3RydWN0IGF0YV9kZXZpY2UgKnBtcF9kZXYgPSBwbXBfbGluay0+ZGV2aWNlOwpAQCAtMTAyOSw5ICs4NzYsOSBAQAogCiAgcmV0cnk6CiAJLyogUE1QIGF0dGFjaGVkPyAqLwotCWlmICghYXAtPm5yX3BtcF9saW5rcykgewotCQlyYyA9IGF0YV9laF9yZWNvdmVyKGFwLCBwcmVyZXNldCwgc29mdHJlc2V0LCBoYXJkcmVzZXQsCi0JCQkJICAgIHBvc3RyZXNldCwgTlVMTCk7CisJaWYgKCFzYXRhX3BtcF9hdHRhY2hlZChhcCkpIHsKKwkJcmMgPSBhdGFfZWhfcmVjb3ZlcihhcCwgb3BzLT5wcmVyZXNldCwgb3BzLT5zb2Z0cmVzZXQsCisJCQkJICAgIG9wcy0+aGFyZHJlc2V0LCBvcHMtPnBvc3RyZXNldCwgTlVMTCk7CiAJCWlmIChyYykgewogCQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rKQogCQkJCWF0YV9kZXZfZGlzYWJsZShkZXYpOwpAQCAtMTA0OSw4ICs4OTYsOCBAQAogCX0KIAogCS8qIHJlY292ZXIgcG1wICovCi0JcmMgPSBzYXRhX3BtcF9laF9yZWNvdmVyX3BtcChhcCwgcHJlcmVzZXQsIHNvZnRyZXNldCwgaGFyZHJlc2V0LAotCQkJCSAgICAgcG9zdHJlc2V0KTsKKwlyYyA9IHNhdGFfcG1wX2VoX3JlY292ZXJfcG1wKGFwLCBvcHMtPnByZXJlc2V0LCBvcHMtPnNvZnRyZXNldCwKKwkJCQkgICAgIG9wcy0+aGFyZHJlc2V0LCBvcHMtPnBvc3RyZXNldCk7CiAJaWYgKHJjKQogCQlnb3RvIHBtcF9mYWlsOwogCkBAIC0xMDYwLDggKzkwNyw4IEBACiAJCWdvdG8gcG1wX2ZhaWw7CiAKIAkvKiByZWNvdmVyIGxpbmtzICovCi0JcmMgPSBhdGFfZWhfcmVjb3ZlcihhcCwgcG1wX3ByZXJlc2V0LCBwbXBfc29mdHJlc2V0LCBwbXBfaGFyZHJlc2V0LAotCQkJICAgIHBtcF9wb3N0cmVzZXQsICZsaW5rKTsKKwlyYyA9IGF0YV9laF9yZWNvdmVyKGFwLCBvcHMtPnBtcF9wcmVyZXNldCwgb3BzLT5wbXBfc29mdHJlc2V0LAorCQkJICAgIG9wcy0+cG1wX2hhcmRyZXNldCwgb3BzLT5wbXBfcG9zdHJlc2V0LCAmbGluayk7CiAJaWYgKHJjKQogCQlnb3RvIGxpbmtfZmFpbDsKIApAQCAtMTEyNCw3ICs5NzEsNyBAQAogCiAgbGlua19mYWlsOgogCWlmIChzYXRhX3BtcF9oYW5kbGVfbGlua19mYWlsKGxpbmssIGxpbmtfdHJpZXMpKSB7Ci0JCXBtcF9laGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCXBtcF9laGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJZ290byByZXRyeTsKIAl9CiAKQEAgLTExMzYsMTMgKzk4MywxMyBAQAogCWlmIChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX1VOTE9BRElORykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKCFhcC0+bnJfcG1wX2xpbmtzKQorCWlmICghc2F0YV9wbXBfYXR0YWNoZWQoYXApKQogCQlnb3RvIHJldHJ5OwogCiAJaWYgKC0tcG1wX3RyaWVzKSB7CiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLAogCQkJCSJmYWlsZWQgdG8gcmVjb3ZlciBQTVAsIHJldHJ5aW5nIGluIDUgc2Vjc1xuIik7Ci0JCXBtcF9laGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCXBtcF9laGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJc3NsZWVwKDUpOwogCQlnb3RvIHJldHJ5OwogCX0KQEAgLTExNTcsMTYgKzEwMDQsOCBAQAogfQogCiAvKioKLSAqCXNhdGFfcG1wX2RvX2VoIC0gZG8gc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgZm9yIFBNUC1lbmFibGVkIGhvc3QKKyAqCXNhdGFfcG1wX2Vycm9yX2hhbmRsZXIgLSBkbyBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBmb3IgUE1QLWVuYWJsZWQgaG9zdAogICoJQGFwOiBob3N0IHBvcnQgdG8gaGFuZGxlIGVycm9yIGZvcgotICoJQHByZXJlc2V0OiBwcmVyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQotICoJQHNvZnRyZXNldDogc29mdHJlc2V0IG1ldGhvZAotICoJQGhhcmRyZXNldDogaGFyZHJlc2V0IG1ldGhvZAotICoJQHBvc3RyZXNldDogcG9zdHJlc2V0IG1ldGhvZCAoY2FuIGJlIE5VTEwpCi0gKglAcG1wX3ByZXJlc2V0OiBQTVAgcHJlcmVzZXQgbWV0aG9kIChjYW4gYmUgTlVMTCkKLSAqCUBwbXBfc29mdHJlc2V0OiBQTVAgc29mdHJlc2V0IG1ldGhvZCAoY2FuIGJlIE5VTEwpCi0gKglAcG1wX2hhcmRyZXNldDogUE1QIGhhcmRyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQotICoJQHBtcF9wb3N0cmVzZXQ6IFBNUCBwb3N0cmVzZXQgbWV0aG9kIChjYW4gYmUgTlVMTCkKICAqCiAgKglQZXJmb3JtIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIHNlcXVlbmNlIGZvciBQTVAtZW5hYmxlZCBob3N0CiAgKglAYXAuCkBAIC0xMTc0LDE2ICsxMDEzLDE0IEBACiAgKglMT0NLSU5HOgogICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApLgogICovCi12b2lkIHNhdGFfcG1wX2RvX2VoKHN0cnVjdCBhdGFfcG9ydCAqYXAsCi0JCWF0YV9wcmVyZXNldF9mbl90IHByZXJlc2V0LCBhdGFfcmVzZXRfZm5fdCBzb2Z0cmVzZXQsCi0JCWF0YV9yZXNldF9mbl90IGhhcmRyZXNldCwgYXRhX3Bvc3RyZXNldF9mbl90IHBvc3RyZXNldCwKLQkJYXRhX3ByZXJlc2V0X2ZuX3QgcG1wX3ByZXJlc2V0LCBhdGFfcmVzZXRfZm5fdCBwbXBfc29mdHJlc2V0LAotCQlhdGFfcmVzZXRfZm5fdCBwbXBfaGFyZHJlc2V0LCBhdGFfcG9zdHJlc2V0X2ZuX3QgcG1wX3Bvc3RyZXNldCkKK3ZvaWQgc2F0YV9wbXBfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCWF0YV9laF9hdXRvcHN5KGFwKTsKIAlhdGFfZWhfcmVwb3J0KGFwKTsKLQlzYXRhX3BtcF9laF9yZWNvdmVyKGFwLCBwcmVyZXNldCwgc29mdHJlc2V0LCBoYXJkcmVzZXQsIHBvc3RyZXNldCwKLQkJCSAgICBwbXBfcHJlcmVzZXQsIHBtcF9zb2Z0cmVzZXQsIHBtcF9oYXJkcmVzZXQsCi0JCQkgICAgcG1wX3Bvc3RyZXNldCk7CisJc2F0YV9wbXBfZWhfcmVjb3ZlcihhcCk7CiAJYXRhX2VoX2ZpbmlzaChhcCk7CiB9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHNhdGFfcG1wX3BvcnRfb3BzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNhdGFfcG1wX3FjX2RlZmVyX2NtZF9zd2l0Y2gpOworRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9wbXBfZXJyb3JfaGFuZGxlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCAxY2VhMThmLi5hMzRmMzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTEzMSwxMCArMTMxLDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGF0YV9zY3NpX2xwbV9wdXQoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAotCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgYXRhX3Njc2lfbHBtX3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2hvc3QpOwogCWVudW0gbGlua19wbSBwb2xpY3kgPSAwOwogCWludCBpOwpAQCAtMTYyLDkgKzE2Myw5IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1hdGFfc2NzaV9scG1fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK2F0YV9zY3NpX2xwbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzaG9zdCk7CiAJY29uc3QgY2hhciAqcG9saWN5ID0KIAkJYXRhX3Njc2lfbHBtX2dldChhcC0+cG1fcG9saWN5KTsKQEAgLTE3NCw5ICsxNzUsOSBAQAogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjMsICIlc1xuIiwgcG9saWN5KTsKIH0KLUNMQVNTX0RFVklDRV9BVFRSKGxpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xpY3ksIFNfSVJVR08gfCBTX0lXVVNSLAorREVWSUNFX0FUVFIobGlua19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCWF0YV9zY3NpX2xwbV9zaG93LCBhdGFfc2NzaV9scG1fcHV0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKGNsYXNzX2RldmljZV9hdHRyX2xpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xpY3kpOworRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2F0dHJfbGlua19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeSk7CiAKIHN0YXRpYyB2b2lkIGF0YV9zY3NpX2ludmFsaWRfZmllbGQoc3RydWN0IHNjc2lfY21uZCAqY21kLAogCQkJCSAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQpAQCAtNTI3LDYgKzUyOCwxNCBAQAogCXJldHVybiBxYzsKIH0KIAorc3RhdGljIHZvaWQgYXRhX3FjX3NldF9wY19uYnl0ZXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gcWMtPnNjc2ljbWQ7CisKKwlxYy0+ZXh0cmFieXRlcyA9IHNjbWQtPnJlcXVlc3QtPmV4dHJhX2xlbjsKKwlxYy0+bmJ5dGVzID0gc2NzaV9idWZmbGVuKHNjbWQpICsgcWMtPmV4dHJhYnl0ZXM7Cit9CisKIC8qKgogICoJYXRhX2R1bXBfc3RhdHVzIC0gdXNlciBmcmllbmRseSBkaXNwbGF5IG9mIGVycm9yIGluZm8KICAqCUBpZDogaWQgb2YgdGhlIHBvcnQgaW4gcXVlc3Rpb24KQEAgLTgyNiwzMCArODM1LDYyIEBACiAJc2Rldi0+bWF4X2RldmljZV9ibG9ja2VkID0gMTsKIH0KIAotc3RhdGljIHZvaWQgYXRhX3Njc2lfZGV2X2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCi0JCQkJc3RydWN0IGF0YV9kZXZpY2UgKmRldikKKy8qKgorICoJYXRhcGlfZHJhaW5fbmVlZGVkIC0gQ2hlY2sgd2hldGhlciBkYXRhIHRyYW5zZmVyIG1heSBvdmVyZmxvdworICoJQHJxOiByZXF1ZXN0IHRvIGJlIGNoZWNrZWQKKyAqCisgKglBVEFQSSBjb21tYW5kcyB3aGljaCB0cmFuc2ZlciB2YXJpYWJsZSBsZW5ndGggZGF0YSB0byBob3N0CisgKgltaWdodCBvdmVyZmxvdyBkdWUgdG8gYXBwbGljYXRpb24gZXJyb3Igb3IgaGFyZGFyZSBidWcuICBUaGlzCisgKglmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBvdmVyZmxvdyBzaG91bGQgYmUgZHJhaW5lZCBhbmQgaWdub3JlZAorICoJZm9yIEByZXF1ZXN0LgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lLgorICoKKyAqCVJFVFVSTlM6CisgKgkxIGlmIDsgb3RoZXJ3aXNlLCAwLgorICovCitzdGF0aWMgaW50IGF0YXBpX2RyYWluX25lZWRlZChzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJaWYgKGxpa2VseSghYmxrX3BjX3JlcXVlc3QocnEpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXJxLT5kYXRhX2xlbiB8fCAocnEtPmNtZF9mbGFncyAmIFJFUV9SVykpCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0YXBpX2NtZF90eXBlKHJxLT5jbWRbMF0pID09IEFUQVBJX01JU0M7Cit9CisKK3N0YXRpYyBpbnQgYXRhX3Njc2lfZGV2X2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisJCQkgICAgICAgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKIHsKIAkvKiBjb25maWd1cmUgbWF4IHNlY3RvcnMgKi8KIAlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGV2LT5tYXhfc2VjdG9ycyk7CiAKLQkvKiBTQVRBIERNQSB0cmFuc2ZlcnMgbXVzdCBiZSBtdWx0aXBsZXMgb2YgNCBieXRlLCBzbwotCSAqIHdlIG5lZWQgdG8gcGFkIEFUQVBJIHRyYW5zZmVycyB1c2luZyBhbiBleHRyYSBzZy4KLQkgKiBEZWNyZW1lbnQgbWF4IGh3IHNlZ21lbnRzIGFjY29yZGluZ2x5LgotCSAqLwogCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBUEkpIHsKIAkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwotCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIHEtPm1heF9od19zZWdtZW50cyAtIDEpOworCQl2b2lkICpidWY7CiAKLQkJLyogc2V0IHRoZSBtaW4gYWxpZ25tZW50ICovCisJCS8qIHNldCB0aGUgbWluIGFsaWdubWVudCBhbmQgcGFkZGluZyAqLwogCQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICAgIEFUQV9ETUFfUEFEX1NaIC0gMSk7Ci0JfSBlbHNlCisJCWJsa19xdWV1ZV9kbWFfcGFkKHNkZXYtPnJlcXVlc3RfcXVldWUsIEFUQV9ETUFfUEFEX1NaIC0gMSk7CisKKwkJLyogY29uZmlndXJlIGRyYWluaW5nICovCisJCWJ1ZiA9IGttYWxsb2MoQVRBUElfTUFYX0RSQUlOLCBxLT5ib3VuY2VfZ2ZwIHwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fRVJSLAorCQkJCSAgICAgICAiZHJhaW4gYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJYmxrX3F1ZXVlX2RtYV9kcmFpbihxLCBhdGFwaV9kcmFpbl9uZWVkZWQsIGJ1ZiwgQVRBUElfTUFYX0RSQUlOKTsKKwl9IGVsc2UgewogCQkvKiBBVEEgZGV2aWNlcyBtdXN0IGJlIHNlY3RvciBhbGlnbmVkICovCiAJCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCQkgICAgICAgQVRBX1NFQ1RfU0laRSAtIDEpOwotCi0JaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpCiAJCXNkZXYtPm1hbmFnZV9zdGFydF9zdG9wID0gMTsKKwl9CiAKIAlpZiAoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19BTikKIAkJc2V0X2JpdChTREVWX0VWVF9NRURJQV9DSEFOR0UsIHNkZXYtPnN1cHBvcnRlZF9ldmVudHMpOwpAQCAtODYxLDYgKzkwMiw4IEBACiAJCWRlcHRoID0gbWluKEFUQV9NQVhfUVVFVUUgLSAxLCBkZXB0aCk7CiAJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBkZXB0aCk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtODc5LDEzICs5MjIsMTQgQEAKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2Rldi0+aG9zdCk7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9IF9fYXRhX3Njc2lfZmluZF9kZXYoYXAsIHNkZXYpOworCWludCByYyA9IDA7CiAKIAlhdGFfc2NzaV9zZGV2X2NvbmZpZyhzZGV2KTsKIAogCWlmIChkZXYpCi0JCWF0YV9zY3NpX2Rldl9jb25maWcoc2RldiwgZGV2KTsKKwkJcmMgPSBhdGFfc2NzaV9kZXZfY29uZmlnKHNkZXYsIGRldik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtOTA1LDYgKzk0OSw3IEBACiB2b2lkIGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzZGV2LT5ob3N0KTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCkBAIC05MjAsNiArOTY1LDEwIEBACiAJCWF0YV9wb3J0X3NjaGVkdWxlX2VoKGFwKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOworCisJa2ZyZWUocS0+ZG1hX2RyYWluX2J1ZmZlcik7CisJcS0+ZG1hX2RyYWluX2J1ZmZlciA9IE5VTEw7CisJcS0+ZG1hX2RyYWluX3NpemUgPSAwOwogfQogCiAvKioKQEAgLTE2NTUsMTIgKzE3MDQsMTcgQEAKIAl1OCAqcmJ1ZjsKIAl1bnNpZ25lZCBpbnQgYnVmbGVuLCByYzsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBhcmdzLT5jbWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCWJ1ZmxlbiA9IGF0YV9zY3NpX3JidWZfZ2V0KGNtZCwgJnJidWYpOwogCW1lbXNldChyYnVmLCAwLCBidWZsZW4pOwogCXJjID0gYWN0b3IoYXJncywgcmJ1ZiwgYnVmbGVuKTsKIAlhdGFfc2NzaV9yYnVmX3B1dChjbWQsIHJidWYpOwogCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJaWYgKHJjID09IDApCiAJCWNtZC0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKIAlhcmdzLT5kb25lKGNtZCk7CkBAIC0yMjc5LDExICsyMzMzLDcgQEAKIHsKIAljbWQtPnJlc3VsdCA9IChEUklWRVJfU0VOU0UgPDwgMjQpIHwgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCi0JY21kLT5zZW5zZV9idWZmZXJbMF0gPSAweDcwOwkvKiBmaXhlZCBmb3JtYXQsIGN1cnJlbnQgKi8KLQljbWQtPnNlbnNlX2J1ZmZlclsyXSA9IHNrOwotCWNtZC0+c2Vuc2VfYnVmZmVyWzddID0gMTggLSA4OwkvKiBhZGRpdGlvbmFsIHNlbnNlIGxlbmd0aCAqLwotCWNtZC0+c2Vuc2VfYnVmZmVyWzEyXSA9IGFzYzsKLQljbWQtPnNlbnNlX2J1ZmZlclsxM10gPSBhc2NxOworCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDAsIGNtZC0+c2Vuc2VfYnVmZmVyLCBzaywgYXNjLCBhc2NxKTsKIH0KIAogLyoqCkBAIC0yMzQwLDcgKzIzOTAsMTAgQEAKIAkvKiBGSVhNRTogaXMgdGhpcyBuZWVkZWQ/ICovCiAJbWVtc2V0KGNtZC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCi0JYXAtPm9wcy0+dGZfcmVhZChhcCwgJnFjLT50Zik7CisjaWZkZWYgQ09ORklHX0FUQV9TRkYKKwlpZiAoYXAtPm9wcy0+c2ZmX3RmX3JlYWQpCisJCWFwLT5vcHMtPnNmZl90Zl9yZWFkKGFwLCAmcWMtPnRmKTsKKyNlbmRpZgogCiAJLyogZmlsbCB0aGVzZSBpbiwgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXkgYXJlIC1ub3QtIG92ZXJ3cml0dGVuICovCiAJY21kLT5zZW5zZV9idWZmZXJbMF0gPSAweDcwOwpAQCAtMjQzNCw2ICsyNDg3LDkgQEAKIAkJaWYgKChzY3NpY21kWzBdID09IElOUVVJUlkpICYmICgoc2NzaWNtZFsxXSAmIDB4MDMpID09IDApKSB7CiAJCQl1OCAqYnVmID0gTlVMTDsKIAkJCXVuc2lnbmVkIGludCBidWZsZW47CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAkJCWJ1ZmxlbiA9IGF0YV9zY3NpX3JidWZfZ2V0KGNtZCwgJmJ1Zik7CiAKQEAgLTI0NTEsNiArMjUwNyw4IEBACiAJCQl9CiAKIAkJCWF0YV9zY3NpX3JidWZfcHV0KGNtZCwgYnVmKTsKKworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl9CiAKIAkJY21kLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOwpAQCAtMjQ4OSw3ICsyNTQ3LDcgQEAKIAl9CiAKIAlxYy0+dGYuY29tbWFuZCA9IEFUQV9DTURfUEFDS0VUOwotCXFjLT5uYnl0ZXMgPSBzY3NpX2J1ZmZsZW4oc2NtZCk7CisJYXRhX3FjX3NldF9wY19uYnl0ZXMocWMpOwogCiAJLyogY2hlY2sgd2hldGhlciBBVEFQSSBETUEgaXMgc2FmZSAqLwogCWlmICghdXNpbmdfcGlvICYmIGF0YV9jaGVja19hdGFwaV9kbWEocWMpKQpAQCAtMjUwMCw3ICsyNTU4LDcgQEAKIAkgKiB3YW50IHRvIHNldCBpdCBwcm9wZXJseSwgYW5kIGZvciBETUEgd2hlcmUgaXQgaXMKIAkgKiBlZmZlY3RpdmVseSBtZWFuaW5nbGVzcy4KIAkgKi8KLQluYnl0ZXMgPSBtaW4ocWMtPm5ieXRlcywgKHVuc2lnbmVkIGludCk2MyAqIDEwMjQpOworCW5ieXRlcyA9IG1pbihhdGFfcWNfcmF3X25ieXRlcyhxYyksICh1bnNpZ25lZCBpbnQpNjMgKiAxMDI0KTsKIAogCS8qIE1vc3QgQVRBUEkgZGV2aWNlcyB3aGljaCBob25vciB0cmFuc2ZlciBjaHVuayBzaXplIGRvbid0CiAJICogYmVoYXZlIGFjY29yZGluZyB0byB0aGUgc3BlYyB3aGVuIG9kZCBjaHVuayBzaXplIHdoaWNoCkBAIC0yNTQzLDcgKzI2MDEsOCBAQAogCQlxYy0+dGYucHJvdG9jb2wgPSBBVEFQSV9QUk9UX0RNQTsKIAkJcWMtPnRmLmZlYXR1cmUgfD0gQVRBUElfUEtUX0RNQTsKIAotCQlpZiAoYXRhcGlfZG1hZGlyICYmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFKSkKKwkJaWYgKChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0RNQURJUikgJiYKKwkJICAgIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFKSkKIAkJCS8qIHNvbWUgU0FUQSBicmlkZ2VzIG5lZWQgdXMgdG8gaW5kaWNhdGUgZGF0YSB4ZmVyIGRpcmVjdGlvbiAqLwogCQkJcWMtPnRmLmZlYXR1cmUgfD0gQVRBUElfRE1BRElSOwogCX0KQEAgLTI1NTYsNyArMjYxNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhX2ZpbmRfZGV2KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCBkZXZubykKIHsKLQlpZiAoYXAtPm5yX3BtcF9saW5rcyA9PSAwKSB7CisJaWYgKCFzYXRhX3BtcF9hdHRhY2hlZChhcCkpIHsKIAkJaWYgKGxpa2VseShkZXZubyA8IGF0YV9saW5rX21heF9kZXZpY2VzKCZhcC0+bGluaykpKQogCQkJcmV0dXJuICZhcC0+bGluay5kZXZpY2VbZGV2bm9dOwogCX0gZWxzZSB7CkBAIC0yNTczLDcgKzI2MzIsNyBAQAogCWludCBkZXZubzsKIAogCS8qIHNraXAgY29tbWFuZHMgbm90IGFkZHJlc3NlZCB0byB0YXJnZXRzIHdlIHNpbXVsYXRlICovCi0JaWYgKGFwLT5ucl9wbXBfbGlua3MgPT0gMCkgeworCWlmICghc2F0YV9wbXBfYXR0YWNoZWQoYXApKSB7CiAJCWlmICh1bmxpa2VseShzY3NpZGV2LT5jaGFubmVsIHx8IHNjc2lkZXYtPmx1bikpCiAJCQlyZXR1cm4gTlVMTDsKIAkJZGV2bm8gPSBzY3NpZGV2LT5pZDsKQEAgLTI4MjUsNyArMjg4NCw3IEBACiAJICogVE9ETzogZmluZCBvdXQgaWYgd2UgbmVlZCB0byBkbyBtb3JlIGhlcmUgdG8KIAkgKiAgICAgICBjb3ZlciBzY2F0dGVyL2dhdGhlciBjYXNlLgogCSAqLwotCXFjLT5uYnl0ZXMgPSBzY3NpX2J1ZmZsZW4oc2NtZCk7CisJYXRhX3FjX3NldF9wY19uYnl0ZXMocWMpOwogCiAJLyogcmVxdWVzdCByZXN1bHQgVEYgYW5kIGJlIHF1aWV0IGFib3V0IGRldmljZSBlcnJvciAqLwogCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX1JFU1VMVF9URiB8IEFUQV9RQ0ZMQUdfUVVJRVQ7CkBAIC0zNDMxLDcgKzM0OTAsNyBAQAogCWlmIChsdW4gIT0gU0NBTl9XSUxEX0NBUkQgJiYgbHVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChhcC0+bnJfcG1wX2xpbmtzID09IDApIHsKKwlpZiAoIXNhdGFfcG1wX2F0dGFjaGVkKGFwKSkgewogCQlpZiAoY2hhbm5lbCAhPSBTQ0FOX1dJTERfQ0FSRCAmJiBjaGFubmVsKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWRldm5vID0gaWQ7CkBAIC0zNDQ4LDggKzM1MDcsOCBAQAogCiAJCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKIAkJCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmxpbmstPmVoX2luZm87Ci0JCQllaGktPnByb2JlX21hc2sgfD0gKDEgPDwgYXRhX2xpbmtfbWF4X2RldmljZXMobGluaykpIC0gMTsKLQkJCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCQllaGktPnByb2JlX21hc2sgfD0gQVRBX0FMTF9ERVZJQ0VTOworCQkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQl9CiAJfSBlbHNlIHsKIAkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9IGF0YV9maW5kX2RldihhcCwgZGV2bm8pOwpAQCAtMzQ1Nyw4ICszNTE2LDcgQEAKIAkJaWYgKGRldikgewogCQkJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmZGV2LT5saW5rLT5laF9pbmZvOwogCQkJZWhpLT5wcm9iZV9tYXNrIHw9IDEgPDwgZGV2LT5kZXZubzsKLQkJCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7Ci0JCQllaGktPmZsYWdzIHw9IEFUQV9FSElfUkVTVU1FX0xJTks7CisJCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCX0gZWxzZQogCQkJcmMgPSAtRUlOVkFMOwogCX0KQEAgLTM1NTUsNyArMzYxMyw3IEBACiAgKglAYXA6IFBvcnQgdG8gaW5pdGlhbGl6ZQogICoKICAqCUNhbGxlZCBqdXN0IGFmdGVyIGRhdGEgc3RydWN0dXJlcyBmb3IgZWFjaCBwb3J0IGFyZQotICoJaW5pdGlhbGl6ZWQuICBBbGxvY2F0ZXMgRE1BIHBhZC4KKyAqCWluaXRpYWxpemVkLgogICoKICAqCU1heSBiZSB1c2VkIGFzIHRoZSBwb3J0X3N0YXJ0KCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KICAqCkBAIC0zNTY0LDcgKzM2MjIsNyBAQAogICovCiBpbnQgYXRhX3Nhc19wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0JcmV0dXJuIGF0YV9wYWRfYWxsb2MoYXAsIGFwLT5kZXYpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Nhc19wb3J0X3N0YXJ0KTsKIApAQCAtMzU3Miw4ICszNjMwLDYgQEAKICAqCWF0YV9wb3J0X3N0b3AgLSBVbmRvIGF0YV9zYXNfcG9ydF9zdGFydCgpCiAgKglAYXA6IFBvcnQgdG8gc2h1dCBkb3duCiAgKgotICoJRnJlZXMgdGhlIERNQSBwYWQuCi0gKgogICoJTWF5IGJlIHVzZWQgYXMgdGhlIHBvcnRfc3RvcCgpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCiAgKgogICoJTE9DS0lORzoKQEAgLTM1ODIsNyArMzYzOCw2IEBACiAKIHZvaWQgYXRhX3Nhc19wb3J0X3N0b3Aoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQlhdGFfcGFkX2ZyZWUoYXAsIGFwLT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Nhc19wb3J0X3N0b3ApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggNjBjZDRiMS4uMTU0OTk1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMzUsMTEgKzM1LDM3NyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KIAogI2luY2x1ZGUgImxpYmF0YS5oIgogCitjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhdGFfc2ZmX3BvcnRfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2Jhc2VfcG9ydF9vcHMsCisKKwkucWNfcHJlcAkJPSBhdGFfc2ZmX3FjX3ByZXAsCisJLnFjX2lzc3VlCQk9IGF0YV9zZmZfcWNfaXNzdWUsCisJLnFjX2ZpbGxfcnRmCQk9IGF0YV9zZmZfcWNfZmlsbF9ydGYsCisKKwkuZnJlZXplCQkJPSBhdGFfc2ZmX2ZyZWV6ZSwKKwkudGhhdwkJCT0gYXRhX3NmZl90aGF3LAorCS5wcmVyZXNldAkJPSBhdGFfc2ZmX3ByZXJlc2V0LAorCS5zb2Z0cmVzZXQJCT0gYXRhX3NmZl9zb2Z0cmVzZXQsCisJLmhhcmRyZXNldAkJPSBzYXRhX3NmZl9oYXJkcmVzZXQsCisJLnBvc3RyZXNldAkJPSBhdGFfc2ZmX3Bvc3RyZXNldCwKKwkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfc2ZmX2Vycm9yX2hhbmRsZXIsCisJLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX3NmZl9wb3N0X2ludGVybmFsX2NtZCwKKworCS5zZmZfZGV2X3NlbGVjdAkJPSBhdGFfc2ZmX2Rldl9zZWxlY3QsCisJLnNmZl9jaGVja19zdGF0dXMJPSBhdGFfc2ZmX2NoZWNrX3N0YXR1cywKKwkuc2ZmX3RmX2xvYWQJCT0gYXRhX3NmZl90Zl9sb2FkLAorCS5zZmZfdGZfcmVhZAkJPSBhdGFfc2ZmX3RmX3JlYWQsCisJLnNmZl9leGVjX2NvbW1hbmQJPSBhdGFfc2ZmX2V4ZWNfY29tbWFuZCwKKwkuc2ZmX2RhdGFfeGZlcgkJPSBhdGFfc2ZmX2RhdGFfeGZlciwKKwkuc2ZmX2lycV9vbgkJPSBhdGFfc2ZmX2lycV9vbiwKKwkuc2ZmX2lycV9jbGVhcgkJPSBhdGFfc2ZmX2lycV9jbGVhciwKKworCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKK307CisKK2NvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGF0YV9ibWRtYV9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisKKwkubW9kZV9maWx0ZXIJCT0gYXRhX2JtZG1hX21vZGVfZmlsdGVyLAorCisJLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKKwkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAorCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAorCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKK307CisKIC8qKgotICoJYXRhX2lycV9vbiAtIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIGEgcG9ydC4KKyAqCWF0YV9maWxsX3NnIC0gRmlsbCBQQ0kgSURFIFBSRCB0YWJsZQorICoJQHFjOiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGFza2ZpbGUgdG8gYmUgdHJhbnNmZXJyZWQKKyAqCisgKglGaWxsIFBDSSBJREUgUFJEIChzY2F0dGVyLWdhdGhlcikgdGFibGUgd2l0aCBzZWdtZW50cworICoJYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGRpc2sgY29tbWFuZC4KKyAqCisgKglMT0NLSU5HOgorICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdCBsb2NrKQorICoKKyAqLworc3RhdGljIHZvaWQgYXRhX2ZpbGxfc2coc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IHNpLCBwaTsKKworCXBpID0gMDsKKwlmb3JfZWFjaF9zZyhxYy0+c2csIHNnLCBxYy0+bl9lbGVtLCBzaSkgeworCQl1MzIgYWRkciwgb2Zmc2V0OworCQl1MzIgc2dfbGVuLCBsZW47CisKKwkJLyogZGV0ZXJtaW5lIGlmIHBoeXNpY2FsIERNQSBhZGRyIHNwYW5zIDY0SyBib3VuZGFyeS4KKwkJICogTm90ZSBoL3cgZG9lc24ndCBzdXBwb3J0IDY0LWJpdCwgc28gd2UgdW5jb25kaXRpb25hbGx5CisJCSAqIHRydW5jYXRlIGRtYV9hZGRyX3QgdG8gdTMyLgorCQkgKi8KKwkJYWRkciA9ICh1MzIpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisKKwkJd2hpbGUgKHNnX2xlbikgeworCQkJb2Zmc2V0ID0gYWRkciAmIDB4ZmZmZjsKKwkJCWxlbiA9IHNnX2xlbjsKKwkJCWlmICgob2Zmc2V0ICsgc2dfbGVuKSA+IDB4MTAwMDApCisJCQkJbGVuID0gMHgxMDAwMCAtIG9mZnNldDsKKworCQkJYXAtPnByZFtwaV0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOworCQkJYXAtPnByZFtwaV0uZmxhZ3NfbGVuID0gY3B1X3RvX2xlMzIobGVuICYgMHhmZmZmKTsKKwkJCVZQUklOVEsoIlBSRFsldV0gPSAoMHglWCwgMHglWClcbiIsIHBpLCBhZGRyLCBsZW4pOworCisJCQlwaSsrOworCQkJc2dfbGVuIC09IGxlbjsKKwkJCWFkZHIgKz0gbGVuOworCQl9CisJfQorCisJYXAtPnByZFtwaSAtIDFdLmZsYWdzX2xlbiB8PSBjcHVfdG9fbGUzMihBVEFfUFJEX0VPVCk7Cit9CisKKy8qKgorICoJYXRhX2ZpbGxfc2dfZHVtYiAtIEZpbGwgUENJIElERSBQUkQgdGFibGUKKyAqCUBxYzogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRhc2tmaWxlIHRvIGJlIHRyYW5zZmVycmVkCisgKgorICoJRmlsbCBQQ0kgSURFIFBSRCAoc2NhdHRlci1nYXRoZXIpIHRhYmxlIHdpdGggc2VnbWVudHMKKyAqCWFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBkaXNrIGNvbW1hbmQuIFBlcmZvcm0gdGhlIGZpbGwKKyAqCXNvIHRoYXQgd2UgYXZvaWQgd3JpdGluZyBhbnkgbGVuZ3RoIDY0SyByZWNvcmRzIGZvcgorICoJY29udHJvbGxlcnMgdGhhdCBkb24ndCBmb2xsb3cgdGhlIHNwZWMuCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGF0YV9maWxsX3NnX2R1bWIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IHNpLCBwaTsKKworCXBpID0gMDsKKwlmb3JfZWFjaF9zZyhxYy0+c2csIHNnLCBxYy0+bl9lbGVtLCBzaSkgeworCQl1MzIgYWRkciwgb2Zmc2V0OworCQl1MzIgc2dfbGVuLCBsZW4sIGJsZW47CisKKwkJLyogZGV0ZXJtaW5lIGlmIHBoeXNpY2FsIERNQSBhZGRyIHNwYW5zIDY0SyBib3VuZGFyeS4KKwkJICogTm90ZSBoL3cgZG9lc24ndCBzdXBwb3J0IDY0LWJpdCwgc28gd2UgdW5jb25kaXRpb25hbGx5CisJCSAqIHRydW5jYXRlIGRtYV9hZGRyX3QgdG8gdTMyLgorCQkgKi8KKwkJYWRkciA9ICh1MzIpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisKKwkJd2hpbGUgKHNnX2xlbikgeworCQkJb2Zmc2V0ID0gYWRkciAmIDB4ZmZmZjsKKwkJCWxlbiA9IHNnX2xlbjsKKwkJCWlmICgob2Zmc2V0ICsgc2dfbGVuKSA+IDB4MTAwMDApCisJCQkJbGVuID0gMHgxMDAwMCAtIG9mZnNldDsKKworCQkJYmxlbiA9IGxlbiAmIDB4ZmZmZjsKKwkJCWFwLT5wcmRbcGldLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwkJCWlmIChibGVuID09IDApIHsKKwkJCSAgIC8qIFNvbWUgUEFUQSBjaGlwc2V0cyBsaWtlIHRoZSBDUzU1MzAgY2FuJ3QKKwkJCSAgICAgIGNvcGUgd2l0aCAweDAwMDAgbWVhbmluZyA2NEsgYXMgdGhlIHNwZWMgc2F5cyAqLworCQkJCWFwLT5wcmRbcGldLmZsYWdzX2xlbiA9IGNwdV90b19sZTMyKDB4ODAwMCk7CisJCQkJYmxlbiA9IDB4ODAwMDsKKwkJCQlhcC0+cHJkWysrcGldLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyICsgMHg4MDAwKTsKKwkJCX0KKwkJCWFwLT5wcmRbcGldLmZsYWdzX2xlbiA9IGNwdV90b19sZTMyKGJsZW4pOworCQkJVlBSSU5USygiUFJEWyV1XSA9ICgweCVYLCAweCVYKVxuIiwgcGksIGFkZHIsIGxlbik7CisKKwkJCXBpKys7CisJCQlzZ19sZW4gLT0gbGVuOworCQkJYWRkciArPSBsZW47CisJCX0KKwl9CisKKwlhcC0+cHJkW3BpIC0gMV0uZmxhZ3NfbGVuIHw9IGNwdV90b19sZTMyKEFUQV9QUkRfRU9UKTsKK30KKworLyoqCisgKglhdGFfc2ZmX3FjX3ByZXAgLSBQcmVwYXJlIHRhc2tmaWxlIGZvciBzdWJtaXNzaW9uCisgKglAcWM6IE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0YXNrZmlsZSB0byBiZSBwcmVwYXJlZAorICoKKyAqCVByZXBhcmUgQVRBIHRhc2tmaWxlIGZvciBzdWJtaXNzaW9uLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCisgKi8KK3ZvaWQgYXRhX3NmZl9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFNQVApKQorCQlyZXR1cm47CisKKwlhdGFfZmlsbF9zZyhxYyk7Cit9CisKKy8qKgorICoJYXRhX3NmZl9kdW1iX3FjX3ByZXAgLSBQcmVwYXJlIHRhc2tmaWxlIGZvciBzdWJtaXNzaW9uCisgKglAcWM6IE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0YXNrZmlsZSB0byBiZSBwcmVwYXJlZAorICoKKyAqCVByZXBhcmUgQVRBIHRhc2tmaWxlIGZvciBzdWJtaXNzaW9uLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCisgKi8KK3ZvaWQgYXRhX3NmZl9kdW1iX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpZiAoIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkpCisJCXJldHVybjsKKworCWF0YV9maWxsX3NnX2R1bWIocWMpOworfQorCisvKioKKyAqCWF0YV9zZmZfY2hlY2tfc3RhdHVzIC0gUmVhZCBkZXZpY2Ugc3RhdHVzIHJlZyAmIGNsZWFyIGludGVycnVwdAorICoJQGFwOiBwb3J0IHdoZXJlIHRoZSBkZXZpY2UgaXMKKyAqCisgKglSZWFkcyBBVEEgdGFza2ZpbGUgc3RhdHVzIHJlZ2lzdGVyIGZvciBjdXJyZW50bHktc2VsZWN0ZWQgZGV2aWNlCisgKglhbmQgcmV0dXJuIGl0cyB2YWx1ZS4gVGhpcyBhbHNvIGNsZWFycyBwZW5kaW5nIGludGVycnVwdHMKKyAqICAgICAgZnJvbSB0aGlzIGRldmljZQorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3U4IGF0YV9zZmZfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuIGlvcmVhZDgoYXAtPmlvYWRkci5zdGF0dXNfYWRkcik7Cit9CisKKy8qKgorICoJYXRhX3NmZl9hbHRzdGF0dXMgLSBSZWFkIGRldmljZSBhbHRlcm5hdGUgc3RhdHVzIHJlZworICoJQGFwOiBwb3J0IHdoZXJlIHRoZSBkZXZpY2UgaXMKKyAqCisgKglSZWFkcyBBVEEgdGFza2ZpbGUgYWx0ZXJuYXRlIHN0YXR1cyByZWdpc3RlciBmb3IKKyAqCWN1cnJlbnRseS1zZWxlY3RlZCBkZXZpY2UgYW5kIHJldHVybiBpdHMgdmFsdWUuCisgKgorICoJTm90ZTogbWF5IE5PVCBiZSB1c2VkIGFzIHRoZSBjaGVja19hbHRzdGF0dXMoKSBlbnRyeSBpbgorICoJYXRhX3BvcnRfb3BlcmF0aW9ucy4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCit1OCBhdGFfc2ZmX2FsdHN0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWlmIChhcC0+b3BzLT5zZmZfY2hlY2tfYWx0c3RhdHVzKQorCQlyZXR1cm4gYXAtPm9wcy0+c2ZmX2NoZWNrX2FsdHN0YXR1cyhhcCk7CisKKwlyZXR1cm4gaW9yZWFkOChhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyKTsKK30KKworLyoqCisgKglhdGFfc2ZmX2J1c3lfc2xlZXAgLSBzbGVlcCB1bnRpbCBCU1kgY2xlYXJzLCBvciB0aW1lb3V0CisgKglAYXA6IHBvcnQgY29udGFpbmluZyBzdGF0dXMgcmVnaXN0ZXIgdG8gYmUgcG9sbGVkCisgKglAdG1vdXRfcGF0OiBpbXBhdGllbmNlIHRpbWVvdXQKKyAqCUB0bW91dDogb3ZlcmFsbCB0aW1lb3V0CisgKgorICoJU2xlZXAgdW50aWwgQVRBIFN0YXR1cyByZWdpc3RlciBiaXQgQlNZIGNsZWFycywKKyAqCW9yIGEgdGltZW91dCBvY2N1cnMuCisgKgorICoJTE9DS0lORzoKKyAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKS4KKyAqCisgKglSRVRVUk5TOgorICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLgorICovCitpbnQgYXRhX3NmZl9idXN5X3NsZWVwKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHRtb3V0X3BhdCwgdW5zaWduZWQgbG9uZyB0bW91dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVyX3N0YXJ0LCB0aW1lb3V0OworCXU4IHN0YXR1czsKKworCXN0YXR1cyA9IGF0YV9zZmZfYnVzeV93YWl0KGFwLCBBVEFfQlVTWSwgMzAwKTsKKwl0aW1lcl9zdGFydCA9IGppZmZpZXM7CisJdGltZW91dCA9IHRpbWVyX3N0YXJ0ICsgdG1vdXRfcGF0OworCXdoaWxlIChzdGF0dXMgIT0gMHhmZiAmJiAoc3RhdHVzICYgQVRBX0JVU1kpICYmCisJICAgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCW1zbGVlcCg1MCk7CisJCXN0YXR1cyA9IGF0YV9zZmZfYnVzeV93YWl0KGFwLCBBVEFfQlVTWSwgMyk7CisJfQorCisJaWYgKHN0YXR1cyAhPSAweGZmICYmIChzdGF0dXMgJiBBVEFfQlVTWSkpCisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLAorCQkJCSJwb3J0IGlzIHNsb3cgdG8gcmVzcG9uZCwgcGxlYXNlIGJlIHBhdGllbnQgIgorCQkJCSIoU3RhdHVzIDB4JXgpXG4iLCBzdGF0dXMpOworCisJdGltZW91dCA9IHRpbWVyX3N0YXJ0ICsgdG1vdXQ7CisJd2hpbGUgKHN0YXR1cyAhPSAweGZmICYmIChzdGF0dXMgJiBBVEFfQlVTWSkgJiYKKwkgICAgICAgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJbXNsZWVwKDUwKTsKKwkJc3RhdHVzID0gYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisJfQorCisJaWYgKHN0YXR1cyA9PSAweGZmKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkgeworCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAicG9ydCBmYWlsZWQgdG8gcmVzcG9uZCAiCisJCQkJIiglbHUgc2VjcywgU3RhdHVzIDB4JXgpXG4iLAorCQkJCXRtb3V0IC8gSFosIHN0YXR1cyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRhX3NmZl9jaGVja19yZWFkeShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspCit7CisJdTggc3RhdHVzID0gbGluay0+YXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhsaW5rLT5hcCk7CisKKwlpZiAoIShzdGF0dXMgJiBBVEFfQlVTWSkpCisJCXJldHVybiAxOworCWlmIChzdGF0dXMgPT0gMHhmZikKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJYXRhX3NmZl93YWl0X3JlYWR5IC0gc2xlZXAgdW50aWwgQlNZIGNsZWFycywgb3IgdGltZW91dAorICoJQGxpbms6IFNGRiBsaW5rIHRvIHdhaXQgcmVhZHkgc3RhdHVzIGZvcgorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCisgKgorICoJU2xlZXAgdW50aWwgQVRBIFN0YXR1cyByZWdpc3RlciBiaXQgQlNZIGNsZWFycywgb3IgdGltZW91dAorICoJb2NjdXJzLgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IGF0YV9zZmZfd2FpdF9yZWFkeShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJcmV0dXJuIGF0YV93YWl0X3JlYWR5KGxpbmssIGRlYWRsaW5lLCBhdGFfc2ZmX2NoZWNrX3JlYWR5KTsKK30KKworLyoqCisgKglhdGFfc2ZmX2Rldl9zZWxlY3QgLSBTZWxlY3QgZGV2aWNlIDAvMSBvbiBBVEEgYnVzCisgKglAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKKyAqCUBkZXZpY2U6IEFUQSBkZXZpY2UgKG51bWJlcmVkIGZyb20gemVybykgdG8gc2VsZWN0CisgKgorICoJVXNlIHRoZSBtZXRob2QgZGVmaW5lZCBpbiB0aGUgQVRBIHNwZWNpZmljYXRpb24gdG8KKyAqCW1ha2UgZWl0aGVyIGRldmljZSAwLCBvciBkZXZpY2UgMSwgYWN0aXZlIG9uIHRoZQorICoJQVRBIGNoYW5uZWwuICBXb3JrcyB3aXRoIGJvdGggUElPIGFuZCBNTUlPLgorICoKKyAqCU1heSBiZSB1c2VkIGFzIHRoZSBkZXZfc2VsZWN0KCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KKyAqCisgKglMT0NLSU5HOgorICoJY2FsbGVyLgorICovCit2b2lkIGF0YV9zZmZfZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlKQoreworCXU4IHRtcDsKKworCWlmIChkZXZpY2UgPT0gMCkKKwkJdG1wID0gQVRBX0RFVklDRV9PQlM7CisJZWxzZQorCQl0bXAgPSBBVEFfREVWSUNFX09CUyB8IEFUQV9ERVYxOworCisJaW93cml0ZTgodG1wLCBhcC0+aW9hZGRyLmRldmljZV9hZGRyKTsKKwlhdGFfc2ZmX3BhdXNlKGFwKTsJLyogbmVlZGVkOyBhbHNvIGZsdXNoZXMsIGZvciBtbWlvICovCit9CisKKy8qKgorICoJYXRhX2Rldl9zZWxlY3QgLSBTZWxlY3QgZGV2aWNlIDAvMSBvbiBBVEEgYnVzCisgKglAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKKyAqCUBkZXZpY2U6IEFUQSBkZXZpY2UgKG51bWJlcmVkIGZyb20gemVybykgdG8gc2VsZWN0CisgKglAd2FpdDogbm9uLXplcm8gdG8gd2FpdCBmb3IgU3RhdHVzIHJlZ2lzdGVyIEJTWSBiaXQgdG8gY2xlYXIKKyAqCUBjYW5fc2xlZXA6IG5vbi16ZXJvIGlmIGNvbnRleHQgYWxsb3dzIHNsZWVwaW5nCisgKgorICoJVXNlIHRoZSBtZXRob2QgZGVmaW5lZCBpbiB0aGUgQVRBIHNwZWNpZmljYXRpb24gdG8KKyAqCW1ha2UgZWl0aGVyIGRldmljZSAwLCBvciBkZXZpY2UgMSwgYWN0aXZlIG9uIHRoZQorICoJQVRBIGNoYW5uZWwuCisgKgorICoJVGhpcyBpcyBhIGhpZ2gtbGV2ZWwgdmVyc2lvbiBvZiBhdGFfc2ZmX2Rldl9zZWxlY3QoKSwgd2hpY2gKKyAqCWFkZGl0aW9uYWxseSBwcm92aWRlcyB0aGUgc2VydmljZXMgb2YgaW5zZXJ0aW5nIHRoZSBwcm9wZXIKKyAqCXBhdXNlcyBhbmQgc3RhdHVzIHBvbGxpbmcsIHdoZXJlIG5lZWRlZC4KKyAqCisgKglMT0NLSU5HOgorICoJY2FsbGVyLgorICovCit2b2lkIGF0YV9kZXZfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UsCisJCQkgICB1bnNpZ25lZCBpbnQgd2FpdCwgdW5zaWduZWQgaW50IGNhbl9zbGVlcCkKK3sKKwlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLCAiYXRhX2Rldl9zZWxlY3Q6IEVOVEVSLCAiCisJCQkJImRldmljZSAldSwgd2FpdCAldVxuIiwgZGV2aWNlLCB3YWl0KTsKKworCWlmICh3YWl0KQorCQlhdGFfd2FpdF9pZGxlKGFwKTsKKworCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCBkZXZpY2UpOworCisJaWYgKHdhaXQpIHsKKwkJaWYgKGNhbl9zbGVlcCAmJiBhcC0+bGluay5kZXZpY2VbZGV2aWNlXS5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKQorCQkJbXNsZWVwKDE1MCk7CisJCWF0YV93YWl0X2lkbGUoYXApOworCX0KK30KKworLyoqCisgKglhdGFfc2ZmX2lycV9vbiAtIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIGEgcG9ydC4KICAqCUBhcDogUG9ydCBvbiB3aGljaCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgogICoKICAqCUVuYWJsZSBpbnRlcnJ1cHRzIG9uIGEgbGVnYWN5IElERSBkZXZpY2UgdXNpbmcgTU1JTyBvciBQSU8sCkBAIC00OCw3ICs0MTQsNyBAQAogICoJTE9DS0lORzoKICAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KICAqLwotdTggYXRhX2lycV9vbihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQordTggYXRhX3NmZl9pcnFfb24oc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwogCXU4IHRtcDsKQEAgLTU2LDE2ICs0MjIsMzggQEAKIAlhcC0+Y3RsICY9IH5BVEFfTklFTjsKIAlhcC0+bGFzdF9jdGwgPSBhcC0+Y3RsOwogCi0JaW93cml0ZTgoYXAtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7CisJaWYgKGlvYWRkci0+Y3RsX2FkZHIpCisJCWlvd3JpdGU4KGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOwogCXRtcCA9IGF0YV93YWl0X2lkbGUoYXApOwogCi0JYXAtPm9wcy0+aXJxX2NsZWFyKGFwKTsKKwlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKIAogCXJldHVybiB0bXA7CiB9CiAKIC8qKgotICoJYXRhX3RmX2xvYWQgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBob3N0IGNvbnRyb2xsZXIKKyAqCWF0YV9zZmZfaXJxX2NsZWFyIC0gQ2xlYXIgUENJIElERSBCTURNQSBpbnRlcnJ1cHQuCisgKglAYXA6IFBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgorICoKKyAqCUNsZWFyIGludGVycnVwdCBhbmQgZXJyb3IgZmxhZ3MgaW4gRE1BIHN0YXR1cyByZWdpc3Rlci4KKyAqCisgKglNYXkgYmUgdXNlZCBhcyB0aGUgaXJxX2NsZWFyKCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KKyAqCisgKglMT0NLSU5HOgorICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdCBsb2NrKQorICovCit2b2lkIGF0YV9zZmZfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyOworCisJaWYgKCFtbWlvKQorCQlyZXR1cm47CisKKwlpb3dyaXRlOChpb3JlYWQ4KG1taW8gKyBBVEFfRE1BX1NUQVRVUyksIG1taW8gKyBBVEFfRE1BX1NUQVRVUyk7Cit9CisKKy8qKgorICoJYXRhX3NmZl90Zl9sb2FkIC0gc2VuZCB0YXNrZmlsZSByZWdpc3RlcnMgdG8gaG9zdCBjb250cm9sbGVyCiAgKglAYXA6IFBvcnQgdG8gd2hpY2ggb3V0cHV0IGlzIHNlbnQKICAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldAogICoKQEAgLTc0LDE5ICs0NjIsMjAgQEAKICAqCUxPQ0tJTkc6CiAgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLQotdm9pZCBhdGFfdGZfbG9hZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3ZvaWQgYXRhX3NmZl90Zl9sb2FkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQogewogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CiAJdW5zaWduZWQgaW50IGlzX2FkZHIgPSB0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfSVNBRERSOwogCiAJaWYgKHRmLT5jdGwgIT0gYXAtPmxhc3RfY3RsKSB7Ci0JCWlvd3JpdGU4KHRmLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCQlpZiAoaW9hZGRyLT5jdGxfYWRkcikKKwkJCWlvd3JpdGU4KHRmLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOwogCQlhcC0+bGFzdF9jdGwgPSB0Zi0+Y3RsOwogCQlhdGFfd2FpdF9pZGxlKGFwKTsKIAl9CiAKIAlpZiAoaXNfYWRkciAmJiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0xCQTQ4KSkgeworCQlXQVJOX09OKCFpb2FkZHItPmN0bF9hZGRyKTsKIAkJaW93cml0ZTgodGYtPmhvYl9mZWF0dXJlLCBpb2FkZHItPmZlYXR1cmVfYWRkcik7CiAJCWlvd3JpdGU4KHRmLT5ob2JfbnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7CiAJCWlvd3JpdGU4KHRmLT5ob2JfbGJhbCwgaW9hZGRyLT5sYmFsX2FkZHIpOwpAQCAtMTIzLDI2ICs1MTIsNyBAQAogfQogCiAvKioKLSAqCWF0YV9leGVjX2NvbW1hbmQgLSBpc3N1ZSBBVEEgY29tbWFuZCB0byBob3N0IGNvbnRyb2xsZXIKLSAqCUBhcDogcG9ydCB0byB3aGljaCBjb21tYW5kIGlzIGJlaW5nIGlzc3VlZAotICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0Ci0gKgotICoJSXNzdWVzIEFUQSBjb21tYW5kLCB3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCBpbnRlcnJ1cHQKLSAqCWhhbmRsZXIgLyBvdGhlciB0aHJlYWRzLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCi0gKi8KLXZvaWQgYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKLXsKLQlEUFJJTlRLKCJhdGEldTogY21kIDB4JVhcbiIsIGFwLT5wcmludF9pZCwgdGYtPmNvbW1hbmQpOwotCi0JaW93cml0ZTgodGYtPmNvbW1hbmQsIGFwLT5pb2FkZHIuY29tbWFuZF9hZGRyKTsKLQlhdGFfcGF1c2UoYXApOwotfQotCi0vKioKLSAqCWF0YV90Zl9yZWFkIC0gaW5wdXQgZGV2aWNlJ3MgQVRBIHRhc2tmaWxlIHNoYWRvdyByZWdpc3RlcnMKKyAqCWF0YV9zZmZfdGZfcmVhZCAtIGlucHV0IGRldmljZSdzIEFUQSB0YXNrZmlsZSBzaGFkb3cgcmVnaXN0ZXJzCiAgKglAYXA6IFBvcnQgZnJvbSB3aGljaCBpbnB1dCBpcyByZWFkCiAgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgZm9yIHN0b3JpbmcgaW5wdXQKICAqCkBAIC0xNTQsMTEgKzUyNCwxMSBAQAogICoJTE9DS0lORzoKICAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KICAqLwotdm9pZCBhdGFfdGZfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3ZvaWQgYXRhX3NmZl90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQogewogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CiAKLQl0Zi0+Y29tbWFuZCA9IGF0YV9jaGVja19zdGF0dXMoYXApOworCXRmLT5jb21tYW5kID0gYXRhX3NmZl9jaGVja19zdGF0dXMoYXApOwogCXRmLT5mZWF0dXJlID0gaW9yZWFkOChpb2FkZHItPmVycm9yX2FkZHIpOwogCXRmLT5uc2VjdCA9IGlvcmVhZDgoaW9hZGRyLT5uc2VjdF9hZGRyKTsKIAl0Zi0+bGJhbCA9IGlvcmVhZDgoaW9hZGRyLT5sYmFsX2FkZHIpOwpAQCAtMTY3LDUyICs1MzcsMTU5MyBAQAogCXRmLT5kZXZpY2UgPSBpb3JlYWQ4KGlvYWRkci0+ZGV2aWNlX2FkZHIpOwogCiAJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkgewotCQlpb3dyaXRlOCh0Zi0+Y3RsIHwgQVRBX0hPQiwgaW9hZGRyLT5jdGxfYWRkcik7Ci0JCXRmLT5ob2JfZmVhdHVyZSA9IGlvcmVhZDgoaW9hZGRyLT5lcnJvcl9hZGRyKTsKLQkJdGYtPmhvYl9uc2VjdCA9IGlvcmVhZDgoaW9hZGRyLT5uc2VjdF9hZGRyKTsKLQkJdGYtPmhvYl9sYmFsID0gaW9yZWFkOChpb2FkZHItPmxiYWxfYWRkcik7Ci0JCXRmLT5ob2JfbGJhbSA9IGlvcmVhZDgoaW9hZGRyLT5sYmFtX2FkZHIpOwotCQl0Zi0+aG9iX2xiYWggPSBpb3JlYWQ4KGlvYWRkci0+bGJhaF9hZGRyKTsKLQkJaW93cml0ZTgodGYtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7Ci0JCWFwLT5sYXN0X2N0bCA9IHRmLT5jdGw7CisJCWlmIChsaWtlbHkoaW9hZGRyLT5jdGxfYWRkcikpIHsKKwkJCWlvd3JpdGU4KHRmLT5jdGwgfCBBVEFfSE9CLCBpb2FkZHItPmN0bF9hZGRyKTsKKwkJCXRmLT5ob2JfZmVhdHVyZSA9IGlvcmVhZDgoaW9hZGRyLT5lcnJvcl9hZGRyKTsKKwkJCXRmLT5ob2JfbnNlY3QgPSBpb3JlYWQ4KGlvYWRkci0+bnNlY3RfYWRkcik7CisJCQl0Zi0+aG9iX2xiYWwgPSBpb3JlYWQ4KGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhbSA9IGlvcmVhZDgoaW9hZGRyLT5sYmFtX2FkZHIpOworCQkJdGYtPmhvYl9sYmFoID0gaW9yZWFkOChpb2FkZHItPmxiYWhfYWRkcik7CisJCQlpb3dyaXRlOCh0Zi0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKwkJCWFwLT5sYXN0X2N0bCA9IHRmLT5jdGw7CisJCX0gZWxzZQorCQkJV0FSTl9PTigxKTsKIAl9CiB9CiAKIC8qKgotICoJYXRhX2NoZWNrX3N0YXR1cyAtIFJlYWQgZGV2aWNlIHN0YXR1cyByZWcgJiBjbGVhciBpbnRlcnJ1cHQKLSAqCUBhcDogcG9ydCB3aGVyZSB0aGUgZGV2aWNlIGlzCisgKglhdGFfc2ZmX2V4ZWNfY29tbWFuZCAtIGlzc3VlIEFUQSBjb21tYW5kIHRvIGhvc3QgY29udHJvbGxlcgorICoJQGFwOiBwb3J0IHRvIHdoaWNoIGNvbW1hbmQgaXMgYmVpbmcgaXNzdWVkCisgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKICAqCi0gKglSZWFkcyBBVEEgdGFza2ZpbGUgc3RhdHVzIHJlZ2lzdGVyIGZvciBjdXJyZW50bHktc2VsZWN0ZWQgZGV2aWNlCi0gKglhbmQgcmV0dXJuIGl0cyB2YWx1ZS4gVGhpcyBhbHNvIGNsZWFycyBwZW5kaW5nIGludGVycnVwdHMKLSAqICAgICAgZnJvbSB0aGlzIGRldmljZQorICoJSXNzdWVzIEFUQSBjb21tYW5kLCB3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCBpbnRlcnJ1cHQKKyAqCWhhbmRsZXIgLyBvdGhlciB0aHJlYWRzLgogICoKICAqCUxPQ0tJTkc6Ci0gKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCiAgKi8KLXU4IGF0YV9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3ZvaWQgYXRhX3NmZl9leGVjX2NvbW1hbmQoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCiB7Ci0JcmV0dXJuIGlvcmVhZDgoYXAtPmlvYWRkci5zdGF0dXNfYWRkcik7CisJRFBSSU5USygiYXRhJXU6IGNtZCAweCVYXG4iLCBhcC0+cHJpbnRfaWQsIHRmLT5jb21tYW5kKTsKKworCWlvd3JpdGU4KHRmLT5jb21tYW5kLCBhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcik7CisJYXRhX3NmZl9wYXVzZShhcCk7CiB9CiAKIC8qKgotICoJYXRhX2FsdHN0YXR1cyAtIFJlYWQgZGV2aWNlIGFsdGVybmF0ZSBzdGF0dXMgcmVnCi0gKglAYXA6IHBvcnQgd2hlcmUgdGhlIGRldmljZSBpcworICoJYXRhX3RmX3RvX2hvc3QgLSBpc3N1ZSBBVEEgdGFza2ZpbGUgdG8gaG9zdCBjb250cm9sbGVyCisgKglAYXA6IHBvcnQgdG8gd2hpY2ggY29tbWFuZCBpcyBiZWluZyBpc3N1ZWQKKyAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldAogICoKLSAqCVJlYWRzIEFUQSB0YXNrZmlsZSBhbHRlcm5hdGUgc3RhdHVzIHJlZ2lzdGVyIGZvcgotICoJY3VycmVudGx5LXNlbGVjdGVkIGRldmljZSBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KKyAqCUlzc3VlcyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0IHRvIEFUQSBob3N0IGNvbnRyb2xsZXIsCisgKgl3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQKKyAqCW90aGVyIHRocmVhZHMuCiAgKgotICoJTm90ZTogbWF5IE5PVCBiZSB1c2VkIGFzIHRoZSBjaGVja19hbHRzdGF0dXMoKSBlbnRyeSBpbgotICoJYXRhX3BvcnRfb3BlcmF0aW9ucy4KKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFfdGZfdG9faG9zdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCSAgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJYXAtPm9wcy0+c2ZmX3RmX2xvYWQoYXAsIHRmKTsKKwlhcC0+b3BzLT5zZmZfZXhlY19jb21tYW5kKGFwLCB0Zik7Cit9CisKKy8qKgorICoJYXRhX3NmZl9kYXRhX3hmZXIgLSBUcmFuc2ZlciBkYXRhIGJ5IFBJTworICoJQGRldjogZGV2aWNlIHRvIHRhcmdldAorICoJQGJ1ZjogZGF0YSBidWZmZXIKKyAqCUBidWZsZW46IGJ1ZmZlciBsZW5ndGgKKyAqCUBydzogcmVhZC93cml0ZQorICoKKyAqCVRyYW5zZmVyIGRhdGEgZnJvbS90byB0aGUgZGV2aWNlIGRhdGEgcmVnaXN0ZXIgYnkgUElPLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKgorICoJUkVUVVJOUzoKKyAqCUJ5dGVzIGNvbnN1bWVkLgorICovCit1bnNpZ25lZCBpbnQgYXRhX3NmZl9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBydykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5saW5rLT5hcDsKKwl2b2lkIF9faW9tZW0gKmRhdGFfYWRkciA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOworCXVuc2lnbmVkIGludCB3b3JkcyA9IGJ1ZmxlbiA+PiAxOworCisJLyogVHJhbnNmZXIgbXVsdGlwbGUgb2YgMiBieXRlcyAqLworCWlmIChydyA9PSBSRUFEKQorCQlpb3JlYWQxNl9yZXAoZGF0YV9hZGRyLCBidWYsIHdvcmRzKTsKKwllbHNlCisJCWlvd3JpdGUxNl9yZXAoZGF0YV9hZGRyLCBidWYsIHdvcmRzKTsKKworCS8qIFRyYW5zZmVyIHRyYWlsaW5nIDEgYnl0ZSwgaWYgYW55LiAqLworCWlmICh1bmxpa2VseShidWZsZW4gJiAweDAxKSkgeworCQlfX2xlMTYgYWxpZ25fYnVmWzFdID0geyAwIH07CisJCXVuc2lnbmVkIGNoYXIgKnRyYWlsaW5nX2J1ZiA9IGJ1ZiArIGJ1ZmxlbiAtIDE7CisKKwkJaWYgKHJ3ID09IFJFQUQpIHsKKwkJCWFsaWduX2J1ZlswXSA9IGNwdV90b19sZTE2KGlvcmVhZDE2KGRhdGFfYWRkcikpOworCQkJbWVtY3B5KHRyYWlsaW5nX2J1ZiwgYWxpZ25fYnVmLCAxKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShhbGlnbl9idWYsIHRyYWlsaW5nX2J1ZiwgMSk7CisJCQlpb3dyaXRlMTYobGUxNl90b19jcHUoYWxpZ25fYnVmWzBdKSwgZGF0YV9hZGRyKTsKKwkJfQorCQl3b3JkcysrOworCX0KKworCXJldHVybiB3b3JkcyA8PCAxOworfQorCisvKioKKyAqCWF0YV9zZmZfZGF0YV94ZmVyX25vaXJxIC0gVHJhbnNmZXIgZGF0YSBieSBQSU8KKyAqCUBkZXY6IGRldmljZSB0byB0YXJnZXQKKyAqCUBidWY6IGRhdGEgYnVmZmVyCisgKglAYnVmbGVuOiBidWZmZXIgbGVuZ3RoCisgKglAcnc6IHJlYWQvd3JpdGUKKyAqCisgKglUcmFuc2ZlciBkYXRhIGZyb20vdG8gdGhlIGRldmljZSBkYXRhIHJlZ2lzdGVyIGJ5IFBJTy4gRG8gdGhlCisgKgl0cmFuc2ZlciB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqCisgKglSRVRVUk5TOgorICoJQnl0ZXMgY29uc3VtZWQuCisgKi8KK3Vuc2lnbmVkIGludCBhdGFfc2ZmX2RhdGFfeGZlcl9ub2lycShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgYnVmbGVuLCBpbnQgcncpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY29uc3VtZWQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY29uc3VtZWQgPSBhdGFfc2ZmX2RhdGFfeGZlcihkZXYsIGJ1ZiwgYnVmbGVuLCBydyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIGNvbnN1bWVkOworfQorCisvKioKKyAqCWF0YV9waW9fc2VjdG9yIC0gVHJhbnNmZXIgYSBzZWN0b3Igb2YgZGF0YS4KKyAqCUBxYzogQ29tbWFuZCBvbiBnb2luZworICoKKyAqCVRyYW5zZmVyIHFjLT5zZWN0X3NpemUgYnl0ZXMgb2YgZGF0YSBmcm9tL3RvIHRoZSBBVEEgZGV2aWNlLgogICoKICAqCUxPQ0tJTkc6CiAgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCiAgKi8KLXU4IGF0YV9hbHRzdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyB2b2lkIGF0YV9waW9fc2VjdG9yKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0JaWYgKGFwLT5vcHMtPmNoZWNrX2FsdHN0YXR1cykKLQkJcmV0dXJuIGFwLT5vcHMtPmNoZWNrX2FsdHN0YXR1cyhhcCk7CisJaW50IGRvX3dyaXRlID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAotCXJldHVybiBpb3JlYWQ4KGFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIpOworCWlmIChxYy0+Y3VyYnl0ZXMgPT0gcWMtPm5ieXRlcyAtIHFjLT5zZWN0X3NpemUpCisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9MQVNUOworCisJcGFnZSA9IHNnX3BhZ2UocWMtPmN1cnNnKTsKKwlvZmZzZXQgPSBxYy0+Y3Vyc2ctPm9mZnNldCArIHFjLT5jdXJzZ19vZnM7CisKKwkvKiBnZXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQgb2Zmc2V0ICovCisJcGFnZSA9IG50aF9wYWdlKHBhZ2UsIChvZmZzZXQgPj4gUEFHRV9TSElGVCkpOworCW9mZnNldCAlPSBQQUdFX1NJWkU7CisKKwlEUFJJTlRLKCJkYXRhICVzXG4iLCBxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUgPyAid3JpdGUiIDogInJlYWQiKTsKKworCWlmIChQYWdlSGlnaE1lbShwYWdlKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCS8qIEZJWE1FOiB1c2UgYSBib3VuY2UgYnVmZmVyICovCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJYnVmID0ga21hcF9hdG9taWMocGFnZSwgS01fSVJRMCk7CisKKwkJLyogZG8gdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyICovCisJCWFwLT5vcHMtPnNmZl9kYXRhX3hmZXIocWMtPmRldiwgYnVmICsgb2Zmc2V0LCBxYy0+c2VjdF9zaXplLAorCQkJCSAgICAgICBkb193cml0ZSk7CisKKwkJa3VubWFwX2F0b21pYyhidWYsIEtNX0lSUTApOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfSBlbHNlIHsKKwkJYnVmID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQlhcC0+b3BzLT5zZmZfZGF0YV94ZmVyKHFjLT5kZXYsIGJ1ZiArIG9mZnNldCwgcWMtPnNlY3Rfc2l6ZSwKKwkJCQkgICAgICAgZG9fd3JpdGUpOworCX0KKworCXFjLT5jdXJieXRlcyArPSBxYy0+c2VjdF9zaXplOworCXFjLT5jdXJzZ19vZnMgKz0gcWMtPnNlY3Rfc2l6ZTsKKworCWlmIChxYy0+Y3Vyc2dfb2ZzID09IHFjLT5jdXJzZy0+bGVuZ3RoKSB7CisJCXFjLT5jdXJzZyA9IHNnX25leHQocWMtPmN1cnNnKTsKKwkJcWMtPmN1cnNnX29mcyA9IDA7CisJfQorfQorCisvKioKKyAqCWF0YV9waW9fc2VjdG9ycyAtIFRyYW5zZmVyIG9uZSBvciBtYW55IHNlY3RvcnMuCisgKglAcWM6IENvbW1hbmQgb24gZ29pbmcKKyAqCisgKglUcmFuc2ZlciBvbmUgb3IgbWFueSBzZWN0b3JzIG9mIGRhdGEgZnJvbS90byB0aGUKKyAqCUFUQSBkZXZpY2UgZm9yIHRoZSBEUlEgcmVxdWVzdC4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBhdGFfcGlvX3NlY3RvcnMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpZiAoaXNfbXVsdGlfdGFza2ZpbGUoJnFjLT50ZikpIHsKKwkJLyogUkVBRC9XUklURSBNVUxUSVBMRSAqLworCQl1bnNpZ25lZCBpbnQgbnNlY3Q7CisKKwkJV0FSTl9PTihxYy0+ZGV2LT5tdWx0aV9jb3VudCA9PSAwKTsKKworCQluc2VjdCA9IG1pbigocWMtPm5ieXRlcyAtIHFjLT5jdXJieXRlcykgLyBxYy0+c2VjdF9zaXplLAorCQkJICAgIHFjLT5kZXYtPm11bHRpX2NvdW50KTsKKwkJd2hpbGUgKG5zZWN0LS0pCisJCQlhdGFfcGlvX3NlY3RvcihxYyk7CisJfSBlbHNlCisJCWF0YV9waW9fc2VjdG9yKHFjKTsKKworCWF0YV9zZmZfYWx0c3RhdHVzKHFjLT5hcCk7IC8qIGZsdXNoICovCit9CisKKy8qKgorICoJYXRhcGlfc2VuZF9jZGIgLSBXcml0ZSBDREIgYnl0ZXMgdG8gaGFyZHdhcmUKKyAqCUBhcDogUG9ydCB0byB3aGljaCBBVEFQSSBkZXZpY2UgaXMgYXR0YWNoZWQuCisgKglAcWM6IFRhc2tmaWxlIGN1cnJlbnRseSBhY3RpdmUKKyAqCisgKglXaGVuIGRldmljZSBoYXMgaW5kaWNhdGVkIGl0cyByZWFkaW5lc3MgdG8gYWNjZXB0CisgKglhIENEQiwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICBTZW5kIHRoZSBDREIuCisgKgorICoJTE9DS0lORzoKKyAqCWNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgYXRhcGlfc2VuZF9jZGIoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwkvKiBzZW5kIFNDU0kgY2RiICovCisJRFBSSU5USygic2VuZCBjZGJcbiIpOworCVdBUk5fT04ocWMtPmRldi0+Y2RiX2xlbiA8IDEyKTsKKworCWFwLT5vcHMtPnNmZl9kYXRhX3hmZXIocWMtPmRldiwgcWMtPmNkYiwgcWMtPmRldi0+Y2RiX2xlbiwgMSk7CisJYXRhX3NmZl9hbHRzdGF0dXMoYXApOyAvKiBmbHVzaCAqLworCisJc3dpdGNoIChxYy0+dGYucHJvdG9jb2wpIHsKKwljYXNlIEFUQVBJX1BST1RfUElPOgorCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1Q7CisJCWJyZWFrOworCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6CisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9MQVNUOworCQlicmVhazsKKwljYXNlIEFUQVBJX1BST1RfRE1BOgorCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfTEFTVDsKKwkJLyogaW5pdGlhdGUgYm1kbWEgKi8KKwkJYXAtPm9wcy0+Ym1kbWFfc3RhcnQocWMpOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICoJX19hdGFwaV9waW9fYnl0ZXMgLSBUcmFuc2ZlciBkYXRhIGZyb20vdG8gdGhlIEFUQVBJIGRldmljZS4KKyAqCUBxYzogQ29tbWFuZCBvbiBnb2luZworICoJQGJ5dGVzOiBudW1iZXIgb2YgYnl0ZXMKKyAqCisgKglUcmFuc2ZlciBUcmFuc2ZlciBkYXRhIGZyb20vdG8gdGhlIEFUQVBJIGRldmljZS4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICoKKyAqLworc3RhdGljIGludCBfX2F0YXBpX3Bpb19ieXRlcyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCB1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJaW50IHJ3ID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkgPyBXUklURSA6IFJFQUQ7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gcWMtPmRldjsKKwlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZkZXYtPmxpbmstPmVoX2luZm87CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJdW5zaWduZWQgaW50IG9mZnNldCwgY291bnQsIGNvbnN1bWVkOworCituZXh0X3NnOgorCXNnID0gcWMtPmN1cnNnOworCWlmICh1bmxpa2VseSghc2cpKSB7CisJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgInVuZXhwZWN0ZWQgb3IgdG9vIG11Y2ggdHJhaWxpbmcgZGF0YSAiCisJCQkJICAiYnVmPSV1IGN1cj0ldSBieXRlcz0ldSIsCisJCQkJICBxYy0+bmJ5dGVzLCBxYy0+Y3VyYnl0ZXMsIGJ5dGVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXBhZ2UgPSBzZ19wYWdlKHNnKTsKKwlvZmZzZXQgPSBzZy0+b2Zmc2V0ICsgcWMtPmN1cnNnX29mczsKKworCS8qIGdldCB0aGUgY3VycmVudCBwYWdlIGFuZCBvZmZzZXQgKi8KKwlwYWdlID0gbnRoX3BhZ2UocGFnZSwgKG9mZnNldCA+PiBQQUdFX1NISUZUKSk7CisJb2Zmc2V0ICU9IFBBR0VfU0laRTsKKworCS8qIGRvbid0IG92ZXJydW4gY3VycmVudCBzZyAqLworCWNvdW50ID0gbWluKHNnLT5sZW5ndGggLSBxYy0+Y3Vyc2dfb2ZzLCBieXRlcyk7CisKKwkvKiBkb24ndCBjcm9zcyBwYWdlIGJvdW5kYXJpZXMgKi8KKwljb3VudCA9IG1pbihjb3VudCwgKHVuc2lnbmVkIGludClQQUdFX1NJWkUgLSBvZmZzZXQpOworCisJRFBSSU5USygiZGF0YSAlc1xuIiwgcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFID8gIndyaXRlIiA6ICJyZWFkIik7CisKKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkvKiBGSVhNRTogdXNlIGJvdW5jZSBidWZmZXIgKi8KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9JUlEwKTsKKworCQkvKiBkbyB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXIgKi8KKwkJY29uc3VtZWQgPSBhcC0+b3BzLT5zZmZfZGF0YV94ZmVyKGRldiwgIGJ1ZiArIG9mZnNldCwgY291bnQsIHJ3KTsKKworCQlrdW5tYXBfYXRvbWljKGJ1ZiwgS01fSVJRMCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9IGVsc2UgeworCQlidWYgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWNvbnN1bWVkID0gYXAtPm9wcy0+c2ZmX2RhdGFfeGZlcihkZXYsICBidWYgKyBvZmZzZXQsIGNvdW50LCBydyk7CisJfQorCisJYnl0ZXMgLT0gbWluKGJ5dGVzLCBjb25zdW1lZCk7CisJcWMtPmN1cmJ5dGVzICs9IGNvdW50OworCXFjLT5jdXJzZ19vZnMgKz0gY291bnQ7CisKKwlpZiAocWMtPmN1cnNnX29mcyA9PSBzZy0+bGVuZ3RoKSB7CisJCXFjLT5jdXJzZyA9IHNnX25leHQocWMtPmN1cnNnKTsKKwkJcWMtPmN1cnNnX29mcyA9IDA7CisJfQorCisJLyogY29uc3VtZWQgY2FuIGJlIGxhcmdlciB0aGFuIGNvdW50IG9ubHkgZm9yIHRoZSBsYXN0IHRyYW5zZmVyICovCisJV0FSTl9PTihxYy0+Y3Vyc2cgJiYgY291bnQgIT0gY29uc3VtZWQpOworCisJaWYgKGJ5dGVzKQorCQlnb3RvIG5leHRfc2c7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJYXRhcGlfcGlvX2J5dGVzIC0gVHJhbnNmZXIgZGF0YSBmcm9tL3RvIHRoZSBBVEFQSSBkZXZpY2UuCisgKglAcWM6IENvbW1hbmQgb24gZ29pbmcKKyAqCisgKglUcmFuc2ZlciBUcmFuc2ZlciBkYXRhIGZyb20vdG8gdGhlIEFUQVBJIGRldmljZS4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBhdGFwaV9waW9fYnl0ZXMoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSBxYy0+ZGV2OworCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmRldi0+bGluay0+ZWhfaW5mbzsKKwl1bnNpZ25lZCBpbnQgaXJlYXNvbiwgYmNfbG8sIGJjX2hpLCBieXRlczsKKwlpbnQgaV93cml0ZSwgZG9fd3JpdGUgPSAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSA/IDEgOiAwOworCisJLyogQWJ1c2UgcWMtPnJlc3VsdF90ZiBmb3IgdGVtcCBzdG9yYWdlIG9mIGludGVybWVkaWF0ZSBURgorCSAqIGhlcmUgdG8gc2F2ZSBzb21lIGtlcm5lbCBzdGFjayB1c2FnZS4KKwkgKiBGb3Igbm9ybWFsIGNvbXBsZXRpb24sIHFjLT5yZXN1bHRfdGYgaXMgbm90IHJlbGV2YW50LiBGb3IKKwkgKiBlcnJvciwgcWMtPnJlc3VsdF90ZiBpcyBsYXRlciBvdmVyd3JpdHRlbiBieSBhdGFfcWNfY29tcGxldGUoKS4KKwkgKiBTbywgdGhlIGNvcnJlY3RuZXNzIG9mIHFjLT5yZXN1bHRfdGYgaXMgbm90IGFmZmVjdGVkLgorCSAqLworCWFwLT5vcHMtPnNmZl90Zl9yZWFkKGFwLCAmcWMtPnJlc3VsdF90Zik7CisJaXJlYXNvbiA9IHFjLT5yZXN1bHRfdGYubnNlY3Q7CisJYmNfbG8gPSBxYy0+cmVzdWx0X3RmLmxiYW07CisJYmNfaGkgPSBxYy0+cmVzdWx0X3RmLmxiYWg7CisJYnl0ZXMgPSAoYmNfaGkgPDwgOCkgfCBiY19sbzsKKworCS8qIHNoYWxsIGJlIGNsZWFyZWQgdG8gemVybywgaW5kaWNhdGluZyB4ZmVyIG9mIGRhdGEgKi8KKwlpZiAodW5saWtlbHkoaXJlYXNvbiAmICgxIDw8IDApKSkKKwkJZ290byBhdGFwaV9jaGVjazsKKworCS8qIG1ha2Ugc3VyZSB0cmFuc2ZlciBkaXJlY3Rpb24gbWF0Y2hlcyBleHBlY3RlZCAqLworCWlfd3JpdGUgPSAoKGlyZWFzb24gJiAoMSA8PCAxKSkgPT0gMCkgPyAxIDogMDsKKwlpZiAodW5saWtlbHkoZG9fd3JpdGUgIT0gaV93cml0ZSkpCisJCWdvdG8gYXRhcGlfY2hlY2s7CisKKwlpZiAodW5saWtlbHkoIWJ5dGVzKSkKKwkJZ290byBhdGFwaV9jaGVjazsKKworCVZQUklOVEsoImF0YSV1OiB4ZmVyaW5nICVkIGJ5dGVzXG4iLCBhcC0+cHJpbnRfaWQsIGJ5dGVzKTsKKworCWlmICh1bmxpa2VseShfX2F0YXBpX3Bpb19ieXRlcyhxYywgYnl0ZXMpKSkKKwkJZ290byBlcnJfb3V0OworCWF0YV9zZmZfYWx0c3RhdHVzKGFwKTsgLyogZmx1c2ggKi8KKworCXJldHVybjsKKworIGF0YXBpX2NoZWNrOgorCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkFUQVBJIGNoZWNrIGZhaWxlZCAoaXJlYXNvbj0weCV4IGJ5dGVzPSV1KSIsCisJCQkgIGlyZWFzb24sIGJ5dGVzKTsKKyBlcnJfb3V0OgorCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNOworCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7Cit9CisKKy8qKgorICoJYXRhX2hzbV9va19pbl93cSAtIENoZWNrIGlmIHRoZSBxYyBjYW4gYmUgaGFuZGxlZCBpbiB0aGUgd29ya3F1ZXVlLgorICoJQGFwOiB0aGUgdGFyZ2V0IGF0YV9wb3J0CisgKglAcWM6IHFjIG9uIGdvaW5nCisgKgorICoJUkVUVVJOUzoKKyAqCTEgaWYgb2sgaW4gd29ya3F1ZXVlLCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRhX2hzbV9va19pbl93cShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJcmV0dXJuIDE7CisKKwlpZiAoYXAtPmhzbV90YXNrX3N0YXRlID09IEhTTV9TVF9GSVJTVCkgeworCQlpZiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX1BJTyAmJgorCQkgICAgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkpCisJCSAgICByZXR1cm4gMTsKKworCQlpZiAoYXRhX2lzX2F0YXBpKHFjLT50Zi5wcm90b2NvbCkgJiYKKwkJICAgICEocWMtPmRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfQ0RCX0lOVFIpKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJYXRhX2hzbV9xY19jb21wbGV0ZSAtIGZpbmlzaCBhIHFjIHJ1bm5pbmcgb24gc3RhbmRhcmQgSFNNCisgKglAcWM6IENvbW1hbmQgdG8gY29tcGxldGUKKyAqCUBpbl93cTogMSBpZiBjYWxsZWQgZnJvbSB3b3JrcXVldWUsIDAgb3RoZXJ3aXNlCisgKgorICoJRmluaXNoIEBxYyB3aGljaCBpcyBydW5uaW5nIG9uIHN0YW5kYXJkIEhTTS4KKyAqCisgKglMT0NLSU5HOgorICoJSWYgQGluX3dxIGlzIHplcm8sIHNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykuCisgKglPdGhlcndpc2UsIG5vbmUgb24gZW50cnkgYW5kIGdyYWJzIGhvc3QgbG9jay4KKyAqLworc3RhdGljIHZvaWQgYXRhX2hzbV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCBpbnQgaW5fd3EpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGFwLT5vcHMtPmVycm9yX2hhbmRsZXIpIHsKKwkJaWYgKGluX3dxKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOworCisJCQkvKiBFSCBtaWdodCBoYXZlIGtpY2tlZCBpbiB3aGlsZSBob3N0IGxvY2sgaXMKKwkJCSAqIHJlbGVhc2VkLgorCQkJICovCisJCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgcWMtPnRhZyk7CisJCQlpZiAocWMpIHsKKwkJCQlpZiAobGlrZWx5KCEocWMtPmVycl9tYXNrICYgQUNfRVJSX0hTTSkpKSB7CisJCQkJCWFwLT5vcHMtPnNmZl9pcnFfb24oYXApOworCQkJCQlhdGFfcWNfY29tcGxldGUocWMpOworCQkJCX0gZWxzZQorCQkJCQlhdGFfcG9ydF9mcmVlemUoYXApOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlpZiAobGlrZWx5KCEocWMtPmVycl9tYXNrICYgQUNfRVJSX0hTTSkpKQorCQkJCWF0YV9xY19jb21wbGV0ZShxYyk7CisJCQllbHNlCisJCQkJYXRhX3BvcnRfZnJlZXplKGFwKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChpbl93cSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKKwkJCWFwLT5vcHMtPnNmZl9pcnFfb24oYXApOworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKKwkJfSBlbHNlCisJCQlhdGFfcWNfY29tcGxldGUocWMpOworCX0KK30KKworLyoqCisgKglhdGFfc2ZmX2hzbV9tb3ZlIC0gbW92ZSB0aGUgSFNNIHRvIHRoZSBuZXh0IHN0YXRlLgorICoJQGFwOiB0aGUgdGFyZ2V0IGF0YV9wb3J0CisgKglAcWM6IHFjIG9uIGdvaW5nCisgKglAc3RhdHVzOiBjdXJyZW50IGRldmljZSBzdGF0dXMKKyAqCUBpbl93cTogMSBpZiBjYWxsZWQgZnJvbSB3b3JrcXVldWUsIDAgb3RoZXJ3aXNlCisgKgorICoJUkVUVVJOUzoKKyAqCTEgd2hlbiBwb2xsIG5leHQgc3RhdHVzIG5lZWRlZCwgMCBvdGhlcndpc2UuCisgKi8KK2ludCBhdGFfc2ZmX2hzbV9tb3ZlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsCisJCSAgICAgdTggc3RhdHVzLCBpbnQgaW5fd3EpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IHBvbGxfbmV4dDsKKworCVdBUk5fT04oKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSA9PSAwKTsKKworCS8qIE1ha2Ugc3VyZSBhdGFfc2ZmX3FjX2lzc3VlKCkgZG9lcyBub3QgdGhyb3cgdGhpbmdzCisJICogbGlrZSBETUEgcG9sbGluZyBpbnRvIHRoZSB3b3JrcXVldWUuIE5vdGljZSB0aGF0CisJICogaW5fd3EgaXMgbm90IGVxdWl2YWxlbnQgdG8gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKS4KKwkgKi8KKwlXQVJOX09OKGluX3dxICE9IGF0YV9oc21fb2tfaW5fd3EoYXAsIHFjKSk7CisKK2ZzbV9zdGFydDoKKwlEUFJJTlRLKCJhdGEldTogcHJvdG9jb2wgJWQgdGFza19zdGF0ZSAlZCAoZGV2X3N0YXQgMHglWClcbiIsCisJCWFwLT5wcmludF9pZCwgcWMtPnRmLnByb3RvY29sLCBhcC0+aHNtX3Rhc2tfc3RhdGUsIHN0YXR1cyk7CisKKwlzd2l0Y2ggKGFwLT5oc21fdGFza19zdGF0ZSkgeworCWNhc2UgSFNNX1NUX0ZJUlNUOgorCQkvKiBTZW5kIGZpcnN0IGRhdGEgYmxvY2sgb3IgUEFDS0VUIENEQiAqLworCisJCS8qIElmIHBvbGxpbmcsIHdlIHdpbGwgc3RheSBpbiB0aGUgd29yayBxdWV1ZSBhZnRlcgorCQkgKiBzZW5kaW5nIHRoZSBkYXRhLiBPdGhlcndpc2UsIGludGVycnVwdCBoYW5kbGVyCisJCSAqIHRha2VzIG92ZXIgYWZ0ZXIgc2VuZGluZyB0aGUgZGF0YS4KKwkJICovCisJCXBvbGxfbmV4dCA9IChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORyk7CisKKwkJLyogY2hlY2sgZGV2aWNlIHN0YXR1cyAqLworCQlpZiAodW5saWtlbHkoKHN0YXR1cyAmIEFUQV9EUlEpID09IDApKSB7CisJCQkvKiBoYW5kbGUgQlNZPTAsIERSUT0wIGFzIGVycm9yICovCisJCQlpZiAobGlrZWx5KHN0YXR1cyAmIChBVEFfRVJSIHwgQVRBX0RGKSkpCisJCQkJLyogZGV2aWNlIHN0b3BzIEhTTSBmb3IgYWJvcnQvZXJyb3IgKi8KKwkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0RFVjsKKwkJCWVsc2UKKwkJCQkvKiBIU00gdmlvbGF0aW9uLiBMZXQgRUggaGFuZGxlIHRoaXMgKi8KKwkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKKworCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0VSUjsKKwkJCWdvdG8gZnNtX3N0YXJ0OworCQl9CisKKwkJLyogRGV2aWNlIHNob3VsZCBub3QgYXNrIGZvciBkYXRhIHRyYW5zZmVyIChEUlE9MSkKKwkJICogd2hlbiBpdCBmaW5kcyBzb21ldGhpbmcgd3JvbmcuCisJCSAqIFdlIGlnbm9yZSBEUlEgaGVyZSBhbmQgc3RvcCB0aGUgSFNNIGJ5CisJCSAqIGNoYW5naW5nIGhzbV90YXNrX3N0YXRlIHRvIEhTTV9TVF9FUlIgYW5kCisJCSAqIGxldCB0aGUgRUggYWJvcnQgdGhlIGNvbW1hbmQgb3IgcmVzZXQgdGhlIGRldmljZS4KKwkJICovCisJCWlmICh1bmxpa2VseShzdGF0dXMgJiAoQVRBX0VSUiB8IEFUQV9ERikpKSB7CisJCQkvKiBTb21lIEFUQVBJIHRhcGUgZHJpdmVzIGZvcmdldCB0byBjbGVhciB0aGUgRVJSIGJpdAorCQkJICogd2hlbiBkb2luZyB0aGUgbmV4dCBjb21tYW5kIChtb3N0bHkgcmVxdWVzdCBzZW5zZSkuCisJCQkgKiBXZSBpZ25vcmUgRVJSIGhlcmUgdG8gd29ya2Fyb3VuZCBhbmQgcHJvY2VlZCBzZW5kaW5nCisJCQkgKiB0aGUgQ0RCLgorCQkJICovCisJCQlpZiAoIShxYy0+ZGV2LT5ob3JrYWdlICYgQVRBX0hPUktBR0VfU1RVQ0tfRVJSKSkgeworCQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLAorCQkJCQkJIkRSUT0xIHdpdGggZGV2aWNlIGVycm9yLCAiCisJCQkJCQkiZGV2X3N0YXQgMHglWFxuIiwgc3RhdHVzKTsKKwkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKKwkJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOworCQkJCWdvdG8gZnNtX3N0YXJ0OworCQkJfQorCQl9CisKKwkJLyogU2VuZCB0aGUgQ0RCIChhdGFwaSkgb3IgdGhlIGZpcnN0IGRhdGEgYmxvY2sgKGF0YSBwaW8gb3V0KS4KKwkJICogRHVyaW5nIHRoZSBzdGF0ZSB0cmFuc2l0aW9uLCBpbnRlcnJ1cHQgaGFuZGxlciBzaG91bGRuJ3QKKwkJICogYmUgaW52b2tlZCBiZWZvcmUgdGhlIGRhdGEgdHJhbnNmZXIgaXMgY29tcGxldGUgYW5kCisJCSAqIGhzbV90YXNrX3N0YXRlIGlzIGNoYW5nZWQuIEhlbmNlLCB0aGUgZm9sbG93aW5nIGxvY2tpbmcuCisJCSAqLworCQlpZiAoaW5fd3EpCisJCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOworCisJCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfUElPKSB7CisJCQkvKiBQSU8gZGF0YSBvdXQgcHJvdG9jb2wuCisJCQkgKiBzZW5kIGZpcnN0IGRhdGEgYmxvY2suCisJCQkgKi8KKworCQkJLyogYXRhX3Bpb19zZWN0b3JzKCkgbWlnaHQgY2hhbmdlIHRoZSBzdGF0ZQorCQkJICogdG8gSFNNX1NUX0xBU1QuIHNvLCB0aGUgc3RhdGUgaXMgY2hhbmdlZCBoZXJlCisJCQkgKiBiZWZvcmUgYXRhX3Bpb19zZWN0b3JzKCkuCisJCQkgKi8KKwkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKKwkJCWF0YV9waW9fc2VjdG9ycyhxYyk7CisJCX0gZWxzZQorCQkJLyogc2VuZCBDREIgKi8KKwkJCWF0YXBpX3NlbmRfY2RiKGFwLCBxYyk7CisKKwkJaWYgKGluX3dxKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOworCisJCS8qIGlmIHBvbGxpbmcsIGF0YV9waW9fdGFzaygpIGhhbmRsZXMgdGhlIHJlc3QuCisJCSAqIG90aGVyd2lzZSwgaW50ZXJydXB0IGhhbmRsZXIgdGFrZXMgb3ZlciBmcm9tIGhlcmUuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgSFNNX1NUOgorCQkvKiBjb21wbGV0ZSBjb21tYW5kIG9yIHJlYWQvd3JpdGUgdGhlIGRhdGEgcmVnaXN0ZXIgKi8KKwkJaWYgKHFjLT50Zi5wcm90b2NvbCA9PSBBVEFQSV9QUk9UX1BJTykgeworCQkJLyogQVRBUEkgUElPIHByb3RvY29sICovCisJCQlpZiAoKHN0YXR1cyAmIEFUQV9EUlEpID09IDApIHsKKwkJCQkvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNmZXIgb3IgZGV2aWNlIGVycm9yLgorCQkJCSAqIERldmljZSBlcnJvciB3aWxsIGJlIHRhZ2dlZCBpbiBIU01fU1RfTEFTVC4KKwkJCQkgKi8KKwkJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfTEFTVDsKKwkJCQlnb3RvIGZzbV9zdGFydDsKKwkJCX0KKworCQkJLyogRGV2aWNlIHNob3VsZCBub3QgYXNrIGZvciBkYXRhIHRyYW5zZmVyIChEUlE9MSkKKwkJCSAqIHdoZW4gaXQgZmluZHMgc29tZXRoaW5nIHdyb25nLgorCQkJICogV2UgaWdub3JlIERSUSBoZXJlIGFuZCBzdG9wIHRoZSBIU00gYnkKKwkJCSAqIGNoYW5naW5nIGhzbV90YXNrX3N0YXRlIHRvIEhTTV9TVF9FUlIgYW5kCisJCQkgKiBsZXQgdGhlIEVIIGFib3J0IHRoZSBjb21tYW5kIG9yIHJlc2V0IHRoZSBkZXZpY2UuCisJCQkgKi8KKwkJCWlmICh1bmxpa2VseShzdGF0dXMgJiAoQVRBX0VSUiB8IEFUQV9ERikpKSB7CisJCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJEUlE9MSB3aXRoICIKKwkJCQkJCSJkZXZpY2UgZXJyb3IsIGRldl9zdGF0IDB4JVhcbiIsCisJCQkJCQlzdGF0dXMpOworCQkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNOworCQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CisJCQkJZ290byBmc21fc3RhcnQ7CisJCQl9CisKKwkJCWF0YXBpX3Bpb19ieXRlcyhxYyk7CisKKwkJCWlmICh1bmxpa2VseShhcC0+aHNtX3Rhc2tfc3RhdGUgPT0gSFNNX1NUX0VSUikpCisJCQkJLyogYmFkIGlyZWFzb24gcmVwb3J0ZWQgYnkgZGV2aWNlICovCisJCQkJZ290byBmc21fc3RhcnQ7CisKKwkJfSBlbHNlIHsKKwkJCS8qIEFUQSBQSU8gcHJvdG9jb2wgKi8KKwkJCWlmICh1bmxpa2VseSgoc3RhdHVzICYgQVRBX0RSUSkgPT0gMCkpIHsKKwkJCQkvKiBoYW5kbGUgQlNZPTAsIERSUT0wIGFzIGVycm9yICovCisJCQkJaWYgKGxpa2VseShzdGF0dXMgJiAoQVRBX0VSUiB8IEFUQV9ERikpKQorCQkJCQkvKiBkZXZpY2Ugc3RvcHMgSFNNIGZvciBhYm9ydC9lcnJvciAqLworCQkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0RFVjsKKwkJCQllbHNlCisJCQkJCS8qIEhTTSB2aW9sYXRpb24uIExldCBFSCBoYW5kbGUgdGhpcy4KKwkJCQkJICogUGhhbnRvbSBkZXZpY2VzIGFsc28gdHJpZ2dlciB0aGlzCisJCQkJCSAqIGNvbmRpdGlvbi4gIE1hcmsgaGludC4KKwkJCQkJICovCisJCQkJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNIHwKKwkJCQkJCQlBQ19FUlJfTk9ERVZfSElOVDsKKworCQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CisJCQkJZ290byBmc21fc3RhcnQ7CisJCQl9CisKKwkJCS8qIEZvciBQSU8gcmVhZHMsIHNvbWUgZGV2aWNlcyBtYXkgYXNrIGZvcgorCQkJICogZGF0YSB0cmFuc2ZlciAoRFJRPTEpIGFsb25lIHdpdGggRVJSPTEuCisJCQkgKiBXZSByZXNwZWN0IERSUSBoZXJlIGFuZCB0cmFuc2ZlciBvbmUKKwkJCSAqIGJsb2NrIG9mIGp1bmsgZGF0YSBiZWZvcmUgY2hhbmdpbmcgdGhlCisJCQkgKiBoc21fdGFza19zdGF0ZSB0byBIU01fU1RfRVJSLgorCQkJICoKKwkJCSAqIEZvciBQSU8gd3JpdGVzLCBFUlI9MSBEUlE9MSBkb2Vzbid0IG1ha2UKKwkJCSAqIHNlbnNlIHNpbmNlIHRoZSBkYXRhIGJsb2NrIGhhcyBiZWVuCisJCQkgKiB0cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlLgorCQkJICovCisJCQlpZiAodW5saWtlbHkoc3RhdHVzICYgKEFUQV9FUlIgfCBBVEFfREYpKSkgeworCQkJCS8qIGRhdGEgbWlnaHQgYmUgY29ycnB1dGVkICovCisJCQkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9ERVY7CisKKwkJCQlpZiAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpKSB7CisJCQkJCWF0YV9waW9fc2VjdG9ycyhxYyk7CisJCQkJCXN0YXR1cyA9IGF0YV93YWl0X2lkbGUoYXApOworCQkJCX0KKworCQkJCWlmIChzdGF0dXMgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKKwkJCQkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9IU007CisKKwkJCQkvKiBhdGFfcGlvX3NlY3RvcnMoKSBtaWdodCBjaGFuZ2UgdGhlCisJCQkJICogc3RhdGUgdG8gSFNNX1NUX0xBU1QuIHNvLCB0aGUgc3RhdGUKKwkJCQkgKiBpcyBjaGFuZ2VkIGFmdGVyIGF0YV9waW9fc2VjdG9ycygpLgorCQkJCSAqLworCQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CisJCQkJZ290byBmc21fc3RhcnQ7CisJCQl9CisKKwkJCWF0YV9waW9fc2VjdG9ycyhxYyk7CisKKwkJCWlmIChhcC0+aHNtX3Rhc2tfc3RhdGUgPT0gSFNNX1NUX0xBU1QgJiYKKwkJCSAgICAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpKSkgeworCQkJCS8qIGFsbCBkYXRhIHJlYWQgKi8KKwkJCQlzdGF0dXMgPSBhdGFfd2FpdF9pZGxlKGFwKTsKKwkJCQlnb3RvIGZzbV9zdGFydDsKKwkJCX0KKwkJfQorCisJCXBvbGxfbmV4dCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBIU01fU1RfTEFTVDoKKwkJaWYgKHVubGlrZWx5KCFhdGFfb2soc3RhdHVzKSkpIHsKKwkJCXFjLT5lcnJfbWFzayB8PSBfX2FjX2Vycl9tYXNrKHN0YXR1cyk7CisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOworCQkJZ290byBmc21fc3RhcnQ7CisJCX0KKworCQkvKiBubyBtb3JlIGRhdGEgdG8gdHJhbnNmZXIgKi8KKwkJRFBSSU5USygiYXRhJXU6IGRldiAldSBjb21tYW5kIGNvbXBsZXRlLCBkcnZfc3RhdCAweCV4XG4iLAorCQkJYXAtPnByaW50X2lkLCBxYy0+ZGV2LT5kZXZubywgc3RhdHVzKTsKKworCQlXQVJOX09OKHFjLT5lcnJfbWFzayk7CisKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0lETEU7CisKKwkJLyogY29tcGxldGUgdGFza2ZpbGUgdHJhbnNhY3Rpb24gKi8KKwkJYXRhX2hzbV9xY19jb21wbGV0ZShxYywgaW5fd3EpOworCisJCXBvbGxfbmV4dCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBIU01fU1RfRVJSOgorCQkvKiBtYWtlIHN1cmUgcWMtPmVycl9tYXNrIGlzIGF2YWlsYWJsZSB0bworCQkgKiBrbm93IHdoYXQncyB3cm9uZyBhbmQgcmVjb3ZlcgorCQkgKi8KKwkJV0FSTl9PTihxYy0+ZXJyX21hc2sgPT0gMCk7CisKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0lETEU7CisKKwkJLyogY29tcGxldGUgdGFza2ZpbGUgdHJhbnNhY3Rpb24gKi8KKwkJYXRhX2hzbV9xY19jb21wbGV0ZShxYywgaW5fd3EpOworCisJCXBvbGxfbmV4dCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBvbGxfbmV4dCA9IDA7CisJCUJVRygpOworCX0KKworCXJldHVybiBwb2xsX25leHQ7Cit9CisKK3ZvaWQgYXRhX3Bpb190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGFfcG9ydCwgcG9ydF90YXNrLndvcmspOworCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMgPSBhcC0+cG9ydF90YXNrX2RhdGE7CisJdTggc3RhdHVzOworCWludCBwb2xsX25leHQ7CisKK2ZzbV9zdGFydDoKKwlXQVJOX09OKGFwLT5oc21fdGFza19zdGF0ZSA9PSBIU01fU1RfSURMRSk7CisKKwkvKgorCSAqIFRoaXMgaXMgcHVyZWx5IGhldXJpc3RpYy4gIFRoaXMgaXMgYSBmYXN0IHBhdGguCisJICogU29tZXRpbWVzIHdoZW4gd2UgZW50ZXIsIEJTWSB3aWxsIGJlIGNsZWFyZWQgaW4KKwkgKiBhIGNoay1zdGF0dXMgb3IgdHdvLiAgSWYgbm90LCB0aGUgZHJpdmUgaXMgcHJvYmFibHkgc2Vla2luZworCSAqIG9yIHNvbWV0aGluZy4gIFNub296ZSBmb3IgYSBjb3VwbGUgbXNlY3MsIHRoZW4KKwkgKiBjaGstc3RhdHVzIGFnYWluLiAgSWYgc3RpbGwgYnVzeSwgcXVldWUgZGVsYXllZCB3b3JrLgorCSAqLworCXN0YXR1cyA9IGF0YV9zZmZfYnVzeV93YWl0KGFwLCBBVEFfQlVTWSwgNSk7CisJaWYgKHN0YXR1cyAmIEFUQV9CVVNZKSB7CisJCW1zbGVlcCgyKTsKKwkJc3RhdHVzID0gYXRhX3NmZl9idXN5X3dhaXQoYXAsIEFUQV9CVVNZLCAxMCk7CisJCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkgeworCQkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgQVRBX1NIT1JUX1BBVVNFKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIG1vdmUgdGhlIEhTTSAqLworCXBvbGxfbmV4dCA9IGF0YV9zZmZfaHNtX21vdmUoYXAsIHFjLCBzdGF0dXMsIDEpOworCisJLyogYW5vdGhlciBjb21tYW5kIG9yIGludGVycnVwdCBoYW5kbGVyCisJICogbWF5IGJlIHJ1bm5pbmcgYXQgdGhpcyBwb2ludC4KKwkgKi8KKwlpZiAocG9sbF9uZXh0KQorCQlnb3RvIGZzbV9zdGFydDsKK30KKworLyoqCisgKglhdGFfc2ZmX3FjX2lzc3VlIC0gaXNzdWUgdGFza2ZpbGUgdG8gZGV2aWNlIGluIHByb3RvLWRlcGVuZGVudCBtYW5uZXIKKyAqCUBxYzogY29tbWFuZCB0byBpc3N1ZSB0byBkZXZpY2UKKyAqCisgKglVc2luZyB2YXJpb3VzIGxpYmF0YSBmdW5jdGlvbnMgYW5kIGhvb2tzLCB0aGlzIGZ1bmN0aW9uCisgKglzdGFydHMgYW4gQVRBIGNvbW1hbmQuICBBVEEgY29tbWFuZHMgYXJlIGdyb3VwZWQgaW50bworICoJY2xhc3NlcyBjYWxsZWQgInByb3RvY29scyIsIGFuZCBpc3N1aW5nIGVhY2ggdHlwZSBvZiBwcm90b2NvbAorICoJaXMgc2xpZ2h0bHkgZGlmZmVyZW50LgorICoKKyAqCU1heSBiZSB1c2VkIGFzIHRoZSBxY19pc3N1ZSgpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKKyAqCisgKglSRVRVUk5TOgorICoJWmVybyBvbiBzdWNjZXNzLCBBQ19FUlJfKiBtYXNrIG9uIGZhaWx1cmUKKyAqLwordW5zaWduZWQgaW50IGF0YV9zZmZfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCisJLyogVXNlIHBvbGxpbmcgcGlvIGlmIHRoZSBMTEQgZG9lc24ndCBoYW5kbGUKKwkgKiBpbnRlcnJ1cHQgZHJpdmVuIHBpbyBhbmQgYXRhcGkgQ0RCIGludGVycnVwdC4KKwkgKi8KKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUElPX1BPTExJTkcpIHsKKwkJc3dpdGNoIChxYy0+dGYucHJvdG9jb2wpIHsKKwkJY2FzZSBBVEFfUFJPVF9QSU86CisJCWNhc2UgQVRBX1BST1RfTk9EQVRBOgorCQljYXNlIEFUQVBJX1BST1RfUElPOgorCQljYXNlIEFUQVBJX1BST1RfTk9EQVRBOgorCQkJcWMtPnRmLmZsYWdzIHw9IEFUQV9URkxBR19QT0xMSU5HOworCQkJYnJlYWs7CisJCWNhc2UgQVRBUElfUFJPVF9ETUE6CisJCQlpZiAocWMtPmRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfQ0RCX0lOVFIpCisJCQkJLyogc2VlIGF0YV9kbWFfYmxhY2tsaXN0ZWQoKSAqLworCQkJCUJVRygpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIHNlbGVjdCB0aGUgZGV2aWNlICovCisJYXRhX2Rldl9zZWxlY3QoYXAsIHFjLT5kZXYtPmRldm5vLCAxLCAwKTsKKworCS8qIHN0YXJ0IHRoZSBjb21tYW5kICovCisJc3dpdGNoIChxYy0+dGYucHJvdG9jb2wpIHsKKwljYXNlIEFUQV9QUk9UX05PREFUQToKKwkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQkJYXRhX3FjX3NldF9wb2xsaW5nKHFjKTsKKworCQlhdGFfdGZfdG9faG9zdChhcCwgJnFjLT50Zik7CisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9MQVNUOworCisJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJCWF0YV9waW9fcXVldWVfdGFzayhhcCwgcWMsIDApOworCisJCWJyZWFrOworCisJY2FzZSBBVEFfUFJPVF9ETUE6CisJCVdBUk5fT04ocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpOworCisJCWFwLT5vcHMtPnNmZl90Zl9sb2FkKGFwLCAmcWMtPnRmKTsgIC8qIGxvYWQgdGYgcmVnaXN0ZXJzICovCisJCWFwLT5vcHMtPmJtZG1hX3NldHVwKHFjKTsJICAgIC8qIHNldCB1cCBibWRtYSAqLworCQlhcC0+b3BzLT5ibWRtYV9zdGFydChxYyk7CSAgICAvKiBpbml0aWF0ZSBibWRtYSAqLworCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfTEFTVDsKKwkJYnJlYWs7CisKKwljYXNlIEFUQV9QUk9UX1BJTzoKKwkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQkJYXRhX3FjX3NldF9wb2xsaW5nKHFjKTsKKworCQlhdGFfdGZfdG9faG9zdChhcCwgJnFjLT50Zik7CisKKwkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkgeworCQkJLyogUElPIGRhdGEgb3V0IHByb3RvY29sICovCisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7CisJCQlhdGFfcGlvX3F1ZXVlX3Rhc2soYXAsIHFjLCAwKTsKKworCQkJLyogYWx3YXlzIHNlbmQgZmlyc3QgZGF0YSBibG9jayB1c2luZworCQkJICogdGhlIGF0YV9waW9fdGFzaygpIGNvZGVwYXRoLgorCQkJICovCisJCX0gZWxzZSB7CisJCQkvKiBQSU8gZGF0YSBpbiBwcm90b2NvbCAqLworCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUOworCisJCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCQkJYXRhX3Bpb19xdWV1ZV90YXNrKGFwLCBxYywgMCk7CisKKwkJCS8qIGlmIHBvbGxpbmcsIGF0YV9waW9fdGFzaygpIGhhbmRsZXMgdGhlIHJlc3QuCisJCQkgKiBvdGhlcndpc2UsIGludGVycnVwdCBoYW5kbGVyIHRha2VzIG92ZXIgZnJvbSBoZXJlLgorCQkJICovCisJCX0KKworCQlicmVhazsKKworCWNhc2UgQVRBUElfUFJPVF9QSU86CisJY2FzZSBBVEFQSV9QUk9UX05PREFUQToKKwkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQkJYXRhX3FjX3NldF9wb2xsaW5nKHFjKTsKKworCQlhdGFfdGZfdG9faG9zdChhcCwgJnFjLT50Zik7CisKKwkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0ZJUlNUOworCisJCS8qIHNlbmQgY2RiIGJ5IHBvbGxpbmcgaWYgbm8gY2RiIGludGVycnVwdCAqLworCQlpZiAoKCEocWMtPmRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfQ0RCX0lOVFIpKSB8fAorCQkgICAgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkKKwkJCWF0YV9waW9fcXVldWVfdGFzayhhcCwgcWMsIDApOworCQlicmVhazsKKworCWNhc2UgQVRBUElfUFJPVF9ETUE6CisJCVdBUk5fT04ocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpOworCisJCWFwLT5vcHMtPnNmZl90Zl9sb2FkKGFwLCAmcWMtPnRmKTsgIC8qIGxvYWQgdGYgcmVnaXN0ZXJzICovCisJCWFwLT5vcHMtPmJtZG1hX3NldHVwKHFjKTsJICAgIC8qIHNldCB1cCBibWRtYSAqLworCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7CisKKwkJLyogc2VuZCBjZGIgYnkgcG9sbGluZyBpZiBubyBjZGIgaW50ZXJydXB0ICovCisJCWlmICghKHFjLT5kZXYtPmZsYWdzICYgQVRBX0RGTEFHX0NEQl9JTlRSKSkKKwkJCWF0YV9waW9fcXVldWVfdGFzayhhcCwgcWMsIDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCXJldHVybiBBQ19FUlJfU1lTVEVNOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqCWF0YV9zZmZfcWNfZmlsbF9ydGYgLSBmaWxsIHJlc3VsdCBURiB1c2luZyAtPnNmZl90Zl9yZWFkCisgKglAcWM6IHFjIHRvIGZpbGwgcmVzdWx0IFRGIGZvcgorICoKKyAqCUBxYyBpcyBmaW5pc2hlZCBhbmQgcmVzdWx0IFRGIG5lZWRzIHRvIGJlIGZpbGxlZC4gIEZpbGwgaXQKKyAqCXVzaW5nIC0+c2ZmX3RmX3JlYWQuCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKKyAqCisgKglSRVRVUk5TOgorICoJdHJ1ZSBpbmRpY2F0aW5nIHRoYXQgcmVzdWx0IFRGIGlzIHN1Y2Nlc3NmdWxseSBmaWxsZWQuCisgKi8KK2Jvb2wgYXRhX3NmZl9xY19maWxsX3J0ZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXFjLT5hcC0+b3BzLT5zZmZfdGZfcmVhZChxYy0+YXAsICZxYy0+cmVzdWx0X3RmKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKglhdGFfc2ZmX2hvc3RfaW50ciAtIEhhbmRsZSBob3N0IGludGVycnVwdCBmb3IgZ2l2ZW4gKHBvcnQsIHRhc2spCisgKglAYXA6IFBvcnQgb24gd2hpY2ggaW50ZXJydXB0IGFycml2ZWQgKHBvc3NpYmx5Li4uKQorICoJQHFjOiBUYXNrZmlsZSBjdXJyZW50bHkgYWN0aXZlIGluIGVuZ2luZQorICoKKyAqCUhhbmRsZSBob3N0IGludGVycnVwdCBmb3IgZ2l2ZW4gcXVldWVkIGNvbW1hbmQuICBDdXJyZW50bHksCisgKglvbmx5IERNQSBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkLiAgQWxsIG90aGVyIGNvbW1hbmRzIGFyZQorICoJaGFuZGxlZCB2aWEgcG9sbGluZyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKG5JRU4gYml0KS4KKyAqCisgKglMT0NLSU5HOgorICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdCBsb2NrKQorICoKKyAqCVJFVFVSTlM6CisgKglPbmUgaWYgaW50ZXJydXB0IHdhcyBoYW5kbGVkLCB6ZXJvIGlmIG5vdCAoc2hhcmVkIGlycSkuCisgKi8KK2lubGluZSB1bnNpZ25lZCBpbnQgYXRhX3NmZl9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkgICAgICBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmFwLT5saW5rLmVoX2luZm87CisJdTggc3RhdHVzLCBob3N0X3N0YXQgPSAwOworCisJVlBSSU5USygiYXRhJXU6IHByb3RvY29sICVkIHRhc2tfc3RhdGUgJWRcbiIsCisJCWFwLT5wcmludF9pZCwgcWMtPnRmLnByb3RvY29sLCBhcC0+aHNtX3Rhc2tfc3RhdGUpOworCisJLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgZXhwZWN0aW5nIGludGVycnVwdCBpbiB0aGlzIHN0YXRlICovCisJc3dpdGNoIChhcC0+aHNtX3Rhc2tfc3RhdGUpIHsKKwljYXNlIEhTTV9TVF9GSVJTVDoKKwkJLyogU29tZSBwcmUtQVRBUEktNCBkZXZpY2VzIGFzc2VydCBJTlRSUQorCQkgKiBhdCB0aGlzIHN0YXRlIHdoZW4gcmVhZHkgdG8gcmVjZWl2ZSBDREIuCisJCSAqLworCisJCS8qIENoZWNrIHRoZSBBVEFfREZMQUdfQ0RCX0lOVFIgZmxhZyBpcyBlbm91Z2ggaGVyZS4KKwkJICogVGhlIGZsYWcgd2FzIHR1cm5lZCBvbiBvbmx5IGZvciBhdGFwaSBkZXZpY2VzLiAgTm8KKwkJICogbmVlZCB0byBjaGVjayBhdGFfaXNfYXRhcGkocWMtPnRmLnByb3RvY29sKSBhZ2Fpbi4KKwkJICovCisJCWlmICghKHFjLT5kZXYtPmZsYWdzICYgQVRBX0RGTEFHX0NEQl9JTlRSKSkKKwkJCWdvdG8gaWRsZV9pcnE7CisJCWJyZWFrOworCWNhc2UgSFNNX1NUX0xBU1Q6CisJCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfRE1BIHx8CisJCSAgICBxYy0+dGYucHJvdG9jb2wgPT0gQVRBUElfUFJPVF9ETUEpIHsKKwkJCS8qIGNoZWNrIHN0YXR1cyBvZiBETUEgZW5naW5lICovCisJCQlob3N0X3N0YXQgPSBhcC0+b3BzLT5ibWRtYV9zdGF0dXMoYXApOworCQkJVlBSSU5USygiYXRhJXU6IGhvc3Rfc3RhdCAweCVYXG4iLAorCQkJCWFwLT5wcmludF9pZCwgaG9zdF9zdGF0KTsKKworCQkJLyogaWYgaXQncyBub3Qgb3VyIGlycS4uLiAqLworCQkJaWYgKCEoaG9zdF9zdGF0ICYgQVRBX0RNQV9JTlRSKSkKKwkJCQlnb3RvIGlkbGVfaXJxOworCisJCQkvKiBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSwgY2xlYXIgRE1BLVN0YXJ0IGJpdCAqLworCQkJYXAtPm9wcy0+Ym1kbWFfc3RvcChxYyk7CisKKwkJCWlmICh1bmxpa2VseShob3N0X3N0YXQgJiBBVEFfRE1BX0VSUikpIHsKKwkJCQkvKiBlcnJvciB3aGVuIHRyYW5zZmVyaW5nIGRhdGEgdG8vZnJvbSBtZW1vcnkgKi8KKwkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hPU1RfQlVTOworCQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBIU01fU1Q6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gaWRsZV9pcnE7CisJfQorCisJLyogY2hlY2sgYWx0c3RhdHVzICovCisJc3RhdHVzID0gYXRhX3NmZl9hbHRzdGF0dXMoYXApOworCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkKKwkJZ290byBpZGxlX2lycTsKKworCS8qIGNoZWNrIG1haW4gc3RhdHVzLCBjbGVhcmluZyBJTlRSUSAqLworCXN0YXR1cyA9IGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOworCWlmICh1bmxpa2VseShzdGF0dXMgJiBBVEFfQlVTWSkpCisJCWdvdG8gaWRsZV9pcnE7CisKKwkvKiBhY2sgYm1kbWEgaXJxIGV2ZW50cyAqLworCWFwLT5vcHMtPnNmZl9pcnFfY2xlYXIoYXApOworCisJYXRhX3NmZl9oc21fbW92ZShhcCwgcWMsIHN0YXR1cywgMCk7CisKKwlpZiAodW5saWtlbHkocWMtPmVycl9tYXNrKSAmJiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX0RNQSB8fAorCQkJCSAgICAgICBxYy0+dGYucHJvdG9jb2wgPT0gQVRBUElfUFJPVF9ETUEpKQorCQlhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJCTURNQSBzdGF0IDB4JXgiLCBob3N0X3N0YXQpOworCisJcmV0dXJuIDE7CS8qIGlycSBoYW5kbGVkICovCisKK2lkbGVfaXJxOgorCWFwLT5zdGF0cy5pZGxlX2lycSsrOworCisjaWZkZWYgQVRBX0lSUV9UUkFQCisJaWYgKChhcC0+c3RhdHMuaWRsZV9pcnEgJSAxMDAwKSA9PSAwKSB7CisJCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOworCQlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJpcnEgdHJhcFxuIik7CisJCXJldHVybiAxOworCX0KKyNlbmRpZgorCXJldHVybiAwOwkvKiBpcnEgbm90IGhhbmRsZWQgKi8KK30KKworLyoqCisgKglhdGFfc2ZmX2ludGVycnVwdCAtIERlZmF1bHQgQVRBIGhvc3QgaW50ZXJydXB0IGhhbmRsZXIKKyAqCUBpcnE6IGlycSBsaW5lICh1bnVzZWQpCisgKglAZGV2X2luc3RhbmNlOiBwb2ludGVyIHRvIG91ciBhdGFfaG9zdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKglEZWZhdWx0IGludGVycnVwdCBoYW5kbGVyIGZvciBQQ0kgSURFIGRldmljZXMuICBDYWxscworICoJYXRhX3NmZl9ob3N0X2ludHIoKSBmb3IgZWFjaCBwb3J0IHRoYXQgaXMgbm90IGRpc2FibGVkLgorICoKKyAqCUxPQ0tJTkc6CisgKglPYnRhaW5zIGhvc3QgbG9jayBkdXJpbmcgb3BlcmF0aW9uLgorICoKKyAqCVJFVFVSTlM6CisgKglJUlFfTk9ORSBvciBJUlFfSEFORExFRC4KKyAqLworaXJxcmV0dXJuX3QgYXRhX3NmZl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9pbnN0YW5jZTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFRPRE86IG1ha2UgX2lycXNhdmUgY29uZGl0aW9uYWwgb24geDg2IFBDSSBJREUgbGVnYWN5IG1vZGUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCisJCWFwID0gaG9zdC0+cG9ydHNbaV07CisJCWlmIChhcCAmJgorCQkgICAgIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpIHsKKwkJCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CisKKwkJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKKwkJCWlmIChxYyAmJiAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykpICYmCisJCQkgICAgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSkKKwkJCQloYW5kbGVkIHw9IGF0YV9zZmZfaG9zdF9pbnRyKGFwLCBxYyk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworLyoqCisgKglhdGFfc2ZmX2ZyZWV6ZSAtIEZyZWV6ZSBTRkYgY29udHJvbGxlciBwb3J0CisgKglAYXA6IHBvcnQgdG8gZnJlZXplCisgKgorICoJRnJlZXplIEJNRE1BIGNvbnRyb2xsZXIgcG9ydC4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCit2b2lkIGF0YV9zZmZfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKKworCWFwLT5jdGwgfD0gQVRBX05JRU47CisJYXAtPmxhc3RfY3RsID0gYXAtPmN0bDsKKworCWlmIChpb2FkZHItPmN0bF9hZGRyKQorCQlpb3dyaXRlOChhcC0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKworCS8qIFVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgc29tZSBjb250cm9sbGVycyByYWlzZSBJUlEgb24KKwkgKiBBVEFfTklFTiBtYW5pcHVsYXRpb24uICBBbHNvLCBtYW55IGNvbnRyb2xsZXJzIGZhaWwgdG8gbWFzaworCSAqIHByZXZpb3VzbHkgcGVuZGluZyBJUlEgb24gQVRBX05JRU4gYXNzZXJ0aW9uLiAgQ2xlYXIgaXQuCisJICovCisJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisKKwlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKK30KKworLyoqCisgKglhdGFfc2ZmX3RoYXcgLSBUaGF3IFNGRiBjb250cm9sbGVyIHBvcnQKKyAqCUBhcDogcG9ydCB0byB0aGF3CisgKgorICoJVGhhdyBTRkYgY29udHJvbGxlciBwb3J0LgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3ZvaWQgYXRhX3NmZl90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJLyogY2xlYXIgJiByZS1lbmFibGUgaW50ZXJydXB0cyAqLworCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOworCWFwLT5vcHMtPnNmZl9pcnFfY2xlYXIoYXApOworCWFwLT5vcHMtPnNmZl9pcnFfb24oYXApOworfQorCisvKioKKyAqCWF0YV9zZmZfcHJlcmVzZXQgLSBwcmVwYXJlIFNGRiBsaW5rIGZvciByZXNldAorICoJQGxpbms6IFNGRiBsaW5rIHRvIGJlIHJlc2V0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KKyAqCisgKglTRkYgbGluayBAbGluayBpcyBhYm91dCB0byBiZSByZXNldC4gIEluaXRpYWxpemUgaXQuICBJdCBmaXJzdAorICoJY2FsbHMgYXRhX3N0ZF9wcmVyZXNldCgpIGFuZCB3YWl0IGZvciAhQlNZIGlmIHRoZSBwb3J0IGlzCisgKgliZWluZyBzb2Z0cmVzZXQuCisgKgorICoJTE9DS0lORzoKKyAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQorICoKKyAqCVJFVFVSTlM6CisgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCisgKi8KK2ludCBhdGFfc2ZmX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlzdHJ1Y3QgYXRhX2VoX2NvbnRleHQgKmVoYyA9ICZsaW5rLT5laF9jb250ZXh0OworCWludCByYzsKKworCXJjID0gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBpZiB3ZSdyZSBhYm91dCB0byBkbyBoYXJkcmVzZXQsIG5vdGhpbmcgbW9yZSB0byBkbyAqLworCWlmIChlaGMtPmkuYWN0aW9uICYgQVRBX0VIX0hBUkRSRVNFVCkKKwkJcmV0dXJuIDA7CisKKwkvKiB3YWl0IGZvciAhQlNZIGlmIHdlIGRvbid0IGtub3cgdGhhdCBubyBkZXZpY2UgaXMgYXR0YWNoZWQgKi8KKwlpZiAoIWF0YV9saW5rX29mZmxpbmUobGluaykpIHsKKwkJcmMgPSBhdGFfc2ZmX3dhaXRfcmVhZHkobGluaywgZGVhZGxpbmUpOworCQlpZiAocmMgJiYgcmMgIT0gLUVOT0RFVikgeworCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywgImRldmljZSBub3QgcmVhZHkgIgorCQkJCQkiKGVycm5vPSVkKSwgZm9yY2luZyBoYXJkcmVzZXRcbiIsIHJjKTsKKwkJCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX0hBUkRSRVNFVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqCWF0YV9kZXZjaGsgLSBQQVRBIGRldmljZSBwcmVzZW5jZSBkZXRlY3Rpb24KKyAqCUBhcDogQVRBIGNoYW5uZWwgdG8gZXhhbWluZQorICoJQGRldmljZTogRGV2aWNlIHRvIGV4YW1pbmUgKHN0YXJ0aW5nIGF0IHplcm8pCisgKgorICoJVGhpcyB0ZWNobmlxdWUgd2FzIG9yaWdpbmFsbHkgZGVzY3JpYmVkIGluCisgKglIYWxlIExhbmRpcydzIEFUQURSVlIgKHd3dy5hdGEtYXRhcGkuY29tKSwgYW5kCisgKglsYXRlciBmb3VuZCBpdHMgd2F5IGludG8gdGhlIEFUQS9BVEFQSSBzcGVjLgorICoKKyAqCVdyaXRlIGEgcGF0dGVybiB0byB0aGUgQVRBIHNoYWRvdyByZWdpc3RlcnMsCisgKglhbmQgaWYgYSBkZXZpY2UgaXMgcHJlc2VudCwgaXQgd2lsbCByZXNwb25kIGJ5CisgKgljb3JyZWN0bHkgc3RvcmluZyBhbmQgZWNob2luZyBiYWNrIHRoZQorICoJQVRBIHNoYWRvdyByZWdpc3RlciBjb250ZW50cy4KKyAqCisgKglMT0NLSU5HOgorICoJY2FsbGVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0YV9kZXZjaGsoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSkKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCXU4IG5zZWN0LCBsYmFsOworCisJYXAtPm9wcy0+c2ZmX2Rldl9zZWxlY3QoYXAsIGRldmljZSk7CisKKwlpb3dyaXRlOCgweDU1LCBpb2FkZHItPm5zZWN0X2FkZHIpOworCWlvd3JpdGU4KDB4YWEsIGlvYWRkci0+bGJhbF9hZGRyKTsKKworCWlvd3JpdGU4KDB4YWEsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJaW93cml0ZTgoMHg1NSwgaW9hZGRyLT5sYmFsX2FkZHIpOworCisJaW93cml0ZTgoMHg1NSwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwlpb3dyaXRlOCgweGFhLCBpb2FkZHItPmxiYWxfYWRkcik7CisKKwluc2VjdCA9IGlvcmVhZDgoaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwlsYmFsID0gaW9yZWFkOChpb2FkZHItPmxiYWxfYWRkcik7CisKKwlpZiAoKG5zZWN0ID09IDB4NTUpICYmIChsYmFsID09IDB4YWEpKQorCQlyZXR1cm4gMTsJLyogd2UgZm91bmQgYSBkZXZpY2UgKi8KKworCXJldHVybiAwOwkJLyogbm90aGluZyBmb3VuZCAqLworfQorCisvKioKKyAqCWF0YV9zZmZfZGV2X2NsYXNzaWZ5IC0gUGFyc2UgcmV0dXJuZWQgQVRBIGRldmljZSBzaWduYXR1cmUKKyAqCUBkZXY6IEFUQSBkZXZpY2UgdG8gY2xhc3NpZnkgKHN0YXJ0aW5nIGF0IHplcm8pCisgKglAcHJlc2VudDogZGV2aWNlIHNlZW1zIHByZXNlbnQKKyAqCUByX2VycjogVmFsdWUgb2YgZXJyb3IgcmVnaXN0ZXIgb24gY29tcGxldGlvbgorICoKKyAqCUFmdGVyIGFuIGV2ZW50IC0tIFNSU1QsIEUuRC5ELiwgb3IgU0FUQSBDT01SRVNFVCAtLSBvY2N1cnMsCisgKglhbiBBVEEvQVRBUEktZGVmaW5lZCBzZXQgb2YgdmFsdWVzIGlzIHBsYWNlZCBpbiB0aGUgQVRBCisgKglzaGFkb3cgcmVnaXN0ZXJzLCBpbmRpY2F0aW5nIHRoZSByZXN1bHRzIG9mIGRldmljZSBkZXRlY3Rpb24KKyAqCWFuZCBkaWFnbm9zdGljcy4KKyAqCisgKglTZWxlY3QgdGhlIEFUQSBkZXZpY2UsIGFuZCByZWFkIHRoZSB2YWx1ZXMgZnJvbSB0aGUgQVRBIHNoYWRvdworICoJcmVnaXN0ZXJzLiAgVGhlbiBwYXJzZSBhY2NvcmRpbmcgdG8gdGhlIEVycm9yIHJlZ2lzdGVyIHZhbHVlLAorICoJYW5kIHRoZSBzcGVjLWRlZmluZWQgdmFsdWVzIGV4YW1pbmVkIGJ5IGF0YV9kZXZfY2xhc3NpZnkoKS4KKyAqCisgKglMT0NLSU5HOgorICoJY2FsbGVyLgorICoKKyAqCVJFVFVSTlM6CisgKglEZXZpY2UgdHlwZSAtICVBVEFfREVWX0FUQSwgJUFUQV9ERVZfQVRBUEkgb3IgJUFUQV9ERVZfTk9ORS4KKyAqLwordW5zaWduZWQgaW50IGF0YV9zZmZfZGV2X2NsYXNzaWZ5KHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIGludCBwcmVzZW50LAorCQkJCSAgdTggKnJfZXJyKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBkZXYtPmxpbmstPmFwOworCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CisJdW5zaWduZWQgaW50IGNsYXNzOworCXU4IGVycjsKKworCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCBkZXYtPmRldm5vKTsKKworCW1lbXNldCgmdGYsIDAsIHNpemVvZih0ZikpOworCisJYXAtPm9wcy0+c2ZmX3RmX3JlYWQoYXAsICZ0Zik7CisJZXJyID0gdGYuZmVhdHVyZTsKKwlpZiAocl9lcnIpCisJCSpyX2VyciA9IGVycjsKKworCS8qIHNlZSBpZiBkZXZpY2UgcGFzc2VkIGRpYWdzOiBjb250aW51ZSBhbmQgd2FybiBsYXRlciAqLworCWlmIChlcnIgPT0gMCkKKwkJLyogZGlhZ25vc3RpYyBmYWlsIDogZG8gbm90aGluZyBfWUVUXyAqLworCQlkZXYtPmhvcmthZ2UgfD0gQVRBX0hPUktBR0VfRElBR05PU1RJQzsKKwllbHNlIGlmIChlcnIgPT0gMSkKKwkJLyogZG8gbm90aGluZyAqLyA7CisJZWxzZSBpZiAoKGRldi0+ZGV2bm8gPT0gMCkgJiYgKGVyciA9PSAweDgxKSkKKwkJLyogZG8gbm90aGluZyAqLyA7CisJZWxzZQorCQlyZXR1cm4gQVRBX0RFVl9OT05FOworCisJLyogZGV0ZXJtaW5lIGlmIGRldmljZSBpcyBBVEEgb3IgQVRBUEkgKi8KKwljbGFzcyA9IGF0YV9kZXZfY2xhc3NpZnkoJnRmKTsKKworCWlmIChjbGFzcyA9PSBBVEFfREVWX1VOS05PV04pIHsKKwkJLyogSWYgdGhlIGRldmljZSBmYWlsZWQgZGlhZ25vc3RpYywgaXQncyBsaWtlbHkgdG8KKwkJICogaGF2ZSByZXBvcnRlZCBpbmNvcnJlY3QgZGV2aWNlIHNpZ25hdHVyZSB0b28uCisJCSAqIEFzc3VtZSBBVEEgZGV2aWNlIGlmIHRoZSBkZXZpY2Ugc2VlbXMgcHJlc2VudCBidXQKKwkJICogZGV2aWNlIHNpZ25hdHVyZSBpcyBpbnZhbGlkIHdpdGggZGlhZ25vc3RpYworCQkgKiBmYWlsdXJlLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgJiYgKGRldi0+aG9ya2FnZSAmIEFUQV9IT1JLQUdFX0RJQUdOT1NUSUMpKQorCQkJY2xhc3MgPSBBVEFfREVWX0FUQTsKKwkJZWxzZQorCQkJY2xhc3MgPSBBVEFfREVWX05PTkU7CisJfSBlbHNlIGlmICgoY2xhc3MgPT0gQVRBX0RFVl9BVEEpICYmCisJCSAgIChhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKSA9PSAwKSkKKwkJY2xhc3MgPSBBVEFfREVWX05PTkU7CisKKwlyZXR1cm4gY2xhc3M7Cit9CisKKy8qKgorICoJYXRhX3NmZl93YWl0X2FmdGVyX3Jlc2V0IC0gd2FpdCBmb3IgZGV2aWNlcyB0byBiZWNvbWUgcmVhZHkgYWZ0ZXIgcmVzZXQKKyAqCUBsaW5rOiBTRkYgbGluayB3aGljaCBpcyBqdXN0IHJlc2V0CisgKglAZGV2bWFzazogbWFzayBvZiBwcmVzZW50IGRldmljZXMKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgorICoKKyAqCVdhaXQgZGV2aWNlcyBhdHRhY2hlZCB0byBTRkYgQGxpbmsgdG8gYmVjb21lIHJlYWR5IGFmdGVyCisgKglyZXNldC4gIEl0IGNvbnRhaW5zIHByZWNlZGluZyAxNTBtcyB3YWl0IHRvIGF2b2lkIGFjY2Vzc2luZyBURgorICoJc3RhdHVzIHJlZ2lzdGVyIHRvbyBlYXJseS4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApLgorICoKKyAqCVJFVFVSTlM6CisgKgkwIG9uIHN1Y2Nlc3MsIC1FTk9ERVYgaWYgc29tZSBvciBhbGwgb2YgZGV2aWNlcyBpbiBAZGV2bWFzaworICoJZG9uJ3Qgc2VlbSB0byBleGlzdC4gIC1lcnJubyBvbiBvdGhlciBlcnJvcnMuCisgKi8KK2ludCBhdGFfc2ZmX3dhaXRfYWZ0ZXJfcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgZGV2bWFzaywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CisJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKKwl1bnNpZ25lZCBpbnQgZGV2MCA9IGRldm1hc2sgJiAoMSA8PCAwKTsKKwl1bnNpZ25lZCBpbnQgZGV2MSA9IGRldm1hc2sgJiAoMSA8PCAxKTsKKwlpbnQgcmMsIHJldCA9IDA7CisKKwltc2xlZXAoQVRBX1dBSVRfQUZURVJfUkVTRVRfTVNFQ1MpOworCisJLyogYWx3YXlzIGNoZWNrIHJlYWRpbmVzcyBvZiB0aGUgbWFzdGVyIGRldmljZSAqLworCXJjID0gYXRhX3NmZl93YWl0X3JlYWR5KGxpbmssIGRlYWRsaW5lKTsKKwkvKiAtRU5PREVWIG1lYW5zIHRoZSBvZGQgY2xvd24gZm9yZ290IHRoZSBENyBwdWxsZG93biByZXNpc3RvcgorCSAqIGFuZCBURiBzdGF0dXMgaXMgMHhmZiwgYmFpbCBvdXQgb24gaXQgdG9vLgorCSAqLworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogaWYgZGV2aWNlIDEgd2FzIGZvdW5kIGluIGF0YV9kZXZjaGssIHdhaXQgZm9yIHJlZ2lzdGVyCisJICogYWNjZXNzIGJyaWVmbHksIHRoZW4gd2FpdCBmb3IgQlNZIHRvIGNsZWFyLgorCSAqLworCWlmIChkZXYxKSB7CisJCWludCBpOworCisJCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCAxKTsKKworCQkvKiBXYWl0IGZvciByZWdpc3RlciBhY2Nlc3MuICBTb21lIEFUQVBJIGRldmljZXMgZmFpbAorCQkgKiB0byBzZXQgbnNlY3QvbGJhbCBhZnRlciByZXNldCwgc28gZG9uJ3Qgd2FzdGUgdG9vCisJCSAqIG11Y2ggdGltZSBvbiBpdC4gIFdlJ3JlIGdvbm5hIHdhaXQgZm9yICFCU1kgYW55d2F5LgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJdTggbnNlY3QsIGxiYWw7CisKKwkJCW5zZWN0ID0gaW9yZWFkOChpb2FkZHItPm5zZWN0X2FkZHIpOworCQkJbGJhbCA9IGlvcmVhZDgoaW9hZGRyLT5sYmFsX2FkZHIpOworCQkJaWYgKChuc2VjdCA9PSAxKSAmJiAobGJhbCA9PSAxKSkKKwkJCQlicmVhazsKKwkJCW1zbGVlcCg1MCk7CS8qIGdpdmUgZHJpdmUgYSBicmVhdGhlciAqLworCQl9CisKKwkJcmMgPSBhdGFfc2ZmX3dhaXRfcmVhZHkobGluaywgZGVhZGxpbmUpOworCQlpZiAocmMpIHsKKwkJCWlmIChyYyAhPSAtRU5PREVWKQorCQkJCXJldHVybiByYzsKKwkJCXJldCA9IHJjOworCQl9CisJfQorCisJLyogaXMgYWxsIHRoaXMgcmVhbGx5IG5lY2Vzc2FyeT8gKi8KKwlhcC0+b3BzLT5zZmZfZGV2X3NlbGVjdChhcCwgMCk7CisJaWYgKGRldjEpCisJCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCAxKTsKKwlpZiAoZGV2MCkKKwkJYXAtPm9wcy0+c2ZmX2Rldl9zZWxlY3QoYXAsIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGFfYnVzX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2bWFzaywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCisJRFBSSU5USygiYXRhJXU6IGJ1cyByZXNldCB2aWEgU1JTVFxuIiwgYXAtPnByaW50X2lkKTsKKworCS8qIHNvZnR3YXJlIHJlc2V0LiAgY2F1c2VzIGRldjAgdG8gYmUgc2VsZWN0ZWQgKi8KKwlpb3dyaXRlOChhcC0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKwl1ZGVsYXkoMjApOwkvKiBGSVhNRTogZmx1c2ggKi8KKwlpb3dyaXRlOChhcC0+Y3RsIHwgQVRBX1NSU1QsIGlvYWRkci0+Y3RsX2FkZHIpOworCXVkZWxheSgyMCk7CS8qIEZJWE1FOiBmbHVzaCAqLworCWlvd3JpdGU4KGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCisJLyogd2FpdCB0aGUgcG9ydCB0byBiZWNvbWUgcmVhZHkgKi8KKwlyZXR1cm4gYXRhX3NmZl93YWl0X2FmdGVyX3Jlc2V0KCZhcC0+bGluaywgZGV2bWFzaywgZGVhZGxpbmUpOworfQorCisvKioKKyAqCWF0YV9zZmZfc29mdHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBBVEEgU1JTVAorICoJQGxpbms6IEFUQSBsaW5rIHRvIHJlc2V0CisgKglAY2xhc3NlczogcmVzdWx0aW5nIGNsYXNzZXMgb2YgYXR0YWNoZWQgZGV2aWNlcworICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCisgKgorICoJUmVzZXQgaG9zdCBwb3J0IHVzaW5nIEFUQSBTUlNULgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKKyAqCisgKglSRVRVUk5TOgorICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLgorICovCitpbnQgYXRhX3NmZl9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOworCXVuc2lnbmVkIGludCBzbGF2ZV9wb3NzaWJsZSA9IGFwLT5mbGFncyAmIEFUQV9GTEFHX1NMQVZFX1BPU1M7CisJdW5zaWduZWQgaW50IGRldm1hc2sgPSAwOworCWludCByYzsKKwl1OCBlcnI7CisKKwlEUFJJTlRLKCJFTlRFUlxuIik7CisKKwkvKiBkZXRlcm1pbmUgaWYgZGV2aWNlIDAvMSBhcmUgcHJlc2VudCAqLworCWlmIChhdGFfZGV2Y2hrKGFwLCAwKSkKKwkJZGV2bWFzayB8PSAoMSA8PCAwKTsKKwlpZiAoc2xhdmVfcG9zc2libGUgJiYgYXRhX2RldmNoayhhcCwgMSkpCisJCWRldm1hc2sgfD0gKDEgPDwgMSk7CisKKwkvKiBzZWxlY3QgZGV2aWNlIDAgYWdhaW4gKi8KKwlhcC0+b3BzLT5zZmZfZGV2X3NlbGVjdChhcCwgMCk7CisKKwkvKiBpc3N1ZSBidXMgcmVzZXQgKi8KKwlEUFJJTlRLKCJhYm91dCB0byBzb2Z0cmVzZXQsIGRldm1hc2s9JXhcbiIsIGRldm1hc2spOworCXJjID0gYXRhX2J1c19zb2Z0cmVzZXQoYXAsIGRldm1hc2ssIGRlYWRsaW5lKTsKKwkvKiBpZiBsaW5rIGlzIG9jY3VwaWVkLCAtRU5PREVWIHRvbyBpcyBhbiBlcnJvciAqLworCWlmIChyYyAmJiAocmMgIT0gLUVOT0RFViB8fCBzYXRhX3Njcl92YWxpZChsaW5rKSkpIHsKKwkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fRVJSLCAiU1JTVCBmYWlsZWQgKGVycm5vPSVkKVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogZGV0ZXJtaW5lIGJ5IHNpZ25hdHVyZSB3aGV0aGVyIHdlIGhhdmUgQVRBIG9yIEFUQVBJIGRldmljZXMgKi8KKwljbGFzc2VzWzBdID0gYXRhX3NmZl9kZXZfY2xhc3NpZnkoJmxpbmstPmRldmljZVswXSwKKwkJCQkJICBkZXZtYXNrICYgKDEgPDwgMCksICZlcnIpOworCWlmIChzbGF2ZV9wb3NzaWJsZSAmJiBlcnIgIT0gMHg4MSkKKwkJY2xhc3Nlc1sxXSA9IGF0YV9zZmZfZGV2X2NsYXNzaWZ5KCZsaW5rLT5kZXZpY2VbMV0sCisJCQkJCQkgIGRldm1hc2sgJiAoMSA8PCAxKSwgJmVycik7CisKKwlEUFJJTlRLKCJFWElULCBjbGFzc2VzWzBdPSV1IFsxXT0ldVxuIiwgY2xhc3Nlc1swXSwgY2xhc3Nlc1sxXSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJc2F0YV9zZmZfaGFyZHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBTQVRBIHBoeSByZXNldAorICoJQGxpbms6IGxpbmsgdG8gcmVzZXQKKyAqCUBjbGFzczogcmVzdWx0aW5nIGNsYXNzIG9mIGF0dGFjaGVkIGRldmljZQorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCisgKgorICoJU0FUQSBwaHktcmVzZXQgaG9zdCBwb3J0IHVzaW5nIERFVCBiaXRzIG9mIFNDb250cm9sIHJlZ2lzdGVyLAorICoJd2FpdCBmb3IgIUJTWSBhbmQgY2xhc3NpZnkgdGhlIGF0dGFjaGVkIGRldmljZS4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IHNhdGFfc2ZmX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQoreworCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmxpbmstPmVoX2NvbnRleHQ7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nID0gc2F0YV9laGNfZGViX3RpbWluZyhlaGMpOworCWJvb2wgb25saW5lOworCWludCByYzsKKworCXJjID0gc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCB0aW1pbmcsIGRlYWRsaW5lLCAmb25saW5lLAorCQkJCSBhdGFfc2ZmX2NoZWNrX3JlYWR5KTsKKwlpZiAob25saW5lKQorCQkqY2xhc3MgPSBhdGFfc2ZmX2Rldl9jbGFzc2lmeShsaW5rLT5kZXZpY2UsIDEsIE5VTEwpOworCisJRFBSSU5USygiRVhJVCwgY2xhc3M9JXVcbiIsICpjbGFzcyk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqCWF0YV9zZmZfcG9zdHJlc2V0IC0gU0ZGIHBvc3RyZXNldCBjYWxsYmFjaworICoJQGxpbms6IHRoZSB0YXJnZXQgU0ZGIGF0YV9saW5rCisgKglAY2xhc3NlczogY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCisgKgorICoJVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZXNldC4gIEl0IGZpcnN0CisgKgljYWxscyBhdGFfc3RkX3Bvc3RyZXNldCgpIGFuZCBwZXJmb3JtcyBTRkYgc3BlY2lmaWMgcG9zdHJlc2V0CisgKglwcm9jZXNzaW5nLgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKKyAqLwordm9pZCBhdGFfc2ZmX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CisKKwlhdGFfc3RkX3Bvc3RyZXNldChsaW5rLCBjbGFzc2VzKTsKKworCS8qIGlzIGRvdWJsZS1zZWxlY3QgcmVhbGx5IG5lY2Vzc2FyeT8gKi8KKwlpZiAoY2xhc3Nlc1swXSAhPSBBVEFfREVWX05PTkUpCisJCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCAxKTsKKwlpZiAoY2xhc3Nlc1sxXSAhPSBBVEFfREVWX05PTkUpCisJCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCAwKTsKKworCS8qIGJhaWwgb3V0IGlmIG5vIGRldmljZSBpcyBwcmVzZW50ICovCisJaWYgKGNsYXNzZXNbMF0gPT0gQVRBX0RFVl9OT05FICYmIGNsYXNzZXNbMV0gPT0gQVRBX0RFVl9OT05FKSB7CisJCURQUklOVEsoIkVYSVQsIG5vIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZXQgdXAgZGV2aWNlIGNvbnRyb2wgKi8KKwlpZiAoYXAtPmlvYWRkci5jdGxfYWRkcikKKwkJaW93cml0ZTgoYXAtPmN0bCwgYXAtPmlvYWRkci5jdGxfYWRkcik7Cit9CisKKy8qKgorICoJYXRhX3NmZl9lcnJvcl9oYW5kbGVyIC0gU3RvY2sgZXJyb3IgaGFuZGxlciBmb3IgQk1ETUEgY29udHJvbGxlcgorICoJQGFwOiBwb3J0IHRvIGhhbmRsZSBlcnJvciBmb3IKKyAqCisgKglTdG9jayBlcnJvciBoYW5kbGVyIGZvciBTRkYgY29udHJvbGxlci4gIEl0IGNhbiBoYW5kbGUgYm90aAorICoJUEFUQSBhbmQgU0FUQSBjb250cm9sbGVycy4gIE1hbnkgY29udHJvbGxlcnMgc2hvdWxkIGJlIGFibGUgdG8KKyAqCXVzZSB0aGlzIEVIIGFzLWlzIG9yIHdpdGggc29tZSBhZGRlZCBoYW5kbGluZyBiZWZvcmUgYW5kCisgKglhZnRlci4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKi8KK3ZvaWQgYXRhX3NmZl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJYXRhX3Jlc2V0X2ZuX3Qgc29mdHJlc2V0ID0gYXAtPm9wcy0+c29mdHJlc2V0OworCWF0YV9yZXNldF9mbl90IGhhcmRyZXNldCA9IGFwLT5vcHMtPmhhcmRyZXNldDsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRoYXcgPSAwOworCisJcWMgPSBfX2F0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7CisJaWYgKHFjICYmICEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19GQUlMRUQpKQorCQlxYyA9IE5VTEw7CisKKwkvKiByZXNldCBQSU8gSFNNIGFuZCBzdG9wIERNQSBlbmdpbmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOworCisJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0lETEU7CisKKwlpZiAoYXAtPmlvYWRkci5ibWRtYV9hZGRyICYmCisJICAgIHFjICYmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfRE1BIHx8CisJCSAgIHFjLT50Zi5wcm90b2NvbCA9PSBBVEFQSV9QUk9UX0RNQSkpIHsKKwkJdTggaG9zdF9zdGF0OworCisJCWhvc3Rfc3RhdCA9IGFwLT5vcHMtPmJtZG1hX3N0YXR1cyhhcCk7CisKKwkJLyogQk1ETUEgY29udHJvbGxlcnMgaW5kaWNhdGUgaG9zdCBidXMgZXJyb3IgYnkKKwkJICogc2V0dGluZyBETUFfRVJSIGJpdCBhbmQgdGltaW5nIG91dC4gIEFzIGl0IHdhc24ndAorCQkgKiByZWFsbHkgYSB0aW1lb3V0IGV2ZW50LCBhZGp1c3QgZXJyb3IgbWFzayBhbmQKKwkJICogY2FuY2VsIGZyb3plbiBzdGF0ZS4KKwkJICovCisJCWlmIChxYy0+ZXJyX21hc2sgPT0gQUNfRVJSX1RJTUVPVVQgJiYgKGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgeworCQkJcWMtPmVycl9tYXNrID0gQUNfRVJSX0hPU1RfQlVTOworCQkJdGhhdyA9IDE7CisJCX0KKworCQlhcC0+b3BzLT5ibWRtYV9zdG9wKHFjKTsKKwl9CisKKwlhdGFfc2ZmX2FsdHN0YXR1cyhhcCk7CisJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisJYXAtPm9wcy0+c2ZmX2lycV9jbGVhcihhcCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAodGhhdykKKwkJYXRhX2VoX3RoYXdfcG9ydChhcCk7CisKKwkvKiBQSU8gYW5kIERNQSBlbmdpbmVzIGhhdmUgYmVlbiBzdG9wcGVkLCBwZXJmb3JtIHJlY292ZXJ5ICovCisKKwkvKiBJZ25vcmUgYXRhX3NmZl9zb2Z0cmVzZXQgaWYgY3RsIGlzbid0IGFjY2Vzc2libGUgYW5kCisJICogYnVpbHQtaW4gaGFyZHJlc2V0cyBpZiBTQ1IgYWNjZXNzIGlzbid0IGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoc29mdHJlc2V0ID09IGF0YV9zZmZfc29mdHJlc2V0ICYmICFhcC0+aW9hZGRyLmN0bF9hZGRyKQorCQlzb2Z0cmVzZXQgPSBOVUxMOworCWlmIChhdGFfaXNfYnVpbHRpbl9oYXJkcmVzZXQoaGFyZHJlc2V0KSAmJiAhc2F0YV9zY3JfdmFsaWQoJmFwLT5saW5rKSkKKwkJaGFyZHJlc2V0ID0gTlVMTDsKKworCWF0YV9kb19laChhcCwgYXAtPm9wcy0+cHJlcmVzZXQsIHNvZnRyZXNldCwgaGFyZHJlc2V0LAorCQkgIGFwLT5vcHMtPnBvc3RyZXNldCk7Cit9CisKKy8qKgorICoJYXRhX3NmZl9wb3N0X2ludGVybmFsX2NtZCAtIFN0b2NrIHBvc3RfaW50ZXJuYWxfY21kIGZvciBTRkYgY29udHJvbGxlcgorICoJQHFjOiBpbnRlcm5hbCBjb21tYW5kIHRvIGNsZWFuIHVwCisgKgorICoJTE9DS0lORzoKKyAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQorICovCit2b2lkIGF0YV9zZmZfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpZiAocWMtPmFwLT5pb2FkZHIuYm1kbWFfYWRkcikKKwkJYXRhX2JtZG1hX3N0b3AocWMpOworfQorCisvKioKKyAqCWF0YV9zZmZfcG9ydF9zdGFydCAtIFNldCBwb3J0IHVwIGZvciBkbWEuCisgKglAYXA6IFBvcnQgdG8gaW5pdGlhbGl6ZQorICoKKyAqCUNhbGxlZCBqdXN0IGFmdGVyIGRhdGEgc3RydWN0dXJlcyBmb3IgZWFjaCBwb3J0IGFyZQorICoJaW5pdGlhbGl6ZWQuICBBbGxvY2F0ZXMgc3BhY2UgZm9yIFBSRCB0YWJsZSBpZiB0aGUgZGV2aWNlCisgKglpcyBETUEgY2FwYWJsZSBTRkYuCisgKgorICoJTWF5IGJlIHVzZWQgYXMgdGhlIHBvcnRfc3RhcnQoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK2ludCBhdGFfc2ZmX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlpZiAoYXAtPmlvYWRkci5ibWRtYV9hZGRyKQorCQlyZXR1cm4gYXRhX3BvcnRfc3RhcnQoYXApOworCXJldHVybiAwOworfQorCisvKioKKyAqCWF0YV9zZmZfc3RkX3BvcnRzIC0gaW5pdGlhbGl6ZSBpb2FkZHIgd2l0aCBzdGFuZGFyZCBwb3J0IG9mZnNldHMuCisgKglAaW9hZGRyOiBJTyBhZGRyZXNzIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAorICoKKyAqCVV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggaW5pdGlhbGl6ZXMgZGF0YV9hZGRyLCBlcnJvcl9hZGRyLAorICoJZmVhdHVyZV9hZGRyLCBuc2VjdF9hZGRyLCBsYmFsX2FkZHIsIGxiYW1fYWRkciwgbGJhaF9hZGRyLAorICoJZGV2aWNlX2FkZHIsIHN0YXR1c19hZGRyLCBhbmQgY29tbWFuZF9hZGRyIHRvIHN0YW5kYXJkIG9mZnNldHMKKyAqCXJlbGF0aXZlIHRvIGNtZF9hZGRyLgorICoKKyAqCURvZXMgbm90IHNldCBjdGxfYWRkciwgYWx0c3RhdHVzX2FkZHIsIGJtZG1hX2FkZHIsIG9yIHNjcl9hZGRyLgorICovCit2b2lkIGF0YV9zZmZfc3RkX3BvcnRzKHN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyKQoreworCWlvYWRkci0+ZGF0YV9hZGRyID0gaW9hZGRyLT5jbWRfYWRkciArIEFUQV9SRUdfREFUQTsKKwlpb2FkZHItPmVycm9yX2FkZHIgPSBpb2FkZHItPmNtZF9hZGRyICsgQVRBX1JFR19FUlI7CisJaW9hZGRyLT5mZWF0dXJlX2FkZHIgPSBpb2FkZHItPmNtZF9hZGRyICsgQVRBX1JFR19GRUFUVVJFOworCWlvYWRkci0+bnNlY3RfYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX05TRUNUOworCWlvYWRkci0+bGJhbF9hZGRyID0gaW9hZGRyLT5jbWRfYWRkciArIEFUQV9SRUdfTEJBTDsKKwlpb2FkZHItPmxiYW1fYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX0xCQU07CisJaW9hZGRyLT5sYmFoX2FkZHIgPSBpb2FkZHItPmNtZF9hZGRyICsgQVRBX1JFR19MQkFIOworCWlvYWRkci0+ZGV2aWNlX2FkZHIgPSBpb2FkZHItPmNtZF9hZGRyICsgQVRBX1JFR19ERVZJQ0U7CisJaW9hZGRyLT5zdGF0dXNfYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX1NUQVRVUzsKKwlpb2FkZHItPmNvbW1hbmRfYWRkciA9IGlvYWRkci0+Y21kX2FkZHIgKyBBVEFfUkVHX0NNRDsKK30KKwordW5zaWduZWQgbG9uZyBhdGFfYm1kbWFfbW9kZV9maWx0ZXIoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgeGZlcl9tYXNrKQoreworCS8qIEZpbHRlciBvdXQgRE1BIG1vZGVzIGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4gY29uZmlndXJlZCBieQorCSAgIHRoZSBCSU9TIGFzIFBJTyBvbmx5ICovCisKKwlpZiAoYWRldi0+bGluay0+YXAtPmlvYWRkci5ibWRtYV9hZGRyID09IE5VTEwpCisJCXhmZXJfbWFzayAmPSB+KEFUQV9NQVNLX01XRE1BIHwgQVRBX01BU0tfVURNQSk7CisJcmV0dXJuIHhmZXJfbWFzazsKIH0KIAogLyoqCkBAIC0yNDAsNyArMjE1MSw3IEBACiAJaW93cml0ZTgoZG1hY3RsLCBhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX0NNRCk7CiAKIAkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLwotCWFwLT5vcHMtPmV4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CisJYXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CiB9CiAKIC8qKgpAQCAtMjc2LDQzICsyMTg3LDYgQEAKIH0KIAogLyoqCi0gKglhdGFfYm1kbWFfaXJxX2NsZWFyIC0gQ2xlYXIgUENJIElERSBCTURNQSBpbnRlcnJ1cHQuCi0gKglAYXA6IFBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgotICoKLSAqCUNsZWFyIGludGVycnVwdCBhbmQgZXJyb3IgZmxhZ3MgaW4gRE1BIHN0YXR1cyByZWdpc3Rlci4KLSAqCi0gKglNYXkgYmUgdXNlZCBhcyB0aGUgaXJxX2NsZWFyKCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdCBsb2NrKQotICovCi12b2lkIGF0YV9ibWRtYV9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQl2b2lkIF9faW9tZW0gKm1taW8gPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7Ci0KLQlpZiAoIW1taW8pCi0JCXJldHVybjsKLQotCWlvd3JpdGU4KGlvcmVhZDgobW1pbyArIEFUQV9ETUFfU1RBVFVTKSwgbW1pbyArIEFUQV9ETUFfU1RBVFVTKTsKLX0KLQotLyoqCi0gKglhdGFfYm1kbWFfc3RhdHVzIC0gUmVhZCBQQ0kgSURFIEJNRE1BIHN0YXR1cwotICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KLSAqCi0gKglSZWFkIGFuZCByZXR1cm4gQk1ETUEgc3RhdHVzIHJlZ2lzdGVyLgotICoKLSAqCU1heSBiZSB1c2VkIGFzIHRoZSBibWRtYV9zdGF0dXMoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCi0gKi8KLXU4IGF0YV9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlyZXR1cm4gaW9yZWFkOChhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX1NUQVRVUyk7Ci19Ci0KLS8qKgogICoJYXRhX2JtZG1hX3N0b3AgLSBTdG9wIFBDSSBJREUgQk1ETUEgdHJhbnNmZXIKICAqCUBxYzogQ29tbWFuZCB3ZSBhcmUgZW5kaW5nIERNQSBmb3IKICAqCkBAIC0zMzMsMTk1ICsyMjA3LDE0NSBAQAogCQkgbW1pbyArIEFUQV9ETUFfQ01EKTsKIAogCS8qIG9uZS1QSU8tY3ljbGUgZ3VhcmFudGVlZCB3YWl0LCBwZXIgc3BlYywgZm9yIEhETUExOjAgdHJhbnNpdGlvbiAqLwotCWF0YV9hbHRzdGF0dXMoYXApOyAgICAgICAgLyogZHVtbXkgcmVhZCAqLworCWF0YV9zZmZfYWx0c3RhdHVzKGFwKTsgICAgICAgIC8qIGR1bW15IHJlYWQgKi8KIH0KIAogLyoqCi0gKglhdGFfYm1kbWFfZnJlZXplIC0gRnJlZXplIEJNRE1BIGNvbnRyb2xsZXIgcG9ydAotICoJQGFwOiBwb3J0IHRvIGZyZWV6ZQorICoJYXRhX2JtZG1hX3N0YXR1cyAtIFJlYWQgUENJIElERSBCTURNQSBzdGF0dXMKKyAqCUBhcDogUG9ydCBhc3NvY2lhdGVkIHdpdGggdGhpcyBBVEEgdHJhbnNhY3Rpb24uCiAgKgotICoJRnJlZXplIEJNRE1BIGNvbnRyb2xsZXIgcG9ydC4KKyAqCVJlYWQgYW5kIHJldHVybiBCTURNQSBzdGF0dXMgcmVnaXN0ZXIuCisgKgorICoJTWF5IGJlIHVzZWQgYXMgdGhlIGJtZG1hX3N0YXR1cygpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCiAgKgogICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKICAqLwotdm9pZCBhdGFfYm1kbWFfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApCit1OCBhdGFfYm1kbWFfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CisJcmV0dXJuIGlvcmVhZDgoYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9TVEFUVVMpOworfQorCisvKioKKyAqCWF0YV9idXNfcmVzZXQgLSByZXNldCBob3N0IHBvcnQgYW5kIGFzc29jaWF0ZWQgQVRBIGNoYW5uZWwKKyAqCUBhcDogcG9ydCB0byByZXNldAorICoKKyAqCVRoaXMgaXMgdHlwaWNhbGx5IHRoZSBmaXJzdCB0aW1lIHdlIGFjdHVhbGx5IHN0YXJ0IGlzc3VpbmcKKyAqCWNvbW1hbmRzIHRvIHRoZSBBVEEgY2hhbm5lbC4gIFdlIHdhaXQgZm9yIEJTWSB0byBjbGVhciwgdGhlbgorICoJaXNzdWUgRVhFQ1VURSBERVZJQ0UgRElBR05PU1RJQyBjb21tYW5kLCBwb2xsaW5nIGZvciBpdHMKKyAqCXJlc3VsdC4gIERldGVybWluZSB3aGF0IGRldmljZXMsIGlmIGFueSwgYXJlIG9uIHRoZSBjaGFubmVsCisgKglieSBsb29raW5nIGF0IHRoZSBkZXZpY2UgMC8xIGVycm9yIHJlZ2lzdGVyLiAgTG9vayBhdCB0aGUgc2lnbmF0dXJlCisgKglzdG9yZWQgaW4gZWFjaCBkZXZpY2UncyB0YXNrZmlsZSByZWdpc3RlcnMsIHRvIGRldGVybWluZSBpZgorICoJdGhlIGRldmljZSBpcyBBVEEgb3IgQVRBUEkuCisgKgorICoJTE9DS0lORzoKKyAqCVBDSS9ldGMuIGJ1cyBwcm9iZSBzZW0uCisgKglPYnRhaW5zIGhvc3QgbG9jay4KKyAqCisgKglTSURFIEVGRkVDVFM6CisgKglTZXRzIEFUQV9GTEFHX0RJU0FCTEVEIGlmIGJ1cyByZXNldCBmYWlscy4KKyAqCisgKglERVBSRUNBVEVEOgorICoJVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGZvciBkcml2ZXJzIHdoaWNoIHN0aWxsIHVzZSBvbGQgRUggYW5kCisgKgl3aWxsIGJlIHJlbW92ZWQgc29vbi4KKyAqLwordm9pZCBhdGFfYnVzX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGF0YV9kZXZpY2UgKmRldmljZSA9IGFwLT5saW5rLmRldmljZTsKIAlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCXVuc2lnbmVkIGludCBzbGF2ZV9wb3NzaWJsZSA9IGFwLT5mbGFncyAmIEFUQV9GTEFHX1NMQVZFX1BPU1M7CisJdTggZXJyOworCXVuc2lnbmVkIGludCBkZXYwLCBkZXYxID0gMCwgZGV2bWFzayA9IDA7CisJaW50IHJjOwogCi0JYXAtPmN0bCB8PSBBVEFfTklFTjsKLQlhcC0+bGFzdF9jdGwgPSBhcC0+Y3RsOworCURQUklOVEsoIkVOVEVSLCBob3N0ICV1LCBwb3J0ICV1XG4iLCBhcC0+cHJpbnRfaWQsIGFwLT5wb3J0X25vKTsKIAotCWlvd3JpdGU4KGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOwotCi0JLyogVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBzb21lIGNvbnRyb2xsZXJzIHJhaXNlIElSUSBvbgotCSAqIEFUQV9OSUVOIG1hbmlwdWxhdGlvbi4gIEFsc28sIG1hbnkgY29udHJvbGxlcnMgZmFpbCB0byBtYXNrCi0JICogcHJldmlvdXNseSBwZW5kaW5nIElSUSBvbiBBVEFfTklFTiBhc3NlcnRpb24uICBDbGVhciBpdC4KLQkgKi8KLQlhdGFfY2hrX3N0YXR1cyhhcCk7Ci0KLQlhcC0+b3BzLT5pcnFfY2xlYXIoYXApOwotfQotCi0vKioKLSAqCWF0YV9ibWRtYV90aGF3IC0gVGhhdyBCTURNQSBjb250cm9sbGVyIHBvcnQKLSAqCUBhcDogcG9ydCB0byB0aGF3Ci0gKgotICoJVGhhdyBCTURNQSBjb250cm9sbGVyIHBvcnQuCi0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KLSAqLwotdm9pZCBhdGFfYm1kbWFfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCS8qIGNsZWFyICYgcmUtZW5hYmxlIGludGVycnVwdHMgKi8KLQlhdGFfY2hrX3N0YXR1cyhhcCk7Ci0JYXAtPm9wcy0+aXJxX2NsZWFyKGFwKTsKLQlhcC0+b3BzLT5pcnFfb24oYXApOwotfQotCi0vKioKLSAqCWF0YV9ibWRtYV9kcml2ZV9laCAtIFBlcmZvcm0gRUggd2l0aCBnaXZlbiBtZXRob2RzIGZvciBCTURNQSBjb250cm9sbGVyCi0gKglAYXA6IHBvcnQgdG8gaGFuZGxlIGVycm9yIGZvcgotICoJQHByZXJlc2V0OiBwcmVyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQotICoJQHNvZnRyZXNldDogc29mdHJlc2V0IG1ldGhvZCAoY2FuIGJlIE5VTEwpCi0gKglAaGFyZHJlc2V0OiBoYXJkcmVzZXQgbWV0aG9kIChjYW4gYmUgTlVMTCkKLSAqCUBwb3N0cmVzZXQ6IHBvc3RyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQotICoKLSAqCUhhbmRsZSBlcnJvciBmb3IgQVRBIEJNRE1BIGNvbnRyb2xsZXIuICBJdCBjYW4gaGFuZGxlIGJvdGgKLSAqCVBBVEEgYW5kIFNBVEEgY29udHJvbGxlcnMuICBNYW55IGNvbnRyb2xsZXJzIHNob3VsZCBiZSBhYmxlIHRvCi0gKgl1c2UgdGhpcyBFSCBhcy1pcyBvciB3aXRoIHNvbWUgYWRkZWQgaGFuZGxpbmcgYmVmb3JlIGFuZAotICoJYWZ0ZXIuCi0gKgotICoJVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBjb25zdHJ1Y3RpbmcKLSAqCS0+ZXJyb3JfaGFuZGxlciBjYWxsYmFjayBieSBsb3cgbGV2ZWwgZHJpdmVycy4KLSAqCi0gKglMT0NLSU5HOgotICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCi0gKi8KLXZvaWQgYXRhX2JtZG1hX2RyaXZlX2VoKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGF0YV9wcmVyZXNldF9mbl90IHByZXJlc2V0LAotCQkJYXRhX3Jlc2V0X2ZuX3Qgc29mdHJlc2V0LCBhdGFfcmVzZXRfZm5fdCBoYXJkcmVzZXQsCi0JCQlhdGFfcG9zdHJlc2V0X2ZuX3QgcG9zdHJlc2V0KQotewotCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdGhhdyA9IDA7Ci0KLQlxYyA9IF9fYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKLQlpZiAocWMgJiYgIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0ZBSUxFRCkpCi0JCXFjID0gTlVMTDsKLQotCS8qIHJlc2V0IFBJTyBIU00gYW5kIHN0b3AgRE1BIGVuZ2luZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7Ci0KLQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfSURMRTsKLQotCWlmIChxYyAmJiAocWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX0RNQSB8fAotCQkgICBxYy0+dGYucHJvdG9jb2wgPT0gQVRBUElfUFJPVF9ETUEpKSB7Ci0JCXU4IGhvc3Rfc3RhdDsKLQotCQlob3N0X3N0YXQgPSBhcC0+b3BzLT5ibWRtYV9zdGF0dXMoYXApOwotCi0JCS8qIEJNRE1BIGNvbnRyb2xsZXJzIGluZGljYXRlIGhvc3QgYnVzIGVycm9yIGJ5Ci0JCSAqIHNldHRpbmcgRE1BX0VSUiBiaXQgYW5kIHRpbWluZyBvdXQuICBBcyBpdCB3YXNuJ3QKLQkJICogcmVhbGx5IGEgdGltZW91dCBldmVudCwgYWRqdXN0IGVycm9yIG1hc2sgYW5kCi0JCSAqIGNhbmNlbCBmcm96ZW4gc3RhdGUuCi0JCSAqLwotCQlpZiAocWMtPmVycl9tYXNrID09IEFDX0VSUl9USU1FT1VUICYmIChob3N0X3N0YXQgJiBBVEFfRE1BX0VSUikpIHsKLQkJCXFjLT5lcnJfbWFzayA9IEFDX0VSUl9IT1NUX0JVUzsKLQkJCXRoYXcgPSAxOwotCQl9Ci0KLQkJYXAtPm9wcy0+Ym1kbWFfc3RvcChxYyk7CisJLyogZGV0ZXJtaW5lIGlmIGRldmljZSAwLzEgYXJlIHByZXNlbnQgKi8KKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0FUQV9SRVNFVCkKKwkJZGV2MCA9IDE7CisJZWxzZSB7CisJCWRldjAgPSBhdGFfZGV2Y2hrKGFwLCAwKTsKKwkJaWYgKHNsYXZlX3Bvc3NpYmxlKQorCQkJZGV2MSA9IGF0YV9kZXZjaGsoYXAsIDEpOwogCX0KIAotCWF0YV9hbHRzdGF0dXMoYXApOwotCWF0YV9jaGtfc3RhdHVzKGFwKTsKLQlhcC0+b3BzLT5pcnFfY2xlYXIoYXApOworCWlmIChkZXYwKQorCQlkZXZtYXNrIHw9ICgxIDw8IDApOworCWlmIChkZXYxKQorCQlkZXZtYXNrIHw9ICgxIDw8IDEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOworCS8qIHNlbGVjdCBkZXZpY2UgMCBhZ2FpbiAqLworCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCAwKTsKIAotCWlmICh0aGF3KQotCQlhdGFfZWhfdGhhd19wb3J0KGFwKTsKKwkvKiBpc3N1ZSBidXMgcmVzZXQgKi8KKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU1JTVCkgeworCQlyYyA9IGF0YV9idXNfc29mdHJlc2V0KGFwLCBkZXZtYXNrLCBqaWZmaWVzICsgNDAgKiBIWik7CisJCWlmIChyYyAmJiByYyAhPSAtRU5PREVWKQorCQkJZ290byBlcnJfb3V0OworCX0KIAotCS8qIFBJTyBhbmQgRE1BIGVuZ2luZXMgaGF2ZSBiZWVuIHN0b3BwZWQsIHBlcmZvcm0gcmVjb3ZlcnkgKi8KLQlhdGFfZG9fZWgoYXAsIHByZXJlc2V0LCBzb2Z0cmVzZXQsIGhhcmRyZXNldCwgcG9zdHJlc2V0KTsKLX0KKwkvKgorCSAqIGRldGVybWluZSBieSBzaWduYXR1cmUgd2hldGhlciB3ZSBoYXZlIEFUQSBvciBBVEFQSSBkZXZpY2VzCisJICovCisJZGV2aWNlWzBdLmNsYXNzID0gYXRhX3NmZl9kZXZfY2xhc3NpZnkoJmRldmljZVswXSwgZGV2MCwgJmVycik7CisJaWYgKChzbGF2ZV9wb3NzaWJsZSkgJiYgKGVyciAhPSAweDgxKSkKKwkJZGV2aWNlWzFdLmNsYXNzID0gYXRhX3NmZl9kZXZfY2xhc3NpZnkoJmRldmljZVsxXSwgZGV2MSwgJmVycik7CiAKLS8qKgotICoJYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIgLSBTdG9jayBlcnJvciBoYW5kbGVyIGZvciBCTURNQSBjb250cm9sbGVyCi0gKglAYXA6IHBvcnQgdG8gaGFuZGxlIGVycm9yIGZvcgotICoKLSAqCVN0b2NrIGVycm9yIGhhbmRsZXIgZm9yIEJNRE1BIGNvbnRyb2xsZXIuCi0gKgotICoJTE9DS0lORzoKLSAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQotICovCi12b2lkIGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX3Jlc2V0X2ZuX3QgaGFyZHJlc2V0OworCS8qIGlzIGRvdWJsZS1zZWxlY3QgcmVhbGx5IG5lY2Vzc2FyeT8gKi8KKwlpZiAoZGV2aWNlWzFdLmNsYXNzICE9IEFUQV9ERVZfTk9ORSkKKwkJYXAtPm9wcy0+c2ZmX2Rldl9zZWxlY3QoYXAsIDEpOworCWlmIChkZXZpY2VbMF0uY2xhc3MgIT0gQVRBX0RFVl9OT05FKQorCQlhcC0+b3BzLT5zZmZfZGV2X3NlbGVjdChhcCwgMCk7CiAKLQloYXJkcmVzZXQgPSBOVUxMOwotCWlmIChzYXRhX3Njcl92YWxpZCgmYXAtPmxpbmspKQotCQloYXJkcmVzZXQgPSBzYXRhX3N0ZF9oYXJkcmVzZXQ7CisJLyogaWYgbm8gZGV2aWNlcyB3ZXJlIGRldGVjdGVkLCBkaXNhYmxlIHRoaXMgcG9ydCAqLworCWlmICgoZGV2aWNlWzBdLmNsYXNzID09IEFUQV9ERVZfTk9ORSkgJiYKKwkgICAgKGRldmljZVsxXS5jbGFzcyA9PSBBVEFfREVWX05PTkUpKQorCQlnb3RvIGVycl9vdXQ7CiAKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIGF0YV9zdGRfcHJlcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBoYXJkcmVzZXQsCi0JCQkgICBhdGFfc3RkX3Bvc3RyZXNldCk7Ci19CisJaWYgKGFwLT5mbGFncyAmIChBVEFfRkxBR19TQVRBX1JFU0VUIHwgQVRBX0ZMQUdfU1JTVCkpIHsKKwkJLyogc2V0IHVwIGRldmljZSBjb250cm9sIGZvciBBVEFfRkxBR19TQVRBX1JFU0VUICovCisJCWlvd3JpdGU4KGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCX0KIAotLyoqCi0gKglhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQgLSBTdG9jayBwb3N0X2ludGVybmFsX2NtZCBmb3IKLSAqCQkJCSAgICAgIEJNRE1BIGNvbnRyb2xsZXIKLSAqCUBxYzogaW50ZXJuYWwgY29tbWFuZCB0byBjbGVhbiB1cAotICoKLSAqCUxPQ0tJTkc6Ci0gKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKLSAqLwotdm9pZCBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlpZiAocWMtPmFwLT5pb2FkZHIuYm1kbWFfYWRkcikKLQkJYXRhX2JtZG1hX3N0b3AocWMpOwotfQorCURQUklOVEsoIkVYSVRcbiIpOworCXJldHVybjsKIAotLyoqCi0gKglhdGFfc2ZmX3BvcnRfc3RhcnQgLSBTZXQgcG9ydCB1cCBmb3IgZG1hLgotICoJQGFwOiBQb3J0IHRvIGluaXRpYWxpemUKLSAqCi0gKglDYWxsZWQganVzdCBhZnRlciBkYXRhIHN0cnVjdHVyZXMgZm9yIGVhY2ggcG9ydCBhcmUKLSAqCWluaXRpYWxpemVkLiAgQWxsb2NhdGVzIHNwYWNlIGZvciBQUkQgdGFibGUgaWYgdGhlIGRldmljZQotICoJaXMgRE1BIGNhcGFibGUgU0ZGLgotICoKLSAqCU1heSBiZSB1c2VkIGFzIHRoZSBwb3J0X3N0YXJ0KCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCitlcnJfb3V0OgorCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsICJkaXNhYmxpbmcgcG9ydFxuIik7CisJYXRhX3BvcnRfZGlzYWJsZShhcCk7CiAKLWludCBhdGFfc2ZmX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlpZiAoYXAtPmlvYWRkci5ibWRtYV9hZGRyKQotCQlyZXR1cm4gYXRhX3BvcnRfc3RhcnQoYXApOwotCXJldHVybiAwOworCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiAjaWZkZWYgQ09ORklHX1BDSQogCi1zdGF0aWMgaW50IGF0YV9yZXNvdXJjZXNfcHJlc2VudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHBvcnQpCisvKioKKyAqCWF0YV9wY2lfYm1kbWFfY2xlYXJfc2ltcGxleCAtCWF0dGVtcHQgdG8ga2ljayBkZXZpY2Ugb3V0IG9mIHNpbXBsZXgKKyAqCUBwZGV2OiBQQ0kgZGV2aWNlCisgKgorICoJU29tZSBQQ0kgQVRBIGRldmljZXMgcmVwb3J0IHNpbXBsZXggbW9kZSBidXQgaW4gZmFjdCBjYW4gYmUgdG9sZCB0bworICoJZW50ZXIgbm9uIHNpbXBsZXggbW9kZS4gVGhpcyBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgbG9naWMgdG8KKyAqCXBlcmZvcm0gdGhlIHRhc2sgb24gc3VjaCBkZXZpY2VzLiBDYWxsaW5nIGl0IG9uIG90aGVyIGRldmljZXMgd2lsbAorICoJaGF2ZSAtdW5kZWZpbmVkLSBiZWhhdmlvdXIuCisgKi8KK2ludCBhdGFfcGNpX2JtZG1hX2NsZWFyX3NpbXBsZXgoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgbG9uZyBibWRtYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKKwl1OCBzaW1wbGV4OwogCi0JLyogQ2hlY2sgdGhlIFBDSSByZXNvdXJjZXMgZm9yIHRoaXMgY2hhbm5lbCBhcmUgZW5hYmxlZCAqLwotCXBvcnQgPSBwb3J0ICogMjsKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSArKykgewotCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHBvcnQgKyBpKSA9PSAwIHx8Ci0JCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIHBvcnQgKyBpKSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOworCWlmIChibWRtYSA9PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNpbXBsZXggPSBpbmIoYm1kbWEgKyAweDAyKTsKKwlvdXRiKHNpbXBsZXggJiAweDYwLCBibWRtYSArIDB4MDIpOworCXNpbXBsZXggPSBpbmIoYm1kbWEgKyAweDAyKTsKKwlpZiAoc2ltcGxleCAmIDB4ODApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKglhdGFfcGNpX2luaXRfYm1kbWEgLSBhY3F1aXJlIFBDSSBCTURNQSByZXNvdXJjZXMgYW5kIGluaXQgQVRBIGhvc3QKKyAqCWF0YV9wY2lfYm1kbWFfaW5pdCAtIGFjcXVpcmUgUENJIEJNRE1BIHJlc291cmNlcyBhbmQgaW5pdCBBVEEgaG9zdAogICoJQGhvc3Q6IHRhcmdldCBBVEEgaG9zdAogICoKICAqCUFjcXVpcmUgUENJIEJNRE1BIHJlc291cmNlcyBhbmQgaW5pdGlhbGl6ZSBAaG9zdCBhY2NvcmRpbmdseS4KQEAgLTUzMiw3ICsyMzU2LDcgQEAKICAqCVJFVFVSTlM6CiAgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCiAgKi8KLWludCBhdGFfcGNpX2luaXRfYm1kbWEoc3RydWN0IGF0YV9ob3N0ICpob3N0KQoraW50IGF0YV9wY2lfYm1kbWFfaW5pdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IGRldmljZSAqZ2RldiA9IGhvc3QtPmRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZ2Rldik7CkBAIC01NzcsOCArMjQwMSwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF0YV9yZXNvdXJjZXNfcHJlc2VudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHBvcnQpCit7CisJaW50IGk7CisKKwkvKiBDaGVjayB0aGUgUENJIHJlc291cmNlcyBmb3IgdGhpcyBjaGFubmVsIGFyZSBlbmFibGVkICovCisJcG9ydCA9IHBvcnQgKiAyOworCWZvciAoaSA9IDA7IGkgPCAyOyBpICsrKSB7CisJCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgcG9ydCArIGkpID09IDAgfHwKKwkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcG9ydCArIGkpID09IDApCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIC8qKgotICoJYXRhX3BjaV9pbml0X3NmZl9ob3N0IC0gYWNxdWlyZSBuYXRpdmUgUENJIEFUQSByZXNvdXJjZXMgYW5kIGluaXQgaG9zdAorICoJYXRhX3BjaV9zZmZfaW5pdF9ob3N0IC0gYWNxdWlyZSBuYXRpdmUgUENJIEFUQSByZXNvdXJjZXMgYW5kIGluaXQgaG9zdAogICoJQGhvc3Q6IHRhcmdldCBBVEEgaG9zdAogICoKICAqCUFjcXVpcmUgbmF0aXZlIFBDSSBBVEEgcmVzb3VyY2VzIGZvciBAaG9zdCBhbmQgaW5pdGlhbGl6ZSB0aGUKQEAgLTU5Niw3ICsyNDM0LDcgQEAKICAqCTAgaWYgYXQgbGVhc3Qgb25lIHBvcnQgaXMgaW5pdGlhbGl6ZWQsIC1FTk9ERVYgaWYgbm8gcG9ydCBpcwogICoJYXZhaWxhYmxlLgogICovCi1pbnQgYXRhX3BjaV9pbml0X3NmZl9ob3N0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKK2ludCBhdGFfcGNpX3NmZl9pbml0X2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBkZXZpY2UgKmdkZXYgPSBob3N0LT5kZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGdkZXYpOwpAQCAtNjM4LDcgKzI0NzYsNyBAQAogCQlhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0KIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9ICh2b2lkIF9faW9tZW0gKikKIAkJCSgodW5zaWduZWQgbG9uZylpb21hcFtiYXNlICsgMV0gfCBBVEFfUENJX0NUTF9PRlMpOwotCQlhdGFfc3RkX3BvcnRzKCZhcC0+aW9hZGRyKTsKKwkJYXRhX3NmZl9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOwogCiAJCWF0YV9wb3J0X2Rlc2MoYXAsICJjbWQgMHglbGx4IGN0bCAweCVsbHgiLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFzZSksCkBAIC02NTYsNyArMjQ5NCw3IEBACiB9CiAKIC8qKgotICoJYXRhX3BjaV9wcmVwYXJlX3NmZl9ob3N0IC0gaGVscGVyIHRvIHByZXBhcmUgbmF0aXZlIFBDSSBBVEEgaG9zdAorICoJYXRhX3BjaV9zZmZfcHJlcGFyZV9ob3N0IC0gaGVscGVyIHRvIHByZXBhcmUgbmF0aXZlIFBDSSBBVEEgaG9zdAogICoJQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlCiAgKglAcHBpOiBhcnJheSBvZiBwb3J0X2luZm8sIG11c3QgYmUgZW5vdWdoIGZvciB0d28gcG9ydHMKICAqCUByX2hvc3Q6IG91dCBhcmd1bWVudCBmb3IgdGhlIGluaXRpYWxpemVkIEFUQSBob3N0CkBAIC02NzAsNyArMjUwOCw3IEBACiAgKglSRVRVUk5TOgogICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLgogICovCi1pbnQgYXRhX3BjaV9wcmVwYXJlX3NmZl9ob3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAoraW50IGF0YV9wY2lfc2ZmX3ByZXBhcmVfaG9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqIHBwaSwKIAkJCSAgICAgc3RydWN0IGF0YV9ob3N0ICoqcl9ob3N0KQogewpAQCAtNjg4LDEyICsyNTI2LDEyIEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlyYyA9IGF0YV9wY2lfaW5pdF9zZmZfaG9zdChob3N0KTsKKwlyYyA9IGF0YV9wY2lfc2ZmX2luaXRfaG9zdChob3N0KTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIAogCS8qIGluaXQgRE1BIHJlbGF0ZWQgc3R1ZmYgKi8KLQlyYyA9IGF0YV9wY2lfaW5pdF9ibWRtYShob3N0KTsKKwlyYyA9IGF0YV9wY2lfYm1kbWFfaW5pdChob3N0KTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX2JtZG1hOwogCkBAIC03MTQsNyArMjU1Miw3IEBACiB9CiAKIC8qKgotICoJYXRhX3BjaV9hY3RpdmF0ZV9zZmZfaG9zdCAtIHN0YXJ0IFNGRiBob3N0LCByZXF1ZXN0IElSUSBhbmQgcmVnaXN0ZXIgaXQKKyAqCWF0YV9wY2lfc2ZmX2FjdGl2YXRlX2hvc3QgLSBzdGFydCBTRkYgaG9zdCwgcmVxdWVzdCBJUlEgYW5kIHJlZ2lzdGVyIGl0CiAgKglAaG9zdDogdGFyZ2V0IFNGRiBBVEEgaG9zdAogICoJQGlycV9oYW5kbGVyOiBpcnFfaGFuZGxlciB1c2VkIHdoZW4gcmVxdWVzdGluZyBJUlEocykKICAqCUBzaHQ6IHNjc2lfaG9zdF90ZW1wbGF0ZSB0byB1c2Ugd2hlbiByZWdpc3RlcmluZyB0aGUgaG9zdApAQCAtNzI5LDcgKzI1NjcsNyBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotaW50IGF0YV9wY2lfYWN0aXZhdGVfc2ZmX2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0LAoraW50IGF0YV9wY2lfc2ZmX2FjdGl2YXRlX2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0LAogCQkJICAgICAgaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlciwKIAkJCSAgICAgIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCkKIHsKQEAgLTgwNyw5ICsyNjQ1LDExIEBACiB9CiAKIC8qKgotICoJYXRhX3BjaV9pbml0X29uZSAtIEluaXRpYWxpemUvcmVnaXN0ZXIgUENJIElERSBob3N0IGNvbnRyb2xsZXIKKyAqCWF0YV9wY2lfc2ZmX2luaXRfb25lIC0gSW5pdGlhbGl6ZS9yZWdpc3RlciBQQ0kgSURFIGhvc3QgY29udHJvbGxlcgogICoJQHBkZXY6IENvbnRyb2xsZXIgdG8gYmUgaW5pdGlhbGl6ZWQKICAqCUBwcGk6IGFycmF5IG9mIHBvcnRfaW5mbywgbXVzdCBiZSBlbm91Z2ggZm9yIHR3byBwb3J0cworICoJQHNodDogc2NzaV9ob3N0X3RlbXBsYXRlIHRvIHVzZSB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBob3N0CisgKglAaG9zdF9wcml2OiBob3N0IHByaXZhdGVfZGF0YQogICoKICAqCVRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIGEgZHJpdmVyJ3MKICAqCXh4eF9pbml0X29uZSgpIHByb2JlIGZ1bmN0aW9uIGlmIHRoZSBoYXJkd2FyZSB1c2VzIHRyYWRpdGlvbmFsCkBAIC04MjksOCArMjY2OSw5IEBACiAgKglSRVRVUk5TOgogICoJWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJuby1iYXNlZCB2YWx1ZSBvbiBlcnJvci4KICAqLwotaW50IGF0YV9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCSAgICAgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqIHBwaSkKK2ludCBhdGFfcGNpX3NmZl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqIGNvbnN0ICogcHBpLAorCQkJIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCwgdm9pZCAqaG9zdF9wcml2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBpID0gTlVMTDsKQEAgLTg2MSwxMyArMjcwMiwxMyBAQAogCQlnb3RvIG91dDsKIAogCS8qIHByZXBhcmUgYW5kIGFjdGl2YXRlIFNGRiBob3N0ICovCi0JcmMgPSBhdGFfcGNpX3ByZXBhcmVfc2ZmX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7CisJcmMgPSBhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKKwlob3N0LT5wcml2YXRlX2RhdGEgPSBob3N0X3ByaXY7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlyYyA9IGF0YV9wY2lfYWN0aXZhdGVfc2ZmX2hvc3QoaG9zdCwgcGktPnBvcnRfb3BzLT5pcnFfaGFuZGxlciwKLQkJCQkgICAgICAgcGktPnNodCk7CisJcmMgPSBhdGFfcGNpX3NmZl9hY3RpdmF0ZV9ob3N0KGhvc3QsIGF0YV9zZmZfaW50ZXJydXB0LCBzaHQpOwogIG91dDoKIAlpZiAocmMgPT0gMCkKIAkJZGV2cmVzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LCBOVUxMKTsKQEAgLTg3Nyw0MSArMjcxOCw1MiBAQAogCXJldHVybiByYzsKIH0KIAotLyoqCi0gKglhdGFfcGNpX2NsZWFyX3NpbXBsZXgJLQlhdHRlbXB0IHRvIGtpY2sgZGV2aWNlIG91dCBvZiBzaW1wbGV4Ci0gKglAcGRldjogUENJIGRldmljZQotICoKLSAqCVNvbWUgUENJIEFUQSBkZXZpY2VzIHJlcG9ydCBzaW1wbGV4IG1vZGUgYnV0IGluIGZhY3QgY2FuIGJlIHRvbGQgdG8KLSAqCWVudGVyIG5vbiBzaW1wbGV4IG1vZGUuIFRoaXMgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGxvZ2ljIHRvCi0gKglwZXJmb3JtIHRoZSB0YXNrIG9uIHN1Y2ggZGV2aWNlcy4gQ2FsbGluZyBpdCBvbiBvdGhlciBkZXZpY2VzIHdpbGwKLSAqCWhhdmUgLXVuZGVmaW5lZC0gYmVoYXZpb3VyLgotICovCi0KLWludCBhdGFfcGNpX2NsZWFyX3NpbXBsZXgoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBibWRtYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKLQl1OCBzaW1wbGV4OwotCi0JaWYgKGJtZG1hID09IDApCi0JCXJldHVybiAtRU5PRU5UOwotCi0Jc2ltcGxleCA9IGluYihibWRtYSArIDB4MDIpOwotCW91dGIoc2ltcGxleCAmIDB4NjAsIGJtZG1hICsgMHgwMik7Ci0Jc2ltcGxleCA9IGluYihibWRtYSArIDB4MDIpOwotCWlmIChzaW1wbGV4ICYgMHg4MCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiAwOwotfQotCi11bnNpZ25lZCBsb25nIGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsIHVuc2lnbmVkIGxvbmcgeGZlcl9tYXNrKQotewotCS8qIEZpbHRlciBvdXQgRE1BIG1vZGVzIGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4gY29uZmlndXJlZCBieQotCSAgIHRoZSBCSU9TIGFzIFBJTyBvbmx5ICovCi0KLQlpZiAoYWRldi0+bGluay0+YXAtPmlvYWRkci5ibWRtYV9hZGRyID09IE5VTEwpCi0JCXhmZXJfbWFzayAmPSB+KEFUQV9NQVNLX01XRE1BIHwgQVRBX01BU0tfVURNQSk7Ci0JcmV0dXJuIHhmZXJfbWFzazsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9wb3J0X29wcyk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfYm1kbWFfcG9ydF9vcHMpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9xY19wcmVwKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfZHVtYl9xY19wcmVwKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfZGV2X3NlbGVjdCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2NoZWNrX3N0YXR1cyk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2FsdHN0YXR1cyk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2J1c3lfc2xlZXApOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl93YWl0X3JlYWR5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfdGZfbG9hZCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3RmX3JlYWQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9leGVjX2NvbW1hbmQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9kYXRhX3hmZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9kYXRhX3hmZXJfbm9pcnEpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9pcnFfb24pOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9pcnFfY2xlYXIpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9oc21fbW92ZSk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3FjX2lzc3VlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfcWNfZmlsbF9ydGYpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9ob3N0X2ludHIpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9pbnRlcnJ1cHQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9mcmVlemUpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl90aGF3KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfcHJlcmVzZXQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9kZXZfY2xhc3NpZnkpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl93YWl0X2FmdGVyX3Jlc2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfc29mdHJlc2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNhdGFfc2ZmX2hhcmRyZXNldCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3Bvc3RyZXNldCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2Vycm9yX2hhbmRsZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9wb3N0X2ludGVybmFsX2NtZCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3BvcnRfc3RhcnQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9zdGRfcG9ydHMpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX21vZGVfZmlsdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9zZXR1cCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfYm1kbWFfc3RhcnQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX3N0b3ApOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX3N0YXR1cyk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfYnVzX3Jlc2V0KTsKKyNpZmRlZiBDT05GSUdfUENJCitFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX2JtZG1hX2NsZWFyX3NpbXBsZXgpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9ibWRtYV9pbml0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfc2ZmX2luaXRfaG9zdCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9zZmZfYWN0aXZhdGVfaG9zdCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX3NmZl9pbml0X29uZSk7CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLmggYi9kcml2ZXJzL2F0YS9saWJhdGEuaAppbmRleCA0MDlmZmI5Li40YWVlYWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEuaAorKysgYi9kcml2ZXJzL2F0YS9saWJhdGEuaApAQCAtMzgsNiArMzgsMTcgQEAKIAl2b2lkCQkJKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwogfTsKIAorc3RhdGljIGlubGluZSBpbnQgYXRhX2lzX2J1aWx0aW5faGFyZHJlc2V0KGF0YV9yZXNldF9mbl90IHJlc2V0KQoreworCWlmIChyZXNldCA9PSBzYXRhX3N0ZF9oYXJkcmVzZXQpCisJCXJldHVybiAxOworI2lmZGVmIENPTkZJR19BVEFfU0ZGCisJaWYgKHJlc2V0ID09IHNhdGFfc2ZmX2hhcmRyZXNldCkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwogLyogbGliYXRhLWNvcmUuYyAqLwogZW51bSB7CiAJLyogZmxhZ3MgZm9yIGF0YV9kZXZfcmVhZF9pZCgpICovCkBAIC01NiwxNyArNjcsMjEgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3ByaW50X2lkOwogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphdGFfYXV4X3dxOwogZXh0ZXJuIGludCBhdGFwaV9lbmFibGVkOwotZXh0ZXJuIGludCBhdGFwaV9kbWFkaXI7CiBleHRlcm4gaW50IGF0YXBpX3Bhc3N0aHJ1MTY7CiBleHRlcm4gaW50IGxpYmF0YV9mdWE7CiBleHRlcm4gaW50IGxpYmF0YV9ub2FjcGk7CiBleHRlcm4gaW50IGxpYmF0YV9hbGxvd190cG07CitleHRlcm4gdm9pZCBhdGFfZm9yY2VfY2JsKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIHU2NCBhdGFfdGZfdG9fbGJhKGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKK2V4dGVybiB1NjQgYXRhX3RmX3RvX2xiYTQ4KGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKIGV4dGVybiBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKmF0YV9xY19uZXdfaW5pdChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgYXRhX2J1aWxkX3J3X3RmKHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJICAgdTY0IGJsb2NrLCB1MzIgbl9ibG9jaywgdW5zaWduZWQgaW50IHRmX2ZsYWdzLAogCQkJICAgdW5zaWduZWQgaW50IHRhZyk7CiBleHRlcm4gdTY0IGF0YV90Zl9yZWFkX2Jsb2NrKHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGF0YV9kZXZfZGlzYWJsZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGF0YV9waW9fcXVldWVfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkICpkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwogZXh0ZXJuIHZvaWQgYXRhX3BvcnRfZmx1c2hfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB1bnNpZ25lZCBhdGFfZXhlY19pbnRlcm5hbChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsIGNvbnN0IHU4ICpjZGIsCkBAIC03Nyw2ICs5Miw4IEBACiAJCQkJICAgICBpbnQgZG1hX2Rpciwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKIAkJCQkgICAgIHVuc2lnbmVkIGludCBuX2VsZW0sIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9kb19zaW1wbGVfY21kKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHU4IGNtZCk7CitleHRlcm4gaW50IGF0YV93YWl0X3JlYWR5KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSwKKwkJCSAgaW50ICgqY2hlY2tfcmVhZHkpKHN0cnVjdCBhdGFfbGluayAqbGluaykpOwogZXh0ZXJuIGludCBhdGFfZGV2X3JlYWRfaWQoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpwX2NsYXNzLAogCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCB1MTYgKmlkKTsKIGV4dGVybiBpbnQgYXRhX2Rldl9yZXJlYWRfaWQoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlYWRpZF9mbGFncyk7CkBAIC05MSwxMCArMTA4LDcgQEAKIGV4dGVybiB2b2lkIGF0YV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIF9fYXRhX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIGludCBhdGFfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotZXh0ZXJuIHZvaWQgYXRhX2Rldl9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3YWl0LCB1bnNpZ25lZCBpbnQgY2FuX3NsZWVwKTsKIGV4dGVybiB2b2lkIHN3YXBfYnVmX2xlMTYodTE2ICpidWYsIHVuc2lnbmVkIGludCBidWZfd29yZHMpOwotZXh0ZXJuIGludCBhdGFfZmx1c2hfY2FjaGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBhdGFfZGV2X2luaXQoc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBhdGFfbGlua19pbml0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfbGluayAqbGluaywgaW50IHBtcCk7CiBleHRlcm4gaW50IHNhdGFfbGlua19pbml0X3NwZChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspOwpAQCAtMTY1LDExICsxNzksNiBAQAogZXh0ZXJuIHZvaWQgYXRhX3Njc2lfZGV2X3Jlc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogZXh0ZXJuIGludCBhdGFfYnVzX3Byb2JlKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCi0vKiBsaWJhdGEtcG1wLmMgKi8KLWV4dGVybiBpbnQgc2F0YV9wbXBfc2NyX3JlYWQoc3RydWN0IGF0YV9saW5rICpsaW5rLCBpbnQgcmVnLCB1MzIgKnZhbCk7Ci1leHRlcm4gaW50IHNhdGFfcG1wX3Njcl93cml0ZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIGludCByZWcsIHUzMiB2YWwpOwotZXh0ZXJuIGludCBzYXRhX3BtcF9hdHRhY2goc3RydWN0IGF0YV9kZXZpY2UgKmRldik7Ci0KIC8qIGxpYmF0YS1laC5jICovCiBleHRlcm4gZW51bSBzY3NpX2VoX3RpbWVyX3JldHVybiBhdGFfc2NzaV90aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIGV4dGVybiB2b2lkIGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwpAQCAtMTkzLDggKzIwMiwzNCBAQAogCQkJICBzdHJ1Y3QgYXRhX2xpbmsgKipyX2ZhaWxlZF9kaXNrKTsKIGV4dGVybiB2b2lkIGF0YV9laF9maW5pc2goc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKLS8qIGxpYmF0YS1zZmYuYyAqLwotZXh0ZXJuIHU4IGF0YV9pcnFfb24oc3RydWN0IGF0YV9wb3J0ICphcCk7CisvKiBsaWJhdGEtcG1wLmMgKi8KKyNpZmRlZiBDT05GSUdfU0FUQV9QTVAKK2V4dGVybiBpbnQgc2F0YV9wbXBfc2NyX3JlYWQoc3RydWN0IGF0YV9saW5rICpsaW5rLCBpbnQgcmVnLCB1MzIgKnZhbCk7CitleHRlcm4gaW50IHNhdGFfcG1wX3Njcl93cml0ZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIGludCByZWcsIHUzMiB2YWwpOworZXh0ZXJuIGludCBzYXRhX3BtcF9hdHRhY2goc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CisjZWxzZSAvKiBDT05GSUdfU0FUQV9QTVAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNhdGFfcG1wX3Njcl9yZWFkKHN0cnVjdCBhdGFfbGluayAqbGluaywgaW50IHJlZywgdTMyICp2YWwpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNhdGFfcG1wX3Njcl93cml0ZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIGludCByZWcsIHUzMiB2YWwpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNhdGFfcG1wX2F0dGFjaChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmIC8qIENPTkZJR19TQVRBX1BNUCAqLworCisvKiBsaWJhdGEtc2ZmLmMgKi8KKyNpZmRlZiBDT05GSUdfQVRBX1NGRgorZXh0ZXJuIHZvaWQgYXRhX2Rldl9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3YWl0LCB1bnNpZ25lZCBpbnQgY2FuX3NsZWVwKTsKK2V4dGVybiB1OCBhdGFfaXJxX29uKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIHZvaWQgYXRhX3Bpb190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisjZW5kaWYgLyogQ09ORklHX0FUQV9TRkYgKi8KIAogI2VuZGlmIC8qIF9fTElCQVRBX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwppbmRleCBiZGMzYjlkLi5jNWY5MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwpAQCAtNDcsNyArNDcsNyBAQAogCWlmIChhcC0+YWNwaV9oYW5kbGUgPT0gTlVMTCB8fCBhdGFfYWNwaV9ndG0oYXAsICZhY3BpLT5ndG0pIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTY4LDIwICs2OCw2IEBACiB9CiAKIC8qKgotICoJcGFjcGlfZXJyb3JfaGFuZGxlciAtIFNldHVwIGFuZCBlcnJvciBoYW5kbGVyCi0gKglAYXA6IFBvcnQgdG8gaGFuZGxlCi0gKgotICoJTE9DS0lORzoKLSAqCU5vbmUgKGluaGVyaXRlZCBmcm9tIGNhbGxlcikuCi0gKi8KLQotc3RhdGljIHZvaWQgcGFjcGlfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgcGFjcGlfcHJlX3Jlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwKLQkJCSAgIGF0YV9zdGRfcG9zdHJlc2V0KTsKLX0KLQotLyoqCiAgKglwYWNwaV9kaXNjb3Zlcl9tb2RlcwktCWZpbHRlciBub24gQUNQSSBtb2RlcwogICoJQGFkZXY6IEFUQSBkZXZpY2UKICAqCUBtYXNrOiBwcm9wb3NlZCBtb2RlcwpAQCAtMTIwLDcgKzEwNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWNwaV9tb2RlX2ZpbHRlcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgbG9uZyBtYXNrKQogewogCXN0cnVjdCBwYXRhX2FjcGkgKmFjcGkgPSBhZGV2LT5saW5rLT5hcC0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyKGFkZXYsIG1hc2sgJiBhY3BpLT5tYXNrW2FkZXYtPmRldm5vXSk7CisJcmV0dXJuIGF0YV9ibWRtYV9tb2RlX2ZpbHRlcihhZGV2LCBtYXNrICYgYWNwaS0+bWFza1thZGV2LT5kZXZub10pOwogfQogCiAvKioKQEAgLTE3Niw3ICsxNjIsNyBAQAogfQogCiAvKioKLSAqCXBhY3BpX3FjX2lzc3VlX3Byb3QJLQljb21tYW5kIGlzc3VlCisgKglwYWNwaV9xY19pc3N1ZQktCWNvbW1hbmQgaXNzdWUKICAqCUBxYzogY29tbWFuZCBwZW5kaW5nCiAgKgogICoJQ2FsbGVkIHdoZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAKQEAgLTE4NCwxNCArMTcwLDE0IEBACiAgKgluZWNjZXNzYXJ5LgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGFjcGlfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHVuc2lnbmVkIGludCBwYWNwaV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYgPSBxYy0+ZGV2OwogCXN0cnVjdCBwYXRhX2FjcGkgKmFjcGkgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGFjcGktPmd0bS5mbGFncyAmIDB4MTApCi0JCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIAogCWlmIChhZGV2ICE9IGFjcGktPmxhc3QpIHsKIAkJcGFjcGlfc2V0X3Bpb21vZGUoYXAsIGFkZXYpOwpAQCAtMTk5LDcgKzE4NSw3IEBACiAJCQlwYWNwaV9zZXRfZG1hbW9kZShhcCwgYWRldik7CiAJCWFjcGktPmxhc3QgPSBhZGV2OwogCX0KLQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogLyoqCkBAIC0yMzIsNTcgKzIxOCwxNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwYWNwaV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS8qIFVzZSBzdGFuZGFyZCBDSFMgbWFwcGluZyBydWxlcyAqLwotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwYWNwaV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGFjcGlfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5xY19pc3N1ZQkJPSBwYWNwaV9xY19pc3N1ZSwKKwkuY2FibGVfZGV0ZWN0CQk9IHBhY3BpX2NhYmxlX2RldGVjdCwKKwkubW9kZV9maWx0ZXIJCT0gcGFjcGlfbW9kZV9maWx0ZXIsCiAJLnNldF9waW9tb2RlCQk9IHBhY3BpX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBwYWNwaV9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJCT0gcGFjcGlfbW9kZV9maWx0ZXIsCi0KLQkvKiBUYXNrIGZpbGUgaXMgUENJIEFUQSBmb3JtYXQsIHVzZSBoZWxwZXJzICovCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBwYWNwaV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CQk9IHBhY3BpX2NhYmxlX2RldGVjdCwKLQotCS8qIEJNRE1BIGhhbmRsaW5nIGlzIFBDSSBBVEEgZm9ybWF0LCB1c2UgaGVscGVycyAqLwotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IHBhY3BpX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLyogVGltZW91dCBoYW5kbGluZyAqLwotCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLyogR2VuZXJpYyBQQVRBIFBDSSBBVEEgaGVscGVycyAqLworCS5wcmVyZXNldAkJPSBwYWNwaV9wcmVfcmVzZXQsCiAJLnBvcnRfc3RhcnQJCT0gcGFjcGlfcG9ydF9zdGFydCwKIH07CiAKQEAgLTMwNCw3ICsyNTAsNiBAQAogc3RhdGljIGludCBwYWNwaV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodAkJPSAmcGFjcGlfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAKIAkJLnBpb19tYXNrCT0gMHgxZiwKQEAgLTMxNCw3ICsyNTksNyBAQAogCQkucG9ydF9vcHMJPSAmcGFjcGlfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnBhY3BpX3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwYWNwaV9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwppbmRleCA3ZTY4ZWRmMy4uZmNhYmU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC0zNiw2ICszNiwxMCBAQAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9hbGkiCiAjZGVmaW5lIERSVl9WRVJTSU9OICIwLjcuNSIKIAorc3RhdGljIGludCBhbGlfYXRhcGlfZG1hID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChhdGFwaV9kbWEsIGFsaV9hdGFwaV9kbWEsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGF0YXBpX2RtYSwgIkVuYWJsZSBBVEFQSSBETUEgKDA9ZGlzYWJsZSwgMT1lbmFibGUpIik7CisKIC8qCiAgKglDYWJsZSBzcGVjaWFsIGNhc2VzCiAgKi8KQEAgLTExNyw3ICsxMjEsNyBAQAogCWF0YV9pZF9jX3N0cmluZyhhZGV2LT5pZCwgbW9kZWxfbnVtLCBBVEFfSURfUFJPRCwgc2l6ZW9mKG1vZGVsX251bSkpOwogCWlmIChzdHJzdHIobW9kZWxfbnVtLCAiV0RDIikpCiAJCXJldHVybiBtYXNrICY9IH5BVEFfTUFTS19VRE1BOwotCXJldHVybiBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyKGFkZXYsIG1hc2spOworCXJldHVybiBhdGFfYm1kbWFfbW9kZV9maWx0ZXIoYWRldiwgbWFzayk7CiB9CiAKIC8qKgpAQCAtMjcwLDYgKzI3NCwyNyBAQAogfQogCiAvKioKKyAqCWFsaV93YXJuX2F0YXBpX2RtYQktCVdhcm4gYWJvdXQgQVRBUEkgRE1BIGRpc2FibGVtZW50CisgKglAYWRldjogRGV2aWNlCisgKgorICoJV2hpbmUgYWJvdXQgQVRBUEkgRE1BIGRpc2FibGVtZW50IGlmIEBhZGV2IGlzIGFuIEFUQVBJIGRldmljZS4KKyAqCUNhbiBiZSB1c2VkIGFzIC0+ZGV2X2NvbmZpZy4KKyAqLworCitzdGF0aWMgdm9pZCBhbGlfd2Fybl9hdGFwaV9kbWEoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmYWRldi0+bGluay0+ZWhfY29udGV4dDsKKwlpbnQgcHJpbnRfaW5mbyA9IGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUFJJTlRJTkZPOworCisJaWYgKHByaW50X2luZm8gJiYgYWRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSAmJiAhYWxpX2F0YXBpX2RtYSkgeworCQlhdGFfZGV2X3ByaW50ayhhZGV2LCBLRVJOX1dBUk5JTkcsCisJCQkgICAgICAgIldBUk5JTkc6IEFUQVBJIERNQSBkaXNhYmxlZCBmb3IgcmVsaWFibGl0eSBpc3N1ZXMuICBJdCBjYW4gYmUgZW5hYmxlZFxuIik7CisJCWF0YV9kZXZfcHJpbnRrKGFkZXYsIEtFUk5fV0FSTklORywKKwkJCSAgICAgICAiV0FSTklORzogdmlhIHBhdGFfYWxpLmF0YXBpX2RtYSBtb2RwYXJhbSBvciBjb3JyZXNwb25kaW5nIHN5c2ZzIG5vZGUuXG4iKTsKKwl9Cit9CisKKy8qKgogICoJYWxpX2xvY2tfc2VjdG9ycwktCUtlZXAgb2xkZXIgZGV2aWNlcyB0byAyNTUgc2VjdG9yIG1vZGUKICAqCUBhZGV2OiBEZXZpY2UKICAqCkBAIC0yODMsNiArMzA4LDcgQEAKIHN0YXRpYyB2b2lkIGFsaV9sb2NrX3NlY3RvcnMoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CiAJYWRldi0+bWF4X3NlY3RvcnMgPSAyNTU7CisJYWxpX3dhcm5fYXRhcGlfZG1hKGFkZXYpOwogfQogCiAvKioKQEAgLTI5NCwyOCArMzIwLDI2IEBACiAKIHN0YXRpYyBpbnQgYWxpX2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogeworCWlmICghYWxpX2F0YXBpX2RtYSkgeworCQkvKiBGSVhNRTogcGF0YV9hbGkgY2FuJ3QgZG8gQVRBUEkgRE1BIHJlbGlhYmx5IGJ1dCB0aGUKKwkJICogSURFIGFsaW0xNXgzIGRyaXZlciBjYW4uICBJIHRyaWVkIGxvdHMgb2YgdGhpbmdzCisJCSAqIGJ1dCBjb3VsZG4ndCBmaW5kIHdoYXQgdGhlIGFjdHVhbCBkaWZmZXJlbmNlIHdhcy4KKwkJICogSWYgeW91IGdvdCBhbiBpZGVhLCBwbGVhc2Ugd3JpdGUgaXQgdG8KKwkJICogbGludXgtaWRlQHZnZXIua2VybmVsLm9yZyBhbmQgY2MgaHRlanVuQGdtYWlsLmNvbS4KKwkJICoKKwkJICogRGlzYWJsZSBBVEFQSSBETUEgZm9yIG5vdy4KKwkJICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKIAkvKiBJZiBpdHMgbm90IGEgbWVkaWEgY29tbWFuZCwgaXRzIG5vdCB3b3J0aCBpdCAqLwotCWlmIChxYy0+bmJ5dGVzIDwgMjA0OCkKKwlpZiAoYXRhcGlfY21kX3R5cGUocWMtPmNkYlswXSkgPT0gQVRBUElfTUlTQykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGlfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiAvKgpAQCAtMzIzLDI5ICszNDcsMTUgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWxpX2Vhcmx5X3BvcnRfb3BzID0gewotCS5zZXRfcGlvbW9kZQk9IGFsaV9zZXRfcGlvbW9kZSwKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKKwkuaW5oZXJpdHMJPSAmYXRhX3NmZl9wb3J0X29wcywKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKKwkuc2V0X3Bpb21vZGUJPSBhbGlfc2V0X3Bpb21vZGUsCit9OwogCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWxpX2RtYV9iYXNlX29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5zZXRfcGlvbW9kZQk9IGFsaV9zZXRfcGlvbW9kZSwKKwkuc2V0X2RtYW1vZGUJPSBhbGlfc2V0X2RtYW1vZGUsCiB9OwogCiAvKgpAQCAtMzUzLDExMyArMzYzLDMxIEBACiAgKglkZXRlY3QKICAqLwogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFsaV8yMF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBhbGlfc2V0X3Bpb21vZGUsCi0JLnNldF9kbWFtb2RlCT0gYWxpX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGFsaV8yMF9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQkuZGV2X2NvbmZpZwk9IGFsaV9sb2NrX3NlY3RvcnMsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCisJLmluaGVyaXRzCT0gJmFsaV9kbWFfYmFzZV9vcHMsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkubW9kZV9maWx0ZXIJPSBhbGlfMjBfZmlsdGVyLAorCS5jaGVja19hdGFwaV9kbWEgPSBhbGlfY2hlY2tfYXRhcGlfZG1hLAorCS5kZXZfY29uZmlnCT0gYWxpX2xvY2tfc2VjdG9ycywKIH07CiAKIC8qCiAgKglQb3J0IG9wZXJhdGlvbnMgZm9yIERNQSBjYXBhYmxlIEFMaSB3aXRoIGNhYmxlIGRldGVjdAogICovCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWxpX2MyX3BvcnRfb3BzID0gewotCS5zZXRfcGlvbW9kZQk9IGFsaV9zZXRfcGlvbW9kZSwKLQkuc2V0X2RtYW1vZGUJPSBhbGlfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCisJLmluaGVyaXRzCT0gJmFsaV9kbWFfYmFzZV9vcHMsCiAJLmNoZWNrX2F0YXBpX2RtYSA9IGFsaV9jaGVja19hdGFwaV9kbWEsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQkuZGV2X2NvbmZpZwk9IGFsaV9sb2NrX3NlY3RvcnMsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCiAJLmNhYmxlX2RldGVjdAk9IGFsaV9jMl9jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkuZGV2X2NvbmZpZwk9IGFsaV9sb2NrX3NlY3RvcnMsCiB9OwogCiAvKgogICoJUG9ydCBvcGVyYXRpb25zIGZvciBETUEgY2FwYWJsZSBBTGkgd2l0aCBjYWJsZSBkZXRlY3QgYW5kIExCQTQ4CiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhbGlfYzVfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCT0gYWxpX3NldF9waW9tb2RlLAotCS5zZXRfZG1hbW9kZQk9IGFsaV9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKKwkuaW5oZXJpdHMJPSAmYWxpX2RtYV9iYXNlX29wcywKIAkuY2hlY2tfYXRhcGlfZG1hID0gYWxpX2NoZWNrX2F0YXBpX2RtYSwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5kZXZfY29uZmlnCT0gYWxpX3dhcm5fYXRhcGlfZG1hLAogCS5jYWJsZV9kZXRlY3QJPSBhbGlfYzJfY2FibGVfZGV0ZWN0LAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiAKQEAgLTUyMSw3ICs0NDksNyBAQAogCX0KIAlwY2lfZGV2X3B1dChpc2FfYnJpZGdlKTsKIAlwY2lfZGV2X3B1dChub3J0aCk7Ci0JYXRhX3BjaV9jbGVhcl9zaW1wbGV4KHBkZXYpOworCWF0YV9wY2lfYm1kbWFfY2xlYXJfc2ltcGxleChwZGV2KTsKIH0KIC8qKgogICoJYWxpX2luaXRfb25lCQktCWRpc2NvdmVyeSBjYWxsYmFjawpAQCAtNTM1LDE0ICs0NjMsMTIgQEAKIHN0YXRpYyBpbnQgYWxpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fZWFybHkgPSB7Ci0JCS5zaHQgPSAmYWxpX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLnBvcnRfb3BzID0gJmFsaV9lYXJseV9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHgyMCBhZGRlZCBETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMCA9IHsKLQkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC01NTAsNyArNDc2LDYgQEAKIAl9OwogCS8qIFJldmlzaW9uIDB4MjAgd2l0aCBzdXBwb3J0IGxvZ2ljIGFkZGVkIFVETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMF91ZG1hID0gewotCQkuc2h0ID0gJmFsaV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTU1OSw3ICs0ODQsNiBAQAogCX07CiAJLyogUmV2aXNpb24gMHhDMiBhZGRzIFVETUE2NiAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2MyID0gewotCQkuc2h0ID0gJmFsaV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTU2OCw3ICs0OTIsNiBAQAogCX07CiAJLyogUmV2aXNpb24gMHhDMyBpcyBVRE1BNjYgZm9yIG5vdyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2MzID0gewotCQkuc2h0ID0gJmFsaV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTU3Nyw3ICs1MDAsNiBAQAogCX07CiAJLyogUmV2aXNpb24gMHhDNCBpcyBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzQgPSB7Ci0JCS5zaHQgPSAmYWxpX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtNTg2LDcgKzUwOCw2IEBACiAJfTsKIAkvKiBSZXZpc2lvbiAweEM1IGlzIFVETUExMzMgd2l0aCBMQkE0OCBETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jNSA9IHsKLQkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC01OTcsNiArNTE4LDExIEBACiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyBOVUxMLCBOVUxMIH07CiAJdTggdG1wOwogCXN0cnVjdCBwY2lfZGV2ICppc2FfYnJpZGdlOworCWludCByYzsKKworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJLyoKIAkgKiBUaGUgY2hpcHNldCByZXZpc2lvbiBzZWxlY3RzIHRoZSBkcml2ZXIgb3BlcmF0aW9ucyBhbmQKQEAgLTYyNiwxNCArNTUyLDIxIEBACiAJICAgICAgICAJcHBpWzBdID0gJmluZm9fMjBfdWRtYTsKIAkJcGNpX2Rldl9wdXQoaXNhX2JyaWRnZSk7CiAJfQotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmFsaV9zaHQsIE5VTEwpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGFsaV9yZWluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAlhbGlfaW5pdF9jaGlwc2V0KHBkZXYpOwotCXJldHVybiBhdGFfcGNpX2RldmljZV9yZXN1bWUocGRldik7CisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCmluZGV4IDRiOGQ5YjU5Li4yNjY2NWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKQEAgLTU2LDcgKzU2LDkgQEAKIAl1OCB0OwogCiAJVCA9IDEwMDAwMDAwMDAgLyBhbWRfY2xvY2s7Ci0JVVQgPSBUIC8gbWluX3QoaW50LCBtYXhfdChpbnQsIGNsb2NrLCAxKSwgMik7CisJVVQgPSBUOworCWlmIChjbG9jayA+PSAyKQorCQlVVCA9IFQgLyAyOwogCiAJaWYgKGF0YV90aW1pbmdfY29tcHV0ZShhZGV2LCBzcGVlZCwgJmF0LCBULCBVVCkgPCAwKSB7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsICJ1bmtub3duIG1vZGUgJWQuXG4iLCBzcGVlZCk7CkBAIC0xNDEsMTMgKzE0Myw3IEBACiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmYW1kX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgYW1kX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsCi0JCQkgICBhdGFfc3RkX3Bvc3RyZXNldCk7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCiBzdGF0aWMgaW50IGFtZF9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTI5NywxNCArMjkzLDcgQEAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZudl9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotc3RhdGljIHZvaWQgbnZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgbnZfcHJlX3Jlc2V0LAotCQkJICAgICAgIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLAotCQkJICAgICAgIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtMzUzLDIyOCArMzQyLDY2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFtZF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhbWRfYmFzZV9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5wcmVyZXNldAk9IGFtZF9wcmVfcmVzZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYW1kMzNfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmFtZF9iYXNlX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogCS5zZXRfcGlvbW9kZQk9IGFtZDMzX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGFtZDMzX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhbWRfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhbWQ2Nl9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYW1kX2Jhc2VfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV91bmtub3duLAogCS5zZXRfcGlvbW9kZQk9IGFtZDY2X3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGFtZDY2X3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhbWRfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV91bmtub3duLAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYW1kMTAwX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZhbWRfYmFzZV9wb3J0X29wcywKKwkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlX3Vua25vd24sCiAJLnNldF9waW9tb2RlCT0gYW1kMTAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGFtZDEwMF9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYW1kX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfdW5rbm93biwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFtZDEzM19wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYW1kX2Jhc2VfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IGFtZF9jYWJsZV9kZXRlY3QsCiAJLnNldF9waW9tb2RlCT0gYW1kMTMzX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGFtZDEzM19zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAorfTsKIAotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGFtZF9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYW1kX2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG52X2Jhc2VfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlX2lnbm9yZSwKKwkubW9kZV9maWx0ZXIJPSBudl9tb2RlX2ZpbHRlciwKKwkucHJlcmVzZXQJPSBudl9wcmVfcmVzZXQsCisJLmhvc3Rfc3RvcAk9IG52X2hvc3Rfc3RvcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBudjEwMF9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmbnZfYmFzZV9wb3J0X29wcywKIAkuc2V0X3Bpb21vZGUJPSBudjEwMF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBudjEwMF9zZXRfZG1hbW9kZSwKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IG52X2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfaWdub3JlLAotCS5tb2RlX2ZpbHRlcgk9IG52X21vZGVfZmlsdGVyLAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCi0JLmhvc3Rfc3RvcAk9IG52X2hvc3Rfc3RvcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBudjEzM19wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmbnZfYmFzZV9wb3J0X29wcywKIAkuc2V0X3Bpb21vZGUJPSBudjEzM19zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBudjEzM19zZXRfZG1hbW9kZSwKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IG52X2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfaWdub3JlLAotCS5tb2RlX2ZpbHRlcgk9IG52X21vZGVfZmlsdGVyLAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCi0JLmhvc3Rfc3RvcAk9IG52X2hvc3Rfc3RvcCwKIH07CiAKIHN0YXRpYyBpbnQgYW1kX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bMTBdID0gewogCQl7CS8qIDA6IEFNRCA3NDAxICovCi0JCQkuc2h0ID0gJmFtZF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywJLyogTm8gU1dETUEgKi8KQEAgLTU4Miw3ICs0MDksNiBAQAogCQkJLnBvcnRfb3BzID0gJmFtZDMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogMTogRWFybHkgQU1ENzQwOSAtIG5vIHN3ZG1hICovCi0JCQkuc2h0ID0gJmFtZF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTU5MCw3ICs0MTYsNiBAQAogCQkJLnBvcnRfb3BzID0gJmFtZDY2X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogMjogQU1EIDc0MDksIG5vIHN3ZG1hIGVycmF0YSAqLwotCQkJLnNodCA9ICZhbWRfc2h0LAogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJCS5waW9fbWFzayA9IDB4MWYsCiAJCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC01OTgsNyArNDIzLDYgQEAKIAkJCS5wb3J0X29wcyA9ICZhbWQ2Nl9wb3J0X29wcwogCQl9LAogCQl7CS8qIDM6IEFNRCA3NDExICovCi0JCQkuc2h0ID0gJmFtZF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTYwNiw3ICs0MzAsNiBAQAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9LAogCQl7CS8qIDQ6IEFNRCA3NDQxICovCi0JCQkuc2h0ID0gJmFtZF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTYxNCw3ICs0MzcsNiBAQAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9LAogCQl7CS8qIDU6IEFNRCA4MTExKi8KLQkJCS5zaHQgPSAmYW1kX3NodCwKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCQkucGlvX21hc2sgPSAweDFmLAogCQkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtNjIyLDcgKzQ0NCw2IEBACiAJCQkucG9ydF9vcHMgPSAmYW1kMTMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogNjogQU1EIDgxMTEgVURNQSAxMDAgKFNlcmVuYWRlKSAqLwotCQkJLnNodCA9ICZhbWRfc2h0LAogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJCS5waW9fbWFzayA9IDB4MWYsCiAJCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC02MzAsNyArNDUxLDYgQEAKIAkJCS5wb3J0X29wcyA9ICZhbWQxMzNfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiA3OiBOdmlkaWEgTmZvcmNlICovCi0JCQkuc2h0ID0gJmFtZF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTYzOCw3ICs0NTgsNiBAQAogCQkJLnBvcnRfb3BzID0gJm52MTAwX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogODogTnZpZGlhIE5mb3JjZTIgYW5kIGxhdGVyICovCi0JCQkuc2h0ID0gJmFtZF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTY0Niw3ICs0NjUsNiBAQAogCQkJLnBvcnRfb3BzID0gJm52MTMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogOTogQU1EIENTNTUzNiAoR2VvZGUgY29tcGFuaW9uKSAqLwotCQkJLnNodCA9ICZhbWRfc2h0LAogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJCS5waW9fbWFzayA9IDB4MWYsCiAJCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC02NTQsMTUgKzQ3MiwyMCBAQAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9CiAJfTsKLQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaTsKLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwaSwgTlVMTCB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgTlVMTCwgTlVMTCB9OwogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCWludCB0eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCXZvaWQgKmhwcml2ID0gTlVMTDsKIAl1OCBmaWZvOworCWludCByYzsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAorCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgJmZpZm8pOwogCiAJLyogQ2hlY2sgZm9yIEFNRDc0MDkgd2l0aG91dCBzd2RtYSBlcnJhdGEgYW5kIGlmIGZvdW5kIGFkanVzdCB0eXBlICovCkBAIC02NzcsMTAgKzUwMCwxMCBAQAogCS8qCiAJICogT2theSwgdHlwZSBpcyBkZXRlcm1pbmVkIG5vdy4gIEFwcGx5IHR5cGUtc3BlY2lmaWMgd29ya2Fyb3VuZHMuCiAJICovCi0JcGkgPSBpbmZvW3R5cGVdOworCXBwaVswXSA9ICZpbmZvW3R5cGVdOwogCiAJaWYgKHR5cGUgPCAzKQotCQlhdGFfcGNpX2NsZWFyX3NpbXBsZXgocGRldik7CisJCWF0YV9wY2lfYm1kbWFfY2xlYXJfc2ltcGxleChwZGV2KTsKIAogCS8qIENoZWNrIGZvciBBTUQ3NDExICovCiAJaWYgKHR5cGUgPT0gMykKQEAgLTY5NiwxNiArNTE5LDIzIEBACiAJCXUzMiB1ZG1hOwogCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDYwLCAmdWRtYSk7Ci0JCXBpLnByaXZhdGVfZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpdWRtYTsKKwkJaHByaXYgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXVkbWE7CiAJfQogCiAJLyogQW5kIGZpcmUgaXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZhbWRfc2h0LCBocHJpdik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYW1kX3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYzsKKworCXJjID0gYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkgewogCQl1OCBmaWZvOwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAmZmlmbyk7CkBAIC03MTYsOSArNTQ2LDExIEBACiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgZmlmbyB8IDB4RjApOwogCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MDkgfHwKIAkJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FNRF9DT0JSQV83NDAxKQotCQkgICAgCWF0YV9wY2lfY2xlYXJfc2ltcGxleChwZGV2KTsKKwkJCWF0YV9wY2lfYm1kbWFfY2xlYXJfc2ltcGxleChwZGV2KTsKIAl9Ci0JcmV0dXJuIGF0YV9wY2lfZGV2aWNlX3Jlc3VtZShwZGV2KTsKKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKaW5kZXggZDQyMTgzMS4uMGY1MTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYwpAQCAtNTIsMjIgKzUyLDcgQEAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZhcnRvcF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotLyoqCi0gKglhcnRvcDYyMTBfZXJyb3JfaGFuZGxlciAtIFByb2JlIHNwZWNpZmllZCBwb3J0IG9uIFBBVEEgaG9zdCBjb250cm9sbGVyCi0gKglAYXA6IFBvcnQgdG8gcHJvYmUKLSAqCi0gKglMT0NLSU5HOgotICoJTm9uZSAoaW5oZXJpdGVkIGZyb20gY2FsbGVyKS4KLSAqLwotCi1zdGF0aWMgdm9pZCBhcnRvcDYyMTBfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgYXJ0b3A2MjEwX3ByZV9yZXNldCwKLQkJCQkgICAgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsCi0JCQkJICAgIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtOTMsNyArNzgsNyBAQAogCWlmIChwZGV2LT5kZXZpY2UgJSAxICYmICFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmYXJ0b3BfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTExNCwyMSArOTksNiBAQAogfQogCiAvKioKLSAqCWFydG9wNjI2MF9lcnJvcl9oYW5kbGVyIC0gUHJvYmUgc3BlY2lmaWVkIHBvcnQgb24gUEFUQSBob3N0IGNvbnRyb2xsZXIKLSAqCUBhcDogUG9ydCB0byBwcm9iZQotICoKLSAqCUxPQ0tJTkc6Ci0gKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgotICovCi0KLXN0YXRpYyB2b2lkIGFydG9wNjI2MF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBhcnRvcDYyNjBfcHJlX3Jlc2V0LAotCQkJCSAgICBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwKLQkJCQkgICAgYXRhX3N0ZF9wb3N0cmVzZXQpOwotfQotCi0vKioKICAqCWFydG9wNjIxMF9sb2FkX3Bpb21vZGUgLSBMb2FkIGEgc2V0IG9mIFBBVEEgUElPIHRpbWluZ3MKICAqCUBhcDogUG9ydCB3aG9zZSB0aW1pbmdzIHdlIGFyZSBjb25maWd1cmluZwogICoJQGFkZXY6IERldmljZQpAQCAtMzE0LDg1ICsyODQsMjMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYXJ0b3Bfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXJ0b3A2MjEwX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhcnRvcDYyMTBfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKIAkuc2V0X3Bpb21vZGUJCT0gYXJ0b3A2MjEwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBhcnRvcDYyMTBfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCQk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGFydG9wNjIxMF9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCAJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkucHJlcmVzZXQJCT0gYXJ0b3A2MjEwX3ByZV9yZXNldCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhcnRvcDYyNjBfb3BzID0geworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFydG9wNjI2MF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAkJPSBhcnRvcDYyNjBfY2FibGVfZGV0ZWN0LAogCS5zZXRfcGlvbW9kZQkJPSBhcnRvcDYyNjBfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IGFydG9wNjI2MF9zZXRfZG1hbW9kZSwKLQotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gYXJ0b3A2MjYwX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kIAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CQk9IGFydG9wNjI2MF9jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkucHJlcmVzZXQJCT0gYXJ0b3A2MjYwX3ByZV9yZXNldCwKIH07CiAKIApAQCAtNDE0LDcgKzMyMiw2IEBACiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjIxMCA9IHsKLQkJLnNodAkJPSAmYXJ0b3Bfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KQEAgLTQyMiw3ICszMjksNiBAQAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjEwX29wcywKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyNnggPSB7Ci0JCS5zaHQJCT0gJmFydG9wX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCkBAIC00MzAsNyArMzM2LDYgQEAKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182Mjh4ID0gewotCQkuc2h0CQk9ICZhcnRvcF9zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwpAQCAtNDM4LDcgKzM0Myw2IEBACiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI4eF9mYXN0ID0gewotCQkuc2h0CQk9ICZhcnRvcF9zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwpAQCAtNDQ2LDExICszNTAsMTYgQEAKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7IE5VTEwsIE5VTEwgfTsKKwlpbnQgcmM7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCiAJCQkgICAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCisJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKIAlpZiAoaWQtPmRyaXZlcl9kYXRhID09IDApIHsJLyogNjIxMCB2YXJpYW50ICovCiAJCXBwaVswXSA9ICZpbmZvXzYyMTA7CiAJCXBwaVsxXSA9ICZhdGFfZHVtbXlfcG9ydF9pbmZvOwpAQCAtNDkxLDcgKzQwMCw3IEBACiAKIAlCVUdfT04ocHBpWzBdID09IE5VTEwpOwogCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmYXJ0b3Bfc2h0LCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFydG9wX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXQzMi5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKaW5kZXggZGIwNTdiMS4uM2U4NjUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKQEAgLTE2Niw1MiArMTY2LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwYXRhX2F0MzJfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JLyogTm8gRE1BIGNvbnRyb2xsZXIgeWV0ICovCi19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGF0MzJfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX1BJT19TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGF0MzJfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCQk9IHBhdGFfYXQzMl9zZXRfcGlvbW9kZSwKLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCiAJLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9jbGVhcgkJPSBwYXRhX2F0MzJfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNldF9waW9tb2RlCQk9IHBhdGFfYXQzMl9zZXRfcGlvbW9kZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhdGFfYXQzMl9pbml0X29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0yNjEsNyArMjIzLDcgQEAKIAlob3N0LT5wcml2YXRlX2RhdGEgPSBpbmZvOwogCiAJLyogUmVnaXN0ZXIgQVRBIGRldmljZSBhbmQgcmV0dXJuICovCi0JcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGluZm8tPmlycSwgYXRhX2ludGVycnVwdCwKKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgaW5mby0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwKIAkJCQkgSVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAogCQkJCSAmYXQzMl9zaHQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggOTYyM2Y1Mi4uNzg3MzhmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC00NSwxMiArNDUsNyBAQAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmF0aWl4cF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotc3RhdGljIHZvaWQgYXRpaXhwX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIGF0aWl4cF9wcmVfcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLCAgIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIHN0YXRpYyBpbnQgYXRpaXhwX2NhYmxlX2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMjIxLDYwICsyMTYsMjYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYXRpaXhwX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAorCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX0RVTUJfTUFYX1BSRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhdGlpeHBfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCT0gYXRpaXhwX3NldF9waW9tb2RlLAotCS5zZXRfZG1hbW9kZQk9IGF0aWl4cF9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAorCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAKLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGlpeHBfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0aWl4cF9jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAorCS5xY19wcmVwIAk9IGF0YV9zZmZfZHVtYl9xY19wcmVwLAogCS5ibWRtYV9zdGFydCAJPSBhdGlpeHBfYm1kbWFfc3RhcnQsCiAJLmJtZG1hX3N0b3AJPSBhdGlpeHBfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCiAKLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkuY2FibGVfZGV0ZWN0CT0gYXRpaXhwX2NhYmxlX2RldGVjdCwKKwkuc2V0X3Bpb21vZGUJPSBhdGlpeHBfc2V0X3Bpb21vZGUsCisJLnNldF9kbWFtb2RlCT0gYXRpaXhwX3NldF9kbWFtb2RlLAorCS5wcmVyZXNldAk9IGF0aWl4cF9wcmVfcmVzZXQsCiB9OwogCiBzdGF0aWMgaW50IGF0aWl4cF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7Ci0JCS5zaHQgPSAmYXRpaXhwX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA2LAkvKiBObyBNV0RNQTAgc3VwcG9ydCAqLwpAQCAtMjgyLDcgKzI0Myw3IEBACiAJCS5wb3J0X29wcyA9ICZhdGlpeHBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmYXRpaXhwX3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGlpeHBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwppbmRleCA3Zjg3ZjEwLi4wYTVhZDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCkBAIC02NzQsNyArNjc0LDcgQEAKICAqCUBhcDogUG9ydCB0byB3aGljaCBvdXRwdXQgaXMgc2VudAogICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0CiAgKgotICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfdGZfbG9hZCgpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX3RmX2xvYWQoKS4KICAqLwogCiBzdGF0aWMgdm9pZCBiZmluX3RmX2xvYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCkBAIC03NDUsNyArNzQ1LDcgQEAKICAqCUBhcDogUG9ydCBmcm9tIHdoaWNoIGlucHV0IGlzIHJlYWQKICAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldCBmb3Igc3RvcmluZyBpbnB1dAogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3RmX3JlYWQoKS4KKyAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3NmZl90Zl9yZWFkKCkuCiAgKi8KIAogc3RhdGljIHZvaWQgYmZpbl90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQpAQCAtNzc1LDcgKzc3NSw3IEBACiAgKglAYXA6IHBvcnQgdG8gd2hpY2ggY29tbWFuZCBpcyBiZWluZyBpc3N1ZWQKICAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldAogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2V4ZWNfY29tbWFuZCgpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX2V4ZWNfY29tbWFuZCgpLgogICovCiAKIHN0YXRpYyB2b2lkIGJmaW5fZXhlY19jb21tYW5kKHN0cnVjdCBhdGFfcG9ydCAqYXAsCkBAIC03ODUsNyArNzg1LDcgQEAKIAlkZXZfZGJnKGFwLT5kZXYsICJhdGEldTogY21kIDB4JVhcbiIsIGFwLT5wcmludF9pZCwgdGYtPmNvbW1hbmQpOwogCiAJd3JpdGVfYXRhcGlfcmVnaXN0ZXIoYmFzZSwgQVRBX1JFR19DTUQsIHRmLT5jb21tYW5kKTsKLQlhdGFfcGF1c2UoYXApOworCWF0YV9zZmZfcGF1c2UoYXApOwogfQogCiAvKioKQEAgLTgwMCwxNCArODAwLDE0IEBACiB9CiAKIC8qKgotICoJYmZpbl9zdGRfZGV2X3NlbGVjdCAtIFNlbGVjdCBkZXZpY2UgMC8xIG9uIEFUQSBidXMKKyAqCWJmaW5fZGV2X3NlbGVjdCAtIFNlbGVjdCBkZXZpY2UgMC8xIG9uIEFUQSBidXMKICAqCUBhcDogQVRBIGNoYW5uZWwgdG8gbWFuaXB1bGF0ZQogICoJQGRldmljZTogQVRBIGRldmljZSAobnVtYmVyZWQgZnJvbSB6ZXJvKSB0byBzZWxlY3QKICAqCi0gKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zdGRfZGV2X3NlbGVjdCgpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX2Rldl9zZWxlY3QoKS4KICAqLwogCi1zdGF0aWMgdm9pZCBiZmluX3N0ZF9kZXZfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpCitzdGF0aWMgdm9pZCBiZmluX2Rldl9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSkKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopYXAtPmlvYWRkci5jdGxfYWRkcjsKIAl1OCB0bXA7CkBAIC04MTgsNyArODE4LDcgQEAKIAkJdG1wID0gQVRBX0RFVklDRV9PQlMgfCBBVEFfREVWMTsKIAogCXdyaXRlX2F0YXBpX3JlZ2lzdGVyKGJhc2UsIEFUQV9SRUdfREVWSUNFLCB0bXApOwotCWF0YV9wYXVzZShhcCk7CisJYXRhX3NmZl9wYXVzZShhcCk7CiB9CiAKIC8qKgpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuY3RsX2FkZHI7CiAJdTggbnNlY3QsIGxiYWw7CiAKLQliZmluX3N0ZF9kZXZfc2VsZWN0KGFwLCBkZXZpY2UpOworCWJmaW5fZGV2X3NlbGVjdChhcCwgZGV2aWNlKTsKIAogCXdyaXRlX2F0YXBpX3JlZ2lzdGVyKGJhc2UsIEFUQV9SRUdfTlNFQ1QsIDB4NTUpOwogCXdyaXRlX2F0YXBpX3JlZ2lzdGVyKGJhc2UsIEFUQV9SRUdfTEJBTCwgMHhhYSk7CkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCSAqIEJTWSBiaXQgdG8gY2xlYXIKIAkgKi8KIAlpZiAoZGV2MCkKLQkJYXRhX2J1c3lfc2xlZXAoYXAsIEFUQV9UTU9VVF9CT09UX1FVSUNLLCBBVEFfVE1PVVRfQk9PVCk7CisJCWF0YV9zZmZfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKTsKIAogCS8qIGlmIGRldmljZSAxIHdhcyBmb3VuZCBpbiBhdGFfZGV2Y2hrLCB3YWl0IGZvcgogCSAqIHJlZ2lzdGVyIGFjY2VzcywgdGhlbiB3YWl0IGZvciBCU1kgdG8gY2xlYXIKQEAgLTEwMjMsNyArMTAyMyw3IEBACiAJd2hpbGUgKGRldjEpIHsKIAkJdTggbnNlY3QsIGxiYWw7CiAKLQkJYmZpbl9zdGRfZGV2X3NlbGVjdChhcCwgMSk7CisJCWJmaW5fZGV2X3NlbGVjdChhcCwgMSk7CiAJCW5zZWN0ID0gcmVhZF9hdGFwaV9yZWdpc3RlcihiYXNlLCBBVEFfUkVHX05TRUNUKTsKIAkJbGJhbCA9IHJlYWRfYXRhcGlfcmVnaXN0ZXIoYmFzZSwgQVRBX1JFR19MQkFMKTsKIAkJaWYgKChuc2VjdCA9PSAxKSAmJiAobGJhbCA9PSAxKSkKQEAgLTEwMzUsMTQgKzEwMzUsMTQgQEAKIAkJbXNsZWVwKDUwKTsJLyogZ2l2ZSBkcml2ZSBhIGJyZWF0aGVyICovCiAJfQogCWlmIChkZXYxKQotCQlhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKTsKKwkJYXRhX3NmZl9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQk9PVF9RVUlDSywgQVRBX1RNT1VUX0JPT1QpOwogCiAJLyogaXMgYWxsIHRoaXMgcmVhbGx5IG5lY2Vzc2FyeT8gKi8KLQliZmluX3N0ZF9kZXZfc2VsZWN0KGFwLCAwKTsKKwliZmluX2Rldl9zZWxlY3QoYXAsIDApOwogCWlmIChkZXYxKQotCQliZmluX3N0ZF9kZXZfc2VsZWN0KGFwLCAxKTsKKwkJYmZpbl9kZXZfc2VsZWN0KGFwLCAxKTsKIAlpZiAoZGV2MCkKLQkJYmZpbl9zdGRfZGV2X3NlbGVjdChhcCwgMCk7CisJCWJmaW5fZGV2X3NlbGVjdChhcCwgMCk7CiB9CiAKIC8qKgpAQCAtMTA4OCwyNiArMTA4OCwyMSBAQAogfQogCiAvKioKLSAqCWJmaW5fc3RkX3NvZnRyZXNldCAtIHJlc2V0IGhvc3QgcG9ydCB2aWEgQVRBIFNSU1QKKyAqCWJmaW5fc29mdHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBBVEEgU1JTVAogICoJQGFwOiBwb3J0IHRvIHJlc2V0CiAgKglAY2xhc3NlczogcmVzdWx0aW5nIGNsYXNzZXMgb2YgYXR0YWNoZWQgZGV2aWNlcwogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3N0ZF9zb2Z0cmVzZXQoKS4KKyAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3NmZl9zb2Z0cmVzZXQoKS4KICAqLwogCi1zdGF0aWMgaW50IGJmaW5fc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcywKLQkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3N0YXRpYyBpbnQgYmZpbl9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCisJCQkgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwogCXVuc2lnbmVkIGludCBzbGF2ZV9wb3NzaWJsZSA9IGFwLT5mbGFncyAmIEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAJdW5zaWduZWQgaW50IGRldm1hc2sgPSAwLCBlcnJfbWFzazsKIAl1OCBlcnI7CiAKLQlpZiAoYXRhX2xpbmtfb2ZmbGluZShsaW5rKSkgewotCQljbGFzc2VzWzBdID0gQVRBX0RFVl9OT05FOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBkZXRlcm1pbmUgaWYgZGV2aWNlIDAvMSBhcmUgcHJlc2VudCAqLwogCWlmIChiZmluX2RldmNoayhhcCwgMCkpCiAJCWRldm1hc2sgfD0gKDEgPDwgMCk7CkBAIC0xMTE1LDcgKzExMTAsNyBAQAogCQlkZXZtYXNrIHw9ICgxIDw8IDEpOwogCiAJLyogc2VsZWN0IGRldmljZSAwIGFnYWluICovCi0JYmZpbl9zdGRfZGV2X3NlbGVjdChhcCwgMCk7CisJYmZpbl9kZXZfc2VsZWN0KGFwLCAwKTsKIAogCS8qIGlzc3VlIGJ1cyByZXNldCAqLwogCWVycl9tYXNrID0gYmZpbl9idXNfc29mdHJlc2V0KGFwLCBkZXZtYXNrKTsKQEAgLTExMjYsMTMgKzExMjEsMTIgQEAKIAl9CiAKIAkvKiBkZXRlcm1pbmUgYnkgc2lnbmF0dXJlIHdoZXRoZXIgd2UgaGF2ZSBBVEEgb3IgQVRBUEkgZGV2aWNlcyAqLwotCWNsYXNzZXNbMF0gPSBhdGFfZGV2X3RyeV9jbGFzc2lmeSgmYXAtPmxpbmsuZGV2aWNlWzBdLAorCWNsYXNzZXNbMF0gPSBhdGFfc2ZmX2Rldl9jbGFzc2lmeSgmYXAtPmxpbmsuZGV2aWNlWzBdLAogCQkJCWRldm1hc2sgJiAoMSA8PCAwKSwgJmVycik7CiAJaWYgKHNsYXZlX3Bvc3NpYmxlICYmIGVyciAhPSAweDgxKQotCQljbGFzc2VzWzFdID0gYXRhX2Rldl90cnlfY2xhc3NpZnkoJmFwLT5saW5rLmRldmljZVsxXSwKKwkJY2xhc3Nlc1sxXSA9IGF0YV9zZmZfZGV2X2NsYXNzaWZ5KCZhcC0+bGluay5kZXZpY2VbMV0sCiAJCQkJCWRldm1hc2sgJiAoMSA8PCAxKSwgJmVycik7CiAKLSBvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjcsNyArMTE2MSw3IEBACiAgKglAYnVmbGVuOiBidWZmZXIgbGVuZ3RoCiAgKglAd3JpdGVfZGF0YTogcmVhZC93cml0ZQogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2RhdGFfeGZlcigpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX2RhdGFfeGZlcigpLgogICovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmZpbl9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLApAQCAtMTIwNiw3ICsxMjAwLDcgQEAKICAqCWJmaW5faXJxX2NsZWFyIC0gQ2xlYXIgQVRBUEkgaW50ZXJydXB0LgogICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KICAqCi0gKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9ibWRtYV9pcnFfY2xlYXIoKS4KKyAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3NmZl9pcnFfY2xlYXIoKS4KICAqLwogCiBzdGF0aWMgdm9pZCBiZmluX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMTIyMyw3ICsxMjE3LDcgQEAKICAqCWJmaW5faXJxX29uIC0gRW5hYmxlIGludGVycnVwdHMgb24gYSBwb3J0LgogICoJQGFwOiBQb3J0IG9uIHdoaWNoIGludGVycnVwdHMgYXJlIGVuYWJsZWQuCiAgKgotICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfaXJxX29uKCkuCisgKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zZmZfaXJxX29uKCkuCiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgYmZpbl9pcnFfb24oc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTEyNDQsMTMgKzEyMzgsMTMgQEAKIH0KIAogLyoqCi0gKgliZmluX2JtZG1hX2ZyZWV6ZSAtIEZyZWV6ZSBETUEgY29udHJvbGxlciBwb3J0CisgKgliZmluX2ZyZWV6ZSAtIEZyZWV6ZSBETUEgY29udHJvbGxlciBwb3J0CiAgKglAYXA6IHBvcnQgdG8gZnJlZXplCiAgKgotICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfYm1kbWFfZnJlZXplKCkuCisgKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zZmZfZnJlZXplKCkuCiAgKi8KIAotc3RhdGljIHZvaWQgYmZpbl9ibWRtYV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyB2b2lkIGJmaW5fZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuY3RsX2FkZHI7CiAKQEAgLTEyNjQsMTkgKzEyNTgsMTkgQEAKIAkgKiBBVEFfTklFTiBtYW5pcHVsYXRpb24uICBBbHNvLCBtYW55IGNvbnRyb2xsZXJzIGZhaWwgdG8gbWFzawogCSAqIHByZXZpb3VzbHkgcGVuZGluZyBJUlEgb24gQVRBX05JRU4gYXNzZXJ0aW9uLiAgQ2xlYXIgaXQuCiAJICovCi0JYXRhX2Noa19zdGF0dXMoYXApOworCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOwogCiAJYmZpbl9pcnFfY2xlYXIoYXApOwogfQogCiAvKioKLSAqCWJmaW5fYm1kbWFfdGhhdyAtIFRoYXcgRE1BIGNvbnRyb2xsZXIgcG9ydAorICoJYmZpbl90aGF3IC0gVGhhdyBETUEgY29udHJvbGxlciBwb3J0CiAgKglAYXA6IHBvcnQgdG8gdGhhdwogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2JtZG1hX3RoYXcoKS4KKyAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3NmZl90aGF3KCkuCiAgKi8KIAotdm9pZCBiZmluX2JtZG1hX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCkKK3ZvaWQgYmZpbl90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJYmZpbl9jaGVja19zdGF0dXMoYXApOwogCWJmaW5faXJxX2NsZWFyKGFwKTsKQEAgLTEyODQsMTQgKzEyNzgsMTQgQEAKIH0KIAogLyoqCi0gKgliZmluX3N0ZF9wb3N0cmVzZXQgLSBzdGFuZGFyZCBwb3N0cmVzZXQgY2FsbGJhY2sKKyAqCWJmaW5fcG9zdHJlc2V0IC0gc3RhbmRhcmQgcG9zdHJlc2V0IGNhbGxiYWNrCiAgKglAYXA6IHRoZSB0YXJnZXQgYXRhX3BvcnQKICAqCUBjbGFzc2VzOiBjbGFzc2VzIG9mIGF0dGFjaGVkIGRldmljZXMKICAqCi0gKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zdGRfcG9zdHJlc2V0KCkuCisgKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zZmZfcG9zdHJlc2V0KCkuCiAgKi8KIAotc3RhdGljIHZvaWQgYmZpbl9zdGRfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzc2VzKQorc3RhdGljIHZvaWQgYmZpbl9wb3N0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwogCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilhcC0+aW9hZGRyLmN0bF9hZGRyOwpAQCAtMTMwMSw5ICsxMjk1LDkgQEAKIAogCS8qIGlzIGRvdWJsZS1zZWxlY3QgcmVhbGx5IG5lY2Vzc2FyeT8gKi8KIAlpZiAoY2xhc3Nlc1swXSAhPSBBVEFfREVWX05PTkUpCi0JCWJmaW5fc3RkX2Rldl9zZWxlY3QoYXAsIDEpOworCQliZmluX2Rldl9zZWxlY3QoYXAsIDEpOwogCWlmIChjbGFzc2VzWzFdICE9IEFUQV9ERVZfTk9ORSkKLQkJYmZpbl9zdGRfZGV2X3NlbGVjdChhcCwgMCk7CisJCWJmaW5fZGV2X3NlbGVjdChhcCwgMCk7CiAKIAkvKiBiYWlsIG91dCBpZiBubyBkZXZpY2UgaXMgcHJlc2VudCAqLwogCWlmIChjbGFzc2VzWzBdID09IEFUQV9ERVZfTk9ORSAmJiBjbGFzc2VzWzFdID09IEFUQV9ERVZfTk9ORSkgewpAQCAtMTMxNCwxNyArMTMwOCw2IEBACiAJd3JpdGVfYXRhcGlfcmVnaXN0ZXIoYmFzZSwgQVRBX1JFR19DVFJMLCBhcC0+Y3RsKTsKIH0KIAotLyoqCi0gKgliZmluX2Vycm9yX2hhbmRsZXIgLSBTdG9jayBlcnJvciBoYW5kbGVyIGZvciBETUEgY29udHJvbGxlcgotICoJQGFwOiBwb3J0IHRvIGhhbmRsZSBlcnJvciBmb3IKLSAqLwotCi1zdGF0aWMgdm9pZCBiZmluX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIGF0YV9zdGRfcHJlcmVzZXQsIGJmaW5fc3RkX3NvZnRyZXNldCwgTlVMTCwKLQkJCSAgIGJmaW5fc3RkX3Bvc3RyZXNldCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGJmaW5fcG9ydF9zdG9wKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJZGV2X2RiZyhhcC0+ZGV2LCAiaW4gYXRhcGkgcG9ydCBzdG9wXG4iKTsKQEAgLTEzNTcsNTEgKzEzNDAsNDAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYmZpbl9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAorCUFUQV9CQVNFX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQkJPSBTR19OT05FLAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCiAJLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYmZpbl9wYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisKIAkuc2V0X3Bpb21vZGUJCT0gYmZpbl9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gYmZpbl9zZXRfZG1hbW9kZSwKIAotCS50Zl9sb2FkCQk9IGJmaW5fdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBiZmluX3RmX3JlYWQsCi0JLmV4ZWNfY29tbWFuZAkJPSBiZmluX2V4ZWNfY29tbWFuZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGJmaW5fY2hlY2tfc3RhdHVzLAotCS5jaGVja19hbHRzdGF0dXMJPSBiZmluX2NoZWNrX2FsdHN0YXR1cywKLQkuZGV2X3NlbGVjdAkJPSBiZmluX3N0ZF9kZXZfc2VsZWN0LAorCS5zZmZfdGZfbG9hZAkJPSBiZmluX3RmX2xvYWQsCisJLnNmZl90Zl9yZWFkCQk9IGJmaW5fdGZfcmVhZCwKKwkuc2ZmX2V4ZWNfY29tbWFuZAk9IGJmaW5fZXhlY19jb21tYW5kLAorCS5zZmZfY2hlY2tfc3RhdHVzCT0gYmZpbl9jaGVja19zdGF0dXMsCisJLnNmZl9jaGVja19hbHRzdGF0dXMJPSBiZmluX2NoZWNrX2FsdHN0YXR1cywKKwkuc2ZmX2Rldl9zZWxlY3QJCT0gYmZpbl9kZXZfc2VsZWN0LAogCiAJLmJtZG1hX3NldHVwCQk9IGJmaW5fYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0CQk9IGJmaW5fYm1kbWFfc3RhcnQsCiAJLmJtZG1hX3N0b3AJCT0gYmZpbl9ibWRtYV9zdG9wLAogCS5ibWRtYV9zdGF0dXMJCT0gYmZpbl9ibWRtYV9zdGF0dXMsCi0JLmRhdGFfeGZlcgkJPSBiZmluX2RhdGFfeGZlciwKKwkuc2ZmX2RhdGFfeGZlcgkJPSBiZmluX2RhdGFfeGZlciwKIAogCS5xY19wcmVwCQk9IGF0YV9ub29wX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAogCi0JLmZyZWV6ZQkJCT0gYmZpbl9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGJmaW5fYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBiZmluX2Vycm9yX2hhbmRsZXIsCisJLmZyZWV6ZQkJCT0gYmZpbl9mcmVlemUsCisJLnRoYXcJCQk9IGJmaW5fdGhhdywKKwkuc29mdHJlc2V0CQk9IGJmaW5fc29mdHJlc2V0LAorCS5wb3N0cmVzZXQJCT0gYmZpbl9wb3N0cmVzZXQsCiAJLnBvc3RfaW50ZXJuYWxfY21kCT0gYmZpbl9ibWRtYV9zdG9wLAogCi0JLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgkJPSBiZmluX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBiZmluX2lycV9vbiwKKwkuc2ZmX2lycV9jbGVhcgkJPSBiZmluX2lycV9jbGVhciwKKwkuc2ZmX2lycV9vbgkJPSBiZmluX2lycV9vbiwKIAogCS5wb3J0X3N0YXJ0CQk9IGJmaW5fcG9ydF9zdGFydCwKIAkucG9ydF9zdG9wCQk9IGJmaW5fcG9ydF9zdG9wLApAQCAtMTQwOSw3ICsxMzgxLDYgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGJmaW5fcG9ydF9pbmZvW10gPSB7CiAJewotCQkuc2h0CQk9ICZiZmluX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MKIAkJCQl8IEFUQV9GTEFHX01NSU8KIAkJCQl8IEFUQV9GTEFHX05PX0xFR0FDWSwKQEAgLTE1MzYsNyArMTUwNyw3IEBACiAJfQogCiAJaWYgKGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksCi0JCWF0YV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAmYmZpbl9zaHQpICE9IDApIHsKKwkJYXRhX3NmZl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAmYmZpbl9zaHQpICE9IDApIHsKIAkJcGVyaXBoZXJhbF9mcmVlX2xpc3QoYXRhcGlfaW9fcG9ydCk7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWwgdG8gYXR0YWNoIEFUQVBJIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKaW5kZXggNDNkMTk4Zi4uMmRlMzBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCkBAIC0xMDcsOCArMTA3LDggQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGFydHRpbSArIDEsICh0LmFjdGl2ZSA8PCA0KSB8IHQucmVjb3Zlcik7CiAJfSBlbHNlIHsKIAkJLyogU2F2ZSB0aGUgc2hhcmVkIHRpbWluZ3MgZm9yIGNoYW5uZWwsIHRoZXkgd2lsbCBiZSBsb2FkZWQKLQkJICAgYnkgcWNfaXNzdWVfcHJvdC4gUmVsb2FkaW5nIHRoZSBzZXR1cCB0aW1lIGlzIGV4cGVuc2l2ZQotCQkgICBzbyB3ZSBrZWVwIGEgbWVyZ2VkIG9uZSBsb2FkZWQgKi8KKwkJICAgYnkgcWNfaXNzdWUuIFJlbG9hZGluZyB0aGUgc2V0dXAgdGltZSBpcyBleHBlbnNpdmUgc28gd2UKKwkJICAga2VlcCBhIG1lcmdlZCBvbmUgbG9hZGVkICovCiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEFSVElNMjMsICZyZWcpOwogCQlyZWcgJj0gMHgzRjsKIAkJcmVnIHw9IHQuc2V0dXA7CkBAIC0xMTksMTQgKzExOSwxNCBAQAogCiAKIC8qKgotICoJY21kNjQwX3FjX2lzc3VlX3Byb3QJLQljb21tYW5kIHByZXBhcmF0aW9uIGhvb2sKKyAqCWNtZDY0MF9xY19pc3N1ZQktCWNvbW1hbmQgcHJlcGFyYXRpb24gaG9vawogICoJQHFjOiBDb21tYW5kIHRvIGJlIGlzc3VlZAogICoKICAqCUNoYW5uZWwgMSBoYXMgc2hhcmVkIHRpbWluZ3MuIFdlIG11c3QgcmVwcm9ncmFtIHRoZQogICoJY2xvY2sgZWFjaCBkcml2ZSAyLzMgc3dpdGNoIHdlIGRvLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY21kNjQwX3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY21kNjQwX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiA9IHFjLT5kZXY7CkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIERSV1RJTTIzLCB0aW1pbmctPnJlZzU4W2FkZXYtPmRldm5vXSk7CiAJCXRpbWluZy0+bGFzdCA9IGFkZXYtPmRldm5vOwogCX0KLQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogLyoqCkBAIC0xNjYsNTMgKzE2NiwxNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBjbWQ2NDBfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgY21kNjQwX3BvcnRfb3BzID0gewotCS5zZXRfcGlvbW9kZQk9IGNtZDY0MF9zZXRfcGlvbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLyogSW4gdGhlb3J5IHhmZXJfbm9pcnEgaXMgbm90IG5lZWRlZCBvbmNlIHdlIGtpbGwgdGhlIHByZWZldGNoZXIgKi8KKwkuc2ZmX2RhdGFfeGZlcgk9IGF0YV9zZmZfZGF0YV94ZmVyX25vaXJxLAorCS5xY19pc3N1ZQk9IGNtZDY0MF9xY19pc3N1ZSwKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGNtZDY0MF9xY19pc3N1ZV9wcm90LAotCi0JLyogSW4gdGhlb3J5IHRoaXMgaXMgbm90IG5lZWRlZCBvbmNlIHdlIGtpbGwgdGhlIHByZWZldGNoZXIgKi8KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlcl9ub2lycSwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCisJLnNldF9waW9tb2RlCT0gY21kNjQwX3NldF9waW9tb2RlLAogCS5wb3J0X3N0YXJ0CT0gY21kNjQwX3BvcnRfc3RhcnQsCiB9OwogCkBAIC0yNDgsMjYgKzIxMSwzNiBAQAogc3RhdGljIGludCBjbWQ2NDBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZjbWQ2NDBfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkucG9ydF9vcHMgPSAmY21kNjQwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CisJaW50IHJjOworCisJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKIAljbWQ2NDBfaGFyZHdhcmVfaW5pdChwZGV2KTsKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOworCisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmNtZDY0MF9zaHQsIE5VTEwpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGNtZDY0MF9yZWluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAljbWQ2NDBfaGFyZHdhcmVfaW5pdChwZGV2KTsKLSNpZmRlZiBDT05GSUdfUE0KLQlyZXR1cm4gYXRhX3BjaV9kZXZpY2VfcmVzdW1lKHBkZXYpOwotI2Vsc2UKKwlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CiAJcmV0dXJuIDA7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY21kNjQwW10gPSB7CiAJeyBQQ0lfVkRFVklDRShDTUQsIDB4NjQwKSwgMCB9LApAQCAtMjgxLDggKzI1NCw4IEBACiAJLnJlbW92ZQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiAJLnJlc3VtZQkJPSBjbWQ2NDBfcmVpbml0X29uZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21kNjQwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCmluZGV4IDdhY2JiZDkuLmRkZDA5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwpAQCAtMjY2LDEyMCArMjY2LDMwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGNtZDY0eF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjbWQ2NHhfYmFzZV9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkuc2V0X3Bpb21vZGUJPSBjbWQ2NHhfc2V0X3Bpb21vZGUsCisJLnNldF9kbWFtb2RlCT0gY21kNjR4X3NldF9kbWFtb2RlLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGNtZDY0eF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBjbWQ2NHhfc2V0X3Bpb21vZGUsCi0JLnNldF9kbWFtb2RlCT0gY21kNjR4X3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCisJLmluaGVyaXRzCT0gJmNtZDY0eF9iYXNlX29wcywKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3BvcnRfc3RhcnQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgY21kNjQ2cjFfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCT0gY21kNjR4X3NldF9waW9tb2RlLAotCS5zZXRfZG1hbW9kZQk9IGNtZDY0eF9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAorCS5pbmhlcml0cwk9ICZjbWQ2NHhfYmFzZV9vcHMsCiAJLmJtZG1hX3N0b3AJPSBjbWQ2NDZyMV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3BvcnRfc3RhcnQsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgY21kNjQ4X3BvcnRfb3BzID0gewotCS5zZXRfcGlvbW9kZQk9IGNtZDY0eF9zZXRfcGlvbW9kZSwKLQkuc2V0X2RtYW1vZGUJPSBjbWQ2NHhfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gY21kNjQ4X2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKKwkuaW5oZXJpdHMJPSAmY21kNjR4X2Jhc2Vfb3BzLAogCS5ibWRtYV9zdG9wCT0gY21kNjQ4X2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfcG9ydF9zdGFydCwKKwkuY2FibGVfZGV0ZWN0CT0gY21kNjQ4X2NhYmxlX2RldGVjdCwKIH07CiAKIHN0YXRpYyBpbnQgY21kNjR4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC0zODgsMjEgKzI5OCwxOCBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGNtZF9pbmZvWzZdID0gewogCQl7CS8qIENNRCA2NDMgLSBubyBVRE1BICovCi0JCQkuc2h0ID0gJmNtZDY0eF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHdpdGggYnJva2VuIFVETUEgKi8KLQkJCS5zaHQgPSAmY21kNjR4X3NodCwKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCQkucGlvX21hc2sgPSAweDFmLAogCQkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgd2l0aCB3b3JraW5nIFVETUEgKi8KLQkJCS5zaHQgPSAmY21kNjR4X3NodCwKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCQkucGlvX21hc2sgPSAweDFmLAogCQkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtNDEwLDE0ICszMTcsMTIgQEAKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHJldiAxICAqLwotCQkJLnNodCA9ICZjbWQ2NHhfc2h0LAogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJCS5waW9fbWFzayA9IDB4MWYsCiAJCQkubXdkbWFfbWFzayA9IDB4MDcsCiAJCQkucG9ydF9vcHMgPSAmY21kNjQ2cjFfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ4ICovCi0JCQkuc2h0ID0gJmNtZDY0eF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTQyNSw3ICszMzAsNiBAQAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDkgKi8KLQkJCS5zaHQgPSAmY21kNjR4X3NodCwKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCQkucGlvX21hc2sgPSAweDFmLAogCQkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtNDM1LDEyICszMzksMTcgQEAKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmNtZF9pbmZvW2lkLT5kcml2ZXJfZGF0YV0sIE5VTEwgfTsKIAl1OCBtcmRtb2RlOworCWludCByYzsKKworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNsYXNzX3Jldik7CiAJY2xhc3NfcmV2ICY9IDB4RkY7CiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhID09IDApCS8qIDY0MyAqLwotCQlhdGFfcGNpX2NsZWFyX3NpbXBsZXgocGRldik7CisJCWF0YV9wY2lfYm1kbWFfY2xlYXJfc2ltcGxleChwZGV2KTsKIAogCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9DTURfNjQ2KSB7CiAJCS8qIERvZXMgVURNQSB3b3JrID8gKi8KQEAgLTQ2NCwxMyArMzczLDIwIEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFVESURFVENSMCwgMHhGMCk7CiAjZW5kaWYKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmNtZDY0eF9zaHQsIE5VTEwpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGNtZDY0eF9yZWluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAl1OCBtcmRtb2RlOworCWludCByYzsKKworCXJjID0gYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTVJETU9ERSwgJm1yZG1vZGUpOwogCW1yZG1vZGUgJj0gfiAweDMwOwkvKiBJUlEgc2V0IHVwICovCkBAIC00NzksNyArMzk1LDggQEAKICNpZmRlZiBDT05GSUdfUFBDCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFVESURFVENSMCwgMHhGMCk7CiAjZW5kaWYKLQlyZXR1cm4gYXRhX3BjaV9kZXZpY2VfcmVzdW1lKHBkZXYpOworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwppbmRleCA3ZWQyNzliLi4xMTg2YmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKQEAgLTE0MCw1MSArMTQwLDE2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGNzNTUyMF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX0RVTUJfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGNzNTUyMF9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkucWNfcHJlcAkJPSBhdGFfc2ZmX2R1bWJfcWNfcHJlcCwKKwkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCQk9IGNzNTUyMF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gY3M1NTIwX3NldF9kbWFtb2RlLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfZHVtYl9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNzNTUyMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpAQCAtMjAzLDYgKzE2OCwxMCBAQAogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyOwogCWludCBpLCByYzsKIAorCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJLyogSURFIHBvcnQgZW5hYmxlIGJpdHMgKi8KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDYwLCAmcGNpY2ZnKTsKIApAQCAtMjU4LDcgKzIyNyw3IEBACiAJaW9hZGRyLT5jdGxfYWRkciA9IGlvbWFwWzFdOwogCWlvYWRkci0+YWx0c3RhdHVzX2FkZHIgPSBpb21hcFsxXTsKIAlpb2FkZHItPmJtZG1hX2FkZHIgPSBpb21hcFs0XTsKLQlhdGFfc3RkX3BvcnRzKGlvYWRkcik7CisJYXRhX3NmZl9zdGRfcG9ydHMoaW9hZGRyKTsKIAogCWF0YV9wb3J0X2Rlc2MoaG9zdC0+cG9ydHNbMF0sCiAJCSAgICAgICJjbWQgMHgleCBjdGwgMHgleCIsIGNtZF9wb3J0WzBdLCBjdGxfcG9ydFswXSk7CkBAIC0yNjksNyArMjM4LDcgQEAKIAlpb2FkZHItPmN0bF9hZGRyID0gaW9tYXBbM107CiAJaW9hZGRyLT5hbHRzdGF0dXNfYWRkciA9IGlvbWFwWzNdOwogCWlvYWRkci0+Ym1kbWFfYWRkciA9IGlvbWFwWzRdICsgODsKLQlhdGFfc3RkX3BvcnRzKGlvYWRkcik7CisJYXRhX3NmZl9zdGRfcG9ydHMoaW9hZGRyKTsKIAogCWF0YV9wb3J0X2Rlc2MoaG9zdC0+cG9ydHNbMV0sCiAJCSAgICAgICJjbWQgMHgleCBjdGwgMHgleCIsIGNtZF9wb3J0WzFdLCBjdGxfcG9ydFsxXSk7CkBAIC0yODksNyArMjU4LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXJjID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnFbYXAtPnBvcnRfbm9dLAotCQkJCSAgICAgIGF0YV9pbnRlcnJ1cHQsIDAsIERSVl9OQU1FLCBob3N0KTsKKwkJCQkgICAgICBhdGFfc2ZmX2ludGVycnVwdCwgMCwgRFJWX05BTUUsIGhvc3QpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAKQEAgLTMxMCwxMSArMjc5LDIwIEBACiAKIHN0YXRpYyBpbnQgY3M1NTIwX3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCXU4IHBjaWNmZzsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NjAsICZwY2ljZmcpOwogCWlmICgocGNpY2ZnICYgMHg0MCkgPT0gMCkKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NjAsIHBjaWNmZyB8IDB4NDApOwotCXJldHVybiBhdGFfcGNpX2RldmljZV9yZXN1bWUocGRldik7CisKKwlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKaW5kZXggZTE4MThmZC4uNzQ0YmVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIH0KIAogLyoqCi0gKgljczU1MzBfcWNfaXNzdWVfcHJvdAktCWNvbW1hbmQgaXNzdWUKKyAqCWNzNTUzMF9xY19pc3N1ZQkJLQljb21tYW5kIGlzc3VlCiAgKglAcWM6IGNvbW1hbmQgcGVuZGluZwogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBsaWJhdGEgbGF5ZXIgaXMgYWJvdXQgdG8gaXNzdWUgYSBjb21tYW5kLiBXZSB3cmFwCkBAIC0xNDIsNyArMTQyLDcgQEAKICAqCW9uZSBNV0RNQS9VRE1BIGJpdC4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGNzNTUzMF9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IGNzNTUzMF9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYgPSBxYy0+ZGV2OwpAQCAtMTU3LDU5ICsxNTcsMjMgQEAKIAkJICAgIAljczU1MzBfc2V0X2RtYW1vZGUoYXAsIGFkZXYpOwogCX0KIAotCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBjczU1MzBfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9EVU1CX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKKwkuc2dfdGFibGVzaXplCT0gTElCQVRBX0RVTUJfTUFYX1BSRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjczU1MzBfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKworCS5xY19wcmVwIAk9IGF0YV9zZmZfZHVtYl9xY19wcmVwLAorCS5xY19pc3N1ZQk9IGNzNTUzMF9xY19pc3N1ZSwKKworCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogCS5zZXRfcGlvbW9kZQk9IGNzNTUzMF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBjczU1MzBfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAgCT0gYXRhX2R1bWJfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBjczU1MzBfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBwYWxtYXhfZG1pX3RhYmxlW10gPSB7CkBAIC0zMzQsNyArMjk4LDYgQEAKIHN0YXRpYyBpbnQgY3M1NTMwX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7Ci0JCS5zaHQgPSAmY3M1NTMwX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtMzQzLDEyICszMDYsMTYgQEAKIAl9OwogCS8qIFRoZSBkb2NraW5nIGNvbm5lY3RvciBkb2Vzbid0IGRvIFVETUEsIGFuZCBpdCBzZWVtcyBub3QgTVdETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYWxtYXhfc2Vjb25kYXJ5ID0gewotCQkuc2h0ID0gJmNzNTUzMF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5wb3J0X29wcyA9ICZjczU1MzBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKKwlpbnQgcmM7CisKKwlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCS8qIENoaXAgaW5pdGlhbGlzYXRpb24gKi8KIAlpZiAoY3M1NTMwX2luaXRfY2hpcCgpKQpAQCAtMzU4LDE2ICszMjUsMjUgQEAKIAkJcHBpWzFdID0gJmluZm9fcGFsbWF4X3NlY29uZGFyeTsKIAogCS8qIE5vdyBraWNrIG9mZiBBVEEgc2V0IHVwICovCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmY3M1NTMwX3NodCwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgY3M1NTMwX3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYzsKKworCXJjID0gYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJLyogSWYgd2UgZmFpbCBvbiByZXN1bWUgd2UgYXJlIGRvb21lZCAqLwogCWlmIChjczU1MzBfaW5pdF9jaGlwKCkpCi0JCUJVRygpOwotCXJldHVybiBhdGFfcGNpX2RldmljZV9yZXN1bWUocGRldik7CisJCXJldHVybiAtRUlPOworCisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYwppbmRleCAwMTMyNDUzLi5mMWI2NTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKQEAgLTE1OCw1NSArMTU4LDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGNzNTUzNV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjczU1MzVfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkuY2FibGVfZGV0ZWN0CT0gY3M1NTM1X2NhYmxlX2RldGVjdCwKIAkuc2V0X3Bpb21vZGUJPSBjczU1MzVfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCT0gY3M1NTM1X3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gY3M1NTM1X2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoqCkBAIC0yMjIsNyArMTgxLDYgQEAKIHN0YXRpYyBpbnQgY3M1NTM1X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZjczU1MzVfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC0yNDEsNyArMTk5LDcgQEAKIAlyZG1zcihBVEFDX0NIMEQxX1BJTywgdGltaW5ncywgZHVtbXkpOwogCWlmIChDUzU1MzVfQkFEX1BJTyh0aW1pbmdzKSkKIAkJd3Jtc3IoQVRBQ19DSDBEMV9QSU8sIDB4RjdGNEY3RjRVTCwgMCk7Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmNzNTUzNV9zaHQsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3M1NTM1W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYwppbmRleCAxYzRmZjliLi43M2Y4MzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKQEAgLTIyMSw1NSArMjIxLDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGNzNTUzNl9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjczU1MzZfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAkJPSBjczU1MzZfY2FibGVfZGV0ZWN0LAogCS5zZXRfcGlvbW9kZQkJPSBjczU1MzZfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IGNzNTUzNl9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJCT0gY3M1NTM2X2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogfTsKIAogLyoqCkBAIC0yODIsNyArMjQxLDYgQEAKIHN0YXRpYyBpbnQgY3M1NTM2X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZjczU1MzZfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC0zMDMsNyArMjYxLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJmNzNTUzNl9zaHQsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3M1NTM2W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCmluZGV4IGZjNWY5YzQuLmE5YzMyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCkBAIC0xMTAsNjEgKzExMCwxOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBjeTgyYzY5M19zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjeTgyYzY5M19wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogCS5zZXRfcGlvbW9kZQk9IGN5ODJjNjkzX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGN5ODJjNjkzX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogc3RhdGljIGludCBjeTgyYzY5M19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewotCQkuc2h0ID0gJmN5ODJjNjkzX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtMTc4LDcgKzEzNiw3IEBACiAJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmN5ODJjNjkzX3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeTgyYzY5M1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwppbmRleCBkYzMzMjIwLi45ZmJhODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwpAQCAtNDUsMjAgKzQ1LDcgQEAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZlZmFyX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwotfQotCi0vKioKLSAqCWVmYXJfcHJvYmVfcmVzZXQgLSBQcm9iZSBzcGVjaWZpZWQgcG9ydCBvbiBQQVRBIGhvc3QgY29udHJvbGxlcgotICoJQGFwOiBQb3J0IHRvIHByb2JlCi0gKgotICoJTE9DS0lORzoKLSAqCU5vbmUgKGluaGVyaXRlZCBmcm9tIGNhbGxlcikuCi0gKi8KLQotc3RhdGljIHZvaWQgZWZhcl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBlZmFyX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtMjMzLDUzICsyMjAsMTUgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZWZhcl9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBlZmFyX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBlZmFyX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkuY2FibGVfZGV0ZWN0CQk9IGVmYXJfY2FibGVfZGV0ZWN0LAogCS5zZXRfcGlvbW9kZQkJPSBlZmFyX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBlZmFyX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBlZmFyX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJCT0gZWZhcl9jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkucHJlcmVzZXQJCT0gZWZhcl9wcmVfcmVzZXQsCiB9OwogCiAKQEAgLTMwMSw3ICsyNTAsNiBAQAogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewotCQkuc2h0CQk9ICZlZmFyX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMS0yICovCkBAIC0zMTQsNyArMjYyLDcgQEAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmVmYXJfc2h0LCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVmYXJfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggMDcxMzg3Mi4uZjJiODNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0MzY2IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuMiIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9zcGVlZDsKQEAgLTE4MCwxMSArMTgwLDExIEBACiAJCWlmIChocHRfZG1hX2JsYWNrbGlzdGVkKGFkZXYsICJVRE1BIiwgIGJhZF9hdGEzMykpCiAJCQltYXNrICY9IH5BVEFfTUFTS19VRE1BOwogCQlpZiAoaHB0X2RtYV9ibGFja2xpc3RlZChhZGV2LCAiVURNQTMiLCBiYWRfYXRhNjZfMykpCi0JCQltYXNrICY9IH4oMHgwNyA8PCBBVEFfU0hJRlRfVURNQSk7CisJCQltYXNrICY9IH4oMHhGOCA8PCBBVEFfU0hJRlRfVURNQSk7CiAJCWlmIChocHRfZG1hX2JsYWNrbGlzdGVkKGFkZXYsICJVRE1BNCIsIGJhZF9hdGE2Nl80KSkKLQkJCW1hc2sgJj0gfigweDBGIDw8IEFUQV9TSElGVF9VRE1BKTsKKwkJCW1hc2sgJj0gfigweEYwIDw8IEFUQV9TSElGVF9VRE1BKTsKIAl9Ci0JcmV0dXJuIGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIoYWRldiwgbWFzayk7CisJcmV0dXJuIGF0YV9ibWRtYV9tb2RlX2ZpbHRlcihhZGV2LCBtYXNrKTsKIH0KIAogLyoqCkBAIC0yOTAsMjEgKzI5MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGhwdDM2eF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIC8qCkBAIC0zMTIsMzcgKzI5OCwxMSBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBocHQzNjZfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkuY2FibGVfZGV0ZWN0CT0gaHB0MzZ4X2NhYmxlX2RldGVjdCwKKwkubW9kZV9maWx0ZXIJPSBocHQzNjZfZmlsdGVyLAogCS5zZXRfcGlvbW9kZQk9IGhwdDM2Nl9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBocHQzNjZfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gaHB0MzY2X2ZpbHRlciwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBocHQzNnhfY2FibGVfZGV0ZWN0LAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiAvKioKQEAgLTM5MCwxOCArMzUwLDIyIEBACiBzdGF0aWMgaW50IGhwdDM2eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzY2ID0gewotCQkuc2h0ID0gJmhwdDM2eF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmhwdDM2Nl9wb3J0X29wcwogCX07Ci0Jc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IGluZm9faHB0MzY2OwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvX2hwdDM2NiwgTlVMTCB9OwogCisJdm9pZCAqaHByaXYgPSBOVUxMOwogCXUzMiBjbGFzc19yZXY7CiAJdTMyIHJlZzE7CisJaW50IHJjOworCisJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNsYXNzX3Jldik7CiAJY2xhc3NfcmV2ICY9IDB4RkY7CkBAIC00MTksMjQgKzM4MywzMSBAQAogCS8qIGluZm9faHB0MzY2IGlzIHNhZmUgYWdhaW5zdCByZS1lbnRyeSBzbyB3ZSBjYW4gc2NyaWJibGUgb24gaXQgKi8KIAlzd2l0Y2goKHJlZzEgJiAweDcwMCkgPj4gOCkgewogCQljYXNlIDU6Ci0JCQlpbmZvLnByaXZhdGVfZGF0YSA9ICZocHQzNjZfNDA7CisJCQlocHJpdiA9ICZocHQzNjZfNDA7CiAJCQlicmVhazsKIAkJY2FzZSA5OgotCQkJaW5mby5wcml2YXRlX2RhdGEgPSAmaHB0MzY2XzI1OworCQkJaHByaXYgPSAmaHB0MzY2XzI1OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpbmZvLnByaXZhdGVfZGF0YSA9ICZocHQzNjZfMzM7CisJCQlocHJpdiA9ICZocHQzNjZfMzM7CiAJCQlicmVhazsKIAl9CiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmaHB0MzZ4X3NodCwgaHByaXYpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGhwdDM2eF9yZWluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJaW50IHJjOworCisJcmMgPSBhdGFfcGNpX2RldmljZV9kb19yZXN1bWUoZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAlocHQzNnhfaW5pdF9jaGlwc2V0KGRldik7Ci0JcmV0dXJuIGF0YV9wY2lfZGV2aWNlX3Jlc3VtZShkZXYpOworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCA2OGViMzQ5Li40MjE2Mzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzN3giCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuOSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4xMSIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9zcGVlZDsKQEAgLTI4MSw5ICsyODEsOSBAQAogCQlpZiAoaHB0X2RtYV9ibGFja2xpc3RlZChhZGV2LCAiVURNQSIsIGJhZF9hdGEzMykpCiAJCQltYXNrICY9IH5BVEFfTUFTS19VRE1BOwogCQlpZiAoaHB0X2RtYV9ibGFja2xpc3RlZChhZGV2LCAiVURNQTEwMCIsIGJhZF9hdGExMDBfNSkpCi0JCQltYXNrICY9IH4oMHgxRiA8PCBBVEFfU0hJRlRfVURNQSk7CisJCQltYXNrICY9IH4oMHhFMCA8PCBBVEFfU0hJRlRfVURNQSk7CiAJfQotCXJldHVybiBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyKGFkZXYsIG1hc2spOworCXJldHVybiBhdGFfYm1kbWFfbW9kZV9maWx0ZXIoYWRldiwgbWFzayk7CiB9CiAKIC8qKgpAQCAtMjk3LDkgKzI5Nyw5IEBACiB7CiAJaWYgKGFkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKSB7CiAJCWlmIChocHRfZG1hX2JsYWNrbGlzdGVkKGFkZXYsICJVRE1BMTAwIiwgYmFkX2F0YTEwMF81KSkKLQkJCW1hc2sgJj0gfiAoMHgxRiA8PCBBVEFfU0hJRlRfVURNQSk7CisJCQltYXNrICY9IH4oMHhFMCA8PCBBVEFfU0hJRlRfVURNQSk7CiAJfQotCXJldHVybiBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyKGFkZXYsIG1hc2spOworCXJldHVybiBhdGFfYm1kbWFfbW9kZV9maWx0ZXIoYWRldiwgbWFzayk7CiB9CiAKIC8qKgpAQCAtMzM4LDIyICszMzgsMTAgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MCArIDQgKiBhcC0+cG9ydF9ubywgMHgzNyk7CiAJdWRlbGF5KDEwMCk7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCi0vKioKLSAqCWhwdDM3eF9lcnJvcl9oYW5kbGVyCS0JcmVzZXQgdGhlIGhwdDM3NAotICoJQGFwOiBBVEEgcG9ydCB0byByZXNldAotICoKLSAqCVBlcmZvcm0gcHJvYmUgZm9yIEhQVDM3eCwgZXhjZXB0IGZvciBIUFQzNzQgY2hhbm5lbCAyCi0gKi8KLQotc3RhdGljIHZvaWQgaHB0Mzd4X2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIGhwdDM3eF9wcmVfcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLCBhdGFfc3RkX3Bvc3RyZXNldCk7Ci19Ci0KLXN0YXRpYyBpbnQgaHB0Mzc0X3ByZV9yZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCitzdGF0aWMgaW50IGhwdDM3NF9mbjFfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRzIGhwdDM3eF9lbmFibGVfYml0c1tdID0gewogCQl7IDB4NTAsIDEsIDB4MDQsIDB4MDQgfSwKQEAgLTM4NiwyNiArMzc0LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MCArIDQgKiBhcC0+cG9ydF9ubywgMHgzNyk7CiAJdWRlbGF5KDEwMCk7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7Ci19Ci0KLS8qKgotICoJaHB0Mzc0X2Vycm9yX2hhbmRsZXIJLQlyZXNldCB0aGUgaHB0Mzc0Ci0gKglAY2xhc3NlczoKLSAqCi0gKglUaGUgMzc0IGNhYmxlIGRldGVjdCBpcyBhIGxpdHRsZSBkaWZmZXJlbnQgZHVlIHRvIHRoZSBleHRyYQotICoJY2hhbm5lbHMuIFRoZSBmdW5jdGlvbiAwIGNoYW5uZWxzIHdvcmsgbGlrZSB1c3VhbCBidXQgZnVuY3Rpb24gMQotICoJaXMgc3BlY2lhbAotICovCi0KLXN0YXRpYyB2b2lkIGhwdDM3NF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCi0JaWYgKCEoUENJX0ZVTkMocGRldi0+ZGV2Zm4pICYgMSkpCi0JCWhwdDM3eF9lcnJvcl9oYW5kbGVyKGFwKTsKLQllbHNlCi0JCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgaHB0Mzc0X3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtNjE5LDIxICs1ODgsNyBAQAogCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGhwdDM3eF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIC8qCkBAIC02NDEsMzYgKzU5NiwxNSBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBocHQzNzBfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCT0gaHB0MzcwX3NldF9waW9tb2RlLAotCS5zZXRfZG1hbW9kZQk9IGhwdDM3MF9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBocHQzNzBfZmlsdGVyLAorCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGhwdDM3eF9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0IAk9IGhwdDM3MF9ibWRtYV9zdGFydCwKIAkuYm1kbWFfc3RvcAk9IGhwdDM3MF9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKIAotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5tb2RlX2ZpbHRlcgk9IGhwdDM3MF9maWx0ZXIsCisJLnNldF9waW9tb2RlCT0gaHB0MzcwX3NldF9waW9tb2RlLAorCS5zZXRfZG1hbW9kZQk9IGhwdDM3MF9zZXRfZG1hbW9kZSwKKwkucHJlcmVzZXQJPSBocHQzN3hfcHJlX3Jlc2V0LAogfTsKIAogLyoKQEAgLTY3OCwzNiArNjEyLDggQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaHB0MzcwYV9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBocHQzNzBfc2V0X3Bpb21vZGUsCi0JLnNldF9kbWFtb2RlCT0gaHB0MzcwX3NldF9kbWFtb2RlLAorCS5pbmhlcml0cwk9ICZocHQzNzBfcG9ydF9vcHMsCiAJLm1vZGVfZmlsdGVyCT0gaHB0MzcwYV9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGhwdDM3eF9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGhwdDM3MF9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGhwdDM3MF9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoKQEAgLTcxNiw3NCArNjIyLDIzIEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDM3Ml9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCisJLmJtZG1hX3N0b3AJPSBocHQzN3hfYm1kbWFfc3RvcCwKKwogCS5zZXRfcGlvbW9kZQk9IGhwdDM3Ml9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBocHQzNzJfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gaHB0Mzd4X2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gaHB0Mzd4X2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnByZXJlc2V0CT0gaHB0Mzd4X3ByZV9yZXNldCwKIH07CiAKIC8qCiAgKglDb25maWd1cmF0aW9uIGZvciBIUFQzNzQuIE1vZGUgc2V0dGluZyB3b3JrcyBsaWtlIDM3MiBhbmQgZnJpZW5kcwotICoJYnV0IHdlIGhhdmUgYSBkaWZmZXJlbnQgY2FibGUgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAqCWJ1dCB3ZSBoYXZlIGEgZGlmZmVyZW50IGNhYmxlIGRldGVjdGlvbiBwcm9jZWR1cmUgZm9yIGZ1bmN0aW9uIDEuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDM3NF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBocHQzNzJfc2V0X3Bpb21vZGUsCi0JLnNldF9kbWFtb2RlCT0gaHB0MzcyX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGhwdDM3NF9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGhwdDM3eF9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDM3NF9mbjFfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmhwdDM3Ml9wb3J0X29wcywKKwkucHJlcmVzZXQJPSBocHQzNzRfZm4xX3ByZV9yZXNldCwKIH07CiAKIC8qKgpAQCAtODk3LDcgKzc1Miw2IEBACiB7CiAJLyogSFBUMzcwIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MCA9IHsKLQkJLnNodCA9ICZocHQzN3hfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC05MDYsNyArNzYwLDYgQEAKIAl9OwogCS8qIEhQVDM3MEEgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwYSA9IHsKLQkJLnNodCA9ICZocHQzN3hfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC05MTUsNyArNzY4LDYgQEAKIAl9OwogCS8qIEhQVDM3MCAtIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBfMzMgPSB7Ci0JCS5zaHQgPSAmaHB0Mzd4X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtOTI0LDcgKzc3Niw2IEBACiAJfTsKIAkvKiBIUFQzNzBBIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MGFfMzMgPSB7Ci0JCS5zaHQgPSAmaHB0Mzd4X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtOTMzLDI4ICs3ODQsMzEgQEAKIAl9OwogCS8qIEhQVDM3MSwgMzcyIGFuZCBmcmllbmRzIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MiA9IHsKLQkJLnNodCA9ICZocHQzN3hfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzNzJfcG9ydF9vcHMKIAl9OwotCS8qIEhQVDM3NCAtIFVETUExMDAgKi8KLQlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzQgPSB7Ci0JCS5zaHQgPSAmaHB0Mzd4X3NodCwKKwkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IHByZXJlc2V0IG1ldGhvZCAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3NF9mbjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKLQkJLnBvcnRfb3BzID0gJmhwdDM3NF9wb3J0X29wcworCQkucG9ydF9vcHMgPSAmaHB0MzcyX3BvcnRfb3BzCisJfTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4xID0geworCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAorCQkucGlvX21hc2sgPSAweDFmLAorCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCisJCS5wb3J0X29wcyA9ICZocHQzNzRfZm4xX3BvcnRfb3BzCiAJfTsKIAogCXN0YXRpYyBjb25zdCBpbnQgTUh6WzRdID0geyAzMywgNDAsIDUwLCA2NiB9OwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0OwogCXZvaWQgKnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0Jc3RydWN0IGF0YV9wb3J0X2luZm8gcG9ydF9pbmZvOwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJnBvcnRfaW5mbywgTlVMTCB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgTlVMTCwgTlVMTCB9OwogCiAJdTggaXJxbWFzazsKIAl1MzIgY2xhc3NfcmV2OwpAQCAtOTY2LDYgKzgyMCwxMSBAQAogCiAJY29uc3Qgc3RydWN0IGhwdF9jaGlwICpjaGlwX3RhYmxlOwogCWludCBjbG9ja19zbG90OworCWludCByYzsKKworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzc19yZXYpOwogCWNsYXNzX3JldiAmPSAweEZGOwpAQCAtOTgxLDE3ICs4NDAsMTcgQEAKIAogCQlzd2l0Y2goY2xhc3NfcmV2KSB7CiAJCQljYXNlIDM6Ci0JCQkJcG9ydCA9ICZpbmZvX2hwdDM3MDsKKwkJCQlwcGlbMF0gPSAmaW5mb19ocHQzNzA7CiAJCQkJY2hpcF90YWJsZSA9ICZocHQzNzA7CiAJCQkJcHJlZmVyX2RwbGwgPSAwOwogCQkJCWJyZWFrOwogCQkJY2FzZSA0OgotCQkJCXBvcnQgPSAmaW5mb19ocHQzNzBhOworCQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MGE7CiAJCQkJY2hpcF90YWJsZSA9ICZocHQzNzBhOwogCQkJCXByZWZlcl9kcGxsID0gMDsKIAkJCQlicmVhazsKIAkJCWNhc2UgNToKLQkJCQlwb3J0ID0gJmluZm9faHB0MzcyOworCQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKIAkJCQljaGlwX3RhYmxlID0gJmhwdDM3MjsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC0xMDA0LDIxICs4NjMsMjEgQEAKIAkJCQkvKiAzNzJOIGlmIHJldiA+PSAyKi8KIAkJCQlpZiAoY2xhc3NfcmV2ID49IDIpCiAJCQkJCXJldHVybiAtRU5PREVWOwotCQkJCXBvcnQgPSAmaW5mb19ocHQzNzI7CisJCQkJcHBpWzBdID0gJmluZm9faHB0MzcyOwogCQkJCWNoaXBfdGFibGUgPSAmaHB0MzcyYTsKIAkJCQlicmVhazsKIAkJCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgogCQkJCS8qIDMwMk4gaWYgcmV2ID4gMSAqLwogCQkJCWlmIChjbGFzc19yZXYgPiAxKQogCQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCQlwb3J0ID0gJmluZm9faHB0MzcyOworCQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKIAkJCQkvKiBDaGVjayB0aGlzICovCiAJCQkJY2hpcF90YWJsZSA9ICZocHQzMDI7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MToKIAkJCQlpZiAoY2xhc3NfcmV2ID4gMSkKIAkJCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQkJcG9ydCA9ICZpbmZvX2hwdDM3MjsKKwkJCQlwcGlbMF0gPSAmaW5mb19ocHQzNzI7CiAJCQkJY2hpcF90YWJsZSA9ICZocHQzNzE7CiAJCQkJLyogU2luZ2xlIGNoYW5uZWwgZGV2aWNlLCBtYXN0ZXIgaXMgbm90IHByZXNlbnQKIAkJCQkgICBidXQgdGhlIEJJT1MgKG9yIHVzIGZvciBub24geDg2KSBtdXN0IG1hcmsgaXQKQEAgLTEwMjksNyArODg4LDEwIEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NDoKIAkJCQljaGlwX3RhYmxlID0gJmhwdDM3NDsKLQkJCQlwb3J0ID0gJmluZm9faHB0Mzc0OworCQkJCWlmICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCisJCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4wOworCQkJCWVsc2UKKwkJCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjE7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX0VSUiAicGF0YV9ocHQzN3g6IFBDSSB0YWJsZSBpcyBib2d1cyBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLCBkZXYtPmRldmljZSk7CkBAIC0xMTA4LDcgKzk3MCw3IEBACiAJCWludCBkcGxsLCBhZGp1c3Q7CiAKIAkJLyogQ29tcHV0ZSBEUExMICovCi0JCWRwbGwgPSAocG9ydC0+dWRtYV9tYXNrICYgMHhDMCkgPyAzIDogMjsKKwkJZHBsbCA9IChwcGlbMF0tPnVkbWFfbWFzayAmIDB4QzApID8gMyA6IDI7CiAKIAkJZl9sb3cgPSAoTUh6W2Nsb2NrX3Nsb3RdICogNDgpIC8gTUh6W2RwbGxdOwogCQlmX2hpZ2ggPSBmX2xvdyArIDI7CkBAIC0xMTQ4LDE5ICsxMDEwLDE2IEBACiAJCSAqCWFib3V0IGxhY2sgb2YgVURNQTEzMyBzdXBwb3J0IG9uIGxvd2VyIGNsb2NrcwogIAkJICovCiAKLQkJaWYgKGNsb2NrX3Nsb3QgPCAyICYmIHBvcnQgPT0gJmluZm9faHB0MzcwKQotCQkJcG9ydCA9ICZpbmZvX2hwdDM3MF8zMzsKLQkJaWYgKGNsb2NrX3Nsb3QgPCAyICYmIHBvcnQgPT0gJmluZm9faHB0MzcwYSkKLQkJCXBvcnQgPSAmaW5mb19ocHQzNzBhXzMzOworCQlpZiAoY2xvY2tfc2xvdCA8IDIgJiYgcHBpWzBdID09ICZpbmZvX2hwdDM3MCkKKwkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MF8zMzsKKwkJaWYgKGNsb2NrX3Nsb3QgPCAyICYmIHBwaVswXSA9PSAmaW5mb19ocHQzNzBhKQorCQkJcHBpWzBdID0gJmluZm9faHB0MzcwYV8zMzsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicGF0YV9ocHQzN3g6ICVzIHVzaW5nICVkTUh6IGJ1cyBjbG9jay5cbiIsCiAJCSAgICAgICBjaGlwX3RhYmxlLT5uYW1lLCBNSHpbY2xvY2tfc2xvdF0pOwogCX0KIAogCS8qIE5vdyBraWNrIG9mZiBBVEEgc2V0IHVwICovCi0JcG9ydF9pbmZvID0gKnBvcnQ7Ci0JcG9ydF9pbmZvLnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKLQotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcHBpKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZocHQzN3hfc2h0LCBwcml2YXRlX2RhdGEpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0Mzd4W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IDlmMWMwODQuLmQ1YzlmZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAqCVJlc2V0IHRoZSBoYXJkd2FyZSBhbmQgc3RhdGUgbWFjaGluZSwKICAqLwogCi1zdGF0aWMgaW50IGhwdDN4bl9wcmVfcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQorc3RhdGljIGludCBocHQzeDJuX3ByZV9yZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKQEAgLTE1NiwxOSArMTU2LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MCArIDQgKiBhcC0+cG9ydF9ubywgMHgzNyk7CiAJdWRlbGF5KDEwMCk7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7Ci19Ci0KLS8qKgotICoJaHB0M3gybl9lcnJvcl9oYW5kbGVyCS0JcHJvYmUgdGhlIGhwdDN4Mm4gYnVzCi0gKglAYXA6IEFUQSBwb3J0IHRvIHJlc2V0Ci0gKgotICoJUGVyZm9ybSB0aGUgcHJvYmUgcmVzZXQgaGFuZGxpbmcgZm9yIHRoZSAzeDJOCi0gKi8KLQotc3RhdGljIHZvaWQgaHB0M3gybl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBocHQzeG5fcHJlX3Jlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwgYXRhX3N0ZF9wb3N0cmVzZXQpOworCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0zMjAsNyArMzA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBocHQzeDJuX3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHB0M3gybl9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmID0gJnFjLT50ZjsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwpAQCAtMzM1LDI1ICszMjMsMTEgQEAKIAkJCQlocHQzeDJuX3NldF9jbG9jayhhcCwgMHgyMyk7CiAJCX0KIAl9Ci0JcmV0dXJuIGF0YV9xY19pc3N1ZV9wcm90KHFjKTsKKwlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGhwdDN4Mm5fc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiAvKgpAQCAtMzYxLDM3ICszMzUsMTUgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaHB0M3gybl9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCisJLmJtZG1hX3N0b3AJPSBocHQzeDJuX2JtZG1hX3N0b3AsCisJLnFjX2lzc3VlCT0gaHB0M3gybl9xY19pc3N1ZSwKKworCS5jYWJsZV9kZXRlY3QJPSBocHQzeDJuX2NhYmxlX2RldGVjdCwKIAkuc2V0X3Bpb21vZGUJPSBocHQzeDJuX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IGhwdDN4Mm5fc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gaHB0M3gybl9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gaHB0M3gybl9jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBocHQzeDJuX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gaHB0M3gybl9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5wcmVyZXNldAk9IGhwdDN4Mm5fcHJlX3Jlc2V0LAogfTsKIAogLyoqCkBAIC00ODgsMTUgKzQ0MCwxMyBAQAogewogCS8qIEhQVDM3Mk4gYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7Ci0JCS5zaHQgPSAmaHB0M3gybl9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmhwdDN4Mm5fcG9ydF9vcHMKIAl9OwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBvcnQgPSBpbmZvOwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJnBvcnQsIE5VTEwgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAl1OCBpcnFtYXNrOwogCXUzMiBjbGFzc19yZXY7CkBAIC01MDUsNiArNDU1LDEyIEBACiAJdW5zaWduZWQgaW50IGZfbG93LCBmX2hpZ2g7CiAJaW50IGFkanVzdDsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOworCXZvaWQgKmhwcml2ID0gTlVMTDsKKwlpbnQgcmM7CisKKwlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY2xhc3NfcmV2KTsKIAljbGFzc19yZXYgJj0gMHhGRjsKQEAgLTU4Niw5ICs1NDIsOCBAQAogCSAgICAgICBwY2lfbWh6KTsKIAkvKiBTZXQgb3VyIHByaXZhdGUgZGF0YSB1cC4gV2Ugb25seSBuZWVkIGEgZmV3IGZsYWdzIHNvIHdlIHVzZQogCSAgIGl0IGRpcmVjdGx5ICovCi0JcG9ydC5wcml2YXRlX2RhdGEgPSBOVUxMOwogCWlmIChwY2lfbWh6ID4gNjApIHsKLQkJcG9ydC5wcml2YXRlX2RhdGEgPSAodm9pZCAqKVBDSTY2OworCQlocHJpdiA9ICh2b2lkICopUENJNjY7CiAJCS8qCiAJCSAqIE9uICBIUFQzNzFOLCBpZiBBVEEgY2xvY2sgaXMgNjYgTUh6IHdlIG11c3Qgc2V0IGJpdCAyIGluCiAJCSAqIHRoZSBNSVNDLiByZWdpc3RlciB0byBzdHJldGNoIHRoZSBVbHRyYURNQSBUc3MgdGltaW5nLgpAQCAtNTk5LDcgKzU1NCw3IEBACiAJfQogCiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmaHB0M3gybl9zaHQsIGhwcml2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDN4Mm5bXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCmluZGV4IGNiOGJkYjYuLmYxMWEzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYwpAQCAtMTAyLDU4ICsxMDIsMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaHB0M3gzX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDN4M19wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5jaGVja19hdGFwaV9kbWE9IGhwdDN4M19hdGFwaV9kbWEsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gaHB0M3gzX3NldF9waW9tb2RlLAogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfSFBUM1gzX0RNQSkKIAkuc2V0X2RtYW1vZGUJPSBocHQzeDNfc2V0X2RtYW1vZGUsCiAjZW5kaWYKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLmNoZWNrX2F0YXBpX2RtYT0gaHB0M3gzX2F0YXBpX2RtYSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoqCkBAIC0xODksNyArMTQ4LDYgQEAKIHsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZocHQzeDNfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfSFBUM1gzX0RNQSkKQEAgLTI0NCwxNSArMjAyLDE1IEBACiAJCWlvYWRkci0+YWx0c3RhdHVzX2FkZHIgPQogCQlpb2FkZHItPmN0bF9hZGRyID0gYmFzZSArIG9mZnNldF9jdGxbaV07CiAJCWlvYWRkci0+c2NyX2FkZHIgPSBOVUxMOwotCQlhdGFfc3RkX3BvcnRzKGlvYWRkcik7CisJCWF0YV9zZmZfc3RkX3BvcnRzKGlvYWRkcik7CiAJCWlvYWRkci0+Ym1kbWFfYWRkciA9IGJhc2UgKyA4ICogaTsKIAogCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIDQsIC0xLCAiaW9wb3J0Iik7CiAJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgNCwgb2Zmc2V0X2NtZFtpXSwgImNtZCIpOwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBhdGFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCQkgJmhwdDN4M19zaHQpOworCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIGF0YV9zZmZfaW50ZXJydXB0LAorCQkJCSBJUlFGX1NIQVJFRCwgJmhwdDN4M19zaHQpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwppbmRleCA1Yjg1ODZkLi4xNzEzODQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXNldF9kbWFfbW9kZShzdGF0ZS0+ZG1hLCB3cml0ZSA/IERNQV9NT0RFX1dSSVRFIDogRE1BX01PREVfUkVBRCk7CiAKIAkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLwotCWFwLT5vcHMtPmV4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CisJYXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBhdGFfaWNzaWRlX2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCkBAIC0yNzAsNyArMjcwLDcgQEAKIAlkaXNhYmxlX2RtYShzdGF0ZS0+ZG1hKTsKIAogCS8qIHNlZSBhdGFfYm1kbWFfc3RvcCAqLwotCWF0YV9hbHRzdGF0dXMoYXApOworCWF0YV9zZmZfYWx0c3RhdHVzKGFwKTsKIH0KIAogc3RhdGljIHU4IHBhdGFfaWNzaWRlX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMzA0LDQyICszMDQsMTkgQEAKIH0KIAogCi1zdGF0aWMgaW50IHBhdGFfaWNzaWRlX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQkvKiBObyBQUkQgdG8gYWxsb2MgKi8KLQlyZXR1cm4gYXRhX3BhZF9hbGxvYyhhcCwgYXAtPmRldik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBhdGFfaWNzaWRlX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCisJQVRBX0JBU0VfU0hUKERSVl9OQU1FKSwKIAkuc2dfdGFibGVzaXplCQk9IFBBVEFfSUNTSURFX01BWF9TRywKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAogCS5kbWFfYm91bmRhcnkJCT0gfjAsIC8qIG5vIGRtYSBib3VuZGFyaWVzICovCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKIH07CiAKLS8qIHdpc2ggdGhpcyB3YXMgZXhwb3J0ZWQgZnJvbSBsaWJhdGEtY29yZSAqLwotc3RhdGljIHZvaWQgYXRhX2R1bW15X25vcmV0KHN0cnVjdCBhdGFfcG9ydCAqcG9ydCkKLXsKLX0KLQogc3RhdGljIHZvaWQgcGF0YV9pY3NpZGVfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzc2VzKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKIAlzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUgKnN0YXRlID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAogCWlmIChjbGFzc2VzWzBdICE9IEFUQV9ERVZfTk9ORSB8fCBjbGFzc2VzWzFdICE9IEFUQV9ERVZfTk9ORSkKLQkJcmV0dXJuIGF0YV9zdGRfcG9zdHJlc2V0KGxpbmssIGNsYXNzZXMpOworCQlyZXR1cm4gYXRhX3NmZl9wb3N0cmVzZXQobGluaywgY2xhc3Nlcyk7CiAKIAlzdGF0ZS0+cG9ydFthcC0+cG9ydF9ub10uZGlzYWJsZWQgPSAxOwogCkBAIC0zNTUsNDQgKzMzMiwyMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcGF0YV9pY3NpZGVfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgYXRhX3N0ZF9wcmVyZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsCi0JCQkgICBwYXRhX2ljc2lkZV9wb3N0cmVzZXQpOwotfQotCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGF0YV9pY3NpZGVfcG9ydF9vcHMgPSB7Ci0JLnNldF9kbWFtb2RlCQk9IHBhdGFfaWNzaWRlX3NldF9kbWFtb2RlLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuYm1kbWFfc2V0dXAJCT0gcGF0YV9pY3NpZGVfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IHBhdGFfaWNzaWRlX2JtZG1hX3N0YXJ0LAotCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyX25vaXJxLAotCisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCS8qIG5vIG5lZWQgdG8gYnVpbGQgYW55IFBSRCB0YWJsZXMgZm9yIERNQSAqLwogCS5xY19wcmVwCQk9IGF0YV9ub29wX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gcGF0YV9pY3NpZGVfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBwYXRhX2ljc2lkZV9ibWRtYV9zdG9wLAotCi0JLmlycV9jbGVhcgkJPSBhdGFfZHVtbXlfbm9yZXQsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IHBhdGFfaWNzaWRlX3BvcnRfc3RhcnQsCi0KKwkuc2ZmX2RhdGFfeGZlcgkJPSBhdGFfc2ZmX2RhdGFfeGZlcl9ub2lycSwKKwkuYm1kbWFfc2V0dXAJCT0gcGF0YV9pY3NpZGVfYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0CQk9IHBhdGFfaWNzaWRlX2JtZG1hX3N0YXJ0LAogCS5ibWRtYV9zdG9wCQk9IHBhdGFfaWNzaWRlX2JtZG1hX3N0b3AsCiAJLmJtZG1hX3N0YXR1cwkJPSBwYXRhX2ljc2lkZV9ibWRtYV9zdGF0dXMsCisKKwkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCisJLnNldF9kbWFtb2RlCQk9IHBhdGFfaWNzaWRlX3NldF9kbWFtb2RlLAorCS5wb3N0cmVzZXQJCT0gcGF0YV9pY3NpZGVfcG9zdHJlc2V0LAorCS5wb3N0X2ludGVybmFsX2NtZAk9IHBhdGFfaWNzaWRlX2JtZG1hX3N0b3AsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQKQEAgLTUyOCw3ICs0ODEsNyBAQAogCQlwYXRhX2ljc2lkZV9zZXR1cF9pb2FkZHIoYXAsIGluZm8tPmJhc2UsIGluZm8sIGluZm8tPnBvcnRbaV0pOwogCX0KIAotCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBlYy0+aXJxLCBhdGFfaW50ZXJydXB0LCAwLAorCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBlYy0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwgMCwKIAkJCQkgJnBhdGFfaWNzaWRlX3NodCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCmluZGV4IDQzMjBlNzkuLjZhMTExYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYwpAQCAtMjAsNDUgKzIwLDEyIEBACiAjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuMiIKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaXNhcG5wX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpc2FwbnBfcG9ydF9vcHMgPSB7Ci0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCisJLmluaGVyaXRzCT0gJmF0YV9zZmZfcG9ydF9vcHMsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiAvKioKQEAgLTgzLDcgKzUwLDcgQEAKIAogCWlmIChwbnBfaXJxX3ZhbGlkKGlkZXYsIDApKSB7CiAJCWlycSA9IHBucF9pcnEoaWRldiwgMCk7Ci0JCWhhbmRsZXIgPSBhdGFfaW50ZXJydXB0OworCQloYW5kbGVyID0gYXRhX3NmZl9pbnRlcnJ1cHQ7CiAJfQogCiAJLyogYWxsb2NhdGUgaG9zdCAqLwpAQCAtMTExLDcgKzc4LDcgQEAKIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9IGN0bF9hZGRyOwogCX0KIAotCWF0YV9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOworCWF0YV9zZmZfc3RkX3BvcnRzKCZhcC0+aW9hZGRyKTsKIAogCWF0YV9wb3J0X2Rlc2MoYXAsICJjbWQgMHglbGx4IGN0bCAweCVsbHgiLAogCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBucF9wb3J0X3N0YXJ0KGlkZXYsIDApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKaW5kZXggZTBjMmNjMi4uYzExM2Q3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCkBAIC00MCwyMCArNDAsNyBAQAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJml0ODIxM19lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotLyoqCi0gKglpdDgyMTNfZXJyb3JfaGFuZGxlciAtIFByb2JlIHNwZWNpZmllZCBwb3J0IG9uIFBBVEEgaG9zdCBjb250cm9sbGVyCi0gKglAYXA6IFBvcnQgdG8gcHJvYmUKLSAqCi0gKglMT0NLSU5HOgotICoJTm9uZSAoaW5oZXJpdGVkIGZyb20gY2FsbGVyKS4KLSAqLwotCi1zdGF0aWMgdm9pZCBpdDgyMTNfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgaXQ4MjEzX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtMjQzLDUzICsyMzAsMTYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaXQ4MjEzX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkubWF4X3NlY3RvcnMJCT0gQVRBX01BWF9TRUNUT1JTLAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGl0ODIxM19vcHMgPSB7CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpdDgyMTNfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJCT0gaXQ4MjEzX2NhYmxlX2RldGVjdCwKIAkuc2V0X3Bpb21vZGUJCT0gaXQ4MjEzX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBpdDgyMTNfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCQk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGl0ODIxM19lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CQk9IGl0ODIxM19jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkucHJlcmVzZXQJCT0gaXQ4MjEzX3ByZV9yZXNldCwKIH07CiAKIApAQCAtMzExLDcgKzI2MSw2IEBACiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7Ci0JCS5zaHQJCT0gJml0ODIxM19zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwpAQCAtMzI1LDcgKzI3NCw3IEBACiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKIAkJCSAgICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZpdDgyMTNfc2h0LCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl0ODIxM19wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwppbmRleCAxMDlkZGQ0Li5lMTA4MTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKQEAgLTM5NSwxMSArMzk1LDExIEBACiAJCWl0ODIxeF9wcm9ncmFtKGFwLCBhZGV2LCBpdGRldi0+cGlvW2FkZXYtPmRldm5vXSk7CiAJCWl0ZGV2LT5sYXN0X2RldmljZSA9IGRldmljZTsKIAl9Ci0JYXRhX3N0ZF9kZXZfc2VsZWN0KGFwLCBkZXZpY2UpOworCWF0YV9zZmZfZGV2X3NlbGVjdChhcCwgZGV2aWNlKTsKIH0KIAogLyoqCi0gKglpdDgyMXhfc21hcnRfcWNfaXNzdWVfcHJvdAktCXdyYXAgcWMgaXNzdWUgcHJvdAorICoJaXQ4MjF4X3NtYXJ0X3FjX2lzc3VlCQktCXdyYXAgcWMgaXNzdWUgcHJvdAogICoJQHFjOiBjb21tYW5kCiAgKgogICoJV3JhcCB0aGUgY29tbWFuZCBpc3N1ZSBzZXF1ZW5jZSBmb3IgdGhlIElUODIxeC4gV2UgbmVlZCB0bwpAQCAtNDA3LDcgKzQwNyw3IEBACiAgKgl1c3VhbCBoYXBwZW5pbmdzIGtpY2sgb2ZmCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpdDgyMXhfc21hcnRfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHVuc2lnbmVkIGludCBpdDgyMXhfc21hcnRfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzd2l0Y2gocWMtPnRmLmNvbW1hbmQpCiAJewpAQCAtNDI3LDE0ICs0MjcsMTQgQEAKIAkJY2FzZSBBVEFfQ01EX0lEX0FUQToKIAkJLyogQXJndWFibHkgc2hvdWxkIGp1c3Qgbm8tb3AgdGhpcyBvbmUgKi8KIAkJY2FzZSBBVEFfQ01EX1NFVF9GRUFUVVJFUzoKLQkJCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJCQlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiAJfQogCXByaW50ayhLRVJOX0RFQlVHICJpdDgyMXg6IGNhbid0IHByb2Nlc3MgY29tbWFuZCAweCUwMlhcbiIsIHFjLT50Zi5jb21tYW5kKTsKIAlyZXR1cm4gQUNfRVJSX0RFVjsKIH0KIAogLyoqCi0gKglpdDgyMXhfcGFzc3RocnVfcWNfaXNzdWVfcHJvdAktCXdyYXAgcWMgaXNzdWUgcHJvdAorICoJaXQ4MjF4X3Bhc3N0aHJ1X3FjX2lzc3VlCS0Jd3JhcCBxYyBpc3N1ZSBwcm90CiAgKglAcWM6IGNvbW1hbmQKICAqCiAgKglXcmFwIHRoZSBjb21tYW5kIGlzc3VlIHNlcXVlbmNlIGZvciB0aGUgSVQ4MjF4LiBXZSBuZWVkIHRvCkBAIC00NDIsMTAgKzQ0MiwxMCBAQAogICoJdXN1YWwgaGFwcGVuaW5ncyBraWNrIG9mZgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXQ4MjF4X3Bhc3N0aHJ1X3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXQ4MjF4X3Bhc3N0aHJ1X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJaXQ4MjF4X3Bhc3N0aHJ1X2Rldl9zZWxlY3QocWMtPmFwLCBxYy0+ZGV2LT5kZXZubyk7Ci0JcmV0dXJuIGF0YV9xY19pc3N1ZV9wcm90KHFjKTsKKwlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKIC8qKgpAQCAtNTY0LDcgKzU2NCw3IEBACiAJc3RydWN0IGl0ODIxeF9kZXYgKml0ZGV2ID0gYXAtPnByaXZhdGVfZGF0YTsKIAogCS8qIE9ubHkgdXNlIGRtYSBmb3IgdHJhbnNmZXJzIHRvL2Zyb20gdGhlIG1lZGlhLiAqLwotCWlmIChxYy0+bmJ5dGVzIDwgMjA0OCkKKwlpZiAoYXRhX3FjX3Jhd19uYnl0ZXMocWMpIDwgMjA0OCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJLyogTm8gQVRBUEkgRE1BIGluIHNtYXJ0IG1vZGUgKi8KQEAgLTYzMiw4OSArNjMyLDM0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGl0ODIxeF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpdDgyMXhfc21hcnRfcG9ydF9vcHMgPSB7Ci0JLnNldF9tb2RlCT0gaXQ4MjF4X3NtYXJ0X3NldF9tb2RlLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAorCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCiAJLmNoZWNrX2F0YXBpX2RtYT0gaXQ4MjF4X2NoZWNrX2F0YXBpX2RtYSwKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0JLmRldl9jb25maWcJPSBpdDgyMXhfZGV2X2NvbmZpZywKKwkucWNfaXNzdWUJPSBpdDgyMXhfc21hcnRfcWNfaXNzdWUsCiAKLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCiAJLmNhYmxlX2RldGVjdAk9IGl0ODIxeF9pZGVudF9oYWNrLAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gaXQ4MjF4X3NtYXJ0X3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAorCS5zZXRfbW9kZQk9IGl0ODIxeF9zbWFydF9zZXRfbW9kZSwKKwkuZGV2X2NvbmZpZwk9IGl0ODIxeF9kZXZfY29uZmlnLAogCiAJLnBvcnRfc3RhcnQJPSBpdDgyMXhfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpdDgyMXhfcGFzc3RocnVfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCT0gaXQ4MjF4X3Bhc3N0aHJ1X3NldF9waW9tb2RlLAotCS5zZXRfZG1hbW9kZQk9IGl0ODIxeF9wYXNzdGhydV9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAorCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAogCS5jaGVja19hdGFwaV9kbWE9IGl0ODIxeF9jaGVja19hdGFwaV9kbWEsCi0JLmRldl9zZWxlY3QgCT0gaXQ4MjF4X3Bhc3N0aHJ1X2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV91bmtub3duLAotCi0JLmJtZG1hX3NldHVwIAk9IGF0YV9ibWRtYV9zZXR1cCwKKwkuc2ZmX2Rldl9zZWxlY3QJPSBpdDgyMXhfcGFzc3RocnVfZGV2X3NlbGVjdCwKIAkuYm1kbWFfc3RhcnQgCT0gaXQ4MjF4X3Bhc3N0aHJ1X2JtZG1hX3N0YXJ0LAogCS5ibWRtYV9zdG9wCT0gaXQ4MjF4X3Bhc3N0aHJ1X2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAorCS5xY19pc3N1ZQk9IGl0ODIxeF9wYXNzdGhydV9xY19pc3N1ZSwKIAotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGl0ODIxeF9wYXNzdGhydV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKKwkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlX3Vua25vd24sCisJLnNldF9waW9tb2RlCT0gaXQ4MjF4X3Bhc3N0aHJ1X3NldF9waW9tb2RlLAorCS5zZXRfZG1hbW9kZQk9IGl0ODIxeF9wYXNzdGhydV9zZXRfZG1hbW9kZSwKIAogCS5wb3J0X3N0YXJ0CT0gaXQ4MjF4X3BvcnRfc3RhcnQsCiB9OwpAQCAtNzQyLDE0ICs2ODcsMTIgQEAKIAl1OCBjb25mOwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc21hcnQgPSB7Ci0JCS5zaHQgPSAmaXQ4MjF4X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3NtYXJ0X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYXNzdGhydSA9IHsKLQkJLnNodCA9ICZpdDgyMXhfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC03NTksNiArNzAyLDExIEBACiAKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7IE5VTEwsIE5VTEwgfTsKIAlzdGF0aWMgY2hhciAqbW9kZVsyXSA9IHsgInBhc3MgdGhyb3VnaCIsICJzbWFydCIgfTsKKwlpbnQgcmM7CisKKwlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCS8qIEZvcmNlIHRoZSBjYXJkIGludG8gYnlwYXNzIG1vZGUgaWYgc28gcmVxdWVzdGVkICovCiAJaWYgKGl0ODIxMl9ub3JhaWQpIHsKQEAgLTc3NCwxNiArNzIyLDIzIEBACiAJZWxzZQogCQlwcGlbMF0gPSAmaW5mb19zbWFydDsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJml0ODIxeF9zaHQsIE5VTEwpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGl0ODIxeF9yZWluaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAkvKiBSZXN1bWUgLSB0dXJuIHJhaWQgYmFjayBvZmYgaWYgbmVlZCBiZSAqLwogCWlmIChpdDgyMTJfbm9yYWlkKQogCQlpdDgyMXhfZGlzYWJsZV9yYWlkKHBkZXYpOwotCXJldHVybiBhdGFfcGNpX2RldmljZV9yZXN1bWUocGRldik7CisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCXJldHVybiByYzsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwppbmRleCAwMzA4NzhmLi44YTE3NWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKQEAgLTg4LDQ4ICs4OCwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpeHA0eHhfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX1BJT19TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGl4cDR4eF9wb3J0X29wcyA9IHsKLQkuc2V0X21vZGUJCT0gaXhwNHh4X3NldF9tb2RlLAotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5jaGVja19zdGF0dXMgCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QgCQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5xY19wcmVwIAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBpeHA0eHhfbW1pb19kYXRhX3hmZXIsCisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5zZmZfZGF0YV94ZmVyCQk9IGl4cDR4eF9tbWlvX2RhdGFfeGZlciwKIAkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAorCS5zZXRfbW9kZQkJPSBpeHA0eHhfc2V0X21vZGUsCiB9OwogCiBzdGF0aWMgdm9pZCBpeHA0eHhfc2V0dXBfcG9ydChzdHJ1Y3QgYXRhX3BvcnQgKmFwLApAQCAtMTQ0LDcgKzExMCw3IEBACiAJaW9hZGRyLT5hbHRzdGF0dXNfYWRkcgk9IGRhdGEtPmNzMSArIDB4MDY7CiAJaW9hZGRyLT5jdGxfYWRkcgk9IGRhdGEtPmNzMSArIDB4MDY7CiAKLQlhdGFfc3RkX3BvcnRzKGlvYWRkcik7CisJYXRhX3NmZl9zdGRfcG9ydHMoaW9hZGRyKTsKIAogI2lmbmRlZiBfX0FSTUVCX18KIApAQCAtMjIwLDcgKzE4Niw3IEBACiAJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKIAkvKiBhY3RpdmF0ZSBob3N0ICovCi0JcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgYXRhX2ludGVycnVwdCwgMCwgJml4cDR4eF9zaHQpOworCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBpcnEsIGF0YV9zZmZfaW50ZXJydXB0LCAwLCAmaXhwNHh4X3NodCk7CiB9CiAKIHN0YXRpYyBfX2RldmV4aXQgaW50IGl4cDR4eF9wYXRhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYyBiL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCmluZGV4IDAwYmJiYmQuLjczYjc1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCkBAIC0xMDIsNzMgKzEwMiwxOCBAQAogCQlhcC0+Y2JsID0gQVRBX0NCTF9TQVRBOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwotfQotCi0vKioKLSAqCWptaWNyb25fZXJyb3JfaGFuZGxlciAtIFNldHVwIGFuZCBlcnJvciBoYW5kbGVyCi0gKglAYXA6IFBvcnQgdG8gaGFuZGxlCi0gKgotICoJTE9DS0lORzoKLSAqCU5vbmUgKGluaGVyaXRlZCBmcm9tIGNhbGxlcikuCi0gKi8KLQotc3RhdGljIHZvaWQgam1pY3Jvbl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBqbWljcm9uX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsCi0JCQkgICBhdGFfc3RkX3Bvc3RyZXNldCk7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCiAvKiBObyBQSU8gb3IgRE1BIG1ldGhvZHMgbmVlZGVkIGZvciB0aGlzIGRldmljZSAqLwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBqbWljcm9uX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLyogVXNlIHN0YW5kYXJkIENIUyBtYXBwaW5nIHJ1bGVzICovCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGptaWNyb25fb3BzID0gewotCS8qIFRhc2sgZmlsZSBpcyBQQ0kgQVRBIGZvcm1hdCwgdXNlIGhlbHBlcnMgKi8KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGptaWNyb25fZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0KLQkvKiBCTURNQSBoYW5kbGluZyBpcyBQQ0kgQVRBIGZvcm1hdCwgdXNlIGhlbHBlcnMgKi8KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkvKiBJUlEtcmVsYXRlZCBob29rcyAqLwotCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLyogR2VuZXJpYyBQQVRBIFBDSSBBVEEgaGVscGVycyAqLwotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGptaWNyb25fb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5wcmVyZXNldAkJPSBqbWljcm9uX3ByZV9yZXNldCwKIH07CiAKIApAQCAtMTg5LDcgKzEzNCw2IEBACiBzdGF0aWMgaW50IGptaWNyb25faW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7Ci0JCS5zaHQJCT0gJmptaWNyb25fc2h0LAogCQkuZmxhZ3MJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCiAJCS5waW9fbWFzawk9IDB4MWYsCkBAIC0yMDAsNyArMTQ0LDcgQEAKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJmptaWNyb25fc2h0LCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGptaWNyb25fcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKaW5kZXggZDIxNzdmNy4uN2FmNGIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCkBAIC0yMDgsMjEgKzIwOCwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBsZWdhY3lfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX1BJT19TSFQoRFJWX05BTUUpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGxlZ2FjeV9iYXNlX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogfTsKIAogLyoKQEAgLTIzNCw1NSArMjI1LDE0IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpbXBsZV9wb3J0X29wcyA9IHsKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXJfbm9pcnEsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5pbmhlcml0cwk9ICZsZWdhY3lfYmFzZV9wb3J0X29wcywKKwkuc2ZmX2RhdGFfeGZlcgk9IGF0YV9zZmZfZGF0YV94ZmVyX25vaXJxLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGxlZ2FjeV9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmbGVnYWN5X2Jhc2VfcG9ydF9vcHMsCisJLnNmZl9kYXRhX3hmZXIJPSBhdGFfc2ZmX2RhdGFfeGZlcl9ub2lycSwKIAkuc2V0X21vZGUJPSBsZWdhY3lfc2V0X21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXJfbm9pcnEsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoKQEAgLTM2NywzNiArMzE3LDE1IEBACiAJCX0KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0gZWxzZQotCQlidWZsZW4gPSBhdGFfZGF0YV94ZmVyX25vaXJxKGRldiwgYnVmLCBidWZsZW4sIHJ3KTsKKwkJYnVmbGVuID0gYXRhX3NmZl9kYXRhX3hmZXJfbm9pcnEoZGV2LCBidWYsIGJ1ZmxlbiwgcncpOwogCiAJcmV0dXJuIGJ1ZmxlbjsKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkYzIwMjMwX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZsZWdhY3lfYmFzZV9wb3J0X29wcywKIAkuc2V0X3Bpb21vZGUJPSBwZGMyMDIzMF9zZXRfcGlvbW9kZSwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gcGRjX2RhdGFfeGZlcl92bGIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5zZmZfZGF0YV94ZmVyCT0gcGRjX2RhdGFfeGZlcl92bGIsCiB9OwogCiAvKgpAQCAtNDI3LDMwICszNTYsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaHQ2NTYwYV9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmbGVnYWN5X2Jhc2VfcG9ydF9vcHMsCiAJLnNldF9waW9tb2RlCT0gaHQ2NTYwYV9zZXRfcGlvbW9kZSwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwJLyogQ2hlY2sgdmxiL25vaXJxICovCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoKQEAgLTQ5MiwzMCArMzk5LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGh0NjU2MGJfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmxlZ2FjeV9iYXNlX3BvcnRfb3BzLAogCS5zZXRfcGlvbW9kZQk9IGh0NjU2MGJfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsICAgIC8qIEZJWE1FOiBDaGVjayAzMmJpdCBhbmQgbm9pcnEgKi8KLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiAvKgpAQCAtNjEzLDMwICs0OTgsOCBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBvcHRpODJjNjExYV9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmbGVnYWN5X2Jhc2VfcG9ydF9vcHMsCiAJLnNldF9waW9tb2RlCT0gb3B0aTgyYzYxMWFfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoKQEAgLTcxNiw3ICs1NzksNyBAQAogfQogCiAvKioKLSAqCW9wdDgyYzQ2NW12X3FjX2lzc3VlX3Byb3QJLQljb21tYW5kIGlzc3VlCisgKglvcHQ4MmM0NjVtdl9xY19pc3N1ZQkJLQljb21tYW5kIGlzc3VlCiAgKglAcWM6IGNvbW1hbmQgcGVuZGluZwogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBsaWJhdGEgbGF5ZXIgaXMgYWJvdXQgdG8gaXNzdWUgYSBjb21tYW5kLiBXZSB3cmFwCkBAIC03MzAsNyArNTkzLDcgQEAKICAqCUZJWE1FOiBkdWFsIGNoYW5uZWwgbmVlZHMgLT5zZXJpYWxpemUgc3VwcG9ydAogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgb3B0aTgyYzQ2eF9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IG9wdGk4MmM0NnhfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gcWMtPmRldjsKQEAgLTc0MSw0NyArNjA0LDI2IEBACiAJICAgICYmIGFwLT5ob3N0LT5wcml2YXRlX2RhdGEgIT0gTlVMTCkKIAkJb3B0aTgyYzQ2eF9zZXRfcGlvbW9kZShhcCwgYWRldik7CiAKLQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG9wdGk4MmM0NnhfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmxlZ2FjeV9iYXNlX3BvcnRfb3BzLAogCS5zZXRfcGlvbW9kZQk9IG9wdGk4MmM0Nnhfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IG9wdGk4MmM0NnhfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkucWNfaXNzdWUJPSBvcHRpODJjNDZ4X3FjX2lzc3VlLAogfTsKIAogc3RhdGljIHZvaWQgcWRpNjUwMF9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKIAlzdHJ1Y3QgYXRhX3RpbWluZyB0OwotCXN0cnVjdCBsZWdhY3lfZGF0YSAqcWRpID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbGVnYWN5X2RhdGEgKmxkX3FkaSA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJaW50IGFjdGl2ZSwgcmVjb3Zlcnk7CiAJdTggdGltaW5nOwogCiAJLyogR2V0IHRoZSB0aW1pbmcgZGF0YSBpbiBjeWNsZXMgKi8KIAlhdGFfdGltaW5nX2NvbXB1dGUoYWRldiwgYWRldi0+cGlvX21vZGUsICZ0LCAzMDMwMywgMTAwMCk7CiAKLQlpZiAocWRpLT5mYXN0KSB7CisJaWYgKGxkX3FkaS0+ZmFzdCkgewogCQlhY3RpdmUgPSA4IC0gRklUKHQuYWN0aXZlLCAxLCA4KTsKIAkJcmVjb3ZlcnkgPSAxOCAtIEZJVCh0LnJlY292ZXIsIDMsIDE4KTsKIAl9IGVsc2UgewpAQCAtNzkwLDkgKzYzMiw5IEBACiAJfQogCXRpbWluZyA9IChyZWNvdmVyeSA8PCA0KSB8IGFjdGl2ZSB8IDB4MDg7CiAKLQlxZGktPmNsb2NrW2FkZXYtPmRldm5vXSA9IHRpbWluZzsKKwlsZF9xZGktPmNsb2NrW2FkZXYtPmRldm5vXSA9IHRpbWluZzsKIAotCW91dGIodGltaW5nLCBxZGktPnRpbWluZyk7CisJb3V0Yih0aW1pbmcsIGxkX3FkaS0+dGltaW5nKTsKIH0KIAogLyoqCkBAIC04MDIsMjAgKzY0NCwyMCBAQAogICoJQGlycTogaW50ZXJydXB0IGxpbmUKICAqCiAgKglJbiBkdWFsIGNoYW5uZWwgbW9kZSB0aGUgNjU4MCBoYXMgb25lIGNsb2NrIHBlciBjaGFubmVsIGFuZCB3ZSBoYXZlCi0gKgl0byBzb2Z0d2FyZSBjbG9ja3N3aXRjaCBpbiBxY19pc3N1ZV9wcm90LgorICoJdG8gc29mdHdhcmUgY2xvY2tzd2l0Y2ggaW4gcWNfaXNzdWUuCiAgKi8KIAogc3RhdGljIHZvaWQgcWRpNjU4MGRwX3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0cnVjdCBhdGFfdGltaW5nIHQ7Ci0Jc3RydWN0IGxlZ2FjeV9kYXRhICpxZGkgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBsZWdhY3lfZGF0YSAqbGRfcWRpID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAlpbnQgYWN0aXZlLCByZWNvdmVyeTsKIAl1OCB0aW1pbmc7CiAKIAkvKiBHZXQgdGhlIHRpbWluZyBkYXRhIGluIGN5Y2xlcyAqLwogCWF0YV90aW1pbmdfY29tcHV0ZShhZGV2LCBhZGV2LT5waW9fbW9kZSwgJnQsIDMwMzAzLCAxMDAwKTsKIAotCWlmIChxZGktPmZhc3QpIHsKKwlpZiAobGRfcWRpLT5mYXN0KSB7CiAJCWFjdGl2ZSA9IDggLSBGSVQodC5hY3RpdmUsIDEsIDgpOwogCQlyZWNvdmVyeSA9IDE4IC0gRklUKHQucmVjb3ZlciwgMywgMTgpOwogCX0gZWxzZSB7CkBAIC04MjQsMTIgKzY2NiwxMiBAQAogCX0KIAl0aW1pbmcgPSAocmVjb3ZlcnkgPDwgNCkgfCBhY3RpdmUgfCAweDA4OwogCi0JcWRpLT5jbG9ja1thZGV2LT5kZXZub10gPSB0aW1pbmc7CisJbGRfcWRpLT5jbG9ja1thZGV2LT5kZXZub10gPSB0aW1pbmc7CiAKLQlvdXRiKHRpbWluZywgcWRpLT50aW1pbmcgKyAyICogYXAtPnBvcnRfbm8pOworCW91dGIodGltaW5nLCBsZF9xZGktPnRpbWluZyArIDIgKiBhcC0+cG9ydF9ubyk7CiAJLyogQ2xlYXIgdGhlIEZJRk8gKi8KIAlpZiAoYWRldi0+Y2xhc3MgIT0gQVRBX0RFVl9BVEEpCi0JCW91dGIoMHg1RiwgcWRpLT50aW1pbmcgKyAzKTsKKwkJb3V0YigweDVGLCBsZF9xZGktPnRpbWluZyArIDMpOwogfQogCiAvKioKQEAgLTg0NSwxNCArNjg3LDE0IEBACiBzdGF0aWMgdm9pZCBxZGk2NTgwX3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0cnVjdCBhdGFfdGltaW5nIHQ7Ci0Jc3RydWN0IGxlZ2FjeV9kYXRhICpxZGkgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBsZWdhY3lfZGF0YSAqbGRfcWRpID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAlpbnQgYWN0aXZlLCByZWNvdmVyeTsKIAl1OCB0aW1pbmc7CiAKIAkvKiBHZXQgdGhlIHRpbWluZyBkYXRhIGluIGN5Y2xlcyAqLwogCWF0YV90aW1pbmdfY29tcHV0ZShhZGV2LCBhZGV2LT5waW9fbW9kZSwgJnQsIDMwMzAzLCAxMDAwKTsKIAotCWlmIChxZGktPmZhc3QpIHsKKwlpZiAobGRfcWRpLT5mYXN0KSB7CiAJCWFjdGl2ZSA9IDggLSBGSVQodC5hY3RpdmUsIDEsIDgpOwogCQlyZWNvdmVyeSA9IDE4IC0gRklUKHQucmVjb3ZlciwgMywgMTgpOwogCX0gZWxzZSB7CkBAIC04NjAsMzUgKzcwMiwzNSBAQAogCQlyZWNvdmVyeSA9IDE1IC0gRklUKHQucmVjb3ZlciwgMCwgMTUpOwogCX0KIAl0aW1pbmcgPSAocmVjb3ZlcnkgPDwgNCkgfCBhY3RpdmUgfCAweDA4OwotCXFkaS0+Y2xvY2tbYWRldi0+ZGV2bm9dID0gdGltaW5nOwotCW91dGIodGltaW5nLCBxZGktPnRpbWluZyArIDIgKiBhZGV2LT5kZXZubyk7CisJbGRfcWRpLT5jbG9ja1thZGV2LT5kZXZub10gPSB0aW1pbmc7CisJb3V0Yih0aW1pbmcsIGxkX3FkaS0+dGltaW5nICsgMiAqIGFkZXYtPmRldm5vKTsKIAkvKiBDbGVhciB0aGUgRklGTyAqLwogCWlmIChhZGV2LT5jbGFzcyAhPSBBVEFfREVWX0FUQSkKLQkJb3V0YigweDVGLCBxZGktPnRpbWluZyArIDMpOworCQlvdXRiKDB4NUYsIGxkX3FkaS0+dGltaW5nICsgMyk7CiB9CiAKIC8qKgotICoJcWRpX3FjX2lzc3VlX3Byb3QJLQljb21tYW5kIGlzc3VlCisgKglxZGlfcWNfaXNzdWUJCS0JY29tbWFuZCBpc3N1ZQogICoJQHFjOiBjb21tYW5kIHBlbmRpbmcKICAqCiAgKglDYWxsZWQgd2hlbiB0aGUgbGliYXRhIGxheWVyIGlzIGFib3V0IHRvIGlzc3VlIGEgY29tbWFuZC4gV2Ugd3JhcAogICoJdGhpcyBpbnRlcmZhY2Ugc28gdGhhdCB3ZSBjYW4gbG9hZCB0aGUgY29ycmVjdCBBVEEgdGltaW5ncy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHFkaV9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IHFkaV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYgPSBxYy0+ZGV2OwotCXN0cnVjdCBsZWdhY3lfZGF0YSAqcWRpID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbGVnYWN5X2RhdGEgKmxkX3FkaSA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAKLQlpZiAocWRpLT5jbG9ja1thZGV2LT5kZXZub10gIT0gcWRpLT5sYXN0KSB7CisJaWYgKGxkX3FkaS0+Y2xvY2tbYWRldi0+ZGV2bm9dICE9IGxkX3FkaS0+bGFzdCkgewogCQlpZiAoYWRldi0+cGlvX21vZGUpIHsKLQkJCXFkaS0+bGFzdCA9IHFkaS0+Y2xvY2tbYWRldi0+ZGV2bm9dOwotCQkJb3V0YihxZGktPmNsb2NrW2FkZXYtPmRldm5vXSwgcWRpLT50aW1pbmcgKworCQkJbGRfcWRpLT5sYXN0ID0gbGRfcWRpLT5jbG9ja1thZGV2LT5kZXZub107CisJCQlvdXRiKGxkX3FkaS0+Y2xvY2tbYWRldi0+ZGV2bm9dLCBsZF9xZGktPnRpbWluZyArCiAJCQkJCQkJMiAqIGFwLT5wb3J0X25vKTsKIAkJfQogCX0KLQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB2bGIzMl9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKQEAgLTkxNyw3ICs3NTksNyBAQAogCQl9CiAJCXJldHVybiAoYnVmbGVuICsgMykgJiB+MzsKIAl9IGVsc2UKLQkJcmV0dXJuIGF0YV9kYXRhX3hmZXIoYWRldiwgYnVmLCBidWZsZW4sIHJ3KTsKKwkJcmV0dXJuIGF0YV9zZmZfZGF0YV94ZmVyKGFkZXYsIGJ1ZiwgYnVmbGVuLCBydyk7CiB9CiAKIHN0YXRpYyBpbnQgcWRpX3BvcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LApAQCAtOTMwLDg0ICs3NzIsMjIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHFkaTY1MDBfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmxlZ2FjeV9iYXNlX3BvcnRfb3BzLAogCS5zZXRfcGlvbW9kZQk9IHFkaTY1MDBfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IHFkaV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IHZsYjMyX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnFjX2lzc3VlCT0gcWRpX3FjX2lzc3VlLAorCS5zZmZfZGF0YV94ZmVyCT0gdmxiMzJfZGF0YV94ZmVyLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHFkaTY1ODBfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmxlZ2FjeV9iYXNlX3BvcnRfb3BzLAogCS5zZXRfcGlvbW9kZQk9IHFkaTY1ODBfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IHZsYjMyX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNmZl9kYXRhX3hmZXIJPSB2bGIzMl9kYXRhX3hmZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcWRpNjU4MGRwX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZsZWdhY3lfYmFzZV9wb3J0X29wcywKIAkuc2V0X3Bpb21vZGUJPSBxZGk2NTgwZHBfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IHFkaV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IHZsYjMyX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNmZl9kYXRhX3hmZXIJPSB2bGIzMl9kYXRhX3hmZXIsCiB9OwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHdpbmJvbmRfbG9jayk7CkBAIC0xMDM3LDEyICs4MTcsMTIgQEAKIHN0YXRpYyB2b2lkIHdpbmJvbmRfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IGF0YV90aW1pbmcgdDsKLQlzdHJ1Y3QgbGVnYWN5X2RhdGEgKndpbmJvbmQgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBsZWdhY3lfZGF0YSAqbGRfd2luYm9uZCA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJaW50IGFjdGl2ZSwgcmVjb3Zlcnk7CiAJdTggcmVnOwogCWludCB0aW1pbmcgPSAweDg4ICsgKGFwLT5wb3J0X25vICogNCkgKyAoYWRldi0+ZGV2bm8gKiAyKTsKIAotCXJlZyA9IHdpbmJvbmRfcmVhZGNmZyh3aW5ib25kLT50aW1pbmcsIDB4ODEpOworCXJlZyA9IHdpbmJvbmRfcmVhZGNmZyhsZF93aW5ib25kLT50aW1pbmcsIDB4ODEpOwogCiAJLyogR2V0IHRoZSB0aW1pbmcgZGF0YSBpbiBjeWNsZXMgKi8KIAlpZiAocmVnICYgMHg0MCkJCS8qIEZhc3QgVkxCIGJ1cywgYXNzdW1lIDUwTUh6ICovCkBAIC0xMDUzLDcgKzgzMyw3IEBACiAJYWN0aXZlID0gKEZJVCh0LmFjdGl2ZSwgMywgMTcpIC0gMSkgJiAweDBGOwogCXJlY292ZXJ5ID0gKEZJVCh0LnJlY292ZXIsIDEsIDE1KSArIDEpICYgMHgwRjsKIAl0aW1pbmcgPSAoYWN0aXZlIDw8IDQpIHwgcmVjb3Zlcnk7Ci0Jd2luYm9uZF93cml0ZWNmZyh3aW5ib25kLT50aW1pbmcsIHRpbWluZywgcmVnKTsKKwl3aW5ib25kX3dyaXRlY2ZnKGxkX3dpbmJvbmQtPnRpbWluZywgdGltaW5nLCByZWcpOwogCiAJLyogTG9hZCB0aGUgc2V0dXAgdGltaW5nICovCiAKQEAgLTEwNjMsNyArODQzLDcgQEAKIAlpZiAoIWF0YV9waW9fbmVlZF9pb3JkeShhZGV2KSkKIAkJcmVnIHw9IDB4MDI7CS8qIElPUkRZIG9mZiAqLwogCXJlZyB8PSAoRklUKHQuc2V0dXAsIDAsIDMpIDw8IDYpOwotCXdpbmJvbmRfd3JpdGVjZmcod2luYm9uZC0+dGltaW5nLCB0aW1pbmcgKyAxLCByZWcpOworCXdpbmJvbmRfd3JpdGVjZmcobGRfd2luYm9uZC0+dGltaW5nLCB0aW1pbmcgKyAxLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHdpbmJvbmRfcG9ydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCkBAIC0xMDc2LDI5ICs4NTYsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgd2luYm9uZF9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmbGVnYWN5X2Jhc2VfcG9ydF9vcHMsCiAJLnNldF9waW9tb2RlCT0gd2luYm9uZF9zZXRfcGlvbW9kZSwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gdmxiMzJfZGF0YV94ZmVyLAotCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNmZl9kYXRhX3hmZXIJPSB2bGIzMl9kYXRhX3hmZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGxlZ2FjeV9jb250cm9sbGVyIGNvbnRyb2xsZXJzW10gPSB7CkBAIC0xMjU2LDEzICsxMDE2LDEzIEBACiAJYXAtPmlvYWRkci5jbWRfYWRkciA9IGlvX2FkZHI7CiAJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0cmxfYWRkcjsKIAlhcC0+aW9hZGRyLmN0bF9hZGRyID0gY3RybF9hZGRyOwotCWF0YV9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOworCWF0YV9zZmZfc3RkX3BvcnRzKCZhcC0+aW9hZGRyKTsKIAlhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhID0gbGQ7CiAKIAlhdGFfcG9ydF9kZXNjKGFwLCAiY21kIDB4JWx4IGN0bCAweCVseCIsIGlvLCBpbyArIDB4MDIwNik7CiAKLQlyZXQgPSBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwcm9iZS0+aXJxLCBhdGFfaW50ZXJydXB0LCAwLAotCQkJCQkJCQkmbGVnYWN5X3NodCk7CisJcmV0ID0gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcHJvYmUtPmlycSwgYXRhX3NmZl9pbnRlcnJ1cHQsIDAsCisJCQkJJmxlZ2FjeV9zaHQpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIAlsZC0+cGxhdGZvcm1fZGV2ID0gcGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKaW5kZXggYTgxZjI1ZC4uMjRhMDExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkgICAgKCEoZGV2aWNlcyAmIDB4MTApKSkJLyogUEFUQSBlbmFibGUgPyAqLwogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFydmVsbF9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTc1LDcxICs3NSwxNiBAQAogCXJldHVybiAwOwkvKiBPdXIgQlVHIG1hY3JvIG5lZWRzIHRoZSByaWdodCBtYXJrdXAgKi8KIH0KIAotLyoqCi0gKgltYXJ2ZWxsX2Vycm9yX2hhbmRsZXIgLSBTZXR1cCBhbmQgZXJyb3IgaGFuZGxlcgotICoJQGFwOiBQb3J0IHRvIGhhbmRsZQotICoKLSAqCUxPQ0tJTkc6Ci0gKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgotICovCi0KLXN0YXRpYyB2b2lkIG1hcnZlbGxfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgbWFydmVsbF9wcmVfcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLAotCQkJICAgYXRhX3N0ZF9wb3N0cmVzZXQpOwotfQotCiAvKiBObyBQSU8gb3IgRE1BIG1ldGhvZHMgbmVlZGVkIGZvciB0aGlzIGRldmljZSAqLwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtYXJ2ZWxsX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLyogVXNlIHN0YW5kYXJkIENIUyBtYXBwaW5nIHJ1bGVzICovCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG1hcnZlbGxfb3BzID0gewotCS8qIFRhc2sgZmlsZSBpcyBQQ0kgQVRBIGZvcm1hdCwgdXNlIGhlbHBlcnMgKi8KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IG1hcnZlbGxfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbWFydmVsbF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLmNhYmxlX2RldGVjdAkJPSBtYXJ2ZWxsX2NhYmxlX2RldGVjdCwKLQotCS8qIEJNRE1BIGhhbmRsaW5nIGlzIFBDSSBBVEEgZm9ybWF0LCB1c2UgaGVscGVycyAqLwotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS8qIFRpbWVvdXQgaGFuZGxpbmcgKi8KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS8qIEdlbmVyaWMgUEFUQSBQQ0kgQVRBIGhlbHBlcnMgKi8KLQkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnByZXJlc2V0CQk9IG1hcnZlbGxfcHJlX3Jlc2V0LAogfTsKIAogCkBAIC0xNjAsNyArMTA1LDYgQEAKIHN0YXRpYyBpbnQgbWFydmVsbF9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodAkJPSAmbWFydmVsbF9zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCiAJCS5waW9fbWFzawk9IDB4MWYsCkBAIC0xNzAsNyArMTE0LDYgQEAKIAkJLnBvcnRfb3BzCT0gJm1hcnZlbGxfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc2F0YSA9IHsKLQkJLnNodAkJPSAmbWFydmVsbF9zaHQsCiAJCS8qIFNsYXZlIHBvc3NpYmxlIGFzIGl0cyBtYWdpY2FsbHkgbWFwcGVkIG5vdCByZWFsICovCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCkBAIC0xODUsNyArMTI4LDcgQEAKIAlpZiAocGRldi0+ZGV2aWNlID09IDB4NjEwMSkKIAkJcHBpWzFdID0gJmF0YV9kdW1teV9wb3J0X2luZm87CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZtYXJ2ZWxsX3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYXJ2ZWxsX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKaW5kZXggNTQxM2ViZi4uYmM3OWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKQEAgLTI1Miw1MyArMjUyLDE5IEBACiAJaWYgKGRldmljZSAhPSBwcml2LT5jc2VsKQogCQltcGM1Mnh4X2F0YV9hcHBseV90aW1pbmdzKHByaXYsIGRldmljZSk7CiAKLQlhdGFfc3RkX2Rldl9zZWxlY3QoYXAsZGV2aWNlKTsKKwlhdGFfc2ZmX2Rldl9zZWxlY3QoYXAsZGV2aWNlKTsKIH0KIAotc3RhdGljIHZvaWQKLW1wYzUyeHhfYXRhX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIGF0YV9zdGRfcHJlcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLAotCQkJYXRhX3N0ZF9wb3N0cmVzZXQpOwotfQotCi0KLQogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXBjNTJ4eF9hdGFfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5tYXhfc2VjdG9ycwkJPSBBVEFfTUFYX1NFQ1RPUlMsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX1BJT19TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG1wYzUyeHhfYXRhX3BvcnRfb3BzID0gewotCS5zZXRfcGlvbW9kZQkJPSBtcGM1Mnh4X2F0YV9zZXRfcGlvbW9kZSwKLQkuZGV2X3NlbGVjdAkJPSBtcGM1Mnh4X2F0YV9kZXZfc2VsZWN0LAotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gbXBjNTJ4eF9hdGFfZXJyb3JfaGFuZGxlciwKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLnNmZl9kZXZfc2VsZWN0CQk9IG1wYzUyeHhfYXRhX2Rldl9zZWxlY3QsCiAJLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3BvcnRfc3RhcnQsCisJLnNldF9waW9tb2RlCQk9IG1wYzUyeHhfYXRhX3NldF9waW9tb2RlLAorCS5wb3N0X2ludGVybmFsX2NtZAk9IEFUQV9PUF9OVUxMLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTMzOSw3ICszMDUsNyBAQAogCWF0YV9wb3J0X2Rlc2MoYXAsICJhdGFfcmVncyAweCVseCIsIHJhd19hdGFfcmVncyk7CiAKIAkvKiBhY3RpdmF0ZSBob3N0ICovCi0JcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHByaXYtPmF0YV9pcnEsIGF0YV9pbnRlcnJ1cHQsIDAsCisJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHByaXYtPmF0YV9pcnEsIGF0YV9zZmZfaW50ZXJydXB0LCAwLAogCQkJCSAmbXBjNTJ4eF9hdGFfc2h0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCmluZGV4IGMwZDllMGMuLjdkN2UzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKQEAgLTU1LDIxICs1NSw3IEBACiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmbXBpaXhfZW5hYmxlX2JpdHMpKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotLyoqCi0gKgltcGlpeF9lcnJvcl9oYW5kbGVyCQktCXByb2JlIHJlc2V0Ci0gKglAYXA6IEFUQSBwb3J0Ci0gKgotICoJUGVyZm9ybSB0aGUgQVRBIHByb2JlIGFuZCBidXMgcmVzZXQgc2VxdWVuY2UgcGx1cyBzcGVjaWZpYyBoYW5kbGluZwotICoJZm9yIHRoaXMgaGFyZHdhcmUuIFRoZSBNUElJWCBoYXMgdGhlIGVuYWJsZSBiaXRzIGluIGEgZGlmZmVyZW50IHBsYWNlCi0gKgl0byBQSUlYNCBhbmQgZnJpZW5kcy4gQXMgYSBwdXJlIFBJTyBkZXZpY2UgaXQgaGFzIG5vIGNhYmxlIGRldGVjdAotICovCi0KLXN0YXRpYyB2b2lkIG1waWl4X2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIG1waWl4X3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtODMsOCArNjksOCBAQAogICoKICAqCVRoaXMgd291bGQgZ2V0IHZlcnkgdWdseSBiZWNhdXNlIHdlIGNhbiBvbmx5IHByb2dyYW0gdGltaW5nIGZvciBvbmUKICAqCWRldmljZSBhdCBhIHRpbWUsIHRoZSBvdGhlciBnZXRzIFBJTzAuIEZvcnR1bmF0ZWx5IGxpYmF0YSBjYWxscwotICoJb3VyIHFjX2lzc3VlX3Byb3QgY29tbWFuZCBiZWZvcmUgYSBjb21tYW5kIGlzIGlzc3VlZCBzbyB3ZSBjYW4KLSAqCWZsaXAgdGhlIHRpbWluZ3MgYmFjayBhbmQgZm9ydGggdG8gcmVkdWNlIHRoZSBwYWluLgorICoJb3VyIHFjX2lzc3VlIGNvbW1hbmQgYmVmb3JlIGEgY29tbWFuZCBpcyBpc3N1ZWQgc28gd2UgY2FuIGZsaXAgdGhlCisgKgl0aW1pbmdzIGJhY2sgYW5kIGZvcnRoIHRvIHJlZHVjZSB0aGUgcGFpbi4KICAqLwogCiBzdGF0aWMgdm9pZCBtcGlpeF9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKQEAgLTEyNCw3ICsxMTAsNyBAQAogfQogCiAvKioKLSAqCW1waWl4X3FjX2lzc3VlX3Byb3QJLQljb21tYW5kIGlzc3VlCisgKgltcGlpeF9xY19pc3N1ZQkJLQljb21tYW5kIGlzc3VlCiAgKglAcWM6IGNvbW1hbmQgcGVuZGluZwogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBsaWJhdGEgbGF5ZXIgaXMgYWJvdXQgdG8gaXNzdWUgYSBjb21tYW5kLiBXZSB3cmFwCkBAIC0xMzQsNyArMTIwLDcgQEAKICAqCWJlIG1hZGUgUElPMC4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IG1waWl4X3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXBpaXhfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gcWMtPmRldjsKQEAgLTE0Nyw1MCArMTMzLDE5IEBACiAJaWYgKGFkZXYtPnBpb19tb2RlICYmIGFkZXYgIT0gYXAtPnByaXZhdGVfZGF0YSkKIAkJbXBpaXhfc2V0X3Bpb21vZGUoYXAsIGFkZXYpOwogCi0JcmV0dXJuIGF0YV9xY19pc3N1ZV9wcm90KHFjKTsKKwlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG1waWl4X3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtcGlpeF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBtcGlpeF9zZXRfcGlvbW9kZSwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gbXBpaXhfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCisJLmluaGVyaXRzCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLnFjX2lzc3VlCT0gbXBpaXhfcWNfaXNzdWUsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBtcGlpeF9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNldF9waW9tb2RlCT0gbXBpaXhfc2V0X3Bpb21vZGUsCisJLnByZXJlc2V0CT0gbXBpaXhfcHJlX3Jlc2V0LAogfTsKIAogc3RhdGljIGludCBtcGlpeF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC0yNTIsMTAgKzIwNywxMCBAQAogCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKIAogCS8qIExldCBsaWJhdGEgZmlsbCBpbiB0aGUgcG9ydCBkZXRhaWxzICovCi0JYXRhX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CisJYXRhX3NmZl9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOwogCiAJLyogYWN0aXZhdGUgaG9zdCAqLwotCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBpcnEsIGF0YV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBpcnEsIGF0YV9zZmZfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkgJm1waWl4X3NodCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKaW5kZXggMjVjOTIyYS4uZDk3MTljOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKQEAgLTIxLDU0ICsyMSwxMiBAQAogLyogTm8gUElPIG9yIERNQSBtZXRob2RzIG5lZWRlZCBmb3IgdGhpcyBkZXZpY2UgKi8KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbmV0Y2VsbF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS8qIFVzZSBzdGFuZGFyZCBDSFMgbWFwcGluZyBydWxlcyAqLwotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBuZXRjZWxsX29wcyA9IHsKLQkvKiBUYXNrIGZpbGUgaXMgUENJIEFUQSBmb3JtYXQsIHVzZSBoZWxwZXJzICovCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbmV0Y2VsbF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV84MHdpcmUsCi0KLQkvKiBCTURNQSBoYW5kbGluZyBpcyBQQ0kgQVRBIGZvcm1hdCwgdXNlIGhlbHBlcnMgKi8KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkvKiBJUlEtcmVsYXRlZCBob29rcyAqLwotCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLyogR2VuZXJpYyBQQVRBIFBDSSBBVEEgaGVscGVycyAqLwotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiAKIApAQCAtOTAsNyArNDgsNiBAQAogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewotCQkuc2h0CQk9ICZuZXRjZWxsX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS8qIEFjdHVhbGx5IHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZXNlIGFzIHRoZQogCQkgICBmaXJtd2FyZSBkZWFscyB3aXRoIGl0ICovCkBAIC0xMDAsMTYgKzU3LDIxIEBACiAJCS5wb3J0X29wcwk9ICZuZXRjZWxsX29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bXSA9IHsgJmluZm8sIE5VTEwgfTsKKwlpbnQgcmM7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCiAJCQkgICAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCisJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKIAkvKiBBbnkgY2hpcCBzcGVjaWZpYyBzZXR1cC9vcHRpbWlzYXRpb24vbWVzc2FnZXMgaGVyZSAqLwotCWF0YV9wY2lfY2xlYXJfc2ltcGxleChwZGV2KTsKKwlhdGFfcGNpX2JtZG1hX2NsZWFyX3NpbXBsZXgocGRldik7CiAKIAkvKiBBbmQgbGV0IHRoZSBsaWJyYXJ5IGNvZGUgZG8gdGhlIHdvcmsgKi8KLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8pOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sICZuZXRjZWxsX3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXRjZWxsX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jIGIvZHJpdmVycy9hdGEvcGF0YV9uaW5qYTMyLmMKaW5kZXggMTVkZDY0OS4uNTY1ZTY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uaW5qYTMyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uaW5qYTMyLmMKQEAgLTczLDYwICs3MywyMCBAQAogCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gJmFwLT5saW5rLmRldmljZVtkZXZpY2VdOwogCWlmIChhcC0+cHJpdmF0ZV9kYXRhICE9IGFkZXYpIHsKIAkJaW93cml0ZTgoMHhkNiwgYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgMHgxZik7Ci0JCWF0YV9zdGRfZGV2X3NlbGVjdChhcCwgZGV2aWNlKTsKKwkJYXRhX3NmZl9kZXZfc2VsZWN0KGFwLCBkZXZpY2UpOwogCQluaW5qYTMyX3NldF9waW9tb2RlKGFwLCBhZGV2KTsKIAl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG5pbmphMzJfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbmluamEzMl9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBuaW5qYTMyX3NldF9waW9tb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IG5pbmphMzJfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5zZmZfZGV2X3NlbGVjdCA9IG5pbmphMzJfZGV2X3NlbGVjdCwKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5zZXRfcGlvbW9kZQk9IG5pbmphMzJfc2V0X3Bpb21vZGUsCiB9OwogCiBzdGF0aWMgaW50IG5pbmphMzJfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpAQCAtMTcyLDcgKzEzMiw3IEBACiAJYXAtPmlvYWRkci5jdGxfYWRkciA9IGJhc2UgKyAweDFFOwogCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBiYXNlICsgMHgxRTsKIAlhcC0+aW9hZGRyLmJtZG1hX2FkZHIgPSBiYXNlOwotCWF0YV9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOworCWF0YV9zZmZfc3RkX3BvcnRzKCZhcC0+aW9hZGRyKTsKIAogCWlvd3JpdGU4KDB4MDUsIGJhc2UgKyAweDAxKTsJLyogRW5hYmxlIGludGVycnVwdCBsaW5lcyAqLwogCWlvd3JpdGU4KDB4QkUsIGJhc2UgKyAweDAyKTsJLyogQnVyc3QsID8/IHNldHVwICovCkBAIC0xODIsNyArMTQyLDcgQEAKIAlpb3dyaXRlOCgweGE0LCBiYXNlICsgMHgxYyk7CS8qIFVua25vd24gKi8KIAlpb3dyaXRlOCgweDgzLCBiYXNlICsgMHgxZCk7CS8qIEJNRE1BIGNvbnRyb2w6IFdBSVQwICovCiAJLyogRklYTUU6IFNob3VsZCB3ZSBkaXNhYmxlIHRoZW0gYXQgcmVtb3ZlID8gKi8KLQlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgZGV2LT5pcnEsIGF0YV9pbnRlcnJ1cHQsCisJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGRldi0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwKIAkJCQkgSVJRRl9TSEFSRUQsICZuaW5qYTMyX3NodCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggOWZlNjZmZC4uNzZkMjQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTUwLDIxICs1MCw3IEBACiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmbnM4NzQxMF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotLyoqCi0gKgluczg3NDEwX2Vycm9yX2hhbmRsZXIJCS0JcHJvYmUgcmVzZXQKLSAqCUBhcDogQVRBIHBvcnQKLSAqCi0gKglQZXJmb3JtIHRoZSBBVEEgcHJvYmUgYW5kIGJ1cyByZXNldCBzZXF1ZW5jZSBwbHVzIHNwZWNpZmljIGhhbmRsaW5nCi0gKglmb3IgdGhpcyBoYXJkd2FyZS4gVGhlIE1QSUlYIGhhcyB0aGUgZW5hYmxlIGJpdHMgaW4gYSBkaWZmZXJlbnQgcGxhY2UKLSAqCXRvIFBJSVg0IGFuZCBmcmllbmRzLiBBcyBhIHB1cmUgUElPIGRldmljZSBpdCBoYXMgbm8gY2FibGUgZGV0ZWN0Ci0gKi8KLQotc3RhdGljIHZvaWQgbnM4NzQxMF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBuczg3NDEwX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtMTE5LDcgKzEwNSw3IEBACiB9CiAKIC8qKgotICoJbnM4NzQxMF9xY19pc3N1ZV9wcm90CS0JY29tbWFuZCBpc3N1ZQorICoJbnM4NzQxMF9xY19pc3N1ZQktCWNvbW1hbmQgaXNzdWUKICAqCUBxYzogY29tbWFuZCBwZW5kaW5nCiAgKgogICoJQ2FsbGVkIHdoZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAKQEAgLTEyNyw3ICsxMTMsNyBAQAogICoJbmVjZXNzYXJ5LgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnM4NzQxMF9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IG5zODc0MTBfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gcWMtPmRldjsKQEAgLTE0MCw2NCArMTI2LDMwIEBACiAJaWYgKGFkZXYtPnBpb19tb2RlICYmIGFkZXYgIT0gYXAtPnByaXZhdGVfZGF0YSkKIAkJbnM4NzQxMF9zZXRfcGlvbW9kZShhcCwgYWRldik7CiAKLQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbnM4NzQxMF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfUElPX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnM4NzQxMF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBuczg3NDEwX3NldF9waW9tb2RlLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBuczg3NDEwX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5pbmhlcml0cwk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5xY19pc3N1ZQk9IG5zODc0MTBfcWNfaXNzdWUsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBuczg3NDEwX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNldF9waW9tb2RlCT0gbnM4NzQxMF9zZXRfcGlvbW9kZSwKKwkucHJlcmVzZXQJPSBuczg3NDEwX3ByZV9yZXNldCwKIH07CiAKIHN0YXRpYyBpbnQgbnM4NzQxMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7Ci0JCS5zaHQgPSAmbnM4NzQxMF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MEYsCiAJCS5wb3J0X29wcyA9ICZuczg3NDEwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJm5zODc0MTBfc2h0LCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5zODc0MTBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKaW5kZXggZDBlMmU1MC4uYWU5MmIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlkbWFjdGwgfD0gQVRBX0RNQV9XUjsKIAlpb3dyaXRlOChkbWFjdGwsIGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfQ01EKTsKIAkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLwotCWFwLT5vcHMtPmV4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CisJYXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CiB9CiAKIC8qKgpAQCAtMTcyLDE0ICsxNzIsMTQgQEAKIH0KIAogLyoqCi0gKgluczg3NDE1X2JtZG1hX2lycV9jbGVhcgkJLQlDbGVhciBpbnRlcnJ1cHQKKyAqCW5zODc0MTVfaXJxX2NsZWFyCQktCUNsZWFyIGludGVycnVwdAogICoJQGFwOiBDaGFubmVsIHRvIGNsZWFyCiAgKgogICoJRXJyYXR1bTogRHVlIHRvIGEgY2hpcCBidWcgcmVnaXNlcnMgMDIgYW5kIDBBIGJpdCAxIGFuZCAyICh0aGUKICAqCWVycm9yIGJpdHMpIGFyZSByZXNldCBieSB3cml0aW5nIHRvIHJlZ2lzdGVyIDAwIG9yIDA4LgogICovCiAKLXN0YXRpYyB2b2lkIG5zODc0MTVfYm1kbWFfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgdm9pZCBuczg3NDE1X2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXZvaWQgX19pb21lbSAqbW1pbyA9IGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKIApAQCAtMjk3LDkwICsyOTcsMzIgQEAKIHsKIAlyZXR1cm4gbnM4NzU2MF9yZWFkX2J1Z2d5KGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfU1RBVFVTKTsKIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG5zODc1NjBfcGF0YV9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCQk9IG5zODc0MTVfc2V0X3Bpb21vZGUsCi0JLm1vZGVfZmlsdGVyCQk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBuczg3NTYwX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBuczg3NTYwX2NoZWNrX3N0YXR1cywKLQkuY2hlY2tfYXRhcGlfZG1hCT0gbnM4NzQxNV9jaGVja19hdGFwaV9kbWEsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCAJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLmJtZG1hX3NldHVwCQk9IG5zODc0MTVfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IG5zODc0MTVfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gbnM4NzQxNV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gbnM4NzU2MF9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJCT0gbnM4NzQxNV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKLX07Ci0KICNlbmRpZgkJLyogODc1NjAgU3VwZXJJTyBTdXBwb3J0ICovCiAKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBuczg3NDE1X3BhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnM4NzQxNV9wYXRhX29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJCT0gbnM4NzQxNV9zZXRfcGlvbW9kZSwKLQkubW9kZV9maWx0ZXIJCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKIAkuY2hlY2tfYXRhcGlfZG1hCT0gbnM4NzQxNV9jaGVja19hdGFwaV9kbWEsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCAJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCiAJLmJtZG1hX3NldHVwCQk9IG5zODc0MTVfYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0CQk9IG5zODc0MTVfYm1kbWFfc3RhcnQsCiAJLmJtZG1hX3N0b3AJCT0gbnM4NzQxNV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAorCS5zZmZfaXJxX2NsZWFyCQk9IG5zODc0MTVfaXJxX2NsZWFyLAogCi0JLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgkJPSBuczg3NDE1X2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKKwkuc2V0X3Bpb21vZGUJCT0gbnM4NzQxNV9zZXRfcGlvbW9kZSwKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVVBFUklPKQorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG5zODc1NjBfcGF0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZuczg3NDE1X3BhdGFfb3BzLAorCS5zZmZfdGZfcmVhZAkJPSBuczg3NTYwX3RmX3JlYWQsCisJLnNmZl9jaGVja19zdGF0dXMJPSBuczg3NTYwX2NoZWNrX3N0YXR1cywKKwkuYm1kbWFfc3RhdHVzCQk9IG5zODc1NjBfYm1kbWFfc3RhdHVzLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBuczg3NDE1X3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAogCkBAIC00MDMsMTYgKzM0NSwxNSBAQAogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewotCQkuc2h0CQk9ICZuczg3NDE1X3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCiAJCS5wb3J0X29wcwk9ICZuczg3NDE1X3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OworCWludCByYzsKICNpZiBkZWZpbmVkKENPTkZJR19TVVBFUklPKQogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvODc1NjAgPSB7Ci0JCS5zaHQJCT0gJm5zODc0MTVfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KQEAgLTQyNSwxMSArMzY2LDE2IEBACiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJLyogU2VsZWN0IDUxMiBieXRlIHNlY3RvcnMgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1NSwgMHhFRSk7CiAJLyogU2VsZWN0IFBJTzAgOGJpdCBjbG9ja2luZyAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDU0LCAweEI3KTsKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZuczg3NDE1X3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuczg3NDE1X3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggNDRkYTA5YS4uZTY3OGFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKQEAgLTQ3LDIxICs0Nyw3IEBACiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmb2xkcGlpeF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotLyoqCi0gKglvbGRwaWl4X3BhdGFfZXJyb3JfaGFuZGxlciAtIFByb2JlIHNwZWNpZmllZCBwb3J0IG9uIFBBVEEgaG9zdCBjb250cm9sbGVyCi0gKglAYXA6IFBvcnQgdG8gcHJvYmUKLSAqCUBjbGFzc2VzOgotICoKLSAqCUxPQ0tJTkc6Ci0gKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgotICovCi0KLXN0YXRpYyB2b2lkIG9sZHBpaXhfcGF0YV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBvbGRwaWl4X3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtMTk1LDcgKzE4MSw3IEBACiB9CiAKIC8qKgotICoJb2xkcGlpeF9xY19pc3N1ZV9wcm90CS0JY29tbWFuZCBpc3N1ZQorICoJb2xkcGlpeF9xY19pc3N1ZQktCWNvbW1hbmQgaXNzdWUKICAqCUBxYzogY29tbWFuZCBwZW5kaW5nCiAgKgogICoJQ2FsbGVkIHdoZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAKQEAgLTIwNSw3ICsxOTEsNyBAQAogICoJYmUgbWFkZSBQSU8wLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgb2xkcGlpeF9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IG9sZHBpaXhfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gcWMtPmRldjsKQEAgLTIxNSw1OCArMjAxLDIxIEBACiAJCWlmIChhZGV2LT5kbWFfbW9kZSkKIAkJCW9sZHBpaXhfc2V0X2RtYW1vZGUoYXAsIGFkZXYpOwogCX0KLQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBvbGRwaWl4X3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG9sZHBpaXhfcGF0YV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgb2xkcGlpeF9wYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkucWNfaXNzdWUJCT0gb2xkcGlpeF9xY19pc3N1ZSwKKwkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCQk9IG9sZHBpaXhfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IG9sZHBpaXhfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCQk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IG9sZHBpaXhfcGF0YV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCAJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gb2xkcGlpeF9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5wcmVyZXNldAkJPSBvbGRwaWl4X3ByZV9yZXNldCwKIH07CiAKIApAQCAtMjg5LDcgKzIzOCw2IEBACiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7Ci0JCS5zaHQJCT0gJm9sZHBpaXhfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KQEAgLTMwMSw3ICsyNDksNyBAQAogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCiAJCQkgICAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmb2xkcGlpeF9zaHQsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb2xkcGlpeF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCmluZGV4IDhmNzk0NDcuLmZiMmNmNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCkBAIC02NCwyMiArNjQsNyBAQAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJm9wdGlfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7Ci19Ci0KLS8qKgotICoJb3B0aV9wcm9iZV9yZXNldAkJLQlwcm9iZSByZXNldAotICoJQGFwOiBBVEEgcG9ydAotICoKLSAqCVBlcmZvcm0gdGhlIEFUQSBwcm9iZSBhbmQgYnVzIHJlc2V0IHNlcXVlbmNlIHBsdXMgc3BlY2lmaWMgaGFuZGxpbmcKLSAqCWZvciB0aGlzIGhhcmR3YXJlLiBUaGUgT3B0aSBuZWVkcyBsaXR0bGUgaGFuZGxpbmcgLSB3ZSBoYXZlIG5vIFVETUE2NgotICoJY2FwYWJpbGl0eSB0aGF0IG5lZWRzIGNhYmxlIGRldGVjdGlvbi4gQWxsIHdlIG11c3QgZG8gaXMgY2hlY2sgdGhlIHBvcnQKLSAqCWlzIGVuYWJsZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgb3B0aV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBvcHRpX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtMTY1LDU4ICsxNTAsMTkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgb3B0aV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfUElPX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgb3B0aV9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBvcHRpX3NldF9waW9tb2RlLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gb3B0aV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKKwkuaW5oZXJpdHMJPSAmYXRhX3NmZl9wb3J0X29wcywKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5zZXRfcGlvbW9kZQk9IG9wdGlfc2V0X3Bpb21vZGUsCisJLnByZXJlc2V0CT0gb3B0aV9wcmVfcmVzZXQsCiB9OwogCiBzdGF0aWMgaW50IG9wdGlfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewotCQkuc2h0ID0gJm9wdGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkucG9ydF9vcHMgPSAmb3B0aV9wb3J0X29wcwpAQCAtMjI3LDcgKzE3Myw3IEBACiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmb3B0aV9zaHQsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3B0aVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwppbmRleCBmOWI0ODVhLi40Y2Q3NDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwpAQCAtNjQsMjIgKzY0LDcgQEAKIAlpZiAoYXAtPnBvcnRfbm8gJiYgIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZvcHRpZG1hX2VuYWJsZV9iaXRzKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7Ci19Ci0KLS8qKgotICoJb3B0aWRtYV9wcm9iZV9yZXNldAkJLQlwcm9iZSByZXNldAotICoJQGFwOiBBVEEgcG9ydAotICoKLSAqCVBlcmZvcm0gdGhlIEFUQSBwcm9iZSBhbmQgYnVzIHJlc2V0IHNlcXVlbmNlIHBsdXMgc3BlY2lmaWMgaGFuZGxpbmcKLSAqCWZvciB0aGlzIGhhcmR3YXJlLiBUaGUgT3B0aSBuZWVkcyBsaXR0bGUgaGFuZGxpbmcgLSB3ZSBoYXZlIG5vIFVETUE2NgotICoJY2FwYWJpbGl0eSB0aGF0IG5lZWRzIGNhYmxlIGRldGVjdGlvbi4gQWxsIHdlIG11c3QgZG8gaXMgY2hlY2sgdGhlIHBvcnQKLSAqCWlzIGVuYWJsZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgb3B0aWRtYV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBvcHRpZG1hX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtMzUwLDg5ICszMzUsMjIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgb3B0aWRtYV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBvcHRpZG1hX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gb3B0aWRtYV9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFtb2RlCT0gb3B0aWRtYV9zZXRfZG1hX21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmVycm9yX2hhbmRsZXIJPSBvcHRpZG1hX2Vycm9yX2hhbmRsZXIsCiAJLnNldF9tb2RlCT0gb3B0aWRtYV9zZXRfbW9kZSwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5wcmVyZXNldAk9IG9wdGlkbWFfcHJlX3Jlc2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG9wdGlwbHVzX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZvcHRpZG1hX3BvcnRfb3BzLAogCS5zZXRfcGlvbW9kZQk9IG9wdGlwbHVzX3NldF9waW9fbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBvcHRpcGx1c19zZXRfZG1hX21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmVycm9yX2hhbmRsZXIJPSBvcHRpZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnNldF9tb2RlCT0gb3B0aWRtYV9zZXRfbW9kZSwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoqCkBAIC00ODEsMTQgKzM5OSwxMiBAQAogc3RhdGljIGludCBvcHRpZG1hX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb184MmM3MDAgPSB7Ci0JCS5zaHQgPSAmb3B0aWRtYV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJLnBvcnRfb3BzID0gJm9wdGlkbWFfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzgyYzcwMF91ZG1hID0gewotCQkuc2h0ID0gJm9wdGlkbWFfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC00OTcsMTAgKzQxMywxNSBAQAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb184MmM3MDAsIE5VTEwgfTsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKKwlpbnQgcmM7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAorCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKIAkvKiBGaXhlZCBsb2NhdGlvbiBjaGlwc2V0IG1hZ2ljICovCiAJaW53KDB4MUYxKTsKIAlpbncoMHgxRjEpOwpAQCAtNTA5LDcgKzQzMCw3IEBACiAJaWYgKG9wdGlwbHVzX3dpdGhfdWRtYShkZXYpKQogCQlwcGlbMF0gPSAmaW5mb184MmM3MDBfdWRtYTsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcHBpKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZvcHRpZG1hX3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcHRpZG1hW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwppbmRleCAzZTdmNmE5Li4zZDM5ZjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKQEAgLTEyOCw3MSArMTI4LDIxIEBACiAKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGNtY2lhX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwY21jaWFfcG9ydF9vcHMgPSB7Ci0JLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5pbmhlcml0cwk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5zZmZfZGF0YV94ZmVyCT0gYXRhX3NmZl9kYXRhX3hmZXJfbm9pcnEsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyX25vaXJxLAotCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBjbWNpYV84Yml0X3BvcnRfb3BzID0gewotCS5zZXRfbW9kZQk9IHBjbWNpYV9zZXRfbW9kZV84Yml0LAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5pbmhlcml0cwk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5zZmZfZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlcl84Yml0LAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlcl84Yml0LAotCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlXzhiaXQsCiB9OwogCiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKQEAgLTM3MywxMyArMzIzLDEzIEBACiAJCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBpb19hZGRyICsgMHgxMCAqIHA7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkciArIDB4MTAgKiBwOwogCQlhcC0+aW9hZGRyLmN0bF9hZGRyID0gY3RsX2FkZHIgKyAweDEwICogcDsKLQkJYXRhX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CisJCWF0YV9zZmZfc3RkX3BvcnRzKCZhcC0+aW9hZGRyKTsKIAogCQlhdGFfcG9ydF9kZXNjKGFwLCAiY21kIDB4JWx4IGN0bCAweCVseCIsIGlvX2Jhc2UsIGN0bF9iYXNlKTsKIAl9CiAKIAkvKiBhY3RpdmF0ZSAqLwotCXJldCA9IGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBkZXYtPmlycS5Bc3NpZ25lZElSUSwgYXRhX2ludGVycnVwdCwKKwlyZXQgPSBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEuQXNzaWduZWRJUlEsIGF0YV9zZmZfaW50ZXJydXB0LAogCQkJCUlSUUZfU0hBUkVELCAmcGNtY2lhX3NodCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKaW5kZXggMDI4YWY1ZC4uMGUxYzJjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwpAQCAtMzksNyArMzksNyBAQAogI3VuZGVmIFBEQ19ERUJVRwogCiAjaWZkZWYgUERDX0RFQlVHCi0jZGVmaW5lIFBEUFJJTlRLKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQsIF9fRlVOQ1RJT05fXywgIyMgYXJncykKKyNkZWZpbmUgUERQUklOVEsoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBQRFBSSU5USyhmbXQsIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTYzLDcgKzYzLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgcGRjMjAyN3hfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwotc3RhdGljIHZvaWQgcGRjMjAyN3hfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyBpbnQgcGRjMjAyN3hfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIHN0YXRpYyB2b2lkIHBkYzIwMjd4X3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKIHN0YXRpYyB2b2lkIHBkYzIwMjd4X3NldF9kbWFtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKIHN0YXRpYyBpbnQgcGRjMjAyN3hfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwpAQCAtMTI5LDg0ICsxMjksMjIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBkYzIwMjd4X3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkYzIwMjd4X3BhdGExMDBfb3BzID0gewotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuY2hlY2tfYXRhcGlfZG1hCT0gcGRjMjAyN3hfY2hlY2tfYXRhcGlfZG1hLAotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IHBkYzIwMjd4X2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kIAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKIAkuY2FibGVfZGV0ZWN0CQk9IHBkYzIwMjd4X2NhYmxlX2RldGVjdCwKLQotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5wcmVyZXNldAkJPSBwZGMyMDI3eF9wcmVyZXNldCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwZGMyMDI3eF9wYXRhMTMzX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJnBkYzIwMjd4X3BhdGExMDBfb3BzLAorCS5tb2RlX2ZpbHRlcgkJPSBwZGMyMDI3eF9tb2RlX2ZpbHRlciwKIAkuc2V0X3Bpb21vZGUJCT0gcGRjMjAyN3hfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IHBkYzIwMjd4X3NldF9kbWFtb2RlLAogCS5zZXRfbW9kZQkJPSBwZGMyMDI3eF9zZXRfbW9kZSwKLQkubW9kZV9maWx0ZXIJCT0gcGRjMjAyN3hfbW9kZV9maWx0ZXIsCi0KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5jaGVja19hdGFwaV9kbWEJPSBwZGMyMDI3eF9jaGVja19hdGFwaV9kbWEsCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gcGRjMjAyN3hfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBwZGMyMDI3eF9jYWJsZV9kZXRlY3QsCi0KLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwZGMyMDI3eF9wb3J0X2luZm9bXSA9IHsKQEAgLTMxMCwyMiArMjQ4LDcgQEAKIAkvKiBDaGVjayB3aGV0aGVyIHBvcnQgZW5hYmxlZCAqLwogCWlmICghcGRjMjAyN3hfcG9ydF9lbmFibGVkKGxpbmstPmFwKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwotfQotCi0vKioKLSAqCXBkYzIwMjd4X2Vycm9yX2hhbmRsZXIgLSBQZXJmb3JtIHJlc2V0IG9uIFBBVEEgcG9ydCBhbmQgY2xhc3NpZnkKLSAqCUBhcDogUG9ydCB0byByZXNldAotICoKLSAqCVJlc2V0IFBBVEEgcGh5IGFuZCBjbGFzc2lmeSBhdHRhY2hlZCBkZXZpY2VzLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgotICovCi0KLXN0YXRpYyB2b2lkIHBkYzIwMjd4X2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIHBkYzIwMjd4X3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwgYXRhX3N0ZF9wb3N0cmVzZXQpOworCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0zNDIsNyArMjY1LDcgQEAKIAlzdHJ1Y3QgYXRhX2RldmljZSAqcGFpciA9IGF0YV9kZXZfcGFpcihhZGV2KTsKIAogCWlmIChhZGV2LT5jbGFzcyAhPSBBVEFfREVWX0FUQSB8fCBhZGV2LT5kZXZubyA9PSAwIHx8IHBhaXIgPT0gTlVMTCkKLQkJcmV0dXJuIGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIoYWRldiwgbWFzayk7CisJCXJldHVybiBhdGFfYm1kbWFfbW9kZV9maWx0ZXIoYWRldiwgbWFzayk7CiAKIAkvKiBDaGVjayBmb3Igc2xhdmUgb2YgYSBNYXh0b3IgYXQgVURNQTYgKi8KIAlhdGFfaWRfY19zdHJpbmcocGFpci0+aWQsIG1vZGVsX251bSwgQVRBX0lEX1BST0QsCkBAIC0zNTEsNyArMjc0LDcgQEAKIAlpZiAoc3Ryc3RyKG1vZGVsX251bSwgIk1heHRvciIpID09IE5VTEwgJiYgcGFpci0+ZG1hX21vZGUgPT0gWEZFUl9VRE1BXzYpCiAJCW1hc2sgJj0gfiAoMSA8PCAoNiArIEFUQV9TSElGVF9VRE1BKSk7CiAKLQlyZXR1cm4gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlcihhZGV2LCBtYXNrKTsKKwlyZXR1cm4gYXRhX2JtZG1hX21vZGVfZmlsdGVyKGFkZXYsIG1hc2spOwogfQogCiAvKioKQEAgLTgzNiw4ICs3NTksOCBAQAogCQlyZXR1cm4gLUVJTzsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIGF0YV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJCSAmcGRjMjAyN3hfc2h0KTsKKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwKKwkJCQkgSVJRRl9TSEFSRUQsICZwZGMyMDI3eF9zaHQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCmluZGV4IDNlZDg2NjcuLmQyNjczMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYwpAQCAtMjYyLDk0ICsyNjIsMzQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGRjMjAyeHhfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjMjAyNHhfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCT0gcGRjMjAyeHhfc2V0X3Bpb21vZGUsCi0JLnNldF9kbWFtb2RlCT0gcGRjMjAyeHhfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCisJLnNldF9waW9tb2RlCQk9IHBkYzIwMnh4X3NldF9waW9tb2RlLAorCS5zZXRfZG1hbW9kZQkJPSBwZGMyMDJ4eF9zZXRfZG1hbW9kZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwZGMyMDI2eF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBwZGMyMDJ4eF9zZXRfcGlvbW9kZSwKLQkuc2V0X2RtYW1vZGUJPSBwZGMyMDJ4eF9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5kZXZfY29uZmlnCT0gcGRjMjAyNnhfZGV2X2NvbmZpZywKKwkuaW5oZXJpdHMJCT0gJnBkYzIwMjR4X3BvcnRfb3BzLAogCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJPSBwZGMyMDI2eF9jYWJsZV9kZXRlY3QsCisJLmNoZWNrX2F0YXBpX2RtYQk9IHBkYzIwMjZ4X2NoZWNrX2F0YXBpX2RtYSwKKwkuYm1kbWFfc3RhcnQJCT0gcGRjMjAyNnhfYm1kbWFfc3RhcnQsCisJLmJtZG1hX3N0b3AJCT0gcGRjMjAyNnhfYm1kbWFfc3RvcCwKIAotCS5jaGVja19hdGFwaV9kbWE9IHBkYzIwMjZ4X2NoZWNrX2F0YXBpX2RtYSwKLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBwZGMyMDI2eF9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IHBkYzIwMjZ4X2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAorCS5jYWJsZV9kZXRlY3QJCT0gcGRjMjAyNnhfY2FibGVfZGV0ZWN0LAorCS5kZXZfY29uZmlnCQk9IHBkYzIwMjZ4X2Rldl9jb25maWcsCiAKLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBwZGMyMDI2eF9wb3J0X3N0YXJ0LAorCS5wb3J0X3N0YXJ0CQk9IHBkYzIwMjZ4X3BvcnRfc3RhcnQsCiB9OwogCiBzdGF0aWMgaW50IHBkYzIwMnh4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1szXSA9IHsKIAkJewotCQkJLnNodCA9ICZwZGMyMDJ4eF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTM1Nyw3ICsyOTcsNiBAQAogCQkJLnBvcnRfb3BzID0gJnBkYzIwMjR4X3BvcnRfb3BzCiAJCX0sCiAJCXsKLQkJCS5zaHQgPSAmcGRjMjAyeHhfc2h0LAogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJCS5waW9fbWFzayA9IDB4MWYsCiAJCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC0zNjUsNyArMzA0LDYgQEAKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9LAogCQl7Ci0JCQkuc2h0ID0gJnBkYzIwMnh4X3NodCwKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCQkucGlvX21hc2sgPSAweDFmLAogCQkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtMzg2LDcgKzMyNCw3IEBACiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnBkYzIwMnh4X3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGMyMDJ4eFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCmluZGV4IGFhZDdhZGMuLjY1MjdjNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BsYXRmb3JtLmMKQEAgLTQ2LDUwICs0NiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0YV9kdW1teV9yZXQwKHN0cnVjdCBhdGFfcG9ydCAqYXApCXsgcmV0dXJuIDA7IH0KLQogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGF0YV9wbGF0Zm9ybV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfUElPX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGF0YV9wbGF0Zm9ybV9wb3J0X29wcyA9IHsKLQkuc2V0X21vZGUJCT0gcGF0YV9wbGF0Zm9ybV9zZXRfbW9kZSwKLQotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKKwkuc2ZmX2RhdGFfeGZlcgkJPSBhdGFfc2ZmX2RhdGFfeGZlcl9ub2lycSwKIAkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV91bmtub3duLAotCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyX25vaXJxLAotCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfZHVtbXlfcmV0MCwKKwkuc2V0X21vZGUJCT0gcGF0YV9wbGF0Zm9ybV9zZXRfbW9kZSwKKwkucG9ydF9zdGFydAkJPSBBVEFfT1BfTlVMTCwKIH07CiAKIHN0YXRpYyB2b2lkIHBhdGFfcGxhdGZvcm1fc2V0dXBfcG9ydChzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciwKQEAgLTIxMCw3ICsxNzYsNyBAQAogCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWN0bF9yZXMtPnN0YXJ0KTsKIAogCS8qIGFjdGl2YXRlICovCi0JcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgaXJxID8gYXRhX2ludGVycnVwdCA6IE5VTEwsCisJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgaXJxID8gYXRhX3NmZl9pbnRlcnJ1cHQgOiBOVUxMLAogCQkJCSBpcnFfZmxhZ3MsICZwYXRhX3BsYXRmb3JtX3NodCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3BhdGFfcGxhdGZvcm1fcHJvYmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKaW5kZXggOWYzMDhlZC4uYmY0NWNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCkBAIC0xMDIsMTQgKzEwMiwxNCBAQAogfQogCiAvKioKLSAqCXFkaV9xY19pc3N1ZV9wcm90CS0JY29tbWFuZCBpc3N1ZQorICoJcWRpX3FjX2lzc3VlCQktCWNvbW1hbmQgaXNzdWUKICAqCUBxYzogY29tbWFuZCBwZW5kaW5nCiAgKgogICoJQ2FsbGVkIHdoZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAKICAqCXRoaXMgaW50ZXJmYWNlIHNvIHRoYXQgd2UgY2FuIGxvYWQgdGhlIGNvcnJlY3QgQVRBIHRpbWluZ3MuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBxZGlfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHVuc2lnbmVkIGludCBxZGlfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gcWMtPmRldjsKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQkJb3V0YihxZGktPmNsb2NrW2FkZXYtPmRldm5vXSwgcWRpLT50aW1pbmcpOwogCQl9CiAJfQotCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHFkaV9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLApAQCAtMTQ4LDc5ICsxNDgsMjYgQEAKIAkJCWJ1ZmxlbiArPSA0IC0gc2xvcDsKIAkJfQogCX0gZWxzZQotCQlidWZsZW4gPSBhdGFfZGF0YV94ZmVyKGRldiwgYnVmLCBidWZsZW4sIHJ3KTsKKwkJYnVmbGVuID0gYXRhX3NmZl9kYXRhX3hmZXIoZGV2LCBidWYsIGJ1ZmxlbiwgcncpOwogCiAJcmV0dXJuIGJ1ZmxlbjsKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcWRpX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBxZGk2NTAwX3BvcnRfb3BzID0gewotCS5zZXRfcGlvbW9kZQk9IHFkaTY1MDBfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKKwkuaW5oZXJpdHMJPSAmYXRhX3NmZl9wb3J0X29wcywKKwkucWNfaXNzdWUJPSBxZGlfcWNfaXNzdWUsCisJLnNmZl9kYXRhX3hmZXIJPSBxZGlfZGF0YV94ZmVyLAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gcWRpX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gcWRpX2RhdGFfeGZlciwKLQotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5zZXRfcGlvbW9kZQk9IHFkaTY1MDBfc2V0X3Bpb21vZGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcWRpNjU4MF9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmcWRpNjUwMF9wb3J0X29wcywKIAkuc2V0X3Bpb21vZGUJPSBxZGk2NTgwX3NldF9waW9tb2RlLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBxZGlfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBxZGlfZGF0YV94ZmVyLAotCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiAvKioKQEAgLTI3Niw3ICsyMjMsNyBAQAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBpb19hZGRyOwogCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKIAlhcC0+aW9hZGRyLmN0bF9hZGRyID0gY3RsX2FkZHI7Ci0JYXRhX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CisJYXRhX3NmZl9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOwogCiAJYXRhX3BvcnRfZGVzYyhhcCwgImNtZCAlbHggY3RsICVseCIsIGlvLCBjdGwpOwogCkBAIC0yOTIsNyArMjM5LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FIjogcWQlZCBhdCAweCVseC5cbiIsIHR5cGUsIGlvKTsKIAogCS8qIGFjdGl2YXRlICovCi0JcmV0ID0gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxLCBhdGFfaW50ZXJydXB0LCAwLCAmcWRpX3NodCk7CisJcmV0ID0gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxLCBhdGFfc2ZmX2ludGVycnVwdCwgMCwgJnFkaV9zaHQpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwppbmRleCA4MTA5YjA4Li4xYzBkOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiB9CiAKIC8qKgotICoJcmFkaXN5c19xY19pc3N1ZV9wcm90CS0JY29tbWFuZCBpc3N1ZQorICoJcmFkaXN5c19xY19pc3N1ZQktCWNvbW1hbmQgaXNzdWUKICAqCUBxYzogY29tbWFuZCBwZW5kaW5nCiAgKgogICoJQ2FsbGVkIHdoZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAKQEAgLTE2Niw3ICsxNjYsNyBAQAogICoJYmUgbWFkZSBQSU8wLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmFkaXN5c19xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IHJhZGlzeXNfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gcWMtPmRldjsKQEAgLTE4MCw1OCArMTgwLDIwIEBACiAJCQkJcmFkaXN5c19zZXRfcGlvbW9kZShhcCwgYWRldik7CiAJCX0KIAl9Ci0JcmV0dXJuIGF0YV9xY19pc3N1ZV9wcm90KHFjKTsKKwlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcmFkaXN5c19zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByYWRpc3lzX3BhdGFfb3BzID0geworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHJhZGlzeXNfcGF0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLnFjX2lzc3VlCQk9IHJhZGlzeXNfcWNfaXNzdWUsCisJLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfdW5rbm93biwKIAkuc2V0X3Bpb21vZGUJCT0gcmFkaXN5c19zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gcmFkaXN5c19zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlX3Vua25vd24sCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSByYWRpc3lzX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiAKQEAgLTI1NCw3ICsyMTYsNiBAQAogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewotCQkuc2h0CQk9ICZyYWRpc3lzX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMS0yICovCkBAIC0yNjcsNyArMjI4LDcgQEAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnJhZGlzeXNfc2h0LCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJhZGlzeXNfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYjUwMF9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUwMF9jZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMGFlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTAwX2NmLmMKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiAgQSBsb3ctbGV2ZWwgUEFUQSBkcml2ZXIgdG8gaGFuZGxlIGEgQ29tcGFjdCBGbGFzaCBjb25uZWN0ZWQgb24gdGhlCisgKiAgTWlrcm90aWsncyBSb3V0ZXJCb2FyZCA1MzIgYm9hcmQuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyBHYWJvciBKdWhvcyA8anVob3NnIGF0IG9wZW53cnQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIGZpbGUgd2FzIGJhc2VkIG9uOiBkcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCisgKglDb3B5cmlnaHQgKEMpIDIwMDYtMDcgVG93ZXIgVGVjaG5vbG9naWVzCisgKglBdXRob3I6IEFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PgorICoKKyAqICBBbHNvIHdhcyBiYXNlZCBvbiB0aGUgZHJpdmVyIGZvciBMaW51eCAyLjQueHggcHVibGlzaGVkIGJ5IE1pa3JvdGlrIGZvcgorICogIHRoZWlyIFJvdXRlckJvYXJkIDF4eCBhbmQgNXh4IHNlcmllcyBkZXZpY2VzLiBUaGUgb3JpZ2luYWwgTWlrcm90aWsgY29kZQorICogIHNlZW1zIG5vdCB0byBoYXZlIGEgbGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisKKyNkZWZpbmUgRFJWX05BTUUJInBhdGEtcmI1MDAtY2YiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjEuMCIKKyNkZWZpbmUgRFJWX0RFU0MJIlBBVEEgZHJpdmVyIGZvciBSb3V0ZXJCT0FSRCA1MzIgQ29tcGFjdCBGbGFzaCIKKworI2RlZmluZSBSQjUwMF9DRl9NQVhQT1JUUwkxCisjZGVmaW5lIFJCNTAwX0NGX0lPX0RFTEFZCTQwMAorCisjZGVmaW5lIFJCNTAwX0NGX1JFR19DTUQJMHgwODAwCisjZGVmaW5lIFJCNTAwX0NGX1JFR19DVFJMCTB4MDgwRQorI2RlZmluZSBSQjUwMF9DRl9SRUdfREFUQQkweDBDMDAKKworc3RydWN0IHJiNTAwX2NmX2luZm8geworCXZvaWQgX19pb21lbQkqaW9iYXNlOworCXVuc2lnbmVkIGludAlncGlvX2xpbmU7CisJaW50CQlmcm96ZW47CisJdW5zaWduZWQgaW50CWlycTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcmI1MDBfcGF0YV9maW5pc2hfaW8oc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gYXAtPmhvc3Q7CisJc3RydWN0IHJiNTAwX2NmX2luZm8gKmluZm8gPSBhaC0+cHJpdmF0ZV9kYXRhOworCisJYXRhX3NmZl9hbHRzdGF0dXMoYXApOworCW5kZWxheShSQjUwMF9DRl9JT19ERUxBWSk7CisKKwlzZXRfaXJxX3R5cGUoaW5mby0+aXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTsKK30KKworc3RhdGljIHZvaWQgcmI1MDBfcGF0YV9leGVjX2NvbW1hbmQoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQljb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwl3cml0ZWIodGYtPmNvbW1hbmQsIGFwLT5pb2FkZHIuY29tbWFuZF9hZGRyKTsKKwlyYjUwMF9wYXRhX2ZpbmlzaF9pbyhhcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJiNTAwX3BhdGFfZGF0YV94ZmVyKHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IHdyaXRlX2RhdGEpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGFkZXYtPmxpbmstPmFwOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gYXAtPmlvYWRkci5kYXRhX2FkZHI7CisKKwlpZiAod3JpdGVfZGF0YSkgeworCQlmb3IgKDsgYnVmbGVuID4gMDsgYnVmbGVuLS0sIGJ1ZisrKQorCQkJd3JpdGViKCpidWYsIGlvYWRkcik7CisJfSBlbHNlIHsKKwkJZm9yICg7IGJ1ZmxlbiA+IDA7IGJ1Zmxlbi0tLCBidWYrKykKKwkJCSpidWYgPSByZWFkYihpb2FkZHIpOworCX0KKworCXJiNTAwX3BhdGFfZmluaXNoX2lvKGFkZXYtPmxpbmstPmFwKTsKK30KKworc3RhdGljIHZvaWQgcmI1MDBfcGF0YV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgcmI1MDBfY2ZfaW5mbyAqaW5mbyA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisKKwlpbmZvLT5mcm96ZW4gPSAxOworfQorCitzdGF0aWMgdm9pZCByYjUwMF9wYXRhX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgcmI1MDBfY2ZfaW5mbyAqaW5mbyA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisKKwlpbmZvLT5mcm96ZW4gPSAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcmI1MDBfcGF0YV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCit7CisJc3RydWN0IGF0YV9ob3N0ICphaCA9IGRldl9pbnN0YW5jZTsKKwlzdHJ1Y3QgcmI1MDBfY2ZfaW5mbyAqaW5mbyA9IGFoLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZ3Bpb19nZXRfdmFsdWUoaW5mby0+Z3Bpb19saW5lKSkgeworCQlzZXRfaXJxX3R5cGUoaW5mby0+aXJxLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCQlpZiAoIWluZm8tPmZyb3plbikKKwkJCWF0YV9zZmZfaW50ZXJydXB0KGluZm8tPmlycSwgZGV2X2luc3RhbmNlKTsKKwl9IGVsc2UgeworCQlzZXRfaXJxX3R5cGUoaW5mby0+aXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByYjUwMF9wYXRhX3BvcnRfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKKwkuc2ZmX2V4ZWNfY29tbWFuZAk9IHJiNTAwX3BhdGFfZXhlY19jb21tYW5kLAorCS5zZmZfZGF0YV94ZmVyCQk9IHJiNTAwX3BhdGFfZGF0YV94ZmVyLAorCS5mcmVlemUJCQk9IHJiNTAwX3BhdGFfZnJlZXplLAorCS50aGF3CQkJPSByYjUwMF9wYXRhX3RoYXcsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcmI1MDBfcGF0YV9zaHQgPSB7CisJQVRBX1BJT19TSFQoRFJWX05BTUUpLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIHJiNTAwX3BhdGFfc2V0dXBfcG9ydHMoc3RydWN0IGF0YV9ob3N0ICphaCkKK3sKKwlzdHJ1Y3QgcmI1MDBfY2ZfaW5mbyAqaW5mbyA9IGFoLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKworCWFwID0gYWgtPnBvcnRzWzBdOworCisJYXAtPm9wcwkJPSAmcmI1MDBfcGF0YV9wb3J0X29wczsKKwlhcC0+cGlvX21hc2sJPSAweDFmOyAvKiBQSU80ICovCisJYXAtPmZsYWdzCT0gQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTzsKKworCWFwLT5pb2FkZHIuY21kX2FkZHIJPSBpbmZvLT5pb2Jhc2UgKyBSQjUwMF9DRl9SRUdfQ01EOworCWFwLT5pb2FkZHIuY3RsX2FkZHIJPSBpbmZvLT5pb2Jhc2UgKyBSQjUwMF9DRl9SRUdfQ1RSTDsKKwlhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0gaW5mby0+aW9iYXNlICsgUkI1MDBfQ0ZfUkVHX0NUUkw7CisKKwlhdGFfc2ZmX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CisKKwlhcC0+aW9hZGRyLmRhdGFfYWRkcgk9IGluZm8tPmlvYmFzZSArIFJCNTAwX0NGX1JFR19EQVRBOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCByYjUwMF9wYXRhX2RyaXZlcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGdwaW87CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGF0YV9ob3N0ICphaDsKKwlzdHJ1Y3QgcmI1MDBfY2ZfaW5mbyAqaW5mbzsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJT01FTSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCWlmIChncGlvIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBHUElPIGZvdW5kIGZvciBpcnElZFxuIiwgaXJxKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIERSVl9OQU1FKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkdQSU8gcmVxdWVzdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGFsbG9jYXRlIGhvc3QgKi8KKwlhaCA9IGF0YV9ob3N0X2FsbG9jKCZwZGV2LT5kZXYsIFJCNTAwX0NGX01BWFBPUlRTKTsKKwlpZiAoIWFoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFoKTsKKworCWluZm8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFoLT5wcml2YXRlX2RhdGEgPSBpbmZvOworCWluZm8tPmdwaW9fbGluZSA9IGdwaW87CisJaW5mby0+aXJxID0gaXJxOworCisJaW5mby0+aW9iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIWluZm8tPmlvYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBzZXQgR1BJTyBkaXJlY3Rpb24sIGVycj0lZFxuIiwKKwkJCQlyZXQpOworCQlnb3RvIGVycl9mcmVlX2dwaW87CisJfQorCisJcmI1MDBfcGF0YV9zZXR1cF9wb3J0cyhhaCk7CisKKwlyZXQgPSBhdGFfaG9zdF9hY3RpdmF0ZShhaCwgaXJxLCByYjUwMF9wYXRhX2lycV9oYW5kbGVyLAorCQkJCUlSUUZfVFJJR0dFUl9MT1csICZyYjUwMF9wYXRhX3NodCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9ncGlvOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2dwaW86CisJZ3Bpb19mcmVlKGdwaW8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgcmI1MDBfcGF0YV9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICphaCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByYjUwMF9jZl9pbmZvICppbmZvID0gYWgtPnByaXZhdGVfZGF0YTsKKworCWF0YV9ob3N0X2RldGFjaChhaCk7CisJZ3Bpb19mcmVlKGluZm8tPmdwaW9fbGluZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmI1MDBfcGF0YV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHJiNTAwX3BhdGFfZHJpdmVyX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocmI1MDBfcGF0YV9kcml2ZXJfcmVtb3ZlKSwKKwkuZHJpdmVyCSA9IHsKKwkJLm5hbWUgICA9IERSVl9OQU1FLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIERSVl9JTkZPIERSVl9ERVNDICIgdmVyc2lvbiAiIERSVl9WRVJTSU9OCisKK3N0YXRpYyBpbnQgX19pbml0IHJiNTAwX3BhdGFfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIERSVl9JTkZPICJcbiIpOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcmI1MDBfcGF0YV9wbGF0Zm9ybV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcmI1MDBfcGF0YV9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyYjUwMF9wYXRhX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkdhYm9yIEp1aG9zIDxqdWhvc2cgYXQgb3BlbndydC5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQocmI1MDBfcGF0YV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChyYjUwMF9wYXRhX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IGJhOGEzMWMuLjdkZmQxZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtNTMsNTMgKzUzLDEzIEBACiAKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcnoxMDAwX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByejEwMDBfcG9ydF9vcHMgPSB7Ci0JLnNldF9tb2RlCT0gcnoxMDAwX3NldF9tb2RlLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAorCS5pbmhlcml0cwk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkuc2V0X21vZGUJPSByejEwMDBfc2V0X21vZGUsCiB9OwogCiBzdGF0aWMgaW50IHJ6MTAwMF9maWZvX2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0xMjksNyArODksNiBAQAogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewotCQkuc2h0ID0gJnJ6MTAwMF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5wb3J0X29wcyA9ICZyejEwMDBfcG9ydF9vcHMKQEAgLTE0MCw3ICs5OSw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCiAJaWYgKHJ6MTAwMF9maWZvX2Rpc2FibGUocGRldikgPT0gMCkKLQkJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKKwkJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnJ6MTAwMF9zaHQsIE5VTEwpOwogCiAJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBkaXNhYmxlIHJlYWQtYWhlYWQgb24gY2hpcHNldC4uXG4iKTsKIAkvKiBOb3Qgc2FmZSB0byB1c2Ugc28gc2tpcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggNzI1YTg1OC4uY2JhYjM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIH0KIAogLyoqCi0gKglzYzEyMDBfcWNfaXNzdWVfcHJvdAktCWNvbW1hbmQgaXNzdWUKKyAqCXNjMTIwMF9xY19pc3N1ZQkJLQljb21tYW5kIGlzc3VlCiAgKglAcWM6IGNvbW1hbmQgcGVuZGluZwogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBsaWJhdGEgbGF5ZXIgaXMgYWJvdXQgdG8gaXNzdWUgYSBjb21tYW5kLiBXZSB3cmFwCkBAIC0xNjAsNyArMTYwLDcgQEAKICAqCW9uZSBNV0RNQS9VRE1BIGJpdC4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNjMTIwMF9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IHNjMTIwMF9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYgPSBxYy0+ZGV2OwpAQCAtMTc1LDU5ICsxNzUsMjEgQEAKIAkJICAgIAlzYzEyMDBfc2V0X2RtYW1vZGUoYXAsIGFkZXYpOwogCX0KIAotCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzYzEyMDBfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9EVU1CX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKKwkuc2dfdGFibGVzaXplCT0gTElCQVRBX0RVTUJfTUFYX1BSRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzYzEyMDBfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkucWNfcHJlcCAJPSBhdGFfc2ZmX2R1bWJfcWNfcHJlcCwKKwkucWNfaXNzdWUJPSBzYzEyMDBfcWNfaXNzdWUsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gc2MxMjAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHNjMTIwMF9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcCAJPSBhdGFfZHVtYl9xY19wcmVwLAotCS5xY19pc3N1ZQk9IHNjMTIwMF9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoqCkBAIC0yNDIsNyArMjA0LDYgQEAKIHN0YXRpYyBpbnQgc2MxMjAwX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZzYzEyMDBfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC0yNTIsNyArMjEzLDcgQEAKIAkvKiBDYW4ndCBlbmFibGUgcG9ydCAyIHlldCwgc2VlIHRvcCBjb21tZW50cyAqLwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sICZhdGFfZHVtbXlfcG9ydF9pbmZvIH07CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2MxMjAwX3NodCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzYzEyMDBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCmluZGV4IDZjMDE2ZGUuLmU5NjViMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW1pdCBBVEFQSSBVRE1BIHRvIFVETUE0XG4iLCBEUlZfTkFNRSk7CiAJCW1hc2sgJj0gfigweEUwIDw8IEFUQV9TSElGVF9VRE1BKTsKIAl9Ci0JcmV0dXJuIGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIoYWRldiwgbWFzayk7CisJcmV0dXJuIGF0YV9ibWRtYV9tb2RlX2ZpbHRlcihhZGV2LCBtYXNrKTsKIH0KIAogLyoqCkBAIC0yNzQsNyArMjc0LDcgQEAKICAqCUBhcDogUG9ydCB0byB3aGljaCBvdXRwdXQgaXMgc2VudAogICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0CiAgKgotICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfdGZfbG9hZCgpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX3RmX2xvYWQoKS4KICAqLwogCiBzdGF0aWMgdm9pZCBzY2NfdGZfbG9hZCAoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCkBAIC0zNDEsNyArMzQxLDcgQEAKICAqCUBhcDogUG9ydCBmcm9tIHdoaWNoIGlucHV0IGlzIHJlYWQKICAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldCBmb3Igc3RvcmluZyBpbnB1dAogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3RmX3JlYWQoKS4KKyAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3NmZl90Zl9yZWFkKCkuCiAgKi8KIAogc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQpAQCAtMzczLDcgKzM3Myw3IEBACiAgKglAYXA6IHBvcnQgdG8gd2hpY2ggY29tbWFuZCBpcyBiZWluZyBpc3N1ZWQKICAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldAogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2V4ZWNfY29tbWFuZCgpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX2V4ZWNfY29tbWFuZCgpLgogICovCiAKIHN0YXRpYyB2b2lkIHNjY19leGVjX2NvbW1hbmQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsCkBAIC0zODIsNyArMzgyLDcgQEAKIAlEUFJJTlRLKCJhdGEldTogY21kIDB4JVhcbiIsIGFwLT5wcmludF9pZCwgdGYtPmNvbW1hbmQpOwogCiAJb3V0X2JlMzIoYXAtPmlvYWRkci5jb21tYW5kX2FkZHIsIHRmLT5jb21tYW5kKTsKLQlhdGFfcGF1c2UoYXApOworCWF0YV9zZmZfcGF1c2UoYXApOwogfQogCiAvKioKQEAgLTM5NiwxNCArMzk2LDE0IEBACiB9CiAKIC8qKgotICoJc2NjX3N0ZF9kZXZfc2VsZWN0IC0gU2VsZWN0IGRldmljZSAwLzEgb24gQVRBIGJ1cworICoJc2NjX2Rldl9zZWxlY3QgLSBTZWxlY3QgZGV2aWNlIDAvMSBvbiBBVEEgYnVzCiAgKglAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKICAqCUBkZXZpY2U6IEFUQSBkZXZpY2UgKG51bWJlcmVkIGZyb20gemVybykgdG8gc2VsZWN0CiAgKgotICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc3RkX2Rldl9zZWxlY3QoKS4KKyAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3NmZl9kZXZfc2VsZWN0KCkuCiAgKi8KIAotc3RhdGljIHZvaWQgc2NjX3N0ZF9kZXZfc2VsZWN0IChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlKQorc3RhdGljIHZvaWQgc2NjX2Rldl9zZWxlY3QgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpCiB7CiAJdTggdG1wOwogCkBAIC00MTMsNyArNDEzLDcgQEAKIAkJdG1wID0gQVRBX0RFVklDRV9PQlMgfCBBVEFfREVWMTsKIAogCW91dF9iZTMyKGFwLT5pb2FkZHIuZGV2aWNlX2FkZHIsIHRtcCk7Ci0JYXRhX3BhdXNlKGFwKTsKKwlhdGFfc2ZmX3BhdXNlKGFwKTsKIH0KIAogLyoqCkBAIC00NDEsNyArNDQxLDcgQEAKIAlvdXRfYmUzMihtbWlvICsgU0NDX0RNQV9DTUQsIGRtYWN0bCk7CiAKIAkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLwotCWFwLT5vcHMtPmV4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CisJYXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CiB9CiAKIC8qKgpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKIAl1OCBuc2VjdCwgbGJhbDsKIAotCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIGRldmljZSk7CisJYXAtPm9wcy0+c2ZmX2Rldl9zZWxlY3QoYXAsIGRldmljZSk7CiAKIAlvdXRfYmUzMihpb2FkZHItPm5zZWN0X2FkZHIsIDB4NTUpOwogCW91dF9iZTMyKGlvYWRkci0+bGJhbF9hZGRyLCAweGFhKTsKQEAgLTQ5Nyw1NyArNDk3LDc4IEBACiB9CiAKIC8qKgotICoJc2NjX2J1c19wb3N0X3Jlc2V0IC0gUEFUQSBkZXZpY2UgcG9zdCByZXNldAorICoJc2NjX3dhaXRfYWZ0ZXJfcmVzZXQgLSB3YWl0IGZvciBkZXZpY2VzIHRvIGJlY29tZSByZWFkeSBhZnRlciByZXNldAogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2J1c19wb3N0X3Jlc2V0KCkuCisgKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zZmZfd2FpdF9hZnRlcl9yZXNldAogICovCiAKLXN0YXRpYyBpbnQgc2NjX2J1c19wb3N0X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK2ludCBzY2Nfd2FpdF9hZnRlcl9yZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCBkZXZtYXNrLAorCQkJIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CiAJdW5zaWduZWQgaW50IGRldjAgPSBkZXZtYXNrICYgKDEgPDwgMCk7CiAJdW5zaWduZWQgaW50IGRldjEgPSBkZXZtYXNrICYgKDEgPDwgMSk7Ci0JaW50IHJjOworCWludCByYywgcmV0ID0gMDsKIAotCS8qIGlmIGRldmljZSAwIHdhcyBmb3VuZCBpbiBhdGFfZGV2Y2hrLCB3YWl0IGZvciBpdHMKLQkgKiBCU1kgYml0IHRvIGNsZWFyCisJLyogU3BlYyBtYW5kYXRlcyAiPj0gMm1zIiBiZWZvcmUgY2hlY2tpbmcgc3RhdHVzLiAgV2Ugd2FpdAorCSAqIDE1MG1zLCBiZWNhdXNlIHRoYXQgd2FzIHRoZSBtYWdpYyBkZWxheSB1c2VkIGZvciBBVEFQSQorCSAqIGRldmljZXMgaW4gSGFsZSBMYW5kaXMncyBBVEFEUlZSLCBmb3IgdGhlIHBlcmlvZCBvZiB0aW1lCisJICogYmV0d2VlbiB3aGVuIHRoZSBBVEEgY29tbWFuZCByZWdpc3RlciBpcyB3cml0dGVuLCBhbmQgdGhlbgorCSAqIHN0YXR1cyBpcyBjaGVja2VkLiAgQmVjYXVzZSB3YWl0aW5nIGZvciAiYSB3aGlsZSIgYmVmb3JlCisJICogY2hlY2tpbmcgc3RhdHVzIGlzIGZpbmUsIHBvc3QgU1JTVCwgd2UgcGVyZm9ybSB0aGlzIG1hZ2ljCisJICogZGVsYXkgaGVyZSBhcyB3ZWxsLgorCSAqCisJICogT2xkIGRyaXZlcnMvaWRlIHVzZXMgdGhlIDJtUyBydWxlIGFuZCB0aGVuIHdhaXRzIGZvciByZWFkeS4KIAkgKi8KLQlpZiAoZGV2MCkgewotCQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7Ci0JCWlmIChyYyAmJiByYyAhPSAtRU5PREVWKQotCQkJcmV0dXJuIHJjOwotCX0KKwltc2xlZXAoMTUwKTsKIAotCS8qIGlmIGRldmljZSAxIHdhcyBmb3VuZCBpbiBhdGFfZGV2Y2hrLCB3YWl0IGZvcgotCSAqIHJlZ2lzdGVyIGFjY2VzcywgdGhlbiB3YWl0IGZvciBCU1kgdG8gY2xlYXIKKwkvKiBhbHdheXMgY2hlY2sgcmVhZGluZXNzIG9mIHRoZSBtYXN0ZXIgZGV2aWNlICovCisJcmMgPSBhdGFfc2ZmX3dhaXRfcmVhZHkobGluaywgZGVhZGxpbmUpOworCS8qIC1FTk9ERVYgbWVhbnMgdGhlIG9kZCBjbG93biBmb3Jnb3QgdGhlIEQ3IHB1bGxkb3duIHJlc2lzdG9yCisJICogYW5kIFRGIHN0YXR1cyBpcyAweGZmLCBiYWlsIG91dCBvbiBpdCB0b28uCiAJICovCi0Jd2hpbGUgKGRldjEpIHsKLQkJdTggbnNlY3QsIGxiYWw7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKLQkJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMSk7Ci0JCW5zZWN0ID0gaW5fYmUzMihpb2FkZHItPm5zZWN0X2FkZHIpOwotCQlsYmFsID0gaW5fYmUzMihpb2FkZHItPmxiYWxfYWRkcik7Ci0JCWlmICgobnNlY3QgPT0gMSkgJiYgKGxiYWwgPT0gMSkpCi0JCQlicmVhazsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJbXNsZWVwKDUwKTsJLyogZ2l2ZSBkcml2ZSBhIGJyZWF0aGVyICovCi0JfQorCS8qIGlmIGRldmljZSAxIHdhcyBmb3VuZCBpbiBhdGFfZGV2Y2hrLCB3YWl0IGZvciByZWdpc3RlcgorCSAqIGFjY2VzcyBicmllZmx5LCB0aGVuIHdhaXQgZm9yIEJTWSB0byBjbGVhci4KKwkgKi8KIAlpZiAoZGV2MSkgewotCQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7Ci0JCWlmIChyYyAmJiByYyAhPSAtRU5PREVWKQotCQkJcmV0dXJuIHJjOworCQlpbnQgaTsKKworCQlhcC0+b3BzLT5zZmZfZGV2X3NlbGVjdChhcCwgMSk7CisKKwkJLyogV2FpdCBmb3IgcmVnaXN0ZXIgYWNjZXNzLiAgU29tZSBBVEFQSSBkZXZpY2VzIGZhaWwKKwkJICogdG8gc2V0IG5zZWN0L2xiYWwgYWZ0ZXIgcmVzZXQsIHNvIGRvbid0IHdhc3RlIHRvbworCQkgKiBtdWNoIHRpbWUgb24gaXQuICBXZSdyZSBnb25uYSB3YWl0IGZvciAhQlNZIGFueXdheS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXU4IG5zZWN0LCBsYmFsOworCisJCQluc2VjdCA9IGluX2JlMzIoaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJCWxiYWwgPSBpbl9iZTMyKGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJCWlmICgobnNlY3QgPT0gMSkgJiYgKGxiYWwgPT0gMSkpCisJCQkJYnJlYWs7CisJCQltc2xlZXAoNTApOwkvKiBnaXZlIGRyaXZlIGEgYnJlYXRoZXIgKi8KKwkJfQorCisJCXJjID0gYXRhX3NmZl93YWl0X3JlYWR5KGxpbmssIGRlYWRsaW5lKTsKKwkJaWYgKHJjKSB7CisJCQlpZiAocmMgIT0gLUVOT0RFVikKKwkJCQlyZXR1cm4gcmM7CisJCQlyZXQgPSByYzsKKwkJfQogCX0KIAogCS8qIGlzIGFsbCB0aGlzIHJlYWxseSBuZWNlc3Nhcnk/ICovCi0JYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMCk7CisJYXAtPm9wcy0+c2ZmX2Rldl9zZWxlY3QoYXAsIDApOwogCWlmIChkZXYxKQotCQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAxKTsKKwkJYXAtPm9wcy0+c2ZmX2Rldl9zZWxlY3QoYXAsIDEpOwogCWlmIChkZXYwKQotCQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAwKTsKKwkJYXAtPm9wcy0+c2ZmX2Rldl9zZWxlY3QoYXAsIDApOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01NzAsMzIgKzU5MSwyMiBAQAogCXVkZWxheSgyMCk7CiAJb3V0X2JlMzIoaW9hZGRyLT5jdGxfYWRkciwgYXAtPmN0bCk7CiAKLQkvKiB3YWl0IGEgd2hpbGUgYmVmb3JlIGNoZWNraW5nIHN0YXR1cyAqLwotCWF0YV93YWl0X2FmdGVyX3Jlc2V0KGFwLCBkZWFkbGluZSk7Ci0KLQkvKiBCZWZvcmUgd2UgcGVyZm9ybSBwb3N0IHJlc2V0IHByb2Nlc3Npbmcgd2Ugd2FudCB0byBzZWUgaWYKLQkgKiB0aGUgYnVzIHNob3dzIDB4RkYgYmVjYXVzZSB0aGUgb2RkIGNsb3duIGZvcmdldHMgdGhlIEQ3Ci0JICogcHVsbGRvd24gcmVzaXN0b3IuCi0JICovCi0JaWYgKHNjY19jaGVja19zdGF0dXMoYXApID09IDB4RkYpCi0JCXJldHVybiAwOwotCi0Jc2NjX2J1c19wb3N0X3Jlc2V0KGFwLCBkZXZtYXNrLCBkZWFkbGluZSk7CisJc2NjX3dhaXRfYWZ0ZXJfcmVzZXQoJmFwLT5saW5rLCBkZXZtYXNrLCBkZWFkbGluZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKglzY2Nfc3RkX3NvZnRyZXNldCAtIHJlc2V0IGhvc3QgcG9ydCB2aWEgQVRBIFNSU1QKKyAqCXNjY19zb2Z0cmVzZXQgLSByZXNldCBob3N0IHBvcnQgdmlhIEFUQSBTUlNUCiAgKglAYXA6IHBvcnQgdG8gcmVzZXQKICAqCUBjbGFzc2VzOiByZXN1bHRpbmcgY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCiAgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCi0gKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zdGRfc29mdHJlc2V0KCkuCisgKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zZmZfc29mdHJlc2V0KCkuCiAgKi8KIAotc3RhdGljIGludCBzY2Nfc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3N0YXRpYyBpbnQgc2NjX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcywKKwkJCSB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKIAl1bnNpZ25lZCBpbnQgc2xhdmVfcG9zc2libGUgPSBhcC0+ZmxhZ3MgJiBBVEFfRkxBR19TTEFWRV9QT1NTOwpAQCAtNjA0LDExICs2MTUsNiBAQAogCiAJRFBSSU5USygiRU5URVJcbiIpOwogCi0JaWYgKGF0YV9saW5rX29mZmxpbmUobGluaykpIHsKLQkJY2xhc3Nlc1swXSA9IEFUQV9ERVZfTk9ORTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogZGV0ZXJtaW5lIGlmIGRldmljZSAwLzEgYXJlIHByZXNlbnQgKi8KIAlpZiAoc2NjX2RldmNoayhhcCwgMCkpCiAJCWRldm1hc2sgfD0gKDEgPDwgMCk7CkBAIC02MTYsNyArNjIyLDcgQEAKIAkJZGV2bWFzayB8PSAoMSA8PCAxKTsKIAogCS8qIHNlbGVjdCBkZXZpY2UgMCBhZ2FpbiAqLwotCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOworCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCAwKTsKIAogCS8qIGlzc3VlIGJ1cyByZXNldCAqLwogCURQUklOVEsoImFib3V0IHRvIHNvZnRyZXNldCwgZGV2bWFzaz0leFxuIiwgZGV2bWFzayk7CkBAIC02MjgsMTMgKzYzNCwxMiBAQAogCX0KIAogCS8qIGRldGVybWluZSBieSBzaWduYXR1cmUgd2hldGhlciB3ZSBoYXZlIEFUQSBvciBBVEFQSSBkZXZpY2VzICovCi0JY2xhc3Nlc1swXSA9IGF0YV9kZXZfdHJ5X2NsYXNzaWZ5KCZhcC0+bGluay5kZXZpY2VbMF0sCisJY2xhc3Nlc1swXSA9IGF0YV9zZmZfZGV2X2NsYXNzaWZ5KCZhcC0+bGluay5kZXZpY2VbMF0sCiAJCQkJCSAgZGV2bWFzayAmICgxIDw8IDApLCAmZXJyKTsKIAlpZiAoc2xhdmVfcG9zc2libGUgJiYgZXJyICE9IDB4ODEpCi0JCWNsYXNzZXNbMV0gPSBhdGFfZGV2X3RyeV9jbGFzc2lmeSgmYXAtPmxpbmsuZGV2aWNlWzFdLAorCQljbGFzc2VzWzFdID0gYXRhX3NmZl9kZXZfY2xhc3NpZnkoJmFwLT5saW5rLmRldmljZVsxXSwKIAkJCQkJCSAgZGV2bWFzayAmICgxIDw8IDEpLCAmZXJyKTsKIAotIG91dDoKIAlEUFJJTlRLKCJFWElULCBjbGFzc2VzWzBdPSV1IFsxXT0ldVxuIiwgY2xhc3Nlc1swXSwgY2xhc3Nlc1sxXSk7CiAJcmV0dXJuIDA7CiB9CkBAIC02OTUsNyArNzAwLDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnRlcm5hbCBCdXMgRXJyb3JcbiIsIERSVl9OQU1FKTsKIAkJCW91dF9iZTMyKGJtaWRfYmFzZSArIFNDQ19ETUFfSU5UU1QsIElOVFNUU19CTVNJTlQpOwogCQkJLyogVEJEOiBTVyByZXNldCAqLwotCQkJc2NjX3N0ZF9zb2Z0cmVzZXQoJmFwLT5saW5rLCAmY2xhc3NlcywgZGVhZGxpbmUpOworCQkJc2NjX3NvZnRyZXNldCgmYXAtPmxpbmssICZjbGFzc2VzLCBkZWFkbGluZSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC03MjEsNyArNzI2LDcgQEAKIAkJIGluX2JlMzIoYm1pZF9iYXNlICsgU0NDX0RNQV9DTUQpICYgfkFUQV9ETUFfU1RBUlQpOwogCiAJLyogb25lLVBJTy1jeWNsZSBndWFyYW50ZWVkIHdhaXQsIHBlciBzcGVjLCBmb3IgSERNQTE6MCB0cmFuc2l0aW9uICovCi0JYXRhX2FsdHN0YXR1cyhhcCk7CS8qIGR1bW15IHJlYWQgKi8KKwlhdGFfc2ZmX2FsdHN0YXR1cyhhcCk7CS8qIGR1bW15IHJlYWQgKi8KIH0KIAogLyoqCkBAIC03NDIsNyArNzQ3LDcgQEAKIAkJcmV0dXJuIGhvc3Rfc3RhdDsKIAogCS8qIGVycmF0YSBBMjUyLEEzMDggd29ya2Fyb3VuZDogU3RlcDQgKi8KLQlpZiAoKGF0YV9hbHRzdGF0dXMoYXApICYgQVRBX0VSUikgJiYgKGludF9zdGF0dXMgJiBJTlRTVFNfSU5UUlEpKQorCWlmICgoYXRhX3NmZl9hbHRzdGF0dXMoYXApICYgQVRBX0VSUikgJiYgKGludF9zdGF0dXMgJiBJTlRTVFNfSU5UUlEpKQogCQlyZXR1cm4gKGhvc3Rfc3RhdCB8IEFUQV9ETUFfSU5UUik7CiAKIAkvKiBlcnJhdGEgQTMwOCB3b3JrYXJvdW5kIFN0ZXA1ICovCkBAIC03NzMsNyArNzc4LDcgQEAKICAqCUBidWZsZW46IGJ1ZmZlciBsZW5ndGgKICAqCUBydzogcmVhZC93cml0ZQogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2RhdGFfeGZlcigpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX2RhdGFfeGZlcigpLgogICovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2NjX2RhdGFfeGZlciAoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLApAQCAtNzgyLDI4ICs3ODcsMjggQEAKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5saW5rLT5hcDsKIAl1bnNpZ25lZCBpbnQgd29yZHMgPSBidWZsZW4gPj4gMTsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1MTYgKmJ1ZjE2ID0gKHUxNiAqKSBidWY7CisJX19sZTE2ICpidWYxNiA9IChfX2xlMTYgKikgYnVmOwogCXZvaWQgX19pb21lbSAqbW1pbyA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOwogCiAJLyogVHJhbnNmZXIgbXVsdGlwbGUgb2YgMiBieXRlcyAqLwogCWlmIChydyA9PSBSRUFEKQogCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykKLQkJCWJ1ZjE2W2ldID0gbGUxNl90b19jcHUoaW5fYmUzMihtbWlvKSk7CisJCQlidWYxNltpXSA9IGNwdV90b19sZTE2KGluX2JlMzIobW1pbykpOwogCWVsc2UKIAkJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspCi0JCQlvdXRfYmUzMihtbWlvLCBjcHVfdG9fbGUxNihidWYxNltpXSkpOworCQkJb3V0X2JlMzIobW1pbywgbGUxNl90b19jcHUoYnVmMTZbaV0pKTsKIAogCS8qIFRyYW5zZmVyIHRyYWlsaW5nIDEgYnl0ZSwgaWYgYW55LiAqLwogCWlmICh1bmxpa2VseShidWZsZW4gJiAweDAxKSkgewotCQl1MTYgYWxpZ25fYnVmWzFdID0geyAwIH07CisJCV9fbGUxNiBhbGlnbl9idWZbMV0gPSB7IDAgfTsKIAkJdW5zaWduZWQgY2hhciAqdHJhaWxpbmdfYnVmID0gYnVmICsgYnVmbGVuIC0gMTsKIAogCQlpZiAocncgPT0gUkVBRCkgewotCQkJYWxpZ25fYnVmWzBdID0gbGUxNl90b19jcHUoaW5fYmUzMihtbWlvKSk7CisJCQlhbGlnbl9idWZbMF0gPSBjcHVfdG9fbGUxNihpbl9iZTMyKG1taW8pKTsKIAkJCW1lbWNweSh0cmFpbGluZ19idWYsIGFsaWduX2J1ZiwgMSk7CiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoYWxpZ25fYnVmLCB0cmFpbGluZ19idWYsIDEpOwotCQkJb3V0X2JlMzIobW1pbywgY3B1X3RvX2xlMTYoYWxpZ25fYnVmWzBdKSk7CisJCQlvdXRfYmUzMihtbWlvLCBsZTE2X3RvX2NwdShhbGlnbl9idWZbMF0pKTsKIAkJfQogCQl3b3JkcysrOwogCX0KQEAgLTgxNSw3ICs4MjAsNyBAQAogICoJc2NjX2lycV9vbiAtIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIGEgcG9ydC4KICAqCUBhcDogUG9ydCBvbiB3aGljaCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2lycV9vbigpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX2lycV9vbigpLgogICovCiAKIHN0YXRpYyB1OCBzY2NfaXJxX29uIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtODI5LDE5ICs4MzQsMTkgQEAKIAlvdXRfYmUzMihpb2FkZHItPmN0bF9hZGRyLCBhcC0+Y3RsKTsKIAl0bXAgPSBhdGFfd2FpdF9pZGxlKGFwKTsKIAotCWFwLT5vcHMtPmlycV9jbGVhcihhcCk7CisJYXAtPm9wcy0+c2ZmX2lycV9jbGVhcihhcCk7CiAKIAlyZXR1cm4gdG1wOwogfQogCiAvKioKLSAqCXNjY19ibWRtYV9mcmVlemUgLSBGcmVlemUgQk1ETUEgY29udHJvbGxlciBwb3J0CisgKglzY2NfZnJlZXplIC0gRnJlZXplIEJNRE1BIGNvbnRyb2xsZXIgcG9ydAogICoJQGFwOiBwb3J0IHRvIGZyZWV6ZQogICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2JtZG1hX2ZyZWV6ZSgpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX2ZyZWV6ZSgpLgogICovCiAKLXN0YXRpYyB2b2lkIHNjY19ibWRtYV9mcmVlemUgKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgdm9pZCBzY2NfZnJlZXplIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CiAKQEAgLTg1NCw5ICs4NTksOSBAQAogCSAqIEFUQV9OSUVOIG1hbmlwdWxhdGlvbi4gIEFsc28sIG1hbnkgY29udHJvbGxlcnMgZmFpbCB0byBtYXNrCiAJICogcHJldmlvdXNseSBwZW5kaW5nIElSUSBvbiBBVEFfTklFTiBhc3NlcnRpb24uICBDbGVhciBpdC4KIAkgKi8KLQlhdGFfY2hrX3N0YXR1cyhhcCk7CisJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CiAKLQlhcC0+b3BzLT5pcnFfY2xlYXIoYXApOworCWFwLT5vcHMtPnNmZl9pcnFfY2xlYXIoYXApOwogfQogCiAvKioKQEAgLTg2OCwxOCArODczLDE4IEBACiBzdGF0aWMgaW50IHNjY19wYXRhX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlsaW5rLT5hcC0+Y2JsID0gQVRBX0NCTF9QQVRBODA7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOworCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAogLyoqCi0gKglzY2Nfc3RkX3Bvc3RyZXNldCAtIHN0YW5kYXJkIHBvc3RyZXNldCBjYWxsYmFjaworICoJc2NjX3Bvc3RyZXNldCAtIHN0YW5kYXJkIHBvc3RyZXNldCBjYWxsYmFjawogICoJQGFwOiB0aGUgdGFyZ2V0IGF0YV9wb3J0CiAgKglAY2xhc3NlczogY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCiAgKgotICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc3RkX3Bvc3RyZXNldCgpLgorICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc2ZmX3Bvc3RyZXNldCgpLgogICovCiAKLXN0YXRpYyB2b2lkIHNjY19zdGRfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzc2VzKQorc3RhdGljIHZvaWQgc2NjX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CiAKQEAgLTg4Nyw5ICs4OTIsOSBAQAogCiAJLyogaXMgZG91YmxlLXNlbGVjdCByZWFsbHkgbmVjZXNzYXJ5PyAqLwogCWlmIChjbGFzc2VzWzBdICE9IEFUQV9ERVZfTk9ORSkKLQkJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMSk7CisJCWFwLT5vcHMtPnNmZl9kZXZfc2VsZWN0KGFwLCAxKTsKIAlpZiAoY2xhc3Nlc1sxXSAhPSBBVEFfREVWX05PTkUpCi0JCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOworCQlhcC0+b3BzLT5zZmZfZGV2X3NlbGVjdChhcCwgMCk7CiAKIAkvKiBiYWlsIG91dCBpZiBubyBkZXZpY2UgaXMgcHJlc2VudCAqLwogCWlmIChjbGFzc2VzWzBdID09IEFUQV9ERVZfTk9ORSAmJiBjbGFzc2VzWzFdID09IEFUQV9ERVZfTk9ORSkgewpAQCAtOTA1LDI0ICs5MTAsMTMgQEAKIH0KIAogLyoqCi0gKglzY2NfZXJyb3JfaGFuZGxlciAtIFN0b2NrIGVycm9yIGhhbmRsZXIgZm9yIEJNRE1BIGNvbnRyb2xsZXIKLSAqCUBhcDogcG9ydCB0byBoYW5kbGUgZXJyb3IgZm9yCi0gKi8KLQotc3RhdGljIHZvaWQgc2NjX2Vycm9yX2hhbmRsZXIgKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBzY2NfcGF0YV9wcmVyZXNldCwgc2NjX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsCi0JCQkgICBzY2Nfc3RkX3Bvc3RyZXNldCk7Ci19Ci0KLS8qKgotICoJc2NjX2JtZG1hX2lycV9jbGVhciAtIENsZWFyIFBDSSBJREUgQk1ETUEgaW50ZXJydXB0LgorICoJc2NjX2lycV9jbGVhciAtIENsZWFyIFBDSSBJREUgQk1ETUEgaW50ZXJydXB0LgogICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KICAqCi0gKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9ibWRtYV9pcnFfY2xlYXIoKS4KKyAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3NmZl9pcnFfY2xlYXIoKS4KICAqLwogCi1zdGF0aWMgdm9pZCBzY2NfYm1kbWFfaXJxX2NsZWFyIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIHZvaWQgc2NjX2lycV9jbGVhciAoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7CiAKQEAgLTk2OCw1MiArOTYyLDM3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjY19zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzY2NfcGF0YV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2NjX3BhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCiAJLnNldF9waW9tb2RlCQk9IHNjY19zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gc2NjX3NldF9kbWFtb2RlLAogCS5tb2RlX2ZpbHRlcgkJPSBzY2NfbW9kZV9maWx0ZXIsCiAKLQkudGZfbG9hZAkJPSBzY2NfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBzY2NfdGZfcmVhZCwKLQkuZXhlY19jb21tYW5kCQk9IHNjY19leGVjX2NvbW1hbmQsCi0JLmNoZWNrX3N0YXR1cwkJPSBzY2NfY2hlY2tfc3RhdHVzLAotCS5jaGVja19hbHRzdGF0dXMJPSBzY2NfY2hlY2tfYWx0c3RhdHVzLAotCS5kZXZfc2VsZWN0CQk9IHNjY19zdGRfZGV2X3NlbGVjdCwKKwkuc2ZmX3RmX2xvYWQJCT0gc2NjX3RmX2xvYWQsCisJLnNmZl90Zl9yZWFkCQk9IHNjY190Zl9yZWFkLAorCS5zZmZfZXhlY19jb21tYW5kCT0gc2NjX2V4ZWNfY29tbWFuZCwKKwkuc2ZmX2NoZWNrX3N0YXR1cwk9IHNjY19jaGVja19zdGF0dXMsCisJLnNmZl9jaGVja19hbHRzdGF0dXMJPSBzY2NfY2hlY2tfYWx0c3RhdHVzLAorCS5zZmZfZGV2X3NlbGVjdAkJPSBzY2NfZGV2X3NlbGVjdCwKIAogCS5ibWRtYV9zZXR1cAkJPSBzY2NfYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0CQk9IHNjY19ibWRtYV9zdGFydCwKIAkuYm1kbWFfc3RvcAkJPSBzY2NfYm1kbWFfc3RvcCwKIAkuYm1kbWFfc3RhdHVzCQk9IHNjY19ibWRtYV9zdGF0dXMsCi0JLmRhdGFfeGZlcgkJPSBzY2NfZGF0YV94ZmVyLAorCS5zZmZfZGF0YV94ZmVyCQk9IHNjY19kYXRhX3hmZXIsCiAKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZnJlZXplCQkJPSBzY2NfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQotCS5lcnJvcl9oYW5kbGVyCQk9IHNjY19lcnJvcl9oYW5kbGVyLAorCS5mcmVlemUJCQk9IHNjY19mcmVlemUsCisJLnByZXJlc2V0CQk9IHNjY19wYXRhX3ByZXJlc2V0LAorCS5zb2Z0cmVzZXQJCT0gc2NjX3NvZnRyZXNldCwKKwkucG9zdHJlc2V0CQk9IHNjY19wb3N0cmVzZXQsCiAJLnBvc3RfaW50ZXJuYWxfY21kCT0gc2NjX2JtZG1hX3N0b3AsCiAKLQkuaXJxX2NsZWFyCQk9IHNjY19ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gc2NjX2lycV9vbiwKKwkuc2ZmX2lycV9jbGVhcgkJPSBzY2NfaXJxX2NsZWFyLAorCS5zZmZfaXJxX29uCQk9IHNjY19pcnFfb24sCiAKIAkucG9ydF9zdGFydAkJPSBzY2NfcG9ydF9zdGFydCwKIAkucG9ydF9zdG9wCQk9IHNjY19wb3J0X3N0b3AsCkBAIC0xMTY2LDggKzExNDUsOCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBkZXYtPmlycSwgYXRhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkJICZzY2Nfc2h0KTsKKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwKKwkJCQkgSVJRRl9TSEFSRUQsICZzY2Nfc2h0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNjY19wY2lfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDljNTIzZmIuLmZmZDI2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogewogCWlmIChhZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkKIAkJbWFzayAmPSB+QVRBX01BU0tfVURNQTsKLQlyZXR1cm4gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlcihhZGV2LCBtYXNrKTsKKwlyZXR1cm4gYXRhX2JtZG1hX21vZGVfZmlsdGVyKGFkZXYsIG1hc2spOwogfQogCiAKQEAgLTIxOSwxNiArMjE5LDE2IEBACiAKIAkvKiBEaXNrLCBVRE1BICovCiAJaWYgKGFkZXYtPmNsYXNzICE9IEFUQV9ERVZfQVRBKQotCQlyZXR1cm4gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlcihhZGV2LCBtYXNrKTsKKwkJcmV0dXJuIGF0YV9ibWRtYV9tb2RlX2ZpbHRlcihhZGV2LCBtYXNrKTsKIAogCS8qIEFjdHVhbGx5IGRvIG5lZWQgdG8gY2hlY2sgKi8KIAlhdGFfaWRfY19zdHJpbmcoYWRldi0+aWQsIG1vZGVsX251bSwgQVRBX0lEX1BST0QsIHNpemVvZihtb2RlbF9udW0pKTsKIAogCWZvciAoaSA9IDA7IChwID0gY3NiX2JhZF9hdGExMDBbaV0pICE9IE5VTEw7IGkrKykgewogCQlpZiAoIXN0cmNtcChwLCBtb2RlbF9udW0pKQotCQkJbWFzayAmPSB+KDB4MUYgPDwgQVRBX1NISUZUX1VETUEpOworCQkJbWFzayAmPSB+KDB4RTAgPDwgQVRBX1NISUZUX1VETUEpOwogCX0KLQlyZXR1cm4gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlcihhZGV2LCBtYXNrKTsKKwlyZXR1cm4gYXRhX2JtZG1hX21vZGVfZmlsdGVyKGFkZXYsIG1hc2spOwogfQogCiAvKioKQEAgLTI5OCw4OSArMjk4LDIwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNlcnZlcndvcmtzX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNlcnZlcndvcmtzX29zYjRfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkuY2FibGVfZGV0ZWN0CT0gc2VydmVyd29ya3NfY2FibGVfZGV0ZWN0LAorCS5tb2RlX2ZpbHRlcgk9IHNlcnZlcndvcmtzX29zYjRfZmlsdGVyLAogCS5zZXRfcGlvbW9kZQk9IHNlcnZlcndvcmtzX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHNlcnZlcndvcmtzX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IHNlcnZlcndvcmtzX29zYjRfZmlsdGVyLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IHNlcnZlcndvcmtzX2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNlcnZlcndvcmtzX2NzYl9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSBzZXJ2ZXJ3b3Jrc19zZXRfcGlvbW9kZSwKLQkuc2V0X2RtYW1vZGUJPSBzZXJ2ZXJ3b3Jrc19zZXRfZG1hbW9kZSwKKwkuaW5oZXJpdHMJPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcywKIAkubW9kZV9maWx0ZXIJPSBzZXJ2ZXJ3b3Jrc19jc2JfZmlsdGVyLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IHNlcnZlcndvcmtzX2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogc3RhdGljIGludCBzZXJ2ZXJ3b3Jrc19maXh1cF9vc2I0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtNDY4LDI4ICszOTksMjQgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1s0XSA9IHsKIAkJeyAvKiBPU0I0ICovCi0JCQkuc2h0ID0gJnNlcnZlcndvcmtzX3NodCwKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCQkucGlvX21hc2sgPSAweDFmLAogCQkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkJLnVkbWFfbWFzayA9IDB4MDcsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcwogCQl9LCB7IC8qIE9TQjQgbm8gVURNQSAqLwotCQkJLnNodCA9ICZzZXJ2ZXJ3b3Jrc19zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkJLnBpb19tYXNrID0gMHgxZiwKIAkJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJCS51ZG1hX21hc2sgPSAweDAwLAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX29zYjRfcG9ydF9vcHMKIAkJfSwgeyAvKiBDU0I1ICovCi0JCQkuc2h0ID0gJnNlcnZlcndvcmtzX3NodCwKIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCQkucGlvX21hc2sgPSAweDFmLAogCQkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19jc2JfcG9ydF9vcHMKIAkJfSwgeyAvKiBDU0I1IC0gbGF0ZXIgcmV2aXNpb25zKi8KLQkJCS5zaHQgPSAmc2VydmVyd29ya3Nfc2h0LAogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJCS5waW9fbWFzayA9IDB4MWYsCiAJCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC00OTgsNiArNDI1LDExIEBACiAJCX0KIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm9baWQtPmRyaXZlcl9kYXRhXSwgTlVMTCB9OworCWludCByYzsKKworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJLyogRm9yY2UgbWFzdGVyIGxhdGVuY3kgdGltZXIgdG8gNjQgUENJIGNsb2NrcyAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg0MCk7CkBAIC01MjcsMjQgKzQ1OSwzMCBAQAogCQlzZXJ2ZXJ3b3Jrc19maXh1cF9odDEwMDAocGRldik7CiAKIAlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNUlERSkKLQkJYXRhX3BjaV9jbGVhcl9zaW1wbGV4KHBkZXYpOworCQlhdGFfcGNpX2JtZG1hX2NsZWFyX3NpbXBsZXgocGRldik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZzZXJ2ZXJ3b3Jrc19zaHQsIE5VTEwpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHNlcnZlcndvcmtzX3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYzsKKworCXJjID0gYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJLyogRm9yY2UgbWFzdGVyIGxhdGVuY3kgdGltZXIgdG8gNjQgUENJIGNsb2NrcyAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg0MCk7CiAKLQlzd2l0Y2ggKHBkZXYtPmRldmljZSkKLQl7CisJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREU6CiAJCQlzZXJ2ZXJ3b3Jrc19maXh1cF9vc2I0KHBkZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFOgotCQkJYXRhX3BjaV9jbGVhcl9zaW1wbGV4KHBkZXYpOworCQkJYXRhX3BjaV9ibWRtYV9jbGVhcl9zaW1wbGV4KHBkZXYpOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTI6CkBAIC01NTQsNyArNDkyLDkgQEAKIAkJCXNlcnZlcndvcmtzX2ZpeHVwX2h0MTAwMChwZGV2KTsKIAkJCWJyZWFrOwogCX0KLQlyZXR1cm4gYXRhX3BjaV9kZXZpY2VfcmVzdW1lKHBkZXYpOworCisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDUwMzI0NWEuLjcyMGI4NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMTkyLDU0ICsxOTIsMTQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2lsNjgwX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpbDY4MF9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJPSBzaWw2ODBfY2FibGVfZGV0ZWN0LAogCS5zZXRfcGlvbW9kZQk9IHNpbDY4MF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBzaWw2ODBfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gc2lsNjgwX2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAogLyoqCkBAIC0yNjksNyArMjI5LDExIEBACiAJZGV2X2RiZygmcGRldi0+ZGV2LCAic2lsNjgwOiBCQTVfRU4gPSAlZCBjbG9jayA9ICUwMlhcbiIsCiAJCXRtcGJ5dGUgJiAxLCB0bXBieXRlICYgMHgzMCk7CiAKLQkqdHJ5X21taW8gPSAodG1wYnl0ZSAmIDEpIHx8IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA1KTsKKwkqdHJ5X21taW8gPSAwOworI2lmZGVmIENPTkZJR19QUENfTUVSR0UKKwlpZiAobWFjaGluZV9pcyhjZWxsKSkKKwkJKnRyeV9tbWlvID0gKHRtcGJ5dGUgJiAxKSB8fCBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNSk7CisjZW5kaWYKIAogCXN3aXRjaCh0bXBieXRlICYgMHgzMCkgewogCQljYXNlIDB4MDA6CkBAIC0zMTgsNyArMjgyLDYgQEAKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZzaWw2ODBfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC0zMjYsNyArMjg5LDYgQEAKIAkJLnBvcnRfb3BzID0gJnNpbDY4MF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc2xvdyA9IHsKLQkJLnNodCA9ICZzaWw2ODBfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC0zNDIsNiArMzA0LDEwIEBACiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCisJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKIAlzd2l0Y2ggKHNpbDY4MF9pbml0X2NoaXAocGRldiwgJnRyeV9tbWlvKSkgewogCQljYXNlIDA6CiAJCQlwcGlbMF0gPSAmaW5mb19zbG93OwpAQCAtMzg0LDI4ICszNTAsMzMgQEAKIAlob3N0LT5wb3J0c1swXS0+aW9hZGRyLmNtZF9hZGRyID0gbW1pb19iYXNlICsgMHg4MDsKIAlob3N0LT5wb3J0c1swXS0+aW9hZGRyLmN0bF9hZGRyID0gbW1pb19iYXNlICsgMHg4YTsKIAlob3N0LT5wb3J0c1swXS0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0gbW1pb19iYXNlICsgMHg4YTsKLQlhdGFfc3RkX3BvcnRzKCZob3N0LT5wb3J0c1swXS0+aW9hZGRyKTsKKwlhdGFfc2ZmX3N0ZF9wb3J0cygmaG9zdC0+cG9ydHNbMF0tPmlvYWRkcik7CiAJaG9zdC0+cG9ydHNbMV0tPmlvYWRkci5ibWRtYV9hZGRyID0gbW1pb19iYXNlICsgMHgwODsKIAlob3N0LT5wb3J0c1sxXS0+aW9hZGRyLmNtZF9hZGRyID0gbW1pb19iYXNlICsgMHhjMDsKIAlob3N0LT5wb3J0c1sxXS0+aW9hZGRyLmN0bF9hZGRyID0gbW1pb19iYXNlICsgMHhjYTsKIAlob3N0LT5wb3J0c1sxXS0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0gbW1pb19iYXNlICsgMHhjYTsKLQlhdGFfc3RkX3BvcnRzKCZob3N0LT5wb3J0c1sxXS0+aW9hZGRyKTsKKwlhdGFfc2ZmX3N0ZF9wb3J0cygmaG9zdC0+cG9ydHNbMV0tPmlvYWRkcik7CiAKIAkvKiBSZWdpc3RlciAmIGFjdGl2YXRlICovCi0JcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBkZXYtPmlycSwgYXRhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkJICZzaWw2ODBfc2h0KTsKKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwKKwkJCQkgSVJRRl9TSEFSRUQsICZzaWw2ODBfc2h0KTsKIAogdXNlX2lvcG9ydHM6Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmc2lsNjgwX3NodCwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc2lsNjgwX3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JaW50IHRyeV9tbWlvOworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgdHJ5X21taW8sIHJjOwogCisJcmMgPSBhdGFfcGNpX2RldmljZV9kb19yZXN1bWUocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAJc2lsNjgwX2luaXRfY2hpcChwZGV2LCAmdHJ5X21taW8pOwotCXJldHVybiBhdGFfcGNpX2RldmljZV9yZXN1bWUocGRldik7CisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCmluZGV4IGRjN2U5MTUuLmU4MmM2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwpAQCAtMTU2LDI0ICsxNTYsMTEgQEAKIAkvKiBDbGVhciB0aGUgRklGTyBzZXR0aW5ncy4gV2UgY2FuJ3QgZW5hYmxlIHRoZSBGSUZPIHVudGlsCiAJICAgd2Uga25vdyB3ZSBhcmUgcG9raW5nIGF0IGEgZGlzayAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDRCLCAwKTsKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCiAKIC8qKgotICoJc2lzX2Vycm9yX2hhbmRsZXIgLSBQcm9iZSBzcGVjaWZpZWQgcG9ydCBvbiBQQVRBIGhvc3QgY29udHJvbGxlcgotICoJQGFwOiBQb3J0IHRvIHByb2JlCi0gKgotICoJTE9DS0lORzoKLSAqCU5vbmUgKGluaGVyaXRlZCBmcm9tIGNhbGxlcikuCi0gKi8KLQotc3RhdGljIHZvaWQgc2lzX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIHNpc19wcmVfcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLCBhdGFfc3RkX3Bvc3RyZXNldCk7Ci19Ci0KLS8qKgogICoJc2lzX3NldF9maWZvCS0JU2V0IFJXUCBmaWZvIGJpdHMgZm9yIHRoaXMgZGV2aWNlCiAgKglAYXA6IFBvcnQKICAqCUBhZGV2OiBEZXZpY2UKQEAgLTUxNCwyMTcgKzUwMSw1NyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzaXNfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lzXzEzM19vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lzXzEzM19mb3Jfc2F0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLnNldF9waW9tb2RlCQk9IHNpc18xMzNfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IHNpc18xMzNfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCQk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IHNpc19lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKIAkuY2FibGVfZGV0ZWN0CQk9IHNpc18xMzNfY2FibGVfZGV0ZWN0LAotCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lzXzEzM19mb3Jfc2F0YV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lzX2Jhc2Vfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5wcmVyZXNldAkJPSBzaXNfcHJlX3Jlc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpc18xMzNfb3BzID0geworCS5pbmhlcml0cwkJPSAmc2lzX2Jhc2Vfb3BzLAogCS5zZXRfcGlvbW9kZQkJPSBzaXNfMTMzX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBzaXNfMTMzX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCiAJLmNhYmxlX2RldGVjdAkJPSBzaXNfMTMzX2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpc18xMzNfZWFybHlfb3BzID0geworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpc18xMzNfZWFybHlfb3BzID0geworCS5pbmhlcml0cwkJPSAmc2lzX2Jhc2Vfb3BzLAogCS5zZXRfcGlvbW9kZQkJPSBzaXNfMTAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBzaXNfMTMzX2Vhcmx5X3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBzaXNfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCiAJLmNhYmxlX2RldGVjdAkJPSBzaXNfNjZfY2FibGVfZGV0ZWN0LAotCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lzXzEwMF9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lzXzEwMF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZzaXNfYmFzZV9vcHMsCiAJLnNldF9waW9tb2RlCQk9IHNpc18xMDBfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IHNpc18xMDBfc2V0X2RtYW1vZGUsCi0JLm1vZGVfZmlsdGVyCQk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IHNpc19lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKIAkuY2FibGVfZGV0ZWN0CQk9IHNpc182Nl9jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0KLQkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzaXNfNjZfb3BzID0geworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpc182Nl9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZzaXNfYmFzZV9vcHMsCiAJLnNldF9waW9tb2RlCQk9IHNpc19vbGRfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IHNpc182Nl9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAogCS5jYWJsZV9kZXRlY3QJCT0gc2lzXzY2X2NhYmxlX2RldGVjdCwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IHNpc19lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpc19vbGRfb3BzID0geworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpc19vbGRfb3BzID0geworCS5pbmhlcml0cwkJPSAmc2lzX2Jhc2Vfb3BzLAogCS5zZXRfcGlvbW9kZQkJPSBzaXNfb2xkX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSBzaXNfb2xkX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgkJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBzaXNfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCiAJLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7Ci0JLnNodAkJPSAmc2lzX3NodCwKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkubXdkbWFfbWFzawk9IDB4MDcsCkBAIC03MzIsNyArNTU5LDYgQEAKIAkucG9ydF9vcHMJPSAmc2lzX29sZF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMzMgPSB7Ci0JLnNodAkJPSAmc2lzX3NodCwKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkubXdkbWFfbWFzawk9IDB4MDcsCkBAIC03NDAsNDIgKzU2NiwzNiBAQAogCS5wb3J0X29wcwk9ICZzaXNfb2xkX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm82NiA9IHsKLQkuc2h0CQk9ICZzaXNfc2h0LAogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMDAgPSB7Ci0JLnNodAkJPSAmc2lzX3NodCwKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCS5wb3J0X29wcwk9ICZzaXNfMTAwX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMDBfZWFybHkgPSB7Ci0JLnNodAkJPSAmc2lzX3NodCwKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCS5wb3J0X29wcwk9ICZzaXNfNjZfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzMyA9IHsKLQkuc2h0CQk9ICZzaXNfc2h0LAogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnNpc18xMzNfb3BzLAogfTsKIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTMzX2Zvcl9zYXRhID0gewotCS5zaHQJCT0gJnNpc19zaHQsCiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnNpc18xMzNfZm9yX3NhdGFfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzM19lYXJseSA9IHsKLQkuc2h0CQk9ICZzaXNfc2h0LAogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCkBAIC04NTcsMTEgKzY3NywxMSBAQAogc3RhdGljIGludCBzaXNfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBvcnQ7Ci0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmcG9ydCwgTlVMTCB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgTlVMTCwgTlVMTCB9OwogCXN0cnVjdCBwY2lfZGV2ICpob3N0ID0gTlVMTDsKIAlzdHJ1Y3Qgc2lzX2NoaXBzZXQgKmNoaXBzZXQgPSBOVUxMOwogCXN0cnVjdCBzaXNfY2hpcHNldCAqc2V0czsKKwlpbnQgcmM7CiAKIAlzdGF0aWMgc3RydWN0IHNpc19jaGlwc2V0IHNpc19jaGlwc2V0c1tdID0gewogCkBAIC05MTQsOCArNzM0LDExIEBACiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKIAkJCSAgICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQkvKiBXZSBoYXZlIHRvIGZpbmQgdGhlIGJyaWRnZSBmaXJzdCAqLworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCisJLyogV2UgaGF2ZSB0byBmaW5kIHRoZSBicmlkZ2UgZmlyc3QgKi8KIAlmb3IgKHNldHMgPSAmc2lzX2NoaXBzZXRzWzBdOyBzZXRzLT5kZXZpY2U7IHNldHMrKykgewogCQlob3N0ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwgc2V0cy0+ZGV2aWNlLCBOVUxMKTsKIAkJaWYgKGhvc3QgIT0gTlVMTCkgewpAQCAtOTk0LDEyICs4MTcsMTEgQEAKIAlpZiAoY2hpcHNldCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXBvcnQgPSAqY2hpcHNldC0+aW5mbzsKLQlwb3J0LnByaXZhdGVfZGF0YSA9IGNoaXBzZXQ7CisJcHBpWzBdID0gY2hpcHNldC0+aW5mbzsKIAogCXNpc19maXh1cChwZGV2LCBjaGlwc2V0KTsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnNpc19zaHQsIGNoaXBzZXQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwppbmRleCA4MWVmMjA3Li43MGQ5NGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCkBAIC02MCwxMyArNjAsNyBAQAogCiAJaWYgKGFwLT5wb3J0X25vICYmICFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmc2w4MmMxMDVfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwotfQotCi0KLXN0YXRpYyB2b2lkIHNsODJjMTA1X2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIHNsODJjMTA1X3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gYXRhX3NmZl9wcmVyZXNldChsaW5rLCBkZWFkbGluZSk7CiB9CiAKIApAQCAtMjM1LDU1ICsyMjksMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2w4MmMxMDVfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2w4MmMxMDVfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9tb2RlCT0gc2w4MmMxMDVfc2V0X3Bpb21vZGUsCi0JLm1vZGVfZmlsdGVyCT0gYXRhX3BjaV9kZWZhdWx0X2ZpbHRlciwKLQotCS50Zl9sb2FkCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzIAk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmZyZWV6ZQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCT0gc2w4MmMxMDVfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAorCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLnFjX2RlZmVyCT0gc2w4MmMxMDVfcWNfZGVmZXIsCiAJLmJtZG1hX3N0YXJ0IAk9IHNsODJjMTA1X2JtZG1hX3N0YXJ0LAogCS5ibWRtYV9zdG9wCT0gc2w4MmMxMDVfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfZGVmZXIJPSBzbDgyYzEwNV9xY19kZWZlciwKLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKKwkuc2V0X3Bpb21vZGUJPSBzbDgyYzEwNV9zZXRfcGlvbW9kZSwKKwkucHJlcmVzZXQJPSBzbDgyYzEwNV9wcmVfcmVzZXQsCiB9OwogCiAvKioKQEAgLTMyNywxNCArMjgzLDEyIEBACiBzdGF0aWMgaW50IHNsODJjMTA1X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19kbWEgPSB7Ci0JCS5zaHQgPSAmc2w4MmMxMDVfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCiAJCS5wb3J0X29wcyA9ICZzbDgyYzEwNV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fZWFybHkgPSB7Ci0JCS5zaHQgPSAmc2w4MmMxMDVfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkucG9ydF9vcHMgPSAmc2w4MmMxMDVfcG9ydF9vcHMKQEAgLTM0NCw2ICsyOTgsMTEgQEAKIAkJCQkJICAgICAgIE5VTEwgfTsKIAl1MzIgdmFsOwogCWludCByZXY7CisJaW50IHJjOworCisJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCXJldiA9IHNsODJjMTA1X2JyaWRnZV9yZXZpc2lvbihkZXYpOwogCkBAIC0zNTgsNyArMzE3LDcgQEAKIAl2YWwgfD0gQ1RSTF9QMEVOIHwgQ1RSTF9QMEYxNiB8IENUUkxfUDFGMTY7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDAsIHZhbCk7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2w4MmMxMDVfc2h0LCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNsODJjMTA1W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCmluZGV4IDQwM2VhZmMuLmIxODEyNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCkBAIC02NiwxNiArNjYsMTEgQEAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZ0cmlmbGV4X2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOworCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAogCiAKLXN0YXRpYyB2b2lkIHRyaWZsZXhfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgdHJpZmxleF9wcmVyZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKLX0KLQogLyoqCiAgKgl0cmlmbGV4X2xvYWRfdGltaW5nCQktCXRpbWluZyBjb25maWd1cmF0aW9uCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKQEAgLTE4MCw2MCArMTc1LDIxIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHRyaWZsZXhfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdHJpZmxleF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb21vZGUJPSB0cmlmbGV4X3NldF9waW9tb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IHRyaWZsZXhfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAorCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAJLmJtZG1hX3N0YXJ0IAk9IHRyaWZsZXhfYm1kbWFfc3RhcnQsCiAJLmJtZG1hX3N0b3AJPSB0cmlmbGV4X2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cyAJPSBhdGFfYm1kbWFfc3RhdHVzLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCi0JLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJPSBhdGFfc2ZmX3BvcnRfc3RhcnQsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCisJLnNldF9waW9tb2RlCT0gdHJpZmxleF9zZXRfcGlvbW9kZSwKKwkucHJlcmVzZXQJPSB0cmlmbGV4X3ByZXJlc2V0LAogfTsKIAogc3RhdGljIGludCB0cmlmbGV4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKLQkJLnNodCA9ICZ0cmlmbGV4X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtMjQ1LDcgKzIwMSw3IEBACiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmdHJpZmxleF9zaHQsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHJpZmxleFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKaW5kZXggZDExOWE2OC4uZDQ4NDA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCkBAIC0yMTAsMjMgKzIxMCwxMSBAQAogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOworCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAogCiAvKioKLSAqCXZpYV9lcnJvcl9oYW5kbGVyCQktCXJlc2V0IGZvciBWSUEgY2hpcHMKLSAqCUBhcDogQVRBIHBvcnQKLSAqCi0gKglIYW5kbGUgdGhlIHJlc2V0IGNhbGxiYWNrIGZvciB0aGUgbGF0ZXIgY2hpcHMgd2l0aCBjYWJsZSBkZXRlY3QKLSAqLwotCi1zdGF0aWMgdm9pZCB2aWFfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgdmlhX3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKLX0KLQotLyoqCiAgKgl2aWFfZG9fc2V0X21vZGUJLQlzZXQgaW5pdGlhbCBQSU8gbW9kZSBkYXRhCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKICAqCUBhZGV2OiBBVEEgZGV2aWNlCkBAIC0zMzUsODkgKzMyMywyMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB2aWFfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdmlhX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IHZpYV9jYWJsZV9kZXRlY3QsCiAJLnNldF9waW9tb2RlCT0gdmlhX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHZpYV9zZXRfZG1hbW9kZSwKLQkubW9kZV9maWx0ZXIJPSBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyLAotCi0JLnRmX2xvYWQJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMgCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdCAJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuZnJlZXplCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJPSB2aWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQgPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAk9IHZpYV9jYWJsZV9kZXRlY3QsCi0KLQkuYm1kbWFfc2V0dXAgCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzIAk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQotCS5kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkucHJlcmVzZXQJPSB2aWFfcHJlX3Jlc2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZpYV9wb3J0X29wc19ub2lycSA9IHsKLQkuc2V0X3Bpb21vZGUJPSB2aWFfc2V0X3Bpb21vZGUsCi0JLnNldF9kbWFtb2RlCT0gdmlhX3NldF9kbWFtb2RlLAotCS5tb2RlX2ZpbHRlcgk9IGF0YV9wY2lfZGVmYXVsdF9maWx0ZXIsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IHZpYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CT0gdmlhX2NhYmxlX2RldGVjdCwKLQotCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMgCT0gYXRhX2JtZG1hX3N0YXR1cywKLQotCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCi0JLmRhdGFfeGZlcgk9IGF0YV9kYXRhX3hmZXJfbm9pcnEsCi0KLQkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LAotCS5pcnFfY2xlYXIJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCT0gYXRhX2lycV9vbiwKLQotCS5wb3J0X3N0YXJ0CT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAorCS5pbmhlcml0cwk9ICZ2aWFfcG9ydF9vcHMsCisJLnNmZl9kYXRhX3hmZXIJPSBhdGFfc2ZmX2RhdGFfeGZlcl9ub2lycSwKIH07CiAKIC8qKgpAQCAtNDY3LDcgKzM4Niw2IEBACiB7CiAJLyogRWFybHkgVklBIHdpdGhvdXQgVURNQSBzdXBwb3J0ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV9td2RtYV9pbmZvID0gewotCQkuc2h0ID0gJnZpYV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKQEAgLTQ3NSw3ICszOTMsNiBAQAogCX07CiAJLyogRGl0dG8gd2l0aCBJUlEgbWFza2luZyByZXF1aXJlZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mb19ib3JrZWQgPSB7Ci0JCS5zaHQgPSAmdmlhX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtNDgzLDcgKzQwMCw2IEBACiAJfTsKIAkvKiBWSUEgVURNQSAzMyBkZXZpY2VzIChhbmQgYm9ya2VkIDY2KSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTMzX2luZm8gPSB7Ci0JCS5zaHQgPSAmdmlhX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtNDkyLDcgKzQwOCw2IEBACiAJfTsKIAkvKiBWSUEgVURNQSA2NiBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hNjZfaW5mbyA9IHsKLQkJLnNodCA9ICZ2aWFfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSAweDFmLAogCQkubXdkbWFfbWFzayA9IDB4MDcsCkBAIC01MDEsNyArNDE2LDYgQEAKIAl9OwogCS8qIFZJQSBVRE1BIDEwMCBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTAwX2luZm8gPSB7Ci0JCS5zaHQgPSAmdmlhX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LApAQCAtNTEwLDI0ICs0MjQsMjcgQEAKIAl9OwogCS8qIFVETUExMzMgd2l0aCBiYWQgQVNUIChBbGwgY3VycmVudCAxMzMpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7Ci0JCS5zaHQgPSAmdmlhX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAkvKiBGSVhNRTogc2hvdWxkIGNoZWNrIG5vcnRoIGJyaWRnZSAqLwogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKLQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB0eXBlOwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJnR5cGUsIE5VTEwgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7IE5VTEwsIE5VTEwgfTsKIAlzdHJ1Y3QgcGNpX2RldiAqaXNhID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgdmlhX2lzYV9icmlkZ2UgKmNvbmZpZzsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAl1OCBlbmFibGU7CiAJdTMyIHRpbWluZzsKKwlpbnQgcmM7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKKwlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwogCS8qIFRvIGZpbmQgb3V0IGhvdyB0aGUgSURFIHdpbGwgYmVoYXZlIGFuZCB3aGF0IGZlYXR1cmVzIHdlCiAJICAgYWN0dWFsbHkgaGF2ZSB0byBsb29rIGF0IHRoZSBicmlkZ2Ugbm90IHRoZSBJREUgY29udHJvbGxlciAqLwogCWZvciAoY29uZmlnID0gdmlhX2lzYV9icmlkZ2VzOyBjb25maWctPmlkOyBjb25maWcrKykKQEAgLTU2MSwyNSArNDc4LDI1IEBACiAJc3dpdGNoKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgewogCQljYXNlIFZJQV9VRE1BX05PTkU6CiAJCQlpZiAoY29uZmlnLT5mbGFncyAmIFZJQV9OT19VTk1BU0spCi0JCQkJdHlwZSA9IHZpYV9td2RtYV9pbmZvX2JvcmtlZDsKKwkJCQlwcGlbMF0gPSAmdmlhX213ZG1hX2luZm9fYm9ya2VkOwogCQkJZWxzZQotCQkJCXR5cGUgPSB2aWFfbXdkbWFfaW5mbzsKKwkJCQlwcGlbMF0gPSAmdmlhX213ZG1hX2luZm87CiAJCQlicmVhazsKIAkJY2FzZSBWSUFfVURNQV8zMzoKLQkJCXR5cGUgPSB2aWFfdWRtYTMzX2luZm87CisJCQlwcGlbMF0gPSAmdmlhX3VkbWEzM19pbmZvOwogCQkJYnJlYWs7CiAJCWNhc2UgVklBX1VETUFfNjY6Ci0JCQl0eXBlID0gdmlhX3VkbWE2Nl9pbmZvOworCQkJcHBpWzBdID0gJnZpYV91ZG1hNjZfaW5mbzsKIAkJCS8qIFRoZSA2NiBNSHogZGV2aWNlcyByZXF1aXJlIHdlIGVuYWJsZSB0aGUgY2xvY2sgKi8KIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDUwLCAmdGltaW5nKTsKIAkJCXRpbWluZyB8PSAweDgwMDA4OwogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDUwLCB0aW1pbmcpOwogCQkJYnJlYWs7CiAJCWNhc2UgVklBX1VETUFfMTAwOgotCQkJdHlwZSA9IHZpYV91ZG1hMTAwX2luZm87CisJCQlwcGlbMF0gPSAmdmlhX3VkbWExMDBfaW5mbzsKIAkJCWJyZWFrOwogCQljYXNlIFZJQV9VRE1BXzEzMzoKLQkJCXR5cGUgPSB2aWFfdWRtYTEzM19pbmZvOworCQkJcHBpWzBdID0gJnZpYV91ZG1hMTMzX2luZm87CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVdBUk5fT04oMSk7CkBAIC01OTQsOSArNTExLDcgQEAKIAl9CiAKIAkvKiBXZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBkZXZpY2UgdHlwZSwgbm93IGZpcmUgaXQgdXAgKi8KLQl0eXBlLnByaXZhdGVfZGF0YSA9ICh2b2lkICopY29uZmlnOwotCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKKwlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUocGRldiwgcHBpLCAmdmlhX3NodCwgKHZvaWQgKiljb25maWcpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC02MTUsNiArNTMwLDExIEBACiAJdTMyIHRpbWluZzsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAJY29uc3Qgc3RydWN0IHZpYV9pc2FfYnJpZGdlICpjb25maWcgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJaW50IHJjOworCisJcmMgPSBhdGFfcGNpX2RldmljZV9kb19yZXN1bWUocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKIAl2aWFfY29uZmlnX2ZpZm8ocGRldiwgY29uZmlnLT5mbGFncyk7CiAKQEAgLTYzMCw3ICs1NTAsOSBAQAogCQl0aW1pbmcgJj0gfjB4ODAwMDg7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg1MCwgdGltaW5nKTsKIAl9Ci0JcmV0dXJuIGF0YV9wY2lfZGV2aWNlX3Jlc3VtZShwZGV2KTsKKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCmluZGV4IDk5YzkyZWQuLjZlNTJhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCkBAIC0xMTYsNTMgKzExNiwyMCBAQAogCQkJYnVmbGVuICs9IDQgLSBzbG9wOwogCQl9CiAJfSBlbHNlCi0JCWJ1ZmxlbiA9IGF0YV9kYXRhX3hmZXIoZGV2LCBidWYsIGJ1ZmxlbiwgcncpOworCQlidWZsZW4gPSBhdGFfc2ZmX2RhdGFfeGZlcihkZXYsIGJ1ZiwgYnVmbGVuLCBydyk7CiAKIAlyZXR1cm4gYnVmbGVuOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB3aW5ib25kX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB3aW5ib25kX3BvcnRfb3BzID0gewotCS5zZXRfcGlvbW9kZQk9IHdpbmJvbmRfc2V0X3Bpb21vZGUsCi0KLQkudGZfbG9hZAk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cyAJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0IAk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQotCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZCA9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKKwkuaW5oZXJpdHMJPSAmYXRhX3NmZl9wb3J0X29wcywKKwkuc2ZmX2RhdGFfeGZlcgk9IHdpbmJvbmRfZGF0YV94ZmVyLAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAotCi0JLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0KLQkuZGF0YV94ZmVyCT0gd2luYm9uZF9kYXRhX3hmZXIsCi0KLQkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAk9IGF0YV9zZmZfcG9ydF9zdGFydCwKKwkuc2V0X3Bpb21vZGUJPSB3aW5ib25kX3NldF9waW9tb2RlLAogfTsKIAogLyoqCkBAIC0yMzEsNyArMTk4LDcgQEAKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGNtZF9hZGRyOwogCQlhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0gY3RsX2FkZHI7CiAJCWFwLT5pb2FkZHIuY3RsX2FkZHIgPSBjdGxfYWRkcjsKLQkJYXRhX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CisJCWF0YV9zZmZfc3RkX3BvcnRzKCZhcC0+aW9hZGRyKTsKIAogCQkvKiBob29rIGluIGEgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBwZXIgY2hhbm5lbCAqLwogCQlob3N0LT5wcml2YXRlX2RhdGEgPSAmd2luYm9uZF9kYXRhW25yX3dpbmJvbmRfaG9zdF07CkBAIC0yMzksNyArMjA2LDcgQEAKIAkJd2luYm9uZF9kYXRhW25yX3dpbmJvbmRfaG9zdF0ucGxhdGZvcm1fZGV2ID0gcGRldjsKIAogCQkvKiBhY3RpdmF0ZSAqLwotCQlyYyA9IGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIDE0ICsgaSwgYXRhX2ludGVycnVwdCwgMCwKKwkJcmMgPSBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCAxNCArIGksIGF0YV9zZmZfaW50ZXJydXB0LCAwLAogCQkJCSAgICAgICAmd2luYm9uZF9zaHQpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycl91bnJlZ2lzdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGRjX2FkbWEuYyBiL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKaW5kZXggOGUxYjdlOS4uYmU1MzU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGRjX2FkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCkBAIC0xMzEsNTYgKzEzMSwzMyBAQAogc3RhdGljIGludCBhZG1hX2F0YV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIHN0YXRpYyBpbnQgYWRtYV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwotc3RhdGljIHZvaWQgYWRtYV9ob3N0X3N0b3Aoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKIHN0YXRpYyB2b2lkIGFkbWFfcG9ydF9zdG9wKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWRtYV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHVuc2lnbmVkIGludCBhZG1hX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIGludCBhZG1hX2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLXN0YXRpYyB2b2lkIGFkbWFfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLXN0YXRpYyB1OCBhZG1hX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIGFkbWFfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWRtYV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBhZG1hX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1zdGF0aWMgdm9pZCBhZG1hX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IGFkbWFfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYWRtYV9hdGFfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCisJQVRBX0JBU0VfU0hUKERSVl9OQU1FKSwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAogCS5kbWFfYm91bmRhcnkJCT0gQURNQV9ETUFfQk9VTkRBUlksCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFkbWFfYXRhX29wcyA9IHsKLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhZG1hX2F0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCiAJLmNoZWNrX2F0YXBpX2RtYQk9IGFkbWFfY2hlY2tfYXRhcGlfZG1hLAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKIAkucWNfcHJlcAkJPSBhZG1hX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFkbWFfcWNfaXNzdWUsCisKIAkuZnJlZXplCQkJPSBhZG1hX2ZyZWV6ZSwKIAkudGhhdwkJCT0gYWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGFkbWFfZXJyb3JfaGFuZGxlciwKLQkuaXJxX2NsZWFyCQk9IGFkbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCisJLnByZXJlc2V0CQk9IGFkbWFfcHJlcmVzZXQsCisKIAkucG9ydF9zdGFydAkJPSBhZG1hX3BvcnRfc3RhcnQsCiAJLnBvcnRfc3RvcAkJPSBhZG1hX3BvcnRfc3RvcCwKLQkuaG9zdF9zdG9wCQk9IGFkbWFfaG9zdF9zdG9wLAotCS5ibWRtYV9zdG9wCQk9IGFkbWFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGFkbWFfYm1kbWFfc3RhdHVzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGFkbWFfcG9ydF9pbmZvW10gPSB7CkBAIC0yMTMsMjEgKzE5MCw2IEBACiAJcmV0dXJuIDE7CS8qIEFUQVBJIERNQSBub3QgeWV0IHN1cHBvcnRlZCAqLwogfQogCi1zdGF0aWMgdm9pZCBhZG1hX2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQkvKiBub3RoaW5nICovCi19Ci0KLXN0YXRpYyB1OCBhZG1hX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhZG1hX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCS8qIG5vdGhpbmcgKi8KLX0KLQogc3RhdGljIHZvaWQgYWRtYV9yZXNldF9lbmdpbmUoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl2b2lkIF9faW9tZW0gKmNoYW4gPSBBRE1BX1BPUlRfUkVHUyhhcCk7CkBAIC0yNDYsNyArMjA4LDcgQEAKIAogCS8qIG1hc2svY2xlYXIgQVRBIGludGVycnVwdHMgKi8KIAl3cml0ZWIoQVRBX05JRU4sIGFwLT5pb2FkZHIuY3RsX2FkZHIpOwotCWF0YV9jaGVja19zdGF0dXMoYXApOworCWF0YV9zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAogCS8qIHJlc2V0IHRoZSBBRE1BIGVuZ2luZSAqLwogCWFkbWFfcmVzZXRfZW5naW5lKGFwKTsKQEAgLTI4MSw3ICsyNDMsNyBAQAogCiAJLyogbWFzay9jbGVhciBBVEEgaW50ZXJydXB0cyAqLwogCXdyaXRlYihBVEFfTklFTiwgYXAtPmlvYWRkci5jdGxfYWRkcik7Ci0JYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJYXRhX3NmZl9jaGVja19zdGF0dXMoYXApOwogCiAJLyogcmVzZXQgQURNQSB0byBpZGxlIHN0YXRlICovCiAJd3JpdGV3KGFQSU9NRDQgfCBhTklFTiB8IGFSU1RBRE0sIGNoYW4gKyBBRE1BX0NPTlRST0wpOwpAQCAtMzA0LDEzICsyNjYsNyBAQAogCQlwcC0+c3RhdGUgPSBhZG1hX3N0YXRlX21taW87CiAJYWRtYV9yZWluaXRfZW5naW5lKGFwKTsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKLX0KLQotc3RhdGljIHZvaWQgYWRtYV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2RvX2VoKGFwLCBhZG1hX3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwKLQkJICBhdGFfc3RkX3Bvc3RyZXNldCk7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOwogfQogCiBzdGF0aWMgaW50IGFkbWFfZmlsbF9zZyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQpAQCAtMzY2LDcgKzMyMiw3IEBACiAKIAlhZG1hX2VudGVyX3JlZ19tb2RlKHFjLT5hcCk7CiAJaWYgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9ETUEpIHsKLQkJYXRhX3FjX3ByZXAocWMpOworCQlhdGFfc2ZmX3FjX3ByZXAocWMpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NjUsNyArNDIxLDcgQEAKIAl9CiAKIAlwcC0+c3RhdGUgPSBhZG1hX3N0YXRlX21taW87Ci0JcmV0dXJuIGF0YV9xY19pc3N1ZV9wcm90KHFjKTsKKwlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFkbWFfaW50cl9wa3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0KQpAQCAtNTM2LDcgKzQ5Miw3IEBACiAJCQlpZiAocWMgJiYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKSkgewogCiAJCQkJLyogY2hlY2sgbWFpbiBzdGF0dXMsIGNsZWFyaW5nIElOVFJRICovCi0JCQkJdTggc3RhdHVzID0gYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJCQkJdTggc3RhdHVzID0gYXRhX3NmZl9jaGVja19zdGF0dXMoYXApOwogCQkJCWlmICgoc3RhdHVzICYgQVRBX0JVU1kpKQogCQkJCQljb250aW51ZTsKIAkJCQlEUFJJTlRLKCJhdGEldTogcHJvdG9jb2wgJWQgKGRldl9zdGF0IDB4JVgpXG4iLApAQCAtNjMzLDE0ICs1ODksNiBAQAogCWFkbWFfcmVzZXRfZW5naW5lKGFwKTsKIH0KIAotc3RhdGljIHZvaWQgYWRtYV9ob3N0X3N0b3Aoc3RydWN0IGF0YV9ob3N0ICpob3N0KQotewotCXVuc2lnbmVkIGludCBwb3J0X25vOwotCi0JZm9yIChwb3J0X25vID0gMDsgcG9ydF9ubyA8IEFETUFfUE9SVFM7ICsrcG9ydF9ubykKLQkJYWRtYV9yZXNldF9lbmdpbmUoaG9zdC0+cG9ydHNbcG9ydF9ub10pOwotfQotCiBzdGF0aWMgdm9pZCBhZG1hX2hvc3RfaW5pdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjaGlwX2lkKQogewogCXVuc2lnbmVkIGludCBwb3J0X25vOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKaW5kZXggZWZjYjY2YjYuLmZkZGQzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwpAQCAtMzUsNyArMzUsNiBAQAogCVNBVEFfRlNMX0hPU1RfRkxBR1MJPSAoQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19ETUEgfAogCQkJCUFUQV9GTEFHX05DUSksCi0JU0FUQV9GU0xfSE9TVF9MRkxBR1MJPSBBVEFfTEZMQUdfU0tJUF9EMkhfQlNZLAogCiAJU0FUQV9GU0xfTUFYX0NNRFMJPSBTQVRBX0ZTTF9RVUVVRV9ERVBUSCwKIAlTQVRBX0ZTTF9DTURfSERSX1NJWkUJPSAxNiwJLyogNCBEV09SRFMgKi8KQEAgLTI0NSwxNyArMjQ0LDYgQEAKIAlkbWFfYWRkcl90IGNtZHNsb3RfcGFkZHI7CiAJc3RydWN0IGNvbW1hbmRfZGVzYyAqY21kZW50cnk7CiAJZG1hX2FkZHJfdCBjbWRlbnRyeV9wYWRkcjsKLQotCS8qCi0JICogU0FUQSBGU0wgY29udHJvbGxlciBoYXMgYSBTdGF0dXMgRklTIHdoaWNoIHNob3VsZCBjb250YWluIHRoZQotCSAqIHJlY2VpdmVkIEQySCBGSVMgJiB0YXNrZmlsZSByZWdpc3RlcnMuIFRoaXMgU0ZJUyBpcyBwcmVzZW50IGluCi0JICogdGhlIGNvbW1hbmQgZGVzY3JpcHRvciwgYW5kIHRvIGhhdmUgYSByZWFkeSByZWZlcmVuY2UgdG8gaXQsCi0JICogd2UgYXJlIGNhY2hpbmcgaXQgaGVyZSwgcXVpdGUgc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgaW4gSC9XIG9uCi0JICogQUhDSSBjb21wbGlhbnQgZGV2aWNlcyBieSBjb3B5aW5nIHRhc2tmaWxlIGZpZWxkcyB0byBhIDMyLWJpdAotCSAqIHJlZ2lzdGVyLgotCSAqLwotCi0Jc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKIH07CiAKIC8qCkBAIC0zMzUsNyArMzIzLDcgQEAKIAlkbWFfYWRkcl90IGluZGlyZWN0X2V4dF9zZWdtZW50X3BhZGRyOwogCXVuc2lnbmVkIGludCBzaTsKIAotCVZQUklOVEsoIlNBVEEgRlNMIDogY2QgPSAweCV4LCBwcmQgPSAweCV4XG4iLCBjbWRfZGVzYywgcHJkKTsKKwlWUFJJTlRLKCJTQVRBIEZTTCA6IGNkID0gMHglcCwgcHJkID0gMHglcFxuIiwgY21kX2Rlc2MsIHByZCk7CiAKIAlpbmRpcmVjdF9leHRfc2VnbWVudF9wYWRkciA9IGNtZF9kZXNjX3BhZGRyICsKIAkgICAgU0FUQV9GU0xfQ01EX0RFU0NfT0ZGU0VUX1RPX1BSRFQgKyBTQVRBX0ZTTF9NQVhfUFJEX0RJUkVDVCAqIDE2OwpAQCAtNDU5LDExICs0NDcsMjYgQEAKIAlWUFJJTlRLKCJDRT0weCV4LCBERT0weCV4LCBDQz0weCV4LCBDbWRTdGF0ID0gMHgleFxuIiwKIAkJaW9yZWFkMzIoQ0UgKyBoY3JfYmFzZSksCiAJCWlvcmVhZDMyKERFICsgaGNyX2Jhc2UpLAotCQlpb3JlYWQzMihDQyArIGhjcl9iYXNlKSwgaW9yZWFkMzIoQ09NTUFORFNUQVQgKyBjc3JfYmFzZSkpOworCQlpb3JlYWQzMihDQyArIGhjcl9iYXNlKSwKKwkJaW9yZWFkMzIoQ09NTUFORFNUQVQgKyBob3N0X3ByaXYtPmNzcl9iYXNlKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGJvb2wgc2F0YV9mc2xfcWNfZmlsbF9ydGYoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3Qgc2F0YV9mc2xfcG9ydF9wcml2ICpwcCA9IHFjLT5hcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IHFjLT5hcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNyX2Jhc2UgPSBob3N0X3ByaXYtPmhjcl9iYXNlOworCXVuc2lnbmVkIGludCB0YWcgPSBzYXRhX2ZzbF90YWcocWMtPnRhZywgaGNyX2Jhc2UpOworCXN0cnVjdCBjb21tYW5kX2Rlc2MgKmNkOworCisJY2QgPSBwcC0+Y21kZW50cnkgKyB0YWc7CisKKwlhdGFfdGZfZnJvbV9maXMoY2QtPnNmaXMsICZxYy0+cmVzdWx0X3RmKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGludCBzYXRhX2ZzbF9zY3Jfd3JpdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZ19pbiwKIAkJCSAgICAgICB1MzIgdmFsKQogewpAQCAtNTIyLDcgKzUyNSw4IEBACiAJCWlvcmVhZDMyKENRICsgaGNyX2Jhc2UpLAogCQlpb3JlYWQzMihDQSArIGhjcl9iYXNlKSwKIAkJaW9yZWFkMzIoQ0UgKyBoY3JfYmFzZSksIGlvcmVhZDMyKERFICsgaGNyX2Jhc2UpKTsKLQlWUFJJTlRLKCJDbWRTdGF0ID0gMHgleFxuIiwgaW9yZWFkMzIoY3NyX2Jhc2UgKyBDT01NQU5EU1RBVCkpOworCVZQUklOVEsoIkNtZFN0YXQgPSAweCV4XG4iLAorCQlpb3JlYWQzMihob3N0X3ByaXYtPmNzcl9iYXNlICsgQ09NTUFORFNUQVQpKTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgY29udHJvbGxlci9wb3J0ICovCiAJdGVtcCA9IGlvcmVhZDMyKGhjcl9iYXNlICsgSENPTlRST0wpOwpAQCAtNTU0LDM4ICs1NTgsNiBAQAogCQlpb3JlYWQzMihoY3JfYmFzZSArIEhDT05UUk9MKSwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIU1RBVFVTKSk7CiB9CiAKLS8qCi0gKiBOT1RFIDogMXN0IEQySCBGSVMgZnJvbSBkZXZpY2UgZG9lcyBub3QgdXBkYXRlIHNmaXMgaW4gY29tbWFuZCBkZXNjcmlwdG9yLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2F0YV9mc2xfY2FjaGVfdGFza2ZpbGVfZnJvbV9kMmhfZmlzKHN0cnVjdCBhdGFfcXVldWVkX2NtZAotCQkJCQkJCSpxYywKLQkJCQkJCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCBzYXRhX2ZzbF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgX19pb21lbSAqaGNyX2Jhc2UgPSBob3N0X3ByaXYtPmhjcl9iYXNlOwotCXVuc2lnbmVkIGludCB0YWcgPSBzYXRhX2ZzbF90YWcocWMtPnRhZywgaGNyX2Jhc2UpOwotCXN0cnVjdCBjb21tYW5kX2Rlc2MgKmNkOwotCi0JY2QgPSBwcC0+Y21kZW50cnkgKyB0YWc7Ci0KLQlhdGFfdGZfZnJvbV9maXMoY2QtPnNmaXMsICZwcC0+dGYpOwotfQotCi1zdGF0aWMgdTggc2F0YV9mc2xfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IHNhdGFfZnNsX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHBwLT50Zi5jb21tYW5kOwotfQotCi1zdGF0aWMgdm9pZCBzYXRhX2ZzbF90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXN0cnVjdCBzYXRhX2ZzbF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKLQotCSp0ZiA9IHBwLT50ZjsKLX0KLQogc3RhdGljIGludCBzYXRhX2ZzbF9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYXAtPmhvc3QtPmRldjsKQEAgLTYwMSwyMSArNTczLDkgQEAKIAlpZiAoIXBwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qCi0JICogYWxsb2NhdGUgcGVyIGNvbW1hbmQgZG1hIGFsaWdubWVudCBwYWQgYnVmZmVyLCB3aGljaCBpcyB1c2VkCi0JICogaW50ZXJuYWxseSBieSBsaWJBVEEgdG8gZW5zdXJlIHRoYXQgYWxsIHRyYW5zZmVycyBlbmRpbmcgb24KLQkgKiB1bmFsaWduZWQgYm91bmRhcmllcyBhcmUgcGFkZGVkLCB0byBhbGlnbiBvbiBEd29yZCBib3VuZGFyaWVzCi0JICovCi0JcmV0dmFsID0gYXRhX3BhZF9hbGxvYyhhcCwgZGV2KTsKLQlpZiAocmV0dmFsKSB7Ci0JCWtmcmVlKHBwKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KIAltZW0gPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBTQVRBX0ZTTF9QT1JUX1BSSVZfRE1BX1NaLCAmbWVtX2RtYSwKIAkJCQkgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZW0pIHsKLQkJYXRhX3BhZF9mcmVlKGFwLCBkZXYpOwogCQlrZnJlZShwcCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTY5NCw3ICs2NTQsNiBAQAogCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgU0FUQV9GU0xfUE9SVF9QUklWX0RNQV9TWiwKIAkJCSAgcHAtPmNtZHNsb3QsIHBwLT5jbWRzbG90X3BhZGRyKTsKIAotCWF0YV9wYWRfZnJlZShhcCwgZGV2KTsKIAlrZnJlZShwcCk7CiB9CiAKQEAgLTcxOSw2ICs2NzgsMTUgQEAKIAlyZXR1cm4gYXRhX2Rldl9jbGFzc2lmeSgmdGYpOwogfQogCitzdGF0aWMgaW50IHNhdGFfZnNsX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGlua2UgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJLyogRklYTUU6IE5ldmVyIHNraXAgc29mdHJlc2V0LCBzYXRhX2ZzbF9zb2Z0cmVzZXQoKSBpcworCSAqIGNvbWJpbmF0aW9uIG9mIHNvZnQgYW5kIGhhcmQgcmVzZXRzLiAgc2F0YV9mc2xfc29mdHJlc2V0KCkKKwkgKiBuZWVkcyB0byBiZSBzcGxpdHRlZCBpbnRvIHNvZnQgYW5kIGhhcmQgcmVzZXRzLgorCSAqLworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNhdGFfZnNsX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewpAQCAtOTI0LDE2ICs4OTIsNiBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgdm9pZCBzYXRhX2ZzbF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0KLQlEUFJJTlRLKCJpbiB4eF9lcnJvcl9oYW5kbGVyXG4iKTsKLQotCS8qIHBlcmZvcm0gcmVjb3ZlcnkgKi8KLQlhdGFfZG9fZWgoYXAsIGF0YV9zdGRfcHJlcmVzZXQsIHNhdGFfZnNsX3NvZnRyZXNldCwgc2F0YV9zdGRfaGFyZHJlc2V0LAotCQkgIGF0YV9zdGRfcG9zdHJlc2V0KTsKLX0KLQogc3RhdGljIHZvaWQgc2F0YV9mc2xfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlpZiAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19GQUlMRUQpCkBAIC05NDUsMTEgKzkwMyw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzYXRhX2ZzbF9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQkvKiB1bnVzZWQgKi8KLX0KLQogc3RhdGljIHZvaWQgc2F0YV9mc2xfZXJyb3JfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBhdGFfbGluayAqbGluayA9ICZhcC0+bGluazsKQEAgLTEwMDcsNyArOTYwLDcgQEAKIAkvKiBoYW5kbGUgZmF0YWwgZXJyb3JzICovCiAJaWYgKGhzdGF0dXMgJiBGQVRBTF9FUlJPUl9ERUNPREUpIHsKIAkJZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7Ci0JCWFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOworCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQkvKiBob3cgd2lsbCBmYXRhbCBlcnJvciBpbnRlcnJ1cHRzIGJlIGNvbXBsZXRlZCA/PyAqLwogCQlmcmVlemUgPSAxOwogCX0KQEAgLTEwMjQsMTAgKzk3Nyw5IEBACiAJLyogcmVjb3JkIGVycm9yIGluZm8gKi8KIAlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgbGluay0+YWN0aXZlX3RhZyk7CiAKLQlpZiAocWMpIHsKLQkJc2F0YV9mc2xfY2FjaGVfdGFza2ZpbGVfZnJvbV9kMmhfZmlzKHFjLCBxYy0+YXApOworCWlmIChxYykKIAkJcWMtPmVycl9tYXNrIHw9IGVycl9tYXNrOwotCX0gZWxzZQorCWVsc2UKIAkJZWhpLT5lcnJfbWFzayB8PSBlcnJfbWFzazsKIAogCWVoaS0+YWN0aW9uIHw9IGFjdGlvbjsKQEAgLTEwNDAsMTQgKzk5Miw2IEBACiAJCWF0YV9wb3J0X2Fib3J0KGFwKTsKIH0KIAotc3RhdGljIHZvaWQgc2F0YV9mc2xfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlpZiAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19SRVNVTFRfVEYpIHsKLQkJRFBSSU5USygieHhfcWNfY29tcGxldGUgY2FsbGVkXG4iKTsKLQkJc2F0YV9mc2xfY2FjaGVfdGFza2ZpbGVfZnJvbV9kMmhfZmlzKHFjLCBxYy0+YXApOwotCX0KLX0KLQogc3RhdGljIHZvaWQgc2F0YV9mc2xfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGF0YV9saW5rICpsaW5rID0gJmFwLT5saW5rOwpAQCAtMTA4OCwxMCArMTAzMiw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBTQVRBX0ZTTF9RVUVVRV9ERVBUSDsgaSsrKSB7CiAJCQlpZiAocWNfYWN0aXZlICYgKDEgPDwgaSkpIHsKIAkJCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgaSk7Ci0JCQkJaWYgKHFjKSB7Ci0JCQkJCXNhdGFfZnNsX3FjX2NvbXBsZXRlKHFjKTsKKwkJCQlpZiAocWMpCiAJCQkJCWF0YV9xY19jb21wbGV0ZShxYyk7Ci0JCQkJfQogCQkJCURQUklOVEsKIAkJCQkgICAgKCJjb21wbGV0aW5nIG5jcSBjbWQsdGFnPSVkLENDPTB4JXgsQ0E9MHgleFxuIiwKIAkJCQkgICAgIGksIGlvcmVhZDMyKGhjcl9iYXNlICsgQ0MpLApAQCAtMTEwNywxMCArMTA0OSw4IEBACiAJCURQUklOVEsoImNvbXBsZXRpbmcgbm9uLW5jcSBjbWQsIHRhZz0lZCxDQz0weCV4XG4iLAogCQkJbGluay0+YWN0aXZlX3RhZywgaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQykpOwogCi0JCWlmIChxYykgewotCQkJc2F0YV9mc2xfcWNfY29tcGxldGUocWMpOworCQlpZiAocWMpCiAJCQlhdGFfcWNfY29tcGxldGUocWMpOwotCQl9CiAJfSBlbHNlIHsKIAkJLyogU3B1cmlvdXMgSW50ZXJydXB0ISEgKi8KIAkJRFBSSU5USygic3B1cmlvdXMgaW50ZXJydXB0ISEsIENDID0gMHgleFxuIiwKQEAgLTEyMDgsNDEgKzExNDgsMjYgQEAKICAqIHNjc2kgbWlkLWxheWVyIGFuZCBsaWJhdGEgaW50ZXJmYWNlIHN0cnVjdHVyZXMKICAqLwogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2F0YV9mc2xfc2h0ID0gewotCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9ICJzYXRhX2ZzbCIsCi0JLmlvY3RsID0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZCA9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJQVRBX05DUV9TSFQoInNhdGFfZnNsIiksCiAJLmNhbl9xdWV1ZSA9IFNBVEFfRlNMX1FVRVVFX0RFUFRILAotCS50aGlzX2lkID0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUgPSBTQVRBX0ZTTF9NQVhfUFJEX1VTQUJMRSwKLQkuY21kX3Blcl9sdW4gPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZCA9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nID0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lID0gInNhdGFfZnNsIiwKIAkuZG1hX2JvdW5kYXJ5ID0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlID0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95ID0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbSA9IGF0YV9zdGRfYmlvc19wYXJhbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzYXRhX2ZzbF9vcHMgPSB7Ci0JLmNoZWNrX3N0YXR1cyA9IHNhdGFfZnNsX2NoZWNrX3N0YXR1cywKLQkuY2hlY2tfYWx0c3RhdHVzID0gc2F0YV9mc2xfY2hlY2tfc3RhdHVzLAotCS5kZXZfc2VsZWN0ID0gYXRhX25vb3BfZGV2X3NlbGVjdCwKLQotCS50Zl9yZWFkID0gc2F0YV9mc2xfdGZfcmVhZCwKKwkuaW5oZXJpdHMgPSAmc2F0YV9wb3J0X29wcywKIAogCS5xY19wcmVwID0gc2F0YV9mc2xfcWNfcHJlcCwKIAkucWNfaXNzdWUgPSBzYXRhX2ZzbF9xY19pc3N1ZSwKLQkuaXJxX2NsZWFyID0gc2F0YV9mc2xfaXJxX2NsZWFyLAorCS5xY19maWxsX3J0ZiA9IHNhdGFfZnNsX3FjX2ZpbGxfcnRmLAogCiAJLnNjcl9yZWFkID0gc2F0YV9mc2xfc2NyX3JlYWQsCiAJLnNjcl93cml0ZSA9IHNhdGFfZnNsX3Njcl93cml0ZSwKIAogCS5mcmVlemUgPSBzYXRhX2ZzbF9mcmVlemUsCiAJLnRoYXcgPSBzYXRhX2ZzbF90aGF3LAotCS5lcnJvcl9oYW5kbGVyID0gc2F0YV9mc2xfZXJyb3JfaGFuZGxlciwKKwkucHJlcmVzZXQgPSBzYXRhX2ZzbF9wcmVyZXNldCwKKwkuc29mdHJlc2V0ID0gc2F0YV9mc2xfc29mdHJlc2V0LAogCS5wb3N0X2ludGVybmFsX2NtZCA9IHNhdGFfZnNsX3Bvc3RfaW50ZXJuYWxfY21kLAogCiAJLnBvcnRfc3RhcnQgPSBzYXRhX2ZzbF9wb3J0X3N0YXJ0LApAQCAtMTI1Miw3ICsxMTc3LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzYXRhX2ZzbF9wb3J0X2luZm9bXSA9IHsKIAl7CiAJIC5mbGFncyA9IFNBVEFfRlNMX0hPU1RfRkxBR1MsCi0JIC5saW5rX2ZsYWdzID0gU0FUQV9GU0xfSE9TVF9MRkxBR1MsCiAJIC5waW9fbWFzayA9IDB4MWYsCS8qIHBpbyAwLTQgKi8KIAkgLnVkbWFfbWFzayA9IDB4N2YsCS8qIHVkbWEgMC02ICovCiAJIC5wb3J0X29wcyA9ICZzYXRhX2ZzbF9vcHMsCkBAIC0xMjY3LDcgKzExOTEsNiBAQAogCXZvaWQgX19pb21lbSAqc3NyX2Jhc2UgPSBOVUxMOwogCXZvaWQgX19pb21lbSAqY3NyX2Jhc2UgPSBOVUxMOwogCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IE5VTEw7Ci0Jc3RydWN0IHJlc291cmNlICpyOwogCWludCBpcnE7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCkBAIC0xMjc3LDggKzEyMDAsNiBAQAogCWRldl9wcmludGsoS0VSTl9JTkZPLCAmb2ZkZXYtPmRldiwKIAkJICAgIlNhdGEgRlNMIFBsYXRmb3JtL0NTQiBEcml2ZXIgaW5pdFxuIik7CiAKLQlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0KIAloY3JfYmFzZSA9IG9mX2lvbWFwKG9mZGV2LT5ub2RlLCAwKTsKIAlpZiAoIWhjcl9iYXNlKQogCQlnb3RvIGVycm9yX2V4aXRfd2l0aF9jbGVhbnVwOwpAQCAtMTMxMSwxMSArMTIzMiw2IEBACiAJLyogaG9zdC0+aW9tYXAgaXMgbm90IHVzZWQgY3VycmVudGx5ICovCiAJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaG9zdF9wcml2OwogCi0JLyogc2V0dXAgcG9ydChzKSAqLwotCi0JaG9zdC0+cG9ydHNbMF0tPmlvYWRkci5jbWRfYWRkciA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7Ci0JaG9zdC0+cG9ydHNbMF0tPmlvYWRkci5zY3JfYWRkciA9IGhvc3RfcHJpdi0+c3NyX2Jhc2U7Ci0KIAkvKiBpbml0aWFsaXplIGhvc3QgY29udHJvbGxlciAqLwogCXNhdGFfZnNsX2luaXRfY29udHJvbGxlcihob3N0KTsKIApAQCAtMTM1OSwxMCArMTI3NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9zYXRhX21hdGNoW10gPSB7CiAJewotCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1zYXRhIiwKLQl9LAotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktc2F0YSIsCisJCS5jb21wYXRpYmxlID0gImZzbCxwcS1zYXRhIiwKIAl9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwppbmRleCA1OWU2NWVkLi5kMjdiYjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCkBAIC0xMDksMjEgKzEwOSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpbmljX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBzY3JfbWFwW10gPSB7CkBAIC0yMzYsNyArMjIyLDcgQEAKIAl3cml0ZWIocHAtPmNhY2hlZF9wcmRjdGwsIHBvcnRfYmFzZSArIFBPUlRfUFJEX0NUTCk7CiAKIAkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLwotCWFwLT5vcHMtPmV4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CisJYXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CiB9CiAKIHN0YXRpYyB2b2lkIGluaWNfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKQEAgLTI2NiwxMSArMjUyLDYgQEAKIAlyZXR1cm4gQVRBX0RNQV9JTlRSOwogfQogCi1zdGF0aWMgdm9pZCBpbmljX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCS8qIG5vb3AgKi8KLX0KLQogc3RhdGljIHZvaWQgaW5pY19ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfYmFzZSA9IGluaWNfcG9ydF9iYXNlKGFwKTsKQEAgLTI4NiwxNCArMjY3LDE0IEBACiAJCQlhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5saW5rLmFjdGl2ZV90YWcpOwogCiAJCWlmICh1bmxpa2VseSghcWMgfHwgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkpIHsKLQkJCWF0YV9jaGtfc3RhdHVzKGFwKTsJLyogY2xlYXIgQVRBIGludGVycnVwdCAqLworCQkJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7IC8qIGNsZWFyIEFUQSBpbnRlcnJ1cHQgKi8KIAkJCXJldHVybjsKIAkJfQogCi0JCWlmIChsaWtlbHkoYXRhX2hvc3RfaW50cihhcCwgcWMpKSkKKwkJaWYgKGxpa2VseShhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpKSkKIAkJCXJldHVybjsKIAotCQlhdGFfY2hrX3N0YXR1cyhhcCk7CS8qIGNsZWFyIEFUQSBpbnRlcnJ1cHQgKi8KKwkJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7IC8qIGNsZWFyIEFUQSBpbnRlcnJ1cHQgKi8KIAkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJ1bmhhbmRsZWQgIgogCQkJCSJpbnRlcnJ1cHQsIGlycV9zdGF0PSV4XG4iLCBpcnFfc3RhdCk7CiAJCXJldHVybjsKQEAgLTM3MCwxMiArMzUxLDEyIEBACiAJICovCiAJaWYgKHVubGlrZWx5KHFjLT50Zi5jb21tYW5kID09IEFUQV9DTURfSURfQVRBIHx8CiAJCSAgICAgcWMtPnRmLmNvbW1hbmQgPT0gQVRBX0NNRF9JRF9BVEFQSSkpIHsKLQkJdTggc3RhdCA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKKwkJdTggc3RhdCA9IGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOwogCQlpZiAoc3RhdCA9PSAweDdmIHx8IHN0YXQgPT0gMHhmZikKIAkJCXJldHVybiBBQ19FUlJfSFNNOwogCX0KIAotCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgdm9pZCBpbmljX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMzg0LDcgKzM2NSw3IEBACiAKIAlfX2luaWNfc2V0X3BpcnFfbWFzayhhcCwgUElSUV9NQVNLX0ZSRUVaRSk7CiAKLQlhdGFfY2hrX3N0YXR1cyhhcCk7CisJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CiAJd3JpdGViKDB4ZmYsIHBvcnRfYmFzZSArIFBPUlRfSVJRX1NUQVQpOwogCiAJcmVhZGIocG9ydF9iYXNlICsgUE9SVF9JUlFfU1RBVCk7IC8qIGZsdXNoICovCkBAIC0zOTQsNyArMzc1LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfYmFzZSA9IGluaWNfcG9ydF9iYXNlKGFwKTsKIAotCWF0YV9jaGtfc3RhdHVzKGFwKTsKKwlhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAl3cml0ZWIoMHhmZiwgcG9ydF9iYXNlICsgUE9SVF9JUlFfU1RBVCk7CiAKIAlfX2luaWNfc2V0X3BpcnFfbWFzayhhcCwgUElSUV9NQVNLX09USEVSKTsKQEAgLTQzNiwxMCArNDE3LDggQEAKIAlpZiAoYXRhX2xpbmtfb25saW5lKGxpbmspKSB7CiAJCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CiAKLQkJLyogd2FpdCBhIHdoaWxlIGJlZm9yZSBjaGVja2luZyBzdGF0dXMgKi8KLQkJYXRhX3dhaXRfYWZ0ZXJfcmVzZXQoYXAsIGRlYWRsaW5lKTsKLQotCQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7CisJCS8qIHdhaXQgZm9yIGxpbmsgdG8gYmVjb21lIHJlYWR5ICovCisJCXJjID0gYXRhX3NmZl93YWl0X2FmdGVyX3Jlc2V0KGxpbmssIDEsIGRlYWRsaW5lKTsKIAkJLyogbGluayBvY2N1cGllZCwgLUVOT0RFViB0b28gaXMgYW4gZXJyb3IgKi8KIAkJaWYgKHJjKSB7CiAJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLCAiZGV2aWNlIG5vdCByZWFkeSAiCkBAIC00NDcsMTAgKzQyNiw4IEBACiAJCQlyZXR1cm4gcmM7CiAJCX0KIAotCQlhdGFfdGZfcmVhZChhcCwgJnRmKTsKKwkJYXRhX3NmZl90Zl9yZWFkKGFwLCAmdGYpOwogCQkqY2xhc3MgPSBhdGFfZGV2X2NsYXNzaWZ5KCZ0Zik7Ci0JCWlmICgqY2xhc3MgPT0gQVRBX0RFVl9VTktOT1dOKQotCQkJKmNsYXNzID0gQVRBX0RFVl9OT05FOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDcxLDggKzQ0OCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCiAJLyogUElPIGFuZCBETUEgZW5naW5lcyBoYXZlIGJlZW4gc3RvcHBlZCwgcGVyZm9ybSByZWNvdmVyeSAqLwotCWF0YV9kb19laChhcCwgYXRhX3N0ZF9wcmVyZXNldCwgTlVMTCwgaW5pY19oYXJkcmVzZXQsCi0JCSAgYXRhX3N0ZF9wb3N0cmVzZXQpOworCWF0YV9zdGRfZXJyb3JfaGFuZGxlcihhcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaWNfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKQEAgLTU0MSwzNSArNTE3LDI2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpbmljX3BvcnRfb3BzID0gewotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLnNjcl9yZWFkCQk9IGluaWNfc2NyX3JlYWQsCi0JLnNjcl93cml0ZQkJPSBpbmljX3Njcl93cml0ZSwKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCiAKIAkuYm1kbWFfc2V0dXAJCT0gaW5pY19ibWRtYV9zZXR1cCwKIAkuYm1kbWFfc3RhcnQJCT0gaW5pY19ibWRtYV9zdGFydCwKIAkuYm1kbWFfc3RvcAkJPSBpbmljX2JtZG1hX3N0b3AsCiAJLmJtZG1hX3N0YXR1cwkJPSBpbmljX2JtZG1hX3N0YXR1cywKLQotCS5pcnFfY2xlYXIJCT0gaW5pY19pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5xY19wcmVwCSAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gaW5pY19xY19pc3N1ZSwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCiAKIAkuZnJlZXplCQkJPSBpbmljX2ZyZWV6ZSwKIAkudGhhdwkJCT0gaW5pY190aGF3LAorCS5zb2Z0cmVzZXQJCT0gQVRBX09QX05VTEwsCS8qIHNvZnRyZXNldCBpcyBicm9rZW4gKi8KKwkuaGFyZHJlc2V0CQk9IGluaWNfaGFyZHJlc2V0LAogCS5lcnJvcl9oYW5kbGVyCQk9IGluaWNfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBpbmljX3Bvc3RfaW50ZXJuYWxfY21kLAogCS5kZXZfY29uZmlnCQk9IGluaWNfZGV2X2NvbmZpZywKIAotCS5wb3J0X3Jlc3VtZQkJPSBpbmljX3BvcnRfcmVzdW1lLAorCS5zY3JfcmVhZAkJPSBpbmljX3Njcl9yZWFkLAorCS5zY3Jfd3JpdGUJCT0gaW5pY19zY3Jfd3JpdGUsCiAKKwkucG9ydF9yZXN1bWUJCT0gaW5pY19wb3J0X3Jlc3VtZSwKIAkucG9ydF9zdGFydAkJPSBpbmljX3BvcnRfc3RhcnQsCiB9OwogCkBAIC02OTIsNyArNjU5LDcgQEAKIAkJCSgodW5zaWduZWQgbG9uZylpb21hcFsyICogaSArIDFdIHwgQVRBX1BDSV9DVExfT0ZTKTsKIAkJcG9ydC0+c2NyX2FkZHIgPSBpb21hcFtNTUlPX0JBUl0gKyBvZmZzZXQgKyBQT1JUX1NDUjsKIAotCQlhdGFfc3RkX3BvcnRzKHBvcnQpOworCQlhdGFfc2ZmX3N0ZF9wb3J0cyhwb3J0KTsKIAogCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIE1NSU9fQkFSLCAtMSwgIm1taW8iKTsKIAkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBNTUlPX0JBUiwgb2Zmc2V0LCAicG9ydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IDJlY2Q0NGQuLmQ1MmNlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogc2F0YV9tdi5jIC0gTWFydmVsbCBTQVRBIHN1cHBvcnQKICAqCisgKiBDb3B5cmlnaHQgMjAwODogTWFydmVsbCBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA1OiBFTUMgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM5LDcgKzQwLDkgQEAKIAogICA1KSBJbnZlc3RpZ2F0ZSBwcm9ibGVtcyB3aXRoIFBDSSBNZXNzYWdlIFNpZ25hbGxlZCBJbnRlcnJ1cHRzIChNU0kpLgogCi0gIDYpIEFkZCBwb3J0IG11bHRpcGxpZXIgc3VwcG9ydCAoaW50ZXJtZWRpYXRlKQorICA2KSBDYWNoZSBmcmVxdWVudGx5LWFjY2Vzc2VkIHJlZ2lzdGVycyBpbiBtdl9wb3J0X3ByaXYgdG8gcmVkdWNlIG92ZXJoZWFkLgorCisgIDcpIEZpeC9yZWVuYWJsZSBob3QgcGx1Zy91bnBsdWcgKHNob3VsZCBoYXBwZW4gYXMgYSBzaWRlLWVmZmVjdCBvZiAoMikgYWJvdmUpLgogCiAgIDgpIERldmVsb3AgYSBsb3ctcG93ZXItY29uc3VtcHRpb24gc3RyYXRlZ3ksIGFuZCBpbXBsZW1lbnQgaXQuCiAKQEAgLTYxLDcgKzY0LDYgQEAKIAogKi8KIAotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC03NCw2ICs3Niw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CkBAIC0xMzEsNyArMTM0LDcgQEAKIAlNVl9GTEFHX0RVQUxfSEMJCT0gKDEgPDwgMzApLCAgLyogdHdvIFNBVEEgSG9zdCBDb250cm9sbGVycyAqLwogCU1WX0ZMQUdfSVJRX0NPQUxFU0NFCT0gKDEgPDwgMjkpLCAgLyogSVJRIGNvYWxlc2NpbmcgY2FwYWJpbGl0eSAqLwogCS8qIFNvQyBpbnRlZ3JhdGVkIGNvbnRyb2xsZXJzLCBubyBQQ0kgaW50ZXJmYWNlICovCi0JTVZfRkxBR19TT0MgPSAoMSA8PCAyOCksCisJTVZfRkxBR19TT0MJCT0gKDEgPDwgMjgpLAogCiAJTVZfQ09NTU9OX0ZMQUdTCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX05PX0FUQVBJIHwKQEAgLTE0MSw2ICsxNDQsNyBAQAogCUNSUUJfRkxBR19SRUFECQk9ICgxIDw8IDApLAogCUNSUUJfVEFHX1NISUZUCQk9IDEsCiAJQ1JRQl9JT0lEX1NISUZUCQk9IDYsCS8qIENSUUIgR2VuLUlJL0lJRSBJTyBJZCBzaGlmdCAqLworCUNSUUJfUE1QX1NISUZUCQk9IDEyLAkvKiBDUlFCIEdlbi1JSS9JSUUgUE1QIHNoaWZ0ICovCiAJQ1JRQl9IT1NUUV9TSElGVAk9IDE3LAkvKiBDUlFCIEdlbi1JSS9JSUUgSG9zdFF1ZVRhZyBzaGlmdCAqLwogCUNSUUJfQ01EX0FERFJfU0hJRlQJPSA4LAogCUNSUUJfQ01EX0NTCQk9ICgweDIgPDwgMTEpLApAQCAtMTk5LDcgKzIwMyw3IEBACiAJVFdTSV9JTlQJCT0gKDEgPDwgMjQpLAogCUhDX01BSU5fUlNWRAkJPSAoMHg3ZiA8PCAyNSksCS8qIGJpdHMgMzEtMjUgKi8KIAlIQ19NQUlOX1JTVkRfNQkJPSAoMHgxZmZmIDw8IDE5KSwgLyogYml0cyAzMS0xOSAqLwotCUhDX01BSU5fUlNWRF9TT0MgCT0gKDB4M2ZmZmZmYiA8PCA2KSwgICAgIC8qIGJpdHMgMzEtOSwgNy02ICovCisJSENfTUFJTl9SU1ZEX1NPQwk9ICgweDNmZmZmZmIgPDwgNiksICAgICAvKiBiaXRzIDMxLTksIDctNiAqLwogCUhDX01BSU5fTUFTS0VEX0lSUVMJPSAoVFJBTl9MT19ET05FIHwgVFJBTl9ISV9ET05FIHwKIAkJCQkgICBQT1JUU18wXzdfQ09BTF9ET05FIHwgR1BJT19JTlQgfCBUV1NJX0lOVCB8CiAJCQkJICAgSENfTUFJTl9SU1ZEKSwKQEAgLTIyMywxMyArMjI3LDI0IEBACiAJU0FUQV9TVEFUVVNfT0ZTCQk9IDB4MzAwLCAgLyogY3RybCwgZXJyIHJlZ3MgZm9sbG93IHN0YXR1cyAqLwogCVNBVEFfQUNUSVZFX09GUwkJPSAweDM1MCwKIAlTQVRBX0ZJU19JUlFfQ0FVU0VfT0ZTCT0gMHgzNjQsCisKKwlMVE1PREVfT0ZTCQk9IDB4MzBjLAorCUxUTU9ERV9CSVQ4CQk9ICgxIDw8IDgpLAkvKiB1bmtub3duLCBidXQgbmVjZXNzYXJ5ICovCisKIAlQSFlfTU9ERTMJCT0gMHgzMTAsCiAJUEhZX01PREU0CQk9IDB4MzE0LAogCVBIWV9NT0RFMgkJPSAweDMzMCwKKwlTQVRBX0lGQ1RMX09GUwkJPSAweDM0NCwKKwlTQVRBX0lGU1RBVF9PRlMJCT0gMHgzNGMsCisJVkVORE9SX1VOSVFVRV9GSVNfT0ZTCT0gMHgzNWMsCisKKwlGSVNfQ0ZHX09GUwkJPSAweDM2MCwKKwlGSVNfQ0ZHX1NJTkdMRV9TWU5DCT0gKDEgPDwgMTYpLAkvKiBTWU5DIG9uIERNQSBhY3RpdmF0aW9uICovCisKIAlNVjVfUEhZX01PREUJCT0gMHg3NCwKIAlNVjVfTFRfTU9ERQkJPSAweDMwLAogCU1WNV9QSFlfQ1RMCQk9IDB4MEMsCi0JU0FUQV9JTlRFUkZBQ0VfQ1RMCT0gMHgwNTAsCisJU0FUQV9JTlRFUkZBQ0VfQ0ZHCT0gMHgwNTAsCiAKIAlNVl9NMl9QUkVBTVBfTUFTSwk9IDB4N2UwLAogCkBAIC0yNDAsNiArMjU1LDggQEAKIAlFRE1BX0NGR19OQ1FfR09fT05fRVJSCT0gKDEgPDwgMTQpLAkvKiBjb250aW51ZSBvbiBlcnJvciAqLwogCUVETUFfQ0ZHX1JEX0JSU1RfRVhUCT0gKDEgPDwgMTEpLAkvKiByZWFkIGJ1cnN0IDUxMkIgKi8KIAlFRE1BX0NGR19XUl9CVUZGX0xFTgk9ICgxIDw8IDEzKSwJLyogd3JpdGUgYnVmZmVyIDUxMkIgKi8KKwlFRE1BX0NGR19FRE1BX0ZCUwk9ICgxIDw8IDE2KSwJLyogRURNQSBGSVMtQmFzZWQgU3dpdGNoaW5nICovCisJRURNQV9DRkdfRkJTCQk9ICgxIDw8IDI2KSwJLyogRklTLUJhc2VkIFN3aXRjaGluZyAqLwogCiAJRURNQV9FUlJfSVJRX0NBVVNFX09GUwk9IDB4OCwKIAlFRE1BX0VSUl9JUlFfTUFTS19PRlMJPSAweGMsCkBAIC0yODIsNyArMjk5LDkgQEAKIAlFRE1BX0VSUl9JUlFfVFJBTlNJRU5UICA9IEVETUFfRVJSX0xOS19DVFJMX1JYXzAgfAogCQkJCSAgRURNQV9FUlJfTE5LX0NUUkxfUlhfMSB8CiAJCQkJICBFRE1BX0VSUl9MTktfQ1RSTF9SWF8zIHwKLQkJCQkgIEVETUFfRVJSX0xOS19DVFJMX1RYLAorCQkJCSAgRURNQV9FUlJfTE5LX0NUUkxfVFggfAorCQkJCSAvKiB0ZW1wb3JhcnksIHVudGlsIHdlIGZpeCBob3RwbHVnOiAqLworCQkJCSAoRURNQV9FUlJfREVWX0RDT04gfCBFRE1BX0VSUl9ERVZfQ09OKSwKIAogCUVETUFfRUhfRlJFRVpFCQk9IEVETUFfRVJSX0RfUEFSIHwKIAkJCQkgIEVETUFfRVJSX1BSRF9QQVIgfApAQCAtMjk4LDYgKzMxNyw3IEBACiAJCQkJICBFRE1BX0VSUl9MTktfREFUQV9SWCB8CiAJCQkJICBFRE1BX0VSUl9MTktfREFUQV9UWCB8CiAJCQkJICBFRE1BX0VSUl9UUkFOU19QUk9UTywKKwogCUVETUFfRUhfRlJFRVpFXzUJPSBFRE1BX0VSUl9EX1BBUiB8CiAJCQkJICBFRE1BX0VSUl9QUkRfUEFSIHwKIAkJCQkgIEVETUFfRVJSX0RFVl9EQ09OIHwKQEAgLTM0NCw3ICszNjQsNiBAQAogCS8qIFBvcnQgcHJpdmF0ZSBmbGFncyAocHBfZmxhZ3MpICovCiAJTVZfUFBfRkxBR19FRE1BX0VOCT0gKDEgPDwgMCksCS8qIGlzIEVETUEgZW5naW5lIGVuYWJsZWQ/ICovCiAJTVZfUFBfRkxBR19OQ1FfRU4JPSAoMSA8PCAxKSwJLyogaXMgRURNQSBzZXQgdXAgZm9yIE5DUT8gKi8KLQlNVl9QUF9GTEFHX0hBRF9BX1JFU0VUCT0gKDEgPDwgMiksCS8qIDFzdCBoYXJkIHJlc2V0IGNvbXBsZXRlPyAqLwogfTsKIAogI2RlZmluZSBJU19HRU5fSShocHJpdikgKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfR0VOX0kpCkBAIC0zNTIsNiArMzcxLDkgQEAKICNkZWZpbmUgSVNfR0VOX0lJRShocHJpdikgKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfR0VOX0lJRSkKICNkZWZpbmUgSEFTX1BDSShob3N0KSAoISgoaG9zdCktPnBvcnRzWzBdLT5mbGFncyAmIE1WX0ZMQUdfU09DKSkKIAorI2RlZmluZSBXSU5ET1dfQ1RSTChpKQkJKDB4MjAwMzAgKyAoKGkpIDw8IDQpKQorI2RlZmluZSBXSU5ET1dfQkFTRShpKQkJKDB4MjAwMzQgKyAoKGkpIDw8IDQpKQorCiBlbnVtIHsKIAkvKiBETUEgYm91bmRhcnkgMHhmZmZmIGlzIHJlcXVpcmVkIGJ5IHRoZSBzL2cgc3BsaXR0aW5nCiAJICogd2UgbmVlZCBvbiAvbGVuZ3RoLyBpbiBtdl9maWxsLXNnKCkuCkBAIC00NjEsNyArNDgzLDYgQEAKIAl2b2lkICgqcmVzZXRfYnVzKShzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHZvaWQgX19pb21lbSAqbW1pbyk7CiB9OwogCi1zdGF0aWMgdm9pZCBtdl9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IG12X3Njcl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWdfaW4sIHUzMiAqdmFsKTsKIHN0YXRpYyBpbnQgbXZfc2NyX3dyaXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWdfaW4sIHUzMiB2YWwpOwogc3RhdGljIGludCBtdjVfc2NyX3JlYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZ19pbiwgdTMyICp2YWwpOwpAQCAtNDcxLDcgKzQ5Miw4IEBACiBzdGF0aWMgdm9pZCBtdl9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgbXZfcWNfcHJlcF9paWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotc3RhdGljIHZvaWQgbXZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyBpbnQgbXZfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwogc3RhdGljIHZvaWQgbXZfZWhfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgbXZfZWhfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIG12Nl9kZXZfY29uZmlnKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwpAQCAtNTA0LDcyICs1MjYsNDYgQEAKIAkJCQkgICAgICB2b2lkIF9faW9tZW0gKm1taW8pOwogc3RhdGljIHZvaWQgbXZfc29jX3Jlc2V0X2J1cyhzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHZvaWQgX19pb21lbSAqbW1pbyk7CiBzdGF0aWMgdm9pZCBtdl9yZXNldF9wY2lfYnVzKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwgdm9pZCBfX2lvbWVtICptbWlvKTsKLXN0YXRpYyB2b2lkIG12X2NoYW5uZWxfcmVzZXQoc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsIHZvaWQgX19pb21lbSAqbW1pbywKK3N0YXRpYyB2b2lkIG12X3Jlc2V0X2NoYW5uZWwoc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsIHZvaWQgX19pb21lbSAqbW1pbywKIAkJCSAgICAgdW5zaWduZWQgaW50IHBvcnRfbm8pOwotc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IG12X3BvcnRfcHJpdiAqcHAsIHN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2LAotCQkJdm9pZCBfX2lvbWVtICpwb3J0X21taW8sIGludCB3YW50X25jcSk7Ci1zdGF0aWMgaW50IF9fbXZfc3RvcF9kbWEoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IG12X3N0b3BfZWRtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyBpbnQgbXZfc3RvcF9lZG1hX2VuZ2luZSh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyk7CitzdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EpOworCitzdGF0aWMgdm9pZCBtdl9wbXBfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCBwbXApOworc3RhdGljIGludCBtdl9wbXBfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCQl1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK3N0YXRpYyBpbnQgIG12X3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiAKIC8qIC5zZ190YWJsZXNpemUgaXMgKE1WX01BWF9TR19DVCAvIDIpIGluIHRoZSBzdHJ1Y3R1cmVzIGJlbG93CiAgKiBiZWNhdXNlIHdlIGhhdmUgdG8gYWxsb3cgcm9vbSBmb3Igd29yc3QgY2FzZSBzcGxpdHRpbmcgb2YKICAqIFBSRHMgZm9yIDY0SyBib3VuZGFyaWVzIGluIG12X2ZpbGxfc2coKS4KICAqLwogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXY1X3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCisJQVRBX0JBU0VfU0hUKERSVl9OQU1FKSwKIAkuc2dfdGFibGVzaXplCQk9IE1WX01BWF9TR19DVCAvIDIsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IDEsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKIAkuZG1hX2JvdW5kYXJ5CQk9IE1WX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXY2X3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBhdGFfc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJQVRBX05DUV9TSFQoRFJWX05BTUUpLAogCS5jYW5fcXVldWUJCT0gTVZfTUFYX1FfREVQVEggLSAxLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IE1WX01BWF9TR19DVCAvIDIsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IDEsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKIAkuZG1hX2JvdW5kYXJ5CQk9IE1WX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12NV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV9zYXRhLAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12NV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAogCiAJLnFjX3ByZXAJCT0gbXZfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gbXZfcWNfaXNzdWUsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAogCi0JLmlycV9jbGVhcgkJPSBtdl9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQotCS5lcnJvcl9oYW5kbGVyCQk9IG12X2Vycm9yX2hhbmRsZXIsCiAJLmZyZWV6ZQkJCT0gbXZfZWhfZnJlZXplLAogCS50aGF3CQkJPSBtdl9laF90aGF3LAorCS5oYXJkcmVzZXQJCT0gbXZfaGFyZHJlc2V0LAorCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9zdGRfZXJyb3JfaGFuZGxlciwgLyogYXZvaWQgU0ZGIEVIICovCisJLnBvc3RfaW50ZXJuYWxfY21kCT0gQVRBX09QX05VTEwsCiAKIAkuc2NyX3JlYWQJCT0gbXY1X3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gbXY1X3Njcl93cml0ZSwKQEAgLTU3OCw2MSArNTc0LDI0IEBACiAJLnBvcnRfc3RvcAkJPSBtdl9wb3J0X3N0b3AsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXY2X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtdjZfb3BzID0geworCS5pbmhlcml0cwkJPSAmbXY1X29wcywKKwkucWNfZGVmZXIJCT0gc2F0YV9wbXBfcWNfZGVmZXJfY21kX3N3aXRjaCwKIAkuZGV2X2NvbmZpZyAgICAgICAgICAgICA9IG12Nl9kZXZfY29uZmlnLAotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfc2F0YSwKLQotCS5xY19wcmVwCQk9IG12X3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IG12X3FjX2lzc3VlLAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfY2xlYXIJCT0gbXZfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkuZXJyb3JfaGFuZGxlcgkJPSBtdl9lcnJvcl9oYW5kbGVyLAotCS5mcmVlemUJCQk9IG12X2VoX2ZyZWV6ZSwKLQkudGhhdwkJCT0gbXZfZWhfdGhhdywKLQkucWNfZGVmZXIJCT0gYXRhX3N0ZF9xY19kZWZlciwKLQogCS5zY3JfcmVhZAkJPSBtdl9zY3JfcmVhZCwKIAkuc2NyX3dyaXRlCQk9IG12X3Njcl93cml0ZSwKIAotCS5wb3J0X3N0YXJ0CQk9IG12X3BvcnRfc3RhcnQsCi0JLnBvcnRfc3RvcAkJPSBtdl9wb3J0X3N0b3AsCisJLnBtcF9oYXJkcmVzZXQJCT0gbXZfcG1wX2hhcmRyZXNldCwKKwkucG1wX3NvZnRyZXNldAkJPSBtdl9zb2Z0cmVzZXQsCisJLnNvZnRyZXNldAkJPSBtdl9zb2Z0cmVzZXQsCisJLmVycm9yX2hhbmRsZXIJCT0gc2F0YV9wbXBfZXJyb3JfaGFuZGxlciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtdl9paWVfb3BzID0gewotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCi0JLmNhYmxlX2RldGVjdAkJPSBhdGFfY2FibGVfc2F0YSwKLQorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG12X2lpZV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZtdjZfb3BzLAorCS5xY19kZWZlcgkJPSBhdGFfc3RkX3FjX2RlZmVyLCAvKiBGSVMtYmFzZWQgc3dpdGNoaW5nICovCisJLmRldl9jb25maWcJCT0gQVRBX09QX05VTEwsCiAJLnFjX3ByZXAJCT0gbXZfcWNfcHJlcF9paWUsCi0JLnFjX2lzc3VlCQk9IG12X3FjX2lzc3VlLAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5pcnFfY2xlYXIJCT0gbXZfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkuZXJyb3JfaGFuZGxlcgkJPSBtdl9lcnJvcl9oYW5kbGVyLAotCS5mcmVlemUJCQk9IG12X2VoX2ZyZWV6ZSwKLQkudGhhdwkJCT0gbXZfZWhfdGhhdywKLQkucWNfZGVmZXIJCT0gYXRhX3N0ZF9xY19kZWZlciwKLQotCS5zY3JfcmVhZAkJPSBtdl9zY3JfcmVhZCwKLQkuc2NyX3dyaXRlCQk9IG12X3Njcl93cml0ZSwKLQotCS5wb3J0X3N0YXJ0CQk9IG12X3BvcnRfc3RhcnQsCi0JLnBvcnRfc3RvcAkJPSBtdl9wb3J0X3N0b3AsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbXZfcG9ydF9pbmZvW10gPSB7CkBAIC02NTYsNiArNjE1LDcgQEAKIAl9LAogCXsgIC8qIGNoaXBfNjA0eCAqLwogCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8CisJCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAogCQkJCSAgQVRBX0ZMQUdfTkNRLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKQEAgLTY2Myw2ICs2MjMsNyBAQAogCX0sCiAJeyAgLyogY2hpcF82MDh4ICovCiAJCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKKwkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8CiAJCQkJICBBVEFfRkxBR19OQ1EgfCBNVl9GTEFHX0RVQUxfSEMsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LApAQCAtNjcwLDYgKzYzMSw3IEBACiAJfSwKIAl7ICAvKiBjaGlwXzYwNDIgKi8KIAkJLmZsYWdzCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAorCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKIAkJCQkgIEFUQV9GTEFHX05DUSwKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCkBAIC02NzcsMTYgKzYzOSwxOSBAQAogCX0sCiAJeyAgLyogY2hpcF83MDQyICovCiAJCS5mbGFncwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKKwkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8CiAJCQkJICBBVEFfRkxBR19OQ1EsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKIAl9LAogCXsgIC8qIGNoaXBfc29jICovCi0JCS5mbGFncyA9IE1WX0NPTU1PTl9GTEFHUyB8IE1WX0ZMQUdfU09DLAotCQkucGlvX21hc2sgPSAweDFmLCAgICAgIC8qIHBpbzAtNCAqLwotCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAotCQkucG9ydF9vcHMgPSAmbXZfaWllX29wcywKKwkJLmZsYWdzCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAorCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKKwkJCQkgIEFUQV9GTEFHX05DUSB8IE1WX0ZMQUdfU09DLAorCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKKwkJLnBvcnRfb3BzCT0gJm12X2lpZV9vcHMsCiAJfSwKIH07CiAKQEAgLTc4NSw2ICs3NTAsMTQgQEAKIAkJKG12X2hhcmRwb3J0X2Zyb21fcG9ydChwb3J0KSAqIE1WX1BPUlRfUkVHX1NaKTsKIH0KIAorc3RhdGljIHZvaWQgX19pb21lbSAqbXY1X3BoeV9iYXNlKHZvaWQgX19pb21lbSAqbW1pbywgdW5zaWduZWQgaW50IHBvcnQpCit7CisJdm9pZCBfX2lvbWVtICpoY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobW1pbywgcG9ydCk7CisJdW5zaWduZWQgbG9uZyBvZnMgPSAobXZfaGFyZHBvcnRfZnJvbV9wb3J0KHBvcnQpICsgMSkgKiAweDEwMFVMOworCisJcmV0dXJuIGhjX21taW8gKyBvZnM7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICptdl9ob3N0X2Jhc2Uoc3RydWN0IGF0YV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOwpAQCAtODAxLDEwICs3NzQsNiBAQAogCXJldHVybiAoKHBvcnRfZmxhZ3MgJiBNVl9GTEFHX0RVQUxfSEMpID8gMiA6IDEpOwogfQogCi1zdGF0aWMgdm9pZCBtdl9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLX0KLQogc3RhdGljIHZvaWQgbXZfc2V0X2VkbWFfcHRycyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKIAkJCSAgICAgc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsCiAJCQkgICAgIHN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwKQpAQCAtODY0LDEzICs4MzMsMTMgQEAKIAlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSB7CiAJCWludCB1c2luZ19uY3EgPSAoKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKSAhPSAwKTsKIAkJaWYgKHdhbnRfbmNxICE9IHVzaW5nX25jcSkKLQkJCV9fbXZfc3RvcF9kbWEoYXApOworCQkJbXZfc3RvcF9lZG1hKGFwKTsKIAl9CiAJaWYgKCEocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSkgewogCQlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJCWludCBoYXJkX3BvcnQgPSBtdl9oYXJkcG9ydF9mcm9tX3BvcnQoYXAtPnBvcnRfbm8pOwogCQl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydCgKLQkJCQlhcC0+aG9zdC0+aW9tYXBbTVZfUFJJTUFSWV9CQVJdLCBoYXJkX3BvcnQpOworCQkJCQltdl9ob3N0X2Jhc2UoYXAtPmhvc3QpLCBoYXJkX3BvcnQpOwogCQl1MzIgaGNfaXJxX2NhdXNlLCBpcGVuZGluZzsKIAogCQkvKiBjbGVhciBFRE1BIGV2ZW50IGluZGljYXRvcnMsIGlmIGFueSAqLwpAQCAtODg1LDcgKzg1NCw3IEBACiAJCQkJIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKIAkJfQogCi0JCW12X2VkbWFfY2ZnKHBwLCBocHJpdiwgcG9ydF9tbWlvLCB3YW50X25jcSk7CisJCW12X2VkbWFfY2ZnKGFwLCB3YW50X25jcSk7CiAKIAkJLyogY2xlYXIgRklTIElSUSBDYXVzZSAqLwogCQl3cml0ZWxmbCgwLCBwb3J0X21taW8gKyBTQVRBX0ZJU19JUlFfQ0FVU0VfT0ZTKTsKQEAgLTg5OSw1OCArODY4LDQyIEBACiB9CiAKIC8qKgotICogICAgICBfX212X3N0b3BfZG1hIC0gRGlzYWJsZSBlRE1BIGVuZ2luZQotICogICAgICBAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKLSAqCi0gKiAgICAgIFZlcmlmeSB0aGUgbG9jYWwgY2FjaGUgb2YgdGhlIGVETUEgc3RhdGUgaXMgYWNjdXJhdGUgd2l0aCBhCi0gKiAgICAgIFdBUk5fT04uCisgKiAgICAgIG12X3N0b3BfZWRtYV9lbmdpbmUgLSBEaXNhYmxlIGVETUEgZW5naW5lCisgKiAgICAgIEBwb3J0X21taW86IGlvIGJhc2UgYWRkcmVzcwogICoKICAqICAgICAgTE9DS0lORzoKICAqICAgICAgSW5oZXJpdGVkIGZyb20gY2FsbGVyLgogICovCi1zdGF0aWMgaW50IF9fbXZfc3RvcF9kbWEoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgbXZfc3RvcF9lZG1hX2VuZ2luZSh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbykKIHsKLQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOwotCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwCT0gYXAtPnByaXZhdGVfZGF0YTsKLQl1MzIgcmVnOwotCWludCBpLCBlcnIgPSAwOworCWludCBpOwogCi0JaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikgewotCQkvKiBEaXNhYmxlIEVETUEgaWYgYWN0aXZlLiAgIFRoZSBkaXNhYmxlIGJpdCBhdXRvIGNsZWFycy4KLQkJICovCi0JCXdyaXRlbGZsKEVETUFfRFMsIHBvcnRfbW1pbyArIEVETUFfQ01EX09GUyk7Ci0JCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19FRE1BX0VOOwotCX0gZWxzZSB7Ci0JCVdBUk5fT04oRURNQV9FTiAmIHJlYWRsKHBvcnRfbW1pbyArIEVETUFfQ01EX09GUykpOwotCX0KKwkvKiBEaXNhYmxlIGVETUEuICBUaGUgZGlzYWJsZSBiaXQgYXV0byBjbGVhcnMuICovCisJd3JpdGVsZmwoRURNQV9EUywgcG9ydF9tbWlvICsgRURNQV9DTURfT0ZTKTsKIAotCS8qIG5vdyBwcm9wZXJseSB3YWl0IGZvciB0aGUgZURNQSB0byBzdG9wICovCi0JZm9yIChpID0gMTAwMDsgaSA+IDA7IGktLSkgewotCQlyZWcgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX0NNRF9PRlMpOworCS8qIFdhaXQgZm9yIHRoZSBjaGlwIHRvIGNvbmZpcm0gZURNQSBpcyBvZmYuICovCisJZm9yIChpID0gMTAwMDA7IGkgPiAwOyBpLS0pIHsKKwkJdTMyIHJlZyA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfQ01EX09GUyk7CiAJCWlmICghKHJlZyAmIEVETUFfRU4pKQotCQkJYnJlYWs7Ci0KLQkJdWRlbGF5KDEwMCk7CisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEwKTsKIAl9Ci0KLQlpZiAocmVnICYgRURNQV9FTikgewotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiVW5hYmxlIHRvIHN0b3AgZURNQVxuIik7Ci0JCWVyciA9IC1FSU87Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGludCBtdl9zdG9wX2RtYShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBtdl9zdG9wX2VkbWEoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYzsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdC0+bG9jaywgZmxhZ3MpOwotCXJjID0gX19tdl9zdG9wX2RtYShhcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3QtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiByYzsKKwlpZiAoIShwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0VETUFfRU4pKQorCQlyZXR1cm4gMDsKKwlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRURNQV9FTjsKKwlpZiAobXZfc3RvcF9lZG1hX2VuZ2luZShwb3J0X21taW8pKSB7CisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsICJVbmFibGUgdG8gc3RvcCBlRE1BXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOwogfQogCiAjaWZkZWYgQVRBX0RFQlVHCkBAIC0xMDc0LDE4ICsxMDI3LDUwIEBACiBzdGF0aWMgdm9pZCBtdjZfZGV2X2NvbmZpZyhzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKIAkvKgorCSAqIERlYWwgd2l0aCBHZW4tSUkgKCJtdjYiKSBoYXJkd2FyZSBxdWlya3MvcmVzdHJpY3Rpb25zOgorCSAqCisJICogR2VuLUlJIGRvZXMgbm90IHN1cHBvcnQgTkNRIG92ZXIgYSBwb3J0IG11bHRpcGxpZXIKKwkgKiAgKG5vIEZJUy1iYXNlZCBzd2l0Y2hpbmcpLgorCSAqCiAJICogV2UgZG9uJ3QgaGF2ZSBob2JfbnNlY3Qgd2hlbiBkb2luZyBOQ1EgY29tbWFuZHMgb24gR2VuLUlJLgogCSAqIFNlZSBtdl9xY19wcmVwKCkgZm9yIG1vcmUgaW5mby4KIAkgKi8KLQlpZiAoYWRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfTkNRKQotCQlpZiAoYWRldi0+bWF4X3NlY3RvcnMgPiBBVEFfTUFYX1NFQ1RPUlMpCisJaWYgKGFkZXYtPmZsYWdzICYgQVRBX0RGTEFHX05DUSkgeworCQlpZiAoc2F0YV9wbXBfYXR0YWNoZWQoYWRldi0+bGluay0+YXApKQorCQkJYWRldi0+ZmxhZ3MgJj0gfkFUQV9ERkxBR19OQ1E7CisJCWVsc2UgaWYgKGFkZXYtPm1heF9zZWN0b3JzID4gQVRBX01BWF9TRUNUT1JTKQogCQkJYWRldi0+bWF4X3NlY3RvcnMgPSBBVEFfTUFYX1NFQ1RPUlM7CisJfQogfQogCi1zdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCwgc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsCi0JCQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywgaW50IHdhbnRfbmNxKQorc3RhdGljIHZvaWQgbXZfY29uZmlnX2Zicyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywgaW50IGVuYWJsZV9mYnMpCit7CisJdTMyIG9sZF9mY2ZnLCBuZXdfZmNmZywgb2xkX2x0bW9kZSwgbmV3X2x0bW9kZTsKKwkvKgorCSAqIFZhcmlvdXMgYml0IHNldHRpbmdzIHJlcXVpcmVkIGZvciBvcGVyYXRpb24KKwkgKiBpbiBGSVMtYmFzZWQgc3dpdGNoaW5nIChmYnMpIG1vZGUgb24gR2VuSUllOgorCSAqLworCW9sZF9mY2ZnICAgPSByZWFkbChwb3J0X21taW8gKyBGSVNfQ0ZHX09GUyk7CisJb2xkX2x0bW9kZSA9IHJlYWRsKHBvcnRfbW1pbyArIExUTU9ERV9PRlMpOworCWlmIChlbmFibGVfZmJzKSB7CisJCW5ld19mY2ZnICAgPSBvbGRfZmNmZyAgIHwgIEZJU19DRkdfU0lOR0xFX1NZTkM7CisJCW5ld19sdG1vZGUgPSBvbGRfbHRtb2RlIHwgIExUTU9ERV9CSVQ4OworCX0gZWxzZSB7IC8qIGRpc2FibGUgZmJzICovCisJCW5ld19mY2ZnICAgPSBvbGRfZmNmZyAgICYgfkZJU19DRkdfU0lOR0xFX1NZTkM7CisJCW5ld19sdG1vZGUgPSBvbGRfbHRtb2RlICYgfkxUTU9ERV9CSVQ4OworCX0KKwlpZiAobmV3X2ZjZmcgIT0gb2xkX2ZjZmcpCisJCXdyaXRlbGZsKG5ld19mY2ZnLCBwb3J0X21taW8gKyBGSVNfQ0ZHX09GUyk7CisJaWYgKG5ld19sdG1vZGUgIT0gb2xkX2x0bW9kZSkKKwkJd3JpdGVsZmwobmV3X2x0bW9kZSwgcG9ydF9tbWlvICsgTFRNT0RFX09GUyk7Cit9CisKK3N0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSkKIHsKIAl1MzIgY2ZnOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwICAgID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gICAgPSBtdl9hcF9iYXNlKGFwKTsKIAogCS8qIHNldCB1cCBub24tTkNRIEVETUEgY29uZmlndXJhdGlvbiAqLwogCWNmZyA9IEVETUFfQ0ZHX1FfREVQVEg7CQkvKiBhbHdheXMgMHgxZiBmb3IgKmFsbCogY2hpcHMgKi8KQEAgLTExMDEsNiArMTA4NiwxMyBAQAogCQljZmcgfD0gKDEgPDwgMjIpOwkvKiBlbmFiIDQtZW50cnkgaG9zdCBxdWV1ZSBjYWNoZSAqLwogCQljZmcgfD0gKDEgPDwgMTgpOwkvKiBlbmFiIGVhcmx5IGNvbXBsZXRpb24gKi8KIAkJY2ZnIHw9ICgxIDw8IDE3KTsJLyogZW5hYiBjdXQtdGhyb3VnaCAoZGlzIHN0b3ImZm9yd3JkKSAqLworCisJCWlmICh3YW50X25jcSAmJiBzYXRhX3BtcF9hdHRhY2hlZChhcCkpIHsKKwkJCWNmZyB8PSBFRE1BX0NGR19FRE1BX0ZCUzsgLyogRklTLWJhc2VkIHN3aXRjaGluZyAqLworCQkJbXZfY29uZmlnX2Zicyhwb3J0X21taW8sIDEpOworCQl9IGVsc2UgeworCQkJbXZfY29uZmlnX2Zicyhwb3J0X21taW8sIDApOworCQl9CiAJfQogCiAJaWYgKHdhbnRfbmNxKSB7CkBAIC0xMTU2LDE5ICsxMTQ4LDEzIEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gYXAtPmhvc3QtPmRldjsKIAlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHA7Ci0Jdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB0YWcsIHJjOworCWludCB0YWc7CiAKIAlwcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBwKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcC0+cHJpdmF0ZV9kYXRhID0gcHA7CiAKLQlyYyA9IGF0YV9wYWRfYWxsb2MoYXAsIGRldik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAlwcC0+Y3JxYiA9IGRtYV9wb29sX2FsbG9jKGhwcml2LT5jcnFiX3Bvb2wsIEdGUF9LRVJORUwsICZwcC0+Y3JxYl9kbWEpOwogCWlmICghcHAtPmNycWIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTE5NCwxOCArMTE4MCw2IEBACiAJCQlwcC0+c2dfdGJsX2RtYVt0YWddID0gcHAtPnNnX3RibF9kbWFbMF07CiAJCX0KIAl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3QtPmxvY2ssIGZsYWdzKTsKLQotCW12X2VkbWFfY2ZnKHBwLCBocHJpdiwgcG9ydF9tbWlvLCAwKTsKLQltdl9zZXRfZWRtYV9wdHJzKHBvcnRfbW1pbywgaHByaXYsIHBwKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBEb24ndCB0dXJuIG9uIEVETUEgaGVyZS4uLmRvIGl0IGJlZm9yZSBETUEgY29tbWFuZHMgb25seS4gIEVsc2UKLQkgKiB3ZSdsbCBiZSB1bmFibGUgdG8gc2VuZCBub24tZGF0YSwgUElPLCBldGMgZHVlIHRvIHJlc3RyaWN0ZWQgYWNjZXNzCi0JICogdG8gc2hhZG93IHJlZ3MuCi0JICovCiAJcmV0dXJuIDA7CiAKIG91dF9wb3J0X2ZyZWVfZG1hX21lbToKQEAgLTEyMjQsNyArMTE5OCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIG12X3BvcnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCW12X3N0b3BfZG1hKGFwKTsKKwltdl9zdG9wX2VkbWEoYXApOwogCW12X3BvcnRfZnJlZV9kbWFfbWVtKGFwKTsKIH0KIApAQCAtMTMxMCw2ICsxMjg0LDcgQEAKIAkJZmxhZ3MgfD0gQ1JRQl9GTEFHX1JFQUQ7CiAJV0FSTl9PTihNVl9NQVhfUV9ERVBUSCA8PSBxYy0+dGFnKTsKIAlmbGFncyB8PSBxYy0+dGFnIDw8IENSUUJfVEFHX1NISUZUOworCWZsYWdzIHw9IChxYy0+ZGV2LT5saW5rLT5wbXAgJiAweGYpIDw8IENSUUJfUE1QX1NISUZUOwogCiAJLyogZ2V0IGN1cnJlbnQgcXVldWUgaW5kZXggZnJvbSBzb2Z0d2FyZSAqLwogCWluX2luZGV4ID0gcHAtPnJlcV9pZHggJiBNVl9NQVhfUV9ERVBUSF9NQVNLOwpAQCAtMTM5NCwxNCArMTM2OSwxNCBAQAogCSAgICAocWMtPnRmLnByb3RvY29sICE9IEFUQV9QUk9UX05DUSkpCiAJCXJldHVybjsKIAotCS8qIEZpbGwgaW4gR2VuIElJRSBjb21tYW5kIHJlcXVlc3QgYmxvY2sKLQkgKi8KKwkvKiBGaWxsIGluIEdlbiBJSUUgY29tbWFuZCByZXF1ZXN0IGJsb2NrICovCiAJaWYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSkKIAkJZmxhZ3MgfD0gQ1JRQl9GTEFHX1JFQUQ7CiAKIAlXQVJOX09OKE1WX01BWF9RX0RFUFRIIDw9IHFjLT50YWcpOwogCWZsYWdzIHw9IHFjLT50YWcgPDwgQ1JRQl9UQUdfU0hJRlQ7CiAJZmxhZ3MgfD0gcWMtPnRhZyA8PCBDUlFCX0hPU1RRX1NISUZUOworCWZsYWdzIHw9IChxYy0+ZGV2LT5saW5rLT5wbXAgJiAweGYpIDw8IENSUUJfUE1QX1NISUZUOwogCiAJLyogZ2V0IGN1cnJlbnQgcXVldWUgaW5kZXggZnJvbSBzb2Z0d2FyZSAqLwogCWluX2luZGV4ID0gcHAtPnJlcV9pZHggJiBNVl9NQVhfUV9ERVBUSF9NQVNLOwpAQCAtMTQ1OSwxMiArMTQzNCwxNCBAQAogCiAJaWYgKChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfRE1BKSAmJgogCSAgICAocWMtPnRmLnByb3RvY29sICE9IEFUQV9QUk9UX05DUSkpIHsKLQkJLyogV2UncmUgYWJvdXQgdG8gc2VuZCBhIG5vbi1FRE1BIGNhcGFibGUgY29tbWFuZCB0byB0aGUKKwkJLyoKKwkJICogV2UncmUgYWJvdXQgdG8gc2VuZCBhIG5vbi1FRE1BIGNhcGFibGUgY29tbWFuZCB0byB0aGUKIAkJICogcG9ydC4gIFR1cm4gb2ZmIEVETUEgc28gdGhlcmUgd29uJ3QgYmUgcHJvYmxlbXMgYWNjZXNzaW5nCiAJCSAqIHNoYWRvdyBibG9jaywgZXRjIHJlZ2lzdGVycy4KIAkJICovCi0JCV9fbXZfc3RvcF9kbWEoYXApOwotCQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCQltdl9zdG9wX2VkbWEoYXApOworCQltdl9wbXBfc2VsZWN0KGFwLCBxYy0+ZGV2LT5saW5rLT5wbXApOworCQlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiAJfQogCiAJbXZfc3RhcnRfZG1hKGFwLCBwb3J0X21taW8sIHBwLCBxYy0+dGYucHJvdG9jb2wpOwpAQCAtMTQ4NiwxMCArMTQ2MywxMCBAQAogICogICAgICBAcmVzZXRfYWxsb3dlZDogYm9vbDogMCA9PSBkb24ndCB0cmlnZ2VyIGZyb20gcmVzZXQgaGVyZQogICoKICAqICAgICAgSW4gbW9zdCBjYXNlcywganVzdCBjbGVhciB0aGUgaW50ZXJydXB0IGFuZCBtb3ZlIG9uLiAgSG93ZXZlciwKLSAqICAgICAgc29tZSBjYXNlcyByZXF1aXJlIGFuIGVETUEgcmVzZXQsIHdoaWNoIGlzIGRvbmUgcmlnaHQgYmVmb3JlCi0gKiAgICAgIHRoZSBDT01SRVNFVCBpbiBtdl9waHlfcmVzZXQoKS4gIFRoZSBTRVJSIGNhc2UgcmVxdWlyZXMgYQotICogICAgICBjbGVhciBvZiBwZW5kaW5nIGVycm9ycyBpbiB0aGUgU0FUQSBTRVJST1IgcmVnaXN0ZXIuICBGaW5hbGx5LAotICogICAgICBpZiB0aGUgcG9ydCBkaXNhYmxlZCBETUEsIHVwZGF0ZSBvdXIgY2FjaGVkIGNvcHkgdG8gbWF0Y2guCisgKiAgICAgIHNvbWUgY2FzZXMgcmVxdWlyZSBhbiBlRE1BIHJlc2V0LCB3aGljaCBhbHNvIHBlcmZvcm1zIGEgQ09NUkVTRVQuCisgKiAgICAgIFRoZSBTRVJSIGNhc2UgcmVxdWlyZXMgYSBjbGVhciBvZiBwZW5kaW5nIGVycm9ycyBpbiB0aGUgU0FUQQorICogICAgICBTRVJST1IgcmVnaXN0ZXIuICBGaW5hbGx5LCBpZiB0aGUgcG9ydCBkaXNhYmxlZCBETUEsCisgKiAgICAgIHVwZGF0ZSBvdXIgY2FjaGVkIGNvcHkgdG8gbWF0Y2guCiAgKgogICogICAgICBMT0NLSU5HOgogICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCkBAIC0xNTI4LDE0ICsxNTA1LDE0IEBACiAJCQlFRE1BX0VSUl9DUlFCX1BBUiB8IEVETUFfRVJSX0NSUEJfUEFSIHwKIAkJCUVETUFfRVJSX0lOVFJMX1BBUikpIHsKIAkJZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7Ci0JCWFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOworCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQlhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJwYXJpdHkgZXJyb3IiKTsKIAl9CiAJaWYgKGVkbWFfZXJyX2NhdXNlICYgKEVETUFfRVJSX0RFVl9EQ09OIHwgRURNQV9FUlJfREVWX0NPTikpIHsKIAkJYXRhX2VoaV9ob3RwbHVnZ2VkKGVoaSk7CiAJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgZWRtYV9lcnJfY2F1c2UgJiBFRE1BX0VSUl9ERVZfRENPTiA/CiAJCQkiZGV2IGRpc2Nvbm5lY3QiIDogImRldiBjb25uZWN0Iik7Ci0JCWFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOworCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCX0KIAogCWlmIChJU19HRU5fSShocHJpdikpIHsKQEAgLTE1NTksNyArMTUzNiw3IEBACiAJCQlzYXRhX3Njcl9yZWFkKCZhcC0+bGluaywgU0NSX0VSUk9SLCAmc2Vycik7CiAJCQlzYXRhX3Njcl93cml0ZV9mbHVzaCgmYXAtPmxpbmssIFNDUl9FUlJPUiwgc2Vycik7CiAJCQllcnJfbWFzayA9IEFDX0VSUl9BVEFfQlVTOwotCQkJYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQl9CiAJfQogCkBAIC0xNTY4LDcgKzE1NDUsNyBAQAogCiAJaWYgKCFlcnJfbWFzaykgewogCQllcnJfbWFzayA9IEFDX0VSUl9PVEhFUjsKLQkJYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCWFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJfQogCiAJZWhpLT5zZXJyb3IgfD0gc2VycjsKQEAgLTE3MjcsOSArMTcwNCw5IEBACiAJCXBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAogCQlzaGlmdCA9IHBvcnQgPDwgMTsJCS8qIChwb3J0ICogMikgKi8KLQkJaWYgKHBvcnQgPj0gTVZfUE9SVFNfUEVSX0hDKSB7CisJCWlmIChwb3J0ID49IE1WX1BPUlRTX1BFUl9IQykKIAkJCXNoaWZ0Kys7CS8qIHNraXAgYml0IDggaW4gdGhlIEhDIE1haW4gSVJRIHJlZyAqLwotCQl9CisKIAkJaGF2ZV9lcnJfYml0cyA9ICgoUE9SVDBfRVJSIDw8IHNoaWZ0KSAmIHJlbGV2YW50KTsKIAogCQlpZiAodW5saWtlbHkoaGF2ZV9lcnJfYml0cykpIHsKQEAgLTE3ODQsNyArMTc2MSw3IEBACiAJCQkJYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLAogCQkJCQkiUENJIGVyciBjYXVzZSAweCUwOHgiLCBlcnJfY2F1c2UpOwogCQkJZXJyX21hc2sgPSBBQ19FUlJfSE9TVF9CVVM7Ci0JCQllaGktPmFjdGlvbiA9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCQllaGktPmFjdGlvbiA9IEFUQV9FSF9SRVNFVDsKIAkJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKIAkJCWlmIChxYykKIAkJCQlxYy0+ZXJyX21hc2sgfD0gZXJyX21hc2s7CkBAIC0xODE4LDYgKzE3OTUsNyBAQAogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5iYXNlOwogCXUzMiBpcnFfc3RhdCwgaXJxX21hc2s7CiAKKwkvKiBOb3RlIHRvIHNlbGY6ICZob3N0LT5sb2NrID09ICZhcC0+aG9zdC0+bG9jayA9PSBhcC0+bG9jayAqLwogCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CiAKIAlpcnFfc3RhdCA9IHJlYWRsKGhwcml2LT5tYWluX2NhdXNlX3JlZ19hZGRyKTsKQEAgLTE4NTEsMTQgKzE4MjksNiBAQAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICptdjVfcGh5X2Jhc2Uodm9pZCBfX2lvbWVtICptbWlvLCB1bnNpZ25lZCBpbnQgcG9ydCkKLXsKLQl2b2lkIF9faW9tZW0gKmhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtbWlvLCBwb3J0KTsKLQl1bnNpZ25lZCBsb25nIG9mcyA9IChtdl9oYXJkcG9ydF9mcm9tX3BvcnQocG9ydCkgKyAxKSAqIDB4MTAwVUw7Ci0KLQlyZXR1cm4gaGNfbW1pbyArIG9mczsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBtdjVfc2NyX29mZnNldCh1bnNpZ25lZCBpbnQgc2NfcmVnX2luKQogewogCXVuc2lnbmVkIGludCBvZnM7CkBAIC0xOTg0LDkgKzE5NTQsMTIgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X3BvcnRfYmFzZShtbWlvLCBwb3J0KTsKIAotCXdyaXRlbGZsKEVETUFfRFMsIHBvcnRfbW1pbyArIEVETUFfQ01EX09GUyk7Ci0KLQltdl9jaGFubmVsX3Jlc2V0KGhwcml2LCBtbWlvLCBwb3J0KTsKKwkvKgorCSAqIFRoZSBkYXRhc2hlZXQgd2FybnMgYWdhaW5zdCBzZXR0aW5nIEFUQV9SU1Qgd2hlbiBFRE1BIGlzIGFjdGl2ZQorCSAqIChidXQgZG9lc24ndCBzYXkgd2hhdCB0aGUgcHJvYmxlbSBtaWdodCBiZSkuICBTbyB3ZSBmaXJzdCB0cnkKKwkgKiB0byBkaXNhYmxlIHRoZSBFRE1BIGVuZ2luZSBiZWZvcmUgZG9pbmcgdGhlIEFUQV9SU1Qgb3BlcmF0aW9uLgorCSAqLworCW12X3Jlc2V0X2NoYW5uZWwoaHByaXYsIG1taW8sIHBvcnQpOwogCiAJWkVSTygweDAyOCk7CS8qIGNvbW1hbmQgKi8KIAl3cml0ZWwoMHgxMWYsIHBvcnRfbW1pbyArIEVETUFfQ0ZHX09GUyk7CkBAIC0yMTM2LDYgKzIxMDksMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNhbid0IGNsZWFyIGdsb2JhbCByZXNldFxuIik7CiAJCXJjID0gMTsKIAl9CisJLyoKKwkgKiBUZW1wb3Jhcnk6IHdhaXQgMyBzZWNvbmRzIGJlZm9yZSBwb3J0LXByb2JpbmcgY2FuIGhhcHBlbiwKKwkgKiBzbyB0aGF0IHdlIGRvbid0IG1pc3MgZmluZGluZyBzbGVlcHkgU2lsWFhYWCBwb3J0LW11bHRpcGxpZXJzLgorCSAqIFRoaXMgY2FuIGdvIGF3YXkgb25jZSBob3RwbHVnIGlzIGZ1bGx5L2NvcnJlY3RseSBpbXBsZW1lbnRlZC4KKwkgKi8KKwlpZiAocmMgPT0gMCkKKwkJbXNsZWVwKDMwMDApOwogZG9uZToKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMjA0LDE0ICsyMTg0LDE1IEBACiAJCW00ID0gcmVhZGwocG9ydF9tbWlvICsgUEhZX01PREU0KTsKIAogCQlpZiAoaHBfZmxhZ3MgJiBNVl9IUF9FUlJBVEFfNjBYMUIyKQotCQkJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgMHgzMTApOworCQkJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgUEhZX01PREUzKTsKIAorCQkvKiB3b3JrYXJvdW5kIGZvciBlcnJhdGEgRkVyIFNBVEEjMTAgKHBhcnQgMSkgKi8KIAkJbTQgPSAobTQgJiB+KDEgPDwgMSkpIHwgKDEgPDwgMCk7CiAKIAkJd3JpdGVsKG00LCBwb3J0X21taW8gKyBQSFlfTU9ERTQpOwogCiAJCWlmIChocF9mbGFncyAmIE1WX0hQX0VSUkFUQV82MFgxQjIpCi0JCQl3cml0ZWwodG1wLCBwb3J0X21taW8gKyAweDMxMCk7CisJCQl3cml0ZWwodG1wLCBwb3J0X21taW8gKyBQSFlfTU9ERTMpOwogCX0KIAogCS8qIFJldmVydCB2YWx1ZXMgb2YgcHJlLWVtcGhhc2lzIGFuZCBzaWduYWwgYW1wcyB0byB0aGUgc2F2ZWQgb25lcyAqLwpAQCAtMjI1OSw5ICsyMjQwLDEyIEBACiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9wb3J0X2Jhc2UobW1pbywgcG9ydCk7CiAKLQl3cml0ZWxmbChFRE1BX0RTLCBwb3J0X21taW8gKyBFRE1BX0NNRF9PRlMpOwotCi0JbXZfY2hhbm5lbF9yZXNldChocHJpdiwgbW1pbywgcG9ydCk7CisJLyoKKwkgKiBUaGUgZGF0YXNoZWV0IHdhcm5zIGFnYWluc3Qgc2V0dGluZyBBVEFfUlNUIHdoZW4gRURNQSBpcyBhY3RpdmUKKwkgKiAoYnV0IGRvZXNuJ3Qgc2F5IHdoYXQgdGhlIHByb2JsZW0gbWlnaHQgYmUpLiAgU28gd2UgZmlyc3QgdHJ5CisJICogdG8gZGlzYWJsZSB0aGUgRURNQSBlbmdpbmUgYmVmb3JlIGRvaW5nIHRoZSBBVEFfUlNUIG9wZXJhdGlvbi4KKwkgKi8KKwltdl9yZXNldF9jaGFubmVsKGhwcml2LCBtbWlvLCBwb3J0KTsKIAogCVpFUk8oMHgwMjgpOwkJLyogY29tbWFuZCAqLwogCXdyaXRlbCgweDEwMWYsIHBvcnRfbW1pbyArIEVETUFfQ0ZHX09GUyk7CkBAIC0yMzE4LDI1ICsyMzAyLDM5IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBtdl9jaGFubmVsX3Jlc2V0KHN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2LCB2b2lkIF9faW9tZW0gKm1taW8sCitzdGF0aWMgdm9pZCBtdl9zZXR1cF9pZmN0bCh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywgaW50IHdhbnRfZ2VuMmkpCit7CisJdTMyIGlmY3RsID0gcmVhZGwocG9ydF9tbWlvICsgU0FUQV9JTlRFUkZBQ0VfQ0ZHKTsKKworCWlmY3RsID0gKGlmY3RsICYgMHhmN2YpIHwgMHg5YjEwMDA7CS8qIGZyb20gY2hpcCBzcGVjICovCisJaWYgKHdhbnRfZ2VuMmkpCisJCWlmY3RsIHw9ICgxIDw8IDcpOwkJLyogZW5hYmxlIGdlbjJpIHNwZWVkICovCisJd3JpdGVsZmwoaWZjdGwsIHBvcnRfbW1pbyArIFNBVEFfSU5URVJGQUNFX0NGRyk7Cit9CisKKy8qCisgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBFRE1BIGlzIG5vdCBhY3RpdmUsCisgKiBieSBmaXJzdCBkb2luZyBtdl9zdG9wX2VkbWEoKSB3aGVyZSBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkIG12X3Jlc2V0X2NoYW5uZWwoc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsIHZvaWQgX19pb21lbSAqbW1pbywKIAkJCSAgICAgdW5zaWduZWQgaW50IHBvcnRfbm8pCiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9wb3J0X2Jhc2UobW1pbywgcG9ydF9ubyk7CiAKKwltdl9zdG9wX2VkbWFfZW5naW5lKHBvcnRfbW1pbyk7CiAJd3JpdGVsZmwoQVRBX1JTVCwgcG9ydF9tbWlvICsgRURNQV9DTURfT0ZTKTsKIAotCWlmIChJU19HRU5fSUkoaHByaXYpKSB7Ci0JCXUzMiBpZmN0bCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSU5URVJGQUNFX0NUTCk7Ci0JCWlmY3RsIHw9ICgxIDw8IDcpOwkJLyogZW5hYmxlIGdlbjJpIHNwZWVkICovCi0JCWlmY3RsID0gKGlmY3RsICYgMHhmZmYpIHwgMHg5YjEwMDA7IC8qIGZyb20gY2hpcCBzcGVjICovCi0JCXdyaXRlbGZsKGlmY3RsLCBwb3J0X21taW8gKyBTQVRBX0lOVEVSRkFDRV9DVEwpOworCWlmICghSVNfR0VOX0koaHByaXYpKSB7CisJCS8qIEVuYWJsZSAzLjBnYi9zIGxpbmsgc3BlZWQgKi8KKwkJbXZfc2V0dXBfaWZjdGwocG9ydF9tbWlvLCAxKTsKIAl9Ci0KLQl1ZGVsYXkoMjUpOwkJLyogYWxsb3cgcmVzZXQgcHJvcGFnYXRpb24gKi8KLQotCS8qIFNwZWMgbmV2ZXIgbWVudGlvbnMgY2xlYXJpbmcgdGhlIGJpdC4gIE1hcnZlbGwncyBkcml2ZXIgZG9lcwotCSAqIGNsZWFyIHRoZSBiaXQsIGhvd2V2ZXIuCisJLyoKKwkgKiBTdHJvYmluZyBBVEFfUlNUIGhlcmUgY2F1c2VzIGEgaGFyZCByZXNldCBvZiB0aGUgU0FUQSB0cmFuc3BvcnQsCisJICogbGluaywgYW5kIHBoeXNpY2FsIGxheWVycy4gIEl0IHJlc2V0cyBhbGwgU0FUQSBpbnRlcmZhY2UgcmVnaXN0ZXJzCisJICogKGV4Y2VwdCBmb3IgU0FUQV9JTlRFUkZBQ0VfQ0ZHKSwgYW5kIGlzc3VlcyBhIENPTVJFU0VUIHRvIHRoZSBkZXYuCiAJICovCisJd3JpdGVsZmwoQVRBX1JTVCwgcG9ydF9tbWlvICsgRURNQV9DTURfT0ZTKTsKKwl1ZGVsYXkoMjUpOwkvKiBhbGxvdyByZXNldCBwcm9wYWdhdGlvbiAqLwogCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfQ01EX09GUyk7CiAKIAlocHJpdi0+b3BzLT5waHlfZXJyYXRhKGhwcml2LCBtbWlvLCBwb3J0X25vKTsKQEAgLTIzNDUsMTM2ICsyMzQzLDMyIEBACiAJCW1kZWxheSgxKTsKIH0KIAotLyoqCi0gKiAgICAgIG12X3BoeV9yZXNldCAtIFBlcmZvcm0gZURNQSByZXNldCBmb2xsb3dlZCBieSBDT01SRVNFVAotICogICAgICBAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKLSAqCi0gKiAgICAgIFBhcnQgb2YgdGhpcyBpcyB0YWtlbiBmcm9tIF9fc2F0YV9waHlfcmVzZXQgYW5kIG1vZGlmaWVkIHRvCi0gKiAgICAgIG5vdCBzbGVlcCBzaW5jZSB0aGlzIHJvdXRpbmUgZ2V0cyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgbGV2ZWwuCi0gKgotICogICAgICBMT0NLSU5HOgotICogICAgICBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuICBUaGlzIGlzIGNvZGVkIHRvIHNhZmUgdG8gY2FsbCBhdAotICogICAgICBpbnRlcnJ1cHQgbGV2ZWwsIGkuZS4gaXQgZG9lcyBub3Qgc2xlZXAuCi0gKi8KLXN0YXRpYyB2b2lkIG12X3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAotCQkJIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCitzdGF0aWMgdm9pZCBtdl9wbXBfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCBwbXApCiB7Ci0Jc3RydWN0IG12X3BvcnRfcHJpdiAqcHAJPSBhcC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOwotCWludCByZXRyeSA9IDU7Ci0JdTMyIHNzdGF0dXM7CisJaWYgKHNhdGFfcG1wX3N1cHBvcnRlZChhcCkpIHsKKwkJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwkJdTMyIHJlZyA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKwkJaW50IG9sZCA9IHJlZyAmIDB4ZjsKIAotCVZQUklOVEsoIkVOVEVSLCBwb3J0ICV1LCBtbWlvIDB4JXBcbiIsIGFwLT5wb3J0X25vLCBwb3J0X21taW8pOwotCi0jaWZkZWYgREVCVUcKLQl7Ci0JCXUzMiBzc3RhdHVzLCBzZXJyb3IsIHNjb250cm9sOwotCi0JCW12X3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVTLCAmc3N0YXR1cyk7Ci0JCW12X3Njcl9yZWFkKGFwLCBTQ1JfRVJST1IsICZzZXJyb3IpOwotCQltdl9zY3JfcmVhZChhcCwgU0NSX0NPTlRST0wsICZzY29udHJvbCk7Ci0JCURQUklOVEsoIlMtcmVncyBhZnRlciBBVEFfUlNUOiBTU3RhdCAweCUwOHggU0VyciAweCUwOHggIgotCQkJIlNDdHJsIDB4JTA4eFxuIiwgc3N0YXR1cywgc2Vycm9yLCBzY29udHJvbCk7CisJCWlmIChvbGQgIT0gcG1wKSB7CisJCQlyZWcgPSAocmVnICYgfjB4ZikgfCBwbXA7CisJCQl3cml0ZWxmbChyZWcsIHBvcnRfbW1pbyArIFNBVEFfSUZDVExfT0ZTKTsKKwkJfQogCX0KLSNlbmRpZgotCi0JLyogSXNzdWUgQ09NUkVTRVQgdmlhIFNDb250cm9sICovCi1jb21yZXNldF9yZXRyeToKLQlzYXRhX3Njcl93cml0ZV9mbHVzaCgmYXAtPmxpbmssIFNDUl9DT05UUk9MLCAweDMwMSk7Ci0JbXNsZWVwKDEpOwotCi0Jc2F0YV9zY3Jfd3JpdGVfZmx1c2goJmFwLT5saW5rLCBTQ1JfQ09OVFJPTCwgMHgzMDApOwotCW1zbGVlcCgyMCk7Ci0KLQlkbyB7Ci0JCXNhdGFfc2NyX3JlYWQoJmFwLT5saW5rLCBTQ1JfU1RBVFVTLCAmc3N0YXR1cyk7Ci0JCWlmICgoKHNzdGF0dXMgJiAweDMpID09IDMpIHx8ICgoc3N0YXR1cyAmIDB4MykgPT0gMCkpCi0JCQlicmVhazsKLQotCQltc2xlZXAoMSk7Ci0JfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTsKLQotCS8qIHdvcmsgYXJvdW5kIGVycmF0YSAqLwotCWlmIChJU19HRU5fSUkoaHByaXYpICYmCi0JICAgIChzc3RhdHVzICE9IDB4MCkgJiYgKHNzdGF0dXMgIT0gMHgxMTMpICYmIChzc3RhdHVzICE9IDB4MTIzKSAmJgotCSAgICAocmV0cnktLSA+IDApKQotCQlnb3RvIGNvbXJlc2V0X3JldHJ5OwotCi0jaWZkZWYgREVCVUcKLQl7Ci0JCXUzMiBzc3RhdHVzLCBzZXJyb3IsIHNjb250cm9sOwotCi0JCW12X3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVTLCAmc3N0YXR1cyk7Ci0JCW12X3Njcl9yZWFkKGFwLCBTQ1JfRVJST1IsICZzZXJyb3IpOwotCQltdl9zY3JfcmVhZChhcCwgU0NSX0NPTlRST0wsICZzY29udHJvbCk7Ci0JCURQUklOVEsoIlMtcmVncyBhZnRlciBQSFkgd2FrZTogU1N0YXQgMHglMDh4IFNFcnIgMHglMDh4ICIKLQkJCSJTQ3RybCAweCUwOHhcbiIsIHNzdGF0dXMsIHNlcnJvciwgc2NvbnRyb2wpOwotCX0KLSNlbmRpZgotCi0JaWYgKGF0YV9saW5rX29mZmxpbmUoJmFwLT5saW5rKSkgewotCQkqY2xhc3MgPSBBVEFfREVWX05PTkU7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBldmVuIGFmdGVyIFNTdGF0dXMgcmVmbGVjdHMgdGhhdCBkZXZpY2UgaXMgcmVhZHksCi0JICogaXQgc2VlbXMgdG8gdGFrZSBhIHdoaWxlIGZvciBsaW5rIHRvIGJlIGZ1bGx5Ci0JICogZXN0YWJsaXNoZWQgKGFuZCB0aHVzIFN0YXR1cyBubyBsb25nZXIgMHg4MC8weDdGKSwKLQkgKiBzbyB3ZSBwb2xsIGEgYml0IGZvciB0aGF0LCBoZXJlLgotCSAqLwotCXJldHJ5ID0gMjA7Ci0Jd2hpbGUgKDEpIHsKLQkJdTggZHJ2X3N0YXQgPSBhdGFfY2hlY2tfc3RhdHVzKGFwKTsKLQkJaWYgKChkcnZfc3RhdCAhPSAweDgwKSAmJiAoZHJ2X3N0YXQgIT0gMHg3ZikpCi0JCQlicmVhazsKLQkJbXNsZWVwKDUwMCk7Ci0JCWlmIChyZXRyeS0tIDw9IDApCi0JCQlicmVhazsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKQotCQkJYnJlYWs7Ci0JfQotCi0JLyogRklYTUU6IGlmIHdlIHBhc3NlZCB0aGUgZGVhZGxpbmUsIHRoZSBmb2xsb3dpbmcKLQkgKiBjb2RlIHByb2JhYmx5IHByb2R1Y2VzIGFuIGludmFsaWQgcmVzdWx0Ci0JICovCi0KLQkvKiBmaW5hbGx5LCByZWFkIGRldmljZSBzaWduYXR1cmUgZnJvbSBURiByZWdpc3RlcnMgKi8KLQkqY2xhc3MgPSBhdGFfZGV2X3RyeV9jbGFzc2lmeShhcC0+bGluay5kZXZpY2UsIDEsIE5VTEwpOwotCi0Jd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgRURNQV9FUlJfSVJRX0NBVVNFX09GUyk7Ci0KLQlXQVJOX09OKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTik7Ci0KLQlWUFJJTlRLKCJFWElUXG4iKTsKIH0KIAotc3RhdGljIGludCBtdl9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCitzdGF0aWMgaW50IG12X3BtcF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwotCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwCT0gYXAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXRhX2VoX2NvbnRleHQgKmVoYyA9ICZsaW5rLT5laF9jb250ZXh0OwotCWludCByYzsKKwltdl9wbXBfc2VsZWN0KGxpbmstPmFwLCBzYXRhX3Nyc3RfcG1wKGxpbmspKTsKKwlyZXR1cm4gc2F0YV9zdGRfaGFyZHJlc2V0KGxpbmssIGNsYXNzLCBkZWFkbGluZSk7Cit9CiAKLQlyYyA9IG12X3N0b3BfZG1hKGFwKTsKLQlpZiAocmMpCi0JCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX0hBUkRSRVNFVDsKLQotCWlmICghKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfSEFEX0FfUkVTRVQpKSB7Ci0JCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0hBRF9BX1JFU0VUOwotCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7Ci0JfQotCi0JLyogaWYgd2UncmUgYWJvdXQgdG8gZG8gaGFyZHJlc2V0LCBub3RoaW5nIG1vcmUgdG8gZG8gKi8KLQlpZiAoZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9IQVJEUkVTRVQpCi0JCXJldHVybiAwOwotCi0JaWYgKGF0YV9saW5rX29ubGluZShsaW5rKSkKLQkJcmMgPSBhdGFfd2FpdF9yZWFkeShhcCwgZGVhZGxpbmUpOwotCWVsc2UKLQkJcmMgPSAtRU5PREVWOwotCi0JcmV0dXJuIHJjOworc3RhdGljIGludCBtdl9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJbXZfcG1wX3NlbGVjdChsaW5rLT5hcCwgc2F0YV9zcnN0X3BtcChsaW5rKSk7CisJcmV0dXJuIGF0YV9zZmZfc29mdHJlc2V0KGxpbmssIGNsYXNzLCBkZWFkbGluZSk7CiB9CiAKIHN0YXRpYyBpbnQgbXZfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKQEAgLTI0ODIsNDMgKzIzNzYsMzQgQEAKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CiAJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+YmFzZTsKKwlpbnQgcmMsIGF0dGVtcHRzID0gMCwgZXh0cmEgPSAwOworCXUzMiBzc3RhdHVzOworCWJvb2wgb25saW5lOwogCi0JbXZfc3RvcF9kbWEoYXApOworCW12X3Jlc2V0X2NoYW5uZWwoaHByaXYsIG1taW8sIGFwLT5wb3J0X25vKTsKKwlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRURNQV9FTjsKIAotCW12X2NoYW5uZWxfcmVzZXQoaHByaXYsIG1taW8sIGFwLT5wb3J0X25vKTsKKwkvKiBXb3JrYXJvdW5kIGZvciBlcnJhdGEgRkVyIFNBVEEjMTAgKHBhcnQgMikgKi8KKwlkbyB7CisJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnRpbWluZyA9CisJCQkJc2F0YV9laGNfZGViX3RpbWluZygmbGluay0+ZWhfY29udGV4dCk7CiAKLQltdl9waHlfcmVzZXQoYXAsIGNsYXNzLCBkZWFkbGluZSk7CisJCXJjID0gc2F0YV9saW5rX2hhcmRyZXNldChsaW5rLCB0aW1pbmcsIGRlYWRsaW5lICsgZXh0cmEsCisJCQkJCSAmb25saW5lLCBOVUxMKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCQlzYXRhX3Njcl9yZWFkKGxpbmssIFNDUl9TVEFUVVMsICZzc3RhdHVzKTsKKwkJaWYgKCFJU19HRU5fSShocHJpdikgJiYgKythdHRlbXB0cyA+PSA1ICYmIHNzdGF0dXMgPT0gMHgxMjEpIHsKKwkJCS8qIEZvcmNlIDEuNWdiL3MgbGluayBzcGVlZCBhbmQgdHJ5IGFnYWluICovCisJCQltdl9zZXR1cF9pZmN0bChtdl9hcF9iYXNlKGFwKSwgMCk7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzICsgSFosIGRlYWRsaW5lKSkKKwkJCQlleHRyYSA9IEhaOyAvKiBvbmx5IGV4dGVuZCBpdCBvbmNlLCBtYXggKi8KKwkJfQorCX0gd2hpbGUgKHNzdGF0dXMgIT0gMHgwICYmIHNzdGF0dXMgIT0gMHgxMTMgJiYgc3N0YXR1cyAhPSAweDEyMyk7CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbXZfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzc2VzKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKLQl1MzIgc2VycjsKLQotCS8qIHByaW50IGxpbmsgc3RhdHVzICovCi0Jc2F0YV9wcmludF9saW5rX3N0YXR1cyhsaW5rKTsKLQotCS8qIGNsZWFyIFNFcnJvciAqLwotCXNhdGFfc2NyX3JlYWQobGluaywgU0NSX0VSUk9SLCAmc2Vycik7Ci0Jc2F0YV9zY3Jfd3JpdGVfZmx1c2gobGluaywgU0NSX0VSUk9SLCBzZXJyKTsKLQotCS8qIGJhaWwgb3V0IGlmIG5vIGRldmljZSBpcyBwcmVzZW50ICovCi0JaWYgKGNsYXNzZXNbMF0gPT0gQVRBX0RFVl9OT05FICYmIGNsYXNzZXNbMV0gPT0gQVRBX0RFVl9OT05FKSB7Ci0JCURQUklOVEsoIkVYSVQsIG5vIGRldmljZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBzZXQgdXAgZGV2aWNlIGNvbnRyb2wgKi8KLQlpb3dyaXRlOChhcC0+Y3RsLCBhcC0+aW9hZGRyLmN0bF9hZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgbXZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9kb19laChhcCwgbXZfcHJlcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LAotCQkgIG12X2hhcmRyZXNldCwgbXZfcG9zdHJlc2V0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIG12X2VoX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMjgxMiwxOSArMjY5Nyw2IEBACiAJaHByaXYtPm9wcy0+ZW5hYmxlX2xlZHMoaHByaXYsIG1taW8pOwogCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhvc3QtPm5fcG9ydHM7IHBvcnQrKykgewotCQlpZiAoSVNfR0VOX0lJKGhwcml2KSkgewotCQkJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9wb3J0X2Jhc2UobW1pbywgcG9ydCk7Ci0KLQkJCXUzMiBpZmN0bCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSU5URVJGQUNFX0NUTCk7Ci0JCQlpZmN0bCB8PSAoMSA8PCA3KTsJCS8qIGVuYWJsZSBnZW4yaSBzcGVlZCAqLwotCQkJaWZjdGwgPSAoaWZjdGwgJiAweGZmZikgfCAweDliMTAwMDsgLyogZnJvbSBjaGlwIHNwZWMgKi8KLQkJCXdyaXRlbGZsKGlmY3RsLCBwb3J0X21taW8gKyBTQVRBX0lOVEVSRkFDRV9DVEwpOwotCQl9Ci0KLQkJaHByaXYtPm9wcy0+cGh5X2VycmF0YShocHJpdiwgbW1pbywgcG9ydCk7Ci0JfQotCi0JZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhvc3QtPm5fcG9ydHM7IHBvcnQrKykgewogCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbcG9ydF07CiAJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfcG9ydF9iYXNlKG1taW8sIHBvcnQpOwogCkBAIC0yOTAxLDYgKzI3NzMsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbXZfY29uZl9tYnVzX3dpbmRvd3Moc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsCisJCQkJIHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXdyaXRlbCgwLCBocHJpdi0+YmFzZSArIFdJTkRPV19DVFJMKGkpKTsKKwkJd3JpdGVsKDAsIGhwcml2LT5iYXNlICsgV0lORE9XX0JBU0UoaSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkcmFtLT5udW1fY3M7IGkrKykgeworCQlzdHJ1Y3QgbWJ1c19kcmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIGk7CisKKwkJd3JpdGVsKCgoY3MtPnNpemUgLSAxKSAmIDB4ZmZmZjAwMDApIHwKKwkJCShjcy0+bWJ1c19hdHRyIDw8IDgpIHwKKwkJCShkcmFtLT5tYnVzX2RyYW1fdGFyZ2V0X2lkIDw8IDQpIHwgMSwKKwkJCWhwcml2LT5iYXNlICsgV0lORE9XX0NUUkwoaSkpOworCQl3cml0ZWwoY3MtPmJhc2UsIGhwcml2LT5iYXNlICsgV0lORE9XX0JBU0UoaSkpOworCX0KK30KKwogLyoqCiAgKiAgICAgIG12X3BsYXRmb3JtX3Byb2JlIC0gaGFuZGxlIGEgcG9zaXRpdmUgcHJvYmUgb2YgYW4gc29jIE1hcnZlbGwKICAqICAgICAgaG9zdApAQCAtMjk1MSw5ICsyODQ0LDE2IEBACiAJaHByaXYtPm5fcG9ydHMgPSBuX3BvcnRzOwogCiAJaG9zdC0+aW9tYXAgPSBOVUxMOwotCWhwcml2LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlocHJpdi0+YmFzZSA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJCSAgIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWhwcml2LT5iYXNlIC09IE1WX1NBVEFIQzBfUkVHX0JBU0U7CiAKKwkvKgorCSAqIChSZS0pcHJvZ3JhbSBNQlVTIHJlbWFwcGluZyB3aW5kb3dzIGlmIHdlIGFyZSBhc2tlZCB0by4KKwkgKi8KKwlpZiAobXZfcGxhdGZvcm1fZGF0YS0+ZHJhbSAhPSBOVUxMKQorCQltdl9jb25mX21idXNfd2luZG93cyhocHJpdiwgbXZfcGxhdGZvcm1fZGF0YS0+ZHJhbSk7CisKIAlyYyA9IG12X2NyZWF0ZV9kbWFfcG9vbHMoaHByaXYsICZwZGV2LT5kZXYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtMjk4MywxMSArMjg4Myw4IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBocHJpdi0+YmFzZTsKIAogCWF0YV9ob3N0X2RldGFjaChob3N0KTsKLQlpb3VubWFwKGJhc2UpOwogCXJldHVybiAwOwogfQogCkBAIC0zMTk4LDYgKzMwOTUsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG12X3BjaV90YmwpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIG1vZHVsZV9wYXJhbShtc2ksIGludCwgMDQ0NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggZWQ1NDczYi4uMTA5YjA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwpAQCAtMzA5LDcgKzMwOSw4IEBACiBzdGF0aWMgdm9pZCBudl9uZjJfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIG52X2NrODA0X2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIG52X2NrODA0X3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1zdGF0aWMgdm9pZCBudl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGludCBudl9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiBzdGF0aWMgaW50IG52X2FkbWFfc2xhdmVfY29uZmlnKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiBzdGF0aWMgaW50IG52X2FkbWFfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgbnZfYWRtYV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwpAQCAtMzg1LDE1NyArMzg2LDYwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBudl9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG52X2FkbWFfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwlBVEFfTkNRX1NIVChEUlZfTkFNRSksCiAJLmNhbl9xdWV1ZQkJPSBOVl9BRE1BX01BWF9DUEJTLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IE5WX0FETUFfU0dUQkxfVE9UQUxfTEVOLAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCiAJLmRtYV9ib3VuZGFyeQkJPSBOVl9BRE1BX0RNQV9CT1VOREFSWSwKIAkuc2xhdmVfY29uZmlndXJlCT0gbnZfYWRtYV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBudl9zd25jcV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCUFUQV9OQ1FfU0hUKERSVl9OQU1FKSwKIAkuY2FuX3F1ZXVlCQk9IEFUQV9NQVhfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKIAkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCiAJLnNsYXZlX2NvbmZpZ3VyZQk9IG52X3N3bmNxX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBudl9nZW5lcmljX29wcyA9IHsKLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydAkJPSBhdGFfYm1kbWFfc3RhcnQsCi0JLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCi0JLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAotCS5xY19wcmVwCQk9IGF0YV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBudl9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfZ2VuZXJpY19vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLmhhcmRyZXNldAkJPSBudl9oYXJkcmVzZXQsCiAJLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG52X25mMl9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0JLmJtZG1hX3NldHVwCQk9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfbmYyX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJm52X2dlbmVyaWNfb3BzLAogCS5mcmVlemUJCQk9IG52X25mMl9mcmVlemUsCiAJLnRoYXcJCQk9IG52X25mMl90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IG52X2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQkuc2NyX3JlYWQJCT0gbnZfc2NyX3JlYWQsCi0JLnNjcl93cml0ZQkJPSBudl9zY3Jfd3JpdGUsCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3BvcnRfc3RhcnQsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfY2s4MDRfb3BzID0gewotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG52X2NrODA0X29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJm52X2dlbmVyaWNfb3BzLAogCS5mcmVlemUJCQk9IG52X2NrODA0X2ZyZWV6ZSwKIAkudGhhdwkJCT0gbnZfY2s4MDRfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBudl9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0JLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAotCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogCS5ob3N0X3N0b3AJCT0gbnZfY2s4MDRfaG9zdF9zdG9wLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG52X2FkbWFfb3BzID0gewotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IG52X2FkbWFfdGZfcmVhZCwKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBudl9hZG1hX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJm52X2dlbmVyaWNfb3BzLAorCiAJLmNoZWNrX2F0YXBpX2RtYQk9IG52X2FkbWFfY2hlY2tfYXRhcGlfZG1hLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCisJLnNmZl90Zl9yZWFkCQk9IG52X2FkbWFfdGZfcmVhZCwKIAkucWNfZGVmZXIJCT0gYXRhX3N0ZF9xY19kZWZlciwKIAkucWNfcHJlcAkJPSBudl9hZG1hX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IG52X2FkbWFfcWNfaXNzdWUsCisJLnNmZl9pcnFfY2xlYXIJCT0gbnZfYWRtYV9pcnFfY2xlYXIsCisKIAkuZnJlZXplCQkJPSBudl9hZG1hX2ZyZWV6ZSwKIAkudGhhdwkJCT0gbnZfYWRtYV90aGF3LAogCS5lcnJvcl9oYW5kbGVyCQk9IG52X2FkbWFfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBudl9hZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQkuaXJxX2NsZWFyCQk9IG52X2FkbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0JLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAotCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAorCiAJLnBvcnRfc3RhcnQJCT0gbnZfYWRtYV9wb3J0X3N0YXJ0LAogCS5wb3J0X3N0b3AJCT0gbnZfYWRtYV9wb3J0X3N0b3AsCiAjaWZkZWYgQ09ORklHX1BNCkBAIC01NDUsMjggKzQ0OSwxNyBAQAogCS5ob3N0X3N0b3AJCT0gbnZfYWRtYV9ob3N0X3N0b3AsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfc3duY3Ffb3BzID0gewotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCi0JLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfc3duY3Ffb3BzID0geworCS5pbmhlcml0cwkJPSAmbnZfZ2VuZXJpY19vcHMsCisKIAkucWNfZGVmZXIJCT0gYXRhX3N0ZF9xY19kZWZlciwKIAkucWNfcHJlcAkJPSBudl9zd25jcV9xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBudl9zd25jcV9xY19pc3N1ZSwKKwogCS5mcmVlemUJCQk9IG52X21jcDU1X2ZyZWV6ZSwKIAkudGhhdwkJCT0gbnZfbWNwNTVfdGhhdywKIAkuZXJyb3JfaGFuZGxlcgkJPSBudl9zd25jcV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0JLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAotCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAorCiAjaWZkZWYgQ09ORklHX1BNCiAJLnBvcnRfc3VzcGVuZAkJPSBudl9zd25jcV9wb3J0X3N1c3BlbmQsCiAJLnBvcnRfcmVzdW1lCQk9IG52X3N3bmNxX3BvcnRfcmVzdW1lLApAQCAtNTc0LDYzICs0NjcsNjEgQEAKIAkucG9ydF9zdGFydAkJPSBudl9zd25jcV9wb3J0X3N0YXJ0LAogfTsKIAorc3RydWN0IG52X3BpX3ByaXYgeworCWlycV9oYW5kbGVyX3QJCQlpcnFfaGFuZGxlcjsKKwlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlCSpzaHQ7Cit9OworCisjZGVmaW5lIE5WX1BJX1BSSVYoX2lycV9oYW5kbGVyLCBfc2h0KSBcCisJJihzdHJ1Y3QgbnZfcGlfcHJpdil7IC5pcnFfaGFuZGxlciA9IF9pcnFfaGFuZGxlciwgLnNodCA9IF9zaHQgfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbnZfcG9ydF9pbmZvW10gPSB7CiAJLyogZ2VuZXJpYyAqLwogCXsKLQkJLnNodAkJPSAmbnZfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkJLmxpbmtfZmxhZ3MJPSBBVEFfTEZMQUdfSFJTVF9UT19SRVNVTUUsCiAJCS5waW9fbWFzawk9IE5WX1BJT19NQVNLLAogCQkubXdkbWFfbWFzawk9IE5WX01XRE1BX01BU0ssCiAJCS51ZG1hX21hc2sJPSBOVl9VRE1BX01BU0ssCiAJCS5wb3J0X29wcwk9ICZudl9nZW5lcmljX29wcywKLQkJLmlycV9oYW5kbGVyCT0gbnZfZ2VuZXJpY19pbnRlcnJ1cHQsCisJCS5wcml2YXRlX2RhdGEJPSBOVl9QSV9QUklWKG52X2dlbmVyaWNfaW50ZXJydXB0LCAmbnZfc2h0KSwKIAl9LAogCS8qIG5mb3JjZTIvMyAqLwogCXsKLQkJLnNodAkJPSAmbnZfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkJLmxpbmtfZmxhZ3MJPSBBVEFfTEZMQUdfSFJTVF9UT19SRVNVTUUsCiAJCS5waW9fbWFzawk9IE5WX1BJT19NQVNLLAogCQkubXdkbWFfbWFzawk9IE5WX01XRE1BX01BU0ssCiAJCS51ZG1hX21hc2sJPSBOVl9VRE1BX01BU0ssCiAJCS5wb3J0X29wcwk9ICZudl9uZjJfb3BzLAotCQkuaXJxX2hhbmRsZXIJPSBudl9uZjJfaW50ZXJydXB0LAorCQkucHJpdmF0ZV9kYXRhCT0gTlZfUElfUFJJVihudl9uZjJfaW50ZXJydXB0LCAmbnZfc2h0KSwKIAl9LAogCS8qIGNrODA0ICovCiAJewotCQkuc2h0CQk9ICZudl9zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkubGlua19mbGFncwk9IEFUQV9MRkxBR19IUlNUX1RPX1JFU1VNRSwKIAkJLnBpb19tYXNrCT0gTlZfUElPX01BU0ssCiAJCS5td2RtYV9tYXNrCT0gTlZfTVdETUFfTUFTSywKIAkJLnVkbWFfbWFzawk9IE5WX1VETUFfTUFTSywKIAkJLnBvcnRfb3BzCT0gJm52X2NrODA0X29wcywKLQkJLmlycV9oYW5kbGVyCT0gbnZfY2s4MDRfaW50ZXJydXB0LAorCQkucHJpdmF0ZV9kYXRhCT0gTlZfUElfUFJJVihudl9jazgwNF9pbnRlcnJ1cHQsICZudl9zaHQpLAogCX0sCiAJLyogQURNQSAqLwogCXsKLQkJLnNodAkJPSAmbnZfYWRtYV9zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OQ1EsCi0JCS5saW5rX2ZsYWdzCT0gQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FLAogCQkucGlvX21hc2sJPSBOVl9QSU9fTUFTSywKIAkJLm13ZG1hX21hc2sJPSBOVl9NV0RNQV9NQVNLLAogCQkudWRtYV9tYXNrCT0gTlZfVURNQV9NQVNLLAogCQkucG9ydF9vcHMJPSAmbnZfYWRtYV9vcHMsCi0JCS5pcnFfaGFuZGxlcgk9IG52X2FkbWFfaW50ZXJydXB0LAorCQkucHJpdmF0ZV9kYXRhCT0gTlZfUElfUFJJVihudl9hZG1hX2ludGVycnVwdCwgJm52X2FkbWFfc2h0KSwKIAl9LAogCS8qIFNXTkNRICovCiAJewotCQkuc2h0CQk9ICZudl9zd25jcV9zaHQsCiAJCS5mbGFncwkgICAgICAgID0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19OQ1EsCi0JCS5saW5rX2ZsYWdzCT0gQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FLAogCQkucGlvX21hc2sJPSBOVl9QSU9fTUFTSywKIAkJLm13ZG1hX21hc2sJPSBOVl9NV0RNQV9NQVNLLAogCQkudWRtYV9tYXNrCT0gTlZfVURNQV9NQVNLLAogCQkucG9ydF9vcHMJPSAmbnZfc3duY3Ffb3BzLAotCQkuaXJxX2hhbmRsZXIJPSBudl9zd25jcV9pbnRlcnJ1cHQsCisJCS5wcml2YXRlX2RhdGEJPSBOVl9QSV9QUklWKG52X3N3bmNxX2ludGVycnVwdCwgJm52X3N3bmNxX3NodCksCiAJfSwKIH07CiAKQEAgLTY0MCw4ICs1MzEsOCBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG52X3BjaV90YmwpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCi1zdGF0aWMgaW50IGFkbWFfZW5hYmxlZCA9IDE7Ci1zdGF0aWMgaW50IHN3bmNxX2VuYWJsZWQ7CitzdGF0aWMgaW50IGFkbWFfZW5hYmxlZDsKK3N0YXRpYyBpbnQgc3duY3FfZW5hYmxlZCA9IDE7CiAKIHN0YXRpYyB2b2lkIG52X2FkbWFfcmVnaXN0ZXJfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewpAQCAtODM5LDcgKzczMCw3IEBACiAJICAgQURNQSBtb2RlIGNvdWxkIGFib3J0IG91dHN0YW5kaW5nIGNvbW1hbmRzLiAqLwogCW52X2FkbWFfcmVnaXN0ZXJfbW9kZShhcCk7CiAKLQlhdGFfdGZfcmVhZChhcCwgdGYpOworCWF0YV9zZmZfdGZfcmVhZChhcCwgdGYpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IG52X2FkbWFfdGZfdG9fY3BiKHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBfX2xlMTYgKmNwYikKQEAgLTkyOSw3ICs4MjAsNyBAQAogCQkJCQkibm90aWZpZXIgZm9yIHRhZyAlZCB3aXRoIG5vIGNtZD9cbiIsCiAJCQkJCWNwYl9udW0pOwogCQkJZWhpLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNOwotCQkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJCWF0YV9wb3J0X2ZyZWV6ZShhcCk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtOTUzLDEyICs4NDQsMTIgQEAKIAogCS8qIERFViBpbnRlcnJ1cHQgdy8gbm8gYWN0aXZlIHFjPyAqLwogCWlmICh1bmxpa2VseSghcWMgfHwgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkpIHsKLQkJYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJCWF0YV9zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJLyogaGFuZGxlIGludGVycnVwdCAqLwotCXJldHVybiBhdGFfaG9zdF9pbnRyKGFwLCBxYyk7CisJcmV0dXJuIGF0YV9zZmZfaG9zdF9pbnRyKGFwLCBxYyk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9hZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCkBAIC0xMTM3LDcgKzEwMjgsNyBAQAogCXUzMiBub3RpZmllcl9jbGVhcnNbMl07CiAKIAlpZiAocHAtPmZsYWdzICYgTlZfQURNQV9BVEFQSV9TRVRVUF9DT01QTEVURSkgewotCQlhdGFfYm1kbWFfaXJxX2NsZWFyKGFwKTsKKwkJYXRhX3NmZl9pcnFfY2xlYXIoYXApOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTY4LDcgKzEwNTksNyBAQAogCXN0cnVjdCBudl9hZG1hX3BvcnRfcHJpdiAqcHAgPSBxYy0+YXAtPnByaXZhdGVfZGF0YTsKIAogCWlmIChwcC0+ZmxhZ3MgJiBOVl9BRE1BX1BPUlRfUkVHSVNURVJfTU9ERSkKLQkJYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kKHFjKTsKKwkJYXRhX3NmZl9wb3N0X2ludGVybmFsX2NtZChxYyk7CiB9CiAKIHN0YXRpYyBpbnQgbnZfYWRtYV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0xNDQ1LDcgKzEzMzYsNyBAQAogCQlCVUdfT04oIShwcC0+ZmxhZ3MgJiBOVl9BRE1BX0FUQVBJX1NFVFVQX0NPTVBMRVRFKSAmJgogCQkJKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSk7CiAJCW52X2FkbWFfcmVnaXN0ZXJfbW9kZShxYy0+YXApOwotCQlhdGFfcWNfcHJlcChxYyk7CisJCWF0YV9zZmZfcWNfcHJlcChxYyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE1MDQsNyArMTM5NSw3IEBACiAJCUJVR19PTighKHBwLT5mbGFncyAmIE5WX0FETUFfQVRBUElfU0VUVVBfQ09NUExFVEUpICYmCiAJCQkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFNQVApKTsKIAkJbnZfYWRtYV9yZWdpc3Rlcl9tb2RlKHFjLT5hcCk7Ci0JCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIAl9IGVsc2UKIAkJbnZfYWRtYV9tb2RlKHFjLT5hcCk7CiAKQEAgLTE1NDUsMTEgKzE0MzYsMTEgQEAKIAogCQkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5saW5rLmFjdGl2ZV90YWcpOwogCQkJaWYgKHFjICYmICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkpCi0JCQkJaGFuZGxlZCArPSBhdGFfaG9zdF9pbnRyKGFwLCBxYyk7CisJCQkJaGFuZGxlZCArPSBhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpOwogCQkJZWxzZQogCQkJCS8vIE5vIHJlcXVlc3QgcGVuZGluZz8gIENsZWFyIGludGVycnVwdCBzdGF0dXMKIAkJCQkvLyBhbnl3YXksIGluIGNhc2UgdGhlcmUncyBvbmUgcGVuZGluZy4KLQkJCQlhcC0+b3BzLT5jaGVja19zdGF0dXMoYXApOworCQkJCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOwogCQl9CiAKIAl9CkBAIC0xNjgwLDcgKzE1NzEsNyBAQAogCW1hc2sgPSByZWFkbChtbWlvX2Jhc2UgKyBOVl9JTlRfRU5BQkxFX01DUDU1KTsKIAltYXNrICY9IH4oTlZfSU5UX0FMTF9NQ1A1NSA8PCBzaGlmdCk7CiAJd3JpdGVsKG1hc2ssIG1taW9fYmFzZSArIE5WX0lOVF9FTkFCTEVfTUNQNTUpOwotCWF0YV9ibWRtYV9mcmVlemUoYXApOworCWF0YV9zZmZfZnJlZXplKGFwKTsKIH0KIAogc3RhdGljIHZvaWQgbnZfbWNwNTVfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMTY5NCw3ICsxNTg1LDcgQEAKIAltYXNrID0gcmVhZGwobW1pb19iYXNlICsgTlZfSU5UX0VOQUJMRV9NQ1A1NSk7CiAJbWFzayB8PSAoTlZfSU5UX01BU0tfTUNQNTUgPDwgc2hpZnQpOwogCXdyaXRlbChtYXNrLCBtbWlvX2Jhc2UgKyBOVl9JTlRfRU5BQkxFX01DUDU1KTsKLQlhdGFfYm1kbWFfdGhhdyhhcCk7CisJYXRhX3NmZl90aGF3KGFwKTsKIH0KIAogc3RhdGljIGludCBudl9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLApAQCAtMTcwNiwxMyArMTU5Nyw3IEBACiAJICogc29tZSBjb250cm9sbGVycy4gIERvbid0IGNsYXNzaWZ5IG9uIGhhcmRyZXNldC4gIEZvciBtb3JlCiAJICogaW5mbywgc2VlIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzUyCiAJICovCi0JcmV0dXJuIHNhdGFfc3RkX2hhcmRyZXNldChsaW5rLCAmZHVtbXksIGRlYWRsaW5lKTsKLX0KLQotc3RhdGljIHZvaWQgbnZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgYXRhX3N0ZF9wcmVyZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsCi0JCQkgICBudl9oYXJkcmVzZXQsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlyZXR1cm4gc2F0YV9zZmZfaGFyZHJlc2V0KGxpbmssICZkdW1teSwgZGVhZGxpbmUpOwogfQogCiBzdGF0aWMgdm9pZCBudl9hZG1hX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTE3NjgsOCArMTY1Myw3IEBACiAJCXJlYWR3KG1taW8gKyBOVl9BRE1BX0NUTCk7CS8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLwogCX0KIAotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgYXRhX3N0ZF9wcmVyZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsCi0JCQkgICBudl9oYXJkcmVzZXQsIGF0YV9zdGRfcG9zdHJlc2V0KTsKKwlhdGFfc2ZmX2Vycm9yX2hhbmRsZXIoYXApOwogfQogCiBzdGF0aWMgdm9pZCBudl9zd25jcV9xY190b19kcShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQpAQCAtMTg1NSw3ICsxNzM5LDcgQEAKIAkJcHAtPmRoZmlzX2JpdHMsIHBwLT5kbWFmaXNfYml0cywgcHAtPnNkYmZpc19iaXRzKTsKIAogCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsICJBVEFfUkVHIDB4JVggRVJSX1JFRyAweCVYXG4iLAotCQkJYXAtPm9wcy0+Y2hlY2tfc3RhdHVzKGFwKSwKKwkJCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApLAogCQkJaW9yZWFkOChhcC0+aW9hZGRyLmVycm9yX2FkZHIpKTsKIAogCXNhY3RpdmUgPSByZWFkbChwcC0+c2FjdGl2ZV9ibG9jayk7CkBAIC0xODgxLDcgKzE3NjUsNyBAQAogCX0KIAogCW52X3N3bmNxX3BwX3JlaW5pdChhcCk7Ci0JYXAtPm9wcy0+aXJxX2NsZWFyKGFwKTsKKwlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKIAlfX2F0YV9ibWRtYV9zdG9wKGFwKTsKIAludl9zd25jcV9pcnFfY2xlYXIoYXAsIDB4ZmZmZik7CiB9CkBAIC0xODkyLDExICsxNzc2LDEwIEBACiAKIAlpZiAoYXAtPmxpbmsuc2FjdGl2ZSkgewogCQludl9zd25jcV9uY3Ffc3RvcChhcCk7Ci0JCWVoYy0+aS5hY3Rpb24gfD0gQVRBX0VIX0hBUkRSRVNFVDsKKwkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJfQogCi0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBhdGFfc3RkX3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwKLQkJCSAgIG52X2hhcmRyZXNldCwgYXRhX3N0ZF9wb3N0cmVzZXQpOworCWF0YV9zZmZfZXJyb3JfaGFuZGxlcihhcCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTIwNDIsNyArMTkyNSw3IEBACiBzdGF0aWMgdm9pZCBudl9zd25jcV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJaWYgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9OQ1EpIHsKLQkJYXRhX3FjX3ByZXAocWMpOworCQlhdGFfc2ZmX3FjX3ByZXAocWMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMTA0LDggKzE5ODcsOCBAQAogCXBwLT5kbWFmaXNfYml0cyAmPSB+KDEgPDwgcWMtPnRhZyk7CiAJcHAtPnFjX2FjdGl2ZSB8PSAoMHgxIDw8IHFjLT50YWcpOwogCi0JYXAtPm9wcy0+dGZfbG9hZChhcCwgJnFjLT50Zik7CSAvKiBsb2FkIHRmIHJlZ2lzdGVycyAqLwotCWFwLT5vcHMtPmV4ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7CisJYXAtPm9wcy0+c2ZmX3RmX2xvYWQoYXAsICZxYy0+dGYpOwkgLyogbG9hZCB0ZiByZWdpc3RlcnMgKi8KKwlhcC0+b3BzLT5zZmZfZXhlY19jb21tYW5kKGFwLCAmcWMtPnRmKTsKIAogCURQUklOVEsoIklzc3VlZCB0YWcgJXVcbiIsIHFjLT50YWcpOwogCkBAIC0yMTE4LDcgKzIwMDEsNyBAQAogCXN0cnVjdCBudl9zd25jcV9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAogCWlmIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfTkNRKQotCQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCQlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiAKIAlEUFJJTlRLKCJFbnRlclxuIik7CiAKQEAgLTIxNzMsMTEgKzIwNTYsMTEgQEAKIAkJYXRhX2VoaV9jbGVhcl9kZXNjKGVoaSk7CiAJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkJNRE1BIHN0YXQgMHgleCIsIGhvc3Rfc3RhdCk7CiAJCWVoaS0+ZXJyX21hc2sgfD0gQUNfRVJSX0hPU1RfQlVTOwotCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOworCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWFwLT5vcHMtPmlycV9jbGVhcihhcCk7CisJYXAtPm9wcy0+c2ZmX2lycV9jbGVhcihhcCk7CiAJX19hdGFfYm1kbWFfc3RvcChhcCk7CiAKIAlzYWN0aXZlID0gcmVhZGwocHAtPnNhY3RpdmVfYmxvY2spOwpAQCAtMjE4OCw3ICsyMDcxLDcgQEAKIAkJYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLCAiaWxsZWdhbCBTV05DUTpxY19hY3RpdmUgdHJhbnNpdGlvbiIKIAkJCQkgICIoJTA4eC0+JTA4eCkiLCBwcC0+cWNfYWN0aXZlLCBzYWN0aXZlKTsKIAkJZWhpLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNOwotCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOworCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9RVUVVRTsgaSsrKSB7CkBAIC0yMjk5LDcgKzIxODIsNyBAQAogCXU4IGF0YV9zdGF0OwogCWludCByYyA9IDA7CiAKLQlhdGFfc3RhdCA9IGFwLT5vcHMtPmNoZWNrX3N0YXR1cyhhcCk7CisJYXRhX3N0YXQgPSBhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAludl9zd25jcV9pcnFfY2xlYXIoYXAsIGZpcyk7CiAJaWYgKCFmaXMpCiAJCXJldHVybjsKQEAgLTIzMjQsNyArMjIwNyw3IEBACiAJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIkF0YSBlcnJvci4gZmlzOjB4JVgiLCBmaXMpOwogCQllaGktPmVycl9tYXNrIHw9IEFDX0VSUl9ERVY7CiAJCWVoaS0+c2Vycm9yIHw9IHNlcnJvcjsKLQkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQlhdGFfcG9ydF9mcmVlemUoYXApOwogCQlyZXR1cm47CiAJfQpAQCAtMjM1NiwxMyArMjIzOSwxMyBAQAogCQlpZiAocHAtPm5jcV9mbGFncyAmIChuY3Ffc2F3X3NkYiB8IG5jcV9zYXdfYmFja291dCkpIHsKIAkJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgImlsbGVnYWwgZmlzIHRyYW5zYWN0aW9uIik7CiAJCQllaGktPmVycl9tYXNrIHw9IEFDX0VSUl9IU007Ci0JCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOworCQkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQkJZ290byBpcnFfZXJyb3I7CiAJCX0KIAogCQlpZiAoIShmaXMgJiBOVl9TV05DUV9JUlFfRE1BU0VUVVApICYmCiAJCSAgICAhKHBwLT5uY3FfZmxhZ3MgJiBuY3Ffc2F3X2RtYXMpKSB7Ci0JCQlhdGFfc3RhdCA9IGFwLT5vcHMtPmNoZWNrX3N0YXR1cyhhcCk7CisJCQlhdGFfc3RhdCA9IGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOwogCQkJaWYgKGF0YV9zdGF0ICYgQVRBX0JVU1kpCiAJCQkJZ290byBpcnFfZXhpdDsKIApAQCAtMjQyOSw2ICsyMzEyLDcgQEAKIHsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7IE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3QgbnZfcGlfcHJpdiAqaXByaXY7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXN0cnVjdCBudl9ob3N0X3ByaXYgKmhwcml2OwogCWludCByYzsKQEAgLTI0NjUsNyArMjM0OSw4IEBACiAJfQogCiAJcHBpWzBdID0gJm52X3BvcnRfaW5mb1t0eXBlXTsKLQlyYyA9IGF0YV9wY2lfcHJlcGFyZV9zZmZfaG9zdChwZGV2LCBwcGksICZob3N0KTsKKwlpcHJpdiA9IHBwaVswXS0+cHJpdmF0ZV9kYXRhOworCXJjID0gYXRhX3BjaV9zZmZfcHJlcGFyZV9ob3N0KHBkZXYsIHBwaSwgJmhvc3QpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yNTAzLDggKzIzODgsOCBAQAogCQludl9zd25jcV9ob3N0X2luaXQoaG9zdCk7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBwcGlbMF0tPmlycV9oYW5kbGVyLAotCQkJCSBJUlFGX1NIQVJFRCwgcHBpWzBdLT5zaHQpOworCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIGlwcml2LT5pcnFfaGFuZGxlciwKKwkJCQkgSVJRRl9TSEFSRUQsIGlwcml2LT5zaHQpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0yNjAwLDUgKzI0ODUsNSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGFkbWEsIGFkbWFfZW5hYmxlZCwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFkbWEsICJFbmFibGUgdXNlIG9mIEFETUEgKERlZmF1bHQ6IHRydWUpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc3duY3EsIHN3bmNxX2VuYWJsZWQsIGJvb2wsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzd25jcSwgIkVuYWJsZSB1c2Ugb2YgU1dOQ1EgKERlZmF1bHQ6IGZhbHNlKSIpOworTU9EVUxFX1BBUk1fREVTQyhzd25jcSwgIkVuYWJsZSB1c2Ugb2YgU1dOQ1EgKERlZmF1bHQ6IHRydWUpIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKaW5kZXggZjI1MWE1Zi4uNWExMGRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJzYXRhX3Byb21pc2UuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9wcm9taXNlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4xMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMTIiCiAKIGVudW0gewogCVBEQ19NQVhfUE9SVFMJCT0gNCwKQEAgLTE0MywxMDEgKzE0Myw1NyBAQAogc3RhdGljIGludCBwZGNfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIGludCBwZGNfb2xkX3NhdGFfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgcGRjX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGRjX3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdW5zaWduZWQgaW50IHBkY19xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyB2b2lkIHBkY19mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgdm9pZCBwZGNfc2F0YV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBwZGNfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIHBkY19wYXRhX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1zdGF0aWMgdm9pZCBwZGNfc2F0YV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHZvaWQgcGRjX3NhdGFfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyB2b2lkIHBkY19lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgcGRjX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIGludCBwZGNfcGF0YV9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IHBkY19zYXRhX2NhYmxlX2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGRjX2F0YV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAorCUFUQV9CQVNFX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQkJPSBQRENfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAogCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkY19zYXRhX29wcyA9IHsKLQkudGZfbG9hZAkJPSBwZGNfdGZfbG9hZF9tbWlvLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IHBkY19leGVjX2NvbW1hbmRfbW1pbywKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjX2NvbW1vbl9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCisJLnNmZl90Zl9sb2FkCQk9IHBkY190Zl9sb2FkX21taW8sCisJLnNmZl9leGVjX2NvbW1hbmQJPSBwZGNfZXhlY19jb21tYW5kX21taW8sCiAJLmNoZWNrX2F0YXBpX2RtYQk9IHBkY19jaGVja19hdGFwaV9kbWEsCi0KIAkucWNfcHJlcAkJPSBwZGNfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gcGRjX3FjX2lzc3VlX3Byb3QsCi0JLmZyZWV6ZQkJCT0gcGRjX2ZyZWV6ZSwKLQkudGhhdwkJCT0gcGRjX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gcGRjX3NhdGFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBwZGNfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmNhYmxlX2RldGVjdAkJPSBwZGNfc2F0YV9jYWJsZV9kZXRlY3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCS5pcnFfY2xlYXIJCT0gcGRjX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAorCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWUsCisJLnNmZl9pcnFfY2xlYXIJCT0gcGRjX2lycV9jbGVhciwKIAorCS5wb3N0X2ludGVybmFsX2NtZAk9IHBkY19wb3N0X2ludGVybmFsX2NtZCwKKwkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfZXJyb3JfaGFuZGxlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwZGNfc2F0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZwZGNfY29tbW9uX29wcywKKwkuY2FibGVfZGV0ZWN0CQk9IHBkY19zYXRhX2NhYmxlX2RldGVjdCwKKwkuZnJlZXplCQkJPSBwZGNfc2F0YV9mcmVlemUsCisJLnRoYXcJCQk9IHBkY19zYXRhX3RoYXcsCiAJLnNjcl9yZWFkCQk9IHBkY19zYXRhX3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gcGRjX3NhdGFfc2NyX3dyaXRlLAogCS5wb3J0X3N0YXJ0CQk9IHBkY19zYXRhX3BvcnRfc3RhcnQsCiB9OwogCiAvKiBGaXJzdC1nZW5lcmF0aW9uIGNoaXBzIG5lZWQgYSBtb3JlIHJlc3RyaWN0aXZlIC0+Y2hlY2tfYXRhcGlfZG1hIG9wICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjX29sZF9zYXRhX29wcyA9IHsKLQkudGZfbG9hZAkJPSBwZGNfdGZfbG9hZF9tbWlvLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IHBkY19leGVjX2NvbW1hbmRfbW1pbywKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjX29sZF9zYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJnBkY19zYXRhX29wcywKIAkuY2hlY2tfYXRhcGlfZG1hCT0gcGRjX29sZF9zYXRhX2NoZWNrX2F0YXBpX2RtYSwKLQotCS5xY19wcmVwCQk9IHBkY19xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWVfcHJvdCwKLQkuZnJlZXplCQkJPSBwZGNfZnJlZXplLAotCS50aGF3CQkJPSBwZGNfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfc2F0YV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IHBkY19wb3N0X2ludGVybmFsX2NtZCwKLQkuY2FibGVfZGV0ZWN0CQk9IHBkY19zYXRhX2NhYmxlX2RldGVjdCwKLQkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0JLmlycV9jbGVhcgkJPSBwZGNfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkuc2NyX3JlYWQJCT0gcGRjX3NhdGFfc2NyX3JlYWQsCi0JLnNjcl93cml0ZQkJPSBwZGNfc2F0YV9zY3Jfd3JpdGUsCi0JLnBvcnRfc3RhcnQJCT0gcGRjX3NhdGFfcG9ydF9zdGFydCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwZGNfcGF0YV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gcGRjX3RmX2xvYWRfbW1pbywKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBwZGNfZXhlY19jb21tYW5kX21taW8sCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5jaGVja19hdGFwaV9kbWEJPSBwZGNfY2hlY2tfYXRhcGlfZG1hLAotCi0JLnFjX3ByZXAJCT0gcGRjX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IHBkY19xY19pc3N1ZV9wcm90LAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkY19wYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJnBkY19jb21tb25fb3BzLAorCS5jYWJsZV9kZXRlY3QJCT0gcGRjX3BhdGFfY2FibGVfZGV0ZWN0LAogCS5mcmVlemUJCQk9IHBkY19mcmVlemUsCiAJLnRoYXcJCQk9IHBkY190aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IHBkY19wYXRhX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gcGRjX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJCT0gcGRjX3BhdGFfY2FibGVfZGV0ZWN0LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQkuaXJxX2NsZWFyCQk9IHBkY19pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQogCS5wb3J0X3N0YXJ0CQk9IHBkY19jb21tb25fcG9ydF9zdGFydCwKIH07CiAKQEAgLTQ0OSw3ICs0MDUsNyBAQAogCXU4ICpjZGIgPSBxYy0+Y2RiOwogCXN0cnVjdCBwZGNfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTggKmJ1ZiA9IHBwLT5wa3Q7Ci0JdTMyICpidWYzMiA9ICh1MzIgKikgYnVmOworCV9fbGUzMiAqYnVmMzIgPSAoX19sZTMyICopIGJ1ZjsKIAl1bnNpZ25lZCBpbnQgZGV2X3NlbCwgZmVhdHVyZTsKIAogCS8qIHNldCBjb250cm9sIGJpdHMgKGJ5dGUgMCksIHplcm8gZGVsYXkgc2VxIGlkIChieXRlIDMpLApAQCAtNjMxLDYgKzU4Nyw0MSBAQAogCX0KIH0KIAorc3RhdGljIGludCBwZGNfaXNfc2F0YWlpX3R4NCh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbWFzayA9IFBEQ19GTEFHX0dFTl9JSSB8IFBEQ19GTEFHXzRfUE9SVFM7CisJcmV0dXJuIChmbGFncyAmIG1hc2spID09IG1hc2s7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGRjX3BvcnRfbm9fdG9fYXRhX25vKHVuc2lnbmVkIGludCBwb3J0X25vLAorCQkJCQkgIGludCBpc19zYXRhaWlfdHg0KQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhdGFpaV90eDRfcG9ydF9yZW1hcFs0XSA9IHsgMywgMSwgMCwgMn07CisJcmV0dXJuIGlzX3NhdGFpaV90eDQgPyBzYXRhaWlfdHg0X3BvcnRfcmVtYXBbcG9ydF9ub10gOiBwb3J0X25vOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBkY19zYXRhX25yX3BvcnRzKGNvbnN0IHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuIChhcC0+ZmxhZ3MgJiBQRENfRkxBR180X1BPUlRTKSA/IDQgOiAyOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBkY19zYXRhX2F0YV9wb3J0X3RvX2F0YV9ubyhjb25zdCBzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWNvbnN0IHN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGFwLT5ob3N0OworCXVuc2lnbmVkIGludCBucl9wb3J0cyA9IHBkY19zYXRhX25yX3BvcnRzKGFwKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvcihpID0gMDsgaSA8IG5yX3BvcnRzICYmIGhvc3QtPnBvcnRzW2ldICE9IGFwOyArK2kpCisJCTsKKwlCVUdfT04oaSA+PSBucl9wb3J0cyk7CisJcmV0dXJuIHBkY19wb3J0X25vX3RvX2F0YV9ubyhpLCBwZGNfaXNfc2F0YWlpX3R4NChhcC0+ZmxhZ3MpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwZGNfc2F0YV9ob3RwbHVnX29mZnNldChjb25zdCBzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiAoYXAtPmZsYWdzICYgUERDX0ZMQUdfR0VOX0lJKSA/IFBEQzJfU0FUQV9QTFVHX0NTUiA6IFBEQ19TQVRBX1BMVUdfQ1NSOworfQorCiBzdGF0aWMgdm9pZCBwZGNfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKQEAgLTY0Myw2ICs2MzQsMjkgQEAKIAlyZWFkbChtbWlvICsgUERDX0NUTFNUQVQpOyAvKiBmbHVzaCAqLwogfQogCitzdGF0aWMgdm9pZCBwZGNfc2F0YV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBhcC0+aG9zdDsKKwl2b2lkIF9faW9tZW0gKmhvc3RfbW1pbyA9IGhvc3QtPmlvbWFwW1BEQ19NTUlPX0JBUl07CisJdW5zaWduZWQgaW50IGhvdHBsdWdfb2Zmc2V0ID0gcGRjX3NhdGFfaG90cGx1Z19vZmZzZXQoYXApOworCXVuc2lnbmVkIGludCBhdGFfbm8gPSBwZGNfc2F0YV9hdGFfcG9ydF90b19hdGFfbm8oYXApOworCXUzMiBob3RwbHVnX3N0YXR1czsKKworCS8qIERpc2FibGUgaG90cGx1ZyBldmVudHMgb24gdGhpcyBwb3J0LgorCSAqCisJICogTG9ja2luZzoKKwkgKiAxKSBob3RwbHVnIHJlZ2lzdGVyIGFjY2Vzc2VzIG11c3QgYmUgc2VyaWFsaXNlZCB2aWEgaG9zdC0+bG9jaworCSAqIDIpIGFwLT5sb2NrID09ICZhcC0+aG9zdC0+bG9jaworCSAqIDMpIC0+ZnJlZXplKCkgYW5kIC0+dGhhdygpIGFyZSBjYWxsZWQgd2l0aCBhcC0+bG9jayBoZWxkCisJICovCisJaG90cGx1Z19zdGF0dXMgPSByZWFkbChob3N0X21taW8gKyBob3RwbHVnX29mZnNldCk7CisJaG90cGx1Z19zdGF0dXMgfD0gMHgxMSA8PCAoYXRhX25vICsgMTYpOworCXdyaXRlbChob3RwbHVnX3N0YXR1cywgaG9zdF9tbWlvICsgaG90cGx1Z19vZmZzZXQpOworCXJlYWRsKGhvc3RfbW1pbyArIGhvdHBsdWdfb2Zmc2V0KTsgLyogZmx1c2ggKi8KKworCXBkY19mcmVlemUoYXApOworfQorCiBzdGF0aWMgdm9pZCBwZGNfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXZvaWQgX19pb21lbSAqbW1pbyA9IGFwLT5pb2FkZHIuY21kX2FkZHI7CkBAIC02NTgsMjQgKzY3MiwzMiBAQAogCXJlYWRsKG1taW8gKyBQRENfQ1RMU1RBVCk7IC8qIGZsdXNoICovCiB9CiAKLXN0YXRpYyB2b2lkIHBkY19jb21tb25fZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBhdGFfcmVzZXRfZm5fdCBoYXJkcmVzZXQpCitzdGF0aWMgdm9pZCBwZGNfc2F0YV90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gYXAtPmhvc3Q7CisJdm9pZCBfX2lvbWVtICpob3N0X21taW8gPSBob3N0LT5pb21hcFtQRENfTU1JT19CQVJdOworCXVuc2lnbmVkIGludCBob3RwbHVnX29mZnNldCA9IHBkY19zYXRhX2hvdHBsdWdfb2Zmc2V0KGFwKTsKKwl1bnNpZ25lZCBpbnQgYXRhX25vID0gcGRjX3NhdGFfYXRhX3BvcnRfdG9fYXRhX25vKGFwKTsKKwl1MzIgaG90cGx1Z19zdGF0dXM7CisKKwlwZGNfdGhhdyhhcCk7CisKKwkvKiBFbmFibGUgaG90cGx1ZyBldmVudHMgb24gdGhpcyBwb3J0LgorCSAqIExvY2tpbmc6IHNlZSBwZGNfc2F0YV9mcmVlemUoKS4KKwkgKi8KKwlob3RwbHVnX3N0YXR1cyA9IHJlYWRsKGhvc3RfbW1pbyArIGhvdHBsdWdfb2Zmc2V0KTsKKwlob3RwbHVnX3N0YXR1cyB8PSAweDExIDw8IGF0YV9ubzsKKwlob3RwbHVnX3N0YXR1cyAmPSB+KDB4MTEgPDwgKGF0YV9ubyArIDE2KSk7CisJd3JpdGVsKGhvdHBsdWdfc3RhdHVzLCBob3N0X21taW8gKyBob3RwbHVnX29mZnNldCk7CisJcmVhZGwoaG9zdF9tbWlvICsgaG90cGx1Z19vZmZzZXQpOyAvKiBmbHVzaCAqLworfQorCitzdGF0aWMgdm9pZCBwZGNfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCWlmICghKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKSkKIAkJcGRjX3Jlc2V0X3BvcnQoYXApOwogCi0JLyogcGVyZm9ybSByZWNvdmVyeSAqLwotCWF0YV9kb19laChhcCwgYXRhX3N0ZF9wcmVyZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIGhhcmRyZXNldCwKLQkJICBhdGFfc3RkX3Bvc3RyZXNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBkY19wYXRhX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlwZGNfY29tbW9uX2Vycm9yX2hhbmRsZXIoYXAsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBwZGNfc2F0YV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JcGRjX2NvbW1vbl9lcnJvcl9oYW5kbGVyKGFwLCBzYXRhX3N0ZF9oYXJkcmVzZXQpOworCWF0YV9zdGRfZXJyb3JfaGFuZGxlcihhcCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBkY19wb3N0X2ludGVybmFsX2NtZChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQpAQCAtNzY1LDE5ICs3ODcsNiBAQAogCXJlYWRsKG1taW8gKyBQRENfSU5UX1NFUU1BU0spOwogfQogCi1zdGF0aWMgaW50IHBkY19pc19zYXRhaWlfdHg0KHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBtYXNrID0gUERDX0ZMQUdfR0VOX0lJIHwgUERDX0ZMQUdfNF9QT1JUUzsKLQlyZXR1cm4gKGZsYWdzICYgbWFzaykgPT0gbWFzazsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwZGNfcG9ydF9ub190b19hdGFfbm8odW5zaWduZWQgaW50IHBvcnRfbm8sCi0JCQkJCSAgaW50IGlzX3NhdGFpaV90eDQpCi17Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2F0YWlpX3R4NF9wb3J0X3JlbWFwWzRdID0geyAzLCAxLCAwLCAyfTsKLQlyZXR1cm4gaXNfc2F0YWlpX3R4NCA/IHNhdGFpaV90eDRfcG9ydF9yZW1hcFtwb3J0X25vXSA6IHBvcnRfbm87Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBwZGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfaW5zdGFuY2U7CkBAIC03OTksNiArODA4LDggQEAKIAogCW1taW9fYmFzZSA9IGhvc3QtPmlvbWFwW1BEQ19NTUlPX0JBUl07CiAKKwlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCiAJLyogcmVhZCBhbmQgY2xlYXIgaG90cGx1ZyBmbGFncyBmb3IgYWxsIHBvcnRzICovCiAJaWYgKGhvc3QtPnBvcnRzWzBdLT5mbGFncyAmIFBEQ19GTEFHX0dFTl9JSSkKIAkJaG90cGx1Z19vZmZzZXQgPSBQREMyX1NBVEFfUExVR19DU1I7CkBAIC04MTQsMTEgKzgyNSw5IEBACiAKIAlpZiAobWFzayA9PSAweGZmZmZmZmZmICYmIGhvdHBsdWdfc3RhdHVzID09IDApIHsKIAkJVlBSSU5USygiUVVJQ0sgRVhJVCAyXG4iKTsKLQkJcmV0dXJuIElSUV9OT05FOworCQlnb3RvIGRvbmVfaXJxOwogCX0KIAotCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7Ci0KIAltYXNrICY9IDB4ZmZmZjsJCS8qIG9ubHkgMTYgdGFncyBwb3NzaWJsZSAqLwogCWlmIChtYXNrID09IDAgJiYgaG90cGx1Z19zdGF0dXMgPT0gMCkgewogCQlWUFJJTlRLKCJRVUlDSyBFWElUIDNcbiIpOwpAQCAtODg1LDcgKzg5NCw3IEBACiAJcmVhZGwoYXAtPmlvYWRkci5jbWRfYWRkciArIFBEQ19QS1RfU1VCTUlUKTsgLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBwZGNfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHVuc2lnbmVkIGludCBwZGNfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgewogCWNhc2UgQVRBUElfUFJPVF9OT0RBVEE6CkBAIC05MDUsMjAgKzkxNCwyMCBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gYXRhX3FjX2lzc3VlX3Byb3QocWMpOworCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogc3RhdGljIHZvaWQgcGRjX3RmX2xvYWRfbW1pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKIHsKIAlXQVJOX09OKHRmLT5wcm90b2NvbCA9PSBBVEFfUFJPVF9ETUEgfHwgdGYtPnByb3RvY29sID09IEFUQVBJX1BST1RfRE1BKTsKLQlhdGFfdGZfbG9hZChhcCwgdGYpOworCWF0YV9zZmZfdGZfbG9hZChhcCwgdGYpOwogfQogCiBzdGF0aWMgdm9pZCBwZGNfZXhlY19jb21tYW5kX21taW8oc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQogewogCVdBUk5fT04odGYtPnByb3RvY29sID09IEFUQV9QUk9UX0RNQSB8fCB0Zi0+cHJvdG9jb2wgPT0gQVRBUElfUFJPVF9ETUEpOwotCWF0YV9leGVjX2NvbW1hbmQoYXAsIHRmKTsKKwlhdGFfc2ZmX2V4ZWNfY29tbWFuZChhcCwgdGYpOwogfQogCiBzdGF0aWMgaW50IHBkY19jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYwppbmRleCA5MWNjMTJjLi4xNjAwMTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCkBAIC0xMjEsNTAgKzEyMSwzOCBAQAogc3RhdGljIGludCBxc19jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdm9pZCBxc19ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHU4IHFzX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIHFzX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHFzX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHFzX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IHFzX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiBzdGF0aWMgdm9pZCBxc19lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBxc19hdGFfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKKwlBVEFfQkFTRV9TSFQoRFJWX05BTUUpLAogCS5zZ190YWJsZXNpemUJCT0gUVNfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKIAkuZG1hX2JvdW5kYXJ5CQk9IFFTX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHFzX2F0YV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHFzX2F0YV9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCiAJLmNoZWNrX2F0YXBpX2RtYQk9IHFzX2NoZWNrX2F0YXBpX2RtYSwKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5xY19wcmVwCQk9IHFzX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IHFzX3FjX2lzc3VlLAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQkuZnJlZXplCQkJPSBxc19mcmVlemUsCi0JLnRoYXcJCQk9IHFzX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gcXNfZXJyb3JfaGFuZGxlciwKLQkuaXJxX2NsZWFyCQk9IHFzX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCS5zY3JfcmVhZAkJPSBxc19zY3JfcmVhZCwKLQkuc2NyX3dyaXRlCQk9IHFzX3Njcl93cml0ZSwKLQkucG9ydF9zdGFydAkJPSBxc19wb3J0X3N0YXJ0LAotCS5ob3N0X3N0b3AJCT0gcXNfaG9zdF9zdG9wLAogCS5ibWRtYV9zdG9wCQk9IHFzX2JtZG1hX3N0b3AsCiAJLmJtZG1hX3N0YXR1cwkJPSBxc19ibWRtYV9zdGF0dXMsCisJLnFjX3ByZXAJCT0gcXNfcWNfcHJlcCwKKwkucWNfaXNzdWUJCT0gcXNfcWNfaXNzdWUsCisKKwkuZnJlZXplCQkJPSBxc19mcmVlemUsCisJLnRoYXcJCQk9IHFzX3RoYXcsCisJLnByZXJlc2V0CQk9IHFzX3ByZXJlc2V0LAorCS5zb2Z0cmVzZXQJCT0gQVRBX09QX05VTEwsCisJLmVycm9yX2hhbmRsZXIJCT0gcXNfZXJyb3JfaGFuZGxlciwKKwkucG9zdF9pbnRlcm5hbF9jbWQJPSBBVEFfT1BfTlVMTCwKKworCS5zY3JfcmVhZAkJPSBxc19zY3JfcmVhZCwKKwkuc2NyX3dyaXRlCQk9IHFzX3Njcl93cml0ZSwKKworCS5wb3J0X3N0YXJ0CQk9IHFzX3BvcnRfc3RhcnQsCisJLmhvc3Rfc3RvcAkJPSBxc19ob3N0X3N0b3AsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gcXNfcG9ydF9pbmZvW10gPSB7CkBAIC0yMTEsMTEgKzE5OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHFzX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCS8qIG5vdGhpbmcgKi8KLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHFzX2VudGVyX3JlZ19tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJdTggX19pb21lbSAqY2hhbiA9IHFzX21taW9fYmFzZShhcC0+aG9zdCkgKyAoYXAtPnBvcnRfbm8gKiAweDQwMDApOwpAQCAtMjU2LDcgKzIzOSw3IEBACiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOwogCiAJcXNfcmVzZXRfY2hhbm5lbF9sb2dpYyhhcCk7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOworCXJldHVybiBhdGFfc2ZmX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKIH0KIAogc3RhdGljIGludCBxc19zY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgKnZhbCkKQEAgLTI3MCw4ICsyNTMsNyBAQAogc3RhdGljIHZvaWQgcXNfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXFzX2VudGVyX3JlZ19tb2RlKGFwKTsKLQlhdGFfZG9fZWgoYXAsIHFzX3ByZXJlc2V0LCBOVUxMLCBzYXRhX3N0ZF9oYXJkcmVzZXQsCi0JCSAgYXRhX3N0ZF9wb3N0cmVzZXQpOworCWF0YV9zdGRfZXJyb3JfaGFuZGxlcihhcCk7CiB9CiAKIHN0YXRpYyBpbnQgcXNfc2NyX3dyaXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpCkBAIC0zMjEsNyArMzAzLDcgQEAKIAogCXFzX2VudGVyX3JlZ19tb2RlKHFjLT5hcCk7CiAJaWYgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9ETUEpIHsKLQkJYXRhX3FjX3ByZXAocWMpOworCQlhdGFfc2ZmX3FjX3ByZXAocWMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zODAsNyArMzYyLDcgQEAKIAl9CiAKIAlwcC0+c3RhdGUgPSBxc19zdGF0ZV9tbWlvOwotCXJldHVybiBhdGFfcWNfaXNzdWVfcHJvdChxYyk7CisJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCiBzdGF0aWMgdm9pZCBxc19kb19vcl9kaWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdTggc3RhdHVzKQpAQCAtNDY5LDcgKzQ1MSw3IEBACiAJCQkJICogYW5kIHByZXRlbmQgd2Uga25ldyBpdCB3YXMgb3Vycy4uICh1Z2gpLgogCQkJCSAqIFRoaXMgZG9lcyBub3QgYWZmZWN0IHBhY2tldCBtb2RlLgogCQkJCSAqLwotCQkJCWF0YV9jaGVja19zdGF0dXMoYXApOworCQkJCWF0YV9zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAkJCQloYW5kbGVkID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTQ3Nyw3ICs0NTksNyBAQAogCQkJaWYgKCFwcCB8fCBwcC0+c3RhdGUgIT0gcXNfc3RhdGVfbW1pbykKIAkJCQljb250aW51ZTsKIAkJCWlmICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkKLQkJCQloYW5kbGVkIHw9IGF0YV9ob3N0X2ludHIoYXAsIHFjKTsKKwkJCQloYW5kbGVkIHw9IGF0YV9zZmZfaG9zdF9pbnRyKGFwLCBxYyk7CiAJCX0KIAl9CiAJcmV0dXJuIGhhbmRsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwuYwppbmRleCAwYjgxOTFiLi44OGJmNDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKQEAgLTYwLDcgKzYwLDYgQEAKIAogCVNJTF9ERkxfUE9SVF9GTEFHUwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTywKLQlTSUxfREZMX0xJTktfRkxBR1MJPSBBVEFfTEZMQUdfSFJTVF9UT19SRVNVTUUsCiAKIAkvKgogCSAqIENvbnRyb2xsZXIgSURzCkBAIC0xNjgsNTQgKzE2NywyMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2lsX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpbF9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lsX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuZGV2X2NvbmZpZwkJPSBzaWxfZGV2X2NvbmZpZywKLQkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKIAkuc2V0X21vZGUJCT0gc2lsX3NldF9tb2RlLAotCS5ibWRtYV9zZXR1cCAgICAgICAgICAgID0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAgICAgICAgICAgID0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAogCS5mcmVlemUJCQk9IHNpbF9mcmVlemUsCiAJLnRoYXcJCQk9IHNpbF90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKIAkuc2NyX3JlYWQJCT0gc2lsX3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gc2lsX3Njcl93cml0ZSwKLQkucG9ydF9zdGFydAkJPSBhdGFfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaWxfcG9ydF9pbmZvW10gPSB7CiAJLyogc2lsXzMxMTIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFLAotCQkubGlua19mbGFncwk9IFNJTF9ERkxfTElOS19GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0yMjUsNyArMTkzLDYgQEAKIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFIHwKIAkJCQkgIFNJTF9GTEFHX05PX1NBVEFfSVJRLAotCQkubGlua19mbGFncwk9IFNJTF9ERkxfTElOS19GTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0yMzQsNyArMjAxLDYgQEAKIAkvKiBzaWxfMzUxMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX1JFUlJfT05fRE1BX0FDVCwKLQkJLmxpbmtfZmxhZ3MJPSBTSUxfREZMX0xJTktfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMjQzLDcgKzIwOSw2IEBACiAJLyogc2lsXzMxMTQgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCi0JCS5saW5rX2ZsYWdzCT0gU0lMX0RGTF9MSU5LX0ZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTQwNCw3ICszNjksNyBAQAogCiAJaWYgKHVubGlrZWx5KCFxYyB8fCAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpKSkgewogCQkvKiB0aGlzIHNvbWV0aW1lcyBoYXBwZW5zLCBqdXN0IGNsZWFyIElSUSAqLwotCQlhdGFfY2hrX3N0YXR1cyhhcCk7CisJCWFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOwogCQlyZXR1cm47CiAJfQogCkBAIC00NDAsMTUgKzQwNSwxNSBAQAogCX0KIAogCS8qIGNoZWNrIG1haW4gc3RhdHVzLCBjbGVhcmluZyBJTlRSUSAqLwotCXN0YXR1cyA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKKwlzdGF0dXMgPSBhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzICYgQVRBX0JVU1kpKQogCQlnb3RvIGVycl9oc207CiAKIAkvKiBhY2sgYm1kbWEgaXJxIGV2ZW50cyAqLwotCWF0YV9ibWRtYV9pcnFfY2xlYXIoYXApOworCWF0YV9zZmZfaXJxX2NsZWFyKGFwKTsKIAogCS8qIGtpY2sgSFNNIGluIHRoZSBhc3MgKi8KLQlhdGFfaHNtX21vdmUoYXAsIHFjLCBzdGF0dXMsIDApOworCWF0YV9zZmZfaHNtX21vdmUoYXAsIHFjLCBzdGF0dXMsIDApOwogCiAJaWYgKHVubGlrZWx5KHFjLT5lcnJfbWFzaykgJiYgYXRhX2lzX2RtYShxYy0+dGYucHJvdG9jb2wpKQogCQlhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJCTURNQTIgc3RhdCAweCV4IiwgYm1kbWEyKTsKQEAgLTUxNSw4ICs0ODAsOCBAQAogCXUzMiB0bXA7CiAKIAkvKiBjbGVhciBJUlEgKi8KLQlhdGFfY2hrX3N0YXR1cyhhcCk7Ci0JYXRhX2JtZG1hX2lycV9jbGVhcihhcCk7CisJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisJYXRhX3NmZl9pcnFfY2xlYXIoYXApOwogCiAJLyogdHVybiBvbiBTQVRBIElSUSBpZiBzdXBwb3J0ZWQgKi8KIAlpZiAoIShhcC0+ZmxhZ3MgJiBTSUxfRkxBR19OT19TQVRBX0lSUSkpCkBAIC02OTAsNyArNjU1LDcgQEAKIAkJaW9hZGRyLT5jdGxfYWRkciA9IG1taW9fYmFzZSArIHNpbF9wb3J0W2ldLmN0bDsKIAkJaW9hZGRyLT5ibWRtYV9hZGRyID0gbW1pb19iYXNlICsgc2lsX3BvcnRbaV0uYm1kbWE7CiAJCWlvYWRkci0+c2NyX2FkZHIgPSBtbWlvX2Jhc2UgKyBzaWxfcG9ydFtpXS5zY3I7Ci0JCWF0YV9zdGRfcG9ydHMoaW9hZGRyKTsKKwkJYXRhX3NmZl9zdGRfcG9ydHMoaW9hZGRyKTsKIAogCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIFNJTF9NTUlPX0JBUiwgLTEsICJtbWlvIik7CiAJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgU0lMX01NSU9fQkFSLCBzaWxfcG9ydFtpXS50ZiwgInRmIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKaW5kZXggYjRiMWY5MS4uMjdhMTEwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYwpAQCAtMjU0LDcgKzI1NCw2IEBACiAJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSB8CiAJCQkJICBBVEFfRkxBR19OQ1EgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAogCQkJCSAgQVRBX0ZMQUdfQU4gfCBBVEFfRkxBR19QTVAsCi0JU0lMMjRfQ09NTU9OX0xGTEFHUwk9IEFUQV9MRkxBR19TS0lQX0QySF9CU1ksCiAJU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MJPSAoMSA8PCAyNCksIC8qIElSUSBsb3NzIGVycmF0YSBvbiBQQ0ktWCAqLwogCiAJSVJRX1NUQVRfNFBPUlRTCQk9IDB4ZiwKQEAgLTI4Niw0NSArMjg1LDQ1IEBACiAJCQkJICAgICJkZXZpY2UgZXJyb3IgdmlhIEQySCBGSVMiIH0sCiAJW1BPUlRfQ0VSUl9TREJdCQk9IHsgQUNfRVJSX0RFViwgMCwKIAkJCQkgICAgImRldmljZSBlcnJvciB2aWEgU0RCIEZJUyIgfSwKLQlbUE9SVF9DRVJSX0RBVEFdCT0geyBBQ19FUlJfQVRBX0JVUywgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX0RBVEFdCT0geyBBQ19FUlJfQVRBX0JVUywgQVRBX0VIX1JFU0VULAogCQkJCSAgICAiZXJyb3IgaW4gZGF0YSBGSVMiIH0sCi0JW1BPUlRfQ0VSUl9TRU5EXQk9IHsgQUNfRVJSX0FUQV9CVVMsIEFUQV9FSF9TT0ZUUkVTRVQsCisJW1BPUlRfQ0VSUl9TRU5EXQk9IHsgQUNfRVJSX0FUQV9CVVMsIEFUQV9FSF9SRVNFVCwKIAkJCQkgICAgImZhaWxlZCB0byB0cmFuc21pdCBjb21tYW5kIEZJUyIgfSwKLQlbUE9SVF9DRVJSX0lOQ09OU0lTVEVOVF0gPSB7IEFDX0VSUl9IU00sIEFUQV9FSF9TT0ZUUkVTRVQsCisJW1BPUlRfQ0VSUl9JTkNPTlNJU1RFTlRdID0geyBBQ19FUlJfSFNNLCBBVEFfRUhfUkVTRVQsCiAJCQkJICAgICAicHJvdG9jb2wgbWlzbWF0Y2giIH0sCi0JW1BPUlRfQ0VSUl9ESVJFQ1RJT05dCT0geyBBQ19FUlJfSFNNLCBBVEFfRUhfU09GVFJFU0VULAorCVtQT1JUX0NFUlJfRElSRUNUSU9OXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1JFU0VULAogCQkJCSAgICAiZGF0YSBkaXJlY3RvbiBtaXNtYXRjaCIgfSwKLQlbUE9SVF9DRVJSX1VOREVSUlVOXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX1VOREVSUlVOXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1JFU0VULAogCQkJCSAgICAicmFuIG91dCBvZiBTR0VzIHdoaWxlIHdyaXRpbmciIH0sCi0JW1BPUlRfQ0VSUl9PVkVSUlVOXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX09WRVJSVU5dCT0geyBBQ19FUlJfSFNNLCBBVEFfRUhfUkVTRVQsCiAJCQkJICAgICJyYW4gb3V0IG9mIFNHRXMgd2hpbGUgcmVhZGluZyIgfSwKLQlbUE9SVF9DRVJSX1BLVF9QUk9UXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX1BLVF9QUk9UXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1JFU0VULAogCQkJCSAgICAiaW52YWxpZCBkYXRhIGRpcmVjdG9uIGZvciBBVEFQSSBDREIiIH0sCi0JW1BPUlRfQ0VSUl9TR1RfQk9VTkRBUlldID0geyBBQ19FUlJfU1lTVEVNLCBBVEFfRUhfU09GVFJFU0VULAorCVtQT1JUX0NFUlJfU0dUX0JPVU5EQVJZXSA9IHsgQUNfRVJSX1NZU1RFTSwgQVRBX0VIX1JFU0VULAogCQkJCSAgICAgIlNHVCBub3Qgb24gcXdvcmQgYm91bmRhcnkiIH0sCi0JW1BPUlRfQ0VSUl9TR1RfVEdUQUJSVF0JPSB7IEFDX0VSUl9IT1NUX0JVUywgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX1NHVF9UR1RBQlJUXQk9IHsgQUNfRVJSX0hPU1RfQlVTLCBBVEFfRUhfUkVTRVQsCiAJCQkJICAgICJQQ0kgdGFyZ2V0IGFib3J0IHdoaWxlIGZldGNoaW5nIFNHVCIgfSwKLQlbUE9SVF9DRVJSX1NHVF9NU1RBQlJUXQk9IHsgQUNfRVJSX0hPU1RfQlVTLCBBVEFfRUhfU09GVFJFU0VULAorCVtQT1JUX0NFUlJfU0dUX01TVEFCUlRdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9SRVNFVCwKIAkJCQkgICAgIlBDSSBtYXN0ZXIgYWJvcnQgd2hpbGUgZmV0Y2hpbmcgU0dUIiB9LAotCVtQT1JUX0NFUlJfU0dUX1BDSVBFUlJdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9TT0ZUUkVTRVQsCisJW1BPUlRfQ0VSUl9TR1RfUENJUEVSUl0JPSB7IEFDX0VSUl9IT1NUX0JVUywgQVRBX0VIX1JFU0VULAogCQkJCSAgICAiUENJIHBhcml0eSBlcnJvciB3aGlsZSBmZXRjaGluZyBTR1QiIH0sCi0JW1BPUlRfQ0VSUl9DTURfQk9VTkRBUlldID0geyBBQ19FUlJfU1lTVEVNLCBBVEFfRUhfU09GVFJFU0VULAorCVtQT1JUX0NFUlJfQ01EX0JPVU5EQVJZXSA9IHsgQUNfRVJSX1NZU1RFTSwgQVRBX0VIX1JFU0VULAogCQkJCSAgICAgIlBSQiBub3Qgb24gcXdvcmQgYm91bmRhcnkiIH0sCi0JW1BPUlRfQ0VSUl9DTURfVEdUQUJSVF0JPSB7IEFDX0VSUl9IT1NUX0JVUywgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX0NNRF9UR1RBQlJUXQk9IHsgQUNfRVJSX0hPU1RfQlVTLCBBVEFfRUhfUkVTRVQsCiAJCQkJICAgICJQQ0kgdGFyZ2V0IGFib3J0IHdoaWxlIGZldGNoaW5nIFBSQiIgfSwKLQlbUE9SVF9DRVJSX0NNRF9NU1RBQlJUXQk9IHsgQUNfRVJSX0hPU1RfQlVTLCBBVEFfRUhfU09GVFJFU0VULAorCVtQT1JUX0NFUlJfQ01EX01TVEFCUlRdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9SRVNFVCwKIAkJCQkgICAgIlBDSSBtYXN0ZXIgYWJvcnQgd2hpbGUgZmV0Y2hpbmcgUFJCIiB9LAotCVtQT1JUX0NFUlJfQ01EX1BDSVBFUlJdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9TT0ZUUkVTRVQsCisJW1BPUlRfQ0VSUl9DTURfUENJUEVSUl0JPSB7IEFDX0VSUl9IT1NUX0JVUywgQVRBX0VIX1JFU0VULAogCQkJCSAgICAiUENJIHBhcml0eSBlcnJvciB3aGlsZSBmZXRjaGluZyBQUkIiIH0sCi0JW1BPUlRfQ0VSUl9YRlJfVU5ERUZdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9TT0ZUUkVTRVQsCisJW1BPUlRfQ0VSUl9YRlJfVU5ERUZdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9SRVNFVCwKIAkJCQkgICAgInVuZGVmaW5lZCBlcnJvciB3aGlsZSB0cmFuc2ZlcnJpbmcgZGF0YSIgfSwKLQlbUE9SVF9DRVJSX1hGUl9UR1RBQlJUXQk9IHsgQUNfRVJSX0hPU1RfQlVTLCBBVEFfRUhfU09GVFJFU0VULAorCVtQT1JUX0NFUlJfWEZSX1RHVEFCUlRdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9SRVNFVCwKIAkJCQkgICAgIlBDSSB0YXJnZXQgYWJvcnQgd2hpbGUgdHJhbnNmZXJyaW5nIGRhdGEiIH0sCi0JW1BPUlRfQ0VSUl9YRlJfTVNUQUJSVF0JPSB7IEFDX0VSUl9IT1NUX0JVUywgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX1hGUl9NU1RBQlJUXQk9IHsgQUNfRVJSX0hPU1RfQlVTLCBBVEFfRUhfUkVTRVQsCiAJCQkJICAgICJQQ0kgbWFzdGVyIGFib3J0IHdoaWxlIHRyYW5zZmVycmluZyBkYXRhIiB9LAotCVtQT1JUX0NFUlJfWEZSX1BDSVBFUlJdCT0geyBBQ19FUlJfSE9TVF9CVVMsIEFUQV9FSF9TT0ZUUkVTRVQsCisJW1BPUlRfQ0VSUl9YRlJfUENJUEVSUl0JPSB7IEFDX0VSUl9IT1NUX0JVUywgQVRBX0VIX1JFU0VULAogCQkJCSAgICAiUENJIHBhcml0eSBlcnJvciB3aGlsZSB0cmFuc2ZlcnJpbmcgZGF0YSIgfSwKLQlbUE9SVF9DRVJSX1NFTkRTRVJWSUNFXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1NPRlRSRVNFVCwKKwlbUE9SVF9DRVJSX1NFTkRTRVJWSUNFXQk9IHsgQUNfRVJSX0hTTSwgQVRBX0VIX1JFU0VULAogCQkJCSAgICAiRklTIHJlY2VpdmVkIHdoaWxlIHNlbmRpbmcgc2VydmljZSBGSVMiIH0sCiB9OwogCkBAIC0zMzcsMjMgKzMzNiwyNiBAQAogc3RydWN0IHNpbDI0X3BvcnRfcHJpdiB7CiAJdW5pb24gc2lsMjRfY21kX2Jsb2NrICpjbWRfYmxvY2s7CS8qIDMyIGNtZCBibG9ja3MgKi8KIAlkbWFfYWRkcl90IGNtZF9ibG9ja19kbWE7CQkvKiBETUEgYmFzZSBhZGRyIGZvciB0aGVtICovCi0Jc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsJCQkvKiBDYWNoZWQgdGFza2ZpbGUgcmVnaXN0ZXJzICovCiAJaW50IGRvX3BvcnRfcnN0OwogfTsKIAogc3RhdGljIHZvaWQgc2lsMjRfZGV2X2NvbmZpZyhzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKLXN0YXRpYyB1OCBzaWwyNF9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IHNpbDI0X3Njcl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIHNjX3JlZywgdTMyICp2YWwpOwogc3RhdGljIGludCBzaWwyNF9zY3Jfd3JpdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgc2NfcmVnLCB1MzIgdmFsKTsKLXN0YXRpYyB2b2lkIHNpbDI0X3RmX3JlYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOwogc3RhdGljIGludCBzaWwyNF9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyB2b2lkIHNpbDI0X3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHNpbDI0X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotc3RhdGljIHZvaWQgc2lsMjRfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGJvb2wgc2lsMjRfcWNfZmlsbF9ydGYoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdm9pZCBzaWwyNF9wbXBfYXR0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgc2lsMjRfcG1wX2RldGFjaChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHNpbDI0X2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHNpbDI0X3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IHNpbDI0X3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK3N0YXRpYyBpbnQgc2lsMjRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOworc3RhdGljIGludCBzaWwyNF9wbXBfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIHN0YXRpYyB2b2lkIHNpbDI0X2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBzaWwyNF9wb3N0X2ludGVybmFsX2NtZChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyBpbnQgc2lsMjRfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKQEAgLTM4Niw1MiArMzg4LDM2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzaWwyNF9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gYXRhX3Njc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCUFUQV9OQ1FfU0hUKERSVl9OQU1FKSwKIAkuY2FuX3F1ZXVlCQk9IFNJTDI0X01BWF9DTURTLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IFNJTDI0X01BWF9TR0UsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKIAkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzaWwyNF9vcHMgPSB7Ci0JLmRldl9jb25maWcJCT0gc2lsMjRfZGV2X2NvbmZpZywKLQotCS5jaGVja19zdGF0dXMJCT0gc2lsMjRfY2hlY2tfc3RhdHVzLAotCS5jaGVja19hbHRzdGF0dXMJPSBzaWwyNF9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QJCT0gYXRhX25vb3BfZGV2X3NlbGVjdCwKLQotCS50Zl9yZWFkCQk9IHNpbDI0X3RmX3JlYWQsCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2lsMjRfb3BzID0geworCS5pbmhlcml0cwkJPSAmc2F0YV9wbXBfcG9ydF9vcHMsCiAKIAkucWNfZGVmZXIJCT0gc2lsMjRfcWNfZGVmZXIsCiAJLnFjX3ByZXAJCT0gc2lsMjRfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gc2lsMjRfcWNfaXNzdWUsCi0KLQkuaXJxX2NsZWFyCQk9IHNpbDI0X2lycV9jbGVhciwKLQotCS5zY3JfcmVhZAkJPSBzaWwyNF9zY3JfcmVhZCwKLQkuc2NyX3dyaXRlCQk9IHNpbDI0X3Njcl93cml0ZSwKLQotCS5wbXBfYXR0YWNoCQk9IHNpbDI0X3BtcF9hdHRhY2gsCi0JLnBtcF9kZXRhY2gJCT0gc2lsMjRfcG1wX2RldGFjaCwKKwkucWNfZmlsbF9ydGYJCT0gc2lsMjRfcWNfZmlsbF9ydGYsCiAKIAkuZnJlZXplCQkJPSBzaWwyNF9mcmVlemUsCiAJLnRoYXcJCQk9IHNpbDI0X3RoYXcsCisJLnNvZnRyZXNldAkJPSBzaWwyNF9zb2Z0cmVzZXQsCisJLmhhcmRyZXNldAkJPSBzaWwyNF9oYXJkcmVzZXQsCisJLnBtcF9zb2Z0cmVzZXQJCT0gc2lsMjRfc29mdHJlc2V0LAorCS5wbXBfaGFyZHJlc2V0CQk9IHNpbDI0X3BtcF9oYXJkcmVzZXQsCiAJLmVycm9yX2hhbmRsZXIJCT0gc2lsMjRfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBzaWwyNF9wb3N0X2ludGVybmFsX2NtZCwKKwkuZGV2X2NvbmZpZwkJPSBzaWwyNF9kZXZfY29uZmlnLAorCisJLnNjcl9yZWFkCQk9IHNpbDI0X3Njcl9yZWFkLAorCS5zY3Jfd3JpdGUJCT0gc2lsMjRfc2NyX3dyaXRlLAorCS5wbXBfYXR0YWNoCQk9IHNpbDI0X3BtcF9hdHRhY2gsCisJLnBtcF9kZXRhY2gJCT0gc2lsMjRfcG1wX2RldGFjaCwKIAogCS5wb3J0X3N0YXJ0CQk9IHNpbDI0X3BvcnRfc3RhcnQsCi0KICNpZmRlZiBDT05GSUdfUE0KIAkucG9ydF9yZXN1bWUJCT0gc2lsMjRfcG9ydF9yZXN1bWUsCiAjZW5kaWYKQEAgLTQ0OSw3ICs0MzUsNiBAQAogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDQpIHwKIAkJCQkgIFNJTDI0X0ZMQUdfUENJWF9JUlFfV09DLAotCQkubGlua19mbGFncwk9IFNJTDI0X0NPTU1PTl9MRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLwpAQCAtNDU4LDcgKzQ0Myw2IEBACiAJLyogc2lsXzMxMzIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygyKSwKLQkJLmxpbmtfZmxhZ3MJPSBTSUwyNF9DT01NT05fTEZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KQEAgLTQ2Nyw3ICs0NTEsNiBAQAogCS8qIHNpbF8zMTMxL3NpbF8zNTMxICovCiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoMSksCi0JCS5saW5rX2ZsYWdzCT0gU0lMMjRfQ09NTU9OX0xGTEFHUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCkBAIC00ODIsOSArNDY1LDE5IEBACiAJcmV0dXJuIHRhZzsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lsMjRfcG9ydF9vZmZzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlyZXR1cm4gYXAtPnBvcnRfbm8gKiBQT1JUX1JFR1NfU0laRTsKK30KKworc3RhdGljIHZvaWQgX19pb21lbSAqc2lsMjRfcG9ydF9iYXNlKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuIGFwLT5ob3N0LT5pb21hcFtTSUwyNF9QT1JUX0JBUl0gKyBzaWwyNF9wb3J0X29mZnNldChhcCk7Cit9CisKIHN0YXRpYyB2b2lkIHNpbDI0X2Rldl9jb25maWcoc3RydWN0IGF0YV9kZXZpY2UgKmRldikKIHsKLQl2b2lkIF9faW9tZW0gKnBvcnQgPSBkZXYtPmxpbmstPmFwLT5pb2FkZHIuY21kX2FkZHI7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gc2lsMjRfcG9ydF9iYXNlKGRldi0+bGluay0+YXApOwogCiAJaWYgKGRldi0+Y2RiX2xlbiA9PSAxNikKIAkJd3JpdGVsKFBPUlRfQ1NfQ0RCMTYsIHBvcnQgKyBQT1JUX0NUUkxfU1RBVCk7CkBAIC00OTQsNyArNDg3LDcgQEAKIAogc3RhdGljIHZvaWQgc2lsMjRfcmVhZF90ZihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgdGFnLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKIHsKLQl2b2lkIF9faW9tZW0gKnBvcnQgPSBhcC0+aW9hZGRyLmNtZF9hZGRyOworCXZvaWQgX19pb21lbSAqcG9ydCA9IHNpbDI0X3BvcnRfYmFzZShhcCk7CiAJc3RydWN0IHNpbDI0X3ByYiBfX2lvbWVtICpwcmI7CiAJdTggZmlzWzYgKiA0XTsKIApAQCAtNTAzLDEyICs0OTYsNiBAQAogCWF0YV90Zl9mcm9tX2ZpcyhmaXMsIHRmKTsKIH0KIAotc3RhdGljIHU4IHNpbDI0X2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCBzaWwyNF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gcHAtPnRmLmNvbW1hbmQ7Ci19Ci0KIHN0YXRpYyBpbnQgc2lsMjRfc2NyX21hcFtdID0gewogCVtTQ1JfQ09OVFJPTF0JPSAwLAogCVtTQ1JfU1RBVFVTXQk9IDEsCkBAIC01MTgsNyArNTA1LDcgQEAKIAogc3RhdGljIGludCBzaWwyNF9zY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBzY19yZWcsIHUzMiAqdmFsKQogewotCXZvaWQgX19pb21lbSAqc2NyX2FkZHIgPSBhcC0+aW9hZGRyLnNjcl9hZGRyOworCXZvaWQgX19pb21lbSAqc2NyX2FkZHIgPSBzaWwyNF9wb3J0X2Jhc2UoYXApICsgUE9SVF9TQ09OVFJPTDsKIAogCWlmIChzY19yZWcgPCBBUlJBWV9TSVpFKHNpbDI0X3Njcl9tYXApKSB7CiAJCXZvaWQgX19pb21lbSAqYWRkcjsKQEAgLTUzMSw3ICs1MTgsNyBAQAogCiBzdGF0aWMgaW50IHNpbDI0X3Njcl93cml0ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBzY19yZWcsIHUzMiB2YWwpCiB7Ci0Jdm9pZCBfX2lvbWVtICpzY3JfYWRkciA9IGFwLT5pb2FkZHIuc2NyX2FkZHI7CisJdm9pZCBfX2lvbWVtICpzY3JfYWRkciA9IHNpbDI0X3BvcnRfYmFzZShhcCkgKyBQT1JUX1NDT05UUk9MOwogCiAJaWYgKHNjX3JlZyA8IEFSUkFZX1NJWkUoc2lsMjRfc2NyX21hcCkpIHsKIAkJdm9pZCBfX2lvbWVtICphZGRyOwpAQCAtNTQyLDE1ICs1MjksOSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdm9pZCBzaWwyNF90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXN0cnVjdCBzaWwyNF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKLQkqdGYgPSBwcC0+dGY7Ci19Ci0KIHN0YXRpYyB2b2lkIHNpbDI0X2NvbmZpZ19wb3J0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0Jdm9pZCBfX2lvbWVtICpwb3J0ID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnBvcnQgPSBzaWwyNF9wb3J0X2Jhc2UoYXApOwogCiAJLyogY29uZmlndXJlIElSUSBXb0MgKi8KIAlpZiAoYXAtPmZsYWdzICYgU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MpCkBAIC01NzUsNyArNTU2LDcgQEAKIAogc3RhdGljIHZvaWQgc2lsMjRfY29uZmlnX3BtcChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgYXR0YWNoZWQpCiB7Ci0Jdm9pZCBfX2lvbWVtICpwb3J0ID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnBvcnQgPSBzaWwyNF9wb3J0X2Jhc2UoYXApOwogCiAJaWYgKGF0dGFjaGVkKQogCQl3cml0ZWwoUE9SVF9DU19QTVBfRU4sIHBvcnQgKyBQT1JUX0NUUkxfU1RBVCk7CkBAIC01ODUsNyArNTY2LDcgQEAKIAogc3RhdGljIHZvaWQgc2lsMjRfY2xlYXJfcG1wKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0Jdm9pZCBfX2lvbWVtICpwb3J0ID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnBvcnQgPSBzaWwyNF9wb3J0X2Jhc2UoYXApOwogCWludCBpOwogCiAJd3JpdGVsKFBPUlRfQ1NfUE1QX1JFU1VNRSwgcG9ydCArIFBPUlRfQ1RSTF9DTFIpOwpAQCAtNjAwLDEyICs1ODEsMTIgQEAKIAogc3RhdGljIGludCBzaWwyNF9pbml0X3BvcnQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQl2b2lkIF9faW9tZW0gKnBvcnQgPSBhcC0+aW9hZGRyLmNtZF9hZGRyOworCXZvaWQgX19pb21lbSAqcG9ydCA9IHNpbDI0X3BvcnRfYmFzZShhcCk7CiAJc3RydWN0IHNpbDI0X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXUzMiB0bXA7CiAKIAkvKiBjbGVhciBQTVAgZXJyb3Igc3RhdHVzICovCi0JaWYgKGFwLT5ucl9wbXBfbGlua3MpCisJaWYgKHNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKIAkJc2lsMjRfY2xlYXJfcG1wKGFwKTsKIAogCXdyaXRlbChQT1JUX0NTX0lOSVQsIHBvcnQgKyBQT1JUX0NUUkxfU1RBVCk7CkBAIC02MTYsNyArNTk3LDcgQEAKIAogCWlmICgodG1wICYgKFBPUlRfQ1NfSU5JVCB8IFBPUlRfQ1NfUkRZKSkgIT0gUE9SVF9DU19SRFkpIHsKIAkJcHAtPmRvX3BvcnRfcnN0ID0gMTsKLQkJYXAtPmxpbmsuZWhfY29udGV4dC5pLmFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOworCQlhcC0+bGluay5laF9jb250ZXh0LmkuYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02MjgsNyArNjA5LDcgQEAKIAkJCQkgaW50IGlzX2NtZCwgdTMyIGN0cmwsCiAJCQkJIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tc2VjKQogewotCXZvaWQgX19pb21lbSAqcG9ydCA9IGFwLT5pb2FkZHIuY21kX2FkZHI7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gc2lsMjRfcG9ydF9iYXNlKGFwKTsKIAlzdHJ1Y3Qgc2lsMjRfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNpbDI0X3ByYiAqcHJiID0gJnBwLT5jbWRfYmxvY2tbMF0uYXRhLnByYjsKIAlkbWFfYWRkcl90IHBhZGRyID0gcHAtPmNtZF9ibG9ja19kbWE7CkBAIC02NzAsMTAgKzY1MSwxMSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBzaWwyNF9kb19zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAotCQkJICAgICAgaW50IHBtcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3N0YXRpYyBpbnQgc2lsMjRfc29mdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOworCWludCBwbXAgPSBzYXRhX3Nyc3RfcG1wKGxpbmspOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dF9tc2VjID0gMDsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOwogCWNvbnN0IGNoYXIgKnJlYXNvbjsKQEAgLTY4MSwxMiArNjYzLDYgQEAKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCWlmIChhdGFfbGlua19vZmZsaW5lKGxpbmspKSB7Ci0JCURQUklOVEsoIlBIWSByZXBvcnRzIG5vIGRldmljZVxuIik7Ci0JCSpjbGFzcyA9IEFUQV9ERVZfTk9ORTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogcHV0IHRoZSBwb3J0IGludG8ga25vd24gc3RhdGUgKi8KIAlpZiAoc2lsMjRfaW5pdF9wb3J0KGFwKSkgewogCQlyZWFzb24gPSAicG9ydCBub3QgcmVhZHkiOwpAQCAtNzExLDEwICs2ODcsNiBAQAogCXNpbDI0X3JlYWRfdGYoYXAsIDAsICZ0Zik7CiAJKmNsYXNzID0gYXRhX2Rldl9jbGFzc2lmeSgmdGYpOwogCi0JaWYgKCpjbGFzcyA9PSBBVEFfREVWX1VOS05PV04pCi0JCSpjbGFzcyA9IEFUQV9ERVZfTk9ORTsKLQotIG91dDoKIAlEUFJJTlRLKCJFWElULCBjbGFzcz0ldVxuIiwgKmNsYXNzKTsKIAlyZXR1cm4gMDsKIApAQCAtNzIzLDE3ICs2OTUsMTEgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGludCBzaWwyNF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAotCQkJICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKLXsKLQlyZXR1cm4gc2lsMjRfZG9fc29mdHJlc2V0KGxpbmssIGNsYXNzLCBTQVRBX1BNUF9DVFJMX1BPUlQsIGRlYWRsaW5lKTsKLX0KLQogc3RhdGljIGludCBzaWwyNF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAogCQkJICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7Ci0Jdm9pZCBfX2lvbWVtICpwb3J0ID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnBvcnQgPSBzaWwyNF9wb3J0X2Jhc2UoYXApOwogCXN0cnVjdCBzaWwyNF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAlpbnQgZGlkX3BvcnRfcnN0ID0gMDsKIAljb25zdCBjaGFyICpyZWFzb247CkBAIC05MTEsNyArODc3LDcgQEAKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBzaWwyNF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKLQl2b2lkIF9faW9tZW0gKnBvcnQgPSBhcC0+aW9hZGRyLmNtZF9hZGRyOworCXZvaWQgX19pb21lbSAqcG9ydCA9IHNpbDI0X3BvcnRfYmFzZShhcCk7CiAJdW5zaWduZWQgaW50IHRhZyA9IHNpbDI0X3RhZyhxYy0+dGFnKTsKIAlkbWFfYWRkcl90IHBhZGRyOwogCXZvaWQgX19pb21lbSAqYWN0aXZhdGU7CkBAIC05MjUsOSArODkxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNpbDI0X2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGJvb2wgc2lsMjRfcWNfZmlsbF9ydGYoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQkvKiB1bnVzZWQgKi8KKwlzaWwyNF9yZWFkX3RmKHFjLT5hcCwgcWMtPnRhZywgJnFjLT5yZXN1bHRfdGYpOworCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBzaWwyNF9wbXBfYXR0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC05NDIsMTIgKzkwOSw2IEBACiAJc2lsMjRfY29uZmlnX3BtcChhcCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgc2lsMjRfcG1wX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKLXsKLQlyZXR1cm4gc2lsMjRfZG9fc29mdHJlc2V0KGxpbmssIGNsYXNzLCBsaW5rLT5wbXAsIGRlYWRsaW5lKTsKLX0KLQogc3RhdGljIGludCBzaWwyNF9wbXBfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewpAQCAtOTYwLDEyICs5MjEsMTIgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXJldHVybiBzYXRhX3BtcF9zdGRfaGFyZHJlc2V0KGxpbmssIGNsYXNzLCBkZWFkbGluZSk7CisJcmV0dXJuIHNhdGFfc3RkX2hhcmRyZXNldChsaW5rLCBjbGFzcywgZGVhZGxpbmUpOwogfQogCiBzdGF0aWMgdm9pZCBzaWwyNF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQl2b2lkIF9faW9tZW0gKnBvcnQgPSBhcC0+aW9hZGRyLmNtZF9hZGRyOworCXZvaWQgX19pb21lbSAqcG9ydCA9IHNpbDI0X3BvcnRfYmFzZShhcCk7CiAKIAkvKiBQb3J0LXdpZGUgSVJRIG1hc2sgaW4gSE9TVF9DVFJMIGRvZXNuJ3QgcmVhbGx5IHdvcmssIGNsZWFyCiAJICogUE9SVF9JUlFfRU5BQkxFIGluc3RlYWQuCkBAIC05NzUsNyArOTM2LDcgQEAKIAogc3RhdGljIHZvaWQgc2lsMjRfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCXZvaWQgX19pb21lbSAqcG9ydCA9IGFwLT5pb2FkZHIuY21kX2FkZHI7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gc2lsMjRfcG9ydF9iYXNlKGFwKTsKIAl1MzIgdG1wOwogCiAJLyogY2xlYXIgSVJRICovCkBAIC05ODgsNyArOTQ5LDcgQEAKIAogc3RhdGljIHZvaWQgc2lsMjRfZXJyb3JfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCXZvaWQgX19pb21lbSAqcG9ydCA9IGFwLT5pb2FkZHIuY21kX2FkZHI7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gc2lsMjRfcG9ydF9iYXNlKGFwKTsKIAlzdHJ1Y3Qgc2lsMjRfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyA9IE5VTEw7CiAJc3RydWN0IGF0YV9saW5rICpsaW5rOwpAQCAtMTAyMiw3ICs5ODMsNyBAQAogCiAJaWYgKGlycV9zdGF0ICYgUE9SVF9JUlFfVU5LX0ZJUykgewogCQllaGktPmVycl9tYXNrIHw9IEFDX0VSUl9IU007Ci0JCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLCAidW5rbm93biBGSVMiKTsKIAkJZnJlZXplID0gMTsKIAl9CkBAIC0xMDQzLDE0ICsxMDA0LDE0IEBACiAJCSAqLwogCQlpZiAoYXAtPm5yX2FjdGl2ZV9saW5rcyA+PSAzKSB7CiAJCQllaGktPmVycl9tYXNrIHw9IEFDX0VSUl9PVEhFUjsKLQkJCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CiAJCQlhdGFfZWhpX3B1c2hfZGVzYyhlaGksICJQTVAgRE1BIENTIGVycmF0YSIpOwogCQkJcHAtPmRvX3BvcnRfcnN0ID0gMTsKIAkJCWZyZWV6ZSA9IDE7CiAJCX0KIAogCQkvKiBmaW5kIG91dCB0aGUgb2ZmZW5kaW5nIGxpbmsgYW5kIHFjICovCi0JCWlmIChhcC0+bnJfcG1wX2xpbmtzKSB7CisJCWlmIChzYXRhX3BtcF9hdHRhY2hlZChhcCkpIHsKIAkJCWNvbnRleHQgPSByZWFkbChwb3J0ICsgUE9SVF9DT05URVhUKTsKIAkJCXBtcCA9IChjb250ZXh0ID4+IDUpICYgMHhmOwogCkBAIC0xMDY0LDcgKzEwMjUsNyBAQAogCQkJCQkJICBpcnFfc3RhdCk7CiAJCQl9IGVsc2UgewogCQkJCWVycl9tYXNrIHw9IEFDX0VSUl9IU007Ci0JCQkJYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCQkJYWN0aW9uIHw9IEFUQV9FSF9SRVNFVDsKIAkJCQlmcmVlemUgPSAxOwogCQkJfQogCQl9IGVsc2UKQEAgLTEwNzgsMjggKzEwMzksMjcgQEAKIAkJaWYgKGNpICYmIGNpLT5kZXNjKSB7CiAJCQllcnJfbWFzayB8PSBjaS0+ZXJyX21hc2s7CiAJCQlhY3Rpb24gfD0gY2ktPmFjdGlvbjsKLQkJCWlmIChhY3Rpb24gJiBBVEFfRUhfUkVTRVRfTUFTSykKKwkJCWlmIChhY3Rpb24gJiBBVEFfRUhfUkVTRVQpCiAJCQkJZnJlZXplID0gMTsKIAkJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIiVzIiwgY2ktPmRlc2MpOwogCQl9IGVsc2UgewogCQkJZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOwotCQkJYWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7CisJCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQkJZnJlZXplID0gMTsKIAkJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgInVua25vd24gY29tbWFuZCBlcnJvciAlZCIsCiAJCQkJCSAgY2Vycik7CiAJCX0KIAogCQkvKiByZWNvcmQgZXJyb3IgaW5mbyAqLwotCQlpZiAocWMpIHsKLQkJCXNpbDI0X3JlYWRfdGYoYXAsIHFjLT50YWcsICZwcC0+dGYpOworCQlpZiAocWMpCiAJCQlxYy0+ZXJyX21hc2sgfD0gZXJyX21hc2s7Ci0JCX0gZWxzZQorCQllbHNlCiAJCQllaGktPmVycl9tYXNrIHw9IGVycl9tYXNrOwogCiAJCWVoaS0+YWN0aW9uIHw9IGFjdGlvbjsKIAogCQkvKiBpZiBQTVAsIHJlc3VtZSAqLwotCQlpZiAoYXAtPm5yX3BtcF9saW5rcykKKwkJaWYgKHNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKIAkJCXdyaXRlbChQT1JUX0NTX1BNUF9SRVNVTUUsIHBvcnQgKyBQT1JUX0NUUkxfU1RBVCk7CiAJfQogCkBAIC0xMTE0LDE4ICsxMDc0LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNpbDI0X2ZpbmlzaF9xYyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0Jc3RydWN0IHNpbDI0X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfUkVTVUxUX1RGKQotCQlzaWwyNF9yZWFkX3RmKGFwLCBxYy0+dGFnLCAmcHAtPnRmKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHNpbDI0X2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCXZvaWQgX19pb21lbSAqcG9ydCA9IGFwLT5pb2FkZHIuY21kX2FkZHI7CisJdm9pZCBfX2lvbWVtICpwb3J0ID0gc2lsMjRfcG9ydF9iYXNlKGFwKTsKIAl1MzIgc2xvdF9zdGF0LCBxY19hY3RpdmU7CiAJaW50IHJjOwogCkBAIC0xMTQ3LDEzICsxMDk4LDEzIEBACiAJfQogCiAJcWNfYWN0aXZlID0gc2xvdF9zdGF0ICYgfkhPU1RfU1NUQVRfQVRUTjsKLQlyYyA9IGF0YV9xY19jb21wbGV0ZV9tdWx0aXBsZShhcCwgcWNfYWN0aXZlLCBzaWwyNF9maW5pc2hfcWMpOworCXJjID0gYXRhX3FjX2NvbXBsZXRlX211bHRpcGxlKGFwLCBxY19hY3RpdmUpOwogCWlmIChyYyA+IDApCiAJCXJldHVybjsKIAlpZiAocmMgPCAwKSB7CiAJCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmFwLT5saW5rLmVoX2luZm87CiAJCWVoaS0+ZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKLQkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1JFU0VUOwogCQlhdGFfcG9ydF9mcmVlemUoYXApOwogCQlyZXR1cm47CiAJfQpAQCAtMTIwOSwxMSArMTE2MCw3IEBACiAJaWYgKHNpbDI0X2luaXRfcG9ydChhcCkpCiAJCWF0YV9laF9mcmVlemVfcG9ydChhcCk7CiAKLQkvKiBwZXJmb3JtIHJlY292ZXJ5ICovCi0Jc2F0YV9wbXBfZG9fZWgoYXAsIGF0YV9zdGRfcHJlcmVzZXQsIHNpbDI0X3NvZnRyZXNldCwgc2lsMjRfaGFyZHJlc2V0LAotCQkgICAgICAgYXRhX3N0ZF9wb3N0cmVzZXQsIHNhdGFfcG1wX3N0ZF9wcmVyZXNldCwKLQkJICAgICAgIHNpbDI0X3BtcF9zb2Z0cmVzZXQsIHNpbDI0X3BtcF9oYXJkcmVzZXQsCi0JCSAgICAgICBzYXRhX3BtcF9zdGRfcG9zdHJlc2V0KTsKKwlzYXRhX3BtcF9lcnJvcl9oYW5kbGVyKGFwKTsKIAogCXBwLT5kb19wb3J0X3JzdCA9IDA7CiB9CkBAIC0xMjM0LDI4ICsxMTgxLDI0IEBACiAJdW5pb24gc2lsMjRfY21kX2Jsb2NrICpjYjsKIAlzaXplX3QgY2Jfc2l6ZSA9IHNpemVvZigqY2IpICogU0lMMjRfTUFYX0NNRFM7CiAJZG1hX2FkZHJfdCBjYl9kbWE7Ci0JaW50IHJjOwogCiAJcHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcC0+dGYuY29tbWFuZCA9IEFUQV9EUkRZOwotCiAJY2IgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgY2Jfc2l6ZSwgJmNiX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYikKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGNiLCAwLCBjYl9zaXplKTsKIAotCXJjID0gYXRhX3BhZF9hbGxvYyhhcCwgZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCXBwLT5jbWRfYmxvY2sgPSBjYjsKIAlwcC0+Y21kX2Jsb2NrX2RtYSA9IGNiX2RtYTsKIAogCWFwLT5wcml2YXRlX2RhdGEgPSBwcDsKIAorCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgU0lMMjRfSE9TVF9CQVIsIC0xLCAiaG9zdCIpOworCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgU0lMMjRfUE9SVF9CQVIsIHNpbDI0X3BvcnRfb2Zmc2V0KGFwKSwgInBvcnQiKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMjc0LDcgKzEyMTcsOCBAQAogCS8qIGluaXQgcG9ydHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKLQkJdm9pZCBfX2lvbWVtICpwb3J0ID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKKwkJdm9pZCBfX2lvbWVtICpwb3J0ID0gc2lsMjRfcG9ydF9iYXNlKGFwKTsKKwogCiAJCS8qIEluaXRpYWwgUEhZIHNldHRpbmcgKi8KIAkJd3JpdGVsKDB4MjBjLCBwb3J0ICsgUE9SVF9QSFlfQ0ZHKTsKQEAgLTEzMDcsNyArMTI1MSw3IEBACiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmcGksIE5VTEwgfTsKIAl2b2lkIF9faW9tZW0gKiBjb25zdCAqaW9tYXA7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwotCWludCBpLCByYzsKKwlpbnQgcmM7CiAJdTMyIHRtcDsKIAogCS8qIGNhdXNlIGxpbmsgZXJyb3IgaWYgc2lsMjRfY21kX2Jsb2NrIGlzIHNpemVkIHdyb25nbHkgKi8KQEAgLTEzNDcsMTggKzEyOTEsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlob3N0LT5pb21hcCA9IGlvbWFwOwogCi0JZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgewotCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07Ci0JCXNpemVfdCBvZmZzZXQgPSBhcC0+cG9ydF9ubyAqIFBPUlRfUkVHU19TSVpFOwotCQl2b2lkIF9faW9tZW0gKnBvcnQgPSBpb21hcFtTSUwyNF9QT1JUX0JBUl0gKyBvZmZzZXQ7Ci0KLQkJaG9zdC0+cG9ydHNbaV0tPmlvYWRkci5jbWRfYWRkciA9IHBvcnQ7Ci0JCWhvc3QtPnBvcnRzW2ldLT5pb2FkZHIuc2NyX2FkZHIgPSBwb3J0ICsgUE9SVF9TQ09OVFJPTDsKLQotCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIFNJTDI0X0hPU1RfQkFSLCAtMSwgImhvc3QiKTsKLQkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBTSUwyNF9QT1JUX0JBUiwgb2Zmc2V0LCAicG9ydCIpOwotCX0KLQogCS8qIGNvbmZpZ3VyZSBhbmQgYWN0aXZhdGUgdGhlIGRldmljZSAqLwogCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpIHsKIAkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKaW5kZXggYTAxMjYwYS4uNmI4ZTQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCkBAIC04Niw0NSArODYsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNpc19zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzaXNfb3BzID0gewotCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAotCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5ibWRtYV9zZXR1cCAgICAgICAgICAgID0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAgICAgICAgICAgID0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzaXNfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5zY3JfcmVhZAkJPSBzaXNfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBzaXNfc2NyX3dyaXRlLAotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19wb3J0X2luZm8gPSB7CkBAIC0zNDEsNyArMzA5LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmMgPSBhdGFfcGNpX3ByZXBhcmVfc2ZmX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7CisJcmMgPSBhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTM1OSw4ICszMjcsOCBAQAogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJcGNpX2ludHgocGRldiwgMSk7Ci0JcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBkZXYtPmlycSwgYXRhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkJICZzaXNfc2h0KTsKKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwKKwkJCQkgSVJRRl9TSEFSRUQsICZzaXNfc2h0KTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2lzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCmluZGV4IDY5ZjY1MWUuLjE2YWE2ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwpAQCAtNDUsNiArNDUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2lmZGVmIENPTkZJR19QUENfT0YKQEAgLTU5LDYgKzYxLDcgQEAKIAkvKiBhcC0+ZmxhZ3MgYml0cyAqLwogCUsyX0ZMQUdfU0FUQV84X1BPUlRTCQk9ICgxIDw8IDI0KSwKIAlLMl9GTEFHX05PX0FUQVBJX0RNQQkJPSAoMSA8PCAyNSksCisJSzJfRkxBR19CQVJfUE9TXzMJCQk9ICgxIDw8IDI2KSwKIAogCS8qIFRhc2tmaWxlIHJlZ2lzdGVycyBvZmZzZXRzICovCiAJSzJfU0FUQV9URl9DTURfT0ZGU0VUCQk9IDB4MDAsCkBAIC04OCw4ICs5MSwxMCBAQAogCS8qIFBvcnQgc3RyaWRlICovCiAJSzJfU0FUQV9QT1JUX09GRlNFVAkJPSAweDEwMCwKIAotCWJvYXJkX3N2dzQJCQk9IDAsCi0JYm9hcmRfc3Z3OAkJCT0gMSwKKwljaGlwX3N2dzQJCQk9IDAsCisJY2hpcF9zdnc4CQkJPSAxLAorCWNoaXBfc3Z3NDIJCQk9IDIsCS8qIGJhciAzICovCisJY2hpcF9zdnc0MwkJCT0gMywJLyogYmFyIDUgKi8KIH07CiAKIHN0YXRpYyB1OCBrMl9zdGF0X2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKQEAgLTk3LDEwICsxMDIsMjUgQEAKIAogc3RhdGljIGludCBrMl9zYXRhX2NoZWNrX2F0YXBpX2RtYShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogeworCXU4IGNtbmQgPSBxYy0+c2NzaWNtZC0+Y21uZFswXTsKKwogCWlmIChxYy0+YXAtPmZsYWdzICYgSzJfRkxBR19OT19BVEFQSV9ETUEpCiAJCXJldHVybiAtMTsJLyogQVRBUEkgRE1BIG5vdCBzdXBwb3J0ZWQgKi8KKwllbHNlIHsKKwkJc3dpdGNoIChjbW5kKSB7CisJCWNhc2UgUkVBRF8xMDoKKwkJY2FzZSBSRUFEXzEyOgorCQljYXNlIFJFQURfMTY6CisJCWNhc2UgV1JJVEVfMTA6CisJCWNhc2UgV1JJVEVfMTI6CisJCWNhc2UgV1JJVEVfMTY6CisJCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisKKwl9CiB9CiAKIHN0YXRpYyBpbnQgazJfc2F0YV9zY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgKnZhbCkKQEAgLTIxMyw3ICsyMzMsNyBAQAogCiAJLyogaXNzdWUgci93IGNvbW1hbmQgaWYgdGhpcyBpcyBub3QgYSBBVEEgRE1BIGNvbW1hbmQqLwogCWlmIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfRE1BKQotCQlhcC0+b3BzLT5leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworCQlhcC0+b3BzLT5zZmZfZXhlY19jb21tYW5kKGFwLCAmcWMtPnRmKTsKIH0KIAogLyoqCkBAIC0yNDksNyArMjY5LDcgQEAKIAkgICBhbmQgdGhlIHN0YXJ0IGNvbW1hbmQuICovCiAJLyogaXNzdWUgci93IGNvbW1hbmQgaWYgdGhlIGFjY2VzcyBpcyB0byBBVEEqLwogCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfRE1BKQotCQlhcC0+b3BzLT5leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworCQlhcC0+b3BzLT5zZmZfZXhlY19jb21tYW5kKGFwLCAmcWMtPnRmKTsKIH0KIAogCkBAIC0zMDcsNTQgKzMyNywyNyBAQAogCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGsyX3NhdGFfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKICNpZmRlZiBDT05GSUdfUFBDX09GCiAJLnByb2NfaW5mbwkJPSBrMl9zYXRhX3Byb2NfaW5mbywKICNlbmRpZgotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKIH07CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGsyX3NhdGFfb3BzID0gewotCS50Zl9sb2FkCQk9IGsyX3NhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBrMl9zYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBrMl9zdGF0X2NoZWNrX3N0YXR1cywKLQkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGsyX3NhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5zZmZfdGZfbG9hZAkJPSBrMl9zYXRhX3RmX2xvYWQsCisJLnNmZl90Zl9yZWFkCQk9IGsyX3NhdGFfdGZfcmVhZCwKKwkuc2ZmX2NoZWNrX3N0YXR1cwk9IGsyX3N0YXRfY2hlY2tfc3RhdHVzLAogCS5jaGVja19hdGFwaV9kbWEJPSBrMl9zYXRhX2NoZWNrX2F0YXBpX2RtYSwKIAkuYm1kbWFfc2V0dXAJCT0gazJfYm1kbWFfc2V0dXBfbW1pbywKIAkuYm1kbWFfc3RhcnQJCT0gazJfYm1kbWFfc3RhcnRfbW1pbywKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAotCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCiAJLnNjcl9yZWFkCQk9IGsyX3NhdGFfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBrMl9zYXRhX3Njcl93cml0ZSwKLQkucG9ydF9zdGFydAkJPSBhdGFfcG9ydF9zdGFydCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBrMl9wb3J0X2luZm9bXSA9IHsKLQkvKiBib2FyZF9zdnc0ICovCisJLyogY2hpcF9zdnc0ICovCiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19OT19BVEFQSV9ETUEsCkBAIC0zNjMsNyArMzU2LDcgQEAKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCi0JLyogYm9hcmRfc3Z3OCAqLworCS8qIGNoaXBfc3Z3OCAqLwogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfTk9fQVRBUElfRE1BIHwKQEAgLTM3Myw2ICszNjYsMjQgQEAKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCisJLyogY2hpcF9zdnc0MiAqLworCXsKKwkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAorCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfQkFSX1BPU18zLAorCQkucGlvX21hc2sJPSAweDFmLAorCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCisJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKKwl9LAorCS8qIGNoaXBfc3Z3NDMgKi8KKwl7CisJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKKwkJCQkgIEFUQV9GTEFHX01NSU8sCisJCS5waW9fbWFzawk9IDB4MWYsCisJCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKKwkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAorCX0sCiB9OwogCiBzdGF0aWMgdm9pZCBrMl9zYXRhX3NldHVwX3BvcnQoc3RydWN0IGF0YV9pb3BvcnRzICpwb3J0LCB2b2lkIF9faW9tZW0gKmJhc2UpCkBAIC00MDIsNyArNDEzLDcgQEAKIAkJeyAmazJfcG9ydF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLCBOVUxMIH07CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOwotCWludCBuX3BvcnRzLCBpLCByYzsKKwlpbnQgbl9wb3J0cywgaSwgcmMsIGJhcl9wb3M7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CkBAIC00MTYsNiArNDI3LDkgQEAKIAlpZiAoIWhvc3QpCiAJCXJldHVybiAtRU5PTUVNOwogCisJYmFyX3BvcyA9IDU7CisJaWYgKHBwaVswXS0+ZmxhZ3MgJiBLMl9GTEFHX0JBUl9QT1NfMykKKwkJYmFyX3BvcyA9IDM7CiAJLyoKIAkgKiBJZiB0aGlzIGRyaXZlciBoYXBwZW5zIHRvIG9ubHkgYmUgdXNlZnVsIG9uIEFwcGxlJ3MgSzIsIHRoZW4KIAkgKiB3ZSBzaG91bGQgY2hlY2sgdGhhdCBoZXJlIGFzIGl0IGhhcyBhIG5vcm1hbCBTZXJ2ZXJ3b3JrcyBJRApAQCAtNDI4LDE3ICs0NDIsMjMgQEAKIAkgKiBDaGVjayBpZiB3ZSBoYXZlIHJlc291cmNlcyBtYXBwZWQgYXQgYWxsIChzZWNvbmQgZnVuY3Rpb24gbWF5CiAJICogaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGZpcm13YXJlKQogCSAqLwotCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDUpID09IDApCisJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyX3BvcykgPT0gMCkgeworCQkvKiBJbiBJREUgbW9kZSB3ZSBuZWVkIHRvIHBpbiB0aGUgZGV2aWNlIHRvIGVuc3VyZSB0aGF0CisJCQlwY2ltX3JlbGVhc2UgZG9lcyBub3QgY2xlYXIgdGhlIGJ1c21hc3RlciBiaXQgaW4gY29uZmlnCisJCQlzcGFjZSwgY2xlYXJpbmcgY2F1c2VzIGJ1c21hc3RlciBETUEgdG8gZmFpbCBvbgorCQkJcG9ydHMgMyAmIDQgKi8KKwkJcGNpbV9waW5fZGV2aWNlKHBkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBSZXF1ZXN0IGFuZCBpb21hcCBQQ0kgcmVnaW9ucyAqLwotCXJjID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIDEgPDwgNSwgRFJWX05BTUUpOworCXJjID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIDEgPDwgYmFyX3BvcywgRFJWX05BTUUpOwogCWlmIChyYyA9PSAtRUJVU1kpCiAJCXBjaW1fcGluX2RldmljZShwZGV2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlob3N0LT5pb21hcCA9IHBjaW1faW9tYXBfdGFibGUocGRldik7Ci0JbW1pb19iYXNlID0gaG9zdC0+aW9tYXBbNV07CisJbW1pb19iYXNlID0gaG9zdC0+aW9tYXBbYmFyX3Bvc107CiAKIAkvKiBkaWZmZXJlbnQgY29udHJvbGxlcnMgaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mIHBvcnRzIC0gY3VycmVudGx5IDQgb3IgOCAqLwogCS8qIEFsbCBwb3J0cyBhcmUgb24gdGhlIHNhbWUgZnVuY3Rpb24uIE11bHRpLWZ1bmN0aW9uIGRldmljZSBpcyBubwpAQCAtNDcyLDggKzQ5Miw4IEBACiAJd3JpdGVsKDB4MCwgbW1pb19iYXNlICsgSzJfU0FUQV9TSU1fT0ZGU0VUKTsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIGF0YV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJCSAmazJfc2F0YV9zaHQpOworCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIGF0YV9zZmZfaW50ZXJydXB0LAorCQkJCSBJUlFGX1NIQVJFRCwgJmsyX3NhdGFfc2h0KTsKIH0KIAogLyogMHgyNDAgaXMgZGV2aWNlIElEIGZvciBBcHBsZSBLMiBkZXZpY2UKQEAgLTQ4MywxMSArNTAzLDEzIEBACiAgKiBjb250cm9sbGVyCiAgKiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGsyX3NhdGFfcGNpX3RibFtdID0gewotCXsgUENJX1ZERVZJQ0UoU0VSVkVSV09SS1MsIDB4MDI0MCksIGJvYXJkX3N2dzQgfSwKLQl7IFBDSV9WREVWSUNFKFNFUlZFUldPUktTLCAweDAyNDEpLCBib2FyZF9zdnc0IH0sCi0JeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjQyKSwgYm9hcmRfc3Z3OCB9LAotCXsgUENJX1ZERVZJQ0UoU0VSVkVSV09SS1MsIDB4MDI0YSksIGJvYXJkX3N2dzQgfSwKLQl7IFBDSV9WREVWSUNFKFNFUlZFUldPUktTLCAweDAyNGIpLCBib2FyZF9zdnc0IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjQwKSwgY2hpcF9zdnc0IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjQxKSwgY2hpcF9zdnc4IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjQyKSwgY2hpcF9zdnc0IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjRhKSwgY2hpcF9zdnc0IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjRiKSwgY2hpcF9zdnc0IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwNDEwKSwgY2hpcF9zdnc0MiB9LAorCXsgUENJX1ZERVZJQ0UoU0VSVkVSV09SS1MsIDB4MDQxMSksIGNoaXBfc3Z3NDMgfSwKIAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCmluZGV4IGUzZDU2YmMuLmVjMDRiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwpAQCAtMjMyLDQwICsyMzIsMzAgQEAKIHN0YXRpYyB2b2lkIHBkYzIwNjIxX3B1dF90b19kaW1tKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKIAkJCQkgdm9pZCAqcHNvdXJjZSwgdTMyIG9mZnNldCwgdTMyIHNpemUpOwogc3RhdGljIHZvaWQgcGRjMjA2MjFfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotc3RhdGljIHVuc2lnbmVkIGludCBwZGMyMDYyMV9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHVuc2lnbmVkIGludCBwZGMyMDYyMV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwZGNfc2F0YV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAorCUFUQV9CQVNFX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAogCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBkY18yMDYyMV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gcGRjX3RmX2xvYWRfbW1pbywKLQkudGZfcmVhZAkJPSBhdGFfdGZfcmVhZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmV4ZWNfY29tbWFuZAkJPSBwZGNfZXhlY19jb21tYW5kX21taW8sCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAorLyogVE9ETzogaW5oZXJpdCBmcm9tIGJhc2UgcG9ydF9vcHMgYWZ0ZXIgY29udmVydGluZyB0byBuZXcgRUggKi8KK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwZGNfMjA2MjFfb3BzID0geworCS5zZmZfdGZfbG9hZAkJPSBwZGNfdGZfbG9hZF9tbWlvLAorCS5zZmZfdGZfcmVhZAkJPSBhdGFfc2ZmX3RmX3JlYWQsCisJLnNmZl9jaGVja19zdGF0dXMJPSBhdGFfc2ZmX2NoZWNrX3N0YXR1cywKKwkuc2ZmX2V4ZWNfY29tbWFuZAk9IHBkY19leGVjX2NvbW1hbmRfbW1pbywKKwkuc2ZmX2Rldl9zZWxlY3QJCT0gYXRhX3NmZl9kZXZfc2VsZWN0LAogCS5waHlfcmVzZXQJCT0gcGRjXzIwNjIxX3BoeV9yZXNldCwKIAkucWNfcHJlcAkJPSBwZGMyMDYyMV9xY19wcmVwLAotCS5xY19pc3N1ZQkJPSBwZGMyMDYyMV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKKwkucWNfaXNzdWUJCT0gcGRjMjA2MjFfcWNfaXNzdWUsCisJLnFjX2ZpbGxfcnRmCQk9IGF0YV9zZmZfcWNfZmlsbF9ydGYsCisJLnNmZl9kYXRhX3hmZXIJCT0gYXRhX3NmZl9kYXRhX3hmZXIsCiAJLmVuZ190aW1lb3V0CQk9IHBkY19lbmdfdGltZW91dCwKLQkuaXJxX2NsZWFyCQk9IHBkYzIwNjIxX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAorCS5zZmZfaXJxX2NsZWFyCQk9IHBkYzIwNjIxX2lycV9jbGVhciwKKwkuc2ZmX2lycV9vbgkJPSBhdGFfc2ZmX2lycV9vbiwKIAkucG9ydF9zdGFydAkJPSBwZGNfcG9ydF9zdGFydCwKIH07CiAKQEAgLTQ3NSw3ICs0NjUsNyBAQAogCXZvaWQgX19pb21lbSAqZGltbV9tbWlvID0gYXAtPmhvc3QtPmlvbWFwW1BEQ19ESU1NX0JBUl07CiAJdW5zaWduZWQgaW50IHBvcnRubyA9IGFwLT5wb3J0X25vOwogCXVuc2lnbmVkIGludCBpLCBzaSwgaWR4LCB0b3RhbF9sZW4gPSAwLCBzZ3RfbGVuOwotCXUzMiAqYnVmID0gKHUzMiAqKSAmcHAtPmRpbW1fYnVmW1BEQ19ESU1NX0hFQURFUl9TWl07CisJX19sZTMyICpidWYgPSAoX19sZTMyICopICZwcC0+ZGltbV9idWZbUERDX0RJTU1fSEVBREVSX1NaXTsKIAogCVdBUk5fT04oIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkpOwogCkBAIC02OTMsNyArNjgzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGRjMjA2MjFfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHVuc2lnbmVkIGludCBwZGMyMDYyMV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN3aXRjaCAocWMtPnRmLnByb3RvY29sKSB7CiAJY2FzZSBBVEFfUFJPVF9ETUE6CkBAIC03MDksNyArNjk5LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIGF0YV9xY19pc3N1ZV9wcm90KHFjKTsKKwlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBkYzIwNjIxX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLApAQCAtNzgxLDcgKzc3MSw3IEBACiAJLyogY29tbWFuZCBjb21wbGV0aW9uLCBidXQgbm8gZGF0YSB4ZmVyICovCiAJfSBlbHNlIGlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfTk9EQVRBKSB7CiAKLQkJc3RhdHVzID0gYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMDAwKTsKKwkJc3RhdHVzID0gYXRhX3NmZl9idXN5X3dhaXQoYXAsIEFUQV9CVVNZIHwgQVRBX0RSUSwgMTAwMCk7CiAJCURQUklOVEsoIkJVU19OT0RBVEEgKGRydl9zdGF0IDB4JVgpXG4iLCBzdGF0dXMpOwogCQlxYy0+ZXJyX21hc2sgfD0gYWNfZXJyX21hc2soc3RhdHVzKTsKIAkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKQEAgLTg5MCw3ICs4ODAsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRydl9zdGF0ID0gYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMDAwKTsKKwkJZHJ2X3N0YXQgPSBhdGFfc2ZmX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMDAwKTsKIAogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLAogCQkJCSJ1bmtub3duIHRpbWVvdXQsIGNtZCAweCV4IHN0YXQgMHgleFxuIiwKQEAgLTkwOSw3ICs4OTksNyBAQAogewogCVdBUk5fT04odGYtPnByb3RvY29sID09IEFUQV9QUk9UX0RNQSB8fAogCQl0Zi0+cHJvdG9jb2wgPT0gQVRBX1BST1RfTk9EQVRBKTsKLQlhdGFfdGZfbG9hZChhcCwgdGYpOworCWF0YV9zZmZfdGZfbG9hZChhcCwgdGYpOwogfQogCiAKQEAgLTkxNyw3ICs5MDcsNyBAQAogewogCVdBUk5fT04odGYtPnByb3RvY29sID09IEFUQV9QUk9UX0RNQSB8fAogCQl0Zi0+cHJvdG9jb2wgPT0gQVRBX1BST1RfTk9EQVRBKTsKLQlhdGFfZXhlY19jb21tYW5kKGFwLCB0Zik7CisJYXRhX3NmZl9leGVjX2NvbW1hbmQoYXAsIHRmKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jIGIvZHJpdmVycy9hdGEvc2F0YV91bGkuYwppbmRleCBlNzEwZTcxLi5mMjc3Y2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKQEAgLTc2LDUwICs3NiwxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdWxpX3NodCA9IHsKLQkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJCT0gRFJWX05BTUUsCi0JLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKLQkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKLQkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCi0JLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKLQkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKLQkucHJvY19uYW1lCQk9IERSVl9OQU1FLAotCS5kbWFfYm91bmRhcnkJCT0gQVRBX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAotCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCi0JLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHVsaV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAgICAgICAgICAgICA9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgICAgICAgICAgICA9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0JLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCi0JLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKLQotCS5mcmVlemUJCQk9IGF0YV9ibWRtYV9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdWxpX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuc2NyX3JlYWQJCT0gdWxpX3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gdWxpX3Njcl93cml0ZSwKLQotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHVsaV9wb3J0X2luZm8gPSB7CkBAIC0yMTIsMTEgKzE3NSwxMSBAQAogCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhwcml2OwogCiAJLyogdGhlIGZpcnN0IHR3byBwb3J0cyBhcmUgc3RhbmRhcmQgU0ZGICovCi0JcmMgPSBhdGFfcGNpX2luaXRfc2ZmX2hvc3QoaG9zdCk7CisJcmMgPSBhdGFfcGNpX3NmZl9pbml0X2hvc3QoaG9zdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyYyA9IGF0YV9wY2lfaW5pdF9ibWRtYShob3N0KTsKKwlyYyA9IGF0YV9wY2lfYm1kbWFfaW5pdChob3N0KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjM3LDcgKzIwMCw3IEBACiAJCQkoKHVuc2lnbmVkIGxvbmcpaW9tYXBbMV0gfCBBVEFfUENJX0NUTF9PRlMpICsgNDsKIAkJaW9hZGRyLT5ibWRtYV9hZGRyID0gaW9tYXBbNF0gKyAxNjsKIAkJaHByaXYtPnNjcl9jZmdfYWRkclsyXSA9IFVMSTUyODdfQkFTRSArIFVMSTUyODdfT0ZGUyo0OwotCQlhdGFfc3RkX3BvcnRzKGlvYWRkcik7CisJCWF0YV9zZmZfc3RkX3BvcnRzKGlvYWRkcik7CiAKIAkJYXRhX3BvcnRfZGVzYyhob3N0LT5wb3J0c1syXSwKIAkJCSJjbWQgMHglbGx4IGN0bCAweCVsbHggYm1kbWEgMHglbGx4IiwKQEAgLTI1Miw3ICsyMTUsNyBAQAogCQkJKCh1bnNpZ25lZCBsb25nKWlvbWFwWzNdIHwgQVRBX1BDSV9DVExfT0ZTKSArIDQ7CiAJCWlvYWRkci0+Ym1kbWFfYWRkciA9IGlvbWFwWzRdICsgMjQ7CiAJCWhwcml2LT5zY3JfY2ZnX2FkZHJbM10gPSBVTEk1Mjg3X0JBU0UgKyBVTEk1Mjg3X09GRlMqNTsKLQkJYXRhX3N0ZF9wb3J0cyhpb2FkZHIpOworCQlhdGFfc2ZmX3N0ZF9wb3J0cyhpb2FkZHIpOwogCiAJCWF0YV9wb3J0X2Rlc2MoaG9zdC0+cG9ydHNbMl0sCiAJCQkiY21kIDB4JWxseCBjdGwgMHglbGx4IGJtZG1hIDB4JWxseCIsCkBAIC0yNzksOCArMjQyLDggQEAKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCXBjaV9pbnR4KHBkZXYsIDEpOwotCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIGF0YV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJCSAmdWxpX3NodCk7CisJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBkZXYtPmlycSwgYXRhX3NmZl9pbnRlcnJ1cHQsCisJCQkJIElSUUZfU0hBUkVELCAmdWxpX3NodCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHVsaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwppbmRleCAwZDAzZjQ0Li45NmRlZWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKQEAgLTcxLDcgKzcxLDcgQEAKIHN0YXRpYyBpbnQgc3ZpYV9zY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgKnZhbCk7CiBzdGF0aWMgaW50IHN2aWFfc2NyX3dyaXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogc3RhdGljIHZvaWQgc3ZpYV9ub29wX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIHZ0NjQyMF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGludCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIHN0YXRpYyBpbnQgdnQ2NDIxX3BhdGFfY2FibGVfZGV0ZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgdnQ2NDIxX3NldF9waW9fbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9pZCB2dDY0MjFfc2V0X2RtYV9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKQEAgLTEwMCwxMTAgKzEwMCwyNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc3ZpYV9zaHQgPSB7Ci0JLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCQk9IERSVl9OQU1FLAotCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCi0JLnF1ZXVlY29tbWFuZAkJPSBhdGFfc2NzaV9xdWV1ZWNtZCwKLQkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCi0JLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAotCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCi0JLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCi0JLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKLQkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCi0JLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKLQkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAotCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2dDY0MjBfc2F0YV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAgICAgICAgICAgICA9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgICAgICAgICAgICA9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnQ2NDIwX3NhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5mcmVlemUJCQk9IHN2aWFfbm9vcF9mcmVlemUsCi0JLnRoYXcJCQk9IGF0YV9ibWRtYV90aGF3LAotCS5lcnJvcl9oYW5kbGVyCQk9IHZ0NjQyMF9lcnJvcl9oYW5kbGVyLAotCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9ibWRtYV9wb3N0X2ludGVybmFsX2NtZCwKLQotCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKLQkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAotCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3BvcnRfc3RhcnQsCisJLnByZXJlc2V0CQk9IHZ0NjQyMF9wcmVyZXNldCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2dDY0MjFfcGF0YV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnQ2NDIxX3BhdGFfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJCT0gdnQ2NDIxX3BhdGFfY2FibGVfZGV0ZWN0LAogCS5zZXRfcGlvbW9kZQkJPSB2dDY0MjFfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hbW9kZQkJPSB2dDY0MjFfc2V0X2RtYV9tb2RlLAotCi0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAgICAgICAgICAgICA9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgICAgICAgICAgICA9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJCT0gdnQ2NDIxX3BhdGFfY2FibGVfZGV0ZWN0LAotCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCi0KLQkucG9ydF9zdGFydAkJPSBhdGFfcG9ydF9zdGFydCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2dDY0MjFfc2F0YV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gYXRhX3RmX2xvYWQsCi0JLnRmX3JlYWQJCT0gYXRhX3RmX3JlYWQsCi0JLmNoZWNrX3N0YXR1cwkJPSBhdGFfY2hlY2tfc3RhdHVzLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCi0KLQkuYm1kbWFfc2V0dXAgICAgICAgICAgICA9IGF0YV9ibWRtYV9zZXR1cCwKLQkuYm1kbWFfc3RhcnQgICAgICAgICAgICA9IGF0YV9ibWRtYV9zdGFydCwKLQkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKLQkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCi0KLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAotCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKLQkudGhhdwkJCT0gYXRhX2JtZG1hX3RoYXcsCi0JLmVycm9yX2hhbmRsZXIJCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCi0JLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAotCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlX3NhdGEsCi0KLQkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCi0JLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKLQorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZ0NjQyMV9zYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuc2NyX3JlYWQJCT0gc3ZpYV9zY3JfcmVhZCwKIAkuc2NyX3dyaXRlCQk9IHN2aWFfc2NyX3dyaXRlLAotCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3BvcnRfc3RhcnQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIwX3BvcnRfaW5mbyA9IHsKQEAgLTI1Nyw4ICsxNzMsOCBAQAogCS8qIFNvbWUgVklBIGNvbnRyb2xsZXJzIGNob2tlIGlmIEFUQV9OSUVOIGlzIG1hbmlwdWxhdGVkIGluCiAJICogY2VydGFpbiB3YXkuICBMZWF2ZSBpdCBhbG9uZSBhbmQganVzdCBjbGVhciBwZW5kaW5nIElSUS4KIAkgKi8KLQlhdGFfY2hrX3N0YXR1cyhhcCk7Ci0JYXRhX2JtZG1hX2lycV9jbGVhcihhcCk7CisJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisJYXRhX3NmZl9pcnFfY2xlYXIoYXApOwogfQogCiAvKioKQEAgLTMyMCwyMyArMjM2LDE3IEBACiAKIAlpZiAoIW9ubGluZSkgewogCQkvKiB0ZWxsIEVIIHRvIGJhaWwgKi8KLQkJZWhjLT5pLmFjdGlvbiAmPSB+QVRBX0VIX1JFU0VUX01BU0s7CisJCWVoYy0+aS5hY3Rpb24gJj0gfkFUQV9FSF9SRVNFVDsKIAkJcmV0dXJuIDA7CiAJfQogCiAgc2tpcF9zY3I6CiAJLyogd2FpdCBmb3IgIUJTWSAqLwotCWF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7CisJYXRhX3NmZl93YWl0X3JlYWR5KGxpbmssIGRlYWRsaW5lKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB2dDY0MjBfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgdnQ2NDIwX3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwKLQkJCSAgIGF0YV9zdGRfcG9zdHJlc2V0KTsKLX0KLQogc3RhdGljIGludCB2dDY0MjFfcGF0YV9jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CkBAIC0zOTQsNyArMzA0LDcgQEAKIAlpb2FkZHItPmJtZG1hX2FkZHIgPSBibWRtYV9hZGRyOwogCWlvYWRkci0+c2NyX2FkZHIgPSB2dDY0MjFfc2NyX2FkZHIoaW9tYXBbNV0sIGFwLT5wb3J0X25vKTsKIAotCWF0YV9zdGRfcG9ydHMoaW9hZGRyKTsKKwlhdGFfc2ZmX3N0ZF9wb3J0cyhpb2FkZHIpOwogCiAJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBhcC0+cG9ydF9ubywgLTEsICJwb3J0Iik7CiAJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCA0LCBhcC0+cG9ydF9ubyAqIDgsICJibWRtYSIpOwpAQCAtNDA2LDcgKzMxNiw3IEBACiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCWludCByYzsKIAotCXJjID0gYXRhX3BjaV9wcmVwYXJlX3NmZl9ob3N0KHBkZXYsIHBwaSwgJmhvc3QpOworCXJjID0gYXRhX3BjaV9zZmZfcHJlcGFyZV9ob3N0KHBkZXYsIHBwaSwgJmhvc3QpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCSpyX2hvc3QgPSBob3N0OwpAQCAtNTM4LDggKzQ0OCw4IEBACiAJc3ZpYV9jb25maWd1cmUocGRldik7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBhdGFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCQkgJnN2aWFfc2h0KTsKKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBhdGFfc2ZmX2ludGVycnVwdCwKKwkJCQkgSVJRRl9TSEFSRUQsICZzdmlhX3NodCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHN2aWFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggOTVhZTNlZC4uZjNkNjM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwogCXUxNiBuc2VjdCwgbGJhbCwgbGJhbSwgbGJhaCwgZmVhdHVyZTsKIAotCXRmLT5jb21tYW5kID0gYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJdGYtPmNvbW1hbmQgPSBhdGFfc2ZmX2NoZWNrX3N0YXR1cyhhcCk7CiAJdGYtPmRldmljZSA9IHJlYWR3KGlvYWRkci0+ZGV2aWNlX2FkZHIpOwogCWZlYXR1cmUgPSByZWFkdyhpb2FkZHItPmVycm9yX2FkZHIpOwogCW5zZWN0ID0gcmVhZHcoaW9hZGRyLT5uc2VjdF9hZGRyKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogCiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5saW5rLmFjdGl2ZV90YWcpOwogCWlmIChxYyAmJiBsaWtlbHkoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykpKQotCQloYW5kbGVkID0gYXRhX2hvc3RfaW50cihhcCwgcWMpOworCQloYW5kbGVkID0gYXRhX3NmZl9ob3N0X2ludHIoYXAsIHFjKTsKIAogCS8qIFdlIHJlY2VpdmVkIGFuIGludGVycnVwdCBkdXJpbmcgYSBwb2xsZWQgY29tbWFuZCwKIAkgKiBvciBzb21lIG90aGVyIHNwdXJpb3VzIGNvbmRpdGlvbi4gIEludGVycnVwdCByZXBvcnRpbmcKQEAgLTI1MSw3ICsyNTEsNyBAQAogCSAqIHNpbXBseSBjbGVhciB0aGUgaW50ZXJydXB0CiAJICovCiAJaWYgKHVubGlrZWx5KCFoYW5kbGVkKSkKLQkJYXRhX2Noa19zdGF0dXMoYXApOworCQlhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIH0KIAogLyoKQEAgLTMwMCw0NiArMzAwLDE4IEBACiAKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdnNjX3NhdGFfc2h0ID0gewotCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQkJPSBEUlZfTkFNRSwKLQkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCi0JLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAotCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAotCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAotCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAotCS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCi0JLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAotCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCi0JLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKLQkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2c2Nfc2F0YV9vcHMgPSB7Ci0JLnRmX2xvYWQJCT0gdnNjX3NhdGFfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSB2c2Nfc2F0YV90Zl9yZWFkLAotCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKLQkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCi0JLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAotCS5ibWRtYV9zZXR1cCAgICAgICAgICAgID0gYXRhX2JtZG1hX3NldHVwLAotCS5ibWRtYV9zdGFydCAgICAgICAgICAgID0gYXRhX2JtZG1hX3N0YXJ0LAotCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLAotCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKLQkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKLQkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmRhdGFfeGZlcgkJPSBhdGFfZGF0YV94ZmVyLAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZzY19zYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkuc2ZmX3RmX2xvYWQJCT0gdnNjX3NhdGFfdGZfbG9hZCwKKwkuc2ZmX3RmX3JlYWQJCT0gdnNjX3NhdGFfdGZfcmVhZCwKIAkuZnJlZXplCQkJPSB2c2NfZnJlZXplLAogCS50aGF3CQkJPSB2c2NfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKLQkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCi0JLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAotCS5pcnFfb24JCQk9IGF0YV9pcnFfb24sCiAJLnNjcl9yZWFkCQk9IHZzY19zYXRhX3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gdnNjX3NhdGFfc2NyX3dyaXRlLAotCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogfTsKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHZzY19zYXRhX3NldHVwX3BvcnQoc3RydWN0IGF0YV9pb3BvcnRzICpwb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jIGIvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCmluZGV4IDdiNDRhNTkuLjVhYTEyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYworKysgYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogCiAvKiBzZWUgbGltaXRhdGlvbnMgdW5kZXIgSGFyZHdhcmUgRmVhdHVyZXMgKi8KIAotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfYXJlYSAodm9pZCAqIHN0YXJ0LCBzaXplX3QgbGVuZ3RoKSB7CitzdGF0aWMgaW50IGNoZWNrX2FyZWEgKHZvaWQgKiBzdGFydCwgc2l6ZV90IGxlbmd0aCkgewogICAvLyBhc3N1bWVzIGxlbmd0aCA+IDAKICAgY29uc3QgdTMyIGZvdXJtZWdtYXNrID0gLTEgPDwgMjI7CiAgIGNvbnN0IHUzMiB0d29maXZlc2l4bWFzayA9IC0xIDw8IDg7CkBAIC00NTYsNyArNDU2LDcgQEAKIAogLyoqKioqKioqKiogZnJlZSBhbiBza2IgKGFzIHBlciBBVE0gZGV2aWNlIGRyaXZlciBkb2N1bWVudGF0aW9uKSAqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYW1iX2tmcmVlX3NrYiAoc3RydWN0IHNrX2J1ZmYgKiBza2IpIHsKK3N0YXRpYyB2b2lkIGFtYl9rZnJlZV9za2IgKHN0cnVjdCBza19idWZmICogc2tiKSB7CiAgIGlmIChBVE1fU0tCKHNrYiktPnZjYy0+cG9wKSB7CiAgICAgQVRNX1NLQihza2IpLT52Y2MtPnBvcCAoQVRNX1NLQihza2IpLT52Y2MsIHNrYik7CiAgIH0gZWxzZSB7CkBAIC00NjYsNyArNDY2LDcgQEAKIAogLyoqKioqKioqKiogVFggY29tcGxldGlvbiAqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgdHhfY29tcGxldGUgKGFtYl9kZXYgKiBkZXYsIHR4X291dCAqIHR4KSB7CitzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZSAoYW1iX2RldiAqIGRldiwgdHhfb3V0ICogdHgpIHsKICAgdHhfc2ltcGxlICogdHhfZGVzY3IgPSBidXNfdG9fdmlydCAodHgtPmhhbmRsZSk7CiAgIHN0cnVjdCBza19idWZmICogc2tiID0gdHhfZGVzY3ItPnNrYjsKICAgCkBAIC02NDMsNyArNjQzLDcgQEAKIAogLyoqKioqKioqKiogVFggcXVldWUgcGFpciAqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIGludCB0eF9naXZlIChhbWJfZGV2ICogZGV2LCB0eF9pbiAqIHR4KSB7CitzdGF0aWMgaW50IHR4X2dpdmUgKGFtYl9kZXYgKiBkZXYsIHR4X2luICogdHgpIHsKICAgYW1iX3R4cSAqIHR4cSA9ICZkZXYtPnR4cTsKICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgCkBAIC02NzUsNyArNjc1LDcgQEAKICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGludCB0eF90YWtlIChhbWJfZGV2ICogZGV2KSB7CitzdGF0aWMgaW50IHR4X3Rha2UgKGFtYl9kZXYgKiBkZXYpIHsKICAgYW1iX3R4cSAqIHR4cSA9ICZkZXYtPnR4cTsKICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgCkBAIC03MDMsNyArNzAzLDcgQEAKIAogLyoqKioqKioqKiogUlggcXVldWUgcGFpcnMgKioqKioqKioqKi8KIAotc3RhdGljIGlubGluZSBpbnQgcnhfZ2l2ZSAoYW1iX2RldiAqIGRldiwgcnhfaW4gKiByeCwgdW5zaWduZWQgY2hhciBwb29sKSB7CitzdGF0aWMgaW50IHJ4X2dpdmUgKGFtYl9kZXYgKiBkZXYsIHJ4X2luICogcngsIHVuc2lnbmVkIGNoYXIgcG9vbCkgewogICBhbWJfcnhxICogcnhxID0gJmRldi0+cnhxW3Bvb2xdOwogICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAKQEAgLTcyOCw3ICs3MjgsNyBAQAogICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJ4X3Rha2UgKGFtYl9kZXYgKiBkZXYsIHVuc2lnbmVkIGNoYXIgcG9vbCkgeworc3RhdGljIGludCByeF90YWtlIChhbWJfZGV2ICogZGV2LCB1bnNpZ25lZCBjaGFyIHBvb2wpIHsKICAgYW1iX3J4cSAqIHJ4cSA9ICZkZXYtPnJ4cVtwb29sXTsKICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgCkBAIC03NjEsNyArNzYxLDcgQEAKIC8qKioqKioqKioqIFJYIFBvb2wgaGFuZGxpbmcgKioqKioqKioqKi8KIAogLyogcHJlOiBidWZmZXJzX3dhbnRlZCA9IDAsIHBvc3Q6IHBlbmRpbmcgPSAwICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJhaW5fcnhfcG9vbCAoYW1iX2RldiAqIGRldiwgdW5zaWduZWQgY2hhciBwb29sKSB7CitzdGF0aWMgdm9pZCBkcmFpbl9yeF9wb29sIChhbWJfZGV2ICogZGV2LCB1bnNpZ25lZCBjaGFyIHBvb2wpIHsKICAgYW1iX3J4cSAqIHJ4cSA9ICZkZXYtPnJ4cVtwb29sXTsKICAgCiAgIFBSSU5URCAoREJHX0ZMT1d8REJHX1BPT0wsICJkcmFpbl9yeF9wb29sICVwICVodSIsIGRldiwgcG9vbCk7CkBAIC03OTYsNyArNzk2LDcgQEAKICAgICBkcmFpbl9yeF9wb29sIChkZXYsIHBvb2wpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9yeF9wb29sIChhbWJfZGV2ICogZGV2LCB1bnNpZ25lZCBjaGFyIHBvb2wsCitzdGF0aWMgdm9pZCBmaWxsX3J4X3Bvb2wgKGFtYl9kZXYgKiBkZXYsIHVuc2lnbmVkIGNoYXIgcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmcF90IHByaW9yaXR5KQogewogICByeF9pbiByeDsKQEAgLTg0Niw3ICs4NDYsNyBAQAogCiAvKioqKioqKioqKiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICoqKioqKioqKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlcnJ1cHRzX29uIChhbWJfZGV2ICogZGV2KSB7CitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRzX29uIChhbWJfZGV2ICogZGV2KSB7CiAgIHdyX3BsYWluIChkZXYsIG9mZnNldG9mKGFtYl9tZW0sIGludGVycnVwdF9jb250cm9sKSwKIAkgICAgcmRfcGxhaW4gKGRldiwgb2Zmc2V0b2YoYW1iX21lbSwgaW50ZXJydXB0X2NvbnRyb2wpKQogCSAgICB8IEFNQl9JTlRFUlJVUFRfQklUUyk7CkBAIC04NTQsNyArODU0LDcgQEAKIAogLyoqKioqKioqKiogZGlzYWJsZSBob3N0IGludGVycnVwdHMgKioqKioqKioqKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGludGVycnVwdHNfb2ZmIChhbWJfZGV2ICogZGV2KSB7CitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRzX29mZiAoYW1iX2RldiAqIGRldikgewogICB3cl9wbGFpbiAoZGV2LCBvZmZzZXRvZihhbWJfbWVtLCBpbnRlcnJ1cHRfY29udHJvbCksCiAJICAgIHJkX3BsYWluIChkZXYsIG9mZnNldG9mKGFtYl9tZW0sIGludGVycnVwdF9jb250cm9sKSkKIAkgICAgJn4gQU1CX0lOVEVSUlVQVF9CSVRTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwppbmRleCBjNjYyZDY4Li45ODA5OWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKKysrIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCkBAIC0zMzEsOCArMzMxLDggQEAKICNkZWZpbmUgRlNfREVCVUdfUVNJWkUgICAweDAwMDAxMDAwCiAKIAotI2RlZmluZSBmdW5jX2VudGVyKCkgZnNfZHByaW50ayAoRlNfREVCVUdfRkxPVywgImZzOiBlbnRlciAlc1xuIiwgX19GVU5DVElPTl9fKQotI2RlZmluZSBmdW5jX2V4aXQoKSAgZnNfZHByaW50ayAoRlNfREVCVUdfRkxPVywgImZzOiBleGl0ICAlc1xuIiwgX19GVU5DVElPTl9fKQorI2RlZmluZSBmdW5jX2VudGVyKCkgZnNfZHByaW50ayhGU19ERUJVR19GTE9XLCAiZnM6IGVudGVyICVzXG4iLCBfX2Z1bmNfXykKKyNkZWZpbmUgZnVuY19leGl0KCkgIGZzX2RwcmludGsoRlNfREVCVUdfRkxPVywgImZzOiBleGl0ICAlc1xuIiwgX19mdW5jX18pCiAKIAogc3RhdGljIHN0cnVjdCBmc19kZXYgKmZzX2JvYXJkcyA9IE5VTEw7CkBAIC05NzgsNiArOTc4LDcgQEAKIAkJLyogRG9jcyBhcmUgdmFndWUgYWJvdXQgdGhpcyBhdG1faGRyIGZpZWxkLiBCeSB0aGUgd2F5LCB0aGUgRlMKIAkJICogY2hpcCBtYWtlcyBvZGQgZXJyb3JzIGlmIGxvd2VyIGJpdHMgYXJlIHNldC4uLi4gLS0gUkVXICovCiAJCXRjLT5hdG1faGRyID0gICh2cGkgPDwgMjApIHwgKHZjaSA8PCA0KTsgCisJCXRtYzAgPSAwOwogCQl7CiAJCQlpbnQgcGNyID0gYXRtX3Bjcl9nb2FsICh0eHRwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggZjk3ZTA1MC4uNDMyMTgxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC05NSw4ICs5NSw4IEBACiAjaWYgMQogI2RlZmluZSBBU1NFUlQoZXhwcikgICAgIGlmICghKGV4cHIpKSB7IFwKIAkJCSAgICAgcHJpbnRrKEZPUkUyMDBFICJhc3NlcnRpb24gZmFpbGVkISAlc1slZF06ICVzXG4iLCBcCi0JCQkJICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18sICNleHByKTsgXAotCQkJICAgICBwYW5pYyhGT1JFMjAwRSAiJXMiLCBfX0ZVTkNUSU9OX18pOyBcCisJCQkJICAgIF9fZnVuY19fLCBfX0xJTkVfXywgI2V4cHIpOyBcCisJCQkgICAgIHBhbmljKEZPUkUyMDBFICIlcyIsIF9fZnVuY19fKTsgXAogCQkJIH0KICNlbHNlCiAjZGVmaW5lIEFTU0VSVChleHByKSAgICAgZG8ge30gd2hpbGUgKDApCkBAIC0xOTg4LDE5ICsxOTg4LDE5IEBACiAgICAgaWYgKGZvcmUyMDBlX2dldHN0YXRzKGZvcmUyMDBlKSA8IDApCiAJcmV0dXJuIC1FSU87CiAKLSAgICB0bXAuc2VjdGlvbl9iaXAgPSBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5zZWN0aW9uX2JpcDhfZXJyb3JzKTsKLSAgICB0bXAubGluZV9iaXAgICAgPSBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2JpcDI0X2Vycm9ycyk7Ci0gICAgdG1wLnBhdGhfYmlwICAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9iaXA4X2Vycm9ycyk7Ci0gICAgdG1wLmxpbmVfZmViZSAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMubGluZV9mZWJlX2Vycm9ycyk7Ci0gICAgdG1wLnBhdGhfZmViZSAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9mZWJlX2Vycm9ycyk7Ci0gICAgdG1wLmNvcnJfaGNzICAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMuY29ycl9oY3NfZXJyb3JzKTsKLSAgICB0bXAudW5jb3JyX2hjcyAgPSBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy51Y29ycl9oY3NfZXJyb3JzKTsKLSAgICB0bXAudHhfY2VsbHMgICAgPSBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfdHJhbnNtaXR0ZWQpICArCi0JICAgICAgICAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3RyYW5zbWl0dGVkKSArCi0JICAgICAgICAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfdHJhbnNtaXR0ZWQpOwotICAgIHRtcC5yeF9jZWxscyAgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc19yZWNlaXZlZCkgICAgICsKLQkgICAgICAgICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfcmVjZWl2ZWQpICAgICsKLQkgICAgICAgICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc19yZWNlaXZlZCk7CisgICAgdG1wLnNlY3Rpb25fYmlwID0gYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMuc2VjdGlvbl9iaXA4X2Vycm9ycyk7CisgICAgdG1wLmxpbmVfYmlwICAgID0gYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMubGluZV9iaXAyNF9lcnJvcnMpOworICAgIHRtcC5wYXRoX2JpcCAgICA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfYmlwOF9lcnJvcnMpOworICAgIHRtcC5saW5lX2ZlYmUgICA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfZmViZV9lcnJvcnMpOworICAgIHRtcC5wYXRoX2ZlYmUgICA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfZmViZV9lcnJvcnMpOworICAgIHRtcC5jb3JyX2hjcyAgICA9IGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLmNvcnJfaGNzX2Vycm9ycyk7CisgICAgdG1wLnVuY29ycl9oY3MgID0gYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMudWNvcnJfaGNzX2Vycm9ycyk7CisgICAgdG1wLnR4X2NlbGxzICAgID0gYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3RyYW5zbWl0dGVkKSAgKworCSAgICAgICAgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc190cmFuc21pdHRlZCkgKworCSAgICAgICAgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX3RyYW5zbWl0dGVkKTsKKyAgICB0bXAucnhfY2VsbHMgICAgPSBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfcmVjZWl2ZWQpICAgICArCisJICAgICAgICAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3JlY2VpdmVkKSAgICArCisJICAgICAgICAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfcmVjZWl2ZWQpOwogCiAgICAgaWYgKGFyZykKIAlyZXR1cm4gY29weV90b191c2VyKGFyZywgJnRtcCwgc2l6ZW9mKHN0cnVjdCBzb25ldF9zdGF0cykpID8gLUVGQVVMVCA6IDA7CQpAQCAtMjU4Nyw3ICsyNTg3LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBmb3JlMjAwZV9sb2FkX2Z3KHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7Ci0gICAgdTMyKiBmd19kYXRhID0gKHUzMiopIGZvcmUyMDBlLT5idXMtPmZ3X2RhdGE7CisgICAgX19sZTMyKiBmd19kYXRhID0gKF9fbGUzMiopIGZvcmUyMDBlLT5idXMtPmZ3X2RhdGE7CiAgICAgdTMyICBmd19zaXplID0gKHUzMikgKmZvcmUyMDBlLT5idXMtPmZ3X3NpemUgLyBzaXplb2YodTMyKTsKIAogICAgIHN0cnVjdCBmd19oZWFkZXIqIGZ3X2hlYWRlciA9IChzdHJ1Y3QgZndfaGVhZGVyKikgZndfZGF0YTsKQEAgLTI5NjUsOCArMjk2NSw4IEBACiAJCSAgICAgICAiICA0YjViOlxuIgogCQkgICAgICAgIiAgICAgY3JjX2hlYWRlcl9lcnJvcnM6XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIGZyYW1pbmdfZXJyb3JzOlx0XHQlMTB1XG4iLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5waHkuY3JjX2hlYWRlcl9lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5waHkuZnJhbWluZ19lcnJvcnMpKTsKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+cGh5LmNyY19oZWFkZXJfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+cGh5LmZyYW1pbmdfZXJyb3JzKSk7CiAgICAgCiAgICAgaWYgKCFsZWZ0LS0pCiAJcmV0dXJuIHNwcmludGYocGFnZSwgIlxuIgpAQCAtMjk3OCwxMyArMjk3OCwxMyBAQAogCQkgICAgICAgIiAgICAgcGF0aF9mZWJlX2Vycm9yczpcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgY29ycl9oY3NfZXJyb3JzOlx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICB1Y29ycl9oY3NfZXJyb3JzOlx0XHQlMTB1XG4iLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMuc2VjdGlvbl9iaXA4X2Vycm9ycyksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5wYXRoX2JpcDhfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfYmlwMjRfZXJyb3JzKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfZmViZV9lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9mZWJlX2Vycm9ycyksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5jb3JyX2hjc19lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMudWNvcnJfaGNzX2Vycm9ycykpOworCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMuc2VjdGlvbl9iaXA4X2Vycm9ycyksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5wYXRoX2JpcDhfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfYmlwMjRfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfZmViZV9lcnJvcnMpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9mZWJlX2Vycm9ycyksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPm9jMy5jb3JyX2hjc19lcnJvcnMpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5vYzMudWNvcnJfaGNzX2Vycm9ycykpOwogCiAgICAgaWYgKCFsZWZ0LS0pCiAJcmV0dXJuIHNwcmludGYocGFnZSwiXG4iCkBAIC0yOTk1LDEyICsyOTk1LDEyIEBACiAJCSAgICAgICAiICAgICB2cGkgbm8gY29ubjpcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgdmNpIG91dCBvZiByYW5nZTpcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgdmNpIG5vIGNvbm46XHRcdCUxMHVcbiIsCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS5jZWxsc19yZWNlaXZlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS52cGlfYmFkX3JhbmdlKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZwaV9ub19jb25uKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZjaV9iYWRfcmFuZ2UpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdG0udmNpX25vX2Nvbm4pKTsKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXRtLmNlbGxzX3RyYW5zbWl0dGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXRtLmNlbGxzX3JlY2VpdmVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZwaV9iYWRfcmFuZ2UpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hdG0udnBpX25vX2Nvbm4pLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hdG0udmNpX2JhZF9yYW5nZSksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF0bS52Y2lfbm9fY29ubikpOwogICAgIAogICAgIGlmICghbGVmdC0tKQogCXJldHVybiBzcHJpbnRmKHBhZ2UsIlxuIgpAQCAtMzAwOCw5ICszMDA4LDkgQEAKIAkJICAgICAgICIgICAgIFRYOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIFJYOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIGRyb3BwZWQ6XHRcdFx0JTEwdVxuIiwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfcmVjZWl2ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX2Ryb3BwZWQpKTsKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc190cmFuc21pdHRlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfcmVjZWl2ZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX2Ryb3BwZWQpKTsKICAgICAKICAgICBpZiAoIWxlZnQtLSkKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCJcbiIKQEAgLTMwMjYsMTUgKzMwMjYsMTUgQEAKIAkJICAgICAgICIgICAgICAgUlg6XHRcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgICBkcm9wcGVkOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgICAgcHJvdG9jb2wgZXJyb3JzOlx0XHQlMTB1XG4iLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3JlY2VpdmVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfZHJvcHBlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX2NyY19lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19wcm90b2NvbF9lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jc3BkdXNfdHJhbnNtaXR0ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jc3BkdXNfcmVjZWl2ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jc3BkdXNfZHJvcHBlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c19wcm90b2NvbF9lcnJvcnMpKTsKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfdHJhbnNtaXR0ZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19yZWNlaXZlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX2Ryb3BwZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19jcmNfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfcHJvdG9jb2xfZXJyb3JzKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX3RyYW5zbWl0dGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX3JlY2VpdmVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX2Ryb3BwZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jc3BkdXNfcHJvdG9jb2xfZXJyb3JzKSk7CiAgICAgCiAgICAgaWYgKCFsZWZ0LS0pCiAJcmV0dXJuIHNwcmludGYocGFnZSwiXG4iCkBAIC0zMDUwLDE1ICszMDUwLDE1IEBACiAJCSAgICAgICAiICAgICAgIGRyb3BwZWQ6XHRcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgICBDUkMgZXJyb3JzOlx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICAgIHByb3RvY29sIGVycm9yczpcdFx0JTEwdVxuIiwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfcmVjZWl2ZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX2Ryb3BwZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNvbmdlc3Rpb25fZXhwZXJpZW5jZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c190cmFuc21pdHRlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX3JlY2VpdmVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfZHJvcHBlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX2NyY19lcnJvcnMpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19wcm90b2NvbF9lcnJvcnMpKTsKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc190cmFuc21pdHRlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfcmVjZWl2ZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX2Ryb3BwZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNvbmdlc3Rpb25fZXhwZXJpZW5jZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c190cmFuc21pdHRlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX3JlY2VpdmVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfZHJvcHBlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX2NyY19lcnJvcnMpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19wcm90b2NvbF9lcnJvcnMpKTsKICAgICAKICAgICBpZiAoIWxlZnQtLSkKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCJcbiIKQEAgLTMwNjksMTEgKzMwNjksMTEgQEAKIAkJICAgICAgICIgICAgIGxhcmdlIGIyOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIFJYIFBEVXM6XHRcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgVFggUERVczpcdFx0XHQlMTBsdVxuIiwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXV4LnNtYWxsX2IxX2ZhaWxlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF1eC5sYXJnZV9iMV9mYWlsZWQpLAotCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdXguc21hbGxfYjJfZmFpbGVkKSwKLQkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXV4LmxhcmdlX2IyX2ZhaWxlZCksCi0JCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF1eC5ycGRfYWxsb2NfZmFpbGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXV4LnNtYWxsX2IxX2ZhaWxlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF1eC5sYXJnZV9iMV9mYWlsZWQpLAorCQkgICAgICAgYmUzMl90b19jcHUoZm9yZTIwMGUtPnN0YXRzLT5hdXguc21hbGxfYjJfZmFpbGVkKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGZvcmUyMDBlLT5zdGF0cy0+YXV4LmxhcmdlX2IyX2ZhaWxlZCksCisJCSAgICAgICBiZTMyX3RvX2NwdShmb3JlMjAwZS0+c3RhdHMtPmF1eC5ycGRfYWxsb2NfZmFpbGVkKSwKIAkJICAgICAgIGZvcmUyMDBlLT50eF9zYXQpOwogICAgIAogICAgIGlmICghbGVmdC0tKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuaCBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmgKaW5kZXggYjg1YTU0Ni4uMTgzODQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuaAorKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oCkBAIC0zNDksOTAgKzM0OSw5MCBAQAogLyogcGh5c2ljYWwgZW5jb2Rpbmcgc3RhdGlzdGljcyAqLwogCiB0eXBlZGVmIHN0cnVjdCBzdGF0c19waHkgewotICAgIHUzMiBjcmNfaGVhZGVyX2Vycm9yczsgICAgLyogY2VsbHMgcmVjZWl2ZWQgd2l0aCBiYWQgaGVhZGVyIENSQyAqLwotICAgIHUzMiBmcmFtaW5nX2Vycm9yczsgICAgICAgLyogY2VsbHMgcmVjZWl2ZWQgd2l0aCBiYWQgZnJhbWluZyAgICAqLwotICAgIHUzMiBwYWRbIDIgXTsgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMiBjcmNfaGVhZGVyX2Vycm9yczsgICAgLyogY2VsbHMgcmVjZWl2ZWQgd2l0aCBiYWQgaGVhZGVyIENSQyAqLworICAgIF9fYmUzMiBmcmFtaW5nX2Vycm9yczsgICAgICAgLyogY2VsbHMgcmVjZWl2ZWQgd2l0aCBiYWQgZnJhbWluZyAgICAqLworICAgIF9fYmUzMiBwYWRbIDIgXTsgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICAqLwogfSBzdGF0c19waHlfdDsKIAogCiAvKiBPQy0zIHN0YXRpc3RpY3MgKi8KIAogdHlwZWRlZiBzdHJ1Y3Qgc3RhdHNfb2MzIHsKLSAgICB1MzIgc2VjdGlvbl9iaXA4X2Vycm9yczsgICAgLyogc2VjdGlvbiA4IGJpdCBpbnRlcmxlYXZlZCBwYXJpdHkgICAgKi8KLSAgICB1MzIgcGF0aF9iaXA4X2Vycm9yczsgICAgICAgLyogcGF0aCA4IGJpdCBpbnRlcmxlYXZlZCBwYXJpdHkgICAgICAgKi8KLSAgICB1MzIgbGluZV9iaXAyNF9lcnJvcnM7ICAgICAgLyogbGluZSAyNCBiaXQgaW50ZXJsZWF2ZWQgcGFyaXR5ICAgICAgKi8KLSAgICB1MzIgbGluZV9mZWJlX2Vycm9yczsgICAgICAgLyogbGluZSBmYXIgZW5kIGJsb2NrIGVycm9ycyAgICAgICAgICAgKi8KLSAgICB1MzIgcGF0aF9mZWJlX2Vycm9yczsgICAgICAgLyogcGF0aCBmYXIgZW5kIGJsb2NrIGVycm9ycyAgICAgICAgICAgKi8KLSAgICB1MzIgY29ycl9oY3NfZXJyb3JzOyAgICAgICAgLyogY29ycmVjdGFibGUgaGVhZGVyIGNoZWNrIHNlcXVlbmNlICAgKi8KLSAgICB1MzIgdWNvcnJfaGNzX2Vycm9yczsgICAgICAgLyogdW5jb3JyZWN0YWJsZSBoZWFkZXIgY2hlY2sgc2VxdWVuY2UgKi8KLSAgICB1MzIgcGFkWyAxIF07ICAgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIgc2VjdGlvbl9iaXA4X2Vycm9yczsgICAgLyogc2VjdGlvbiA4IGJpdCBpbnRlcmxlYXZlZCBwYXJpdHkgICAgKi8KKyAgICBfX2JlMzIgcGF0aF9iaXA4X2Vycm9yczsgICAgICAgLyogcGF0aCA4IGJpdCBpbnRlcmxlYXZlZCBwYXJpdHkgICAgICAgKi8KKyAgICBfX2JlMzIgbGluZV9iaXAyNF9lcnJvcnM7ICAgICAgLyogbGluZSAyNCBiaXQgaW50ZXJsZWF2ZWQgcGFyaXR5ICAgICAgKi8KKyAgICBfX2JlMzIgbGluZV9mZWJlX2Vycm9yczsgICAgICAgLyogbGluZSBmYXIgZW5kIGJsb2NrIGVycm9ycyAgICAgICAgICAgKi8KKyAgICBfX2JlMzIgcGF0aF9mZWJlX2Vycm9yczsgICAgICAgLyogcGF0aCBmYXIgZW5kIGJsb2NrIGVycm9ycyAgICAgICAgICAgKi8KKyAgICBfX2JlMzIgY29ycl9oY3NfZXJyb3JzOyAgICAgICAgLyogY29ycmVjdGFibGUgaGVhZGVyIGNoZWNrIHNlcXVlbmNlICAgKi8KKyAgICBfX2JlMzIgdWNvcnJfaGNzX2Vycm9yczsgICAgICAgLyogdW5jb3JyZWN0YWJsZSBoZWFkZXIgY2hlY2sgc2VxdWVuY2UgKi8KKyAgICBfX2JlMzIgcGFkWyAxIF07ICAgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICAgKi8KIH0gc3RhdHNfb2MzX3Q7CiAKIAogLyogQVRNIHN0YXRpc3RpY3MgKi8KIAogdHlwZWRlZiBzdHJ1Y3Qgc3RhdHNfYXRtIHsKLSAgICB1MzIJY2VsbHNfdHJhbnNtaXR0ZWQ7ICAgIC8qIGNlbGxzIHRyYW5zbWl0dGVkICAgICAgICAgICAgICAgICAqLwotICAgIHUzMgljZWxsc19yZWNlaXZlZDsgICAgICAgLyogY2VsbHMgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICovCi0gICAgdTMyCXZwaV9iYWRfcmFuZ2U7ICAgICAgICAvKiBjZWxsIGRyb3BzOiBWUEkgb3V0IG9mIHJhbmdlICAgICAgKi8KLSAgICB1MzIJdnBpX25vX2Nvbm47ICAgICAgICAgIC8qIGNlbGwgZHJvcHM6IG5vIGNvbm5lY3Rpb24gZm9yIFZQSSAqLwotICAgIHUzMgl2Y2lfYmFkX3JhbmdlOyAgICAgICAgLyogY2VsbCBkcm9wczogVkNJIG91dCBvZiByYW5nZSAgICAgICovCi0gICAgdTMyCXZjaV9ub19jb25uOyAgICAgICAgICAvKiBjZWxsIGRyb3BzOiBubyBjb25uZWN0aW9uIGZvciBWQ0kgKi8KLSAgICB1MzIJcGFkWyAyIF07ICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljZWxsc190cmFuc21pdHRlZDsgICAgLyogY2VsbHMgdHJhbnNtaXR0ZWQgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyCWNlbGxzX3JlY2VpdmVkOyAgICAgICAvKiBjZWxscyByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJdnBpX2JhZF9yYW5nZTsgICAgICAgIC8qIGNlbGwgZHJvcHM6IFZQSSBvdXQgb2YgcmFuZ2UgICAgICAqLworICAgIF9fYmUzMgl2cGlfbm9fY29ubjsgICAgICAgICAgLyogY2VsbCBkcm9wczogbm8gY29ubmVjdGlvbiBmb3IgVlBJICovCisgICAgX19iZTMyCXZjaV9iYWRfcmFuZ2U7ICAgICAgICAvKiBjZWxsIGRyb3BzOiBWQ0kgb3V0IG9mIHJhbmdlICAgICAgKi8KKyAgICBfX2JlMzIJdmNpX25vX2Nvbm47ICAgICAgICAgIC8qIGNlbGwgZHJvcHM6IG5vIGNvbm5lY3Rpb24gZm9yIFZDSSAqLworICAgIF9fYmUzMglwYWRbIDIgXTsgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICovCiB9IHN0YXRzX2F0bV90OwogCiAvKiBBQUwwIHN0YXRpc3RpY3MgKi8KIAogdHlwZWRlZiBzdHJ1Y3Qgc3RhdHNfYWFsMCB7Ci0gICAgdTMyCWNlbGxzX3RyYW5zbWl0dGVkOyAgICAvKiBjZWxscyB0cmFuc21pdHRlZCAqLwotICAgIHUzMgljZWxsc19yZWNlaXZlZDsgICAgICAgLyogY2VsbHMgcmVjZWl2ZWQgICAgKi8KLSAgICB1MzIJY2VsbHNfZHJvcHBlZDsgICAgICAgIC8qIGNlbGxzIGRyb3BwZWQgICAgICovCi0gICAgdTMyCXBhZFsgMSBdOyAgICAgICAgICAgICAvKiBpOTYwIHBhZGRpbmcgICAgICAqLworICAgIF9fYmUzMgljZWxsc190cmFuc21pdHRlZDsgICAgLyogY2VsbHMgdHJhbnNtaXR0ZWQgKi8KKyAgICBfX2JlMzIJY2VsbHNfcmVjZWl2ZWQ7ICAgICAgIC8qIGNlbGxzIHJlY2VpdmVkICAgICovCisgICAgX19iZTMyCWNlbGxzX2Ryb3BwZWQ7ICAgICAgICAvKiBjZWxscyBkcm9wcGVkICAgICAqLworICAgIF9fYmUzMglwYWRbIDEgXTsgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgKi8KIH0gc3RhdHNfYWFsMF90OwogCiAKIC8qIEFBTDMvNCBzdGF0aXN0aWNzICovCiAKIHR5cGVkZWYgc3RydWN0IHN0YXRzX2FhbDM0IHsKLSAgICB1MzIJY2VsbHNfdHJhbnNtaXR0ZWQ7ICAgICAgICAgLyogY2VsbHMgdHJhbnNtaXR0ZWQgZnJvbSBzZWdtZW50ZWQgUERVcyAqLwotICAgIHUzMgljZWxsc19yZWNlaXZlZDsgICAgICAgICAgICAvKiBjZWxscyByZWFzc2VtYmxlZCBpbnRvIFBEVXMgICAgICAgICAgICovCi0gICAgdTMyCWNlbGxzX2NyY19lcnJvcnM7ICAgICAgICAgIC8qIHBheWxvYWQgQ1JDIGVycm9yIGNvdW50ICAgICAgICAgICAgICAgKi8KLSAgICB1MzIJY2VsbHNfcHJvdG9jb2xfZXJyb3JzOyAgICAgLyogU0FSIG9yIENTIGxheWVyIHByb3RvY29sIGVycm9ycyAgICAgICAqLwotICAgIHUzMgljZWxsc19kcm9wcGVkOyAgICAgICAgICAgICAvKiBjZWxscyBkcm9wcGVkOiBwYXJ0aWFsIHJlYXNzZW1ibHkgICAgICovCi0gICAgdTMyCWNzcGR1c190cmFuc21pdHRlZDsgICAgICAgIC8qIENTIFBEVXMgdHJhbnNtaXR0ZWQgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1MzIJY3NwZHVzX3JlY2VpdmVkOyAgICAgICAgICAgLyogQ1MgUERVcyByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHUzMgljc3BkdXNfcHJvdG9jb2xfZXJyb3JzOyAgICAvKiBDUyBsYXllciBwcm90b2NvbCBlcnJvcnMgICAgICAgICAgICAgICovCi0gICAgdTMyCWNzcGR1c19kcm9wcGVkOyAgICAgICAgICAgIC8qIHJlYXNzZW1ibGVkIFBEVXMgZHJvcCdkIChpbiBjZWxscykgICAgKi8KLSAgICB1MzIJcGFkWyAzIF07ICAgICAgICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljZWxsc190cmFuc21pdHRlZDsgICAgICAgICAvKiBjZWxscyB0cmFuc21pdHRlZCBmcm9tIHNlZ21lbnRlZCBQRFVzICovCisgICAgX19iZTMyCWNlbGxzX3JlY2VpdmVkOyAgICAgICAgICAgIC8qIGNlbGxzIHJlYXNzZW1ibGVkIGludG8gUERVcyAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY2VsbHNfY3JjX2Vycm9yczsgICAgICAgICAgLyogcGF5bG9hZCBDUkMgZXJyb3IgY291bnQgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljZWxsc19wcm90b2NvbF9lcnJvcnM7ICAgICAvKiBTQVIgb3IgQ1MgbGF5ZXIgcHJvdG9jb2wgZXJyb3JzICAgICAgICovCisgICAgX19iZTMyCWNlbGxzX2Ryb3BwZWQ7ICAgICAgICAgICAgIC8qIGNlbGxzIGRyb3BwZWQ6IHBhcnRpYWwgcmVhc3NlbWJseSAgICAgKi8KKyAgICBfX2JlMzIJY3NwZHVzX3RyYW5zbWl0dGVkOyAgICAgICAgLyogQ1MgUERVcyB0cmFuc21pdHRlZCAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljc3BkdXNfcmVjZWl2ZWQ7ICAgICAgICAgICAvKiBDUyBQRFVzIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyCWNzcGR1c19wcm90b2NvbF9lcnJvcnM7ICAgIC8qIENTIGxheWVyIHByb3RvY29sIGVycm9ycyAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY3NwZHVzX2Ryb3BwZWQ7ICAgICAgICAgICAgLyogcmVhc3NlbWJsZWQgUERVcyBkcm9wJ2QgKGluIGNlbGxzKSAgICAqLworICAgIF9fYmUzMglwYWRbIDMgXTsgICAgICAgICAgICAgICAgICAvKiBpOTYwIHBhZGRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICovCiB9IHN0YXRzX2FhbDM0X3Q7CiAKIAogLyogQUFMNSBzdGF0aXN0aWNzICovCiAKIHR5cGVkZWYgc3RydWN0IHN0YXRzX2FhbDUgewotICAgIHUzMgljZWxsc190cmFuc21pdHRlZDsgICAgICAgICAvKiBjZWxscyB0cmFuc21pdHRlZCBmcm9tIHNlZ21lbnRlZCBTRFVzICovCi0gICAgdTMyCWNlbGxzX3JlY2VpdmVkOwkJICAgLyogY2VsbHMgcmVhc3NlbWJsZWQgaW50byBTRFVzICAgICAgICAgICAqLwotICAgIHUzMgljZWxsc19kcm9wcGVkOwkJICAgLyogcmVhc3NlbWJsZWQgUERVcyBkcm9wcGVkIChpbiBjZWxscykgICAqLwotICAgIHUzMgljb25nZXN0aW9uX2V4cGVyaWVuY2VkOyAgICAvKiBDUkMgZXJyb3IgYW5kIGxlbmd0aCB3cm9uZyAgICAgICAgICAgICovCi0gICAgdTMyCWNzcGR1c190cmFuc21pdHRlZDsgICAgICAgIC8qIENTIFBEVXMgdHJhbnNtaXR0ZWQgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1MzIJY3NwZHVzX3JlY2VpdmVkOyAgICAgICAgICAgLyogQ1MgUERVcyByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHUzMgljc3BkdXNfY3JjX2Vycm9yczsgICAgICAgICAvKiBDUyBQRFVzIENSQyBlcnJvcnMgICAgICAgICAgICAgICAgICAgICovCi0gICAgdTMyCWNzcGR1c19wcm90b2NvbF9lcnJvcnM7ICAgIC8qIENTIGxheWVyIHByb3RvY29sIGVycm9ycyAgICAgICAgICAgICAgKi8KLSAgICB1MzIJY3NwZHVzX2Ryb3BwZWQ7ICAgICAgICAgICAgLyogcmVhc3NlbWJsZWQgUERVcyBkcm9wcGVkICAgICAgICAgICAgICAqLwotICAgIHUzMglwYWRbIDMgXTsgICAgICAgICAgICAgICAgICAvKiBpOTYwIHBhZGRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyCWNlbGxzX3RyYW5zbWl0dGVkOyAgICAgICAgIC8qIGNlbGxzIHRyYW5zbWl0dGVkIGZyb20gc2VnbWVudGVkIFNEVXMgKi8KKyAgICBfX2JlMzIJY2VsbHNfcmVjZWl2ZWQ7CQkgICAvKiBjZWxscyByZWFzc2VtYmxlZCBpbnRvIFNEVXMgICAgICAgICAgICovCisgICAgX19iZTMyCWNlbGxzX2Ryb3BwZWQ7CQkgICAvKiByZWFzc2VtYmxlZCBQRFVzIGRyb3BwZWQgKGluIGNlbGxzKSAgICovCisgICAgX19iZTMyCWNvbmdlc3Rpb25fZXhwZXJpZW5jZWQ7ICAgIC8qIENSQyBlcnJvciBhbmQgbGVuZ3RoIHdyb25nICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY3NwZHVzX3RyYW5zbWl0dGVkOyAgICAgICAgLyogQ1MgUERVcyB0cmFuc21pdHRlZCAgICAgICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljc3BkdXNfcmVjZWl2ZWQ7ICAgICAgICAgICAvKiBDUyBQRFVzIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICovCisgICAgX19iZTMyCWNzcGR1c19jcmNfZXJyb3JzOyAgICAgICAgIC8qIENTIFBEVXMgQ1JDIGVycm9ycyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJY3NwZHVzX3Byb3RvY29sX2Vycm9yczsgICAgLyogQ1MgbGF5ZXIgcHJvdG9jb2wgZXJyb3JzICAgICAgICAgICAgICAqLworICAgIF9fYmUzMgljc3BkdXNfZHJvcHBlZDsgICAgICAgICAgICAvKiByZWFzc2VtYmxlZCBQRFVzIGRyb3BwZWQgICAgICAgICAgICAgICovCisgICAgX19iZTMyCXBhZFsgMyBdOyAgICAgICAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIH0gc3RhdHNfYWFsNV90OwogCiAKIC8qIGF1eGlsaWFyeSBzdGF0aXN0aWNzICovCiAKIHR5cGVkZWYgc3RydWN0IHN0YXRzX2F1eCB7Ci0gICAgdTMyCXNtYWxsX2IxX2ZhaWxlZDsgICAgIC8qIHJlY2VpdmUgQkQgYWxsb2NhdGlvbiBmYWlsdXJlcyAgKi8KLSAgICB1MzIJbGFyZ2VfYjFfZmFpbGVkOyAgICAgLyogcmVjZWl2ZSBCRCBhbGxvY2F0aW9uIGZhaWx1cmVzICAqLwotICAgIHUzMglzbWFsbF9iMl9mYWlsZWQ7ICAgICAvKiByZWNlaXZlIEJEIGFsbG9jYXRpb24gZmFpbHVyZXMgICovCi0gICAgdTMyCWxhcmdlX2IyX2ZhaWxlZDsgICAgIC8qIHJlY2VpdmUgQkQgYWxsb2NhdGlvbiBmYWlsdXJlcyAgKi8KLSAgICB1MzIJcnBkX2FsbG9jX2ZhaWxlZDsgICAgLyogcmVjZWl2ZSBQRFUgYWxsb2NhdGlvbiBmYWlsdXJlcyAqLwotICAgIHUzMglyZWNlaXZlX2NhcnJpZXI7ICAgICAvKiBubyBjYXJyaWVyID0gMCwgY2FycmllciA9IDEgICAgICovCi0gICAgdTMyCXBhZFsgMiBdOyAgICAgICAgICAgIC8qIGk5NjAgcGFkZGluZyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX2JlMzIJc21hbGxfYjFfZmFpbGVkOyAgICAgLyogcmVjZWl2ZSBCRCBhbGxvY2F0aW9uIGZhaWx1cmVzICAqLworICAgIF9fYmUzMglsYXJnZV9iMV9mYWlsZWQ7ICAgICAvKiByZWNlaXZlIEJEIGFsbG9jYXRpb24gZmFpbHVyZXMgICovCisgICAgX19iZTMyCXNtYWxsX2IyX2ZhaWxlZDsgICAgIC8qIHJlY2VpdmUgQkQgYWxsb2NhdGlvbiBmYWlsdXJlcyAgKi8KKyAgICBfX2JlMzIJbGFyZ2VfYjJfZmFpbGVkOyAgICAgLyogcmVjZWl2ZSBCRCBhbGxvY2F0aW9uIGZhaWx1cmVzICAqLworICAgIF9fYmUzMglycGRfYWxsb2NfZmFpbGVkOyAgICAvKiByZWNlaXZlIFBEVSBhbGxvY2F0aW9uIGZhaWx1cmVzICovCisgICAgX19iZTMyCXJlY2VpdmVfY2FycmllcjsgICAgIC8qIG5vIGNhcnJpZXIgPSAwLCBjYXJyaWVyID0gMSAgICAgKi8KKyAgICBfX2JlMzIJcGFkWyAyIF07ICAgICAgICAgICAgLyogaTk2MCBwYWRkaW5nICAgICAgICAgICAgICAgICAgICAqLwogfSBzdGF0c19hdXhfdDsKIAogCkBAIC02NDMsMTAgKzY0MywxMCBAQAogLyogaGVhZGVyIG9mIHRoZSBmaXJtd2FyZSBpbWFnZSAqLwogCiB0eXBlZGVmIHN0cnVjdCBmd19oZWFkZXIgewotICAgIHUzMiBtYWdpYzsgICAgICAgICAgIC8qIG1hZ2ljIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHUzMiB2ZXJzaW9uOyAgICAgICAgIC8qIGZpcm13YXJlIHZlcnNpb24gaWQgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHUzMiBsb2FkX29mZnNldDsgICAgIC8qIGZ3IGxvYWQgb2Zmc2V0IGluIGJvYXJkIG1lbW9yeSAgICAgICAgICAgICAqLwotICAgIHUzMiBzdGFydF9vZmZzZXQ7ICAgIC8qIGZ3IGV4ZWN1dGlvbiBzdGFydCBhZGRyZXNzIGluIGJvYXJkIG1lbW9yeSAqLworICAgIF9fbGUzMiBtYWdpYzsgICAgICAgICAgIC8qIG1hZ2ljIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fbGUzMiB2ZXJzaW9uOyAgICAgICAgIC8qIGZpcm13YXJlIHZlcnNpb24gaWQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fbGUzMiBsb2FkX29mZnNldDsgICAgIC8qIGZ3IGxvYWQgb2Zmc2V0IGluIGJvYXJkIG1lbW9yeSAgICAgICAgICAgICAqLworICAgIF9fbGUzMiBzdGFydF9vZmZzZXQ7ICAgIC8qIGZ3IGV4ZWN1dGlvbiBzdGFydCBhZGRyZXNzIGluIGJvYXJkIG1lbW9yeSAqLwogfSBmd19oZWFkZXJfdDsKIAogI2RlZmluZSBGV19IRUFERVJfTUFHSUMgIDB4NjU3MjZmNjYgICAgLyogJ2ZvcmUnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9oZS5jIGIvZHJpdmVycy9hdG0vaGUuYwppbmRleCAyZTMzOTViLi5mZmM0YTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9oZS5jCisrKyBiL2RyaXZlcnMvYXRtL2hlLmMKQEAgLTMwMDAsOCArMzAwMCw3IEBACiAKIC8qIGVlcHJvbSByb3V0aW5lcyAgLS0gc2VlIDQuNyAqLwogCi11OAotcmVhZF9wcm9tX2J5dGUoc3RydWN0IGhlX2RldiAqaGVfZGV2LCBpbnQgYWRkcikKK3N0YXRpYyB1OCByZWFkX3Byb21fYnl0ZShzdHJ1Y3QgaGVfZGV2ICpoZV9kZXYsIGludCBhZGRyKQogewogCXUzMiB2YWwgPSAwLCB0bXBfcmVhZCA9IDA7CiAJaW50IGksIGogPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDliMmNmMjUuLmMwYWM3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogICByZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBXQUlUX0ZMVVNIX1JYX0NPTVBMRVRFIChocnpfZGV2ICogZGV2KSB7CitzdGF0aWMgdm9pZCBXQUlUX0ZMVVNIX1JYX0NPTVBMRVRFIChocnpfZGV2ICogZGV2KSB7CiAgIHdoaWxlIChyZF9yZWd3IChkZXYsIFJYX0NIQU5ORUxfUE9SVF9PRkYpICYgRkxVU0hfQ0hBTk5FTCkKICAgICA7CiAgIHJldHVybjsKQEAgLTQzNSw3ICs0MzUsNyBAQAogICByZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBXQUlUX1VQREFURV9DT01QTEVURSAoaHJ6X2RldiAqIGRldikgeworc3RhdGljIHZvaWQgV0FJVF9VUERBVEVfQ09NUExFVEUgKGhyel9kZXYgKiBkZXYpIHsKICAgd2hpbGUgKHJkX3JlZ3cgKGRldiwgUlhfQ0hBTk5FTF9QT1JUX09GRikgJiBSWF9DSEFOTkVMX1VQREFURV9JTl9QUk9HUkVTUykKICAgICA7CiAgIHJldHVybjsKQEAgLTc5Niw3ICs3OTYsNyBAQAogCiAvKioqKioqKioqKiBmcmVlIGFuIHNrYiAoYXMgcGVyIEFUTSBkZXZpY2UgZHJpdmVyIGRvY3VtZW50YXRpb24pICoqKioqKioqKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBocnpfa2ZyZWVfc2tiIChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikgeworc3RhdGljIHZvaWQgaHJ6X2tmcmVlX3NrYiAoc3RydWN0IHNrX2J1ZmYgKiBza2IpIHsKICAgaWYgKEFUTV9TS0Ioc2tiKS0+dmNjLT5wb3ApIHsKICAgICBBVE1fU0tCKHNrYiktPnZjYy0+cG9wIChBVE1fU0tCKHNrYiktPnZjYywgc2tiKTsKICAgfSBlbHNlIHsKQEAgLTEwNzYsNyArMTA3Niw3IEBACiAKIC8qKioqKioqKioqIGhhbmRsZSBSWCBidXMgbWFzdGVyIGNvbXBsZXRlIGV2ZW50cyAqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnhfYnVzX21hc3Rlcl9jb21wbGV0ZV9oYW5kbGVyIChocnpfZGV2ICogZGV2KSB7CitzdGF0aWMgdm9pZCByeF9idXNfbWFzdGVyX2NvbXBsZXRlX2hhbmRsZXIgKGhyel9kZXYgKiBkZXYpIHsKICAgaWYgKHRlc3RfYml0IChyeF9idXN5LCAmZGV2LT5mbGFncykpIHsKICAgICByeF9zY2hlZHVsZSAoZGV2LCAxKTsKICAgfSBlbHNlIHsKQEAgLTEwODksNyArMTA4OSw3IEBACiAKIC8qKioqKioqKioqIChxdWV1ZSB0bykgYmVjb21lIHRoZSBuZXh0IFRYIHRocmVhZCAqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIGludCB0eF9ob2xkIChocnpfZGV2ICogZGV2KSB7CitzdGF0aWMgaW50IHR4X2hvbGQgKGhyel9kZXYgKiBkZXYpIHsKICAgUFJJTlREIChEQkdfVFgsICJzbGVlcGluZyBhdCB0eCBsb2NrICVwICVsdSIsIGRldiwgZGV2LT5mbGFncyk7CiAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPnR4X3F1ZXVlLCAoIXRlc3RfYW5kX3NldF9iaXQodHhfYnVzeSwgJmRldi0+ZmxhZ3MpKSk7CiAgIFBSSU5URCAoREJHX1RYLCAid29rZW4gYXQgdHggbG9jayAlcCAlbHUiLCBkZXYsIGRldi0+ZmxhZ3MpOwpAQCAtMTIzMiw3ICsxMjMyLDcgQEAKIAogLyoqKioqKioqKiogaGFuZGxlIFRYIGJ1cyBtYXN0ZXIgY29tcGxldGUgZXZlbnRzICoqKioqKioqKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0eF9idXNfbWFzdGVyX2NvbXBsZXRlX2hhbmRsZXIgKGhyel9kZXYgKiBkZXYpIHsKK3N0YXRpYyB2b2lkIHR4X2J1c19tYXN0ZXJfY29tcGxldGVfaGFuZGxlciAoaHJ6X2RldiAqIGRldikgewogICBpZiAodGVzdF9iaXQgKHR4X2J1c3ksICZkZXYtPmZsYWdzKSkgewogICAgIHR4X3NjaGVkdWxlIChkZXYsIDEpOwogICB9IGVsc2UgewpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAKIC8qKioqKioqKioqIG1vdmUgUlggUSBwb2ludGVyIHRvIG5leHQgaXRlbSBpbiBjaXJjdWxhciBidWZmZXIgKioqKioqKioqKi8KIAogLy8gY2FsbGVkIG9ubHkgZnJvbSBJUlEgc3ViLWhhbmRsZXIKLXN0YXRpYyBpbmxpbmUgdTMyIHJ4X3F1ZXVlX2VudHJ5X25leHQgKGhyel9kZXYgKiBkZXYpIHsKK3N0YXRpYyB1MzIgcnhfcXVldWVfZW50cnlfbmV4dCAoaHJ6X2RldiAqIGRldikgewogICB1MzIgcnhfcXVldWVfZW50cnk7CiAgIHNwaW5fbG9jayAoJmRldi0+bWVtX2xvY2spOwogICByeF9xdWV1ZV9lbnRyeSA9IHJkX21lbSAoZGV2LCAmZGV2LT5yeF9xX2VudHJ5LT5lbnRyeSk7CkBAIC0xMjcwLDcgKzEyNzAsNyBAQAogLyoqKioqKioqKiogaGFuZGxlIFJYIGRhdGEgcmVjZWl2ZWQgYnkgZGV2aWNlICoqKioqKioqKiovCiAKIC8vIGNhbGxlZCBmcm9tIElSUSBoYW5kbGVyCi1zdGF0aWMgaW5saW5lIHZvaWQgcnhfZGF0YV9hdl9oYW5kbGVyIChocnpfZGV2ICogZGV2KSB7CitzdGF0aWMgdm9pZCByeF9kYXRhX2F2X2hhbmRsZXIgKGhyel9kZXYgKiBkZXYpIHsKICAgdTMyIHJ4X3F1ZXVlX2VudHJ5OwogICB1MzIgcnhfcXVldWVfZW50cnlfZmxhZ3M7CiAgIHUxNiByeF9sZW47CkBAIC0xMzk0LDcgKzEzOTQsNyBAQAogICBpcnFfb2sgPSAwOwogICB3aGlsZSAoKGludF9zb3VyY2UgPSByZF9yZWdsIChkZXYsIElOVF9TT1VSQ0VfUkVHX09GRikKIAkgICYgSU5URVJFU1RJTkdfSU5URVJSVVBUUykpIHsKLSAgICAvLyBJbiB0aGUgaW50ZXJlc3RzIG9mIGZhaXJuZXNzLCB0aGUgKGlubGluZSkgaGFuZGxlcnMgYmVsb3cgYXJlCisgICAgLy8gSW4gdGhlIGludGVyZXN0cyBvZiBmYWlybmVzcywgdGhlIGhhbmRsZXJzIGJlbG93IGFyZQogICAgIC8vIGNhbGxlZCBpbiBzZXF1ZW5jZSBhbmQgd2l0aG91dCBpbW1lZGlhdGUgcmV0dXJuIHRvIHRoZSBoZWFkIG9mCiAgICAgLy8gdGhlIHdoaWxlIGxvb3AuIFRoaXMgaXMgb25seSBvZiBpc3N1ZSBmb3Igc2xvdyBob3N0cyAob3Igd2hlbgogICAgIC8vIGRlYnVnZ2luZyBtZXNzYWdlcyBhcmUgb24pLiBSZWFsbHkgc2xvdyBob3N0cyBtYXkgZmluZCBhIGZhc3QKQEAgLTE0NTgsNyArMTQ1OCw3IEBACiAvKioqKioqKioqKiBmaW5kIGFuIGlkbGUgY2hhbm5lbCBmb3IgVFggYW5kIHNldCBpdCB1cCAqKioqKioqKioqLwogCiAvLyBjYWxsZWQgd2l0aCB0eF9idXN5IHNldAotc3RhdGljIGlubGluZSBzaG9ydCBzZXR1cF9pZGxlX3R4X2NoYW5uZWwgKGhyel9kZXYgKiBkZXYsIGhyel92Y2MgKiB2Y2MpIHsKK3N0YXRpYyBzaG9ydCBzZXR1cF9pZGxlX3R4X2NoYW5uZWwgKGhyel9kZXYgKiBkZXYsIGhyel92Y2MgKiB2Y2MpIHsKICAgdW5zaWduZWQgc2hvcnQgaWRsZV9jaGFubmVsczsKICAgc2hvcnQgdHhfY2hhbm5lbCA9IC0xOwogICB1bnNpZ25lZCBpbnQgc3Bpbl9jb3VudDsKQEAgLTE3NzcsMTMgKzE3NzcsMTMgQEAKIAogLyoqKioqKioqKiogcmVhZCB0aGUgYnVybnQgaW4gYWRkcmVzcyAqKioqKioqKioqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgV1JJVEVfSVRfV0FJVCAoY29uc3QgaHJ6X2RldiAqZGV2LCB1MzIgY3RybCkKK3N0YXRpYyB2b2lkIFdSSVRFX0lUX1dBSVQgKGNvbnN0IGhyel9kZXYgKmRldiwgdTMyIGN0cmwpCiB7CiAJd3JfcmVnbCAoZGV2LCBDT05UUk9MXzBfUkVHLCBjdHJsKTsKIAl1ZGVsYXkgKDUpOwogfQogICAKLXN0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19JVCAoY29uc3QgaHJ6X2RldiAqZGV2LCB1MzIgY3RybCkKK3N0YXRpYyB2b2lkIENMT0NLX0lUIChjb25zdCBocnpfZGV2ICpkZXYsIHUzMiBjdHJsKQogewogCS8vIERJIG11c3QgYmUgdmFsaWQgYXJvdW5kIHJpc2luZyBTSyBlZGdlCiAJV1JJVEVfSVRfV0FJVChkZXYsIGN0cmwgJiB+U0VFUFJPTV9TSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuYwppbmRleCBlZWU1NGMwLi4yOGQ3N2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKQEAgLTU1NSw3ICs1NTUsNyBAQAogCXN0cnVjdCB2Y19tYXAgKnZjOwogCWludCBpOwogCi0JcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPnRjdF9zaXplOyBpKyspIHsKIAkJdmMgPSBjYXJkLT52Y3NbaV07CiAJCWlmICghdmMpCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogCXNrYiA9IHNiX3Bvb2xfc2tiKGNhcmQsIGxlMzJfdG9fY3B1KHJzcWUtPndvcmRfMikpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlwcmludGsoIiVzOiBOVUxMIHNrYiBpbiAlcywgcnNxZTogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJICAgICAgIGNhcmQtPm5hbWUsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGNhcmQtPm5hbWUsIF9fZnVuY19fLAogCQkgICAgICAgbGUzMl90b19jcHUocnNxZS0+d29yZF8xKSwgbGUzMl90b19jcHUocnNxZS0+d29yZF8yKSwKIAkJICAgICAgIGxlMzJfdG9fY3B1KHJzcWUtPndvcmRfMyksIGxlMzJfdG9fY3B1KHJzcWUtPndvcmRfNCkpOwogCQlyZXR1cm47CkBAIC0xODczLDcgKzE4NzMsNyBAQAogCQkJcmV0dXJuOwogCiAJCWlmIChzYl9wb29sX2FkZChjYXJkLCBza2IsIHF1ZXVlKSkgewotCQkJcHJpbnRrKCIlczogU0IgUE9PTCBmdWxsXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJpbnRrKCIlczogU0IgUE9PTCBmdWxsXG4iLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIG91dGZyZWU7CiAJCX0KIApAQCAtMTg4Myw3ICsxODgzLDcgQEAKIAkJSURUNzcyNTJfUFJWX1BBRERSKHNrYikgPSBwYWRkcjsKIAogCQlpZiAocHVzaF9yeF9za2IoY2FyZCwgc2tiLCBxdWV1ZSkpIHsKLQkJCXByaW50aygiJXM6IEZCIFFVRVVFIGZ1bGxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcmludGsoIiVzOiBGQiBRVUVVRSBmdWxsXG4iLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIG91dHVubWFwOwogCQl9CiAJfQpAQCAtMjAxNiw4ICsyMDE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50Ci1pZHQ3NzI1Ml9zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGlkdDc3MjUyX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gaWR0NzcyNTJfc2VuZF9za2IodmNjLCBza2IsIDApOwogfQpAQCAtMzA3Miw4ICszMDcxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZAotaWR0NzcyNTJfZGV2X2Nsb3NlKHN0cnVjdCBhdG1fZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBpZHQ3NzI1Ml9kZXZfY2xvc2Uoc3RydWN0IGF0bV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWR0NzcyNTJfZGV2ICpjYXJkID0gZGV2LT5kZXZfZGF0YTsKIAl1MzIgY29uZjsKQEAgLTM4MjEsMTIgKzM4MTksMTIgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JcHJpbnRrKCIlczogYXQgJXBcbiIsIF9fRlVOQ1RJT05fXywgaWR0NzcyNTJfaW5pdCk7CisJcHJpbnRrKCIlczogYXQgJXBcbiIsIF9fZnVuY19fLCBpZHQ3NzI1Ml9pbml0KTsKIAogCWlmIChzaXplb2Yoc2tiLT5jYikgPCBzaXplb2Yoc3RydWN0IGF0bV9za2JfZGF0YSkgKwogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpZHQ3NzI1Ml9za2JfcHJ2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBza2ItPmNiIGlzIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgKHVuc2lnbmVkIGxvbmcpIHNpemVvZihza2ItPmNiKSwKKwkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZykgc2l6ZW9mKHNrYi0+Y2IpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSArCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWR0NzcyNTJfc2tiX3BydikpOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jIGIvZHJpdmVycy9hdG0vaXBoYXNlLmMKaW5kZXggZWY1MjQ1MjYuLjVjMjhjYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC02MCw3ICs2MCw4IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4gIAogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4gIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4gIAotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4gIAorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSAiaXBoYXNlLmgiCQkgIAogI2luY2x1ZGUgInN1bmkuaCIJCSAgCiAjZGVmaW5lIHN3YXAoeCkgKCgoeCAmIDB4ZmYpIDw8IDgpIHwgKCh4ICYgMHhmZjAwKSA+PiA4KSkgIApAQCAtMTg5LDcgKzE5MCw3IEBACiAgIGludCBsdGltZW91dDsKIAogICBpYV9oYWNrX3RjcSAoZGV2KTsKLSAgaWYoKChqaWZmaWVzIC0gdGltZXIpPjUwKXx8KChkZXYtPmZmTC50Y3FfcmQ9PWRldi0+aG9zdF90Y3Ffd3IpKSl7ICAgICAgCisgIGlmKCh0aW1lX2FmdGVyKGppZmZpZXMsdGltZXIrNTApKSB8fCAoKGRldi0+ZmZMLnRjcV9yZD09ZGV2LT5ob3N0X3RjcV93cikpKSB7CiAgICAgIHRpbWVyID0gamlmZmllczsgCiAgICAgIGk9MDsKICAgICAgd2hpbGUgKGkgPCBkZXYtPm51bV90eF9kZXNjKSB7CkBAIC05NTgsNiArOTU5LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElBX0xJQiBFTkQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgCisjaWZkZWYgQ09ORklHX0FUTV9JQV9ERUJVRwogc3RhdGljIGludCB0Y250ZXIgPSAwOwogc3RhdGljIHZvaWQgeGR1bXAoIHVfY2hhciogIGNwLCBpbnQgIGxlbmd0aCwgY2hhciogIHByZWZpeCApCiB7CkBAIC05OTIsNiArOTk0LDcgQEAKICAgICB9CiAKIH0gIC8qIGNsb3NlIHhkdW1wKC4uLiAqLworI2VuZGlmIC8qIENPTkZJR19BVE1fSUFfREVCVUcgKi8KIAogICAKIHN0YXRpYyBzdHJ1Y3QgYXRtX2RldiAqaWFfYm9hcmRzID0gTlVMTDsgIApAQCAtMTIyMyw3ICsxMjI2LDcgQEAKICAgICAgICAgaWFkZXYtPnJ4X3RtcF9qaWYgPSBqaWZmaWVzOyAKICAgICAgICAgaWFkZXYtPnJ4aW5nID0gMDsKICAgICAgfSAKLSAgICAgZWxzZSBpZiAoKChqaWZmaWVzIC0gaWFkZXYtPnJ4X3RtcF9qaWYpID4gNTApICYmIAorICAgICBlbHNlIGlmICgodGltZV9hZnRlcihqaWZmaWVzLCBpYWRldi0+cnhfdG1wX2ppZiArIDUwKSkgJiYKICAgICAgICAgICAgICAgICgoaWFkZXYtPnJ4X3BrdF9jbnQgLSBpYWRldi0+cnhfdG1wX2NudCkgPT0gMCkpIHsKICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBpYWRldi0+bnVtX3J4X2Rlc2M7IGkrKykKICAgICAgICAgICAgICAgIGZyZWVfZGVzYyhkZXYsIGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbmljc3Rhci5jIGIvZHJpdmVycy9hdG0vbmljc3Rhci5jCmluZGV4IDBjMjA1YjAuLjM4Yzc2OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL25pY3N0YXIuYworKysgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKQEAgLTEyNSw4NSArMTI1LDYgQEAKICNkZWZpbmUgQVRNX1NLQihzKSAoJihzKS0+YXRtKQogI2VuZGlmCiAKLSAgIC8qIFNwaW5sb2NrIGRlYnVnZ2luZyBzdHVmZiAqLwotI2lmZGVmIE5TX0RFQlVHX1NQSU5MT0NLUyAvKiBTZWUgbmljc3Rhci5oICovCi0jZGVmaW5lIG5zX2dyYWJfaW50X2xvY2soY2FyZCxmbGFncykgXAotIGRvIHsgXAotICAgIHVuc2lnbmVkIGxvbmcgbnNkc2YsIG5zZHNmMjsgXAotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAotICAgIHNhdmVfZmxhZ3MobnNkc2YpOyBjbGkoKTtcCi0gICAgaWYgKG5zZHNmICYgKDE8PDkpKSBwcmludGsgKCJuaWNzdGFyLmM6IGludHMgJXNhYmxlZCAtPiBlbmFibGVkLlxuIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MpJigxPDw5KT8iZW4iOiJkaXMiKTsgXAotICAgIGlmIChzcGluX2lzX2xvY2tlZCgmKGNhcmQpLT5pbnRfbG9jaykgJiYgXAotICAgICAgICAoY2FyZCktPmNwdV9pbnQgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7IFwKLSAgICAgICBwcmludGsoIm5pY3N0YXIuYzogbGluZSAlZCAoY3B1ICVkKSBpbnRfbG9jayBhbHJlYWR5IGxvY2tlZCBhdCBsaW5lICVkIChjcHUgJWQpXG4iLCBcCi0gICAgICAgICAgICAgIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIChjYXJkKS0+aGFzX2ludF9sb2NrLCBcCi0gICAgICAgICAgICAgIChjYXJkKS0+Y3B1X2ludCk7IFwKLSAgICAgICBwcmludGsoIm5pY3N0YXIuYzogaW50cyB3ZXJlICVzYWJsZWQuXG4iLCAoKGZsYWdzKSYoMTw8OSk/ImVuIjoiZGlzIikpOyBcCi0gICAgfSBcCi0gICAgaWYgKHNwaW5faXNfbG9ja2VkKCYoY2FyZCktPnJlc19sb2NrKSAmJiBcCi0gICAgICAgIChjYXJkKS0+Y3B1X3JlcyA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsgXAotICAgICAgIHByaW50aygibmljc3Rhci5jOiBsaW5lICVkIChjcHUgJWQpIHJlc19sb2NrIGxvY2tlZCBhdCBsaW5lICVkIChjcHUgJWQpKHRyeWluZyBpbnQpXG4iLCBcCi0gICAgICAgICAgICAgIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIChjYXJkKS0+aGFzX3Jlc19sb2NrLCBcCi0gICAgICAgICAgICAgIChjYXJkKS0+Y3B1X3Jlcyk7IFwKLSAgICAgICBwcmludGsoIm5pY3N0YXIuYzogaW50cyB3ZXJlICVzYWJsZWQuXG4iLCAoKGZsYWdzKSYoMTw8OSk/ImVuIjoiZGlzIikpOyBcCi0gICAgfSBcCi0gICAgc3Bpbl9sb2NrX2lycSgmKGNhcmQpLT5pbnRfbG9jayk7IFwKLSAgICAoY2FyZCktPmhhc19pbnRfbG9jayA9IF9fTElORV9fOyBcCi0gICAgKGNhcmQpLT5jcHVfaW50ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOyBcCi0gICAgcmVzdG9yZV9mbGFncyhuc2RzZik7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG5zX2dyYWJfcmVzX2xvY2soY2FyZCxmbGFncykgXAotIGRvIHsgXAotICAgIHVuc2lnbmVkIGxvbmcgbnNkc2YsIG5zZHNmMjsgXAotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAotICAgIHNhdmVfZmxhZ3MobnNkc2YpOyBjbGkoKTtcCi0gICAgaWYgKG5zZHNmICYgKDE8PDkpKSBwcmludGsgKCJuaWNzdGFyLmM6IGludHMgJXNhYmxlZCAtPiBlbmFibGVkLlxuIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MpJigxPDw5KT8iZW4iOiJkaXMiKTsgXAotICAgIGlmIChzcGluX2lzX2xvY2tlZCgmKGNhcmQpLT5yZXNfbG9jaykgJiYgXAotICAgICAgICAoY2FyZCktPmNwdV9yZXMgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7IFwKLSAgICAgICBwcmludGsoIm5pY3N0YXIuYzogbGluZSAlZCAoY3B1ICVkKSByZXNfbG9jayBhbHJlYWR5IGxvY2tlZCBhdCBsaW5lICVkIChjcHUgJWQpXG4iLCBcCi0gICAgICAgICAgICAgIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIChjYXJkKS0+aGFzX3Jlc19sb2NrLCBcCi0gICAgICAgICAgICAgIChjYXJkKS0+Y3B1X3Jlcyk7IFwKLSAgICAgICBwcmludGsoIm5pY3N0YXIuYzogaW50cyB3ZXJlICVzYWJsZWQuXG4iLCAoKGZsYWdzKSYoMTw8OSk/ImVuIjoiZGlzIikpOyBcCi0gICAgfSBcCi0gICAgc3Bpbl9sb2NrX2lycSgmKGNhcmQpLT5yZXNfbG9jayk7IFwKLSAgICAoY2FyZCktPmhhc19yZXNfbG9jayA9IF9fTElORV9fOyBcCi0gICAgKGNhcmQpLT5jcHVfcmVzID0gc21wX3Byb2Nlc3Nvcl9pZCgpOyBcCi0gICAgcmVzdG9yZV9mbGFncyhuc2RzZik7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG5zX2dyYWJfc2NxX2xvY2soY2FyZCxzY3EsZmxhZ3MpIFwKLSBkbyB7IFwKLSAgICB1bnNpZ25lZCBsb25nIG5zZHNmLCBuc2RzZjI7IFwKLSAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKLSAgICBzYXZlX2ZsYWdzKG5zZHNmKTsgY2xpKCk7XAotICAgIGlmIChuc2RzZiAmICgxPDw5KSkgcHJpbnRrICgibmljc3Rhci5jOiBpbnRzICVzYWJsZWQgLT4gZW5hYmxlZC5cbiIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzKSYoMTw8OSk/ImVuIjoiZGlzIik7IFwKLSAgICBpZiAoc3Bpbl9pc19sb2NrZWQoJihzY3EpLT5sb2NrKSAmJiBcCi0gICAgICAgIChzY3EpLT5jcHVfbG9jayA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsgXAotICAgICAgIHByaW50aygibmljc3Rhci5jOiBsaW5lICVkIChjcHUgJWQpIHRoaXMgc2NxX2xvY2sgYWxyZWFkeSBsb2NrZWQgYXQgbGluZSAlZCAoY3B1ICVkKVxuIiwgXAotICAgICAgICAgICAgICBfX0xJTkVfXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCAoc2NxKS0+aGFzX2xvY2ssIFwKLSAgICAgICAgICAgICAgKHNjcSktPmNwdV9sb2NrKTsgXAotICAgICAgIHByaW50aygibmljc3Rhci5jOiBpbnRzIHdlcmUgJXNhYmxlZC5cbiIsICgoZmxhZ3MpJigxPDw5KT8iZW4iOiJkaXMiKSk7IFwKLSAgICB9IFwKLSAgICBpZiAoc3Bpbl9pc19sb2NrZWQoJihjYXJkKS0+cmVzX2xvY2spICYmIFwKLSAgICAgICAgKGNhcmQpLT5jcHVfcmVzID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgeyBcCi0gICAgICAgcHJpbnRrKCJuaWNzdGFyLmM6IGxpbmUgJWQgKGNwdSAlZCkgcmVzX2xvY2sgbG9ja2VkIGF0IGxpbmUgJWQgKGNwdSAlZCkodHJ5aW5nIHNjcSlcbiIsIFwKLSAgICAgICAgICAgICAgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgKGNhcmQpLT5oYXNfcmVzX2xvY2ssIFwKLSAgICAgICAgICAgICAgKGNhcmQpLT5jcHVfcmVzKTsgXAotICAgICAgIHByaW50aygibmljc3Rhci5jOiBpbnRzIHdlcmUgJXNhYmxlZC5cbiIsICgoZmxhZ3MpJigxPDw5KT8iZW4iOiJkaXMiKSk7IFwKLSAgICB9IFwKLSAgICBzcGluX2xvY2tfaXJxKCYoc2NxKS0+bG9jayk7IFwKLSAgICAoc2NxKS0+aGFzX2xvY2sgPSBfX0xJTkVfXzsgXAotICAgIChzY3EpLT5jcHVfbG9jayA9IHNtcF9wcm9jZXNzb3JfaWQoKTsgXAotICAgIHJlc3RvcmVfZmxhZ3MobnNkc2YpOyB9IHdoaWxlICgwKQotI2Vsc2UgLyogIU5TX0RFQlVHX1NQSU5MT0NLUyAqLwotI2RlZmluZSBuc19ncmFiX2ludF9sb2NrKGNhcmQsZmxhZ3MpIFwKLSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJihjYXJkKS0+aW50X2xvY2ssKGZsYWdzKSkKLSNkZWZpbmUgbnNfZ3JhYl9yZXNfbG9jayhjYXJkLGZsYWdzKSBcCi0gICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCYoY2FyZCktPnJlc19sb2NrLChmbGFncykpCi0jZGVmaW5lIG5zX2dyYWJfc2NxX2xvY2soY2FyZCxzY3EsZmxhZ3MpIFwKLSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJihzY3EpLT5sb2NrLGZsYWdzKQotI2VuZGlmIC8qIE5TX0RFQlVHX1NQSU5MT0NLUyAqLwotCiAKIC8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTQyMiw3ICszNDMsNyBAQAogICAgc3JhbV9hZGRyZXNzIDw8PSAyOwogICAgc3JhbV9hZGRyZXNzICY9IDB4MDAwN0ZGRkM7CS8qIGFkZHJlc3MgbXVzdCBiZSBkd29yZCBhbGlnbmVkICovCiAgICBzcmFtX2FkZHJlc3MgfD0gMHg1MDAwMDAwMDsJLyogU1JBTSByZWFkIGNvbW1hbmQgKi8KLSAgIG5zX2dyYWJfcmVzX2xvY2soY2FyZCwgZmxhZ3MpOworICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CiAgICB3aGlsZSAoQ01EX0JVU1koY2FyZCkpOwogICAgd3JpdGVsKHNyYW1fYWRkcmVzcywgY2FyZC0+bWVtYmFzZSArIENNRCk7CiAgICB3aGlsZSAoQ01EX0JVU1koY2FyZCkpOwpAQCAtNDQwLDcgKzM2MSw3IEBACiAgICBjb3VudC0tOwkvKiBjb3VudCByYW5nZSBub3cgaXMgMC4uMyBpbnN0ZWFkIG9mIDEuLjQgKi8KICAgIGMgPSBjb3VudDsKICAgIGMgPDw9IDI7CS8qIHRvIHVzZSBpbmNyZW1lbnRzIG9mIDQgKi8KLSAgIG5zX2dyYWJfcmVzX2xvY2soY2FyZCwgZmxhZ3MpOworICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CiAgICB3aGlsZSAoQ01EX0JVU1koY2FyZCkpOwogICAgZm9yIChpID0gMDsgaSA8PSBjOyBpICs9IDQpCiAgICAgICB3cml0ZWwoKih2YWx1ZSsrKSwgY2FyZC0+bWVtYmFzZSArIGkpOwpAQCAtMTE2Niw3ICsxMDg3LDcgQEAKICAgICAgICAgICAgIGNhcmQtPmxiZnFjICs9IDI7CiAgICAgICB9CiAKLSAgICAgIG5zX2dyYWJfcmVzX2xvY2soY2FyZCwgZmxhZ3MpOworICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CiAKICAgICAgIHdoaWxlIChDTURfQlVTWShjYXJkKSk7CiAgICAgICB3cml0ZWwoYWRkcjIsIGNhcmQtPm1lbWJhc2UgKyBEUjMpOwpAQCAtMTIwNiw3ICsxMTI3LDcgQEAKIAogICAgUFJJTlRLKCJuaWNzdGFyJWQ6IE5JQ1N0QVIgZ2VuZXJhdGVkIGFuIGludGVycnVwdFxuIiwgY2FyZC0+aW5kZXgpOwogCi0gICBuc19ncmFiX2ludF9sb2NrKGNhcmQsIGZsYWdzKTsKKyAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwogICAgCiAgICBzdGF0X3IgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CiAKQEAgLTE1ODUsNyArMTUwNiw3IEBACiAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgCiAgICAgICBhZGRyID0gTlNfUkNUICsgKHZjYy0+dnBpIDw8IGNhcmQtPnZjaWJpdHMgfCB2Y2MtPnZjaSkgKiBOU19SQ1RfRU5UUllfU0laRTsKLSAgICAgIG5zX2dyYWJfcmVzX2xvY2soY2FyZCwgZmxhZ3MpOworICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnJlc19sb2NrLCBmbGFncyk7CiAgICAgICB3aGlsZShDTURfQlVTWShjYXJkKSk7CiAgICAgICB3cml0ZWwoTlNfQ01EX0NMT1NFX0NPTk5FQ1RJT04gfCBhZGRyIDw8IDIsIGNhcmQtPm1lbWJhc2UgKyBDTUQpOwogICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKQEAgLTE2MDcsNyArMTUyOCw3IEBACiAJICAgICAgICAgICAgICAgICAgICAgICBOU19TS0IoaW92YiktPmlvdmNudCk7CiAgICAgICAgICBOU19TS0IoaW92YiktPmlvdmNudCA9IDA7CiAgICAgICAgICBOU19TS0IoaW92YiktPnZjYyA9IE5VTEw7Ci0gICAgICAgICBuc19ncmFiX2ludF9sb2NrKGNhcmQsIGZsYWdzKTsKKyAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwogICAgICAgICAgcmVjeWNsZV9pb3ZfYnVmKGNhcmQsIGlvdmIpOwogICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKICAgICAgICAgIHZjLT5yeF9pb3YgPSBOVUxMOwpAQCAtMTYyOSw3ICsxNTUwLDcgQEAKIAogICAgICAgZm9yICg7OykKICAgICAgIHsKLSAgICAgICAgIG5zX2dyYWJfc2NxX2xvY2soY2FyZCwgc2NxLCBmbGFncyk7CisgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2NxLT5sb2NrLCBmbGFncyk7CiAgICAgICAgICBzY3FlcCA9IHNjcS0+bmV4dDsKICAgICAgICAgIGlmIChzY3FlcCA9PSBzY3EtPmJhc2UpCiAgICAgICAgICAgICBzY3FlcCA9IHNjcS0+bGFzdDsKQEAgLTE2OTEsNyArMTYxMiw3IEBACiAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgIHNjcV9pbmZvICpzY3EgPSBjYXJkLT5zY3EwOwogCi0gICAgIG5zX2dyYWJfc2NxX2xvY2soY2FyZCwgc2NxLCBmbGFncyk7CisgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKIAogICAgICBmb3IoaSA9IDA7IGkgPCBzY3EtPm51bV9lbnRyaWVzOyBpKyspIHsKICAgICAgICBpZihzY3EtPnNrYltpXSAmJiBBVE1fU0tCKHNjcS0+c2tiW2ldKS0+dmNjID09IHZjYykgewpAQCAtMTg5Miw3ICsxODEzLDcgQEAKICAgIHUzMiBkYXRhOwogICAgaW50IGluZGV4OwogICAgCi0gICBuc19ncmFiX3NjcV9sb2NrKGNhcmQsIHNjcSwgZmxhZ3MpOworICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjcS0+bG9jaywgZmxhZ3MpOwogICAgd2hpbGUgKHNjcS0+dGFpbCA9PSBzY3EtPm5leHQpCiAgICB7CiAgICAgICBpZiAoaW5faW50ZXJydXB0KCkpIHsKQEAgLTE5MDQsNyArMTgyNSw3IEBACiAgICAgICBzY3EtPmZ1bGwgPSAxOwogICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7CiAgICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnNjcS0+c2NxZnVsbF93YWl0cSwgU0NRRlVMTF9USU1FT1VUKTsKLSAgICAgIG5zX2dyYWJfc2NxX2xvY2soY2FyZCwgc2NxLCBmbGFncyk7CisgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2NxLT5sb2NrLCBmbGFncyk7CiAKICAgICAgIGlmIChzY3EtPmZ1bGwpIHsKICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjcS0+bG9jaywgZmxhZ3MpOwpAQCAtMTk1Myw3ICsxODc0LDcgQEAKICAgICAgICAgIGlmIChoYXNfcnVuKyspIGJyZWFrOwogICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NxLT5sb2NrLCBmbGFncyk7CiAgICAgICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnNjcS0+c2NxZnVsbF93YWl0cSwgU0NRRlVMTF9USU1FT1VUKTsKLSAgICAgICAgIG5zX2dyYWJfc2NxX2xvY2soY2FyZCwgc2NxLCBmbGFncyk7CisgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2NxLT5sb2NrLCBmbGFncyk7CiAgICAgICB9CiAKICAgICAgIGlmICghc2NxLT5mdWxsKQpAQCAtMjA5MCw3ICsyMDExLDcgQEAKICAgICAgIHJldHVybjsKICAgIH0KIAotICAgbnNfZ3JhYl9zY3FfbG9jayhjYXJkLCBzY3EsIGZsYWdzKTsKKyAgIHNwaW5fbG9ja19pcnFzYXZlKCZzY3EtPmxvY2ssIGZsYWdzKTsKICAgIGkgPSAoaW50KSAoc2NxLT50YWlsIC0gc2NxLT5iYXNlKTsKICAgIGlmICgrK2kgPT0gc2NxLT5udW1fZW50cmllcykKICAgICAgIGkgPSAwOwpAQCAtMjg5OCw3ICsyODE5LDcgQEAKIAkgICAgICAgewogICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKmhiOwogCi0gICAgICAgICAgICAgICAgICBuc19ncmFiX2ludF9sb2NrKGNhcmQsIGZsYWdzKTsKKyAgICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwogCQkgIGhiID0gc2tiX2RlcXVldWUoJmNhcmQtPmhicG9vbC5xdWV1ZSk7CiAJCSAgY2FyZC0+aGJwb29sLmNvdW50LS07CiAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwpAQCAtMjkxNyw3ICsyODM4LDcgQEAKICAgICAgICAgICAgICAgICAgIGlmIChoYiA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgICAgICAgICAgICBOU19TS0JfQ0IoaGIpLT5idWZfdHlwZSA9IEJVRl9OT05FOwotICAgICAgICAgICAgICAgICAgbnNfZ3JhYl9pbnRfbG9jayhjYXJkLCBmbGFncyk7CisgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZjYXJkLT5oYnBvb2wucXVldWUsIGhiKTsKICAgICAgICAgICAgICAgICAgIGNhcmQtPmhicG9vbC5jb3VudCsrOwogICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aW50X2xvY2ssIGZsYWdzKTsKQEAgLTI5MjksNyArMjg1MCw3IEBACiAJICAgICAgIHsKIAkgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKmlvdmI7CiAKLSAgICAgICAgICAgICAgICAgIG5zX2dyYWJfaW50X2xvY2soY2FyZCwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CiAJCSAgaW92YiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5pb3Zwb29sLnF1ZXVlKTsKIAkJICBjYXJkLT5pb3Zwb29sLmNvdW50LS07CiAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwpAQCAtMjk0OCw3ICsyODY5LDcgQEAKICAgICAgICAgICAgICAgICAgIGlmIChpb3ZiID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKICAgICAgICAgICAgICAgICAgIE5TX1NLQl9DQihpb3ZiKS0+YnVmX3R5cGUgPSBCVUZfTk9ORTsKLSAgICAgICAgICAgICAgICAgIG5zX2dyYWJfaW50X2xvY2soY2FyZCwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmY2FyZC0+aW92cG9vbC5xdWV1ZSwgaW92Yik7CiAgICAgICAgICAgICAgICAgICBjYXJkLT5pb3Zwb29sLmNvdW50Kys7CiAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pbnRfbG9jaywgZmxhZ3MpOwpAQCAtMjk5NSw3ICsyOTE2LDcgQEAKICAgICAgIC8qIFByb2JhYmx5IGl0IGlzbid0IHdvcnRoIHNwaW5uaW5nICovCiAgICAgICAgICBjb250aW51ZTsKICAgICAgIH0KLSAgICAgIG5zX2dyYWJfaW50X2xvY2soY2FyZCwgZmxhZ3MpOworICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmludF9sb2NrLCBmbGFncyk7CiAKICAgICAgIHN0YXRfdyA9IDA7CiAgICAgICBzdGF0X3IgPSByZWFkbChjYXJkLT5tZW1iYXNlICsgU1RBVCk7CkBAIC0zMDYyLDcgKzI5ODMsNyBAQAogICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgY2FyZCA9IGRldi0+ZGV2X2RhdGE7Ci0gICBuc19ncmFiX3Jlc19sb2NrKGNhcmQsIGZsYWdzKTsKKyAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5yZXNfbG9jaywgZmxhZ3MpOwogICAgd2hpbGUoQ01EX0JVU1koY2FyZCkpOwogICAgd3JpdGVsKCh1bnNpZ25lZCBsb25nKSB2YWx1ZSwgY2FyZC0+bWVtYmFzZSArIERSMCk7CiAgICB3cml0ZWwoTlNfQ01EX1dSSVRFX1VUSUxJVFkgfCAweDAwMDAwMjAwIHwgKGFkZHIgJiAweDAwMDAwMEZGKSwKQEAgLTMwNzksNyArMzAwMCw3IEBACiAgICB1bnNpZ25lZCBsb25nIGRhdGE7CiAKICAgIGNhcmQgPSBkZXYtPmRldl9kYXRhOwotICAgbnNfZ3JhYl9yZXNfbG9jayhjYXJkLCBmbGFncyk7CisgICBzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+cmVzX2xvY2ssIGZsYWdzKTsKICAgIHdoaWxlKENNRF9CVVNZKGNhcmQpKTsKICAgIHdyaXRlbChOU19DTURfUkVBRF9VVElMSVRZIHwgMHgwMDAwMDIwMCB8IChhZGRyICYgMHgwMDAwMDBGRiksCiAgICAgICAgICAgY2FyZC0+bWVtYmFzZSArIENNRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9uaWNzdGFyLmggYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmgKaW5kZXggNTk5N2JjYi4uNjAxMGUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbmljc3Rhci5oCisrKyBiL2RyaXZlcnMvYXRtL25pY3N0YXIuaApAQCAtMjgsOCArMjgsNiBAQAogCiAvKiBPcHRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jdW5kZWYgTlNfREVCVUdfU1BJTkxPQ0tTCi0KICNkZWZpbmUgTlNfTUFYX0NBUkRTIDQJCS8qIE1heGltdW0gbnVtYmVyIG9mIE5JQ1N0QVIgYmFzZWQgY2FyZHMKIAkJCQkgICBjb250cm9sbGVkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLiBNdXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIDw9IDUgKi8KQEAgLTcyMSwxMCArNzE5LDYgQEAKICAgIHdhaXRfcXVldWVfaGVhZF90IHNjcWZ1bGxfd2FpdHE7CiAgICB2b2xhdGlsZSBjaGFyIGZ1bGw7CQkJLyogU0NRIGZ1bGwgaW5kaWNhdG9yICovCiAgICBzcGlubG9ja190IGxvY2s7CQkJLyogU0NRIHNwaW5sb2NrICovCi0jaWZkZWYgTlNfREVCVUdfU1BJTkxPQ0tTCi0gICB2b2xhdGlsZSBsb25nIGhhc19sb2NrOwotICAgdm9sYXRpbGUgaW50IGNwdV9sb2NrOwotI2VuZGlmIC8qIE5TX0RFQlVHX1NQSU5MT0NLUyAqLwogfSBzY3FfaW5mbzsKIAogCkBAIC04MTAsMTIgKzgwNCw2IEBACiAgICB1bnNpZ25lZCBpbnRjbnQ7CQkJLyogSW50ZXJydXB0IGNvdW50ZXIgKi8KICAgIHNwaW5sb2NrX3QgaW50X2xvY2s7CQkvKiBJbnRlcnJ1cHQgbG9jayAqLwogICAgc3BpbmxvY2tfdCByZXNfbG9jazsJCS8qIENhcmQgcmVzb3VyY2UgbG9jayAqLwotI2lmZGVmIE5TX0RFQlVHX1NQSU5MT0NLUwotICAgdm9sYXRpbGUgbG9uZyBoYXNfaW50X2xvY2s7Ci0gICB2b2xhdGlsZSBpbnQgY3B1X2ludDsKLSAgIHZvbGF0aWxlIGxvbmcgaGFzX3Jlc19sb2NrOwotICAgdm9sYXRpbGUgaW50IGNwdV9yZXM7Ci0jZW5kaWYgLyogTlNfREVCVUdfU1BJTkxPQ0tTICovCiB9IG5zX2RldjsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYXR0cmlidXRlX2NvbnRhaW5lci5jIGIvZHJpdmVycy9iYXNlL2F0dHJpYnV0ZV9jb250YWluZXIuYwppbmRleCAzYjQzZThhLi5mNTc2NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYXR0cmlidXRlX2NvbnRhaW5lci5jCisrKyBiL2RyaXZlcnMvYmFzZS9hdHRyaWJ1dGVfY29udGFpbmVyLmMKQEAgLTI3LDIxICsyNywyMSBAQAogc3RydWN0IGludGVybmFsX2NvbnRhaW5lciB7CiAJc3RydWN0IGtsaXN0X25vZGUgbm9kZTsKIAlzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqY29udDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzZGV2OworCXN0cnVjdCBkZXZpY2UgY2xhc3NkZXY7CiB9OwogCiBzdGF0aWMgdm9pZCBpbnRlcm5hbF9jb250YWluZXJfa2xpc3RfZ2V0KHN0cnVjdCBrbGlzdF9ub2RlICpuKQogewogCXN0cnVjdCBpbnRlcm5hbF9jb250YWluZXIgKmljID0KIAkJY29udGFpbmVyX29mKG4sIHN0cnVjdCBpbnRlcm5hbF9jb250YWluZXIsIG5vZGUpOwotCWNsYXNzX2RldmljZV9nZXQoJmljLT5jbGFzc2Rldik7CisJZ2V0X2RldmljZSgmaWMtPmNsYXNzZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZXJuYWxfY29udGFpbmVyX2tsaXN0X3B1dChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKIAlzdHJ1Y3QgaW50ZXJuYWxfY29udGFpbmVyICppYyA9CiAJCWNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgaW50ZXJuYWxfY29udGFpbmVyLCBub2RlKTsKLQljbGFzc19kZXZpY2VfcHV0KCZpYy0+Y2xhc3NkZXYpOworCXB1dF9kZXZpY2UoJmljLT5jbGFzc2Rldik7CiB9CiAKIApAQCAtNTMsNyArNTMsNyBAQAogICogUmV0dXJucyB0aGUgY29udGFpbmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYXNzZGV2LgogICovCiBzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqCi1hdHRyaWJ1dGVfY29udGFpbmVyX2NsYXNzZGV2X3RvX2NvbnRhaW5lcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2RldikKK2F0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fY29udGFpbmVyKHN0cnVjdCBkZXZpY2UgKmNsYXNzZGV2KQogewogCXN0cnVjdCBpbnRlcm5hbF9jb250YWluZXIgKmljID0KIAkJY29udGFpbmVyX29mKGNsYXNzZGV2LCBzdHJ1Y3QgaW50ZXJuYWxfY29udGFpbmVyLCBjbGFzc2Rldik7CkBAIC0xMTAsMTEgKzExMCwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXR0cmlidXRlX2NvbnRhaW5lcl91bnJlZ2lzdGVyKTsKIAogLyogcHJpdmF0ZSBmdW5jdGlvbiB1c2VkIGFzIGNsYXNzIHJlbGVhc2UgKi8KLXN0YXRpYyB2b2lkIGF0dHJpYnV0ZV9jb250YWluZXJfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2RldikKK3N0YXRpYyB2b2lkIGF0dHJpYnV0ZV9jb250YWluZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpjbGFzc2RldikKIHsKIAlzdHJ1Y3QgaW50ZXJuYWxfY29udGFpbmVyICppYyAKIAkJPSBjb250YWluZXJfb2YoY2xhc3NkZXYsIHN0cnVjdCBpbnRlcm5hbF9jb250YWluZXIsIGNsYXNzZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjbGFzc2Rldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNsYXNzZGV2LT5wYXJlbnQ7CiAKIAlrZnJlZShpYyk7CiAJcHV0X2RldmljZShkZXYpOwpAQCAtMTI5LDEyICsxMjksMTIgQEAKICAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHN0b3JhZ2UgZm9yIHRoZSBjbGFzcyBkZXZpY2UocykgdG8gYmUKICAqIGF0dGFjaGVkIHRvIGRldiAob25lIGZvciBlYWNoIG1hdGNoaW5nIGF0dHJpYnV0ZV9jb250YWluZXIpLiAgSWYgbm8KICAqIGZuIGlzIHByb3ZpZGVkLCB0aGUgY29kZSB3aWxsIHNpbXBseSByZWdpc3RlciB0aGUgY2xhc3MgZGV2aWNlIHZpYQotICogY2xhc3NfZGV2aWNlX2FkZC4gIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IGlzIGV4cGVjdGVkIHRvIGFkZAorICogZGV2aWNlX2FkZC4gIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IGlzIGV4cGVjdGVkIHRvIGFkZAogICogdGhlIGNsYXNzIGRldmljZSBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS4gIE9uZSBvZiB0aGUgdGhpbmdzIHRoYXQKICAqIG1pZ2h0IGJlIG5lY2Vzc2FyeSBpcyB0byBhbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSB0aGUgY2xhc3NkZXYgYW5kCiAgKiB0aGVuIGFkZCBpdCBhIGxhdGVyIHRpbWUuICBUbyBkbyB0aGlzLCBjYWxsIHRoaXMgcm91dGluZSBmb3IKICAqIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpc2F0aW9uIGFuZCB0aGVuIHVzZQotICogYXR0cmlidXRlX2NvbnRhaW5lcl9kZXZpY2VfdHJpZ2dlcigpIHRvIGNhbGwgY2xhc3NfZGV2aWNlX2FkZCgpIG9uCisgKiBhdHRyaWJ1dGVfY29udGFpbmVyX2RldmljZV90cmlnZ2VyKCkgdG8gY2FsbCBkZXZpY2VfYWRkKCkgb24KICAqIGl0LiAgTm90ZTogYWZ0ZXIgdGhpcywgdGhlIGNsYXNzIGRldmljZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBkZXYKICAqIHdoaWNoIGlzIG5vdCByZWxpbnF1aXNoZWQgdW50aWwgdGhlIHJlbGVhc2Ugb2YgdGhlIGNsYXNzZGV2LgogICovCkBAIC0xNDIsNyArMTQyLDcgQEAKIGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgaW50ICgqZm4pKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICosCiAJCQkJCSBzdHJ1Y3QgZGV2aWNlICosCi0JCQkJCSBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopKQorCQkJCQkgc3RydWN0IGRldmljZSAqKSkKIHsKIAlzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqY29udDsKIApAQCAtMTYzLDExICsxNjMsMTEgQEAKIAkJfQogCiAJCWljLT5jb250ID0gY29udDsKLQkJY2xhc3NfZGV2aWNlX2luaXRpYWxpemUoJmljLT5jbGFzc2Rldik7Ci0JCWljLT5jbGFzc2Rldi5kZXYgPSBnZXRfZGV2aWNlKGRldik7CisJCWRldmljZV9pbml0aWFsaXplKCZpYy0+Y2xhc3NkZXYpOworCQlpYy0+Y2xhc3NkZXYucGFyZW50ID0gZ2V0X2RldmljZShkZXYpOwogCQlpYy0+Y2xhc3NkZXYuY2xhc3MgPSBjb250LT5jbGFzczsKLQkJY29udC0+Y2xhc3MtPnJlbGVhc2UgPSBhdHRyaWJ1dGVfY29udGFpbmVyX3JlbGVhc2U7Ci0JCXN0cmNweShpYy0+Y2xhc3NkZXYuY2xhc3NfaWQsIGRldi0+YnVzX2lkKTsKKwkJY29udC0+Y2xhc3MtPmRldl9yZWxlYXNlID0gYXR0cmlidXRlX2NvbnRhaW5lcl9yZWxlYXNlOworCQlzdHJjcHkoaWMtPmNsYXNzZGV2LmJ1c19pZCwgZGV2LT5idXNfaWQpOwogCQlpZiAoZm4pCiAJCQlmbihjb250LCBkZXYsICZpYy0+Y2xhc3NkZXYpOwogCQllbHNlCkBAIC0xOTUsMjAgKzE5NSwxOSBAQAogICogQGZuOgkgIEEgZnVuY3Rpb24gdG8gY2FsbCB0byByZW1vdmUgdGhlIGRldmljZQogICoKICAqIFRoaXMgcm91dGluZSB0cmlnZ2VycyBkZXZpY2UgcmVtb3ZhbC4gIElmIGZuIGlzIE5VTEwsIHRoZW4gaXQgaXMKLSAqIHNpbXBseSBkb25lIHZpYSBjbGFzc19kZXZpY2VfdW5yZWdpc3RlciAobm90ZSB0aGF0IGlmIHNvbWV0aGluZworICogc2ltcGx5IGRvbmUgdmlhIGRldmljZV91bnJlZ2lzdGVyIChub3RlIHRoYXQgaWYgc29tZXRoaW5nCiAgKiBzdGlsbCBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGNsYXNzZGV2LCB0aGVuIHRoZSBtZW1vcnkgb2NjdXBpZWQKICAqIHdpbGwgbm90IGJlIGZyZWVkIHVudGlsIHRoZSBjbGFzc2RldiBpcyByZWxlYXNlZCkuICBJZiB5b3Ugd2FudCBhCiAgKiB0d28gcGhhc2UgcmVsZWFzZTogcmVtb3ZlIGZyb20gdmlzaWJpbGl0eSBhbmQgdGhlbiBkZWxldGUgdGhlCiAgKiBkZXZpY2UsIHRoZW4geW91IHNob3VsZCB1c2UgdGhpcyByb3V0aW5lIHdpdGggYSBmbiB0aGF0IGNhbGxzCi0gKiBjbGFzc19kZXZpY2VfZGVsKCkgYW5kIHRoZW4gdXNlCi0gKiBhdHRyaWJ1dGVfY29udGFpbmVyX2RldmljZV90cmlnZ2VyKCkgdG8gZG8gdGhlIGZpbmFsIHB1dCBvbiB0aGUKLSAqIGNsYXNzZGV2LgorICogZGV2aWNlX2RlbCgpIGFuZCB0aGVuIHVzZSBhdHRyaWJ1dGVfY29udGFpbmVyX2RldmljZV90cmlnZ2VyKCkKKyAqIHRvIGRvIHRoZSBmaW5hbCBwdXQgb24gdGhlIGNsYXNzZGV2LgogICovCiB2b2lkCiBhdHRyaWJ1dGVfY29udGFpbmVyX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgdm9pZCAoKmZuKShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqLAogCQkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKiwKLQkJCQkJICAgICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopKQorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKikpCiB7CiAJc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQ7CiAKQEAgLTIyNCwxNCArMjIzLDE0IEBACiAJCQljb250aW51ZTsKIAogCQlrbGlzdF9mb3JfZWFjaF9lbnRyeShpYywgJmNvbnQtPmNvbnRhaW5lcnMsIG5vZGUsICZpdGVyKSB7Ci0JCQlpZiAoZGV2ICE9IGljLT5jbGFzc2Rldi5kZXYpCisJCQlpZiAoZGV2ICE9IGljLT5jbGFzc2Rldi5wYXJlbnQpCiAJCQkJY29udGludWU7CiAJCQlrbGlzdF9kZWwoJmljLT5ub2RlKTsKIAkJCWlmIChmbikKIAkJCQlmbihjb250LCBkZXYsICZpYy0+Y2xhc3NkZXYpOwogCQkJZWxzZSB7CiAJCQkJYXR0cmlidXRlX2NvbnRhaW5lcl9yZW1vdmVfYXR0cnMoJmljLT5jbGFzc2Rldik7Ci0JCQkJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJmljLT5jbGFzc2Rldik7CisJCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmljLT5jbGFzc2Rldik7CiAJCQl9CiAJCX0KIAl9CkBAIC0yNTIsNyArMjUxLDcgQEAKIGF0dHJpYnV0ZV9jb250YWluZXJfZGV2aWNlX3RyaWdnZXIoc3RydWN0IGRldmljZSAqZGV2LCAKIAkJCQkgICBpbnQgKCpmbikoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwKIAkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlICosCi0JCQkJCSAgICAgc3RydWN0IGNsYXNzX2RldmljZSAqKSkKKwkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlICopKQogewogCXN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250OwogCkBAIC0yNzAsNyArMjY5LDcgQEAKIAkJfQogCiAJCWtsaXN0X2Zvcl9lYWNoX2VudHJ5KGljLCAmY29udC0+Y29udGFpbmVycywgbm9kZSwgJml0ZXIpIHsKLQkJCWlmIChkZXYgPT0gaWMtPmNsYXNzZGV2LmRldikKKwkJCWlmIChkZXYgPT0gaWMtPmNsYXNzZGV2LnBhcmVudCkKIAkJCQlmbihjb250LCBkZXYsICZpYy0+Y2xhc3NkZXYpOwogCQl9CiAJfQpAQCAtMzEzLDExICszMTIsMTEgQEAKICAqIGF0dHJpYnV0ZXMgbGlzdGVkIGluIHRoZSBjb250YWluZXIKICAqLwogaW50Ci1hdHRyaWJ1dGVfY29udGFpbmVyX2FkZF9hdHRycyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2RldikKK2F0dHJpYnV0ZV9jb250YWluZXJfYWRkX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmNsYXNzZGV2KQogewogCXN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250ID0KIAkJYXR0cmlidXRlX2NvbnRhaW5lcl9jbGFzc2Rldl90b19jb250YWluZXIoY2xhc3NkZXYpOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICoqYXR0cnMgPQljb250LT5hdHRyczsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKmF0dHJzID0gY29udC0+YXR0cnM7CiAJaW50IGksIGVycm9yOwogCiAJQlVHX09OKGF0dHJzICYmIGNvbnQtPmdycCk7CkBAIC0zMjksNyArMzI4LDcgQEAKIAkJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xhc3NkZXYtPmtvYmosIGNvbnQtPmdycCk7CiAKIAlmb3IgKGkgPSAwOyBhdHRyc1tpXTsgaSsrKSB7Ci0JCWVycm9yID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsYXNzZGV2LCBhdHRyc1tpXSk7CisJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKGNsYXNzZGV2LCBhdHRyc1tpXSk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0zMzgsMTggKzMzNywxOCBAQAogfQogCiAvKioKLSAqIGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2NsYXNzX2RldmljZSAtIHNhbWUgZnVuY3Rpb24gYXMgY2xhc3NfZGV2aWNlX2FkZAorICogYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlIC0gc2FtZSBmdW5jdGlvbiBhcyBkZXZpY2VfYWRkCiAgKgogICogQGNsYXNzZGV2Ogl0aGUgY2xhc3MgZGV2aWNlIHRvIGFkZAogICoKLSAqIFRoaXMgcGVyZm9ybXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgZnVuY3Rpb24gYXMgY2xhc3NfZGV2aWNlX2FkZCBleGNlcHQgZm9yCisgKiBUaGlzIHBlcmZvcm1zIGVzc2VudGlhbGx5IHRoZSBzYW1lIGZ1bmN0aW9uIGFzIGRldmljZV9hZGQgZXhjZXB0IGZvcgogICogYXR0cmlidXRlIGNvbnRhaW5lcnMsIG5hbWVseSBhZGQgdGhlIGNsYXNzZGV2IHRvIHRoZSBzeXN0ZW0gYW5kIHRoZW4KICAqIGNyZWF0ZSB0aGUgYXR0cmlidXRlIGZpbGVzCiAgKi8KIGludAotYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KQorYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmNsYXNzZGV2KQogewotCWludCBlcnJvciA9IGNsYXNzX2RldmljZV9hZGQoY2xhc3NkZXYpOworCWludCBlcnJvciA9IGRldmljZV9hZGQoY2xhc3NkZXYpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCXJldHVybiBhdHRyaWJ1dGVfY29udGFpbmVyX2FkZF9hdHRycyhjbGFzc2Rldik7CkBAIC0zNjQsNyArMzYzLDcgQEAKIGludAogYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlX2FkYXB0ZXIoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQsCiAJCQkJCSAgICAgc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KQorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmNsYXNzZGV2KQogewogCXJldHVybiBhdHRyaWJ1dGVfY29udGFpbmVyX2FkZF9jbGFzc19kZXZpY2UoY2xhc3NkZXYpOwogfQpAQCAtMzc2LDExICszNzUsMTEgQEAKICAqCiAgKi8KIHZvaWQKLWF0dHJpYnV0ZV9jb250YWluZXJfcmVtb3ZlX2F0dHJzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KQorYXR0cmlidXRlX2NvbnRhaW5lcl9yZW1vdmVfYXR0cnMoc3RydWN0IGRldmljZSAqY2xhc3NkZXYpCiB7CiAJc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQgPQogCQlhdHRyaWJ1dGVfY29udGFpbmVyX2NsYXNzZGV2X3RvX2NvbnRhaW5lcihjbGFzc2Rldik7Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKiphdHRycyA9CWNvbnQtPmF0dHJzOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICoqYXR0cnMgPSBjb250LT5hdHRyczsKIAlpbnQgaTsKIAogCWlmICghYXR0cnMgJiYgIWNvbnQtPmdycCkKQEAgLTM5Miw3ICszOTEsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGF0dHJzW2ldOyBpKyspCi0JCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGFzc2RldiwgYXR0cnNbaV0pOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoY2xhc3NkZXYsIGF0dHJzW2ldKTsKIH0KIAogLyoqCkBAIC00MDEsMTMgKzQwMCwxMyBAQAogICogQGNsYXNzZGV2OiB0aGUgY2xhc3MgZGV2aWNlCiAgKgogICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgcmVtb3ZlcyBhbGwgdGhlIGF0dHJpYnV0ZSBmaWxlcyBhbmQgdGhlbiBjYWxscwotICogY2xhc3NfZGV2aWNlX2RlbC4KKyAqIGRldmljZV9kZWwuCiAgKi8KIHZvaWQKLWF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NfZGV2aWNlX2RlbChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2RldikKK2F0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NfZGV2aWNlX2RlbChzdHJ1Y3QgZGV2aWNlICpjbGFzc2RldikKIHsKIAlhdHRyaWJ1dGVfY29udGFpbmVyX3JlbW92ZV9hdHRycyhjbGFzc2Rldik7Ci0JY2xhc3NfZGV2aWNlX2RlbChjbGFzc2Rldik7CisJZGV2aWNlX2RlbChjbGFzc2Rldik7CiB9CiAKIC8qKgpAQCAtNDE5LDE2ICs0MTgsMTYgQEAKICAqIExvb2tzIHVwIHRoZSBkZXZpY2UgaW4gdGhlIGNvbnRhaW5lcidzIGxpc3Qgb2YgY2xhc3MgZGV2aWNlcyBhbmQgcmV0dXJucwogICogdGhlIGNvcnJlc3BvbmRpbmcgY2xhc3NfZGV2aWNlLgogICovCi1zdHJ1Y3QgY2xhc3NfZGV2aWNlICoKK3N0cnVjdCBkZXZpY2UgKgogYXR0cmlidXRlX2NvbnRhaW5lcl9maW5kX2NsYXNzX2RldmljZShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqY29udCwKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9IE5VTEw7CisJc3RydWN0IGRldmljZSAqY2RldiA9IE5VTEw7CiAJc3RydWN0IGludGVybmFsX2NvbnRhaW5lciAqaWM7CiAJc3RydWN0IGtsaXN0X2l0ZXIgaXRlcjsKIAogCWtsaXN0X2Zvcl9lYWNoX2VudHJ5KGljLCAmY29udC0+Y29udGFpbmVycywgbm9kZSwgJml0ZXIpIHsKLQkJaWYgKGljLT5jbGFzc2Rldi5kZXYgPT0gZGV2KSB7CisJCWlmIChpYy0+Y2xhc3NkZXYucGFyZW50ID09IGRldikgewogCQkJY2RldiA9ICZpYy0+Y2xhc3NkZXY7CiAJCQkvKiBGSVhNRTogbXVzdCBleGl0IGl0ZXJhdG9yIHRoZW4gYnJlYWsgKi8KIAkJCWtsaXN0X2l0ZXJfZXhpdCgmaXRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggMDU1OTg5ZS4uYmUxY2M1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtNzksNyArNzksNyBAQAogewogCXN0cnVjdCBkcml2ZXJfcHJpdmF0ZSAqZHJ2X3ByaXYgPSB0b19kcml2ZXIoa29iaik7CiAKLQlwcl9kZWJ1ZygiZHJpdmVyOiAnJXMnOiAlc1xuIiwga29iamVjdF9uYW1lKGtvYmopLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCJkcml2ZXI6ICclcyc6ICVzXG4iLCBrb2JqZWN0X25hbWUoa29iaiksIF9fZnVuY19fKTsKIAlrZnJlZShkcnZfcHJpdik7CiB9CiAKQEAgLTUwNSwxNCArNTA1LDExIEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoYnVzKSB7Ci0JCWRldi0+aXNfcmVnaXN0ZXJlZCA9IDE7CiAJCWlmIChidXMtPnAtPmRyaXZlcnNfYXV0b3Byb2JlKQogCQkJcmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpOwogCQlXQVJOX09OKHJldCA8IDApOwogCQlpZiAocmV0ID49IDApCiAJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9idXMsICZidXMtPnAtPmtsaXN0X2RldmljZXMpOwotCQllbHNlCi0JCQlkZXYtPmlzX3JlZ2lzdGVyZWQgPSAwOwogCX0KIH0KIApAQCAtNTMzLDEwICs1MzAsOCBAQAogCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5idXMtPnAtPmRldmljZXNfa3NldC0+a29iaiwKIAkJCQkgIGRldi0+YnVzX2lkKTsKIAkJZGV2aWNlX3JlbW92ZV9hdHRycyhkZXYtPmJ1cywgZGV2KTsKLQkJaWYgKGRldi0+aXNfcmVnaXN0ZXJlZCkgewotCQkJZGV2LT5pc19yZWdpc3RlcmVkID0gMDsKLQkJCWtsaXN0X2RlbCgmZGV2LT5rbm9kZV9idXMpOwotCQl9CisJCWtsaXN0X2RlbCgmZGV2LT5rbm9kZV9idXMpOworCiAJCXByX2RlYnVnKCJidXM6ICclcyc6IHJlbW92ZSBkZXZpY2UgJXNcbiIsCiAJCQkgZGV2LT5idXMtPm5hbWUsIGRldi0+YnVzX2lkKTsKIAkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7CkBAIC02NTgsOSArNjUzLDEwIEBACiAJcHJfZGVidWcoImJ1czogJyVzJzogYWRkIGRyaXZlciAlc1xuIiwgYnVzLT5uYW1lLCBkcnYtPm5hbWUpOwogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2KQotCQlyZXR1cm4gLUVOT01FTTsKLQorCWlmICghcHJpdikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3B1dF9idXM7CisJfQogCWtsaXN0X2luaXQoJnByaXYtPmtsaXN0X2RldmljZXMsIE5VTEwsIE5VTEwpOwogCXByaXYtPmRyaXZlciA9IGRydjsKIAlkcnYtPnAgPSBwcml2OwpAQCAtNjY4LDcgKzY2NCw3IEBACiAJZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmcHJpdi0+a29iaiwgJmRyaXZlcl9rdHlwZSwgTlVMTCwKIAkJCQkgICAgICIlcyIsIGRydi0+bmFtZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9wdXRfYnVzOworCQlnb3RvIG91dF91bnJlZ2lzdGVyOwogCiAJaWYgKGRydi0+YnVzLT5wLT5kcml2ZXJzX2F1dG9wcm9iZSkgewogCQllcnJvciA9IGRyaXZlcl9hdHRhY2goZHJ2KTsKQEAgLTY4MSwxOSArNjc3LDE5IEBACiAJZXJyb3IgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoZHJ2LCAmZHJpdmVyX2F0dHJfdWV2ZW50KTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdWV2ZW50IGF0dHIgKCVzKSBmYWlsZWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGRydi0+bmFtZSk7CisJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKIAl9CiAJZXJyb3IgPSBkcml2ZXJfYWRkX2F0dHJzKGJ1cywgZHJ2KTsKIAlpZiAoZXJyb3IpIHsKIAkJLyogSG93IHRoZSBoZWxsIGRvIHdlIGdldCBvdXQgb2YgdGhpcyBwaWNrbGU/IEdpdmUgdXAgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZHJpdmVyX2FkZF9hdHRycyglcykgZmFpbGVkXG4iLAotCQkJX19GVU5DVElPTl9fLCBkcnYtPm5hbWUpOworCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CiAJfQogCWVycm9yID0gYWRkX2JpbmRfZmlsZXMoZHJ2KTsKIAlpZiAoZXJyb3IpIHsKIAkJLyogRGl0dG8gKi8KIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkX2JpbmRfZmlsZXMoJXMpIGZhaWxlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZHJ2LT5uYW1lKTsKKwkJCV9fZnVuY19fLCBkcnYtPm5hbWUpOwogCX0KIAogCWtvYmplY3RfdWV2ZW50KCZwcml2LT5rb2JqLCBLT0JKX0FERCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IDlkOTE1MzcuLmI0OTAxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCkBAIC0xNzUsMTMgKzE3NSwxMyBAQAogCiBzdGF0aWMgdm9pZCBjbGFzc19jcmVhdGVfcmVsZWFzZShzdHJ1Y3QgY2xhc3MgKmNscykKIHsKLQlwcl9kZWJ1ZygiJXMgY2FsbGVkIGZvciAlc1xuIiwgX19GVU5DVElPTl9fLCBjbHMtPm5hbWUpOworCXByX2RlYnVnKCIlcyBjYWxsZWQgZm9yICVzXG4iLCBfX2Z1bmNfXywgY2xzLT5uYW1lKTsKIAlrZnJlZShjbHMpOwogfQogCiBzdGF0aWMgdm9pZCBjbGFzc19kZXZpY2VfY3JlYXRlX3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2KQogewotCXByX2RlYnVnKCIlcyBjYWxsZWQgZm9yICVzXG4iLCBfX0ZVTkNUSU9OX18sIGNsYXNzX2Rldi0+Y2xhc3NfaWQpOworCXByX2RlYnVnKCIlcyBjYWxsZWQgZm9yICVzXG4iLCBfX2Z1bmNfXywgY2xhc3NfZGV2LT5jbGFzc19pZCk7CiAJa2ZyZWUoY2xhc3NfZGV2KTsKIH0KIApAQCAtMTg5LDcgKzE4OSw3IEBACiBzdGF0aWMgaW50IGNsYXNzX2RldmljZV9jcmVhdGVfdWV2ZW50KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKIAkJCQkgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7Ci0JcHJfZGVidWcoIiVzIGNhbGxlZCBmb3IgJXNcbiIsIF9fRlVOQ1RJT05fXywgY2xhc3NfZGV2LT5jbGFzc19pZCk7CisJcHJfZGVidWcoIiVzIGNhbGxlZCBmb3IgJXNcbiIsIF9fZnVuY19fLCBjbGFzc19kZXYtPmNsYXNzX2lkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE1LDcgKzQxNSw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gY2xhc3NfZGV2LT5kZXY7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlwcl9kZWJ1ZygiJXMgLSBuYW1lID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgY2xhc3NfZGV2LT5jbGFzc19pZCk7CisJcHJfZGVidWcoIiVzIC0gbmFtZSA9ICVzXG4iLCBfX2Z1bmNfXywgY2xhc3NfZGV2LT5jbGFzc19pZCk7CiAKIAlpZiAoTUFKT1IoY2xhc3NfZGV2LT5kZXZ0KSkgewogCQlhZGRfdWV2ZW50X3ZhcihlbnYsICJNQUpPUj0ldSIsIE1BSk9SKGNsYXNzX2Rldi0+ZGV2dCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggOWMwMDcwYi4uOTI0OGUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC0xOSw3ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSAiYmFzZS5oIgogI2luY2x1ZGUgInBvd2VyL3Bvd2VyLmgiCkBAIC02OCw2ICs2OSwxMCBAQAogCiAJaWYgKGRldl9hdHRyLT5zaG93KQogCQlyZXQgPSBkZXZfYXR0ci0+c2hvdyhkZXYsIGRldl9hdHRyLCBidWYpOworCWlmIChyZXQgPj0gKHNzaXplX3QpUEFHRV9TSVpFKSB7CisJCXByaW50X3N5bWJvbCgiZGV2X2F0dHJfc2hvdzogJXMgcmV0dXJuZWQgYmFkIGNvdW50XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nKWRldl9hdHRyLT5zaG93KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAyLDcgKzIwNyw3IEBACiAJCXJldHZhbCA9IGRldi0+YnVzLT51ZXZlbnQoZGV2LCBlbnYpOwogCQlpZiAocmV0dmFsKQogCQkJcHJfZGVidWcoImRldmljZTogJyVzJzogJXM6IGJ1cyB1ZXZlbnQoKSByZXR1cm5lZCAlZFxuIiwKLQkJCQkgZGV2LT5idXNfaWQsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCQkgZGV2LT5idXNfaWQsIF9fZnVuY19fLCByZXR2YWwpOwogCX0KIAogCS8qIGhhdmUgdGhlIGNsYXNzIHNwZWNpZmljIGZ1bmN0aW9uIGFkZCBpdHMgc3R1ZmYgKi8KQEAgLTIxMSw3ICsyMTYsNyBAQAogCQlpZiAocmV0dmFsKQogCQkJcHJfZGVidWcoImRldmljZTogJyVzJzogJXM6IGNsYXNzIHVldmVudCgpICIKIAkJCQkgInJldHVybmVkICVkXG4iLCBkZXYtPmJ1c19pZCwKLQkJCQkgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJCSBfX2Z1bmNfXywgcmV0dmFsKTsKIAl9CiAKIAkvKiBoYXZlIHRoZSBkZXZpY2UgdHlwZSBzcGVjaWZpYyBmdWN0aW9uIGFkZCBpdHMgc3R1ZmYgKi8KQEAgLTIyMCw3ICsyMjUsNyBAQAogCQlpZiAocmV0dmFsKQogCQkJcHJfZGVidWcoImRldmljZTogJyVzJzogJXM6IGRldl90eXBlIHVldmVudCgpICIKIAkJCQkgInJldHVybmVkICVkXG4iLCBkZXYtPmJ1c19pZCwKLQkJCQkgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJCSBfX2Z1bmNfXywgcmV0dmFsKTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNjIxLDcgKzYyNiw4IEBACiBzdGF0aWMgdm9pZCBjbGVhbnVwX2dsdWVfZGlyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmplY3QgKmdsdWVfZGlyKQogewogCS8qIHNlZSBpZiB3ZSBsaXZlIGluIGEgImdsdWUiIGRpcmVjdG9yeSAqLwotCWlmICghZGV2LT5jbGFzcyB8fCBnbHVlX2Rpci0+a3NldCAhPSAmZGV2LT5jbGFzcy0+Y2xhc3NfZGlycykKKwlpZiAoIWdsdWVfZGlyIHx8ICFkZXYtPmNsYXNzIHx8CisJICAgIGdsdWVfZGlyLT5rc2V0ICE9ICZkZXYtPmNsYXNzLT5jbGFzc19kaXJzKQogCQlyZXR1cm47CiAKIAlrb2JqZWN0X3B1dChnbHVlX2Rpcik7CkBAIC03NzAsMjAgKzc3NiwxMyBAQAogCXN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmNsYXNzX2ludGY7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBwbV9zbGVlcF9sb2NrKCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldl93YXJuKGRldiwgIlN1c3BpY2lvdXMgJXMgZHVyaW5nIHN1c3BlbmRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQogCWRldiA9IGdldF9kZXZpY2UoZGV2KTsKIAlpZiAoIWRldiB8fCAhc3RybGVuKGRldi0+YnVzX2lkKSkgewogCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gRXJyb3I7CisJCWdvdG8gRG9uZTsKIAl9CiAKLQlwcl9kZWJ1ZygiZGV2aWNlOiAnJXMnOiAlc1xuIiwgZGV2LT5idXNfaWQsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoImRldmljZTogJyVzJzogJXNcbiIsIGRldi0+YnVzX2lkLCBfX2Z1bmNfXyk7CiAKIAlwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi0+cGFyZW50KTsKIAlzZXR1cF9wYXJlbnQoZGV2LCBwYXJlbnQpOwpAQCAtODE4LDEzICs4MTcsMTIgQEAKIAllcnJvciA9IGRldmljZV9hZGRfYXR0cnMoZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gQXR0cnNFcnJvcjsKLQllcnJvciA9IGRwbV9zeXNmc19hZGQoZGV2KTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gUE1FcnJvcjsKLQlkZXZpY2VfcG1fYWRkKGRldik7CiAJZXJyb3IgPSBidXNfYWRkX2RldmljZShkZXYpOwogCWlmIChlcnJvcikKIAkJZ290byBCdXNFcnJvcjsKKwllcnJvciA9IGRldmljZV9wbV9hZGQoZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gUE1FcnJvcjsKIAlrb2JqZWN0X3VldmVudCgmZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAJYnVzX2F0dGFjaF9kZXZpY2UoZGV2KTsKIAlpZiAocGFyZW50KQpAQCAtODQzLDEyICs4NDEsMTAgQEAKIAl9CiAgRG9uZToKIAlwdXRfZGV2aWNlKGRldik7Ci0JcG1fc2xlZXBfdW5sb2NrKCk7CiAJcmV0dXJuIGVycm9yOwotIEJ1c0Vycm9yOgotCWRldmljZV9wbV9yZW1vdmUoZGV2KTsKLQlkcG1fc3lzZnNfcmVtb3ZlKGRldik7CiAgUE1FcnJvcjoKKwlidXNfcmVtb3ZlX2RldmljZShkZXYpOworIEJ1c0Vycm9yOgogCWlmIChkZXYtPmJ1cykKIAkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZGV2LT5idXMtPnAtPmJ1c19ub3RpZmllciwKIAkJCQkJICAgICBCVVNfTk9USUZZX0RFTF9ERVZJQ0UsIGRldik7CkBAIC05ODQsNyArOTgwLDcgQEAKICAqLwogdm9pZCBkZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHJfZGVidWcoImRldmljZTogJyVzJzogJXNcbiIsIGRldi0+YnVzX2lkLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCJkZXZpY2U6ICclcyc6ICVzXG4iLCBkZXYtPmJ1c19pZCwgX19mdW5jX18pOwogCWRldmljZV9kZWwoZGV2KTsKIAlwdXRfZGV2aWNlKGRldik7CiB9CkBAIC0xMDc5LDcgKzEwNzUsNyBAQAogCiBzdGF0aWMgdm9pZCBkZXZpY2VfY3JlYXRlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXByX2RlYnVnKCJkZXZpY2U6ICclcyc6ICVzXG4iLCBkZXYtPmJ1c19pZCwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiZGV2aWNlOiAnJXMnOiAlc1xuIiwgZGV2LT5idXNfaWQsIF9fZnVuY19fKTsKIAlrZnJlZShkZXYpOwogfQogCkBAIC0xMTY3LDM1ICsxMTYzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9kZXN0cm95KTsKIAotI2lmZGVmIENPTkZJR19QTV9TTEVFUAotLyoqCi0gKiBkZXN0cm95X3N1c3BlbmRlZF9kZXZpY2UgLSBhc2tzIHRoZSBQTSBjb3JlIHRvIHJlbW92ZSBhIHN1c3BlbmRlZCBkZXZpY2UKLSAqIEBjbGFzczogcG9pbnRlciB0byB0aGUgc3RydWN0IGNsYXNzIHRoYXQgdGhpcyBkZXZpY2Ugd2FzIHJlZ2lzdGVyZWQgd2l0aAotICogQGRldnQ6IHRoZSBkZXZfdCBvZiB0aGUgZGV2aWNlIHRoYXQgd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZAotICoKLSAqIFRoaXMgY2FsbCBub3RpZmllcyB0aGUgUE0gY29yZSBvZiB0aGUgbmVjZXNzaXR5IHRvIHVucmVnaXN0ZXIgYSBzdXNwZW5kZWQKLSAqIGRldmljZSBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIGRldmljZV9jcmVhdGUoKSAoZGV2aWNlcyBjYW5ub3QgYmUKLSAqIHVucmVnaXN0ZXJlZCBkaXJlY3RseSB3aGlsZSBzdXNwZW5kZWQsIHNpbmNlIHRoZSBQTSBjb3JlIGhvbGRzIHRoZWlyCi0gKiBzZW1hcGhvcmVzIGF0IHRoYXQgdGltZSkuCi0gKgotICogSXQgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgYSBzeXN0ZW0gc2xlZXAgdHJhbnNpdGlvbi4gIEluCi0gKiBwcmFjdGljZSB0aGlzIG1lYW5zIGl0IGhhcyB0byBiZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9rZWQgZWl0aGVyIGJ5Ci0gKiBhIHN1c3BlbmQgb3IgcmVzdW1lIG1ldGhvZCwgb3IgYnkgdGhlIFBNIGNvcmUgKGUuZy4gdmlhCi0gKiBkaXNhYmxlX25vbmJvb3RfY3B1cygpIG9yIGVuYWJsZV9ub25ib290X2NwdXMoKSkuCi0gKi8KLXZvaWQgZGVzdHJveV9zdXNwZW5kZWRfZGV2aWNlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGRldl90IGRldnQpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0JZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoY2xhc3MsICZkZXZ0LCBfX21hdGNoX2RldnQpOwotCWlmIChkZXYpIHsKLQkJZGV2aWNlX3BtX3NjaGVkdWxlX3JlbW92YWwoZGV2KTsKLQkJcHV0X2RldmljZShkZXYpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGRlc3Ryb3lfc3VzcGVuZGVkX2RldmljZSk7Ci0jZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCi0KIC8qKgogICogZGV2aWNlX3JlbmFtZSAtIHJlbmFtZXMgYSBkZXZpY2UKICAqIEBkZXY6IHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZGV2aWNlIHRvIGJlIHJlbmFtZWQKQEAgLTEyMTMsNyArMTE4MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJfZGVidWcoImRldmljZTogJyVzJzogJXM6IHJlbmFtaW5nIHRvICclcydcbiIsIGRldi0+YnVzX2lkLAotCQkgX19GVU5DVElPTl9fLCBuZXdfbmFtZSk7CisJCSBfX2Z1bmNfXywgbmV3X25hbWUpOwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQKIAlpZiAoKGRldi0+Y2xhc3MpICYmIChkZXYtPnBhcmVudCkpCkBAIC0xMjUyLDcgKzEyMTksNyBAQAogCQkJCQkgIGRldi0+YnVzX2lkKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlkZXZfZXJyKGRldiwgIiVzOiBzeXNmc19jcmVhdGVfc3ltbGluayBmYWlsZWQgKCVkKVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGVycm9yKTsKKwkJCQlfX2Z1bmNfXywgZXJyb3IpOwogCQl9CiAJfQogI2VuZGlmCkBAIC0xMzI4LDcgKzEyOTUsNyBAQAogCW5ld19wYXJlbnRfa29iaiA9IGdldF9kZXZpY2VfcGFyZW50KGRldiwgbmV3X3BhcmVudCk7CiAKIAlwcl9kZWJ1ZygiZGV2aWNlOiAnJXMnOiAlczogbW92aW5nIHRvICclcydcbiIsIGRldi0+YnVzX2lkLAotCQkgX19GVU5DVElPTl9fLCBuZXdfcGFyZW50ID8gbmV3X3BhcmVudC0+YnVzX2lkIDogIjxOVUxMPiIpOworCQkgX19mdW5jX18sIG5ld19wYXJlbnQgPyBuZXdfcGFyZW50LT5idXNfaWQgOiAiPE5VTEw+Iik7CiAJZXJyb3IgPSBrb2JqZWN0X21vdmUoJmRldi0+a29iaiwgbmV3X3BhcmVudF9rb2JqKTsKIAlpZiAoZXJyb3IpIHsKIAkJY2xlYW51cF9nbHVlX2RpcihkZXYsIG5ld19wYXJlbnRfa29iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY3B1LmMgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKaW5kZXggNDk5YjAwMy4uNmZlNDE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NwdS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jcHUuYwpAQCAtMjgsNyArMjgsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIWNwdV9vbmxpbmUoY3B1LT5zeXNkZXYuaWQpKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfb25saW5lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IF9fcmVmIHN0b3JlX29ubGluZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7CkBAIC01NSw3ICs1NSw3IEBACiB9CiBzdGF0aWMgU1lTREVWX0FUVFIob25saW5lLCAwNjQ0LCBzaG93X29ubGluZSwgc3RvcmVfb25saW5lKTsKIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHJlZ2lzdGVyX2NwdV9jb250cm9sKHN0cnVjdCBjcHUgKmNwdSkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByZWdpc3Rlcl9jcHVfY29udHJvbChzdHJ1Y3QgY3B1ICpjcHUpCiB7CiAJc3lzZGV2X2NyZWF0ZV9maWxlKCZjcHUtPnN5c2RldiwgJmF0dHJfb25saW5lKTsKIH0KQEAgLTEwMyw2ICsxMDMsNTEgQEAKICNlbmRpZgogCiAvKgorICogUHJpbnQgY3B1IG9ubGluZSwgcG9zc2libGUsIHByZXNlbnQsIGFuZCBzeXN0ZW0gbWFwcworICovCitzdGF0aWMgc3NpemVfdCBwcmludF9jcHVzX21hcChjaGFyICpidWYsIGNwdW1hc2tfdCAqbWFwKQoreworCWludCBuID0gY3B1bGlzdF9zY25wcmludGYoYnVmLCBQQUdFX1NJWkUtMiwgKm1hcCk7CisKKwlidWZbbisrXSA9ICdcbic7CisJYnVmW25dID0gJ1wwJzsKKwlyZXR1cm4gbjsKK30KKworI2RlZmluZQlwcmludF9jcHVzX2Z1bmModHlwZSkgXAorc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c18jI3R5cGUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gcHJpbnRfY3B1c19tYXAoYnVmLCAmY3B1XyMjdHlwZSMjX21hcCk7CQkJXAorfQkJCQkJCQkJCVwKK3N0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlIGF0dHJfIyN0eXBlIyNfbWFwID0gCQkJXAorCV9TWVNERVZfQ0xBU1NfQVRUUih0eXBlLCAwNDQ0LCBwcmludF9jcHVzXyMjdHlwZSwgTlVMTCkKKworcHJpbnRfY3B1c19mdW5jKG9ubGluZSk7CitwcmludF9jcHVzX2Z1bmMocG9zc2libGUpOworcHJpbnRfY3B1c19mdW5jKHByZXNlbnQpOworCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY3B1X3N0YXRlX2F0dHJbXSA9IHsKKwkmYXR0cl9vbmxpbmVfbWFwLAorCSZhdHRyX3Bvc3NpYmxlX21hcCwKKwkmYXR0cl9wcmVzZW50X21hcCwKK307CisKK3N0YXRpYyBpbnQgY3B1X3N0YXRlc19pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyAgaSA8IEFSUkFZX1NJWkUoY3B1X3N0YXRlX2F0dHIpOyBpKyspIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gc3lzZGV2X2NsYXNzX2NyZWF0ZV9maWxlKCZjcHVfc3lzZGV2X2NsYXNzLAorCQkJCQkJY3B1X3N0YXRlX2F0dHJbaV0pOworCQlpZiAoIWVycikKKwkJCWVyciA9IHJldDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoKICAqIHJlZ2lzdGVyX2NwdSAtIFNldHVwIGEgc3lzZnMgZGV2aWNlIGZvciBhIENQVS4KICAqIEBjcHUgLSBjcHUtPmhvdHBsdWdnYWJsZSBmaWVsZCBzZXQgdG8gMSB3aWxsIGdlbmVyYXRlIGEgY29udHJvbCBmaWxlIGluCiAgKgkgIHN5c2ZzIGZvciB0aGlzIENQVS4KQEAgLTE0Nyw2ICsxOTIsOSBAQAogCWludCBlcnI7CiAKIAllcnIgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MpOworCWlmICghZXJyKQorCQllcnIgPSBjcHVfc3RhdGVzX2luaXQoKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCiAJaWYgKCFlcnIpCiAJCWVyciA9IHNjaGVkX2NyZWF0ZV9zeXNmc19wb3dlcl9zYXZpbmdzX2VudHJpZXMoJmNwdV9zeXNkZXZfY2xhc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCBhNWNkZTk0Li4zYWM0NDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMzAsMTIgKzMwLDEyIEBACiB7CiAJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfZHJpdmVyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZGV2aWNlICVzIGFscmVhZHkgYm91bmRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CisJCQlfX2Z1bmNfXywga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKIAkJcmV0dXJuOwogCX0KIAogCXByX2RlYnVnKCJkcml2ZXI6ICclcyc6ICVzOiBib3VuZCB0byBkZXZpY2UgJyVzJ1xuIiwgZGV2LT5idXNfaWQsCi0JCSBfX0ZVTkNUSU9OX18sIGRldi0+ZHJpdmVyLT5uYW1lKTsKKwkJIF9fZnVuY19fLCBkZXYtPmRyaXZlci0+bmFtZSk7CiAKIAlpZiAoZGV2LT5idXMpCiAJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRldi0+YnVzLT5wLT5idXNfbm90aWZpZXIsCkBAIC0xMDQsMTMgKzEwNCwxMyBAQAogCiAJYXRvbWljX2luYygmcHJvYmVfY291bnQpOwogCXByX2RlYnVnKCJidXM6ICclcyc6ICVzOiBwcm9iaW5nIGRyaXZlciAlcyB3aXRoIGRldmljZSAlc1xuIiwKLQkJIGRydi0+YnVzLT5uYW1lLCBfX0ZVTkNUSU9OX18sIGRydi0+bmFtZSwgZGV2LT5idXNfaWQpOworCQkgZHJ2LT5idXMtPm5hbWUsIF9fZnVuY19fLCBkcnYtPm5hbWUsIGRldi0+YnVzX2lkKTsKIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZkZXYtPmRldnJlc19oZWFkKSk7CiAKIAlkZXYtPmRyaXZlciA9IGRydjsKIAlpZiAoZHJpdmVyX3N5c2ZzX2FkZChkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRyaXZlcl9zeXNmc19hZGQoJXMpIGZhaWxlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZGV2LT5idXNfaWQpOworCQkJX19mdW5jX18sIGRldi0+YnVzX2lkKTsKIAkJZ290byBwcm9iZV9mYWlsZWQ7CiAJfQogCkBAIC0xMjcsNyArMTI3LDcgQEAKIAlkcml2ZXJfYm91bmQoZGV2KTsKIAlyZXQgPSAxOwogCXByX2RlYnVnKCJidXM6ICclcyc6ICVzOiBib3VuZCBkZXZpY2UgJXMgdG8gZHJpdmVyICVzXG4iLAotCQkgZHJ2LT5idXMtPm5hbWUsIF9fRlVOQ1RJT05fXywgZGV2LT5idXNfaWQsIGRydi0+bmFtZSk7CisJCSBkcnYtPmJ1cy0+bmFtZSwgX19mdW5jX18sIGRldi0+YnVzX2lkLCBkcnYtPm5hbWUpOwogCWdvdG8gZG9uZTsKIAogcHJvYmVfZmFpbGVkOgpAQCAtMTYwLDcgKzE2MCw3IEBACiAgKi8KIGludCBkcml2ZXJfcHJvYmVfZG9uZSh2b2lkKQogewotCXByX2RlYnVnKCIlczogcHJvYmVfY291bnQgPSAlZFxuIiwgX19GVU5DVElPTl9fLAorCXByX2RlYnVnKCIlczogcHJvYmVfY291bnQgPSAlZFxuIiwgX19mdW5jX18sCiAJCSBhdG9taWNfcmVhZCgmcHJvYmVfY291bnQpKTsKIAlpZiAoYXRvbWljX3JlYWQoJnByb2JlX2NvdW50KSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQlnb3RvIGRvbmU7CiAKIAlwcl9kZWJ1ZygiYnVzOiAnJXMnOiAlczogbWF0Y2hlZCBkZXZpY2UgJXMgd2l0aCBkcml2ZXIgJXNcbiIsCi0JCSBkcnYtPmJ1cy0+bmFtZSwgX19GVU5DVElPTl9fLCBkZXYtPmJ1c19pZCwgZHJ2LT5uYW1lKTsKKwkJIGRydi0+YnVzLT5uYW1lLCBfX2Z1bmNfXywgZGV2LT5idXNfaWQsIGRydi0+bmFtZSk7CiAKIAlyZXQgPSByZWFsbHlfcHJvYmUoZGV2LCBkcnYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggYmE3NTE4NC4uOWE2NTM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtMTIwLDYgKzEyMCw5IEBACiAKIC8qKgogICogZHJpdmVyX2FkZF9rb2JqIC0gYWRkIGEga29iamVjdCBiZWxvdyB0aGUgc3BlY2lmaWVkIGRyaXZlcgorICogQGRydjogcmVxdWVzdGluZyBkZXZpY2UgZHJpdmVyCisgKiBAa29iajoga29iamVjdCB0byBhZGQgYmVsb3cgdGhpcyBkcml2ZXIKKyAqIEBmbXQ6IGZvcm1hdCBzdHJpbmcgdGhhdCBuYW1lcyB0aGUga29iamVjdAogICoKICAqIFlvdSByZWFsbHkgZG9uJ3Qgd2FudCB0byBkbyB0aGlzLCB0aGlzIGlzIG9ubHkgaGVyZSBkdWUgdG8gb25lIGxvb25leQogICogaXNlcmllcyBkcml2ZXIsIGdvIHBva2UgdGhvc2UgZGV2ZWxvcGVycyBpZiB5b3UgYXJlIGFubm95ZWQgYWJvdXQKQEAgLTEzMCw2ICsxMzMsNyBAQAogewogCXZhX2xpc3QgYXJnczsKIAljaGFyICpuYW1lOworCWludCByZXQ7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCW5hbWUgPSBrdmFzcHJpbnRmKEdGUF9LRVJORUwsIGZtdCwgYXJncyk7CkBAIC0xMzgsNyArMTQyLDkgQEAKIAlpZiAoIW5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIGtvYmplY3RfYWRkKGtvYmosICZkcnYtPnAtPmtvYmosICIlcyIsIG5hbWUpOworCXJldCA9IGtvYmplY3RfYWRkKGtvYmosICZkcnYtPnAtPmtvYmosICIlcyIsIG5hbWUpOworCWtmcmVlKG5hbWUpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkcml2ZXJfYWRkX2tvYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCmluZGV4IDRhMWI5YmYuLjFmZWY3ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJfQogCQkvKiBmYWxsdGhyb3VnaCAqLwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuZXhwZWN0ZWQgdmFsdWUgKCVkKVxuIiwgX19GVU5DVElPTl9fLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIHZhbHVlICglZClcbiIsIF9fZnVuY19fLAogCQkgICAgICAgbG9hZGluZyk7CiAJCS8qIGZhbGx0aHJvdWdoICovCiAJY2FzZSAtMToKQEAgLTIwOSw3ICsyMDksNyBAQAogCW5ld19zaXplID0gQUxJR04obWluX3NpemUsIFBBR0VfU0laRSk7CiAJbmV3X2RhdGEgPSB2bWFsbG9jKG5ld19zaXplKTsKIAlpZiAoIW5ld19kYXRhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBhbGxvYyBidWZmZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBhbGxvYyBidWZmZXJcbiIsIF9fZnVuY19fKTsKIAkJLyogTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qga2VlcCBpbmNvbXBsZXRlIGRhdGEgKi8KIAkJZndfbG9hZF9hYm9ydChmd19wcml2KTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMDcsNyArMzA3LDcgQEAKIAkqZGV2X3AgPSBOVUxMOwogCiAJaWYgKCFmd19wcml2IHx8ICFmX2RldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczoga21hbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9rZnJlZTsKIAl9CkBAIC0zMjgsNyArMzI4LDcgQEAKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZl9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyb3Jfa2ZyZWU7CiAJfQogCSpkZXZfcCA9IGZfZGV2OwpAQCAtMzYyLDE0ICszNjIsMTQgQEAKIAlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmZfZGV2LT5rb2JqLCAmZndfcHJpdi0+YXR0cl9kYXRhKTsKIAlpZiAocmV0dmFsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSBmYWlsZWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIGVycm9yX3VucmVnOwogCX0KIAogCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShmX2RldiwgJmRldl9hdHRyX2xvYWRpbmcpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyb3JfdW5yZWc7CiAJfQogCkBAIC0zOTksNyArMzk5LDcgQEAKIAkqZmlybXdhcmVfcCA9IGZpcm13YXJlID0ga3phbGxvYyhzaXplb2YoKmZpcm13YXJlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNTcwLDEzICs1NzAsMTMgQEAKIAlpbnQgZXJyb3I7CiAJZXJyb3IgPSBjbGFzc19yZWdpc3RlcigmZmlybXdhcmVfY2xhc3MpOwogCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjbGFzc19yZWdpc3RlciBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNsYXNzX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCWVycm9yID0gY2xhc3NfY3JlYXRlX2ZpbGUoJmZpcm13YXJlX2NsYXNzLCAmY2xhc3NfYXR0cl90aW1lb3V0KTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2xhc3NfY3JlYXRlX2ZpbGUgZmFpbGVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJY2xhc3NfdW5yZWdpc3RlcigmZmlybXdhcmVfY2xhc3MpOwogCX0KIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggN2FlNDEzZi4uOGNlNmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNjEsOCArNjIsOCBAQAogLyoKICAqIHJlZ2lzdGVyX21lbW9yeSAtIFNldHVwIGEgc3lzZnMgZGV2aWNlIGZvciBhIG1lbW9yeSBibG9jawogICovCi1pbnQgcmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbW9yeSwgc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uLAotCQlzdHJ1Y3Qgbm9kZSAqcm9vdCkKK3N0YXRpYworaW50IHJlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW1vcnksIHN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbikKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTcwLDI2ICs3MSwxOCBAQAogCW1lbW9yeS0+c3lzZGV2LmlkID0gX19zZWN0aW9uX25yKHNlY3Rpb24pOwogCiAJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJm1lbW9yeS0+c3lzZGV2KTsKLQotCWlmIChyb290ICYmICFlcnJvcikKLQkJZXJyb3IgPSBzeXNmc19jcmVhdGVfbGluaygmcm9vdC0+c3lzZGV2LmtvYmosCi0JCQkJCSAgJm1lbW9yeS0+c3lzZGV2LmtvYmosCi0JCQkJCSAga29iamVjdF9uYW1lKCZtZW1vcnktPnN5c2Rldi5rb2JqKSk7Ci0KIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkCi11bnJlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW1vcnksIHN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbiwKLQkJc3RydWN0IG5vZGUgKnJvb3QpCit1bnJlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW1vcnksIHN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbikKIHsKIAlCVUdfT04obWVtb3J5LT5zeXNkZXYuY2xzICE9ICZtZW1vcnlfc3lzZGV2X2NsYXNzKTsKIAlCVUdfT04obWVtb3J5LT5zeXNkZXYuaWQgIT0gX19zZWN0aW9uX25yKHNlY3Rpb24pKTsKIAorCS8qIGRyb3AgdGhlIHJlZi4gd2UgZ290IGluIHJlbW92ZV9tZW1vcnlfYmxvY2soKSAqLworCWtvYmplY3RfcHV0KCZtZW1vcnktPnN5c2Rldi5rb2JqKTsKIAlzeXNkZXZfdW5yZWdpc3RlcigmbWVtb3J5LT5zeXNkZXYpOwotCWlmIChyb290KQotCQlzeXNmc19yZW1vdmVfbGluaygmcm9vdC0+c3lzZGV2LmtvYmosCi0JCQkJICBrb2JqZWN0X25hbWUoJm1lbW9yeS0+c3lzZGV2LmtvYmopKTsKIH0KIAogLyoKQEAgLTE5Myw3ICsxODYsNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyglcCwgJWxkKSB1bmtub3duIGFjdGlvbjogJWxkXG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIG1lbSwgYWN0aW9uLCBhY3Rpb24pOworCQkJCQlfX2Z1bmNfXywgbWVtLCBhY3Rpb24sIGFjdGlvbik7CiAJCQlXQVJOX09OKDEpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAl9CkBAIC0yMDUsNyArMTk4LDcgQEAKIAkJdW5zaWduZWQgbG9uZyB0b19zdGF0ZSwgdW5zaWduZWQgbG9uZyBmcm9tX3N0YXRlX3JlcSkKIHsKIAlpbnQgcmV0ID0gMDsKLQlkb3duKCZtZW0tPnN0YXRlX3NlbSk7CisJbXV0ZXhfbG9jaygmbWVtLT5zdGF0ZV9tdXRleCk7CiAKIAlpZiAobWVtLT5zdGF0ZSAhPSBmcm9tX3N0YXRlX3JlcSkgewogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMjE3LDcgKzIxMCw3IEBACiAJCW1lbS0+c3RhdGUgPSB0b19zdGF0ZTsKIAogb3V0OgotCXVwKCZtZW0tPnN0YXRlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZtZW0tPnN0YXRlX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDEsMTAgKzMzNCwxMCBAQAogCiAJbWVtLT5waHlzX2luZGV4ID0gX19zZWN0aW9uX25yKHNlY3Rpb24pOwogCW1lbS0+c3RhdGUgPSBzdGF0ZTsKLQlpbml0X01VVEVYKCZtZW0tPnN0YXRlX3NlbSk7CisJbXV0ZXhfaW5pdCgmbWVtLT5zdGF0ZV9tdXRleCk7CiAJbWVtLT5waHlzX2RldmljZSA9IHBoeXNfZGV2aWNlOwogCi0JcmV0ID0gcmVnaXN0ZXJfbWVtb3J5KG1lbSwgc2VjdGlvbiwgTlVMTCk7CisJcmV0ID0gcmVnaXN0ZXJfbWVtb3J5KG1lbSwgc2VjdGlvbik7CiAJaWYgKCFyZXQpCiAJCXJldCA9IG1lbV9jcmVhdGVfc2ltcGxlX2ZpbGUobWVtLCBwaHlzX2luZGV4KTsKIAlpZiAoIXJldCkKQEAgLTM5NSw3ICszODgsNyBAQAogCW1lbV9yZW1vdmVfc2ltcGxlX2ZpbGUobWVtLCBwaHlzX2luZGV4KTsKIAltZW1fcmVtb3ZlX3NpbXBsZV9maWxlKG1lbSwgc3RhdGUpOwogCW1lbV9yZW1vdmVfc2ltcGxlX2ZpbGUobWVtLCBwaHlzX2RldmljZSk7Ci0JdW5yZWdpc3Rlcl9tZW1vcnkobWVtLCBzZWN0aW9uLCBOVUxMKTsKKwl1bnJlZ2lzdGVyX21lbW9yeShtZW0sIHNlY3Rpb24pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTEsNiArNDQ0LDYgQEAKIAkJcmV0ID0gZXJyOwogb3V0OgogCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQ6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJldCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggZTU5ODYxZi4uMTJmZGUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0xOSwyMSArMTksMzQgQEAKIH07CiAKIAotc3RhdGljIHNzaXplX3Qgbm9kZV9yZWFkX2NwdW1hcChzdHJ1Y3Qgc3lzX2RldmljZSAqIGRldiwgY2hhciAqIGJ1ZikKK3N0YXRpYyBzc2l6ZV90IG5vZGVfcmVhZF9jcHVtYXAoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgaW50IHR5cGUsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgbm9kZSAqbm9kZV9kZXYgPSB0b19ub2RlKGRldik7Ci0JY3B1bWFza190IG1hc2sgPSBub2RlX3RvX2NwdW1hc2sobm9kZV9kZXYtPnN5c2Rldi5pZCk7CisJbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBub2RlX2Rldi0+c3lzZGV2LmlkKTsKIAlpbnQgbGVuOwogCi0JLyogMjAwNC8wNi8wMzogYnVmIGN1cnJlbnRseSBQQUdFX1NJWkUsIG5lZWQgPiAxIGNoYXIgcGVyIDQgYml0cy4gKi8KLQlCVUlMRF9CVUdfT04oTUFYX05VTU5PREVTLzQgPiBQQUdFX1NJWkUvMik7CisJLyogMjAwOC8wNC8wNzogYnVmIGN1cnJlbnRseSBQQUdFX1NJWkUsIG5lZWQgOSBjaGFycyBwZXIgMzIgYml0cy4gKi8KKwlCVUlMRF9CVUdfT04oKE5SX0NQVVMvMzIgKiA5KSA+IChQQUdFX1NJWkUtMSkpOwogCi0JbGVuID0gY3B1bWFza19zY25wcmludGYoYnVmLCBQQUdFX1NJWkUtMSwgbWFzayk7Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG4iKTsKKwlsZW4gPSB0eXBlPworCQljcHVsaXN0X3NjbnByaW50ZihidWYsIFBBR0VfU0laRS0yLCAqbWFzayk6CisJCWNwdW1hc2tfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLTIsICptYXNrKTsKKyAJYnVmW2xlbisrXSA9ICdcbic7CisgCWJ1ZltsZW5dID0gJ1wwJzsKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgU1lTREVWX0FUVFIoY3B1bWFwLCBTX0lSVUdPLCBub2RlX3JlYWRfY3B1bWFwLCBOVUxMKTsKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBub2RlX3JlYWRfY3B1bWFzayhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJcmV0dXJuIG5vZGVfcmVhZF9jcHVtYXAoZGV2LCAwLCBidWYpOworfQorc3RhdGljIGlubGluZSBzc2l6ZV90IG5vZGVfcmVhZF9jcHVsaXN0KHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gbm9kZV9yZWFkX2NwdW1hcChkZXYsIDEsIGJ1Zik7Cit9CisKK3N0YXRpYyBTWVNERVZfQVRUUihjcHVtYXAsICBTX0lSVUdPLCBub2RlX3JlYWRfY3B1bWFzaywgTlVMTCk7CitzdGF0aWMgU1lTREVWX0FUVFIoY3B1bGlzdCwgU19JUlVHTywgbm9kZV9yZWFkX2NwdWxpc3QsIE5VTEwpOwogCiAjZGVmaW5lIEsoeCkgKCh4KSA8PCAoUEFHRV9TSElGVCAtIDEwKSkKIHN0YXRpYyBzc2l6ZV90IG5vZGVfcmVhZF9tZW1pbmZvKHN0cnVjdCBzeXNfZGV2aWNlICogZGV2LCBjaGFyICogYnVmKQpAQCAtMTQ5LDYgKzE2Miw3IEBACiAKIAlpZiAoIWVycm9yKXsKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX2NwdW1hcCk7CisJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9jcHVsaXN0KTsKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX21lbWluZm8pOwogCQlzeXNkZXZfY3JlYXRlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbnVtYXN0YXQpOwogCQlzeXNkZXZfY3JlYXRlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfZGlzdGFuY2UpOwpAQCAtMTY2LDYgKzE4MCw3IEBACiB2b2lkIHVucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkKIHsKIAlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfY3B1bWFwKTsKKwlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfY3B1bGlzdCk7CiAJc3lzZGV2X3JlbW92ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX21lbWluZm8pOwogCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9udW1hc3RhdCk7CiAJc3lzZGV2X3JlbW92ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX2Rpc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggZWZhZjI4Mi4uOTExZWM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTY0OCw3ICs2NDgsNyBAQAogCQloaWdoX3RvdGFscmFtICs9IGhpZ2hfdG90YWxyYW0gLSAxOwogCQltYXNrID0gKCgodTY0KWhpZ2hfdG90YWxyYW0pIDw8IDMyKSArIDB4ZmZmZmZmZmY7CiAJfQotCXJldHVybiBtYXNrICYgKmRldi0+ZG1hX21hc2s7CisJcmV0dXJuIG1hc2s7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbWFfZ2V0X3JlcXVpcmVkX21hc2spOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCBiZGMwM2Y3Li5jNDU2OGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTQ4LDI5ICs0OCw0MiBAQAogICovCiAKIExJU1RfSEVBRChkcG1fYWN0aXZlKTsKLXN0YXRpYyBMSVNUX0hFQUQoZHBtX2xvY2tlZCk7CiBzdGF0aWMgTElTVF9IRUFEKGRwbV9vZmYpOwogc3RhdGljIExJU1RfSEVBRChkcG1fb2ZmX2lycSk7Ci1zdGF0aWMgTElTVF9IRUFEKGRwbV9kZXN0cm95KTsKIAogc3RhdGljIERFRklORV9NVVRFWChkcG1fbGlzdF9tdHgpOwogCi1zdGF0aWMgREVDTEFSRV9SV1NFTShwbV9zbGVlcF9yd3NlbSk7Ci0KLWludCAoKnBsYXRmb3JtX2VuYWJsZV93YWtldXApKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlzX29uKTsKKy8qICd0cnVlJyBpZiBhbGwgZGV2aWNlcyBoYXZlIGJlZW4gc3VzcGVuZGVkLCBwcm90ZWN0ZWQgYnkgZHBtX2xpc3RfbXR4ICovCitzdGF0aWMgYm9vbCBhbGxfc2xlZXBpbmc7CiAKIC8qKgogICoJZGV2aWNlX3BtX2FkZCAtIGFkZCBhIGRldmljZSB0byB0aGUgbGlzdCBvZiBhY3RpdmUgZGV2aWNlcwogICoJQGRldjoJRGV2aWNlIHRvIGJlIGFkZGVkIHRvIHRoZSBsaXN0CiAgKi8KLXZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJaW50IGVycm9yID0gMDsKKwogCXByX2RlYnVnKCJQTTogQWRkaW5nIGluZm8gZm9yICVzOiVzXG4iLAogCQkgZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAogCQkga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCWxpc3RfYWRkX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fYWN0aXZlKTsKKwlpZiAoKGRldi0+cGFyZW50ICYmIGRldi0+cGFyZW50LT5wb3dlci5zbGVlcGluZykgfHwgYWxsX3NsZWVwaW5nKSB7CisJCWlmIChkZXYtPnBhcmVudC0+cG93ZXIuc2xlZXBpbmcpCisJCQlkZXZfd2FybihkZXYsCisJCQkJInBhcmVudCAlcyBpcyBzbGVlcGluZywgd2lsbCBub3QgYWRkXG4iLAorCQkJCWRldi0+cGFyZW50LT5idXNfaWQpOworCQllbHNlCisJCQlkZXZfd2FybihkZXYsICJkZXZpY2VzIGFyZSBzbGVlcGluZywgd2lsbCBub3QgYWRkXG4iKTsKKwkJV0FSTl9PTih0cnVlKTsKKwkJZXJyb3IgPSAtRUJVU1k7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBkcG1fc3lzZnNfYWRkKGRldik7CisJCWlmICghZXJyb3IpCisJCQlsaXN0X2FkZF90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2FjdGl2ZSk7CisJfQogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgpAQCAtODEsMjggKzk0LDYgQEAKICAqLwogdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQkvKgotCSAqIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBhIHN1c3BlbmQsIGl0IHdpbGwgYmUgYmxvY2tlZCwKLQkgKiBiZWNhdXNlIHdlJ3JlIGhvbGRpbmcgdGhlIGRldmljZSdzIHNlbWFwaG9yZSBhdCB0aGF0IHRpbWUsIHdoaWNoIG1heQotCSAqIGxlYWQgdG8gYSBkZWFkbG9jay4gIEluIHRoYXQgY2FzZSB3ZSB3YW50IHRvIHByaW50IGEgd2FybmluZy4KLQkgKiBIb3dldmVyLCBpdCBtYXkgYWxzbyBiZSBjYWxsZWQgYnkgdW5yZWdpc3Rlcl9kcm9wcGVkX2RldmljZXMoKSB3aXRoCi0JICogdGhlIGRldmljZSdzIHNlbWFwaG9yZSByZWxlYXNlZCwgaW4gd2hpY2ggY2FzZSB0aGUgd2FybmluZyBzaG91bGQKLQkgKiBub3QgYmUgcHJpbnRlZC4KLQkgKi8KLQlpZiAoZG93bl90cnlsb2NrKCZkZXYtPnNlbSkpIHsKLQkJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZwbV9zbGVlcF9yd3NlbSkpIHsKLQkJCS8qIE5vIHN1c3BlbmQgaW4gcHJvZ3Jlc3MsIHdhaXQgb24gZGV2LT5zZW0gKi8KLQkJCWRvd24oJmRldi0+c2VtKTsKLQkJCXVwX3JlYWQoJnBtX3NsZWVwX3J3c2VtKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFN1c3BlbmQgaW4gcHJvZ3Jlc3MsIHdlIG1heSBkZWFkbG9jayAqLwotCQkJZGV2X3dhcm4oZGV2LCAiU3VzcGljaW91cyAlcyBkdXJpbmcgc3VzcGVuZFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18pOwotCQkJZHVtcF9zdGFjaygpOwotCQkJLyogVGhlIHVzZXIgaGFzIGJlZW4gd2FybmVkIC4uLiAqLwotCQkJZG93bigmZGV2LT5zZW0pOwotCQl9Ci0JfQogCXByX2RlYnVnKCJQTTogUmVtb3ZpbmcgaW5mbyBmb3IgJXM6JXNcbiIsCiAJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCiAJCSBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOwpAQCAtMTEwLDUzICsxMDEsOCBAQAogCWRwbV9zeXNmc19yZW1vdmUoZGV2KTsKIAlsaXN0X2RlbF9pbml0KCZkZXYtPnBvd2VyLmVudHJ5KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7Ci0JdXAoJmRldi0+c2VtKTsKIH0KIAotLyoqCi0gKglkZXZpY2VfcG1fc2NoZWR1bGVfcmVtb3ZhbCAtIHNjaGVkdWxlIHRoZSByZW1vdmFsIG9mIGEgc3VzcGVuZGVkIGRldmljZQotICoJQGRldjoJRGV2aWNlIHRvIGRlc3Ryb3kKLSAqCi0gKglNb3ZlcyB0aGUgZGV2aWNlIHRvIHRoZSBkcG1fZGVzdHJveSBsaXN0IGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgYnkKLSAqCXVucmVnaXN0ZXJfZHJvcHBlZF9kZXZpY2VzKCkuCi0gKi8KLXZvaWQgZGV2aWNlX3BtX3NjaGVkdWxlX3JlbW92YWwoc3RydWN0IGRldmljZSAqZGV2KQotewotCXByX2RlYnVnKCJQTTogUHJlcGFyaW5nIGZvciByZW1vdmFsOiAlczolc1xuIiwKLQkJZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAotCQlrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOwotCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7Ci0JbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fZGVzdHJveSk7Ci0JbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3BtX3NjaGVkdWxlX3JlbW92YWwpOwotCi0vKioKLSAqCXBtX3NsZWVwX2xvY2sgLSBtdXR1YWwgZXhjbHVzaW9uIGZvciByZWdpc3RyYXRpb24gYW5kIHN1c3BlbmQKLSAqCi0gKglSZXR1cm5zIDAgaWYgbm8gc3VzcGVuZCBpcyB1bmRlcndheSBhbmQgZGV2aWNlIHJlZ2lzdHJhdGlvbgotICoJbWF5IHByb2NlZWQsIG90aGVyd2lzZSAtRUJVU1kuCi0gKi8KLWludCBwbV9zbGVlcF9sb2NrKHZvaWQpCi17Ci0JaWYgKGRvd25fcmVhZF90cnlsb2NrKCZwbV9zbGVlcF9yd3NlbSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIC1FQlVTWTsKLX0KLQotLyoqCi0gKglwbV9zbGVlcF91bmxvY2sgLSBtdXR1YWwgZXhjbHVzaW9uIGZvciByZWdpc3RyYXRpb24gYW5kIHN1c3BlbmQKLSAqCi0gKglUaGlzIHJvdXRpbmUgdW5kb2VzIHRoZSBlZmZlY3Qgb2YgZGV2aWNlX3BtX2FkZF9sb2NrCi0gKgl3aGVuIGEgZGV2aWNlJ3MgcmVnaXN0cmF0aW9uIGlzIGNvbXBsZXRlLgotICovCi12b2lkIHBtX3NsZWVwX3VubG9jayh2b2lkKQotewotCXVwX3JlYWQoJnBtX3NsZWVwX3J3c2VtKTsKLX0KLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzdW1lIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKioKQEAgLTIzMCw2ICsxNzYsOCBAQAogCVRSQUNFX0RFVklDRShkZXYpOwogCVRSQUNFX1JFU1VNRSgwKTsKIAorCWRvd24oJmRldi0+c2VtKTsKKwogCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cmVzdW1lKSB7CiAJCWRldl9kYmcoZGV2LCJyZXN1bWluZ1xuIik7CiAJCWVycm9yID0gZGV2LT5idXMtPnJlc3VtZShkZXYpOwpAQCAtMjQ1LDYgKzE5Myw4IEBACiAJCWVycm9yID0gZGV2LT5jbGFzcy0+cmVzdW1lKGRldik7CiAJfQogCisJdXAoJmRldi0+c2VtKTsKKwogCVRSQUNFX1JFU1VNRShlcnJvcik7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjYyLDExICsyMTIsMTMgQEAKIHN0YXRpYyB2b2lkIGRwbV9yZXN1bWUodm9pZCkKIHsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOworCWFsbF9zbGVlcGluZyA9IGZhbHNlOwogCXdoaWxlKCFsaXN0X2VtcHR5KCZkcG1fb2ZmKSkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IGRwbV9vZmYubmV4dDsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGVudHJ5KTsKIAotCQlsaXN0X21vdmVfdGFpbChlbnRyeSwgJmRwbV9sb2NrZWQpOworCQlsaXN0X21vdmVfdGFpbChlbnRyeSwgJmRwbV9hY3RpdmUpOworCQlkZXYtPnBvd2VyLnNsZWVwaW5nID0gZmFsc2U7CiAJCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJcmVzdW1lX2RldmljZShkZXYpOwogCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwpAQCAtMjc1LDQ2ICsyMjcsNiBAQAogfQogCiAvKioKLSAqCXVubG9ja19hbGxfZGV2aWNlcyAtIFJlbGVhc2UgZWFjaCBkZXZpY2UncyBzZW1hcGhvcmUKLSAqCi0gKglHbyB0aHJvdWdoIHRoZSBkcG1fb2ZmIGxpc3QuICBQdXQgZWFjaCBkZXZpY2Ugb24gdGhlIGRwbV9hY3RpdmUKLSAqCWxpc3QgYW5kIHVubG9jayBpdC4KLSAqLwotc3RhdGljIHZvaWQgdW5sb2NrX2FsbF9kZXZpY2VzKHZvaWQpCi17Ci0JbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9sb2NrZWQpKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gZHBtX2xvY2tlZC5wcmV2OwotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZW50cnkpOwotCi0JCWxpc3RfbW92ZShlbnRyeSwgJmRwbV9hY3RpdmUpOwotCQl1cCgmZGV2LT5zZW0pOwotCX0KLQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7Ci19Ci0KLS8qKgotICoJdW5yZWdpc3Rlcl9kcm9wcGVkX2RldmljZXMgLSBVbnJlZ2lzdGVyIGRldmljZXMgc2NoZWR1bGVkIGZvciByZW1vdmFsCi0gKgotICoJVW5yZWdpc3RlciBhbGwgZGV2aWNlcyBvbiB0aGUgZHBtX2Rlc3Ryb3kgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9kcm9wcGVkX2RldmljZXModm9pZCkKLXsKLQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2Rlc3Ryb3kpKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gZHBtX2Rlc3Ryb3kubmV4dDsKLQkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGVudHJ5KTsKLQotCQl1cCgmZGV2LT5zZW0pOwotCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7Ci0JCS8qIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBkZXZpY2UgZnJvbSB0aGUgbGlzdCAqLwotCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwotCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCX0KLQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7Ci19Ci0KLS8qKgogICoJZGV2aWNlX3Jlc3VtZSAtIFJlc3RvcmUgc3RhdGUgb2YgZWFjaCBkZXZpY2UgaW4gc3lzdGVtLgogICoKICAqCVJlc3VtZSBhbGwgdGhlIGRldmljZXMsIHVubG9jayB0aGVtIGFsbCwgYW5kIGFsbG93IG5ldwpAQCAtMzI0LDkgKzIzNiw2IEBACiB7CiAJbWlnaHRfc2xlZXAoKTsKIAlkcG1fcmVzdW1lKCk7Ci0JdW5sb2NrX2FsbF9kZXZpY2VzKCk7Ci0JdW5yZWdpc3Rlcl9kcm9wcGVkX2RldmljZXMoKTsKLQl1cF93cml0ZSgmcG1fc2xlZXBfcndzZW0pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3Jlc3VtZSk7CiAKQEAgLTM4OCwxOCArMjk3LDE1IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gZHBtX29mZi5wcmV2OwogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZW50cnkpOwogCi0JCWxpc3RfZGVsX2luaXQoJmRldi0+cG93ZXIuZW50cnkpOwogCQllcnJvciA9IHN1c3BlbmRfZGV2aWNlX2xhdGUoZGV2LCBzdGF0ZSk7CiAJCWlmIChlcnJvcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcG93ZXIgZG93biBkZXZpY2UgJXM6ICIKIAkJCQkJImVycm9yICVkXG4iLAogCQkJCQlrb2JqZWN0X25hbWUoJmRldi0+a29iaiksIGVycm9yKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZkZXYtPnBvd2VyLmVudHJ5KSkKLQkJCQlsaXN0X2FkZCgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9vZmYpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQotCQkJbGlzdF9hZGQoJmRldi0+cG93ZXIuZW50cnksICZkcG1fb2ZmX2lycSk7CisJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpCisJCQlsaXN0X21vdmUoJmRldi0+cG93ZXIuZW50cnksICZkcG1fb2ZmX2lycSk7CiAJfQogCiAJaWYgKCFlcnJvcikKQEAgLTQxNSwxNCArMzIxLDExIEBACiAgKglAZGV2OglEZXZpY2UuCiAgKglAc3RhdGU6CVBvd2VyIHN0YXRlIGRldmljZSBpcyBlbnRlcmluZy4KICAqLwotaW50IHN1c3BlbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzdXNwZW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQpIHsKLQkJZGV2X2RiZyhkZXYsICJQTTogc3VzcGVuZCAlZC0tPiVkXG4iLAotCQkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCwgc3RhdGUuZXZlbnQpOwotCX0KKwlkb3duKCZkZXYtPnNlbSk7CiAKIAlpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5zdXNwZW5kKSB7CiAJCXN1c3BlbmRfZGV2aWNlX2RiZyhkZXYsIHN0YXRlLCAiY2xhc3MgIik7CkBAIC00NDEsNiArMzQ0LDkgQEAKIAkJZXJyb3IgPSBkZXYtPmJ1cy0+c3VzcGVuZChkZXYsIHN0YXRlKTsKIAkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+YnVzLT5zdXNwZW5kLCBlcnJvcik7CiAJfQorCisJdXAoJmRldi0+c2VtKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDYxLDEzICszNjcsMTYgQEAKIAlpbnQgZXJyb3IgPSAwOwogCiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9sb2NrZWQpKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gZHBtX2xvY2tlZC5wcmV2OworCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2FjdGl2ZSkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqZW50cnkgPSBkcG1fYWN0aXZlLnByZXY7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShlbnRyeSk7CiAKLQkJbGlzdF9kZWxfaW5pdCgmZGV2LT5wb3dlci5lbnRyeSk7CisJCVdBUk5fT04oZGV2LT5wYXJlbnQgJiYgZGV2LT5wYXJlbnQtPnBvd2VyLnNsZWVwaW5nKTsKKworCQlkZXYtPnBvd2VyLnNsZWVwaW5nID0gdHJ1ZTsKIAkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQllcnJvciA9IHN1c3BlbmRfZGV2aWNlKGRldiwgc3RhdGUpOworCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHN1c3BlbmQgZGV2aWNlICVzOiAiCiAJCQkJCSJlcnJvciAlZCVzXG4iLApAQCAtNDc2LDUzICszODUsMjIgQEAKIAkJCQkJKGVycm9yID09IC1FQUdBSU4gPwogCQkJCQkiIChwbGVhc2UgY29udmVydCB0byBzdXNwZW5kX2xhdGUpIiA6CiAJCQkJCSIiKSk7Ci0JCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCQkJaWYgKGxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQotCQkJCWxpc3RfYWRkKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2xvY2tlZCk7Ci0JCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CisJCQlkZXYtPnBvd2VyLnNsZWVwaW5nID0gZmFsc2U7CiAJCQlicmVhazsKIAkJfQotCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpCi0JCQlsaXN0X2FkZCgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9vZmYpOworCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQorCQkJbGlzdF9tb3ZlKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX29mZik7CiAJfQorCWlmICghZXJyb3IpCisJCWFsbF9zbGVlcGluZyA9IHRydWU7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCiAJcmV0dXJuIGVycm9yOwogfQogCiAvKioKLSAqCWxvY2tfYWxsX2RldmljZXMgLSBBY3F1aXJlIGV2ZXJ5IGRldmljZSdzIHNlbWFwaG9yZQotICoKLSAqCUdvIHRocm91Z2ggdGhlIGRwbV9hY3RpdmUgbGlzdC4gQ2FyZWZ1bGx5IGxvY2sgZWFjaCBkZXZpY2UncwotICoJc2VtYXBob3JlIGFuZCBwdXQgaXQgaW4gb24gdGhlIGRwbV9sb2NrZWQgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgbG9ja19hbGxfZGV2aWNlcyh2b2lkKQotewotCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fYWN0aXZlKSkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IGRwbV9hY3RpdmUubmV4dDsKLQkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGVudHJ5KTsKLQotCQkvKiBSZXF1aXJlZCBsb2NraW5nIG9yZGVyIGlzIGRldi0+c2VtIGZpcnN0LAotCQkgKiB0aGVuIGRwbV9saXN0X211dGV4LiAgSGVuY2UgdGhpcyBhd2t3YXJkIGNvZGUuCi0JCSAqLwotCQlnZXRfZGV2aWNlKGRldik7Ci0JCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKLQkJZG93bigmZGV2LT5zZW0pOwotCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCi0JCWlmIChsaXN0X2VtcHR5KGVudHJ5KSkKLQkJCXVwKCZkZXYtPnNlbSk7CQkvKiBEZXZpY2Ugd2FzIHJlbW92ZWQgKi8KLQkJZWxzZQotCQkJbGlzdF9tb3ZlX3RhaWwoZW50cnksICZkcG1fbG9ja2VkKTsKLQkJcHV0X2RldmljZShkZXYpOwotCX0KLQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7Ci19Ci0KLS8qKgogICoJZGV2aWNlX3N1c3BlbmQgLSBTYXZlIHN0YXRlIGFuZCBzdG9wIGFsbCBkZXZpY2VzIGluIHN5c3RlbS4KKyAqCUBzdGF0ZTogbmV3IHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUKICAqCiAgKglQcmV2ZW50IG5ldyBkZXZpY2VzIGZyb20gYmVpbmcgcmVnaXN0ZXJlZCwgdGhlbiBsb2NrIGFsbCBkZXZpY2VzCiAgKglhbmQgc3VzcGVuZCB0aGVtLgpAQCAtNTMyLDggKzQxMCw2IEBACiAJaW50IGVycm9yOwogCiAJbWlnaHRfc2xlZXAoKTsKLQlkb3duX3dyaXRlKCZwbV9zbGVlcF9yd3NlbSk7Ci0JbG9ja19hbGxfZGV2aWNlcygpOwogCWVycm9yID0gZHBtX3N1c3BlbmQoc3RhdGUpOwogCWlmIChlcnJvcikKIAkJZGV2aWNlX3Jlc3VtZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAppbmRleCBlMzJkM2JkLi5hNjg5NGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaApAQCAtMTEsMzAgKzExLDEzIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IGRldmljZSwgcG93ZXIuZW50cnkpOwogfQogCi1leHRlcm4gdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gaW50IGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKLWV4dGVybiBpbnQgcG1fc2xlZXBfbG9jayh2b2lkKTsKLWV4dGVybiB2b2lkIHBtX3NsZWVwX3VubG9jayh2b2lkKTsKIAogI2Vsc2UgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLQotc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqZGV2KQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBtX3NsZWVwX2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBtX3NsZWVwX3VubG9jayh2b2lkKQotewotfQorc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKaW5kZXggZjJlZDE3OS4uZDExZjc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKQEAgLTYsNiArNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSAicG93ZXIuaCIKIAoraW50ICgqcGxhdGZvcm1fZW5hYmxlX3dha2V1cCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfb24pOworCiAKIC8qCiAgKgl3YWtldXAgLSBSZXBvcnQvY2hhbmdlIGN1cnJlbnQgd2FrZXVwIG9wdGlvbiBmb3IgZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggMmY3OWM1NS4uNGZiYjU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMTMzLDYgKzEzMyw3IEBACiAJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLAogCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwogCUlOSVRfTElTVF9IRUFEKCZjbHMtPmRyaXZlcnMpOworCW1lbXNldCgmY2xzLT5rc2V0LmtvYmosIDB4MDAsIHNpemVvZihzdHJ1Y3Qga29iamVjdCkpOwogCWNscy0+a3NldC5rb2JqLnBhcmVudCA9ICZzeXN0ZW1fa3NldC0+a29iajsKIAljbHMtPmtzZXQua29iai5rdHlwZSA9ICZrdHlwZV9zeXNkZXZfY2xhc3M7CiAJY2xzLT5rc2V0LmtvYmoua3NldCA9IHN5c3RlbV9rc2V0OwpAQCAtMTY2LDYgKzE2NywyMiBAQAogewogCWludCBlcnIgPSAwOwogCisJaWYgKCFjbHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZGV2OiBpbnZhbGlkIGNsYXNzIHBhc3NlZCB0byAiCisJCQkic3lzZGV2X2RyaXZlcl9yZWdpc3RlciFcbiIpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayB3aGV0aGVyIHRoaXMgZHJpdmVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYSBjbGFzcy4gKi8KKwlpZiAoKGRydi0+ZW50cnkubmV4dCAhPSBkcnYtPmVudHJ5LnByZXYpIHx8CisJICAgIChkcnYtPmVudHJ5Lm5leHQgIT0gTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZGV2OiBjbGFzcyAlczogZHJpdmVyICglcCkgaGFzIGFscmVhZHkiCisJCQkiIGJlZW4gcmVnaXN0ZXJlZCB0byBhIGNsYXNzLCBzb21ldGhpbmcgaXMgd3JvbmcsIGJ1dCAiCisJCQkid2lsbCBmb3JnZSBvbiFcbiIsIGNscy0+bmFtZSwgZHJ2KTsKKwkJV0FSTl9PTigxKTsKKwl9CisKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlpZiAoY2xzICYmIGtzZXRfZ2V0KCZjbHMtPmtzZXQpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJmRydi0+ZW50cnksICZjbHMtPmRyaXZlcnMpOwpAQCAtMTc4LDcgKzE5NSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQllcnIgPSAtRUlOVkFMOwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGRldmljZSBjbGFzc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBkZXZpY2UgY2xhc3NcbiIsIF9fZnVuY19fKTsKIAkJV0FSTl9PTigxKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKQEAgLTIyNyw2ICsyNDQsOSBAQAogCiAJcHJfZGVidWcoIlJlZ2lzdGVyaW5nIHN5cyBkZXZpY2UgJyVzJ1xuIiwga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKIAorCS8qIGluaXRpYWxpemUgdGhlIGtvYmplY3QgdG8gMCwgaW4gY2FzZSBpdCBoYWQgcHJldmlvdXNseSBiZWVuIHVzZWQgKi8KKwltZW1zZXQoJnN5c2Rldi0+a29iaiwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSk7CisKIAkvKiBNYWtlIHN1cmUgdGhlIGtzZXQgaXMgc2V0ICovCiAJc3lzZGV2LT5rb2JqLmtzZXQgPSAmY2xzLT5rc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYyBiL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCmluZGV4IGUxZDNhZDRkLi5mZGY0MDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYworKysgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwpAQCAtNDAsMTUgKzQwLDM4IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRvcG9sb2d5XyMjbmFtZShjcHUpKTsJXAogfQogCi0jZGVmaW5lIGRlZmluZV9zaWJsaW5nc19zaG93X2Z1bmMobmFtZSkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCVwKLXsJCQkJCQkJCQlcCi0Jc3NpemVfdCBsZW4gPSAtMTsJCQkJCQlcCi0JdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCQlcCi0JbGVuID0gY3B1bWFza19zY25wcmludGYoYnVmLCBOUl9DUFVTKzEsIHRvcG9sb2d5XyMjbmFtZShjcHUpKTsJXAotCXJldHVybiAobGVuICsgc3ByaW50ZihidWYgKyBsZW4sICJcbiIpKTsJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93X2NwdW1hcChpbnQgdHlwZSwgY3B1bWFza190ICptYXNrLCBjaGFyICpidWYpCit7CisJcHRyZGlmZl90IGxlbiA9IFBUUl9BTElHTihidWYgKyBQQUdFX1NJWkUgLSAxLCBQQUdFX1NJWkUpIC0gYnVmOworCWludCBuID0gMDsKKworCWlmIChsZW4gPiAxKSB7CisJCW4gPSB0eXBlPworCQkJY3B1bGlzdF9zY25wcmludGYoYnVmLCBsZW4tMiwgKm1hc2spOgorCQkJY3B1bWFza19zY25wcmludGYoYnVmLCBsZW4tMiwgKm1hc2spOworCQlidWZbbisrXSA9ICdcbic7CisJCWJ1ZltuXSA9ICdcMCc7CisJfQorCXJldHVybiBuOwogfQogCisjZGVmaW5lIGRlZmluZV9zaWJsaW5nc19zaG93X21hcChuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgY3B1ID0gZGV2LT5pZDsJCQkJCVwKKwlyZXR1cm4gc2hvd19jcHVtYXAoMCwgJih0b3BvbG9neV8jI25hbWUoY3B1KSksIGJ1Zik7CQlcCit9CisKKyNkZWZpbmUgZGVmaW5lX3NpYmxpbmdzX3Nob3dfbGlzdChuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSBzc2l6ZV90IHNob3dfIyNuYW1lIyNfbGlzdChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpIFwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCQlcCisJcmV0dXJuIHNob3dfY3B1bWFwKDEsICYodG9wb2xvZ3lfIyNuYW1lKGNwdSkpLCBidWYpOwkJXAorfQorCisjZGVmaW5lIGRlZmluZV9zaWJsaW5nc19zaG93X2Z1bmMobmFtZSkJCVwKKwlkZWZpbmVfc2libGluZ3Nfc2hvd19tYXAobmFtZSk7IGRlZmluZV9zaWJsaW5nc19zaG93X2xpc3QobmFtZSkKKwogI2lmZGVmCXRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQKIGRlZmluZV9pZF9zaG93X2Z1bmMocGh5c2ljYWxfcGFja2FnZV9pZCk7CiBkZWZpbmVfb25lX3JvKHBoeXNpY2FsX3BhY2thZ2VfaWQpOwpAQCAtNjgsNyArOTEsOSBAQAogI2lmZGVmIHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncwogZGVmaW5lX3NpYmxpbmdzX3Nob3dfZnVuYyh0aHJlYWRfc2libGluZ3MpOwogZGVmaW5lX29uZV9ybyh0aHJlYWRfc2libGluZ3MpOwotI2RlZmluZSByZWZfdGhyZWFkX3NpYmxpbmdzX2F0dHIJJmF0dHJfdGhyZWFkX3NpYmxpbmdzLmF0dHIsCitkZWZpbmVfb25lX3JvKHRocmVhZF9zaWJsaW5nc19saXN0KTsKKyNkZWZpbmUgcmVmX3RocmVhZF9zaWJsaW5nc19hdHRyCVwKKwkJJmF0dHJfdGhyZWFkX3NpYmxpbmdzLmF0dHIsICZhdHRyX3RocmVhZF9zaWJsaW5nc19saXN0LmF0dHIsCiAjZWxzZQogI2RlZmluZSByZWZfdGhyZWFkX3NpYmxpbmdzX2F0dHIKICNlbmRpZgpAQCAtNzYsNyArMTAxLDkgQEAKICNpZmRlZiB0b3BvbG9neV9jb3JlX3NpYmxpbmdzCiBkZWZpbmVfc2libGluZ3Nfc2hvd19mdW5jKGNvcmVfc2libGluZ3MpOwogZGVmaW5lX29uZV9ybyhjb3JlX3NpYmxpbmdzKTsKLSNkZWZpbmUgcmVmX2NvcmVfc2libGluZ3NfYXR0cgkJJmF0dHJfY29yZV9zaWJsaW5ncy5hdHRyLAorZGVmaW5lX29uZV9ybyhjb3JlX3NpYmxpbmdzX2xpc3QpOworI2RlZmluZSByZWZfY29yZV9zaWJsaW5nc19hdHRyCQlcCisJCSZhdHRyX2NvcmVfc2libGluZ3MuYXR0ciwgJmF0dHJfY29yZV9zaWJsaW5nc19saXN0LmF0dHIsCiAjZWxzZQogI2RlZmluZSByZWZfY29yZV9zaWJsaW5nc19hdHRyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS90cmFuc3BvcnRfY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS90cmFuc3BvcnRfY2xhc3MuYwppbmRleCBmMjVlN2M2Li44NDk5N2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvdHJhbnNwb3J0X2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL3RyYW5zcG9ydF9jbGFzcy5jCkBAIC02Niw3ICs2Niw3IEBACiAKIHN0YXRpYyBpbnQgYW5vbl90cmFuc3BvcnRfZHVtbXlfZnVuY3Rpb24oc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLAogCQkJCQkgc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgc3RydWN0IGNsYXNzX2RldmljZSAqY2RldikKKwkJCQkJIHN0cnVjdCBkZXZpY2UgKmNkZXYpCiB7CiAJLyogZG8gbm90aGluZyAqLwogCXJldHVybiAwOwpAQCAtMTA4LDEzICsxMDgsMTQgQEAKICAqLwogdm9pZCBhbm9uX3RyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKHN0cnVjdCBhbm9uX3RyYW5zcG9ydF9jbGFzcyAqYXRjKQogewotCWF0dHJpYnV0ZV9jb250YWluZXJfdW5yZWdpc3RlcigmYXRjLT5jb250YWluZXIpOworCWlmICh1bmxpa2VseShhdHRyaWJ1dGVfY29udGFpbmVyX3VucmVnaXN0ZXIoJmF0Yy0+Y29udGFpbmVyKSkpCisJCUJVRygpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYW5vbl90cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3Rlcik7CiAKIHN0YXRpYyBpbnQgdHJhbnNwb3J0X3NldHVwX2NsYXNzZGV2KHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KQorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpjbGFzc2RldikKIHsKIAlzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzICp0Y2xhc3MgPSBjbGFzc190b190cmFuc3BvcnRfY2xhc3MoY29udC0+Y2xhc3MpOwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Y29udCA9IGF0dHJpYnV0ZV9jb250YWluZXJfdG9fdHJhbnNwb3J0X2NvbnRhaW5lcihjb250KTsKQEAgLTEyNiw5ICsxMjcsNyBAQAogfQogCiAvKioKLSAqIHRyYW5zcG9ydF9zZXR1cF9kZXZpY2UgLSBkZWNsYXJlIGEgbmV3IGRldiBmb3IgdHJhbnNwb3J0IGNsYXNzIGFzc29jaWF0aW9uCi0gKgkJCSAgICBidXQgZG9uJ3QgbWFrZSBpdCB2aXNpYmxlIHlldC4KLSAqCisgKiB0cmFuc3BvcnRfc2V0dXBfZGV2aWNlIC0gZGVjbGFyZSBhIG5ldyBkZXYgZm9yIHRyYW5zcG9ydCBjbGFzcyBhc3NvY2lhdGlvbiBidXQgZG9uJ3QgbWFrZSBpdCB2aXNpYmxlIHlldC4KICAqIEBkZXY6IHRoZSBnZW5lcmljIGRldmljZSByZXByZXNlbnRpbmcgdGhlIGVudGl0eSBiZWluZyBhZGRlZAogICoKICAqIFVzdWFsbHksIGRldiByZXByZXNlbnRzIHNvbWUgY29tcG9uZW50IGluIHRoZSBIQkEgc3lzdGVtIChlaXRoZXIKQEAgLTE1MCw3ICsxNDksNyBAQAogCiBzdGF0aWMgaW50IHRyYW5zcG9ydF9hZGRfY2xhc3NfZGV2aWNlKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2RldikKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpjbGFzc2RldikKIHsKIAlpbnQgZXJyb3IgPSBhdHRyaWJ1dGVfY29udGFpbmVyX2FkZF9jbGFzc19kZXZpY2UoY2xhc3NkZXYpOwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Y29udCA9IApAQCAtMTgyLDcgKzE4MSw3IEBACiAKIHN0YXRpYyBpbnQgdHJhbnNwb3J0X2NvbmZpZ3VyZShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqY29udCwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGNsYXNzX2RldmljZSAqY2RldikKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCB0cmFuc3BvcnRfY2xhc3MgKnRjbGFzcyA9IGNsYXNzX3RvX3RyYW5zcG9ydF9jbGFzcyhjb250LT5jbGFzcyk7CiAJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjb250ID0gYXR0cmlidXRlX2NvbnRhaW5lcl90b190cmFuc3BvcnRfY29udGFpbmVyKGNvbnQpOwpAQCAtMjEzLDcgKzIxMiw3IEBACiAKIHN0YXRpYyBpbnQgdHJhbnNwb3J0X3JlbW92ZV9jbGFzc2RldihzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqY29udCwKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KQorCQkJCSAgICAgc3RydWN0IGRldmljZSAqY2xhc3NkZXYpCiB7CiAJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjb250ID0gCiAJCWF0dHJpYnV0ZV9jb250YWluZXJfdG9fdHJhbnNwb3J0X2NvbnRhaW5lcihjb250KTsKQEAgLTI1MiwxMiArMjUxLDEyIEBACiAKIHN0YXRpYyB2b2lkIHRyYW5zcG9ydF9kZXN0cm95X2NsYXNzZGV2KHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2RldikKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpjbGFzc2RldikKIHsKIAlzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzICp0Y2xhc3MgPSBjbGFzc190b190cmFuc3BvcnRfY2xhc3MoY29udC0+Y2xhc3MpOwogCiAJaWYgKHRjbGFzcy0+cmVtb3ZlICE9IGFub25fdHJhbnNwb3J0X2R1bW15X2Z1bmN0aW9uKQotCQljbGFzc19kZXZpY2VfcHV0KGNsYXNzZGV2KTsKKwkJcHV0X2RldmljZShjbGFzc2Rldik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IGI2ZDIzMGIuLjBkMWQyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTQ0LDE2ICs0NCw2IEBACiAJICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKQogCSAgZmxvcHB5IGNvbnRyb2xsZXIsIHNheSBZIGhlcmUuIE1vc3QgY29tbW9ubHkgZm91bmQgaW4gUG93ZXJNYWNzLgogCi1jb25maWcgQkxLX0RFVl9QUzIKLQl0cmlzdGF0ZSAiUFMvMiBFU0RJIGhhcmQgZGlzayBzdXBwb3J0IgotCWRlcGVuZHMgb24gTUNBICYmIE1DQV9MRUdBQ1kgJiYgQlJPS0VOCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBTLzIgbWFjaGluZSB3aXRoIGEgTUNBIGJ1cyBhbmQgYW4gRVNESQotCSAgaGFyZCBkaXNrLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwczJlc2RpLgotCiBjb25maWcgQU1JR0FfWjJSQU0KIAl0cmlzdGF0ZSAiQW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0IgogCWRlcGVuZHMgb24gWk9SUk8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCmluZGV4IDAxYzk3MjQuLjVlNTg0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNiBAQAogb2JqLSQoQ09ORklHX0FNSUdBX1oyUkFNKQkrPSB6MnJhbS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9SQU0pCSs9IGJyZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKQkrPSBsb29wLm8KLW9iai0kKENPTkZJR19CTEtfREVWX1BTMikJKz0gcHMyZXNkaS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9YRCkJKz0geGQubwogb2JqLSQoQ09ORklHX0JMS19DUFFfREEpCSs9IGNwcWFycmF5Lm8KIG9iai0kKENPTkZJR19CTEtfQ1BRX0NJU1NfREEpICArPSBjY2lzcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VuZXQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCmluZGV4IDg0NjBlZjcuLjE4ZDI0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAlzdHJ1Y3QgYW9lX2hkciAqaDsKIAl1MzIgbjsKIAotCWlmIChpZnAtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoaWZwKSAhPSAmaW5pdF9uZXQpCiAJCWdvdG8gZXhpdDsKIAogCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDk3MTViZTMuLmNmNjA4M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlIDxzY3NpL3NnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiAjZGVmaW5lIENDSVNTX0RSSVZFUl9WRVJTSU9OKG1haixtaW4sc3VibWluKSAoKG1hajw8MTYpfChtaW48PDgpfChzdWJtaW4pKQogI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgQ0lTUyBEcml2ZXIgKHYgMy42LjE0KSIKQEAgLTEzMSw3ICsxMzMsNiBAQAogLypkZWZpbmUgaG93IG1hbnkgdGltZXMgd2Ugd2lsbCB0cnkgYSBjb21tYW5kIGJlY2F1c2Ugb2YgYnVzIHJlc2V0cyAqLwogI2RlZmluZSBNQVhfQ01EX1JFVFJJRVMgMwogCi0jZGVmaW5lIFJFQURfQUhFQUQgCSAxMDI0CiAjZGVmaW5lIE1BWF9DVExSCTMyCiAKIC8qIE9yaWdpbmFsbHkgY2Npc3MgZHJpdmVyIG9ubHkgc3VwcG9ydHMgOCBtYWpvciBudW1iZXJzICovCkBAIC0xNzQsOCArMTc1LDYgQEAKIHN0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHModW5zaWduZWQgbG9uZyBjdGxyKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW50IGNjaXNzX3Byb2NfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgICBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgdm9pZCBjY2lzc19wcm9jaW5pdChpbnQgaSk7CiAjZWxzZQogc3RhdGljIHZvaWQgY2Npc3NfcHJvY2luaXQoaW50IGkpCkBAIC0yNDAsMjQgKzIzOSw0NiBAQAogICovCiAjZGVmaW5lIEVOR19HSUcgMTAwMDAwMDAwMAogI2RlZmluZSBFTkdfR0lHX0ZBQ1RPUiAoRU5HX0dJRy81MTIpCisjZGVmaW5lIEVOR0FHRV9TQ1NJCSJlbmdhZ2Ugc2NzaSIKIHN0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCiAJIlVOS05PV04iCiB9OwogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2NjaXNzOwogCi1zdGF0aWMgaW50IGNjaXNzX3Byb2NfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgICBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGNjaXNzX3NlcV9zaG93X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKLQlvZmZfdCBwb3MgPSAwOwotCW9mZl90IGxlbiA9IDA7Ci0JaW50IHNpemUsIGksIGN0bHI7Ci0JY3Rscl9pbmZvX3QgKmggPSAoY3Rscl9pbmZvX3QgKikgZGF0YTsKLQlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc2VjdG9yX3Qgdm9sX3N6LCB2b2xfc3pfZnJhYzsKKwljdGxyX2luZm9fdCAqaCA9IHNlcS0+cHJpdmF0ZTsKIAotCWN0bHIgPSBoLT5jdGxyOworCXNlcV9wcmludGYoc2VxLCAiJXM6IEhQICVzIENvbnRyb2xsZXJcbiIKKwkJIkJvYXJkIElEOiAweCUwOGx4XG4iCisJCSJGaXJtd2FyZSBWZXJzaW9uOiAlYyVjJWMlY1xuIgorCQkiSVJROiAlZFxuIgorCQkiTG9naWNhbCBkcml2ZXM6ICVkXG4iCisJCSJDdXJyZW50IFEgZGVwdGg6ICVkXG4iCisJCSJDdXJyZW50ICMgY29tbWFuZHMgb24gY29udHJvbGxlcjogJWRcbiIKKwkJIk1heCBRIGRlcHRoIHNpbmNlIGluaXQ6ICVkXG4iCisJCSJNYXggIyBjb21tYW5kcyBvbiBjb250cm9sbGVyIHNpbmNlIGluaXQ6ICVkXG4iCisJCSJNYXggU0cgZW50cmllcyBzaW5jZSBpbml0OiAlZFxuIiwKKwkJaC0+ZGV2bmFtZSwKKwkJaC0+cHJvZHVjdF9uYW1lLAorCQkodW5zaWduZWQgbG9uZyloLT5ib2FyZF9pZCwKKwkJaC0+ZmlybV92ZXJbMF0sIGgtPmZpcm1fdmVyWzFdLCBoLT5maXJtX3ZlclsyXSwKKwkJaC0+ZmlybV92ZXJbM10sICh1bnNpZ25lZCBpbnQpaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLAorCQloLT5udW1fbHVucywKKwkJaC0+UWRlcHRoLCBoLT5jb21tYW5kc19vdXRzdGFuZGluZywKKwkJaC0+bWF4UXNpbmNlaW5pdCwgaC0+bWF4X291dHN0YW5kaW5nLCBoLT5tYXhTRyk7CisKKyNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKKwljY2lzc19zZXFfdGFwZV9yZXBvcnQoc2VxLCBoLT5jdGxyKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUgKi8KK30KKworc3RhdGljIHZvaWQgKmNjaXNzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJY3Rscl9pbmZvX3QgKmggPSBzZXEtPnByaXZhdGU7CisJdW5zaWduZWQgY3RsciA9IGgtPmN0bHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIHByZXZlbnQgZGlzcGxheWluZyBib2d1cyBpbmZvIGR1cmluZyBjb25maWd1cmF0aW9uCiAJICogb3IgZGVjb25maWd1cmF0aW9uIG9mIGEgbG9naWNhbCB2b2x1bWUKQEAgLTI2NSwxMTUgKzI4NiwxNTUgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7CiAJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CiAJfQogCWgtPmJ1c3lfY29uZmlndXJpbmcgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwogCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyLCAiJXM6IEhQICVzIENvbnRyb2xsZXJcbiIKLQkJICAgICAgICJCb2FyZCBJRDogMHglMDhseFxuIgotCQkgICAgICAgIkZpcm13YXJlIFZlcnNpb246ICVjJWMlYyVjXG4iCi0JCSAgICAgICAiSVJROiAlZFxuIgotCQkgICAgICAgIkxvZ2ljYWwgZHJpdmVzOiAlZFxuIgotCQkgICAgICAgIk1heCBzZWN0b3JzOiAlZFxuIgotCQkgICAgICAgIkN1cnJlbnQgUSBkZXB0aDogJWRcbiIKLQkJICAgICAgICJDdXJyZW50ICMgY29tbWFuZHMgb24gY29udHJvbGxlcjogJWRcbiIKLQkJICAgICAgICJNYXggUSBkZXB0aCBzaW5jZSBpbml0OiAlZFxuIgotCQkgICAgICAgIk1heCAjIGNvbW1hbmRzIG9uIGNvbnRyb2xsZXIgc2luY2UgaW5pdDogJWRcbiIKLQkJICAgICAgICJNYXggU0cgZW50cmllcyBzaW5jZSBpbml0OiAlZFxuXG4iLAotCQkgICAgICAgaC0+ZGV2bmFtZSwKLQkJICAgICAgIGgtPnByb2R1Y3RfbmFtZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKWgtPmJvYXJkX2lkLAotCQkgICAgICAgaC0+ZmlybV92ZXJbMF0sIGgtPmZpcm1fdmVyWzFdLCBoLT5maXJtX3ZlclsyXSwKLQkJICAgICAgIGgtPmZpcm1fdmVyWzNdLCAodW5zaWduZWQgaW50KWgtPmludHJbU0lNUExFX01PREVfSU5UXSwKLQkJICAgICAgIGgtPm51bV9sdW5zLAotCQkgICAgICAgaC0+Y2Npc3NfbWF4X3NlY3RvcnMsCi0JCSAgICAgICBoLT5RZGVwdGgsIGgtPmNvbW1hbmRzX291dHN0YW5kaW5nLAotCQkgICAgICAgaC0+bWF4UXNpbmNlaW5pdCwgaC0+bWF4X291dHN0YW5kaW5nLCBoLT5tYXhTRyk7CisJaWYgKCpwb3MgPT0gMCkKKwkJY2Npc3Nfc2VxX3Nob3dfaGVhZGVyKHNlcSk7CiAKLQlwb3MgKz0gc2l6ZTsKLQlsZW4gKz0gc2l6ZTsKLQljY2lzc19wcm9jX3RhcGVfcmVwb3J0KGN0bHIsIGJ1ZmZlciwgJnBvcywgJmxlbik7Ci0JZm9yIChpID0gMDsgaSA8PSBoLT5oaWdoZXN0X2x1bjsgaSsrKSB7Ci0KLQkJZHJ2ID0gJmgtPmRydltpXTsKLQkJaWYgKGRydi0+aGVhZHMgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCXZvbF9zeiA9IGRydi0+bnJfYmxvY2tzOwotCQl2b2xfc3pfZnJhYyA9IHNlY3Rvcl9kaXYodm9sX3N6LCBFTkdfR0lHX0ZBQ1RPUik7Ci0JCXZvbF9zel9mcmFjICo9IDEwMDsKLQkJc2VjdG9yX2Rpdih2b2xfc3pfZnJhYywgRU5HX0dJR19GQUNUT1IpOwotCi0JCWlmIChkcnYtPnJhaWRfbGV2ZWwgPiA1KQotCQkJZHJ2LT5yYWlkX2xldmVsID0gUkFJRF9VTktOT1dOOwotCQlzaXplID0gc3ByaW50ZihidWZmZXIgKyBsZW4sICJjY2lzcy9jJWRkJWQ6IgotCQkJICAgICAgICJcdCU0dS4lMDJ1R0JcdFJBSUQgJXNcbiIsCi0JCQkgICAgICAgY3RsciwgaSwgKGludCl2b2xfc3osIChpbnQpdm9sX3N6X2ZyYWMsCi0JCQkgICAgICAgcmFpZF9sYWJlbFtkcnYtPnJhaWRfbGV2ZWxdKTsKLQkJcG9zICs9IHNpemU7Ci0JCWxlbiArPSBzaXplOwotCX0KLQotCSplb2YgPSAxOwotCSpzdGFydCA9IGJ1ZmZlciArIG9mZnNldDsKLQlsZW4gLT0gb2Zmc2V0OwotCWlmIChsZW4gPiBsZW5ndGgpCi0JCWxlbiA9IGxlbmd0aDsKLQloLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKLQlyZXR1cm4gbGVuOworCXJldHVybiBwb3M7CiB9CiAKLXN0YXRpYyBpbnQKLWNjaXNzX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCSB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBjY2lzc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQl1bnNpZ25lZCBjaGFyIGNtZFs4MF07Ci0JaW50IGxlbjsKLSNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKLQljdGxyX2luZm9fdCAqaCA9IChjdGxyX2luZm9fdCAqKSBkYXRhOwotCWludCByYzsKKwlzZWN0b3JfdCB2b2xfc3osIHZvbF9zel9mcmFjOworCWN0bHJfaW5mb190ICpoID0gc2VxLT5wcml2YXRlOworCXVuc2lnbmVkIGN0bHIgPSBoLT5jdGxyOworCWxvZmZfdCAqcG9zID0gdjsKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gJmgtPmRydlsqcG9zXTsKKworCWlmICgqcG9zID4gaC0+aGlnaGVzdF9sdW4pCisJCXJldHVybiAwOworCisJaWYgKGRydi0+aGVhZHMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl2b2xfc3ogPSBkcnYtPm5yX2Jsb2NrczsKKwl2b2xfc3pfZnJhYyA9IHNlY3Rvcl9kaXYodm9sX3N6LCBFTkdfR0lHX0ZBQ1RPUik7CisJdm9sX3N6X2ZyYWMgKj0gMTAwOworCXNlY3Rvcl9kaXYodm9sX3N6X2ZyYWMsIEVOR19HSUdfRkFDVE9SKTsKKworCWlmIChkcnYtPnJhaWRfbGV2ZWwgPiA1KQorCQlkcnYtPnJhaWRfbGV2ZWwgPSBSQUlEX1VOS05PV047CisJc2VxX3ByaW50ZihzZXEsICJjY2lzcy9jJWRkJWQ6IgorCQkJIlx0JTR1LiUwMnVHQlx0UkFJRCAlc1xuIiwKKwkJCWN0bHIsIChpbnQpICpwb3MsIChpbnQpdm9sX3N6LCAoaW50KXZvbF9zel9mcmFjLAorCQkJcmFpZF9sYWJlbFtkcnYtPnJhaWRfbGV2ZWxdKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmNjaXNzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwljdGxyX2luZm9fdCAqaCA9IHNlcS0+cHJpdmF0ZTsKKworCWlmICgqcG9zID4gaC0+aGlnaGVzdF9sdW4pCisJCXJldHVybiBOVUxMOworCSpwb3MgKz0gMTsKKworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyB2b2lkIGNjaXNzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWN0bHJfaW5mb190ICpoID0gc2VxLT5wcml2YXRlOworCisJLyogT25seSByZXNldCBoLT5idXN5X2NvbmZpZ3VyaW5nIGlmIHdlIHN1Y2NlZWRlZCBpbiBzZXR0aW5nCisJICogaXQgZHVyaW5nIGNjaXNzX3NlcV9zdGFydC4gKi8KKwlpZiAodiA9PSBFUlJfUFRSKC1FQlVTWSkpCisJCXJldHVybjsKKworCWgtPmJ1c3lfY29uZmlndXJpbmcgPSAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNjaXNzX3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gY2Npc3Nfc2VxX3N0YXJ0LAorCS5zaG93ICA9IGNjaXNzX3NlcV9zaG93LAorCS5uZXh0ICA9IGNjaXNzX3NlcV9uZXh0LAorCS5zdG9wICA9IGNjaXNzX3NlcV9zdG9wLAorfTsKKworc3RhdGljIGludCBjY2lzc19zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0ID0gc2VxX29wZW4oZmlsZSwgJmNjaXNzX3NlcV9vcHMpOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFyZXQpCisJCXNlcS0+cHJpdmF0ZSA9IFBERShpbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAorY2Npc3NfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgZXJyOworCWNoYXIgKmJ1ZmZlcjsKKworI2lmbmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKKwlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogCi0JaWYgKGNvdW50ID4gc2l6ZW9mKGNtZCkgLSAxKQorCWlmICghYnVmIHx8IGxlbmd0aCA+IFBBR0VfU0laRSAtIDEpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChjb3B5X2Zyb21fdXNlcihjbWQsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQljbWRbY291bnRdID0gJ1wwJzsKLQlsZW4gPSBzdHJsZW4oY21kKTsJLy8gYWJvdmUgMyBsaW5lcyBlbnN1cmUgc2FmZXR5Ci0JaWYgKGxlbiAmJiBjbWRbbGVuIC0gMV0gPT0gJ1xuJykKLQkJY21kWy0tbGVuXSA9ICdcMCc7Ci0jCWlmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQotCWlmIChzdHJjbXAoImVuZ2FnZSBzY3NpIiwgY21kKSA9PSAwKSB7CisKKwlidWZmZXIgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSAtRUZBVUxUOworCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgbGVuZ3RoKSkKKwkJZ290byBvdXQ7CisJYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworCisjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCisJaWYgKHN0cm5jbXAoRU5HQUdFX1NDU0ksIGJ1ZmZlciwgc2l6ZW9mIEVOR0FHRV9TQ1NJIC0gMSkgPT0gMCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJY3Rscl9pbmZvX3QgKmggPSBzZXEtPnByaXZhdGU7CisJCWludCByYzsKKwogCQlyYyA9IGNjaXNzX2VuZ2FnZV9zY3NpKGgtPmN0bHIpOwogCQlpZiAocmMgIT0gMCkKLQkJCXJldHVybiAtcmM7Ci0JCXJldHVybiBjb3VudDsKLQl9CisJCQllcnIgPSAtcmM7CisJCWVsc2UKKwkJCWVyciA9IGxlbmd0aDsKKwl9IGVsc2UKKyNlbmRpZiAvKiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUgKi8KKwkJZXJyID0gLUVJTlZBTDsKIAkvKiBtaWdodCBiZSBuaWNlIHRvIGhhdmUgImRpc2VuZ2FnZSIgdG9vLCBidXQgaXQncyBub3QKIAkgICBzYWZlbHkgcG9zc2libGUuIChvbmx5IDEgbW9kdWxlIHVzZSBjb3VudCwgbG9jayBpc3N1ZXMuKSAqLwotIwllbmRpZgotCXJldHVybiAtRUlOVkFMOworCitvdXQ6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7CisJcmV0dXJuIGVycjsKIH0KIAotLyoKLSAqIEdldCB1cyBhIGZpbGUgaW4gL3Byb2MvY2Npc3MgdGhhdCBzYXlzIHNvbWV0aGluZyBhYm91dCBlYWNoIGNvbnRyb2xsZXIuCi0gKiBDcmVhdGUgL3Byb2MvY2Npc3MgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuCi0gKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNjaXNzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBjY2lzc19zZXFfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLndyaXRlCSA9IGNjaXNzX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgY2Npc3NfcHJvY2luaXQoaW50IGkpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CiAKLQlpZiAocHJvY19jY2lzcyA9PSBOVUxMKSB7CisJaWYgKHByb2NfY2Npc3MgPT0gTlVMTCkKIAkJcHJvY19jY2lzcyA9IHByb2NfbWtkaXIoImNjaXNzIiwgcHJvY19yb290X2RyaXZlcik7Ci0JCWlmICghcHJvY19jY2lzcykKLQkJCXJldHVybjsKLQl9CisJaWYgKCFwcm9jX2NjaXNzKQorCQlyZXR1cm47CisJcGRlID0gcHJvY19jcmVhdGUoaGJhW2ldLT5kZXZuYW1lLCBTX0lXVVNSIHwgU19JUlVTUiB8IFNfSVJHUlAgfAorCQkJCQlTX0lST1RILCBwcm9jX2NjaXNzLAorCQkJCQkmY2Npc3NfcHJvY19mb3BzKTsKKwlpZiAoIXBkZSkKKwkJcmV0dXJuOwogCi0JcGRlID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShoYmFbaV0tPmRldm5hbWUsCi0JCQkJICAgICBTX0lXVVNSIHwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RILAotCQkJCSAgICAgcHJvY19jY2lzcywgY2Npc3NfcHJvY19nZXRfaW5mbywgaGJhW2ldKTsKLQlwZGUtPndyaXRlX3Byb2MgPSBjY2lzc19wcm9jX3dyaXRlOworCXBkZS0+ZGF0YSA9IGhiYVtpXTsKIH0KICNlbmRpZgkJCQkvKiBDT05GSUdfUFJPQ19GUyAqLwogCkBAIC0xMjg4LDYgKzEzNDksMTAgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOwogCQloLT5kcnZbZHJ2X2luZGV4XS5idXN5X2NvbmZpZ3VyaW5nID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisKKwkJLyogZGVyZWdpc3Rlcl9kaXNrIHNldHMgaC0+ZHJ2W2Rydl9pbmRleF0ucXVldWUgPSBOVUxMICovCisJCS8qIHdoaWNoIGtlZXBzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHN0YXJ0aW5nICovCisJCS8qIHRoZSBxdWV1ZS4gKi8KIAkJcmV0ID0gZGVyZWdpc3Rlcl9kaXNrKGgtPmdlbmRpc2tbZHJ2X2luZGV4XSwKIAkJCQkgICAgICAmaC0+ZHJ2W2Rydl9pbmRleF0sIDApOwogCQloLT5kcnZbZHJ2X2luZGV4XS5idXN5X2NvbmZpZ3VyaW5nID0gMDsKQEAgLTEzNDEsNyArMTQwNiw2IEBACiAJCWRpc2stPnByaXZhdGVfZGF0YSA9ICZoLT5kcnZbZHJ2X2luZGV4XTsKIAogCQkvKiBTZXQgdXAgcXVldWUgaW5mb3JtYXRpb24gKi8KLQkJZGlzay0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSBSRUFEX0FIRUFEOwogCQlibGtfcXVldWVfYm91bmNlX2xpbWl0KGRpc2stPnF1ZXVlLCBoYmFbY3Rscl0tPnBkZXYtPmRtYV9tYXNrKTsKIAogCQkvKiBUaGlzIGlzIGEgaGFyZHdhcmUgaW1wb3NlZCBsaW1pdC4gKi8KQEAgLTEzNTksNiArMTQyMywxMCBAQAogCQlibGtfcXVldWVfaGFyZHNlY3Rfc2l6ZShkaXNrLT5xdWV1ZSwKIAkJCQkJaGJhW2N0bHJdLT5kcnZbZHJ2X2luZGV4XS5ibG9ja19zaXplKTsKIAorCQkvKiBNYWtlIHN1cmUgYWxsIHF1ZXVlIGRhdGEgaXMgd3JpdHRlbiBvdXQgYmVmb3JlICovCisJCS8qIHNldHRpbmcgaC0+ZHJ2W2Rydl9pbmRleF0ucXVldWUsIGFzIHNldHRpbmcgdGhpcyAqLworCQkvKiBhbGxvd3MgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIHN0YXJ0IHRoZSBxdWV1ZSAqLworCQl3bWIoKTsKIAkJaC0+ZHJ2W2Rydl9pbmRleF0ucXVldWUgPSBkaXNrLT5xdWV1ZTsKIAkJYWRkX2Rpc2soZGlzayk7CiAJfQpAQCAtMzQzNCw3ICszNTAyLDYgQEAKIAkJfQogCQlkcnYtPnF1ZXVlID0gcTsKIAotCQlxLT5iYWNraW5nX2Rldl9pbmZvLnJhX3BhZ2VzID0gUkVBRF9BSEVBRDsKIAkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChxLCBoYmFbaV0tPnBkZXYtPmRtYV9tYXNrKTsKIAogCQkvKiBUaGlzIGlzIGEgaGFyZHdhcmUgaW1wb3NlZCBsaW1pdC4gKi8KQEAgLTM0NjEsMTAgKzM1MjgsMTcgQEAKIAkJCWNvbnRpbnVlOwogCQlibGtfcXVldWVfaGFyZHNlY3Rfc2l6ZShxLCBkcnYtPmJsb2NrX3NpemUpOwogCQlzZXRfY2FwYWNpdHkoZGlzaywgZHJ2LT5ucl9ibG9ja3MpOwotCQlhZGRfZGlzayhkaXNrKTsKIAkJaisrOwogCX0gd2hpbGUgKGogPD0gaGJhW2ldLT5oaWdoZXN0X2x1bik7CiAKKwkvKiBNYWtlIHN1cmUgYWxsIHF1ZXVlIGRhdGEgaXMgd3JpdHRlbiBvdXQgYmVmb3JlICovCisJLyogaW50ZXJydXB0IGhhbmRsZXIsIHRyaWdnZXJlZCBieSBhZGRfZGlzaywgICovCisJLyogaXMgYWxsb3dlZCB0byBzdGFydCB0aGVtLiAqLworCXdtYigpOworCisJZm9yIChqID0gMDsgaiA8PSBoYmFbaV0tPmhpZ2hlc3RfbHVuOyBqKyspCisJCWFkZF9kaXNrKGhiYVtpXS0+Z2VuZGlza1tqXSk7CisKIAlyZXR1cm4gMTsKIAogICAgICAgY2xlYW40OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwppbmRleCA1NTE3OGU5Li5lNGJmOWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwpAQCAtMTM0OSw5ICsxMzQ5LDkgQEAKIAkvKiBzZXQgc2NzaV9ob3N0IHRvIE5VTEwgc28gb3VyIGRldGVjdCByb3V0aW5lIHdpbGwgCiAJICAgZmluZCB1cyBvbiByZWdpc3RlciAqLwogCXNhLT5zY3NpX2hvc3QgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwogCXNjc2lfY21kX3N0YWNrX2ZyZWUoY3Rscik7CiAJa2ZyZWUoc2EpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IApAQCAtMTQwNCwyMSArMTQwNCwxOCBAQAogfQogCiBzdGF0aWMgdm9pZAotY2Npc3NfcHJvY190YXBlX3JlcG9ydChpbnQgY3RsciwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBvZmZfdCAqcG9zLCBvZmZfdCAqbGVuKQorY2Npc3Nfc2VxX3RhcGVfcmVwb3J0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBpbnQgY3RscikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzaXplOwotCi0JKnBvcyA9ICpwb3MgLTE7ICpsZW4gPSAqbGVuIC0gMTsgLy8gY3V0IG9mZiB0aGUgbGFzdCB0cmFpbGluZyBuZXdsaW5lCiAKIAlDUFFfVEFQRV9MT0NLKGN0bHIsIGZsYWdzKTsKLQlzaXplID0gc3ByaW50ZihidWZmZXIgKyAqbGVuLCAKKwlzZXFfcHJpbnRmKHNlcSwKIAkJIlNlcXVlbnRpYWwgYWNjZXNzIGRldmljZXM6ICVkXG5cbiIsCiAJCQljY2lzc3Njc2lbY3Rscl0ubmRldmljZXMpOwogCUNQUV9UQVBFX1VOTE9DSyhjdGxyLCBmbGFncyk7Ci0JKnBvcyArPSBzaXplOyAqbGVuICs9IHNpemU7CiB9CiAKKwogLyogTmVlZCBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgZXJyb3IgaGFuZGxlcnMgdG8ga2VlcCAuLi9zY3NpL2hvc3RzLmMgZnJvbSAKICAqIGNvbXBsYWluaW5nLiAgRG9pbmcgYSBob3N0LSBvciBidXMtcmVzZXQgY2FuJ3QgZG8gYW55dGhpbmcgZ29vZCBoZXJlLiAKICAqIERlc3BpdGUgd2hhdCBpdCBtaWdodCBzYXkgaW4gc2NzaV9lcnJvci5jLCB0aGVyZSBtYXkgd2VsbCBiZSBjb21tYW5kcwpAQCAtMTQ5OCw2ICsxNDk1LDUgQEAKICNkZWZpbmUgY2Npc3Nfc2NzaV9zZXR1cChjbnRsX251bSkKICNkZWZpbmUgY2Npc3NfdW5yZWdpc3Rlcl9zY3NpKGN0bHIpCiAjZGVmaW5lIGNjaXNzX3JlZ2lzdGVyX3Njc2koY3RscikKLSNkZWZpbmUgY2Npc3NfcHJvY190YXBlX3JlcG9ydChjdGxyLCBidWZmZXIsIHBvcywgbGVuKQogCiAjZW5kaWYgLyogQ09ORklHX0NJU1NfU0NTSV9UQVBFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NyeXB0b2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svY3J5cHRvbG9vcC5jCmluZGV4IDI0MTE2NzguLjhiNmJiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3J5cHRvbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3J5cHRvbG9vcC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbG9vcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IDMyYzc5YTUuLjc2NTJlODdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTIxNyw3ICsyMTcsNiBAQAogICovCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmxvcHB5X2xvY2spOwotc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIGRldmljZV9yZWxlYXNlOwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgdmlydHVhbF9kbWFfcG9ydCA9IDB4M2YwOwogaXJxcmV0dXJuX3QgZmxvcHB5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtNDE0NCw3ICs0MTQzLDYgQEAKIAogc3RhdGljIHZvaWQgZmxvcHB5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQljb21wbGV0ZSgmZGV2aWNlX3JlbGVhc2UpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbG9wcHlfZGV2aWNlW05fRFJJVkVdOwpAQCAtNDUzOSw3ICs0NTM3LDYgQEAKIHsKIAlpbnQgZHJpdmU7CiAKLQlpbml0X2NvbXBsZXRpb24oJmRldmljZV9yZWxlYXNlKTsKIAlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoRkxPUFBZX01BSk9SLCAwKSwgMjU2KTsKIAl1bnJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpOwogCkBAIC00NTY0LDggKzQ1NjEsNiBAQAogCiAJLyogZWplY3QgZGlzaywgaWYgYW55ICovCiAJZmRfZWplY3QoMCk7Ci0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXZpY2VfcmVsZWFzZSk7CiB9CiAKIG1vZHVsZV9wYXJhbShmbG9wcHksIGNoYXJwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggOTFlYmIwMC4uZjdmMTYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTgyLDYgKzgyLDkgQEAKIHN0YXRpYyBMSVNUX0hFQUQobG9vcF9kZXZpY2VzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgobG9vcF9kZXZpY2VzX211dGV4KTsKIAorc3RhdGljIGludCBtYXhfcGFydDsKK3N0YXRpYyBpbnQgcGFydF9zaGlmdDsKKwogLyoKICAqIFRyYW5zZmVyIGZ1bmN0aW9ucwogICovCkBAIC02OTIsNiArNjk1LDggQEAKIAkJZ290byBvdXRfcHV0ZjsKIAogCWZwdXQob2xkX2ZpbGUpOworCWlmIChtYXhfcGFydCA+IDApCisJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKIAlyZXR1cm4gMDsKIAogIG91dF9wdXRmOgpAQCAtODE5LDYgKzgyNCw4IEBACiAJfQogCWxvLT5sb19zdGF0ZSA9IExvX2JvdW5kOwogCXdha2VfdXBfcHJvY2Vzcyhsby0+bG9fdGhyZWFkKTsKKwlpZiAobWF4X3BhcnQgPiAwKQorCQlpb2N0bF9ieV9iZGV2KGJkZXYsIEJMS1JSUEFSVCwgMCk7CiAJcmV0dXJuIDA7CiAKIG91dF9jbHI6CkBAIC05MTksNiArOTI2LDggQEAKIAlmcHV0KGZpbHApOwogCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJaWYgKG1heF9wYXJ0ID4gMCkKKwkJaW9jdGxfYnlfYmRldihiZGV2LCBCTEtSUlBBUlQsIDApOwogCXJldHVybiAwOwogfQogCkBAIC0xMzYwLDYgKzEzNjksOCBAQAogc3RhdGljIGludCBtYXhfbG9vcDsKIG1vZHVsZV9wYXJhbShtYXhfbG9vcCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2xvb3AsICJNYXhpbXVtIG51bWJlciBvZiBsb29wIGRldmljZXMiKTsKK21vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsICJNYXhpbXVtIG51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBsb29wIGRldmljZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKExPT1BfTUFKT1IpOwogCkBAIC0xNDEyLDcgKzE0MjMsNyBAQAogCWlmICghbG8tPmxvX3F1ZXVlKQogCQlnb3RvIG91dF9mcmVlX2RldjsKIAotCWRpc2sgPSBsby0+bG9fZGlzayA9IGFsbG9jX2Rpc2soMSk7CisJZGlzayA9IGxvLT5sb19kaXNrID0gYWxsb2NfZGlzaygxIDw8IHBhcnRfc2hpZnQpOwogCWlmICghZGlzaykKIAkJZ290byBvdXRfZnJlZV9xdWV1ZTsKIApAQCAtMTQyMiw3ICsxNDMzLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsby0+bG9fZXZlbnQpOwogCXNwaW5fbG9ja19pbml0KCZsby0+bG9fbG9jayk7CiAJZGlzay0+bWFqb3IJCT0gTE9PUF9NQUpPUjsKLQlkaXNrLT5maXJzdF9taW5vcgk9IGk7CisJZGlzay0+Zmlyc3RfbWlub3IJPSBpIDw8IHBhcnRfc2hpZnQ7CiAJZGlzay0+Zm9wcwkJPSAmbG9fZm9wczsKIAlkaXNrLT5wcml2YXRlX2RhdGEJPSBsbzsKIAlkaXNrLT5xdWV1ZQkJPSBsby0+bG9fcXVldWU7CkBAIC0xNTAyLDcgKzE1MTMsMTIgQEAKIAkgKiAgICAgdGhlbXNlbHZlcyBhbmQgaGF2ZSBrZXJuZWwgYXV0b21hdGljYWxseSBpbnN0YW50aWF0ZSBhY3R1YWwKIAkgKiAgICAgZGV2aWNlIG9uLWRlbWFuZC4KIAkgKi8KLQlpZiAobWF4X2xvb3AgPiAxVUwgPDwgTUlOT1JCSVRTKQorCisJcGFydF9zaGlmdCA9IDA7CisJaWYgKG1heF9wYXJ0ID4gMCkKKwkJcGFydF9zaGlmdCA9IGZscyhtYXhfcGFydCk7CisKKwlpZiAobWF4X2xvb3AgPiAxVUwgPDwgKE1JTk9SQklUUyAtIHBhcnRfc2hpZnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChtYXhfbG9vcCkgewpAQCAtMTUxMCw3ICsxNTI2LDcgQEAKIAkJcmFuZ2UgPSBtYXhfbG9vcDsKIAl9IGVsc2UgewogCQluciA9IDg7Ci0JCXJhbmdlID0gMVVMIDw8IE1JTk9SQklUUzsKKwkJcmFuZ2UgPSAxVUwgPDwgKE1JTk9SQklUUyAtIHBhcnRfc2hpZnQpOwogCX0KIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoTE9PUF9NQUpPUiwgImxvb3AiKSkKQEAgLTE1NDksNyArMTU2NSw3IEBACiAJdW5zaWduZWQgbG9uZyByYW5nZTsKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCAqbmV4dDsKIAotCXJhbmdlID0gbWF4X2xvb3AgPyBtYXhfbG9vcCA6ICAxVUwgPDwgTUlOT1JCSVRTOworCXJhbmdlID0gbWF4X2xvb3AgPyBtYXhfbG9vcCA6ICAxVUwgPDwgKE1JTk9SQklUUyAtIHBhcnRfc2hpZnQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxvLCBuZXh0LCAmbG9vcF9kZXZpY2VzLCBsb19saXN0KQogCQlsb29wX2RlbF9vbmUobG8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggMDE4NzUzYy4uNjBjYzU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0xNTMsNiArMTUzLDEyIEBACiAJc3RydWN0IGt2ZWMgaW92OwogCXNpZ3NldF90IGJsb2NrZWQsIG9sZHNldDsKIAorCWlmICh1bmxpa2VseSghc29jaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQXR0ZW1wdGVkICVzIG9uIGNsb3NlZCBzb2NrZXQgaW4gc29ja194bWl0XG4iLAorCQkgICAgICAgbG8tPmRpc2stPmRpc2tfbmFtZSwgKHNlbmQgPyAic2VuZCIgOiAicmVjdiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJLyogQWxsb3cgaW50ZXJjZXB0aW9uIG9mIFNJR0tJTEwgb25seQogCSAqIERvbid0IGFsbG93IG90aGVyIHNpZ25hbHMgdG8gaW50ZXJydXB0IHRoZSB0cmFuc21pc3Npb24gKi8KIAlzaWdpbml0c2V0aW52KCZibG9ja2VkLCBzaWdtYXNrKFNJR0tJTEwpKTsKQEAgLTY1NSw2ICs2NjEsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG5iZHNfbWF4OyBpKyspIHsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBhbGxvY19kaXNrKDEpOworCQllbGV2YXRvcl90ICpvbGRfZTsKIAkJaWYgKCFkaXNrKQogCQkJZ290byBvdXQ7CiAJCW5iZF9kZXZbaV0uZGlzayA9IGRpc2s7CkBAIC02NjgsNiArNjc1LDExIEBACiAJCQlwdXRfZGlzayhkaXNrKTsKIAkJCWdvdG8gb3V0OwogCQl9CisJCW9sZF9lID0gZGlzay0+cXVldWUtPmVsZXZhdG9yOworCQlpZiAoZWxldmF0b3JfaW5pdChkaXNrLT5xdWV1ZSwgImRlYWRsaW5lIikgPT0gMCB8fAorCQkJZWxldmF0b3JfaW5pdChkaXNrLT5xdWV1ZSwgIm5vb3AiKSA9PSAwKSB7CisJCQkJZWxldmF0b3JfZXhpdChvbGRfZSk7CisJCX0KIAl9CiAKIAlpZiAocmVnaXN0ZXJfYmxrZGV2KE5CRF9NQUpPUiwgIm5iZCIpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCmluZGV4IDY3NGNkNjYuLjE4ZmViMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC04NDksNyArODQ5LDggQEAKIC8qCiAgKiBzcGVlZCBpcyBnaXZlbiBhcyB0aGUgbm9ybWFsIGZhY3RvciwgZS5nLiA0IGZvciA0eAogICovCi1zdGF0aWMgaW50IHBrdF9zZXRfc3BlZWQoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgdW5zaWduZWQgd3JpdGVfc3BlZWQsIHVuc2lnbmVkIHJlYWRfc3BlZWQpCitzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBwa3Rfc2V0X3NwZWVkKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsCisJCQkJdW5zaWduZWQgd3JpdGVfc3BlZWQsIHVuc2lnbmVkIHJlYWRfc3BlZWQpCiB7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKQEAgLTE3NzYsNyArMTc3Nyw4IEBACiAJcmV0dXJuIHBrdF9nZW5lcmljX3BhY2tldChwZCwgJmNnYyk7CiB9CiAKLXN0YXRpYyBpbnQgcGt0X2dldF9sYXN0X3dyaXR0ZW4oc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgbG9uZyAqbGFzdF93cml0dGVuKQorc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcGt0X2dldF9sYXN0X3dyaXR0ZW4oc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwKKwkJCQkJCWxvbmcgKmxhc3Rfd3JpdHRlbikKIHsKIAlkaXNjX2luZm9ybWF0aW9uIGRpOwogCXRyYWNrX2luZm9ybWF0aW9uIHRpOwpAQCAtMTgxMyw3ICsxODE1LDcgQEAKIC8qCiAgKiB3cml0ZSBtb2RlIHNlbGVjdCBwYWNrYWdlIGJhc2VkIG9uIHBkLT5zZXR0aW5ncwogICovCi1zdGF0aWMgaW50IHBrdF9zZXRfd3JpdGVfc2V0dGluZ3Moc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCkKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHBrdF9zZXRfd3JpdGVfc2V0dGluZ3Moc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCkKIHsKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwogCXN0cnVjdCByZXF1ZXN0X3NlbnNlIHNlbnNlOwpAQCAtMTk3Miw3ICsxOTc0LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBwa3RfcHJvYmVfc2V0dGluZ3Moc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCkKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHBrdF9wcm9iZV9zZXR0aW5ncyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJdW5zaWduZWQgY2hhciBidWZbMTJdOwpAQCAtMjA3MSw3ICsyMDczLDggQEAKIC8qCiAgKiBlbmFibGUvZGlzYWJsZSB3cml0ZSBjYWNoaW5nIG9uIGRyaXZlCiAgKi8KLXN0YXRpYyBpbnQgcGt0X3dyaXRlX2NhY2hpbmcoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgaW50IHNldCkKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHBrdF93cml0ZV9jYWNoaW5nKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsCisJCQkJCQlpbnQgc2V0KQogewogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2U7CkBAIC0yMTE2LDcgKzIxMTksOCBAQAogLyoKICAqIFJldHVybnMgZHJpdmUgbWF4aW11bSB3cml0ZSBzcGVlZAogICovCi1zdGF0aWMgaW50IHBrdF9nZXRfbWF4X3NwZWVkKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIHVuc2lnbmVkICp3cml0ZV9zcGVlZCkKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHBrdF9nZXRfbWF4X3NwZWVkKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsCisJCQkJCQl1bnNpZ25lZCAqd3JpdGVfc3BlZWQpCiB7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKQEAgLTIxNzcsNyArMjE4MSw4IEBACiAvKgogICogcmVhZHMgdGhlIG1heGltdW0gbWVkaWEgc3BlZWQgZnJvbSBBVElQCiAgKi8KLXN0YXRpYyBpbnQgcGt0X21lZGlhX3NwZWVkKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIHVuc2lnbmVkICpzcGVlZCkKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHBrdF9tZWRpYV9zcGVlZChzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkLAorCQkJCQkJdW5zaWduZWQgKnNwZWVkKQogewogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2U7CkBAIC0yMjQ5LDcgKzIyNTQsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBwa3RfcGVyZm9ybV9vcGMoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCkKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHBrdF9wZXJmb3JtX29wYyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzMmVzZGkuYyBiL2RyaXZlcnMvYmxvY2svcHMyZXNkaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzc5NmUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvYmxvY2svcHMyZXNkaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3OSArMCwwIEBACi0vKiBwczJlc2RpIGRyaXZlciBiYXNlZCBvbiBhc3NlbWJsZXIgY29kZSBieSBBcmluZGFtIEJhbmVyamksCi0gICB3cml0dGVuIGJ5IFBldGVyIERlIFNjaHJpanZlciAqLwotLyogUmVhc3N1cmluZyBub3RlIHRvIElCTSA6IFRoaXMgZHJpdmVyIHdhcyBOT1QgZGV2ZWxvcGVkIGJ5IHZpY2UtdmVyc2EKLSAgIGVuZ2luZWVyaW5nIHRoZSBQUy8yJ3MgQklPUyAqLwotLyogRGVkaWNhdGVkIHRvIFdhbm5lcywgVG9ma2UsIFlra2UsIEdvZG90LCBLaWxscm95IGFuZCBhbGwgdGhvc2UgCi0gICBvdGhlciBsb3ZlbHkgZmlzaCBvdXQgdGhlcmUuLi4gKi8KLS8qIFRoaXMgY29kZSB3YXMgd3JpdHRlbiBkdXJpbmcgdGhlIGxvbmcgYW5kIGJvcmluZyBXSU5BIAotICAgZWxlY3Rpb25zIDE5OTQgKi8KLS8qIFRoYW5rcyB0byBBcmluZGFtIEJhbmVyaWogZm9yIGdpdmluZyBtZSB0aGUgc291cmNlIG9mIGhpcyBkcml2ZXIgKi8KLS8qIFRoaXMgY29kZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIGFuZCBtb2RpZmllZCBpbiBhbnkgd2F5LCAKLSAgIGFzIGxvbmcgYXMgdGhlc2Ugbm90ZXMgcmVtYWluIGludGFjdCAqLwotCi0vKiAgUmV2aXNlZDogMDUvMDcvOTQgYnkgQXJpbmRhbSBCYW5lcmppIChheGJAY3NlLm5kLmVkdSkgKi8KLS8qICBSZXZpc2VkOiAwOS8wOC85NCBieSBQZXRlciBEZSBTY2hyaWp2ZXIgKHN0dWQxMUBjYzQua3VsZXV2ZW4uYWMuYmUpCi0gICBUaGFua3MgdG8gQXJpbmRhbSBCYW5lcmlqIGZvciBzZW5kaW5nIG1lIHRoZSBkb2NzIG9mIHRoZSBhZGFwdGVyICovCi0KLS8qIEJBIE1vZGlmaWVkIGZvciBUaGlua1BhZCA3MjAgYnkgQm9yaXMgQXNoa2luYXppICovCi0vKiAgICAgICAgICAgICAgICAgICAgKGJhc2hAdm5ldC5pYm0uY29tKSAwOC8wOC85NSAqLwotCi0vKiBNb2RpZmllZCBmdXJ0aGVyIGZvciBUaGlua1BhZC03MjBDIGJ5IFVyaSBCbHVtZW50aGFsICovCi0vKiAgICAgICAgICAgICAgICAgICAgKHVyaUB3YXRzb24uaWJtLmNvbSkgU2VwIDExLCAxOTk1ICovCi0KLS8qIFRPRE8gOiAKLSAgICsgVGltZW91dHMKLSAgICsgR2V0IGRpc2sgcGFyYW1ldGVycwotICAgKyBETUEgYWJvdmUgMTZNQgotICAgKyByZXNldCBhZnRlciByZWFkL3dyaXRlIGVycm9yCi0gKi8KLQotI2RlZmluZSBERVZJQ0VfTkFNRSAiUFMvMiBFU0RJIgotCi0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+Ci0jaW5jbHVkZSA8bGludXgvcHMyZXNkaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L21jYS1sZWdhY3kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL21jYV9kbWEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jZGVmaW5lIFBTMkVTRElfSVJRIDE0Ci0jZGVmaW5lIE1BWF9IRCAyCi0jZGVmaW5lIE1BWF9SRVRSSUVTIDUKLSNkZWZpbmUgTUFYXzE2QklUIDY1NTM2Ci0jZGVmaW5lIEVTRElfVElNRU9VVCAgIDB4ZjAwMAotI2RlZmluZSBFU0RJX1NUQVRfVElNRU9VVCA0Ci0KLSNkZWZpbmUgVFlQRV8wX0NNRF9CTEtfTEVOR1RIIDIKLSNkZWZpbmUgVFlQRV8xX0NNRF9CTEtfTEVOR1RIIDQKLQotc3RhdGljIHZvaWQgcmVzZXRfY3RybCh2b2lkKTsKLQotc3RhdGljIGludCBwczJlc2RpX2dlbmluaXQodm9pZCk7Ci0KLXN0YXRpYyB2b2lkIGRvX3BzMmVzZGlfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpOwotCi1zdGF0aWMgdm9pZCBwczJlc2RpX3JlYWR3cml0ZShpbnQgY21kLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKTsKLQotc3RhdGljIHZvaWQgcHMyZXNkaV9maWxsX2NtZF9ibG9jayh1X3Nob3J0ICogY21kX2JsaywgdV9zaG9ydCBjbWQsCi11X3Nob3J0IGN5bCwgdV9zaG9ydCBoZWFkLCB1X3Nob3J0IHNlY3RvciwgdV9zaG9ydCBsZW5ndGgsIHVfY2hhciBkcml2ZSk7Ci0KLXN0YXRpYyBpbnQgcHMyZXNkaV9vdXRfY21kX2Jsayh1X3Nob3J0ICogY21kX2Jsayk7Ci0KLXN0YXRpYyB2b2lkIHBzMmVzZGlfcHJlcF9kbWEoY2hhciAqYnVmZmVyLCB1X3Nob3J0IGxlbmd0aCwgdV9jaGFyIGRtYV94bW9kZSk7Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBwczJlc2RpX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgdm9pZCAoKmN1cnJlbnRfaW50X2hhbmRsZXIpICh1X2ludCkgPSBOVUxMOwotc3RhdGljIHZvaWQgcHMyZXNkaV9ub3JtYWxfaW50ZXJydXB0X2hhbmRsZXIodV9pbnQpOwotc3RhdGljIHZvaWQgcHMyZXNkaV9pbml0aWFsX3Jlc2V0X2ludF9oYW5kbGVyKHVfaW50KTsKLXN0YXRpYyB2b2lkIHBzMmVzZGlfZ2VvbWV0cnlfaW50X2hhbmRsZXIodV9pbnQpOwotc3RhdGljIGludCBwczJlc2RpX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7Ci0KLXN0YXRpYyBpbnQgcHMyZXNkaV9yZWFkX3N0YXR1c193b3JkcyhpbnQgbnVtX3dvcmRzLCBpbnQgbWF4X3dvcmRzLCB1X3Nob3J0ICogYnVmZmVyKTsKLQotc3RhdGljIHZvaWQgZHVtcF9jbWRfY29tcGxldGVfc3RhdHVzKHVfaW50IGludF9yZXRfY29kZSk7Ci0KLXN0YXRpYyB2b2lkIHBzMmVzZGlfZ2V0X2RldmljZV9jZmcodm9pZCk7Ci0KLXN0YXRpYyB2b2lkIHBzMmVzZGlfcmVzZXRfdGltZXIodW5zaWduZWQgbG9uZyB1bnVzZWQpOwotCi1zdGF0aWMgdV9pbnQgZG1hX2FyYl9sZXZlbDsJCS8qIERNQSBhcmJpdHJhdGlvbiBsZXZlbCAqLwotCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocHMyZXNkaV9pbnQpOwotCi1zdGF0aWMgaW50IG5vX2ludF95ZXQ7Ci1zdGF0aWMgaW50IHBzMmVzZGlfZHJpdmVzOwotc3RhdGljIHVfc2hvcnQgaW9fYmFzZTsKLXN0YXRpYyBERUZJTkVfVElNRVIoZXNkaV90aW1lciwgcHMyZXNkaV9yZXNldF90aW1lciwgMCwgMCk7Ci1zdGF0aWMgaW50IHJlc2V0X3N0YXR1czsKLXN0YXRpYyBpbnQgcHMyZXNkaV9zbG90ID0gLTE7Ci1zdGF0aWMgaW50IHRwNzIwZXNkaSA9IDA7CS8qIElzIGl0IEludGVncmF0ZWQgRVNESSBvZiBUaGlua1BhZC03MjA/ICovCi1zdGF0aWMgaW50IGludGdfZXNkaSA9IDA7ICAgICAgIC8qIElmIGludGVncmF0ZWQgYWRhcHRlciAqLwotc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgewotCXVuc2lnbmVkIGludCBoZWFkLCBzZWN0LCBjeWwsIHdwY29tLCBsem9uZSwgY3RsOwotfTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHMyZXNkaV9sb2NrKTsKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcHMyZXNkaV9xdWV1ZTsKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY3VycmVudF9yZXE7Ci0KLSNpZiAwCi0jaWYgMAkJCQkvKiB0cnkgYm90aCAtIEkgZG9uJ3Qga25vdyB3aGljaCBvbmUgaXMgYmV0dGVyLi4uIFVCICovCi1zdGF0aWMgc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgcHMyZXNkaV9pbmZvW01BWF9IRF0gPQotewotCXs0LCA0OCwgMTU1MywgMCwgMCwgMH0sCi0JezAsIDAsIDAsIDAsIDAsIDB9fTsKLSNlbHNlCi1zdGF0aWMgc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgcHMyZXNkaV9pbmZvW01BWF9IRF0gPQotewotCXs2NCwgMzIsIDE2MSwgMCwgMCwgMH0sCi0JezAsIDAsIDAsIDAsIDAsIDB9fTsKLSNlbmRpZgotI2VuZGlmCi1zdGF0aWMgc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgcHMyZXNkaV9pbmZvW01BWF9IRF0gPQotewotCXswLCAwLCAwLCAwLCAwLCAwfSwKLQl7MCwgMCwgMCwgMCwgMCwgMH19OwotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBzMmVzZGlfZm9wcyA9Ci17Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5nZXRnZW8JCT0gcHMyZXNkaV9nZXRnZW8sCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmRpc2sgKnBzMmVzZGlfZ2VuZGlza1syXTsKLQotLyogaW5pdGlhbGl6YXRpb24gcm91dGluZSBjYWxsZWQgYnkgbGxfcndfYmxrLmMgICAqLwotc3RhdGljIGludCBfX2luaXQgcHMyZXNkaV9pbml0KHZvaWQpCi17Ci0KLQlpbnQgZXJyb3IgPSAwOwotCi0JLyogcmVnaXN0ZXIgdGhlIGRldmljZSAtIHBhc3MgdGhlIG5hbWUgYW5kIG1ham9yIG51bWJlciAqLwotCWlmIChyZWdpc3Rlcl9ibGtkZXYoUFMyRVNESV9NQUpPUiwgImVkIikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBzZXQgdXAgc29tZSBnbG9iYWwgaW5mb3JtYXRpb24gLSBpbmRpY2F0aW5nIGRldmljZSBzcGVjaWZpYyBpbmZvICovCi0JcHMyZXNkaV9xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX3BzMmVzZGlfcmVxdWVzdCwgJnBzMmVzZGlfbG9jayk7Ci0JaWYgKCFwczJlc2RpX3F1ZXVlKSB7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KFBTMkVTRElfTUFKT1IsICJlZCIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBzb21lIG1pbm9yIGhvdXNla2VlcGluZyAtIHNldHVwIHRoZSBnbG9iYWwgZ2VuZGlzayBzdHJ1Y3R1cmUgKi8KLQllcnJvciA9IHBzMmVzZGlfZ2VuaW5pdCgpOwotCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUzJFU0RJOiBlcnJvciBpbml0aWFsaXNpbmciCi0JCQkiIGRldmljZSwgcmVsZWFzaW5nIHJlc291cmNlc1xuIik7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KFBTMkVTRElfTUFKT1IsICJlZCIpOwotCQlibGtfY2xlYW51cF9xdWV1ZShwczJlc2RpX3F1ZXVlKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQlyZXR1cm4gMDsKLX0JCQkJLyogcHMyZXNkaV9pbml0ICovCi0KLSNpZm5kZWYgTU9EVUxFCi0KLW1vZHVsZV9pbml0KHBzMmVzZGlfaW5pdCk7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbnQgY3lsW01BWF9IRF0gPSB7LTEsLTF9Owotc3RhdGljIGludCBoZWFkW01BWF9IRF0gPSB7LTEsIC0xfTsKLXN0YXRpYyBpbnQgc2VjdFtNQVhfSERdID0gey0xLCAtMX07Ci0KLW1vZHVsZV9wYXJhbSh0cDcyMGVzZGksIGJvb2wsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KGN5bCwgaW50LCBOVUxMLCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheShoZWFkLCBpbnQsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KHNlY3QsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLWludCBpbml0X21vZHVsZSh2b2lkKSB7Ci0JaW50IGRyaXZlOwotCi0JZm9yKGRyaXZlID0gMDsgZHJpdmUgPCBNQVhfSEQ7IGRyaXZlKyspIHsKLQkgICAgICAgIHN0cnVjdCBwczJlc2RpX2lfc3RydWN0ICppbmZvID0gJnBzMmVzZGlfaW5mb1tkcml2ZV07Ci0KLSAgICAgICAgCWlmIChjeWxbZHJpdmVdICE9IC0xKSB7Ci0JCSAgCWluZm8tPmN5bCA9IGluZm8tPmx6b25lID0gY3lsW2RyaXZlXTsKLQkJCWluZm8tPndwY29tID0gMDsKLQkJfQotICAgICAgICAJaWYgKGhlYWRbZHJpdmVdICE9IC0xKSB7Ci0JCQlpbmZvLT5oZWFkID0gaGVhZFtkcml2ZV07Ci0JCQlpbmZvLT5jdGwgPSAoaGVhZFtkcml2ZV0gPiA4ID8gOCA6IDApOwotCQl9Ci0gICAgICAgIAlpZiAoc2VjdFtkcml2ZV0gIT0gLTEpIGluZm8tPnNlY3QgPSBzZWN0W2RyaXZlXTsKLQl9Ci0JcmV0dXJuIHBzMmVzZGlfaW5pdCgpOwotfQotCi12b2lkCi1jbGVhbnVwX21vZHVsZSh2b2lkKSB7Ci0JaW50IGk7Ci0JaWYocHMyZXNkaV9zbG90KSB7Ci0JCW1jYV9tYXJrX2FzX3VudXNlZChwczJlc2RpX3Nsb3QpOwotCQltY2Ffc2V0X2FkYXB0ZXJfcHJvY2ZuKHBzMmVzZGlfc2xvdCwgTlVMTCwgTlVMTCk7Ci0JfQotCXJlbGVhc2VfcmVnaW9uKGlvX2Jhc2UsIDQpOwotCWZyZWVfZG1hKGRtYV9hcmJfbGV2ZWwpOwotCWZyZWVfaXJxKFBTMkVTRElfSVJRLCAmcHMyZXNkaV9nZW5kaXNrKTsKLQl1bnJlZ2lzdGVyX2Jsa2RldihQUzJFU0RJX01BSk9SLCAiZWQiKTsKLQlibGtfY2xlYW51cF9xdWV1ZShwczJlc2RpX3F1ZXVlKTsKLQlmb3IgKGkgPSAwOyBpIDwgcHMyZXNkaV9kcml2ZXM7IGkrKykgewotCQlkZWxfZ2VuZGlzayhwczJlc2RpX2dlbmRpc2tbaV0pOwotCQlwdXRfZGlzayhwczJlc2RpX2dlbmRpc2tbaV0pOwotCX0KLX0KLSNlbmRpZiAvKiBNT0RVTEUgKi8KLQotLyogaGFuZGxlcyBib290IHRpbWUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KLXZvaWQgX19pbml0IHRwNzIwX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQotewotCS8qIG5vIHBhcmFtcywganVzdCBzZXRzIHRoZSB0cDcyMGVzZGkgZmxhZyBpZiBpdCBleGlzdHMgKi8KLQotCXByaW50aygiJXM6IFRQIDcyMCBFU0RJIGZsYWcgc2V0XG4iLCBERVZJQ0VfTkFNRSk7Ci0JdHA3MjBlc2RpID0gMTsKLX0KLQotdm9pZCBfX2luaXQgZWRfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpCi17Ci0JaW50IGhkaW5kID0gMDsKLQotCS8qIGhhbmRsZXMgMyBwYXJhbWV0ZXJzIG9ubHkgLSBjb3JyZXNwb25kaW5nIHRvCi0JICAgMS4gTnVtYmVyIG9mIGN5bGluZGVycwotCSAgIDIuIE51bWJlciBvZiBoZWFkcwotCSAgIDMuIFNlY3RvcnMvdHJhY2sKLQkgKi8KLQotCWlmIChpbnRzWzBdICE9IDMpCi0JCXJldHVybjsKLQotCS8qIHByaW50IG91dCB0aGUgaW5mb3JtYXRpb24gLSBzZWVuIGF0IGJvb3QgdGltZSAqLwotCXByaW50aygiJXM6IGludHNbMF09JWQgaW50c1sxXT0lZCBpbnRzWzJdPSVkIGludHNbM109JWRcbiIsCi0JICAgICAgIERFVklDRV9OQU1FLCBpbnRzWzBdLCBpbnRzWzFdLCBpbnRzWzJdLCBpbnRzWzNdKTsKLQotCS8qIHNldCB0aGUgaW5kZXggaW50byBkZXZpY2Ugc3BlY2lmaWMgaW5mb3JtYXRpb24gdGFibGUgKi8KLQlpZiAocHMyZXNkaV9pbmZvWzBdLmhlYWQgIT0gMCkKLQkJaGRpbmQgPSAxOwotCi0JLyogc2V0IHVwIGFsbCB0aGUgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JcHMyZXNkaV9pbmZvW2hkaW5kXS5oZWFkID0gaW50c1syXTsKLQlwczJlc2RpX2luZm9baGRpbmRdLnNlY3QgPSBpbnRzWzNdOwotCXBzMmVzZGlfaW5mb1toZGluZF0uY3lsID0gaW50c1sxXTsKLQlwczJlc2RpX2luZm9baGRpbmRdLndwY29tID0gMDsKLQlwczJlc2RpX2luZm9baGRpbmRdLmx6b25lID0gaW50c1sxXTsKLQlwczJlc2RpX2luZm9baGRpbmRdLmN0bCA9IChpbnRzWzJdID4gOCA/IDggOiAwKTsKLSNpZiAwCQkJCS8qIHRoaXMgbWF5IGJlIG5lZWRlZCBmb3IgUFMyL01vZC44MCwgYnV0IGl0IGh1cnRzIFRoaW5rUGFkISAqLwotCXBzMmVzZGlfZHJpdmVzID0gaGRpbmQgKyAxOwkvKiBpbmNyZW1lbnQgaW5kZXggZm9yIHRoZSBuZXh0IHRpbWUgKi8KLSNlbmRpZgotfQkJCQkvKiBlZF9zZXR1cCAqLwotCi1zdGF0aWMgaW50IHBzMmVzZGlfZ2V0aW5mbyhjaGFyICpidWYsIGludCBzbG90LCB2b2lkICpkKQotewotCWludCBsZW4gPSAwOwotCi0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiRE1BIEFyYml0cmF0aW9uIExldmVsOiAlZFxuIiwKLQkJICAgICAgIGRtYV9hcmJfbGV2ZWwpOwotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIklPIFBvcnQ6ICV4XG4iLCBpb19iYXNlKTsKLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJJUlE6IDE0XG4iKTsKLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJEcml2ZXM6ICVkXG4iLCBwczJlc2RpX2RyaXZlcyk7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0vKiBwczIgZXNkaSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiAtIGNhbGxlZCB0aHJ1IHRoZSBnZW5kaXNrIGNoYWluICovCi1zdGF0aWMgaW50IF9faW5pdCBwczJlc2RpX2dlbmluaXQodm9pZCkKLXsKLQkvKgotCSAgIFRoZSBmaXJzdCBwYXJ0IGNvbnRhaW5zIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlCi0JICAgZm9yIHRoZSBFU0RJIGRpc2sgc3Vic3lzdGVtLiAgQWxsIHdlIHJlYWxseSBkbwotCSAgIGlzIHNlYXJjaCBmb3IgdGhlIFBPUyByZWdpc3RlcnMgb2YgdGhlIGNvbnRyb2xsZXIKLQkgICB0byBkbyBzb21lIHNpbXBsZSBzZXR1cCBvcGVyYXRpb25zLiAgRmlyc3QsIHdlCi0JICAgbXVzdCBlbnN1cmUgdGhhdCB0aGUgY29udHJvbGxlciBpcyBpbnN0YWxsZWQsCi0JICAgZW5hYmxlZCwgYW5kIGNvbmZpZ3VyZWQgYXMgUFJJTUFSWS4gIFRoZW4gd2UgbXVzdAotCSAgIGRldGVybWluZSB0aGUgRE1BIGFyYml0cmF0aW9uIGxldmVsIGJlaW5nIHVzZWQgYnkKLQkgICB0aGUgY29udHJvbGxlciBzbyB3ZSBjYW4gaGFuZGxlIGRhdGEgdHJhbnNmZXIKLQkgICBvcGVyYXRpb25zIHByb3Blcmx5LiAgSWYgYWxsIG9mIHRoaXMgd29ya3MsIHRoZW4KLQkgICB3ZSB3aWxsIHNldCB0aGUgSU5JVF9GTEFHIHRvIGEgbm9uLXplcm8gdmFsdWUuCi0JICovCi0KLQlpbnQgc2xvdCA9IDAsIGksIHJlc2V0X3N0YXJ0LCByZXNldF9lbmQ7Ci0JdV9jaGFyIHN0YXR1czsKLQl1bnNpZ25lZCBzaG9ydCBhZGFwdGVySUQ7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmICgoc2xvdCA9IG1jYV9maW5kX2FkYXB0ZXIoSU5UR19FU0RJX0lELCAwKSkgIT0gTUNBX05PVEZPVU5EKSB7Ci0JCWFkYXB0ZXJJRCA9IElOVEdfRVNESV9JRDsKLQkJcHJpbnRrKCIlczogaW50ZWdyYXRlZCBFU0RJIGFkYXB0ZXIgZm91bmQgaW4gc2xvdCAlZFxuIiwKLQkJICAgICAgIERFVklDRV9OQU1FLCBzbG90KzEpOwotI2lmbmRlZiBNT0RVTEUKLQkJbWNhX3NldF9hZGFwdGVyX25hbWUoc2xvdCwgIlBTLzIgSW50ZWdyYXRlZCBFU0RJIik7Ci0jZW5kaWYKLQl9IGVsc2UgaWYgKChzbG90ID0gbWNhX2ZpbmRfYWRhcHRlcihOUk1MX0VTRElfSUQsIDApKSAhPSAtMSkgewotCQlhZGFwdGVySUQgPSBOUk1MX0VTRElfSUQ7Ci0JCXByaW50aygiJXM6IG5vcm1hbCBFU0RJIGFkYXB0ZXIgZm91bmQgaW4gc2xvdCAlZFxuIiwKLQkJICAgICAgIERFVklDRV9OQU1FLCBzbG90KzEpOwotCQltY2Ffc2V0X2FkYXB0ZXJfbmFtZShzbG90LCAiUFMvMiBFU0RJIik7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHMyZXNkaV9zbG90ID0gc2xvdDsKLQltY2FfbWFya19hc191c2VkKHNsb3QpOwotCW1jYV9zZXRfYWRhcHRlcl9wcm9jZm4oc2xvdCwgKE1DQV9Qcm9jRm4pIHBzMmVzZGlfZ2V0aW5mbywgTlVMTCk7Ci0KLQkvKiBGb3VuZCB0aGUgc2xvdCAtIHJlYWQgdGhlIFBPUyByZWdpc3RlciAyIHRvIGdldCB0aGUgbmVjZXNzYXJ5Ci0JICAgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLiAgUE9TIHJlZ2lzdGVyIDIgaGFzIHRoZQotCSAgIGZvbGxvd2luZyBpbmZvcm1hdGlvbiA6Ci0JICAgQml0ICAgICAgICAgICBGdW5jdGlvbgotCSAgIDcgICAgICAgICAgICAgcmVzZXJ2ZWQgPSAwCi0JICAgNiAgICAgICAgICAgICBhcmJpdHJhdGlvbiBtZXRob2QKLQkgICAwIC0gZmFpcm5lc3MgZW5hYmxlZAotCSAgIDEgLSBmYWlybmVzcyBkaXNhYmxlZCwgbGluZWFyIHByaW9yaXR5IGFzc2lnbm1lbnQKLQkgICA1LTIgICAgICAgICAgIGFyYml0cmF0aW9uIGxldmVsCi0JICAgMSAgICAgICAgICAgICBhbHRlcm5hdGUgYWRkcmVzcwotCSAgIDEgICAgICAgICAgICAgIGFsdGVybmF0ZSBhZGRyZXNzCi0JICAgMCAtIHVzZSBhZGRyZXNzZXMgMHgzNTEwIC0gMHgzNTE3Ci0JICAgMCAgICAgICAgICAgICBhZGFwdGVyIGVuYWJsZQotCSAqLwotCi0Jc3RhdHVzID0gbWNhX3JlYWRfc3RvcmVkX3BvcyhzbG90LCAyKTsKLQkvKiBpcyBpdCBlbmFibGVkID8gKi8KLQlpZiAoIShzdGF0dXMgJiBTVEFUVVNfRU5BQkxFRCkpIHsKLQkJcHJpbnRrKCIlczogRVNESSBhZGFwdGVyIGRpc2FibGVkXG4iLCBERVZJQ0VfTkFNRSk7Ci0JCWVycm9yID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0MTsKLQl9Ci0JLyogdHJ5IHRvIGdyYWIgSVJRLCBhbmQgdHJ5IHRvIGdyYWIgYSBzbG93IElSUSBpZiBpdCBmYWlscywgc28gd2UgY2FuCi0JICAgc2hhcmUgd2l0aCB0aGUgU0NTSSBkcml2ZXIgKi8KLQlpZiAocmVxdWVzdF9pcnEoUFMyRVNESV9JUlEsIHBzMmVzZGlfaW50ZXJydXB0X2hhbmRsZXIsCi0JCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAiUFMvMiBFU0RJIiwgJnBzMmVzZGlfZ2VuZGlzaykKLQkgICAgJiYgcmVxdWVzdF9pcnEoUFMyRVNESV9JUlEsIHBzMmVzZGlfaW50ZXJydXB0X2hhbmRsZXIsCi0JCQkgICBJUlFGX1NIQVJFRCwgIlBTLzIgRVNESSIsICZwczJlc2RpX2dlbmRpc2spCi0JICAgICkgewotCQlwcmludGsoIiVzOiBVbmFibGUgdG8gZ2V0IElSUSAlZFxuIiwgREVWSUNFX05BTUUsIFBTMkVTRElfSVJRKTsKLQkJZXJyb3IgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX291dDE7Ci0JfQotCWlmIChzdGF0dXMgJiBTVEFUVVNfQUxURVJOQVRFKQotCQlpb19iYXNlID0gQUxUX0lPX0JBU0U7Ci0JZWxzZQotCQlpb19iYXNlID0gUFJJTUFSWV9JT19CQVNFOwotCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb19iYXNlLCA0LCAiZWQiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIlVuYWJsZSB0byByZXF1ZXN0IHJlZ2lvbiAweCV4XG4iLCBpb19iYXNlKTsKLQkJZXJyb3IgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX291dDI7Ci0JfQotCS8qIGdldCB0aGUgZG1hIGFyYml0cmF0aW9uIGxldmVsICovCi0JZG1hX2FyYl9sZXZlbCA9IChzdGF0dXMgPj4gMikgJiAweGY7Ci0KLQkvKiBCQSAqLwotCXByaW50aygiJXM6IERNQSBhcmJpdHJhdGlvbiBsZXZlbCA6ICVkXG4iLAotCSAgICAgICBERVZJQ0VfTkFNRSwgZG1hX2FyYl9sZXZlbCk7Ci0KLQlMSVRFX09OOwotCWN1cnJlbnRfaW50X2hhbmRsZXIgPSBwczJlc2RpX2luaXRpYWxfcmVzZXRfaW50X2hhbmRsZXI7Ci0JcmVzZXRfY3RybCgpOwotCXJlc2V0X3N0YXR1cyA9IDA7Ci0JcmVzZXRfc3RhcnQgPSBqaWZmaWVzOwotCXdoaWxlICghcmVzZXRfc3RhdHVzKSB7Ci0JCWluaXRfdGltZXIoJmVzZGlfdGltZXIpOwotCQllc2RpX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7Ci0JCWVzZGlfdGltZXIuZGF0YSA9IDA7Ci0JCWFkZF90aW1lcigmZXNkaV90aW1lcik7Ci0JCXNsZWVwX29uKCZwczJlc2RpX2ludCk7Ci0JfQotCXJlc2V0X2VuZCA9IGppZmZpZXM7Ci0JTElURV9PRkY7Ci0JcHJpbnRrKCIlczogcmVzZXQgaW50ZXJydXB0IGFmdGVyICVkIGppZmZpZXMsICAldS4lMDJ1IHNlY3NcbiIsCi0JICAgICAgIERFVklDRV9OQU1FLCByZXNldF9lbmQgLSByZXNldF9zdGFydCwgKHJlc2V0X2VuZCAtIHJlc2V0X3N0YXJ0KSAvIEhaLAotCSAgICAgICAocmVzZXRfZW5kIC0gcmVzZXRfc3RhcnQpICUgSFopOwotCi0KLQkvKiBJbnRlZ3JhdGVkIEVTREkgRGlzayBhbmQgQ29udHJvbGxlciBoYXMgb25seSBvbmUgZHJpdmUhICovCi0JaWYgKGFkYXB0ZXJJRCA9PSBJTlRHX0VTRElfSUQpIHsvKiBpZiBub3QgIm5vcm1hbCIgUFMyIEVTREkgYWRhcHRlciAqLwotCQlwczJlc2RpX2RyaXZlcyA9IDE7CS8qIHRoZW4gd2UgaGF2ZSBvbmx5IG9uZSBwaHlzaWNhbCBkaXNrISAqLwkJaW50Z19lc2RpID0gMTsKLQl9Ci0KLQotCi0JLyogZmluYWxseSB0aGlzIHBhcnQgc2V0cyB1cCBzb21lIGdsb2JhbCBkYXRhIHN0cnVjdHVyZXMgZXRjLiAqLwotCi0JcHMyZXNkaV9nZXRfZGV2aWNlX2NmZygpOwotCi0JLyogc29tZSBhbm5veWFuY2UgaW4gdGhlIGFib3ZlIHJvdXRpbmUgcmV0dXJucyBUV08gZHJpdmVzPwotCSBJcyBzb21ldGhpbmcgZWxzZSBoYXBwaW5pbmcgaW4gdGhlIGJhY2tncm91bmQ/Ci0JIFJlZ2F1cmRsZXNzIHdlIGZpeCB0aGUgIyBvZiBkcml2ZXMgYWdhaW4uIEFKSyAqLwotCS8qIEludGVncmF0ZWQgRVNESSBEaXNrIGFuZCBDb250cm9sbGVyIGhhcyBvbmx5IG9uZSBkcml2ZSEgKi8KLQlpZiAoYWRhcHRlcklEID09IElOVEdfRVNESV9JRCkJLyogaWYgbm90ICJub3JtYWwiIFBTMiBFU0RJIGFkYXB0ZXIgKi8KLQkJcHMyZXNkaV9kcml2ZXMgPSAxOwkvKiBOb3QgdGhyZWUgb3IgdHdvLCBPTkUgREFNTklUISAqLwotCi0JY3VycmVudF9pbnRfaGFuZGxlciA9IHBzMmVzZGlfbm9ybWFsX2ludGVycnVwdF9oYW5kbGVyOwotCi0JaWYgKHJlcXVlc3RfZG1hKGRtYV9hcmJfbGV2ZWwsICJlZCIpICE9MCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUzJFU0RJOiBDYW4ndCByZXF1ZXN0IGRtYS1jaGFubmVsICVkXG4iCi0JCQksKGludCkgZG1hX2FyYl9sZXZlbCk7Ci0JCWVycm9yID0gLUVCVVNZOwotCQlnb3RvIGVycl9vdXQzOwotCX0KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocHMyZXNkaV9xdWV1ZSwgMTI4KTsKLQotCWVycm9yID0gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgcHMyZXNkaV9kcml2ZXM7IGkrKykgewotCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFsbG9jX2Rpc2soNjQpOwotCQlpZiAoIWRpc2spCi0JCQlnb3RvIGVycl9vdXQ0OwotCQlkaXNrLT5tYWpvciA9IFBTMkVTRElfTUFKT1I7Ci0JCWRpc2stPmZpcnN0X21pbm9yID0gaTw8NjsKLQkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJlZCVjIiwgJ2EnK2kpOwotCQlkaXNrLT5mb3BzID0gJnBzMmVzZGlfZm9wczsKLQkJcHMyZXNkaV9nZW5kaXNrW2ldID0gZGlzazsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHMyZXNkaV9kcml2ZXM7IGkrKykgewotCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBzMmVzZGlfZ2VuZGlza1tpXTsKLQkJc2V0X2NhcGFjaXR5KGRpc2ssIHBzMmVzZGlfaW5mb1tpXS5oZWFkICogcHMyZXNkaV9pbmZvW2ldLnNlY3QgKgotCQkJCXBzMmVzZGlfaW5mb1tpXS5jeWwpOwotCQlkaXNrLT5xdWV1ZSA9IHBzMmVzZGlfcXVldWU7Ci0JCWRpc2stPnByaXZhdGVfZGF0YSA9ICZwczJlc2RpX2luZm9baV07Ci0JCWFkZF9kaXNrKGRpc2spOwotCX0KLQlyZXR1cm4gMDsKLWVycl9vdXQ0OgotCXdoaWxlIChpLS0pCi0JCXB1dF9kaXNrKHBzMmVzZGlfZ2VuZGlza1tpXSk7Ci1lcnJfb3V0MzoKLQlyZWxlYXNlX3JlZ2lvbihpb19iYXNlLCA0KTsKLWVycl9vdXQyOgotCWZyZWVfaXJxKFBTMkVTRElfSVJRLCAmcHMyZXNkaV9nZW5kaXNrKTsKLWVycl9vdXQxOgotCWlmKHBzMmVzZGlfc2xvdCkgewotCQltY2FfbWFya19hc191bnVzZWQocHMyZXNkaV9zbG90KTsKLQkJbWNhX3NldF9hZGFwdGVyX3Byb2NmbihwczJlc2RpX3Nsb3QsIE5VTEwsIE5VTEwpOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwczJlc2RpX2dldF9kZXZpY2VfY2ZnKHZvaWQpCi17Ci0JdV9zaG9ydCBjbWRfYmxrW1RZUEVfMF9DTURfQkxLX0xFTkdUSF07Ci0KLQkvKkJBICovIHByaW50aygiJXM6IERyaXZlIDBcbiIsIERFVklDRV9OQU1FKTsKLQljdXJyZW50X2ludF9oYW5kbGVyID0gcHMyZXNkaV9nZW9tZXRyeV9pbnRfaGFuZGxlcjsKLQljbWRfYmxrWzBdID0gQ01EX0dFVF9ERVZfQ09ORklHIHwgMHg2MDA7Ci0JY21kX2Jsa1sxXSA9IDA7Ci0Jbm9faW50X3lldCA9IFRSVUU7Ci0JcHMyZXNkaV9vdXRfY21kX2JsayhjbWRfYmxrKTsKLQlpZiAobm9faW50X3lldCkKLQkJc2xlZXBfb24oJnBzMmVzZGlfaW50KTsKLQotCWlmIChwczJlc2RpX2RyaXZlcyA+IDEpIHsKLQkJcHJpbnRrKCIlczogRHJpdmUgMVxuIiwgREVWSUNFX05BTUUpOwkvKkJBICovCi0JCWNtZF9ibGtbMF0gPSBDTURfR0VUX0RFVl9DT05GSUcgfCAoMSA8PCA1KSB8IDB4NjAwOwotCQljbWRfYmxrWzFdID0gMDsKLQkJbm9faW50X3lldCA9IFRSVUU7Ci0JCXBzMmVzZGlfb3V0X2NtZF9ibGsoY21kX2Jsayk7Ci0JCWlmIChub19pbnRfeWV0KQotCQkJc2xlZXBfb24oJnBzMmVzZGlfaW50KTsKLQl9CQkJLyogaWYgc2Vjb25kIHBoeXNpY2FsIGRyaXZlIGlzIHByZXNlbnQgKi8KLQlyZXR1cm47Ci19Ci0KLS8qIHN0cmF0ZWd5IHJvdXRpbmUgdGhhdCBoYW5kbGVzIG1vc3Qgb2YgdGhlIElPIHJlcXVlc3RzICovCi1zdGF0aWMgdm9pZCBkb19wczJlc2RpX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiBxKQotewotCXN0cnVjdCByZXF1ZXN0ICpyZXE7Ci0JLyogc2luY2UsIHRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGNsZWFyZWQgLSB0aGV5IAotCSAgIG11c3QgYmUgYmVmb3JlIGl0IGZpbmlzaGVzICAqLwotCi0JcmVxID0gZWx2X25leHRfcmVxdWVzdChxKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuOwotCi0jaWYgMAotCXByaW50aygiJXM6Z290IHJlcXVlc3QuIGRldmljZSA6ICVzIGNvbW1hbmQgOiAlZCAgc2VjdG9yIDogJWxkIGNvdW50IDogJWxkLCBidWZmZXI6ICVwXG4iLAotCSAgICAgICBERVZJQ0VfTkFNRSwKLQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsCi0JICAgICAgIHJlcS0+Y21kLCByZXEtPnNlY3RvciwKLQkgICAgICAgcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsIHJlcS0+YnVmZmVyKTsKLSNlbmRpZgotCi0JLyogY2hlY2sgZm9yIGFib3ZlIDE2TWIgZG1hcyAqLwotCWlmIChpc2FfdmlydF90b19idXMocmVxLT5idWZmZXIgKyByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyAqIDUxMikgPiAxNiAqIE1CKSB7Ci0JCXByaW50aygiJXM6IERNQSBhYm92ZSAxNk1CIG5vdCBzdXBwb3J0ZWRcbiIsIERFVklDRV9OQU1FKTsKLQkJZW5kX3JlcXVlc3QocmVxLCBGQUlMKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChyZXEtPnNlY3RvcityZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA+IGdldF9jYXBhY2l0eShyZXEtPnJxX2Rpc2spKSB7Ci0JCXByaW50aygiR3Jyci4gZXJyb3IuIHBzMmVzZGlfZHJpdmVzOiAlZCwgJWxsdSAlbGx1XG4iLAotCQkgICAgcHMyZXNkaV9kcml2ZXMsIHJlcS0+c2VjdG9yLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylnZXRfY2FwYWNpdHkocmVxLT5ycV9kaXNrKSk7Ci0JCWVuZF9yZXF1ZXN0KHJlcSwgRkFJTCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKHJxX2RhdGFfZGlyKHJlcSkpIHsKLQljYXNlIFJFQUQ6Ci0JCXBzMmVzZGlfcmVhZHdyaXRlKFJFQUQsIHJlcSk7Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEU6Ci0JCXBzMmVzZGlfcmVhZHdyaXRlKFdSSVRFLCByZXEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBVbmtub3duIGNvbW1hbmRcbiIsIHJlcS0+cnFfZGlzay0+ZGlza19uYW1lKTsKLQkJZW5kX3JlcXVlc3QocmVxLCBGQUlMKTsKLQkJYnJlYWs7Ci0JfQkJLyogaGFuZGxlIGRpZmZlcmVudCBjb21tYW5kcyAqLwotfQkJCQkvKiBtYWluIHN0cmF0ZWd5IHJvdXRpbmUgKi8KLQotLyogcmVzZXRzIHRoZSBFU0RJIGFkYXB0ZXIgKi8KLXN0YXRpYyB2b2lkIHJlc2V0X2N0cmwodm9pZCkKLXsKLQotCXVfbG9uZyBleHBpcmU7Ci0JdV9zaG9ydCBzdGF0dXM7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgY29udHJvbGxlciAqLwotCXN0YXR1cyA9IGluYihFU0RJX0lOVFJQVCk7Ci0Jb3V0Yigoc3RhdHVzICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwkvKiB0byBiZSBzdXJlIHdlIGRvbid0IGhhdmUKLQkJCQkJCQkgICBhbnkgaW50ZXJydXB0IHBlbmRpbmcuLi4gKi8KLQlvdXRiX3AoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQotCS8qIHJlYWQgdGhlIEVTREkgc3RhdHVzIHBvcnQgLSBpZiB0aGUgY29udHJvbGxlciBpcyBub3QgYnVzeSwKLQkgICBzaW1wbHkgZG8gYSBzb2Z0IHJlc2V0IChmYXN0KSAtIG90aGVyd2lzZSB3ZSdsbCBoYXZlIHRvIGRvIGEKLQkgICBoYXJkIChzbG93KSByZXNldC4gICovCi0JaWYgKCEoaW5iX3AoRVNESV9TVEFUVVMpICYgU1RBVFVTX0JVU1kpKSB7Ci0JCS8qQkEgKi8gcHJpbnRrKCIlczogc29mdCByZXNldC4uLlxuIiwgREVWSUNFX05BTUUpOwotCQlvdXRiX3AoQ1RSTF9TT0ZUX1JFU0VULCBFU0RJX0FUVE4pOwotCX0KLQkvKiBzb2Z0IHJlc2V0ICovIAotCWVsc2UgewotCQkvKkJBICovCi0JCXByaW50aygiJXM6IGhhcmQgcmVzZXQuLi5cbiIsIERFVklDRV9OQU1FKTsKLQkJb3V0Yl9wKENUUkxfSEFSRF9SRVNFVCwgRVNESV9DT05UUk9MKTsKLQkJZXhwaXJlID0gamlmZmllcyArIDIqSFo7Ci0JCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBleHBpcmUpKTsKLQkJb3V0Yl9wKDEsIEVTRElfQ09OVFJPTCk7Ci0JfQkJCS8qIGhhcmQgcmVzZXQgKi8KLQotCi19CQkJCS8qIHJlc2V0IHRoZSBjb250cm9sbGVyICovCi0KLS8qIGNhbGxlZCBieSB0aGUgc3RyYXRlZ3kgcm91dGluZSB0byBoYW5kbGUgcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMgKi8KLXN0YXRpYyB2b2lkIHBzMmVzZGlfcmVhZHdyaXRlKGludCBjbWQsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IHBzMmVzZGlfaV9zdHJ1Y3QgKnAgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBibG9jayA9IHJlcS0+c2VjdG9yOwotCXVuc2lnbmVkIGNvdW50ID0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7Ci0JaW50IGRyaXZlID0gcCAtIHBzMmVzZGlfaW5mbzsKLQl1X3Nob3J0IHRyYWNrLCBoZWFkLCBjeWxpbmRlciwgc2VjdG9yOwotCXVfc2hvcnQgY21kX2Jsa1tUWVBFXzFfQ01EX0JMS19MRU5HVEhdOwotCi0JLyogZG8gc29tZSByZWxldmFudCBhcml0aG1hdGljICovCi0JdHJhY2sgPSBibG9jayAvIHAtPnNlY3Q7Ci0JaGVhZCA9IHRyYWNrICUgcC0+aGVhZDsKLQljeWxpbmRlciA9IHRyYWNrIC8gcC0+aGVhZDsKLQlzZWN0b3IgPSBibG9jayAlIHAtPnNlY3Q7Ci0KLSNpZiAwCi0JcHJpbnRrKCIlczogY3lsPSVkIGhlYWQ9JWQgc2VjdD0lZFxuIiwgREVWSUNFX05BTUUsIGN5bGluZGVyLCBoZWFkLCBzZWN0b3IpOwotI2VuZGlmCi0JLyogY2FsbCB0aGUgcm91dGluZSB0aGF0IGFjdHVhbGx5IGZpbGxzIG91dCBhIGNvbW1hbmQgYmxvY2sgKi8KLQlwczJlc2RpX2ZpbGxfY21kX2Jsb2NrCi0JICAgIChjbWRfYmxrLAotCSAgICAgKGNtZCA9PSBSRUFEKSA/IENNRF9SRUFEIDogQ01EX1dSSVRFLAotCSAgICAgY3lsaW5kZXIsIGhlYWQsIHNlY3RvciwgY291bnQsIGRyaXZlKTsKLQotCS8qIHNlbmQgdGhlIGNvbW1hbmQgYmxvY2sgdG8gdGhlIGNvbnRyb2xsZXIgKi8KLQljdXJyZW50X3JlcSA9IHJlcTsKLQlzcGluX3VubG9ja19pcnEoJnBzMmVzZGlfbG9jayk7Ci0JaWYgKHBzMmVzZGlfb3V0X2NtZF9ibGsoY21kX2JsaykpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcHMyZXNkaV9sb2NrKTsKLQkJcHJpbnRrKCIlczogQ29udHJvbGxlciBmYWlsZWRcbiIsIERFVklDRV9OQU1FKTsKLQkJaWYgKCgrK3JlcS0+ZXJyb3JzKSA+PSBNQVhfUkVUUklFUykKLQkJCWVuZF9yZXF1ZXN0KHJlcSwgRkFJTCk7Ci0JfQotCS8qIGNoZWNrIGZvciBmYWlsdXJlIHRvIHB1dCBvdXQgdGhlIGNvbW1hbmQgYmxvY2sgKi8gCi0JZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBzMmVzZGlfbG9jayk7Ci0jaWYgMAotCQlwcmludGsoIiVzOiB3YWl0aW5nIGZvciB4ZmVyXG4iLCBERVZJQ0VfTkFNRSk7Ci0jZW5kaWYKLQkJLyogdHVybiBkaXNrIGxpZ2h0cyBvbiAqLwotCQlMSVRFX09OOwotCX0KLQotfQkJCQkvKiBwczJlc2RpX3JlYWR3cml0ZSAqLwotCi0vKiBmaWxsIG91dCB0aGUgY29tbWFuZCBibG9jayAqLwotc3RhdGljIHZvaWQgcHMyZXNkaV9maWxsX2NtZF9ibG9jayh1X3Nob3J0ICogY21kX2JsaywgdV9zaG9ydCBjbWQsCi0gdV9zaG9ydCBjeWwsIHVfc2hvcnQgaGVhZCwgdV9zaG9ydCBzZWN0b3IsIHVfc2hvcnQgbGVuZ3RoLCB1X2NoYXIgZHJpdmUpCi17Ci0KLQljbWRfYmxrWzBdID0gKGRyaXZlIDw8IDUpIHwgY21kOwotCWNtZF9ibGtbMV0gPSBsZW5ndGg7Ci0JY21kX2Jsa1syXSA9ICgoY3lsICYgMHgxZikgPDwgMTEpIHwgKGhlYWQgPDwgNSkgfCBzZWN0b3I7Ci0JY21kX2Jsa1szXSA9IChjeWwgJiAweDNFMCkgPj4gNTsKLQotfQkJCQkvKiBmaWxsIG91dCB0aGUgY29tbWFuZCBibG9jayAqLwotCi0vKiB3cml0ZSBhIGNvbW1hbmQgYmxvY2sgdG8gdGhlIGNvbnRyb2xsZXIgKi8KLXN0YXRpYyBpbnQgcHMyZXNkaV9vdXRfY21kX2Jsayh1X3Nob3J0ICogY21kX2JsaykKLXsKLQotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgamlmOwotCXVfY2hhciBzdGF0dXM7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQotCS8qIGRvIG5vdCB3cml0ZSB0byB0aGUgY29udHJvbGxlciwgaWYgaXQgaXMgYnVzeSAqLwotCWZvciAoamlmID0gamlmZmllcyArIEVTRElfU1RBVF9USU1FT1VUOwotCQl0aW1lX2FmdGVyKGppZiwgamlmZmllcykgJiYKLQkJCShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX0JVU1kpOyApCi0JCTsKLQotI2lmIDAKLQlwcmludGsoIiVzOiBpKDEpPSVsZFxuIiwgREVWSUNFX05BTUUsIGppZik7Ci0jZW5kaWYKLQotCS8qIGlmIGRldmljZSBpcyBzdGlsbCBidXN5IC0gdGhlbiBqdXN0IHRpbWUgb3V0ICovCi0JaWYgKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfQlVTWSkgewotCQlwcmludGsoIiVzOiBwczJlc2RpX291dF9jbWQgdGltZWQgb3V0ICgxKVxuIiwgREVWSUNFX05BTUUpOwotCQlyZXR1cm4gRVJST1I7Ci0JfQkJCS8qIHRpbWVvdXQgPz8/ICovCi0JLyogU2V0IHVwIHRoZSBhdHRlbnRpb24gcmVnaXN0ZXIgaW4gdGhlIGNvbnRyb2xsZXIgKi8KLQlvdXRiKCgoKmNtZF9ibGspICYgMHhFMCkgfCAxLCBFU0RJX0FUVE4pOwotCi0jaWYgMAotCXByaW50aygiJXM6IHNlbmRpbmcgJWQgd29yZHMgdG8gY29udHJvbGxlclxuIiwgREVWSUNFX05BTUUsICgoKCpjbWRfYmxrKSA+PiAxNCkgKyAxKSA8PCAxKTsKLSNlbmRpZgotCi0JLyogb25lIGJ5IG9uZSBzZW5kIGVhY2ggd29yZCBvdXQgKi8KLQlmb3IgKGkgPSAoKCgqY21kX2JsaykgPj4gMTQpICsgMSkgPDwgMTsgaTsgaS0tKSB7Ci0JCXN0YXR1cyA9IGluYihFU0RJX1NUQVRVUyk7Ci0JCWZvciAoamlmID0gamlmZmllcyArIEVTRElfU1RBVF9USU1FT1VUOwotCQkgICAgIHRpbWVfYWZ0ZXIoamlmLCBqaWZmaWVzKSAmJiAoc3RhdHVzICYgU1RBVFVTX0JVU1kpICYmCi0JCSAgIChzdGF0dXMgJiBTVEFUVVNfQ01EX0lORik7IHN0YXR1cyA9IGluYihFU0RJX1NUQVRVUykpOwotCQlpZiAoKHN0YXR1cyAmIChTVEFUVVNfQlVTWSB8IFNUQVRVU19DTURfSU5GKSkgPT0gU1RBVFVTX0JVU1kpIHsKLSNpZiAwCi0JCQlwcmludGsoIiVzOiBzZW5kaW5nICUwNFhcbiIsIERFVklDRV9OQU1FLCAqY21kX2Jsayk7Ci0jZW5kaWYKLQkJCW91dHcoKmNtZF9ibGsrKywgRVNESV9DTURfSU5UKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygiJXM6IHBzMmVzZGlfb3V0X2NtZCB0aW1lZCBvdXQgd2hpbGUgc2VuZGluZyBjb21tYW5kIChzdGF0dXM9JTAyWClcbiIsCi0JCQkgICAgICAgREVWSUNFX05BTUUsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gRVJST1I7Ci0JCX0KLQl9CQkJLyogc2VuZCBhbGwgd29yZHMgb3V0ICovCi0JcmV0dXJuIE9LOwotfQkJCQkvKiBzZW5kIG91dCB0aGUgY29tbWFuZHMgKi8KLQotCi0vKiBwcmVwYXJlIGZvciBkbWEgLSBkbyBhbGwgdGhlIG5lY2Vzc2FyeSBzZXR1cCAqLwotc3RhdGljIHZvaWQgcHMyZXNkaV9wcmVwX2RtYShjaGFyICpidWZmZXIsIHVfc2hvcnQgbGVuZ3RoLCB1X2NoYXIgZG1hX3htb2RlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwotCi0JbWNhX2Rpc2FibGVfZG1hKGRtYV9hcmJfbGV2ZWwpOwotCi0JbWNhX3NldF9kbWFfYWRkcihkbWFfYXJiX2xldmVsLCBpc2FfdmlydF90b19idXMoYnVmZmVyKSk7Ci0KLQltY2Ffc2V0X2RtYV9jb3VudChkbWFfYXJiX2xldmVsLCBsZW5ndGggKiA1MTIgLyAyKTsKLQotCW1jYV9zZXRfZG1hX21vZGUoZG1hX2FyYl9sZXZlbCwgZG1hX3htb2RlKTsKLQotCW1jYV9lbmFibGVfZG1hKGRtYV9hcmJfbGV2ZWwpOwotCi0JcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7Ci0KLX0JCQkJLyogcHJlcGFyZSBmb3IgZG1hICovCi0KLQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgcHMyZXNkaV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JdV9pbnQgaW50X3JldF9jb2RlOwotCi0JaWYgKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfSU5UUikgewotCQlpbnRfcmV0X2NvZGUgPSBpbmIoRVNESV9JTlRSUFQpOwotCQlpZiAoY3VycmVudF9pbnRfaGFuZGxlcikgewotCQkJLyogRGlzYWJsZSBhZGFwdGVyIGludGVycnVwdHMgdGlsbCBwcm9jZXNzaW5nIGlzIGZpbmlzaGVkICovCi0JCQlvdXRiKENUUkxfRElTQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQkJY3VycmVudF9pbnRfaGFuZGxlcihpbnRfcmV0X2NvZGUpOwotCQl9IGVsc2UKLQkJCXByaW50aygiJXM6IGhlbHAgISBObyBpbnRlcnJ1cHQgaGFuZGxlci5cbiIsIERFVklDRV9OQU1FKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgcHMyZXNkaV9pbml0aWFsX3Jlc2V0X2ludF9oYW5kbGVyKHVfaW50IGludF9yZXRfY29kZSkKLXsKLQotCXN3aXRjaCAoaW50X3JldF9jb2RlICYgMHhmKSB7Ci0JY2FzZSBJTlRfUkVTRVQ6Ci0JCS8qQkEgKi8KLQkJcHJpbnRrKCIlczogaW5pdGlhbCByZXNldCBjb21wbGV0ZWQuXG4iLCBERVZJQ0VfTkFNRSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJd2FrZV91cCgmcHMyZXNkaV9pbnQpOwotCQlicmVhazsKLQljYXNlIElOVF9BVFROX0VSUk9SOgotCQlwcmludGsoIiVzOiBBdHRlbnRpb24gZXJyb3IuIGludGVycnVwdCBzdGF0dXMgOiAlMDJYXG4iLCBERVZJQ0VfTkFNRSwKLQkJICAgICAgIGludF9yZXRfY29kZSk7Ci0JCXByaW50aygiJXM6IHN0YXR1czogJTAyeFxuIiwgREVWSUNFX05BTUUsIGluYihFU0RJX1NUQVRVUykpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBpbml0aWFsIHJlc2V0IGhhbmRsZXIgcmVjZWl2ZWQgaW50ZXJydXB0OiAlMDJYXG4iLAotCQkgICAgICAgREVWSUNFX05BTUUsIGludF9yZXRfY29kZSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJYnJlYWs7Ci0JfQotCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBwczJlc2RpX2dlb21ldHJ5X2ludF9oYW5kbGVyKHVfaW50IGludF9yZXRfY29kZSkKLXsKLQl1X2ludCBzdGF0dXMsIGRyaXZlX251bTsKLQl1bnNpZ25lZCBsb25nIHJiYTsKLQlpbnQgaTsKLQotCWRyaXZlX251bSA9IGludF9yZXRfY29kZSA+PiA1OwotCXN3aXRjaCAoaW50X3JldF9jb2RlICYgMHhmKSB7Ci0JY2FzZSBJTlRfQ01EX0NPTVBMRVRFOgotCQlmb3IgKGkgPSBFU0RJX1RJTUVPVVQ7IGkgJiYgIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpOyBpLS0pOwotCQlpZiAoIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpKSB7Ci0JCQlwcmludGsoIiVzOiB0aW1lb3V0IHJlYWRpbmcgc3RhdHVzIHdvcmRcbiIsIERFVklDRV9OQU1FKTsKLQkJCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXN0YXR1cyA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlpZiAoKHN0YXR1cyAmIDB4MUYpID09IENNRF9HRVRfREVWX0NPTkZJRykgewotI2RlZmluZSBSRVBMWV9XT1JEUyA1CQkvKiB3ZSBhbHJlYWR5IHJlYWQgd29yZCAwICovCi0JCQl1X3Nob3J0IHJlcGx5W1JFUExZX1dPUkRTXTsKLQotCQkJaWYgKHBzMmVzZGlfcmVhZF9zdGF0dXNfd29yZHMoKHN0YXR1cyA+PiA4KSAtIDEsIFJFUExZX1dPUkRTLCByZXBseSkpIHsKLQkJCQkvKkJBICovCi0JCQkJcHJpbnRrKCIlczogRGV2aWNlIENvbmZpZ3VyYXRpb24gU3RhdHVzIGZvciBkcml2ZSAldVxuIiwKLQkJCQkgICAgICAgREVWSUNFX05BTUUsIGRyaXZlX251bSk7Ci0KLQkJCQlwcmludGsoIiVzOiBTcGFyZXMvY3lsczogJXUiLCBERVZJQ0VfTkFNRSwgcmVwbHlbMF0gPj4gOCk7Ci0KLQkJCQlwcmludGsKLQkJCQkgICAgKCJDb25maWcgYml0czogJXMlcyVzJXMlc1xuIiwKLQkJCQkgICAgIChyZXBseVswXSAmIENPTkZJR19JUykgPyAiSW52YWxpZCBTZWNvbmRhcnksICIgOiAiIiwKLQkJCQkgICAgICgocmVwbHlbMF0gJiBDT05GSUdfWkQpICYmICEocmVwbHlbMF0gJiBDT05GSUdfSVMpKQotCQkJCSA/ICJaZXJvIERlZmVjdCwgIiA6ICJEZWZlY3RzIFByZXNlbnQsICIsCi0JCQkJICAgICAocmVwbHlbMF0gJiBDT05GSUdfU0YpID8gIlNrZXdlZCBGb3JtYXQsICIgOiAiIiwKLQkJCQkgICAgIChyZXBseVswXSAmIENPTkZJR19GUikgPyAiUmVtb3ZhYmxlLCAiIDogIk5vbi1SZW1vdmFibGUsICIsCi0JCQkJICAgICAocmVwbHlbMF0gJiBDT05GSUdfUlQpID8gIk5vIFJldHJpZXMiIDogIlJldHJpZXMiKTsKLQotCQkJCXJiYSA9IHJlcGx5WzFdIHwgKCh1bnNpZ25lZCBsb25nKSByZXBseVsyXSA8PCAxNik7Ci0JCQkJcHJpbnRrKCIlczogTnVtYmVyIG9mIFJCQSdzOiAlbHVcbiIsIERFVklDRV9OQU1FLCByYmEpOwotCi0JCQkJcHJpbnRrKCIlczogUGh5c2ljYWwgbnVtYmVyIG9mIGN5bGluZGVyczogJXUsIFNlY3RvcnMvVHJhY2s6ICV1LCBIZWFkczogJXVcbiIsCi0JCQkJICAgICAgIERFVklDRV9OQU1FLCByZXBseVszXSwgcmVwbHlbNF0gPj4gOCwgcmVwbHlbNF0gJiAweGZmKTsKLQotCQkJCWlmICghcHMyZXNkaV9pbmZvW2RyaXZlX251bV0uaGVhZCkgewotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5oZWFkID0gNjQ7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLnNlY3QgPSAzMjsKLQkJCQkJcHMyZXNkaV9pbmZvW2RyaXZlX251bV0uY3lsID0gcmJhIC8gKDY0ICogMzIpOwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS53cGNvbSA9IDA7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLmx6b25lID0gcHMyZXNkaV9pbmZvW2RyaXZlX251bV0uY3lsOwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5jdGwgPSA4OwotCQkJCQlpZiAodHA3MjBlc2RpKSB7CS8qIHN0b3JlIHRoZSByZXRyaWV2ZWQgcGFyYW1ldGVycyAqLwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmhlYWQgPSByZXBseVs0XSAmIDBYZmY7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uc2VjdCA9IHJlcGx5WzRdID4+IDg7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uY3lsID0gcmVwbHlbM107Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0ud3Bjb20gPSAwOwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmx6b25lID0gcmVwbHlbM107Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoIWludGdfZXNkaSkKLQkJCQkJCQlwczJlc2RpX2RyaXZlcysrOwotCQkJCQl9Ci0JCQkJfQotI2lmZGVmIE9CU09MRVRFCi0JCQkJaWYgKCFwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5oZWFkKSB7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLmhlYWQgPSByZXBseVs0XSAmIDBYZmY7Ci0JCQkJCXBzMmVzZGlfaW5mb1tkcml2ZV9udW1dLnNlY3QgPSByZXBseVs0XSA+PiA4OwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5jeWwgPSByZXBseVszXTsKLQkJCQkJcHMyZXNkaV9pbmZvW2RyaXZlX251bV0ud3Bjb20gPSAwOwotCQkJCQlwczJlc2RpX2luZm9bZHJpdmVfbnVtXS5sem9uZSA9IHJlcGx5WzNdOwotCQkJCQlpZiAodHA3MjBlc2RpKSB7CS8qIHN0b3JlIHRoZSByZXRyaWV2ZWQgcGFyYW1ldGVycyAqLwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmhlYWQgPSByZXBseVs0XSAmIDBYZmY7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uc2VjdCA9IHJlcGx5WzRdID4+IDg7Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0uY3lsID0gcmVwbHlbM107Ci0JCQkJCQlwczJlc2RpX2luZm9bMF0ud3Bjb20gPSAwOwotCQkJCQkJcHMyZXNkaV9pbmZvWzBdLmx6b25lID0gcmVwbHlbM107Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlwczJlc2RpX2RyaXZlcysrOwotCQkJCQl9Ci0JCQkJfQotI2VuZGlmCi0KLQkJCX0gZWxzZQotCQkJCXByaW50aygiJXM6IGZhaWxlZCB3aGlsZSBnZXR0aW5nIGRldmljZSBjb25maWdcbiIsIERFVklDRV9OQU1FKTsKLSN1bmRlZiBSRVBMWV9XT1JEUwotCQl9IGVsc2UKLQkJCXByaW50aygiJXM6IGNvbW1hbmQgJTAyWCB1bmtub3duIGJ5IGdlb21ldHJ5IGhhbmRsZXJcbiIsCi0JCQkgICAgICAgREVWSUNFX05BTUUsIHN0YXR1cyAmIDB4MWYpOwotCi0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9BVFROX0VSUk9SOgotCQlwcmludGsoIiVzOiBBdHRlbnRpb24gZXJyb3IuIGludGVycnVwdCBzdGF0dXMgOiAlMDJYXG4iLCBERVZJQ0VfTkFNRSwKLQkJICAgICAgIGludF9yZXRfY29kZSk7Ci0JCXByaW50aygiJXM6IERldmljZSBub3QgYXZhaWxhYmxlXG4iLCBERVZJQ0VfTkFNRSk7Ci0JCWJyZWFrOwotCWNhc2UgSU5UX0NNRF9FQ0M6Ci0JY2FzZSBJTlRfQ01EX1JFVFJZOgotCWNhc2UgSU5UX0NNRF9FQ0NfUkVUUlk6Ci0JY2FzZSBJTlRfQ01EX1dBUk5JTkc6Ci0JY2FzZSBJTlRfQ01EX0FCT1JUOgotCWNhc2UgSU5UX0NNRF9GQUlMRUQ6Ci0JY2FzZSBJTlRfRE1BX0VSUjoKLQljYXNlIElOVF9DTURfQkxLX0VSUjoKLQkJLypCQSAqLyBwcmludGsoIiVzOiBXaGFhLiBFcnJvciBvY2N1cnJlZC4uLlxuIiwgREVWSUNFX05BTUUpOwotCQlkdW1wX2NtZF9jb21wbGV0ZV9zdGF0dXMoaW50X3JldF9jb2RlKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBVbmtub3duIGludGVycnVwdCByZWFzb246ICUwMlhcbiIsCi0JCSAgICAgICBERVZJQ0VfTkFNRSwgaW50X3JldF9jb2RlICYgMHhmKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlicmVhazsKLQl9Ci0KLQl3YWtlX3VwKCZwczJlc2RpX2ludCk7Ci0Jbm9faW50X3lldCA9IEZBTFNFOwotCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQotfQotCi1zdGF0aWMgdm9pZCBwczJlc2RpX25vcm1hbF9pbnRlcnJ1cHRfaGFuZGxlcih1X2ludCBpbnRfcmV0X2NvZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1X2ludCBzdGF0dXM7Ci0JdV9pbnQgZW5kaW5nOwotCWludCBpOwotCi0Jc3dpdGNoIChpbnRfcmV0X2NvZGUgJiAweDBmKSB7Ci0JY2FzZSBJTlRfVFJBTlNGRVJfUkVROgotCQlwczJlc2RpX3ByZXBfZG1hKGN1cnJlbnRfcmVxLT5idWZmZXIsCi0JCQkJIGN1cnJlbnRfcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsCi0JCSAgICAocnFfZGF0YV9kaXIoY3VycmVudF9yZXEpID09IFJFQUQpCi0JCSAgICA/IE1DQV9ETUFfTU9ERV8xNiB8IE1DQV9ETUFfTU9ERV9XUklURSB8IE1DQV9ETUFfTU9ERV9YRkVSCi0JCSAgICA6IE1DQV9ETUFfTU9ERV8xNiB8IE1DQV9ETUFfTU9ERV9SRUFEKTsKLQkJb3V0YihDVFJMX0VOQUJMRV9ETUEgfCBDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQllbmRpbmcgPSAtMTsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9BVFROX0VSUk9SOgotCQlwcmludGsoIiVzOiBBdHRlbnRpb24gZXJyb3IuIGludGVycnVwdCBzdGF0dXMgOiAlMDJYXG4iLCBERVZJQ0VfTkFNRSwKLQkJICAgICAgIGludF9yZXRfY29kZSk7Ci0JCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQkJZW5kaW5nID0gRkFJTDsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9DTURfQ09NUExFVEU6Ci0JCWZvciAoaSA9IEVTRElfVElNRU9VVDsgaSAmJiAhKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfU1RBVF9BVkFJTCk7IGktLSk7Ci0JCWlmICghKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfU1RBVF9BVkFJTCkpIHsKLQkJCXByaW50aygiJXM6IHRpbWVvdXQgcmVhZGluZyBzdGF0dXMgd29yZFxuIiwgREVWSUNFX05BTUUpOwotCQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQkJaWYgKCgrK2N1cnJlbnRfcmVxLT5lcnJvcnMpID49IE1BWF9SRVRSSUVTKQotCQkJCWVuZGluZyA9IEZBSUw7Ci0JCQllbHNlCi0JCQkJZW5kaW5nID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCQlzdGF0dXMgPSBpbncoRVNESV9TVFRfSU5UKTsKLQkJc3dpdGNoIChzdGF0dXMgJiAweDFGKSB7Ci0JCWNhc2UgKENNRF9SRUFEICYgMHhmZik6Ci0JCWNhc2UgKENNRF9XUklURSAmIDB4ZmYpOgotCQkJTElURV9PRkY7Ci0JCQlvdXRiKChpbnRfcmV0X2NvZGUgJiAweGUwKSB8IEFUVF9FT0ksIEVTRElfQVRUTik7Ci0JCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCQllbmRpbmcgPSBTVUNDRVM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiJXM6IGludGVycnVwdCBmb3IgdW5rbm93biBjb21tYW5kICUwMlhcbiIsCi0JCQkgICAgICAgREVWSUNFX05BTUUsIHN0YXR1cyAmIDB4MWYpOwotCQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQkJZW5kaW5nID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIElOVF9DTURfRUNDOgotCWNhc2UgSU5UX0NNRF9SRVRSWToKLQljYXNlIElOVF9DTURfRUNDX1JFVFJZOgotCQlMSVRFX09GRjsKLQkJZHVtcF9jbWRfY29tcGxldGVfc3RhdHVzKGludF9yZXRfY29kZSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQllbmRpbmcgPSBTVUNDRVM7Ci0JCWJyZWFrOwotCWNhc2UgSU5UX0NNRF9XQVJOSU5HOgotCWNhc2UgSU5UX0NNRF9BQk9SVDoKLQljYXNlIElOVF9DTURfRkFJTEVEOgotCWNhc2UgSU5UX0RNQV9FUlI6Ci0JCUxJVEVfT0ZGOwotCQlkdW1wX2NtZF9jb21wbGV0ZV9zdGF0dXMoaW50X3JldF9jb2RlKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCWlmICgoKytjdXJyZW50X3JlcS0+ZXJyb3JzKSA+PSBNQVhfUkVUUklFUykKLQkJCWVuZGluZyA9IEZBSUw7Ci0JCWVsc2UKLQkJCWVuZGluZyA9IC0xOwotCQlicmVhazsKLQotCWNhc2UgSU5UX0NNRF9CTEtfRVJSOgotCQlkdW1wX2NtZF9jb21wbGV0ZV9zdGF0dXMoaW50X3JldF9jb2RlKTsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCWVuZGluZyA9IEZBSUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBJTlRfQ01EX0ZPUk1BVDoKLQkJcHJpbnRrKCIlczogaHVoID8gV2hvIGlzc3VlZCB0aGlzIGZvcm1hdCBjb21tYW5kID9cbiIKLQkJICAgICAgICxERVZJQ0VfTkFNRSk7Ci0JCW91dGIoKGludF9yZXRfY29kZSAmIDB4ZTApIHwgQVRUX0VPSSwgRVNESV9BVFROKTsKLQkJb3V0YihDVFJMX0VOQUJMRV9JTlRSLCBFU0RJX0NPTlRST0wpOwotCQllbmRpbmcgPSAtMTsKLQkJYnJlYWs7Ci0KLQljYXNlIElOVF9SRVNFVDoKLQkJLyogQkEgcHJpbnRrKCIlczogcmVzZXQgY29tcGxldGVkLlxuIiwgREVWSUNFX05BTUUpICovIDsKLQkJb3V0YigoaW50X3JldF9jb2RlICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCWVuZGluZyA9IC0xOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IFVua25vd24gaW50ZXJydXB0IHJlYXNvbjogJTAyWFxuIiwKLQkJICAgICAgIERFVklDRV9OQU1FLCBpbnRfcmV0X2NvZGUgJiAweGYpOwotCQlvdXRiKChpbnRfcmV0X2NvZGUgJiAweGUwKSB8IEFUVF9FT0ksIEVTRElfQVRUTik7Ci0JCW91dGIoQ1RSTF9FTkFCTEVfSU5UUiwgRVNESV9DT05UUk9MKTsKLQkJZW5kaW5nID0gLTE7Ci0JCWJyZWFrOwotCX0KLQlpZihlbmRpbmcgIT0gLTEpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBzMmVzZGlfbG9jaywgZmxhZ3MpOwotCQllbmRfcmVxdWVzdChjdXJyZW50X3JlcSwgZW5kaW5nKTsKLQkJY3VycmVudF9yZXEgPSBOVUxMOwotCQlkb19wczJlc2RpX3JlcXVlc3QocHMyZXNkaV9xdWV1ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzMmVzZGlfbG9jaywgZmxhZ3MpOwotCX0KLX0JCQkJLyogaGFuZGxlIGludGVycnVwdHMgKi8KLQotCi0KLXN0YXRpYyBpbnQgcHMyZXNkaV9yZWFkX3N0YXR1c193b3JkcyhpbnQgbnVtX3dvcmRzLAotCQkJCSAgICAgaW50IG1heF93b3JkcywKLQkJCQkgICAgIHVfc2hvcnQgKiBidWZmZXIpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKDsgbWF4X3dvcmRzICYmIG51bV93b3JkczsgbWF4X3dvcmRzLS0sIG51bV93b3Jkcy0tLCBidWZmZXIrKykgewotCQlmb3IgKGkgPSBFU0RJX1RJTUVPVVQ7IGkgJiYgIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpOyBpLS0pOwotCQlpZiAoIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpKSB7Ci0JCQlwcmludGsoIiVzOiB0aW1lb3V0IHJlYWRpbmcgc3RhdHVzIHdvcmRcbiIsIERFVklDRV9OQU1FKTsKLQkJCXJldHVybiBGQUlMOwotCQl9Ci0JCSpidWZmZXIgPSBpbncoRVNESV9TVFRfSU5UKTsKLQl9Ci0JcmV0dXJuIFNVQ0NFUzsKLX0KLQotCi0KLQotc3RhdGljIHZvaWQgZHVtcF9jbWRfY29tcGxldGVfc3RhdHVzKHVfaW50IGludF9yZXRfY29kZSkKLXsKLSNkZWZpbmUgV0FJVF9GT1JfU1RBVFVTIFwKLSAgZm9yKGk9RVNESV9USU1FT1VUO2kgJiYgIShpbmIoRVNESV9TVEFUVVMpICYgU1RBVFVTX1NUQVRfQVZBSUwpO2ktLSk7IFwKLSAgICBpZighKGluYihFU0RJX1NUQVRVUykgJiBTVEFUVVNfU1RBVF9BVkFJTCkpIHsgXAotICAgIHByaW50aygiJXM6IHRpbWVvdXQgcmVhZGluZyBzdGF0dXMgd29yZFxuIixERVZJQ0VfTkFNRSk7IFwKLSAgICByZXR1cm47IFwKLSAgICB9Ci0KLQlpbnQgaSwgd29yZF9jb3VudDsKLQl1X3Nob3J0IHN0YXRfd29yZDsKLQl1X2xvbmcgcmJhOwotCi0JcHJpbnRrKCIlczogRGV2aWNlOiAldSwgaW50ZXJydXB0IElEOiAlMDJYXG4iLAotCSAgICAgICBERVZJQ0VfTkFNRSwgaW50X3JldF9jb2RlID4+IDUsCi0JICAgICAgIGludF9yZXRfY29kZSAmIDB4Zik7Ci0KLQlXQUlUX0ZPUl9TVEFUVVM7Ci0Jc3RhdF93b3JkID0gaW53KEVTRElfU1RUX0lOVCk7Ci0Jd29yZF9jb3VudCA9IChzdGF0X3dvcmQgPj4gOCkgLSAxOwotCXByaW50aygiJXM6ICV1IHN0YXR1cyB3b3JkcywgY29tbWFuZDogJTAyWFxuIiwgREVWSUNFX05BTUUsIHdvcmRfY291bnQsCi0JICAgICAgIHN0YXRfd29yZCAmIDB4ZmYpOwotCi0JaWYgKHdvcmRfY291bnQtLSkgewotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXN0YXRfd29yZCA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlwcmludGsoIiVzOiBjb21tYW5kIHN0YXR1cyBjb2RlOiAlMDJYLCBjb21tYW5kIGVycm9yIGNvZGU6ICUwMlhcbiIsCi0JCSAgICAgICBERVZJQ0VfTkFNRSwgc3RhdF93b3JkID4+IDgsIHN0YXRfd29yZCAmIDB4ZmYpOwotCX0KLQlpZiAod29yZF9jb3VudC0tKSB7Ci0JCVdBSVRfRk9SX1NUQVRVUzsKLQkJc3RhdF93b3JkID0gaW53KEVTRElfU1RUX0lOVCk7Ci0JCXByaW50aygiJXM6IGRldmljZSBlcnJvciBjb2RlOiAlcyVzJXMlcyVzLCUwMlhcbiIsIERFVklDRV9OQU1FLAotCQkgICAgICAgKHN0YXRfd29yZCAmIDB4MTAwMCkgPyAiUmVhZHksICIgOiAiTm90IFJlYWR5LCAiLAotCQkgIChzdGF0X3dvcmQgJiAweDA4MDApID8gIlNlbGVjdGVkLCAiIDogIk5vdCBTZWxlY3RlZCwgIiwKLQkJICAgICAgIChzdGF0X3dvcmQgJiAweDA0MDApID8gIldyaXRlIEZhdWx0LCAiIDogIiIsCi0JCSAgICAgICAoc3RhdF93b3JkICYgMHgwMjAwKSA/ICJUcmFjayAwLCAiIDogIiIsCi0JCShzdGF0X3dvcmQgJiAweDAxMDApID8gIlNlZWsgb3IgY29tbWFuZCBjb21wbGV0ZSwgIiA6ICIiLAotCQkgICAgICAgc3RhdF93b3JkID4+IDgpOwotCX0KLQlpZiAod29yZF9jb3VudC0tKSB7Ci0JCVdBSVRfRk9SX1NUQVRVUzsKLQkJc3RhdF93b3JkID0gaW53KEVTRElfU1RUX0lOVCk7Ci0JCXByaW50aygiJXM6IEJsb2NrcyB0byBkbzogJXUiLCBERVZJQ0VfTkFNRSwgc3RhdF93b3JkKTsKLQl9Ci0JaWYgKHdvcmRfY291bnQgLT0gMikgewotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXJiYSA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXJiYSB8PSBpbncoRVNESV9TVFRfSU5UKSA8PCAxNjsKLQkJcHJpbnRrKCIsIExhc3QgQ3lsOiAldSBIZWFkOiAldSBTZWN0b3I6ICV1XG4iLAotCQkgICAgICAgKHVfc2hvcnQpICgocmJhICYgMHgxZmY4MDAwMCkgPj4gMTEpLAotCQkgKHVfc2hvcnQpICgocmJhICYgMHg3RTApID4+IDUpLCAodV9zaG9ydCkgKHJiYSAmIDB4MWYpKTsKLQl9IGVsc2UKLQkJcHJpbnRrKCJcbiIpOwotCi0JaWYgKHdvcmRfY291bnQtLSkgewotCQlXQUlUX0ZPUl9TVEFUVVM7Ci0JCXN0YXRfd29yZCA9IGludyhFU0RJX1NUVF9JTlQpOwotCQlwcmludGsoIiVzOiBCbG9ja3MgcmVxdWlyZWQgRUNDOiAldSIsIERFVklDRV9OQU1FLCBzdGF0X3dvcmQpOwotCX0KLQlwcmludGsoIlxuIik7Ci0KLSN1bmRlZiBXQUlUX0ZPUl9TVEFUVVMKLQotfQotCi1zdGF0aWMgaW50IHBzMmVzZGlfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQotewotCXN0cnVjdCBwczJlc2RpX2lfc3RydWN0ICpwID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JZ2VvLT5oZWFkcyA9IHAtPmhlYWQ7Ci0JZ2VvLT5zZWN0b3JzID0gcC0+c2VjdDsKLQlnZW8tPmN5bGluZGVycyA9IHAtPmN5bDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHMyZXNkaV9yZXNldF90aW1lcih1bnNpZ25lZCBsb25nIHVudXNlZCkKLXsKLQotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBpbmIoRVNESV9JTlRSUFQpOwotCWlmICgoc3RhdHVzICYgMHhmKSA9PSBJTlRfUkVTRVQpIHsKLQkJb3V0Yigoc3RhdHVzICYgMHhlMCkgfCBBVFRfRU9JLCBFU0RJX0FUVE4pOwotCQlvdXRiKENUUkxfRU5BQkxFX0lOVFIsIEVTRElfQ09OVFJPTCk7Ci0JCXJlc2V0X3N0YXR1cyA9IDE7Ci0JfQotCXdha2VfdXAoJnBzMmVzZGlfaW50KTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3g4LmMgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCmluZGV4IGNkNTY3NGIuLmExOGUxY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3g4LmMKKysrIGIvZHJpdmVycy9ibG9jay9zeDguYwpAQCAtNzksOSArNzksOSBAQAogCiAvKiBub3RlOiBwcmludHMgZnVuY3Rpb24gbmFtZSBmb3IgeW91ICovCiAjaWZkZWYgQ0FSTV9ERUJVRwotI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQsIF9fRlVOQ1RJT05fXywgIyMgYXJncykKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCBfX2Z1bmNfXywgIyMgYXJncykKICNpZmRlZiBDQVJNX1ZFUkJPU0VfREVCVUcKLSNkZWZpbmUgVlBSSU5USyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCisjZGVmaW5lIFZQUklOVEsoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBWUFJJTlRLKGZtdCwgYXJncy4uLikKICNlbmRpZgkvKiBDQVJNX1ZFUkJPU0VfREVCVUcgKi8KQEAgLTk2LDcgKzk2LDcgQEAKICNkZWZpbmUgYXNzZXJ0KGV4cHIpIFwKICAgICAgICAgaWYodW5saWtlbHkoIShleHByKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCBcCi0gICAgICAgICNleHByLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7ICAgICAgICAgIFwKKwkjZXhwciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7ICAgICAgICAgIFwKICAgICAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCBjNDUyZTJkLi4yN2JmZTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC04LDYgKzgsNyBAQAogICogYW5kIGlzIG5vdCBsaWNlbnNlZCBzZXBhcmF0ZWx5LiBTZWUgZmlsZSBDT1BZSU5HIGZvciBkZXRhaWxzLgogICoKICAqIFRPRE8gKHNvcnRlZCBieSBkZWNyZWFzaW5nIHByaW9yaXR5KQorICogIC0tIFJldHVybiBzZW5zZSBub3cgdGhhdCBycSBhbGxvd3MgaXQgKHdlIGFsd2F5cyBhdXRvLXNlbnNlIGFueXdheSkuCiAgKiAgLS0gc2V0IHJlYWRvbmx5IGZsYWcgZm9yIENEcywgc2V0IHJlbW92YWJsZSBmbGFnIGZvciBDRiByZWFkZXJzCiAgKiAgLS0gZG8gaW5xdWlyeSBhbmQgdmVyaWZ5IHdlIGdvdCBhIGRpc2sgYW5kIG5vdCBhIHRhcGUgKGZvciBMVU4gbWlzbWF0Y2gpCiAgKiAgLS0gdmVyaWZ5IHRoZSAxMyBjb25kaXRpb25zIGFuZCBkbyBidWxrIHJlc2V0cwpAQCAtMzU5LDcgKzM2MCw4IEBACiBzdGF0aWMgdm9pZCB1Yl9jbWRfYnVpbGRfcGFja2V0KHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfbHVuICpsdW4sCiAgICAgc3RydWN0IHViX3Njc2lfY21kICpjbWQsIHN0cnVjdCB1Yl9yZXF1ZXN0ICp1cnEpOwogc3RhdGljIHZvaWQgdWJfcndfY21kX2RvbmUoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kKTsKLXN0YXRpYyB2b2lkIHViX2VuZF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCBzdGF0dXMpOworc3RhdGljIHZvaWQgdWJfZW5kX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHN0YXR1cywKKyAgICB1bnNpZ25lZCBpbnQgY21kX2xlbik7CiBzdGF0aWMgaW50IHViX3J3X2NtZF9yZXRyeShzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX2x1biAqbHVuLAogICAgIHN0cnVjdCB1Yl9yZXF1ZXN0ICp1cnEsIHN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kKTsKIHN0YXRpYyBpbnQgdWJfc3VibWl0X3Njc2koc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kKTsKQEAgLTY0MiwxMyArNjQ0LDEzIEBACiAKIAlpZiAoYXRvbWljX3JlYWQoJnNjLT5wb2lzb24pKSB7CiAJCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocnEpOwotCQl1Yl9lbmRfcnEocnEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKKwkJdWJfZW5kX3JxKHJxLCBESURfTk9fQ09OTkVDVCA8PCAxNiwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChsdW4tPmNoYW5nZWQgJiYgIWJsa19wY19yZXF1ZXN0KHJxKSkgewogCQlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJxKTsKLQkJdWJfZW5kX3JxKHJxLCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pOworCQl1Yl9lbmRfcnEocnEsIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTiwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzAxLDcgKzcwMyw3IEBACiAKIGRyb3A6CiAJdWJfcHV0X2NtZChsdW4sIGNtZCk7Ci0JdWJfZW5kX3JxKHJxLCBESURfRVJST1IgPDwgMTYpOworCXViX2VuZF9ycShycSwgRElEX0VSUk9SIDw8IDE2LCBibGtfcnFfYnl0ZXMocnEpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzcwLDYgKzc3Miw3IEBACiAJc3RydWN0IHViX3JlcXVlc3QgKnVycSA9IGNtZC0+YmFjazsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJdW5zaWduZWQgaW50IHNjc2lfc3RhdHVzOworCXVuc2lnbmVkIGludCBjbWRfbGVuOwogCiAJcnEgPSB1cnEtPnJxOwogCkBAIC03NzksOCArNzgyLDE4IEBACiAJCQkJcnEtPmRhdGFfbGVuID0gMDsKIAkJCWVsc2UKIAkJCQlycS0+ZGF0YV9sZW4gLT0gY21kLT5hY3RfbGVuOworCQkJc2NzaV9zdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKGNtZC0+YWN0X2xlbiAhPSBjbWQtPmxlbikgeworCQkJCWlmICgoY21kLT5rZXkgPT0gTUVESVVNX0VSUk9SIHx8CisJCQkJICAgICBjbWQtPmtleSA9PSBVTklUX0FUVEVOVElPTikgJiYKKwkJCQkgICAgdWJfcndfY21kX3JldHJ5KHNjLCBsdW4sIHVycSwgY21kKSA9PSAwKQorCQkJCQlyZXR1cm47CisJCQkJc2NzaV9zdGF0dXMgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCQl9IGVsc2UgeworCQkJCXNjc2lfc3RhdHVzID0gMDsKKwkJCX0KIAkJfQotCQlzY3NpX3N0YXR1cyA9IDA7CiAJfSBlbHNlIHsKIAkJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQkJLyogVUJfU0VOU0VfU0laRSBpcyBzbWFsbGVyIHRoYW4gU0NTSV9TRU5TRV9CVUZGRVJTSVpFICovCkBAIC04MDEsMTQgKzgxNCwxNyBAQAogCiAJdXJxLT5ycSA9IE5VTEw7CiAKKwljbWRfbGVuID0gY21kLT5sZW47CiAJdWJfcHV0X2NtZChsdW4sIGNtZCk7Ci0JdWJfZW5kX3JxKHJxLCBzY3NpX3N0YXR1cyk7CisJdWJfZW5kX3JxKHJxLCBzY3NpX3N0YXR1cywgY21kX2xlbik7CiAJYmxrX3N0YXJ0X3F1ZXVlKGx1bi0+ZGlzay0+cXVldWUpOwogfQogCi1zdGF0aWMgdm9pZCB1Yl9lbmRfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgc2NzaV9zdGF0dXMpCitzdGF0aWMgdm9pZCB1Yl9lbmRfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgc2NzaV9zdGF0dXMsCisgICAgdW5zaWduZWQgaW50IGNtZF9sZW4pCiB7CiAJaW50IGVycm9yOworCWxvbmcgcnFsZW47CiAKIAlpZiAoc2NzaV9zdGF0dXMgPT0gMCkgewogCQllcnJvciA9IDA7CkBAIC04MTYsOCArODMyLDEyIEBACiAJCWVycm9yID0gLUVJTzsKIAkJcnEtPmVycm9ycyA9IHNjc2lfc3RhdHVzOwogCX0KLQlpZiAoX19ibGtfZW5kX3JlcXVlc3QocnEsIGVycm9yLCBibGtfcnFfYnl0ZXMocnEpKSkKLQkJQlVHKCk7CisJcnFsZW4gPSBibGtfcnFfYnl0ZXMocnEpOyAgICAvKiBPZGRseSBlbm91Z2gsIHRoaXMgaXMgdGhlIHJlc2lkdWUuICovCisJaWYgKF9fYmxrX2VuZF9yZXF1ZXN0KHJxLCBlcnJvciwgY21kX2xlbikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkgICAgIjogX19ibGtfZW5kX3JlcXVlc3QgYmxldywgJXMtY21kIHRvdGFsICV1IHJxbGVuICVsZFxuIiwKKwkJICAgIGJsa19wY19yZXF1ZXN0KHJxKT8gInBjIjogImZzIiwgY21kX2xlbiwgcnFsZW4pOworCX0KIH0KIAogc3RhdGljIGludCB1Yl9yd19jbWRfcmV0cnkoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9sdW4gKmx1biwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggOWU2MWZjYS4uZWJmZTAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTY5LDcgKzY5LDcgQEAKIGVudW0gewogCVBBUlRJVElPTl9TSElGVCA9IDMsCiAJTUFYX0RJU0tOTyA9IEhWTUFYQVJDSElURUNURURWSVJUVUFMRElTS1MsCi0JTUFYX0RJU0tfTkFNRSA9IHNpemVvZigoKHN0cnVjdCBnZW5kaXNrICopMCktPmRpc2tfbmFtZSkKKwlNQVhfRElTS19OQU1FID0gRklFTERfU0laRU9GKHN0cnVjdCBnZW5kaXNrLCBkaXNrX25hbWUpCiB9OwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZpb2Rhc2Rfc3BpbmxvY2spOwpAQCAtNTI4LDggKzUyOCw3IEBACiAJCW51bXNnID0gVklPTUFYQkxPQ0tETUE7CiAKIAkqdG90YWxfbGVuID0gMDsKLQltZW1zZXQoc2csIDAsIHNpemVvZihzZ1swXSkgKiBWSU9NQVhCTE9DS0RNQSk7Ci0KKwlzZ19pbml0X3RhYmxlKHNnLCBWSU9NQVhCTE9DS0RNQSk7CiAJZm9yIChpID0gMDsgKGkgPCBudW1zZykgJiYgKHJ3X2RhdGEtPmRtYV9pbmZvW2ldLmxlbiA+IDApOyArK2kpIHsKIAkJc2dfZG1hX2FkZHJlc3MoJnNnW2ldKSA9IHJ3X2RhdGEtPmRtYV9pbmZvW2ldLnRva2VuOwogCQlzZ19kbWFfbGVuKCZzZ1tpXSkgPSByd19kYXRhLT5kbWFfaW5mb1tpXS5sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDNiMWE2OGQuLjBjZmJlOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0yMzgsNiArMjM4LDcgQEAKIAl2YmxrLT5kaXNrLT5maXJzdF9taW5vciA9IGluZGV4X3RvX21pbm9yKGluZGV4KTsKIAl2YmxrLT5kaXNrLT5wcml2YXRlX2RhdGEgPSB2YmxrOwogCXZibGstPmRpc2stPmZvcHMgPSAmdmlydGJsa19mb3BzOworCXZibGstPmRpc2stPmRyaXZlcmZzX2RldiA9ICZ2ZGV2LT5kZXY7CiAJaW5kZXgrKzsKIAogCS8qIElmIGJhcnJpZXJzIGFyZSBzdXBwb3J0ZWQsIHRlbGwgYmxvY2sgbGF5ZXIgdGhhdCBxdWV1ZSBpcyBvcmRlcmVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwppbmRleCA4YWZjZTY3Li45YzZmM2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CkBAIC0xMzUsNiArMTM2LDIyIEBACiAJc2NoZWR1bGVfd29yaygmaW5mby0+d29yayk7CiB9CiAKK2ludCBibGtpZl9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmQsIHN0cnVjdCBoZF9nZW9tZXRyeSAqaGcpCit7CisJLyogV2UgZG9uJ3QgaGF2ZSByZWFsIGdlb21ldHJ5IGluZm8sIGJ1dCBsZXQncyBhdCBsZWFzdCByZXR1cm4KKwkgICB2YWx1ZXMgY29uc2lzdGVudCB3aXRoIHRoZSBzaXplIG9mIHRoZSBkZXZpY2UgKi8KKwlzZWN0b3JfdCBuc2VjdCA9IGdldF9jYXBhY2l0eShiZC0+YmRfZGlzayk7CisJc2VjdG9yX3QgY3lsaW5kZXJzID0gbnNlY3Q7CisKKwloZy0+aGVhZHMgPSAweGZmOworCWhnLT5zZWN0b3JzID0gMHgzZjsKKwlzZWN0b3JfZGl2KGN5bGluZGVycywgaGctPmhlYWRzICogaGctPnNlY3RvcnMpOworCWhnLT5jeWxpbmRlcnMgPSBjeWxpbmRlcnM7CisJaWYgKChzZWN0b3JfdCkoaGctPmN5bGluZGVycyArIDEpICogaGctPmhlYWRzICogaGctPnNlY3RvcnMgPCBuc2VjdCkKKwkJaGctPmN5bGluZGVycyA9IDB4ZmZmZjsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIGJsa2lmX3F1ZXVlX3JlcXVlc3QKICAqCkBAIC05MzcsNiArOTU0LDcgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGJsa2lmX29wZW4sCiAJLnJlbGVhc2UgPSBibGtpZl9yZWxlYXNlLAorCS5nZXRnZW8gPSBibGtpZl9nZXRnZW8sCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwppbmRleCAzNzJjN2VmNi4uMTkyNTIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwpAQCAtNjIsMTMgKzYyLDEzIEBACiAjZGVmaW5lIFVSQl9aRVJPX1BBQ0tFVCAwCiAjZW5kaWYKIAotc3RhdGljIGludCBpZ25vcmUgPSAwOwotc3RhdGljIGludCBpZ25vcmVfZGdhID0gMDsKLXN0YXRpYyBpbnQgaWdub3JlX2NzciA9IDA7Ci1zdGF0aWMgaW50IGlnbm9yZV9zbmlmZmVyID0gMDsKLXN0YXRpYyBpbnQgZGlzYWJsZV9zY29maXggPSAwOwotc3RhdGljIGludCBmb3JjZV9zY29maXggPSAwOwotc3RhdGljIGludCByZXNldCA9IDA7CitzdGF0aWMgaW50IGlnbm9yZTsKK3N0YXRpYyBpbnQgaWdub3JlX2RnYTsKK3N0YXRpYyBpbnQgaWdub3JlX2NzcjsKK3N0YXRpYyBpbnQgaWdub3JlX3NuaWZmZXI7CitzdGF0aWMgaW50IGRpc2FibGVfc2NvZml4Oworc3RhdGljIGludCBmb3JjZV9zY29maXg7CitzdGF0aWMgaW50IHJlc2V0OwogCiAjaWZkZWYgQ09ORklHX0JUX0hDSVVTQl9TQ08KIHN0YXRpYyBpbnQgaXNvYyA9IDI7CkBAIC0xMTYsNiArMTE2LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMDkpLCAuZHJpdmVyX2luZm8gPSBIQ0lfQkNNOTIwMzUgfSwKIAogCS8qIEJyb2FkY29tIEJDTTIwNDUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzkpLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfCBIQ0lfV1JPTkdfU0NPX01UVSB9LAogCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjEwMSksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB8IEhDSV9XUk9OR19TQ09fTVRVIH0sCiAKIAkvKiBJQk0vTGVub3ZvIFRoaW5rUGFkIHdpdGggQnJvYWRjb20gY2hpcCAqLwpAQCAtMTQ4LDYgKzE0OSw5IEBACiAJeyBVU0JfREVWSUNFKDB4MDQwMCwgMHgwODA3KSwgLmRyaXZlcl9pbmZvID0gSENJX0JST0tFTl9JU09DIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQwMCwgMHgwODBhKSwgLmRyaXZlcl9pbmZvID0gSENJX0JST0tFTl9JU09DIH0sCiAKKwkvKiBDT05XSVNFIFRlY2hub2xvZ3kgYmFzZWQgYWRhcHRlcnMgd2l0aCBidWdneSBTQ08gc3VwcG9ydCAqLworCXsgVVNCX0RFVklDRSgweDBlNWUsIDB4NjYyMiksIC5kcml2ZXJfaW5mbyA9IEhDSV9CUk9LRU5fSVNPQyB9LAorCiAJLyogQmVsa2luIEY4VDAxMiBhbmQgRjhUMDEzIGRldmljZXMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwMTIpLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfCBIQ0lfV1JPTkdfU0NPX01UVSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAxMyksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB8IEhDSV9XUk9OR19TQ09fTVRVIH0sCkBAIC0yNjEsNyArMjY1LDcgQEAKIAkJQlRfRVJSKCIlcyBpbnRyIHJ4IHN1Ym1pdCBmYWlsZWQgdXJiICVwIGVyciAlZCIsCiAJCQkJaHVzYi0+aGRldi0+bmFtZSwgdXJiLCBlcnIpOwogCQlfdXJiX3VubGluayhfdXJiKTsKLQkJX3VyYl9mcmVlKF91cmIpOworCQlrZnJlZShfdXJiKTsKIAkJa2ZyZWUoYnVmKTsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTI5OCw3ICszMDIsNyBAQAogCQlCVF9FUlIoIiVzIGJ1bGsgcnggc3VibWl0IGZhaWxlZCB1cmIgJXAgZXJyICVkIiwKIAkJCQlodXNiLT5oZGV2LT5uYW1lLCB1cmIsIGVycik7CiAJCV91cmJfdW5saW5rKF91cmIpOwotCQlfdXJiX2ZyZWUoX3VyYik7CisJCWtmcmVlKF91cmIpOwogCQlrZnJlZShidWYpOwogCX0KIAlyZXR1cm4gZXJyOwpAQCAtMzQ5LDcgKzM1Myw3IEBACiAJCUJUX0VSUigiJXMgaXNvYyByeCBzdWJtaXQgZmFpbGVkIHVyYiAlcCBlcnIgJWQiLAogCQkJCWh1c2ItPmhkZXYtPm5hbWUsIHVyYiwgZXJyKTsKIAkJX3VyYl91bmxpbmsoX3VyYik7Ci0JCV91cmJfZnJlZShfdXJiKTsKKwkJa2ZyZWUoX3VyYik7CiAJCWtmcmVlKGJ1Zik7CiAJfQogCXJldHVybiBlcnI7CkBAIC00MjcsNyArNDMxLDcgQEAKIAkJCQkJaHVzYi0+aGRldi0+bmFtZSwgX3VyYiwgX3VyYi0+dHlwZSwgdXJiKTsKIAkJCWtmcmVlKHVyYi0+c2V0dXBfcGFja2V0KTsKIAkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJCV91cmJfZnJlZShfdXJiKTsKKwkJCWtmcmVlKF91cmIpOwogCQl9CiAJfQogfQpAQCAtNDg2LDcgKzQ5MCw3IEBACiAKIAkJZHIgPSBrbWFsbG9jKHNpemVvZigqZHIpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFkcikgewotCQkJX3VyYl9mcmVlKF91cmIpOworCQkJa2ZyZWUoX3VyYik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5oIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5oCmluZGV4IDU2Y2QzYTkuLjQxNDA4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuaAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmgKQEAgLTYwLDExICs2MCw2IEBACiAJc3RydWN0IHVyYiAgICAgICAgdXJiOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIF91cmJfZnJlZShzdHJ1Y3QgX3VyYiAqX3VyYikKLXsKLQlrZnJlZShfdXJiKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIF91cmJfcXVldWVfaW5pdChzdHJ1Y3QgX3VyYl9xdWV1ZSAqcSkKIHsKIAlJTklUX0xJU1RfSEVBRCgmcS0+aGVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKaW5kZXggZGIyNTllNi4uYWMzODI5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTM2MCwxMCArMzYwLDkgQEAKIAogc3RhdGljIGludCBjZHJvbV9nZXRfZGlzY19pbmZvKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkaXNjX2luZm9ybWF0aW9uICpkaSk7CiAKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiBzdGF0aWMgdm9pZCBjZHJvbV9zeXNjdGxfcmVnaXN0ZXIodm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLyAKLXN0YXRpYyBzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKnRvcENkcm9tUHRyOworCitzdGF0aWMgTElTVF9IRUFEKGNkcm9tX2xpc3QpOwogCiBzdGF0aWMgaW50IGNkcm9tX2R1bW15X2dlbmVyaWNfcGFja2V0KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQkJCSAgICAgIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQpAQCAtMzk0LDEzICszOTMsMTEgQEAKIAljZGluZm8oQ0RfT1BFTiwgImVudGVyaW5nIHJlZ2lzdGVyX2Nkcm9tXG4iKTsgCiAKIAlpZiAoY2RvLT5vcGVuID09IE5VTEwgfHwgY2RvLT5yZWxlYXNlID09IE5VTEwpCi0JCXJldHVybiAtMjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFiYW5uZXJfcHJpbnRlZCkgewogCQlwcmludGsoS0VSTl9JTkZPICJVbmlmb3JtIENELVJPTSBkcml2ZXIgIiBSRVZJU0lPTiAiXG4iKTsKIAkJYmFubmVyX3ByaW50ZWQgPSAxOwotI2lmZGVmIENPTkZJR19TWVNDVEwKIAkJY2Ryb21fc3lzY3RsX3JlZ2lzdGVyKCk7Ci0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLyAKIAl9CiAKIAlFTlNVUkUoZHJpdmVfc3RhdHVzLCBDRENfRFJJVkVfU1RBVFVTICk7CkBAIC00MzksMzUgKzQzNiwxOCBAQAogCiAJY2RpbmZvKENEX1JFR19VTlJFRywgImRyaXZlIFwiL2Rldi8lc1wiIHJlZ2lzdGVyZWRcbiIsIGNkaS0+bmFtZSk7CiAJbXV0ZXhfbG9jaygmY2Ryb21fbXV0ZXgpOwotCWNkaS0+bmV4dCA9IHRvcENkcm9tUHRyOyAJCi0JdG9wQ2Ryb21QdHIgPSBjZGk7CisJbGlzdF9hZGQoJmNkaS0+bGlzdCwgJmNkcm9tX2xpc3QpOwogCW11dGV4X3VubG9jaygmY2Ryb21fbXV0ZXgpOwogCXJldHVybiAwOwogfQogI3VuZGVmIEVOU1VSRQogCi1pbnQgdW5yZWdpc3Rlcl9jZHJvbShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKnVucmVnKQordm9pZCB1bnJlZ2lzdGVyX2Nkcm9tKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQogewotCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCAqcHJldjsKIAljZGluZm8oQ0RfT1BFTiwgImVudGVyaW5nIHVucmVnaXN0ZXJfY2Ryb21cbiIpOyAKIAotCXByZXYgPSBOVUxMOwogCW11dGV4X2xvY2soJmNkcm9tX211dGV4KTsKLQljZGkgPSB0b3BDZHJvbVB0cjsKLQl3aGlsZSAoY2RpICYmIGNkaSAhPSB1bnJlZykgewotCQlwcmV2ID0gY2RpOwotCQljZGkgPSBjZGktPm5leHQ7Ci0JfQotCi0JaWYgKGNkaSA9PSBOVUxMKSB7Ci0JCW11dGV4X3VubG9jaygmY2Ryb21fbXV0ZXgpOwotCQlyZXR1cm4gLTI7Ci0JfQotCWlmIChwcmV2KQotCQlwcmV2LT5uZXh0ID0gY2RpLT5uZXh0OwotCWVsc2UKLQkJdG9wQ2Ryb21QdHIgPSBjZGktPm5leHQ7Ci0KKwlsaXN0X2RlbCgmY2RpLT5saXN0KTsKIAltdXRleF91bmxvY2soJmNkcm9tX211dGV4KTsKIAogCWlmIChjZGktPmV4aXQpCkBAIC00NzUsMzQgKzQ1NSw0MyBAQAogCiAJY2RpLT5vcHMtPm5fbWlub3JzLS07CiAJY2RpbmZvKENEX1JFR19VTlJFRywgImRyaXZlIFwiL2Rldi8lc1wiIHVucmVnaXN0ZXJlZFxuIiwgY2RpLT5uYW1lKTsKLQlyZXR1cm4gMDsKIH0KIAogaW50IGNkcm9tX2dldF9tZWRpYV9ldmVudChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKIAkJCSAgc3RydWN0IG1lZGlhX2V2ZW50X2Rlc2MgKm1lZCkKIHsKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwotCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzhdOwotCXN0cnVjdCBldmVudF9oZWFkZXIgKmVoID0gKHN0cnVjdCBldmVudF9oZWFkZXIgKikgYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgZXZlbnRfaGVhZGVyICplaDsKKwlpbnQgcmV0ID0gMTsKIAotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBDR0NfREFUQV9SRUFEKTsKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVoID0gKHN0cnVjdCBldmVudF9oZWFkZXIgKilidWZmZXI7CisKKwlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmZmVyLCA4LCBDR0NfREFUQV9SRUFEKTsKIAljZ2MuY21kWzBdID0gR1BDTURfR0VUX0VWRU5UX1NUQVRVU19OT1RJRklDQVRJT047CiAJY2djLmNtZFsxXSA9IDE7CQkvKiBJTU1FRCAqLwogCWNnYy5jbWRbNF0gPSAxIDw8IDQ7CS8qIG1lZGlhIGV2ZW50ICovCi0JY2djLmNtZFs4XSA9IHNpemVvZihidWZmZXIpOworCWNnYy5jbWRbOF0gPSA4OwogCWNnYy5xdWlldCA9IDE7CiAKIAlpZiAoY2RpLT5vcHMtPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpCi0JCXJldHVybiAxOworCQlnb3RvIGVycjsKIAogCWlmIChiZTE2X3RvX2NwdShlaC0+ZGF0YV9sZW4pIDwgc2l6ZW9mKCptZWQpKQotCQlyZXR1cm4gMTsKKwkJZ290byBlcnI7CiAKIAlpZiAoZWgtPm5lYSB8fCBlaC0+bm90aWZpY2F0aW9uX2NsYXNzICE9IDB4NCkKLQkJcmV0dXJuIDE7CisJCWdvdG8gZXJyOwogCi0JbWVtY3B5KG1lZCwgJmJ1ZmZlcltzaXplb2YoKmVoKV0sIHNpemVvZigqbWVkKSk7Ci0JcmV0dXJuIDA7CisJbWVtY3B5KG1lZCwgYnVmZmVyICsgc2l6ZW9mKCplaCksIHNpemVvZigqbWVkKSk7CisJcmV0ID0gMDsKK2VycjoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC01MTIsNjggKzUwMSw4MiBAQAogc3RhdGljIGludCBjZHJvbV9tcndfcHJvYmVfcGMoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCiB7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKLQljaGFyIGJ1ZmZlclsxNl07CisJY2hhciAqYnVmZmVyOworCWludCByZXQgPSAxOwogCi0JaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIENHQ19EQVRBX1JFQUQpOworCWJ1ZmZlciA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIDE2LCBDR0NfREFUQV9SRUFEKTsKIAogCWNnYy50aW1lb3V0ID0gSFo7CiAJY2djLnF1aWV0ID0gMTsKIAogCWlmICghY2Ryb21fbW9kZV9zZW5zZShjZGksICZjZ2MsIE1SV19NT0RFX1BDLCAwKSkgewogCQljZGktPm1yd19tb2RlX3BhZ2UgPSBNUldfTU9ERV9QQzsKLQkJcmV0dXJuIDA7CisJCXJldCA9IDA7CiAJfSBlbHNlIGlmICghY2Ryb21fbW9kZV9zZW5zZShjZGksICZjZ2MsIE1SV19NT0RFX1BDX1BSRTEsIDApKSB7CiAJCWNkaS0+bXJ3X21vZGVfcGFnZSA9IE1SV19NT0RFX1BDX1BSRTE7Ci0JCXJldHVybiAwOworCQlyZXQgPSAwOwogCX0KLQotCXJldHVybiAxOworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjZHJvbV9pc19tcncoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGludCAqd3JpdGUpCiB7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgbXJ3X2ZlYXR1cmVfZGVzYyAqbWZkOwotCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzE2XTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAJaW50IHJldDsKIAogCSp3cml0ZSA9IDA7CisJYnVmZmVyID0ga21hbGxvYygxNiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIENHQ19EQVRBX1JFQUQpOworCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIDE2LCBDR0NfREFUQV9SRUFEKTsKIAogCWNnYy5jbWRbMF0gPSBHUENNRF9HRVRfQ09ORklHVVJBVElPTjsKIAljZ2MuY21kWzNdID0gQ0RGX01SVzsKLQljZ2MuY21kWzhdID0gc2l6ZW9mKGJ1ZmZlcik7CisJY2djLmNtZFs4XSA9IDE2OwogCWNnYy5xdWlldCA9IDE7CiAKIAlpZiAoKHJldCA9IGNkaS0+b3BzLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAKIAltZmQgPSAoc3RydWN0IG1yd19mZWF0dXJlX2Rlc2MgKikmYnVmZmVyW3NpemVvZihzdHJ1Y3QgZmVhdHVyZV9oZWFkZXIpXTsKLQlpZiAoYmUxNl90b19jcHUobWZkLT5mZWF0dXJlX2NvZGUpICE9IENERl9NUlcpCi0JCXJldHVybiAxOworCWlmIChiZTE2X3RvX2NwdShtZmQtPmZlYXR1cmVfY29kZSkgIT0gQ0RGX01SVykgeworCQlyZXQgPSAxOworCQlnb3RvIGVycjsKKwl9CiAJKndyaXRlID0gbWZkLT53cml0ZTsKIAogCWlmICgocmV0ID0gY2Ryb21fbXJ3X3Byb2JlX3BjKGNkaSkpKSB7CiAJCSp3cml0ZSA9IDA7Ci0JCXJldHVybiByZXQ7CiAJfQotCi0JcmV0dXJuIDA7CitlcnI6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNkcm9tX21yd19iZ2Zvcm1hdChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgaW50IGNvbnQpCiB7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMl07CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjZHJvbTogJXNzdGFydGluZyBmb3JtYXRcbiIsIGNvbnQgPyAiUmUiIDogIiIpOwogCisJYnVmZmVyID0ga21hbGxvYygxMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyoKIAkgKiBGbXREYXRhIGJpdCBzZXQgKGJpdCA0KSwgZm9ybWF0IHR5cGUgaXMgMQogCSAqLwotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBDR0NfREFUQV9XUklURSk7CisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgMTIsIENHQ19EQVRBX1dSSVRFKTsKIAljZ2MuY21kWzBdID0gR1BDTURfRk9STUFUX1VOSVQ7CiAJY2djLmNtZFsxXSA9ICgxIDw8IDQpIHwgMTsKIApAQCAtNjAwLDYgKzYwMyw3IEBACiAJaWYgKHJldCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY2Ryb206IGJnZm9ybWF0IGZhaWxlZFxuIik7CiAKKwlrZnJlZShidWZmZXIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY1OSwxNiArNjYzLDE3IEBACiB7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgbW9kZV9wYWdlX2hlYWRlciAqbXBoOwotCWNoYXIgYnVmZmVyWzE2XTsKKwljaGFyICpidWZmZXI7CiAJaW50IHJldCwgb2Zmc2V0LCBzaXplOwogCi0JaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIENHQ19EQVRBX1JFQUQpOworCWJ1ZmZlciA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWNnYy5idWZmZXIgPSBidWZmZXI7Ci0JY2djLmJ1ZmxlbiA9IHNpemVvZihidWZmZXIpOworCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIDE2LCBDR0NfREFUQV9SRUFEKTsKIAogCWlmICgocmV0ID0gY2Ryb21fbW9kZV9zZW5zZShjZGksICZjZ2MsIGNkaS0+bXJ3X21vZGVfcGFnZSwgMCkpKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAogCW1waCA9IChzdHJ1Y3QgbW9kZV9wYWdlX2hlYWRlciAqKSBidWZmZXI7CiAJb2Zmc2V0ID0gYmUxNl90b19jcHUobXBoLT5kZXNjX2xlbmd0aCk7CkBAIC02NzgsNTUgKzY4Myw3MCBAQAogCWNnYy5idWZsZW4gPSBzaXplOwogCiAJaWYgKChyZXQgPSBjZHJvbV9tb2RlX3NlbGVjdChjZGksICZjZ2MpKSkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjZHJvbTogJXM6IG1ydyBhZGRyZXNzIHNwYWNlICVzIHNlbGVjdGVkXG4iLCBjZGktPm5hbWUsIG1yd19hZGRyZXNzX3NwYWNlW3NwYWNlXSk7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK2VycjoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2Ryb21fZ2V0X3JhbmRvbV93cml0YWJsZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKIAkJCSAgICAgIHN0cnVjdCByd3J0X2ZlYXR1cmVfZGVzYyAqcmZkKQogewogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7Ci0JY2hhciBidWZmZXJbMjRdOworCWNoYXIgKmJ1ZmZlcjsKIAlpbnQgcmV0OwogCi0JaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIENHQ19EQVRBX1JFQUQpOworCWJ1ZmZlciA9IGttYWxsb2MoMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIDI0LCBDR0NfREFUQV9SRUFEKTsKIAogCWNnYy5jbWRbMF0gPSBHUENNRF9HRVRfQ09ORklHVVJBVElPTjsJLyogb2Z0ZW4gMHg0NiAqLwogCWNnYy5jbWRbM10gPSBDREZfUldSVDsJCQkvKiBvZnRlbiAweDAwMjAgKi8KLQljZ2MuY21kWzhdID0gc2l6ZW9mKGJ1ZmZlcik7CQkvKiBvZnRlbiAweDE4ICovCisJY2djLmNtZFs4XSA9IDI0OwkJICAgICAgICAvKiBvZnRlbiAweDE4ICovCiAJY2djLnF1aWV0ID0gMTsKIAogCWlmICgocmV0ID0gY2RpLT5vcHMtPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAogCW1lbWNweShyZmQsICZidWZmZXJbc2l6ZW9mKHN0cnVjdCBmZWF0dXJlX2hlYWRlcildLCBzaXplb2YgKCpyZmQpKTsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworZXJyOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjZHJvbV9oYXNfZGVmZWN0X21ndChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKIHsKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwotCWNoYXIgYnVmZmVyWzE2XTsKKwljaGFyICpidWZmZXI7CiAJX19iZTE2ICpmZWF0dXJlX2NvZGU7CiAJaW50IHJldDsKIAotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBDR0NfREFUQV9SRUFEKTsKKwlidWZmZXIgPSBrbWFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmZmVyLCAxNiwgQ0dDX0RBVEFfUkVBRCk7CiAKIAljZ2MuY21kWzBdID0gR1BDTURfR0VUX0NPTkZJR1VSQVRJT047CiAJY2djLmNtZFszXSA9IENERl9IV0RNOwotCWNnYy5jbWRbOF0gPSBzaXplb2YoYnVmZmVyKTsKKwljZ2MuY21kWzhdID0gMTY7CiAJY2djLnF1aWV0ID0gMTsKIAogCWlmICgocmV0ID0gY2RpLT5vcHMtPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAogCWZlYXR1cmVfY29kZSA9IChfX2JlMTYgKikgJmJ1ZmZlcltzaXplb2Yoc3RydWN0IGZlYXR1cmVfaGVhZGVyKV07CiAJaWYgKGJlMTZfdG9fY3B1KCpmZWF0dXJlX2NvZGUpID09IENERl9IV0RNKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOworCQlyZXQgPSAwOworZXJyOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC04MTcsMTAgKzgzNywxNCBAQAogc3RhdGljIGludCBtb19vcGVuX3dyaXRlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQogewogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7Ci0JY2hhciBidWZmZXJbMjU1XTsKKwljaGFyICpidWZmZXI7CiAJaW50IHJldDsKIAotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCAmYnVmZmVyLCA0LCBDR0NfREFUQV9SRUFEKTsKKwlidWZmZXIgPSBrbWFsbG9jKDI1NSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgNCwgQ0dDX0RBVEFfUkVBRCk7CiAJY2djLnF1aWV0ID0gMTsKIAogCS8qCkBAIC04MzcsMTAgKzg2MSwxNSBAQAogCX0KIAogCS8qIGRyaXZlIGdhdmUgdXMgbm8gaW5mbywgbGV0IHRoZSB1c2VyIGdvIGFoZWFkICovCi0JaWYgKHJldCkKLQkJcmV0dXJuIDA7CisJaWYgKHJldCkgeworCQlyZXQgPSAwOworCQlnb3RvIGVycjsKKwl9CiAKLQlyZXR1cm4gYnVmZmVyWzNdICYgMHg4MDsKKwlyZXQgPSBidWZmZXJbM10gJiAweDgwOworZXJyOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjZHJvbV9yYW1fb3Blbl93cml0ZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKQEAgLTg2MywxNSArODkyLDE5IEBACiBzdGF0aWMgdm9pZCBjZHJvbV9tbWMzX3Byb2ZpbGUoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCiB7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKLQljaGFyIGJ1ZmZlclszMl07CisJY2hhciAqYnVmZmVyOwogCWludCByZXQsIG1tYzNfcHJvZmlsZTsKIAotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBDR0NfREFUQV9SRUFEKTsKKwlidWZmZXIgPSBrbWFsbG9jKDMyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuOworCisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgMzIsIENHQ19EQVRBX1JFQUQpOwogCiAJY2djLmNtZFswXSA9IEdQQ01EX0dFVF9DT05GSUdVUkFUSU9OOwogCWNnYy5jbWRbMV0gPSAwOwogCWNnYy5jbWRbMl0gPSBjZ2MuY21kWzNdID0gMDsJCS8qIFN0YXJ0aW5nIEZlYXR1cmUgTnVtYmVyICovCi0JY2djLmNtZFs4XSA9IHNpemVvZihidWZmZXIpOwkJLyogQWxsb2NhdGlvbiBMZW5ndGggKi8KKwljZ2MuY21kWzhdID0gMzI7CQkgICAgICAgIC8qIEFsbG9jYXRpb24gTGVuZ3RoICovCiAJY2djLnF1aWV0ID0gMTsKIAogCWlmICgocmV0ID0gY2RpLT5vcHMtPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQpAQCAtODgwLDYgKzkxMyw3IEBACiAJCW1tYzNfcHJvZmlsZSA9IChidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107CiAKIAljZGktPm1tYzNfcHJvZmlsZSA9IG1tYzNfcHJvZmlsZTsKKwlrZnJlZShidWZmZXIpOwogfQogCiBzdGF0aWMgaW50IGNkcm9tX2lzX2R2ZF9ydyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKQEAgLTExNTIsOCArMTE4Niw4IEBACiAvKiBUaGlzIGNvZGUgaXMgc2ltaWxhciB0byB0aGF0IGluIG9wZW5fZm9yX2RhdGEuIFRoZSByb3V0aW5lIGlzIGNhbGxlZAogICAgd2hlbmV2ZXIgYW4gYXVkaW8gcGxheSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLgogKi8KLWludCBjaGVja19mb3JfYXVkaW9fZGlzYyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksCi0JCQkgc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKiBjZG8pCitzdGF0aWMgaW50IGNoZWNrX2Zvcl9hdWRpb19kaXNjKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwKKwkJCQlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqIGNkbykKIHsKICAgICAgICAgaW50IHJldDsKIAl0cmFja3R5cGUgdHJhY2tzOwpAQCAtMTU5NCwxMiArMTYyOCwxNSBAQAogc3RhdGljIGludCBkdmRfZG9fYXV0aChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgZHZkX2F1dGhpbmZvICphaSkKIHsKIAlpbnQgcmV0OwotCXVfY2hhciBidWZbMjBdOworCXVfY2hhciAqYnVmOwogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOwotCXJwY19zdGF0ZV90IHJwY19zdGF0ZTsKKwlycGNfc3RhdGVfdCAqcnBjX3N0YXRlOwogCi0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1ZiA9IGt6YWxsb2MoMjAsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWYsIDAsIENHQ19EQVRBX1JFQUQpOwogCiAJc3dpdGNoIChhaS0+dHlwZSkgewpAQCAtMTYxMCw3ICsxNjQ3LDcgQEAKIAkJc2V0dXBfcmVwb3J0X2tleSgmY2djLCBhaS0+bHNhLmFnaWQsIDApOwogCiAJCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycjsKIAogCQlhaS0+bHNhLmFnaWQgPSBidWZbN10gPj4gNjsKIAkJLyogUmV0dXJuaW5nIGRhdGEsIGxldCBob3N0IGNoYW5nZSBzdGF0ZSAqLwpAQCAtMTYyMSw3ICsxNjU4LDcgQEAKIAkJc2V0dXBfcmVwb3J0X2tleSgmY2djLCBhaS0+bHNrLmFnaWQsIDIpOwogCiAJCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycjsKIAogCQljb3B5X2tleShhaS0+bHNrLmtleSwgJmJ1Zls0XSk7CiAJCS8qIFJldHVybmluZyBkYXRhLCBsZXQgaG9zdCBjaGFuZ2Ugc3RhdGUgKi8KQEAgLTE2MzIsNyArMTY2OSw3IEBACiAJCXNldHVwX3JlcG9ydF9rZXkoJmNnYywgYWktPmxzYy5hZ2lkLCAxKTsKIAogCQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnI7CiAKIAkJY29weV9jaGFsKGFpLT5sc2MuY2hhbCwgJmJ1Zls0XSk7CiAJCS8qIFJldHVybmluZyBkYXRhLCBsZXQgaG9zdCBjaGFuZ2Ugc3RhdGUgKi8KQEAgLTE2NDksNyArMTY4Niw3IEBACiAJCWNnYy5jbWRbMl0gPSBhaS0+bHN0ay5sYmEgPj4gMjQ7CiAKIAkJaWYgKChyZXQgPSBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZXJyOwogCiAJCWFpLT5sc3RrLmNwbSA9IChidWZbNF0gPj4gNykgJiAxOwogCQlhaS0+bHN0ay5jcF9zZWMgPSAoYnVmWzRdID4+IDYpICYgMTsKQEAgLTE2NjMsNyArMTcwMCw3IEBACiAJCXNldHVwX3JlcG9ydF9rZXkoJmNnYywgYWktPmxzYXNmLmFnaWQsIDUpOwogCQkKIAkJaWYgKChyZXQgPSBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZXJyOwogCiAJCWFpLT5sc2FzZi5hc2YgPSBidWZbN10gJiAxOwogCQlicmVhazsKQEAgLTE2NzYsNyArMTcxMyw3IEBACiAJCWNvcHlfY2hhbCgmYnVmWzRdLCBhaS0+aHNjLmNoYWwpOwogCiAJCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycjsKIAogCQlhaS0+dHlwZSA9IERWRF9MVV9TRU5EX0tFWTE7CiAJCWJyZWFrOwpAQCAtMTY4OSw3ICsxNzI2LDcgQEAKIAogCQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpIHsKIAkJCWFpLT50eXBlID0gRFZEX0FVVEhfRkFJTFVSRTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycjsKIAkJfQogCQlhaS0+dHlwZSA9IERWRF9BVVRIX0VTVEFCTElTSEVEOwogCQlicmVhazsKQEAgLTE3MDAsMjQgKzE3MzcsMjMgQEAKIAkJY2RpbmZvKENEX0RWRCwgImVudGVyaW5nIERWRF9JTlZBTElEQVRFX0FHSURcbiIpOyAKIAkJc2V0dXBfcmVwb3J0X2tleSgmY2djLCBhaS0+bHNhLmFnaWQsIDB4M2YpOwogCQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCiAJLyogR2V0IHJlZ2lvbiBzZXR0aW5ncyAqLwogCWNhc2UgRFZEX0xVX1NFTkRfUlBDX1NUQVRFOgogCQljZGluZm8oQ0RfRFZELCAiZW50ZXJpbmcgRFZEX0xVX1NFTkRfUlBDX1NUQVRFXG4iKTsKIAkJc2V0dXBfcmVwb3J0X2tleSgmY2djLCAwLCA4KTsKLQkJbWVtc2V0KCZycGNfc3RhdGUsIDAsIHNpemVvZihycGNfc3RhdGVfdCkpOwotCQljZ2MuYnVmZmVyID0gKGNoYXIgKikgJnJwY19zdGF0ZTsKIAogCQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnI7CiAKLQkJYWktPmxycGNzLnR5cGUgPSBycGNfc3RhdGUudHlwZV9jb2RlOwotCQlhaS0+bHJwY3MudnJhID0gcnBjX3N0YXRlLnZyYTsKLQkJYWktPmxycGNzLnVjY2EgPSBycGNfc3RhdGUudWNjYTsKLQkJYWktPmxycGNzLnJlZ2lvbl9tYXNrID0gcnBjX3N0YXRlLnJlZ2lvbl9tYXNrOwotCQlhaS0+bHJwY3MucnBjX3NjaGVtZSA9IHJwY19zdGF0ZS5ycGNfc2NoZW1lOworCQlycGNfc3RhdGUgPSAocnBjX3N0YXRlX3QgKilidWY7CisJCWFpLT5scnBjcy50eXBlID0gcnBjX3N0YXRlLT50eXBlX2NvZGU7CisJCWFpLT5scnBjcy52cmEgPSBycGNfc3RhdGUtPnZyYTsKKwkJYWktPmxycGNzLnVjY2EgPSBycGNfc3RhdGUtPnVjY2E7CisJCWFpLT5scnBjcy5yZWdpb25fbWFzayA9IHJwY19zdGF0ZS0+cmVnaW9uX21hc2s7CisJCWFpLT5scnBjcy5ycGNfc2NoZW1lID0gcnBjX3N0YXRlLT5ycGNfc2NoZW1lOwogCQlicmVhazsKIAogCS8qIFNldCByZWdpb24gc2V0dGluZ3MgKi8KQEAgLTE3MjgsMjAgKzE3NjQsMjMgQEAKIAkJYnVmWzRdID0gYWktPmhycGNzLnBkcmM7CiAKIAkJaWYgKChyZXQgPSBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZXJyOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCWNkaW5mbyhDRF9XQVJOSU5HLCAiSW52YWxpZCBEVkQga2V5IGlvY3RsICglZClcbiIsIGFpLT50eXBlKTsKLQkJcmV0dXJuIC1FTk9UVFk7CisJCXJldCA9IC1FTk9UVFk7CisJCWdvdG8gZXJyOwogCX0KLQotCXJldHVybiAwOworCXJldCA9IDA7CitlcnI6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGR2ZF9yZWFkX3BoeXNpY2FsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkdmRfc3RydWN0ICpzKQogewotCXVuc2lnbmVkIGNoYXIgYnVmWzIxXSwgKmJhc2U7CisJdW5zaWduZWQgY2hhciAqYnVmLCAqYmFzZTsKIAlzdHJ1Y3QgZHZkX2xheWVyICpsYXllcjsKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwogCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKQEAgLTE3NTAsNyArMTc4OSwxMSBAQAogCWlmIChsYXllcl9udW0gPj0gRFZEX0xBWUVSUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmLCBzaXplb2YoYnVmKSwgQ0dDX0RBVEFfUkVBRCk7CisJYnVmID0ga21hbGxvYygyMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZiwgMjEsIENHQ19EQVRBX1JFQUQpOwogCWNnYy5jbWRbMF0gPSBHUENNRF9SRUFEX0RWRF9TVFJVQ1RVUkU7CiAJY2djLmNtZFs2XSA9IGxheWVyX251bTsKIAljZ2MuY21kWzddID0gcy0+dHlwZTsKQEAgLTE3NjIsNyArMTgwNSw3IEBACiAJY2djLnF1aWV0ID0gMTsKIAogCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAKIAliYXNlID0gJmJ1Zls0XTsKIAlsYXllciA9ICZzLT5waHlzaWNhbC5sYXllcltsYXllcl9udW1dOwpAQCAtMTc4NiwxNyArMTgyOSwyNCBAQAogCWxheWVyLT5lbmRfc2VjdG9yX2wwID0gYmFzZVsxM10gPDwgMTYgfCBiYXNlWzE0XSA8PCA4IHwgYmFzZVsxNV07CiAJbGF5ZXItPmJjYSA9IGJhc2VbMTZdID4+IDc7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworZXJyOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkdmRfcmVhZF9jb3B5cmlnaHQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGR2ZF9zdHJ1Y3QgKnMpCiB7CiAJaW50IHJldDsKLQl1X2NoYXIgYnVmWzhdOworCXVfY2hhciAqYnVmOwogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJc3RydWN0IGNkcm9tX2RldmljZV9vcHMgKmNkbyA9IGNkaS0+b3BzOwogCi0JaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIENHQ19EQVRBX1JFQUQpOworCWJ1ZiA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZiwgOCwgQ0dDX0RBVEFfUkVBRCk7CiAJY2djLmNtZFswXSA9IEdQQ01EX1JFQURfRFZEX1NUUlVDVFVSRTsKIAljZ2MuY21kWzZdID0gcy0+Y29weXJpZ2h0LmxheWVyX251bTsKIAljZ2MuY21kWzddID0gcy0+dHlwZTsKQEAgLTE4MDQsMTIgKzE4NTQsMTUgQEAKIAljZ2MuY21kWzldID0gY2djLmJ1ZmxlbiAmIDB4ZmY7CiAKIAlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOwogCiAJcy0+Y29weXJpZ2h0LmNwc3QgPSBidWZbNF07CiAJcy0+Y29weXJpZ2h0LnJtaSA9IGJ1Zls1XTsKIAotCXJldHVybiAwOworCXJldCA9IDA7CitlcnI6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGR2ZF9yZWFkX2Rpc2NrZXkoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGR2ZF9zdHJ1Y3QgKnMpCkBAIC0xODQxLDI2ICsxODk0LDMzIEBACiBzdGF0aWMgaW50IGR2ZF9yZWFkX2JjYShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgZHZkX3N0cnVjdCAqcykKIHsKIAlpbnQgcmV0OwotCXVfY2hhciBidWZbNCArIDE4OF07CisJdV9jaGFyICpidWY7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CiAKLQlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmLCBzaXplb2YoYnVmKSwgQ0dDX0RBVEFfUkVBRCk7CisJYnVmID0ga21hbGxvYyg0ICsgMTg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmLCA0ICsgMTg4LCBDR0NfREFUQV9SRUFEKTsKIAljZ2MuY21kWzBdID0gR1BDTURfUkVBRF9EVkRfU1RSVUNUVVJFOwogCWNnYy5jbWRbN10gPSBzLT50eXBlOwogCWNnYy5jbWRbOV0gPSBjZ2MuYnVmbGVuICYgMHhmZjsKIAogCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAKIAlzLT5iY2EubGVuID0gYnVmWzBdIDw8IDggfCBidWZbMV07CiAJaWYgKHMtPmJjYS5sZW4gPCAxMiB8fCBzLT5iY2EubGVuID4gMTg4KSB7CiAJCWNkaW5mbyhDRF9XQVJOSU5HLCAiUmVjZWl2ZWQgaW52YWxpZCBCQ0EgbGVuZ3RoICglZClcbiIsIHMtPmJjYS5sZW4pOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnI7CiAJfQogCW1lbWNweShzLT5iY2EudmFsdWUsICZidWZbNF0sIHMtPmJjYS5sZW4pOwotCi0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK2VycjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZHZkX3JlYWRfbWFudWZhY3Qoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGR2ZF9zdHJ1Y3QgKnMpCkBAIC0xOTYwLDkgKzIwMjAsMTMgQEAKIHsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKLQljaGFyIGJ1ZmZlclszMl07CisJY2hhciAqYnVmZmVyOwogCWludCByZXQ7CiAKKwlidWZmZXIgPSBrbWFsbG9jKDMyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmZmVyLCAxNiwgQ0dDX0RBVEFfUkVBRCk7CiAJY2djLmNtZFswXSA9IEdQQ01EX1JFQURfU1VCQ0hBTk5FTDsKIAljZ2MuY21kWzFdID0gMjsgICAgIC8qIE1TRiBhZGRyZXNzaW5nICovCkBAIC0xOTcxLDcgKzIwMzUsNyBAQAogCWNnYy5jbWRbOF0gPSAxNjsKIAogCWlmICgocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAKIAlzdWJjaG5sLT5jZHNjX2F1ZGlvc3RhdHVzID0gY2djLmJ1ZmZlclsxXTsKIAlzdWJjaG5sLT5jZHNjX2Zvcm1hdCA9IENEUk9NX01TRjsKQEAgLTE5ODYsNyArMjA1MCwxMCBAQAogCXN1YmNobmwtPmNkc2NfYWJzYWRkci5tc2Yuc2Vjb25kID0gY2djLmJ1ZmZlclsxMF07CiAJc3ViY2hubC0+Y2RzY19hYnNhZGRyLm1zZi5mcmFtZSA9IGNnYy5idWZmZXJbMTFdOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK2VycjoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0zMzA5LDcgKzMzNzYsNyBAQAogCiAJKnBvcyArPSByZXQ7CiAKLQlmb3IgKGNkaSA9IHRvcENkcm9tUHRyOyBjZGk7IGNkaSA9IGNkaS0+bmV4dCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RpLCAmY2Ryb21fbGlzdCwgbGlzdCkgewogCQlzd2l0Y2ggKG9wdGlvbikgewogCQljYXNlIENUTF9OQU1FOgogCQkJcmV0ID0gc2NucHJpbnRmKGluZm8gKyAqcG9zLCBtYXhfc2l6ZSAtICpwb3MsCkBAIC0zNDMwLDcgKzM0OTcsOCBAQAogewogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpOwogCi0JZm9yIChjZGkgPSB0b3BDZHJvbVB0cjsgY2RpICE9IE5VTEw7IGNkaSA9IGNkaS0+bmV4dCkgeworCW11dGV4X2xvY2soJmNkcm9tX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkaSwgJmNkcm9tX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGF1dG9jbG9zZSAmJiBDRFJPTV9DQU4oQ0RDX0NMT1NFX1RSQVkpKQogCQkJY2RpLT5vcHRpb25zIHw9IENET19BVVRPX0NMT1NFOwogCQllbHNlIGlmICghYXV0b2Nsb3NlKQpAQCAtMzQ0OCw2ICszNTE2LDcgQEAKIAkJZWxzZQogCQkJY2RpLT5vcHRpb25zICY9IH5DRE9fQ0hFQ0tfVFlQRTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZjZHJvbV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgY2Ryb21fc3lzY3RsX2hhbmRsZXIoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLApAQCAtMzU3MSwyMiArMzY0MCwyOSBAQAogCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShjZHJvbV9zeXNjdGxfaGVhZGVyKTsKIH0KIAorI2Vsc2UgLyogQ09ORklHX1NZU0NUTCAqLworCitzdGF0aWMgdm9pZCBjZHJvbV9zeXNjdGxfcmVnaXN0ZXIodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgY2Ryb21fc3lzY3RsX3VucmVnaXN0ZXIodm9pZCkKK3sKK30KKwogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAogc3RhdGljIGludCBfX2luaXQgY2Ryb21faW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19TWVNDVEwKIAljZHJvbV9zeXNjdGxfcmVnaXN0ZXIoKTsKLSNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjZHJvbV9leGl0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiVW5pZm9ybSBDRC1ST00gZHJpdmVyIHVubG9hZGVkXG4iKTsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJY2Ryb21fc3lzY3RsX3VucmVnaXN0ZXIoKTsKLSNlbmRpZgogfQogCiBtb2R1bGVfaW5pdChjZHJvbV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwppbmRleCA0ZTJiYmNjLi43MWVjNDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCkBAIC04MjcsNyArODI3LDkgQEAKIAlkZWxfZ2VuZGlzayhnZC5kaXNrKTsKIAlpZiAoZ2Ryb21fbWFqb3IpCiAJCXVucmVnaXN0ZXJfYmxrZGV2KGdkcm9tX21ham9yLCBHRFJPTV9ERVZfTkFNRSk7Ci0JcmV0dXJuIHVucmVnaXN0ZXJfY2Ryb20oZ2QuY2RfaW5mbyk7CisJdW5yZWdpc3Rlcl9jZHJvbShnZC5jZF9pbmZvKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZHJvbV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggY2FjMDZiYy4uYjc0YjZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtNjUwLDEwICs2NTAsNyBAQAogewogCXN0cnVjdCBkaXNrX2luZm8gKmQgPSAmdmlvY2RfZGlza2luZm9bdmRldi0+dW5pdF9hZGRyZXNzXTsKIAotCWlmICh1bnJlZ2lzdGVyX2Nkcm9tKCZkLT52aW9jZF9pbmZvKSAhPSAwKQotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HCi0JCQkJIkNhbm5vdCB1bnJlZ2lzdGVyIHZpb2NkIENELVJPTSAlcyFcbiIsCi0JCQkJZC0+dmlvY2RfaW5mby5uYW1lKTsKKwl1bnJlZ2lzdGVyX2Nkcm9tKCZkLT52aW9jZF9pbmZvKTsKIAlkZWxfZ2VuZGlzayhkLT52aW9jZF9kaXNrKTsKIAlibGtfY2xlYW51cF9xdWV1ZShkLT52aW9jZF9kaXNrLT5xdWV1ZSk7CiAJcHV0X2Rpc2soZC0+dmlvY2RfZGlzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDQ3YzZiZTguLmE4N2I4OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC03MDYsNyArNzA2LDcgQEAKIAogY29uZmlnIFJUQwogCXRyaXN0YXRlICJFbmhhbmNlZCBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIKLQlkZXBlbmRzIG9uICFQUEMgJiYgIVBBUklTQyAmJiAhSUE2NCAmJiAhTTY4SyAmJiAhU1BBUkMgJiYgIUZSViAmJiAhQVJNICYmICFTVVBFUkggJiYgIVMzOTAKKwlkZXBlbmRzIG9uICFQUEMgJiYgIVBBUklTQyAmJiAhSUE2NCAmJiAhTTY4SyAmJiAhU1BBUkMgJiYgIUZSViAmJiAhQVJNICYmICFTVVBFUkggJiYgIVMzOTAgJiYgIUFWUjMyCiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUgYW5kIGNyZWF0ZSBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUgL2Rldi9ydGMgd2l0aAogCSAgbWFqb3IgbnVtYmVyIDEwIGFuZCBtaW5vciBudW1iZXIgMTM1IHVzaW5nIG1rbm9kICgibWFuIG1rbm9kIiksIHlvdQpAQCAtNzc2LDcgKzc3Niw3IEBACiAKIGNvbmZpZyBHRU5fUlRDCiAJdHJpc3RhdGUgIkdlbmVyaWMgL2Rldi9ydGMgZW11bGF0aW9uIgotCWRlcGVuZHMgb24gUlRDIT15ICYmICFJQTY0ICYmICFBUk0gJiYgIU0zMlIgJiYgIU1JUFMgJiYgIVNQQVJDICYmICFGUlYgJiYgIVMzOTAgJiYgIVNVUEVSSAorCWRlcGVuZHMgb24gUlRDIT15ICYmICFJQTY0ICYmICFBUk0gJiYgIU0zMlIgJiYgIU1JUFMgJiYgIVNQQVJDICYmICFGUlYgJiYgIVMzOTAgJiYgIVNVUEVSSCAmJiAhQVZSMzIKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgY3JlYXRlIGEgY2hhcmFjdGVyIHNwZWNpYWwgZmlsZSAvZGV2L3J0YyB3aXRoCiAJICBtYWpvciBudW1iZXIgMTAgYW5kIG1pbm9yIG51bWJlciAxMzUgdXNpbmcgbWtub2QgKCJtYW4gbWtub2QiKSwgeW91CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IDg3YmU0NjQuLmQyODY2OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC00MSw2ICs0MSw3IEBACiAJaWYgKHBhZ2VfbWFwLT5yZWFsID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisjaWZuZGVmIENPTkZJR19YODYKIAlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7CiAJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CiAJcGFnZV9tYXAtPnJlbWFwcGVkID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fZ2FydChwYWdlX21hcC0+cmVhbCksCkBAIC01Miw2ICs1MywxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisjZWxzZQorCXNldF9tZW1vcnlfdWMoKHVuc2lnbmVkIGxvbmcpcGFnZV9tYXAtPnJlYWwsIDEpOworCXBhZ2VfbWFwLT5yZW1hcHBlZCA9IHBhZ2VfbWFwLT5yZWFsOworI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKIAkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgcGFnZV9tYXAtPnJlbWFwcGVkK2kpOwpAQCAtNjMsOCArNjgsMTIgQEAKIAogc3RhdGljIHZvaWQgYW1kX2ZyZWVfcGFnZV9tYXAoc3RydWN0IGFtZF9wYWdlX21hcCAqcGFnZV9tYXApCiB7CisjaWZuZGVmIENPTkZJR19YODYKIAlpb3VubWFwKHBhZ2VfbWFwLT5yZW1hcHBlZCk7CiAJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7CisjZWxzZQorCXNldF9tZW1vcnlfd2IoKHVuc2lnbmVkIGxvbmcpcGFnZV9tYXAtPnJlYWwsIDEpOworI2VuZGlmCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlX21hcC0+cmVhbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggMmQ0NmI3MS4uNTVjOTdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTYwLDE4ICs2MCw5IEBACiAJaWYgKHBhZ2VfbWFwLT5yZWFsID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOworCXNldF9tZW1vcnlfdWMoKHVuc2lnbmVkIGxvbmcpcGFnZV9tYXAtPnJlYWwsIDEpOwogCWVyciA9IG1hcF9wYWdlX2ludG9fYWdwKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotCXBhZ2VfbWFwLT5yZW1hcHBlZCA9IGlvcmVtYXBfbm9jYWNoZSh2aXJ0X3RvX2dhcnQocGFnZV9tYXAtPnJlYWwpLAotCQkJCQkgICAgUEFHRV9TSVpFKTsKLQlpZiAocGFnZV9tYXAtPnJlbWFwcGVkID09IE5VTEwgfHwgZXJyKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfbWFwLT5yZWFsKTsKLQkJcGFnZV9tYXAtPnJlYWwgPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JLypDQUNIRV9GTFVTSCgpOyovCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisJcGFnZV9tYXAtPnJlbWFwcGVkID0gcGFnZV9tYXAtPnJlYWw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKIAkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgcGFnZV9tYXAtPnJlbWFwcGVkK2kpOwpAQCAtODUsOCArNzYsNyBAQAogc3RhdGljIHZvaWQgYXRpX2ZyZWVfcGFnZV9tYXAoc3RydWN0IGF0aV9wYWdlX21hcCAqcGFnZV9tYXApCiB7CiAJdW5tYXBfcGFnZV9mcm9tX2FncCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKLQlpb3VubWFwKHBhZ2VfbWFwLT5yZW1hcHBlZCk7Ci0JQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7CisJc2V0X21lbW9yeV93YigodW5zaWduZWQgbG9uZylwYWdlX21hcC0+cmVhbCwgMSk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlX21hcC0+cmVhbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKaW5kZXggNzQ4NGJjNy4uN2ZjMGM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKQEAgLTkzMiw5ICs5MzIsMTQgQEAKIAlhZ3BfZ2F0dF90YWJsZSA9ICh2b2lkICopdGFibGU7CiAKIAlicmlkZ2UtPmRyaXZlci0+Y2FjaGVfZmx1c2goKTsKKyNpZmRlZiBDT05GSUdfWDg2CisJc2V0X21lbW9yeV91YygodW5zaWduZWQgbG9uZyl0YWJsZSwgMSA8PCBwYWdlX29yZGVyKTsKKwlicmlkZ2UtPmdhdHRfdGFibGUgPSAodm9pZCAqKXRhYmxlOworI2Vsc2UKIAlicmlkZ2UtPmdhdHRfdGFibGUgPSBpb3JlbWFwX25vY2FjaGUodmlydF90b19nYXJ0KHRhYmxlKSwKIAkJCQkJKFBBR0VfU0laRSAqICgxIDw8IHBhZ2Vfb3JkZXIpKSk7CiAJYnJpZGdlLT5kcml2ZXItPmNhY2hlX2ZsdXNoKCk7CisjZW5kaWYKIAogCWlmIChicmlkZ2UtPmdhdHRfdGFibGUgPT0gTlVMTCkgewogCQlmb3IgKHBhZ2UgPSB2aXJ0X3RvX3BhZ2UodGFibGUpOyBwYWdlIDw9IHZpcnRfdG9fcGFnZSh0YWJsZV9lbmQpOyBwYWdlKyspCkBAIC05OTEsNyArOTk2LDExIEBACiAJICogY2FsbGVkLCB0aGVuIGFsbCBhZ3AgbWVtb3J5IGlzIGRlYWxsb2NhdGVkIGFuZCByZW1vdmVkCiAJICogZnJvbSB0aGUgdGFibGUuICovCiAKKyNpZmRlZiBDT05GSUdfWDg2CisJc2V0X21lbW9yeV93YigodW5zaWduZWQgbG9uZylicmlkZ2UtPmdhdHRfdGFibGUsIDEgPDwgcGFnZV9vcmRlcik7CisjZWxzZQogCWlvdW5tYXAoYnJpZGdlLT5nYXR0X3RhYmxlKTsKKyNlbmRpZgogCXRhYmxlID0gKGNoYXIgKikgYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWw7CiAJdGFibGVfZW5kID0gdGFibGUgKyAoKFBBR0VfU0laRSAqICgxIDw8IHBhZ2Vfb3JkZXIpKSAtIDEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCmluZGV4IGViMWExYzcuLmI2NzkxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCkBAIC0xNCw2ICsxNCw5IEBACiAjZGVmaW5lIFNJU19UTEJDTlRSTAkweDk3CiAjZGVmaW5lIFNJU19UTEJGTFVTSAkweDk4CiAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NjIJMHgwNjYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjcxCTB4MDY3MQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgYWdwX3Npc19mb3JjZV9kZWxheSA9IDA7CiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgYWdwX3Npc19hZ3Bfc3BlYyA9IC0xOwogCkBAIC0yNyw4ICszMCw4IEBACiAJdmFsdWVzID0gQV9TSVpFXzgoYWdwX2JyaWRnZS0+ZHJpdmVyLT5hcGVydHVyZV9zaXplcyk7CiAJZm9yIChpID0gMDsgaSA8IGFncF9icmlkZ2UtPmRyaXZlci0+bnVtX2FwZXJ0dXJlX3NpemVzOyBpKyspIHsKIAkJaWYgKCh0ZW1wX3NpemUgPT0gdmFsdWVzW2ldLnNpemVfdmFsdWUpIHx8Ci0JCSAgICAoKHRlbXBfc2l6ZSAmIH4oMHgwMykpID09Ci0JCSAgICAgKHZhbHVlc1tpXS5zaXplX3ZhbHVlICYgfigweDAzKSkpKSB7CisJCSAgICAoKHRlbXBfc2l6ZSAmIH4oMHgwNykpID09CisJCSAgICAgKHZhbHVlc1tpXS5zaXplX3ZhbHVlICYgfigweDA3KSkpKSB7CiAJCQlhZ3BfYnJpZGdlLT5wcmV2aW91c19zaXplID0KIAkJCSAgICBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUgPSAodm9pZCAqKSAodmFsdWVzICsgaSk7CiAKQEAgLTIxNCw2ICsyMTcsMjYgQEAKIAlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgYWdwX3Npc19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZ3Bfc2lzX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlyZXR1cm4gc2lzX2RyaXZlci5jb25maWd1cmUoKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX3Npc19wY2lfdGFibGVbXSA9IHsKIAl7CiAJCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIDw8IDgpLApAQCAtMzMxLDYgKzM1NCwyMiBAQAogCQkuY2xhc3MJCT0gKFBDSV9DTEFTU19CUklER0VfSE9TVCA8PCA4KSwKIAkJLmNsYXNzX21hc2sJPSB+MCwKIAkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1NJLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfU0lfNjYyLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJfSwKKwl7CisJCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIDw8IDgpLAorCQkuY2xhc3NfbWFzawk9IH4wLAorCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfU0ksCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9TSV82NzEsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwl9LAorCXsKKwkJLmNsYXNzCQk9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgPDwgOCksCisJCS5jbGFzc19tYXNrCT0gfjAsCisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9TSSwKIAkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1NJXzczMCwKIAkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELApAQCAtMzkzLDYgKzQzMiwxMCBAQAogCS5pZF90YWJsZQk9IGFncF9zaXNfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3Bfc2lzX3Byb2JlLAogCS5yZW1vdmUJCT0gYWdwX3Npc19yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBhZ3Bfc2lzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZ3Bfc2lzX3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWdwX3Npc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jCmluZGV4IDU1MWVmMjUuLmUwODkzNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jCkBAIC01MiwyOCArNTIsMjAgQEAKIAlpZiAocGFnZV9tYXAtPnJlYWwgPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwotCXBhZ2VfbWFwLT5yZW1hcHBlZCA9IGlvcmVtYXBfbm9jYWNoZSh2aXJ0X3RvX2dhcnQocGFnZV9tYXAtPnJlYWwpLAotCQkJCQkgICAgUEFHRV9TSVpFKTsKLQlpZiAocGFnZV9tYXAtPnJlbWFwcGVkID09IE5VTEwpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZV9tYXAtPnJlYWwpOwotCQlwYWdlX21hcC0+cmVhbCA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKKworCXNldF9tZW1vcnlfdWMoKHVuc2lnbmVkIGxvbmcpcGFnZV9tYXAtPnJlYWwsIDEpOworCXBhZ2VfbWFwLT5yZW1hcHBlZCA9IHBhZ2VfbWFwLT5yZWFsOwogCiAJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKQogCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBwYWdlX21hcC0+cmVtYXBwZWQraSk7CisJCS8qIFJlZCBQZW46IEV2ZXJ5b25lIGVsc2UgZG9lcyBwY2kgcG9zdGluZyBmbHVzaCBoZXJlICovCiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2VydmVyd29ya3NfZnJlZV9wYWdlX21hcChzdHJ1Y3Qgc2VydmVyd29ya3NfcGFnZV9tYXAgKnBhZ2VfbWFwKQogewotCWlvdW5tYXAocGFnZV9tYXAtPnJlbWFwcGVkKTsKLQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKKwlzZXRfbWVtb3J5X3diKCh1bnNpZ25lZCBsb25nKXBhZ2VfbWFwLT5yZWFsLCAxKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfbWFwLT5yZWFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RlZmtleW1hcC5jX3NoaXBwZWQgYi9kcml2ZXJzL2NoYXIvZGVma2V5bWFwLmNfc2hpcHBlZAppbmRleCAwYWE0MTlhLi5kMjIwOGRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RlZmtleW1hcC5jX3NoaXBwZWQKKysrIGIvZHJpdmVycy9jaGFyL2RlZmtleW1hcC5jX3NoaXBwZWQKQEAgLTIyMyw0MCArMjIzLDQwIEBACiB9OwogCiBzdHJ1Y3Qga2JkaWFjcnVjIGFjY2VudF90YWJsZVtNQVhfRElBQ1JdID0gewotCXsnYCcsICdBJywgJ1wzMDAnfSwJeydgJywgJ2EnLCAnXDM0MCd9LAotCXsnXCcnLCAnQScsICdcMzAxJ30sCXsnXCcnLCAnYScsICdcMzQxJ30sCi0JeydeJywgJ0EnLCAnXDMwMid9LAl7J14nLCAnYScsICdcMzQyJ30sCi0Jeyd+JywgJ0EnLCAnXDMwMyd9LAl7J34nLCAnYScsICdcMzQzJ30sCi0JeyciJywgJ0EnLCAnXDMwNCd9LAl7JyInLCAnYScsICdcMzQ0J30sCi0JeydPJywgJ0EnLCAnXDMwNSd9LAl7J28nLCAnYScsICdcMzQ1J30sCi0JeycwJywgJ0EnLCAnXDMwNSd9LAl7JzAnLCAnYScsICdcMzQ1J30sCi0JeydBJywgJ0EnLCAnXDMwNSd9LAl7J2EnLCAnYScsICdcMzQ1J30sCi0JeydBJywgJ0UnLCAnXDMwNid9LAl7J2EnLCAnZScsICdcMzQ2J30sCi0JeycsJywgJ0MnLCAnXDMwNyd9LAl7JywnLCAnYycsICdcMzQ3J30sCi0JeydgJywgJ0UnLCAnXDMxMCd9LAl7J2AnLCAnZScsICdcMzUwJ30sCi0JeydcJycsICdFJywgJ1wzMTEnfSwJeydcJycsICdlJywgJ1wzNTEnfSwKLQl7J14nLCAnRScsICdcMzEyJ30sCXsnXicsICdlJywgJ1wzNTInfSwKLQl7JyInLCAnRScsICdcMzEzJ30sCXsnIicsICdlJywgJ1wzNTMnfSwKLQl7J2AnLCAnSScsICdcMzE0J30sCXsnYCcsICdpJywgJ1wzNTQnfSwKLQl7J1wnJywgJ0knLCAnXDMxNSd9LAl7J1wnJywgJ2knLCAnXDM1NSd9LAotCXsnXicsICdJJywgJ1wzMTYnfSwJeydeJywgJ2knLCAnXDM1Nid9LAotCXsnIicsICdJJywgJ1wzMTcnfSwJeyciJywgJ2knLCAnXDM1Nyd9LAotCXsnLScsICdEJywgJ1wzMjAnfSwJeyctJywgJ2QnLCAnXDM2MCd9LAotCXsnficsICdOJywgJ1wzMjEnfSwJeyd+JywgJ24nLCAnXDM2MSd9LAotCXsnYCcsICdPJywgJ1wzMjInfSwJeydgJywgJ28nLCAnXDM2Mid9LAotCXsnXCcnLCAnTycsICdcMzIzJ30sCXsnXCcnLCAnbycsICdcMzYzJ30sCi0JeydeJywgJ08nLCAnXDMyNCd9LAl7J14nLCAnbycsICdcMzY0J30sCi0Jeyd+JywgJ08nLCAnXDMyNSd9LAl7J34nLCAnbycsICdcMzY1J30sCi0JeyciJywgJ08nLCAnXDMyNid9LAl7JyInLCAnbycsICdcMzY2J30sCi0JeycvJywgJ08nLCAnXDMzMCd9LAl7Jy8nLCAnbycsICdcMzcwJ30sCi0JeydgJywgJ1UnLCAnXDMzMSd9LAl7J2AnLCAndScsICdcMzcxJ30sCi0JeydcJycsICdVJywgJ1wzMzInfSwJeydcJycsICd1JywgJ1wzNzInfSwKLQl7J14nLCAnVScsICdcMzMzJ30sCXsnXicsICd1JywgJ1wzNzMnfSwKLQl7JyInLCAnVScsICdcMzM0J30sCXsnIicsICd1JywgJ1wzNzQnfSwKLQl7J1wnJywgJ1knLCAnXDMzNSd9LAl7J1wnJywgJ3knLCAnXDM3NSd9LAotCXsnVCcsICdIJywgJ1wzMzYnfSwJeyd0JywgJ2gnLCAnXDM3Nid9LAotCXsncycsICdzJywgJ1wzMzcnfSwJeyciJywgJ3knLCAnXDM3Nyd9LAotCXsncycsICd6JywgJ1wzMzcnfSwJeydpJywgJ2onLCAnXDM3Nyd9LAorCXsnYCcsICdBJywgMDMwMH0sCXsnYCcsICdhJywgMDM0MH0sCisJeydcJycsICdBJywgMDMwMX0sCXsnXCcnLCAnYScsIDAzNDF9LAorCXsnXicsICdBJywgMDMwMn0sCXsnXicsICdhJywgMDM0Mn0sCisJeyd+JywgJ0EnLCAwMzAzfSwJeyd+JywgJ2EnLCAwMzQzfSwKKwl7JyInLCAnQScsIDAzMDR9LAl7JyInLCAnYScsIDAzNDR9LAorCXsnTycsICdBJywgMDMwNX0sCXsnbycsICdhJywgMDM0NX0sCisJeycwJywgJ0EnLCAwMzA1fSwJeycwJywgJ2EnLCAwMzQ1fSwKKwl7J0EnLCAnQScsIDAzMDV9LAl7J2EnLCAnYScsIDAzNDV9LAorCXsnQScsICdFJywgMDMwNn0sCXsnYScsICdlJywgMDM0Nn0sCisJeycsJywgJ0MnLCAwMzA3fSwJeycsJywgJ2MnLCAwMzQ3fSwKKwl7J2AnLCAnRScsIDAzMTB9LAl7J2AnLCAnZScsIDAzNTB9LAorCXsnXCcnLCAnRScsIDAzMTF9LAl7J1wnJywgJ2UnLCAwMzUxfSwKKwl7J14nLCAnRScsIDAzMTJ9LAl7J14nLCAnZScsIDAzNTJ9LAorCXsnIicsICdFJywgMDMxM30sCXsnIicsICdlJywgMDM1M30sCisJeydgJywgJ0knLCAwMzE0fSwJeydgJywgJ2knLCAwMzU0fSwKKwl7J1wnJywgJ0knLCAwMzE1fSwJeydcJycsICdpJywgMDM1NX0sCisJeydeJywgJ0knLCAwMzE2fSwJeydeJywgJ2knLCAwMzU2fSwKKwl7JyInLCAnSScsIDAzMTd9LAl7JyInLCAnaScsIDAzNTd9LAorCXsnLScsICdEJywgMDMyMH0sCXsnLScsICdkJywgMDM2MH0sCisJeyd+JywgJ04nLCAwMzIxfSwJeyd+JywgJ24nLCAwMzYxfSwKKwl7J2AnLCAnTycsIDAzMjJ9LAl7J2AnLCAnbycsIDAzNjJ9LAorCXsnXCcnLCAnTycsIDAzMjN9LAl7J1wnJywgJ28nLCAwMzYzfSwKKwl7J14nLCAnTycsIDAzMjR9LAl7J14nLCAnbycsIDAzNjR9LAorCXsnficsICdPJywgMDMyNX0sCXsnficsICdvJywgMDM2NX0sCisJeyciJywgJ08nLCAwMzI2fSwJeyciJywgJ28nLCAwMzY2fSwKKwl7Jy8nLCAnTycsIDAzMzB9LAl7Jy8nLCAnbycsIDAzNzB9LAorCXsnYCcsICdVJywgMDMzMX0sCXsnYCcsICd1JywgMDM3MX0sCisJeydcJycsICdVJywgMDMzMn0sCXsnXCcnLCAndScsIDAzNzJ9LAorCXsnXicsICdVJywgMDMzM30sCXsnXicsICd1JywgMDM3M30sCisJeyciJywgJ1UnLCAwMzM0fSwJeyciJywgJ3UnLCAwMzc0fSwKKwl7J1wnJywgJ1knLCAwMzM1fSwJeydcJycsICd5JywgMDM3NX0sCisJeydUJywgJ0gnLCAwMzM2fSwJeyd0JywgJ2gnLCAwMzc2fSwKKwl7J3MnLCAncycsIDAzMzd9LAl7JyInLCAneScsIDAzNzd9LAorCXsncycsICd6JywgMDMzN30sCXsnaScsICdqJywgMDM3N30sCiB9OwogCiB1bnNpZ25lZCBpbnQgYWNjZW50X3RhYmxlX3NpemUgPSA2ODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYyBiL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYwppbmRleCBkMzUyZGJiLi4xNDFmNGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jCkBAIC0zNSw0MiArMzUsMjMgQEAKIAogIyBkZWZpbmUgQVRJX1BDSUdBUlRfUEFHRV9TSVpFCQk0MDk2CS8qKjwgUENJIEdBUlQgcGFnZSBzaXplICovCiAKLXN0YXRpYyB2b2lkICpkcm1fYXRpX2FsbG9jX3BjaWdhcnRfdGFibGUoaW50IG9yZGVyKQorc3RhdGljIGludCBkcm1fYXRpX2FsbG9jX3BjaWdhcnRfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICpnYXJ0X2luZm8pCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBpOworCWdhcnRfaW5mby0+dGFibGVfaGFuZGxlID0gZHJtX3BjaV9hbGxvYyhkZXYsIGdhcnRfaW5mby0+dGFibGVfc2l6ZSwKKwkJCQkJCVBBR0VfU0laRSwKKwkJCQkJCWdhcnRfaW5mby0+dGFibGVfbWFzayk7CisJaWYgKGdhcnRfaW5mby0+dGFibGVfaGFuZGxlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi0JRFJNX0RFQlVHKCIlZCBvcmRlclxuIiwgb3JkZXIpOwotCi0JYWRkcmVzcyA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsCi0JCQkJICAgb3JkZXIpOwotCWlmIChhZGRyZXNzID09IDBVTCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwYWdlID0gdmlydF90b19wYWdlKGFkZHJlc3MpOwotCi0JZm9yIChpID0gMDsgaSA8IG9yZGVyOyBpKyssIHBhZ2UrKykKLQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwotCi0JRFJNX0RFQlVHKCJyZXR1cm5pbmcgMHglMDhseFxuIiwgYWRkcmVzcyk7Ci0JcmV0dXJuICh2b2lkICopYWRkcmVzczsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHJtX2F0aV9mcmVlX3BjaWdhcnRfdGFibGUodm9pZCAqYWRkcmVzcywgaW50IG9yZGVyKQorc3RhdGljIHZvaWQgZHJtX2F0aV9mcmVlX3BjaWdhcnRfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICpnYXJ0X2luZm8pCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IGk7Ci0JaW50IG51bV9wYWdlcyA9IDEgPDwgb3JkZXI7Ci0JRFJNX0RFQlVHKCJcbiIpOwotCi0JcGFnZSA9IHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylhZGRyZXNzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKywgcGFnZSsrKQotCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywgb3JkZXIpOworCWRybV9wY2lfZnJlZShkZXYsIGdhcnRfaW5mby0+dGFibGVfaGFuZGxlKTsKKwlnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZSA9IE5VTEw7CiB9CiAKIGludCBkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKQEAgLTc4LDggKzU5LDcgQEAKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CiAJaW50IGk7Ci0JaW50IG9yZGVyOwotCWludCBudW1fcGFnZXMsIG1heF9wYWdlczsKKwlpbnQgbWF4X3BhZ2VzOwogCiAJLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0aW9ucyAqLwogCWlmICghZW50cnkpIHsKQEAgLTg3LDE1ICs2Nyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCW9yZGVyID0gZHJtX29yZGVyKChnYXJ0X2luZm8tPnRhYmxlX3NpemUgKyAoUEFHRV9TSVpFLTEpKSAvIFBBR0VfU0laRSk7Ci0JbnVtX3BhZ2VzID0gMSA8PCBvcmRlcjsKLQogCWlmIChnYXJ0X2luZm8tPmJ1c19hZGRyKSB7Ci0JCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCBnYXJ0X2luZm8tPmJ1c19hZGRyLAotCQkJCQkgbnVtX3BhZ2VzICogUEFHRV9TSVpFLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JCX0KIAogCQltYXhfcGFnZXMgPSAoZ2FydF9pbmZvLT50YWJsZV9zaXplIC8gc2l6ZW9mKHUzMikpOwogCQlwYWdlcyA9IChlbnRyeS0+cGFnZXMgPD0gbWF4X3BhZ2VzKQpAQCAtMTEyLDEwICs4NCw5IEBACiAJCQlnYXJ0X2luZm8tPmJ1c19hZGRyID0gMDsKIAl9CiAKLQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOCi0JICAgICYmIGdhcnRfaW5mby0+YWRkcikgewotCQlkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZShnYXJ0X2luZm8tPmFkZHIsIG9yZGVyKTsKLQkJZ2FydF9pbmZvLT5hZGRyID0gTlVMTDsKKwlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOICYmCisJICAgIGdhcnRfaW5mby0+dGFibGVfaGFuZGxlKSB7CisJCWRybV9hdGlfZnJlZV9wY2lnYXJ0X3RhYmxlKGRldiwgZ2FydF9pbmZvKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTEyNywxMSArOTgsMTAgQEAKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOwogCXZvaWQgKmFkZHJlc3MgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7Ci0JdTMyICpwY2lfZ2FydCwgcGFnZV9iYXNlLCBidXNfYWRkcmVzcyA9IDA7CisJdTMyICpwY2lfZ2FydCwgcGFnZV9iYXNlOworCWRtYV9hZGRyX3QgYnVzX2FkZHJlc3MgPSAwOwogCWludCBpLCBqLCByZXQgPSAwOwotCWludCBvcmRlcjsKIAlpbnQgbWF4X3BhZ2VzOwotCWludCBudW1fcGFnZXM7CiAKIAlpZiAoIWVudHJ5KSB7CiAJCURSTV9FUlJPUigibm8gc2NhdHRlci9nYXRoZXIgbWVtb3J5IVxuIik7CkBAIC0xNDEsMzYgKzExMSwyMCBAQAogCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pIHsKIAkJRFJNX0RFQlVHKCJQQ0k6IG5vIHRhYmxlIGluIFZSQU06IHVzaW5nIG5vcm1hbCBSQU1cbiIpOwogCi0JCW9yZGVyID0gZHJtX29yZGVyKChnYXJ0X2luZm8tPnRhYmxlX3NpemUgKwotCQkJCSAgIChQQUdFX1NJWkUtMSkpIC8gUEFHRV9TSVpFKTsKLQkJbnVtX3BhZ2VzID0gMSA8PCBvcmRlcjsKLQkJYWRkcmVzcyA9IGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZShvcmRlcik7Ci0JCWlmICghYWRkcmVzcykgeworCQlyZXQgPSBkcm1fYXRpX2FsbG9jX3BjaWdhcnRfdGFibGUoZGV2LCBnYXJ0X2luZm8pOworCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBQQ0kgR0FSVCBwYWdlIVxuIik7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlpZiAoIWRldi0+cGRldikgewotCQkJRFJNX0VSUk9SKCJQQ0kgZGV2aWNlIHVua25vd24hXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWJ1c19hZGRyZXNzID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCBhZGRyZXNzLAotCQkJCQkgICAgIG51bV9wYWdlcyAqIFBBR0VfU0laRSwKLQkJCQkJICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKGJ1c19hZGRyZXNzID09IDApIHsKLQkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7Ci0JCQlvcmRlciA9IGRybV9vcmRlcigoZ2FydF9pbmZvLT50YWJsZV9zaXplICsKLQkJCQkJICAgKFBBR0VfU0laRS0xKSkgLyBQQUdFX1NJWkUpOwotCQkJZHJtX2F0aV9mcmVlX3BjaWdhcnRfdGFibGUoYWRkcmVzcywgb3JkZXIpOwotCQkJYWRkcmVzcyA9IE5VTEw7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KKwkJYWRkcmVzcyA9IGdhcnRfaW5mby0+dGFibGVfaGFuZGxlLT52YWRkcjsKKwkJYnVzX2FkZHJlc3MgPSBnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZS0+YnVzYWRkcjsKIAl9IGVsc2UgewogCQlhZGRyZXNzID0gZ2FydF9pbmZvLT5hZGRyOwogCQlidXNfYWRkcmVzcyA9IGdhcnRfaW5mby0+YnVzX2FkZHI7Ci0JCURSTV9ERUJVRygiUENJOiBHYXJ0IFRhYmxlOiBWUkFNICUwOFggbWFwcGVkIGF0ICUwOGxYXG4iLAotCQkJICBidXNfYWRkcmVzcywgKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyk7CisJCURSTV9ERUJVRygiUENJOiBHYXJ0IFRhYmxlOiBWUkFNICUwOExYIG1hcHBlZCBhdCAlMDhsWFxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylidXNfYWRkcmVzcywKKwkJCSAgKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyk7CiAJfQogCiAJcGNpX2dhcnQgPSAodTMyICopIGFkZHJlc3M7CkBAIC0yMTQsNiArMTY4LDEyIEBACiAJCX0KIAl9CiAKKwlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKQorCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmZGV2LT5wZGV2LT5kZXYsCisJCQkJCSAgIGJ1c19hZGRyZXNzLAorCQkJCQkgICBtYXhfcGFnZXMgKiBzaXplb2YodTMyKSwKKwkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisKIAlyZXQgPSAxOwogCiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAppbmRleCAxOWQzYmU1Li42NTQwOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgkvKiBGb3IgKHVuKWxvY2tfa2VybmVsICovCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtNTUxLDYgKzU1Miw4IEBACiAJaW50IGdhcnRfcmVnX2lmOwogCXZvaWQgKmFkZHI7CiAJZG1hX2FkZHJfdCBidXNfYWRkcjsKKwlkbWFfYWRkcl90IHRhYmxlX21hc2s7CisJc3RydWN0IGRybV9kbWFfaGFuZGxlICp0YWJsZV9oYW5kbGU7CiAJZHJtX2xvY2FsX21hcF90IG1hcHBpbmc7CiAJaW50IHRhYmxlX3NpemU7CiB9OwpAQCAtNTY4LDcgKzU3MSw3IEBACiAJdm9pZCAoKnBvc3RjbG9zZSkgKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBkcm1fZmlsZSAqKTsKIAl2b2lkICgqbGFzdGNsb3NlKSAoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJaW50ICgqdW5sb2FkKSAoc3RydWN0IGRybV9kZXZpY2UgKik7Ci0JaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBkcm1fZGV2aWNlICopOworCWludCAoKnN1c3BlbmQpIChzdHJ1Y3QgZHJtX2RldmljZSAqLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkgKHN0cnVjdCBkcm1fZGV2aWNlICopOwogCWludCAoKmRtYV9pb2N0bCkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAl2b2lkICgqZG1hX3JlYWR5KSAoc3RydWN0IGRybV9kZXZpY2UgKik7CkBAIC02MzcsNyArNjQwLDYgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGV2X3Jvb3Q7ICAvKio8IHByb2MgZGlyZWN0b3J5IGVudHJ5ICovCiAJZGV2X3QgZGV2aWNlOwkJCS8qKjwgRGV2aWNlIG51bWJlciBmb3IgbWtub2QgKi8KLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXZfY2xhc3M7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYwppbmRleCAzOTkyZjczMi4uZjA5ZDRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+aGVhZC0+ZGV2OwogCWludCByZXRjb2RlID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJbG9ja19rZXJuZWwoKTsKIApAQCAtMzU3LDkgKzM1OCwxMSBAQAogCQkJICovCiAKIAkJCWRvewotCQkJCXNwaW5fbG9jaygmZGV2LT5sb2NrLnNwaW5sb2NrKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLnNwaW5sb2NrLAorCQkJCQkJICBpcnFmbGFncyk7CiAJCQkJbG9ja2VkID0gZGV2LT5sb2NrLmlkbGVfaGFzX2xvY2s7Ci0JCQkJc3Bpbl91bmxvY2soJmRldi0+bG9jay5zcGlubG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLnNwaW5sb2NrLAorCQkJCQkJICAgICAgIGlycWZsYWdzKTsKIAkJCQlpZiAobG9ja2VkKQogCQkJCQlicmVhazsKIAkJCQlzY2hlZHVsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jCmluZGV4IGJlYTJhN2QuLjEyZGNkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9sb2NrLmMKQEAgLTUzLDYgKzUzLDcgQEAKIAlERUNMQVJFX1dBSVRRVUVVRShlbnRyeSwgY3VycmVudCk7CiAJc3RydWN0IGRybV9sb2NrICpsb2NrID0gZGF0YTsKIAlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJKytmaWxlX3ByaXYtPmxvY2tfY291bnQ7CiAKQEAgLTcxLDkgKzcyLDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJYWRkX3dhaXRfcXVldWUoJmRldi0+bG9jay5sb2NrX3F1ZXVlLCAmZW50cnkpOwotCXNwaW5fbG9jaygmZGV2LT5sb2NrLnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLnNwaW5sb2NrLCBpcnFmbGFncyk7CiAJZGV2LT5sb2NrLnVzZXJfd2FpdGVycysrOwotCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2suc3BpbmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jay5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWZvciAoOzspIHsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAoIWRldi0+bG9jay5od19sb2NrKSB7CkBAIC05NSw5ICs5Niw5IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzcGluX2xvY2soJmRldi0+bG9jay5zcGlubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jay5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWRldi0+bG9jay51c2VyX3dhaXRlcnMtLTsKLQlzcGluX3VubG9jaygmZGV2LT5sb2NrLnNwaW5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2suc3BpbmxvY2ssIGlycWZsYWdzKTsKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+bG9jay5sb2NrX3F1ZXVlLCAmZW50cnkpOwogCkBAIC0xOTgsOCArMTk5LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHByZXY7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrID0gJmxvY2tfZGF0YS0+aHdfbG9jay0+bG9jazsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWRvIHsKIAkJb2xkID0gKmxvY2s7CiAJCWlmIChvbGQgJiBfRFJNX0xPQ0tfSEVMRCkKQEAgLTIxMSw3ICsyMTMsNyBAQAogCQl9CiAJCXByZXYgPSBjbXB4Y2hnKGxvY2ssIG9sZCwgbmV3KTsKIAl9IHdoaWxlIChwcmV2ICE9IG9sZCk7Ci0Jc3Bpbl91bmxvY2soJmxvY2tfZGF0YS0+c3BpbmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIAogCWlmIChfRFJNX0xPQ0tJTkdfQ09OVEVYVChvbGQpID09IGNvbnRleHQpIHsKIAkJaWYgKG9sZCAmIF9EUk1fTE9DS19IRUxEKSB7CkBAIC0yNzIsMTUgKzI3NCwxNiBAQAogewogCXVuc2lnbmVkIGludCBvbGQsIG5ldywgcHJldjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmxvY2sgPSAmbG9ja19kYXRhLT5od19sb2NrLT5sb2NrOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKLQlzcGluX2xvY2soJmxvY2tfZGF0YS0+c3BpbmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrX2RhdGEtPnNwaW5sb2NrLCBpcnFmbGFncyk7CiAJaWYgKGxvY2tfZGF0YS0+a2VybmVsX3dhaXRlcnMgIT0gMCkgewogCQlkcm1fbG9ja190cmFuc2Zlcihsb2NrX2RhdGEsIDApOwogCQlsb2NrX2RhdGEtPmlkbGVfaGFzX2xvY2sgPSAxOwotCQlzcGluX3VubG9jaygmbG9ja19kYXRhLT5zcGlubG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQotCXNwaW5fdW5sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrX2RhdGEtPnNwaW5sb2NrLCBpcnFmbGFncyk7CiAKIAlkbyB7CiAJCW9sZCA9ICpsb2NrOwpAQCAtMzQ0LDE5ICszNDcsMjAgQEAKIHZvaWQgZHJtX2lkbGVsb2NrX3Rha2Uoc3RydWN0IGRybV9sb2NrX2RhdGEgKmxvY2tfZGF0YSkKIHsKIAlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWxvY2tfZGF0YS0+a2VybmVsX3dhaXRlcnMrKzsKIAlpZiAoIWxvY2tfZGF0YS0+aWRsZV9oYXNfbG9jaykgewogCi0JCXNwaW5fdW5sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCQlyZXQgPSBkcm1fbG9ja190YWtlKGxvY2tfZGF0YSwgRFJNX0tFUk5FTF9DT05URVhUKTsKLQkJc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIAogCQlpZiAocmV0ID09IDEpCiAJCQlsb2NrX2RhdGEtPmlkbGVfaGFzX2xvY2sgPSAxOwogCX0KLQlzcGluX3VubG9jaygmbG9ja19kYXRhLT5zcGlubG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChkcm1faWRsZWxvY2tfdGFrZSk7CiAKQEAgLTM2NCw4ICszNjgsOSBAQAogewogCXVuc2lnbmVkIGludCBvbGQsIHByZXY7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrID0gJmxvY2tfZGF0YS0+aHdfbG9jay0+bG9jazsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZsb2NrX2RhdGEtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja19kYXRhLT5zcGlubG9jaywgaXJxZmxhZ3MpOwogCWlmICgtLWxvY2tfZGF0YS0+a2VybmVsX3dhaXRlcnMgPT0gMCkgewogCQlpZiAobG9ja19kYXRhLT5pZGxlX2hhc19sb2NrKSB7CiAJCQlkbyB7CkBAIC0zNzYsNyArMzgxLDcgQEAKIAkJCWxvY2tfZGF0YS0+aWRsZV9oYXNfbG9jayA9IDA7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmxvY2tfZGF0YS0+c3BpbmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tfZGF0YS0+c3BpbmxvY2ssIGlycWZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2lkbGVsb2NrX3JlbGVhc2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2lpZHMuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGY1MjQ2ODguLmE2YTQ5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCkBAIC04Myw2ICs4Myw3IEBACiAJezB4MTAwMiwgMHg1NDYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDU0NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg1NjU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMjA0LDkgKzIwNSw5IEBACiAJezB4MTAwMiwgMHg3MUQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNTMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDcxREEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3MURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNTMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDcyMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg3MjEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNTMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDcyMTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NzIwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjUxNXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDcyMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1MTV8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NzIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjUxNXxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3MjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I1ODB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3MjQzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I1ODB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3MjQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I1ODB8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0yMzYsNiArMjM3LDggQEAKIAl7MHgxMDAyLCAweDcyOTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY1NjB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3ODM0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMzAwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3ODM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMzAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NzkxZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzY5MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NzkxZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzY5MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXswLCAwLCAwfQogCiAjZGVmaW5lIHIxMjhfUENJX0lEUyBcCkBAIC0zMTMsNiArMzE2LDcgQEAKIAl7MHgxMDM5LCAweDUzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCiAJezB4MTAzOSwgMHg2MzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAogCXsweDEwMzksIDB4NjMzMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgU0lTX0NISVBfMzE1fSwgXAorCXsweDEwMzksIDB4NjM1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKIAl7MHgxMDM5LCAweDczMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCiAJezB4MThDQSwgMHgwMDQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBTSVNfQ0hJUF8zMTV9LCBcCiAJezB4MThDQSwgMHgwMDQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBTSVNfQ0hJUF8zMTV9LCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zY2F0dGVyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zY2F0dGVyLmMKaW5kZXggMjZkOGY2Ny4uYjJiMGYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc2NhdHRlci5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NjYXR0ZXIuYwpAQCAtMzYsNiArMzYsMTUgQEAKIAogI2RlZmluZSBERUJVR19TQ0FUVEVSIDAKIAorc3RhdGljIGlubGluZSB2b2lkICpkcm1fdm1hbGxvY19kbWEodW5zaWduZWQgbG9uZyBzaXplKQoreworI2lmIGRlZmluZWQoX19wb3dlcnBjX18pICYmIGRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkKKwlyZXR1cm4gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUwsIFBBR0VfS0VSTkVMIHwgX1BBR0VfTk9fQ0FDSEUpOworI2Vsc2UKKwlyZXR1cm4gdm1hbGxvY18zMihzaXplKTsKKyNlbmRpZgorfQorCiB2b2lkIGRybV9zZ19jbGVhbnVwKHN0cnVjdCBkcm1fc2dfbWVtICogZW50cnkpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC0xMDQsNyArMTEzLDcgQEAKIAl9CiAJbWVtc2V0KCh2b2lkICopZW50cnktPmJ1c2FkZHIsIDAsIHBhZ2VzICogc2l6ZW9mKCplbnRyeS0+YnVzYWRkcikpOwogCi0JZW50cnktPnZpcnR1YWwgPSB2bWFsbG9jXzMyKHBhZ2VzIDw8IFBBR0VfU0hJRlQpOworCWVudHJ5LT52aXJ0dWFsID0gZHJtX3ZtYWxsb2NfZG1hKHBhZ2VzIDw8IFBBR0VfU0hJRlQpOwogCWlmICghZW50cnktPnZpcnR1YWwpIHsKIAkJZHJtX2ZyZWUoZW50cnktPmJ1c2FkZHIsCiAJCQkgZW50cnktPnBhZ2VzICogc2l6ZW9mKCplbnRyeS0+YnVzYWRkciksIERSTV9NRU1fUEFHRVMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggZmEzNjE1My4uMDVlZDUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3lzZnMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zeXNmcy5jCkBAIC0zNiw3ICszNiw3IEBACiAJcHJpbnRrKEtFUk5fRVJSICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAogCWlmIChkcm1fZGV2LT5kcml2ZXItPnN1c3BlbmQpCi0JCXJldHVybiBkcm1fZGV2LT5kcml2ZXItPnN1c3BlbmQoZHJtX2Rldik7CisJCXJldHVybiBkcm1fZGV2LT5kcml2ZXItPnN1c3BlbmQoZHJtX2Rldiwgc3RhdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYwppbmRleCBjZWE0MTA1Li45NDVkZjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKQEAgLTU0LDE5ICs1NCwzMCBAQAogCXBncHJvdF92YWwodG1wKSB8PSBfUEFHRV9OT19DQUNIRTsKIAlpZiAobWFwX3R5cGUgPT0gX0RSTV9SRUdJU1RFUlMpCiAJCXBncHJvdF92YWwodG1wKSB8PSBfUEFHRV9HVUFSREVEOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX2lhNjRfXykKKyNlbGlmIGRlZmluZWQoX19pYTY0X18pCiAJaWYgKGVmaV9yYW5nZV9pc193Yyh2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtCiAJCQkJICAgIHZtYS0+dm1fc3RhcnQpKQogCQl0bXAgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHRtcCk7CiAJZWxzZQogCQl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7CisjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKKwl0bXAgPSBwZ3Byb3Rfbm9uY2FjaGVkKHRtcCk7CisjZW5kaWYKKwlyZXR1cm4gdG1wOworfQorCitzdGF0aWMgcGdwcm90X3QgZHJtX2RtYV9wcm90KHVpbnQzMl90IG1hcF90eXBlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlwZ3Byb3RfdCB0bXAgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpOworCisjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgJiYgZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQorCXRtcCB8PSBfUEFHRV9OT19DQUNIRTsKICNlbmRpZgogCXJldHVybiB0bXA7CiB9CiAKIC8qKgotICogXGMgbm9wYWdlIG1ldGhvZCBmb3IgQUdQIHZpcnR1YWwgbWVtb3J5LgorICogXGMgZmF1bHQgbWV0aG9kIGZvciBBR1AgdmlydHVhbCBtZW1vcnkuCiAgKgogICogXHBhcmFtIHZtYSB2aXJ0dWFsIG1lbW9yeSBhcmVhLgogICogXHBhcmFtIGFkZHJlc3MgYWNjZXNzIGFkZHJlc3MuCkBAIC03Niw4ICs4Nyw3IEBACiAgKiBtYXAsIGdldCB0aGUgcGFnZSwgaW5jcmVtZW50IHRoZSB1c2UgY291bnQgYW5kIHJldHVybiBpdC4KICAqLwogI2lmIF9fT1NfSEFTX0FHUAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IHBhZ2UgKmRybV9kb192bV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW50IGRybV9kb192bV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKQEAgLTg5LDE5ICs5OSwyNCBAQAogCSAqIEZpbmQgdGhlIHJpZ2h0IG1hcAogCSAqLwogCWlmICghZHJtX2NvcmVfaGFzX0FHUChkZXYpKQotCQlnb3RvIHZtX25vcGFnZV9lcnJvcjsKKwkJZ290byB2bV9mYXVsdF9lcnJvcjsKIAogCWlmICghZGV2LT5hZ3AgfHwgIWRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSkKLQkJZ290byB2bV9ub3BhZ2VfZXJyb3I7CisJCWdvdG8gdm1fZmF1bHRfZXJyb3I7CiAKIAlpZiAoZHJtX2h0X2ZpbmRfaXRlbSgmZGV2LT5tYXBfaGFzaCwgdm1hLT52bV9wZ29mZiwgJmhhc2gpKQotCQlnb3RvIHZtX25vcGFnZV9lcnJvcjsKKwkJZ290byB2bV9mYXVsdF9lcnJvcjsKIAogCXJfbGlzdCA9IGRybV9oYXNoX2VudHJ5KGhhc2gsIHN0cnVjdCBkcm1fbWFwX2xpc3QsIGhhc2gpOwogCW1hcCA9IHJfbGlzdC0+bWFwOwogCiAJaWYgKG1hcCAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApIHsKLQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKKwkJLyoKKwkJICogVXNpbmcgdm1fcGdvZmYgYXMgYSBzZWxlY3RvciBmb3JjZXMgdXMgdG8gdXNlIHRoaXMgdW51c3VhbAorCQkgKiBhZGRyZXNzaW5nIHNjaGVtZS4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MgLQorCQkJCQkJCQl2bWEtPnZtX3N0YXJ0OwogCQl1bnNpZ25lZCBsb25nIGJhZGRyID0gbWFwLT5vZmZzZXQgKyBvZmZzZXQ7CiAJCXN0cnVjdCBkcm1fYWdwX21lbSAqYWdwbWVtOwogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTEyMyw3ICsxMzgsNyBAQAogCQl9CiAKIAkJaWYgKCFhZ3BtZW0pCi0JCQlnb3RvIHZtX25vcGFnZV9lcnJvcjsKKwkJCWdvdG8gdm1fZmF1bHRfZXJyb3I7CiAKIAkJLyoKIAkJICogR2V0IHRoZSBwYWdlLCBpbmMgdGhlIHVzZSBjb3VudCwgYW5kIHJldHVybiBpdApAQCAtMTMxLDIyICsxNDYsMjEgQEAKIAkJb2Zmc2V0ID0gKGJhZGRyIC0gYWdwbWVtLT5ib3VuZCkgPj4gUEFHRV9TSElGVDsKIAkJcGFnZSA9IHZpcnRfdG9fcGFnZShfX3ZhKGFncG1lbS0+bWVtb3J5LT5tZW1vcnlbb2Zmc2V0XSkpOwogCQlnZXRfcGFnZShwYWdlKTsKKwkJdm1mLT5wYWdlID0gcGFnZTsKIAogCQlEUk1fREVCVUcKIAkJICAgICgiYmFkZHIgPSAweCVseCBwYWdlID0gMHglcCwgb2Zmc2V0ID0gMHglbHgsIGNvdW50PSVkXG4iLAogCQkgICAgIGJhZGRyLCBfX3ZhKGFncG1lbS0+bWVtb3J5LT5tZW1vcnlbb2Zmc2V0XSksIG9mZnNldCwKIAkJICAgICBwYWdlX2NvdW50KHBhZ2UpKTsKLQotCQlyZXR1cm4gcGFnZTsKKwkJcmV0dXJuIDA7CiAJfQotICAgICAgdm1fbm9wYWdlX2Vycm9yOgotCXJldHVybiBOT1BBR0VfU0lHQlVTOwkvKiBEaXNhbGxvdyBtcmVtYXAgKi8KK3ZtX2ZhdWx0X2Vycm9yOgorCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CS8qIERpc2FsbG93IG1yZW1hcCAqLwogfQogI2Vsc2UJCQkJLyogX19PU19IQVNfQUdQICovCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcGFnZSAqZHJtX2RvX3ZtX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbnQgZHJtX2RvX3ZtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKLQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsKKwlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogfQogI2VuZGlmCQkJCS8qIF9fT1NfSEFTX0FHUCAqLwogCkBAIC0xNjAsMjggKzE3NCwyNiBAQAogICogR2V0IHRoZSBtYXBwaW5nLCBmaW5kIHRoZSByZWFsIHBoeXNpY2FsIHBhZ2UgdG8gbWFwLCBnZXQgdGhlIHBhZ2UsIGFuZAogICogcmV0dXJuIGl0LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcGFnZSAqZHJtX2RvX3ZtX3NobV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGludCBkcm1fZG9fdm1fc2htX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKIAlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gKHN0cnVjdCBkcm1fbWFwICopIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgaTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWlmIChhZGRyZXNzID4gdm1hLT52bV9lbmQpCi0JCXJldHVybiBOT1BBR0VfU0lHQlVTOwkvKiBEaXNhbGxvdyBtcmVtYXAgKi8KIAlpZiAoIW1hcCkKLQkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CS8qIE5vdGhpbmcgYWxsb2NhdGVkICovCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CS8qIE5vdGhpbmcgYWxsb2NhdGVkICovCiAKLQlvZmZzZXQgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKKwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CiAJaSA9ICh1bnNpZ25lZCBsb25nKW1hcC0+aGFuZGxlICsgb2Zmc2V0OwogCXBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilpKTsKIAlpZiAoIXBhZ2UpCi0JCXJldHVybiBOT1BBR0VfU0lHQlVTOworCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCWdldF9wYWdlKHBhZ2UpOworCXZtZi0+cGFnZSA9IHBhZ2U7CiAKLQlEUk1fREVCVUcoIjB4JWx4XG4iLCBhZGRyZXNzKTsKLQlyZXR1cm4gcGFnZTsKKwlEUk1fREVCVUcoInNobV9mYXVsdCAweCVseFxuIiwgb2Zmc2V0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNjMsNyArMjc1LDcgQEAKIH0KIAogLyoqCi0gKiBcYyBub3BhZ2UgbWV0aG9kIGZvciBETUEgdmlydHVhbCBtZW1vcnkuCisgKiBcYyBmYXVsdCBtZXRob2QgZm9yIERNQSB2aXJ0dWFsIG1lbW9yeS4KICAqCiAgKiBccGFyYW0gdm1hIHZpcnR1YWwgbWVtb3J5IGFyZWEuCiAgKiBccGFyYW0gYWRkcmVzcyBhY2Nlc3MgYWRkcmVzcy4KQEAgLTI3MSw4ICsyODMsNyBAQAogICoKICAqIERldGVybWluZSB0aGUgcGFnZSBudW1iZXIgZnJvbSB0aGUgcGFnZSBvZmZzZXQgYW5kIGdldCBpdCBmcm9tIGRybV9kZXZpY2VfZG1hOjpwYWdlbGlzdC4KICAqLwotc3RhdGljIF9faW5saW5lX18gc3RydWN0IHBhZ2UgKmRybV9kb192bV9kbWFfbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbnQgZHJtX2RvX3ZtX2RtYV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKQEAgLTI4MiwyNCArMjkzLDIzIEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlpZiAoIWRtYSkKLQkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CS8qIEVycm9yICovCi0JaWYgKGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkKLQkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CS8qIERpc2FsbG93IG1yZW1hcCAqLworCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwkvKiBFcnJvciAqLwogCWlmICghZG1hLT5wYWdlbGlzdCkKLQkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CS8qIE5vdGhpbmcgYWxsb2NhdGVkICovCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CS8qIE5vdGhpbmcgYWxsb2NhdGVkICovCiAKLQlvZmZzZXQgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsJLyogdm1fW3BnXW9mZltzZXRdIHNob3VsZCBiZSAwICovCi0JcGFnZV9uciA9IG9mZnNldCA+PiBQQUdFX1NISUZUOworCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzIC0gdm1hLT52bV9zdGFydDsJLyogdm1fW3BnXW9mZltzZXRdIHNob3VsZCBiZSAwICovCisJcGFnZV9uciA9IG9mZnNldCA+PiBQQUdFX1NISUZUOyAvKiBwYWdlX25yIGNvdWxkIGp1c3QgYmUgdm1mLT5wZ29mZiAqLwogCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKGRtYS0+cGFnZWxpc3RbcGFnZV9ucl0gKyAob2Zmc2V0ICYgKH5QQUdFX01BU0spKSkpOwogCiAJZ2V0X3BhZ2UocGFnZSk7CisJdm1mLT5wYWdlID0gcGFnZTsKIAotCURSTV9ERUJVRygiMHglbHggKHBhZ2UgJWx1KVxuIiwgYWRkcmVzcywgcGFnZV9ucik7Ci0JcmV0dXJuIHBhZ2U7CisJRFJNX0RFQlVHKCJkbWFfZmF1bHQgMHglbHggKHBhZ2UgJWx1KVxuIiwgb2Zmc2V0LCBwYWdlX25yKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBcYyBub3BhZ2UgbWV0aG9kIGZvciBzY2F0dGVyLWdhdGhlciB2aXJ0dWFsIG1lbW9yeS4KKyAqIFxjIGZhdWx0IG1ldGhvZCBmb3Igc2NhdHRlci1nYXRoZXIgdmlydHVhbCBtZW1vcnkuCiAgKgogICogXHBhcmFtIHZtYSB2aXJ0dWFsIG1lbW9yeSBhcmVhLgogICogXHBhcmFtIGFkZHJlc3MgYWNjZXNzIGFkZHJlc3MuCkBAIC0zMDcsOCArMzE3LDcgQEAKICAqCiAgKiBEZXRlcm1pbmUgdGhlIG1hcCBvZmZzZXQgZnJvbSB0aGUgcGFnZSBvZmZzZXQgYW5kIGdldCBpdCBmcm9tIGRybV9zZ19tZW06OnBhZ2VsaXN0LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcGFnZSAqZHJtX2RvX3ZtX3NnX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbnQgZHJtX2RvX3ZtX3NnX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKIAlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gKHN0cnVjdCBkcm1fbWFwICopIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtMzIwLDc3ICszMjksNjQgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCWlmICghZW50cnkpCi0JCXJldHVybiBOT1BBR0VfU0lHQlVTOwkvKiBFcnJvciAqLwotCWlmIChhZGRyZXNzID4gdm1hLT52bV9lbmQpCi0JCXJldHVybiBOT1BBR0VfU0lHQlVTOwkvKiBEaXNhbGxvdyBtcmVtYXAgKi8KKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsJLyogRXJyb3IgKi8KIAlpZiAoIWVudHJ5LT5wYWdlbGlzdCkKLQkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CS8qIE5vdGhpbmcgYWxsb2NhdGVkICovCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CS8qIE5vdGhpbmcgYWxsb2NhdGVkICovCiAKLQlvZmZzZXQgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKKwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CiAJbWFwX29mZnNldCA9IG1hcC0+b2Zmc2V0IC0gKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbDsKIAlwYWdlX29mZnNldCA9IChvZmZzZXQgPj4gUEFHRV9TSElGVCkgKyAobWFwX29mZnNldCA+PiBQQUdFX1NISUZUKTsKIAlwYWdlID0gZW50cnktPnBhZ2VsaXN0W3BhZ2Vfb2Zmc2V0XTsKIAlnZXRfcGFnZShwYWdlKTsKKwl2bWYtPnBhZ2UgPSBwYWdlOwogCi0JcmV0dXJuIHBhZ2U7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZHJtX3ZtX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50ICp0eXBlKQorc3RhdGljIGludCBkcm1fdm1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewotCWlmICh0eXBlKQotCQkqdHlwZSA9IFZNX0ZBVUxUX01JTk9SOwotCXJldHVybiBkcm1fZG9fdm1fbm9wYWdlKHZtYSwgYWRkcmVzcyk7CisJcmV0dXJuIGRybV9kb192bV9mYXVsdCh2bWEsIHZtZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZHJtX3ZtX3NobV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgKnR5cGUpCitzdGF0aWMgaW50IGRybV92bV9zaG1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewotCWlmICh0eXBlKQotCQkqdHlwZSA9IFZNX0ZBVUxUX01JTk9SOwotCXJldHVybiBkcm1fZG9fdm1fc2htX25vcGFnZSh2bWEsIGFkZHJlc3MpOworCXJldHVybiBkcm1fZG9fdm1fc2htX2ZhdWx0KHZtYSwgdm1mKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWdlICpkcm1fdm1fZG1hX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCAqdHlwZSkKK3N0YXRpYyBpbnQgZHJtX3ZtX2RtYV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7Ci0JaWYgKHR5cGUpCi0JCSp0eXBlID0gVk1fRkFVTFRfTUlOT1I7Ci0JcmV0dXJuIGRybV9kb192bV9kbWFfbm9wYWdlKHZtYSwgYWRkcmVzcyk7CisJcmV0dXJuIGRybV9kb192bV9kbWFfZmF1bHQodm1hLCB2bWYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmRybV92bV9zZ19ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCAqdHlwZSkKK3N0YXRpYyBpbnQgZHJtX3ZtX3NnX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKLQlpZiAodHlwZSkKLQkJKnR5cGUgPSBWTV9GQVVMVF9NSU5PUjsKLQlyZXR1cm4gZHJtX2RvX3ZtX3NnX25vcGFnZSh2bWEsIGFkZHJlc3MpOworCXJldHVybiBkcm1fZG9fdm1fc2dfZmF1bHQodm1hLCB2bWYpOwogfQogCiAvKiogQUdQIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX29wcyA9IHsKLQkubm9wYWdlID0gZHJtX3ZtX25vcGFnZSwKKwkuZmF1bHQgPSBkcm1fdm1fZmF1bHQsCiAJLm9wZW4gPSBkcm1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fdm1fY2xvc2UsCiB9OwogCiAvKiogU2hhcmVkIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX3NobV9vcHMgPSB7Ci0JLm5vcGFnZSA9IGRybV92bV9zaG1fbm9wYWdlLAorCS5mYXVsdCA9IGRybV92bV9zaG1fZmF1bHQsCiAJLm9wZW4gPSBkcm1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fdm1fc2htX2Nsb3NlLAogfTsKIAogLyoqIERNQSB2aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zICovCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9kbWFfb3BzID0gewotCS5ub3BhZ2UgPSBkcm1fdm1fZG1hX25vcGFnZSwKKwkuZmF1bHQgPSBkcm1fdm1fZG1hX2ZhdWx0LAogCS5vcGVuID0gZHJtX3ZtX29wZW4sCiAJLmNsb3NlID0gZHJtX3ZtX2Nsb3NlLAogfTsKIAogLyoqIFNjYXR0ZXItZ2F0aGVyIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX3NnX29wcyA9IHsKLQkubm9wYWdlID0gZHJtX3ZtX3NnX25vcGFnZSwKKwkuZmF1bHQgPSBkcm1fdm1fc2dfZmF1bHQsCiAJLm9wZW4gPSBkcm1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fdm1fY2xvc2UsCiB9OwpAQCAtNjA0LDcgKzYwMCw3IEBACiAJCQkvKgogCQkJICogT24gc29tZSBwbGF0Zm9ybXMgd2UgY2FuJ3QgdGFsayB0byBidXMgZG1hIGFkZHJlc3MgZnJvbSB0aGUgQ1BVLCBzbyBmb3IKIAkJCSAqIG1lbW9yeSBvZiB0eXBlIERSTV9BR1AsIHdlJ2xsIGRlYWwgd2l0aCBzb3J0aW5nIG91dCB0aGUgcmVhbCBwaHlzaWNhbAotCQkJICogcGFnZXMgYW5kIG1hcHBpbmdzIGluIG5vcGFnZSgpCisJCQkgKiBwYWdlcyBhbmQgbWFwcGluZ3MgaW4gZmF1bHQoKQogCQkJICovCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKIAkJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX05PX0NBQ0hFOwpAQCAtNjE4LDkgKzYxNCw2IEBACiAJCW9mZnNldCA9IGRldi0+ZHJpdmVyLT5nZXRfcmVnX29mcyhkZXYpOwogCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwkvKiBub3QgaW4gY29yZSBkdW1wICovCiAJCXZtYS0+dm1fcGFnZV9wcm90ID0gZHJtX2lvX3Byb3QobWFwLT50eXBlLCB2bWEpOwotI2lmZGVmIF9fc3BhcmNfXwotCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOwotI2VuZGlmCiAJCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAogCQkJCSAgICAgICAobWFwLT5vZmZzZXQgKyBvZmZzZXQpID4+IFBBR0VfU0hJRlQsCiAJCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKQEAgLTYzNCwxMSArNjI3LDEyIEBACiAJCWJyZWFrOwogCWNhc2UgX0RSTV9DT05TSVNURU5UOgogCQkvKiBDb25zaXN0ZW50IG1lbW9yeSBpcyByZWFsbHkgbGlrZSBzaGFyZWQgbWVtb3J5LiBCdXQKLQkJICogaXQncyBhbGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQgd2F5LCBzbyBhdm9pZCBub3BhZ2UgKi8KKwkJICogaXQncyBhbGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQgd2F5LCBzbyBhdm9pZCBmYXVsdCAqLwogCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKIAkJICAgIHBhZ2VfdG9fcGZuKHZpcnRfdG9fcGFnZShtYXAtPmhhbmRsZSkpLAogCQkgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBkcm1fZG1hX3Byb3QobWFwLT50eXBlLCB2bWEpOwogCS8qIGZhbGwgdGhyb3VnaCB0byBfRFJNX1NITSAqLwogCWNhc2UgX0RSTV9TSE06CiAJCXZtYS0+dm1fb3BzID0gJmRybV92bV9zaG1fb3BzOwpAQCAtNjQ2LDYgKzY0MCw3IEBACiAJCS8qIERvbid0IGxldCB0aGlzIGFyZWEgc3dhcC4gIENoYW5nZSB3aGVuCiAJCSAgIERSTV9LRVJORUwgYWR2aXNvcnkgaXMgc3VwcG9ydGVkLiAqLwogCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IGRybV9kbWFfcHJvdChtYXAtPnR5cGUsIHZtYSk7CiAJCWJyZWFrOwogCWNhc2UgX0RSTV9TQ0FUVEVSX0dBVEhFUjoKIAkJdm1hLT52bV9vcHMgPSAmZHJtX3ZtX3NnX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kbWEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kbWEuYwppbmRleCA0Mzk4NmQ4Li5hMDQzYmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlkZXZfcHJpdi0+YWxsb3dfYmF0Y2hidWZmZXIgPSAxOwogCiAJLyogUHJvZ3JhbSBIYXJkd2FyZSBTdGF0dXMgUGFnZSAqLwotCWlmICghSVNfRzMzKGRldikpIHsKKwlpZiAoIUk5MTVfTkVFRF9HRlhfSFdTKGRldikpIHsKIAkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQogCQkJZHJtX3BjaV9hbGxvYyhkZXYsIFBBR0VfU0laRSwgUEFHRV9TSVpFLCAweGZmZmZmZmZmKTsKIApAQCAtNzIwLDYgKzcyMCw5IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfaHdzX2FkZHJfdCAqaHdzID0gZGF0YTsKIAorCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwMSw2ICs4MDQsOSBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKCFkZXZfcHJpdikKKwkJcmV0dXJuOworCiAJaWYgKGRldl9wcml2LT5hZ3BfaGVhcCkKIAkJaTkxNV9tZW1fdGFrZWRvd24oJihkZXZfcHJpdi0+YWdwX2hlYXApKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5jCmluZGV4IDUyZTUxMDMuLmIyYjQ1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmMKQEAgLTE2MCw2ICsxNjAsNyBAQAogCQlkZXZfcHJpdi0+c2F2ZUFSW2ldID0gaTkxNV9yZWFkX2FyKHN0MDEsIGksIDApOwogCWluYihzdDAxKTsKIAlvdXRiKGRldl9wcml2LT5zYXZlQVJfSU5ERVgsIFZHQV9BUl9JTkRFWCk7CisJaW5iKHN0MDEpOwogCiAJLyogR3JhcGhpY3MgY29udHJvbGxlciByZWdpc3RlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQpAQCAtMjIxLDEwICsyMjIsMTIgQEAKIAkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxOF0pOwogCiAJLyogQXR0cmlidXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisJaW5iKHN0MDEpOwogCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQogCQlpOTE1X3dyaXRlX2FyKHN0MDEsIGksIGRldl9wcml2LT5zYXZlQVJbaV0sIDApOwogCWluYihzdDAxKTsgLyogc3dpdGNoIGJhY2sgdG8gaW5kZXggbW9kZSAqLwogCW91dGIoZGV2X3ByaXYtPnNhdmVBUl9JTkRFWCB8IDB4MjAsIFZHQV9BUl9JTkRFWCk7CisJaW5iKHN0MDEpOwogCiAJLyogVkdBIGNvbG9yIHBhbGV0dGUgcmVnaXN0ZXJzICovCiAJb3V0YihkZXZfcHJpdi0+c2F2ZURBQ01BU0ssIFZHQV9EQUNNQVNLKTsKQEAgLTIzNiw3ICsyMzksNyBAQAogCiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKQEAgLTI0Nyw2ICsyNTAsOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykKKwkJcmV0dXJuIDA7CisKIAlwY2lfc2F2ZV9zdGF0ZShkZXYtPnBkZXYpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgTEJCLCAmZGV2X3ByaXYtPnNhdmVMQkIpOwogCkBAIC0yNzYsNiArMjgyLDcgQEAKIAkJZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRiA9IEk5MTVfUkVBRChEU1BBVElMRU9GRik7CiAJfQogCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9BKTsKKwlkZXZfcHJpdi0+c2F2ZVBJUEVBU1RBVCA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVBU1RBVCk7CiAKIAkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCiAJZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYgPSBJOTE1X1JFQUQoUElQRUJDT05GKTsKQEAgLTMwMyw2ICszMTAsNyBAQAogCQlkZXZfcHJpdi0+c2F2ZURTUEJUSUxFT0ZGID0gSTkxNV9SRUFEKERTUEJUSUxFT0ZGKTsKIAl9CiAJaTkxNV9zYXZlX3BhbGV0dGUoZGV2LCBQSVBFX0IpOworCWRldl9wcml2LT5zYXZlUElQRUJTVEFUID0gSTkxNV9SRUFEKEk5MTVSRUdfUElQRUJTVEFUKTsKIAogCS8qIENSVCBzdGF0ZSAqLwogCWRldl9wcml2LT5zYXZlQURQQSA9IEk5MTVfUkVBRChBRFBBKTsKQEAgLTMyOSwxMiArMzM3LDI2IEBACiAJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKIAlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MKTsKIAorCS8qIEludGVycnVwdCBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlSUlSID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOworCWRldl9wcml2LT5zYXZlSUVSID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX0VOQUJMRV9SKTsKKwlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJOTE1UkVHX0lOVF9NQVNLX1IpOworCiAJLyogVkdBIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVWQ0xLX0RJVklTT1JfVkdBMCA9IEk5MTVfUkVBRChWQ0xLX0RJVklTT1JfVkdBMCk7CiAJZGV2X3ByaXYtPnNhdmVWQ0xLX0RJVklTT1JfVkdBMSA9IEk5MTVfUkVBRChWQ0xLX0RJVklTT1JfVkdBMSk7CiAJZGV2X3ByaXYtPnNhdmVWQ0xLX1BPU1RfRElWID0gSTkxNV9SRUFEKFZDTEtfUE9TVF9ESVYpOwogCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOwogCisJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCisJZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EID0gSTkxNV9SRUFEKERTUENMS19HQVRFX0QpOworCisJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7CisKKwkvKiBNZW1vcnkgQXJiaXRyYXRpb24gc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOworCiAJLyogU2NyYXRjaCBzcGFjZSAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCWRldl9wcml2LT5zYXZlU1dGMFtpXSA9IEk5MTVfUkVBRChTV0YwICsgKGkgPDwgMikpOwpAQCAtMzQ1LDkgKzM2NywxMSBAQAogCiAJaTkxNV9zYXZlX3ZnYShkZXYpOwogCi0JLyogU2h1dCBkb3duIHRoZSBkZXZpY2UgKi8KLQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2LT5wZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QzaG90KTsKKwlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQkvKiBTaHV0IGRvd24gdGhlIGRldmljZSAqLworCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2LT5wZGV2KTsKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC00MDAsOSArNDI0LDcgQEAKIAkJSTkxNV9XUklURShEU1BBVElMRU9GRiwgZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRik7CiAJfQogCi0JaWYgKChkZXZfcHJpdi0+c2F2ZURQTExfQSAmIERQTExfVkNPX0VOQUJMRSkgJiYKLQkgICAgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WR0FfTU9ERV9ESVMpKQotCQlJOTE1X1dSSVRFKFBJUEVBQ09ORiwgZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYpOworCUk5MTVfV1JJVEUoUElQRUFDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVBQ09ORik7CiAKIAlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7CiAJLyogRW5hYmxlIHRoZSBwbGFuZSAqLwpAQCAtNDQ0LDEwICs0NjYsOSBAQAogCQlJOTE1X1dSSVRFKERTUEJUSUxFT0ZGLCBkZXZfcHJpdi0+c2F2ZURTUEJUSUxFT0ZGKTsKIAl9CiAKLQlpZiAoKGRldl9wcml2LT5zYXZlRFBMTF9CICYgRFBMTF9WQ09fRU5BQkxFKSAmJgotCSAgICAoZGV2X3ByaXYtPnNhdmVEUExMX0IgJiBEUExMX1ZHQV9NT0RFX0RJUykpCi0JCUk5MTVfV1JJVEUoUElQRUJDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORik7Ci0JaTkxNV9yZXN0b3JlX3BhbGV0dGUoZGV2LCBQSVBFX0EpOworCUk5MTVfV1JJVEUoUElQRUJDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORik7CisKKwlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7CiAJLyogRW5hYmxlIHRoZSBwbGFuZSAqLwogCUk5MTVfV1JJVEUoRFNQQkNOVFIsIGRldl9wcml2LT5zYXZlRFNQQkNOVFIpOwogCUk5MTVfV1JJVEUoRFNQQkJBU0UsIEk5MTVfUkVBRChEU1BCQkFTRSkpOwpAQCAtNDg1LDYgKzUwNiwxNSBAQAogCUk5MTVfV1JJVEUoVkNMS19QT1NUX0RJViwgZGV2X3ByaXYtPnNhdmVWQ0xLX1BPU1RfRElWKTsKIAl1ZGVsYXkoMTUwKTsKIAorCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLworCUk5MTVfV1JJVEUgKERTUENMS19HQVRFX0QsIGRldl9wcml2LT5zYXZlRFNQQ0xLX0dBVEVfRCk7CisKKwkvKiBDYWNoZSBtb2RlIHN0YXRlICovCisJSTkxNV9XUklURSAoQ0FDSEVfTU9ERV8wLCBkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCB8IDB4ZmZmZjAwMDApOworCisJLyogTWVtb3J5IGFyYml0cmF0aW9uIHN0YXRlICovCisJSTkxNV9XUklURSAoTUlfQVJCX1NUQVRFLCBkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSB8IDB4ZmZmZjAwMDApOworCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJSTkxNV9XUklURShTV0YwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMFtpXSk7CiAJCUk5MTVfV1JJVEUoU1dGMTAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YxW2krN10pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oCmluZGV4IGY4MzA4YmYuLjY3NWQ4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogCXUzMiBzYXZlVkJMQU5LX0E7CiAJdTMyIHNhdmVWU1lOQ19BOwogCXUzMiBzYXZlQkNMUlBBVF9BOworCXUzMiBzYXZlUElQRUFTVEFUOwogCXUzMiBzYXZlRFNQQVNUUklERTsKIAl1MzIgc2F2ZURTUEFTSVpFOwogCXUzMiBzYXZlRFNQQVBPUzsKQEAgLTE1NCw2ICsxNTUsNyBAQAogCXUzMiBzYXZlVkJMQU5LX0I7CiAJdTMyIHNhdmVWU1lOQ19COwogCXUzMiBzYXZlQkNMUlBBVF9COworCXUzMiBzYXZlUElQRUJTVEFUOwogCXUzMiBzYXZlRFNQQlNUUklERTsKIAl1MzIgc2F2ZURTUEJTSVpFOwogCXUzMiBzYXZlRFNQQlBPUzsKQEAgLTE4Miw2ICsxODQsMTIgQEAKIAl1MzIgc2F2ZUZCQ19MTF9CQVNFOwogCXUzMiBzYXZlRkJDX0NPTlRST0w7CiAJdTMyIHNhdmVGQkNfQ09OVFJPTDI7CisJdTMyIHNhdmVJRVI7CisJdTMyIHNhdmVJSVI7CisJdTMyIHNhdmVJTVI7CisJdTMyIHNhdmVDQUNIRV9NT0RFXzA7CisJdTMyIHNhdmVEU1BDTEtfR0FURV9EOworCXUzMiBzYXZlTUlfQVJCX1NUQVRFOwogCXUzMiBzYXZlU1dGMFsxNl07CiAJdTMyIHNhdmVTV0YxWzE2XTsKIAl1MzIgc2F2ZVNXRjJbM107CkBAIC00NTAsNiArNDU4LDEwIEBACiAgKi8KICNkZWZpbmUgRE1BX0ZBRERfUwkJMHgyMGQ0CiAKKy8qIE1lbW9yeSBJbnRlcmZhY2UgQXJiaXRyYXRpb24gU3RhdGUKKyAqLworI2RlZmluZSBNSV9BUkJfU1RBVEUJCTB4MjBlNAorCiAvKiBDYWNoZSBtb2RlIDAgcmVnLgogICogIC0gTWFuaXB1bGF0aW5nIHJlbmRlciBjYWNoZSBiZWhhdmlvdXIgaXMgY2VudHJhbAogICogICAgdG8gdGhlIGNvbmNlcHQgb2Ygem9uZSByZW5kZXJpbmcsIHR1bmluZyB0aGlzIHJlZyBjYW4gaGVscCBhdm9pZApAQCAtNDYwLDYgKzQ3Miw3IEBACiAgKiBiaXQgb2YgaW50ZXJlc3QgZWl0aGVyIHNldCBvciBjbGVhcmVkLiAgRUc6IChCSVQ8PDE2KSB8IEJJVCB0byBzZXQuCiAgKi8KICNkZWZpbmUgQ2FjaGVfTW9kZV8wCQkweDIxMjAKKyNkZWZpbmUgQ0FDSEVfTU9ERV8wCQkweDIxMjAKICNkZWZpbmUgQ00wX01BU0tfU0hJRlQgICAgICAgICAgMTYKICNkZWZpbmUgQ00wX0laX09QVF9ESVNBQkxFICAgICAgKDE8PDYpCiAjZGVmaW5lIENNMF9aUl9PUFRfRElTQUJMRSAgICAgICgxPDw1KQpAQCAtNjU1LDYgKzY2OCw4IEBACiAvKiogUDEgdmFsdWUgaXMgMiBncmVhdGVyIHRoYW4gdGhpcyBmaWVsZCAqLwogIyBkZWZpbmUgVkdBMF9QRF9QMV9NQVNLCSgweDFmIDw8IDApCiAKKyNkZWZpbmUgRFNQQ0xLX0dBVEVfRAkweDYyMDAKKwogLyogSTgzMCBDUlRDIHJlZ2lzdGVycyAqLwogI2RlZmluZSBIVE9UQUxfQQkweDYwMDAwCiAjZGVmaW5lIEhCTEFOS19BCTB4NjAwMDQKQEAgLTEwNzcsOCArMTA5Miw4IEBACiAjZGVmaW5lIElTX0k5MTVHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU4MiB8fCAoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1OGEpCiAjZGVmaW5lIElTX0k5MTVHTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1OTIpCiAjZGVmaW5lIElTX0k5NDVHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4Mjc3MikKLSNkZWZpbmUgSVNfSTk0NUdNKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjdBMikKLQorI2RlZmluZSBJU19JOTQ1R00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyN0EyIHx8XAorCQkgICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjdBRSkKICNkZWZpbmUgSVNfSTk2NUcoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOTcyIHx8IFwKIAkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4Mjk4MiB8fCBcCiAJCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5OTIgfHwgXApAQCAtMTEwMSw2ICsxMTE2LDggQEAKICNkZWZpbmUgSVNfTU9CSUxFKGRldikgKElTX0k4MzAoZGV2KSB8fCBJU19JODVYKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwgXAogCQkJSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUdNKGRldikgfHwgSVNfSUdEX0dNKGRldikpCiAKKyNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSAoSVNfRzMzKGRldikgfHwgSVNfSUdEX0dNKGRldikpCisKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2NjZS5jIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2NjZS5jCmluZGV4IDg5MmUwYTUuLmYzNmFkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9jY2UuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfY2NlLmMKQEAgLTU1OCw2ICs1NTgsNyBAQAogI2lmIF9fT1NfSEFTX0FHUAogCWlmIChkZXZfcHJpdi0+aXNfcGNpKSB7CiAjZW5kaWYKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3RhYmxlX2xvY2F0aW9uID0gRFJNX0FUSV9HQVJUX01BSU47CiAJCWRldl9wcml2LT5nYXJ0X2luZm8udGFibGVfc2l6ZSA9IFIxMjhfUENJR0FSVF9UQUJMRV9TSVpFOwogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jCmluZGV4IDBmNGFmYzQuLmY1MzU4MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKQEAgLTcyOSw2ICs3MjksNDcgQEAKIAlidWYtPnVzZWQgPSAwOwogfQogCitzdGF0aWMgdm9pZCByMzAwX2NtZF93YWl0KGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkgIGRybV9yMzAwX2NtZF9oZWFkZXJfdCBoZWFkZXIpCit7CisJdTMyIHdhaXRfdW50aWw7CisJUklOR19MT0NBTFM7CisKKwlpZiAoIWhlYWRlci53YWl0LmZsYWdzKQorCQlyZXR1cm47CisKKwl3YWl0X3VudGlsID0gMDsKKworCXN3aXRjaChoZWFkZXIud2FpdC5mbGFncykgeworCWNhc2UgUjMwMF9XQUlUXzJEOgorCQl3YWl0X3VudGlsID0gUkFERU9OX1dBSVRfMkRfSURMRTsKKwkJYnJlYWs7CisJY2FzZSBSMzAwX1dBSVRfM0Q6CisJCXdhaXRfdW50aWwgPSBSQURFT05fV0FJVF8zRF9JRExFOworCQlicmVhazsKKwljYXNlIFIzMDBfTkVXX1dBSVRfMkRfM0Q6CisJCXdhaXRfdW50aWwgPSBSQURFT05fV0FJVF8yRF9JRExFfFJBREVPTl9XQUlUXzNEX0lETEU7CisJCWJyZWFrOworCWNhc2UgUjMwMF9ORVdfV0FJVF8yRF8yRF9DTEVBTjoKKwkJd2FpdF91bnRpbCA9IFJBREVPTl9XQUlUXzJEX0lETEV8UkFERU9OX1dBSVRfMkRfSURMRUNMRUFOOworCQlicmVhazsKKwljYXNlIFIzMDBfTkVXX1dBSVRfM0RfM0RfQ0xFQU46CisJCXdhaXRfdW50aWwgPSBSQURFT05fV0FJVF8zRF9JRExFfFJBREVPTl9XQUlUXzNEX0lETEVDTEVBTjsKKwkJYnJlYWs7CisJY2FzZSBSMzAwX05FV19XQUlUXzJEXzJEX0NMRUFOXzNEXzNEX0NMRUFOOgorCQl3YWl0X3VudGlsID0gUkFERU9OX1dBSVRfMkRfSURMRXxSQURFT05fV0FJVF8yRF9JRExFQ0xFQU47CisJCXdhaXRfdW50aWwgfD0gUkFERU9OX1dBSVRfM0RfSURMRXxSQURFT05fV0FJVF8zRF9JRExFQ0xFQU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlCRUdJTl9SSU5HKDIpOworCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwlPVVRfUklORyh3YWl0X3VudGlsKTsKKwlBRFZBTkNFX1JJTkcoKTsKK30KKwogc3RhdGljIGludCByMzAwX3NjcmF0Y2goZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAogCQkJZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYsCiAJCQlkcm1fcjMwMF9jbWRfaGVhZGVyX3QgaGVhZGVyKQpAQCAtOTA5LDE5ICs5NTAsOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBSMzAwX0NNRF9XQUlUOgotCQkJLyogc2ltcGxlIGVub3VnaCwgd2UgY2FuIGRvIGl0IGhlcmUgKi8KIAkJCURSTV9ERUJVRygiUjMwMF9DTURfV0FJVFxuIik7Ci0JCQlpZiAoaGVhZGVyLndhaXQuZmxhZ3MgPT0gMCkKLQkJCQlicmVhazsJLyogbm90aGluZyB0byBkbyAqLwotCi0JCQl7Ci0JCQkJUklOR19MT0NBTFM7Ci0KLQkJCQlCRUdJTl9SSU5HKDIpOwotCQkJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKLQkJCQlPVVRfUklORygoaGVhZGVyLndhaXQuZmxhZ3MgJiAweGYpIDw8IDE0KTsKLQkJCQlBRFZBTkNFX1JJTkcoKTsKLQkJCX0KKwkJCXIzMDBfY21kX3dhaXQoZGV2X3ByaXYsIGhlYWRlcik7CiAJCQlicmVhazsKIAogCQljYXNlIFIzMDBfQ01EX1NDUkFUQ0g6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYwppbmRleCA1ZGM3OTlhLi45MDcyZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2NwLmMKQEAgLTgyNSwxMSArODI1LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHUzMiBSUzY5MF9SRUFEX01DSU5EKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCit7CisJUkFERU9OX1dSSVRFKFJTNjkwX01DX0lOREVYLCAoYWRkciAmIFJTNjkwX01DX0lOREVYX01BU0spKTsKKwlyZXR1cm4gUkFERU9OX1JFQUQoUlM2OTBfTUNfREFUQSk7Cit9CisKIHUzMiByYWRlb25fcmVhZF9mYl9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCiB7CiAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJcmV0dXJuIFJBREVPTl9SRUFEX01DSU5EKGRldl9wcml2LCBSVjUxNV9NQ19GQl9MT0NBVElPTik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwkJcmV0dXJuIFJTNjkwX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjkwX01DX0ZCX0xPQ0FUSU9OKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCXJldHVybiBSQURFT05fUkVBRF9NQ0lORChkZXZfcHJpdiwgUjUyMF9NQ19GQl9MT0NBVElPTik7CiAJZWxzZQpAQCAtODQwLDYgKzg0OCw4IEBACiB7CiAJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MTUpCiAJCVJBREVPTl9XUklURV9NQ0lORChSVjUxNV9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKKwllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCVJBREVPTl9XUklURV9NQ0lORChSNTIwX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwogCWVsc2UKQEAgLTg1MCw2ICs4NjAsOCBAQAogewogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlSQURFT05fV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKKwllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwogCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID4gQ0hJUF9SVjUxNSkKIAkJUkFERU9OX1dSSVRFX01DSU5EKFI1MjBfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIAllbHNlCkBAIC0xMzYyLDYgKzEzNzQsNzAgQEAKICAgICAgICB9CiB9CiAKKy8qIEVuYWJsZSBvciBkaXNhYmxlIFJTNjkwIEdBUlQgb24gdGhlIGNoaXAgKi8KK3N0YXRpYyB2b2lkIHJhZGVvbl9zZXRfcnM2OTBnYXJ0KGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IG9uKQoreworCXUzMiB0ZW1wOworCisJaWYgKG9uKSB7CisJCURSTV9ERUJVRygicHJvZ3JhbW1pbmcgcnM2OTAgZ2FydCAlMDhYICUwOGxYICUwOFhcbiIsCisJCQkgIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0LAorCQkJICAobG9uZylkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyLAorCQkJICBkZXZfcHJpdi0+Z2FydF9zaXplKTsKKworCQl0ZW1wID0gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2OTBfTUNfTUlTQ19DTlRMKTsKKwkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfTUlTQ19DTlRMLCAweDUwMDApOworCisJCVJTNjkwX1dSSVRFX01DSU5EKFJTNjkwX01DX0FHUF9TSVpFLAorCQkJCSAgUlM2OTBfTUNfR0FSVF9FTiB8IFJTNjkwX01DX0FHUF9TSVpFXzMyTUIpOworCisJCXRlbXAgPSBSUzY5MF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzY5MF9NQ19HQVJUX0ZFQVRVUkVfSUQpOworCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19HQVJUX0ZFQVRVUkVfSUQsIDB4NDIwNDA4MDApOworCisJCVJTNjkwX1dSSVRFX01DSU5EKFJTNjkwX01DX0dBUlRfQkFTRSwKKwkJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIpOworCisJCXRlbXAgPSBSUzY5MF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzY5MF9NQ19BR1BfTU9ERV9DT05UUk9MKTsKKwkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX01PREVfQ09OVFJPTCwgMHgwMTQwMDAwMCk7CisKKwkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0UsCisJCQkJICAodW5zaWduZWQgaW50KWRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKworCQlkZXZfcHJpdi0+Z2FydF9zaXplID0gMzIqMTAyNCoxMDI0OworCQl0ZW1wID0gKCgoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgLSAxICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSkgJgorCQkJIDB4ZmZmZjAwMDApIHwgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDE2KSk7CisKKwkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0xPQ0FUSU9OLCB0ZW1wKTsKKworCQl0ZW1wID0gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2OTBfTUNfQUdQX1NJWkUpOworCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfU0laRSwKKwkJCQkgIFJTNjkwX01DX0dBUlRfRU4gfCBSUzY5MF9NQ19BR1BfU0laRV8zMk1CKTsKKworCQlkbyB7CisJCQl0ZW1wID0gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2OTBfTUNfR0FSVF9DQUNIRV9DTlRMKTsKKwkJCWlmICgodGVtcCAmIFJTNjkwX01DX0dBUlRfQ0xFQVJfU1RBVFVTKSA9PQorCQkJICAgIFJTNjkwX01DX0dBUlRfQ0xFQVJfRE9ORSkKKwkJCQlicmVhazsKKwkJCURSTV9VREVMQVkoMSk7CisJCX0gd2hpbGUgKDEpOworCisJCVJTNjkwX1dSSVRFX01DSU5EKFJTNjkwX01DX0dBUlRfQ0FDSEVfQ05UTCwKKwkJCQkgIFJTNjkwX01DX0dBUlRfQ0NfQ0xFQVIpOworCQlkbyB7CisJCQl0ZW1wID0gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2OTBfTUNfR0FSVF9DQUNIRV9DTlRMKTsKKwkJCWlmICgodGVtcCAmIFJTNjkwX01DX0dBUlRfQ0xFQVJfU1RBVFVTKSA9PQorCQkJCSAgIFJTNjkwX01DX0dBUlRfQ0xFQVJfRE9ORSkKKwkJCQlicmVhazsKKwkJCURSTV9VREVMQVkoMSk7CisJCX0gd2hpbGUgKDEpOworCisJCVJTNjkwX1dSSVRFX01DSU5EKFJTNjkwX01DX0dBUlRfQ0FDSEVfQ05UTCwKKwkJCQkgIFJTNjkwX01DX0dBUlRfQ0NfTk9fQ0hBTkdFKTsKKwl9IGVsc2UgeworCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfU0laRSwgUlM2OTBfTUNfR0FSVF9ESVMpOworCX0KK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX3NldF9wY2llZ2FydChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgb24pCiB7CiAJdTMyIHRtcCA9IFJBREVPTl9SRUFEX1BDSUUoZGV2X3ByaXYsIFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CkBAIC0xMzk2LDYgKzE0NzIsMTEgQEAKIHsKIAl1MzIgdG1wOwogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHsKKwkJcmFkZW9uX3NldF9yczY5MGdhcnQoZGV2X3ByaXYsIG9uKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQR0FSVCkgewogCQlyYWRlb25fc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKIAkJcmV0dXJuOwpAQCAtMTcyNiw2ICsxODA3LDcgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAkJLyogaWYgd2UgaGF2ZSBhbiBvZmZzZXQgc2V0IGZyb20gdXNlcnNwYWNlICovCiAJCWlmIChkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXRfc2V0KSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2RybS5oIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJtLmgKaW5kZXggNzFlNWIyMS4uYWFiODJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJtLmgKQEAgLTIyNSw4ICsyMjUsMjAgQEAKICNkZWZpbmUgUjMwMF9DTURfV0FJVAkJCTcKICMJZGVmaW5lIFIzMDBfV0FJVF8yRAkJMHgxCiAjCWRlZmluZSBSMzAwX1dBSVRfM0QJCTB4MgorLyogdGhlc2UgdHdvIGRlZmluZXMgYXJlIERPSU5HIElUIFdST05HIC0gaG93ZXZlcgorICogd2UgaGF2ZSB1c2Vyc3BhY2Ugd2hpY2ggcmVsaWVzIG9uIHVzaW5nIHRoZXNlLgorICogVGhlIHdhaXQgaW50ZXJmYWNlIGlzIGJhY2t3YXJkcyBjb21wYXQgbmV3IAorICogY29kZSBzaG91bGQgdXNlIHRoZSBORVdfV0FJVCBkZWZpbmVzIGJlbG93CisgKiBUSEVTRSBBUkUgTk9UIEJJVCBGSUVMRFMKKyAqLwogIwlkZWZpbmUgUjMwMF9XQUlUXzJEX0NMRUFOCTB4MwogIwlkZWZpbmUgUjMwMF9XQUlUXzNEX0NMRUFOCTB4NAorCisjCWRlZmluZSBSMzAwX05FV19XQUlUXzJEXzNECTB4MworIwlkZWZpbmUgUjMwMF9ORVdfV0FJVF8yRF8yRF9DTEVBTgkweDQKKyMJZGVmaW5lIFIzMDBfTkVXX1dBSVRfM0RfM0RfQ0xFQU4JMHg2CisjCWRlZmluZSBSMzAwX05FV19XQUlUXzJEXzJEX0NMRUFOXzNEXzNEX0NMRUFOCTB4OAorCiAjZGVmaW5lIFIzMDBfQ01EX1NDUkFUQ0gJCTgKIAogdHlwZWRlZiB1bmlvbiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCmluZGV4IDQ0MzQzMzIuLjE3M2FlNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCkBAIC0xMjMsNiArMTIzLDcgQEAKIAlDSElQX1I0MjAsCiAJQ0hJUF9SVjQxMCwKIAlDSElQX1JTNDAwLAorCUNISVBfUlM2OTAsCiAJQ0hJUF9SVjUxNSwKIAlDSElQX1I1MjAsCiAJQ0hJUF9SVjUzMCwKQEAgLTQ2Nyw2ICs0NjgsMzYgQEAKICNkZWZpbmUgUkFERU9OX0lHUEdBUlRfRU5BQkxFICAgICAgICAgICAweDM4CiAjZGVmaW5lIFJBREVPTl9JR1BHQVJUX1VOS18zOSAgICAgICAgICAgMHgzOQogCisjZGVmaW5lIFJTNjkwX01DX0lOREVYICAgICAgICAgICAgICAgICAgMHg3OAorIyAgIGRlZmluZSBSUzY5MF9NQ19JTkRFWF9NQVNLICAgICAgICAgIDB4MWZmCisjICAgZGVmaW5lIFJTNjkwX01DX0lOREVYX1dSX0VOICAgICAgICAgKDEgPDwgOSkKKyMgICBkZWZpbmUgUlM2OTBfTUNfSU5ERVhfV1JfQUNLICAgICAgICAweDdmCisjZGVmaW5lIFJTNjkwX01DX0RBVEEgICAgICAgICAgICAgICAgICAgMHg3YworCisjZGVmaW5lIFJTNjkwX01DX01JU0NfQ05UTCAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBSUzY5MF9NQ19HQVJUX0ZFQVRVUkVfSUQgICAgICAgIDB4MmIKKyNkZWZpbmUgUlM2OTBfTUNfR0FSVF9CQVNFICAgICAgICAgICAgICAweDJjCisjZGVmaW5lIFJTNjkwX01DX0dBUlRfQ0FDSEVfQ05UTAkweDJlCisjICAgZGVmaW5lIFJTNjkwX01DX0dBUlRfQ0NfTk9fQ0hBTkdFICAgMHgwCisjICAgZGVmaW5lIFJTNjkwX01DX0dBUlRfQ0NfQ0xFQVIgICAgICAgMHgxCisjICAgZGVmaW5lIFJTNjkwX01DX0dBUlRfQ0xFQVJfU1RBVFVTICAgKDEgPDwgMSkKKyMgICAgICAgZGVmaW5lIFJTNjkwX01DX0dBUlRfQ0xFQVJfRE9ORSAgICAgKDAgPDwgMSkKKyMgICAgICAgZGVmaW5lIFJTNjkwX01DX0dBUlRfQ0xFQVJfUEVORElORyAgKDEgPDwgMSkKKyNkZWZpbmUgUlM2OTBfTUNfQUdQX1NJWkUgICAgICAgICAgICAgICAweDM4CisjICAgZGVmaW5lIFJTNjkwX01DX0dBUlRfRElTICAgICAgICAgICAgMHgwCisjICAgZGVmaW5lIFJTNjkwX01DX0dBUlRfRU4gICAgICAgICAgICAgMHgxCisjICAgZGVmaW5lIFJTNjkwX01DX0FHUF9TSVpFXzMyTUIgICAgICAgKDAgPDwgMSkKKyMgICBkZWZpbmUgUlM2OTBfTUNfQUdQX1NJWkVfNjRNQiAgICAgICAoMSA8PCAxKQorIyAgIGRlZmluZSBSUzY5MF9NQ19BR1BfU0laRV8xMjhNQiAgICAgICgyIDw8IDEpCisjICAgZGVmaW5lIFJTNjkwX01DX0FHUF9TSVpFXzI1Nk1CICAgICAgKDMgPDwgMSkKKyMgICBkZWZpbmUgUlM2OTBfTUNfQUdQX1NJWkVfNTEyTUIgICAgICAoNCA8PCAxKQorIyAgIGRlZmluZSBSUzY5MF9NQ19BR1BfU0laRV8xR0IgICAgICAgICg1IDw8IDEpCisjICAgZGVmaW5lIFJTNjkwX01DX0FHUF9TSVpFXzJHQiAgICAgICAgKDYgPDwgMSkKKyNkZWZpbmUgUlM2OTBfTUNfQUdQX01PREVfQ09OVFJPTCAgICAgICAweDM5CisjZGVmaW5lIFJTNjkwX01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgUlM2OTBfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAweDEwMQorI2RlZmluZSBSUzY5MF9NQ19BR1BfQkFTRSAgICAgICAgICAgICAgIDB4MTAyCisKICNkZWZpbmUgUjUyMF9NQ19JTkRfSU5ERVggMHg3MAogI2RlZmluZSBSNTIwX01DX0lORF9XUl9FTiAoMTw8MjQpCiAjZGVmaW5lIFI1MjBfTUNfSU5EX0RBVEEgIDB4NzQKQEAgLTEwNzYsNiArMTEwNywxMyBAQAogCQlSQURFT05fV1JJVEUoUjUyMF9NQ19JTkRfSU5ERVgsIDApOwlcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBSUzY5MF9XUklURV9NQ0lORCggYWRkciwgdmFsICkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlSQURFT05fV1JJVEUoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0VOIHwgKChhZGRyKSAmIFJTNjkwX01DX0lOREVYX01BU0spKTsJXAorCVJBREVPTl9XUklURShSUzY5MF9NQ19EQVRBLCB2YWwpOwkJCVwKKwlSQURFT05fV1JJVEUoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CVwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgQ1BfUEFDS0VUMCggcmVnLCBuICkJCQkJCQlcCiAJKFJBREVPTl9DUF9QQUNLRVQwIHwgKChuKSA8PCAxNikgfCAoKHJlZykgPj4gMikpCiAjZGVmaW5lIENQX1BBQ0tFVDBfVEFCTEUoIHJlZywgbiApCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9tZW0uYyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX21lbS5jCmluZGV4IDc4YjM0ZmEuLjRhZjUyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX21lbS5jCkBAIC04OCw3ICs4OCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoKHAsIGhlYXApIHsKIAkJaW50IHN0YXJ0ID0gKHAtPnN0YXJ0ICsgbWFzaykgJiB+bWFzazsKLQkJaWYgKHAtPmZpbGVfcHJpdiA9PSAwICYmIHN0YXJ0ICsgc2l6ZSA8PSBwLT5zdGFydCArIHAtPnNpemUpCisJCWlmIChwLT5maWxlX3ByaXYgPT0gTlVMTCAmJiBzdGFydCArIHNpemUgPD0gcC0+c3RhcnQgKyBwLT5zaXplKQogCQkJcmV0dXJuIHNwbGl0X2Jsb2NrKHAsIHN0YXJ0LCBzaXplLCBmaWxlX3ByaXYpOwogCX0KIApAQCAtMTEzLDcgKzExMyw3IEBACiAJLyogQXNzdW1lcyBhIHNpbmdsZSBjb250aWd1b3VzIHJhbmdlLiAgTmVlZHMgYSBzcGVjaWFsIGZpbGVfcHJpdiBpbgogCSAqICdoZWFwJyB0byBzdG9wIGl0IGJlaW5nIHN1YnN1bWVkLgogCSAqLwotCWlmIChwLT5uZXh0LT5maWxlX3ByaXYgPT0gMCkgeworCWlmIChwLT5uZXh0LT5maWxlX3ByaXYgPT0gTlVMTCkgewogCQlzdHJ1Y3QgbWVtX2Jsb2NrICpxID0gcC0+bmV4dDsKIAkJcC0+c2l6ZSArPSBxLT5zaXplOwogCQlwLT5uZXh0ID0gcS0+bmV4dDsKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQlkcm1fZnJlZShxLCBzaXplb2YoKnEpLCBEUk1fTUVNX0JVRlMpOwogCX0KIAotCWlmIChwLT5wcmV2LT5maWxlX3ByaXYgPT0gMCkgeworCWlmIChwLT5wcmV2LT5maWxlX3ByaXYgPT0gTlVMTCkgewogCQlzdHJ1Y3QgbWVtX2Jsb2NrICpxID0gcC0+cHJldjsKIAkJcS0+c2l6ZSArPSBwLT5zaXplOwogCQlxLT5uZXh0ID0gcC0+bmV4dDsKQEAgLTE3NCw3ICsxNzQsNyBAQAogCSAqICdoZWFwJyB0byBzdG9wIGl0IGJlaW5nIHN1YnN1bWVkLgogCSAqLwogCWxpc3RfZm9yX2VhY2gocCwgaGVhcCkgewotCQl3aGlsZSAocC0+ZmlsZV9wcml2ID09IDAgJiYgcC0+bmV4dC0+ZmlsZV9wcml2ID09IDApIHsKKwkJd2hpbGUgKHAtPmZpbGVfcHJpdiA9PSBOVUxMICYmIHAtPm5leHQtPmZpbGVfcHJpdiA9PSBOVUxMKSB7CiAJCQlzdHJ1Y3QgbWVtX2Jsb2NrICpxID0gcC0+bmV4dDsKIAkJCXAtPnNpemUgKz0gcS0+c2l6ZTsKIAkJCXAtPm5leHQgPSBxLT5uZXh0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYwppbmRleCA5NGJhZWM2Li43YTMzOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYwpAQCAtMTI2LDYgKzEyNiw4IEBACiAJCQkgICAgIGh3X2FkZHIsIGN1cl9hZGRyLCBuZXh0X2FkZHIpOwogCQkJcmV0dXJuIC0xOwogCQl9CisJCWlmICAoKGN1cl9hZGRyIDwgaHdfYWRkcikgJiYgKG5leHRfYWRkciA+PSBod19hZGRyKSkKKwkJCW1zbGVlcCgxKTsKIAl9IHdoaWxlICgoY3VyX2FkZHIgPCBod19hZGRyKSAmJiAobmV4dF9hZGRyID49IGh3X2FkZHIpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQxNiwyNyArNDE4LDUwIEBACiAJaW50IHBhdXNlZCwgY291bnQ7CiAJdm9sYXRpbGUgdWludDMyX3QgKnBhdXNlZF9hdCA9IGRldl9wcml2LT5sYXN0X3BhdXNlX3B0cjsKIAl1aW50MzJfdCByZWFkZXIscHRyOworCXVpbnQzMl90IGRpZmY7CiAKIAlwYXVzZWQgPSAwOwogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CiAJKHZvaWQpICoodm9sYXRpbGUgdWludDMyX3QgKikodmlhX2dldF9kbWEoZGV2X3ByaXYpIC0xKTsKKwogCSpwYXVzZWRfYXQgPSBwYXVzZV9hZGRyX2xvOwogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CiAJKHZvaWQpICpwYXVzZWRfYXQ7CisKIAlyZWFkZXIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7CiAJcHRyID0gKCh2b2xhdGlsZSBjaGFyICopcGF1c2VkX2F0IC0gZGV2X3ByaXYtPmRtYV9wdHIpICsKIAkJZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyICsgNDsKKwogCWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9IHZpYV9nZXRfZG1hKGRldl9wcml2KSAtIDE7CiAKLQlpZiAoKHB0ciAtIHJlYWRlcikgPD0gZGV2X3ByaXYtPmRtYV9kaWZmICkgewotCQljb3VudCA9IDEwMDAwMDAwOwotCQl3aGlsZSAoIShwYXVzZWQgPSAoVklBX1JFQUQoMHg0MWMpICYgMHg4MDAwMDAwMCkpICYmIGNvdW50LS0pOworCS8qCisJICogSWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBjb21tYW5kIHJlYWRlciB3aWxsIAorCSAqIG1pc3MgdGhlIG5ldyBwYXVzZSBhZGRyZXNzIGFuZCBwYXVzZSBvbiB0aGUgb2xkIG9uZSwKKwkgKiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBwcm9ncmFtIHRoZSBuZXcgc3RhcnQgYWRkcmVzcworCSAqIHVzaW5nIFBDSS4KKwkgKi8KKworCWRpZmYgPSAodWludDMyX3QpIChwdHIgLSByZWFkZXIpIC0gZGV2X3ByaXYtPmRtYV9kaWZmOworCWNvdW50ID0gMTAwMDAwMDA7CisJd2hpbGUoZGlmZiA9PSAwICYmIGNvdW50LS0pIHsKKwkJcGF1c2VkID0gKFZJQV9SRUFEKDB4NDFjKSAmIDB4ODAwMDAwMDApOworCQlpZiAocGF1c2VkKSAKKwkJCWJyZWFrOworCQlyZWFkZXIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7CisJCWRpZmYgPSAodWludDMyX3QpIChwdHIgLSByZWFkZXIpIC0gZGV2X3ByaXYtPmRtYV9kaWZmOwogCX0KIAorCXBhdXNlZCA9IFZJQV9SRUFEKDB4NDFjKSAmIDB4ODAwMDAwMDA7CisKIAlpZiAocGF1c2VkICYmICFub19wY2lfZmlyZSkgewogCQlyZWFkZXIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7Ci0JCWlmICgocHRyIC0gcmVhZGVyKSA9PSBkZXZfcHJpdi0+ZG1hX2RpZmYpIHsKLQorCQlkaWZmID0gKHVpbnQzMl90KSAocHRyIC0gcmVhZGVyKSAtIGRldl9wcml2LT5kbWFfZGlmZjsKKwkJZGlmZiAmPSAoZGV2X3ByaXYtPmRtYV9oaWdoIC0gMSk7CisJCWlmIChkaWZmICE9IDAgJiYgZGlmZiA8IChkZXZfcHJpdi0+ZG1hX2hpZ2ggPj4gMSkpIHsKKwkJCURSTV9FUlJPUigiUGF1c2VkIGF0IGluY29ycmVjdCBhZGRyZXNzLiAiCisJCQkJICAiMHglMDh4LCAweCUwOHggMHglMDh4XG4iLAorCQkJCSAgcHRyLCByZWFkZXIsIGRldl9wcml2LT5kbWFfZGlmZik7CisJCX0gZWxzZSBpZiAoZGlmZiA9PSAwKSB7CiAJCQkvKgogCQkJICogVGhlcmUgaXMgYSBjb25jZXJuIHRoYXQgdGhlc2Ugd3JpdGVzIG1heSBzdGFsbCB0aGUgUENJIGJ1cwogCQkJICogaWYgdGhlIEdQVSBpcyBub3QgaWRsZS4gSG93ZXZlciwgaWRsaW5nIHRoZSBHUFUgZmlyc3QKQEAgLTU3Nyw2ICs2MDIsNyBAQAogCXVpbnQzMl90IHBhdXNlX2FkZHJfbG8sIHBhdXNlX2FkZHJfaGk7CiAJdWludDMyX3QganVtcF9hZGRyX2xvLCBqdW1wX2FkZHJfaGk7CiAJdm9sYXRpbGUgdWludDMyX3QgKmxhc3RfcGF1c2VfcHRyOworCXVpbnQzMl90IGRtYV9sb3dfc2F2ZTEsIGRtYV9sb3dfc2F2ZTI7CiAKIAlhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKIAl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9KVU1QLCAwLCAmanVtcF9hZGRyX2hpLApAQCAtNjAzLDggKzYyOSwyOSBAQAogCQkgICAgICAmcGF1c2VfYWRkcl9sbywgMCk7CiAKIAkqbGFzdF9wYXVzZV9wdHIgPSBwYXVzZV9hZGRyX2xvOworCWRtYV9sb3dfc2F2ZTEgPSBkZXZfcHJpdi0+ZG1hX2xvdzsKIAotCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBqdW1wX2FkZHJfaGksIGp1bXBfYWRkcl9sbywgMCk7CisJLyoKKwkgKiBOb3csIHNldCBhIHRyYXAgdGhhdCB3aWxsIHBhdXNlIHRoZSByZWd1bGF0b3IgaWYgaXQgdHJpZXMgdG8gcmVydW4gdGhlIG9sZAorCSAqIGNvbW1hbmQgYnVmZmVyLiAoV2hpY2ggbWF5IGhhcHBlbiBpZiB2aWFfaG9va19zZWdtZW50IGRldGVjcyBhIGNvbW1hbmQgcmVndWxhdG9yIHBhdXNlCisJICogYW5kIHJlaXNzdWVzIHRoZSBqdW1wIGNvbW1hbmQgb3ZlciBQQ0ksIHdoaWxlIHRoZSByZWd1bGF0b3IgaGFzIGFscmVhZHkgdGFrZW4gdGhlIGp1bXAKKwkgKiBhbmQgYWN0dWFsbHkgcGF1c2VkIGF0IHRoZSBjdXJyZW50IGJ1ZmZlciBlbmQpLgorCSAqIFRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIGRldGVjdCB0aGlzIGNvbmRpdGlvbiwgc2luY2UgdGhlIGh3X2FkZHJfcG9pbnRlcgorCSAqIGRvZXMgbm90IHNlZW0gdG8gZ2V0IHVwZGF0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhIGp1bXAgb2NjdXJzLgorCSAqLworCisJbGFzdF9wYXVzZV9wdHIgPQorCQl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksCisJCQkgICAgICAmcGF1c2VfYWRkcl9sbywgMCkgLSAxOworCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwKKwkJICAgICAgJnBhdXNlX2FkZHJfbG8sIDApOworCSpsYXN0X3BhdXNlX3B0ciA9IHBhdXNlX2FkZHJfbG87CisKKwlkbWFfbG93X3NhdmUyID0gZGV2X3ByaXYtPmRtYV9sb3c7CisJZGV2X3ByaXYtPmRtYV9sb3cgPSBkbWFfbG93X3NhdmUxOworCXZpYV9ob29rX3NlZ21lbnQoZGV2X3ByaXYsIGp1bXBfYWRkcl9oaSwganVtcF9hZGRyX2xvLCAwKTsKKwlkZXZfcHJpdi0+ZG1hX2xvdyA9IGRtYV9sb3dfc2F2ZTI7CisJdmlhX2hvb2tfc2VnbWVudChkZXZfcHJpdiwgcGF1c2VfYWRkcl9oaSwgcGF1c2VfYWRkcl9sbywgMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hYmxpdC5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hYmxpdC5jCmluZGV4IDMzYzUxOTcuLjQwOWUwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RtYWJsaXQuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWFibGl0LmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCSAqIChOb3QgYSBiaWcgbGltaXRhdGlvbiBhbnl3YXkuKQogCSAqLwogCi0JaWYgKCh4ZmVyLT5tZW1fc3RyaWRlIC0geGZlci0+bGluZV9sZW5ndGgpID49IFBBR0VfU0laRSkgeworCWlmICgoeGZlci0+bWVtX3N0cmlkZSAtIHhmZXItPmxpbmVfbGVuZ3RoKSA+IDIqUEFHRV9TSVpFKSB7CiAJCURSTV9FUlJPUigiVG9vIGxhcmdlIHN5c3RlbSBtZW1vcnkgc3RyaWRlLiBTdHJpZGU6ICVkLCAiCiAJCQkgICJMZW5ndGg6ICVkXG4iLCB4ZmVyLT5tZW1fc3RyaWRlLCB4ZmVyLT5saW5lX2xlbmd0aCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VzcC5jIGIvZHJpdmVycy9jaGFyL2VzcC5jCmluZGV4IGMwMWUyNmQuLmYzZmU2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lc3AuYworKysgYi9kcml2ZXJzL2NoYXIvZXNwLmMKQEAgLTI0ODQsNiArMjQ4NCw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCisJCXNwaW5fbG9ja19pbml0KCZpbmZvLT5sb2NrKTsKIAkJLyogcnhfdHJpZ2dlciwgdHhfdHJpZ2dlciBhcmUgbmVlZGVkIGJ5IGF1dG9jb25maWcgKi8KIAkJaW5mby0+Y29uZmlnLnJ4X3RyaWdnZXIgPSByeF90cmlnZ2VyOwogCQlpbmZvLT5jb25maWcudHhfdHJpZ2dlciA9IHR4X3RyaWdnZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCmluZGV4IDhmYWNmM2UuLjdlZDdkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIERFQlVHIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hwZXQuYyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKaW5kZXggNDY1YWQzNS4uMTM5OTk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2hwZXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHBldC5jCkBAIC03MzEsMTQgKzczMSwxNCBAQAogCiBpbnQgaHBldF9hbGxvYyhzdHJ1Y3QgaHBldF9kYXRhICpoZHApCiB7Ci0JdTY0IGNhcCwgbWNmZywgaHBldF9jb25maWc7CisJdTY0IGNhcCwgbWNmZzsKIAlzdHJ1Y3QgaHBldF9kZXYgKmRldnA7Ci0JdTMyIGksIG50aW1lciwgaXJxOworCXUzMiBpLCBudGltZXI7CiAJc3RydWN0IGhwZXRzICpocGV0cDsKIAlzaXplX3Qgc2l6OwogCXN0cnVjdCBocGV0IF9faW9tZW0gKmhwZXQ7CiAJc3RhdGljIHN0cnVjdCBocGV0cyAqbGFzdCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBwZXJpb2QsIGlycV9iaXRtYXA7CisJdW5zaWduZWQgbG9uZyBwZXJpb2Q7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7CiAKIAkvKgpAQCAtNzY1LDQ4ICs3NjUsMTIgQEAKIAlocGV0cC0+aHBfaHBldF9waHlzID0gaGRwLT5oZF9waHlzX2FkZHJlc3M7CiAKIAlocGV0cC0+aHBfbnRpbWVyID0gaGRwLT5oZF9uaXJxczsKKworCWZvciAoaSA9IDA7IGkgPCBoZHAtPmhkX25pcnFzOyBpKyspCisJCWhwZXRwLT5ocF9kZXZbaV0uaGRfaGR3aXJxID0gaGRwLT5oZF9pcnFbaV07CisKIAlocGV0ID0gaHBldHAtPmhwX2hwZXQ7CiAKLQkvKiBBc3NpZ24gSVJRcyBzdGF0aWNhbGx5IGZvciBsZWdhY3kgZGV2aWNlcyAqLwotCWhwZXRwLT5ocF9kZXZbMF0uaGRfaGR3aXJxID0gaGRwLT5oZF9pcnFbMF07Ci0JaHBldHAtPmhwX2RldlsxXS5oZF9oZHdpcnEgPSBoZHAtPmhkX2lycVsxXTsKLQotCS8qIEFzc2lnbiBJUlFzIGR5bmFtaWNhbGx5IGZvciB0aGUgb3RoZXJzICovCi0JZm9yIChpID0gMiwgZGV2cCA9ICZocGV0cC0+aHBfZGV2WzJdOyBpIDwgaGRwLT5oZF9uaXJxczsgaSsrLCBkZXZwKyspIHsKLQkJc3RydWN0IGhwZXRfdGltZXIgX19pb21lbSAqdGltZXI7Ci0KLQkJdGltZXIgPSAmaHBldC0+aHBldF90aW1lcnNbZGV2cCAtIGhwZXRwLT5ocF9kZXZdOwotCi0JCS8qIENoZWNrIGlmIHRoZXJlJ3MgYWxyZWFkeSBhbiBJUlEgYXNzaWduZWQgdG8gdGhlIHRpbWVyICovCi0JCWlmIChoZHAtPmhkX2lycVtpXSkgewotCQkJaHBldHAtPmhwX2RldltpXS5oZF9oZHdpcnEgPSBoZHAtPmhkX2lycVtpXTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaHBldF9jb25maWcgPSByZWFkcSgmdGltZXItPmhwZXRfY29uZmlnKTsKLQkJaXJxX2JpdG1hcCA9IChocGV0X2NvbmZpZyAmIFRuX0lOVF9ST1VURV9DQVBfTUFTSykKLQkJCT4+IFRuX0lOVF9ST1VURV9DQVBfU0hJRlQ7Ci0JCWlmICghaXJxX2JpdG1hcCkKLQkJCWlycSA9IDA7ICAgICAgICAvKiBObyB2YWxpZCBJUlEgQXNzaWduYWJsZSAqLwotCQllbHNlIHsKLQkJCWlycSA9IGZpbmRfZmlyc3RfYml0KCZpcnFfYml0bWFwLCAzMik7Ci0JCQlkbyB7Ci0JCQkJaHBldF9jb25maWcgfD0gaXJxIDw8IFRuX0lOVF9ST1VURV9DTkZfU0hJRlQ7Ci0JCQkJd3JpdGVxKGhwZXRfY29uZmlnLCAmdGltZXItPmhwZXRfY29uZmlnKTsKLQotCQkJCS8qCi0JCQkJICogVmVyaWZ5IHdoZXRoZXIgd2UgaGF2ZSB3cml0dGVuIGEgdmFsaWQKLQkJCQkgKiBJUlEgbnVtYmVyIGJ5IHJlYWRpbmcgaXQgYmFjayBhZ2FpbgotCQkJCSAqLwotCQkJCWhwZXRfY29uZmlnID0gcmVhZHEoJnRpbWVyLT5ocGV0X2NvbmZpZyk7Ci0JCQkJaWYgKGlycSA9PSAoaHBldF9jb25maWcgJiBUbl9JTlRfUk9VVEVfQ05GX01BU0spCi0JCQkJCQk+PiBUbl9JTlRfUk9VVEVfQ05GX1NISUZUKQotCQkJCQlicmVhazsgIC8qIFN1Y2Nlc3MgKi8KLQkJCX0gd2hpbGUgKChpcnEgPSAoZmluZF9uZXh0X2JpdCgmaXJxX2JpdG1hcCwgMzIsIGlycSkpKSk7Ci0JCX0KLQkJaHBldHAtPmhwX2RldltpXS5oZF9oZHdpcnEgPSBpcnE7Ci0JfQotCiAJY2FwID0gcmVhZHEoJmhwZXQtPmhwZXRfY2FwKTsKIAogCW50aW1lciA9ICgoY2FwICYgSFBFVF9OVU1fVElNX0NBUF9NQVNLKSA+PiBIUEVUX05VTV9USU1fQ0FQX1NISUZUKSArIDE7CkBAIC04MzYsOCArODAwLDcgQEAKIAkJaHBldHAtPmhwX3doaWNoLCBoZHAtPmhkX3BoeXNfYWRkcmVzcywKIAkJaHBldHAtPmhwX250aW1lciA+IDEgPyAicyIgOiAiIik7CiAJZm9yIChpID0gMDsgaSA8IGhwZXRwLT5ocF9udGltZXI7IGkrKykKLQkJcHJpbnRrKCIlcyAlZCIsIGkgPiAwID8gIiwiIDogIiIsCi0JCQkJaHBldHAtPmhwX2RldltpXS5oZF9oZHdpcnEpOworCQlwcmludGsoIiVzICVkIiwgaSA+IDAgPyAiLCIgOiAiIiwgaGRwLT5oZF9pcnFbaV0pOwogCXByaW50aygiXG4iKTsKIAogCXByaW50ayhLRVJOX0lORk8gImhwZXQldTogJXUgJWQtYml0IHRpbWVycywgJUx1IEh6XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYwppbmRleCBlNzRiYjk0Li45MWNkYjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYwpAQCAtNzgsOCArNzgsOCBAQAogCWZvciAocmVzdCA9IGNudDsgcmVzdCA+IDA7IHJlc3QgLT0gbmxlbikgewogCQlubGVuID0gKHJlc3QgPiAxNikgPyAxNiA6IHJlc3Q7CiAJCW1lbWNweShrYiwgYnVmLCBubGVuKTsKLQkJYmVhdF9wdXRfdGVybV9jaGFyKHZ0ZXJtbm8sIHJlc3QsIGtiWzBdLCBrYlsxXSk7Ci0JCXJlc3QgLT0gbmxlbjsKKwkJYmVhdF9wdXRfdGVybV9jaGFyKHZ0ZXJtbm8sIG5sZW4sIGtiWzBdLCBrYlsxXSk7CisJCWJ1ZiArPSBubGVuOwogCX0KIAlyZXR1cm4gY250OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDZiYmQ0ZmEuLjhkNmMyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTksNyArOSwxNCBAQAogCSAgSGFyZHdhcmUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgQ29yZSBpbmZyYXN0cnVjdHVyZS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcm5nLWNvcmUuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcm5nLWNvcmUuICBUaGlzIHByb3ZpZGVzIGEgZGV2aWNlCisJICB0aGF0J3MgdXN1YWxseSBjYWxsZWQgL2Rldi9od19yYW5kb20sIGFuZCB3aGljaCBleHBvc2VzIG9uZQorCSAgb2YgcG9zc2libHkgc2V2ZXJhbCBoYXJkd2FyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMuCisKKwkgIFRoZXNlIGhhcmR3YXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyBkbyBub3QgZmVlZCBkaXJlY3RseQorCSAgaW50byB0aGUga2VybmVsJ3MgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICBUaGF0IGlzIHVzdWFsbHkKKwkgIGhhbmRsZWQgYnkgdGhlICJybmdkIiBkYWVtb24uICBEb2N1bWVudGF0aW9uL2h3X3JhbmRvbS50eHQKKwkgIGhhcyBtb3JlIGluZm9ybWF0aW9uLgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vY29yZS5jCmluZGV4IDg0Y2RmOTAuLjY2MmQ2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vY29yZS5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vY29yZS5jCkBAIC0xMTYsNiArMTE2LDEwIEBACiAJCWVyciA9IC1FQUdBSU47CiAJCWlmICghYnl0ZXNfcmVhZCAmJiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQogCQkJZ290byBvdXQ7CisJCWlmIChieXRlc19yZWFkIDwgMCkgeworCQkJZXJyID0gYnl0ZXNfcmVhZDsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJZXJyID0gLUVGQVVMVDsKIAkJd2hpbGUgKGJ5dGVzX3JlYWQgJiYgc2l6ZSkgewpAQCAtMjM0LDExICsyMzgsMTEgQEAKIAkJICAgTlVMTCk7CiAKIAotc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9taXNjZGV2KGJvb2wgc3VzcGVuZGVkKQorc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9taXNjZGV2KHZvaWQpCiB7CiAJZGV2aWNlX3JlbW92ZV9maWxlKHJuZ19taXNjZGV2LnRoaXNfZGV2aWNlLCAmZGV2X2F0dHJfcm5nX2F2YWlsYWJsZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKHJuZ19taXNjZGV2LnRoaXNfZGV2aWNlLCAmZGV2X2F0dHJfcm5nX2N1cnJlbnQpOwotCV9fbWlzY19kZXJlZ2lzdGVyKCZybmdfbWlzY2Rldiwgc3VzcGVuZGVkKTsKKwltaXNjX2RlcmVnaXN0ZXIoJnJuZ19taXNjZGV2KTsKIH0KIAogc3RhdGljIGludCByZWdpc3Rlcl9taXNjZGV2KHZvaWQpCkBAIC0zMTMsNyArMzE3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGh3cm5nX3JlZ2lzdGVyKTsKIAotdm9pZCBfX2h3cm5nX3VucmVnaXN0ZXIoc3RydWN0IGh3cm5nICpybmcsIGJvb2wgc3VzcGVuZGVkKQordm9pZCBod3JuZ191bnJlZ2lzdGVyKHN0cnVjdCBod3JuZyAqcm5nKQogewogCWludCBlcnI7CiAKQEAgLTMzMiwxMSArMzM2LDExIEBACiAJCX0KIAl9CiAJaWYgKGxpc3RfZW1wdHkoJnJuZ19saXN0KSkKLQkJdW5yZWdpc3Rlcl9taXNjZGV2KHN1c3BlbmRlZCk7CisJCXVucmVnaXN0ZXJfbWlzY2RldigpOwogCiAJbXV0ZXhfdW5sb2NrKCZybmdfbXV0ZXgpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoX19od3JuZ191bnJlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGh3cm5nX3VucmVnaXN0ZXIpOwogCiAKIE1PRFVMRV9ERVNDUklQVElPTigiSC9XIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChSTkcpIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCmluZGV4IDdlMzE5OTUuLjUxNzM4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKQEAgLTEsNyArMSw1IEBACiAvKgotICogZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCi0gKgotICogUk5HIGRyaXZlciBmb3IgVEkgT01BUCBDUFUgZmFtaWx5CisgKiBvbWFwLXJuZy5jIC0gUk5HIGRyaXZlciBmb3IgVEkgT01BUCBDUFUgZmFtaWx5CiAgKgogICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgogICoKQEAgLTE1LDExICsxMyw2IEBACiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqCi0gKiBUT0RPOgotICoKLSAqIC0gTWFrZSBzdGF0dXMgdXBkYXRlZCBiZSBpbnRlcnJ1cHQgZHJpdmVuIHNvIHdlIGRvbid0IHBvbGwKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTUsMTcgKzQ4LDE2IEBACiBzdGF0aWMgc3RydWN0IGNsayAqcm5nX2ljazsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpybmdfZGV2OwogCi1zdGF0aWMgdTMyIG9tYXBfcm5nX3JlYWRfcmVnKGludCByZWcpCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwX3JuZ19yZWFkX3JlZyhpbnQgcmVnKQogewogCXJldHVybiBfX3Jhd19yZWFkbChybmdfYmFzZSArIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXBfcm5nX3dyaXRlX3JlZyhpbnQgcmVnLCB1MzIgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfcm5nX3dyaXRlX3JlZyhpbnQgcmVnLCB1MzIgdmFsKQogewogCV9fcmF3X3dyaXRlbCh2YWwsIHJuZ19iYXNlICsgcmVnKTsKIH0KIAotLyogUkVWSVNJVDogRG9lcyB0aGUgc3RhdHVzIGJpdCByZWFsbHkgd29yayBvbiAxNnh4PyAqLwogc3RhdGljIGludCBvbWFwX3JuZ19kYXRhX3ByZXNlbnQoc3RydWN0IGh3cm5nICpybmcsIGludCB3YWl0KQogewogCWludCBkYXRhLCBpOwpAQCAtNzQsNiArNjYsMTEgQEAKIAkJZGF0YSA9IG9tYXBfcm5nX3JlYWRfcmVnKFJOR19TVEFUX1JFRykgPyAwIDogMTsKIAkJaWYgKGRhdGEgfHwgIXdhaXQpCiAJCQlicmVhazsKKwkJLyogUk5HIHByb2R1Y2VzIGRhdGEgZmFzdCBlbm91Z2ggKDIrIE1CaXQvc2VjLCBldmVuCisJCSAqIGR1cmluZyAicm5ndGVzdCIgbG9hZHMsIHRoYXQgdGhlc2UgZGVsYXlzIGRvbid0CisJCSAqIHNlZW0gdG8gdHJpZ2dlci4gIFdlICpjb3VsZCogdXNlIHRoZSBSTkcgSVJRLCBidXQKKwkJICogdGhhdCdkIGJlIGhpZ2hlciBvdmVyaGVhZCAuLi4gc28gd2h5IGJvdGhlcj8KKwkJICovCiAJCXVkZWxheSgxMCk7CiAJfQogCXJldHVybiBkYXRhOwpAQCAtMTAxLDcgKzk4LDggQEAKIAkgKiBBIGJpdCB1Z2x5LCBhbmQgaXQgd2lsbCBuZXZlciBhY3R1YWxseSBoYXBwZW4gYnV0IHRoZXJlIGNhbgogCSAqIGJlIG9ubHkgb25lIFJORyBhbmQgdGhpcyBjYXRjaGVzIGFueSBib3JrCiAJICovCi0JQlVHX09OKHJuZ19kZXYpOworCWlmIChybmdfZGV2KQorCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCXJuZ19pY2sgPSBjbGtfZ2V0KE5VTEwsICJybmdfaWNrIik7CkBAIC0xMjQsNyArMTIyLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtZW0pOwotCXJuZ19iYXNlID0gKHUzMiBfX2lvbWVtICopaW9fcDJ2KHJlcy0+c3RhcnQpOworCXJuZ19iYXNlID0gKHUzMiBfX2ZvcmNlIF9faW9tZW0gKilpb19wMnYocmVzLT5zdGFydCk7CiAKIAlyZXQgPSBod3JuZ19yZWdpc3Rlcigmb21hcF9ybmdfb3BzKTsKIAlpZiAocmV0KSB7CkBAIC0xODIsNiArMTgwLDggQEAKIAogI2VuZGlmCiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwX3JuZyIpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX3JuZ19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaTJsaWIuYyBiL2RyaXZlcnMvY2hhci9pcDIvaTJsaWIuYwppbmRleCBkNjU2N2IzLi45YzI1MzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2kybGliLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMi9pMmxpYi5jCkBAIC02NDQsMTIgKzY0NCwxMiBAQAogCQkJCS8vIE5vcm1hbCBFeHBlY3RlZCBwYXRoIC0gV2Ugc3RpbGwgaG9sZCBMT0NLCiAJCQkJYnJlYWs7IC8qIGZyb20gZm9yKCktIEVub3VnaCByb29tOiBnb3RvIHByb2NlZWQgKi8KIAkJCX0KLQkJfQorCQkJaXAydHJhY2UoQ0hBTk4sIElUUkNfUVVFVUUsIDMsIDEsIHRvdGFsc2l6ZSk7CisJCQlXUklURV9VTkxPQ0tfSVJRUkVTVE9SRShsb2NrX3Zhcl9wLCBmbGFncyk7CisJCX0gZWxzZQorCQkJaXAydHJhY2UoQ0hBTk4sIElUUkNfUVVFVUUsIDMsIDEsIHRvdGFsc2l6ZSk7CiAKLQkJaXAydHJhY2UgKENIQU5OLCBJVFJDX1FVRVVFLCAzLCAxLCB0b3RhbHNpemUgKTsKLQotCQkvLyBQcmVwYXJlIHRvIHdhaXQgZm9yIGJ1ZmZlcnMgdG8gZW1wdHkKLQkJV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUobG9ja192YXJfcCxmbGFncyk7IAorCQkvKiBQcmVwYXJlIHRvIHdhaXQgZm9yIGJ1ZmZlcnMgdG8gZW1wdHkgKi8KIAkJc2VydmljZU91dGdvaW5nRmlmbyhwQik7CS8vIER1bXAgd2hhdCB3ZSBnb3QKIAogCQlpZiAodGltZW91dCA9PSAwKSB7CkBAIC0xODMwLDYgKzE4MzAsOCBAQAogCQlkZWZhdWx0OiAvLyBOZWl0aGVyIHBhY2tldD8gc2hvdWxkIGJlIGltcG9zc2libGUKIAkJCWlwMnRyYWNlIChJVFJDX05PX1BPUlQsIElUUkNfU0ZJRk8sIDUsIDEsCiAJCQkJUFRZUEVfT0YocEItPmkyZUxlYWRvZmZXb3JkKSApOworCQkJV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUoJnBCLT5yZWFkX2ZpZm9fc3BpbmxvY2ssCisJCQkJCWJmbGFncyk7CiAKIAkJCWJyZWFrOwogCQl9ICAvLyBFbmQgb2Ygc3dpdGNoIG9uIHR5cGUgb2YgcGFja2V0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCmluZGV4IDg1ZDU5NmEuLmViYTI4ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc2ljb20uYworKysgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKQEAgLTE1MjcsNyArMTUyNyw3IEBACiAJbXNsZWVwKDEwKTsKIAogCXBvcnRjb3VudCA9IGludyhiYXNlICsgMHgyKTsKLQlpZiAoIWludyhiYXNlICsgMHhlKSAmIDB4MSB8fCAocG9ydGNvdW50ICE9IDAgJiYgcG9ydGNvdW50ICE9IDQgJiYKKwlpZiAoIShpbncoYmFzZSArIDB4ZSkgJiAweDEpIHx8IChwb3J0Y291bnQgIT0gMCAmJiBwb3J0Y291bnQgIT0gNCAmJgogCQkJCXBvcnRjb3VudCAhPSA4ICYmIHBvcnRjb3VudCAhPSAxNikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVNJTG9hZDpQQ0kgQ2FyZCVkIHJlc2V0IGZhaWx1cmUuXG4iLAogCQkJY2FyZCArIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwppbmRleCA0ZGJkMzQyLi45NzY5YmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwpAQCAtMTAzMyw3ICsxMDMzLDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpIHx8IGRlZmluZWQoQ09ORklHX0FMUEhBKSB8fFwKICAgICBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fFwKICAgICBkZWZpbmVkKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX1NVUEVSSCkgfHxcCi0gICAgKGRlZmluZWQoQ09ORklHX0FSTSkgJiYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfQVRLQkQpICYmICFkZWZpbmVkKENPTkZJR19BUkNIX1JQQykpCisgICAgKGRlZmluZWQoQ09ORklHX0FSTSkgJiYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfQVRLQkQpICYmICFkZWZpbmVkKENPTkZJR19BUkNIX1JQQykpIHx8XAorICAgIGRlZmluZWQoQ09ORklHX0FWUjMyKQogCiAjZGVmaW5lIEhXX1JBVyhkZXYpICh0ZXN0X2JpdChFVl9NU0MsIGRldi0+ZXZiaXQpICYmIHRlc3RfYml0KE1TQ19SQVcsIGRldi0+bXNjYml0KSAmJlwKIAkJCSgoZGV2KS0+aWQuYnVzdHlwZSA9PSBCVVNfSTgwNDIpICYmICgoZGV2KS0+aWQudmVuZG9yID09IDB4MDAwMSkgJiYgKChkZXYpLT5pZC5wcm9kdWN0ID09IDB4MDAwMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWlzYy5jIGIvZHJpdmVycy9jaGFyL21pc2MuYwppbmRleCBhMzkxMDFmLi40ZDA1OGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci9taXNjLmMKQEAgLTIzMiw5ICsyMzIsOCBAQAogfQogCiAvKioKLSAqCV9fbWlzY19kZXJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlCisgKgltaXNjX2RlcmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgbWlzY2VsbGFuZW91cyBkZXZpY2UKICAqCUBtaXNjOiBkZXZpY2UgdG8gdW5yZWdpc3RlcgotICoJQHN1c3BlbmRlZDogdG8gYmUgc2V0IGlmIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZQogICoKICAqCVVucmVnaXN0ZXIgYSBtaXNjZWxsYW5lb3VzIGRldmljZSB0aGF0IHdhcyBwcmV2aW91c2x5CiAgKglzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIG1pc2NfcmVnaXN0ZXIoKS4gU3VjY2VzcwpAQCAtMjQyLDcgKzI0MSw3IEBACiAgKglpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgKi8KIAotaW50IF9fbWlzY19kZXJlZ2lzdGVyKHN0cnVjdCBtaXNjZGV2aWNlICptaXNjLCBib29sIHN1c3BlbmRlZCkKK2ludCBtaXNjX2RlcmVnaXN0ZXIoc3RydWN0IG1pc2NkZXZpY2UgKm1pc2MpCiB7CiAJaW50IGkgPSBtaXNjLT5taW5vcjsKIApAQCAtMjUxLDExICsyNTAsNyBAQAogCiAJbXV0ZXhfbG9jaygmbWlzY19tdHgpOwogCWxpc3RfZGVsKCZtaXNjLT5saXN0KTsKLQlpZiAoc3VzcGVuZGVkKQotCQlkZXN0cm95X3N1c3BlbmRlZF9kZXZpY2UobWlzY19jbGFzcywKLQkJCQkJTUtERVYoTUlTQ19NQUpPUiwgbWlzYy0+bWlub3IpKTsKLQllbHNlCi0JCWRldmljZV9kZXN0cm95KG1pc2NfY2xhc3MsIE1LREVWKE1JU0NfTUFKT1IsIG1pc2MtPm1pbm9yKSk7CisJZGV2aWNlX2Rlc3Ryb3kobWlzY19jbGFzcywgTUtERVYoTUlTQ19NQUpPUiwgbWlzYy0+bWlub3IpKTsKIAlpZiAoaSA8IERZTkFNSUNfTUlOT1JTICYmIGk+MCkgewogCQltaXNjX21pbm9yc1tpPj4zXSAmPSB+KDEgPDwgKG1pc2MtPm1pbm9yICYgNykpOwogCX0KQEAgLTI2NCw3ICsyNTksNyBAQAogfQogCiBFWFBPUlRfU1lNQk9MKG1pc2NfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChfX21pc2NfZGVyZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKG1pc2NfZGVyZWdpc3Rlcik7CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pc2NfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL213YXZlL3RwMzc4MGkuYyBiL2RyaXZlcnMvY2hhci9td2F2ZS90cDM3ODBpLmMKaW5kZXggZjI4Mjk3Ni4uMzdmZTgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL213YXZlL3RwMzc4MGkuYworKysgYi9kcml2ZXJzL2NoYXIvbXdhdmUvdHAzNzgwaS5jCkBAIC05NywyMCArOTcsMjQgQEAKIAogc3RhdGljIGlycXJldHVybl90IFVhcnRJbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogeworCWludCBpcnFubyA9IChpbnQpKHVuc2lnbmVkIGxvbmcpIGRldl9pZDsKKwogCVBSSU5US18zKFRSQUNFX1RQMzc4MEksCi0JCSJ0cDM3ODBpOjpVYXJ0SW50ZXJydXB0IGVudHJ5IGlycSAleCBkZXZfaWQgJXBcbiIsIGlycSwgZGV2X2lkKTsKKwkJInRwMzc4MGk6OlVhcnRJbnRlcnJ1cHQgZW50cnkgaXJxICV4IGRldl9pZCAlcFxuIiwgaXJxbm8sIGRldl9pZCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgRHNwSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwlpbnQgaXJxbm8gPSAoaW50KSh1bnNpZ25lZCBsb25nKSBkZXZfaWQ7CisKIAlwTVdBVkVfREVWSUNFX0RBVEEgcERydkRhdGEgPSAmbXdhdmVfc19tZGQ7CiAJRFNQXzM3ODBJX0NPTkZJR19TRVRUSU5HUyAqcFNldHRpbmdzID0gJnBEcnZEYXRhLT5yQkREYXRhLnJEc3BTZXR0aW5nczsKIAl1bnNpZ25lZCBzaG9ydCB1c0RzcEJhc2VJTyA9IHBTZXR0aW5ncy0+dXNEc3BCYXNlSU87CiAJdW5zaWduZWQgc2hvcnQgdXNJUENTb3VyY2UgPSAwLCB1c0lzb2xhdGlvbk1hc2ssIHVzUENOdW07CiAKIAlQUklOVEtfMyhUUkFDRV9UUDM3ODBJLAotCQkidHAzNzgwaTo6RHNwSW50ZXJydXB0IGVudHJ5IGlycSAleCBkZXZfaWQgJXBcbiIsIGlycSwgZGV2X2lkKTsKKwkJInRwMzc4MGk6OkRzcEludGVycnVwdCBlbnRyeSBpcnEgJXggZGV2X2lkICVwXG4iLCBpcnFubywgZGV2X2lkKTsKIAogCWlmIChkc3AzNzgwSV9HZXRJUENTb3VyY2UodXNEc3BCYXNlSU8sICZ1c0lQQ1NvdXJjZSkgPT0gMCkgewogCQlQUklOVEtfMihUUkFDRV9UUDM3ODBJLApAQCAtMzYxLDE0ICszNjUsMTYgQEAKIAlwU2V0dGluZ3MtPmJQbGxCeXBhc3MgPSBUUF9DRkdfUGxsQnlwYXNzOwogCXBTZXR0aW5ncy0+dXNDaGlwbGV0RW5hYmxlID0gVFBfQ0ZHX0NoaXBsZXRFbmFibGU7CiAKLQlpZiAocmVxdWVzdF9pcnEocFNldHRpbmdzLT51c1VhcnRJcnEsICZVYXJ0SW50ZXJydXB0LCAwLCAibXdhdmVfdWFydCIsIE5VTEwpKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBTZXR0aW5ncy0+dXNVYXJ0SXJxLCAmVWFydEludGVycnVwdCwgMCwgIm13YXZlX3VhcnQiLAorCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZykgcFNldHRpbmdzLT51c1VhcnRJcnEpKSB7CiAJCVBSSU5US19FUlJPUihLRVJOX0VSUl9NV0FWRSAidHAzNzgwaTo6dHAzNzgwSV9FbmFibGVEU1A6IEVycm9yOiBDb3VsZCBub3QgZ2V0IFVBUlQgSVJRICV4XG4iLCBwU2V0dGluZ3MtPnVzVWFydElycSk7CiAJCWdvdG8gZXhpdF9jbGVhbnVwOwogCX0gZWxzZSB7CQkvKiBubyBjb25mbGljdCBqdXN0IHJlbGVhc2UgKi8KIAkJZnJlZV9pcnEocFNldHRpbmdzLT51c1VhcnRJcnEsIE5VTEwpOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShwU2V0dGluZ3MtPnVzRHNwSXJxLCAmRHNwSW50ZXJydXB0LCAwLCAibXdhdmVfMzc4MGkiLCBOVUxMKSkgeworCWlmIChyZXF1ZXN0X2lycShwU2V0dGluZ3MtPnVzRHNwSXJxLCAmRHNwSW50ZXJydXB0LCAwLCAibXdhdmVfMzc4MGkiLAorCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZykgcFNldHRpbmdzLT51c0RzcElycSkpIHsKIAkJUFJJTlRLX0VSUk9SKCJ0cDM3ODBpOjp0cDM3ODBJX0VuYWJsZURTUDogRXJyb3I6IENvdWxkIG5vdCBnZXQgMzc4MGkgSVJRICV4XG4iLCBwU2V0dGluZ3MtPnVzRHNwSXJxKTsKIAkJZ290byBleGl0X2NsZWFudXA7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3R0eS5jIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKaW5kZXggNDZiMmExYy4uMGMwOTQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25fdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKQEAgLTExODMsNyArMTE4Myw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotZXh0ZXJuIHNzaXplX3QgcmVkaXJlY3RlZF90dHlfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLAorZXh0ZXJuIHNzaXplX3QgcmVkaXJlY3RlZF90dHlfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwKIAkJCQkJCQlzaXplX3QsIGxvZmZfdCAqKTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbm96b21pLmMgYi9kcml2ZXJzL2NoYXIvbm96b21pLmMKaW5kZXggZGZhYWIyMy4uNmE2ODQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25vem9taS5jCisrKyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwpAQCAtMTkwLDYgKzE5MCwxNCBAQAogCUYzMl84ID0gODE5MiwJLyogMzA3MiBieXRlcyBkb3dubC4gKyAxMDI0IGJ5dGVzIHVwbGluayAqIDIgLT4gODE5MiAqLwogfTsKIAorLyogSW5pdGlhbGl6YXRpb24gc3RhdGVzIGEgY2FyZCBjYW4gYmUgaW4gKi8KK2VudW0gY2FyZF9zdGF0ZSB7CisJTk9aT01JX1NUQVRFX1VLTk9XTgk9IDAsCisJTk9aT01JX1NUQVRFX0VOQUJMRUQJPSAxLAkvKiBwY2kgZGV2aWNlIGVuYWJsZWQgKi8KKwlOT1pPTUlfU1RBVEVfQUxMT0NBVEVECT0gMiwJLyogY29uZmlnIHNldHVwIGRvbmUgKi8KKwlOT1pPTUlfU1RBVEVfUkVBRFkJPSAzLAkvKiBmbG93Y29udHJvbHMgcmVjZWl2ZWQgKi8KK307CisKIC8qIFR3byBkaWZmZXJlbnQgdG9nZ2xlIGNoYW5uZWxzIGV4aXN0ICovCiBlbnVtIGNoYW5uZWxfdHlwZSB7CiAJQ0hfQSA9IDAsCkBAIC0zODUsNiArMzkzLDcgQEAKIAlzcGlubG9ja190IHNwaW5fbXV0ZXg7CS8qIHNlY3VyZXMgYWNjZXNzIHRvIHJlZ2lzdGVycyBhbmQgdHR5ICovCiAKIAl1bnNpZ25lZCBpbnQgaW5kZXhfc3RhcnQ7CisJZW51bSBjYXJkX3N0YXRlIHN0YXRlOwogCXUzMiBvcGVuX3R0eXM7CiB9OwogCkBAIC00MjksNyArNDM4LDcgQEAKIAkJCXUzMiBzaXplX2J5dGVzKQogewogCXUzMiBpID0gMDsKLQljb25zdCB1MzIgKnB0ciA9IChfX2ZvcmNlIHUzMiAqKSBtZW1fYWRkcl9zdGFydDsKKwljb25zdCB1MzIgX19pb21lbSAqcHRyID0gbWVtX2FkZHJfc3RhcnQ7CiAJdTE2ICpidWYxNjsKIAogCWlmICh1bmxpa2VseSghcHRyIHx8ICFidWYpKQpAQCAtNDM5LDExICs0NDgsMTEgQEAKIAlzd2l0Y2ggKHNpemVfYnl0ZXMpIHsKIAljYXNlIDI6CS8qIDIgYnl0ZXMgKi8KIAkJYnVmMTYgPSAodTE2ICopIGJ1ZjsKLQkJKmJ1ZjE2ID0gX19sZTE2X3RvX2NwdShyZWFkdygodm9pZCBfX2lvbWVtICopcHRyKSk7CisJCSpidWYxNiA9IF9fbGUxNl90b19jcHUocmVhZHcocHRyKSk7CiAJCWdvdG8gb3V0OwogCQlicmVhazsKIAljYXNlIDQ6CS8qIDQgYnl0ZXMgKi8KLQkJKihidWYpID0gX19sZTMyX3RvX2NwdShyZWFkbCgodm9pZCBfX2lvbWVtICopcHRyKSk7CisJCSooYnVmKSA9IF9fbGUzMl90b19jcHUocmVhZGwocHRyKSk7CiAJCWdvdG8gb3V0OwogCQlicmVhazsKIAl9CkBAIC00NTIsMTEgKzQ2MSwxMSBAQAogCQlpZiAoc2l6ZV9ieXRlcyAtIGkgPT0gMikgewogCQkJLyogSGFuZGxlIDIgYnl0ZXMgaW4gdGhlIGVuZCAqLwogCQkJYnVmMTYgPSAodTE2ICopIGJ1ZjsKLQkJCSooYnVmMTYpID0gX19sZTE2X3RvX2NwdShyZWFkdygodm9pZCBfX2lvbWVtICopcHRyKSk7CisJCQkqKGJ1ZjE2KSA9IF9fbGUxNl90b19jcHUocmVhZHcocHRyKSk7CiAJCQlpICs9IDI7CiAJCX0gZWxzZSB7CiAJCQkvKiBSZWFkIDQgYnl0ZXMgKi8KLQkJCSooYnVmKSA9IF9fbGUzMl90b19jcHUocmVhZGwoKHZvaWQgX19pb21lbSAqKXB0cikpOworCQkJKihidWYpID0gX19sZTMyX3RvX2NwdShyZWFkbChwdHIpKTsKIAkJCWkgKz0gNDsKIAkJfQogCQlidWYrKzsKQEAgLTQ3NSw3ICs0ODQsNyBAQAogCQkJdTMyIHNpemVfYnl0ZXMpCiB7CiAJdTMyIGkgPSAwOwotCXUzMiAqcHRyID0gKF9fZm9yY2UgdTMyICopIG1lbV9hZGRyX3N0YXJ0OworCXUzMiBfX2lvbWVtICpwdHIgPSBtZW1fYWRkcl9zdGFydDsKIAljb25zdCB1MTYgKmJ1ZjE2OwogCiAJaWYgKHVubGlrZWx5KCFwdHIgfHwgIWJ1ZikpCkBAIC00ODUsNyArNDk0LDcgQEAKIAlzd2l0Y2ggKHNpemVfYnl0ZXMpIHsKIAljYXNlIDI6CS8qIDIgYnl0ZXMgKi8KIAkJYnVmMTYgPSAoY29uc3QgdTE2ICopYnVmOwotCQl3cml0ZXcoX19jcHVfdG9fbGUxNigqYnVmMTYpLCAodm9pZCBfX2lvbWVtICopcHRyKTsKKwkJd3JpdGV3KF9fY3B1X3RvX2xlMTYoKmJ1ZjE2KSwgcHRyKTsKIAkJcmV0dXJuIDI7CiAJCWJyZWFrOwogCWNhc2UgMTogLyoKQEAgLTQ5Myw3ICs1MDIsNyBAQAogCQkgKiBzbyBmYWxsaW5nIHRocm91Z2guLgogCQkgKi8KIAljYXNlIDQ6IC8qIDQgYnl0ZXMgKi8KLQkJd3JpdGVsKF9fY3B1X3RvX2xlMzIoKmJ1ZiksICh2b2lkIF9faW9tZW0gKilwdHIpOworCQl3cml0ZWwoX19jcHVfdG9fbGUzMigqYnVmKSwgcHRyKTsKIAkJcmV0dXJuIDQ7CiAJCWJyZWFrOwogCX0KQEAgLTUwMiwxMSArNTExLDExIEBACiAJCWlmIChzaXplX2J5dGVzIC0gaSA9PSAyKSB7CiAJCQkvKiAyIGJ5dGVzICovCiAJCQlidWYxNiA9IChjb25zdCB1MTYgKilidWY7Ci0JCQl3cml0ZXcoX19jcHVfdG9fbGUxNigqYnVmMTYpLCAodm9pZCBfX2lvbWVtICopcHRyKTsKKwkJCXdyaXRldyhfX2NwdV90b19sZTE2KCpidWYxNiksIHB0cik7CiAJCQlpICs9IDI7CiAJCX0gZWxzZSB7CiAJCQkvKiA0IGJ5dGVzICovCi0JCQl3cml0ZWwoX19jcHVfdG9fbGUzMigqYnVmKSwgKHZvaWQgX19pb21lbSAqKXB0cik7CisJCQl3cml0ZWwoX19jcHVfdG9fbGUzMigqYnVmKSwgcHRyKTsKIAkJCWkgKz0gNDsKIAkJfQogCQlidWYrKzsKQEAgLTY4Niw2ICs2OTUsNyBAQAogCQlkYy0+bGFzdF9pZXIgPSBkYy0+bGFzdF9pZXIgfCBDVFJMX0RMOwogCQl3cml0ZXcoZGMtPmxhc3RfaWVyLCBkYy0+cmVnX2llcik7CiAKKwkJZGMtPnN0YXRlID0gTk9aT01JX1NUQVRFX0FMTE9DQVRFRDsKIAkJZGV2X2luZm8oJmRjLT5wZGV2LT5kZXYsICJJbml0aWFsaXphdGlvbiBPSyFcbiIpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC05NDQsNiArOTU0LDE0IEBACiAJY2FzZSBDVFJMX0FQUDI6CiAJCXBvcnQgPSBQT1JUX0FQUDI7CiAJCWVuYWJsZV9pZXIgPSBBUFAyX0RMOworCQlpZiAoZGMtPnN0YXRlID09IE5PWk9NSV9TVEFURV9BTExPQ0FURUQpIHsKKwkJCS8qCisJCQkgKiBBZnRlciBjYXJkIGluaXRpYWxpemF0aW9uIHRoZSBmbG93IGNvbnRyb2wKKwkJCSAqIHJlY2VpdmVkIGZvciBBUFAyIGlzIGFsd2F5cyB0aGUgbGFzdAorCQkJICovCisJCQlkYy0+c3RhdGUgPSBOT1pPTUlfU1RBVEVfUkVBRFk7CisJCQlkZXZfaW5mbygmZGMtPnBkZXYtPmRldiwgIkRldmljZSBSRUFEWSFcbiIpOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmRjLT5wZGV2LT5kZXYsCkBAIC0xMzY2LDIyICsxMzg0LDEyIEBACiAKIAlkYy0+cGRldiA9IHBkZXY7CiAKLQkvKiBGaW5kIG91dCB3aGF0IGNhcmQgdHlwZSBpdCBpcyAqLwotCW5vem9taV9nZXRfY2FyZF90eXBlKGRjKTsKLQogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRjLT5wZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgUENJIERldmljZVxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCi0Jc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGMtPnBkZXYsIDApOwotCWlmIChzdGFydCA9PSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIEkvTyBhZGRyZXNzIGZvciBjYXJkIGRldGVjdGVkXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnJfZGlzYWJsZV9kZXZpY2U7Ci0JfQotCiAJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkYy0+cGRldiwgTk9aT01JX05BTUUpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSS9PIGFkZHJlc3MgMHglMDR4IGFscmVhZHkgaW4gdXNlXG4iLApAQCAtMTM4OSw2ICsxMzk3LDE2IEBACiAJCWdvdG8gZXJyX2Rpc2FibGVfZGV2aWNlOwogCX0KIAorCXN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRjLT5wZGV2LCAwKTsKKwlpZiAoc3RhcnQgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJL08gYWRkcmVzcyBmb3IgY2FyZCBkZXRlY3RlZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3JlbF9yZWdzOworCX0KKworCS8qIEZpbmQgb3V0IHdoYXQgY2FyZCB0eXBlIGl0IGlzICovCisJbm96b21pX2dldF9jYXJkX3R5cGUoZGMpOworCiAJZGMtPmJhc2VfYWRkciA9IGlvcmVtYXAoc3RhcnQsIGRjLT5jYXJkX3R5cGUpOwogCWlmICghZGMtPmJhc2VfYWRkcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gbWFwIGNhcmQgTU1JT1xuIik7CkBAIC0xNDI1LDYgKzE0NDMsMTQgQEAKIAlkYy0+aW5kZXhfc3RhcnQgPSBuZGV2X2lkeCAqIE1BWF9QT1JUOwogCW5kZXZzW25kZXZfaWR4XSA9IGRjOwogCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRjKTsKKworCS8qIEVuYWJsZSBSRVNFVCBpbnRlcnJ1cHQgKi8KKwlkYy0+bGFzdF9pZXIgPSBSRVNFVDsKKwlpb3dyaXRlMTYoZGMtPmxhc3RfaWVyLCBkYy0+cmVnX2llcik7CisKKwlkYy0+c3RhdGUgPSBOT1pPTUlfU1RBVEVfRU5BQkxFRDsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfUE9SVDsgaSsrKSB7CiAJCW11dGV4X2luaXQoJmRjLT5wb3J0W2ldLnR0eV9zZW0pOwogCQlkYy0+cG9ydFtpXS50dHlfb3Blbl9jb3VudCA9IDA7CkBAIC0xNDMzLDEyICsxNDU5LDYgQEAKIAkJCQkJCQkmcGRldi0+ZGV2KTsKIAl9CiAKLQkvKiBFbmFibGUgIFJFU0VUIGludGVycnVwdC4gKi8KLQlkYy0+bGFzdF9pZXIgPSBSRVNFVDsKLQl3cml0ZXcoZGMtPmxhc3RfaWVyLCBkYy0+cmVnX2llcik7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGMpOwotCiAJcmV0dXJuIDA7CiAKIGVycl9mcmVlX3NidWY6CkBAIC0xNTUzLDcgKzE1NzMsNyBAQAogCXN0cnVjdCBub3pvbWkgKmRjID0gZ2V0X2RjX2J5X3R0eSh0dHkpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIXBvcnQgfHwgIWRjKQorCWlmICghcG9ydCB8fCAhZGMgfHwgZGMtPnN0YXRlICE9IE5PWk9NSV9TVEFURV9SRUFEWSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwb3J0LT50dHlfc2VtKSkKQEAgLTE3MTYsNiArMTczNiwxMCBAQAogc3RhdGljIGludCBudHR5X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKKwlzdHJ1Y3Qgbm96b21pICpkYyA9IGdldF9kY19ieV90dHkodHR5KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRjLT5zcGluX211dGV4LCBmbGFncyk7CiAJaWYgKHNldCAmIFRJT0NNX1JUUykKIAkJc2V0X3J0cyh0dHksIDEpOwogCWVsc2UgaWYgKGNsZWFyICYgVElPQ01fUlRTKQpAQCAtMTcyNSw2ICsxNzQ5LDcgQEAKIAkJc2V0X2R0cih0dHksIDEpOwogCWVsc2UgaWYgKGNsZWFyICYgVElPQ01fRFRSKQogCQlzZXRfZHRyKHR0eSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc2Miw3ICsxNzg3LDcgQEAKIAlpY291bnQuYnJrID0gY25vdy5icms7CiAJaWNvdW50LmJ1Zl9vdmVycnVuID0gY25vdy5idWZfb3ZlcnJ1bjsKIAotCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmljb3VudCwgc2l6ZW9mKGljb3VudCkpOworCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmljb3VudCwgc2l6ZW9mKGljb3VudCkpID8gLUVGQVVMVCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgbnR0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9uZXR3b3JrLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbmV0d29yay5jCmluZGV4IGZmMzUyMzAuLmQ3OTNlNjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbmV0d29yay5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9uZXR3b3JrLmMKQEAgLTM3NywxMyArMzc3LDE2IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9BU1NPQ0lBVEVEX1RUWVM7IGkrKykgewogCQlzdHJ1Y3QgaXB3X3R0eSAqdHR5ID0gbmV0d29yay0+YXNzb2NpYXRlZF90dHlzW2NoYW5uZWxfaWR4XVtpXTsKIAorCQlpZiAoIXR0eSkKKwkJCWNvbnRpbnVlOworCiAJCS8qCiAJCSAqIElmIGl0J3MgYXNzb2NpYXRlZCB3aXRoIGEgdHR5IChvdGhlciB0aGFuIHRoZSBSQVMgY2hhbm5lbAogCQkgKiB3aGVuIHdlJ3JlIG9ubGluZSksIHRoZW4gc2VuZCB0aGUgZGF0YSB0byB0aGF0IHR0eS4gIFRoZSBSQVMKIAkJICogY2hhbm5lbCdzIGRhdGEgaXMgaGFuZGxlZCBhYm92ZSAtIGl0IGFsd2F5cyBnb2VzIHRocm91Z2gKIAkJICogcHBwX2dlbmVyaWMuCiAJCSAqLwotCQlpZiAodHR5ICYmIGNoYW5uZWxfaWR4ID09IElQV19DSEFOTkVMX1JBUworCQlpZiAoY2hhbm5lbF9pZHggPT0gSVBXX0NIQU5ORUxfUkFTCiAJCQkJJiYgKG5ldHdvcmstPnJhc19jb250cm9sX2xpbmVzICYKIAkJCQkJSVBXX0NPTlRST0xfTElORV9EQ0QpICE9IDAKIAkJCQkmJiBpcHdpcmVsZXNzX3R0eV9pc19tb2RlbSh0dHkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKaW5kZXggMjc5ZmY1MC4uNGU4NGQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwpAQCAtMTIyNSwxNyArMTIyNSwxNSBAQAogICogaXJxICAgICBpbnRlcnJ1cHQgbnVtYmVyIHRoYXQgY2F1c2VkIGludGVycnVwdAogICogZGV2X2lkICBkZXZpY2UgSUQgc3VwcGxpZWQgZHVyaW5nIGludGVycnVwdCByZWdpc3RyYXRpb24KICAqLwotc3RhdGljIGlycXJldHVybl90IG1nc2xwY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IG1nc2xwY19pc3IoaW50IGR1bW15LCB2b2lkICpkZXZfaWQpCiB7Ci0JTUdTTFBDX0lORk8gKiBpbmZvID0gKE1HU0xQQ19JTkZPICopZGV2X2lkOworCU1HU0xQQ19JTkZPICppbmZvID0gZGV2X2lkOwogCXVuc2lnbmVkIHNob3J0IGlzcjsKIAl1bnNpZ25lZCBjaGFyIGdpcywgcGlzOwogCWludCBjb3VudD0wOwogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUikKLQkJcHJpbnRrKCJtZ3NscGNfaXNyKCVkKSBlbnRyeS5cbiIsIGlycSk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gSVJRX05PTkU7CisJCXByaW50aygibWdzbHBjX2lzciglZCkgZW50cnkuXG4iLCBpbmZvLT5pcnFfbGV2ZWwpOwogCiAJaWYgKCEoaW5mby0+cF9kZXYtPl9sb2NrZWQpKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMzI3LDcgKzEzMjUsNyBAQAogCiAJaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUikKIAkJcHJpbnRrKCIlcyglZCk6bWdzbHBjX2lzciglZClleGl0LlxuIiwKLQkJICAgICAgIF9fRklMRV9fLF9fTElORV9fLGlycSk7CisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIGluZm8tPmlycV9sZXZlbCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCmluZGV4IGVjYTJiOTUuLmQ5NTZkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuZXJpY19zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKaW5kZXggNzMyMWQwMC4uYmYzNjk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY3RybC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKaW5kZXggN2NlNzc2MS4uZDhlYjJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwppbmRleCAwNzk0ODQ0Li5hZGQxNzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2ludHIuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCmluZGV4IGViYzc2MzQuLjQ3MzRlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYwppbmRleCBiYjQ5OGQyLi5kYTI3NmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BhcmFtLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYwppbmRleCBhOTlmM2Q5Li44NTA5MWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3JvdXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9yb3V0ZS5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYwppbmRleCA5OTExMTljLi4yYjI0NDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90YWJsZS5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KQEAgLTQyNSw4ICs0MjQsMTAgQEAKIAogCQlNYXBQID0gJnAtPlJJT0Nvbm5lY3RUYWJsZVtOZXh0KytdOwogCQlNYXBQLT5Ib3N0VW5pcXVlTnVtID0gSG9zdFAtPlVuaXF1ZU51bTsKLQkJaWYgKChIb3N0UC0+RmxhZ3MgJiBSVU5fU1RBVEUpICE9IFJDX1JVTk5JTkcpCisJCWlmICgoSG9zdFAtPkZsYWdzICYgUlVOX1NUQVRFKSAhPSBSQ19SVU5OSU5HKSB7CisJCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmSG9zdFAtPkhvc3RMb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKKwkJfQogCQlNYXBQLT5SdGFVbmlxdWVOdW0gPSAwOwogCQlNYXBQLT5JRCA9IDA7CiAJCU1hcFAtPkZsYWdzID0gU0xPVF9JTl9VU0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwppbmRleCBhNGYwYjFlLi4xY2I4NTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgpAQCAtMzE5LDYgKzMxOCw3IEBACiAJCQlQb3J0UC0+U3RhdGUgfD0gUklPX1dPUEVOOwogCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7CiAJCQlpZiAoUklPRGVsYXkoUG9ydFAsIEhVTkRSRURfTVMpID09IFJJT19GQUlMKSB7CisJCQkJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQkJCS8qCiAJCQkJICoqIEFDVElPTjogdmVyaWZ5IHRoYXQgdGhpcyBpcyBhIGdvb2QgdGhpbmcKIAkJCQkgKiogdG8gZG8gaGVyZS4gLS0gPz8/CkBAIC0zMzQsNiArMzM0LDcgQEAKIAkJCQlmdW5jX2V4aXQoKTsKIAkJCQlyZXR1cm4gLUVJTlRSOwogCQkJfQorCQkJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQl9CiAJCVBvcnRQLT5TdGF0ZSAmPSB+UklPX1dPUEVOOwogCX0KQEAgLTQ5Myw2ICs0OTQsNyBAQAogCiAJaWYgKFJJT1Nob3J0Q29tbWFuZChwLCBQb3J0UCwgQ0xPU0UsIDEsIDApID09IFJJT19GQUlMKSB7CiAJCVJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIEZDTE9TRSk7CisJCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAkJZ290byBjbG9zZV9lbmQ7CiAJfQogCkBAIC01MDgsNiArNTEwLDcgQEAKIAogCQkJaWYgKHAtPlJJT0hhbHRlZCkgewogCQkJCVJJT0NsZWFyVXAoUG9ydFApOworCQkJCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAkJCQlnb3RvIGNsb3NlX2VuZDsKIAkJCX0KIAkJCWlmIChSSU9EZWxheShQb3J0UCwgSFVORFJFRF9NUykgPT0gUklPX0ZBSUwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaXNjb204LmMgYi9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCmluZGV4IDhmYzRmZTQuLjNmOWQwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaXNjb204LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwpAQCAtMTYyMCwxNCArMTYyMCw4IEBACiAKIHN0YXRpYyB2b2lkIHJjX3JlbGVhc2VfZHJpdmVycyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKLQogCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihyaXNjb21fZHJpdmVyKTsKIAlwdXRfdHR5X2RyaXZlcihyaXNjb21fZHJpdmVyKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpc2NvbV9sb2NrLCBmbGFncyk7CiB9CiAKICNpZm5kZWYgTU9EVUxFCkBAIC0xNzE1LDcgKzE3MDksNyBAQAogCiAJaWYgKGlvYmFzZSB8fCBpb2Jhc2UxIHx8IGlvYmFzZTIgfHwgaW9iYXNlMykgewogCQlmb3IoaSA9IDA7IGkgPCBSQ19OQk9BUkQ7IGkrKykKLQkJCXJjX2JvYXJkWzBdLmJhc2UgPSAwOworCQkJcmNfYm9hcmRbaV0uYmFzZSA9IDA7CiAJfQogCiAJaWYgKGlvYmFzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yb2NrZXQuYyBiL2RyaXZlcnMvY2hhci9yb2NrZXQuYwppbmRleCA3MmYyODkyLi5mNTg1YmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKKysrIGIvZHJpdmVycy9jaGFyL3JvY2tldC5jCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTMxMiw3ICsxMzEzLDcgQEAKIAlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCiAJCWluZm8tPmNoYW5uZWwuVHhDb250cm9sWzNdICY9IH5TRVRfRFRSOwogCi0Jc091dERXKGluZm8tPmNoYW5uZWwuSW5kZXhBZGRyLCAqKERXb3JkX3QgKikgJiAoaW5mby0+Y2hhbm5lbC5UeENvbnRyb2xbMF0pKTsKKwlvdXQzMihpbmZvLT5jaGFubmVsLkluZGV4QWRkciwgaW5mby0+Y2hhbm5lbC5UeENvbnRyb2wpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzQ4LDcgKzE3NDksNyBAQAogCiAJLyogIFdyaXRlIHJlbWFpbmluZyBkYXRhIGludG8gdGhlIHBvcnQncyB4bWl0X2J1ZiAqLwogCXdoaWxlICgxKSB7Ci0JCWlmIChpbmZvLT50dHkgPT0gMCkJLyogICBTZWVtaW5nbHkgb2JsaWdhdG9yeSBjaGVjay4uLiAqLworCQlpZiAoIWluZm8tPnR0eSkJLyogICBTZWVtaW5nbHkgb2JsaWdhdG9yeSBjaGVjay4uLiAqLwogCQkJZ290byBlbmQ7CiAKIAkJYyA9IG1pbihjb3VudCwgbWluKFhNSVRfQlVGX1NJWkUgLSBpbmZvLT54bWl0X2NudCAtIDEsIFhNSVRfQlVGX1NJWkUgLSBpbmZvLT54bWl0X2hlYWQpKTsKQEAgLTI3OTgsNyArMjc5OSw3IEBACiAJc3RhdGljIEJ5dGVfdCBSWzRdID0geyAweDAwLCAweDAwLCAweDM0LCAweDEyIH07CiAKIAkvKiB3cml0ZSB0byBjaGFuIDAgU1JBTSAqLwotCXNPdXREVygoRFdvcmRJT190KSBpbyArIF9JTkRYX0FERFIsICooKERXb3JkX3QgKikgJiBSWzBdKSk7CisJb3V0MzIoKERXb3JkSU9fdCkgaW8gKyBfSU5EWF9BRERSLCBSKTsKIAlzT3V0VyhpbyArIF9JTkRYX0FERFIsIDApOwkvKiByZWFkIGZyb20gU1JBTSwgY2hhbiAwICovCiAJeCA9IHNJblcoaW8gKyBfSU5EWF9EQVRBKTsKIAlzT3V0VyhpbyArIF9JTkRYX0FERFIsIDB4NDAwMCk7CS8qIHJlYWQgZnJvbSBTUkFNLCBjaGFuIDQgKi8KQEAgLTI4NjQsNyArMjg2NSw3IEBACiAJCVJbMV0gPSBSRGF0YVtpICsgMV0gKyAweDEwICogQ2hhbk51bTsKIAkJUlsyXSA9IFJEYXRhW2kgKyAyXTsKIAkJUlszXSA9IFJEYXRhW2kgKyAzXTsKLQkJc091dERXKENoUC0+SW5kZXhBZGRyLCAqKChEV29yZF90ICopICYgUlswXSkpOworCQlvdXQzMihDaFAtPkluZGV4QWRkciwgUik7CiAJfQogCiAJQ2hSID0gQ2hQLT5SOwpAQCAtMjg4Nyw0MyArMjg4OCw0MyBAQAogCUNoUC0+QmF1ZERpdlsxXSA9IChCeXRlX3QpICgoQ2hPZmYgKyBfQkFVRCkgPj4gOCk7CiAJQ2hQLT5CYXVkRGl2WzJdID0gKEJ5dGVfdCkgYnJkOTYwMDsKIAlDaFAtPkJhdWREaXZbM10gPSAoQnl0ZV90KSAoYnJkOTYwMCA+PiA4KTsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+QmF1ZERpdlswXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIENoUC0+QmF1ZERpdik7CiAKIAlDaFAtPlR4Q29udHJvbFswXSA9IChCeXRlX3QpIChDaE9mZiArIF9UWF9DVFJMKTsKIAlDaFAtPlR4Q29udHJvbFsxXSA9IChCeXRlX3QpICgoQ2hPZmYgKyBfVFhfQ1RSTCkgPj4gOCk7CiAJQ2hQLT5UeENvbnRyb2xbMl0gPSAwOwogCUNoUC0+VHhDb250cm9sWzNdID0gMDsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+VHhDb250cm9sWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5UeENvbnRyb2wpOwogCiAJQ2hQLT5SeENvbnRyb2xbMF0gPSAoQnl0ZV90KSAoQ2hPZmYgKyBfUlhfQ1RSTCk7CiAJQ2hQLT5SeENvbnRyb2xbMV0gPSAoQnl0ZV90KSAoKENoT2ZmICsgX1JYX0NUUkwpID4+IDgpOwogCUNoUC0+UnhDb250cm9sWzJdID0gMDsKIAlDaFAtPlJ4Q29udHJvbFszXSA9IDA7Ci0Jc091dERXKENoUC0+SW5kZXhBZGRyLCAqKERXb3JkX3QgKikgJiBDaFAtPlJ4Q29udHJvbFswXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIENoUC0+UnhDb250cm9sKTsKIAogCUNoUC0+VHhFbmFibGVzWzBdID0gKEJ5dGVfdCkgKENoT2ZmICsgX1RYX0VOQkxTKTsKIAlDaFAtPlR4RW5hYmxlc1sxXSA9IChCeXRlX3QpICgoQ2hPZmYgKyBfVFhfRU5CTFMpID4+IDgpOwogCUNoUC0+VHhFbmFibGVzWzJdID0gMDsKIAlDaFAtPlR4RW5hYmxlc1szXSA9IDA7Ci0Jc091dERXKENoUC0+SW5kZXhBZGRyLCAqKERXb3JkX3QgKikgJiBDaFAtPlR4RW5hYmxlc1swXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIENoUC0+VHhFbmFibGVzKTsKIAogCUNoUC0+VHhDb21wYXJlWzBdID0gKEJ5dGVfdCkgKENoT2ZmICsgX1RYQ01QMSk7CiAJQ2hQLT5UeENvbXBhcmVbMV0gPSAoQnl0ZV90KSAoKENoT2ZmICsgX1RYQ01QMSkgPj4gOCk7CiAJQ2hQLT5UeENvbXBhcmVbMl0gPSAwOwogCUNoUC0+VHhDb21wYXJlWzNdID0gMDsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+VHhDb21wYXJlWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5UeENvbXBhcmUpOwogCiAJQ2hQLT5UeFJlcGxhY2UxWzBdID0gKEJ5dGVfdCkgKENoT2ZmICsgX1RYUkVQMUIxKTsKIAlDaFAtPlR4UmVwbGFjZTFbMV0gPSAoQnl0ZV90KSAoKENoT2ZmICsgX1RYUkVQMUIxKSA+PiA4KTsKIAlDaFAtPlR4UmVwbGFjZTFbMl0gPSAwOwogCUNoUC0+VHhSZXBsYWNlMVszXSA9IDA7Ci0Jc091dERXKENoUC0+SW5kZXhBZGRyLCAqKERXb3JkX3QgKikgJiBDaFAtPlR4UmVwbGFjZTFbMF0pOworCW91dDMyKENoUC0+SW5kZXhBZGRyLCBDaFAtPlR4UmVwbGFjZTEpOwogCiAJQ2hQLT5UeFJlcGxhY2UyWzBdID0gKEJ5dGVfdCkgKENoT2ZmICsgX1RYUkVQMik7CiAJQ2hQLT5UeFJlcGxhY2UyWzFdID0gKEJ5dGVfdCkgKChDaE9mZiArIF9UWFJFUDIpID4+IDgpOwogCUNoUC0+VHhSZXBsYWNlMlsyXSA9IDA7CiAJQ2hQLT5UeFJlcGxhY2UyWzNdID0gMDsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+VHhSZXBsYWNlMlswXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIENoUC0+VHhSZXBsYWNlMik7CiAKIAlDaFAtPlR4RklGT1B0cnMgPSBDaE9mZiArIF9UWEZfT1VUUDsKIAlDaFAtPlR4RklGTyA9IENoT2ZmICsgX1RYX0ZJRk87CkBAIC0yOTc5LDcgKzI5ODAsNyBAQAogCVJbMV0gPSBDaFAtPlJbMV07CiAJUlsyXSA9IDB4MGE7CiAJUlszXSA9IENoUC0+UlszXTsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIFJbMF0pOworCW91dDMyKENoUC0+SW5kZXhBZGRyLCBSKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzA5NCwxMyArMzA5NSwxMyBAQAogCQkqV29yZFB0ciA9IENoUC0+VHhQcmlvQnVmOwkvKiBkYXRhIGJ5dGUgYWRkcmVzcyAqLwogCiAJCURXQnVmWzJdID0gRGF0YTsJLyogZGF0YSBieXRlIHZhbHVlICovCi0JCXNPdXREVyhJbmRleEFkZHIsICooKERXb3JkX3QgKikgKCZEV0J1ZlswXSkpKTsJLyogd3JpdGUgaXQgb3V0ICovCisJCW91dDMyKEluZGV4QWRkciwgRFdCdWYpOwkvKiB3cml0ZSBpdCBvdXQgKi8KIAogCQkqV29yZFB0ciA9IENoUC0+VHhQcmlvQ250OwkvKiBUeCBwcmlvcml0eSBjb3VudCBhZGRyZXNzICovCiAKIAkJRFdCdWZbMl0gPSBQUklfUEVORCArIDE7CS8qIGluZGljYXRlIDEgYnl0ZSBwZW5kaW5nICovCiAJCURXQnVmWzNdID0gMDsJLyogcHJpb3JpdHkgYnVmZmVyIHBvaW50ZXIgKi8KLQkJc091dERXKEluZGV4QWRkciwgKigoRFdvcmRfdCAqKSAoJkRXQnVmWzBdKSkpOwkvKiB3cml0ZSBpdCBvdXQgKi8KKwkJb3V0MzIoSW5kZXhBZGRyLCBEV0J1Zik7CS8qIHdyaXRlIGl0IG91dCAqLwogCX0gZWxzZSB7CQkvKiB3cml0ZSBpdCB0byBUeCBGSUZPICovCiAKIAkJc1dyaXRlVHhCeXRlKHNHZXRUeFJ4RGF0YUlPKENoUCksIERhdGEpOwpAQCAtMzE0NywxMSArMzE0OCwxMSBAQAogCUNoUC0+UnhDb250cm9sWzJdIHw9CiAJICAgICgoQnl0ZV90KSBGbGFncyAmIChSWElOVF9FTiB8IFNSQ0lOVF9FTiB8IE1DSU5UX0VOKSk7CiAKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+UnhDb250cm9sWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5SeENvbnRyb2wpOwogCiAJQ2hQLT5UeENvbnRyb2xbMl0gfD0gKChCeXRlX3QpIEZsYWdzICYgVFhJTlRfRU4pOwogCi0Jc091dERXKENoUC0+SW5kZXhBZGRyLCAqKERXb3JkX3QgKikgJiBDaFAtPlR4Q29udHJvbFswXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIENoUC0+VHhDb250cm9sKTsKIAogCWlmIChGbGFncyAmIENIQU5JTlRfRU4pIHsKIAkJTWFzayA9IHNJbkIoQ2hQLT5JbnRNYXNrKSB8IHNCaXRNYXBTZXRUYmxbQ2hQLT5DaGFuTnVtXTsKQEAgLTMxOTAsOSArMzE5MSw5IEBACiAKIAlDaFAtPlJ4Q29udHJvbFsyXSAmPQogCSAgICB+KChCeXRlX3QpIEZsYWdzICYgKFJYSU5UX0VOIHwgU1JDSU5UX0VOIHwgTUNJTlRfRU4pKTsKLQlzT3V0RFcoQ2hQLT5JbmRleEFkZHIsICooRFdvcmRfdCAqKSAmIENoUC0+UnhDb250cm9sWzBdKTsKKwlvdXQzMihDaFAtPkluZGV4QWRkciwgQ2hQLT5SeENvbnRyb2wpOwogCUNoUC0+VHhDb250cm9sWzJdICY9IH4oKEJ5dGVfdCkgRmxhZ3MgJiBUWElOVF9FTik7Ci0Jc091dERXKENoUC0+SW5kZXhBZGRyLCAqKERXb3JkX3QgKikgJiBDaFAtPlR4Q29udHJvbFswXSk7CisJb3V0MzIoQ2hQLT5JbmRleEFkZHIsIENoUC0+VHhDb250cm9sKTsKIAogCWlmIChGbGFncyAmIENIQU5JTlRfRU4pIHsKIAkJTWFzayA9IHNJbkIoQ2hQLT5JbnRNYXNrKSAmIHNCaXRNYXBDbHJUYmxbQ2hQLT5DaGFuTnVtXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yb2NrZXRfaW50LmggYi9kcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oCmluZGV4IGYzYTc1NzkuLmIwMWQzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yb2NrZXRfaW50LmgKKysrIGIvZHJpdmVycy9jaGFyL3JvY2tldF9pbnQuaApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgV29yZF90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgV29yZElPX3Q7CiAKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBEV29yZF90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgRFdvcmRJT190OwogCiAvKgpAQCAtMzgsNyArMzcsNiBAQAogICogaW5zdHJ1Y3Rpb24uCiAgKi8KIAotI2lmZGVmIFJPQ0tFVF9ERUJVR19JTwogc3RhdGljIGlubGluZSB2b2lkIHNPdXRCKHVuc2lnbmVkIHNob3J0IHBvcnQsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCiB7CiAjaWZkZWYgUk9DS0VUX0RFQlVHX0lPCkBAIC01NSwxMiArNTMsMTMgQEAKIAlvdXR3X3AodmFsdWUsIHBvcnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc091dERXKHVuc2lnbmVkIHNob3J0IHBvcnQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0MzIodW5zaWduZWQgc2hvcnQgcG9ydCwgQnl0ZV90ICpwKQogeworCXUzMiB2YWx1ZSA9IGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUzMiAqKXApKTsKICNpZmRlZiBST0NLRVRfREVCVUdfSU8KLQlwcmludGsoS0VSTl9ERUJVRyAic091dERXKCV4LCAlbHgpLi4uXG4iLCBwb3J0LCB2YWx1ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIm91dDMyKCV4LCAlbHgpLi4uXG4iLCBwb3J0LCB2YWx1ZSk7CiAjZW5kaWYKLQlvdXRsX3AoY3B1X3RvX2xlMzIodmFsdWUpLCBwb3J0KTsKKwlvdXRsX3AodmFsdWUsIHBvcnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc0luQih1bnNpZ25lZCBzaG9ydCBwb3J0KQpAQCAtNzMsMTQgKzcyLDYgQEAKIAlyZXR1cm4gaW53X3AocG9ydCk7CiB9CiAKLSNlbHNlCQkJCS8qICFST0NLRVRfREVCVUdfSU8gKi8KLSNkZWZpbmUgc091dEIoYSwgYikgb3V0Yl9wKGIsIGEpCi0jZGVmaW5lIHNPdXRXKGEsIGIpIG91dHdfcChiLCBhKQotI2RlZmluZSBzT3V0RFcocG9ydCwgdmFsdWUpIG91dGxfcChjcHVfdG9fbGUzMih2YWx1ZSksIHBvcnQpCi0jZGVmaW5lIHNJbkIoYSkgKGluYl9wKGEpKQotI2RlZmluZSBzSW5XKGEpIChpbndfcChhKSkKLSNlbmRpZgkJCQkvKiBST0NLRVRfREVCVUdfSU8gKi8KLQogLyogVGhpcyBpcyB1c2VkIHRvIG1vdmUgYXJyYXlzIG9mIGJ5dGVzIHNvIGJ5dGUgc3dhcHBpbmcgaXNuJ3QgYXBwcm9wcmlhdGUuICovCiAjZGVmaW5lIHNPdXRTdHJXKHBvcnQsIGFkZHIsIGNvdW50KSBpZiAoY291bnQpIG91dHN3KHBvcnQsIGFkZHIsIGNvdW50KQogI2RlZmluZSBzSW5TdHJXKHBvcnQsIGFkZHIsIGNvdW50KSBpZiAoY291bnQpIGluc3cocG9ydCwgYWRkciwgY291bnQpCkBAIC0zOTAsNyArMzgxLDcgQEAKICNkZWZpbmUgc0NsckJyZWFrKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdICY9IH5TRVRCUkVBSzsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MDIsNyArMzkzLDcgQEAKICNkZWZpbmUgc0NsckRUUihDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFszXSAmPSB+U0VUX0RUUjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MTUsNyArNDA2LDcgQEAKIGRvIHsgXAogICAgaWYgKChDaFApLT5ydHNUb2dnbGUpIGJyZWFrOyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdICY9IH5TRVRfUlRTOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ4OSw3ICs0ODAsNyBAQAogI2RlZmluZSBzRGlzQ1RTRmxvd0N0bChDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSAmPSB+Q1RTRkNfRU47IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTAxLDcgKzQ5Miw3IEBACiAjZGVmaW5lIHNEaXNJWEFOWShDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlJbMHgwZV0gPSAweDg2OyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlJbMHgwY10pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLCYoQ2hQKS0+UlsweDBjXSk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTUxNSw3ICs1MDYsNyBAQAogI2RlZmluZSBzRGlzUGFyaXR5KENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzJdICY9IH5QQVJJVFlfRU47IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTI3LDcgKzUxOCw3IEBACiAjZGVmaW5lIHNEaXNSVFNUb2dnbGUoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gJj0gflJUU1RPR19FTjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiAgICAoQ2hQKS0+cnRzVG9nZ2xlID0gMDsgXAogfSB3aGlsZSAoMCkKIApAQCAtNTQwLDcgKzUzMSw3IEBACiAjZGVmaW5lIHNEaXNSeEZJRk8oQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5SWzB4MzJdID0gMHgwYTsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5SWzB4MzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwmKENoUCktPlJbMHgzMF0pOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NjcsNyArNTU4LDcgQEAKICNkZWZpbmUgc0Rpc1RyYW5zbWl0KENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdICY9IH5UWF9FTkFCTEU7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTc5LDcgKzU3MCw3IEBACiAjZGVmaW5lIHNEaXNUeFNvZnRGbG93Q3RsKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UlsweDA2XSA9IDB4OGE7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlsweDA0XSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzB4MDRdKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjA0LDcgKzU5NSw3IEBACiAjZGVmaW5lIHNFbkNUU0Zsb3dDdGwoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gfD0gQ1RTRkNfRU47IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjE2LDcgKzYwNyw3IEBACiAjZGVmaW5lIHNFbklYQU5ZKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UlsweDBlXSA9IDB4MjE7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlsweDBjXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzB4MGNdKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjMzLDcgKzYyNCw3IEBACiAjZGVmaW5lIHNFblBhcml0eShDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSB8PSBQQVJJVFlfRU47IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjQ3LDEwICs2MzgsMTAgQEAKICNkZWZpbmUgc0VuUlRTVG9nZ2xlKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UnhDb250cm9sWzJdICY9IH5SVFNGQ19FTjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5SeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5SeENvbnRyb2wpOyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzJdIHw9IFJUU1RPR19FTjsgXAogICAgKENoUCktPlR4Q29udHJvbFszXSAmPSB+U0VUX1JUUzsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiAgICAoQ2hQKS0+cnRzVG9nZ2xlID0gMTsgXAogfSB3aGlsZSAoMCkKIApAQCAtNjYzLDcgKzY1NCw3IEBACiAjZGVmaW5lIHNFblJ4RklGTyhDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlJbMHgzMl0gPSAweDA4OyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlJbMHgzMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLCYoQ2hQKS0+UlsweDMwXSk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTY4NCw3ICs2NzUsNyBAQAogI2RlZmluZSBzRW5SeFByb2Nlc3NvcihDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlJ4Q29udHJvbFsyXSB8PSBSWFBST0NfRU47IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UnhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+UnhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzA4LDcgKzY5OSw3IEBACiAjZGVmaW5lIHNFblRyYW5zbWl0KENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdIHw9IFRYX0VOQUJMRTsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03MjAsNyArNzExLDcgQEAKICNkZWZpbmUgc0VuVHhTb2Z0Rmxvd0N0bChDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlJbMHgwNl0gPSAweGM1OyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlJbMHgwNF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLCYoQ2hQKS0+UlsweDA0XSk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkyNyw3ICs5MTgsNyBAQAogI2RlZmluZSBzU2VuZEJyZWFrKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdIHw9IFNFVEJSRUFLOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk0MSw3ICs5MzIsNyBAQAogZG8geyBcCiAgICAoQ2hQKS0+QmF1ZERpdlsyXSA9IChCeXRlX3QpKERJVklTT1IpOyBcCiAgICAoQ2hQKS0+QmF1ZERpdlszXSA9IChCeXRlX3QpKChESVZJU09SKSA+PiA4KTsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5CYXVkRGl2WzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+QmF1ZERpdik7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk1Myw3ICs5NDQsNyBAQAogI2RlZmluZSBzU2V0RGF0YTcoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gJj0gfkRBVEE4QklUOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk2NSw3ICs5NTYsNyBAQAogI2RlZmluZSBzU2V0RGF0YTgoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gfD0gREFUQThCSVQ7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTc3LDcgKzk2OCw3IEBACiAjZGVmaW5lIHNTZXREVFIoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbM10gfD0gU0VUX0RUUjsgXAotICAgc091dERXKChDaFApLT5JbmRleEFkZHIsKihEV29yZF90ICopJihDaFApLT5UeENvbnRyb2xbMF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLChDaFApLT5UeENvbnRyb2wpOyBcCiB9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05OTQsNyArOTg1LDcgQEAKICNkZWZpbmUgc1NldEV2ZW5QYXJpdHkoQ2hQKSBcCiBkbyB7IFwKICAgIChDaFApLT5UeENvbnRyb2xbMl0gfD0gRVZFTl9QQVI7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTAxMSw3ICsxMDAyLDcgQEAKICNkZWZpbmUgc1NldE9kZFBhcml0eShDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSAmPSB+RVZFTl9QQVI7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTAyNCw3ICsxMDE1LDcgQEAKIGRvIHsgXAogICAgaWYgKChDaFApLT5ydHNUb2dnbGUpIGJyZWFrOyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzNdIHw9IFNFVF9SVFM7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA1MCw3ICsxMDQxLDcgQEAKIGRvIHsgXAogICAgKENoUCktPlJ4Q29udHJvbFsyXSAmPSB+VFJJR19NQVNLOyBcCiAgICAoQ2hQKS0+UnhDb250cm9sWzJdIHw9IExFVkVMOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlJ4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlJ4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwNjIsNyArMTA1Myw3IEBACiAjZGVmaW5lIHNTZXRTdG9wMShDaFApIFwKIGRvIHsgXAogICAgKENoUCktPlR4Q29udHJvbFsyXSAmPSB+U1RPUDI7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+VHhDb250cm9sWzBdKTsgXAorICAgb3V0MzIoKENoUCktPkluZGV4QWRkciwoQ2hQKS0+VHhDb250cm9sKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA3NCw3ICsxMDY1LDcgQEAKICNkZWZpbmUgc1NldFN0b3AyKENoUCkgXAogZG8geyBcCiAgICAoQ2hQKS0+VHhDb250cm9sWzJdIHw9IFNUT1AyOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlR4Q29udHJvbFswXSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsKENoUCktPlR4Q29udHJvbCk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwODcsNyArMTA3OCw3IEBACiAjZGVmaW5lIHNTZXRUeFhPRkZDaGFyKENoUCxDSCkgXAogZG8geyBcCiAgICAoQ2hQKS0+UlsweDA3XSA9IChDSCk7IFwKLSAgIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlsweDA0XSk7IFwKKyAgIG91dDMyKChDaFApLT5JbmRleEFkZHIsJihDaFApLT5SWzB4MDRdKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTEwMCw3ICsxMDkxLDcgQEAKICNkZWZpbmUgc1NldFR4WE9OQ2hhcihDaFAsQ0gpIFwKIGRvIHsgXAogICAgKENoUCktPlJbMHgwYl0gPSAoQ0gpOyBcCi0gICBzT3V0RFcoKENoUCktPkluZGV4QWRkciwqKERXb3JkX3QgKikmKENoUCktPlJbMHgwOF0pOyBcCisgICBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLCYoQ2hQKS0+UlsweDA4XSk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExMTMsNyArMTEwNCw3IEBACiAgICAgICAgICAgd2lsbCByZXN0YXJ0IGJvdGggdGhlIFJ4IHByb2Nlc3NvciBhbmQgc29mdHdhcmUgaW5wdXQgZmxvdyBjb250cm9sLgogCiAqLwotI2RlZmluZSBzU3RhcnRSeFByb2Nlc3NvcihDaFApIHNPdXREVygoQ2hQKS0+SW5kZXhBZGRyLCooRFdvcmRfdCAqKSYoQ2hQKS0+UlswXSkKKyNkZWZpbmUgc1N0YXJ0UnhQcm9jZXNzb3IoQ2hQKSBvdXQzMigoQ2hQKS0+SW5kZXhBZGRyLCYoQ2hQKS0+UlswXSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogRnVuY3Rpb246IHNXcml0ZVR4Qnl0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IDc4YjE1MWMuLjVjMzE0MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTExMCw4ICsxMTAsOCBAQAogI2RlZmluZSBocGV0X3NldF9ydGNfaXJxX2JpdChhcmcpCQkwCiAjZGVmaW5lIGhwZXRfcnRjX3RpbWVyX2luaXQoKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgaHBldF9ydGNfZHJvcHBlZF9pcnEoKQkJCTAKLSNkZWZpbmUgaHBldF9yZWdpc3Rlcl9pcnFfaGFuZGxlcihoKQkJMAotI2RlZmluZSBocGV0X3VucmVnaXN0ZXJfaXJxX2hhbmRsZXIoaCkJCTAKKyNkZWZpbmUgaHBldF9yZWdpc3Rlcl9pcnFfaGFuZGxlcihoKQkJKHsgMDsgfSkKKyNkZWZpbmUgaHBldF91bnJlZ2lzdGVyX2lycV9oYW5kbGVyKGgpCQkoeyAwOyB9KQogI2lmZGVmIFJUQ19JUlEKIHN0YXRpYyBpcnFyZXR1cm5fdCBocGV0X3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nuc2MuaCBiL2RyaXZlcnMvY2hhci9zbnNjLmgKaW5kZXggOGE5ODE2OS4uNGJlNjJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Nuc2MuaAorKysgYi9kcml2ZXJzL2NoYXIvc25zYy5oCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2RlZmluZSBDSFVOS1NJWkUgMTI3CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCA5MjFjNmQyLi5jMDNhZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC0xMTQ3LDcgKzExNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1jb25zdCBzdGF0aWMgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHNvbnlwaV9kZXZpY2VfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHNvbnlwaV9kZXZpY2VfaWRzW10gPSB7CiAJeyJTTlk2MDAxIiwgMH0sCiAJeyIiLCAwfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKaW5kZXggYzBlMDhjNy4uNGI1YjViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYwpAQCAtNDQzLDggKzQ0Myw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXJxKSB7CiAJCXByaW50ayAoS0VSTl9JTkZPICJNaXNzZWQgaW50ZXJydXB0Li4uIENhbGxpbmcgaW50IGZyb20gdGltZXIuIFxuIik7Ci0JCXN4X2ludGVycnVwdCAoKChzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICopZGF0YSktPmlycSwKLQkJCQkodm9pZCopZGF0YSk7CisJCXN4X2ludGVycnVwdCAoLTEsIGJwKTsKIAl9CiAJbW9kX3RpbWVyKCZtaXNzZWRfaXJxX3RpbWVyLCBqaWZmaWVzICsgc3hfcG9sbCk7CiB9CkBAIC04NjIsMjMgKzg2MSwyMiBAQAogCiAKIC8qIFRoZSBtYWluIGludGVycnVwdCBwcm9jZXNzaW5nIHJvdXRpbmUgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBzeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IHN4X2ludGVycnVwdChpbnQgZHVtbXksIHZvaWQgKmRldl9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAl1bnNpZ25lZCBjaGFyIGFjazsKLQlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicDsKKwlzdHJ1Y3Qgc3BlY2lhbGl4X2JvYXJkICpicCA9IGRldl9pZDsKIAl1bnNpZ25lZCBsb25nIGxvb3AgPSAwOwogCWludCBzYXZlZF9yZWc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZ1bmNfZW50ZXIoKTsKIAotCWJwID0gZGV2X2lkOwogCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwogCiAJZHByaW50ayAoU1hfREVCVUdfRkxPVywgImVudGVyICVzIHBvcnQgJWQgcm9vbTogJWxkXG4iLCBfX0ZVTkNUSU9OX18sIHBvcnRfTm8oc3hfZ2V0X3BvcnQoYnAsICJJTlQiKSksIFNFUklBTF9YTUlUX1NJWkUgLSBzeF9nZXRfcG9ydChicCwgIklUTiIpLT54bWl0X2NudCAtIDEpOwogCWlmICghKGJwLT5mbGFncyAmIFNYX0JPQVJEX0FDVElWRSkpIHsKLQkJZHByaW50ayAoU1hfREVCVUdfSVJRLCAic3g6IEZhbHNlIGludGVycnVwdC4gaXJxICVkLlxuIiwgaXJxKTsKKwkJZHByaW50ayAoU1hfREVCVUdfSVJRLCAic3g6IEZhbHNlIGludGVycnVwdC4gaXJxICVkLlxuIiwgYnAtPmlycSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gSVJRX05PTkU7CkBAIC0yMTA5LDcgKzIxMDcsNiBAQAogCXN4X291dChicCwgQ0QxODZ4X0NBUiwgcG9ydF9Obyhwb3J0KSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAlpZiAoSV9JWE9GRih0dHkpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJCXN4X3dhaXRfQ0NSKGJwKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJCXN4X291dChicCwgQ0QxODZ4X0NDUiwgQ0NSX1NTQ0gyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggZmVhYzU0ZS4uODc0YWFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTE2NDUsNyArMTY0NSw3IEBACiB7CiAJc3RydWN0IHN0bGJyZCAqYnJkcCA9IGRldl9pZDsKIAotCXByX2RlYnVnKCJzdGxfaW50cihicmRwPSVwLGlycT0lZClcbiIsIGJyZHAsIGlycSk7CisJcHJfZGVidWcoInN0bF9pbnRyKGJyZHA9JXAsaXJxPSVkKVxuIiwgYnJkcCwgYnJkcC0+aXJxKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKCgqIGJyZHAtPmlzcikoYnJkcCkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCBkZGM3NGQxLi5hMzIzN2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtMTY5NSwyMCArMTY5NSwxNiBAQAogICogCQogICogUmV0dXJuIFZhbHVlOiBOb25lCiAgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBtZ3NsX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgbWdzbF9pbnRlcnJ1cHQoaW50IGR1bW15LCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG1nc2xfc3RydWN0ICogaW5mbzsKKwlzdHJ1Y3QgbWdzbF9zdHJ1Y3QgKmluZm8gPSBkZXZfaWQ7CiAJdTE2IFVzY1ZlY3RvcjsKIAl1MTYgRG1hVmVjdG9yOwogCiAJaWYgKCBkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JU1IgKQkKLQkJcHJpbnRrKCIlcyglZCk6bWdzbF9pbnRlcnJ1cHQoJWQpZW50cnkuXG4iLAotCQkJX19GSUxFX18sX19MSU5FX18saXJxKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzKCVkKTptZ3NsX2ludGVycnVwdCglZCllbnRyeS5cbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIGluZm8tPmlycV9sZXZlbCk7CiAKLQlpbmZvID0gKHN0cnVjdCBtZ3NsX3N0cnVjdCAqKWRldl9pZDsJCi0JaWYgKCFpbmZvKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0JCQogCXNwaW5fbG9jaygmaW5mby0+aXJxX3NwaW5sb2NrKTsKIAogCWZvcig7OykgewpAQCAtMTczMiw4ICsxNzI4LDggQEAKIAkJCW1nc2xfaXNyX3JlY2VpdmVfZG1hKGluZm8pOwogCiAJCWlmICggaW5mby0+aXNyX292ZXJmbG93ICkgewotCQkJcHJpbnRrKEtFUk5fRVJSIiVzKCVkKTolcyBpc3Igb3ZlcmZsb3cgaXJxPSVkXG4iLAotCQkJCV9fRklMRV9fLF9fTElORV9fLGluZm8tPmRldmljZV9uYW1lLCBpcnEpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyglZCk6JXMgaXNyIG92ZXJmbG93IGlycT0lZFxuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIGluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5pcnFfbGV2ZWwpOwogCQkJdXNjX0Rpc2FibGVNYXN0ZXJJcnFCaXQoaW5mbyk7CiAJCQl1c2NfRGlzYWJsZURtYUludGVycnVwdHMoaW5mbyxESUNSX01BU1RFUik7CiAJCQlicmVhazsKQEAgLTE3NTUsOCArMTc1MSw5IEBACiAJc3Bpbl91bmxvY2soJmluZm8tPmlycV9zcGlubG9jayk7CiAJCiAJaWYgKCBkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JU1IgKQkKLQkJcHJpbnRrKCIlcyglZCk6bWdzbF9pbnRlcnJ1cHQoJWQpZXhpdC5cbiIsCi0JCQlfX0ZJTEVfXyxfX0xJTkVfXyxpcnEpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMoJWQpOm1nc2xfaW50ZXJydXB0KCVkKWV4aXQuXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBpbmZvLT5pcnFfbGV2ZWwpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQkvKiBlbmQgb2YgbWdzbF9pbnRlcnJ1cHQoKSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IDFmOTU0YWMuLjNjODkyNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC00OTEsNyArNDkxLDYgQEAKIHN0YXRpYyB2b2lkIGlzcl9yZG1hKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgaXNyX3R4ZW9tKHN0cnVjdCBzbGd0X2luZm8gKmluZm8sIHVuc2lnbmVkIHNob3J0IHN0YXR1cyk7CiBzdGF0aWMgdm9pZCBpc3JfdGRtYShzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCBzbGd0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCiBzdGF0aWMgaW50ICBhbGxvY19kbWFfYnVmcyhzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIGZyZWVfZG1hX2J1ZnMoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7CkBAIC0yMzI2LDE3ICsyMzI1LDEzIEBACiAgKiAJaXJxCWludGVycnVwdCBudW1iZXIKICAqIAlkZXZfaWQJZGV2aWNlIElEIHN1cHBsaWVkIGR1cmluZyBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uCiAgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBzbGd0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2xndF9pbnRlcnJ1cHQoaW50IGR1bW15LCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IHNsZ3RfaW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc2xndF9pbmZvICppbmZvID0gZGV2X2lkOwogCXVuc2lnbmVkIGludCBnc3I7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlEQkdJU1IoKCJzbGd0X2ludGVycnVwdCBpcnE9JWQgZW50cnlcbiIsIGlycSkpOwotCi0JaW5mbyA9IGRldl9pZDsKLQlpZiAoIWluZm8pCi0JCXJldHVybiBJUlFfTk9ORTsKKwlEQkdJU1IoKCJzbGd0X2ludGVycnVwdCBpcnE9JWQgZW50cnlcbiIsIGluZm8tPmlycV9sZXZlbCkpOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIApAQCAtMjM4NSw3ICsyMzgwLDcgQEAKIAogCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAotCURCR0lTUigoInNsZ3RfaW50ZXJydXB0IGlycT0lZCBleGl0XG4iLCBpcnEpKTsKKwlEQkdJU1IoKCJzbGd0X2ludGVycnVwdCBpcnE9JWQgZXhpdFxuIiwgaW5mby0+aXJxX2xldmVsKSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwppbmRleCBmM2U3ODA3Li5jOTYwNjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKQEAgLTI1ODYsOSArMjU4Niw5IEBACiAgKiAJZGV2X2lkCQlkZXZpY2UgSUQgc3VwcGxpZWQgZHVyaW5nIGludGVycnVwdCByZWdpc3RyYXRpb24KICAqIAlyZWdzCQlpbnRlcnJ1cHRlZCBwcm9jZXNzb3IgY29udGV4dAogICovCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc3luY2xpbmttcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IHN5bmNsaW5rbXBfaW50ZXJydXB0KGludCBkdW1teSwgdm9pZCAqZGV2X2lkKQogewotCVNMTVBfSU5GTyAqIGluZm87CisJU0xNUF9JTkZPICppbmZvID0gZGV2X2lkOwogCXVuc2lnbmVkIGNoYXIgc3RhdHVzLCBzdGF0dXMwLCBzdGF0dXMxPTA7CiAJdW5zaWduZWQgY2hhciBkbWFzdGF0dXMsIGRtYXN0YXR1czAsIGRtYXN0YXR1czE9MDsKIAl1bnNpZ25lZCBjaGFyIHRpbWVyc3RhdHVzMCwgdGltZXJzdGF0dXMxPTA7CkBAIC0yNTk3LDEyICsyNTk3LDggQEAKIAl1bnNpZ25lZCBzaG9ydCB0bXA7CiAKIAlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUiApCi0JCXByaW50aygiJXMoJWQpOiBzeW5jbGlua21wX2ludGVycnVwdCglZCllbnRyeS5cbiIsCi0JCQlfX0ZJTEVfXyxfX0xJTkVfXyxpcnEpOwotCi0JaW5mbyA9IChTTE1QX0lORk8gKilkZXZfaWQ7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gSVJRX05PTkU7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyglZCk6IHN5bmNsaW5rbXBfaW50ZXJydXB0KCVkKWVudHJ5LlxuIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgaW5mby0+aXJxX2xldmVsKTsKIAogCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CiAKQEAgLTI2MTUsOSArMjYxMSw5IEBACiAJCXRpbWVyc3RhdHVzMCA9IHJlYWRfcmVnKGluZm8sIElTUjIpOwogCiAJCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSVNSICkKLQkJCXByaW50aygiJXMoJWQpOiVzIHN0YXR1czA9JTAyeCwgZG1hc3RhdHVzMD0lMDJ4LCB0aW1lcnN0YXR1czA9JTAyeFxuIiwKLQkJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwKLQkJCQlzdGF0dXMwLGRtYXN0YXR1czAsdGltZXJzdGF0dXMwKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcyglZCk6JXMgc3RhdHVzMD0lMDJ4LCBkbWFzdGF0dXMwPSUwMngsIHRpbWVyc3RhdHVzMD0lMDJ4XG4iLAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgaW5mby0+ZGV2aWNlX25hbWUsCisJCQkJc3RhdHVzMCwgZG1hc3RhdHVzMCwgdGltZXJzdGF0dXMwKTsKIAogCQlpZiAoaW5mby0+cG9ydF9jb3VudCA9PSA0KSB7CiAJCQkvKiBnZXQgc3RhdHVzIGZvciBTQ0ExIChwb3J0cyAyLTMpICovCkBAIC0yNzAyLDggKzI2OTgsOCBAQAogCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAogCWlmICggZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSVNSICkKLQkJcHJpbnRrKCIlcyglZCk6c3luY2xpbmttcF9pbnRlcnJ1cHQoJWQpZXhpdC5cbiIsCi0JCQlfX0ZJTEVfXyxfX0xJTkVfXyxpcnEpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMoJWQpOnN5bmNsaW5rbXBfaW50ZXJydXB0KCVkKWV4aXQuXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBpbmZvLT5pcnFfbGV2ZWwpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwppbmRleCA4MTUwM2Q5Li4xM2E0YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGlzX2ludF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aXNfaW50X2hhbmRsZXIoaW50IGR1bW15LCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2lkOwogCXUzMiBpbnRlcnJ1cHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggNjEzZWM4MS4uNGQzYzcwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTE1NSw2ICsxMTU1LDQ4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisKKy8qKgorICoJdHR5X2ZpbmRfcG9sbGluZ19kcml2ZXIJLQlmaW5kIGRldmljZSBvZiBhIHBvbGxlZCB0dHkKKyAqCUBuYW1lOiBuYW1lIHN0cmluZyB0byBtYXRjaAorICoJQGxpbmU6IHBvaW50ZXIgdG8gcmVzdWx0aW5nIHR0eSBsaW5lIG5yCisgKgorICoJVGhpcyByb3V0aW5lIHJldHVybnMgYSB0dHkgZHJpdmVyIHN0cnVjdHVyZSwgZ2l2ZW4gYSBuYW1lCisgKglhbmQgdGhlIGNvbmRpdGlvbiB0aGF0IHRoZSB0dHkgZHJpdmVyIGlzIGNhcGFibGUgb2YgcG9sbGVkCisgKglvcGVyYXRpb24uCisgKi8KK3N0cnVjdCB0dHlfZHJpdmVyICp0dHlfZmluZF9wb2xsaW5nX2RyaXZlcihjaGFyICpuYW1lLCBpbnQgKmxpbmUpCit7CisJc3RydWN0IHR0eV9kcml2ZXIgKnAsICpyZXMgPSBOVUxMOworCWludCB0dHlfbGluZSA9IDA7CisJY2hhciAqc3RyOworCisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKKwkvKiBTZWFyY2ggdGhyb3VnaCB0aGUgdHR5IGRldmljZXMgdG8gbG9vayBmb3IgYSBtYXRjaCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnR0eV9kcml2ZXJzLCB0dHlfZHJpdmVycykgeworCQlzdHIgPSBuYW1lICsgc3RybGVuKHAtPm5hbWUpOworCQl0dHlfbGluZSA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJnN0ciwgMTApOworCQlpZiAoKnN0ciA9PSAnLCcpCisJCQlzdHIrKzsKKwkJaWYgKCpzdHIgPT0gJ1wwJykKKwkJCXN0ciA9IDA7CisKKwkJaWYgKHR0eV9saW5lID49IDAgJiYgdHR5X2xpbmUgPD0gcC0+bnVtICYmIHAtPnBvbGxfaW5pdCAmJgorCQkJCSFwLT5wb2xsX2luaXQocCwgdHR5X2xpbmUsIHN0cikpIHsKKworCQkJcmVzID0gcDsKKwkJCSpsaW5lID0gdHR5X2xpbmU7CisJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CisKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHR5X2ZpbmRfcG9sbGluZ19kcml2ZXIpOworI2VuZGlmCisKIC8qKgogICoJdHR5X2NoZWNrX2NoYW5nZQktCWNoZWNrIGZvciBQT1NJWCB0ZXJtaW5hbCBjaGFuZ2VzCiAgKglAdHR5OiB0dHkgdG8gY2hlY2sKQEAgLTM4NTAsNiArMzg5MiwxMSBAQAogCWRyaXZlci0+d3JpdGVfcHJvYyA9IG9wLT53cml0ZV9wcm9jOwogCWRyaXZlci0+dGlvY21nZXQgPSBvcC0+dGlvY21nZXQ7CiAJZHJpdmVyLT50aW9jbXNldCA9IG9wLT50aW9jbXNldDsKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisJZHJpdmVyLT5wb2xsX2luaXQgPSBvcC0+cG9sbF9pbml0OworCWRyaXZlci0+cG9sbF9nZXRfY2hhciA9IG9wLT5wb2xsX2dldF9jaGFyOworCWRyaXZlci0+cG9sbF9wdXRfY2hhciA9IG9wLT5wb2xsX3B1dF9jaGFyOworI2VuZGlmCiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCAzNjdiZTkxLi45YjU4Yjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtNzAyLDYgKzcwMiw3IEBACiAJaWYgKGlzX3N3aXRjaCkgewogCQlzZXRfbGVkcygpOwogCQljb21wdXRlX3NoaWZ0c3RhdGUoKTsKKwkJbm90aWZ5X3VwZGF0ZSh2Yyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC9idWZmZXJfaWNhcC5jIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAvYnVmZmVyX2ljYXAuYwppbmRleCBkZmVhMmJkLi5hYTdmNzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC9idWZmZXJfaWNhcC5jCisrKyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL2J1ZmZlcl9pY2FwLmMKQEAgLTczLDggKzczLDggQEAKICNkZWZpbmUgWEhJX0JVRkZFUl9TVEFSVCAwCiAKIC8qKgotICogYnVmZmVyX2ljYXBfZ2V0X3N0YXR1czogR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgc3RhdHVzIHJlZ2lzdGVyLgotICogQHBhcmFtZXRlciBiYXNlX2FkZHJlc3M6IGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQorICogYnVmZmVyX2ljYXBfZ2V0X3N0YXR1cyAtIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHN0YXR1cyByZWdpc3Rlci4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKgogICogVGhlIHN0YXR1cyByZWdpc3RlciBjb250YWlucyB0aGUgSUNBUCBzdGF0dXMgYW5kIHRoZSBkb25lIGJpdC4KICAqCkBAIC04OCwxNSArODgsMTUgQEAKICAqIEQxIC0gQWx3YXlzIDEKICAqIEQwIC0gRG9uZSBiaXQKICAqKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGJ1ZmZlcl9pY2FwX2dldF9zdGF0dXModm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpCit1MzIgYnVmZmVyX2ljYXBfZ2V0X3N0YXR1cyhzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEpCiB7Ci0JcmV0dXJuIGluX2JlMzIoYmFzZV9hZGRyZXNzICsgWEhJX1NUQVRVU19SRUdfT0ZGU0VUKTsKKwlyZXR1cm4gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHJlc3MgKyBYSElfU1RBVFVTX1JFR19PRkZTRVQpOwogfQogCiAvKioKLSAqIGJ1ZmZlcl9pY2FwX2dldF9icmFtOiBSZWFkcyBkYXRhIGZyb20gdGhlIHN0b3JhZ2UgYnVmZmVyIGJyYW0uCi0gKiBAcGFyYW1ldGVyIGJhc2VfYWRkcmVzczogY29udGFpbnMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29tcG9uZW50LgotICogQHBhcmFtZXRlciBvZmZzZXQ6IFRoZSB3b3JkIG9mZnNldCBmcm9tIHdoaWNoIHRoZSBkYXRhIHNob3VsZCBiZSByZWFkLgorICogYnVmZmVyX2ljYXBfZ2V0X2JyYW0gLSBSZWFkcyBkYXRhIGZyb20gdGhlIHN0b3JhZ2UgYnVmZmVyIGJyYW0uCisgKiBAYmFzZV9hZGRyZXNzOiBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnQuCisgKiBAb2Zmc2V0OiBUaGUgd29yZCBvZmZzZXQgZnJvbSB3aGljaCB0aGUgZGF0YSBzaG91bGQgYmUgcmVhZC4KICAqCiAgKiBBIGJyYW0gaXMgdXNlZCBhcyBhIGNvbmZpZ3VyYXRpb24gbWVtb3J5IGNhY2hlLiAgT25lIGZyYW1lIG9mIGRhdGEgY2FuCiAgKiBiZSBzdG9yZWQgaW4gdGhpcyAic3RvcmFnZSBidWZmZXIiLgpAQCAtMTA4LDggKzEwOCw4IEBACiB9CiAKIC8qKgotICogYnVmZmVyX2ljYXBfYnVzeTogUmV0dXJuIHRydWUgaWYgdGhlIGljYXAgZGV2aWNlIGlzIGJ1c3kKLSAqIEBwYXJhbWV0ZXIgYmFzZV9hZGRyZXNzOiBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UKKyAqIGJ1ZmZlcl9pY2FwX2J1c3kgLSBSZXR1cm4gdHJ1ZSBpZiB0aGUgaWNhcCBkZXZpY2UgaXMgYnVzeQorICogQGJhc2VfYWRkcmVzczogaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCiAgKgogICogVGhlIHF1ZXJpZXMgdGhlIGxvdyBvcmRlciBiaXQgb2YgdGhlIHN0YXR1cyByZWdpc3Rlciwgd2hpY2gKICAqIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3IgcmVhZGJhY2sgb3BlcmF0aW9uCkBAIC0xMTcsMjYgKzExNywxNCBAQAogICoqLwogc3RhdGljIGlubGluZSBib29sIGJ1ZmZlcl9pY2FwX2J1c3kodm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpCiB7Ci0JcmV0dXJuIChidWZmZXJfaWNhcF9nZXRfc3RhdHVzKGJhc2VfYWRkcmVzcykgJiAxKSA9PSBYSElfTk9UX0ZJTklTSEVEOworCXUzMiBzdGF0dXMgPSBpbl9iZTMyKGJhc2VfYWRkcmVzcyArIFhISV9TVEFUVVNfUkVHX09GRlNFVCk7CisJcmV0dXJuIChzdGF0dXMgJiAxKSA9PSBYSElfTk9UX0ZJTklTSEVEOwogfQogCiAvKioKLSAqIGJ1ZmZlcl9pY2FwX2J1c3k6IFJldHVybiB0cnVlIGlmIHRoZSBpY2FwIGRldmljZSBpcyBub3QgYnVzeQotICogQHBhcmFtZXRlciBiYXNlX2FkZHJlc3M6IGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQotICoKLSAqIFRoZSBxdWVyaWVzIHRoZSBsb3cgb3JkZXIgYml0IG9mIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHdoaWNoCi0gKiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9yIHJlYWRiYWNrIG9wZXJhdGlvbgotICogaGFzIGNvbXBsZXRlZC4KLSAqKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBidWZmZXJfaWNhcF9kb25lKHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKQotewotCXJldHVybiAoYnVmZmVyX2ljYXBfZ2V0X3N0YXR1cyhiYXNlX2FkZHJlc3MpICYgMSkgPT0gWEhJX0ZJTklTSEVEOwotfQotCi0vKioKLSAqIGJ1ZmZlcl9pY2FwX3NldF9zaXplOiBTZXQgdGhlIHNpemUgcmVnaXN0ZXIuCi0gKiBAcGFyYW1ldGVyIGJhc2VfYWRkcmVzczogaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCi0gKiBAcGFyYW1ldGVyIGRhdGE6IFRoZSBzaXplIGluIGJ5dGVzLgorICogYnVmZmVyX2ljYXBfc2V0X3NpemUgLSBTZXQgdGhlIHNpemUgcmVnaXN0ZXIuCisgKiBAYmFzZV9hZGRyZXNzOiBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UKKyAqIEBkYXRhOiBUaGUgc2l6ZSBpbiBieXRlcy4KICAqCiAgKiBUaGUgc2l6ZSByZWdpc3RlciBob2xkcyB0aGUgbnVtYmVyIG9mIDggYml0IGJ5dGVzIHRvIHRyYW5zZmVyIGJldHdlZW4KICAqIGJyYW0gYW5kIHRoZSBpY2FwIChvciBpY2FwIHRvIGJyYW0pLgpAQCAtMTQ4LDkgKzEzNiw5IEBACiB9CiAKIC8qKgotICogYnVmZmVyX2ljYXBfbVNldG9mZnNldFJlZzogU2V0IHRoZSBicmFtIG9mZnNldCByZWdpc3Rlci4KLSAqIEBwYXJhbWV0ZXIgYmFzZV9hZGRyZXNzOiBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuCi0gKiBAcGFyYW1ldGVyIGRhdGE6IGlzIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBkYXRhIHJlZ2lzdGVyLgorICogYnVmZmVyX2ljYXBfc2V0X29mZnNldCAtIFNldCB0aGUgYnJhbSBvZmZzZXQgcmVnaXN0ZXIuCisgKiBAYmFzZV9hZGRyZXNzOiBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuCisgKiBAZGF0YTogaXMgdGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGRhdGEgcmVnaXN0ZXIuCiAgKgogICogVGhlIGJyYW0gb2Zmc2V0IHJlZ2lzdGVyIGhvbGRzIHRoZSBzdGFydGluZyBicmFtIGFkZHJlc3MgdG8gdHJhbnNmZXIKICAqIGRhdGEgZnJvbSBkdXJpbmcgY29uZmlndXJhdGlvbiBvciB3cml0ZSBkYXRhIHRvIGR1cmluZyByZWFkYmFjay4KQEAgLTE2Miw5ICsxNTAsOSBAQAogfQogCiAvKioKLSAqIGJ1ZmZlcl9pY2FwX3NldF9ybmM6IFNldCB0aGUgUk5DIChSZWFkYmFjayBub3QgQ29uZmlndXJlKSByZWdpc3Rlci4KLSAqIEBwYXJhbWV0ZXIgYmFzZV9hZGRyZXNzOiBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuCi0gKiBAcGFyYW1ldGVyIGRhdGE6IGlzIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBkYXRhIHJlZ2lzdGVyLgorICogYnVmZmVyX2ljYXBfc2V0X3JuYyAtIFNldCB0aGUgUk5DIChSZWFkYmFjayBub3QgQ29uZmlndXJlKSByZWdpc3Rlci4KKyAqIEBiYXNlX2FkZHJlc3M6IGNvbnRhaW5zIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4KKyAqIEBkYXRhOiBpcyB0aGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGF0YSByZWdpc3Rlci4KICAqCiAgKiBUaGUgUk5DIHJlZ2lzdGVyIGRldGVybWluZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZGF0YSB0cmFuc2Zlci4gIEl0CiAgKiBjb250cm9scyB3aGV0aGVyIGEgY29uZmlndXJhdGlvbiBvciByZWFkYmFjayB0YWtlIHBsYWNlLiAgV3JpdGluZyB0bwpAQCAtMTc4LDEwICsxNjYsMTAgQEAKIH0KIAogLyoqCi0gKiBidWZmZXJfaWNhcF9zZXRfYnJhbTogV3JpdGUgZGF0YSB0byB0aGUgc3RvcmFnZSBidWZmZXIgYnJhbS4KLSAqIEBwYXJhbWV0ZXIgYmFzZV9hZGRyZXNzOiBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnQuCi0gKiBAcGFyYW1ldGVyIG9mZnNldDogVGhlIHdvcmQgb2Zmc2V0IGF0IHdoaWNoIHRoZSBkYXRhIHNob3VsZCBiZSB3cml0dGVuLgotICogQHBhcmFtZXRlciBkYXRhOiBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgYnJhbSBvZmZzZXQuCisgKiBidWZmZXJfaWNhcF9zZXRfYnJhbSAtIFdyaXRlIGRhdGEgdG8gdGhlIHN0b3JhZ2UgYnVmZmVyIGJyYW0uCisgKiBAYmFzZV9hZGRyZXNzOiBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnQuCisgKiBAb2Zmc2V0OiBUaGUgd29yZCBvZmZzZXQgYXQgd2hpY2ggdGhlIGRhdGEgc2hvdWxkIGJlIHdyaXR0ZW4uCisgKiBAZGF0YTogVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGJyYW0gb2Zmc2V0LgogICoKICAqIEEgYnJhbSBpcyB1c2VkIGFzIGEgY29uZmlndXJhdGlvbiBtZW1vcnkgY2FjaGUuICBPbmUgZnJhbWUgb2YgZGF0YSBjYW4KICAqIGJlIHN0b3JlZCBpbiB0aGlzICJzdG9yYWdlIGJ1ZmZlciIuCkBAIC0xOTMsMTAgKzE4MSwxMCBAQAogfQogCiAvKioKLSAqIGJ1ZmZlcl9pY2FwX2RldmljZV9yZWFkOiBUcmFuc2ZlciBieXRlcyBmcm9tIElDQVAgdG8gdGhlIHN0b3JhZ2UgYnVmZmVyLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCi0gKiBAcGFyYW1ldGVyIG9mZnNldDogVGhlIHN0b3JhZ2UgYnVmZmVyIHN0YXJ0IGFkZHJlc3MuCi0gKiBAcGFyYW1ldGVyIGNvdW50OiBUaGUgbnVtYmVyIG9mIHdvcmRzICgzMiBiaXQpIHRvIHJlYWQgZnJvbSB0aGUKKyAqIGJ1ZmZlcl9pY2FwX2RldmljZV9yZWFkIC0gVHJhbnNmZXIgYnl0ZXMgZnJvbSBJQ0FQIHRvIHRoZSBzdG9yYWdlIGJ1ZmZlci4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBAb2Zmc2V0OiBUaGUgc3RvcmFnZSBidWZmZXIgc3RhcnQgYWRkcmVzcy4KKyAqIEBjb3VudDogVGhlIG51bWJlciBvZiB3b3JkcyAoMzIgYml0KSB0byByZWFkIGZyb20gdGhlCiAgKiAgICAgICAgICAgZGV2aWNlIChJQ0FQKS4KICAqKi8KIHN0YXRpYyBpbnQgYnVmZmVyX2ljYXBfZGV2aWNlX3JlYWQoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhLApAQCAtMjI3LDEwICsyMTUsMTAgQEAKIH07CiAKIC8qKgotICogYnVmZmVyX2ljYXBfZGV2aWNlX3dyaXRlOiBUcmFuc2ZlciBieXRlcyBmcm9tIElDQVAgdG8gdGhlIHN0b3JhZ2UgYnVmZmVyLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCi0gKiBAcGFyYW1ldGVyIG9mZnNldDogVGhlIHN0b3JhZ2UgYnVmZmVyIHN0YXJ0IGFkZHJlc3MuCi0gKiBAcGFyYW1ldGVyIGNvdW50OiBUaGUgbnVtYmVyIG9mIHdvcmRzICgzMiBiaXQpIHRvIHJlYWQgZnJvbSB0aGUKKyAqIGJ1ZmZlcl9pY2FwX2RldmljZV93cml0ZSAtIFRyYW5zZmVyIGJ5dGVzIGZyb20gSUNBUCB0byB0aGUgc3RvcmFnZSBidWZmZXIuCisgKiBAZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgorICogQG9mZnNldDogVGhlIHN0b3JhZ2UgYnVmZmVyIHN0YXJ0IGFkZHJlc3MuCisgKiBAY291bnQ6IFRoZSBudW1iZXIgb2Ygd29yZHMgKDMyIGJpdCkgdG8gcmVhZCBmcm9tIHRoZQogICogICAgICAgICAgIGRldmljZSAoSUNBUCkuCiAgKiovCiBzdGF0aWMgaW50IGJ1ZmZlcl9pY2FwX2RldmljZV93cml0ZShzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEsCkBAIC0yNjEsOCArMjQ5LDggQEAKIH07CiAKIC8qKgotICogYnVmZmVyX2ljYXBfcmVzZXQ6IFJlc2V0IHRoZSBsb2dpYyBvZiB0aGUgaWNhcCBkZXZpY2UuCi0gKiBAcGFyYW1ldGVyIGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KKyAqIGJ1ZmZlcl9pY2FwX3Jlc2V0IC0gUmVzZXQgdGhlIGxvZ2ljIG9mIHRoZSBpY2FwIGRldmljZS4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKgogICogV3JpdGluZyB0byB0aGUgc3RhdHVzIHJlZ2lzdGVyIHJlc2V0cyB0aGUgSUNBUCBsb2dpYyBpbiBhbiBpbnRlcm5hbAogICogdmVyc2lvbiBvZiB0aGUgY29yZS4gIEZvciB0aGUgdmVyc2lvbiBvZiB0aGUgY29yZSBwdWJsaXNoZWQgaW4gRURLLApAQCAtMjc0LDEwICsyNjIsMTAgQEAKIH0KIAogLyoqCi0gKiBidWZmZXJfaWNhcF9zZXRfY29uZmlndXJhdGlvbjogTG9hZCBhIHBhcnRpYWwgYml0c3RyZWFtIGZyb20gc3lzdGVtIG1lbW9yeS4KLSAqIEBwYXJhbWV0ZXIgZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgotICogQHBhcmFtZXRlciBkYXRhOiBLZXJuZWwgYWRkcmVzcyBvZiB0aGUgcGFydGlhbCBiaXRzdHJlYW0uCi0gKiBAcGFyYW1ldGVyIHNpemU6IHRoZSBzaXplIG9mIHRoZSBwYXJ0aWFsIGJpdHN0cmVhbSBpbiAzMiBiaXQgd29yZHMuCisgKiBidWZmZXJfaWNhcF9zZXRfY29uZmlndXJhdGlvbiAtIExvYWQgYSBwYXJ0aWFsIGJpdHN0cmVhbSBmcm9tIHN5c3RlbSBtZW1vcnkuCisgKiBAZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgorICogQGRhdGE6IEtlcm5lbCBhZGRyZXNzIG9mIHRoZSBwYXJ0aWFsIGJpdHN0cmVhbS4KKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcGFydGlhbCBiaXRzdHJlYW0gaW4gMzIgYml0IHdvcmRzLgogICoqLwogaW50IGJ1ZmZlcl9pY2FwX3NldF9jb25maWd1cmF0aW9uKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSwgdTMyICpkYXRhLAogCQkJICAgICB1MzIgc2l6ZSkKQEAgLTMzMywxMCArMzIxLDEwIEBACiB9OwogCiAvKioKLSAqIGJ1ZmZlcl9pY2FwX2dldF9jb25maWd1cmF0aW9uOiBSZWFkIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHRoZSBkZXZpY2UuCi0gKiBAcGFyYW1ldGVyIGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KLSAqIEBwYXJhbWV0ZXIgZGF0YTogQWRkcmVzcyBvZiB0aGUgZGF0YSByZXByZXNlbnRpbmcgdGhlIHBhcnRpYWwgYml0c3RyZWFtCi0gKiBAcGFyYW1ldGVyIHNpemU6IHRoZSBzaXplIG9mIHRoZSBwYXJ0aWFsIGJpdHN0cmVhbSBpbiAzMiBiaXQgd29yZHMuCisgKiBidWZmZXJfaWNhcF9nZXRfY29uZmlndXJhdGlvbiAtIFJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gdGhlIGRldmljZS4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBAZGF0YTogQWRkcmVzcyBvZiB0aGUgZGF0YSByZXByZXNlbnRpbmcgdGhlIHBhcnRpYWwgYml0c3RyZWFtCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIHBhcnRpYWwgYml0c3RyZWFtIGluIDMyIGJpdCB3b3Jkcy4KICAqKi8KIGludCBidWZmZXJfaWNhcF9nZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEsIHUzMiAqZGF0YSwKIAkJCSAgICAgdTMyIHNpemUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC9idWZmZXJfaWNhcC5oIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAvYnVmZmVyX2ljYXAuaAppbmRleCAwMzE4NDk1Li5jNWIxODQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC9idWZmZXJfaWNhcC5oCisrKyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL2J1ZmZlcl9pY2FwLmgKQEAgLTQ0LDggKzQ0LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJ4aWxpbnhfaHdpY2FwLmgiCiAKLXZvaWQgYnVmZmVyX2ljYXBfcmVzZXQoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhKTsKLQogLyogTG9hZHMgYSBwYXJ0aWFsIGJpdHN0cmVhbSBmcm9tIHN5c3RlbSBtZW1vcnkuICovCiBpbnQgYnVmZmVyX2ljYXBfc2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhLCB1MzIgKmRhdGEsCiAJCQkgICAgIHUzMiBTaXplKTsKQEAgLTU0LDQgKzUyLDcgQEAKIGludCBidWZmZXJfaWNhcF9nZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEsIHUzMiAqZGF0YSwKIAkJCSAgICAgdTMyIFNpemUpOwogCit1MzIgYnVmZmVyX2ljYXBfZ2V0X3N0YXR1cyhzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEpOwordm9pZCBidWZmZXJfaWNhcF9yZXNldChzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL2ZpZm9faWNhcC5jIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAvZmlmb19pY2FwLmMKaW5kZXggMDk4ODMxNC4uNzc2YjUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAvZmlmb19pY2FwLmMKKysrIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAvZmlmb19pY2FwLmMKQEAgLTc4LDEzICs3OCw2IEBACiAjZGVmaW5lIFhISV9DUl9SRUFEX01BU0sgMHgwMDAwMDAwMiAvKiBSZWFkIGZyb20gSUNBUCB0byBGSUZPICovCiAjZGVmaW5lIFhISV9DUl9XUklURV9NQVNLIDB4MDAwMDAwMDEgLyogV3JpdGUgZnJvbSBGSUZPIHRvIElDQVAgKi8KIAotLyogU3RhdHVzIFJlZ2lzdGVyIChTUikgKi8KLSNkZWZpbmUgWEhJX1NSX0NGR0VSUl9OX01BU0sgMHgwMDAwMDEwMCAvKiBDb25maWcgRXJyb3IgTWFzayAqLwotI2RlZmluZSBYSElfU1JfREFMSUdOX01BU0sgMHgwMDAwMDA4MCAvKiBEYXRhIEFsaWdubWVudCBNYXNrICovCi0jZGVmaW5lIFhISV9TUl9SSVBfTUFTSyAweDAwMDAwMDQwIC8qIFJlYWQgYmFjayBNYXNrICovCi0jZGVmaW5lIFhISV9TUl9JTl9BQk9SVF9OX01BU0sgMHgwMDAwMDAyMCAvKiBTZWxlY3QgTWFwIEFib3J0IE1hc2sgKi8KLSNkZWZpbmUgWEhJX1NSX0RPTkVfTUFTSyAweDAwMDAwMDAxIC8qIERvbmUgYml0IE1hc2sgICovCi0KIAogI2RlZmluZSBYSElfV0ZPX01BWF9WQUNBTkNZIDEwMjQgLyogTWF4IFdyaXRlIEZJRk8gVmFjYW5jeSwgaW4gd29yZHMgKi8KICNkZWZpbmUgWEhJX1JGT19NQVhfT0NDVVBBTkNZIDI1NiAvKiBNYXggUmVhZCBGSUZPIE9jY3VwYW5jeSwgaW4gd29yZHMgKi8KQEAgLTk0LDkgKzg3LDkgQEAKIAogCiAvKioKLSAqIGZpZm9faWNhcF9maWZvX3dyaXRlOiBXcml0ZSBkYXRhIHRvIHRoZSB3cml0ZSBGSUZPLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCi0gKiBAcGFyYW1ldGVyIGRhdGE6IHRoZSAzMi1iaXQgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgRklGTy4KKyAqIGZpZm9faWNhcF9maWZvX3dyaXRlIC0gV3JpdGUgZGF0YSB0byB0aGUgd3JpdGUgRklGTy4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBAZGF0YTogdGhlIDMyLWJpdCB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBGSUZPLgogICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzaWxlbnRseSBmYWlsIGlmIHRoZSBmaWZvIGlzIGZ1bGwuCiAgKiovCkBAIC0xMDgsOCArMTAxLDggQEAKIH0KIAogLyoqCi0gKiBmaWZvX2ljYXBfZmlmb19yZWFkOiBSZWFkIGRhdGEgZnJvbSB0aGUgUmVhZCBGSUZPLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBmaWZvX2ljYXBfZmlmb19yZWFkIC0gUmVhZCBkYXRhIGZyb20gdGhlIFJlYWQgRklGTy4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIHNpbGVudGx5IGZhaWwgaWYgdGhlIGZpZm8gaXMgZW1wdHkuCiAgKiovCkBAIC0xMjEsOSArMTE0LDkgQEAKIH0KIAogLyoqCi0gKiBmaWZvX2ljYXBfc2V0X3JlYWRfc2l6ZTogU2V0IHRoZSB0aGUgc2l6ZSByZWdpc3Rlci4KLSAqIEBwYXJhbWV0ZXIgZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgotICogQHBhcmFtZXRlciBkYXRhOiB0aGUgc2l6ZSBvZiB0aGUgZm9sbG93aW5nIHJlYWQgdHJhbnNhY3Rpb24sIGluIHdvcmRzLgorICogZmlmb19pY2FwX3NldF9yZWFkX3NpemUgLSBTZXQgdGhlIHRoZSBzaXplIHJlZ2lzdGVyLgorICogQGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KKyAqIEBkYXRhOiB0aGUgc2l6ZSBvZiB0aGUgZm9sbG93aW5nIHJlYWQgdHJhbnNhY3Rpb24sIGluIHdvcmRzLgogICoqLwogc3RhdGljIGlubGluZSB2b2lkIGZpZm9faWNhcF9zZXRfcmVhZF9zaXplKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSwKIAkJdTMyIGRhdGEpCkBAIC0xMzIsOCArMTI1LDggQEAKIH0KIAogLyoqCi0gKiBmaWZvX2ljYXBfc3RhcnRfY29uZmlnOiBJbml0aWF0ZSBhIGNvbmZpZ3VyYXRpb24gKHdyaXRlKSB0byB0aGUgZGV2aWNlLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBmaWZvX2ljYXBfc3RhcnRfY29uZmlnIC0gSW5pdGlhdGUgYSBjb25maWd1cmF0aW9uICh3cml0ZSkgdG8gdGhlIGRldmljZS4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKiovCiBzdGF0aWMgaW5saW5lIHZvaWQgZmlmb19pY2FwX3N0YXJ0X2NvbmZpZyhzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEpCiB7CkBAIC0xNDIsOCArMTM1LDggQEAKIH0KIAogLyoqCi0gKiBmaWZvX2ljYXBfc3RhcnRfcmVhZGJhY2s6IEluaXRpYXRlIGEgcmVhZGJhY2sgZnJvbSB0aGUgZGV2aWNlLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBmaWZvX2ljYXBfc3RhcnRfcmVhZGJhY2sgLSBJbml0aWF0ZSBhIHJlYWRiYWNrIGZyb20gdGhlIGRldmljZS4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKiovCiBzdGF0aWMgaW5saW5lIHZvaWQgZmlmb19pY2FwX3N0YXJ0X3JlYWRiYWNrKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSkKIHsKQEAgLTE1MiwxOSArMTQ1LDQxIEBACiB9CiAKIC8qKgotICogZmlmb19pY2FwX2J1c3k6IFJldHVybiB0cnVlIGlmIHRoZSBJQ0FQIGlzIHN0aWxsIHByb2Nlc3NpbmcgYSB0cmFuc2FjdGlvbi4KLSAqIEBwYXJhbWV0ZXIgZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgorICogZmlmb19pY2FwX2dldF9zdGF0dXMgLSBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGF0dXMgcmVnaXN0ZXIuCisgKiBAZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgorICoKKyAqIFRoZSBzdGF0dXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIElDQVAgc3RhdHVzIGFuZCB0aGUgZG9uZSBiaXQuCisgKgorICogRDggLSBjZmdlcnIKKyAqIEQ3IC0gZGFsaWduCisgKiBENiAtIHJpcAorICogRDUgLSBpbl9hYm9ydF9sCisgKiBENCAtIEFsd2F5cyAxCisgKiBEMyAtIEFsd2F5cyAxCisgKiBEMiAtIEFsd2F5cyAxCisgKiBEMSAtIEFsd2F5cyAxCisgKiBEMCAtIERvbmUgYml0CisgKiovCit1MzIgZmlmb19pY2FwX2dldF9zdGF0dXMoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhKQoreworCXUzMiBzdGF0dXMgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkcmVzcyArIFhISV9TUl9PRkZTRVQpOworCWRldl9kYmcoZHJ2ZGF0YS0+ZGV2LCAiR2V0dGluZyBzdGF0dXMgPSAleFxuIiwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGZpZm9faWNhcF9idXN5IC0gUmV0dXJuIHRydWUgaWYgdGhlIElDQVAgaXMgc3RpbGwgcHJvY2Vzc2luZyBhIHRyYW5zYWN0aW9uLgorICogQGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KICAqKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGZpZm9faWNhcF9idXN5KHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSkKIHsKIAl1MzIgc3RhdHVzID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHJlc3MgKyBYSElfU1JfT0ZGU0VUKTsKLQlkZXZfZGJnKGRydmRhdGEtPmRldiwgIkdldHRpbmcgc3RhdHVzID0gJXhcbiIsIHN0YXR1cyk7CiAJcmV0dXJuIChzdGF0dXMgJiBYSElfU1JfRE9ORV9NQVNLKSA/IDAgOiAxOwogfQogCiAvKioKLSAqIGZpZm9faWNhcF93cml0ZV9maWZvX3ZhY2FuY3k6IFF1ZXJ5IHRoZSB3cml0ZSBmaWZvIGF2YWlsYWJsZSBzcGFjZS4KLSAqIEBwYXJhbWV0ZXIgZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgorICogZmlmb19pY2FwX3dyaXRlX2ZpZm9fdmFjYW5jeSAtIFF1ZXJ5IHRoZSB3cml0ZSBmaWZvIGF2YWlsYWJsZSBzcGFjZS4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKgogICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd29yZHMgdGhhdCBjYW4gYmUgc2FmZWx5IHB1c2hlZCBpbnRvIHRoZSB3cml0ZSBmaWZvLgogICoqLwpAQCAtMTc1LDggKzE5MCw4IEBACiB9CiAKIC8qKgotICogZmlmb19pY2FwX3JlYWRfZmlmb19vY2N1cGFuY3k6IFF1ZXJ5IHRoZSByZWFkIGZpZm8gYXZhaWxhYmxlIGRhdGEuCi0gKiBAcGFyYW1ldGVyIGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KKyAqIGZpZm9faWNhcF9yZWFkX2ZpZm9fb2NjdXBhbmN5IC0gUXVlcnkgdGhlIHJlYWQgZmlmbyBhdmFpbGFibGUgZGF0YS4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKgogICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd29yZHMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlYWQgZnJvbSB0aGUgcmVhZCBmaWZvLgogICoqLwpAQCAtMTg3LDExICsyMDIsMTEgQEAKIH0KIAogLyoqCi0gKiBmaWZvX2ljYXBfc2V0X2NvbmZpZ3VyYXRpb246IFNlbmQgY29uZmlndXJhdGlvbiBkYXRhIHRvIHRoZSBJQ0FQLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCi0gKiBAcGFyYW1ldGVyIGZyYW1lX2J1ZmZlcjogYSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlCisgKiBmaWZvX2ljYXBfc2V0X2NvbmZpZ3VyYXRpb24gLSBTZW5kIGNvbmZpZ3VyYXRpb24gZGF0YSB0byB0aGUgSUNBUC4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBAZnJhbWVfYnVmZmVyOiBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUKICAqCQlJQ0FQIGRldmljZS4KLSAqIEBwYXJhbWV0ZXIgbnVtX3dvcmRzOiB0aGUgbnVtYmVyIG9mIHdvcmRzICgzMiBiaXQpIHRvIHdyaXRlIHRvIHRoZSBJQ0FQCisgKiBAbnVtX3dvcmRzOiB0aGUgbnVtYmVyIG9mIHdvcmRzICgzMiBiaXQpIHRvIHdyaXRlIHRvIHRoZSBJQ0FQCiAgKgkJZGV2aWNlLgogCiAgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZ2l2ZW4gdXNlciBkYXRhIHRvIHRoZSBXcml0ZSBGSUZPIGluCkBAIC0yNjYsMTAgKzI4MSwxMCBAQAogfQogCiAvKioKLSAqIGZpZm9faWNhcF9nZXRfY29uZmlndXJhdGlvbjogUmVhZCBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSB0aGUgZGV2aWNlLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCi0gKiBAcGFyYW1ldGVyIGRhdGE6IEFkZHJlc3Mgb2YgdGhlIGRhdGEgcmVwcmVzZW50aW5nIHRoZSBwYXJ0aWFsIGJpdHN0cmVhbQotICogQHBhcmFtZXRlciBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcGFydGlhbCBiaXRzdHJlYW0gaW4gMzIgYml0IHdvcmRzLgorICogZmlmb19pY2FwX2dldF9jb25maWd1cmF0aW9uIC0gUmVhZCBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSB0aGUgZGV2aWNlLgorICogQGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KKyAqIEBkYXRhOiBBZGRyZXNzIG9mIHRoZSBkYXRhIHJlcHJlc2VudGluZyB0aGUgcGFydGlhbCBiaXRzdHJlYW0KKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcGFydGlhbCBiaXRzdHJlYW0gaW4gMzIgYml0IHdvcmRzLgogICoKICAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygd29yZHMgZnJvbSB0aGUgSUNBUCBkZXZpY2UgaW4KICAqIHRoZSBwb2xsZWQgbW9kZS4KQEAgLTMzNSw4ICszNTAsOCBAQAogfQogCiAvKioKLSAqIGJ1ZmZlcl9pY2FwX3Jlc2V0OiBSZXNldCB0aGUgbG9naWMgb2YgdGhlIGljYXAgZGV2aWNlLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBidWZmZXJfaWNhcF9yZXNldCAtIFJlc2V0IHRoZSBsb2dpYyBvZiB0aGUgaWNhcCBkZXZpY2UuCisgKiBAZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgogICoKICAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIHRoZSBzb2Z0d2FyZSByZXNldCBvZiB0aGUgY29tcGxldGUgSFdJQ0FQIGRldmljZS4KICAqIEFsbCB0aGUgcmVnaXN0ZXJzIHdpbGwgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCB0aGUgRklGTyBpcyBhbHNvCkBAIC0zNjAsOCArMzc1LDggQEAKIH0KIAogLyoqCi0gKiBmaWZvX2ljYXBfZmx1c2hfZmlmbzogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIHRoZSBGSUZPcyBpbiB0aGUgZGV2aWNlLgotICogQHBhcmFtZXRlciBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBmaWZvX2ljYXBfZmx1c2hfZmlmbyAtIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgRklGT3MgaW4gdGhlIGRldmljZS4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCiAgKi8KIHZvaWQgZmlmb19pY2FwX2ZsdXNoX2ZpZm8oc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAvZmlmb19pY2FwLmggYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC9maWZvX2ljYXAuaAppbmRleCA0ZDMwNjhkLi5mZmFiZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC9maWZvX2ljYXAuaAorKysgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC9maWZvX2ljYXAuaApAQCAtNTYsNiArNTYsNyBAQAogCQl1MzIgKkZyYW1lQnVmZmVyLAogCQl1MzIgTnVtV29yZHMpOwogCit1MzIgZmlmb19pY2FwX2dldF9zdGF0dXMoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhKTsKIHZvaWQgZmlmb19pY2FwX3Jlc2V0KHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSk7CiB2b2lkIGZpZm9faWNhcF9mbHVzaF9maWZvKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwppbmRleCAyNGY2YWVmLi4wMTZmOTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKKysrIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCkBAIC0zNiw3ICszNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBUaGlzIGlzIHRoZSBjb2RlIGJlaGluZCAvZGV2L3hpbGlueF9pY2FwIC0tIGl0IGFsbG93cyBhIHVzZXItc3BhY2UKKyAqIFRoaXMgaXMgdGhlIGNvZGUgYmVoaW5kIC9kZXYvaWNhcCogLS0gaXQgYWxsb3dzIGEgdXNlci1zcGFjZQogICogYXBwbGljYXRpb24gdG8gdXNlIHRoZSBYaWxpbnggSUNBUCBzdWJzeXN0ZW0uCiAgKgogICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBwb3NzaWJsZToKQEAgLTY3LDcgKzY3LDcgQEAKICAqIHVzZXItc3BhY2UgYXBwbGljYXRpb24gY29kZSB0aGF0IHVzZXMgdGhpcyBkZXZpY2UuICBUaGUgc2ltcGxlc3QKICAqIHdheSB0byB1c2UgdGhpcyBpbnRlcmZhY2UgaXMgc2ltcGx5OgogICoKLSAqIGNwIGZvby5iaXQgL2Rldi94aWxpbnhfaWNhcAorICogY3AgZm9vLmJpdCAvZGV2L2ljYXAwCiAgKgogICogTm90ZSB0aGF0IHVubGVzcyBmb28uYml0IGlzIGFuIGFwcHJvcHJpYXRlbHkgY29uc3RydWN0ZWQgcGFydGlhbAogICogYml0c3RyZWFtLCB0aGlzIGhhcyBhIGhpZ2ggbGlrZWx5aG9vZCBvZiBvdmVyd3JpdGluZyB0aGUgZGVzaWduCkBAIC04NCw3ICs4NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xMDUsMjAgKzEwNSwxNyBAQAogI2luY2x1ZGUgImJ1ZmZlcl9pY2FwLmgiCiAjaW5jbHVkZSAiZmlmb19pY2FwLmgiCiAKLSNkZWZpbmUgRFJJVkVSX05BTUUgInhpbGlueF9pY2FwIgorI2RlZmluZSBEUklWRVJfTkFNRSAiaWNhcCIKIAogI2RlZmluZSBIV0lDQVBfUkVHUyAgICgweDEwMDAwKQogCi0vKiBkeW5hbWljYWxseSBhbGxvY2F0ZSBkZXZpY2UgbnVtYmVyICovCi1zdGF0aWMgaW50IHhod2ljYXBfbWFqb3I7Ci1zdGF0aWMgaW50IHhod2ljYXBfbWlub3I7CisjZGVmaW5lIFhIV0lDQVBfTUFKT1IgMjU5CisjZGVmaW5lIFhIV0lDQVBfTUlOT1IgMAogI2RlZmluZSBIV0lDQVBfREVWSUNFUyAxCiAKLW1vZHVsZV9wYXJhbSh4aHdpY2FwX21ham9yLCBpbnQsIFNfSVJVR08pOwotbW9kdWxlX3BhcmFtKHhod2ljYXBfbWlub3IsIGludCwgU19JUlVHTyk7Ci0KIC8qIEFuIGFycmF5LCB3aGljaCBpcyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gKi8KIHN0YXRpYyBib29sIHByb2JlZF9kZXZpY2VzW0hXSUNBUF9ERVZJQ0VTXTsKK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggaWNhcF9zZW07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmljYXBfY2xhc3M7CiAKQEAgLTE5OSwxNCArMTk2LDE0IEBACiB9OwogCiAvKioKLSAqIGh3aWNhcF9jb21tYW5kX2Rlc3luYzogU2VuZCBhIERFU1lOQyBjb21tYW5kIHRvIHRoZSBJQ0FQIHBvcnQuCi0gKiBAcGFyYW1ldGVyIGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KKyAqIGh3aWNhcF9jb21tYW5kX2Rlc3luYyAtIFNlbmQgYSBERVNZTkMgY29tbWFuZCB0byB0aGUgSUNBUCBwb3J0LgorICogQGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KICAqCiAgKiBUaGlzIGNvbW1hbmQgZGVzeW5jaHJvbml6ZXMgdGhlIElDQVAgQWZ0ZXIgdGhpcyBjb21tYW5kLCBhCiAgKiBiaXRzdHJlYW0gY29udGFpbmluZyBhIE5VTEwgcGFja2V0LCBmb2xsb3dlZCBieSBhIFNZTkNIIHBhY2tldCBpcwogICogcmVxdWlyZWQgYmVmb3JlIHRoZSBJQ0FQIHdpbGwgcmVjb2duaXplIGNvbW1hbmRzLgogICovCi1pbnQgaHdpY2FwX2NvbW1hbmRfZGVzeW5jKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSkKK3N0YXRpYyBpbnQgaHdpY2FwX2NvbW1hbmRfZGVzeW5jKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSkKIHsKIAl1MzIgYnVmZmVyWzRdOwogCXUzMiBpbmRleCA9IDA7CkBAIC0yMjgsNTEgKzIyNSwxOCBAQAogfQogCiAvKioKLSAqIGh3aWNhcF9jb21tYW5kX2NhcHR1cmU6IFNlbmQgYSBDQVBUVVJFIGNvbW1hbmQgdG8gdGhlIElDQVAgcG9ydC4KLSAqIEBwYXJhbWV0ZXIgZHJ2ZGF0YTogYSBwb2ludGVyIHRvIHRoZSBkcnZkYXRhLgotICoKLSAqIFRoaXMgY29tbWFuZCBjYXB0dXJlcyBhbGwgb2YgdGhlIGZsaXAgZmxvcCBzdGF0ZXMgc28gdGhleSB3aWxsIGJlCi0gKiBhdmFpbGFibGUgZHVyaW5nIHJlYWRiYWNrLiAgT25lIGNhbiB1c2UgdGhpcyBjb21tYW5kIGluc3RlYWQgb2YKLSAqIGVuYWJsaW5nIHRoZSBDQVBUVVJFIGJsb2NrIGluIHRoZSBkZXNpZ24uCi0gKi8KLWludCBod2ljYXBfY29tbWFuZF9jYXB0dXJlKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSkKLXsKLQl1MzIgYnVmZmVyWzddOwotCXUzMiBpbmRleCA9IDA7Ci0KLQkvKgotCSAqIENyZWF0ZSB0aGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBJQ0FQLgotCSAqLwotCWJ1ZmZlcltpbmRleCsrXSA9IFhISV9EVU1NWV9QQUNLRVQ7Ci0JYnVmZmVyW2luZGV4KytdID0gWEhJX1NZTkNfUEFDS0VUOwotCWJ1ZmZlcltpbmRleCsrXSA9IFhISV9OT09QX1BBQ0tFVDsKLQlidWZmZXJbaW5kZXgrK10gPSBod2ljYXBfdHlwZV8xX3dyaXRlKGRydmRhdGEtPmNvbmZpZ19yZWdzLT5DTUQpIHwgMTsKLQlidWZmZXJbaW5kZXgrK10gPSBYSElfQ01EX0dDQVBUVVJFOwotCWJ1ZmZlcltpbmRleCsrXSA9IFhISV9EVU1NWV9QQUNLRVQ7Ci0JYnVmZmVyW2luZGV4KytdID0gWEhJX0RVTU1ZX1BBQ0tFVDsKLQotCS8qCi0JICogV3JpdGUgdGhlIGRhdGEgdG8gdGhlIEZJRk8gYW5kIGludGlhdGUgdGhlIHRyYW5zZmVyIG9mIGRhdGEKLQkgKiBwcmVzZW50IGluIHRoZSBGSUZPIHRvIHRoZSBJQ0FQIGRldmljZS4KLQkgKi8KLQlyZXR1cm4gZHJ2ZGF0YS0+Y29uZmlnLT5zZXRfY29uZmlndXJhdGlvbihkcnZkYXRhLAotCQkJJmJ1ZmZlclswXSwgaW5kZXgpOwotCi19Ci0KLS8qKgotICogaHdpY2FwX2dldF9jb25maWd1cmF0aW9uX3JlZ2lzdGVyOiBRdWVyeSBhIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCi0gKiBAcGFyYW1ldGVyIGRydmRhdGE6IGEgcG9pbnRlciB0byB0aGUgZHJ2ZGF0YS4KLSAqIEBwYXJhbWV0ZXIgcmVnOiBhIGNvbnN0YW50IHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyYXRpb24KKyAqIGh3aWNhcF9nZXRfY29uZmlndXJhdGlvbl9yZWdpc3RlciAtIFF1ZXJ5IGEgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KKyAqIEBkcnZkYXRhOiBhIHBvaW50ZXIgdG8gdGhlIGRydmRhdGEuCisgKiBAcmVnOiBhIGNvbnN0YW50IHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyYXRpb24KICAqCQlyZWdpc3RlciB2YWx1ZSB0byBiZSByZXR1cm5lZC4KICAqIAkJRXhhbXBsZXM6ICBYSElfSURDT0RFLCBYSElfRkxSLgotICogQHBhcmFtZXRlciBSZWdEYXRhOiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIuCisgKiBAcmVnX2RhdGE6IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZWdpc3Rlci4KICAqCiAgKiBTZW5kcyBhIHF1ZXJ5IHBhY2tldCB0byB0aGUgSUNBUCBhbmQgdGhlbiByZWNlaXZlcyB0aGUgcmVzcG9uc2UuCiAgKiBUaGUgaWNhcCBpcyBsZWZ0IGluIFN5bmNoZWQgc3RhdGUuCiAgKi8KLWludCBod2ljYXBfZ2V0X2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhLAotCQl1MzIgcmVnLCB1MzIgKlJlZ0RhdGEpCitzdGF0aWMgaW50IGh3aWNhcF9nZXRfY29uZmlndXJhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEsCisJCXUzMiByZWcsIHUzMiAqcmVnX2RhdGEpCiB7CiAJaW50IHN0YXR1czsKIAl1MzIgYnVmZmVyWzZdOwpAQCAtMjgyLDggKzI0NiwyNiBAQAogCSAqIENyZWF0ZSB0aGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBJQ0FQLgogCSAqLwogCWJ1ZmZlcltpbmRleCsrXSA9IFhISV9EVU1NWV9QQUNLRVQ7CisJYnVmZmVyW2luZGV4KytdID0gWEhJX05PT1BfUEFDS0VUOwogCWJ1ZmZlcltpbmRleCsrXSA9IFhISV9TWU5DX1BBQ0tFVDsKIAlidWZmZXJbaW5kZXgrK10gPSBYSElfTk9PUF9QQUNLRVQ7CisJYnVmZmVyW2luZGV4KytdID0gWEhJX05PT1BfUEFDS0VUOworCisJLyoKKwkgKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgRklGTyBhbmQgaW5pdGlhdGUgdGhlIHRyYW5zZmVyIG9mIGRhdGEgcHJlc2VudAorCSAqIGluIHRoZSBGSUZPIHRvIHRoZSBJQ0FQIGRldmljZS4KKwkgKi8KKwlzdGF0dXMgPSBkcnZkYXRhLT5jb25maWctPnNldF9jb25maWd1cmF0aW9uKGRydmRhdGEsCisJCQkJCQkgICAgJmJ1ZmZlclswXSwgaW5kZXgpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBJZiB0aGUgc3luY3dvcmQgd2FzIG5vdCBmb3VuZCwgdGhlbiB3ZSBuZWVkIHRvIHN0YXJ0IG92ZXIuICovCisJc3RhdHVzID0gZHJ2ZGF0YS0+Y29uZmlnLT5nZXRfc3RhdHVzKGRydmRhdGEpOworCWlmICgoc3RhdHVzICYgWEhJX1NSX0RBTElHTl9NQVNLKSAhPSBYSElfU1JfREFMSUdOX01BU0spCisJCXJldHVybiAtRUlPOworCisJaW5kZXggPSAwOwogCWJ1ZmZlcltpbmRleCsrXSA9IGh3aWNhcF90eXBlXzFfcmVhZChyZWcpIHwgMTsKIAlidWZmZXJbaW5kZXgrK10gPSBYSElfTk9PUF9QQUNLRVQ7CiAJYnVmZmVyW2luZGV4KytdID0gWEhJX05PT1BfUEFDS0VUOwpAQCAtMzAwLDE0ICsyODIsMTQgQEAKIAkvKgogCSAqIFJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKIAkgKi8KLQlzdGF0dXMgPSBkcnZkYXRhLT5jb25maWctPmdldF9jb25maWd1cmF0aW9uKGRydmRhdGEsIFJlZ0RhdGEsIDEpOworCXN0YXR1cyA9IGRydmRhdGEtPmNvbmZpZy0+Z2V0X2NvbmZpZ3VyYXRpb24oZHJ2ZGF0YSwgcmVnX2RhdGEsIDEpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGh3aWNhcF9pbml0aWFsaXplX2h3aWNhcChzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEpCitzdGF0aWMgaW50IGh3aWNhcF9pbml0aWFsaXplX2h3aWNhcChzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEpCiB7CiAJaW50IHN0YXR1czsKIAl1MzIgaWRjb2RlOwpAQCAtMzQ0LDcgKzMyNiw3IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1od2ljYXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK2h3aWNhcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3NpemVfdCBieXRlc190b19yZWFkID0gMDsKQEAgLTM1Myw4ICszMzUsOSBAQAogCXUzMiBieXRlc19yZW1haW5pbmc7CiAJaW50IHN0YXR1czsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRydmRhdGEtPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJc3RhdHVzID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkcnZkYXRhLT5zZW0pOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CiAKIAlpZiAoZHJ2ZGF0YS0+cmVhZF9idWZmZXJfaW5fdXNlKSB7CiAJCS8qIElmIHRoZXJlIGFyZSBsZWZ0b3ZlciBieXRlcyBpbiB0aGUgYnVmZmVyLCBqdXN0ICovCkBAIC0zNzAsOCArMzUzLDkgQEAKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJZHJ2ZGF0YS0+cmVhZF9idWZmZXJfaW5fdXNlIC09IGJ5dGVzX3RvX3JlYWQ7Ci0JCW1lbWNweShkcnZkYXRhLT5yZWFkX2J1ZmZlciArIGJ5dGVzX3RvX3JlYWQsCi0JCQkJZHJ2ZGF0YS0+cmVhZF9idWZmZXIsIDQgLSBieXRlc190b19yZWFkKTsKKwkJbWVtbW92ZShkcnZkYXRhLT5yZWFkX2J1ZmZlciwKKwkJICAgICAgIGRydmRhdGEtPnJlYWRfYnVmZmVyICsgYnl0ZXNfdG9fcmVhZCwKKwkJICAgICAgIDQgLSBieXRlc190b19yZWFkKTsKIAl9IGVsc2UgewogCQkvKiBHZXQgbmV3IGRhdGEgZnJvbSB0aGUgSUNBUCwgYW5kIHJldHVybiB3YXMgd2FzIHJlcXVlc3RlZC4gKi8KIAkJa2J1ZiA9ICh1MzIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwpAQCAtNDE0LDE4ICszOTgsMjAgQEAKIAkJCXN0YXR1cyA9IC1FRkFVTFQ7CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCW1lbWNweShrYnVmLCBkcnZkYXRhLT5yZWFkX2J1ZmZlciwgYnl0ZXNfcmVtYWluaW5nKTsKKwkJbWVtY3B5KGRydmRhdGEtPnJlYWRfYnVmZmVyLAorCQkgICAgICAga2J1ZiwKKwkJICAgICAgIGJ5dGVzX3JlbWFpbmluZyk7CiAJCWRydmRhdGEtPnJlYWRfYnVmZmVyX2luX3VzZSA9IGJ5dGVzX3JlbWFpbmluZzsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWtidWYpOwogCX0KIAlzdGF0dXMgPSBieXRlc190b19yZWFkOwogIGVycm9yOgotCXVwKCZkcnZkYXRhLT5zZW0pOworCW11dGV4X3VubG9jaygmZHJ2ZGF0YS0+c2VtKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgc3NpemVfdAotaHdpY2FwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCitod2ljYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBod2ljYXBfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTQzNSw4ICs0MjEsOSBAQAogCXNzaXplX3QgbGVuOwogCXNzaXplX3Qgc3RhdHVzOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZHJ2ZGF0YS0+c2VtKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlzdGF0dXMgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRydmRhdGEtPnNlbSk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKIAogCWxlZnQgKz0gZHJ2ZGF0YS0+d3JpdGVfYnVmZmVyX2luX3VzZTsKIApAQCAtNDY1LDcgKzQ1Miw3IEBACiAJCQltZW1jcHkoa2J1ZiwgZHJ2ZGF0YS0+d3JpdGVfYnVmZmVyLAogCQkJCQlkcnZkYXRhLT53cml0ZV9idWZmZXJfaW5fdXNlKTsKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigKLQkJCSAgICAoKChjaGFyICopa2J1ZikgKyAoZHJ2ZGF0YS0+d3JpdGVfYnVmZmVyX2luX3VzZSkpLAorCQkJICAgICgoKGNoYXIgKilrYnVmKSArIGRydmRhdGEtPndyaXRlX2J1ZmZlcl9pbl91c2UpLAogCQkJICAgIGJ1ZiArIHdyaXR0ZW4sCiAJCQkgICAgbGVuIC0gKGRydmRhdGEtPndyaXRlX2J1ZmZlcl9pbl91c2UpKSkgewogCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrYnVmKTsKQEAgLTUwOCw3ICs0OTUsNyBAQAogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrYnVmKTsKIAlzdGF0dXMgPSB3cml0dGVuOwogIGVycm9yOgotCXVwKCZkcnZkYXRhLT5zZW0pOworCW11dGV4X3VubG9jaygmZHJ2ZGF0YS0+c2VtKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC01MTksOCArNTA2LDkgQEAKIAogCWRydmRhdGEgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGh3aWNhcF9kcnZkYXRhLCBjZGV2KTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRydmRhdGEtPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJc3RhdHVzID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkcnZkYXRhLT5zZW0pOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CiAKIAlpZiAoZHJ2ZGF0YS0+aXNfb3BlbikgewogCQlzdGF0dXMgPSAtRUJVU1k7CkBAIC01MzksNyArNTI3LDcgQEAKIAlkcnZkYXRhLT5pc19vcGVuID0gMTsKIAogIGVycm9yOgotCXVwKCZkcnZkYXRhLT5zZW0pOworCW11dGV4X3VubG9jaygmZHJ2ZGF0YS0+c2VtKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC01NDksOCArNTM3LDcgQEAKIAlpbnQgaTsKIAlpbnQgc3RhdHVzID0gMDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRydmRhdGEtPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJbXV0ZXhfbG9jaygmZHJ2ZGF0YS0+c2VtKTsKIAogCWlmIChkcnZkYXRhLT53cml0ZV9idWZmZXJfaW5fdXNlKSB7CiAJCS8qIEZsdXNoIHdyaXRlIGJ1ZmZlci4gKi8KQEAgLTU2OSw3ICs1NTYsNyBAQAogCiAgZXJyb3I6CiAJZHJ2ZGF0YS0+aXNfb3BlbiA9IDA7Ci0JdXAoJmRydmRhdGEtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZkcnZkYXRhLT5zZW0pOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTU5MiwzMSArNTc5LDM2IEBACiAKIAlkZXZfaW5mbyhkZXYsICJYaWxpbnggaWNhcCBwb3J0IGRyaXZlclxuIik7CiAKKwltdXRleF9sb2NrKCZpY2FwX3NlbSk7CisKIAlpZiAoaWQgPCAwKSB7CiAJCWZvciAoaWQgPSAwOyBpZCA8IEhXSUNBUF9ERVZJQ0VTOyBpZCsrKQogCQkJaWYgKCFwcm9iZWRfZGV2aWNlc1tpZF0pCiAJCQkJYnJlYWs7CiAJfQogCWlmIChpZCA8IDAgfHwgaWQgPj0gSFdJQ0FQX0RFVklDRVMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpY2FwX3NlbSk7CiAJCWRldl9lcnIoZGV2LCAiJXMlaSB0b28gbGFyZ2VcbiIsIERSSVZFUl9OQU1FLCBpZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAocHJvYmVkX2RldmljZXNbaWRdKSB7CisJCW11dGV4X3VubG9jaygmaWNhcF9zZW0pOwogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhc3NpZ24gdG8gJXMlaTsgaXQgaXMgYWxyZWFkeSBpbiB1c2VcbiIsCiAJCQlEUklWRVJfTkFNRSwgaWQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCXByb2JlZF9kZXZpY2VzW2lkXSA9IDE7CisJbXV0ZXhfdW5sb2NrKCZpY2FwX3NlbSk7CiAKLQlkZXZ0ID0gTUtERVYoeGh3aWNhcF9tYWpvciwgeGh3aWNhcF9taW5vciArIGlkKTsKKwlkZXZ0ID0gTUtERVYoWEhXSUNBUF9NQUpPUiwgWEhXSUNBUF9NSU5PUiArIGlkKTsKIAotCWRydmRhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHdpY2FwX2RydmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh3aWNhcF9kcnZkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkcnZkYXRhKSB7CiAJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgZGV2aWNlIHByaXZhdGUgcmVjb3JkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkMDsKIAl9Ci0JbWVtc2V0KCh2b2lkICopZHJ2ZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBod2ljYXBfZHJ2ZGF0YSkpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopZHJ2ZGF0YSk7CiAKIAlpZiAoIXJlZ3NfcmVzKSB7CkBAIC02NDgsNyArNjQwLDcgQEAKIAlkcnZkYXRhLT5jb25maWcgPSBjb25maWc7CiAJZHJ2ZGF0YS0+Y29uZmlnX3JlZ3MgPSBjb25maWdfcmVnczsKIAotCWluaXRfTVVURVgoJmRydmRhdGEtPnNlbSk7CisJbXV0ZXhfaW5pdCgmZHJ2ZGF0YS0+c2VtKTsKIAlkcnZkYXRhLT5pc19vcGVuID0gMDsKIAogCWRldl9pbmZvKGRldiwgImlvcmVtYXAgJWx4IHRvICVwIHdpdGggc2l6ZSAleFxuIiwKQEAgLTY2Myw3ICs2NTUsNyBAQAogCQlnb3RvIGZhaWxlZDM7CiAJfQogCS8qICBkZXZmc19ta19jZGV2KGRldnQsIFNfSUZDSFJ8U19JUlVHT3xTX0lXVUdPLCBEUklWRVJfTkFNRSk7ICovCi0JY2xhc3NfZGV2aWNlX2NyZWF0ZShpY2FwX2NsYXNzLCBOVUxMLCBkZXZ0LCBOVUxMLCBEUklWRVJfTkFNRSk7CisJZGV2aWNlX2NyZWF0ZShpY2FwX2NsYXNzLCBkZXYsIGRldnQsICIlcyVkIiwgRFJJVkVSX05BTUUsIGlkKTsKIAlyZXR1cm4gMDsJCS8qIHN1Y2Nlc3MgKi8KIAogIGZhaWxlZDM6CkBAIC02NzUsMTggKzY2NywyNSBAQAogIGZhaWxlZDE6CiAJa2ZyZWUoZHJ2ZGF0YSk7CiAKKyBmYWlsZWQwOgorCW11dGV4X2xvY2soJmljYXBfc2VtKTsKKwlwcm9iZWRfZGV2aWNlc1tpZF0gPSAwOworCW11dGV4X3VubG9jaygmaWNhcF9zZW0pOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHN0cnVjdCBod2ljYXBfZHJpdmVyX2NvbmZpZyBidWZmZXJfaWNhcF9jb25maWcgPSB7CiAJLmdldF9jb25maWd1cmF0aW9uID0gYnVmZmVyX2ljYXBfZ2V0X2NvbmZpZ3VyYXRpb24sCiAJLnNldF9jb25maWd1cmF0aW9uID0gYnVmZmVyX2ljYXBfc2V0X2NvbmZpZ3VyYXRpb24sCisJLmdldF9zdGF0dXMgPSBidWZmZXJfaWNhcF9nZXRfc3RhdHVzLAogCS5yZXNldCA9IGJ1ZmZlcl9pY2FwX3Jlc2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBod2ljYXBfZHJpdmVyX2NvbmZpZyBmaWZvX2ljYXBfY29uZmlnID0gewogCS5nZXRfY29uZmlndXJhdGlvbiA9IGZpZm9faWNhcF9nZXRfY29uZmlndXJhdGlvbiwKIAkuc2V0X2NvbmZpZ3VyYXRpb24gPSBmaWZvX2ljYXBfc2V0X2NvbmZpZ3VyYXRpb24sCisJLmdldF9zdGF0dXMgPSBmaWZvX2ljYXBfZ2V0X3N0YXR1cywKIAkucmVzZXQgPSBmaWZvX2ljYXBfcmVzZXQsCiB9OwogCkBAIC02OTksMTQgKzY5OCwxNiBAQAogCWlmICghZHJ2ZGF0YSkKIAkJcmV0dXJuIDA7CiAKLQljbGFzc19kZXZpY2VfZGVzdHJveShpY2FwX2NsYXNzLCBkcnZkYXRhLT5kZXZ0KTsKKwlkZXZpY2VfZGVzdHJveShpY2FwX2NsYXNzLCBkcnZkYXRhLT5kZXZ0KTsKIAljZGV2X2RlbCgmZHJ2ZGF0YS0+Y2Rldik7CiAJaW91bm1hcChkcnZkYXRhLT5iYXNlX2FkZHJlc3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihkcnZkYXRhLT5tZW1fc3RhcnQsIGRydmRhdGEtPm1lbV9zaXplKTsKIAlrZnJlZShkcnZkYXRhKTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKLQlwcm9iZWRfZGV2aWNlc1tNSU5PUihkZXYtPmRldnQpLXhod2ljYXBfbWlub3JdID0gMDsKIAorCW11dGV4X2xvY2soJmljYXBfc2VtKTsKKwlwcm9iZWRfZGV2aWNlc1tNSU5PUihkZXYtPmRldnQpLVhIV0lDQVBfTUlOT1JdID0gMDsKKwltdXRleF91bmxvY2soJmljYXBfc2VtKTsKIAlyZXR1cm4gMDsJCS8qIHN1Y2Nlc3MgKi8KIH0KIApAQCAtODIxLDQ2ICs4MjIsMzYgQEAKIH07CiAKIC8qIFJlZ2lzdHJhdGlvbiBoZWxwZXJzIHRvIGtlZXAgdGhlIG51bWJlciBvZiAjaWZkZWZzIHRvIGEgbWluaW11bSAqLwotc3RhdGljIGlubGluZSBpbnQgX19kZXZpbml0IGh3aWNhcF9vZl9yZWdpc3Rlcih2b2lkKQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IGh3aWNhcF9vZl9yZWdpc3Rlcih2b2lkKQogewogCXByX2RlYnVnKCJod2ljYXA6IGNhbGxpbmcgb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKClcbiIpOwogCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmh3aWNhcF9vZl9kcml2ZXIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19kZXZleGl0IGh3aWNhcF9vZl91bnJlZ2lzdGVyKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19leGl0IGh3aWNhcF9vZl91bnJlZ2lzdGVyKHZvaWQpCiB7CiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmh3aWNhcF9vZl9kcml2ZXIpOwogfQogI2Vsc2UgLyogQ09ORklHX09GICovCiAvKiBDT05GSUdfT0Ygbm90IGVuYWJsZWQ7IGRvIG5vdGhpbmcgaGVscGVycyAqLwotc3RhdGljIGlubGluZSBpbnQgX19kZXZpbml0IGh3aWNhcF9vZl9yZWdpc3Rlcih2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19kZXZleGl0IGh3aWNhcF9vZl91bnJlZ2lzdGVyKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IGh3aWNhcF9vZl9yZWdpc3Rlcih2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgX19leGl0IGh3aWNhcF9vZl91bnJlZ2lzdGVyKHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19PRiAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBod2ljYXBfbW9kdWxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGh3aWNhcF9tb2R1bGVfaW5pdCh2b2lkKQogewogCWRldl90IGRldnQ7CiAJaW50IHJldHZhbDsKIAogCWljYXBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ4aWxpbnhfY29uZmlnIik7CisJbXV0ZXhfaW5pdCgmaWNhcF9zZW0pOwogCi0JaWYgKHhod2ljYXBfbWFqb3IpIHsKLQkJZGV2dCA9IE1LREVWKHhod2ljYXBfbWFqb3IsIHhod2ljYXBfbWlub3IpOwotCQlyZXR2YWwgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKAotCQkJCWRldnQsCi0JCQkJSFdJQ0FQX0RFVklDRVMsCi0JCQkJRFJJVkVSX05BTUUpOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCXJldHVybiByZXR2YWw7Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2dCwKLQkJCQl4aHdpY2FwX21pbm9yLAotCQkJCUhXSUNBUF9ERVZJQ0VTLAotCQkJCURSSVZFUl9OQU1FKTsKLQkJaWYgKHJldHZhbCA8IDApCi0JCQlyZXR1cm4gcmV0dmFsOwotCQl4aHdpY2FwX21ham9yID0gTUFKT1IoZGV2dCk7Ci0JfQorCWRldnQgPSBNS0RFVihYSFdJQ0FQX01BSk9SLCBYSFdJQ0FQX01JTk9SKTsKKwlyZXR2YWwgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldnQsCisJCQkJCUhXSUNBUF9ERVZJQ0VTLAorCQkJCQlEUklWRVJfTkFNRSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CiAKIAlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmh3aWNhcF9wbGF0Zm9ybV9kcml2ZXIpOwogCkBAIC04ODMsOSArODc0LDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgaHdpY2FwX21vZHVsZV9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaHdpY2FwX21vZHVsZV9jbGVhbnVwKHZvaWQpCiB7Ci0JZGV2X3QgZGV2dCA9IE1LREVWKHhod2ljYXBfbWFqb3IsIHhod2ljYXBfbWlub3IpOworCWRldl90IGRldnQgPSBNS0RFVihYSFdJQ0FQX01BSk9SLCBYSFdJQ0FQX01JTk9SKTsKIAogCWNsYXNzX2Rlc3Ryb3koaWNhcF9jbGFzcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuaCBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuaAppbmRleCBhZTc3MWNhLi4xZjljOGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmgKKysrIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5oCkBAIC00OCw5ICs0OCw5IEBACiAJdTggd3JpdGVfYnVmZmVyWzRdOwogCXUzMiByZWFkX2J1ZmZlcl9pbl91c2U7CSAgLyogQWx3YXlzIGluIFswLDNdICovCiAJdTggcmVhZF9idWZmZXJbNF07Ci0JdTMyIG1lbV9zdGFydDsJCSAgLyogcGh5cy4gYWRkcmVzcyBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KLQl1MzIgbWVtX2VuZDsJCSAgLyogcGh5cy4gYWRkcmVzcyBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KLQl1MzIgbWVtX3NpemU7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zdGFydDsvKiBwaHlzLiBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVycyAqLworCXJlc291cmNlX3NpemVfdCBtZW1fZW5kOyAgLyogcGh5cy4gYWRkcmVzcyBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KKwlyZXNvdXJjZV9zaXplX3QgbWVtX3NpemU7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3M7LyogdmlydC4gYWRkcmVzcyBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KIAogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTYxLDE0ICs2MSwzMSBAQAogCWNvbnN0IHN0cnVjdCBjb25maWdfcmVnaXN0ZXJzICpjb25maWdfcmVnczsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAJYm9vbCBpc19vcGVuOwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBzZW07CiB9OwogCiBzdHJ1Y3QgaHdpY2FwX2RyaXZlcl9jb25maWcgeworCS8qIFJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGdpdmVuIGJ5IHNpemUgaW50byB0aGUgZGF0YSBidWZmZXIuCisJICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4gKi8KIAlpbnQgKCpnZXRfY29uZmlndXJhdGlvbikoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhLCB1MzIgKmRhdGEsCiAJCQl1MzIgc2l6ZSk7CisJLyogV3JpdGUgY29uZmlndXJhdGlvbiBkYXRhIGdpdmVuIGJ5IHNpemUgZnJvbSB0aGUgZGF0YSBidWZmZXIuCisJICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4gKi8KIAlpbnQgKCpzZXRfY29uZmlndXJhdGlvbikoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhLCB1MzIgKmRhdGEsCiAJCQl1MzIgc2l6ZSk7CisJLyogR2V0IHRoZSBzdGF0dXMgcmVnaXN0ZXIsIGJpdCBwYXR0ZXJuIGdpdmVuIGJ5OgorCSAqIEQ4IC0gMCA9IGNvbmZpZ3VyYXRpb24gZXJyb3IKKwkgKiBENyAtIDEgPSBhbGlnbm1lbnQgZm91bmQKKwkgKiBENiAtIDEgPSByZWFkYmFjayBpbiBwcm9ncmVzcworCSAqIEQ1IC0gMCA9IGFib3J0IGluIHByb2dyZXNzCisJICogRDQgLSBBbHdheXMgMQorCSAqIEQzIC0gQWx3YXlzIDEKKwkgKiBEMiAtIEFsd2F5cyAxCisJICogRDEgLSBBbHdheXMgMQorCSAqIEQwIC0gMSA9IG9wZXJhdGlvbiBjb21wbGV0ZWQKKwkgKi8KKwl1MzIgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgaHdpY2FwX2RydmRhdGEgKmRydmRhdGEpOworCS8qIFJlc2V0IHRoZSBodyAqLwogCXZvaWQgKCpyZXNldCkoc3RydWN0IGh3aWNhcF9kcnZkYXRhICpkcnZkYXRhKTsKIH07CiAKQEAgLTE2MywzMCArMTgwLDM3IEBACiAvKiBDb25zdGFudCB0byB1c2UgZm9yIENSQyBjaGVjayB3aGVuIENSQyBoYXMgYmVlbiBkaXNhYmxlZCAqLwogI2RlZmluZSBYSElfRElTQUJMRURfQVVUT19DUkMgICAgICAgMHgwMDAwREVGQ1VMCiAKKy8qIE1lYW5pbmdzIG9mIHRoZSBiaXRzIHJldHVybmVkIGJ5IGdldF9zdGF0dXMgKi8KKyNkZWZpbmUgWEhJX1NSX0NGR0VSUl9OX01BU0sgMHgwMDAwMDEwMCAvKiBDb25maWcgRXJyb3IgTWFzayAqLworI2RlZmluZSBYSElfU1JfREFMSUdOX01BU0sgMHgwMDAwMDA4MCAvKiBEYXRhIEFsaWdubWVudCBNYXNrICovCisjZGVmaW5lIFhISV9TUl9SSVBfTUFTSyAweDAwMDAwMDQwIC8qIFJlYWQgYmFjayBNYXNrICovCisjZGVmaW5lIFhISV9TUl9JTl9BQk9SVF9OX01BU0sgMHgwMDAwMDAyMCAvKiBTZWxlY3QgTWFwIEFib3J0IE1hc2sgKi8KKyNkZWZpbmUgWEhJX1NSX0RPTkVfTUFTSyAweDAwMDAwMDAxIC8qIERvbmUgYml0IE1hc2sgICovCisKIC8qKgotICogaHdpY2FwX3R5cGVfMV9yZWFkOiBHZW5lcmF0ZXMgYSBUeXBlIDEgcmVhZCBwYWNrZXQgaGVhZGVyLgotICogQHBhcmFtZXRlcjogUmVnaXN0ZXIgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRvIGJlIHJlYWQgYmFjay4KKyAqIGh3aWNhcF90eXBlXzFfcmVhZCAtIEdlbmVyYXRlcyBhIFR5cGUgMSByZWFkIHBhY2tldCBoZWFkZXIuCisgKiBAcmVnOiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgdG8gYmUgcmVhZCBiYWNrLgogICoKICAqIEdlbmVyYXRlcyBhIFR5cGUgMSByZWFkIHBhY2tldCBoZWFkZXIsIHdoaWNoIGlzIHVzZWQgdG8gaW5kaXJlY3RseQogICogcmVhZCByZWdpc3RlcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMuICBUaGlzIHBhY2tldCBtdXN0IHRoZW4KICAqIGJlIHNlbnQgdGhyb3VnaCB0aGUgaWNhcCBkZXZpY2UsIGFuZCBhIHJldHVybiBwYWNrZXQgcmVjZWl2ZWQgd2l0aAogICogdGhlIGluZm9ybWF0aW9uLgogICoqLwotc3RhdGljIGlubGluZSB1MzIgaHdpY2FwX3R5cGVfMV9yZWFkKHUzMiBSZWdpc3RlcikKK3N0YXRpYyBpbmxpbmUgdTMyIGh3aWNhcF90eXBlXzFfcmVhZCh1MzIgcmVnKQogewogCXJldHVybiAoWEhJX1RZUEVfMSA8PCBYSElfVFlQRV9TSElGVCkgfAotCQkoUmVnaXN0ZXIgPDwgWEhJX1JFR0lTVEVSX1NISUZUKSB8CisJCShyZWcgPDwgWEhJX1JFR0lTVEVSX1NISUZUKSB8CiAJCShYSElfT1BfUkVBRCA8PCBYSElfT1BfU0hJRlQpOwogfQogCiAvKioKLSAqIGh3aWNhcF90eXBlXzFfd3JpdGU6IEdlbmVyYXRlcyBhIFR5cGUgMSB3cml0ZSBwYWNrZXQgaGVhZGVyCi0gKiBAcGFyYW1ldGVyOiBSZWdpc3RlciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgdG8gYmUgcmVhZCBiYWNrLgorICogaHdpY2FwX3R5cGVfMV93cml0ZSAtIEdlbmVyYXRlcyBhIFR5cGUgMSB3cml0ZSBwYWNrZXQgaGVhZGVyCisgKiBAcmVnOiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgdG8gYmUgcmVhZCBiYWNrLgogICoqLwotc3RhdGljIGlubGluZSB1MzIgaHdpY2FwX3R5cGVfMV93cml0ZSh1MzIgUmVnaXN0ZXIpCitzdGF0aWMgaW5saW5lIHUzMiBod2ljYXBfdHlwZV8xX3dyaXRlKHUzMiByZWcpCiB7CiAJcmV0dXJuIChYSElfVFlQRV8xIDw8IFhISV9UWVBFX1NISUZUKSB8Ci0JCShSZWdpc3RlciA8PCBYSElfUkVHSVNURVJfU0hJRlQpIHwKKwkJKHJlZyA8PCBYSElfUkVHSVNURVJfU0hJRlQpIHwKIAkJKFhISV9PUF9XUklURSA8PCBYSElfT1BfU0hJRlQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQppbmRleCBhNTIyMjU0Li4xNTI1ODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACitvYmotJChDT05GSUdfQVRNRUxfVENCX0NMS1NSQykJKz0gdGNiX2Nsa3NyYy5vCiBvYmotJChDT05GSUdfWDg2X0NZQ0xPTkVfVElNRVIpCSs9IGN5Y2xvbmUubwogb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gYWNwaV9wbS5vCiBvYmotJChDT05GSUdfU0N4MjAwSFJfVElNRVIpCSs9IHNjeDIwMF9ocnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3RjYl9jbGtzcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDUwNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKQEAgLTAsMCArMSwzMDIgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWVsX3RjLmg+CisKKworLyoKKyAqIFdlJ3JlIGNvbmZpZ3VyZWQgdG8gdXNlIGEgc3BlY2lmaWMgVEMgYmxvY2ssIG9uZSB0aGF0J3Mgbm90IGhvb2tlZAorICogdXAgdG8gZXh0ZXJuYWwgaGFyZHdhcmUsIHRvIHByb3ZpZGUgYSB0aW1lIHNvbHV0aW9uOgorICoKKyAqICAgLSBUd28gY2hhbm5lbHMgY29tYmluZSB0byBjcmVhdGUgYSBmcmVlLXJ1bm5pbmcgMzIgYml0IGNvdW50ZXIKKyAqICAgICB3aXRoIGEgYmFzZSByYXRlIG9mIDUrIE1IeiwgcGFja2FnZWQgYXMgYSBjbG9ja3NvdXJjZSAod2l0aAorICogICAgIHJlc29sdXRpb24gYmV0dGVyIHRoYW4gMjAwIG5zZWMpLgorICoKKyAqICAgLSBUaGUgdGhpcmQgY2hhbm5lbCBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGEgMTYtYml0IGNsb2NrZXZlbnQKKyAqICAgICBzb3VyY2UsIHVzZWQgaW4gZWl0aGVyIHBlcmlvZGljIG9yIG9uZXNob3QgbW9kZS4gIFRoaXMgcnVucworICogICAgIGF0IDMyIEtpSFosIGFuZCBjYW4gaGFuZGxlIGRlbGF5cyBvZiB1cCB0byB0d28gc2Vjb25kcy4KKyAqCisgKiBBIGJvb3QgY2xvY2tzb3VyY2UgYW5kIGNsb2NrZXZlbnQgc291cmNlIGFyZSBhbHNvIGN1cnJlbnRseSBuZWVkZWQsCisgKiB1bmxlc3MgdGhlIHJlbGV2YW50IHBsYXRmb3JtcyAoQVJNL0FUOTEsIEFWUjMyL0FUMzIpIGFyZSBjaGFuZ2VkIHNvCisgKiB0aGlzIGNvZGUgY2FuIGJlIHVzZWQgd2hlbiBpbml0X3RpbWVycygpIGlzIGNhbGxlZCwgd2VsbCBiZWZvcmUgbW9zdAorICogZGV2aWNlcyBhcmUgc2V0IHVwLiAgKFNvbWUgbG93IGVuZCBBVDkxIHBhcnRzLCB3aGljaCBjYW4gcnVuIHVDbGludXgsCisgKiBoYXZlIG9ubHkgdGhlIHRpbWVycyBpbiBvbmUgVEMgYmxvY2suLi4gdGhleSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydAorICogdGhlIHRjbGliIGNvZGUsIGJlY2F1c2Ugb2YgdGhhdCBpbml0aWFsaXphdGlvbiBpc3N1ZS4pCisgKgorICogUkVWSVNJVCBiZWhhdmlvciBkdXJpbmcgc3lzdGVtIHN1c3BlbmQgc3RhdGVzLi4uIHdlIHNob3VsZCBkaXNhYmxlCisgKiBhbGwgY2xvY2tzIGFuZCBzYXZlIHRoZSBwb3dlci4gIEVhc2lseSBkb25lIGZvciBjbG9ja2V2ZW50IGRldmljZXMsCisgKiBidXQgY2xvY2tzb3VyY2VzIHdvbid0IG5lY2Vzc2FyaWx5IGdldCB0aGUgbmVlZGVkIG5vdGlmaWNhdGlvbnMuCisgKiBGb3IgZGVlcGVyIHN5c3RlbSBzbGVlcCBzdGF0ZXMsIHRoaXMgd2lsbCBiZSBtYW5kYXRvcnkuLi4KKyAqLworCitzdGF0aWMgdm9pZCBfX2lvbWVtICp0Y2FkZHI7CisKK3N0YXRpYyBjeWNsZV90IHRjX2dldF9jeWNsZXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXUzMgkJbG93ZXIsIHVwcGVyOworCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlkbyB7CisJCXVwcGVyID0gX19yYXdfcmVhZGwodGNhZGRyICsgQVRNRUxfVENfUkVHKDEsIENWKSk7CisJCWxvd2VyID0gX19yYXdfcmVhZGwodGNhZGRyICsgQVRNRUxfVENfUkVHKDAsIENWKSk7CisJfSB3aGlsZSAodXBwZXIgIT0gX19yYXdfcmVhZGwodGNhZGRyICsgQVRNRUxfVENfUkVHKDEsIENWKSkpOworCisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gKHVwcGVyIDw8IDE2KSB8IGxvd2VyOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsa3NyYyA9IHsKKwkubmFtZSAgICAgICAgICAgPSAidGNiX2Nsa3NyYyIsCisJLnJhdGluZyAgICAgICAgID0gMjAwLAorCS5yZWFkICAgICAgICAgICA9IHRjX2dldF9jeWNsZXMsCisJLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLnNoaWZ0ICAgICAgICAgID0gMTgsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCisKK3N0cnVjdCB0Y19jbGtldnRfZGV2aWNlIHsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlCWNsa2V2dDsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKwl2b2lkIF9faW9tZW0JCQkqcmVnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGNfY2xrZXZ0X2RldmljZSAqdG9fdGNfY2xrZXZ0KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsa2V2dCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNsa2V2dCwgc3RydWN0IHRjX2Nsa2V2dF9kZXZpY2UsIGNsa2V2dCk7Cit9CisKKy8qIEZvciBub3csIHdlIGFsd2F5cyB1c2UgdGhlIDMySyBjbG9jayAuLi4gdGhpcyBvcHRpbWl6ZXMgZm9yIE5PX0haLAorICogYmVjYXVzZSB1c2luZyBvbmUgb2YgdGhlIGRpdmlkZWQgY2xvY2tzIHdvdWxkIHVzdWFsbHkgbWVhbiB0aGUKKyAqIHRpY2sgcmF0ZSBjYW4gbmV2ZXIgYmUgbGVzcyB0aGFuIHNldmVyYWwgZG96ZW4gSHogKHZzIDAuNSBIeikuCisgKgorICogQSBkaXZpZGVkIGNsb2NrIGNvdWxkIGJlIGdvb2QgZm9yIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMsIHNpbmNlCisgKiAzMC41IHVzZWMgcmVzb2x1dGlvbiBjYW4gc2VlbSAibG93Ii4KKyAqLworc3RhdGljIHUzMiB0aW1lcl9jbG9jazsKKworc3RhdGljIHZvaWQgdGNfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZCkKK3sKKwlzdHJ1Y3QgdGNfY2xrZXZ0X2RldmljZSAqdGNkID0gdG9fdGNfY2xrZXZ0KGQpOworCXZvaWQgX19pb21lbQkJKnJlZ3MgPSB0Y2QtPnJlZ3M7CisKKwlpZiAodGNkLT5jbGtldnQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQworCQkJfHwgdGNkLT5jbGtldnQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKSB7CisJCV9fcmF3X3dyaXRlbCgweGZmLCByZWdzICsgQVRNRUxfVENfUkVHKDIsIElEUikpOworCQlfX3Jhd193cml0ZWwoQVRNRUxfVENfQ0xLRElTLCByZWdzICsgQVRNRUxfVENfUkVHKDIsIENDUikpOworCQljbGtfZGlzYWJsZSh0Y2QtPmNsayk7CisJfQorCisJc3dpdGNoIChtKSB7CisKKwkvKiBCeSBub3QgbWFraW5nIHRoZSBnZW50aW1lIGNvcmUgZW11bGF0ZSBwZXJpb2RpYyBtb2RlIG9uIHRvcAorCSAqIG9mIG9uZXNob3QsIHdlIGdldCBsb3dlciBvdmVyaGVhZCBhbmQgaW1wcm92ZWQgYWNjdXJhY3kuCisJICovCisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJY2xrX2VuYWJsZSh0Y2QtPmNsayk7CisKKwkJLyogc2xvdyBjbG9jaywgY291bnQgdXAgdG8gUkMsIHRoZW4gaXJxIGFuZCByZXN0YXJ0ICovCisJCV9fcmF3X3dyaXRlbCh0aW1lcl9jbG9jaworCQkJCXwgQVRNRUxfVENfV0FWRSB8IEFUTUVMX1RDX1dBVkVTRUxfVVBfQVVUTywKKwkJCQlyZWdzICsgQVRNRUxfVENfUkVHKDIsIENNUikpOworCQlfX3Jhd193cml0ZWwoKDMyNzY4ICsgSFovMikgLyBIWiwgdGNhZGRyICsgQVRNRUxfVENfUkVHKDIsIFJDKSk7CisKKwkJLyogRW5hYmxlIGNsb2NrIGFuZCBpbnRlcnJ1cHRzIG9uIFJDIGNvbXBhcmUgKi8KKwkJX19yYXdfd3JpdGVsKEFUTUVMX1RDX0NQQ1MsIHJlZ3MgKyBBVE1FTF9UQ19SRUcoMiwgSUVSKSk7CisKKwkJLyogZ28gZ28gZ2FkZ2V0ISAqLworCQlfX3Jhd193cml0ZWwoQVRNRUxfVENfQ0xLRU4gfCBBVE1FTF9UQ19TV1RSRywKKwkJCQlyZWdzICsgQVRNRUxfVENfUkVHKDIsIENDUikpOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJY2xrX2VuYWJsZSh0Y2QtPmNsayk7CisKKwkJLyogc2xvdyBjbG9jaywgY291bnQgdXAgdG8gUkMsIHRoZW4gaXJxIGFuZCBzdG9wICovCisJCV9fcmF3X3dyaXRlbCh0aW1lcl9jbG9jayB8IEFUTUVMX1RDX0NQQ1NUT1AKKwkJCQl8IEFUTUVMX1RDX1dBVkUgfCBBVE1FTF9UQ19XQVZFU0VMX1VQX0FVVE8sCisJCQkJcmVncyArIEFUTUVMX1RDX1JFRygyLCBDTVIpKTsKKwkJX19yYXdfd3JpdGVsKEFUTUVMX1RDX0NQQ1MsIHJlZ3MgKyBBVE1FTF9UQ19SRUcoMiwgSUVSKSk7CisKKwkJLyogc2V0X25leHRfZXZlbnQoKSBjb25maWd1cmVzIGFuZCBzdGFydHMgdGhlIHRpbWVyICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHRjX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZCkKK3sKKwlfX3Jhd193cml0ZWwoZGVsdGEsIHRjYWRkciArIEFUTUVMX1RDX1JFRygyLCBSQykpOworCisJLyogZ28gZ28gZ2FkZ2V0ISAqLworCV9fcmF3X3dyaXRlbChBVE1FTF9UQ19DTEtFTiB8IEFUTUVMX1RDX1NXVFJHLAorCQkJdGNhZGRyICsgQVRNRUxfVENfUkVHKDIsIENDUikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHRjX2Nsa2V2dF9kZXZpY2UgY2xrZXZ0ID0geworCS5jbGtldnQJPSB7CisJCS5uYW1lCQk9ICJ0Y19jbGtldnQiLAorCQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQworCQkJCQl8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJCS5zaGlmdAkJPSAzMiwKKwkJLyogU2hvdWxkIGJlIGxvd2VyIHRoYW4gYXQ5MXJtOTIwMCdzIHN5c3RlbSB0aW1lciAqLworCQkucmF0aW5nCQk9IDEyNSwKKwkJLmNwdW1hc2sJPSBDUFVfTUFTS19DUFUwLAorCQkuc2V0X25leHRfZXZlbnQJPSB0Y19uZXh0X2V2ZW50LAorCQkuc2V0X21vZGUJPSB0Y19tb2RlLAorCX0sCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgY2gyX2lycShpbnQgaXJxLCB2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IHRjX2Nsa2V2dF9kZXZpY2UJKmRldiA9IGhhbmRsZTsKKwl1bnNpZ25lZCBpbnQJCXNyOworCisJc3IgPSBfX3Jhd19yZWFkbChkZXYtPnJlZ3MgKyBBVE1FTF9UQ19SRUcoMiwgU1IpKTsKKwlpZiAoc3IgJiBBVE1FTF9UQ19DUENTKSB7CisJCWRldi0+Y2xrZXZ0LmV2ZW50X2hhbmRsZXIoJmRldi0+Y2xrZXZ0KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGNfaXJxYWN0aW9uID0geworCS5uYW1lCQk9ICJ0Y19jbGtldnQiLAorCS5mbGFncwkJPSBJUlFGX1RJTUVSIHwgSVJRRl9ESVNBQkxFRCwKKwkuaGFuZGxlcgk9IGNoMl9pcnEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfY2xrZXZlbnRzKHN0cnVjdCBhdG1lbF90YyAqdGMsIGludCBjbGszMmtfZGl2aXNvcl9pZHgpCit7CisJc3RydWN0IGNsayAqdDJfY2xrID0gdGMtPmNsa1syXTsKKwlpbnQgaXJxID0gdGMtPmlycVsyXTsKKworCWNsa2V2dC5yZWdzID0gdGMtPnJlZ3M7CisJY2xrZXZ0LmNsayA9IHQyX2NsazsKKwl0Y19pcnFhY3Rpb24uZGV2X2lkID0gJmNsa2V2dDsKKworCXRpbWVyX2Nsb2NrID0gY2xrMzJrX2Rpdmlzb3JfaWR4OworCisJY2xrZXZ0LmNsa2V2dC5tdWx0ID0gZGl2X3NjKDMyNzY4LCBOU0VDX1BFUl9TRUMsIGNsa2V2dC5jbGtldnQuc2hpZnQpOworCWNsa2V2dC5jbGtldnQubWF4X2RlbHRhX25zCisJCT0gY2xvY2tldmVudF9kZWx0YTJucygweGZmZmYsICZjbGtldnQuY2xrZXZ0KTsKKwljbGtldnQuY2xrZXZ0Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJmNsa2V2dC5jbGtldnQpICsgMTsKKworCXNldHVwX2lycShpcnEsICZ0Y19pcnFhY3Rpb24pOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZjbGtldnQuY2xrZXZ0KTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9jbGtldmVudHMoc3RydWN0IGF0bWVsX3RjICp0YywgaW50IGNsazMya19kaXZpc29yX2lkeCkKK3sKKwkvKiBOT1RISU5HICovCit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCB0Y2JfY2xrc3JjX2luaXQodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBib290aW5mb1tdIF9faW5pdGRhdGEKKwkJPSBLRVJOX0RFQlVHICIlczogdGMlZCBhdCAlZC4lMDNkIE1IelxuIjsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGF0bWVsX3RjICp0YzsKKwlzdHJ1Y3QgY2xrICp0MF9jbGs7CisJdTMyIHJhdGUsIGRpdmlkZWRfcmF0ZSA9IDA7CisJaW50IGJlc3RfZGl2aXNvcl9pZHggPSAtMTsKKwlpbnQgY2xrMzJrX2Rpdmlzb3JfaWR4ID0gLTE7CisJaW50IGk7CisKKwl0YyA9IGF0bWVsX3RjX2FsbG9jKENPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLLCBjbGtzcmMubmFtZSk7CisJaWYgKCF0YykgeworCQlwcl9kZWJ1ZygiY2FuJ3QgYWxsb2MgVEMgZm9yIGNsb2Nrc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXRjYWRkciA9IHRjLT5yZWdzOworCXBkZXYgPSB0Yy0+cGRldjsKKworCXQwX2NsayA9IHRjLT5jbGtbMF07CisJY2xrX2VuYWJsZSh0MF9jbGspOworCisJLyogSG93IGZhc3Qgd2lsbCB3ZSBiZSBjb3VudGluZz8gIFBpY2sgc29tZXRoaW5nIG92ZXIgNSBNSHouICAqLworCXJhdGUgPSAodTMyKSBjbGtfZ2V0X3JhdGUodDBfY2xrKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXVuc2lnbmVkIGRpdmlzb3IgPSBhdG1lbF90Y19kaXZpc29yc1tpXTsKKwkJdW5zaWduZWQgdG1wOworCisJCS8qIHJlbWVtYmVyIDMyIEtpSHogY2xvY2sgZm9yIGxhdGVyICovCisJCWlmICghZGl2aXNvcikgeworCQkJY2xrMzJrX2Rpdmlzb3JfaWR4ID0gaTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdG1wID0gcmF0ZSAvIGRpdmlzb3I7CisJCXByX2RlYnVnKCJUQzogJXUgLyAlLTN1IFslZF0gLS0+ICV1XG4iLCByYXRlLCBkaXZpc29yLCBpLCB0bXApOworCQlpZiAoYmVzdF9kaXZpc29yX2lkeCA+IDApIHsKKwkJCWlmICh0bXAgPCA1ICogMTAwMCAqIDEwMDApCisJCQkJY29udGludWU7CisJCX0KKwkJZGl2aWRlZF9yYXRlID0gdG1wOworCQliZXN0X2Rpdmlzb3JfaWR4ID0gaTsKKwl9CisKKwljbGtzcmMubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoZGl2aWRlZF9yYXRlLCBjbGtzcmMuc2hpZnQpOworCisJcHJpbnRrKGJvb3RpbmZvLCBjbGtzcmMubmFtZSwgQ09ORklHX0FUTUVMX1RDQl9DTEtTUkNfQkxPQ0ssCisJCQlkaXZpZGVkX3JhdGUgLyAxMDAwMDAwLAorCQkJKChkaXZpZGVkX3JhdGUgKyA1MDAwMDApICUgMTAwMDAwMCkgLyAxMDAwKTsKKworCS8qIHRjbGliIHdpbGwgZ2l2ZSB1cyB0aHJlZSBjbG9ja3Mgbm8gbWF0dGVyIHdoYXQgdGhlCisJICogdW5kZXJseWluZyBwbGF0Zm9ybSBzdXBwb3J0cy4KKwkgKi8KKwljbGtfZW5hYmxlKHRjLT5jbGtbMV0pOworCisJLyogY2hhbm5lbCAwOiAgd2F2ZWZvcm0gbW9kZSwgaW5wdXQgbWNsay84LCBjbG9jayBUSU9BMCBvbiBvdmVyZmxvdyAqLworCV9fcmF3X3dyaXRlbChiZXN0X2Rpdmlzb3JfaWR4CQkJLyogbGlrZWx5IGRpdmlkZS1ieS04ICovCisJCQl8IEFUTUVMX1RDX1dBVkUKKwkJCXwgQVRNRUxfVENfV0FWRVNFTF9VUAkJLyogZnJlZS1ydW4gKi8KKwkJCXwgQVRNRUxfVENfQUNQQV9TRVQJCS8qIFRJT0EwIHJpc2VzIGF0IDAgKi8KKwkJCXwgQVRNRUxfVENfQUNQQ19DTEVBUiwJCS8qIChkdXR5IGN5Y2xlIDUwJSkgKi8KKwkJCXRjYWRkciArIEFUTUVMX1RDX1JFRygwLCBDTVIpKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwLCB0Y2FkZHIgKyBBVE1FTF9UQ19SRUcoMCwgUkEpKTsKKwlfX3Jhd193cml0ZWwoMHg4MDAwLCB0Y2FkZHIgKyBBVE1FTF9UQ19SRUcoMCwgUkMpKTsKKwlfX3Jhd193cml0ZWwoMHhmZiwgdGNhZGRyICsgQVRNRUxfVENfUkVHKDAsIElEUikpOwkvKiBubyBpcnFzICovCisJX19yYXdfd3JpdGVsKEFUTUVMX1RDX0NMS0VOLCB0Y2FkZHIgKyBBVE1FTF9UQ19SRUcoMCwgQ0NSKSk7CisKKwkvKiBjaGFubmVsIDE6ICB3YXZlZm9ybSBtb2RlLCBpbnB1dCBUSU9BMCAqLworCV9fcmF3X3dyaXRlbChBVE1FTF9UQ19YQzEJCQkvKiBpbnB1dDogVElPQTAgKi8KKwkJCXwgQVRNRUxfVENfV0FWRQorCQkJfCBBVE1FTF9UQ19XQVZFU0VMX1VQLAkJLyogZnJlZS1ydW4gKi8KKwkJCXRjYWRkciArIEFUTUVMX1RDX1JFRygxLCBDTVIpKTsKKwlfX3Jhd193cml0ZWwoMHhmZiwgdGNhZGRyICsgQVRNRUxfVENfUkVHKDEsIElEUikpOwkvKiBubyBpcnFzICovCisJX19yYXdfd3JpdGVsKEFUTUVMX1RDX0NMS0VOLCB0Y2FkZHIgKyBBVE1FTF9UQ19SRUcoMSwgQ0NSKSk7CisKKwkvKiBjaGFpbiBjaGFubmVsIDAgdG8gY2hhbm5lbCAxLCB0aGVuIHJlc2V0IGFsbCB0aGUgdGltZXJzICovCisJX19yYXdfd3JpdGVsKEFUTUVMX1RDX1RDMVhDMVNfVElPQTAsIHRjYWRkciArIEFUTUVMX1RDX0JNUik7CisJX19yYXdfd3JpdGVsKEFUTUVMX1RDX1NZTkMsIHRjYWRkciArIEFUTUVMX1RDX0JDUik7CisKKwkvKiBhbmQgYXdheSB3ZSBnbyEgKi8KKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xrc3JjKTsKKworCS8qIGNoYW5uZWwgMjogIHBlcmlvZGljIGFuZCBvbmVzaG90IHRpbWVyIHN1cHBvcnQgKi8KKwlzZXR1cF9jbGtldmVudHModGMsIGNsazMya19kaXZpc29yX2lkeCk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwodGNiX2Nsa3NyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCmluZGV4IDU3MzJjYTMuLmI2ZmU3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKIAlkZXYtPm5scyA9IG5sczsKIAotCWRldi0+Y25fcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKGRldi0+bmFtZSk7CisJZGV2LT5jbl9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldi0+bmFtZSk7CiAJaWYgKCFkZXYtPmNuX3F1ZXVlKSB7CiAJCWtmcmVlKGRldik7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwppbmRleCBmZWEyZDNlLi44NWUyYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwpAQCAtNDcsNyArNDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNuX2RldiBjZGV2OwogCi1pbnQgY25fYWxyZWFkeV9pbml0aWFsaXplZCA9IDA7CitzdGF0aWMgaW50IGNuX2FscmVhZHlfaW5pdGlhbGl6ZWQ7CiAKIC8qCiAgKiBtc2ctPnNlcSBhbmQgbXNnLT5hY2sgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIG1lc3NhZ2UgZ2VuZWFsb2d5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggNjQ5MjZhYS4uMzVhMjZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC02NzEsMTMgKzY3MSwxMyBAQAogewogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHBvbGljeSA9IHRvX3BvbGljeShrb2JqKTsKIAlzdHJ1Y3QgZnJlcV9hdHRyICogZmF0dHIgPSB0b19hdHRyKGF0dHIpOwotCXNzaXplX3QgcmV0OworCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKIAlwb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQocG9saWN5LT5jcHUpOwogCWlmICghcG9saWN5KQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBub19wb2xpY3k7CiAKIAlpZiAobG9ja19wb2xpY3lfcndzZW1fcmVhZChwb2xpY3ktPmNwdSkgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBmYWlsOwogCiAJaWYgKGZhdHRyLT5zaG93KQogCQlyZXQgPSBmYXR0ci0+c2hvdyhwb2xpY3ksIGJ1Zik7CkBAIC02ODUsOCArNjg1LDkgQEAKIAkJcmV0ID0gLUVJTzsKIAogCXVubG9ja19wb2xpY3lfcndzZW1fcmVhZChwb2xpY3ktPmNwdSk7Ci0KK2ZhaWw6CiAJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7Citub19wb2xpY3k6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjk1LDEzICs2OTYsMTMgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKiBwb2xpY3kgPSB0b19wb2xpY3koa29iaik7CiAJc3RydWN0IGZyZXFfYXR0ciAqIGZhdHRyID0gdG9fYXR0cihhdHRyKTsKLQlzc2l6ZV90IHJldDsKKwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiAJcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KHBvbGljeS0+Y3B1KTsKIAlpZiAoIXBvbGljeSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gbm9fcG9saWN5OwogCiAJaWYgKGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKHBvbGljeS0+Y3B1KSA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIGZhaWw7CiAKIAlpZiAoZmF0dHItPnN0b3JlKQogCQlyZXQgPSBmYXR0ci0+c3RvcmUocG9saWN5LCBidWYsIGNvdW50KTsKQEAgLTcwOSw4ICs3MTAsOSBAQAogCQlyZXQgPSAtRUlPOwogCiAJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShwb2xpY3ktPmNwdSk7Ci0KK2ZhaWw6CiAJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7Citub19wb2xpY3k6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAwNiwxNCArMTAwOCw2IEBACiAJfQogI2VuZGlmCiAKLQotCWlmICgha29iamVjdF9nZXQoJmRhdGEtPmtvYmopKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQkJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7Ci0JCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCiAjaWZkZWYgQ09ORklHX1NNUAogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC0xNzgzLDcgKzE3NzcsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBjcHVmcmVxX2NwdV9ub3RpZmllciA9CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fcmVmZGF0YSBjcHVmcmVxX2NwdV9ub3RpZmllciA9CiB7CiAgICAgLm5vdGlmaWVyX2NhbGwgPSBjcHVmcmVxX2NwdV9jYWxsYmFjaywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwppbmRleCAxYjgzMTJiLi4wNzA0MjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKQEAgLTMyMyw3ICszMjMsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllciBfX2NwdWluaXRkYXRhID0KK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllciBfX3JlZmRhdGEgPQogewogCS5ub3RpZmllcl9jYWxsID0gY3B1ZnJlcV9zdGF0X2NwdV9jYWxsYmFjaywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwppbmRleCBkNzM2NjNhLi5mYzU1NWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAkvKiBlbnRlciB0aGUgc3RhdGUgYW5kIHVwZGF0ZSBzdGF0cyAqLwogCWRldi0+bGFzdF9yZXNpZGVuY3kgPSB0YXJnZXRfc3RhdGUtPmVudGVyKGRldiwgdGFyZ2V0X3N0YXRlKTsKIAlkZXYtPmxhc3Rfc3RhdGUgPSB0YXJnZXRfc3RhdGU7Ci0JdGFyZ2V0X3N0YXRlLT50aW1lICs9IGRldi0+bGFzdF9yZXNpZGVuY3k7CisJdGFyZ2V0X3N0YXRlLT50aW1lICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5sYXN0X3Jlc2lkZW5jeTsKIAl0YXJnZXRfc3RhdGUtPnVzYWdlKys7CiAKIAkvKiBnaXZlIHRoZSBnb3Zlcm5vciBhbiBvcHBvcnR1bml0eSB0byByZWZsZWN0IG9uIHRoZSBvdXRjb21lICovCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlzdGF0ZS0+ZXhpdF9sYXRlbmN5ID0gMDsKIAlzdGF0ZS0+dGFyZ2V0X3Jlc2lkZW5jeSA9IDA7CiAJc3RhdGUtPnBvd2VyX3VzYWdlID0gLTE7Ci0Jc3RhdGUtPmZsYWdzID0gQ1BVSURMRV9GTEFHX1BPTEwgfCBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRDsKKwlzdGF0ZS0+ZmxhZ3MgPSBDUFVJRExFX0ZMQUdfUE9MTDsKIAlzdGF0ZS0+ZW50ZXIgPSBwb2xsX2lkbGU7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMgYi9kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYwppbmRleCA2OTEwMmNhLi5lOTQ5NjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvc3lzZnMuYwpAQCAtMjE4LDYgKzIxOCwxMiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzdGF0ZS0+X25hbWUpO1wKIH0KIAorI2RlZmluZSBkZWZpbmVfc2hvd19zdGF0ZV91bGxfZnVuY3Rpb24oX25hbWUpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdGVfIyNfbmFtZShzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUsIGNoYXIgKmJ1ZikgXAoreyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgc3RhdGUtPl9uYW1lKTtcCit9CisKICNkZWZpbmUgZGVmaW5lX3Nob3dfc3RhdGVfc3RyX2Z1bmN0aW9uKF9uYW1lKSBcCiBzdGF0aWMgc3NpemVfdCBzaG93X3N0YXRlXyMjX25hbWUoc3RydWN0IGNwdWlkbGVfc3RhdGUgKnN0YXRlLCBjaGFyICpidWYpIFwKIHsgXApAQCAtMjI4LDggKzIzNCw4IEBACiAKIGRlZmluZV9zaG93X3N0YXRlX2Z1bmN0aW9uKGV4aXRfbGF0ZW5jeSkKIGRlZmluZV9zaG93X3N0YXRlX2Z1bmN0aW9uKHBvd2VyX3VzYWdlKQotZGVmaW5lX3Nob3dfc3RhdGVfZnVuY3Rpb24odXNhZ2UpCi1kZWZpbmVfc2hvd19zdGF0ZV9mdW5jdGlvbih0aW1lKQorZGVmaW5lX3Nob3dfc3RhdGVfdWxsX2Z1bmN0aW9uKHVzYWdlKQorZGVmaW5lX3Nob3dfc3RhdGVfdWxsX2Z1bmN0aW9uKHRpbWUpCiBkZWZpbmVfc2hvd19zdGF0ZV9zdHJfZnVuY3Rpb24obmFtZSkKIGRlZmluZV9zaG93X3N0YXRlX3N0cl9mdW5jdGlvbihkZXNjKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwppbmRleCA2YjY1OGQ4Li40M2I3MWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKQEAgLTI3LDYgKzI3LDcgQEAKIAl0cmlzdGF0ZSAiUGFkTG9jayBkcml2ZXIgZm9yIEFFUyBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBDUllQVE9fREVWX1BBRExPQ0sKIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCXNlbGVjdCBDUllQVE9fQUVTCiAJaGVscAogCSAgVXNlIFZJQSBQYWRMb2NrIGZvciBBRVMgYWxnb3JpdGhtLgogCkBAIC02NCw2ICs2NSw3IEBACiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFBDSS1hdHRhY2hlZCBjcnlwdG9ncmFwaGljIGFkYXB0ZXJzIgogCWRlcGVuZHMgb24gUzM5MAogCXNlbGVjdCBaQ1JZUFRfTU9OT0xJVEhJQyBpZiBaQ1JZUFQ9InkiCisJc2VsZWN0IEhXX1JBTkRPTQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgYSBQQ0ktYXR0YWNoZWQgY3J5cHRvZ3JhcGhpYwogCSAgYWRhcHRlciBsaWtlOgpAQCAtMTAwLDYgKzEwMiwxOSBAQAogCSAgVGhpcyB2ZXJzaW9uIG9mIFNIQSBpbXBsZW1lbnRzIGEgMjU2IGJpdCBoYXNoIHdpdGggMTI4IGJpdHMgb2YKIAkgIHNlY3VyaXR5IGFnYWluc3QgY29sbGlzaW9uIGF0dGFja3MuCiAKK2NvbmZpZyBDUllQVE9fU0hBNTEyX1MzOTAKKwl0cmlzdGF0ZSAiU0hBMzg0IGFuZCBTSEE1MTIgZGlnZXN0IGFsZ29yaXRobSIKKwlkZXBlbmRzIG9uIFMzOTAKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCisJICBTSEE1MTIgc2VjdXJlIGhhc2ggc3RhbmRhcmQuCisKKwkgIFRoaXMgdmVyc2lvbiBvZiBTSEEgaW1wbGVtZW50cyBhIDUxMiBiaXQgaGFzaCB3aXRoIDI1NiBiaXRzIG9mCisJICBzZWN1cml0eSBhZ2FpbnN0IGNvbGxpc2lvbiBhdHRhY2tzLiBUaGUgY29kZSBhbHNvIGluY2x1ZGVzIFNIQS0zODQsCisJICBhIDM4NCBiaXQgaGFzaCB3aXRoIDE5MiBiaXRzIG9mIHNlY3VyaXR5IGFnYWluc3QgY29sbGlzaW9uIGF0dGFja3MuCisKKwogY29uZmlnIENSWVBUT19ERVNfUzM5MAogCXRyaXN0YXRlICJERVMgYW5kIFRyaXBsZSBERVMgY2lwaGVyIGFsZ29yaXRobXMiCiAJZGVwZW5kcyBvbiBTMzkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYyBiL2RyaXZlcnMvY3J5cHRvL2hpZm5fNzk1eC5jCmluZGV4IGRmYmYyNGMuLjgxZjNmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2hpZm5fNzk1eC5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2hpZm5fNzk1eC5jCkBAIC0zOTIsOCArMzkyLDggQEAKIAogc3RydWN0IGhpZm5fZGVzYwogewotCXZvbGF0aWxlIHUzMgkJbDsKLQl2b2xhdGlsZSB1MzIJCXA7CisJdm9sYXRpbGUgX19sZTMyCQlsOworCXZvbGF0aWxlIF9fbGUzMgkJcDsKIH07CiAKIHN0cnVjdCBoaWZuX2RtYSB7CkBAIC00NjMsNyArNDYzLDcgQEAKIAogCXVuc2lnbmVkIGludAkJcGtfY2xrX2ZyZXE7CiAKLSNpZmRlZiBDUllQVE9fREVWX0hJRk5fNzk1WF9STkcKKyNpZmRlZiBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVhfUk5HCiAJdW5zaWduZWQgaW50CQlybmdfd2FpdF90aW1lOwogCWt0aW1lX3QJCQlybmd0aW1lOwogCXN0cnVjdCBod3JuZwkJcm5nOwpAQCAtNDgxLDEwICs0ODEsMTAgQEAKIAogc3RydWN0IGhpZm5fYmFzZV9jb21tYW5kCiB7Ci0Jdm9sYXRpbGUgdTE2CQltYXNrczsKLQl2b2xhdGlsZSB1MTYJCXNlc3Npb25fbnVtOwotCXZvbGF0aWxlIHUxNgkJdG90YWxfc291cmNlX2NvdW50OwotCXZvbGF0aWxlIHUxNgkJdG90YWxfZGVzdF9jb3VudDsKKwl2b2xhdGlsZSBfX2xlMTYJCW1hc2tzOworCXZvbGF0aWxlIF9fbGUxNgkJc2Vzc2lvbl9udW07CisJdm9sYXRpbGUgX19sZTE2CQl0b3RhbF9zb3VyY2VfY291bnQ7CisJdm9sYXRpbGUgX19sZTE2CQl0b3RhbF9kZXN0X2NvdW50OwogfTsKIAogI2RlZmluZQlISUZOX0JBU0VfQ01EX0NPTVAJCTB4MDEwMAkvKiBlbmFibGUgY29tcHJlc3Npb24gZW5naW5lICovCkBAIC01MDQsMTAgKzUwNCwxMCBAQAogICovCiBzdHJ1Y3QgaGlmbl9jcnlwdF9jb21tYW5kCiB7Ci0Jdm9sYXRpbGUgdTE2IAkJbWFza3M7Ci0Jdm9sYXRpbGUgdTE2IAkJaGVhZGVyX3NraXA7Ci0Jdm9sYXRpbGUgdTE2IAkJc291cmNlX2NvdW50OwotCXZvbGF0aWxlIHUxNiAJCXJlc2VydmVkOworCXZvbGF0aWxlIF9fbGUxNiAJCW1hc2tzOworCXZvbGF0aWxlIF9fbGUxNiAJCWhlYWRlcl9za2lwOworCXZvbGF0aWxlIF9fbGUxNiAJCXNvdXJjZV9jb3VudDsKKwl2b2xhdGlsZSBfX2xlMTYgCQlyZXNlcnZlZDsKIH07CiAKICNkZWZpbmUJSElGTl9DUllQVF9DTURfQUxHX01BU0sJCTB4MDAwMwkJLyogYWxnb3JpdGhtOiAqLwpAQCAtNjcwLDcgKzY3MCw3IEBACiB7CiAJdTMyIHJldDsKIAotCXJldCA9IHJlYWRsKChjaGFyICopKGRldi0+YmFyWzBdKSArIHJlZyk7CisJcmV0ID0gcmVhZGwoZGV2LT5iYXJbMF0gKyByZWcpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY3OSwxOSArNjc5LDE5IEBACiB7CiAJdTMyIHJldDsKIAotCXJldCA9IHJlYWRsKChjaGFyICopKGRldi0+YmFyWzFdKSArIHJlZyk7CisJcmV0ID0gcmVhZGwoZGV2LT5iYXJbMV0gKyByZWcpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhpZm5fd3JpdGVfMChzdHJ1Y3QgaGlmbl9kZXZpY2UgKmRldiwgdTMyIHJlZywgdTMyIHZhbCkKIHsKLQl3cml0ZWwodmFsLCAoY2hhciAqKShkZXYtPmJhclswXSkgKyByZWcpOworCXdyaXRlbCh2YWwsIGRldi0+YmFyWzBdICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhpZm5fd3JpdGVfMShzdHJ1Y3QgaGlmbl9kZXZpY2UgKmRldiwgdTMyIHJlZywgdTMyIHZhbCkKIHsKLQl3cml0ZWwodmFsLCAoY2hhciAqKShkZXYtPmJhclsxXSkgKyByZWcpOworCXdyaXRlbCh2YWwsIGRldi0+YmFyWzFdICsgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgaGlmbl93YWl0X3B1YyhzdHJ1Y3QgaGlmbl9kZXZpY2UgKmRldikKQEAgLTc5NSw3ICs3OTUsNyBAQAogCX0KIH07CiAKLSNpZmRlZiBDUllQVE9fREVWX0hJRk5fNzk1WF9STkcKKyNpZmRlZiBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVhfUk5HCiBzdGF0aWMgaW50IGhpZm5fcm5nX2RhdGFfcHJlc2VudChzdHJ1Y3QgaHdybmcgKnJuZywgaW50IHdhaXQpCiB7CiAJc3RydWN0IGhpZm5fZGV2aWNlICpkZXYgPSAoc3RydWN0IGhpZm5fZGV2aWNlICopcm5nLT5wcml2OwpAQCAtODgwLDcgKzg4MCw3IEBACiAJZHByaW50aygiQ2hpcCAlczogUk5HIGVuZ2luZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5pdGlhbGlzZWQuXG4iLAogCQkJZGV2LT5uYW1lKTsKIAotI2lmZGVmIENSWVBUT19ERVZfSElGTl83OTVYX1JORworI2lmZGVmIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WF9STkcKIAkvKiBGaXJzdCB2YWx1ZSBtdXN0IGJlIGRpc2NhcmRlZCAqLwogCWhpZm5fcmVhZF8xKGRldiwgSElGTl8xX1JOR19EQVRBKTsKIAlkZXYtPnJuZ3RpbWUgPSBrdGltZV9nZXQoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCmluZGV4IDJmM2FkM2YuLmJiMzBlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwpAQCAtNSw0MiArNSw2IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0ICBNaWNoYWwgTHVkdmlnIDxtaWNoYWxAbG9naXguY3o+CiAgKgotICogS2V5IGV4cGFuc2lvbiByb3V0aW5lIHRha2VuIGZyb20gY3J5cHRvL2Flc19nZW5lcmljLmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weXJpZ2h0IChjKSAyMDAyLCBEciBCcmlhbiBHbGFkbWFuIDxicmdAZ2xhZG1hbi5tZS51az4sIFdvcmNlc3RlciwgVUsuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIExJQ0VOU0UgVEVSTVMKLSAqCi0gKiBUaGUgZnJlZSBkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGluIGJvdGggc291cmNlIGFuZCBiaW5hcnkKLSAqIGZvcm0gaXMgYWxsb3dlZCAod2l0aCBvciB3aXRob3V0IGNoYW5nZXMpIHByb3ZpZGVkIHRoYXQ6Ci0gKgotICogICAxLiBkaXN0cmlidXRpb25zIG9mIHRoaXMgc291cmNlIGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcjsKLSAqCi0gKiAgIDIuIGRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgYXNzb2NpYXRlZCBtYXRlcmlhbHM7Ci0gKgotICogICAzLiB0aGUgY29weXJpZ2h0IGhvbGRlcidzIG5hbWUgaXMgbm90IHVzZWQgdG8gZW5kb3JzZSBwcm9kdWN0cwotICogICAgICBidWlsdCB1c2luZyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFMVEVSTkFUSVZFTFksIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgcmV0YWluZWQgaW4gZnVsbCwgdGhpcyBwcm9kdWN0Ci0gKiBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwKLSAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcHBseSBJTlNURUFEIE9GIHRob3NlIGdpdmVuIGFib3ZlLgotICoKLSAqIERJU0NMQUlNRVIKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcyBpcycgd2l0aCBubyBleHBsaWNpdCBvciBpbXBsaWVkIHdhcnJhbnRpZXMKLSAqIGluIHJlc3BlY3Qgb2YgaXRzIHByb3BlcnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBjb3JyZWN0bmVzcwotICogYW5kL29yIGZpdG5lc3MgZm9yIHB1cnBvc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiAjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgpAQCAtNTQsOSArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKLSNkZWZpbmUgQUVTX0VYVEVOREVEX0tFWV9TSVpFCTY0CS8qIGluIHVpbnQzMl90IHVuaXRzICovCi0jZGVmaW5lIEFFU19FWFRFTkRFRF9LRVlfU0laRV9CCShBRVNfRVhURU5ERURfS0VZX1NJWkUgKiBzaXplb2YodWludDMyX3QpKQotCiAvKiBDb250cm9sIHdvcmQuICovCiBzdHJ1Y3QgY3dvcmQgewogCXVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCkBAIC03MCwyMTggKzMxLDIzIEBACiAKIC8qIFdoZW5ldmVyIG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nCiAgKiBzdHJ1Y3R1cmUgKm1ha2Ugc3VyZSogeW91IGtlZXAgRSwgZF9kYXRhCi0gKiBhbmQgY3dvcmQgYWxpZ25lZCBvbiAxNiBCeXRlcyBib3VuZGFyaWVzISEhICovCisgKiBhbmQgY3dvcmQgYWxpZ25lZCBvbiAxNiBCeXRlcyBib3VuZGFyaWVzIGFuZAorICogdGhlIEhhcmR3YXJlIGNhbiBhY2Nlc3MgMTYgKiAxNiBieXRlcyBvZiBFIGFuZCBkX2RhdGEKKyAqIChvbmx5IHRoZSBmaXJzdCAxNSAqIDE2IGJ5dGVzIG1hdHRlciBidXQgdGhlIEhXIHJlYWRzCisgKiBtb3JlKS4KKyAqLwogc3RydWN0IGFlc19jdHggeworCXUzMiBFW0FFU19NQVhfS0VZTEVOR1RIX1UzMl0KKwkJX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKFBBRExPQ0tfQUxJR05NRU5UKSkpOworCXUzMiBkX2RhdGFbQUVTX01BWF9LRVlMRU5HVEhfVTMyXQorCQlfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oUEFETE9DS19BTElHTk1FTlQpKSk7CiAJc3RydWN0IHsKIAkJc3RydWN0IGN3b3JkIGVuY3J5cHQ7CiAJCXN0cnVjdCBjd29yZCBkZWNyeXB0OwogCX0gY3dvcmQ7CiAJdTMyICpEOwotCWludCBrZXlfbGVuZ3RoOwotCXUzMiBFW0FFU19FWFRFTkRFRF9LRVlfU0laRV0KLQkJX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKFBBRExPQ0tfQUxJR05NRU5UKSkpOwotCXUzMiBkX2RhdGFbQUVTX0VYVEVOREVEX0tFWV9TSVpFXQotCQlfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oUEFETE9DS19BTElHTk1FTlQpKSk7CiB9OwogCi0vKiA9PT09PT0gS2V5IG1hbmFnZW1lbnQgcm91dGluZXMgPT09PT09ICovCi0KLXN0YXRpYyBpbmxpbmUgdWludDMyX3QKLWdlbmVyaWNfcm90cjMyIChjb25zdCB1aW50MzJfdCB4LCBjb25zdCB1bnNpZ25lZCBiaXRzKQotewotCWNvbnN0IHVuc2lnbmVkIG4gPSBiaXRzICUgMzI7Ci0JcmV0dXJuICh4ID4+IG4pIHwgKHggPDwgKDMyIC0gbikpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90Ci1nZW5lcmljX3JvdGwzMiAoY29uc3QgdWludDMyX3QgeCwgY29uc3QgdW5zaWduZWQgYml0cykKLXsKLQljb25zdCB1bnNpZ25lZCBuID0gYml0cyAlIDMyOwotCXJldHVybiAoeCA8PCBuKSB8ICh4ID4+ICgzMiAtIG4pKTsKLX0KLQotI2RlZmluZSByb3RsIGdlbmVyaWNfcm90bDMyCi0jZGVmaW5lIHJvdHIgZ2VuZXJpY19yb3RyMzIKLQotLyoKLSAqICNkZWZpbmUgYnl0ZSh4LCBucikgKCh1bnNpZ25lZCBjaGFyKSgoeCkgPj4gKG5yKjgpKSkgCi0gKi8KLXN0YXRpYyBpbmxpbmUgdWludDhfdAotYnl0ZShjb25zdCB1aW50MzJfdCB4LCBjb25zdCB1bnNpZ25lZCBuKQotewotCXJldHVybiB4ID4+IChuIDw8IDMpOwotfQotCi0jZGVmaW5lIEVfS0VZIGN0eC0+RQotI2RlZmluZSBEX0tFWSBjdHgtPkQKLQotc3RhdGljIHVpbnQ4X3QgcG93X3RhYlsyNTZdOwotc3RhdGljIHVpbnQ4X3QgbG9nX3RhYlsyNTZdOwotc3RhdGljIHVpbnQ4X3Qgc2J4X3RhYlsyNTZdOwotc3RhdGljIHVpbnQ4X3QgaXNiX3RhYlsyNTZdOwotc3RhdGljIHVpbnQzMl90IHJjb190YWJbMTBdOwotc3RhdGljIHVpbnQzMl90IGZ0X3RhYls0XVsyNTZdOwotc3RhdGljIHVpbnQzMl90IGl0X3RhYls0XVsyNTZdOwotCi1zdGF0aWMgdWludDMyX3QgZmxfdGFiWzRdWzI1Nl07Ci1zdGF0aWMgdWludDMyX3QgaWxfdGFiWzRdWzI1Nl07Ci0KLXN0YXRpYyBpbmxpbmUgdWludDhfdAotZl9tdWx0ICh1aW50OF90IGEsIHVpbnQ4X3QgYikKLXsKLQl1aW50OF90IGFhID0gbG9nX3RhYlthXSwgY2MgPSBhYSArIGxvZ190YWJbYl07Ci0KLQlyZXR1cm4gcG93X3RhYltjYyArIChjYyA8IGFhID8gMSA6IDApXTsKLX0KLQotI2RlZmluZSBmZl9tdWx0KGEsYikgICAgKGEgJiYgYiA/IGZfbXVsdChhLCBiKSA6IDApCi0KLSNkZWZpbmUgZl9ybihibywgYmksIG4sIGspCQkJCQlcCi0gICAgYm9bbl0gPSAgZnRfdGFiWzBdW2J5dGUoYmlbbl0sMCldIF4JCQkJXAotICAgICAgICAgICAgIGZ0X3RhYlsxXVtieXRlKGJpWyhuICsgMSkgJiAzXSwxKV0gXgkJXAotICAgICAgICAgICAgIGZ0X3RhYlsyXVtieXRlKGJpWyhuICsgMikgJiAzXSwyKV0gXgkJXAotICAgICAgICAgICAgIGZ0X3RhYlszXVtieXRlKGJpWyhuICsgMykgJiAzXSwzKV0gXiAqKGsgKyBuKQotCi0jZGVmaW5lIGlfcm4oYm8sIGJpLCBuLCBrKQkJCQkJXAotICAgIGJvW25dID0gIGl0X3RhYlswXVtieXRlKGJpW25dLDApXSBeCQkJCVwKLSAgICAgICAgICAgICBpdF90YWJbMV1bYnl0ZShiaVsobiArIDMpICYgM10sMSldIF4JCVwKLSAgICAgICAgICAgICBpdF90YWJbMl1bYnl0ZShiaVsobiArIDIpICYgM10sMildIF4JCVwKLSAgICAgICAgICAgICBpdF90YWJbM11bYnl0ZShiaVsobiArIDEpICYgM10sMyldIF4gKihrICsgbikKLQotI2RlZmluZSBsc19ib3goeCkJCQkJXAotICAgICggZmxfdGFiWzBdW2J5dGUoeCwgMCldIF4JCQlcCi0gICAgICBmbF90YWJbMV1bYnl0ZSh4LCAxKV0gXgkJCVwKLSAgICAgIGZsX3RhYlsyXVtieXRlKHgsIDIpXSBeCQkJXAotICAgICAgZmxfdGFiWzNdW2J5dGUoeCwgMyldICkKLQotI2RlZmluZSBmX3JsKGJvLCBiaSwgbiwgaykJCQkJCVwKLSAgICBib1tuXSA9ICBmbF90YWJbMF1bYnl0ZShiaVtuXSwwKV0gXgkJCQlcCi0gICAgICAgICAgICAgZmxfdGFiWzFdW2J5dGUoYmlbKG4gKyAxKSAmIDNdLDEpXSBeCQlcCi0gICAgICAgICAgICAgZmxfdGFiWzJdW2J5dGUoYmlbKG4gKyAyKSAmIDNdLDIpXSBeCQlcCi0gICAgICAgICAgICAgZmxfdGFiWzNdW2J5dGUoYmlbKG4gKyAzKSAmIDNdLDMpXSBeICooayArIG4pCi0KLSNkZWZpbmUgaV9ybChibywgYmksIG4sIGspCQkJCQlcCi0gICAgYm9bbl0gPSAgaWxfdGFiWzBdW2J5dGUoYmlbbl0sMCldIF4JCQkJXAotICAgICAgICAgICAgIGlsX3RhYlsxXVtieXRlKGJpWyhuICsgMykgJiAzXSwxKV0gXgkJXAotICAgICAgICAgICAgIGlsX3RhYlsyXVtieXRlKGJpWyhuICsgMikgJiAzXSwyKV0gXgkJXAotICAgICAgICAgICAgIGlsX3RhYlszXVtieXRlKGJpWyhuICsgMSkgJiAzXSwzKV0gXiAqKGsgKyBuKQotCi1zdGF0aWMgdm9pZAotZ2VuX3RhYnMgKHZvaWQpCi17Ci0JdWludDMyX3QgaSwgdDsKLQl1aW50OF90IHAsIHE7Ci0KLQkvKiBsb2cgYW5kIHBvd2VyIHRhYmxlcyBmb3IgR0YoMioqOCkgZmluaXRlIGZpZWxkIHdpdGgKLQkgICAweDAxMWIgYXMgbW9kdWxhciBwb2x5bm9taWFsIC0gdGhlIHNpbXBsZXN0IHBybWl0aXZlCi0JICAgcm9vdCBpcyAweDAzLCB1c2VkIGhlcmUgdG8gZ2VuZXJhdGUgdGhlIHRhYmxlcyAqLwotCi0JZm9yIChpID0gMCwgcCA9IDE7IGkgPCAyNTY7ICsraSkgewotCQlwb3dfdGFiW2ldID0gKHVpbnQ4X3QpIHA7Ci0JCWxvZ190YWJbcF0gPSAodWludDhfdCkgaTsKLQotCQlwIF49IChwIDw8IDEpIF4gKHAgJiAweDgwID8gMHgwMWIgOiAwKTsKLQl9Ci0KLQlsb2dfdGFiWzFdID0gMDsKLQotCWZvciAoaSA9IDAsIHAgPSAxOyBpIDwgMTA7ICsraSkgewotCQlyY29fdGFiW2ldID0gcDsKLQotCQlwID0gKHAgPDwgMSkgXiAocCAmIDB4ODAgPyAweDAxYiA6IDApOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkgewotCQlwID0gKGkgPyBwb3dfdGFiWzI1NSAtIGxvZ190YWJbaV1dIDogMCk7Ci0JCXEgPSAoKHAgPj4gNykgfCAocCA8PCAxKSkgXiAoKHAgPj4gNikgfCAocCA8PCAyKSk7Ci0JCXAgXj0gMHg2MyBeIHEgXiAoKHEgPj4gNikgfCAocSA8PCAyKSk7Ci0JCXNieF90YWJbaV0gPSBwOwotCQlpc2JfdGFiW3BdID0gKHVpbnQ4X3QpIGk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKSB7Ci0JCXAgPSBzYnhfdGFiW2ldOwotCi0JCXQgPSBwOwotCQlmbF90YWJbMF1baV0gPSB0OwotCQlmbF90YWJbMV1baV0gPSByb3RsICh0LCA4KTsKLQkJZmxfdGFiWzJdW2ldID0gcm90bCAodCwgMTYpOwotCQlmbF90YWJbM11baV0gPSByb3RsICh0LCAyNCk7Ci0KLQkJdCA9ICgodWludDMyX3QpIGZmX211bHQgKDIsIHApKSB8Ci0JCSAgICAoKHVpbnQzMl90KSBwIDw8IDgpIHwKLQkJICAgICgodWludDMyX3QpIHAgPDwgMTYpIHwgKCh1aW50MzJfdCkgZmZfbXVsdCAoMywgcCkgPDwgMjQpOwotCi0JCWZ0X3RhYlswXVtpXSA9IHQ7Ci0JCWZ0X3RhYlsxXVtpXSA9IHJvdGwgKHQsIDgpOwotCQlmdF90YWJbMl1baV0gPSByb3RsICh0LCAxNik7Ci0JCWZ0X3RhYlszXVtpXSA9IHJvdGwgKHQsIDI0KTsKLQotCQlwID0gaXNiX3RhYltpXTsKLQotCQl0ID0gcDsKLQkJaWxfdGFiWzBdW2ldID0gdDsKLQkJaWxfdGFiWzFdW2ldID0gcm90bCAodCwgOCk7Ci0JCWlsX3RhYlsyXVtpXSA9IHJvdGwgKHQsIDE2KTsKLQkJaWxfdGFiWzNdW2ldID0gcm90bCAodCwgMjQpOwotCi0JCXQgPSAoKHVpbnQzMl90KSBmZl9tdWx0ICgxNCwgcCkpIHwKLQkJICAgICgodWludDMyX3QpIGZmX211bHQgKDksIHApIDw8IDgpIHwKLQkJICAgICgodWludDMyX3QpIGZmX211bHQgKDEzLCBwKSA8PCAxNikgfAotCQkgICAgKCh1aW50MzJfdCkgZmZfbXVsdCAoMTEsIHApIDw8IDI0KTsKLQotCQlpdF90YWJbMF1baV0gPSB0OwotCQlpdF90YWJbMV1baV0gPSByb3RsICh0LCA4KTsKLQkJaXRfdGFiWzJdW2ldID0gcm90bCAodCwgMTYpOwotCQlpdF90YWJbM11baV0gPSByb3RsICh0LCAyNCk7Ci0JfQotfQotCi0jZGVmaW5lIHN0YXJfeCh4KSAoKCh4KSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4gKCgoKHgpICYgMHg4MDgwODA4MCkgPj4gNykgKiAweDFiKQotCi0jZGVmaW5lIGltaXhfY29sKHkseCkgICAgICAgXAotICAgIHUgICA9IHN0YXJfeCh4KTsgICAgICAgIFwKLSAgICB2ICAgPSBzdGFyX3godSk7ICAgICAgICBcCi0gICAgdyAgID0gc3Rhcl94KHYpOyAgICAgICAgXAotICAgIHQgICA9IHcgXiAoeCk7ICAgICAgICAgIFwKLSAgICh5KSAgPSB1IF4gdiBeIHc7ICAgICAgICBcCi0gICAoeSkgXj0gcm90cih1IF4gdCwgIDgpIF4gXAotICAgICAgICAgIHJvdHIodiBeIHQsIDE2KSBeIFwKLSAgICAgICAgICByb3RyKHQsMjQpCi0KLS8qIGluaXRpYWxpc2UgdGhlIGtleSBzY2hlZHVsZSBmcm9tIHRoZSB1c2VyIHN1cHBsaWVkIGtleSAqLwotCi0jZGVmaW5lIGxvb3A0KGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgIHQgPSByb3RyKHQsICA4KTsgdCA9IGxzX2JveCh0KSBeIHJjb190YWJbaV07ICAgIFwKLSAgICB0IF49IEVfS0VZWzQgKiBpXTsgICAgIEVfS0VZWzQgKiBpICsgNF0gPSB0OyAgICBcCi0gICAgdCBePSBFX0tFWVs0ICogaSArIDFdOyBFX0tFWVs0ICogaSArIDVdID0gdDsgICAgXAotICAgIHQgXj0gRV9LRVlbNCAqIGkgKyAyXTsgRV9LRVlbNCAqIGkgKyA2XSA9IHQ7ICAgIFwKLSAgICB0IF49IEVfS0VZWzQgKiBpICsgM107IEVfS0VZWzQgKiBpICsgN10gPSB0OyAgICBcCi19Ci0KLSNkZWZpbmUgbG9vcDYoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgdCA9IHJvdHIodCwgIDgpOyB0ID0gbHNfYm94KHQpIF4gcmNvX3RhYltpXTsgICAgXAotICAgIHQgXj0gRV9LRVlbNiAqIGldOyAgICAgRV9LRVlbNiAqIGkgKyA2XSA9IHQ7ICAgIFwKLSAgICB0IF49IEVfS0VZWzYgKiBpICsgMV07IEVfS0VZWzYgKiBpICsgN10gPSB0OyAgICBcCi0gICAgdCBePSBFX0tFWVs2ICogaSArIDJdOyBFX0tFWVs2ICogaSArIDhdID0gdDsgICAgXAotICAgIHQgXj0gRV9LRVlbNiAqIGkgKyAzXTsgRV9LRVlbNiAqIGkgKyA5XSA9IHQ7ICAgIFwKLSAgICB0IF49IEVfS0VZWzYgKiBpICsgNF07IEVfS0VZWzYgKiBpICsgMTBdID0gdDsgICBcCi0gICAgdCBePSBFX0tFWVs2ICogaSArIDVdOyBFX0tFWVs2ICogaSArIDExXSA9IHQ7ICAgXAotfQotCi0jZGVmaW5lIGxvb3A4KGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgIHQgPSByb3RyKHQsICA4KTsgOyB0ID0gbHNfYm94KHQpIF4gcmNvX3RhYltpXTsgIFwKLSAgICB0IF49IEVfS0VZWzggKiBpXTsgICAgIEVfS0VZWzggKiBpICsgOF0gPSB0OyAgICBcCi0gICAgdCBePSBFX0tFWVs4ICogaSArIDFdOyBFX0tFWVs4ICogaSArIDldID0gdDsgICAgXAotICAgIHQgXj0gRV9LRVlbOCAqIGkgKyAyXTsgRV9LRVlbOCAqIGkgKyAxMF0gPSB0OyAgIFwKLSAgICB0IF49IEVfS0VZWzggKiBpICsgM107IEVfS0VZWzggKiBpICsgMTFdID0gdDsgICBcCi0gICAgdCAgPSBFX0tFWVs4ICogaSArIDRdIF4gbHNfYm94KHQpOyAgICBcCi0gICAgRV9LRVlbOCAqIGkgKyAxMl0gPSB0OyAgICAgICAgICAgICAgICBcCi0gICAgdCBePSBFX0tFWVs4ICogaSArIDVdOyBFX0tFWVs4ICogaSArIDEzXSA9IHQ7ICAgXAotICAgIHQgXj0gRV9LRVlbOCAqIGkgKyA2XTsgRV9LRVlbOCAqIGkgKyAxNF0gPSB0OyAgIFwKLSAgICB0IF49IEVfS0VZWzggKiBpICsgN107IEVfS0VZWzggKiBpICsgMTVdID0gdDsgICBcCi19Ci0KIC8qIFRlbGxzIHdoZXRoZXIgdGhlIEFDRSBpcyBjYXBhYmxlIHRvIGdlbmVyYXRlCiAgICB0aGUgZXh0ZW5kZWQga2V5IGZvciBhIGdpdmVuIGtleV9sZW4uICovCiBzdGF0aWMgaW5saW5lIGludApAQCAtMzIxLDE3ICs4NywxMyBAQAogCXN0cnVjdCBhZXNfY3R4ICpjdHggPSBhZXNfY3R4KHRmbSk7CiAJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OwogCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7Ci0JdWludDMyX3QgaSwgdCwgdSwgdiwgdzsKLQl1aW50MzJfdCBQW0FFU19FWFRFTkRFRF9LRVlfU0laRV07Ci0JdWludDMyX3Qgcm91bmRzOworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCBnZW5fYWVzOwogCiAJaWYgKGtleV9sZW4gJSA4KSB7CiAJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY3R4LT5rZXlfbGVuZ3RoID0ga2V5X2xlbjsKLQogCS8qCiAJICogSWYgdGhlIGhhcmR3YXJlIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyB0aGUgZXh0ZW5kZWQga2V5CiAJICogaXRzZWxmIHdlIG11c3Qgc3VwcGx5IHRoZSBwbGFpbiBrZXkgZm9yIGJvdGggZW5jcnlwdGlvbgpAQCAtMzM5LDEwICsxMDEsMTAgQEAKIAkgKi8KIAljdHgtPkQgPSBjdHgtPkU7CiAKLQlFX0tFWVswXSA9IGxlMzJfdG9fY3B1KGtleVswXSk7Ci0JRV9LRVlbMV0gPSBsZTMyX3RvX2NwdShrZXlbMV0pOwotCUVfS0VZWzJdID0gbGUzMl90b19jcHUoa2V5WzJdKTsKLQlFX0tFWVszXSA9IGxlMzJfdG9fY3B1KGtleVszXSk7CisJY3R4LT5FWzBdID0gbGUzMl90b19jcHUoa2V5WzBdKTsKKwljdHgtPkVbMV0gPSBsZTMyX3RvX2NwdShrZXlbMV0pOworCWN0eC0+RVsyXSA9IGxlMzJfdG9fY3B1KGtleVsyXSk7CisJY3R4LT5FWzNdID0gbGUzMl90b19jcHUoa2V5WzNdKTsKIAogCS8qIFByZXBhcmUgY29udHJvbCB3b3Jkcy4gKi8KIAltZW1zZXQoJmN0eC0+Y3dvcmQsIDAsIHNpemVvZihjdHgtPmN3b3JkKSk7CkBAIC0zNjEsNTYgKzEyMywxMyBAQAogCWN0eC0+Y3dvcmQuZW5jcnlwdC5rZXlnZW4gPSAxOwogCWN0eC0+Y3dvcmQuZGVjcnlwdC5rZXlnZW4gPSAxOwogCi0Jc3dpdGNoIChrZXlfbGVuKSB7Ci0JY2FzZSAxNjoKLQkJdCA9IEVfS0VZWzNdOwotCQlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkKLQkJCWxvb3A0IChpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDI0OgotCQlFX0tFWVs0XSA9IGxlMzJfdG9fY3B1KGtleVs0XSk7Ci0JCXQgPSBFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7Ci0JCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCi0JCQlsb29wNiAoaSk7Ci0JCWJyZWFrOwotCi0JY2FzZSAzMjoKLQkJRV9LRVlbNF0gPSBsZTMyX3RvX2NwdShrZXlbNF0pOwotCQlFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7Ci0JCUVfS0VZWzZdID0gbGUzMl90b19jcHUoa2V5WzZdKTsKLQkJdCA9IEVfS0VZWzddID0gbGUzMl90b19jcHUoa2V5WzddKTsKLQkJZm9yIChpID0gMDsgaSA8IDc7ICsraSkKLQkJCWxvb3A4IChpKTsKLQkJYnJlYWs7CisJaWYgKGNyeXB0b19hZXNfZXhwYW5kX2tleSgmZ2VuX2FlcywgaW5fa2V5LCBrZXlfbGVuKSkgeworCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCURfS0VZWzBdID0gRV9LRVlbMF07Ci0JRF9LRVlbMV0gPSBFX0tFWVsxXTsKLQlEX0tFWVsyXSA9IEVfS0VZWzJdOwotCURfS0VZWzNdID0gRV9LRVlbM107Ci0KLQlmb3IgKGkgPSA0OyBpIDwga2V5X2xlbiArIDI0OyArK2kpIHsKLQkJaW1peF9jb2wgKERfS0VZW2ldLCBFX0tFWVtpXSk7Ci0JfQotCi0JLyogUGFkTG9jayBuZWVkcyBhIGRpZmZlcmVudCBmb3JtYXQgb2YgdGhlIGRlY3J5cHRpb24ga2V5LiAqLwotCXJvdW5kcyA9IDEwICsgKGtleV9sZW4gLSAxNikgLyA0OwotCi0JZm9yIChpID0gMDsgaSA8IHJvdW5kczsgaSsrKSB7Ci0JCVBbKChpICsgMSkgKiA0KSArIDBdID0gRF9LRVlbKChyb3VuZHMgLSBpIC0gMSkgKiA0KSArIDBdOwotCQlQWygoaSArIDEpICogNCkgKyAxXSA9IERfS0VZWygocm91bmRzIC0gaSAtIDEpICogNCkgKyAxXTsKLQkJUFsoKGkgKyAxKSAqIDQpICsgMl0gPSBEX0tFWVsoKHJvdW5kcyAtIGkgLSAxKSAqIDQpICsgMl07Ci0JCVBbKChpICsgMSkgKiA0KSArIDNdID0gRF9LRVlbKChyb3VuZHMgLSBpIC0gMSkgKiA0KSArIDNdOwotCX0KLQotCVBbMF0gPSBFX0tFWVsocm91bmRzICogNCkgKyAwXTsKLQlQWzFdID0gRV9LRVlbKHJvdW5kcyAqIDQpICsgMV07Ci0JUFsyXSA9IEVfS0VZWyhyb3VuZHMgKiA0KSArIDJdOwotCVBbM10gPSBFX0tFWVsocm91bmRzICogNCkgKyAzXTsKLQotCW1lbWNweShEX0tFWSwgUCwgQUVTX0VYVEVOREVEX0tFWV9TSVpFX0IpOwotCisJbWVtY3B5KGN0eC0+RSwgZ2VuX2Flcy5rZXlfZW5jLCBBRVNfTUFYX0tFWUxFTkdUSCk7CisJbWVtY3B5KGN0eC0+RCwgZ2VuX2Flcy5rZXlfZGVjLCBBRVNfTUFYX0tFWUxFTkdUSCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3NSw3ICszOTQsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlnZW5fdGFicygpOwogCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWVzX2FsZykpKQogCQlnb3RvIGFlc19lcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL0tjb25maWcgYi9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IGE3MDNkZWYuLjYyMzljM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIAogbWVudWNvbmZpZyBETUFERVZJQ0VTCiAJYm9vbCAiRE1BIEVuZ2luZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gKFBDSSAmJiBYODYpIHx8IEFSQ0hfSU9QMzJYIHx8IEFSQ0hfSU9QMzNYIHx8IEFSQ0hfSU9QMTNYWAorCWRlcGVuZHMgb24gKFBDSSAmJiBYODYpIHx8IEFSQ0hfSU9QMzJYIHx8IEFSQ0hfSU9QMzNYIHx8IEFSQ0hfSU9QMTNYWCB8fCBQUEMKIAlkZXBlbmRzIG9uICFISUdITUVNNjRHCiAJaGVscAogCSAgRE1BIGVuZ2luZXMgY2FuIGRvIGFzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycyB3aXRob3V0CkBAIC0zNyw2ICszNywxNSBAQAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwoUikgSU9QIFNlcmllcyBSQUlEIGVuZ2luZXMuCiAKK2NvbmZpZyBGU0xfRE1BCisJYm9vbCAiRnJlZXNjYWxlIE1QQzg1eHgvTVBDODN4eCBETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBQQworCXNlbGVjdCBETUFfRU5HSU5FCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgRE1BIGVuZ2luZS4gTm93LCBpdCBzdXBwb3J0CisJICBNUEM4NTYwLzQwLCBNUEM4NTU1LCBNUEM4NTQ4IGFuZCBNUEM4NjQxIHByb2Nlc3NvcnMuCisJICBUaGUgTVBDODM0OSwgTVBDODM2MCBpcyBhbHNvIHN1cHBvcnRlZC4KKwogY29uZmlnIERNQV9FTkdJTkUKIAlib29sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL01ha2VmaWxlIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKaW5kZXggYjE1MmNkOC4uYzgwMzZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTMsMyArMyw0IEBACiBvYmotJChDT05GSUdfSU5URUxfSU9BVERNQSkgKz0gaW9hdGRtYS5vCiBpb2F0ZG1hLW9ianMgOj0gaW9hdC5vIGlvYXRfZG1hLm8gaW9hdF9kY2Eubwogb2JqLSQoQ09ORklHX0lOVEVMX0lPUF9BRE1BKSArPSBpb3AtYWRtYS5vCitvYmotJChDT05GSUdfRlNMX0RNQSkgKz0gZnNsZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKaW5kZXggMjk5NjUyMy4uOTdiMzI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKKysrIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKQEAgLTQyLDkgKzQyLDkgQEAKICAqCiAgKiBFYWNoIGRldmljZSBoYXMgYSBrcmVmLCB3aGljaCBpcyBpbml0aWFsaXplZCB0byAxIHdoZW4gdGhlIGRldmljZSBpcwogICogcmVnaXN0ZXJlZC4gQSBrcmVmX2dldCBpcyBkb25lIGZvciBlYWNoIGRldmljZSByZWdpc3RlcmVkLiAgV2hlbiB0aGUKLSAqIGRldmljZSBpcyByZWxlYXNlZCwgdGhlIGNvcmVzcG9uZGluZyBrcmVmX3B1dCBpcyBkb25lIGluIHRoZSByZWxlYXNlCisgKiBkZXZpY2UgaXMgcmVsZWFzZWQsIHRoZSBjb3JyZXNwb25kaW5nIGtyZWZfcHV0IGlzIGRvbmUgaW4gdGhlIHJlbGVhc2UKICAqIG1ldGhvZC4gRXZlcnkgdGltZSBvbmUgb2YgdGhlIGRldmljZSdzIGNoYW5uZWxzIGlzIGFsbG9jYXRlZCB0byBhIGNsaWVudCwKLSAqIGEga3JlZl9nZXQgb2NjdXJzLiAgV2hlbiB0aGUgY2hhbm5lbCBpcyBmcmVlZCwgdGhlIGNvcmVzcG9uZGluZyBrcmVmX3B1dAorICogYSBrcmVmX2dldCBvY2N1cnMuICBXaGVuIHRoZSBjaGFubmVsIGlzIGZyZWVkLCB0aGUgY29ycmVzcG9uZGluZyBrcmVmX3B1dAogICogaGFwcGVucy4gVGhlIGRldmljZSdzIHJlbGVhc2UgZnVuY3Rpb24gZG9lcyBhIGNvbXBsZXRpb24sIHNvCiAgKiB1bnJlZ2lzdGVyX2RldmljZSBkb2VzIGEgcmVtb3ZlIGV2ZW50LCBkZXZpY2VfdW5yZWdpc3RlciwgYSBrcmVmX3B1dAogICogZm9yIHRoZSBmaXJzdCByZWZlcmVuY2UsIHRoZW4gd2FpdHMgb24gdGhlIGNvbXBsZXRpb24gZm9yIGFsbCBvdGhlcgpAQCAtNTMsNyArNTMsNyBAQAogICogRWFjaCBjaGFubmVsIGhhcyBhbiBvcGVuLWNvZGVkIGltcGxlbWVudGF0aW9uIG9mIFJ1c3R5IFJ1c3NlbGwncyAiYmlncmVmLCIKICAqIHdpdGggYSBrcmVmIGFuZCBhIHBlcl9jcHUgbG9jYWxfdC4gIEEgZG1hX2NoYW5fZ2V0IGlzIGNhbGxlZCB3aGVuIGEgY2xpZW50CiAgKiBzaWduYWxzIHRoYXQgaXQgd2FudHMgdG8gdXNlIGEgY2hhbm5lbCwgYW5kIGRtYV9jaGFuX3B1dCBpcyBjYWxsZWQgd2hlbgotICogYSBjaGFubmVsIGlzIHJlbW92ZWQgb3IgYSBjbGllbnQgdXNpbmcgaXQgaXMgdW5yZWdlc2l0ZXJlZC4gIEEgY2xpZW50IGNhbgorICogYSBjaGFubmVsIGlzIHJlbW92ZWQgb3IgYSBjbGllbnQgdXNpbmcgaXQgaXMgdW5yZWdpc3RlcmVkLiAgQSBjbGllbnQgY2FuCiAgKiB0YWtlIGV4dHJhIHJlZmVyZW5jZXMgcGVyIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9uLCBhcyBpcyB0aGUgY2FzZSB3aXRoCiAgKiB0aGUgTkVUIERNQSBjbGllbnQuICBUaGUgcmVsZWFzZSBmdW5jdGlvbiBkb2VzIGEga3JlZl9wdXQgb24gdGhlIGRldmljZS4KICAqCS1DaHJpc0wsIERhblcKQEAgLTM1NywxMiArMzU3LDExIEBACiAJCSFkZXZpY2UtPmRldmljZV9wcmVwX2RtYV96ZXJvX3N1bSk7CiAJQlVHX09OKGRtYV9oYXNfY2FwKERNQV9NRU1TRVQsIGRldmljZS0+Y2FwX21hc2spICYmCiAJCSFkZXZpY2UtPmRldmljZV9wcmVwX2RtYV9tZW1zZXQpOwotCUJVR19PTihkbWFfaGFzX2NhcChETUFfWkVST19TVU0sIGRldmljZS0+Y2FwX21hc2spICYmCisJQlVHX09OKGRtYV9oYXNfY2FwKERNQV9JTlRFUlJVUFQsIGRldmljZS0+Y2FwX21hc2spICYmCiAJCSFkZXZpY2UtPmRldmljZV9wcmVwX2RtYV9pbnRlcnJ1cHQpOwogCiAJQlVHX09OKCFkZXZpY2UtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyk7CiAJQlVHX09OKCFkZXZpY2UtPmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzKTsKLQlCVUdfT04oIWRldmljZS0+ZGV2aWNlX2RlcGVuZGVuY3lfYWRkZWQpOwogCUJVR19PTighZGV2aWNlLT5kZXZpY2VfaXNfdHhfY29tcGxldGUpOwogCUJVR19PTighZGV2aWNlLT5kZXZpY2VfaXNzdWVfcGVuZGluZyk7CiAJQlVHX09OKCFkZXZpY2UtPmRldik7CkBAIC00NzksNyArNDc4LDggQEAKIAogCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldiwgc3JjLCBsZW4sIERNQV9UT19ERVZJQ0UpOwogCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIGRlc3QsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKLQl0eCA9IGRldi0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgbGVuLCAwKTsKKwl0eCA9IGRldi0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgbGVuLAorCQkJCQkgRE1BX0NUUkxfQUNLKTsKIAogCWlmICghdHgpIHsKIAkJZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldiwgZG1hX3NyYywgbGVuLCBETUFfVE9fREVWSUNFKTsKQEAgLTQ4Nyw3ICs0ODcsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl0eC0+YWNrID0gMTsKIAl0eC0+Y2FsbGJhY2sgPSBOVUxMOwogCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOwogCkBAIC01MjUsNyArNTI0LDggQEAKIAogCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldiwga2RhdGEsIGxlbiwgRE1BX1RPX0RFVklDRSk7CiAJZG1hX2Rlc3QgPSBkbWFfbWFwX3BhZ2UoZGV2LT5kZXYsIHBhZ2UsIG9mZnNldCwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCXR4ID0gZGV2LT5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCBsZW4sIDApOworCXR4ID0gZGV2LT5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCBsZW4sCisJCQkJCSBETUFfQ1RSTF9BQ0spOwogCiAJaWYgKCF0eCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfc3JjLCBsZW4sIERNQV9UT19ERVZJQ0UpOwpAQCAtNTMzLDcgKzUzMyw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXR4LT5hY2sgPSAxOwogCXR4LT5jYWxsYmFjayA9IE5VTEw7CiAJY29va2llID0gdHgtPnR4X3N1Ym1pdCh0eCk7CiAKQEAgLTU3NCw3ICs1NzMsOCBAQAogCWRtYV9zcmMgPSBkbWFfbWFwX3BhZ2UoZGV2LT5kZXYsIHNyY19wZywgc3JjX29mZiwgbGVuLCBETUFfVE9fREVWSUNFKTsKIAlkbWFfZGVzdCA9IGRtYV9tYXBfcGFnZShkZXYtPmRldiwgZGVzdF9wZywgZGVzdF9vZmYsIGxlbiwKIAkJCQlETUFfRlJPTV9ERVZJQ0UpOwotCXR4ID0gZGV2LT5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCBsZW4sIDApOworCXR4ID0gZGV2LT5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCBsZW4sCisJCQkJCSBETUFfQ1RSTF9BQ0spOwogCiAJaWYgKCF0eCkgewogCQlkbWFfdW5tYXBfcGFnZShkZXYtPmRldiwgZG1hX3NyYywgbGVuLCBETUFfVE9fREVWSUNFKTsKQEAgLTU4Miw3ICs1ODIsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl0eC0+YWNrID0gMTsKIAl0eC0+Y2FsbGJhY2sgPSBOVUxMOwogCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOwogCkBAIC02MDAsOCArNTk5LDYgQEAKIHsKIAl0eC0+Y2hhbiA9IGNoYW47CiAJc3Bpbl9sb2NrX2luaXQoJnR4LT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmdHgtPmRlcGVuZF9ub2RlKTsKLQlJTklUX0xJU1RfSEVBRCgmdHgtPmRlcGVuZF9saXN0KTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0ZWFiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCkBAIC0wLDAgKzEsMTEyOCBAQAorLyoKKyAqIEZyZWVzY2FsZSBNUEM4NXh4LCBNUEM4M3h4IERNQSBFbmdpbmUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjoKKyAqICAgWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4sIEp1bCAyMDA3CisgKiAgIEVib255IFpodSA8ZWJvbnkuemh1QGZyZWVzY2FsZS5jb20+LCBNYXkgMjAwNworICoKKyAqIERlc2NyaXB0aW9uOgorICogICBETUEgZW5naW5lIGRyaXZlciBmb3IgRnJlZXNjYWxlIE1QQzg1NDAgRE1BIGNvbnRyb2xsZXIsIHdoaWNoIGlzCisgKiAgIGFsc28gZml0IGZvciBNUEM4NTYwLCBNUEM4NTU1LCBNUEM4NTQ4LCBNUEM4NjQxLCBhbmQgZXRjLgorICogICBUaGUgc3VwcG9ydCBmb3IgTVBDODM0OSBETUEgY29udG9ybGxlciBpcyBhbHNvIGFkZGVkLgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgImZzbGRtYS5oIgorCitzdGF0aWMgdm9pZCBkbWFfaW5pdChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwkvKiBSZXNldCB0aGUgY2hhbm5lbCAqLworCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAwLCAzMik7CisKKwlzd2l0Y2ggKGZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSB7CisJY2FzZSBGU0xfRE1BX0lQXzg1WFg6CisJCS8qIFNldCB0aGUgY2hhbm5lbCB0byBiZWxvdyBtb2RlczoKKwkJICogRUlFIC0gRXJyb3IgaW50ZXJydXB0IGVuYWJsZQorCQkgKiBFT1NJRSAtIEVuZCBvZiBzZWdtZW50cyBpbnRlcnJ1cHQgZW5hYmxlIChiYXNpYyBtb2RlKQorCQkgKiBFT0xOSUUgLSBFbmQgb2YgbGlua3MgaW50ZXJydXB0IGVuYWJsZQorCQkgKi8KKwkJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIEZTTF9ETUFfTVJfRUlFCisJCQkJfCBGU0xfRE1BX01SX0VPTE5JRSB8IEZTTF9ETUFfTVJfRU9TSUUsIDMyKTsKKwkJYnJlYWs7CisJY2FzZSBGU0xfRE1BX0lQXzgzWFg6CisJCS8qIFNldCB0aGUgY2hhbm5lbCB0byBiZWxvdyBtb2RlczoKKwkJICogRU9USUUgLSBFbmQtb2YtdHJhbnNmZXIgaW50ZXJydXB0IGVuYWJsZQorCQkgKi8KKwkJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIEZTTF9ETUFfTVJfRU9USUUsCisJCQkJMzIpOworCQlicmVhazsKKwl9CisKK30KKworc3RhdGljIHZvaWQgc2V0X3NyKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCB1MzIgdmFsKQoreworCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPnNyLCB2YWwsIDMyKTsKK30KKworc3RhdGljIHUzMiBnZXRfc3Ioc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJcmV0dXJuIERNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+c3IsIDMyKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2Rlc2NfY250KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLAorCQkJCXN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgdTMyIGNvdW50KQoreworCWh3LT5jb3VudCA9IENQVV9UT19ETUEoZnNsX2NoYW4sIGNvdW50LCAzMik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZXNjX3NyYyhzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwKKwkJCQlzdHJ1Y3QgZnNsX2RtYV9sZF9odyAqaHcsIGRtYV9hZGRyX3Qgc3JjKQoreworCXU2NCBzbm9vcF9iaXRzOworCisJc25vb3BfYml0cyA9ICgoZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKKwkJPyAoKHU2NClGU0xfRE1BX1NBVFJfU1JFQURUWVBFX1NOT09QX1JFQUQgPDwgMzIpIDogMDsKKwlody0+c3JjX2FkZHIgPSBDUFVfVE9fRE1BKGZzbF9jaGFuLCBzbm9vcF9iaXRzIHwgc3JjLCA2NCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZXNjX2Rlc3Qoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCisJCQkJc3RydWN0IGZzbF9kbWFfbGRfaHcgKmh3LCBkbWFfYWRkcl90IGRlc3QpCit7CisJdTY0IHNub29wX2JpdHM7CisKKwlzbm9vcF9iaXRzID0gKChmc2xfY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84NVhYKQorCQk/ICgodTY0KUZTTF9ETUFfREFUUl9EV1JJVEVUWVBFX1NOT09QX1dSSVRFIDw8IDMyKSA6IDA7CisJaHctPmRzdF9hZGRyID0gQ1BVX1RPX0RNQShmc2xfY2hhbiwgc25vb3BfYml0cyB8IGRlc3QsIDY0KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2Rlc2NfbmV4dChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwKKwkJCQlzdHJ1Y3QgZnNsX2RtYV9sZF9odyAqaHcsIGRtYV9hZGRyX3QgbmV4dCkKK3sKKwl1NjQgc25vb3BfYml0czsKKworCXNub29wX2JpdHMgPSAoKGZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSA9PSBGU0xfRE1BX0lQXzgzWFgpCisJCT8gRlNMX0RNQV9TTkVOIDogMDsKKwlody0+bmV4dF9sbl9hZGRyID0gQ1BVX1RPX0RNQShmc2xfY2hhbiwgc25vb3BfYml0cyB8IG5leHQsIDY0KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2NkYXIoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGRtYV9hZGRyX3QgYWRkcikKK3sKKwlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5jZGFyLCBhZGRyIHwgRlNMX0RNQV9TTkVOLCA2NCk7Cit9CisKK3N0YXRpYyBkbWFfYWRkcl90IGdldF9jZGFyKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQoreworCXJldHVybiBETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPmNkYXIsIDY0KSAmIH5GU0xfRE1BX1NORU47Cit9CisKK3N0YXRpYyB2b2lkIHNldF9uZGFyKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBkbWFfYWRkcl90IGFkZHIpCit7CisJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bmRhciwgYWRkciwgNjQpOworfQorCitzdGF0aWMgZG1hX2FkZHJfdCBnZXRfbmRhcihzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlyZXR1cm4gRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5uZGFyLCA2NCk7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X2JjcihzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlyZXR1cm4gRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5iY3IsIDMyKTsKK30KKworc3RhdGljIGludCBkbWFfaXNfaWRsZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwl1MzIgc3IgPSBnZXRfc3IoZnNsX2NoYW4pOworCXJldHVybiAoIShzciAmIEZTTF9ETUFfU1JfQ0IpKSB8fCAoc3IgJiBGU0xfRE1BX1NSX0NIKTsKK30KKworc3RhdGljIHZvaWQgZG1hX3N0YXJ0KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQoreworCXUzMiBtcl9zZXQgPSAwOzsKKworCWlmIChmc2xfY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfQ0hBTl9QQVVTRV9FWFQpIHsKKwkJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+YmNyLCAwLCAzMik7CisJCW1yX3NldCB8PSBGU0xfRE1BX01SX0VNUF9FTjsKKwl9IGVsc2UKKwkJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsCisJCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAzMikKKwkJCQkmIH5GU0xfRE1BX01SX0VNUF9FTiwgMzIpOworCisJaWYgKGZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9DSEFOX1NUQVJUX0VYVCkKKwkJbXJfc2V0IHw9IEZTTF9ETUFfTVJfRU1TX0VOOworCWVsc2UKKwkJbXJfc2V0IHw9IEZTTF9ETUFfTVJfQ1M7CisKKwlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKKwkJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKQorCQkJfCBtcl9zZXQsIDMyKTsKK30KKworc3RhdGljIHZvaWQgZG1hX2hhbHQoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCit7CisJaW50IGkgPSAwOworCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLAorCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAzMikgfCBGU0xfRE1BX01SX0NBLAorCQkzMik7CisJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsCisJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSAmIH4oRlNMX0RNQV9NUl9DUworCQl8IEZTTF9ETUFfTVJfRU1TX0VOIHwgRlNMX0RNQV9NUl9DQSksIDMyKTsKKworCXdoaWxlICghZG1hX2lzX2lkbGUoZnNsX2NoYW4pICYmIChpKysgPCAxMDApKQorCQl1ZGVsYXkoMTApOworCWlmIChpID49IDEwMCAmJiAhZG1hX2lzX2lkbGUoZnNsX2NoYW4pKQorCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJETUEgaGFsdCB0aW1lb3V0IVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9sZF9lb2woc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCisJCQlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCit7CisJZGVzYy0+aHcubmV4dF9sbl9hZGRyID0gQ1BVX1RPX0RNQShmc2xfY2hhbiwKKwkJRE1BX1RPX0NQVShmc2xfY2hhbiwgZGVzYy0+aHcubmV4dF9sbl9hZGRyLCA2NCkJfCBGU0xfRE1BX0VPTCwKKwkJNjQpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbGRfcXVldWUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCisJCXN0cnVjdCBmc2xfZGVzY19zdyAqbmV3X2Rlc2MpCit7CisJc3RydWN0IGZzbF9kZXNjX3N3ICpxdWV1ZV90YWlsID0gdG9fZnNsX2Rlc2MoZnNsX2NoYW4tPmxkX3F1ZXVlLnByZXYpOworCisJaWYgKGxpc3RfZW1wdHkoJmZzbF9jaGFuLT5sZF9xdWV1ZSkpCisJCXJldHVybjsKKworCS8qIExpbmsgdG8gdGhlIG5ldyBkZXNjcmlwdG9yIHBoeXNpY2FsIGFkZHJlc3MgYW5kCisJICogRW5hYmxlIEVuZC1vZi1zZWdtZW50IGludGVycnVwdCBmb3IKKwkgKiB0aGUgbGFzdCBsaW5rIGRlc2NyaXB0b3IuCisJICogKHRoZSBwcmV2aW91cyBub2RlJ3MgbmV4dCBsaW5rIGRlc2NyaXB0b3IpCisJICoKKwkgKiBGb3IgRlNMX0RNQV9JUF84M3h4LCB0aGUgc25vb3AgZW5hYmxlIGJpdCBuZWVkIGJlIHNldC4KKwkgKi8KKwlxdWV1ZV90YWlsLT5ody5uZXh0X2xuX2FkZHIgPSBDUFVfVE9fRE1BKGZzbF9jaGFuLAorCQkJbmV3X2Rlc2MtPmFzeW5jX3R4LnBoeXMgfCBGU0xfRE1BX0VPU0lFIHwKKwkJCSgoKGZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKQorCQkJCT09IEZTTF9ETUFfSVBfODNYWCkgPyBGU0xfRE1BX1NORU4gOiAwKSwgNjQpOworfQorCisvKioKKyAqIGZzbF9jaGFuX3NldF9zcmNfbG9vcF9zaXplIC0gU2V0IHNvdXJjZSBhZGRyZXNzIGhvbGQgdHJhbnNmZXIgc2l6ZQorICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKiBAc2l6ZSAgICAgOiBBZGRyZXNzIGxvb3Agc2l6ZSwgMCBmb3IgZGlzYWJsZSBsb29wCisgKgorICogVGhlIHNldCBzb3VyY2UgYWRkcmVzcyBob2xkIHRyYW5zZmVyIHNpemUuIFRoZSBzb3VyY2UKKyAqIGFkZHJlc3MgaG9sZCBvciBsb29wIHRyYW5zZmVyIHNpemUgaXMgd2hlbiB0aGUgRE1BIHRyYW5zZmVyCisgKiBkYXRhIGZyb20gc291cmNlIGFkZHJlc3MgKFNBKSwgaWYgdGhlIGxvb3Agc2l6ZSBpcyA0LCB0aGUgRE1BIHdpbGwKKyAqIHJlYWQgZGF0YSBmcm9tIFNBLCBTQSArIDEsIFNBICsgMiwgU0EgKyAzLCB0aGVuIGxvb3AgYmFjayB0byBTQSwKKyAqIFNBICsgMSAuLi4gYW5kIHNvIG9uLgorICovCitzdGF0aWMgdm9pZCBmc2xfY2hhbl9zZXRfc3JjX2xvb3Bfc2l6ZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAwOgorCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKKwkJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSAmCisJCQkofkZTTF9ETUFfTVJfU0FIRSksIDMyKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDQ6CisJY2FzZSA4OgorCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKKwkJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSB8CisJCQlGU0xfRE1BX01SX1NBSEUgfCAoX19pbG9nMihzaXplKSA8PCAxNCksCisJCQkzMik7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBmc2xfY2hhbl9zZXRfZGVzdF9sb29wX3NpemUgLSBTZXQgZGVzdGluYXRpb24gYWRkcmVzcyBob2xkIHRyYW5zZmVyIHNpemUKKyAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQHNpemUgICAgIDogQWRkcmVzcyBsb29wIHNpemUsIDAgZm9yIGRpc2FibGUgbG9vcAorICoKKyAqIFRoZSBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyBob2xkIHRyYW5zZmVyIHNpemUuIFRoZSBkZXN0aW5hdGlvbgorICogYWRkcmVzcyBob2xkIG9yIGxvb3AgdHJhbnNmZXIgc2l6ZSBpcyB3aGVuIHRoZSBETUEgdHJhbnNmZXIKKyAqIGRhdGEgdG8gZGVzdGluYXRpb24gYWRkcmVzcyAoVEEpLCBpZiB0aGUgbG9vcCBzaXplIGlzIDQsIHRoZSBETUEgd2lsbAorICogd3JpdGUgZGF0YSB0byBUQSwgVEEgKyAxLCBUQSArIDIsIFRBICsgMywgdGhlbiBsb29wIGJhY2sgdG8gVEEsCisgKiBUQSArIDEgLi4uIGFuZCBzbyBvbi4KKyAqLworc3RhdGljIHZvaWQgZnNsX2NoYW5fc2V0X2Rlc3RfbG9vcF9zaXplKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDA6CisJCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLAorCQkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpICYKKwkJCSh+RlNMX0RNQV9NUl9EQUhFKSwgMzIpOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLAorCQkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpIHwKKwkJCUZTTF9ETUFfTVJfREFIRSB8IChfX2lsb2cyKHNpemUpIDw8IDE2KSwKKwkJCTMyKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIGZzbF9jaGFuX3RvZ2dsZV9leHRfcGF1c2UgLSBUb2dnbGUgY2hhbm5lbCBleHRlcm5hbCBwYXVzZSBzdGF0dXMKKyAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQHNpemUgICAgIDogUGF1c2UgY29udHJvbCBzaXplLCAwIGZvciBkaXNhYmxlIGV4dGVybmFsIHBhdXNlIGNvbnRyb2wuCisgKiAgICAgICAgICAgICBUaGUgbWF4aW11bSBpcyAxMDI0LgorICoKKyAqIFRoZSBGcmVlc2NhbGUgRE1BIGNoYW5uZWwgY2FuIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGV4dGVybmFsCisgKiBzaWduYWwgRFJFUSMuIFRoZSBwYXVzZSBjb250cm9sIHNpemUgaXMgaG93IG1hbnkgYnl0ZXMgYXJlIGFsbG93ZWQKKyAqIHRvIHRyYW5zZmVyIGJlZm9yZSBwYXVzaW5nIHRoZSBjaGFubmVsLCBhZnRlciB3aGljaCBhIG5ldyBhc3NlcnRpb24KKyAqIG9mIERSRVEjIHJlc3VtZXMgY2hhbm5lbCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGZzbF9jaGFuX3RvZ2dsZV9leHRfcGF1c2Uoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGludCBzaXplKQoreworCWlmIChzaXplID4gMTAyNCkKKwkJcmV0dXJuOworCisJaWYgKHNpemUpIHsKKwkJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsCisJCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAzMikKKwkJCQl8ICgoX19pbG9nMihzaXplKSA8PCAyNCkgJiAweDBmMDAwMDAwKSwKKwkJCTMyKTsKKwkJZnNsX2NoYW4tPmZlYXR1cmUgfD0gRlNMX0RNQV9DSEFOX1BBVVNFX0VYVDsKKwl9IGVsc2UKKwkJZnNsX2NoYW4tPmZlYXR1cmUgJj0gfkZTTF9ETUFfQ0hBTl9QQVVTRV9FWFQ7Cit9CisKKy8qKgorICogZnNsX2NoYW5fdG9nZ2xlX2V4dF9zdGFydCAtIFRvZ2dsZSBjaGFubmVsIGV4dGVybmFsIHN0YXJ0IHN0YXR1cworICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKiBAZW5hYmxlICAgOiAwIGlzIGRpc2FibGVkLCAxIGlzIGVuYWJsZWQuCisgKgorICogSWYgZW5hYmxlIHRoZSBleHRlcm5hbCBzdGFydCwgdGhlIGNoYW5uZWwgY2FuIGJlIHN0YXJ0ZWQgYnkgYW4KKyAqIGV4dGVybmFsIERNQSBzdGFydCBwaW4uIFNvIHRoZSBkbWFfc3RhcnQoKSBkb2VzIG5vdCBzdGFydCB0aGUKKyAqIHRyYW5zZmVyIGltbWVkaWF0ZWx5LiBUaGUgRE1BIGNoYW5uZWwgd2lsbCB3YWl0IGZvciB0aGUKKyAqIGNvbnRyb2wgcGluIGFzc2VydGVkLgorICovCitzdGF0aWMgdm9pZCBmc2xfY2hhbl90b2dnbGVfZXh0X3N0YXJ0KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCWZzbF9jaGFuLT5mZWF0dXJlIHw9IEZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQ7CisJZWxzZQorCQlmc2xfY2hhbi0+ZmVhdHVyZSAmPSB+RlNMX0RNQV9DSEFOX1NUQVJUX0VYVDsKK30KKworc3RhdGljIGRtYV9jb29raWVfdCBmc2xfZG1hX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQoreworCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYyA9IHR4X3RvX2ZzbF9kZXNjKHR4KTsKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9jaGFuKHR4LT5jaGFuKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRtYV9jb29raWVfdCBjb29raWU7CisKKwkvKiBjb29raWUgaW5jcmVtZW50IGFuZCBhZGRpbmcgdG8gbGRfcXVldWUgbXVzdCBiZSBhdG9taWMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCisJY29va2llID0gZnNsX2NoYW4tPmNvbW1vbi5jb29raWU7CisJY29va2llKys7CisJaWYgKGNvb2tpZSA8IDApCisJCWNvb2tpZSA9IDE7CisJZGVzYy0+YXN5bmNfdHguY29va2llID0gY29va2llOworCWZzbF9jaGFuLT5jb21tb24uY29va2llID0gZGVzYy0+YXN5bmNfdHguY29va2llOworCisJYXBwZW5kX2xkX3F1ZXVlKGZzbF9jaGFuLCBkZXNjKTsKKwlsaXN0X3NwbGljZV9pbml0KCZkZXNjLT5hc3luY190eC50eF9saXN0LCBmc2xfY2hhbi0+bGRfcXVldWUucHJldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY29va2llOworfQorCisvKioKKyAqIGZzbF9kbWFfYWxsb2NfZGVzY3JpcHRvciAtIEFsbG9jYXRlIGRlc2NyaXB0b3IgZnJvbSBjaGFubmVsJ3MgRE1BIHBvb2wuCisgKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqCisgKiBSZXR1cm4gLSBUaGUgZGVzY3JpcHRvciBhbGxvY2F0ZWQuIE5VTEwgZm9yIGZhaWxlZC4KKyAqLworc3RhdGljIHN0cnVjdCBmc2xfZGVzY19zdyAqZnNsX2RtYV9hbGxvY19kZXNjcmlwdG9yKAorCQkJCQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlkbWFfYWRkcl90IHBkZXNjOworCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzY19zdzsKKworCWRlc2Nfc3cgPSBkbWFfcG9vbF9hbGxvYyhmc2xfY2hhbi0+ZGVzY19wb29sLCBHRlBfQVRPTUlDLCAmcGRlc2MpOworCWlmIChkZXNjX3N3KSB7CisJCW1lbXNldChkZXNjX3N3LCAwLCBzaXplb2Yoc3RydWN0IGZzbF9kZXNjX3N3KSk7CisJCWRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmRlc2Nfc3ctPmFzeW5jX3R4LAorCQkJCQkJJmZzbF9jaGFuLT5jb21tb24pOworCQlkZXNjX3N3LT5hc3luY190eC50eF9zdWJtaXQgPSBmc2xfZG1hX3R4X3N1Ym1pdDsKKwkJSU5JVF9MSVNUX0hFQUQoJmRlc2Nfc3ctPmFzeW5jX3R4LnR4X2xpc3QpOworCQlkZXNjX3N3LT5hc3luY190eC5waHlzID0gcGRlc2M7CisJfQorCisJcmV0dXJuIGRlc2Nfc3c7Cit9CisKKworLyoqCisgKiBmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzIC0gQWxsb2NhdGUgcmVzb3VyY2VzIGZvciBETUEgY2hhbm5lbC4KKyAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBkbWEgcG9vbCBmb3IgZGVzY3JpcHRvciBhbGxvY2F0aW9uLgorICoKKyAqIFJldHVybiAtIFRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgYWxsb2NhdGVkLgorICovCitzdGF0aWMgaW50IGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIFdlIG5lZWQgdGhlIGRlc2NyaXB0b3IgdG8gYmUgYWxpZ25lZCB0byAzMmJ5dGVzCisJICogZm9yIG1lZXRpbmcgRlNMIERNQSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVtZW50LgorCSAqLworCWZzbF9jaGFuLT5kZXNjX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoImZzbF9kbWFfZW5naW5lX2Rlc2NfcG9vbCIsCisJCQlmc2xfY2hhbi0+ZGV2LCBzaXplb2Yoc3RydWN0IGZzbF9kZXNjX3N3KSwKKwkJCTMyLCAwKTsKKwlpZiAoIWZzbF9jaGFuLT5kZXNjX3Bvb2wpIHsKKwkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBjaGFubmVsICVkICIKKwkJCSJkZXNjcmlwdG9yIGRtYSBwb29sLlxuIiwgZnNsX2NoYW4tPmlkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzIC0gRnJlZSBhbGwgcmVzb3VyY2VzIG9mIHRoZSBjaGFubmVsLgorICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIGZzbF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MsICpfZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiRnJlZSBhbGwgY2hhbm5lbCByZXNvdXJjZXMuXG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJmZzbF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgeworI2lmZGVmIEZTTF9ETUFfTERfREVCVUcKKwkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LAorCQkJCSJMRCAlcCB3aWxsIGJlIHJlbGVhc2VkLlxuIiwgZGVzYyk7CisjZW5kaWYKKwkJbGlzdF9kZWwoJmRlc2MtPm5vZGUpOworCQkvKiBmcmVlIGxpbmsgZGVzY3JpcHRvciAqLworCQlkbWFfcG9vbF9mcmVlKGZzbF9jaGFuLT5kZXNjX3Bvb2wsIGRlc2MsIGRlc2MtPmFzeW5jX3R4LnBoeXMpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisJZG1hX3Bvb2xfZGVzdHJveShmc2xfY2hhbi0+ZGVzY19wb29sKTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCitmc2xfZG1hX3ByZXBfaW50ZXJydXB0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbjsKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKm5ldzsKKworCWlmICghY2hhbikKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfY2hhbiA9IHRvX2ZzbF9jaGFuKGNoYW4pOworCisJbmV3ID0gZnNsX2RtYV9hbGxvY19kZXNjcmlwdG9yKGZzbF9jaGFuKTsKKwlpZiAoIW5ldykgeworCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJObyBmcmVlIG1lbW9yeSBmb3IgbGluayBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUJVU1k7CisJbmV3LT5hc3luY190eC5mbGFncyA9IGZsYWdzOworCisJLyogSW5zZXJ0IHRoZSBsaW5rIGRlc2NyaXB0b3IgdG8gdGhlIExEIHJpbmcgKi8KKwlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZuZXctPmFzeW5jX3R4LnR4X2xpc3QpOworCisJLyogU2V0IEVuZC1vZi1saW5rIHRvIHRoZSBsYXN0IGxpbmsgZGVzY3JpcHRvciBvZiBuZXcgbGlzdCovCisJc2V0X2xkX2VvbChmc2xfY2hhbiwgbmV3KTsKKworCXJldHVybiAmbmV3LT5hc3luY190eDsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2RtYV9wcmVwX21lbWNweSgKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1hX2Rlc3QsIGRtYV9hZGRyX3QgZG1hX3NyYywKKwlzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuOworCXN0cnVjdCBmc2xfZGVzY19zdyAqZmlyc3QgPSBOVUxMLCAqcHJldiA9IE5VTEwsICpuZXc7CisJc2l6ZV90IGNvcHk7CisJTElTVF9IRUFEKGxpbmtfY2hhaW4pOworCisJaWYgKCFjaGFuKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7CisKKwlkbyB7CisKKwkJLyogQWxsb2NhdGUgdGhlIGxpbmsgZGVzY3JpcHRvciBmcm9tIERNQSBwb29sICovCisJCW5ldyA9IGZzbF9kbWFfYWxsb2NfZGVzY3JpcHRvcihmc2xfY2hhbik7CisJCWlmICghbmV3KSB7CisJCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCisJCQkJCSJObyBmcmVlIG1lbW9yeSBmb3IgbGluayBkZXNjcmlwdG9yXG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisjaWZkZWYgRlNMX0RNQV9MRF9ERUJVRworCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJuZXcgbGluayBkZXNjIGFsbG9jICVwXG4iLCBuZXcpOworI2VuZGlmCisKKwkJY29weSA9IG1pbihsZW4sIChzaXplX3QpRlNMX0RNQV9CQ1JfTUFYX0NOVCk7CisKKwkJc2V0X2Rlc2NfY250KGZzbF9jaGFuLCAmbmV3LT5odywgY29weSk7CisJCXNldF9kZXNjX3NyYyhmc2xfY2hhbiwgJm5ldy0+aHcsIGRtYV9zcmMpOworCQlzZXRfZGVzY19kZXN0KGZzbF9jaGFuLCAmbmV3LT5odywgZG1hX2Rlc3QpOworCisJCWlmICghZmlyc3QpCisJCQlmaXJzdCA9IG5ldzsKKwkJZWxzZQorCQkJc2V0X2Rlc2NfbmV4dChmc2xfY2hhbiwgJnByZXYtPmh3LCBuZXctPmFzeW5jX3R4LnBoeXMpOworCisJCW5ldy0+YXN5bmNfdHguY29va2llID0gMDsKKwkJYXN5bmNfdHhfYWNrKCZuZXctPmFzeW5jX3R4KTsKKworCQlwcmV2ID0gbmV3OworCQlsZW4gLT0gY29weTsKKwkJZG1hX3NyYyArPSBjb3B5OworCQlkbWFfZGVzdCArPSBjb3B5OworCisJCS8qIEluc2VydCB0aGUgbGluayBkZXNjcmlwdG9yIHRvIHRoZSBMRCByaW5nICovCisJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJmZpcnN0LT5hc3luY190eC50eF9saXN0KTsKKwl9IHdoaWxlIChsZW4pOworCisJbmV3LT5hc3luY190eC5mbGFncyA9IGZsYWdzOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLworCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOworCisJLyogU2V0IEVuZC1vZi1saW5rIHRvIHRoZSBsYXN0IGxpbmsgZGVzY3JpcHRvciBvZiBuZXcgbGlzdCovCisJc2V0X2xkX2VvbChmc2xfY2hhbiwgbmV3KTsKKworCXJldHVybiBmaXJzdCA/ICZmaXJzdC0+YXN5bmNfdHggOiBOVUxMOworfQorCisvKioKKyAqIGZzbF9kbWFfdXBkYXRlX2NvbXBsZXRlZF9jb29raWUgLSBVcGRhdGUgdGhlIGNvbXBsZXRlZCBjb29raWUuCisgKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgZnNsX2RtYV91cGRhdGVfY29tcGxldGVkX2Nvb2tpZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmN1cl9kZXNjLCAqZGVzYzsKKwlkbWFfYWRkcl90IGxkX3BoeTsKKworCWxkX3BoeSA9IGdldF9jZGFyKGZzbF9jaGFuKSAmIEZTTF9ETUFfTkxEQV9NQVNLOworCisJaWYgKGxkX3BoeSkgeworCQljdXJfZGVzYyA9IE5VTEw7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJmZzbF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkKKwkJCWlmIChkZXNjLT5hc3luY190eC5waHlzID09IGxkX3BoeSkgeworCQkJCWN1cl9kZXNjID0gZGVzYzsKKwkJCQlicmVhazsKKwkJCX0KKworCQlpZiAoY3VyX2Rlc2MgJiYgY3VyX2Rlc2MtPmFzeW5jX3R4LmNvb2tpZSkgeworCQkJaWYgKGRtYV9pc19pZGxlKGZzbF9jaGFuKSkKKwkJCQlmc2xfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9CisJCQkJCWN1cl9kZXNjLT5hc3luY190eC5jb29raWU7CisJCQllbHNlCisJCQkJZnNsX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgPQorCQkJCQljdXJfZGVzYy0+YXN5bmNfdHguY29va2llIC0gMTsKKwkJfQorCX0KK30KKworLyoqCisgKiBmc2xfY2hhbl9sZF9jbGVhbnVwIC0gQ2xlYW4gdXAgbGluayBkZXNjcmlwdG9ycworICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbiB1cCB0aGUgbGRfcXVldWUgb2YgRE1BIGNoYW5uZWwuCisgKiBJZiAnaW5faW50cicgaXMgc2V0LCB0aGUgZnVuY3Rpb24gd2lsbCBtb3ZlIHRoZSBsaW5rIGRlc2NyaXB0b3IgdG8KKyAqIHRoZSByZWN5Y2xlIGxpc3QuIE90aGVyd2lzZSwgZnJlZSBpdCBkaXJlY3RseS4KKyAqLworc3RhdGljIHZvaWQgZnNsX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MsICpfZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKworCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImNoYW4gY29tcGxldGVkX2Nvb2tpZSA9ICVkXG4iLAorCQkJZnNsX2NoYW4tPmNvbXBsZXRlZF9jb29raWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJmZzbF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgeworCQlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2s7CisJCXZvaWQgKmNhbGxiYWNrX3BhcmFtOworCisJCWlmIChkbWFfYXN5bmNfaXNfY29tcGxldGUoZGVzYy0+YXN5bmNfdHguY29va2llLAorCQkJICAgIGZzbF9jaGFuLT5jb21wbGV0ZWRfY29va2llLCBmc2xfY2hhbi0+Y29tbW9uLmNvb2tpZSkKKwkJCQk9PSBETUFfSU5fUFJPR1JFU1MpCisJCQlicmVhazsKKworCQljYWxsYmFjayA9IGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrOworCQljYWxsYmFja19wYXJhbSA9IGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrX3BhcmFtOworCisJCS8qIFJlbW92ZSBmcm9tIGxkX3F1ZXVlIGxpc3QgKi8KKwkJbGlzdF9kZWwoJmRlc2MtPm5vZGUpOworCisJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImxpbmsgZGVzY3JpcHRvciAlcCB3aWxsIGJlIHJlY3ljbGUuXG4iLAorCQkJCWRlc2MpOworCQlkbWFfcG9vbF9mcmVlKGZzbF9jaGFuLT5kZXNjX3Bvb2wsIGRlc2MsIGRlc2MtPmFzeW5jX3R4LnBoeXMpOworCisJCS8qIFJ1biB0aGUgbGluayBkZXNjcmlwdG9yIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJCWlmIChjYWxsYmFjaykgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCQkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAibGluayBkZXNjcmlwdG9yICVwIGNhbGxiYWNrXG4iLAorCQkJCQlkZXNjKTsKKwkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIGZzbF9jaGFuX3hmZXJfbGRfcXVldWUgLSBUcmFuc2ZlciBsaW5rIGRlc2NyaXB0b3JzIGluIGNoYW5uZWwgbGRfcXVldWUuCisgKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgZnNsX2NoYW5feGZlcl9sZF9xdWV1ZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsZF9ub2RlOworCWRtYV9hZGRyX3QgbmV4dF9kZXN0X2FkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZG1hX2lzX2lkbGUoZnNsX2NoYW4pKQorCQlyZXR1cm47CisKKwlkbWFfaGFsdChmc2xfY2hhbik7CisKKwkvKiBJZiB0aGVyZSBhcmUgc29tZSBsaW5rIGRlc2NyaXB0b3JzCisJICogbm90IHRyYW5zZmVyZWQgaW4gcXVldWUuIFdlIG5lZWQgdG8gc3RhcnQgaXQuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKworCS8qIEZpbmQgdGhlIGZpcnN0IHVuLXRyYW5zZmVyIGRlc2NpcHRvciAqLworCWZvciAobGRfbm9kZSA9IGZzbF9jaGFuLT5sZF9xdWV1ZS5uZXh0OworCQkobGRfbm9kZSAhPSAmZnNsX2NoYW4tPmxkX3F1ZXVlKQorCQkJJiYgKGRtYV9hc3luY19pc19jb21wbGV0ZSgKKwkJCQl0b19mc2xfZGVzYyhsZF9ub2RlKS0+YXN5bmNfdHguY29va2llLAorCQkJCWZzbF9jaGFuLT5jb21wbGV0ZWRfY29va2llLAorCQkJCWZzbF9jaGFuLT5jb21tb24uY29va2llKSA9PSBETUFfU1VDQ0VTUyk7CisJCWxkX25vZGUgPSBsZF9ub2RlLT5uZXh0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKworCWlmIChsZF9ub2RlICE9ICZmc2xfY2hhbi0+bGRfcXVldWUpIHsKKwkJLyogR2V0IHRoZSBsZCBzdGFydCBhZGRyZXNzIGZyb20gbGRfcXVldWUgKi8KKwkJbmV4dF9kZXN0X2FkZHIgPSB0b19mc2xfZGVzYyhsZF9ub2RlKS0+YXN5bmNfdHgucGh5czsKKwkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAieGZlciBMRHMgc3RhcmluZyBmcm9tICVwXG4iLAorCQkJCSh2b2lkICopbmV4dF9kZXN0X2FkZHIpOworCQlzZXRfY2Rhcihmc2xfY2hhbiwgbmV4dF9kZXN0X2FkZHIpOworCQlkbWFfc3RhcnQoZnNsX2NoYW4pOworCX0gZWxzZSB7CisJCXNldF9jZGFyKGZzbF9jaGFuLCAwKTsKKwkJc2V0X25kYXIoZnNsX2NoYW4sIDApOworCX0KK30KKworLyoqCisgKiBmc2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nIC0gSXNzdWUgdGhlIERNQSBzdGFydCBjb21tYW5kCisgKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKKworI2lmZGVmIEZTTF9ETUFfTERfREVCVUcKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmxkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZmc2xfY2hhbi0+bGRfcXVldWUpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgIi0tbWVtY3B5IGlzc3VlLS1cbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobGQsICZmc2xfY2hhbi0+bGRfcXVldWUsIG5vZGUpIHsKKwkJaW50IGk7CisJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgIkNoICVkLCBMRCAlMDh4XG4iLAorCQkJCWZzbF9jaGFuLT5pZCwgbGQtPmFzeW5jX3R4LnBoeXMpOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiTEQgb2Zmc2V0ICVkOiAlMDh4XG4iLAorCQkJCQlpLCAqKCgodTMyICopJmxkLT5odykgKyBpKSk7CisJfQorCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgIi0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKyNlbmRpZgorCisJZnNsX2NoYW5feGZlcl9sZF9xdWV1ZShmc2xfY2hhbik7Cit9CisKKy8qKgorICogZnNsX2RtYV9pc19jb21wbGV0ZSAtIERldGVybWluZSB0aGUgRE1BIHN0YXR1cworICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKi8KK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsX2RtYV9pc19jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCWRtYV9jb29raWVfdCBjb29raWUsCisJCQkJCWRtYV9jb29raWVfdCAqZG9uZSwKKwkJCQkJZG1hX2Nvb2tpZV90ICp1c2VkKQoreworCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7CisJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKKwlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKKworCWZzbF9jaGFuX2xkX2NsZWFudXAoZnNsX2NoYW4pOworCisJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOworCWxhc3RfY29tcGxldGUgPSBmc2xfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZTsKKworCWlmIChkb25lKQorCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CisKKwlpZiAodXNlZCkKKwkJKnVzZWQgPSBsYXN0X3VzZWQ7CisKKwlyZXR1cm4gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGZzbF9kbWFfY2hhbl9kb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IChzdHJ1Y3QgZnNsX2RtYV9jaGFuICopZGF0YTsKKwl1MzIgc3RhdDsKKwlpbnQgdXBkYXRlX2Nvb2tpZSA9IDA7CisJaW50IHhmZXJfbGRfcSA9IDA7CisKKwlzdGF0ID0gZ2V0X3NyKGZzbF9jaGFuKTsKKwlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJldmVudDogY2hhbm5lbCAlZCwgc3RhdCA9IDB4JXhcbiIsCisJCQkJCQlmc2xfY2hhbi0+aWQsIHN0YXQpOworCXNldF9zcihmc2xfY2hhbiwgc3RhdCk7CQkvKiBDbGVhciB0aGUgZXZlbnQgcmVnaXN0ZXIgKi8KKworCXN0YXQgJj0gfihGU0xfRE1BX1NSX0NCIHwgRlNMX0RNQV9TUl9DSCk7CisJaWYgKCFzdGF0KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfVEUpCisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgIlRyYW5zZmVyIEVycm9yIVxuIik7CisKKwkvKiBQcm9ncmFtbWluZyBFcnJvcgorCSAqIFRoZSBETUFfSU5URVJSVVBUIGFzeW5jX3R4IGlzIGEgTlVMTCB0cmFuc2Zlciwgd2hpY2ggd2lsbAorCSAqIHRyaWdlciBhIFBFIGludGVycnVwdC4KKwkgKi8KKwlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfUEUpIHsKKwkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiZXZlbnQ6IFByb2dyYW1taW5nIEVycm9yIElOVFxuIik7CisJCWlmIChnZXRfYmNyKGZzbF9jaGFuKSA9PSAwKSB7CisJCQkvKiBCQ1IgcmVnaXN0ZXIgaXMgMCwgdGhpcyBpcyBhIERNQV9JTlRFUlJVUFQgYXN5bmNfdHguCisJCQkgKiBOb3csIHVwZGF0ZSB0aGUgY29tcGxldGVkIGNvb2tpZSwgYW5kIGNvbnRpbnVlIHRoZQorCQkJICogbmV4dCB1bmNvbXBsZXRlZCB0cmFuc2Zlci4KKwkJCSAqLworCQkJdXBkYXRlX2Nvb2tpZSA9IDE7CisJCQl4ZmVyX2xkX3EgPSAxOworCQl9CisJCXN0YXQgJj0gfkZTTF9ETUFfU1JfUEU7CisJfQorCisJLyogSWYgdGhlIGxpbmsgZGVzY3JpcHRvciBzZWdtZW50IHRyYW5zZmVyIGZpbmlzaGVzLAorCSAqIHdlIHdpbGwgcmVjeWNsZSB0aGUgdXNlZCBkZXNjcmlwdG9yLgorCSAqLworCWlmIChzdGF0ICYgRlNMX0RNQV9TUl9FT1NJKSB7CisJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBFbmQtb2Ytc2VnbWVudHMgSU5UXG4iKTsKKwkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiZXZlbnQ6IGNsbmRhciAlcCwgbmxuZGFyICVwXG4iLAorCQkJKHZvaWQgKilnZXRfY2Rhcihmc2xfY2hhbiksICh2b2lkICopZ2V0X25kYXIoZnNsX2NoYW4pKTsKKwkJc3RhdCAmPSB+RlNMX0RNQV9TUl9FT1NJOworCQl1cGRhdGVfY29va2llID0gMTsKKwl9CisKKwkvKiBGb3IgTVBDODM0OSwgRU9DREkgZXZlbnQgbmVlZCB0byB1cGRhdGUgY29va2llCisJICogYW5kIHN0YXJ0IHRoZSBuZXh0IHRyYW5zZmVyIGlmIGl0IGV4aXN0LgorCSAqLworCWlmIChzdGF0ICYgRlNMX0RNQV9TUl9FT0NESSkgeworCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJldmVudDogRW5kLW9mLUNoYWluIGxpbmsgSU5UXG4iKTsKKwkJc3RhdCAmPSB+RlNMX0RNQV9TUl9FT0NESTsKKwkJdXBkYXRlX2Nvb2tpZSA9IDE7CisJCXhmZXJfbGRfcSA9IDE7CisJfQorCisJLyogSWYgaXQgY3VycmVudCB0cmFuc2ZlciBpcyB0aGUgZW5kLW9mLXRyYW5zZmVyLAorCSAqIHdlIHNob3VsZCBjbGVhciB0aGUgQ2hhbm5lbCBTdGFydCBiaXQgZm9yCisJICogcHJlcGFyZSBuZXh0IHRyYW5zZmVyLgorCSAqLworCWlmIChzdGF0ICYgRlNMX0RNQV9TUl9FT0xOSSkgeworCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJldmVudDogRW5kLW9mLWxpbmsgSU5UXG4iKTsKKwkJc3RhdCAmPSB+RlNMX0RNQV9TUl9FT0xOSTsKKwkJeGZlcl9sZF9xID0gMTsKKwl9CisKKwlpZiAodXBkYXRlX2Nvb2tpZSkKKwkJZnNsX2RtYV91cGRhdGVfY29tcGxldGVkX2Nvb2tpZShmc2xfY2hhbik7CisJaWYgKHhmZXJfbGRfcSkKKwkJZnNsX2NoYW5feGZlcl9sZF9xdWV1ZShmc2xfY2hhbik7CisJaWYgKHN0YXQpCisJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiB1bmhhbmRsZWQgc3IgMHglMDJ4XG4iLAorCQkJCQlzdGF0KTsKKworCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBFeGl0XG4iKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZmc2xfY2hhbi0+dGFza2xldCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZnNsX2RtYV9kb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXYgPSAoc3RydWN0IGZzbF9kbWFfZGV2aWNlICopZGF0YTsKKwl1MzIgZ3NyOworCWludCBjaF9ucjsKKworCWdzciA9IChmZGV2LT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/IGluX2JlMzIoZmRldi0+cmVnX2Jhc2UpCisJCQk6IGluX2xlMzIoZmRldi0+cmVnX2Jhc2UpOworCWNoX25yID0gKDMyIC0gZmZzKGdzcikpIC8gODsKKworCXJldHVybiBmZGV2LT5jaGFuW2NoX25yXSA/IGZzbF9kbWFfY2hhbl9kb19pbnRlcnJ1cHQoaXJxLAorCQkJZmRldi0+Y2hhbltjaF9ucl0pIDogSVJRX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9kb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IChzdHJ1Y3QgZnNsX2RtYV9jaGFuICopZGF0YTsKKwlmc2xfY2hhbl9sZF9jbGVhbnVwKGZzbF9jaGFuKTsKK30KKworc3RhdGljIHZvaWQgZnNsX2RtYV9jYWxsYmFja190ZXN0KHZvaWQgKnBhcmFtKQoreworCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gcGFyYW07CisJaWYgKGZzbF9jaGFuKQorCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogY2FsbGJhY2sgaXMgb2shXG4iKTsKK30KKworc3RhdGljIGludCBmc2xfZG1hX3NlbGZfdGVzdChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJaW50IGVyciA9IDA7CisJZG1hX2FkZHJfdCBkbWFfZGVzdCwgZG1hX3NyYzsKKwlkbWFfY29va2llX3QgY29va2llOworCXU4ICpzcmMsICpkZXN0OworCWludCBpOworCXNpemVfdCB0ZXN0X3NpemU7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDEsICp0eDIsICp0eDM7CisKKwl0ZXN0X3NpemUgPSA0MDk2OworCisJc3JjID0ga21hbGxvYyh0ZXN0X3NpemUgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNyYykgeworCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCisJCQkJInNlbGZ0ZXN0OiBDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciB0ZXN0IVxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWRlc3QgPSBzcmMgKyB0ZXN0X3NpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGVzdF9zaXplOyBpKyspCisJCXNyY1tpXSA9ICh1OCkgaTsKKworCWNoYW4gPSAmZnNsX2NoYW4tPmNvbW1vbjsKKworCWlmIChmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGNoYW4pIDwgMSkgeworCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCisJCQkJInNlbGZ0ZXN0OiBDYW5ub3QgYWxsb2MgcmVzb3VyY2VzIGZvciBETUFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUWCAxICovCisJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGZzbF9jaGFuLT5kZXYsIHNyYywgdGVzdF9zaXplIC8gMiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJZG1hX2Rlc3QgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBkZXN0LCB0ZXN0X3NpemUgLyAyLAorCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKwl0eDEgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyAyLCAwKTsKKwlhc3luY190eF9hY2sodHgxKTsKKworCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4MSk7CisJZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhjaGFuKTsKKwltc2xlZXAoMik7CisKKwlpZiAoZnNsX2RtYV9pc19jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9IERNQV9TVUNDRVNTKSB7CisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUaW1lIG91dCFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUZXN0IGZyZWUgYW5kIHJlLWFsbG9jIGNoYW5uZWwgcmVzb3VyY2VzICovCisJZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKGNoYW4pOworCisJaWYgKGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoY2hhbikgPCAxKSB7CisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKKwkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyByZXNvdXJjZXMgZm9yIERNQVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9yZXNvdXJjZXM7CisJfQorCisJLyogQ29udGludWUgdG8gdGVzdAorCSAqIFRYIDIKKwkgKi8KKwlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjICsgdGVzdF9zaXplIC8gMiwKKwkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX2Rlc3QgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBkZXN0ICsgdGVzdF9zaXplIC8gMiwKKwkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX0ZST01fREVWSUNFKTsKKwl0eDIgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyA0LCAwKTsKKwlhc3luY190eF9hY2sodHgyKTsKKworCS8qIFRYIDMgKi8KKwlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjICsgdGVzdF9zaXplICogMyAvIDQsCisJCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9UT19ERVZJQ0UpOworCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCArIHRlc3Rfc2l6ZSAqIDMgLyA0LAorCQkJCQl0ZXN0X3NpemUgLyA0LCBETUFfRlJPTV9ERVZJQ0UpOworCXR4MyA9IGZzbF9kbWFfcHJlcF9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QsIGRtYV9zcmMsIHRlc3Rfc2l6ZSAvIDQsIDApOworCWFzeW5jX3R4X2Fjayh0eDMpOworCisJLyogSW50ZXJydXB0IHR4IHRlc3QgKi8KKwl0eDEgPSBmc2xfZG1hX3ByZXBfaW50ZXJydXB0KGNoYW4sIDApOworCWFzeW5jX3R4X2Fjayh0eDEpOworCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4MSk7CisKKwkvKiBUZXN0IGV4Y2hhbmdpbmcgdGhlIHByZXBhcmVkIHR4IHNvcnQgKi8KKwljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDMpOworCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4Mik7CisKKwlpZiAoZG1hX2hhc19jYXAoRE1BX0lOVEVSUlVQVCwgKChzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKikKKwkgICAgZGV2X2dldF9kcnZkYXRhKGZzbF9jaGFuLT5kZXYtPnBhcmVudCkpLT5jb21tb24uY2FwX21hc2spKSB7CisJCXR4My0+Y2FsbGJhY2sgPSBmc2xfZG1hX2NhbGxiYWNrX3Rlc3Q7CisJCXR4My0+Y2FsbGJhY2tfcGFyYW0gPSBmc2xfY2hhbjsKKwl9CisJZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhjaGFuKTsKKwltc2xlZXAoMik7CisKKwlpZiAoZnNsX2RtYV9pc19jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9IERNQV9TVUNDRVNTKSB7CisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUaW1lIG91dCFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfcmVzb3VyY2VzOworCX0KKworCWVyciA9IG1lbWNtcChzcmMsIGRlc3QsIHRlc3Rfc2l6ZSk7CisJaWYgKGVycikgeworCQlmb3IgKGkgPSAwOyAoKihzcmMgKyBpKSA9PSAqKGRlc3QgKyBpKSkgJiYgKGkgPCB0ZXN0X3NpemUpOworCQkJCWkrKyk7CisJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUZXN0IGZhaWxlZCwgZGF0YSAlZC8lbGQgaXMgIgorCQkJCSJlcnJvciEgc3JjIDB4JXgsIGRlc3QgMHgleFxuIiwKKwkJCQlpLCAobG9uZyl0ZXN0X3NpemUsICooc3JjICsgaSksICooZGVzdCArIGkpKTsKKwl9CisKK2ZyZWVfcmVzb3VyY2VzOgorCWZzbF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhjaGFuKTsKK291dDoKKwlrZnJlZShzcmMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZzbF9kbWFfY2hhbl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCisJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CisJc3RydWN0IGZzbF9kbWFfY2hhbiAqbmV3X2ZzbF9jaGFuOworCWludCBlcnI7CisKKwlmZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7CisJQlVHX09OKCFmZGV2KTsKKworCS8qIGFsbG9jIGNoYW5uZWwgKi8KKwluZXdfZnNsX2NoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9jaGFuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfZnNsX2NoYW4pIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJObyBmcmVlIG1lbW9yeSBmb3IgYWxsb2NhdGluZyAiCisJCQkJImRtYSBjaGFubmVscyFcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBnZXQgZG1hIGNoYW5uZWwgcmVnaXN0ZXIgYmFzZSAqLworCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LT5ub2RlLCAwLCAmbmV3X2ZzbF9jaGFuLT5yZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJDYW4ndCBnZXQgJXMgcHJvcGVydHkgJ3JlZydcbiIsCisJCQkJZGV2LT5ub2RlLT5mdWxsX25hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwluZXdfZnNsX2NoYW4tPmZlYXR1cmUgPSAqKHUzMiAqKW1hdGNoLT5kYXRhOworCisJaWYgKCFmZGV2LT5mZWF0dXJlKQorCQlmZGV2LT5mZWF0dXJlID0gbmV3X2ZzbF9jaGFuLT5mZWF0dXJlOworCisJLyogSWYgdGhlIERNQSBkZXZpY2UncyBmZWF0dXJlIGlzIGRpZmZlcmVudCB0aGFuIGl0cyBjaGFubmVscycsCisJICogcmVwb3J0IHRoZSBidWcuCisJICovCisJV0FSTl9PTihmZGV2LT5mZWF0dXJlICE9IG5ld19mc2xfY2hhbi0+ZmVhdHVyZSk7CisKKwluZXdfZnNsX2NoYW4tPmRldiA9ICZkZXYtPmRldjsKKwluZXdfZnNsX2NoYW4tPnJlZ19iYXNlID0gaW9yZW1hcChuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCwKKwkJCW5ld19mc2xfY2hhbi0+cmVnLmVuZCAtIG5ld19mc2xfY2hhbi0+cmVnLnN0YXJ0ICsgMSk7CisKKwluZXdfZnNsX2NoYW4tPmlkID0gKChuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCAtIDB4MTAwKSAmIDB4ZmZmKSA+PiA3OworCWlmIChuZXdfZnNsX2NoYW4tPmlkID4gRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRoZXJlIGlzIG5vICVkIGNoYW5uZWwhXG4iLAorCQkJCW5ld19mc2xfY2hhbi0+aWQpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisJZmRldi0+Y2hhbltuZXdfZnNsX2NoYW4tPmlkXSA9IG5ld19mc2xfY2hhbjsKKwl0YXNrbGV0X2luaXQoJm5ld19mc2xfY2hhbi0+dGFza2xldCwgZG1hX2RvX3Rhc2tsZXQsCisJCQkodW5zaWduZWQgbG9uZyluZXdfZnNsX2NoYW4pOworCisJLyogSW5pdCB0aGUgY2hhbm5lbCAqLworCWRtYV9pbml0KG5ld19mc2xfY2hhbik7CisKKwkvKiBDbGVhciBjZGFyIHJlZ2lzdGVycyAqLworCXNldF9jZGFyKG5ld19mc2xfY2hhbiwgMCk7CisKKwlzd2l0Y2ggKG5ld19mc2xfY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgeworCWNhc2UgRlNMX0RNQV9JUF84NVhYOgorCQluZXdfZnNsX2NoYW4tPnRvZ2dsZV9leHRfc3RhcnQgPSBmc2xfY2hhbl90b2dnbGVfZXh0X3N0YXJ0OworCQluZXdfZnNsX2NoYW4tPnRvZ2dsZV9leHRfcGF1c2UgPSBmc2xfY2hhbl90b2dnbGVfZXh0X3BhdXNlOworCWNhc2UgRlNMX0RNQV9JUF84M1hYOgorCQluZXdfZnNsX2NoYW4tPnNldF9zcmNfbG9vcF9zaXplID0gZnNsX2NoYW5fc2V0X3NyY19sb29wX3NpemU7CisJCW5ld19mc2xfY2hhbi0+c2V0X2Rlc3RfbG9vcF9zaXplID0gZnNsX2NoYW5fc2V0X2Rlc3RfbG9vcF9zaXplOworCX0KKworCXNwaW5fbG9ja19pbml0KCZuZXdfZnNsX2NoYW4tPmRlc2NfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm5ld19mc2xfY2hhbi0+bGRfcXVldWUpOworCisJbmV3X2ZzbF9jaGFuLT5jb21tb24uZGV2aWNlID0gJmZkZXYtPmNvbW1vbjsKKworCS8qIEFkZCB0aGUgY2hhbm5lbCB0byBETUEgZGV2aWNlIGNoYW5uZWwgbGlzdCAqLworCWxpc3RfYWRkX3RhaWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlLAorCQkJJmZkZXYtPmNvbW1vbi5jaGFubmVscyk7CisJZmRldi0+Y29tbW9uLmNoYW5jbnQrKzsKKworCW5ld19mc2xfY2hhbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKKwlpZiAobmV3X2ZzbF9jaGFuLT5pcnEgIT0gTk9fSVJRKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKG5ld19mc2xfY2hhbi0+aXJxLAorCQkJCQkmZnNsX2RtYV9jaGFuX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkJCSJmc2xkbWEtY2hhbm5lbCIsIG5ld19mc2xfY2hhbik7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRE1BIGNoYW5uZWwgJXMgcmVxdWVzdF9pcnEgZXJyb3IgIgorCQkJCSJ3aXRoIHJldHVybiAlZFxuIiwgZGV2LT5ub2RlLT5mdWxsX25hbWUsIGVycik7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWVyciA9IGZzbF9kbWFfc2VsZl90ZXN0KG5ld19mc2xfY2hhbik7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICIjJWQgKCVzKSwgaXJxICVkXG4iLCBuZXdfZnNsX2NoYW4tPmlkLAorCQkJCW1hdGNoLT5jb21wYXRpYmxlLCBuZXdfZnNsX2NoYW4tPmlycSk7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlkbWFfaGFsdChuZXdfZnNsX2NoYW4pOworCWlvdW5tYXAobmV3X2ZzbF9jaGFuLT5yZWdfYmFzZSk7CisJZnJlZV9pcnEobmV3X2ZzbF9jaGFuLT5pcnEsIG5ld19mc2xfY2hhbik7CisJbGlzdF9kZWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKKwlrZnJlZShuZXdfZnNsX2NoYW4pOworCXJldHVybiBlcnI7Cit9CisKK2NvbnN0IHUzMiBtcGM4NTQwX2RtYV9pcF9mZWF0dXJlID0gRlNMX0RNQV9JUF84NVhYIHwgRlNMX0RNQV9CSUdfRU5ESUFOOworY29uc3QgdTMyIG1wYzgzNDlfZG1hX2lwX2ZlYXR1cmUgPSBGU0xfRE1BX0lQXzgzWFggfCBGU0xfRE1BX0xJVFRMRV9FTkRJQU47CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZzbF9kbWFfY2hhbl9pZHNbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZtcGM4NTQwX2RtYV9pcF9mZWF0dXJlLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZWxvLWRtYS1jaGFubmVsIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZtcGM4MzQ5X2RtYV9pcF9mZWF0dXJlLAorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX2ZzbF9kbWFfY2hhbl9kcml2ZXIgPSB7CisJLm5hbWUgPSAib2YtZnNsLWRtYS1jaGFubmVsIiwKKwkubWF0Y2hfdGFibGUgPSBvZl9mc2xfZG1hX2NoYW5faWRzLAorCS5wcm9iZSA9IG9mX2ZzbF9kbWFfY2hhbl9wcm9iZSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IG9mX2ZzbF9kbWFfY2hhbl9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9jaGFuX2RyaXZlcik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZzbF9kbWFfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LAorCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBmc2xfZG1hX2RldmljZSAqZmRldjsKKworCWZkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZkZXYpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJObyBlbm91Z2ggbWVtb3J5IGZvciAncHJpdidcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisJZmRldi0+ZGV2ID0gJmRldi0+ZGV2OworCUlOSVRfTElTVF9IRUFEKCZmZGV2LT5jb21tb24uY2hhbm5lbHMpOworCisJLyogZ2V0IERNQSBjb250cm9sbGVyIHJlZ2lzdGVyIGJhc2UgKi8KKwllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldi0+bm9kZSwgMCwgJmZkZXYtPnJlZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNhbid0IGdldCAlcyBwcm9wZXJ0eSAncmVnJ1xuIiwKKwkJCQlkZXYtPm5vZGUtPmZ1bGxfbmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCWRldl9pbmZvKCZkZXYtPmRldiwgIlByb2JlIHRoZSBGcmVlc2NhbGUgRE1BIGRyaXZlciBmb3IgJXMgIgorCQkJImNvbnRyb2xsZXIgYXQgJXAuLi5cbiIsCisJCQltYXRjaC0+Y29tcGF0aWJsZSwgKHZvaWQgKilmZGV2LT5yZWcuc3RhcnQpOworCWZkZXYtPnJlZ19iYXNlID0gaW9yZW1hcChmZGV2LT5yZWcuc3RhcnQsIGZkZXYtPnJlZy5lbmQKKwkJCQkJCS0gZmRldi0+cmVnLnN0YXJ0ICsgMSk7CisKKwlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBmZGV2LT5jb21tb24uY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9JTlRFUlJVUFQsIGZkZXYtPmNvbW1vbi5jYXBfbWFzayk7CisJZmRldi0+Y29tbW9uLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZmRldi0+Y29tbW9uLmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCWZkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfaW50ZXJydXB0ID0gZnNsX2RtYV9wcmVwX2ludGVycnVwdDsKKwlmZGV2LT5jb21tb24uZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IGZzbF9kbWFfcHJlcF9tZW1jcHk7CisJZmRldi0+Y29tbW9uLmRldmljZV9pc190eF9jb21wbGV0ZSA9IGZzbF9kbWFfaXNfY29tcGxldGU7CisJZmRldi0+Y29tbW9uLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKKwlmZGV2LT5jb21tb24uZGV2ID0gJmRldi0+ZGV2OworCisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKKwlpZiAoaXJxICE9IE5PX0lSUSkgeworCQllcnIgPSByZXF1ZXN0X2lycShpcnEsICZmc2xfZG1hX2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkJCSJmc2xkbWEtZGV2aWNlIiwgZmRldik7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRE1BIGRldmljZSByZXF1ZXN0X2lycSBlcnJvciAiCisJCQkJIndpdGggcmV0dXJuICVkXG4iLCBlcnIpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJihkZXYtPmRldiksIGZkZXYpOworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShkZXYtPm5vZGUsIG9mX2ZzbF9kbWFfY2hhbl9pZHMsICZkZXYtPmRldik7CisKKwlkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZmZGV2LT5jb21tb24pOworCXJldHVybiAwOworCitlcnI6CisJaW91bm1hcChmZGV2LT5yZWdfYmFzZSk7CisJa2ZyZWUoZmRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZnNsX2RtYV9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsZWxvLWRtYSIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX2ZzbF9kbWFfZHJpdmVyID0geworCS5uYW1lID0gIm9mLWZzbC1kbWEiLAorCS5tYXRjaF90YWJsZSA9IG9mX2ZzbF9kbWFfaWRzLAorCS5wcm9iZSA9IG9mX2ZzbF9kbWFfcHJvYmUsCit9OworCitzdGF0aWMgX19pbml0IGludCBvZl9mc2xfZG1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2RyaXZlcik7Cit9CisKK3N1YnN5c19pbml0Y2FsbChvZl9mc2xfZG1hX2NoYW5faW5pdCk7CitzdWJzeXNfaW5pdGNhbGwob2ZfZnNsX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhZjA3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5oCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOgorICogICBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPiwgSnVsIDIwMDcKKyAqICAgRWJvbnkgWmh1IDxlYm9ueS56aHVAZnJlZXNjYWxlLmNvbT4sIE1heSAyMDA3CisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaWZuZGVmIF9fRE1BX0ZTTERNQV9ICisjZGVmaW5lIF9fRE1BX0ZTTERNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisKKy8qIERlZmluZSBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIGJ5IEZyZWVzY2FsZQorICogTVBDODU0MCBhbmQgTVBDODM0OSBETUEgY29udHJvbGxlci4KKyAqLworI2RlZmluZSBGU0xfRE1BX01SX0NTCQkweDAwMDAwMDAxCisjZGVmaW5lIEZTTF9ETUFfTVJfQ0MJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRlNMX0RNQV9NUl9DQQkJMHgwMDAwMDAwOAorI2RlZmluZSBGU0xfRE1BX01SX0VJRQkJMHgwMDAwMDA0MAorI2RlZmluZSBGU0xfRE1BX01SX1hGRQkJMHgwMDAwMDAyMAorI2RlZmluZSBGU0xfRE1BX01SX0VPTE5JRQkweDAwMDAwMTAwCisjZGVmaW5lIEZTTF9ETUFfTVJfRU9MU0lFCTB4MDAwMDAwODAKKyNkZWZpbmUgRlNMX0RNQV9NUl9FT1NJRQkweDAwMDAwMjAwCisjZGVmaW5lIEZTTF9ETUFfTVJfQ0RTTQkJMHgwMDAwMDAxMAorI2RlZmluZSBGU0xfRE1BX01SX0NUTQkJMHgwMDAwMDAwNAorI2RlZmluZSBGU0xfRE1BX01SX0VNUF9FTgkweDAwMjAwMDAwCisjZGVmaW5lIEZTTF9ETUFfTVJfRU1TX0VOCTB4MDAwNDAwMDAKKyNkZWZpbmUgRlNMX0RNQV9NUl9EQUhFCQkweDAwMDAyMDAwCisjZGVmaW5lIEZTTF9ETUFfTVJfU0FIRQkJMHgwMDAwMTAwMAorCisvKiBTcGVjaWFsIE1SIGRlZmluaXRpb24gZm9yIE1QQzgzNDkgKi8KKyNkZWZpbmUgRlNMX0RNQV9NUl9FT1RJRQkweDAwMDAwMDgwCisKKyNkZWZpbmUgRlNMX0RNQV9TUl9DSAkJMHgwMDAwMDAyMAorI2RlZmluZSBGU0xfRE1BX1NSX1BFCQkweDAwMDAwMDEwCisjZGVmaW5lIEZTTF9ETUFfU1JfQ0IJCTB4MDAwMDAwMDQKKyNkZWZpbmUgRlNMX0RNQV9TUl9URQkJMHgwMDAwMDA4MAorI2RlZmluZSBGU0xfRE1BX1NSX0VPU0kJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRlNMX0RNQV9TUl9FT0xTSQkweDAwMDAwMDAxCisjZGVmaW5lIEZTTF9ETUFfU1JfRU9DREkJMHgwMDAwMDAwMQorI2RlZmluZSBGU0xfRE1BX1NSX0VPTE5JCTB4MDAwMDAwMDgKKworI2RlZmluZSBGU0xfRE1BX1NBVFJfU0JQQVRNVQkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgRlNMX0RNQV9TQVRSX1NUUkFOU0lOVF9SSU8JCTB4MDBjMDAwMDAKKyNkZWZpbmUgRlNMX0RNQV9TQVRSX1NSRUFEVFlQRV9TTk9PUF9SRUFECTB4MDAwNTAwMDAKKyNkZWZpbmUgRlNMX0RNQV9TQVRSX1NSRUFEVFlQRV9CUF9JT1JICQkweDAwMDIwMDAwCisjZGVmaW5lIEZTTF9ETUFfU0FUUl9TUkVBRFRZUEVfQlBfTlJFQUQJCTB4MDAwNDAwMDAKKyNkZWZpbmUgRlNMX0RNQV9TQVRSX1NSRUFEVFlQRV9CUF9NUkVBRAkJMHgwMDA3MDAwMAorCisjZGVmaW5lIEZTTF9ETUFfREFUUl9EQlBBVE1VCQkJMHgyMDAwMDAwMAorI2RlZmluZSBGU0xfRE1BX0RBVFJfRFRSQU5TSU5UX1JJTwkJMHgwMGMwMDAwMAorI2RlZmluZSBGU0xfRE1BX0RBVFJfRFdSSVRFVFlQRV9TTk9PUF9XUklURQkweDAwMDUwMDAwCisjZGVmaW5lIEZTTF9ETUFfREFUUl9EV1JJVEVUWVBFX0JQX0ZMVVNICTB4MDAwMTAwMDAKKworI2RlZmluZSBGU0xfRE1BX0VPTAkJKCh1NjQpMHgxKQorI2RlZmluZSBGU0xfRE1BX1NORU4JCSgodTY0KTB4MTApCisjZGVmaW5lIEZTTF9ETUFfRU9TSUUJCTB4OAorI2RlZmluZSBGU0xfRE1BX05MREFfTUFTSwkofih1NjQpMHgxZikKKworI2RlZmluZSBGU0xfRE1BX0JDUl9NQVhfQ05UCTB4MDNmZmZmZmZ1CisKKyNkZWZpbmUgRlNMX0RNQV9ER1NSX1RFCQkweDgwCisjZGVmaW5lIEZTTF9ETUFfREdTUl9DSAkJMHgyMAorI2RlZmluZSBGU0xfRE1BX0RHU1JfUEUJCTB4MTAKKyNkZWZpbmUgRlNMX0RNQV9ER1NSX0VPTE5JCTB4MDgKKyNkZWZpbmUgRlNMX0RNQV9ER1NSX0NCCQkweDA0CisjZGVmaW5lIEZTTF9ETUFfREdTUl9FT1NJCTB4MDIKKyNkZWZpbmUgRlNMX0RNQV9ER1NSX0VPTFNJCTB4MDEKKwordHlwZWRlZiB1NjQgX19iaXR3aXNlIHY2NDsKK3R5cGVkZWYgdTMyIF9fYml0d2lzZSB2MzI7CisKK3N0cnVjdCBmc2xfZG1hX2xkX2h3IHsKKwl2NjQgc3JjX2FkZHI7CisJdjY0IGRzdF9hZGRyOworCXY2NCBuZXh0X2xuX2FkZHI7CisJdjMyIGNvdW50OworCXYzMiByZXNlcnZlOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpOworCitzdHJ1Y3QgZnNsX2Rlc2Nfc3cgeworCXN0cnVjdCBmc2xfZG1hX2xkX2h3IGh3OworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGQ7CisJdm9pZCAqcHJpdjsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsKKworc3RydWN0IGZzbF9kbWFfY2hhbl9yZWdzIHsKKwl1MzIgbXI7CS8qIDB4MDAgLSBNb2RlIFJlZ2lzdGVyICovCisJdTMyIHNyOwkvKiAweDA0IC0gU3RhdHVzIFJlZ2lzdGVyICovCisJdTY0IGNkYXI7CS8qIDB4MDggLSBDdXJyZW50IGRlc2NyaXB0b3IgYWRkcmVzcyByZWdpc3RlciAqLworCXU2NCBzYXI7CS8qIDB4MTAgLSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciAqLworCXU2NCBkYXI7CS8qIDB4MTggLSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovCisJdTMyIGJjcjsJLyogMHgyMCAtIEJ5dGUgQ291bnQgUmVnaXN0ZXIgKi8KKwl1NjQgbmRhcjsJLyogMHgyNCAtIE5leHQgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCit9OworCitzdHJ1Y3QgZnNsX2RtYV9jaGFuOworI2RlZmluZSBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFIDQKKworc3RydWN0IGZzbF9kbWFfZGV2aWNlIHsKKwl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwkvKiBER1NSIHJlZ2lzdGVyIGJhc2UgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgcmVnOwkvKiBSZXNvdXJjZSBmb3IgcmVnaXN0ZXIgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRtYV9kZXZpY2UgY29tbW9uOworCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmNoYW5bRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRV07CisJdTMyIGZlYXR1cmU7CQkvKiBUaGUgc2FtZSBhcyBETUEgY2hhbm5lbHMgKi8KK307CisKKy8qIERlZmluZSBtYWNyb3MgZm9yIGZzbF9kbWFfY2hhbi0+ZmVhdHVyZSBwcm9wZXJ0eSAqLworI2RlZmluZSBGU0xfRE1BX0xJVFRMRV9FTkRJQU4JMHgwMDAwMDAwMAorI2RlZmluZSBGU0xfRE1BX0JJR19FTkRJQU4JMHgwMDAwMDAwMQorCisjZGVmaW5lIEZTTF9ETUFfSVBfTUFTSwkJMHgwMDAwMGZmMAorI2RlZmluZSBGU0xfRE1BX0lQXzg1WFgJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRlNMX0RNQV9JUF84M1hYCQkweDAwMDAwMDIwCisKKyNkZWZpbmUgRlNMX0RNQV9DSEFOX1BBVVNFX0VYVAkweDAwMDAxMDAwCisjZGVmaW5lIEZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQJMHgwMDAwMjAwMAorCitzdHJ1Y3QgZnNsX2RtYV9jaGFuIHsKKwlzdHJ1Y3QgZnNsX2RtYV9jaGFuX3JlZ3MgX19pb21lbSAqcmVnX2Jhc2U7CisJZG1hX2Nvb2tpZV90IGNvbXBsZXRlZF9jb29raWU7CS8qIFRoZSBtYXhpbXVtIGNvb2tpZSBjb21wbGV0ZWQgKi8KKwlzcGlubG9ja190IGRlc2NfbG9jazsJCS8qIERlc2NyaXB0b3Igb3BlcmF0aW9uIGxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxkX3F1ZXVlOwkvKiBMaW5rIGRlc2NyaXB0b3JzIHF1ZXVlICovCisJc3RydWN0IGRtYV9jaGFuIGNvbW1vbjsJCS8qIERNQSBjb21tb24gY2hhbm5lbCAqLworCXN0cnVjdCBkbWFfcG9vbCAqZGVzY19wb29sOwkvKiBEZXNjcmlwdG9ycyBwb29sICovCisJc3RydWN0IGRldmljZSAqZGV2OwkJLyogQ2hhbm5lbCBkZXZpY2UgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgcmVnOwkJLyogUmVzb3VyY2UgZm9yIHJlZ2lzdGVyICovCisJaW50IGlycTsJCQkvKiBDaGFubmVsIElSUSAqLworCWludCBpZDsJCQkJLyogUmF3IGlkIG9mIHRoaXMgY2hhbm5lbCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCXUzMiBmZWF0dXJlOworCisJdm9pZCAoKnRvZ2dsZV9leHRfcGF1c2UpKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgc2l6ZSk7CisJdm9pZCAoKnRvZ2dsZV9leHRfc3RhcnQpKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgZW5hYmxlKTsKKwl2b2lkICgqc2V0X3NyY19sb29wX3NpemUpKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgc2l6ZSk7CisJdm9pZCAoKnNldF9kZXN0X2xvb3Bfc2l6ZSkoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGludCBzaXplKTsKK307CisKKyNkZWZpbmUgdG9fZnNsX2NoYW4oY2hhbikgY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xfZG1hX2NoYW4sIGNvbW1vbikKKyNkZWZpbmUgdG9fZnNsX2Rlc2MobGgpIGNvbnRhaW5lcl9vZihsaCwgc3RydWN0IGZzbF9kZXNjX3N3LCBub2RlKQorI2RlZmluZSB0eF90b19mc2xfZGVzYyh0eCkgY29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgZnNsX2Rlc2Nfc3csIGFzeW5jX3R4KQorCisjaWZuZGVmIF9fcG93ZXJwYzY0X18KK3N0YXRpYyB1NjQgaW5fYmU2NChjb25zdCB1NjQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gKCh1NjQpaW5fYmUzMigodTMyIF9faW9tZW0gKilhZGRyKSA8PCAzMikgfAorCQkoaW5fYmUzMigodTMyIF9faW9tZW0gKilhZGRyICsgMSkpOworfQorCitzdGF0aWMgdm9pZCBvdXRfYmU2NCh1NjQgX19pb21lbSAqYWRkciwgdTY0IHZhbCkKK3sKKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKilhZGRyLCB2YWwgPj4gMzIpOworCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWFkZHIgKyAxLCAodTMyKXZhbCk7Cit9CisKKy8qIFRoZXJlIGlzIG5vIGFzbSBpbnN0cnVjdGlvbnMgZm9yIDY0IGJpdHMgcmV2ZXJzZSBsb2FkcyBhbmQgc3RvcmVzICovCitzdGF0aWMgdTY0IGluX2xlNjQoY29uc3QgdTY0IF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICgodTY0KWluX2xlMzIoKHUzMiBfX2lvbWVtICopYWRkciArIDEpIDw8IDMyKSB8CisJCShpbl9sZTMyKCh1MzIgX19pb21lbSAqKWFkZHIpKTsKK30KKworc3RhdGljIHZvaWQgb3V0X2xlNjQodTY0IF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpCit7CisJb3V0X2xlMzIoKHUzMiBfX2lvbWVtICopYWRkciArIDEsIHZhbCA+PiAzMik7CisJb3V0X2xlMzIoKHUzMiBfX2lvbWVtICopYWRkciwgKHUzMil2YWwpOworfQorI2VuZGlmCisKKyNkZWZpbmUgRE1BX0lOKGZzbF9jaGFuLCBhZGRyLCB3aWR0aCkJCQkJCVwKKwkJKCgoZnNsX2NoYW4pLT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/CQlcCisJCQlpbl9iZSMjd2lkdGgoYWRkcikgOiBpbl9sZSMjd2lkdGgoYWRkcikpCisjZGVmaW5lIERNQV9PVVQoZnNsX2NoYW4sIGFkZHIsIHZhbCwgd2lkdGgpCQkJCVwKKwkJKCgoZnNsX2NoYW4pLT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/CQlcCisJCQlvdXRfYmUjI3dpZHRoKGFkZHIsIHZhbCkgOiBvdXRfbGUjI3dpZHRoKGFkZHIsIHZhbCkpCisKKyNkZWZpbmUgRE1BX1RPX0NQVShmc2xfY2hhbiwgZCwgd2lkdGgpCQkJCQlcCisJCSgoKGZzbF9jaGFuKS0+ZmVhdHVyZSAmIEZTTF9ETUFfQklHX0VORElBTikgPwkJXAorCQkJYmUjI3dpZHRoIyNfdG9fY3B1KChfX2ZvcmNlIF9fYmUjI3dpZHRoKSh2IyN3aWR0aClkKSA6IFwKKwkJCWxlIyN3aWR0aCMjX3RvX2NwdSgoX19mb3JjZSBfX2xlIyN3aWR0aCkodiMjd2lkdGgpZCkpCisjZGVmaW5lIENQVV9UT19ETUEoZnNsX2NoYW4sIGMsIHdpZHRoKQkJCQkJXAorCQkoKChmc2xfY2hhbiktPmZlYXR1cmUgJiBGU0xfRE1BX0JJR19FTkRJQU4pID8JCVwKKwkJCShfX2ZvcmNlIHYjI3dpZHRoKWNwdV90b19iZSMjd2lkdGgoYykgOgkJXAorCQkJKF9fZm9yY2UgdiMjd2lkdGgpY3B1X3RvX2xlIyN3aWR0aChjKSkKKworI2VuZGlmCS8qIF9fRE1BX0ZTTERNQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RjYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kY2EuYwppbmRleCAwZmE4YTk4Li45ZTkyMjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RjYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZGNhLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAogc3RydWN0IGlvYXRfZGNhX3ByaXYgewogCXZvaWQgX19pb21lbQkJKmlvYmFzZTsKLQl2b2lkCQkJKmRjYV9iYXNlOworCXZvaWQgX19pb21lbQkJKmRjYV9iYXNlOwogCWludAkJCSBtYXhfcmVxdWVzdGVyczsKIAlpbnQJCQkgcmVxdWVzdGVyX2NvdW50OwogCXU4CQkJIHRhZ19tYXBbSU9BVF9UQUdfTUFQX0xFTl07CkBAIC0zMzgsNyArMzM4LDcgQEAKIAkuZ2V0X3RhZwkJPSBpb2F0Ml9kY2FfZ2V0X3RhZywKIH07CiAKLXN0YXRpYyBpbnQgaW9hdDJfZGNhX2NvdW50X2RjYV9zbG90cyh2b2lkICppb2Jhc2UsIHUxNiBkY2Ffb2Zmc2V0KQorc3RhdGljIGludCBpb2F0Ml9kY2FfY291bnRfZGNhX3Nsb3RzKHZvaWQgX19pb21lbSAqaW9iYXNlLCB1MTYgZGNhX29mZnNldCkKIHsKIAlpbnQgc2xvdHMgPSAwOwogCXUzMiByZXE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwppbmRleCBkZmYzOGFjLi4zMThlOGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKQEAgLTIxMiwxNCArMjEyLDE0IEBACiAJdTMyIGNvcHk7CiAJc2l6ZV90IGxlbjsKIAlkbWFfYWRkcl90IHNyYywgZHN0OwotCWludCBvcmlnX2FjazsKKwl1bnNpZ25lZCBsb25nIG9yaWdfZmxhZ3M7CiAJdW5zaWduZWQgaW50IGRlc2NfY291bnQgPSAwOwogCiAJLyogc3JjIGFuZCBkZXN0IGFuZCBsZW4gYXJlIHN0b3JlZCBpbiB0aGUgaW5pdGlhbCBkZXNjcmlwdG9yICovCiAJbGVuID0gZmlyc3QtPmxlbjsKIAlzcmMgPSBmaXJzdC0+c3JjOwogCWRzdCA9IGZpcnN0LT5kc3Q7Ci0Jb3JpZ19hY2sgPSBmaXJzdC0+YXN5bmNfdHguYWNrOworCW9yaWdfZmxhZ3MgPSBmaXJzdC0+YXN5bmNfdHguZmxhZ3M7CiAJbmV3ID0gZmlyc3Q7CiAKIAlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKQEAgLTIyOCw3ICsyMjgsNyBAQAogCWRvIHsKIAkJY29weSA9IG1pbl90KHNpemVfdCwgbGVuLCBpb2F0X2NoYW4tPnhmZXJjYXApOwogCi0JCW5ldy0+YXN5bmNfdHguYWNrID0gMTsKKwkJYXN5bmNfdHhfYWNrKCZuZXctPmFzeW5jX3R4KTsKIAogCQlodyA9IG5ldy0+aHc7CiAJCWh3LT5zaXplID0gY29weTsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCX0KIAogCW5ldy0+dHhfY250ID0gZGVzY19jb3VudDsKLQluZXctPmFzeW5jX3R4LmFjayA9IG9yaWdfYWNrOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLworCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBvcmlnX2ZsYWdzOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLwogCiAJLyogc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlcyBmb3IgdXNlIGluIGxhdGVyIGNsZWFudXAgKi8KIAlpZiAobmV3ICE9IGZpcnN0KSB7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQAogCXUzMiBjb3B5OwogCXNpemVfdCBsZW47CiAJZG1hX2FkZHJfdCBzcmMsIGRzdDsKLQlpbnQgb3JpZ19hY2s7CisJdW5zaWduZWQgbG9uZyBvcmlnX2ZsYWdzOwogCXVuc2lnbmVkIGludCBkZXNjX2NvdW50ID0gMDsKIAogCS8qIHNyYyBhbmQgZGVzdCBhbmQgbGVuIGFyZSBzdG9yZWQgaW4gdGhlIGluaXRpYWwgZGVzY3JpcHRvciAqLwogCWxlbiA9IGZpcnN0LT5sZW47CiAJc3JjID0gZmlyc3QtPnNyYzsKIAlkc3QgPSBmaXJzdC0+ZHN0OwotCW9yaWdfYWNrID0gZmlyc3QtPmFzeW5jX3R4LmFjazsKKwlvcmlnX2ZsYWdzID0gZmlyc3QtPmFzeW5jX3R4LmZsYWdzOwogCW5ldyA9IGZpcnN0OwogCiAJLyoKQEAgLTMyMSw3ICszMjEsNyBAQAogCWRvIHsKIAkJY29weSA9IG1pbl90KHNpemVfdCwgbGVuLCBpb2F0X2NoYW4tPnhmZXJjYXApOwogCi0JCW5ldy0+YXN5bmNfdHguYWNrID0gMTsKKwkJYXN5bmNfdHhfYWNrKCZuZXctPmFzeW5jX3R4KTsKIAogCQlodyA9IG5ldy0+aHc7CiAJCWh3LT5zaXplID0gY29weTsKQEAgLTM0OSw3ICszNDksNyBAQAogCX0KIAogCW5ldy0+dHhfY250ID0gZGVzY19jb3VudDsKLQluZXctPmFzeW5jX3R4LmFjayA9IG9yaWdfYWNrOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLworCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBvcmlnX2ZsYWdzOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLwogCiAJLyogc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlcyBmb3IgdXNlIGluIGxhdGVyIGNsZWFudXAgKi8KIAlpZiAobmV3ICE9IGZpcnN0KSB7CkBAIC03MTQsNiArNzE0LDcgQEAKIAkJbmV3LT5sZW4gPSBsZW47CiAJCW5ldy0+ZHN0ID0gZG1hX2Rlc3Q7CiAJCW5ldy0+c3JjID0gZG1hX3NyYzsKKwkJbmV3LT5hc3luY190eC5mbGFncyA9IGZsYWdzOwogCQlyZXR1cm4gJm5ldy0+YXN5bmNfdHg7CiAJfSBlbHNlCiAJCXJldHVybiBOVUxMOwpAQCAtNzQxLDYgKzc0Miw3IEBACiAJCW5ldy0+bGVuID0gbGVuOwogCQluZXctPmRzdCA9IGRtYV9kZXN0OwogCQluZXctPnNyYyA9IGRtYV9zcmM7CisJCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKIAkJcmV0dXJuICZuZXctPmFzeW5jX3R4OwogCX0gZWxzZQogCQlyZXR1cm4gTlVMTDsKQEAgLTg0MCw3ICs4NDIsNyBAQAogCQkJCSAqIGEgY29tcGxldGVkIGVudHJ5LCBidXQgbm90IHRoZSBsYXN0LCBzbyBjbGVhbgogCQkJCSAqIHVwIGlmIHRoZSBjbGllbnQgaXMgZG9uZSB3aXRoIHRoZSBkZXNjcmlwdG9yCiAJCQkJICovCi0JCQkJaWYgKGRlc2MtPmFzeW5jX3R4LmFjaykgeworCQkJCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+YXN5bmNfdHgpKSB7CiAJCQkJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKIAkJCQkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwKIAkJCQkJCSAgICAgICZpb2F0X2NoYW4tPmZyZWVfZGVzYyk7CkBAIC05MjIsMTcgKzkyNCw2IEBACiAJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+Y2xlYW51cF9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgaW9hdF9kbWFfZGVwZW5kZW5jeV9hZGRlZChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0Jc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiA9IHRvX2lvYXRfY2hhbihjaGFuKTsKLQlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKLQlpZiAoaW9hdF9jaGFuLT5wZW5kaW5nID09IDApIHsKLQkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKLQkJaW9hdF9kbWFfbWVtY3B5X2NsZWFudXAoaW9hdF9jaGFuKTsKLQl9IGVsc2UKLQkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKLX0KLQogLyoqCiAgKiBpb2F0X2RtYV9pc19jb21wbGV0ZSAtIHBvbGwgdGhlIHN0YXR1cyBvZiBhIElPQVQgRE1BIHRyYW5zYWN0aW9uCiAgKiBAY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKQEAgLTk4OCw3ICs5NzksNyBAQAogCWRlc2MtPmh3LT5zaXplID0gMDsKIAlkZXNjLT5ody0+c3JjX2FkZHIgPSAwOwogCWRlc2MtPmh3LT5kc3RfYWRkciA9IDA7Ci0JZGVzYy0+YXN5bmNfdHguYWNrID0gMTsKKwlhc3luY190eF9hY2soJmRlc2MtPmFzeW5jX3R4KTsKIAlzd2l0Y2ggKGlvYXRfY2hhbi0+ZGV2aWNlLT52ZXJzaW9uKSB7CiAJY2FzZSBJT0FUX1ZFUl8xXzI6CiAJCWRlc2MtPmh3LT5uZXh0ID0gMDsKQEAgLTEzMTQsNyArMTMwNSw2IEBACiAKIAlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBkZXZpY2UtPmNvbW1vbi5jYXBfbWFzayk7CiAJZGV2aWNlLT5jb21tb24uZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gaW9hdF9kbWFfaXNfY29tcGxldGU7Ci0JZGV2aWNlLT5jb21tb24uZGV2aWNlX2RlcGVuZGVuY3lfYWRkZWQgPSBpb2F0X2RtYV9kZXBlbmRlbmN5X2FkZGVkOwogCXN3aXRjaCAoZGV2aWNlLT52ZXJzaW9uKSB7CiAJY2FzZSBJT0FUX1ZFUl8xXzI6CiAJCWRldmljZS0+Y29tbW9uLmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPSBpb2F0MV9kbWFfcHJlcF9tZW1jcHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jIGIvZHJpdmVycy9kbWEvaW9wLWFkbWEuYwppbmRleCAzOTg2ZDU0Li43NjJiNzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMKQEAgLTYzLDcgKzYzLDYgQEAKIAlzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqaW9wX2NoYW4sIGRtYV9jb29raWVfdCBjb29raWUpCiB7CiAJQlVHX09OKGRlc2MtPmFzeW5jX3R4LmNvb2tpZSA8IDApOwotCXNwaW5fbG9ja19iaCgmZGVzYy0+YXN5bmNfdHgubG9jayk7CiAJaWYgKGRlc2MtPmFzeW5jX3R4LmNvb2tpZSA+IDApIHsKIAkJY29va2llID0gZGVzYy0+YXN5bmNfdHguY29va2llOwogCQlkZXNjLT5hc3luY190eC5jb29raWUgPSAwOwpAQCAtMTAxLDcgKzEwMCw2IEBACiAKIAkvKiBydW4gZGVwZW5kZW50IG9wZXJhdGlvbnMgKi8KIAlhc3luY190eF9ydW5fZGVwZW5kZW5jaWVzKCZkZXNjLT5hc3luY190eCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmRlc2MtPmFzeW5jX3R4LmxvY2spOwogCiAJcmV0dXJuIGNvb2tpZTsKIH0KQEAgLTExMyw3ICsxMTEsNyBAQAogCS8qIHRoZSBjbGllbnQgaXMgYWxsb3dlZCB0byBhdHRhY2ggZGVwZW5kZW50IG9wZXJhdGlvbnMKIAkgKiB1bnRpbCAnYWNrJyBpcyBzZXQKIAkgKi8KLQlpZiAoIWRlc2MtPmFzeW5jX3R4LmFjaykKKwlpZiAoIWFzeW5jX3R4X3Rlc3RfYWNrKCZkZXNjLT5hc3luY190eCkpCiAJCXJldHVybiAwOwogCiAJLyogbGVhdmUgdGhlIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgY2hhaW4KQEAgLTE0MCw3ICsxMzgsNyBAQAogCWludCBidXN5ID0gaW9wX2NoYW5faXNfYnVzeShpb3BfY2hhbik7CiAJaW50IHNlZW5fY3VycmVudCA9IDAsIHNsb3RfY250ID0gMCwgc2xvdHNfcGVyX29wID0gMDsKIAotCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAJLyogZnJlZSBjb21wbGV0ZWQgc2xvdHMgZnJvbSB0aGUgY2hhaW4gc3RhcnRpbmcgd2l0aAogCSAqIHRoZSBvbGRlc3QgZGVzY3JpcHRvcgogCSAqLwpAQCAtMTUwLDcgKzE0OCw3IEBACiAJCQkidGhpc19kZXNjOiAlI3ggbmV4dF9kZXNjOiAlI3ggYWNrOiAlZFxuIiwKIAkJCWl0ZXItPmFzeW5jX3R4LmNvb2tpZSwgaXRlci0+aWR4LCBidXN5LAogCQkJaXRlci0+YXN5bmNfdHgucGh5cywgaW9wX2Rlc2NfZ2V0X25leHRfZGVzYyhpdGVyKSwKLQkJCWl0ZXItPmFzeW5jX3R4LmFjayk7CisJCQlhc3luY190eF90ZXN0X2FjaygmaXRlci0+YXN5bmNfdHgpKTsKIAkJcHJlZmV0Y2goX2l0ZXIpOwogCQlwcmVmZXRjaCgmX2l0ZXItPmFzeW5jX3R4KTsKIApAQCAtMjU3LDggKzI1NSw2IEBACiAKIAlCVUdfT04oIXNlZW5fY3VycmVudCk7CiAKLQlpb3BfY2hhbl9pZGxlKGJ1c3ksIGlvcF9jaGFuKTsKLQogCWlmIChjb29raWUgPiAwKSB7CiAJCWlvcF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0gY29va2llOwogCQlwcl9kZWJ1ZygiXHRjb21wbGV0ZWQgY29va2llICVkXG4iLCBjb29raWUpOwpAQCAtMjc1LDggKzI3MSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpb3BfYWRtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqY2hhbiA9IChzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqKSBkYXRhOwotCV9faW9wX2FkbWFfc2xvdF9jbGVhbnVwKGNoYW4pOworCXN0cnVjdCBpb3BfYWRtYV9jaGFuICppb3BfY2hhbiA9IChzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqKSBkYXRhOworCisJc3Bpbl9sb2NrKCZpb3BfY2hhbi0+bG9jayk7CisJX19pb3BfYWRtYV9zbG90X2NsZWFudXAoaW9wX2NoYW4pOworCXNwaW5fdW5sb2NrKCZpb3BfY2hhbi0+bG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW9wX2FkbWFfZGVzY19zbG90ICoKQEAgLTMzOSw5ICszMzgsNyBAQAogCiAJCQkJLyogcHJlLWFjayBhbGwgYnV0IHRoZSBsYXN0IGRlc2NyaXB0b3IgKi8KIAkJCQlpZiAobnVtX3Nsb3RzICE9IHNsb3RzX3Blcl9vcCkKLQkJCQkJaXRlci0+YXN5bmNfdHguYWNrID0gMTsKLQkJCQllbHNlCi0JCQkJCWl0ZXItPmFzeW5jX3R4LmFjayA9IDA7CisJCQkJCWFzeW5jX3R4X2FjaygmaXRlci0+YXN5bmNfdHgpOwogCiAJCQkJbGlzdF9hZGRfdGFpbCgmaXRlci0+Y2hhaW5fbm9kZSwgJmNoYWluKTsKIAkJCQlhbGxvY190YWlsID0gaXRlcjsKQEAgLTQzOCw3ICs0MzUsNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZpb3BfY2hhbi0+bG9jayk7CiAKIAlkZXZfZGJnKGlvcF9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICIlcyBjb29raWU6ICVkIHNsb3Q6ICVkXG4iLAotCQlfX0ZVTkNUSU9OX18sIHN3X2Rlc2MtPmFzeW5jX3R4LmNvb2tpZSwgc3dfZGVzYy0+aWR4KTsKKwkJX19mdW5jX18sIHN3X2Rlc2MtPmFzeW5jX3R4LmNvb2tpZSwgc3dfZGVzYy0+aWR4KTsKIAogCXJldHVybiBjb29raWU7CiB9CkBAIC01MTQsMTMgKzUxMSwxMyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKLWlvcF9hZG1hX3ByZXBfZG1hX2ludGVycnVwdChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCitpb3BfYWRtYV9wcmVwX2RtYV9pbnRlcnJ1cHQoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBpb3BfYWRtYV9jaGFuICppb3BfY2hhbiA9IHRvX2lvcF9hZG1hX2NoYW4oY2hhbik7CiAJc3RydWN0IGlvcF9hZG1hX2Rlc2Nfc2xvdCAqc3dfZGVzYywgKmdycF9zdGFydDsKIAlpbnQgc2xvdF9jbnQsIHNsb3RzX3Blcl9vcDsKIAotCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2tfYmgoJmlvcF9jaGFuLT5sb2NrKTsKIAlzbG90X2NudCA9IGlvcF9jaGFuX2ludGVycnVwdF9zbG90X2NvdW50KCZzbG90c19wZXJfb3AsIGlvcF9jaGFuKTsKQEAgLTUyOSw2ICs1MjYsNyBAQAogCQlncnBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOwogCQlpb3BfZGVzY19pbml0X2ludGVycnVwdChncnBfc3RhcnQsIGlvcF9jaGFuKTsKIAkJZ3JwX3N0YXJ0LT51bm1hcF9sZW4gPSAwOworCQlzd19kZXNjLT5hc3luY190eC5mbGFncyA9IGZsYWdzOwogCX0KIAlzcGluX3VubG9ja19iaCgmaW9wX2NoYW4tPmxvY2spOwogCkBAIC01NDgsNyArNTQ2LDcgQEAKIAlCVUdfT04odW5saWtlbHkobGVuID4gSU9QX0FETUFfTUFYX0JZVEVfQ09VTlQpKTsKIAogCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzIGxlbjogJXVcbiIsCi0JCV9fRlVOQ1RJT05fXywgbGVuKTsKKwkJX19mdW5jX18sIGxlbik7CiAKIAlzcGluX2xvY2tfYmgoJmlvcF9jaGFuLT5sb2NrKTsKIAlzbG90X2NudCA9IGlvcF9jaGFuX21lbWNweV9zbG90X2NvdW50KGxlbiwgJnNsb3RzX3Blcl9vcCk7CkBAIC01NjEsNiArNTU5LDcgQEAKIAkJaW9wX2Rlc2Nfc2V0X21lbWNweV9zcmNfYWRkcihncnBfc3RhcnQsIGRtYV9zcmMpOwogCQlzd19kZXNjLT51bm1hcF9zcmNfY250ID0gMTsKIAkJc3dfZGVzYy0+dW5tYXBfbGVuID0gbGVuOworCQlzd19kZXNjLT5hc3luY190eC5mbGFncyA9IGZsYWdzOwogCX0KIAlzcGluX3VubG9ja19iaCgmaW9wX2NoYW4tPmxvY2spOwogCkBAIC01ODAsNyArNTc5LDcgQEAKIAlCVUdfT04odW5saWtlbHkobGVuID4gSU9QX0FETUFfTUFYX0JZVEVfQ09VTlQpKTsKIAogCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzIGxlbjogJXVcbiIsCi0JCV9fRlVOQ1RJT05fXywgbGVuKTsKKwkJX19mdW5jX18sIGxlbik7CiAKIAlzcGluX2xvY2tfYmgoJmlvcF9jaGFuLT5sb2NrKTsKIAlzbG90X2NudCA9IGlvcF9jaGFuX21lbXNldF9zbG90X2NvdW50KGxlbiwgJnNsb3RzX3Blcl9vcCk7CkBAIC01OTMsNiArNTkyLDcgQEAKIAkJaW9wX2Rlc2Nfc2V0X2Rlc3RfYWRkcihncnBfc3RhcnQsIGlvcF9jaGFuLCBkbWFfZGVzdCk7CiAJCXN3X2Rlc2MtPnVubWFwX3NyY19jbnQgPSAxOwogCQlzd19kZXNjLT51bm1hcF9sZW4gPSBsZW47CisJCXN3X2Rlc2MtPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZpb3BfY2hhbi0+bG9jayk7CiAKQEAgLTYxNCw3ICs2MTQsNyBAQAogCiAJZGV2X2RiZyhpb3BfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LAogCQkiJXMgc3JjX2NudDogJWQgbGVuOiAldSBmbGFnczogJWx4XG4iLAotCQlfX0ZVTkNUSU9OX18sIHNyY19jbnQsIGxlbiwgZmxhZ3MpOworCQlfX2Z1bmNfXywgc3JjX2NudCwgbGVuLCBmbGFncyk7CiAKIAlzcGluX2xvY2tfYmgoJmlvcF9jaGFuLT5sb2NrKTsKIAlzbG90X2NudCA9IGlvcF9jaGFuX3hvcl9zbG90X2NvdW50KGxlbiwgc3JjX2NudCwgJnNsb3RzX3Blcl9vcCk7CkBAIC02MjYsNiArNjI2LDcgQEAKIAkJaW9wX2Rlc2Nfc2V0X2Rlc3RfYWRkcihncnBfc3RhcnQsIGlvcF9jaGFuLCBkbWFfZGVzdCk7CiAJCXN3X2Rlc2MtPnVubWFwX3NyY19jbnQgPSBzcmNfY250OwogCQlzd19kZXNjLT51bm1hcF9sZW4gPSBsZW47CisJCXN3X2Rlc2MtPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CiAJCXdoaWxlIChzcmNfY250LS0pCiAJCQlpb3BfZGVzY19zZXRfeG9yX3NyY19hZGRyKGdycF9zdGFydCwgc3JjX2NudCwKIAkJCQkJCSAgZG1hX3NyY1tzcmNfY250XSk7CkBAIC02NDgsNyArNjQ5LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlkZXZfZGJnKGlvcF9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICIlcyBzcmNfY250OiAlZCBsZW46ICV1XG4iLAotCQlfX0ZVTkNUSU9OX18sIHNyY19jbnQsIGxlbik7CisJCV9fZnVuY19fLCBzcmNfY250LCBsZW4pOwogCiAJc3Bpbl9sb2NrX2JoKCZpb3BfY2hhbi0+bG9jayk7CiAJc2xvdF9jbnQgPSBpb3BfY2hhbl96ZXJvX3N1bV9zbG90X2NvdW50KGxlbiwgc3JjX2NudCwgJnNsb3RzX3Blcl9vcCk7CkBAIC02NTksOSArNjYwLDEwIEBACiAJCWlvcF9kZXNjX3NldF96ZXJvX3N1bV9ieXRlX2NvdW50KGdycF9zdGFydCwgbGVuKTsKIAkJZ3JwX3N0YXJ0LT54b3JfY2hlY2tfcmVzdWx0ID0gcmVzdWx0OwogCQlwcl9kZWJ1ZygiXHQlczogZ3JwX3N0YXJ0LT54b3JfY2hlY2tfcmVzdWx0OiAlcFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZ3JwX3N0YXJ0LT54b3JfY2hlY2tfcmVzdWx0KTsKKwkJCV9fZnVuY19fLCBncnBfc3RhcnQtPnhvcl9jaGVja19yZXN1bHQpOwogCQlzd19kZXNjLT51bm1hcF9zcmNfY250ID0gc3JjX2NudDsKIAkJc3dfZGVzYy0+dW5tYXBfbGVuID0gbGVuOworCQlzd19kZXNjLT5hc3luY190eC5mbGFncyA9IGZsYWdzOwogCQl3aGlsZSAoc3JjX2NudC0tKQogCQkJaW9wX2Rlc2Nfc2V0X3plcm9fc3VtX3NyY19hZGRyKGdycF9zdGFydCwgc3JjX2NudCwKIAkJCQkJCSAgICAgICBkbWFfc3JjW3NyY19jbnRdKTsKQEAgLTY3MSwxMiArNjczLDYgQEAKIAlyZXR1cm4gc3dfZGVzYyA/ICZzd19kZXNjLT5hc3luY190eCA6IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGlvcF9hZG1hX2RlcGVuZGVuY3lfYWRkZWQoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBpb3BfYWRtYV9jaGFuICppb3BfY2hhbiA9IHRvX2lvcF9hZG1hX2NoYW4oY2hhbik7Ci0JdGFza2xldF9zY2hlZHVsZSgmaW9wX2NoYW4tPmlycV90YXNrbGV0KTsKLX0KLQogc3RhdGljIHZvaWQgaW9wX2FkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IGlvcF9hZG1hX2NoYW4gKmlvcF9jaGFuID0gdG9faW9wX2FkbWFfY2hhbihjaGFuKTsKQEAgLTcwMCw3ICs2OTYsNyBAQAogCWlvcF9jaGFuLT5sYXN0X3VzZWQgPSBOVUxMOwogCiAJZGV2X2RiZyhpb3BfY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAiJXMgc2xvdHNfYWxsb2NhdGVkICVkXG4iLAotCQlfX0ZVTkNUSU9OX18sIGlvcF9jaGFuLT5zbG90c19hbGxvY2F0ZWQpOworCQlfX2Z1bmNfXywgaW9wX2NoYW4tPnNsb3RzX2FsbG9jYXRlZCk7CiAJc3Bpbl91bmxvY2tfYmgoJmlvcF9jaGFuLT5sb2NrKTsKIAogCS8qIG9uZSBpcyBvayBzaW5jZSB3ZSBsZWZ0IGl0IG9uIHRoZXJlIG9uIHB1cnBvc2UgKi8KQEAgLTc1Myw3ICs3NDksNyBAQAogewogCXN0cnVjdCBpb3BfYWRtYV9jaGFuICpjaGFuID0gZGF0YTsKIAotCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGV2X2RiZyhjaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCiAJdGFza2xldF9zY2hlZHVsZSgmY2hhbi0+aXJxX3Rhc2tsZXQpOwogCkBAIC03NjYsNyArNzYyLDcgQEAKIHsKIAlzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqY2hhbiA9IGRhdGE7CiAKLQlkZXZfZGJnKGNoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5jb21tb24uZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAogCXRhc2tsZXRfc2NoZWR1bGUoJmNoYW4tPmlycV90YXNrbGV0KTsKIApAQCAtODIzLDcgKzgxOSw3IEBACiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGlvcF9hZG1hX2NoYW4gKmlvcF9jaGFuOwogCi0JZGV2X2RiZyhkZXZpY2UtPmNvbW1vbi5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnKGRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcmMgPSBremFsbG9jKHNpemVvZih1OCkgKiBJT1BfQURNQV9URVNUX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghc3JjKQpAQCAtODU0LDExICs4NTAsMTEgQEAKIAlzcmNfZG1hID0gZG1hX21hcF9zaW5nbGUoZG1hX2NoYW4tPmRldmljZS0+ZGV2LCBzcmMsCiAJCQkJSU9QX0FETUFfVEVTVF9TSVpFLCBETUFfVE9fREVWSUNFKTsKIAl0eCA9IGlvcF9hZG1hX3ByZXBfZG1hX21lbWNweShkbWFfY2hhbiwgZGVzdF9kbWEsIHNyY19kbWEsCi0JCQkJICAgICAgSU9QX0FETUFfVEVTVF9TSVpFLCAxKTsKKwkJCQkgICAgICBJT1BfQURNQV9URVNUX1NJWkUsCisJCQkJICAgICAgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKIAogCWNvb2tpZSA9IGlvcF9hZG1hX3R4X3N1Ym1pdCh0eCk7CiAJaW9wX2FkbWFfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7Ci0JYXN5bmNfdHhfYWNrKHR4KTsKIAltc2xlZXAoMSk7CiAKIAlpZiAoaW9wX2FkbWFfaXNfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0KQEAgLTkwNiw3ICs5MDIsNyBAQAogCWludCBlcnIgPSAwOwogCXN0cnVjdCBpb3BfYWRtYV9jaGFuICppb3BfY2hhbjsKIAotCWRldl9kYmcoZGV2aWNlLT5jb21tb24uZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGV2X2RiZyhkZXZpY2UtPmNvbW1vbi5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCiAJZm9yIChzcmNfaWR4ID0gMDsgc3JjX2lkeCA8IElPUF9BRE1BX05VTV9TUkNfVEVTVDsgc3JjX2lkeCsrKSB7CiAJCXhvcl9zcmNzW3NyY19pZHhdID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKQEAgLTk1NCwxMSArOTUwLDExIEBACiAJCWRtYV9zcmNzW2ldID0gZG1hX21hcF9wYWdlKGRtYV9jaGFuLT5kZXZpY2UtPmRldiwgeG9yX3NyY3NbaV0sCiAJCQkJCSAgIDAsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CiAJdHggPSBpb3BfYWRtYV9wcmVwX2RtYV94b3IoZG1hX2NoYW4sIGRlc3RfZG1hLCBkbWFfc3JjcywKLQkJCQkgICBJT1BfQURNQV9OVU1fU1JDX1RFU1QsIFBBR0VfU0laRSwgMSk7CisJCQkJICAgSU9QX0FETUFfTlVNX1NSQ19URVNULCBQQUdFX1NJWkUsCisJCQkJICAgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKIAogCWNvb2tpZSA9IGlvcF9hZG1hX3R4X3N1Ym1pdCh0eCk7CiAJaW9wX2FkbWFfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7Ci0JYXN5bmNfdHhfYWNrKHR4KTsKIAltc2xlZXAoOCk7CiAKIAlpZiAoaW9wX2FkbWFfaXNfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0KQEAgLTEwMDEsMTEgKzk5NywxMSBAQAogCQkJCQkgICBETUFfVE9fREVWSUNFKTsKIAl0eCA9IGlvcF9hZG1hX3ByZXBfZG1hX3plcm9fc3VtKGRtYV9jaGFuLCBkbWFfc3JjcywKIAkJCQkJSU9QX0FETUFfTlVNX1NSQ19URVNUICsgMSwgUEFHRV9TSVpFLAotCQkJCQkmemVyb19zdW1fcmVzdWx0LCAxKTsKKwkJCQkJJnplcm9fc3VtX3Jlc3VsdCwKKwkJCQkJRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKIAogCWNvb2tpZSA9IGlvcF9hZG1hX3R4X3N1Ym1pdCh0eCk7CiAJaW9wX2FkbWFfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7Ci0JYXN5bmNfdHhfYWNrKHR4KTsKIAltc2xlZXAoOCk7CiAKIAlpZiAoaW9wX2FkbWFfaXNfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKQEAgLTEwMjUsMTEgKzEwMjEsMTEgQEAKIAkvKiB0ZXN0IG1lbXNldCAqLwogCWRtYV9hZGRyID0gZG1hX21hcF9wYWdlKGRtYV9jaGFuLT5kZXZpY2UtPmRldiwgZGVzdCwgMCwKIAkJCVBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQl0eCA9IGlvcF9hZG1hX3ByZXBfZG1hX21lbXNldChkbWFfY2hhbiwgZG1hX2FkZHIsIDAsIFBBR0VfU0laRSwgMSk7CisJdHggPSBpb3BfYWRtYV9wcmVwX2RtYV9tZW1zZXQoZG1hX2NoYW4sIGRtYV9hZGRyLCAwLCBQQUdFX1NJWkUsCisJCQkJICAgICAgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKIAogCWNvb2tpZSA9IGlvcF9hZG1hX3R4X3N1Ym1pdCh0eCk7CiAJaW9wX2FkbWFfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7Ci0JYXN5bmNfdHhfYWNrKHR4KTsKIAltc2xlZXAoOCk7CiAKIAlpZiAoaW9wX2FkbWFfaXNfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKQEAgLTEwNTcsMTEgKzEwNTMsMTEgQEAKIAkJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAJdHggPSBpb3BfYWRtYV9wcmVwX2RtYV96ZXJvX3N1bShkbWFfY2hhbiwgZG1hX3NyY3MsCiAJCQkJCUlPUF9BRE1BX05VTV9TUkNfVEVTVCArIDEsIFBBR0VfU0laRSwKLQkJCQkJJnplcm9fc3VtX3Jlc3VsdCwgMSk7CisJCQkJCSZ6ZXJvX3N1bV9yZXN1bHQsCisJCQkJCURNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CiAKIAljb29raWUgPSBpb3BfYWRtYV90eF9zdWJtaXQodHgpOwogCWlvcF9hZG1hX2lzc3VlX3BlbmRpbmcoZG1hX2NoYW4pOwotCWFzeW5jX3R4X2Fjayh0eCk7CiAJbXNsZWVwKDgpOwogCiAJaWYgKGlvcF9hZG1hX2lzX2NvbXBsZXRlKGRtYV9jaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9IERNQV9TVUNDRVNTKSB7CkBAIC0xMTU5LDcgKzExNTUsNyBAQAogCX0KIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiBhbGxvY3RlZCBkZXNjcmlwdG9yIHBvb2wgdmlydCAlcCBwaHlzICVwXG4iLAotCQlfX0ZVTkNUSU9OX18sIGFkZXYtPmRtYV9kZXNjX3Bvb2xfdmlydCwKKwkJX19mdW5jX18sIGFkZXYtPmRtYV9kZXNjX3Bvb2xfdmlydCwKIAkJKHZvaWQgKikgYWRldi0+ZG1hX2Rlc2NfcG9vbCk7CiAKIAlhZGV2LT5pZCA9IHBsYXRfZGF0YS0+aHdfaWQ7CkBAIC0xMTc3LDcgKzExNzMsNiBAQAogCWRtYV9kZXYtPmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gaW9wX2FkbWFfZnJlZV9jaGFuX3Jlc291cmNlczsKIAlkbWFfZGV2LT5kZXZpY2VfaXNfdHhfY29tcGxldGUgPSBpb3BfYWRtYV9pc19jb21wbGV0ZTsKIAlkbWFfZGV2LT5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGlvcF9hZG1hX2lzc3VlX3BlbmRpbmc7Ci0JZG1hX2Rldi0+ZGV2aWNlX2RlcGVuZGVuY3lfYWRkZWQgPSBpb3BfYWRtYV9kZXBlbmRlbmN5X2FkZGVkOwogCWRtYV9kZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAKIAkvKiBzZXQgcHJlcCByb3V0aW5lcyBiYXNlZCBvbiBjYXBhYmlsaXR5ICovCkBAIC0xMjMyLDkgKzEyMjcsNiBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZpb3BfY2hhbi0+bG9jayk7Ci0JaW5pdF90aW1lcigmaW9wX2NoYW4tPmNsZWFudXBfd2F0Y2hkb2cpOwotCWlvcF9jaGFuLT5jbGVhbnVwX3dhdGNoZG9nLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaW9wX2NoYW47Ci0JaW9wX2NoYW4tPmNsZWFudXBfd2F0Y2hkb2cuZnVuY3Rpb24gPSBpb3BfYWRtYV90YXNrbGV0OwogCUlOSVRfTElTVF9IRUFEKCZpb3BfY2hhbi0+Y2hhaW4pOwogCUlOSVRfTElTVF9IRUFEKCZpb3BfY2hhbi0+YWxsX3Nsb3RzKTsKIAlJTklUX1JDVV9IRUFEKCZpb3BfY2hhbi0+Y29tbW9uLnJjdSk7CkBAIC0xMjg5LDcgKzEyODEsNyBAQAogCWRtYV9jb29raWVfdCBjb29raWU7CiAJaW50IHNsb3RfY250LCBzbG90c19wZXJfb3A7CiAKLQlkZXZfZGJnKGlvcF9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnKGlvcF9jaGFuLT5kZXZpY2UtPmNvbW1vbi5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCiAJc3Bpbl9sb2NrX2JoKCZpb3BfY2hhbi0+bG9jayk7CiAJc2xvdF9jbnQgPSBpb3BfY2hhbl9tZW1jcHlfc2xvdF9jb3VudCgwLCAmc2xvdHNfcGVyX29wKTsKQEAgLTEyOTgsNyArMTI5MCw3IEBACiAJCWdycF9zdGFydCA9IHN3X2Rlc2MtPmdyb3VwX2hlYWQ7CiAKIAkJbGlzdF9zcGxpY2VfaW5pdCgmc3dfZGVzYy0+YXN5bmNfdHgudHhfbGlzdCwgJmlvcF9jaGFuLT5jaGFpbik7Ci0JCXN3X2Rlc2MtPmFzeW5jX3R4LmFjayA9IDE7CisJCWFzeW5jX3R4X2Fjaygmc3dfZGVzYy0+YXN5bmNfdHgpOwogCQlpb3BfZGVzY19pbml0X21lbWNweShncnBfc3RhcnQsIDApOwogCQlpb3BfZGVzY19zZXRfYnl0ZV9jb3VudChncnBfc3RhcnQsIGlvcF9jaGFuLCAwKTsKIAkJaW9wX2Rlc2Nfc2V0X2Rlc3RfYWRkcihncnBfc3RhcnQsIGlvcF9jaGFuLCAwKTsKQEAgLTEzNDYsNyArMTMzOCw3IEBACiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAlpbnQgc2xvdF9jbnQsIHNsb3RzX3Blcl9vcDsKIAotCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcoaW9wX2NoYW4tPmRldmljZS0+Y29tbW9uLmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2tfYmgoJmlvcF9jaGFuLT5sb2NrKTsKIAlzbG90X2NudCA9IGlvcF9jaGFuX3hvcl9zbG90X2NvdW50KDAsIDIsICZzbG90c19wZXJfb3ApOwpAQCAtMTM1NCw3ICsxMzQ2LDcgQEAKIAlpZiAoc3dfZGVzYykgewogCQlncnBfc3RhcnQgPSBzd19kZXNjLT5ncm91cF9oZWFkOwogCQlsaXN0X3NwbGljZV9pbml0KCZzd19kZXNjLT5hc3luY190eC50eF9saXN0LCAmaW9wX2NoYW4tPmNoYWluKTsKLQkJc3dfZGVzYy0+YXN5bmNfdHguYWNrID0gMTsKKwkJYXN5bmNfdHhfYWNrKCZzd19kZXNjLT5hc3luY190eCk7CiAJCWlvcF9kZXNjX2luaXRfbnVsbF94b3IoZ3JwX3N0YXJ0LCAyLCAwKTsKIAkJaW9wX2Rlc2Nfc2V0X2J5dGVfY291bnQoZ3JwX3N0YXJ0LCBpb3BfY2hhbiwgMCk7CiAJCWlvcF9kZXNjX3NldF9kZXN0X2FkZHIoZ3JwX3N0YXJ0LCBpb3BfY2hhbiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKaW5kZXggZmU5ZTc2OC4uZmI0ZDM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZwpAQCAtMSw1ICsxLDMgQEAKLSMgLSotIHNoZWxsLXNjcmlwdCAtKi0KLQogY29tbWVudCAiQW4gYWx0ZXJuYXRpdmUgRmlyZVdpcmUgc3RhY2sgaXMgYXZhaWxhYmxlIHdpdGggRVhQRVJJTUVOVEFMPXkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUw9bgogCkBAIC0yMSwyNyArMTksNyBAQAogICAgICAgICAgIE5PVEU6CiAKIAkgIFlvdSBzaG91bGQgb25seSBidWlsZCBPTkUgb2YgdGhlIHN0YWNrcywgdW5sZXNzIHlvdSBSRUFMTFkga25vdyB3aGF0Ci0JICB5b3UgYXJlIGRvaW5nLiAgSWYgeW91IGluc3RhbGwgYm90aCwgeW91IHNob3VsZCBjb25maWd1cmUgdGhlbSBvbmx5IGFzCi0JICBtb2R1bGVzIHJhdGhlciB0aGFuIGxpbmsgdGhlbSBzdGF0aWNhbGx5LCBhbmQgeW91IHNob3VsZCBibGFja2xpc3Qgb25lCi0JICBvZiB0aGUgY29uY3VycmVudCBsb3ctbGV2ZWwgZHJpdmVycyBpbiAvZXRjL21vZHByb2JlLmNvbmYuICBBZGQgZWl0aGVyCi0KLQkgICAgICBibGFja2xpc3QgZmlyZXdpcmUtb2hjaQotCSAgb3IKLQkgICAgICBibGFja2xpc3Qgb2hjaTEzOTQKLQotCSAgdGhlcmUgZGVwZW5kaW5nIG9uIHdoaWNoIGRyaXZlciB5b3UgRE9OJ1Qgd2FudCB0byBoYXZlIGF1dG8tbG9hZGVkLgotCSAgWW91IGNhbiBvcHRpb25hbGx5IGRvIHRoZSBzYW1lIHdpdGggdGhlIG90aGVyIElFRUUgMTM5NC8gRmlyZVdpcmUKLQkgIGRyaXZlcnMuCi0KLQkgIElmIHlvdSBoYXZlIGFuIG9sZCBtb2Rwcm9iZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCB0aGUgYmxhY2tsaXN0Ci0JICBkaXJlY3RpdmUsIHVzZSBlaXRoZXIKLQotCSAgICAgICBpbnN0YWxsIGZpcmV3aXJlLW9oY2kgL2Jpbi90cnVlCi0JICBvcgotCSAgICAgICBpbnN0YWxsIG9oY2kxMzk0IC9iaW4vdHJ1ZQotCi0JICBhbmQgc28gb24sIGRlcGVuZGluZyBvbiB3aGljaCBtb2R1bGVzIHlvdSBET04ndCB3YW50IHRvIGhhdmUKLQkgIGF1dG8tbG9hZGVkLgorCSAgeW91IGFyZSBkb2luZy4KIAogY29uZmlnIEZJUkVXSVJFX09IQ0kKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgT0hDSSBGaXJlV2lyZSBob3N0IGNvbnRyb2xsZXJzIgpAQCAtNTcsOCArMzUsMjkgQEAKIAogICAgICAgICAgIE5PVEU6CiAKLQkgIElmIHlvdSBhbHNvIGJ1aWxkIG9oY2kxMzk0IG9mIHRoZSBjbGFzc2ljIHN0YWNrLCBibGFja2xpc3QgZWl0aGVyCi0JICBvaGNpMTM5NCBvciBmaXJld2lyZS1vaGNpIHRvIGxldCBob3RwbHVnIGxvYWQgb25seSB0aGUgZGVzaXJlZCBkcml2ZXIuCisJICBZb3Ugc2hvdWxkIG9ubHkgYnVpbGQgb2hjaTEzOTQgb3IgZmlyZXdpcmUtb2hjaSwgYnV0IG5vdCBib3RoLgorCSAgSWYgeW91IG5ldmVydGhlbGVzcyB3YW50IHRvIGluc3RhbGwgYm90aCwgeW91IHNob3VsZCBjb25maWd1cmUgdGhlbQorCSAgb25seSBhcyBtb2R1bGVzIGFuZCBibGFja2xpc3QgdGhlIGRyaXZlcihzKSB3aGljaCB5b3UgZG9uJ3Qgd2FudCB0bworCSAgaGF2ZSBhdXRvLWxvYWRlZC4gIEFkZCBlaXRoZXIKKworCSAgICAgIGJsYWNrbGlzdCBmaXJld2lyZS1vaGNpCisJICBvcgorCSAgICAgIGJsYWNrbGlzdCBvaGNpMTM5NAorCSAgICAgIGJsYWNrbGlzdCB2aWRlbzEzOTQKKwkgICAgICBibGFja2xpc3QgZHYxMzk0CisKKwkgIHRvIC9ldGMvbW9kcHJvYmUuY29uZiBvciAvZXRjL21vZHByb2JlLmQvKiBhbmQgdXBkYXRlIG1vZHByb2JlLmNvbmYKKwkgIGRlcGVuZGluZyBvbiB5b3VyIGRpc3RyaWJ1dGlvbi4gIFRoZSBsYXR0ZXIgdHdvIG1vZHVsZXMgc2hvdWxkIGJlCisJICBibGFja2xpc3RlZCB0b2dldGhlciB3aXRoIG9oY2kxMzk0IGJlY2F1c2UgdGhleSBkZXBlbmQgb24gb2hjaTEzOTQuCisKKwkgIElmIHlvdSBoYXZlIGFuIG9sZCBtb2Rwcm9iZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCB0aGUgYmxhY2tsaXN0CisJICBkaXJlY3RpdmUsIHVzZSAiaW5zdGFsbCBtb2R1bGVuYW1lIC9iaW4vdHJ1ZSIgZm9yIHRoZSBtb2R1bGVzIHRvIGJlCisJICBibGFja2xpc3RlZC4KKworY29uZmlnIEZJUkVXSVJFX09IQ0lfREVCVUcKKwlib29sCisJZGVwZW5kcyBvbiBGSVJFV0lSRV9PSENJCisJZGVmYXVsdCB5CiAKIGNvbmZpZyBGSVJFV0lSRV9TQlAyCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHN0b3JhZ2UgZGV2aWNlcyAoU0JQLTIgcHJvdG9jb2wgZHJpdmVyKSIKQEAgLTc1LDkgKzc0LDMgQEAKIAogCSAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBkaXNrcywgQ0QtUk9NcywgZXRjLiBpbiB0aGUgU0NTSQogCSAgY29uZmlndXJhdGlvbiBzZWN0aW9uLgotCi0gICAgICAgICAgTk9URToKLQotCSAgSWYgeW91IGFsc28gYnVpbGQgc2JwMiBvZiB0aGUgY2xhc3NpYyBzdGFjaywgYmxhY2tsaXN0IGVpdGhlciBzYnAyCi0JICBvciBmaXJld2lyZS1zYnAyIHRvIGxldCBob3RwbHVnIGxvYWQgb25seSB0aGUgZGVzaXJlZCBkcml2ZXIuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMKaW5kZXggM2U5NzE5OS4uNWI0YzBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYy1pdHUtdC5oPgpAQCAtMTY2LDcgKzE2Nyw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZndfY29yZV9hZGRfZGVzY3JpcHRvcik7CiAKIHZvaWQKIGZ3X2NvcmVfcmVtb3ZlX2Rlc2NyaXB0b3Ioc3RydWN0IGZ3X2Rlc2NyaXB0b3IgKmRlc2MpCkBAIC0xODEsNyArMTgxLDYgQEAKIAogCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGZ3X2NvcmVfcmVtb3ZlX2Rlc2NyaXB0b3IpOwogCiBzdGF0aWMgY29uc3QgY2hhciBnYXBfY291bnRfdGFibGVbXSA9IHsKIAk2MywgNSwgNywgOCwgMTAsIDEzLCAxNiwgMTgsIDIxLCAyNCwgMjYsIDI5LCAzMiwgMzUsIDM3LCA0MApAQCAtMjE0LDE3ICsyMTMsMjkgQEAKIGZ3X2NhcmRfYm1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2NhcmQsIHdvcmsud29yayk7Ci0Jc3RydWN0IGZ3X2RldmljZSAqcm9vdDsKKwlzdHJ1Y3QgZndfZGV2aWNlICpyb290X2RldmljZTsKKwlzdHJ1Y3QgZndfbm9kZSAqcm9vdF9ub2RlLCAqbG9jYWxfbm9kZTsKIAlzdHJ1Y3QgYm1fZGF0YSBibWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgZ2FwX2NvdW50LCBnZW5lcmF0aW9uLCBncmFjZTsKLQlpbnQgZG9fcmVzZXQgPSAwOworCWJvb2wgZG9fcmVzZXQgPSBmYWxzZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJbG9jYWxfbm9kZSA9IGNhcmQtPmxvY2FsX25vZGU7CisJcm9vdF9ub2RlICA9IGNhcmQtPnJvb3Rfbm9kZTsKKworCWlmIChsb2NhbF9ub2RlID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWZ3X25vZGVfZ2V0KGxvY2FsX25vZGUpOworCWZ3X25vZGVfZ2V0KHJvb3Rfbm9kZSk7CiAKIAlnZW5lcmF0aW9uID0gY2FyZC0+Z2VuZXJhdGlvbjsKLQlyb290ID0gY2FyZC0+cm9vdF9ub2RlLT5kYXRhOwotCXJvb3RfaWQgPSBjYXJkLT5yb290X25vZGUtPm5vZGVfaWQ7CisJcm9vdF9kZXZpY2UgPSByb290X25vZGUtPmRhdGE7CisJaWYgKHJvb3RfZGV2aWNlKQorCQlmd19kZXZpY2VfZ2V0KHJvb3RfZGV2aWNlKTsKKwlyb290X2lkID0gcm9vdF9ub2RlLT5ub2RlX2lkOwogCWdyYWNlID0gdGltZV9hZnRlcihqaWZmaWVzLCBjYXJkLT5yZXNldF9qaWZmaWVzICsgRElWX1JPVU5EX1VQKEhaLCAxMCkpOwogCiAJaWYgKGNhcmQtPmJtX2dlbmVyYXRpb24gKyAxID09IGdlbmVyYXRpb24gfHwKQEAgLTI0MywxNCArMjU0LDE0IEBACiAKIAkJaXJtX2lkID0gY2FyZC0+aXJtX25vZGUtPm5vZGVfaWQ7CiAJCWlmICghY2FyZC0+aXJtX25vZGUtPmxpbmtfb24pIHsKLQkJCW5ld19yb290X2lkID0gY2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKKwkJCW5ld19yb290X2lkID0gbG9jYWxfbm9kZS0+bm9kZV9pZDsKIAkJCWZ3X25vdGlmeSgiSVJNIGhhcyBsaW5rIG9mZiwgbWFraW5nIGxvY2FsIG5vZGUgKCUwMngpIHJvb3QuXG4iLAogCQkJCSAgbmV3X3Jvb3RfaWQpOwogCQkJZ290byBwaWNrX21lOwogCQl9CiAKIAkJYm1kLmxvY2suYXJnID0gY3B1X3RvX2JlMzIoMHgzZik7Ci0JCWJtZC5sb2NrLmRhdGEgPSBjcHVfdG9fYmUzMihjYXJkLT5sb2NhbF9ub2RlLT5ub2RlX2lkKTsKKwkJYm1kLmxvY2suZGF0YSA9IGNwdV90b19iZTMyKGxvY2FsX25vZGUtPm5vZGVfaWQpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjY3LDEyICsyNzgsMTIgQEAKIAkJCSAqIEFub3RoZXIgYnVzIHJlc2V0IGhhcHBlbmVkLiBKdXN0IHJldHVybiwKIAkJCSAqIHRoZSBCTSB3b3JrIGhhcyBiZWVuIHJlc2NoZWR1bGVkLgogCQkJICovCi0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCWlmIChibWQucmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYgYm1kLm9sZCAhPSAweDNmKQogCQkJLyogU29tZWJvZHkgZWxzZSBpcyBCTSwgbGV0IHRoZW0gZG8gdGhlIHdvcmsuICovCi0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQlpZiAoYm1kLnJjb2RlICE9IFJDT0RFX0NPTVBMRVRFKSB7CkBAIC0yODIsNyArMjkzLDcgQEAKIAkJCSAqIGRvIGEgYnVzIHJlc2V0IGFuZCBwaWNrIHRoZSBsb2NhbCBub2RlIGFzCiAJCQkgKiByb290LCBhbmQgdGh1cywgSVJNLgogCQkJICovCi0JCQluZXdfcm9vdF9pZCA9IGNhcmQtPmxvY2FsX25vZGUtPm5vZGVfaWQ7CisJCQluZXdfcm9vdF9pZCA9IGxvY2FsX25vZGUtPm5vZGVfaWQ7CiAJCQlmd19ub3RpZnkoIkJNIGxvY2sgZmFpbGVkLCBtYWtpbmcgbG9jYWwgbm9kZSAoJTAyeCkgcm9vdC5cbiIsCiAJCQkJICBuZXdfcm9vdF9pZCk7CiAJCQlnb3RvIHBpY2tfbWU7CkBAIC0yOTUsNyArMzA2LDcgQEAKIAkJICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjYXJkLT53b3JrLCBESVZfUk9VTkRfVVAoSFosIDEwKSk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyoKQEAgLTMwNSwyMCArMzE2LDIwIEBACiAJICovCiAJY2FyZC0+Ym1fZ2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CiAKLQlpZiAocm9vdCA9PSBOVUxMKSB7CisJaWYgKHJvb3RfZGV2aWNlID09IE5VTEwpIHsKIAkJLyoKIAkJICogRWl0aGVyIGxpbmtfb24gaXMgZmFsc2UsIG9yIHdlIGZhaWxlZCB0byByZWFkIHRoZQogCQkgKiBjb25maWcgcm9tLiAgSW4gZWl0aGVyIGNhc2UsIHBpY2sgYW5vdGhlciByb290LgogCQkgKi8KLQkJbmV3X3Jvb3RfaWQgPSBjYXJkLT5sb2NhbF9ub2RlLT5ub2RlX2lkOwotCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJnJvb3QtPnN0YXRlKSAhPSBGV19ERVZJQ0VfUlVOTklORykgeworCQluZXdfcm9vdF9pZCA9IGxvY2FsX25vZGUtPm5vZGVfaWQ7CisJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmcm9vdF9kZXZpY2UtPnN0YXRlKSAhPSBGV19ERVZJQ0VfUlVOTklORykgewogCQkvKgogCQkgKiBJZiB3ZSBoYXZlbid0IHByb2JlZCB0aGlzIGRldmljZSB5ZXQsIGJhaWwgb3V0IG5vdwogCQkgKiBhbmQgbGV0J3MgdHJ5IGFnYWluIG9uY2UgdGhhdCdzIGRvbmUuCiAJCSAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9IGVsc2UgaWYgKHJvb3QtPmNvbmZpZ19yb21bMl0gJiBCSUJfQ01DKSB7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocm9vdF9kZXZpY2UtPmNtYykgewogCQkvKgogCQkgKiBGSVhNRTogSSBzdXBwb3NlIHdlIHNob3VsZCBzZXQgdGhlIGNtc3RyIGJpdCBpbiB0aGUKIAkJICogU1RBVEVfQ0xFQVIgcmVnaXN0ZXIgb2YgdGhpcyBub2RlLCBhcyBkZXNjcmliZWQgaW4KQEAgLTMzMiw3ICszNDMsNyBAQAogCQkgKiBzdWNjZXNzZnVsbHkgcmVhZCB0aGUgY29uZmlnIHJvbSwgYnV0IGl0J3Mgbm90CiAJCSAqIGN5Y2xlIG1hc3RlciBjYXBhYmxlLgogCQkgKi8KLQkJbmV3X3Jvb3RfaWQgPSBjYXJkLT5sb2NhbF9ub2RlLT5ub2RlX2lkOworCQluZXdfcm9vdF9pZCA9IGxvY2FsX25vZGUtPm5vZGVfaWQ7CiAJfQogCiAgcGlja19tZToKQEAgLTM0MSwyMCArMzUyLDIwIEBACiAJICogdGhlIHR5cGljYWxseSBtdWNoIGxhcmdlciAxMzk0YiBiZXRhIHJlcGVhdGVyIGRlbGF5cyB0aG91Z2guCiAJICovCiAJaWYgKCFjYXJkLT5iZXRhX3JlcGVhdGVyc19wcmVzZW50ICYmCi0JICAgIGNhcmQtPnJvb3Rfbm9kZS0+bWF4X2hvcHMgPCBBUlJBWV9TSVpFKGdhcF9jb3VudF90YWJsZSkpCi0JCWdhcF9jb3VudCA9IGdhcF9jb3VudF90YWJsZVtjYXJkLT5yb290X25vZGUtPm1heF9ob3BzXTsKKwkgICAgcm9vdF9ub2RlLT5tYXhfaG9wcyA8IEFSUkFZX1NJWkUoZ2FwX2NvdW50X3RhYmxlKSkKKwkJZ2FwX2NvdW50ID0gZ2FwX2NvdW50X3RhYmxlW3Jvb3Rfbm9kZS0+bWF4X2hvcHNdOwogCWVsc2UKIAkJZ2FwX2NvdW50ID0gNjM7CiAKIAkvKgotCSAqIEZpbmFsbHksIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGRvIGEgcmVzZXQgb3Igbm90LiAgSWYgd2UndmUKLQkgKiBkb25lIGxlc3MgdGhhdCA1IHJlc2V0cyB3aXRoIHRoZSBzYW1lIHBoeXNpY2FsIHRvcG9sb2d5IGFuZCB3ZQorCSAqIEZpbmFsbHksIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGRvIGEgcmVzZXQgb3Igbm90LiAgSWYgd2UgaGF2ZQorCSAqIGRvbmUgbGVzcyB0aGFuIDUgcmVzZXRzIHdpdGggdGhlIHNhbWUgcGh5c2ljYWwgdG9wb2xvZ3kgYW5kIHdlCiAJICogaGF2ZSBlaXRoZXIgYSBuZXcgcm9vdCBvciBhIG5ldyBnYXAgY291bnQgc2V0dGluZywgbGV0J3MgZG8gaXQuCiAJICovCiAKIAlpZiAoY2FyZC0+Ym1fcmV0cmllcysrIDwgNSAmJgogCSAgICAoY2FyZC0+Z2FwX2NvdW50ICE9IGdhcF9jb3VudCB8fCBuZXdfcm9vdF9pZCAhPSByb290X2lkKSkKLQkJZG9fcmVzZXQgPSAxOworCQlkb19yZXNldCA9IHRydWU7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKQEAgLTM2NCw2ICszNzUsMTEgQEAKIAkJZndfc2VuZF9waHlfY29uZmlnKGNhcmQsIG5ld19yb290X2lkLCBnZW5lcmF0aW9uLCBnYXBfY291bnQpOwogCQlmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChjYXJkLCAxKTsKIAl9Cisgb3V0OgorCWlmIChyb290X2RldmljZSkKKwkJZndfZGV2aWNlX3B1dChyb290X2RldmljZSk7CisJZndfbm9kZV9wdXQocm9vdF9ub2RlKTsKKwlmd19ub2RlX3B1dChsb2NhbF9ub2RlKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM4MCw3ICszOTYsNyBAQAogewogCXN0YXRpYyBhdG9taWNfdCBpbmRleCA9IEFUT01JQ19JTklUKC0xKTsKIAotCWtyZWZfaW5pdCgmY2FyZC0+a3JlZik7CisJYXRvbWljX3NldCgmY2FyZC0+ZGV2aWNlX2NvdW50LCAwKTsKIAljYXJkLT5pbmRleCA9IGF0b21pY19pbmNfcmV0dXJuKCZpbmRleCk7CiAJY2FyZC0+ZHJpdmVyID0gZHJpdmVyOwogCWNhcmQtPmRldmljZSA9IGRldmljZTsKQEAgLTQxMCwxMiArNDI2LDYgQEAKIAljYXJkLT5saW5rX3NwZWVkID0gbGlua19zcGVlZDsKIAljYXJkLT5ndWlkID0gZ3VpZDsKIAotCS8qCi0JICogVGhlIHN1YnN5c3RlbSBncmFicyBhIHJlZmVyZW5jZSB3aGVuIHRoZSBjYXJkIGlzIGFkZGVkIGFuZAotCSAqIGRyb3BzIGl0IHdoZW4gdGhlIGRyaXZlciBjYWxscyBmd19jb3JlX3JlbW92ZV9jYXJkLgotCSAqLwotCWZ3X2NhcmRfZ2V0KGNhcmQpOwotCiAJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CiAJY29uZmlnX3JvbSA9IGdlbmVyYXRlX2NvbmZpZ19yb20oY2FyZCwgJmxlbmd0aCk7CiAJbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGluaywgJmNhcmRfbGlzdCk7CkBAIC01MTEsNDQgKzUyMSwxOSBAQAogCWNhcmQtPmRyaXZlciA9ICZkdW1teV9kcml2ZXI7CiAKIAlmd19kZXN0cm95X25vZGVzKGNhcmQpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJLyoKKwkgKiBXYWl0IGZvciBhbGwgZGV2aWNlIHdvcmtxdWV1ZSBqb2JzIHRvIGZpbmlzaC4gIE90aGVyd2lzZSB0aGUKKwkgKiBmaXJld2lyZS1jb3JlIG1vZHVsZSBjb3VsZCBiZSB1bmxvYWRlZCBiZWZvcmUgdGhlIGpvYnMgcmFuLgorCSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmY2FyZC0+ZGV2aWNlX2NvdW50KSA+IDApCisJCW1zbGVlcCgxMDApOwogCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZjYXJkLT53b3JrKTsKIAlmd19mbHVzaF90cmFuc2FjdGlvbnMoY2FyZCk7CiAJZGVsX3RpbWVyX3N5bmMoJmNhcmQtPmZsdXNoX3RpbWVyKTsKLQotCWZ3X2NhcmRfcHV0KGNhcmQpOwogfQogRVhQT1JUX1NZTUJPTChmd19jb3JlX3JlbW92ZV9jYXJkKTsKIAotc3RydWN0IGZ3X2NhcmQgKgotZndfY2FyZF9nZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCi17Ci0Ja3JlZl9nZXQoJmNhcmQtPmtyZWYpOwotCi0JcmV0dXJuIGNhcmQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGZ3X2NhcmRfZ2V0KTsKLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfY2FyZChzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZndfY2FyZCwga3JlZik7Ci0KLQlrZnJlZShjYXJkKTsKLX0KLQotLyoKLSAqIEFuIGFzc3VtcHRpb24gZm9yIGZ3X2NhcmRfcHV0KCkgaXMgdGhhdCB0aGUgY2FyZCBkcml2ZXIgYWxsb2NhdGVzCi0gKiB0aGUgZndfY2FyZCBzdHJ1Y3Qgd2l0aCBrYWxsb2MgYW5kIHRoYXQgaXQgaGFzIGJlZW4gc2h1dCBkb3duCi0gKiBiZWZvcmUgdGhlIGxhc3QgcmVmIGlzIGRyb3BwZWQuCi0gKi8KLXZvaWQKLWZ3X2NhcmRfcHV0KHN0cnVjdCBmd19jYXJkICpjYXJkKQotewotCWtyZWZfcHV0KCZjYXJkLT5rcmVmLCByZWxlYXNlX2NhcmQpOwotfQotRVhQT1JUX1NZTUJPTChmd19jYXJkX3B1dCk7Ci0KIGludAogZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMKaW5kZXggN2U3M2NiYS4uNGE1NDE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMKQEAgLTEwOSwxNSArMTA5LDE3IEBACiAJc3RydWN0IGNsaWVudCAqY2xpZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZXZpY2UgPSBmd19kZXZpY2VfZnJvbV9kZXZ0KGlub2RlLT5pX3JkZXYpOworCWRldmljZSA9IGZ3X2RldmljZV9nZXRfYnlfZGV2dChpbm9kZS0+aV9yZGV2KTsKIAlpZiAoZGV2aWNlID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gTlVMTCkKKwlpZiAoY2xpZW50ID09IE5VTEwpIHsKKwkJZndfZGV2aWNlX3B1dChkZXZpY2UpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQljbGllbnQtPmRldmljZSA9IGZ3X2RldmljZV9nZXQoZGV2aWNlKTsKKwljbGllbnQtPmRldmljZSA9IGRldmljZTsKIAlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5ldmVudF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5yZXNvdXJjZV9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT5sb2NrKTsKQEAgLTI2NywyMSArMjY5LDI4IEBACiB7CiAJc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8gKmdldF9pbmZvID0gYnVmZmVyOwogCXN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCBidXNfcmVzZXQ7CisJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCiAJY2xpZW50LT52ZXJzaW9uID0gZ2V0X2luZm8tPnZlcnNpb247CiAJZ2V0X2luZm8tPnZlcnNpb24gPSBGV19DREVWX1ZFUlNJT047CiAKKwlkb3duX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CisKIAlpZiAoZ2V0X2luZm8tPnJvbSAhPSAwKSB7CiAJCXZvaWQgX191c2VyICp1cHRyID0gdTY0X3RvX3VwdHIoZ2V0X2luZm8tPnJvbSk7CiAJCXNpemVfdCB3YW50ID0gZ2V0X2luZm8tPnJvbV9sZW5ndGg7CiAJCXNpemVfdCBoYXZlID0gY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNDsKIAotCQlpZiAoY29weV90b191c2VyKHVwdHIsIGNsaWVudC0+ZGV2aWNlLT5jb25maWdfcm9tLAotCQkJCSBtaW4od2FudCwgaGF2ZSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IGNvcHlfdG9fdXNlcih1cHRyLCBjbGllbnQtPmRldmljZS0+Y29uZmlnX3JvbSwKKwkJCQkgICBtaW4od2FudCwgaGF2ZSkpOwogCX0KIAlnZXRfaW5mby0+cm9tX2xlbmd0aCA9IGNsaWVudC0+ZGV2aWNlLT5jb25maWdfcm9tX2xlbmd0aCAqIDQ7CiAKKwl1cF9yZWFkKCZmd19kZXZpY2VfcndzZW0pOworCisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCWNsaWVudC0+YnVzX3Jlc2V0X2Nsb3N1cmUgPSBnZXRfaW5mby0+YnVzX3Jlc2V0X2Nsb3N1cmU7CiAJaWYgKGdldF9pbmZvLT5idXNfcmVzZXQgIT0gMCkgewogCQl2b2lkIF9fdXNlciAqdXB0ciA9IHU2NF90b191cHRyKGdldF9pbmZvLT5idXNfcmVzZXQpOwpAQCAtNjQ0LDYgKzY1MywxMCBAQAogCXN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCAqcmVxdWVzdCA9IGJ1ZmZlcjsKIAlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQ7CiAKKwkvKiBXZSBvbmx5IHN1cHBvcnQgb25lIGNvbnRleHQgYXQgdGhpcyB0aW1lLiAqLworCWlmIChjbGllbnQtPmlzb19jb250ZXh0ICE9IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKIAlpZiAocmVxdWVzdC0+Y2hhbm5lbCA+IDYzKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzkwLDggKzgwMyw5IEBACiB7CiAJc3RydWN0IGZ3X2NkZXZfc3RhcnRfaXNvICpyZXF1ZXN0ID0gYnVmZmVyOwogCi0JaWYgKHJlcXVlc3QtPmhhbmRsZSAhPSAwKQorCWlmIChjbGllbnQtPmlzb19jb250ZXh0ID09IE5VTEwgfHwgcmVxdWVzdC0+aGFuZGxlICE9IDApCiAJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGNsaWVudC0+aXNvX2NvbnRleHQtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfUkVDRUlWRSkgewogCQlpZiAocmVxdWVzdC0+dGFncyA9PSAwIHx8IHJlcXVlc3QtPnRhZ3MgPiAxNSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtODA4LDcgKzgyMiw3IEBACiB7CiAJc3RydWN0IGZ3X2NkZXZfc3RvcF9pc28gKnJlcXVlc3QgPSBidWZmZXI7CiAKLQlpZiAocmVxdWVzdC0+aGFuZGxlICE9IDApCisJaWYgKGNsaWVudC0+aXNvX2NvbnRleHQgPT0gTlVMTCB8fCByZXF1ZXN0LT5oYW5kbGUgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gZndfaXNvX2NvbnRleHRfc3RvcChjbGllbnQtPmlzb19jb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jCmluZGV4IGRlOTA2NmUuLmQ5YzhkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYwpAQCAtMjUsOCArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKQEAgLTE1MCwzNSArMTUxLDI0IEBACiB9OwogRVhQT1JUX1NZTUJPTChmd19idXNfdHlwZSk7CiAKLXN0cnVjdCBmd19kZXZpY2UgKmZ3X2RldmljZV9nZXQoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQotewotCWdldF9kZXZpY2UoJmRldmljZS0+ZGV2aWNlKTsKLQotCXJldHVybiBkZXZpY2U7Ci19Ci0KLXZvaWQgZndfZGV2aWNlX3B1dChzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCi17Ci0JcHV0X2RldmljZSgmZGV2aWNlLT5kZXZpY2UpOwotfQotCiBzdGF0aWMgdm9pZCBmd19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGRldik7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCiAJICogVGFrZSB0aGUgY2FyZCBsb2NrIHNvIHdlIGRvbid0IHNldCB0aGlzIHRvIE5VTEwgd2hpbGUgYQogCSAqIEZXX05PREVfVVBEQVRFRCBjYWxsYmFjayBpcyBiZWluZyBoYW5kbGVkLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCWRldmljZS0+bm9kZS0+ZGF0YSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJZndfbm9kZV9wdXQoZGV2aWNlLT5ub2RlKTsKLQlmd19jYXJkX3B1dChkZXZpY2UtPmNhcmQpOwogCWtmcmVlKGRldmljZS0+Y29uZmlnX3JvbSk7CiAJa2ZyZWUoZGV2aWNlKTsKKwlhdG9taWNfZGVjKCZjYXJkLT5kZXZpY2VfY291bnQpOwogfQogCiBpbnQgZndfZGV2aWNlX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCkBAIC0yMDYsNyArMTk2LDkgQEAKIAkJY29udGFpbmVyX29mKGRhdHRyLCBzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUsIGF0dHIpOwogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CiAJdTMyICpkaXI7Ci0JaW50IGtleSwgdmFsdWU7CisJaW50IGtleSwgdmFsdWUsIHJldCA9IC1FTk9FTlQ7CisKKwlkb3duX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CiAKIAlpZiAoaXNfZndfdW5pdChkZXYpKQogCQlkaXIgPSBmd191bml0KGRldiktPmRpcmVjdG9yeTsKQEAgLTIxNSwxMSArMjA3LDE1IEBACiAKIAlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIGRpcik7CiAJd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkKLQkJaWYgKGF0dHItPmtleSA9PSBrZXkpCi0JCQlyZXR1cm4gc25wcmludGYoYnVmLCBidWYgPyBQQUdFX1NJWkUgOiAwLAotCQkJCQkiMHglMDZ4XG4iLCB2YWx1ZSk7CisJCWlmIChhdHRyLT5rZXkgPT0ga2V5KSB7CisJCQlyZXQgPSBzbnByaW50ZihidWYsIGJ1ZiA/IFBBR0VfU0laRSA6IDAsCisJCQkJICAgICAgICIweCUwNnhcbiIsIHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CiAKLQlyZXR1cm4gLUVOT0VOVDsKKwl1cF9yZWFkKCZmd19kZXZpY2VfcndzZW0pOworCisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBJTU1FRElBVEVfQVRUUihuYW1lLCBrZXkpCQkJCVwKQEAgLTIzMiw5ICsyMjgsMTEgQEAKIAkJY29udGFpbmVyX29mKGRhdHRyLCBzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUsIGF0dHIpOwogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CiAJdTMyICpkaXIsICpibG9jayA9IE5VTEwsICpwLCAqZW5kOwotCWludCBsZW5ndGgsIGtleSwgdmFsdWUsIGxhc3Rfa2V5ID0gMDsKKwlpbnQgbGVuZ3RoLCBrZXksIHZhbHVlLCBsYXN0X2tleSA9IDAsIHJldCA9IC1FTk9FTlQ7CiAJY2hhciAqYjsKIAorCWRvd25fcmVhZCgmZndfZGV2aWNlX3J3c2VtKTsKKwogCWlmIChpc19md191bml0KGRldikpCiAJCWRpciA9IGZ3X3VuaXQoZGV2KS0+ZGlyZWN0b3J5OwogCWVsc2UKQEAgLTI0OSwxOCArMjQ3LDIwIEBACiAJfQogCiAJaWYgKGJsb2NrID09IE5VTEwpCi0JCXJldHVybiAtRU5PRU5UOworCQlnb3RvIG91dDsKIAogCWxlbmd0aCA9IG1pbihibG9ja1swXSA+PiAxNiwgMjU2VSk7CiAJaWYgKGxlbmd0aCA8IDMpCi0JCXJldHVybiAtRU5PRU5UOworCQlnb3RvIG91dDsKIAogCWlmIChibG9ja1sxXSAhPSAwIHx8IGJsb2NrWzJdICE9IDApCiAJCS8qIFVua25vd24gZW5jb2RpbmcuICovCi0JCXJldHVybiAtRU5PRU5UOworCQlnb3RvIG91dDsKIAotCWlmIChidWYgPT0gTlVMTCkKLQkJcmV0dXJuIGxlbmd0aCAqIDQ7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXJldCA9IGxlbmd0aCAqIDQ7CisJCWdvdG8gb3V0OworCX0KIAogCWIgPSBidWY7CiAJZW5kID0gJmJsb2NrW2xlbmd0aCArIDFdOwpAQCAtMjcwLDggKzI3MCwxMSBAQAogCS8qIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGFkZCBuZXdsaW5lLiAqLwogCXdoaWxlIChiLS0sIChpc3NwYWNlKCpiKSB8fCAqYiA9PSAnXDAnKSAmJiBiID4gYnVmKTsKIAlzdHJjcHkoYiArIDEsICJcbiIpOworCXJldCA9IGIgKyAyIC0gYnVmOworIG91dDoKKwl1cF9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwogCi0JcmV0dXJuIGIgKyAyIC0gYnVmOworCXJldHVybiByZXQ7CiB9CiAKICNkZWZpbmUgVEVYVF9MRUFGX0FUVFIobmFtZSwga2V5KQkJCQlcCkBAIC0zNDgsMjIgKzM1MSwyOCBAQAogY29uZmlnX3JvbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UoZGV2KTsKKwlzaXplX3QgbGVuZ3RoOwogCi0JbWVtY3B5KGJ1ZiwgZGV2aWNlLT5jb25maWdfcm9tLCBkZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNCk7CisJZG93bl9yZWFkKCZmd19kZXZpY2VfcndzZW0pOworCWxlbmd0aCA9IGRldmljZS0+Y29uZmlnX3JvbV9sZW5ndGggKiA0OworCW1lbWNweShidWYsIGRldmljZS0+Y29uZmlnX3JvbSwgbGVuZ3RoKTsKKwl1cF9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwogCi0JcmV0dXJuIGRldmljZS0+Y29uZmlnX3JvbV9sZW5ndGggKiA0OworCXJldHVybiBsZW5ndGg7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CiBndWlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYpOwotCXU2NCBndWlkOworCWludCByZXQ7CiAKLQlndWlkID0gKCh1NjQpZGV2aWNlLT5jb25maWdfcm9tWzNdIDw8IDMyKSB8IGRldmljZS0+Y29uZmlnX3JvbVs0XTsKKwlkb3duX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CisJcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwOHglMDh4XG4iLAorCQkgICAgICAgZGV2aWNlLT5jb25maWdfcm9tWzNdLCBkZXZpY2UtPmNvbmZpZ19yb21bNF0pOworCXVwX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CiAKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwMTZsbHhcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWd1aWQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBmd19kZXZpY2VfYXR0cmlidXRlc1tdID0gewpAQCAtNDAyLDcgKzQxMSw3IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJmNhbGxiYWNrX2RhdGEuZG9uZSk7CiAKLQlvZmZzZXQgPSAweGZmZmZmMDAwMDQwMFVMTCArIGluZGV4ICogNDsKKwlvZmZzZXQgPSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfQ09ORklHX1JPTSkgKyBpbmRleCAqIDQ7CiAJZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgJnQsIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNULAogCQkJZGV2aWNlLT5ub2RlX2lkLCBnZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKIAkJCW9mZnNldCwgTlVMTCwgNCwgY29tcGxldGVfdHJhbnNhY3Rpb24sICZjYWxsYmFja19kYXRhKTsKQEAgLTQxNCw2ICs0MjMsOSBAQAogCXJldHVybiBjYWxsYmFja19kYXRhLnJjb2RlOwogfQogCisjZGVmaW5lIFJFQURfQklCX1JPTV9TSVpFCTI1NgorI2RlZmluZSBSRUFEX0JJQl9TVEFDS19TSVpFCTE2CisKIC8qCiAgKiBSZWFkIHRoZSBidXMgaW5mbyBibG9jaywgcGVyZm9ybSBhIHNwZWVkIHByb2JlLCBhbmQgcmVhZCBhbGwgb2YgdGhlIHJlc3Qgb2YKICAqIHRoZSBjb25maWcgUk9NLiAgV2UgZG8gYWxsIHRoaXMgd2l0aCBhIGNhY2hlZCBidXMgZ2VuZXJhdGlvbi4gIElmIHRoZSBidXMKQEAgLTQyMywxNiArNDM1LDIzIEBACiAgKi8KIHN0YXRpYyBpbnQgcmVhZF9idXNfaW5mb19ibG9jayhzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uKQogewotCXN0YXRpYyB1MzIgcm9tWzI1Nl07Ci0JdTMyIHN0YWNrWzE2XSwgc3AsIGtleTsKLQlpbnQgaSwgZW5kLCBsZW5ndGg7CisJdTMyICpyb20sICpzdGFjaywgKm9sZF9yb20sICpuZXdfcm9tOworCXUzMiBzcCwga2V5OworCWludCBpLCBlbmQsIGxlbmd0aCwgcmV0ID0gLTE7CisKKwlyb20gPSBrbWFsbG9jKHNpemVvZigqcm9tKSAqIFJFQURfQklCX1JPTV9TSVpFICsKKwkJICAgICAgc2l6ZW9mKCpzdGFjaykgKiBSRUFEX0JJQl9TVEFDS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAocm9tID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhY2sgPSAmcm9tW1JFQURfQklCX1JPTV9TSVpFXTsKIAogCWRldmljZS0+bWF4X3NwZWVkID0gU0NPREVfMTAwOwogCiAJLyogRmlyc3QgcmVhZCB0aGUgYnVzIGluZm8gYmxvY2suICovCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlpZiAocmVhZF9yb20oZGV2aWNlLCBnZW5lcmF0aW9uLCBpLCAmcm9tW2ldKSAhPSBSQ09ERV9DT01QTEVURSkKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gb3V0OwogCQkvKgogCQkgKiBBcyBwZXIgSUVFRTEyMTIgNy4yLCBkdXJpbmcgcG93ZXItdXAsIGRldmljZXMgY2FuCiAJCSAqIHJlcGx5IHdpdGggYSAwIGZvciB0aGUgZmlyc3QgcXVhZGxldCBvZiB0aGUgY29uZmlnCkBAIC00NDIsNyArNDYxLDcgQEAKIAkJICogcmV0cnkgbWVjaGFuaXNtIHdpbGwgdHJ5IGFnYWluIGxhdGVyLgogCQkgKi8KIAkJaWYgKGkgPT0gMCAmJiByb21baV0gPT0gMCkKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gb3V0OwogCX0KIAogCWRldmljZS0+bWF4X3NwZWVkID0gZGV2aWNlLT5ub2RlLT5tYXhfc3BlZWQ7CkBAIC00OTIsMjYgKzUxMSwyNiBAQAogCQkgKi8KIAkJa2V5ID0gc3RhY2tbLS1zcF07CiAJCWkgPSBrZXkgJiAweGZmZmZmZjsKLQkJaWYgKGkgPj0gQVJSQVlfU0laRShyb20pKQorCQlpZiAoaSA+PSBSRUFEX0JJQl9ST01fU0laRSkKIAkJCS8qCiAJCQkgKiBUaGUgcmVmZXJlbmNlIHBvaW50cyBvdXRzaWRlIHRoZSBzdGFuZGFyZAogCQkJICogY29uZmlnIHJvbSBhcmVhLCBzb21ldGhpbmcncyBmaXNoeS4KIAkJCSAqLwotCQkJcmV0dXJuIC0xOworCQkJZ290byBvdXQ7CiAKIAkJLyogUmVhZCBoZWFkZXIgcXVhZGxldCBmb3IgdGhlIGJsb2NrIHRvIGdldCB0aGUgbGVuZ3RoLiAqLwogCQlpZiAocmVhZF9yb20oZGV2aWNlLCBnZW5lcmF0aW9uLCBpLCAmcm9tW2ldKSAhPSBSQ09ERV9DT01QTEVURSkKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gb3V0OwogCQllbmQgPSBpICsgKHJvbVtpXSA+PiAxNikgKyAxOwogCQlpKys7Ci0JCWlmIChlbmQgPiBBUlJBWV9TSVpFKHJvbSkpCisJCWlmIChlbmQgPiBSRUFEX0JJQl9ST01fU0laRSkKIAkJCS8qCiAJCQkgKiBUaGlzIGJsb2NrIGV4dGVuZHMgb3V0c2lkZSBzdGFuZGFyZCBjb25maWcKIAkJCSAqIGFyZWEgKGFuZCB0aGUgYXJyYXkgd2UncmUgcmVhZGluZyBpdAogCQkJICogaW50bykuICBUaGF0J3MgYnJva2VuLCBzbyBpZ25vcmUgdGhpcwogCQkJICogZGV2aWNlLgogCQkJICovCi0JCQlyZXR1cm4gLTE7CisJCQlnb3RvIG91dDsKIAogCQkvKgogCQkgKiBOb3cgcmVhZCBpbiB0aGUgYmxvY2suICBJZiB0aGlzIGlzIGEgZGlyZWN0b3J5CkBAIC01MjEsOSArNTQwLDkgQEAKIAkJd2hpbGUgKGkgPCBlbmQpIHsKIAkJCWlmIChyZWFkX3JvbShkZXZpY2UsIGdlbmVyYXRpb24sIGksICZyb21baV0pICE9CiAJCQkgICAgUkNPREVfQ09NUExFVEUpCi0JCQkJcmV0dXJuIC0xOworCQkJCWdvdG8gb3V0OwogCQkJaWYgKChrZXkgPj4gMzApID09IDMgJiYgKHJvbVtpXSA+PiAzMCkgPiAxICYmCi0JCQkgICAgc3AgPCBBUlJBWV9TSVpFKHN0YWNrKSkKKwkJCSAgICBzcCA8IFJFQURfQklCX1NUQUNLX1NJWkUpCiAJCQkJc3RhY2tbc3ArK10gPSBpICsgcm9tW2ldOwogCQkJaSsrOwogCQl9CkBAIC01MzEsMTMgKzU1MCwyMyBAQAogCQkJbGVuZ3RoID0gaTsKIAl9CiAKLQlkZXZpY2UtPmNvbmZpZ19yb20gPSBrbWFsbG9jKGxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOwotCWlmIChkZXZpY2UtPmNvbmZpZ19yb20gPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCW1lbWNweShkZXZpY2UtPmNvbmZpZ19yb20sIHJvbSwgbGVuZ3RoICogNCk7Ci0JZGV2aWNlLT5jb25maWdfcm9tX2xlbmd0aCA9IGxlbmd0aDsKKwlvbGRfcm9tID0gZGV2aWNlLT5jb25maWdfcm9tOworCW5ld19yb20gPSBrbWVtZHVwKHJvbSwgbGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CisJaWYgKG5ld19yb20gPT0gTlVMTCkKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gMDsKKwlkb3duX3dyaXRlKCZmd19kZXZpY2VfcndzZW0pOworCWRldmljZS0+Y29uZmlnX3JvbSA9IG5ld19yb207CisJZGV2aWNlLT5jb25maWdfcm9tX2xlbmd0aCA9IGxlbmd0aDsKKwl1cF93cml0ZSgmZndfZGV2aWNlX3J3c2VtKTsKKworCWtmcmVlKG9sZF9yb20pOworCXJldCA9IDA7CisJZGV2aWNlLT5jbWMgPSByb21bMl0gJiAxIDw8IDMwOworIG91dDoKKwlrZnJlZShyb20pOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZndfdW5pdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTYwNiwxNyArNjM1LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBERUNMQVJFX1JXU0VNKGlkcl9yd3NlbSk7CisvKgorICogZndfZGV2aWNlX3J3c2VtIGFjdHMgYXMgZHVhbCBwdXJwb3NlIG11dGV4OgorICogICAtIHNlcmlhbGl6ZXMgYWNjZXNzZXMgdG8gZndfZGV2aWNlX2lkciwKKyAqICAgLSBzZXJpYWxpemVzIGFjY2Vzc2VzIHRvIGZ3X2RldmljZS5jb25maWdfcm9tLy5jb25maWdfcm9tX2xlbmd0aCBhbmQKKyAqICAgICBmd191bml0LmRpcmVjdG9yeSwgdW5sZXNzIHRob3NlIGFjY2Vzc2VzIGhhcHBlbiBhdCBzYWZlIG9jY2FzaW9ucworICovCitERUNMQVJFX1JXU0VNKGZ3X2RldmljZV9yd3NlbSk7CisKIHN0YXRpYyBERUZJTkVfSURSKGZ3X2RldmljZV9pZHIpOwogaW50IGZ3X2NkZXZfbWFqb3I7CiAKLXN0cnVjdCBmd19kZXZpY2UgKmZ3X2RldmljZV9mcm9tX2RldnQoZGV2X3QgZGV2dCkKK3N0cnVjdCBmd19kZXZpY2UgKmZ3X2RldmljZV9nZXRfYnlfZGV2dChkZXZfdCBkZXZ0KQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZTsKIAotCWRvd25fcmVhZCgmaWRyX3J3c2VtKTsKKwlkb3duX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CiAJZGV2aWNlID0gaWRyX2ZpbmQoJmZ3X2RldmljZV9pZHIsIE1JTk9SKGRldnQpKTsKLQl1cF9yZWFkKCZpZHJfcndzZW0pOworCWlmIChkZXZpY2UpCisJCWZ3X2RldmljZV9nZXQoZGV2aWNlKTsKKwl1cF9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwogCiAJcmV0dXJuIGRldmljZTsKIH0KQEAgLTYyNywxMyArNjY1LDE0IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfZGV2aWNlLCB3b3JrLndvcmspOwogCWludCBtaW5vciA9IE1JTk9SKGRldmljZS0+ZGV2aWNlLmRldnQpOwogCi0JZG93bl93cml0ZSgmaWRyX3J3c2VtKTsKLQlpZHJfcmVtb3ZlKCZmd19kZXZpY2VfaWRyLCBtaW5vcik7Ci0JdXBfd3JpdGUoJmlkcl9yd3NlbSk7Ci0KIAlmd19kZXZpY2VfY2Rldl9yZW1vdmUoZGV2aWNlKTsKIAlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldmljZS0+ZGV2aWNlLCBOVUxMLCBzaHV0ZG93bl91bml0KTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmZGV2aWNlLT5kZXZpY2UpOworCisJZG93bl93cml0ZSgmZndfZGV2aWNlX3J3c2VtKTsKKwlpZHJfcmVtb3ZlKCZmd19kZXZpY2VfaWRyLCBtaW5vcik7CisJdXBfd3JpdGUoJmZ3X2RldmljZV9yd3NlbSk7CisJZndfZGV2aWNlX3B1dChkZXZpY2UpOwogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGZ3X2RldmljZV90eXBlID0gewpAQCAtNjY4LDcgKzcwNyw4IEBACiAJICovCiAKIAlpZiAocmVhZF9idXNfaW5mb19ibG9jayhkZXZpY2UsIGRldmljZS0+Z2VuZXJhdGlvbikgPCAwKSB7Ci0JCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA8IE1BWF9SRVRSSUVTKSB7CisJCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA8IE1BWF9SRVRSSUVTICYmCisJCSAgICBhdG9taWNfcmVhZCgmZGV2aWNlLT5zdGF0ZSkgPT0gRldfREVWSUNFX0lOSVRJQUxJWklORykgewogCQkJZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMrKzsKIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCBSRVRSWV9ERUxBWSk7CiAJCX0gZWxzZSB7CkBAIC02ODIsMTAgKzcyMiwxMyBAQAogCX0KIAogCWVyciA9IC1FTk9NRU07Ci0JZG93bl93cml0ZSgmaWRyX3J3c2VtKTsKKworCWZ3X2RldmljZV9nZXQoZGV2aWNlKTsKKwlkb3duX3dyaXRlKCZmd19kZXZpY2VfcndzZW0pOwogCWlmIChpZHJfcHJlX2dldCgmZndfZGV2aWNlX2lkciwgR0ZQX0tFUk5FTCkpCiAJCWVyciA9IGlkcl9nZXRfbmV3KCZmd19kZXZpY2VfaWRyLCBkZXZpY2UsICZtaW5vcik7Ci0JdXBfd3JpdGUoJmlkcl9yd3NlbSk7CisJdXBfd3JpdGUoJmZ3X2RldmljZV9yd3NlbSk7CisKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIApAQCAtNzE3LDEzICs3NjAsMjMgQEAKIAkgKi8KIAlpZiAoYXRvbWljX2NtcHhjaGcoJmRldmljZS0+c3RhdGUsCiAJCSAgICBGV19ERVZJQ0VfSU5JVElBTElaSU5HLAotCQkgICAgRldfREVWSUNFX1JVTk5JTkcpID09IEZXX0RFVklDRV9TSFVURE9XTikKLQkJZndfZGV2aWNlX3NodXRkb3duKCZkZXZpY2UtPndvcmsud29yayk7Ci0JZWxzZQotCQlmd19ub3RpZnkoImNyZWF0ZWQgbmV3IGZ3IGRldmljZSAlcyAiCi0JCQkgICIoJWQgY29uZmlnIHJvbSByZXRyaWVzLCBTJWQwMClcbiIsCi0JCQkgIGRldmljZS0+ZGV2aWNlLmJ1c19pZCwgZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMsCi0JCQkgIDEgPDwgZGV2aWNlLT5tYXhfc3BlZWQpOworCQkgICAgRldfREVWSUNFX1JVTk5JTkcpID09IEZXX0RFVklDRV9TSFVURE9XTikgeworCQlmd19kZXZpY2Vfc2h1dGRvd24od29yayk7CisJfSBlbHNlIHsKKwkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzKQorCQkJZndfbm90aWZ5KCJjcmVhdGVkIGRldmljZSAlczogR1VJRCAlMDh4JTA4eCwgUyVkMDAsICIKKwkJCQkgICIlZCBjb25maWcgUk9NIHJldHJpZXNcbiIsCisJCQkJICBkZXZpY2UtPmRldmljZS5idXNfaWQsCisJCQkJICBkZXZpY2UtPmNvbmZpZ19yb21bM10sIGRldmljZS0+Y29uZmlnX3JvbVs0XSwKKwkJCQkgIDEgPDwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQkJICBkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyk7CisJCWVsc2UKKwkJCWZ3X25vdGlmeSgiY3JlYXRlZCBkZXZpY2UgJXM6IEdVSUQgJTA4eCUwOHgsIFMlZDAwXG4iLAorCQkJCSAgZGV2aWNlLT5kZXZpY2UuYnVzX2lkLAorCQkJCSAgZGV2aWNlLT5jb25maWdfcm9tWzNdLCBkZXZpY2UtPmNvbmZpZ19yb21bNF0sCisJCQkJICAxIDw8IGRldmljZS0+bWF4X3NwZWVkKTsKKwkJZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMgPSAwOworCX0KIAogCS8qCiAJICogUmVzY2hlZHVsZSB0aGUgSVJNIHdvcmsgaWYgd2UganVzdCBmaW5pc2hlZCByZWFkaW5nIHRoZQpAQCAtNzM3LDExICs3OTAsMTMgQEAKIAlyZXR1cm47CiAKICBlcnJvcl93aXRoX2NkZXY6Ci0JZG93bl93cml0ZSgmaWRyX3J3c2VtKTsKKwlkb3duX3dyaXRlKCZmd19kZXZpY2VfcndzZW0pOwogCWlkcl9yZW1vdmUoJmZ3X2RldmljZV9pZHIsIG1pbm9yKTsKLQl1cF93cml0ZSgmaWRyX3J3c2VtKTsKKwl1cF93cml0ZSgmZndfZGV2aWNlX3J3c2VtKTsKICBlcnJvcjoKLQlwdXRfZGV2aWNlKCZkZXZpY2UtPmRldmljZSk7CisJZndfZGV2aWNlX3B1dChkZXZpY2UpOwkJLyogZndfZGV2aWNlX2lkcidzIHJlZmVyZW5jZSAqLworCisJcHV0X2RldmljZSgmZGV2aWNlLT5kZXZpY2UpOwkvKiBvdXIgcmVmZXJlbmNlICovCiB9CiAKIHN0YXRpYyBpbnQgdXBkYXRlX3VuaXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQpAQCAtNzY3LDYgKzgyMiwxMDYgQEAKIAlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldmljZS0+ZGV2aWNlLCBOVUxMLCB1cGRhdGVfdW5pdCk7CiB9CiAKK2VudW0geworCVJFUkVBRF9CSUJfRVJST1IsCisJUkVSRUFEX0JJQl9HT05FLAorCVJFUkVBRF9CSUJfVU5DSEFOR0VELAorCVJFUkVBRF9CSUJfQ0hBTkdFRCwKK307CisKKy8qIFJlcmVhZCBhbmQgY29tcGFyZSBidXMgaW5mbyBibG9jayBhbmQgaGVhZGVyIG9mIHJvb3QgZGlyZWN0b3J5ICovCitzdGF0aWMgaW50IHJlcmVhZF9idXNfaW5mb19ibG9jayhzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uKQoreworCXUzMiBxOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlpZiAocmVhZF9yb20oZGV2aWNlLCBnZW5lcmF0aW9uLCBpLCAmcSkgIT0gUkNPREVfQ09NUExFVEUpCisJCQlyZXR1cm4gUkVSRUFEX0JJQl9FUlJPUjsKKworCQlpZiAoaSA9PSAwICYmIHEgPT0gMCkKKwkJCXJldHVybiBSRVJFQURfQklCX0dPTkU7CisKKwkJaWYgKGkgPiBkZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoIHx8IHEgIT0gZGV2aWNlLT5jb25maWdfcm9tW2ldKQorCQkJcmV0dXJuIFJFUkVBRF9CSUJfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gUkVSRUFEX0JJQl9VTkNIQU5HRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGZ3X2RldmljZV9yZWZyZXNoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2RldmljZSwgd29yay53b3JrKTsKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGRldmljZS0+Y2FyZDsKKwlpbnQgbm9kZV9pZCA9IGRldmljZS0+bm9kZV9pZDsKKworCXN3aXRjaCAocmVyZWFkX2J1c19pbmZvX2Jsb2NrKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKSkgeworCWNhc2UgUkVSRUFEX0JJQl9FUlJPUjoKKwkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzIDwgTUFYX1JFVFJJRVMgLyAyICYmCisJCSAgICBhdG9taWNfcmVhZCgmZGV2aWNlLT5zdGF0ZSkgPT0gRldfREVWSUNFX0lOSVRJQUxJWklORykgeworCQkJZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMrKzsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCBSRVRSWV9ERUxBWSAvIDIpOworCisJCQlyZXR1cm47CisJCX0KKwkJZ290byBnaXZlX3VwOworCisJY2FzZSBSRVJFQURfQklCX0dPTkU6CisJCWdvdG8gZ29uZTsKKworCWNhc2UgUkVSRUFEX0JJQl9VTkNIQU5HRUQ6CisJCWlmIChhdG9taWNfY21weGNoZygmZGV2aWNlLT5zdGF0ZSwKKwkJCSAgICBGV19ERVZJQ0VfSU5JVElBTElaSU5HLAorCQkJICAgIEZXX0RFVklDRV9SVU5OSU5HKSA9PSBGV19ERVZJQ0VfU0hVVERPV04pCisJCQlnb3RvIGdvbmU7CisKKwkJZndfZGV2aWNlX3VwZGF0ZSh3b3JrKTsKKwkJZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMgPSAwOworCQlnb3RvIG91dDsKKworCWNhc2UgUkVSRUFEX0JJQl9DSEFOR0VEOgorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFNvbWV0aGluZyBjaGFuZ2VkLiAgV2Uga2VlcCB0aGluZ3Mgc2ltcGxlIGFuZCBkb24ndCBpbnZlc3RpZ2F0ZQorCSAqIGZ1cnRoZXIuICBXZSBqdXN0IGRlc3Ryb3kgYWxsIHByZXZpb3VzIHVuaXRzIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICovCisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXZpY2UtPmRldmljZSwgTlVMTCwgc2h1dGRvd25fdW5pdCk7CisKKwlpZiAocmVhZF9idXNfaW5mb19ibG9jayhkZXZpY2UsIGRldmljZS0+Z2VuZXJhdGlvbikgPCAwKSB7CisJCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA8IE1BWF9SRVRSSUVTICYmCisJCSAgICBhdG9taWNfcmVhZCgmZGV2aWNlLT5zdGF0ZSkgPT0gRldfREVWSUNFX0lOSVRJQUxJWklORykgeworCQkJZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMrKzsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCBSRVRSWV9ERUxBWSk7CisKKwkJCXJldHVybjsKKwkJfQorCQlnb3RvIGdpdmVfdXA7CisJfQorCisJY3JlYXRlX3VuaXRzKGRldmljZSk7CisKKwlpZiAoYXRvbWljX2NtcHhjaGcoJmRldmljZS0+c3RhdGUsCisJCSAgICBGV19ERVZJQ0VfSU5JVElBTElaSU5HLAorCQkgICAgRldfREVWSUNFX1JVTk5JTkcpID09IEZXX0RFVklDRV9TSFVURE9XTikKKwkJZ290byBnb25lOworCisJZndfbm90aWZ5KCJyZWZyZXNoZWQgZGV2aWNlICVzXG4iLCBkZXZpY2UtPmRldmljZS5idXNfaWQpOworCWRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzID0gMDsKKwlnb3RvIG91dDsKKworIGdpdmVfdXA6CisJZndfbm90aWZ5KCJnaXZpbmcgdXAgb24gcmVmcmVzaCBvZiBkZXZpY2UgJXNcbiIsIGRldmljZS0+ZGV2aWNlLmJ1c19pZCk7CisgZ29uZToKKwlhdG9taWNfc2V0KCZkZXZpY2UtPnN0YXRlLCBGV19ERVZJQ0VfU0hVVERPV04pOworCWZ3X2RldmljZV9zaHV0ZG93bih3b3JrKTsKKyBvdXQ6CisJaWYgKG5vZGVfaWQgPT0gY2FyZC0+cm9vdF9ub2RlLT5ub2RlX2lkKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNhcmQtPndvcmssIDApOworfQorCiB2b2lkIGZ3X25vZGVfZXZlbnQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpub2RlLCBpbnQgZXZlbnQpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOwpAQCAtNzc2LDcgKzkzMSw3IEBACiAJY2FzZSBGV19OT0RFX0xJTktfT046CiAJCWlmICghbm9kZS0+bGlua19vbikKIAkJCWJyZWFrOwotCisgY3JlYXRlOgogCQlkZXZpY2UgPSBremFsbG9jKHNpemVvZigqZGV2aWNlKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJCWJyZWFrOwpAQCAtNzkxLDcgKzk0Niw4IEBACiAJCSAqLwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmZGV2aWNlLT5kZXZpY2UpOwogCQlhdG9taWNfc2V0KCZkZXZpY2UtPnN0YXRlLCBGV19ERVZJQ0VfSU5JVElBTElaSU5HKTsKLQkJZGV2aWNlLT5jYXJkID0gZndfY2FyZF9nZXQoY2FyZCk7CisJCWF0b21pY19pbmMoJmNhcmQtPmRldmljZV9jb3VudCk7CisJCWRldmljZS0+Y2FyZCA9IGNhcmQ7CiAJCWRldmljZS0+bm9kZSA9IGZ3X25vZGVfZ2V0KG5vZGUpOwogCQlkZXZpY2UtPm5vZGVfaWQgPSBub2RlLT5ub2RlX2lkOwogCQlkZXZpY2UtPmdlbmVyYXRpb24gPSBjYXJkLT5nZW5lcmF0aW9uOwpAQCAtODE0LDYgKzk3MCwyMyBAQAogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywgSU5JVElBTF9ERUxBWSk7CiAJCWJyZWFrOwogCisJY2FzZSBGV19OT0RFX0lOSVRJQVRFRF9SRVNFVDoKKwkJZGV2aWNlID0gbm9kZS0+ZGF0YTsKKwkJaWYgKGRldmljZSA9PSBOVUxMKQorCQkJZ290byBjcmVhdGU7CisKKwkJZGV2aWNlLT5ub2RlX2lkID0gbm9kZS0+bm9kZV9pZDsKKwkJc21wX3dtYigpOyAgLyogdXBkYXRlIG5vZGVfaWQgYmVmb3JlIGdlbmVyYXRpb24gKi8KKwkJZGV2aWNlLT5nZW5lcmF0aW9uID0gY2FyZC0+Z2VuZXJhdGlvbjsKKwkJaWYgKGF0b21pY19jbXB4Y2hnKCZkZXZpY2UtPnN0YXRlLAorCQkJICAgIEZXX0RFVklDRV9SVU5OSU5HLAorCQkJICAgIEZXX0RFVklDRV9JTklUSUFMSVpJTkcpID09IEZXX0RFVklDRV9SVU5OSU5HKSB7CisJCQlQUkVQQVJFX0RFTEFZRURfV09SSygmZGV2aWNlLT53b3JrLCBmd19kZXZpY2VfcmVmcmVzaCk7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywKKwkJCQlub2RlID09IGNhcmQtPmxvY2FsX25vZGUgPyAwIDogSU5JVElBTF9ERUxBWSk7CisJCX0KKwkJYnJlYWs7CisKIAljYXNlIEZXX05PREVfVVBEQVRFRDoKIAkJaWYgKCFub2RlLT5saW5rX29uIHx8IG5vZGUtPmRhdGEgPT0gTlVMTCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuaCBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmgKaW5kZXggMDg1NGZlMi4uNWYxMzFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuaAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogZW51bSBmd19kZXZpY2Vfc3RhdGUgewpAQCAtNDYsNiArNDcsMTEgQEAKICAqIGZ3X2RldmljZS5ub2RlX2lkIGlzIGd1YXJhbnRlZWQgdG8gYmUgY3VycmVudCB0b28uCiAgKgogICogVGhlIHNhbWUgYXBwbGllcyB0byBmd19kZXZpY2UuY2FyZC0+bm9kZV9pZCB2cy4gZndfZGV2aWNlLmdlbmVyYXRpb24uCisgKgorICogZndfZGV2aWNlLmNvbmZpZ19yb20gYW5kIGZ3X2RldmljZS5jb25maWdfcm9tX2xlbmd0aCBtYXkgYmUgYWNjZXNzZWQgZHVyaW5nCisgKiB0aGUgbGlmZXRpbWUgb2YgYW55IGZ3X3VuaXQgYmVsb25naW5nIHRvIHRoZSBmd19kZXZpY2UsIGJlZm9yZSBkZXZpY2VfZGVsKCkKKyAqIHdhcyBjYWxsZWQgb24gdGhlIGxhc3QgZndfdW5pdC4gIEFsdGVybmF0aXZlbHksIHRoZXkgbWF5IGJlIGFjY2Vzc2VkIHdoaWxlCisgKiBob2xkaW5nIGZ3X2RldmljZV9yd3NlbS4KICAqLwogc3RydWN0IGZ3X2RldmljZSB7CiAJYXRvbWljX3Qgc3RhdGU7CkBAIC01Myw2ICs1OSw3IEBACiAJaW50IG5vZGVfaWQ7CiAJaW50IGdlbmVyYXRpb247CiAJdW5zaWduZWQgbWF4X3NwZWVkOworCWJvb2wgY21jOwogCXN0cnVjdCBmd19jYXJkICpjYXJkOwogCXN0cnVjdCBkZXZpY2UgZGV2aWNlOwogCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKQEAgLTY0LDQwICs3MSw2MyBAQAogCXN0cnVjdCBmd19hdHRyaWJ1dGVfZ3JvdXAgYXR0cmlidXRlX2dyb3VwOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfZGV2aWNlICoKLWZ3X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmd19kZXZpY2UgKmZ3X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBmd19kZXZpY2UsIGRldmljZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1md19kZXZpY2VfaXNfc2h1dGRvd24oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQorc3RhdGljIGlubGluZSBpbnQgZndfZGV2aWNlX2lzX3NodXRkb3duKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSkKIHsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmRldmljZS0+c3RhdGUpID09IEZXX0RFVklDRV9TSFVURE9XTjsKIH0KIAotc3RydWN0IGZ3X2RldmljZSAqZndfZGV2aWNlX2dldChzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOwotdm9pZCBmd19kZXZpY2VfcHV0KHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBmd19kZXZpY2UgKmZ3X2RldmljZV9nZXQoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQoreworCWdldF9kZXZpY2UoJmRldmljZS0+ZGV2aWNlKTsKKworCXJldHVybiBkZXZpY2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmd19kZXZpY2VfcHV0KHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSkKK3sKKwlwdXRfZGV2aWNlKCZkZXZpY2UtPmRldmljZSk7Cit9CisKK3N0cnVjdCBmd19kZXZpY2UgKmZ3X2RldmljZV9nZXRfYnlfZGV2dChkZXZfdCBkZXZ0KTsKIGludCBmd19kZXZpY2VfZW5hYmxlX3BoeXNfZG1hKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSk7CiAKIHZvaWQgZndfZGV2aWNlX2NkZXZfdXBkYXRlKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSk7CiB2b2lkIGZ3X2RldmljZV9jZGV2X3JlbW92ZShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOwogCi1zdHJ1Y3QgZndfZGV2aWNlICpmd19kZXZpY2VfZnJvbV9kZXZ0KGRldl90IGRldnQpOworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgZndfZGV2aWNlX3J3c2VtOwogZXh0ZXJuIGludCBmd19jZGV2X21ham9yOwogCisvKgorICogZndfdW5pdC5kaXJlY3RvcnkgbXVzdCBub3QgYmUgYWNjZXNzZWQgYWZ0ZXIgZGV2aWNlX2RlbCgmZndfdW5pdC5kZXZpY2UpLgorICovCiBzdHJ1Y3QgZndfdW5pdCB7CiAJc3RydWN0IGRldmljZSBkZXZpY2U7CiAJdTMyICpkaXJlY3Rvcnk7CiAJc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCBhdHRyaWJ1dGVfZ3JvdXA7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmd191bml0ICoKLWZ3X3VuaXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfdW5pdCAqZndfdW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBmd191bml0LCBkZXZpY2UpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmd191bml0ICpmd191bml0X2dldChzdHJ1Y3QgZndfdW5pdCAqdW5pdCkKK3sKKwlnZXRfZGV2aWNlKCZ1bml0LT5kZXZpY2UpOworCisJcmV0dXJuIHVuaXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmd191bml0X3B1dChzdHJ1Y3QgZndfdW5pdCAqdW5pdCkKK3sKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXZpY2UpOworfQorCiAjZGVmaW5lIENTUl9PRkZTRVQJMHg0MAogI2RlZmluZSBDU1JfTEVBRgkweDgwCiAjZGVmaW5lIENTUl9ESVJFQ1RPUlkJMHhjMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1pc28uYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctaXNvLmMKaW5kZXggMmI2NDBlOS4uYmNiZTc5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1pc28uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWlzby5jCkBAIC0xMjYsNyArMTI2LDYgQEAKIAogCXJldHVybiBjdHg7CiB9Ci1FWFBPUlRfU1lNQk9MKGZ3X2lzb19jb250ZXh0X2NyZWF0ZSk7CiAKIHZvaWQgZndfaXNvX2NvbnRleHRfZGVzdHJveShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCkKIHsKQEAgLTEzNCwxNCArMTMzLDEyIEBACiAKIAljYXJkLT5kcml2ZXItPmZyZWVfaXNvX2NvbnRleHQoY3R4KTsKIH0KLUVYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfZGVzdHJveSk7CiAKIGludAogZndfaXNvX2NvbnRleHRfc3RhcnQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKQogewogCXJldHVybiBjdHgtPmNhcmQtPmRyaXZlci0+c3RhcnRfaXNvKGN0eCwgY3ljbGUsIHN5bmMsIHRhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChmd19pc29fY29udGV4dF9zdGFydCk7CiAKIGludAogZndfaXNvX2NvbnRleHRfcXVldWUoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCkBAIC0xNTMsMTEgKzE1MCw5IEBACiAKIAlyZXR1cm4gY2FyZC0+ZHJpdmVyLT5xdWV1ZV9pc28oY3R4LCBwYWNrZXQsIGJ1ZmZlciwgcGF5bG9hZCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGZ3X2lzb19jb250ZXh0X3F1ZXVlKTsKIAogaW50CiBmd19pc29fY29udGV4dF9zdG9wKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KQogewogCXJldHVybiBjdHgtPmNhcmQtPmRyaXZlci0+c3RvcF9pc28oY3R4KTsKIH0KLUVYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfc3RvcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LW9oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCmluZGV4IDdlYmFkM2MuLjRmMDJjNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCkBAIC0yNywxMiArMjcsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgorI2VuZGlmCisKICNpbmNsdWRlICJmdy1vaGNpLmgiCiAjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKIApAQCAtMTczLDggKzE3OCwxMCBAQAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBidXNfcmVzZXRfdGFza2xldDsKIAlpbnQgbm9kZV9pZDsKIAlpbnQgZ2VuZXJhdGlvbjsKLQlpbnQgcmVxdWVzdF9nZW5lcmF0aW9uOworCWludCByZXF1ZXN0X2dlbmVyYXRpb247CS8qIGZvciB0aW1lc3RhbXBpbmcgaW5jb21pbmcgcmVxdWVzdHMgKi8KIAl1MzIgYnVzX3NlY29uZHM7CisJYm9vbCBvbGRfdW5pbm9ydGg7CisJYm9vbCBidXNfcmVzZXRfcGFja2V0X3F1aXJrOwogCiAJLyoKIAkgKiBTcGlubG9jayBmb3IgYWNjZXNzaW5nIGZ3X29oY2kgZGF0YS4gIE5ldmVyIGNhbGwgb3V0IG9mCkBAIC0yMzIsNiArMjM5LDE5NiBAQAogCiBzdGF0aWMgY2hhciBvaGNpX2RyaXZlcl9uYW1lW10gPSBLQlVJTERfTU9ETkFNRTsKIAorI2lmZGVmIENPTkZJR19GSVJFV0lSRV9PSENJX0RFQlVHCisKKyNkZWZpbmUgT0hDSV9QQVJBTV9ERUJVR19BVF9BUgkJMQorI2RlZmluZSBPSENJX1BBUkFNX0RFQlVHX1NFTEZJRFMJMgorI2RlZmluZSBPSENJX1BBUkFNX0RFQlVHX0lSUVMJCTQKKyNkZWZpbmUgT0hDSV9QQVJBTV9ERUJVR19CVVNSRVNFVFMJOCAvKiBvbmx5IGVmZmVjdGl2ZSBiZWZvcmUgY2hpcCBpbml0ICovCisKK3N0YXRpYyBpbnQgcGFyYW1fZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHBhcmFtX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlZlcmJvc2UgbG9nZ2luZyAoZGVmYXVsdCA9IDAiCisJIiwgQVQvQVIgZXZlbnRzID0gIglfX3N0cmluZ2lmeShPSENJX1BBUkFNX0RFQlVHX0FUX0FSKQorCSIsIHNlbGYtSURzID0gIgkJX19zdHJpbmdpZnkoT0hDSV9QQVJBTV9ERUJVR19TRUxGSURTKQorCSIsIElSUXMgPSAiCQlfX3N0cmluZ2lmeShPSENJX1BBUkFNX0RFQlVHX0lSUVMpCisJIiwgYnVzUmVzZXQgZXZlbnRzID0gIglfX3N0cmluZ2lmeShPSENJX1BBUkFNX0RFQlVHX0JVU1JFU0VUUykKKwkiLCBvciBhIGNvbWJpbmF0aW9uLCBvciBhbGwgPSAtMSkiKTsKKworc3RhdGljIHZvaWQgbG9nX2lycXModTMyIGV2dCkKK3sKKwlpZiAobGlrZWx5KCEocGFyYW1fZGVidWcgJgorCQkJKE9IQ0lfUEFSQU1fREVCVUdfSVJRUyB8IE9IQ0lfUEFSQU1fREVCVUdfQlVTUkVTRVRTKSkpKQorCQlyZXR1cm47CisKKwlpZiAoIShwYXJhbV9kZWJ1ZyAmIE9IQ0lfUEFSQU1fREVCVUdfSVJRUykgJiYKKwkgICAgIShldnQgJiBPSENJMTM5NF9idXNSZXNldCkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IElSUSAiCisJICAgICAgICIlMDh4JXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXNcbiIsCisJICAgICAgIGV2dCwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfc2VsZklEQ29tcGxldGUJPyAiIHNlbGZJRCIJCTogIiIsCisJICAgICAgIGV2dCAmIE9IQ0kxMzk0X1JRUGt0CQk/ICIgQVJfcmVxIgkJOiAiIiwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfUlNQa3QJCT8gIiBBUl9yZXNwIgkJOiAiIiwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfcmVxVHhDb21wbGV0ZQk/ICIgQVRfcmVxIgkJOiAiIiwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUJPyAiIEFUX3Jlc3AiCQk6ICIiLAorCSAgICAgICBldnQgJiBPSENJMTM5NF9pc29jaFJ4CQk/ICIgSVIiCQkJOiAiIiwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfaXNvY2hUeAkJPyAiIElUIgkJCTogIiIsCisJICAgICAgIGV2dCAmIE9IQ0kxMzk0X3Bvc3RlZFdyaXRlRXJyCT8gIiBwb3N0ZWRXcml0ZUVyciIJOiAiIiwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfY3ljbGVUb29Mb25nCT8gIiBjeWNsZVRvb0xvbmciCTogIiIsCisJICAgICAgIGV2dCAmIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzCT8gIiBjeWNsZTY0U2Vjb25kcyIJOiAiIiwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbAk/ICIgcmVnQWNjZXNzRmFpbCIJOiAiIiwKKwkgICAgICAgZXZ0ICYgT0hDSTEzOTRfYnVzUmVzZXQJCT8gIiBidXNSZXNldCIJCTogIiIsCisJICAgICAgIGV2dCAmIH4oT0hDSTEzOTRfc2VsZklEQ29tcGxldGUgfCBPSENJMTM5NF9SUVBrdCB8CisJCSAgICAgICBPSENJMTM5NF9SU1BrdCB8IE9IQ0kxMzk0X3JlcVR4Q29tcGxldGUgfAorCQkgICAgICAgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUgfCBPSENJMTM5NF9pc29jaFJ4IHwKKwkJICAgICAgIE9IQ0kxMzk0X2lzb2NoVHggfCBPSENJMTM5NF9wb3N0ZWRXcml0ZUVyciB8CisJCSAgICAgICBPSENJMTM5NF9jeWNsZVRvb0xvbmcgfCBPSENJMTM5NF9jeWNsZTY0U2Vjb25kcyB8CisJCSAgICAgICBPSENJMTM5NF9yZWdBY2Nlc3NGYWlsIHwgT0hDSTEzOTRfYnVzUmVzZXQpCisJCQkJCQk/ICIgPyIJCQk6ICIiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNwZWVkW10gPSB7CisJWzBdID0gIlMxMDAiLCBbMV0gPSAiUzIwMCIsIFsyXSA9ICJTNDAwIiwgICAgWzNdID0gImJldGEiLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICpwb3dlcltdID0geworCVswXSA9ICIrMFciLCAgWzFdID0gIisxNVciLCBbMl0gPSAiKzMwVyIsICAgIFszXSA9ICIrNDVXIiwKKwlbNF0gPSAiLTNXIiwgIFs1XSA9ICIgP1ciLCAgWzZdID0gIi0zLi4tNlciLCBbN10gPSAiLTMuLi0xMFciLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIHBvcnRbXSA9IHsgJy4nLCAnLScsICdwJywgJ2MnLCB9OworCitzdGF0aWMgY2hhciBfcCh1MzIgKnMsIGludCBzaGlmdCkKK3sKKwlyZXR1cm4gcG9ydFsqcyA+PiBzaGlmdCAmIDNdOworfQorCitzdGF0aWMgdm9pZCBsb2dfc2VsZmlkcyhpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKnMpCit7CisJaWYgKGxpa2VseSghKHBhcmFtX2RlYnVnICYgT0hDSV9QQVJBTV9ERUJVR19TRUxGSURTKSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6ICVkIHNlbGZJRHMsIGdlbmVyYXRpb24gJWQsICIKKwkgICAgICAgImxvY2FsIG5vZGUgSUQgJTA0eFxuIiwgc2VsZl9pZF9jb3VudCwgZ2VuZXJhdGlvbiwgbm9kZV9pZCk7CisKKwlmb3IgKDsgc2VsZl9pZF9jb3VudC0tOyArK3MpCisJCWlmICgoKnMgJiAxIDw8IDIzKSA9PSAwKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInNlbGZJRCAwOiAlMDh4LCBwaHkgJWQgWyVjJWMlY10gIgorCQkJICAgICAgICIlcyBnYz0lZCAlcyAlcyVzJXNcbiIsCisJCQkgICAgICAgKnMsICpzID4+IDI0ICYgNjMsIF9wKHMsIDYpLCBfcChzLCA0KSwgX3AocywgMiksCisJCQkgICAgICAgc3BlZWRbKnMgPj4gMTQgJiAzXSwgKnMgPj4gMTYgJiA2MywKKwkJCSAgICAgICBwb3dlclsqcyA+PiA4ICYgN10sICpzID4+IDIyICYgMSA/ICJMIiA6ICIiLAorCQkJICAgICAgICpzID4+IDExICYgMSA/ICJjIiA6ICIiLCAqcyAmIDIgPyAiaSIgOiAiIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzZWxmSUQgbjogJTA4eCwgcGh5ICVkICIKKwkJCSAgICAgICAiWyVjJWMlYyVjJWMlYyVjJWNdXG4iLAorCQkJICAgICAgICpzLCAqcyA+PiAyNCAmIDYzLAorCQkJICAgICAgIF9wKHMsIDE2KSwgX3AocywgMTQpLCBfcChzLCAxMiksIF9wKHMsIDEwKSwKKwkJCSAgICAgICBfcChzLCAgOCksIF9wKHMsICA2KSwgX3AocywgIDQpLCBfcChzLCAgMikpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZXZ0c1tdID0geworCVsweDAwXSA9ICJldnRfbm9fc3RhdHVzIiwJWzB4MDFdID0gIi1yZXNlcnZlZC0iLAorCVsweDAyXSA9ICJldnRfbG9uZ19wYWNrZXQiLAlbMHgwM10gPSAiZXZ0X21pc3NpbmdfYWNrIiwKKwlbMHgwNF0gPSAiZXZ0X3VuZGVycnVuIiwJWzB4MDVdID0gImV2dF9vdmVycnVuIiwKKwlbMHgwNl0gPSAiZXZ0X2Rlc2NyaXB0b3JfcmVhZCIsCVsweDA3XSA9ICJldnRfZGF0YV9yZWFkIiwKKwlbMHgwOF0gPSAiZXZ0X2RhdGFfd3JpdGUiLAlbMHgwOV0gPSAiZXZ0X2J1c19yZXNldCIsCisJWzB4MGFdID0gImV2dF90aW1lb3V0IiwJCVsweDBiXSA9ICJldnRfdGNvZGVfZXJyIiwKKwlbMHgwY10gPSAiLXJlc2VydmVkLSIsCQlbMHgwZF0gPSAiLXJlc2VydmVkLSIsCisJWzB4MGVdID0gImV2dF91bmtub3duIiwJCVsweDBmXSA9ICJldnRfZmx1c2hlZCIsCisJWzB4MTBdID0gIi1yZXNlcnZlZC0iLAkJWzB4MTFdID0gImFja19jb21wbGV0ZSIsCisJWzB4MTJdID0gImFja19wZW5kaW5nICIsCVsweDEzXSA9ICItcmVzZXJ2ZWQtIiwKKwlbMHgxNF0gPSAiYWNrX2J1c3lfWCIsCQlbMHgxNV0gPSAiYWNrX2J1c3lfQSIsCisJWzB4MTZdID0gImFja19idXN5X0IiLAkJWzB4MTddID0gIi1yZXNlcnZlZC0iLAorCVsweDE4XSA9ICItcmVzZXJ2ZWQtIiwJCVsweDE5XSA9ICItcmVzZXJ2ZWQtIiwKKwlbMHgxYV0gPSAiLXJlc2VydmVkLSIsCQlbMHgxYl0gPSAiYWNrX3RhcmR5IiwKKwlbMHgxY10gPSAiLXJlc2VydmVkLSIsCQlbMHgxZF0gPSAiYWNrX2RhdGFfZXJyb3IiLAorCVsweDFlXSA9ICJhY2tfdHlwZV9lcnJvciIsCVsweDFmXSA9ICItcmVzZXJ2ZWQtIiwKKwlbMHgyMF0gPSAicGVuZGluZy9jYW5jZWxsZWQiLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICp0Y29kZXNbXSA9IHsKKwlbMHgwXSA9ICJRVyByZXEiLAkJWzB4MV0gPSAiQlcgcmVxIiwKKwlbMHgyXSA9ICJXIHJlc3AiLAkJWzB4M10gPSAiLXJlc2VydmVkLSIsCisJWzB4NF0gPSAiUVIgcmVxIiwJCVsweDVdID0gIkJSIHJlcSIsCisJWzB4Nl0gPSAiUVIgcmVzcCIsCQlbMHg3XSA9ICJCUiByZXNwIiwKKwlbMHg4XSA9ICJjeWNsZSBzdGFydCIsCQlbMHg5XSA9ICJMayByZXEiLAorCVsweGFdID0gImFzeW5jIHN0cmVhbSBwYWNrZXQiLAlbMHhiXSA9ICJMayByZXNwIiwKKwlbMHhjXSA9ICItcmVzZXJ2ZWQtIiwJCVsweGRdID0gIi1yZXNlcnZlZC0iLAorCVsweGVdID0gImxpbmsgaW50ZXJuYWwiLAlbMHhmXSA9ICItcmVzZXJ2ZWQtIiwKK307CitzdGF0aWMgY29uc3QgY2hhciAqcGh5c1tdID0geworCVsweDBdID0gInBoeSBjb25maWcgcGFja2V0IiwJWzB4MV0gPSAibGluay1vbiBwYWNrZXQiLAorCVsweDJdID0gInNlbGYtaWQgcGFja2V0IiwJWzB4M10gPSAiLXJlc2VydmVkLSIsCit9OworCitzdGF0aWMgdm9pZCBsb2dfYXJfYXRfZXZlbnQoY2hhciBkaXIsIGludCBzcGVlZCwgdTMyICpoZWFkZXIsIGludCBldnQpCit7CisJaW50IHRjb2RlID0gaGVhZGVyWzBdID4+IDQgJiAweGY7CisJY2hhciBzcGVjaWZpY1sxMl07CisKKwlpZiAobGlrZWx5KCEocGFyYW1fZGVidWcgJiBPSENJX1BBUkFNX0RFQlVHX0FUX0FSKSkpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShldnQgPj0gQVJSQVlfU0laRShldnRzKSkpCisJCQlldnQgPSAweDFmOworCisJaWYgKGV2dCA9PSBPSENJMTM5NF9ldnRfYnVzX3Jlc2V0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJBJWMgZXZ0X2J1c19yZXNldCwgZ2VuZXJhdGlvbiAlZFxuIiwKKwkJICAgICAgIGRpciwgKGhlYWRlclsyXSA+PiAxNikgJiAweGZmKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChoZWFkZXJbMF0gPT0gfmhlYWRlclsxXSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQSVjICVzLCAlcywgJTA4eFxuIiwKKwkJICAgICAgIGRpciwgZXZ0c1tldnRdLCBwaHlzW2hlYWRlclswXSA+PiAzMCAmIDB4M10sCisJCSAgICAgICBoZWFkZXJbMF0pOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoICh0Y29kZSkgeworCWNhc2UgMHgwOiBjYXNlIDB4NjogY2FzZSAweDg6CisJCXNucHJpbnRmKHNwZWNpZmljLCBzaXplb2Yoc3BlY2lmaWMpLCAiID0gJTA4eCIsCisJCQkgYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKWhlYWRlclszXSkpOworCQlicmVhazsKKwljYXNlIDB4MTogY2FzZSAweDU6IGNhc2UgMHg3OiBjYXNlIDB4OTogY2FzZSAweGI6CisJCXNucHJpbnRmKHNwZWNpZmljLCBzaXplb2Yoc3BlY2lmaWMpLCAiICV4LCV4IiwKKwkJCSBoZWFkZXJbM10gPj4gMTYsIGhlYWRlclszXSAmIDB4ZmZmZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwZWNpZmljWzBdID0gJ1wwJzsKKwl9CisKKwlzd2l0Y2ggKHRjb2RlKSB7CisJY2FzZSAweGU6IGNhc2UgMHhhOgorCQlwcmludGsoS0VSTl9ERUJVRyAiQSVjICVzLCAlc1xuIiwKKwkJICAgICAgIGRpciwgZXZ0c1tldnRdLCB0Y29kZXNbdGNvZGVdKTsKKwkJYnJlYWs7CisJY2FzZSAweDA6IGNhc2UgMHgxOiBjYXNlIDB4NDogY2FzZSAweDU6IGNhc2UgMHg5OgorCQlwcmludGsoS0VSTl9ERUJVRyAiQSVjIHNwZCAleCB0bCAlMDJ4LCAiCisJCSAgICAgICAiJTA0eCAtPiAlMDR4LCAlcywgIgorCQkgICAgICAgIiVzLCAlMDR4JTA4eCVzXG4iLAorCQkgICAgICAgZGlyLCBzcGVlZCwgaGVhZGVyWzBdID4+IDEwICYgMHgzZiwKKwkJICAgICAgIGhlYWRlclsxXSA+PiAxNiwgaGVhZGVyWzBdID4+IDE2LCBldnRzW2V2dF0sCisJCSAgICAgICB0Y29kZXNbdGNvZGVdLCBoZWFkZXJbMV0gJiAweGZmZmYsIGhlYWRlclsyXSwgc3BlY2lmaWMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiQSVjIHNwZCAleCB0bCAlMDJ4LCAiCisJCSAgICAgICAiJTA0eCAtPiAlMDR4LCAlcywgIgorCQkgICAgICAgIiVzJXNcbiIsCisJCSAgICAgICBkaXIsIHNwZWVkLCBoZWFkZXJbMF0gPj4gMTAgJiAweDNmLAorCQkgICAgICAgaGVhZGVyWzFdID4+IDE2LCBoZWFkZXJbMF0gPj4gMTYsIGV2dHNbZXZ0XSwKKwkJICAgICAgIHRjb2Rlc1t0Y29kZV0sIHNwZWNpZmljKTsKKwl9Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgbG9nX2lycXMoZXZ0KQorI2RlZmluZSBsb2dfc2VsZmlkcyhub2RlX2lkLCBnZW5lcmF0aW9uLCBzZWxmX2lkX2NvdW50LCBzaWQpCisjZGVmaW5lIGxvZ19hcl9hdF9ldmVudChkaXIsIHNwZWVkLCBoZWFkZXIsIGV2dCkKKworI2VuZGlmIC8qIENPTkZJR19GSVJFV0lSRV9PSENJX0RFQlVHICovCisKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdfd3JpdGUoY29uc3Qgc3RydWN0IGZ3X29oY2kgKm9oY2ksIGludCBvZmZzZXQsIHUzMiBkYXRhKQogewogCXdyaXRlbChkYXRhLCBvaGNpLT5yZWdpc3RlcnMgKyBvZmZzZXQpOwpAQCAtMjc2LDE5ICs0NzMsMTMgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPm9oY2ktPmNhcmQuZGV2aWNlOwogCXN0cnVjdCBhcl9idWZmZXIgKmFiOwotCWRtYV9hZGRyX3QgYWJfYnVzOworCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIoYWJfYnVzKTsKIAlzaXplX3Qgb2Zmc2V0OwogCi0JYWIgPSAoc3RydWN0IGFyX2J1ZmZlciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7CisJYWIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsICZhYl9idXMsIEdGUF9BVE9NSUMpOwogCWlmIChhYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWFiX2J1cyA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYWIsIFBBR0VfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOwotCWlmIChkbWFfbWFwcGluZ19lcnJvcihhYl9idXMpKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYWIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAltZW1zZXQoJmFiLT5kZXNjcmlwdG9yLCAwLCBzaXplb2YoYWItPmRlc2NyaXB0b3IpKTsKIAlhYi0+ZGVzY3JpcHRvci5jb250cm9sICAgICAgICA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfSU5QVVRfTU9SRSB8CiAJCQkJCQkgICAgREVTQ1JJUFRPUl9TVEFUVVMgfApAQCAtMjk5LDggKzQ5MCw2IEBACiAJYWItPmRlc2NyaXB0b3IucmVzX2NvdW50ICAgICAgPSBjcHVfdG9fbGUxNihQQUdFX1NJWkUgLSBvZmZzZXQpOwogCWFiLT5kZXNjcmlwdG9yLmJyYW5jaF9hZGRyZXNzID0gMDsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgYWJfYnVzLCBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKLQogCWN0eC0+bGFzdF9idWZmZXItPmRlc2NyaXB0b3IuYnJhbmNoX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihhYl9idXMgfCAxKTsKIAljdHgtPmxhc3RfYnVmZmVyLT5uZXh0ID0gYWI7CiAJY3R4LT5sYXN0X2J1ZmZlciA9IGFiOwpAQCAtMzExLDE1ICs1MDAsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKKyNkZWZpbmUgY29uZF9sZTMyX3RvX2NwdSh2KSBcCisJKG9oY2ktPm9sZF91bmlub3J0aCA/IChfX2ZvcmNlIF9fdTMyKSh2KSA6IGxlMzJfdG9fY3B1KHYpKQorI2Vsc2UKKyNkZWZpbmUgY29uZF9sZTMyX3RvX2NwdSh2KSBsZTMyX3RvX2NwdSh2KQorI2VuZGlmCisKIHN0YXRpYyBfX2xlMzIgKmhhbmRsZV9hcl9wYWNrZXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgX19sZTMyICpidWZmZXIpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBjdHgtPm9oY2k7CiAJc3RydWN0IGZ3X3BhY2tldCBwOwogCXUzMiBzdGF0dXMsIGxlbmd0aCwgdGNvZGU7CisJaW50IGV2dDsKIAotCXAuaGVhZGVyWzBdID0gbGUzMl90b19jcHUoYnVmZmVyWzBdKTsKLQlwLmhlYWRlclsxXSA9IGxlMzJfdG9fY3B1KGJ1ZmZlclsxXSk7Ci0JcC5oZWFkZXJbMl0gPSBsZTMyX3RvX2NwdShidWZmZXJbMl0pOworCXAuaGVhZGVyWzBdID0gY29uZF9sZTMyX3RvX2NwdShidWZmZXJbMF0pOworCXAuaGVhZGVyWzFdID0gY29uZF9sZTMyX3RvX2NwdShidWZmZXJbMV0pOworCXAuaGVhZGVyWzJdID0gY29uZF9sZTMyX3RvX2NwdShidWZmZXJbMl0pOwogCiAJdGNvZGUgPSAocC5oZWFkZXJbMF0gPj4gNCkgJiAweDBmOwogCXN3aXRjaCAodGNvZGUpIHsKQEAgLTMzMSw3ICs1MjgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVENPREVfUkVBRF9CTE9DS19SRVFVRVNUIDoKLQkJcC5oZWFkZXJbM10gPSBsZTMyX3RvX2NwdShidWZmZXJbM10pOworCQlwLmhlYWRlclszXSA9IGNvbmRfbGUzMl90b19jcHUoYnVmZmVyWzNdKTsKIAkJcC5oZWFkZXJfbGVuZ3RoID0gMTY7CiAJCXAucGF5bG9hZF9sZW5ndGggPSAwOwogCQlicmVhazsKQEAgLTM0MCw3ICs1MzcsNyBAQAogCWNhc2UgVENPREVfUkVBRF9CTE9DS19SRVNQT05TRToKIAljYXNlIFRDT0RFX0xPQ0tfUkVRVUVTVDoKIAljYXNlIFRDT0RFX0xPQ0tfUkVTUE9OU0U6Ci0JCXAuaGVhZGVyWzNdID0gbGUzMl90b19jcHUoYnVmZmVyWzNdKTsKKwkJcC5oZWFkZXJbM10gPSBjb25kX2xlMzJfdG9fY3B1KGJ1ZmZlclszXSk7CiAJCXAuaGVhZGVyX2xlbmd0aCA9IDE2OwogCQlwLnBheWxvYWRfbGVuZ3RoID0gcC5oZWFkZXJbM10gPj4gMTY7CiAJCWJyZWFrOwpAQCAtMzU3LDEzICs1NTQsMTYgQEAKIAogCS8qIEZJWE1FOiBXaGF0IHRvIGRvIGFib3V0IGV2dF8qIGVycm9ycz8gKi8KIAlsZW5ndGggPSAocC5oZWFkZXJfbGVuZ3RoICsgcC5wYXlsb2FkX2xlbmd0aCArIDMpIC8gNDsKLQlzdGF0dXMgPSBsZTMyX3RvX2NwdShidWZmZXJbbGVuZ3RoXSk7CisJc3RhdHVzID0gY29uZF9sZTMyX3RvX2NwdShidWZmZXJbbGVuZ3RoXSk7CisJZXZ0ICAgID0gKHN0YXR1cyA+PiAxNikgJiAweDFmOwogCi0JcC5hY2sgICAgICAgID0gKChzdGF0dXMgPj4gMTYpICYgMHgxZikgLSAxNjsKKwlwLmFjayAgICAgICAgPSBldnQgLSAxNjsKIAlwLnNwZWVkICAgICAgPSAoc3RhdHVzID4+IDIxKSAmIDB4NzsKIAlwLnRpbWVzdGFtcCAgPSBzdGF0dXMgJiAweGZmZmY7CiAJcC5nZW5lcmF0aW9uID0gb2hjaS0+cmVxdWVzdF9nZW5lcmF0aW9uOwogCisJbG9nX2FyX2F0X2V2ZW50KCdSJywgcC5zcGVlZCwgcC5oZWFkZXIsIGV2dCk7CisKIAkvKgogCSAqIFRoZSBPSENJIGJ1cyByZXNldCBoYW5kbGVyIHN5bnRoZXNpemVzIGEgcGh5IHBhY2tldCB3aXRoCiAJICogdGhlIG5ldyBnZW5lcmF0aW9uIG51bWJlciB3aGVuIGEgYnVzIHJlc2V0IGhhcHBlbnMgKHNlZQpAQCAtMzcyLDE0ICs1NzIsMTkgQEAKIAkgKiBnZW5lcmF0aW9uLiAgV2Ugb25seSBuZWVkIHRoaXMgZm9yIHJlcXVlc3RzOyBmb3IgcmVzcG9uc2VzCiAJICogd2UgdXNlIHRoZSB1bmlxdWUgdGxhYmVsIGZvciBmaW5kaW5nIHRoZSBtYXRjaGluZwogCSAqIHJlcXVlc3QuCisJICoKKwkgKiBBbGFzIHNvbWUgY2hpcHMgc29tZXRpbWVzIGVtaXQgYnVzIHJlc2V0IHBhY2tldHMgd2l0aCBhCisJICogd3JvbmcgZ2VuZXJhdGlvbi4gIFdlIHNldCB0aGUgY29ycmVjdCBnZW5lcmF0aW9uIGZvciB0aGVzZQorCSAqIGF0IGEgc2xpZ2h0bHkgaW5jb3JyZWN0IHRpbWUgKGluIGJ1c19yZXNldF90YXNrbGV0KS4KIAkgKi8KLQotCWlmIChwLmFjayArIDE2ID09IDB4MDkpCi0JCW9oY2ktPnJlcXVlc3RfZ2VuZXJhdGlvbiA9IChidWZmZXJbMl0gPj4gMTYpICYgMHhmZjsKLQllbHNlIGlmIChjdHggPT0gJm9oY2ktPmFyX3JlcXVlc3RfY3R4KQorCWlmIChldnQgPT0gT0hDSTEzOTRfZXZ0X2J1c19yZXNldCkgeworCQlpZiAoIW9oY2ktPmJ1c19yZXNldF9wYWNrZXRfcXVpcmspCisJCQlvaGNpLT5yZXF1ZXN0X2dlbmVyYXRpb24gPSAocC5oZWFkZXJbMl0gPj4gMTYpICYgMHhmZjsKKwl9IGVsc2UgaWYgKGN0eCA9PSAmb2hjaS0+YXJfcmVxdWVzdF9jdHgpIHsKIAkJZndfY29yZV9oYW5kbGVfcmVxdWVzdCgmb2hjaS0+Y2FyZCwgJnApOwotCWVsc2UKKwl9IGVsc2UgewogCQlmd19jb3JlX2hhbmRsZV9yZXNwb25zZSgmb2hjaS0+Y2FyZCwgJnApOworCX0KIAogCXJldHVybiBidWZmZXIgKyBsZW5ndGggKyAxOwogfQpAQCAtMzk3LDYgKzYwMiw4IEBACiAKIAlpZiAoZC0+cmVzX2NvdW50ID09IDApIHsKIAkJc2l6ZV90IHNpemUsIHJlc3QsIG9mZnNldDsKKwkJZG1hX2FkZHJfdCBzdGFydF9idXM7CisJCXZvaWQgKnN0YXJ0OwogCiAJCS8qCiAJCSAqIFRoaXMgZGVzY3JpcHRvciBpcyBmaW5pc2hlZCBhbmQgd2UgbWF5IGhhdmUgYQpAQCAtNDA1LDExICs2MTIsOSBAQAogCQkgKi8KIAogCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgYXJfYnVmZmVyLCBkYXRhKTsKLQkJZG1hX3VubWFwX3NpbmdsZShvaGNpLT5jYXJkLmRldmljZSwKLQkJCWxlMzJfdG9fY3B1KGFiLT5kZXNjcmlwdG9yLmRhdGFfYWRkcmVzcykgLSBvZmZzZXQsCi0JCQlQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJc3RhcnQgPSBidWZmZXIgPSBhYjsKKwkJc3RhcnRfYnVzID0gbGUzMl90b19jcHUoYWItPmRlc2NyaXB0b3IuZGF0YV9hZGRyZXNzKSAtIG9mZnNldDsKIAotCQlidWZmZXIgPSBhYjsKIAkJYWIgPSBhYi0+bmV4dDsKIAkJZCA9ICZhYi0+ZGVzY3JpcHRvcjsKIAkJc2l6ZSA9IGJ1ZmZlciArIFBBR0VfU0laRSAtIGN0eC0+cG9pbnRlcjsKQEAgLTQyMyw3ICs2MjgsOCBAQAogCQl3aGlsZSAoYnVmZmVyIDwgZW5kKQogCQkJYnVmZmVyID0gaGFuZGxlX2FyX3BhY2tldChjdHgsIGJ1ZmZlcik7CiAKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7CisJCWRtYV9mcmVlX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBQQUdFX1NJWkUsCisJCQkJICBzdGFydCwgc3RhcnRfYnVzKTsKIAkJYXJfY29udGV4dF9hZGRfcGFnZShjdHgpOwogCX0gZWxzZSB7CiAJCWJ1ZmZlciA9IGN0eC0+cG9pbnRlcjsKQEAgLTUzMiw3ICs3MzgsNyBAQAogY29udGV4dF9hZGRfYnVmZmVyKHN0cnVjdCBjb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGRlc2NyaXB0b3JfYnVmZmVyICpkZXNjOwotCWRtYV9hZGRyX3QgYnVzX2FkZHI7CisJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihidXNfYWRkcik7CiAJaW50IG9mZnNldDsKIAogCS8qCkBAIC03NjUsOCArOTcxLDE5IEBACiAJCQkJICAgICBERVNDUklQVE9SX0lSUV9BTFdBWVMgfAogCQkJCSAgICAgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKIAotCS8qIEZJWE1FOiBEb2N1bWVudCBob3cgdGhlIGxvY2tpbmcgd29ya3MuICovCi0JaWYgKG9oY2ktPmdlbmVyYXRpb24gIT0gcGFja2V0LT5nZW5lcmF0aW9uKSB7CisJLyoKKwkgKiBJZiB0aGUgY29udHJvbGxlciBhbmQgcGFja2V0IGdlbmVyYXRpb25zIGRvbid0IG1hdGNoLCB3ZSBuZWVkIHRvCisJICogYmFpbCBvdXQgYW5kIHRyeSBhZ2Fpbi4gIElmIEludEV2ZW50LmJ1c1Jlc2V0IGlzIHNldCwgdGhlIEFUIGNvbnRleHQKKwkgKiBpcyBoYWx0ZWQsIHNvIGFwcGVuZGluZyB0byB0aGUgY29udGV4dCBhbmQgdHJ5aW5nIHRvIHJ1biBpdCBpcworCSAqIGZ1dGlsZS4gIE1vc3QgY29udHJvbGxlcnMgZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBqdXN0IGZsdXNoIHRoZSBBVAorCSAqIHF1ZXVlIChwZXIgc2VjdGlvbiA3LjIuMy4yIG9mIHRoZSBPSENJIDEuMSBzcGVjaWZpY2F0aW9uKSwgYnV0CisJICogc29tZSBjb250cm9sbGVycyAobGlrZSBhIEpNaWNyb24gSk1CMzgxIFBDSS1lKSBtaXNiZWhhdmUgYW5kIHdpbmQKKwkgKiB1cCBzdGFsbGluZyBvdXQuICBTbyB3ZSBqdXN0IGJhaWwgb3V0IGluIHNvZnR3YXJlIGFuZCB0cnkgYWdhaW4KKwkgKiBsYXRlciwgYW5kIGV2ZXJ5b25lIGlzIGhhcHB5LgorCSAqIEZJWE1FOiBEb2N1bWVudCBob3cgdGhlIGxvY2tpbmcgd29ya3MuCisJICovCisJaWYgKG9oY2ktPmdlbmVyYXRpb24gIT0gcGFja2V0LT5nZW5lcmF0aW9uIHx8CisJICAgIHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0ludEV2ZW50U2V0KSAmIE9IQ0kxMzk0X2J1c1Jlc2V0KSB7CiAJCWlmIChwYWNrZXQtPnBheWxvYWRfbGVuZ3RoID4gMCkKIAkJCWRtYV91bm1hcF9zaW5nbGUob2hjaS0+Y2FyZC5kZXZpY2UsIHBheWxvYWRfYnVzLAogCQkJCQkgcGFja2V0LT5wYXlsb2FkX2xlbmd0aCwgRE1BX1RPX0RFVklDRSk7CkBAIC04MTIsNiArMTAyOSw4IEBACiAJZXZ0ID0gbGUxNl90b19jcHUobGFzdC0+dHJhbnNmZXJfc3RhdHVzKSAmIDB4MWY7CiAJcGFja2V0LT50aW1lc3RhbXAgPSBsZTE2X3RvX2NwdShsYXN0LT5yZXNfY291bnQpOwogCisJbG9nX2FyX2F0X2V2ZW50KCdUJywgcGFja2V0LT5zcGVlZCwgcGFja2V0LT5oZWFkZXIsIGV2dCk7CisKIAlzd2l0Y2ggKGV2dCkgewogCWNhc2UgT0hDSTEzOTRfZXZ0X3RpbWVvdXQ6CiAJCS8qIEFzeW5jIHJlc3BvbnNlIHRyYW5zbWl0IHRpbWVkIG91dC4gKi8KQEAgLTEwMTQsMjEgKzEyMzMsMzIgQEAKIAlvaGNpLT5ub2RlX2lkID0gcmVnICYgKE9IQ0kxMzk0X05vZGVJRF9idXNOdW1iZXIgfAogCQkJICAgICAgIE9IQ0kxMzk0X05vZGVJRF9ub2RlTnVtYmVyKTsKIAorCXJlZyA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1NlbGZJRENvdW50KTsKKwlpZiAocmVnICYgT0hDSTEzOTRfU2VsZklEQ291bnRfc2VsZklERXJyb3IpIHsKKwkJZndfbm90aWZ5KCJpbmNvbnNpc3RlbnQgc2VsZiBJRHNcbiIpOworCQlyZXR1cm47CisJfQogCS8qCiAJICogVGhlIGNvdW50IGluIHRoZSBTZWxmSURDb3VudCByZWdpc3RlciBpcyB0aGUgbnVtYmVyIG9mCiAJICogYnl0ZXMgaW4gdGhlIHNlbGYgSUQgcmVjZWl2ZSBidWZmZXIuICBTaW5jZSB3ZSBhbHNvIHJlY2VpdmUKIAkgKiB0aGUgaW52ZXJ0ZWQgcXVhZGxldHMgYW5kIGEgaGVhZGVyIHF1YWRsZXQsIHdlIHNoaWZ0IG9uZQogCSAqIGJpdCBleHRyYSB0byBnZXQgdGhlIGFjdHVhbCBudW1iZXIgb2Ygc2VsZiBJRHMuCiAJICovCi0KLQlzZWxmX2lkX2NvdW50ID0gKHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1NlbGZJRENvdW50KSA+PiAzKSAmIDB4M2ZmOwotCWdlbmVyYXRpb24gPSAobGUzMl90b19jcHUob2hjaS0+c2VsZl9pZF9jcHVbMF0pID4+IDE2KSAmIDB4ZmY7CisJc2VsZl9pZF9jb3VudCA9IChyZWcgPj4gMykgJiAweDNmZjsKKwlpZiAoc2VsZl9pZF9jb3VudCA9PSAwKSB7CisJCWZ3X25vdGlmeSgiaW5jb25zaXN0ZW50IHNlbGYgSURzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlnZW5lcmF0aW9uID0gKGNvbmRfbGUzMl90b19jcHUob2hjaS0+c2VsZl9pZF9jcHVbMF0pID4+IDE2KSAmIDB4ZmY7CiAJcm1iKCk7CiAKIAlmb3IgKGkgPSAxLCBqID0gMDsgaiA8IHNlbGZfaWRfY291bnQ7IGkgKz0gMiwgaisrKSB7Ci0JCWlmIChvaGNpLT5zZWxmX2lkX2NwdVtpXSAhPSB+b2hjaS0+c2VsZl9pZF9jcHVbaSArIDFdKQotCQkJZndfZXJyb3IoImluY29uc2lzdGVudCBzZWxmIElEc1xuIik7Ci0JCW9oY2ktPnNlbGZfaWRfYnVmZmVyW2pdID0gbGUzMl90b19jcHUob2hjaS0+c2VsZl9pZF9jcHVbaV0pOworCQlpZiAob2hjaS0+c2VsZl9pZF9jcHVbaV0gIT0gfm9oY2ktPnNlbGZfaWRfY3B1W2kgKyAxXSkgeworCQkJZndfbm90aWZ5KCJpbmNvbnNpc3RlbnQgc2VsZiBJRHNcbiIpOworCQkJcmV0dXJuOworCQl9CisJCW9oY2ktPnNlbGZfaWRfYnVmZmVyW2pdID0KKwkJCQljb25kX2xlMzJfdG9fY3B1KG9oY2ktPnNlbGZfaWRfY3B1W2ldKTsKIAl9CiAJcm1iKCk7CiAKQEAgLTEwNjEsNiArMTI5MSw5IEBACiAJY29udGV4dF9zdG9wKCZvaGNpLT5hdF9yZXNwb25zZV9jdHgpOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyLCBPSENJMTM5NF9idXNSZXNldCk7CiAKKwlpZiAob2hjaS0+YnVzX3Jlc2V0X3BhY2tldF9xdWlyaykKKwkJb2hjaS0+cmVxdWVzdF9nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKwogCS8qCiAJICogVGhpcyBuZXh0IGJpdCBpcyB1bnJlbGF0ZWQgdG8gdGhlIEFUIGNvbnRleHQgc3R1ZmYgYnV0IHdlCiAJICogaGF2ZSB0byBkbyBpdCB1bmRlciB0aGUgc3BpbmxvY2sgYWxzby4gIElmIGEgbmV3IGNvbmZpZyByb20KQEAgLTEwOTEsMTIgKzEzMjQsMjAgQEAKIAkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTWhkciwgb2hjaS0+bmV4dF9oZWFkZXIpOwogCX0KIAorI2lmZGVmIENPTkZJR19GSVJFV0lSRV9PSENJX1JFTU9URV9ETUEKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfUGh5UmVxRmlsdGVySGlTZXQsIH4wKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfUGh5UmVxRmlsdGVyTG9TZXQsIH4wKTsKKyNlbmRpZgorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGZyZWVfcm9tKQogCQlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgQ09ORklHX1JPTV9TSVpFLAogCQkJCSAgZnJlZV9yb20sIGZyZWVfcm9tX2J1cyk7CiAKKwlsb2dfc2VsZmlkcyhvaGNpLT5ub2RlX2lkLCBnZW5lcmF0aW9uLAorCQkgICAgc2VsZl9pZF9jb3VudCwgb2hjaS0+c2VsZl9pZF9idWZmZXIpOworCiAJZndfY29yZV9oYW5kbGVfYnVzX3Jlc2V0KCZvaGNpLT5jYXJkLCBvaGNpLT5ub2RlX2lkLCBnZW5lcmF0aW9uLAogCQkJCSBzZWxmX2lkX2NvdW50LCBvaGNpLT5zZWxmX2lkX2J1ZmZlcik7CiB9CkBAIC0xMTEyLDcgKzEzNTMsOSBAQAogCWlmICghZXZlbnQgfHwgIX5ldmVudCkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludEV2ZW50Q2xlYXIsIGV2ZW50KTsKKwkvKiBidXNSZXNldCBtdXN0IG5vdCBiZSBjbGVhcmVkIHlldCwgc2VlIE9IQ0kgMS4xIGNsYXVzZSA3LjIuMy4yICovCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludEV2ZW50Q2xlYXIsIGV2ZW50ICYgfk9IQ0kxMzk0X2J1c1Jlc2V0KTsKKwlsb2dfaXJxcyhldmVudCk7CiAKIAlpZiAoZXZlbnQgJiBPSENJMTM5NF9zZWxmSURDb21wbGV0ZSkKIAkJdGFza2xldF9zY2hlZHVsZSgmb2hjaS0+YnVzX3Jlc2V0X3Rhc2tsZXQpOwpAQCAtMTE0Nyw2ICsxMzkwLDEwIEBACiAJCWlzb19ldmVudCAmPSB+KDEgPDwgaSk7CiAJfQogCisJaWYgKHVubGlrZWx5KGV2ZW50ICYgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCkpCisJCWZ3X2Vycm9yKCJSZWdpc3RlciBhY2Nlc3MgZmFpbHVyZSAtICIKKwkJCSAicGxlYXNlIG5vdGlmeSBsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc2YubmV0XG4iKTsKKwogCWlmICh1bmxpa2VseShldmVudCAmIE9IQ0kxMzk0X3Bvc3RlZFdyaXRlRXJyKSkKIAkJZndfZXJyb3IoIlBDSSBwb3N0ZWQgd3JpdGUgZXJyb3JcbiIpOwogCkBAIC0xMTg2LDYgKzE0MzMsOCBAQAogewogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2RldihjYXJkLT5kZXZpY2UpOworCXUzMiBscHM7CisJaW50IGk7CiAKIAlpZiAoc29mdHdhcmVfcmVzZXQob2hjaSkpIHsKIAkJZndfZXJyb3IoIkZhaWxlZCB0byByZXNldCBvaGNpIGNhcmQuXG4iKTsKQEAgLTExOTcsMTMgKzE0NDYsMjQgQEAKIAkgKiBtb3N0IG9mIHRoZSByZWdpc3RlcnMuICBJbiBmYWN0LCBvbiBzb21lIGNhcmRzIChBTEkgTTUyNTEpLAogCSAqIGFjY2Vzc2luZyByZWdpc3RlcnMgaW4gdGhlIFNDbGsgZG9tYWluIHdpdGhvdXQgTFBTIGVuYWJsZWQKIAkgKiB3aWxsIGxvY2sgdXAgdGhlIG1hY2hpbmUuICBXYWl0IDUwbXNlYyB0byBtYWtlIHN1cmUgd2UgaGF2ZQotCSAqIGZ1bGwgbGluayBlbmFibGVkLgorCSAqIGZ1bGwgbGluayBlbmFibGVkLiAgSG93ZXZlciwgd2l0aCBzb21lIGNhcmRzICh3ZWxsLCBhdCBsZWFzdAorCSAqIGEgSk1pY3JvbiBQQ0llIGNhcmQpLCB3ZSBoYXZlIHRvIHRyeSBhZ2FpbiBzb21ldGltZXMuCiAJICovCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0hDQ29udHJvbFNldCwKIAkJICBPSENJMTM5NF9IQ0NvbnRyb2xfTFBTIHwKIAkJICBPSENJMTM5NF9IQ0NvbnRyb2xfcG9zdGVkV3JpdGVFbmFibGUpOwogCWZsdXNoX3dyaXRlcyhvaGNpKTsKLQltc2xlZXAoNTApOworCisJZm9yIChscHMgPSAwLCBpID0gMDsgIWxwcyAmJiBpIDwgMzsgaSsrKSB7CisJCW1zbGVlcCg1MCk7CisJCWxwcyA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0hDQ29udHJvbFNldCkgJgorCQkgICAgICBPSENJMTM5NF9IQ0NvbnRyb2xfTFBTOworCX0KKworCWlmICghbHBzKSB7CisJCWZ3X2Vycm9yKCJGYWlsZWQgdG8gc2V0IExpbmsgUG93ZXIgU3RhdHVzXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0hDQ29udHJvbENsZWFyLAogCQkgIE9IQ0kxMzk0X0hDQ29udHJvbF9ub0J5dGVTd2FwRGF0YSk7CkBAIC0xMjMxLDcgKzE0OTEsMTAgQEAKIAkJICBPSENJMTM5NF9yZXFUeENvbXBsZXRlIHwgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUgfAogCQkgIE9IQ0kxMzk0X2lzb2NoUnggfCBPSENJMTM5NF9pc29jaFR4IHwKIAkJICBPSENJMTM5NF9wb3N0ZWRXcml0ZUVyciB8IE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8Ci0JCSAgT0hDSTEzOTRfY3ljbGU2NFNlY29uZHMgfCBPSENJMTM5NF9tYXN0ZXJJbnRFbmFibGUpOworCQkgIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzIHwgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCB8CisJCSAgT0hDSTEzOTRfbWFzdGVySW50RW5hYmxlKTsKKwlpZiAocGFyYW1fZGVidWcgJiBPSENJX1BBUkFNX0RFQlVHX0JVU1JFU0VUUykKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludE1hc2tTZXQsIE9IQ0kxMzk0X2J1c1Jlc2V0KTsKIAogCS8qIEFjdGl2YXRlIGxpbmtfb24gYml0IGFuZCBjb250ZW5kZXIgYml0IGluIG91ciBzZWxmIElEIHBhY2tldHMuKi8KIAlpZiAob2hjaV91cGRhdGVfcGh5X3JlZyhjYXJkLCA0LCAwLApAQCAtMTMxNiw3ICsxNTc5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXR2YWwgPSAtRUJVU1k7CiAJX19iZTMyICpuZXh0X2NvbmZpZ19yb207Ci0JZG1hX2FkZHJfdCBuZXh0X2NvbmZpZ19yb21fYnVzOworCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIobmV4dF9jb25maWdfcm9tX2J1cyk7CiAKIAlvaGNpID0gZndfb2hjaShjYXJkKTsKIApAQCAtMTQxNSw2ICsxNjc4LDcgQEAKIAlpZiAocGFja2V0LT5hY2sgIT0gMCkKIAkJZ290byBvdXQ7CiAKKwlsb2dfYXJfYXRfZXZlbnQoJ1QnLCBwYWNrZXQtPnNwZWVkLCBwYWNrZXQtPmhlYWRlciwgMHgyMCk7CiAJZHJpdmVyX2RhdGEtPnBhY2tldCA9IE5VTEw7CiAJcGFja2V0LT5hY2sgPSBSQ09ERV9DQU5DRUxMRUQ7CiAJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsICZvaGNpLT5jYXJkLCBwYWNrZXQtPmFjayk7CkBAIC0xNDI5LDYgKzE2OTMsOSBAQAogc3RhdGljIGludAogb2hjaV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbikKIHsKKyNpZmRlZiBDT05GSUdfRklSRVdJUkVfT0hDSV9SRU1PVEVfRE1BCisJcmV0dXJuIDA7CisjZWxzZQogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBuLCByZXR2YWwgPSAwOwpAQCAtMTQ2MCw2ICsxNzI3LDcgQEAKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CisjZW5kaWYgLyogQ09ORklHX0ZJUkVXSVJFX09IQ0lfUkVNT1RFX0RNQSAqLwogfQogCiBzdGF0aWMgdTY0CkBAIC0xNDg3LDcgKzE3NTUsNyBAQAogCXZvaWQgKnAsICplbmQ7CiAJaW50IGk7CiAKLQlpZiAoZGItPmZpcnN0X3Jlc19jb3VudCA+IDAgJiYgZGItPnNlY29uZF9yZXNfY291bnQgPiAwKSB7CisJaWYgKGRiLT5maXJzdF9yZXNfY291bnQgIT0gMCAmJiBkYi0+c2Vjb25kX3Jlc19jb3VudCAhPSAwKSB7CiAJCWlmIChjdHgtPmV4Y2Vzc19ieXRlcyA8PSBsZTE2X3RvX2NwdShkYi0+c2Vjb25kX3JlcV9jb3VudCkpIHsKIAkJCS8qIFRoaXMgZGVzY3JpcHRvciBpc24ndCBkb25lIHlldCwgc3RvcCBpdGVyYXRpb24uICovCiAJCQlyZXR1cm4gMDsKQEAgLTE1MTMsNyArMTc4MSw3IEBACiAJCW1lbWNweShjdHgtPmhlYWRlciArIGkgKyA0LCBwICsgOCwgY3R4LT5iYXNlLmhlYWRlcl9zaXplIC0gNCk7CiAJCWkgKz0gY3R4LT5iYXNlLmhlYWRlcl9zaXplOwogCQljdHgtPmV4Y2Vzc19ieXRlcyArPQotCQkJKGxlMzJfdG9fY3B1KCoodTMyICopKHAgKyA0KSkgPj4gMTYpICYgMHhmZmZmOworCQkJKGxlMzJfdG9fY3B1KCooX19sZTMyICopKHAgKyA0KSkgPj4gMTYpICYgMHhmZmZmOwogCQlwICs9IGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSArIDQ7CiAJfQogCWN0eC0+aGVhZGVyX2xlbmd0aCA9IGk7CkBAIC0yMDM5LDYgKzIzMDcsMzUgQEAKIAkuc3RvcF9pc28JCT0gb2hjaV9zdG9wX2lzbywKIH07CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKK3N0YXRpYyB2b2lkIG9oY2lfcG1hY19vbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCisJCWlmIChvZm4pIHsKKwkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSXzEzOTRfQ0FCTEVfUE9XRVIsIG9mbiwgMCwgMSk7CisJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0VOQUJMRSwgb2ZuLCAwLCAxKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgb2hjaV9wbWFjX29mZihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCisJCWlmIChvZm4pIHsKKwkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSXzEzOTRfRU5BQkxFLCBvZm4sIDAsIDApOworCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfMTM5NF9DQUJMRV9QT1dFUiwgb2ZuLCAwLCAwKTsKKwkJfQorCX0KK30KKyNlbHNlCisjZGVmaW5lIG9oY2lfcG1hY19vbihkZXYpCisjZGVmaW5lIG9oY2lfcG1hY19vZmYoZGV2KQorI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLworCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC0yMDU2LDE2ICsyMzUzLDI0IEBACiAKIAlmd19jYXJkX2luaXRpYWxpemUoJm9oY2ktPmNhcmQsICZvaGNpX2RyaXZlciwgJmRldi0+ZGV2KTsKIAorCW9oY2lfcG1hY19vbihkZXYpOworCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWZ3X2Vycm9yKCJGYWlsZWQgdG8gZW5hYmxlIE9IQ0kgaGFyZHdhcmUuXG4iKTsKLQkJZ290byBmYWlsX3B1dF9jYXJkOworCQlnb3RvIGZhaWxfZnJlZTsKIAl9CiAKIAlwY2lfc2V0X21hc3RlcihkZXYpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBPSENJMTM5NF9QQ0lfSENJX0NvbnRyb2wsIDApOwogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIG9oY2kpOwogCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorCW9oY2ktPm9sZF91bmlub3J0aCA9IGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVBQTEUgJiYKKwkJCSAgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9GVzsKKyNlbmRpZgorCW9oY2ktPmJ1c19yZXNldF9wYWNrZXRfcXVpcmsgPSBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1RJOworCiAJc3Bpbl9sb2NrX2luaXQoJm9oY2ktPmxvY2spOwogCiAJdGFza2xldF9pbml0KCZvaGNpLT5idXNfcmVzZXRfdGFza2xldCwKQEAgLTIxNTEsOCArMjQ1Niw5IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9uKGRldiwgMCk7CiAgZmFpbF9kaXNhYmxlOgogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwotIGZhaWxfcHV0X2NhcmQ6Ci0JZndfY2FyZF9wdXQoJm9oY2ktPmNhcmQpOworIGZhaWxfZnJlZToKKwlrZnJlZSgmb2hjaS0+Y2FyZCk7CisJb2hjaV9wbWFjX29mZihkZXYpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTIxODAsMzkgKzI0ODYsNDIgQEAKIAlwY2lfaW91bm1hcChkZXYsIG9oY2ktPnJlZ2lzdGVycyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9uKGRldiwgMCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0JZndfY2FyZF9wdXQoJm9oY2ktPmNhcmQpOworCWtmcmVlKCZvaGNpLT5jYXJkKTsKKwlvaGNpX3BtYWNfb2ZmKGRldik7CiAKIAlmd19ub3RpZnkoIlJlbW92ZWQgZnctb2hjaSBkZXZpY2UuXG4iKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBwY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgZXJyOwogCiAJc29mdHdhcmVfcmVzZXQob2hjaSk7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBvaGNpKTsKLQllcnIgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlmcmVlX2lycShkZXYtPmlycSwgb2hjaSk7CisJZXJyID0gcGNpX3NhdmVfc3RhdGUoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWZ3X2Vycm9yKCJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAJaWYgKGVycikKIAkJZndfZXJyb3IoInBjaV9zZXRfcG93ZXJfc3RhdGUgZmFpbGVkIHdpdGggJWRcbiIsIGVycik7CisJb2hjaV9wbWFjX29mZihkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXN0cnVjdCBmd19vaGNpICpvaGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJaW50IGVycjsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlvaGNpX3BtYWNfb24oZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CiAJaWYgKGVycikgewogCQlmd19lcnJvcigicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmgKaW5kZXggZGVjNGYwNC4uYTJmYmI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgIE9IQ0kxMzk0X0hDQ29udHJvbF9zb2Z0UmVzZXQJCTB4MDAwMTAwMDAKICNkZWZpbmUgT0hDSTEzOTRfU2VsZklEQnVmZmVyICAgICAgICAgICAgICAgICAweDA2NAogI2RlZmluZSBPSENJMTM5NF9TZWxmSURDb3VudCAgICAgICAgICAgICAgICAgIDB4MDY4CisjZGVmaW5lICBPSENJMTM5NF9TZWxmSURDb3VudF9zZWxmSURFcnJvcgkweDgwMDAwMDAwCiAjZGVmaW5lIE9IQ0kxMzk0X0lSTXVsdGlDaGFuTWFza0hpU2V0ICAgICAgICAgMHgwNzAKICNkZWZpbmUgT0hDSTEzOTRfSVJNdWx0aUNoYW5NYXNrSGlDbGVhciAgICAgICAweDA3NAogI2RlZmluZSBPSENJMTM5NF9JUk11bHRpQ2hhbk1hc2tMb1NldCAgICAgICAgIDB4MDc4CkBAIC0xMjQsNiArMTI1LDcgQEAKICNkZWZpbmUgT0hDSTEzOTRfbG9ja1Jlc3BFcnIJCTB4MDAwMDAyMDAKICNkZWZpbmUgT0hDSTEzOTRfc2VsZklEQ29tcGxldGUJCTB4MDAwMTAwMDAKICNkZWZpbmUgT0hDSTEzOTRfYnVzUmVzZXQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbAkJMHgwMDA0MDAwMAogI2RlZmluZSBPSENJMTM5NF9waHkJCQkweDAwMDgwMDAwCiAjZGVmaW5lIE9IQ0kxMzk0X2N5Y2xlU3luY2gJCTB4MDAxMDAwMDAKICNkZWZpbmUgT0hDSTEzOTRfY3ljbGU2NFNlY29uZHMJCTB4MDAyMDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMKaW5kZXggMTllY2U5Yi4uMmE5OTkzNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCkBAIC0yOCwxNCArMjgsMTUgQEAKICAqIGFuZCBtYW55IG90aGVycy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC00Nyw5ICs0OCw5IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAKLSNpbmNsdWRlICJmdy10cmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgImZ3LXRvcG9sb2d5LmgiCiAjaW5jbHVkZSAiZnctZGV2aWNlLmgiCisjaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKyNpbmNsdWRlICJmdy10cmFuc2FjdGlvbi5oIgogCiAvKgogICogU28gZmFyIG9ubHkgYnJpZGdlcyBmcm9tIE94Zm9yZCBTZW1pY29uZHVjdG9yIGFyZSBrbm93biB0byBzdXBwb3J0CkBAIC04Miw2ICs4Myw5IEBACiAgKiAgIEF2b2lkcyBhY2Nlc3MgYmV5b25kIGFjdHVhbCBkaXNrIGxpbWl0cyBvbiBkZXZpY2VzIHdpdGggYW4gb2ZmLWJ5LW9uZSBidWcuCiAgKiAgIERvbid0IHVzZSB0aGlzIHdpdGggZGV2aWNlcyB3aGljaCBkb24ndCBoYXZlIHRoaXMgYnVnLgogICoKKyAqIC0gZGVsYXkgaW5xdWlyeQorICogICBXYWl0IGV4dHJhIFNCUDJfSU5RVUlSWV9ERUxBWSBzZWNvbmRzIGFmdGVyIGxvZ2luIGJlZm9yZSBTQ1NJIGlucXVpcnkuCisgKgogICogLSBvdmVycmlkZSBpbnRlcm5hbCBibGFja2xpc3QKICAqICAgSW5zdGVhZCBvZiBhZGRpbmcgdG8gdGhlIGJ1aWx0LWluIGJsYWNrbGlzdCwgdXNlIG9ubHkgdGhlIHdvcmthcm91bmRzCiAgKiAgIHNwZWNpZmllZCBpbiB0aGUgbW9kdWxlIGxvYWQgcGFyYW1ldGVyLgpAQCAtOTEsNiArOTUsOCBAQAogI2RlZmluZSBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNgkweDIKICNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOAkweDQKICNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWQkweDgKKyNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX0RFTEFZX0lOUVVJUlkJMHgxMAorI2RlZmluZSBTQlAyX0lOUVVJUllfREVMQVkJCTEyCiAjZGVmaW5lIFNCUDJfV09SS0FST1VORF9PVkVSUklERQkweDEwMAogCiBzdGF0aWMgaW50IHNicDJfcGFyYW1fd29ya2Fyb3VuZHM7CkBAIC0xMDAsNiArMTA2LDcgQEAKIAkiLCAzNiBieXRlIGlucXVpcnkgPSAiICAgIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2KQogCSIsIHNraXAgbW9kZSBwYWdlIDggPSAiICAgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOCkKIAkiLCBmaXggY2FwYWNpdHkgPSAiICAgICAgIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFkpCisJIiwgZGVsYXkgaW5xdWlyeSA9ICIgICAgICBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfREVMQVlfSU5RVUlSWSkKIAkiLCBvdmVycmlkZSBpbnRlcm5hbCBibGFja2xpc3QgPSAiIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9PVkVSUklERSkKIAkiLCBvciBhIGNvbWJpbmF0aW9uKSIpOwogCkBAIC0xMTUsNyArMTIyLDYgQEAKIHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCB7CiAJc3RydWN0IHNicDJfdGFyZ2V0ICp0Z3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIGFkZHJlc3NfaGFuZGxlcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG9yYl9saXN0OwogCkBAIC0xMzIsNiArMTM4LDggQEAKIAlpbnQgZ2VuZXJhdGlvbjsKIAlpbnQgcmV0cmllczsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJYm9vbCBoYXNfc2RldjsKKwlib29sIGJsb2NrZWQ7CiB9OwogCiAvKgpAQCAtMTQxLDE2ICsxNDksMTkgQEAKIHN0cnVjdCBzYnAyX3RhcmdldCB7CiAJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgZndfdW5pdCAqdW5pdDsKKwljb25zdCBjaGFyICpidXNfaWQ7CisJc3RydWN0IGxpc3RfaGVhZCBsdV9saXN0OwogCiAJdTY0IG1hbmFnZW1lbnRfYWdlbnRfYWRkcmVzczsKKwl1NjQgZ3VpZDsKIAlpbnQgZGlyZWN0b3J5X2lkOwogCWludCBub2RlX2lkOwogCWludCBhZGRyZXNzX2hpZ2g7Ci0KLQl1bnNpZ25lZCB3b3JrYXJvdW5kczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGx1X2xpc3Q7Ci0KKwl1bnNpZ25lZCBpbnQgd29ya2Fyb3VuZHM7CiAJdW5zaWduZWQgaW50IG1ndF9vcmJfdGltZW91dDsKKworCWludCBkb250X2Jsb2NrOwkvKiBjb3VudGVyIGZvciBlYWNoIGxvZ2ljYWwgdW5pdCAqLworCWludCBibG9ja2VkOwkvKiBkaXR0byAqLwogfTsKIAogLyoKQEAgLTE2MCwxMiArMTcxLDExIEBACiAgKi8KICNkZWZpbmUgU0JQMl9NSU5fTE9HSU5fT1JCX1RJTUVPVVQJNTAwMFUJLyogVGltZW91dCBpbiBtcyAqLwogI2RlZmluZSBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVAk0MDAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwCS8qIFRpbWVvdXQgaW4gbXMgKi8KKyNkZWZpbmUgU0JQMl9PUkJfVElNRU9VVAkJMjAwMFUJLyogVGltZW91dCBpbiBtcyAqLwogI2RlZmluZSBTQlAyX09SQl9OVUxMCQkJMHg4MDAwMDAwMAogI2RlZmluZSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSAkweGYwMDAKLQotI2RlZmluZSBTQlAyX0RJUkVDVElPTl9UT19NRURJQQkJMHgwCi0jZGVmaW5lIFNCUDJfRElSRUNUSU9OX0ZST01fTUVESUEJMHgxCisjZGVmaW5lIFNCUDJfUkVUUllfTElNSVQJCTB4ZgkJLyogMTUgcmV0cmllcyAqLworI2RlZmluZSBTQlAyX0NZQ0xFX0xJTUlUCQkoMHhjOCA8PCAxMikJLyogMjAwIDEyNXVzIGN5Y2xlcyAqLwogCiAvKiBVbml0IGRpcmVjdG9yeSBrZXlzICovCiAjZGVmaW5lIFNCUDJfQ1NSX1VOSVRfQ0hBUkFDVEVSSVNUSUNTCTB4M2EKQEAgLTIxMyw4ICsyMjMsOCBAQAogfTsKIAogc3RydWN0IHNicDJfcG9pbnRlciB7Ci0JdTMyIGhpZ2g7Ci0JdTMyIGxvdzsKKwlfX2JlMzIgaGlnaDsKKwlfX2JlMzIgbG93OwogfTsKIAogc3RydWN0IHNicDJfb3JiIHsKQEAgLTI0Miw4ICsyNTIsOCBAQAogCXN0cnVjdCB7CiAJCXN0cnVjdCBzYnAyX3BvaW50ZXIgcGFzc3dvcmQ7CiAJCXN0cnVjdCBzYnAyX3BvaW50ZXIgcmVzcG9uc2U7Ci0JCXUzMiBtaXNjOwotCQl1MzIgbGVuZ3RoOworCQlfX2JlMzIgbWlzYzsKKwkJX19iZTMyIGxlbmd0aDsKIAkJc3RydWN0IHNicDJfcG9pbnRlciBzdGF0dXNfZmlmbzsKIAl9IHJlcXVlc3Q7CiAJX19iZTMyIHJlc3BvbnNlWzRdOwpAQCAtMjUyLDIwICsyNjIsMTcgQEAKIAlzdHJ1Y3Qgc2JwMl9zdGF0dXMgc3RhdHVzOwogfTsKIAotI2RlZmluZSBMT0dJTl9SRVNQT05TRV9HRVRfTE9HSU5fSUQodikJKCh2KS5taXNjICYgMHhmZmZmKQotI2RlZmluZSBMT0dJTl9SRVNQT05TRV9HRVRfTEVOR1RIKHYpCSgoKHYpLm1pc2MgPj4gMTYpICYgMHhmZmZmKQotCiBzdHJ1Y3Qgc2JwMl9sb2dpbl9yZXNwb25zZSB7Ci0JdTMyIG1pc2M7CisJX19iZTMyIG1pc2M7CiAJc3RydWN0IHNicDJfcG9pbnRlciBjb21tYW5kX2Jsb2NrX2FnZW50OwotCXUzMiByZWNvbm5lY3RfaG9sZDsKKwlfX2JlMzIgcmVjb25uZWN0X2hvbGQ7CiB9OwogI2RlZmluZSBDT01NQU5EX09SQl9EQVRBX1NJWkUodikJKCh2KSkKICNkZWZpbmUgQ09NTUFORF9PUkJfUEFHRV9TSVpFKHYpCSgodikgPDwgMTYpCiAjZGVmaW5lIENPTU1BTkRfT1JCX1BBR0VfVEFCTEVfUFJFU0VOVAkoKDEpIDw8IDE5KQogI2RlZmluZSBDT01NQU5EX09SQl9NQVhfUEFZTE9BRCh2KQkoKHYpIDw8IDIwKQogI2RlZmluZSBDT01NQU5EX09SQl9TUEVFRCh2KQkJKCh2KSA8PCAyNCkKLSNkZWZpbmUgQ09NTUFORF9PUkJfRElSRUNUSU9OKHYpCSgodikgPDwgMjcpCisjZGVmaW5lIENPTU1BTkRfT1JCX0RJUkVDVElPTgkJKCgxKSA8PCAyNykKICNkZWZpbmUgQ09NTUFORF9PUkJfUkVRVUVTVF9GT1JNQVQodikJKCh2KSA8PCAyOSkKICNkZWZpbmUgQ09NTUFORF9PUkJfTk9USUZZCQkoKDEpIDw8IDMxKQogCkBAIC0yNzQsNyArMjgxLDcgQEAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3Qgc2JwMl9wb2ludGVyIG5leHQ7CiAJCXN0cnVjdCBzYnAyX3BvaW50ZXIgZGF0YV9kZXNjcmlwdG9yOwotCQl1MzIgbWlzYzsKKwkJX19iZTMyIG1pc2M7CiAJCXU4IGNvbW1hbmRfYmxvY2tbMTJdOwogCX0gcmVxdWVzdDsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CkBAIC0yOTcsNyArMzA0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXUzMiBmaXJtd2FyZV9yZXZpc2lvbjsKIAl1MzIgbW9kZWw7Ci0JdW5zaWduZWQgd29ya2Fyb3VuZHM7CisJdW5zaWduZWQgaW50IHdvcmthcm91bmRzOwogfSBzYnAyX3dvcmthcm91bmRzX3RhYmxlW10gPSB7CiAJLyogRFZpQ08gTW9tb2JheSBDWC0xIHdpdGggVFNCNDJBQTkgYnJpZGdlICovIHsKIAkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI4MDAsCkBAIC0zMDUsNiArMzEyLDExIEBACiAJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNiB8CiAJCQkJCSAgU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOCwKIAl9LAorCS8qIERWaUNPIE1vbW9iYXkgRlgtM0Egd2l0aCBUU0I0MkFBOUEgYnJpZGdlICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI4MDAsCisJCS5tb2RlbAkJCT0gMHgwMDAwMDAsCisJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfREVMQVlfSU5RVUlSWSwKKwl9LAogCS8qIEluaXRpbyBicmlkZ2VzLCBhY3R1YWxseSBvbmx5IG5lZWRlZCBmb3Igc29tZSBvbGRlciBvbmVzICovIHsKIAkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDAyMDAsCiAJCS5tb2RlbAkJCT0gfjAsCkBAIC0zMTUsNiArMzI3LDExIEBACiAJCS5tb2RlbAkJCT0gfjAsCiAJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMsCiAJfSwKKwkvKiBEYXRhZmFiIE1EMi1GVzIgd2l0aCBTeW1iaW9zL0xTSUxvZ2ljIFNZTTEzRlc1MDAgYnJpZGdlICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI2MDAsCisJCS5tb2RlbAkJCT0gfjAsCisJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMsCisJfSwKIAogCS8qCiAJICogVGhlcmUgYXJlIGlQb2RzICgybmQgZ2VuLCAzcmQgZ2VuKSB3aXRoIG1vZGVsX2lkID09IDAsIGJ1dApAQCAtNDM4LDggKzQ1NSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW9yYi0+cG9pbnRlci5oaWdoID0gMDsKLQlvcmItPnBvaW50ZXIubG93ID0gb3JiLT5yZXF1ZXN0X2J1czsKLQlmd19tZW1jcHlfdG9fYmUzMigmb3JiLT5wb2ludGVyLCAmb3JiLT5wb2ludGVyLCBzaXplb2Yob3JiLT5wb2ludGVyKSk7CisJb3JiLT5wb2ludGVyLmxvdyA9IGNwdV90b19iZTMyKG9yYi0+cmVxdWVzdF9idXMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJm9yYi0+bGluaywgJmx1LT5vcmJfbGlzdCk7CkBAIC01MDEsNiArNTE3LDkgQEAKIAl1bnNpZ25lZCBpbnQgdGltZW91dDsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAorCWlmIChmdW5jdGlvbiA9PSBTQlAyX0xPR09VVF9SRVFVRVNUICYmIGZ3X2RldmljZV9pc19zaHV0ZG93bihkZXZpY2UpKQorCQlyZXR1cm4gMDsKKwogCW9yYiA9IGt6YWxsb2Moc2l6ZW9mKCpvcmIpLCBHRlBfQVRPTUlDKTsKIAlpZiAob3JiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTEyLDMxICs1MzEsMzEgQEAKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3Iob3JiLT5yZXNwb25zZV9idXMpKQogCQlnb3RvIGZhaWxfbWFwcGluZ19yZXNwb25zZTsKIAotCW9yYi0+cmVxdWVzdC5yZXNwb25zZS5oaWdoICAgID0gMDsKLQlvcmItPnJlcXVlc3QucmVzcG9uc2UubG93ICAgICA9IG9yYi0+cmVzcG9uc2VfYnVzOworCW9yYi0+cmVxdWVzdC5yZXNwb25zZS5oaWdoID0gMDsKKwlvcmItPnJlcXVlc3QucmVzcG9uc2UubG93ICA9IGNwdV90b19iZTMyKG9yYi0+cmVzcG9uc2VfYnVzKTsKIAotCW9yYi0+cmVxdWVzdC5taXNjID0KKwlvcmItPnJlcXVlc3QubWlzYyA9IGNwdV90b19iZTMyKAogCQlNQU5BR0VNRU5UX09SQl9OT1RJRlkgfAogCQlNQU5BR0VNRU5UX09SQl9GVU5DVElPTihmdW5jdGlvbikgfAotCQlNQU5BR0VNRU5UX09SQl9MVU4obHVuX29yX2xvZ2luX2lkKTsKLQlvcmItPnJlcXVlc3QubGVuZ3RoID0KLQkJTUFOQUdFTUVOVF9PUkJfUkVTUE9OU0VfTEVOR1RIKHNpemVvZihvcmItPnJlc3BvbnNlKSk7CisJCU1BTkFHRU1FTlRfT1JCX0xVTihsdW5fb3JfbG9naW5faWQpKTsKKwlvcmItPnJlcXVlc3QubGVuZ3RoID0gY3B1X3RvX2JlMzIoCisJCU1BTkFHRU1FTlRfT1JCX1JFU1BPTlNFX0xFTkdUSChzaXplb2Yob3JiLT5yZXNwb25zZSkpKTsKIAotCW9yYi0+cmVxdWVzdC5zdGF0dXNfZmlmby5oaWdoID0gbHUtPmFkZHJlc3NfaGFuZGxlci5vZmZzZXQgPj4gMzI7Ci0Jb3JiLT5yZXF1ZXN0LnN0YXR1c19maWZvLmxvdyAgPSBsdS0+YWRkcmVzc19oYW5kbGVyLm9mZnNldDsKKwlvcmItPnJlcXVlc3Quc3RhdHVzX2ZpZm8uaGlnaCA9CisJCWNwdV90b19iZTMyKGx1LT5hZGRyZXNzX2hhbmRsZXIub2Zmc2V0ID4+IDMyKTsKKwlvcmItPnJlcXVlc3Quc3RhdHVzX2ZpZm8ubG93ICA9CisJCWNwdV90b19iZTMyKGx1LT5hZGRyZXNzX2hhbmRsZXIub2Zmc2V0KTsKIAogCWlmIChmdW5jdGlvbiA9PSBTQlAyX0xPR0lOX1JFUVVFU1QpIHsKIAkJLyogQXNrIGZvciAyXjIgPT0gNCBzZWNvbmRzIHJlY29ubmVjdCBncmFjZSBwZXJpb2QgKi8KLQkJb3JiLT5yZXF1ZXN0Lm1pc2MgfD0KKwkJb3JiLT5yZXF1ZXN0Lm1pc2MgfD0gY3B1X3RvX2JlMzIoCiAJCQlNQU5BR0VNRU5UX09SQl9SRUNPTk5FQ1QoMikgfAotCQkJTUFOQUdFTUVOVF9PUkJfRVhDTFVTSVZFKHNicDJfcGFyYW1fZXhjbHVzaXZlX2xvZ2luKTsKKwkJCU1BTkFHRU1FTlRfT1JCX0VYQ0xVU0lWRShzYnAyX3BhcmFtX2V4Y2x1c2l2ZV9sb2dpbikpOwogCQl0aW1lb3V0ID0gbHUtPnRndC0+bWd0X29yYl90aW1lb3V0OwogCX0gZWxzZSB7CiAJCXRpbWVvdXQgPSBTQlAyX09SQl9USU1FT1VUOwogCX0KIAotCWZ3X21lbWNweV90b19iZTMyKCZvcmItPnJlcXVlc3QsICZvcmItPnJlcXVlc3QsIHNpemVvZihvcmItPnJlcXVlc3QpKTsKLQogCWluaXRfY29tcGxldGlvbigmb3JiLT5kb25lKTsKIAlvcmItPmJhc2UuY2FsbGJhY2sgPSBjb21wbGV0ZV9tYW5hZ2VtZW50X29yYjsKIApAQCAtNTUzLDIwICs1NzIsMjAgQEAKIAogCXJldHZhbCA9IC1FSU87CiAJaWYgKHNicDJfY2FuY2VsX29yYnMobHUpID09IDApIHsKLQkJZndfZXJyb3IoIm9yYiByZXBseSB0aW1lZCBvdXQsIHJjb2RlPTB4JTAyeFxuIiwKLQkJCSBvcmItPmJhc2UucmNvZGUpOworCQlmd19lcnJvcigiJXM6IG9yYiByZXBseSB0aW1lZCBvdXQsIHJjb2RlPTB4JTAyeFxuIiwKKwkJCSBsdS0+dGd0LT5idXNfaWQsIG9yYi0+YmFzZS5yY29kZSk7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChvcmItPmJhc2UucmNvZGUgIT0gUkNPREVfQ09NUExFVEUpIHsKLQkJZndfZXJyb3IoIm1hbmFnZW1lbnQgd3JpdGUgZmFpbGVkLCByY29kZSAweCUwMnhcbiIsCi0JCQkgb3JiLT5iYXNlLnJjb2RlKTsKKwkJZndfZXJyb3IoIiVzOiBtYW5hZ2VtZW50IHdyaXRlIGZhaWxlZCwgcmNvZGUgMHglMDJ4XG4iLAorCQkJIGx1LT50Z3QtPmJ1c19pZCwgb3JiLT5iYXNlLnJjb2RlKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKFNUQVRVU19HRVRfUkVTUE9OU0Uob3JiLT5zdGF0dXMpICE9IDAgfHwKIAkgICAgU1RBVFVTX0dFVF9TQlBfU1RBVFVTKG9yYi0+c3RhdHVzKSAhPSAwKSB7Ci0JCWZ3X2Vycm9yKCJlcnJvciBzdGF0dXM6ICVkOiVkXG4iLAorCQlmd19lcnJvcigiJXM6IGVycm9yIHN0YXR1czogJWQ6JWRcbiIsIGx1LT50Z3QtPmJ1c19pZCwKIAkJCSBTVEFUVVNfR0VUX1JFU1BPTlNFKG9yYi0+c3RhdHVzKSwKIAkJCSBTVEFUVVNfR0VUX1NCUF9TVEFUVVMob3JiLT5zdGF0dXMpKTsKIAkJZ290byBvdXQ7CkBAIC01ODEsOCArNjAwLDcgQEAKIAkJCSBzaXplb2Yob3JiLT5yZXNwb25zZSksIERNQV9GUk9NX0RFVklDRSk7CiAgZmFpbF9tYXBwaW5nX3Jlc3BvbnNlOgogCWlmIChyZXNwb25zZSkKLQkJZndfbWVtY3B5X2Zyb21fYmUzMihyZXNwb25zZSwKLQkJCQkgICAgb3JiLT5yZXNwb25zZSwgc2l6ZW9mKG9yYi0+cmVzcG9uc2UpKTsKKwkJbWVtY3B5KHJlc3BvbnNlLCBvcmItPnJlc3BvbnNlLCBzaXplb2Yob3JiLT5yZXNwb25zZSkpOwogCWtyZWZfcHV0KCZvcmItPmJhc2Uua3JlZiwgZnJlZV9vcmIpOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTU5MCwyOSArNjA4LDE1NCBAQAogCiBzdGF0aWMgdm9pZAogY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKLQkJCSAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCisJCQkgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkb25lKQogewotCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCA9IGRhdGE7Ci0KLQlrZnJlZSh0KTsKKwljb21wbGV0ZShkb25lKTsKIH0KIAotc3RhdGljIGludCBzYnAyX2FnZW50X3Jlc2V0KHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCitzdGF0aWMgdm9pZCBzYnAyX2FnZW50X3Jlc2V0KHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOworCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0OworCXN0YXRpYyB1MzIgejsKKworCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZ0LCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCisJCQlsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQlsdS0+Y29tbWFuZF9ibG9ja19hZ2VudF9hZGRyZXNzICsgU0JQMl9BR0VOVF9SRVNFVCwKKwkJCSZ6LCBzaXplb2YoeiksIGNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlLCAmZG9uZSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7Cit9CisKK3N0YXRpYyB2b2lkCitjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCisJCQkJICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKK3sKKwlrZnJlZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQgc2JwMl9hZ2VudF9yZXNldF9ub193YWl0KHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdDsKLQlzdGF0aWMgdTMyIHplcm87CisJc3RhdGljIHUzMiB6OwogCi0JdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0FUT01JQyk7CisJdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybjsKIAogCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsIHQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKIAkJCWx1LT50Z3QtPm5vZGVfaWQsIGx1LT5nZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKIAkJCWx1LT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MgKyBTQlAyX0FHRU5UX1JFU0VULAotCQkJJnplcm8sIHNpemVvZih6ZXJvKSwgY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGUsIHQpOworCQkJJnosIHNpemVvZih6KSwgY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGVfbm9fd2FpdCwgdCk7Cit9CiAKLQlyZXR1cm4gMDsKK3N0YXRpYyB2b2lkIHNicDJfc2V0X2dlbmVyYXRpb24oc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSwgaW50IGdlbmVyYXRpb24pCit7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBmd19kZXZpY2UobHUtPnRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCktPmNhcmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHNlcmlhbGl6ZSB3aXRoIGNvbXBhcmlzb25zIG9mIGx1LT5nZW5lcmF0aW9uIGFuZCBjYXJkLT5nZW5lcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlsdS0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2JwMl9hbGxvd19ibG9jayhzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQoreworCS8qCisJICogV2UgbWF5IGFjY2VzcyBkb250X2Jsb2NrIHdpdGhvdXQgdGFraW5nIGNhcmQtPmxvY2sgaGVyZToKKwkgKiBBbGwgY2FsbGVycyBvZiBzYnAyX2FsbG93X2Jsb2NrKCkgYW5kIGFsbCBjYWxsZXJzIG9mIHNicDJfdW5ibG9jaygpCisJICogYXJlIGN1cnJlbnRseSBzZXJpYWxpemVkIGFnYWluc3QgZWFjaCBvdGhlci4KKwkgKiBBbmQgYSB3cm9uZyByZXN1bHQgaW4gc2JwMl9jb25kaXRpb25hbGx5X2Jsb2NrKCkncyBhY2Nlc3Mgb2YKKwkgKiBkb250X2Jsb2NrIGlzIHJhdGhlciBoYXJtbGVzcywgaXQgc2ltcGx5IG1pc3NlcyBpdHMgZmlyc3QgY2hhbmNlLgorCSAqLworCS0tbHUtPnRndC0+ZG9udF9ibG9jazsKK30KKworLyoKKyAqIEJsb2NrcyBsdS0+dGd0IGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgLSBMb2dpbiwgSU5RVUlSWSwgYW5kIGhpZ2gtbGV2ZWwgU0NTSSBzZXR1cCBvZiBhbGwgb2YgdGhlIHRhcmdldCdzCisgKiAgICAgbG9naWNhbCB1bml0cyBoYXZlIGJlZW4gZmluaXNoZWQgKGluZGljYXRlZCBieSBkb250X2Jsb2NrID09IDApLgorICogICAtIGx1LT5nZW5lcmF0aW9uIGlzIHN0YWxlLgorICoKKyAqIE5vdGUsIHNjc2lfYmxvY2tfcmVxdWVzdHMoKSBtdXN0IGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGNhcmQtPmxvY2ssCisgKiBvdGhlcndpc2UgaXQgbWlnaHQgZm9pbCBzYnAyX1tjb25kaXRpb25hbGx5X111bmJsb2NrKCkncyBhdHRlbXB0IHRvCisgKiB1bmJsb2NrIHRoZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkIHNicDJfY29uZGl0aW9uYWxseV9ibG9jayhzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQoreworCXN0cnVjdCBzYnAyX3RhcmdldCAqdGd0ID0gbHUtPnRndDsKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGZ3X2RldmljZSh0Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpLT5jYXJkOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0KKwkJY29udGFpbmVyX29mKCh2b2lkICopdGd0LCBzdHJ1Y3QgU2NzaV9Ib3N0LCBob3N0ZGF0YVswXSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJaWYgKCF0Z3QtPmRvbnRfYmxvY2sgJiYgIWx1LT5ibG9ja2VkICYmCisJICAgIGx1LT5nZW5lcmF0aW9uICE9IGNhcmQtPmdlbmVyYXRpb24pIHsKKwkJbHUtPmJsb2NrZWQgPSB0cnVlOworCQlpZiAoKyt0Z3QtPmJsb2NrZWQgPT0gMSkKKwkJCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBVbmJsb2NrcyBsdS0+dGd0IGFzIHNvb24gYXMgYWxsIGl0cyBsb2dpY2FsIHVuaXRzIGNhbiBiZSB1bmJsb2NrZWQuCisgKiBOb3RlLCBpdCBpcyBoYXJtbGVzcyB0byBydW4gc2NzaV91bmJsb2NrX3JlcXVlc3RzKCkgb3V0c2lkZSB0aGUKKyAqIGNhcmQtPmxvY2sgcHJvdGVjdGVkIHNlY3Rpb24uICBPbiB0aGUgb3RoZXIgaGFuZCwgcnVubmluZyBpdCBpbnNpZGUKKyAqIHRoZSBzZWN0aW9uIG1pZ2h0IGNsYXNoIHdpdGggc2hvc3QtPmhvc3RfbG9jay4KKyAqLworc3RhdGljIHZvaWQgc2JwMl9jb25kaXRpb25hbGx5X3VuYmxvY2soc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKK3sKKwlzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCA9IGx1LT50Z3Q7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBmd19kZXZpY2UodGd0LT51bml0LT5kZXZpY2UucGFyZW50KS0+Y2FyZDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9CisJCWNvbnRhaW5lcl9vZigodm9pZCAqKXRndCwgc3RydWN0IFNjc2lfSG9zdCwgaG9zdGRhdGFbMF0pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCB1bmJsb2NrID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWlmIChsdS0+YmxvY2tlZCAmJiBsdS0+Z2VuZXJhdGlvbiA9PSBjYXJkLT5nZW5lcmF0aW9uKSB7CisJCWx1LT5ibG9ja2VkID0gZmFsc2U7CisJCXVuYmxvY2sgPSAtLXRndC0+YmxvY2tlZCA9PSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAodW5ibG9jaykKKwkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNob3N0KTsKK30KKworLyoKKyAqIFByZXZlbnRzIGZ1dHVyZSBibG9ja2luZyBvZiB0Z3QgYW5kIHVuYmxvY2tzIGl0LgorICogTm90ZSwgaXQgaXMgaGFybWxlc3MgdG8gcnVuIHNjc2lfdW5ibG9ja19yZXF1ZXN0cygpIG91dHNpZGUgdGhlCisgKiBjYXJkLT5sb2NrIHByb3RlY3RlZCBzZWN0aW9uLiAgT24gdGhlIG90aGVyIGhhbmQsIHJ1bm5pbmcgaXQgaW5zaWRlCisgKiB0aGUgc2VjdGlvbiBtaWdodCBjbGFzaCB3aXRoIHNob3N0LT5ob3N0X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHNicDJfdW5ibG9jayhzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCkKK3sKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGZ3X2RldmljZSh0Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpLT5jYXJkOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0KKwkJY29udGFpbmVyX29mKCh2b2lkICopdGd0LCBzdHJ1Y3QgU2NzaV9Ib3N0LCBob3N0ZGF0YVswXSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJKyt0Z3QtPmRvbnRfYmxvY2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCisJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNob3N0KTsKK30KKworc3RhdGljIGludCBzYnAyX2x1bjJpbnQodTE2IGx1bikKK3sKKwlzdHJ1Y3Qgc2NzaV9sdW4gZWlnaHRfYnl0ZXNfbHVuOworCisJbWVtc2V0KCZlaWdodF9ieXRlc19sdW4sIDAsIHNpemVvZihlaWdodF9ieXRlc19sdW4pKTsKKwllaWdodF9ieXRlc19sdW4uc2NzaV9sdW5bMF0gPSAobHVuID4+IDgpICYgMHhmZjsKKwllaWdodF9ieXRlc19sdW4uc2NzaV9sdW5bMV0gPSBsdW4gJiAweGZmOworCisJcmV0dXJuIHNjc2lsdW5fdG9faW50KCZlaWdodF9ieXRlc19sdW4pOwogfQogCiBzdGF0aWMgdm9pZCBzYnAyX3JlbGVhc2VfdGFyZ2V0KHN0cnVjdCBrcmVmICprcmVmKQpAQCAtNjIxLDI2ICs3NjQsMzEgQEAKIAlzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LCAqbmV4dDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9CiAJCWNvbnRhaW5lcl9vZigodm9pZCAqKXRndCwgc3RydWN0IFNjc2lfSG9zdCwgaG9zdGRhdGFbMF0pOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UodGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsdSwgbmV4dCwgJnRndC0+bHVfbGlzdCwgbGluaykgewotCQlpZiAobHUtPnNkZXYpCi0JCQlzY3NpX3JlbW92ZV9kZXZpY2UobHUtPnNkZXYpOworCS8qIHByZXZlbnQgZGVhZGxvY2tzICovCisJc2JwMl91bmJsb2NrKHRndCk7CiAKLQkJaWYgKCFmd19kZXZpY2VfaXNfc2h1dGRvd24oZGV2aWNlKSkKLQkJCXNicDJfc2VuZF9tYW5hZ2VtZW50X29yYihsdSwgdGd0LT5ub2RlX2lkLAotCQkJCQlsdS0+Z2VuZXJhdGlvbiwgU0JQMl9MT0dPVVRfUkVRVUVTVCwKLQkJCQkJbHUtPmxvZ2luX2lkLCBOVUxMKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHUsIG5leHQsICZ0Z3QtPmx1X2xpc3QsIGxpbmspIHsKKwkJc2RldiA9IHNjc2lfZGV2aWNlX2xvb2t1cChzaG9zdCwgMCwgMCwgc2JwMl9sdW4yaW50KGx1LT5sdW4pKTsKKwkJaWYgKHNkZXYpIHsKKwkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKKwkJCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKKwkJfQorCQlzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIobHUsIHRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sCisJCQkJU0JQMl9MT0dPVVRfUkVRVUVTVCwgbHUtPmxvZ2luX2lkLCBOVUxMKTsKIAogCQlmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIoJmx1LT5hZGRyZXNzX2hhbmRsZXIpOwogCQlsaXN0X2RlbCgmbHUtPmxpbmspOwogCQlrZnJlZShsdSk7CiAJfQogCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOwotCWZ3X25vdGlmeSgicmVsZWFzZWQgJXNcbiIsIHRndC0+dW5pdC0+ZGV2aWNlLmJ1c19pZCk7CisJZndfbm90aWZ5KCJyZWxlYXNlZCAlc1xuIiwgdGd0LT5idXNfaWQpOwogCi0JcHV0X2RldmljZSgmdGd0LT51bml0LT5kZXZpY2UpOworCWZ3X3VuaXRfcHV0KHRndC0+dW5pdCk7CiAJc2NzaV9ob3N0X3B1dChzaG9zdCk7CisJZndfZGV2aWNlX3B1dChkZXZpY2UpOwogfQogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNicDJfd3E7CkBAIC02NjAsNzcgKzgwOCwxNTQgQEAKIAlrcmVmX3B1dCgmdGd0LT5rcmVmLCBzYnAyX3JlbGVhc2VfdGFyZ2V0KTsKIH0KIAorc3RhdGljIHZvaWQKK2NvbXBsZXRlX3NldF9idXN5X3RpbWVvdXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKKwkJCSAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZG9uZSkKK3sKKwljb21wbGV0ZShkb25lKTsKK30KKworLyoKKyAqIFdyaXRlIHJldHJhbnNtaXQgcmV0cnkgdmFsdWVzIGludG8gdGhlIEJVU1lfVElNRU9VVCByZWdpc3Rlci4KKyAqIC0gVGhlIHNpbmdsZS1waGFzZSByZXRyeSBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgYnkgYWxsIFNCUC0yIGRldmljZXMsIGJ1dCB0aGUKKyAqICAgZGVmYXVsdCByZXRyeV9saW1pdCB2YWx1ZSBpcyAwIChpLmUuIG5ldmVyIHJldHJ5IHRyYW5zbWlzc2lvbikuIFdlIHdyaXRlIGEKKyAqICAgc2FuZXIgdmFsdWUgYWZ0ZXIgbG9nZ2luZyBpbnRvIHRoZSBkZXZpY2UuCisgKiAtIFRoZSBkdWFsLXBoYXNlIHJldHJ5IHByb3RvY29sIGlzIG9wdGlvbmFsIHRvIGltcGxlbWVudCwgYW5kIGlmIG5vdAorICogICBzdXBwb3J0ZWQsIHdyaXRlcyB0byB0aGUgZHVhbC1waGFzZSBwb3J0aW9uIG9mIHRoZSByZWdpc3RlciB3aWxsIGJlCisgKiAgIGlnbm9yZWQuIFdlIHRyeSB0byB3cml0ZSB0aGUgb3JpZ2luYWwgMTM5NC0xOTk1IGRlZmF1bHQgaGVyZS4KKyAqIC0gSW4gdGhlIGNhc2Ugb2YgZGV2aWNlcyB0aGF0IGFyZSBhbHNvIFNCUC0zLWNvbXBsaWFudCwgYWxsIHdyaXRlcyBhcmUKKyAqICAgaWdub3JlZCwgYXMgdGhlIHJlZ2lzdGVyIGlzIHJlYWQtb25seSwgYnV0IGNvbnRhaW5zIHNpbmdsZS1waGFzZSByZXRyeSBvZgorICogICAxNSwgd2hpY2ggaXMgd2hhdCB3ZSdyZSB0cnlpbmcgdG8gc2V0IGZvciBhbGwgU0JQLTIgZGV2aWNlIGFueXdheSwgc28gdGhpcworICogICB3cml0ZSBhdHRlbXB0IGlzIHNhZmUgYW5kIHlpZWxkcyBtb3JlIGNvbnNpc3RlbnQgYmVoYXZpb3IgZm9yIGFsbCBkZXZpY2VzLgorICoKKyAqIFNlZSBzZWN0aW9uIDguMy4yLjMuNSBvZiB0aGUgMTM5NC0xOTk1IHNwZWMsIHNlY3Rpb24gNi4yIG9mIHRoZSBTQlAtMiBzcGVjLAorICogYW5kIHNlY3Rpb24gNi40IG9mIHRoZSBTQlAtMyBzcGVjIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgKi8KK3N0YXRpYyB2b2lkIHNicDJfc2V0X2J1c3lfdGltZW91dChzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShsdS0+dGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKKwlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdDsKKwlzdGF0aWMgX19iZTMyIGJ1c3lfdGltZW91dDsKKworCWJ1c3lfdGltZW91dCA9IGNwdV90b19iZTMyKFNCUDJfQ1lDTEVfTElNSVQgfCBTQlAyX1JFVFJZX0xJTUlUKTsKKworCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZ0LCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCisJCQlsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCisJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNZX1RJTUVPVVQsICZidXN5X3RpbWVvdXQsCisJCQlzaXplb2YoYnVzeV90aW1lb3V0KSwgY29tcGxldGVfc2V0X2J1c3lfdGltZW91dCwgJmRvbmUpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworfQorCiBzdGF0aWMgdm9pZCBzYnAyX3JlY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdGF0aWMgdm9pZCBzYnAyX2xvZ2luKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCwgd29yay53b3JrKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9Ci0JCWNvbnRhaW5lcl9vZigodm9pZCAqKWx1LT50Z3QsIHN0cnVjdCBTY3NpX0hvc3QsIGhvc3RkYXRhWzBdKTsKKwlzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCA9IGx1LT50Z3Q7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKHRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwotCXN0cnVjdCBzY3NpX2x1biBlaWdodF9ieXRlc19sdW47Ci0Jc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBsdS0+dGd0LT51bml0OwotCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZSh1bml0LT5kZXZpY2UucGFyZW50KTsKIAlzdHJ1Y3Qgc2JwMl9sb2dpbl9yZXNwb25zZSByZXNwb25zZTsKIAlpbnQgZ2VuZXJhdGlvbiwgbm9kZV9pZCwgbG9jYWxfbm9kZV9pZDsKIAorCWlmIChmd19kZXZpY2VfaXNfc2h1dGRvd24oZGV2aWNlKSkKKwkJZ290byBvdXQ7CisKIAlnZW5lcmF0aW9uICAgID0gZGV2aWNlLT5nZW5lcmF0aW9uOwogCXNtcF9ybWIoKTsgICAgLyogbm9kZV9pZCBtdXN0IG5vdCBiZSBvbGRlciB0aGFuIGdlbmVyYXRpb24gKi8KIAlub2RlX2lkICAgICAgID0gZGV2aWNlLT5ub2RlX2lkOwogCWxvY2FsX25vZGVfaWQgPSBkZXZpY2UtPmNhcmQtPm5vZGVfaWQ7CiAKKwkvKiBJZiB0aGlzIGlzIGEgcmUtbG9naW4gYXR0ZW1wdCwgbG9nIG91dCwgb3Igd2UgbWlnaHQgYmUgcmVqZWN0ZWQuICovCisJaWYgKGx1LT5oYXNfc2RldikKKwkJc2JwMl9zZW5kX21hbmFnZW1lbnRfb3JiKGx1LCBkZXZpY2UtPm5vZGVfaWQsIGdlbmVyYXRpb24sCisJCQkJU0JQMl9MT0dPVVRfUkVRVUVTVCwgbHUtPmxvZ2luX2lkLCBOVUxMKTsKKwogCWlmIChzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIobHUsIG5vZGVfaWQsIGdlbmVyYXRpb24sCiAJCQkJU0JQMl9MT0dJTl9SRVFVRVNULCBsdS0+bHVuLCAmcmVzcG9uc2UpIDwgMCkgewotCQlpZiAobHUtPnJldHJpZXMrKyA8IDUpCisJCWlmIChsdS0+cmV0cmllcysrIDwgNSkgewogCQkJc2JwMl9xdWV1ZV93b3JrKGx1LCBESVZfUk9VTkRfVVAoSFosIDUpKTsKLQkJZWxzZQotCQkJZndfZXJyb3IoImZhaWxlZCB0byBsb2dpbiB0byAlcyBMVU4gJTA0eFxuIiwKLQkJCQkgdW5pdC0+ZGV2aWNlLmJ1c19pZCwgbHUtPmx1bik7CisJCX0gZWxzZSB7CisJCQlmd19lcnJvcigiJXM6IGZhaWxlZCB0byBsb2dpbiB0byBMVU4gJTA0eFxuIiwKKwkJCQkgdGd0LT5idXNfaWQsIGx1LT5sdW4pOworCQkJLyogTGV0IGFueSB3YWl0aW5nIEkvTyBmYWlsIGZyb20gbm93IG9uLiAqLworCQkJc2JwMl91bmJsb2NrKGx1LT50Z3QpOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIAotCWx1LT5nZW5lcmF0aW9uICAgICAgICA9IGdlbmVyYXRpb247Ci0JbHUtPnRndC0+bm9kZV9pZCAgICAgID0gbm9kZV9pZDsKLQlsdS0+dGd0LT5hZGRyZXNzX2hpZ2ggPSBsb2NhbF9ub2RlX2lkIDw8IDE2OworCXRndC0+bm9kZV9pZAkgID0gbm9kZV9pZDsKKwl0Z3QtPmFkZHJlc3NfaGlnaCA9IGxvY2FsX25vZGVfaWQgPDwgMTY7CisJc2JwMl9zZXRfZ2VuZXJhdGlvbihsdSwgZ2VuZXJhdGlvbik7CiAKLQkvKiBHZXQgY29tbWFuZCBibG9jayBhZ2VudCBvZmZzZXQgYW5kIGxvZ2luIGlkLiAqLwogCWx1LT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MgPQotCQkoKHU2NCkgKHJlc3BvbnNlLmNvbW1hbmRfYmxvY2tfYWdlbnQuaGlnaCAmIDB4ZmZmZikgPDwgMzIpIHwKLQkJcmVzcG9uc2UuY29tbWFuZF9ibG9ja19hZ2VudC5sb3c7Ci0JbHUtPmxvZ2luX2lkID0gTE9HSU5fUkVTUE9OU0VfR0VUX0xPR0lOX0lEKHJlc3BvbnNlKTsKKwkJKCh1NjQpKGJlMzJfdG9fY3B1KHJlc3BvbnNlLmNvbW1hbmRfYmxvY2tfYWdlbnQuaGlnaCkgJiAweGZmZmYpCisJCSAgICAgIDw8IDMyKSB8IGJlMzJfdG9fY3B1KHJlc3BvbnNlLmNvbW1hbmRfYmxvY2tfYWdlbnQubG93KTsKKwlsdS0+bG9naW5faWQgPSBiZTMyX3RvX2NwdShyZXNwb25zZS5taXNjKSAmIDB4ZmZmZjsKIAotCWZ3X25vdGlmeSgibG9nZ2VkIGluIHRvICVzIExVTiAlMDR4ICglZCByZXRyaWVzKVxuIiwKLQkJICB1bml0LT5kZXZpY2UuYnVzX2lkLCBsdS0+bHVuLCBsdS0+cmV0cmllcyk7CisJZndfbm90aWZ5KCIlczogbG9nZ2VkIGluIHRvIExVTiAlMDR4ICglZCByZXRyaWVzKVxuIiwKKwkJICB0Z3QtPmJ1c19pZCwgbHUtPmx1biwgbHUtPnJldHJpZXMpOwogCi0jaWYgMAotCS8qIEZJWE1FOiBUaGUgbGludXgxMzk0IHNicDIgZG9lcyB0aGlzIGxhc3Qgc3RlcC4gKi8KLQlzYnAyX3NldF9idXN5X3RpbWVvdXQoc2NzaV9pZCk7Ci0jZW5kaWYKKwkvKiBzZXQgYXBwcm9wcmlhdGUgcmV0cnkgbGltaXQocykgaW4gQlVTWV9USU1FT1VUIHJlZ2lzdGVyICovCisJc2JwMl9zZXRfYnVzeV90aW1lb3V0KGx1KTsKIAogCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZsdS0+d29yaywgc2JwMl9yZWNvbm5lY3QpOwogCXNicDJfYWdlbnRfcmVzZXQobHUpOwogCi0JbWVtc2V0KCZlaWdodF9ieXRlc19sdW4sIDAsIHNpemVvZihlaWdodF9ieXRlc19sdW4pKTsKLQllaWdodF9ieXRlc19sdW4uc2NzaV9sdW5bMF0gPSAobHUtPmx1biA+PiA4KSAmIDB4ZmY7Ci0JZWlnaHRfYnl0ZXNfbHVuLnNjc2lfbHVuWzFdID0gbHUtPmx1biAmIDB4ZmY7Ci0KLQlzZGV2ID0gX19zY3NpX2FkZF9kZXZpY2Uoc2hvc3QsIDAsIDAsCi0JCQkJIHNjc2lsdW5fdG9faW50KCZlaWdodF9ieXRlc19sdW4pLCBsdSk7Ci0JaWYgKElTX0VSUihzZGV2KSkgewotCQlzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIobHUsIG5vZGVfaWQsIGdlbmVyYXRpb24sCi0JCQkJU0JQMl9MT0dPVVRfUkVRVUVTVCwgbHUtPmxvZ2luX2lkLCBOVUxMKTsKLQkJLyoKLQkJICogU2V0IHRoaXMgYmFjayB0byBzYnAyX2xvZ2luIHNvIHdlIGZhbGwgYmFjayBhbmQKLQkJICogcmV0cnkgbG9naW4gb24gYnVzIHJlc2V0LgotCQkgKi8KLQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmx1LT53b3JrLCBzYnAyX2xvZ2luKTsKLQl9IGVsc2UgewotCQlsdS0+c2RldiA9IHNkZXY7Ci0JCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKKwkvKiBUaGlzIHdhcyBhIHJlLWxvZ2luLiAqLworCWlmIChsdS0+aGFzX3NkZXYpIHsKKwkJc2JwMl9jYW5jZWxfb3JicyhsdSk7CisJCXNicDJfY29uZGl0aW9uYWxseV91bmJsb2NrKGx1KTsKKwkJZ290byBvdXQ7CiAJfQorCisJaWYgKGx1LT50Z3QtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX0RFTEFZX0lOUVVJUlkpCisJCXNzbGVlcChTQlAyX0lOUVVJUllfREVMQVkpOworCisJc2hvc3QgPSBjb250YWluZXJfb2YoKHZvaWQgKil0Z3QsIHN0cnVjdCBTY3NpX0hvc3QsIGhvc3RkYXRhWzBdKTsKKwlzZGV2ID0gX19zY3NpX2FkZF9kZXZpY2Uoc2hvc3QsIDAsIDAsIHNicDJfbHVuMmludChsdS0+bHVuKSwgbHUpOworCS8qCisJICogRklYTUU6ICBXZSBhcmUgdW5hYmxlIHRvIHBlcmZvcm0gcmVjb25uZWN0cyB3aGlsZSBpbiBzYnAyX2xvZ2luKCkuCisJICogVGhlcmVmb3JlIF9fc2NzaV9hZGRfZGV2aWNlKCkgd2lsbCBnZXQgaW50byB0cm91YmxlIGlmIGEgYnVzIHJlc2V0CisJICogaGFwcGVucyBpbiBwYXJhbGxlbC4gIEl0IHdpbGwgZWl0aGVyIGZhaWwgb3IgbGVhdmUgdXMgd2l0aCBhbgorCSAqIHVudXNhYmxlIHNkZXYuICBBcyBhIHdvcmthcm91bmQgd2UgY2hlY2sgZm9yIHRoaXMgYW5kIHJldHJ5IHRoZQorCSAqIHdob2xlIGxvZ2luIGFuZCBTQ1NJIHByb2JpbmcuCisJICovCisKKwkvKiBSZXBvcnRlZCBlcnJvciBkdXJpbmcgX19zY3NpX2FkZF9kZXZpY2UoKSAqLworCWlmIChJU19FUlIoc2RldikpCisJCWdvdG8gb3V0X2xvZ291dF9sb2dpbjsKKworCS8qIFVucmVwb3J0ZWQgZXJyb3IgZHVyaW5nIF9fc2NzaV9hZGRfZGV2aWNlKCkgKi8KKwlzbXBfcm1iKCk7IC8qIGdldCBjdXJyZW50IGNhcmQgZ2VuZXJhdGlvbiAqLworCWlmIChnZW5lcmF0aW9uICE9IGRldmljZS0+Y2FyZC0+Z2VuZXJhdGlvbikgeworCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CisJCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKKwkJZ290byBvdXRfbG9nb3V0X2xvZ2luOworCX0KKworCS8qIE5vIGVycm9yIGR1cmluZyBfX3Njc2lfYWRkX2RldmljZSgpICovCisJbHUtPmhhc19zZGV2ID0gdHJ1ZTsKKwlzY3NpX2RldmljZV9wdXQoc2Rldik7CisJc2JwMl9hbGxvd19ibG9jayhsdSk7CisJZ290byBvdXQ7CisKKyBvdXRfbG9nb3V0X2xvZ2luOgorCXNtcF9ybWIoKTsgLyogZ2VuZXJhdGlvbiBtYXkgaGF2ZSBjaGFuZ2VkICovCisJZ2VuZXJhdGlvbiA9IGRldmljZS0+Z2VuZXJhdGlvbjsKKwlzbXBfcm1iKCk7IC8qIG5vZGVfaWQgbXVzdCBub3QgYmUgb2xkZXIgdGhhbiBnZW5lcmF0aW9uICovCisKKwlzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIobHUsIGRldmljZS0+bm9kZV9pZCwgZ2VuZXJhdGlvbiwKKwkJCQkgU0JQMl9MT0dPVVRfUkVRVUVTVCwgbHUtPmxvZ2luX2lkLCBOVUxMKTsKKwkvKgorCSAqIElmIGEgYnVzIHJlc2V0IGhhcHBlbmVkLCBzYnAyX3VwZGF0ZSB3aWxsIGhhdmUgcmVxdWV1ZWQKKwkgKiBsdS0+d29yayBhbHJlYWR5LiAgUmVzZXQgdGhlIHdvcmsgZnJvbSByZWNvbm5lY3QgdG8gbG9naW4uCisJICovCisJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmx1LT53b3JrLCBzYnAyX2xvZ2luKTsKICBvdXQ6Ci0Jc2JwMl90YXJnZXRfcHV0KGx1LT50Z3QpOworCXNicDJfdGFyZ2V0X3B1dCh0Z3QpOwogfQogCiBzdGF0aWMgaW50IHNicDJfYWRkX2xvZ2ljYWxfdW5pdChzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgaW50IGx1bl9lbnRyeSkKQEAgLTc1MSwxMCArOTc2LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWx1LT50Z3QgID0gdGd0OwotCWx1LT5zZGV2ID0gTlVMTDsKLQlsdS0+bHVuICA9IGx1bl9lbnRyeSAmIDB4ZmZmZjsKLQlsdS0+cmV0cmllcyA9IDA7CisJbHUtPnRndCAgICAgID0gdGd0OworCWx1LT5sdW4gICAgICA9IGx1bl9lbnRyeSAmIDB4ZmZmZjsKKwlsdS0+cmV0cmllcyAgPSAwOworCWx1LT5oYXNfc2RldiA9IGZhbHNlOworCWx1LT5ibG9ja2VkICA9IGZhbHNlOworCSsrdGd0LT5kb250X2Jsb2NrOwogCUlOSVRfTElTVF9IRUFEKCZsdS0+b3JiX2xpc3QpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZsdS0+d29yaywgc2JwMl9sb2dpbik7CiAKQEAgLTgxMyw3ICsxMDQwLDcgQEAKIAkJCWlmICh0aW1lb3V0ID4gdGd0LT5tZ3Rfb3JiX3RpbWVvdXQpCiAJCQkJZndfbm90aWZ5KCIlczogY29uZmlnIHJvbSBjb250YWlucyAlZHMgIgogCQkJCQkgICJtYW5hZ2VtZW50IE9SQiB0aW1lb3V0LCBsaW1pdGluZyAiCi0JCQkJCSAgInRvICVkc1xuIiwgdGd0LT51bml0LT5kZXZpY2UuYnVzX2lkLAorCQkJCQkgICJ0byAlZHNcbiIsIHRndC0+YnVzX2lkLAogCQkJCQkgIHRpbWVvdXQgLyAxMDAwLAogCQkJCQkgIHRndC0+bWd0X29yYl90aW1lb3V0IC8gMTAwMCk7CiAJCQlicmVhazsKQEAgLTgzNiwxMiArMTA2MywxMiBAQAogCQkJCSAgdTMyIGZpcm13YXJlX3JldmlzaW9uKQogewogCWludCBpOwotCXVuc2lnbmVkIHcgPSBzYnAyX3BhcmFtX3dvcmthcm91bmRzOworCXVuc2lnbmVkIGludCB3ID0gc2JwMl9wYXJhbV93b3JrYXJvdW5kczsKIAogCWlmICh3KQogCQlmd19ub3RpZnkoIlBsZWFzZSBub3RpZnkgbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAiCiAJCQkgICJpZiB5b3UgbmVlZCB0aGUgd29ya2Fyb3VuZHMgcGFyYW1ldGVyIGZvciAlc1xuIiwKLQkJCSAgdGd0LT51bml0LT5kZXZpY2UuYnVzX2lkKTsKKwkJCSAgdGd0LT5idXNfaWQpOwogCiAJaWYgKHcgJiBTQlAyX1dPUktBUk9VTkRfT1ZFUlJJREUpCiAJCWdvdG8gb3V0OwpAQCAtODYzLDggKzEwOTAsNyBAQAogCWlmICh3KQogCQlmd19ub3RpZnkoIldvcmthcm91bmRzIGZvciAlczogMHgleCAiCiAJCQkgICIoZmlybXdhcmVfcmV2aXNpb24gMHglMDZ4LCBtb2RlbF9pZCAweCUwNngpXG4iLAotCQkJICB0Z3QtPnVuaXQtPmRldmljZS5idXNfaWQsCi0JCQkgIHcsIGZpcm13YXJlX3JldmlzaW9uLCBtb2RlbCk7CisJCQkgIHRndC0+YnVzX2lkLCB3LCBmaXJtd2FyZV9yZXZpc2lvbiwgbW9kZWwpOwogCXRndC0+d29ya2Fyb3VuZHMgPSB3OwogfQogCkBAIC04ODgsNiArMTExNCw4IEBACiAJdGd0LT51bml0ID0gdW5pdDsKIAlrcmVmX2luaXQoJnRndC0+a3JlZik7CiAJSU5JVF9MSVNUX0hFQUQoJnRndC0+bHVfbGlzdCk7CisJdGd0LT5idXNfaWQgPSB1bml0LT5kZXZpY2UuYnVzX2lkOworCXRndC0+Z3VpZCA9ICh1NjQpZGV2aWNlLT5jb25maWdfcm9tWzNdIDw8IDMyIHwgZGV2aWNlLT5jb25maWdfcm9tWzRdOwogCiAJaWYgKGZ3X2RldmljZV9lbmFibGVfcGh5c19kbWEoZGV2aWNlKSA8IDApCiAJCWdvdG8gZmFpbF9zaG9zdF9wdXQ7CkBAIC04OTUsNiArMTEyMyw5IEBACiAJaWYgKHNjc2lfYWRkX2hvc3Qoc2hvc3QsICZ1bml0LT5kZXZpY2UpIDwgMCkKIAkJZ290byBmYWlsX3Nob3N0X3B1dDsKIAorCWZ3X2RldmljZV9nZXQoZGV2aWNlKTsKKwlmd191bml0X2dldCh1bml0KTsKKwogCS8qIEluaXRpYWxpemUgdG8gdmFsdWVzIHRoYXQgd29uJ3QgbWF0Y2ggYW55dGhpbmcgaW4gb3VyIHRhYmxlLiAqLwogCWZpcm13YXJlX3JldmlzaW9uID0gMHhmZjAwMDAwMDsKIAltb2RlbCA9IDB4ZmYwMDAwMDA7CkBAIC05MDksOCArMTE0MCw2IEBACiAKIAlzYnAyX2luaXRfd29ya2Fyb3VuZHModGd0LCBtb2RlbCwgZmlybXdhcmVfcmV2aXNpb24pOwogCi0JZ2V0X2RldmljZSgmdW5pdC0+ZGV2aWNlKTsKLQogCS8qIERvIHRoZSBsb2dpbiBpbiBhIHdvcmtxdWV1ZSBzbyB3ZSBjYW4gZWFzaWx5IHJlc2NoZWR1bGUgcmV0cmllcy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGx1LCAmdGd0LT5sdV9saXN0LCBsaW5rKQogCQlzYnAyX3F1ZXVlX3dvcmsobHUsIDApOwpAQCAtOTM4LDEwICsxMTY3LDEzIEBACiB7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQsIHdvcmsud29yayk7Ci0Jc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBsdS0+dGd0LT51bml0OwotCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZSh1bml0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCA9IGx1LT50Z3Q7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKHRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7CiAJaW50IGdlbmVyYXRpb24sIG5vZGVfaWQsIGxvY2FsX25vZGVfaWQ7CiAKKwlpZiAoZndfZGV2aWNlX2lzX3NodXRkb3duKGRldmljZSkpCisJCWdvdG8gb3V0OworCiAJZ2VuZXJhdGlvbiAgICA9IGRldmljZS0+Z2VuZXJhdGlvbjsKIAlzbXBfcm1iKCk7ICAgIC8qIG5vZGVfaWQgbXVzdCBub3QgYmUgb2xkZXIgdGhhbiBnZW5lcmF0aW9uICovCiAJbm9kZV9pZCAgICAgICA9IGRldmljZS0+bm9kZV9pZDsKQEAgLTk1MCwxMCArMTE4MiwxNyBAQAogCWlmIChzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIobHUsIG5vZGVfaWQsIGdlbmVyYXRpb24sCiAJCQkJICAgICBTQlAyX1JFQ09OTkVDVF9SRVFVRVNULAogCQkJCSAgICAgbHUtPmxvZ2luX2lkLCBOVUxMKSA8IDApIHsKLQkJaWYgKGx1LT5yZXRyaWVzKysgPj0gNSkgewotCQkJZndfZXJyb3IoImZhaWxlZCB0byByZWNvbm5lY3QgdG8gJXNcbiIsCi0JCQkJIHVuaXQtPmRldmljZS5idXNfaWQpOwotCQkJLyogRmFsbCBiYWNrIGFuZCB0cnkgdG8gbG9nIGluIGFnYWluLiAqLworCQkvKgorCQkgKiBJZiByZWNvbm5lY3Qgd2FzIGltcG9zc2libGUgZXZlbiB0aG91Z2ggd2UgYXJlIGluIHRoZQorCQkgKiBjdXJyZW50IGdlbmVyYXRpb24sIGZhbGwgYmFjayBhbmQgdHJ5IHRvIGxvZyBpbiBhZ2Fpbi4KKwkJICoKKwkJICogV2UgY291bGQgY2hlY2sgZm9yICJGdW5jdGlvbiByZWplY3RlZCIgc3RhdHVzLCBidXQKKwkJICogbG9va2luZyBhdCB0aGUgYnVzIGdlbmVyYXRpb24gYXMgc2ltcGxlciBhbmQgbW9yZSBnZW5lcmFsLgorCQkgKi8KKwkJc21wX3JtYigpOyAvKiBnZXQgY3VycmVudCBjYXJkIGdlbmVyYXRpb24gKi8KKwkJaWYgKGdlbmVyYXRpb24gPT0gZGV2aWNlLT5jYXJkLT5nZW5lcmF0aW9uIHx8CisJCSAgICBsdS0+cmV0cmllcysrID49IDUpIHsKKwkJCWZ3X2Vycm9yKCIlczogZmFpbGVkIHRvIHJlY29ubmVjdFxuIiwgdGd0LT5idXNfaWQpOwogCQkJbHUtPnJldHJpZXMgPSAwOwogCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmx1LT53b3JrLCBzYnAyX2xvZ2luKTsKIAkJfQpAQCAtOTYxLDE3ICsxMjAwLDE4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWx1LT5nZW5lcmF0aW9uICAgICAgICA9IGdlbmVyYXRpb247Ci0JbHUtPnRndC0+bm9kZV9pZCAgICAgID0gbm9kZV9pZDsKLQlsdS0+dGd0LT5hZGRyZXNzX2hpZ2ggPSBsb2NhbF9ub2RlX2lkIDw8IDE2OworCXRndC0+bm9kZV9pZCAgICAgID0gbm9kZV9pZDsKKwl0Z3QtPmFkZHJlc3NfaGlnaCA9IGxvY2FsX25vZGVfaWQgPDwgMTY7CisJc2JwMl9zZXRfZ2VuZXJhdGlvbihsdSwgZ2VuZXJhdGlvbik7CiAKLQlmd19ub3RpZnkoInJlY29ubmVjdGVkIHRvICVzIExVTiAlMDR4ICglZCByZXRyaWVzKVxuIiwKLQkJICB1bml0LT5kZXZpY2UuYnVzX2lkLCBsdS0+bHVuLCBsdS0+cmV0cmllcyk7CisJZndfbm90aWZ5KCIlczogcmVjb25uZWN0ZWQgdG8gTFVOICUwNHggKCVkIHJldHJpZXMpXG4iLAorCQkgIHRndC0+YnVzX2lkLCBsdS0+bHVuLCBsdS0+cmV0cmllcyk7CiAKIAlzYnAyX2FnZW50X3Jlc2V0KGx1KTsKIAlzYnAyX2NhbmNlbF9vcmJzKGx1KTsKKwlzYnAyX2NvbmRpdGlvbmFsbHlfdW5ibG9jayhsdSk7CiAgb3V0OgotCXNicDJfdGFyZ2V0X3B1dChsdS0+dGd0KTsKKwlzYnAyX3RhcmdldF9wdXQodGd0KTsKIH0KIAogc3RhdGljIHZvaWQgc2JwMl91cGRhdGUoc3RydWN0IGZ3X3VuaXQgKnVuaXQpCkBAIC05ODYsNiArMTIyNiw3IEBACiAJICogSXRlcmF0aW9uIG92ZXIgdGd0LT5sdV9saXN0IGlzIHRoZXJlZm9yZSBzYWZlIGhlcmUuCiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsdSwgJnRndC0+bHVfbGlzdCwgbGluaykgeworCQlzYnAyX2NvbmRpdGlvbmFsbHlfYmxvY2sobHUpOwogCQlsdS0+cmV0cmllcyA9IDA7CiAJCXNicDJfcXVldWVfd29yayhsdSwgMCk7CiAJfQpAQCAtMTA2Myw3ICsxMzA0LDcgQEAKIAogCWlmIChzdGF0dXMgIT0gTlVMTCkgewogCQlpZiAoU1RBVFVTX0dFVF9ERUFEKCpzdGF0dXMpKQotCQkJc2JwMl9hZ2VudF9yZXNldChvcmItPmx1KTsKKwkJCXNicDJfYWdlbnRfcmVzZXRfbm9fd2FpdChvcmItPmx1KTsKIAogCQlzd2l0Y2ggKFNUQVRVU19HRVRfUkVTUE9OU0UoKnN0YXR1cykpIHsKIAkJY2FzZSBTQlAyX1NUQVRVU19SRVFVRVNUX0NPTVBMRVRFOgpAQCAtMTA4OSw2ICsxMzMwLDcgQEAKIAkJICogb3Igd2hlbiBzZW5kaW5nIHRoZSB3cml0ZSAobGVzcyBsaWtlbHkpLgogCQkgKi8KIAkJcmVzdWx0ID0gRElEX0JVU19CVVNZIDw8IDE2OworCQlzYnAyX2NvbmRpdGlvbmFsbHlfYmxvY2sob3JiLT5sdSk7CiAJfQogCiAJZG1hX3VubWFwX3NpbmdsZShkZXZpY2UtPmNhcmQtPmRldmljZSwgb3JiLT5iYXNlLnJlcXVlc3RfYnVzLApAQCAtMTEyOSw5ICsxMzcxLDEyIEBACiAJICogdGFibGVzLgogCSAqLwogCWlmIChjb3VudCA9PSAxICYmIHNnX2RtYV9sZW4oc2cpIDwgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpIHsKLQkJb3JiLT5yZXF1ZXN0LmRhdGFfZGVzY3JpcHRvci5oaWdoID0gbHUtPnRndC0+YWRkcmVzc19oaWdoOwotCQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmxvdyAgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCW9yYi0+cmVxdWVzdC5taXNjIHw9IENPTU1BTkRfT1JCX0RBVEFfU0laRShzZ19kbWFfbGVuKHNnKSk7CisJCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IuaGlnaCA9CisJCQljcHVfdG9fYmUzMihsdS0+dGd0LT5hZGRyZXNzX2hpZ2gpOworCQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmxvdyAgPQorCQkJY3B1X3RvX2JlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJb3JiLT5yZXF1ZXN0Lm1pc2MgfD0KKwkJCWNwdV90b19iZTMyKENPTU1BTkRfT1JCX0RBVEFfU0laRShzZ19kbWFfbGVuKHNnKSkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExNTIsMTYgKzEzOTcsMTQgQEAKIAkJCQlnb3RvIGZhaWxfcGFnZV90YWJsZTsKIAkJCX0KIAkJCWwgPSBtaW4oc2dfbGVuLCBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSCk7Ci0JCQlvcmItPnBhZ2VfdGFibGVbal0ubG93ID0gc2dfYWRkcjsKLQkJCW9yYi0+cGFnZV90YWJsZVtqXS5oaWdoID0gKGwgPDwgMTYpOworCQkJb3JiLT5wYWdlX3RhYmxlW2pdLmxvdyA9IGNwdV90b19iZTMyKHNnX2FkZHIpOworCQkJb3JiLT5wYWdlX3RhYmxlW2pdLmhpZ2ggPSBjcHVfdG9fYmUzMihsIDw8IDE2KTsKIAkJCXNnX2FkZHIgKz0gbDsKIAkJCXNnX2xlbiAtPSBsOwogCQkJaisrOwogCQl9CiAJfQogCi0JZndfbWVtY3B5X3RvX2JlMzIob3JiLT5wYWdlX3RhYmxlLCBvcmItPnBhZ2VfdGFibGUsCi0JCQkgIHNpemVvZihvcmItPnBhZ2VfdGFibGVbMF0pICogaik7CiAJb3JiLT5wYWdlX3RhYmxlX2J1cyA9CiAJCWRtYV9tYXBfc2luZ2xlKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBvcmItPnBhZ2VfdGFibGUsCiAJCQkgICAgICAgc2l6ZW9mKG9yYi0+cGFnZV90YWJsZSksIERNQV9UT19ERVZJQ0UpOwpAQCAtMTE3NSwxMSArMTQxOCwxMCBAQAogCSAqIGluaXRpYXRvciAoaS5lLiB1cyksIGJ1dCBkYXRhX2Rlc2NyaXB0b3IgY2FuIHJlZmVyIHRvIGRhdGEKIAkgKiBvbiBvdGhlciBub2RlcyBzbyB3ZSBuZWVkIHRvIHB1dCBvdXIgSUQgaW4gZGVzY3JpcHRvci5oaWdoLgogCSAqLwotCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IuaGlnaCA9IGx1LT50Z3QtPmFkZHJlc3NfaGlnaDsKLQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmxvdyAgPSBvcmItPnBhZ2VfdGFibGVfYnVzOwotCW9yYi0+cmVxdWVzdC5taXNjIHw9Ci0JCUNPTU1BTkRfT1JCX1BBR0VfVEFCTEVfUFJFU0VOVCB8Ci0JCUNPTU1BTkRfT1JCX0RBVEFfU0laRShqKTsKKwlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmhpZ2ggPSBjcHVfdG9fYmUzMihsdS0+dGd0LT5hZGRyZXNzX2hpZ2gpOworCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IubG93ICA9IGNwdV90b19iZTMyKG9yYi0+cGFnZV90YWJsZV9idXMpOworCW9yYi0+cmVxdWVzdC5taXNjIHw9IGNwdV90b19iZTMyKENPTU1BTkRfT1JCX1BBR0VfVEFCTEVfUFJFU0VOVCB8CisJCQkJCSBDT01NQU5EX09SQl9EQVRBX1NJWkUoaikpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExOTcsNyArMTQzOSw3IEBACiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UobHUtPnRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7CiAJc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYjsKLQl1bnNpZ25lZCBtYXhfcGF5bG9hZDsKKwl1bnNpZ25lZCBpbnQgbWF4X3BheWxvYWQ7CiAJaW50IHJldHZhbCA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKIAkvKgpAQCAtMTIyNSw4ICsxNDY3LDcgQEAKIAlvcmItPmRvbmUgPSBkb25lOwogCW9yYi0+Y21kICA9IGNtZDsKIAotCW9yYi0+cmVxdWVzdC5uZXh0LmhpZ2ggICA9IFNCUDJfT1JCX05VTEw7Ci0Jb3JiLT5yZXF1ZXN0Lm5leHQubG93ICAgID0gMHgwOworCW9yYi0+cmVxdWVzdC5uZXh0LmhpZ2ggICA9IGNwdV90b19iZTMyKFNCUDJfT1JCX05VTEwpOwogCS8qCiAJICogQXQgc3BlZWQgMTAwIHdlIGNhbiBkbyA1MTIgYnl0ZXMgcGVyIHBhY2tldCwgYXQgc3BlZWQgMjAwLAogCSAqIDEwMjQgYnl0ZXMgcGVyIHBhY2tldCBldGMuICBUaGUgU0JQLTIgbWF4X3BheWxvYWQgZmllbGQKQEAgLTEyMzUsMjUgKzE0NzYsMTcgQEAKIAkgKi8KIAltYXhfcGF5bG9hZCA9IG1pbihkZXZpY2UtPm1heF9zcGVlZCArIDcsCiAJCQkgIGRldmljZS0+Y2FyZC0+bWF4X3JlY2VpdmUgLSAxKTsKLQlvcmItPnJlcXVlc3QubWlzYyA9CisJb3JiLT5yZXF1ZXN0Lm1pc2MgPSBjcHVfdG9fYmUzMigKIAkJQ09NTUFORF9PUkJfTUFYX1BBWUxPQUQobWF4X3BheWxvYWQpIHwKIAkJQ09NTUFORF9PUkJfU1BFRUQoZGV2aWNlLT5tYXhfc3BlZWQpIHwKLQkJQ09NTUFORF9PUkJfTk9USUZZOworCQlDT01NQU5EX09SQl9OT1RJRlkpOwogCiAJaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQotCQlvcmItPnJlcXVlc3QubWlzYyB8PQotCQkJQ09NTUFORF9PUkJfRElSRUNUSU9OKFNCUDJfRElSRUNUSU9OX0ZST01fTUVESUEpOwotCWVsc2UgaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKLQkJb3JiLT5yZXF1ZXN0Lm1pc2MgfD0KLQkJCUNPTU1BTkRfT1JCX0RJUkVDVElPTihTQlAyX0RJUkVDVElPTl9UT19NRURJQSk7CisJCW9yYi0+cmVxdWVzdC5taXNjIHw9IGNwdV90b19iZTMyKENPTU1BTkRfT1JCX0RJUkVDVElPTik7CiAKIAlpZiAoc2NzaV9zZ19jb3VudChjbWQpICYmIHNicDJfbWFwX3NjYXR0ZXJsaXN0KG9yYiwgZGV2aWNlLCBsdSkgPCAwKQogCQlnb3RvIG91dDsKIAotCWZ3X21lbWNweV90b19iZTMyKCZvcmItPnJlcXVlc3QsICZvcmItPnJlcXVlc3QsIHNpemVvZihvcmItPnJlcXVlc3QpKTsKLQotCW1lbXNldChvcmItPnJlcXVlc3QuY29tbWFuZF9ibG9jaywKLQkgICAgICAgMCwgc2l6ZW9mKG9yYi0+cmVxdWVzdC5jb21tYW5kX2Jsb2NrKSk7CiAJbWVtY3B5KG9yYi0+cmVxdWVzdC5jb21tYW5kX2Jsb2NrLCBjbWQtPmNtbmQsIENPTU1BTkRfU0laRSgqY21kLT5jbW5kKSk7CiAKIAlvcmItPmJhc2UuY2FsbGJhY2sgPSBjb21wbGV0ZV9jb21tYW5kX29yYjsKQEAgLTEyNzUsMTMgKzE1MDgsMTQgQEAKIHsKIAlzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1ID0gc2Rldi0+aG9zdGRhdGE7CiAKKwkvKiAoUmUtKUFkZGluZyBsb2dpY2FsIHVuaXRzIHZpYSB0aGUgU0NTSSBzdGFjayBpcyBub3Qgc3VwcG9ydGVkLiAqLworCWlmICghbHUpCisJCXJldHVybiAtRU5PU1lTOworCiAJc2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CiAKLQkvKgotCSAqIFVwZGF0ZSB0aGUgZG1hIGFsaWdubWVudCAobWluaW11bSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGZvcgotCSAqIHN0YXJ0IGFuZCBlbmQgb2YgRE1BIHRyYW5zZmVycykgdG8gYmUgYSBzZWN0b3IKLQkgKi8KLQlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNTExKTsKKwkvKiBTQlAtMiByZXF1aXJlcyBxdWFkbGV0IGFsaWdubWVudCBvZiB0aGUgZGF0YSBidWZmZXJzLiAqLworCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA0IC0gMSk7CiAKIAlpZiAobHUtPnRndC0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNikKIAkJc2Rldi0+aW5xdWlyeV9sZW4gPSAzNjsKQEAgLTEzMTksNyArMTU1Myw3IEBACiB7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAotCWZ3X25vdGlmeSgic2JwMl9zY3NpX2Fib3J0XG4iKTsKKwlmd19ub3RpZnkoIiVzOiBzYnAyX3Njc2lfYWJvcnRcbiIsIGx1LT50Z3QtPmJ1c19pZCk7CiAJc2JwMl9hZ2VudF9yZXNldChsdSk7CiAJc2JwMl9jYW5jZWxfb3JicyhsdSk7CiAKQEAgLTEzMzksMTYgKzE1NzMsMTQgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCXN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHU7Ci0Jc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOwogCiAJaWYgKCFzZGV2KQogCQlyZXR1cm4gMDsKIAogCWx1ID0gc2Rldi0+aG9zdGRhdGE7Ci0JZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJTA4eCUwOHg6JTA2eDolMDR4XG4iLAotCQkJZGV2aWNlLT5jb25maWdfcm9tWzNdLCBkZXZpY2UtPmNvbmZpZ19yb21bNF0sCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTAxNmxseDolMDZ4OiUwNHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWx1LT50Z3QtPmd1aWQsCiAJCQlsdS0+dGd0LT5kaXJlY3RvcnlfaWQsIGx1LT5sdW4pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMKaW5kZXggMTcyYzE4Ni4uMjEzYjBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJmdy10b3BvbG9neS5oIgpAQCAtMTA3LDYgKzEwOCw3IEBACiAJbm9kZS0+bm9kZV9pZCA9IExPQ0FMX0JVUyB8IFNFTEZfSURfUEhZX0lEKHNpZCk7CiAJbm9kZS0+bGlua19vbiA9IFNFTEZfSURfTElOS19PTihzaWQpOwogCW5vZGUtPnBoeV9zcGVlZCA9IFNFTEZfSURfUEhZX1NQRUVEKHNpZCk7CisJbm9kZS0+aW5pdGlhdGVkX3Jlc2V0ID0gU0VMRl9JRF9QSFlfSU5JVElBVE9SKHNpZCk7CiAJbm9kZS0+cG9ydF9jb3VudCA9IHBvcnRfY291bnQ7CiAKIAlhdG9taWNfc2V0KCZub2RlLT5yZWZfY291bnQsIDEpOwpAQCAtMjg4LDEyICsyOTAsMTEgQEAKIAkJCWJldGFfcmVwZWF0ZXJzX3ByZXNlbnQgPSB0cnVlOwogCiAJCS8qCi0JCSAqIElmIGFsbCBQSFlzIGRvZXMgbm90IHJlcG9ydCB0aGUgc2FtZSBnYXAgY291bnQKLQkJICogc2V0dGluZywgd2UgZmFsbCBiYWNrIHRvIDYzIHdoaWNoIHdpbGwgZm9yY2UgYSBnYXAKLQkJICogY291bnQgcmVjb25maWd1cmF0aW9uIGFuZCBhIHJlc2V0LgorCQkgKiBJZiBQSFlzIHJlcG9ydCBkaWZmZXJlbnQgZ2FwIGNvdW50cywgc2V0IGFuIGludmFsaWQgY291bnQKKwkJICogd2hpY2ggd2lsbCBmb3JjZSBhIGdhcCBjb3VudCByZWNvbmZpZ3VyYXRpb24gYW5kIGEgcmVzZXQuCiAJCSAqLwogCQlpZiAoU0VMRl9JRF9HQVBfQ09VTlQocSkgIT0gZ2FwX2NvdW50KQotCQkJZ2FwX2NvdW50ID0gNjM7CisJCQlnYXBfY291bnQgPSAwOwogCiAJCXVwZGF0ZV9ob3BfY291bnQobm9kZSk7CiAKQEAgLTM4Myw2ICszODQsNyBAQAogCWNhcmQtPmNvbG9yKys7CiAJaWYgKGNhcmQtPmxvY2FsX25vZGUgIT0gTlVMTCkKIAkJZm9yX2VhY2hfZndfbm9kZShjYXJkLCBjYXJkLT5sb2NhbF9ub2RlLCByZXBvcnRfbG9zdF9ub2RlKTsKKwljYXJkLT5sb2NhbF9ub2RlID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTQyMywxMiArNDI1LDE0IEBACiAJbm9kZTEgPSBmd19ub2RlKGxpc3QxLm5leHQpOwogCiAJd2hpbGUgKCZub2RlMC0+bGluayAhPSAmbGlzdDApIHsKKwkJV0FSTl9PTihub2RlMC0+cG9ydF9jb3VudCAhPSBub2RlMS0+cG9ydF9jb3VudCk7CiAKLQkJLyogYXNzZXJ0KG5vZGUwLT5wb3J0X2NvdW50ID09IG5vZGUxLT5wb3J0X2NvdW50KTsgKi8KIAkJaWYgKG5vZGUwLT5saW5rX29uICYmICFub2RlMS0+bGlua19vbikKIAkJCWV2ZW50ID0gRldfTk9ERV9MSU5LX09GRjsKIAkJZWxzZSBpZiAoIW5vZGUwLT5saW5rX29uICYmIG5vZGUxLT5saW5rX29uKQogCQkJZXZlbnQgPSBGV19OT0RFX0xJTktfT047CisJCWVsc2UgaWYgKG5vZGUxLT5pbml0aWF0ZWRfcmVzZXQgJiYgbm9kZTEtPmxpbmtfb24pCisJCQlldmVudCA9IEZXX05PREVfSU5JVElBVEVEX1JFU0VUOwogCQllbHNlCiAJCQlldmVudCA9IEZXX05PREVfVVBEQVRFRDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oCmluZGV4IGNlZGMxZWMuLmFkZGI5ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuaAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmgKQEAgLTIwLDExICsyMCwxMiBAQAogI2RlZmluZSBfX2Z3X3RvcG9sb2d5X2gKIAogZW51bSB7Ci0JRldfTk9ERV9DUkVBVEVEID0gICAweDAwLAotCUZXX05PREVfVVBEQVRFRCA9ICAgMHgwMSwKLQlGV19OT0RFX0RFU1RST1lFRCA9IDB4MDIsCi0JRldfTk9ERV9MSU5LX09OID0gICAweDAzLAotCUZXX05PREVfTElOS19PRkYgPSAgMHgwNCwKKwlGV19OT0RFX0NSRUFURUQsCisJRldfTk9ERV9VUERBVEVELAorCUZXX05PREVfREVTVFJPWUVELAorCUZXX05PREVfTElOS19PTiwKKwlGV19OT0RFX0xJTktfT0ZGLAorCUZXX05PREVfSU5JVElBVEVEX1JFU0VULAogfTsKIAogc3RydWN0IGZ3X25vZGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCmluZGV4IDdmY2M1OWQuLmNjZjBlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yOCw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKQEAgLTI5NCw0MiArMjk0LDQwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X3NlbmRfcmVxdWVzdCk7CiAKK3N0cnVjdCBmd19waHlfcGFja2V0IHsKKwlzdHJ1Y3QgZndfcGFja2V0IHBhY2tldDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworfTsKKwogc3RhdGljIHZvaWQKIHRyYW5zbWl0X3BoeV9wYWNrZXRfY2FsbGJhY2soc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LAogCQkJICAgICBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHN0YXR1cykKIHsKLQlrZnJlZShwYWNrZXQpOwotfQorCXN0cnVjdCBmd19waHlfcGFja2V0ICpwID0KKwkJCWNvbnRhaW5lcl9vZihwYWNrZXQsIHN0cnVjdCBmd19waHlfcGFja2V0LCBwYWNrZXQpOwogCi1zdGF0aWMgdm9pZCBzZW5kX3BoeV9wYWNrZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiBkYXRhLCBpbnQgZ2VuZXJhdGlvbikKLXsKLQlzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQ7Ci0KLQlwYWNrZXQgPSBremFsbG9jKHNpemVvZigqcGFja2V0KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHBhY2tldCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlwYWNrZXQtPmhlYWRlclswXSA9IGRhdGE7Ci0JcGFja2V0LT5oZWFkZXJbMV0gPSB+ZGF0YTsKLQlwYWNrZXQtPmhlYWRlcl9sZW5ndGggPSA4OwotCXBhY2tldC0+cGF5bG9hZF9sZW5ndGggPSAwOwotCXBhY2tldC0+c3BlZWQgPSBTQ09ERV8xMDA7Ci0JcGFja2V0LT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKLQlwYWNrZXQtPmNhbGxiYWNrID0gdHJhbnNtaXRfcGh5X3BhY2tldF9jYWxsYmFjazsKLQotCWNhcmQtPmRyaXZlci0+c2VuZF9yZXF1ZXN0KGNhcmQsIHBhY2tldCk7CisJY29tcGxldGUoJnAtPmRvbmUpOwogfQogCiB2b2lkIGZ3X3NlbmRfcGh5X2NvbmZpZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJCWludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGdhcF9jb3VudCkKIHsKLQl1MzIgcTsKKwlzdHJ1Y3QgZndfcGh5X3BhY2tldCBwOworCXUzMiBkYXRhID0gUEhZX0lERU5USUZJRVIoUEhZX1BBQ0tFVF9DT05GSUcpIHwKKwkJICAgUEhZX0NPTkZJR19ST09UX0lEKG5vZGVfaWQpIHwKKwkJICAgUEhZX0NPTkZJR19HQVBfQ09VTlQoZ2FwX2NvdW50KTsKIAotCXEgPSBQSFlfSURFTlRJRklFUihQSFlfUEFDS0VUX0NPTkZJRykgfAotCQlQSFlfQ09ORklHX1JPT1RfSUQobm9kZV9pZCkgfAotCQlQSFlfQ09ORklHX0dBUF9DT1VOVChnYXBfY291bnQpOworCXAucGFja2V0LmhlYWRlclswXSA9IGRhdGE7CisJcC5wYWNrZXQuaGVhZGVyWzFdID0gfmRhdGE7CisJcC5wYWNrZXQuaGVhZGVyX2xlbmd0aCA9IDg7CisJcC5wYWNrZXQucGF5bG9hZF9sZW5ndGggPSAwOworCXAucGFja2V0LnNwZWVkID0gU0NPREVfMTAwOworCXAucGFja2V0LmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworCXAucGFja2V0LmNhbGxiYWNrID0gdHJhbnNtaXRfcGh5X3BhY2tldF9jYWxsYmFjazsKKwlpbml0X2NvbXBsZXRpb24oJnAuZG9uZSk7CiAKLQlzZW5kX3BoeV9wYWNrZXQoY2FyZCwgcSwgZ2VuZXJhdGlvbik7CisJY2FyZC0+ZHJpdmVyLT5zZW5kX3JlcXVlc3QoY2FyZCwgJnAucGFja2V0KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwLmRvbmUpOwogfQogCiB2b2lkIGZ3X2ZsdXNoX3RyYW5zYWN0aW9ucyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKQEAgLTM4OSwyMSArMzg3LDIxIEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFkZHJlc3NfaGFuZGxlcl9sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQoYWRkcmVzc19oYW5kbGVyX2xpc3QpOwogCi1jb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gZndfbG93X21lbW9yeV9yZWdpb24gPQotCXsgLnN0YXJ0ID0gMHgwMDAwMDAwMDAwMDBVTEwsIC5lbmQgPSAweDAwMDEwMDAwMDAwMFVMTCwgIH07CiBjb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gZndfaGlnaF9tZW1vcnlfcmVnaW9uID0KIAl7IC5zdGFydCA9IDB4MDAwMTAwMDAwMDAwVUxMLCAuZW5kID0gMHhmZmZmZTAwMDAwMDBVTEwsICB9OworRVhQT1JUX1NZTUJPTChmd19oaWdoX21lbW9yeV9yZWdpb24pOworCisjaWYgMAorY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X2xvd19tZW1vcnlfcmVnaW9uID0KKwl7IC5zdGFydCA9IDB4MDAwMDAwMDAwMDAwVUxMLCAuZW5kID0gMHgwMDAxMDAwMDAwMDBVTEwsICB9OwogY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X3ByaXZhdGVfcmVnaW9uID0KIAl7IC5zdGFydCA9IDB4ZmZmZmUwMDAwMDAwVUxMLCAuZW5kID0gMHhmZmZmZjAwMDAwMDBVTEwsICB9OwogY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X2Nzcl9yZWdpb24gPQotCXsgLnN0YXJ0ID0gMHhmZmZmZjAwMDAwMDBVTEwsIC5lbmQgPSAweGZmZmZmMDAwMDgwMFVMTCwgIH07CisJeyAuc3RhcnQgPSBDU1JfUkVHSVNURVJfQkFTRSwKKwkgIC5lbmQgICA9IENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST01fRU5ELCAgfTsKIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd191bml0X3NwYWNlX3JlZ2lvbiA9CiAJeyAuc3RhcnQgPSAweGZmZmZmMDAwMDkwMFVMTCwgLmVuZCA9IDB4MTAwMDAwMDAwMDAwMFVMTCwgfTsKLUVYUE9SVF9TWU1CT0woZndfbG93X21lbW9yeV9yZWdpb24pOwotRVhQT1JUX1NZTUJPTChmd19oaWdoX21lbW9yeV9yZWdpb24pOwotRVhQT1JUX1NZTUJPTChmd19wcml2YXRlX3JlZ2lvbik7Ci1FWFBPUlRfU1lNQk9MKGZ3X2Nzcl9yZWdpb24pOwotRVhQT1JUX1NZTUJPTChmd191bml0X3NwYWNlX3JlZ2lvbik7CisjZW5kaWYgIC8qICAwICAqLwogCiAvKioKICAqIEFsbG9jYXRlIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGluIHRoZSBub2RlIHNwYWNlIG9mIHRoZSBPSENJCkBAIC03MzYsMTIgKzczNCwxOSBAQAogCQlicmVhazsKIAl9CiAKKwkvKgorCSAqIFRoZSByZXNwb25zZSBoYW5kbGVyIG1heSBiZSBleGVjdXRlZCB3aGlsZSB0aGUgcmVxdWVzdCBoYW5kbGVyCisJICogaXMgc3RpbGwgcGVuZGluZy4gIENhbmNlbCB0aGUgcmVxdWVzdCBoYW5kbGVyLgorCSAqLworCWNhcmQtPmRyaXZlci0+Y2FuY2VsX3BhY2tldChjYXJkLCAmdC0+cGFja2V0KTsKKwogCXQtPmNhbGxiYWNrKGNhcmQsIHJjb2RlLCBkYXRhLCBkYXRhX2xlbmd0aCwgdC0+Y2FsbGJhY2tfZGF0YSk7CiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiB0b3BvbG9neV9tYXBfcmVnaW9uID0KLQl7IC5zdGFydCA9IDB4ZmZmZmYwMDAxMDAwdWxsLCAuZW5kID0gMHhmZmZmZjAwMDE0MDB1bGwsIH07CisJeyAuc3RhcnQgPSBDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9UT1BPTE9HWV9NQVAsCisJICAuZW5kICAgPSBDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9UT1BPTE9HWV9NQVBfRU5ELCB9OwogCiBzdGF0aWMgdm9pZAogaGFuZGxlX3RvcG9sb2d5X21hcChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCkBAIC03NTEsNyArNzU2LDcgQEAKIAkJICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJaW50IGksIHN0YXJ0LCBlbmQ7Ci0JdTMyICptYXA7CisJX19iZTMyICptYXA7CiAKIAlpZiAoIVRDT0RFX0lTX1JFQURfUkVRVUVTVCh0Y29kZSkpIHsKIAkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9UWVBFX0VSUk9SKTsKQEAgLTc3OSw3ICs3ODQsOCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiByZWdpc3RlcnNfcmVnaW9uID0KLQl7IC5zdGFydCA9IDB4ZmZmZmYwMDAwMDAwdWxsLCAuZW5kID0gMHhmZmZmZjAwMDA0MDB1bGwsIH07CisJeyAuc3RhcnQgPSBDU1JfUkVHSVNURVJfQkFTRSwKKwkgIC5lbmQgICA9IENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST00sIH07CiAKIHN0YXRpYyB2b2lkCiBoYW5kbGVfcmVnaXN0ZXJzKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKQEAgLTc4OCw3ICs3OTQsNyBAQAogCQkgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKIAkJIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7Ci0JaW50IHJlZyA9IG9mZnNldCAtIENTUl9SRUdJU1RFUl9CQVNFOworCWludCByZWcgPSBvZmZzZXQgJiB+Q1NSX1JFR0lTVEVSX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBsb25nIGJ1c190aW1lOwogCV9fYmUzMiAqZGF0YSA9IHBheWxvYWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaCBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaAppbmRleCBmYTc5NjdiLi4wNGQzODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNvbnN0YW50cy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2RlZmluZSBUQ09ERV9JU19SRUFEX1JFUVVFU1QodGNvZGUpCSgoKHRjb2RlKSAmIH4xKSA9PSA0KQogI2RlZmluZSBUQ09ERV9JU19CTE9DS19QQUNLRVQodGNvZGUpCSgoKHRjb2RlKSAmICAxKSAhPSAwKQpAQCAtODUsMTIgKzg2LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIGZ3X21lbWNweV9mcm9tX2JlMzIodm9pZCAqX2RzdCwgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpCiB7Ci0JdTMyICpkc3QgPSBfZHN0OwotCXUzMiAqc3JjID0gX3NyYzsKKwl1MzIgICAgKmRzdCA9IF9kc3Q7CisJX19iZTMyICpzcmMgPSBfc3JjOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNpemUgLyA0OyBpKyspCi0JCWRzdFtpXSA9IGNwdV90b19iZTMyKHNyY1tpXSk7CisJCWRzdFtpXSA9IGJlMzJfdG9fY3B1KHNyY1tpXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjAwLDExICsyMDEsNyBAQAogCXU2NCBlbmQ7CiB9OwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X2xvd19tZW1vcnlfcmVnaW9uOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd19oaWdoX21lbW9yeV9yZWdpb247Ci1leHRlcm4gY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X3ByaXZhdGVfcmVnaW9uOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd19jc3JfcmVnaW9uOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd191bml0X3NwYWNlX3JlZ2lvbjsKIAogaW50IGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyLAogCQkJCWNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiAqcmVnaW9uKTsKQEAgLTIxOSwxMiArMjE2LDEwIEBACiBzdHJ1Y3QgZndfY2FyZCB7CiAJY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyICpkcml2ZXI7CiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwotCXN0cnVjdCBrcmVmIGtyZWY7CisJYXRvbWljX3QgZGV2aWNlX2NvdW50OwogCiAJaW50IG5vZGVfaWQ7CiAJaW50IGdlbmVyYXRpb247Ci0JLyogVGhpcyBpcyB0aGUgZ2VuZXJhdGlvbiB1c2VkIGZvciB0aW1lc3RhbXBpbmcgaW5jb21pbmcgcmVxdWVzdHMuICovCi0JaW50IHJlcXVlc3RfZ2VuZXJhdGlvbjsKIAlpbnQgY3VycmVudF90bGFiZWwsIHRsYWJlbF9tYXNrOwogCXN0cnVjdCBsaXN0X2hlYWQgdHJhbnNhY3Rpb25fbGlzdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBmbHVzaF90aW1lcjsKQEAgLTI2MSw5ICsyNTYsNiBAQAogCWludCBibV9nZW5lcmF0aW9uOwogfTsKIAotc3RydWN0IGZ3X2NhcmQgKmZ3X2NhcmRfZ2V0KHN0cnVjdCBmd19jYXJkICpjYXJkKTsKLXZvaWQgZndfY2FyZF9wdXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOwotCiAvKgogICogVGhlIGlzbyBwYWNrZXQgZm9ybWF0IGFsbG93cyBmb3IgYW4gaW1tZWRpYXRlIGhlYWRlci9wYXlsb2FkIHBhcnQKICAqIHN0b3JlZCBpbiAnaGVhZGVyJyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcGFja2V0IGluZm8gcGx1cyBhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCmluZGV4IDA1ZjAyYTMuLjQwZmZkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcKQEAgLTkzLDQgKzkzLDI0IEBACiAJICBpbmZvcm1hdGlvbiBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIC9zeXMvY2xhc3MvZG1pL2lkLyBvciBpZiB5b3Ugd2FudAogCSAgRE1JLWJhc2VkIG1vZHVsZSBhdXRvLWxvYWRpbmcuCiAKK2NvbmZpZyBJU0NTSV9JQkZUX0ZJTkQKKwlib29sICJpU0NTSSBCb290IEZpcm13YXJlIFRhYmxlIEF0dHJpYnV0ZXMiCisJZGVwZW5kcyBvbiBYODYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBrZXJuZWwgdG8gZmluZCB0aGUgcmVnaW9uIG9mIG1lbW9yeQorCSAgaW4gd2hpY2ggdGhlIElTQ1NJIEJvb3QgRmlybXdhcmUgVGFibGUgKGlCRlQpIHJlc2lkZXMuIFRoaXMKKwkgIGlzIG5lY2Vzc2FyeSBmb3IgaVNDU0kgQm9vdCBGaXJtd2FyZSBUYWJsZSBBdHRyaWJ1dGVzIG1vZHVsZSB0byB3b3JrCisJICBwcm9wZXJseS4KKworY29uZmlnIElTQ1NJX0lCRlQKKwl0cmlzdGF0ZSAiaVNDU0kgQm9vdCBGaXJtd2FyZSBUYWJsZSBBdHRyaWJ1dGVzIG1vZHVsZSIKKwlkZXBlbmRzIG9uIElTQ1NJX0lCRlRfRklORAorCWRlZmF1bHQJbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZGV0ZWN0aW9uIGFuZCBleHBvc2luZyBvZiBpU0NTSQorCSAgQm9vdCBGaXJtd2FyZSBUYWJsZSAoaUJGVCkgdmlhIHN5c2ZzIHRvIHVzZXJzcGFjZS4gSWYgeW91IHdpc2ggdG8KKwkgIGRldGVjdCBpU0NTSSBib290IHBhcmFtZXRlcnMgZHluYW1pY2FsbHkgZHVyaW5nIHN5c3RlbSBib290LCBzYXkgWS4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDhkNGViYzguLjRjOTE0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZQpAQCAtOCwzICs4LDUgQEAKIG9iai0kKENPTkZJR19ERUxMX1JCVSkgICAgICAgICAgKz0gZGVsbF9yYnUubwogb2JqLSQoQ09ORklHX0RDREJBUykJCSs9IGRjZGJhcy5vCiBvYmotJChDT05GSUdfRE1JSUQpCQkrPSBkbWktaWQubworb2JqLSQoQ09ORklHX0lTQ1NJX0lCRlRfRklORCkJKz0gaXNjc2lfaWJmdF9maW5kLm8KK29iai0kKENPTkZJR19JU0NTSV9JQkZUKQkrPSBpc2NzaV9pYmZ0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCmluZGV4IDE2MzY4MDYuLmYyMzU5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlICJkY2RiYXMuaCIKIApAQCAtMjY1LDcgKzI2NCw3IEBACiAKIAkvKiBTTUkgcmVxdWlyZXMgQ1BVIDAgKi8KIAlvbGRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KDApKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoMCkpOwogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCkgewogCQlkZXZfZGJnKCZkY2RiYXNfcGRldi0+ZGV2LCAiJXM6IGZhaWxlZCB0byBnZXQgQ1BVIDBcbiIsCiAJCQlfX0ZVTkNUSU9OX18pOwpAQCAtMjg1LDcgKzI4NCw3IEBACiAJKTsKIAogb3V0OgotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkX21hc2spOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGRfbWFzayk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCmluZGV4IDY1MzI2NWEuLmM1ZTNlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTEwLDEwICsxMCw5IEBACiAKIHN0YXRpYyBjaGFyIGRtaV9lbXB0eV9zdHJpbmdbXSA9ICIgICAgICAgICI7CiAKLXN0YXRpYyBjaGFyICogX19pbml0IGRtaV9zdHJpbmcoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB1OCBzKQorc3RhdGljIGNvbnN0IGNoYXIgKiBfX2luaXQgZG1pX3N0cmluZ19ub3NhdmUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB1OCBzKQogewogCWNvbnN0IHU4ICpicCA9ICgodTggKikgZG0pICsgZG0tPmxlbmd0aDsKLQljaGFyICpzdHIgPSAiIjsKIAogCWlmIChzKSB7CiAJCXMtLTsKQEAgLTI4LDE0ICsyNywyOSBAQAogCiAJCQlpZiAoIW1lbWNtcChicCwgZG1pX2VtcHR5X3N0cmluZywgY21wX2xlbikpCiAJCQkJcmV0dXJuIGRtaV9lbXB0eV9zdHJpbmc7Ci0JCQlzdHIgPSBkbWlfYWxsb2MobGVuKTsKLQkJCWlmIChzdHIgIT0gTlVMTCkKLQkJCQlzdHJjcHkoc3RyLCBicCk7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJkbWlfc3RyaW5nOiBjYW5ub3QgYWxsb2NhdGUgJVp1IGJ5dGVzLlxuIiwgbGVuKTsKKwkJCXJldHVybiBicDsKIAkJfQogCX0KIAorCXJldHVybiAiIjsKK30KKworc3RhdGljIGNoYXIgKiBfX2luaXQgZG1pX3N0cmluZyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0sIHU4IHMpCit7CisJY29uc3QgY2hhciAqYnAgPSBkbWlfc3RyaW5nX25vc2F2ZShkbSwgcyk7CisJY2hhciAqc3RyOworCXNpemVfdCBsZW47CisKKwlpZiAoYnAgPT0gZG1pX2VtcHR5X3N0cmluZykKKwkJcmV0dXJuIGRtaV9lbXB0eV9zdHJpbmc7CisKKwlsZW4gPSBzdHJsZW4oYnApICsgMTsKKwlzdHIgPSBkbWlfYWxsb2MobGVuKTsKKwlpZiAoc3RyICE9IE5VTEwpCisJCXN0cmNweShzdHIsIGJwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiZG1pX3N0cmluZzogY2Fubm90IGFsbG9jYXRlICVadSBieXRlcy5cbiIsIGxlbik7CisKIAlyZXR1cm4gc3RyOwogfQogCkBAIC0xNjcsMTAgKzE4MSwzMCBAQAogCWRtaV9pZGVudFtzbG90XSA9IHM7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBkbWlfc2F2ZV9vbmVfZGV2aWNlKGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkbWlfZGV2aWNlICpkZXY7CisKKwkvKiBObyBkdXBsaWNhdGUgZGV2aWNlICovCisJaWYgKGRtaV9maW5kX2RldmljZSh0eXBlLCBuYW1lLCBOVUxMKSkKKwkJcmV0dXJuOworCisJZGV2ID0gZG1pX2FsbG9jKHNpemVvZigqZGV2KSArIHN0cmxlbihuYW1lKSArIDEpOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1pX3NhdmVfb25lX2RldmljZTogb3V0IG9mIG1lbW9yeS5cbiIpOworCQlyZXR1cm47CisJfQorCisJZGV2LT50eXBlID0gdHlwZTsKKwlzdHJjcHkoKGNoYXIgKikoZGV2ICsgMSksIG5hbWUpOworCWRldi0+bmFtZSA9IChjaGFyICopKGRldiArIDEpOworCWRldi0+ZGV2aWNlX2RhdGEgPSBOVUxMOworCWxpc3RfYWRkKCZkZXYtPmxpc3QsICZkbWlfZGV2aWNlcyk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBkbWlfc2F2ZV9kZXZpY2VzKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKIHsKIAlpbnQgaSwgY291bnQgPSAoZG0tPmxlbmd0aCAtIHNpemVvZihzdHJ1Y3QgZG1pX2hlYWRlcikpIC8gMjsKLQlzdHJ1Y3QgZG1pX2RldmljZSAqZGV2OwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJY29uc3QgY2hhciAqZCA9IChjaGFyICopKGRtICsgMSkgKyAoaSAqIDIpOwpAQCAtMTc5LDIzICsyMTMsMTAgQEAKIAkJaWYgKCgqZCAmIDB4ODApID09IDApCiAJCQljb250aW51ZTsKIAotCQlkZXYgPSBkbWlfYWxsb2Moc2l6ZW9mKCpkZXYpKTsKLQkJaWYgKCFkZXYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZG1pX3NhdmVfZGV2aWNlczogb3V0IG9mIG1lbW9yeS5cbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlkZXYtPnR5cGUgPSAqZCsrICYgMHg3ZjsKLQkJZGV2LT5uYW1lID0gZG1pX3N0cmluZyhkbSwgKmQpOwotCQlkZXYtPmRldmljZV9kYXRhID0gTlVMTDsKLQkJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmRtaV9kZXZpY2VzKTsKKwkJZG1pX3NhdmVfb25lX2RldmljZSgqZCAmIDB4N2YsIGRtaV9zdHJpbmdfbm9zYXZlKGRtLCAqKGQgKyAxKSkpOwogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBkbWlfZGV2aWNlIGVtcHR5X29lbV9zdHJpbmdfZGV2ID0gewotCS5uYW1lID0gZG1pX2VtcHR5X3N0cmluZywKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBkbWlfc2F2ZV9vZW1fc3RyaW5nc19kZXZpY2VzKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKIHsKIAlpbnQgaSwgY291bnQgPSAqKHU4ICopKGRtICsgMSk7CkBAIC0yMDQsMTAgKzIyNSw4IEBACiAJZm9yIChpID0gMTsgaSA8PSBjb3VudDsgaSsrKSB7CiAJCWNoYXIgKmRldm5hbWUgPSBkbWlfc3RyaW5nKGRtLCBpKTsKIAotCQlpZiAoIXN0cmNtcChkZXZuYW1lLCBkbWlfZW1wdHlfc3RyaW5nKSkgewotCQkJbGlzdF9hZGQoJmVtcHR5X29lbV9zdHJpbmdfZGV2Lmxpc3QsICZkbWlfZGV2aWNlcyk7CisJCWlmIChkZXZuYW1lID09IGRtaV9lbXB0eV9zdHJpbmcpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCWRldiA9IGRtaV9hbGxvYyhzaXplb2YoKmRldikpOwogCQlpZiAoIWRldikgewpAQCAtMjQ3LDI5ICsyNjYsMTggQEAKIAlkZXYtPm5hbWUgPSAiSVBNSSBjb250cm9sbGVyIjsKIAlkZXYtPmRldmljZV9kYXRhID0gZGF0YTsKIAotCWxpc3RfYWRkKCZkZXYtPmxpc3QsICZkbWlfZGV2aWNlcyk7CisJbGlzdF9hZGRfdGFpbCgmZGV2LT5saXN0LCAmZG1pX2RldmljZXMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG1pX3NhdmVfZXh0ZW5kZWRfZGV2aWNlcyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0pCiB7CiAJY29uc3QgdTggKmQgPSAodTgqKSBkbSArIDU7Ci0Jc3RydWN0IGRtaV9kZXZpY2UgKmRldjsKIAogCS8qIFNraXAgZGlzYWJsZWQgZGV2aWNlICovCiAJaWYgKCgqZCAmIDB4ODApID09IDApCiAJCXJldHVybjsKIAotCWRldiA9IGRtaV9hbGxvYyhzaXplb2YoKmRldikpOwotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZG1pX3NhdmVfZXh0ZW5kZWRfZGV2aWNlczogb3V0IG9mIG1lbW9yeS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2LT50eXBlID0gKmQtLSAmIDB4N2Y7Ci0JZGV2LT5uYW1lID0gZG1pX3N0cmluZyhkbSwgKmQpOwotCWRldi0+ZGV2aWNlX2RhdGEgPSBOVUxMOwotCi0JbGlzdF9hZGQoJmRldi0+bGlzdCwgJmRtaV9kZXZpY2VzKTsKKwlkbWlfc2F2ZV9vbmVfZGV2aWNlKCpkICYgMHg3ZiwgZG1pX3N0cmluZ19ub3NhdmUoZG0sICooZCAtIDEpKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMjRlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtMCwwICsxLDk4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCisgKiAgYnkgUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAyMDA4IElCTSwgSW5jLgorICogIGJ5IEtvbnJhZCBSemVzenV0ZWsgPGtvbnJhZHJAbGludXgudm5ldC5pYm0uY29tPgorICogIENvcHlyaWdodCAyMDA4CisgKiAgYnkgS29ucmFkIFJ6ZXN6dXRlayA8a2V0dXpzZXpyQGRhcm5vay5vcmc+CisgKgorICogVGhpcyBjb2RlIGV4cG9zZXMgdGhlIGlTQ1NJIEJvb3QgRm9ybWF0IFRhYmxlIHRvIHVzZXJsYW5kIHZpYSBzeXNmcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2Mi4wIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ2hhbmdlbG9nOgorICoKKyAqICAxNCBNYXIgMjAwOCAtIEtvbnJhZCBSemVzenV0ZWsgPGtldHV6c2V6ckBkYXJub2sub3JnPgorICogICAgVXBkYXRlZCBjb21tZW50cyBhbmQgY29weXJpZ2h0cy4gKHYwLjQuOSkKKyAqCisgKiAgMTEgRmViIDIwMDggLSBLb25yYWQgUnplc3p1dGVrIDxrb25yYWRyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgIENvbnZlcnRlZCB0byB1c2luZyBpYmZ0X2FkZHIuICh2MC40LjgpCisgKgorICogICA4IEZlYiAyMDA4IC0gS29ucmFkIFJ6ZXN6dXRlayA8a29ucmFkckBsaW51eC52bmV0LmlibS5jb20+CisgKiAgICBDb21iaW5lZCB0d28gZnVuY3Rpb25zIGluIG9uZTogcmVzZXJ2ZV9pYmZ0X3JlZ2lvbi4gKHYwLjQuNykKKyAqCisgKiAgMzAgSmFuIDIwMDggLSBLb25yYWQgUnplc3p1dGVrIDxrb25yYWRyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgQWRkZWQgbG9naWMgdG8gaGFuZGxlIElQdjYgYWRkcmVzc2VzLiAodjAuNC42KQorICoKKyAqICAyNSBKYW4gMjAwOCAtIEtvbnJhZCBSemVzenV0ZWsgPGtvbnJhZHJAbGludXgudm5ldC5pYm0uY29tPgorICogICBBZGRlZCBsb2dpYyB0byBoYW5kbGUgYmFkbHkgbm90LXRvLXNwZWMgaUJGVC4gKHYwLjQuNSkKKyAqCisgKiAgIDQgSmFuIDIwMDggLSBLb25yYWQgUnplc3p1dGVrIDxrb25yYWRyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgQWRkZWQgX19pbml0IHRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gKHYwLjQuNCkKKyAqCisgKiAgMjEgRGVjIDIwMDcgLSBLb25yYWQgUnplc3p1dGVrIDxrb25yYWRyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgVXBkYXRlZCBrb2JqZWN0IHJlZ2lzdHJhdGlvbiwgY29tYmluZWQgdW5yZWdpc3RlciBmdW5jdGlvbnMgaW4gb25lCisgKiAgIGFuZCBjb2RlIGFuZCBzdHlsZSBjbGVhbnVwLiAodjAuNC4zKQorICoKKyAqICAgNSBEZWMgMjAwNyAtIEtvbnJhZCBSemVzenV0ZWsgPGtvbnJhZHJAbGludXgudm5ldC5pYm0uY29tPgorICogICBBZGRlZCBlbmQtbWFya2VycyB0byBlbnVtcyBhbmQgcmUtb3JnYW5pemVkIGtvYmplY3QgcmVnaXN0cmF0aW9uLiAodjAuNC4yKQorICoKKyAqICAgNCBEZWMgMjAwNyAtIEtvbnJhZCBSemVzenV0ZWsgPGtvbnJhZHJAbGludXgudm5ldC5pYm0uY29tPgorICogICBDcmVhdGVkICdkZXZpY2UnIHN5c2ZzIGxpbmsgdG8gdGhlIE5JQyBhbmQgc3R5bGUgY2xlYW51cC4gKHYwLjQuMSkKKyAqCisgKiAgMjggTm92IDIwMDcgLSBLb25yYWQgUnplc3p1dGVrIDxrb25yYWRyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgQWRkZWQgc3lzZnMtaWJmdCBkb2N1bWVudGF0aW9uLCBtb3ZlZCAnZmluZF9pYmZ0JyBmdW5jdGlvbiB0bworICogICBpbiBpdHMgb3duIGZpbGUgYW5kIGFkZGVkIHRleHQgYXR0cmlidXRlcyBmb3IgZXZlcnkgc3RydWN0IGZpZWxkLiAgKHYwLjQpCisgKgorICogIDIxIE5vdiAyMDA3IC0gS29ucmFkIFJ6ZXN6dXRlayA8a29ucmFkckBsaW51eC52bmV0LmlibS5jb20+CisgKiAgIEFkZGVkIHRleHQgYXR0cmlidXRlcyBlbXVsYXRpbmcgT3BlbkZpcm13YXJlIC9wcm9jL2RldmljZS10cmVlIG5hbWluZy4KKyAqICAgUmVtb3ZlZCBiaW5hcnkgL3N5c2ZzIGludGVyZmFjZSAodjAuMykKKyAqCisgKiAgMjkgQXVnIDIwMDcgLSBLb25yYWQgUnplc3p1dGVrIDxrb25yYWRyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgQWRkZWQgZnVuY3Rpb25hbGl0eSBpbiBzZXR1cC5jIHRvIHJlc2VydmUgaUJGVCByZWdpb24uICh2MC4yKQorICoKKyAqICAyNyBBdWcgMjAwNyAtIEtvbnJhZCBSemVzenV0ZWsgPGtvbnJhZHJAbGludXgudm5ldC5pYm0uY29tPgorICogICBGaXJzdCB2ZXJzaW9uIGV4cG9zaW5nIGlCRlQgZGF0YSB2aWEgYSBiaW5hcnkgL3N5c2ZzLiAodjAuMSkKKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lzY3NpX2liZnQuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgSUJGVF9JU0NTSV9WRVJTSU9OICIwLjQuOSIKKyNkZWZpbmUgSUJGVF9JU0NTSV9EQVRFICIyMDA4LU1hci0xNCIKKworTU9EVUxFX0FVVEhPUigiUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPiBhbmQgXAorS29ucmFkIFJ6ZXN6dXRlayA8a2V0dXpzZXpyQGRhcm5vay5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInN5c2ZzIGludGVyZmFjZSB0byBCSU9TIGlCRlQgaW5mb3JtYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKElCRlRfSVNDU0lfVkVSU0lPTik7CisKK3N0cnVjdCBpYmZ0X2hkciB7CisJdTggaWQ7CisJdTggdmVyc2lvbjsKKwl1MTYgbGVuZ3RoOworCXU4IGluZGV4OworCXU4IGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBpYmZ0X2NvbnRyb2wgeworCXN0cnVjdCBpYmZ0X2hkciBoZHI7CisJdTE2IGV4dGVuc2lvbnM7CisJdTE2IGluaXRpYXRvcl9vZmY7CisJdTE2IG5pYzBfb2ZmOworCXUxNiB0Z3QwX29mZjsKKwl1MTYgbmljMV9vZmY7CisJdTE2IHRndDFfb2ZmOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBpYmZ0X2luaXRpYXRvciB7CisJc3RydWN0IGliZnRfaGRyIGhkcjsKKwljaGFyIGlzbnNfc2VydmVyWzE2XTsKKwljaGFyIHNscF9zZXJ2ZXJbMTZdOworCWNoYXIgcHJpX3JhZGl1c19zZXJ2ZXJbMTZdOworCWNoYXIgc2VjX3JhZGl1c19zZXJ2ZXJbMTZdOworCXUxNiBpbml0aWF0b3JfbmFtZV9sZW47CisJdTE2IGluaXRpYXRvcl9uYW1lX29mZjsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgaWJmdF9uaWMgeworCXN0cnVjdCBpYmZ0X2hkciBoZHI7CisJY2hhciBpcF9hZGRyWzE2XTsKKwl1OCBzdWJuZXRfbWFza19wcmVmaXg7CisJdTggb3JpZ2luOworCWNoYXIgZ2F0ZXdheVsxNl07CisJY2hhciBwcmltYXJ5X2Ruc1sxNl07CisJY2hhciBzZWNvbmRhcnlfZG5zWzE2XTsKKwljaGFyIGRoY3BbMTZdOworCXUxNiB2bGFuOworCWNoYXIgbWFjWzZdOworCXUxNiBwY2lfYmRmOworCXUxNiBob3N0bmFtZV9sZW47CisJdTE2IGhvc3RuYW1lX29mZjsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgaWJmdF90Z3QgeworCXN0cnVjdCBpYmZ0X2hkciBoZHI7CisJY2hhciBpcF9hZGRyWzE2XTsKKwl1MTYgcG9ydDsKKwljaGFyIGx1bls4XTsKKwl1OCBjaGFwX3R5cGU7CisJdTggbmljX2Fzc29jOworCXUxNiB0Z3RfbmFtZV9sZW47CisJdTE2IHRndF9uYW1lX29mZjsKKwl1MTYgY2hhcF9uYW1lX2xlbjsKKwl1MTYgY2hhcF9uYW1lX29mZjsKKwl1MTYgY2hhcF9zZWNyZXRfbGVuOworCXUxNiBjaGFwX3NlY3JldF9vZmY7CisJdTE2IHJldl9jaGFwX25hbWVfbGVuOworCXUxNiByZXZfY2hhcF9uYW1lX29mZjsKKwl1MTYgcmV2X2NoYXBfc2VjcmV0X2xlbjsKKwl1MTYgcmV2X2NoYXBfc2VjcmV0X29mZjsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisvKgorICogVGhlIGtvYmplY3QgZGlmZmVyZW50IHR5cGVzIGFuZCBpdHMgbmFtZXMuCisgKgorKi8KK2VudW0gaWJmdF9pZCB7CisJaWRfcmVzZXJ2ZWQgPSAwLCAvKiBXZSBkb24ndCBzdXBwb3J0LiAqLworCWlkX2NvbnRyb2wgPSAxLCAvKiBTaG91bGQgc2hvdyB1cCBvbmx5IG9uY2UgYW5kIGlzIG5vdCBleHBvcnRlZC4gKi8KKwlpZF9pbml0aWF0b3IgPSAyLAorCWlkX25pYyA9IDMsCisJaWRfdGFyZ2V0ID0gNCwKKwlpZF9leHRlbnNpb25zID0gNSwgLyogV2UgZG9uJ3Qgc3VwcG9ydC4gKi8KKwlpZF9lbmRfbWFya2VyLAorfTsKKworLyoKKyAqIFdlIGRvIG5vdCBzdXBwb3J0IHRoZSBvdGhlciB0eXBlcywgaGVuY2UgdGhlIHVzYWdlIG9mIE5VTEwuCisgKiBUaGlzIG1hcHMgdG8gdGhlIGVudW0gaWJmdF9pZC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmliZnRfaWRfbmFtZXNbXSA9CisJe05VTEwsIE5VTEwsICJpbml0aWF0b3IiLCAiZXRoZXJuZXQlZCIsICJ0YXJnZXQlZCIsIE5VTEwsIE5VTEx9OworCisvKgorICogVGhlIHRleHQgYXR0cmlidXRlcyBuYW1lcyBmb3IgZWFjaCBvZiB0aGUga29iamVjdHMuCisqLworZW51bSBpYmZ0X2V0aF9wcm9wZXJ0aWVzX2VudW0geworCWliZnRfZXRoX2luZGV4LAorCWliZnRfZXRoX2ZsYWdzLAorCWliZnRfZXRoX2lwX2FkZHIsCisJaWJmdF9ldGhfc3VibmV0X21hc2ssCisJaWJmdF9ldGhfb3JpZ2luLAorCWliZnRfZXRoX2dhdGV3YXksCisJaWJmdF9ldGhfcHJpbWFyeV9kbnMsCisJaWJmdF9ldGhfc2Vjb25kYXJ5X2RucywKKwlpYmZ0X2V0aF9kaGNwLAorCWliZnRfZXRoX3ZsYW4sCisJaWJmdF9ldGhfbWFjLAorCS8qIGliZnRfZXRoX3BjaV9iZGYgLSB0aGlzIGlzIHJlcGxhY2VkIGJ5IGxpbmsgdG8gdGhlIGRldmljZSBpdHNlbGYuICovCisJaWJmdF9ldGhfaG9zdG5hbWUsCisJaWJmdF9ldGhfZW5kX21hcmtlciwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppYmZ0X2V0aF9wcm9wZXJ0aWVzW10gPQorCXsiaW5kZXgiLCAiZmxhZ3MiLCAiaXAtYWRkciIsICJzdWJuZXQtbWFzayIsICJvcmlnaW4iLCAiZ2F0ZXdheSIsCisJInByaW1hcnktZG5zIiwgInNlY29uZGFyeS1kbnMiLCAiZGhjcCIsICJ2bGFuIiwgIm1hYyIsICJob3N0bmFtZSIsCisJTlVMTH07CisKK2VudW0gaWJmdF90Z3RfcHJvcGVydGllc19lbnVtIHsKKwlpYmZ0X3RndF9pbmRleCwKKwlpYmZ0X3RndF9mbGFncywKKwlpYmZ0X3RndF9pcF9hZGRyLAorCWliZnRfdGd0X3BvcnQsCisJaWJmdF90Z3RfbHVuLAorCWliZnRfdGd0X2NoYXBfdHlwZSwKKwlpYmZ0X3RndF9uaWNfYXNzb2MsCisJaWJmdF90Z3RfbmFtZSwKKwlpYmZ0X3RndF9jaGFwX25hbWUsCisJaWJmdF90Z3RfY2hhcF9zZWNyZXQsCisJaWJmdF90Z3RfcmV2X2NoYXBfbmFtZSwKKwlpYmZ0X3RndF9yZXZfY2hhcF9zZWNyZXQsCisJaWJmdF90Z3RfZW5kX21hcmtlciwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppYmZ0X3RndF9wcm9wZXJ0aWVzW10gPQorCXsiaW5kZXgiLCAiZmxhZ3MiLCAiaXAtYWRkciIsICJwb3J0IiwgImx1biIsICJjaGFwLXR5cGUiLCAibmljLWFzc29jIiwKKwkidGFyZ2V0LW5hbWUiLCAiY2hhcC1uYW1lIiwgImNoYXAtc2VjcmV0IiwgInJldi1jaGFwLW5hbWUiLAorCSJyZXYtY2hhcC1uYW1lLXNlY3JldCIsIE5VTEx9OworCitlbnVtIGliZnRfaW5pdGlhdG9yX3Byb3BlcnRpZXNfZW51bSB7CisJaWJmdF9pbml0X2luZGV4LAorCWliZnRfaW5pdF9mbGFncywKKwlpYmZ0X2luaXRfaXNuc19zZXJ2ZXIsCisJaWJmdF9pbml0X3NscF9zZXJ2ZXIsCisJaWJmdF9pbml0X3ByaV9yYWRpdXNfc2VydmVyLAorCWliZnRfaW5pdF9zZWNfcmFkaXVzX3NlcnZlciwKKwlpYmZ0X2luaXRfaW5pdGlhdG9yX25hbWUsCisJaWJmdF9pbml0X2VuZF9tYXJrZXIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaWJmdF9pbml0aWF0b3JfcHJvcGVydGllc1tdID0KKwl7ImluZGV4IiwgImZsYWdzIiwgImlzbnMtc2VydmVyIiwgInNscC1zZXJ2ZXIiLCAicHJpLXJhZGl1cy1zZXJ2ZXIiLAorCSJzZWMtcmFkaXVzLXNlcnZlciIsICJpbml0aWF0b3ItbmFtZSIsIE5VTEx9OworCisvKgorICogVGhlIGtvYmplY3QgYW5kIGF0dHJpYnV0ZSBzdHJ1Y3R1cmVzLgorICovCisKK3N0cnVjdCBpYmZ0X2tvYmplY3QgeworCXN0cnVjdCBpYmZ0X3RhYmxlX2hlYWRlciAqaGVhZGVyOworCXVuaW9uIHsKKwkJc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0aWF0b3I7CisJCXN0cnVjdCBpYmZ0X25pYyAqbmljOworCQlzdHJ1Y3QgaWJmdF90Z3QgKnRndDsKKwkJc3RydWN0IGliZnRfaGRyICpoZHI7CisJfTsKKwlzdHJ1Y3Qga29iamVjdCBrb2JqOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKK3N0cnVjdCBpYmZ0X2F0dHJpYnV0ZSB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KSAoc3RydWN0ICBpYmZ0X2tvYmplY3QgKmVudHJ5LAorCQkJIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKKwl1bmlvbiB7CisJCXN0cnVjdCBpYmZ0X2luaXRpYXRvciAqaW5pdGlhdG9yOworCQlzdHJ1Y3QgaWJmdF9uaWMgKm5pYzsKKwkJc3RydWN0IGliZnRfdGd0ICp0Z3Q7CisJCXN0cnVjdCBpYmZ0X2hkciAqaGRyOworCX07CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisJaW50IHR5cGU7IC8qIFRoZSBlbnVtIG9mIHRoZSB0eXBlLiBUaGlzIGNhbiBiZSBhbnkgdmFsdWUgb2Y6CisJCWliZnRfZXRoX3Byb3BlcnRpZXNfZW51bSwgaWJmdF90Z3RfcHJvcGVydGllc19lbnVtLAorCQlvciBpYmZ0X2luaXRpYXRvcl9wcm9wZXJ0aWVzX2VudW0uICovCisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworc3RhdGljIExJU1RfSEVBRChpYmZ0X2F0dHJfbGlzdCk7CitzdGF0aWMgTElTVF9IRUFEKGliZnRfa29iamVjdF9saXN0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgbnVsbHNbMTZdOworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyB0byBwYXJzZSBkYXRhIHByb3Blcmx5LgorICovCitzdGF0aWMgc3NpemVfdCBzcHJpbnRmX2lwYWRkcihjaGFyICpidWYsIHU4ICppcCkKK3sKKwljaGFyICpzdHIgPSBidWY7CisKKwlpZiAoaXBbMF0gPT0gMCAmJiBpcFsxXSA9PSAwICYmIGlwWzJdID09IDAgJiYgaXBbM10gPT0gMCAmJgorCSAgICBpcFs0XSA9PSAwICYmIGlwWzVdID09IDAgJiYgaXBbNl0gPT0gMCAmJiBpcFs3XSA9PSAwICYmCisJICAgIGlwWzhdID09IDAgJiYgaXBbOV0gPT0gMCAmJiBpcFsxMF0gPT0gMHhmZiAmJiBpcFsxMV0gPT0gMHhmZikgeworCQkvKgorCQkgKiBJUFY0CisJCSAqLworCQlzdHIgKz0gc3ByaW50ZihidWYsIE5JUFFVQURfRk1ULCBpcFsxMl0sCisJCQkgICAgICAgaXBbMTNdLCBpcFsxNF0sIGlwWzE1XSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogSVB2NgorCQkgKi8KKwkJc3RyICs9IHNwcmludGYoc3RyLCBOSVA2X0ZNVCwgbnRvaHMoaXBbMF0pLCBudG9ocyhpcFsxXSksCisJCQkgICAgICAgbnRvaHMoaXBbMl0pLCBudG9ocyhpcFszXSksIG50b2hzKGlwWzRdKSwKKwkJCSAgICAgICBudG9ocyhpcFs1XSksIG50b2hzKGlwWzZdKSwgbnRvaHMoaXBbN10pKTsKKwl9CisJc3RyICs9IHNwcmludGYoc3RyLCAiXG4iKTsKKwlyZXR1cm4gc3RyIC0gYnVmOworfQorCitzdGF0aWMgc3NpemVfdCBzcHJpbnRmX3N0cmluZyhjaGFyICpzdHIsIGludCBsZW4sIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihzdHIsICIlLipzXG4iLCBsZW4sIGJ1Zik7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IHRoZSBJQkZUIGhlYWRlci4KKyAqLworc3RhdGljIGludCBpYmZ0X3ZlcmlmeV9oZHIoY2hhciAqdCwgc3RydWN0IGliZnRfaGRyICpoZHIsIGludCBpZCwgaW50IGxlbmd0aCkKK3sKKwlpZiAoaGRyLT5pZCAhPSBpZCkgeworCQlwcmludGsoS0VSTl9FUlIgImlCRlQgZXJyb3I6IFdlIGV4cGVjdGVkIHRoZSAiIFwKKwkJCQkiZmllbGQgaGVhZGVyLmlkIHRvIGhhdmUgJWQgYnV0ICIgXAorCQkJCSJmb3VuZCAlZCBpbnN0ZWFkIVxuIiwgaWQsIGhkci0+aWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGhkci0+bGVuZ3RoICE9IGxlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImlCRlQgZXJyb3I6IFdlIGV4cGVjdGVkIHRoZSAiIFwKKwkJCQkiZmllbGQgaGVhZGVyLmxlbmd0aCB0byBoYXZlICVkIGJ1dCAiIFwKKwkJCQkiZm91bmQgJWQgaW5zdGVhZCFcbiIsIGxlbmd0aCwgaGRyLT5sZW5ndGgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWJmdF9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworCXN0cnVjdCBpYmZ0X2tvYmplY3QgKmliZnQgPQorCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGliZnRfa29iamVjdCwga29iaik7CisJa2ZyZWUoaWJmdCk7Cit9CisKKy8qCisgKiAgUm91dGluZXMgZm9yIHBhcnNpbmcgdGhlIGlCRlQgZGF0YSB0byBiZSBodW1hbiByZWFkYWJsZS4KKyAqLworc3NpemVfdCBpYmZ0X2F0dHJfc2hvd19pbml0aWF0b3Ioc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCisJCQkJICBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0aWF0b3IgPSBlbnRyeS0+aW5pdGlhdG9yOworCXZvaWQgKmliZnRfbG9jID0gZW50cnktPmhlYWRlcjsKKwljaGFyICpzdHIgPSBidWY7CisKKwlpZiAoIWluaXRpYXRvcikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKKwljYXNlIGliZnRfaW5pdF9pbmRleDoKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIGluaXRpYXRvci0+aGRyLmluZGV4KTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2luaXRfZmxhZ3M6CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCBpbml0aWF0b3ItPmhkci5mbGFncyk7CisJCWJyZWFrOworCWNhc2UgaWJmdF9pbml0X2lzbnNfc2VydmVyOgorCQlzdHIgKz0gc3ByaW50Zl9pcGFkZHIoc3RyLCBpbml0aWF0b3ItPmlzbnNfc2VydmVyKTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2luaXRfc2xwX3NlcnZlcjoKKwkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgaW5pdGlhdG9yLT5zbHBfc2VydmVyKTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2luaXRfcHJpX3JhZGl1c19zZXJ2ZXI6CisJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIGluaXRpYXRvci0+cHJpX3JhZGl1c19zZXJ2ZXIpOworCQlicmVhazsKKwljYXNlIGliZnRfaW5pdF9zZWNfcmFkaXVzX3NlcnZlcjoKKwkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgaW5pdGlhdG9yLT5zZWNfcmFkaXVzX3NlcnZlcik7CisJCWJyZWFrOworCWNhc2UgaWJmdF9pbml0X2luaXRpYXRvcl9uYW1lOgorCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCBpbml0aWF0b3ItPmluaXRpYXRvcl9uYW1lX2xlbiwKKwkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsKKwkJCQkgICAgICBpbml0aWF0b3ItPmluaXRpYXRvcl9uYW1lX29mZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBzdHIgLSBidWY7Cit9CisKK3NzaXplX3QgaWJmdF9hdHRyX3Nob3dfbmljKHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAorCQkJICAgIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGliZnRfbmljICpuaWMgPSBlbnRyeS0+bmljOworCXZvaWQgKmliZnRfbG9jID0gZW50cnktPmhlYWRlcjsKKwljaGFyICpzdHIgPSBidWY7CisJY2hhciAqbWFjOworCWludCB2YWw7CisKKwlpZiAoIW5pYykKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKKwljYXNlIGliZnRfZXRoX2luZGV4OgorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT5oZHIuaW5kZXgpOworCQlicmVhazsKKwljYXNlIGliZnRfZXRoX2ZsYWdzOgorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT5oZHIuZmxhZ3MpOworCQlicmVhazsKKwljYXNlIGliZnRfZXRoX2lwX2FkZHI6CisJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIG5pYy0+aXBfYWRkcik7CisJCWJyZWFrOworCWNhc2UgaWJmdF9ldGhfc3VibmV0X21hc2s6CisJCXZhbCA9IH4oKDEgPDwgKDMyLW5pYy0+c3VibmV0X21hc2tfcHJlZml4KSktMSk7CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgTklQUVVBRF9GTVQsCisJCQkgICAgICAgKHU4KSh2YWwgPj4gMjQpLCAodTgpKHZhbCA+PiAxNiksCisJCQkgICAgICAgKHU4KSh2YWwgPj4gOCksICh1OCkodmFsKSk7CisJCWJyZWFrOworCWNhc2UgaWJmdF9ldGhfb3JpZ2luOgorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT5vcmlnaW4pOworCQlicmVhazsKKwljYXNlIGliZnRfZXRoX2dhdGV3YXk6CisJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIG5pYy0+Z2F0ZXdheSk7CisJCWJyZWFrOworCWNhc2UgaWJmdF9ldGhfcHJpbWFyeV9kbnM6CisJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIG5pYy0+cHJpbWFyeV9kbnMpOworCQlicmVhazsKKwljYXNlIGliZnRfZXRoX3NlY29uZGFyeV9kbnM6CisJCXN0ciArPSBzcHJpbnRmX2lwYWRkcihzdHIsIG5pYy0+c2Vjb25kYXJ5X2Rucyk7CisJCWJyZWFrOworCWNhc2UgaWJmdF9ldGhfZGhjcDoKKwkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgbmljLT5kaGNwKTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2V0aF92bGFuOgorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgbmljLT52bGFuKTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2V0aF9tYWM6CisJCW1hYyA9IG5pYy0+bWFjOworCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCSAgICAgICAodTgpbWFjWzBdLCAodTgpbWFjWzFdLCAodTgpbWFjWzJdLAorCQkJICAgICAgICh1OCltYWNbM10sICh1OCltYWNbNF0sICh1OCltYWNbNV0pOworCQlicmVhazsKKwljYXNlIGliZnRfZXRoX2hvc3RuYW1lOgorCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCBuaWMtPmhvc3RuYW1lX2xlbiwKKwkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsgbmljLT5ob3N0bmFtZV9vZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3RyIC0gYnVmOworfTsKKworc3NpemVfdCBpYmZ0X2F0dHJfc2hvd190YXJnZXQoc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCisJCQkgICAgICAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWJmdF90Z3QgKnRndCA9IGVudHJ5LT50Z3Q7CisJdm9pZCAqaWJmdF9sb2MgPSBlbnRyeS0+aGVhZGVyOworCWNoYXIgKnN0ciA9IGJ1ZjsKKwlpbnQgaTsKKworCWlmICghdGd0KQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoYXR0ci0+dHlwZSkgeworCWNhc2UgaWJmdF90Z3RfaW5kZXg6CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCB0Z3QtPmhkci5pbmRleCk7CisJCWJyZWFrOworCWNhc2UgaWJmdF90Z3RfZmxhZ3M6CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCB0Z3QtPmhkci5mbGFncyk7CisJCWJyZWFrOworCWNhc2UgaWJmdF90Z3RfaXBfYWRkcjoKKwkJc3RyICs9IHNwcmludGZfaXBhZGRyKHN0ciwgdGd0LT5pcF9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X3RndF9wb3J0OgorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgdGd0LT5wb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X3RndF9sdW46CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlzdHIgKz0gc3ByaW50ZihzdHIsICIleCIsICh1OCl0Z3QtPmx1bltpXSk7CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7CisJCWJyZWFrOworCWNhc2UgaWJmdF90Z3RfbmljX2Fzc29jOgorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZFxuIiwgdGd0LT5uaWNfYXNzb2MpOworCQlicmVhazsKKwljYXNlIGliZnRfdGd0X2NoYXBfdHlwZToKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIHRndC0+Y2hhcF90eXBlKTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X3RndF9uYW1lOgorCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCB0Z3QtPnRndF9uYW1lX2xlbiwKKwkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsgdGd0LT50Z3RfbmFtZV9vZmYpOworCQlicmVhazsKKwljYXNlIGliZnRfdGd0X2NoYXBfbmFtZToKKwkJc3RyICs9IHNwcmludGZfc3RyaW5nKHN0ciwgdGd0LT5jaGFwX25hbWVfbGVuLAorCQkJCSAgICAgIChjaGFyICopaWJmdF9sb2MgKyB0Z3QtPmNoYXBfbmFtZV9vZmYpOworCQlicmVhazsKKwljYXNlIGliZnRfdGd0X2NoYXBfc2VjcmV0OgorCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCB0Z3QtPmNoYXBfc2VjcmV0X2xlbiwKKwkJCQkgICAgICAoY2hhciAqKWliZnRfbG9jICsgdGd0LT5jaGFwX3NlY3JldF9vZmYpOworCQlicmVhazsKKwljYXNlIGliZnRfdGd0X3Jldl9jaGFwX25hbWU6CisJCXN0ciArPSBzcHJpbnRmX3N0cmluZyhzdHIsIHRndC0+cmV2X2NoYXBfbmFtZV9sZW4sCisJCQkJICAgICAgKGNoYXIgKilpYmZ0X2xvYyArCisJCQkJICAgICAgdGd0LT5yZXZfY2hhcF9uYW1lX29mZik7CisJCWJyZWFrOworCWNhc2UgaWJmdF90Z3RfcmV2X2NoYXBfc2VjcmV0OgorCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCB0Z3QtPnJldl9jaGFwX3NlY3JldF9sZW4sCisJCQkJICAgICAgKGNoYXIgKilpYmZ0X2xvYyArCisJCQkJICAgICAgdGd0LT5yZXZfY2hhcF9zZWNyZXRfb2ZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0ciAtIGJ1ZjsKK30KKworLyoKKyAqIFRoZSByb3V0aW5lIGNhbGxlZCBmb3IgYWxsIHN5c2ZzIGF0dHJpYnV0ZXMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGliZnRfc2hvd19hdHRyaWJ1dGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWJmdF9rb2JqZWN0ICpkZXYgPQorCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGliZnRfa29iamVjdCwga29iaik7CisJc3RydWN0IGliZnRfYXR0cmlidXRlICppYmZ0X2F0dHIgPQorCQljb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGliZnRfYXR0cmlidXRlLCBhdHRyKTsKKwlzc2l6ZV90IHJldCA9IC1FSU87CisJY2hhciAqc3RyID0gYnVmOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWlmIChpYmZ0X2F0dHItPnNob3cpCisJCXJldCA9IGliZnRfYXR0ci0+c2hvdyhkZXYsIGliZnRfYXR0ciwgc3RyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGliZnRfYXR0cl9vcHMgPSB7CisJLnNob3cgPSBpYmZ0X3Nob3dfYXR0cmlidXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgaWJmdF9rdHlwZSA9IHsKKwkucmVsZWFzZSA9IGliZnRfcmVsZWFzZSwKKwkuc3lzZnNfb3BzID0gJmliZnRfYXR0cl9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IGtzZXQgKmliZnRfa3NldDsKKworc3RhdGljIGludCBfX2luaXQgaWJmdF9jaGVja19kZXZpY2Uodm9pZCkKK3sKKwlpbnQgbGVuOworCXU4ICpwb3M7CisJdTggY3N1bSA9IDA7CisKKwlsZW4gPSBpYmZ0X2FkZHItPmxlbmd0aDsKKworCS8qIFNhbml0eSBjaGVja2luZyBvZiBpQkZULiAqLworCWlmIChpYmZ0X2FkZHItPnJldmlzaW9uICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpQkZUIG1vZHVsZSBzdXBwb3J0cyBvbmx5IHJldmlzaW9uIDEsICIgXAorCQkJCSJ3aGlsZSB0aGlzIGlzICVkLlxuIiwgaWJmdF9hZGRyLT5yZXZpc2lvbik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlmb3IgKHBvcyA9ICh1OCAqKWliZnRfYWRkcjsgcG9zIDwgKHU4ICopaWJmdF9hZGRyICsgbGVuOyBwb3MrKykKKwkJY3N1bSArPSAqcG9zOworCisJaWYgKGNzdW0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpQkZUIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gKDB4JXgpIVxuIiwgY3N1bSk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBpYmZ0X3JlZ2lzdGVyX2tvYmplY3RzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBpYmZ0X2NyZWF0ZV9rb2JqZWN0KHN0cnVjdCBpYmZ0X3RhYmxlX2hlYWRlciAqaGVhZGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgaWJmdF9oZHIgKmhkciwKKwkJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgaWJmdF9rb2JqZWN0ICppYmZ0X2tvYmogPSBOVUxMOworCXN0cnVjdCBpYmZ0X25pYyAqbmljID0gKHN0cnVjdCBpYmZ0X25pYyAqKWhkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlpbnQgcmMgPSAwOworCisJaWJmdF9rb2JqID0ga3phbGxvYyhzaXplb2YoKmliZnRfa29iaiksIEdGUF9LRVJORUwpOworCWlmICghaWJmdF9rb2JqKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWliZnRfa29iai0+aGVhZGVyID0gaGVhZGVyOworCWliZnRfa29iai0+aGRyID0gaGRyOworCisJc3dpdGNoIChoZHItPmlkKSB7CisJY2FzZSBpZF9pbml0aWF0b3I6CisJCXJjID0gaWJmdF92ZXJpZnlfaGRyKCJpbml0aWF0b3IiLCBoZHIsIGlkX2luaXRpYXRvciwKKwkJCQkgICAgIHNpemVvZigqaWJmdF9rb2JqLT5pbml0aWF0b3IpKTsKKwkJYnJlYWs7CisJY2FzZSBpZF9uaWM6CisJCXJjID0gaWJmdF92ZXJpZnlfaGRyKCJldGhlcm5ldCIsIGhkciwgaWRfbmljLAorCQkJCSAgICAgc2l6ZW9mKCppYmZ0X2tvYmotPm5pYykpOworCQlicmVhazsKKwljYXNlIGlkX3RhcmdldDoKKwkJcmMgPSBpYmZ0X3ZlcmlmeV9oZHIoInRhcmdldCIsIGhkciwgaWRfdGFyZ2V0LAorCQkJCSAgICAgc2l6ZW9mKCppYmZ0X2tvYmotPnRndCkpOworCQlicmVhazsKKwljYXNlIGlkX3Jlc2VydmVkOgorCWNhc2UgaWRfY29udHJvbDoKKwljYXNlIGlkX2V4dGVuc2lvbnM6CisJCS8qIEZpZWxkcyB3aGljaCB3ZSBkb24ndCBzdXBwb3J0LiBJZ25vcmUgdGhlbSAqLworCQlyYyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiaUJGVCBoYXMgdW5rbm93biBzdHJ1Y3R1cmUgdHlwZSAoJWQpLiAiIFwKKwkJCQkiUmVwb3J0IHRoaXMgYnVnIHRvICUuNnMhXG4iLCBoZHItPmlkLAorCQkJCWhlYWRlci0+b2VtX2lkKTsKKwkJcmMgPSAxOworCQlicmVhazsKKwl9CisKKwlpZiAocmMpIHsKKwkJLyogU2tpcCBhZGRpbmcgdGhpcyBrb2JqZWN0LCBidXQgZXhpdCB3aXRoIG5vbi1mYXRhbCBlcnJvci4gKi8KKwkJa2ZyZWUoaWJmdF9rb2JqKTsKKwkJZ290byBvdXRfaW52YWxpZF9zdHJ1Y3Q7CisJfQorCisJaWJmdF9rb2JqLT5rb2JqLmtzZXQgPSBpYmZ0X2tzZXQ7CisKKwlyYyA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZpYmZ0X2tvYmotPmtvYmosICZpYmZ0X2t0eXBlLAorCQkJCSAgTlVMTCwgaWJmdF9pZF9uYW1lc1toZHItPmlkXSwgaGRyLT5pbmRleCk7CisKKwlpZiAocmMpIHsKKwkJa2ZyZWUoaWJmdF9rb2JqKTsKKwkJZ290byBvdXQ7CisJfQorCisJa29iamVjdF91ZXZlbnQoJmliZnRfa29iai0+a29iaiwgS09CSl9BREQpOworCisJaWYgKGhkci0+aWQgPT0gaWRfbmljKSB7CisJCS8qCisJCSogV2UgZG9uJ3Qgc2VhcmNoIGZvciB0aGUgZGV2aWNlIGluIG90aGVyIGRvbWFpbnMgdGhhbgorCQkqIHplcm8uIFRoaXMgaXMgYmVjYXVzZSBvbiB4ODYgcGxhdGZvcm1zIHRoZSBCSU9TCisJCSogZXhlY3V0ZXMgb25seSBkZXZpY2VzIHdoaWNoIGFyZSBpbiBkb21haW4gMC4gRnVydGhlcm1vcmUsIHRoZQorCQkqIGlCRlQgc3BlYyBkb2Vzbid0IGhhdmUgYSBkb21haW4gaWQgZmllbGQgOi0oCisJCSovCisJCXBjaV9kZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgobmljLT5wY2lfYmRmICYgMHhmZjAwKSA+PiA4LAorCQkJCQkgICAgICAgKG5pYy0+cGNpX2JkZiAmIDB4ZmYpKTsKKwkJaWYgKHBjaV9kZXYpIHsKKwkJCXJjID0gc3lzZnNfY3JlYXRlX2xpbmsoJmliZnRfa29iai0+a29iaiwKKwkJCQkJICAgICAgICZwY2lfZGV2LT5kZXYua29iaiwgImRldmljZSIpOworCQkJcGNpX2Rldl9wdXQocGNpX2Rldik7CisJCX0KKwl9CisKKwkvKiBOb3RoaW5nIGJyb2tlIHNvIGxldHMgYWRkIGl0IHRvIHRoZSBsaXN0LiAqLworCWxpc3RfYWRkX3RhaWwoJmliZnRfa29iai0+bm9kZSwgbGlzdCk7CitvdXQ6CisJcmV0dXJuIHJjOworb3V0X2ludmFsaWRfc3RydWN0OgorCS8qIFVuc3VwcG9ydGVkIHN0cnVjdHMgYXJlIHNraXBwZWQuICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTY2FuIHRoZSBJQkZUIHRhYmxlIHN0cnVjdHVyZSBmb3IgdGhlIE5JQyBhbmQgVGFyZ2V0IGZpZWxkcy4gV2hlbgorICogZm91bmQgYWRkIHRoZW0gb24gdGhlIHBhc3NlZC1pbiBsaXN0LiBXZSBkbyBub3Qgc3VwcG9ydCB0aGUgb3RoZXIKKyAqIGZpZWxkcyBhdCB0aGlzIHBvaW50LCBzbyB0aGV5IGFyZSBza2lwcGVkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBpYmZ0X3JlZ2lzdGVyX2tvYmplY3RzKHN0cnVjdCBpYmZ0X3RhYmxlX2hlYWRlciAqaGVhZGVyLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGliZnRfY29udHJvbCAqY29udHJvbCA9IE5VTEw7CisJdm9pZCAqcHRyLCAqZW5kOworCWludCByYyA9IDA7CisJdTE2IG9mZnNldDsKKwl1MTYgZW90X29mZnNldDsKKworCWNvbnRyb2wgPSAodm9pZCAqKWhlYWRlciArIHNpemVvZigqaGVhZGVyKTsKKwllbmQgPSAodm9pZCAqKWNvbnRyb2wgKyBjb250cm9sLT5oZHIubGVuZ3RoOworCWVvdF9vZmZzZXQgPSAodm9pZCAqKWhlYWRlciArIGhlYWRlci0+bGVuZ3RoIC0KKwkJICAgICAodm9pZCAqKWNvbnRyb2wgLSBzaXplb2YoKmhlYWRlcik7CisJcmMgPSBpYmZ0X3ZlcmlmeV9oZHIoImNvbnRyb2wiLCAoc3RydWN0IGliZnRfaGRyICopY29udHJvbCwgaWRfY29udHJvbCwKKwkJCSAgICAgc2l6ZW9mKCpjb250cm9sKSk7CisKKwkvKiBpQkZUIHRhYmxlIHNhZmV0eSBjaGVja2luZyAqLworCXJjIHw9ICgoY29udHJvbC0+aGRyLmluZGV4KSA/IC1FTk9ERVYgOiAwKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpQkZUIGVycm9yOiBDb250cm9sIGhlYWRlciBpcyBpbnZhbGlkIVxuIik7CisJCXJldHVybiByYzsKKwl9CisJZm9yIChwdHIgPSAmY29udHJvbC0+aW5pdGlhdG9yX29mZjsgcHRyIDwgZW5kOyBwdHIgKz0gc2l6ZW9mKHUxNikpIHsKKwkJb2Zmc2V0ID0gKih1MTYgKilwdHI7CisJCWlmIChvZmZzZXQgJiYgb2Zmc2V0IDwgaGVhZGVyLT5sZW5ndGggJiYgb2Zmc2V0IDwgZW90X29mZnNldCkgeworCQkJcmMgPSBpYmZ0X2NyZWF0ZV9rb2JqZWN0KGhlYWRlciwKKwkJCQkJCSAodm9pZCAqKWhlYWRlciArIG9mZnNldCwKKwkJCQkJCSBsaXN0KTsKKwkJCWlmIChyYykKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgaWJmdF91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2hlYWQgKmF0dHJfbGlzdCwKKwkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqa29ial9saXN0KQoreworCXN0cnVjdCBpYmZ0X2tvYmplY3QgKmRhdGEgPSBOVUxMLCAqbjsKKwlzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIgPSBOVUxMLCAqbTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdHRyLCBtLCBhdHRyX2xpc3QsIG5vZGUpIHsKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoYXR0ci0+a29iaiwgJmF0dHItPmF0dHIpOworCQlsaXN0X2RlbCgmYXR0ci0+bm9kZSk7CisJCWtmcmVlKGF0dHIpOworCX07CisJbGlzdF9kZWxfaW5pdChhdHRyX2xpc3QpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRhdGEsIG4sIGtvYmpfbGlzdCwgbm9kZSkgeworCQlsaXN0X2RlbCgmZGF0YS0+bm9kZSk7CisJCWlmIChkYXRhLT5oZHItPmlkID09IGlkX25pYykKKwkJCXN5c2ZzX3JlbW92ZV9saW5rKCZkYXRhLT5rb2JqLCAiZGV2aWNlIik7CisJCWtvYmplY3RfcHV0KCZkYXRhLT5rb2JqKTsKKwl9OworCWxpc3RfZGVsX2luaXQoa29ial9saXN0KTsKK30KKworc3RhdGljIGludCBfX2luaXQgaWJmdF9jcmVhdGVfYXR0cmlidXRlKHN0cnVjdCBpYmZ0X2tvYmplY3QgKmtvYmpfZGF0YSwKKwkJCQkJIGludCB0eXBlLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgaWJmdF9rb2JqZWN0ICosCisJCQkJCQkJIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSosCisJCQkJCQkJIGNoYXIgKmJ1ZiksCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciA9IE5VTEw7CisJc3RydWN0IGliZnRfaGRyICpoZHIgPSBrb2JqX2RhdGEtPmhkcjsKKworCWF0dHIgPSBrbWFsbG9jKHNpemVvZigqYXR0ciksIEdGUF9LRVJORUwpOworCWlmICghYXR0cikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhdHRyLT5hdHRyLm5hbWUgPSBuYW1lOworCWF0dHItPmF0dHIubW9kZSA9IFNfSVJVU1I7CisJYXR0ci0+YXR0ci5vd25lciA9IFRISVNfTU9EVUxFOworCisJYXR0ci0+aGRyID0gaGRyOworCWF0dHItPnNob3cgPSBzaG93OworCWF0dHItPmtvYmogPSAma29ial9kYXRhLT5rb2JqOworCWF0dHItPnR5cGUgPSB0eXBlOworCisJbGlzdF9hZGRfdGFpbCgmYXR0ci0+bm9kZSwgbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lcnMgdG8gY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbnRyeSBpcyB2YWxpZAorICogaW4gdGhlIHByb3BlciBpQkZUIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgaWJmdF9jaGVja19uaWNfZm9yKHN0cnVjdCBpYmZ0X25pYyAqbmljLCBpbnQgZW50cnkpCit7CisJaW50IHJjID0gMDsKKworCXN3aXRjaCAoZW50cnkpIHsKKwljYXNlIGliZnRfZXRoX2luZGV4OgorCWNhc2UgaWJmdF9ldGhfZmxhZ3M6CisJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2V0aF9pcF9hZGRyOgorCQlpZiAoIW1lbWNtcChuaWMtPmRoY3AsIG51bGxzLCBzaXplb2YobmljLT5kaGNwKSkpCisJCQlyYyA9IDE7CisJCWJyZWFrOworCWNhc2UgaWJmdF9ldGhfc3VibmV0X21hc2s6CisJCWlmICghbWVtY21wKG5pYy0+ZGhjcCwgbnVsbHMsIHNpemVvZihuaWMtPmRoY3ApKSkKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2V0aF9vcmlnaW46CisJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2V0aF9nYXRld2F5OgorCQlpZiAobWVtY21wKG5pYy0+Z2F0ZXdheSwgbnVsbHMsIHNpemVvZihuaWMtPmdhdGV3YXkpKSkKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2V0aF9wcmltYXJ5X2RuczoKKwkJaWYgKG1lbWNtcChuaWMtPnByaW1hcnlfZG5zLCBudWxscywKKwkJCSAgIHNpemVvZihuaWMtPnByaW1hcnlfZG5zKSkpCisJCQlyYyA9IDE7CisJCWJyZWFrOworCWNhc2UgaWJmdF9ldGhfc2Vjb25kYXJ5X2RuczoKKwkJaWYgKG1lbWNtcChuaWMtPnNlY29uZGFyeV9kbnMsIG51bGxzLAorCQkJICAgc2l6ZW9mKG5pYy0+c2Vjb25kYXJ5X2RucykpKQorCQkJcmMgPSAxOworCQlicmVhazsKKwljYXNlIGliZnRfZXRoX2RoY3A6CisJCWlmIChtZW1jbXAobmljLT5kaGNwLCBudWxscywgc2l6ZW9mKG5pYy0+ZGhjcCkpKQorCQkJcmMgPSAxOworCQlicmVhazsKKwljYXNlIGliZnRfZXRoX3ZsYW46CisJY2FzZSBpYmZ0X2V0aF9tYWM6CisJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2V0aF9ob3N0bmFtZToKKwkJaWYgKG5pYy0+aG9zdG5hbWVfb2ZmKQorCQkJcmMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGliZnRfY2hlY2tfdGd0X2ZvcihzdHJ1Y3QgaWJmdF90Z3QgKnRndCwgaW50IGVudHJ5KQoreworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKGVudHJ5KSB7CisJY2FzZSBpYmZ0X3RndF9pbmRleDoKKwljYXNlIGliZnRfdGd0X2ZsYWdzOgorCWNhc2UgaWJmdF90Z3RfaXBfYWRkcjoKKwljYXNlIGliZnRfdGd0X3BvcnQ6CisJY2FzZSBpYmZ0X3RndF9sdW46CisJY2FzZSBpYmZ0X3RndF9uaWNfYXNzb2M6CisJY2FzZSBpYmZ0X3RndF9jaGFwX3R5cGU6CisJCXJjID0gMTsKKwljYXNlIGliZnRfdGd0X25hbWU6CisJCWlmICh0Z3QtPnRndF9uYW1lX2xlbikKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X3RndF9jaGFwX25hbWU6CisJY2FzZSBpYmZ0X3RndF9jaGFwX3NlY3JldDoKKwkJaWYgKHRndC0+Y2hhcF9uYW1lX2xlbikKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X3RndF9yZXZfY2hhcF9uYW1lOgorCWNhc2UgaWJmdF90Z3RfcmV2X2NoYXBfc2VjcmV0OgorCQlpZiAodGd0LT5yZXZfY2hhcF9uYW1lX2xlbikKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpYmZ0X2NoZWNrX2luaXRpYXRvcl9mb3Ioc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0LAorCQkJCQkgICAgaW50IGVudHJ5KQoreworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKGVudHJ5KSB7CisJY2FzZSBpYmZ0X2luaXRfaW5kZXg6CisJY2FzZSBpYmZ0X2luaXRfZmxhZ3M6CisJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2luaXRfaXNuc19zZXJ2ZXI6CisJCWlmIChtZW1jbXAoaW5pdC0+aXNuc19zZXJ2ZXIsIG51bGxzLAorCQkJICAgc2l6ZW9mKGluaXQtPmlzbnNfc2VydmVyKSkpCisJCQlyYyA9IDE7CisJCWJyZWFrOworCWNhc2UgaWJmdF9pbml0X3NscF9zZXJ2ZXI6CisJCWlmIChtZW1jbXAoaW5pdC0+c2xwX3NlcnZlciwgbnVsbHMsCisJCQkgICBzaXplb2YoaW5pdC0+c2xwX3NlcnZlcikpKQorCQkJcmMgPSAxOworCQlicmVhazsKKwljYXNlIGliZnRfaW5pdF9wcmlfcmFkaXVzX3NlcnZlcjoKKwkJaWYgKG1lbWNtcChpbml0LT5wcmlfcmFkaXVzX3NlcnZlciwgbnVsbHMsCisJCQkgICBzaXplb2YoaW5pdC0+cHJpX3JhZGl1c19zZXJ2ZXIpKSkKKwkJCXJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBpYmZ0X2luaXRfc2VjX3JhZGl1c19zZXJ2ZXI6CisJCWlmIChtZW1jbXAoaW5pdC0+c2VjX3JhZGl1c19zZXJ2ZXIsIG51bGxzLAorCQkJICAgc2l6ZW9mKGluaXQtPnNlY19yYWRpdXNfc2VydmVyKSkpCisJCQlyYyA9IDE7CisJCWJyZWFrOworCWNhc2UgaWJmdF9pbml0X2luaXRpYXRvcl9uYW1lOgorCQlpZiAoaW5pdC0+aW5pdGlhdG9yX25hbWVfbGVuKQorCQkJcmMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiAgUmVnaXN0ZXIgdGhlIGF0dHJpYnV0ZXMgZm9yIGFsbCBvZiB0aGUga29iamVjdHMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGliZnRfcmVnaXN0ZXJfYXR0cmlidXRlcyhzdHJ1Y3QgbGlzdF9oZWFkICprb2JqZWN0X2xpc3QsCisJCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICphdHRyX2xpc3QpCit7CisJaW50IHJjID0gMCwgaSA9IDA7CisJc3RydWN0IGliZnRfa29iamVjdCAqZGF0YSA9IE5VTEw7CisJc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyID0gTlVMTCwgKm07CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhdGEsIGtvYmplY3RfbGlzdCwgbm9kZSkgeworCQlzd2l0Y2ggKGRhdGEtPmhkci0+aWQpIHsKKwkJY2FzZSBpZF9uaWM6CisJCQlmb3IgKGkgPSAwOyBpIDwgaWJmdF9ldGhfZW5kX21hcmtlciAmJiAhcmM7IGkrKykKKwkJCQlpZiAoaWJmdF9jaGVja19uaWNfZm9yKGRhdGEtPm5pYywgaSkpCisJCQkJCXJjID0gaWJmdF9jcmVhdGVfYXR0cmlidXRlKGRhdGEsIGksCisJCQkJCQlpYmZ0X2V0aF9wcm9wZXJ0aWVzW2ldLAorCQkJCQkJaWJmdF9hdHRyX3Nob3dfbmljLCBhdHRyX2xpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgaWRfdGFyZ2V0OgorCQkJZm9yIChpID0gMDsgaSA8IGliZnRfdGd0X2VuZF9tYXJrZXIgJiYgIXJjOyBpKyspCisJCQkJaWYgKGliZnRfY2hlY2tfdGd0X2ZvcihkYXRhLT50Z3QsIGkpKQorCQkJCQlyYyA9IGliZnRfY3JlYXRlX2F0dHJpYnV0ZShkYXRhLCBpLAorCQkJCQkJaWJmdF90Z3RfcHJvcGVydGllc1tpXSwKKwkJCQkJCWliZnRfYXR0cl9zaG93X3RhcmdldCwKKwkJCQkJCWF0dHJfbGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBpZF9pbml0aWF0b3I6CisJCQlmb3IgKGkgPSAwOyBpIDwgaWJmdF9pbml0X2VuZF9tYXJrZXIgJiYgIXJjOyBpKyspCisJCQkJaWYgKGliZnRfY2hlY2tfaW5pdGlhdG9yX2ZvcigKKwkJCQkJZGF0YS0+aW5pdGlhdG9yLCBpKSkKKwkJCQkJcmMgPSBpYmZ0X2NyZWF0ZV9hdHRyaWJ1dGUoZGF0YSwgaSwKKwkJCQkJCWliZnRfaW5pdGlhdG9yX3Byb3BlcnRpZXNbaV0sCisJCQkJCQlpYmZ0X2F0dHJfc2hvd19pbml0aWF0b3IsCisJCQkJCQlhdHRyX2xpc3QpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAocmMpCisJCQlicmVhazsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF0dHIsIG0sIGF0dHJfbGlzdCwgbm9kZSkgeworCQlyYyA9IHN5c2ZzX2NyZWF0ZV9maWxlKGF0dHItPmtvYmosICZhdHRyLT5hdHRyKTsKKwkJaWYgKHJjKSB7CisJCQlsaXN0X2RlbCgmYXR0ci0+bm9kZSk7CisJCQlrZnJlZShhdHRyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKgorICogaWJmdF9pbml0KCkgLSBjcmVhdGVzIHN5c2ZzIHRyZWUgZW50cmllcyBmb3IgdGhlIGlCRlQgZGF0YS4KKyAqLworc3RhdGljIGludCBfX2luaXQgaWJmdF9pbml0KHZvaWQpCit7CisJaW50IHJjID0gMDsKKworCWliZnRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImliZnQiLCBOVUxMLCBmaXJtd2FyZV9rb2JqKTsKKwlpZiAoIWliZnRfa3NldCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoaWJmdF9hZGRyKSB7CisJCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbHguXG4iLAorCQkgICAgICAgdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CisKKwkJcmMgPSBpYmZ0X2NoZWNrX2RldmljZSgpOworCQlpZiAocmMpCisJCQlnb3RvIG91dF9maXJtd2FyZV91bnJlZ2lzdGVyOworCisJCS8qIFNjYW4gdGhlIElCRlQgZm9yIGRhdGEgYW5kIHJlZ2lzdGVyIHRoZSBrb2JqZWN0cy4gKi8KKwkJcmMgPSBpYmZ0X3JlZ2lzdGVyX2tvYmplY3RzKGliZnRfYWRkciwgJmliZnRfa29iamVjdF9saXN0KTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXRfZnJlZTsKKworCQkvKiBSZWdpc3RlciB0aGUgYXR0cmlidXRlcyAqLworCQlyYyA9IGliZnRfcmVnaXN0ZXJfYXR0cmlidXRlcygmaWJmdF9rb2JqZWN0X2xpc3QsCisJCQkJCSAgICAgICZpYmZ0X2F0dHJfbGlzdCk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0X2ZyZWU7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0lORk8gIk5vIGlCRlQgZGV0ZWN0ZWQuXG4iKTsKKworCXJldHVybiAwOworCitvdXRfZnJlZToKKwlpYmZ0X3VucmVnaXN0ZXIoJmliZnRfYXR0cl9saXN0LCAmaWJmdF9rb2JqZWN0X2xpc3QpOworb3V0X2Zpcm13YXJlX3VucmVnaXN0ZXI6CisJa3NldF91bnJlZ2lzdGVyKGliZnRfa3NldCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaWJmdF9leGl0KHZvaWQpCit7CisJaWJmdF91bnJlZ2lzdGVyKCZpYmZ0X2F0dHJfbGlzdCwgJmliZnRfa29iamVjdF9saXN0KTsKKwlrc2V0X3VucmVnaXN0ZXIoaWJmdF9rc2V0KTsKK30KKworbW9kdWxlX2luaXQoaWJmdF9pbml0KTsKK21vZHVsZV9leGl0KGliZnRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGU1ZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwpAQCAtMCwwICsxLDg0IEBACisvKgorICogIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KKyAqICBieSBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+CisgKiAgQ29weXJpZ2h0IDIwMDcgSUJNLCBJbmMuCisgKiAgYnkgS29ucmFkIFJ6ZXN6dXRlayA8a29ucmFkckBsaW51eC52bmV0LmlibS5jb20+CisgKiAgQ29weXJpZ2h0IDIwMDgKKyAqICBieSBLb25yYWQgUnplc3p1dGVrIDxrZXR1enNlenJAZGFybm9rLm9yZz4KKyAqCisgKiBUaGlzIGNvZGUgZmluZHMgdGhlIGlTQ1NJIEJvb3QgRm9ybWF0IFRhYmxlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyLjAgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKworLyoKKyAqIFBoeXNpY2FsIGxvY2F0aW9uIG9mIGlTQ1NJIEJvb3QgRm9ybWF0IFRhYmxlLgorICovCitzdHJ1Y3QgaWJmdF90YWJsZV9oZWFkZXIgKmliZnRfYWRkcjsKK0VYUE9SVF9TWU1CT0xfR1BMKGliZnRfYWRkcik7CisKKyNkZWZpbmUgSUJGVF9TSUdOICJpQkZUIgorI2RlZmluZSBJQkZUX1NJR05fTEVOIDQKKyNkZWZpbmUgSUJGVF9TVEFSVCAweDgwMDAwIC8qIDUxMmtCICovCisjZGVmaW5lIElCRlRfRU5EIDB4MTAwMDAwIC8qIDFNQiAqLworI2RlZmluZSBWR0FfTUVNIDB4QTAwMDAgLyogVkdBIGJ1ZmZlciAqLworI2RlZmluZSBWR0FfU0laRSAweDIwMDAwIC8qIDEyOGtCICovCisKKworLyoKKyAqIFJvdXRpbmUgdXNlZCB0byBmaW5kIHRoZSBpU0NTSSBCb290IEZvcm1hdCBUYWJsZS4gVGhlIGxvZ2ljYWwKKyAqIGtlcm5lbCBhZGRyZXNzIGlzIHNldCBpbiB0aGUgaWJmdF9hZGRyIGdsb2JhbCB2YXJpYWJsZS4KKyAqLwordm9pZCBfX2luaXQgcmVzZXJ2ZV9pYmZ0X3JlZ2lvbih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcG9zOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCXZvaWQgKnZpcnQ7CisKKwlpYmZ0X2FkZHIgPSAwOworCisJZm9yIChwb3MgPSBJQkZUX1NUQVJUOyBwb3MgPCBJQkZUX0VORDsgcG9zICs9IDE2KSB7CisJCS8qIFRoZSB0YWJsZSBjYW4ndCBiZSBpbnNpZGUgdGhlIFZHQSBCSU9TIHJlc2VydmVkIHNwYWNlLAorCQkgKiBzbyBza2lwIHRoYXQgYXJlYSAqLworCQlpZiAocG9zID09IFZHQV9NRU0pCisJCQlwb3MgKz0gVkdBX1NJWkU7CisJCXZpcnQgPSBwaHlzX3RvX3ZpcnQocG9zKTsKKwkJaWYgKG1lbWNtcCh2aXJ0LCBJQkZUX1NJR04sIElCRlRfU0lHTl9MRU4pID09IDApIHsKKwkJCXVuc2lnbmVkIGxvbmcgKmFkZHIgPQorCQkJICAgICh1bnNpZ25lZCBsb25nICopcGh5c190b192aXJ0KHBvcyArIDQpOworCQkJbGVuID0gKmFkZHI7CisJCQkvKiBpZiB0aGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSBleHRlbmRzIHBhc3QgMU0sCisJCQkgKiB0aGUgdGFibGUgY2Fubm90IGJlIHZhbGlkLiAqLworCQkJaWYgKHBvcyArIGxlbiA8PSAoSUJGVF9FTkQtMSkpIHsKKwkJCQlpYmZ0X2FkZHIgPSAoc3RydWN0IGliZnRfdGFibGVfaGVhZGVyICopdmlydDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaWJmdF9hZGRyKQorCQlyZXNlcnZlX2Jvb3RtZW0ocG9zLCBQQUdFX0FMSUdOKGxlbiksIEJPT1RNRU1fREVGQVVMVCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZXNlcnZlX2liZnRfcmVnaW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCmluZGV4IDkyNTgzY2QuLjZlNzJmZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSBwY2E5NTN4X2dwaW9fZGlyZWN0aW9uX291dHB1dDsKIAlnYy0+Z2V0ID0gcGNhOTUzeF9ncGlvX2dldF92YWx1ZTsKIAlnYy0+c2V0ID0gcGNhOTUzeF9ncGlvX3NldF92YWx1ZTsKKwlnYy0+Y2FuX3NsZWVwID0gMTsKIAogCWdjLT5iYXNlID0gY2hpcC0+Z3Bpb19zdGFydDsKIAlnYy0+bmdwaW8gPSBncGlvczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGQ3M2E3NjguLmYwYjAwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtOTY4LDcgKzk2OCw3IEBACiAJCXNpemUtLTsKIAl9CiAKLQkvKiBkdW1wIHRoZSByZXBvcnQgZGVzY3JpcHRvciAqLworCS8qIGR1bXAgdGhlIHJlcG9ydCAqLwogCWRiZ19oaWQoInJlcG9ydCAlZCAoc2l6ZSAldSkgPSAiLCBuLCBzaXplKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogCQlkYmdfaGlkX2xpbmUoIiAlMDJ4IiwgZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IDVhMzhmYjIuLmMzZWIzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC05OCwxOCArOTgsMTYgQEAKIAogc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gYXBwbGVfZm5fa2V5c1tdID0gewogCXsgS0VZX0JBQ0tTUEFDRSwgS0VZX0RFTEVURSB9LAotCXsgS0VZX0YxLCAgICAgICBLRVlfQlJJR0hUTkVTU0RPV04sICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GMiwgICAgICAgS0VZX0JSSUdIVE5FU1NVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjMsICAgICAgIEtFWV9DWUNMRVdJTkRPV1MsICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LCAvKiBFeHBvc8OpICovCi0JeyBLRVlfRjQsICAgICAgIEtFWV9GTl9GNCwgICAgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LCAvKiBEYXNoYm9hcmQgKi8KLQl7IEtFWV9GNSwgICAgICAgS0VZX0ZOX0Y1IH0sCi0JeyBLRVlfRjYsICAgICAgIEtFWV9GTl9GNiB9LAotCXsgS0VZX0Y3LCAgICAgICBLRVlfQkFDSywgICAgICAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GOCwgICAgICAgS0VZX1BMQVlQQVVTRSwgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjksICAgICAgIEtFWV9GT1JXQVJELCAgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YxMCwgICAgICBLRVlfTVVURSwgICAgICAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GMTEsICAgICAgS0VZX1ZPTFVNRURPV04sICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjEyLCAgICAgIEtFWV9WT0xVTUVVUCwgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxLCAgICAgICBLRVlfQlJJR0hUTkVTU0RPV04sIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YyLCAgICAgICBLRVlfQlJJR0hUTkVTU1VQLCAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YzLCAgICAgICBLRVlfRk5fRjUsICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LCAvKiBFeHBvc+kgKi8KKwl7IEtFWV9GNCwgICAgICAgS0VZX0ZOX0Y0LCAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRGFzaGJvYXJkICovCisJeyBLRVlfRjcsICAgICAgIEtFWV9QUkVWSU9VU1NPTkcsICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjgsICAgICAgIEtFWV9QTEFZUEFVU0UsICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjksICAgICAgIEtFWV9ORVhUU09ORywgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjEwLCAgICAgIEtFWV9NVVRFLCAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjExLCAgICAgIEtFWV9WT0xVTUVET1dOLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjEyLCAgICAgIEtFWV9WT0xVTUVVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCiAJeyBLRVlfVVAsICAgICAgIEtFWV9QQUdFVVAgfSwKIAl7IEtFWV9ET1dOLCAgICAgS0VZX1BBR0VET1dOIH0sCiAJeyBLRVlfTEVGVCwgICAgIEtFWV9IT01FIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IGIzOGU1NTkuLmQ5NTk3OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJdXNiaGlkLT51cmJjdHJsLT5waXBlID0gdXNiX3JjdmN0cmxwaXBlKGhpZF90b191c2JfZGV2KGhpZCksIDApOwogCQltYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KGhpZF90b191c2JfZGV2KGhpZCksIHVzYmhpZC0+dXJiY3RybC0+cGlwZSwgMCk7CiAJCWlmIChtYXhwYWNrZXQgPiAwKSB7Ci0JCQlwYWRsZW4gPSAobGVuICsgbWF4cGFja2V0IC0gMSkgLyBtYXhwYWNrZXQ7CisJCQlwYWRsZW4gPSBESVZfUk9VTkRfVVAobGVuLCBtYXhwYWNrZXQpOwogCQkJcGFkbGVuICo9IG1heHBhY2tldDsKIAkJCWlmIChwYWRsZW4gPiB1c2JoaWQtPmJ1ZnNpemUpCiAJCQkJcGFkbGVuID0gdXNiaGlkLT5idWZzaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggZTZkMDVmNi4uZTI5YTA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC0zNDUsNiArMzQ1LDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OQVRJT05BTF9TRU1JQ09ORFVDVE9SIDB4MDQwMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX05fU19IQVJNT05ZICAgICAgIDB4YzM1OQogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTkFUU1UgICAgICAgICAgICAgMHgwOGI3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkFUU1VfR0FNRVBBRCAgICAgMHgwMDAxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ORUMJCTB4MDczZQogI2RlZmluZSBVU0JfREVWSUNFX0lEX05FQ19VU0JfR0FNRV9QQUQJMHgwMzAxCiAKQEAgLTQyNiw2ICs0MjksNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9IQVBQLCBVU0JfREVWSUNFX0lEX1VHQ0lfRFJJVklORywgSElEX1FVSVJLX0JBRFBBRCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9IQVBQLCBVU0JfREVWSUNFX0lEX1VHQ0lfRkxZSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9GSUdIVElORywgSElEX1FVSVJLX0JBRFBBRCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9OQVRTVSwgVVNCX0RFVklDRV9JRF9OQVRTVV9HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX05FQywgVVNCX0RFVklDRV9JRF9ORUNfVVNCX0dBTUVfUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NBSVRFSywgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAJeyBVU0JfVkVORE9SX0lEX1RPUE1BWCwgVVNCX0RFVklDRV9JRF9UT1BNQVhfQ09CUkFQQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKQEAgLTYyNCw3ICs2MjgsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSVNPLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0FQUExFX0lTT19LRVlCT0FSRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfQU5TSSwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9JU08sIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIHwgSElEX1FVSVJLX0FQUExFX0lTT19LRVlCT0FSRCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0lTTywgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9KSVMsIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19BTlNJLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08sIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNDEwZmZlNC4uNGRjNzZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMTQzLDYgKzE0MywxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhZHQ3NDcwLgogCitjb25maWcgU0VOU09SU19BRFQ3NDczCisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVDc0NzMiCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcworCSAgQURUNzQ3MyB0ZW1wZXJhdHVyZSBtb25pdG9yaW5nIGNoaXBzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGFkdDc0NzMuCisKIGNvbmZpZyBTRU5TT1JTX0s4VEVNUAogCXRyaXN0YXRlICJBTUQgQXRobG9uNjQvRlggb3IgT3B0ZXJvbiB0ZW1wZXJhdHVyZSBzZW5zb3IiCiAJZGVwZW5kcyBvbiBYODYgJiYgUENJICYmIEVYUEVSSU1FTlRBTApAQCAtMzI3LDggKzMzNyw5IEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZSBhbmQKIAkgIHBvd2VyIHNlbnNvcnMgaW4gdmFyaW91cyBJQk0gU3lzdGVtIFggc2VydmVycyB0aGF0IHN1cHBvcnQKLQkgIFBvd2VyRXhlY3V0aXZlLiAgU28gZmFyIHRoaXMgaW5jbHVkZXMgdGhlIHgzNTUwLCB4MzY1MCwgeDM2NTUsCi0JICB4Mzc1NSwgYW5kIGNlcnRhaW4gSFMyMCBibGFkZXMuCisJICBQb3dlckV4ZWN1dGl2ZS4gIFNvIGZhciB0aGlzIGluY2x1ZGVzIHRoZSB4MzM1MCwgeDM1NTAsIHgzNjUwLAorCSAgeDM2NTUsIGFuZCB4Mzc1NTsgdGhlIHgzODAwLCB4Mzg1MCwgYW5kIHgzOTUwIG1vZGVscyB0aGF0IGhhdmUKKwkgIFBDSSBFeHByZXNzOyBhbmQgc29tZSBvZiB0aGUgSFMyeCwgTFMyeCwgYW5kIFFTMnggYmxhZGVzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpYm1wZXguCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCA4MjQxNjEzLi4zYmRiMDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTkyNDApCSs9IGFkbTkyNDAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURTNzgyOCkJKz0gYWRzNzgyOC5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRFQ3NDcwKQkrPSBhZHQ3NDcwLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0FEVDc0NzMpCSs9IGFkdDc0NzMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQVBQTEVTTUMpCSs9IGFwcGxlc21jLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FNUykJKz0gYW1zLwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQVRYUDEpCSs9IGF0eHAxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWQ3NDE4LmMgYi9kcml2ZXJzL2h3bW9uL2FkNzQxOC5jCmluZGV4IGZjZDdmZTcuLjQ2NmI5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWQ3NDE4LmMKKysrIGIvZHJpdmVycy9od21vbi9hZDc0MTguYwpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zIgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjgsIEkyQ19DTElFTlRfRU5EIH07CiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMyhhZDc0MTYsIGFkNzQxNywgYWQ3NDE4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDIxLmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYwppbmRleCBiOTZiZTc3Li5lY2JmNjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYwpAQCAtMzEsMTAgKzMxLDggQEAKIAogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgxOCwgMHgxOSwgMHgxYSwKLQkJCQkJMHgyOSwgMHgyYSwgMHgyYiwKLQkJCQkJMHg0YywgMHg0ZCwgMHg0ZSwKLQkJCQkJSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgxOCwgMHgxOSwgMHgxYSwgMHgyOSwgMHgyYSwgMHgyYiwgMHg0YywgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KIEkyQ19DTElFTlRfSU5TTU9EXzgoYWRtMTAyMSwgYWRtMTAyMywgbWF4MTYxNywgbWF4MTYxN2EsIHRobWMxMCwgbG04NCwgZ2w1MjNzbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jIGIvZHJpdmVycy9od21vbi9hZG0xMDI1LmMKaW5kZXggZTk2YzM3Mi4uMWQ3NmRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDI1LmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDI1LmMKQEAgLTYyLDcgKzYyLDcgQEAKICAqIE5FMTYxOSBoYXMgdHdvIHBvc3NpYmxlIGFkZHJlc3NlczogMHgyYyBhbmQgMHgyZC4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyoKICAqIEluc21vZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCmluZGV4IDgwMDJmNjguLjkwNGM2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMShhZG0xMDI2KTsKQEAgLTE2MjQsNiArMTYyNCw3IEBACiAJJmRldl9hdHRyX3RlbXAzX2NyaXRfZW5hYmxlLmF0dHIsCiAJJmRldl9hdHRyX3RlbXAzX2F1dG9fcG9pbnQxX3B3bS5hdHRyLAogCSZkZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50Ml9wd20uYXR0ciwKKwlOVUxMCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZG0xMDI2X2dyb3VwX3RlbXAzID0gewpAQCAtMTYzOSw2ICsxNjQwLDcgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX2luOV9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luOV9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luOV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkbTEwMjZfZ3JvdXBfaW44XzkgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyOS5jCmluZGV4IDBiYzg5N2QuLjJjNjYwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyOS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyOS5jCkBAIC0zOSwxMCArMzksOCBAQAogICogQWRkcmVzc2VzIHRvIHNjYW4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4MjgsIDB4MjksIDB4MmEsCi0JMHgyYiwgMHgyYywgMHgyZCwKLQkweDJlLCAweDJmLCBJMkNfQ0xJRU5UX0VORAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwKKwkJCQkJCTB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5ECiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDMxLmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYwppbmRleCA1YWFhZDM2Li4yYmZmY2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYwpAQCAtNjEsNyArNjEsNyBAQAogI2RlZmluZSBBRE0xMDMxX0NPTkYyX1RFTVBfRU5BQkxFKGNoYW4pCSgweDEwIDw8IChjaGFuKSkKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMihhZG0xMDMwLCBhZG0xMDMxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtOTI0MC5jIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKaW5kZXggNzY3MWQyYi4uMTQ5ZWYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG05MjQwLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCiAJCQkJCUkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Fkczc4MjguYyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCmluZGV4IDZiOGE3M2UuLmVkNzFhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIEFEUzc4MjhfSU5UX1ZSRUZfTVYgMjUwMCAvKiBJbnRlcm5hbCB2cmVmIGlzIDIuNVYsIDI1MDBtViAqLwogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsCiAJSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzQ3MC5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDcwLmMKaW5kZXggNzQ3NjkzYS4uNmI1MzI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZHQ3NDcwLmMKKysrIGIvZHJpdmVycy9od21vbi9hZHQ3NDcwLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJDLCAweDJFLCAweDJGLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyQywgMHgyRSwgMHgyRiwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KIEkyQ19DTElFTlRfSU5TTU9EXzEoYWR0NzQ3MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzMuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODc4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzMuYwpAQCAtMCwwICsxLDExNTcgQEAKKy8qCisgKiBBIGh3bW9uIGRyaXZlciBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NzMKKyAqIENvcHlyaWdodCAoQykgMjAwNyBJQk0KKyAqCisgKiBBdXRob3I6IERhcnJpY2sgSi4gV29uZyA8ZGp3b25nQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisKKy8qIEFkZHJlc3NlcyB0byBzY2FuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJDLCAweDJELCAweDJFLCBJMkNfQ0xJRU5UX0VORCB9OworCisvKiBJbnNtb2QgcGFyYW1ldGVycyAqLworSTJDX0NMSUVOVF9JTlNNT0RfMShhZHQ3NDczKTsKKworLyogQURUNzQ3MyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQURUNzQ3M19SRUdfQkFTRV9BRERSCQkJMHgyMAorCisjZGVmaW5lIEFEVDc0NzNfUkVHX1ZPTFRfQkFTRV9BRERSCQkweDIxCisjZGVmaW5lIEFEVDc0NzNfUkVHX1ZPTFRfTUFYX0FERFIJCTB4MjIKKyNkZWZpbmUgQURUNzQ3M19SRUdfVk9MVF9NSU5fQkFTRV9BRERSCQkweDQ2CisjZGVmaW5lIEFEVDc0NzNfUkVHX1ZPTFRfTUlOX01BWF9BRERSCQkweDQ5CisKKyNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9CQVNFX0FERFIJCTB4MjUKKyNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9NQVhfQUREUgkJMHgyNworI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX0xJTUlUU19CQVNFX0FERFIJMHg0RQorI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX0xJTUlUU19NQVhfQUREUgkweDUzCisjZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfVE1JTl9CQVNFX0FERFIJCTB4NjcKKyNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9UTUlOX01BWF9BRERSCQkweDY5CisjZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfVE1BWF9CQVNFX0FERFIJCTB4NkEKKyNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9UTUFYX01BWF9BRERSCQkweDZDCisKKyNkZWZpbmUgQURUNzQ3M19SRUdfRkFOX0JBU0VfQUREUgkJMHgyOAorI2RlZmluZSBBRFQ3NDczX1JFR19GQU5fTUFYX0FERFIJCTB4MkYKKyNkZWZpbmUgQURUNzQ3M19SRUdfRkFOX01JTl9CQVNFX0FERFIJCTB4NTQKKyNkZWZpbmUgQURUNzQ3M19SRUdfRkFOX01JTl9NQVhfQUREUgkJMHg1QgorCisjZGVmaW5lIEFEVDc0NzNfUkVHX1BXTV9CQVNFX0FERFIJCTB4MzAKKyNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX01BWF9BRERSCQkweDMyCisjZGVmaW5lCUFEVDc0NzNfUkVHX1BXTV9NSU5fQkFTRV9BRERSCQkweDY0CisjZGVmaW5lIEFEVDc0NzNfUkVHX1BXTV9NSU5fTUFYX0FERFIJCTB4NjYKKyNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX01BWF9CQVNFX0FERFIJCTB4MzgKKyNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX01BWF9NQVhfQUREUgkJMHgzQQorI2RlZmluZSBBRFQ3NDczX1JFR19QV01fQkhWUl9CQVNFX0FERFIJCTB4NUMKKyNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX0JIVlJfTUFYX0FERFIJCTB4NUUKKyNkZWZpbmUJCUFEVDc0NzNfUFdNX0JIVlJfTUFTSwkJMHhFMAorI2RlZmluZQkJQURUNzQ3M19QV01fQkhWUl9TSElGVAkJNQorCisjZGVmaW5lIEFEVDc0NzNfUkVHX0NGRzEJCQkweDQwCisjZGVmaW5lIAlBRFQ3NDczX0NGRzFfU1RBUlQJCTB4MDEKKyNkZWZpbmUJCUFEVDc0NzNfQ0ZHMV9SRUFEWQkJMHgwNAorI2RlZmluZSBBRFQ3NDczX1JFR19DRkcyCQkJMHg3MworI2RlZmluZSBBRFQ3NDczX1JFR19DRkczCQkJMHg3OAorI2RlZmluZSBBRFQ3NDczX1JFR19DRkc0CQkJMHg3RAorI2RlZmluZQkJQURUNzQ3M19DRkc0X01BWF9EVVRZX0FUX09WVAkweDA4CisjZGVmaW5lIEFEVDc0NzNfUkVHX0NGRzUJCQkweDdDCisjZGVmaW5lCQlBRFQ3NDczX0NGRzVfVEVNUF9UV09TCQkweDAxCisjZGVmaW5lCQlBRFQ3NDczX0NGRzVfVEVNUF9PRkZTRVQJMHgwMgorCisjZGVmaW5lIEFEVDc0NzNfUkVHX0RFVklDRQkJCTB4M0QKKyNkZWZpbmUgCUFEVDc0NzNfVkVORE9SCQkJMHg0MQorI2RlZmluZSBBRFQ3NDczX1JFR19WRU5ET1IJCQkweDNFCisjZGVmaW5lIAlBRFQ3NDczX0RFVklDRQkJCTB4NzMKKyNkZWZpbmUgQURUNzQ3M19SRUdfUkVWSVNJT04JCQkweDNGCisjZGVmaW5lIAlBRFQ3NDczX1JFVl82OAkJCTB4NjgKKyNkZWZpbmUgCUFEVDc0NzNfUkVWXzY5CQkJMHg2OQorCisjZGVmaW5lIEFEVDc0NzNfUkVHX0FMQVJNMQkJCTB4NDEKKyNkZWZpbmUJCUFEVDc0NzNfVkNDUF9BTEFSTQkJMHgwMgorI2RlZmluZQkJQURUNzQ3M19WQ0NfQUxBUk0JCTB4MDQKKyNkZWZpbmUJCUFEVDc0NzNfUjFUX0FMQVJNCQkweDEwCisjZGVmaW5lCQlBRFQ3NDczX0xUX0FMQVJNCQkweDIwCisjZGVmaW5lCQlBRFQ3NDczX1IyVF9BTEFSTQkJMHg0MAorI2RlZmluZQkJQURUNzQ3M19PT0wJCQkweDgwCisjZGVmaW5lIEFEVDc0NzNfUkVHX0FMQVJNMgkJCTB4NDIKKyNkZWZpbmUJCUFEVDc0NzNfT1ZUX0FMQVJNCQkweDAyCisjZGVmaW5lCQlBRFQ3NDczX0ZBTjFfQUxBUk0JCTB4MDQKKyNkZWZpbmUJCUFEVDc0NzNfRkFOMl9BTEFSTQkJMHgwOAorI2RlZmluZQkJQURUNzQ3M19GQU4zX0FMQVJNCQkweDEwCisjZGVmaW5lCQlBRFQ3NDczX0ZBTjRfQUxBUk0JCTB4MjAKKyNkZWZpbmUJCUFEVDc0NzNfUjFUX1NIT1JUCQkweDQwCisjZGVmaW5lCQlBRFQ3NDczX1IyVF9TSE9SVAkJMHg4MAorI2RlZmluZSBBRFQ3NDczX1JFR19NQVhfQUREUgkJCTB4ODAKKworI2RlZmluZSBBTEFSTTIoeCkJKCh4KSA8PCA4KQorCisjZGVmaW5lIEFEVDc0NzNfVk9MVF9DT1VOVAkyCisjZGVmaW5lIEFEVDc0NzNfUkVHX1ZPTFQoeCkJKEFEVDc0NzNfUkVHX1ZPTFRfQkFTRV9BRERSICsgKHgpKQorI2RlZmluZSBBRFQ3NDczX1JFR19WT0xUX01JTih4KQkoQURUNzQ3M19SRUdfVk9MVF9NSU5fQkFTRV9BRERSICsgKCh4KSAqIDIpKQorI2RlZmluZSBBRFQ3NDczX1JFR19WT0xUX01BWCh4KQkoQURUNzQ3M19SRUdfVk9MVF9NSU5fQkFTRV9BRERSICsgXAorCQkJCSgoeCkgKiAyKSArIDEpCisKKyNkZWZpbmUgQURUNzQ3M19URU1QX0NPVU5UCTMKKyNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUCh4KQkoQURUNzQ3M19SRUdfVEVNUF9CQVNFX0FERFIgKyAoeCkpCisjZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfTUlOKHgpIChBRFQ3NDczX1JFR19URU1QX0xJTUlUU19CQVNFX0FERFIgKyAoKHgpICogMikpCisjZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfTUFYKHgpIChBRFQ3NDczX1JFR19URU1QX0xJTUlUU19CQVNFX0FERFIgKyBcCisJCQkJKCh4KSAqIDIpICsgMSkKKyNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9UTUlOKHgpCShBRFQ3NDczX1JFR19URU1QX1RNSU5fQkFTRV9BRERSICsgKHgpKQorI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX1RNQVgoeCkJKEFEVDc0NzNfUkVHX1RFTVBfVE1BWF9CQVNFX0FERFIgKyAoeCkpCisKKyNkZWZpbmUgQURUNzQ3M19GQU5fQ09VTlQJNAorI2RlZmluZSBBRFQ3NDczX1JFR19GQU4oeCkJKEFEVDc0NzNfUkVHX0ZBTl9CQVNFX0FERFIgKyAoKHgpICogMikpCisjZGVmaW5lIEFEVDc0NzNfUkVHX0ZBTl9NSU4oeCkJKEFEVDc0NzNfUkVHX0ZBTl9NSU5fQkFTRV9BRERSICsgKCh4KSAqIDIpKQorCisjZGVmaW5lIEFEVDc0NzNfUFdNX0NPVU5UCTMKKyNkZWZpbmUgQURUNzQ3M19SRUdfUFdNKHgpCShBRFQ3NDczX1JFR19QV01fQkFTRV9BRERSICsgKHgpKQorI2RlZmluZSBBRFQ3NDczX1JFR19QV01fTUFYKHgpCShBRFQ3NDczX1JFR19QV01fTUFYX0JBU0VfQUREUiArICh4KSkKKyNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX01JTih4KQkoQURUNzQ3M19SRUdfUFdNX01JTl9CQVNFX0FERFIgKyAoeCkpCisjZGVmaW5lIEFEVDc0NzNfUkVHX1BXTV9CSFZSKHgpCShBRFQ3NDczX1JFR19QV01fQkhWUl9CQVNFX0FERFIgKyAoeCkpCisKKy8qIEhvdyBvZnRlbiBkbyB3ZSByZXJlYWQgc2Vuc29ycyB2YWx1ZXM/IChJbiBqaWZmaWVzKSAqLworI2RlZmluZSBTRU5TT1JfUkVGUkVTSF9JTlRFUlZBTAkoMiAqIEhaKQorCisvKiBIb3cgb2Z0ZW4gZG8gd2UgcmVyZWFkIHNlbnNvciBsaW1pdCB2YWx1ZXM/IChJbiBqaWZmaWVzKSAqLworI2RlZmluZSBMSU1JVF9SRUZSRVNIX0lOVEVSVkFMCSg2MCAqIEhaKQorCisvKiBkYXRhc2hlZXQgc2F5cyB0byBkaXZpZGUgdGhpcyBudW1iZXIgYnkgdGhlIGZhbiByZWFkaW5nIHRvIGdldCBmYW4gcnBtICovCisjZGVmaW5lIEZBTl9QRVJJT0RfVE9fUlBNKHgpCSgoOTAwMDAgKiA2MCkgLyAoeCkpCisjZGVmaW5lIEZBTl9SUE1fVE9fUEVSSU9ECUZBTl9QRVJJT0RfVE9fUlBNCisjZGVmaW5lIEZBTl9QRVJJT0RfSU5WQUxJRAk2NTUzNQorI2RlZmluZSBGQU5fREFUQV9WQUxJRCh4KQkoKHgpICYmICh4KSAhPSBGQU5fUEVSSU9EX0lOVkFMSUQpCisKK3N0cnVjdCBhZHQ3NDczX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50CWNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlCQkqaHdtb25fZGV2OworCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJYXR0cnM7CisJc3RydWN0IG11dGV4CQlsb2NrOworCWNoYXIJCQlzZW5zb3JzX3ZhbGlkOworCWNoYXIJCQlsaW1pdHNfdmFsaWQ7CisJdW5zaWduZWQgbG9uZwkJc2Vuc29yc19sYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlsaW1pdHNfbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCisKKwl1OAkJCXZvbHRbQURUNzQ3M19WT0xUX0NPVU5UXTsKKwlzOAkJCXZvbHRfbWluW0FEVDc0NzNfVk9MVF9DT1VOVF07CisJczgJCQl2b2x0X21heFtBRFQ3NDczX1ZPTFRfQ09VTlRdOworCisJczgJCQl0ZW1wW0FEVDc0NzNfVEVNUF9DT1VOVF07CisJczgJCQl0ZW1wX21pbltBRFQ3NDczX1RFTVBfQ09VTlRdOworCXM4CQkJdGVtcF9tYXhbQURUNzQ3M19URU1QX0NPVU5UXTsKKwlzOAkJCXRlbXBfdG1pbltBRFQ3NDczX1RFTVBfQ09VTlRdOworCS8qIFRoaXMgaXMgY2FsbGVkIHRoZSAhVEhFUk0gbGltaXQgaW4gdGhlIGRhdGFzaGVldCAqLworCXM4CQkJdGVtcF90bWF4W0FEVDc0NzNfVEVNUF9DT1VOVF07CisKKwl1MTYJCQlmYW5bQURUNzQ3M19GQU5fQ09VTlRdOworCXUxNgkJCWZhbl9taW5bQURUNzQ3M19GQU5fQ09VTlRdOworCisJdTgJCQlwd21bQURUNzQ3M19QV01fQ09VTlRdOworCXU4CQkJcHdtX21heFtBRFQ3NDczX1BXTV9DT1VOVF07CisJdTgJCQlwd21fbWluW0FEVDc0NzNfUFdNX0NPVU5UXTsKKwl1OAkJCXB3bV9iZWhhdmlvcltBRFQ3NDczX1BXTV9DT1VOVF07CisKKwl1OAkJCXRlbXBfdHdvc19jb21wbGVtZW50OworCXU4CQkJdGVtcF9vZmZzZXQ7CisKKwl1MTYJCQlhbGFybTsKKwl1OAkJCW1heF9kdXR5X2F0X292ZXJoZWF0OworfTsKKworc3RhdGljIGludCBhZHQ3NDczX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IGFkdDc0NzNfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKK3N0YXRpYyBpbnQgYWR0NzQ3M19kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWR0NzQ3M19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiYWR0NzQ3MyIsCisJfSwKKwkuYXR0YWNoX2FkYXB0ZXIJPSBhZHQ3NDczX2F0dGFjaF9hZGFwdGVyLAorCS5kZXRhY2hfY2xpZW50CT0gYWR0NzQ3M19kZXRhY2hfY2xpZW50LAorfTsKKworLyoKKyAqIDE2LWJpdCByZWdpc3RlcnMgb24gdGhlIEFEVDc0NzMgYXJlIGxvdy1ieXRlIGZpcnN0LiAgVGhlIGRhdGEgc2hlZXQgc2F5cworICogdGhhdCB0aGUgbG93IGJ5dGUgbXVzdCBiZSByZWFkIGJlZm9yZSB0aGUgaGlnaCBieXRlLgorICovCitzdGF0aWMgaW5saW5lIGludCBhZHQ3NDczX3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwl1MTYgZm9vOworCWZvbyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CisJZm9vIHw9ICgodTE2KWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyArIDEpIDw8IDgpOworCXJldHVybiBmb287Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkdDc0NzNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywKKwkJCQkJICB1MTYgdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlICYgMHhGRikKKwkgICAgICAgJiYgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZyArIDEsIHZhbHVlID4+IDgpOworfQorCitzdGF0aWMgdm9pZCBhZHQ3NDczX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX0NGRzEpOworCisJaWYgKCEocmVnICYgQURUNzQ3M19DRkcxX1JFQURZKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNoaXAgbm90IHJlYWR5LlxuIik7CisJfSBlbHNlIHsKKwkJLyogc3RhcnQgbW9uaXRvcmluZyAqLworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfQ0ZHMSwKKwkJCQkJICByZWcgfCBBRFQ3NDczX0NGRzFfU1RBUlQpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBhZHQ3NDczX2RhdGEgKmFkdDc0NzNfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgbG9uZyBsb2NhbF9qaWZmaWVzID0gamlmZmllczsKKwl1OCBjZmc7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAodGltZV9iZWZvcmUobG9jYWxfamlmZmllcywgZGF0YS0+c2Vuc29yc19sYXN0X3VwZGF0ZWQgKworCQlTRU5TT1JfUkVGUkVTSF9JTlRFUlZBTCkKKwkJJiYgZGF0YS0+c2Vuc29yc192YWxpZCkKKwkJZ290byBub19zZW5zb3JfdXBkYXRlOworCisJZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfVk9MVF9DT1VOVDsgaSsrKQorCQlkYXRhLT52b2x0W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCUFEVDc0NzNfUkVHX1ZPTFQoaSkpOworCisJLyogRGV0ZXJtaW5lIHRlbXBlcmF0dXJlIGVuY29kaW5nICovCisJY2ZnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfQ0ZHNSk7CisJZGF0YS0+dGVtcF90d29zX2NvbXBsZW1lbnQgPSAoY2ZnICYgQURUNzQ3M19DRkc1X1RFTVBfVFdPUyk7CisKKwkvKgorCSAqIFdoYXQgZG9lcyB0aGlzIGRvPyBpdCBpbXBsaWVzIGEgdmFyaWFibGUgdGVtcGVyYXR1cmUgc2Vuc29yCisJICogb2Zmc2V0LCBidXQgdGhlIGRhdGFzaGVldCBkb2Vzbid0IHNheSBhbnl0aGluZyBhYm91dCB0aGlzIGJpdAorCSAqIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgZGF0YXNoZWV0IGltcGx5IHRoYXQgIm9mZnNldDY0IiBtb2RlCisJICogbWVhbnMgdGhhdCB5b3Ugc2hpZnQgdGVtcCB2YWx1ZXMgYnkgLTY0IGlmIHRoZSBhYm92ZSBiaXQgd2FzIHNldC4KKwkgKi8KKwlkYXRhLT50ZW1wX29mZnNldCA9IChjZmcgJiBBRFQ3NDczX0NGRzVfVEVNUF9PRkZTRVQpOworCisJZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfVEVNUF9DT1VOVDsgaSsrKQorCQlkYXRhLT50ZW1wW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCQkgQURUNzQ3M19SRUdfVEVNUChpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQURUNzQ3M19GQU5fQ09VTlQ7IGkrKykKKwkJZGF0YS0+ZmFuW2ldID0gYWR0NzQ3M19yZWFkX3dvcmRfZGF0YShjbGllbnQsCisJCQkJCQlBRFQ3NDczX1JFR19GQU4oaSkpOworCisJZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfUFdNX0NPVU5UOyBpKyspCisJCWRhdGEtPnB3bVtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlBRFQ3NDczX1JFR19QV00oaSkpOworCisJZGF0YS0+YWxhcm0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19BTEFSTTEpOworCWlmIChkYXRhLT5hbGFybSAmIEFEVDc0NzNfT09MKQorCQlkYXRhLT5hbGFybSB8PSBBTEFSTTIoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCQkgQURUNzQ3M19SRUdfQUxBUk0yKSk7CisKKwlkYXRhLT5zZW5zb3JzX2xhc3RfdXBkYXRlZCA9IGxvY2FsX2ppZmZpZXM7CisJZGF0YS0+c2Vuc29yc192YWxpZCA9IDE7CisKK25vX3NlbnNvcl91cGRhdGU6CisJaWYgKHRpbWVfYmVmb3JlKGxvY2FsX2ppZmZpZXMsIGRhdGEtPmxpbWl0c19sYXN0X3VwZGF0ZWQgKworCQlMSU1JVF9SRUZSRVNIX0lOVEVSVkFMKQorCQkmJiBkYXRhLT5saW1pdHNfdmFsaWQpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfVk9MVF9DT1VOVDsgaSsrKSB7CisJCWRhdGEtPnZvbHRfbWluW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCUFEVDc0NzNfUkVHX1ZPTFRfTUlOKGkpKTsKKwkJZGF0YS0+dm9sdF9tYXhbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJQURUNzQ3M19SRUdfVk9MVF9NQVgoaSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1RFTVBfQ09VTlQ7IGkrKykgeworCQlkYXRhLT50ZW1wX21pbltpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlBRFQ3NDczX1JFR19URU1QX01JTihpKSk7CisJCWRhdGEtPnRlbXBfbWF4W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCUFEVDc0NzNfUkVHX1RFTVBfTUFYKGkpKTsKKwkJZGF0YS0+dGVtcF90bWluW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCUFEVDc0NzNfUkVHX1RFTVBfVE1JTihpKSk7CisJCWRhdGEtPnRlbXBfdG1heFtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlBRFQ3NDczX1JFR19URU1QX1RNQVgoaSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX0ZBTl9DT1VOVDsgaSsrKQorCQlkYXRhLT5mYW5fbWluW2ldID0gYWR0NzQ3M19yZWFkX3dvcmRfZGF0YShjbGllbnQsCisJCQkJCQlBRFQ3NDczX1JFR19GQU5fTUlOKGkpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1BXTV9DT1VOVDsgaSsrKSB7CisJCWRhdGEtPnB3bV9tYXhbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJQURUNzQ3M19SRUdfUFdNX01BWChpKSk7CisJCWRhdGEtPnB3bV9taW5baV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJQURUNzQ3M19SRUdfUFdNX01JTihpKSk7CisJCWRhdGEtPnB3bV9iZWhhdmlvcltpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlBRFQ3NDczX1JFR19QV01fQkhWUihpKSk7CisJfQorCisJZGF0YS0+bGltaXRzX2xhc3RfdXBkYXRlZCA9IGxvY2FsX2ppZmZpZXM7CisJZGF0YS0+bGltaXRzX3ZhbGlkID0gMTsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIGRhdGE7Cit9CisKKy8qCisgKiBPbiB0aGlzIGNoaXAsIHZvbHRhZ2VzIGFyZSBnaXZlbiBhcyBhIGNvdW50IG9mIHN0ZXBzIGJldHdlZW4gYSBtaW5pbXVtCisgKiBhbmQgbWF4aW11bSB2b2x0YWdlLCBub3QgYSBkaXJlY3Qgdm9sdGFnZS4KKyAqLworc3RhdGljIGNvbnN0IGludCB2b2x0X2NvbnZlcnRfdGFibGVbXVsyXSA9IHsKKwl7Mjk5NywgM30sCisJezQzOTUsIDR9LAorfTsKKworc3RhdGljIGludCBkZWNvZGVfdm9sdChpbnQgdm9sdF9pbmRleCwgdTggcmF3KQoreworCWludCBjbWF4ID0gdm9sdF9jb252ZXJ0X3RhYmxlW3ZvbHRfaW5kZXhdWzBdOworCWludCBjbWluID0gdm9sdF9jb252ZXJ0X3RhYmxlW3ZvbHRfaW5kZXhdWzFdOworCXJldHVybiAoKHJhdyAqIChjbWF4IC0gY21pbikpIC8gMjU1KSArIGNtaW47Cit9CisKK3N0YXRpYyB1OCBlbmNvZGVfdm9sdChpbnQgdm9sdF9pbmRleCwgaW50IGNvb2tlZCkKK3sKKwlpbnQgY21heCA9IHZvbHRfY29udmVydF90YWJsZVt2b2x0X2luZGV4XVswXTsKKwlpbnQgY21pbiA9IHZvbHRfY29udmVydF90YWJsZVt2b2x0X2luZGV4XVsxXTsKKwl1OCB4OworCisJaWYgKGNvb2tlZCA+IGNtYXgpCisJCWNvb2tlZCA9IGNtYXg7CisJZWxzZSBpZiAoY29va2VkIDwgY21pbikKKwkJY29va2VkID0gY21pbjsKKworCXggPSAoKGNvb2tlZCAtIGNtaW4pICogMjU1KSAvIChjbWF4IC0gY21pbik7CisKKwlyZXR1cm4geDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd192b2x0X21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKKwkJICAgICAgIGRlY29kZV92b2x0KGF0dHItPmluZGV4LCBkYXRhLT52b2x0X21pblthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3ZvbHRfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdm9sdCA9IGVuY29kZV92b2x0KGF0dHItPmluZGV4LCBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApKTsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWRhdGEtPnZvbHRfbWluW2F0dHItPmluZGV4XSA9IHZvbHQ7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1ZPTFRfTUlOKGF0dHItPmluZGV4KSwKKwkJCQkgIHZvbHQpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdm9sdF9tYXgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICBkZWNvZGVfdm9sdChhdHRyLT5pbmRleCwgZGF0YS0+dm9sdF9tYXhbYXR0ci0+aW5kZXhdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF92b2x0X21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHZvbHQgPSBlbmNvZGVfdm9sdChhdHRyLT5pbmRleCwgc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKSk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT52b2x0X21heFthdHRyLT5pbmRleF0gPSB2b2x0OworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19WT0xUX01BWChhdHRyLT5pbmRleCksCisJCQkJICB2b2x0KTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3ZvbHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkgICAgICAgZGVjb2RlX3ZvbHQoYXR0ci0+aW5kZXgsIGRhdGEtPnZvbHRbYXR0ci0+aW5kZXhdKSk7Cit9CisKKy8qCisgKiBUaGlzIGNoaXAgY2FuIHJlcG9ydCB0ZW1wZXJhdHVyZSBkYXRhIGVpdGhlciBhcyBhIHR3bydzIGNvbXBsZW1lbnQKKyAqIG51bWJlciBpbiB0aGUgcmFuZ2UgLTEyOCB0byAxMjcsIG9yIGFzIGFuIHVuc2lnbmVkIG51bWJlciB0aGF0IG11c3QKKyAqIGJlIG9mZnNldCBieSA2NC4KKyAqLworc3RhdGljIGludCBkZWNvZGVfdGVtcChzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhLCB1OCByYXcpCit7CisJaWYgKGRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50KQorCQlyZXR1cm4gKHM4KXJhdzsKKwlyZXR1cm4gcmF3IC0gNjQ7Cit9CisKK3N0YXRpYyB1OCBlbmNvZGVfdGVtcChzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhLCBpbnQgY29va2VkKQoreworCWlmIChkYXRhLT50ZW1wX3R3b3NfY29tcGxlbWVudCkKKwkJcmV0dXJuIChjb29rZWQgJiAweEZGKTsKKwlyZXR1cm4gY29va2VkICsgNjQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9taW4oc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICAxMDAwICogZGVjb2RlX3RlbXAoZGF0YSwgZGF0YS0+dGVtcF9taW5bYXR0ci0+aW5kZXhdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHRlbXAgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApIC8gMTAwMDsKKwl0ZW1wID0gZW5jb2RlX3RlbXAoZGF0YSwgdGVtcCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT50ZW1wX21pblthdHRyLT5pbmRleF0gPSB0ZW1wOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19URU1QX01JTihhdHRyLT5pbmRleCksCisJCQkJICB0ZW1wKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkgICAgICAgMTAwMCAqIGRlY29kZV90ZW1wKGRhdGEsIGRhdGEtPnRlbXBfbWF4W2F0dHItPmluZGV4XSkpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9tYXgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKSAvIDEwMDA7CisJdGVtcCA9IGVuY29kZV90ZW1wKGRhdGEsIHRlbXApOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdID0gdGVtcDsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfVEVNUF9NQVgoYXR0ci0+aW5kZXgpLAorCQkJCSAgdGVtcCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICAxMDAwICogZGVjb2RlX3RlbXAoZGF0YSwgZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCWlmIChGQU5fREFUQV9WQUxJRChkYXRhLT5mYW5fbWluW2F0dHItPmluZGV4XSkpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkJICAgICAgIEZBTl9QRVJJT0RfVE9fUlBNKGRhdGEtPmZhbl9taW5bYXR0ci0+aW5kZXhdKSk7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2Zhbl9taW4oc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHRlbXAgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCisJaWYgKCF0ZW1wKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl0ZW1wID0gRkFOX1JQTV9UT19QRVJJT0QodGVtcCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5mYW5fbWluW2F0dHItPmluZGV4XSA9IHRlbXA7CisJYWR0NzQ3M193cml0ZV93b3JkX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19GQU5fTUlOKGF0dHItPmluZGV4KSwgdGVtcCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKEZBTl9EQVRBX1ZBTElEKGRhdGEtPmZhblthdHRyLT5pbmRleF0pKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKKwkJCSAgICAgICBGQU5fUEVSSU9EX1RPX1JQTShkYXRhLT5mYW5bYXR0ci0+aW5kZXhdKSk7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19tYXhfZHV0eV9hdF9jcml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+bWF4X2R1dHlfYXRfb3ZlcmhlYXQpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfbWF4X2R1dHlfYXRfY3JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsCisJCQkJICAgIHNpemVfdCBjb3VudCkKK3sKKwl1OCByZWc7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHRlbXAgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCXRlbXAgPSB0ZW1wICYmIDB4RkY7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5tYXhfZHV0eV9hdF9vdmVyaGVhdCA9IHRlbXA7CisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfQ0ZHNCk7CisJaWYgKHRlbXApCisJCXJlZyB8PSBBRFQ3NDczX0NGRzRfTUFYX0RVVFlfQVRfT1ZUOworCWVsc2UKKwkJcmVnICY9IH5BRFQ3NDczX0NGRzRfTUFYX0RVVFlfQVRfT1ZUOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19DRkc0LCByZWcpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtW2F0dHItPmluZGV4XSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5wd21bYXR0ci0+aW5kZXhdID0gdGVtcDsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfUFdNKGF0dHItPmluZGV4KSwgdGVtcCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21fbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtX21heFthdHRyLT5pbmRleF0pOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcHdtX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHRlbXAgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZGF0YS0+cHdtX21heFthdHRyLT5pbmRleF0gPSB0ZW1wOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19QV01fTUFYKGF0dHItPmluZGV4KSwKKwkJCQkgIHRlbXApOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnB3bV9taW5bYXR0ci0+aW5kZXhdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9taW4oc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsCisJCQkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWRhdGEtPnB3bV9taW5bYXR0ci0+aW5kZXhdID0gdGVtcDsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfUFdNX01JTihhdHRyLT5pbmRleCksCisJCQkJICB0ZW1wKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfdG1heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkgICAgICAgMTAwMCAqIGRlY29kZV90ZW1wKGRhdGEsIGRhdGEtPnRlbXBfdG1heFthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfdG1heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsCisJCQkgICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHRlbXAgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApIC8gMTAwMDsKKwl0ZW1wID0gZW5jb2RlX3RlbXAoZGF0YSwgdGVtcCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT50ZW1wX3RtYXhbYXR0ci0+aW5kZXhdID0gdGVtcDsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfVEVNUF9UTUFYKGF0dHItPmluZGV4KSwKKwkJCQkgIHRlbXApOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF90bWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICAxMDAwICogZGVjb2RlX3RlbXAoZGF0YSwgZGF0YS0+dGVtcF90bWluW2F0dHItPmluZGV4XSkpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcF90bWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCkgLyAxMDAwOworCXRlbXAgPSBlbmNvZGVfdGVtcChkYXRhLCB0ZW1wKTsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWRhdGEtPnRlbXBfdG1pblthdHRyLT5pbmRleF0gPSB0ZW1wOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19URU1QX1RNSU4oYXR0ci0+aW5kZXgpLAorCQkJCSAgdGVtcCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXN3aXRjaCAoZGF0YS0+cHdtX2JlaGF2aW9yW2F0dHItPmluZGV4XSA+PiBBRFQ3NDczX1BXTV9CSFZSX1NISUZUKSB7CisJY2FzZSAzOgorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKKwljYXNlIDc6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOworCWRlZmF1bHQ6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjJcbiIpOworCX0KK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsCisJCQkgICAgICBzaXplX3QgY291bnQpCit7CisJdTggcmVnOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwlzd2l0Y2ggKHRlbXApIHsKKwljYXNlIDA6CisJCXRlbXAgPSAzOworCQlicmVhazsKKwljYXNlIDE6CisJCXRlbXAgPSA3OworCQlicmVhazsKKwljYXNlIDI6CisJCS8qIEVudGVyIGF1dG9tYXRpYyBtb2RlIHdpdGggZmFucyBvZmYgKi8KKwkJdGVtcCA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJICAgICAgIEFEVDc0NzNfUkVHX1BXTV9CSFZSKGF0dHItPmluZGV4KSk7CisJcmVnID0gKHRlbXAgPDwgQURUNzQ3M19QV01fQkhWUl9TSElGVCkgfAorCSAgICAgIChyZWcgJiB+QURUNzQ3M19QV01fQkhWUl9NQVNLKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfUFdNX0JIVlIoYXR0ci0+aW5kZXgpLAorCQkJCSAgcmVnKTsKKwlkYXRhLT5wd21fYmVoYXZpb3JbYXR0ci0+aW5kZXhdID0gcmVnOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2F1dG9fdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOworCWludCBiaHZyID0gZGF0YS0+cHdtX2JlaGF2aW9yW2F0dHItPmluZGV4XSA+PiBBRFQ3NDczX1BXTV9CSFZSX1NISUZUOworCisJc3dpdGNoIChiaHZyKSB7CisJY2FzZSAzOgorCWNhc2UgNDoKKwljYXNlIDc6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSA1OgorCWNhc2UgNjoKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJodnIgKyAxKTsKKwljYXNlIDI6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjRcbiIpOworCX0KKwkvKiBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZSAqLworCUJVRygpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcHdtX2F1dG9fdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsCisJCQkJIHNpemVfdCBjb3VudCkKK3sKKwl1OCByZWc7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKworCXN3aXRjaCAodGVtcCkgeworCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA2OgorCWNhc2UgNzoKKwkJdGVtcC0tOworCQlicmVhazsKKwljYXNlIDA6CisJCXRlbXAgPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCSAgICAgICBBRFQ3NDczX1JFR19QV01fQkhWUihhdHRyLT5pbmRleCkpOworCXJlZyA9ICh0ZW1wIDw8IEFEVDc0NzNfUFdNX0JIVlJfU0hJRlQpIHwKKwkgICAgICAocmVnICYgfkFEVDc0NzNfUFdNX0JIVlJfTUFTSyk7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1BXTV9CSFZSKGF0dHItPmluZGV4KSwKKwkJCQkgIHJlZyk7CisJZGF0YS0+cHdtX2JlaGF2aW9yW2F0dHItPmluZGV4XSA9IHJlZzsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKGRhdGEtPmFsYXJtICYgYXR0ci0+aW5kZXgpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Cit9CisKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd192b2x0X21heCwKKwkJCSAgc2V0X3ZvbHRfbWF4LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdm9sdF9tYXgsCisJCQkgIHNldF92b2x0X21heCwgMSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdm9sdF9taW4sCisJCQkgIHNldF92b2x0X21pbiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3ZvbHRfbWluLAorCQkJICBzZXRfdm9sdF9taW4sIDEpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMV9pbnB1dCwgU19JUlVHTywgc2hvd192b2x0LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X3ZvbHQsIE5VTEwsIDEpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgQURUNzQ3M19WQ0NQX0FMQVJNKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICBBRFQ3NDczX1ZDQ19BTEFSTSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKKwkJCSAgc2V0X3RlbXBfbWF4LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKKwkJCSAgc2V0X3RlbXBfbWF4LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKKwkJCSAgc2V0X3RlbXBfbWF4LCAyKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJICBzZXRfdGVtcF9taW4sIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJICBzZXRfdGVtcF9taW4sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJICBzZXRfdGVtcF9taW4sIDIpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgIEFEVDc0NzNfUjFUX0FMQVJNIHwgQUxBUk0yKEFEVDc0NzNfUjFUX1NIT1JUKSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICBBRFQ3NDczX0xUX0FMQVJNKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgIEFEVDc0NzNfUjJUX0FMQVJNIHwgQUxBUk0yKEFEVDc0NzNfUjJUX1NIT1JUKSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCisJCQkgIHNldF9mYW5fbWluLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCisJCQkgIHNldF9mYW5fbWluLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCisJCQkgIHNldF9mYW5fbWluLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCisJCQkgIHNldF9mYW5fbWluLCAzKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMyk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgQUxBUk0yKEFEVDc0NzNfRkFOMV9BTEFSTSkpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICBBTEFSTTIoQURUNzQ3M19GQU4yX0FMQVJNKSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCQkgIEFMQVJNMihBRFQ3NDczX0ZBTjNfQUxBUk0pKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgQUxBUk0yKEFEVDc0NzNfRkFONF9BTEFSTSkpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bV91c2VfcG9pbnQyX3B3bV9hdF9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCSAgc2hvd19tYXhfZHV0eV9hdF9jcml0LCBzZXRfbWF4X2R1dHlfYXRfY3JpdCwgMCk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAyKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2F1dG9fcG9pbnQxX3B3bSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkgIHNob3dfcHdtX21pbiwgc2V0X3B3bV9taW4sIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yX2F1dG9fcG9pbnQxX3B3bSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkgIHNob3dfcHdtX21pbiwgc2V0X3B3bV9taW4sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkgIHNob3dfcHdtX21pbiwgc2V0X3B3bV9taW4sIDIpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDJfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCSAgc2hvd19wd21fbWF4LCBzZXRfcHdtX21heCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfYXV0b19wb2ludDJfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCSAgc2hvd19wd21fbWF4LCBzZXRfcHdtX21heCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTNfYXV0b19wb2ludDJfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCSAgc2hvd19wd21fbWF4LCBzZXRfcHdtX21heCwgMik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfYXV0b19wb2ludDFfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkgIHNob3dfdGVtcF90bWluLCBzZXRfdGVtcF90bWluLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfYXV0b19wb2ludDFfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkgIHNob3dfdGVtcF90bWluLCBzZXRfdGVtcF90bWluLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYXV0b19wb2ludDFfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkgIHNob3dfdGVtcF90bWluLCBzZXRfdGVtcF90bWluLCAyKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9hdXRvX3BvaW50Ml90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCSAgc2hvd190ZW1wX3RtYXgsIHNldF90ZW1wX3RtYXgsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9hdXRvX3BvaW50Ml90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCSAgc2hvd190ZW1wX3RtYXgsIHNldF90ZW1wX3RtYXgsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19hdXRvX3BvaW50Ml90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCSAgc2hvd190ZW1wX3RtYXgsIHNldF90ZW1wX3RtYXgsIDIpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fZW5hYmxlLAorCQkJICBzZXRfcHdtX2VuYWJsZSwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fZW5hYmxlLAorCQkJICBzZXRfcHdtX2VuYWJsZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTNfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fZW5hYmxlLAorCQkJICBzZXRfcHdtX2VuYWJsZSwgMik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X3B3bV9hdXRvX3RlbXAsIHNldF9wd21fYXV0b190ZW1wLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X3B3bV9hdXRvX3RlbXAsIHNldF9wd21fYXV0b190ZW1wLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X3B3bV9hdXRvX3RlbXAsIHNldF9wd21fYXV0b190ZW1wLCAyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdDc0NzNfYXR0cltdID0KK3sKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bV91c2VfcG9pbnQyX3B3bV9hdF9jcml0LmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50MV9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDJfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZW5hYmxlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fY2hhbm5lbHNfdGVtcC5kZXZfYXR0ci5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIGludCBhZHQ3NDczX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCisJCXJldHVybiAwOworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgYWR0NzQ3M19kZXRlY3QpOworfQorCitzdGF0aWMgaW50IGFkdDc0NzNfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJZ290byBleGl0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHQ3NDczX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+ZHJpdmVyID0gJmFkdDc0NzNfZHJpdmVyOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKworCWlmIChraW5kIDw9IDApIHsKKwkJaW50IHZlbmRvciwgZGV2aWNlLCByZXZpc2lvbjsKKworCQl2ZW5kb3IgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19WRU5ET1IpOworCQlpZiAodmVuZG9yICE9IEFEVDc0NzNfVkVORE9SKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBleGl0X2ZyZWU7CisJCX0KKworCQlkZXZpY2UgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19ERVZJQ0UpOworCQlpZiAoZGV2aWNlICE9IEFEVDc0NzNfREVWSUNFKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBleGl0X2ZyZWU7CisJCX0KKworCQlyZXZpc2lvbiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgICAgQURUNzQ3M19SRUdfUkVWSVNJT04pOworCQlpZiAocmV2aXNpb24gIT0gQURUNzQ3M19SRVZfNjggJiYgcmV2aXNpb24gIT0gQURUNzQ3M19SRVZfNjkpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCX0gZWxzZQorCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJkZXRlY3Rpb24gZm9yY2VkXG4iKTsKKworCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAiYWR0NzQ3MyIsIEkyQ19OQU1FX1NJWkUpOworCisJZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIiVzIGNoaXAgZm91bmRcbiIsIGNsaWVudC0+bmFtZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBBRFQ3NDczIGNoaXAgKi8KKwlhZHQ3NDczX2luaXRfY2xpZW50KGNsaWVudCk7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWRhdGEtPmF0dHJzLmF0dHJzID0gYWR0NzQ3M19hdHRyOworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmRhdGEtPmF0dHJzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCisJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZGF0YS0+YXR0cnMpOworZXhpdF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhZHQ3NDczX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmRhdGEtPmF0dHJzKTsKKwlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhZHQ3NDczX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFkdDc0NzNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFkdDc0NzNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZHQ3NDczX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkRhcnJpY2sgSi4gV29uZyA8ZGp3b25nQHVzLmlibS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFEVDc0NzMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGFkdDc0NzNfaW5pdCk7Cittb2R1bGVfZXhpdChhZHQ3NDczX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCmluZGV4IDBjOTQ3NzAuLmFhY2MwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKQEAgLTg0LDEyICs4NCwxNSBAQAogLyogU2V0IDA6IE1hY2Jvb2sgUHJvICovCiAJeyAiVEEwUCIsICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJURzBIIiwgIlRHMFAiLCAiVEcwVCIsICJUaDBIIiwKIAkgICJUaDFIIiwgIlRtMFAiLCAiVHMwUCIsICJUczFQIiwgTlVMTCB9LAotLyogU2V0IDE6IE1hY2Jvb2sgc2V0ICovCisvKiBTZXQgMTogTWFjYm9vazIgc2V0ICovCisJeyAiVEIwVCIsICJUQzBEIiwgIlRDMFAiLCAiVE0wUCIsICJUTjBQIiwgIlROMVAiLCAiVFRGMCIsICJUaDBIIiwKKwkgICJUaDBTIiwgIlRoMUgiLCBOVUxMIH0sCisvKiBTZXQgMjogTWFjYm9vayBzZXQgKi8KIAl7ICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJUTTBQIiwgIlROMFAiLCAiVE4xUCIsICJUaDBIIiwgIlRoMFMiLAogCSAgIlRoMUgiLCAiVHMwUCIsIE5VTEwgfSwKLS8qIFNldCAyOiBNYWNtaW5pIHNldCAqLworLyogU2V0IDM6IE1hY21pbmkgc2V0ICovCiAJeyAiVEMwRCIsICJUQzBQIiwgTlVMTCB9LAotLyogU2V0IDM6IE1hYyBQcm8gKDIgeCBRdWFkLUNvcmUpICovCisvKiBTZXQgNDogTWFjIFBybyAoMiB4IFF1YWQtQ29yZSkgKi8KIAl7ICJUQTBQIiwgIlRDQUciLCAiVENBSCIsICJUQ0JHIiwgIlRDQkgiLCAiVEMwQyIsICJUQzBEIiwgIlRDMFAiLAogCSAgIlRDMUMiLCAiVEMxRCIsICJUQzJDIiwgIlRDMkQiLCAiVEMzQyIsICJUQzNEIiwgIlRIVEciLCAiVEgwUCIsCiAJICAiVEgxUCIsICJUSDJQIiwgIlRIM1AiLCAiVE1BUCIsICJUTUFTIiwgIlRNQlMiLCAiVE0wUCIsICJUTTBTIiwKQEAgLTEyMTIsMTIgKzEyMTUsMTQgQEAKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBkbWlfbWF0Y2hfZGF0YSBhcHBsZXNtY19kbWlfZGF0YVtdID0gewogLyogTWFjQm9vayBQcm86IGFjY2VsZXJvbWV0ZXIsIGJhY2tsaWdodCBhbmQgdGVtcGVyYXR1cmUgc2V0IDAgKi8KIAl7IC5hY2NlbGVyb21ldGVyID0gMSwgLmxpZ2h0ID0gMSwgLnRlbXBlcmF0dXJlX3NldCA9IDAgfSwKLS8qIE1hY0Jvb2s6IGFjY2VsZXJvbWV0ZXIgYW5kIHRlbXBlcmF0dXJlIHNldCAxICovCisvKiBNYWNCb29rMjogYWNjZWxlcm9tZXRlciBhbmQgdGVtcGVyYXR1cmUgc2V0IDEgKi8KIAl7IC5hY2NlbGVyb21ldGVyID0gMSwgLmxpZ2h0ID0gMCwgLnRlbXBlcmF0dXJlX3NldCA9IDEgfSwKLS8qIE1hY01pbmk6IHRlbXBlcmF0dXJlIHNldCAyICovCi0JeyAuYWNjZWxlcm9tZXRlciA9IDAsIC5saWdodCA9IDAsIC50ZW1wZXJhdHVyZV9zZXQgPSAyIH0sCi0vKiBNYWNQcm86IHRlbXBlcmF0dXJlIHNldCAzICovCisvKiBNYWNCb29rOiBhY2NlbGVyb21ldGVyIGFuZCB0ZW1wZXJhdHVyZSBzZXQgMiAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAwLCAudGVtcGVyYXR1cmVfc2V0ID0gMiB9LAorLyogTWFjTWluaTogdGVtcGVyYXR1cmUgc2V0IDMgKi8KIAl7IC5hY2NlbGVyb21ldGVyID0gMCwgLmxpZ2h0ID0gMCwgLnRlbXBlcmF0dXJlX3NldCA9IDMgfSwKKy8qIE1hY1BybzogdGVtcGVyYXR1cmUgc2V0IDQgKi8KKwl7IC5hY2NlbGVyb21ldGVyID0gMCwgLmxpZ2h0ID0gMCwgLnRlbXBlcmF0dXJlX3NldCA9IDQgfSwKIH07CiAKIC8qIE5vdGUgdGhhdCBETUlfTUFUQ0goLi4uLCJNYWNCb29rIikgd2lsbCBtYXRjaCAiTWFjQm9va1BybzEsMSIuCkBAIC0xMjI5LDE2ICsxMjM0LDIwIEBACiAJCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbMF19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAotCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2siKSB9LAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2syIikgfSwKIAkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVsxXX0sCisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIiwgeworCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vayIpIH0sCisJCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbMl19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjbWluaSIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY21pbmkiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzJdfSwKKwkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVszXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNQcm8yIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjUHJvMiIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbM119LAorCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzRdfSwKIAl7IC5pZGVudCA9IE5VTEwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc2IxMDAuYyBiL2RyaXZlcnMvaHdtb24vYXNiMTAwLmMKaW5kZXggOTUwY2VhOC4uODQ3MTJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc2IxMDAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzYjEwMC5jCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAibG03NS5oIgogCiAvKiBJMkMgYWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMShhc2IxMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hdHhwMS5jIGIvZHJpdmVycy9od21vbi9hdHhwMS5jCmluZGV4IGNjZTMzNTAuLjAxYzE3ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXR4cDEuYworKysgYi9kcml2ZXJzL2h3bW9uL2F0eHAxLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNkZWZpbmUgQVRYUDFfVklETUFTSwkweDFmCiAjZGVmaW5lIEFUWFAxX0dQSU8xTUFTSwkweDBmCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MzcsIDB4NGUsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM3LCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OwogCiBJMkNfQ0xJRU5UX0lOU01PRF8xKGF0eHAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCmluZGV4IDNlZTYwZDIuLjcwMjM5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYworKysgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKQEAgLTM4LDcgKzM4LDggQEAKIAogI2RlZmluZSBEUlZOQU1FCSJjb3JldGVtcCIKIAotdHlwZWRlZiBlbnVtIHsgU0hPV19URU1QLCBTSE9XX1RKTUFYLCBTSE9XX0xBQkVMLCBTSE9XX05BTUUgfSBTSE9XOwordHlwZWRlZiBlbnVtIHsgU0hPV19URU1QLCBTSE9XX1RKTUFYLCBTSE9XX1RUQVJHRVQsIFNIT1dfTEFCRUwsCisJCVNIT1dfTkFNRSB9IFNIT1c7CiAKIC8qCiAgKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KQEAgLTU1LDYgKzU2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogaW4gamlmZmllcyAqLwogCWludCB0ZW1wOwogCWludCB0am1heDsKKwlpbnQgdHRhcmdldDsKIAl1OCBhbGFybTsKIH07CiAKQEAgLTkzLDkgKzk1LDEwIEBACiAKIAlpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19URU1QKQogCQllcnIgPSBkYXRhLT52YWxpZCA/IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXApIDogLUVBR0FJTjsKLQllbHNlCisJZWxzZSBpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19USk1BWCkKIAkJZXJyID0gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGptYXgpOwotCisJZWxzZQorCQllcnIgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50dGFyZ2V0KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDMsNiArMTA2LDggQEAKIAkJCSAgU0hPV19URU1QKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLAogCQkJICBTSE9XX1RKTUFYKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsCisJCQkgIFNIT1dfVFRBUkdFVCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2xhYmVsLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwsIFNIT1dfTEFCRUwpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwsIFNIT1dfTkFNRSk7CkBAIC0xNDcsNiArMTUyLDU2IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkanVzdF90am1heChzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIHUzMiBpZCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIFRoZSAxMDBDIGlzIGRlZmF1bHQgZm9yIGJvdGggbW9iaWxlIGFuZCBub24gbW9iaWxlIENQVXMgKi8KKworCWludCB0am1heCA9IDEwMDAwMDsKKwlpbnQgaXNtb2JpbGUgPSAxOworCWludCBlcnI7CisJdTMyIGVheCwgZWR4OworCisJLyogRWFybHkgY2hpcHMgaGF2ZSBubyBNU1IgZm9yIFRqTWF4ICovCisKKwlpZiAoKGMtPng4Nl9tb2RlbCA9PSAweGYpICYmIChjLT54ODZfbWFzayA8IDQpKSB7CisJCWlzbW9iaWxlID0gMDsKKwl9CisKKwlpZiAoKGMtPng4Nl9tb2RlbCA+IDB4ZSkgJiYgKGlzbW9iaWxlKSkgeworCisJCS8qIE5vdyB3ZSBjYW4gZGV0ZWN0IHRoZSBtb2JpbGUgQ1BVIHVzaW5nIEludGVsIHByb3ZpZGVkIHRhYmxlCisJCSAgIGh0dHA6Ly9zb2Z0d2FyZWNvbW11bml0eS5pbnRlbC5jb20vV2lraS9Nb2JpbGl0eS83MjAuaHRtCisJCSAgIEZvciBDb3JlMiBjb3JlcywgY2hlY2sgTVNSIDB4MTcsIGJpdCAyOCAxID0gTW9iaWxlIENQVQorCQkqLworCisJCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGlkLCAweDE3LCAmZWF4LCAmZWR4KTsKKwkJaWYgKGVycikgeworCQkJZGV2X3dhcm4oZGV2LAorCQkJCSAiVW5hYmxlIHRvIGFjY2VzcyBNU1IgMHgxNywgYXNzdW1pbmcgZGVza3RvcCIKKwkJCQkgIiBDUFVcbiIpOworCQkJaXNtb2JpbGUgPSAwOworCQl9IGVsc2UgaWYgKCEoZWF4ICYgMHgxMDAwMDAwMCkpIHsKKwkJCWlzbW9iaWxlID0gMDsKKwkJfQorCX0KKworCWlmIChpc21vYmlsZSkgeworCisJCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGlkLCAweGVlLCAmZWF4LCAmZWR4KTsKKwkJaWYgKGVycikgeworCQkJZGV2X3dhcm4oZGV2LAorCQkJCSAiVW5hYmxlIHRvIGFjY2VzcyBNU1IgMHhFRSwgZm9yIFRqbWF4LCBsZWZ0IgorCQkJCSAiIGF0IGRlZmF1bHQiKTsKKwkJfSBlbHNlIGlmIChlYXggJiAweDQwMDAwMDAwKSB7CisJCQl0am1heCA9IDg1MDAwOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oZGV2LCAiVXNpbmcgcmVsYXRpdmUgdGVtcGVyYXR1cmUgc2NhbGUhXG4iKTsKKwl9CisKKwlyZXR1cm4gdGptYXg7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNvcmV0ZW1wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGNvcmV0ZW1wX2RhdGEgKmRhdGE7CkBAIC0xNjMsOCArMjE4LDYgQEAKIAlkYXRhLT5pZCA9IHBkZXYtPmlkOwogCWRhdGEtPm5hbWUgPSAiY29yZXRlbXAiOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQkvKiBUam1heCBkZWZhdWx0IGlzIDEwMCBkZWdyZWVzIEMgKi8KLQlkYXRhLT50am1heCA9IDEwMDAwMDsKIAogCS8qIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgVEhFUk1fU1RBVFVTIE1TUiAqLwogCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCBNU1JfSUEzMl9USEVSTV9TVEFUVVMsICZlYXgsICZlZHgpOwpAQCAtMTkxLDQwICsyNDQsMjkgQEAKIAkJfQogCX0KIAotCS8qIFNvbWUgcHJvY2Vzc29ycyBoYXZlIFRqbWF4IDg1IGZvbGxvd2luZyBtYWdpYyBzaG91bGQgZGV0ZWN0IGl0Ci0JICAgSW50ZWwgd29uJ3QgZGlzY2xvc2UgdGhlIGluZm9ybWF0aW9uIHdpdGhvdXQgc2lnbmVkIE5EQSwgYnV0Ci0JICAgaW5kaXZpZHVhbHMgY2Fubm90IHNpZ24gaXQuIENhdGNoKGVkKSAyMi4KLQkqLworCWRhdGEtPnRqbWF4ID0gYWRqdXN0X3RqbWF4KGMsIGRhdGEtPmlkLCAmcGRldi0+ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAotCWlmICgoKGMtPng4Nl9tb2RlbCA9PSAweGYpICYmIChjLT54ODZfbWFzayA+IDMpKSB8fAotCQkoYy0+eDg2X21vZGVsID09IDB4ZSkpICB7Ci0JCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCAweGVlLCAmZWF4LCAmZWR4KTsKKwkvKiByZWFkIHRoZSBzdGlsbCB1bmRvY3VtZW50ZWQgSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgaXQgZXhpc3RzCisJICAgb24gb2xkZXIgQ1BVcyBidXQgbm90IGluIHRoaXMgcmVnaXN0ZXIgKi8KKworCWlmIChjLT54ODZfbW9kZWwgPiAweGUpIHsKKwkJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoZGF0YS0+aWQsIDB4MWEyLCAmZWF4LCAmZWR4KTsKIAkJaWYgKGVycikgewotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKLQkJCQkgIlVuYWJsZSB0byBhY2Nlc3MgTVNSIDB4RUUsIFRqbWF4IGxlZnQgYXQgJWQgIgotCQkJCSAiZGVncmVlcyBDXG4iLCBkYXRhLT50am1heC8xMDAwKTsKLQkJfSBlbHNlIGlmIChlYXggJiAweDQwMDAwMDAwKSB7Ci0JCQlkYXRhLT50am1heCA9IDg1MDAwOworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWFkIgorCQkJCQkiIElBMzJfVEVNUEVSQVRVUkVfVEFSR0VUIE1TUlxuIik7CisJCX0gZWxzZSB7CisJCQlkYXRhLT50dGFyZ2V0ID0gZGF0YS0+dGptYXggLQorCQkJCQkoKChlYXggPj4gOCkgJiAweGZmKSAqIDEwMDApOworCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X2ZyZWU7CiAJCX0KIAl9CiAKLQkvKiBJbnRlbCBzYXlzIHRoYXQgYWJvdmUgc2hvdWxkIG5vdCB3b3JrIGZvciBkZXNrdG9wIENvcmUyIHByb2Nlc3NvcnMsCi0JICAgYnV0IGl0IHNlZW1zIHRvIHdvcmsuIFRoZXJlIGlzIG5vIG90aGVyIHdheSBob3cgZ2V0IHRoZSBhYnNvbHV0ZQotCSAgIHJlYWRpbmdzLiBXYXJuIHRoZSB1c2VyIGFib3V0IHRoaXMuIEZpcnN0IGNoZWNrIGlmIGFyZSBkZXNrdG9wLAotCSAgIGJpdCA1MCBvZiBNU1JfSUEzMl9QTEFURk9STV9JRCBzaG91bGQgYmUgMC4KLQkqLwotCi0JcmRtc3Jfc2FmZV9vbl9jcHUoZGF0YS0+aWQsIE1TUl9JQTMyX1BMQVRGT1JNX0lELCAmZWF4LCAmZWR4KTsKLQotCWlmICgoYy0+eDg2X21vZGVsID09IDB4ZikgJiYgKCEoZWR4ICYgMHgwMDA0MDAwMCkpKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJVc2luZyB1bmRvY3VtZW50ZWQgZmVhdHVyZXMsIGFic29sdXRlICIKLQkJCSAidGVtcGVyYXR1cmUgbWlnaHQgYmUgd3JvbmchXG4iKTsKLQl9Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKLQogCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmNvcmV0ZW1wX2dyb3VwKSkpCi0JCWdvdG8gZXhpdF9mcmVlOworCQlnb3RvIGV4aXRfZGV2OwogCiAJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewpAQCAtMjM4LDYgKzI4MCw4IEBACiAKIGV4aXRfY2xhc3M6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmNvcmV0ZW1wX2dyb3VwKTsKK2V4aXRfZGV2OgorCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7CiBleGl0X2ZyZWU6CiAJa2ZyZWUoZGF0YSk7CiBleGl0OgpAQCAtMjUwLDYgKzI5NCw3IEBACiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZjb3JldGVtcF9ncm91cCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKQEAgLTMzMCw3ICszNzUsNyBAQAogCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKIH0KIAotc3RhdGljIGludCBjb3JldGVtcF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IF9fY3B1aW5pdCBjb3JldGVtcF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZykgaGNwdTsKQEAgLTM0Nyw3ICszOTIsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY29yZXRlbXBfY3B1X25vdGlmaWVyID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjb3JldGVtcF9jcHVfbm90aWZpZXIgX19yZWZkYXRhID0gewogCS5ub3RpZmllcl9jYWxsID0gY29yZXRlbXBfY3B1X2NhbGxiYWNrLAogfTsKICNlbmRpZgkJCQkvKiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCkBAIC0zNjgsMTAgKzQxMywxMCBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoaSk7CiAKLQkJLyogY2hlY2sgaWYgZmFtaWx5IDYsIG1vZGVscyBlLCBmLCAxNiAqLworCQkvKiBjaGVjayBpZiBmYW1pbHkgNiwgbW9kZWxzIDB4ZSwgMHhmLCAweDE2LCAweDE3ICovCiAJCWlmICgoYy0+Y3B1aWRfbGV2ZWwgPCAwKSB8fCAoYy0+eDg2ICE9IDB4NikgfHwKIAkJICAgICEoKGMtPng4Nl9tb2RlbCA9PSAweGUpIHx8IChjLT54ODZfbW9kZWwgPT0gMHhmKSB8fAotCQkJKGMtPng4Nl9tb2RlbCA9PSAweDE2KSkpIHsKKwkJCShjLT54ODZfbW9kZWwgPT0gMHgxNikgfHwgKGMtPng4Nl9tb2RlbCA9PSAweDE3KSkpIHsKIAogCQkJLyogc3VwcG9ydGVkIENQVSBub3QgZm91bmQsIGJ1dCByZXBvcnQgdGhlIHVua25vd24KIAkJCSAgIGZhbWlseSA2IENQVSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwppbmRleCBkZGRkZDlmLi43NjczZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwpAQCAtNDksNyArNDksNyBAQAogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9pZCwgIk92ZXJyaWRlIHRoZSBkZXRlY3RlZCBkZXZpY2UgSUQiKTsKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7MHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkR9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF8xKGRtZTE3MzcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kczE2MjEuYyBiL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKaW5kZXggM2Y1MTYzZC4uNWYzMDBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9kczE2MjEuYworKysgYi9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAibG03NS5oIgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsCiAJCQkJCTB4NGQsIDB4NGUsIDB4NGYsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYyBiL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jCmluZGV4IDY4OTJmNzYuLjE0NjQzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZjc1Mzc1cy5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF8yKGY3NTM3MywgZjc1Mzc1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjaGVyLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY2hlci5jCmluZGV4IDcyMWM3MDEuLmVkMjZiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZnNjaGVyLmMKKysrIGIvZHJpdmVycy9od21vbi9mc2NoZXIuYwpAQCAtNDAsNyArNDAsNyBAQAogICogQWRkcmVzc2VzIHRvIHNjYW4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDczLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg3MywgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyoKICAqIEluc21vZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwppbmRleCBiN2M5ZWVmLi5iZDg5ZDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NzMsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDczLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfNShmc2Nwb3MsIGZzY2hlciwgZnNjc2N5LCBmc2NocmMsIGZzY2htZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY3Bvcy5jIGIvZHJpdmVycy9od21vbi9mc2Nwb3MuYwppbmRleCAyZjEwNzUzLi4wMGY0ODQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY3Bvcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjcG9zLmMKQEAgLTQzLDcgKzQzLDcgQEAKIC8qCiAgKiBBZGRyZXNzZXMgdG8gc2NhbgogICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDczLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg3MywgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyoKICAqIEluc21vZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2dsNTE4c20uYyBiL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jCmluZGV4IDNiMWFjNDguLjMzZTllOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jCisrKyBiL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMihnbDUxOHNtX3IwMCwgZ2w1MThzbV9yODApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9nbDUyMHNtLmMgYi9kcml2ZXJzL2h3bW9uL2dsNTIwc20uYwppbmRleCAwM2VjZGMzLi44OTg0ZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2dsNTIwc20uYworKysgYi9kcml2ZXJzL2h3bW9uL2dsNTIwc20uYwpAQCAtMzksNyArMzksNyBAQAogTU9EVUxFX1BBUk1fREVTQyhleHRyYV9zZW5zb3JfdHlwZSwgIlR5cGUgb2YgZXh0cmEgc2Vuc29yICgwPWF1dG9kZXRlY3QsIDE9dGVtcGVyYXR1cmUsIDI9dm9sdGFnZSkiKTsKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMShnbDUyMHNtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMgYi9kcml2ZXJzL2h3bW9uL2libXBleC5jCmluZGV4IDljOWNkYjAuLjRlOWIxOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1wZXguYwpAQCAtMzI3LDEwICszMjcsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwb3dlcl9zZW5zb3JfbXVsdGlwbGllcihjb25zdCBjaGFyICpzZW5zb3JfaWQsIGludCBsZW4pCitzdGF0aWMgaW50IHBvd2VyX3NlbnNvcl9tdWx0aXBsaWVyKHN0cnVjdCBpYm1wZXhfYm1jX2RhdGEgKmRhdGEsCisJCQkJICAgY29uc3QgY2hhciAqc2Vuc29yX2lkLCBpbnQgbGVuKQogewogCWludCBpOwogCisJaWYgKGRhdGEtPnNlbnNvcl9tYWpvciA9PSAyKQorCQlyZXR1cm4gMTAwMDAwMDsKKwogCWZvciAoaSA9IFBFWF9TRU5TT1JfVFlQRV9MRU47IGkgPCBsZW4gLSAxOyBpKyspCiAJCWlmICghbWVtY21wKCZzZW5zb3JfaWRbaV0sIHdhdHRfc2Vuc29yX3NpZywgUEVYX01VTFRfTEVOKSkKIAkJCXJldHVybiAxMDAwMDAwOwpAQCAtMzk4LDE0ICs0MDIsMTUgQEAKIAkJCW51bV9wb3dlcisrOwogCQkJc2Vuc29yX2NvdW50ZXIgPSBudW1fcG93ZXI7CiAJCQlkYXRhLT5zZW5zb3JzW2ldLm11bHRpcGxpZXIgPQotCQkJCXBvd2VyX3NlbnNvcl9tdWx0aXBsaWVyKGRhdGEtPnJ4X21zZ19kYXRhLAotCQkJCQkJICAgICBkYXRhLT5yeF9tc2dfbGVuKTsKKwkJCQlwb3dlcl9zZW5zb3JfbXVsdGlwbGllcihkYXRhLAorCQkJCQkJCWRhdGEtPnJ4X21zZ19kYXRhLAorCQkJCQkJCWRhdGEtPnJ4X21zZ19sZW4pOwogCQl9IGVsc2UgaWYgKGlzX3RlbXBfc2Vuc29yKGRhdGEtPnJ4X21zZ19kYXRhLAogCQkJCQkgIGRhdGEtPnJ4X21zZ19sZW4pKSB7CiAJCQlzZW5zb3JfdHlwZSA9IFRFTVBfU0VOU09SOwogCQkJbnVtX3RlbXArKzsKIAkJCXNlbnNvcl9jb3VudGVyID0gbnVtX3RlbXA7Ci0JCQlkYXRhLT5zZW5zb3JzW2ldLm11bHRpcGxpZXIgPSAxOworCQkJZGF0YS0+c2Vuc29yc1tpXS5tdWx0aXBsaWVyID0gMTAwMDsKIAkJfSBlbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTYzLmMgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwppbmRleCA2NTBiMDdkLi4xMTYyODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNjMuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwpAQCAtNTMsNyArNTMsNyBAQAogICogQWRkcmVzcyBpcyBmdWxseSBkZWZpbmVkIGludGVybmFsbHkgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NGMsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDRjLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKgogICogSW5zbW9kIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03NS5jIGIvZHJpdmVycy9od21vbi9sbTc1LmMKaW5kZXggZTVjMzVhMy4uMTE1ZjQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc1LmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsCiAJCQkJCTB4NGQsIDB4NGUsIDB4NGYsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzcuYyBiL2RyaXZlcnMvaHdtb24vbG03Ny5jCmluZGV4IDQ1OWI3MGEuLjM2ZDVhOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03Ny5jCkBAIC0zNiw3ICszNiw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4LCAweDQ5LCAweDRhLCAweDRiLAorCQkJCQkJSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KIEkyQ19DTElFTlRfSU5TTU9EXzEobG03Nyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzguYyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCmluZGV4IDBhOWViMWYuLmVkNzg1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03OC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCkBAIC0zNyw4ICszNyw4IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsCi0JCQkJICAgICAgIDB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLAorCQkJCQkJMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzcyA9IDB4MjkwOwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTgwLmMgYi9kcml2ZXJzL2h3bW9uL2xtODAuYwppbmRleCBhMmNhMDU1Li4yNmM5MWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODAuYwpAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLAotCQkJCQkweDJkLCAweDJlLCAweDJmLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwKKwkJCQkJCTB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF8xKGxtODApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTgzLmMgYi9kcml2ZXJzL2h3bW9uL2xtODMuYwppbmRleCA2ZTg5MDNhLi42YTg2NDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODMuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODMuYwpAQCAtNDgsMTAgKzQ4LDggQEAKICAqIGFkZHJlc3Nlcy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDE4LCAweDE5LCAweDFhLAotCQkJCQkweDI5LCAweDJhLCAweDJiLAotCQkJCQkweDRjLCAweDRkLCAweDRlLAotCQkJCQlJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKgogICogSW5zbW9kIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggNGJiMGYyOS4uMTgyZmU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF82KGxtODViLCBsbTg1YywgYWRtMTAyNywgYWR0NzQ2MywgZW1jNmQxMDAsIGVtYzZkMTAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04Ny5jIGIvZHJpdmVycy9od21vbi9sbTg3LmMKaW5kZXggOGVlMDdjNS4uZTFjMTgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg3LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg3LmMKQEAgLTczLDcgKzczLDcgQEAKICAqIExNODcgaGFzIHRocmVlIHBvc3NpYmxlIGFkZHJlc3NlczogMHgyYywgMHgyZCBhbmQgMHgyZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyoKICAqIEluc21vZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IGY3ZWM5NWIuLmQxYTNkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC0xMDEsMTAgKzEwMSw4IEBACiAgKiAweDRjLCAweDRkIG9yIDB4NGUuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgxOCwgMHgxOSwgMHgxYSwKLQkJCQkgICAgICAgMHgyOSwgMHgyYSwgMHgyYiwKLQkJCQkgICAgICAgMHg0YywgMHg0ZCwgMHg0ZSwKLQkJCQkgICAgICAgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgxOCwgMHgxOSwgMHgxYSwgMHgyOSwgMHgyYSwgMHgyYiwgMHg0YywgMHg0ZCwgMHg0ZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyoKICAqIEluc21vZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTIuYyBiL2RyaXZlcnMvaHdtb24vbG05Mi5jCmluZGV4IGFmNWM3N2QuLmMzMTk0MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05Mi5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05Mi5jCkBAIC00NSwxMyArNDUsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIFRoZSBMTTkyIGFuZCBNQVg2NjM1IGhhdmUgMiB0d28tc3RhdGUgcGlucyBmb3IgYWRkcmVzcyBzZWxlY3Rpb24sCiAgICByZXN1bHRpbmcgaW4gNCBwb3NzaWJsZSBhZGRyZXNzZXMuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4LCAweDQ5LCAweDRhLCAweDRiLAotCQkJCSAgICAgICBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwKKwkJCQkJCUkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF8xKGxtOTIpOwpAQCAtMjA5LDYgKzIxMCwxNCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBBTEFSTVNfRlJPTV9SRUcoZGF0YS0+dGVtcDFfaW5wdXQpKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJaW50IGJpdG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgbG05Ml9kYXRhICpkYXRhID0gbG05Ml91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT50ZW1wMV9pbnB1dCA+PiBiaXRucikgJiAxKTsKK30KKwogc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxX2lucHV0LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMV9jcml0LAogCXNldF90ZW1wMV9jcml0KTsKQEAgLTIyMSw2ICsyMzAsOSBAQAogCXNldF90ZW1wMV9tYXgpOwogc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lSVUdPLCBzaG93X3RlbXAxX21heF9oeXN0LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXMsIFNfSVJVR08sIHNob3dfYWxhcm1zLCBOVUxMKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMSk7CiAKIAogLyoKQEAgLTI5Nyw3ICszMDksOSBAQAogCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKIAkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCi0KKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTkzLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTMuYwppbmRleCBlYTYxOTQ2Li41ZTY3OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtOTMuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtOTMuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCUkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMShsbTkzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTYxOS5jIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKaW5kZXggMzhhNDRjMy4uN2U3MjY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKKysrIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKQEAgLTMyLDE0ICszMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDE4LCAweDE5LCAweDFhLAotCQkJCQkweDI5LCAweDJhLCAweDJiLAotCQkJCQkweDRjLCAweDRkLCAweDRlLAotCQkJCQlJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKgogICogSW5zbW9kIHBhcmFtZXRlcnMKQEAgLTE2MSw2ICsxNjAsMTQgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+YWxhcm1zKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJaW50IGJpdG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgbWF4MTYxOV9kYXRhICpkYXRhID0gbWF4MTYxOV91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXMgPj4gYml0bnIpICYgMSk7Cit9CisKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wX2lucHV0MSwgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcF9pbnB1dDIsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9sb3cyLApAQCAtMTcyLDYgKzE3OSwxMCBAQAogc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9oeXN0MiwKIAlzZXRfdGVtcF9oeXN0Mik7CiBzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zLCBTX0lSVUdPLCBzaG93X2FsYXJtcywgTlVMTCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYXgxNjE5X2F0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKQEAgLTE4Miw2ICsxOTMsMTAgQEAKIAkmZGV2X2F0dHJfdGVtcDJfY3JpdF9oeXN0LmF0dHIsCiAKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDY2NTAuYyBiL2RyaXZlcnMvaHdtb24vbWF4NjY1MC5jCmluZGV4IDc1NTU3MGMuLjUyZDUyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbWF4NjY1MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbWF4NjY1MC5jCkBAIC00NCw3ICs0NCw4IEBACiAgKiBBZGRyZXNzZXMgdG8gc2Nhbi4gVGhlcmUgYXJlIGZvdXIgZGlzam9pbnQgcG9zc2liaWxpdGllcywgYnkgcGluIGNvbmZpZy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gezB4MWIsIDB4MWYsIDB4NDgsIDB4NGIsIEkyQ19DTElFTlRfRU5EfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7MHgxYiwgMHgxZiwgMHg0OCwgMHg0YiwKKwkJCQkJCUkyQ19DTElFTlRfRU5EfTsKIAogLyoKICAqIEluc21vZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMKaW5kZXggMGQ3ZjBjNC4uZDFiNDk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc21zYzQ3bTEuYwpAQCAtMTk4LDYgKzE5OCwxNCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0pKTsKIH0KIAorc3RhdGljIHNzaXplX3QgZ2V0X2Zhbl9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICAgICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJaW50IGJpdG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKwlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IHNtc2M0N20xX3VwZGF0ZV9kZXZpY2UoZGV2LCAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsKK30KKwogc3RhdGljIHNzaXplX3QgZ2V0X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCiAJCSAgICAgICAqZGV2YXR0ciwgY2hhciAqYnVmKQogewpAQCAtMzQ3LDYgKzM1NSw4IEBACiAJCWdldF9mYW5fbWluLCBzZXRfZmFuX21pbiwgb2Zmc2V0IC0gMSk7CQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4jI29mZnNldCMjX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCiAJCWdldF9mYW5fZGl2LCBzZXRfZmFuX2Rpdiwgb2Zmc2V0IC0gMSk7CQkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4jI29mZnNldCMjX2FsYXJtLCBTX0lSVUdPLCBnZXRfZmFuX2FsYXJtLAlcCisJCU5VTEwsIG9mZnNldCAtIDEpOwkJCQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCiAJCWdldF9wd20sIHNldF9wd20sIG9mZnNldCAtIDEpOwkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwJXApAQCAtMzc0LDEyICszODQsMTUgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUuZGV2X2F0dHIuYXR0ciwKQEAgLTUzMyw3ICs1NDYsOSBAQAogCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0cikpCiAJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyKSkpCisJCQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXJyb3JfcmVtb3ZlX2ZpbGVzOwogCX0gZWxzZQogCQlkZXZfZGJnKGRldiwgIkZhbiAxIG5vdCBlbmFibGVkIGJ5IGhhcmR3YXJlLCBza2lwcGluZ1xuIik7CkBAIC01NDQsNyArNTU5LDkgQEAKIAkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIpKQogCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2Rpdi5kZXZfYXR0cikpKQorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyKSkpCiAJCQlnb3RvIGVycm9yX3JlbW92ZV9maWxlczsKIAl9IGVsc2UKIAkJZGV2X2RiZyhkZXYsICJGYW4gMiBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgc2tpcHBpbmdcbiIpOwpAQCAtNTU1LDcgKzU3Miw5IEBACiAJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKIAkJCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyKSkKIAkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19kaXYuZGV2X2F0dHIpKSkKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfZGl2LmRldl9hdHRyKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0cikpKQogCQkJZ290byBlcnJvcl9yZW1vdmVfZmlsZXM7CiAJfSBlbHNlIGlmIChkYXRhLT50eXBlID09IHNtc2M0N20yKQogCQlkZXZfZGJnKGRldiwgIkZhbiAzIG5vdCBlbmFibGVkIGJ5IGhhcmR3YXJlLCBza2lwcGluZ1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xOTIuYyBiL2RyaXZlcnMvaHdtb24vc21zYzQ3bTE5Mi5jCmluZGV4IDhiMGMxODguLjNjOWRiNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc21zYzQ3bTE5Mi5jCisrKyBiL2RyaXZlcnMvaHdtb24vc21zYzQ3bTE5Mi5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMShzbXNjNDdtMTkyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdGhtYzUwLmMgYi9kcml2ZXJzL2h3bW9uL3RobWM1MC5jCmluZGV4IDA0ZGQ3NjkuLjc2YTM4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdGhtYzUwLmMKKysrIGIvZHJpdmVycy9od21vbi90aG1jNTAuYwpAQCAtMzIsNyArMzIsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF8yKHRobWM1MCwgYWRtMTAyMik7CkBAIC01Miw5ICs1Miw5IEBACiAgKi8KICNkZWZpbmUgVEhNQzUwX1JFR19JTlRSCQkJCTB4NDEKIAotY29uc3Qgc3RhdGljIHU4IFRITUM1MF9SRUdfVEVNUFtdID0geyAweDI3LCAweDI2LCAweDIwIH07Ci1jb25zdCBzdGF0aWMgdTggVEhNQzUwX1JFR19URU1QX01JTltdID0geyAweDNBLCAweDM4LCAweDJDIH07Ci1jb25zdCBzdGF0aWMgdTggVEhNQzUwX1JFR19URU1QX01BWFtdID0geyAweDM5LCAweDM3LCAweDJCIH07CitzdGF0aWMgY29uc3QgdTggVEhNQzUwX1JFR19URU1QW10gPSB7IDB4MjcsIDB4MjYsIDB4MjAgfTsKK3N0YXRpYyBjb25zdCB1OCBUSE1DNTBfUkVHX1RFTVBfTUlOW10gPSB7IDB4M0EsIDB4MzgsIDB4MkMgfTsKK3N0YXRpYyBjb25zdCB1OCBUSE1DNTBfUkVHX1RFTVBfTUFYW10gPSB7IDB4MzksIDB4MzcsIDB4MkIgfTsKIAogI2RlZmluZSBUSE1DNTBfUkVHX0NPTkZfbkZBTk9GRgkJCTB4MjAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92aWE2ODZhLmMgYi9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYwppbmRleCAyNjM1YmJhLi5mMWVlNWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYworKysgYi9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYwpAQCAtNTMzLDYgKzUzMywyNCBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXMsIE5VTEwpOwogCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlpbnQgYml0bnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCB2aWE2ODZhX2RhdGEgKmRhdGEgPSB2aWE2ODZhX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsKK30KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNyk7CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCiAJCQkgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTU1Nyw2ICs1NzUsMTEgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luM19tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLApAQCAtNTY3LDYgKzU5MCw5IEBACiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKQEAgLTU3NCw2ICs2MDAsOCBAQAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCiAJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAogCSZkZXZfYXR0cl9uYW1lLmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jIGIvZHJpdmVycy9od21vbi92dDgyMzEuYwppbmRleCBmODc2NjE3Li41YmM1NzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdnQ4MjMxLmMKQEAgLTIsNyArMiw3IEBACiAJdnQ4MjMxLmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzCiAJCQkJZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcKIAotCUNvcHlyaWdodCAoYykgMjAwNSBSb2dlciBMdWNhcyA8cm9nZXJAcGxhbmJpdC5jby51az4KKwlDb3B5cmlnaHQgKGMpIDIwMDUgUm9nZXIgTHVjYXMgPHZ0ODIzMUBoaWRkZW5lbmdpbmUuY28udWs+CiAJQ29weXJpZ2h0IChjKSAyMDAyIE1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KIAkJCSAgIEFhcm9uIE0uIE1hcnNoIDxhbWFyc2hAc2RmLmxvbmVzdGFyLm9yZz4KIApAQCAtNTQxLDYgKzU0MSwyOCBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXMsIE5VTEwpOwogCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlpbnQgYml0bnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCB2dDgyMzFfZGF0YSAqZGF0YSA9IHZ0ODIzMV91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIChkYXRhLT5hbGFybXMgPj4gYml0bnIpICYgMSk7Cit9CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDExKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA1X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDZfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDExKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW41X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDcpOworCiBzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQogCQkJICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CkBAIC01NDksMzYgKzU3MSw0MiBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp2dDgyMzFfYXR0cmlidXRlc190ZW1wc1s2XVs0XSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp2dDgyMzFfYXR0cmlidXRlc190ZW1wc1s2XVs1XSA9IHsKIAl7CiAJCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAogCQkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKIAkJJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9LCB7CiAJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9LCB7CiAJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9LCB7CiAJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9LCB7CiAJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9LCB7CiAJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDZfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9CiB9OwpAQCAtNTkyLDM2ICs2MjAsNDIgQEAKIAl7IC5hdHRycyA9IHZ0ODIzMV9hdHRyaWJ1dGVzX3RlbXBzWzVdIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdnQ4MjMxX2F0dHJpYnV0ZXNfdm9sdHNbNl1bNF0gPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdnQ4MjMxX2F0dHJpYnV0ZXNfdm9sdHNbNl1bNV0gPSB7CiAJewogCQkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX2luMF9taW4uZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWF4LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9LCB7CiAJCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbi5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkJTlVMTAogCX0sIHsKIAkJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl9pbjJfbWluLmRldl9hdHRyLmF0dHIsCiAJCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCQlOVUxMCiAJfSwgewogCQkmc2Vuc29yX2Rldl9hdHRyX2luM19pbnB1dC5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX2luM19taW4uZGV2X2F0dHIuYXR0ciwKIAkJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJCU5VTEwKIAl9LCB7CiAJCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCiAJCSZzZW5zb3JfZGV2X2F0dHJfaW40X21pbi5kZXZfYXR0ci5hdHRyLAogCQkmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkJTlVMTAogCX0sIHsKIAkJJmRldl9hdHRyX2luNV9pbnB1dC5hdHRyLAogCQkmZGV2X2F0dHJfaW41X21pbi5hdHRyLAogCQkmZGV2X2F0dHJfaW41X21heC5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luNV9hbGFybS5kZXZfYXR0ci5hdHRyLAogCQlOVUxMCiAJfQogfTsKQEAgLTY0Miw2ICs2NzYsOCBAQAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKIAkmZGV2X2F0dHJfbmFtZS5hdHRyLAogCU5VTEwKQEAgLTk2Myw3ICs5OTksNyBAQAogCX0KIH0KIAotTU9EVUxFX0FVVEhPUigiUm9nZXIgTHVjYXMgPHJvZ2VyQHBsYW5iaXQuY28udWs+Iik7CitNT0RVTEVfQVVUSE9SKCJSb2dlciBMdWNhcyA8dnQ4MjMxQGhpZGRlbmVuZ2luZS5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVlQ4MjMxIHNlbnNvcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYwppbmRleCA3NDIxZjZlLi5mOTQyZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYwpAQCAtNTMsOCArNTMsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLAotCQkJCSAgICAgICAweDJlLCAweDJmLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwKKwkJCQkJCTB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5EIH07CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaXNhX2FkZHJlc3MgPSAweDI5MDsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KQEAgLTEzNjcsNyArMTM2Nyw4IEBACiAKIAkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgVzgzNzgxRF9FWFRFTlQsICJ3ODM3ODFkIikpIHsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMiwKKwkJCSAgICAidzgzNzgxZCIpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0OwogCX0KQEAgLTE0MTUsNyArMTQxNiw3IEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKIAlrZnJlZShkYXRhKTsKICBleGl0X3JlbGVhc2VfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIFc4Mzc4MURfRVhURU5UKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQsIDIpOwogIGV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0MjksNyArMTQzMCw3IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQlyZWxlYXNlX3JlZ2lvbihkYXRhLT5jbGllbnQuYWRkciwgVzgzNzgxRF9FWFRFTlQpOworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmNsaWVudC5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQsIDIpOwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CkBAIC0xNzk3LDggKzE3OTgsMTcgQEAKIHsKIAlpbnQgdmFsLCBzYXZlLCBmb3VuZCA9IDA7CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIFc4Mzc4MURfRVhURU5ULCAidzgzNzgxZCIpKQorCS8qIFdlIGhhdmUgdG8gcmVxdWVzdCB0aGUgcmVnaW9uIGluIHR3byBwYXJ0cyBiZWNhdXNlIHNvbWUKKwkgICBib2FyZHMgZGVjbGFyZSBiYXNlKzQgdG8gYmFzZSs3IGFzIGEgUE5QIGRldmljZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcywgNCwgInc4Mzc4MWQiKSkgeworCQlwcl9kZWJ1ZygidzgzNzgxZDogRmFpbGVkIHRvIHJlcXVlc3QgbG93IHBhcnQgb2YgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIDA7CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcyArIDQsIDQsICJ3ODM3ODFkIikpIHsKKwkJcHJfZGVidWcoInc4Mzc4MWQ6IEZhaWxlZCB0byByZXF1ZXN0IGhpZ2ggcGFydCBvZiByZWdpb25cbiIpOworCQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCA0KTsKKwkJcmV0dXJuIDA7CisJfQogCiAjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCiAJLyogV2UgbmVlZCB0aGUgdGltZW91dHMgZm9yIGF0IGxlYXN0IHNvbWUgVzgzNzgxRC1saWtlCkBAIC0xODcxLDcgKzE4ODEsOCBAQAogCQkJdmFsID09IDB4MzAgPyAiVzgzNzgyRCIgOiAiVzgzNzgxRCIsIChpbnQpYWRkcmVzcyk7CiAKICByZWxlYXNlOgotCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIFc4Mzc4MURfRVhURU5UKTsKKwlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzICsgNCwgNCk7CisJcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgNCk7CiAJcmV0dXJuIGZvdW5kOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jCmluZGV4IDg1YmQyMWUuLjg1MDc3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jCkBAIC00Nyw3ICs0Nyw4IEBACiAjZGVmaW5lIE5VTUJFUl9PRl9URU1QSU4JMwogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCisJCQkJCQlJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMSh3ODM3OTFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKaW5kZXggMDA3NDQ5ZC4uMjk5NjI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKQEAgLTQ2LDcgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCisJCQkJCQlJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfMSh3ODM3OTJkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCmluZGV4IDNiYTFkNmIuLmVlMzVhZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTMuYwpAQCAtMzcsNyArMzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCAweDJmLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKKwkJCQkJCUkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF8xKHc4Mzc5Myk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4M2w3ODV0cy5jIGIvZHJpdmVycy9od21vbi93ODNsNzg1dHMuYwppbmRleCAxZDYyNTlkLi43N2YyZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4M2w3ODV0cy5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzbDc4NXRzLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqIEFkZHJlc3MgaXMgZnVsbHkgZGVmaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYmUgY2hhbmdlZC4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJlLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyoKICAqIEluc21vZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4M2w3ODZuZy5jIGIvZHJpdmVycy9od21vbi93ODNsNzg2bmcuYwppbmRleCAxZGJlZTRmLi40MWUyMmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4M2w3ODZuZy5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzbDc4Nm5nLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIEluc21vZCBwYXJhbWV0ZXJzICovCiBJMkNfQ0xJRU5UX0lOU01PRF8xKHc4M2w3ODZuZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IGI2MWY1NmIuLmIwNGM5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogY29uZmlnIEkyQ19CTEFDS0ZJTl9UV0kKIAl0cmlzdGF0ZSAiQmxhY2tmaW4gVFdJIEkyQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQkY1MzQgfHwgQkY1MzYgfHwgQkY1MzcgfHwgQkY1NHgKKwlkZXBlbmRzIG9uIEJGNTM0IHx8IEJGNTM2IHx8IEJGNTM3CiAJaGVscAogCSAgVGhpcyBpcyB0aGUgVFdJIEkyQyBkZXZpY2UgZHJpdmVyIGZvciBCbGFja2ZpbiA1MzQvNTM2LzUzNy81NHguCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCkBAIC0xNzcsNiArMTc3LDggQEAKIAkgICAgRVNCMgogCSAgICBJQ0g4CiAJICAgIElDSDkKKwkgICAgVG9sYXBhaQorCSAgICBJQ0gxMAogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtaTgwMS4KQEAgLTY0Myw3ICs2NDUsNyBAQAogCiBjb25maWcgSTJDX01WNjRYWFgKIAl0cmlzdGF0ZSAiTWFydmVsbCBtdjY0eHh4IEkyQyBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gKE1WNjRYNjAgfHwgQVJDSF9PUklPTikgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiAoTVY2NFg2MCB8fCBQTEFUX09SSU9OKSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUKIAkgIGJ1aWx0LWluIEkyQyBpbnRlcmZhY2Ugb24gdGhlIE1hcnZlbGwgNjR4eHggbGluZSBvZiBob3N0IGJyaWRnZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwppbmRleCA1NzNhYmU0Li4yZmE0MzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCXU4IHRlbXA7CiAJCiAJLyogZHJpdmVyX2RhdGEgbWlnaHQgY29tZSBmcm9tIHVzZXItc3BhY2UsIHNvIGNoZWNrIGl0ICovCi0JaWYgKGlkLT5kcml2ZXJfZGF0YSA+IEFSUkFZX1NJWkUoY2hpcG5hbWUpKQorCWlmIChpZC0+ZHJpdmVyX2RhdGEgPj0gQVJSQVlfU0laRShjaGlwbmFtZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGFtZDc1Nl9pb3BvcnQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMKaW5kZXggY2NlNWE2MS4uZmRlMjYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kYXZpbmNpLmMKQEAgLTM4Miw5ICszODIsOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBEQVZJTkNJX0kyQ19JVlJfQVJEWToKLQkJCXcgPSBkYXZpbmNpX2kyY19yZWFkX3JlZyhkZXYsIERBVklOQ0lfSTJDX1NUUl9SRUcpOwotCQkJTU9EX1JFR19CSVQodywgREFWSU5DSV9JMkNfU1RSX0FSRFksIDEpOwotCQkJZGF2aW5jaV9pMmNfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9JMkNfU1RSX1JFRywgdyk7CisJCQlkYXZpbmNpX2kyY193cml0ZV9yZWcoZGV2LAorCQkJCURBVklOQ0lfSTJDX1NUUl9SRUcsIERBVklOQ0lfSTJDX1NUUl9BUkRZKTsKIAkJCWNvbXBsZXRlKCZkZXYtPmNtZF9jb21wbGV0ZSk7CiAJCQlicmVhazsKIApAQCAtMzk3LDEyICszOTYsOSBAQAogCQkJCWlmIChkZXYtPmJ1Zl9sZW4pCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJdyA9IGRhdmluY2lfaTJjX3JlYWRfcmVnKGRldiwKLQkJCQkJCQkgREFWSU5DSV9JMkNfU1RSX1JFRyk7Ci0JCQkJTU9EX1JFR19CSVQodywgREFWSU5DSV9JMkNfSU1SX1JSRFksIDApOwogCQkJCWRhdmluY2lfaTJjX3dyaXRlX3JlZyhkZXYsCi0JCQkJCQkgICAgICBEQVZJTkNJX0kyQ19TVFJfUkVHLAotCQkJCQkJICAgICAgdyk7CisJCQkJCURBVklOQ0lfSTJDX1NUUl9SRUcsCisJCQkJCURBVklOQ0lfSTJDX0lNUl9SUkRZKTsKIAkJCX0gZWxzZQogCQkJCWRldl9lcnIoZGV2LT5kZXYsICJSRFIgSVJRIHdoaWxlIG5vICIKIAkJCQkJImRhdGEgcmVxdWVzdGVkXG4iKTsKQEAgLTQyOCw5ICs0MjQsOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBEQVZJTkNJX0kyQ19JVlJfU0NEOgotCQkJdyA9IGRhdmluY2lfaTJjX3JlYWRfcmVnKGRldiwgREFWSU5DSV9JMkNfU1RSX1JFRyk7Ci0JCQlNT0RfUkVHX0JJVCh3LCBEQVZJTkNJX0kyQ19TVFJfU0NELCAxKTsKLQkJCWRhdmluY2lfaTJjX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfSTJDX1NUUl9SRUcsIHcpOworCQkJZGF2aW5jaV9pMmNfd3JpdGVfcmVnKGRldiwKKwkJCQlEQVZJTkNJX0kyQ19TVFJfUkVHLCBEQVZJTkNJX0kyQ19TVFJfU0NEKTsKIAkJCWNvbXBsZXRlKCZkZXYtPmNtZF9jb21wbGV0ZSk7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCBhYTkxNTc5Li5iMGY3NzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwpAQCAtNDAsNyArNDAsOSBAQAogICA4MjgwMUcgICAoSUNINykgICAgICAgMHgyN2RhICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICA4MjgwMUggICAoSUNIOCkgICAgICAgMHgyODNlICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwogICA4MjgwMUkgICAoSUNIOSkgICAgICAgMHgyOTMwICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICB5ZXMgICAgIHllcwotICBUb2xhcGFpICAgICAgICAgICAgICAgMHg1MDMyICAgICAzMiAgICAgaGFyZCAgICAgeWVzICAgICA/ICAgICAgID8KKyAgVG9sYXBhaSAgICAgICAgICAgICAgIDB4NTAzMiAgICAgMzIgICAgIGhhcmQgICAgIHllcyAgICAgeWVzICAgICB5ZXMKKyAgSUNIMTAgICAgICAgICAgICAgICAgIDB4M2EzMCAgICAgMzIgICAgIGhhcmQgICAgIHllcyAgICAgeWVzICAgICB5ZXMKKyAgSUNIMTAgICAgICAgICAgICAgICAgIDB4M2E2MCAgICAgMzIgICAgIGhhcmQgICAgIHllcyAgICAgeWVzICAgICB5ZXMKIAogICBGZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI6CiAgIFNvZnR3YXJlIFBFQyAgICAgICAgICAgICAgICAgICAgIG5vCkBAIC01ODgsNiArNTkwLDggQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV82KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1RPTEFQQUlfMSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF80KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzUpIH0sCiAJeyAwLCB9CiB9OwogCkBAIC02MDgsMTAgKzYxMiwxMiBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzE3OgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzU6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfNjoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfVE9MQVBBSV8xOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF80OgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF81OgogCQlpODAxX2ZlYXR1cmVzIHw9IEZFQVRVUkVfSTJDX0JMT0NLX1JFQUQ7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzM6Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1RPTEFQQUlfMToKIAkJaTgwMV9mZWF0dXJlcyB8PSBGRUFUVVJFX1NNQlVTX1BFQzsKIAkJaTgwMV9mZWF0dXJlcyB8PSBGRUFUVVJFX0JMT0NLX0JVRkZFUjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCmluZGV4IDdjN2ViMGMuLjIyYmIyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBpbnQgaWljX2ZvcmNlX2Zhc3Q7CiBtb2R1bGVfcGFyYW0oaWljX2ZvcmNlX2Zhc3QsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpaWNfZmFzdF9wb2xsLCAiRm9yY2UgZmFzdCBtb2RlICg0MDAga0h6KSIpOworTU9EVUxFX1BBUk1fREVTQyhpaWNfZm9yY2VfZmFzdCwgIkZvcmNlIGZhc3QgbW9kZSAoNDAwIGtIeikiKTsKIAogI2RlZmluZSBEQkdfTEVWRUwgMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IGRhNjYzOTcuLjdiYTMxNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC0xMjgsNiArMTI4LDggQEAKIAlzaXplX3QJCQlidWZfbGVuOwogCXN0cnVjdCBpMmNfYWRhcHRlcglhZGFwdGVyOwogCXVuc2lnbmVkCQlyZXYxOjE7CisJdW5zaWduZWQJCWlkbGU6MTsKKwl1MTYJCQlpZXN0YXRlOwkvKiBTYXZlZCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2kyY193cml0ZV9yZWcoc3RydWN0IG9tYXBfaTJjX2RldiAqaTJjX2RldiwKQEAgLTE3NCwxOCArMTc2LDMwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2kyY19lbmFibGVfY2xvY2tzKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKK3N0YXRpYyB2b2lkIG9tYXBfaTJjX3VuaWRsZShzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCiB7CiAJaWYgKGRldi0+aWNsayAhPSBOVUxMKQogCQljbGtfZW5hYmxlKGRldi0+aWNsayk7CiAJY2xrX2VuYWJsZShkZXYtPmZjbGspOworCWlmIChkZXYtPmllc3RhdGUpCisJCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX0lFX1JFRywgZGV2LT5pZXN0YXRlKTsKKwlkZXYtPmlkbGUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2kyY19kaXNhYmxlX2Nsb2NrcyhzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBvbWFwX2kyY19pZGxlKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKIHsKKwl1MTYgaXY7CisKKwlkZXYtPmlkbGUgPSAxOworCWRldi0+aWVzdGF0ZSA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNfSUVfUkVHKTsKKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19JRV9SRUcsIDApOworCWlmIChkZXYtPnJldjEpCisJCWl2ID0gb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19JVl9SRUcpOwkvKiBSZWFkIGNsZWFycyAqLworCWVsc2UKKwkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfU1RBVF9SRUcsIGRldi0+aWVzdGF0ZSk7CisJY2xrX2Rpc2FibGUoZGV2LT5mY2xrKTsKIAlpZiAoZGV2LT5pY2xrICE9IE5VTEwpCiAJCWNsa19kaXNhYmxlKGRldi0+aWNsayk7Ci0JY2xrX2Rpc2FibGUoZGV2LT5mY2xrKTsKIH0KIAogc3RhdGljIGludCBvbWFwX2kyY19pbml0KHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKQEAgLTM2MCw3ICszNzQsNyBAQAogCWludCBpOwogCWludCByOwogCi0Jb21hcF9pMmNfZW5hYmxlX2Nsb2NrcyhkZXYpOworCW9tYXBfaTJjX3VuaWRsZShkZXYpOwogCiAJaWYgKChyID0gb21hcF9pMmNfd2FpdF9mb3JfYmIoZGV2KSkgPCAwKQogCQlnb3RvIG91dDsKQEAgLTM3NCw3ICszODgsNyBAQAogCWlmIChyID09IDApCiAJCXIgPSBudW07CiBvdXQ6Ci0Jb21hcF9pMmNfZGlzYWJsZV9jbG9ja3MoZGV2KTsKKwlvbWFwX2kyY19pZGxlKGRldik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTQwMyw2ICs0MTcsOSBAQAogCXN0cnVjdCBvbWFwX2kyY19kZXYgKmRldiA9IGRldl9pZDsKIAl1MTYgaXYsIHc7CiAKKwlpZiAoZGV2LT5pZGxlKQorCQlyZXR1cm4gSVJRX05PTkU7CisKIAlpdiA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNfSVZfUkVHKTsKIAlzd2l0Y2ggKGl2KSB7CiAJY2FzZSAweDAwOgkvKiBOb25lICovCkBAIC00NTcsNiArNDc0LDkgQEAKIAl1MTYgc3RhdCwgdzsKIAlpbnQgY291bnQgPSAwOwogCisJaWYgKGRldi0+aWRsZSkKKwkJcmV0dXJuIElSUV9OT05FOworCiAJYml0cyA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNfSUVfUkVHKTsKIAl3aGlsZSAoKHN0YXQgPSAob21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19TVEFUX1JFRykpKSAmIGJpdHMpIHsKIAkJZGV2X2RiZyhkZXYtPmRldiwgIklSUSAoSVNSID0gMHglMDR4KVxuIiwgc3RhdCk7CkBAIC01NzUsNyArNTk1LDcgQEAKIAlpZiAoKHIgPSBvbWFwX2kyY19nZXRfY2xvY2tzKGRldikpICE9IDApCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCi0Jb21hcF9pMmNfZW5hYmxlX2Nsb2NrcyhkZXYpOworCW9tYXBfaTJjX3VuaWRsZShkZXYpOwogCiAJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQlkZXYtPnJldjEgPSBvbWFwX2kyY19yZWFkX3JlZyhkZXYsIE9NQVBfSTJDX1JFVl9SRUcpIDwgMHgyMDsKQEAgLTYxMCw3ICs2MzAsNyBAQAogCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKLQlvbWFwX2kyY19kaXNhYmxlX2Nsb2NrcyhkZXYpOworCW9tYXBfaTJjX2lkbGUoZGV2KTsKIAogCXJldHVybiAwOwogCkBAIC02MTgsNyArNjM4LDcgQEAKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIGVycl91bnVzZV9jbG9ja3M6CiAJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgMCk7Ci0Jb21hcF9pMmNfZGlzYWJsZV9jbG9ja3MoZGV2KTsKKwlvbWFwX2kyY19pZGxlKGRldik7CiAJb21hcF9pMmNfcHV0X2Nsb2NrcyhkZXYpOwogZXJyX2ZyZWVfbWVtOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtaXNhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYwppbmRleCA1MTYxYWFmLi40OTZlZTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYwpAQCAtMTI1LDYgKzEyNSwxMyBAQAogCiAJZGV2X2luZm8oZGV2LCAiaS9vIGJhc2UgJSMwOGx4LiBpcnEgJWRcbiIsIGJhc2UsIGlycSk7CiAKKyNpZmRlZiBDT05GSUdfUFBDX01FUkdFCisJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoYmFzZSkpIHsKKwkJZGV2X2VycihkZXYsICJJL08gYWRkcmVzcyAlIzA4bHggaXMgbm90IGF2YWlsYWJsZVxuIiwgYmFzZSk7CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihiYXNlLCBJT19TSVpFLCAiaTJjLXBjYS1pc2EiKSkgewogCQlkZXZfZXJyKGRldiwgIkkvTyBhZGRyZXNzICUjMDhseCBpcyBpbiB1c2VcbiIsIGJhc2UpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG1jbXNwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBtY21zcC5jCmluZGV4IGJlOTljMDIuLmIwM2FmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG1jbXNwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbWNtc3AuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiB9OwogCiAvKiBUaGUgZGVmYXVsdCBzZXR0aW5ncyAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCBwbWNtc3B0d2lfY2xvY2tjZmcgcG1jbXNwdHdpX2RlZmNsb2NrY2ZnID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWNtc3B0d2lfY2xvY2tjZmcgcG1jbXNwdHdpX2RlZmNsb2NrY2ZnID0gewogCS5zdGFuZGFyZCA9IHsKIAkJLmZpbHRlcgk9IDB4MywKIAkJLmNsb2NrCT0gMHgxZiwKQEAgLTEzMyw3ICsxMzMsNyBAQAogCX0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHBtY21zcHR3aV9jZmcgcG1jbXNwdHdpX2RlZmNmZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1jbXNwdHdpX2NmZyBwbWNtc3B0d2lfZGVmY2ZnID0gewogCS5hcmJmCQk9IDB4MDMsCiAJLm5hawkJPSAweDAzLAogCS5hZGQxMAkJPSAweDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggMjU5OGQyOS4uNmZkMmQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaTJjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogCiBzdHJ1Y3QgcHhhX2kyYyB7CiAJc3BpbmxvY2tfdAkJbG9jazsKQEAgLTEzOCwxMSArMTM5LDEzIEBACiAJUFhBX0JJVChJQ1JfVVIsICAgICAiVVIiLAkJInVyIiksCiB9OwogCisjaWZkZWYgQ09ORklHX0kyQ19QWEFfU0xBVkUKIHN0YXRpYyB2b2lkIGRlY29kZV9JQ1IodW5zaWduZWQgaW50IHZhbCkKIHsKIAlkZWNvZGVfYml0cyhLRVJOX0RFQlVHICJJQ1IiLCBpY3JfYml0cywgQVJSQVlfU0laRShpY3JfYml0cyksIHZhbCk7CiAJcHJpbnRrKCJcbiIpOwogfQorI2VuZGlmCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX2RlYnVnID0gREVCVUc7CiAKQEAgLTk5Nyw3ICsxMDAwLDE0IEBACiAJc3Bpbl9sb2NrX2luaXQoJmkyYy0+bG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaTJjLT53YWl0KTsKIAotCXNwcmludGYoaTJjLT5hZGFwLm5hbWUsICJweGFfaTJjLWkyYy4ldSIsIGRldi0+aWQpOworCS8qCisJICogSWYgImRldi0+aWQiIGlzIG5lZ2F0aXZlIHdlIGNvbnNpZGVyIGl0IGFzIHplcm8uCisJICogVGhlIHJlYXNvbiB0byBkbyBzbyBpcyB0byBhdm9pZCBzeXNmcyBuYW1lcyB0aGF0IG9ubHkgbWFrZQorCSAqIHNlbnNlIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGFkYXB0ZXJzLgorCSAqLworCWkyYy0+YWRhcC5uciA9IGRldi0+aWQgIT0gLTEgPyBkZXYtPmlkIDogMDsKKwlzbnByaW50ZihpMmMtPmFkYXAubmFtZSwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSwgInB4YV9pMmMtaTJjLiV1IiwKKwkJIGkyYy0+YWRhcC5ucik7CiAKIAlpMmMtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiSTJDQ0xLIik7CiAJaWYgKElTX0VSUihpMmMtPmNsaykpIHsKQEAgLTEwNDgsMTMgKzEwNTgsNiBAQAogCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7CiAJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKLQkvKgotCSAqIElmICJkZXYtPmlkIiBpcyBuZWdhdGl2ZSB3ZSBjb25zaWRlciBpdCBhcyB6ZXJvLgotCSAqIFRoZSByZWFzb24gdG8gZG8gc28gaXMgdG8gYXZvaWQgc3lzZnMgbmFtZXMgdGhhdCBvbmx5IG1ha2UKLQkgKiBzZW5zZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBhZGFwdGVycy4KLQkgKi8KLQlpMmMtPmFkYXAubnIgPSBkZXYtPmlkICE9IC0xID8gZGV2LT5pZCA6IDA7Ci0KIAlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiSTJDOiBGYWlsZWQgdG8gYWRkIGJ1c1xuIik7CkBAIC0xMDc4LDYgKzEwODEsNyBAQAogZXJlcWlycToKIAljbGtfZGlzYWJsZShpMmMtPmNsayk7CiAJaTJjX3B4YV9kaXNhYmxlKGRldik7CisJaW91bm1hcChpMmMtPnJlZ19iYXNlKTsKIGVyZW1hcDoKIAljbGtfcHV0KGkyYy0+Y2xrKTsKIGVjbGs6CkBAIC0xMDg3LDcgKzEwOTEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaTJjX3B4YV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgaTJjX3B4YV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBweGFfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCkBAIC0xMTAxLDYgKzExMDUsNyBAQAogCWNsa19wdXQoaTJjLT5jbGspOwogCWkyY19weGFfZGlzYWJsZShkZXYpOwogCisJaW91bm1hcChpMmMtPnJlZ19iYXNlKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oaTJjLT5pb2Jhc2UsIGkyYy0+aW9zaXplKTsKIAlrZnJlZShpMmMpOwogCkBAIC0xMTA5LDkgKzExMTQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTJjX3B4YV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGkyY19weGFfcHJvYmUsCi0JLnJlbW92ZQkJPSBpMmNfcHhhX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGkyY19weGFfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAicHhhMnh4LWkyYyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xMTIwLDkgKzExMjYsOSBAQAogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmkyY19weGFfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgaTJjX2FkYXBfcHhhX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpMmNfYWRhcF9weGFfZXhpdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpMmNfcHhhX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYwppbmRleCBjYjlhYmU3Li5iMWMwNTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRpbnktdXNiLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jCkBAIC0xMzEsMTEgKzEzMSwxNSBAQAogCiAvKiAtLS0tLSBiZWdpbiBvZiB1c2IgbGF5ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBUaGUgdXNiIGkyYyBpbnRlcmZhY2UgdXNlcyBhIHZpZC9waWQgcGFpciBkb25hdGVkIGJ5ICovCi0vKiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwgTHRkLiAqLworLyoKKyAqIEluaXRpYWxseSB0aGUgdXNiIGkyYyBpbnRlcmZhY2UgdXNlcyBhIHZpZC9waWQgcGFpciBkb25hdGVkIGJ5CisgKiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwgTHRkLiwgbGF0ZXIgYSBwYWlyIHdhcworICogYm91Z2h0IGZyb20gRVpQcm90b3R5cGVzCisgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpMmNfdGlueV91c2JfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKDB4MDQwMywgMHhjNjMxKSB9LAotCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJeyBVU0JfREVWSUNFKDB4MDQwMywgMHhjNjMxKSB9LCAgIC8qIEZUREkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxYzQwLCAweDA1MzQpIH0sICAgLyogRVpQcm90b3R5cGVzICovCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaTJjX3RpbnlfdXNiX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmluZGV4IGIyMTU5M2YuLjJkYTJlZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpAQCAtOTMsNiArOTMsNyBAQAogCiBjb25maWcgVFBTNjUwMTAKIAl0cmlzdGF0ZSAiVFBTNjUwMXggUG93ZXIgTWFuYWdlbWVudCBjaGlwcyIKKwlkZXBlbmRzIG9uIEhBVkVfR1BJT19MSUIKIAlkZWZhdWx0IHkgaWYgTUFDSF9PTUFQX0gyIHx8IE1BQ0hfT01BUF9IMyB8fCBNQUNIX09NQVBfT1NLCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBUUFM2NTAxeCBzZXJpZXMgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUKaW5kZXggNTAxZjAwYy4uZTQ3YWNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUKQEAgLTEsNiArMSwxMyBAQAogIwogIyBNYWtlZmlsZSBmb3IgbWlzY2VsbGFuZW91cyBJMkMgY2hpcCBkcml2ZXJzLgogIworIyBUaGluayB0d2ljZSBiZWZvcmUgeW91IGFkZCBhIG5ldyBkcml2ZXIgdG8gdGhpcyBkaXJlY3RvcnkuCisjIERldmljZSBkcml2ZXJzIGFyZSBiZXR0ZXIgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgdGhleQorIyBpbXBsZW1lbnQgcmF0aGVyIHRoYW4gdG8gdGhlIGJ1cyB0aGV5IGFyZSBjb25uZWN0ZWQgdG8uIEluIHBhcnRpY3VsYXI6CisjICogSGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwIGRyaXZlcnMgZ28gdG8gZHJpdmVycy9od21vbgorIyAqIFJUQyBjaGlwIGRyaXZlcnMgZ28gdG8gZHJpdmVycy9ydGMKKyMgKiBJL08gZXhwYW5kZXIgZHJpdmVycyBnbyB0byBkcml2ZXJzL2dwaW8KKyMKIAogb2JqLSQoQ09ORklHX0RTMTY4MikJCSs9IGRzMTY4Mi5vCiBvYmotJChDT05GSUdfU0VOU09SU19FRVBST00pCSs9IGVlcHJvbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYwppbmRleCA0MTU0YTkxLi5iNjdmNjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKQEAgLTMwLDkgKzMwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2kyYy90cHM2NTAxMC5oPgogCisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjZGVmaW5lCURSSVZFUl9WRVJTSU9OCSIyIE1heSAyMDA1IgpAQCAtODQsNyArODgsOSBAQAogCXU4CQkJY2hnc3RhdHVzLCByZWdzdGF0dXMsIGNoZ2NvbmY7CiAJdTgJCQlubWFzazEsIG5tYXNrMjsKIAotCS8qIG5vdCBjdXJyZW50bHkgdHJhY2tpbmcgR1BJTyBzdGF0ZSAqLworCXU4CQkJb3V0bWFzazsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqbGVkczsKIH07CiAKICNkZWZpbmUJUE9XRVJfUE9MTF9ERUxBWQltc2Vjc190b19qaWZmaWVzKDUwMDApCkBAIC00NDksMTIgKzQ1NSw3MiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBvZmZzZXRzIDAuLjMgPT0gR1BJTzEuLkdQSU80CisgKiBvZmZzZXRzIDQuLjUgPT0gTEVEMS9uUEcsIExFRDIgKHdlIHNldCBvbmUgb2YgdGhlIG5vbi1CTElOSyBtb2RlcykKKyAqLworc3RhdGljIHZvaWQKK3RwczY1MDEwX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWlmIChvZmZzZXQgPCA0KQorCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUob2Zmc2V0ICsgMSwgdmFsdWUpOworCWVsc2UKKwkJdHBzNjUwMTBfc2V0X2xlZChvZmZzZXQgLSAzLCB2YWx1ZSA/IE9OIDogT0ZGKTsKK30KKworc3RhdGljIGludAordHBzNjUwMTBfb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCS8qIEdQSU9zIG1heSBiZSBpbnB1dC1vbmx5ICovCisJaWYgKG9mZnNldCA8IDQpIHsKKwkJc3RydWN0IHRwczY1MDEwCQkqdHBzOworCisJCXRwcyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgdHBzNjUwMTAsIGNoaXApOworCQlpZiAoISh0cHMtPm91dG1hc2sgJiAoMSA8PCBvZmZzZXQpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUob2Zmc2V0ICsgMSwgdmFsdWUpOworCX0gZWxzZQorCQl0cHM2NTAxMF9zZXRfbGVkKG9mZnNldCAtIDMsIHZhbHVlID8gT04gOiBPRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUwMTBfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCWludAkJCXZhbHVlOworCXN0cnVjdCB0cHM2NTAxMAkJKnRwczsKKworCXRwcyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgdHBzNjUwMTAsIGNoaXApOworCisJaWYgKG9mZnNldCA8IDQpIHsKKwkJdmFsdWUgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEodHBzLT5jbGllbnQsIFRQU19ERUZHUElPKTsKKwkJaWYgKHZhbHVlIDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAodmFsdWUgJiAoMSA8PCAob2Zmc2V0ICsgNCkpKQkvKiBvdXRwdXQgKi8KKwkJCXJldHVybiAhKHZhbHVlICYgKDEgPDwgb2Zmc2V0KSk7CisJCWVsc2UJCQkJCS8qIGlucHV0ICovCisJCQlyZXR1cm4gKHZhbHVlICYgKDEgPDwgb2Zmc2V0KSk7CisJfQorCisJLyogUkVWSVNJVCB3ZSAqY291bGQqIHJlcG9ydCBMRUQxL25QRyBhbmQgTEVEMiBzdGF0ZSAuLi4gKi8KKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgc3RydWN0IHRwczY1MDEwICp0aGVfdHBzOwogCiBzdGF0aWMgaW50IF9fZXhpdCB0cHM2NTAxMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgdHBzNjUwMTAJCSp0cHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdHBzNjUwMTBfYm9hcmQJKmJvYXJkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCWlmIChib2FyZCAmJiBib2FyZC0+dGVhcmRvd24pIHsKKwkJaW50IHN0YXR1cyA9IGJvYXJkLT50ZWFyZG93bihjbGllbnQsIGJvYXJkLT5jb250ZXh0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImJvYXJkICVzICVzIGVyciAlZFxuIiwKKwkJCQkidGVhcmRvd24iLCBjbGllbnQtPm5hbWUsIHN0YXR1cyk7CisJfQogCWlmIChjbGllbnQtPmlycSA+IDApCiAJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCB0cHMpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnRwcy0+d29yayk7CkBAIC00NjksNiArNTM1LDcgQEAKIHsKIAlzdHJ1Y3QgdHBzNjUwMTAJCSp0cHM7CiAJaW50CQkJc3RhdHVzOworCXN0cnVjdCB0cHM2NTAxMF9ib2FyZAkqYm9hcmQgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKHRoZV90cHMpIHsKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJvbmx5IG9uZSB0cHM2NTAxeCBjaGlwIGFsbG93ZWRcbiIpOwpAQCAtNTc3LDYgKzY0NCwzOCBAQAogCiAJdHBzLT5maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShEUklWRVJfTkFNRSwgU19JUlVHTywgTlVMTCwKIAkJCQl0cHMsIERFQlVHX0ZPUFMpOworCisJLyogb3B0aW9uYWxseSByZWdpc3RlciBHUElPcyAqLworCWlmIChib2FyZCAmJiBib2FyZC0+YmFzZSA+IDApIHsKKwkJdHBzLT5vdXRtYXNrID0gYm9hcmQtPm91dG1hc2s7CisKKwkJdHBzLT5jaGlwLmxhYmVsID0gY2xpZW50LT5uYW1lOworCisJCXRwcy0+Y2hpcC5zZXQgPSB0cHM2NTAxMF9ncGlvX3NldDsKKwkJdHBzLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSB0cHM2NTAxMF9vdXRwdXQ7CisKKwkJLyogTk9URTogIG9ubHkgcGFydGlhbCBzdXBwb3J0IGZvciBpbnB1dHM7IG55ZXQgSVJRcyAqLworCQl0cHMtPmNoaXAuZ2V0ID0gdHBzNjUwMTBfZ3Bpb19nZXQ7CisKKwkJdHBzLT5jaGlwLmJhc2UgPSBib2FyZC0+YmFzZTsKKwkJdHBzLT5jaGlwLm5ncGlvID0gNjsKKwkJdHBzLT5jaGlwLmNhbl9zbGVlcCA9IDE7CisKKwkJc3RhdHVzID0gZ3Bpb2NoaXBfYWRkKCZ0cHMtPmNoaXApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiY2FuJ3QgYWRkIGdwaW9jaGlwLCBlcnIgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCWVsc2UgaWYgKGJvYXJkLT5zZXR1cCkgeworCQkJc3RhdHVzID0gYm9hcmQtPnNldHVwKGNsaWVudCwgYm9hcmQtPmNvbnRleHQpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwKKwkJCQkJImJvYXJkICVzICVzIGVyciAlZFxuIiwKKwkJCQkJInNldHVwIiwgY2xpZW50LT5uYW1lLCBzdGF0dXMpOworCQkJCXN0YXR1cyA9IDA7CisJCQl9CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIGZhaWwxOgogCWtmcmVlKHRwcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCA5NmRhMjJlLi5lMTg2ZGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTM1LDggKzM1LDggQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlICJpMmMtY29yZS5oIgogCkBAIC05MCwxMiArOTAsMTYgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBpMmNfZHJpdmVyCSpkcml2ZXIgPSB0b19pMmNfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlpbnQgc3RhdHVzOwogCiAJaWYgKCFkcml2ZXItPnByb2JlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAljbGllbnQtPmRyaXZlciA9IGRyaXZlcjsKIAlkZXZfZGJnKGRldiwgInByb2JlXG4iKTsKLQlyZXR1cm4gZHJpdmVyLT5wcm9iZShjbGllbnQpOworCXN0YXR1cyA9IGRyaXZlci0+cHJvYmUoY2xpZW50KTsKKwlpZiAoc3RhdHVzKQorCQljbGllbnQtPmRyaXZlciA9IE5VTEw7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBpMmNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC00ODUsOCArNDg5LDggQEAKICAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGRlY2xhcmUgYW4gSTJDIGFkYXB0ZXIgd2hlbiBpdHMgYnVzIG51bWJlcgotICogbWF0dGVycy4gIEV4YW1wbGU6IGZvciBJMkMgYWRhcHRlcnMgZnJvbSBzeXN0ZW0tb24tY2hpcCBDUFVzLCBvcgotICogb3RoZXJ3aXNlIGJ1aWx0IGluIHRvIHRoZSBzeXN0ZW0ncyBtYWluYm9hcmQsIGFuZCB3aGVyZSBpMmNfYm9hcmRfaW5mbworICogbWF0dGVycy4gIEZvciBleGFtcGxlLCB1c2UgaXQgZm9yIEkyQyBhZGFwdGVycyBmcm9tIHN5c3RlbS1vbi1jaGlwIENQVXMsCisgKiBvciBvdGhlcndpc2UgYnVpbHQgaW4gdG8gdGhlIHN5c3RlbSdzIG1haW5ib2FyZCwgYW5kIHdoZXJlIGkyY19ib2FyZF9pbmZvCiAgKiBpcyB1c2VkIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBJMkMgZGV2aWNlcy4KICAqCiAgKiBJZiBubyBkZXZpY2VzIGhhdmUgcHJlLWJlZW4gZGVjbGFyZWQgZm9yIHRoaXMgYnVzLCB0aGVuIGJlIHN1cmUgdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IGRmNzUyZTYuLjg3NTMyMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNTAsNyArNTAsNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLgogCi0JICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9pZGUudHh0Pi4KKwkgIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0Pi4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIApAQCAtNzcsNyArNzcsNyBAQAogCSAgVXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IGxhcmdlICg+NTQwIE1CKSBJREUgZGlza3MsIG11bHRpcGxlCiAJICBpbnRlcmZhY2VzLCB3aGF0IHRvIGRvIGlmIEFUQS9JREUgZGV2aWNlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkKIAkgIGRldGVjdGVkLCBzb3VuZCBjYXJkIEFUQS9JREUgcG9ydHMsIG1vZHVsZSBzdXBwb3J0LCBhbmQgb3RoZXIKLQkgIHRvcGljcywgaXMgY29udGFpbmVkIGluIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlLnR4dD4uIEZvciBkZXRhaWxlZAorCSAgdG9waWNzLCBpcyBjb250YWluZWQgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dD4uIEZvciBkZXRhaWxlZAogCSAgaW5mb3JtYXRpb24gYWJvdXQgaGFyZCBkcml2ZXMsIGNvbnN1bHQgdGhlIERpc2stSE9XVE8gYW5kIHRoZQogCSAgTXVsdGktRGlzay1IT1dUTywgYXZhaWxhYmxlIGZyb20KIAkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCkBAIC04Nyw3ICs4Nyw3IEBACiAJICA8ZnRwOi8vaWJpYmxpby5vcmcvcHViL0xpbnV4L3N5c3RlbS9oYXJkd2FyZS8+LgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlIGFuZCByZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS50eHQ+LiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS1tb2QuCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0Pi4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtbW9kLgogCSAgRG8gbm90IGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgaWYgeW91ciByb290IGZpbGUgc3lzdGVtICh0aGUKIAkgIG9uZSBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkgLykgaXMgbG9jYXRlZCBvbiBhbiBJREUgZGV2aWNlLgogCkBAIC05OCw3ICs5OCw3IEBACiAKIGlmIEJMS19ERVZfSURFCiAKLWNvbW1lbnQgIlBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcyIKK2NvbW1lbnQgIlBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMiCiAKIGNvbmZpZyBCTEtfREVWX0lERV9TQVRBCiAJYm9vbCAiU3VwcG9ydCBmb3IgU0FUQSAoZGVwcmVjYXRlZDsgY29uZmxpY3RzIHdpdGggbGliYXRhIFNBVEEgZHJpdmVyKSIKQEAgLTEyMiwyNCArMTIyLDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEJMS19ERVZfSERfSURFCi0JYm9vbCAiVXNlIG9sZCBkaXNrLW9ubHkgZHJpdmVyIG9uIHByaW1hcnkgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gKFg4NiB8fCBTSF9NUEMxMjExKQotCS0tLWhlbHAtLS0KLQkgIFRoZXJlIGFyZSB0d28gZHJpdmVycyBmb3IgTUZNL1JMTC9JREUgZGlza3MuICBNb3N0IHBlb3BsZSB1c2UganVzdAotCSAgdGhlIG5ldyBlbmhhbmNlZCBkcml2ZXIgYnkgaXRzZWxmLiAgVGhpcyBvcHRpb24gaG93ZXZlciBpbnN0YWxscyB0aGUKLQkgIG9sZCBoYXJkIGRpc2sgZHJpdmVyIHRvIGNvbnRyb2wgdGhlIHByaW1hcnkgSURFL2Rpc2sgaW50ZXJmYWNlIGluCi0JICB0aGUgc3lzdGVtLCBsZWF2aW5nIHRoZSBuZXcgZW5oYW5jZWQgSURFIGRyaXZlciB0byB0YWtlIGNhcmUgb2Ygb25seQotCSAgdGhlIDJuZC8zcmQvNHRoIElERSBpbnRlcmZhY2VzLiAgRG9pbmcgdGhpcyB3aWxsIHByZXZlbnQgeW91IGZyb20KLQkgIGhhdmluZyBhbiBJREUvQVRBUEkgQ0QtUk9NIG9yIHRhcGUgZHJpdmUgY29ubmVjdGVkIHRvIHRoZSBwcmltYXJ5Ci0JICBJREUgaW50ZXJmYWNlLiAgQ2hvb3NpbmcgdGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBmb3Igb2xkZXIgc3lzdGVtcwotCSAgd2hpY2ggaGF2ZSBNRk0vUkxML0VTREkgY29udHJvbGxlcitkcml2ZXMgYXQgdGhlIHByaW1hcnkgcG9ydAotCSAgYWRkcmVzcyAoMHgxZjApLCBhbG9uZyB3aXRoIElERSBkcml2ZXMgYXQgdGhlIHNlY29uZGFyeS8zcmQvNHRoIHBvcnQKLQkgIGFkZHJlc3Nlcy4KLQotCSAgTm9ybWFsbHksIGp1c3Qgc2F5IE4gaGVyZTsgeW91IHdpbGwgdGhlbiB1c2UgdGhlIG5ldyBkcml2ZXIgZm9yIGFsbAotCSAgNCBpbnRlcmZhY2VzLgotCiBjb25maWcgQkxLX0RFVl9JREVESVNLCiAJdHJpc3RhdGUgIkluY2x1ZGUgSURFL0FUQS0yIERJU0sgc3VwcG9ydCIKIAktLS1oZWxwLS0tCkBAIC0yMzUsOCArMjE3LDggQEAKIAkgIGFsb25nIHdpdGggb3RoZXIgSURFIGRldmljZXMsIGFzICJoZGIiIG9yICJoZGMiLCBvciBzb21ldGhpbmcKIAkgIHNpbWlsYXIsIGFuZCB3aWxsIGJlIG1hcHBlZCB0byBhIGNoYXJhY3RlciBkZXZpY2Ugc3VjaCBhcyAiaHQwIgogCSAgKGNoZWNrIHRoZSBib290IG1lc3NhZ2VzIHdpdGggZG1lc2cpLiAgQmUgc3VyZSB0byBjb25zdWx0IHRoZQotCSAgPGZpbGU6ZHJpdmVycy9pZGUvaWRlLXRhcGUuYz4gYW5kIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlLnR4dD4gZmlsZXMKLQkgIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4KKwkgIDxmaWxlOmRyaXZlcnMvaWRlL2lkZS10YXBlLmM+IGFuZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0PgorCSAgZmlsZXMgZm9yIHVzYWdlIGluZm9ybWF0aW9uLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtdGFwZS4KQEAgLTMyNSw2ICszMDcsNyBAQAogCiBjb25maWcgSURFX0dFTkVSSUMKIAl0cmlzdGF0ZSAiZ2VuZXJpYy9kZWZhdWx0IElERSBjaGlwc2V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBTFBIQSB8fCBYODYgfHwgSUE2NCB8fCBNMzJSIHx8IE1JUFMgfHwgUFBDMzIKIAloZWxwCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0zNTgsNyArMzQxLDcgQEAKIAogCSAgVGhlIENNRDY0MCBjaGlwIGlzIGFsc28gdXNlZCBvbiBhZGQtaW4gY2FyZHMgYnkgQWNjdWxvZ2ljLCBhbmQgb24KIAkgIHRoZSAiQ1NBLTY0MDBFIFBDSSB0byBJREUgY29udHJvbGxlciIgdGhhdCBzb21lIHBlb3BsZSBoYXZlLiBGb3IKLQkgIGRldGFpbHMsIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9pZGUudHh0Pi4KKwkgIGRldGFpbHMsIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dD4uCiAKIGNvbmZpZyBCTEtfREVWX0NNRDY0MF9FTkhBTkNFRAogCWJvb2wgIkNNRDY0MCBlbmhhbmNlZCBzdXBwb3J0IgpAQCAtMzY2LDcgKzM0OSw3IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2V0dGluZy9hdXRvdHVuaW5nIFBJTyBtb2RlcyBhbmQKIAkgIHByZWZldGNoIG9uIENNRDY0MCBJREUgaW50ZXJmYWNlcy4gIEZvciBkZXRhaWxzLCByZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS50eHQ+LiBJZiB5b3UgaGF2ZSBhIENNRDY0MCBJREUgaW50ZXJmYWNlCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0Pi4gSWYgeW91IGhhdmUgYSBDTUQ2NDAgSURFIGludGVyZmFjZQogCSAgYW5kIHlvdXIgQklPUyBkb2VzIG5vdCBhbHJlYWR5IGRvIHRoaXMgZm9yIHlvdSwgdGhlbiBzYXkgWSBoZXJlLgogCSAgT3RoZXJ3aXNlIHNheSBOLgogCkBAIC00MTYsMTIgKzM5OSw2IEBACiAJICBUaGlzIGNhbiBpbXByb3ZlIHRoZSB1c2FiaWxpdHkgb2Ygc29tZSBib290IG1hbmFnZXJzIHN1Y2ggYXMgbGlsbwogCSAgd2hlbiBib290aW5nIGZyb20gYSBkcml2ZSBvbiBhbiBvZmYtYm9hcmQgY29udHJvbGxlci4KIAotCSAgSWYgeW91IHNheSBZIGhlcmUsIGFuZCB5b3UgYWN0dWFsbHkgd2FudCB0byByZXZlcnNlIHRoZSBkZXZpY2Ugc2NhbgotCSAgb3JkZXIgYXMgZXhwbGFpbmVkIGFib3ZlLCB5b3UgYWxzbyBuZWVkIHRvIGlzc3VlIHRoZSBrZXJuZWwgY29tbWFuZAotCSAgbGluZSBvcHRpb24gImlkZT1yZXZlcnNlIi4gKFRyeSAibWFuIGJvb3RwYXJhbSIgb3Igc2VlIHRoZQotCSAgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIGJvb3QgbG9hZGVyIChsaWxvIG9yIGxvYWRsaW4pIGFib3V0IGhvdyB0bwotCSAgcGFzcyBvcHRpb25zIHRvIHRoZSBrZXJuZWwgYXQgYm9vdCB0aW1lLikKLQogCSAgTm90ZSB0aGF0LCBpZiB5b3UgZG8gdGhpcywgdGhlIG9yZGVyIG9mIHRoZSBoZCogZGV2aWNlcyB3aWxsIGJlCiAJICByZWFycmFuZ2VkIHdoaWNoIG1heSByZXF1aXJlIG1vZGlmaWNhdGlvbiBvZiBmc3RhYiBhbmQgb3RoZXIgZmlsZXMuCiAKQEAgLTYxNSw4ICs1OTIsNyBAQAogCSAgcmVmZXJlbmNlIHRvIGRldmljZSAweDgwLiBUaGUgb3RoZXIgc29sdXRpb24gaXMgdG8gc2F5IFkgdG8gIkJvb3QKIAkgIG9mZi1ib2FyZCBjaGlwc2V0cyBmaXJzdCBzdXBwb3J0IiAoQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQpIHVubGVzcwogCSAgeW91ciBtb3RoZXIgYm9hcmQgaGFzIHRoZSBjaGlwc2V0IG5hdGl2ZWx5IG1vdW50ZWQuIFJlZ2FyZGxlc3Mgb25lCi0JICBzaG91bGQgdXNlIHRoZSBmb3JlIG1lbnRpb25lZCBvcHRpb24gYW5kIGNhbGwgYXQgTElMTyBvciBpbmNsdWRlCi0JICAiaWRlPXJldmVyc2UiIGluIExJTE8ncyBhcHBlbmQtbGluZS4KKwkgIHNob3VsZCB1c2UgdGhlIGZvcmUgbWVudGlvbmVkIG9wdGlvbiBhbmQgY2FsbCBhdCBMSUxPLgogCiAJICBUaGlzIGRyaXZlciByZXF1aXJlcyBkeW5hbWljIHR1bmluZyBvZiB0aGUgY2hpcHNldCBkdXJpbmcgdGhlCiAJICBpZGUtcHJvYmUgYXQgYm9vdC4gSXQgaXMgcmVwb3J0ZWQgdG8gc3VwcG9ydCBEVkQgSUkgZHJpdmVzLCBieSB0aGUKQEAgLTEwNDksNyArMTAyNSw3IEBACiBlbmRjaG9pY2UKIAogIyBubyBpc2EgLT4gbm8gdmxiCi1pZiBJU0EKK2lmIElTQSAmJiAoQUxQSEEgfHwgWDg2IHx8IE1JUFMpCiAKIGNvbW1lbnQgIk90aGVyIElERSBjaGlwc2V0cyBzdXBwb3J0IgogY29tbWVudCAiTm90ZTogbW9zdCBvZiB0aGVzZSBhbHNvIHJlcXVpcmUgc3BlY2lhbCBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzIgpAQCAtMTA2MCw4ICsxMDM2LDggQEAKIAkgIENlcnRhaW4gb2xkZXIgY2hpcHNldHMsIGluY2x1ZGluZyB0aGUgVGVrcmFtIDY5MENELCB1c2UgYSBzaW5nbGUgc2V0CiAJICBvZiBJL08gcG9ydHMgYXQgMHgxZjAgdG8gY29udHJvbCB1cCB0byBmb3VyIGRyaXZlcywgaW5zdGVhZCBvZiB0aGUKIAkgIGN1c3RvbWFyeSB0d28gZHJpdmVzIHBlciBwb3J0LiBTdXBwb3J0IGZvciB0aGlzIGNhbiBiZSBlbmFibGVkIGF0Ci0JICBydW50aW1lIHVzaW5nIHRoZSAiaWRlMD1mb3VyIiBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIgaWYgeW91IHNheSBZCi0JICBoZXJlLgorCSAgcnVudGltZSB1c2luZyB0aGUgImlkZS00ZHJpdmVzLnByb2JlIiBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIgaWYgeW91CisJICBzYXkgWSBoZXJlLgogCiBjb25maWcgQkxLX0RFVl9BTEkxNFhYCiAJdHJpc3RhdGUgIkFMSSBNMTR4eCBzdXBwb3J0IgpAQCAtMTA2OSw5ICsxMDQ1LDkgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgImFsaTE0eHgucHJvYmUiIGtlcm5lbAogCSAgYm9vdCBwYXJhbWV0ZXIuICBJdCBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBzZWNvbmRhcnkgSURFIGludGVyZmFjZQogCSAgb2YgdGhlIEFMSSBNMTQzOS8xNDQzLzE0NDUvMTQ4Ny8xNDg5IGNoaXBzZXRzLCBhbmQgcGVybWl0cyBmYXN0ZXIKLQkgIEkvTyBzcGVlZHMgdG8gYmUgc2V0IGFzIHdlbGwuICBTZWUgdGhlIGZpbGVzCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS50eHQ+IGFuZCA8ZmlsZTpkcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jPgotCSAgZm9yIG1vcmUgaW5mby4KKwkgIEkvTyBzcGVlZHMgdG8gYmUgc2V0IGFzIHdlbGwuCisJICBTZWUgdGhlIGZpbGVzIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlL2lkZS50eHQ+IGFuZAorCSAgPGZpbGU6ZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYz4gZm9yIG1vcmUgaW5mby4KIAogY29uZmlnIEJMS19ERVZfRFRDMjI3OAogCXRyaXN0YXRlICJEVEMtMjI3OCBzdXBwb3J0IgpAQCAtMTA3OSw3ICsxMDU1LDcgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgImR0YzIyNzgucHJvYmUiIGtlcm5lbAogCSAgYm9vdCBwYXJhbWV0ZXIuIEl0IGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHNlY29uZGFyeSBJREUgaW50ZXJmYWNlCiAJICBvZiB0aGUgRFRDLTIyNzggY2FyZCwgYW5kIHBlcm1pdHMgZmFzdGVyIEkvTyBzcGVlZHMgdG8gYmUgc2V0IGFzCi0JICB3ZWxsLiBTZWUgdGhlIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlLnR4dD4gYW5kCisJICB3ZWxsLiBTZWUgdGhlIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlL2lkZS50eHQ+IGFuZAogCSAgPGZpbGU6ZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYz4gZmlsZXMgZm9yIG1vcmUgaW5mby4KIAogY29uZmlnIEJMS19ERVZfSFQ2NTYwQgpAQCAtMTA4OCw3ICsxMDY0LDcgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgImh0NjU2MGIucHJvYmUiIGtlcm5lbAogCSAgYm9vdCBwYXJhbWV0ZXIuIEl0IGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHNlY29uZGFyeSBJREUgaW50ZXJmYWNlCiAJICBvZiB0aGUgSG9sdGVrIGNhcmQsIGFuZCBwZXJtaXRzIGZhc3RlciBJL08gc3BlZWRzIHRvIGJlIHNldCBhcyB3ZWxsLgotCSAgU2VlIHRoZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS50eHQ+IGFuZAorCSAgU2VlIHRoZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0PiBhbmQKIAkgIDxmaWxlOmRyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmM+IGZpbGVzIGZvciBtb3JlIGluZm8uCiAKIGNvbmZpZyBCTEtfREVWX1FENjVYWApAQCAtMTA5Niw3ICsxMDcyLDcgQEAKIAloZWxwCiAJICBUaGlzIGRyaXZlciBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgdXNpbmcgdGhlICJxZDY1eHgucHJvYmUiIGtlcm5lbAogCSAgYm9vdCBwYXJhbWV0ZXIuICBJdCBwZXJtaXRzIGZhc3RlciBJL08gc3BlZWRzIHRvIGJlIHNldC4gIFNlZSB0aGUKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlLnR4dD4gYW5kIDxmaWxlOmRyaXZlcnMvaWRlL2xlZ2FjeS9xZDY1eHguYz4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlL2lkZS50eHQ+IGFuZCA8ZmlsZTpkcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmM+CiAJICBmb3IgbW9yZSBpbmZvLgogCiBjb25maWcgQkxLX0RFVl9VTUM4NjcyCkBAIC0xMTA1LDcgKzEwODEsNyBAQAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAidW1jODY3Mi5wcm9iZSIga2VybmVsCiAJICBib290IHBhcmFtZXRlci4gSXQgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgc2Vjb25kYXJ5IElERSBpbnRlcmZhY2UKIAkgIG9mIHRoZSBVTUMtODY3MiwgYW5kIHBlcm1pdHMgZmFzdGVyIEkvTyBzcGVlZHMgdG8gYmUgc2V0IGFzIHdlbGwuCi0JICBTZWUgdGhlIGZpbGVzIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlLnR4dD4gYW5kCisJICBTZWUgdGhlIGZpbGVzIDxmaWxlOkRvY3VtZW50YXRpb24vaWRlL2lkZS50eHQ+IGFuZAogCSAgPGZpbGU6ZHJpdmVycy9pZGUvbGVnYWN5L3VtYzg2NzIuYz4gZm9yIG1vcmUgaW5mby4KIAogZW5kaWYKQEAgLTExMTQsMTQgKzEwOTAsMTAgQEAKIAlkZWZfYm9vbCBCTEtfREVWX0lERURNQV9TRkYgfHwgQkxLX0RFVl9JREVETUFfUE1BQyB8fCBcCiAJCSBCTEtfREVWX0lERURNQV9JQ1MgfHwgQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCiAKLWNvbmZpZyBJREVfQVJDSF9PQlNPTEVURV9JTklUCi0JZGVmX2Jvb2wgQUxQSEEgfHwgKEFSTSAmJiAhQVJDSF9MNzIwMCkgfHwgQkxBQ0tGSU4gfHwgWDg2IHx8IElBNjQgfHwgTTMyUiB8fCBNSVBTIHx8IFBBUklTQyB8fCBQUEMgfHwgKFNVUEVSSDY0ICYmIEJMS19ERVZfSURFUENJKSB8fCBTUEFSQwotCiBlbmRpZgogCiBjb25maWcgQkxLX0RFVl9IRF9PTkxZCiAJYm9vbCAiT2xkIGhhcmQgZGlzayAoTUZNL1JMTC9JREUpIGRyaXZlciIKLQlkZXBlbmRzIG9uIEJMS19ERVZfSURFPW4KIAloZWxwCiAJICBUaGVyZSBhcmUgdHdvIGRyaXZlcnMgZm9yIE1GTS9STEwvSURFIGhhcmQgZGlza3MuIE1vc3QgcGVvcGxlIHVzZQogCSAgdGhlIG5ld2VyIGVuaGFuY2VkIGRyaXZlciwgYnV0IHRoaXMgb2xkIG9uZSBpcyBzdGlsbCBhcm91bmQgZm9yIHR3bwpAQCAtMTEzMywxMiArMTEwNSwxNiBAQAogCSAgZm9yIHN5c3RlbXMgd2l0aCBvbmx5IG9sZGVyIE1GTS9STEwvRVNESSBkcml2ZXMuIENob29zaW5nIHRoZSBvbGQKIAkgIGRyaXZlciBjYW4gc2F2ZSAxMyBLQiBvciBzbyBvZiBrZXJuZWwgbWVtb3J5LgogCisJICBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBkcml2ZXIgdG9nZXRoZXIgd2l0aCB0aGUgbmV3IG9uZSB5b3UgaGF2ZQorCSAgdG8gdXNlICJoZGE9bm9wcm9iZSBoZGI9bm9wcm9iZSIga2VybmVsIHBhcmFtZXRlcnMgdG8gcHJldmVudCB0aGUgbmV3CisJICBkcml2ZXIgZnJvbSBwcm9iaW5nIHRoZSBwcmltYXJ5IGludGVyZmFjZS4KKwogCSAgSWYgeW91IGFyZSB1bnN1cmUsIHRoZW4ganVzdCBjaG9vc2UgdGhlIEVuaGFuY2VkIElERS9NRk0vUkxMIGRyaXZlcgogCSAgaW5zdGVhZCBvZiB0aGlzIG9uZS4gRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24sIHJlYWQgdGhlCiAJICBEaXNrLUhPV1RPLCBhdmFpbGFibGUgZnJvbQogCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KIAogY29uZmlnIEJMS19ERVZfSEQKLQlkZWZfYm9vbCBCTEtfREVWX0hEX0lERSB8fCBCTEtfREVWX0hEX09OTFkKKwlkZWZfYm9vbCBCTEtfREVWX0hEX09OTFkKIAogZW5kaWYgIyBJREUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggYTRhNDMyM2IuLjU3MTU0NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWRlL01ha2VmaWxlCkBAIC0zNiw5ICszNiw5IEBACiBlbmRpZgogCiBvYmotJChDT05GSUdfQkxLX0RFVl9JREUpCQkrPSBjcmlzLyBwcGMvCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREVQTlApCQkrPSBpZGUtcG5wLm8KIG9iai0kKENPTkZJR19JREVfSDgzMDApCQkJKz0gaDgzMDAvCiBvYmotJChDT05GSUdfSURFX0dFTkVSSUMpCQkrPSBpZGUtZ2VuZXJpYy5vCitvYmotJChDT05GSUdfQkxLX0RFVl9JREVQTlApCQkrPSBpZGUtcG5wLm8KIAogaWRlLWNkX21vZC15ICs9IGlkZS1jZC5vIGlkZS1jZF9pb2N0bC5vIGlkZS1jZF92ZXJib3NlLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL2Jhc3QtaWRlLmMgYi9kcml2ZXJzL2lkZS9hcm0vYmFzdC1pZGUuYwppbmRleCAxNjFkMzBjLi5lYzQ2YzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vYmFzdC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vYmFzdC1pZGUuYwpAQCAtNDEsMTUgKzQxLDE1IEBACiAJaHcuaW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9IGF1eCArICg2ICogMHgyMCk7CiAJaHcuaXJxID0gaXJxOwogCi0JaHdpZiA9IGlkZV9kZXByZWNhdGVkX2ZpbmRfcG9ydChody5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKKwlod2lmID0gaWRlX2ZpbmRfcG9ydChody5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKIAlpZiAoaHdpZiA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAogCWkgPSBod2lmLT5pbmRleDsKIAogCWlmIChod2lmLT5wcmVzZW50KQotCQlpZGVfdW5yZWdpc3RlcihpLCAwLCAwKTsKLQllbHNlIGlmICghaHdpZi0+aG9sZCkKKwkJaWRlX3VucmVnaXN0ZXIoaSk7CisJZWxzZQogCQlpZGVfaW5pdF9wb3J0X2RhdGEoaHdpZiwgaSk7CiAKIAlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jIGIvZHJpdmVycy9pZGUvYXJtL2lkZV9hcm0uYwppbmRleCA0M2E3MGU5Li5iZTlmZjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jCisrKyBiL2RyaXZlcnMvaWRlL2FybS9pZGVfYXJtLmMKQEAgLTQ2LDMgKzQ2LDUgQEAKIH0KIAogbW9kdWxlX2luaXQoaWRlX2FybV9pbml0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL3BhbG1fYmszNzEwLmMgYi9kcml2ZXJzL2lkZS9hcm0vcGFsbV9iazM3MTAuYwppbmRleCA4ZTFmNmJkLi40NzQxNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vcGFsbV9iazM3MTAuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vcGFsbV9iazM3MTAuYwpAQCAtMzc4LDE1ICszNzgsMTUgQEAKIAlody5pcnEgPSBpcnEtPnN0YXJ0OwogCWh3LmNoaXBzZXQgPSBpZGVfcGFsbTM3MTA7CiAKLQlod2lmID0gaWRlX2RlcHJlY2F0ZWRfZmluZF9wb3J0KGh3LmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0pOworCWh3aWYgPSBpZGVfZmluZF9wb3J0KGh3LmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0pOwogCWlmIChod2lmID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCiAJaSA9IGh3aWYtPmluZGV4OwogCiAJaWYgKGh3aWYtPnByZXNlbnQpCi0JCWlkZV91bnJlZ2lzdGVyKGksIDAsIDApOwotCWVsc2UgaWYgKCFod2lmLT5ob2xkKQorCQlpZGVfdW5yZWdpc3RlcihpKTsKKwllbHNlCiAJCWlkZV9pbml0X3BvcnRfZGF0YShod2lmLCBpKTsKIAogCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FybS9yYXBpZGUuYyBiL2RyaXZlcnMvaWRlL2FybS9yYXBpZGUuYwppbmRleCBlZmJhMDBkLi5iMzBhZGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vcmFwaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jCkBAIC03Niw3ICs3Niw3IEBACiAKIAllY2FyZF9zZXRfZHJ2ZGF0YShlYywgTlVMTCk7CiAKLQlpZGVfdW5yZWdpc3Rlcihod2lmLT5pbmRleCwgMCwgMCk7CisJaWRlX3VucmVnaXN0ZXIoaHdpZi0+aW5kZXgpOwogCiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3Jpcy9pZGUtY3Jpcy5jIGIvZHJpdmVycy9pZGUvY3Jpcy9pZGUtY3Jpcy5jCmluZGV4IGU3OWJmOGYuLjMxMjY2ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NyaXMvaWRlLWNyaXMuYworKysgYi9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMKQEAgLTIyOCw3ICsyMjgsMTAgQEAKIHN0YXRpYyB2b2lkCiBjcmlzX2lkZV9zdGFydF9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBjcmlzX2RtYV9kZXNjcl90eXBlICpkLCBpbnQgZGlyLGludCB0eXBlLGludCBsZW4pCiB7Ci0JcmVnX2F0YV9yd19jdHJsMiBjdHJsMiA9IFJFR19UWVBFX0NPTlYocmVnX2F0YV9yd19jdHJsMiwgaW50LCBJREVfREFUQV9SRUcpOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCXJlZ19hdGFfcndfY3RybDIgY3RybDIgPSBSRUdfVFlQRV9DT05WKHJlZ19hdGFfcndfY3RybDIsIGludCwKKwkJCQkJICAgICAgIGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0pOwogCXJlZ19hdGFfcndfdHJmX2NudCB0cmZfY250ID0gezB9OwogCiAJbXljb250ZXh0LnNhdmVkX2RhdGEgPSAoZG1hX2Rlc2NyX2RhdGEqKXZpcnRfdG9fcGh5cyhkKTsKQEAgLTI2NCw4ICsyNjcsMTIgQEAKIAogc3RhdGljIGludCBjcmlzX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWludCBpbnRyID0gUkVHX1JEX0lOVChhdGEsIHJlZ2lfYXRhLCByX2ludHIpOwotCXJlZ19hdGFfcndfY3RybDIgY3RybDIgPSBSRUdfVFlQRV9DT05WKHJlZ19hdGFfcndfY3RybDIsIGludCwgSURFX0RBVEFfUkVHKTsKKworCXJlZ19hdGFfcndfY3RybDIgY3RybDIgPSBSRUdfVFlQRV9DT05WKHJlZ19hdGFfcndfY3RybDIsIGludCwKKwkJCQkJICAgICAgIGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0pOworCiAJcmV0dXJuIGludHIgJiAoMSA8PCBjdHJsMi5zZWwpID8gMSA6IDA7CiB9CiAKQEAgLTUyMyw3ICs1MzAsOCBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgSU9fU1RBVEUoUl9BVEFfQ1RSTF9EQVRBLCBoYW5kc2gsIGRtYSk7CiAJKlJfQVRBX0NUUkxfREFUQSA9CiAJCWNtZCB8Ci0JCUlPX0ZJRUxEKFJfQVRBX0NUUkxfREFUQSwgZGF0YSwgSURFX0RBVEFfUkVHKSB8CisJCUlPX0ZJRUxEKFJfQVRBX0NUUkxfREFUQSwgZGF0YSwKKwkJCSBkcml2ZS0+aHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSkgfAogCQlJT19TVEFURShSX0FUQV9DVFJMX0RBVEEsIHNyY19kc3QsICBkbWEpICB8CiAJCUlPX1NUQVRFKFJfQVRBX0NUUkxfREFUQSwgbXVsdGksICAgIG9uKSAgIHwKIAkJSU9fU1RBVEUoUl9BVEFfQ1RSTF9EQVRBLCBkbWFfc2l6ZSwgd29yZCk7CkBAIC01NDEsNyArNTQ5LDkgQEAKIHN0YXRpYyBpbnQgY3Jpc19kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWludCBpbnRyID0gKlJfSVJRX01BU0swX1JEOwotCWludCBidXMgPSBJT19FWFRSQUNUKFJfQVRBX0NUUkxfREFUQSwgc2VsLCBJREVfREFUQV9SRUcpOworCWludCBidXMgPSBJT19FWFRSQUNUKFJfQVRBX0NUUkxfREFUQSwgc2VsLAorCQkJICAgICBkcml2ZS0+aHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSk7CisKIAlyZXR1cm4gaW50ciAmICgxIDw8IChidXMgKyBJT19CSVROUihSX0lSUV9NQVNLMF9SRCwgYXRhX2lycTApKSkgPyAxIDogMDsKIH0KIApAQCAtMTA2NywzICsxMDc3LDUgQEAKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9lMTAwX2lkZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jIGIvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMKaW5kZXggNTIwYWVjMC4uNDEwOGVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMKKysrIGIvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCWlkZV9pbml0X3BvcnRfZGF0YShod2lmLCBpbmRleCk7CiAJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOwogCWh3aWZfc2V0dXAoaHdpZik7CisJaHdpZi0+aG9zdF9mbGFncyA9IElERV9IRkxBR19OT19JT18zMkJJVDsKIAlwcmludGsoS0VSTl9JTkZPICJpZGUlZDogSDgvMzAwIGdlbmVyaWMgSURFIGludGVyZmFjZVxuIiwgaW5kZXgpOwogCiAJaWR4WzBdID0gaW5kZXg7CkBAIC0xMjUsMyArMTI2LDUgQEAKIH0KIAogbW9kdWxlX2luaXQoaDgzMDBfaWRlX2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCBlMDdiMTg5Li4wZjZmYjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTcxMCw2ICs3MTAsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRFJJVkVTOyBpKyspIHsKIAkJZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOwogCisJCW1lbXNldChkcml2ZS0+YWNwaWRhdGEsIDAsIHNpemVvZigqZHJpdmUtPmFjcGlkYXRhKSk7CisKIAkJaWYgKCFkcml2ZS0+cHJlc2VudCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IDM1NGM5MWQuLmZlNWFlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC01NDIsNyArNTQyLDggQEAKIAogCQkvKiBwYWNrZXQgY29tbWFuZCAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQkJaHdpZi0+T1VUQlNZTkMoZHJpdmUsIFdJTl9QQUNLRVRDTUQsIElERV9DT01NQU5EX1JFRyk7CisJCWh3aWYtPk9VVEJTWU5DKGRyaXZlLCBXSU5fUEFDS0VUQ01ELAorCQkJICAgICAgIGh3aWYtPmlvX3BvcnRzW0lERV9DT01NQU5EX09GRlNFVF0pOwogCQluZGVsYXkoNDAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKIApAQCAtNjcwLDggKzY3MSw4IEBACiAgKiBhbmQgYXR0ZW1wdCB0byByZWNvdmVyIGlmIHRoZXJlIGFyZSBwcm9ibGVtcy4gIFJldHVybnMgIDAgaWYgZXZlcnl0aGluZydzCiAgKiBvazsgbm9uemVybyBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiB0ZXJtaW5hdGVkLgogICovCi1zdGF0aWMKLWludCBpZGVfY2RfY2hlY2tfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBsZW4sIGludCBpcmVhc29uLCBpbnQgcncpCitzdGF0aWMgaW50IGlkZV9jZF9jaGVja19pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCWludCBsZW4sIGludCBpcmVhc29uLCBpbnQgcncpCiB7CiAJLyoKIAkgKiBpcmVhc29uID09IDA6IHRoZSBkcml2ZSB3YW50cyB0byByZWNlaXZlIGRhdGEgZnJvbSB1cwpAQCAtNzAxLDYgKzcwMiw5IEBACiAJCQkJZHJpdmUtPm5hbWUsIF9fRlVOQ1RJT05fXywgaXJlYXNvbik7CiAJfQogCisJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMpCisJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxFRDsKKwogCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC05ODksNiArOTkzLDcgQEAKIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBjZHJvbV9uZXdwY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwogCXhmZXJfZnVuY190ICp4ZmVyZnVuYzsKQEAgLTEwMjksOSArMTAzNCw5IEBACiAJLyoKIAkgKiBvayB3ZSBmYWxsIHRvIHBpbyA6LwogCSAqLwotCWlyZWFzb24gPSBIV0lGKGRyaXZlKS0+SU5CKElERV9JUkVBU09OX1JFRykgJiAweDM7Ci0JbG93Y3lsICA9IEhXSUYoZHJpdmUpLT5JTkIoSURFX0JDT1VOVExfUkVHKTsKLQloaWdoY3lsID0gSFdJRihkcml2ZSktPklOQihJREVfQkNPVU5USF9SRUcpOworCWlyZWFzb24gPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0lSRUFTT05fT0ZGU0VUXSkgJiAweDM7CisJbG93Y3lsICA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfQkNPVU5UTF9PRkZTRVRdKTsKKwloaWdoY3lsID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9CQ09VTlRIX09GRlNFVF0pOwogCiAJbGVuID0gbG93Y3lsICsgKDI1NiAqIGhpZ2hjeWwpOwogCkBAIC0xMDcxLDExICsxMDc2LDExIEBACiAJLyoKIAkgKiBjaGVjayB3aGljaCB3YXkgdG8gdHJhbnNmZXIgZGF0YQogCSAqLwotCWlmIChibGtfZnNfcmVxdWVzdChycSkgfHwgYmxrX3BjX3JlcXVlc3QocnEpKSB7Ci0JCWlmIChpZGVfY2RfY2hlY2tfaXJlYXNvbihkcml2ZSwgbGVuLCBpcmVhc29uLCB3cml0ZSkpCi0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJaWYgKGlkZV9jZF9jaGVja19pcmVhc29uKGRyaXZlLCBycSwgbGVuLCBpcmVhc29uLCB3cml0ZSkpCisJCXJldHVybiBpZGVfc3RvcHBlZDsKIAotCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpICYmIHdyaXRlID09IDApIHsKKwlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CisJCWlmICh3cml0ZSA9PSAwKSB7CiAJCQlpbnQgbnNraXA7CiAKIAkJCWlmIChpZGVfY2RfY2hlY2tfdHJhbnNmZXJfc2l6ZShkcml2ZSwgbGVuKSkgewpAQCAtMTEwMSwxNiArMTEwNiw5IEBACiAJaWYgKGlyZWFzb24gPT0gMCkgewogCQl3cml0ZSA9IDE7CiAJCXhmZXJmdW5jID0gSFdJRihkcml2ZSktPmF0YXBpX291dHB1dF9ieXRlczsKLQl9IGVsc2UgaWYgKGlyZWFzb24gPT0gMiB8fCAoaXJlYXNvbiA9PSAxICYmCi0JCSAgIChibGtfZnNfcmVxdWVzdChycSkgfHwgYmxrX3BjX3JlcXVlc3QocnEpKSkpIHsKKwl9IGVsc2UgewogCQl3cml0ZSA9IDA7CiAJCXhmZXJmdW5jID0gSFdJRihkcml2ZSktPmF0YXBpX2lucHV0X2J5dGVzOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBUaGUgZHJpdmUgIgotCQkJCSJhcHBlYXJzIGNvbmZ1c2VkIChpcmVhc29uID0gMHglMDJ4KS4gIgotCQkJCSJUcnlpbmcgdG8gcmVjb3ZlciBieSBlbmRpbmcgcmVxdWVzdC5cbiIsCi0JCQkJZHJpdmUtPm5hbWUsIF9fRlVOQ1RJT05fXywgaXJlYXNvbik7Ci0JCWdvdG8gZW5kX3JlcXVlc3Q7CiAJfQogCiAJLyoKQEAgLTExODIsMTEgKzExODAsMTAgQEAKIAkJCWVsc2UKIAkJCQlycS0+ZGF0YSArPSBibGVuOwogCQl9CisJCWlmICghd3JpdGUgJiYgYmxrX3NlbnNlX3JlcXVlc3QocnEpKQorCQkJcnEtPnNlbnNlX2xlbiArPSBibGVuOwogCX0KIAotCWlmICh3cml0ZSAmJiBibGtfc2Vuc2VfcmVxdWVzdChycSkpCi0JCXJxLT5zZW5zZV9sZW4gKz0gdGhpc2xlbjsKLQogCS8qCiAJICogcGFkLCBpZiBuZWNlc3NhcnkKIAkgKi8KQEAgLTEyMDcsOSArMTIwNCwxMyBAQAogZW5kX3JlcXVlc3Q6CiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQl1bnNpZ25lZCBpbnQgZGxlbiA9IHJxLT5kYXRhX2xlbjsKKworCQlpZiAoZG1hKQorCQkJcnEtPmRhdGFfbGVuID0gMDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKF9fYmxrX2VuZF9yZXF1ZXN0KHJxLCAwLCBycS0+ZGF0YV9sZW4pKQorCQlpZiAoX19ibGtfZW5kX3JlcXVlc3QocnEsIDAsIGRsZW4pKQogCQkJQlVHKCk7CiAJCUhXR1JPVVAoZHJpdmUpLT5ycSA9IE5VTEw7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CkBAIC0xOTI3LDYgKzE5MjgsNyBAQAogCXsgIk1BVFNISVRBRFZELVJPTSBTUi04MTg2IiwgTlVMTCwgICBJREVfQ0RfRkxBR19QTEFZX0FVRElPX09LCSAgICB9LAogCXsgIk1BVFNISVRBRFZELVJPTSBTUi04MTc2IiwgTlVMTCwgICBJREVfQ0RfRkxBR19QTEFZX0FVRElPX09LCSAgICB9LAogCXsgIk1BVFNISVRBRFZELVJPTSBTUi04MTc0IiwgTlVMTCwgICBJREVfQ0RfRkxBR19QTEFZX0FVRElPX09LCSAgICB9LAorCXsgIk9wdGlhcmMgRFZEIFJXIEFELTUyMDBBIiwgTlVMTCwgICBJREVfQ0RfRkxBR19QTEFZX0FVRElPX09LICAgICAgfSwKIAl7IE5VTEwsIE5VTEwsIDAgfQogfTsKIApAQCAtMjAzMCw5ICsyMDMyLDggQEAKIAogCWtmcmVlKGluZm8tPmJ1ZmZlcik7CiAJa2ZyZWUoaW5mby0+dG9jKTsKLQlpZiAoZGV2aW5mby0+aGFuZGxlID09IGRyaXZlICYmIHVucmVnaXN0ZXJfY2Ryb20oZGV2aW5mbykpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIGZhaWxlZCB0byB1bnJlZ2lzdGVyIGRldmljZSBmcm9tIHRoZSBjZHJvbSAiCi0JCQkJImRyaXZlci5cbiIsIF9fRlVOQ1RJT05fXywgZHJpdmUtPm5hbWUpOworCWlmIChkZXZpbmZvLT5oYW5kbGUgPT0gZHJpdmUpCisJCXVucmVnaXN0ZXJfY2Ryb20oZGV2aW5mbyk7CiAJZHJpdmUtPmRzY19vdmVybGFwID0gMDsKIAlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCWJsa19xdWV1ZV9wcmVwX3JxKGRyaXZlLT5xdWV1ZSwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCmluZGV4IGI2ODI4NGQuLjZkMTQ3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCkBAIC00NTcsNiArNDU3LDEwIEBACiAJICAgbGF5ZXIuIHRoZSBwYWNrZXQgbXVzdCBiZSBjb21wbGV0ZSwgYXMgd2UgZG8gbm90CiAJICAgdG91Y2ggaXQgYXQgYWxsLiAqLwogCWlkZV9jZF9pbml0X3JxKGRyaXZlLCAmcmVxKTsKKworCWlmIChjZ2MtPmRhdGFfZGlyZWN0aW9uID09IENHQ19EQVRBX1dSSVRFKQorCQlyZXEuY21kX2ZsYWdzIHw9IFJFUV9SVzsKKwogCW1lbWNweShyZXEuY21kLCBjZ2MtPmNtZCwgQ0RST01fUEFDS0VUX1NJWkUpOwogCWlmIChjZ2MtPnNlbnNlKQogCQltZW1zZXQoY2djLT5zZW5zZSwgMCwgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3NlbnNlKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCBhZWQ4YjMxLi4zOTUwMWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTM5Nyw2ICszOTcsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZV9saXN0X2VudHJ5IGhwYV9saXN0W10gPSB7CiAJeyAiU1QzNDA4MjNBIiwJTlVMTCB9LAogCXsgIlNUMzIwNDEzQSIsCU5VTEwgfSwKKwl7ICJTVDMxMDIxMUEiLAlOVUxMIH0sCiAJeyBOVUxMLAkJTlVMTCB9CiB9OwogCkBAIC04NjYsNyArODY3LDcgQEAKIAogCS8qIE9ubHkgcHJpbnQgY2FjaGUgc2l6ZSB3aGVuIGl0IHdhcyBzcGVjaWZpZWQgKi8KIAlpZiAoaWQtPmJ1Zl9zaXplKQotCQlwcmludGsgKCIgdy8lZEtpQiBDYWNoZSIsIGlkLT5idWZfc2l6ZS8yKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIHcvJWRLaUIgQ2FjaGUiLCBpZC0+YnVmX3NpemUgLyAyKTsKIAogCXByaW50ayhLRVJOX0NPTlQgIiwgQ0hTPSVkLyVkLyVkXG4iLAogCQkJIGRyaXZlLT5iaW9zX2N5bCwgZHJpdmUtPmJpb3NfaGVhZCwgZHJpdmUtPmJpb3Nfc2VjdCk7CkBAIC05NDgsNyArOTQ5LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCXByaW50aygiU2h1dGRvd246ICVzXG4iLCBkcml2ZS0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2h1dGRvd246ICVzXG4iLCBkcml2ZS0+bmFtZSk7CisKIAlkcml2ZS0+Z2VuZGV2LmJ1cy0+c3VzcGVuZCgmZHJpdmUtPmdlbmRldiwgUE1TR19TVVNQRU5EKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCmluZGV4IGQwZTdiNTMuLmQ2MWU1NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKQEAgLTEsOSArMSwxMyBAQAogLyoKKyAqICBJREUgRE1BIHN1cHBvcnQgKGluY2x1ZGluZyBJREUgUENJIEJNLURNQSkuCisgKgogICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk4ICAgTWFyayBMb3JkCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgICBBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNyAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCisgKiAgRE1BIGlzIHN1cHBvcnRlZCBmb3IgYWxsIElERSBkZXZpY2VzIChkaXNrIGRyaXZlcywgY2Ryb21zLCB0YXBlcywgZmxvcHBpZXMpLgogICovCiAKIC8qCkBAIC0xMSw0OSArMTUsNiBAQAogICovCiAKIC8qCi0gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgYnVzLW1hc3RlciBJREUgRE1BIGZ1bmN0aW9ucwotICogb2YgdmFyaW91cyBQQ0kgY2hpcHNldHMsIGluY2x1ZGluZyB0aGUgSW50ZWwgUElJWCAoaTgyMzcxRkIgZm9yCi0gKiB0aGUgNDMwIEZYIGNoaXBzZXQpLCB0aGUgUElJWDMgKGk4MjM3MVNCIGZvciB0aGUgNDMwIEhYL1ZYIGFuZCAKLSAqIDQ0MCBjaGlwc2V0cyksIGFuZCB0aGUgUElJWDQgKGk4MjM3MUFCIGZvciB0aGUgNDMwIFRYIGNoaXBzZXQpCi0gKiAoIlBJSVgiIHN0YW5kcyBmb3IgIlBDSSBJU0EgSURFIFhjZWxsZXJhdG9yIikuCi0gKgotICogUHJldHR5IG11Y2ggdGhlIHNhbWUgY29kZSB3b3JrcyBmb3Igb3RoZXIgSURFIFBDSSBidXMtbWFzdGVyaW5nIGNoaXBzZXRzLgotICoKLSAqIERNQSBpcyBzdXBwb3J0ZWQgZm9yIGFsbCBJREUgZGV2aWNlcyAoZGlzayBkcml2ZXMsIGNkcm9tcywgdGFwZXMsIGZsb3BwaWVzKS4KLSAqCi0gKiBCeSBkZWZhdWx0LCBETUEgc3VwcG9ydCBpcyBwcmVwYXJlZCBmb3IgdXNlLCBidXQgaXMgY3VycmVudGx5IGVuYWJsZWQgb25seQotICogZm9yIGRyaXZlcyB3aGljaCBhbHJlYWR5IGhhdmUgRE1BIGVuYWJsZWQgKFVsdHJhRE1BIG9yIG1vZGUgMiBtdWx0aS9zaW5nbGUpLAotICogb3Igd2hpY2ggYXJlIHJlY29nbml6ZWQgYXMgImdvb2QiIChzZWUgdGFibGUgYmVsb3cpLiAgRHJpdmVzIHdpdGggb25seSBtb2RlMAotICogb3IgbW9kZTEgKG11bHRpL3NpbmdsZSkgRE1BIHNob3VsZCBhbHNvIHdvcmsgd2l0aCB0aGlzIGNoaXBzZXQvZHJpdmVyCi0gKiAoZWcuIE1DMjExMkEpIGJ1dCBhcmUgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAqCi0gKiBVc2UgImhkcGFybSAtaSIgdG8gdmlldyBtb2RlcyBzdXBwb3J0ZWQgYnkgYSBnaXZlbiBkcml2ZS4KLSAqCi0gKiBUaGUgaGRwYXJtLTMuNSAob3IgbGF0ZXIpIHV0aWxpdHkgY2FuIGJlIHVzZWQgZm9yIG1hbnVhbGx5IGVuYWJsaW5nL2Rpc2FibGluZwotICogRE1BIHN1cHBvcnQsIGJ1dCBtdXN0IGJlIChyZS0pY29tcGlsZWQgYWdhaW5zdCB0aGlzIGtlcm5lbCB2ZXJzaW9uIG9yIGxhdGVyLgotICoKLSAqIFRvIGVuYWJsZSBETUEsIHVzZSAiaGRwYXJtIC1kMSAvZGV2L2hkPyIgb24gYSBwZXItZHJpdmUgYmFzaXMgYWZ0ZXIgYm9vdGluZy4KLSAqIElmIHByb2JsZW1zIGFyaXNlLCBpZGUuYyB3aWxsIGRpc2FibGUgRE1BIG9wZXJhdGlvbiBhZnRlciBhIGZldyByZXRyaWVzLgotICogVGhpcyBlcnJvciByZWNvdmVyeSBtZWNoYW5pc20gd29ya3MgYW5kIGhhcyBiZWVuIGV4dHJlbWVseSB3ZWxsIGV4ZXJjaXNlZC4KLSAqCi0gKiBJREUgZHJpdmVzLCBkZXBlbmRpbmcgb24gdGhlaXIgdmludGFnZSwgbWF5IHN1cHBvcnQgc2V2ZXJhbCBkaWZmZXJlbnQgbW9kZXMKLSAqIG9mIERNQSBvcGVyYXRpb24uICBUaGUgYm9vdC10aW1lIG1vZGVzIGFyZSBpbmRpY2F0ZWQgd2l0aCBhICIqIiBpbgotICogdGhlICJoZHBhcm0gLWkiIGxpc3RpbmcsIGFuZCBjYW4gYmUgY2hhbmdlZCB3aXRoICprbm93bGVkZ2VhYmxlKiB1c2Ugb2YKLSAqIHRoZSAiaGRwYXJtIC1YIiBmZWF0dXJlLiAgVGhlcmUgaXMgc2VsZG9tIGEgbmVlZCB0byBkbyB0aGlzLCBhcyBkcml2ZXMKLSAqIG5vcm1hbGx5IHBvd2VyLXVwIHdpdGggdGhlaXIgImJlc3QiIFBJTy9ETUEgbW9kZXMgZW5hYmxlZC4KLSAqCi0gKiBUZXN0aW5nIGhhcyBiZWVuIGRvbmUgd2l0aCBhIHJhdGhlciBleHRlbnNpdmUgbnVtYmVyIG9mIGRyaXZlcywKLSAqIHdpdGggUXVhbnR1bSAmIFdlc3Rlcm4gRGlnaXRhbCBtb2RlbHMgZ2VuZXJhbGx5IG91dHBlcmZvcm1pbmcgdGhlIHBhY2ssCi0gKiBhbmQgRnVqaXRzdSAmIENvbm5lciAoYW5kIHNvbWUgU2VhZ2F0ZSB3aGljaCBhcmUgcmVhbGx5IENvbm5lcikgZHJpdmVzCi0gKiBzaG93aW5nIG1vcmUgbGFja2x1c3RlciB0aHJvdWdocHV0LgotICoKLSAqIEtlZXAgYW4gZXllIG9uIC92YXIvYWRtL21lc3NhZ2VzIGZvciAiRE1BIGRpc2FibGVkIiBtZXNzYWdlcy4KLSAqCi0gKiBTb21lIHBlb3BsZSBoYXZlIHJlcG9ydGVkIHRyb3VibGUgd2l0aCBJbnRlbCBaYXBwYSBtb3RoZXJib2FyZHMuCi0gKiBUaGlzIGNhbiBiZSBmaXhlZCBieSB1cGdyYWRpbmcgdGhlIEFNSSBCSU9TIHRvIHZlcnNpb24gMS4wMC4wNC5CUzAsCi0gKiBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuaW50ZWwuY29tL3B1Yi9iaW9zLzEwMDA0YnMwLmV4ZQotICogKHRoYW5rcyB0byBHbGVuIE1vcnJlbGwgPGdsZW5Ac3Bpbi5TdGFuZm9yZC5lZHU+IGZvciByZXNlYXJjaGluZyB0aGlzKS4KLSAqCiAgKiBUaGFua3MgdG8gIkNocmlzdG9waGVyIEouIFJlaW1lciIgPHJlaW1lckBkb2UuY2FybGV0b24uY2E+IGZvcgogICogZml4aW5nIHRoZSBwcm9ibGVtIHdpdGggdGhlIEJJT1Mgb24gc29tZSBBY2VyIG1vdGhlcmJvYXJkcy4KICAqCkBAIC02NSwxMSArMjYsNiBAQAogICoKICAqIE1vc3QgaW1wb3J0YW50bHksIHRoYW5rcyB0byBSb2JlcnQgQnJpbmdtYW4gPHJvYkBtYXJzLnRyaW9uLmNvbT4KICAqIGZvciBzdXBwbHlpbmcgYSBQcm9taXNlIFVETUEgYm9hcmQgJiBXRCBVRE1BIGRyaXZlIGZvciB0aGlzIHdvcmshCi0gKgotICogQW5kLCB5ZXMsIEludGVsIFphcHBhIGJvYXJkcyByZWFsbHkgKmRvKiB1c2UgYm90aCBQSUlYIElERSBwb3J0cy4KLSAqCi0gKiBBVEEtNjYvMTAwIGFuZCByZWNvdmVyeSBmdW5jdGlvbnMsIEkgZm9yZ290IHRoZSByZXN0Li4uLi4uCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTc1Nyw3ICs3MTMsNyBAQAogCX0KIAogCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDE7CiAKIAlpZiAoaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgc3BlZWQpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCBmYWYyMmQ3Li41ZjEzM2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC03OCw0MCArNzgsNiBAQAogICovCiAjZGVmaW5lIElERUZMT1BQWV9QQ19TVEFDSwkJKDEwICsgSURFRkxPUFBZX01BWF9QQ19SRVRSSUVTKQogCi10eXBlZGVmIHN0cnVjdCBpZGVmbG9wcHlfcGFja2V0X2NvbW1hbmRfcyB7Ci0JdTggY1sxMl07CQkJCS8qIEFjdHVhbCBwYWNrZXQgYnl0ZXMgKi8KLQlpbnQgcmV0cmllczsJCQkJLyogT24gZWFjaCByZXRyeSwgd2UgaW5jcmVtZW50Ci0JCQkJCQkgICByZXRyaWVzICovCi0JaW50IGVycm9yOwkJCQkvKiBFcnJvciBjb2RlICovCi0JaW50IHJlcXVlc3RfdHJhbnNmZXI7CQkJLyogQnl0ZXMgdG8gdHJhbnNmZXIgKi8KLQlpbnQgYWN0dWFsbHlfdHJhbnNmZXJyZWQ7CQkvKiBCeXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLwotCWludCBidWZmZXJfc2l6ZTsJCQkvKiBTaXplIG9mIG91ciBkYXRhIGJ1ZmZlciAqLwotCWludCBiX2NvdW50OwkJCQkvKiBNaXNzaW5nL0F2YWlsYWJsZSBkYXRhIG9uCi0JCQkJCQkgICB0aGUgY3VycmVudCBidWZmZXIgKi8KLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7CQkJLyogVGhlIGNvcnJlc3BvbmRpbmcgcmVxdWVzdCAqLwotCXU4ICpidWZmZXI7CQkJCS8qIERhdGEgYnVmZmVyICovCi0JdTggKmN1cnJlbnRfcG9zaXRpb247CQkJLyogUG9pbnRlciBpbnRvIGFib3ZlIGJ1ZmZlciAqLwotCXZvaWQgKCpjYWxsYmFjaykgKGlkZV9kcml2ZV90ICopOwkvKiBDYWxsZWQgd2hlbiB0aGlzIHBhY2tldAotCQkJCQkJICAgY29tbWFuZCBpcyBjb21wbGV0ZWQgKi8KLQl1OCBwY19idWZmZXJbSURFRkxPUFBZX1BDX0JVRkZFUl9TSVpFXTsJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJLyogU3RhdHVzL0FjdGlvbiBiaXQgZmxhZ3M6IGxvbmcKLQkJCQkJCSAgIGZvciBzZXRfYml0ICovCi19IGlkZWZsb3BweV9wY190OwotCi0vKiBQYWNrZXQgY29tbWFuZCBmbGFnIGJpdHMuICovCi1lbnVtIHsKLQkvKiAxIHdoZW4gd2UgcHJlZmVyIHRvIHVzZSBETUEgaWYgcG9zc2libGUgKi8KLQlQQ19GTEFHX0RNQV9SRUNPTU1FTkRFRAk9ICgxIDw8IDApLAotCS8qIDEgd2hpbGUgRE1BIGluIHByb2dyZXNzICovCi0JUENfRkxBR19ETUFfSU5fUFJPR1JFU1MJPSAoMSA8PCAxKSwKLQkvKiAxIHdoZW4gZW5jb3VudGVyZWQgcHJvYmxlbSBkdXJpbmcgRE1BICovCi0JUENfRkxBR19ETUFfRVJST1IJPSAoMSA8PCAyKSwKLQkvKiBEYXRhIGRpcmVjdGlvbiAqLwotCVBDX0ZMQUdfV1JJVElORwkJPSAoMSA8PCAzKSwKLQkvKiBTdXBwcmVzcyBlcnJvciByZXBvcnRpbmcgKi8KLQlQQ19GTEFHX1NVUFBSRVNTX0VSUk9SCT0gKDEgPDwgNCksCi19OwotCiAvKiBmb3JtYXQgY2FwYWNpdGllcyBkZXNjcmlwdG9yIGNvZGVzICovCiAjZGVmaW5lIENBUEFDSVRZX0lOVkFMSUQJMHgwMAogI2RlZmluZSBDQVBBQ0lUWV9VTkZPUk1BVFRFRAkweDAxCkBAIC0xMzEsMTEgKzk3LDExIEBACiAJdW5zaWduZWQgaW50CW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLwogCiAJLyogQ3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwotCWlkZWZsb3BweV9wY190ICpwYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwotCWlkZWZsb3BweV9wY190ICpmYWlsZWRfcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOwogCS8qIFBhY2tldCBjb21tYW5kIHN0YWNrICovCi0JaWRlZmxvcHB5X3BjX3QgcGNfc3RhY2tbSURFRkxPUFBZX1BDX1NUQUNLXTsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjX3N0YWNrW0lERUZMT1BQWV9QQ19TVEFDS107CiAJLyogTmV4dCBmcmVlIHBhY2tldCBjb21tYW5kIHN0b3JhZ2Ugc3BhY2UgKi8KIAlpbnQgcGNfc3RhY2tfaW5kZXg7CiAJc3RydWN0IHJlcXVlc3QgcnFfc3RhY2tbSURFRkxPUFBZX1BDX1NUQUNLXTsKQEAgLTE5NSwzMiArMTYxLDYgQEAKICNkZWZpbmUJSURFRkxPUFBZX0VSUk9SX0dFTkVSQUwJCTEwMQogCiAvKgotICogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHRvIGZvcm1hdCB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHdvcmQgb2YgdGhlCi0gKiBBVEFQSSBJREVOVElGWSBERVZJQ0UgY29tbWFuZC4KLSAqLwotc3RydWN0IGlkZWZsb3BweV9pZF9nY3cgewotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQotCXVuc2lnbmVkIHBhY2tldF9zaXplCQk6MjsJLyogUGFja2V0IFNpemUgKi8KLQl1bnNpZ25lZCByZXNlcnZlZDIzNAkJOjM7CS8qIFJlc2VydmVkICovCi0JdW5zaWduZWQgZHJxX3R5cGUJCToyOwkvKiBDb21tYW5kIHBhY2tldCBEUlEgdHlwZSAqLwotCXVuc2lnbmVkIHJlbW92YWJsZQkJOjE7CS8qIFJlbW92YWJsZSBtZWRpYSAqLwotCXVuc2lnbmVkIGRldmljZV90eXBlCQk6NTsJLyogRGV2aWNlIHR5cGUgKi8KLQl1bnNpZ25lZCByZXNlcnZlZDEzCQk6MTsJLyogUmVzZXJ2ZWQgKi8KLQl1bnNpZ25lZCBwcm90b2NvbAkJOjI7CS8qIFByb3RvY29sIHR5cGUgKi8KLSNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQotCXVuc2lnbmVkIHByb3RvY29sCQk6MjsJLyogUHJvdG9jb2wgdHlwZSAqLwotCXVuc2lnbmVkIHJlc2VydmVkMTMJCToxOwkvKiBSZXNlcnZlZCAqLwotCXVuc2lnbmVkIGRldmljZV90eXBlCQk6NTsJLyogRGV2aWNlIHR5cGUgKi8KLQl1bnNpZ25lZCByZW1vdmFibGUJCToxOwkvKiBSZW1vdmFibGUgbWVkaWEgKi8KLQl1bnNpZ25lZCBkcnFfdHlwZQkJOjI7CS8qIENvbW1hbmQgcGFja2V0IERSUSB0eXBlICovCi0JdW5zaWduZWQgcmVzZXJ2ZWQyMzQJCTozOwkvKiBSZXNlcnZlZCAqLwotCXVuc2lnbmVkIHBhY2tldF9zaXplCQk6MjsJLyogUGFja2V0IFNpemUgKi8KLSNlbHNlCi0jZXJyb3IgIkJpdGZpZWxkIGVuZGlhbm5lc3Mgbm90IGRlZmluZWQhIENoZWNrIHlvdXIgYnl0ZW9yZGVyLmgiCi0jZW5kaWYKLX07Ci0KLS8qCiAgKiBQYWdlcyBvZiB0aGUgU0VMRUNUIFNFTlNFIC8gTU9ERSBTRU5TRSBwYWNrZXQgY29tbWFuZHMuCiAgKiBTZWUgU0ZGLTgwNzBpIHNwZWMuCiAgKi8KQEAgLTI1NiwyNyArMTk2LDEwIEBACiB9CiAKIC8qCi0gKiBUb28gYmFkLiBUaGUgZHJpdmUgd2FudHMgdG8gc2VuZCB1cyBkYXRhIHdoaWNoIHdlIGFyZSBub3QgcmVhZHkgdG8gYWNjZXB0LgotICogSnVzdCB0aHJvdyBpdCBhd2F5LgotICovCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfZGlzY2FyZF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IGJjb3VudCkKLXsKLQl3aGlsZSAoYmNvdW50LS0pCi0JCSh2b2lkKSBIV0lGKGRyaXZlKS0+SU5CKElERV9EQVRBX1JFRyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZWZsb3BweV93cml0ZV96ZXJvcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGludCBiY291bnQpCi17Ci0Jd2hpbGUgKGJjb3VudC0tKQotCQlIV0lGKGRyaXZlKS0+T1VUQigwLCBJREVfREFUQV9SRUcpOwotfQotCi0KLS8qCiAgKiBVc2VkIHRvIGZpbmlzaCBzZXJ2aWNpbmcgYSByZXF1ZXN0LiBGb3IgcmVhZC93cml0ZSByZXF1ZXN0cywgd2Ugd2lsbCBjYWxsCiAgKiBpZGVfZW5kX3JlcXVlc3QgdG8gcGFzcyB0byB0aGUgbmV4dCBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X2RvX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnNlY3MpCitzdGF0aWMgaW50IGlkZWZsb3BweV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5zZWNzKQogewogCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKQEAgLTMwNSw3ICsyMjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfZmxvcHB5X2lvX2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVmbG9wcHlfcGNfdCAqcGMsCitzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X2lvX2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKIAkJCQkgIHVuc2lnbmVkIGludCBiY291bnQsIGludCBkaXJlY3Rpb24pCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gcGMtPnJxOwpAQCAtMzMzLDI2ICsyNTYsMjYgQEAKIAkJZG9uZSArPSBjb3VudDsKIAl9CiAKLQlpZGVmbG9wcHlfZG9fZW5kX3JlcXVlc3QoZHJpdmUsIDEsIGRvbmUgPj4gOSk7CisJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCBkb25lID4+IDkpOwogCiAJaWYgKGJjb3VudCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBsZWZ0b3ZlciBkYXRhIGluICVzLCBiY291bnQgPT0gJWRcbiIsCiAJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fLCBiY291bnQpOwogCQlpZiAoZGlyZWN0aW9uKQotCQkJaWRlZmxvcHB5X3dyaXRlX3plcm9zKGRyaXZlLCBiY291bnQpOworCQkJaWRlX2F0YXBpX3dyaXRlX3plcm9zKGRyaXZlLCBiY291bnQpOwogCQllbHNlCi0JCQlpZGVmbG9wcHlfZGlzY2FyZF9kYXRhKGRyaXZlLCBiY291bnQpOwotCisJCQlpZGVfYXRhcGlfZGlzY2FyZF9kYXRhKGRyaXZlLCBiY291bnQpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlZmxvcHB5X3BjX3QgKnBjKQorc3RhdGljIHZvaWQgaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwYy0+cnE7CiAJc3RydWN0IGJpbyAqYmlvID0gcnEtPmJpbzsKIAogCXdoaWxlICgoYmlvID0gcnEtPmJpbykgIT0gTlVMTCkKLQkJaWRlZmxvcHB5X2RvX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKKwkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKIH0KIAogLyoKQEAgLTM2MCw3ICsyODMsNyBAQAogICogdGhlIGN1cnJlbnQgcmVxdWVzdCBzbyB0aGF0IGl0IHdpbGwgYmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LCBvbiB0aGUgbmV4dAogICogcGFzcyB0aHJvdWdoIHRoZSBkcml2ZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9xdWV1ZV9wY19oZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlZmxvcHB5X3BjX3QgKnBjLAorc3RhdGljIHZvaWQgaWRlZmxvcHB5X3F1ZXVlX3BjX2hlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKIAkJc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwpAQCAtMzcyLDcgKzI5NSw3IEBACiAJKHZvaWQpIGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxLCBpZGVfcHJlZW1wdCk7CiB9CiAKLXN0YXRpYyBpZGVmbG9wcHlfcGNfdCAqaWRlZmxvcHB5X25leHRfcGNfc3RvcmFnZShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgc3RydWN0IGlkZV9hdGFwaV9wYyAqaWRlZmxvcHB5X25leHRfcGNfc3RvcmFnZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKQEAgLTM5Myw3ICszMTYsNyBAQAogc3RhdGljIHZvaWQgaWRlZmxvcHB5X3JlcXVlc3Rfc2Vuc2VfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXU4ICpidWYgPSBmbG9wcHktPnBjLT5idWZmZXI7CisJdTggKmJ1ZiA9IGZsb3BweS0+cGMtPmJ1ZjsKIAogCWRlYnVnX2xvZygiUmVhY2hlZCAlc1xuIiwgX19mdW5jX18pOwogCkBAIC00MTgsMTEgKzM0MSwxMSBAQAogCQkJCQlmbG9wcHktPmFzY3EpOwogCiAKLQkJaWRlZmxvcHB5X2RvX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKKwkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluIFJFUVVFU1QgU0VOU0UgaXRzZWxmIC0gQWJvcnRpbmciCiAJCQkJIiByZXF1ZXN0IVxuIik7Ci0JCWlkZWZsb3BweV9kb19lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJfQogfQogCkBAIC00MzMsMjcgKzM1NiwyNyBAQAogCiAJZGVidWdfbG9nKCJSZWFjaGVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZGVmbG9wcHlfZG9fZW5kX3JlcXVlc3QoZHJpdmUsIGZsb3BweS0+cGMtPmVycm9yID8gMCA6IDEsIDApOworCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgZmxvcHB5LT5wYy0+ZXJyb3IgPyAwIDogMSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9pbml0X3BjKGlkZWZsb3BweV9wY190ICpwYykKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9pbml0X3BjKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCW1lbXNldChwYy0+YywgMCwgMTIpOwogCXBjLT5yZXRyaWVzID0gMDsKIAlwYy0+ZmxhZ3MgPSAwOwotCXBjLT5yZXF1ZXN0X3RyYW5zZmVyID0gMDsKLQlwYy0+YnVmZmVyID0gcGMtPnBjX2J1ZmZlcjsKLQlwYy0+YnVmZmVyX3NpemUgPSBJREVGTE9QUFlfUENfQlVGRkVSX1NJWkU7Ci0JcGMtPmNhbGxiYWNrID0gJmlkZWZsb3BweV9wY19jYWxsYmFjazsKKwlwYy0+cmVxX3hmZXIgPSAwOworCXBjLT5idWYgPSBwYy0+cGNfYnVmOworCXBjLT5idWZfc2l6ZSA9IElERUZMT1BQWV9QQ19CVUZGRVJfU0laRTsKKwlwYy0+aWRlZmxvcHB5X2NhbGxiYWNrID0gJmlkZWZsb3BweV9wY19jYWxsYmFjazsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChpZGVmbG9wcHlfcGNfdCAqcGMpCitzdGF0aWMgdm9pZCBpZGVmbG9wcHlfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCWlkZWZsb3BweV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IEdQQ01EX1JFUVVFU1RfU0VOU0U7CiAJcGMtPmNbNF0gPSAyNTU7Ci0JcGMtPnJlcXVlc3RfdHJhbnNmZXIgPSAxODsKLQlwYy0+Y2FsbGJhY2sgPSAmaWRlZmxvcHB5X3JlcXVlc3Rfc2Vuc2VfY2FsbGJhY2s7CisJcGMtPnJlcV94ZmVyID0gMTg7CisJcGMtPmlkZWZsb3BweV9jYWxsYmFjayA9ICZpZGVmbG9wcHlfcmVxdWVzdF9zZW5zZV9jYWxsYmFjazsKIH0KIAogLyoKQEAgLTQ2Miw3ICszODUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBpZGVmbG9wcHlfcmV0cnlfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9wY190ICpwYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAKIAkodm9pZClpZGVfcmVhZF9lcnJvcihkcml2ZSk7CkBAIC00NzcsNyArNDAwLDcgQEAKIHsKIAlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlZmxvcHB5X3BjX3QgKnBjID0gZmxvcHB5LT5wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGZsb3BweS0+cGM7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gcGMtPnJxOwogCXhmZXJfZnVuY190ICp4ZmVyZnVuYzsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKQEAgLTQ5NCw3ICs0MTcsNyBAQAogCQkJCQlycV9kYXRhX2RpcihycSkgPyAid3JpdGUiIDogInJlYWQiKTsKIAkJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9FUlJPUjsKIAkJfSBlbHNlIHsKLQkJCXBjLT5hY3R1YWxseV90cmFuc2ZlcnJlZCA9IHBjLT5yZXF1ZXN0X3RyYW5zZmVyOworCQkJcGMtPnhmZXJyZWQgPSBwYy0+cmVxX3hmZXI7CiAJCQlpZGVmbG9wcHlfdXBkYXRlX2J1ZmZlcnMoZHJpdmUsIHBjKTsKIAkJfQogCQlkZWJ1Z19sb2coIkRNQSBmaW5pc2hlZFxuIik7CkBAIC01MDYsNyArNDI5LDcgQEAKIAkvKiBObyBtb3JlIGludGVycnVwdHMgKi8KIAlpZiAoKHN0YXQgJiBEUlFfU1RBVCkgPT0gMCkgewogCQlkZWJ1Z19sb2coIlBhY2tldCBjb21tYW5kIGNvbXBsZXRlZCwgJWQgYnl0ZXMgdHJhbnNmZXJyZWRcbiIsCi0JCQkJcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkKTsKKwkJCQlwYy0+eGZlcnJlZCk7CiAJCXBjLT5mbGFncyAmPSB+UENfRkxBR19ETUFfSU5fUFJPR1JFU1M7CiAKIAkJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CkBAIC01MjksNyArNDUyLDcgQEAKIAkJaWYgKGZsb3BweS0+ZmFpbGVkX3BjID09IHBjKQogCQkJZmxvcHB5LT5mYWlsZWRfcGMgPSBOVUxMOwogCQkvKiBDb21tYW5kIGZpbmlzaGVkIC0gQ2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gKi8KLQkJcGMtPmNhbGxiYWNrKGRyaXZlKTsKKwkJcGMtPmlkZWZsb3BweV9jYWxsYmFjayhkcml2ZSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTU0MiwxMCArNDY1LDEwIEBACiAJfQogCiAJLyogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKi8KLQliY291bnQgPSAoaHdpZi0+SU5CKElERV9CQ09VTlRIX1JFRykgPDwgOCkgfAotCQkgIGh3aWYtPklOQihJREVfQkNPVU5UTF9SRUcpOworCWJjb3VudCA9IChod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0JDT1VOVEhfT0ZGU0VUXSkgPDwgOCkgfAorCQkgIGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfQkNPVU5UTF9PRkZTRVRdKTsKIAkvKiBvbiB0aGlzIGludGVycnVwdCAqLwotCWlyZWFzb24gPSBod2lmLT5JTkIoSURFX0lSRUFTT05fUkVHKTsKKwlpcmVhc29uID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9JUkVBU09OX09GRlNFVF0pOwogCiAJaWYgKGlyZWFzb24gJiBDRCkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6IENvRCAhPSAwIGluICVzXG4iLCBfX2Z1bmNfXyk7CkBAIC01NjEsMTMgKzQ4NCwxMyBAQAogCX0KIAlpZiAoIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dSSVRJTkcpKSB7CiAJCS8qIFJlYWRpbmcgLSBDaGVjayB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNlICovCi0JCXRlbXAgPSBwYy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQgKyBiY291bnQ7Ci0JCWlmICh0ZW1wID4gcGMtPnJlcXVlc3RfdHJhbnNmZXIpIHsKLQkJCWlmICh0ZW1wID4gcGMtPmJ1ZmZlcl9zaXplKSB7CisJCXRlbXAgPSBwYy0+eGZlcnJlZCArIGJjb3VudDsKKwkJaWYgKHRlbXAgPiBwYy0+cmVxX3hmZXIpIHsKKwkJCWlmICh0ZW1wID4gcGMtPmJ1Zl9zaXplKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiBUaGUgZmxvcHB5IHdhbnRzICIKIAkJCQkJInRvIHNlbmQgdXMgbW9yZSBkYXRhIHRoYW4gZXhwZWN0ZWQgIgogCQkJCQkiLSBkaXNjYXJkaW5nIGRhdGFcbiIpOwotCQkJCWlkZWZsb3BweV9kaXNjYXJkX2RhdGEoZHJpdmUsIGJjb3VudCk7CisJCQkJaWRlX2F0YXBpX2Rpc2NhcmRfZGF0YShkcml2ZSwgYmNvdW50KTsKIAogCQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwKIAkJCQkJCSZpZGVmbG9wcHlfcGNfaW50ciwKQEAgLTU4NCwxNSArNTA3LDE1IEBACiAJZWxzZQogCQl4ZmVyZnVuYyA9IGh3aWYtPmF0YXBpX2lucHV0X2J5dGVzOwogCi0JaWYgKHBjLT5idWZmZXIpCi0JCXhmZXJmdW5jKGRyaXZlLCBwYy0+Y3VycmVudF9wb3NpdGlvbiwgYmNvdW50KTsKKwlpZiAocGMtPmJ1ZikKKwkJeGZlcmZ1bmMoZHJpdmUsIHBjLT5jdXJfcG9zLCBiY291bnQpOwogCWVsc2UKIAkJaWRlX2Zsb3BweV9pb19idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50LAogCQkJCSAgICAgICEhKHBjLT5mbGFncyAmIFBDX0ZMQUdfV1JJVElORykpOwogCiAJLyogVXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uICovCi0JcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkICs9IGJjb3VudDsKLQlwYy0+Y3VycmVudF9wb3NpdGlvbiArPSBiY291bnQ7CisJcGMtPnhmZXJyZWQgKz0gYmNvdW50OworCXBjLT5jdXJfcG9zICs9IGJjb3VudDsKIAogCS8qIEFuZCBzZXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGFnYWluICovCiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmaWRlZmxvcHB5X3BjX2ludHIsIElERUZMT1BQWV9XQUlUX0NNRCwgTlVMTCk7CkBAIC02MDYsNiArNTI5LDcgQEAKICAqLwogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfdHJhbnNmZXJfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQogeworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpZGVfc3RhcnRzdG9wX3Qgc3RhcnRzdG9wOwogCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXU4IGlyZWFzb247CkBAIC02MTUsNyArNTM5LDcgQEAKIAkJCQkiaW5pdGlhdGVkIHlldCBEUlEgaXNuJ3QgYXNzZXJ0ZWRcbiIpOwogCQlyZXR1cm4gc3RhcnRzdG9wOwogCX0KLQlpcmVhc29uID0gZHJpdmUtPmh3aWYtPklOQihJREVfSVJFQVNPTl9SRUcpOworCWlyZWFzb24gPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0lSRUFTT05fT0ZGU0VUXSk7CiAJaWYgKChpcmVhc29uICYgQ0QpID09IDAgfHwgKGlyZWFzb24gJiBJTykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiAoSU8sQ29EKSAhPSAoMCwxKSB3aGlsZSAiCiAJCQkJImlzc3VpbmcgYSBwYWNrZXQgY29tbWFuZFxuIik7CkBAIC02NTIsNiArNTc2LDcgQEAKIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfdHJhbnNmZXJfcGMxKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsKIAl1OCBpcmVhc29uOwpAQCAtNjYxLDcgKzU4Niw3IEBACiAJCQkJImluaXRpYXRlZCB5ZXQgRFJRIGlzbid0IGFzc2VydGVkXG4iKTsKIAkJcmV0dXJuIHN0YXJ0c3RvcDsKIAl9Ci0JaXJlYXNvbiA9IGRyaXZlLT5od2lmLT5JTkIoSURFX0lSRUFTT05fUkVHKTsKKwlpcmVhc29uID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9JUkVBU09OX09GRlNFVF0pOwogCWlmICgoaXJlYXNvbiAmIENEKSA9PSAwIHx8IChpcmVhc29uICYgSU8pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogKElPLENvRCkgIT0gKDAsMSkgIgogCQkJCSJ3aGlsZSBpc3N1aW5nIGEgcGFja2V0IGNvbW1hbmRcbiIpOwpAQCAtNjgyLDcgKzYwNyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAotCQkJCSAgICBpZGVmbG9wcHlfcGNfdCAqcGMpCisJCQkJICAgIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCS8qIHN1cHJlc3MgZXJyb3IgbWVzc2FnZXMgcmVzdWx0aW5nIGZyb20gTWVkaXVtIG5vdCBwcmVzZW50ICovCiAJaWYgKGZsb3BweS0+c2Vuc2Vfa2V5ID09IDB4MDIgJiYKQEAgLTY5OCw3ICs2MjMsNyBAQAogfQogCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCWlkZWZsb3BweV9wY190ICpwYykKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtNzE5LDcgKzY0NCw3IEBACiAJCXBjLT5lcnJvciA9IElERUZMT1BQWV9FUlJPUl9HRU5FUkFMOwogCiAJCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkJcGMtPmNhbGxiYWNrKGRyaXZlKTsKKwkJcGMtPmlkZWZsb3BweV9jYWxsYmFjayhkcml2ZSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTcyNyw5ICs2NTIsOSBAQAogCiAJcGMtPnJldHJpZXMrKzsKIAkvKiBXZSBoYXZlbid0IHRyYW5zZmVycmVkIGFueSBkYXRhIHlldCAqLwotCXBjLT5hY3R1YWxseV90cmFuc2ZlcnJlZCA9IDA7Ci0JcGMtPmN1cnJlbnRfcG9zaXRpb24gPSBwYy0+YnVmZmVyOwotCWJjb3VudCA9IG1pbihwYy0+cmVxdWVzdF90cmFuc2ZlciwgNjMgKiAxMDI0KTsKKwlwYy0+eGZlcnJlZCA9IDA7CisJcGMtPmN1cl9wb3MgPSBwYy0+YnVmOworCWJjb3VudCA9IG1pbihwYy0+cmVxX3hmZXIsIDYzICogMTAyNCk7CiAKIAlpZiAocGMtPmZsYWdzICYgUENfRkxBR19ETUFfRVJST1IpIHsKIAkJcGMtPmZsYWdzICY9IH5QQ19GTEFHX0RNQV9FUlJPUjsKQEAgLTc1Nyw3ICs2ODIsNyBAQAogCQkvKiBpbW1lZGlhdGUgKi8KIAkJcGt0X3hmZXJfcm91dGluZSA9ICZpZGVmbG9wcHlfdHJhbnNmZXJfcGM7CiAJfQotCQorCiAJaWYgKGZsb3BweS0+ZmxhZ3MgJiBJREVGTE9QUFlfRkxBR19EUlFfSU5URVJSVVBUKSB7CiAJCS8qIElzc3VlIHRoZSBwYWNrZXQgY29tbWFuZCAqLwogCQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBXSU5fUEFDS0VUQ01ELApAQCAtNzY3LDcgKzY5Miw3IEBACiAJCXJldHVybiBpZGVfc3RhcnRlZDsKIAl9IGVsc2UgewogCQkvKiBJc3N1ZSB0aGUgcGFja2V0IGNvbW1hbmQgKi8KLQkJSFdJRihkcml2ZSktPk9VVEIoV0lOX1BBQ0tFVENNRCwgSURFX0NPTU1BTkRfUkVHKTsKKwkJaHdpZi0+T1VUQihXSU5fUEFDS0VUQ01ELCBod2lmLT5pb19wb3J0c1tJREVfQ09NTUFORF9PRkZTRVRdKTsKIAkJcmV0dXJuICgqcGt0X3hmZXJfcm91dGluZSkgKGRyaXZlKTsKIAl9CiB9CkBAIC03NzYsMTEgKzcwMSwxMSBAQAogewogCWRlYnVnX2xvZygiUmVhY2hlZCAlc1xuIiwgX19mdW5jX18pOwogCi0JaWRlZmxvcHB5X2RvX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKKwlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIDApOwogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9wcmV2ZW50X2NtZChpZGVmbG9wcHlfcGNfdCAqcGMsIGludCBwcmV2ZW50KQorc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9wcmV2ZW50X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgaW50IHByZXZlbnQpCiB7CiAJZGVidWdfbG9nKCJjcmVhdGluZyBwcmV2ZW50IHJlbW92YWwgY29tbWFuZCwgcHJldmVudCA9ICVkXG4iLCBwcmV2ZW50KTsKIApAQCAtNzg5LDM5ICs3MTQsMzkgQEAKIAlwYy0+Y1s0XSA9IHByZXZlbnQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfcmVhZF9jYXBhY2l0eV9jbWQoaWRlZmxvcHB5X3BjX3QgKnBjKQorc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9yZWFkX2NhcGFjaXR5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlpZGVmbG9wcHlfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBHUENNRF9SRUFEX0ZPUk1BVF9DQVBBQ0lUSUVTOwogCXBjLT5jWzddID0gMjU1OwogCXBjLT5jWzhdID0gMjU1OwotCXBjLT5yZXF1ZXN0X3RyYW5zZmVyID0gMjU1OworCXBjLT5yZXFfeGZlciA9IDI1NTsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9mb3JtYXRfdW5pdF9jbWQoaWRlZmxvcHB5X3BjX3QgKnBjLCBpbnQgYiwgaW50IGwsCi0JCQkJCSAgICAgIGludCBmbGFncykKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfZm9ybWF0X3VuaXRfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLCBpbnQgYiwKKwkJaW50IGwsIGludCBmbGFncykKIHsKIAlpZGVmbG9wcHlfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBHUENNRF9GT1JNQVRfVU5JVDsKIAlwYy0+Y1sxXSA9IDB4MTc7CiAKLQltZW1zZXQocGMtPmJ1ZmZlciwgMCwgMTIpOwotCXBjLT5idWZmZXJbMV0gPSAweEEyOworCW1lbXNldChwYy0+YnVmLCAwLCAxMik7CisJcGMtPmJ1ZlsxXSA9IDB4QTI7CiAJLyogRGVmYXVsdCBmb3JtYXQgbGlzdCBoZWFkZXIsIHU4IDE6IEZPVi9EQ1JUL0lNTSBiaXRzIHNldCAqLwogCiAJaWYgKGZsYWdzICYgMSkJCQkJLyogVmVyaWZ5IGJpdCBvbi4uLiAqLwotCQlwYy0+YnVmZmVyWzFdIF49IDB4MjA7CQkvKiAuLi4gdHVybiBvZmYgRENSVCBiaXQgKi8KLQlwYy0+YnVmZmVyWzNdID0gODsKKwkJcGMtPmJ1ZlsxXSBePSAweDIwOwkJLyogLi4uIHR1cm4gb2ZmIERDUlQgYml0ICovCisJcGMtPmJ1ZlszXSA9IDg7CiAKLQlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTMyKGIpLCAodW5zaWduZWQgaW50ICopKCZwYy0+YnVmZmVyWzRdKSk7Ci0JcHV0X3VuYWxpZ25lZChjcHVfdG9fYmUzMihsKSwgKHVuc2lnbmVkIGludCAqKSgmcGMtPmJ1ZmZlcls4XSkpOwotCXBjLT5idWZmZXJfc2l6ZSA9IDEyOworCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMzIoYiksICh1bnNpZ25lZCBpbnQgKikoJnBjLT5idWZbNF0pKTsKKwlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTMyKGwpLCAodW5zaWduZWQgaW50ICopKCZwYy0+YnVmWzhdKSk7CisJcGMtPmJ1Zl9zaXplID0gMTI7CiAJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfV1JJVElORzsKIH0KIAogLyogQSBtb2RlIHNlbnNlIGNvbW1hbmQgaXMgdXNlZCB0byAic2Vuc2UiIGZsb3BweSBwYXJhbWV0ZXJzLiAqLwotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9tb2RlX3NlbnNlX2NtZChpZGVmbG9wcHlfcGNfdCAqcGMsIHU4IHBhZ2VfY29kZSwKLQkJdTggdHlwZSkKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfbW9kZV9zZW5zZV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCisJCXU4IHBhZ2VfY29kZSwgdTggdHlwZSkKIHsKIAl1MTYgbGVuZ3RoID0gODsgLyogc2l6ZW9mKE1vZGUgUGFyYW1ldGVyIEhlYWRlcikgPSA4IEJ5dGVzICovCiAKQEAgLTg0MiwyNCArNzY3LDI0IEBACiAJCQkJImluIGNyZWF0ZV9tb2RlX3NlbnNlX2NtZFxuIik7CiAJfQogCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMTYobGVuZ3RoKSwgKHUxNiAqKSAmcGMtPmNbN10pOwotCXBjLT5yZXF1ZXN0X3RyYW5zZmVyID0gbGVuZ3RoOworCXBjLT5yZXFfeGZlciA9IGxlbmd0aDsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9zdGFydF9zdG9wX2NtZChpZGVmbG9wcHlfcGNfdCAqcGMsIGludCBzdGFydCkKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfc3RhcnRfc3RvcF9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIGludCBzdGFydCkKIHsKIAlpZGVmbG9wcHlfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBHUENNRF9TVEFSVF9TVE9QX1VOSVQ7CiAJcGMtPmNbNF0gPSBzdGFydDsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV90ZXN0X3VuaXRfcmVhZHlfY21kKGlkZWZsb3BweV9wY190ICpwYykKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfdGVzdF91bml0X3JlYWR5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlpZGVmbG9wcHlfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBHUENNRF9URVNUX1VOSVRfUkVBRFk7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfcndfY21kKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAotCQkJCSAgICBpZGVmbG9wcHlfcGNfdCAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZWN0b3IpCiB7CiAJaW50IGJsb2NrID0gc2VjdG9yIC8gZmxvcHB5LT5ic19mYWN0b3I7CkBAIC04NzQsNDEgKzc5OSw0MSBAQAogCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMTYoYmxvY2tzKSwgKHVuc2lnbmVkIHNob3J0ICopJnBjLT5jWzddKTsKIAlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTMyKGJsb2NrKSwgKHVuc2lnbmVkIGludCAqKSAmcGMtPmNbMl0pOwogCi0JcGMtPmNhbGxiYWNrID0gJmlkZWZsb3BweV9yd19jYWxsYmFjazsKKwlwYy0+aWRlZmxvcHB5X2NhbGxiYWNrID0gJmlkZWZsb3BweV9yd19jYWxsYmFjazsKIAlwYy0+cnEgPSBycTsKIAlwYy0+Yl9jb3VudCA9IGNtZCA9PSBSRUFEID8gMCA6IHJxLT5iaW8tPmJpX3NpemU7CiAJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUlcpCiAJCXBjLT5mbGFncyB8PSBQQ19GTEFHX1dSSVRJTkc7Ci0JcGMtPmJ1ZmZlciA9IE5VTEw7Ci0JcGMtPnJlcXVlc3RfdHJhbnNmZXIgPSBwYy0+YnVmZmVyX3NpemUgPSBibG9ja3MgKiBmbG9wcHktPmJsb2NrX3NpemU7CisJcGMtPmJ1ZiA9IE5VTEw7CisJcGMtPnJlcV94ZmVyID0gcGMtPmJ1Zl9zaXplID0gYmxvY2tzICogZmxvcHB5LT5ibG9ja19zaXplOwogCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9SRUNPTU1FTkRFRDsKIH0KIAogc3RhdGljIHZvaWQgaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAotCQlpZGVmbG9wcHlfcGNfdCAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSkKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpZGVmbG9wcHlfaW5pdF9wYyhwYyk7Ci0JcGMtPmNhbGxiYWNrID0gJmlkZWZsb3BweV9yd19jYWxsYmFjazsKKwlwYy0+aWRlZmxvcHB5X2NhbGxiYWNrID0gJmlkZWZsb3BweV9yd19jYWxsYmFjazsKIAltZW1jcHkocGMtPmMsIHJxLT5jbWQsIHNpemVvZihwYy0+YykpOwogCXBjLT5ycSA9IHJxOwogCXBjLT5iX2NvdW50ID0gcnEtPmRhdGFfbGVuOwogCWlmIChycS0+ZGF0YV9sZW4gJiYgcnFfZGF0YV9kaXIocnEpID09IFdSSVRFKQogCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19XUklUSU5HOwotCXBjLT5idWZmZXIgPSBycS0+ZGF0YTsKKwlwYy0+YnVmID0gcnEtPmRhdGE7CiAJaWYgKHJxLT5iaW8pCiAJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9SRUNPTU1FTkRFRDsKIAkvKgogCSAqIHBvc3NpYmx5IHByb2JsZW1hdGljLCBkb2Vzbid0IGxvb2sgbGlrZSBpZGUtZmxvcHB5IGNvcnJlY3RseQogCSAqIGhhbmRsZWQgc2NhdHRlcmVkIHJlcXVlc3RzIGlmIGRtYSBmYWlscy4uLgogCSAqLwotCXBjLT5yZXF1ZXN0X3RyYW5zZmVyID0gcGMtPmJ1ZmZlcl9zaXplID0gcnEtPmRhdGFfbGVuOworCXBjLT5yZXFfeGZlciA9IHBjLT5idWZfc2l6ZSA9IHJxLT5kYXRhX2xlbjsKIH0KIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgYmxvY2tfcykKIHsKIAlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlpZGVmbG9wcHlfcGNfdCAqcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CiAJdW5zaWduZWQgbG9uZyBibG9jayA9ICh1bnNpZ25lZCBsb25nKWJsb2NrX3M7CiAKIAlkZWJ1Z19sb2coImRldjogJXMsIGNtZF90eXBlOiAleCwgZXJyb3JzOiAlZFxuIiwKQEAgLTkyNCw3ICs4NDksNyBAQAogCQllbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6ICVzOiBJL08gZXJyb3JcbiIsCiAJCQkJZHJpdmUtPm5hbWUpOwotCQlpZGVmbG9wcHlfZG9fZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKQEAgLTkzMiwyMCArODU3LDIwIEBACiAJCSAgICAocnEtPm5yX3NlY3RvcnMgJSBmbG9wcHktPmJzX2ZhY3RvcikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuc3VwcG9ydGVkIHIvdyByZXF1ZXN0IHNpemVcbiIsCiAJCQkJCWRyaXZlLT5uYW1lKTsKLQkJCWlkZWZsb3BweV9kb19lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9CiAJCXBjID0gaWRlZmxvcHB5X25leHRfcGNfc3RvcmFnZShkcml2ZSk7CiAJCWlkZWZsb3BweV9jcmVhdGVfcndfY21kKGZsb3BweSwgcGMsIHJxLCBibG9jayk7CiAJfSBlbHNlIGlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewotCQlwYyA9IChpZGVmbG9wcHlfcGNfdCAqKSBycS0+YnVmZmVyOworCQlwYyA9IChzdHJ1Y3QgaWRlX2F0YXBpX3BjICopIHJxLT5idWZmZXI7CiAJfSBlbHNlIGlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKIAkJcGMgPSBpZGVmbG9wcHlfbmV4dF9wY19zdG9yYWdlKGRyaXZlKTsKIAkJaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGZsb3BweSwgcGMsIHJxKTsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwKIAkJCSJpZGUtZmxvcHB5OiB1bnN1cHBvcnRlZCBjb21tYW5kIGluIHF1ZXVlIik7Ci0JCWlkZWZsb3BweV9kb19lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTk1Nyw3ICs4ODIsNyBAQAogICogQWRkIGEgc3BlY2lhbCBwYWNrZXQgY29tbWFuZCByZXF1ZXN0IHRvIHRoZSB0YWlsIG9mIHRoZSByZXF1ZXN0IHF1ZXVlLAogICogYW5kIHdhaXQgZm9yIGl0IHRvIGJlIHNlcnZpY2VkLgogICovCi1zdGF0aWMgaW50IGlkZWZsb3BweV9xdWV1ZV9wY190YWlsKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlZmxvcHB5X3BjX3QgKnBjKQorc3RhdGljIGludCBpZGVmbG9wcHlfcXVldWVfcGNfdGFpbChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0IHJxOwpAQCAtOTc3LDcgKzkwMiw3IEBACiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JaWRlZmxvcHB5X3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCAqcGFnZTsKIAlpbnQgY2FwYWNpdHksIGxiYV9jYXBhY2l0eTsKIAl1MTYgdHJhbnNmZXJfcmF0ZSwgc2VjdG9yX3NpemUsIGN5bHMsIHJwbTsKQEAgLTk5MSwxNiArOTE2LDE2IEBACiAJCQkJIiBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQotCWZsb3BweS0+d3AgPSAhIShwYy5idWZmZXJbM10gJiAweDgwKTsKKwlmbG9wcHktPndwID0gISEocGMuYnVmWzNdICYgMHg4MCk7CiAJc2V0X2Rpc2tfcm8oZmxvcHB5LT5kaXNrLCBmbG9wcHktPndwKTsKLQlwYWdlID0gJnBjLmJ1ZmZlcls4XTsKKwlwYWdlID0gJnBjLmJ1Zls4XTsKIAotCXRyYW5zZmVyX3JhdGUgPSBiZTE2X3RvX2NwdSgqKHUxNiAqKSZwYy5idWZmZXJbOCArIDJdKTsKLQlzZWN0b3Jfc2l6ZSAgID0gYmUxNl90b19jcHUoKih1MTYgKikmcGMuYnVmZmVyWzggKyA2XSk7Ci0JY3lscyAgICAgICAgICA9IGJlMTZfdG9fY3B1KCoodTE2ICopJnBjLmJ1ZmZlcls4ICsgOF0pOwotCXJwbSAgICAgICAgICAgPSBiZTE2X3RvX2NwdSgqKHUxNiAqKSZwYy5idWZmZXJbOCArIDI4XSk7Ci0JaGVhZHMgICAgICAgICA9IHBjLmJ1ZmZlcls4ICsgNF07Ci0Jc2VjdG9ycyAgICAgICA9IHBjLmJ1ZmZlcls4ICsgNV07CisJdHJhbnNmZXJfcmF0ZSA9IGJlMTZfdG9fY3B1KCoodTE2ICopJnBjLmJ1Zls4ICsgMl0pOworCXNlY3Rvcl9zaXplICAgPSBiZTE2X3RvX2NwdSgqKHUxNiAqKSZwYy5idWZbOCArIDZdKTsKKwljeWxzICAgICAgICAgID0gYmUxNl90b19jcHUoKih1MTYgKikmcGMuYnVmWzggKyA4XSk7CisJcnBtICAgICAgICAgICA9IGJlMTZfdG9fY3B1KCoodTE2ICopJnBjLmJ1Zls4ICsgMjhdKTsKKwloZWFkcyAgICAgICAgID0gcGMuYnVmWzggKyA0XTsKKwlzZWN0b3JzICAgICAgID0gcGMuYnVmWzggKyA1XTsKIAogCWNhcGFjaXR5ID0gY3lscyAqIGhlYWRzICogc2VjdG9ycyAqIHNlY3Rvcl9zaXplOwogCkBAIC0xMDI5LDcgKzk1NCw3IEBACiBzdGF0aWMgaW50IGlkZWZsb3BweV9nZXRfc2ZycF9iaXQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZWZsb3BweV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAKIAlmbG9wcHktPnNyZnAgPSAwOwogCWlkZWZsb3BweV9jcmVhdGVfbW9kZV9zZW5zZV9jbWQoJnBjLCBJREVGTE9QUFlfQ0FQQUJJTElUSUVTX1BBR0UsCkBAIC0xMDM5LDcgKzk2NCw3IEBACiAJaWYgKGlkZWZsb3BweV9xdWV1ZV9wY190YWlsKGRyaXZlLCAmcGMpKQogCQlyZXR1cm4gMTsKIAotCWZsb3BweS0+c3JmcCA9IHBjLmJ1ZmZlcls4ICsgMl0gJiAweDQwOworCWZsb3BweS0+c3JmcCA9IHBjLmJ1Zls4ICsgMl0gJiAweDQwOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTEwNTAsNyArOTc1LDcgQEAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZWZsb3BweV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdTggKmNhcF9kZXNjOwogCXU4IGhlYWRlcl9sZW4sIGRlc2NfY250OwogCWludCBpLCByYyA9IDEsIGJsb2NrcywgbGVuZ3RoOwpAQCAtMTA2NiwxNSArOTkxLDE1IEBACiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogQ2FuJ3QgZ2V0IGZsb3BweSBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQotCWhlYWRlcl9sZW4gPSBwYy5idWZmZXJbM107Ci0JY2FwX2Rlc2MgPSAmcGMuYnVmZmVyWzRdOworCWhlYWRlcl9sZW4gPSBwYy5idWZbM107CisJY2FwX2Rlc2MgPSAmcGMuYnVmWzRdOwogCWRlc2NfY250ID0gaGVhZGVyX2xlbiAvIDg7IC8qIGNhcGFjaXR5IGRlc2NyaXB0b3Igb2YgOCBieXRlcyAqLwogCiAJZm9yIChpID0gMDsgaSA8IGRlc2NfY250OyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGRlc2Nfc3RhcnQgPSA0ICsgaSo4OwogCi0JCWJsb2NrcyA9IGJlMzJfdG9fY3B1KCoodTMyICopJnBjLmJ1ZmZlcltkZXNjX3N0YXJ0XSk7Ci0JCWxlbmd0aCA9IGJlMTZfdG9fY3B1KCoodTE2ICopJnBjLmJ1ZmZlcltkZXNjX3N0YXJ0ICsgNl0pOworCQlibG9ja3MgPSBiZTMyX3RvX2NwdSgqKHUzMiAqKSZwYy5idWZbZGVzY19zdGFydF0pOworCQlsZW5ndGggPSBiZTE2X3RvX2NwdSgqKHUxNiAqKSZwYy5idWZbZGVzY19zdGFydCArIDZdKTsKIAogCQlkZWJ1Z19sb2coIkRlc2NyaXB0b3IgJWQ6ICVka0IsICVkIGJsb2NrcywgJWQgc2VjdG9yIHNpemVcbiIsCiAJCQkJaSwgYmxvY2tzICogbGVuZ3RoIC8gMTAyNCwgYmxvY2tzLCBsZW5ndGgpOwpAQCAtMTA4NSw3ICsxMDEwLDcgQEAKIAkJICogdGhlIGNvZGUgYmVsb3cgaXMgdmFsaWQgb25seSBmb3IgdGhlIDFzdCBkZXNjcmlwdG9yLCBpZSBpPTAKIAkJICovCiAKLQkJc3dpdGNoIChwYy5idWZmZXJbZGVzY19zdGFydCArIDRdICYgMHgwMykgeworCQlzd2l0Y2ggKHBjLmJ1ZltkZXNjX3N0YXJ0ICsgNF0gJiAweDAzKSB7CiAJCS8qIENsaWshIGRyaXZlIHJldHVybnMgdGhpcyBpbnN0ZWFkIG9mIENBUEFDSVRZX0NVUlJFTlQgKi8KIAkJY2FzZSBDQVBBQ0lUWV9VTkZPUk1BVFRFRDoKIAkJCWlmICghKGZsb3BweS0+ZmxhZ3MgJiBJREVGTE9QUFlfRkxBR19DTElLX0RSSVZFKSkKQEAgLTExMzAsNyArMTA1NSw3IEBACiAJCQlicmVhazsKIAkJfQogCQlkZWJ1Z19sb2coIkRlc2NyaXB0b3IgMCBDb2RlOiAlZFxuIiwKLQkJCSAgcGMuYnVmZmVyW2Rlc2Nfc3RhcnQgKyA0XSAmIDB4MDMpOworCQkJICBwYy5idWZbZGVzY19zdGFydCArIDRdICYgMHgwMyk7CiAJfQogCiAJLyogQ2xpayEgZGlzayBkb2VzIG5vdCBzdXBwb3J0IGdldF9mbGV4aWJsZV9kaXNrX3BhZ2UgKi8KQEAgLTExNjIsNyArMTA4Nyw3IEBACiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfZm9ybWF0X2NhcGFjaXRpZXMoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgX191c2VyICphcmcpCiB7Ci0JaWRlZmxvcHB5X3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCBoZWFkZXJfbGVuLCBkZXNjX2NudDsKIAlpbnQgaSwgYmxvY2tzLCBsZW5ndGgsIHVfYXJyYXlfc2l6ZSwgdV9pbmRleDsKIAlpbnQgX191c2VyICphcmdwOwpAQCAtMTE3OCw3ICsxMTAzLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiBDYW4ndCBnZXQgZmxvcHB5IHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gKC1FSU8pOwogCX0KLQloZWFkZXJfbGVuID0gcGMuYnVmZmVyWzNdOworCWhlYWRlcl9sZW4gPSBwYy5idWZbM107CiAJZGVzY19jbnQgPSBoZWFkZXJfbGVuIC8gODsgLyogY2FwYWNpdHkgZGVzY3JpcHRvciBvZiA4IGJ5dGVzICovCiAKIAl1X2luZGV4ID0gMDsKQEAgLTExOTUsOCArMTEyMCw4IEBACiAJCWlmICh1X2luZGV4ID49IHVfYXJyYXlfc2l6ZSkKIAkJCWJyZWFrOwkvKiBVc2VyLXN1cHBsaWVkIGJ1ZmZlciB0b28gc21hbGwgKi8KIAotCQlibG9ja3MgPSBiZTMyX3RvX2NwdSgqKHUzMiAqKSZwYy5idWZmZXJbZGVzY19zdGFydF0pOwotCQlsZW5ndGggPSBiZTE2X3RvX2NwdSgqKHUxNiAqKSZwYy5idWZmZXJbZGVzY19zdGFydCArIDZdKTsKKwkJYmxvY2tzID0gYmUzMl90b19jcHUoKih1MzIgKikmcGMuYnVmW2Rlc2Nfc3RhcnRdKTsKKwkJbGVuZ3RoID0gYmUxNl90b19jcHUoKih1MTYgKikmcGMuYnVmW2Rlc2Nfc3RhcnQgKyA2XSk7CiAKIAkJaWYgKHB1dF91c2VyKGJsb2NrcywgYXJncCkpCiAJCQlyZXR1cm4oLUVGQVVMVCk7CkBAIC0xMjI3LDcgKzExNTIsNyBAQAogc3RhdGljIGludCBpZGVmbG9wcHlfZ2V0X2Zvcm1hdF9wcm9ncmVzcyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBfX3VzZXIgKmFyZykKIHsKIAlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlpZGVmbG9wcHlfcGNfdCBwYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCWludCBwcm9ncmVzc19pbmRpY2F0aW9uID0gMHgxMDAwMDsKIAogCWlmIChmbG9wcHktPnNyZnApIHsKQEAgLTEyNzEsMzMgKzExOTYsMzkgQEAKICAqLwogc3RhdGljIGludCBpZGVmbG9wcHlfaWRlbnRpZnlfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGhkX2RyaXZlaWQgKmlkKQogewotCXN0cnVjdCBpZGVmbG9wcHlfaWRfZ2N3IGdjdzsKKwl1OCBnY3dbMl07CisJdTggZGV2aWNlX3R5cGUsIHByb3RvY29sLCByZW1vdmFibGUsIGRycV90eXBlLCBwYWNrZXRfc2l6ZTsKIAogCSooKHUxNiAqKSAmZ2N3KSA9IGlkLT5jb25maWc7CiAKKwlkZXZpY2VfdHlwZSA9ICBnY3dbMV0gJiAweDFGOworCXJlbW92YWJsZSAgID0gKGdjd1swXSAmIDB4ODApID4+IDc7CisJcHJvdG9jb2wgICAgPSAoZ2N3WzFdICYgMHhDMCkgPj4gNjsKKwlkcnFfdHlwZSAgICA9IChnY3dbMF0gJiAweDYwKSA+PiA1OworCXBhY2tldF9zaXplID0gIGdjd1swXSAmIDB4MDM7CisKICNpZmRlZiBDT05GSUdfUFBDCiAJLyoga2x1ZGdlIGZvciBBcHBsZSBQb3dlckJvb2sgaW50ZXJuYWwgemlwICovCi0JaWYgKChnY3cuZGV2aWNlX3R5cGUgPT0gNSkgJiYKLQkgICAgIXN0cnN0cihpZC0+bW9kZWwsICJDRC1ST00iKSAmJgotCSAgICBzdHJzdHIoaWQtPm1vZGVsLCAiWklQIikpCi0JCWdjdy5kZXZpY2VfdHlwZSA9IDA7CisJaWYgKGRldmljZV90eXBlID09IDUgJiYKKwkgICAgIXN0cnN0cihpZC0+bW9kZWwsICJDRC1ST00iKSAmJiBzdHJzdHIoaWQtPm1vZGVsLCAiWklQIikpCisJCWRldmljZV90eXBlID0gMDsKICNlbmRpZgogCi0JaWYgKGdjdy5wcm90b2NvbCAhPSAyKQorCWlmIChwcm90b2NvbCAhPSAyKQogCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6IFByb3RvY29sICgweCUwMngpIGlzIG5vdCBBVEFQSVxuIiwKLQkJCQlnY3cucHJvdG9jb2wpOwotCWVsc2UgaWYgKGdjdy5kZXZpY2VfdHlwZSAhPSAwKQorCQkJcHJvdG9jb2wpOworCWVsc2UgaWYgKGRldmljZV90eXBlICE9IDApCiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogRGV2aWNlIHR5cGUgKDB4JTAyeCkgaXMgbm90IHNldCAiCi0JCQkJInRvIGZsb3BweVxuIiwgZ2N3LmRldmljZV90eXBlKTsKLQllbHNlIGlmICghZ2N3LnJlbW92YWJsZSkKKwkJCQkidG8gZmxvcHB5XG4iLCBkZXZpY2VfdHlwZSk7CisJZWxzZSBpZiAoIXJlbW92YWJsZSkKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiBUaGUgcmVtb3ZhYmxlIGZsYWcgaXMgbm90IHNldFxuIik7Ci0JZWxzZSBpZiAoZ2N3LmRycV90eXBlID09IDMpIHsKKwllbHNlIGlmIChkcnFfdHlwZSA9PSAzKQogCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6IFNvcnJ5LCBEUlEgdHlwZSAoMHglMDJ4KSBub3QgIgotCQkJCSJzdXBwb3J0ZWRcbiIsIGdjdy5kcnFfdHlwZSk7Ci0JfSBlbHNlIGlmIChnY3cucGFja2V0X3NpemUgIT0gMCkgeworCQkJCSJzdXBwb3J0ZWRcbiIsIGRycV90eXBlKTsKKwllbHNlIGlmIChwYWNrZXRfc2l6ZSAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6IFBhY2tldCBzaXplICgweCUwMngpIGlzIG5vdCAxMiAiCi0JCQkJImJ5dGVzIGxvbmdcbiIsIGdjdy5wYWNrZXRfc2l6ZSk7Ci0JfSBlbHNlCisJCQkJImJ5dGVzXG4iLCBwYWNrZXRfc2l6ZSk7CisJZWxzZQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMjIsMTEgKzEyNTMsMTIgQEAKIAogc3RhdGljIHZvaWQgaWRlZmxvcHB5X3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkpCiB7Ci0Jc3RydWN0IGlkZWZsb3BweV9pZF9nY3cgZ2N3OworCXU4IGdjd1syXTsKIAogCSooKHUxNiAqKSAmZ2N3KSA9IGRyaXZlLT5pZC0+Y29uZmlnOwogCWZsb3BweS0+cGMgPSBmbG9wcHktPnBjX3N0YWNrOwotCWlmIChnY3cuZHJxX3R5cGUgPT0gMSkKKworCWlmICgoKGdjd1swXSAmIDB4NjApID4+IDUpID09IDEpCiAJCWZsb3BweS0+ZmxhZ3MgfD0gSURFRkxPUFBZX0ZMQUdfRFJRX0lOVEVSUlVQVDsKIAkvKgogCSAqIFdlIHVzZWQgdG8gY2hlY2sgcmV2aXNpb25zIGhlcmUuIEF0IHRoaXMgcG9pbnQgaG93ZXZlciBJJ20gZ2l2aW5nIHVwLgpAQCAtMTQxMyw3ICsxMzQ1LDcgQEAKIAkubWVkaWEJCQk9IGlkZV9mbG9wcHksCiAJLnN1cHBvcnRzX2RzY19vdmVybGFwCT0gMCwKIAkuZG9fcmVxdWVzdAkJPSBpZGVmbG9wcHlfZG9fcmVxdWVzdCwKLQkuZW5kX3JlcXVlc3QJCT0gaWRlZmxvcHB5X2RvX2VuZF9yZXF1ZXN0LAorCS5lbmRfcmVxdWVzdAkJPSBpZGVmbG9wcHlfZW5kX3JlcXVlc3QsCiAJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKIAkuYWJvcnQJCQk9IF9faWRlX2Fib3J0LAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwpAQCAtMTQyNiw3ICsxMzU4LDcgQEAKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHk7CiAJaWRlX2RyaXZlX3QgKmRyaXZlOwotCWlkZWZsb3BweV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaW50IHJldCA9IDA7CiAKIAlkZWJ1Z19sb2coIlJlYWNoZWQgJXNcbiIsIF9fZnVuY19fKTsKQEAgLTE0ODksNyArMTQyMSw3IEBACiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwogCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Zsb3BweV9nKGRpc2spOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0JaWRlZmxvcHB5X3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAogCWRlYnVnX2xvZygiUmVhY2hlZCAlc1xuIiwgX19mdW5jX18pOwogCkBAIC0xNTIxLDggKzE0NTMsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfbG9ja2Rvb3IoaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHksIGlkZWZsb3BweV9wY190ICpwYywKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IGNtZCkKK3N0YXRpYyBpbnQgaWRlX2Zsb3BweV9sb2NrZG9vcihpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSwKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHVuc2lnbmVkIGxvbmcgYXJnLCB1bnNpZ25lZCBpbnQgY21kKQogewogCWlmIChmbG9wcHktPm9wZW5lcnMgPiAxKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTU1MSw3ICsxNDgzLDcgQEAKIAkJCQkgIGludCBfX3VzZXIgKmFyZykKIHsKIAlpbnQgYmxvY2tzLCBsZW5ndGgsIGZsYWdzLCBlcnIgPSAwOwotCWlkZWZsb3BweV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAKIAlpZiAoZmxvcHB5LT5vcGVuZXJzID4gMSkgewogCQkvKiBEb24ndCBmb3JtYXQgaWYgc29tZW9uZSBpcyB1c2luZyB0aGUgZGlzayAqLwpAQCAtMTYwMiw3ICsxNTM0LDcgQEAKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKIAlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9mbG9wcHlfZyhiZGV2LT5iZF9kaXNrKTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCWlkZWZsb3BweV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKaW5kZXggNzA5YjllNC4uMjVmZGEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCkBAIC0xLDM4ICsxLDExNSBAQAogLyoKICAqIGdlbmVyaWMvZGVmYXVsdCBJREUgaG9zdCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqIFRoaXMgY29kZSB3YXMgc3BsaXQgb2ZmIGZyb20gaWRlLmMuICBTZWUgaXQgZm9yIG9yaWdpbmFsIGNvcHlyaWdodHMuCiAgKgogICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogICovCiAKKy8qCisgKiBGb3Igc3BlY2lhbCBjYXNlcyBuZXcgaW50ZXJmYWNlcyBtYXkgYmUgYWRkZWQgdXNpbmcgc3lzZnMsIGkuZS4KKyAqCisgKgllY2hvIC1uICIweDE2ODoweDM2ZToxMCIgPiAvc3lzL2NsYXNzL2lkZV9nZW5lcmljL2FkZAorICoKKyAqIHdpbGwgYWRkIGFuIGludGVyZmFjZSB1c2luZyBJL08gcG9ydHMgMHgxNjgtMHgxNmYvMHgzNmUgYW5kIElSUSAxMC4KKyAqLworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogCisjZGVmaW5lIERSVl9OQU1FCSJpZGVfZ2VuZXJpYyIKKworc3RhdGljIHNzaXplX3Qgc3RvcmVfYWRkKHN0cnVjdCBjbGFzcyAqY2xzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCWlkZV9od2lmX3QgKmh3aWY7CisJdW5zaWduZWQgaW50IGJhc2UsIGN0bDsKKwlpbnQgaXJxOworCWh3X3JlZ3NfdCBodzsKKwl1OCBpZHhbXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCisJaWYgKHNzY2FuZihidWYsICIleDoleDolZCIsICZiYXNlLCAmY3RsLCAmaXJxKSAhPSAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWh3aWYgPSBpZGVfZmluZF9wb3J0KGJhc2UpOworCWlmIChod2lmID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisJaWRlX3N0ZF9pbml0X3BvcnRzKCZodywgYmFzZSwgY3RsKTsKKwlody5pcnEgPSBpcnE7CisJaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOworCisJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOworCisJaWR4WzBdID0gaHdpZi0+aW5kZXg7CisKKwlpZGVfZGV2aWNlX2FkZChpZHgsIE5VTEwpOworCisJcmV0dXJuIG47Cit9OworCitzdGF0aWMgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBpZGVfZ2VuZXJpY19jbGFzc19hdHRyc1tdID0geworCV9fQVRUUihhZGQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2FkZCksCisJX19BVFRSX05VTEwKK307CisKK3N0YXRpYyB2b2lkIGlkZV9nZW5lcmljX2NsYXNzX3JlbGVhc2Uoc3RydWN0IGNsYXNzICpjbHMpCit7CisJa2ZyZWUoY2xzKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaWRlX2dlbmVyaWNfc3lzZnNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGFzcyAqY2xzOworCWludCByYzsKKworCWNscyA9IGt6YWxsb2Moc2l6ZW9mKCpjbHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNscykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbHMtPm5hbWUgPSBEUlZfTkFNRTsKKwljbHMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2xzLT5jbGFzc19yZWxlYXNlID0gaWRlX2dlbmVyaWNfY2xhc3NfcmVsZWFzZTsKKwljbHMtPmNsYXNzX2F0dHJzID0gaWRlX2dlbmVyaWNfY2xhc3NfYXR0cnM7CisKKwlyYyA9IGNsYXNzX3JlZ2lzdGVyKGNscyk7CisJaWYgKHJjKSB7CisJCWtmcmVlKGNscyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgaWRlX2dlbmVyaWNfaW5pdCh2b2lkKQogewogCXU4IGlkeFtNQVhfSFdJRlNdOwogCWludCBpOwogCi0JaWYgKGlkZV9od2lmc1swXS5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKQotCQlpZGVfZ2V0X2xvY2soTlVMTCwgTlVMTCk7IC8qIGZvciBhdGFyaSBvbmx5ICovCi0KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKIAkJaWRlX2h3aWZfdCAqaHdpZiA9ICZpZGVfaHdpZnNbaV07CisJCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IGlkZV9kZWZhdWx0X2lvX2Jhc2UoaSk7CisJCWh3X3JlZ3NfdCBodzsKIAotCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSAmJiAhaHdpZi0+cHJlc2VudCkKKwkJaWYgKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3Vua25vd24gJiYgaW9fYWRkcikgeworCQkJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisJCQlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBpb19hZGRyLCBpb19hZGRyICsgMHgyMDYpOworCQkJaHcuaXJxID0gaWRlX2RlZmF1bHRfaXJxKGlvX2FkZHIpOworCQkJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOworCiAJCQlpZHhbaV0gPSBpOwotCQllbHNlCisJCX0gZWxzZQogCQkJaWR4W2ldID0gMHhmZjsKIAl9CiAKIAlpZGVfZGV2aWNlX2FkZF9hbGwoaWR4LCBOVUxMKTsKIAotCWlmIChpZGVfaHdpZnNbMF0uaW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSkKLQkJaWRlX3JlbGVhc2VfbG9jaygpOwkvKiBmb3IgYXRhcmkgb25seSAqLworCWlmIChpZGVfZ2VuZXJpY19zeXNmc19pbml0KCkpCisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gY3JlYXRlIGlkZV9nZW5lcmljICIKKwkJCQkJICJjbGFzc1xuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggNzE1Mzc5Ni4uMzFlNWFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTMwMSwzOSArMzAxLDQ1IEBACiAJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CiAKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YSA9IGh3aWYtPklOVyhJREVfREFUQV9SRUcpOworCQl1MTYgZGF0YSA9IGh3aWYtPklOVyhod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKIAogCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwogCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CiAJfQogCiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCWh3aWYtPk9VVEIoZHJpdmUtPmN0bCAmIH4weDgwLCBJREVfQ09OVFJPTF9SRUcpOworCWh3aWYtPk9VVEIoZHJpdmUtPmN0bCAmIH4weDgwLCBod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKTsKIAogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKLQkJdGYtPm5zZWN0ICA9IGh3aWYtPklOQihJREVfTlNFQ1RPUl9SRUcpOworCQl0Zi0+bnNlY3QgID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9OU0VDVE9SX09GRlNFVF0pOwogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQotCQl0Zi0+bGJhbCAgID0gaHdpZi0+SU5CKElERV9TRUNUT1JfUkVHKTsKKwkJdGYtPmxiYWwgICA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfU0VDVE9SX09GRlNFVF0pOwogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQotCQl0Zi0+bGJhbSAgID0gaHdpZi0+SU5CKElERV9MQ1lMX1JFRyk7CisJCXRmLT5sYmFtICAgPSBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0xDWUxfT0ZGU0VUXSk7CiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCi0JCXRmLT5sYmFoICAgPSBod2lmLT5JTkIoSURFX0hDWUxfUkVHKTsKKwkJdGYtPmxiYWggICA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfSENZTF9PRkZTRVRdKTsKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQotCQl0Zi0+ZGV2aWNlID0gaHdpZi0+SU5CKElERV9TRUxFQ1RfUkVHKTsKKwkJdGYtPmRldmljZSA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfU0VMRUNUX09GRlNFVF0pOwogCiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7Ci0JCWh3aWYtPk9VVEIoZHJpdmUtPmN0bCB8IDB4ODAsIElERV9DT05UUk9MX1JFRyk7CisJCWh3aWYtPk9VVEIoZHJpdmUtPmN0bCB8IDB4ODAsCisJCQkgICBod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKTsKIAogCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCi0JCQl0Zi0+aG9iX2ZlYXR1cmUgPSBod2lmLT5JTkIoSURFX0ZFQVRVUkVfUkVHKTsKKwkJCXRmLT5ob2JfZmVhdHVyZSA9CisJCQkJaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9GRUFUVVJFX09GRlNFVF0pOwogCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gaHdpZi0+SU5CKElERV9OU0VDVE9SX1JFRyk7CisJCQl0Zi0+aG9iX25zZWN0ICAgPQorCQkJCWh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfTlNFQ1RPUl9PRkZTRVRdKTsKIAkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gaHdpZi0+SU5CKElERV9TRUNUT1JfUkVHKTsKKwkJCXRmLT5ob2JfbGJhbCAgICA9CisJCQkJaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9TRUNUT1JfT0ZGU0VUXSk7CiAJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IGh3aWYtPklOQihJREVfTENZTF9SRUcpOworCQkJdGYtPmhvYl9sYmFtICAgID0KKwkJCQlod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0xDWUxfT0ZGU0VUXSk7CiAJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IGh3aWYtPklOQihJREVfSENZTF9SRUcpOworCQkJdGYtPmhvYl9sYmFoICAgID0KKwkJCQlod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0hDWUxfT0ZGU0VUXSk7CiAJfQogfQogCkBAIC00NDgsNyArNDU0LDggQEAKIAkJaWYgKGVyciA9PSBBQlJUX0VSUikgewogCQkJaWYgKGRyaXZlLT5zZWxlY3QuYi5sYmEgJiYKIAkJCSAgICAvKiBzb21lIG5ld2VyIGRyaXZlcyBkb24ndCBzdXBwb3J0IFdJTl9TUEVDSUZZICovCi0JCQkgICAgaHdpZi0+SU5CKElERV9DT01NQU5EX1JFRykgPT0gV0lOX1NQRUNJRlkpCisJCQkgICAgaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9DT01NQU5EX09GRlNFVF0pID09CisJCQkJV0lOX1NQRUNJRlkpCiAJCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7CiAJCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCkBAIC01MDAsNyArNTA3LDggQEAKIAogCWlmIChpZGVfcmVhZF9zdGF0dXMoZHJpdmUpICYgKEJVU1lfU1RBVCB8IERSUV9TVEFUKSkKIAkJLyogZm9yY2UgYW4gYWJvcnQgKi8KLQkJaHdpZi0+T1VUQihXSU5fSURMRUlNTUVESUFURSwgSURFX0NPTU1BTkRfUkVHKTsKKwkJaHdpZi0+T1VUQihXSU5fSURMRUlNTUVESUFURSwKKwkJCSAgIGh3aWYtPmlvX3BvcnRzW0lERV9DT01NQU5EX09GRlNFVF0pOwogCiAJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7CiAJCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCBjNDE5MjY2Li40NTk0NDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTE1OCw5ICsxNTgsMTIgQEAKIAogdm9pZCBTRUxFQ1RfRFJJVkUgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZiAoSFdJRihkcml2ZSktPnNlbGVjdHByb2MpCi0JCUhXSUYoZHJpdmUpLT5zZWxlY3Rwcm9jKGRyaXZlKTsKLQlIV0lGKGRyaXZlKS0+T1VUQihkcml2ZS0+c2VsZWN0LmFsbCwgSURFX1NFTEVDVF9SRUcpOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCWlmIChod2lmLT5zZWxlY3Rwcm9jKQorCQlod2lmLT5zZWxlY3Rwcm9jKGRyaXZlKTsKKworCWh3aWYtPk9VVEIoZHJpdmUtPnNlbGVjdC5hbGwsIGh3aWYtPmlvX3BvcnRzW0lERV9TRUxFQ1RfT0ZGU0VUXSk7CiB9CiAKIHZvaWQgU0VMRUNUX01BU0sgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG1hc2spCkBAIC0xOTQsMTUgKzE5NywxOCBAQAogCWlmIChpb18zMmJpdCkgewogCQlpZiAoaW9fMzJiaXQgJiAyKSB7CiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlhdGFfdmxiX3N5bmMoZHJpdmUsIElERV9OU0VDVE9SX1JFRyk7Ci0JCQlod2lmLT5JTlNMKElERV9EQVRBX1JFRywgYnVmZmVyLCB3Y291bnQpOworCQkJYXRhX3ZsYl9zeW5jKGRyaXZlLCBod2lmLT5pb19wb3J0c1tJREVfTlNFQ1RPUl9PRkZTRVRdKTsKKwkJCWh3aWYtPklOU0woaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSwgYnVmZmVyLAorCQkJCSAgIHdjb3VudCk7CiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCX0gZWxzZQotCQkJaHdpZi0+SU5TTChJREVfREFUQV9SRUcsIGJ1ZmZlciwgd2NvdW50KTsKLQl9IGVsc2UgewotCQlod2lmLT5JTlNXKElERV9EQVRBX1JFRywgYnVmZmVyLCB3Y291bnQ8PDEpOwotCX0KKwkJCWh3aWYtPklOU0woaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSwgYnVmZmVyLAorCQkJCSAgIHdjb3VudCk7CisJfSBlbHNlCisJCWh3aWYtPklOU1coaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSwgYnVmZmVyLAorCQkJICAgd2NvdW50IDw8IDEpOwogfQogCiAvKgpAQCAtMjE2LDE1ICsyMjIsMTggQEAKIAlpZiAoaW9fMzJiaXQpIHsKIAkJaWYgKGlvXzMyYml0ICYgMikgewogCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJYXRhX3ZsYl9zeW5jKGRyaXZlLCBJREVfTlNFQ1RPUl9SRUcpOwotCQkJaHdpZi0+T1VUU0woSURFX0RBVEFfUkVHLCBidWZmZXIsIHdjb3VudCk7CisJCQlhdGFfdmxiX3N5bmMoZHJpdmUsIGh3aWYtPmlvX3BvcnRzW0lERV9OU0VDVE9SX09GRlNFVF0pOworCQkJaHdpZi0+T1VUU0woaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSwgYnVmZmVyLAorCQkJCSAgICB3Y291bnQpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl9IGVsc2UKLQkJCWh3aWYtPk9VVFNMKElERV9EQVRBX1JFRywgYnVmZmVyLCB3Y291bnQpOwotCX0gZWxzZSB7Ci0JCWh3aWYtPk9VVFNXKElERV9EQVRBX1JFRywgYnVmZmVyLCB3Y291bnQ8PDEpOwotCX0KKwkJCWh3aWYtPk9VVFNMKGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0sIGJ1ZmZlciwKKwkJCQkgICAgd2NvdW50KTsKKwl9IGVsc2UKKwkJaHdpZi0+T1VUU1coaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSwgYnVmZmVyLAorCQkJICAgIHdjb3VudCA8PCAxKTsKIH0KIAogLyoKQEAgLTI0MywxMyArMjUyLDE1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX1E0MCkKIAlpZiAoTUFDSF9JU19BVEFSSSB8fCBNQUNIX0lTX1E0MCkgewogCQkvKiBBdGFyaSBoYXMgYSBieXRlLXN3YXBwZWQgSURFIGludGVyZmFjZSAqLwotCQlpbnN3X3N3YXB3KElERV9EQVRBX1JFRywgYnVmZmVyLCBieXRlY291bnQgLyAyKTsKKwkJaW5zd19zd2Fwdyhod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdLCBidWZmZXIsCisJCQkgICBieXRlY291bnQgLyAyKTsKIAkJcmV0dXJuOwogCX0KICNlbmRpZiAvKiBDT05GSUdfQVRBUkkgfHwgQ09ORklHX1E0MCAqLwogCWh3aWYtPmF0YV9pbnB1dF9kYXRhKGRyaXZlLCBidWZmZXIsIGJ5dGVjb3VudCAvIDQpOwogCWlmICgoYnl0ZWNvdW50ICYgMHgwMykgPj0gMikKLQkJaHdpZi0+SU5TVyhJREVfREFUQV9SRUcsICgodTggKilidWZmZXIpKyhieXRlY291bnQgJiB+MHgwMyksIDEpOworCQlod2lmLT5JTlNXKGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0sCisJCQkgICAodTggKilidWZmZXIgKyAoYnl0ZWNvdW50ICYgfjB4MDMpLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgYXRhcGlfb3V0cHV0X2J5dGVzKGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAqYnVmZmVyLCB1MzIgYnl0ZWNvdW50KQpAQCAtMjYwLDEzICsyNzEsMTUgQEAKICNpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfUTQwKQogCWlmIChNQUNIX0lTX0FUQVJJIHx8IE1BQ0hfSVNfUTQwKSB7CiAJCS8qIEF0YXJpIGhhcyBhIGJ5dGUtc3dhcHBlZCBJREUgaW50ZXJmYWNlICovCi0JCW91dHN3X3N3YXB3KElERV9EQVRBX1JFRywgYnVmZmVyLCBieXRlY291bnQgLyAyKTsKKwkJb3V0c3dfc3dhcHcoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSwgYnVmZmVyLAorCQkJICAgIGJ5dGVjb3VudCAvIDIpOwogCQlyZXR1cm47CiAJfQogI2VuZGlmIC8qIENPTkZJR19BVEFSSSB8fCBDT05GSUdfUTQwICovCiAJaHdpZi0+YXRhX291dHB1dF9kYXRhKGRyaXZlLCBidWZmZXIsIGJ5dGVjb3VudCAvIDQpOwogCWlmICgoYnl0ZWNvdW50ICYgMHgwMykgPj0gMikKLQkJaHdpZi0+T1VUU1coSURFX0RBVEFfUkVHLCAoKHU4KilidWZmZXIpKyhieXRlY291bnQgJiB+MHgwMyksIDEpOworCQlod2lmLT5PVVRTVyhod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdLAorCQkJICAgICh1OCAqKWJ1ZmZlciArIChieXRlY291bnQgJiB+MHgwMyksIDEpOwogfQogCiB2b2lkIGRlZmF1bHRfaHdpZl90cmFuc3BvcnQoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTQyOSw3ICs0NDIsNyBAQAogCSAqIGFuIGludGVycnVwdCB3aXRoIGFub3RoZXIgcGNpIGNhcmQvZGV2aWNlLiAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucwogCSAqIGFib3V0IHBvc3NpYmxlIGlzYS1wbnAgYW5kIHBjaS1wbnAgaXNzdWVzIHlldC4KIAkgKi8KLQlpZiAoSURFX0NPTlRST0xfUkVHKQorCWlmIChod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKQogCQlzdGF0ID0gaWRlX3JlYWRfYWx0c3RhdHVzKGRyaXZlKTsKIAllbHNlCiAJCS8qIE5vdGU6IHRoaXMgbWF5IGNsZWFyIGEgcGVuZGluZyBJUlEhISAqLwpAQCAtNTk1LDYgKzYwOCw3IEBACiAKIAkvKgogCSAqIEZJWE1FOgorCSAqIC0gY2hhbmdlIG1hc3Rlci9zbGF2ZSBJREVOVElGWSBvcmRlcgogCSAqIC0gZm9yY2UgYml0MTMgKDgwYyBjYWJsZSBwcmVzZW50KSBjaGVjayBhbHNvIGZvciAhaXZiIGRldmljZXMKIAkgKiAgICh1bmxlc3MgdGhlIHNsYXZlIGRldmljZSBpcyBwcmUtQVRBMykKIAkgKi8KQEAgLTYzMCw3ICs2NDQsNyBAQAogCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKIAlpZGVfc2V0X2lycShkcml2ZSwgMSk7CiAJbXNsZWVwKDUwKTsKLQlod2lmLT5PVVRCKFdJTl9JREVOVElGWSwgSURFX0NPTU1BTkRfUkVHKTsKKwlod2lmLT5PVVRCKFdJTl9JREVOVElGWSwgaHdpZi0+aW9fcG9ydHNbSURFX0NPTU1BTkRfT0ZGU0VUXSk7CiAJdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKIAlkbyB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CkBAIC02NTcsNyArNjcxLDcgQEAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9Ci0JYXRhX2lucHV0X2RhdGEoZHJpdmUsIGlkLCBTRUNUT1JfV09SRFMpOworCWh3aWYtPmF0YV9pbnB1dF9kYXRhKGRyaXZlLCBpZCwgU0VDVE9SX1dPUkRTKTsKIAkodm9pZClpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOwkvKiBjbGVhciBkcml2ZSBJUlEgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtNzE3LDkgKzczMSwxMCBAQAogCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKIAl1ZGVsYXkoMSk7CiAJaWRlX3NldF9pcnEoZHJpdmUsIDApOwotCWh3aWYtPk9VVEIoc3BlZWQsIElERV9OU0VDVE9SX1JFRyk7Ci0JaHdpZi0+T1VUQihTRVRGRUFUVVJFU19YRkVSLCBJREVfRkVBVFVSRV9SRUcpOwotCWh3aWYtPk9VVEJTWU5DKGRyaXZlLCBXSU5fU0VURkVBVFVSRVMsIElERV9DT01NQU5EX1JFRyk7CisJaHdpZi0+T1VUQihzcGVlZCwgaHdpZi0+aW9fcG9ydHNbSURFX05TRUNUT1JfT0ZGU0VUXSk7CisJaHdpZi0+T1VUQihTRVRGRUFUVVJFU19YRkVSLCBod2lmLT5pb19wb3J0c1tJREVfRkVBVFVSRV9PRkZTRVRdKTsKKwlod2lmLT5PVVRCU1lOQyhkcml2ZSwgV0lOX1NFVEZFQVRVUkVTLAorCQkgICAgICAgaHdpZi0+aW9fcG9ydHNbSURFX0NPTU1BTkRfT0ZGU0VUXSk7CiAJaWYgKGRyaXZlLT5xdWlya19saXN0ID09IDIpCiAJCWlkZV9zZXRfaXJxKGRyaXZlLCAxKTsKIApAQCAtODI3LDcgKzg0Miw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKLQlod2lmLT5PVVRCU1lOQyhkcml2ZSwgY21kLCBJREVfQ09NTUFORF9SRUcpOworCWh3aWYtPk9VVEJTWU5DKGRyaXZlLCBjbWQsIGh3aWYtPmlvX3BvcnRzW0lERV9DT01NQU5EX09GRlNFVF0pOwogCS8qCiAJICogRHJpdmUgdGFrZXMgNDAwblMgdG8gcmVzcG9uZCwgd2UgbXVzdCBhdm9pZCB0aGUgSVJRIGJlaW5nCiAJICogc2VydmljZWQgYmVmb3JlIHRoYXQuCkBAIC0xMDA4LDcgKzEwMjMsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaWRlX2h3aWZfdCAqaHdpZjsKIAlpZGVfaHdncm91cF90ICpod2dyb3VwOwotCQorCXU4IGN0bDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwogCWh3aWYgPSBIV0lGKGRyaXZlKTsKIAlod2dyb3VwID0gSFdHUk9VUChkcml2ZSk7CkBAIC0xMDIyLDcgKzEwMzgsOCBAQAogCQlwcmVfcmVzZXQoZHJpdmUpOwogCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCQl1ZGVsYXkgKDIwKTsKLQkJaHdpZi0+T1VUQlNZTkMoZHJpdmUsIFdJTl9TUlNULCBJREVfQ09NTUFORF9SRUcpOworCQlod2lmLT5PVVRCU1lOQyhkcml2ZSwgV0lOX1NSU1QsCisJCQkgICAgICAgaHdpZi0+aW9fcG9ydHNbSURFX0NPTU1BTkRfT0ZGU0VUXSk7CiAJCW5kZWxheSg0MDApOwogCQlod2dyb3VwLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CiAJCWh3Z3JvdXAtPnBvbGxpbmcgPSAxOwpAQCAtMTAzOCw3ICsxMDU1LDcgQEAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KQogCQlwcmVfcmVzZXQoJmh3aWYtPmRyaXZlc1t1bml0XSk7CiAKLQlpZiAoIUlERV9DT05UUk9MX1JFRykgeworCWlmIChod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID09IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KQEAgLTEwNTMsMTYgKzEwNzAsMTQgQEAKIAkgKiByZWNvdmVyIGZyb20gcmVzZXQgdmVyeSBxdWlja2x5LCBzYXZpbmcgdXMgdGhlIGZpcnN0IDUwbXMgd2FpdCB0aW1lLgogCSAqLwogCS8qIHNldCBTUlNUIGFuZCBuSUVOICovCi0JaHdpZi0+T1VUQlNZTkMoZHJpdmUsIGRyaXZlLT5jdGx8NixJREVfQ09OVFJPTF9SRUcpOworCWh3aWYtPk9VVEJTWU5DKGRyaXZlLCBkcml2ZS0+Y3RsfDYsIGh3aWYtPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0pOwogCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwogCXVkZWxheSgxMCk7Ci0JaWYgKGRyaXZlLT5xdWlya19saXN0ID09IDIpIHsKLQkJLyogY2xlYXIgU1JTVCBhbmQgbklFTiAqLwotCQlod2lmLT5PVVRCU1lOQyhkcml2ZSwgZHJpdmUtPmN0bCwgSURFX0NPTlRST0xfUkVHKTsKLQl9IGVsc2UgewotCQkvKiBjbGVhciBTUlNULCBsZWF2ZSBuSUVOICovCi0JCWh3aWYtPk9VVEJTWU5DKGRyaXZlLCBkcml2ZS0+Y3RsfDIsIElERV9DT05UUk9MX1JFRyk7Ci0JfQorCWlmIChkcml2ZS0+cXVpcmtfbGlzdCA9PSAyKQorCQljdGwgPSBkcml2ZS0+Y3RsOwkvKiBjbGVhciBTUlNUIGFuZCBuSUVOICovCisJZWxzZQorCQljdGwgPSBkcml2ZS0+Y3RsIHwgMjsJLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAqLworCWh3aWYtPk9VVEJTWU5DKGRyaXZlLCBjdGwsIGh3aWYtPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0pOwogCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwogCXVkZWxheSgxMCk7CiAJaHdncm91cC0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IDI5ZTJjOTcuLjcwMzFhOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC0xMjIsNyArMTIyLDYgQEAKIAljb25zdCBjaGFyCSpuYW1lOwogCWludAkJcGlvOwogfSBpZGVfcGlvX2JsYWNrbGlzdCBbXSA9IHsKLS8qCXsgIkNvbm5lciBQZXJpcGhlcmFscyAxMjc1TUIgLSBDRlMxMjc1QSIsIDQgfSwgKi8KIAl7ICJDb25uZXIgUGVyaXBoZXJhbHMgNTQwTUIgLSBDRlM1NDBBIiwgMyB9LAogCiAJeyAiV0RDIEFDMjcwMCIsICAzIH0sCkBAIC0xMzgsMTAgKzEzNyw4IEBACiAJeyAiV0RDIEFDMTE3MCIsICAxIH0sCiAJeyAiV0RDIEFDMTIxMCIsICAxIH0sCiAJeyAiV0RDIEFDMjgwIiwgICAwIH0sCi0vKgl7ICJXREMgQUMyMTAwMCIsIDQgfSwgKi8KIAl7ICJXREMgQUMzMTAwMCIsIDMgfSwKIAl7ICJXREMgQUMzMTIwMCIsIDMgfSwKLS8qCXsgIldEQyBBQzMxNjAwIiwgNCB9LCAqLwogCiAJeyAiTWF4dG9yIDcxMzEgQVQiLCAxIH0sCiAJeyAiTWF4dG9yIDcxNzEgQVQiLCAxIH0sCkBAIC0xNTUsMTMgKzE1Miw2IEBACiAJeyAiU0FNU1VORyBTSEQtMzEyMkEiLCAxIH0sCiAJeyAiU0FNU1VORyBTSEQtMzE3MkEiLCAxIH0sCiAKLS8qCXsgIlNUNTEwODBBIiwgNCB9LAotICoJeyAiU1Q1MTI3MEEiLCA0IH0sCi0gKgl7ICJTVDMxMjIwQSIsIDQgfSwKLSAqCXsgIlNUMzE2NDBBIiwgNCB9LAotICoJeyAiU1QzMjE0MEEiLCA0IH0sCi0gKgl7ICJTVDM3ODBBIiwgIDQgfSwKLSAqLwogCXsgIlNUNTY2MEEiLCAgMyB9LAogCXsgIlNUMzY2MEEiLCAgMyB9LAogCXsgIlNUMzYzMEEiLCAgMyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBucC5jIGIvZHJpdmVycy9pZGUvaWRlLXBucC5jCmluZGV4IGIxNjNiMmUuLjM0YzJhZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wbnAuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gcG5wX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaHdpZikKLQkJaWRlX3VucmVnaXN0ZXIoaHdpZi0+aW5kZXgsIDAsIDApOworCQlpZGVfdW5yZWdpc3Rlcihod2lmLT5pbmRleCk7CiAJZWxzZQogCQlwcmludGsoS0VSTl9FUlIgImlkZXBucDogVW5hYmxlIHRvIHJlbW92ZSBkZXZpY2UsIHBsZWFzZSByZXBvcnQuXG4iKTsKIH0KQEAgLTg2LDMgKzg2LDUgQEAKIAogbW9kdWxlX2luaXQocG5waWRlX2luaXQpOwogbW9kdWxlX2V4aXQocG5waWRlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDRhMmNiMjguLjZhMTk2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0yNzEsNyArMjcxLDcgQEAKIAkvKiB0YWtlIGEgZGVlcCBicmVhdGggKi8KIAltc2xlZXAoNTApOwogCi0JaWYgKElERV9DT05UUk9MX1JFRykgeworCWlmIChod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKSB7CiAJCWEgPSBpZGVfcmVhZF9hbHRzdGF0dXMoZHJpdmUpOwogCQlzID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKIAkJaWYgKChhIF4gcykgJiB+SU5ERVhfU1RBVCkKQEAgLTI4OSwxMCArMjg5LDEwIEBACiAJICovCiAJaWYgKChjbWQgPT0gV0lOX1BJREVOVElGWSkpCiAJCS8qIGRpc2FibGUgZG1hICYgb3ZlcmxhcCAqLwotCQlod2lmLT5PVVRCKDAsIElERV9GRUFUVVJFX1JFRyk7CisJCWh3aWYtPk9VVEIoMCwgaHdpZi0+aW9fcG9ydHNbSURFX0ZFQVRVUkVfT0ZGU0VUXSk7CiAKIAkvKiBhc2sgZHJpdmUgZm9yIElEICovCi0JaHdpZi0+T1VUQihjbWQsIElERV9DT01NQU5EX1JFRyk7CisJaHdpZi0+T1VUQihjbWQsIGh3aWYtPmlvX3BvcnRzW0lERV9DT01NQU5EX09GRlNFVF0pOwogCiAJdGltZW91dCA9ICgoY21kID09IFdJTl9JREVOVElGWSkgPyBXQUlUX1dPUlNUQ0FTRSA6IFdBSVRfUElERU5USUZZKSAvIDI7CiAJdGltZW91dCArPSBqaWZmaWVzOwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJICogaW50ZXJydXB0cyBkdXJpbmcgdGhlIGlkZW50aWZ5LXBoYXNlIHRoYXQKIAkgKiB0aGUgaXJxIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgogCSAqLwotCWlmIChJREVfQ09OVFJPTF9SRUcpIHsKKwlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSkgewogCQlpZiAoIWh3aWYtPmlycSkgewogCQkJYXV0b3Byb2JlID0gMTsKIAkJCWNvb2tpZSA9IHByb2JlX2lycV9vbigpOwpAQCAtNDQ1LDcgKzQ0NSw4IEBACiAJbXNsZWVwKDUwKTsKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCW1zbGVlcCg1MCk7Ci0JaWYgKGh3aWYtPklOQihJREVfU0VMRUNUX1JFRykgIT0gZHJpdmUtPnNlbGVjdC5hbGwgJiYgIWRyaXZlLT5wcmVzZW50KSB7CisJaWYgKGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfU0VMRUNUX09GRlNFVF0pICE9IGRyaXZlLT5zZWxlY3QuYWxsICYmCisJICAgICFkcml2ZS0+cHJlc2VudCkgewogCQlpZiAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgIT0gMCkgewogCQkJLyogZXhpdCB3aXRoIGRyaXZlMCBzZWxlY3RlZCAqLwogCQkJU0VMRUNUX0RSSVZFKCZod2lmLT5kcml2ZXNbMF0pOwpAQCAtNDc3LDkgKzQ3OCwxMSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcmVzcG9uc2UgKHN0YXR1cyA9IDB4JTAyeCksICIKIAkJCQkJInJlc2V0dGluZyBkcml2ZVxuIiwgZHJpdmUtPm5hbWUsIHN0YXQpOwogCQkJbXNsZWVwKDUwKTsKLQkJCWh3aWYtPk9VVEIoZHJpdmUtPnNlbGVjdC5hbGwsIElERV9TRUxFQ1RfUkVHKTsKKwkJCWh3aWYtPk9VVEIoZHJpdmUtPnNlbGVjdC5hbGwsCisJCQkJICAgaHdpZi0+aW9fcG9ydHNbSURFX1NFTEVDVF9PRkZTRVRdKTsKIAkJCW1zbGVlcCg1MCk7Ci0JCQlod2lmLT5PVVRCKFdJTl9TUlNULCBJREVfQ09NTUFORF9SRUcpOworCQkJaHdpZi0+T1VUQihXSU5fU1JTVCwKKwkJCQkgICBod2lmLT5pb19wb3J0c1tJREVfQ09NTUFORF9PRkZTRVRdKTsKIAkJCSh2b2lkKWlkZV9idXN5X3NsZWVwKGh3aWYpOwogCQkJcmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7CiAJCX0KQEAgLTUxNSw3ICs1MTgsNyBAQAogCXByaW50aygiJXM6IGVuYWJsaW5nICVzIC0tICIsIGh3aWYtPm5hbWUsIGRyaXZlLT5pZC0+bW9kZWwpOwogCVNFTEVDVF9EUklWRShkcml2ZSk7CiAJbXNsZWVwKDUwKTsKLQlod2lmLT5PVVRCKEVYQUJZVEVfRU5BQkxFX05FU1QsIElERV9DT01NQU5EX1JFRyk7CisJaHdpZi0+T1VUQihFWEFCWVRFX0VOQUJMRV9ORVNULCBod2lmLT5pb19wb3J0c1tJREVfQ09NTUFORF9PRkZTRVRdKTsKIAogCWlmIChpZGVfYnVzeV9zbGVlcChod2lmKSkgewogCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWQgKHRpbWVvdXQpXG4iKTsKQEAgLTYyMyw3ICs2MjYsNyBAQAogCWNvbXBsZXRlKCZod2lmLT5nZW5kZXZfcmVsX2NvbXApOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKQorc3RhdGljIGludCBpZGVfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewogCWludCByZXQ7CiAKQEAgLTYzOSw5ICs2NDIsMjMgQEAKIAl9CiAJaHdpZi0+Z2VuZGV2LnJlbGVhc2UgPSBod2lmX3JlbGVhc2VfZGV2OwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmaHdpZi0+Z2VuZGV2KTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJJREU6ICVzOiBkZXZpY2VfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLAogCQkJX19GVU5DVElPTl9fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlnZXRfZGV2aWNlKCZod2lmLT5nZW5kZXYpOworCisJaHdpZi0+cG9ydGRldiA9IGRldmljZV9jcmVhdGUoaWRlX3BvcnRfY2xhc3MsICZod2lmLT5nZW5kZXYsCisJCQkJICAgICAgTUtERVYoMCwgMCksIGh3aWYtPm5hbWUpOworCWlmIChJU19FUlIoaHdpZi0+cG9ydGRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihod2lmLT5wb3J0ZGV2KTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmh3aWYtPmdlbmRldik7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShod2lmLT5wb3J0ZGV2LCBod2lmKTsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTc1Niw3ICs3NzMsOCBAQAogCiAJQlVHX09OKGh3aWYtPnByZXNlbnQpOwogCi0JaWYgKGh3aWYtPm5vcHJvYmUpCisJaWYgKGh3aWYtPm5vcHJvYmUgfHwKKwkgICAgKGh3aWYtPmRyaXZlc1swXS5ub3Byb2JlICYmIGh3aWYtPmRyaXZlc1sxXS5ub3Byb2JlKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAkvKgpAQCAtNzczLDkgKzc5MSwxMCBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdhaXQgZm9yIHJlYWR5IGZhaWxlZCBiZWZvcmUgcHJvYmUgIVxuIiwgaHdpZi0+bmFtZSk7CiAKIAkvKgotCSAqIE5lZWQgdG8gcHJvYmUgc2xhdmUgZGV2aWNlIGZpcnN0IHRvIG1ha2UgaXQgcmVsZWFzZSBQRElBRy0uCisJICogU2Vjb25kIGRyaXZlIHNob3VsZCBvbmx5IGV4aXN0IGlmIGZpcnN0IGRyaXZlIHdhcyBmb3VuZCwKKwkgKiBidXQgYSBsb3Qgb2YgY2Ryb20gZHJpdmVzIGFyZSBjb25maWd1cmVkIGFzIHNpbmdsZSBzbGF2ZXMuCiAJICovCi0JZm9yICh1bml0ID0gTUFYX0RSSVZFUyAtIDE7IHVuaXQgPj0gMDsgdW5pdC0tKSB7CisJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7ICsrdW5pdCkgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOwogCQlkcml2ZS0+ZG4gPSAoaHdpZi0+Y2hhbm5lbCA/IDIgOiAwKSArIHVuaXQ7CiAJCSh2b2lkKSBwcm9iZV9mb3JfZHJpdmUoZHJpdmUpOwpAQCAtOTQ3LDYgKzk2Niw3IEBACiB7CiAJaW50IGk7CiAKKwltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9EUklWRVM7IGkrKykgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOwogCkBAIC05NjEsNiArOTgxLDcgQEAKIAogCQlpZGVfYWRkX2RyaXZlX3RvX2h3Z3JvdXAoZHJpdmUpOwogCX0KKwltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIH0KIAogLyoKQEAgLTEwODYsOCArMTEwNyw2IEBACiAJCQlod2lmLT5zaGFyaW5nX2lycSA/ICJzaGFyIiA6ICJzZXJpYWxpeiIsIG1hdGNoLT5uYW1lKTsKIAlwcmludGsoIlxuIik7CiAKLQlpZGVfcG9ydF9zZXR1cF9kZXZpY2VzKGh3aWYpOwotCiAJbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CiAJcmV0dXJuIDA7CiBvdXRfdW5saW5rOgpAQCAtMTE5Nyw2ICsxMjE2LDggQEAKIHsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBjb250YWluZXJfb2YoZGV2LCBpZGVfZHJpdmVfdCwgZ2VuZGV2KTsKIAorCWlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGRyaXZlKTsKKwogCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKIAlpZGVfcmVtb3ZlX2RyaXZlX2Zyb21faHdncm91cChkcml2ZSk7CiAJa2ZyZWUoZHJpdmUtPmlkKTsKQEAgLTEyMTIsNiArMTIzMywxMCBAQAogCWNvbXBsZXRlKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKIH0KIAorI2lmbmRlZiBpZGVfZGVmYXVsdF9pcnEKKyNkZWZpbmUgaWRlX2RlZmF1bHRfaXJxKGlycSkgMAorI2VuZGlmCisKIHN0YXRpYyBpbnQgaHdpZl9pbml0KGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaW50IG9sZF9pcnE7CkBAIC0xMjIzLDEzICsxMjQ4LDYgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJfQotI2lmZGVmIENPTkZJR19CTEtfREVWX0hECi0JaWYgKGh3aWYtPmlycSA9PSBIRF9JUlEgJiYgaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSAhPSBIRF9EQVRBKSB7Ci0JCXByaW50aygiJXM6IENBTk5PVCBTSEFSRSBJUlEgV0lUSCBPTEQgIgotCQkJIkhBUkRESVNLIERSSVZFUiAoaGQuYylcbiIsIGh3aWYtPm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSEQgKi8KIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoaHdpZi0+bWFqb3IsIGh3aWYtPm5hbWUpKQogCQlyZXR1cm4gMDsKQEAgLTEzNjQsMTMgKzEzODIsNjggQEAKIAkvKiBjYWxsIGNoaXBzZXQgc3BlY2lmaWMgcm91dGluZSBmb3IgZWFjaCBlbmFibGVkIHBvcnQgKi8KIAlpZiAoZC0+aW5pdF9od2lmKQogCQlkLT5pbml0X2h3aWYoaHdpZik7Cit9CiAKK3N0YXRpYyB2b2lkIGlkZV9wb3J0X2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQorewogCWlmIChod2lmLT5jYWJsZV9kZXRlY3QgJiYgKGh3aWYtPnVsdHJhX21hc2sgJiAweDc4KSkgewogCQlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQogCQkJaHdpZi0+Y2JsID0gaHdpZi0+Y2FibGVfZGV0ZWN0KGh3aWYpOwogCX0KIH0KIAorc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVsZXRlX2RldmljZXMoc3RydWN0IGRldmljZSAqcG9ydGRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRldl9nZXRfZHJ2ZGF0YShwb3J0ZGV2KTsKKworCWlmIChzdHJuY21wKGJ1ZiwgIjEiLCBuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZGVfcG9ydF91bnJlZ2lzdGVyX2RldmljZXMoaHdpZik7CisKKwlyZXR1cm4gbjsKK307CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxldGVfZGV2aWNlcywgU19JV1VTUiwgTlVMTCwgc3RvcmVfZGVsZXRlX2RldmljZXMpOworCitzdGF0aWMgc3NpemVfdCBzdG9yZV9zY2FuKHN0cnVjdCBkZXZpY2UgKnBvcnRkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkZXZfZ2V0X2RydmRhdGEocG9ydGRldik7CisKKwlpZiAoc3RybmNtcChidWYsICIxIiwgbikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKGh3aWYpOworCWlkZV9wb3J0X3NjYW4oaHdpZik7CisKKwlyZXR1cm4gbjsKK307CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzY2FuLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9zY2FuKTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICppZGVfcG9ydF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9kZWxldGVfZGV2aWNlcywKKwkmZGV2X2F0dHJfc2NhbiwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGlkZV9zeXNmc19yZWdpc3Rlcl9wb3J0KGlkZV9od2lmX3QgKmh3aWYpCit7CisJaW50IGksIHJjOworCisJZm9yIChpID0gMDsgaWRlX3BvcnRfYXR0cnNbaV07IGkrKykgeworCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShod2lmLT5wb3J0ZGV2LCBpZGVfcG9ydF9hdHRyc1tpXSk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByYzsKK30KKwogaW50IGlkZV9kZXZpY2VfYWRkX2FsbCh1OCAqaWR4LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmLCAqbWF0ZSA9IE5VTEw7CkBAIC0xMzkyLDYgKzE0NjUsNyBAQAogCQltYXRlID0gKGkgJiAxKSA/IE5VTEwgOiBod2lmOwogCiAJCWlkZV9pbml0X3BvcnQoaHdpZiwgaSAmIDEsIGQpOworCQlpZGVfcG9ydF9jYWJsZV9kZXRlY3QoaHdpZik7CiAJCWlkZV9wb3J0X2luaXRfZGV2aWNlcyhod2lmKTsKIAl9CiAKQEAgLTE0MzksNiArMTUxMyw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCisJCWlkZV9wb3J0X3NldHVwX2RldmljZXMoaHdpZik7CisKIAkJaWRlX2FjcGlfaW5pdChod2lmKTsKIAkJaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaHdpZik7CiAJfQpAQCAtMTQ1MCw4ICsxNTI2LDcgQEAKIAkJaHdpZiA9ICZpZGVfaHdpZnNbaWR4W2ldXTsKIAogCQlpZiAoaHdpZi0+cHJlc2VudCkgewotCQkJaWYgKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3Vua25vd24gfHwKLQkJCSAgICBod2lmLT5jaGlwc2V0ID09IGlkZV9mb3JjZWQpCisJCQlpZiAoaHdpZi0+Y2hpcHNldCA9PSBpZGVfdW5rbm93bikKIAkJCQlod2lmLT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAJCQlod2lmX3JlZ2lzdGVyX2RldmljZXMoaHdpZik7CiAJCX0KQEAgLTE0NjQsNiArMTUzOSw3IEBACiAJCWh3aWYgPSAmaWRlX2h3aWZzW2lkeFtpXV07CiAKIAkJaWYgKGh3aWYtPnByZXNlbnQpIHsKKwkJCWlkZV9zeXNmc19yZWdpc3Rlcl9wb3J0KGh3aWYpOwogCQkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKIAkJCWlkZV9wcm9jX3BvcnRfcmVnaXN0ZXJfZGV2aWNlcyhod2lmKTsKIAkJfQpAQCAtMTQ4NCwzICsxNTYwLDIxIEBACiAJcmV0dXJuIGlkZV9kZXZpY2VfYWRkX2FsbChpZHhfYWxsLCBkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXZpY2VfYWRkKTsKKwordm9pZCBpZGVfcG9ydF9zY2FuKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWRlX3BvcnRfY2FibGVfZGV0ZWN0KGh3aWYpOworCWlkZV9wb3J0X2luaXRfZGV2aWNlcyhod2lmKTsKKworCWlmIChpZGVfcHJvYmVfcG9ydChod2lmKSA8IDApCisJCXJldHVybjsKKworCWh3aWYtPnByZXNlbnQgPSAxOworCisJaWRlX3BvcnRfdHVuZV9kZXZpY2VzKGh3aWYpOworCWlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOworCWlkZV9wb3J0X3NldHVwX2RldmljZXMoaHdpZik7CisJaHdpZl9yZWdpc3Rlcl9kZXZpY2VzKGh3aWYpOworCWlkZV9wcm9jX3BvcnRfcmVnaXN0ZXJfZGV2aWNlcyhod2lmKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9wb3J0X3NjYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggYmFiODhjYS4uZWRkN2YxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC00Niw5ICs0Niw2IEBACiAJaW50CQlsZW47CiAJY29uc3QgY2hhcgkqbmFtZTsKIAotCS8qCi0JICogTmVpdGhlciBpZGVfdW5rbm93biBub3IgaWRlX2ZvcmNlZCBzaG91bGQgYmUgc2V0IGF0IHRoaXMgcG9pbnQuCi0JICovCiAJc3dpdGNoIChod2lmLT5jaGlwc2V0KSB7CiAJCWNhc2UgaWRlX2dlbmVyaWM6CW5hbWUgPSAiZ2VuZXJpYyI7CWJyZWFrOwogCQljYXNlIGlkZV9wY2k6CQluYW1lID0gInBjaSI7CQlicmVhazsKQEAgLTc2NCwyNyArNzYxLDE2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBkZXN0cm95X3Byb2NfaWRlX2RldmljZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZiAoZHJpdmUtPnByb2MpIHsKIAkJaWRlX3JlbW92ZV9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGdlbmVyaWNfZHJpdmVfZW50cmllcyk7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KGRyaXZlLT5uYW1lLCBwcm9jX2lkZV9yb290KTsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoZHJpdmUtPm5hbWUsIGh3aWYtPnByb2MpOworCQlyZW1vdmVfcHJvY19lbnRyeShkcml2ZS0+bmFtZSwgZHJpdmUtPmh3aWYtPnByb2MpOwogCQlkcml2ZS0+cHJvYyA9IE5VTEw7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBkZXN0cm95X3Byb2NfaWRlX2RyaXZlcyhpZGVfaHdpZl90ICpod2lmKQotewotCWludAlkOwotCi0JZm9yIChkID0gMDsgZCA8IE1BWF9EUklWRVM7IGQrKykgewotCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2RdOwotCQlpZiAoZHJpdmUtPnByb2MpCi0JCQlkZXN0cm95X3Byb2NfaWRlX2RldmljZShod2lmLCBkcml2ZSk7Ci0JfQotfQotCiBzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBod2lmX2VudHJpZXNbXSA9IHsKIAl7ICJjaGFubmVsIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZV9yZWFkX2NoYW5uZWwsCU5VTEwgfSwKIAl7ICJtYXRlIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZV9yZWFkX21hdGUsCU5VTEwgfSwKQEAgLTgxNiw3ICs4MDIsNiBAQAogdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZiAoaHdpZi0+cHJvYykgewotCQlkZXN0cm95X3Byb2NfaWRlX2RyaXZlcyhod2lmKTsKIAkJaWRlX3JlbW92ZV9wcm9jX2VudHJpZXMoaHdpZi0+cHJvYywgaHdpZl9lbnRyaWVzKTsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoaHdpZi0+bmFtZSwgcHJvY19pZGVfcm9vdCk7CiAJCWh3aWYtPnByb2MgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXNjYW4tcGNpLmMgYi9kcml2ZXJzL2lkZS9pZGUtc2Nhbi1wY2kuYwppbmRleCA5M2QyZTQxLi45ODg4OGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtc2Nhbi1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtc2Nhbi1wY2kuYwpAQCAtODgsMTMgKzg4LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKIAogCXByZV9pbml0ID0gMDsKLQlpZiAoIWlkZV9zY2FuX2RpcmVjdGlvbikKLQkJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSkKLQkJCWlkZV9zY2FuX3BjaWRldihkZXYpOwotCWVsc2UKLQkJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZV9yZXZlcnNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JCQkJCQkgICAgIGRldikpKQotCQkJaWRlX3NjYW5fcGNpZGV2KGRldik7CisJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSkKKwkJaWRlX3NjYW5fcGNpZGV2KGRldik7CiAKIAkvKgogCSAqCUhhbmQgdGhlIGRyaXZlcnMgb3ZlciB0byB0aGUgUENJIGxheWVyIG5vdyB3ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKaW5kZXggMDU5OGVjZi4uZjQzZmQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCkBAIC0xODEsNDkgKzE4MSw2MyBAQAogCWNoYXIgKmJfZGF0YTsKIH07CiAKLXR5cGVkZWYgc3RydWN0IGlkZXRhcGVfcGFja2V0X2NvbW1hbmRfcyB7Ci0JLyogQWN0dWFsIHBhY2tldCBieXRlcyAqLwotCXU4IGNbMTJdOwotCS8qIE9uIGVhY2ggcmV0cnksIHdlIGluY3JlbWVudCByZXRyaWVzICovCi0JaW50IHJldHJpZXM7Ci0JLyogRXJyb3IgY29kZSAqLwotCWludCBlcnJvcjsKLQkvKiBCeXRlcyB0byB0cmFuc2ZlciAqLwotCWludCByZXF1ZXN0X3RyYW5zZmVyOwotCS8qIEJ5dGVzIGFjdHVhbGx5IHRyYW5zZmVycmVkICovCi0JaW50IGFjdHVhbGx5X3RyYW5zZmVycmVkOwotCS8qIFNpemUgb2Ygb3VyIGRhdGEgYnVmZmVyICovCi0JaW50IGJ1ZmZlcl9zaXplOwotCXN0cnVjdCBpZGV0YXBlX2JoICpiaDsKLQljaGFyICpiX2RhdGE7Ci0JaW50IGJfY291bnQ7Ci0JLyogRGF0YSBidWZmZXIgKi8KLQl1OCAqYnVmZmVyOwotCS8qIFBvaW50ZXIgaW50byB0aGUgYWJvdmUgYnVmZmVyICovCi0JdTggKmN1cnJlbnRfcG9zaXRpb247Ci0JLyogQ2FsbGVkIHdoZW4gdGhpcyBwYWNrZXQgY29tbWFuZCBpcyBjb21wbGV0ZWQgKi8KLQlpZGVfc3RhcnRzdG9wX3QgKCpjYWxsYmFjaykgKGlkZV9kcml2ZV90ICopOwotCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLQl1OCBwY19idWZmZXJbSURFVEFQRV9QQ19CVUZGRVJfU0laRV07Ci0JLyogU3RhdHVzL0FjdGlvbiBiaXQgZmxhZ3M6IGxvbmcgZm9yIHNldF9iaXQgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotfSBpZGV0YXBlX3BjX3Q7CisvKiBUYXBlIGRvb3Igc3RhdHVzICovCisjZGVmaW5lIERPT1JfVU5MT0NLRUQJCQkwCisjZGVmaW5lIERPT1JfTE9DS0VECQkJMQorI2RlZmluZSBET09SX0VYUExJQ0lUTFlfTE9DS0VECQkyCisKKy8qIFNvbWUgZGVmaW5lcyBmb3IgdGhlIFNQQUNFIGNvbW1hbmQgKi8KKyNkZWZpbmUgSURFVEFQRV9TUEFDRV9PVkVSX0ZJTEVNQVJLCTEKKyNkZWZpbmUgSURFVEFQRV9TUEFDRV9UT19FT0QJCTMKKworLyogU29tZSBkZWZpbmVzIGZvciB0aGUgTE9BRCBVTkxPQUQgY29tbWFuZCAqLworI2RlZmluZSBJREVUQVBFX0xVX0xPQURfTUFTSwkJMQorI2RlZmluZSBJREVUQVBFX0xVX1JFVEVOU0lPTl9NQVNLCTIKKyNkZWZpbmUgSURFVEFQRV9MVV9FT1RfTUFTSwkJNAogCiAvKgotICoJUGFja2V0IGNvbW1hbmQgZmxhZyBiaXRzLgorICogU3BlY2lhbCByZXF1ZXN0cyBmb3Igb3VyIGJsb2NrIGRldmljZSBzdHJhdGVneSByb3V0aW5lLgorICoKKyAqIEluIG9yZGVyIHRvIHNlcnZpY2UgYSBjaGFyYWN0ZXIgZGV2aWNlIGNvbW1hbmQsIHdlIGFkZCBzcGVjaWFsIHJlcXVlc3RzIHRvCisgKiB0aGUgdGFpbCBvZiBvdXIgYmxvY2sgZGV2aWNlIHJlcXVlc3QgcXVldWUgYW5kIHdhaXQgZm9yIHRoZWlyIGNvbXBsZXRpb24uCiAgKi8KLS8qIFNldCB3aGVuIGFuIGVycm9yIGlzIGNvbnNpZGVyZWQgbm9ybWFsIC0gV2Ugd29uJ3QgcmV0cnkgKi8KLSNkZWZpbmUJUENfQUJPUlQJCQkwCi0vKiAxIFdoZW4gcG9sbGluZyBmb3IgRFNDIG9uIGEgbWVkaWEgYWNjZXNzIGNvbW1hbmQgKi8KLSNkZWZpbmUgUENfV0FJVF9GT1JfRFNDCQkJMQotLyogMSB3aGVuIHdlIHByZWZlciB0byB1c2UgRE1BIGlmIHBvc3NpYmxlICovCi0jZGVmaW5lIFBDX0RNQV9SRUNPTU1FTkRFRAkJMgotLyogMSB3aGlsZSBETUEgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUJUENfRE1BX0lOX1BST0dSRVNTCQkzCi0vKiAxIHdoZW4gZW5jb3VudGVyZWQgcHJvYmxlbSBkdXJpbmcgRE1BICovCi0jZGVmaW5lCVBDX0RNQV9FUlJPUgkJCTQKLS8qIERhdGEgZGlyZWN0aW9uICovCi0jZGVmaW5lCVBDX1dSSVRJTkcJCQk1CisKK2VudW0geworCVJFUV9JREVUQVBFX1BDMQkJPSAoMSA8PCAwKSwgLyogcGFja2V0IGNvbW1hbmQgKGZpcnN0IHN0YWdlKSAqLworCVJFUV9JREVUQVBFX1BDMgkJPSAoMSA8PCAxKSwgLyogcGFja2V0IGNvbW1hbmQgKHNlY29uZCBzdGFnZSkgKi8KKwlSRVFfSURFVEFQRV9SRUFECT0gKDEgPDwgMiksCisJUkVRX0lERVRBUEVfV1JJVEUJPSAoMSA8PCAzKSwKK307CisKKy8qIEVycm9yIGNvZGVzIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCisjZGVmaW5lIElERVRBUEVfRVJST1JfR0VORVJBTAkJMTAxCisjZGVmaW5lIElERVRBUEVfRVJST1JfRklMRU1BUksJCTEwMgorI2RlZmluZSBJREVUQVBFX0VSUk9SX0VPRAkJMTAzCisKKy8qIFN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgU0VMRUNUIFNFTlNFIC8gTU9ERSBTRU5TRSBwYWNrZXQgY29tbWFuZHMuICovCisjZGVmaW5lIElERVRBUEVfQkxPQ0tfREVTQ1JJUFRPUgkwCisjZGVmaW5lIElERVRBUEVfQ0FQQUJJTElUSUVTX1BBR0UJMHgyYQorCisvKiBUYXBlIGZsYWcgYml0cyB2YWx1ZXMuICovCitlbnVtIHsKKwlJREVUQVBFX0ZMQUdfSUdOT1JFX0RTQwkJPSAoMSA8PCAwKSwKKwkvKiAwIFdoZW4gdGhlIHRhcGUgcG9zaXRpb24gaXMgdW5rbm93biAqLworCUlERVRBUEVfRkxBR19BRERSRVNTX1ZBTElECT0gKDEgPDwJMSksCisJLyogRGV2aWNlIGFscmVhZHkgb3BlbmVkICovCisJSURFVEFQRV9GTEFHX0JVU1kJCQk9ICgxIDw8IDIpLAorCS8qIEVycm9yIGRldGVjdGVkIGluIGEgcGlwZWxpbmUgc3RhZ2UgKi8KKwlJREVUQVBFX0ZMQUdfUElQRUxJTkVfRVJSCT0gKDEgPDwJMyksCisJLyogQXR0ZW1wdCB0byBhdXRvLWRldGVjdCB0aGUgY3VycmVudCB1c2VyIGJsb2NrIHNpemUgKi8KKwlJREVUQVBFX0ZMQUdfREVURUNUX0JTCQk9ICgxIDw8IDQpLAorCS8qIEN1cnJlbnRseSBvbiBhIGZpbGVtYXJrICovCisJSURFVEFQRV9GTEFHX0ZJTEVNQVJLCQk9ICgxIDw8IDUpLAorCS8qIERSUSBpbnRlcnJ1cHQgZGV2aWNlICovCisJSURFVEFQRV9GTEFHX0RSUV9JTlRFUlJVUFQJPSAoMSA8PCA2KSwKKwkvKiBwaXBlbGluZSBhY3RpdmUgKi8KKwlJREVUQVBFX0ZMQUdfUElQRUxJTkVfQUNUSVZFCT0gKDEgPDwgNyksCisJLyogMCA9IG5vIHRhcGUgaXMgbG9hZGVkLCBzbyB3ZSBkb24ndCByZXdpbmQgYWZ0ZXIgZWplY3RpbmcgKi8KKwlJREVUQVBFX0ZMQUdfTUVESVVNX1BSRVNFTlQJPSAoMSA8PCA4KSwKK307CiAKIC8qIEEgcGlwZWxpbmUgc3RhZ2UuICovCiB0eXBlZGVmIHN0cnVjdCBpZGV0YXBlX3N0YWdlX3MgewpAQCAtMjU4LDExICsyNzIsMTEgQEAKIAkgKglyZXRyeSwgdG8gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgd2VudCB3cm9uZy4KIAkgKi8KIAkvKiBDdXJyZW50IHBhY2tldCBjb21tYW5kICovCi0JaWRldGFwZV9wY190ICpwYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwotCWlkZXRhcGVfcGNfdCAqZmFpbGVkX3BjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKIAkvKiBQYWNrZXQgY29tbWFuZCBzdGFjayAqLwotCWlkZXRhcGVfcGNfdCBwY19zdGFja1tJREVUQVBFX1BDX1NUQUNLXTsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjX3N0YWNrW0lERVRBUEVfUENfU1RBQ0tdOwogCS8qIE5leHQgZnJlZSBwYWNrZXQgY29tbWFuZCBzdG9yYWdlIHNwYWNlICovCiAJaW50IHBjX3N0YWNrX2luZGV4OwogCXN0cnVjdCByZXF1ZXN0IHJxX3N0YWNrW0lERVRBUEVfUENfU1RBQ0tdOwpAQCAtNDQ2LDU4ICs0NjAsNiBAQAogCW11dGV4X3VubG9jaygmaWRldGFwZV9yZWZfbXV0ZXgpOwogfQogCi0vKiBUYXBlIGRvb3Igc3RhdHVzICovCi0jZGVmaW5lIERPT1JfVU5MT0NLRUQJCQkwCi0jZGVmaW5lIERPT1JfTE9DS0VECQkJMQotI2RlZmluZSBET09SX0VYUExJQ0lUTFlfTE9DS0VECQkyCi0KLS8qCi0gKglUYXBlIGZsYWcgYml0cyB2YWx1ZXMuCi0gKi8KLSNkZWZpbmUgSURFVEFQRV9JR05PUkVfRFNDCQkwCi0jZGVmaW5lIElERVRBUEVfQUREUkVTU19WQUxJRAkJMQkvKiAwIFdoZW4gdGhlIHRhcGUgcG9zaXRpb24gaXMgdW5rbm93biAqLwotI2RlZmluZSBJREVUQVBFX0JVU1kJCQkyCS8qIERldmljZSBhbHJlYWR5IG9wZW5lZCAqLwotI2RlZmluZSBJREVUQVBFX1BJUEVMSU5FX0VSUk9SCQkzCS8qIEVycm9yIGRldGVjdGVkIGluIGEgcGlwZWxpbmUgc3RhZ2UgKi8KLSNkZWZpbmUgSURFVEFQRV9ERVRFQ1RfQlMJCTQJLyogQXR0ZW1wdCB0byBhdXRvLWRldGVjdCB0aGUgY3VycmVudCB1c2VyIGJsb2NrIHNpemUgKi8KLSNkZWZpbmUgSURFVEFQRV9GSUxFTUFSSwkJNQkvKiBDdXJyZW50bHkgb24gYSBmaWxlbWFyayAqLwotI2RlZmluZSBJREVUQVBFX0RSUV9JTlRFUlJVUFQJCTYJLyogRFJRIGludGVycnVwdCBkZXZpY2UgKi8KLSNkZWZpbmUgSURFVEFQRV9SRUFEX0VSUk9SCQk3Ci0jZGVmaW5lIElERVRBUEVfUElQRUxJTkVfQUNUSVZFCQk4CS8qIHBpcGVsaW5lIGFjdGl2ZSAqLwotLyogMCA9IG5vIHRhcGUgaXMgbG9hZGVkLCBzbyB3ZSBkb24ndCByZXdpbmQgYWZ0ZXIgZWplY3RpbmcgKi8KLSNkZWZpbmUgSURFVEFQRV9NRURJVU1fUFJFU0VOVAkJOQotCi0vKiBTb21lIGRlZmluZXMgZm9yIHRoZSBTUEFDRSBjb21tYW5kICovCi0jZGVmaW5lIElERVRBUEVfU1BBQ0VfT1ZFUl9GSUxFTUFSSwkxCi0jZGVmaW5lIElERVRBUEVfU1BBQ0VfVE9fRU9ECQkzCi0KLS8qIFNvbWUgZGVmaW5lcyBmb3IgdGhlIExPQUQgVU5MT0FEIGNvbW1hbmQgKi8KLSNkZWZpbmUgSURFVEFQRV9MVV9MT0FEX01BU0sJCTEKLSNkZWZpbmUgSURFVEFQRV9MVV9SRVRFTlNJT05fTUFTSwkyCi0jZGVmaW5lIElERVRBUEVfTFVfRU9UX01BU0sJCTQKLQotLyoKLSAqIFNwZWNpYWwgcmVxdWVzdHMgZm9yIG91ciBibG9jayBkZXZpY2Ugc3RyYXRlZ3kgcm91dGluZS4KLSAqCi0gKiBJbiBvcmRlciB0byBzZXJ2aWNlIGEgY2hhcmFjdGVyIGRldmljZSBjb21tYW5kLCB3ZSBhZGQgc3BlY2lhbCByZXF1ZXN0cyB0bwotICogdGhlIHRhaWwgb2Ygb3VyIGJsb2NrIGRldmljZSByZXF1ZXN0IHF1ZXVlIGFuZCB3YWl0IGZvciB0aGVpciBjb21wbGV0aW9uLgotICovCi0KLWVudW0gewotCVJFUV9JREVUQVBFX1BDMQkJPSAoMSA8PCAwKSwgLyogcGFja2V0IGNvbW1hbmQgKGZpcnN0IHN0YWdlKSAqLwotCVJFUV9JREVUQVBFX1BDMgkJPSAoMSA8PCAxKSwgLyogcGFja2V0IGNvbW1hbmQgKHNlY29uZCBzdGFnZSkgKi8KLQlSRVFfSURFVEFQRV9SRUFECT0gKDEgPDwgMiksCi0JUkVRX0lERVRBUEVfV1JJVEUJPSAoMSA8PCAzKSwKLX07Ci0KLS8qIEVycm9yIGNvZGVzIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCi0jZGVmaW5lCUlERVRBUEVfRVJST1JfR0VORVJBTAkJMTAxCi0jZGVmaW5lCUlERVRBUEVfRVJST1JfRklMRU1BUksJCTEwMgotI2RlZmluZQlJREVUQVBFX0VSUk9SX0VPRAkJMTAzCi0KLS8qIFN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgU0VMRUNUIFNFTlNFIC8gTU9ERSBTRU5TRSBwYWNrZXQgY29tbWFuZHMuICovCi0jZGVmaW5lIElERVRBUEVfQkxPQ0tfREVTQ1JJUFRPUgkwCi0jZGVmaW5lCUlERVRBUEVfQ0FQQUJJTElUSUVTX1BBR0UJMHgyYQotCiAvKgogICogVGhlIHZhcmlhYmxlcyBiZWxvdyBhcmUgdXNlZCBmb3IgdGhlIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlLiBBZGRpdGlvbmFsCiAgKiBzdGF0ZSB2YXJpYWJsZXMgYXJlIGRlZmluZWQgaW4gb3VyIGlkZV9kcml2ZV90IHN0cnVjdHVyZS4KQEAgLTUxOCwxNyArNDgwLDcgQEAKIAlyZXR1cm4gdGFwZTsKIH0KIAotLyoKLSAqIFRvbyBiYWQuIFRoZSBkcml2ZSB3YW50cyB0byBzZW5kIHVzIGRhdGEgd2hpY2ggd2UgYXJlIG5vdCByZWFkeSB0byBhY2NlcHQuCi0gKiBKdXN0IHRocm93IGl0IGF3YXkuCi0gKi8KLXN0YXRpYyB2b2lkIGlkZXRhcGVfZGlzY2FyZF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IGJjb3VudCkKLXsKLQl3aGlsZSAoYmNvdW50LS0pCi0JCSh2b2lkKSBIV0lGKGRyaXZlKS0+SU5CKElERV9EQVRBX1JFRyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZXRhcGVfaW5wdXRfYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXRhcGVfcGNfdCAqcGMsCitzdGF0aWMgdm9pZCBpZGV0YXBlX2lucHV0X2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKIAkJCQkgIHVuc2lnbmVkIGludCBiY291bnQpCiB7CiAJc3RydWN0IGlkZXRhcGVfYmggKmJoID0gcGMtPmJoOwpAQCAtNTM4LDcgKzQ5MCw3IEBACiAJCWlmIChiaCA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBiaCA9PSBOVUxMIGluICIKIAkJCQkiaWRldGFwZV9pbnB1dF9idWZmZXJzXG4iKTsKLQkJCWlkZXRhcGVfZGlzY2FyZF9kYXRhKGRyaXZlLCBiY291bnQpOworCQkJaWRlX2F0YXBpX2Rpc2NhcmRfZGF0YShkcml2ZSwgYmNvdW50KTsKIAkJCXJldHVybjsKIAkJfQogCQljb3VudCA9IG1pbigKQEAgLTU1Nyw3ICs1MDksNyBAQAogCXBjLT5iaCA9IGJoOwogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX291dHB1dF9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRldGFwZV9wY190ICpwYywKK3N0YXRpYyB2b2lkIGlkZXRhcGVfb3V0cHV0X2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKIAkJCQkgICB1bnNpZ25lZCBpbnQgYmNvdW50KQogewogCXN0cnVjdCBpZGV0YXBlX2JoICpiaCA9IHBjLT5iaDsKQEAgLTU4NSwxMyArNTM3LDEzIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX3VwZGF0ZV9idWZmZXJzKGlkZXRhcGVfcGNfdCAqcGMpCitzdGF0aWMgdm9pZCBpZGV0YXBlX3VwZGF0ZV9idWZmZXJzKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCXN0cnVjdCBpZGV0YXBlX2JoICpiaCA9IHBjLT5iaDsKIAlpbnQgY291bnQ7Ci0JdW5zaWduZWQgaW50IGJjb3VudCA9IHBjLT5hY3R1YWxseV90cmFuc2ZlcnJlZDsKKwl1bnNpZ25lZCBpbnQgYmNvdW50ID0gcGMtPnhmZXJyZWQ7CiAKLQlpZiAodGVzdF9iaXQoUENfV1JJVElORywgJnBjLT5mbGFncykpCisJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfV1JJVElORykKIAkJcmV0dXJuOwogCXdoaWxlIChiY291bnQpIHsKIAkJaWYgKGJoID09IE5VTEwpIHsKQEAgLTYxNCw3ICs1NjYsNyBAQAogICoJZHJpdmVyLiBBIHN0b3JhZ2Ugc3BhY2UgZm9yIGEgbWF4aW11bSBvZiBJREVUQVBFX1BDX1NUQUNLIHBhY2tldAogICoJY29tbWFuZHMgaXMgYWxsb2NhdGVkIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCiAgKi8KLXN0YXRpYyBpZGV0YXBlX3BjX3QgKmlkZXRhcGVfbmV4dF9wY19zdG9yYWdlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBzdHJ1Y3QgaWRlX2F0YXBpX3BjICppZGV0YXBlX25leHRfcGNfc3RvcmFnZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKQEAgLTY0OSwxNCArNjAxLDE0IEBACiAJcmV0dXJuICgmdGFwZS0+cnFfc3RhY2tbdGFwZS0+cnFfc3RhY2tfaW5kZXgrK10pOwogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX2luaXRfcGMoaWRldGFwZV9wY190ICpwYykKK3N0YXRpYyB2b2lkIGlkZXRhcGVfaW5pdF9wYyhzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAltZW1zZXQocGMtPmMsIDAsIDEyKTsKIAlwYy0+cmV0cmllcyA9IDA7CiAJcGMtPmZsYWdzID0gMDsKLQlwYy0+cmVxdWVzdF90cmFuc2ZlciA9IDA7Ci0JcGMtPmJ1ZmZlciA9IHBjLT5wY19idWZmZXI7Ci0JcGMtPmJ1ZmZlcl9zaXplID0gSURFVEFQRV9QQ19CVUZGRVJfU0laRTsKKwlwYy0+cmVxX3hmZXIgPSAwOworCXBjLT5idWYgPSBwYy0+cGNfYnVmOworCXBjLT5idWZfc2l6ZSA9IElERVRBUEVfUENfQlVGRkVSX1NJWkU7CiAJcGMtPmJoID0gTlVMTDsKIAlwYy0+Yl9kYXRhID0gTlVMTDsKIH0KQEAgLTY2OCw3ICs2MjAsNyBAQAogc3RhdGljIHZvaWQgaWRldGFwZV9hbmFseXplX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKnNlbnNlKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZXRhcGVfcGNfdCAqcGMgPSB0YXBlLT5mYWlsZWRfcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSB0YXBlLT5mYWlsZWRfcGM7CiAKIAl0YXBlLT5zZW5zZV9rZXkgPSBzZW5zZVsyXSAmIDB4RjsKIAl0YXBlLT5hc2MgICAgICAgPSBzZW5zZVsxMl07CkBAIC02NzcsOSArNjI5LDkgQEAKIAlkZWJ1Z19sb2coREJHX0VSUiwgInBjID0gJXgsIHNlbnNlIGtleSA9ICV4LCBhc2MgPSAleCwgYXNjcSA9ICV4XG4iLAogCQkgcGMtPmNbMF0sIHRhcGUtPnNlbnNlX2tleSwgdGFwZS0+YXNjLCB0YXBlLT5hc2NxKTsKIAotCS8qIENvcnJlY3QgcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkIGJ5IGFza2luZyB0aGUgdGFwZS4JICovCi0JaWYgKHRlc3RfYml0KFBDX0RNQV9FUlJPUiwgJnBjLT5mbGFncykpIHsKLQkJcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkID0gcGMtPnJlcXVlc3RfdHJhbnNmZXIgLQorCS8qIENvcnJlY3QgcGMtPnhmZXJyZWQgYnkgYXNraW5nIHRoZSB0YXBlLgkgKi8KKwlpZiAocGMtPmZsYWdzICYgUENfRkxBR19ETUFfRVJST1IpIHsKKwkJcGMtPnhmZXJyZWQgPSBwYy0+cmVxX3hmZXIgLQogCQkJdGFwZS0+YmxrX3NpemUgKgogCQkJYmUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgodTMyICopJnNlbnNlWzNdKSk7CiAJCWlkZXRhcGVfdXBkYXRlX2J1ZmZlcnMocGMpOwpAQCAtNjk3LDI3ICs2NDksMjcgQEAKIAkJCS8qIGRvbid0IHJlcG9ydCBhbiBlcnJvciwgZXZlcnl0aGluZydzIG9rICovCiAJCQlwYy0+ZXJyb3IgPSAwOwogCQkJLyogZG9uJ3QgcmV0cnkgcmVhZC93cml0ZSAqLwotCQkJc2V0X2JpdChQQ19BQk9SVCwgJnBjLT5mbGFncyk7CisJCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19BQk9SVDsKIAkJfQogCX0KIAlpZiAocGMtPmNbMF0gPT0gUkVBRF82ICYmIChzZW5zZVsyXSAmIDB4ODApKSB7CiAJCXBjLT5lcnJvciA9IElERVRBUEVfRVJST1JfRklMRU1BUks7Ci0JCXNldF9iaXQoUENfQUJPUlQsICZwYy0+ZmxhZ3MpOworCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19BQk9SVDsKIAl9CiAJaWYgKHBjLT5jWzBdID09IFdSSVRFXzYpIHsKIAkJaWYgKChzZW5zZVsyXSAmIDB4NDApIHx8ICh0YXBlLT5zZW5zZV9rZXkgPT0gMHhkCiAJCSAgICAgJiYgdGFwZS0+YXNjID09IDB4MCAmJiB0YXBlLT5hc2NxID09IDB4MikpIHsKIAkJCXBjLT5lcnJvciA9IElERVRBUEVfRVJST1JfRU9EOwotCQkJc2V0X2JpdChQQ19BQk9SVCwgJnBjLT5mbGFncyk7CisJCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19BQk9SVDsKIAkJfQogCX0KIAlpZiAocGMtPmNbMF0gPT0gUkVBRF82IHx8IHBjLT5jWzBdID09IFdSSVRFXzYpIHsKIAkJaWYgKHRhcGUtPnNlbnNlX2tleSA9PSA4KSB7CiAJCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0VPRDsKLQkJCXNldF9iaXQoUENfQUJPUlQsICZwYy0+ZmxhZ3MpOworCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfQUJPUlQ7CiAJCX0KLQkJaWYgKCF0ZXN0X2JpdChQQ19BQk9SVCwgJnBjLT5mbGFncykgJiYKLQkJICAgIHBjLT5hY3R1YWxseV90cmFuc2ZlcnJlZCkKKwkJaWYgKCEocGMtPmZsYWdzICYgUENfRkxBR19BQk9SVCkgJiYKKwkJICAgIHBjLT54ZmVycmVkKQogCQkJcGMtPnJldHJpZXMgPSBJREVUQVBFX01BWF9QQ19SRVRSSUVTICsgMTsKIAl9CiB9CkBAIC04NzIsMTQgKzgyNCwxNiBAQAogCQlpZiAocnEtPmNtZFswXSAmIFJFUV9JREVUQVBFX1dSSVRFKSB7CiAJCQlyZW1vdmVfc3RhZ2UgPSAxOwogCQkJaWYgKGVycm9yKSB7Ci0JCQkJc2V0X2JpdChJREVUQVBFX1BJUEVMSU5FX0VSUk9SLCAmdGFwZS0+ZmxhZ3MpOworCQkJCXNldF9iaXQoSURFVEFQRV9GTEFHX1BJUEVMSU5FX0VSUiwKKwkJCQkJJnRhcGUtPmZsYWdzKTsKIAkJCQlpZiAoZXJyb3IgPT0gSURFVEFQRV9FUlJPUl9FT0QpCiAJCQkJCWlkZXRhcGVfYWJvcnRfcGlwZWxpbmUoZHJpdmUsCiAJCQkJCQkJCWFjdGl2ZV9zdGFnZSk7CiAJCQl9CiAJCX0gZWxzZSBpZiAocnEtPmNtZFswXSAmIFJFUV9JREVUQVBFX1JFQUQpIHsKIAkJCWlmIChlcnJvciA9PSBJREVUQVBFX0VSUk9SX0VPRCkgewotCQkJCXNldF9iaXQoSURFVEFQRV9QSVBFTElORV9FUlJPUiwgJnRhcGUtPmZsYWdzKTsKKwkJCQlzZXRfYml0KElERVRBUEVfRkxBR19QSVBFTElORV9FUlIsCisJCQkJCSZ0YXBlLT5mbGFncyk7CiAJCQkJaWRldGFwZV9hYm9ydF9waXBlbGluZShkcml2ZSwgYWN0aXZlX3N0YWdlKTsKIAkJCX0KIAkJfQpAQCAtOTEyLDcgKzg2Niw3IEBACiAJaWYgKHJlbW92ZV9zdGFnZSkKIAkJaWRldGFwZV9yZW1vdmVfc3RhZ2VfaGVhZChkcml2ZSk7CiAJaWYgKHRhcGUtPmFjdGl2ZV9kYXRhX3JxID09IE5VTEwpCi0JCWNsZWFyX2JpdChJREVUQVBFX1BJUEVMSU5FX0FDVElWRSwgJnRhcGUtPmZsYWdzKTsKKwkJY2xlYXJfYml0KElERVRBUEVfRkxBR19QSVBFTElORV9BQ1RJVkUsICZ0YXBlLT5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFwZS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtOTI0LDcgKzg3OCw3IEBACiAJZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIXRhcGUtPnBjLT5lcnJvcikgewotCQlpZGV0YXBlX2FuYWx5emVfZXJyb3IoZHJpdmUsIHRhcGUtPnBjLT5idWZmZXIpOworCQlpZGV0YXBlX2FuYWx5emVfZXJyb3IoZHJpdmUsIHRhcGUtPnBjLT5idWYpOwogCQlpZGV0YXBlX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBFcnJvciBpbiBSRVFVRVNUIFNFTlNFIGl0c2VsZiAtICIKQEAgLTkzNCwxMyArODg4LDEzIEBACiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChpZGV0YXBlX3BjX3QgKnBjKQorc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRldGFwZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IFJFUVVFU1RfU0VOU0U7CiAJcGMtPmNbNF0gPSAyMDsKLQlwYy0+cmVxdWVzdF90cmFuc2ZlciA9IDIwOwotCXBjLT5jYWxsYmFjayA9ICZpZGV0YXBlX3JlcXVlc3Rfc2Vuc2VfY2FsbGJhY2s7CisJcGMtPnJlcV94ZmVyID0gMjA7CisJcGMtPmlkZXRhcGVfY2FsbGJhY2sgPSAmaWRldGFwZV9yZXF1ZXN0X3NlbnNlX2NhbGxiYWNrOwogfQogCiBzdGF0aWMgdm9pZCBpZGV0YXBlX2luaXRfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBjbWQpCkBAIC05NjUsNyArOTE5LDcgQEAKICAqIGhhbmRsaW5nIGZ1bmN0aW9ucyBzaG91bGQgcXVldWUgcmVxdWVzdCB0byB0aGUgbG93ZXIgbGV2ZWwgcGFydCBhbmQgd2FpdCBmb3IKICAqIHRoZWlyIGNvbXBsZXRpb24gdXNpbmcgaWRldGFwZV9xdWV1ZV9wY190YWlsIG9yIGlkZXRhcGVfcXVldWVfcndfdGFpbC4KICAqLwotc3RhdGljIHZvaWQgaWRldGFwZV9xdWV1ZV9wY19oZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRldGFwZV9wY190ICpwYywKK3N0YXRpYyB2b2lkIGlkZXRhcGVfcXVldWVfcGNfaGVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAogCQkJCSAgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CkBAIC05ODQsMTQgKzkzOCwxNCBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX3JldHJ5X3BjIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JaWRldGFwZV9wY190ICpwYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAKIAkodm9pZClpZGVfcmVhZF9lcnJvcihkcml2ZSk7CiAJcGMgPSBpZGV0YXBlX25leHRfcGNfc3RvcmFnZShkcml2ZSk7CiAJcnEgPSBpZGV0YXBlX25leHRfcnFfc3RvcmFnZShkcml2ZSk7CiAJaWRldGFwZV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQocGMpOwotCXNldF9iaXQoSURFVEFQRV9JR05PUkVfRFNDLCAmdGFwZS0+ZmxhZ3MpOworCXNldF9iaXQoSURFVEFQRV9GTEFHX0lHTk9SRV9EU0MsICZ0YXBlLT5mbGFncyk7CiAJaWRldGFwZV9xdWV1ZV9wY19oZWFkKGRyaXZlLCBwYywgcnEpOwogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KQEAgLTEwMTAsNyArOTY0LDcgQEAKIAlpZGVfc3RhbGxfcXVldWUoZHJpdmUsIHRhcGUtPmRzY19wb2xsX2ZyZXEpOwogfQogCi10eXBlZGVmIHZvaWQgaWRldGFwZV9pb19idWYoaWRlX2RyaXZlX3QgKiwgaWRldGFwZV9wY190ICosIHVuc2lnbmVkIGludCk7Cit0eXBlZGVmIHZvaWQgaWRldGFwZV9pb19idWYoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLCB1bnNpZ25lZCBpbnQpOwogCiAvKgogICogVGhpcyBpcyB0aGUgdXN1YWwgaW50ZXJydXB0IGhhbmRsZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGEgcGFja2V0CkBAIC0xMDIzLDcgKzk3Nyw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZXRhcGVfcGNfdCAqcGMgPSB0YXBlLT5wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IHRhcGUtPnBjOwogCXhmZXJfZnVuY190ICp4ZmVyZnVuYzsKIAlpZGV0YXBlX2lvX2J1ZiAqaW9idWY7CiAJdW5zaWduZWQgaW50IHRlbXA7CkBAIC0xMDM4LDcgKzk5Miw3IEBACiAJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLwogCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOwogCi0JaWYgKHRlc3RfYml0KFBDX0RNQV9JTl9QUk9HUkVTUywgJnBjLT5mbGFncykpIHsKKwlpZiAocGMtPmZsYWdzICYgUENfRkxBR19ETUFfSU5fUFJPR1JFU1MpIHsKIAkJaWYgKGh3aWYtPmlkZV9kbWFfZW5kKGRyaXZlKSB8fCAoc3RhdCAmIEVSUl9TVEFUKSkgewogCQkJLyoKIAkJCSAqIEEgRE1BIGVycm9yIGlzIHNvbWV0aW1lcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsCkBAIC0xMDYxLDkgKzEwMTUsOSBAQAogCQkJICogZGF0YSB0cmFuc2ZlciB3aWxsIG9jY3VyLCBidXQgbm8gRE1BIGVycm9yLgogCQkJICogKEFTLCAxOSBBcHIgMjAwMSkKIAkJCSAqLwotCQkJc2V0X2JpdChQQ19ETUFfRVJST1IsICZwYy0+ZmxhZ3MpOworCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfRE1BX0VSUk9SOwogCQl9IGVsc2UgewotCQkJcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkID0gcGMtPnJlcXVlc3RfdHJhbnNmZXI7CisJCQlwYy0+eGZlcnJlZCA9IHBjLT5yZXFfeGZlcjsKIAkJCWlkZXRhcGVfdXBkYXRlX2J1ZmZlcnMocGMpOwogCQl9CiAJCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJETUEgZmluaXNoZWRcbiIpOwpAQCAtMTA3Myw5ICsxMDI3LDkgQEAKIAkvKiBObyBtb3JlIGludGVycnVwdHMgKi8KIAlpZiAoKHN0YXQgJiBEUlFfU1RBVCkgPT0gMCkgewogCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiUGFja2V0IGNvbW1hbmQgY29tcGxldGVkLCAlZCBieXRlcyIKLQkJCQkiIHRyYW5zZmVycmVkXG4iLCBwYy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQpOworCQkJCSIgdHJhbnNmZXJyZWRcbiIsIHBjLT54ZmVycmVkKTsKIAotCQljbGVhcl9iaXQoUENfRE1BX0lOX1BST0dSRVNTLCAmcGMtPmZsYWdzKTsKKwkJcGMtPmZsYWdzICY9IH5QQ19GTEFHX0RNQV9JTl9QUk9HUkVTUzsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAjaWYgU0lNVUxBVEVfRVJST1JTCkBAIC0xMDg4LDcgKzEwNDIsNyBAQAogI2VuZGlmCiAJCWlmICgoc3RhdCAmIEVSUl9TVEFUKSAmJiBwYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKQogCQkJc3RhdCAmPSB+RVJSX1NUQVQ7Ci0JCWlmICgoc3RhdCAmIEVSUl9TVEFUKSB8fCB0ZXN0X2JpdChQQ19ETUFfRVJST1IsICZwYy0+ZmxhZ3MpKSB7CisJCWlmICgoc3RhdCAmIEVSUl9TVEFUKSB8fCAocGMtPmZsYWdzICYgUENfRkxBR19ETUFfRVJST1IpKSB7CiAJCQkvKiBFcnJvciBkZXRlY3RlZCAqLwogCQkJZGVidWdfbG9nKERCR19FUlIsICIlczogSS9PIGVycm9yXG4iLCB0YXBlLT5uYW1lKTsKIApAQCAtMTEwNCw3ICsxMDU4LDcgQEAKIAkJCXJldHVybiBpZGV0YXBlX3JldHJ5X3BjKGRyaXZlKTsKIAkJfQogCQlwYy0+ZXJyb3IgPSAwOwotCQlpZiAodGVzdF9iaXQoUENfV0FJVF9GT1JfRFNDLCAmcGMtPmZsYWdzKSAmJgorCQlpZiAoKHBjLT5mbGFncyAmIFBDX0ZMQUdfV0FJVF9GT1JfRFNDKSAmJgogCQkgICAgKHN0YXQgJiBTRUVLX1NUQVQpID09IDApIHsKIAkJCS8qIE1lZGlhIGFjY2VzcyBjb21tYW5kICovCiAJCQl0YXBlLT5kc2NfcG9sbGluZ19zdGFydCA9IGppZmZpZXM7CkBAIC0xMTE3LDkgKzEwNzEsMTEgQEAKIAkJaWYgKHRhcGUtPmZhaWxlZF9wYyA9PSBwYykKIAkJCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CiAJCS8qIENvbW1hbmQgZmluaXNoZWQgLSBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAqLwotCQlyZXR1cm4gcGMtPmNhbGxiYWNrKGRyaXZlKTsKKwkJcmV0dXJuIHBjLT5pZGV0YXBlX2NhbGxiYWNrKGRyaXZlKTsKIAl9Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQQ19ETUFfSU5fUFJPR1JFU1MsICZwYy0+ZmxhZ3MpKSB7CisKKwlpZiAocGMtPmZsYWdzICYgUENfRkxBR19ETUFfSU5fUFJPR1JFU1MpIHsKKwkJcGMtPmZsYWdzICY9IH5QQ19GTEFHX0RNQV9JTl9QUk9HUkVTUzsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogVGhlIHRhcGUgd2FudHMgdG8gaXNzdWUgbW9yZSAiCiAJCQkJImludGVycnVwdHMgaW4gRE1BIG1vZGVcbiIpOwogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBETUEgZGlzYWJsZWQsIHJldmVydGluZyB0byBQSU9cbiIpOwpAQCAtMTEyNywxNiArMTA4MywxNiBAQAogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAl9CiAJLyogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgb24gdGhpcyBpbnRlcnJ1cHQuICovCi0JYmNvdW50ID0gKGh3aWYtPklOQihJREVfQkNPVU5USF9SRUcpIDw8IDgpIHwKLQkJICBod2lmLT5JTkIoSURFX0JDT1VOVExfUkVHKTsKKwliY291bnQgPSAoaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9CQ09VTlRIX09GRlNFVF0pIDw8IDgpIHwKKwkJICBod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0JDT1VOVExfT0ZGU0VUXSk7CiAKLQlpcmVhc29uID0gaHdpZi0+SU5CKElERV9JUkVBU09OX1JFRyk7CisJaXJlYXNvbiA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfSVJFQVNPTl9PRkZTRVRdKTsKIAogCWlmIChpcmVhc29uICYgQ0QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogQ29EICE9IDAgaW4gJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJfQotCWlmICgoKGlyZWFzb24gJiBJTykgPT0gSU8pID09IHRlc3RfYml0KFBDX1dSSVRJTkcsICZwYy0+ZmxhZ3MpKSB7CisJaWYgKCgoaXJlYXNvbiAmIElPKSA9PSBJTykgPT0gISEocGMtPmZsYWdzICYgUENfRkxBR19XUklUSU5HKSkgewogCQkvKiBIb3BlZnVsbHksIHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogV2Ugd2FudGVkIHRvICVzLCAiLAogCQkJCShpcmVhc29uICYgSU8pID8gIldyaXRlIiA6ICJSZWFkIik7CkBAIC0xMTQ0LDE1ICsxMTAwLDE1IEBACiAJCQkJKGlyZWFzb24gJiBJTykgPyAiUmVhZCIgOiAiV3JpdGUiKTsKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJfQotCWlmICghdGVzdF9iaXQoUENfV1JJVElORywgJnBjLT5mbGFncykpIHsKKwlpZiAoIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dSSVRJTkcpKSB7CiAJCS8qIFJlYWRpbmcgLSBDaGVjayB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNlICovCi0JCXRlbXAgPSBwYy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQgKyBiY291bnQ7Ci0JCWlmICh0ZW1wID4gcGMtPnJlcXVlc3RfdHJhbnNmZXIpIHsKLQkJCWlmICh0ZW1wID4gcGMtPmJ1ZmZlcl9zaXplKSB7CisJCXRlbXAgPSBwYy0+eGZlcnJlZCArIGJjb3VudDsKKwkJaWYgKHRlbXAgPiBwYy0+cmVxX3hmZXIpIHsKKwkJCWlmICh0ZW1wID4gcGMtPmJ1Zl9zaXplKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogVGhlIHRhcGUgd2FudHMgdG8gIgogCQkJCQkic2VuZCB1cyBtb3JlIGRhdGEgdGhhbiBleHBlY3RlZCAiCiAJCQkJCSItIGRpc2NhcmRpbmcgZGF0YVxuIik7Ci0JCQkJaWRldGFwZV9kaXNjYXJkX2RhdGEoZHJpdmUsIGJjb3VudCk7CisJCQkJaWRlX2F0YXBpX2Rpc2NhcmRfZGF0YShkcml2ZSwgYmNvdW50KTsKIAkJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGV0YXBlX3BjX2ludHIsCiAJCQkJCQlJREVUQVBFX1dBSVRfQ01ELCBOVUxMKTsKIAkJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CkBAIC0xMTcwLDExICsxMTI2LDExIEBACiAJaWYgKHBjLT5iaCkKIAkJaW9idWYoZHJpdmUsIHBjLCBiY291bnQpOwogCWVsc2UKLQkJeGZlcmZ1bmMoZHJpdmUsIHBjLT5jdXJyZW50X3Bvc2l0aW9uLCBiY291bnQpOworCQl4ZmVyZnVuYyhkcml2ZSwgcGMtPmN1cl9wb3MsIGJjb3VudCk7CiAKIAkvKiBVcGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KLQlwYy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQgKz0gYmNvdW50OwotCXBjLT5jdXJyZW50X3Bvc2l0aW9uICs9IGJjb3VudDsKKwlwYy0+eGZlcnJlZCArPSBiY291bnQ7CisJcGMtPmN1cl9wb3MgKz0gYmNvdW50OwogCiAJZGVidWdfbG9nKERCR19TRU5TRSwgIltjbWQgJXhdIHRyYW5zZmVycmVkICVkIGJ5dGVzIG9uIHRoYXQgaW50ci5cbiIsCiAJCQlwYy0+Y1swXSwgYmNvdW50KTsKQEAgLTEyMjQsNyArMTE4MCw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZXRhcGVfcGNfdCAqcGMgPSB0YXBlLT5wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IHRhcGUtPnBjOwogCWludCByZXRyaWVzID0gMTAwOwogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAJdTggaXJlYXNvbjsKQEAgLTEyMzQsMTIgKzExOTAsMTIgQEAKIAkJCQkieWV0IERSUSBpc24ndCBhc3NlcnRlZFxuIik7CiAJCXJldHVybiBzdGFydHN0b3A7CiAJfQotCWlyZWFzb24gPSBod2lmLT5JTkIoSURFX0lSRUFTT05fUkVHKTsKKwlpcmVhc29uID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9JUkVBU09OX09GRlNFVF0pOwogCXdoaWxlIChyZXRyaWVzLS0gJiYgKChpcmVhc29uICYgQ0QpID09IDAgfHwgKGlyZWFzb24gJiBJTykpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6IChJTyxDb0QgIT0gKDAsMSkgd2hpbGUgaXNzdWluZyAiCiAJCQkJImEgcGFja2V0IGNvbW1hbmQsIHJldHJ5aW5nXG4iKTsKIAkJdWRlbGF5KDEwMCk7Ci0JCWlyZWFzb24gPSBod2lmLT5JTkIoSURFX0lSRUFTT05fUkVHKTsKKwkJaXJlYXNvbiA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfSVJFQVNPTl9PRkZTRVRdKTsKIAkJaWYgKHJldHJpZXMgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogKElPLENvRCAhPSAoMCwxKSB3aGlsZSAiCiAJCQkJCSJpc3N1aW5nIGEgcGFja2V0IGNvbW1hbmQsIGlnbm9yaW5nXG4iKTsKQEAgLTEyNTYsNyArMTIxMiw3IEBACiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmaWRldGFwZV9wY19pbnRyLCBJREVUQVBFX1dBSVRfQ01ELCBOVUxMKTsKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKIAkvKiBCZWdpbiBETUEsIGlmIG5lY2Vzc2FyeSAqLwotCWlmICh0ZXN0X2JpdChQQ19ETUFfSU5fUFJPR1JFU1MsICZwYy0+ZmxhZ3MpKQorCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9JTl9QUk9HUkVTUykKIAkJaHdpZi0+ZG1hX3N0YXJ0KGRyaXZlKTsKICNlbmRpZgogCS8qIFNlbmQgdGhlIGFjdHVhbCBwYWNrZXQgKi8KQEAgLTEyNjQsNyArMTIyMCw4IEBACiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXRhcGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGV0YXBlX3BjX3QgKnBjKQorc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwpAQCAtMTI4MywxMyArMTI0MCwxMyBAQAogCXRhcGUtPnBjID0gcGM7CiAKIAlpZiAocGMtPnJldHJpZXMgPiBJREVUQVBFX01BWF9QQ19SRVRSSUVTIHx8Ci0JICAgIHRlc3RfYml0KFBDX0FCT1JULCAmcGMtPmZsYWdzKSkgeworCQkocGMtPmZsYWdzICYgUENfRkxBR19BQk9SVCkpIHsKIAkJLyoKIAkJICogV2Ugd2lsbCAiYWJvcnQiIHJldHJ5aW5nIGEgcGFja2V0IGNvbW1hbmQgaW4gY2FzZSBsZWdpdGltYXRlCiAJCSAqIGVycm9yIGNvZGUgd2FzIHJlY2VpdmVkIChjcm9zc2luZyBhIGZpbGVtYXJrLCBvciBlbmQgb2YgdGhlCiAJCSAqIG1lZGlhLCBmb3IgZXhhbXBsZSkuCiAJCSAqLwotCQlpZiAoIXRlc3RfYml0KFBDX0FCT1JULCAmcGMtPmZsYWdzKSkgeworCQlpZiAoIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX0FCT1JUKSkgewogCQkJaWYgKCEocGMtPmNbMF0gPT0gVEVTVF9VTklUX1JFQURZICYmCiAJCQkgICAgICB0YXBlLT5zZW5zZV9rZXkgPT0gMiAmJiB0YXBlLT5hc2MgPT0gNCAmJgogCQkJICAgICAodGFwZS0+YXNjcSA9PSAxIHx8IHRhcGUtPmFzY3EgPT0gOCkpKSB7CkBAIC0xMzA0LDM2ICsxMjYxLDM4IEBACiAJCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0dFTkVSQUw7CiAJCX0KIAkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkJcmV0dXJuIHBjLT5jYWxsYmFjayhkcml2ZSk7CisJCXJldHVybiBwYy0+aWRldGFwZV9jYWxsYmFjayhkcml2ZSk7CiAJfQogCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJSZXRyeSAjJWQsIGNtZCA9ICUwMlhcbiIsIHBjLT5yZXRyaWVzLCBwYy0+Y1swXSk7CiAKIAlwYy0+cmV0cmllcysrOwogCS8qIFdlIGhhdmVuJ3QgdHJhbnNmZXJyZWQgYW55IGRhdGEgeWV0ICovCi0JcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkID0gMDsKLQlwYy0+Y3VycmVudF9wb3NpdGlvbiA9IHBjLT5idWZmZXI7CisJcGMtPnhmZXJyZWQgPSAwOworCXBjLT5jdXJfcG9zID0gcGMtPmJ1ZjsKIAkvKiBSZXF1ZXN0IHRvIHRyYW5zZmVyIHRoZSBlbnRpcmUgYnVmZmVyIGF0IG9uY2UgKi8KLQliY291bnQgPSBwYy0+cmVxdWVzdF90cmFuc2ZlcjsKKwliY291bnQgPSBwYy0+cmVxX3hmZXI7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBDX0RNQV9FUlJPUiwgJnBjLT5mbGFncykpIHsKKwlpZiAocGMtPmZsYWdzICYgUENfRkxBR19ETUFfRVJST1IpIHsKKwkJcGMtPmZsYWdzICY9IH5QQ19GTEFHX0RNQV9FUlJPUjsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRlLXRhcGU6IERNQSBkaXNhYmxlZCwgIgogCQkJCSJyZXZlcnRpbmcgdG8gUElPXG4iKTsKIAkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCX0KLQlpZiAodGVzdF9iaXQoUENfRE1BX1JFQ09NTUVOREVELCAmcGMtPmZsYWdzKSAmJiBkcml2ZS0+dXNpbmdfZG1hKQorCWlmICgocGMtPmZsYWdzICYgUENfRkxBR19ETUFfUkVDT01NRU5ERUQpICYmIGRyaXZlLT51c2luZ19kbWEpCiAJCWRtYV9vayA9ICFod2lmLT5kbWFfc2V0dXAoZHJpdmUpOwogCiAJaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCBJREVfVEZMQUdfTk9fU0VMRUNUX01BU0sgfAogCQkJICAgSURFX1RGTEFHX09VVF9ERVZJQ0UsIGJjb3VudCwgZG1hX29rKTsKIAotCWlmIChkbWFfb2spCQkJLyogV2lsbCBiZWdpbiBETUEgbGF0ZXIgKi8KLQkJc2V0X2JpdChQQ19ETUFfSU5fUFJPR1JFU1MsICZwYy0+ZmxhZ3MpOwotCWlmICh0ZXN0X2JpdChJREVUQVBFX0RSUV9JTlRFUlJVUFQsICZ0YXBlLT5mbGFncykpIHsKKwlpZiAoZG1hX29rKQorCQkvKiBXaWxsIGJlZ2luIERNQSBsYXRlciAqLworCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19ETUFfSU5fUFJPR1JFU1M7CisJaWYgKHRlc3RfYml0KElERVRBUEVfRkxBR19EUlFfSU5URVJSVVBULCAmdGFwZS0+ZmxhZ3MpKSB7CiAJCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIFdJTl9QQUNLRVRDTUQsICZpZGV0YXBlX3RyYW5zZmVyX3BjLAogCQkJCSAgICBJREVUQVBFX1dBSVRfQ01ELCBOVUxMKTsKIAkJcmV0dXJuIGlkZV9zdGFydGVkOwogCX0gZWxzZSB7Ci0JCWh3aWYtPk9VVEIoV0lOX1BBQ0tFVENNRCwgSURFX0NPTU1BTkRfUkVHKTsKKwkJaHdpZi0+T1VUQihXSU5fUEFDS0VUQ01ELCBod2lmLT5pb19wb3J0c1tJREVfQ09NTUFORF9PRkZTRVRdKTsKIAkJcmV0dXJuIGlkZXRhcGVfdHJhbnNmZXJfcGMoZHJpdmUpOwogCX0KIH0KQEAgLTEzNDksNyArMTMwOCw3IEBACiB9CiAKIC8qIEEgbW9kZSBzZW5zZSBjb21tYW5kIGlzIHVzZWQgdG8gInNlbnNlIiB0YXBlIHBhcmFtZXRlcnMuICovCi1zdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9tb2RlX3NlbnNlX2NtZChpZGV0YXBlX3BjX3QgKnBjLCB1OCBwYWdlX2NvZGUpCitzdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9tb2RlX3NlbnNlX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgdTggcGFnZV9jb2RlKQogewogCWlkZXRhcGVfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBNT0RFX1NFTlNFOwpAQCAtMTM2OCwxMiArMTMyNywxMiBAQAogCS8qIFdlIHdpbGwganVzdCBkaXNjYXJkIGRhdGEgaW4gdGhhdCBjYXNlICovCiAJcGMtPmNbNF0gPSAyNTU7CiAJaWYgKHBhZ2VfY29kZSA9PSBJREVUQVBFX0JMT0NLX0RFU0NSSVBUT1IpCi0JCXBjLT5yZXF1ZXN0X3RyYW5zZmVyID0gMTI7CisJCXBjLT5yZXFfeGZlciA9IDEyOwogCWVsc2UgaWYgKHBhZ2VfY29kZSA9PSBJREVUQVBFX0NBUEFCSUxJVElFU19QQUdFKQotCQlwYy0+cmVxdWVzdF90cmFuc2ZlciA9IDI0OworCQlwYy0+cmVxX3hmZXIgPSAyNDsKIAllbHNlCi0JCXBjLT5yZXF1ZXN0X3RyYW5zZmVyID0gNTA7Ci0JcGMtPmNhbGxiYWNrID0gJmlkZXRhcGVfcGNfY2FsbGJhY2s7CisJCXBjLT5yZXFfeGZlciA9IDUwOworCXBjLT5pZGV0YXBlX2NhbGxiYWNrID0gJmlkZXRhcGVfcGNfY2FsbGJhY2s7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZXRhcGVfY2FsY3VsYXRlX3NwZWVkcyhpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC0xNDQyLDcgKzE0MDEsNyBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX21lZGlhX2FjY2Vzc19maW5pc2hlZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JaWRldGFwZV9wY190ICpwYyA9IHRhcGUtPnBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gdGFwZS0+cGM7CiAJdTggc3RhdDsKIAogCXN0YXQgPSBpZGVfcmVhZF9zdGF0dXMoZHJpdmUpOwpAQCAtMTQ2MywxNCArMTQyMiwxNCBAQAogCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0dFTkVSQUw7CiAJCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CiAJfQotCXJldHVybiBwYy0+Y2FsbGJhY2soZHJpdmUpOworCXJldHVybiBwYy0+aWRldGFwZV9jYWxsYmFjayhkcml2ZSk7CiB9CiAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRldGFwZV9yd19jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwotCWludCBibG9ja3MgPSB0YXBlLT5wYy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQgLyB0YXBlLT5ibGtfc2l6ZTsKKwlpbnQgYmxvY2tzID0gdGFwZS0+cGMtPnhmZXJyZWQgLyB0YXBlLT5ibGtfc2l6ZTsKIAogCXRhcGUtPmF2Z19zaXplICs9IGJsb2NrcyAqIHRhcGUtPmJsa19zaXplOwogCXRhcGUtPmluc2VydF9zaXplICs9IGJsb2NrcyAqIHRhcGUtPmJsa19zaXplOwpAQCAtMTUwMiw0NyArMTQ2MSw0OSBAQAogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIAotc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfcmVhZF9jbWQoaWRldGFwZV90YXBlX3QgKnRhcGUsIGlkZXRhcGVfcGNfdCAqcGMsCitzdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9yZWFkX2NtZChpZGV0YXBlX3RhcGVfdCAqdGFwZSwKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCiAJCXVuc2lnbmVkIGludCBsZW5ndGgsIHN0cnVjdCBpZGV0YXBlX2JoICpiaCkKIHsKIAlpZGV0YXBlX2luaXRfcGMocGMpOwogCXBjLT5jWzBdID0gUkVBRF82OwogCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMzIobGVuZ3RoKSwgKHVuc2lnbmVkIGludCAqKSAmcGMtPmNbMV0pOwogCXBjLT5jWzFdID0gMTsKLQlwYy0+Y2FsbGJhY2sgPSAmaWRldGFwZV9yd19jYWxsYmFjazsKKwlwYy0+aWRldGFwZV9jYWxsYmFjayA9ICZpZGV0YXBlX3J3X2NhbGxiYWNrOwogCXBjLT5iaCA9IGJoOwogCWF0b21pY19zZXQoJmJoLT5iX2NvdW50LCAwKTsKLQlwYy0+YnVmZmVyID0gTlVMTDsKLQlwYy0+YnVmZmVyX3NpemUgPSBsZW5ndGggKiB0YXBlLT5ibGtfc2l6ZTsKLQlwYy0+cmVxdWVzdF90cmFuc2ZlciA9IHBjLT5idWZmZXJfc2l6ZTsKLQlpZiAocGMtPnJlcXVlc3RfdHJhbnNmZXIgPT0gdGFwZS0+c3RhZ2Vfc2l6ZSkKLQkJc2V0X2JpdChQQ19ETUFfUkVDT01NRU5ERUQsICZwYy0+ZmxhZ3MpOworCXBjLT5idWYgPSBOVUxMOworCXBjLT5idWZfc2l6ZSA9IGxlbmd0aCAqIHRhcGUtPmJsa19zaXplOworCXBjLT5yZXFfeGZlciA9IHBjLT5idWZfc2l6ZTsKKwlpZiAocGMtPnJlcV94ZmVyID09IHRhcGUtPnN0YWdlX3NpemUpCisJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9SRUNPTU1FTkRFRDsKIH0KIAotc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfd3JpdGVfY21kKGlkZXRhcGVfdGFwZV90ICp0YXBlLCBpZGV0YXBlX3BjX3QgKnBjLAorc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfd3JpdGVfY21kKGlkZXRhcGVfdGFwZV90ICp0YXBlLAorCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKIAkJdW5zaWduZWQgaW50IGxlbmd0aCwgc3RydWN0IGlkZXRhcGVfYmggKmJoKQogewogCWlkZXRhcGVfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBXUklURV82OwogCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMzIobGVuZ3RoKSwgKHVuc2lnbmVkIGludCAqKSAmcGMtPmNbMV0pOwogCXBjLT5jWzFdID0gMTsKLQlwYy0+Y2FsbGJhY2sgPSAmaWRldGFwZV9yd19jYWxsYmFjazsKLQlzZXRfYml0KFBDX1dSSVRJTkcsICZwYy0+ZmxhZ3MpOworCXBjLT5pZGV0YXBlX2NhbGxiYWNrID0gJmlkZXRhcGVfcndfY2FsbGJhY2s7CisJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfV1JJVElORzsKIAlwYy0+YmggPSBiaDsKIAlwYy0+Yl9kYXRhID0gYmgtPmJfZGF0YTsKIAlwYy0+Yl9jb3VudCA9IGF0b21pY19yZWFkKCZiaC0+Yl9jb3VudCk7Ci0JcGMtPmJ1ZmZlciA9IE5VTEw7Ci0JcGMtPmJ1ZmZlcl9zaXplID0gbGVuZ3RoICogdGFwZS0+YmxrX3NpemU7Ci0JcGMtPnJlcXVlc3RfdHJhbnNmZXIgPSBwYy0+YnVmZmVyX3NpemU7Ci0JaWYgKHBjLT5yZXF1ZXN0X3RyYW5zZmVyID09IHRhcGUtPnN0YWdlX3NpemUpCi0JCXNldF9iaXQoUENfRE1BX1JFQ09NTUVOREVELCAmcGMtPmZsYWdzKTsKKwlwYy0+YnVmID0gTlVMTDsKKwlwYy0+YnVmX3NpemUgPSBsZW5ndGggKiB0YXBlLT5ibGtfc2l6ZTsKKwlwYy0+cmVxX3hmZXIgPSBwYy0+YnVmX3NpemU7CisJaWYgKHBjLT5yZXFfeGZlciA9PSB0YXBlLT5zdGFnZV9zaXplKQorCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19ETUFfUkVDT01NRU5ERUQ7CiB9CiAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRldGFwZV9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQkJICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZXRhcGVfcGNfdCAqcGMgPSBOVUxMOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gTlVMTDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcG9zdHBvbmVkX3JxID0gdGFwZS0+cG9zdHBvbmVkX3JxOwogCXU4IHN0YXQ7CiAKQEAgLTE1NzksMTAgKzE1NDAsMTAgQEAKIAlzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKIAogCWlmICghZHJpdmUtPmRzY19vdmVybGFwICYmICEocnEtPmNtZFswXSAmIFJFUV9JREVUQVBFX1BDMikpCi0JCXNldF9iaXQoSURFVEFQRV9JR05PUkVfRFNDLCAmdGFwZS0+ZmxhZ3MpOworCQlzZXRfYml0KElERVRBUEVfRkxBR19JR05PUkVfRFNDLCAmdGFwZS0+ZmxhZ3MpOwogCiAJaWYgKGRyaXZlLT5wb3N0X3Jlc2V0ID09IDEpIHsKLQkJc2V0X2JpdChJREVUQVBFX0lHTk9SRV9EU0MsICZ0YXBlLT5mbGFncyk7CisJCXNldF9iaXQoSURFVEFQRV9GTEFHX0lHTk9SRV9EU0MsICZ0YXBlLT5mbGFncyk7CiAJCWRyaXZlLT5wb3N0X3Jlc2V0ID0gMDsKIAl9CiAKQEAgLTE1OTAsNyArMTU1MSw3IEBACiAJCXRhcGUtPmluc2VydF9zcGVlZCA9IHRhcGUtPmluc2VydF9zaXplIC8gMTAyNCAqIEhaIC8KIAkJCQkJKGppZmZpZXMgLSB0YXBlLT5pbnNlcnRfdGltZSk7CiAJaWRldGFwZV9jYWxjdWxhdGVfc3BlZWRzKGRyaXZlKTsKLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJREVUQVBFX0lHTk9SRV9EU0MsICZ0YXBlLT5mbGFncykgJiYKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJREVUQVBFX0ZMQUdfSUdOT1JFX0RTQywgJnRhcGUtPmZsYWdzKSAmJgogCSAgICAoc3RhdCAmIFNFRUtfU1RBVCkgPT0gMCkgewogCQlpZiAocG9zdHBvbmVkX3JxID09IE5VTEwpIHsKIAkJCXRhcGUtPmRzY19wb2xsaW5nX3N0YXJ0ID0gamlmZmllczsKQEAgLTE2MjksNyArMTU5MCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAlpZiAocnEtPmNtZFswXSAmIFJFUV9JREVUQVBFX1BDMSkgewotCQlwYyA9IChpZGV0YXBlX3BjX3QgKikgcnEtPmJ1ZmZlcjsKKwkJcGMgPSAoc3RydWN0IGlkZV9hdGFwaV9wYyAqKSBycS0+YnVmZmVyOwogCQlycS0+Y21kWzBdICY9IH4oUkVRX0lERVRBUEVfUEMxKTsKIAkJcnEtPmNtZFswXSB8PSBSRVFfSURFVEFQRV9QQzI7CiAJCWdvdG8gb3V0OwpAQCAtMTY0OCw3ICsxNjA5LDcgQEAKIHsKIAlpbnQgcmMxLCByYzI7CiAKLQlyYzEgPSB0ZXN0X2JpdChJREVUQVBFX1BJUEVMSU5FX0FDVElWRSwgJnRhcGUtPmZsYWdzKTsKKwlyYzEgPSB0ZXN0X2JpdChJREVUQVBFX0ZMQUdfUElQRUxJTkVfQUNUSVZFLCAmdGFwZS0+ZmxhZ3MpOwogCXJjMiA9ICh0YXBlLT5hY3RpdmVfZGF0YV9ycSAhPSBOVUxMKTsKIAlyZXR1cm4gcmMxOwogfQpAQCAtMTg4MSw3ICsxODQyLDcgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRldGFwZV9yZWFkX3Bvc2l0aW9uX2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQl1OCAqcmVhZHBvcyA9IHRhcGUtPnBjLT5idWZmZXI7CisJdTggKnJlYWRwb3MgPSB0YXBlLT5wYy0+YnVmOwogCiAJZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTE4OTQsNyArMTg1NSw3IEBACiAJCWlmIChyZWFkcG9zWzBdICYgMHg0KSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJpZGUtdGFwZTogQmxvY2sgbG9jYXRpb24gaXMgdW5rbm93biIKIAkJCQkJICJ0byB0aGUgdGFwZVxuIik7Ci0JCQljbGVhcl9iaXQoSURFVEFQRV9BRERSRVNTX1ZBTElELCAmdGFwZS0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KElERVRBUEVfRkxBR19BRERSRVNTX1ZBTElELCAmdGFwZS0+ZmxhZ3MpOwogCQkJaWRldGFwZV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCX0gZWxzZSB7CiAJCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiQmxvY2sgTG9jYXRpb24gLSAldVxuIiwKQEAgLTE5MDMsNyArMTg2NCw3IEBACiAJCQl0YXBlLT5wYXJ0aXRpb24gPSByZWFkcG9zWzFdOwogCQkJdGFwZS0+Zmlyc3RfZnJhbWUgPQogCQkJCWJlMzJfdG9fY3B1KCoodTMyICopJnJlYWRwb3NbNF0pOwotCQkJc2V0X2JpdChJREVUQVBFX0FERFJFU1NfVkFMSUQsICZ0YXBlLT5mbGFncyk7CisJCQlzZXRfYml0KElERVRBUEVfRkxBR19BRERSRVNTX1ZBTElELCAmdGFwZS0+ZmxhZ3MpOwogCQkJaWRldGFwZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMCk7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTkxNywyMCArMTg3OCwyMCBAQAogICogd3JpdGluZyBhIGZpbGVtYXJrIG90aGVyd2lzZS4KICAqLwogc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfd3JpdGVfZmlsZW1hcmtfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJaWRldGFwZV9wY190ICpwYywgaW50IHdyaXRlX2ZpbGVtYXJrKQorCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgaW50IHdyaXRlX2ZpbGVtYXJrKQogewogCWlkZXRhcGVfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBXUklURV9GSUxFTUFSS1M7CiAJcGMtPmNbNF0gPSB3cml0ZV9maWxlbWFyazsKLQlzZXRfYml0KFBDX1dBSVRfRk9SX0RTQywgJnBjLT5mbGFncyk7Ci0JcGMtPmNhbGxiYWNrID0gJmlkZXRhcGVfcGNfY2FsbGJhY2s7CisJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfV0FJVF9GT1JfRFNDOworCXBjLT5pZGV0YXBlX2NhbGxiYWNrID0gJmlkZXRhcGVfcGNfY2FsbGJhY2s7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX3Rlc3RfdW5pdF9yZWFkeV9jbWQoaWRldGFwZV9wY190ICpwYykKK3N0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX3Rlc3RfdW5pdF9yZWFkeV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRldGFwZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IFRFU1RfVU5JVF9SRUFEWTsKLQlwYy0+Y2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKKwlwYy0+aWRldGFwZV9jYWxsYmFjayA9ICZpZGV0YXBlX3BjX2NhbGxiYWNrOwogfQogCiAvKgpAQCAtMTk0Niw3ICsxOTA3LDcgQEAKICAqIHRvIHRoZSByZXF1ZXN0IGxpc3Qgd2l0aG91dCB3YWl0aW5nIGZvciBpdCB0byBiZSBzZXJ2aWNlZCEgSW4gdGhhdCBjYXNlLCB3ZQogICogdXN1YWxseSB1c2UgaWRldGFwZV9xdWV1ZV9wY19oZWFkKCkuCiAgKi8KLXN0YXRpYyBpbnQgX19pZGV0YXBlX3F1ZXVlX3BjX3RhaWwoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGV0YXBlX3BjX3QgKnBjKQorc3RhdGljIGludCBfX2lkZXRhcGVfcXVldWVfcGNfdGFpbChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHJlcXVlc3QgcnE7CkBAIC0xOTU3LDI0ICsxOTE4LDI0IEBACiAJcmV0dXJuIGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsICZycSwgaWRlX3dhaXQpOwogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9sb2FkX3VubG9hZF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGV0YXBlX3BjX3QgKnBjLAotCQlpbnQgY21kKQorc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfbG9hZF91bmxvYWRfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIGludCBjbWQpCiB7CiAJaWRldGFwZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IFNUQVJUX1NUT1A7CiAJcGMtPmNbNF0gPSBjbWQ7Ci0Jc2V0X2JpdChQQ19XQUlUX0ZPUl9EU0MsICZwYy0+ZmxhZ3MpOwotCXBjLT5jYWxsYmFjayA9ICZpZGV0YXBlX3BjX2NhbGxiYWNrOworCXBjLT5mbGFncyB8PSBQQ19GTEFHX1dBSVRfRk9SX0RTQzsKKwlwYy0+aWRldGFwZV9jYWxsYmFjayA9ICZpZGV0YXBlX3BjX2NhbGxiYWNrOwogfQogCiBzdGF0aWMgaW50IGlkZXRhcGVfd2FpdF9yZWFkeShpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlpZGV0YXBlX3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgbG9hZF9hdHRlbXB0ZWQgPSAwOwogCiAJLyogV2FpdCBmb3IgdGhlIHRhcGUgdG8gYmVjb21lIHJlYWR5ICovCi0Jc2V0X2JpdChJREVUQVBFX01FRElVTV9QUkVTRU5ULCAmdGFwZS0+ZmxhZ3MpOworCXNldF9iaXQoSURFVEFQRV9GTEFHX01FRElVTV9QUkVTRU5ULCAmdGFwZS0+ZmxhZ3MpOwogCXRpbWVvdXQgKz0gamlmZmllczsKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKIAkJaWRldGFwZV9jcmVhdGVfdGVzdF91bml0X3JlYWR5X2NtZCgmcGMpOwpAQCAtMTk5OCwxNCArMTk1OSwxNCBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGlkZXRhcGVfcXVldWVfcGNfdGFpbChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXRhcGVfcGNfdCAqcGMpCitzdGF0aWMgaW50IGlkZXRhcGVfcXVldWVfcGNfdGFpbChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCXJldHVybiBfX2lkZXRhcGVfcXVldWVfcGNfdGFpbChkcml2ZSwgcGMpOwogfQogCiBzdGF0aWMgaW50IGlkZXRhcGVfZmx1c2hfdGFwZV9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGV0YXBlX3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgcmM7CiAKIAlpZGV0YXBlX2NyZWF0ZV93cml0ZV9maWxlbWFya19jbWQoZHJpdmUsICZwYywgMCk7CkBAIC0yMDE2LDE4ICsxOTc3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX3JlYWRfcG9zaXRpb25fY21kKGlkZXRhcGVfcGNfdCAqcGMpCitzdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9yZWFkX3Bvc2l0aW9uX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlpZGV0YXBlX2luaXRfcGMocGMpOwogCXBjLT5jWzBdID0gUkVBRF9QT1NJVElPTjsKLQlwYy0+cmVxdWVzdF90cmFuc2ZlciA9IDIwOwotCXBjLT5jYWxsYmFjayA9ICZpZGV0YXBlX3JlYWRfcG9zaXRpb25fY2FsbGJhY2s7CisJcGMtPnJlcV94ZmVyID0gMjA7CisJcGMtPmlkZXRhcGVfY2FsbGJhY2sgPSAmaWRldGFwZV9yZWFkX3Bvc2l0aW9uX2NhbGxiYWNrOwogfQogCiBzdGF0aWMgaW50IGlkZXRhcGVfcmVhZF9wb3NpdGlvbihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JaWRldGFwZV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaW50IHBvc2l0aW9uOwogCiAJZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CkBAIC0yMDM5LDcgKzIwMDAsOCBAQAogCXJldHVybiBwb3NpdGlvbjsKIH0KIAotc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfbG9jYXRlX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXRhcGVfcGNfdCAqcGMsCitzdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9sb2NhdGVfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCiAJCXVuc2lnbmVkIGludCBibG9jaywgdTggcGFydGl0aW9uLCBpbnQgc2tpcCkKIHsKIAlpZGV0YXBlX2luaXRfcGMocGMpOwpAQCAtMjA0NywxMiArMjAwOSwxMiBAQAogCXBjLT5jWzFdID0gMjsKIAlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTMyKGJsb2NrKSwgKHVuc2lnbmVkIGludCAqKSAmcGMtPmNbM10pOwogCXBjLT5jWzhdID0gcGFydGl0aW9uOwotCXNldF9iaXQoUENfV0FJVF9GT1JfRFNDLCAmcGMtPmZsYWdzKTsKLQlwYy0+Y2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKKwlwYy0+ZmxhZ3MgfD0gUENfRkxBR19XQUlUX0ZPUl9EU0M7CisJcGMtPmlkZXRhcGVfY2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKIH0KIAotc3RhdGljIGludCBpZGV0YXBlX2NyZWF0ZV9wcmV2ZW50X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXRhcGVfcGNfdCAqcGMsCi0JCQkJICAgICAgaW50IHByZXZlbnQpCitzdGF0aWMgaW50IGlkZXRhcGVfY3JlYXRlX3ByZXZlbnRfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIGludCBwcmV2ZW50KQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCkBAIC0yMDYzLDcgKzIwMjUsNyBAQAogCWlkZXRhcGVfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBBTExPV19NRURJVU1fUkVNT1ZBTDsKIAlwYy0+Y1s0XSA9IHByZXZlbnQ7Ci0JcGMtPmNhbGxiYWNrID0gJmlkZXRhcGVfcGNfY2FsbGJhY2s7CisJcGMtPmlkZXRhcGVfY2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjA3OCw3ICsyMDQwLDcgQEAKIAogCS8qIFJlbW92ZSBtZXJnZSBzdGFnZS4gKi8KIAljbnQgPSB0YXBlLT5tZXJnZV9zdGFnZV9zaXplIC8gdGFwZS0+YmxrX3NpemU7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJREVUQVBFX0ZJTEVNQVJLLCAmdGFwZS0+ZmxhZ3MpKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSURFVEFQRV9GTEFHX0ZJTEVNQVJLLCAmdGFwZS0+ZmxhZ3MpKQogCQkrK2NudDsJCS8qIEZpbGVtYXJrcyBjb3VudCBhcyAxIHNlY3RvciAqLwogCXRhcGUtPm1lcmdlX3N0YWdlX3NpemUgPSAwOwogCWlmICh0YXBlLT5tZXJnZV9zdGFnZSAhPSBOVUxMKSB7CkBAIC0yMDg3LDcgKzIwNDksNyBAQAogCX0KIAogCS8qIENsZWFyIHBpcGVsaW5lIGZsYWdzLiAqLwotCWNsZWFyX2JpdChJREVUQVBFX1BJUEVMSU5FX0VSUk9SLCAmdGFwZS0+ZmxhZ3MpOworCWNsZWFyX2JpdChJREVUQVBFX0ZMQUdfUElQRUxJTkVfRVJSLCAmdGFwZS0+ZmxhZ3MpOwogCXRhcGUtPmNocmRldl9kaXIgPSBJREVUQVBFX0RJUl9OT05FOwogCiAJLyogUmVtb3ZlIHBpcGVsaW5lIHN0YWdlcy4gKi8KQEAgLTIxMjQsNyArMjA4Niw3IEBACiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaW50IHJldHZhbDsKLQlpZGV0YXBlX3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAogCWlmICh0YXBlLT5jaHJkZXZfZGlyID09IElERVRBUEVfRElSX1JFQUQpCiAJCV9faWRldGFwZV9kaXNjYXJkX3JlYWRfcGlwZWxpbmUoZHJpdmUpOwpAQCAtMjIwMSw0NiArMjE2Myw0NyBAQAogCWlmICh0YXBlLT5uZXh0X3N0YWdlID09IE5VTEwpCiAJCXJldHVybjsKIAlpZiAoIWlkZXRhcGVfcGlwZWxpbmVfYWN0aXZlKHRhcGUpKSB7Ci0JCXNldF9iaXQoSURFVEFQRV9QSVBFTElORV9BQ1RJVkUsICZ0YXBlLT5mbGFncyk7CisJCXNldF9iaXQoSURFVEFQRV9GTEFHX1BJUEVMSU5FX0FDVElWRSwgJnRhcGUtPmZsYWdzKTsKIAkJaWRldGFwZV9hY3RpdmF0ZV9uZXh0X3N0YWdlKGRyaXZlKTsKIAkJKHZvaWQpIGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHRhcGUtPmFjdGl2ZV9kYXRhX3JxLCBpZGVfZW5kKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX2lucXVpcnlfY21kKGlkZXRhcGVfcGNfdCAqcGMpCitzdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9pbnF1aXJ5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlpZGV0YXBlX2luaXRfcGMocGMpOwogCXBjLT5jWzBdID0gSU5RVUlSWTsKIAlwYy0+Y1s0XSA9IDI1NDsKLQlwYy0+cmVxdWVzdF90cmFuc2ZlciA9IDI1NDsKLQlwYy0+Y2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKKwlwYy0+cmVxX3hmZXIgPSAyNTQ7CisJcGMtPmlkZXRhcGVfY2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKIH0KIAotc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfcmV3aW5kX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXRhcGVfcGNfdCAqcGMpCitzdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9yZXdpbmRfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRldGFwZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IFJFWkVST19VTklUOwotCXNldF9iaXQoUENfV0FJVF9GT1JfRFNDLCAmcGMtPmZsYWdzKTsKLQlwYy0+Y2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKKwlwYy0+ZmxhZ3MgfD0gUENfRkxBR19XQUlUX0ZPUl9EU0M7CisJcGMtPmlkZXRhcGVfY2FsbGJhY2sgPSAmaWRldGFwZV9wY19jYWxsYmFjazsKIH0KIAotc3RhdGljIHZvaWQgaWRldGFwZV9jcmVhdGVfZXJhc2VfY21kKGlkZXRhcGVfcGNfdCAqcGMpCitzdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9lcmFzZV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRldGFwZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IEVSQVNFOwogCXBjLT5jWzFdID0gMTsKLQlzZXRfYml0KFBDX1dBSVRfRk9SX0RTQywgJnBjLT5mbGFncyk7Ci0JcGMtPmNhbGxiYWNrID0gJmlkZXRhcGVfcGNfY2FsbGJhY2s7CisJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfV0FJVF9GT1JfRFNDOworCXBjLT5pZGV0YXBlX2NhbGxiYWNrID0gJmlkZXRhcGVfcGNfY2FsbGJhY2s7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX3NwYWNlX2NtZChpZGV0YXBlX3BjX3QgKnBjLCBpbnQgY291bnQsIHU4IGNtZCkKK3N0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX3NwYWNlX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgaW50IGNvdW50LCB1OCBjbWQpCiB7CiAJaWRldGFwZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IFNQQUNFOwogCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMzIoY291bnQpLCAodW5zaWduZWQgaW50ICopICZwYy0+Y1sxXSk7CiAJcGMtPmNbMV0gPSBjbWQ7Ci0Jc2V0X2JpdChQQ19XQUlUX0ZPUl9EU0MsICZwYy0+ZmxhZ3MpOwotCXBjLT5jYWxsYmFjayA9ICZpZGV0YXBlX3BjX2NhbGxiYWNrOworCXBjLT5mbGFncyB8PSBQQ19GTEFHX1dBSVRfRk9SX0RTQzsKKwlwYy0+aWRldGFwZV9jYWxsYmFjayA9ICZpZGV0YXBlX3BjX2NhbGxiYWNrOwogfQogCiBzdGF0aWMgdm9pZCBpZGV0YXBlX3dhaXRfZmlyc3Rfc3RhZ2UoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtMjMyNiw3ICsyMjg5LDcgQEAKIAkJCWlkZXRhcGVfcGx1Z19waXBlbGluZShkcml2ZSk7CiAJCX0KIAl9Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJREVUQVBFX1BJUEVMSU5FX0VSUk9SLCAmdGFwZS0+ZmxhZ3MpKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSURFVEFQRV9GTEFHX1BJUEVMSU5FX0VSUiwgJnRhcGUtPmZsYWdzKSkKIAkJLyogUmV0dXJuIGEgZGVmZXJyZWQgZXJyb3IgKi8KIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIGJsb2NrczsKQEAgLTI0MDIsNyArMjM2NSw3IEBACiAJCV9faWRldGFwZV9rZnJlZV9zdGFnZSh0YXBlLT5tZXJnZV9zdGFnZSk7CiAJCXRhcGUtPm1lcmdlX3N0YWdlID0gTlVMTDsKIAl9Ci0JY2xlYXJfYml0KElERVRBUEVfUElQRUxJTkVfRVJST1IsICZ0YXBlLT5mbGFncyk7CisJY2xlYXJfYml0KElERVRBUEVfRkxBR19QSVBFTElORV9FUlIsICZ0YXBlLT5mbGFncyk7CiAJdGFwZS0+Y2hyZGV2X2RpciA9IElERVRBUEVfRElSX05PTkU7CiAKIAkvKgpAQCAtMjQ5MCw3ICsyNDUzLDcgQEAKIAlycS5zZWN0b3IgPSB0YXBlLT5maXJzdF9mcmFtZTsKIAlycS5ucl9zZWN0b3JzID0gYmxvY2tzOwogCXJxLmN1cnJlbnRfbnJfc2VjdG9ycyA9IGJsb2NrczsKLQlpZiAoIXRlc3RfYml0KElERVRBUEVfUElQRUxJTkVfRVJST1IsICZ0YXBlLT5mbGFncykgJiYKKwlpZiAoIXRlc3RfYml0KElERVRBUEVfRkxBR19QSVBFTElORV9FUlIsICZ0YXBlLT5mbGFncykgJiYKIAkgICAgdGFwZS0+bnJfc3RhZ2VzIDwgbWF4X3N0YWdlcykgewogCQluZXdfc3RhZ2UgPSBpZGV0YXBlX2ttYWxsb2Nfc3RhZ2UodGFwZSk7CiAJCXdoaWxlIChuZXdfc3RhZ2UgIT0gTlVMTCkgewpAQCAtMjUyNywxMyArMjQ5MCwxMyBAQAogCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJFbnRlciAlcywgJWQgYmxvY2tzXG4iLCBfX2Z1bmNfXywgYmxvY2tzKTsKIAogCS8qIElmIHdlIGFyZSBhdCBhIGZpbGVtYXJrLCByZXR1cm4gYSByZWFkIGxlbmd0aCBvZiAwICovCi0JaWYgKHRlc3RfYml0KElERVRBUEVfRklMRU1BUkssICZ0YXBlLT5mbGFncykpCisJaWYgKHRlc3RfYml0KElERVRBUEVfRkxBR19GSUxFTUFSSywgJnRhcGUtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXYWl0IGZvciB0aGUgbmV4dCBibG9jayB0byByZWFjaCB0aGUgaGVhZCBvZiB0aGUgcGlwZWxpbmUuICovCiAJaWRldGFwZV9pbml0X3JlYWQoZHJpdmUsIHRhcGUtPm1heF9zdGFnZXMpOwogCWlmICh0YXBlLT5maXJzdF9zdGFnZSA9PSBOVUxMKSB7Ci0JCWlmICh0ZXN0X2JpdChJREVUQVBFX1BJUEVMSU5FX0VSUk9SLCAmdGFwZS0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoSURFVEFQRV9GTEFHX1BJUEVMSU5FX0VSUiwgJnRhcGUtPmZsYWdzKSkKIAkJCXJldHVybiAwOwogCQlyZXR1cm4gaWRldGFwZV9xdWV1ZV9yd190YWlsKGRyaXZlLCBSRVFfSURFVEFQRV9SRUFELCBibG9ja3MsCiAJCQkJCXRhcGUtPm1lcmdlX3N0YWdlLT5iaCk7CkBAIC0yNTUwLDcgKzI1MTMsNyBAQAogCWVsc2UgewogCQlpZGV0YXBlX3N3aXRjaF9idWZmZXJzKHRhcGUsIHRhcGUtPmZpcnN0X3N0YWdlKTsKIAkJaWYgKHJxX3B0ci0+ZXJyb3JzID09IElERVRBUEVfRVJST1JfRklMRU1BUkspCi0JCQlzZXRfYml0KElERVRBUEVfRklMRU1BUkssICZ0YXBlLT5mbGFncyk7CisJCQlzZXRfYml0KElERVRBUEVfRkxBR19GSUxFTUFSSywgJnRhcGUtPmZsYWdzKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcGUtPmxvY2ssIGZsYWdzKTsKIAkJaWRldGFwZV9yZW1vdmVfc3RhZ2VfaGVhZChkcml2ZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcGUtPmxvY2ssIGZsYWdzKTsKQEAgLTI2MTgsNyArMjU4MSw3IEBACiBzdGF0aWMgaW50IGlkZXRhcGVfcmV3aW5kX3RhcGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWludCByZXR2YWw7Ci0JaWRldGFwZV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaWRldGFwZV90YXBlX3QgKnRhcGU7CiAJdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIApAQCAtMjY4MSw3ICsyNjQ0LDcgQEAKIAkJCQkJaW50IG10X2NvdW50KQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZXRhcGVfcGNfdCBwYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbCwgY291bnQgPSAwOwogCWludCBzcHJldiA9ICEhKHRhcGUtPmNhcHNbNF0gJiAweDIwKTsKQEAgLTI2OTcsMTIgKzI2NjAsMTMgQEAKIAlpZiAodGFwZS0+Y2hyZGV2X2RpciA9PSBJREVUQVBFX0RJUl9SRUFEKSB7CiAJCS8qIGl0cyBhIHJlYWQtYWhlYWQgYnVmZmVyLCBzY2FuIGl0IGZvciBjcm9zc2VkIGZpbGVtYXJrcy4gKi8KIAkJdGFwZS0+bWVyZ2Vfc3RhZ2Vfc2l6ZSA9IDA7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSURFVEFQRV9GSUxFTUFSSywgJnRhcGUtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJREVUQVBFX0ZMQUdfRklMRU1BUkssICZ0YXBlLT5mbGFncykpCiAJCQkrK2NvdW50OwogCQl3aGlsZSAodGFwZS0+Zmlyc3Rfc3RhZ2UgIT0gTlVMTCkgewogCQkJaWYgKGNvdW50ID09IG10X2NvdW50KSB7CiAJCQkJaWYgKG10X29wID09IE1URlNGTSkKLQkJCQkJc2V0X2JpdChJREVUQVBFX0ZJTEVNQVJLLCAmdGFwZS0+ZmxhZ3MpOworCQkJCQlzZXRfYml0KElERVRBUEVfRkxBR19GSUxFTUFSSywKKwkJCQkJCSZ0YXBlLT5mbGFncyk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFwZS0+bG9jaywgZmxhZ3MpOwpAQCAtMjc4Niw3ICsyNzUwLDcgQEAKIAlkZWJ1Z19sb2coREJHX0NIUkRFViwgIkVudGVyICVzLCBjb3VudCAlWmRcbiIsIF9fZnVuY19fLCBjb3VudCk7CiAKIAlpZiAodGFwZS0+Y2hyZGV2X2RpciAhPSBJREVUQVBFX0RJUl9SRUFEKSB7Ci0JCWlmICh0ZXN0X2JpdChJREVUQVBFX0RFVEVDVF9CUywgJnRhcGUtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KElERVRBUEVfRkxBR19ERVRFQ1RfQlMsICZ0YXBlLT5mbGFncykpCiAJCQlpZiAoY291bnQgPiB0YXBlLT5ibGtfc2l6ZSAmJgogCQkJICAgIChjb3VudCAlIHRhcGUtPmJsa19zaXplKSA9PSAwKQogCQkJCXRhcGUtPnVzZXJfYnNfZmFjdG9yID0gY291bnQgLyB0YXBlLT5ibGtfc2l6ZTsKQEAgLTI4MjksNyArMjc5Myw3IEBACiAJCXRhcGUtPm1lcmdlX3N0YWdlX3NpemUgPSBieXRlc19yZWFkLXRlbXA7CiAJfQogZmluaXNoOgotCWlmICghYWN0dWFsbHlfcmVhZCAmJiB0ZXN0X2JpdChJREVUQVBFX0ZJTEVNQVJLLCAmdGFwZS0+ZmxhZ3MpKSB7CisJaWYgKCFhY3R1YWxseV9yZWFkICYmIHRlc3RfYml0KElERVRBUEVfRkxBR19GSUxFTUFSSywgJnRhcGUtPmZsYWdzKSkgewogCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiJXM6IHNwYWNpbmcgb3ZlciBmaWxlbWFya1xuIiwgdGFwZS0+bmFtZSk7CiAKIAkJaWRldGFwZV9zcGFjZV9vdmVyX2ZpbGVtYXJrcyhkcml2ZSwgTVRGU0YsIDEpOwpAQCAtMjkzOCw3ICsyOTAyLDcgQEAKIAogc3RhdGljIGludCBpZGV0YXBlX3dyaXRlX2ZpbGVtYXJrKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGV0YXBlX3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAogCS8qIFdyaXRlIGEgZmlsZW1hcmsgKi8KIAlpZGV0YXBlX2NyZWF0ZV93cml0ZV9maWxlbWFya19jbWQoZHJpdmUsICZwYywgMSk7CkBAIC0yOTY2LDcgKzI5MzAsNyBAQAogc3RhdGljIGludCBpZGV0YXBlX210aW9jdG9wKGlkZV9kcml2ZV90ICpkcml2ZSwgc2hvcnQgbXRfb3AsIGludCBtdF9jb3VudCkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlpZGV0YXBlX3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgaSwgcmV0dmFsOwogCiAJZGVidWdfbG9nKERCR19FUlIsICJIYW5kbGluZyBNVElPQ1RPUCBpb2N0bDogbXRfb3A9JWQsIG10X2NvdW50PSVkXG4iLApAQCAtMzAyMiw3ICsyOTg2LDcgQEAKIAkJCQkJICAgICAgIUlERVRBUEVfTFVfTE9BRF9NQVNLKTsKIAkJcmV0dmFsID0gaWRldGFwZV9xdWV1ZV9wY190YWlsKGRyaXZlLCAmcGMpOwogCQlpZiAoIXJldHZhbCkKLQkJCWNsZWFyX2JpdChJREVUQVBFX01FRElVTV9QUkVTRU5ULCAmdGFwZS0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KElERVRBUEVfRkxBR19NRURJVU1fUFJFU0VOVCwgJnRhcGUtPmZsYWdzKTsKIAkJcmV0dXJuIHJldHZhbDsKIAljYXNlIE1UTk9QOgogCQlpZGV0YXBlX2Rpc2NhcmRfcmVhZF9waXBlbGluZShkcml2ZSwgMCk7CkBAIC0zMDQ1LDkgKzMwMDksOSBAQAogCQkJICAgIG10X2NvdW50ICUgdGFwZS0+YmxrX3NpemUpCiAJCQkJcmV0dXJuIC1FSU87CiAJCQl0YXBlLT51c2VyX2JzX2ZhY3RvciA9IG10X2NvdW50IC8gdGFwZS0+YmxrX3NpemU7Ci0JCQljbGVhcl9iaXQoSURFVEFQRV9ERVRFQ1RfQlMsICZ0YXBlLT5mbGFncyk7CisJCQljbGVhcl9iaXQoSURFVEFQRV9GTEFHX0RFVEVDVF9CUywgJnRhcGUtPmZsYWdzKTsKIAkJfSBlbHNlCi0JCQlzZXRfYml0KElERVRBUEVfREVURUNUX0JTLCAmdGFwZS0+ZmxhZ3MpOworCQkJc2V0X2JpdChJREVUQVBFX0ZMQUdfREVURUNUX0JTLCAmdGFwZS0+ZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAljYXNlIE1UU0VFSzoKIAkJaWRldGFwZV9kaXNjYXJkX3JlYWRfcGlwZWxpbmUoZHJpdmUsIDApOwpAQCAtMzE0OSw3ICszMTEzLDcgQEAKIHN0YXRpYyB2b2lkIGlkZV90YXBlX2dldF9ic2l6ZV9mcm9tX2JkZXNjKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlpZGV0YXBlX3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAogCWlkZXRhcGVfY3JlYXRlX21vZGVfc2Vuc2VfY21kKCZwYywgSURFVEFQRV9CTE9DS19ERVNDUklQVE9SKTsKIAlpZiAoaWRldGFwZV9xdWV1ZV9wY190YWlsKGRyaXZlLCAmcGMpKSB7CkBAIC0zMTYxLDEwICszMTI1LDEwIEBACiAJCX0KIAkJcmV0dXJuOwogCX0KLQl0YXBlLT5ibGtfc2l6ZSA9IChwYy5idWZmZXJbNCArIDVdIDw8IDE2KSArCi0JCQkJKHBjLmJ1ZmZlcls0ICsgNl0gPDwgOCkgICsKLQkJCQkgcGMuYnVmZmVyWzQgKyA3XTsKLQl0YXBlLT5kcnZfd3JpdGVfcHJvdCA9IChwYy5idWZmZXJbMl0gJiAweDgwKSA+PiA3OworCXRhcGUtPmJsa19zaXplID0gKHBjLmJ1Zls0ICsgNV0gPDwgMTYpICsKKwkJCQkocGMuYnVmWzQgKyA2XSA8PCA4KSAgKworCQkJCSBwYy5idWZbNCArIDddOworCXRhcGUtPmRydl93cml0ZV9wcm90ID0gKHBjLmJ1ZlsyXSAmIDB4ODApID4+IDc7CiB9CiAKIHN0YXRpYyBpbnQgaWRldGFwZV9jaHJkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTMxNzIsNyArMzEzNiw3IEBACiAJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKSwgaSA9IG1pbm9yICYgfjB4YzA7CiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCWlkZXRhcGVfdGFwZV90ICp0YXBlOwotCWlkZXRhcGVfcGNfdCBwYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCWludCByZXR2YWw7CiAKIAlpZiAoaSA+PSBNQVhfSFdJRlMgKiBNQVhfRFJJVkVTKQpAQCAtMzE5NSwyNCArMzE1OSwyNCBAQAogCiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gdGFwZTsKIAotCWlmICh0ZXN0X2FuZF9zZXRfYml0KElERVRBUEVfQlVTWSwgJnRhcGUtPmZsYWdzKSkgeworCWlmICh0ZXN0X2FuZF9zZXRfYml0KElERVRBUEVfRkxBR19CVVNZLCAmdGFwZS0+ZmxhZ3MpKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBvdXRfcHV0X3RhcGU7CiAJfQogCiAJcmV0dmFsID0gaWRldGFwZV93YWl0X3JlYWR5KGRyaXZlLCA2MCAqIEhaKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWNsZWFyX2JpdChJREVUQVBFX0JVU1ksICZ0YXBlLT5mbGFncyk7CisJCWNsZWFyX2JpdChJREVUQVBFX0ZMQUdfQlVTWSwgJnRhcGUtPmZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogJXM6IGRyaXZlIG5vdCByZWFkeVxuIiwgdGFwZS0+bmFtZSk7CiAJCWdvdG8gb3V0X3B1dF90YXBlOwogCX0KIAogCWlkZXRhcGVfcmVhZF9wb3NpdGlvbihkcml2ZSk7Ci0JaWYgKCF0ZXN0X2JpdChJREVUQVBFX0FERFJFU1NfVkFMSUQsICZ0YXBlLT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChJREVUQVBFX0ZMQUdfQUREUkVTU19WQUxJRCwgJnRhcGUtPmZsYWdzKSkKIAkJKHZvaWQpaWRldGFwZV9yZXdpbmRfdGFwZShkcml2ZSk7CiAKIAlpZiAodGFwZS0+Y2hyZGV2X2RpciAhPSBJREVUQVBFX0RJUl9SRUFEKQotCQljbGVhcl9iaXQoSURFVEFQRV9QSVBFTElORV9FUlJPUiwgJnRhcGUtPmZsYWdzKTsKKwkJY2xlYXJfYml0KElERVRBUEVfRkxBR19QSVBFTElORV9FUlIsICZ0YXBlLT5mbGFncyk7CiAKIAkvKiBSZWFkIGJsb2NrIHNpemUgYW5kIHdyaXRlIHByb3RlY3Qgc3RhdHVzIGZyb20gZHJpdmUuICovCiAJaWRlX3RhcGVfZ2V0X2JzaXplX2Zyb21fYmRlc2MoZHJpdmUpOwpAQCAtMzIyNyw3ICszMTkxLDcgQEAKIAlpZiAodGFwZS0+d3JpdGVfcHJvdCkgewogCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZIHx8CiAJCSAgICAoZmlscC0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRFdSKSB7Ci0JCQljbGVhcl9iaXQoSURFVEFQRV9CVVNZLCAmdGFwZS0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KElERVRBUEVfRkxBR19CVVNZLCAmdGFwZS0+ZmxhZ3MpOwogCQkJcmV0dmFsID0gLUVST0ZTOwogCQkJZ290byBvdXRfcHV0X3RhcGU7CiAJCX0KQEAgLTMyNzIsNyArMzIzNiw3IEBACiB7CiAJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGlkZV90YXBlX2YoZmlscCk7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gdGFwZS0+ZHJpdmU7Ci0JaWRldGFwZV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAogCWxvY2tfa2VybmVsKCk7CkBAIC0zMjkyLDcgKzMyNTYsNyBAQAogCQlfX2lkZXRhcGVfa2ZyZWVfc3RhZ2UodGFwZS0+Y2FjaGVfc3RhZ2UpOwogCQl0YXBlLT5jYWNoZV9zdGFnZSA9IE5VTEw7CiAJfQotCWlmIChtaW5vciA8IDEyOCAmJiB0ZXN0X2JpdChJREVUQVBFX01FRElVTV9QUkVTRU5ULCAmdGFwZS0+ZmxhZ3MpKQorCWlmIChtaW5vciA8IDEyOCAmJiB0ZXN0X2JpdChJREVUQVBFX0ZMQUdfTUVESVVNX1BSRVNFTlQsICZ0YXBlLT5mbGFncykpCiAJCSh2b2lkKSBpZGV0YXBlX3Jld2luZF90YXBlKGRyaXZlKTsKIAlpZiAodGFwZS0+Y2hyZGV2X2RpciA9PSBJREVUQVBFX0RJUl9OT05FKSB7CiAJCWlmICh0YXBlLT5kb29yX2xvY2tlZCA9PSBET09SX0xPQ0tFRCkgewpAQCAtMzMwMiw3ICszMjY2LDcgQEAKIAkJCX0KIAkJfQogCX0KLQljbGVhcl9iaXQoSURFVEFQRV9CVVNZLCAmdGFwZS0+ZmxhZ3MpOworCWNsZWFyX2JpdChJREVUQVBFX0ZMQUdfQlVTWSwgJnRhcGUtPmZsYWdzKTsKIAlpZGVfdGFwZV9wdXQodGFwZSk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwpAQCAtMzM1MCw3ICszMzE0LDcgQEAKIHN0YXRpYyB2b2lkIGlkZXRhcGVfZ2V0X2lucXVpcnlfcmVzdWx0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JaWRldGFwZV9wY190IHBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJY2hhciBmd19yZXZbNl0sIHZlbmRvcl9pZFsxMF0sIHByb2R1Y3RfaWRbMThdOwogCiAJaWRldGFwZV9jcmVhdGVfaW5xdWlyeV9jbWQoJnBjKTsKQEAgLTMzNTksOSArMzMyMyw5IEBACiAJCQkJdGFwZS0+bmFtZSk7CiAJCXJldHVybjsKIAl9Ci0JbWVtY3B5KHZlbmRvcl9pZCwgJnBjLmJ1ZmZlcls4XSwgOCk7Ci0JbWVtY3B5KHByb2R1Y3RfaWQsICZwYy5idWZmZXJbMTZdLCAxNik7Ci0JbWVtY3B5KGZ3X3JldiwgJnBjLmJ1ZmZlclszMl0sIDQpOworCW1lbWNweSh2ZW5kb3JfaWQsICZwYy5idWZbOF0sIDgpOworCW1lbWNweShwcm9kdWN0X2lkLCAmcGMuYnVmWzE2XSwgMTYpOworCW1lbWNweShmd19yZXYsICZwYy5idWZbMzJdLCA0KTsKIAogCWlkZV9maXhzdHJpbmcodmVuZG9yX2lkLCAxMCwgMCk7CiAJaWRlX2ZpeHN0cmluZyhwcm9kdWN0X2lkLCAxOCwgMCk7CkBAIC0zMzc4LDcgKzMzNDIsNyBAQAogc3RhdGljIHZvaWQgaWRldGFwZV9nZXRfbW9kZV9zZW5zZV9yZXN1bHRzKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlpZGV0YXBlX3BjX3QgcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCAqY2FwczsKIAl1OCBzcGVlZCwgbWF4X3NwZWVkOwogCkBAIC0zMzkyLDcgKzMzNTYsNyBAQAogCQlwdXRfdW5hbGlnbmVkKDYqNTIsICh1MTYgKikmdGFwZS0+Y2Fwc1sxNl0pOwogCQlyZXR1cm47CiAJfQotCWNhcHMgPSBwYy5idWZmZXIgKyA0ICsgcGMuYnVmZmVyWzNdOworCWNhcHMgPSBwYy5idWYgKyA0ICsgcGMuYnVmWzNdOwogCiAJLyogY29udmVydCB0byBob3N0IG9yZGVyIGFuZCBzYXZlIGZvciBsYXRlciB1c2UgKi8KIAlzcGVlZCA9IGJlMTZfdG9fY3B1KCoodTE2ICopJmNhcHNbMTRdKTsKQEAgLTM1MDYsNyArMzQ3MCw3IEBACiAKIAkvKiBDb21tYW5kIHBhY2tldCBEUlEgdHlwZSAqLwogCWlmICgoKGdjd1swXSAmIDB4NjApID4+IDUpID09IDEpCi0JCXNldF9iaXQoSURFVEFQRV9EUlFfSU5URVJSVVBULCAmdGFwZS0+ZmxhZ3MpOworCQlzZXRfYml0KElERVRBUEVfRkxBR19EUlFfSU5URVJSVVBULCAmdGFwZS0+ZmxhZ3MpOwogCiAJdGFwZS0+bWluX3BpcGVsaW5lID0gMTA7CiAJdGFwZS0+bWF4X3BpcGVsaW5lID0gMTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDA1MThhMmUuLjE1NWNjOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC01OSwzMiArNTksMzQgQEAKIAkJU0VMRUNUX01BU0soZHJpdmUsIDApOwogCiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKQotCQlod2lmLT5PVVRXKCh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YSwgSURFX0RBVEFfUkVHKTsKKwkJaHdpZi0+T1VUVygodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEsCisJCQkgICBod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKIAogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCi0JCWh3aWYtPk9VVEIodGYtPmhvYl9mZWF0dXJlLCBJREVfRkVBVFVSRV9SRUcpOworCQlod2lmLT5PVVRCKHRmLT5ob2JfZmVhdHVyZSwgaHdpZi0+aW9fcG9ydHNbSURFX0ZFQVRVUkVfT0ZGU0VUXSk7CiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCi0JCWh3aWYtPk9VVEIodGYtPmhvYl9uc2VjdCwgSURFX05TRUNUT1JfUkVHKTsKKwkJaHdpZi0+T1VUQih0Zi0+aG9iX25zZWN0LCBod2lmLT5pb19wb3J0c1tJREVfTlNFQ1RPUl9PRkZTRVRdKTsKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQotCQlod2lmLT5PVVRCKHRmLT5ob2JfbGJhbCwgSURFX1NFQ1RPUl9SRUcpOworCQlod2lmLT5PVVRCKHRmLT5ob2JfbGJhbCwgaHdpZi0+aW9fcG9ydHNbSURFX1NFQ1RPUl9PRkZTRVRdKTsKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQotCQlod2lmLT5PVVRCKHRmLT5ob2JfbGJhbSwgSURFX0xDWUxfUkVHKTsKKwkJaHdpZi0+T1VUQih0Zi0+aG9iX2xiYW0sIGh3aWYtPmlvX3BvcnRzW0lERV9MQ1lMX09GRlNFVF0pOwogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCi0JCWh3aWYtPk9VVEIodGYtPmhvYl9sYmFoLCBJREVfSENZTF9SRUcpOworCQlod2lmLT5PVVRCKHRmLT5ob2JfbGJhaCwgaHdpZi0+aW9fcG9ydHNbSURFX0hDWUxfT0ZGU0VUXSk7CiAKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCi0JCWh3aWYtPk9VVEIodGYtPmZlYXR1cmUsIElERV9GRUFUVVJFX1JFRyk7CisJCWh3aWYtPk9VVEIodGYtPmZlYXR1cmUsIGh3aWYtPmlvX3BvcnRzW0lERV9GRUFUVVJFX09GRlNFVF0pOwogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCi0JCWh3aWYtPk9VVEIodGYtPm5zZWN0LCBJREVfTlNFQ1RPUl9SRUcpOworCQlod2lmLT5PVVRCKHRmLT5uc2VjdCwgaHdpZi0+aW9fcG9ydHNbSURFX05TRUNUT1JfT0ZGU0VUXSk7CiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQotCQlod2lmLT5PVVRCKHRmLT5sYmFsLCBJREVfU0VDVE9SX1JFRyk7CisJCWh3aWYtPk9VVEIodGYtPmxiYWwsIGh3aWYtPmlvX3BvcnRzW0lERV9TRUNUT1JfT0ZGU0VUXSk7CiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQotCQlod2lmLT5PVVRCKHRmLT5sYmFtLCBJREVfTENZTF9SRUcpOworCQlod2lmLT5PVVRCKHRmLT5sYmFtLCBod2lmLT5pb19wb3J0c1tJREVfTENZTF9PRkZTRVRdKTsKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCi0JCWh3aWYtPk9VVEIodGYtPmxiYWgsIElERV9IQ1lMX1JFRyk7CisJCWh3aWYtPk9VVEIodGYtPmxiYWgsIGh3aWYtPmlvX3BvcnRzW0lERV9IQ1lMX09GRlNFVF0pOwogCiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCi0JCWh3aWYtPk9VVEIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QuYWxsLCBJREVfU0VMRUNUX1JFRyk7CisJCWh3aWYtPk9VVEIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QuYWxsLAorCQkJICAgaHdpZi0+aW9fcG9ydHNbSURFX1NFTEVDVF9PRkZTRVRdKTsKIH0KIAogaW50IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKmJ1ZikKQEAgLTE1Miw3ICsxNTQsOCBAQAogCXN3aXRjaCAodGFzay0+ZGF0YV9waGFzZSkgewogCWNhc2UgVEFTS0ZJTEVfTVVMVElfT1VUOgogCWNhc2UgVEFTS0ZJTEVfT1VUOgotCQlod2lmLT5PVVRCU1lOQyhkcml2ZSwgdGYtPmNvbW1hbmQsIElERV9DT01NQU5EX1JFRyk7CisJCWh3aWYtPk9VVEJTWU5DKGRyaXZlLCB0Zi0+Y29tbWFuZCwKKwkJCSAgICAgICBod2lmLT5pb19wb3J0c1tJREVfQ09NTUFORF9PRkZTRVRdKTsKIAkJbmRlbGF5KDQwMCk7CS8qIEZJWE1FICovCiAJCXJldHVybiBwcmVfdGFza19vdXRfaW50cihkcml2ZSwgdGFzay0+cnEpOwogCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46CkBAIC00MjMsNiArNDI2LDI1IEBACiB9CiAKIC8qCisgKiBXZSBnb3QgYW4gaW50ZXJydXB0IG9uIGEgdGFza19pbiBjYXNlLCBidXQgbm8gZXJyb3JzIGFuZCBubyBEUlEuCisgKgorICogSXQgbWlnaHQgYmUgYSBzcHVyaW91cyBpcnEgKHNoYXJlZCBpcnEpLCBidXQgaXQgbWlnaHQgYmUgYQorICogY29tbWFuZCB0aGF0IGhhZCBubyBvdXRwdXQuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19pbl91bmV4cGVjdGVkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0KQoreworCS8qIENvbW1hbmQgYWxsIGRvbmU/ICovCisJaWYgKE9LX1NUQVQoc3RhdCwgUkVBRFlfU1RBVCwgQlVTWV9TVEFUKSkgeworCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwkvKiBBc3N1bWUgaXQgd2FzIGEgc3B1cmlvdXMgaXJxICovCisJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19pbl9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7CisJcmV0dXJuIGlkZV9zdGFydGVkOworfQorCisvKgogICogSGFuZGxlciBmb3IgY29tbWFuZCB3aXRoIFBJTyBkYXRhLWluIHBoYXNlIChSZWFkL1JlYWQgTXVsdGlwbGUpLgogICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC00MzEsMTggKzQ1MywxNyBAQAogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAl1OCBzdGF0ID0gaWRlX3JlYWRfc3RhdHVzKGRyaXZlKTsKIAotCS8qIG5ldyB3YXkgZm9yIGRlYWxpbmcgd2l0aCBwcmVtYXR1cmUgc2hhcmVkIFBDSSBpbnRlcnJ1cHRzICovCi0JaWYgKCFPS19TVEFUKHN0YXQsIERSUV9TVEFULCBCQURfUl9TVEFUKSkgewotCQlpZiAoc3RhdCAmIChFUlJfU1RBVCB8IERSUV9TVEFUKSkKLQkJCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19GVU5DVElPTl9fLCBzdGF0KTsKLQkJLyogTm8gZGF0YSB5ZXQsIHNvIHdhaXQgZm9yIGFub3RoZXIgSVJRLiAqLwotCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX2luX2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKLQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCX0KKwkvKiBFcnJvcj8gKi8KKwlpZiAoc3RhdCAmIEVSUl9TVEFUKQorCQlyZXR1cm4gdGFza19lcnJvcihkcml2ZSwgcnEsIF9fRlVOQ1RJT05fXywgc3RhdCk7CisKKwkvKiBEaWRuJ3Qgd2FudCBhbnkgZGF0YT8gT2RkLiAqLworCWlmICghKHN0YXQgJiBEUlFfU1RBVCkpCisJCXJldHVybiB0YXNrX2luX3VuZXhwZWN0ZWQoZHJpdmUsIHJxLCBzdGF0KTsKIAogCWlkZV9waW9fZGF0YWJsb2NrKGRyaXZlLCBycSwgMCk7CiAKLQkvKiBJZiBpdCB3YXMgdGhlIGxhc3QgZGF0YWJsb2NrIGNoZWNrIHN0YXR1cyBhbmQgZmluaXNoIHRyYW5zZmVyLiAqLworCS8qIEFyZSB3ZSBkb25lPyBDaGVjayBzdGF0dXMgYW5kIGZpbmlzaCB0cmFuc2Zlci4gKi8KIAlpZiAoIWh3aWYtPm5sZWZ0KSB7CiAJCXN0YXQgPSB3YWl0X2RyaXZlX25vdF9idXN5KGRyaXZlKTsKIAkJaWYgKCFPS19TVEFUKHN0YXQsIDAsIEJBRF9TVEFUKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS5jIGIvZHJpdmVycy9pZGUvaWRlLmMKaW5kZXggNGE4OTUyYS4uOTE3YzcyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLmMKQEAgLTc4LDYgKzc4LDggQEAKIC8qIGRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgZmFpbHVyZXMgKi8KICNkZWZpbmUgSURFX0RFRkFVTFRfTUFYX0ZBSUxVUkVTIAkxCiAKK3N0cnVjdCBjbGFzcyAqaWRlX3BvcnRfY2xhc3M7CisKIHN0YXRpYyBjb25zdCB1OCBpZGVfaHdpZl90b19tYWpvcltdID0geyBJREUwX01BSk9SLCBJREUxX01BSk9SLAogCQkJCQlJREUyX01BSk9SLCBJREUzX01BSk9SLAogCQkJCQlJREU0X01BSk9SLCBJREU1X01BSk9SLApAQCAtOTAsMTAgKzkyLDYgQEAKIERFRklORV9NVVRFWChpZGVfY2ZnX210eCk7CiAgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKGlkZV9sb2NrKTsKIAotI2lmZGVmIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSCi1pbnQgaWRlX3NjYW5fZGlyZWN0aW9uOyAvKiBUSElTIHdhcyBmb3JtZXJseSAyLjIueCBwY2k9cmV2ZXJzZSAqLwotI2VuZGlmCi0KIGludCBub2F1dG9kbWEgPSAwOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQpAQCAtMTA5LDEzICsxMDcsMTMgQEAKIAogRVhQT1JUX1NZTUJPTChpZGVfaHdpZnMpOwogCitzdGF0aWMgdm9pZCBpZGVfcG9ydF9pbml0X2RldmljZXNfZGF0YShpZGVfaHdpZl90ICopOworCiAvKgogICogRG8gbm90IGV2ZW4gKnRoaW5rKiBhYm91dCBjYWxsaW5nIHRoaXMhCiAgKi8KIHZvaWQgaWRlX2luaXRfcG9ydF9kYXRhKGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKLQl1bnNpZ25lZCBpbnQgdW5pdDsKLQogCS8qIGJ1bGsgaW5pdGlhbGl6ZSBod2lmICYgZHJpdmUgaW5mbyB3aXRoIHplcm9zICovCiAJbWVtc2V0KGh3aWYsIDAsIHNpemVvZihpZGVfaHdpZl90KSk7CiAKQEAgLTEzNCw4ICsxMzIsMjAgQEAKIAogCWRlZmF1bHRfaHdpZl9pb3BzKGh3aWYpOwogCWRlZmF1bHRfaHdpZl90cmFuc3BvcnQoaHdpZik7CisKKwlpZGVfcG9ydF9pbml0X2RldmljZXNfZGF0YShod2lmKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbml0X3BvcnRfZGF0YSk7CisKK3N0YXRpYyB2b2lkIGlkZV9wb3J0X2luaXRfZGV2aWNlc19kYXRhKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaW50IHVuaXQ7CisKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KSB7CiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CisJCXU4IGogPSAoaHdpZi0+aW5kZXggKiBNQVhfRFJJVkVTKSArIHVuaXQ7CisKKwkJbWVtc2V0KGRyaXZlLCAwLCBzaXplb2YoKmRyaXZlKSk7CiAKIAkJZHJpdmUtPm1lZGlhCQkJPSBpZGVfZGlzazsKIAkJZHJpdmUtPnNlbGVjdC5hbGwJCT0gKHVuaXQ8PDQpfDB4YTA7CkBAIC0xNDcsMzIgKzE1NywxMyBAQAogCQlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeQk9IDE7CiAJCWRyaXZlLT5uYW1lWzBdCQkJPSAnaCc7CiAJCWRyaXZlLT5uYW1lWzFdCQkJPSAnZCc7Ci0JCWRyaXZlLT5uYW1lWzJdCQkJPSAnYScgKyAoaW5kZXggKiBNQVhfRFJJVkVTKSArIHVuaXQ7CisJCWRyaXZlLT5uYW1lWzJdCQkJPSAnYScgKyBqOwogCQlkcml2ZS0+bWF4X2ZhaWx1cmVzCQk9IElERV9ERUZBVUxUX01BWF9GQUlMVVJFUzsKLQkJZHJpdmUtPnVzaW5nX2RtYQkJPSAwOwotCQlkcml2ZS0+dmRtYQkJCT0gMDsKKwogCQlJTklUX0xJU1RfSEVBRCgmZHJpdmUtPmxpc3QpOwogCQlpbml0X2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwogCX0KIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbml0X3BvcnRfZGF0YSk7Ci0KLXN0YXRpYyB2b2lkIGluaXRfaHdpZl9kZWZhdWx0KGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlod19yZWdzX3QgaHc7Ci0KLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHdfcmVnc190KSk7Ci0KLQlpZGVfaW5pdF9od2lmX3BvcnRzKCZodywgaWRlX2RlZmF1bHRfaW9fYmFzZShpbmRleCksIDAsICZod2lmLT5pcnEpOwotCi0JbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBody5pb19wb3J0cywgc2l6ZW9mKGh3LmlvX3BvcnRzKSk7Ci0KLQlod2lmLT5ub3Byb2JlID0gIWh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF07Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSEQKLQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSBIRF9EQVRBKQotCQlod2lmLT5ub3Byb2JlID0gMTsJLyogbWF5IGJlIG92ZXJyaWRkZW4gYnkgaWRlX3NldHVwKCkgKi8KLSNlbmRpZgotfQogCiAvKgogICogaW5pdF9pZGVfZGF0YSgpIHNldHMgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcyBpbnRvIGFsbCBmaWVsZHMKQEAgLTE5NCw3ICsxODUsNiBAQAogI2RlZmluZSBNQUdJQ19DT09LSUUgMHgxMjM0NTY3OAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfaWRlX2RhdGEgKHZvaWQpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKIAl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFnaWNfY29va2llID0gTUFHSUNfQ09PS0lFOwogCkBAIC0yMDQsMTMgKzE5NCw5IEBACiAKIAkvKiBJbml0aWFsaXNlIGFsbCBpbnRlcmZhY2Ugc3RydWN0dXJlcyAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9IV0lGUzsgKytpbmRleCkgewotCQlod2lmID0gJmlkZV9od2lmc1tpbmRleF07CisJCWlkZV9od2lmX3QgKmh3aWYgPSAmaWRlX2h3aWZzW2luZGV4XTsKKwogCQlpZGVfaW5pdF9wb3J0X2RhdGEoaHdpZiwgaW5kZXgpOwotCQlpbml0X2h3aWZfZGVmYXVsdChod2lmLCBpbmRleCk7Ci0jaWYgIWRlZmluZWQoQ09ORklHX1BQQzMyKSB8fCAhZGVmaW5lZChDT05GSUdfUENJKQotCQlod2lmLT5pcnEgPQotCQkJaWRlX2luaXRfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSk7Ci0jZW5kaWYKIAl9CiB9CiAKQEAgLTI1OSw3ICsyNDUsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CiAJCWh3aWYgPSAmaWRlX2h3aWZzW2ldOwotCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSAwKQorCQlpZiAoaHdpZi0+Y2hpcHNldCA9PSBpZGVfdW5rbm93bikKIAkJCWdvdG8gZm91bmQ7CiAJfQogCkBAIC0zNTcsMTA4ICszNDMsNiBAQAogCQkJcmVsZWFzZV9yZWdpb24oaHdpZi0+aW9fcG9ydHNbaV0sIDEpOwogfQogCi0vKioKLSAqCWlkZV9od2lmX3Jlc3RvcmUJLQlyZXN0b3JlIGh3aWYgdG8gdGVtcGxhdGUKLSAqCUBod2lmOiBod2lmIHRvIHVwZGF0ZQotICoJQHRtcF9od2lmOiB0ZW1wbGF0ZQotICoKLSAqCVJlc3RvcmUgaHdpZiB0byBhIHByZXZpb3VzIHN0YXRlIGJ5IGNvcHlpbmcgbW9zdCBzZXR0aW5ncwotICoJZnJvbSB0aGUgdGVtcGxhdGUuCi0gKi8KLQotc3RhdGljIHZvaWQgaWRlX2h3aWZfcmVzdG9yZShpZGVfaHdpZl90ICpod2lmLCBpZGVfaHdpZl90ICp0bXBfaHdpZikKLXsKLQlod2lmLT5od2dyb3VwCQkJPSB0bXBfaHdpZi0+aHdncm91cDsKLQotCWh3aWYtPmdlbmRldi5wYXJlbnQJCT0gdG1wX2h3aWYtPmdlbmRldi5wYXJlbnQ7Ci0KLQlod2lmLT5wcm9jCQkJPSB0bXBfaHdpZi0+cHJvYzsKLQotCWh3aWYtPm1ham9yCQkJPSB0bXBfaHdpZi0+bWFqb3I7Ci0JaHdpZi0+c3RyYWlnaHQ4CQkJPSB0bXBfaHdpZi0+c3RyYWlnaHQ4OwotCWh3aWYtPmJ1c19zdGF0ZQkJCT0gdG1wX2h3aWYtPmJ1c19zdGF0ZTsKLQotCWh3aWYtPmhvc3RfZmxhZ3MJCT0gdG1wX2h3aWYtPmhvc3RfZmxhZ3M7Ci0KLQlod2lmLT5waW9fbWFzawkJCT0gdG1wX2h3aWYtPnBpb19tYXNrOwotCi0JaHdpZi0+dWx0cmFfbWFzawkJPSB0bXBfaHdpZi0+dWx0cmFfbWFzazsKLQlod2lmLT5td2RtYV9tYXNrCQk9IHRtcF9od2lmLT5td2RtYV9tYXNrOwotCWh3aWYtPnN3ZG1hX21hc2sJCT0gdG1wX2h3aWYtPnN3ZG1hX21hc2s7Ci0KLQlod2lmLT5jYmwJCQk9IHRtcF9od2lmLT5jYmw7Ci0KLQlod2lmLT5jaGlwc2V0CQkJPSB0bXBfaHdpZi0+Y2hpcHNldDsKLQlod2lmLT5ob2xkCQkJPSB0bXBfaHdpZi0+aG9sZDsKLQotCWh3aWYtPmRldgkJCT0gdG1wX2h3aWYtPmRldjsKLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQotCWh3aWYtPmNkcwkJCT0gdG1wX2h3aWYtPmNkczsKLSNlbmRpZgotCi0JaHdpZi0+c2V0X3Bpb19tb2RlCQk9IHRtcF9od2lmLT5zZXRfcGlvX21vZGU7Ci0JaHdpZi0+c2V0X2RtYV9tb2RlCQk9IHRtcF9od2lmLT5zZXRfZG1hX21vZGU7Ci0JaHdpZi0+bWRtYV9maWx0ZXIJCT0gdG1wX2h3aWYtPm1kbWFfZmlsdGVyOwotCWh3aWYtPnVkbWFfZmlsdGVyCQk9IHRtcF9od2lmLT51ZG1hX2ZpbHRlcjsKLQlod2lmLT5zZWxlY3Rwcm9jCQk9IHRtcF9od2lmLT5zZWxlY3Rwcm9jOwotCWh3aWYtPnJlc2V0X3BvbGwJCT0gdG1wX2h3aWYtPnJlc2V0X3BvbGw7Ci0JaHdpZi0+cHJlX3Jlc2V0CQkJPSB0bXBfaHdpZi0+cHJlX3Jlc2V0OwotCWh3aWYtPnJlc2V0cHJvYwkJCT0gdG1wX2h3aWYtPnJlc2V0cHJvYzsKLQlod2lmLT5tYXNrcHJvYwkJCT0gdG1wX2h3aWYtPm1hc2twcm9jOwotCWh3aWYtPnF1aXJrcHJvYwkJCT0gdG1wX2h3aWYtPnF1aXJrcHJvYzsKLQlod2lmLT5idXNwcm9jCQkJPSB0bXBfaHdpZi0+YnVzcHJvYzsKLQotCWh3aWYtPmF0YV9pbnB1dF9kYXRhCQk9IHRtcF9od2lmLT5hdGFfaW5wdXRfZGF0YTsKLQlod2lmLT5hdGFfb3V0cHV0X2RhdGEJCT0gdG1wX2h3aWYtPmF0YV9vdXRwdXRfZGF0YTsKLQlod2lmLT5hdGFwaV9pbnB1dF9ieXRlcwkJPSB0bXBfaHdpZi0+YXRhcGlfaW5wdXRfYnl0ZXM7Ci0JaHdpZi0+YXRhcGlfb3V0cHV0X2J5dGVzCT0gdG1wX2h3aWYtPmF0YXBpX291dHB1dF9ieXRlczsKLQotCWh3aWYtPmRtYV9ob3N0X3NldAkJPSB0bXBfaHdpZi0+ZG1hX2hvc3Rfc2V0OwotCWh3aWYtPmRtYV9zZXR1cAkJCT0gdG1wX2h3aWYtPmRtYV9zZXR1cDsKLQlod2lmLT5kbWFfZXhlY19jbWQJCT0gdG1wX2h3aWYtPmRtYV9leGVjX2NtZDsKLQlod2lmLT5kbWFfc3RhcnQJCQk9IHRtcF9od2lmLT5kbWFfc3RhcnQ7Ci0JaHdpZi0+aWRlX2RtYV9lbmQJCT0gdG1wX2h3aWYtPmlkZV9kbWFfZW5kOwotCWh3aWYtPmlkZV9kbWFfdGVzdF9pcnEJCT0gdG1wX2h3aWYtPmlkZV9kbWFfdGVzdF9pcnE7Ci0JaHdpZi0+aWRlX2RtYV9jbGVhcl9pcnEJCT0gdG1wX2h3aWYtPmlkZV9kbWFfY2xlYXJfaXJxOwotCWh3aWYtPmRtYV9sb3N0X2lycQkJPSB0bXBfaHdpZi0+ZG1hX2xvc3RfaXJxOwotCWh3aWYtPmRtYV90aW1lb3V0CQk9IHRtcF9od2lmLT5kbWFfdGltZW91dDsKLQotCWh3aWYtPk9VVEIJCQk9IHRtcF9od2lmLT5PVVRCOwotCWh3aWYtPk9VVEJTWU5DCQkJPSB0bXBfaHdpZi0+T1VUQlNZTkM7Ci0JaHdpZi0+T1VUVwkJCT0gdG1wX2h3aWYtPk9VVFc7Ci0JaHdpZi0+T1VUU1cJCQk9IHRtcF9od2lmLT5PVVRTVzsKLQlod2lmLT5PVVRTTAkJCT0gdG1wX2h3aWYtPk9VVFNMOwotCi0JaHdpZi0+SU5CCQkJPSB0bXBfaHdpZi0+SU5COwotCWh3aWYtPklOVwkJCT0gdG1wX2h3aWYtPklOVzsKLQlod2lmLT5JTlNXCQkJPSB0bXBfaHdpZi0+SU5TVzsKLQlod2lmLT5JTlNMCQkJPSB0bXBfaHdpZi0+SU5TTDsKLQotCWh3aWYtPnNnX21heF9uZW50cwkJPSB0bXBfaHdpZi0+c2dfbWF4X25lbnRzOwotCi0JaHdpZi0+bW1pbwkJCT0gdG1wX2h3aWYtPm1taW87Ci0JaHdpZi0+cnFzaXplCQkJPSB0bXBfaHdpZi0+cnFzaXplOwotCi0jaWZuZGVmIENPTkZJR19CTEtfREVWX0lERUNTCi0JaHdpZi0+aXJxCQkJPSB0bXBfaHdpZi0+aXJxOwotI2VuZGlmCi0KLQlod2lmLT5kbWFfYmFzZQkJCT0gdG1wX2h3aWYtPmRtYV9iYXNlOwotCWh3aWYtPmRtYV9jb21tYW5kCQk9IHRtcF9od2lmLT5kbWFfY29tbWFuZDsKLQlod2lmLT5kbWFfdmVuZG9yMQkJPSB0bXBfaHdpZi0+ZG1hX3ZlbmRvcjE7Ci0JaHdpZi0+ZG1hX3N0YXR1cwkJPSB0bXBfaHdpZi0+ZG1hX3N0YXR1czsKLQlod2lmLT5kbWFfdmVuZG9yMwkJPSB0bXBfaHdpZi0+ZG1hX3ZlbmRvcjM7Ci0JaHdpZi0+ZG1hX3ByZHRhYmxlCQk9IHRtcF9od2lmLT5kbWFfcHJkdGFibGU7Ci0KLQlod2lmLT5jb25maWdfZGF0YQkJPSB0bXBfaHdpZi0+Y29uZmlnX2RhdGE7Ci0JaHdpZi0+c2VsZWN0X2RhdGEJCT0gdG1wX2h3aWYtPnNlbGVjdF9kYXRhOwotCWh3aWYtPmV4dHJhX2Jhc2UJCT0gdG1wX2h3aWYtPmV4dHJhX2Jhc2U7Ci0JaHdpZi0+ZXh0cmFfcG9ydHMJCT0gdG1wX2h3aWYtPmV4dHJhX3BvcnRzOwotCi0JaHdpZi0+aHdpZl9kYXRhCQkJPSB0bXBfaHdpZi0+aHdpZl9kYXRhOwotfQotCiB2b2lkIGlkZV9yZW1vdmVfcG9ydF9mcm9tX2h3Z3JvdXAoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZGVfaHdncm91cF90ICpod2dyb3VwID0gaHdpZi0+aHdncm91cDsKQEAgLTQ5NCwxMSArMzc4LDM4IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CiB9CiAKKy8qIENhbGxlZCB3aXRoIGlkZV9sb2NrIGhlbGQuICovCitzdGF0aWMgdm9pZCBfX2lkZV9wb3J0X3VucmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9EUklWRVM7IGkrKykgeworCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOworCisJCWlmIChkcml2ZS0+cHJlc2VudCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisJCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKKwkJCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwkJfQorCX0KK30KKwordm9pZCBpZGVfcG9ydF91bnJlZ2lzdGVyX2RldmljZXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7CisJc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOworCV9faWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKGh3aWYpOworCWh3aWYtPnByZXNlbnQgPSAwOworCWlkZV9wb3J0X2luaXRfZGV2aWNlc19kYXRhKGh3aWYpOworCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOworCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKTsKKwogLyoqCiAgKglpZGVfdW5yZWdpc3RlcgkJLQlmcmVlIGFuIElERSBpbnRlcmZhY2UKICAqCUBpbmRleDogaW5kZXggb2YgaW50ZXJmYWNlICh3aWxsIGNoYW5nZSBzb29uIHRvIGEgcG9pbnRlcikKLSAqCUBpbml0X2RlZmF1bHQ6IGluaXQgZGVmYXVsdCBod2lmIGZsYWcKLSAqCUByZXN0b3JlOiByZXN0b3JlIGh3aWYgZmxhZwogICoKICAqCVBlcmZvcm0gdGhlIGZpbmFsIHVucmVnaXN0ZXIgb2YgYW4gSURFIGludGVyZmFjZS4gQXQgdGhlIG1vbWVudAogICoJd2UgZG9uJ3QgcmVmY291bnQgaW50ZXJmYWNlcyBzbyB0aGlzIHdpbGwgYWxzbyBnZXQgc3BsaXQgdXAuCkBAIC01MTgsMTMgKzQyOSwxMSBAQAogICoJVGhpcyBpcyByYXZpbmcgYm9ua2Vycy4KICAqLwogCi12b2lkIGlkZV91bnJlZ2lzdGVyKHVuc2lnbmVkIGludCBpbmRleCwgaW50IGluaXRfZGVmYXVsdCwgaW50IHJlc3RvcmUpCit2b2lkIGlkZV91bnJlZ2lzdGVyKHVuc2lnbmVkIGludCBpbmRleCkKIHsKLQlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaWRlX2h3aWZfdCAqaHdpZiwgKmc7Ci0Jc3RhdGljIGlkZV9od2lmX3QgdG1wX2h3aWY7IC8qIHByb3RlY3RlZCBieSBpZGVfY2ZnX210eCAqLwogCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXA7Ci0JaW50IGlycV9jb3VudCA9IDAsIHVuaXQ7CisJaW50IGlycV9jb3VudCA9IDA7CiAKIAlCVUdfT04oaW5kZXggPj0gTUFYX0hXSUZTKTsKIApAQCAtNTM1LDE1ICs0NDQsNyBAQAogCWh3aWYgPSAmaWRlX2h3aWZzW2luZGV4XTsKIAlpZiAoIWh3aWYtPnByZXNlbnQpCiAJCWdvdG8gYWJvcnQ7Ci0JZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7ICsrdW5pdCkgewotCQlkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07Ci0JCWlmICghZHJpdmUtPnByZXNlbnQpCi0JCQljb250aW51ZTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7Ci0JCWRldmljZV91bnJlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmZHJpdmUtPmdlbmRldl9yZWxfY29tcCk7Ci0JCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKLQl9CisJX19pZGVfcG9ydF91bnJlZ2lzdGVyX2RldmljZXMoaHdpZik7CiAJaHdpZi0+cHJlc2VudCA9IDA7CiAKIAlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKQEAgLTU2NSw2ICs0NjYsNyBAQAogCiAJaWRlX3JlbW92ZV9wb3J0X2Zyb21faHdncm91cChod2lmKTsKIAorCWRldmljZV91bnJlZ2lzdGVyKGh3aWYtPnBvcnRkZXYpOwogCWRldmljZV91bnJlZ2lzdGVyKCZod2lmLT5nZW5kZXYpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh3aWYtPmdlbmRldl9yZWxfY29tcCk7CiAKQEAgLTU3NiwzOSArNDc4LDE0IEBACiAJdW5yZWdpc3Rlcl9ibGtkZXYoaHdpZi0+bWFqb3IsIGh3aWYtPm5hbWUpOwogCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKIAotCWlmIChod2lmLT5kbWFfYmFzZSkgewotCQkodm9pZCkgaWRlX3JlbGVhc2VfZG1hKGh3aWYpOworCWlmIChod2lmLT5kbWFfYmFzZSkKKwkJKHZvaWQpaWRlX3JlbGVhc2VfZG1hKGh3aWYpOwogCi0JCWh3aWYtPmRtYV9iYXNlID0gMDsKLQkJaHdpZi0+ZG1hX2NvbW1hbmQgPSAwOwotCQlod2lmLT5kbWFfdmVuZG9yMSA9IDA7Ci0JCWh3aWYtPmRtYV9zdGF0dXMgPSAwOwotCQlod2lmLT5kbWFfdmVuZG9yMyA9IDA7Ci0JCWh3aWYtPmRtYV9wcmR0YWJsZSA9IDA7Ci0KLQkJaHdpZi0+ZXh0cmFfYmFzZSAgPSAwOwotCQlod2lmLT5leHRyYV9wb3J0cyA9IDA7Ci0JfQotCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2Ugb25seSByZWxlYXNlIHRoZSBzdGFuZGFyZCBwb3J0cywKLQkgKiBhbmQgZG8gbm90IGV2ZW4gdHJ5IHRvIGhhbmRsZSBhbnkgZXh0cmEgcG9ydHMKLQkgKiBhbGxvY2F0ZWQgZm9yIHdlaXJkIElERSBpbnRlcmZhY2UgY2hpcHNldHMuCi0JICovCiAJaWRlX2h3aWZfcmVsZWFzZV9yZWdpb25zKGh3aWYpOwogCi0JLyogY29weSBvcmlnaW5hbCBzZXR0aW5ncyAqLwotCXRtcF9od2lmID0gKmh3aWY7Ci0KIAkvKiByZXN0b3JlIGh3aWYgZGF0YSB0byBwcmlzdGluZSBzdGF0dXMgKi8KIAlpZGVfaW5pdF9wb3J0X2RhdGEoaHdpZiwgaW5kZXgpOwogCi0JaWYgKGluaXRfZGVmYXVsdCkKLQkJaW5pdF9od2lmX2RlZmF1bHQoaHdpZiwgaW5kZXgpOwotCi0JaWYgKHJlc3RvcmUpCi0JCWlkZV9od2lmX3Jlc3RvcmUoaHdpZiwgJnRtcF9od2lmKTsKLQogYWJvcnQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CkBAIC02MjcsNzkgKzUwNCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5pdF9wb3J0X2h3KTsKIAotaWRlX2h3aWZfdCAqaWRlX2RlcHJlY2F0ZWRfZmluZF9wb3J0KHVuc2lnbmVkIGxvbmcgYmFzZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCWh3aWYgPSAmaWRlX2h3aWZzW2ldOwotCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSBiYXNlKQotCQkJZ290byBmb3VuZDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKLQkJaHdpZiA9ICZpZGVfaHdpZnNbaV07Ci0JCWlmIChod2lmLT5ob2xkKQotCQkJY29udGludWU7Ci0JCWlmICghaHdpZi0+cHJlc2VudCAmJiBod2lmLT5tYXRlID09IE5VTEwpCi0JCQlnb3RvIGZvdW5kOwotCX0KLQotCWh3aWYgPSBOVUxMOwotZm91bmQ6Ci0JcmV0dXJuIGh3aWY7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZGVwcmVjYXRlZF9maW5kX3BvcnQpOwotCi0vKioKLSAqCWlkZV9yZWdpc3Rlcl9odwkJLQlyZWdpc3RlciBJREUgaW50ZXJmYWNlCi0gKglAaHc6IGhhcmR3YXJlIHJlZ2lzdGVycwotICoJQHF1aXJrcHJvYzogcXVpcmtwcm9jIGZ1bmN0aW9uCi0gKglAaHdpZnA6IHBvaW50ZXIgdG8gcmV0dXJuZWQgaHdpZgotICoKLSAqCVJlZ2lzdGVyIGFuIElERSBpbnRlcmZhY2UsIHNwZWNpZnlpbmcgZXhhY3RseSB0aGUgcmVnaXN0ZXJzIGV0Yy4KLSAqCi0gKglSZXR1cm5zIC0xIG9uIGVycm9yLgotICovCi0KLWludCBpZGVfcmVnaXN0ZXJfaHcoaHdfcmVnc190ICpodywgdm9pZCAoKnF1aXJrcHJvYykoaWRlX2RyaXZlX3QgKiksCi0JCSAgICBpZGVfaHdpZl90ICoqaHdpZnApCi17Ci0JaW50IGluZGV4LCByZXRyeSA9IDE7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKLQl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQotCWRvIHsKLQkJaHdpZiA9IGlkZV9kZXByZWNhdGVkX2ZpbmRfcG9ydChody0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSk7Ci0JCWluZGV4ID0gaHdpZi0+aW5kZXg7Ci0JCWlmIChod2lmKQotCQkJZ290byBmb3VuZDsKLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0hXSUZTOyBpbmRleCsrKQotCQkJaWRlX3VucmVnaXN0ZXIoaW5kZXgsIDEsIDEpOwotCX0gd2hpbGUgKHJldHJ5LS0pOwotCXJldHVybiAtMTsKLWZvdW5kOgotCWlmIChod2lmLT5wcmVzZW50KQotCQlpZGVfdW5yZWdpc3RlcihpbmRleCwgMCwgMSk7Ci0JZWxzZSBpZiAoIWh3aWYtPmhvbGQpCi0JCWlkZV9pbml0X3BvcnRfZGF0YShod2lmLCBpbmRleCk7Ci0KLQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsIGh3KTsKLQlod2lmLT5xdWlya3Byb2MgPSBxdWlya3Byb2M7Ci0KLQlpZHhbMF0gPSBpbmRleDsKLQotCWlkZV9kZXZpY2VfYWRkKGlkeCwgTlVMTCk7Ci0KLQlpZiAoaHdpZnApCi0JCSpod2lmcCA9IGh3aWY7Ci0KLQlyZXR1cm4gaHdpZi0+cHJlc2VudCA/IGluZGV4IDogLTE7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaWRlX3JlZ2lzdGVyX2h3KTsKLQogLyoKICAqCUxvY2tzIGZvciBJREUgc2V0dGluZyBmdW5jdGlvbmFsaXR5CiAgKi8KQEAgLTEwMDIsMjcgKzgwNiw2IEBACiAJCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQkJcmV0dXJuIC1FQUNDRVM7CiAJCQlyZXR1cm4gaWRlX3Rhc2tfaW9jdGwoZHJpdmUsIGNtZCwgYXJnKTsKLQotCQljYXNlIEhESU9fU0NBTl9IV0lGOgotCQl7Ci0JCQlod19yZWdzX3QgaHc7Ci0JCQlpbnQgYXJnc1szXTsKLQkJCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkgcmV0dXJuIC1FQUNDRVM7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoYXJncywgcCwgMyAqIHNpemVvZihpbnQpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwotCQkJaWRlX2luaXRfaHdpZl9wb3J0cygmaHcsICh1bnNpZ25lZCBsb25nKSBhcmdzWzBdLAotCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGFyZ3NbMV0sIE5VTEwpOwotCQkJaHcuaXJxID0gYXJnc1syXTsKLQkJCWlmIChpZGVfcmVnaXN0ZXJfaHcoJmh3LCBOVUxMLCBOVUxMKSA9PSAtMSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCXJldHVybiAwOwotCQl9Ci0JICAgICAgICBjYXNlIEhESU9fVU5SRUdJU1RFUl9IV0lGOgotCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKSByZXR1cm4gLUVBQ0NFUzsKLQkJCS8qIChhcmcgPiBNQVhfSFdJRlMpIGNoZWNrZWQgaW4gZnVuY3Rpb24gKi8KLQkJCWlkZV91bnJlZ2lzdGVyKGFyZywgMSwgMSk7Ci0JCQlyZXR1cm4gMDsKIAkJY2FzZSBIRElPX1NFVF9OSUNFOgogCQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSByZXR1cm4gLUVBQ0NFUzsKIAkJCWlmIChhcmcgIT0gKGFyZyAmICgoMSA8PCBJREVfTklDRV9EU0NfT1ZFUkxBUCkgfCAoMSA8PCBJREVfTklDRV8xKSkpKQpAQCAtMTAzNiwxMCArODE5LDkgQEAKIAkJCWRyaXZlLT5uaWNlMSA9IChhcmcgPj4gSURFX05JQ0VfMSkgJiAxOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSERJT19EUklWRV9SRVNFVDoKLQkJewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgcmV0dXJuIC1FQUNDRVM7Ci0JCQkKKwkJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCQlyZXR1cm4gLUVBQ0NFUzsKKwogCQkJLyoKIAkJCSAqCUFib3J0IHRoZSBjdXJyZW50IGNvbW1hbmQgb24gdGhlCiAJCQkgKglncm91cCBpZiB0aGVyZSBpcyBvbmUsIHRha2luZwpAQCAtMTA1OCwxNyArODQwLDE1IEBACiAJCQlpZGVfYWJvcnQoZHJpdmUsICJkcml2ZSByZXNldCIpOwogCiAJCQlCVUdfT04oSFdHUk9VUChkcml2ZSktPmhhbmRsZXIpOwotCQkJCQorCiAJCQkvKiBFbnN1cmUgbm90aGluZyBnZXRzIHF1ZXVlZCBhZnRlciB3ZQogCQkJICAgZHJvcCB0aGUgbG9jay4gUmVzZXQgd2lsbCBjbGVhciB0aGUgYnVzeSAqLwotCQkgICAKKwogCQkJSFdHUk9VUChkcml2ZSktPmJ1c3kgPSAxOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAkJCSh2b2lkKSBpZGVfZG9fcmVzZXQoZHJpdmUpOwogCiAJCQlyZXR1cm4gMDsKLQkJfQotCiAJCWNhc2UgSERJT19HRVRfQlVTU1RBVEU6CiAJCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xMDc5LDggKzg1OSw2IEBACiAJCWNhc2UgSERJT19TRVRfQlVTU1RBVEU6CiAJCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCQlpZiAoSFdJRihkcml2ZSktPmJ1c3Byb2MpCi0JCQkJcmV0dXJuIEhXSUYoZHJpdmUpLT5idXNwcm9jKGRyaXZlLCAoaW50KWFyZyk7CiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExODEsMTQgKzk1OSwxNSBAQAogZXh0ZXJuIGludCBwcm9iZV9odDY1NjBiOwogZXh0ZXJuIGludCBwcm9iZV9xZDY1eHg7CiBleHRlcm4gaW50IGNtZDY0MF92bGI7CitleHRlcm4gaW50IHByb2JlXzRkcml2ZXM7CiAKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBpc19jaGlwc2V0X3NldFtNQVhfSFdJRlNdOworc3RhdGljIGludCBfX2luaXRkYXRhIGlzX2NoaXBzZXRfc2V0OwogCiAvKgogICogaWRlX3NldHVwKCkgZ2V0cyBjYWxsZWQgVkVSWSBFQVJMWSBkdXJpbmcgaW5pdGlhbGl6YXRpb24sCiAgKiB0byBoYW5kbGUga2VybmVsICJjb21tYW5kIGxpbmUiIHN0cmluZ3MgYmVnaW5uaW5nIHdpdGggImhkeD0iIG9yICJpZGUiLgogICoKLSAqIFJlbWVtYmVyIHRvIHVwZGF0ZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgaWYgeW91IGNoYW5nZSBzb21ldGhpbmcgaGVyZS4KKyAqIFJlbWVtYmVyIHRvIHVwZGF0ZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGlmIHlvdSBjaGFuZ2Ugc29tZXRoaW5nIGhlcmUuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGlkZV9zZXR1cChjaGFyICpzKQogewpAQCAtMTIyNSwxNCArMTAwNCw2IEBACiAJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogCX0KIAotI2lmZGVmIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSCi0JaWYgKCFzdHJjbXAocywgImlkZT1yZXZlcnNlIikpIHsKLQkJaWRlX3NjYW5fZGlyZWN0aW9uID0gMTsKLQkJcHJpbnRrKCIgOiBFbmFibGVkIHN1cHBvcnQgZm9yIElERSBpbnZlcnNlIHNjYW4gb3JkZXIuXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCiAJaWYgKCFzdHJjbXAocywgImlkZT1ub2FjcGkiKSkgewogCQkvL3ByaW50aygiIDogRGlzYWJsZSBJREUgQUNQSSBzdXBwb3J0LlxuIik7CkBAIC0xMjY2LDcgKzEwMzcsNyBAQAogCQlkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CiAJCWlmIChzdHJuY21wKHMgKyA0LCAiaWRlLSIsIDQpID09IDApIHsKIAkJCXN0cmxjcHkoZHJpdmUtPmRyaXZlcl9yZXEsIHMgKyA0LCBzaXplb2YoZHJpdmUtPmRyaXZlcl9yZXEpKTsKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogCQl9CiAJCXN3aXRjaCAobWF0Y2hfcGFybSgmc1szXSwgaGRfd29yZHMsIHZhbHMsIDMpKSB7CiAJCQljYXNlIC0xOiAvKiAibm9uZSIgKi8KQEAgLTEyOTgsMTMgKzEwNjksMTMgQEAKIAkJCQlnb3RvIGRvbmU7CiAJCQljYXNlIC0xMjogLyogInJlbWFwIiAqLwogCQkJCWRyaXZlLT5yZW1hcF8wX3RvXzEgPSAxOwotCQkJCWdvdG8gZG9uZTsKKwkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKIAkJCWNhc2UgLTEzOiAvKiAicmVtYXA2MyIgKi8KIAkJCQlkcml2ZS0+c2VjdDAgPSA2MzsKLQkJCQlnb3RvIGRvbmU7CisJCQkJZ290byBvYnNvbGV0ZV9vcHRpb247CiAJCQljYXNlIC0xNDogLyogInNjc2kiICovCiAJCQkJZHJpdmUtPnNjc2kgPSAxOwotCQkJCWdvdG8gZG9uZTsKKwkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKIAkJCWNhc2UgMzogLyogY3lsLGhlYWQsc2VjdCAqLwogCQkJCWRyaXZlLT5tZWRpYQk9IGlkZV9kaXNrOwogCQkJCWRyaXZlLT5yZWFkeV9zdGF0ID0gUkVBRFlfU1RBVDsKQEAgLTEzNDMsMTMgKzExMTQsMTEgQEAKIAkJICogKC04LCAtOSwgLTEwKSBhcmUgcmVzZXJ2ZWQgdG8gZWFzZSB0aGUgaGFyZGNvZGluZy4KIAkJICovCiAJCXN0YXRpYyBjb25zdCBjaGFyICppZGVfd29yZHNbXSA9IHsKLQkJCSJub3Byb2JlIiwgInNlcmlhbGl6ZSIsICJtaW51czMiLCAibWludXM0IiwKKwkJCSJtaW51czEiLCAic2VyaWFsaXplIiwgIm1pbnVzMyIsICJtaW51czQiLAogCQkJInJlc2V0IiwgIm1pbnVzNiIsICJhdGE2NiIsICJtaW51czgiLCAibWludXM5IiwKIAkJCSJtaW51czEwIiwgImZvdXIiLCAicWQ2NXh4IiwgImh0NjU2MGIiLCAiY21kNjQwX3ZsYiIsCiAJCQkiZHRjMjI3OCIsICJ1bWM4NjcyIiwgImFsaTE0eHgiLCBOVUxMIH07CiAKLQkJaHdfcmVnc190IGh3cmVnczsKLQogCQlodyA9IHNbM10gLSAnMCc7CiAJCWh3aWYgPSAmaWRlX2h3aWZzW2h3XTsKIAkJaSA9IG1hdGNoX3Bhcm0oJnNbNF0sIGlkZV93b3JkcywgdmFscywgMyk7CkBAIC0xMzU4LDE5ICsxMTI3LDE0IEBACiAJCSAqIENyeXB0aWMgY2hlY2sgdG8gZW5zdXJlIGNoaXBzZXQgbm90IGFscmVhZHkgc2V0IGZvciBod2lmLgogCQkgKiBOb3RlOiB3ZSBjYW4ndCBkZXBlbmQgb24gaHdpZi0+Y2hpcHNldCBoZXJlLgogCQkgKi8KLQkJaWYgKChpID49IC0xOCAmJiBpIDw9IC0xMSkgfHwgKGkgPiAwICYmIGkgPD0gMykpIHsKKwkJaWYgKGkgPj0gLTE4ICYmIGkgPD0gLTExKSB7CiAJCQkvKiBjaGlwc2V0IGFscmVhZHkgc3BlY2lmaWVkICovCi0JCQlpZiAoaXNfY2hpcHNldF9zZXRbaHddKQorCQkJaWYgKGlzX2NoaXBzZXRfc2V0KQogCQkJCWdvdG8gYmFkX29wdGlvbjsKLQkJCWlmIChpID4gLTE4ICYmIGkgPD0gLTExKSB7Ci0JCQkJLyogdGhlc2UgZHJpdmVycyBhcmUgZm9yICJpZGUwPSIgb25seSAqLwotCQkJCWlmIChodyAhPSAwKQotCQkJCQlnb3RvIGJhZF9od2lmOwotCQkJCS8qIGNoaXBzZXQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIDJuZCBwb3J0ICovCi0JCQkJaWYgKGlzX2NoaXBzZXRfc2V0W2h3KzFdKQotCQkJCQlnb3RvIGJhZF9vcHRpb247Ci0JCQl9Ci0JCQlpc19jaGlwc2V0X3NldFtod10gPSAxOworCQkJLyogdGhlc2UgZHJpdmVycyBhcmUgZm9yICJpZGUwPSIgb25seSAqLworCQkJaWYgKGh3ICE9IDApCisJCQkJZ290byBiYWRfaHdpZjsKKwkJCWlzX2NoaXBzZXRfc2V0ID0gMTsKIAkJCXByaW50aygiXG4iKTsKIAkJfQogCkBAIC0xMzc4LDQ4ICsxMTQyLDM4IEBACiAjaWZkZWYgQ09ORklHX0JMS19ERVZfQUxJMTRYWAogCQkJY2FzZSAtMTc6IC8qICJhbGkxNHh4IiAqLwogCQkJCXByb2JlX2FsaTE0eHggPSAxOwotCQkJCWdvdG8gZG9uZTsKKwkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX1VNQzg2NzIKIAkJCWNhc2UgLTE2OiAvKiAidW1jODY3MiIgKi8KIAkJCQlwcm9iZV91bWM4NjcyID0gMTsKLQkJCQlnb3RvIGRvbmU7CisJCQkJZ290byBvYnNvbGV0ZV9vcHRpb247CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9EVEMyMjc4CiAJCQljYXNlIC0xNTogLyogImR0YzIyNzgiICovCiAJCQkJcHJvYmVfZHRjMjI3OCA9IDE7Ci0JCQkJZ290byBkb25lOworCQkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfQ01ENjQwCiAJCQljYXNlIC0xNDogLyogImNtZDY0MF92bGIiICovCiAJCQkJY21kNjQwX3ZsYiA9IDE7Ci0JCQkJZ290byBkb25lOworCQkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSFQ2NTYwQgogCQkJY2FzZSAtMTM6IC8qICJodDY1NjBiIiAqLwogCQkJCXByb2JlX2h0NjU2MGIgPSAxOwotCQkJCWdvdG8gZG9uZTsKKwkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX1FENjVYWAogCQkJY2FzZSAtMTI6IC8qICJxZDY1eHgiICovCiAJCQkJcHJvYmVfcWQ2NXh4ID0gMTsKLQkJCQlnb3RvIGRvbmU7CisJCQkJZ290byBvYnNvbGV0ZV9vcHRpb247CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkxLX0RFVl80RFJJVkVTCiAJCQljYXNlIC0xMTogLyogImZvdXIiIGRyaXZlcyBvbiBvbmUgc2V0IG9mIHBvcnRzICovCi0JCQl7Ci0JCQkJaWRlX2h3aWZfdCAqbWF0ZSA9ICZpZGVfaHdpZnNbaHdeMV07Ci0JCQkJbWF0ZS0+ZHJpdmVzWzBdLnNlbGVjdC5hbGwgXj0gMHgyMDsKLQkJCQltYXRlLT5kcml2ZXNbMV0uc2VsZWN0LmFsbCBePSAweDIwOwotCQkJCWh3aWYtPmNoaXBzZXQgPSBtYXRlLT5jaGlwc2V0ID0gaWRlXzRkcml2ZXM7Ci0JCQkJbWF0ZS0+aXJxID0gaHdpZi0+aXJxOwotCQkJCW1lbWNweShtYXRlLT5pb19wb3J0cywgaHdpZi0+aW9fcG9ydHMsIHNpemVvZihod2lmLT5pb19wb3J0cykpOwotCQkJCWh3aWYtPm1hdGUgPSBtYXRlOwotCQkJCW1hdGUtPm1hdGUgPSBod2lmOwotCQkJCWh3aWYtPnNlcmlhbGl6ZWQgPSBtYXRlLT5zZXJpYWxpemVkID0gMTsKKwkJCQlwcm9iZV80ZHJpdmVzID0gMTsKIAkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKLQkJCX0KLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl80RFJJVkVTICovCisjZW5kaWYKIAkJCWNhc2UgLTEwOiAvKiBtaW51czEwICovCiAJCQljYXNlIC05OiAvKiBtaW51czkgKi8KIAkJCWNhc2UgLTg6IC8qIG1pbnVzOCAqLwpAQCAtMTQ0NywyNCArMTIwMSwxMiBAQAogCQkJCWh3aWYtPnNlcmlhbGl6ZWQgPSBod2lmLT5tYXRlLT5zZXJpYWxpemVkID0gMTsKIAkJCQlnb3RvIG9ic29sZXRlX29wdGlvbjsKIAotCQkJY2FzZSAtMTogLyogIm5vcHJvYmUiICovCi0JCQkJaHdpZi0+bm9wcm9iZSA9IDE7Ci0JCQkJZ290byBkb25lOwotCi0JCQljYXNlIDE6CS8qIGJhc2UgKi8KLQkJCQl2YWxzWzFdID0gdmFsc1swXSArIDB4MjA2OyAvKiBkZWZhdWx0IGN0bCAqLwotCQkJY2FzZSAyOiAvKiBiYXNlLGN0bCAqLwotCQkJCXZhbHNbMl0gPSAwOwkvKiBkZWZhdWx0IGlycSA9IHByb2JlIGZvciBpdCAqLwotCQkJY2FzZSAzOiAvKiBiYXNlLGN0bCxpcnEgKi8KLQkJCQltZW1zZXQoJmh3cmVncywgMCwgc2l6ZW9mKGh3cmVncykpOwotCQkJCWlkZV9pbml0X2h3aWZfcG9ydHMoJmh3cmVncywgdmFsc1swXSwgdmFsc1sxXSwgJmh3aWYtPmlycSk7Ci0JCQkJbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBod3JlZ3MuaW9fcG9ydHMsIHNpemVvZihod2lmLT5pb19wb3J0cykpOwotCQkJCWh3aWYtPmlycSAgICAgID0gdmFsc1syXTsKLQkJCQlod2lmLT5ub3Byb2JlICA9IDA7Ci0JCQkJaHdpZi0+Y2hpcHNldCAgPSBpZGVfZm9yY2VkOwotCQkJCWdvdG8gb2Jzb2xldGVfb3B0aW9uOwotCi0JCQljYXNlIDA6IGdvdG8gYmFkX29wdGlvbjsKKwkJCWNhc2UgLTE6CisJCQljYXNlIDA6CisJCQljYXNlIDE6CisJCQljYXNlIDI6CisJCQljYXNlIDM6CisJCQkJZ290byBiYWRfb3B0aW9uOwogCQkJZGVmYXVsdDoKIAkJCQlwcmludGsoIiAtLSBTVVBQT1JUIE5PVCBDT05GSUdVUkVEIElOIFRISVMgS0VSTkVMXG4iKTsKIAkJCQlyZXR1cm4gMTsKQEAgLTE2MDksNiArMTM1MSwxMyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfYnVzX3R5cGUpOwogCitzdGF0aWMgdm9pZCBpZGVfcG9ydF9jbGFzc19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKnBvcnRkZXYpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRldl9nZXRfZHJ2ZGF0YShwb3J0ZGV2KTsKKworCXB1dF9kZXZpY2UoJmh3aWYtPmdlbmRldik7Cit9CisKIC8qCiAgKiBUaGlzIGlzIGdldHMgaW52b2tlZCBvbmNlIGR1cmluZyBpbml0aWFsaXphdGlvbiwgdG8gc2V0ICpldmVyeXRoaW5nKiB1cAogICovCkBAIC0xNjI5LDExICsxMzc4LDIzIEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJaWRlX3BvcnRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJpZGVfcG9ydCIpOworCWlmIChJU19FUlIoaWRlX3BvcnRfY2xhc3MpKSB7CisJCXJldCA9IFBUUl9FUlIoaWRlX3BvcnRfY2xhc3MpOworCQlnb3RvIG91dF9wb3J0X2NsYXNzOworCX0KKwlpZGVfcG9ydF9jbGFzcy0+ZGV2X3JlbGVhc2UgPSBpZGVfcG9ydF9jbGFzc19yZWxlYXNlOworCiAJaW5pdF9pZGVfZGF0YSgpOwogCiAJcHJvY19pZGVfY3JlYXRlKCk7CiAKIAlyZXR1cm4gMDsKKworb3V0X3BvcnRfY2xhc3M6CisJYnVzX3VucmVnaXN0ZXIoJmlkZV9idXNfdHlwZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgTU9EVUxFCkBAIC0xNjY2LDEwICsxNDI3LDEyIEBACiAJaW50IGluZGV4OwogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0hXSUZTOyArK2luZGV4KQotCQlpZGVfdW5yZWdpc3RlcihpbmRleCwgMCwgMCk7CisJCWlkZV91bnJlZ2lzdGVyKGluZGV4KTsKIAogCXByb2NfaWRlX2Rlc3Ryb3koKTsKIAorCWNsYXNzX2Rlc3Ryb3koaWRlX3BvcnRfY2xhc3MpOworCiAJYnVzX3VucmVnaXN0ZXIoJmlkZV9idXNfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9NYWtlZmlsZQppbmRleCA3MDQzZWM3Li42OTM5MzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfRFRDMjI3OCkJCSs9IGR0YzIyNzgubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSFQ2NTYwQikJCSs9IGh0NjU2MGIubwogb2JqLSQoQ09ORklHX0JMS19ERVZfUUQ2NVhYKQkJKz0gcWQ2NXh4Lm8KK29iai0kKENPTkZJR19CTEtfREVWXzREUklWRVMpCQkrPSBpZGUtNGRyaXZlcy5vCiAKIG9iai0kKENPTkZJR19CTEtfREVWX0dBWUxFKQkJKz0gZ2F5bGUubwogb2JqLSQoQ09ORklHX0JMS19ERVZfRkFMQ09OX0lERSkJKz0gZmFsY29uaWRlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jCmluZGV4IGQ0ZDFhNmIuLmJjOGIxZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYwpAQCAtMjAwLDYgKzIwMCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhbGkxNHh4X3Byb2JlKHZvaWQpCiB7CiAJc3RhdGljIHU4IGlkeFs0XSA9IHsgMCwgMSwgMHhmZiwgMHhmZiB9OworCWh3X3JlZ3NfdCBod1syXTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJhbGkxNHh4OiBiYXNlPTB4JTAzeCwgcmVnT249MHglMDJ4LlxuIiwKIAkJCSAgYmFzZVBvcnQsIHJlZ09uKTsKQEAgLTIxMCw2ICsyMTEsMTcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisKKwlpZGVfc3RkX2luaXRfcG9ydHMoJmh3WzBdLCAweDFmMCwgMHgzZjYpOworCWh3WzBdLmlycSA9IDE0OworCisJaWRlX3N0ZF9pbml0X3BvcnRzKCZod1sxXSwgMHgxNzAsIDB4Mzc2KTsKKwlod1sxXS5pcnEgPSAxNTsKKworCWlkZV9pbml0X3BvcnRfaHcoJmlkZV9od2lmc1swXSwgJmh3WzBdKTsKKwlpZGVfaW5pdF9wb3J0X2h3KCZpZGVfaHdpZnNbMV0sICZod1sxXSk7CisKIAlpZGVfaHdpZnNbMF0uc2V0X3Bpb19tb2RlID0gJmFsaTE0eHhfc2V0X3Bpb19tb2RlOwogCWlkZV9od2lmc1sxXS5zZXRfcGlvX21vZGUgPSAmYWxpMTR4eF9zZXRfcGlvX21vZGU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYwppbmRleCA1MGZmYTg3Li5mZGQzNzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvYnVkZGhhLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2J1ZGRoYS5jCkBAIC0yNDEsMyArMjQxLDUgQEAKIH0KIAogbW9kdWxlX2luaXQoYnVkZGhhX2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvZHRjMjI3OC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYwppbmRleCA3MzM5NmY3Li41ZjY5Y2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvZHRjMjI3OC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9kdGMyMjc4LmMKQEAgLTEwMyw2ICsxMDMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaWRlX2h3aWZfdCAqaHdpZiwgKm1hdGU7CiAJc3RhdGljIHU4IGlkeFs0XSA9IHsgMCwgMSwgMHhmZiwgMHhmZiB9OworCWh3X3JlZ3NfdCBod1syXTsKIAogCWh3aWYgPSAmaWRlX2h3aWZzWzBdOwogCW1hdGUgPSAmaWRlX2h3aWZzWzFdOwpAQCAtMTI4LDYgKzEyOSwxNyBAQAogI2VuZGlmCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisKKwlpZGVfc3RkX2luaXRfcG9ydHMoJmh3WzBdLCAweDFmMCwgMHgzZjYpOworCWh3WzBdLmlycSA9IDE0OworCisJaWRlX3N0ZF9pbml0X3BvcnRzKCZod1sxXSwgMHgxNzAsIDB4Mzc2KTsKKwlod1sxXS5pcnEgPSAxNTsKKworCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3WzBdKTsKKwlpZGVfaW5pdF9wb3J0X2h3KG1hdGUsICZod1sxXSk7CisKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmZHRjMjI3OF9zZXRfcGlvX21vZGU7CiAKIAlpZGVfZGV2aWNlX2FkZChpZHgsICZkdGMyMjc4X3BvcnRfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvZmFsY29uaWRlLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZmFsY29uaWRlLmMKaW5kZXggZjA0NDA0OC4uZTk1MGFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2ZhbGNvbmlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9mYWxjb25pZGUuYwpAQCAtNTQsNyArNTQsNyBAQAogCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspCiAJCWh3LT5pb19wb3J0c1tpXSA9IEFUQV9IRF9CQVNFICsgMSArIGkgKiA0OwogCi0JaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBBVEFfSERfQ09OVFJPTDsKKwlody0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9IEFUQV9IRF9CQVNFICsgQVRBX0hEX0NPTlRST0w7CiAKIAlody0+aXJxID0gSVJRX01GUF9JREU7CiAJaHctPmFja19pbnRyID0gTlVMTDsKQEAgLTg0LDEwICs4NCwxNCBAQAogCQlpZGVfaW5pdF9wb3J0X2RhdGEoaHdpZiwgaW5kZXgpOwogCQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7CiAKKwkJaWRlX2dldF9sb2NrKE5VTEwsIE5VTEwpOwogCQlpZGVfZGV2aWNlX2FkZChpZHgsIE5VTEwpOworCQlpZGVfcmVsZWFzZV9sb2NrKCk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIG1vZHVsZV9pbml0KGZhbGNvbmlkZV9pbml0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZ2F5bGUuYwppbmRleCBiN2Q4MTA5MC4uZTNiNDYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKQEAgLTE5NSwzICsxOTUsNSBAQAogfQogCiBtb2R1bGVfaW5pdChnYXlsZV9pbml0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKaW5kZXggMDJkMTJjNy4uODhmZTkwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jCkBAIC0yMSwxOCArMjEsMjEgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICJQcmVmZXRjaCIgbW9kZSBiaXQgT0ZGIGZvciBpZGUgZGlza3MgYW5kCiAgKiAgICAgICAgICAgICAgICAgICAgICBPTiBmb3IgYW55dGhpbmcgZWxzZS4KICAqCisgKiAgVmVyc2lvbiAwLjA4ICAgICAgICBOZWVkIHRvIGZvcmNlIHByZWZldGNoIGZvciBDRHMgYW5kIG90aGVyIG5vbi1kaXNrCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzLiAobm90IHN1cmUgd2hpY2ggZGV2aWNlcyBleGFjdGx5IG5lZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHByZWZldGNoKQogICoKICAqICBIVC02NTYwQiBFSURFLWNvbnRyb2xsZXIgc3VwcG9ydAogICogIFRvIGFjdGl2YXRlIGNvbnRyb2xsZXIgc3VwcG9ydCB1c2Uga2VybmVsIHBhcmFtZXRlciAiaWRlMD1odDY1NjBiIi4KICAqICBVc2UgaGRwYXJtIHV0aWxpdHkgdG8gZW5hYmxlIFBJTyBtb2RlIHN1cHBvcnQuCiAgKgogICogIEF1dGhvcjogICAgTWlra28gQWxhLUZvc3NpICAgICAgICAgICAgPG1hZkBpa2kuZmk+Ci0gKiAgICAgICAgICAgICBKYW4gRXZlcnQgdmFuIEdyb290aGVlc3QgICA8amFuZXZlcnRAaWFlLm5sPgorICogICAgICAgICAgICAgSmFuIEV2ZXJ0IHZhbiBHcm9vdGhlZXN0ICAgPGphbmV2ZXJ0QGNhaXdheS5ubD4KICAqCiAgKiAgVHJ5OiAgaHR0cDovL3d3dy5tYWYuaWtpLmZpL35tYWYvaHQ2NTYwYi8KICAqLwogCi0jZGVmaW5lIEhUNjU2MEJfVkVSU0lPTiAidjAuMDciCisjZGVmaW5lIEhUNjU2MEJfVkVSU0lPTiAidjAuMDgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNzksNyArODIsNyBAQAogICogb3V0IGhvdyB0aGV5IHNldHVwIHRob3NlIGN5Y2xlIHRpbWUgaW50ZXJmYWNpbmcgdmFsdWVzLCBhcyB0aGV5IGF0IEhvbHRlawogICogY2FsbCB0aGVtLiBJREVTRVRVUC5DT00gdGhhdCBpcyBzdXBwbGllZCB3aXRoIHRoZSBkcml2ZXJzIGZpZ3VyZXMgb3V0CiAgKiBvcHRpbWFsIHZhbHVlcyBhbmQgZmV0Y2hlcyB0aG9zZSB2YWx1ZXMgdG8gZHJpdmVycy4gSSBmb3VuZCBvdXQgdGhhdAotICogdGhleSB1c2UgSURFX1NFTEVDVF9SRUcgdG8gZmV0Y2ggdGltaW5ncyB0byB0aGUgaWRlIGJvYXJkIHJpZ2h0IGFmdGVyCisgKiB0aGV5IHVzZSBTZWxlY3QgcmVnaXN0ZXIgdG8gZmV0Y2ggdGltaW5ncyB0byB0aGUgaWRlIGJvYXJkIHJpZ2h0IGFmdGVyCiAgKiBpbnRlcmZhY2Ugc3dpdGNoaW5nLiBBZnRlciB0aGF0IGl0IHdhcyBxdWl0ZSBlYXN5IHRvIGFkZCBjb2RlIHRvCiAgKiBodDY1NjBiLmMuCiAgKgpAQCAtMTI0LDIxICsxMjcsMjcgQEAKICAqLwogc3RhdGljIHZvaWQgaHQ2NTYwYl9zZWxlY3Rwcm9jIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RhdGljIHU4IGN1cnJlbnRfc2VsZWN0ID0gMDsKIAlzdGF0aWMgdTggY3VycmVudF90aW1pbmcgPSAwOwogCXU4IHNlbGVjdCwgdGltaW5nOwogCQogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKKwogCXNlbGVjdCA9IEhUX0NPTkZJRyhkcml2ZSk7CiAJdGltaW5nID0gSFRfVElNSU5HKGRyaXZlKTsKLQkKKworCS8qCisJICogTmVlZCB0byBlbmZvcmNlIHByZWZldGNoIHNvbWV0aW1lcyBiZWNhdXNlIG90aGVyd2lzZQorCSAqIGl0J2xsIGhhbmcgKGhhcmQpLgorCSAqLworCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgfHwgIWRyaXZlLT5wcmVzZW50KQorCQlzZWxlY3QgfD0gSFRfUFJFRkVUQ0hfTU9ERTsKKwogCWlmIChzZWxlY3QgIT0gY3VycmVudF9zZWxlY3QgfHwgdGltaW5nICE9IGN1cnJlbnRfdGltaW5nKSB7CiAJCWN1cnJlbnRfc2VsZWN0ID0gc2VsZWN0OwogCQljdXJyZW50X3RpbWluZyA9IHRpbWluZzsKLQkJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayB8fCAhZHJpdmUtPnByZXNlbnQpCi0JCQlzZWxlY3QgfD0gSFRfUFJFRkVUQ0hfTU9ERTsKIAkJKHZvaWQpaW5iKEhUX0NPTkZJR19QT1JUKTsKIAkJKHZvaWQpaW5iKEhUX0NPTkZJR19QT1JUKTsKIAkJKHZvaWQpaW5iKEhUX0NPTkZJR19QT1JUKTsKQEAgLTE0Nyw4ICsxNTYsOCBAQAogCQkvKgogCQkgKiBTZXQgdGltaW5nIGZvciB0aGlzIGRyaXZlOgogCQkgKi8KLQkJb3V0Yih0aW1pbmcsIElERV9TRUxFQ1RfUkVHKTsKLQkJKHZvaWQpaW5iKElERV9TVEFUVVNfUkVHKTsKKwkJb3V0Yih0aW1pbmcsIGh3aWYtPmlvX3BvcnRzW0lERV9TRUxFQ1RfT0ZGU0VUXSk7CisJCSh2b2lkKWluYihod2lmLT5pb19wb3J0c1tJREVfU1RBVFVTX09GRlNFVF0pOwogI2lmZGVmIERFQlVHCiAJCXByaW50aygiaHQ2NTYwYjogJXM6IHNlbGVjdD0lI3ggdGltaW5nPSUjeFxuIiwKIAkJCWRyaXZlLT5uYW1lLCBzZWxlY3QsIHRpbWluZyk7CkBAIC0xODUsMTQgKzE5NCwxNSBAQAogCSAqIEh0NjU2MGIgYXV0b2RldGVjdGVkCiAJICovCiAJb3V0YihIVF9DT05GSUdfREVGQVVMVCwgSFRfQ09ORklHX1BPUlQpOwotCW91dGIoSFRfVElNSU5HX0RFRkFVTFQsIDB4MWY2KTsgIC8qIElERV9TRUxFQ1RfUkVHICovCi0JKHZvaWQpIGluYigweDFmNyk7ICAgICAgICAgICAgICAgLyogSURFX1NUQVRVU19SRUcgKi8KLQkKLQlwcmludGsoIlxuaHQ2NTYwYiAiIEhUNjU2MEJfVkVSU0lPTgorCW91dGIoSFRfVElNSU5HX0RFRkFVTFQsIDB4MWY2KTsJLyogU2VsZWN0IHJlZ2lzdGVyICovCisJKHZvaWQpaW5iKDB4MWY3KTsJCS8qIFN0YXR1cyByZWdpc3RlciAqLworCisJcHJpbnRrKCJodDY1NjBiICIgSFQ2NTYwQl9WRVJTSU9OCiAJICAgICAgICI6IGNoaXBzZXQgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkIgogI2lmZGVmIERFQlVHCiAJICAgICAgICIgd2l0aCBkZWJ1ZyBlbmFibGVkIgogI2VuZGlmCisJICAgICAgICJcbiIKIAkJKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTMyMywxMyArMzMzLDE0IEBACiAJCQkJICBJREVfSEZMQUdfTk9fRE1BIHwKIAkJCQkgIElERV9IRkxBR19OT19BVVRPVFVORSB8CiAJCQkJICBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCi0JLnBpb19tYXNrCQk9IEFUQV9QSU81LAorCS5waW9fbWFzawkJPSBBVEFfUElPNCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGh0NjU2MGJfaW5pdCh2b2lkKQogewogCWlkZV9od2lmX3QgKmh3aWYsICptYXRlOwogCXN0YXRpYyB1OCBpZHhbNF0gPSB7IDAsIDEsIDB4ZmYsIDB4ZmYgfTsKKwlod19yZWdzX3QgaHdbMl07CiAKIAlpZiAocHJvYmVfaHQ2NTYwYiA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM0OCw2ICszNTksMTcgQEAKIAkJZ290byByZWxlYXNlX3JlZ2lvbjsKIAl9CiAKKwltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKKworCWlkZV9zdGRfaW5pdF9wb3J0cygmaHdbMF0sIDB4MWYwLCAweDNmNik7CisJaHdbMF0uaXJxID0gMTQ7CisKKwlpZGVfc3RkX2luaXRfcG9ydHMoJmh3WzFdLCAweDE3MCwgMHgzNzYpOworCWh3WzFdLmlycSA9IDE1OworCisJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHdbMF0pOworCWlkZV9pbml0X3BvcnRfaHcobWF0ZSwgJmh3WzFdKTsKKwogCWh3aWYtPnNlbGVjdHByb2MgPSAmaHQ2NTYwYl9zZWxlY3Rwcm9jOwogCWh3aWYtPnNldF9waW9fbW9kZSA9ICZodDY1NjBiX3NldF9waW9fbW9kZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS00ZHJpdmVzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLTRkcml2ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2Q3ZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS00ZHJpdmVzLmMKQEAgLTAsMCArMSw1MCBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCitpbnQgcHJvYmVfNGRyaXZlcyA9IDA7CisKK21vZHVsZV9wYXJhbV9uYW1lZChwcm9iZSwgcHJvYmVfNGRyaXZlcywgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2JlLCAicHJvYmUgZm9yIGdlbmVyaWMgSURFIGNoaXBzZXQgd2l0aCA0IGRyaXZlcy9wb3J0Iik7CisKK3N0YXRpYyBpbnQgX19pbml0IGlkZV80ZHJpdmVzX2luaXQodm9pZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmLCAqbWF0ZTsKKwl1OCBpZHhbNF0gPSB7IDAsIDEsIDB4ZmYsIDB4ZmYgfTsKKwlod19yZWdzX3QgaHc7CisKKwlpZiAocHJvYmVfNGRyaXZlcyA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWh3aWYgPSAmaWRlX2h3aWZzWzBdOworCW1hdGUgPSAmaWRlX2h3aWZzWzFdOworCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisKKwlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCAweDFmMCwgMHgzZjYpOworCWh3LmlycSA9IDE0OworCWh3LmNoaXBzZXQgPSBpZGVfNGRyaXZlczsKKworCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKKwlpZGVfaW5pdF9wb3J0X2h3KG1hdGUsICZodyk7CisKKwltYXRlLT5kcml2ZXNbMF0uc2VsZWN0LmFsbCBePSAweDIwOworCW1hdGUtPmRyaXZlc1sxXS5zZWxlY3QuYWxsIF49IDB4MjA7CisKKwlod2lmLT5tYXRlID0gbWF0ZTsKKwltYXRlLT5tYXRlID0gaHdpZjsKKworCWh3aWYtPnNlcmlhbGl6ZWQgPSBtYXRlLT5zZXJpYWxpemVkID0gMTsKKworCWlkZV9kZXZpY2VfYWRkKGlkeCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoaWRlXzRkcml2ZXNfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIkJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oiKTsKK01PRFVMRV9ERVNDUklQVElPTigiZ2VuZXJpYyBJREUgY2hpcHNldCB3aXRoIDQgZHJpdmVzL3BvcnQgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCmluZGV4IDE1Y2NmNjkuLjlhMjNiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKQEAgLTE1NiwxNSArMTU2LDE1IEBACiAgICAgaHcuY2hpcHNldCA9IGlkZV9wY2k7CiAgICAgaHcuZGV2ID0gJmhhbmRsZS0+ZGV2OwogCi0gICAgaHdpZiA9IGlkZV9kZXByZWNhdGVkX2ZpbmRfcG9ydChody5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKKyAgICBod2lmID0gaWRlX2ZpbmRfcG9ydChody5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKICAgICBpZiAoaHdpZiA9PSBOVUxMKQogCXJldHVybiAtMTsKIAogICAgIGkgPSBod2lmLT5pbmRleDsKIAogICAgIGlmIChod2lmLT5wcmVzZW50KQotCWlkZV91bnJlZ2lzdGVyKGksIDAsIDApOwotICAgIGVsc2UgaWYgKCFod2lmLT5ob2xkKQorCWlkZV91bnJlZ2lzdGVyKGkpOworICAgIGVsc2UKIAlpZGVfaW5pdF9wb3J0X2RhdGEoaHdpZiwgaSk7CiAKICAgICBpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7CkBAIC0zNjAsNyArMzYwLDcgQEAKICAgICBpZiAoaW5mby0+bmRldikgewogCS8qIEZJWE1FOiBpZiB0aGlzIGZhaWxzIHdlIG5lZWQgdG8gcXVldWUgdGhlIGNsZWFudXAgc29tZWhvdwogCSAgIC0tIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHJlcXVpcmVkIFBDTUNJQSBtYWdpYyAqLwotCWlkZV91bnJlZ2lzdGVyKGluZm8tPmhkLCAwLCAwKTsKKwlpZGVfdW5yZWdpc3RlcihpbmZvLT5oZCk7CiAgICAgfQogICAgIGluZm8tPm5kZXYgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlX3BsYXRmb3JtLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlX3BsYXRmb3JtLmMKaW5kZXggNjg4ZmNhZS4uMjQ5NjUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGVfcGxhdGZvcm0uYwpAQCAtMTIyLDcgKzEyMiw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IHBkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAotCWlkZV91bnJlZ2lzdGVyKGh3aWYtPmluZGV4LCAwLCAwKTsKKwlpZGVfdW5yZWdpc3Rlcihod2lmLT5pbmRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYwppbmRleCBhNjFlNjA3Li5lYWY1ZGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvbWFjaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jCkBAIC03NCw3ICs3NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJaHctPmlvX3BvcnRzW2ldID0gYmFzZSArIGkgKiA0OwogCi0JaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBJREVfQ09OVFJPTDsKKwlody0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9IGJhc2UgKyBJREVfQ09OVFJPTDsKIAogCWh3LT5pcnEgPSBpcnE7CiAJaHctPmFja19pbnRyID0gYWNrX2ludHI7CkBAIC0xMzcsMyArMTM3LDUgQEAKIH0KIAogbW9kdWxlX2luaXQobWFjaWRlX2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMKaW5kZXggMTM4MWI5MS4uMmRhMjg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L3E0MGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9xNDBpZGUuYwpAQCAtMTUzLDMgKzE1Myw1IEBACiB9CiAKIG1vZHVsZV9pbml0KHE0MGlkZV9pbml0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jCmluZGV4IGJiYTI5ZGYuLjcwMTZiZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9xZDY1eHguYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMKQEAgLTMzNCw0MyArMzM0LDYgQEAKIAlod2lmLT5kcml2ZXNbMV0uZHJpdmVfZGF0YSA9IHQyOwogfQogCi0vKgotICogcWRfdW5zZXR1cDoKLSAqCi0gKiBjYWxsZWQgdG8gdW5zZXR1cCBhbiBhdGEgY2hhbm5lbCA6IGJhY2sgdG8gZGVmYXVsdCB2YWx1ZXMsIHVubGlua3MgdHVuaW5nCi0gKi8KLS8qCi1zdGF0aWMgdm9pZCBfX2V4aXQgcWRfdW5zZXR1cChpZGVfaHdpZl90ICpod2lmKQotewotCXU4IGNvbmZpZyA9IGh3aWYtPmNvbmZpZ19kYXRhOwotCWludCBiYXNlID0gaHdpZi0+c2VsZWN0X2RhdGE7Ci0Jdm9pZCAqc2V0X3Bpb19tb2RlID0gKHZvaWQgKilod2lmLT5zZXRfcGlvX21vZGU7Ci0KLQlpZiAoaHdpZi0+Y2hpcHNldCAhPSBpZGVfcWQ2NXh4KQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBiYWNrIHRvIGRlZmF1bHRzXG4iLCBod2lmLT5uYW1lKTsKLQotCWh3aWYtPnNlbGVjdHByb2MgPSBOVUxMOwotCWh3aWYtPnNldF9waW9fbW9kZSA9IE5VTEw7Ci0KLQlpZiAoc2V0X3Bpb19tb2RlID09ICh2b2lkICopcWQ2NTAwX3NldF9waW9fbW9kZSkgewotCQkvLyB3aWxsIGRvIGl0IGZvciBib3RoCi0JCW91dGIoUUQ2NTAwX0RFRl9EQVRBLCBRRF9USU1SRUcoJmh3aWYtPmRyaXZlc1swXSkpOwotCX0gZWxzZSBpZiAoc2V0X3Bpb19tb2RlID09ICh2b2lkICopcWQ2NTgwX3NldF9waW9fbW9kZSkgewotCQlpZiAoUURfQ09OVFJPTChod2lmKSAmIFFEX0NPTlRSX1NFQ19ESVNBQkxFRCkgewotCQkJb3V0YihRRDY1ODBfREVGX0RBVEEsIFFEX1RJTVJFRygmaHdpZi0+ZHJpdmVzWzBdKSk7Ci0JCQlvdXRiKFFENjU4MF9ERUZfREFUQTIsIFFEX1RJTVJFRygmaHdpZi0+ZHJpdmVzWzFdKSk7Ci0JCX0gZWxzZSB7Ci0JCQlvdXRiKGh3aWYtPmNoYW5uZWwgPyBRRDY1ODBfREVGX0RBVEEyIDogUUQ2NTgwX0RFRl9EQVRBLCBRRF9USU1SRUcoJmh3aWYtPmRyaXZlc1swXSkpOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBxZDY1eHggdHVuaW5nIGZvbmN0aW9uICFcbiIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJrZWVwaW5nIHNldHRpbmdzICFcbiIpOwotCX0KLX0KLSovCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBxZDY1eHhfcG9ydF9pbmZvIF9faW5pdGRhdGEgPSB7CiAJLmNoaXBzZXQJCT0gaWRlX3FkNjV4eCwKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfApAQCAtMzg5LDkgKzM1Miw5IEBACiBzdGF0aWMgaW50IF9faW5pdCBxZF9wcm9iZShpbnQgYmFzZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmOworCXU4IGNvbmZpZywgdW5pdDsKIAl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQl1OCBjb25maWc7Ci0JdTggdW5pdDsKKwlod19yZWdzX3QgaHdbMl07CiAKIAljb25maWcgPSBpbmIoUURfQ09ORklHX1BPUlQpOwogCkBAIC00MDAsNiArMzYzLDE0IEBACiAKIAl1bml0ID0gISAoY29uZmlnICYgUURfQ09ORklHX0lERV9CQVNFUE9SVCk7CiAKKwltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKKworCWlkZV9zdGRfaW5pdF9wb3J0cygmaHdbMF0sIDB4MWYwLCAweDNmNik7CisJaHdbMF0uaXJxID0gMTQ7CisKKwlpZGVfc3RkX2luaXRfcG9ydHMoJmh3WzFdLCAweDE3MCwgMHgzNzYpOworCWh3WzFdLmlycSA9IDE1OworCiAJaWYgKChjb25maWcgJiAweGYwKSA9PSBRRF9DT05GSUdfUUQ2NTAwKSB7CiAKIAkJaWYgKHFkX3Rlc3RyZWcoYmFzZSkpIHJldHVybiAxOwkJLyogYmFkIHJlZ2lzdGVyICovCkBAIC00MTYsNiArMzg3LDggQEAKIAkJCXJldHVybiAxOwogCQl9CiAKKwkJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHdbdW5pdF0pOworCiAJCXFkX3NldHVwKGh3aWYsIGJhc2UsIGNvbmZpZyk7CiAKIAkJaHdpZi0+cG9ydF9pbml0X2RldnMgPSBxZDY1MDBfcG9ydF9pbml0X2RldnM7CkBAIC00NDQsNiArNDE3LDggQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgInFkNjU4MDogY29uZmlnPSUjeCwgY29udHJvbD0lI3gsIElEMz0ldVxuIiwKIAkJCWNvbmZpZywgY29udHJvbCwgUURfSUQzKTsKIAorCQlvdXRiKFFEX0RFRl9DT05UUiwgUURfQ09OVFJPTF9QT1JUKTsKKwogCQlpZiAoY29udHJvbCAmIFFEX0NPTlRSX1NFQ19ESVNBQkxFRCkgewogCQkJLyogc2Vjb25kYXJ5IGRpc2FibGVkICovCiAKQEAgLTQ1MSw2ICs0MjYsOCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHFkNjU4MDogc2luZ2xlIElERSBib2FyZFxuIiwKIAkJCQkJIGh3aWYtPm5hbWUpOwogCisJCQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZod1t1bml0XSk7CisKIAkJCXFkX3NldHVwKGh3aWYsIGJhc2UsIGNvbmZpZyB8IChjb250cm9sIDw8IDgpKTsKIAogCQkJaHdpZi0+cG9ydF9pbml0X2RldnMgPSBxZDY1ODBfcG9ydF9pbml0X2RldnM7CkBAIC00NjAsOCArNDM3LDYgQEAKIAogCQkJaWRlX2RldmljZV9hZGQoaWR4LCAmcWQ2NXh4X3BvcnRfaW5mbyk7CiAKLQkJCW91dGIoUURfREVGX0NPTlRSLCBRRF9DT05UUk9MX1BPUlQpOwotCiAJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKIAkJCWlkZV9od2lmX3QgKm1hdGU7CkBAIC00NzIsNiArNDQ3LDkgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzJiVzOiBxZDY1ODA6IGR1YWwgSURFIGJvYXJkXG4iLAogCQkJCQlod2lmLT5uYW1lLCBtYXRlLT5uYW1lKTsKIAorCQkJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHdbMF0pOworCQkJaWRlX2luaXRfcG9ydF9odyhtYXRlLCAmaHdbMV0pOworCiAJCQlxZF9zZXR1cChod2lmLCBiYXNlLCBjb25maWcgfCAoY29udHJvbCA8PCA4KSk7CiAKIAkJCWh3aWYtPnBvcnRfaW5pdF9kZXZzID0gcWQ2NTgwX3BvcnRfaW5pdF9kZXZzOwpAQCAtNDg3LDggKzQ2NSw2IEBACiAKIAkJCWlkZV9kZXZpY2VfYWRkKGlkeCwgJnFkNjV4eF9wb3J0X2luZm8pOwogCi0JCQlvdXRiKFFEX0RFRl9DT05UUiwgUURfQ09OVFJPTF9QT1JUKTsKLQogCQkJcmV0dXJuIDA7IC8qIG5vIG90aGVyIHFkNjV4eCBwb3NzaWJsZSAqLwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L3VtYzg2NzIuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMKaW5kZXggNTY5NmJhMC4uYmMxOTQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L3VtYzg2NzIuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvdW1jODY3Mi5jCkBAIC0xMzAsNiArMTMwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0YXRpYyB1OCBpZHhbNF0gPSB7IDAsIDEsIDB4ZmYsIDB4ZmYgfTsKKwlod19yZWdzX3QgaHdbMl07CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKDB4MTA4LCAyLCAidW1jODY3MiIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidW1jODY3MjogcG9ydHMgMHgxMDgtMHgxMDkgYWxyZWFkeSBpbiB1c2UuXG4iKTsKQEAgLTE0OCw2ICsxNDksMTcgQEAKIAl1bWNfc2V0X3NwZWVkcyAoY3VycmVudF9zcGVlZHMpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAorCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworCisJaWRlX3N0ZF9pbml0X3BvcnRzKCZod1swXSwgMHgxZjAsIDB4M2Y2KTsKKwlod1swXS5pcnEgPSAxNDsKKworCWlkZV9zdGRfaW5pdF9wb3J0cygmaHdbMV0sIDB4MTcwLCAweDM3Nik7CisJaHdbMV0uaXJxID0gMTU7CisKKwlpZGVfaW5pdF9wb3J0X2h3KCZpZGVfaHdpZnNbMF0sICZod1swXSk7CisJaWRlX2luaXRfcG9ydF9odygmaWRlX2h3aWZzWzFdLCAmaHdbMV0pOworCiAJaWRlX2h3aWZzWzBdLnNldF9waW9fbW9kZSA9ICZ1bWNfc2V0X3Bpb19tb2RlOwogCWlkZV9od2lmc1sxXS5zZXRfcGlvX21vZGUgPSAmdW1jX3NldF9waW9fbW9kZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYwppbmRleCAwZjRiZjVkLi45YjYyODI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYwpAQCAtMzIsMTkgKzMyLDEyIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLQotI2luY2x1ZGUgImlkZS10aW1pbmcuaCIKLQotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2lkZS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJhdTEyMDAtaWRlIgpAQCAtNTYsNiArNDksOCBAQAogc3RhdGljIF9hdWlkZV9od2lmIGF1aWRlX2h3aWY7CiBzdGF0aWMgaW50IGRiZG1hX2luaXRfZG9uZTsKIAorc3RhdGljIGludCBhdWlkZV9kZG1hX2luaXQoX2F1aWRlX2h3aWYgKmF1aWRlKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUEpCiAKIHZvaWQgYXVpZGVfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKQEAgLTU5MSwxMyArNTg2LDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uIChyZXMtPnN0YXJ0LCByZXMtPmVuZC1yZXMtPnN0YXJ0LCBwZGV2LT5uYW1lKSkgeworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJCQkJcGRldi0+bmFtZSkpIHsKIAkJcHJfZGVidWcoIiVzOiByZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iLCBEUlZfTkFNRSk7CiAJCXJldCA9ICAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KIAotCWFod2lmLT5yZWdiYXNlID0gKHUzMilpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kLXJlcy0+c3RhcnQpOworCWFod2lmLT5yZWdiYXNlID0gKHUzMilpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmIChhaHdpZi0+cmVnYmFzZSA9PSAwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNjE3LDkgKzYxMyw2IEBACiAKIAlod2lmLT5kZXYgPSBkZXY7CiAKLQkvKiBob2xkIHNob3VsZCBiZSBvbiBpbiBhbGwgY2FzZXMgKi8KLQlod2lmLT5ob2xkICAgICAgICAgICAgICAgICAgICAgID0gMTsKLQogCWh3aWYtPm1taW8gID0gMTsKIAogCS8qIElmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBERE1BIGFzc2lzdGVkIGNvcGllcywKQEAgLTY3NywxMiArNjcwLDEyIEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCV9hdWlkZV9od2lmICphaHdpZiA9ICZhdWlkZV9od2lmOwogCi0JaWRlX3VucmVnaXN0ZXIoaHdpZi0+aW5kZXgsIDAsIDApOworCWlkZV91bnJlZ2lzdGVyKGh3aWYtPmluZGV4KTsKIAogCWlvdW5tYXAoKHZvaWQgKilhaHdpZi0+cmVnYmFzZSk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCmluZGV4IGJkMjRkYWQzLi5hMWNmZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCkBAIC00MDksMTkgKzQwOSw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9kZXZpY2VfcHRycyAodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwljbWRfaHdpZjAgPSAmaWRlX2h3aWZzWzBdOworCWNtZF9od2lmMSA9ICZpZGVfaHdpZnNbMV07CiAKLQljbWRfaHdpZjAgPSAmaWRlX2h3aWZzWzBdOyAvKiBkZWZhdWx0LCBpZiBub3QgZm91bmQgYmVsb3cgKi8KLQljbWRfaHdpZjEgPSAmaWRlX2h3aWZzWzFdOyAvKiBkZWZhdWx0LCBpZiBub3QgZm91bmQgYmVsb3cgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKLQkJaWRlX2h3aWZfdCAqaHdpZiA9ICZpZGVfaHdpZnNbaV07Ci0JCWlmIChod2lmLT5jaGlwc2V0ID09IGlkZV91bmtub3duIHx8IGh3aWYtPmNoaXBzZXQgPT0gaWRlX2ZvcmNlZCkgewotCQkJaWYgKGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gPT0gMHgxZjApCi0JCQkJY21kX2h3aWYwID0gaHdpZjsKLQkJCWVsc2UgaWYgKGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gPT0gMHgxNzApCi0JCQkJY21kX2h3aWYxID0gaHdpZjsKLQkJfQotCX0KIAljbWRfZHJpdmVzWzBdID0gJmNtZF9od2lmMC0+ZHJpdmVzWzBdOwogCWNtZF9kcml2ZXNbMV0gPSAmY21kX2h3aWYwLT5kcml2ZXNbMV07CiAJY21kX2RyaXZlc1syXSA9ICZjbWRfaHdpZjEtPmRyaXZlc1swXTsKQEAgLTcyNCw2ICs3MTQsNyBAQAogCXVuc2lnbmVkIGludCBpbmRleDsKIAl1OCBiLCBjZnI7CiAJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaHdfcmVnc190IGh3WzJdOwogCiAJaWYgKGNtZDY0MF92bGIgJiYgcHJvYmVfZm9yX2NtZDY0MF92bGIoKSkgewogCQlidXNfdHlwZSA9ICJWTEIiOwpAQCAtNzYyLDEyICs3NTMsMjMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisKKwlpZGVfc3RkX2luaXRfcG9ydHMoJmh3WzBdLCAweDFmMCwgMHgzZjYpOworCWh3WzBdLmlycSA9IDE0OworCisJaWRlX3N0ZF9pbml0X3BvcnRzKCZod1sxXSwgMHgxNzAsIDB4Mzc2KTsKKwlod1sxXS5pcnEgPSAxNTsKKworCXByaW50ayhLRVJOX0lORk8gImNtZDY0MDogYnVnZ3kgY21kNjQwJWMgaW50ZXJmYWNlIG9uICVzLCBjb25maWc9MHglMDJ4IgorCQkJICJcbiIsICdhJyArIGNtZDY0MF9jaGlwX3ZlcnNpb24gLSAxLCBidXNfdHlwZSwgY2ZyKTsKKwogCS8qCiAJICogSW5pdGlhbGl6ZSBkYXRhIGZvciBwcmltYXJ5IHBvcnQKIAkgKi8KIAlzZXR1cF9kZXZpY2VfcHRycyAoKTsKLQlwcmludGsoIiVzOiBidWdneSBjbWQ2NDAlYyBpbnRlcmZhY2Ugb24gJXMsIGNvbmZpZz0weCUwMnhcbiIsCi0JICAgICAgIGNtZF9od2lmMC0+bmFtZSwgJ2EnICsgY21kNjQwX2NoaXBfdmVyc2lvbiAtIDEsIGJ1c190eXBlLCBjZnIpOworCisJaWRlX2luaXRfcG9ydF9odyhjbWRfaHdpZjAsICZod1swXSk7CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VECiAJY21kX2h3aWYwLT5zZXRfcGlvX21vZGUgPSAmY21kNjQwX3NldF9waW9fbW9kZTsKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9DTUQ2NDBfRU5IQU5DRUQgKi8KQEAgLTc4Nyw3ICs3ODksNyBAQAogCS8qCiAJICogVHJ5IHRvIGVuYWJsZSB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZSwgaWYgbm90IGFscmVhZHkgZW5hYmxlZAogCSAqLwotCWlmIChjbWRfaHdpZjEtPm5vcHJvYmUpIHsKKwlpZiAoY21kX2h3aWYxLT5kcml2ZXNbMF0ubm9wcm9iZSAmJiBjbWRfaHdpZjEtPmRyaXZlc1sxXS5ub3Byb2JlKSB7CiAJCXBvcnQyID0gIm5vdCBwcm9iZWQiOwogCX0gZWxzZSB7CiAJCWIgPSBnZXRfY21kNjQwX3JlZyhDTlRSTCk7CkBAIC04MTksNiArODIxLDcgQEAKIAkgKiBJbml0aWFsaXplIGRhdGEgZm9yIHNlY29uZGFyeSBjbWQ2NDAgcG9ydCwgaWYgZW5hYmxlZAogCSAqLwogCWlmIChzZWNvbmRfcG9ydF9jbWQ2NDApIHsKKwkJaWRlX2luaXRfcG9ydF9odyhjbWRfaHdpZjEsICZod1sxXSk7CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VECiAJCWNtZF9od2lmMS0+c2V0X3Bpb19tb2RlID0gJmNtZDY0MF9zZXRfcGlvX21vZGU7CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VEICovCkBAIC04ODAsMyArODgzLDUgQEAKIE1PRFVMRV9QQVJNX0RFU0MocHJvYmVfdmxiLCAicHJvYmUgZm9yIFZMQiB2ZXJzaW9uIG9mIENNRDY0MCBjaGlwc2V0Iik7CiAKIG1vZHVsZV9pbml0KGNtZDY0MHhfaW5pdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYwppbmRleCAzZjljZDY0Li45NjE2OThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCkBAIC03OCwxNSArNzgsMTUgQEAKIAlody5pcnEgPSBkZXYtPmlycTsKIAlody5jaGlwc2V0ID0gaWRlX3BjaTsJCS8qIHRoaXMgZW5hYmxlcyBJUlEgc2hhcmluZyAqLwogCi0JaHdpZiA9IGlkZV9kZXByZWNhdGVkX2ZpbmRfcG9ydChody5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKKwlod2lmID0gaWRlX2ZpbmRfcG9ydChody5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKIAlpZiAoaHdpZiA9PSBOVUxMKQogCQlnb3RvIG91dF9kaXNhYmxlOwogCiAJaSA9IGh3aWYtPmluZGV4OwogCiAJaWYgKGh3aWYtPnByZXNlbnQpCi0JCWlkZV91bnJlZ2lzdGVyKGksIDAsIDApOwotCWVsc2UgaWYgKCFod2lmLT5ob2xkKQorCQlpZGVfdW5yZWdpc3RlcihpKTsKKwllbHNlCiAJCWlkZV9pbml0X3BvcnRfZGF0YShod2lmLCBpKTsKIAogCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgJmh3KTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChod2lmKQotCQlpZGVfdW5yZWdpc3Rlcihod2lmLT5pbmRleCwgMCwgMCk7CisJCWlkZV91bnJlZ2lzdGVyKGh3aWYtPmluZGV4KTsKIAogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCmluZGV4IGQwZjdiYjguLjgyZDBlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKQEAgLTc2MCw3ICs3NjAsNyBAQAogCQl9CiAJfSBlbHNlCiAJCW91dGIobWFzayA/IChkcml2ZS0+Y3RsIHwgMikgOiAoZHJpdmUtPmN0bCAmIH4yKSwKLQkJICAgICBJREVfQ09OVFJPTF9SRUcpOworCQkgICAgIGh3aWYtPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0pOwogfQogCiAvKgpAQCAtOTI5LDY0ICs5MjksNiBAQAogCWhwdDN4eG5fc2V0X2Nsb2NrKEhXSUYoZHJpdmUpLCBycV9kYXRhX2RpcihycSkgPyAweDIzIDogMHgyMSk7CiB9CiAKLS8qIAotICogU2V0L2dldCBwb3dlciBzdGF0ZSBmb3IgYSBkcml2ZS4KLSAqIE5PVEU6IGFmZmVjdHMgYm90aCBkcml2ZXMgb24gZWFjaCBjaGFubmVsLgotICoKLSAqIFdoZW4gd2UgdHVybiB0aGUgcG93ZXIgYmFjayBvbiwgd2UgbmVlZCB0byByZS1pbml0aWFsaXplIHRoaW5ncy4KLSAqLwotI2RlZmluZSBUUklTVEFURV9CSVQgIDB4ODAwMAotCi1zdGF0aWMgaW50IGhwdDN4eF9idXNwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHN0YXRlKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXU4ICBtY3JfYWRkcgkJPSBod2lmLT5zZWxlY3RfZGF0YSArIDI7Ci0JdTggIHJlc2V0bWFzawkJPSBod2lmLT5jaGFubmVsID8gMHg4MCA6IDB4NDA7Ci0JdTggIGJzcjIJCT0gMDsKLQl1MTYgbWNyCQkJPSAwOwotCi0JaHdpZi0+YnVzX3N0YXRlID0gc3RhdGU7Ci0KLQkvKiBHcmFiIHRoZSBzdGF0dXMuICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtY3JfYWRkciwgJm1jcik7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDU5LCAmYnNyMik7Ci0KLQkvKgotCSAqIFNldCB0aGUgc3RhdGUuIFdlIGRvbid0IHNldCBpdCBpZiB3ZSBkb24ndCBuZWVkIHRvIGRvIHNvLgotCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBkcml2ZSBrbm93cyB0aGF0IGl0IGhhcyBmYWlsZWQgaWYgaXQncyBvZmYuCi0JICovCi0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgQlVTU1RBVEVfT046Ci0JCWlmICghKGJzcjIgJiByZXNldG1hc2spKQotCQkJcmV0dXJuIDA7Ci0JCWh3aWYtPmRyaXZlc1swXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1sxXS5mYWlsdXJlcyA9IDA7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1OSwgYnNyMiAmIH5yZXNldG1hc2spOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBtY3JfYWRkciwgbWNyICYgflRSSVNUQVRFX0JJVCk7Ci0JCXJldHVybiAwOwotCWNhc2UgQlVTU1RBVEVfT0ZGOgotCQlpZiAoKGJzcjIgJiByZXNldG1hc2spICYmICEobWNyICYgVFJJU1RBVEVfQklUKSkKLQkJCXJldHVybiAwOwotCQltY3IgJj0gflRSSVNUQVRFX0JJVDsKLQkJYnJlYWs7Ci0JY2FzZSBCVVNTVEFURV9UUklTVEFURToKLQkJaWYgKChic3IyICYgcmVzZXRtYXNrKSAmJiAgKG1jciAmIFRSSVNUQVRFX0JJVCkpCi0JCQlyZXR1cm4gMDsKLQkJbWNyIHw9IFRSSVNUQVRFX0JJVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaHdpZi0+ZHJpdmVzWzBdLmZhaWx1cmVzID0gaHdpZi0+ZHJpdmVzWzBdLm1heF9mYWlsdXJlcyArIDE7Ci0JaHdpZi0+ZHJpdmVzWzFdLmZhaWx1cmVzID0gaHdpZi0+ZHJpdmVzWzFdLm1heF9mYWlsdXJlcyArIDE7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBtY3JfYWRkciwgbWNyKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU5LCBic3IyIHwgcmVzZXRtYXNrKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKglocHQzN3hfY2FsaWJyYXRlX2RwbGwJLQljYWxpYnJhdGUgdGhlIERQTEwKICAqCUBkZXY6IFBDSSBkZXZpY2UKQEAgLTEzMzQsNyArMTI3Niw2IEBACiAKIAlod2lmLT5xdWlya3Byb2MJCT0gJmhwdDN4eF9xdWlya3Byb2M7CiAJaHdpZi0+bWFza3Byb2MJCT0gJmhwdDN4eF9tYXNrcHJvYzsKLQlod2lmLT5idXNwcm9jCQk9ICZocHQzeHhfYnVzcHJvYzsKIAogCWh3aWYtPnVkbWFfZmlsdGVyCT0gJmhwdDN4eF91ZG1hX2ZpbHRlcjsKIAlod2lmLT5tZG1hX2ZpbHRlcgk9ICZocHQzeHhfbWRtYV9maWx0ZXI7CkBAIC0xNTcwLDEwICsxNTExLDEyIEBACiAJCWlmIChyZXYgPCAzKQogCQkJaW5mbyA9ICZocHQzNng7CiAJCWVsc2UgewotCQkJc3RhdGljIGNvbnN0IHN0cnVjdCBocHRfaW5mbyAqaHB0Mzd4X2luZm9bXSA9Ci0JCQkJeyAmaHB0MzcwLCAmaHB0MzcwYSwgJmhwdDM3MiwgJmhwdDM3Mm4gfTsKLQotCQkJaW5mbyA9IGhwdDM3eF9pbmZvW21pbl90KHU4LCByZXYsIDYpIC0gM107CisJCQlzd2l0Y2ggKG1pbl90KHU4LCByZXYsIDYpKSB7CisJCQljYXNlIDM6IGluZm8gPSAmaHB0MzcwOyAgYnJlYWs7CisJCQljYXNlIDQ6IGluZm8gPSAmaHB0MzcwYTsgYnJlYWs7CisJCQljYXNlIDU6IGluZm8gPSAmaHB0MzcyOyAgYnJlYWs7CisJCQljYXNlIDY6IGluZm8gPSAmaHB0MzcybjsgYnJlYWs7CisJCQl9CiAJCQlpZHgrKzsKIAkJfQogCQlicmVhazsKQEAgLTE2MjYsNyArMTU2OSw3IEBACiAJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgJmQpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0MzY2X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHQzNjZfcGNpX3RibFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgUENJX1ZERVZJQ0UoVFRJLCBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjYpLCAgMCB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzIpLCAgMSB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzMDIpLCAgMiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCmluZGV4IDE1OTdmMGMuLmQ4YTE2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogbW9kdWxlX2luaXQoaXQ4MjF4X2lkZV9pbml0KTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKG5vcmFpZCwgaXQ4MjEyX25vcmFpZCwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoaXQ4MjEyX25vcmFpZCwgIkZvcmNlIGNhcmQgaW50byBieXBhc3MgbW9kZSIpOworTU9EVUxFX1BBUk1fREVTQyhub3JhaWQsICJGb3JjZSBjYXJkIGludG8gYnlwYXNzIG1vZGUiKTsKIAogTU9EVUxFX0FVVEhPUigiQWxhbiBDb3giKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIHRoZSBJVEUgODIxeCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYyBiL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKaW5kZXggYmYwZDNiMi4uNzU1MTMzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYwpAQCAtMTgxLDYgKzE4MSwxMCBAQAogCXJldHVybiAxOwogfQogCisjaWZuZGVmIGlkZV9kZWZhdWx0X2lycQorI2RlZmluZSBpZGVfZGVmYXVsdF9pcnEoaXJxKSAwCisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9uczg3NDE1IChpZGVfaHdpZl90ICpod2lmKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYyBiL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jCmluZGV4IDIzOGUzZTEuLmVmMDdjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jCkBAIC0zMzQsNyArMzM0LDggQEAKIAogCS8qIGVycmF0YSBBMzA4IHdvcmthcm91bmQ6IFN0ZXA1IChjaGVjayBkYXRhIGxvc3MpICovCiAJLyogV2UgZG9uJ3QgY2hlY2sgbm9uIGlkZV9kaXNrIGJlY2F1c2UgaXQgaXMgbGltaXRlZCB0byBVRE1BNCAqLwotCWlmICghKGluX2JlMzIoKHZvaWQgX19pb21lbSAqKUlERV9BTFRTVEFUVVNfUkVHKSAmIEVSUl9TVEFUKSAmJgorCWlmICghKGluX2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzW0lERV9BTFRTVEFUVVNfT0ZGU0VUXSkKKwkgICAgICAmIEVSUl9TVEFUKSAmJgogCSAgICBkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgZHJpdmUtPmN1cnJlbnRfc3BlZWQgPiBYRkVSX1VETUFfNCkgewogCQlyZWcgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCk7CiAJCWlmICghKHJlZyAmIElOVFNUU19BQ1RFSU5UKSkgewpAQCAtNDM3LDcgKzQzOCw4IEBACiAJdTMyIGludF9zdGF0ID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2Jhc2UgKyAweDAxNCk7CiAKIAkvKiBTQ0MgZXJyYXRhIEEyNTIsQTMwOCB3b3JrYXJvdW5kOiBTdGVwNCAqLwotCWlmICgoaW5fYmUzMigodm9pZCBfX2lvbWVtICopSURFX0FMVFNUQVRVU19SRUcpICYgRVJSX1NUQVQpICYmCisJaWYgKChpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0c1tJREVfQUxUU1RBVFVTX09GRlNFVF0pCisJICAgICAmIEVSUl9TVEFUKSAmJgogCSAgICAoaW50X3N0YXQgJiBJTlRTVFNfSU5UUlEpKQogCQlyZXR1cm4gMTsKIApAQCAtNTIzLDYgKzUyNSw0MyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCitzdGF0aWMgaW50IHNjY19pZGVfc2V0dXBfcGNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKK3sKKwlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWlkZV9od2lmX3QgKmh3aWYgPSBOVUxMOworCWh3X3JlZ3NfdCBodzsKKwl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCQlod2lmID0gJmlkZV9od2lmc1tpXTsKKwkJaWYgKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3Vua25vd24pCisJCQlicmVhazsgLyogcGljayBhbiB1bnVzZWQgZW50cnkgKi8KKwl9CisJaWYgKGkgPT0gTUFYX0hXSUZTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRvbyBtYW55IElERSBpbnRlcmZhY2VzLCAiCisJCQkJIm5vIHJvb20gaW4gdGFibGVcbiIsIFNDQ19QQVRBX05BTUUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKKwlmb3IgKGkgPSBJREVfREFUQV9PRkZTRVQ7IGkgPD0gSURFX0NPTlRST0xfT0ZGU0VUOyBpKyspCisJCWh3LmlvX3BvcnRzW2ldID0gcG9ydHMtPmRtYSArIDB4MjAgKyBpICogNDsKKwlody5pcnEgPSBkZXYtPmlycTsKKwlody5kZXYgPSAmZGV2LT5kZXY7CisJaHcuY2hpcHNldCA9IGlkZV9wY2k7CisJaWRlX2luaXRfcG9ydF9odyhod2lmLCAmaHcpOworCWh3aWYtPmRldiA9ICZkZXYtPmRldjsKKwlod2lmLT5jZHMgPSBkOworCisJaWR4WzBdID0gaHdpZi0+aW5kZXg7CisKKwlpZGVfZGV2aWNlX2FkZChpZHgsIGQpOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICoJaW5pdF9zZXR1cF9zY2MJLQlzZXQgdXAgYW4gU0NDIFBBVEEgQ29udHJvbGxlcgogICoJQGRldjogUENJIGRldmljZQpAQCAtNTQ1LDEwICs1ODQsMTMgQEAKIAlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0czsKIAlpbnQgcmM7CiAKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjKQorCQlnb3RvIGVuZDsKKwogCXJjID0gc2V0dXBfbW1pb19zY2MoZGV2LCBkLT5uYW1lKTsKLQlpZiAocmMgPCAwKSB7Ci0JCXJldHVybiByYzsKLQl9CisJaWYgKHJjIDwgMCkKKwkJZ290byBlbmQ7CiAKIAlwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCWN0bF9iYXNlID0gcG9ydHMtPmN0bDsKQEAgLTU4Myw3ICs2MjUsMTAgQEAKIAlvdXRfYmUzMigodm9pZCopbW9kZV9wb3J0LCBNT0RFX0pDVVNGRU4pOwogCW91dF9iZTMyKCh2b2lkKilpbnRtYXNrX3BvcnQsIElOVE1BU0tfTVNLKTsKIAotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOworCXJjID0gc2NjX2lkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CisKKyBlbmQ6CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTYxMCwxNyArNjU1LDYgQEAKIAlod2lmLT5PVVRTVyA9IHNjY19pZGVfb3V0c3c7CiAJaHdpZi0+T1VUU0wgPSBzY2NfaWRlX291dHNsOwogCi0JaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHgyMDsKLQlod2lmLT5pb19wb3J0c1tJREVfRVJST1JfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHgyNDsKLQlod2lmLT5pb19wb3J0c1tJREVfTlNFQ1RPUl9PRkZTRVRdID0gZG1hX2Jhc2UgKyAweDI4OwotCWh3aWYtPmlvX3BvcnRzW0lERV9TRUNUT1JfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHgyYzsKLQlod2lmLT5pb19wb3J0c1tJREVfTENZTF9PRkZTRVRdID0gZG1hX2Jhc2UgKyAweDMwOwotCWh3aWYtPmlvX3BvcnRzW0lERV9IQ1lMX09GRlNFVF0gPSBkbWFfYmFzZSArIDB4MzQ7Ci0JaHdpZi0+aW9fcG9ydHNbSURFX1NFTEVDVF9PRkZTRVRdID0gZG1hX2Jhc2UgKyAweDM4OwotCWh3aWYtPmlvX3BvcnRzW0lERV9TVEFUVVNfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHgzYzsKLQlod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gZG1hX2Jhc2UgKyAweDQwOwotCi0JaHdpZi0+aXJxID0gZGV2LT5pcnE7CiAJaHdpZi0+ZG1hX2Jhc2UgPSBkbWFfYmFzZTsKIAlod2lmLT5jb25maWdfZGF0YSA9IHBvcnRzLT5jdGw7CiAJaHdpZi0+bW1pbyA9IDE7CkBAIC03MzYsNyArNzcwLDcgQEAKIAkJaHdpZi0+ZG1hdGFibGVfY3B1ID0gTlVMTDsKIAl9CiAKLQlpZGVfdW5yZWdpc3Rlcihod2lmLT5pbmRleCwgMCwgMCk7CisJaWRlX3VucmVnaXN0ZXIoaHdpZi0+aW5kZXgpOwogCiAJaHdpZi0+Y2hpcHNldCA9IGlkZV91bmtub3duOwogCWlvdW5tYXAoKHZvaWQqKXBvcnRzLT5kbWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKaW5kZXggMDU0NjI2NC4uOWQxYTMwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCkBAIC0xMTIsMTAgKzExMiw5IEBACiBzZ2lpb2M0X21hc2twcm9jKGlkZV9kcml2ZV90ICogZHJpdmUsIGludCBtYXNrKQogewogCXdyaXRlYihtYXNrID8gKGRyaXZlLT5jdGwgfCAyKSA6IChkcml2ZS0+Y3RsICYgfjIpLAotCSAgICAgICAodm9pZCBfX2lvbWVtICopSURFX0NPTlRST0xfUkVHKTsKKwkgICAgICAgKHZvaWQgX19pb21lbSAqKWRyaXZlLT5od2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKTsKIH0KIAotCiBzdGF0aWMgaW50CiBzZ2lpb2M0X2NoZWNraXJxKGlkZV9od2lmX3QgKiBod2lmKQogewpAQCAtMTQyLDE4ICsxNDEsMTggQEAKIAlpbnRyX3JlZyA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilvdGhlcl9pcik7CiAJaWYgKGludHJfcmVnICYgMHgwMykgeyAvKiBWYWxpZCBJT0M0LUlERSBpbnRlcnJ1cHQgKi8KIAkJLyoKLQkJICogVXNpbmcgc2dpaW9jNF9JTkIgdG8gcmVhZCB0aGUgSURFX1NUQVRVU19SRUcgaGFzIGEgc2lkZSBlZmZlY3QKLQkJICogb2YgY2xlYXJpbmcgdGhlIGludGVycnVwdC4gIFRoZSBmaXJzdCByZWFkIHNob3VsZCBjbGVhciBpdAotCQkgKiBpZiBpdCBpcyBzZXQuICBUaGUgc2Vjb25kIHJlYWQgc2hvdWxkIHJldHVybiBhICJjbGVhciIgc3RhdHVzCi0JCSAqIGlmIGl0IGdvdCBjbGVhcmVkLiAgSWYgbm90LCB0aGVuIHNwaW4gZm9yIGEgYml0IHRyeWluZyB0bwotCQkgKiBjbGVhciBpdC4KKwkJICogVXNpbmcgc2dpaW9jNF9JTkIgdG8gcmVhZCB0aGUgU3RhdHVzIHJlZ2lzdGVyIGhhcyBhIHNpZGUKKwkJICogZWZmZWN0IG9mIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQuICBUaGUgZmlyc3QgcmVhZCBzaG91bGQKKwkJICogY2xlYXIgaXQgaWYgaXQgaXMgc2V0LiAgVGhlIHNlY29uZCByZWFkIHNob3VsZCByZXR1cm4KKwkJICogYSAiY2xlYXIiIHN0YXR1cyBpZiBpdCBnb3QgY2xlYXJlZC4gIElmIG5vdCwgdGhlbiBzcGluCisJCSAqIGZvciBhIGJpdCB0cnlpbmcgdG8gY2xlYXIgaXQuCiAJCSAqLwotCQl1OCBzdGF0ID0gc2dpaW9jNF9JTkIoSURFX1NUQVRVU19SRUcpOworCQl1OCBzdGF0ID0gc2dpaW9jNF9JTkIoaHdpZi0+aW9fcG9ydHNbSURFX1NUQVRVU19PRkZTRVRdKTsKIAkJaW50IGNvdW50ID0gMDsKLQkJc3RhdCA9IHNnaWlvYzRfSU5CKElERV9TVEFUVVNfUkVHKTsKKwkJc3RhdCA9IHNnaWlvYzRfSU5CKGh3aWYtPmlvX3BvcnRzW0lERV9TVEFUVVNfT0ZGU0VUXSk7CiAJCXdoaWxlICgoc3RhdCAmIDB4ODApICYmIChjb3VudCsrIDwgMTAwKSkgewogCQkJdWRlbGF5KDEpOwotCQkJc3RhdCA9IHNnaWlvYzRfSU5CKElERV9TVEFUVVNfUkVHKTsKKwkJCXN0YXQgPSBzZ2lpb2M0X0lOQihod2lmLT5pb19wb3J0c1tJREVfU1RBVFVTX09GRlNFVF0pOwogCQl9CiAKIAkJaWYgKGludHJfcmVnICYgMHgwMikgewpAQCAtNTYyLDcgKzU2MSw2IEBACiAJCQkJCQljbGVhciBpbnRlcnJ1cHRzICovCiAJaHdpZi0+bWFza3Byb2MgPSAmc2dpaW9jNF9tYXNrcHJvYzsJLyogTWFzayBvbi9vZmYgTklFTiByZWdpc3RlciAqLwogCWh3aWYtPnF1aXJrcHJvYyA9IE5VTEw7Ci0JaHdpZi0+YnVzcHJvYyA9IE5VTEw7CiAKIAlod2lmLT5JTkIgPSAmc2dpaW9jNF9JTkI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCmluZGV4IGNjNGJlOTYuLmI2YmUxYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwpAQCAtMzcwLDQ4ICszNzAsNiBAQAogfQogCiAvKioKLSAqCXNpbF9zYXRhX2J1c3Byb2MJLQlidXMgaXNvbGF0aW9uIElPQ1RMCi0gKglAZHJpdmU6IGRyaXZlIHRvIGlzb2xhdGUvcmVzdG9yZQotICoJQHN0YXRlOiBidXMgc3RhdGUgdG8gc2V0Ci0gKgotICoJVXNlZCBieSB0aGUgU0lJMzExMiB0byBoYW5kbGUgYnVzIGlzb2xhdGlvbi4gQXMgdGhpcyBpcyBhIAotICoJU0FUQSBjb250cm9sbGVyIHRoZSB3b3JrIHJlcXVpcmVkIGlzIHF1aXRlIGxpbWl0ZWQsIHdlIAotICoJanVzdCBoYXZlIHRvIGNsZWFuIHVwIHRoZSBzdGF0aXN0aWNzCi0gKi8KLQotc3RhdGljIGludCBzaWxfc2F0YV9idXNwcm9jKGlkZV9kcml2ZV90ICogZHJpdmUsIGludCBzdGF0ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQl1MzIgc3RhdF9jb25maWcJCT0gMDsKLQl1bnNpZ25lZCBsb25nIGFkZHIJPSBzaWltYWdlX3NlbHJlZyhod2lmLCAwKTsKLQotCWlmIChod2lmLT5tbWlvKQotCQlzdGF0X2NvbmZpZyA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilhZGRyKTsKLQllbHNlCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIGFkZHIsICZzdGF0X2NvbmZpZyk7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCWNhc2UgQlVTU1RBVEVfT046Ci0JCQlod2lmLT5kcml2ZXNbMF0uZmFpbHVyZXMgPSAwOwotCQkJaHdpZi0+ZHJpdmVzWzFdLmZhaWx1cmVzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIEJVU1NUQVRFX09GRjoKLQkJCWh3aWYtPmRyaXZlc1swXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1swXS5tYXhfZmFpbHVyZXMgKyAxOwotCQkJaHdpZi0+ZHJpdmVzWzFdLmZhaWx1cmVzID0gaHdpZi0+ZHJpdmVzWzFdLm1heF9mYWlsdXJlcyArIDE7Ci0JCQlicmVhazsKLQkJY2FzZSBCVVNTVEFURV9UUklTVEFURToKLQkJCWh3aWYtPmRyaXZlc1swXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1swXS5tYXhfZmFpbHVyZXMgKyAxOwotCQkJaHdpZi0+ZHJpdmVzWzFdLmZhaWx1cmVzID0gaHdpZi0+ZHJpdmVzWzFdLm1heF9mYWlsdXJlcyArIDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQlod2lmLT5idXNfc3RhdGUgPSBzdGF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKglzaWxfc2F0YV9yZXNldF9wb2xsCS0Jd2FpdCBmb3IgU0FUQSByZXNldAogICoJQGRyaXZlOiBkcml2ZSB3ZSBhcmUgcmVzZXR0aW5nCiAgKgpAQCAtNDkyLDcgKzQ1MCw3IEBACiAgCiBzdGF0aWMgdW5zaWduZWQgaW50IHNldHVwX21taW9fc2lpbWFnZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQl1bnNpZ25lZCBsb25nIGJhcjUJPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA1KTsKKwlyZXNvdXJjZV9zaXplX3QgYmFyNQk9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDUpOwogCXVuc2lnbmVkIGxvbmcgYmFyc2l6ZQk9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCA1KTsKIAl1OCB0bXBieXRlCT0gMDsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKQEAgLTgxOCw3ICs3NzYsNiBAQAogCWlmIChzYXRhKSB7CiAJCXN0YXRpYyBpbnQgZmlyc3QgPSAxOwogCi0JCWh3aWYtPmJ1c3Byb2MgPSAmc2lsX3NhdGFfYnVzcHJvYzsKIAkJaHdpZi0+cmVzZXRfcG9sbCA9ICZzaWxfc2F0YV9yZXNldF9wb2xsOwogCQlod2lmLT5wcmVfcmVzZXQgPSAmc2lsX3NhdGFfcHJlX3Jlc2V0OwogCQlod2lmLT51ZG1hX2ZpbHRlciA9ICZzaWxfc2F0YV91ZG1hX2ZpbHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKaW5kZXggZWUyNjFhZS4uMWYwMDI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKQEAgLTMyOCw2ICszMjgsMTAgQEAKIAkuZW5hYmxlYml0cwk9IHt7MHg0MCwweDAxLDB4MDF9LCB7MHg0MCwweDEwLDB4MTB9fSwKIAkuaG9zdF9mbGFncwk9IElERV9IRkxBR19JT18zMkJJVCB8CiAJCQkgIElERV9IRkxBR19VTk1BU0tfSVJRUyB8CisvKiBGSVhNRTogY2hlY2sgZm9yIENvbXBhdGliaWxpdHkgbW9kZSBpbiBnZW5lcmljIElERSBQQ0kgY29kZSAqLworI2lmIGRlZmluZWQoQ09ORklHX0xPUEVDKSB8fCBkZWZpbmVkKENPTkZJR19TQU5EUE9JTlQpCisJCQkgIElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUyB8CisjZW5kaWYKIAkJCSAgSURFX0hGTEFHX05PX0FVVE9ETUEgfAogCQkJICBJREVfSEZMQUdfQk9PVEFCTEUsCiAJLnBpb19tYXNrCT0gQVRBX1BJTzUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCmluZGV4IDJlZjJlZDIuLjFlNGE2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCkBAIC0xMjYsNDAgKzEyNiw2IEBACiAJaWRlX2RtYV9zdGFydChkcml2ZSk7CiB9CiAKLXN0YXRpYyBpbnQgdGM4NmMwMDFfYnVzcHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBzdGF0ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgbG9uZyBzY19iYXNlCT0gaHdpZi0+Y29uZmlnX2RhdGE7Ci0JdTE2IHNjcjE7Ci0KLQkvKiBTeXN0ZW0gQ29udHJvbCAxIFJlZ2lzdGVyIGJpdCAxMSAoQVRBIEhhcmQgUmVzZXQpIHJlYWQgKi8KLQlzY3IxID0gaW53KHNjX2Jhc2UgKyAweDAwKTsKLQotCXN3aXRjaCAoc3RhdGUpIHsKLQkJY2FzZSBCVVNTVEFURV9PTjoKLQkJCWlmICghKHNjcjEgJiAweDA4MDApKQotCQkJCXJldHVybiAwOwotCQkJc2NyMSAmPSB+MHgwODAwOwotCi0JCQlod2lmLT5kcml2ZXNbMF0uZmFpbHVyZXMgPSBod2lmLT5kcml2ZXNbMV0uZmFpbHVyZXMgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlVTU1RBVEVfT0ZGOgotCQkJaWYgKHNjcjEgJiAweDA4MDApCi0JCQkJcmV0dXJuIDA7Ci0JCQlzY3IxIHw9IDB4MDgwMDsKLQotCQkJaHdpZi0+ZHJpdmVzWzBdLmZhaWx1cmVzID0gaHdpZi0+ZHJpdmVzWzBdLm1heF9mYWlsdXJlcyArIDE7Ci0JCQlod2lmLT5kcml2ZXNbMV0uZmFpbHVyZXMgPSBod2lmLT5kcml2ZXNbMV0ubWF4X2ZhaWx1cmVzICsgMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogU3lzdGVtIENvbnRyb2wgMSBSZWdpc3RlciBiaXQgMTEgKEFUQSBIYXJkIFJlc2V0KSB3cml0ZSAqLwotCW91dHcoc2NyMSwgc2NfYmFzZSArIDB4MDApOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTggX19kZXZpbml0IHRjODZjMDAxX2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CkBAIC0xOTQsOCArMTYwLDYgQEAKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmdGM4NmMwMDFfc2V0X3Bpb19tb2RlOwogCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZ0Yzg2YzAwMV9zZXRfbW9kZTsKIAotCWh3aWYtPmJ1c3Byb2MJPSAmdGM4NmMwMDFfYnVzcHJvYzsKLQogCWh3aWYtPmNhYmxlX2RldGVjdCA9IHRjODZjMDAxX2NhYmxlX2RldGVjdDsKIAogCWlmICghaHdpZi0+ZG1hX2Jhc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKaW5kZXggZjNmNzlmOC4uOTAwNGU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYwpAQCAtNDc5LDYgKzQ3OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmlhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTc2XzEpLCAgMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMSksICAwIH0sCisJeyBQQ0lfVkRFVklDRShWSUEsIFBDSV9ERVZJQ0VfSURfVklBX0NYNzAwX0lERSksIDAgfSwKIAl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfNjQxMCksICAgICAgMSB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9TQVRBX0VJREUpLCAxIH0sCiAJeyAwLCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL21wYzh4eC5jIGIvZHJpdmVycy9pZGUvcHBjL21wYzh4eC5jCmluZGV4IDM4ZmJmYjguLmE3ODRhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BwYy9tcGM4eHguYworKysgYi9kcml2ZXJzL2lkZS9wcGMvbXBjOHh4LmMKQEAgLTk5LDMyICs5OSw2IEBACiAvKiBNYWtlIGNsb2NrIGN5Y2xlcyBhbmQgYWx3YXlzIHJvdW5kIHVwICovCiAjZGVmaW5lIFBDTUNJQV9NS19DTEtTKCB0LCBUICkgKCggKHQpICogKChUKS8xMDAwMDAwKSArIDk5OVUgKSAvIDEwMDBVICkKIAotCi0KLS8qCi0gKiBJREUgc3R1ZmYuCi0gKi8KLXN0YXRpYyBpbnQKLW04eHhfaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKLXsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9NUEM4eHhfSURFCi0JaWYgKGJhc2UgPj0gTUFYX0hXSUZTKQotCQlyZXR1cm4gMDsKLQotCXByaW50aygiWyVkXSBtOHh4X2lkZV9kZWZhdWx0X2lycSAlZFxuIixfX0xJTkVfXyxpb3BvcnRfZHNjW2Jhc2VdLmlycSk7Ci0JCi0JcmV0dXJuIChpb3BvcnRfZHNjW2Jhc2VdLmlycSk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gOTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotbTh4eF9pZGVfZGVmYXVsdF9pb19iYXNlKGludCBpbmRleCkKLXsKLSAgICAgICAgcmV0dXJuIGluZGV4OwotfQotCiAjZGVmaW5lIE04WFhfUENNQ0lBX0NEMihzbG90KSAgICAgICgweDEwMDAwMDAwID4+IChzbG90IDw8IDQpKQogI2RlZmluZSBNOFhYX1BDTUNJQV9DRDEoc2xvdCkgICAgICAoMHgwODAwMDAwMCA+PiAoc2xvdCA8PCA0KSkKIApAQCAtMTQ5LDEyICsxMjMsMTEgQEAKICAqLwogCiAvKgotICogbTh4eF9pZGVfaW5pdF9od2lmX3BvcnRzIGZvciBhIGRpcmVjdCBJREUgaW50ZXJmYWNlIF91c2luZ18KKyAqIG04eHhfaWRlX2luaXRfcG9ydHMoKSBmb3IgYSBkaXJlY3QgSURFIGludGVyZmFjZSBfdXNpbmdfCisgKiBNUEM4eHgncyBpbnRlcm5hbCBQQ01DSUEgaW50ZXJmYWNlCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkgfHwgZGVmaW5lZChDT05GSUdfSURFXzh4eF9ESVJFQ1QpCi1zdGF0aWMgdm9pZAotbTh4eF9pZGVfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqaHcsIHVuc2lnbmVkIGxvbmcgZGF0YV9wb3J0LCAKLQkJdW5zaWduZWQgbG9uZyBjdHJsX3BvcnQsIGludCAqaXJxKQorc3RhdGljIHZvaWQgX19pbml0IG04eHhfaWRlX2luaXRfcG9ydHMoaHdfcmVnc190ICpodywgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQpCiB7CiAJdW5zaWduZWQgbG9uZyAqcCA9IGh3LT5pb19wb3J0czsKIAlpbnQgaTsKQEAgLTE3Myw4ICsxNDYsNiBAQAogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAogCSpwID0gMDsKLQlpZiAoaXJxKQotCQkqaXJxID0gMDsKIAogCXBjbXAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fcGNtY2lhKSk7CiAKQEAgLTI0OCw5ICsyMTksNiBAQAogCQl9CiAJfQogCi0JaWYgKGRhdGFfcG9ydCA+PSBNQVhfSFdJRlMpCi0JCXJldHVybjsKLQogCWlmIChfc2xvdF8gPT0gLTEpIHsKIAkJcHJpbnRrICgiUENNQ0lBIHNsb3QgaGFzIG5vdCBiZWVuIGRlZmluZWQhIFVzaW5nIEEgYXMgZGVmYXVsdFxuIik7CiAJCV9zbG90XyA9IDA7CkBAIC0yOTIsMTEgKzI2MCwxMyBAQAogCSAJKnArKyA9IGJhc2UgKyBpb3BvcnRfZHNjW2RhdGFfcG9ydF0ucmVnX29mZltpXTsKIAl9CiAKLQlpZiAoaXJxKSB7CisJaHctPmlycSA9IGlvcG9ydF9kc2NbZGF0YV9wb3J0XS5pcnE7CisJaHctPmFja19pbnRyID0gKGlkZV9hY2tfaW50cl90ICopaWRlX2ludGVycnVwdF9hY2s7CisKICNpZmRlZiBDT05GSUdfSURFXzh4eF9QQ0NBUkQKKwl7CiAJCXVuc2lnbmVkIGludCByZWc7CiAKLQkJKmlycSA9IGlvcG9ydF9kc2NbZGF0YV9wb3J0XS5pcnE7CiAJCWlmIChfc2xvdF8pCiAJCQlwZ2NyeCA9ICYoKGltbWFwX3QgKikgSU1BUF9BRERSKS0+aW1fcGNtY2lhLnBjbWNfcGdjcmI7CiAJCWVsc2UKQEAgLTMwNiwxNCArMjc2LDExIEBACiAJCXJlZyB8PSBta19pbnRfaW50X21hc2sgKHBjbWNpYV9zY2hsdmwpIDw8IDI0OwogCQlyZWcgfD0gbWtfaW50X2ludF9tYXNrIChwY21jaWFfc2NobHZsKSA8PCAxNjsKIAkJKnBnY3J4ID0gcmVnOwotI2Vsc2UJLyogZGlyZWN0IGNvbm5lY3RlZCBJREUgZHJpdmUsIGkuZS4gZXh0ZXJuYWwgSVJRLCBub3QgdGhlIFBDTUNJQSBpcnEgKi8KLQkJKmlycSA9IGlvcG9ydF9kc2NbZGF0YV9wb3J0XS5pcnE7Ci0jZW5kaWYJLyogQ09ORklHX0lERV84eHhfUENDQVJEICovCiAJfQorI2VuZGlmCS8qIENPTkZJR19JREVfOHh4X1BDQ0FSRCAqLwogCiAJaWRlX2h3aWZzW2RhdGFfcG9ydF0ucGlvX21hc2sgPSBBVEFfUElPNDsKIAlpZGVfaHdpZnNbZGF0YV9wb3J0XS5zZXRfcGlvX21vZGUgPSBtOHh4X2lkZV9zZXRfcGlvX21vZGU7Ci0JaWRlX2h3aWZzW2RhdGFfcG9ydF0uYWNrX2ludHIgPSAoaWRlX2Fja19pbnRyX3QgKilpZGVfaW50ZXJydXB0X2FjazsKIAogCS8qIEVuYWJsZSBIYXJkZGlzayBJbnRlcnJ1cHQsCiAJICogYW5kIG1ha2UgaXQgZWRnZSBzZW5zaXRpdmUKQEAgLTMyOSwxNiArMjk2LDE1IEBACiAJLyogRW5hYmxlIGZhbGxpbmcgZWRnZSBpcnEgKi8KIAlwY21wLT5wY21jX3BlciA9IDB4MTAwMDAwID4+ICgxNiAqIF9zbG90Xyk7CiAjZW5kaWYJLyogQ09ORklHX0lERV84eHhfUENDQVJEICovCi19CS8qIG04eHhfaWRlX2luaXRfaHdpZl9wb3J0cygpIHVzaW5nIDh4eCBpbnRlcm5hbCBQQ01DSUEgaW50ZXJmYWNlICovCit9CiAjZW5kaWYgLyogQ09ORklHX0lERV84eHhfUENDQVJEIHx8IENPTkZJR19JREVfOHh4X0RJUkVDVCAqLwogCiAvKgotICogbTh4eF9pZGVfaW5pdF9od2lmX3BvcnRzIGZvciBhIGRpcmVjdCBJREUgaW50ZXJmYWNlIF9ub3RfIHVzaW5nCisgKiBtOHh4X2lkZV9pbml0X3BvcnRzKCkgZm9yIGEgZGlyZWN0IElERSBpbnRlcmZhY2UgX25vdF8gdXNpbmcKICAqIE1QQzh4eCdzIGludGVybmFsIFBDTUNJQSBpbnRlcmZhY2UKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0lERV9FWFRfRElSRUNUKQotdm9pZCBtOHh4X2lkZV9pbml0X2h3aWZfcG9ydHMgKGh3X3JlZ3NfdCAqaHcsCi0JdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsIHVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCBpbnQgKmlycSkKK3N0YXRpYyB2b2lkIF9faW5pdCBtOHh4X2lkZV9pbml0X3BvcnRzKGh3X3JlZ3NfdCAqaHcsIHVuc2lnbmVkIGxvbmcgZGF0YV9wb3J0KQogewogCXVuc2lnbmVkIGxvbmcgKnAgPSBody0+aW9fcG9ydHM7CiAJaW50IGk7CkBAIC0zNDksOCArMzE1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGJhc2U7CiAKIAkqcCA9IDA7Ci0JaWYgKGlycSkKLQkJKmlycSA9IDA7CiAKIAlpZiAoIWlkZV9iYXNlKSB7CiAKQEAgLTM3Miw5ICszMzYsNiBAQAogI2VuZGlmCiAJfQogCi0JaWYgKGRhdGFfcG9ydCA+PSBNQVhfSFdJRlMpCi0JCXJldHVybjsKLQogCWJhc2UgPSBpZGVfYmFzZSArIGlvcG9ydF9kc2NbZGF0YV9wb3J0XS5iYXNlX29mZjsKICNpZmRlZiBERUJVRwogCXByaW50ayAoImJhc2U6ICUwOHggKyAlMDh4ID0gJTA4eFxuIiwKQEAgLTM5MiwxNCArMzUzLDEyIEBACiAJIAkqcCsrID0gYmFzZSArIGlvcG9ydF9kc2NbZGF0YV9wb3J0XS5yZWdfb2ZmW2ldOwogCX0KIAotCWlmIChpcnEpIHsKLQkJLyogZGlyZWN0IGNvbm5lY3RlZCBJREUgZHJpdmUsIGkuZS4gZXh0ZXJuYWwgSVJRICovCi0JCSppcnEgPSBpb3BvcnRfZHNjW2RhdGFfcG9ydF0uaXJxOwotCX0KKwkvKiBkaXJlY3QgY29ubmVjdGVkIElERSBkcml2ZSwgaS5lLiBleHRlcm5hbCBJUlEgKi8KKwlody0+aXJxID0gaW9wb3J0X2RzY1tkYXRhX3BvcnRdLmlycTsKKwlody0+YWNrX2ludHIgPSAoaWRlX2Fja19pbnRyX3QgKilpZGVfaW50ZXJydXB0X2FjazsKIAogCWlkZV9od2lmc1tkYXRhX3BvcnRdLnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJaWRlX2h3aWZzW2RhdGFfcG9ydF0uc2V0X3Bpb19tb2RlID0gbTh4eF9pZGVfc2V0X3Bpb19tb2RlOwotCWlkZV9od2lmc1tkYXRhX3BvcnRdLmFja19pbnRyID0gKGlkZV9hY2tfaW50cl90ICopaWRlX2ludGVycnVwdF9hY2s7CiAKIAkvKiBFbmFibGUgSGFyZGRpc2sgSW50ZXJydXB0LAogCSAqIGFuZCBtYWtlIGl0IGVkZ2Ugc2Vuc2l0aXZlCkBAIC00MDcsOCArMzY2LDcgQEAKIAkvKiAoMTEtMTgpIFNldCBlZGdlIGRldGVjdCBmb3IgaXJxLCBubyB3YWtldXAgZnJvbSBsb3cgcG93ZXIgbW9kZSAqLwogCSgoaW1tYXBfdCAqKSBJTUFQX0FERFIpLT5pbV9zaXVfY29uZi5zY19zaWVsIHw9CiAJCQkoMHg4MDAwMDAwMCA+PiBpb3BvcnRfZHNjW2RhdGFfcG9ydF0uaXJxKTsKLX0JLyogbTh4eF9pZGVfaW5pdF9od2lmX3BvcnRzKCkgZm9yIENPTkZJR19JREVfOHh4X0RJUkVDVCAqLyAKLQorfQogI2VuZGlmCS8qIENPTkZJR19JREVfOHh4X0RJUkVDVCAqLwogCiAKQEAgLTgyOSwyMCArNzg3LDIwIEBACiAJcmV0dXJuICgwKTsJLyogZG9uJ3Qga25vdyAqLwogfQogCi12b2lkIG04eHhfaWRlX2luaXQodm9pZCkKLXsKLQlwcGNfaWRlX21kLmRlZmF1bHRfaXJxICAgICAgICAgID0gbTh4eF9pZGVfZGVmYXVsdF9pcnE7Ci0JcHBjX2lkZV9tZC5kZWZhdWx0X2lvX2Jhc2UgICAgICA9IG04eHhfaWRlX2RlZmF1bHRfaW9fYmFzZTsKLQlwcGNfaWRlX21kLmlkZV9pbml0X2h3aWYgICAgICAgID0gbTh4eF9pZGVfaW5pdF9od2lmX3BvcnRzOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4eHhfaWRlX3Byb2JlKHZvaWQpCiB7CisJaHdfcmVnc190IGh3OwogCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCiAjaWZkZWYgSURFMF9CQVNFX09GRlNFVAorCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworCW04eHhfaWRlX2luaXRfcG9ydHMoJmh3LCAwKTsKKwlpZGVfaW5pdF9wb3J0X2h3KCZpZGVfaHdpZnNbMF0sICZodyk7CiAJaWR4WzBdID0gMDsKICNpZmRlZiBJREUxX0JBU0VfT0ZGU0VUCisJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisJbTh4eF9pZGVfaW5pdF9wb3J0cygmaHcsIDEpOworCWlkZV9pbml0X3BvcnRfaHcoJmlkZV9od2lmc1sxXSwgJmh3KTsKIAlpZHhbMV0gPSAxOwogI2VuZGlmCiAjZW5kaWYKQEAgLTg1MywzICs4MTEsNSBAQAogfQogCiBtb2R1bGVfaW5pdChtcGM4eHhfaWRlX3Byb2JlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKaW5kZXggMTJhYzNiZi4uODg2MTliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCkBAIC04MCw3ICs4MCw2IEBACiB9IHBtYWNfaWRlX2h3aWZfdDsKIAogc3RhdGljIHBtYWNfaWRlX2h3aWZfdCBwbWFjX2lkZVtNQVhfSFdJRlNdOwotc3RhdGljIGludCBwbWFjX2lkZV9jb3VudDsKIAogZW51bSB7CiAJY29udHJvbGxlcl9vaGFyZSwJLyogT0hhcmUgYmFzZWQgKi8KQEAgLTQxOSwzOCArNDE4LDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQV9QTUFDICovCiAKLS8qCi0gKiBOLkIuIHRoaXMgY2FuJ3QgYmUgYW4gaW5pdGZ1bmMsIGJlY2F1c2UgdGhlIG1lZGlhLWJheSB0YXNrIGNhbgotICogY2FsbCBpZGVfW3VuXXJlZ2lzdGVyIGF0IGFueSB0aW1lLgotICovCi12b2lkCi1wbWFjX2lkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICpodywKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9wb3J0LCB1bnNpZ25lZCBsb25nIGN0cmxfcG9ydCwKLQkJCSAgICAgIGludCAqaXJxKQotewotCWludCBpLCBpeDsKLQotCWlmIChkYXRhX3BvcnQgPT0gMCkKLQkJcmV0dXJuOwotCi0JZm9yIChpeCA9IDA7IGl4IDwgTUFYX0hXSUZTOyArK2l4KQotCQlpZiAoZGF0YV9wb3J0ID09IHBtYWNfaWRlW2l4XS5yZWdiYXNlKQotCQkJYnJlYWs7Ci0KLQlpZiAoaXggPj0gTUFYX0hXSUZTKQotCQlyZXR1cm47CQkvKiBub3QgYW4gSURFIFBNQUMgaW50ZXJmYWNlICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQotCQlody0+aW9fcG9ydHNbaV0gPSBkYXRhX3BvcnQgKyBpICogMHgxMDsKLQlody0+aW9fcG9ydHNbOF0gPSBkYXRhX3BvcnQgKyAweDE2MDsKLQotCWlmIChpcnEgIT0gTlVMTCkKLQkJKmlycSA9IHBtYWNfaWRlW2l4XS5pcnE7Ci0KLQlody0+ZGV2ID0gJnBtYWNfaWRlW2l4XS5tZGV2LT5vZmRldi5kZXY7Ci19Ci0KLSNkZWZpbmUgUE1BQ19JREVfUkVHKHgpICgodm9pZCBfX2lvbWVtICopKElERV9EQVRBX1JFRysoeCkpKQorI2RlZmluZSBQTUFDX0lERV9SRUcoeCkgXAorCSgodm9pZCBfX2lvbWVtICopKChkcml2ZSktPmh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gKyAoeCkpKQogCiAvKgogICogQXBwbHkgdGhlIHRpbWluZ3Mgb2YgdGhlIHByb3BlciB1bml0IChtYXN0ZXIvc2xhdmUpIHRvIHRoZSBzaGFyZWQKQEAgLTg4Niw1OCArODU1LDYgQEAKIAlwbWlmLT50aW1pbmdzWzJdID0gcG1pZi0+dGltaW5nc1szXSA9IHZhbHVlMjsKIH0KIAotdW5zaWduZWQgbG9uZwotcG1hY19pZGVfZ2V0X2Jhc2UoaW50IGluZGV4KQotewotCXJldHVybiBwbWFjX2lkZVtpbmRleF0ucmVnYmFzZTsKLX0KLQotaW50Ci1wbWFjX2lkZV9jaGVja19iYXNlKHVuc2lnbmVkIGxvbmcgYmFzZSkKLXsKLQlpbnQgaXg7Ci0JCi0gCWZvciAoaXggPSAwOyBpeCA8IE1BWF9IV0lGUzsgKytpeCkKLQkJaWYgKGJhc2UgPT0gcG1hY19pZGVbaXhdLnJlZ2Jhc2UpCi0JCQlyZXR1cm4gaXg7Ci0JcmV0dXJuIC0xOwotfQotCi1pbnQKLXBtYWNfaWRlX2dldF9pcnEodW5zaWduZWQgbG9uZyBiYXNlKQotewotCWludCBpeDsKLQotCWZvciAoaXggPSAwOyBpeCA8IE1BWF9IV0lGUzsgKytpeCkKLQkJaWYgKGJhc2UgPT0gcG1hY19pZGVbaXhdLnJlZ2Jhc2UpCi0JCQlyZXR1cm4gcG1hY19pZGVbaXhdLmlycTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVfbWFqb3JzW10gPSB7IDMsIDIyLCAzMywgMzQsIDU2LCA1NyB9OwotCi1kZXZfdCBfX2luaXQKLXBtYWNfZmluZF9pZGVfYm9vdChjaGFyICpib290ZGV2aWNlLCBpbnQgbikKLXsKLQlpbnQgaTsKLQkKLQkvKgotCSAqIExvb2sgdGhyb3VnaCB0aGUgbGlzdCBvZiBJREUgaW50ZXJmYWNlcyBmb3IgdGhpcyBvbmUuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IHBtYWNfaWRlX2NvdW50OyArK2kpIHsKLQkJY2hhciAqbmFtZTsKLQkJaWYgKCFwbWFjX2lkZVtpXS5ub2RlIHx8ICFwbWFjX2lkZVtpXS5ub2RlLT5mdWxsX25hbWUpCi0JCQljb250aW51ZTsKLQkJbmFtZSA9IHBtYWNfaWRlW2ldLm5vZGUtPmZ1bGxfbmFtZTsKLQkJaWYgKG1lbWNtcChuYW1lLCBib290ZGV2aWNlLCBuKSA9PSAwICYmIG5hbWVbbl0gPT0gMCkgewotCQkJLyogWFhYIHNob3VsZCBjb3BlIHdpdGggdGhlIDJuZCBkcml2ZSBhcyB3ZWxsLi4uICovCi0JCQlyZXR1cm4gTUtERVYoaWRlX21ham9yc1tpXSwgMCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogU3VzcGVuZCBjYWxsIGJhY2ssIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGNoaWxkIGRldmljZXMKICAqIGhhdmUgYWN0dWFsbHkgYmVlbiBzdXNwZW5kZWQKICAqLwpAQCAtMTA4OCw3ICsxMDA1LDggQEAKIAlpZiAobnAtPnBhcmVudCAmJiBucC0+cGFyZW50LT5uYW1lCiAJICAgICYmIHN0cmNhc2VjbXAobnAtPnBhcmVudC0+bmFtZSwgIm1lZGlhLWJheSIpID09IDApIHsKICNpZmRlZiBDT05GSUdfUE1BQ19NRURJQUJBWQotCQltZWRpYV9iYXlfc2V0X2lkZV9pbmZvcyhucC0+cGFyZW50LCBwbWlmLT5yZWdiYXNlLCBwbWlmLT5pcnEsIGh3aWYtPmluZGV4KTsKKwkJbWVkaWFfYmF5X3NldF9pZGVfaW5mb3MobnAtPnBhcmVudCwgcG1pZi0+cmVnYmFzZSwgcG1pZi0+aXJxLAorCQkJCQlod2lmKTsKICNlbmRpZiAvKiBDT05GSUdfUE1BQ19NRURJQUJBWSAqLwogCQlwbWlmLT5tZWRpYWJheSA9IDE7CiAJCWlmICghYmlkcCkKQEAgLTExMTksNyArMTAzNyw2IEBACiAJaHdpZi0+aHdpZl9kYXRhID0gcG1pZjsKIAlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsIGh3KTsKIAlod2lmLT5ub3Byb2JlID0gcG1pZi0+bWVkaWFiYXk7Ci0JaHdpZi0+aG9sZCA9IHBtaWYtPm1lZGlhYmF5OwogCWh3aWYtPmNibCA9IHBtaWYtPmNhYmxlXzgwID8gQVRBX0NCTF9QQVRBODAgOiBBVEFfQ0JMX1BBVEE0MDsKIAlod2lmLT5zZXRfcGlvX21vZGUgPSBwbWFjX2lkZV9zZXRfcGlvX21vZGU7CiAJaWYgKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl91bl9hdGE2CkBAIC0xMTU0LDYgKzEwNzEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHBtYWNfaWRlX2luaXRfcG9ydHMoaHdfcmVnc190ICpodywgdW5zaWduZWQgbG9uZyBiYXNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJaHctPmlvX3BvcnRzW2ldID0gYmFzZSArIGkgKiAweDEwOworCWh3LT5pb19wb3J0c1s4XSA9IGJhc2UgKyAweDE2MDsKK30KKwogLyoKICAqIEF0dGFjaCB0byBhIG1hY2lvIHByb2JlZCBpbnRlcmZhY2UKICAqLwpAQCAtMTIyNyw3ICsxMTUzLDcgQEAKIAlkZXZfc2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldiwgaHdpZik7CiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQlwbWFjX2lkZV9pbml0X2h3aWZfcG9ydHMoJmh3LCBwbWlmLT5yZWdiYXNlLCAwLCBOVUxMKTsKKwlwbWFjX2lkZV9pbml0X3BvcnRzKCZodywgcG1pZi0+cmVnYmFzZSk7CiAJaHcuaXJxID0gaXJxOwogCWh3LmRldiA9ICZtZGV2LT5vZmRldi5kZXY7CiAKQEAgLTEyNTQsNyArMTE4MCw3IEBACiAJaW50CQlyYyA9IDA7CiAKIAlpZiAobWVzZy5ldmVudCAhPSBtZGV2LT5vZmRldi5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQKLQkJCSYmIG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQkJJiYgKG1lc2cuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkpIHsKIAkJcmMgPSBwbWFjX2lkZV9kb19zdXNwZW5kKGh3aWYpOwogCQlpZiAocmMgPT0gMCkKIAkJCW1kZXYtPm9mZGV2LmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc2c7CkBAIC0xMzQxLDcgKzEyNjcsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBod2lmKTsKIAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwotCXBtYWNfaWRlX2luaXRfaHdpZl9wb3J0cygmaHcsIHBtaWYtPnJlZ2Jhc2UsIDAsIE5VTEwpOworCXBtYWNfaWRlX2luaXRfcG9ydHMoJmh3LCBwbWlmLT5yZWdiYXNlKTsKIAlody5pcnEgPSBwZGV2LT5pcnE7CiAJaHcuZGV2ID0gJnBkZXYtPmRldjsKIApAQCAtMTM2NCw3ICsxMjkwLDcgQEAKIAlpbnQJCXJjID0gMDsKIAkKIAlpZiAobWVzZy5ldmVudCAhPSBwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQKLQkJCSYmIG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQkJJiYgKG1lc2cuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkpIHsKIAkJcmMgPSBwbWFjX2lkZV9kb19zdXNwZW5kKGh3aWYpOwogCQlpZiAocmMgPT0gMCkKIAkJCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc2c7CkBAIC0xNzcxLDMgKzE2OTcsNSBAQAogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQV9QTUFDICovCiAKIG1vZHVsZV9pbml0KHBtYWNfaWRlX3Byb2JlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwppbmRleCA2MzRlM2Y2Li5mN2VkZTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwpAQCAtNDEsMTcgKzQxLDYgQEAKIAlpZGVfaHdpZl90ICpod2lmOwogCiAJLyoKLQkgKiBMb29rIGZvciBhIGh3aWYgd2l0aCBtYXRjaGluZyBpb19iYXNlIHNwZWNpZmllZCB1c2luZwotCSAqIHBhcmFtZXRlcnMgdG8gaWRlX3NldHVwKCkuCi0JICovCi0JZm9yIChoID0gMDsgaCA8IE1BWF9IV0lGUzsgKytoKSB7Ci0JCWh3aWYgPSAmaWRlX2h3aWZzW2hdOwotCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSBpb19iYXNlKSB7Ci0JCQlpZiAoaHdpZi0+Y2hpcHNldCA9PSBpZGVfZm9yY2VkKQotCQkJCXJldHVybiBod2lmOyAvKiBhIHBlcmZlY3QgbWF0Y2ggKi8KLQkJfQotCX0KLQkvKgogCSAqIExvb2sgZm9yIGEgaHdpZiB3aXRoIG1hdGNoaW5nIGlvX2Jhc2UgZGVmYXVsdCB2YWx1ZS4KIAkgKiBJZiBjaGlwc2V0IGlzICJpZGVfdW5rbm93biIsIHRoZW4gY2xhaW0gdGhhdCBod2lmIHNsb3QuCiAJICogT3RoZXJ3aXNlLCBzb21lIG90aGVyIGNoaXBzZXQgaGFzIGFscmVhZHkgY2xhaW1lZCBpdC4uICA6KApAQCAtMzU2LDcgKzM0NSw2IEBACiAJdW5zaWduZWQgbG9uZyBjdGwgPSAwLCBiYXNlID0gMDsKIAlpZGVfaHdpZl90ICpod2lmOwogCXU4IGJvb3RhYmxlID0gKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQk9PVEFCTEUpID8gMSA6IDA7Ci0JdTggb2xkbm9wcm9iZSA9IDA7CiAJc3RydWN0IGh3X3JlZ3NfcyBodzsKIAogCWlmICgoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19JU0FfUE9SVFMpID09IDApIHsKQEAgLTM4MiwxOSArMzcwLDEzIEBACiAJCXJldHVybiBOVUxMOwkvKiBubyByb29tIGluIGlkZV9od2lmc1tdICovCiAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQlody5pcnEgPSBod2lmLT5pcnEgPyBod2lmLT5pcnEgOiBpcnE7CisJaHcuaXJxID0gaXJxOwogCWh3LmRldiA9ICZkZXYtPmRldjsKIAlody5jaGlwc2V0ID0gZC0+Y2hpcHNldCA/IGQtPmNoaXBzZXQgOiBpZGVfcGNpOwogCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIGJhc2UsIGN0bCB8IDIpOwogCi0JaWYgKGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gPT0gYmFzZSAmJgotCSAgICBod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID09IChjdGwgfCAyKSkKLQkJb2xkbm9wcm9iZSA9IGh3aWYtPm5vcHJvYmU7Ci0KIAlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsICZodyk7CiAKLQlod2lmLT5ub3Byb2JlID0gb2xkbm9wcm9iZTsKLQogCWh3aWYtPmRldiA9ICZkZXYtPmRldjsKIAlod2lmLT5jZHMgPSBkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jIGIvZHJpdmVycy9pZWVlMTM5NC9jc3IuYwppbmRleCA1MmFjODNlLi5jOTBiZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyLmMKQEAgLTEzMyw4ICsxMzMsNyBAQAogICAgICAgICAgICAgICAgIGhvc3QtPmNzci5zdGF0ZSAmPSB+MHgxMDA7CiAgICAgICAgIH0KIAotICAgICAgICBob3N0LT5jc3IudG9wb2xvZ3lfbWFwWzFdID0KLSAgICAgICAgICAgICAgICBjcHVfdG9fYmUzMihiZTMyX3RvX2NwdShob3N0LT5jc3IudG9wb2xvZ3lfbWFwWzFdKSArIDEpOworCWJlMzJfYWRkX2NwdSgmaG9zdC0+Y3NyLnRvcG9sb2d5X21hcFsxXSwgMSk7CiAgICAgICAgIGhvc3QtPmNzci50b3BvbG9neV9tYXBbMl0gPSBjcHVfdG9fYmUzMihob3N0LT5ub2RlX2NvdW50IDw8IDE2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvc3QtPnNlbGZpZF9jb3VudCk7CiAgICAgICAgIGhvc3QtPmNzci50b3BvbG9neV9tYXBbMF0gPQpAQCAtMTQyLDggKzE0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjc3JfY3JjMTYoaG9zdC0+Y3NyLnRvcG9sb2d5X21hcCArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+c2VsZmlkX2NvdW50ICsgMikpOwogCi0gICAgICAgIGhvc3QtPmNzci5zcGVlZF9tYXBbMV0gPQotICAgICAgICAgICAgICAgIGNwdV90b19iZTMyKGJlMzJfdG9fY3B1KGhvc3QtPmNzci5zcGVlZF9tYXBbMV0pICsgMSk7CisJYmUzMl9hZGRfY3B1KCZob3N0LT5jc3Iuc3BlZWRfbWFwWzFdLCAxKTsKICAgICAgICAgaG9zdC0+Y3NyLnNwZWVkX21hcFswXSA9IGNwdV90b19iZTMyKDB4M2YxIDw8IDE2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNzcl9jcmMxNihob3N0LT5jc3Iuc3BlZWRfbWFwKzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKaW5kZXggNjU3MjIxMS4uNjIyOGZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCkBAIC0yMTc5LDggKzIxNzksNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShpZWVlMTM5NCwgZHYxMzk0X2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBocHNiX3Byb3RvY29sX2RyaXZlciBkdjEzOTRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJkdjEzOTQiLAotCS5pZF90YWJsZQk9IGR2MTM5NF9pZF90YWJsZSwKKwkubmFtZSA9ICJkdjEzOTQiLAogfTsKIAogCkBAIC0yNTY4LDcgKzI1NjcsNiBAQAogCiAJY2Rldl9pbml0KCZkdjEzOTRfY2RldiwgJmR2MTM5NF9mb3BzKTsKIAlkdjEzOTRfY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwotCWtvYmplY3Rfc2V0X25hbWUoJmR2MTM5NF9jZGV2LmtvYmosICJkdjEzOTQiKTsKIAlyZXQgPSBjZGV2X2FkZCgmZHYxMzk0X2NkZXYsIElFRUUxMzk0X0RWMTM5NF9ERVYsIDE2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZHYxMzk0OiB1bmFibGUgdG8gcmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jIGIvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuYwppbmRleCBiNjQyNTQ2Li5mYTJiZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaGlnaGxldmVsLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCWlmICgoYWxpZ25tZW50ICYgMykgfHwgKGFsaWdubWVudCA+IDB4ODAwMDAwMDAwMDAwVUxMKSB8fAogCSAgICAoaHdlaWdodDY0KGFsaWdubWVudCkgIT0gMSkpIHsKIAkJSFBTQl9FUlIoIiVzIGNhbGxlZCB3aXRoIGludmFsaWQgYWxpZ25tZW50OiAweCUwNDhsbHgiLAotCQkJIF9fRlVOQ1RJT05fXywgKHVuc2lnbmVkIGxvbmcgbG9uZylhbGlnbm1lbnQpOworCQkJIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKWFsaWdubWVudCk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlpZiAoKChzdGFydHxlbmQpICYgfmFsaWduX21hc2spIHx8IChzdGFydCA+PSBlbmQpIHx8CiAJICAgIChlbmQgPiBDU1IxMjEyX0FMTF9TUEFDRV9FTkQpKSB7CiAJCUhQU0JfRVJSKCIlcyBjYWxsZWQgd2l0aCBpbnZhbGlkIGFkZHJlc3NlcyAiCi0JCQkgIihzdGFydCA9ICUwMTJMeCAgZW5kID0gJTAxMkx4KSIsIF9fRlVOQ1RJT05fXywKKwkJCSAiKHN0YXJ0ID0gJTAxMkx4ICBlbmQgPSAlMDEyTHgpIiwgX19mdW5jX18sCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydCwodW5zaWduZWQgbG9uZyBsb25nKWVuZCk7CiAJCXJldHVybiByZXR2YWw7CiAJfQpAQCAtNDIyLDcgKzQyMiw3IEBACiAKIAlpZiAoKChzdGFydHxlbmQpICYgMykgfHwgKHN0YXJ0ID49IGVuZCkgfHwKIAkgICAgKGVuZCA+IENTUjEyMTJfQUxMX1NQQUNFX0VORCkpIHsKLQkJSFBTQl9FUlIoIiVzIGNhbGxlZCB3aXRoIGludmFsaWQgYWRkcmVzc2VzIiwgX19GVU5DVElPTl9fKTsKKwkJSFBTQl9FUlIoIiVzIGNhbGxlZCB3aXRoIGludmFsaWQgYWRkcmVzc2VzIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmMKaW5kZXggMzZjNzQ3Yi4uZGNkYjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogewogCWlmIChob3N0LT5pbl9idXNfcmVzZXQpIHsKIAkJSFBTQl9OT1RJQ0UoIiVzIGNhbGxlZCB3aGlsZSBidXMgcmVzZXQgYWxyZWFkeSBpbiBwcm9ncmVzcyIsCi0JCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICBfX2Z1bmNfXyk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMzczLDYgKzM3Myw4IEBACiAJCQlpZiAoc2lkLT5wb3J0MiA9PSBTRUxGSURfUE9SVF9DSElMRCkgY2xkY250W25dKys7CiAKIAkJCXNwZWVkY2FwW25dID0gc2lkLT5zcGVlZDsKKwkJCWlmIChzcGVlZGNhcFtuXSA+IGhvc3QtPmNzci5sbmtfc3BkKQorCQkJCXNwZWVkY2FwW25dID0gaG9zdC0+Y3NyLmxua19zcGQ7CiAJCQluLS07CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCmluZGV4IDUxMWU0MzIuLjI5ZDgzM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCkBAIC0xOCw4ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSAiY3NyLmgiCiAjaW5jbHVkZSAiaGlnaGxldmVsLmgiCkBAIC03MDEsNyArNzAxLDExIEBACiAJCXJldHVybiAwOwogCiAJZHJpdmVyID0gY29udGFpbmVyX29mKGRydiwgc3RydWN0IGhwc2JfcHJvdG9jb2xfZHJpdmVyLCBkcml2ZXIpOwotCWZvciAoaWQgPSBkcml2ZXItPmlkX3RhYmxlOyBpZC0+bWF0Y2hfZmxhZ3MgIT0gMDsgaWQrKykgeworCWlkID0gZHJpdmVyLT5pZF90YWJsZTsKKwlpZiAoIWlkKQorCQlyZXR1cm4gMDsKKworCWZvciAoOyBpZC0+bWF0Y2hfZmxhZ3MgIT0gMDsgaWQrKykgewogCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIElFRUUxMzk0X01BVENIX1ZFTkRPUl9JRCkgJiYKIAkJICAgIGlkLT52ZW5kb3JfaWQgIT0gdWQtPnZlbmRvcl9pZCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCmluZGV4IDk2OWRlMmEuLjA2OTA0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogLyogTW9kdWxlIFBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgcGh5c19kbWEgPSAxOwogbW9kdWxlX3BhcmFtKHBoeXNfZG1hLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhwaHlzX2RtYSwgIkVuYWJsZSBwaHlzaWNhbCBkbWEgKGRlZmF1bHQgPSAxKS4iKTsKK01PRFVMRV9QQVJNX0RFU0MocGh5c19kbWEsICJFbmFibGUgcGh5c2ljYWwgRE1BIChkZWZhdWx0ID0gMSkuIik7CiAKIHN0YXRpYyB2b2lkIGRtYV90cm1fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgZG1hX3RybV9yZXNldChzdHJ1Y3QgZG1hX3RybV9jdHggKmQpOwpAQCAtNzA4LDcgKzcwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBkbyBzb21ldGhpbmcgYWJvdXQgaXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlQoS0VSTl9FUlIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogcGFja2V0IGRhdGEgYWRkcjogJXAgc2l6ZSAlWmQgYnl0ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MgcGFnZSBib3VuZGFyeSIsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgICAiY3Jvc3MgcGFnZSBib3VuZGFyeSIsIF9fZnVuY19fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmRhdGEsIHBhY2tldC0+ZGF0YV9zaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICNlbmRpZgpAQCAtMjA4OSwxMCArMjA4OSw4IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZC0+bG9jaywgZmxhZ3MpOwogCi0JbGlzdF9zcGxpY2UoJmQtPmZpZm9fbGlzdCwgJnBhY2tldF9saXN0KTsKLQlsaXN0X3NwbGljZSgmZC0+cGVuZGluZ19saXN0LCAmcGFja2V0X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkLT5maWZvX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkLT5wZW5kaW5nX2xpc3QpOworCWxpc3Rfc3BsaWNlX2luaXQoJmQtPmZpZm9fbGlzdCwgJnBhY2tldF9saXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZkLT5wZW5kaW5nX2xpc3QsICZwYWNrZXRfbGlzdCk7CiAKIAlkLT5icmFuY2hBZGRyUHRyID0gTlVMTDsKIAlkLT5zZW50X2luZCA9IGQtPnByZ19pbmQ7CkBAIC0yNzg3LDcgKzI3ODUsNyBAQAogCWQtPmJ1Zl9idXMgPSBremFsbG9jKGQtPm51bV9kZXNjICogc2l6ZW9mKCpkLT5idWZfYnVzKSwgR0ZQX0FUT01JQyk7CiAKIAlpZiAoZC0+YnVmX2NwdSA9PSBOVUxMIHx8IGQtPmJ1Zl9idXMgPT0gTlVMTCkgewotCQlQUklOVChLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyIik7CisJCVBSSU5UKEtFUk5fRVJSLCAiRmFpbGVkIHRvIGFsbG9jYXRlICVzIiwgIkRNQSBidWZmZXIiKTsKIAkJZnJlZV9kbWFfcmN2X2N0eChkKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMjc5Niw3ICsyNzk0LDcgQEAKIAlkLT5wcmdfYnVzID0ga3phbGxvYyhkLT5udW1fZGVzYyAqIHNpemVvZigqZC0+cHJnX2J1cyksIEdGUF9BVE9NSUMpOwogCiAJaWYgKGQtPnByZ19jcHUgPT0gTlVMTCB8fCBkLT5wcmdfYnVzID09IE5VTEwpIHsKLQkJUFJJTlQoS0VSTl9FUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIHByZyIpOworCQlQUklOVChLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlcyIsICJETUEgcHJnIik7CiAJCWZyZWVfZG1hX3Jjdl9jdHgoZCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTI4MDQsNyArMjgwMiw3IEBACiAJZC0+c3BiID0ga21hbGxvYyhkLT5zcGxpdF9idWZfc2l6ZSwgR0ZQX0FUT01JQyk7CiAKIAlpZiAoZC0+c3BiID09IE5VTEwpIHsKLQkJUFJJTlQoS0VSTl9FUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgc3BsaXQgYnVmZmVyIik7CisJCVBSSU5UKEtFUk5fRVJSLCAiRmFpbGVkIHRvIGFsbG9jYXRlICVzIiwgInNwbGl0IGJ1ZmZlciIpOwogCQlmcmVlX2RtYV9yY3ZfY3R4KGQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yODMwLDcgKzI4MjgsNyBAQAogCQkJbWVtc2V0KGQtPmJ1Zl9jcHVbaV0sIDAsIGQtPmJ1Zl9zaXplKTsKIAkJfSBlbHNlIHsKIAkJCVBSSU5UKEtFUk5fRVJSLAotCQkJICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyIik7CisJCQkgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlICVzIiwgIkRNQSBidWZmZXIiKTsKIAkJCWZyZWVfZG1hX3Jjdl9jdHgoZCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMjg0MSw3ICsyODM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChkLT5wcmdfY3B1W2ldLCAwLCBzaXplb2Yoc3RydWN0IGRtYV9jbWQpKTsKIAkJfSBlbHNlIHsKIAkJCVBSSU5UKEtFUk5fRVJSLAotCQkJICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgcHJnIik7CisJCQkgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlICVzIiwgIkRNQSBwcmciKTsKIAkJCWZyZWVfZG1hX3Jjdl9jdHgoZCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMjkwMiw3ICsyOTAwLDcgQEAKIAlkLT5wcmdfYnVzID0ga3phbGxvYyhkLT5udW1fZGVzYyAqIHNpemVvZigqZC0+cHJnX2J1cyksIEdGUF9LRVJORUwpOwogCiAJaWYgKGQtPnByZ19jcHUgPT0gTlVMTCB8fCBkLT5wcmdfYnVzID09IE5VTEwpIHsKLQkJUFJJTlQoS0VSTl9FUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgYXQgZG1hIHByZyIpOworCQlQUklOVChLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlcyIsICJBVCBETUEgcHJnIik7CiAJCWZyZWVfZG1hX3RybV9jdHgoZCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTI5MjUsNyArMjkyMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoZC0+cHJnX2NwdVtpXSwgMCwgc2l6ZW9mKHN0cnVjdCBhdF9kbWFfcHJnKSk7CiAJCX0gZWxzZSB7CiAJCQlQUklOVChLRVJOX0VSUiwKLQkJCSAgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgYXQgZG1hIHByZyIpOworCQkJICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSAlcyIsICJBVCBETUEgcHJnIik7CiAJCQlmcmVlX2RtYV90cm1fY3R4KGQpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTI5ODYsMjIgKzI5ODQsOSBAQAogICogUENJIERyaXZlciBJbnRlcmZhY2UgZnVuY3Rpb25zICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgRkFJTChlcnIsIGZtdCwgYXJncy4uLikJCQlcCi1kbyB7CQkJCQkJXAotCVBSSU5UX0coS0VSTl9FUlIsIGZtdCAsICMjIGFyZ3MpOwlcCi0gICAgICAgIG9oY2kxMzk0X3BjaV9yZW1vdmUoZGV2KTsgICAgICAgICAgICAgICBcCi0JcmV0dXJuIGVycjsJCQkJXAotfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBfX2RldmluaXQgb2hjaTEzOTRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCi17Ci0Jc3RydWN0IGhwc2JfaG9zdCAqaG9zdDsKLQlzdHJ1Y3QgdGlfb2hjaSAqb2hjaTsJLyogc2hvcnRjdXQgdG8gY3VycmVudGx5IGhhbmRsZWQgZGV2aWNlICovCi0JcmVzb3VyY2Vfc2l6ZV90IG9oY2lfYmFzZTsKLQogI2lmZGVmIENPTkZJR19QUENfUE1BQwotCS8qIE5lY2Vzc2FyeSBvbiBzb21lIG1hY2hpbmVzIGlmIG9oY2kxMzk0IHdhcyBsb2FkZWQvIHVubG9hZGVkIGJlZm9yZSAqLworc3RhdGljIHZvaWQgb2hjaTEzOTRfcG1hY19vbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQorewogCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCkBAIC0zMDEwLDE1ICsyOTk1LDQ1IEBACiAJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0VOQUJMRSwgb2ZuLCAwLCAxKTsKIAkJfQogCX0KK30KKworc3RhdGljIHZvaWQgb2hjaTEzOTRfcG1hY19vZmYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpvZm4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKworCQlpZiAob2ZuKSB7CisJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0VOQUJMRSwgb2ZuLCAwLCAwKTsKKwkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSXzEzOTRfQ0FCTEVfUE9XRVIsIG9mbiwgMCwgMCk7CisJCX0KKwl9Cit9CisjZWxzZQorI2RlZmluZSBvaGNpMTM5NF9wbWFjX29uKGRldikKKyNkZWZpbmUgb2hjaTEzOTRfcG1hY19vZmYoZGV2KQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCi0gICAgICAgIGlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKQotCQlGQUlMKC1FTlhJTywgIkZhaWxlZCB0byBlbmFibGUgT0hDSSBoYXJkd2FyZSIpOworc3RhdGljIGludCBfX2RldmluaXQgb2hjaTEzOTRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IGhwc2JfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgdGlfb2hjaSAqb2hjaTsJLyogc2hvcnRjdXQgdG8gY3VycmVudGx5IGhhbmRsZWQgZGV2aWNlICovCisJcmVzb3VyY2Vfc2l6ZV90IG9oY2lfYmFzZTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCW9oY2kxMzk0X3BtYWNfb24oZGV2KTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgeworCQlQUklOVF9HKEtFUk5fRVJSLCAiRmFpbGVkIHRvIGVuYWJsZSBPSENJIGhhcmR3YXJlIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnI7CisJfQogICAgICAgICBwY2lfc2V0X21hc3RlcihkZXYpOwogCiAJaG9zdCA9IGhwc2JfYWxsb2NfaG9zdCgmb2hjaTEzOTRfZHJpdmVyLCBzaXplb2Yoc3RydWN0IHRpX29oY2kpLCAmZGV2LT5kZXYpOwotCWlmICghaG9zdCkgRkFJTCgtRU5PTUVNLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGhvc3Qgc3RydWN0dXJlIik7Ci0KKwlpZiAoIWhvc3QpIHsKKwkJUFJJTlRfRyhLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlcyIsICJob3N0IHN0cnVjdHVyZSIpOworCQlnb3RvIGVycjsKKwl9CiAJb2hjaSA9IGhvc3QtPmhvc3RkYXRhOwogCW9oY2ktPmRldiA9IGRldjsKIAlvaGNpLT5ob3N0ID0gaG9zdDsKQEAgLTMwNjcsMTUgKzMwODIsMjAgQEAKIAkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ob2hjaV9iYXNlLCBPSENJMTM5NF9SRUdJU1RFUl9TSVpFLAotCQkJCU9IQ0kxMzk0X0RSSVZFUl9OQU1FKSkKLQkJRkFJTCgtRU5PTUVNLCAiTU1JTyByZXNvdXJjZSAoMHglbGx4IC0gMHglbGx4KSB1bmF2YWlsYWJsZSIsCisJCQkJT0hDSTEzOTRfRFJJVkVSX05BTUUpKSB7CisJCVBSSU5UX0coS0VSTl9FUlIsICJNTUlPIHJlc291cmNlICgweCVsbHggLSAweCVsbHgpIHVuYXZhaWxhYmxlIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2hjaV9iYXNlLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvaGNpX2Jhc2UgKyBPSENJMTM5NF9SRUdJU1RFUl9TSVpFKTsKKwkJZ290byBlcnI7CisJfQogCW9oY2ktPmluaXRfc3RhdGUgPSBPSENJX0lOSVRfSEFWRV9NRU1fUkVHSU9OOwogCiAJb2hjaS0+cmVnaXN0ZXJzID0gaW9yZW1hcChvaGNpX2Jhc2UsIE9IQ0kxMzk0X1JFR0lTVEVSX1NJWkUpOwotCWlmIChvaGNpLT5yZWdpc3RlcnMgPT0gTlVMTCkKLQkJRkFJTCgtRU5YSU8sICJGYWlsZWQgdG8gcmVtYXAgcmVnaXN0ZXJzIC0gY2FyZCBub3QgYWNjZXNzaWJsZSIpOworCWlmIChvaGNpLT5yZWdpc3RlcnMgPT0gTlVMTCkgeworCQlQUklOVF9HKEtFUk5fRVJSLCAiRmFpbGVkIHRvIHJlbWFwIHJlZ2lzdGVycyIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyOworCX0KIAlvaGNpLT5pbml0X3N0YXRlID0gT0hDSV9JTklUX0hBVkVfSU9NQVBQSU5HOwogCURCR01TRygiUmVtYXBwZWQgbWVtb3J5IHNwYWNlcyByZWcgMHglcCIsIG9oY2ktPnJlZ2lzdGVycyk7CiAKQEAgLTMwODMsMTYgKzMxMDMsMjAgQEAKIAlvaGNpLT5jc3JfY29uZmlnX3JvbV9jcHUgPQogCQlwY2lfYWxsb2NfY29uc2lzdGVudChvaGNpLT5kZXYsIE9IQ0lfQ09ORklHX1JPTV9MRU4sCiAJCQkJICAgICAmb2hjaS0+Y3NyX2NvbmZpZ19yb21fYnVzKTsKLQlpZiAob2hjaS0+Y3NyX2NvbmZpZ19yb21fY3B1ID09IE5VTEwpCi0JCUZBSUwoLUVOT01FTSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgY29uZmlnIHJvbSIpOworCWlmIChvaGNpLT5jc3JfY29uZmlnX3JvbV9jcHUgPT0gTlVMTCkgeworCQlQUklOVF9HKEtFUk5fRVJSLCAiRmFpbGVkIHRvIGFsbG9jYXRlICVzIiwgImJ1ZmZlciBjb25maWcgcm9tIik7CisJCWdvdG8gZXJyOworCX0KIAlvaGNpLT5pbml0X3N0YXRlID0gT0hDSV9JTklUX0hBVkVfQ09ORklHX1JPTV9CVUZGRVI7CiAKIAkvKiBzZWxmLWlkIGRtYSBidWZmZXIgYWxsb2NhdGlvbiAqLwogCW9oY2ktPnNlbGZpZF9idWZfY3B1ID0KIAkJcGNpX2FsbG9jX2NvbnNpc3RlbnQob2hjaS0+ZGV2LCBPSENJMTM5NF9TSV9ETUFfQlVGX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgJm9oY2ktPnNlbGZpZF9idWZfYnVzKTsKLQlpZiAob2hjaS0+c2VsZmlkX2J1Zl9jcHUgPT0gTlVMTCkKLQkJRkFJTCgtRU5PTUVNLCAiRmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXIgZm9yIHNlbGYtaWQgcGFja2V0cyIpOworCWlmIChvaGNpLT5zZWxmaWRfYnVmX2NwdSA9PSBOVUxMKSB7CisJCVBSSU5UX0coS0VSTl9FUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgJXMiLCAic2VsZi1JRCBidWZmZXIiKTsKKwkJZ290byBlcnI7CisJfQogCW9oY2ktPmluaXRfc3RhdGUgPSBPSENJX0lOSVRfSEFWRV9TRUxGSURfQlVGRkVSOwogCiAJaWYgKCh1bnNpZ25lZCBsb25nKW9oY2ktPnNlbGZpZF9idWZfY3B1ICYgMHgxZmZmKQpAQCAtMzEwOCwyOCArMzEzMiwzMiBAQAogCWlmIChhbGxvY19kbWFfcmN2X2N0eChvaGNpLCAmb2hjaS0+YXJfcmVxX2NvbnRleHQsCiAJCQkgICAgICBETUFfQ1RYX0FTWU5DX1JFUSwgMCwgQVJfUkVRX05VTV9ERVNDLAogCQkJICAgICAgQVJfUkVRX0JVRl9TSVpFLCBBUl9SRVFfU1BMSVRfQlVGX1NJWkUsCi0JCQkgICAgICBPSENJMTM5NF9Bc1JlcVJjdkNvbnRleHRCYXNlKSA8IDApCi0JCUZBSUwoLUVOT01FTSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBBUiBSZXEgY29udGV4dCIpOwotCisJCQkgICAgICBPSENJMTM5NF9Bc1JlcVJjdkNvbnRleHRCYXNlKSA8IDApIHsKKwkJUFJJTlRfRyhLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlcyIsICJBUiBSZXEgY29udGV4dCIpOworCQlnb3RvIGVycjsKKwl9CiAJLyogQVIgRE1BIHJlc3BvbnNlIGNvbnRleHQgYWxsb2NhdGlvbiAqLwogCWlmIChhbGxvY19kbWFfcmN2X2N0eChvaGNpLCAmb2hjaS0+YXJfcmVzcF9jb250ZXh0LAogCQkJICAgICAgRE1BX0NUWF9BU1lOQ19SRVNQLCAwLCBBUl9SRVNQX05VTV9ERVNDLAogCQkJICAgICAgQVJfUkVTUF9CVUZfU0laRSwgQVJfUkVTUF9TUExJVF9CVUZfU0laRSwKLQkJCSAgICAgIE9IQ0kxMzk0X0FzUnNwUmN2Q29udGV4dEJhc2UpIDwgMCkKLQkJRkFJTCgtRU5PTUVNLCAiRmFpbGVkIHRvIGFsbG9jYXRlIEFSIFJlc3AgY29udGV4dCIpOwotCisJCQkgICAgICBPSENJMTM5NF9Bc1JzcFJjdkNvbnRleHRCYXNlKSA8IDApIHsKKwkJUFJJTlRfRyhLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlcyIsICJBUiBSZXNwIGNvbnRleHQiKTsKKwkJZ290byBlcnI7CisJfQogCS8qIEFUIERNQSByZXF1ZXN0IGNvbnRleHQgKi8KIAlpZiAoYWxsb2NfZG1hX3RybV9jdHgob2hjaSwgJm9oY2ktPmF0X3JlcV9jb250ZXh0LAogCQkJICAgICAgRE1BX0NUWF9BU1lOQ19SRVEsIDAsIEFUX1JFUV9OVU1fREVTQywKLQkJCSAgICAgIE9IQ0kxMzk0X0FzUmVxVHJDb250ZXh0QmFzZSkgPCAwKQotCQlGQUlMKC1FTk9NRU0sICJGYWlsZWQgdG8gYWxsb2NhdGUgQVQgUmVxIGNvbnRleHQiKTsKLQorCQkJICAgICAgT0hDSTEzOTRfQXNSZXFUckNvbnRleHRCYXNlKSA8IDApIHsKKwkJUFJJTlRfRyhLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlcyIsICJBVCBSZXEgY29udGV4dCIpOworCQlnb3RvIGVycjsKKwl9CiAJLyogQVQgRE1BIHJlc3BvbnNlIGNvbnRleHQgKi8KIAlpZiAoYWxsb2NfZG1hX3RybV9jdHgob2hjaSwgJm9oY2ktPmF0X3Jlc3BfY29udGV4dCwKIAkJCSAgICAgIERNQV9DVFhfQVNZTkNfUkVTUCwgMSwgQVRfUkVTUF9OVU1fREVTQywKLQkJCSAgICAgIE9IQ0kxMzk0X0FzUnNwVHJDb250ZXh0QmFzZSkgPCAwKQotCQlGQUlMKC1FTk9NRU0sICJGYWlsZWQgdG8gYWxsb2NhdGUgQVQgUmVzcCBjb250ZXh0Iik7Ci0KKwkJCSAgICAgIE9IQ0kxMzk0X0FzUnNwVHJDb250ZXh0QmFzZSkgPCAwKSB7CisJCVBSSU5UX0coS0VSTl9FUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgJXMiLCAiQVQgUmVzcCBjb250ZXh0Iik7CisJCWdvdG8gZXJyOworCX0KIAkvKiBTdGFydCBvZmYgd2l0aCBhIHNvZnQgcmVzZXQsIHRvIGNsZWFyIGV2ZXJ5dGhpbmcgdG8gYSBzYW5lCiAJICogc3RhdGUuICovCiAJb2hjaV9zb2Z0X3Jlc2V0KG9oY2kpOwpAQCAtMzE3Miw5ICszMjAwLDEwIEBACiAJICogYnkgdGhhdCBwb2ludC4KIAkgKi8KIAlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIG9oY2lfaXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELAotCQkJIE9IQ0kxMzk0X0RSSVZFUl9OQU1FLCBvaGNpKSkKLQkJRkFJTCgtRU5PTUVNLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNoYXJlZCBpbnRlcnJ1cHQgJWQiLCBkZXYtPmlycSk7Ci0KKwkJCSBPSENJMTM5NF9EUklWRVJfTkFNRSwgb2hjaSkpIHsKKwkJUFJJTlRfRyhLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpbnRlcnJ1cHQgJWQiLCBkZXYtPmlycSk7CisJCWdvdG8gZXJyOworCX0KIAlvaGNpLT5pbml0X3N0YXRlID0gT0hDSV9JTklUX0hBVkVfSVJROwogCW9oY2lfaW5pdGlhbGl6ZShvaGNpKTsKIApAQCAtMzE5NCwyNSArMzIyMywyOCBAQAogCWhvc3QtPm1pZGRsZV9hZGRyX3NwYWNlID0gT0hDSTEzOTRfTUlERExFX0FERFJFU1NfU1BBQ0U7CiAKIAkvKiBUZWxsIHRoZSBoaWdobGV2ZWwgdGhpcyBob3N0IGlzIHJlYWR5ICovCi0JaWYgKGhwc2JfYWRkX2hvc3QoaG9zdCkpCi0JCUZBSUwoLUVOT01FTSwgIkZhaWxlZCB0byByZWdpc3RlciBob3N0IHdpdGggaGlnaGxldmVsIik7Ci0KKwlpZiAoaHBzYl9hZGRfaG9zdChob3N0KSkgeworCQlQUklOVF9HKEtFUk5fRVJSLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGhvc3Qgd2l0aCBoaWdobGV2ZWwiKTsKKwkJZ290byBlcnI7CisJfQogCW9oY2ktPmluaXRfc3RhdGUgPSBPSENJX0lOSVRfRE9ORTsKIAogCXJldHVybiAwOwotI3VuZGVmIEZBSUwKK2VycjoKKwlvaGNpMTM5NF9wY2lfcmVtb3ZlKGRldik7CisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgb2hjaTEzOTRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIG9oY2kxMzk0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgdGlfb2hjaSAqb2hjaTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCi0Jb2hjaSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlvaGNpID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJaWYgKCFvaGNpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCi0JZGV2ID0gZ2V0X2RldmljZSgmb2hjaS0+aG9zdC0+ZGV2aWNlKTsKKwlkZXZpY2UgPSBnZXRfZGV2aWNlKCZvaGNpLT5ob3N0LT5kZXZpY2UpOwogCiAJc3dpdGNoIChvaGNpLT5pbml0X3N0YXRlKSB7CiAJY2FzZSBPSENJX0lOSVRfRE9ORToKQEAgLTMyNDYsNyArMzI3OCw3IEBACiAJCS8qIFNvZnQgcmVzZXQgYmVmb3JlIHdlIHN0YXJ0IC0gdGhpcyBkaXNhYmxlcwogCQkgKiBpbnRlcnJ1cHRzIGFuZCBjbGVhcnMgbGlua0VuYWJsZSBhbmQgTFBTLiAqLwogCQlvaGNpX3NvZnRfcmVzZXQob2hjaSk7Ci0JCWZyZWVfaXJxKG9oY2ktPmRldi0+aXJxLCBvaGNpKTsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIG9oY2kpOwogCiAJY2FzZSBPSENJX0lOSVRfSEFWRV9UWFJYX0JVRkZFUlNfX01BWUJFOgogCQkvKiBUaGUgb2hjaV9zb2Z0X3Jlc2V0KCkgc3RvcHMgYWxsIERNQSBjb250ZXh0cywgc28gd2UKQEAgLTMyNTcsMTIgKzMyODksMTIgQEAKIAkJZnJlZV9kbWFfdHJtX2N0eCgmb2hjaS0+YXRfcmVzcF9jb250ZXh0KTsKIAogCWNhc2UgT0hDSV9JTklUX0hBVkVfU0VMRklEX0JVRkZFUjoKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChvaGNpLT5kZXYsIE9IQ0kxMzk0X1NJX0RNQV9CVUZfU0laRSwKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIE9IQ0kxMzk0X1NJX0RNQV9CVUZfU0laRSwKIAkJCQkgICAgb2hjaS0+c2VsZmlkX2J1Zl9jcHUsCiAJCQkJICAgIG9oY2ktPnNlbGZpZF9idWZfYnVzKTsKIAogCWNhc2UgT0hDSV9JTklUX0hBVkVfQ09ORklHX1JPTV9CVUZGRVI6Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQob2hjaS0+ZGV2LCBPSENJX0NPTkZJR19ST01fTEVOLAorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgT0hDSV9DT05GSUdfUk9NX0xFTiwKIAkJCQkgICAgb2hjaS0+Y3NyX2NvbmZpZ19yb21fY3B1LAogCQkJCSAgICBvaGNpLT5jc3JfY29uZmlnX3JvbV9idXMpOwogCkBAIC0zMjcwLDM1ICszMzAyLDI0IEBACiAJCWlvdW5tYXAob2hjaS0+cmVnaXN0ZXJzKTsKIAogCWNhc2UgT0hDSV9JTklUX0hBVkVfTUVNX1JFR0lPTjoKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChvaGNpLT5kZXYsIDApLAorCQlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksCiAJCQkJICAgT0hDSTEzOTRfUkVHSVNURVJfU0laRSk7CiAKLSNpZmRlZiBDT05GSUdfUFBDX1BNQUMKLQkvKiBPbiBVbmlOb3J0aCwgcG93ZXIgZG93biB0aGUgY2FibGUgYW5kIHR1cm4gb2ZmIHRoZSBjaGlwIGNsb2NrCi0JICogdG8gc2F2ZSBwb3dlciBvbiBsYXB0b3BzICovCi0JaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSogb2ZuID0gcGNpX2RldmljZV90b19PRl9ub2RlKG9oY2ktPmRldik7Ci0KLQkJaWYgKG9mbikgewotCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfMTM5NF9FTkFCTEUsIG9mbiwgMCwgMCk7Ci0JCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0NBQkxFX1BPV0VSLCBvZm4sIDAsIDApOwotCQl9Ci0JfQotI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwotCiAJY2FzZSBPSENJX0lOSVRfQUxMT0NfSE9TVDoKLQkJcGNpX3NldF9kcnZkYXRhKG9oY2ktPmRldiwgTlVMTCk7CisJCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCX0KIAotCWlmIChkZXYpCi0JCXB1dF9kZXZpY2UoZGV2KTsKKwlpZiAoZGV2aWNlKQorCQlwdXRfZGV2aWNlKGRldmljZSk7CitvdXQ6CisJb2hjaTEzOTRfcG1hY19vZmYoZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBvaGNpMTM5NF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBvaGNpMTM5NF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgdGlfb2hjaSAqb2hjaSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdGlfb2hjaSAqb2hjaSA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFvaGNpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyaWVkIHRvIHN1c3BlbmQgbm9uZXhpc3RpbmcgaG9zdFxuIiwKQEAgLTMzMjYsMzIgKzMzNDcsMjMgQEAKIAlvaGNpX2RldmN0bChvaGNpLT5ob3N0LCBSRVNFVF9CVVMsIExPTkdfUkVTRVRfTk9fRk9SQ0VfUk9PVCk7CiAJb2hjaV9zb2Z0X3Jlc2V0KG9oY2kpOwogCi0JZXJyID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJZXJyID0gcGNpX3NhdmVfc3RhdGUoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCVBSSU5UKEtFUk5fRVJSLCAicGNpX3NhdmVfc3RhdGUgZmFpbGVkIHdpdGggJWQiLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAJaWYgKGVycikKIAkJREJHTVNHKCJwY2lfc2V0X3Bvd2VyX3N0YXRlIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKLQotLyogUG93ZXJNYWMgc3VzcGVuZCBjb2RlIGNvbWVzIGxhc3QgKi8KLSNpZmRlZiBDT05GSUdfUFBDX1BNQUMKLQlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpvZm4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7Ci0KLQkJaWYgKG9mbikKLQkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSXzEzOTRfRU5BQkxFLCBvZm4sIDAsIDApOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KKwlvaGNpMTM5NF9wbWFjX29mZihkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaTEzOTRfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgb2hjaTEzOTRfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWludCBlcnI7Ci0Jc3RydWN0IHRpX29oY2kgKm9oY2kgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRpX29oY2kgKm9oY2kgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghb2hjaSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0cmllZCB0byByZXN1bWUgbm9uZXhpc3RpbmcgaG9zdFxuIiwKQEAgLTMzNjAsMTkgKzMzNzIsMTAgQEAKIAl9CiAJREJHTVNHKCJyZXN1bWUgY2FsbGVkIik7CiAKLS8qIFBvd2VyTWFjIHJlc3VtZSBjb2RlIGNvbWVzIGZpcnN0ICovCi0jaWZkZWYgQ09ORklHX1BQQ19QTUFDCi0JaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZuID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwotCi0JCWlmIChvZm4pCi0JCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0VOQUJMRSwgb2ZuLCAwLCAxKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCi0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJb2hjaTEzOTRfcG1hY19vbihkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCVBSSU5UKEtFUk5fRVJSLCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIHdpdGggJWQiLCBlcnIpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMgYi9kcml2ZXJzL2llZWUxMzk0L3BjaWx5bnguYwppbmRleCA4YWYwMWFiLi43YWVlMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3BjaWx5bnguYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3BjaWx5bnguYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgIGlmIChhZGRyID4gMTUpIHsKICAgICAgICAgICAgICAgICBQUklOVChLRVJOX0VSUiwgbHlueC0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBQSFkgcmVnaXN0ZXIgYWRkcmVzcyAlZCBvdXQgb2YgcmFuZ2UiLAotCQkgICAgICBfX0ZVTkNUSU9OX18sIGFkZHIpOworCQkgICAgICBfX2Z1bmNfXywgYWRkcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKQEAgLTIzOCw3ICsyMzgsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGkgPiAxMDAwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlQoS0VSTl9FUlIsIGx5bngtPmlkLCAiJXM6IHJ1bmF3YXkgbG9vcCwgYWJvcnRpbmciLAotCQkJICAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgIF9fZnVuY19fKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjYxLDEzICsyNjEsMTMgQEAKIAogICAgICAgICBpZiAoYWRkciA+IDE1KSB7CiAgICAgICAgICAgICAgICAgUFJJTlQoS0VSTl9FUlIsIGx5bngtPmlkLAotICAgICAgICAgICAgICAgICAgICAgICIlczogUEhZIHJlZ2lzdGVyIGFkZHJlc3MgJWQgb3V0IG9mIHJhbmdlIiwgX19GVU5DVElPTl9fLCBhZGRyKTsKKwkJICAgICAgIiVzOiBQSFkgcmVnaXN0ZXIgYWRkcmVzcyAlZCBvdXQgb2YgcmFuZ2UiLCBfX2Z1bmNfXywgYWRkcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHZhbCA+IDB4ZmYpIHsKICAgICAgICAgICAgICAgICBQUklOVChLRVJOX0VSUiwgbHlueC0+aWQsCi0gICAgICAgICAgICAgICAgICAgICAgIiVzOiBQSFkgcmVnaXN0ZXIgdmFsdWUgJWQgb3V0IG9mIHJhbmdlIiwgX19GVU5DVElPTl9fLCB2YWwpOworCQkgICAgICAiJXM6IFBIWSByZWdpc3RlciB2YWx1ZSAlZCBvdXQgb2YgcmFuZ2UiLCBfX2Z1bmNfXywgdmFsKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIApAQCAtMjg3LDcgKzI4Nyw3IEBACiAKICAgICAgICAgaWYgKHBhZ2UgPiA3KSB7CiAgICAgICAgICAgICAgICAgUFJJTlQoS0VSTl9FUlIsIGx5bngtPmlkLAotICAgICAgICAgICAgICAgICAgICAgICIlczogUEhZIHBhZ2UgJWQgb3V0IG9mIHJhbmdlIiwgX19GVU5DVElPTl9fLCBwYWdlKTsKKwkJICAgICAgIiVzOiBQSFkgcGFnZSAlZCBvdXQgb2YgcmFuZ2UiLCBfX2Z1bmNfXywgcGFnZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKQEAgLTMwOSw3ICszMDksNyBAQAogCiAgICAgICAgIGlmIChwb3J0ID4gMTUpIHsKICAgICAgICAgICAgICAgICBQUklOVChLRVJOX0VSUiwgbHlueC0+aWQsCi0gICAgICAgICAgICAgICAgICAgICAgIiVzOiBQSFkgcG9ydCAlZCBvdXQgb2YgcmFuZ2UiLCBfX0ZVTkNUSU9OX18sIHBvcnQpOworCQkgICAgICAiJXM6IFBIWSBwb3J0ICVkIG91dCBvZiByYW5nZSIsIF9fZnVuY19fLCBwb3J0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIApAQCAtNzM4LDggKzczOCw3IEBACiAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmx5bngtPmFzeW5jLnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICAgICAgICAgIHJlZ193cml0ZShseW54LCBETUFfQ0hBTl9DVFJMKENIQU5ORUxfQVNZTkNfU0VORCksIDApOwotCQlsaXN0X3NwbGljZSgmbHlueC0+YXN5bmMucXVldWUsICZwYWNrZXRfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZseW54LT5hc3luYy5xdWV1ZSk7CisJCWxpc3Rfc3BsaWNlX2luaXQoJmx5bngtPmFzeW5jLnF1ZXVlLCAmcGFja2V0X2xpc3QpOwogCiAgICAgICAgICAgICAgICAgaWYgKGxpc3RfZW1wdHkoJmx5bngtPmFzeW5jLnBjbF9xdWV1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmx5bngtPmFzeW5jLnF1ZXVlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggMzdlN2UxMC4uMDRlOTZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTI5NTksNyArMjk1OSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIgcmF3MTM5NF9kcml2ZXIgPSB7CiAJLm5hbWUgPSAicmF3MTM5NCIsCi0JLmlkX3RhYmxlID0gcmF3MTM5NF9pZF90YWJsZSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMDA0LDcgKzMwMDMsNiBAQAogCiAJY2Rldl9pbml0KCZyYXcxMzk0X2NkZXYsICZyYXcxMzk0X2ZvcHMpOwogCXJhdzEzOTRfY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwotCWtvYmplY3Rfc2V0X25hbWUoJnJhdzEzOTRfY2Rldi5rb2JqLCBSQVcxMzk0X0RFVklDRV9OQU1FKTsKIAlyZXQgPSBjZGV2X2FkZCgmcmF3MTM5NF9jZGV2LCBJRUVFMTM5NF9SQVcxMzk0X0RFViwgMSk7CiAJaWYgKHJldCkgewogCQlIUFNCX0VSUigicmF3MTM5NCBmYWlsZWQgdG8gcmVnaXN0ZXIgbWlub3IgZGV2aWNlIGJsb2NrIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCmluZGV4IDI4ZTE1NWEuLjE2YjlkMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCkBAIC0xODMsNiArMTgzLDkgQEAKICAqICAgQXZvaWRzIGFjY2VzcyBiZXlvbmQgYWN0dWFsIGRpc2sgbGltaXRzIG9uIGRldmljZXMgd2l0aCBhbiBvZmYtYnktb25lIGJ1Zy4KICAqICAgRG9uJ3QgdXNlIHRoaXMgd2l0aCBkZXZpY2VzIHdoaWNoIGRvbid0IGhhdmUgdGhpcyBidWcuCiAgKgorICogLSBkZWxheSBpbnF1aXJ5CisgKiAgIFdhaXQgZXh0cmEgU0JQMl9JTlFVSVJZX0RFTEFZIHNlY29uZHMgYWZ0ZXIgbG9naW4gYmVmb3JlIFNDU0kgaW5xdWlyeS4KKyAqCiAgKiAtIG92ZXJyaWRlIGludGVybmFsIGJsYWNrbGlzdAogICogICBJbnN0ZWFkIG9mIGFkZGluZyB0byB0aGUgYnVpbHQtaW4gYmxhY2tsaXN0LCB1c2Ugb25seSB0aGUgd29ya2Fyb3VuZHMKICAqICAgc3BlY2lmaWVkIGluIHRoZSBtb2R1bGUgbG9hZCBwYXJhbWV0ZXIuCkBAIC0xOTUsNiArMTk4LDcgQEAKIAkiLCAzNiBieXRlIGlucXVpcnkgPSAiICAgIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2KQogCSIsIHNraXAgbW9kZSBwYWdlIDggPSAiICAgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOCkKIAkiLCBmaXggY2FwYWNpdHkgPSAiICAgICAgIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFkpCisJIiwgZGVsYXkgaW5xdWlyeSA9ICIgICAgICBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfREVMQVlfSU5RVUlSWSkKIAkiLCBvdmVycmlkZSBpbnRlcm5hbCBibGFja2xpc3QgPSAiIF9fc3RyaW5naWZ5KFNCUDJfV09SS0FST1VORF9PVkVSUklERSkKIAkiLCBvciBhIGNvbWJpbmF0aW9uKSIpOwogCkBAIC0zNTcsNiArMzYxLDExIEBACiAJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNiB8CiAJCQkJCSAgU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOCwKIAl9LAorCS8qIERWaUNPIE1vbW9iYXkgRlgtM0Egd2l0aCBUU0I0MkFBOUEgYnJpZGdlICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI4MDAsCisJCS5tb2RlbF9pZAkJPSAweDAwMDAwMCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9ERUxBWV9JTlFVSVJZLAorCX0sCiAJLyogSW5pdGlvIGJyaWRnZXMsIGFjdHVhbGx5IG9ubHkgbmVlZGVkIGZvciBzb21lIG9sZGVyIG9uZXMgKi8gewogCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDAwMDIwMCwKIAkJLm1vZGVsX2lkCQk9IFNCUDJfUk9NX1ZBTFVFX1dJTERDQVJELApAQCAtMzY3LDYgKzM3NiwxMSBAQAogCQkubW9kZWxfaWQJCT0gU0JQMl9ST01fVkFMVUVfV0lMRENBUkQsCiAJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMsCiAJfSwKKwkvKiBEYXRhZmFiIE1EMi1GVzIgd2l0aCBTeW1iaW9zL0xTSUxvZ2ljIFNZTTEzRlc1MDAgYnJpZGdlICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwMDI2MDAsCisJCS5tb2RlbF9pZAkJPSBTQlAyX1JPTV9WQUxVRV9XSUxEQ0FSRCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUywKKwl9LAogCS8qIGlQb2QgNHRoIGdlbmVyYXRpb24gKi8gewogCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDBhMjcwMCwKIAkJLm1vZGVsX2lkCQk9IDB4MDAwMDIxLApAQCAtNjAxLDcgKzYxNSw3IEBACiAJCWNtZC0+Q3VycmVudF9TQ3BudCA9IEN1cnJlbnRfU0NwbnQ7CiAJCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmx1LT5jbWRfb3JiX2ludXNlKTsKIAl9IGVsc2UKLQkJU0JQMl9FUlIoIiVzOiBubyBvcmJzIGF2YWlsYWJsZSIsIF9fRlVOQ1RJT05fXyk7CisJCVNCUDJfRVJSKCIlczogbm8gb3JicyBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHUtPmNtZF9vcmJfbG9jaywgZmxhZ3MpOwogCXJldHVybiBjbWQ7CiB9CkBAIC05MTQsNiArOTI4LDkgQEAKIAlzYnAyX2FnZW50X3Jlc2V0KGx1LCAxKTsKIAlzYnAyX21heF9zcGVlZF9hbmRfc2l6ZShsdSk7CiAKKwlpZiAobHUtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX0RFTEFZX0lOUVVJUlkpCisJCXNzbGVlcChTQlAyX0lOUVVJUllfREVMQVkpOworCiAJZXJyb3IgPSBzY3NpX2FkZF9kZXZpY2UobHUtPnNob3N0LCAwLCBsdS0+dWQtPmlkLCAwKTsKIAlpZiAoZXJyb3IpIHsKIAkJU0JQMl9FUlIoInNjc2lfYWRkX2RldmljZSBmYWlsZWQiKTsKQEAgLTEyNzcsNyArMTI5NCw3IEBACiAKIAlkYXRhID0gY3B1X3RvX2JlMzIoU0JQMl9CVVNZX1RJTUVPVVRfVkFMVUUpOwogCWlmIChocHNiX25vZGVfd3JpdGUobHUtPm5lLCBTQlAyX0JVU1lfVElNRU9VVF9BRERSRVNTLCAmZGF0YSwgNCkpCi0JCVNCUDJfRVJSKCIlcyBlcnJvciIsIF9fRlVOQ1RJT05fXyk7CisJCVNCUDJfRVJSKCIlcyBlcnJvciIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk2MiwxNCArMTk3OSwxNCBAQAogewogCXN0cnVjdCBzYnAyX2x1ICpsdSA9IChzdHJ1Y3Qgc2JwMl9sdSAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdOwogCisJaWYgKHNkZXYtPmx1biAhPSAwIHx8IHNkZXYtPmlkICE9IGx1LT51ZC0+aWQgfHwgc2Rldi0+Y2hhbm5lbCAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWx1LT5zZGV2ID0gc2RldjsKIAlzZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKIAotCS8qCi0JICogVXBkYXRlIHRoZSBkbWEgYWxpZ25tZW50IChtaW5pbXVtIGFsaWdubWVudCByZXF1aXJlbWVudHMgZm9yCi0JICogc3RhcnQgYW5kIGVuZCBvZiBETUEgdHJhbnNmZXJzKSB0byBiZSBhIHNlY3RvcgotCSAqLwotCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTEpOworCS8qIFNCUC0yIHJlcXVpcmVzIHF1YWRsZXQgYWxpZ25tZW50IG9mIHRoZSBkYXRhIGJ1ZmZlcnMuICovCisJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsIDQgLSAxKTsKIAogCWlmIChsdS0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNikKIAkJc2Rldi0+aW5xdWlyeV9sZW4gPSAzNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKaW5kZXggZDJlY2IwZC4uODBkOGUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKQEAgLTM0Myw2ICszNDMsOCBAQAogI2RlZmluZSBTQlAyX1dPUktBUk9VTkRfSU5RVUlSWV8zNgkweDIKICNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOAkweDQKICNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWQkweDgKKyNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX0RFTEFZX0lOUVVJUlkJMHgxMAorI2RlZmluZSBTQlAyX0lOUVVJUllfREVMQVkJCTEyCiAjZGVmaW5lIFNCUDJfV09SS0FST1VORF9PVkVSUklERQkweDEwMAogCiAjZW5kaWYgLyogU0JQMl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCBiZDI4YWRmLi5lMDMwMjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTEzMTUsOCArMTMxNSw3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKGllZWUxMzk0LCB2aWRlbzEzOTRfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IGhwc2JfcHJvdG9jb2xfZHJpdmVyIHZpZGVvMTM5NF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gVklERU8xMzk0X0RSSVZFUl9OQU1FLAotCS5pZF90YWJsZQk9IHZpZGVvMTM5NF9pZF90YWJsZSwKKwkubmFtZSA9IFZJREVPMTM5NF9EUklWRVJfTkFNRSwKIH07CiAKIApAQCAtMTUwNCw3ICsxNTAzLDYgQEAKIAogCWNkZXZfaW5pdCgmdmlkZW8xMzk0X2NkZXYsICZ2aWRlbzEzOTRfZm9wcyk7CiAJdmlkZW8xMzk0X2NkZXYub3duZXIgPSBUSElTX01PRFVMRTsKLQlrb2JqZWN0X3NldF9uYW1lKCZ2aWRlbzEzOTRfY2Rldi5rb2JqLCBWSURFTzEzOTRfRFJJVkVSX05BTUUpOwogCXJldCA9IGNkZXZfYWRkKCZ2aWRlbzEzOTRfY2RldiwgSUVFRTEzOTRfVklERU8xMzk0X0RFViwgMTYpOwogCWlmIChyZXQpIHsKIAkJUFJJTlRfRyhLRVJOX0VSUiwgInZpZGVvMTM5NDogdW5hYmxlIHRvIGdldCBtaW5vciBkZXZpY2UgYmxvY2siKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwppbmRleCBhNThhZDhhLi43ODFlYTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlzdHJ1Y3QgZmxvd2kgZmw7Ci0JdTMyIGRzdF9pcCA9IGRzdF9pbi0+c2luX2FkZHIuc19hZGRyOworCV9fYmUzMiBkc3RfaXAgPSBkc3RfaW4tPnNpbl9hZGRyLnNfYWRkcjsKIAogCW1lbXNldCgmZmwsIDAsIHNpemVvZiBmbCk7CiAJZmwubmxfdS5pcDRfdS5kYWRkciA9IGRzdF9pcDsKQEAgLTE2OSw4ICsxNjksOCBAQAogCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqZHN0X2luLAogCQkJICAgICAgIHN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyKQogewotCXUzMiBzcmNfaXAgPSBzcmNfaW4tPnNpbl9hZGRyLnNfYWRkcjsKLQl1MzIgZHN0X2lwID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CisJX19iZTMyIHNyY19pcCA9IHNyY19pbi0+c2luX2FkZHIuc19hZGRyOworCV9fYmUzMiBkc3RfaXAgPSBkc3RfaW4tPnNpbl9hZGRyLnNfYWRkcjsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAkJCSAgICAgIHN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdTMyIHNyY19pcCA9IHNyY19pbi0+c2luX2FkZHIuc19hZGRyOworCV9fYmUzMiBzcmNfaXAgPSBzcmNfaW4tPnNpbl9hZGRyLnNfYWRkcjsKIAlfX2JlMzIgZHN0X2lwID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKaW5kZXggYjEwYWRlOS4uYTQ3ZmU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY20ubG9jaywgZmxhZ3MpOwogCX0gd2hpbGUoIChyZXQgPT0gLUVBR0FJTikgJiYgaWRyX3ByZV9nZXQoJmNtLmxvY2FsX2lkX3RhYmxlLCBHRlBfS0VSTkVMKSApOwogCi0JY21faWRfcHJpdi0+aWQubG9jYWxfaWQgPSAoX19mb3JjZSBfX2JlMzIpIChpZCBeIGNtLnJhbmRvbV9pZF9vcGVyYW5kKTsKKwljbV9pZF9wcml2LT5pZC5sb2NhbF9pZCA9IChfX2ZvcmNlIF9fYmUzMilpZCBeIGNtLnJhbmRvbV9pZF9vcGVyYW5kOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQ2Nyw2ICs0NjcsMzEgQEAKIAlyZXR1cm4gbWVtY21wKHNyYywgZHN0X2RhdGEtPmRhdGEsIElCX0NNX0NPTVBBUkVfU0laRSk7CiB9CiAKKy8qCisgKiBUcml2aWFsIGhlbHBlcnMgdG8gc3RyaXAgZW5kaWFuIGFubm90YXRpb24gYW5kIGNvbXBhcmU7IHRoZQorICogZW5kaWFubmVzcyBkb2Vzbid0IGFjdHVhbGx5IG1hdHRlciBzaW5jZSB3ZSBqdXN0IG5lZWQgYSBzdGFibGUKKyAqIG9yZGVyIGZvciB0aGUgUkIgdHJlZS4KKyAqLworc3RhdGljIGludCBiZTMyX2x0KF9fYmUzMiBhLCBfX2JlMzIgYikKK3sKKwlyZXR1cm4gKF9fZm9yY2UgdTMyKSBhIDwgKF9fZm9yY2UgdTMyKSBiOworfQorCitzdGF0aWMgaW50IGJlMzJfZ3QoX19iZTMyIGEsIF9fYmUzMiBiKQoreworCXJldHVybiAoX19mb3JjZSB1MzIpIGEgPiAoX19mb3JjZSB1MzIpIGI7Cit9CisKK3N0YXRpYyBpbnQgYmU2NF9sdChfX2JlNjQgYSwgX19iZTY0IGIpCit7CisJcmV0dXJuIChfX2ZvcmNlIHU2NCkgYSA8IChfX2ZvcmNlIHU2NCkgYjsKK30KKworc3RhdGljIGludCBiZTY0X2d0KF9fYmU2NCBhLCBfX2JlNjQgYikKK3sKKwlyZXR1cm4gKF9fZm9yY2UgdTY0KSBhID4gKF9fZm9yY2UgdTY0KSBiOworfQorCiBzdGF0aWMgc3RydWN0IGNtX2lkX3ByaXZhdGUgKiBjbV9pbnNlcnRfbGlzdGVuKHN0cnVjdCBjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2KQogewogCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZjbS5saXN0ZW5fc2VydmljZV90YWJsZS5yYl9ub2RlOwpAQCAtNDkyLDkgKzUxNyw5IEBACiAJCQlsaW5rID0gJigqbGluayktPnJiX2xlZnQ7CiAJCWVsc2UgaWYgKGNtX2lkX3ByaXYtPmlkLmRldmljZSA+IGN1cl9jbV9pZF9wcml2LT5pZC5kZXZpY2UpCiAJCQlsaW5rID0gJigqbGluayktPnJiX3JpZ2h0OwotCQllbHNlIGlmIChzZXJ2aWNlX2lkIDwgY3VyX2NtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQpCisJCWVsc2UgaWYgKGJlNjRfbHQoc2VydmljZV9pZCwgY3VyX2NtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQpKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwotCQllbHNlIGlmIChzZXJ2aWNlX2lkID4gY3VyX2NtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQpCisJCWVsc2UgaWYgKGJlNjRfZ3Qoc2VydmljZV9pZCwgY3VyX2NtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQpKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsKIAkJZWxzZSBpZiAoZGF0YV9jbXAgPCAwKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwpAQCAtNTI3LDkgKzU1Miw5IEBACiAJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAoZGV2aWNlID4gY21faWRfcHJpdi0+aWQuZGV2aWNlKQogCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OwotCQllbHNlIGlmIChzZXJ2aWNlX2lkIDwgY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCkKKwkJZWxzZSBpZiAoYmU2NF9sdChzZXJ2aWNlX2lkLCBjbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkKSkKIAkJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OwotCQllbHNlIGlmIChzZXJ2aWNlX2lkID4gY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCkKKwkJZWxzZSBpZiAoYmU2NF9ndChzZXJ2aWNlX2lkLCBjbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkKSkKIAkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKIAkJZWxzZSBpZiAoZGF0YV9jbXAgPCAwKQogCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CkBAIC01NTIsMTMgKzU3NywxMyBAQAogCQlwYXJlbnQgPSAqbGluazsKIAkJY3VyX3RpbWV3YWl0X2luZm8gPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjbV90aW1ld2FpdF9pbmZvLAogCQkJCQkgICAgIHJlbW90ZV9pZF9ub2RlKTsKLQkJaWYgKHJlbW90ZV9pZCA8IGN1cl90aW1ld2FpdF9pbmZvLT53b3JrLnJlbW90ZV9pZCkKKwkJaWYgKGJlMzJfbHQocmVtb3RlX2lkLCBjdXJfdGltZXdhaXRfaW5mby0+d29yay5yZW1vdGVfaWQpKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwotCQllbHNlIGlmIChyZW1vdGVfaWQgPiBjdXJfdGltZXdhaXRfaW5mby0+d29yay5yZW1vdGVfaWQpCisJCWVsc2UgaWYgKGJlMzJfZ3QocmVtb3RlX2lkLCBjdXJfdGltZXdhaXRfaW5mby0+d29yay5yZW1vdGVfaWQpKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsKLQkJZWxzZSBpZiAocmVtb3RlX2NhX2d1aWQgPCBjdXJfdGltZXdhaXRfaW5mby0+cmVtb3RlX2NhX2d1aWQpCisJCWVsc2UgaWYgKGJlNjRfbHQocmVtb3RlX2NhX2d1aWQsIGN1cl90aW1ld2FpdF9pbmZvLT5yZW1vdGVfY2FfZ3VpZCkpCiAJCQlsaW5rID0gJigqbGluayktPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKHJlbW90ZV9jYV9ndWlkID4gY3VyX3RpbWV3YWl0X2luZm8tPnJlbW90ZV9jYV9ndWlkKQorCQllbHNlIGlmIChiZTY0X2d0KHJlbW90ZV9jYV9ndWlkLCBjdXJfdGltZXdhaXRfaW5mby0+cmVtb3RlX2NhX2d1aWQpKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsKIAkJZWxzZQogCQkJcmV0dXJuIGN1cl90aW1ld2FpdF9pbmZvOwpAQCAtNTc4LDEzICs2MDMsMTMgQEAKIAl3aGlsZSAobm9kZSkgewogCQl0aW1ld2FpdF9pbmZvID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGNtX3RpbWV3YWl0X2luZm8sCiAJCQkJCSByZW1vdGVfaWRfbm9kZSk7Ci0JCWlmIChyZW1vdGVfaWQgPCB0aW1ld2FpdF9pbmZvLT53b3JrLnJlbW90ZV9pZCkKKwkJaWYgKGJlMzJfbHQocmVtb3RlX2lkLCB0aW1ld2FpdF9pbmZvLT53b3JrLnJlbW90ZV9pZCkpCiAJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKLQkJZWxzZSBpZiAocmVtb3RlX2lkID4gdGltZXdhaXRfaW5mby0+d29yay5yZW1vdGVfaWQpCisJCWVsc2UgaWYgKGJlMzJfZ3QocmVtb3RlX2lkLCB0aW1ld2FpdF9pbmZvLT53b3JrLnJlbW90ZV9pZCkpCiAJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7Ci0JCWVsc2UgaWYgKHJlbW90ZV9jYV9ndWlkIDwgdGltZXdhaXRfaW5mby0+cmVtb3RlX2NhX2d1aWQpCisJCWVsc2UgaWYgKGJlNjRfbHQocmVtb3RlX2NhX2d1aWQsIHRpbWV3YWl0X2luZm8tPnJlbW90ZV9jYV9ndWlkKSkKIAkJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OwotCQllbHNlIGlmIChyZW1vdGVfY2FfZ3VpZCA+IHRpbWV3YWl0X2luZm8tPnJlbW90ZV9jYV9ndWlkKQorCQllbHNlIGlmIChiZTY0X2d0KHJlbW90ZV9jYV9ndWlkLCB0aW1ld2FpdF9pbmZvLT5yZW1vdGVfY2FfZ3VpZCkpCiAJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7CiAJCWVsc2UKIAkJCXJldHVybiB0aW1ld2FpdF9pbmZvOwpAQCAtNjA1LDEzICs2MzAsMTMgQEAKIAkJcGFyZW50ID0gKmxpbms7CiAJCWN1cl90aW1ld2FpdF9pbmZvID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY21fdGltZXdhaXRfaW5mbywKIAkJCQkJICAgICByZW1vdGVfcXBfbm9kZSk7Ci0JCWlmIChyZW1vdGVfcXBuIDwgY3VyX3RpbWV3YWl0X2luZm8tPnJlbW90ZV9xcG4pCisJCWlmIChiZTMyX2x0KHJlbW90ZV9xcG4sIGN1cl90aW1ld2FpdF9pbmZvLT5yZW1vdGVfcXBuKSkKIAkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfbGVmdDsKLQkJZWxzZSBpZiAocmVtb3RlX3FwbiA+IGN1cl90aW1ld2FpdF9pbmZvLT5yZW1vdGVfcXBuKQorCQllbHNlIGlmIChiZTMyX2d0KHJlbW90ZV9xcG4sIGN1cl90aW1ld2FpdF9pbmZvLT5yZW1vdGVfcXBuKSkKIAkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfcmlnaHQ7Ci0JCWVsc2UgaWYgKHJlbW90ZV9jYV9ndWlkIDwgY3VyX3RpbWV3YWl0X2luZm8tPnJlbW90ZV9jYV9ndWlkKQorCQllbHNlIGlmIChiZTY0X2x0KHJlbW90ZV9jYV9ndWlkLCBjdXJfdGltZXdhaXRfaW5mby0+cmVtb3RlX2NhX2d1aWQpKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwotCQllbHNlIGlmIChyZW1vdGVfY2FfZ3VpZCA+IGN1cl90aW1ld2FpdF9pbmZvLT5yZW1vdGVfY2FfZ3VpZCkKKwkJZWxzZSBpZiAoYmU2NF9ndChyZW1vdGVfY2FfZ3VpZCwgY3VyX3RpbWV3YWl0X2luZm8tPnJlbW90ZV9jYV9ndWlkKSkKIAkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfcmlnaHQ7CiAJCWVsc2UKIAkJCXJldHVybiBjdXJfdGltZXdhaXRfaW5mbzsKQEAgLTYzNSw5ICs2NjAsOSBAQAogCQlwYXJlbnQgPSAqbGluazsKIAkJY3VyX2NtX2lkX3ByaXYgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjbV9pZF9wcml2YXRlLAogCQkJCQkgIHNpZHJfaWRfbm9kZSk7Ci0JCWlmIChyZW1vdGVfaWQgPCBjdXJfY21faWRfcHJpdi0+aWQucmVtb3RlX2lkKQorCQlpZiAoYmUzMl9sdChyZW1vdGVfaWQsIGN1cl9jbV9pZF9wcml2LT5pZC5yZW1vdGVfaWQpKQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwotCQllbHNlIGlmIChyZW1vdGVfaWQgPiBjdXJfY21faWRfcHJpdi0+aWQucmVtb3RlX2lkKQorCQllbHNlIGlmIChiZTMyX2d0KHJlbW90ZV9pZCwgY3VyX2NtX2lkX3ByaXYtPmlkLnJlbW90ZV9pZCkpCiAJCQlsaW5rID0gJigqbGluayktPnJiX3JpZ2h0OwogCQllbHNlIHsKIAkJCWludCBjbXA7CkBAIC0yODQ4LDcgKzI4NzMsNyBAQAogCWNtX2Zvcm1hdF9tYWRfaGRyKCZzaWRyX3JlcV9tc2ctPmhkciwgQ01fU0lEUl9SRVFfQVRUUl9JRCwKIAkJCSAgY21fZm9ybV90aWQoY21faWRfcHJpdiwgQ01fTVNHX1NFUVVFTkNFX1NJRFIpKTsKIAlzaWRyX3JlcV9tc2ctPnJlcXVlc3RfaWQgPSBjbV9pZF9wcml2LT5pZC5sb2NhbF9pZDsKLQlzaWRyX3JlcV9tc2ctPnBrZXkgPSBjcHVfdG9fYmUxNihwYXJhbS0+cGF0aC0+cGtleSk7CisJc2lkcl9yZXFfbXNnLT5wa2V5ID0gcGFyYW0tPnBhdGgtPnBrZXk7CiAJc2lkcl9yZXFfbXNnLT5zZXJ2aWNlX2lkID0gcGFyYW0tPnNlcnZpY2VfaWQ7CiAKIAlpZiAocGFyYW0tPnByaXZhdGVfZGF0YSAmJiBwYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbikKQEAgLTM3NTksNiArMzc4NCw3IEBACiAJCXBvcnQgPSBjbV9kZXYtPnBvcnRbaS0xXTsKIAkJaWJfbW9kaWZ5X3BvcnQoZGV2aWNlLCBwb3J0LT5wb3J0X251bSwgMCwgJnBvcnRfbW9kaWZ5KTsKIAkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQocG9ydC0+bWFkX2FnZW50KTsKKwkJZmx1c2hfd29ya3F1ZXVlKGNtLndxKTsKIAkJY21fcmVtb3ZlX3BvcnRfZnMocG9ydCk7CiAJfQogCWtvYmplY3RfcHV0KCZjbV9kZXYtPmRldl9vYmopOwpAQCAtMzgxMyw2ICszODM5LDcgQEAKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmdGltZXdhaXRfaW5mby0+d29yay53b3JrKTsKIAlzcGluX3VubG9ja19pcnEoJmNtLmxvY2spOwogCisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJmNtX2NsaWVudCk7CiAJZGVzdHJveV93b3JrcXVldWUoY20ud3EpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpbWV3YWl0X2luZm8sIHRtcCwgJmNtLnRpbWV3YWl0X2xpc3QsIGxpc3QpIHsKQEAgLTM4MjAsNyArMzg0Nyw2IEBACiAJCWtmcmVlKHRpbWV3YWl0X2luZm8pOwogCX0KIAotCWliX3VucmVnaXN0ZXJfY2xpZW50KCZjbV9jbGllbnQpOwogCWNsYXNzX3VucmVnaXN0ZXIoJmNtX2NsYXNzKTsKIAlpZHJfZGVzdHJveSgmY20ubG9jYWxfaWRfdGFibGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwppbmRleCAzNDUwN2RhLi42NzFmMTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpAQCAtMTY4LDE1ICsxNjgsMTUgQEAKIHVuaW9uIGNtYV9pcF9hZGRyIHsKIAlzdHJ1Y3QgaW42X2FkZHIgaXA2OwogCXN0cnVjdCB7Ci0JCV9fdTMyIHBhZFszXTsKLQkJX191MzIgYWRkcjsKKwkJX19iZTMyIHBhZFszXTsKKwkJX19iZTMyIGFkZHI7CiAJfSBpcDQ7CiB9OwogCiBzdHJ1Y3QgY21hX2hkciB7CiAJdTggY21hX3ZlcnNpb247CiAJdTggaXBfdmVyc2lvbjsJLyogSVAgdmVyc2lvbjogNzo0ICovCi0JX191MTYgcG9ydDsKKwlfX2JlMTYgcG9ydDsKIAl1bmlvbiBjbWFfaXBfYWRkciBzcmNfYWRkcjsKIAl1bmlvbiBjbWFfaXBfYWRkciBkc3RfYWRkcjsKIH07CkBAIC0xODYsOCArMTg2LDggQEAKIAl1OCBzZHBfdmVyc2lvbjsgLyogTWFqb3IgdmVyc2lvbjogNzo0ICovCiAJdTggaXBfdmVyc2lvbjsJLyogSVAgdmVyc2lvbjogNzo0ICovCiAJdTggc2RwX3NwZWNpZmljMVsxMF07Ci0JX191MTYgcG9ydDsKLQlfX3UxNiBzZHBfc3BlY2lmaWMyOworCV9fYmUxNiBwb3J0OworCV9fYmUxNiBzZHBfc3BlY2lmaWMyOwogCXVuaW9uIGNtYV9pcF9hZGRyIHNyY19hZGRyOwogCXVuaW9uIGNtYV9pcF9hZGRyIGRzdF9hZGRyOwogfTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogfQogCiBzdGF0aWMgaW50IGNtYV9nZXRfbmV0X2luZm8odm9pZCAqaGRyLCBlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcywKLQkJCSAgICB1OCAqaXBfdmVyLCBfX3UxNiAqcG9ydCwKKwkJCSAgICB1OCAqaXBfdmVyLCBfX2JlMTYgKnBvcnQsCiAJCQkgICAgdW5pb24gY21hX2lwX2FkZHIgKipzcmMsIHVuaW9uIGNtYV9pcF9hZGRyICoqZHN0KQogewogCXN3aXRjaCAocHMpIHsKQEAgLTY5NSw3ICs2OTUsNyBAQAogCiBzdGF0aWMgdm9pZCBjbWFfc2F2ZV9uZXRfaW5mbyhzdHJ1Y3QgcmRtYV9hZGRyICphZGRyLAogCQkJICAgICAgc3RydWN0IHJkbWFfYWRkciAqbGlzdGVuX2FkZHIsCi0JCQkgICAgICB1OCBpcF92ZXIsIF9fdTE2IHBvcnQsCisJCQkgICAgICB1OCBpcF92ZXIsIF9fYmUxNiBwb3J0LAogCQkJICAgICAgdW5pb24gY21hX2lwX2FkZHIgKnNyYywgdW5pb24gY21hX2lwX2FkZHIgKmRzdCkKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxpc3RlbjQsICppcDQ7CkBAIC05OTYsNyArOTk2LDcgQEAKIAlzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQ7CiAJc3RydWN0IHJkbWFfcm91dGUgKnJ0OwogCXVuaW9uIGNtYV9pcF9hZGRyICpzcmMsICpkc3Q7Ci0JX191MTYgcG9ydDsKKwlfX2JlMTYgcG9ydDsKIAl1OCBpcF92ZXI7CiAKIAlpZiAoY21hX2dldF9uZXRfaW5mbyhpYl9ldmVudC0+cHJpdmF0ZV9kYXRhLCBsaXN0ZW5faWQtPnBzLApAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OwogCXN0cnVjdCByZG1hX2NtX2lkICppZDsKIAl1bmlvbiBjbWFfaXBfYWRkciAqc3JjLCAqZHN0OwotCV9fdTE2IHBvcnQ7CisJX19iZTE2IHBvcnQ7CiAJdTggaXBfdmVyOwogCWludCByZXQ7CiAKQEAgLTExNjUsNyArMTE2NSw3IEBACiB7CiAJc3RydWN0IGNtYV9oZHIgKmNtYV9kYXRhLCAqY21hX21hc2s7CiAJc3RydWN0IHNkcF9oaCAqc2RwX2RhdGEsICpzZHBfbWFzazsKLQlfX3UzMiBpcDRfYWRkcjsKKwlfX2JlMzIgaXA0X2FkZHI7CiAJc3RydWN0IGluNl9hZGRyIGlwNl9hZGRyOwogCiAJbWVtc2V0KGNvbXBhcmUsIDAsIHNpemVvZiAqY29tcGFyZSk7CkBAIC0xMTgxLDEyICsxMTgxLDEyIEBACiAJCQlzZHBfc2V0X2lwX3ZlcihzZHBfZGF0YSwgNCk7CiAJCQlzZHBfc2V0X2lwX3ZlcihzZHBfbWFzaywgMHhGKTsKIAkJCXNkcF9kYXRhLT5kc3RfYWRkci5pcDQuYWRkciA9IGlwNF9hZGRyOwotCQkJc2RwX21hc2stPmRzdF9hZGRyLmlwNC5hZGRyID0gfjA7CisJCQlzZHBfbWFzay0+ZHN0X2FkZHIuaXA0LmFkZHIgPSBodG9ubCh+MCk7CiAJCX0gZWxzZSB7CiAJCQljbWFfc2V0X2lwX3ZlcihjbWFfZGF0YSwgNCk7CiAJCQljbWFfc2V0X2lwX3ZlcihjbWFfbWFzaywgMHhGKTsKIAkJCWNtYV9kYXRhLT5kc3RfYWRkci5pcDQuYWRkciA9IGlwNF9hZGRyOwotCQkJY21hX21hc2stPmRzdF9hZGRyLmlwNC5hZGRyID0gfjA7CisJCQljbWFfbWFzay0+ZHN0X2FkZHIuaXA0LmFkZHIgPSBodG9ubCh+MCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBBRl9JTkVUNjoKQEAgLTEyODksNyArMTI4OSw3IEBACiAJbmV3X2NtX2lkID0gcmRtYV9jcmVhdGVfaWQobGlzdGVuX2lkLT5pZC5ldmVudF9oYW5kbGVyLAogCQkJCSAgIGxpc3Rlbl9pZC0+aWQuY29udGV4dCwKIAkJCQkgICBSRE1BX1BTX1RDUCk7Ci0JaWYgKCFuZXdfY21faWQpIHsKKwlpZiAoSVNfRVJSKG5ld19jbV9pZCkpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Ztcl9wb29sLmMKaW5kZXggN2YwMDM0Ny4uMTI4NmRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jCkBAIC0xMzksNyArMTM5LDcgQEAKIHN0YXRpYyB2b2lkIGliX2Ztcl9iYXRjaF9yZWxlYXNlKHN0cnVjdCBpYl9mbXJfcG9vbCAqcG9vbCkKIHsKIAlpbnQgICAgICAgICAgICAgICAgIHJldDsKLQlzdHJ1Y3QgaWJfcG9vbF9mbXIgKmZtciwgKm5leHQ7CisJc3RydWN0IGliX3Bvb2xfZm1yICpmbXI7CiAJTElTVF9IRUFEKHVubWFwX2xpc3QpOwogCUxJU1RfSEVBRChmbXJfbGlzdCk7CiAKQEAgLTE1OCwyMiArMTU4LDcgQEAKICNlbmRpZgogCX0KIAotCS8qCi0JICogVGhlIGZyZWVfbGlzdCBtYXkgaG9sZCBGTVJzIHRoYXQgaGF2ZSBiZWVuIHB1dCB0aGVyZQotCSAqIGJlY2F1c2UgdGhleSBoYXZlbid0IHJlYWNoZWQgdGhlIG1heF9yZW1hcCBjb3VudC4KLQkgKiBJbnZhbGlkYXRlIHRoZWlyIG1hcHBpbmcgYXMgd2VsbC4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm1yLCBuZXh0LCAmcG9vbC0+ZnJlZV9saXN0LCBsaXN0KSB7Ci0JCWlmIChmbXItPnJlbWFwX2NvdW50ID09IDApCi0JCQljb250aW51ZTsKLQkJaGxpc3RfZGVsX2luaXQoJmZtci0+Y2FjaGVfbm9kZSk7Ci0JCWZtci0+cmVtYXBfY291bnQgPSAwOwotCQlsaXN0X2FkZF90YWlsKCZmbXItPmZtci0+bGlzdCwgJmZtcl9saXN0KTsKLQkJbGlzdF9tb3ZlKCZmbXItPmxpc3QsICZ1bm1hcF9saXN0KTsKLQl9Ci0KLQlsaXN0X3NwbGljZSgmcG9vbC0+ZGlydHlfbGlzdCwgJnVubWFwX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwb29sLT5kaXJ0eV9saXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5kaXJ0eV9saXN0LCAmdW5tYXBfbGlzdCk7CiAJcG9vbC0+ZGlydHlfbGVuID0gMDsKIAogCXNwaW5fdW5sb2NrX2lycSgmcG9vbC0+cG9vbF9sb2NrKTsKQEAgLTM4NCw2ICszNjksMTEgQEAKIAogCWkgPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmbXIsIHRtcCwgJnBvb2wtPmZyZWVfbGlzdCwgbGlzdCkgeworCQlpZiAoZm1yLT5yZW1hcF9jb3VudCkgeworCQkJSU5JVF9MSVNUX0hFQUQoJmZtcl9saXN0KTsKKwkJCWxpc3RfYWRkX3RhaWwoJmZtci0+Zm1yLT5saXN0LCAmZm1yX2xpc3QpOworCQkJaWJfdW5tYXBfZm1yKCZmbXJfbGlzdCk7CisJCX0KIAkJaWJfZGVhbGxvY19mbXIoZm1yLT5mbXIpOwogCQlsaXN0X2RlbCgmZm1yLT5saXN0KTsKIAkJa2ZyZWUoZm1yKTsKQEAgLTQwNyw4ICszOTcsMjMgQEAKICAqLwogaW50IGliX2ZsdXNoX2Ztcl9wb29sKHN0cnVjdCBpYl9mbXJfcG9vbCAqcG9vbCkKIHsKLQlpbnQgc2VyaWFsID0gYXRvbWljX2luY19yZXR1cm4oJnBvb2wtPnJlcV9zZXIpOworCWludCBzZXJpYWw7CisJc3RydWN0IGliX3Bvb2xfZm1yICpmbXIsICpuZXh0OwogCisJLyoKKwkgKiBUaGUgZnJlZV9saXN0IGhvbGRzIEZNUnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHVzZWQKKwkgKiBidXQgaGF2ZSBub3QgYmVlbiByZW1hcHBlZCBlbm91Z2ggdGltZXMgdG8gYmUgZGlydHkuCisJICogUHV0IHRoZW0gb24gdGhlIGRpcnR5IGxpc3Qgbm93IHNvIHRoYXQgdGhlIGNsZWFudXAKKwkgKiB0aHJlYWQgd2lsbCByZWFwIHRoZW0gdG9vLgorCSAqLworCXNwaW5fbG9ja19pcnEoJnBvb2wtPnBvb2xfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZtciwgbmV4dCwgJnBvb2wtPmZyZWVfbGlzdCwgbGlzdCkgeworCQlpZiAoZm1yLT5yZW1hcF9jb3VudCA+IDApCisJCQlsaXN0X21vdmUoJmZtci0+bGlzdCwgJnBvb2wtPmRpcnR5X2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnEoJnBvb2wtPnBvb2xfbG9jayk7CisKKwlzZXJpYWwgPSBhdG9taWNfaW5jX3JldHVybigmcG9vbC0+cmVxX3Nlcik7CiAJd2FrZV91cF9wcm9jZXNzKHBvb2wtPnRocmVhZCk7CiAKIAlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvb2wtPmZvcmNlX3dhaXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKaW5kZXggMjIzYjFhYS4uODFjOTE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYwpAQCAtODM5LDYgKzgzOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZW1wdHk7CiAJaW50IHJldCA9IDA7CisJaW50IGRlc3Ryb3lfaWQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOwogCWVtcHR5ID0gbGlzdF9lbXB0eSgmY21faWRfcHJpdi0+d29ya19saXN0KTsKQEAgLTg1Nyw5ICs4NTgsOSBAQAogCQkJZGVzdHJveV9jbV9pZCgmY21faWRfcHJpdi0+aWQpOwogCQl9CiAJCUJVR19PTihhdG9taWNfcmVhZCgmY21faWRfcHJpdi0+cmVmY291bnQpPT0wKTsKKwkJZGVzdHJveV9pZCA9IHRlc3RfYml0KElXQ01fRl9DQUxMQkFDS19ERVNUUk9ZLCAmY21faWRfcHJpdi0+ZmxhZ3MpOwogCQlpZiAoaXdjbV9kZXJlZl9pZChjbV9pZF9wcml2KSkgewotCQkJaWYgKHRlc3RfYml0KElXQ01fRl9DQUxMQkFDS19ERVNUUk9ZLAotCQkJCSAgICAgJmNtX2lkX3ByaXYtPmZsYWdzKSkgeworCQkJaWYgKGRlc3Ryb3lfaWQpIHsKIAkJCQlCVUdfT04oIWxpc3RfZW1wdHkoJmNtX2lkX3ByaXYtPndvcmtfbGlzdCkpOwogCQkJCWZyZWVfY21faWQoY21faWRfcHJpdik7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwppbmRleCBjODY0ZWY3Li45NTc1NjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKQEAgLTQyNywxNyArNDI3LDE3IEBACiAJLmRlZmF1bHRfYXR0cnMgPSBwb3J0X2RlZmF1bHRfYXR0cnMKIH07CiAKLXN0YXRpYyB2b2lkIGliX2RldmljZV9yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCitzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpYl9kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAogCWtmcmVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgaWJfZGV2aWNlX3VldmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LAorc3RhdGljIGludCBpYl9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldmljZSwKIAkJCSAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpYl9kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAogCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJOQU1FPSVzIiwgZGV2LT5uYW1lKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NjcsOSArNTY3LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19ub2RlX3R5cGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19ub2RlX3R5cGUoc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGliX2RldmljZSwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwogCiAJaWYgKCFpYmRldl9pc19hbGl2ZShkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU4Myw5ICs1ODQsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3lzX2ltYWdlX2d1aWQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19zeXNfaW1hZ2VfZ3VpZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldl9hdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpYl9kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgYXR0cjsKIAlzc2l6ZV90IHJldDsKIApAQCAtNjAzLDkgKzYwNSwxMCBAQAogCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgJmF0dHIuc3lzX2ltYWdlX2d1aWQpWzNdKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbm9kZV9ndWlkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbm9kZV9ndWlkKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpYl9kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAogCWlmICghaWJkZXZfaXNfYWxpdmUoZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MTcsMTcgKzYyMCwxOSBAQAogCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgJmRldi0+bm9kZV9ndWlkKVszXSkpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X25vZGVfZGVzYyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X25vZGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgaWJfZGV2aWNlLCBjbGFzc19kZXYpOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpYl9kZXZpY2UsIGRldik7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlLjY0c1xuIiwgZGV2LT5ub2RlX2Rlc2MpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfbm9kZV9kZXNjKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHNldF9ub2RlX2Rlc2Moc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpYl9kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAlzdHJ1Y3QgaWJfZGV2aWNlX21vZGlmeSBkZXNjID0ge307CiAJaW50IHJldDsKIApAQCAtNjQyLDUyICs2NDcsNTMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihub2RlX3R5cGUsIFNfSVJVR08sIHNob3dfbm9kZV90eXBlLCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzeXNfaW1hZ2VfZ3VpZCwgU19JUlVHTywgc2hvd19zeXNfaW1hZ2VfZ3VpZCwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobm9kZV9ndWlkLCBTX0lSVUdPLCBzaG93X25vZGVfZ3VpZCwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobm9kZV9kZXNjLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19ub2RlX2Rlc2MsCi0JCQkgc2V0X25vZGVfZGVzYyk7CitzdGF0aWMgREVWSUNFX0FUVFIobm9kZV90eXBlLCBTX0lSVUdPLCBzaG93X25vZGVfdHlwZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3lzX2ltYWdlX2d1aWQsIFNfSVJVR08sIHNob3dfc3lzX2ltYWdlX2d1aWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG5vZGVfZ3VpZCwgU19JUlVHTywgc2hvd19ub2RlX2d1aWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG5vZGVfZGVzYywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfbm9kZV9kZXNjLCBzZXRfbm9kZV9kZXNjKTsKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICppYl9jbGFzc19hdHRyaWJ1dGVzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX25vZGVfdHlwZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfc3lzX2ltYWdlX2d1aWQsCi0JJmNsYXNzX2RldmljZV9hdHRyX25vZGVfZ3VpZCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbm9kZV9kZXNjCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmliX2NsYXNzX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfbm9kZV90eXBlLAorCSZkZXZfYXR0cl9zeXNfaW1hZ2VfZ3VpZCwKKwkmZGV2X2F0dHJfbm9kZV9ndWlkLAorCSZkZXZfYXR0cl9ub2RlX2Rlc2MKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgaWJfY2xhc3MgPSB7CiAJLm5hbWUgICAgPSAiaW5maW5pYmFuZCIsCi0JLnJlbGVhc2UgPSBpYl9kZXZpY2VfcmVsZWFzZSwKLQkudWV2ZW50ID0gaWJfZGV2aWNlX3VldmVudCwKKwkuZGV2X3JlbGVhc2UgPSBpYl9kZXZpY2VfcmVsZWFzZSwKKwkuZGV2X3VldmVudCA9IGliX2RldmljZV91ZXZlbnQsCiB9OwogCiBpbnQgaWJfZGV2aWNlX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSAmZGV2aWNlLT5jbGFzc19kZXY7CisJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2ID0gJmRldmljZS0+ZGV2OwogCWludCByZXQ7CiAJaW50IGk7CiAKIAljbGFzc19kZXYtPmNsYXNzICAgICAgPSAmaWJfY2xhc3M7Ci0JY2xhc3NfZGV2LT5jbGFzc19kYXRhID0gZGV2aWNlOwotCWNsYXNzX2Rldi0+ZGV2CSAgICAgID0gZGV2aWNlLT5kbWFfZGV2aWNlOwotCXN0cmxjcHkoY2xhc3NfZGV2LT5jbGFzc19pZCwgZGV2aWNlLT5uYW1lLCBCVVNfSURfU0laRSk7CisJY2xhc3NfZGV2LT5kcml2ZXJfZGF0YSA9IGRldmljZTsKKwljbGFzc19kZXYtPnBhcmVudCAgICAgPSBkZXZpY2UtPmRtYV9kZXZpY2U7CisJc3RybGNweShjbGFzc19kZXYtPmJ1c19pZCwgZGV2aWNlLT5uYW1lLCBCVVNfSURfU0laRSk7CiAKIAlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5wb3J0X2xpc3QpOwogCi0JcmV0ID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKGNsYXNzX2Rldik7CisJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKGNsYXNzX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpYl9jbGFzc19hdHRyaWJ1dGVzKTsgKytpKSB7Ci0JCXJldCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGFzc19kZXYsIGliX2NsYXNzX2F0dHJpYnV0ZXNbaV0pOworCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoY2xhc3NfZGV2LCBpYl9jbGFzc19hdHRyaWJ1dGVzW2ldKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CiAJfQogCiAJZGV2aWNlLT5wb3J0c19wYXJlbnQgPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJwb3J0cyIsCiAJCQkJCWtvYmplY3RfZ2V0KCZjbGFzc19kZXYtPmtvYmopKTsKLQlpZiAoIWRldmljZS0+cG9ydHNfcGFyZW50KQorCWlmICghZGV2aWNlLT5wb3J0c19wYXJlbnQpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfcHV0OworCX0KIAogCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIKSB7CiAJCXJldCA9IGFkZF9wb3J0KGRldmljZSwgMCk7CkBAIC03MjEsNyArNzI3LDcgQEAKIAlrb2JqZWN0X3B1dCgmY2xhc3NfZGV2LT5rb2JqKTsKIAogZXJyX3VucmVnaXN0ZXI6Ci0JY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoY2xhc3NfZGV2KTsKKwlkZXZpY2VfdW5yZWdpc3RlcihjbGFzc19kZXYpOwogCiBlcnI6CiAJcmV0dXJuIHJldDsKQEAgLTc0Miw3ICs3NDgsNyBAQAogCX0KIAogCWtvYmplY3RfcHV0KGRldmljZS0+cG9ydHNfcGFyZW50KTsKLQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmZGV2aWNlLT5jbGFzc19kZXYpOworCWRldmljZV91bnJlZ2lzdGVyKCZkZXZpY2UtPmRldik7CiB9CiAKIGludCBpYl9zeXNmc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYwppbmRleCA0MjkxYWI0Li5kN2E2ODgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYwpAQCAtNTgsOCArNTgsOCBAQAogCiBzdHJ1Y3QgaWJfdWNtX2RldmljZSB7CiAJaW50CQkJZGV2bnVtOwotCXN0cnVjdCBjZGV2CQlkZXY7Ci0Jc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7CisJc3RydWN0IGNkZXYJCWNkZXY7CisJc3RydWN0IGRldmljZQkJZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UJKmliX2RldjsKIH07CiAKQEAgLTExNzEsNyArMTE3MSw3IEBACiAKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBmaWxlOwogCWZpbGUtPmZpbHAgPSBmaWxwOwotCWZpbGUtPmRldmljZSA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgaWJfdWNtX2RldmljZSwgZGV2KTsKKwlmaWxlLT5kZXZpY2UgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGliX3VjbV9kZXZpY2UsIGNkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjAyLDE0ICsxMjAyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHVjbV9yZWxlYXNlX2NsYXNzX2RldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpCitzdGF0aWMgdm9pZCBpYl91Y21fcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpYl91Y21fZGV2aWNlICpkZXY7CisJc3RydWN0IGliX3VjbV9kZXZpY2UgKnVjbV9kZXY7CiAKLQlkZXYgPSBjb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3QgaWJfdWNtX2RldmljZSwgY2xhc3NfZGV2KTsKLQljZGV2X2RlbCgmZGV2LT5kZXYpOwotCWNsZWFyX2JpdChkZXYtPmRldm51bSwgZGV2X21hcCk7Ci0Ja2ZyZWUoZGV2KTsKKwl1Y21fZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGliX3VjbV9kZXZpY2UsIGRldik7CisJY2Rldl9kZWwoJnVjbV9kZXYtPmNkZXYpOworCWNsZWFyX2JpdCh1Y21fZGV2LT5kZXZudW0sIGRldl9tYXApOworCWtmcmVlKHVjbV9kZXYpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1Y21fZm9wcyA9IHsKQEAgLTEyMjAsMTQgKzEyMjAsMTUgQEAKIAkucG9sbCAgICA9IGliX3VjbV9wb2xsLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19pYmRldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaWJkZXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQogewotCXN0cnVjdCBpYl91Y21fZGV2aWNlICpkZXY7CisJc3RydWN0IGliX3VjbV9kZXZpY2UgKnVjbV9kZXY7CiAKLQlkZXYgPSBjb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3QgaWJfdWNtX2RldmljZSwgY2xhc3NfZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGV2LT5pYl9kZXYtPm5hbWUpOworCXVjbV9kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaWJfdWNtX2RldmljZSwgZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdWNtX2Rldi0+aWJfZGV2LT5uYW1lKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpYmRldiwgU19JUlVHTywgc2hvd19pYmRldiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaWJkZXYsIFNfSVJVR08sIHNob3dfaWJkZXYsIE5VTEwpOwogCiBzdGF0aWMgdm9pZCBpYl91Y21fYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiB7CkBAIC0xMjQ5LDMyICsxMjUwLDMxIEBACiAKIAlzZXRfYml0KHVjbV9kZXYtPmRldm51bSwgZGV2X21hcCk7CiAKLQljZGV2X2luaXQoJnVjbV9kZXYtPmRldiwgJnVjbV9mb3BzKTsKLQl1Y21fZGV2LT5kZXYub3duZXIgPSBUSElTX01PRFVMRTsKLQlrb2JqZWN0X3NldF9uYW1lKCZ1Y21fZGV2LT5kZXYua29iaiwgInVjbSVkIiwgdWNtX2Rldi0+ZGV2bnVtKTsKLQlpZiAoY2Rldl9hZGQoJnVjbV9kZXYtPmRldiwgSUJfVUNNX0JBU0VfREVWICsgdWNtX2Rldi0+ZGV2bnVtLCAxKSkKKwljZGV2X2luaXQoJnVjbV9kZXYtPmNkZXYsICZ1Y21fZm9wcyk7CisJdWNtX2Rldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCWtvYmplY3Rfc2V0X25hbWUoJnVjbV9kZXYtPmNkZXYua29iaiwgInVjbSVkIiwgdWNtX2Rldi0+ZGV2bnVtKTsKKwlpZiAoY2Rldl9hZGQoJnVjbV9kZXYtPmNkZXYsIElCX1VDTV9CQVNFX0RFViArIHVjbV9kZXYtPmRldm51bSwgMSkpCiAJCWdvdG8gZXJyOwogCi0JdWNtX2Rldi0+Y2xhc3NfZGV2LmNsYXNzID0gJmNtX2NsYXNzOwotCXVjbV9kZXYtPmNsYXNzX2Rldi5kZXYgPSBkZXZpY2UtPmRtYV9kZXZpY2U7Ci0JdWNtX2Rldi0+Y2xhc3NfZGV2LmRldnQgPSB1Y21fZGV2LT5kZXYuZGV2OwotCXVjbV9kZXYtPmNsYXNzX2Rldi5yZWxlYXNlID0gdWNtX3JlbGVhc2VfY2xhc3NfZGV2OwotCXNucHJpbnRmKHVjbV9kZXYtPmNsYXNzX2Rldi5jbGFzc19pZCwgQlVTX0lEX1NJWkUsICJ1Y20lZCIsCisJdWNtX2Rldi0+ZGV2LmNsYXNzID0gJmNtX2NsYXNzOworCXVjbV9kZXYtPmRldi5wYXJlbnQgPSBkZXZpY2UtPmRtYV9kZXZpY2U7CisJdWNtX2Rldi0+ZGV2LmRldnQgPSB1Y21fZGV2LT5jZGV2LmRldjsKKwl1Y21fZGV2LT5kZXYucmVsZWFzZSA9IGliX3VjbV9yZWxlYXNlX2RldjsKKwlzbnByaW50Zih1Y21fZGV2LT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgInVjbSVkIiwKIAkJIHVjbV9kZXYtPmRldm51bSk7Ci0JaWYgKGNsYXNzX2RldmljZV9yZWdpc3RlcigmdWNtX2Rldi0+Y2xhc3NfZGV2KSkKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZ1Y21fZGV2LT5kZXYpKQogCQlnb3RvIGVycl9jZGV2OwogCi0JaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdWNtX2Rldi0+Y2xhc3NfZGV2LAotCQkJCSAgICAgJmNsYXNzX2RldmljZV9hdHRyX2liZGV2KSkKLQkJZ290byBlcnJfY2xhc3M7CisJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmdWNtX2Rldi0+ZGV2LCAmZGV2X2F0dHJfaWJkZXYpKQorCQlnb3RvIGVycl9kZXY7CiAKIAlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmdWNtX2NsaWVudCwgdWNtX2Rldik7CiAJcmV0dXJuOwogCi1lcnJfY2xhc3M6Ci0JY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJnVjbV9kZXYtPmNsYXNzX2Rldik7CitlcnJfZGV2OgorCWRldmljZV91bnJlZ2lzdGVyKCZ1Y21fZGV2LT5kZXYpOwogZXJyX2NkZXY6Ci0JY2Rldl9kZWwoJnVjbV9kZXYtPmRldik7CisJY2Rldl9kZWwoJnVjbV9kZXYtPmNkZXYpOwogCWNsZWFyX2JpdCh1Y21fZGV2LT5kZXZudW0sIGRldl9tYXApOwogZXJyOgogCWtmcmVlKHVjbV9kZXYpOwpAQCAtMTI4OCw3ICsxMjg4LDcgQEAKIAlpZiAoIXVjbV9kZXYpCiAJCXJldHVybjsKIAotCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZ1Y21fZGV2LT5jbGFzc19kZXYpOworCWRldmljZV91bnJlZ2lzdGVyKCZ1Y21fZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2FiaV92ZXJzaW9uKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwppbmRleCAxNTkzN2ViLi5jYTRjZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCkBAIC02MTQsNyArNjE0LDcgQEAKIAlpZiAoIWN0eC0+Y21faWQtPmRldmljZSkKIAkJZ290byBvdXQ7CiAKLQlyZXNwLm5vZGVfZ3VpZCA9IGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV9ndWlkOworCXJlc3Aubm9kZV9ndWlkID0gKF9fZm9yY2UgX191NjQpIGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV9ndWlkOwogCXJlc3AucG9ydF9udW0gPSBjdHgtPmNtX2lkLT5wb3J0X251bTsKIAlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV90eXBlKSkgewogCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCA0ZTkxNTEwLi4zYWEyZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTQ2LDkgKzQ2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8cmRtYS9pYl9tYWQuaD4KICNpbmNsdWRlIDxyZG1hL2liX3VzZXJfbWFkLmg+CkBAIC04OCwxMSArODgsMTEgQEAKICAqLwogCiBzdHJ1Y3QgaWJfdW1hZF9wb3J0IHsKLQlzdHJ1Y3QgY2RldiAgICAgICAgICAgKmRldjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICAgKmNsYXNzX2RldjsKKwlzdHJ1Y3QgY2RldiAgICAgICAgICAgKmNkZXY7CisJc3RydWN0IGRldmljZQkgICAgICAqZGV2OwogCi0Jc3RydWN0IGNkZXYgICAgICAgICAgICpzbV9kZXY7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAgICpzbV9jbGFzc19kZXY7CisJc3RydWN0IGNkZXYgICAgICAgICAgICpzbV9jZGV2OworCXN0cnVjdCBkZXZpY2UJICAgICAgKnNtX2RldjsKIAlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgIHNtX3NlbTsKIAogCXN0cnVjdCBtdXRleAkgICAgICAgZmlsZV9tdXRleDsKQEAgLTk0OCwyNyArOTQ4LDI5IEBACiAJLnJlbW92ZSA9IGliX3VtYWRfcmVtb3ZlX29uZQogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19pYmRldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaWJkZXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQogewotCXN0cnVjdCBpYl91bWFkX3BvcnQgKnBvcnQgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCXN0cnVjdCBpYl91bWFkX3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcG9ydC0+aWJfZGV2LT5uYW1lKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpYmRldiwgU19JUlVHTywgc2hvd19pYmRldiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaWJkZXYsIFNfSVJVR08sIHNob3dfaWJkZXYsIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzaG93X3BvcnQoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3BvcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGliX3VtYWRfcG9ydCAqcG9ydCA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisJc3RydWN0IGliX3VtYWRfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFwb3J0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb3J0LT5wb3J0X251bSk7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIocG9ydCwgU19JUlVHTywgc2hvd19wb3J0LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3J0LCBTX0lSVUdPLCBzaG93X3BvcnQsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2FiaV92ZXJzaW9uKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKIHsKQEAgLTk5NCw0OCArOTk2LDQ3IEBACiAJbXV0ZXhfaW5pdCgmcG9ydC0+ZmlsZV9tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPmZpbGVfbGlzdCk7CiAKLQlwb3J0LT5kZXYgPSBjZGV2X2FsbG9jKCk7Ci0JaWYgKCFwb3J0LT5kZXYpCisJcG9ydC0+Y2RldiA9IGNkZXZfYWxsb2MoKTsKKwlpZiAoIXBvcnQtPmNkZXYpCiAJCXJldHVybiAtMTsKLQlwb3J0LT5kZXYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JcG9ydC0+ZGV2LT5vcHMgICA9ICZ1bWFkX2ZvcHM7Ci0Ja29iamVjdF9zZXRfbmFtZSgmcG9ydC0+ZGV2LT5rb2JqLCAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7Ci0JaWYgKGNkZXZfYWRkKHBvcnQtPmRldiwgYmFzZV9kZXYgKyBwb3J0LT5kZXZfbnVtLCAxKSkKKwlwb3J0LT5jZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCXBvcnQtPmNkZXYtPm9wcyAgID0gJnVtYWRfZm9wczsKKwlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5jZGV2LT5rb2JqLCAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CisJaWYgKGNkZXZfYWRkKHBvcnQtPmNkZXYsIGJhc2VfZGV2ICsgcG9ydC0+ZGV2X251bSwgMSkpCiAJCWdvdG8gZXJyX2NkZXY7CiAKLQlwb3J0LT5jbGFzc19kZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKHVtYWRfY2xhc3MsIE5VTEwsIHBvcnQtPmRldi0+ZGV2LAotCQkJCQkgICAgICBkZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJCSAgICAgICJ1bWFkJWQiLCBwb3J0LT5kZXZfbnVtKTsKLQlpZiAoSVNfRVJSKHBvcnQtPmNsYXNzX2RldikpCisJcG9ydC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICBwb3J0LT5jZGV2LT5kZXYsICJ1bWFkJWQiLCBwb3J0LT5kZXZfbnVtKTsKKwlpZiAoSVNfRVJSKHBvcnQtPmRldikpCiAJCWdvdG8gZXJyX2NkZXY7CiAKLQlpZiAoY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHBvcnQtPmNsYXNzX2RldiwgJmNsYXNzX2RldmljZV9hdHRyX2liZGV2KSkKLQkJZ290byBlcnJfY2xhc3M7Ci0JaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShwb3J0LT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wb3J0KSkKLQkJZ290byBlcnJfY2xhc3M7CisJaWYgKGRldmljZV9jcmVhdGVfZmlsZShwb3J0LT5kZXYsICZkZXZfYXR0cl9pYmRldikpCisJCWdvdG8gZXJyX2RldjsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKHBvcnQtPmRldiwgJmRldl9hdHRyX3BvcnQpKQorCQlnb3RvIGVycl9kZXY7CiAKLQlwb3J0LT5zbV9kZXYgPSBjZGV2X2FsbG9jKCk7Ci0JaWYgKCFwb3J0LT5zbV9kZXYpCi0JCWdvdG8gZXJyX2NsYXNzOwotCXBvcnQtPnNtX2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlwb3J0LT5zbV9kZXYtPm9wcyAgID0gJnVtYWRfc21fZm9wczsKLQlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5zbV9kZXYtPmtvYmosICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKLQlpZiAoY2Rldl9hZGQocG9ydC0+c21fZGV2LCBiYXNlX2RldiArIHBvcnQtPmRldl9udW0gKyBJQl9VTUFEX01BWF9QT1JUUywgMSkpCisJcG9ydC0+c21fY2RldiA9IGNkZXZfYWxsb2MoKTsKKwlpZiAoIXBvcnQtPnNtX2NkZXYpCisJCWdvdG8gZXJyX2RldjsKKwlwb3J0LT5zbV9jZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCXBvcnQtPnNtX2NkZXYtPm9wcyAgID0gJnVtYWRfc21fZm9wczsKKwlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5zbV9jZGV2LT5rb2JqLCAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CisJaWYgKGNkZXZfYWRkKHBvcnQtPnNtX2NkZXYsIGJhc2VfZGV2ICsgcG9ydC0+ZGV2X251bSArIElCX1VNQURfTUFYX1BPUlRTLCAxKSkKIAkJZ290byBlcnJfc21fY2RldjsKIAotCXBvcnQtPnNtX2NsYXNzX2RldiA9IGNsYXNzX2RldmljZV9jcmVhdGUodW1hZF9jbGFzcywgTlVMTCwgcG9ydC0+c21fZGV2LT5kZXYsCi0JCQkJCQkgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkJICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKLQlpZiAoSVNfRVJSKHBvcnQtPnNtX2NsYXNzX2RldikpCisJcG9ydC0+c21fZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICAgICBwb3J0LT5zbV9jZGV2LT5kZXYsCisJCQkJICAgICAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CisJaWYgKElTX0VSUihwb3J0LT5zbV9kZXYpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCi0JY2xhc3Nfc2V0X2RldmRhdGEocG9ydC0+Y2xhc3NfZGV2LCAgICBwb3J0KTsKLQljbGFzc19zZXRfZGV2ZGF0YShwb3J0LT5zbV9jbGFzc19kZXYsIHBvcnQpOworCWRldl9zZXRfZHJ2ZGF0YShwb3J0LT5kZXYsICAgIHBvcnQpOworCWRldl9zZXRfZHJ2ZGF0YShwb3J0LT5zbV9kZXYsIHBvcnQpOwogCi0JaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShwb3J0LT5zbV9jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pYmRldikpCi0JCWdvdG8gZXJyX3NtX2NsYXNzOwotCWlmIChjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUocG9ydC0+c21fY2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcG9ydCkpCi0JCWdvdG8gZXJyX3NtX2NsYXNzOworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUocG9ydC0+c21fZGV2LCAmZGV2X2F0dHJfaWJkZXYpKQorCQlnb3RvIGVycl9zbV9kZXY7CisJaWYgKGRldmljZV9jcmVhdGVfZmlsZShwb3J0LT5zbV9kZXYsICZkZXZfYXR0cl9wb3J0KSkKKwkJZ290byBlcnJfc21fZGV2OwogCiAJc3Bpbl9sb2NrKCZwb3J0X2xvY2spOwogCXVtYWRfcG9ydFtwb3J0LT5kZXZfbnVtXSA9IHBvcnQ7CkBAIC0xMDQzLDE3ICsxMDQ0LDE3IEBACiAKIAlyZXR1cm4gMDsKIAotZXJyX3NtX2NsYXNzOgotCWNsYXNzX2RldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPnNtX2Rldi0+ZGV2KTsKK2Vycl9zbV9kZXY6CisJZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+c21fY2Rldi0+ZGV2KTsKIAogZXJyX3NtX2NkZXY6Ci0JY2Rldl9kZWwocG9ydC0+c21fZGV2KTsKKwljZGV2X2RlbChwb3J0LT5zbV9jZGV2KTsKIAotZXJyX2NsYXNzOgotCWNsYXNzX2RldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPmRldi0+ZGV2KTsKK2Vycl9kZXY6CisJZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+Y2Rldi0+ZGV2KTsKIAogZXJyX2NkZXY6Ci0JY2Rldl9kZWwocG9ydC0+ZGV2KTsKKwljZGV2X2RlbChwb3J0LT5jZGV2KTsKIAljbGVhcl9iaXQocG9ydC0+ZGV2X251bSwgZGV2X21hcCk7CiAKIAlyZXR1cm4gLTE7CkBAIC0xMDY1LDE0ICsxMDY2LDE0IEBACiAJaW50IGFscmVhZHlfZGVhZDsKIAlpbnQgaWQ7CiAKLQljbGFzc19zZXRfZGV2ZGF0YShwb3J0LT5jbGFzc19kZXYsICAgIE5VTEwpOwotCWNsYXNzX3NldF9kZXZkYXRhKHBvcnQtPnNtX2NsYXNzX2RldiwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKHBvcnQtPmRldiwgICAgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKHBvcnQtPnNtX2RldiwgTlVMTCk7CiAKLQljbGFzc19kZXZpY2VfZGVzdHJveSh1bWFkX2NsYXNzLCBwb3J0LT5kZXYtPmRldik7Ci0JY2xhc3NfZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+c21fZGV2LT5kZXYpOworCWRldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPmNkZXYtPmRldik7CisJZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+c21fY2Rldi0+ZGV2KTsKIAotCWNkZXZfZGVsKHBvcnQtPmRldik7Ci0JY2Rldl9kZWwocG9ydC0+c21fZGV2KTsKKwljZGV2X2RlbChwb3J0LT5jZGV2KTsKKwljZGV2X2RlbChwb3J0LT5zbV9jZGV2KTsKIAogCXNwaW5fbG9jaygmcG9ydF9sb2NrKTsKIAl1bWFkX3BvcnRbcG9ydC0+ZGV2X251bV0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAppbmRleCBjNzVlYjZjLi4zNzZhNTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaApAQCAtNzMsMjEgKzczLDIxIEBACiAJc3RydWN0IGtyZWYJCQkJcmVmOwogCXN0cnVjdCBjb21wbGV0aW9uCQkJY29tcDsKIAlpbnQJCQkJCWRldm51bTsKLQlzdHJ1Y3QgY2RldgkJCSAgICAgICAqZGV2OwotCXN0cnVjdCBjbGFzc19kZXZpY2UJCSAgICAgICAqY2xhc3NfZGV2OworCXN0cnVjdCBjZGV2CQkJICAgICAgICpjZGV2OworCXN0cnVjdCBkZXZpY2UJCQkgICAgICAgKmRldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlCQkgICAgICAgKmliX2RldjsKIAlpbnQJCQkJCW51bV9jb21wX3ZlY3RvcnM7CiB9OwogCiBzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUgewogCXN0cnVjdCBrcmVmCQkJCXJlZjsKLQlzdHJ1Y3QgZmlsZQkJCSAgICAgICAqZmlsZTsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUJCSAgICAgICAqdXZlcmJzX2ZpbGU7CiAJc3BpbmxvY2tfdAkJCQlsb2NrOwotCWludAkJCQkJaXNfYXN5bmM7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJCQlwb2xsX3dhaXQ7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJCSAgICAgICAqYXN5bmNfcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZAkJCWV2ZW50X2xpc3Q7CisJaW50CQkJCQlpc19hc3luYzsKKwlpbnQJCQkJCWlzX2Nsb3NlZDsKIH07CiAKIHN0cnVjdCBpYl91dmVyYnNfZmlsZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKaW5kZXggNDk1YzgwMy4uMmMzYmZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwpAQCAtMTA2NSw2ICsxMDY1LDcgQEAKIAlhdHRyLnNycSAgICAgICAgICAgPSBzcnE7CiAJYXR0ci5zcV9zaWdfdHlwZSAgID0gY21kLnNxX3NpZ19hbGwgPyBJQl9TSUdOQUxfQUxMX1dSIDogSUJfU0lHTkFMX1JFUV9XUjsKIAlhdHRyLnFwX3R5cGUgICAgICAgPSBjbWQucXBfdHlwZTsKKwlhdHRyLmNyZWF0ZV9mbGFncyAgPSAwOwogCiAJYXR0ci5jYXAubWF4X3NlbmRfd3IgICAgID0gY21kLm1heF9zZW5kX3dyOwogCWF0dHIuY2FwLm1heF9yZWN2X3dyICAgICA9IGNtZC5tYXhfcmVjdl93cjsKQEAgLTE0NjIsNyArMTQ2Myw2IEBACiAJCW5leHQtPm51bV9zZ2UgICAgPSB1c2VyX3dyLT5udW1fc2dlOwogCQluZXh0LT5vcGNvZGUgICAgID0gdXNlcl93ci0+b3Bjb2RlOwogCQluZXh0LT5zZW5kX2ZsYWdzID0gdXNlcl93ci0+c2VuZF9mbGFnczsKLQkJbmV4dC0+aW1tX2RhdGEgICA9IChfX2JlMzIgX19mb3JjZSkgdXNlcl93ci0+aW1tX2RhdGE7CiAKIAkJaWYgKGlzX3VkKSB7CiAJCQluZXh0LT53ci51ZC5haCA9IGlkcl9yZWFkX2FoKHVzZXJfd3ItPndyLnVkLmFoLApAQCAtMTQ3NSwxNCArMTQ3NSwyNCBAQAogCQkJbmV4dC0+d3IudWQucmVtb3RlX3FrZXkgPSB1c2VyX3dyLT53ci51ZC5yZW1vdGVfcWtleTsKIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCAobmV4dC0+b3Bjb2RlKSB7Ci0JCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CiAJCQljYXNlIElCX1dSX1JETUFfV1JJVEVfV0lUSF9JTU06CisJCQkJbmV4dC0+ZXguaW1tX2RhdGEgPQorCQkJCQkoX19iZTMyIF9fZm9yY2UpIHVzZXJfd3ItPmV4LmltbV9kYXRhOworCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgogCQkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CiAJCQkJbmV4dC0+d3IucmRtYS5yZW1vdGVfYWRkciA9CiAJCQkJCXVzZXJfd3ItPndyLnJkbWEucmVtb3RlX2FkZHI7CiAJCQkJbmV4dC0+d3IucmRtYS5ya2V5ICAgICAgICA9CiAJCQkJCXVzZXJfd3ItPndyLnJkbWEucmtleTsKIAkJCQlicmVhazsKKwkJCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lNTToKKwkJCQluZXh0LT5leC5pbW1fZGF0YSA9CisJCQkJCShfX2JlMzIgX19mb3JjZSkgdXNlcl93ci0+ZXguaW1tX2RhdGE7CisJCQkJYnJlYWs7CisJCQljYXNlIElCX1dSX1NFTkRfV0lUSF9JTlY6CisJCQkJbmV4dC0+ZXguaW52YWxpZGF0ZV9ya2V5ID0KKwkJCQkJdXNlcl93ci0+ZXguaW52YWxpZGF0ZV9ya2V5OworCQkJCWJyZWFrOwogCQkJY2FzZSBJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1A6CiAJCQljYXNlIElCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREOgogCQkJCW5leHQtPndyLmF0b21pYy5yZW1vdGVfYWRkciA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCA3YzJhYzM5Li5jYzFhZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCXN0cnVjdCBpYl91dmVyYnNfZXZlbnQgKmVudHJ5LCAqdG1wOwogCiAJc3Bpbl9sb2NrX2lycSgmZmlsZS0+bG9jayk7Ci0JZmlsZS0+ZmlsZSA9IE5VTEw7CisJZmlsZS0+aXNfY2xvc2VkID0gMTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmZpbGUtPmV2ZW50X2xpc3QsIGxpc3QpIHsKIAkJaWYgKGVudHJ5LT5jb3VudGVyKQogCQkJbGlzdF9kZWwoJmVudHJ5LT5vYmpfbGlzdCk7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZpbGUtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWZpbGUtPmZpbGUpIHsKKwlpZiAoZmlsZS0+aXNfY2xvc2VkKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpbGUtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQyMyw3ICs0MjMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZmlsZS0+YXN5bmNfZmlsZS0+bG9jaywgZmxhZ3MpOwotCWlmICghZmlsZS0+YXN5bmNfZmlsZS0+ZmlsZSkgeworCWlmICghZmlsZS0+YXN5bmNfZmlsZS0+aXNfY2xvc2VkKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpbGUtPmFzeW5jX2ZpbGUtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTUwOSw2ICs1MDksNyBAQAogCWV2X2ZpbGUtPnV2ZXJic19maWxlID0gdXZlcmJzX2ZpbGU7CiAJZXZfZmlsZS0+YXN5bmNfcXVldWUgPSBOVUxMOwogCWV2X2ZpbGUtPmlzX2FzeW5jICAgID0gaXNfYXN5bmM7CisJZXZfZmlsZS0+aXNfY2xvc2VkICAgPSAwOwogCiAJKmZkID0gZ2V0X3VudXNlZF9mZCgpOwogCWlmICgqZmQgPCAwKSB7CkBAIC01MTYsMjUgKzUxNywxOCBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlmaWxwID0gZ2V0X2VtcHR5X2ZpbHAoKTsKLQlpZiAoIWZpbHApIHsKLQkJcmV0ID0gLUVORklMRTsKLQkJZ290byBlcnJfZmQ7Ci0JfQotCi0JZXZfZmlsZS0+ZmlsZSAgICAgID0gZmlscDsKLQogCS8qCiAJICogZm9wc19nZXQoKSBjYW4ndCBmYWlsIGhlcmUsIGJlY2F1c2Ugd2UncmUgY29taW5nIGZyb20gYQogCSAqIHN5c3RlbSBjYWxsIG9uIGEgdXZlcmJzIGZpbGUsIHdoaWNoIHdpbGwgYWxyZWFkeSBoYXZlIGEKIAkgKiBtb2R1bGUgcmVmZXJlbmNlLgogCSAqLwotCWZpbHAtPmZfb3AgCSAgID0gZm9wc19nZXQoJnV2ZXJic19ldmVudF9mb3BzKTsKLQlmaWxwLT5mX3BhdGgubW50IAkgICA9IG1udGdldCh1dmVyYnNfZXZlbnRfbW50KTsKLQlmaWxwLT5mX3BhdGguZGVudHJ5IAkgICA9IGRnZXQodXZlcmJzX2V2ZW50X21udC0+bW50X3Jvb3QpOwotCWZpbHAtPmZfbWFwcGluZyAgICA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKLQlmaWxwLT5mX2ZsYWdzICAgICAgPSBPX1JET05MWTsKLQlmaWxwLT5mX21vZGUgICAgICAgPSBGTU9ERV9SRUFEOworCWZpbHAgPSBhbGxvY19maWxlKHV2ZXJic19ldmVudF9tbnQsIGRnZXQodXZlcmJzX2V2ZW50X21udC0+bW50X3Jvb3QpLAorCQkJICBGTU9ERV9SRUFELCBmb3BzX2dldCgmdXZlcmJzX2V2ZW50X2ZvcHMpKTsKKwlpZiAoIWZpbHApIHsKKwkJcmV0ID0gLUVORklMRTsKKwkJZ290byBlcnJfZmQ7CisJfQorCiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gZXZfZmlsZTsKIAogCXJldHVybiBmaWxwOwpAQCAtNjk2LDI3ICs2OTAsMjkgQEAKIAkucmVtb3ZlID0gaWJfdXZlcmJzX3JlbW92ZV9vbmUKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaWJkZXYoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2liZGV2KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSAqZGV2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CiAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGV2LT5pYl9kZXYtPm5hbWUpOwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGliZGV2LCBTX0lSVUdPLCBzaG93X2liZGV2LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpYmRldiwgU19JUlVHTywgc2hvd19pYmRldiwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfZGV2X2FiaV92ZXJzaW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19kZXZfYWJpX3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpYl91dmVyYnNfZGV2aWNlICpkZXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCXN0cnVjdCBpYl91dmVyYnNfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkZXYtPmliX2Rldi0+dXZlcmJzX2FiaV92ZXIpOwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGFiaV92ZXJzaW9uLCBTX0lSVUdPLCBzaG93X2Rldl9hYmlfdmVyc2lvbiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWJpX3ZlcnNpb24sIFNfSVJVR08sIHNob3dfZGV2X2FiaV92ZXJzaW9uLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19hYmlfdmVyc2lvbihzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCiB7CkBAIC03NTAsMjcgKzc0NiwyNiBAQAogCXV2ZXJic19kZXYtPmliX2RldiAgICAgICAgICAgPSBkZXZpY2U7CiAJdXZlcmJzX2Rldi0+bnVtX2NvbXBfdmVjdG9ycyA9IGRldmljZS0+bnVtX2NvbXBfdmVjdG9yczsKIAotCXV2ZXJic19kZXYtPmRldiA9IGNkZXZfYWxsb2MoKTsKLQlpZiAoIXV2ZXJic19kZXYtPmRldikKKwl1dmVyYnNfZGV2LT5jZGV2ID0gY2Rldl9hbGxvYygpOworCWlmICghdXZlcmJzX2Rldi0+Y2RldikKIAkJZ290byBlcnI7Ci0JdXZlcmJzX2Rldi0+ZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCXV2ZXJic19kZXYtPmRldi0+b3BzID0gZGV2aWNlLT5tbWFwID8gJnV2ZXJic19tbWFwX2ZvcHMgOiAmdXZlcmJzX2ZvcHM7Ci0Ja29iamVjdF9zZXRfbmFtZSgmdXZlcmJzX2Rldi0+ZGV2LT5rb2JqLCAidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOwotCWlmIChjZGV2X2FkZCh1dmVyYnNfZGV2LT5kZXYsIElCX1VWRVJCU19CQVNFX0RFViArIHV2ZXJic19kZXYtPmRldm51bSwgMSkpCisJdXZlcmJzX2Rldi0+Y2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl1dmVyYnNfZGV2LT5jZGV2LT5vcHMgPSBkZXZpY2UtPm1tYXAgPyAmdXZlcmJzX21tYXBfZm9wcyA6ICZ1dmVyYnNfZm9wczsKKwlrb2JqZWN0X3NldF9uYW1lKCZ1dmVyYnNfZGV2LT5jZGV2LT5rb2JqLCAidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOworCWlmIChjZGV2X2FkZCh1dmVyYnNfZGV2LT5jZGV2LCBJQl9VVkVSQlNfQkFTRV9ERVYgKyB1dmVyYnNfZGV2LT5kZXZudW0sIDEpKQogCQlnb3RvIGVycl9jZGV2OwogCi0JdXZlcmJzX2Rldi0+Y2xhc3NfZGV2ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZSh1dmVyYnNfY2xhc3MsIE5VTEwsCi0JCQkJCQkgICAgdXZlcmJzX2Rldi0+ZGV2LT5kZXYsCi0JCQkJCQkgICAgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkJICAgICJ1dmVyYnMlZCIsIHV2ZXJic19kZXYtPmRldm51bSk7Ci0JaWYgKElTX0VSUih1dmVyYnNfZGV2LT5jbGFzc19kZXYpKQorCXV2ZXJic19kZXYtPmRldiA9IGRldmljZV9jcmVhdGUodXZlcmJzX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJCXV2ZXJic19kZXYtPmNkZXYtPmRldiwKKwkJCQkJInV2ZXJicyVkIiwgdXZlcmJzX2Rldi0+ZGV2bnVtKTsKKwlpZiAoSVNfRVJSKHV2ZXJic19kZXYtPmRldikpCiAJCWdvdG8gZXJyX2NkZXY7CiAKLQljbGFzc19zZXRfZGV2ZGF0YSh1dmVyYnNfZGV2LT5jbGFzc19kZXYsIHV2ZXJic19kZXYpOworCWRldl9zZXRfZHJ2ZGF0YSh1dmVyYnNfZGV2LT5kZXYsIHV2ZXJic19kZXYpOwogCi0JaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSh1dmVyYnNfZGV2LT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pYmRldikpCisJaWYgKGRldmljZV9jcmVhdGVfZmlsZSh1dmVyYnNfZGV2LT5kZXYsICZkZXZfYXR0cl9pYmRldikpCiAJCWdvdG8gZXJyX2NsYXNzOwotCWlmIChjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUodXZlcmJzX2Rldi0+Y2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYWJpX3ZlcnNpb24pKQorCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUodXZlcmJzX2Rldi0+ZGV2LCAmZGV2X2F0dHJfYWJpX3ZlcnNpb24pKQogCQlnb3RvIGVycl9jbGFzczsKIAogCXNwaW5fbG9jaygmbWFwX2xvY2spOwpAQCAtNzgyLDEwICs3NzcsMTAgQEAKIAlyZXR1cm47CiAKIGVycl9jbGFzczoKLQljbGFzc19kZXZpY2VfZGVzdHJveSh1dmVyYnNfY2xhc3MsIHV2ZXJic19kZXYtPmRldi0+ZGV2KTsKKwlkZXZpY2VfZGVzdHJveSh1dmVyYnNfY2xhc3MsIHV2ZXJic19kZXYtPmNkZXYtPmRldik7CiAKIGVycl9jZGV2OgotCWNkZXZfZGVsKHV2ZXJic19kZXYtPmRldik7CisJY2Rldl9kZWwodXZlcmJzX2Rldi0+Y2Rldik7CiAJY2xlYXJfYml0KHV2ZXJic19kZXYtPmRldm51bSwgZGV2X21hcCk7CiAKIGVycjoKQEAgLTgwMiw5ICs3OTcsOSBAQAogCWlmICghdXZlcmJzX2RldikKIAkJcmV0dXJuOwogCi0JY2xhc3Nfc2V0X2RldmRhdGEodXZlcmJzX2Rldi0+Y2xhc3NfZGV2LCBOVUxMKTsKLQljbGFzc19kZXZpY2VfZGVzdHJveSh1dmVyYnNfY2xhc3MsIHV2ZXJic19kZXYtPmRldi0+ZGV2KTsKLQljZGV2X2RlbCh1dmVyYnNfZGV2LT5kZXYpOworCWRldl9zZXRfZHJ2ZGF0YSh1dmVyYnNfZGV2LT5kZXYsIE5VTEwpOworCWRldmljZV9kZXN0cm95KHV2ZXJic19jbGFzcywgdXZlcmJzX2Rldi0+Y2Rldi0+ZGV2KTsKKwljZGV2X2RlbCh1dmVyYnNfZGV2LT5jZGV2KTsKIAogCXNwaW5fbG9jaygmbWFwX2xvY2spOwogCWRldl90YWJsZVt1dmVyYnNfZGV2LT5kZXZudW1dID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IDg2ZWQ4YWYuLjA1MDQyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtMjQ4LDcgKzI0OCw5IEBACiAJCSAgc3RydWN0IGliX3NycV9hdHRyICpzcnFfYXR0ciwKIAkJICBlbnVtIGliX3NycV9hdHRyX21hc2sgc3JxX2F0dHJfbWFzaykKIHsKLQlyZXR1cm4gc3JxLT5kZXZpY2UtPm1vZGlmeV9zcnEoc3JxLCBzcnFfYXR0ciwgc3JxX2F0dHJfbWFzaywgTlVMTCk7CisJcmV0dXJuIHNycS0+ZGV2aWNlLT5tb2RpZnlfc3JxID8KKwkJc3JxLT5kZXZpY2UtPm1vZGlmeV9zcnEoc3JxLCBzcnFfYXR0ciwgc3JxX2F0dHJfbWFzaywgTlVMTCkgOgorCQktRU5PU1lTOwogfQogRVhQT1JUX1NZTUJPTChpYl9tb2RpZnlfc3JxKTsKIApAQCAtNjI4LDYgKzYzMCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChpYl9jcmVhdGVfY3EpOwogCitpbnQgaWJfbW9kaWZ5X2NxKHN0cnVjdCBpYl9jcSAqY3EsIHUxNiBjcV9jb3VudCwgdTE2IGNxX3BlcmlvZCkKK3sKKwlyZXR1cm4gY3EtPmRldmljZS0+bW9kaWZ5X2NxID8KKwkJY3EtPmRldmljZS0+bW9kaWZ5X2NxKGNxLCBjcV9jb3VudCwgY3FfcGVyaW9kKSA6IC1FTk9TWVM7Cit9CitFWFBPUlRfU1lNQk9MKGliX21vZGlmeV9jcSk7CisKIGludCBpYl9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqY3EpCiB7CiAJaWYgKGF0b21pY19yZWFkKCZjcS0+dXNlY250KSkKQEAgLTY3Miw2ICs2ODEsOSBAQAogewogCXN0cnVjdCBpYl9tciAqbXI7CiAKKwlpZiAoIXBkLT5kZXZpY2UtPnJlZ19waHlzX21yKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKKwogCW1yID0gcGQtPmRldmljZS0+cmVnX3BoeXNfbXIocGQsIHBoeXNfYnVmX2FycmF5LCBudW1fcGh5c19idWYsCiAJCQkJICAgICBtcl9hY2Nlc3NfZmxhZ3MsIGlvdmFfc3RhcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCmluZGV4IGYyODNhOWYuLjExM2YzYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCkBAIC0xMzAsMTAgKzEzMCwxMCBAQAogCQl0eF9kZXNjLT5zdGF0dXMgPSAwOwogCiAJCS8qIFNldCBUWFBfSFRYRF9VTklOSVQgKi8KLQkJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KDB4MTEyMjMzNDQ1NTY2Nzc4OFVMTCksCisJCV9fcmF3X3dyaXRlcSgoX19mb3JjZSB1NjQpIGNwdV90b19iZTY0KDB4MTEyMjMzNDQ1NTY2Nzc4OFVMTCksCiAJCQkgICAgICh2b2lkIF9faW9tZW0gKikgdHhwX2Rlc2MgKyBDMl9UWFBfQUREUik7CiAJCV9fcmF3X3dyaXRldygwLCAodm9pZCBfX2lvbWVtICopIHR4cF9kZXNjICsgQzJfVFhQX0xFTik7Ci0JCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihUWFBfSFRYRF9VTklOSVQpLAorCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9VTklOSVQpLAogCQkJICAgICAodm9pZCBfX2lvbWVtICopIHR4cF9kZXNjICsgQzJfVFhQX0ZMQUdTKTsKIAogCQllbGVtLT5za2IgPSBOVUxMOwpAQCAtMTc5LDEzICsxNzksMTMgQEAKIAkJcnhfZGVzYy0+c3RhdHVzID0gMDsKIAogCQkvKiBTZXQgUlhQX0hSWERfVU5JTklUICovCi0JCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihSWFBfSFJYRF9PSyksCisJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFJYUF9IUlhEX09LKSwKIAkJICAgICAgICh2b2lkIF9faW9tZW0gKikgcnhwX2Rlc2MgKyBDMl9SWFBfU1RBVFVTKTsKIAkJX19yYXdfd3JpdGV3KDAsICh2b2lkIF9faW9tZW0gKikgcnhwX2Rlc2MgKyBDMl9SWFBfQ09VTlQpOwogCQlfX3Jhd193cml0ZXcoMCwgKHZvaWQgX19pb21lbSAqKSByeHBfZGVzYyArIEMyX1JYUF9MRU4pOwotCQlfX3Jhd193cml0ZXEoY3B1X3RvX2JlNjQoMHg5OWFhYmJjY2RkZWVmZlVMTCksCisJCV9fcmF3X3dyaXRlcSgoX19mb3JjZSB1NjQpIGNwdV90b19iZTY0KDB4OTlhYWJiY2NkZGVlZmZVTEwpLAogCQkJICAgICAodm9pZCBfX2lvbWVtICopIHJ4cF9kZXNjICsgQzJfUlhQX0FERFIpOwotCQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoUlhQX0hSWERfVU5JTklUKSwKKwkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoUlhQX0hSWERfVU5JTklUKSwKIAkJCSAgICAgKHZvaWQgX19pb21lbSAqKSByeHBfZGVzYyArIEMyX1JYUF9GTEFHUyk7CiAKIAkJZWxlbS0+c2tiID0gTlVMTDsKQEAgLTIzOSwxMCArMjM5LDExIEBACiAJcnhwX2hkci0+ZmxhZ3MgPSBSWFBfSFJYRF9SRUFEWTsKIAogCV9fcmF3X3dyaXRldygwLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX1NUQVRVUyk7Ci0JX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KCh1MTYpIG1hcGxlbiAtIHNpemVvZigqcnhwX2hkcikpLAorCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KCh1MTYpIG1hcGxlbiAtIHNpemVvZigqcnhwX2hkcikpLAogCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfTEVOKTsKLQlfX3Jhd193cml0ZXEoY3B1X3RvX2JlNjQobWFwYWRkciksIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfQUREUik7Ci0JX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFJYUF9IUlhEX1JFQURZKSwgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9GTEFHUyk7CisJX19yYXdfd3JpdGVxKChfX2ZvcmNlIHU2NCkgY3B1X3RvX2JlNjQobWFwYWRkciksIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfQUREUik7CisJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoUlhQX0hSWERfUkVBRFkpLAorCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOwogCiAJZWxlbS0+c2tiID0gc2tiOwogCWVsZW0tPm1hcGFkZHIgPSBtYXBhZGRyOwpAQCAtMjkwLDkgKzI5MSw5IEBACiAJCV9fcmF3X3dyaXRldygwLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX1NUQVRVUyk7CiAJCV9fcmF3X3dyaXRldygwLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX0NPVU5UKTsKIAkJX19yYXdfd3JpdGV3KDAsIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfTEVOKTsKLQkJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KDB4OTlhYWJiY2NkZGVlZmZVTEwpLAorCQlfX3Jhd193cml0ZXEoKF9fZm9yY2UgdTY0KSBjcHVfdG9fYmU2NCgweDk5YWFiYmNjZGRlZWZmVUxMKSwKIAkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9BRERSKTsKLQkJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFJYUF9IUlhEX1VOSU5JVCksCisJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFJYUF9IUlhEX1VOSU5JVCksCiAJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOwogCiAJCWlmIChlbGVtLT5za2IpIHsKQEAgLTM0NiwxNiArMzQ3LDE2IEBACiAJCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9MRU4pOwogCQkJCV9fcmF3X3dyaXRlcSgwLAogCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfQUREUik7Ci0JCQkJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFRYUF9IVFhEX0RPTkUpLAorCQkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFRYUF9IVFhEX0RPTkUpLAogCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwogCQkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJX19yYXdfd3JpdGV3KDAsCiAJCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9MRU4pOwotCQkJCV9fcmF3X3dyaXRlcShjcHVfdG9fYmU2NCgweDExMjIzMzQ0NTU2Njc3ODhVTEwpLAorCQkJCV9fcmF3X3dyaXRlcSgoX19mb3JjZSB1NjQpIGNwdV90b19iZTY0KDB4MTEyMjMzNDQ1NTY2Nzc4OFVMTCksCiAJCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9BRERSKTsKLQkJCQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoVFhQX0hUWERfVU5JTklUKSwKKwkJCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9VTklOSVQpLAogCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwogCQkJfQogCkBAIC0zOTAsNyArMzkxLDcgQEAKIAlmb3IgKGVsZW0gPSB0eF9yaW5nLT50b19jbGVhbjsgZWxlbSAhPSB0eF9yaW5nLT50b191c2U7CiAJICAgICBlbGVtID0gZWxlbS0+bmV4dCkgewogCQl0eHBfaHR4ZC5mbGFncyA9Ci0JCSAgICBiZTE2X3RvX2NwdShyZWFkdyhlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKSk7CisJCSAgICBiZTE2X3RvX2NwdSgoX19mb3JjZSBfX2JlMTYpIHJlYWR3KGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpKTsKIAogCQlpZiAodHhwX2h0eGQuZmxhZ3MgIT0gVFhQX0hUWERfRE9ORSkKIAkJCWJyZWFrOwpAQCAtMzk4LDcgKzM5OSw3IEBACiAJCWlmIChuZXRpZl9tc2dfdHhfZG9uZShjMl9wb3J0KSkgewogCQkJLyogUENJIHJlYWRzIGFyZSBleHBlbnNpdmUgaW4gZmFzdCBwYXRoICovCiAJCQl0eHBfaHR4ZC5sZW4gPQotCQkJICAgIGJlMTZfdG9fY3B1KHJlYWR3KGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfTEVOKSk7CisJCQkgICAgYmUxNl90b19jcHUoKF9fZm9yY2UgX19iZTE2KSByZWFkdyhlbGVtLT5od19kZXNjICsgQzJfVFhQX0xFTikpOwogCQkJcHJfZGVidWcoIiVzOiB0eCBkb25lIHNsb3QgJTNadSBzdGF0dXMgMHgleCBsZW4gIgogCQkJCSIlNXUgYnl0ZXNcbiIsCiAJCQkJbmV0ZGV2LT5uYW1lLCBlbGVtIC0gdHhfcmluZy0+c3RhcnQsCkBAIC00NDgsMTAgKzQ0OSwxMiBAQAogCS8qIFdyaXRlIHRoZSBkZXNjcmlwdG9yIHRvIHRoZSBhZGFwdGVyJ3MgcnggcmluZyAqLwogCV9fcmF3X3dyaXRldygwLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX1NUQVRVUyk7CiAJX19yYXdfd3JpdGV3KDAsIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfQ09VTlQpOwotCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNigodTE2KSBlbGVtLT5tYXBsZW4gLSBzaXplb2YoKnJ4cF9oZHIpKSwKKwlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNigodTE2KSBlbGVtLT5tYXBsZW4gLSBzaXplb2YoKnJ4cF9oZHIpKSwKIAkJICAgICBlbGVtLT5od19kZXNjICsgQzJfUlhQX0xFTik7Ci0JX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KGVsZW0tPm1hcGFkZHIpLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX0FERFIpOwotCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihSWFBfSFJYRF9SRUFEWSksIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOworCV9fcmF3X3dyaXRlcSgoX19mb3JjZSB1NjQpIGNwdV90b19iZTY0KGVsZW0tPm1hcGFkZHIpLAorCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfQUREUik7CisJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoUlhQX0hSWERfUkVBRFkpLAorCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOwogCiAJcHJfZGVidWcoInBhY2tldCBkcm9wcGVkXG4iKTsKIAljMl9wb3J0LT5uZXRzdGF0cy5yeF9kcm9wcGVkKys7CkBAIC02NTMsNyArNjU2LDcgQEAKIAkgICAgIGkrKywgZWxlbSsrKSB7CiAJCXJ4cF9oZHIgPSAoc3RydWN0IGMyX3J4cF9oZHIgKikgZWxlbS0+c2tiLT5kYXRhOwogCQlyeHBfaGRyLT5mbGFncyA9IDA7Ci0JCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihSWFBfSFJYRF9SRUFEWSksCisJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFJYUF9IUlhEX1JFQURZKSwKIAkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9GTEFHUyk7CiAJfQogCkBAIC03ODcsOSArNzkwLDEyIEBACiAJZWxlbS0+bWFwbGVuID0gbWFwbGVuOwogCiAJLyogVGVsbCBIVyB0byB4bWl0ICovCi0JX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KG1hcGFkZHIpLCBlbGVtLT5od19kZXNjICsgQzJfVFhQX0FERFIpOwotCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihtYXBsZW4pLCBlbGVtLT5od19kZXNjICsgQzJfVFhQX0xFTik7Ci0JX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFRYUF9IVFhEX1JFQURZKSwgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7CisJX19yYXdfd3JpdGVxKChfX2ZvcmNlIHU2NCkgY3B1X3RvX2JlNjQobWFwYWRkciksCisJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9BRERSKTsKKwlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihtYXBsZW4pLAorCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfTEVOKTsKKwlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9SRUFEWSksCisJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7CiAKIAljMl9wb3J0LT5uZXRzdGF0cy50eF9wYWNrZXRzKys7CiAJYzJfcG9ydC0+bmV0c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOwpAQCAtODEwLDExICs4MTYsMTEgQEAKIAkJCWVsZW0tPm1hcGxlbiA9IG1hcGxlbjsKIAogCQkJLyogVGVsbCBIVyB0byB4bWl0ICovCi0JCQlfX3Jhd193cml0ZXEoY3B1X3RvX2JlNjQobWFwYWRkciksCisJCQlfX3Jhd193cml0ZXEoKF9fZm9yY2UgdTY0KSBjcHVfdG9fYmU2NChtYXBhZGRyKSwKIAkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfQUREUik7Ci0JCQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYobWFwbGVuKSwKKwkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KG1hcGxlbiksCiAJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0xFTik7Ci0JCQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoVFhQX0hUWERfUkVBRFkpLAorCQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoVFhQX0hUWERfUkVBRFkpLAogCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7CiAKIAkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X3BhY2tldHMrKzsKQEAgLTEwMDUsNyArMTAxMSw3IEBACiAJLyogUmVtYXAgdGhlIGFkYXB0ZXIgUENJIHJlZ2lzdGVycyBpbiBCQVI0ICovCiAJbW1pb19yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHJlZzRfc3RhcnQgKyBDMl9QQ0lfUkVHU19PRkZTRVQsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgYzJfYWRhcHRlcl9wY2lfcmVncykpOwotCWlmIChtbWlvX3JlZ3MgPT0gMFVMKSB7CisJaWYgKCFtbWlvX3JlZ3MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJIlVuYWJsZSB0byByZW1hcCBhZGFwdGVyIFBDSSByZWdpc3RlcnMgaW4gQkFSNFxuIik7CiAJCXJldCA9IC1FSU87CkBAIC0xMDI5LDEwICsxMDM1LDEwIEBACiAJfQogCiAJLyogVmFsaWRhdGUgdGhlIGFkYXB0ZXIgdmVyc2lvbiAqLwotCWlmIChiZTMyX3RvX2NwdShyZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1ZFUlMpKSAhPSBDMl9WRVJTSU9OKSB7CisJaWYgKGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikgcmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19WRVJTKSkgIT0gQzJfVkVSU0lPTikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJWZXJzaW9uIG1pc21hdGNoICIKIAkJCSJbZnc9JXUsIGMyPSV1XSwgQWRhcHRlciBub3QgY2xhaW1lZFxuIiwKLQkJCWJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfVkVSUykpLAorCQkJYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKSByZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1ZFUlMpKSwKIAkJCUMyX1ZFUlNJT04pOwogCQlyZXQgPSAtRUlOVkFMOwogCQlpb3VubWFwKG1taW9fcmVncyk7CkBAIC0xMDQwLDEyICsxMDQ2LDEyIEBACiAJfQogCiAJLyogVmFsaWRhdGUgdGhlIGFkYXB0ZXIgSVZOICovCi0JaWYgKGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfSVZOKSkgIT0gQzJfSVZOKSB7CisJaWYgKGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikgcmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19JVk4pKSAhPSBDMl9JVk4pIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRG93bmxldmVsIEZJcm13YXJlIGxldmVsLiBZb3Ugc2hvdWxkIGJlIHVzaW5nICIKIAkJICAgICAgICJ0aGUgT3BlbklCIGRldmljZSBzdXBwb3J0IGtpdC4gIgogCQkgICAgICAgIltmdz0weCV4LCBjMj0weCV4XSwgQWRhcHRlciBub3QgY2xhaW1lZFxuIiwKLQkJCWJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfSVZOKSksCi0JCQlDMl9JVk4pOworCQkgICAgICAgYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKSByZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX0lWTikpLAorCQkgICAgICAgQzJfSVZOKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJaW91bm1hcChtbWlvX3JlZ3MpOwogCQlnb3RvIGJhaWwyOwpAQCAtMTA2OCw3ICsxMDc0LDcgQEAKIAogCS8qIEdldCB0aGUgbGFzdCBSWCBpbmRleCAqLwogCWMyZGV2LT5jdXJfcnggPQotCSAgICAoYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19IUlhfQ1VSKSkgLQorCSAgICAoYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKSByZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX0hSWF9DVVIpKSAtCiAJICAgICAweGZmZmZjMDAwKSAvIHNpemVvZihzdHJ1Y3QgYzJfcnhwX2Rlc2MpOwogCiAJLyogUmVxdWVzdCBhbiBpbnRlcnJ1cHQgbGluZSBmb3IgdGhlIGRyaXZlciAqLwpAQCAtMTA5MCw3ICsxMDk2LDcgQEAKIAl9CiAKIAkvKiBTYXZlIG9mZiB0aGUgYWN0dWFsIHNpemUgcHJpb3IgdG8gdW5tYXBwaW5nIG1taW9fcmVncyAqLwotCWt2YV9tYXBfc2l6ZSA9IGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUENJX1dJTlNJWkUpKTsKKwlrdmFfbWFwX3NpemUgPSBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpIHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUENJX1dJTlNJWkUpKTsKIAogCS8qIFVubWFwIHRoZSBhZGFwdGVyIFBDSSByZWdpc3RlcnMgaW4gQkFSNCAqLwogCWlvdW5tYXAobW1pb19yZWdzKTsKQEAgLTExMDksNyArMTExNSw3IEBACiAJLyogUmVtYXAgdGhlIGFkYXB0ZXIgSFJYRFEgUEEgc3BhY2UgdG8ga2VybmVsIFZBIHNwYWNlICovCiAJYzJkZXYtPm1taW9fcnhwX3JpbmcgPSBpb3JlbWFwX25vY2FjaGUocmVnNF9zdGFydCArIEMyX1JYUF9IUlhEUV9PRkZTRVQsCiAJCQkJCSAgICAgICBDMl9SWFBfSFJYRFFfU0laRSk7Ci0JaWYgKGMyZGV2LT5tbWlvX3J4cF9yaW5nID09IDBVTCkgeworCWlmICghYzJkZXYtPm1taW9fcnhwX3JpbmcpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIHJlbWFwIE1NSU8gSFJYRFEgcmVnaW9uXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBiYWlsNjsKQEAgLTExMTgsNyArMTEyNCw3IEBACiAJLyogUmVtYXAgdGhlIGFkYXB0ZXIgSFRYRFEgUEEgc3BhY2UgdG8ga2VybmVsIFZBIHNwYWNlICovCiAJYzJkZXYtPm1taW9fdHhwX3JpbmcgPSBpb3JlbWFwX25vY2FjaGUocmVnNF9zdGFydCArIEMyX1RYUF9IVFhEUV9PRkZTRVQsCiAJCQkJCSAgICAgICBDMl9UWFBfSFRYRFFfU0laRSk7Ci0JaWYgKGMyZGV2LT5tbWlvX3R4cF9yaW5nID09IDBVTCkgeworCWlmICghYzJkZXYtPm1taW9fdHhwX3JpbmcpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIHJlbWFwIE1NSU8gSFRYRFEgcmVnaW9uXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBiYWlsNzsKQEAgLTExMjksNyArMTEzNSw3IEBACiAKIAkvKiBSZW1hcCB0aGUgUENJIHJlZ2lzdGVycyBpbiBhZGFwdGVyIEJBUjAgdG8ga2VybmVsIFZBIHNwYWNlICovCiAJYzJkZXYtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUocmVnMF9zdGFydCwgcmVnMF9sZW4pOwotCWlmIChjMmRldi0+cmVncyA9PSAwVUwpIHsKKwlpZiAoIWMyZGV2LT5yZWdzKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZW1hcCBCQVIwXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBiYWlsODsKQEAgLTExMzksNyArMTE0NSw3IEBACiAJYzJkZXYtPnBhID0gcmVnNF9zdGFydCArIEMyX1BDSV9SRUdTX09GRlNFVDsKIAljMmRldi0+a3ZhID0gaW9yZW1hcF9ub2NhY2hlKHJlZzRfc3RhcnQgKyBDMl9QQ0lfUkVHU19PRkZTRVQsCiAJCQkJICAgICBrdmFfbWFwX3NpemUpOwotCWlmIChjMmRldi0+a3ZhID09IDBVTCkgeworCWlmICghYzJkZXYtPmt2YSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gcmVtYXAgQkFSNFxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gYmFpbDk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCmluZGV4IGZhNTgyMDAuLmQxMmEyNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlICJjMl9wcm92aWRlci5oIgogI2luY2x1ZGUgImMyX21xLmgiCkBAIC0zNDYsNyArMzQ1LDcgQEAKIAkvLwlzcGlubG9ja190IGFlcV9sb2NrOwogCS8vCXNwaW5sb2NrX3Qgcm5pY19sb2NrOwogCi0JdTE2ICpoaW50X2NvdW50OworCV9fYmUxNiAqaGludF9jb3VudDsKIAlkbWFfYWRkcl90IGhpbnRfY291bnRfZG1hOwogCXUxNiBoaW50c19yZWFkOwogCkBAIC00MjUsMTAgKzQyNCwxMCBAQAogI2VuZGlmCiAKICNkZWZpbmUgQzJfU0VUX0NVUl9SWChjMmRldiwgY3VyX3J4KSBcCi0JX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKGN1cl9yeCksIGMyZGV2LT5tbWlvX3R4cF9yaW5nICsgNDA5MikKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihjdXJfcngpLCBjMmRldi0+bW1pb190eHBfcmluZyArIDQwOTIpCiAKICNkZWZpbmUgQzJfR0VUX0NVUl9SWChjMmRldikgXAotCWJlMzJfdG9fY3B1KHJlYWRsKGMyZGV2LT5tbWlvX3R4cF9yaW5nICsgNDA5MikpCisJYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKSByZWFkbChjMmRldi0+bW1pb190eHBfcmluZyArIDQwOTIpKQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjMl9kZXYgKnRvX2MyZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQogewpAQCAtNDg1LDggKzQ4NCw4IEBACiBleHRlcm4gaW50IGMyX3JuaWNfaW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldik7CiBleHRlcm4gdm9pZCBjMl9ybmljX3Rlcm0oc3RydWN0IGMyX2RldiAqYzJkZXYpOwogZXh0ZXJuIHZvaWQgYzJfcm5pY19pbnRlcnJ1cHQoc3RydWN0IGMyX2RldiAqYzJkZXYpOwotZXh0ZXJuIGludCBjMl9kZWxfYWRkcihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTMyIGluYWRkciwgdTMyIGlubWFzayk7Ci1leHRlcm4gaW50IGMyX2FkZF9hZGRyKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCB1MzIgaW5hZGRyLCB1MzIgaW5tYXNrKTsKK2V4dGVybiBpbnQgYzJfZGVsX2FkZHIoc3RydWN0IGMyX2RldiAqYzJkZXYsIF9fYmUzMiBpbmFkZHIsIF9fYmUzMiBpbm1hc2spOworZXh0ZXJuIGludCBjMl9hZGRfYWRkcihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgX19iZTMyIGluYWRkciwgX19iZTMyIGlubWFzayk7CiAKIC8qIFFQcyAqLwogZXh0ZXJuIGludCBjMl9hbGxvY19xcChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3BkICpwZCwKQEAgLTU0NSw3ICs1NDQsNyBAQAogZXh0ZXJuIGludCBjMl9pbml0X21xc3BfcG9vbChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkgICAgIHN0cnVjdCBzcF9jaHVuayAqKnJvb3QpOwogZXh0ZXJuIHZvaWQgYzJfZnJlZV9tcXNwX3Bvb2woc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBzcF9jaHVuayAqcm9vdCk7Ci1leHRlcm4gdTE2ICpjMl9hbGxvY19tcXNwKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3Qgc3BfY2h1bmsgKmhlYWQsCi0JCQkgIGRtYV9hZGRyX3QgKmRtYV9hZGRyLCBnZnBfdCBnZnBfbWFzayk7Ci1leHRlcm4gdm9pZCBjMl9mcmVlX21xc3AodTE2ICogbXFzcCk7CitleHRlcm4gX19iZTE2ICpjMl9hbGxvY19tcXNwKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3Qgc3BfY2h1bmsgKmhlYWQsCisJCQkgICAgIGRtYV9hZGRyX3QgKmRtYV9hZGRyLCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gdm9pZCBjMl9mcmVlX21xc3AoX19iZTE2KiBtcXNwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYwppbmRleCBhMzE0MzliLi42MmFmNzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYwpAQCAtNjEsNyArNjEsNyBAQAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJICAgICAgICIlcyAtIFVuYWJsZSB0byBjb252ZXJ0IENNIHN0YXR1czogJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGMyX3N0YXR1cyk7CisJCSAgICAgICBfX2Z1bmNfXywgYzJfc3RhdHVzKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogfQpAQCAtMTkzLDkgKzE5Myw5IEBACiAJCXByX2RlYnVnKCIlczogZXZlbnQgPSAlcywgdXNlcl9jb250ZXh0PSVsbHgsICIKIAkJCSJyZXNvdXJjZV90eXBlPSV4LCAiCiAJCQkicmVzb3VyY2U9JXgsIHFwX3N0YXRlPSVzXG4iLAotCQkJX19GVU5DVElPTl9fLAorCQkJX19mdW5jX18sCiAJCQl0b19ldmVudF9zdHIoZXZlbnRfaWQpLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUod3ItPmFlLmFlX2dlbmVyaWMudXNlcl9jb250ZXh0KSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHdyLT5hZS5hZV9nZW5lcmljLnVzZXJfY29udGV4dCwKIAkJCWJlMzJfdG9fY3B1KHdyLT5hZS5hZV9nZW5lcmljLnJlc291cmNlX3R5cGUpLAogCQkJYmUzMl90b19jcHUod3ItPmFlLmFlX2dlbmVyaWMucmVzb3VyY2UpLAogCQkJdG9fcXBfc3RhdGVfc3RyKGJlMzJfdG9fY3B1KHdyLT5hZS5hZV9nZW5lcmljLnFwX3N0YXRlKSkpOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJCQlCVUdfT04oMSk7CiAJCQlwcl9kZWJ1ZygiJXM6JWQgVW5leHBlY3RlZCBldmVudF9pZD0lZCBvbiBRUD0lcCwgIgogCQkJCSJDTV9JRD0lcFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywKIAkJCQlldmVudF9pZCwgcXAsIGNtX2lkKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNzYsNyArMjc2LDcgQEAKIAkJcHJfZGVidWcoIkMyX1JFU19JTkRfRVAgZXZlbnRfaWQ9JWRcbiIsIGV2ZW50X2lkKTsKIAkJaWYgKGV2ZW50X2lkICE9IENDQUVfQ09OTkVDVElPTl9SRVFVRVNUKSB7CiAJCQlwcl9kZWJ1ZygiJXM6IEludmFsaWQgZXZlbnRfaWQ6ICVkXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgZXZlbnRfaWQpOworCQkJCV9fZnVuY19fLCBldmVudF9pZCk7CiAJCQlicmVhazsKIAkJfQogCQljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hbGxvYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FsbG9jLmMKaW5kZXggMDMxNWY5OS4uZTkxMTAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FsbG9jLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FsbG9jLmMKQEAgLTg3LDggKzg3LDggQEAKIAl9CiB9CiAKLXUxNiAqYzJfYWxsb2NfbXFzcChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IHNwX2NodW5rICpoZWFkLAotCQkgICBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZ2ZwX21hc2spCitfX2JlMTYgKmMyX2FsbG9jX21xc3Aoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBzcF9jaHVuayAqaGVhZCwKKwkJICAgICAgZG1hX2FkZHJfdCAqZG1hX2FkZHIsIGdmcF90IGdmcF9tYXNrKQogewogCXUxNiBtcXNwOwogCkBAIC0xMTMsMTQgKzExMywxNCBAQAogCQkqZG1hX2FkZHIgPSBoZWFkLT5kbWFfYWRkciArCiAJCQkgICAgKCh1bnNpZ25lZCBsb25nKSAmKGhlYWQtPnNoYXJlZF9wdHJbbXFzcF0pIC0KIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGhlYWQpOwotCQlwcl9kZWJ1ZygiJXMgYWRkciAlcCBkbWFfYWRkciAlbGx4XG4iLCBfX0ZVTkNUSU9OX18sCisJCXByX2RlYnVnKCIlcyBhZGRyICVwIGRtYV9hZGRyICVsbHhcbiIsIF9fZnVuY19fLAogCQkJICYoaGVhZC0+c2hhcmVkX3B0clttcXNwXSksICh1bnNpZ25lZCBsb25nIGxvbmcpICpkbWFfYWRkcik7Ci0JCXJldHVybiAmKGhlYWQtPnNoYXJlZF9wdHJbbXFzcF0pOworCQlyZXR1cm4gKF9fZm9yY2UgX19iZTE2ICopICYoaGVhZC0+c2hhcmVkX3B0clttcXNwXSk7CiAJfQogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGMyX2ZyZWVfbXFzcCh1MTYgKiBtcXNwKQordm9pZCBjMl9mcmVlX21xc3AoX19iZTE2ICptcXNwKQogewogCXN0cnVjdCBzcF9jaHVuayAqaGVhZDsKIAl1MTYgaWR4OwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJaGVhZCA9IChzdHJ1Y3Qgc3BfY2h1bmsgKikgKCh1bnNpZ25lZCBsb25nKSBtcXNwICYgUEFHRV9NQVNLKTsKIAogCS8qIExpbmsgaGVhZCB0byBuZXcgbXFzcCAqLwotCSptcXNwID0gaGVhZC0+aGVhZDsKKwkqbXFzcCA9IChfX2ZvcmNlIF9fYmUxNikgaGVhZC0+aGVhZDsKIAogCS8qIENvbXB1dGUgdGhlIHNoYXJlZF9wdHIgaW5kZXggKi8KIAlpZHggPSAoKHVuc2lnbmVkIGxvbmcpIG1xc3AgJiB+UEFHRV9NQVNLKSA+PiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfY3EuYwppbmRleCBkMmIzMzY2Li5iYjE3Y2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfY3EuYwpAQCAtNDIyLDggKzQyMiw4IEBACiAJCWdvdG8gYmFpbDE7CiAKIAlyZXBseSA9IChzdHJ1Y3QgYzJ3cl9jcV9kZXN0cm95X3JlcCAqKSAodW5zaWduZWQgbG9uZykgKHZxX3JlcS0+cmVwbHlfbXNnKTsKLQotCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisJaWYgKHJlcGx5KQorCQl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOwogICAgICAgYmFpbDE6CiAJdnFfcmVxX2ZyZWUoYzJkZXYsIHZxX3JlcSk7CiAgICAgICBiYWlsMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9pbnRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfaW50ci5jCmluZGV4IDBkMGJjMzMuLjNiNTA5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9pbnRyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2ludHIuYwpAQCAtMTc0LDcgKzE3NCwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JZXJyID0gYzJfZXJybm8ocmVwbHlfbXNnKTsKKwlpZiAocmVwbHlfbXNnKQorCQllcnIgPSBjMl9lcnJubyhyZXBseV9tc2cpOworCWVsc2UKKwkJZXJyID0gLUVOT01FTTsKKwogCWlmICghZXJyKSBzd2l0Y2ggKHJlcS0+ZXZlbnQpIHsKIAljYXNlIElXX0NNX0VWRU5UX0VTVEFCTElTSEVEOgogCQljMl9zZXRfcXBfc3RhdGUocmVxLT5xcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9tbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21tLmMKaW5kZXggMWU0ZjQ2NC4uYjUwNmZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21tLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqCSAgUmVwbHkgYnVmZmVyIF9pc18gZnJlZWQgYnkgdGhpcyBmdW5jdGlvbi4KICAqLwogc3RhdGljIGludAotc2VuZF9wYmxfbWVzc2FnZXMoc3RydWN0IGMyX2RldiAqYzJkZXYsIHUzMiBzdGFnX2luZGV4LAorc2VuZF9wYmxfbWVzc2FnZXMoc3RydWN0IGMyX2RldiAqYzJkZXYsIF9fYmUzMiBzdGFnX2luZGV4LAogCQkgIHVuc2lnbmVkIGxvbmcgdmEsIHUzMiBwYmxfZGVwdGgsCiAJCSAgc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxLCBpbnQgcGJsX3R5cGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfbXEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9tcS5jCmluZGV4IGI4OGE3NTUuLjBjZGRjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9tcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9tcS5jCkBAIC02NCw3ICs2NCw3IEBACiAJCXEtPnByaXYgPSAocS0+cHJpdiArIDEpICUgcS0+cV9zaXplOwogCQlxLT5oaW50X2NvdW50Kys7CiAJCS8qIFVwZGF0ZSBwZWVyJ3Mgb2Zmc2V0LiAqLwotCQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYocS0+cHJpdiksICZxLT5wZWVyLT5zaGFyZWQpOworCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihxLT5wcml2KSwgJnEtPnBlZXItPnNoYXJlZCk7CiAJfQogfQogCkBAIC0xMDUsNyArMTA1LDcgQEAKICNlbmRpZgogCQlxLT5wcml2ID0gKHEtPnByaXYgKyAxKSAlIHEtPnFfc2l6ZTsKIAkJLyogVXBkYXRlIHBlZXIncyBvZmZzZXQuICovCi0JCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihxLT5wcml2KSwgJnEtPnBlZXItPnNoYXJlZCk7CisJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KHEtPnByaXYpLCAmcS0+cGVlci0+c2hhcmVkKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9tcS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21xLmgKaW5kZXggOTE4NWJiYi4uYWNlZGUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21xLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21xLmgKQEAgLTc1LDcgKzc1LDcgQEAKIAl1MTYgaGludF9jb3VudDsKIAl1MTYgcHJpdjsKIAlzdHJ1Y3QgYzJfbXFfc2hhcmVkIF9faW9tZW0gKnBlZXI7Ci0JdTE2ICpzaGFyZWQ7CisJX19iZTE2ICpzaGFyZWQ7CiAJZG1hX2FkZHJfdCBzaGFyZWRfZG1hOwogCXUzMiBxX3NpemU7CiAJdTMyIG1zZ19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYwppbmRleCA3YTZjZWNlLi42YWYyYzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYwpAQCAtNjcsNyArNjcsNyBAQAogewogCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gdG9fYzJkZXYoaWJkZXYpOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAkqcHJvcHMgPSBjMmRldi0+cHJvcHM7CiAJcmV0dXJuIDA7CkBAIC03Niw3ICs3Niw3IEBACiBzdGF0aWMgaW50IGMyX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCiAJCQkgdTggcG9ydCwgc3RydWN0IGliX3BvcnRfYXR0ciAqcHJvcHMpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAlwcm9wcy0+bWF4X210dSA9IElCX01UVV80MDk2OwogCXByb3BzLT5saWQgPSAwOwpAQCAtMTAyLDE0ICsxMDIsMTQgQEAKIAkJCSAgdTggcG9ydCwgaW50IHBvcnRfbW9kaWZ5X21hc2ssCiAJCQkgIHN0cnVjdCBpYl9wb3J0X21vZGlmeSAqcHJvcHMpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYzJfcXVlcnlfcGtleShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKIAkJCSB1OCBwb3J0LCB1MTYgaW5kZXgsIHUxNiAqIHBrZXkpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJKnBrZXkgPSAwOwogCXJldHVybiAwOwogfQpAQCAtMTE5LDcgKzExOSw3IEBACiB7CiAJc3RydWN0IGMyX2RldiAqYzJkZXYgPSB0b19jMmRldihpYmRldik7CiAKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAltZW1zZXQoJihnaWQtPnJhd1swXSksIDAsIHNpemVvZihnaWQtPnJhdykpOwogCW1lbWNweSgmKGdpZC0+cmF3WzBdKSwgYzJkZXYtPnBzZXVkb19uZXRkZXYtPmRldl9hZGRyLCA2KTsKIApAQCAtMTM0LDcgKzEzNCw3IEBACiB7CiAJc3RydWN0IGMyX3Vjb250ZXh0ICpjb250ZXh0OwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJY29udGV4dCA9IGttYWxsb2Moc2l6ZW9mKCpjb250ZXh0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb250ZXh0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTE0NCwxNCArMTQ0LDE0IEBACiAKIHN0YXRpYyBpbnQgYzJfZGVhbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJa2ZyZWUoY29udGV4dCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYzJfbW1hcF91YXIoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBACiAJc3RydWN0IGMyX3BkICpwZDsKIAlpbnQgZXJyOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAlwZCA9IGttYWxsb2Moc2l6ZW9mKCpwZCksIEdGUF9LRVJORUwpOwogCWlmICghcGQpCkBAIC0xODcsNyArMTg3LDcgQEAKIAogc3RhdGljIGludCBjMl9kZWFsbG9jX3BkKHN0cnVjdCBpYl9wZCAqcGQpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJYzJfcGRfZnJlZSh0b19jMmRldihwZC0+ZGV2aWNlKSwgdG9fYzJwZChwZCkpOwogCWtmcmVlKHBkKTsKIApAQCAtMTk2LDEzICsxOTYsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBpYl9haCAqYzJfYWhfY3JlYXRlKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKQogewotCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogfQogCiBzdGF0aWMgaW50IGMyX2FoX2Rlc3Ryb3koc3RydWN0IGliX2FoICphaCkKIHsKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIApAQCAtMjMwLDcgKzIzMCw3IEBACiAKIAlxcCA9IGMyX2ZpbmRfcXBuKGMyZGV2LCBxcG4pOwogCXByX2RlYnVnKCIlcyBSZXR1cm5pbmcgUVA9JXAgZm9yIFFQTj0lZCwgZGV2aWNlPSVwLCByZWZjb3VudD0lZFxuIiwKLQkJX19GVU5DVElPTl9fLCBxcCwgcXBuLCBkZXZpY2UsCisJCV9fZnVuY19fLCBxcCwgcXBuLCBkZXZpY2UsCiAJCShxcD9hdG9taWNfcmVhZCgmcXAtPnJlZmNvdW50KTowKSk7CiAKIAlyZXR1cm4gKHFwPyZxcC0+aWJxcDpOVUxMKTsKQEAgLTI0MywxMyArMjQzLDE2IEBACiAJc3RydWN0IGMyX3FwICpxcDsKIAlpbnQgZXJyOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlpZiAoaW5pdF9hdHRyLT5jcmVhdGVfZmxhZ3MpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJc3dpdGNoIChpbml0X2F0dHItPnFwX3R5cGUpIHsKIAljYXNlIElCX1FQVF9SQzoKIAkJcXAgPSBremFsbG9jKHNpemVvZigqcXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFxcCkgewotCQkJcHJfZGVidWcoIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgUVBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcl9kZWJ1ZygiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBRUFxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCX0KIAkJc3Bpbl9sb2NrX2luaXQoJnFwLT5sb2NrKTsKQEAgLTI2Niw3ICsyNjksNyBAQAogCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByX2RlYnVnKCIlczogSW52YWxpZCBRUCB0eXBlOiAlZFxuIiwgX19GVU5DVElPTl9fLAorCQlwcl9kZWJ1ZygiJXM6IEludmFsaWQgUVAgdHlwZTogJWRcbiIsIF9fZnVuY19fLAogCQkJaW5pdF9hdHRyLT5xcF90eXBlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJCWJyZWFrOwpAQCAtMjg1LDcgKzI4OCw3IEBACiAJc3RydWN0IGMyX3FwICpxcCA9IHRvX2MycXAoaWJfcXApOwogCiAJcHJfZGVidWcoIiVzOiV1IHFwPSVwLHFwLT5zdGF0ZT0lZFxuIiwKLQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXyxpYl9xcCxxcC0+c3RhdGUpOworCQlfX2Z1bmNfXywgX19MSU5FX18sIGliX3FwLCBxcC0+c3RhdGUpOwogCWMyX2ZyZWVfcXAodG9fYzJkZXYoaWJfcXAtPmRldmljZSksIHFwKTsKIAlrZnJlZShxcCk7CiAJcmV0dXJuIDA7CkBAIC0zMDAsMTMgKzMwMywxMyBAQAogCiAJY3EgPSBrbWFsbG9jKHNpemVvZigqY3EpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNxKSB7Ci0JCXByX2RlYnVnKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIENRXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcl9kZWJ1ZygiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBDUVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKIAllcnIgPSBjMl9pbml0X2NxKHRvX2MyZGV2KGliZGV2KSwgZW50cmllcywgTlVMTCwgY3EpOwogCWlmIChlcnIpIHsKLQkJcHJfZGVidWcoIiVzOiBlcnJvciBpbml0aWFsaXppbmcgQ1FcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByX2RlYnVnKCIlczogZXJyb3IgaW5pdGlhbGl6aW5nIENRXG4iLCBfX2Z1bmNfXyk7CiAJCWtmcmVlKGNxKTsKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CkBAIC0zMTgsNyArMzIxLDcgQEAKIHsKIAlzdHJ1Y3QgYzJfY3EgKmNxID0gdG9fYzJjcShpYl9jcSk7CiAKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCWMyX2ZyZWVfY3EodG9fYzJkZXYoaWJfY3EtPmRldmljZSksIGNxKTsKIAlrZnJlZShjcSk7CkBAIC00MDAsNyArNDAzLDcgQEAKIAltci0+dW1lbSA9IE5VTEw7CiAJcHJfZGVidWcoIiVzIC0gcGFnZSBzaGlmdCAlZCwgcGJsX2RlcHRoICVkLCB0b3RhbF9sZW4gJXUsICIKIAkJIippb3ZhX3N0YXJ0ICVsbHgsIGZpcnN0IHBhICVsbHgsIGxhc3QgcGEgJWxseFxuIiwKLQkJX19GVU5DVElPTl9fLCBwYWdlX3NoaWZ0LCBwYmxfZGVwdGgsIHRvdGFsX2xlbiwKKwkJX19mdW5jX18sIHBhZ2Vfc2hpZnQsIHBibF9kZXB0aCwgdG90YWxfbGVuLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSAqaW92YV9zdGFydCwKIAkgICAgICAgCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBhZ2VfbGlzdFswXSwKIAkgICAgICAgCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBhZ2VfbGlzdFtwYmxfZGVwdGgtMV0pOwpAQCAtNDIyLDcgKzQyNSw3IEBACiAJc3RydWN0IGliX3BoeXNfYnVmIGJsOwogCXU2NCBrdmEgPSAwOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAkvKiBBTVNPMTEwMCBsaW1pdCAqLwogCWJsLnNpemUgPSAweGZmZmZmZmZmOwpAQCAtNDQyLDcgKzQ0NSw3IEBACiAJc3RydWN0IGMyX3BkICpjMnBkID0gdG9fYzJwZChwZCk7CiAJc3RydWN0IGMyX21yICpjMm1yOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAljMm1yID0ga21hbGxvYyhzaXplb2YoKmMybXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWMybXIpCkBAIC01MDYsNyArNTA5LDcgQEAKIAlzdHJ1Y3QgYzJfbXIgKm1yID0gdG9fYzJtcihpYl9tcik7CiAJaW50IGVycjsKIAotCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCiAJZXJyID0gYzJfc3RhZ19kZWFsbG9jKHRvX2MyZGV2KGliX21yLT5kZXZpY2UpLCBpYl9tci0+bGtleSk7CiAJaWYgKGVycikKQEAgLTUyMCw0NSArNTIzLDQ5IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19yZXYoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19yZXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgYzJfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGMyX2RldiwgaWJkZXYuY2xhc3NfZGV2KTsKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBkZXYtPnByb3BzLmh3X3Zlcik7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYzJfZGV2LCBpYmRldi5kZXYpOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgYzJkZXYtPnByb3BzLmh3X3Zlcik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfZndfdmVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZndfdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGMyX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBjMl9kZXYsIGliZGV2LmNsYXNzX2Rldik7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjMl9kZXYsIGliZGV2LmRldik7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4LiV4LiV4XG4iLAotCQkgICAgICAgKGludCkgKGRldi0+cHJvcHMuZndfdmVyID4+IDMyKSwKLQkJICAgICAgIChpbnQpIChkZXYtPnByb3BzLmZ3X3ZlciA+PiAxNikgJiAweGZmZmYsCi0JCSAgICAgICAoaW50KSAoZGV2LT5wcm9wcy5md192ZXIgJiAweGZmZmYpKTsKKwkJICAgICAgIChpbnQpIChjMmRldi0+cHJvcHMuZndfdmVyID4+IDMyKSwKKwkJICAgICAgIChpbnQpIChjMmRldi0+cHJvcHMuZndfdmVyID4+IDE2KSAmIDB4ZmZmZiwKKwkJICAgICAgIChpbnQpIChjMmRldi0+cHJvcHMuZndfdmVyICYgMHhmZmZmKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiQU1TTzExMDBcbiIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2JvYXJkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYm9hcmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQogewotCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUuKnNcbiIsIDMyLCAiQU1TTzExMDAgQm9hcmQgSUQiKTsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGh3X3JldiwgU19JUlVHTywgc2hvd19yZXYsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZ3X3ZlciwgU19JUlVHTywgc2hvd19md192ZXIsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGhjYV90eXBlLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYm9hcmRfaWQsIFNfSVJVR08sIHNob3dfYm9hcmQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGh3X3JldiwgU19JUlVHTywgc2hvd19yZXYsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGZ3X3ZlciwgU19JUlVHTywgc2hvd19md192ZXIsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhjYV90eXBlLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfaWQsIFNfSVJVR08sIHNob3dfYm9hcmQsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmMyX2NsYXNzX2F0dHJpYnV0ZXNbXSA9IHsKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaHdfcmV2LAotCSZjbGFzc19kZXZpY2VfYXR0cl9md192ZXIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hjYV90eXBlLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ib2FyZF9pZAorc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpjMl9kZXZfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9od19yZXYsCisJJmRldl9hdHRyX2Z3X3ZlciwKKwkmZGV2X2F0dHJfaGNhX3R5cGUsCisJJmRldl9hdHRyX2JvYXJkX2lkCiB9OwogCiBzdGF0aWMgaW50IGMyX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLApAQCAtNTc1LDEzICs1ODIsMTMgQEAKIAogc3RhdGljIGludCBjMl9tdWx0aWNhc3RfYXR0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKIHN0YXRpYyBpbnQgYzJfbXVsdGljYXN0X2RldGFjaChzdHJ1Y3QgaWJfcXAgKmlicXAsIHVuaW9uIGliX2dpZCAqZ2lkLCB1MTYgbGlkKQogewotCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXJldHVybiAtRU5PU1lTOwogfQogCkBAIC01OTIsMTMgKzU5OSwxMyBAQAogCQkJICBzdHJ1Y3QgaWJfZ3JoICppbl9ncmgsCiAJCQkgIHN0cnVjdCBpYl9tYWQgKmluX21hZCwgc3RydWN0IGliX21hZCAqb3V0X21hZCkKIHsKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAogc3RhdGljIGludCBjMl9jb25uZWN0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsIHN0cnVjdCBpd19jbV9jb25uX3BhcmFtICppd19wYXJhbSkKIHsKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCS8qIFJlcXVlc3QgYSBjb25uZWN0aW9uICovCiAJcmV0dXJuIGMyX2xscF9jb25uZWN0KGNtX2lkLCBpd19wYXJhbSk7CkBAIC02MDYsNyArNjEzLDcgQEAKIAogc3RhdGljIGludCBjMl9hY2NlcHQoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKml3X3BhcmFtKQogewotCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCiAJLyogQWNjZXB0IHRoZSBuZXcgY29ubmVjdGlvbiAqLwogCXJldHVybiBjMl9sbHBfYWNjZXB0KGNtX2lkLCBpd19wYXJhbSk7CkBAIC02MTYsNyArNjIzLDcgQEAKIHsKIAlpbnQgZXJyOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAllcnIgPSBjMl9sbHBfcmVqZWN0KGNtX2lkLCBwZGF0YSwgcGRhdGFfbGVuKTsKIAlyZXR1cm4gZXJyOwpAQCAtNjI2LDEwICs2MzMsMTAgQEAKIHsKIAlpbnQgZXJyOwogCi0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJZXJyID0gYzJfbGxwX3NlcnZpY2VfY3JlYXRlKGNtX2lkLCBiYWNrbG9nKTsKIAlwcl9kZWJ1ZygiJXM6JXUgZXJyPSVkXG4iLAotCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fLAorCQlfX2Z1bmNfXywgX19MSU5FX18sCiAJCWVycik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTYzNyw3ICs2NDQsNyBAQAogc3RhdGljIGludCBjMl9zZXJ2aWNlX2Rlc3Ryb3koc3RydWN0IGl3X2NtX2lkICpjbV9pZCkKIHsKIAlpbnQgZXJyOwotCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCiAJZXJyID0gYzJfbGxwX3NlcnZpY2VfZGVzdHJveShjbV9pZCk7CiAKQEAgLTc0Myw3ICs3NTAsNyBAQAogCW5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKm5ldGRldiksIG5hbWUsIHNldHVwKTsKIAlpZiAoIW5ldGRldikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyAtICBldGhlcmRldiBhbGxvYyBmYWlsZWQiLAotCQkJX19GVU5DVElPTl9fKTsKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC03ODAsNyArNzg3LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDI7CiAKLQlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXByX2RlYnVnKCIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAlzdHJsY3B5KGRldi0+aWJkZXYubmFtZSwgImFtc28lZCIsIElCX0RFVklDRV9OQU1FX01BWCk7CiAJZGV2LT5pYmRldi5vd25lciA9IFRISVNfTU9EVUxFOwogCWRldi0+aWJkZXYudXZlcmJzX2NtZF9tYXNrID0KQEAgLTg1OCw5ICs4NjUsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0MTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMyX2NsYXNzX2F0dHJpYnV0ZXMpOyArK2kpIHsKLQkJcmV0ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmliZGV2LmNsYXNzX2RldiwKLQkJCQkJICAgICAgIGMyX2NsYXNzX2F0dHJpYnV0ZXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMyX2Rldl9hdHRyaWJ1dGVzKTsgKytpKSB7CisJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5pYmRldi5kZXYsCisJCQkJCSAgICAgICBjMl9kZXZfYXR0cmlidXRlc1tpXSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDA7CiAJfQpAQCAtODczLDEzICs4ODAsMTMgQEAKIG91dDI6CiAJZnJlZV9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKIG91dDM6Ci0JcHJfZGVidWcoIiVzOiV1IHJldD0lZFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgcmV0KTsKKwlwcl9kZWJ1ZygiJXM6JXUgcmV0PSVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBjMl91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgYzJfZGV2ICpkZXYpCiB7Ci0JcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKIAlmcmVlX25ldGRldihkZXYtPnBzZXVkb19uZXRkZXYpOwogCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmliZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMKaW5kZXggMDFkMDc4Ni4uYTZkODk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWludCBuZXdfc3RhdGUgPSB0b19pYl9zdGF0ZShjMl9zdGF0ZSk7CiAKIAlwcl9kZWJ1ZygiJXM6IHFwWyVwXSBzdGF0ZSBtb2RpZnkgJXMgLS0+ICVzXG4iLAotCSAgICAgICBfX0ZVTkNUSU9OX18sCisJICAgICAgIF9fZnVuY19fLAogCQlxcCwKIAkJdG9faWJfc3RhdGVfc3RyKHFwLT5zdGF0ZSksCiAJCXRvX2liX3N0YXRlX3N0cihuZXdfc3RhdGUpKTsKQEAgLTE0MSw3ICsxNDEsNyBAQAogCWludCBlcnI7CiAKIAlwcl9kZWJ1ZygiJXM6JWQgcXA9JXAsICVzIC0tPiAlc1xuIiwKLQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywKKwkJX19mdW5jX18sIF9fTElORV9fLAogCQlxcCwKIAkJdG9faWJfc3RhdGVfc3RyKHFwLT5zdGF0ZSksCiAJCXRvX2liX3N0YXRlX3N0cihhdHRyLT5xcF9zdGF0ZSkpOwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJCXFwLT5zdGF0ZSA9IG5leHRfc3RhdGU7CiAjaWZkZWYgREVCVUcKIAllbHNlCi0JCXByX2RlYnVnKCIlczogYzJfZXJybm89JWRcbiIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJcHJfZGVidWcoIiVzOiBjMl9lcnJubz0lZFxuIiwgX19mdW5jX18sIGVycik7CiAjZW5kaWYKIAkvKgogCSAqIElmIHdlJ3JlIGdvaW5nIHRvIGVycm9yIGFuZCBnZW5lcmF0aW5nIHRoZSBldmVudCBoZXJlLCB0aGVuCkBAIC0yNDMsNyArMjQzLDcgQEAKIAl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKIAogCXByX2RlYnVnKCIlczolZCBxcD0lcCwgY3VyX3N0YXRlPSVzXG4iLAotCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fLAorCQlfX2Z1bmNfXywgX19MSU5FX18sCiAJCXFwLAogCQl0b19pYl9zdGF0ZV9zdHIocXAtPnN0YXRlKSk7CiAJcmV0dXJuIGVycjsKQEAgLTgxMSwxNiArODExLDI0IEBACiAKIAkJc3dpdGNoIChpYl93ci0+b3Bjb2RlKSB7CiAJCWNhc2UgSUJfV1JfU0VORDoKLQkJCWlmIChpYl93ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKSB7Ci0JCQkJYzJfd3Jfc2V0X2lkKCZ3ciwgQzJfV1JfVFlQRV9TRU5EX1NFKTsKLQkJCQltc2dfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYzJ3cl9zZW5kX3JlcSk7CisJCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lOVjoKKwkJCWlmIChpYl93ci0+b3Bjb2RlID09IElCX1dSX1NFTkQpIHsKKwkJCQlpZiAoaWJfd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKKwkJCQkJYzJfd3Jfc2V0X2lkKCZ3ciwgQzJfV1JfVFlQRV9TRU5EX1NFKTsKKwkJCQllbHNlCisJCQkJCWMyX3dyX3NldF9pZCgmd3IsIEMyX1dSX1RZUEVfU0VORCk7CisJCQkJd3Iuc3F3ci5zZW5kLnJlbW90ZV9zdGFnID0gMDsKIAkJCX0gZWxzZSB7Ci0JCQkJYzJfd3Jfc2V0X2lkKCZ3ciwgQzJfV1JfVFlQRV9TRU5EKTsKLQkJCQltc2dfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYzJ3cl9zZW5kX3JlcSk7CisJCQkJaWYgKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCisJCQkJCWMyX3dyX3NldF9pZCgmd3IsIEMyX1dSX1RZUEVfU0VORF9TRV9JTlYpOworCQkJCWVsc2UKKwkJCQkJYzJfd3Jfc2V0X2lkKCZ3ciwgQzJfV1JfVFlQRV9TRU5EX0lOVik7CisJCQkJd3Iuc3F3ci5zZW5kLnJlbW90ZV9zdGFnID0KKwkJCQkJY3B1X3RvX2JlMzIoaWJfd3ItPmV4LmludmFsaWRhdGVfcmtleSk7CiAJCQl9CiAKLQkJCXdyLnNxd3Iuc2VuZC5yZW1vdGVfc3RhZyA9IDA7Ci0JCQltc2dfc2l6ZSArPSBzaXplb2Yoc3RydWN0IGMyX2RhdGFfYWRkcikgKiBpYl93ci0+bnVtX3NnZTsKKwkJCW1zZ19zaXplID0gc2l6ZW9mKHN0cnVjdCBjMndyX3NlbmRfcmVxKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBjMl9kYXRhX2FkZHIpICogaWJfd3ItPm51bV9zZ2U7CiAJCQlpZiAoaWJfd3ItPm51bV9zZ2UgPiBxcC0+c2VuZF9zZ2xfZGVwdGgpIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3JuaWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9ybmljLmMKaW5kZXggMTY4N2M1MS4uOWEwNTRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3JuaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcm5pYy5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIC8qCiAgKiBBZGQgYW4gSVAgYWRkcmVzcyB0byB0aGUgUk5JQyBpbnRlcmZhY2UKICAqLwotaW50IGMyX2FkZF9hZGRyKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCB1MzIgaW5hZGRyLCB1MzIgaW5tYXNrKQoraW50IGMyX2FkZF9hZGRyKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBfX2JlMzIgaW5hZGRyLCBfX2JlMzIgaW5tYXNrKQogewogCXN0cnVjdCBjMl92cV9yZXEgKnZxX3JlcTsKIAlzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXEgKndyOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAvKgogICogRGVsZXRlIGFuIElQIGFkZHJlc3MgZnJvbSB0aGUgUk5JQyBpbnRlcmZhY2UKICAqLwotaW50IGMyX2RlbF9hZGRyKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCB1MzIgaW5hZGRyLCB1MzIgaW5tYXNrKQoraW50IGMyX2RlbF9hZGRyKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBfX2JlMzIgaW5hZGRyLCBfX2JlMzIgaW5tYXNrKQogewogCXN0cnVjdCBjMl92cV9yZXEgKnZxX3JlcTsKIAlzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXEgKndyOwpAQCAtNDU1LDcgKzQ1NSw4IEBACiAJICAgICBJQl9ERVZJQ0VfQ1VSUl9RUF9TVEFURV9NT0QgfAogCSAgICAgSUJfREVWSUNFX1NZU19JTUFHRV9HVUlEIHwKIAkgICAgIElCX0RFVklDRV9aRVJPX1NUQUcgfAotCSAgICAgSUJfREVWSUNFX1NFTkRfV19JTlYgfCBJQl9ERVZJQ0VfTUVNX1dJTkRPVyk7CisJICAgICBJQl9ERVZJQ0VfTUVNX1dJTkRPVyB8CisJICAgICBJQl9ERVZJQ0VfU0VORF9XX0lOVik7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgcXB0cl9hcnJheSAqLwogCWMyZGV2LT5xcHRyX2FycmF5ID0gdm1hbGxvYyhDMl9NQVhfQ1FTICogc2l6ZW9mKHZvaWQgKikpOwpAQCAtNTA2LDE3ICs1MDcsMTcgQEAKIAltbWlvX3JlZ3MgPSBjMmRldi0+a3ZhOwogCS8qIEluaXRpYWxpemUgdGhlIFZlcmJzIFJlcXVlc3QgUXVldWUgKi8KIAljMl9tcV9yZXFfaW5pdCgmYzJkZXYtPnJlcV92cSwgMCwKLQkJICAgICAgIGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTBfUVNJWkUpKSwKLQkJICAgICAgIGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTBfTVNHU0laRSkpLAorCQkgICAgICAgYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKSByZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1EwX1FTSVpFKSksCisJCSAgICAgICBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpIHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTBfTVNHU0laRSkpLAogCQkgICAgICAgbW1pb19yZWdzICsKLQkJICAgICAgIGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTBfUE9PTFNUQVJUKSksCisJCSAgICAgICBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpIHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTBfUE9PTFNUQVJUKSksCiAJCSAgICAgICBtbWlvX3JlZ3MgKwotCQkgICAgICAgYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMF9TSEFSRUQpKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikgcmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMF9TSEFSRUQpKSwKIAkJICAgICAgIEMyX01RX0FEQVBURVJfVEFSR0VUKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIFZlcmJzIFJlcGx5IFF1ZXVlICovCi0JcXNpemUgPSBiZTMyX3RvX2NwdShyZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1ExX1FTSVpFKSk7Ci0JbXNnc2l6ZSA9IGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTFfTVNHU0laRSkpOworCXFzaXplID0gYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKSByZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1ExX1FTSVpFKSk7CisJbXNnc2l6ZSA9IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikgcmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMV9NU0dTSVpFKSk7CiAJcTFfcGFnZXMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmMyZGV2LT5wY2lkZXYtPmRldiwgcXNpemUgKiBtc2dzaXplLAogCQkJCSAgICAgICZjMmRldi0+cmVwX3ZxLmhvc3RfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXExX3BhZ2VzKSB7CkBAIC01MjQsNyArNTI1LDcgQEAKIAkJZ290byBiYWlsMTsKIAl9CiAJcGNpX3VubWFwX2FkZHJfc2V0KCZjMmRldi0+cmVwX3ZxLCBtYXBwaW5nLCBjMmRldi0+cmVwX3ZxLmhvc3RfZG1hKTsKLQlwcl9kZWJ1ZygiJXMgcmVwX3ZxIHZhICVwIGRtYSAlbGx4XG4iLCBfX0ZVTkNUSU9OX18sIHExX3BhZ2VzLAorCXByX2RlYnVnKCIlcyByZXBfdnEgdmEgJXAgZG1hICVsbHhcbiIsIF9fZnVuY19fLCBxMV9wYWdlcywKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGMyZGV2LT5yZXBfdnEuaG9zdF9kbWEpOwogCWMyX21xX3JlcF9pbml0KCZjMmRldi0+cmVwX3ZxLAogCQkgICAxLApAQCAtNTMyLDEyICs1MzMsMTIgQEAKIAkJICAgbXNnc2l6ZSwKIAkJICAgcTFfcGFnZXMsCiAJCSAgIG1taW9fcmVncyArCi0JCSAgIGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTFfU0hBUkVEKSksCisJCSAgIGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikgcmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMV9TSEFSRUQpKSwKIAkJICAgQzJfTVFfSE9TVF9UQVJHRVQpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgQXN5bmNocm9udXMgRXZlbnQgUXVldWUgKi8KLQlxc2l6ZSA9IGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTJfUVNJWkUpKTsKLQltc2dzaXplID0gYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMl9NU0dTSVpFKSk7CisJcXNpemUgPSBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpIHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTJfUVNJWkUpKTsKKwltc2dzaXplID0gYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKSByZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1EyX01TR1NJWkUpKTsKIAlxMl9wYWdlcyA9IGRtYV9hbGxvY19jb2hlcmVudCgmYzJkZXYtPnBjaWRldi0+ZGV2LCBxc2l6ZSAqIG1zZ3NpemUsCiAJCQkJICAgICAgJmMyZGV2LT5hZXEuaG9zdF9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghcTJfcGFnZXMpIHsKQEAgLTU0NSw3ICs1NDYsNyBAQAogCQlnb3RvIGJhaWwyOwogCX0KIAlwY2lfdW5tYXBfYWRkcl9zZXQoJmMyZGV2LT5hZXEsIG1hcHBpbmcsIGMyZGV2LT5hZXEuaG9zdF9kbWEpOwotCXByX2RlYnVnKCIlcyBhZXEgdmEgJXAgZG1hICVsbHhcbiIsIF9fRlVOQ1RJT05fXywgcTJfcGFnZXMsCisJcHJfZGVidWcoIiVzIGFlcSB2YSAlcCBkbWEgJWxseFxuIiwgX19mdW5jX18sIHEyX3BhZ2VzLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYzJkZXYtPmFlcS5ob3N0X2RtYSk7CiAJYzJfbXFfcmVwX2luaXQoJmMyZGV2LT5hZXEsCiAJCSAgICAgICAyLApAQCAtNTUzLDcgKzU1NCw3IEBACiAJCSAgICAgICBtc2dzaXplLAogCQkgICAgICAgcTJfcGFnZXMsCiAJCSAgICAgICBtbWlvX3JlZ3MgKwotCQkgICAgICAgYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMl9TSEFSRUQpKSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikgcmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMl9TSEFSRUQpKSwKIAkJICAgICAgIEMyX01RX0hPU1RfVEFSR0VUKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHZlcmJzIHJlcXVlc3QgYWxsb2NhdG9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jCmluZGV4IGNmZGFjYjEuLjljZTc4MTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJICovCiAJd2hpbGUgKG1zZyA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCIlczolZCBubyBhdmFpbGFibGUgbXNnIGluIFZRLCB3YWl0aW5nLi4uXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmX193YWl0LCBjdXJyZW50KTsKIAkJYWRkX3dhaXRfcXVldWUoJmMyZGV2LT5yZXFfdnFfd28sICZfX3dhaXQpOwogCQlzcGluX3VubG9jaygmYzJkZXYtPnZxbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfd3IuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oCmluZGV4IDNlYzZjNDMuLmM2NWZiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oCkBAIC0xODAsOCArMTgwLDggQEAKIH07CiAKIHN0cnVjdCBjMl9uZXRhZGRyIHsKLQl1MzIgaXBfYWRkcjsKLQl1MzIgbmV0bWFzazsKKwlfX2JlMzIgaXBfYWRkcjsKKwlfX2JlMzIgbmV0bWFzazsKIAl1MzIgbXR1OwogfTsKIApAQCAtMTk5LDkgKzE5OSw5IEBACiAgKiBBIFNjYXR0ZXIgR2F0aGVyIEVudHJ5LgogICovCiBzdHJ1Y3QgYzJfZGF0YV9hZGRyIHsKLQl1MzIgc3RhZzsKLQl1MzIgbGVuZ3RoOwotCXU2NCB0bzsKKwlfX2JlMzIgc3RhZzsKKwlfX2JlMzIgbGVuZ3RoOworCV9fYmU2NCB0bzsKIH07CiAKIC8qCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkgKiBmcm9tIHRoZSBob3N0IHRvIGFkYXB0ZXIgYnkgbGliY2NpbCwgYnV0IHdlIGNvcHkgaXQgYW55d2F5CiAJICogdG8gbWFrZSB0aGUgbWVtY3B5IHRvIHRoZSBhZGFwdGVyIGJldHRlciBhbGlnbmVkLgogCSAqLwotCXUzMiB3cWVfY291bnQ7CisJX19iZTMyIHdxZV9jb3VudDsKIAogCS8qIFB1dCB0aGVzZSBmaWVsZHMgbmV4dCBzbyB0aGF0IGxhdGVyIDMyLSBhbmQgNjQtYml0CiAJICogcXVhbnRpdGllcyBhcmUgbmF0dXJhbGx5IGFsaWduZWQuCkBAIC0zMTYsOCArMzE2LDggQEAKIHN0cnVjdCBjMndyX3JuaWNfb3Blbl9yZXEgewogCXN0cnVjdCBjMndyX2hkciBoZHI7CiAJdTY0IHVzZXJfY29udGV4dDsKLQl1MTYgZmxhZ3M7CQkvKiBTZWUgZW51bSBjMl9ybmljX2ZsYWdzICovCi0JdTE2IHBvcnRfbnVtOworCV9fYmUxNiBmbGFnczsJCS8qIFNlZSBlbnVtIGMyX3JuaWNfZmxhZ3MgKi8KKwlfX2JlMTYgcG9ydF9udW07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYzJ3cl9ybmljX29wZW5fcmVwIHsKQEAgLTM0MSwzMCArMzQxLDMwIEBACiBzdHJ1Y3QgYzJ3cl9ybmljX3F1ZXJ5X3JlcCB7CiAJc3RydWN0IGMyd3JfaGRyIGhkcjsKIAl1NjQgdXNlcl9jb250ZXh0OwotCXUzMiB2ZW5kb3JfaWQ7Ci0JdTMyIHBhcnRfbnVtYmVyOwotCXUzMiBod192ZXJzaW9uOwotCXUzMiBmd192ZXJfbWFqb3I7Ci0JdTMyIGZ3X3Zlcl9taW5vcjsKLQl1MzIgZndfdmVyX3BhdGNoOworCV9fYmUzMiB2ZW5kb3JfaWQ7CisJX19iZTMyIHBhcnRfbnVtYmVyOworCV9fYmUzMiBod192ZXJzaW9uOworCV9fYmUzMiBmd192ZXJfbWFqb3I7CisJX19iZTMyIGZ3X3Zlcl9taW5vcjsKKwlfX2JlMzIgZndfdmVyX3BhdGNoOwogCWNoYXIgZndfdmVyX2J1aWxkX3N0cltXUl9CVUlMRF9TVFJfTEVOXTsKLQl1MzIgbWF4X3FwczsKLQl1MzIgbWF4X3FwX2RlcHRoOworCV9fYmUzMiBtYXhfcXBzOworCV9fYmUzMiBtYXhfcXBfZGVwdGg7CiAJdTMyIG1heF9zcnFfZGVwdGg7CiAJdTMyIG1heF9zZW5kX3NnbF9kZXB0aDsKIAl1MzIgbWF4X3JkbWFfc2dsX2RlcHRoOwotCXUzMiBtYXhfY3FzOwotCXUzMiBtYXhfY3FfZGVwdGg7CisJX19iZTMyIG1heF9jcXM7CisJX19iZTMyIG1heF9jcV9kZXB0aDsKIAl1MzIgbWF4X2NxX2V2ZW50X2hhbmRsZXJzOwotCXUzMiBtYXhfbXJzOworCV9fYmUzMiBtYXhfbXJzOwogCXUzMiBtYXhfcGJsX2RlcHRoOwotCXUzMiBtYXhfcGRzOwotCXUzMiBtYXhfZ2xvYmFsX2lyZDsKKwlfX2JlMzIgbWF4X3BkczsKKwlfX2JlMzIgbWF4X2dsb2JhbF9pcmQ7CiAJdTMyIG1heF9nbG9iYWxfb3JkOwotCXUzMiBtYXhfcXBfaXJkOwotCXUzMiBtYXhfcXBfb3JkOworCV9fYmUzMiBtYXhfcXBfaXJkOworCV9fYmUzMiBtYXhfcXBfb3JkOwogCXUzMiBmbGFnczsKLQl1MzIgbWF4X213czsKKwlfX2JlMzIgbWF4X213czsKIAl1MzIgcGJlX3JhbmdlX2xvdzsKIAl1MzIgcGJlX3JhbmdlX2hpZ2g7CiAJdTMyIG1heF9zcnFzOwpAQCAtNDA1LDcgKzQwNSw3IEBACiBzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXEgewogCXN0cnVjdCBjMndyX2hkciBoZHI7CiAJdTMyIHJuaWNfaGFuZGxlOwotCXUzMiBvcHRpb247CQkvKiBTZWUgYzJfc2V0Y29uZmlnX2NtZF90ICovCisJX19iZTMyIG9wdGlvbjsJCS8qIFNlZSBjMl9zZXRjb25maWdfY21kX3QgKi8KIAkvKiB2YXJpYWJsZSBkYXRhIGFuZCBwYWQuIFNlZSBjMl9uZXRhZGRyIGFuZCBjMl9yb3V0ZSAqLwogCXU4IGRhdGFbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKQEAgLTQ0MSwxOCArNDQxLDE4IEBACiAgKi8KIHN0cnVjdCBjMndyX2NxX2NyZWF0ZV9yZXEgewogCXN0cnVjdCBjMndyX2hkciBoZHI7Ci0JdTY0IHNoYXJlZF9odDsKKwlfX2JlNjQgc2hhcmVkX2h0OwogCXU2NCB1c2VyX2NvbnRleHQ7Ci0JdTY0IG1zZ19wb29sOworCV9fYmU2NCBtc2dfcG9vbDsKIAl1MzIgcm5pY19oYW5kbGU7Ci0JdTMyIG1zZ19zaXplOwotCXUzMiBkZXB0aDsKKwlfX2JlMzIgbXNnX3NpemU7CisJX19iZTMyIGRlcHRoOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CiAKIHN0cnVjdCBjMndyX2NxX2NyZWF0ZV9yZXAgewogCXN0cnVjdCBjMndyX2hkciBoZHI7Ci0JdTMyIG1xX2luZGV4OwotCXUzMiBhZGFwdGVyX3NoYXJlZDsKKwlfX2JlMzIgbXFfaW5kZXg7CisJX19iZTMyIGFkYXB0ZXJfc2hhcmVkOwogCXUzMiBjcV9oYW5kbGU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKIApAQCAtNTg1LDQwICs1ODUsNDAgQEAKIAogc3RydWN0IGMyd3JfcXBfY3JlYXRlX3JlcSB7CiAJc3RydWN0IGMyd3JfaGRyIGhkcjsKLQl1NjQgc2hhcmVkX3NxX2h0OwotCXU2NCBzaGFyZWRfcnFfaHQ7CisJX19iZTY0IHNoYXJlZF9zcV9odDsKKwlfX2JlNjQgc2hhcmVkX3JxX2h0OwogCXU2NCB1c2VyX2NvbnRleHQ7CiAJdTMyIHJuaWNfaGFuZGxlOwogCXUzMiBzcV9jcV9oYW5kbGU7CiAJdTMyIHJxX2NxX2hhbmRsZTsKLQl1MzIgc3FfZGVwdGg7Ci0JdTMyIHJxX2RlcHRoOworCV9fYmUzMiBzcV9kZXB0aDsKKwlfX2JlMzIgcnFfZGVwdGg7CiAJdTMyIHNycV9oYW5kbGU7CiAJdTMyIHNycV9saW1pdDsKLQl1MzIgZmxhZ3M7CQkvKiBzZWUgZW51bSBjMndyX3FwX2ZsYWdzICovCi0JdTMyIHNlbmRfc2dsX2RlcHRoOwotCXUzMiByZWN2X3NnbF9kZXB0aDsKLQl1MzIgcmRtYV93cml0ZV9zZ2xfZGVwdGg7Ci0JdTMyIG9yZDsKLQl1MzIgaXJkOworCV9fYmUzMiBmbGFnczsJCS8qIHNlZSBlbnVtIGMyd3JfcXBfZmxhZ3MgKi8KKwlfX2JlMzIgc2VuZF9zZ2xfZGVwdGg7CisJX19iZTMyIHJlY3Zfc2dsX2RlcHRoOworCV9fYmUzMiByZG1hX3dyaXRlX3NnbF9kZXB0aDsKKwlfX2JlMzIgb3JkOworCV9fYmUzMiBpcmQ7CiAJdTMyIHBkX2lkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CiAKIHN0cnVjdCBjMndyX3FwX2NyZWF0ZV9yZXAgewogCXN0cnVjdCBjMndyX2hkciBoZHI7Ci0JdTMyIHNxX2RlcHRoOwotCXUzMiBycV9kZXB0aDsKKwlfX2JlMzIgc3FfZGVwdGg7CisJX19iZTMyIHJxX2RlcHRoOwogCXUzMiBzZW5kX3NnbF9kZXB0aDsKIAl1MzIgcmVjdl9zZ2xfZGVwdGg7CiAJdTMyIHJkbWFfd3JpdGVfc2dsX2RlcHRoOwogCXUzMiBvcmQ7CiAJdTMyIGlyZDsKLQl1MzIgc3FfbXNnX3NpemU7Ci0JdTMyIHNxX21xX2luZGV4OwotCXUzMiBzcV9tcV9zdGFydDsKLQl1MzIgcnFfbXNnX3NpemU7Ci0JdTMyIHJxX21xX2luZGV4OwotCXUzMiBycV9tcV9zdGFydDsKKwlfX2JlMzIgc3FfbXNnX3NpemU7CisJX19iZTMyIHNxX21xX2luZGV4OworCV9fYmUzMiBzcV9tcV9zdGFydDsKKwlfX2JlMzIgcnFfbXNnX3NpemU7CisJX19iZTMyIHJxX21xX2luZGV4OworCV9fYmUzMiBycV9tcV9zdGFydDsKIAl1MzIgcXBfaGFuZGxlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CiAKQEAgLTY2NywxMSArNjY3LDExIEBACiAJdTMyIHN0cmVhbV9tc2dfbGVuZ3RoOwogCXUzMiBybmljX2hhbmRsZTsKIAl1MzIgcXBfaGFuZGxlOwotCXUzMiBuZXh0X3FwX3N0YXRlOwotCXUzMiBvcmQ7Ci0JdTMyIGlyZDsKLQl1MzIgc3FfZGVwdGg7Ci0JdTMyIHJxX2RlcHRoOworCV9fYmUzMiBuZXh0X3FwX3N0YXRlOworCV9fYmUzMiBvcmQ7CisJX19iZTMyIGlyZDsKKwlfX2JlMzIgc3FfZGVwdGg7CisJX19iZTMyIHJxX2RlcHRoOwogCXUzMiBsbHBfZXBfaGFuZGxlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CiAKQEAgLTcyMSwxMCArNzIxLDEwIEBACiAJc3RydWN0IGMyd3JfaGRyIGhkcjsKIAl1MzIgcm5pY19oYW5kbGU7CiAJdTMyIHFwX2hhbmRsZTsKLQl1MzIgcmVtb3RlX2FkZHI7Ci0JdTE2IHJlbW90ZV9wb3J0OworCV9fYmUzMiByZW1vdGVfYWRkcjsKKwlfX2JlMTYgcmVtb3RlX3BvcnQ7CiAJdTE2IHBhZDsKLQl1MzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKKwlfX2JlMzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKIAl1OCBwcml2YXRlX2RhdGFbMF07CS8qIFByaXZhdGUgZGF0YSBpbi1saW5lLiAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CiAKQEAgLTc1OSwyNSArNzU5LDI1IEBACiAKIHN0cnVjdCBjMndyX25zbXJfcmVnaXN0ZXJfcmVxIHsKIAlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOwotCXU2NCB2YTsKKwlfX2JlNjQgdmE7CiAJdTMyIHJuaWNfaGFuZGxlOwotCXUxNiBmbGFnczsKKwlfX2JlMTYgZmxhZ3M7CiAJdTggc3RhZ19rZXk7CiAJdTggcGFkOwogCXUzMiBwZF9pZDsKLQl1MzIgcGJsX2RlcHRoOwotCXUzMiBwYmVfc2l6ZTsKLQl1MzIgZmJvOwotCXUzMiBsZW5ndGg7Ci0JdTMyIGFkZHJzX2xlbmd0aDsKKwlfX2JlMzIgcGJsX2RlcHRoOworCV9fYmUzMiBwYmVfc2l6ZTsKKwlfX2JlMzIgZmJvOworCV9fYmUzMiBsZW5ndGg7CisJX19iZTMyIGFkZHJzX2xlbmd0aDsKIAkvKiBhcnJheSBvZiBwYWRkcnMgKG11c3QgYmUgYWxpZ25lZCBvbiBhIDY0Yml0IGJvdW5kYXJ5KSAqLwotCXU2NCBwYWRkcnNbMF07CisJX19iZTY0IHBhZGRyc1swXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOwogCiBzdHJ1Y3QgYzJ3cl9uc21yX3JlZ2lzdGVyX3JlcCB7CiAJc3RydWN0IGMyd3JfaGRyIGhkcjsKIAl1MzIgcGJsX2RlcHRoOwotCXUzMiBzdGFnX2luZGV4OworCV9fYmUzMiBzdGFnX2luZGV4OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CiAKIHVuaW9uIGMyd3JfbnNtcl9yZWdpc3RlciB7CkBAIC03ODgsMTEgKzc4OCwxMSBAQAogc3RydWN0IGMyd3JfbnNtcl9wYmxfcmVxIHsKIAlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOwogCXUzMiBybmljX2hhbmRsZTsKLQl1MzIgZmxhZ3M7Ci0JdTMyIHN0YWdfaW5kZXg7Ci0JdTMyIGFkZHJzX2xlbmd0aDsKKwlfX2JlMzIgZmxhZ3M7CisJX19iZTMyIHN0YWdfaW5kZXg7CisJX19iZTMyIGFkZHJzX2xlbmd0aDsKIAkvKiBhcnJheSBvZiBwYWRkcnMgKG11c3QgYmUgYWxpZ25lZCBvbiBhIDY0Yml0IGJvdW5kYXJ5KSAqLwotCXU2NCBwYWRkcnNbMF07CisJX19iZTY0IHBhZGRyc1swXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOwogCiBzdHJ1Y3QgYzJ3cl9uc21yX3BibF9yZXAgewpAQCAtODQ3LDcgKzg0Nyw3IEBACiBzdHJ1Y3QgYzJ3cl9zdGFnX2RlYWxsb2NfcmVxIHsKIAlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOwogCXUzMiBybmljX2hhbmRsZTsKLQl1MzIgc3RhZ19pbmRleDsKKwlfX2JlMzIgc3RhZ19pbmRleDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOwogCiBzdHJ1Y3QgYzJ3cl9zdGFnX2RlYWxsb2NfcmVwIHsKQEAgLTk0OSw3ICs5NDksNyBAQAogCXU2NCBxcF91c2VyX2NvbnRleHQ7CS8qIGMyX3VzZXJfcXBfdCAqICovCiAJdTMyIHFwX3N0YXRlOwkJLyogQ3VycmVudCBRUCBTdGF0ZSAqLwogCXUzMiBoYW5kbGU7CQkvKiBRUElEIG9yIEVQIEhhbmRsZSAqLwotCXUzMiBieXRlc19yY3ZkOwkJLyogdmFsaWQgZm9yIFJFQ1YgV0NzICovCisJX19iZTMyIGJ5dGVzX3JjdmQ7CQkvKiB2YWxpZCBmb3IgUkVDViBXQ3MgKi8KIAl1MzIgc3RhZzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOwogCkBAIC05ODQsOCArOTg0LDggQEAKICAqLwogc3RydWN0IGMyd3Jfc2VuZF9yZXEgewogCXN0cnVjdCBjMl9zcV9oZHIgc3FfaGRyOwotCXUzMiBzZ2VfbGVuOwotCXUzMiByZW1vdGVfc3RhZzsKKwlfX2JlMzIgc2dlX2xlbjsKKwlfX2JlMzIgcmVtb3RlX3N0YWc7CiAJdTggZGF0YVswXTsJCS8qIFNHRSBhcnJheSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApAQCAtOTk2LDkgKzk5Niw5IEBACiAKIHN0cnVjdCBjMndyX3JkbWFfd3JpdGVfcmVxIHsKIAlzdHJ1Y3QgYzJfc3FfaGRyIHNxX2hkcjsKLQl1NjQgcmVtb3RlX3RvOwotCXUzMiByZW1vdGVfc3RhZzsKLQl1MzIgc2dlX2xlbjsKKwlfX2JlNjQgcmVtb3RlX3RvOworCV9fYmUzMiByZW1vdGVfc3RhZzsKKwlfX2JlMzIgc2dlX2xlbjsKIAl1OCBkYXRhWzBdOwkJLyogU0dFIGFycmF5ICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCkBAIC0xMDA5LDExICsxMDA5LDExIEBACiAKIHN0cnVjdCBjMndyX3JkbWFfcmVhZF9yZXEgewogCXN0cnVjdCBjMl9zcV9oZHIgc3FfaGRyOwotCXU2NCBsb2NhbF90bzsKLQl1NjQgcmVtb3RlX3RvOwotCXUzMiBsb2NhbF9zdGFnOwotCXUzMiByZW1vdGVfc3RhZzsKLQl1MzIgbGVuZ3RoOworCV9fYmU2NCBsb2NhbF90bzsKKwlfX2JlNjQgcmVtb3RlX3RvOworCV9fYmUzMiBsb2NhbF9zdGFnOworCV9fYmUzMiByZW1vdGVfc3RhZzsKKwlfX2JlMzIgbGVuZ3RoOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gYzJ3cl9yZG1hX3JlYWQgewpAQCAtMTExMyw5ICsxMTEzLDkgQEAKIHN0cnVjdCBjMndyX2FlX2hkciB7CiAJc3RydWN0IGMyd3JfaGRyIGhkcjsKIAl1NjQgdXNlcl9jb250ZXh0OwkvKiB1c2VyIGNvbnRleHQgZm9yIHRoaXMgcmVzLiAqLwotCXUzMiByZXNvdXJjZV90eXBlOwkvKiBzZWUgZW51bSBjMl9yZXNvdXJjZV9pbmRpY2F0b3IgKi8KLQl1MzIgcmVzb3VyY2U7CQkvKiBoYW5kbGUgZm9yIHJlc291cmNlICovCi0JdTMyIHFwX3N0YXRlOwkJLyogY3VycmVudCBRUCBTdGF0ZSAqLworCV9fYmUzMiByZXNvdXJjZV90eXBlOwkvKiBzZWUgZW51bSBjMl9yZXNvdXJjZV9pbmRpY2F0b3IgKi8KKwlfX2JlMzIgcmVzb3VyY2U7CS8qIGhhbmRsZSBmb3IgcmVzb3VyY2UgKi8KKwlfX2JlMzIgcXBfc3RhdGU7CS8qIGN1cnJlbnQgUVAgU3RhdGUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCkBAIC0xMTI0LDExICsxMTI0LDExIEBACiAgKi8KIHN0cnVjdCBjMndyX2FlX2FjdGl2ZV9jb25uZWN0X3Jlc3VsdHMgewogCXN0cnVjdCBjMndyX2FlX2hkciBhZV9oZHI7Ci0JdTMyIGxhZGRyOwotCXUzMiByYWRkcjsKLQl1MTYgbHBvcnQ7Ci0JdTE2IHJwb3J0OwotCXUzMiBwcml2YXRlX2RhdGFfbGVuZ3RoOworCV9fYmUzMiBsYWRkcjsKKwlfX2JlMzIgcmFkZHI7CisJX19iZTE2IGxwb3J0OworCV9fYmUxNiBycG9ydDsKKwlfX2JlMzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKIAl1OCBwcml2YXRlX2RhdGFbMF07CS8qIGRhdGEgaXMgaW4tbGluZSBpbiB0aGUgbXNnLiAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApAQCAtMTE0MiwxMSArMTE0MiwxMSBAQAogc3RydWN0IGMyd3JfYWVfY29ubmVjdGlvbl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgYzJ3cl9hZV9oZHIgYWVfaGRyOwogCXUzMiBjcl9oYW5kbGU7CQkvKiBjb25ucmVxIGhhbmRsZSAoc29jayBwdHIpICovCi0JdTMyIGxhZGRyOwotCXUzMiByYWRkcjsKLQl1MTYgbHBvcnQ7Ci0JdTE2IHJwb3J0OwotCXUzMiBwcml2YXRlX2RhdGFfbGVuZ3RoOworCV9fYmUzMiBsYWRkcjsKKwlfX2JlMzIgcmFkZHI7CisJX19iZTE2IGxwb3J0OworCV9fYmUxNiBycG9ydDsKKwlfX2JlMzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKIAl1OCBwcml2YXRlX2RhdGFbMF07CS8qIGRhdGEgaXMgaW4tbGluZSBpbiB0aGUgbXNnLiAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApAQCAtMTE1OCwxMiArMTE1OCwxMiBAQAogCiBzdHJ1Y3QgYzJ3cl9pbml0X3JlcSB7CiAJc3RydWN0IGMyd3JfaGRyIGhkcjsKLQl1NjQgaGludF9jb3VudDsKLQl1NjQgcTBfaG9zdF9zaGFyZWQ7Ci0JdTY0IHExX2hvc3Rfc2hhcmVkOwotCXU2NCBxMV9ob3N0X21zZ19wb29sOwotCXU2NCBxMl9ob3N0X3NoYXJlZDsKLQl1NjQgcTJfaG9zdF9tc2dfcG9vbDsKKwlfX2JlNjQgaGludF9jb3VudDsKKwlfX2JlNjQgcTBfaG9zdF9zaGFyZWQ7CisJX19iZTY0IHExX2hvc3Rfc2hhcmVkOworCV9fYmU2NCBxMV9ob3N0X21zZ19wb29sOworCV9fYmU2NCBxMl9ob3N0X3NoYXJlZDsKKwlfX2JlNjQgcTJfaG9zdF9tc2dfcG9vbDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBjMndyX2luaXRfcmVwIHsKQEAgLTEyNzYsMTAgKzEyNzYsMTAgQEAKIAlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOwogCXU2NCB1c2VyX2NvbnRleHQ7CS8qIHJldHVybmVkIGluIEFFcy4gKi8KIAl1MzIgcm5pY19oYW5kbGU7Ci0JdTMyIGxvY2FsX2FkZHI7CQkvKiBsb2NhbCBhZGRyLCBvciAwICAqLwotCXUxNiBsb2NhbF9wb3J0OwkJLyogMCBtZWFucyAicGljayBvbmUiICovCisJX19iZTMyIGxvY2FsX2FkZHI7CQkvKiBsb2NhbCBhZGRyLCBvciAwICAqLworCV9fYmUxNiBsb2NhbF9wb3J0OwkJLyogMCBtZWFucyAicGljayBvbmUiICovCiAJdTE2IHBhZDsKLQl1MzIgYmFja2xvZzsJCS8qIHRyYWRpb25hbCB0Y3AgbGlzdGVuIGJsICovCisJX19iZTMyIGJhY2tsb2c7CQkvKiB0cmFkaW9uYWwgdGNwIGxpc3RlbiBibCAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGMyd3JfZXBfbGlzdGVuX2NyZWF0ZV9yZXAgewpAQCAtMTM0MCw3ICsxMzQwLDcgQEAKIAl1MzIgcm5pY19oYW5kbGU7CiAJdTMyIHFwX2hhbmRsZTsJCS8qIFFQIHRvIGJpbmQgdG8gdGhpcyBMTFAgY29ubiAqLwogCXUzMiBlcF9oYW5kbGU7CQkvKiBMTFAgIGhhbmRsZSB0byBhY2NlcHQgKi8KLQl1MzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKKwlfX2JlMzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKIAl1OCBwcml2YXRlX2RhdGFbMF07CS8qIGRhdGEgaW4tbGluZSBpbiBtc2cuICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCkBAIC0xNTA4LDcgKzE1MDgsNyBAQAogewogCSgoc3RydWN0IGMyd3JfaGRyICopIHdyKS0+c2dlX2NvdW50ID0gc2dlX2NvdW50OwogfQotc3RhdGljIF9faW5saW5lX18gdTMyIGMyX3dyX2dldF93cWVfY291bnQodm9pZCAqd3IpCitzdGF0aWMgX19pbmxpbmVfXyBfX2JlMzIgYzJfd3JfZ2V0X3dxZV9jb3VudCh2b2lkICp3cikKIHsKIAlyZXR1cm4gKChzdHJ1Y3QgYzJ3cl9oZHIgKikgd3IpLT53cWVfY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19kYmcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2RiZy5jCmluZGV4IDc1ZjdiMTYuLmE4ZDI0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2RiZy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2RiZy5jCkBAIC00NSwxNiArNDUsMTYgQEAKIAogCW0gPSBrbWFsbG9jKHNpemVvZigqbSkgKyBzaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW0pIHsKLQkJUERCRygiJXMgY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJUERCRygiJXMgY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCW0tPm1lbV9pZCA9IE1FTV9QTVJYOwogCW0tPmFkZHIgPSAoc3RhZz4+OCkgKiAzMiArIHJkZXYtPnJuaWNfaW5mby50cHRfYmFzZTsKIAltLT5sZW4gPSBzaXplOwotCVBEQkcoIiVzIFRQVCBhZGRyIDB4JXggbGVuICVkXG4iLCBfX0ZVTkNUSU9OX18sIG0tPmFkZHIsIG0tPmxlbik7CisJUERCRygiJXMgVFBUIGFkZHIgMHgleCBsZW4gJWRcbiIsIF9fZnVuY19fLCBtLT5hZGRyLCBtLT5sZW4pOwogCXJjID0gcmRldi0+dDNjZGV2X3AtPmN0bChyZGV2LT50M2NkZXZfcCwgUkRNQV9HRVRfTUVNLCBtKTsKIAlpZiAocmMpIHsKLQkJUERCRygiJXMgdG9lY3RsIHJldHVybmVkIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJUERCRygiJXMgdG9lY3RsIHJldHVybmVkIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlrZnJlZShtKTsKIAkJcmV0dXJuOwogCX0KQEAgLTgyLDE3ICs4MiwxNyBAQAogCiAJbSA9IGttYWxsb2Moc2l6ZW9mKCptKSArIHNpemUsIEdGUF9BVE9NSUMpOwogCWlmICghbSkgewotCQlQREJHKCIlcyBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkuXG4iLCBfX0ZVTkNUSU9OX18pOworCQlQREJHKCIlcyBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJbS0+bWVtX2lkID0gTUVNX1BNUlg7CiAJbS0+YWRkciA9IHBibF9hZGRyOwogCW0tPmxlbiA9IHNpemU7CiAJUERCRygiJXMgUEJMIGFkZHIgMHgleCBsZW4gJWQgZGVwdGggJWRcbiIsCi0JCV9fRlVOQ1RJT05fXywgbS0+YWRkciwgbS0+bGVuLCBucGFnZXMpOworCQlfX2Z1bmNfXywgbS0+YWRkciwgbS0+bGVuLCBucGFnZXMpOwogCXJjID0gcmRldi0+dDNjZGV2X3AtPmN0bChyZGV2LT50M2NkZXZfcCwgUkRNQV9HRVRfTUVNLCBtKTsKIAlpZiAocmMpIHsKLQkJUERCRygiJXMgdG9lY3RsIHJldHVybmVkIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJUERCRygiJXMgdG9lY3RsIHJldHVybmVkIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlrZnJlZShtKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE0NCwxNiArMTQ0LDE2IEBACiAKIAltID0ga21hbGxvYyhzaXplb2YoKm0pICsgc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFtKSB7Ci0JCVBEQkcoIiVzIGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCVBEQkcoIiVzIGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAltLT5tZW1faWQgPSBNRU1fUE1SWDsKIAltLT5hZGRyID0gKChod3RpZCk8PDEwKSArIHJkZXYtPnJuaWNfaW5mby5ycXRfYmFzZTsKIAltLT5sZW4gPSBzaXplOwotCVBEQkcoIiVzIFJRVCBhZGRyIDB4JXggbGVuICVkXG4iLCBfX0ZVTkNUSU9OX18sIG0tPmFkZHIsIG0tPmxlbik7CisJUERCRygiJXMgUlFUIGFkZHIgMHgleCBsZW4gJWRcbiIsIF9fZnVuY19fLCBtLT5hZGRyLCBtLT5sZW4pOwogCXJjID0gcmRldi0+dDNjZGV2X3AtPmN0bChyZGV2LT50M2NkZXZfcCwgUkRNQV9HRVRfTUVNLCBtKTsKIAlpZiAocmMpIHsKLQkJUERCRygiJXMgdG9lY3RsIHJldHVybmVkIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJUERCRygiJXMgdG9lY3RsIHJldHVybmVkIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlrZnJlZShtKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3NywxNiArMTc3LDE2IEBACiAKIAltID0ga21hbGxvYyhzaXplb2YoKm0pICsgc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFtKSB7Ci0JCVBEQkcoIiVzIGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCVBEQkcoIiVzIGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAltLT5tZW1faWQgPSBNRU1fQ007CiAJbS0+YWRkciA9IGh3dGlkICogc2l6ZTsKIAltLT5sZW4gPSBzaXplOwotCVBEQkcoIiVzIFRDQiAlZCBsZW4gJWRcbiIsIF9fRlVOQ1RJT05fXywgbS0+YWRkciwgbS0+bGVuKTsKKwlQREJHKCIlcyBUQ0IgJWQgbGVuICVkXG4iLCBfX2Z1bmNfXywgbS0+YWRkciwgbS0+bGVuKTsKIAlyYyA9IHJkZXYtPnQzY2Rldl9wLT5jdGwocmRldi0+dDNjZGV2X3AsIFJETUFfR0VUX01FTSwgbSk7CiAJaWYgKHJjKSB7Ci0JCVBEQkcoIiVzIHRvZWN0bCByZXR1cm5lZCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJCVBEQkcoIiVzIHRvZWN0bCByZXR1cm5lZCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJjKTsKIAkJa2ZyZWUobSk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCmluZGV4IDAzYzVmZjYuLjY2ZWI3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAlzdHJ1Y3QgdDNfbW9kaWZ5X3FwX3dyICp3cWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihzaXplb2YoKndxZSksIEdGUF9LRVJORUwpOwogCWlmICghc2tiKSB7Ci0JCVBEQkcoIiVzIGFsbG9jX3NrYiBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCVBEQkcoIiVzIGFsbG9jX3NrYiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXdxZSA9IChzdHJ1Y3QgdDNfbW9kaWZ5X3FwX3dyICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKndxZSkpOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJfQogb3V0OgogCW11dGV4X3VubG9jaygmdWN0eC0+bG9jayk7Ci0JUERCRygiJXMgcXBpZCAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHFwaWQpOworCVBEQkcoIiVzIHFwaWQgMHgleFxuIiwgX19mdW5jX18sIHFwaWQpOwogCXJldHVybiBxcGlkOwogfQogCkBAIC0yMzcsNyArMjM3LDcgQEAKIAllbnRyeSA9IGttYWxsb2Moc2l6ZW9mICplbnRyeSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuOwotCVBEQkcoIiVzIHFwaWQgMHgleFxuIiwgX19GVU5DVElPTl9fLCBxcGlkKTsKKwlQREJHKCIlcyBxcGlkIDB4JXhcbiIsIF9fZnVuY19fLCBxcGlkKTsKIAllbnRyeS0+cXBpZCA9IHFwaWQ7CiAJbXV0ZXhfbG9jaygmdWN0eC0+bG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZW50cnktPmVudHJ5LCAmdWN0eC0+cXBpZHMpOwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJaWYgKCFrZXJuZWxfZG9tYWluKQogCQl3cS0+dWRiID0gKHU2NClyZGV2X3AtPnJuaWNfaW5mby51ZGJlbGxfcGh5c2Jhc2UgKwogCQkJCQkod3EtPnFwaWQgPDwgcmRldl9wLT5xcHNoaWZ0KTsKLQlQREJHKCIlcyBxcGlkIDB4JXggZG9vcmJlbGwgMHglcCB1ZGIgMHglbGx4XG4iLCBfX0ZVTkNUSU9OX18sCisJUERCRygiJXMgcXBpZCAweCV4IGRvb3JiZWxsIDB4JXAgdWRiIDB4JWxseFxuIiwgX19mdW5jX18sCiAJICAgICB3cS0+cXBpZCwgd3EtPmRvb3JiZWxsLCAodW5zaWduZWQgbG9uZyBsb25nKSB3cS0+dWRiKTsKIAlyZXR1cm4gMDsKIGVycjQ6CkBAIC0zNDUsNyArMzQ1LDcgQEAKIHsKIAlzdHJ1Y3QgdDNfY3FlIGNxZTsKIAotCVBEQkcoIiVzIHdxICVwIGNxICVwIHN3X3JwdHIgMHgleCBzd193cHRyIDB4JXhcbiIsIF9fRlVOQ1RJT05fXywKKwlQREJHKCIlcyB3cSAlcCBjcSAlcCBzd19ycHRyIDB4JXggc3dfd3B0ciAweCV4XG4iLCBfX2Z1bmNfXywKIAkgICAgIHdxLCBjcSwgY3EtPnN3X3JwdHIsIGNxLT5zd193cHRyKTsKIAltZW1zZXQoJmNxZSwgMCwgc2l6ZW9mKGNxZSkpOwogCWNxZS5oZWFkZXIgPSBjcHVfdG9fYmUzMihWX0NRRV9TVEFUVVMoVFBUX0VSUl9TV0ZMVVNIKSB8CkBAIC0zNjMsMTAgKzM2MywxMCBAQAogewogCXUzMiBwdHI7CiAKLQlQREJHKCIlcyB3cSAlcCBjcSAlcFxuIiwgX19GVU5DVElPTl9fLCB3cSwgY3EpOworCVBEQkcoIiVzIHdxICVwIGNxICVwXG4iLCBfX2Z1bmNfXywgd3EsIGNxKTsKIAogCS8qIGZsdXNoIFJRICovCi0JUERCRygiJXMgcnFfcnB0ciAldSBycV93cHRyICV1IHNraXAgY291bnQgJXVcbiIsIF9fRlVOQ1RJT05fXywKKwlQREJHKCIlcyBycV9ycHRyICV1IHJxX3dwdHIgJXUgc2tpcCBjb3VudCAldVxuIiwgX19mdW5jX18sCiAJICAgIHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0ciwgY291bnQpOwogCXB0ciA9IHdxLT5ycV9ycHRyICsgY291bnQ7CiAJd2hpbGUgKHB0cisrICE9IHdxLT5ycV93cHRyKQpAQCAtMzc4LDcgKzM3OCw3IEBACiB7CiAJc3RydWN0IHQzX2NxZSBjcWU7CiAKLQlQREJHKCIlcyB3cSAlcCBjcSAlcCBzd19ycHRyIDB4JXggc3dfd3B0ciAweCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJUERCRygiJXMgd3EgJXAgY3EgJXAgc3dfcnB0ciAweCV4IHN3X3dwdHIgMHgleFxuIiwgX19mdW5jX18sCiAJICAgICB3cSwgY3EsIGNxLT5zd19ycHRyLCBjcS0+c3dfd3B0cik7CiAJbWVtc2V0KCZjcWUsIDAsIHNpemVvZihjcWUpKTsKIAljcWUuaGVhZGVyID0gY3B1X3RvX2JlMzIoVl9DUUVfU1RBVFVTKFRQVF9FUlJfU1dGTFVTSCkgfApAQCAtNDE1LDExICs0MTUsMTEgQEAKIHsKIAlzdHJ1Y3QgdDNfY3FlICpjcWUsICpzd2NxZTsKIAotCVBEQkcoIiVzIGNxICVwIGNxaWQgMHgleFxuIiwgX19GVU5DVElPTl9fLCBjcSwgY3EtPmNxaWQpOworCVBEQkcoIiVzIGNxICVwIGNxaWQgMHgleFxuIiwgX19mdW5jX18sIGNxLCBjcS0+Y3FpZCk7CiAJY3FlID0gY3hpb19uZXh0X2h3X2NxZShjcSk7CiAJd2hpbGUgKGNxZSkgewogCQlQREJHKCIlcyBmbHVzaGluZyBod2NxIHJwdHIgMHgleCB0byBzd2NxIHdwdHIgMHgleFxuIiwKLQkJICAgICBfX0ZVTkNUSU9OX18sIGNxLT5ycHRyLCBjcS0+c3dfd3B0cik7CisJCSAgICAgX19mdW5jX18sIGNxLT5ycHRyLCBjcS0+c3dfd3B0cik7CiAJCXN3Y3FlID0gY3EtPnN3X3F1ZXVlICsgUV9QVFIySURYKGNxLT5zd193cHRyLCBjcS0+c2l6ZV9sb2cyKTsKIAkJKnN3Y3FlID0gKmNxZTsKIAkJc3djcWUtPmhlYWRlciB8PSBjcHVfdG9fYmUzMihWX0NRRV9TV0NRRSgxKSk7CkBAIC00NjEsNyArNDYxLDcgQEAKIAkJCSgqY291bnQpKys7CiAJCXB0cisrOwogCX0KLQlQREJHKCIlcyBjcSAlcCBjb3VudCAlZFxuIiwgX19GVU5DVElPTl9fLCBjcSwgKmNvdW50KTsKKwlQREJHKCIlcyBjcSAlcCBjb3VudCAlZFxuIiwgX19mdW5jX18sIGNxLCAqY291bnQpOwogfQogCiB2b2lkIGN4aW9fY291bnRfcmNxZXMoc3RydWN0IHQzX2NxICpjcSwgc3RydWN0IHQzX3dxICp3cSwgaW50ICpjb3VudCkKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXUzMiBwdHI7CiAKIAkqY291bnQgPSAwOwotCVBEQkcoIiVzIGNvdW50IHplcm8gJWRcbiIsIF9fRlVOQ1RJT05fXywgKmNvdW50KTsKKwlQREJHKCIlcyBjb3VudCB6ZXJvICVkXG4iLCBfX2Z1bmNfXywgKmNvdW50KTsKIAlwdHIgPSBjcS0+c3dfcnB0cjsKIAl3aGlsZSAoIVFfRU1QVFkocHRyLCBjcS0+c3dfd3B0cikpIHsKIAkJY3FlID0gY3EtPnN3X3F1ZXVlICsgKFFfUFRSMklEWChwdHIsIGNxLT5zaXplX2xvZzIpKTsKQEAgLTQ3OSw3ICs0NzksNyBAQAogCQkJKCpjb3VudCkrKzsKIAkJcHRyKys7CiAJfQotCVBEQkcoIiVzIGNxICVwIGNvdW50ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGNxLCAqY291bnQpOworCVBEQkcoIiVzIGNxICVwIGNvdW50ICVkXG4iLCBfX2Z1bmNfXywgY3EsICpjb3VudCk7CiB9CiAKIHN0YXRpYyBpbnQgY3hpb19oYWxfaW5pdF9jdHJsX2NxKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCkKQEAgLTUwNiwxMiArNTA2LDEyIEBACiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCp3cWUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikgewotCQlQREJHKCIlcyBhbGxvY19za2IgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlQREJHKCIlcyBhbGxvY19za2IgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAllcnIgPSBjeGlvX2hhbF9pbml0X2N0cmxfY3EocmRldl9wKTsKIAlpZiAoZXJyKSB7Ci0JCVBEQkcoIiVzIGVyciAlZCBpbml0aWFsaXppbmcgY3RybF9jcVxuIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlQREJHKCIlcyBlcnIgJWQgaW5pdGlhbGl6aW5nIGN0cmxfY3FcbiIsIF9fZnVuY19fLCBlcnIpOwogCQlnb3RvIGVycjsKIAl9CiAJcmRldl9wLT5jdHJsX3FwLndvcmtxID0gZG1hX2FsbG9jX2NvaGVyZW50KApAQCAtNTIxLDcgKzUyMSw3IEBACiAJCQkJCSYocmRldl9wLT5jdHJsX3FwLmRtYV9hZGRyKSwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZGV2X3AtPmN0cmxfcXAud29ya3EpIHsKLQkJUERCRygiJXMgZG1hX2FsbG9jX2NvaGVyZW50IGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJUERCRygiJXMgZG1hX2FsbG9jX2NvaGVyZW50IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycjsKIAl9CkBAIC01OTEsMjUgKzU5MSwyNSBAQAogCWFkZHIgJj0gMHg3RkZGRkZGOwogCW5yX3dxZSA9IGxlbiAlIDk2ID8gbGVuIC8gOTYgKyAxIDogbGVuIC8gOTY7CS8qIDk2QiBtYXggcGVyIFdRRSAqLwogCVBEQkcoIiVzIHdwdHIgMHgleCBycHRyIDB4JXggbGVuICVkLCBucl93cWUgJWQgZGF0YSAlcCBhZGRyIDB4JTB4XG4iLAotCSAgICAgX19GVU5DVElPTl9fLCByZGV2X3AtPmN0cmxfcXAud3B0ciwgcmRldl9wLT5jdHJsX3FwLnJwdHIsIGxlbiwKKwkgICAgIF9fZnVuY19fLCByZGV2X3AtPmN0cmxfcXAud3B0ciwgcmRldl9wLT5jdHJsX3FwLnJwdHIsIGxlbiwKIAkgICAgIG5yX3dxZSwgZGF0YSwgYWRkcik7CiAJdXR4X2xlbiA9IDM7CQkvKiBpbiAzMkIgdW5pdCAqLwogCWZvciAoaSA9IDA7IGkgPCBucl93cWU7IGkrKykgewogCQlpZiAoUV9GVUxMKHJkZXZfcC0+Y3RybF9xcC5ycHRyLCByZGV2X3AtPmN0cmxfcXAud3B0ciwKIAkJICAgICAgICAgICBUM19DVFJMX1FQX1NJWkVfTE9HMikpIHsKIAkJCVBEQkcoIiVzIGN0cmxfcXAgZnVsbCB3dHByIDB4JTB4IHJwdHIgMHglMHgsICIKLQkJCSAgICAgIndhaXQgZm9yIG1vcmUgc3BhY2UgaSAlZFxuIiwgX19GVU5DVElPTl9fLAorCQkJICAgICAid2FpdCBmb3IgbW9yZSBzcGFjZSBpICVkXG4iLCBfX2Z1bmNfXywKIAkJCSAgICAgcmRldl9wLT5jdHJsX3FwLndwdHIsIHJkZXZfcC0+Y3RybF9xcC5ycHRyLCBpKTsKIAkJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmRldl9wLT5jdHJsX3FwLndhaXRxLAogCQkJCQkgICAgICFRX0ZVTEwocmRldl9wLT5jdHJsX3FwLnJwdHIsCiAJCQkJCQkgICAgIHJkZXZfcC0+Y3RybF9xcC53cHRyLAogCQkJCQkJICAgICBUM19DVFJMX1FQX1NJWkVfTE9HMikpKSB7CiAJCQkJUERCRygiJXMgY3RybF9xcCB3b3JrcSBpbnRlcnJ1cHRlZFxuIiwKLQkJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICBfX2Z1bmNfXyk7CiAJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAkJCX0KIAkJCVBEQkcoIiVzIGN0cmxfcXAgd2FrZXVwLCBjb250aW51ZSBwb3N0aW5nIHdvcmsgcmVxdWVzdCAiCi0JCQkgICAgICJpICVkXG4iLCBfX0ZVTkNUSU9OX18sIGkpOworCQkJICAgICAiaSAlZFxuIiwgX19mdW5jX18sIGkpOwogCQl9CiAJCXdxZSA9IChfX2JlNjQgKikocmRldl9wLT5jdHJsX3FwLndvcmtxICsgKHJkZXZfcC0+Y3RybF9xcC53cHRyICUKIAkJCQkJCSgxIDw8IFQzX0NUUkxfUVBfU0laRV9MT0cyKSkpOwpAQCAtNjMwLDcgKzYzMCw3IEBACiAJCWlmICgoaSAhPSAwKSAmJgogCQkgICAgKGkgJSAoKCgxIDw8IFQzX0NUUkxfUVBfU0laRV9MT0cyKSkgPj4gMSkgPT0gMCkpIHsKIAkJCWZsYWcgPSBUM19DT01QTEVUSU9OX0ZMQUc7Ci0JCQlQREJHKCIlcyBmb3JjZSBjb21wbGV0aW9uIGF0IGkgJWRcbiIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQlQREJHKCIlcyBmb3JjZSBjb21wbGV0aW9uIGF0IGkgJWRcbiIsIF9fZnVuY19fLCBpKTsKIAkJfQogCiAJCS8qIGJ1aWxkIHRoZSB1dHggbWVtIGNvbW1hbmQgKi8KQEAgLTcwMSw3ICs3MDEsNyBAQAogCQkqc3RhZyA9IChzdGFnX2lkeCA8PCA4KSB8ICgoKnN0YWcpICYgMHhGRik7CiAJfQogCVBEQkcoIiVzIHN0YWdfc3RhdGUgMHglMHggdHlwZSAweCUweCBwZGlkIDB4JTB4LCBzdGFnX2lkeCAweCV4XG4iLAotCSAgICAgX19GVU5DVElPTl9fLCBzdGFnX3N0YXRlLCB0eXBlLCBwZGlkLCBzdGFnX2lkeCk7CisJICAgICBfX2Z1bmNfXywgc3RhZ19zdGF0ZSwgdHlwZSwgcGRpZCwgc3RhZ19pZHgpOwogCiAJaWYgKHJlc2V0X3RwdF9lbnRyeSkKIAkJY3hpb19oYWxfcGJscG9vbF9mcmVlKHJkZXZfcCwgKnBibF9hZGRyLCAqcGJsX3NpemUgPDwgMyk7CkBAIC03MTgsNyArNzE4LDcgQEAKIAlpZiAocGJsKSB7CiAKIAkJUERCRygiJXMgKnBkYl9hZGRyIDB4JXgsIHBibF9iYXNlIDB4JXgsIHBibF9zaXplICVkXG4iLAotCQkgICAgIF9fRlVOQ1RJT05fXywgKnBibF9hZGRyLCByZGV2X3AtPnJuaWNfaW5mby5wYmxfYmFzZSwKKwkJICAgICBfX2Z1bmNfXywgKnBibF9hZGRyLCByZGV2X3AtPnJuaWNfaW5mby5wYmxfYmFzZSwKIAkJICAgICAqcGJsX3NpemUpOwogCQllcnIgPSBjeGlvX2hhbF9jdHJsX3FwX3dyaXRlX21lbShyZGV2X3AsCiAJCQkJKCpwYmxfYWRkciA+PiA1KSwKQEAgLTgxNCw3ICs4MTQsNyBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCp3cWUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JUERCRygiJXMgcmRldl9wICVwXG4iLCBfX0ZVTkNUSU9OX18sIHJkZXZfcCk7CisJUERCRygiJXMgcmRldl9wICVwXG4iLCBfX2Z1bmNfXywgcmRldl9wKTsKIAl3cWUgPSAoc3RydWN0IHQzX3JkbWFfaW5pdF93ciAqKSBfX3NrYl9wdXQoc2tiLCBzaXplb2YoKndxZSkpOwogCXdxZS0+d3JoLm9wX3Nlb3BfZmxhZ3MgPSBjcHVfdG9fYmUzMihWX0ZXX1JJV1JfT1AoVDNfV1JfSU5JVCkpOwogCXdxZS0+d3JoLmdlbl90aWRfbGVuID0gY3B1X3RvX2JlMzIoVl9GV19SSVdSX1RJRChhdHRyLT50aWQpIHwKQEAgLTg1Niw3ICs4NTYsNyBAQAogCXN0cnVjdCByZXNwUV9tc2dfdCAqcnNwX21zZyA9IChzdHJ1Y3QgcmVzcFFfbXNnX3QgKikgc2tiLT5kYXRhOwogCVBEQkcoIiVkOiAlcyBjcV9pZCAweCV4IGNxX3B0ciAweCV4IGdlbmJpdCAlMHggb3ZlcmZsb3cgJTB4IGFuICUweCIKIAkgICAgICIgc2UgJTB4IG5vdGlmeSAlMHggY3FicmFuY2ggJTB4IGNyZWRpdHRoICUweFxuIiwKLQkgICAgIGNudCwgX19GVU5DVElPTl9fLCBSU1BRX0NRSUQocnNwX21zZyksIFJTUFFfQ1FQVFIocnNwX21zZyksCisJICAgICBjbnQsIF9fZnVuY19fLCBSU1BRX0NRSUQocnNwX21zZyksIFJTUFFfQ1FQVFIocnNwX21zZyksCiAJICAgICBSU1BRX0dFTkJJVChyc3BfbXNnKSwgUlNQUV9PVkVSRkxPVyhyc3BfbXNnKSwgUlNQUV9BTihyc3BfbXNnKSwKIAkgICAgIFJTUFFfU0UocnNwX21zZyksIFJTUFFfTk9USUZZKHJzcF9tc2cpLCBSU1BRX0NRQlJBTkNIKHJzcF9tc2cpLAogCSAgICAgUlNQUV9DUkVESVRfVEhSRVNIKHJzcF9tc2cpKTsKQEAgLTg2OCw3ICs4NjgsNyBAQAogCSAgICAgQ1FFX1dSSURfSEkocnNwX21zZy0+Y3FlKSwgQ1FFX1dSSURfTE9XKHJzcF9tc2ctPmNxZSkpOwogCXJkZXZfcCA9IChzdHJ1Y3QgY3hpb19yZGV2ICopdDNjZGV2X3AtPnVscDsKIAlpZiAoIXJkZXZfcCkgewotCQlQREJHKCIlcyBjYWxsZWQgYnkgdDNjZGV2ICVwIHdpdGggbnVsbCB1bHBcbiIsIF9fRlVOQ1RJT05fXywKKwkJUERCRygiJXMgY2FsbGVkIGJ5IHQzY2RldiAlcCB3aXRoIG51bGwgdWxwXG4iLCBfX2Z1bmNfXywKIAkJICAgICB0M2NkZXZfcCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTkwOCwxMyArOTA4LDEzIEBACiAJCXN0cm5jcHkocmRldl9wLT5kZXZfbmFtZSwgcmRldl9wLT50M2NkZXZfcC0+bmFtZSwKIAkJCVQzX01BWF9ERVZfTkFNRV9MRU4pOwogCX0gZWxzZSB7Ci0JCVBEQkcoIiVzIHQzY2Rldl9wIG9yIGRldl9uYW1lIG11c3QgYmUgc2V0XG4iLCBfX0ZVTkNUSU9OX18pOworCQlQREJHKCIlcyB0M2NkZXZfcCBvciBkZXZfbmFtZSBtdXN0IGJlIHNldFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlsaXN0X2FkZF90YWlsKCZyZGV2X3AtPmVudHJ5LCAmcmRldl9saXN0KTsKIAotCVBEQkcoIiVzIG9wZW5pbmcgcm5pYyBkZXYgJXNcbiIsIF9fRlVOQ1RJT05fXywgcmRldl9wLT5kZXZfbmFtZSk7CisJUERCRygiJXMgb3BlbmluZyBybmljIGRldiAlc1xuIiwgX19mdW5jX18sIHJkZXZfcC0+ZGV2X25hbWUpOwogCW1lbXNldCgmcmRldl9wLT5jdHJsX3FwLCAwLCBzaXplb2YocmRldl9wLT5jdHJsX3FwKSk7CiAJaWYgKCFyZGV2X3AtPnQzY2Rldl9wKQogCQlyZGV2X3AtPnQzY2Rldl9wID0gZGV2MnQzY2RldihuZXRkZXZfcCk7CkBAIC05MjMsMTQgKzkyMywxNCBAQAogCQkJCQkgJihyZGV2X3AtPnJuaWNfaW5mbykpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyB0M2NkZXZfcCglcCktPmN0bCByZXR1cm5lZCBlcnJvciAlZC5cbiIsCi0JCSAgICAgX19GVU5DVElPTl9fLCByZGV2X3AtPnQzY2Rldl9wLCBlcnIpOworCQkgICAgIF9fZnVuY19fLCByZGV2X3AtPnQzY2Rldl9wLCBlcnIpOwogCQlnb3RvIGVycjE7CiAJfQogCWVyciA9IHJkZXZfcC0+dDNjZGV2X3AtPmN0bChyZGV2X3AtPnQzY2Rldl9wLCBHRVRfUE9SVFMsCiAJCQkJICAgICYocmRldl9wLT5wb3J0X2luZm8pKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgdDNjZGV2X3AoJXApLT5jdGwgcmV0dXJuZWQgZXJyb3IgJWQuXG4iLAotCQkgICAgIF9fRlVOQ1RJT05fXywgcmRldl9wLT50M2NkZXZfcCwgZXJyKTsKKwkJICAgICBfX2Z1bmNfXywgcmRldl9wLT50M2NkZXZfcCwgZXJyKTsKIAkJZ290byBlcnIxOwogCX0KIApAQCAtOTQ3LDcgKzk0Nyw3IEBACiAJcmRldl9wLT5xcG1hc2sgPSAoNjU1MzYgPj4gaWxvZzIocmRldl9wLT5xcG5yKSkgLSAxOwogCVBEQkcoIiVzIHJuaWMgJXMgaW5mbzogdHB0X2Jhc2UgMHglMHggdHB0X3RvcCAweCUweCBudW0gc3RhZ3MgJWQgIgogCSAgICAgInBibF9iYXNlIDB4JTB4IHBibF90b3AgMHglMHggcnF0X2Jhc2UgMHglMHgsIHJxdF90b3AgMHglMHhcbiIsCi0JICAgICBfX0ZVTkNUSU9OX18sIHJkZXZfcC0+ZGV2X25hbWUsIHJkZXZfcC0+cm5pY19pbmZvLnRwdF9iYXNlLAorCSAgICAgX19mdW5jX18sIHJkZXZfcC0+ZGV2X25hbWUsIHJkZXZfcC0+cm5pY19pbmZvLnRwdF9iYXNlLAogCSAgICAgcmRldl9wLT5ybmljX2luZm8udHB0X3RvcCwgY3hpb19udW1fc3RhZ3MocmRldl9wKSwKIAkgICAgIHJkZXZfcC0+cm5pY19pbmZvLnBibF9iYXNlLAogCSAgICAgcmRldl9wLT5ybmljX2luZm8ucGJsX3RvcCwgcmRldl9wLT5ybmljX2luZm8ucnF0X2Jhc2UsCkBAIC05NjEsNyArOTYxLDcgQEAKIAllcnIgPSBjeGlvX2hhbF9pbml0X2N0cmxfcXAocmRldl9wKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgZXJyb3IgJWQgaW5pdGlhbGl6aW5nIGN0cmxfcXAuXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBlcnIpOworCQkgICAgICAgX19mdW5jX18sIGVycik7CiAJCWdvdG8gZXJyMTsKIAl9CiAJZXJyID0gY3hpb19oYWxfaW5pdF9yZXNvdXJjZShyZGV2X3AsIGN4aW9fbnVtX3N0YWdzKHJkZXZfcCksIDAsCkBAIC05NjksMTkgKzk2OSwxOSBAQAogCQkJCSAgICAgVDNfTUFYX05VTV9QRCk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIGVycm9yICVkIGluaXRpYWxpemluZyBoYWwgcmVzb3VyY2VzLlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJICAgICAgIF9fZnVuY19fLCBlcnIpOwogCQlnb3RvIGVycjI7CiAJfQogCWVyciA9IGN4aW9faGFsX3BibHBvb2xfY3JlYXRlKHJkZXZfcCk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIGVycm9yICVkIGluaXRpYWxpemluZyBwYmwgbWVtIHBvb2wuXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBlcnIpOworCQkgICAgICAgX19mdW5jX18sIGVycik7CiAJCWdvdG8gZXJyMzsKIAl9CiAJZXJyID0gY3hpb19oYWxfcnF0cG9vbF9jcmVhdGUocmRldl9wKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgZXJyb3IgJWQgaW5pdGlhbGl6aW5nIHJxdCBtZW0gcG9vbC5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGVycik7CisJCSAgICAgICBfX2Z1bmNfXywgZXJyKTsKIAkJZ290byBlcnI0OwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwNDMsNyArMTA0Myw3IEBACiAJCQkgKiBJbnNlcnQgdGhpcyBjb21wbGV0ZWQgY3FlIGludG8gdGhlIHN3Y3EuCiAJCQkgKi8KIAkJCVBEQkcoIiVzIG1vdmluZyBjcWUgaW50byBzd2NxIHNxIGlkeCAlbGQgY3EgaWR4ICVsZFxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fLCBRX1BUUjJJRFgocHRyLCAgd3EtPnNxX3NpemVfbG9nMiksCisJCQkgICAgIF9fZnVuY19fLCBRX1BUUjJJRFgocHRyLCAgd3EtPnNxX3NpemVfbG9nMiksCiAJCQkgICAgIFFfUFRSMklEWChjcS0+c3dfd3B0ciwgY3EtPnNpemVfbG9nMikpOwogCQkJc3FwLT5jcWUuaGVhZGVyIHw9IGh0b25sKFZfQ1FFX1NXQ1FFKDEpKTsKIAkJCSooY3EtPnN3X3F1ZXVlICsgUV9QVFIySURYKGNxLT5zd193cHRyLCBjcS0+c2l6ZV9sb2cyKSkKQEAgLTExMTIsNyArMTExMiw3IEBACiAKIAlQREJHKCIlcyBDUUUgT09PICVkIHFwaWQgMHglMHggZ2VuYml0ICVkIHR5cGUgJWQgc3RhdHVzIDB4JTB4IgogCSAgICAgIiBvcGNvZGUgMHglMHggbGVuIDB4JTB4IHdyaWRfaGlfc3RhZyAweCV4IHdyaWRfbG93X21zbiAweCV4XG4iLAotCSAgICAgX19GVU5DVElPTl9fLCBDUUVfT09PKCpod19jcWUpLCBDUUVfUVBJRCgqaHdfY3FlKSwKKwkgICAgIF9fZnVuY19fLCBDUUVfT09PKCpod19jcWUpLCBDUUVfUVBJRCgqaHdfY3FlKSwKIAkgICAgIENRRV9HRU5CSVQoKmh3X2NxZSksIENRRV9UWVBFKCpod19jcWUpLCBDUUVfU1RBVFVTKCpod19jcWUpLAogCSAgICAgQ1FFX09QQ09ERSgqaHdfY3FlKSwgQ1FFX0xFTigqaHdfY3FlKSwgQ1FFX1dSSURfSEkoKmh3X2NxZSksCiAJICAgICBDUUVfV1JJRF9MT1coKmh3X2NxZSkpOwpAQCAtMTIxNSw3ICsxMjE1LDcgQEAKIAkJc3RydWN0IHQzX3N3c3EgKnNxcDsKIAogCQlQREJHKCIlcyBvdXQgb2Ygb3JkZXIgY29tcGxldGlvbiBnb2luZyBpbiBzd3NxIGF0IGlkeCAlbGRcbiIsCi0JCSAgICAgX19GVU5DVElPTl9fLAorCQkgICAgIF9fZnVuY19fLAogCQkgICAgIFFfUFRSMklEWChDUUVfV1JJRF9TUV9XUFRSKCpod19jcWUpLCB3cS0+c3Ffc2l6ZV9sb2cyKSk7CiAJCXNxcCA9IHdxLT5zcSArCiAJCSAgICAgIFFfUFRSMklEWChDUUVfV1JJRF9TUV9XUFRSKCpod19jcWUpLCB3cS0+c3Ffc2l6ZV9sb2cyKTsKQEAgLTEyMzQsMTMgKzEyMzQsMTMgQEAKIAkgKi8KIAlpZiAoU1FfVFlQRSgqaHdfY3FlKSkgewogCQl3cS0+c3FfcnB0ciA9IENRRV9XUklEX1NRX1dQVFIoKmh3X2NxZSk7Ci0JCVBEQkcoIiVzIGNvbXBsZXRpbmcgc3EgaWR4ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQlQREJHKCIlcyBjb21wbGV0aW5nIHNxIGlkeCAlbGRcbiIsIF9fZnVuY19fLAogCQkgICAgIFFfUFRSMklEWCh3cS0+c3FfcnB0ciwgd3EtPnNxX3NpemVfbG9nMikpOwogCQkqY29va2llID0gKHdxLT5zcSArCiAJCQkgICBRX1BUUjJJRFgod3EtPnNxX3JwdHIsIHdxLT5zcV9zaXplX2xvZzIpKS0+d3JfaWQ7CiAJCXdxLT5zcV9ycHRyKys7CiAJfSBlbHNlIHsKLQkJUERCRygiJXMgY29tcGxldGluZyBycSBpZHggJWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJCVBEQkcoIiVzIGNvbXBsZXRpbmcgcnEgaWR4ICVsZFxuIiwgX19mdW5jX18sCiAJCSAgICAgUV9QVFIySURYKHdxLT5ycV9ycHRyLCB3cS0+cnFfc2l6ZV9sb2cyKSk7CiAJCSpjb29raWUgPSAqKHdxLT5ycSArIFFfUFRSMklEWCh3cS0+cnFfcnB0ciwgd3EtPnJxX3NpemVfbG9nMikpOwogCQl3cS0+cnFfcnB0cisrOwpAQCAtMTI1NSwxMSArMTI1NSwxMSBAQAogc2tpcF9jcWU6CiAJaWYgKFNXX0NRRSgqaHdfY3FlKSkgewogCQlQREJHKCIlcyBjcSAlcCBjcWlkIDB4JXggc2tpcCBzdyBjcWUgc3dfcnB0ciAweCV4XG4iLAotCQkgICAgIF9fRlVOQ1RJT05fXywgY3EsIGNxLT5jcWlkLCBjcS0+c3dfcnB0cik7CisJCSAgICAgX19mdW5jX18sIGNxLCBjcS0+Y3FpZCwgY3EtPnN3X3JwdHIpOwogCQkrK2NxLT5zd19ycHRyOwogCX0gZWxzZSB7CiAJCVBEQkcoIiVzIGNxICVwIGNxaWQgMHgleCBza2lwIGh3IGNxZSBycHRyIDB4JXhcbiIsCi0JCSAgICAgX19GVU5DVElPTl9fLCBjcSwgY3EtPmNxaWQsIGNxLT5ycHRyKTsKKwkJICAgICBfX2Z1bmNfXywgY3EsIGNxLT5jcWlkLCBjcS0+cnB0cik7CiAJCSsrY3EtPnJwdHI7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5jCmluZGV4IGQzMDk1YWUuLjQ1ZWQ0ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYwpAQCAtMjA2LDEzICsyMDYsMTMgQEAKIHUzMiBjeGlvX2hhbF9nZXRfcXBpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7CiAJdTMyIHFwaWQgPSBjeGlvX2hhbF9nZXRfcmVzb3VyY2UocnNjcC0+cXBpZF9maWZvKTsKLQlQREJHKCIlcyBxcGlkIDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcXBpZCk7CisJUERCRygiJXMgcXBpZCAweCV4XG4iLCBfX2Z1bmNfXywgcXBpZCk7CiAJcmV0dXJuIHFwaWQ7CiB9CiAKIHZvaWQgY3hpb19oYWxfcHV0X3FwaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwLCB1MzIgcXBpZCkKIHsKLQlQREJHKCIlcyBxcGlkIDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcXBpZCk7CisJUERCRygiJXMgcXBpZCAweCV4XG4iLCBfX2Z1bmNfXywgcXBpZCk7CiAJY3hpb19oYWxfcHV0X3Jlc291cmNlKHJzY3AtPnFwaWRfZmlmbywgcXBpZCk7CiB9CiAKQEAgLTI1NSwxMyArMjU1LDEzIEBACiB1MzIgY3hpb19oYWxfcGJscG9vbF9hbGxvYyhzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2X3AsIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdlbl9wb29sX2FsbG9jKHJkZXZfcC0+cGJsX3Bvb2wsIHNpemUpOwotCVBEQkcoIiVzIGFkZHIgMHgleCBzaXplICVkXG4iLCBfX0ZVTkNUSU9OX18sICh1MzIpYWRkciwgc2l6ZSk7CisJUERCRygiJXMgYWRkciAweCV4IHNpemUgJWRcbiIsIF9fZnVuY19fLCAodTMyKWFkZHIsIHNpemUpOwogCXJldHVybiAodTMyKWFkZHI7CiB9CiAKIHZvaWQgY3hpb19oYWxfcGJscG9vbF9mcmVlKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCwgdTMyIGFkZHIsIGludCBzaXplKQogewotCVBEQkcoIiVzIGFkZHIgMHgleCBzaXplICVkXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHIsIHNpemUpOworCVBEQkcoIiVzIGFkZHIgMHgleCBzaXplICVkXG4iLCBfX2Z1bmNfXywgYWRkciwgc2l6ZSk7CiAJZ2VuX3Bvb2xfZnJlZShyZGV2X3AtPnBibF9wb29sLCAodW5zaWduZWQgbG9uZylhZGRyLCBzaXplKTsKIH0KIApAQCAtMjkyLDEzICsyOTIsMTMgQEAKIHUzMiBjeGlvX2hhbF9ycXRwb29sX2FsbG9jKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2VuX3Bvb2xfYWxsb2MocmRldl9wLT5ycXRfcG9vbCwgc2l6ZSA8PCA2KTsKLQlQREJHKCIlcyBhZGRyIDB4JXggc2l6ZSAlZFxuIiwgX19GVU5DVElPTl9fLCAodTMyKWFkZHIsIHNpemUgPDwgNik7CisJUERCRygiJXMgYWRkciAweCV4IHNpemUgJWRcbiIsIF9fZnVuY19fLCAodTMyKWFkZHIsIHNpemUgPDwgNik7CiAJcmV0dXJuICh1MzIpYWRkcjsKIH0KIAogdm9pZCBjeGlvX2hhbF9ycXRwb29sX2ZyZWUoc3RydWN0IGN4aW9fcmRldiAqcmRldl9wLCB1MzIgYWRkciwgaW50IHNpemUpCiB7Ci0JUERCRygiJXMgYWRkciAweCV4IHNpemUgJWRcbiIsIF9fRlVOQ1RJT05fXywgYWRkciwgc2l6ZSA8PCA2KTsKKwlQREJHKCIlcyBhZGRyIDB4JXggc2l6ZSAlZFxuIiwgX19mdW5jX18sIGFkZHIsIHNpemUgPDwgNik7CiAJZ2VuX3Bvb2xfZnJlZShyZGV2X3AtPnJxdF9wb29sLCAodW5zaWduZWQgbG9uZylhZGRyLCBzaXplIDw8IDYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYwppbmRleCAwMzE1YzlkLi42YmE0MTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAogc3RhdGljIHZvaWQgcm5pY19pbml0KHN0cnVjdCBpd2NoX2RldiAqcm5pY3ApCiB7Ci0JUERCRygiJXMgaXdjaF9kZXYgJXBcbiIsIF9fRlVOQ1RJT05fXywgIHJuaWNwKTsKKwlQREJHKCIlcyBpd2NoX2RldiAlcFxuIiwgX19mdW5jX18sICBybmljcCk7CiAJaWRyX2luaXQoJnJuaWNwLT5jcWlkcik7CiAJaWRyX2luaXQoJnJuaWNwLT5xcGlkcik7CiAJaWRyX2luaXQoJnJuaWNwLT5tbWlkcik7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAlzdHJ1Y3QgaXdjaF9kZXYgKnJuaWNwOwogCXN0YXRpYyBpbnQgdmVyc19wcmludGVkOwogCi0JUERCRygiJXMgdDNjZGV2ICVwXG4iLCBfX0ZVTkNUSU9OX18sICB0ZGV2KTsKKwlQREJHKCIlcyB0M2NkZXYgJXBcbiIsIF9fZnVuY19fLCAgdGRldik7CiAJaWYgKCF2ZXJzX3ByaW50ZWQrKykKIAkJcHJpbnRrKEtFUk5fSU5GTyBNT0QgIkNoZWxzaW8gVDMgUkRNQSBEcml2ZXIgLSB2ZXJzaW9uICVzXG4iLAogCQkgICAgICAgRFJWX1ZFUlNJT04pOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiBzdGF0aWMgdm9pZCBjbG9zZV9ybmljX2RldihzdHJ1Y3QgdDNjZGV2ICp0ZGV2KQogewogCXN0cnVjdCBpd2NoX2RldiAqZGV2LCAqdG1wOwotCVBEQkcoIiVzIHQzY2RldiAlcFxuIiwgX19GVU5DVElPTl9fLCAgdGRldik7CisJUERCRygiJXMgdDNjZGV2ICVwXG4iLCBfX2Z1bmNfXywgIHRkZXYpOwogCW11dGV4X2xvY2soJmRldl9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmZGV2X2xpc3QsIGVudHJ5KSB7CiAJCWlmIChkZXYtPnJkZXYudDNjZGV2X3AgPT0gdGRldikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmgKaW5kZXggY2FmNGU2MC4uOWFkOWIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5oCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkJCQl2b2lkICpoYW5kbGUsIHUzMiBpZCkKIHsKIAlpbnQgcmV0OwotCXUzMiBuZXdpZDsKKwlpbnQgbmV3aWQ7CiAKIAlkbyB7CiAJCWlmICghaWRyX3ByZV9nZXQoaWRyLCBHRlBfS0VSTkVMKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKaW5kZXggMzIwZjJiNi4uNzJjYTM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCkBAIC0xMTAsOSArMTEwLDkgQEAKIAogc3RhdGljIHZvaWQgc3RhcnRfZXBfdGltZXIoc3RydWN0IGl3Y2hfZXAgKmVwKQogewotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAlpZiAodGltZXJfcGVuZGluZygmZXAtPnRpbWVyKSkgewotCQlQREJHKCIlcyBzdG9wcGVkIC8gcmVzdGFydGVkIHRpbWVyIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwkJUERCRygiJXMgc3RvcHBlZCAvIHJlc3RhcnRlZCB0aW1lciBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmVwLT50aW1lcik7CiAJfSBlbHNlCiAJCWdldF9lcCgmZXAtPmNvbSk7CkBAIC0xMjQsNyArMTI0LDcgQEAKIAogc3RhdGljIHZvaWQgc3RvcF9lcF90aW1lcihzdHJ1Y3QgaXdjaF9lcCAqZXApCiB7Ci0JUERCRygiJXMgZXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCWRlbF90aW1lcl9zeW5jKCZlcC0+dGltZXIpOwogCXB1dF9lcCgmZXAtPmNvbSk7CiB9CkBAIC0xOTAsNyArMTkwLDcgQEAKIAogc3RhdGljIHZvaWQgc2V0X2Vtc3Moc3RydWN0IGl3Y2hfZXAgKmVwLCB1MTYgb3B0KQogewotCVBEQkcoIiVzIGVwICVwIG9wdCAldVxuIiwgX19GVU5DVElPTl9fLCBlcCwgb3B0KTsKKwlQREJHKCIlcyBlcCAlcCBvcHQgJXVcbiIsIF9fZnVuY19fLCBlcCwgb3B0KTsKIAllcC0+ZW1zcyA9IFQzQ19EQVRBKGVwLT5jb20udGRldiktPm10dXNbR19UQ1BPUFRfTVNTKG9wdCldIC0gNDA7CiAJaWYgKEdfVENQT1BUX1RTVEFNUChvcHQpKQogCQllcC0+ZW1zcyAtPSAxMjsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXBjLT5sb2NrLCBmbGFncyk7Ci0JUERCRygiJXMgLSAlcyAtPiAlc1xuIiwgX19GVU5DVElPTl9fLCBzdGF0ZXNbZXBjLT5zdGF0ZV0sIHN0YXRlc1tuZXddKTsKKwlQREJHKCIlcyAtICVzIC0+ICVzXG4iLCBfX2Z1bmNfXywgc3RhdGVzW2VwYy0+c3RhdGVdLCBzdGF0ZXNbbmV3XSk7CiAJX19zdGF0ZV9zZXQoZXBjLCBuZXcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybjsKQEAgLTIzNiw3ICsyMzYsNyBAQAogCQlzcGluX2xvY2tfaW5pdCgmZXBjLT5sb2NrKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmZXBjLT53YWl0cSk7CiAJfQotCVBEQkcoIiVzIGFsbG9jIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwYyk7CisJUERCRygiJXMgYWxsb2MgZXAgJXBcbiIsIF9fZnVuY19fLCBlcGMpOwogCXJldHVybiBlcGM7CiB9CiAKQEAgLTI0NCwxMyArMjQ0LDEzIEBACiB7CiAJc3RydWN0IGl3Y2hfZXBfY29tbW9uICplcGM7CiAJZXBjID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBpd2NoX2VwX2NvbW1vbiwga3JlZik7Ci0JUERCRygiJXMgZXAgJXAgc3RhdGUgJXNcbiIsIF9fRlVOQ1RJT05fXywgZXBjLCBzdGF0ZXNbc3RhdGVfcmVhZChlcGMpXSk7CisJUERCRygiJXMgZXAgJXAgc3RhdGUgJXNcbiIsIF9fZnVuY19fLCBlcGMsIHN0YXRlc1tzdGF0ZV9yZWFkKGVwYyldKTsKIAlrZnJlZShlcGMpOwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX2VwX3Jlc291cmNlcyhzdHJ1Y3QgaXdjaF9lcCAqZXApCiB7Ci0JUERCRygiJXMgZXAgJXAgdGlkICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLCBlcC0+aHd0aWQpOworCVBEQkcoIiVzIGVwICVwIHRpZCAlZFxuIiwgX19mdW5jX18sIGVwLCBlcC0+aHd0aWQpOwogCWN4Z2IzX3JlbW92ZV90aWQoZXAtPmNvbS50ZGV2LCAodm9pZCAqKWVwLCBlcC0+aHd0aWQpOwogCWRzdF9yZWxlYXNlKGVwLT5kc3QpOwogCWwydF9yZWxlYXNlKEwyREFUQShlcC0+Y29tLnRkZXYpLCBlcC0+bDJ0KTsKQEAgLTM0OSw3ICszNDksNyBAQAogCiBzdGF0aWMgdm9pZCBhcnBfZmFpbHVyZV9kaXNjYXJkKHN0cnVjdCB0M2NkZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlQREJHKCIlcyB0M2NkZXYgJXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2KTsKKwlQREJHKCIlcyB0M2NkZXYgJXBcbiIsIF9fZnVuY19fLCBkZXYpOwogCWtmcmVlX3NrYihza2IpOwogfQogCkBAIC0zNzAsNyArMzcwLDcgQEAKIHsKIAlzdHJ1Y3QgY3BsX2Fib3J0X3JlcSAqcmVxID0gY3BsaGRyKHNrYik7CiAKLQlQREJHKCIlcyB0M2NkZXYgJXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2KTsKKwlQREJHKCIlcyB0M2NkZXYgJXBcbiIsIF9fZnVuY19fLCBkZXYpOwogCXJlcS0+Y21kID0gQ1BMX0FCT1JUX05PX1JTVDsKIAljeGdiM19vZmxkX3NlbmQoZGV2LCBza2IpOwogfQpAQCAtMzgwLDEwICszODAsMTAgQEAKIAlzdHJ1Y3QgY3BsX2Nsb3NlX2Nvbl9yZXEgKnJlcTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JUERCRygiJXMgZXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCXNrYiA9IGdldF9za2IoTlVMTCwgc2l6ZW9mKCpyZXEpLCBnZnApOwogCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gZmFpbGVkIHRvIGFsbG9jIHNrYlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBmYWlsZWQgdG8gYWxsb2Mgc2tiXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlza2ItPnByaW9yaXR5ID0gQ1BMX1BSSU9SSVRZX0RBVEE7CkBAIC00MDAsMTEgKzQwMCwxMSBAQAogewogCXN0cnVjdCBjcGxfYWJvcnRfcmVxICpyZXE7CiAKLQlQREJHKCIlcyBlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CiAJc2tiID0gZ2V0X3NrYihza2IsIHNpemVvZigqcmVxKSwgZ2ZwKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGZhaWxlZCB0byBhbGxvYyBza2IuXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXNrYi0+cHJpb3JpdHkgPSBDUExfUFJJT1JJVFlfREFUQTsKQEAgLTQyNiwxMiArNDI2LDEyIEBACiAJdW5zaWduZWQgaW50IG10dV9pZHg7CiAJaW50IHdzY2FsZTsKIAotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAogCXNrYiA9IGdldF9za2IoTlVMTCwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGZhaWxlZCB0byBhbGxvYyBza2IuXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW10dV9pZHggPSBmaW5kX2Jlc3RfbXR1KFQzQ19EQVRBKGVwLT5jb20udGRldiksIGRzdF9tdHUoZXAtPmRzdCkpOwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAJc3RydWN0IG1wYV9tZXNzYWdlICptcGE7CiAJaW50IGxlbjsKIAotCVBEQkcoIiVzIGVwICVwIHBkX2xlbiAlZFxuIiwgX19GVU5DVElPTl9fLCBlcCwgZXAtPnBsZW4pOworCVBEQkcoIiVzIGVwICVwIHBkX2xlbiAlZFxuIiwgX19mdW5jX18sIGVwLCBlcC0+cGxlbik7CiAKIAlCVUdfT04oc2tiX2Nsb25lZChza2IpKTsKIApAQCAtNTMwLDEzICs1MzAsMTMgQEAKIAlzdHJ1Y3QgbXBhX21lc3NhZ2UgKm1wYTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JUERCRygiJXMgZXAgJXAgcGxlbiAlZFxuIiwgX19GVU5DVElPTl9fLCBlcCwgcGxlbik7CisJUERCRygiJXMgZXAgJXAgcGxlbiAlZFxuIiwgX19mdW5jX18sIGVwLCBwbGVuKTsKIAogCW1wYWxlbiA9IHNpemVvZigqbXBhKSArIHBsZW47CiAKIAlza2IgPSBnZXRfc2tiKE5VTEwsIG1wYWxlbiArIHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBjYW5ub3QgYWxsb2Mgc2tiIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBjYW5ub3QgYWxsb2Mgc2tiIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2tiX3Jlc2VydmUoc2tiLCBzaXplb2YoKnJlcSkpOwpAQCAtNTgwLDEzICs1ODAsMTMgQEAKIAlpbnQgbGVuOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlQREJHKCIlcyBlcCAlcCBwbGVuICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLCBwbGVuKTsKKwlQREJHKCIlcyBlcCAlcCBwbGVuICVkXG4iLCBfX2Z1bmNfXywgZXAsIHBsZW4pOwogCiAJbXBhbGVuID0gc2l6ZW9mKCptcGEpICsgcGxlbjsKIAogCXNrYiA9IGdldF9za2IoTlVMTCwgbXBhbGVuICsgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGNhbm5vdCBhbGxvYyBza2IhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGNhbm5vdCBhbGxvYyBza2IhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlza2ItPnByaW9yaXR5ID0gQ1BMX1BSSU9SSVRZX0RBVEE7CkBAIC02MzAsNyArNjMwLDcgQEAKIAlzdHJ1Y3QgY3BsX2FjdF9lc3RhYmxpc2ggKnJlcSA9IGNwbGhkcihza2IpOwogCXVuc2lnbmVkIGludCB0aWQgPSBHRVRfVElEKHJlcSk7CiAKLQlQREJHKCIlcyBlcCAlcCB0aWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXAsIHRpZCk7CisJUERCRygiJXMgZXAgJXAgdGlkICVkXG4iLCBfX2Z1bmNfXywgZXAsIHRpZCk7CiAKIAlkc3RfY29uZmlybShlcC0+ZHN0KTsKIApAQCAtNjYzLDcgKzY2Myw3IEBACiB7CiAJc3RydWN0IGl3X2NtX2V2ZW50IGV2ZW50OwogCi0JUERCRygiJXMgZXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOwogCWV2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ0xPU0U7CiAJaWYgKGVwLT5jb20uY21faWQpIHsKQEAgLTY4MCw3ICs2ODAsNyBAQAogewogCXN0cnVjdCBpd19jbV9ldmVudCBldmVudDsKIAotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKIAlldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0RJU0NPTk5FQ1Q7CiAJaWYgKGVwLT5jb20uY21faWQpIHsKQEAgLTY5NCw3ICs2OTQsNyBAQAogewogCXN0cnVjdCBpd19jbV9ldmVudCBldmVudDsKIAotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKIAlldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NMT1NFOwogCWV2ZW50LnN0YXR1cyA9IC1FQ09OTlJFU0VUOwpAQCAtNzEyLDcgKzcxMiw3IEBACiB7CiAJc3RydWN0IGl3X2NtX2V2ZW50IGV2ZW50OwogCi0JUERCRygiJXMgZXAgJXAgc3RhdHVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLCBzdGF0dXMpOworCVBEQkcoIiVzIGVwICVwIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIGVwLCBzdGF0dXMpOwogCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOwogCWV2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ09OTkVDVF9SRVBMWTsKIAlldmVudC5zdGF0dXMgPSBzdGF0dXM7CkBAIC03MjQsNyArNzI0LDcgQEAKIAkJZXZlbnQucHJpdmF0ZV9kYXRhID0gZXAtPm1wYV9wa3QgKyBzaXplb2Yoc3RydWN0IG1wYV9tZXNzYWdlKTsKIAl9CiAJaWYgKGVwLT5jb20uY21faWQpIHsKLQkJUERCRygiJXMgZXAgJXAgdGlkICVkIHN0YXR1cyAlZFxuIiwgX19GVU5DVElPTl9fLCBlcCwKKwkJUERCRygiJXMgZXAgJXAgdGlkICVkIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIGVwLAogCQkgICAgIGVwLT5od3RpZCwgc3RhdHVzKTsKIAkJZXAtPmNvbS5jbV9pZC0+ZXZlbnRfaGFuZGxlcihlcC0+Y29tLmNtX2lkLCAmZXZlbnQpOwogCX0KQEAgLTczOSw3ICs3MzksNyBAQAogewogCXN0cnVjdCBpd19jbV9ldmVudCBldmVudDsKIAotCVBEQkcoIiVzIGVwICVwIHRpZCAlZFxuIiwgX19GVU5DVElPTl9fLCBlcCwgZXAtPmh3dGlkKTsKKwlQREJHKCIlcyBlcCAlcCB0aWQgJWRcbiIsIF9fZnVuY19fLCBlcCwgZXAtPmh3dGlkKTsKIAltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKIAlldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDsKIAlldmVudC5sb2NhbF9hZGRyID0gZXAtPmNvbS5sb2NhbF9hZGRyOwpAQCAtNzU5LDExICs3NTksMTEgQEAKIHsKIAlzdHJ1Y3QgaXdfY21fZXZlbnQgZXZlbnQ7CiAKLQlQREJHKCIlcyBlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CiAJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CiAJZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9FU1RBQkxJU0hFRDsKIAlpZiAoZXAtPmNvbS5jbV9pZCkgewotCQlQREJHKCIlcyBlcCAlcCB0aWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXAsIGVwLT5od3RpZCk7CisJCVBEQkcoIiVzIGVwICVwIHRpZCAlZFxuIiwgX19mdW5jX18sIGVwLCBlcC0+aHd0aWQpOwogCQllcC0+Y29tLmNtX2lkLT5ldmVudF9oYW5kbGVyKGVwLT5jb20uY21faWQsICZldmVudCk7CiAJfQogfQpAQCAtNzczLDcgKzc3Myw3IEBACiAJc3RydWN0IGNwbF9yeF9kYXRhX2FjayAqcmVxOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlQREJHKCIlcyBlcCAlcCBjcmVkaXRzICV1XG4iLCBfX0ZVTkNUSU9OX18sIGVwLCBjcmVkaXRzKTsKKwlQREJHKCIlcyBlcCAlcCBjcmVkaXRzICV1XG4iLCBfX2Z1bmNfXywgZXAsIGNyZWRpdHMpOwogCXNrYiA9IGdldF9za2IoTlVMTCwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgTU9EICJ1cGRhdGVfcnhfY3JlZGl0cyAtIGNhbm5vdCBhbGxvYyBza2IhXG4iKTsKQEAgLTc5Nyw3ICs3OTcsNyBAQAogCWVudW0gaXdjaF9xcF9hdHRyX21hc2sgbWFzazsKIAlpbnQgZXJyOwogCi0JUERCRygiJXMgZXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCiAJLyoKIAkgKiBTdG9wIG1wYSB0aW1lci4gIElmIGl0IGV4cGlyZWQsIHRoZW4gdGhlIHN0YXRlIGhhcwpAQCAtODg0LDcgKzg4NCw3IEBACiAJZXAtPm1wYV9hdHRyLnhtaXRfbWFya2VyX2VuYWJsZWQgPSBtcGEtPmZsYWdzICYgTVBBX01BUktFUlMgPyAxIDogMDsKIAllcC0+bXBhX2F0dHIudmVyc2lvbiA9IG1wYV9yZXY7CiAJUERCRygiJXMgLSBjcmNfZW5hYmxlZD0lZCwgcmVjdl9tYXJrZXJfZW5hYmxlZD0lZCwgIgotCSAgICAgInhtaXRfbWFya2VyX2VuYWJsZWQ9JWQsIHZlcnNpb249JWRcbiIsIF9fRlVOQ1RJT05fXywKKwkgICAgICJ4bWl0X21hcmtlcl9lbmFibGVkPSVkLCB2ZXJzaW9uPSVkXG4iLCBfX2Z1bmNfXywKIAkgICAgIGVwLT5tcGFfYXR0ci5jcmNfZW5hYmxlZCwgZXAtPm1wYV9hdHRyLnJlY3ZfbWFya2VyX2VuYWJsZWQsCiAJICAgICBlcC0+bXBhX2F0dHIueG1pdF9tYXJrZXJfZW5hYmxlZCwgZXAtPm1wYV9hdHRyLnZlcnNpb24pOwogCkBAIC05MTUsNyArOTE1LDcgQEAKIAlzdHJ1Y3QgbXBhX21lc3NhZ2UgKm1wYTsKIAl1MTYgcGxlbjsKIAotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAogCS8qCiAJICogU3RvcCBtcGEgdGltZXIuICBJZiBpdCBleHBpcmVkLCB0aGVuIHRoZSBzdGF0ZSBoYXMKQEAgLTkzNSw3ICs5MzUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JUERCRygiJXMgZW50ZXIgKCVzIGxpbmUgJXUpXG4iLCBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJUERCRygiJXMgZW50ZXIgKCVzIGxpbmUgJXUpXG4iLCBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsKIAogCS8qCiAJICogQ29weSB0aGUgbmV3IGRhdGEgaW50byBvdXIgYWNjdW11bGF0aW9uIGJ1ZmZlci4KQEAgLTk1MCw3ICs5NTAsNyBAQAogCSAqLwogCWlmIChlcC0+bXBhX3BrdF9sZW4gPCBzaXplb2YoKm1wYSkpCiAJCXJldHVybjsKLQlQREJHKCIlcyBlbnRlciAoJXMgbGluZSAldSlcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKKwlQREJHKCIlcyBlbnRlciAoJXMgbGluZSAldSlcbiIsIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwogCW1wYSA9IChzdHJ1Y3QgbXBhX21lc3NhZ2UgKikgZXAtPm1wYV9wa3Q7CiAKIAkvKgpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAllcC0+bXBhX2F0dHIueG1pdF9tYXJrZXJfZW5hYmxlZCA9IG1wYS0+ZmxhZ3MgJiBNUEFfTUFSS0VSUyA/IDEgOiAwOwogCWVwLT5tcGFfYXR0ci52ZXJzaW9uID0gbXBhX3JldjsKIAlQREJHKCIlcyAtIGNyY19lbmFibGVkPSVkLCByZWN2X21hcmtlcl9lbmFibGVkPSVkLCAiCi0JICAgICAieG1pdF9tYXJrZXJfZW5hYmxlZD0lZCwgdmVyc2lvbj0lZFxuIiwgX19GVU5DVElPTl9fLAorCSAgICAgInhtaXRfbWFya2VyX2VuYWJsZWQ9JWQsIHZlcnNpb249JWRcbiIsIF9fZnVuY19fLAogCSAgICAgZXAtPm1wYV9hdHRyLmNyY19lbmFibGVkLCBlcC0+bXBhX2F0dHIucmVjdl9tYXJrZXJfZW5hYmxlZCwKIAkgICAgIGVwLT5tcGFfYXR0ci54bWl0X21hcmtlcl9lbmFibGVkLCBlcC0+bXBhX2F0dHIudmVyc2lvbik7CiAKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJc3RydWN0IGNwbF9yeF9kYXRhICpoZHIgPSBjcGxoZHIoc2tiKTsKIAl1bnNpZ25lZCBpbnQgZGxlbiA9IG50b2hzKGhkci0+bGVuKTsKIAotCVBEQkcoIiVzIGVwICVwIGRsZW4gJXVcbiIsIF9fRlVOQ1RJT05fXywgZXAsIGRsZW4pOworCVBEQkcoIiVzIGVwICVwIGRsZW4gJXVcbiIsIF9fZnVuY19fLCBlcCwgZGxlbik7CiAKIAlza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSk7CiAJc2tiX3RyaW0oc2tiLCBkbGVuKTsKQEAgLTEwMzcsNyArMTAzNyw3IEBACiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgVW5leHBlY3RlZCBzdHJlYW1pbmcgZGF0YS4iCiAJCSAgICAgICAiIGVwICVwIHN0YXRlICVkIHRpZCAlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZXAsIHN0YXRlX3JlYWQoJmVwLT5jb20pLCBlcC0+aHd0aWQpOworCQkgICAgICAgX19mdW5jX18sIGVwLCBzdGF0ZV9yZWFkKCZlcC0+Y29tKSwgZXAtPmh3dGlkKTsKIAogCQkvKgogCQkgKiBUaGUgZXAgd2lsbCB0aW1lb3V0IGFuZCBpbmZvcm0gdGhlIFVMUCBvZiB0aGUgZmFpbHVyZS4KQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJc3RydWN0IGNwbF93cl9hY2sgKmhkciA9IGNwbGhkcihza2IpOwogCXVuc2lnbmVkIGludCBjcmVkaXRzID0gbnRvaHMoaGRyLT5jcmVkaXRzKTsKIAotCVBEQkcoIiVzIGVwICVwIGNyZWRpdHMgJXVcbiIsIF9fRlVOQ1RJT05fXywgZXAsIGNyZWRpdHMpOworCVBEQkcoIiVzIGVwICVwIGNyZWRpdHMgJXVcbiIsIF9fZnVuY19fLCBlcCwgY3JlZGl0cyk7CiAKIAlpZiAoY3JlZGl0cyA9PSAwKQogCQlyZXR1cm4gQ1BMX1JFVF9CVUZfRE9ORTsKQEAgLTEwODQsNyArMTA4NCw3IEBACiB7CiAJc3RydWN0IGl3Y2hfZXAgKmVwID0gY3R4OwogCi0JUERCRygiJXMgZXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCiAJLyoKIAkgKiBXZSBnZXQgMiBhYm9ydCByZXBsaWVzIGZyb20gdGhlIEhXLiAgVGhlIGZpcnN0IG9uZSBtdXN0CkBAIC0xMTE1LDcgKzExMTUsNyBAQAogCXN0cnVjdCBpd2NoX2VwICplcCA9IGN0eDsKIAlzdHJ1Y3QgY3BsX2FjdF9vcGVuX3JwbCAqcnBsID0gY3BsaGRyKHNrYik7CiAKLQlQREJHKCIlcyBlcCAlcCBzdGF0dXMgJXUgZXJybm8gJWRcbiIsIF9fRlVOQ1RJT05fXywgZXAsIHJwbC0+c3RhdHVzLAorCVBEQkcoIiVzIGVwICVwIHN0YXR1cyAldSBlcnJubyAlZFxuIiwgX19mdW5jX18sIGVwLCBycGwtPnN0YXR1cywKIAkgICAgIHN0YXR1czJlcnJubyhycGwtPnN0YXR1cykpOwogCWNvbm5lY3RfcmVwbHlfdXBjYWxsKGVwLCBzdGF0dXMyZXJybm8ocnBsLT5zdGF0dXMpKTsKIAlzdGF0ZV9zZXQoJmVwLT5jb20sIERFQUQpOwpAQCAtMTEzMyw3ICsxMTMzLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBjcGxfcGFzc19vcGVuX3JlcSAqcmVxOwogCi0JUERCRygiJXMgZXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCXNrYiA9IGdldF9za2IoTlVMTCwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgTU9EICJ0M2NfbGlzdGVuX3N0YXJ0IGZhaWxlZCB0byBhbGxvYyBza2IhXG4iKTsKQEAgLTExNjIsNyArMTE2Miw3IEBACiAJc3RydWN0IGl3Y2hfbGlzdGVuX2VwICplcCA9IGN0eDsKIAlzdHJ1Y3QgY3BsX3Bhc3Nfb3Blbl9ycGwgKnJwbCA9IGNwbGhkcihza2IpOwogCi0JUERCRygiJXMgZXAgJXAgc3RhdHVzICVkIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLAorCVBEQkcoIiVzIGVwICVwIHN0YXR1cyAlZCBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVwLAogCSAgICAgcnBsLT5zdGF0dXMsIHN0YXR1czJlcnJubyhycGwtPnN0YXR1cykpOwogCWVwLT5jb20ucnBsX2VyciA9IHN0YXR1czJlcnJubyhycGwtPnN0YXR1cyk7CiAJZXAtPmNvbS5ycGxfZG9uZSA9IDE7CkBAIC0xMTc2LDEwICsxMTc2LDEwIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgY3BsX2Nsb3NlX2xpc3RzZXJ2X3JlcSAqcmVxOwogCi0JUERCRygiJXMgZXAgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCVBEQkcoIiVzIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCXNrYiA9IGdldF9za2IoTlVMTCwgc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGZhaWxlZCB0byBhbGxvYyBza2JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gZmFpbGVkIHRvIGFsbG9jIHNrYlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmVxID0gKHN0cnVjdCBjcGxfY2xvc2VfbGlzdHNlcnZfcmVxICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJlcSkpOwpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAKIAlzdHJ1Y3QgaXdjaF9saXN0ZW5fZXAgKmVwID0gY3R4OwogCXN0cnVjdCBjcGxfY2xvc2VfbGlzdHNlcnZfcnBsICpycGwgPSBjcGxoZHIoc2tiKTsKIAotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAllcC0+Y29tLnJwbF9lcnIgPSBzdGF0dXMyZXJybm8ocnBsLT5zdGF0dXMpOwogCWVwLT5jb20ucnBsX2RvbmUgPSAxOwogCXdha2VfdXAoJmVwLT5jb20ud2FpdHEpOwpAQCAtMTIxMSw3ICsxMjExLDcgQEAKIAl1MzIgb3B0MGgsIG9wdDBsLCBvcHQyOwogCWludCB3c2NhbGU7CiAKLQlQREJHKCIlcyBlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CiAJQlVHX09OKHNrYl9jbG9uZWQoc2tiKSk7CiAJc2tiX3RyaW0oc2tiLCBzaXplb2YoKnJwbCkpOwogCXNrYl9nZXQoc2tiKTsKQEAgLTEyNDQsNyArMTI0NCw3IEBACiBzdGF0aWMgdm9pZCByZWplY3RfY3Ioc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIGh3dGlkLCBfX2JlMzIgcGVlcl9pcCwKIAkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlQREJHKCIlcyB0M2NkZXYgJXAgdGlkICV1IHBlZXJfaXAgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGRldiwgaHd0aWQsCisJUERCRygiJXMgdDNjZGV2ICVwIHRpZCAldSBwZWVyX2lwICV4XG4iLCBfX2Z1bmNfXywgdGRldiwgaHd0aWQsCiAJICAgICBwZWVyX2lwKTsKIAlCVUdfT04oc2tiX2Nsb25lZChza2IpKTsKIAlza2JfdHJpbShza2IsIHNpemVvZihzdHJ1Y3QgY3BsX3RpZF9yZWxlYXNlKSk7CkBAIC0xMjc5LDExICsxMjc5LDExIEBACiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJc3RydWN0IGlmZl9tYWMgdGltOwogCi0JUERCRygiJXMgcGFyZW50IGVwICVwIHRpZCAldVxuIiwgX19GVU5DVElPTl9fLCBwYXJlbnRfZXAsIGh3dGlkKTsKKwlQREJHKCIlcyBwYXJlbnQgZXAgJXAgdGlkICV1XG4iLCBfX2Z1bmNfXywgcGFyZW50X2VwLCBod3RpZCk7CiAKIAlpZiAoc3RhdGVfcmVhZCgmcGFyZW50X2VwLT5jb20pICE9IExJU1RFTikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzIC0gbGlzdGVuaW5nIGVwIG5vdCBpbiBMSVNURU5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIHJlamVjdDsKIAl9CiAKQEAgLTEyOTUsNyArMTI5NSw3IEBACiAJaWYgKHRkZXYtPmN0bCh0ZGV2LCBHRVRfSUZGX0ZST01fTUFDLCAmdGltKSA8IDAgfHwgIXRpbS5kZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXMgYmFkIGRzdCBtYWMgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCQlfX0ZVTkNUSU9OX18sCisJCQlfX2Z1bmNfXywKIAkJCXJlcS0+ZHN0X21hY1swXSwKIAkJCXJlcS0+ZHN0X21hY1sxXSwKIAkJCXJlcS0+ZHN0X21hY1syXSwKQEAgLTEzMTMsMjEgKzEzMTMsMjEgQEAKIAkJCXJlcS0+cGVlcl9wb3J0LCBHX1BBU1NfT1BFTl9UT1MobnRvaGwocmVxLT50b3NfdGlkKSkpOwogCWlmICghcnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBmYWlsZWQgdG8gZmluZCBkc3QgZW50cnkhXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byByZWplY3Q7CiAJfQogCWRzdCA9ICZydC0+dS5kc3Q7CiAJbDJ0ID0gdDNfbDJ0X2dldCh0ZGV2LCBkc3QtPm5laWdoYm91ciwgZHN0LT5uZWlnaGJvdXItPmRldik7CiAJaWYgKCFsMnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBmYWlsZWQgdG8gYWxsb2NhdGUgbDJ0IGVudHJ5IVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCWdvdG8gcmVqZWN0OwogCX0KIAljaGlsZF9lcCA9IGFsbG9jX2VwKHNpemVvZigqY2hpbGRfZXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaWxkX2VwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gZmFpbGVkIHRvIGFsbG9jYXRlIGVwIGVudHJ5IVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWwydF9yZWxlYXNlKEwyREFUQSh0ZGV2KSwgbDJ0KTsKIAkJZHN0X3JlbGVhc2UoZHN0KTsKIAkJZ290byByZWplY3Q7CkBAIC0xMzYyLDcgKzEzNjIsNyBAQAogCXN0cnVjdCBpd2NoX2VwICplcCA9IGN0eDsKIAlzdHJ1Y3QgY3BsX3Bhc3NfZXN0YWJsaXNoICpyZXEgPSBjcGxoZHIoc2tiKTsKIAotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAllcC0+c25kX3NlcSA9IG50b2hsKHJlcS0+c25kX2lzbik7CiAJZXAtPnJjdl9zZXEgPSBudG9obChyZXEtPnJjdl9pc24pOwogCkBAIC0xMzgzLDcgKzEzODMsNyBAQAogCWludCBkaXNjb25uZWN0ID0gMTsKIAlpbnQgcmVsZWFzZSA9IDA7CiAKLQlQREJHKCIlcyBlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CiAJZHN0X2NvbmZpcm0oZXAtPmRzdCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmNvbS5sb2NrLCBmbGFncyk7CkBAIC0xNDczLDcgKzE0NzMsNyBAQAogCWludCBzdGF0ZTsKIAogCWlmIChpc19uZWdfYWR2X2Fib3J0KHJlcS0+c3RhdHVzKSkgewotCQlQREJHKCIlcyBuZWdfYWR2X2Fib3J0IGVwICVwIHRpZCAlZFxuIiwgX19GVU5DVElPTl9fLCBlcCwKKwkJUERCRygiJXMgbmVnX2Fkdl9hYm9ydCBlcCAlcCB0aWQgJWRcbiIsIF9fZnVuY19fLCBlcCwKIAkJICAgICBlcC0+aHd0aWQpOwogCQl0M19sMnRfc2VuZF9ldmVudChlcC0+Y29tLnRkZXYsIGVwLT5sMnQpOwogCQlyZXR1cm4gQ1BMX1JFVF9CVUZfRE9ORTsKQEAgLTE0ODksNyArMTQ4OSw3IEBACiAJfQogCiAJc3RhdGUgPSBzdGF0ZV9yZWFkKCZlcC0+Y29tKTsKLQlQREJHKCIlcyBlcCAlcCBzdGF0ZSAldVxuIiwgX19GVU5DVElPTl9fLCBlcCwgc3RhdGUpOworCVBEQkcoIiVzIGVwICVwIHN0YXRlICV1XG4iLCBfX2Z1bmNfXywgZXAsIHN0YXRlKTsKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBDT05ORUNUSU5HOgogCQlicmVhazsKQEAgLTE1MjgsMTQgKzE1MjgsMTQgQEAKIAkJCWlmIChyZXQpCiAJCQkJcHJpbnRrKEtFUk5fRVJSIE1PRAogCQkJCSAgICAgICAiJXMgLSBxcCA8LSBlcnJvciBmYWlsZWQhXG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCX0KIAkJcGVlcl9hYm9ydF91cGNhbGwoZXApOwogCQlicmVhazsKIAljYXNlIEFCT1JUSU5HOgogCQlicmVhazsKIAljYXNlIERFQUQ6Ci0JCVBEQkcoIiVzIFBFRVJfQUJPUlQgSU4gREVBRCBTVEFURSEhISFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCVBEQkcoIiVzIFBFRVJfQUJPUlQgSU4gREVBRCBTVEFURSEhISFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIENQTF9SRVRfQlVGX0RPTkU7CiAJZGVmYXVsdDoKIAkJQlVHX09OKDEpOwpAQCAtMTU0Niw3ICsxNTQ2LDcgQEAKIAlycGxfc2tiID0gZ2V0X3NrYihza2IsIHNpemVvZigqcnBsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFycGxfc2tiKSB7CiAJCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gY2Fubm90IGFsbG9jYXRlIHNrYiFcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlkc3RfcmVsZWFzZShlcC0+ZHN0KTsKIAkJbDJ0X3JlbGVhc2UoTDJEQVRBKGVwLT5jb20udGRldiksIGVwLT5sMnQpOwogCQlwdXRfZXAoJmVwLT5jb20pOwpAQCAtMTU3Myw3ICsxNTczLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZWxlYXNlID0gMDsKIAotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAlCVUdfT04oIWVwKTsKIAogCS8qIFRoZSBjbV9pZCBtYXkgYmUgbnVsbCBpZiB3ZSBmYWlsZWQgdG8gY29ubmVjdCAqLwpAQCAtMTYyNCw5ICsxNjI0LDkgQEAKIHsKIAlzdHJ1Y3QgaXdjaF9lcCAqZXAgPSBjdHg7CiAKLQlQREJHKCIlcyBlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CiAJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGNwbF9yZG1hX3Rlcm1pbmF0ZSkpOwotCVBEQkcoIiVzIHNhdmluZyAlZCBieXRlcyBvZiB0ZXJtIG1zZ1xuIiwgX19GVU5DVElPTl9fLCBza2ItPmxlbik7CisJUERCRygiJXMgc2F2aW5nICVkIGJ5dGVzIG9mIHRlcm0gbXNnXG4iLCBfX2Z1bmNfXywgc2tiLT5sZW4pOwogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBlcC0+Y29tLnFwLT5hdHRyLnRlcm1pbmF0ZV9idWZmZXIsCiAJCQkJICBza2ItPmxlbik7CiAJZXAtPmNvbS5xcC0+YXR0ci50ZXJtaW5hdGVfbXNnX2xlbiA9IHNrYi0+bGVuOwpAQCAtMTYzOSwxMyArMTYzOSwxMyBAQAogCXN0cnVjdCBjcGxfcmRtYV9lY19zdGF0dXMgKnJlcCA9IGNwbGhkcihza2IpOwogCXN0cnVjdCBpd2NoX2VwICplcCA9IGN0eDsKIAotCVBEQkcoIiVzIGVwICVwIHRpZCAldSBzdGF0dXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXAsIGVwLT5od3RpZCwKKwlQREJHKCIlcyBlcCAlcCB0aWQgJXUgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgZXAsIGVwLT5od3RpZCwKIAkgICAgIHJlcC0+c3RhdHVzKTsKIAlpZiAocmVwLT5zdGF0dXMpIHsKIAkJc3RydWN0IGl3Y2hfcXBfYXR0cmlidXRlcyBhdHRyczsKIAogCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyBCQUQgQ0xPU0UgLSBBYm9ydGluZyB0aWQgJXVcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGVwLT5od3RpZCk7CisJCSAgICAgICBfX2Z1bmNfXywgZXAtPmh3dGlkKTsKIAkJc3RvcF9lcF90aW1lcihlcCk7CiAJCWF0dHJzLm5leHRfc3RhdGUgPSBJV0NIX1FQX1NUQVRFX0VSUk9SOwogCQlpd2NoX21vZGlmeV9xcChlcC0+Y29tLnFwLT5yaHAsCkBAIC0xNjYzLDcgKzE2NjMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmNvbS5sb2NrLCBmbGFncyk7Ci0JUERCRygiJXMgZXAgJXAgdGlkICV1IHN0YXRlICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLCBlcC0+aHd0aWQsCisJUERCRygiJXMgZXAgJXAgdGlkICV1IHN0YXRlICVkXG4iLCBfX2Z1bmNfXywgZXAsIGVwLT5od3RpZCwKIAkgICAgIGVwLT5jb20uc3RhdGUpOwogCXN3aXRjaCAoZXAtPmNvbS5zdGF0ZSkgewogCWNhc2UgTVBBX1JFUV9TRU5UOgpAQCAtMTY5Myw3ICsxNjkzLDcgQEAKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBpd2NoX2VwICplcCA9IHRvX2VwKGNtX2lkKTsKLQlQREJHKCIlcyBlcCAlcCB0aWQgJXVcbiIsIF9fRlVOQ1RJT05fXywgZXAsIGVwLT5od3RpZCk7CisJUERCRygiJXMgZXAgJXAgdGlkICV1XG4iLCBfX2Z1bmNfXywgZXAsIGVwLT5od3RpZCk7CiAKIAlpZiAoc3RhdGVfcmVhZCgmZXAtPmNvbSkgPT0gREVBRCkgewogCQlwdXRfZXAoJmVwLT5jb20pOwpAQCAtMTcxOCw3ICsxNzE4LDcgQEAKIAlzdHJ1Y3QgaXdjaF9kZXYgKmggPSB0b19pd2NoX2RldihjbV9pZC0+ZGV2aWNlKTsKIAlzdHJ1Y3QgaXdjaF9xcCAqcXAgPSBnZXRfcWhwKGgsIGNvbm5fcGFyYW0tPnFwbik7CiAKLQlQREJHKCIlcyBlcCAlcCB0aWQgJXVcbiIsIF9fRlVOQ1RJT05fXywgZXAsIGVwLT5od3RpZCk7CisJUERCRygiJXMgZXAgJXAgdGlkICV1XG4iLCBfX2Z1bmNfXywgZXAsIGVwLT5od3RpZCk7CiAJaWYgKHN0YXRlX3JlYWQoJmVwLT5jb20pID09IERFQUQpCiAJCXJldHVybiAtRUNPTk5SRVNFVDsKIApAQCAtMTczOSwxMyArMTczOSwxMyBAQAogCWVwLT5jb20ucnBsX2VyciA9IDA7CiAJZXAtPmlyZCA9IGNvbm5fcGFyYW0tPmlyZDsKIAllcC0+b3JkID0gY29ubl9wYXJhbS0+b3JkOwotCVBEQkcoIiVzICVkIGlyZCAlZCBvcmQgJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGVwLT5pcmQsIGVwLT5vcmQpOworCVBEQkcoIiVzICVkIGlyZCAlZCBvcmQgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZXAtPmlyZCwgZXAtPm9yZCk7CiAKIAlnZXRfZXAoJmVwLT5jb20pOwogCiAJLyogYmluZCBRUCB0byBFUCBhbmQgbW92ZSB0byBSVFMgKi8KIAlhdHRycy5tcGFfYXR0ciA9IGVwLT5tcGFfYXR0cjsKLQlhdHRycy5tYXhfaXJkID0gZXAtPm9yZDsKKwlhdHRycy5tYXhfaXJkID0gZXAtPmlyZDsKIAlhdHRycy5tYXhfb3JkID0gZXAtPm9yZDsKIAlhdHRycy5sbHBfc3RyZWFtX2hhbmRsZSA9IGVwOwogCWF0dHJzLm5leHRfc3RhdGUgPSBJV0NIX1FQX1NUQVRFX1JUUzsKQEAgLTE4MTAsNyArMTgxMCw3IEBACiAKIAllcCA9IGFsbG9jX2VwKHNpemVvZigqZXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gY2Fubm90IGFsbG9jIGVwLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBjYW5ub3QgYWxsb2MgZXAuXG4iLCBfX2Z1bmNfXyk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE4MjcsNyArMTgyNyw3IEBACiAJZXAtPmNvbS5jbV9pZCA9IGNtX2lkOwogCWVwLT5jb20ucXAgPSBnZXRfcWhwKGgsIGNvbm5fcGFyYW0tPnFwbik7CiAJQlVHX09OKCFlcC0+Y29tLnFwKTsKLQlQREJHKCIlcyBxcG4gMHgleCBxcCAlcCBjbV9pZCAlcFxuIiwgX19GVU5DVElPTl9fLCBjb25uX3BhcmFtLT5xcG4sCisJUERCRygiJXMgcXBuIDB4JXggcXAgJXAgY21faWQgJXBcbiIsIF9fZnVuY19fLCBjb25uX3BhcmFtLT5xcG4sCiAJICAgICBlcC0+Y29tLnFwLCBjbV9pZCk7CiAKIAkvKgpAQCAtMTgzNSw3ICsxODM1LDcgQEAKIAkgKi8KIAllcC0+YXRpZCA9IGN4Z2IzX2FsbG9jX2F0aWQoaC0+cmRldi50M2NkZXZfcCwgJnQzY19jbGllbnQsIGVwKTsKIAlpZiAoZXAtPmF0aWQgPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBjYW5ub3QgYWxsb2MgYXRpZC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gY2Fubm90IGFsbG9jIGF0aWQuXG4iLCBfX2Z1bmNfXyk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDI7CiAJfQpAQCAtMTg0Nyw3ICsxODQ3LDcgQEAKIAkJCWNtX2lkLT5sb2NhbF9hZGRyLnNpbl9wb3J0LAogCQkJY21faWQtPnJlbW90ZV9hZGRyLnNpbl9wb3J0LCBJUFRPU19MT1dERUxBWSk7CiAJaWYgKCFydCkgewotCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGNhbm5vdCBmaW5kIHJvdXRlLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBjYW5ub3QgZmluZCByb3V0ZS5cbiIsIF9fZnVuY19fKTsKIAkJZXJyID0gLUVIT1NUVU5SRUFDSDsKIAkJZ290byBmYWlsMzsKIAl9CkBAIC0xODU3LDcgKzE4NTcsNyBAQAogCWVwLT5sMnQgPSB0M19sMnRfZ2V0KGVwLT5jb20udGRldiwgZXAtPmRzdC0+bmVpZ2hib3VyLAogCQkJICAgICBlcC0+ZHN0LT5uZWlnaGJvdXItPmRldik7CiAJaWYgKCFlcC0+bDJ0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gY2Fubm90IGFsbG9jIGwyZS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gY2Fubm90IGFsbG9jIGwyZS5cbiIsIF9fZnVuY19fKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsNDsKIAl9CkBAIC0xODk0LDExICsxODk0LDExIEBACiAKIAllcCA9IGFsbG9jX2VwKHNpemVvZigqZXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gY2Fubm90IGFsbG9jIGVwLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBjYW5ub3QgYWxsb2MgZXAuXG4iLCBfX2Z1bmNfXyk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDE7CiAJfQotCVBEQkcoIiVzIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAllcC0+Y29tLnRkZXYgPSBoLT5yZGV2LnQzY2Rldl9wOwogCWNtX2lkLT5hZGRfcmVmKGNtX2lkKTsKIAllcC0+Y29tLmNtX2lkID0gY21faWQ7CkBAIC0xOTEwLDcgKzE5MTAsNyBAQAogCSAqLwogCWVwLT5zdGlkID0gY3hnYjNfYWxsb2Nfc3RpZChoLT5yZGV2LnQzY2Rldl9wLCAmdDNjX2NsaWVudCwgZXApOwogCWlmIChlcC0+c3RpZCA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGNhbm5vdCBhbGxvYyBhdGlkLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiJXMgLSBjYW5ub3QgYWxsb2MgYXRpZC5cbiIsIF9fZnVuY19fKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsMjsKIAl9CkBAIC0xOTQyLDcgKzE5NDIsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IGl3Y2hfbGlzdGVuX2VwICplcCA9IHRvX2xpc3Rlbl9lcChjbV9pZCk7CiAKLQlQREJHKCIlcyBlcCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CiAKIAltaWdodF9zbGVlcCgpOwogCXN0YXRlX3NldCgmZXAtPmNvbSwgREVBRCk7CkBAIC0xOTY1LDExICsxOTY1LDExIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmNvbS5sb2NrLCBmbGFncyk7CiAKLQlQREJHKCIlcyBlcCAlcCBzdGF0ZSAlcywgYWJydXB0ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLAorCVBEQkcoIiVzIGVwICVwIHN0YXRlICVzLCBhYnJ1cHQgJWRcbiIsIF9fZnVuY19fLCBlcCwKIAkgICAgIHN0YXRlc1tlcC0+Y29tLnN0YXRlXSwgYWJydXB0KTsKIAogCWlmIChlcC0+Y29tLnN0YXRlID09IERFQUQpIHsKLQkJUERCRygiJXMgYWxyZWFkeSBkZWFkIGVwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwkJUERCRygiJXMgYWxyZWFkeSBkZWFkIGVwICVwXG4iLCBfX2Z1bmNfXywgZXApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIwMjAsNyArMjAyMCw3IEBACiAJaWYgKGVwLT5kc3QgIT0gb2xkKQogCQlyZXR1cm4gMDsKIAotCVBEQkcoIiVzIGVwICVwIHJlZGlyZWN0IHRvIGRzdCAlcCBsMnQgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXAsIG5ldywKKwlQREJHKCIlcyBlcCAlcCByZWRpcmVjdCB0byBkc3QgJXAgbDJ0ICVwXG4iLCBfX2Z1bmNfXywgZXAsIG5ldywKIAkgICAgIGwydCk7CiAJZHN0X2hvbGQobmV3KTsKIAlsMnRfcmVsZWFzZShMMkRBVEEoZXAtPmNvbS50ZGV2KSwgZXAtPmwydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uaAppbmRleCA2MTA3ZTdjLi4yYmI3ZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmgKQEAgLTU0LDEzICs1NCwxMyBAQAogI2RlZmluZSBNUEFfRkxBR1NfTUFTSwkJMHhFMAogCiAjZGVmaW5lIHB1dF9lcChlcCkgeyBcCi0JUERCRygicHV0X2VwICh2aWEgJXM6JXUpIGVwICVwIHJlZmNudCAlZFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIFwKKwlQREJHKCJwdXRfZXAgKHZpYSAlczoldSkgZXAgJXAgcmVmY250ICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sICBcCiAJICAgICBlcCwgYXRvbWljX3JlYWQoJigoZXApLT5rcmVmLnJlZmNvdW50KSkpOyBcCiAJa3JlZl9wdXQoJigoZXApLT5rcmVmKSwgX19mcmVlX2VwKTsgXAogfQogCiAjZGVmaW5lIGdldF9lcChlcCkgeyBcCi0JUERCRygiZ2V0X2VwICh2aWEgJXM6JXUpIGVwICVwLCByZWZjbnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIFwKKwlQREJHKCJnZXRfZXAgKHZpYSAlczoldSkgZXAgJXAsIHJlZmNudCAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBcCiAJICAgICBlcCwgYXRvbWljX3JlYWQoJigoZXApLT5rcmVmLnJlZmNvdW50KSkpOyBcCiAJa3JlZl9nZXQoJigoZXApLT5rcmVmKSk7ICBcCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY3EuYwppbmRleCBkNzYyNGMxLi40ZWU4Y2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NxLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAlyZXQgPSBjeGlvX3BvbGxfY3Eod3EsICYoY2hwLT5jcSksICZjcWUsICZjcWVfZmx1c2hlZCwgJmNvb2tpZSwKIAkJCQkgICAmY3JlZGl0KTsKIAlpZiAodDNhX2RldmljZShjaHAtPnJocCkgJiYgY3JlZGl0KSB7Ci0JCVBEQkcoIiVzIHVwZGF0aW5nICVkIGNxIGNyZWRpdHMgb24gaWQgJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJUERCRygiJXMgdXBkYXRpbmcgJWQgY3EgY3JlZGl0cyBvbiBpZCAlZFxuIiwgX19mdW5jX18sCiAJCSAgICAgY3JlZGl0LCBjaHAtPmNxLmNxaWQpOwogCQljeGlvX2hhbF9jcV9vcCgmcmhwLT5yZGV2LCAmY2hwLT5jcSwgQ1FfQ1JFRElUX1VQREFURSwgY3JlZGl0KTsKIAl9CkBAIC04Myw3ICs4Myw3IEBACiAJd2MtPnZlbmRvcl9lcnIgPSBDUUVfU1RBVFVTKGNxZSk7CiAKIAlQREJHKCIlcyBxcGlkIDB4JXggdHlwZSAlZCBvcGNvZGUgJWQgc3RhdHVzIDB4JXggd3JpZCBoaSAweCV4ICIKLQkgICAgICJsbyAweCV4IGNvb2tpZSAweCVsbHhcbiIsIF9fRlVOQ1RJT05fXywKKwkgICAgICJsbyAweCV4IGNvb2tpZSAweCVsbHhcbiIsIF9fZnVuY19fLAogCSAgICAgQ1FFX1FQSUQoY3FlKSwgQ1FFX1RZUEUoY3FlKSwKIAkgICAgIENRRV9PUENPREUoY3FlKSwgQ1FFX1NUQVRVUyhjcWUpLCBDUUVfV1JJRF9ISShjcWUpLAogCSAgICAgQ1FFX1dSSURfTE9XKGNxZSksICh1bnNpZ25lZCBsb25nIGxvbmcpIGNvb2tpZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYwppbmRleCBiNDA2NzY2Li43YjY3YTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWlmICghcWhwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgdW5hZmZpbGlhdGVkIGVycm9yIDB4JXggcXBpZCAweCV4XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBDUUVfU1RBVFVTKHJzcF9tc2ctPmNxZSksCisJCSAgICAgICBfX2Z1bmNfXywgQ1FFX1NUQVRVUyhyc3BfbXNnLT5jcWUpLAogCQkgICAgICAgQ1FFX1FQSUQocnNwX21zZy0+Y3FlKSk7CiAJCXNwaW5fdW5sb2NrKCZybmljcC0+bG9jayk7CiAJCXJldHVybjsKQEAgLTYxLDE0ICs2MSwxNCBAQAogCWlmICgocWhwLT5hdHRyLnN0YXRlID09IElXQ0hfUVBfU1RBVEVfRVJST1IpIHx8CiAJICAgIChxaHAtPmF0dHIuc3RhdGUgPT0gSVdDSF9RUF9TVEFURV9URVJNSU5BVEUpKSB7CiAJCVBEQkcoIiVzIEFFIHJlY2VpdmVkIGFmdGVyIFJUUyAtICIKLQkJICAgICAicXAgc3RhdGUgJWQgcXBpZCAweCV4IHN0YXR1cyAweCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgInFwIHN0YXRlICVkIHFwaWQgMHgleCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sCiAJCSAgICAgcWhwLT5hdHRyLnN0YXRlLCBxaHAtPndxLnFwaWQsIENRRV9TVEFUVVMocnNwX21zZy0+Y3FlKSk7CiAJCXNwaW5fdW5sb2NrKCZybmljcC0+bG9jayk7CiAJCXJldHVybjsKIAl9CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzIC0gQUUgcXBpZCAweCV4IG9wY29kZSAlZCBzdGF0dXMgMHgleCAiCi0JICAgICAgICJ0eXBlICVkIHdyaWQuaGkgMHgleCB3cmlkLmxvIDB4JXggXG4iLCBfX0ZVTkNUSU9OX18sCisJICAgICAgICJ0eXBlICVkIHdyaWQuaGkgMHgleCB3cmlkLmxvIDB4JXggXG4iLCBfX2Z1bmNfXywKIAkgICAgICAgQ1FFX1FQSUQocnNwX21zZy0+Y3FlKSwgQ1FFX09QQ09ERShyc3BfbXNnLT5jcWUpLAogCSAgICAgICBDUUVfU1RBVFVTKHJzcF9tc2ctPmNxZSksIENRRV9UWVBFKHJzcF9tc2ctPmNxZSksCiAJICAgICAgIENRRV9XUklEX0hJKHJzcF9tc2ctPmNxZSksIENRRV9XUklEX0xPVyhyc3BfbXNnLT5jcWUpKTsKQEAgLTEzMiwxMCArMTMyLDEwIEBACiAJICAgIChDUUVfU1RBVFVTKHJzcF9tc2ctPmNxZSkgPT0gMCkpIHsKIAkJaWYgKFNRX1RZUEUocnNwX21zZy0+Y3FlKSkgewogCQkJUERCRygiJXMgUVBJRCAweCV4IGVwICVwIGRpc2Nvbm5lY3RpbmdcbiIsCi0JCQkgICAgIF9fRlVOQ1RJT05fXywgcWhwLT53cS5xcGlkLCBxaHAtPmVwKTsKKwkJCSAgICAgX19mdW5jX18sIHFocC0+d3EucXBpZCwgcWhwLT5lcCk7CiAJCQlpd2NoX2VwX2Rpc2Nvbm5lY3QocWhwLT5lcCwgMCwgR0ZQX0FUT01JQyk7CiAJCX0gZWxzZSB7Ci0JCQlQREJHKCIlcyBwb3N0IFJFUV9FUlIgQUUgUVBJRCAweCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJCQlQREJHKCIlcyBwb3N0IFJFUV9FUlIgQUUgUVBJRCAweCV4XG4iLCBfX2Z1bmNfXywKIAkJCSAgICAgcWhwLT53cS5xcGlkKTsKIAkJCXBvc3RfcXBfZXZlbnQocm5pY3AsIGNocCwgcnNwX21zZywKIAkJCQkgICAgICBJQl9FVkVOVF9RUF9SRVFfRVJSLCAwKTsKQEAgLTE4MCw3ICsxODAsNyBAQAogCWNhc2UgVFBUX0VSUl9JTlZBTElEQVRFX1NIQVJFRF9NUjoKIAljYXNlIFRQVF9FUlJfSU5WQUxJREFURV9NUl9XSVRIX01XX0JPVU5EOgogCQlwcmludGsoS0VSTl9FUlIgIiVzIC0gQ1FFIEVyciBxcGlkIDB4JXggb3Bjb2RlICVkIHN0YXR1cyAweCV4ICIKLQkJICAgICAgICJ0eXBlICVkIHdyaWQuaGkgMHgleCB3cmlkLmxvIDB4JXggXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICAidHlwZSAlZCB3cmlkLmhpIDB4JXggd3JpZC5sbyAweCV4IFxuIiwgX19mdW5jX18sCiAJCSAgICAgICBDUUVfUVBJRChyc3BfbXNnLT5jcWUpLCBDUUVfT1BDT0RFKHJzcF9tc2ctPmNxZSksCiAJCSAgICAgICBDUUVfU1RBVFVTKHJzcF9tc2ctPmNxZSksIENRRV9UWVBFKHJzcF9tc2ctPmNxZSksCiAJCSAgICAgICBDUUVfV1JJRF9ISShyc3BfbXNnLT5jcWUpLCBDUUVfV1JJRF9MT1cocnNwX21zZy0+Y3FlKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9tZW0uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX21lbS5jCmluZGV4IDczYmZkMTYuLjU4YzNkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX21lbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX21lbS5jCkBAIC02Miw3ICs2Miw3IEBACiAJbW1pZCA9IHN0YWcgPj4gODsKIAltaHAtPmlibXIucmtleSA9IG1ocC0+aWJtci5sa2V5ID0gc3RhZzsKIAlpbnNlcnRfaGFuZGxlKHJocCwgJnJocC0+bW1pZHIsIG1ocCwgbW1pZCk7Ci0JUERCRygiJXMgbW1pZCAweCV4IG1ocCAlcFxuIiwgX19GVU5DVElPTl9fLCBtbWlkLCBtaHApOworCVBEQkcoIiVzIG1taWQgMHgleCBtaHAgJXBcbiIsIF9fZnVuY19fLCBtbWlkLCBtaHApOwogCXJldHVybiAwOwogfQogCkBAIC05Niw3ICs5Niw3IEBACiAJbW1pZCA9IHN0YWcgPj4gODsKIAltaHAtPmlibXIucmtleSA9IG1ocC0+aWJtci5sa2V5ID0gc3RhZzsKIAlpbnNlcnRfaGFuZGxlKHJocCwgJnJocC0+bW1pZHIsIG1ocCwgbW1pZCk7Ci0JUERCRygiJXMgbW1pZCAweCV4IG1ocCAlcFxuIiwgX19GVU5DVElPTl9fLCBtbWlkLCBtaHApOworCVBEQkcoIiVzIG1taWQgMHgleCBtaHAgJXBcbiIsIF9fZnVuY19fLCBtbWlkLCBtaHApOwogCXJldHVybiAwOwogfQogCkBAIC0xMzYsMTQgKzEzNiw4IEBACiAKIAkvKiBGaW5kIGxhcmdlc3QgcGFnZSBzaGlmdCB3ZSBjYW4gdXNlIHRvIGNvdmVyIGJ1ZmZlcnMgKi8KIAlmb3IgKCpzaGlmdCA9IFBBR0VfU0hJRlQ7ICpzaGlmdCA8IDI3OyArKygqc2hpZnQpKQotCQlpZiAobnVtX3BoeXNfYnVmID4gMSkgewotCQkJaWYgKCgxVUxMIDw8ICpzaGlmdCkgJiBtYXNrKQotCQkJCWJyZWFrOwotCQl9IGVsc2UKLQkJCWlmICgxVUxMIDw8ICpzaGlmdCA+PQotCQkJICAgIGJ1ZmZlcl9saXN0WzBdLnNpemUgKwotCQkJICAgIChidWZmZXJfbGlzdFswXS5hZGRyICYgKCgxVUxMIDw8ICpzaGlmdCkgLSAxKSkpCi0JCQkJYnJlYWs7CisJCWlmICgoMVVMTCA8PCAqc2hpZnQpICYgbWFzaykKKwkJCWJyZWFrOwogCiAJYnVmZmVyX2xpc3RbMF0uc2l6ZSArPSBidWZmZXJfbGlzdFswXS5hZGRyICYgKCgxVUxMIDw8ICpzaGlmdCkgLSAxKTsKIAlidWZmZXJfbGlzdFswXS5hZGRyICY9IH4wdWxsIDw8ICpzaGlmdDsKQEAgLTE2OSw3ICsxNjMsNyBAQAogCQkJICAgICgodTY0KSBqIDw8ICpzaGlmdCkpOwogCiAJUERCRygiJXMgdmEgMHglbGx4IG1hc2sgMHglbGx4IHNoaWZ0ICVkIGxlbiAlbGxkIHBibF9zaXplICVkXG4iLAotCSAgICAgX19GVU5DVElPTl9fLCAodW5zaWduZWQgbG9uZyBsb25nKSAqaW92YV9zdGFydCwKKwkgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKSAqaW92YV9zdGFydCwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1hc2ssICpzaGlmdCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgKnRvdGFsX3NpemUsCiAJICAgICAqbnBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKaW5kZXggZGYxODM4Zi4uYWI0Njk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAlzdHJ1Y3QgaXdjaF91Y29udGV4dCAqdWNvbnRleHQgPSB0b19pd2NoX3Vjb250ZXh0KGNvbnRleHQpOwogCXN0cnVjdCBpd2NoX21tX2VudHJ5ICptbSwgKnRtcDsKIAotCVBEQkcoIiVzIGNvbnRleHQgJXBcbiIsIF9fRlVOQ1RJT05fXywgY29udGV4dCk7CisJUERCRygiJXMgY29udGV4dCAlcFxuIiwgX19mdW5jX18sIGNvbnRleHQpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbSwgdG1wLCAmdWNvbnRleHQtPm1tYXBzLCBlbnRyeSkKIAkJa2ZyZWUobW0pOwogCWN4aW9fcmVsZWFzZV91Y29udGV4dCgmcmhwLT5yZGV2LCAmdWNvbnRleHQtPnVjdHgpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJc3RydWN0IGl3Y2hfdWNvbnRleHQgKmNvbnRleHQ7CiAJc3RydWN0IGl3Y2hfZGV2ICpyaHAgPSB0b19pd2NoX2RldihpYmRldik7CiAKLQlQREJHKCIlcyBpYmRldiAlcFxuIiwgX19GVU5DVElPTl9fLCBpYmRldik7CisJUERCRygiJXMgaWJkZXYgJXBcbiIsIF9fZnVuY19fLCBpYmRldik7CiAJY29udGV4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjb250ZXh0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb250ZXh0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTEyOSw3ICsxMjksNyBAQAogewogCXN0cnVjdCBpd2NoX2NxICpjaHA7CiAKLQlQREJHKCIlcyBpYl9jcSAlcFxuIiwgX19GVU5DVElPTl9fLCBpYl9jcSk7CisJUERCRygiJXMgaWJfY3EgJXBcbiIsIF9fZnVuY19fLCBpYl9jcSk7CiAJY2hwID0gdG9faXdjaF9jcShpYl9jcSk7CiAKIAlyZW1vdmVfaGFuZGxlKGNocC0+cmhwLCAmY2hwLT5yaHAtPmNxaWRyLCBjaHAtPmNxLmNxaWQpOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJc3RydWN0IGl3Y2hfY3JlYXRlX2NxX3JlcSB1cmVxOwogCXN0cnVjdCBpd2NoX3Vjb250ZXh0ICp1Y29udGV4dCA9IE5VTEw7CiAKLQlQREJHKCIlcyBpYl9kZXYgJXAgZW50cmllcyAlZFxuIiwgX19GVU5DVElPTl9fLCBpYmRldiwgZW50cmllcyk7CisJUERCRygiJXMgaWJfZGV2ICVwIGVudHJpZXMgJWRcbiIsIF9fZnVuY19fLCBpYmRldiwgZW50cmllcyk7CiAJcmhwID0gdG9faXdjaF9kZXYoaWJkZXYpOwogCWNocCA9IGt6YWxsb2Moc2l6ZW9mKCpjaHApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNocCkKQEAgLTE4OSw3ICsxODksNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAJY2hwLT5yaHAgPSByaHA7Ci0JY2hwLT5pYmNxLmNxZSA9ICgxIDw8IGNocC0+Y3Euc2l6ZV9sb2cyKSAtIDE7CisJY2hwLT5pYmNxLmNxZSA9IDEgPDwgY2hwLT5jcS5zaXplX2xvZzI7CiAJc3Bpbl9sb2NrX2luaXQoJmNocC0+bG9jayk7CiAJYXRvbWljX3NldCgmY2hwLT5yZWZjbnQsIDEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNocC0+d2FpdCk7CkBAIC0yMzMsNyArMjMzLDcgQEAKIAlzdHJ1Y3QgdDNfY3Egb2xkY3EsIG5ld2NxOwogCWludCByZXQ7CiAKLQlQREJHKCIlcyBpYl9jcSAlcCBjcWUgJWRcbiIsIF9fRlVOQ1RJT05fXywgY3EsIGNxZSk7CisJUERCRygiJXMgaWJfY3EgJXAgY3FlICVkXG4iLCBfX2Z1bmNfXywgY3EsIGNxZSk7CiAKIAkvKiBXZSBkb24ndCBkb3duc2l6ZS4uLiAqLwogCWlmIChjcWUgPD0gY3EtPmNxZSkKQEAgLTI4MSw3ICsyODEsNyBAQAogCXJldCA9IGN4aW9fZGVzdHJveV9jcSgmY2hwLT5yaHAtPnJkZXYsICZvbGRjcSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIGN4aW9fZGVzdHJveV9jcSBmYWlsZWQgJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHJldCk7CisJCQlfX2Z1bmNfXywgcmV0KTsKIAl9CiAKIAkvKiBhZGQgdXNlciBob29rcyBoZXJlICovCkBAIC0zMTYsNyArMzE2LDcgQEAKIAkJY2hwLT5jcS5ycHRyID0gcnB0cjsKIAl9IGVsc2UKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNocC0+bG9jaywgZmxhZyk7Ci0JUERCRygiJXMgcnB0ciAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIGNocC0+Y3EucnB0cik7CisJUERCRygiJXMgcnB0ciAweCV4XG4iLCBfX2Z1bmNfXywgY2hwLT5jcS5ycHRyKTsKIAllcnIgPSBjeGlvX2hhbF9jcV9vcCgmcmhwLT5yZGV2LCAmY2hwLT5jcSwgY3Ffb3AsIDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNocC0+bG9jaywgZmxhZyk7CiAJaWYgKGVyciA8IDApCkBAIC0zMzcsNyArMzM3LDcgQEAKIAlzdHJ1Y3QgaXdjaF91Y29udGV4dCAqdWNvbnRleHQ7CiAJdTY0IGFkZHI7CiAKLQlQREJHKCIlcyBwZ29mZiAweCVseCBrZXkgMHgleCBsZW4gJWRcbiIsIF9fRlVOQ1RJT05fXywgdm1hLT52bV9wZ29mZiwKKwlQREJHKCIlcyBwZ29mZiAweCVseCBrZXkgMHgleCBsZW4gJWRcbiIsIF9fZnVuY19fLCB2bWEtPnZtX3Bnb2ZmLAogCSAgICAga2V5LCBsZW4pOwogCiAJaWYgKHZtYS0+dm1fc3RhcnQgJiAoUEFHRV9TSVpFLTEpKSB7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAogCXBocCA9IHRvX2l3Y2hfcGQocGQpOwogCXJocCA9IHBocC0+cmhwOwotCVBEQkcoIiVzIGlicGQgJXAgcGRpZCAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHBkLCBwaHAtPnBkaWQpOworCVBEQkcoIiVzIGlicGQgJXAgcGRpZCAweCV4XG4iLCBfX2Z1bmNfXywgcGQsIHBocC0+cGRpZCk7CiAJY3hpb19oYWxfcHV0X3BkaWQocmhwLT5yZGV2LnJzY3AsIHBocC0+cGRpZCk7CiAJa2ZyZWUocGhwKTsKIAlyZXR1cm4gMDsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCXUzMiBwZGlkOwogCXN0cnVjdCBpd2NoX2RldiAqcmhwOwogCi0JUERCRygiJXMgaWJkZXYgJXBcbiIsIF9fRlVOQ1RJT05fXywgaWJkZXYpOworCVBEQkcoIiVzIGliZGV2ICVwXG4iLCBfX2Z1bmNfXywgaWJkZXYpOwogCXJocCA9IChzdHJ1Y3QgaXdjaF9kZXYgKikgaWJkZXY7CiAJcGRpZCA9IGN4aW9faGFsX2dldF9wZGlkKHJocC0+cmRldi5yc2NwKTsKIAlpZiAoIXBkaWQpCkBAIC00MjIsNyArNDIyLDcgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCQl9CiAJfQotCVBEQkcoIiVzIHBkaWQgMHglMHggcHRyIDB4JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRpZCwgcGhwKTsKKwlQREJHKCIlcyBwZGlkIDB4JTB4IHB0ciAweCVwXG4iLCBfX2Z1bmNfXywgcGRpZCwgcGhwKTsKIAlyZXR1cm4gJnBocC0+aWJwZDsKIH0KIApAQCAtNDMyLDcgKzQzMiw3IEBACiAJc3RydWN0IGl3Y2hfbXIgKm1ocDsKIAl1MzIgbW1pZDsKIAotCVBEQkcoIiVzIGliX21yICVwXG4iLCBfX0ZVTkNUSU9OX18sIGliX21yKTsKKwlQREJHKCIlcyBpYl9tciAlcFxuIiwgX19mdW5jX18sIGliX21yKTsKIAkvKiBUaGVyZSBjYW4gYmUgbm8gbWVtb3J5IHdpbmRvd3MgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmliX21yLT51c2VjbnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCQlrZnJlZSgodm9pZCAqKSAodW5zaWduZWQgbG9uZykgbWhwLT5rdmEpOwogCWlmIChtaHAtPnVtZW0pCiAJCWliX3VtZW1fcmVsZWFzZShtaHAtPnVtZW0pOwotCVBEQkcoIiVzIG1taWQgMHgleCBwdHIgJXBcbiIsIF9fRlVOQ1RJT05fXywgbW1pZCwgbWhwKTsKKwlQREJHKCIlcyBtbWlkIDB4JXggcHRyICVwXG4iLCBfX2Z1bmNfXywgbW1pZCwgbWhwKTsKIAlrZnJlZShtaHApOwogCXJldHVybiAwOwogfQpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAJc3RydWN0IGl3Y2hfbXIgKm1ocDsKIAlpbnQgcmV0OwogCi0JUERCRygiJXMgaWJfcGQgJXBcbiIsIF9fRlVOQ1RJT05fXywgcGQpOworCVBEQkcoIiVzIGliX3BkICVwXG4iLCBfX2Z1bmNfXywgcGQpOwogCXBocCA9IHRvX2l3Y2hfcGQocGQpOwogCXJocCA9IHBocC0+cmhwOwogCkBAIC01MzEsNyArNTMxLDcgQEAKIAlpbnQgbnBhZ2VzOwogCWludCByZXQ7CiAKLQlQREJHKCIlcyBpYl9tciAlcCBpYl9wZCAlcFxuIiwgX19GVU5DVElPTl9fLCBtciwgcGQpOworCVBEQkcoIiVzIGliX21yICVwIGliX3BkICVwXG4iLCBfX2Z1bmNfXywgbXIsIHBkKTsKIAogCS8qIFRoZXJlIGNhbiBiZSBubyBtZW1vcnkgd2luZG93cyAqLwogCWlmIChhdG9taWNfcmVhZCgmbXItPnVzZWNudCkpCkBAIC01OTQsNyArNTk0LDcgQEAKIAlzdHJ1Y3QgaXdjaF9tciAqbWhwOwogCXN0cnVjdCBpd2NoX3JlZ191c2VyX21yX3Jlc3AgdXJlc3A7CiAKLQlQREJHKCIlcyBpYl9wZCAlcFxuIiwgX19GVU5DVElPTl9fLCBwZCk7CisJUERCRygiJXMgaWJfcGQgJXBcbiIsIF9fZnVuY19fLCBwZCk7CiAKIAlwaHAgPSB0b19pd2NoX3BkKHBkKTsKIAlyaHAgPSBwaHAtPnJocDsKQEAgLTY0OSw3ICs2NDksNyBAQAogCWlmICh1ZGF0YSAmJiAhdDNhX2RldmljZShyaHApKSB7CiAJCXVyZXNwLnBibF9hZGRyID0gKG1ocC0+YXR0ci5wYmxfYWRkciAtCiAJICAgICAgICAgICAgICAgICAgICAgICAgIHJocC0+cmRldi5ybmljX2luZm8ucGJsX2Jhc2UpID4+IDM7Ci0JCVBEQkcoIiVzIHVzZXIgcmVzcCBwYmxfYWRkciAweCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJCVBEQkcoIiVzIHVzZXIgcmVzcCBwYmxfYWRkciAweCV4XG4iLCBfX2Z1bmNfXywKIAkJICAgICB1cmVzcC5wYmxfYWRkcik7CiAKIAkJaWYgKGliX2NvcHlfdG9fdWRhdGEodWRhdGEsICZ1cmVzcCwgc2l6ZW9mICh1cmVzcCkpKSB7CkBAIC02NzMsNyArNjczLDcgQEAKIAl1NjQga3ZhOwogCXN0cnVjdCBpYl9tciAqaWJtcjsKIAotCVBEQkcoIiVzIGliX3BkICVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkKTsKKwlQREJHKCIlcyBpYl9wZCAlcFxuIiwgX19mdW5jX18sIHBkKTsKIAogCS8qCiAJICogVDMgb25seSBzdXBwb3J0cyAzMiBiaXRzIG9mIHNpemUuCkBAIC03MTAsNyArNzEwLDcgQEAKIAltaHAtPmF0dHIuc3RhZyA9IHN0YWc7CiAJbW1pZCA9IChzdGFnKSA+PiA4OwogCWluc2VydF9oYW5kbGUocmhwLCAmcmhwLT5tbWlkciwgbWhwLCBtbWlkKTsKLQlQREJHKCIlcyBtbWlkIDB4JXggbWhwICVwIHN0YWcgMHgleFxuIiwgX19GVU5DVElPTl9fLCBtbWlkLCBtaHAsIHN0YWcpOworCVBEQkcoIiVzIG1taWQgMHgleCBtaHAgJXAgc3RhZyAweCV4XG4iLCBfX2Z1bmNfXywgbW1pZCwgbWhwLCBzdGFnKTsKIAlyZXR1cm4gJihtaHAtPmlibXcpOwogfQogCkBAIC03MjYsNyArNzI2LDcgQEAKIAljeGlvX2RlYWxsb2NhdGVfd2luZG93KCZyaHAtPnJkZXYsIG1ocC0+YXR0ci5zdGFnKTsKIAlyZW1vdmVfaGFuZGxlKHJocCwgJnJocC0+bW1pZHIsIG1taWQpOwogCWtmcmVlKG1ocCk7Ci0JUERCRygiJXMgaWJfbXcgJXAgbW1pZCAweCV4IHB0ciAlcFxuIiwgX19GVU5DVElPTl9fLCBtdywgbW1pZCwgbWhwKTsKKwlQREJHKCIlcyBpYl9tdyAlcCBtbWlkIDB4JXggcHRyICVwXG4iLCBfX2Z1bmNfXywgbXcsIG1taWQsIG1ocCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NCw3ICs3NTQsNyBAQAogCWN4aW9fZGVzdHJveV9xcCgmcmhwLT5yZGV2LCAmcWhwLT53cSwKIAkJCXVjb250ZXh0ID8gJnVjb250ZXh0LT51Y3R4IDogJnJocC0+cmRldi51Y3R4KTsKIAotCVBEQkcoIiVzIGliX3FwICVwIHFwaWQgMHglMHggcWhwICVwXG4iLCBfX0ZVTkNUSU9OX18sCisJUERCRygiJXMgaWJfcXAgJXAgcXBpZCAweCUweCBxaHAgJXBcbiIsIF9fZnVuY19fLAogCSAgICAgaWJfcXAsIHFocC0+d3EucXBpZCwgcWhwKTsKIAlrZnJlZShxaHApOwogCXJldHVybiAwOwpAQCAtNzczLDcgKzc3Myw3IEBACiAJaW50IHdxc2l6ZSwgc3FzaXplLCBycXNpemU7CiAJc3RydWN0IGl3Y2hfdWNvbnRleHQgKnVjb250ZXh0OwogCi0JUERCRygiJXMgaWJfcGQgJXBcbiIsIF9fRlVOQ1RJT05fXywgcGQpOworCVBEQkcoIiVzIGliX3BkICVwXG4iLCBfX2Z1bmNfXywgcGQpOwogCWlmIChhdHRycy0+cXBfdHlwZSAhPSBJQl9RUFRfUkMpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCXBocCA9IHRvX2l3Y2hfcGQocGQpOwpAQCAtODA1LDcgKzgwNSw3IEBACiAJICovCiAJc3FzaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKGF0dHJzLT5jYXAubWF4X3NlbmRfd3IpOwogCXdxc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhycXNpemUgKyBzcXNpemUpOwotCVBEQkcoIiVzIHdxc2l6ZSAlZCBzcXNpemUgJWQgcnFzaXplICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJUERCRygiJXMgd3FzaXplICVkIHNxc2l6ZSAlZCBycXNpemUgJWRcbiIsIF9fZnVuY19fLAogCSAgICAgd3FzaXplLCBzcXNpemUsIHJxc2l6ZSk7CiAJcWhwID0ga3phbGxvYyhzaXplb2YoKnFocCksIEdGUF9LRVJORUwpOwogCWlmICghcWhwKQpAQCAtODE5LDggKzgxOSwxMSBAQAogCQlrZnJlZShxaHApOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CisKIAlhdHRycy0+Y2FwLm1heF9yZWN2X3dyID0gcnFzaXplIC0gMTsKIAlhdHRycy0+Y2FwLm1heF9zZW5kX3dyID0gc3FzaXplOworCWF0dHJzLT5jYXAubWF4X2lubGluZV9kYXRhID0gVDNfTUFYX0lOTElORTsKKwogCXFocC0+cmhwID0gcmhwOwogCXFocC0+YXR0ci5wZCA9IHBocC0+cGRpZDsKIAlxaHAtPmF0dHIuc2NxID0gKChzdHJ1Y3QgaXdjaF9jcSAqKSBhdHRycy0+c2VuZF9jcSktPmNxLmNxaWQ7CkBAIC04OTUsNyArODk4LDcgQEAKIAlpbml0X3RpbWVyKCYocWhwLT50aW1lcikpOwogCVBEQkcoIiVzIHNxX251bV9lbnRyaWVzICVkLCBycV9udW1fZW50cmllcyAlZCAiCiAJICAgICAicXBpZCAweCUweCBxaHAgJXAgZG1hX2FkZHIgMHglbGx4IHNpemUgJWRcbiIsCi0JICAgICBfX0ZVTkNUSU9OX18sIHFocC0+YXR0ci5zcV9udW1fZW50cmllcywgcWhwLT5hdHRyLnJxX251bV9lbnRyaWVzLAorCSAgICAgX19mdW5jX18sIHFocC0+YXR0ci5zcV9udW1fZW50cmllcywgcWhwLT5hdHRyLnJxX251bV9lbnRyaWVzLAogCSAgICAgcWhwLT53cS5xcGlkLCBxaHAsICh1bnNpZ25lZCBsb25nIGxvbmcpIHFocC0+d3EuZG1hX2FkZHIsCiAJICAgICAxIDw8IHFocC0+d3Euc2l6ZV9sb2cyKTsKIAlyZXR1cm4gJnFocC0+aWJxcDsKQEAgLTkwOSw3ICs5MTIsNyBAQAogCWVudW0gaXdjaF9xcF9hdHRyX21hc2sgbWFzayA9IDA7CiAJc3RydWN0IGl3Y2hfcXBfYXR0cmlidXRlcyBhdHRyczsKIAotCVBEQkcoIiVzIGliX3FwICVwXG4iLCBfX0ZVTkNUSU9OX18sIGlicXApOworCVBEQkcoIiVzIGliX3FwICVwXG4iLCBfX2Z1bmNfXywgaWJxcCk7CiAKIAkvKiBpd2FycCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBSVFIgc3RhdGUgKi8KIAlpZiAoKGF0dHJfbWFzayAmIElCX1FQX1NUQVRFKSAmJiAoYXR0ci0+cXBfc3RhdGUgPT0gSUJfUVBTX1JUUikpCkBAIC05NDIsMjAgKzk0NSwyMCBAQAogCiB2b2lkIGl3Y2hfcXBfYWRkX3JlZihzdHJ1Y3QgaWJfcXAgKnFwKQogewotCVBEQkcoIiVzIGliX3FwICVwXG4iLCBfX0ZVTkNUSU9OX18sIHFwKTsKKwlQREJHKCIlcyBpYl9xcCAlcFxuIiwgX19mdW5jX18sIHFwKTsKIAlhdG9taWNfaW5jKCYodG9faXdjaF9xcChxcCktPnJlZmNudCkpOwogfQogCiB2b2lkIGl3Y2hfcXBfcmVtX3JlZihzdHJ1Y3QgaWJfcXAgKnFwKQogewotCVBEQkcoIiVzIGliX3FwICVwXG4iLCBfX0ZVTkNUSU9OX18sIHFwKTsKKwlQREJHKCIlcyBpYl9xcCAlcFxuIiwgX19mdW5jX18sIHFwKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmKHRvX2l3Y2hfcXAocXApLT5yZWZjbnQpKSkKIAkgICAgICAgIHdha2VfdXAoJih0b19pd2NoX3FwKHFwKS0+d2FpdCkpOwogfQogCiBzdGF0aWMgc3RydWN0IGliX3FwICppd2NoX2dldF9xcChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIGludCBxcG4pCiB7Ci0JUERCRygiJXMgaWJfZGV2ICVwIHFwbiAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIGRldiwgcXBuKTsKKwlQREJHKCIlcyBpYl9kZXYgJXAgcXBuIDB4JXhcbiIsIF9fZnVuY19fLCBkZXYsIHFwbik7CiAJcmV0dXJuIChzdHJ1Y3QgaWJfcXAgKilnZXRfcWhwKHRvX2l3Y2hfZGV2KGRldiksIHFwbik7CiB9CiAKQEAgLTk2Myw3ICs5NjYsNyBAQAogc3RhdGljIGludCBpd2NoX3F1ZXJ5X3BrZXkoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCiAJCQkgICB1OCBwb3J0LCB1MTYgaW5kZXgsIHUxNiAqIHBrZXkpCiB7Ci0JUERCRygiJXMgaWJkZXYgJXBcbiIsIF9fRlVOQ1RJT05fXywgaWJkZXYpOworCVBEQkcoIiVzIGliZGV2ICVwXG4iLCBfX2Z1bmNfXywgaWJkZXYpOwogCSpwa2V5ID0gMDsKIAlyZXR1cm4gMDsKIH0KQEAgLTk3NCw3ICs5NzcsNyBAQAogCXN0cnVjdCBpd2NoX2RldiAqZGV2OwogCiAJUERCRygiJXMgaWJkZXYgJXAsIHBvcnQgJWQsIGluZGV4ICVkLCBnaWQgJXBcbiIsCi0JICAgICAgIF9fRlVOQ1RJT05fXywgaWJkZXYsIHBvcnQsIGluZGV4LCBnaWQpOworCSAgICAgICBfX2Z1bmNfXywgaWJkZXYsIHBvcnQsIGluZGV4LCBnaWQpOwogCWRldiA9IHRvX2l3Y2hfZGV2KGliZGV2KTsKIAlCVUdfT04ocG9ydCA9PSAwIHx8IHBvcnQgPiAyKTsKIAltZW1zZXQoJihnaWQtPnJhd1swXSksIDAsIHNpemVvZihnaWQtPnJhdykpOwpAQCAtOTg3LDcgKzk5MCw3IEBACiB7CiAKIAlzdHJ1Y3QgaXdjaF9kZXYgKmRldjsKLQlQREJHKCIlcyBpYmRldiAlcFxuIiwgX19GVU5DVElPTl9fLCBpYmRldik7CisJUERCRygiJXMgaWJkZXYgJXBcbiIsIF9fZnVuY19fLCBpYmRldik7CiAKIAlkZXYgPSB0b19pd2NoX2RldihpYmRldik7CiAJbWVtc2V0KHByb3BzLCAwLCBzaXplb2YgKnByb3BzKTsKQEAgLTEwMTQsNyArMTAxNyw3IEBACiBzdGF0aWMgaW50IGl3Y2hfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKIAkJCSAgIHU4IHBvcnQsIHN0cnVjdCBpYl9wb3J0X2F0dHIgKnByb3BzKQogewotCVBEQkcoIiVzIGliZGV2ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGliZGV2KTsKKwlQREJHKCIlcyBpYmRldiAlcFxuIiwgX19mdW5jX18sIGliZGV2KTsKIAlwcm9wcy0+bWF4X210dSA9IElCX01UVV80MDk2OwogCXByb3BzLT5saWQgPSAwOwogCXByb3BzLT5sbWMgPSAwOwpAQCAtMTAzOCw2MSArMTA0MSw2MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2NoX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpd2NoX2RldiwKLQkJCQkJICAgIGliZGV2LmNsYXNzX2Rldik7Ci0JUERCRygiJXMgY2xhc3MgZGV2IDB4JXBcbiIsIF9fRlVOQ1RJT05fXywgY2Rldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRldi0+cmRldi50M2NkZXZfcC0+dHlwZSk7CisJc3RydWN0IGl3Y2hfZGV2ICppd2NoX2RldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpd2NoX2RldiwKKwkJCQkJCSBpYmRldi5kZXYpOworCVBEQkcoIiVzIGRldiAweCVwXG4iLCBfX2Z1bmNfXywgZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXdjaF9kZXYtPnJkZXYudDNjZGV2X3AtPnR5cGUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2Z3X3ZlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2Z3X3ZlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3Y2hfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGl3Y2hfZGV2LAotCQkJCQkgICAgaWJkZXYuY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgaXdjaF9kZXYgKml3Y2hfZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGl3Y2hfZGV2LAorCQkJCQkJIGliZGV2LmRldik7CiAJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvOwotCXN0cnVjdCBuZXRfZGV2aWNlICpsbGRldiA9IGRldi0+cmRldi50M2NkZXZfcC0+bGxkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmxsZGV2ID0gaXdjaF9kZXYtPnJkZXYudDNjZGV2X3AtPmxsZGV2OwogCi0JUERCRygiJXMgY2xhc3MgZGV2IDB4JXBcbiIsIF9fRlVOQ1RJT05fXywgY2Rldik7Ci0JcnRubF9sb2NrKCk7CisJUERCRygiJXMgZGV2IDB4JXBcbiIsIF9fZnVuY19fLCBkZXYpOwogCWxsZGV2LT5ldGh0b29sX29wcy0+Z2V0X2RydmluZm8obGxkZXYsICZpbmZvKTsKLQlydG5sX3VubG9jaygpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpbmZvLmZ3X3ZlcnNpb24pOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2hjYShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2hjYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2NoX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpd2NoX2RldiwKLQkJCQkJICAgIGliZGV2LmNsYXNzX2Rldik7CisJc3RydWN0IGl3Y2hfZGV2ICppd2NoX2RldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpd2NoX2RldiwKKwkJCQkJCSBpYmRldi5kZXYpOwogCXN0cnVjdCBldGh0b29sX2RydmluZm8gaW5mbzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbGxkZXYgPSBkZXYtPnJkZXYudDNjZGV2X3AtPmxsZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpsbGRldiA9IGl3Y2hfZGV2LT5yZGV2LnQzY2Rldl9wLT5sbGRldjsKIAotCVBEQkcoIiVzIGNsYXNzIGRldiAweCVwXG4iLCBfX0ZVTkNUSU9OX18sIGNkZXYpOwotCXJ0bmxfbG9jaygpOworCVBEQkcoIiVzIGRldiAweCVwXG4iLCBfX2Z1bmNfXywgZGV2KTsKIAlsbGRldi0+ZXRodG9vbF9vcHMtPmdldF9kcnZpbmZvKGxsZGV2LCAmaW5mbyk7Ci0JcnRubF91bmxvY2soKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW5mby5kcml2ZXIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2JvYXJkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYm9hcmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2NoX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpd2NoX2RldiwKLQkJCQkJICAgIGliZGV2LmNsYXNzX2Rldik7Ci0JUERCRygiJXMgY2xhc3MgZGV2IDB4JXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIleC4leFxuIiwgZGV2LT5yZGV2LnJuaWNfaW5mby5wZGV2LT52ZW5kb3IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5yZGV2LnJuaWNfaW5mby5wZGV2LT5kZXZpY2UpOworCXN0cnVjdCBpd2NoX2RldiAqaXdjaF9kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaXdjaF9kZXYsCisJCQkJCQkgaWJkZXYuZGV2KTsKKwlQREJHKCIlcyBkZXYgMHglcFxuIiwgX19mdW5jX18sIGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXguJXhcbiIsIGl3Y2hfZGV2LT5yZGV2LnJuaWNfaW5mby5wZGV2LT52ZW5kb3IsCisJCSAgICAgICBpd2NoX2Rldi0+cmRldi5ybmljX2luZm8ucGRldi0+ZGV2aWNlKTsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGh3X3JldiwgU19JUlVHTywgc2hvd19yZXYsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZ3X3ZlciwgU19JUlVHTywgc2hvd19md192ZXIsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGhjYV90eXBlLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYm9hcmRfaWQsIFNfSVJVR08sIHNob3dfYm9hcmQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGh3X3JldiwgU19JUlVHTywgc2hvd19yZXYsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGZ3X3ZlciwgU19JUlVHTywgc2hvd19md192ZXIsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhjYV90eXBlLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfaWQsIFNfSVJVR08sIHNob3dfYm9hcmQsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKml3Y2hfY2xhc3NfYXR0cmlidXRlc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9od19yZXYsCi0JJmNsYXNzX2RldmljZV9hdHRyX2Z3X3ZlciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaGNhX3R5cGUsCi0JJmNsYXNzX2RldmljZV9hdHRyX2JvYXJkX2lkCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKml3Y2hfY2xhc3NfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9od19yZXYsCisJJmRldl9hdHRyX2Z3X3ZlciwKKwkmZGV2X2F0dHJfaGNhX3R5cGUsCisJJmRldl9hdHRyX2JvYXJkX2lkCiB9OwogCiBpbnQgaXdjaF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGl3Y2hfZGV2ICpkZXYpCkBAIC0xMTAwLDE0ICsxMTAyLDEzIEBACiAJaW50IHJldDsKIAlpbnQgaTsKIAotCVBEQkcoIiVzIGl3Y2hfZGV2ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7CisJUERCRygiJXMgaXdjaF9kZXYgJXBcbiIsIF9fZnVuY19fLCBkZXYpOwogCXN0cmxjcHkoZGV2LT5pYmRldi5uYW1lLCAiY3hnYjNfJWQiLCBJQl9ERVZJQ0VfTkFNRV9NQVgpOwogCW1lbXNldCgmZGV2LT5pYmRldi5ub2RlX2d1aWQsIDAsIHNpemVvZihkZXYtPmliZGV2Lm5vZGVfZ3VpZCkpOwogCW1lbWNweSgmZGV2LT5pYmRldi5ub2RlX2d1aWQsIGRldi0+cmRldi50M2NkZXZfcC0+bGxkZXYtPmRldl9hZGRyLCA2KTsKIAlkZXYtPmliZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGV2LT5kZXZpY2VfY2FwX2ZsYWdzID0KLQkgICAgKElCX0RFVklDRV9aRVJPX1NUQUcgfAotCSAgICAgSUJfREVWSUNFX1NFTkRfV19JTlYgfCBJQl9ERVZJQ0VfTUVNX1dJTkRPVyk7CisJICAgIChJQl9ERVZJQ0VfWkVST19TVEFHIHwgSUJfREVWSUNFX01FTV9XSU5ET1cpOwogCiAJZGV2LT5pYmRldi51dmVyYnNfY21kX21hc2sgPQogCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCkgfApAQCAtMTE4Nyw4ICsxMTg4LDggQEAKIAkJZ290byBiYWlsMTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGl3Y2hfY2xhc3NfYXR0cmlidXRlcyk7ICsraSkgewotCQlyZXQgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+aWJkZXYuY2xhc3NfZGV2LAotCQkJCQkgICAgICAgaXdjaF9jbGFzc19hdHRyaWJ1dGVzW2ldKTsKKwkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmliZGV2LmRldiwKKwkJCQkJIGl3Y2hfY2xhc3NfYXR0cmlidXRlc1tpXSk7CiAJCWlmIChyZXQpIHsKIAkJCWdvdG8gYmFpbDI7CiAJCX0KQEAgLTEyMDQsMTAgKzEyMDUsMTAgQEAKIHsKIAlpbnQgaTsKIAotCVBEQkcoIiVzIGl3Y2hfZGV2ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7CisJUERCRygiJXMgaXdjaF9kZXYgJXBcbiIsIF9fZnVuY19fLCBkZXYpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGl3Y2hfY2xhc3NfYXR0cmlidXRlcyk7ICsraSkKLQkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmliZGV2LmNsYXNzX2RldiwKLQkJCQkJIGl3Y2hfY2xhc3NfYXR0cmlidXRlc1tpXSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pYmRldi5kZXYsCisJCQkJICAgaXdjaF9jbGFzc19hdHRyaWJ1dGVzW2ldKTsKIAlpYl91bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5pYmRldik7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmgKaW5kZXggNDg4MzNmMy4uNjEzNTZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5oCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJaWYgKG1tLT5rZXkgPT0ga2V5ICYmIG1tLT5sZW4gPT0gbGVuKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZtbS0+ZW50cnkpOwogCQkJc3Bpbl91bmxvY2soJnVjb250ZXh0LT5tbWFwX2xvY2spOwotCQkJUERCRygiJXMga2V5IDB4JXggYWRkciAweCVsbHggbGVuICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlQREJHKCIlcyBrZXkgMHgleCBhZGRyIDB4JWxseCBsZW4gJWRcbiIsIF9fZnVuY19fLAogCQkJICAgICBrZXksICh1bnNpZ25lZCBsb25nIGxvbmcpIG1tLT5hZGRyLCBtbS0+bGVuKTsKIAkJCXJldHVybiBtbTsKIAkJfQpAQCAtMjI2LDcgKzIyNiw3IEBACiAJCQkgICAgICAgc3RydWN0IGl3Y2hfbW1fZW50cnkgKm1tKQogewogCXNwaW5fbG9jaygmdWNvbnRleHQtPm1tYXBfbG9jayk7Ci0JUERCRygiJXMga2V5IDB4JXggYWRkciAweCVsbHggbGVuICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJUERCRygiJXMga2V5IDB4JXggYWRkciAweCVsbHggbGVuICVkXG4iLCBfX2Z1bmNfXywKIAkgICAgIG1tLT5rZXksICh1bnNpZ25lZCBsb25nIGxvbmcpIG1tLT5hZGRyLCBtbS0+bGVuKTsKIAlsaXN0X2FkZF90YWlsKCZtbS0+ZW50cnksICZ1Y29udGV4dC0+bW1hcHMpOwogCXNwaW5fdW5sb2NrKCZ1Y29udGV4dC0+bW1hcF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCmluZGV4IGVhMmNkZDcuLjg4OTFjM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwpAQCAtNzIsNyArNzIsNyBAQAogCXdxZS0+c2VuZC5yZXNlcnZlZFsyXSA9IDA7CiAJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfU0VORF9XSVRIX0lNTSkgewogCQlwbGVuID0gNDsKLQkJd3FlLT5zZW5kLnNnbFswXS5zdGFnID0gd3ItPmltbV9kYXRhOworCQl3cWUtPnNlbmQuc2dsWzBdLnN0YWcgPSB3ci0+ZXguaW1tX2RhdGE7CiAJCXdxZS0+c2VuZC5zZ2xbMF0ubGVuID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKIAkJd3FlLT5zZW5kLm51bV9zZ2xlID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKIAkJKmZsaXRfY250ID0gNTsKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTSkgewogCQlwbGVuID0gNDsKLQkJd3FlLT53cml0ZS5zZ2xbMF0uc3RhZyA9IHdyLT5pbW1fZGF0YTsKKwkJd3FlLT53cml0ZS5zZ2xbMF0uc3RhZyA9IHdyLT5leC5pbW1fZGF0YTsKIAkJd3FlLT53cml0ZS5zZ2xbMF0ubGVuID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKIAkJd3FlLT53cml0ZS5udW1fc2dsZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMCk7CiAJCSpmbGl0X2NudCA9IDY7CkBAIC0xNjgsMzAgKzE2OCwzMCBAQAogCiAJCW1ocCA9IGdldF9taHAocmhwLCAoc2dfbGlzdFtpXS5sa2V5KSA+PiA4KTsKIAkJaWYgKCFtaHApIHsKLQkJCVBEQkcoIiVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJCVBEQkcoIiVzICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJaWYgKCFtaHAtPmF0dHIuc3RhdGUpIHsKLQkJCVBEQkcoIiVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJCVBEQkcoIiVzICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJaWYgKG1ocC0+YXR0ci56YnZhKSB7Ci0JCQlQREJHKCIlcyAlZFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCQlQREJHKCIlcyAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKIAkJaWYgKHNnX2xpc3RbaV0uYWRkciA8IG1ocC0+YXR0ci52YV9mYm8pIHsKLQkJCVBEQkcoIiVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJCVBEQkcoIiVzICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHNnX2xpc3RbaV0uYWRkciArICgodTY0KSBzZ19saXN0W2ldLmxlbmd0aCkgPAogCQkgICAgc2dfbGlzdFtpXS5hZGRyKSB7Ci0JCQlQREJHKCIlcyAlZFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCQlQREJHKCIlcyAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChzZ19saXN0W2ldLmFkZHIgKyAoKHU2NCkgc2dfbGlzdFtpXS5sZW5ndGgpID4KIAkJICAgIG1ocC0+YXR0ci52YV9mYm8gKyAoKHU2NCkgbWhwLT5hdHRyLmxlbikpIHsKLQkJCVBEQkcoIiVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJCVBEQkcoIiVzICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJb2Zmc2V0ID0gc2dfbGlzdFtpXS5hZGRyIC0gbWhwLT5hdHRyLnZhX2ZibzsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQkJCXFocC0+d3Eub2xkZXN0X3JlYWQgPSBzcXA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCVBEQkcoIiVzIHBvc3Qgb2YgdHlwZT0lZCBUQkQhXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlQREJHKCIlcyBwb3N0IG9mIHR5cGU9JWQgVEJEIVxuIiwgX19mdW5jX18sCiAJCQkgICAgIHdyLT5vcGNvZGUpOwogCQkJZXJyID0gLUVJTlZBTDsKIAkJfQpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQkgICAgICAgUV9HRU5CSVQocWhwLT53cS53cHRyLCBxaHAtPndxLnNpemVfbG9nMiksCiAJCQkgICAgICAgMCwgdDNfd3JfZmxpdF9jbnQpOwogCQlQREJHKCIlcyBjb29raWUgMHglbGx4IHdxIGlkeCAweCV4IHN3c3EgaWR4ICVsZCBvcGNvZGUgJWRcbiIsCi0JCSAgICAgX19GVU5DVElPTl9fLCAodW5zaWduZWQgbG9uZyBsb25nKSB3ci0+d3JfaWQsIGlkeCwKKwkJICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykgd3ItPndyX2lkLCBpZHgsCiAJCSAgICAgUV9QVFIySURYKHFocC0+d3Euc3Ffd3B0ciwgcWhwLT53cS5zcV9zaXplX2xvZzIpLAogCQkgICAgIHNxcC0+b3Bjb2RlKTsKIAkJd3IgPSB3ci0+bmV4dDsKQEAgLTM2MSw3ICszNjEsNyBAQAogCQkJICAgICAgIFFfR0VOQklUKHFocC0+d3Eud3B0ciwgcWhwLT53cS5zaXplX2xvZzIpLAogCQkJICAgICAgIDAsIHNpemVvZihzdHJ1Y3QgdDNfcmVjZWl2ZV93cikgPj4gMyk7CiAJCVBEQkcoIiVzIGNvb2tpZSAweCVsbHggaWR4IDB4JXggcnFfd3B0ciAweCV4IHJ3X3JwdHIgMHgleCAiCi0JCSAgICAgIndxZSAlcCBcbiIsIF9fRlVOQ1RJT05fXywgKHVuc2lnbmVkIGxvbmcgbG9uZykgd3ItPndyX2lkLAorCQkgICAgICJ3cWUgJXAgXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykgd3ItPndyX2lkLAogCQkgICAgIGlkeCwgcWhwLT53cS5ycV93cHRyLCBxaHAtPndxLnJxX3JwdHIsIHdxZSk7CiAJCSsrKHFocC0+d3EucnFfd3B0cik7CiAJCSsrKHFocC0+d3Eud3B0cik7CkBAIC00MDcsNyArNDA3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlkeCA9IFFfUFRSMklEWChxaHAtPndxLndwdHIsIHFocC0+d3Euc2l6ZV9sb2cyKTsKLQlQREJHKCIlczogaWR4IDB4JTB4LCBtdyAweCVwLCBtd19iaW5kIDB4JXBcbiIsIF9fRlVOQ1RJT05fXywgaWR4LAorCVBEQkcoIiVzOiBpZHggMHglMHgsIG13IDB4JXAsIG13X2JpbmQgMHglcFxuIiwgX19mdW5jX18sIGlkeCwKIAkgICAgIG13LCBtd19iaW5kKTsKIAl3cWUgPSAodW5pb24gdDNfd3IgKikgKHFocC0+d3EucXVldWUgKyBpZHgpOwogCkBAIC01OTUsMTAgKzU5NSwxMCBAQAogCXN0cnVjdCB0ZXJtaW5hdGVfbWVzc2FnZSAqdGVybTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JUERCRygiJXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCVBEQkcoIiVzICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXNrYiA9IGFsbG9jX3NrYig0MCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBjYW5ub3Qgc2VuZCBURVJNSU5BVEUhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzIGNhbm5vdCBzZW5kIFRFUk1JTkFURSFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXdxZSA9ICh1bmlvbiB0M193ciAqKXNrYl9wdXQoc2tiLCA0MCk7CkBAIC02MjksNyArNjI5LDcgQEAKIAlyY2hwID0gZ2V0X2NocChxaHAtPnJocCwgcWhwLT5hdHRyLnJjcSk7CiAJc2NocCA9IGdldF9jaHAocWhwLT5yaHAsIHFocC0+YXR0ci5zY3EpOwogCi0JUERCRygiJXMgcWhwICVwIHJjaHAgJXAgc2NocCAlcFxuIiwgX19GVU5DVElPTl9fLCBxaHAsIHJjaHAsIHNjaHApOworCVBEQkcoIiVzIHFocCAlcCByY2hwICVwIHNjaHAgJXBcbiIsIF9fZnVuY19fLCBxaHAsIHJjaHAsIHNjaHApOwogCS8qIHRha2UgYSByZWYgb24gdGhlIHFocCBzaW5jZSB3ZSBtdXN0IHJlbGVhc2UgdGhlIGxvY2sgKi8KIAlhdG9taWNfaW5jKCZxaHAtPnJlZmNudCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWhwLT5sb2NrLCAqZmxhZyk7CkBAIC03MjAsMTEgKzcyMCwxMSBAQAogCWluaXRfYXR0ci5mbGFncyB8PSBjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSA/IFBSSVZfUVAgOiAwOwogCWluaXRfYXR0ci5pcnMgPSBxaHAtPmVwLT5yY3Zfc2VxOwogCVBEQkcoIiVzIGluaXRfYXR0ci5ycV9hZGRyIDB4JXggaW5pdF9hdHRyLnJxX3NpemUgPSAlZCAiCi0JICAgICAiZmxhZ3MgMHgleCBxcGNhcHMgMHgleFxuIiwgX19GVU5DVElPTl9fLAorCSAgICAgImZsYWdzIDB4JXggcXBjYXBzIDB4JXhcbiIsIF9fZnVuY19fLAogCSAgICAgaW5pdF9hdHRyLnJxX2FkZHIsIGluaXRfYXR0ci5ycV9zaXplLAogCSAgICAgaW5pdF9hdHRyLmZsYWdzLCBpbml0X2F0dHIucXBjYXBzKTsKIAlyZXQgPSBjeGlvX3JkbWFfaW5pdCgmcmhwLT5yZGV2LCAmaW5pdF9hdHRyKTsKLQlQREJHKCIlcyByZXQgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwlQREJHKCIlcyByZXQgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc0Miw3ICs3NDIsNyBAQAogCWludCBmcmVlID0gMDsKIAlzdHJ1Y3QgaXdjaF9lcCAqZXAgPSBOVUxMOwogCi0JUERCRygiJXMgcWhwICVwIHFwaWQgMHgleCBlcCAlcCBzdGF0ZSAlZCAtPiAlZFxuIiwgX19GVU5DVElPTl9fLAorCVBEQkcoIiVzIHFocCAlcCBxcGlkIDB4JXggZXAgJXAgc3RhdGUgJWQgLT4gJWRcbiIsIF9fZnVuY19fLAogCSAgICAgcWhwLCBxaHAtPndxLnFwaWQsIHFocC0+ZXAsIHFocC0+YXR0ci5zdGF0ZSwKIAkgICAgIChtYXNrICYgSVdDSF9RUF9BVFRSX05FWFRfU1RBVEUpID8gYXR0cnMtPm5leHRfc3RhdGUgOiAtMSk7CiAKQEAgLTg5OSwxNCArODk5LDE0IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgaW4gYSBiYWQgc3RhdGUgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHFocC0+YXR0ci5zdGF0ZSk7CisJCSAgICAgICBfX2Z1bmNfXywgcWhwLT5hdHRyLnN0YXRlKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnI7CiAJCWJyZWFrOwogCX0KIAlnb3RvIG91dDsKIGVycjoKLQlQREJHKCIlcyBkaXNhc3NvY2lhdGluZyBlcCAlcCBxcGlkIDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcWhwLT5lcCwKKwlQREJHKCIlcyBkaXNhc3NvY2lhdGluZyBlcCAlcCBxcGlkIDB4JXhcbiIsIF9fZnVuY19fLCBxaHAtPmVwLAogCSAgICAgcWhwLT53cS5xcGlkKTsKIAogCS8qIGRpc2Fzc29jaWF0ZSB0aGUgTExQIGNvbm5lY3Rpb24gKi8KQEAgLTkzOSw3ICs5MzksNyBAQAogCWlmIChmcmVlKQogCQlwdXRfZXAoJmVwLT5jb20pOwogCi0JUERCRygiJXMgZXhpdCBzdGF0ZSAlZFxuIiwgX19GVU5DVElPTl9fLCBxaHAtPmF0dHIuc3RhdGUpOworCVBEQkcoIiVzIGV4aXQgc3RhdGUgJWRcbiIsIF9fZnVuY19fLCBxaHAtPmF0dHIuc3RhdGUpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfYXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfYXYuYwppbmRleCAxOTRjMWMzLi41NjczNWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2F2LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9hdi5jCkBAIC00MSw5ICs0MSw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0KLSNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotCiAjaW5jbHVkZSAiZWhjYV90b29scy5oIgogI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCiAjaW5jbHVkZSAiaGNwX2lmLmgiCkBAIC0xNzAsMTcgKzE2Nyw4IEBACiB7CiAJc3RydWN0IGVoY2FfYXYgKmF2OwogCXN0cnVjdCBlaGNhX3VkX2F2IG5ld19laGNhX2F2OwotCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihhaC0+cGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CiAJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IGNvbnRhaW5lcl9vZihhaC0+cGQtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKIAkJCQkJICAgICAgaWJfZGV2aWNlKTsKLQl1MzIgY3VyX3BpZCA9IGN1cnJlbnQtPnRnaWQ7Ci0KLQlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKLQkgICAgbXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7Ci0JCWVoY2FfZXJyKGFoLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJbWVtc2V0KCZuZXdfZWhjYV9hdiwgMCwgc2l6ZW9mKG5ld19laGNhX2F2KSk7CiAJbmV3X2VoY2FfYXYuc2wgPSBhaF9hdHRyLT5zbDsKQEAgLTI0MiwxNSArMjMwLDYgQEAKIGludCBlaGNhX3F1ZXJ5X2FoKHN0cnVjdCBpYl9haCAqYWgsIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKQogewogCXN0cnVjdCBlaGNhX2F2ICphdiA9IGNvbnRhaW5lcl9vZihhaCwgc3RydWN0IGVoY2FfYXYsIGliX2FoKTsKLQlzdHJ1Y3QgZWhjYV9wZCAqbXlfcGQgPSBjb250YWluZXJfb2YoYWgtPnBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOwotCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKLQotCWlmIChteV9wZC0+aWJfcGQudW9iamVjdCAmJiBteV9wZC0+aWJfcGQudW9iamVjdC0+Y29udGV4dCAmJgotCSAgICBteV9wZC0+b3ducGlkICE9IGN1cl9waWQpIHsKLQkJZWhjYV9lcnIoYWgtPmRldmljZSwgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAotCQkJIGN1cl9waWQsIG15X3BkLT5vd25waWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAltZW1jcHkoJmFoX2F0dHItPmdyaC5kZ2lkLCAmYXYtPmF2LmdyaC53b3JkXzMsCiAJICAgICAgIHNpemVvZihhaF9hdHRyLT5ncmguZGdpZCkpOwpAQCAtMjczLDE2ICsyNTIsNiBAQAogCiBpbnQgZWhjYV9kZXN0cm95X2FoKHN0cnVjdCBpYl9haCAqYWgpCiB7Ci0Jc3RydWN0IGVoY2FfcGQgKm15X3BkID0gY29udGFpbmVyX29mKGFoLT5wZCwgc3RydWN0IGVoY2FfcGQsIGliX3BkKTsKLQl1MzIgY3VyX3BpZCA9IGN1cnJlbnQtPnRnaWQ7Ci0KLQlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKLQkgICAgbXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7Ci0JCWVoY2FfZXJyKGFoLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJa21lbV9jYWNoZV9mcmVlKGF2X2NhY2hlLCBjb250YWluZXJfb2YoYWgsIHN0cnVjdCBlaGNhX2F2LCBpYl9haCkpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NsYXNzZXMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY2xhc3Nlcy5oCmluZGV4IDkyY2NlOGEuLjBkMTNmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY2xhc3Nlcy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY2xhc3Nlcy5oCkBAIC0xMzIsNyArMTMyLDYgQEAKIHN0cnVjdCBlaGNhX3BkIHsKIAlzdHJ1Y3QgaWJfcGQgaWJfcGQ7CiAJc3RydWN0IGlwel9wZCBmd19wZDsKLQl1MzIgb3ducGlkOwogCS8qIHNtYWxsIHF1ZXVlIG1nbXQgKi8KIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVbMl07CkBAIC0yMTUsNyArMjE0LDYgQEAKIAlhdG9taWNfdCBucl9ldmVudHM7IC8qICNldmVudHMgc2VlbiAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfY29tcGxldGlvbjsKIAlzcGlubG9ja190IHRhc2tfbG9jazsKLQl1MzIgb3ducGlkOwogCS8qIG1tYXAgY291bnRlciBmb3IgcmVzb3VyY2VzIG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UgKi8KIAl1MzIgbW1fY291bnRfcXVldWU7CiAJdTMyIG1tX2NvdW50X2dhbHBhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jcS5jCmluZGV4IDA0NjdjMTUuLmVjMGNmY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NxLmMKQEAgLTQzLDggKzQzLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotCiAjaW5jbHVkZSAiZWhjYV9pdmVyYnMuaCIKICNpbmNsdWRlICJlaGNhX2NsYXNzZXMuaCIKICNpbmNsdWRlICJlaGNhX2lycS5oIgpAQCAtMTQ4LDcgKzE0Niw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJm15X2NxLT50YXNrX2xvY2spOwogCWF0b21pY19zZXQoJm15X2NxLT5ucl9ldmVudHMsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm15X2NxLT53YWl0X2NvbXBsZXRpb24pOwotCW15X2NxLT5vd25waWQgPSBjdXJyZW50LT50Z2lkOwogCiAJY3EgPSAmbXlfY3EtPmliX2NxOwogCkBAIC0zMjAsNyArMzE3LDYgQEAKIAlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKIAkJCQkJICAgICAgaWJfZGV2aWNlKTsKIAlzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlID0gc2hjYS0+aXB6X2hjYV9oYW5kbGU7Ci0JdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY3EtPnVvYmplY3QpIHsKQEAgLTMyOSwxMiArMzI1LDYgQEAKIAkJCQkgInVzZXIgc3BhY2UgY3FfbnVtPSV4IiwgbXlfY3EtPmNxX251bWJlcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAobXlfY3EtPm93bnBpZCAhPSBjdXJfcGlkKSB7Ci0JCQllaGNhX2VycihkZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4ICIKLQkJCQkgImNxX251bT0leCIsCi0JCQkJIGN1cl9waWQsIG15X2NxLT5vd25waWQsIG15X2NxLT5jcV9udW1iZXIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMzc0LDE1ICszNjQsNiBAQAogCiBpbnQgZWhjYV9yZXNpemVfY3Eoc3RydWN0IGliX2NxICpjcSwgaW50IGNxZSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKIHsKLQlzdHJ1Y3QgZWhjYV9jcSAqbXlfY3EgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBlaGNhX2NxLCBpYl9jcSk7Ci0JdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOwotCi0JaWYgKGNxLT51b2JqZWN0ICYmIG15X2NxLT5vd25waWQgIT0gY3VyX3BpZCkgewotCQllaGNhX2VycihjcS0+ZGV2aWNlLCAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCi0JCQkgY3VyX3BpZCwgbXlfY3EtPm93bnBpZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIFRPRE86IHByb3BlciByZXNpemUgbmVlZHMgdG8gYmUgZG9uZSAqLwogCWVoY2FfZXJyKGNxLT5kZXZpY2UsICJub3QgaW1wbGVtZW50ZWQgeWV0Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaGNhLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2hjYS5jCmluZGV4IDViZDdiNTkuLjI1MTVjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaGNhLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYwpAQCAtNDMsNiArNDMsMTEgQEAKICNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgogI2luY2x1ZGUgImhjcF9pZi5oIgogCitzdGF0aWMgdW5zaWduZWQgaW50IGxpbWl0X3VpbnQodW5zaWduZWQgaW50IHZhbHVlKQoreworCXJldHVybiBtaW5fdCh1bnNpZ25lZCBpbnQsIHZhbHVlLCBJTlRfTUFYKTsKK30KKwogaW50IGVoY2FfcXVlcnlfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKnByb3BzKQogewogCWludCBpLCByZXQgPSAwOwpAQCAtODMsMzcgKzg4LDQwIEBACiAJcHJvcHMtPnZlbmRvcl9pZCAgICAgICA9IHJibG9jay0+dmVuZG9yX2lkID4+IDg7CiAJcHJvcHMtPnZlbmRvcl9wYXJ0X2lkICA9IHJibG9jay0+dmVuZG9yX3BhcnRfaWQgPj4gMTY7CiAJcHJvcHMtPmh3X3ZlciAgICAgICAgICA9IHJibG9jay0+aHdfdmVyOwotCXByb3BzLT5tYXhfcXAgICAgICAgICAgPSBtaW5fdCh1bnNpZ25lZCwgcmJsb2NrLT5tYXhfcXAsIElOVF9NQVgpOwotCXByb3BzLT5tYXhfcXBfd3IgICAgICAgPSBtaW5fdCh1bnNpZ25lZCwgcmJsb2NrLT5tYXhfd3Flc193cSwgSU5UX01BWCk7Ci0JcHJvcHMtPm1heF9zZ2UgICAgICAgICA9IG1pbl90KHVuc2lnbmVkLCByYmxvY2stPm1heF9zZ2UsIElOVF9NQVgpOwotCXByb3BzLT5tYXhfc2dlX3JkICAgICAgPSBtaW5fdCh1bnNpZ25lZCwgcmJsb2NrLT5tYXhfc2dlX3JkLCBJTlRfTUFYKTsKLQlwcm9wcy0+bWF4X2NxICAgICAgICAgID0gbWluX3QodW5zaWduZWQsIHJibG9jay0+bWF4X2NxLCBJTlRfTUFYKTsKLQlwcm9wcy0+bWF4X2NxZSAgICAgICAgID0gbWluX3QodW5zaWduZWQsIHJibG9jay0+bWF4X2NxZSwgSU5UX01BWCk7Ci0JcHJvcHMtPm1heF9tciAgICAgICAgICA9IG1pbl90KHVuc2lnbmVkLCByYmxvY2stPm1heF9tciwgSU5UX01BWCk7Ci0JcHJvcHMtPm1heF9tdyAgICAgICAgICA9IG1pbl90KHVuc2lnbmVkLCByYmxvY2stPm1heF9tdywgSU5UX01BWCk7Ci0JcHJvcHMtPm1heF9wZCAgICAgICAgICA9IG1pbl90KHVuc2lnbmVkLCByYmxvY2stPm1heF9wZCwgSU5UX01BWCk7Ci0JcHJvcHMtPm1heF9haCAgICAgICAgICA9IG1pbl90KHVuc2lnbmVkLCByYmxvY2stPm1heF9haCwgSU5UX01BWCk7Ci0JcHJvcHMtPm1heF9mbXIgICAgICAgICA9IG1pbl90KHVuc2lnbmVkLCByYmxvY2stPm1heF9tciwgSU5UX01BWCk7CisJcHJvcHMtPm1heF9xcCAgICAgICAgICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfcXApOworCXByb3BzLT5tYXhfcXBfd3IgICAgICAgPSBsaW1pdF91aW50KHJibG9jay0+bWF4X3dxZXNfd3EpOworCXByb3BzLT5tYXhfc2dlICAgICAgICAgPSBsaW1pdF91aW50KHJibG9jay0+bWF4X3NnZSk7CisJcHJvcHMtPm1heF9zZ2VfcmQgICAgICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfc2dlX3JkKTsKKwlwcm9wcy0+bWF4X2NxICAgICAgICAgID0gbGltaXRfdWludChyYmxvY2stPm1heF9jcSk7CisJcHJvcHMtPm1heF9jcWUgICAgICAgICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfY3FlKTsKKwlwcm9wcy0+bWF4X21yICAgICAgICAgID0gbGltaXRfdWludChyYmxvY2stPm1heF9tcik7CisJcHJvcHMtPm1heF9tdyAgICAgICAgICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfbXcpOworCXByb3BzLT5tYXhfcGQgICAgICAgICAgPSBsaW1pdF91aW50KHJibG9jay0+bWF4X3BkKTsKKwlwcm9wcy0+bWF4X2FoICAgICAgICAgID0gbGltaXRfdWludChyYmxvY2stPm1heF9haCk7CisJcHJvcHMtPm1heF9lZSAgICAgICAgICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfcmRfZWVfY29udGV4dCk7CisJcHJvcHMtPm1heF9yZGQgICAgICAgICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfcmRfZG9tYWluKTsKKwlwcm9wcy0+bWF4X2ZtciAgICAgICAgID0gbGltaXRfdWludChyYmxvY2stPm1heF9tcik7CisJcHJvcHMtPmxvY2FsX2NhX2Fja19kZWxheSAgPSBsaW1pdF91aW50KHJibG9jay0+bG9jYWxfY2FfYWNrX2RlbGF5KTsKKwlwcm9wcy0+bWF4X3FwX3JkX2F0b20gID0gbGltaXRfdWludChyYmxvY2stPm1heF9ycl9xcCk7CisJcHJvcHMtPm1heF9lZV9yZF9hdG9tICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfcnJfZWVfY29udGV4dCk7CisJcHJvcHMtPm1heF9yZXNfcmRfYXRvbSA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfcnJfaGNhKTsKKwlwcm9wcy0+bWF4X3FwX2luaXRfcmRfYXRvbSA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfYWN0X3dxc19xcCk7CisJcHJvcHMtPm1heF9lZV9pbml0X3JkX2F0b20gPSBsaW1pdF91aW50KHJibG9jay0+bWF4X2FjdF93cXNfZWVfY29udGV4dCk7CiAKIAlpZiAoRUhDQV9CTUFTS19HRVQoSENBX0NBUF9TUlEsIHNoY2EtPmhjYV9jYXApKSB7Ci0JCXByb3BzLT5tYXhfc3JxICAgICAgICAgPSBwcm9wcy0+bWF4X3FwOwotCQlwcm9wcy0+bWF4X3NycV93ciAgICAgID0gcHJvcHMtPm1heF9xcF93cjsKKwkJcHJvcHMtPm1heF9zcnEgICAgICAgICA9IGxpbWl0X3VpbnQocHJvcHMtPm1heF9xcCk7CisJCXByb3BzLT5tYXhfc3JxX3dyICAgICAgPSBsaW1pdF91aW50KHByb3BzLT5tYXhfcXBfd3IpOwogCQlwcm9wcy0+bWF4X3NycV9zZ2UgICAgID0gMzsKIAl9CiAKLQlwcm9wcy0+bWF4X3BrZXlzICAgICAgID0gMTY7Ci0JcHJvcHMtPmxvY2FsX2NhX2Fja19kZWxheQotCQk9IHJibG9jay0+bG9jYWxfY2FfYWNrX2RlbGF5OwotCXByb3BzLT5tYXhfcmF3X2lwdjZfcXAKLQkJPSBtaW5fdCh1bnNpZ25lZCwgcmJsb2NrLT5tYXhfcmF3X2lwdjZfcXAsIElOVF9NQVgpOwotCXByb3BzLT5tYXhfcmF3X2V0aHlfcXAKLQkJPSBtaW5fdCh1bnNpZ25lZCwgcmJsb2NrLT5tYXhfcmF3X2V0aHlfcXAsIElOVF9NQVgpOwotCXByb3BzLT5tYXhfbWNhc3RfZ3JwCi0JCT0gbWluX3QodW5zaWduZWQsIHJibG9jay0+bWF4X21jYXN0X2dycCwgSU5UX01BWCk7Ci0JcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2gKLQkJPSBtaW5fdCh1bnNpZ25lZCwgcmJsb2NrLT5tYXhfbWNhc3RfcXBfYXR0YWNoLCBJTlRfTUFYKTsKKwlwcm9wcy0+bWF4X3BrZXlzICAgICAgICAgICA9IDE2OworCXByb3BzLT5sb2NhbF9jYV9hY2tfZGVsYXkgID0gbGltaXRfdWludChyYmxvY2stPmxvY2FsX2NhX2Fja19kZWxheSk7CisJcHJvcHMtPm1heF9yYXdfaXB2Nl9xcCAgICAgPSBsaW1pdF91aW50KHJibG9jay0+bWF4X3Jhd19pcHY2X3FwKTsKKwlwcm9wcy0+bWF4X3Jhd19ldGh5X3FwICAgICA9IGxpbWl0X3VpbnQocmJsb2NrLT5tYXhfcmF3X2V0aHlfcXApOworCXByb3BzLT5tYXhfbWNhc3RfZ3JwICAgICAgID0gbGltaXRfdWludChyYmxvY2stPm1heF9tY2FzdF9ncnApOworCXByb3BzLT5tYXhfbWNhc3RfcXBfYXR0YWNoID0gbGltaXRfdWludChyYmxvY2stPm1heF9tY2FzdF9xcF9hdHRhY2gpOwogCXByb3BzLT5tYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoCi0JCT0gbWluX3QodW5zaWduZWQsIHJibG9jay0+bWF4X3RvdGFsX21jYXN0X3FwX2F0dGFjaCwgSU5UX01BWCk7CisJCT0gbGltaXRfdWludChyYmxvY2stPm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2gpOwogCiAJLyogdHJhbnNsYXRlIGRldmljZSBjYXBhYmlsaXRpZXMgKi8KIAlwcm9wcy0+ZGV2aWNlX2NhcF9mbGFncyA9IElCX0RFVklDRV9TWVNfSU1BR0VfR1VJRCB8CkBAIC0xMjgsNiArMTM2LDQ2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBtYXBfbXR1KHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsIHUzMiBmd19tdHUpCit7CisJc3dpdGNoIChmd19tdHUpIHsKKwljYXNlIDB4MToKKwkJcmV0dXJuIElCX01UVV8yNTY7CisJY2FzZSAweDI6CisJCXJldHVybiBJQl9NVFVfNTEyOworCWNhc2UgMHgzOgorCQlyZXR1cm4gSUJfTVRVXzEwMjQ7CisJY2FzZSAweDQ6CisJCXJldHVybiBJQl9NVFVfMjA0ODsKKwljYXNlIDB4NToKKwkJcmV0dXJuIElCX01UVV80MDk2OworCWRlZmF1bHQ6CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJVbmtub3duIE1UVSBzaXplOiAleC4iLAorCQkJIGZ3X210dSk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBtYXBfbnVtYmVyX29mX3ZscyhzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCB1MzIgdmxfY2FwKQoreworCXN3aXRjaCAodmxfY2FwKSB7CisJY2FzZSAweDE6CisJCXJldHVybiAxOworCWNhc2UgMHgyOgorCQlyZXR1cm4gMjsKKwljYXNlIDB4MzoKKwkJcmV0dXJuIDQ7CisJY2FzZSAweDQ6CisJCXJldHVybiA4OworCWNhc2UgMHg1OgorCQlyZXR1cm4gMTU7CisJZGVmYXVsdDoKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgImludmFsaWQgVmwgQ2FwYWJpbGl0eTogJXguIiwKKwkJCSB2bF9jYXApOworCQlyZXR1cm4gMDsKKwl9Cit9CisKIGludCBlaGNhX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCiAJCSAgICB1OCBwb3J0LCBzdHJ1Y3QgaWJfcG9ydF9hdHRyICpwcm9wcykKIHsKQEAgLTE1MiwzMSArMjAwLDEzIEBACiAKIAltZW1zZXQocHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgaWJfcG9ydF9hdHRyKSk7CiAKLQlzd2l0Y2ggKHJibG9jay0+bWF4X210dSkgewotCWNhc2UgMHgxOgotCQlwcm9wcy0+YWN0aXZlX210dSA9IHByb3BzLT5tYXhfbXR1ID0gSUJfTVRVXzI1NjsKLQkJYnJlYWs7Ci0JY2FzZSAweDI6Ci0JCXByb3BzLT5hY3RpdmVfbXR1ID0gcHJvcHMtPm1heF9tdHUgPSBJQl9NVFVfNTEyOwotCQlicmVhazsKLQljYXNlIDB4MzoKLQkJcHJvcHMtPmFjdGl2ZV9tdHUgPSBwcm9wcy0+bWF4X210dSA9IElCX01UVV8xMDI0OwotCQlicmVhazsKLQljYXNlIDB4NDoKLQkJcHJvcHMtPmFjdGl2ZV9tdHUgPSBwcm9wcy0+bWF4X210dSA9IElCX01UVV8yMDQ4OwotCQlicmVhazsKLQljYXNlIDB4NToKLQkJcHJvcHMtPmFjdGl2ZV9tdHUgPSBwcm9wcy0+bWF4X210dSA9IElCX01UVV80MDk2OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiVW5rbm93biBNVFUgc2l6ZTogJXguIiwKLQkJCSByYmxvY2stPm1heF9tdHUpOwotCQlicmVhazsKLQl9Ci0KKwlwcm9wcy0+YWN0aXZlX210dSA9IHByb3BzLT5tYXhfbXR1ID0gbWFwX210dShzaGNhLCByYmxvY2stPm1heF9tdHUpOwogCXByb3BzLT5wb3J0X2NhcF9mbGFncyAgPSByYmxvY2stPmNhcGFiaWxpdHlfbWFzazsKIAlwcm9wcy0+Z2lkX3RibF9sZW4gICAgID0gcmJsb2NrLT5naWRfdGJsX2xlbjsKLQlwcm9wcy0+bWF4X21zZ19zeiAgICAgID0gcmJsb2NrLT5tYXhfbXNnX3N6OworCWlmIChyYmxvY2stPm1heF9tc2dfc3opCisJCXByb3BzLT5tYXhfbXNnX3N6ICAgICAgPSByYmxvY2stPm1heF9tc2dfc3o7CisJZWxzZQorCQlwcm9wcy0+bWF4X21zZ19zeiAgICAgID0gMHgxIDw8IDMxOwogCXByb3BzLT5iYWRfcGtleV9jbnRyICAgPSByYmxvY2stPmJhZF9wa2V5X2NudHI7CiAJcHJvcHMtPnFrZXlfdmlvbF9jbnRyICA9IHJibG9jay0+cWtleV92aW9sX2NudHI7CiAJcHJvcHMtPnBrZXlfdGJsX2xlbiAgICA9IHJibG9jay0+cGtleV90YmxfbGVuOwpAQCAtMTg2LDYgKzIxNiw3IEBACiAJcHJvcHMtPnNtX3NsICAgICAgICAgICA9IHJibG9jay0+c21fc2w7CiAJcHJvcHMtPnN1Ym5ldF90aW1lb3V0ICA9IHJibG9jay0+c3VibmV0X3RpbWVvdXQ7CiAJcHJvcHMtPmluaXRfdHlwZV9yZXBseSA9IHJibG9jay0+aW5pdF90eXBlX3JlcGx5OworCXByb3BzLT5tYXhfdmxfbnVtICAgICAgPSBtYXBfbnVtYmVyX29mX3ZscyhzaGNhLCByYmxvY2stPnZsX2NhcCk7CiAKIAlpZiAocmJsb2NrLT5zdGF0ZSAmJiByYmxvY2stPnBoeXNfd2lkdGgpIHsKIAkJcHJvcHMtPnBoeXNfc3RhdGUgICAgICA9IHJibG9jay0+cGh5c19wc3RhdGU7CkBAIC0zMTQsNyArMzQ1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1jb25zdCB1MzIgYWxsb3dlZF9wb3J0X2NhcHMgPSAoCitzdGF0aWMgY29uc3QgdTMyIGFsbG93ZWRfcG9ydF9jYXBzID0gKAogCUlCX1BPUlRfU00gfCBJQl9QT1JUX0xFRF9JTkZPX1NVUCB8IElCX1BPUlRfQ01fU1VQIHwKIAlJQl9QT1JUX1NOTVBfVFVOTkVMX1NVUCB8IElCX1BPUlRfREVWSUNFX01HTVRfU1VQIHwKIAlJQl9QT1JUX1ZFTkRPUl9DTEFTU19TVVApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwppbmRleCBhODZlYmNjLi42NWIzMzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwpAQCAtNTcsMTYgKzU3LDE3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIklCTSBlU2VydmVyIEhDQSBJbmZpbmlCYW5kIERldmljZSBEcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKEhDQURfVkVSU0lPTik7CiAKLWludCBlaGNhX29wZW5fYXFwMSAgICAgPSAwOworc3RhdGljIGludCBlaGNhX29wZW5fYXFwMSAgICAgPSAwOworc3RhdGljIGludCBlaGNhX2h3X2xldmVsICAgICAgPSAwOworc3RhdGljIGludCBlaGNhX3BvbGxfYWxsX2VxcyAgPSAxOworc3RhdGljIGludCBlaGNhX21yX2xhcmdlcGFnZSAgPSAxOworCiBpbnQgZWhjYV9kZWJ1Z19sZXZlbCAgID0gMDsKLWludCBlaGNhX2h3X2xldmVsICAgICAgPSAwOwogaW50IGVoY2FfbnJfcG9ydHMgICAgICA9IDI7CiBpbnQgZWhjYV91c2VfaHBfbXIgICAgID0gMDsKIGludCBlaGNhX3BvcnRfYWN0X3RpbWUgPSAzMDsKLWludCBlaGNhX3BvbGxfYWxsX2VxcyAgPSAxOwogaW50IGVoY2Ffc3RhdGljX3JhdGUgICA9IC0xOwogaW50IGVoY2Ffc2NhbGluZ19jb2RlICA9IDA7Ci1pbnQgZWhjYV9tcl9sYXJnZXBhZ2UgID0gMTsKIGludCBlaGNhX2xvY2tfaGNhbGxzICAgPSAtMTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKG9wZW5fYXFwMSwgICAgIGVoY2Ffb3Blbl9hcXAxLCAgICAgaW50LCBTX0lSVUdPKTsKQEAgLTM5Niw3ICszOTcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBlaGNhX2luaXRfZGV2aWNlKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EpCitzdGF0aWMgaW50IGVoY2FfaW5pdF9kZXZpY2Uoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSkKIHsKIAlpbnQgcmV0OwogCkBAIC01NzksOCArNTgwLDggQEAKIAlyZXR1cm4gMTsKIH0KIAotRFJJVkVSX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVJVU1IgfCBTX0lXVVNSLAotCSAgICBlaGNhX3Nob3dfZGVidWdfbGV2ZWwsIGVoY2Ffc3RvcmVfZGVidWdfbGV2ZWwpOworc3RhdGljIERSSVZFUl9BVFRSKGRlYnVnX2xldmVsLCBTX0lSVVNSIHwgU19JV1VTUiwKKwkJICAgZWhjYV9zaG93X2RlYnVnX2xldmVsLCBlaGNhX3N0b3JlX2RlYnVnX2xldmVsKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmVoY2FfZHJ2X2F0dHJzW10gPSB7CiAJJmRyaXZlcl9hdHRyX2RlYnVnX2xldmVsLmF0dHIsCkBAIC05NDEsNyArOTQyLDcgQEAKIAlzcGluX3VubG9jaygmc2hjYV9saXN0X2xvY2spOwogfQogCi1pbnQgX19pbml0IGVoY2FfbW9kdWxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGVoY2FfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCkBAIC05ODgsNyArOTg5LDcgQEAKIAlyZXR1cm4gcmV0OwogfTsKIAotdm9pZCBfX2V4aXQgZWhjYV9tb2R1bGVfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGVoY2FfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAlpZiAoZWhjYV9wb2xsX2FsbF9lcXMgPT0gMSkKIAkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfZXFzX3RpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMKaW5kZXggZTIzOWJiZi4uZjI2OTk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMKQEAgLTQwLDggKzQwLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotCiAjaW5jbHVkZSA8cmRtYS9pYl91bWVtLmg+CiAKICNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgpAQCAtNDE5LDcgKzQxNyw2IEBACiAJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9CiAJCWNvbnRhaW5lcl9vZihtci0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOwogCXN0cnVjdCBlaGNhX21yICplX21yID0gY29udGFpbmVyX29mKG1yLCBzdHJ1Y3QgZWhjYV9tciwgaWIuaWJfbXIpOwotCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihtci0+cGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CiAJdTY0IG5ld19zaXplOwogCXU2NCAqbmV3X3N0YXJ0OwogCXUzMiBuZXdfYWNsOwpAQCAtNDI5LDE1ICs0MjYsNiBAQAogCXUzMiBudW1fa3BhZ2VzID0gMDsKIAl1MzIgbnVtX2h3cGFnZXMgPSAwOwogCXN0cnVjdCBlaGNhX21yX3BnaW5mbyBwZ2luZm87Ci0JdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOwotCi0JaWYgKG15X3BkLT5pYl9wZC51b2JqZWN0ICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICYmCi0JICAgIChteV9wZC0+b3ducGlkICE9IGN1cl9waWQpKSB7Ci0JCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byByZXJlZ19waHlzX21yX2V4aXQwOwotCX0KIAogCWlmICghKG1yX3JlcmVnX21hc2sgJiBJQl9NUl9SRVJFR19UUkFOUykpIHsKIAkJLyogVE9ETyBub3Qgc3VwcG9ydGVkLCBiZWNhdXNlIFBIWVAgcmVyZWcgaENhbGwgbmVlZHMgcGFnZXMgKi8KQEAgLTU3NywxOSArNTY1LDkgQEAKIAlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0KIAkJY29udGFpbmVyX29mKG1yLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsIGliX2RldmljZSk7CiAJc3RydWN0IGVoY2FfbXIgKmVfbXIgPSBjb250YWluZXJfb2YobXIsIHN0cnVjdCBlaGNhX21yLCBpYi5pYl9tcik7Ci0Jc3RydWN0IGVoY2FfcGQgKm15X3BkID0gY29udGFpbmVyX29mKG1yLT5wZCwgc3RydWN0IGVoY2FfcGQsIGliX3BkKTsKLQl1MzIgY3VyX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJdW5zaWduZWQgbG9uZyBzbF9mbGFnczsKIAlzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zIGhpcHpvdXQ7CiAKLQlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKLQkgICAgKG15X3BkLT5vd25waWQgIT0gY3VyX3BpZCkpIHsKLQkJZWhjYV9lcnIobXItPmRldmljZSwgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAotCQkJIGN1cl9waWQsIG15X3BkLT5vd25waWQpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIHF1ZXJ5X21yX2V4aXQwOwotCX0KLQogCWlmICgoZV9tci0+ZmxhZ3MgJiBFSENBX01SX0ZMQUdfRk1SKSkgewogCQllaGNhX2Vycihtci0+ZGV2aWNlLCAibm90IHN1cHBvcnRlZCBmb3IgRk1SLCBtcj0lcCBlX21yPSVwICIKIAkJCSAiZV9tci0+ZmxhZ3M9JXgiLCBtciwgZV9tciwgZV9tci0+ZmxhZ3MpOwpAQCAtNjM0LDE2ICs2MTIsNiBAQAogCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPQogCQljb250YWluZXJfb2YobXItPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwgaWJfZGV2aWNlKTsKIAlzdHJ1Y3QgZWhjYV9tciAqZV9tciA9IGNvbnRhaW5lcl9vZihtciwgc3RydWN0IGVoY2FfbXIsIGliLmliX21yKTsKLQlzdHJ1Y3QgZWhjYV9wZCAqbXlfcGQgPSBjb250YWluZXJfb2YobXItPnBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOwotCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKLQotCWlmIChteV9wZC0+aWJfcGQudW9iamVjdCAmJiBteV9wZC0+aWJfcGQudW9iamVjdC0+Y29udGV4dCAmJgotCSAgICAobXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSkgewotCQllaGNhX2Vycihtci0+ZGV2aWNlLCAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCi0JCQkgY3VyX3BpZCwgbXlfcGQtPm93bnBpZCk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZGVyZWdfbXJfZXhpdDA7Ci0JfQogCiAJaWYgKChlX21yLT5mbGFncyAmIEVIQ0FfTVJfRkxBR19GTVIpKSB7CiAJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJub3Qgc3VwcG9ydGVkIGZvciBGTVIsIG1yPSVwIGVfbXI9JXAgIgpAQCAtMTk1Miw5ICsxOTIwLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZWhjYV9zZXRfcGFnZWJ1Zl9waHlzKHN0cnVjdCBlaGNhX21yX3BnaW5mbyAqcGdpbmZvLAotCQkJICB1MzIgbnVtYmVyLAotCQkJICB1NjQgKmtwYWdlKQorc3RhdGljIGludCBlaGNhX3NldF9wYWdlYnVmX3BoeXMoc3RydWN0IGVoY2FfbXJfcGdpbmZvICpwZ2luZm8sCisJCQkJIHUzMiBudW1iZXIsIHU2NCAqa3BhZ2UpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGliX3BoeXNfYnVmICpwYnVmOwpAQCAtMjAxMiw5ICsxOTc5LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZWhjYV9zZXRfcGFnZWJ1Zl9mbXIoc3RydWN0IGVoY2FfbXJfcGdpbmZvICpwZ2luZm8sCi0JCQkgdTMyIG51bWJlciwKLQkJCSB1NjQgKmtwYWdlKQorc3RhdGljIGludCBlaGNhX3NldF9wYWdlYnVmX2ZtcihzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gKnBnaW5mbywKKwkJCQl1MzIgbnVtYmVyLCB1NjQgKmtwYWdlKQogewogCWludCByZXQgPSAwOwogCXU2NCAqZm1ybGlzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcGQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcGQuYwppbmRleCA0M2JjZjA4Li4yZmU1NTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3BkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9wZC5jCkBAIC0zOCw4ICszOCw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KLQogI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKICNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgogCkBAIC01OCw3ICs1Niw2IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAotCXBkLT5vd25waWQgPSBjdXJyZW50LT50Z2lkOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJnBkLT5mcmVlW2ldKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnBkLT5mdWxsW2ldKTsKQEAgLTg1LDE4ICs4MiwxMCBAQAogCiBpbnQgZWhjYV9kZWFsbG9jX3BkKHN0cnVjdCBpYl9wZCAqcGQpCiB7Ci0JdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOwogCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihwZCwgc3RydWN0IGVoY2FfcGQsIGliX3BkKTsKIAlpbnQgaSwgbGVmdG92ZXJzID0gMDsKIAlzdHJ1Y3QgaXB6X3NtYWxsX3F1ZXVlX3BhZ2UgKnBhZ2UsICp0bXA7CiAKLQlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKLQkgICAgbXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7Ci0JCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlsaXN0X3NwbGljZSgmbXlfcGQtPmZ1bGxbaV0sICZteV9wZC0+ZnJlZVtpXSk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsICZteV9wZC0+ZnJlZVtpXSwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCmluZGV4IDEwMTJmMTUuLjNlYjE0YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKQEAgLTQzLDkgKzQzLDYgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLQotI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Ci0KICNpbmNsdWRlICJlaGNhX2NsYXNzZXMuaCIKICNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCiAjaW5jbHVkZSAiZWhjYV9xZXMuaCIKQEAgLTQyNCw2ICs0MjEsOSBAQAogCXUzMiBzd3FlX3NpemUgPSAwLCByd3FlX3NpemUgPSAwLCBpYl9xcF9udW07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChpbml0X2F0dHItPmNyZWF0ZV9mbGFncykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKIAltZW1zZXQoJnBhcm1zLCAwLCBzaXplb2YocGFybXMpKTsKIAlxcF90eXBlID0gaW5pdF9hdHRyLT5xcF90eXBlOwogCkBAIC0xNTI2LDE2ICsxNTI2LDYgQEAKIAlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gY29udGFpbmVyX29mKGlicXAtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKIAkJCQkJICAgICAgaWJfZGV2aWNlKTsKIAlzdHJ1Y3QgZWhjYV9xcCAqbXlfcXAgPSBjb250YWluZXJfb2YoaWJxcCwgc3RydWN0IGVoY2FfcXAsIGliX3FwKTsKLQlzdHJ1Y3QgZWhjYV9wZCAqbXlfcGQgPSBjb250YWluZXJfb2YobXlfcXAtPmliX3FwLnBkLCBzdHJ1Y3QgZWhjYV9wZCwKLQkJCQkJICAgICBpYl9wZCk7Ci0JdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOwotCi0JaWYgKG15X3BkLT5pYl9wZC51b2JqZWN0ICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICYmCi0JICAgIG15X3BkLT5vd25waWQgIT0gY3VyX3BpZCkgewotCQllaGNhX2VycihpYnFwLT5wZC0+ZGV2aWNlLCAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCi0JCQkgY3VyX3BpZCwgbXlfcGQtPm93bnBpZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCS8qIFRoZSBpZi1ibG9jayBiZWxvdyBjYWNoZXMgcXBfYXR0ciB0byBiZSBtb2RpZmllZCBmb3IgR1NJIGFuZCBTTUkKIAkgKiBxcHMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBieSBpYl9tYWQuIFdoZW4gdGhlIHJlc3BlY3RpdmUgcG9ydApAQCAtMTYzNiwyMyArMTYyNiwxMyBAQAogCQkgIGludCBxcF9hdHRyX21hc2ssIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cikKIHsKIAlzdHJ1Y3QgZWhjYV9xcCAqbXlfcXAgPSBjb250YWluZXJfb2YocXAsIHN0cnVjdCBlaGNhX3FwLCBpYl9xcCk7Ci0Jc3RydWN0IGVoY2FfcGQgKm15X3BkID0gY29udGFpbmVyX29mKG15X3FwLT5pYl9xcC5wZCwgc3RydWN0IGVoY2FfcGQsCi0JCQkJCSAgICAgaWJfcGQpOwogCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPSBjb250YWluZXJfb2YocXAtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKIAkJCQkJICAgICAgaWJfZGV2aWNlKTsKIAlzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlID0gc2hjYS0+aXB6X2hjYV9oYW5kbGU7CiAJc3RydWN0IGhjcF9tb2RpZnlfcXBfY29udHJvbF9ibG9jayAqcXBjYjsKLQl1MzIgY3VyX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJaW50IGNudCwgcmV0ID0gMDsKIAl1NjQgaF9yZXQ7CiAKLQlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICAmJgotCSAgICBteV9wZC0+b3ducGlkICE9IGN1cl9waWQpIHsKLQkJZWhjYV9lcnIocXAtPmRldmljZSwgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAotCQkJIGN1cl9waWQsIG15X3BkLT5vd25waWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAocXBfYXR0cl9tYXNrICYgUVBfQVRUUl9RVUVSWV9OT1RfU1VQUE9SVEVEKSB7CiAJCWVoY2FfZXJyKHFwLT5kZXZpY2UsICJJbnZhbGlkIGF0dHJpYnV0ZSBtYXNrICIKIAkJCSAiZWhjYV9xcD0lcCBxcF9udW09JXggcXBfYXR0cl9tYXNrPSV4ICIsCkBAIC0xNzk3LDggKzE3NzcsNiBAQAogewogCXN0cnVjdCBlaGNhX3FwICpteV9xcCA9CiAJCWNvbnRhaW5lcl9vZihpYnNycSwgc3RydWN0IGVoY2FfcXAsIGliX3NycSk7Ci0Jc3RydWN0IGVoY2FfcGQgKm15X3BkID0KLQkJY29udGFpbmVyX29mKGlic3JxLT5wZCwgc3RydWN0IGVoY2FfcGQsIGliX3BkKTsKIAlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0KIAkJY29udGFpbmVyX29mKGlic3JxLT5wZC0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOwogCXN0cnVjdCBoY3BfbW9kaWZ5X3FwX2NvbnRyb2xfYmxvY2sgKm1xcGNiOwpAQCAtMTgwNiwxNCArMTc4NCw2IEBACiAJdTY0IGhfcmV0OwogCWludCByZXQgPSAwOwogCi0JdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOwotCWlmIChteV9wZC0+aWJfcGQudW9iamVjdCAmJiBteV9wZC0+aWJfcGQudW9iamVjdC0+Y29udGV4dCAmJgotCSAgICBteV9wZC0+b3ducGlkICE9IGN1cl9waWQpIHsKLQkJZWhjYV9lcnIoaWJzcnEtPnBkLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJbXFwY2IgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfS0VSTkVMKTsKIAlpZiAoIW1xcGNiKSB7CiAJCWVoY2FfZXJyKGlic3JxLT5kZXZpY2UsICJDb3VsZCBub3QgZ2V0IHplcm9lZCBwYWdlIGZvciBtcXBjYiAiCkBAIC0xODY0LDIyICsxODM0LDEzIEBACiBpbnQgZWhjYV9xdWVyeV9zcnEoc3RydWN0IGliX3NycSAqc3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKnNycV9hdHRyKQogewogCXN0cnVjdCBlaGNhX3FwICpteV9xcCA9IGNvbnRhaW5lcl9vZihzcnEsIHN0cnVjdCBlaGNhX3FwLCBpYl9zcnEpOwotCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihzcnEtPnBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOwogCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPSBjb250YWluZXJfb2Yoc3JxLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsCiAJCQkJCSAgICAgIGliX2RldmljZSk7CiAJc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSA9IHNoY2EtPmlwel9oY2FfaGFuZGxlOwogCXN0cnVjdCBoY3BfbW9kaWZ5X3FwX2NvbnRyb2xfYmxvY2sgKnFwY2I7Ci0JdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOwogCWludCByZXQgPSAwOwogCXU2NCBoX3JldDsKIAotCWlmIChteV9wZC0+aWJfcGQudW9iamVjdCAgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgICYmCi0JICAgIG15X3BkLT5vd25waWQgIT0gY3VyX3BpZCkgewotCQllaGNhX2VycihzcnEtPmRldmljZSwgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAotCQkJIGN1cl9waWQsIG15X3BkLT5vd25waWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlxcGNiID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soR0ZQX0tFUk5FTCk7CiAJaWYgKCFxcGNiKSB7CiAJCWVoY2FfZXJyKHNycS0+ZGV2aWNlLCAiT3V0IG9mIG1lbW9yeSBmb3IgcXBjYiAiCkBAIC0xOTE5LDcgKzE4ODAsNiBAQAogCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihteV9xcC0+aWJfcXAucGQsIHN0cnVjdCBlaGNhX3BkLAogCQkJCQkgICAgIGliX3BkKTsKIAlzdHJ1Y3QgZWhjYV9zcG9ydCAqc3BvcnQgPSAmc2hjYS0+c3BvcnRbbXlfcXAtPmluaXRfYXR0ci5wb3J0X251bSAtIDFdOwotCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKIAl1MzIgcXBfbnVtID0gbXlfcXAtPnJlYWxfcXBfbnVtOwogCWludCByZXQ7CiAJdTY0IGhfcmV0OwpAQCAtMTkzNCwxMSArMTg5NCw2IEBACiAJCQkJICJ1c2VyIHNwYWNlIHFwX251bT0leCIsIHFwX251bSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAobXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7Ci0JCQllaGNhX2VycihkZXYsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCQkgY3VyX3BpZCwgbXlfcGQtPm93bnBpZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCX0KIAogCWlmIChteV9xcC0+c2VuZF9jcSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9yZXFzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3JlcXMuYwppbmRleCAyY2U4Y2ZmLi5hMjBiYmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3JlcXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3JlcXMuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJaWYgKHNlbmRfd3ItPm9wY29kZSA9PSBJQl9XUl9TRU5EX1dJVEhfSU1NIHx8CiAJICAgIHNlbmRfd3ItPm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NKSB7CiAJCS8qIHRoaXMgbWlnaHQgbm90IHdvcmsgYXMgbG9uZyBhcyBIVyBkb2VzIG5vdCBzdXBwb3J0IGl0ICovCi0JCXdxZV9wLT5pbW1lZGlhdGVfZGF0YSA9IGJlMzJfdG9fY3B1KHNlbmRfd3ItPmltbV9kYXRhKTsKKwkJd3FlX3AtPmltbWVkaWF0ZV9kYXRhID0gYmUzMl90b19jcHUoc2VuZF93ci0+ZXguaW1tX2RhdGEpOwogCQl3cWVfcC0+d3JfZmxhZyB8PSBXUUVfV1JGTEFHX0lNTV9EQVRBX1BSRVNFTlQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3Rvb2xzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3Rvb2xzLmgKaW5kZXggNGE4MzQ2YS4uZWM5NTBiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV90b29scy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdG9vbHMuaApAQCAtNzMsMzcgKzczLDM3IEBACiAJCWlmICh1bmxpa2VseShlaGNhX2RlYnVnX2xldmVsKSkgXAogCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAoaWJfZGV2KS0+ZG1hX2RldmljZSwgXAogCQkJCSAgICJQVSUwNHggRUhDQV9EQkc6JXMgIiBmb3JtYXQgIlxuIiwgXAotCQkJCSAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fRlVOQ1RJT05fXywgXAorCQkJCSAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBcCiAJCQkJICAgIyMgYXJnKTsgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgZWhjYV9pbmZvKGliX2RldiwgZm9ybWF0LCBhcmcuLi4pIFwKIAlkZXZfaW5mbygoaWJfZGV2KS0+ZG1hX2RldmljZSwgIlBVJTA0eCBFSENBX0lORk86JXMgIiBmb3JtYXQgIlxuIiwgXAotCQkgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgX19GVU5DVElPTl9fLCAjIyBhcmcpCisJCSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgIyMgYXJnKQogCiAjZGVmaW5lIGVoY2Ffd2FybihpYl9kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCiAJZGV2X3dhcm4oKGliX2RldiktPmRtYV9kZXZpY2UsICJQVSUwNHggRUhDQV9XQVJOOiVzICIgZm9ybWF0ICJcbiIsIFwKLQkJIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fRlVOQ1RJT05fXywgIyMgYXJnKQorCQkgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sICMjIGFyZykKIAogI2RlZmluZSBlaGNhX2VycihpYl9kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCiAJZGV2X2VycigoaWJfZGV2KS0+ZG1hX2RldmljZSwgIlBVJTA0eCBFSENBX0VSUjolcyAiIGZvcm1hdCAiXG4iLCBcCi0JCXJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fRlVOQ1RJT05fXywgIyMgYXJnKQorCQlyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgIyMgYXJnKQogCiAvKiB1c2UgdGhpcyBvbmUgb25seSBpZiBubyBpYl9kZXYgYXZhaWxhYmxlICovCiAjZGVmaW5lIGVoY2FfZ2VuX2RiZyhmb3JtYXQsIGFyZy4uLikgXAogCWRvIHsgXAogCQlpZiAodW5saWtlbHkoZWhjYV9kZWJ1Z19sZXZlbCkpIFwKIAkJCXByaW50ayhLRVJOX0RFQlVHICJQVSUwNHggRUhDQV9EQkc6JXMgIiBmb3JtYXQgIlxuIiwgXAotCQkJICAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fRlVOQ1RJT05fXywgIyMgYXJnKTsgXAorCQkJICAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCAjIyBhcmcpOyBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlaGNhX2dlbl93YXJuKGZvcm1hdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyAiUFUlMDR4IEVIQ0FfV0FSTjolcyAiIGZvcm1hdCAiXG4iLCBcCi0JICAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fRlVOQ1RJT05fXywgIyMgYXJnKQorCSAgICAgICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgIyMgYXJnKQogCiAjZGVmaW5lIGVoY2FfZ2VuX2Vycihmb3JtYXQsIGFyZy4uLikgXAogCXByaW50ayhLRVJOX0VSUiAiUFUlMDR4IEVIQ0FfRVJSOiVzICIgZm9ybWF0ICJcbiIsIFwKLQkgICAgICAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgX19GVU5DVElPTl9fLCAjIyBhcmcpCisJICAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCAjIyBhcmcpCiAKIC8qKgogICogZWhjYV9kbXAgLSBwcmludGsgYSBtZW1vcnkgYmxvY2ssIHdob3NlIGxlbmd0aCBpcyBuKjggYnl0ZXMuCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJZm9yICh4ID0gMDsgeCA8IGw7IHggKz0gMTYpIHsgXAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiRUhDQV9ETVA6JXMgIiBmb3JtYXQgXAogCQkJICAgICAgICIgYWRyPSVwIG9mcz0lMDR4ICUwMTZseCAlMDE2bHhcbiIsIFwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sICMjYXJncywgZGViLCB4LCBcCisJCQkgICAgICAgX19mdW5jX18sICMjYXJncywgZGViLCB4LCBcCiAJCQkgICAgICAgKigodTY0ICopJmRlYlswXSksICooKHU2NCAqKSZkZWJbOF0pKTsgXAogCQkJZGViICs9IDE2OyBcCiAJCX0gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMKaW5kZXggNTIzNGQ2Yy4uMWIwN2YyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCkBAIC00MCw4ICs0MCw2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KLQogI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgogI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCiAjaW5jbHVkZSAiZWhjYV9tcm13LmgiCkBAIC0yNTMsMTEgKzI1MSw5IEBACiAJdTMyIGlkcl9oYW5kbGUgPSBmaWxlb2Zmc2V0ICYgMHgxRkZGRkZGOwogCXUzMiBxX3R5cGUgPSAoZmlsZW9mZnNldCA+PiAyNykgJiAweDE7CSAgLyogQ1EsIFFQLC4uLiAgICAgICAgKi8KIAl1MzIgcnNyY190eXBlID0gKGZpbGVvZmZzZXQgPj4gMjUpICYgMHgzOyAvKiBzcSxycSxjbW5kX3dpbmRvdyAqLwotCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKIAl1MzIgcmV0OwogCXN0cnVjdCBlaGNhX2NxICpjcTsKIAlzdHJ1Y3QgZWhjYV9xcCAqcXA7Ci0Jc3RydWN0IGVoY2FfcGQgKnBkOwogCXN0cnVjdCBpYl91b2JqZWN0ICp1b2JqZWN0OwogCiAJc3dpdGNoIChxX3R5cGUpIHsKQEAgLTI3MCwxMyArMjY2LDYgQEAKIAkJaWYgKCFjcSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmIChjcS0+b3ducGlkICE9IGN1cl9waWQpIHsKLQkJCWVoY2FfZXJyKGNxLT5pYl9jcS5kZXZpY2UsCi0JCQkJICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCQkgY3VyX3BpZCwgY3EtPm93bnBpZCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCiAJCWlmICghY3EtPmliX2NxLnVvYmplY3QgfHwgY3EtPmliX2NxLnVvYmplY3QtPmNvbnRleHQgIT0gY29udGV4dCkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yOTgsMTQgKzI4Nyw2IEBACiAJCWlmICghcXApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlwZCA9IGNvbnRhaW5lcl9vZihxcC0+aWJfcXAucGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7Ci0JCWlmIChwZC0+b3ducGlkICE9IGN1cl9waWQpIHsKLQkJCWVoY2FfZXJyKHFwLT5pYl9xcC5kZXZpY2UsCi0JCQkJICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKLQkJCQkgY3VyX3BpZCwgcGQtPm93bnBpZCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCiAJCXVvYmplY3QgPSBJU19TUlEocXApID8gcXAtPmliX3NycS51b2JqZWN0IDogcXAtPmliX3FwLnVvYmplY3Q7CiAJCWlmICghdW9iamVjdCB8fCB1b2JqZWN0LT5jb250ZXh0ICE9IGNvbnRleHQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKaW5kZXggMDQ0ZGE1OC4uM2M3OTY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgSU5GSU5JQkFORF9JUEFUSAogCXRyaXN0YXRlICJRTG9naWMgSW5maW5pUGF0aCBEcml2ZXIiCi0JZGVwZW5kcyBvbiAoUENJX01TSSB8fCBIVF9JUlEpICYmIDY0QklUICYmIE5FVAorCWRlcGVuZHMgb24gNjRCSVQgJiYgTkVUCiAJLS0taGVscC0tLQogCVRoaXMgaXMgYSBkcml2ZXIgZm9yIFFMb2dpYyBJbmZpbmlQYXRoIGhvc3QgY2hhbm5lbCBhZGFwdGVycywKIAlpbmNsdWRpbmcgSW5maW5pQmFuZCB2ZXJicyBzdXBwb3J0LiAgVGhpcyBkcml2ZXIgYWxsb3dzIHRoZXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUKaW5kZXggZmU2NzM4OC4uYmY5NDUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZQpAQCAtMjAsMTQgKzIwLDE5IEBACiAJaXBhdGhfcXAubyBcCiAJaXBhdGhfcmMubyBcCiAJaXBhdGhfcnVjLm8gXAorCWlwYXRoX3NkbWEubyBcCiAJaXBhdGhfc3JxLm8gXAogCWlwYXRoX3N0YXRzLm8gXAogCWlwYXRoX3N5c2ZzLm8gXAogCWlwYXRoX3VjLm8gXAogCWlwYXRoX3VkLm8gXAogCWlwYXRoX3VzZXJfcGFnZXMubyBcCisJaXBhdGhfdXNlcl9zZG1hLm8gXAogCWlwYXRoX3ZlcmJzX21jYXN0Lm8gXAotCWlwYXRoX3ZlcmJzLm8KKwlpcGF0aF92ZXJicy5vIFwKKwlpcGF0aF9pYmE3MjIwLm8gXAorCWlwYXRoX3NkNzIyMC5vIFwKKwlpcGF0aF9zZDcyMjBfaW1nLm8KIAogaWJfaXBhdGgtJChDT05GSUdfSFRfSVJRKSArPSBpcGF0aF9pYmE2MTEwLm8KIGliX2lwYXRoLSQoQ09ORklHX1BDSV9NU0kpICs9IGlwYXRoX2liYTYxMjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoXzcyMjAuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF83MjIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmYTVjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF83MjIwLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBfSVBBVEhfNzIyMF9ICisjZGVmaW5lIF9JUEFUSF83MjIwX0gKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgcHJvdmlkZXMgdGhlIGRlY2xhcmF0aW9ucyBhbmQgY29tbW9uIGRlZmluaXRpb25zCisgKiBmb3IgKG1vc3RseSkgbWFuaXB1bGF0aW9uIG9mIHRoZSBTZXJEZXMgYmxvY2tzIHdpdGhpbiB0aGUgSUJBNzIyMC4KKyAqIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIG90aGVyCisgKiA3MjIwLXJlbGF0ZWQgZmlsZXMgc3VjaCBhcyBpcGF0aF9pYmE3MjIwLmMgb3IgaXBhdGhfc2Q3MjIwLmMuCisgKi8KK2ludCBpcGF0aF9zZDcyMjBfcHJlc2V0cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworaW50IGlwYXRoX3NkNzIyMF9pbml0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHdhc19yZXNldCk7CitpbnQgaXBhdGhfc2Q3MjIwX3Byb2dfbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgc2RudW0sIHU4ICppbWcsCisJaW50IGxlbiwgaW50IG9mZnNldCk7CitpbnQgaXBhdGhfc2Q3MjIwX3Byb2dfdmZ5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHNkbnVtLCBjb25zdCB1OCAqaW1nLAorCWludCBsZW4sIGludCBvZmZzZXQpOworLyoKKyAqIEJlbG93IHVzZWQgZm9yIHNkbnVtIHBhcmFtZXRlciwgc2VsZWN0aW5nIG9uZSBvZiB0aGUgdHdvIHNlY3Rpb25zCisgKiB1c2VkIGZvciBQQ0llLCBvciB0aGUgc2luZ2xlIFNlckRlcyB1c2VkIGZvciBJQiwgd2hpY2ggaXMgdGhlCisgKiBvbmx5IG9uZSBjdXJyZW50bHkgdXNlZAorICovCisjZGVmaW5lIElCXzcyMjBfU0VSREVTIDIKKworaW50IGlwYXRoX3NkNzIyMF9pYl9sb2FkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitpbnQgaXBhdGhfc2Q3MjIwX2liX3ZmeShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworCisjZW5kaWYgLyogX0lQQVRIXzcyMjBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oCmluZGV4IDQxNDYyMTAuLjI4Y2ZlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTc1LDExICs3NSwxMyBAQAogI2RlZmluZSBJUEFUSF9JQl9MSU5LRE9XTgkJMAogI2RlZmluZSBJUEFUSF9JQl9MSU5LQVJNCQkxCiAjZGVmaW5lIElQQVRIX0lCX0xJTktBQ1RJVkUJCTIKLSNkZWZpbmUgSVBBVEhfSUJfTElOS0lOSVQJCTMKKyNkZWZpbmUgSVBBVEhfSUJfTElOS0RPV05fT05MWQkJMwogI2RlZmluZSBJUEFUSF9JQl9MSU5LRE9XTl9TTEVFUAkJNAogI2RlZmluZSBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFCTUKICNkZWZpbmUgSVBBVEhfSUJfTElOS19MT09QQkFDSwk2IC8qIGVuYWJsZSBsb2NhbCBsb29wYmFjayAqLwogI2RlZmluZSBJUEFUSF9JQl9MSU5LX0VYVEVSTkFMCTcgLyogbm9ybWFsLCBkaXNhYmxlIGxvY2FsIGxvb3BiYWNrICovCisjZGVmaW5lIElQQVRIX0lCX0xJTktfTk9fSFJUQlQJOCAvKiBkaXNhYmxlIEhlYXJ0YmVhdCwgZS5nLiBmb3IgbG9vcGJhY2sgKi8KKyNkZWZpbmUgSVBBVEhfSUJfTElOS19IUlRCVAk5IC8qIGVuYWJsZSBoZWFydGJlYXQsIG5vcm1hbCwgbm9uLWxvb3BiYWNrICovCiAKIC8qCiAgKiBUaGVzZSAzIHZhbHVlcyAoU0RSIGFuZCBERFIgbWF5IGJlIE9SZWQgZm9yIGF1dG8tc3BlZWQKQEAgLTE5OCw3ICsyMDAsOCBAQAogI2RlZmluZSBJUEFUSF9SVU5USU1FX0ZPUkNFX1dDX09SREVSCTB4NAogI2RlZmluZSBJUEFUSF9SVU5USU1FX1JDVkhEUl9DT1BZCTB4OAogI2RlZmluZSBJUEFUSF9SVU5USU1FX01BU1RFUgkweDEwCi0vKiAweDIwIGFuZCAweDQwIGFyZSBubyBsb25nZXIgdXNlZCwgYnV0IGFyZSByZXNlcnZlZCBmb3IgQUJJIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgSVBBVEhfUlVOVElNRV9OT0RNQV9SVEFJTCAweDgwCisjZGVmaW5lIElQQVRIX1JVTlRJTUVfU0RNQQkgICAgICAweDIwMAogI2RlZmluZSBJUEFUSF9SVU5USU1FX0ZPUkNFX1BJT0FWQUlMIDB4NDAwCiAjZGVmaW5lIElQQVRIX1JVTlRJTUVfUElPX1JFR1NXQVBQRUQgMHg4MDAKIApAQCAtNDQ0LDggKzQ0Nyw5IEBACiAjZGVmaW5lIElQQVRIX0NNRF9QSU9BVkFJTFVQRAkyNwkvKiBmb3JjZSBhbiB1cGRhdGUgb2YgUElPQXZhaWwgcmVnICovCiAjZGVmaW5lIElQQVRIX0NNRF9QT0xMX1RZUEUJMjgJLyogc2V0IHRoZSBraW5kIG9mIHBvbGxpbmcgd2Ugd2FudCAqLwogI2RlZmluZSBJUEFUSF9DTURfQVJNTEFVTkNIX0NUUkwJMjkgLyogYXJtbGF1bmNoIGRldGVjdGlvbiBjb250cm9sICovCi0KLSNkZWZpbmUgSVBBVEhfQ01EX01BWAkJMjkKKy8qIDMwIGlzIHVudXNlZCAqLworI2RlZmluZSBJUEFUSF9DTURfU0RNQV9JTkZMSUdIVCAzMQkvKiBzZG1hIGluZmxpZ2h0IGNvdW50ZXIgcmVxdWVzdCAqLworI2RlZmluZSBJUEFUSF9DTURfU0RNQV9DT01QTEVURSAzMgkvKiBzZG1hIGNvbXBsZXRpb24gY291bnRlciByZXF1ZXN0ICovCiAKIC8qCiAgKiBQb2xsIHR5cGVzCkBAIC00ODMsNiArNDg3LDE3IEBACiAJdW5pb24gewogCQlzdHJ1Y3QgaXBhdGhfdGlkX2luZm8gdGlkX2luZm87CiAJCXN0cnVjdCBpcGF0aF91c2VyX2luZm8gdXNlcl9pbmZvOworCisJCS8qCisJCSAqIGFkZHJlc3MgaW4gdXNlcnNwYWNlIHdoZXJlIHdlIHNob3VsZCBwdXQgdGhlIHNkbWEKKwkJICogaW5mbGlnaHQgY291bnRlcgorCQkgKi8KKwkJX191NjQgc2RtYV9pbmZsaWdodDsKKwkJLyoKKwkJICogYWRkcmVzcyBpbiB1c2Vyc3BhY2Ugd2hlcmUgd2Ugc2hvdWxkIHB1dCB0aGUgc2RtYQorCQkgKiBjb21wbGV0aW9uIGNvdW50ZXIKKwkJICovCisJCV9fdTY0IHNkbWFfY29tcGxldGU7CiAJCS8qIGFkZHJlc3MgaW4gdXNlcnNwYWNlIG9mIHN0cnVjdCBpcGF0aF9wb3J0X2luZm8gdG8KIAkJICAgd3JpdGUgcmVzdWx0IHRvICovCiAJCV9fdTY0IHBvcnRfaW5mbzsKQEAgLTUzNyw3ICs1NTIsNyBAQAogCiAvKiBUaGUgc2Vjb25kIGRpYWdfcGt0IHN0cnVjdCBpcyB0aGUgZXhwYW5kZWQgdmVyc2lvbiB0aGF0IGFsbG93cwogICogbW9yZSBjb250cm9sIG92ZXIgdGhlIHBhY2tldCwgc3BlY2lmaWNhbGx5LCBieSBhbGxvd2luZyBhIGN1c3RvbQotICogcGJjICgrIGV4dHJhKSBxd29yZCwgc28gdGhhdCBzcGVjaWFsIG1vZGVzIGFuZCBkZWxpYmVyYXRlCisgKiBwYmMgKCsgc3RhdGljIHJhdGUpIHF3b3JkLCBzbyB0aGF0IHNwZWNpYWwgbW9kZXMgYW5kIGRlbGliZXJhdGUKICAqIGNoYW5nZXMgdG8gQ1JDcyBjYW4gYmUgdXNlZC4gVGhlIGVsZW1lbnRzIHdlcmUgYWxzbyByZS1vcmRlcmVkCiAgKiBmb3IgYmV0dGVyIGFsaWdubWVudCBhbmQgdG8gYXZvaWQgcGFkZGluZyBpc3N1ZXMuCiAgKi8KQEAgLTY2Miw4ICs2NzcsMTIgQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfTEVOR1RIX1NISUZUIDAKICNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfUkNWVFlQRV9NQVNLIDB4NwogI2RlZmluZSBJTkZJTklQQVRIX1JIRl9SQ1ZUWVBFX1NISUZUIDExCi0jZGVmaW5lIElORklOSVBBVEhfUkhGX0VHUklOREVYX01BU0sgMHg3RkYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfRUdSSU5ERVhfTUFTSyAweEZGRgogI2RlZmluZSBJTkZJTklQQVRIX1JIRl9FR1JJTkRFWF9TSElGVCAxNgorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9TRVFfTUFTSyAweEYKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfU0VRX1NISUZUIDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSERSUV9PRkZTRVRfTUFTSyAweDdGRgorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IRFJRX09GRlNFVF9TSElGVCA0CiAjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfSUNSQ0VSUiAgIDB4ODAwMDAwMDAKICNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9WQ1JDRVJSICAgMHg0MDAwMDAwMAogI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX1BBUklUWUVSUiAweDIwMDAwMDAwCkBAIC02NzMsNiArNjkyLDggQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9USURFUlIgICAgMHgwMjAwMDAwMAogI2RlZmluZSBJTkZJTklQQVRIX1JIRl9IX01LRVJSICAgICAweDAxMDAwMDAwCiAjZGVmaW5lIElORklOSVBBVEhfUkhGX0hfSUJFUlIgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfSF9FUlJfTUFTSyAgMHhGRjgwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1JIRl9MX1VTRV9FR1IgICAweDgwMDAwMDAwCiAjZGVmaW5lIElORklOSVBBVEhfUkhGX0xfU1dBICAgICAgIDB4MDAwMDgwMDAKICNkZWZpbmUgSU5GSU5JUEFUSF9SSEZfTF9TV0IgICAgICAgMHgwMDAwNDAwMAogCkBAIC02OTYsNiArNzE3LDcgQEAKIC8qIFNlbmRQSU8gcGVyLWJ1ZmZlciBjb250cm9sICovCiAjZGVmaW5lIElORklOSVBBVEhfU1BfVEVTVCAgICAweDQwCiAjZGVmaW5lIElORklOSVBBVEhfU1BfVEVTVEVCUCAweDIwCisjZGVmaW5lIElORklOSVBBVEhfU1BfVFJJR0dFUl9TSElGVCAgMTUKIAogLyogU2VuZFBJT0F2YWlsIGJpdHMgKi8KICNkZWZpbmUgSU5GSU5JUEFUSF9TRU5EUElPQVZBSUxfQlVTWV9TSElGVCAxCkBAIC03NjIsNiArNzg0LDcgQEAKICNkZWZpbmUgSVBBVEhfTVNOX01BU0sgMHhGRkZGRkYKICNkZWZpbmUgSVBBVEhfUVBOX01BU0sgMHhGRkZGRkYKICNkZWZpbmUgSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFIDB4QzAwMAorI2RlZmluZSBJUEFUSF9FQUdFUl9USURfSUQgSU5GSU5JUEFUSF9JX1RJRF9NQVNLCiAjZGVmaW5lIElQQVRIX01VTFRJQ0FTVF9RUE4gMHhGRkZGRkYKIAogLyogUmVjZWl2ZSBIZWFkZXIgUXVldWU6IHJlY2VpdmUgdHlwZSAoZnJvbSBpbmZpbmlwYXRoKSAqLwpAQCAtNzgxLDcgKzgwNCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191MzIgaXBhdGhfaGRyZ2V0X2Vycl9mbGFncyhjb25zdCBfX2xlMzIgKiByYnVmKQogewotCXJldHVybiBfX2xlMzJfdG9fY3B1KHJidWZbMV0pOworCXJldHVybiBfX2xlMzJfdG9fY3B1KHJidWZbMV0pICYgSU5GSU5JUEFUSF9SSEZfSF9FUlJfTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSBfX3UzMiBpcGF0aF9oZHJnZXRfcmN2X3R5cGUoY29uc3QgX19sZTMyICogcmJ1ZikKQEAgLTgwMiw2ICs4MjUsMjMgQEAKIAkgICAgJiBJTkZJTklQQVRIX1JIRl9FR1JJTkRFWF9NQVNLOwogfQogCitzdGF0aWMgaW5saW5lIF9fdTMyIGlwYXRoX2hkcmdldF9zZXEoY29uc3QgX19sZTMyICpyYnVmKQoreworCXJldHVybiAoX19sZTMyX3RvX2NwdShyYnVmWzFdKSA+PiBJTkZJTklQQVRIX1JIRl9TRVFfU0hJRlQpCisJCSYgSU5GSU5JUEFUSF9SSEZfU0VRX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXBhdGhfaGRyZ2V0X29mZnNldChjb25zdCBfX2xlMzIgKnJidWYpCit7CisJcmV0dXJuIChfX2xlMzJfdG9fY3B1KHJidWZbMV0pID4+IElORklOSVBBVEhfUkhGX0hEUlFfT0ZGU0VUX1NISUZUKQorCQkmIElORklOSVBBVEhfUkhGX0hEUlFfT0ZGU0VUX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXBhdGhfaGRyZ2V0X3VzZV9lZ3JfYnVmKGNvbnN0IF9fbGUzMiAqcmJ1ZikKK3sKKwlyZXR1cm4gX19sZTMyX3RvX2NwdShyYnVmWzBdKSAmIElORklOSVBBVEhfUkhGX0xfVVNFX0VHUjsKK30KKwogc3RhdGljIGlubGluZSBfX3UzMiBpcGF0aF9oZHJnZXRfaXBhdGhfdmVyKF9fbGUzMiBoZHJ3b3JkKQogewogCXJldHVybiAoX19sZTMyX3RvX2NwdShoZHJ3b3JkKSA+PiBJTkZJTklQQVRIX0lfVkVSU19TSElGVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kZWJ1Zy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmgKaW5kZXggZDZmNjk1My4uNjU5MjZjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmgKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgX19JUEFUSF9JUEFUSEVSUiAgICAweDQwMDAwCS8qIEV0aGVybmV0IChJUEFUSCkgZXJyb3JzICovCiAjZGVmaW5lIF9fSVBBVEhfSVBBVEhQRCAgICAgMHg4MDAwMAkvKiBFdGhlcm5ldCAoSVBBVEgpIHBhY2tldCBkdW1wICovCiAjZGVmaW5lIF9fSVBBVEhfSVBBVEhUQUJMRSAgMHgxMDAwMDAJLyogRXRoZXJuZXQgKElQQVRIKSB0YWJsZSBkdW1wICovCisjZGVmaW5lIF9fSVBBVEhfTElOS1ZFUkJEQkcgMHgyMDAwMDAJLyogdmVyeSB2ZXJib3NlIGxpbmtjaGFuZ2UgZGVidWcgKi8KIAogI2Vsc2UJCQkJLyogX0lQQVRIX0RFQlVHR0lORyAqLwogCkBAIC04OSw2ICs5MCw3IEBACiAjZGVmaW5lIF9fSVBBVEhfSVBBVEhFUlIgIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIGVycm9ycyBvbiAgICovCiAjZGVmaW5lIF9fSVBBVEhfSVBBVEhQRCAgIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIHBhY2tldCBkdW1wIG9uICAgKi8KICNkZWZpbmUgX19JUEFUSF9JUEFUSFRBQkxFIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIHBhY2tldCBkdW1wIG9uICAgKi8KKyNkZWZpbmUgX19JUEFUSF9MSU5LVkVSQkRCRyAweDAJLyogdmVyeSB2ZXJib3NlIGxpbmtjaGFuZ2UgZGVidWcgKi8KIAogI2VuZGlmCQkJCS8qIF9JUEFUSF9ERUJVR0dJTkcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RpYWcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kaWFnLmMKaW5kZXggNDEzN2M3Ny4uZDRjZThiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RpYWcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC03OSw3ICs3OSw3IEBACiAKIHN0YXRpYyBhdG9taWNfdCBkaWFncGt0X2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiBzdGF0aWMgc3RydWN0IGNkZXYgKmRpYWdwa3RfY2RldjsKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkaWFncGt0X2NsYXNzX2RldjsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkaWFncGt0X2RldjsKIAogaW50IGlwYXRoX2RpYWdfYWRkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKQEAgLTg5LDcgKzg5LDcgQEAKIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJmRpYWdwa3RfY291bnQpID09IDEpIHsKIAkJcmV0ID0gaXBhdGhfY2Rldl9pbml0KElQQVRIX0RJQUdQS1RfTUlOT1IsCiAJCQkJICAgICAgImlwYXRoX2RpYWdwa3QiLCAmZGlhZ3BrdF9maWxlX29wcywKLQkJCQkgICAgICAmZGlhZ3BrdF9jZGV2LCAmZGlhZ3BrdF9jbGFzc19kZXYpOworCQkJCSAgICAgICZkaWFncGt0X2NkZXYsICZkaWFncGt0X2Rldik7CiAKIAkJaWYgKHJldCkgewogCQkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkbid0IGNyZWF0ZSBpcGF0aF9kaWFncGt0ICIKQEAgLTEwMiw3ICsxMDIsNyBAQAogCiAJcmV0ID0gaXBhdGhfY2Rldl9pbml0KElQQVRIX0RJQUdfTUlOT1JfQkFTRSArIGRkLT5pcGF0aF91bml0LCBuYW1lLAogCQkJICAgICAgJmRpYWdfZmlsZV9vcHMsICZkZC0+ZGlhZ19jZGV2LAotCQkJICAgICAgJmRkLT5kaWFnX2NsYXNzX2Rldik7CisJCQkgICAgICAmZGQtPmRpYWdfZGV2KTsKIAlpZiAocmV0KQogCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGRuJ3QgY3JlYXRlICVzIGRldmljZTogJWQiLAogCQkJICAgICAgbmFtZSwgcmV0KTsKQEAgLTExNCw5ICsxMTQsOSBAQAogdm9pZCBpcGF0aF9kaWFnX3JlbW92ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRpYWdwa3RfY291bnQpKQotCQlpcGF0aF9jZGV2X2NsZWFudXAoJmRpYWdwa3RfY2RldiwgJmRpYWdwa3RfY2xhc3NfZGV2KTsKKwkJaXBhdGhfY2Rldl9jbGVhbnVwKCZkaWFncGt0X2NkZXYsICZkaWFncGt0X2Rldik7CiAKLQlpcGF0aF9jZGV2X2NsZWFudXAoJmRkLT5kaWFnX2NkZXYsICZkZC0+ZGlhZ19jbGFzc19kZXYpOworCWlwYXRoX2NkZXZfY2xlYW51cCgmZGQtPmRpYWdfY2RldiwgJmRkLT5kaWFnX2Rldik7CiB9CiAKIC8qKgpAQCAtMzMwLDEzICszMzAsMTkgQEAKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAJc3NpemVfdCByZXQgPSAwOwogCXU2NCB2YWw7CisJdTMyIGxfc3RhdGUsIGx0X3N0YXRlOyAvKiBMaW5rU3RhdGUsIExpbmtUcmFpbmluZ1N0YXRlICovCiAKLQlpZiAoY291bnQgIT0gc2l6ZW9mKGRwKSkgeworCWlmIChjb3VudCA8IHNpemVvZihvZHApKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmRwLCBkYXRhLCBzaXplb2YoZHApKSkgeworCWlmIChjb3VudCA9PSBzaXplb2YoZHApKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZHAsIGRhdGEsIHNpemVvZihkcCkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBiYWlsOworCQl9CisJfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmb2RwLCBkYXRhLCBzaXplb2Yob2RwKSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBiYWlsOwogCX0KQEAgLTM5NiwxMCArNDAyLDE3IEBACiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gYmFpbDsKIAl9Ci0JLyogQ2hlY2sgbGluayBzdGF0ZSwgYnV0IG5vdCBpZiB3ZSBoYXZlIGN1c3RvbSBQQkMgKi8KLQl2YWwgPSBkZC0+aXBhdGhfbGFzdGliY3N0YXQgJiBJUEFUSF9JQlNUQVRFX01BU0s7Ci0JaWYgKCFkcC5wYmNfd2QgJiYgdmFsICE9IElQQVRIX0lCU1RBVEVfSU5JVCAmJgotCQl2YWwgIT0gSVBBVEhfSUJTVEFURV9BUk0gJiYgdmFsICE9IElQQVRIX0lCU1RBVEVfQUNUSVZFKSB7CisJLyoKKwkgKiBXYW50IHRvIHNraXAgY2hlY2sgZm9yIGxfc3RhdGUgaWYgdXNpbmcgY3VzdG9tIFBCQywKKwkgKiBiZWNhdXNlIHdlIG1pZ2h0IGJlIHRyeWluZyB0byBmb3JjZSBhbiBTTSBwYWNrZXQgb3V0LgorCSAqIGZpcnN0LWN1dCwgc2tpcCBfYWxsXyBzdGF0ZSBjaGVja2luZyBpbiB0aGF0IGNhc2UuCisJICovCisJdmFsID0gaXBhdGhfaWJfc3RhdGUoZGQsIGRkLT5pcGF0aF9sYXN0aWJjc3RhdCk7CisJbHRfc3RhdGUgPSBpcGF0aF9pYl9saW5rdHJzdGF0ZShkZCwgZGQtPmlwYXRoX2xhc3RpYmNzdGF0KTsKKwlsX3N0YXRlID0gaXBhdGhfaWJfbGlua3N0YXRlKGRkLCBkZC0+aXBhdGhfbGFzdGliY3N0YXQpOworCWlmICghZHAucGJjX3dkICYmIChsdF9zdGF0ZSAhPSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQIHx8CisJICAgICh2YWwgIT0gZGQtPmliX2luaXQgJiYgdmFsICE9IGRkLT5pYl9hcm0gJiYKKwkgICAgdmFsICE9IGRkLT5pYl9hY3RpdmUpKSkgewogCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJ1bml0ICV1IG5vdCByZWFkeSAoc3RhdGUgJWxseClcbiIsCiAJCQkgICBkZC0+aXBhdGhfdW5pdCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTQzMSwxNSArNDQ0LDE3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlwaW9idWYgPSBpcGF0aF9nZXRwaW9idWYoZGQsICZwYnVmbik7CisJcGxlbiA+Pj0gMjsJCS8qIGluIGR3b3JkcyAqLworCisJcGlvYnVmID0gaXBhdGhfZ2V0cGlvYnVmKGRkLCBwbGVuLCAmcGJ1Zm4pOwogCWlmICghcGlvYnVmKSB7CiAJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIk5vIFBJTyBidWZmZXJzIGF2YWlsIHVuaXQgZm9yICV1XG4iLAogCQkJICAgZGQtPmlwYXRoX3VuaXQpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gYmFpbDsKIAl9Ci0KLQlwbGVuID4+PSAyOwkJLyogaW4gZHdvcmRzICovCisJLyogZGlzYXJtIGl0IGp1c3QgdG8gYmUgZXh0cmEgc3VyZSAqLworCWlwYXRoX2Rpc2FybV9waW9idWZzKGRkLCBwYnVmbiwgMSk7CiAKIAlpZiAoaXBhdGhfZGVidWcgJiBfX0lQQVRIX1BLVERCRykKIAkJaXBhdGhfY2RiZyhWRVJCT1NFLCAidW5pdCAldSAweCV4KzF3IHBpbyVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCmluZGV4IGQ1ZmY2Y2EuLmFjZjMwYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTQxLDcgKzQxLDYgQEAKIAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCi0jaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKIHN0YXRpYyB2b2lkIGlwYXRoX3VwZGF0ZV9waW9fYnVmcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIApAQCAtNzMsMTAgKzcyLDI3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAibWFzayBmb3IgZGVidWcgcHJpbnRzIik7CiBFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9kZWJ1Zyk7CiAKK3Vuc2lnbmVkIGlwYXRoX210dTQwOTYgPSAxOyAvKiBtYXggNEtCIElCIG10dSBieSBkZWZhdWx0LCBpZiBzdXBwb3J0ZWQgKi8KK21vZHVsZV9wYXJhbV9uYW1lZChtdHU0MDk2LCBpcGF0aF9tdHU0MDk2LCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXR1NDA5NiwgImVuYWJsZSBNVFUgb2YgNDA5NiBieXRlcywgaWYgc3VwcG9ydGVkIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpcGF0aF9ob2xfdGltZW91dF9tcyA9IDEzMDAwOworbW9kdWxlX3BhcmFtX25hbWVkKGhvbF90aW1lb3V0X21zLCBpcGF0aF9ob2xfdGltZW91dF9tcywgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGhvbF90aW1lb3V0X21zLAorCSJkdXJhdGlvbiBvZiB1c2VyIGFwcCBzdXNwZW5zaW9uIGFmdGVyIGxpbmsgZmFpbHVyZSIpOworCit1bnNpZ25lZCBpcGF0aF9saW5rcmVjb3ZlcnkgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKGxpbmtyZWNvdmVyeSwgaXBhdGhfbGlua3JlY292ZXJ5LCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGxpbmtyZWNvdmVyeSwgImVuYWJsZSB3b3JrYXJvdW5kIGZvciBsaW5rIHJlY292ZXJ5IGlzc3VlIik7CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlFMb2dpYyA8c3VwcG9ydEBwYXRoc2NhbGUuY29tPiIpOworTU9EVUxFX0FVVEhPUigiUUxvZ2ljIDxzdXBwb3J0QHFsb2dpYy5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYyBJbmZpbmlQYXRoIGRyaXZlciIpOwogCisvKgorICogVGFibGUgdG8gdHJhbnNsYXRlIHRoZSBMSU5LVFJBSU5JTkdTVEFURSBwb3J0aW9uIG9mCisgKiBJQkNTdGF0dXMgdG8gYSBodW1hbi1yZWFkYWJsZSBmb3JtLgorICovCiBjb25zdCBjaGFyICppcGF0aF9pYmNzdGF0dXNfc3RyW10gPSB7CiAJIkRpc2FibGVkIiwKIAkiTGlua1VwIiwKQEAgLTkxLDkgKzEwNywyMCBAQAogCSJDZmdXYWl0Um10IiwKIAkiQ2ZnSWRsZSIsCiAJIlJlY292UmV0cmFpbiIsCi0JIkxTdGF0ZTB4RCIsCQkvKiB1bnVzZWQgKi8KKwkiQ2ZnVHhSZXZMYW5lIiwJCS8qIHVudXNlZCBiZWZvcmUgSUJBNzIyMCAqLwogCSJSZWNvdldhaXRSbXQiLAogCSJSZWNvdklkbGUiLAorCS8qIGJlbG93IHdlcmUgYWRkZWQgZm9yIElCQTcyMjAgKi8KKwkiQ2ZnRW5oYW5jZWQiLAorCSJDZmdUZXN0IiwKKwkiQ2ZnV2FpdFJtdFRlc3QiLAorCSJDZmdXYWl0Q2ZnRW5oYW5jZWQiLAorCSJTZW5kVFNfVCIsCisJIlNlbmRUc3RJZGxlcyIsCisJIlJjdlRTX1QiLAorCSJTZW5kVHN0X1RTMXMiLAorCSJMVFN0YXRlMTgiLCAiTFRTdGF0ZTE5IiwgIkxUU3RhdGUxQSIsICJMVFN0YXRlMUIiLAorCSJMVFN0YXRlMUMiLCAiTFRTdGF0ZTFEIiwgIkxUU3RhdGUxRSIsICJMVFN0YXRlMUYiCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXBhdGhfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqKTsKQEAgLTEwMiw4ICsxMjksMTAgQEAKIAogLyogT25seSBuZWVkZWQgZm9yIHJlZ2lzdHJhdGlvbiwgbm90aGluZyBlbHNlIG5lZWRzIHRoaXMgaW5mbyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BBVEhTQ0FMRSAweDFmYzEKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RTE9HSUMgMHgxMDc3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5GSU5JUEFUSF9IVCAweGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX1BFODAwIDB4MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIXzcyMjAgMHg3MjIwCiAKIC8qIE51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBvdXIgY2FyZCBzdGF0dXMgY2hlY2suLi4gICovCiAjZGVmaW5lIFNUQVRVU19USU1FT1VUIDYwCkBAIC0xMTEsNiArMTQwLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpcGF0aF9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUEFUSFNDQUxFLCBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfSFQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUEFUSFNDQUxFLCBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfUEU4MDApIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfNzIyMCkgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTEyNiwxOSArMTU2LDYgQEAKIAl9LAogfTsKIAotc3RhdGljIHZvaWQgaXBhdGhfY2hlY2tfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwYXRoX2RldmRhdGEsCi0JCQkJCQlzdGF0dXNfd29yay53b3JrKTsKLQotCS8qCi0JICogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgaW50ZXJydXB0cywgbGV0IHRoZSB1c2VyIGtub3cgYW5kCi0JICogZG9uJ3QgYm90aGVyIGNoZWNraW5nIGFnYWluLgotCSAqLwotCWlmIChkZC0+aXBhdGhfaW50X2NvdW50ZXIgPT0gMCkKLQkJZGV2X2VycigmZGQtPnBjaWRldi0+ZGV2LCAiTm8gaW50ZXJydXB0cyBkZXRlY3RlZC5cbiIpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9iYXJzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCSAgICAgdTMyICpiYXIwLCB1MzIgKmJhcjEpCiB7CkBAIC0yMDYsOCArMjIzLDYgQEAKIAlkZC0+cGNpZGV2ID0gcGRldjsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGQpOwogCi0JSU5JVF9ERUxBWUVEX1dPUksoJmRkLT5zdGF0dXNfd29yaywgaXBhdGhfY2hlY2tfc3RhdHVzKTsKLQogCWxpc3RfYWRkKCZkZC0+aXBhdGhfbGlzdCwgJmlwYXRoX2Rldl9saXN0KTsKIAogYmFpbF91bmxvY2s6CkBAIC0yMzQsMTIgKzI0OSwxMiBAQAogCXJldHVybiBkZDsKIH0KIAotaW50IGlwYXRoX2NvdW50X3VuaXRzKGludCAqbnByZXNlbnRwLCBpbnQgKm51cHAsIHUzMiAqbWF4cG9ydHNwKQoraW50IGlwYXRoX2NvdW50X3VuaXRzKGludCAqbnByZXNlbnRwLCBpbnQgKm51cHAsIGludCAqbWF4cG9ydHNwKQogewogCWludCBudW5pdHMsIG5wcmVzZW50LCBudXA7CiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIG1heHBvcnRzOworCWludCBtYXhwb3J0czsKIAogCW51bml0cyA9IG5wcmVzZW50ID0gbnVwID0gbWF4cG9ydHMgPSAwOwogCkBAIC0zMDQsNyArMzE5LDcgQEAKIAl1MzIgKmFkZHI7CiAJdTY0IG1zZWNzLCBlbXNlY3M7CiAKLQlwaW9idWYgPSBpcGF0aF9nZXRwaW9idWYoZGQsICZwYm51bSk7CisJcGlvYnVmID0gaXBhdGhfZ2V0cGlvYnVmKGRkLCAwLCAmcGJudW0pOwogCWlmICghcGlvYnVmKSB7CiAJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCiAJCQkiTm8gUElPYnVmcyBmb3IgY2hlY2tpbmcgcGVyZiwgc2tpcHBpbmdcbiIpOwpAQCAtMzM2LDcgKzM1MSwxNCBAQAogCiAJaXBhdGhfZGlzYWJsZV9hcm1sYXVuY2goZGQpOwogCi0Jd3JpdGVxKDAsIHBpb2J1Zik7IC8qIGxlbmd0aCAwLCBubyBkd29yZHMgYWN0dWFsbHkgc2VudCAqLworCS8qCisJICogbGVuZ3RoIDAsIG5vIGR3b3JkcyBhY3R1YWxseSBzZW50LCBhbmQgbWFyayBhcyBWTDE1CisJICogb24gY2hpcHMgd2hlcmUgdGhhdCBtYXkgbWF0dGVyIChkdWUgdG8gSUIgZmxvd2NvbnRyb2wpCisJICovCisJaWYgKChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9IQVNfUEJDX0NOVCkpCisJCXdyaXRlcSgxVUwgPDwgNjMsIHBpb2J1Zik7CisJZWxzZQorCQl3cml0ZXEoMCwgcGlvYnVmKTsKIAlpcGF0aF9mbHVzaF93YygpOwogCiAJLyoKQEAgLTM3Nyw2ICszOTksNyBAQAogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKIAl1MzIgYmFyMCA9IDAsIGJhcjEgPSAwOworCXU4IHJldjsKIAogCWRkID0gaXBhdGhfYWxsb2NfZGV2ZGF0YShwZGV2KTsKIAlpZiAoSVNfRVJSKGRkKSkgewpAQCAtNDA4LDcgKzQzMSw3IEBACiAJfQogCWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKLQlpcGF0aF9jZGJnKFZFUkJPU0UsICJyZWdiYXNlICgwKSAlbGx4IGxlbiAlZCBwZGV2LT5pcnEgJWQsIHZlbmQgJXgvJXggIgorCWlwYXRoX2NkYmcoVkVSQk9TRSwgInJlZ2Jhc2UgKDApICVsbHggbGVuICVkIGlycSAlZCwgdmVuZCAleC8leCAiCiAJCSAgICJkcml2ZXJfZGF0YSAlbHhcbiIsIGFkZHIsIGxlbiwgcGRldi0+aXJxLCBlbnQtPnZlbmRvciwKIAkJICAgZW50LT5kZXZpY2UsIGVudC0+ZHJpdmVyX2RhdGEpOwogCkBAIC01MTIsNiArNTM1LDEzIEBACiAJCQkgICAgICAiQ09ORklHX1BDSV9NU0kgaXMgbm90IGVuYWJsZWRcbiIsIGVudC0+ZGV2aWNlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAjZW5kaWYKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5GSU5JUEFUSF83MjIwOgorI2lmbmRlZiBDT05GSUdfUENJX01TSQorCQlpcGF0aF9kYmcoIkNPTkZJR19QQ0lfTVNJIGlzIG5vdCBlbmFibGVkLCAiCisJCQkgICJ1c2luZyBJTlR4IGZvciB1bml0ICV1XG4iLCBkZC0+aXBhdGhfdW5pdCk7CisjZW5kaWYKKwkJaXBhdGhfaW5pdF9pYmE3MjIwX2Z1bmNzKGRkKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaXBhdGhfZGV2X2VycihkZCwgIkZvdW5kIHVua25vd24gUUxvZ2ljIGRldmljZWlkIDB4JXgsICIKIAkJCSAgICAgICJmYWlsaW5nXG4iLCBlbnQtPmRldmljZSk7CkBAIC01MzMsNyArNTYzLDEzIEBACiAJCWdvdG8gYmFpbF9yZWdpb25zOwogCX0KIAotCWRkLT5pcGF0aF9wY2lyZXYgPSBwZGV2LT5yZXZpc2lvbjsKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCWlmIChyZXQpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byByZWFkIFBDSSByZXZpc2lvbiBJRCB1bml0ICIKKwkJCSAgICAgICIldTogZXJyICVkXG4iLCBkZC0+aXBhdGhfdW5pdCwgLXJldCk7CisJCWdvdG8gYmFpbF9yZWdpb25zOwkvKiBzaG91bGRuJ3QgZXZlciBoYXBwZW4gKi8KKwl9CisJZGQtPmlwYXRoX3BjaXJldiA9IHJldjsKIAogI2lmIGRlZmluZWQoX19wb3dlcnBjX18pCiAJLyogVGhlcmUgaXNuJ3QgYSBnZW5lcmljIHdheSB0byBzcGVjaWZ5IHdyaXRldGhyb3VnaCBtYXBwaW5ncyAqLwpAQCAtNTU2LDE0ICs1OTIsNiBAQAogCWlwYXRoX2NkYmcoVkVSQk9TRSwgIm1hcHBlZCBpbyBhZGRyICVsbHggdG8ga3JlZ2Jhc2UgJXBcbiIsCiAJCSAgIGFkZHIsIGRkLT5pcGF0aF9rcmVnYmFzZSk7CiAKLQkvKgotCSAqIGNsZWFyIGlwYXRoX2ZsYWdzIGhlcmUgaW5zdGVhZCBvZiBpbiBpcGF0aF9pbml0X2NoaXAgYXMgaXQgaXMgc2V0Ci0JICogYnkgaXBhdGhfc2V0dXBfaHRjb25maWcuCi0JICovCi0JZGQtPmlwYXRoX2ZsYWdzID0gMDsKLQlkZC0+aXBhdGhfbGxpX2NvdW50ZXIgPSAwOwotCWRkLT5pcGF0aF9sbGlfZXJyb3JzID0gMDsKLQogCWlmIChkZC0+aXBhdGhfZl9idXMoZGQsIHBkZXYpKQogCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHNldHVwIGNvbmZpZyBzcGFjZTsgIgogCQkJICAgICAgImNvbnRpbnVpbmcgYW55d2F5XG4iKTsKQEAgLTYwOCwxMyArNjM2LDExIEBACiAJaXBhdGhfZGlhZ19hZGQoZGQpOwogCWlwYXRoX3JlZ2lzdGVyX2liX2RldmljZShkZCk7CiAKLQkvKiBDaGVjayB0aGF0IGNhcmQgc3RhdHVzIGluIFNUQVRVU19USU1FT1VUIHNlY29uZHMuICovCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZC0+c3RhdHVzX3dvcmssIEhaICogU1RBVFVTX1RJTUVPVVQpOwotCiAJZ290byBiYWlsOwogCiBiYWlsX2lycXNldHVwOgotCWlmIChwZGV2LT5pcnEpIGZyZWVfaXJxKHBkZXYtPmlycSwgZGQpOworCWlmIChwZGV2LT5pcnEpCisJCWZyZWVfaXJxKHBkZXYtPmlycSwgZGQpOwogCiBiYWlsX2lvdW5tYXA6CiAJaW91bm1hcCgodm9sYXRpbGUgdm9pZCBfX2lvbWVtICopIGRkLT5pcGF0aF9rcmVnYmFzZSk7CkBAIC02NTQsNiArNjgwLDEwIEBACiAJCWlwYXRoX2Rpc2FibGVfd2MoZGQpOwogCX0KIAorCWlmIChkZC0+aXBhdGhfc3BlY3RyaWdnZXJoaXQpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICIlbHUgc3BlY2lhbCB0cmlnZ2VyIGhpdHNcbiIsCisJCQkgZGQtPmlwYXRoX3NwZWN0cmlnZ2VyaGl0KTsKKwogCWlmIChkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSkgewogCQlkbWFfZnJlZV9jb2hlcmVudCgmZGQtPnBjaWRldi0+ZGV2LCBQQUdFX1NJWkUsCiAJCQkJICAodm9pZCAqKSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSwKQEAgLTcwNiw2ICs3MzYsOCBAQAogCQl0bXBwID0gZGQtPmlwYXRoX3BhZ2VzaGFkb3c7CiAJCWRkLT5pcGF0aF9wYWdlc2hhZG93ID0gTlVMTDsKIAkJdmZyZWUodG1wcCk7CisKKwkJZGQtPmlwYXRoX2VncnRpZGJhc2UgPSBOVUxMOwogCX0KIAogCS8qCkBAIC03MzgsNyArNzcwLDYgQEAKIAkgKi8KIAlpcGF0aF9zaHV0ZG93bl9kZXZpY2UoZGQpOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmZGQtPnN0YXR1c193b3JrKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJaWYgKGRkLT52ZXJic19kZXYpCkBAIC04MjMsMjAgKzg1NCw4IEBACiAJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOwogCX0KLQotCS8qCi0JICogRGlzYWJsZSBQSU9BVkFJTFVQRCwgdGhlbiByZS1lbmFibGUsIHJlYWRpbmcgc2NyYXRjaCBpbgotCSAqIGJldHdlZW4uICBUaGlzIHNlZW1zIHRvIGF2b2lkIGEgY2hpcCB0aW1pbmcgcmFjZSB0aGF0IGNhdXNlcwotCSAqIHBpb2F2YWlsIHVwZGF0ZXMgdG8gbWVtb3J5IHRvIHN0b3AuICBXZSB4b3IgYXMgd2UgZG9uJ3QKLQkgKiBrbm93IHRoZSBzdGF0ZSBvZiB0aGUgYml0IHdoZW4gd2UncmUgY2FsbGVkLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOwotCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCi0JCWRkLT5pcGF0aF9zZW5kY3RybCBeIElORklOSVBBVEhfU19QSU9CVUZBVkFJTFVQRCk7Ci0JaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7Ci0JaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKLQkJCSBkZC0+aXBhdGhfc2VuZGN0cmwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7CisJLyogb24gc29tZSBvbGRlciBjaGlwcywgdXBkYXRlIG1heSBub3QgaGFwcGVuIGFmdGVyIGNhbmNlbCAqLworCWlwYXRoX2ZvcmNlX3Bpb19hdmFpbF91cGRhdGUoZGQpOwogfQogCiAvKioKQEAgLTg1MSw4ICs4NzAsNyBAQAogICogLUVUSU1FRE9VVCBzdGF0ZSBjYW4gaGF2ZSBtdWx0aXBsZSBzdGF0ZXMgc2V0LCBmb3IgYW55IG9mIHNldmVyYWwKICAqIHRyYW5zaXRpb25zLgogICovCi1zdGF0aWMgaW50IGlwYXRoX3dhaXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIHN0YXRlLAotCQkJCWludCBtc2VjcykKK2ludCBpcGF0aF93YWl0X2xpbmtzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBzdGF0ZSwgaW50IG1zZWNzKQogewogCWRkLT5pcGF0aF9zdGF0ZV93YW50ZWQgPSBzdGF0ZTsKIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpcGF0aF9zdGF0ZV93YWl0LApAQCAtODc0LDE4ICs4OTIsNTIgQEAKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlwYXRoX3JlYWRfa3JlZzY0KAogCQkJCSAgIGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwpLAogCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLAotCQkJICAgaXBhdGhfaWJjc3RhdHVzX3N0clt2YWwgJiAweGZdKTsKKwkJCSAgIGlwYXRoX2liY3N0YXR1c19zdHJbdmFsICYgZGQtPmliY3NfbHRzX21hc2tdKTsKIAl9CiAJcmV0dXJuIChkZC0+aXBhdGhfZmxhZ3MgJiBzdGF0ZSkgPyAwIDogLUVUSU1FRE9VVDsKIH0KIAorc3RhdGljIHZvaWQgZGVjb2RlX3NkbWFfZXJycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2Vycl90IGVyciwKKwljaGFyICpidWYsIHNpemVfdCBibGVuKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQlpcGF0aF9lcnJfdCBlcnI7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwl9IGVycnNbXSA9IHsKKwkJeyBJTkZJTklQQVRIX0VfU0RNQUdFTk1JU01BVENILCAiU0RtYUdlbk1pc21hdGNoIiB9LAorCQl7IElORklOSVBBVEhfRV9TRE1BT1VUT0ZCT1VORCwgIlNEbWFPdXRPZkJvdW5kIiB9LAorCQl7IElORklOSVBBVEhfRV9TRE1BVEFJTE9VVE9GQk9VTkQsICJTRG1hVGFpbE91dE9mQm91bmQiIH0sCisJCXsgSU5GSU5JUEFUSF9FX1NETUFCQVNFLCAiU0RtYUJhc2UiIH0sCisJCXsgSU5GSU5JUEFUSF9FX1NETUExU1RERVNDLCAiU0RtYTFzdERlc2MiIH0sCisJCXsgSU5GSU5JUEFUSF9FX1NETUFSUFlUQUcsICJTRG1hUnB5VGFnIiB9LAorCQl7IElORklOSVBBVEhfRV9TRE1BRFdFTiwgIlNEbWFEd0VuIiB9LAorCQl7IElORklOSVBBVEhfRV9TRE1BTUlTU0lOR0RXLCAiU0RtYU1pc3NpbmdEdyIgfSwKKwkJeyBJTkZJTklQQVRIX0VfU0RNQVVORVhQREFUQSwgIlNEbWFVbmV4cERhdGEiIH0sCisJCXsgSU5GSU5JUEFUSF9FX1NETUFERVNDQUREUk1JU0FMSUdOLCAiU0RtYURlc2NBZGRyTWlzYWxpZ24iIH0sCisJCXsgSU5GSU5JUEFUSF9FX1NFTkRCVUZNSVNVU0UsICJTZW5kQnVmTWlzdXNlIiB9LAorCQl7IElORklOSVBBVEhfRV9TRE1BRElTQUJMRUQsICJTRG1hRGlzYWJsZWQiIH0sCisJfTsKKwlpbnQgaTsKKwlpbnQgZXhwZWN0ZWQ7CisJc2l6ZV90IGJpZHggPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJycyk7IGkrKykgeworCQlleHBlY3RlZCA9IChlcnJzW2ldLmVyciAhPSBJTkZJTklQQVRIX0VfU0RNQURJU0FCTEVEKSA/IDAgOgorCQkJdGVzdF9iaXQoSVBBVEhfU0RNQV9BQk9SVElORywgJmRkLT5pcGF0aF9zZG1hX3N0YXR1cyk7CisJCWlmICgoZXJyICYgZXJyc1tpXS5lcnIpICYmICFleHBlY3RlZCkKKwkJCWJpZHggKz0gc25wcmludGYoYnVmICsgYmlkeCwgYmxlbiAtIGJpZHgsCisJCQkJCSAiJXMgIiwgZXJyc1tpXS5tc2cpOworCX0KK30KKwogLyoKICAqIERlY29kZSB0aGUgZXJyb3Igc3RhdHVzIGludG8gc3RyaW5ncywgZGVjaWRpbmcgd2hldGhlciB0byBhbHdheXMKICAqIHByaW50ICogaXQgb3Igbm90IGRlcGVuZGluZyBvbiAibm9ybWFsIHBhY2tldCBlcnJvcnMiIHZzIGV2ZXJ5dGhpbmcKICAqIGVsc2UuICAgUmV0dXJuIDEgaWYgInJlYWwiIGVycm9ycywgb3RoZXJ3aXNlIDAgaWYgb25seSBwYWNrZXQKICAqIGVycm9ycywgc28gY2FsbGVyIGNhbiBkZWNpZGUgd2hhdCB0byBwcmludCB3aXRoIHRoZSBzdHJpbmcuCiAgKi8KLWludCBpcGF0aF9kZWNvZGVfZXJyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sIGlwYXRoX2Vycl90IGVycikKK2ludCBpcGF0aF9kZWNvZGVfZXJyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKwlpcGF0aF9lcnJfdCBlcnIpCiB7CiAJaW50IGlzZXJyID0gMTsKIAkqYnVmID0gJ1wwJzsKQEAgLTkyMyw2ICs5NzUsOCBAQAogCQlzdHJsY2F0KGJ1ZiwgInJiYWR2ZXJzaW9uICIsIGJsZW4pOwogCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUkhEUikKIAkJc3RybGNhdChidWYsICJyaGRyICIsIGJsZW4pOworCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfU0VORFNQRUNJQUxUUklHR0VSKQorCQlzdHJsY2F0KGJ1ZiwgInNlbmRzcGVjaWFsdHJpZ2dlciAiLCBibGVuKTsKIAlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1JMT05HUEtUTEVOKQogCQlzdHJsY2F0KGJ1ZiwgInJsb25ncGt0bGVuICIsIGJsZW4pOwogCWlmIChlcnIgJiBJTkZJTklQQVRIX0VfUk1BWFBLVExFTikKQEAgLTk2NSw2ICsxMDE5LDEwIEBACiAJCXN0cmxjYXQoYnVmLCAiaGFyZHdhcmUgIiwgYmxlbik7CiAJaWYgKGVyciAmIElORklOSVBBVEhfRV9SRVNFVCkKIAkJc3RybGNhdChidWYsICJyZXNldCAiLCBibGVuKTsKKwlpZiAoZXJyICYgSU5GSU5JUEFUSF9FX1NETUFFUlJTKQorCQlkZWNvZGVfc2RtYV9lcnJzKGRkLCBlcnIsIGJ1ZiwgYmxlbik7CisJaWYgKGVyciAmIElORklOSVBBVEhfRV9JTlZBTElERUVQQ01EKQorCQlzdHJsY2F0KGJ1ZiwgImludmFsaWRlZXByb21jbWQgIiwgYmxlbik7CiBkb25lOgogCXJldHVybiBpc2VycjsKIH0KQEAgLTEwNzcsMTggKzExMzUsMTcgQEAKIAkJCSAgICAgdTMyIGVmbGFncywKIAkJCSAgICAgdTMyIGwsCiAJCQkgICAgIHUzMiBldGFpbCwKLQkJCSAgICAgdTY0ICpyYykKKwkJCSAgICAgX19sZTMyICpyaGZfYWRkciwKKwkJCSAgICAgc3RydWN0IGlwYXRoX21lc3NhZ2VfaGVhZGVyICpoZHIpCiB7CiAJY2hhciBlbXNnWzEyOF07Ci0Jc3RydWN0IGlwYXRoX21lc3NhZ2VfaGVhZGVyICpoZHI7CiAKIAlnZXRfcmhmX2VycnN0cmluZyhlZmxhZ3MsIGVtc2csIHNpemVvZiBlbXNnKTsKLQloZHIgPSAoc3RydWN0IGlwYXRoX21lc3NhZ2VfaGVhZGVyICopJnJjWzFdOwogCWlwYXRoX2NkYmcoUEtULCAiUkhGZXJycyAleCBoZHJxdGFpbD0leCB0eXA9JXUgIgogCQkgICAidGxlbj0leCBvcGNvZGU9JXggZWdyaWR4PSV4OiAlc1xuIiwKIAkJICAgZWZsYWdzLCBsLAotCQkgICBpcGF0aF9oZHJnZXRfcmN2X3R5cGUoKF9fbGUzMiAqKSByYyksCi0JCSAgIGlwYXRoX2hkcmdldF9sZW5ndGhfaW5fYnl0ZXMoKF9fbGUzMiAqKSByYyksCisJCSAgIGlwYXRoX2hkcmdldF9yY3ZfdHlwZShyaGZfYWRkciksCisJCSAgIGlwYXRoX2hkcmdldF9sZW5ndGhfaW5fYnl0ZXMocmhmX2FkZHIpLAogCQkgICBiZTMyX3RvX2NwdShoZHItPmJ0aFswXSkgPj4gMjQsCiAJCSAgIGV0YWlsLCBlbXNnKTsKIApAQCAtMTExMyw1NSArMTE3MCw1MiBAQAogICovCiB2b2lkIGlwYXRoX2tyZWNlaXZlKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQpCiB7Ci0JdTY0ICpyYzsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKKwlfX2xlMzIgKnJoZl9hZGRyOwogCXZvaWQgKmVidWY7CiAJY29uc3QgdTMyIHJzaXplID0gZGQtPmlwYXRoX3JjdmhkcmVudHNpemU7CS8qIHdvcmRzICovCiAJY29uc3QgdTMyIG1heGNudCA9IGRkLT5pcGF0aF9yY3ZoZHJjbnQgKiByc2l6ZTsJLyogd29yZHMgKi8KIAl1MzIgZXRhaWwgPSAtMSwgbCwgaGRycXRhaWw7CiAJc3RydWN0IGlwYXRoX21lc3NhZ2VfaGVhZGVyICpoZHI7Ci0JdTMyIGVmbGFncywgaSwgZXR5cGUsIHRsZW4sIHBrdHRvdCA9IDAsIHVwZGVncj0wLCByZWxvb3A9MDsKKwl1MzIgZWZsYWdzLCBpLCBldHlwZSwgdGxlbiwgcGt0dG90ID0gMCwgdXBkZWdyID0gMCwgcmVsb29wID0gMDsKIAlzdGF0aWMgdTY0IHRvdGNhbGxzOwkvKiBzdGF0cywgbWF5IGV2ZW50dWFsbHkgcmVtb3ZlICovCi0KLQlpZiAoIWRkLT5pcGF0aF9oZHJxdGFpbHB0cikgewotCQlpcGF0aF9kZXZfZXJyKGRkLAotCQkJICAgICAgImhkcnF0YWlscHRyIG5vdCBzZXQsIGNhbid0IGRvIHJlY2VpdmVzXG4iKTsKLQkJZ290byBiYWlsOwotCX0KKwlpbnQgbGFzdDsKIAogCWwgPSBwZC0+cG9ydF9oZWFkOwotCWhkcnF0YWlsID0gaXBhdGhfZ2V0X3JjdmhkcnRhaWwocGQpOwotCWlmIChsID09IGhkcnF0YWlsKQotCQlnb3RvIGJhaWw7CisJcmhmX2FkZHIgPSAoX19sZTMyICopIHBkLT5wb3J0X3JjdmhkcnEgKyBsICsgZGQtPmlwYXRoX3JoZl9vZmZzZXQ7CisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX05PRE1BX1JUQUlMKSB7CisJCXUzMiBzZXEgPSBpcGF0aF9oZHJnZXRfc2VxKHJoZl9hZGRyKTsKKworCQlpZiAoc2VxICE9IHBkLT5wb3J0X3NlcV9jbnQpCisJCQlnb3RvIGJhaWw7CisJCWhkcnF0YWlsID0gMDsKKwl9IGVsc2UgeworCQloZHJxdGFpbCA9IGlwYXRoX2dldF9yY3ZoZHJ0YWlsKHBkKTsKKwkJaWYgKGwgPT0gaGRycXRhaWwpCisJCQlnb3RvIGJhaWw7CisJCXNtcF9ybWIoKTsKKwl9CiAKIHJlbG9vcDoKLQlmb3IgKGkgPSAwOyBsICE9IGhkcnF0YWlsOyBpKyspIHsKLQkJdTMyIHFwOwotCQl1OCAqYnRoYnl0ZXM7Ci0KLQkJcmMgPSAodTY0ICopIChwZC0+cG9ydF9yY3ZoZHJxICsgKGwgPDwgMikpOwotCQloZHIgPSAoc3RydWN0IGlwYXRoX21lc3NhZ2VfaGVhZGVyICopJnJjWzFdOwotCQkvKgotCQkgKiBjb3VsZCBtYWtlIGEgbmV0d29yayBvcmRlciB2ZXJzaW9uIG9mIElQQVRIX0tEX1FQLCBhbmQKLQkJICogZG8gdGhlIG9idmlvdXMgc2hpZnQgYmVmb3JlIG1hc2tpbmcgdG8gc3BlZWQgdGhpcyB1cC4KLQkJICovCi0JCXFwID0gbnRvaGwoaGRyLT5idGhbMV0pICYgMHhmZmZmZmY7Ci0JCWJ0aGJ5dGVzID0gKHU4ICopIGhkci0+YnRoOwotCi0JCWVmbGFncyA9IGlwYXRoX2hkcmdldF9lcnJfZmxhZ3MoKF9fbGUzMiAqKSByYyk7Ci0JCWV0eXBlID0gaXBhdGhfaGRyZ2V0X3Jjdl90eXBlKChfX2xlMzIgKikgcmMpOworCWZvciAobGFzdCA9IDAsIGkgPSAxOyAhbGFzdDsgaSsrKSB7CisJCWhkciA9IGRkLT5pcGF0aF9mX2dldF9tc2doZWFkZXIoZGQsIHJoZl9hZGRyKTsKKwkJZWZsYWdzID0gaXBhdGhfaGRyZ2V0X2Vycl9mbGFncyhyaGZfYWRkcik7CisJCWV0eXBlID0gaXBhdGhfaGRyZ2V0X3Jjdl90eXBlKHJoZl9hZGRyKTsKIAkJLyogdG90YWwgbGVuZ3RoICovCi0JCXRsZW4gPSBpcGF0aF9oZHJnZXRfbGVuZ3RoX2luX2J5dGVzKChfX2xlMzIgKikgcmMpOworCQl0bGVuID0gaXBhdGhfaGRyZ2V0X2xlbmd0aF9pbl9ieXRlcyhyaGZfYWRkcik7CiAJCWVidWYgPSBOVUxMOwotCQlpZiAoZXR5cGUgIT0gUkNWSFFfUkNWX1RZUEVfRVhQRUNURUQpIHsKKwkJaWYgKChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9OT0RNQV9SVEFJTCkgPworCQkgICAgaXBhdGhfaGRyZ2V0X3VzZV9lZ3JfYnVmKHJoZl9hZGRyKSA6CisJCSAgICAoZXR5cGUgIT0gUkNWSFFfUkNWX1RZUEVfRVhQRUNURUQpKSB7CiAJCQkvKgotCQkJICogaXQgdHVybnMgb3V0IHRoYXQgdGhlIGNoaXBzIHVzZXMgYW4gZWFnZXIgYnVmZmVyCisJCQkgKiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgY2hpcCB1c2VzIGFuIGVhZ2VyIGJ1ZmZlcgogCQkJICogZm9yIGFsbCBub24tZXhwZWN0ZWQgcGFja2V0cywgd2hldGhlciBpdCAibmVlZHMiCiAJCQkgKiBvbmUgb3Igbm90LiAgU28gYWx3YXlzIGdldCB0aGUgaW5kZXgsIGJ1dCBkb24ndAogCQkJICogc2V0IGVidWYgKHNvIHdlIHRyeSB0byBjb3B5IGRhdGEpIHVubGVzcyB0aGUKIAkJCSAqIGxlbmd0aCByZXF1aXJlcyBpdC4KIAkJCSAqLwotCQkJZXRhaWwgPSBpcGF0aF9oZHJnZXRfaW5kZXgoKF9fbGUzMiAqKSByYyk7CisJCQlldGFpbCA9IGlwYXRoX2hkcmdldF9pbmRleChyaGZfYWRkcik7CisJCQl1cGRlZ3IgPSAxOwogCQkJaWYgKHRsZW4gPiBzaXplb2YoKmhkcikgfHwKIAkJCSAgICBldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QpCiAJCQkJZWJ1ZiA9IGlwYXRoX2dldF9lZ3JidWYoZGQsIGV0YWlsKTsKQEAgLTExNzIsNzUgKzEyMjYsOTEgQEAKIAkJICogcGFja2V0czsgb25seSBpcGF0aGhkcmVyciBzaG91bGQgYmUgc2V0LgogCQkgKi8KIAotCQlpZiAoZXR5cGUgIT0gUkNWSFFfUkNWX1RZUEVfTk9OX0tEICYmIGV0eXBlICE9Ci0JCSAgICBSQ1ZIUV9SQ1ZfVFlQRV9FUlJPUiAmJiBpcGF0aF9oZHJnZXRfaXBhdGhfdmVyKAotCQkJICAgIGhkci0+aXBoLnZlcl9wb3J0X3RpZF9vZmZzZXQpICE9Ci0JCSAgICBJUFNfUFJPVE9fVkVSU0lPTikgeworCQlpZiAoZXR5cGUgIT0gUkNWSFFfUkNWX1RZUEVfTk9OX0tEICYmCisJCSAgICBldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9FUlJPUiAmJgorCQkgICAgaXBhdGhfaGRyZ2V0X2lwYXRoX3ZlcihoZHItPmlwaC52ZXJfcG9ydF90aWRfb2Zmc2V0KSAhPQorCQkgICAgSVBTX1BST1RPX1ZFUlNJT04pCiAJCQlpcGF0aF9jZGJnKFBLVCwgIkJhZCBJbmZpbmlQYXRoIHByb3RvY29sIHZlcnNpb24gIgogCQkJCSAgICIleFxuIiwgZXR5cGUpOwotCQl9CiAKIAkJaWYgKHVubGlrZWx5KGVmbGFncykpCi0JCQlpcGF0aF9yY3ZfaGRyZXJyKGRkLCBlZmxhZ3MsIGwsIGV0YWlsLCByYyk7CisJCQlpcGF0aF9yY3ZfaGRyZXJyKGRkLCBlZmxhZ3MsIGwsIGV0YWlsLCByaGZfYWRkciwgaGRyKTsKIAkJZWxzZSBpZiAoZXR5cGUgPT0gUkNWSFFfUkNWX1RZUEVfTk9OX0tEKSB7Ci0JCQlpcGF0aF9pYl9yY3YoZGQtPnZlcmJzX2RldiwgcmMgKyAxLCBlYnVmLCB0bGVuKTsKKwkJCWlwYXRoX2liX3JjdihkZC0+dmVyYnNfZGV2LCAodTMyICopaGRyLCBlYnVmLCB0bGVuKTsKIAkJCWlmIChkZC0+aXBhdGhfbGxpX2NvdW50ZXIpCiAJCQkJZGQtPmlwYXRoX2xsaV9jb3VudGVyLS07CisJCX0gZWxzZSBpZiAoZXR5cGUgPT0gUkNWSFFfUkNWX1RZUEVfRUFHRVIpIHsKKwkJCXU4IG9wY29kZSA9IGJlMzJfdG9fY3B1KGhkci0+YnRoWzBdKSA+PiAyNDsKKwkJCXUzMiBxcCA9IGJlMzJfdG9fY3B1KGhkci0+YnRoWzFdKSAmIDB4ZmZmZmZmOwogCQkJaXBhdGhfY2RiZyhQS1QsICJ0eXAgJXgsIG9wY29kZSAleCAoZWFnZXIsICIKIAkJCQkgICAicXA9JXgpLCBsZW4gJXg7IGlnbm9yZWRcbiIsCi0JCQkJICAgZXR5cGUsIGJ0aGJ5dGVzWzBdLCBxcCwgdGxlbik7CisJCQkJICAgZXR5cGUsIG9wY29kZSwgcXAsIHRsZW4pOwogCQl9Ci0JCWVsc2UgaWYgKGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX0VBR0VSKQotCQkJaXBhdGhfY2RiZyhQS1QsICJ0eXAgJXgsIG9wY29kZSAleCAoZWFnZXIsICIKLQkJCQkgICAicXA9JXgpLCBsZW4gJXg7IGlnbm9yZWRcbiIsCi0JCQkJICAgZXR5cGUsIGJ0aGJ5dGVzWzBdLCBxcCwgdGxlbik7CiAJCWVsc2UgaWYgKGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX0VYUEVDVEVEKQogCQkJaXBhdGhfZGJnKCJCdWc6IEV4cGVjdGVkIFRJRCwgb3Bjb2RlICV4OyBpZ25vcmVkXG4iLAotCQkJCSAgYmUzMl90b19jcHUoaGRyLT5idGhbMF0pICYgMHhmZik7CisJCQkJICBiZTMyX3RvX2NwdShoZHItPmJ0aFswXSkgPj4gMjQpOwogCQllbHNlIHsKIAkJCS8qCiAJCQkgKiBlcnJvciBwYWNrZXQsIHR5cGUgb2YgZXJyb3IgdW5rbm93bi4KIAkJCSAqIFByb2JhYmx5IHR5cGUgMywgYnV0IHdlIGRvbid0IGtub3csIHNvIGRvbid0CiAJCQkgKiBldmVuIHRyeSB0byBwcmludCB0aGUgb3Bjb2RlLCBldGMuCisJCQkgKiBVc3VhbGx5IGNhdXNlZCBieSBhICJiYWQgcGFja2V0IiwgdGhhdCBoYXMgbm8KKwkJCSAqIEJUSCwgd2hlbiB0aGUgTFJIIHNheXMgaXQgc2hvdWxkLgogCQkJICovCi0JCQlpcGF0aF9kYmcoIkVycm9yIFBrdCwgYnV0IG5vIGVmbGFncyEgZWdyYnVmICV4LCAiCi0JCQkJICAibGVuICV4XG5oZHJxQCVseDtoZHJxKyV4IHJoZjogJWxseDsgIgotCQkJCSAgImhkciAlbGx4ICVsbHggJWxseCAlbGx4ICVsbHhcbiIsCi0JCQkJICBldGFpbCwgdGxlbiwgKHVuc2lnbmVkIGxvbmcpIHJjLCBsLAotCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmNbMF0sCi0JCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSByY1sxXSwKLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJjWzJdLAotCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmNbM10sCi0JCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSByY1s0XSwKLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHJjWzVdKTsKKwkJCWlwYXRoX2NkYmcoRVJSUEtULCAiRXJyb3IgUGt0LCBidXQgbm8gZWZsYWdzISBlZ3JidWYiCisJCQkJICAiICV4LCBsZW4gJXggaGRycSsleCByaGY6ICVMeFxuIiwKKwkJCQkgIGV0YWlsLCB0bGVuLCBsLAorCQkJCSAgbGU2NF90b19jcHUoKihfX2xlNjQgKikgcmhmX2FkZHIpKTsKKwkJCWlmIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfRVJSUEtUREJHKSB7CisJCQkJdTMyIGosICpkLCBkdyA9IHJzaXplLTI7CisJCQkJaWYgKHJzaXplID4gKHRsZW4+PjIpKQorCQkJCQlkdyA9IHRsZW4+PjI7CisJCQkJZCA9ICh1MzIgKiloZHI7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkVQa3QgcmN2aGRyKCV4IGR3KTpcbiIsCisJCQkJCWR3KTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgZHc7IGorKykKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiU4eCVzIiwgZFtqXSwKKwkJCQkJCShqJTgpID09IDcgPyAiXG4iIDogIiAiKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiLlxuIik7CisJCQl9CiAJCX0KIAkJbCArPSByc2l6ZTsKIAkJaWYgKGwgPj0gbWF4Y250KQogCQkJbCA9IDA7Ci0JCWlmIChldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9FWFBFQ1RFRCkKLQkJICAgIHVwZGVnciA9IDE7CisJCXJoZl9hZGRyID0gKF9fbGUzMiAqKSBwZC0+cG9ydF9yY3ZoZHJxICsKKwkJCWwgKyBkZC0+aXBhdGhfcmhmX29mZnNldDsKKwkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX05PRE1BX1JUQUlMKSB7CisJCQl1MzIgc2VxID0gaXBhdGhfaGRyZ2V0X3NlcShyaGZfYWRkcik7CisKKwkJCWlmICgrK3BkLT5wb3J0X3NlcV9jbnQgPiAxMykKKwkJCQlwZC0+cG9ydF9zZXFfY250ID0gMTsKKwkJCWlmIChzZXEgIT0gcGQtPnBvcnRfc2VxX2NudCkKKwkJCQlsYXN0ID0gMTsKKwkJfSBlbHNlIGlmIChsID09IGhkcnF0YWlsKQorCQkJbGFzdCA9IDE7CiAJCS8qCiAJCSAqIHVwZGF0ZSBoZWFkIHJlZ3Mgb24gbGFzdCBwYWNrZXQsIGFuZCBldmVyeSAxNiBwYWNrZXRzLgogCQkgKiBSZWR1Y2UgYnVzIHRyYWZmaWMsIHdoaWxlIHN0aWxsIHRyeWluZyB0byBwcmV2ZW50CiAJCSAqIHJjdmhkcnEgb3ZlcmZsb3dzLCBmb3Igd2hlbiB0aGUgcXVldWUgaXMgbmVhcmx5IGZ1bGwKIAkJICovCi0JCWlmIChsID09IGhkcnF0YWlsIHx8IChpICYmICEoaSYweGYpKSkgewotCQkJdTY0IGx2YWw7Ci0JCQlpZiAobCA9PSBoZHJxdGFpbCkKLQkJCQkvKiByZXF1ZXN0IElCQTYxMjAgaW50ZXJydXB0IG9ubHkgb24gbGFzdCAqLwotCQkJCWx2YWwgPSBkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYgfCBsOwotCQkJZWxzZQotCQkJCWx2YWwgPSBsOwotCQkJKHZvaWQpaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwgbHZhbCwgMCk7CisJCWlmIChsYXN0IHx8ICEoaSAmIDB4ZikpIHsKKwkJCXU2NCBsdmFsID0gbDsKKworCQkJLyogcmVxdWVzdCBJQkE2MTIwIGFuZCA3MjIwIGludGVycnVwdCBvbmx5IG9uIGxhc3QgKi8KKwkJCWlmIChsYXN0KQorCQkJCWx2YWwgfD0gZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmOworCQkJaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwgbHZhbCwKKwkJCQlwZC0+cG9ydF9wb3J0KTsKIAkJCWlmICh1cGRlZ3IpIHsKLQkJCQkodm9pZClpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZlZ3JpbmRleGhlYWQsCi0JCQkJCQkgICAgICAgZXRhaWwsIDApOworCQkJCWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwKKwkJCQkJCSBldGFpbCwgcGQtPnBvcnRfcG9ydCk7CiAJCQkJdXBkZWdyID0gMDsKIAkJCX0KIAkJfQogCX0KIAotCWlmICghZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmICYmICFyZWxvb3ApIHsKKwlpZiAoIWRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZiAmJiAhcmVsb29wICYmCisJICAgICEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTk9ETUFfUlRBSUwpKSB7CiAJCS8qIElCQTYxMTAgd29ya2Fyb3VuZDsgd2UgY2FuIGhhdmUgYSByYWNlIGNsZWFyaW5nIGNoaXAKIAkJICogaW50ZXJydXB0IHdpdGggYW5vdGhlciBpbnRlcnJ1cHQgYWJvdXQgdG8gYmUgZGVsaXZlcmVkLAogCQkgKiBhbmQgY2FuIGNsZWFyIGl0IGJlZm9yZSBpdCBpcyBkZWxpdmVyZWQgb24gdGhlIEdQSU8KQEAgLTEzMDIsNyArMTM3Miw2IEBACiAJICogaGFwcGVucyB3aGVuIGFsbCBidWZmZXJzIGFyZSBpbiB1c2UsIHNvIG9ubHkgY3B1IG92ZXJoZWFkLCBub3QKIAkgKiBsYXRlbmN5IG9yIGJhbmR3aWR0aCBpcyBhZmZlY3RlZC4KIAkgKi8KLSNkZWZpbmUgX0lQQVRIX0FMTF9DSEVDS0JJVFMgMHg1NTU1NTU1NTU1NTU1NTU1VUxMCiAJaWYgKCFkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSkgewogCQlpcGF0aF9kYmcoIlVwZGF0ZSBzaGFkb3cgcGlvYXZhaWwsIGJ1dCByZWdzX2RtYSBOVUxMIVxuIik7CiAJCXJldHVybjsKQEAgLTEzNDcsNyArMTQxNiw3IEBACiAJCQlwaW92ID0gbGU2NF90b19jcHUoZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaSBeIDFdKTsKIAkJZWxzZQogCQkJcGlvdiA9IGxlNjRfdG9fY3B1KGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2ldKTsKLQkJcGNoZyA9IF9JUEFUSF9BTExfQ0hFQ0tCSVRTICYKKwkJcGNoZyA9IGRkLT5pcGF0aF9waW9hdmFpbGtlcm5lbFtpXSAmCiAJCQl+KGRkLT5pcGF0aF9waW9hdmFpbHNoYWRvd1tpXSBeIHBpb3YpOwogCQlwY2hidXN5ID0gcGNoZyA8PCBJTkZJTklQQVRIX1NFTkRQSU9BVkFJTF9CVVNZX1NISUZUOwogCQlpZiAocGNoZyAmJiAocGNoYnVzeSAmIGRkLT5pcGF0aF9waW9hdmFpbHNoYWRvd1tpXSkpIHsKQEAgLTEzOTgsMjcgKzE0NjcsNjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIGlwYXRoX2dldHBpb2J1ZiAtIGZpbmQgYW4gYXZhaWxhYmxlIHBpbyBidWZmZXIKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAcGJ1Zm51bTogdGhlIGJ1ZmZlciBudW1iZXIgaXMgcGxhY2VkIGhlcmUKKy8qCisgKiBkZWJ1Z2dpbmcgY29kZSBhbmQgc3RhdHMgdXBkYXRlcyBpZiBubyBwaW8gYnVmZmVycyBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBub2lubGluZSB2b2lkIG5vX3Bpb19idWZzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1bnNpZ25lZCBsb25nICpzaGFkb3cgPSBkZC0+aXBhdGhfcGlvYXZhaWxzaGFkb3c7CisJX19sZTY0ICpkbWEgPSAoX19sZTY0ICopZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWE7CisKKwlkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cgPSAxOworCisJLyoKKwkgKiBub3QgYXRvbWljLCBidXQgaWYgd2UgbG9zZSBhIHN0YXQgY291bnQgaW4gYSB3aGlsZSwgdGhhdCdzIE9LCisJICovCisJaXBhdGhfc3RhdHMuc3BzX25vcGlvYnVmcysrOworCWlmICghKCsrZGQtPmlwYXRoX2NvbnNlY19ub3Bpb2J1ZiAlIDEwMDAwMCkpIHsKKwkJaXBhdGhfZGJnKCIldSBwaW8gc2VuZHMgd2l0aCBubyBidWZhdmFpbDsgZG1hY29weTogIgorCQkJIiVsbHggJWxseCAlbGx4ICVsbHg7IHNoYWRvdzogICVseCAlbHggJWx4ICVseFxuIiwKKwkJCWRkLT5pcGF0aF9jb25zZWNfbm9waW9idWYsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbMF0pLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzFdKSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVsyXSksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbM10pLAorCQkJc2hhZG93WzBdLCBzaGFkb3dbMV0sIHNoYWRvd1syXSwgc2hhZG93WzNdKTsKKwkJLyoKKwkJICogNCBidWZmZXJzIHBlciBieXRlLCA0IHJlZ2lzdGVycyBhYm92ZSwgY292ZXIgcmVzdAorCQkgKiBiZWxvdworCQkgKi8KKwkJaWYgKChkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0aykgPgorCQkgICAgKHNpemVvZihzaGFkb3dbMF0pICogNCAqIDQpKQorCQkJaXBhdGhfZGJnKCIybmQgZ3JvdXA6IGRtYWNvcHk6ICVsbHggJWxseCAiCisJCQkJICAiJWxseCAlbGx4OyBzaGFkb3c6ICVseCAlbHggJWx4ICVseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZG1hWzRdKSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZG1hWzVdKSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZG1hWzZdKSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZG1hWzddKSwKKwkJCQkgIHNoYWRvd1s0XSwgc2hhZG93WzVdLCBzaGFkb3dbNl0sCisJCQkJICBzaGFkb3dbN10pOworCX0KK30KKworLyoKKyAqIGNvbW1vbiBjb2RlIGZvciBub3JtYWwgZHJpdmVyIHBpbyBidWZmZXIgYWxsb2NhdGlvbiwgYW5kIHJlc2VydmVkCisgKiBhbGxvY2F0aW9uLgogICoKICAqIGRvIGFwcHJvcHJpYXRlIG1hcmtpbmcgYXMgYnVzeSwgZXRjLgogICogcmV0dXJucyBidWZmZXIgbnVtYmVyIGlmIG9uZSBmb3VuZCAoPj0wKSwgbmVnYXRpdmUgbnVtYmVyIGlzIGVycm9yLgotICogVXNlZCBieSBpcGF0aF9sYXllcl9zZW5kCiAgKi8KLXUzMiBfX2lvbWVtICppcGF0aF9nZXRwaW9idWYoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgKiBwYnVmbnVtKQorc3RhdGljIHUzMiBfX2lvbWVtICppcGF0aF9nZXRwaW9idWZfcmFuZ2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCXUzMiAqcGJ1Zm51bSwgdTMyIGZpcnN0LCB1MzIgbGFzdCwgdTMyIGZpcnN0aSkKIHsKLQlpbnQgaSwgaiwgc3RhcnRpLCB1cGRhdGVkID0gMDsKLQl1bnNpZ25lZCBwaW9iY250LCBpdGVyOworCWludCBpLCBqLCB1cGRhdGVkID0gMDsKKwl1bnNpZ25lZCBwaW9iY250OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyAqc2hhZG93ID0gZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93OwogCXUzMiBfX2lvbWVtICpidWY7CiAKLQlwaW9iY250ID0gKHVuc2lnbmVkKShkZC0+aXBhdGhfcGlvYmNudDJrCi0JCQkgICAgICsgZGQtPmlwYXRoX3Bpb2JjbnQ0ayk7Ci0Jc3RhcnRpID0gZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1ZjsKLQlpdGVyID0gcGlvYmNudCAtIHN0YXJ0aTsKKwlwaW9iY250ID0gbGFzdCAtIGZpcnN0OwogCWlmIChkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cpIHsKIAkJLyoKIAkJICogTWlub3Igb3B0aW1pemF0aW9uLiAgSWYgd2UgaGFkIG5vIGJ1ZmZlcnMgb24gbGFzdCBjYWxsLApAQCAtMTQyNiwxMiArMTUzMSwxMCBAQAogCQkgKiBpZiBubyBidWZmZXJzIHdlcmUgdXBkYXRlZCwgdG8gYmUgcGFyYW5vaWQKIAkJICovCiAJCWlwYXRoX3VwZGF0ZV9waW9fYnVmcyhkZCk7Ci0JCS8qIHdlIHNjYW5uZWQgaGVyZSwgZG9uJ3QgZG8gaXQgYXQgZW5kIG9mIHNjYW4gKi8KLQkJdXBkYXRlZCA9IDE7Ci0JCWkgPSBzdGFydGk7CisJCXVwZGF0ZWQrKzsKKwkJaSA9IGZpcnN0OwogCX0gZWxzZQotCQlpID0gZGQtPmlwYXRoX2xhc3RwaW9pbmRleDsKLQorCQlpID0gZmlyc3RpOwogcmVzY2FuOgogCS8qCiAJICogd2hpbGUgdGVzdF9hbmRfc2V0X2JpdCgpIGlzIGF0b21pYywgd2UgZG8gdGhhdCBhbmQgdGhlbiB0aGUKQEAgLTE0MzksMTA0ICsxNTQyLDE0MSBAQAogCSAqIG9mIHRoZSByZW1haW5pbmcgYXJtbGF1bmNoIGVycm9ycy4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfcGlvYXZhaWxfbG9jaywgZmxhZ3MpOwotCWZvciAoaiA9IDA7IGogPCBpdGVyOyBqKyssIGkrKykgewotCQlpZiAoaSA+PSBwaW9iY250KQotCQkJaSA9IHN0YXJ0aTsKLQkJLyoKLQkJICogVG8gYXZvaWQgYnVzIGxvY2sgb3ZlcmhlYWQsIHdlIGZpcnN0IGZpbmQgYSBjYW5kaWRhdGUKLQkJICogYnVmZmVyLCB0aGVuIGRvIHRoZSB0ZXN0IGFuZCBzZXQsIGFuZCBjb250aW51ZSBpZiB0aGF0Ci0JCSAqIGZhaWxzLgotCQkgKi8KLQkJaWYgKHRlc3RfYml0KCgyICogaSkgKyAxLCBzaGFkb3cpIHx8Ci0JCSAgICB0ZXN0X2FuZF9zZXRfYml0KCgyICogaSkgKyAxLCBzaGFkb3cpKQorCWZvciAoaiA9IDA7IGogPCBwaW9iY250OyBqKyssIGkrKykgeworCQlpZiAoaSA+PSBsYXN0KQorCQkJaSA9IGZpcnN0OworCQlpZiAoX190ZXN0X2FuZF9zZXRfYml0KCgyICogaSkgKyAxLCBzaGFkb3cpKQogCQkJY29udGludWU7CiAJCS8qIGZsaXAgZ2VuZXJhdGlvbiBiaXQgKi8KLQkJY2hhbmdlX2JpdCgyICogaSwgc2hhZG93KTsKKwkJX19jaGFuZ2VfYml0KDIgKiBpLCBzaGFkb3cpOwogCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfcGlvYXZhaWxfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGogPT0gaXRlcikgewotCQl2b2xhdGlsZSBfX2xlNjQgKmRtYSA9IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hOwotCi0JCS8qCi0JCSAqIGZpcnN0IHRpbWUgdGhyb3VnaDsgc2hhZG93IGV4aGF1c3RlZCwgYnV0IG1heSBiZSByZWFsCi0JCSAqIGJ1ZmZlcnMgYXZhaWxhYmxlLCBzbyBnbyBzZWU7IGlmIGFueSB1cGRhdGVkLCByZXNjYW4KLQkJICogKG9uY2UpCi0JCSAqLworCWlmIChqID09IHBpb2JjbnQpIHsKIAkJaWYgKCF1cGRhdGVkKSB7CisJCQkvKgorCQkJICogZmlyc3QgdGltZSB0aHJvdWdoOyBzaGFkb3cgZXhoYXVzdGVkLCBidXQgbWF5IGJlCisJCQkgKiBidWZmZXJzIGF2YWlsYWJsZSwgdHJ5IGFuIHVwZGF0ZSBhbmQgdGhlbiByZXNjYW4uCisJCQkgKi8KIAkJCWlwYXRoX3VwZGF0ZV9waW9fYnVmcyhkZCk7Ci0JCQl1cGRhdGVkID0gMTsKLQkJCWkgPSBzdGFydGk7CisJCQl1cGRhdGVkKys7CisJCQlpID0gZmlyc3Q7CisJCQlnb3RvIHJlc2NhbjsKKwkJfSBlbHNlIGlmICh1cGRhdGVkID09IDEgJiYgcGlvYmNudCA8PQorCQkJKChkZC0+aXBhdGhfc2VuZGN0cmwKKwkJCT4+IElORklOSVBBVEhfU19VUERUSFJFU0hfU0hJRlQpICYKKwkJCUlORklOSVBBVEhfU19VUERUSFJFU0hfTUFTSykpIHsKKwkJCS8qCisJCQkgKiBmb3IgY2hpcHMgc3VwcG9ydGluZyBhbmQgdXNpbmcgdGhlIHVwZGF0ZQorCQkJICogdGhyZXNob2xkIHdlIG5lZWQgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZQorCQkJICogaW4tbWVtb3J5IGNvcHkgaWYgdGhlIGNvdW50IGlzIGxlc3MgdGhhbiB0aGUKKwkJCSAqIHRoZXJzaG9sZCwgdGhlbiBjaGVjayBvbmUgbW9yZSB0aW1lLgorCQkJICovCisJCQlpcGF0aF9mb3JjZV9waW9fYXZhaWxfdXBkYXRlKGRkKTsKKwkJCWlwYXRoX3VwZGF0ZV9waW9fYnVmcyhkZCk7CisJCQl1cGRhdGVkKys7CisJCQlpID0gZmlyc3Q7CiAJCQlnb3RvIHJlc2NhbjsKIAkJfQotCQlkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cgPSAxOwotCQkvKgotCQkgKiBub3QgYXRvbWljLCBidXQgaWYgd2UgbG9zZSBvbmUgb25jZSBpbiBhIHdoaWxlLCB0aGF0J3MgT0sKLQkJICovCi0JCWlwYXRoX3N0YXRzLnNwc19ub3Bpb2J1ZnMrKzsKLQkJaWYgKCEoKytkZC0+aXBhdGhfY29uc2VjX25vcGlvYnVmICUgMTAwMDAwKSkgewotCQkJaXBhdGhfZGJnKAotCQkJCSIldSBwaW8gc2VuZHMgd2l0aCBubyBidWZhdmFpbDsgZG1hY29weTogIgotCQkJCSIlbGx4ICVsbHggJWxseCAlbGx4OyBzaGFkb3c6ICAiCi0JCQkJIiVseCAlbHggJWx4ICVseFxuIiwKLQkJCQlkZC0+aXBhdGhfY29uc2VjX25vcGlvYnVmLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVswXSksCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoZG1hWzFdKSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShkbWFbMl0pLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGRtYVszXSksCi0JCQkJc2hhZG93WzBdLCBzaGFkb3dbMV0sIHNoYWRvd1syXSwKLQkJCQlzaGFkb3dbM10pOwotCQkJLyoKLQkJCSAqIDQgYnVmZmVycyBwZXIgYnl0ZSwgNCByZWdpc3RlcnMgYWJvdmUsIGNvdmVyIHJlc3QKLQkJCSAqIGJlbG93Ci0JCQkgKi8KLQkJCWlmICgoZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGspID4KLQkJCSAgICAoc2l6ZW9mKHNoYWRvd1swXSkgKiA0ICogNCkpCi0JCQkJaXBhdGhfZGJnKCIybmQgZ3JvdXA6IGRtYWNvcHk6ICVsbHggJWxseCAiCi0JCQkJCSAgIiVsbHggJWxseDsgc2hhZG93OiAlbHggJWx4ICIKLQkJCQkJICAiJWx4ICVseFxuIiwKLQkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCQkgIGxlNjRfdG9fY3B1KGRtYVs0XSksCi0JCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkJICBsZTY0X3RvX2NwdShkbWFbNV0pLAotCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJCSAgbGU2NF90b19jcHUoZG1hWzZdKSwKLQkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCQkgIGxlNjRfdG9fY3B1KGRtYVs3XSksCi0JCQkJCSAgc2hhZG93WzRdLCBzaGFkb3dbNV0sCi0JCQkJCSAgc2hhZG93WzZdLCBzaGFkb3dbN10pOwotCQl9CisKKwkJbm9fcGlvX2J1ZnMoZGQpOwogCQlidWYgPSBOVUxMOwotCQlnb3RvIGJhaWw7CisJfSBlbHNlIHsKKwkJaWYgKGkgPCBkZC0+aXBhdGhfcGlvYmNudDJrKQorCQkJYnVmID0gKHUzMiBfX2lvbWVtICopIChkZC0+aXBhdGhfcGlvMmtiYXNlICsKKwkJCQkJICAgICAgIGkgKiBkZC0+aXBhdGhfcGFsaWduKTsKKwkJZWxzZQorCQkJYnVmID0gKHUzMiBfX2lvbWVtICopCisJCQkJKGRkLT5pcGF0aF9waW80a2Jhc2UgKworCQkJCSAoaSAtIGRkLT5pcGF0aF9waW9iY250MmspICogZGQtPmlwYXRoXzRrYWxpZ24pOworCQlpZiAocGJ1Zm51bSkKKwkJCSpwYnVmbnVtID0gaTsKIAl9CiAKLQkvKgotCSAqIHNldCBuZXh0IHN0YXJ0aW5nIHBsYWNlLiAgU2luY2UgaXQncyBqdXN0IGFuIG9wdGltaXphdGlvbiwKLQkgKiBpdCBkb2Vzbid0IG1hdHRlciB3aG8gd2lucyBvbiB0aGlzLCBzbyBubyBsb2NraW5nCi0JICovCi0JZGQtPmlwYXRoX2xhc3RwaW9pbmRleCA9IGkgKyAxOwotCWlmIChkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cpCi0JCWRkLT5pcGF0aF91cGRfcGlvX3NoYWRvdyA9IDA7Ci0JaWYgKGRkLT5pcGF0aF9jb25zZWNfbm9waW9idWYpCi0JCWRkLT5pcGF0aF9jb25zZWNfbm9waW9idWYgPSAwOwotCWlmIChpIDwgZGQtPmlwYXRoX3Bpb2JjbnQyaykKLQkJYnVmID0gKHUzMiBfX2lvbWVtICopIChkZC0+aXBhdGhfcGlvMmtiYXNlICsKLQkJCQkgICAgICAgaSAqIGRkLT5pcGF0aF9wYWxpZ24pOwotCWVsc2UKLQkJYnVmID0gKHUzMiBfX2lvbWVtICopCi0JCQkoZGQtPmlwYXRoX3BpbzRrYmFzZSArCi0JCQkgKGkgLSBkZC0+aXBhdGhfcGlvYmNudDJrKSAqIGRkLT5pcGF0aF80a2FsaWduKTsKLQlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZXR1cm4gcGlvYnVmJXUgJXVrIEAgJXBcbiIsCi0JCSAgIGksIChpIDwgZGQtPmlwYXRoX3Bpb2JjbnQyaykgPyAyIDogNCwgYnVmKTsKLQlpZiAocGJ1Zm51bSkKLQkJKnBidWZudW0gPSBpOwotCi1iYWlsOgogCXJldHVybiBidWY7CiB9CiAKIC8qKgorICogaXBhdGhfZ2V0cGlvYnVmIC0gZmluZCBhbiBhdmFpbGFibGUgcGlvIGJ1ZmZlcgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwbGVuOiB0aGUgc2l6ZSBvZiB0aGUgUElPIGJ1ZmZlciBuZWVkZWQgaW4gMzItYml0IHdvcmRzCisgKiBAcGJ1Zm51bTogdGhlIGJ1ZmZlciBudW1iZXIgaXMgcGxhY2VkIGhlcmUKKyAqLwordTMyIF9faW9tZW0gKmlwYXRoX2dldHBpb2J1ZihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBwbGVuLCB1MzIgKnBidWZudW0pCit7CisJdTMyIF9faW9tZW0gKmJ1ZjsKKwl1MzIgcG51bSwgbmJ1ZnM7CisJdTMyIGZpcnN0LCBsYXN0aTsKKworCWlmIChwbGVuICsgMSA+PSBJUEFUSF9TTUFMTEJVRl9EV09SRFMpIHsKKwkJZmlyc3QgPSBkZC0+aXBhdGhfcGlvYmNudDJrOworCQlsYXN0aSA9IGRkLT5pcGF0aF9sYXN0cGlvaW5kZXhsOworCX0gZWxzZSB7CisJCWZpcnN0ID0gMDsKKwkJbGFzdGkgPSBkZC0+aXBhdGhfbGFzdHBpb2luZGV4OworCX0KKwluYnVmcyA9IGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrOworCWJ1ZiA9IGlwYXRoX2dldHBpb2J1Zl9yYW5nZShkZCwgJnBudW0sIGZpcnN0LCBuYnVmcywgbGFzdGkpOworCisJaWYgKGJ1ZikgeworCQkvKgorCQkgKiBTZXQgbmV4dCBzdGFydGluZyBwbGFjZS4gIEl0J3MganVzdCBhbiBvcHRpbWl6YXRpb24sCisJCSAqIGl0IGRvZXNuJ3QgbWF0dGVyIHdobyB3aW5zIG9uIHRoaXMsIHNvIG5vIGxvY2tpbmcKKwkJICovCisJCWlmIChwbGVuICsgMSA+PSBJUEFUSF9TTUFMTEJVRl9EV09SRFMpCisJCQlkZC0+aXBhdGhfbGFzdHBpb2luZGV4bCA9IHBudW0gKyAxOworCQllbHNlCisJCQlkZC0+aXBhdGhfbGFzdHBpb2luZGV4ID0gcG51bSArIDE7CisJCWlmIChkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cpCisJCQlkZC0+aXBhdGhfdXBkX3Bpb19zaGFkb3cgPSAwOworCQlpZiAoZGQtPmlwYXRoX2NvbnNlY19ub3Bpb2J1ZikKKwkJCWRkLT5pcGF0aF9jb25zZWNfbm9waW9idWYgPSAwOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZXR1cm4gcGlvYnVmJXUgJXVrIEAgJXBcbiIsCisJCQkgICBwbnVtLCAocG51bSA8IGRkLT5pcGF0aF9waW9iY250MmspID8gMiA6IDQsIGJ1Zik7CisJCWlmIChwYnVmbnVtKQorCQkJKnBidWZudW0gPSBwbnVtOworCisJfQorCXJldHVybiBidWY7Cit9CisKKy8qKgorICogaXBhdGhfY2hnX3Bpb2F2YWlsa2VybmVsIC0gY2hhbmdlIHdoaWNoIHNlbmQgYnVmZmVycyBhcmUgYXZhaWxhYmxlIGZvciBrZXJuZWwKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAc3RhcnQ6IHRoZSBzdGFydGluZyBzZW5kIGJ1ZmZlciBudW1iZXIKKyAqIEBsZW46IHRoZSBudW1iZXIgb2Ygc2VuZCBidWZmZXJzCisgKiBAYXZhaWw6IHRydWUgaWYgdGhlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZSBmb3Iga2VybmVsIHVzZSwgZmFsc2Ugb3RoZXJ3aXNlCisgKi8KK3ZvaWQgaXBhdGhfY2hnX3Bpb2F2YWlsa2VybmVsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgc3RhcnQsCisJCQkgICAgICB1bnNpZ25lZCBsZW4sIGludCBhdmFpbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGVuZDsKKworCS8qIFRoZXJlIGFyZSB0d28gYml0cyBwZXIgc2VuZCBidWZmZXIgKGJ1c3kgYW5kIGdlbmVyYXRpb24pICovCisJc3RhcnQgKj0gMjsKKwlsZW4gKj0gMjsKKwllbmQgPSBzdGFydCArIGxlbjsKKworCS8qIFNldCBvciBjbGVhciB0aGUgZ2VuZXJhdGlvbiBiaXRzLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9waW9hdmFpbF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCWlmIChhdmFpbCkgeworCQkJX19jbGVhcl9iaXQoc3RhcnQgKyBJTkZJTklQQVRIX1NFTkRQSU9BVkFJTF9CVVNZX1NISUZULAorCQkJCWRkLT5pcGF0aF9waW9hdmFpbHNoYWRvdyk7CisJCQlfX3NldF9iaXQoc3RhcnQsIGRkLT5pcGF0aF9waW9hdmFpbGtlcm5lbCk7CisJCX0gZWxzZSB7CisJCQlfX3NldF9iaXQoc3RhcnQgKyBJTkZJTklQQVRIX1NFTkRQSU9BVkFJTF9CVVNZX1NISUZULAorCQkJCWRkLT5pcGF0aF9waW9hdmFpbHNoYWRvdyk7CisJCQlfX2NsZWFyX2JpdChzdGFydCwgZGQtPmlwYXRoX3Bpb2F2YWlsa2VybmVsKTsKKwkJfQorCQlzdGFydCArPSAyOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9waW9hdmFpbF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgogICogaXBhdGhfY3JlYXRlX3JjdmhkcnEgLSBjcmVhdGUgYSByZWNlaXZlIGhlYWRlciBxdWV1ZQogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKICAqIEBwZDogdGhlIHBvcnQgZGF0YQpAQCAtMTU2NywxOSArMTcwNywyNyBAQAogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gYmFpbDsKIAkJfQotCQlwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgKLQkJCSZkZC0+cGNpZGV2LT5kZXYsIFBBR0VfU0laRSwgJnBoeXNfaGRycXRhaWwsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyKSB7Ci0JCQlpcGF0aF9kZXZfZXJyKGRkLCAiYXR0ZW1wdCB0byBhbGxvY2F0ZSAxIHBhZ2UgIgotCQkJCSAgICAgICJmb3IgcG9ydCAldSByY3ZoZHJxdGFpbGFkZHIgZmFpbGVkXG4iLAotCQkJCSAgICAgIHBkLT5wb3J0X3BvcnQpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIGFtdCwKLQkJCQkJICBwZC0+cG9ydF9yY3ZoZHJxLCBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMpOwotCQkJcGQtPnBvcnRfcmN2aGRycSA9IE5VTEw7Ci0JCQlnb3RvIGJhaWw7CisKKwkJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTk9ETUFfUlRBSUwpKSB7CisJCQlwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgKKwkJCQkmZGQtPnBjaWRldi0+ZGV2LCBQQUdFX1NJWkUsICZwaHlzX2hkcnF0YWlsLAorCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKCFwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkcikgeworCQkJCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIGFsbG9jYXRlIDEgcGFnZSAiCisJCQkJCSJmb3IgcG9ydCAldSByY3ZoZHJxdGFpbGFkZHIgIgorCQkJCQkiZmFpbGVkXG4iLCBwZC0+cG9ydF9wb3J0KTsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIGFtdCwKKwkJCQkJcGQtPnBvcnRfcmN2aGRycSwKKwkJCQkJcGQtPnBvcnRfcmN2aGRycV9waHlzKTsKKwkJCQlwZC0+cG9ydF9yY3ZoZHJxID0gTlVMTDsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQlwZC0+cG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5cyA9IHBoeXNfaGRycXRhaWw7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJwb3J0ICVkIGhkcnRhaWxhZGRyLCAlbGx4ICIKKwkJCQkgICAicGh5c2ljYWxcbiIsIHBkLT5wb3J0X3BvcnQsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c19oZHJxdGFpbCk7CiAJCX0KLQkJcGQtPnBvcnRfcmN2aGRycXRhaWxhZGRyX3BoeXMgPSBwaHlzX2hkcnF0YWlsOwogCiAJCXBkLT5wb3J0X3JjdmhkcnFfc2l6ZSA9IGFtdDsKIApAQCAtMTU4OSwxMCArMTczNyw2IEBACiAJCQkgICAodW5zaWduZWQgbG9uZykgcGQtPnBvcnRfcmN2aGRycV9waHlzLAogCQkJICAgKHVuc2lnbmVkIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSwKIAkJCSAgIHBkLT5wb3J0X3BvcnQpOwotCi0JCWlwYXRoX2NkYmcoVkVSQk9TRSwgInBvcnQgJWQgaGRydGFpbGFkZHIsICVsbHggcGh5c2ljYWxcbiIsCi0JCQkgICBwZC0+cG9ydF9wb3J0LAotCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c19oZHJxdGFpbCk7CiAJfQogCWVsc2UKIAkJaXBhdGhfY2RiZyhWRVJCT1NFLCAicmV1c2UgcG9ydCAlZCByY3ZoZHJxIEAlcCAlbGx4IHBoeXM7ICIKQEAgLTE2MTYsNyArMTc2MCw2IEBACiAJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmFkZHIsCiAJCQkgICAgICBwZC0+cG9ydF9wb3J0LCBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMpOwogCi0JcmV0ID0gMDsKIGJhaWw6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2MzMsNTIgKzE3NzYsMTQ5IEBACiAgKi8KIHZvaWQgaXBhdGhfY2FuY2VsX3NlbmRzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHJlc3RvcmVfc2VuZGN0cmwpCiB7Ci0JaXBhdGhfZGJnKCJDYW5jZWxsaW5nIGFsbCBpbi1wcm9ncmVzcyBzZW5kIGJ1ZmZlcnNcbiIpOwotCWRkLT5pcGF0aF9sYXN0Y2FuY2VsID0gamlmZmllcytIWi8yOyAvKiBza2lwIGFybWxhdW5jaCBlcnJzIGEgYml0ICovCi0JLyoKLQkgKiB0aGUgYWJvcnQgYml0IGlzIGF1dG8tY2xlYXJpbmcuICBXZSByZWFkIHNjcmF0Y2ggdG8gYmUgc3VyZQotCSAqIHRoYXQgY2FuY2VscyBhbmQgdGhlIGFib3J0IGhhdmUgdGFrZW4gZWZmZWN0IGluIHRoZSBjaGlwLgotCSAqLwotCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCi0JCUlORklOSVBBVEhfU19BQk9SVCk7Ci0JaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7Ci0JaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoZGQsIDAsCi0JCSh1bnNpZ25lZCkoZGQtPmlwYXRoX3Bpb2JjbnQyayArIGRkLT5pcGF0aF9waW9iY250NGspKTsKLQlpZiAocmVzdG9yZV9zZW5kY3RybCkgLyogZWxzZSBkb25lIGJ5IGNhbGxlciBsYXRlciAqLwotCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAotCQkJCSBkZC0+aXBhdGhfc2VuZGN0cmwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBhbmQgYWdhaW4sIGJlIHN1cmUgYWxsIGhhdmUgaGl0IHRoZSBjaGlwICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIklnbm9yZSB3aGlsZSBpbiBhdXRvbmVnb3RpYXRpb25cbiIpOworCQlnb3RvIGJhaWw7CisJfQorCS8qCisJICogSWYgd2UgaGF2ZSBTRE1BLCBhbmQgaXQncyBub3QgZGlzYWJsZWQsIHdlIGhhdmUgdG8ga2ljayBvZmYgdGhlCisJICogYWJvcnQgc3RhdGUgbWFjaGluZSwgcHJvdmlkZWQgd2UgYXJlbid0IGFscmVhZHkgYWJvcnRpbmcuCisJICogSWYgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGFib3J0aW5nIFNETUEgKCFESVNBQkxFRCwgYnV0IEFCT1JUSU5HKSwKKwkgKiB3ZSBza2lwIHRoZSByZXN0IG9mIHRoaXMgcm91dGluZS4gSXQgaXMgYWxyZWFkeSAiaW4gcHJvZ3Jlc3MiCisJICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0hBU19TRU5EX0RNQSkgeworCQlpbnQgc2tpcF9jYW5jZWw7CisJCXU2NCAqc3RhdHAgPSAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisJCXNraXBfY2FuY2VsID0KKwkJCSF0ZXN0X2JpdChJUEFUSF9TRE1BX0RJU0FCTEVELCBzdGF0cCkgJiYKKwkJCXRlc3RfYW5kX3NldF9iaXQoSVBBVEhfU0RNQV9BQk9SVElORywgc3RhdHApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisJCWlmIChza2lwX2NhbmNlbCkKKwkJCWdvdG8gYmFpbDsKKwl9CisKKwlpcGF0aF9kYmcoIkNhbmNlbGxpbmcgYWxsIGluLXByb2dyZXNzIHNlbmQgYnVmZmVyc1xuIik7CisKKwkvKiBza2lwIGFybWxhdW5jaCBlcnJzIGZvciBhIHdoaWxlICovCisJZGQtPmlwYXRoX2xhc3RjYW5jZWwgPSBqaWZmaWVzICsgSFogLyAyOworCisJLyoKKwkgKiBUaGUgYWJvcnQgYml0IGlzIGF1dG8tY2xlYXJpbmcuICBXZSBhbHNvIGRvbid0IHdhbnQgcGlvYXZhaWwKKwkgKiB1cGRhdGUgaGFwcGVuaW5nIGR1cmluZyB0aGlzLCBhbmQgd2UgZG9uJ3Qgd2FudCBhbnkgb3RoZXIKKwkgKiBzZW5kcyBnb2luZyBvdXQsIHNvIHR1cm4gdGhvc2Ugb2ZmIGZvciB0aGUgZHVyYXRpb24uICBXZSByZWFkCisJICogdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgdG8gYmUgc3VyZSB0aGF0IGNhbmNlbHMgYW5kIHRoZSBhYm9ydAorCSAqIGhhdmUgdGFrZW4gZWZmZWN0IGluIHRoZSBjaGlwLiAgT3RoZXJ3aXNlIHR3byBwYXJ0cyBhcmUgc2FtZQorCSAqIGFzIGlwYXRoX2ZvcmNlX3Bpb19hdmFpbF91cGRhdGUoKQorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCWRkLT5pcGF0aF9zZW5kY3RybCAmPSB+KElORklOSVBBVEhfU19QSU9CVUZBVkFJTFVQRAorCQl8IElORklOSVBBVEhfU19QSU9FTkFCTEUpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCWRkLT5pcGF0aF9zZW5kY3RybCB8IElORklOSVBBVEhfU19BQk9SVCk7CiAJaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKKworCS8qIGRpc2FybSBhbGwgc2VuZCBidWZmZXJzICovCisJaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoZGQsIDAsCisJCWRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrKTsKKworCWlmIChyZXN0b3JlX3NlbmRjdHJsKSB7CisJCS8qIGVsc2UgZG9uZSBieSBjYWxsZXIgbGF0ZXIgaWYgbmVlZGVkICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCQlkZC0+aXBhdGhfc2VuZGN0cmwgfD0gSU5GSU5JUEFUSF9TX1BJT0JVRkFWQUlMVVBEIHwKKwkJCUlORklOSVBBVEhfU19QSU9FTkFCTEU7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQlkZC0+aXBhdGhfc2VuZGN0cmwpOworCQkvKiBhbmQgYWdhaW4sIGJlIHN1cmUgYWxsIGhhdmUgaGl0IHRoZSBjaGlwICovCisJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCX0KKworCWlmICgoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSEFTX1NFTkRfRE1BKSAmJgorCSAgICAhdGVzdF9iaXQoSVBBVEhfU0RNQV9ESVNBQkxFRCwgJmRkLT5pcGF0aF9zZG1hX3N0YXR1cykgJiYKKwkgICAgdGVzdF9iaXQoSVBBVEhfU0RNQV9SVU5OSU5HLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCQkvKiBvbmx5IHdhaXQgc28gbG9uZyBmb3IgaW50ciAqLworCQlkZC0+aXBhdGhfc2RtYV9hYm9ydF9pbnRyX3RpbWVvdXQgPSBqaWZmaWVzICsgSFo7CisJCWRkLT5pcGF0aF9zZG1hX3Jlc2V0X3dhaXQgPSAyMDA7CisJCV9fc2V0X2JpdChJUEFUSF9TRE1BX0RJU0FSTUVELCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKTsKKwkJaWYgKCF0ZXN0X2JpdChJUEFUSF9TRE1BX1NIVVRET1dOLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKSkKKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmRkLT5pcGF0aF9zZG1hX2Fib3J0X3Rhc2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisJfQorYmFpbDo7CiB9CiAKLQotc3RhdGljIHZvaWQgaXBhdGhfc2V0X2liX2xzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB3aGljaCkKKy8qCisgKiBGb3JjZSBhbiB1cGRhdGUgb2YgaW4tbWVtb3J5IGNvcHkgb2YgdGhlIHBpb2F2YWlsIHJlZ2lzdGVycywgd2hlbgorICogbmVlZGVkIGZvciBhbnkgb2YgYSB2YXJpZXR5IG9mIHJlYXNvbnMuICBXZSByZWFkIHRoZSBzY3JhdGNoIHJlZ2lzdGVyCisgKiB0byBtYWtlIGl0IGhpZ2hseSBsaWtlbHkgdGhhdCB0aGUgdXBkYXRlIHdpbGwgaGF2ZSBoYXBwZW5lZCBieSB0aGUKKyAqIHRpbWUgd2UgcmV0dXJuLiAgSWYgYWxyZWFkeSBvZmYgKGFzIGluIGNhbmNlbF9zZW5kcyBhYm92ZSksIHRoaXMKKyAqIHJvdXRpbmUgaXMgYSBub3AsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGNhbGxlciB3aWxsICJkbyB0aGUKKyAqIHJpZ2h0IHRoaW5nIi4KKyAqLwordm9pZCBpcGF0aF9mb3JjZV9waW9fYXZhaWxfdXBkYXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7CisJaWYgKGRkLT5pcGF0aF9zZW5kY3RybCAmIElORklOSVBBVEhfU19QSU9CVUZBVkFJTFVQRCkgeworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJZGQtPmlwYXRoX3NlbmRjdHJsICYgfklORklOSVBBVEhfU19QSU9CVUZBVkFJTFVQRCk7CisJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJZGQtPmlwYXRoX3NlbmRjdHJsKTsKKwkJaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX3NldF9pYl9sc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgbGlua2NtZCwKKwkJCQlpbnQgbGluaXRjbWQpCit7CisJdTY0IG1vZF93ZDsKIAlzdGF0aWMgY29uc3QgY2hhciAqd2hhdFs0XSA9IHsKLQkJWzBdID0gIkRPV04iLAotCQlbSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfSU5JVF0gPSAiSU5JVCIsCisJCVswXSA9ICJOT1AiLAorCQlbSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfRE9XTl0gPSAiRE9XTiIsCiAJCVtJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BUk1FRF0gPSAiQVJNRUQiLAogCQlbSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQUNUSVZFXSA9ICJBQ1RJVkUiCiAJfTsKLQlpbnQgbGlua2NtZCA9ICh3aGljaCA+PiBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCkgJgotCQkJSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfTUFTSzsKIAotCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlRyeWluZyB0byBtb3ZlIHVuaXQgJXUgdG8gJXMsIGN1cnJlbnQgbHRzdGF0ZSAiCi0JCSAgICJpcyAlc1xuIiwgZGQtPmlwYXRoX3VuaXQsCi0JCSAgIHdoYXRbbGlua2NtZF0sCi0JCSAgIGlwYXRoX2liY3N0YXR1c19zdHJbCi0JCQkgICAoaXBhdGhfcmVhZF9rcmVnNjQKLQkJCSAgICAoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjc3RhdHVzKSA+PgotCQkJICAgIElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkgJgotCQkJICAgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0tdKTsKLQkvKiBmbHVzaCBhbGwgcXVldWVkIHNlbmRzIHdoZW4gZ29pbmcgdG8gRE9XTiBvciBJTklULCB0byBiZSBzdXJlIHRoYXQKLQkgKiB0aGV5IGRvbid0IGJsb2NrIE1BRCBwYWNrZXRzICovCi0JaWYgKCFsaW5rY21kIHx8IGxpbmtjbWQgPT0gSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfSU5JVCkKLQkJaXBhdGhfY2FuY2VsX3NlbmRzKGRkLCAxKTsKKwlpZiAobGluaXRjbWQgPT0gSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUpIHsKKwkJLyoKKwkJICogSWYgd2UgYXJlIHRvbGQgdG8gZGlzYWJsZSwgbm90ZSB0aGF0IHNvIGxpbmstcmVjb3ZlcnkKKwkJICogY29kZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGJyaW5nIHVzIGJhY2sgdXAuCisJCSAqLworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0lCX0xJTktfRElTQUJMRUQ7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJfSBlbHNlIGlmIChsaW5pdGNtZCkgeworCQkvKgorCQkgKiBBbnkgb3RoZXIgbGlua2luaXRjbWQgd2lsbCBsZWFkIHRvIExJTktET1dOIGFuZCB0aGVuCisJCSAqIHRvIElOSVQgKGlmIGFsbCBpcyB3ZWxsKSwgc28gY2xlYXIgZmxhZyB0byBsZXQKKwkJICogbGluay1yZWNvdmVyeSBjb2RlIGF0dGVtcHQgdG8gYnJpbmcgdXMgYmFjayB1cC4KKwkJICovCisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfklQQVRIX0lCX0xJTktfRElTQUJMRUQ7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJfQorCisJbW9kX3dkID0gKGxpbmtjbWQgPDwgZGQtPmliY2NfbGNfc2hpZnQpIHwKKwkJKGxpbml0Y21kIDw8IElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLAorCQkiTW92aW5nIHVuaXQgJXUgdG8gJXMgKGluaXRjbWQ9MHgleCksIGN1cnJlbnQgbHRzdGF0ZSBpcyAlc1xuIiwKKwkJZGQtPmlwYXRoX3VuaXQsIHdoYXRbbGlua2NtZF0sIGxpbml0Y21kLAorCQlpcGF0aF9pYmNzdGF0dXNfc3RyW2lwYXRoX2liX2xpbmt0cnN0YXRlKGRkLAorCQkJaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjc3RhdHVzKSldKTsKIAogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjY3RybCwKLQkJCSBkZC0+aXBhdGhfaWJjY3RybCB8IHdoaWNoKTsKKwkJCSBkZC0+aXBhdGhfaWJjY3RybCB8IG1vZF93ZCk7CisJLyogcmVhZCBmcm9tIGNoaXAgc28gd3JpdGUgaXMgZmx1c2hlZCAqLworCSh2b2lkKSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpOwogfQogCiBpbnQgaXBhdGhfc2V0X2xpbmtzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IG5ld3N0YXRlKQpAQCAtMTY4NywzOCArMTkyNywzMyBAQAogCWludCByZXQ7CiAKIAlzd2l0Y2ggKG5ld3N0YXRlKSB7CisJY2FzZSBJUEFUSF9JQl9MSU5LRE9XTl9PTkxZOgorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9ET1dOLCAwKTsKKwkJLyogZG9uJ3Qgd2FpdCAqLworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisKIAljYXNlIElQQVRIX0lCX0xJTktET1dOOgotCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfUE9MTCA8PAotCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOworCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9ET1dOLAorCQkJCQlJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfUE9MTCk7CiAJCS8qIGRvbid0IHdhaXQgKi8KIAkJcmV0ID0gMDsKIAkJZ290byBiYWlsOwogCiAJY2FzZSBJUEFUSF9JQl9MSU5LRE9XTl9TTEVFUDoKLQkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NMRUVQIDw8Ci0JCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCk7CisJCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0RPV04sCisJCQkJCUlORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TTEVFUCk7CiAJCS8qIGRvbid0IHdhaXQgKi8KIAkJcmV0ID0gMDsKIAkJZ290byBiYWlsOwogCiAJY2FzZSBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFOgotCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLAotCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSA8PAotCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOworCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9ET1dOLAorCQkJCQlJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSk7CiAJCS8qIGRvbid0IHdhaXQgKi8KIAkJcmV0ID0gMDsKIAkJZ290byBiYWlsOwogCi0JY2FzZSBJUEFUSF9JQl9MSU5LSU5JVDoKLQkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktJTklUKSB7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBiYWlsOwotCQl9Ci0JCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0lOSVQgPDwKLQkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpOwotCQlsc3RhdGUgPSBJUEFUSF9MSU5LSU5JVDsKLQkJYnJlYWs7Ci0KIAljYXNlIElQQVRIX0lCX0xJTktBUk06CiAJCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQVJNRUQpIHsKIAkJCXJldCA9IDA7CkBAIC0xNzI5LDggKzE5NjQsOCBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gYmFpbDsKIAkJfQotCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BUk1FRCA8PAotCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCk7CisJCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0FSTUVELCAwKTsKKwogCQkvKgogCQkgKiBTaW5jZSB0aGUgcG9ydCBjYW4gdHJhbnNpdGlvbiB0byBBQ1RJVkUgYnkgcmVjZWl2aW5nCiAJCSAqIGEgbm9uIFZMIDE1IHBhY2tldCwgd2FpdCBmb3IgZWl0aGVyIHN0YXRlLgpAQCAtMTc0Nyw4ICsxOTgyLDcgQEAKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGJhaWw7CiAJCX0KLQkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQUNUSVZFIDw8Ci0JCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUKTsKKwkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQUNUSVZFLCAwKTsKIAkJbHN0YXRlID0gSVBBVEhfTElOS0FDVElWRTsKIAkJYnJlYWs7CiAKQEAgLTE3NTcsMTYgKzE5OTEsNDEgQEAKIAkJZGQtPmlwYXRoX2liY2N0cmwgfD0gSU5GSU5JUEFUSF9JQkNDX0xPT1BCQUNLOwogCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCiAJCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKworCQkvKiB0dXJuIGhlYXJ0YmVhdCBvZmYsIGFzIGl0IGNhdXNlcyBsb29wYmFjayB0byBmYWlsICovCisJCWRkLT5pcGF0aF9mX3NldF9pYl9jZmcoZGQsIElQQVRIX0lCX0NGR19IUlRCVCwKKwkJCQkgICAgICAgSVBBVEhfSUJfSFJUQlRfT0ZGKTsKKwkJLyogZG9uJ3Qgd2FpdCAqLwogCQlyZXQgPSAwOwotCQlnb3RvIGJhaWw7IC8vIG5vIHN0YXRlIGNoYW5nZSB0byB3YWl0IGZvcgorCQlnb3RvIGJhaWw7CiAKIAljYXNlIElQQVRIX0lCX0xJTktfRVhURVJOQUw6Ci0JCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJEaXNhYmxpbmcgSUIgbG9jYWwgbG9vcGJhY2sgKG5vcm1hbClcbiIpOworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJIkRpc2FibGluZyBJQiBsb2NhbCBsb29wYmFjayAobm9ybWFsKVxuIik7CisJCWRkLT5pcGF0aF9mX3NldF9pYl9jZmcoZGQsIElQQVRIX0lCX0NGR19IUlRCVCwKKwkJCQkgICAgICAgSVBBVEhfSUJfSFJUQlRfT04pOwogCQlkZC0+aXBhdGhfaWJjY3RybCAmPSB+SU5GSU5JUEFUSF9JQkNDX0xPT1BCQUNLOwogCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCiAJCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwkJLyogZG9uJ3Qgd2FpdCAqLwogCQlyZXQgPSAwOwotCQlnb3RvIGJhaWw7IC8vIG5vIHN0YXRlIGNoYW5nZSB0byB3YWl0IGZvcgorCQlnb3RvIGJhaWw7CisKKwkvKgorCSAqIEhlYXJ0YmVhdCBjYW4gYmUgZXhwbGljaXRseSBlbmFibGVkIGJ5IHRoZSB1c2VyIHZpYQorCSAqICJocnRidF9lbmFibGUiICJmaWxlIiwgYW5kIGlmIGRpc2FibGVkLCB0cnlpbmcgdG8gZW5hYmxlIGhlcmUKKwkgKiB3aWxsIGhhdmUgbm8gZWZmZWN0LiAgSW1wbGljaXQgY2hhbmdlcyAoaGVhcnRiZWF0IG9mZiB3aGVuCisJICogbG9vcGJhY2sgb24sIGFuZCB2aWNlIHZlcnNhKSBhcmUgaW5jbHVkZWQgdG8gZWFzZSB0ZXN0aW5nLgorCSAqLworCWNhc2UgSVBBVEhfSUJfTElOS19IUlRCVDoKKwkJcmV0ID0gZGQtPmlwYXRoX2Zfc2V0X2liX2NmZyhkZCwgSVBBVEhfSUJfQ0ZHX0hSVEJULAorCQkJSVBBVEhfSUJfSFJUQlRfT04pOworCQlnb3RvIGJhaWw7CisKKwljYXNlIElQQVRIX0lCX0xJTktfTk9fSFJUQlQ6CisJCXJldCA9IGRkLT5pcGF0aF9mX3NldF9pYl9jZmcoZGQsIElQQVRIX0lCX0NGR19IUlRCVCwKKwkJCUlQQVRIX0lCX0hSVEJUX09GRik7CisJCWdvdG8gYmFpbDsKIAogCWRlZmF1bHQ6CiAJCWlwYXRoX2RiZygiSW52YWxpZCBsaW5rc3RhdGUgMHgleCByZXF1ZXN0ZWRcbiIsIG5ld3N0YXRlKTsKQEAgLTE3ODksNyArMjA0OCw3IEBACiAgKiBzYW5pdHkgY2hlY2tpbmcgb24gdGhpcywgYW5kIHdlIGRvbid0IGRlYWwgd2l0aCB3aGF0IGhhcHBlbnMgdG8KICAqIHByb2dyYW1zIHRoYXQgYXJlIGFscmVhZHkgcnVubmluZyB3aGVuIHRoZSBzaXplIGNoYW5nZXMuCiAgKiBOT1RFOiBjaGFuZ2luZyB0aGUgTVRVIHdpbGwgdXN1YWxseSBjYXVzZSB0aGUgSUJDIHRvIGdvIGJhY2sgdG8KLSAqIGxpbmsgaW5pdGlhbGl6ZSAoSVBBVEhfSUJTVEFURV9JTklUKSBzdGF0ZS4uLgorICogbGluayBJTklUIHN0YXRlLi4uCiAgKi8KIGludCBpcGF0aF9zZXRfbXR1KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2IGFyZykKIHsKQEAgLTE4MDQsNyArMjA2Myw3IEBACiAJICogcGlvc2l6ZSkuICBXZSBjaGVjayB0aGF0IGl0J3Mgb25lIG9mIHRoZSB2YWxpZCBJQiBzaXplcy4KIAkgKi8KIAlpZiAoYXJnICE9IDI1NiAmJiBhcmcgIT0gNTEyICYmIGFyZyAhPSAxMDI0ICYmIGFyZyAhPSAyMDQ4ICYmCi0JICAgIGFyZyAhPSA0MDk2KSB7CisJICAgIChhcmcgIT0gNDA5NiB8fCAhaXBhdGhfbXR1NDA5NikpIHsKIAkJaXBhdGhfZGJnKCJUcnlpbmcgdG8gc2V0IGludmFsaWQgbXR1ICV1LCBmYWlsaW5nXG4iLCBhcmcpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGJhaWw7CkBAIC0xODIwLDYgKzIwNzksOCBAQAogCWlmIChhcmcgPj0gKHBpb3NpemUgLSBJUEFUSF9QSU9fTUFYSUJIRFIpKSB7CiAJCS8qIE9ubHkgaWYgaXQncyBub3QgdGhlIGluaXRpYWwgdmFsdWUgKG9yIHJlc2V0IHRvIGl0KSAqLwogCQlpZiAocGlvc2l6ZSAhPSBkZC0+aXBhdGhfaW5pdF9pYm1heGxlbikgeworCQkJaWYgKGFyZyA+IHBpb3NpemUgJiYgYXJnIDw9IGRkLT5pcGF0aF9pbml0X2libWF4bGVuKQorCQkJCXBpb3NpemUgPSBkZC0+aXBhdGhfaW5pdF9pYm1heGxlbjsKIAkJCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemU7CiAJCQljaGFuZ2VkID0gMTsKIAkJfQpAQCAtMTgzMywyNCArMjA5NCwxNyBAQAogCX0KIAogCWlmIChjaGFuZ2VkKSB7CisJCXU2NCBpYmMgPSBkZC0+aXBhdGhfaWJjY3RybCwgaWJkdzsKIAkJLyoKLQkJICogc2V0IHRoZSBJQkMgbWF4cGt0bGVuZ3RoIHRvIHRoZSBzaXplIG9mIG91ciBwaW8KLQkJICogYnVmZmVycyBpbiB3b3JkcworCQkgKiB1cGRhdGUgb3VyIGhvdXNla2VlcGluZyB2YXJpYWJsZXMsIGFuZCBzZXQgSUJDIG1heAorCQkgKiBzaXplLCBzYW1lIGFzIGluaXQgY29kZTsgbWF4IElCQyBpcyBtYXggd2UgYWxsb3cgaW4KKwkJICogYnVmZmVyLCBsZXNzIHRoZSBxd29yZCBwYmMsIHBsdXMgMSBmb3IgSUNSQywgaW4gZHdvcmRzCiAJCSAqLwotCQl1NjQgaWJjID0gZGQtPmlwYXRoX2liY2N0cmw7CisJCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemUgLSAyICogc2l6ZW9mKHUzMik7CisJCWliZHcgPSAoZGQtPmlwYXRoX2libWF4bGVuID4+IDIpICsgMTsKIAkJaWJjICY9IH4oSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9NQVNLIDw8Ci0JCQkgSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9TSElGVCk7Ci0KLQkJcGlvc2l6ZSA9IHBpb3NpemUgLSAyICogc2l6ZW9mKHUzMik7ICAgIC8qIGlnbm9yZSBwYmMgKi8KLQkJZGQtPmlwYXRoX2libWF4bGVuID0gcGlvc2l6ZTsKLQkJcGlvc2l6ZSAvPSBzaXplb2YodTMyKTsgLyogaW4gd29yZHMgKi8KLQkJLyoKLQkJICogZm9yIElDUkMsIHdoaWNoIHdlIG9ubHkgc2VuZCBpbiBkaWFnIHRlc3QgcGt0IG1vZGUsIGFuZAotCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgZm9yIG10dQotCQkgKi8KLQkJcGlvc2l6ZSArPSAxOwotCi0JCWliYyB8PSBwaW9zaXplIDw8IElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fU0hJRlQ7CisJCQkgZGQtPmliY2NfbXBsX3NoaWZ0KTsKKwkJaWJjIHw9IGliZHcgPDwgZGQtPmliY2NfbXBsX3NoaWZ0OwogCQlkZC0+aXBhdGhfaWJjY3RybCA9IGliYzsKIAkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAogCQkJCSBkZC0+aXBhdGhfaWJjY3RybCk7CkBAIC0xODYzLDExICsyMTE3LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGlwYXRoX3NldF9saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgYXJnLCB1OCBsbWMpCitpbnQgaXBhdGhfc2V0X2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBsaWQsIHU4IGxtYykKIHsKLQlkZC0+aXBhdGhfbGlkID0gYXJnOworCWRkLT5pcGF0aF9saWQgPSBsaWQ7CiAJZGQtPmlwYXRoX2xtYyA9IGxtYzsKIAorCWRkLT5pcGF0aF9mX3NldF9pYl9jZmcoZGQsIElQQVRIX0lCX0NGR19MSURMTUMsIGxpZCB8CisJCSh+KCgxVSA8PCBsbWMpIC0gMSkpIDw8IDE2KTsKKworCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJXZSBnb3QgYSBsaWQ6IDB4JXhcbiIsIGxpZCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkyOSwxMCArMjE4OCw4IEBACiAJICogYnV0IGxlYXZlIHRoYXQgdG8gcGVyLWNoaXAgZnVuY3Rpb25zLgogCSAqLwogCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY3N0YXR1cyk7Ci0JbHRzdGF0ZSA9ICh2YWwgPj4gSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSAmCi0JCSAgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0s7Ci0JbHN0YXRlID0gKHZhbCA+PiBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSAmCi0JCSBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX01BU0s7CisJbHRzdGF0ZSA9IGlwYXRoX2liX2xpbmt0cnN0YXRlKGRkLCB2YWwpOworCWxzdGF0ZSA9IGlwYXRoX2liX2xpbmtzdGF0ZShkZCwgdmFsKTsKIAogCWRkLT5pcGF0aF9mX3NldGV4dGxlZChkZCwgbHN0YXRlLCBsdHN0YXRlKTsKIAltb2RfdGltZXIoJmRkLT5pcGF0aF9sZWRfb3ZlcnJpZGVfdGltZXIsIGppZmZpZXMgKyB0aW1lb2ZmKTsKQEAgLTE5NzMsOSArMjIzMCw4IEBACiAJCWRkLT5pcGF0aF9sZWRfb3ZlcnJpZGVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZDsKIAkJZGQtPmlwYXRoX2xlZF9vdmVycmlkZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIDE7CiAJCWFkZF90aW1lcigmZGQtPmlwYXRoX2xlZF9vdmVycmlkZV90aW1lcik7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJYXRvbWljX2RlYygmZGQtPmlwYXRoX2xlZF9vdmVycmlkZV90aW1lcl9hY3RpdmUpOwotCX0KIH0KIAogLyoqCkBAIC0xOTkzLDYgKzIyNDksOCBAQAogCiAJaXBhdGhfZGJnKCJTaHV0dGluZyBkb3duIHRoZSBkZXZpY2VcbiIpOwogCisJaXBhdGhfaG9sX3VwKGRkKTsgLyogbWFrZSBzdXJlIHVzZXIgcHJvY2Vzc2VzIGFyZW4ndCBzdXNwZW5kZWQgKi8KKwogCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9MSU5LVU5LOwogCWRkLT5pcGF0aF9mbGFncyAmPSB+KElQQVRIX0lOSVRURUQgfCBJUEFUSF9MSU5LRE9XTiB8CiAJCQkgICAgIElQQVRIX0xJTktJTklUIHwgSVBBVEhfTElOS0FSTUVEIHwKQEAgLTIwMDcsNiArMjI2NSw5IEBACiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAogCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKIAorCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9IQVNfU0VORF9ETUEpCisJCXRlYXJkb3duX3NkbWEoZGQpOworCiAJLyoKIAkgKiBncmFjZWZ1bGx5IHN0b3AgYWxsIHNlbmRzIGFsbG93aW5nIGFueSBpbiBwcm9ncmVzcyB0byB0cmlja2xlIG91dAogCSAqIGZpcnN0LgpAQCAtMjAyNCwxMCArMjI4NSwxNiBAQAogCSAqLwogCXVkZWxheSg1KTsKIAotCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9ESVNBQkxFIDw8Ci0JCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NISUZUKTsKKwlkZC0+aXBhdGhfZl9zZXRleHRsZWQoZGQsIDAsIDApOyAvKiBtYWtlIHN1cmUgTEVEcyBhcmUgb2ZmICovCisKKwlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCAwLCBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSk7CiAJaXBhdGhfY2FuY2VsX3NlbmRzKGRkLCAwKTsKIAorCS8qCisJICogd2UgYXJlIHNodXR0aW5nIGRvd24sIHNvIHRlbGwgY29tcG9uZW50cyB0aGF0IGNhcmUuICBXZSBkb24ndCBkbworCSAqIHRoaXMgb24ganVzdCBhIGxpbmsgc3RhdGUgY2hhbmdlLCBtdWNoIGxpa2UgZXRoZXJuZXQsIGEgY2FibGUKKwkgKiB1bnBsdWcsIGV0Yy4gZG9lc24ndCBjaGFuZ2UgZHJpdmVyIHN0YXRlCisJICovCiAJc2lnbmFsX2liX2V2ZW50KGRkLCBJQl9FVkVOVF9QT1JUX0VSUik7CiAKIAkvKiBkaXNhYmxlIElCQyAqLwpAQCAtMjA0MiwxMCArMjMwOSwyMCBAQAogCSAqLwogCWRkLT5pcGF0aF9mX3F1aWV0X3NlcmRlcyhkZCk7CiAKKwkvKiBzdG9wIGFsbCB0aGUgdGltZXJzIHRoYXQgbWlnaHQgc3RpbGwgYmUgcnVubmluZyAqLworCWRlbF90aW1lcl9zeW5jKCZkZC0+aXBhdGhfaG9sX3RpbWVyKTsKIAlpZiAoZGQtPmlwYXRoX3N0YXRzX3RpbWVyX2FjdGl2ZSkgewogCQlkZWxfdGltZXJfc3luYygmZGQtPmlwYXRoX3N0YXRzX3RpbWVyKTsKIAkJZGQtPmlwYXRoX3N0YXRzX3RpbWVyX2FjdGl2ZSA9IDA7CiAJfQorCWlmIChkZC0+aXBhdGhfaW50cmNoa190aW1lci5kYXRhKSB7CisJCWRlbF90aW1lcl9zeW5jKCZkZC0+aXBhdGhfaW50cmNoa190aW1lcik7CisJCWRkLT5pcGF0aF9pbnRyY2hrX3RpbWVyLmRhdGEgPSAwOworCX0KKwlpZiAoYXRvbWljX3JlYWQoJmRkLT5pcGF0aF9sZWRfb3ZlcnJpZGVfdGltZXJfYWN0aXZlKSkgeworCQlkZWxfdGltZXJfc3luYygmZGQtPmlwYXRoX2xlZF9vdmVycmlkZV90aW1lcik7CisJCWF0b21pY19zZXQoJmRkLT5pcGF0aF9sZWRfb3ZlcnJpZGVfdGltZXJfYWN0aXZlLCAwKTsKKwl9CiAKIAkvKgogCSAqIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIGFuZCBlcnJvcnMsIHNvIHRoYXQgdGhlIG5leHQgdGltZSB0aGUgZHJpdmVyCkBAIC0yMTE5LDEzICsyMzk2LDEzIEBACiAJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImZyZWUgY2xvc2VkIHBvcnQgJWQgIgogCQkJICAgImlwYXRoX3BvcnQwX3NrYmluZm8gQCAlcFxuIiwgcGQtPnBvcnRfcG9ydCwKIAkJCSAgIHNrYmluZm8pOwotCQlmb3IgKGUgPSAwOyBlIDwgZGQtPmlwYXRoX3JjdmVncmNudDsgZSsrKQotCQlpZiAoc2tiaW5mb1tlXS5za2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGQtPnBjaWRldiwgc2tiaW5mb1tlXS5waHlzLAotCQkJCQkgZGQtPmlwYXRoX2libWF4bGVuLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWRldl9rZnJlZV9za2Ioc2tiaW5mb1tlXS5za2IpOwotCQl9CisJCWZvciAoZSA9IDA7IGUgPCBkZC0+aXBhdGhfcDBfcmN2ZWdyY250OyBlKyspCisJCQlpZiAoc2tiaW5mb1tlXS5za2IpIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGRkLT5wY2lkZXYsIHNrYmluZm9bZV0ucGh5cywKKwkJCQkJCSBkZC0+aXBhdGhfaWJtYXhsZW4sCisJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYmluZm9bZV0uc2tiKTsKKwkJCX0KIAkJdmZyZWUoc2tiaW5mbyk7CiAJfQogCWtmcmVlKHBkLT5wb3J0X3RpZF9wZ19saXN0KTsKQEAgLTIxNDgsNiArMjQyNSw3IEBACiAJICovCiAJaWRyX2luaXQoJnVuaXRfdGFibGUpOwogCWlmICghaWRyX3ByZV9nZXQoJnVuaXRfdGFibGUsIEdGUF9LRVJORUwpKSB7CisJCXByaW50ayhLRVJOX0VSUiBJUEFUSF9EUlZfTkFNRSAiOiBpZHJfcHJlX2dldCgpIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gYmFpbDsKIAl9CkBAIC0yMjM5LDEzICsyNTE3LDE4IEBACiAJCQl9CiAJCX0KIAorCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9IQVNfU0VORF9ETUEpCisJCXRlYXJkb3duX3NkbWEoZGQpOworCiAJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9JTklUVEVEOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50bWFzaywgMFVMTCk7CiAJcmV0ID0gZGQtPmlwYXRoX2ZfcmVzZXQoZGQpOwotCWlmIChyZXQgIT0gMSkKLQkJaXBhdGhfZGJnKCJyZXNldCB3YXMgbm90IHN1Y2Nlc3NmdWxcbiIpOwotCWlwYXRoX2RiZygiVHJ5aW5nIHRvIHJlaW5pdGlhbGl6ZSB1bml0ICV1IGFmdGVyIHJlc2V0IGF0dGVtcHRcbiIsCi0JCSAgdW5pdCk7Ci0JcmV0ID0gaXBhdGhfaW5pdF9jaGlwKGRkLCAxKTsKKwlpZiAocmV0ID09IDEpIHsKKwkJaXBhdGhfZGJnKCJSZWluaXRpYWxpemluZyB1bml0ICV1IGFmdGVyIHJlc2V0IGF0dGVtcHRcbiIsCisJCQkgIHVuaXQpOworCQlyZXQgPSBpcGF0aF9pbml0X2NoaXAoZGQsIDEpOworCX0gZWxzZQorCQlyZXQgPSAtRUFHQUlOOwogCWlmIChyZXQpCiAJCWlwYXRoX2Rldl9lcnIoZGQsICJSZWluaXRpYWxpemUgdW5pdCAldSBhZnRlciAiCiAJCQkgICAgICAicmVzZXQgZmFpbGVkIHdpdGggJWRcbiIsIHVuaXQsIHJldCk7CkBAIC0yMjU3LDEzICsyNTQwLDEyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBzZW5kIGEgc2lnbmFsIHRvIGFsbCB0aGUgcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgZHJpdmVyIG9wZW4KKyAqIHRocm91Z2ggdGhlIG5vcm1hbCBpbnRlcmZhY2VzIChpLmUuLCBldmVyeXRoaW5nIG90aGVyIHRoYW4gZGlhZ3MKKyAqIGludGVyZmFjZSkuICBSZXR1cm5zIG51bWJlciBvZiBzaWduYWxsZWQgcHJvY2Vzc2VzLgorICovCitzdGF0aWMgaW50IGlwYXRoX3NpZ25hbF9wcm9jcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBzaWcpCit7CisJaW50IGksIHN1YiwgYW55ID0gMDsKKwlwaWRfdCBwaWQ7CisKKwlpZiAoIWRkLT5pcGF0aF9wZCkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMTsgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7CisJCWlmICghZGQtPmlwYXRoX3BkW2ldIHx8ICFkZC0+aXBhdGhfcGRbaV0tPnBvcnRfY250IHx8CisJCSAgICAhZGQtPmlwYXRoX3BkW2ldLT5wb3J0X3BpZCkKKwkJCWNvbnRpbnVlOworCQlwaWQgPSBkZC0+aXBhdGhfcGRbaV0tPnBvcnRfcGlkOworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiY29udGV4dCAlZCBpbiB1c2UgIgorCQkJICAiKFBJRCAldSksIHNlbmRpbmcgc2lnbmFsICVkXG4iLAorCQkJICBpLCBwaWQsIHNpZyk7CisJCWtpbGxfcHJvYyhwaWQsIHNpZywgMSk7CisJCWFueSsrOworCQlmb3IgKHN1YiA9IDA7IHN1YiA8IElORklOSVBBVEhfTUFYX1NVQlBPUlQ7IHN1YisrKSB7CisJCQlwaWQgPSBkZC0+aXBhdGhfcGRbaV0tPnBvcnRfc3VicGlkW3N1Yl07CisJCQlpZiAoIXBpZCkKKwkJCQljb250aW51ZTsKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJzdWItY29udGV4dCAiCisJCQkJIiVkOiVkIGluIHVzZSAoUElEICV1KSwgc2VuZGluZyAiCisJCQkJInNpZ25hbCAlZFxuIiwgaSwgc3ViLCBwaWQsIHNpZyk7CisJCQlraWxsX3Byb2MocGlkLCBzaWcsIDEpOworCQkJYW55Kys7CisJCX0KKwl9CisJcmV0dXJuIGFueTsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfaG9sX3NpZ25hbF9kb3duKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpZiAoaXBhdGhfc2lnbmFsX3Byb2NzKGRkLCBTSUdTVE9QKSkKKwkJaXBhdGhfZGJnKCJTdG9wcGVkIHNvbWUgcHJvY2Vzc2VzXG4iKTsKKwlpcGF0aF9jYW5jZWxfc2VuZHMoZGQsIDEpOworfQorCisKK3N0YXRpYyB2b2lkIGlwYXRoX2hvbF9zaWduYWxfdXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWlmIChpcGF0aF9zaWduYWxfcHJvY3MoZGQsIFNJR0NPTlQpKQorCQlpcGF0aF9kYmcoIkNvbnRpbnVlZCBzb21lIHByb2Nlc3Nlc1xuIik7Cit9CisKKy8qCisgKiBsaW5rIGlzIGRvd24sIHN0b3AgYW55IHVzZXJzIHByb2Nlc3NlcywgYW5kIGZsdXNoIHBlbmRpbmcgc2VuZHMKKyAqIHRvIHByZXZlbnQgSG9MIGJsb2NraW5nLCB0aGVuIHN0YXJ0IHRoZSBIb0wgdGltZXIgdGhhdAorICogcGVyaW9kaWNhbGx5IGNvbnRpbnVlcywgdGhlbiBzdG9wIHByb2NzLCBzbyB0aGV5IGNhbiBkZXRlY3QKKyAqIGxpbmsgZG93biBpZiB0aGV5IHdhbnQsIGFuZCBkbyBzb21ldGhpbmcgYWJvdXQgaXQuCisgKiBUaW1lciBtYXkgYWxyZWFkeSBiZSBydW5uaW5nLCBzbyB1c2UgX19tb2RfdGltZXIsIG5vdCBhZGRfdGltZXIuCisgKi8KK3ZvaWQgaXBhdGhfaG9sX2Rvd24oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWRkLT5pcGF0aF9ob2xfc3RhdGUgPSBJUEFUSF9IT0xfRE9XTjsKKwlpcGF0aF9ob2xfc2lnbmFsX2Rvd24oZGQpOworCWRkLT5pcGF0aF9ob2xfbmV4dCA9IElQQVRIX0hPTF9ET1dOQ09OVDsKKwlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKKwkJbXNlY3NfdG9famlmZmllcyhpcGF0aF9ob2xfdGltZW91dF9tcyk7CisJX19tb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsIGRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyk7Cit9CisKKy8qCisgKiBsaW5rIGlzIHVwLCBjb250aW51ZSBhbnkgdXNlciBwcm9jZXNzZXMsIGFuZCBlbnN1cmUgdGltZXIKKyAqIGlzIGEgbm9wLCBpZiBydW5uaW5nLiAgTGV0IHRpbWVyIGtlZXAgcnVubmluZywgaWYgc2V0OyBpdAorICogd2lsbCBub3Agd2hlbiBpdCBzZWVzIHRoZSBsaW5rIGlzIHVwCisgKi8KK3ZvaWQgaXBhdGhfaG9sX3VwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpcGF0aF9ob2xfc2lnbmFsX3VwKGRkKTsKKwlkZC0+aXBhdGhfaG9sX3N0YXRlID0gSVBBVEhfSE9MX1VQOworfQorCisvKgorICogdG9nZ2xlIHRoZSBydW5uaW5nL25vdCBydW5uaW5nIHN0YXRlIG9mIHVzZXIgcHJvY2VzZXMKKyAqIHRvIHByZXZlbnQgSG9MIGJsb2NraW5nIG9uIGNoaXAgcmVzb3VyY2VzLCBidXQgc3RpbGwgYWxsb3cKKyAqIHVzZXIgcHJvY2Vzc2VzIHRvIGRvIGxpbmsgZG93biBzcGVjaWFsIGNhc2UgaGFuZGxpbmcuCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgdmlhIHRoZSB0aW1lcgorICovCit2b2lkIGlwYXRoX2hvbF9ldmVudCh1bnNpZ25lZCBsb25nIG9wYXF1ZSkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSAoc3RydWN0IGlwYXRoX2RldmRhdGEgKilvcGFxdWU7CisKKwlpZiAoZGQtPmlwYXRoX2hvbF9uZXh0ID09IElQQVRIX0hPTF9ET1dOU1RPUAorCQkmJiBkZC0+aXBhdGhfaG9sX3N0YXRlICE9IElQQVRIX0hPTF9VUCkgeworCQlkZC0+aXBhdGhfaG9sX25leHQgPSBJUEFUSF9IT0xfRE9XTkNPTlQ7CisJCWlwYXRoX2RiZygiU3RvcHBpbmcgcHJvY2Vzc2VzXG4iKTsKKwkJaXBhdGhfaG9sX3NpZ25hbF9kb3duKGRkKTsKKwl9IGVsc2UgeyAvKiBtYXkgZG8gImV4dHJhIiBpZiBhbHNvIGluIGlwYXRoX2hvbF91cCgpICovCisJCWRkLT5pcGF0aF9ob2xfbmV4dCA9IElQQVRIX0hPTF9ET1dOU1RPUDsKKwkJaXBhdGhfZGJnKCJDb250aW51aW5nIHByb2Nlc3Nlc1xuIik7CisJCWlwYXRoX2hvbF9zaWduYWxfdXAoZGQpOworCX0KKwlpZiAoZGQtPmlwYXRoX2hvbF9zdGF0ZSA9PSBJUEFUSF9IT0xfVVApCisJCWlwYXRoX2RiZygibGluaydzIHVwLCBkb24ndCByZXNjaGVkIHRpbWVyXG4iKTsKKwllbHNlIHsKKwkJZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzID0gamlmZmllcyArCisJCQltc2Vjc190b19qaWZmaWVzKGlwYXRoX2hvbF90aW1lb3V0X21zKTsKKwkJX19tb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsCisJCQlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOworCX0KK30KKwogaW50IGlwYXRoX3NldF9yeF9wb2xfaW52KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggbmV3X3BvbF9pbnYpCiB7CiAJdTY0IHZhbDsKLQlpZiAoIG5ld19wb2xfaW52ID4gSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9NQVNLICkgeworCisJaWYgKG5ld19wb2xfaW52ID4gSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9NQVNLKQogCQlyZXR1cm4gLTE7Ci0JfQotCWlmICggZGQtPmlwYXRoX3J4X3BvbF9pbnYgIT0gbmV3X3BvbF9pbnYgKSB7CisJaWYgKGRkLT5pcGF0aF9yeF9wb2xfaW52ICE9IG5ld19wb2xfaW52KSB7CiAJCWRkLT5pcGF0aF9yeF9wb2xfaW52ID0gbmV3X3BvbF9pbnY7CiAJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcpOwogCQl2YWwgJj0gfihJTkZJTklQQVRIX1hHWFNfUlhfUE9MX01BU0sgPDwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwppbmRleCBlMjhhNDJmLi5kYzM3Mjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC02Miw2ICs2MiwzMyBAQAogICogYWNjZXNzaW5nIGVlcHJvbSBjb250ZW50cyBmcm9tIHdpdGhpbiB0aGUga2VybmVsLCBvbmx5IHZpYSBzeXNmcy4KICAqLwogCisvKiBBZGRlZCBmdW5jdGlvbmFsaXR5IGZvciBJQkE3MjIwLWJhc2VkIGNhcmRzICovCisjZGVmaW5lIElQQVRIX0VFUFJPTV9ERVZfVjEgMHhBMAorI2RlZmluZSBJUEFUSF9FRVBST01fREVWX1YyIDB4QTIKKyNkZWZpbmUgSVBBVEhfVEVNUF9ERVYgMHg5OAorI2RlZmluZSBJUEFUSF9CQURfREVWIChJUEFUSF9FRVBST01fREVWX1YyKzIpCisjZGVmaW5lIElQQVRIX05PX0RFViAoMHhGRikKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgSTJDIGNoYWlucyBpcyBwcm9saWZlcmF0aW5nLiBUYWJsZSBiZWxvdyBicmluZ3MKKyAqIHNvbWUgb3JkZXIgdG8gdGhlIG1hZG5lc3MuIFRoZSBiYXNpYyBwcmluY2lwbGUgaXMgdGhhdCB0aGUKKyAqIHRhYmxlIGlzIHNjYW5uZWQgZnJvbSB0aGUgdG9wLCBhbmQgYSAicHJvYmUiIGlzIG1hZGUgdG8gdGhlCisgKiBkZXZpY2UgcHJvYmVfZGV2LiBJZiB0aGF0IHN1Y2NlZWRzLCB0aGUgY2hhaW4gaXMgY29uc2lkZXJlZAorICogdG8gYmUgb2YgdGhhdCB0eXBlLCBhbmQgZGQtPmkyY19jaGFpbl90eXBlIGlzIHNldCB0byB0aGUgaW5kZXgrMQorICogb2YgdGhlIGVudHJ5LgorICogVGhlICsxIGlzIHNvIHN0YXRpYyBpbml0aWFsaXphdGlvbiBjYW4gbWVhbiAidW5rbm93biwgZG8gcHJvYmUuIgorICovCitzdGF0aWMgc3RydWN0IGkyY19jaGFpbl9kZXNjIHsKKwl1OCBwcm9iZV9kZXY7CS8qIElmIHNlZW4gYXQgcHJvYmUsIGNoYWluIGlzIHRoaXMgdHlwZSAqLworCXU4IGVlcHJvbV9kZXY7CS8qIERldiBhZGRyIChpZiBhbnkpIGZvciBFRVBST00gKi8KKwl1OCB0ZW1wX2RldjsJLyogRGV2IEFkZHIgKGlmIGFueSkgZm9yIFRlbXAtc2Vuc2UgKi8KK30gaTJjX2NoYWluc1tdID0geworCXsgSVBBVEhfQkFEX0RFViwgSVBBVEhfTk9fREVWLCBJUEFUSF9OT19ERVYgfSwgLyogcHJlLWliYTcyMjAgYmRzICovCisJeyBJUEFUSF9FRVBST01fREVWX1YxLCBJUEFUSF9FRVBST01fREVWX1YxLCBJUEFUSF9URU1QX0RFVn0sIC8qIFYxICovCisJeyBJUEFUSF9FRVBST01fREVWX1YyLCBJUEFUSF9FRVBST01fREVWX1YyLCBJUEFUSF9URU1QX0RFVn0sIC8qIFYyICovCisJeyBJUEFUSF9OT19ERVYgfQorfTsKKwogZW51bSBpMmNfdHlwZSB7CiAJaTJjX2xpbmVfc2NsID0gMCwKIAlpMmNfbGluZV9zZGEKQEAgLTc1LDEzICsxMDIsNiBAQAogI2RlZmluZSBSRUFEX0NNRCAxCiAjZGVmaW5lIFdSSVRFX0NNRCAwCiAKLXN0YXRpYyBpbnQgZWVwcm9tX2luaXQ7Ci0KLS8qCi0gKiBUaGUgZ3Bpb3ZhbCBtYW5pcHVsYXRpb24gcmVhbGx5IHNob3VsZCBiZSBwcm90ZWN0ZWQgYnkgc3BpbmxvY2tzCi0gKiBvciBiZSBjb252ZXJ0ZWQgdG8gdXNlIGF0b21pYyBvcGVyYXRpb25zLgotICovCi0KIC8qKgogICogaTJjX2dwaW9fc2V0IC0gc2V0IGEgR1BJTyBsaW5lCiAgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQpAQCAtMjQxLDYgKzI2MSwyNyBAQAogfQogCiAvKioKKyAqIHJkX2J5dGUgLSByZWFkIGEgYnl0ZSwgbGVhdmluZyBBQ0ssIFNUT1AsIGV0YyB1cCB0byBjYWxsZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKgorICogUmV0dXJucyBieXRlIHNoaWZ0ZWQgb3V0IG9mIGRldmljZQorICovCitzdGF0aWMgaW50IHJkX2J5dGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCBiaXRfY250ciwgZGF0YTsKKworCWRhdGEgPSAwOworCisJZm9yIChiaXRfY250ciA9IDc7IGJpdF9jbnRyID49IDA7IC0tYml0X2NudHIpIHsKKwkJZGF0YSA8PD0gMTsKKwkJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CisJCWRhdGEgfD0gc2RhX2luKGRkLCAwKTsKKwkJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKKy8qKgogICogd3JfYnl0ZSAtIHdyaXRlIGEgYnl0ZSwgb25lIGJpdCBhdCBhIHRpbWUKICAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCiAgKiBAZGF0YTogdGhlIGJ5dGUgdG8gd3JpdGUKQEAgLTMzMSw3ICszNzIsNiBAQAogCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlJlc2V0dGluZyBpMmMgZWVwcm9tOyBpbml0aWFsIGdwaW9vdXQgcmVnICIKIAkJICAgImlzICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpICpncGlvdmFsKTsKIAotCWVlcHJvbV9pbml0ID0gMTsKIAkvKgogCSAqIFRoaXMgaXMgdG8gZ2V0IHRoZSBpMmMgaW50byBhIGtub3duIHN0YXRlLCBieSBmaXJzdCBnb2luZyBsb3csCiAJICogdGhlbiB0cmlzdGF0ZSBzZGEgKGFuZCB0aGVuIHRyaXN0YXRlIHNjbCBhcyBmaXJzdCB0aGluZwpAQCAtMzQwLDEyICszODAsMTcgQEAKIAlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOwogCXNkYV9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOwogCisJLyogQ2xvY2sgdXAgdG8gOSBjeWNsZXMgbG9va2luZyBmb3IgU0RBIGhpLCB0aGVuIGlzc3VlIFNUQVJUIGFuZCBTVE9QICovCiAJd2hpbGUgKGNsb2NrX2N5Y2xlc19sZWZ0LS0pIHsKIAkJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CiAKKwkJLyogU0RBIHNlZW4gaGlnaCwgaXNzdWUgU1RBUlQgYnkgZHJvcHBpbmcgaXQgd2hpbGUgU0NMIGhpZ2ggKi8KIAkJaWYgKHNkYV9pbihkZCwgMCkpIHsKIAkJCXNkYV9vdXQoZGQsIGkyY19saW5lX2xvdyk7CiAJCQlzY2xfb3V0KGRkLCBpMmNfbGluZV9sb3cpOworCQkJLyogQVRNRUwgc3BlYyBzYXlzIG11c3QgYmUgZm9sbG93ZWQgYnkgU1RPUC4gKi8KKwkJCXNjbF9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOworCQkJc2RhX291dChkZCwgaTJjX2xpbmVfaGlnaCk7CiAJCQlyZXQgPSAwOwogCQkJZ290byBiYWlsOwogCQl9CkBAIC0zNTksMjkgKzQwNCwxMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIGlwYXRoX2VlcHJvbV9yZWFkIC0gcmVjZWl2ZXMgYnl0ZXMgZnJvbSB0aGUgZWVwcm9tIHZpYSBJMkMKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAZWVwcm9tX29mZnNldDogYWRkcmVzcyB0byByZWFkIGZyb20KLSAqIEBidWZmZXI6IHdoZXJlIHRvIHN0b3JlIHJlc3VsdAotICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIHJlY2VpdmUKKy8qCisgKiBQcm9iZSBmb3IgSTJDIGRldmljZSBhdCBzcGVjaWZpZWQgYWRkcmVzcy4gUmV0dXJucyAwIGZvciAic3VjY2VzcyIKKyAqIHRvIG1hdGNoIHJlc3Qgb2YgdGhpcyBmaWxlLgorICogTGVhdmUgYnVzIGluICJyZWFzb25hYmxlIiBzdGF0ZSBmb3IgZnVydGhlciBjb21tYW5kcy4KICAqLworc3RhdGljIGludCBpMmNfcHJvYmUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgZGV2YWRkcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGVlcHJvbV9yZXNldChkZCk7CisJaWYgKHJldCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHJlc2V0IHByb2JpbmcgZGV2aWNlIDB4JTAyWFxuIiwKKwkJCSAgICAgIGRldmFkZHIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIFJlc2V0IG5vIGxvbmdlciBsZWF2ZXMgYnVzIGluIHN0YXJ0IGNvbmRpdGlvbiwgc28gbm9ybWFsCisJICogaTJjX3N0YXJ0Y21kKCkgd2lsbCBkby4KKwkgKi8KKwlyZXQgPSBpMmNfc3RhcnRjbWQoZGQsIGRldmFkZHIgfCBSRUFEX0NNRCk7CisJaWYgKHJldCkKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiRmFpbGVkIHN0YXJ0Y21kIGZvciBkZXZpY2UgMHglMDJYXG4iLAorCQkJICAgZGV2YWRkcik7CisJZWxzZSB7CisJCS8qCisJCSAqIERldmljZSBkaWQgcmVzcG9uZC4gQ29tcGxldGUgYSBzaW5nbGUtYnl0ZSByZWFkLCBiZWNhdXNlIHNvbWUKKwkJICogZGV2aWNlcyBhcHBhcmVudGx5IGNhbm5vdCBoYW5kbGUgU1RPUCBpbW1lZGlhdGVseSBhZnRlciB0aGV5CisJCSAqIEFDSyB0aGUgc3RhcnQtY21kLgorCQkgKi8KKwkJaW50IGRhdGE7CisJCWRhdGEgPSByZF9ieXRlKGRkKTsKKwkJc3RvcF9jbWQoZGQpOworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZXNwb25zZSBmcm9tIGRldmljZSAweCUwMlhcbiIsIGRldmFkZHIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJucyB0aGUgImkyYyB0eXBlIi4gVGhpcyBpcyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdGhhdCBkZXNjcmliZXMKKyAqIHRoZSBJMkMgY2hhaW4gb24gdGhpcyBib2FyZC4gVG8gbWluaW1pemUgaW1wYWN0IG9uIHN0cnVjdCBpcGF0aF9kZXZkYXRhLAorICogdGhlIChzbWFsbCBpbnRlZ2VyKSBpbmRleCBpbnRvIHRoZSB0YWJsZSBpcyBhY3R1YWxseSBtZW1vaXplZCwgcmF0aGVyCisgKiB0aGVuIHRoZSBwb2ludGVyLgorICogTWVtb2l6YXRpb24gaXMgYmVjYXVzZSB0aGUgdHlwZSBpcyBkZXRlcm1pbmVkIG9uIHRoZSBmaXJzdCBjYWxsIHBlciBjaGlwLgorICogQW4gYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gbW92ZSB0eXBlIGRldGVybWluYXRpb24gdG8gZWFybHkKKyAqIGluaXQgY29kZS4KKyAqLworc3RhdGljIHN0cnVjdCBpMmNfY2hhaW5fZGVzYyAqaXBhdGhfaTJjX3R5cGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCBpZHg7CisKKwkvKiBHZXQgbWVtb2l6ZWQgaW5kZXgsIGZyb20gcHJldmlvdXMgc3VjY2Vzc2Z1bCBwcm9iZXMgKi8KKwlpZHggPSBkZC0+aXBhdGhfaTJjX2NoYWluX3R5cGUgLSAxOworCWlmIChpZHggPj0gMCAmJiBpZHggPCAoQVJSQVlfU0laRShpMmNfY2hhaW5zKSAtIDEpKQorCQlnb3RvIGRvbmU7CisKKwlpZHggPSAwOworCXdoaWxlIChpMmNfY2hhaW5zW2lkeF0ucHJvYmVfZGV2ICE9IElQQVRIX05PX0RFVikgeworCQkvKiBpZiBwcm9iZSBzdWNjZWVkcywgdGhpcyBpcyB0eXBlICovCisJCWlmICghaTJjX3Byb2JlKGRkLCBpMmNfY2hhaW5zW2lkeF0ucHJvYmVfZGV2KSkKKwkJCWJyZWFrOworCQkrK2lkeDsKKwl9CisKKwkvKgorCSAqIE9sZCBFRVBST00gKGZpcnN0IGVudHJ5KSBtYXkgcmVxdWlyZSBhIHJlc2V0IGFmdGVyIHByb2JlLAorCSAqIHJhdGhlciB0aGFuIGJlaW5nIGFibGUgdG8gInN0YXJ0IiBhZnRlciAic3RvcCIKKwkgKi8KKwlpZiAoaWR4ID09IDApCisJCWVlcHJvbV9yZXNldChkZCk7CisKKwlpZiAoaTJjX2NoYWluc1tpZHhdLnByb2JlX2RldiA9PSBJUEFUSF9OT19ERVYpCisJCWlkeCA9IC0xOworCWVsc2UKKwkJZGQtPmlwYXRoX2kyY19jaGFpbl90eXBlID0gaWR4ICsgMTsKK2RvbmU6CisJcmV0dXJuIChpZHggPj0gMCkgPyBpMmNfY2hhaW5zICsgaWR4IDogTlVMTDsKK30KIAogc3RhdGljIGludCBpcGF0aF9lZXByb21faW50ZXJuYWxfcmVhZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCiAJCQkJCXU4IGVlcHJvbV9vZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IGxlbikKIHsKLQkvKiBjb21waWxlciBjb21wbGFpbnMgdW5sZXNzIGluaXRpYWxpemVkICovCi0JdTggc2luZ2xlX2J5dGUgPSAwOwotCWludCBiaXRfY250cjsKIAlpbnQgcmV0OworCXN0cnVjdCBpMmNfY2hhaW5fZGVzYyAqaWNkOworCXU4ICpicCA9IGJ1ZmZlcjsKIAotCWlmICghZWVwcm9tX2luaXQpCi0JCWVlcHJvbV9yZXNldChkZCk7CisJcmV0ID0gMTsKKwlpY2QgPSBpcGF0aF9pMmNfdHlwZShkZCk7CisJaWYgKCFpY2QpCisJCWdvdG8gYmFpbDsKIAotCWVlcHJvbV9vZmZzZXQgPSAoZWVwcm9tX29mZnNldCA8PCAxKSB8IFJFQURfQ01EOwotCi0JaWYgKGkyY19zdGFydGNtZChkZCwgZWVwcm9tX29mZnNldCkpIHsKLQkJaXBhdGhfZGJnKCJGYWlsZWQgc3RhcnRjbWRcbiIpOworCWlmIChpY2QtPmVlcHJvbV9kZXYgPT0gSVBBVEhfTk9fREVWKSB7CisJCS8qIGxlZ2FjeSBub3QtcmVhbGx5LUkyQyAqLworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJTdGFydCBjb21tYW5kIG9ubHkgYWRkcmVzc1xuIik7CisJCWVlcHJvbV9vZmZzZXQgPSAoZWVwcm9tX29mZnNldCA8PCAxKSB8IFJFQURfQ01EOworCQlyZXQgPSBpMmNfc3RhcnRjbWQoZGQsIGVlcHJvbV9vZmZzZXQpOworCX0gZWxzZSB7CisJCS8qIEFjdHVhbCBJMkMgKi8KKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiU3RhcnQgY29tbWFuZCB1c2VzIGRldmFkZHJcbiIpOworCQlpZiAoaTJjX3N0YXJ0Y21kKGRkLCBpY2QtPmVlcHJvbV9kZXYgfCBXUklURV9DTUQpKSB7CisJCQlpcGF0aF9kYmcoIkZhaWxlZCBFRVBST00gc3RhcnRjbWRcbiIpOworCQkJc3RvcF9jbWQoZGQpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlyZXQgPSB3cl9ieXRlKGRkLCBlZXByb21fb2Zmc2V0KTsKKwkJc3RvcF9jbWQoZGQpOworCQlpZiAocmV0KSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHdyaXRlIEVFUFJPTSBhZGRyZXNzXG4iKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJcmV0ID0gaTJjX3N0YXJ0Y21kKGRkLCBpY2QtPmVlcHJvbV9kZXYgfCBSRUFEX0NNRCk7CisJfQorCWlmIChyZXQpIHsKKwkJaXBhdGhfZGJnKCJGYWlsZWQgc3RhcnRjbWQgZm9yIGRldiAlMDJYXG4iLCBpY2QtPmVlcHJvbV9kZXYpOwogCQlzdG9wX2NtZChkZCk7CiAJCXJldCA9IDE7CiAJCWdvdG8gYmFpbDsKQEAgLTM5MiwyMiArNTI5LDExIEBACiAJICogaW5jcmVtZW50aW5nIHRoZSBhZGRyZXNzLgogCSAqLwogCXdoaWxlIChsZW4tLSA+IDApIHsKLQkJLyogZ2V0IGRhdGEgKi8KLQkJc2luZ2xlX2J5dGUgPSAwOwotCQlmb3IgKGJpdF9jbnRyID0gODsgYml0X2NudHI7IGJpdF9jbnRyLS0pIHsKLQkJCXU4IGJpdDsKLQkJCXNjbF9vdXQoZGQsIGkyY19saW5lX2hpZ2gpOwotCQkJYml0ID0gc2RhX2luKGRkLCAwKTsKLQkJCXNpbmdsZV9ieXRlIHw9IGJpdCA8PCAoYml0X2NudHIgLSAxKTsKLQkJCXNjbF9vdXQoZGQsIGkyY19saW5lX2xvdyk7Ci0JCX0KLQorCQkvKiBnZXQgYW5kIHN0b3JlIGRhdGEgKi8KKwkJKmJwKysgPSByZF9ieXRlKGRkKTsKIAkJLyogc2VuZCBhY2sgaWYgbm90IHRoZSBsYXN0IGJ5dGUgKi8KIAkJaWYgKGxlbikKIAkJCXNlbmRfYWNrKGRkKTsKLQotCQkqKCh1OCAqKSBidWZmZXIpID0gc2luZ2xlX2J5dGU7Ci0JCWJ1ZmZlcisrOwogCX0KIAogCXN0b3BfY21kKGRkKTsKQEAgLTQxOCwzMSArNTQ0LDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi0vKioKLSAqIGlwYXRoX2VlcHJvbV93cml0ZSAtIHdyaXRlcyBkYXRhIHRvIHRoZSBlZXByb20gdmlhIEkyQwotICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKLSAqIEBlZXByb21fb2Zmc2V0OiB3aGVyZSB0byBwbGFjZSBkYXRhCi0gKiBAYnVmZmVyOiBkYXRhIHRvIHdyaXRlCi0gKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqLwogc3RhdGljIGludCBpcGF0aF9lZXByb21faW50ZXJuYWxfd3JpdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBlZXByb21fb2Zmc2V0LAogCQkJCSAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIGludCBsZW4pCiB7Ci0JdTggc2luZ2xlX2J5dGU7CiAJaW50IHN1Yl9sZW47CiAJY29uc3QgdTggKmJwID0gYnVmZmVyOwogCWludCBtYXhfd2FpdF90aW1lLCBpOwogCWludCByZXQ7CisJc3RydWN0IGkyY19jaGFpbl9kZXNjICppY2Q7CiAKLQlpZiAoIWVlcHJvbV9pbml0KQotCQllZXByb21fcmVzZXQoZGQpOworCXJldCA9IDE7CisJaWNkID0gaXBhdGhfaTJjX3R5cGUoZGQpOworCWlmICghaWNkKQorCQlnb3RvIGJhaWw7CiAKIAl3aGlsZSAobGVuID4gMCkgewotCQlpZiAoaTJjX3N0YXJ0Y21kKGRkLCAoZWVwcm9tX29mZnNldCA8PCAxKSB8IFdSSVRFX0NNRCkpIHsKLQkJCWlwYXRoX2RiZygiRmFpbGVkIHRvIHN0YXJ0IGNtZCBvZmZzZXQgJXVcbiIsCi0JCQkJICBlZXByb21fb2Zmc2V0KTsKLQkJCWdvdG8gZmFpbGVkX3dyaXRlOworCQlpZiAoaWNkLT5lZXByb21fZGV2ID09IElQQVRIX05PX0RFVikgeworCQkJaWYgKGkyY19zdGFydGNtZChkZCwKKwkJCQkJIChlZXByb21fb2Zmc2V0IDw8IDEpIHwgV1JJVEVfQ01EKSkgeworCQkJCWlwYXRoX2RiZygiRmFpbGVkIHRvIHN0YXJ0IGNtZCBvZmZzZXQgJXVcbiIsCisJCQkJCWVlcHJvbV9vZmZzZXQpOworCQkJCWdvdG8gZmFpbGVkX3dyaXRlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogUmVhbCBJMkMgKi8KKwkJCWlmIChpMmNfc3RhcnRjbWQoZGQsIGljZC0+ZWVwcm9tX2RldiB8IFdSSVRFX0NNRCkpIHsKKwkJCQlpcGF0aF9kYmcoIkZhaWxlZCBFRVBST00gc3RhcnRjbWRcbiIpOworCQkJCWdvdG8gZmFpbGVkX3dyaXRlOworCQkJfQorCQkJcmV0ID0gd3JfYnl0ZShkZCwgZWVwcm9tX29mZnNldCk7CisJCQlpZiAocmV0KSB7CisJCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byB3cml0ZSBFRVBST00gIgorCQkJCQkgICAgICAiYWRkcmVzc1xuIik7CisJCQkJZ290byBmYWlsZWRfd3JpdGU7CisJCQl9CiAJCX0KIAogCQlzdWJfbGVuID0gbWluKGxlbiwgNCk7CkBAIC00NjgsOSArNjAzLDExIEBACiAJCSAqIHRoZSB3cml0ZXMgaGF2ZSBjb21wbGV0ZWQuICAgV2UgZG8gdGhpcyBpbmxpbmUgdG8gYXZvaWQKIAkJICogdGhlIGRlYnVnIHByaW50cyB0aGF0IGFyZSBpbiB0aGUgcmVhbCByZWFkIHJvdXRpbmUKIAkJICogaWYgdGhlIHN0YXJ0Y21kIGZhaWxzLgorCQkgKiBXZSBhbHNvIHVzZSB0aGUgcHJvcGVyIGRldmljZSBhZGRyZXNzLCBzbyBpdCBkb2Vzbid0IG1hdHRlcgorCQkgKiB3aGV0aGVyIHdlIGhhdmUgcmVhbCBlZXByb21fZGV2LiBsZWdhY3kgbGlrZXMgYW55IGFkZHJlc3MuCiAJCSAqLwogCQltYXhfd2FpdF90aW1lID0gMTAwOwotCQl3aGlsZSAoaTJjX3N0YXJ0Y21kKGRkLCBSRUFEX0NNRCkpIHsKKwkJd2hpbGUgKGkyY19zdGFydGNtZChkZCwgaWNkLT5lZXByb21fZGV2IHwgUkVBRF9DTUQpKSB7CiAJCQlzdG9wX2NtZChkZCk7CiAJCQlpZiAoIS0tbWF4X3dhaXRfdGltZSkgewogCQkJCWlwYXRoX2RiZygiRGlkIG5vdCBnZXQgc3VjY2Vzc2Z1bCByZWFkIHRvICIKQEAgLTQ3OCwxNSArNjE1LDggQEAKIAkJCQlnb3RvIGZhaWxlZF93cml0ZTsKIAkJCX0KIAkJfQotCQkvKiBub3cgcmVhZCB0aGUgemVybyBieXRlICovCi0JCWZvciAoaSA9IHNpbmdsZV9ieXRlID0gMDsgaSA8IDg7IGkrKykgewotCQkJdTggYml0OwotCQkJc2NsX291dChkZCwgaTJjX2xpbmVfaGlnaCk7Ci0JCQliaXQgPSBzZGFfaW4oZGQsIDApOwotCQkJc2NsX291dChkZCwgaTJjX2xpbmVfbG93KTsKLQkJCXNpbmdsZV9ieXRlIDw8PSAxOwotCQkJc2luZ2xlX2J5dGUgfD0gYml0OwotCQl9CisJCS8qIG5vdyByZWFkIChhbmQgaWdub3JlKSB0aGUgcmVzdWx0aW5nIGJ5dGUgKi8KKwkJcmRfYnl0ZShkZCk7CiAJCXN0b3BfY21kKGRkKTsKIAl9CiAKQEAgLTUwMSw5ICs2MzEsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogVGhlIHB1YmxpYyBlbnRyeS1wb2ludHMgaXBhdGhfZWVwcm9tX3JlYWQoKSBhbmQgaXBhdGhfZWVwcm9tX3dyaXRlKCkKLSAqIGFyZSBub3cganVzdCB3cmFwcGVycyBhcm91bmQgdGhlIGludGVybmFsIGZ1bmN0aW9ucy4KKy8qKgorICogaXBhdGhfZWVwcm9tX3JlYWQgLSByZWNlaXZlcyBieXRlcyBmcm9tIHRoZSBlZXByb20gdmlhIEkyQworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBlZXByb21fb2Zmc2V0OiBhZGRyZXNzIHRvIHJlYWQgZnJvbQorICogQGJ1ZmZlcjogd2hlcmUgdG8gc3RvcmUgcmVzdWx0CisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVjZWl2ZQogICovCiBpbnQgaXBhdGhfZWVwcm9tX3JlYWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBlZXByb21fb2Zmc2V0LAogCQkJdm9pZCAqYnVmZiwgaW50IGxlbikKQEAgLTUxOSw2ICs2NTIsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGlwYXRoX2VlcHJvbV93cml0ZSAtIHdyaXRlcyBkYXRhIHRvIHRoZSBlZXByb20gdmlhIEkyQworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBlZXByb21fb2Zmc2V0OiB3aGVyZSB0byBwbGFjZSBkYXRhCisgKiBAYnVmZmVyOiBkYXRhIHRvIHdyaXRlCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqLwogaW50IGlwYXRoX2VlcHJvbV93cml0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IGVlcHJvbV9vZmZzZXQsCiAJCQljb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewpAQCAtODIwLDcgKzk2MCw3IEBACiAJICogaWYgd2UgbG9nIGFuIGhvdXIgYXQgMzEgbWludXRlcywgdGhlbiB3ZSB3b3VsZCBuZWVkIHRvIHNldAogCSAqIGFjdGl2ZV90aW1lIHRvIC0yOSB0byBhY2N1cmF0ZWx5IGNvdW50IHRoZSBfbmV4dF8gaG91ci4KIAkgKi8KLQlpZiAobmV3X3RpbWUgPiAzNjAwKSB7CisJaWYgKG5ld190aW1lID49IDM2MDApIHsKIAkJbmV3X2hycyA9IG5ld190aW1lIC8gMzYwMDsKIAkJYXRvbWljX3N1YigobmV3X2hycyAqIDM2MDApLCAmZGQtPmlwYXRoX2FjdGl2ZV90aW1lKTsKIAkJbmV3X2hycyArPSBkZC0+aXBhdGhfZWVwX2hyczsKQEAgLTg4NSwzICsxMDI1LDE1OSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9lZXBfc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybjsKIH0KKworc3RhdGljIGludCBpcGF0aF90ZW1wc2Vuc2VfaW50ZXJuYWxfcmVhZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IHJlZ251bSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfY2hhaW5fZGVzYyAqaWNkOworCisJcmV0ID0gLUVOT0VOVDsKKworCWljZCA9IGlwYXRoX2kyY190eXBlKGRkKTsKKwlpZiAoIWljZCkKKwkJZ290byBiYWlsOworCisJaWYgKGljZC0+dGVtcF9kZXYgPT0gSVBBVEhfTk9fREVWKSB7CisJCS8qIHRlbXBzZW5zZSBvbmx5IGV4aXN0cyBvbiBuZXcsIHJlYWwtSTJDIGJvYXJkcyAqLworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoaTJjX3N0YXJ0Y21kKGRkLCBpY2QtPnRlbXBfZGV2IHwgV1JJVEVfQ01EKSkgeworCQlpcGF0aF9kYmcoIkZhaWxlZCB0ZW1wc2Vuc2Ugc3RhcnRjbWRcbiIpOworCQlzdG9wX2NtZChkZCk7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBiYWlsOworCX0KKwlyZXQgPSB3cl9ieXRlKGRkLCByZWdudW0pOworCXN0b3BfY21kKGRkKTsKKwlpZiAocmV0KSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgdGVtcHNlbnNlIFdSIGNvbW1hbmQgJTAyWFxuIiwKKwkJCSAgICAgIHJlZ251bSk7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBiYWlsOworCX0KKwlpZiAoaTJjX3N0YXJ0Y21kKGRkLCBpY2QtPnRlbXBfZGV2IHwgUkVBRF9DTUQpKSB7CisJCWlwYXRoX2RiZygiRmFpbGVkIHRlbXBzZW5zZSBSRCBzdGFydGNtZFxuIik7CisJCXN0b3BfY21kKGRkKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGJhaWw7CisJfQorCS8qCisJICogV2UgY2FuIG9ubHkgY2xvY2sgb3V0IG9uZSBieXRlIHBlciBjb21tYW5kLCBzZW5zaWJseQorCSAqLworCXJldCA9IHJkX2J5dGUoZGQpOworCXN0b3BfY21kKGRkKTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFZBTElEX1RTX1JEX1JFR19NQVNLIDB4QkYKKworLyoqCisgKiBpcGF0aF90ZW1wc2Vuc2VfcmVhZCAtIHJlYWQgcmVnaXN0ZXIgb2YgdGVtcCBzZW5zb3IgdmlhIEkyQworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEByZWdudW06IHJlZ2lzdGVyIHRvIHJlYWQgZnJvbQorICoKKyAqIHJldHVybnMgcmVnIGNvbnRlbnRzICgwLi4yNTUpIG9yIDwgMCBmb3IgZXJyb3IKKyAqLworaW50IGlwYXRoX3RlbXBzZW5zZV9yZWFkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggcmVnbnVtKQoreworCWludCByZXQ7CisKKwlpZiAocmVnbnVtID4gNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByZXR1cm4gYSBib2d1cyB2YWx1ZSBmb3IgKHRoZSBvbmUpIHJlZ2lzdGVyIHdlIGRvIG5vdCBoYXZlICovCisJaWYgKCEoKDEgPDwgcmVnbnVtKSAmIFZBTElEX1RTX1JEX1JFR19NQVNLKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRkLT5pcGF0aF9lZXBfbG9jayk7CisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gaXBhdGhfdGVtcHNlbnNlX2ludGVybmFsX3JlYWQoZGQsIHJlZ251bSk7CisJCW11dGV4X3VubG9jaygmZGQtPmlwYXRoX2VlcF9sb2NrKTsKKwl9CisKKwkvKgorCSAqIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzIGhlcmU6CisJICogcmV0IGlzIGFjdHVhbCB2YWx1ZSAoMC4uMjU1KQorCSAqIHJldCBpcyAtRU5YSU8gb3IgLUVJTlZBTCBmcm9tIGNvZGUgaW4gdGhpcyBmaWxlCisJICogcmV0IGlzIC1FSU5UUiBmcm9tIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZS4KKwkgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlwYXRoX3RlbXBzZW5zZV9pbnRlcm5hbF93cml0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJCSAgdTggcmVnbnVtLCB1OCBkYXRhKQoreworCWludCByZXQgPSAtRU5PRU5UOworCXN0cnVjdCBpMmNfY2hhaW5fZGVzYyAqaWNkOworCisJaWNkID0gaXBhdGhfaTJjX3R5cGUoZGQpOworCWlmICghaWNkKQorCQlnb3RvIGJhaWw7CisKKwlpZiAoaWNkLT50ZW1wX2RldiA9PSBJUEFUSF9OT19ERVYpIHsKKwkJLyogdGVtcHNlbnNlIG9ubHkgZXhpc3RzIG9uIG5ldywgcmVhbC1JMkMgYm9hcmRzICovCisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBiYWlsOworCX0KKwlpZiAoaTJjX3N0YXJ0Y21kKGRkLCBpY2QtPnRlbXBfZGV2IHwgV1JJVEVfQ01EKSkgeworCQlpcGF0aF9kYmcoIkZhaWxlZCB0ZW1wc2Vuc2Ugc3RhcnRjbWRcbiIpOworCQlzdG9wX2NtZChkZCk7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBiYWlsOworCX0KKwlyZXQgPSB3cl9ieXRlKGRkLCByZWdudW0pOworCWlmIChyZXQpIHsKKwkJc3RvcF9jbWQoZGQpOworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHdyaXRlIHRlbXBzZW5zZSBjb21tYW5kICUwMlhcbiIsCisJCQkgICAgICByZWdudW0pOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gYmFpbDsKKwl9CisJcmV0ID0gd3JfYnl0ZShkZCwgZGF0YSk7CisJc3RvcF9jbWQoZGQpOworCXJldCA9IGkyY19zdGFydGNtZChkZCwgaWNkLT50ZW1wX2RldiB8IFJFQURfQ01EKTsKKwlpZiAocmV0KSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgdGVtcHNlbnNlIGRhdGEgd3J0IHRvICUwMlhcbiIsCisJCQkgICAgICByZWdudW0pOworCQlyZXQgPSAtRU5YSU87CisJfQorCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgVkFMSURfVFNfV1JfUkVHX01BU0sgKCgxIDw8IDkpIHwgKDEgPDwgMHhCKSB8ICgxIDw8IDB4RCkpCisKKy8qKgorICogaXBhdGhfdGVtcHNlbnNlX3dyaXRlIC0gd3JpdGUgcmVnaXN0ZXIgb2YgdGVtcCBzZW5zb3IgdmlhIEkyQworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEByZWdudW06IHJlZ2lzdGVyIHRvIHdyaXRlCisgKiBAZGF0YTogZGF0YSB0byB3cml0ZQorICoKKyAqIHJldHVybnMgMCBmb3Igc3VjY2VzcyBvciA8IDAgZm9yIGVycm9yCisgKi8KK2ludCBpcGF0aF90ZW1wc2Vuc2Vfd3JpdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCByZWdudW0sIHU4IGRhdGEpCit7CisJaW50IHJldDsKKworCWlmIChyZWdudW0gPiAxNSB8fCAhKCgxIDw8IHJlZ251bSkgJiBWQUxJRF9UU19XUl9SRUdfTUFTSykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZC0+aXBhdGhfZWVwX2xvY2spOworCWlmICghcmV0KSB7CisJCXJldCA9IGlwYXRoX3RlbXBzZW5zZV9pbnRlcm5hbF93cml0ZShkZCwgcmVnbnVtLCBkYXRhKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZC0+aXBhdGhfZWVwX2xvY2spOworCX0KKworCS8qCisJICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKKwkgKiByZXQgaXMgMCBmb3Igc3VjY2VzcworCSAqIHJldCBpcyAtRU5YSU8gb3IgLUVJTlZBTCBmcm9tIGNvZGUgaW4gdGhpcyBmaWxlCisJICogcmV0IGlzIC1FSU5UUiBmcm9tIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZS4KKwkgKi8KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwppbmRleCA3ZTAyNWM4Li44YjE3NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMzYsMjEgKzM2LDI4IEBACiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF91c2VyX3NkbWEuaCIKIAogc3RhdGljIGludCBpcGF0aF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgaXBhdGhfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIHNzaXplX3QgaXBhdGhfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LAogCQkJICAgbG9mZl90ICopOworc3RhdGljIHNzaXplX3QgaXBhdGhfd3JpdGV2KHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKKwkJCSAgICB1bnNpZ25lZCBsb25nICwgbG9mZl90KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXBhdGhfcG9sbChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CiBzdGF0aWMgaW50IGlwYXRoX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcGF0aF9maWxlX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkud3JpdGUgPSBpcGF0aF93cml0ZSwKKwkuYWlvX3dyaXRlID0gaXBhdGhfd3JpdGV2LAogCS5vcGVuID0gaXBhdGhfb3BlbiwKIAkucmVsZWFzZSA9IGlwYXRoX2Nsb3NlLAogCS5wb2xsID0gaXBhdGhfcG9sbCwKQEAgLTE4NCw2ICsxOTEsMjkgQEAKIAkJa2luZm8tPnNwaV9waW9idWZiYXNlID0gKHU2NCkgcGQtPnBvcnRfcGlvYnVmcyArCiAJCQlkZC0+aXBhdGhfcGFsaWduICoga2luZm8tPnNwaV9waW9jbnQgKiBzbGF2ZTsKIAl9CisKKwkvKgorCSAqIFNldCB0aGUgUElPIGF2YWlsIHVwZGF0ZSB0aHJlc2hvbGQgdG8gbm8gbGFyZ2VyCisJICogdGhhbiB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcGVyIHByb2Nlc3MuIE5vdGUgdGhhdAorCSAqIHdlIGRlY3JlYXNlIGl0IGhlcmUsIGJ1dCB3b24ndCBldmVyIGluY3JlYXNlIGl0LgorCSAqLworCWlmIChkZC0+aXBhdGhfcGlvdXBkX3RocmVzaCAmJgorCSAgICBraW5mby0+c3BpX3Bpb2NudCA8IGRkLT5pcGF0aF9waW91cGRfdGhyZXNoKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJZGQtPmlwYXRoX3Bpb3VwZF90aHJlc2ggPSBraW5mby0+c3BpX3Bpb2NudDsKKwkJaXBhdGhfZGJnKCJEZWNyZWFzZWQgcGlvIHVwZGF0ZSB0aHJlc2hvbGQgdG8gJXVcbiIsCisJCQlkZC0+aXBhdGhfcGlvdXBkX3RocmVzaCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCQlkZC0+aXBhdGhfc2VuZGN0cmwgJj0gfihJTkZJTklQQVRIX1NfVVBEVEhSRVNIX01BU0sKKwkJCTw8IElORklOSVBBVEhfU19VUERUSFJFU0hfU0hJRlQpOworCQlkZC0+aXBhdGhfc2VuZGN0cmwgfD0gZGQtPmlwYXRoX3Bpb3VwZF90aHJlc2gKKwkJCTw8IElORklOSVBBVEhfU19VUERUSFJFU0hfU0hJRlQ7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQlkZC0+aXBhdGhfc2VuZGN0cmwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCX0KKwogCWlmIChzaGFyZWQpIHsKIAkJa2luZm8tPnNwaV9wb3J0X3VyZWdiYXNlID0gKHU2NCkgZGQtPmlwYXRoX3VyZWdiYXNlICsKIAkJCWRkLT5pcGF0aF91cmVnX2FsaWduICogcGQtPnBvcnRfcG9ydDsKQEAgLTIxOSw3ICsyNDksMTIgQEAKIAlraW5mby0+c3BpX3Bpb2FsaWduID0gZGQtPmlwYXRoX3BhbGlnbjsKIAogCWtpbmZvLT5zcGlfcXBhaXIgPSBJUEFUSF9LRF9RUDsKLQlraW5mby0+c3BpX3Bpb3NpemUgPSBkZC0+aXBhdGhfaWJtYXhsZW47CisJLyoKKwkgKiB1c2VyIG1vZGUgUElPIGJ1ZmZlcnMgYXJlIGFsd2F5cyAyS0IsIGV2ZW4gd2hlbiA0S0IgY2FuCisJICogYmUgcmVjZWl2ZWQsIGFuZCBzZW50IHZpYSB0aGUga2VybmVsOyB0aGlzIGlzIGlibWF4bGVuCisJICogZm9yIDJLIE1UVS4KKwkgKi8KKwlraW5mby0+c3BpX3Bpb3NpemUgPSBkZC0+aXBhdGhfcGlvc2l6ZTJrIC0gMiAqIHNpemVvZih1MzIpOwogCWtpbmZvLT5zcGlfbXR1ID0gZGQtPmlwYXRoX2libWF4bGVuOwkvKiBtYXhsZW4sIG5vdCBpYm10dSAqLwogCWtpbmZvLT5zcGlfcG9ydCA9IHBkLT5wb3J0X3BvcnQ7CiAJa2luZm8tPnNwaV9zdWJwb3J0ID0gc3VicG9ydF9mcChmcCk7CkBAIC0xNTk4LDYgKzE2MzMsOSBAQAogCQlwb3J0X2ZwKGZwKSA9IHBkOwogCQlwZC0+cG9ydF9waWQgPSBjdXJyZW50LT5waWQ7CiAJCXN0cm5jcHkocGQtPnBvcnRfY29tbSwgY3VycmVudC0+Y29tbSwgc2l6ZW9mKHBkLT5wb3J0X2NvbW0pKTsKKwkJaXBhdGhfY2hnX3Bpb2F2YWlsa2VybmVsKGRkLAorCQkJZGQtPmlwYXRoX3BidWZzcG9ydCAqIChwZC0+cG9ydF9wb3J0IC0gMSksCisJCQlkZC0+aXBhdGhfcGJ1ZnNwb3J0LCAwKTsKIAkJaXBhdGhfc3RhdHMuc3BzX3BvcnRzKys7CiAJCXJldCA9IDA7CiAJfSBlbHNlCkBAIC0xNzYwLDcgKzE3OTgsNyBAQAogCWZvciAobmRldiA9IDA7IG5kZXYgPCBkZXZtYXg7IG5kZXYrKykgewogCQlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBpcGF0aF9sb29rdXAobmRldik7CiAKLQkJaWYgKCFkZCkKKwkJaWYgKCF1c2FibGUoZGQpKQogCQkJY29udGludWU7CiAJCWZvciAoaSA9IDE7IGkgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IGkrKykgewogCQkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFtpXTsKQEAgLTE4MzksMTAgKzE4NzcsOSBAQAogCWlmIChpcGF0aF9jb21wYXRpYmxlX3N1YnBvcnRzKHN3bWFqb3IsIHN3bWlub3IpICYmCiAJICAgIHVpbmZvLT5zcHVfc3VicG9ydF9jbnQgJiYKIAkgICAgKHJldCA9IGZpbmRfc2hhcmVkX3BvcnQoZnAsIHVpbmZvKSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CiAJCWlmIChyZXQgPiAwKQogCQkJcmV0ID0gMDsKLQkJZ290byBkb25lOworCQlnb3RvIGRvbmVfY2hrX3NkbWE7CiAJfQogCiAJaV9taW5vciA9IGltaW5vcihmcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgLSBJUEFUSF9VU0VSX01JTk9SX0JBU0U7CkBAIC0xODU0LDYgKzE4OTEsMjEgQEAKIAllbHNlCiAJCXJldCA9IGZpbmRfYmVzdF91bml0KGZwLCB1aW5mbyk7CiAKK2RvbmVfY2hrX3NkbWE6CisJaWYgKCFyZXQpIHsKKwkJc3RydWN0IGlwYXRoX2ZpbGVkYXRhICpmZCA9IGZwLT5wcml2YXRlX2RhdGE7CisJCWNvbnN0IHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBmZC0+cGQ7CisJCWNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCisJCWZkLT5wcSA9IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZV9jcmVhdGUoJmRkLT5wY2lkZXYtPmRldiwKKwkJCQkJCSAgICAgIGRkLT5pcGF0aF91bml0LAorCQkJCQkJICAgICAgcGQtPnBvcnRfcG9ydCwKKwkJCQkJCSAgICAgIGZkLT5zdWJwb3J0KTsKKworCQlpZiAoIWZkLT5wcSkKKwkJCXJldCA9IC1FTk9NRU07CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CiAKIGRvbmU6CkBAIC0xOTIyLDIyICsxOTc0LDI1IEBACiAJcGQtPnBvcnRfaGRycWZ1bGxfcG9sbCA9IHBkLT5wb3J0X2hkcnFmdWxsOwogCiAJLyoKLQkgKiBub3cgZW5hYmxlIHRoZSBwb3J0OyB0aGUgdGFpbCByZWdpc3RlcnMgd2lsbCBiZSB3cml0dGVuIHRvIG1lbW9yeQotCSAqIGJ5IHRoZSBjaGlwIGFzIHNvb24gYXMgaXQgc2VlcyB0aGUgd3JpdGUgdG8KLQkgKiBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwuICBUaGUgdXBkYXRlIG9ubHkgaGFwcGVucyBvbgotCSAqIHRyYW5zaXRpb24gZnJvbSAwIHRvIDEsIHNvIGNsZWFyIGl0IGZpcnN0LCB0aGVuIHNldCBpdCBhcyBwYXJ0IG9mCi0JICogZW5hYmxpbmcgdGhlIHBvcnQuICBUaGlzIHdpbGwgKHZlcnkgYnJpZWZseSkgYWZmZWN0IGFueSBvdGhlcgotCSAqIG9wZW4gcG9ydHMsIGJ1dCBpdCBzaG91bGRuJ3QgYmUgbG9uZyBlbm91Z2ggdG8gYmUgYW4gaXNzdWUuCi0JICogV2UgZXhwbGljdGx5IHNldCB0aGUgaW4tbWVtb3J5IGNvcHkgdG8gMCBiZWZvcmVoYW5kLCBzbyB3ZSBkb24ndAotCSAqIGhhdmUgdG8gd2FpdCB0byBiZSBzdXJlIHRoZSBETUEgdXBkYXRlIGhhcyBoYXBwZW5lZC4KKwkgKiBOb3cgZW5hYmxlIHRoZSBwb3J0IGZvciByZWNlaXZlLgorCSAqIEZvciBjaGlwcyB0aGF0IGFyZSBzZXQgdG8gRE1BIHRoZSB0YWlsIHJlZ2lzdGVyIHRvIG1lbW9yeQorCSAqIHdoZW4gdGhleSBjaGFuZ2UgKGFuZCB3aGVuIHRoZSB1cGRhdGUgYml0IHRyYW5zaXRpb25zIGZyb20KKwkgKiAwIHRvIDEuICBTbyBmb3IgdGhvc2UgY2hpcHMsIHdlIHR1cm4gaXQgb2ZmIGFuZCB0aGVuIGJhY2sgb24uCisJICogVGhpcyB3aWxsICh2ZXJ5IGJyaWVmbHkpIGFmZmVjdCBhbnkgb3RoZXIgb3BlbiBwb3J0cywgYnV0IHRoZQorCSAqIGR1cmF0aW9uIGlzIHZlcnkgc2hvcnQsIGFuZCB0aGVyZWZvcmUgaXNuJ3QgYW4gaXNzdWUuICBXZQorCSAqIGV4cGxpY3RseSBzZXQgdGhlIGluLW1lbW9yeSB0YWlsIGNvcHkgdG8gMCBiZWZvcmVoYW5kLCBzbyB3ZQorCSAqIGRvbid0IGhhdmUgdG8gd2FpdCB0byBiZSBzdXJlIHRoZSBETUEgdXBkYXRlIGhhcyBoYXBwZW5lZAorCSAqIChjaGlwIHJlc2V0cyBoZWFkL3RhaWwgdG8gMCBvbiB0cmFuc2l0aW9uIHRvIGVuYWJsZSkuCiAJICovCi0JaWYgKHBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyKQotCQlpcGF0aF9jbGVhcl9yY3ZoZHJ0YWlsKHBkKTsKIAlzZXRfYml0KGRkLT5pcGF0aF9yX3BvcnRlbmFibGVfc2hpZnQgKyBwZC0+cG9ydF9wb3J0LAogCQkmZGQtPmlwYXRoX3JjdmN0cmwpOwotCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9OT0RNQV9SVEFJTCkpIHsKKwkJaWYgKHBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyKQorCQkJaXBhdGhfY2xlYXJfcmN2aGRydGFpbChwZCk7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKIAkJCWRkLT5pcGF0aF9yY3ZjdHJsICYKIAkJCX4oMVVMTCA8PCBkZC0+aXBhdGhfcl90YWlsdXBkX3NoaWZ0KSk7CisJfQogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKIAkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CiAJLyogTm90aWZ5IGFueSB3YWl0aW5nIHNsYXZlcyAqLwpAQCAtMTk2NSwxNCArMjAyMCwxNSBAQAogCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlBvcnQgJXUgdW5sb2NraW5nIGFueSBsb2NrZWQgZXhwVElEIHBhZ2VzXG4iLAogCQkgICBwZC0+cG9ydF9wb3J0KTsKIAlmb3IgKGkgPSBwb3J0X3RpZGJhc2U7IGkgPCBtYXh0aWQ7IGkrKykgewotCQlpZiAoIWRkLT5pcGF0aF9wYWdlc2hhZG93W2ldKQorCQlzdHJ1Y3QgcGFnZSAqcHMgPSBkZC0+aXBhdGhfcGFnZXNoYWRvd1tpXTsKKworCQlpZiAoIXBzKQogCQkJY29udGludWU7CiAKKwkJZGQtPmlwYXRoX3BhZ2VzaGFkb3dbaV0gPSBOVUxMOwogCQlwY2lfdW5tYXBfcGFnZShkZC0+cGNpZGV2LCBkZC0+aXBhdGhfcGh5c3NoYWRvd1tpXSwKIAkJCVBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzX29uX2Nsb3NlKCZkZC0+aXBhdGhfcGFnZXNoYWRvd1tpXSwKLQkJCQkJCSAgMSk7Ci0JCWRkLT5pcGF0aF9wYWdlc2hhZG93W2ldID0gTlVMTDsKKwkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzX29uX2Nsb3NlKCZwcywgMSk7CiAJCWNudCsrOwogCQlpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MrKzsKIAl9CkBAIC0yMDA3LDYgKzIwNjMsMTMgQEAKIAkJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CiAJCWdvdG8gYmFpbDsKIAl9CisKKwlkZCA9IHBkLT5wb3J0X2RkOworCisJLyogZHJhaW4gdXNlciBzZG1hIHF1ZXVlICovCisJaXBhdGhfdXNlcl9zZG1hX3F1ZXVlX2RyYWluKGRkLCBmZC0+cHEpOworCWlwYXRoX3VzZXJfc2RtYV9xdWV1ZV9kZXN0cm95KGZkLT5wcSk7CisKIAlpZiAoLS1wZC0+cG9ydF9jbnQpIHsKIAkJLyoKIAkJICogWFhYIElmIHRoZSBtYXN0ZXIgY2xvc2VzIHRoZSBwb3J0IGJlZm9yZSB0aGUgc2xhdmUocyksCkBAIC0yMDE5LDcgKzIwODIsNiBAQAogCQlnb3RvIGJhaWw7CiAJfQogCXBvcnQgPSBwZC0+cG9ydF9wb3J0OwotCWRkID0gcGQtPnBvcnRfZGQ7CiAKIAlpZiAocGQtPnBvcnRfaGRycWZ1bGwpIHsKIAkJaXBhdGhfY2RiZyhQUk9DLCAiJXNbJXVdIGhhZCAldSByY3ZoZHJxZnVsbCBlcnJvcnMgIgpAQCAtMjAzOSw3ICsyMTAxLDcgQEAKIAkJCXBkLT5wb3J0X3Jjdm5vd2FpdCA9IHBkLT5wb3J0X3Bpb25vd2FpdCA9IDA7CiAJfQogCWlmIChwZC0+cG9ydF9mbGFnKSB7Ci0JCWlwYXRoX2RiZygicG9ydCAldSBwb3J0X2ZsYWcgc3RpbGwgc2V0IHRvIDB4JWx4XG4iLAorCQlpcGF0aF9jZGJnKFBST0MsICJwb3J0ICV1IHBvcnRfZmxhZyBzZXQ6IDB4JWx4XG4iLAogCQkJICBwZC0+cG9ydF9wb3J0LCBwZC0+cG9ydF9mbGFnKTsKIAkJcGQtPnBvcnRfZmxhZyA9IDA7CiAJfQpAQCAtMjA3Niw2ICsyMTM4LDcgQEAKIAogCQlpID0gZGQtPmlwYXRoX3BidWZzcG9ydCAqIChwb3J0IC0gMSk7CiAJCWlwYXRoX2Rpc2FybV9waW9idWZzKGRkLCBpLCBkZC0+aXBhdGhfcGJ1ZnNwb3J0KTsKKwkJaXBhdGhfY2hnX3Bpb2F2YWlsa2VybmVsKGRkLCBpLCBkZC0+aXBhdGhfcGJ1ZnNwb3J0LCAxKTsKIAogCQlkZC0+aXBhdGhfZl9jbGVhcl90aWRzKGRkLCBwZC0+cG9ydF9wb3J0KTsKIApAQCAtMjE0MCwxNyArMjIwMywzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaXBhdGhfZm9yY2VfcGlvX2F2YWlsX3VwZGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCitzdGF0aWMgaW50IGlwYXRoX3NkbWFfZ2V0X2luZmxpZ2h0KHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKnBxLAorCQkJCSAgIHUzMiBfX3VzZXIgKmluZmxpZ2h0cCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IHUzMiB2YWwgPSBpcGF0aF91c2VyX3NkbWFfaW5mbGlnaHRfY291bnRlcihwcSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKLQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAotCQlkZC0+aXBhdGhfc2VuZGN0cmwgJiB+SU5GSU5JUEFUSF9TX1BJT0JVRkFWQUlMVVBEKTsKLQlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKLQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLCBkZC0+aXBhdGhfc2VuZGN0cmwpOwotCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7CisJaWYgKHB1dF91c2VyKHZhbCwgaW5mbGlnaHRwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcGF0aF9zZG1hX2dldF9jb21wbGV0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICAgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEsCisJCQkJICAgdTMyIF9fdXNlciAqY29tcGxldGVwKQoreworCXUzMiB2YWw7CisJaW50IGVycjsKKworCWVyciA9IGlwYXRoX3VzZXJfc2RtYV9tYWtlX3Byb2dyZXNzKGRkLCBwcSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwl2YWwgPSBpcGF0aF91c2VyX3NkbWFfY29tcGxldGVfY291bnRlcihwcSk7CisJaWYgKHB1dF91c2VyKHZhbCwgY29tcGxldGVwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMjksNiArMjMwNiwxNiBAQAogCQlkZXN0ID0gJmNtZC5jbWQuYXJtbGF1bmNoX2N0cmw7CiAJCXNyYyA9ICZ1Y21kLT5jbWQuYXJtbGF1bmNoX2N0cmw7CiAJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1NETUFfSU5GTElHSFQ6CisJCWNvcHkgPSBzaXplb2YoY21kLmNtZC5zZG1hX2luZmxpZ2h0KTsKKwkJZGVzdCA9ICZjbWQuY21kLnNkbWFfaW5mbGlnaHQ7CisJCXNyYyA9ICZ1Y21kLT5jbWQuc2RtYV9pbmZsaWdodDsKKwkJYnJlYWs7CisJY2FzZSBJUEFUSF9DTURfU0RNQV9DT01QTEVURToKKwkJY29weSA9IHNpemVvZihjbWQuY21kLnNkbWFfY29tcGxldGUpOworCQlkZXN0ID0gJmNtZC5jbWQuc2RtYV9jb21wbGV0ZTsKKwkJc3JjID0gJnVjbWQtPmNtZC5zZG1hX2NvbXBsZXRlOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGJhaWw7CkBAIC0yMjk5LDcgKzIzODYsNyBAQAogCQkJCQkgICBjbWQuY21kLnNsYXZlX21hc2tfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgSVBBVEhfQ01EX1BJT0FWQUlMVVBEOgotCQlyZXQgPSBpcGF0aF9mb3JjZV9waW9fYXZhaWxfdXBkYXRlKHBkLT5wb3J0X2RkKTsKKwkJaXBhdGhfZm9yY2VfcGlvX2F2YWlsX3VwZGF0ZShwZC0+cG9ydF9kZCk7CiAJCWJyZWFrOwogCWNhc2UgSVBBVEhfQ01EX1BPTExfVFlQRToKIAkJcGQtPnBvbGxfdHlwZSA9IGNtZC5jbWQucG9sbF90eXBlOwpAQCAtMjMxMCw2ICsyMzk3LDE3IEBACiAJCWVsc2UKIAkJCWlwYXRoX2Rpc2FibGVfYXJtbGF1bmNoKHBkLT5wb3J0X2RkKTsKIAkJYnJlYWs7CisJY2FzZSBJUEFUSF9DTURfU0RNQV9JTkZMSUdIVDoKKwkJcmV0ID0gaXBhdGhfc2RtYV9nZXRfaW5mbGlnaHQodXNlcl9zZG1hX3F1ZXVlX2ZwKGZwKSwKKwkJCQkJICAgICAgKHUzMiBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpCisJCQkJCSAgICAgIGNtZC5jbWQuc2RtYV9pbmZsaWdodCk7CisJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1NETUFfQ09NUExFVEU6CisJCXJldCA9IGlwYXRoX3NkbWFfZ2V0X2NvbXBsZXRlKHBkLT5wb3J0X2RkLAorCQkJCQkgICAgICB1c2VyX3NkbWFfcXVldWVfZnAoZnApLAorCQkJCQkgICAgICAodTMyIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykKKwkJCQkJICAgICAgY21kLmNtZC5zZG1hX2NvbXBsZXRlKTsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKHJldCA+PSAwKQpAQCAtMjMxOSwxNCArMjQxNywyOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGlwYXRoX3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZGltLCBsb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBmaWxlICpmaWxwID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgaXBhdGhfZmlsZWRhdGEgKmZwID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBwb3J0X2ZwKGZpbHApOworCXN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKnBxID0gZnAtPnBxOworCisJaWYgKCFkaW0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGlwYXRoX3VzZXJfc2RtYV93cml0ZXYocGQtPnBvcnRfZGQsIHBxLCBpb3YsIGRpbSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlwYXRoX2NsYXNzOwogCiBzdGF0aWMgaW50IGluaXRfY2RldihpbnQgbWlub3IsIGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCi0JCSAgICAgc3RydWN0IGNkZXYgKipjZGV2cCwgc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApCisJCSAgICAgc3RydWN0IGNkZXYgKipjZGV2cCwgc3RydWN0IGRldmljZSAqKmRldnApCiB7CiAJY29uc3QgZGV2X3QgZGV2ID0gTUtERVYoSVBBVEhfTUFKT1IsIG1pbm9yKTsKIAlzdHJ1Y3QgY2RldiAqY2RldiA9IE5VTEw7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCWludCByZXQ7CiAKIAljZGV2ID0gY2Rldl9hbGxvYygpOwpAQCAtMjM1MCwxMiArMjQ2MiwxMiBAQAogCQlnb3RvIGVycl9jZGV2OwogCX0KIAotCWNsYXNzX2RldiA9IGNsYXNzX2RldmljZV9jcmVhdGUoaXBhdGhfY2xhc3MsIE5VTEwsIGRldiwgTlVMTCwgbmFtZSk7CisJZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShpcGF0aF9jbGFzcywgTlVMTCwgZGV2LCBuYW1lKTsKIAotCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgewotCQlyZXQgPSBQVFJfRVJSKGNsYXNzX2Rldik7CisJaWYgKElTX0VSUihkZXZpY2UpKSB7CisJCXJldCA9IFBUUl9FUlIoZGV2aWNlKTsKIAkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FICI6IENvdWxkIG5vdCBjcmVhdGUgIgotCQkgICAgICAgImNsYXNzX2RldiBmb3IgbWlub3IgJWQsICVzIChlcnIgJWQpXG4iLAorCQkgICAgICAgImRldmljZSBmb3IgbWlub3IgJWQsICVzIChlcnIgJWQpXG4iLAogCQkgICAgICAgbWlub3IsIG5hbWUsIC1yZXQpOwogCQlnb3RvIGVycl9jZGV2OwogCX0KQEAgLTIzNjksMjkgKzI0ODEsMjkgQEAKIGRvbmU6CiAJaWYgKHJldCA+PSAwKSB7CiAJCSpjZGV2cCA9IGNkZXY7Ci0JCSpjbGFzc19kZXZwID0gY2xhc3NfZGV2OworCQkqZGV2cCA9IGRldmljZTsKIAl9IGVsc2UgewogCQkqY2RldnAgPSBOVUxMOwotCQkqY2xhc3NfZGV2cCA9IE5VTEw7CisJCSpkZXZwID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgaXBhdGhfY2Rldl9pbml0KGludCBtaW5vciwgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKLQkJICAgIHN0cnVjdCBjZGV2ICoqY2RldnAsIHN0cnVjdCBjbGFzc19kZXZpY2UgKipjbGFzc19kZXZwKQorCQkgICAgc3RydWN0IGNkZXYgKipjZGV2cCwgc3RydWN0IGRldmljZSAqKmRldnApCiB7Ci0JcmV0dXJuIGluaXRfY2RldihtaW5vciwgbmFtZSwgZm9wcywgY2RldnAsIGNsYXNzX2RldnApOworCXJldHVybiBpbml0X2NkZXYobWlub3IsIG5hbWUsIGZvcHMsIGNkZXZwLCBkZXZwKTsKIH0KIAogc3RhdGljIHZvaWQgY2xlYW51cF9jZGV2KHN0cnVjdCBjZGV2ICoqY2RldnAsCi0JCQkgc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApCisJCQkgc3RydWN0IGRldmljZSAqKmRldnApCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gKmNsYXNzX2RldnA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gKmRldnA7CiAKLQlpZiAoY2xhc3NfZGV2KSB7Ci0JCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7Ci0JCSpjbGFzc19kZXZwID0gTlVMTDsKKwlpZiAoZGV2KSB7CisJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CisJCSpkZXZwID0gTlVMTDsKIAl9CiAKIAlpZiAoKmNkZXZwKSB7CkBAIC0yNDAxLDEzICsyNTEzLDEzIEBACiB9CiAKIHZvaWQgaXBhdGhfY2Rldl9jbGVhbnVwKHN0cnVjdCBjZGV2ICoqY2RldnAsCi0JCQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICoqY2xhc3NfZGV2cCkKKwkJCXN0cnVjdCBkZXZpY2UgKipkZXZwKQogewotCWNsZWFudXBfY2RldihjZGV2cCwgY2xhc3NfZGV2cCk7CisJY2xlYW51cF9jZGV2KGNkZXZwLCBkZXZwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjZGV2ICp3aWxkY2FyZF9jZGV2Owotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKndpbGRjYXJkX2NsYXNzX2RldjsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICp3aWxkY2FyZF9kZXY7CiAKIHN0YXRpYyBjb25zdCBkZXZfdCBkZXYgPSBNS0RFVihJUEFUSF9NQUpPUiwgMCk7CiAKQEAgLTI0NjQsNyArMjU3Niw3IEBACiAJCQlnb3RvIGJhaWw7CiAJCX0KIAkJcmV0ID0gaW5pdF9jZGV2KDAsICJpcGF0aCIsICZpcGF0aF9maWxlX29wcywgJndpbGRjYXJkX2NkZXYsCi0JCQkJJndpbGRjYXJkX2NsYXNzX2Rldik7CisJCQkJJndpbGRjYXJkX2Rldik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGQgbm90IGNyZWF0ZSB3aWxkY2FyZCAiCiAJCQkJICAgICAgIm1pbm9yOiBlcnJvciAlZFxuIiwgLXJldCk7CkBAIC0yNDc3LDcgKzI1ODksNyBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImlwYXRoJWQiLCBkZC0+aXBhdGhfdW5pdCk7CiAKIAlyZXQgPSBpbml0X2NkZXYoZGQtPmlwYXRoX3VuaXQgKyAxLCBuYW1lLCAmaXBhdGhfZmlsZV9vcHMsCi0JCQkmZGQtPnVzZXJfY2RldiwgJmRkLT51c2VyX2NsYXNzX2Rldik7CisJCQkmZGQtPnVzZXJfY2RldiwgJmRkLT51c2VyX2Rldik7CiAJaWYgKHJldCA8IDApCiAJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZCBub3QgY3JlYXRlIHVzZXIgbWlub3IgJWQsICVzXG4iLAogCQkJICAgICAgZGQtPmlwYXRoX3VuaXQgKyAxLCBuYW1lKTsKQEAgLTI0OTIsMTMgKzI2MDQsMTMgQEAKIAogdm9pZCBpcGF0aF91c2VyX3JlbW92ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JY2xlYW51cF9jZGV2KCZkZC0+dXNlcl9jZGV2LCAmZGQtPnVzZXJfY2xhc3NfZGV2KTsKKwljbGVhbnVwX2NkZXYoJmRkLT51c2VyX2NkZXYsICZkZC0+dXNlcl9kZXYpOwogCiAJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZ1c2VyX2NvdW50KSA9PSAwKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmdXNlcl9zZXR1cCkgPT0gMCkKIAkJCWdvdG8gYmFpbDsKIAotCQljbGVhbnVwX2NkZXYoJndpbGRjYXJkX2NkZXYsICZ3aWxkY2FyZF9jbGFzc19kZXYpOworCQljbGVhbnVwX2NkZXYoJndpbGRjYXJkX2NkZXYsICZ3aWxkY2FyZF9kZXYpOwogCQl1c2VyX2NsZWFudXAoKTsKIAogCQlhdG9taWNfc2V0KCZ1c2VyX3NldHVwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCmluZGV4IDllMmNlZDMuLjAyODMxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKICNpbmNsdWRlICJpcGF0aF9yZWdpc3RlcnMuaCIKQEAgLTMwNSw3ICszMDYsOSBAQAogCiAvKiBrcl9pbnRzdGF0dXMsIGtyX2ludGNsZWFyLCBrcl9pbnRtYXNrIGJpdHMgKi8KICNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLICgoMVU8PDkpLTEpCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZVUkdfU0hJRlQgMAogI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSyAoKDFVPDw5KS0xKQorI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQgMTIKIAogLyoga3JfaHdlcnJjbGVhciwga3JfaHdlcnJtYXNrLCBrcl9od2VycnN0YXR1cywgYml0cyAqLwogI2RlZmluZSBJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfU0hJRlQgMApAQCAtNDc2LDcgKzQ3OSwxMyBAQAogI2RlZmluZSBSWEVfRUFHRVJfUEFSSVRZIChJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfRUFHRVJUSUQgXAogCQkJICA8PCBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpCiAKLXN0YXRpYyBpbnQgaXBhdGhfaHRfdHhlX3JlY292ZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CitzdGF0aWMgdm9pZCBpcGF0aF9odF90eGVfcmVjb3ZlcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJKytpcGF0aF9zdGF0cy5zcHNfdHhlcGFyaXR5OworCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCSJSZWNvdmVyaW5nIGZyb20gVFhFIFBJTyBwYXJpdHkgZXJyb3JcbiIpOworfQorCiAKIC8qKgogICogaXBhdGhfaHRfaGFuZGxlX2h3ZXJyb3JzIC0gZGlzcGxheSBoYXJkd2FyZSBlcnJvcnMuCkBAIC01NTcsMTEgKzU2NiwxMSBAQAogCQkgKiBvY2N1ciBpZiBhIHByb2Nlc3NvciBzcGVjdWxhdGl2ZSByZWFkIGlzIGRvbmUgdG8gdGhlIFBJTwogCQkgKiBidWZmZXIgd2hpbGUgd2UgYXJlIHNlbmRpbmcgYSBwYWNrZXQsIGZvciBleGFtcGxlLgogCQkgKi8KLQkJaWYgKChod2VycnMgJiBUWEVfUElPX1BBUklUWSkgJiYgaXBhdGhfaHRfdHhlX3JlY292ZXIoZGQpKQorCQlpZiAoaHdlcnJzICYgVFhFX1BJT19QQVJJVFkpIHsKKwkJCWlwYXRoX2h0X3R4ZV9yZWNvdmVyKGRkKTsKIAkJCWh3ZXJycyAmPSB+VFhFX1BJT19QQVJJVFk7Ci0JCWlmIChod2VycnMgJiBSWEVfRUFHRVJfUEFSSVRZKQotCQkJaXBhdGhfZGV2X2VycihkZCwgIlJYRSBwYXJpdHksIEVhZ2VyIFRJRCBlcnJvciBpcyBub3QgIgotCQkJCSJyZWNvdmVyYWJsZVxuIik7CisJCX0KKwogCQlpZiAoIWh3ZXJycykgewogCQkJaXBhdGhfZGJnKCJDbGVhcmluZyBmcmVlemVtb2RlIG9uIGlnbm9yZWQgb3IgIgogCQkJCSAgInJlY292ZXJlZCBoYXJkd2FyZSBlcnJvclxuIik7CkBAIC03MzUsMTEgKzc0NCwxMCBAQAogCSAqLwogCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF8zMkJJVENPVU5URVJTOwogCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9HUElPX0lOVFI7Ci0JaWYgKGRkLT5pcGF0aF9odHNwZWVkICE9IDgwMCkKKwlpZiAoZGQtPmlwYXRoX2xidXNfc3BlZWQgIT0gODAwKQogCQlpcGF0aF9kZXZfZXJyKGRkLAogCQkJICAgICAgIkluY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIEhUIEAgJXVNSHpcbiIsCi0JCQkgICAgICBkZC0+aXBhdGhfaHRzcGVlZCk7Ci0JcmV0ID0gMDsKKwkJCSAgICAgIGRkLT5pcGF0aF9sYnVzX3NwZWVkKTsKIAogCS8qCiAJICogc2V0IGhlcmUsIG5vdCBpbiBpcGF0aF9pbml0XypfZnVuY3MgYmVjYXVzZSB3ZSBoYXZlIHRvIGRvCkBAIC04MzksNyArODQ3LDcgQEAKIAkJCS8qCiAJCQkgKiBub3cgd3JpdGUgdGhlbSBiYWNrIHRvIGNsZWFyIHRoZSBlcnJvci4KIAkJCSAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGxpbmtfb2ZmLAorCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIGxpbmtfb2ZmLAogCQkJCQkgICAgICBsaW5rY3RybCAmICgweGYgPDwgOCkpOwogCQl9CiAJfQpAQCAtOTA0LDcgKzkxMiw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWRkLT5pcGF0aF9odHdpZHRoID0gd2lkdGg7CisJCWRkLT5pcGF0aF9sYnVzX3dpZHRoID0gd2lkdGg7CiAKIAkJaWYgKGxpbmt3aWR0aCAhPSAweDExKSB7CiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiTm90IGNvbmZpZ3VyZWQgZm9yIDE2IGJpdCBIVCAiCkBAIC05NTIsOCArOTYwLDEzIEBACiAJCQlzcGVlZCA9IDIwMDsKIAkJCWJyZWFrOwogCQl9Ci0JCWRkLT5pcGF0aF9odHNwZWVkID0gc3BlZWQ7CisJCWRkLT5pcGF0aF9sYnVzX3NwZWVkID0gc3BlZWQ7CiAJfQorCisJc25wcmludGYoZGQtPmlwYXRoX2xidXNfaW5mbywgc2l6ZW9mKGRkLT5pcGF0aF9sYnVzX2luZm8pLAorCQkiSHlwZXJUcmFuc3BvcnQsJXVNSHoseCV1XG4iLAorCQlkZC0+aXBhdGhfbGJ1c19zcGVlZCwKKwkJZGQtPmlwYXRoX2xidXNfd2lkdGgpOwogfQogCiBzdGF0aWMgaW50IGlwYXRoX2h0X2ludGNvbmZpZyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCkBAIC0xNjUzLDIyICsxNjY2LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGlwYXRoX2h0X3R4ZV9yZWNvdmVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQlpbnQgY250ID0gKytpcGF0aF9zdGF0cy5zcHNfdHhlcGFyaXR5OwotCWlmIChjbnQgPj0gSVBBVEhfTUFYX1BBUklUWV9BVFRFTVBUUykgIHsKLQkJaWYgKGNudCA9PSBJUEFUSF9NQVhfUEFSSVRZX0FUVEVNUFRTKQotCQkJaXBhdGhfZGV2X2VycihkZCwKLQkJCQkiVG9vIG1hbnkgYXR0ZW1wdHMgdG8gcmVjb3ZlciBmcm9tICIKLQkJCQkiVFhFIHBhcml0eSwgZ2l2aW5nIHVwXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCi0JCSJSZWNvdmVyaW5nIGZyb20gVFhFIFBJTyBwYXJpdHkgZXJyb3JcbiIpOwotCXJldHVybiAxOwotfQotCi0KIC8qKgogICogaXBhdGhfaW5pdF9odF9nZXRfYmFzZV9pbmZvIC0gc2V0IGNoaXAtc3BlY2lmaWMgZmxhZ3MgZm9yIHVzZXIgY29kZQogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCmluZGV4IGM3YTJmNTA4Li40MjFjYzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAjaW5jbHVkZSAiaXBhdGhfcmVnaXN0ZXJzLmgiCkBAIC0zMTEsOSArMzExLDE0IEBACiAJLmNyX2lic3ltYm9sZXJyY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJTeW1ib2xFcnJDbnQpCiB9OwogCisvKiBrcl9jb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9DX1JFU0VUIDFVCisKIC8qIGtyX2ludHN0YXR1cywga3JfaW50Y2xlYXIsIGtyX2ludG1hc2sgYml0cyAqLwogI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgKCgxVTw8NSktMSkKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCAwCiAjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLICgoMVU8PDUpLTEpCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCAxMgogCiAvKiBrcl9od2VycmNsZWFyLCBrcl9od2Vycm1hc2ssIGtyX2h3ZXJyc3RhdHVzLCBiaXRzICovCiAjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVNRU1QQVJJVFlFUlJfTUFTSyAgMHgwMDAwMDAwMDAwMDAwMDNmVUxMCkBAIC0zMzgsNiArMzQzLDkgQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX01FTUJJU1RfRU5EVEVTVCAgICAgMHgwMDAwMDAwMDAwMDA0MDAwCiAjZGVmaW5lIElORklOSVBBVEhfRVhUU19NRU1CSVNUX0ZPVU5EICAgICAgIDB4MDAwMDAwMDAwMDAwODAwMAogCisvKiBrcl94Z3hzY29uZmlnIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9YR1hTX1JFU0VUICAgICAgICAgIDB4NVVMTAorCiAjZGVmaW5lIF9JUEFUSF9HUElPX1NEQV9OVU0gMQogI2RlZmluZSBfSVBBVEhfR1BJT19TQ0xfTlVNIDAKIApAQCAtMzQ2LDYgKzM1NCwxNiBAQAogI2RlZmluZSBJUEFUSF9HUElPX1NDTCAoMVVMTCA8PCBcCiAJKF9JUEFUSF9HUElPX1NDTF9OVU0rSU5GSU5JUEFUSF9FWFRDX0dQSU9PRV9TSElGVCkpCiAKKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9CVUZTSVpFX01BU0sgMHhlMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX1JUX0JVRlNJWkVfU0hJRlRWQUwodGlkKSBcCisJKCgoKHRpZCkgJiBJTkZJTklQQVRIX1JUX0JVRlNJWkVfTUFTSykgPj4gMjkpICsgMTEgLSAxKQorI2RlZmluZSBJTkZJTklQQVRIX1JUX0JVRlNJWkUodGlkKSAoMSA8PCBJTkZJTklQQVRIX1JUX0JVRlNJWkVfU0hJRlRWQUwodGlkKSkKKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9JU19WQUxJRCh0aWQpIFwKKwkoKCh0aWQpICYgSU5GSU5JUEFUSF9SVF9CVUZTSVpFX01BU0spICYmIFwKKwkgKCgoKHRpZCkgJiBJTkZJTklQQVRIX1JUX0JVRlNJWkVfTUFTSykgIT0gSU5GSU5JUEFUSF9SVF9CVUZTSVpFX01BU0spKSkKKyNkZWZpbmUgSU5GSU5JUEFUSF9SVF9BRERSX01BU0sgMHgxRkZGRkZGRlVMTCAvKiAyOSBiaXRzIHZhbGlkICovCisjZGVmaW5lIElORklOSVBBVEhfUlRfQUREUl9TSElGVCAxMAorCiAjZGVmaW5lIElORklOSVBBVEhfUl9JTlRSQVZBSUxfU0hJRlQgMTYKICNkZWZpbmUgSU5GSU5JUEFUSF9SX1RBSUxVUERfU0hJRlQgMzEKIApAQCAtMzcyLDYgKzM5MCw4IEBACiAjZGVmaW5lIFRYRV9QSU9fUEFSSVRZICgoSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1BJT0JVRiB8IFwKIAkJICAgICAgICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPUEJDKSBcCiAJCSAgICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKQorI2RlZmluZSBSWEVfRUFHRVJfUEFSSVRZIChJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfRUFHRVJUSUQgXAorCQkJICA8PCBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpCiAKIHN0YXRpYyB2b2lkIGlwYXRoX3BlX3B1dF90aWRfMihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1NjQgX19pb21lbSAqLAogCQkJICAgICAgIHUzMiwgdW5zaWduZWQgbG9uZyk7CkBAIC00NTAsMTAgKzQ3MCw4IEBACiAJICogbWFrZSBzdXJlIHdlIGdldCB0aGlzIG11Y2ggb3V0LCB1bmxlc3MgdG9sZCB0byBiZSBxdWlldCwKIAkgKiBvciBpdCdzIG9jY3VycmVkIHdpdGhpbiB0aGUgbGFzdCA1IHNlY29uZHMKIAkgKi8KLQlpZiAoKGh3ZXJycyAmIH4oZGQtPmlwYXRoX2xhc3Rod2Vycm9yIHwKLQkJCSgoSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1BJT0JVRiB8Ci0JCQkgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9QSU9QQkMpCi0JCQkgPDwgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSkpIHx8CisJaWYgKChod2VycnMgJiB+KGRkLT5pcGF0aF9sYXN0aHdlcnJvciB8IFRYRV9QSU9fUEFSSVRZIHwKKwkJCVJYRV9FQUdFUl9QQVJJVFkpKSB8fAogCSAgICAoaXBhdGhfZGVidWcgJiBfX0lQQVRIX1ZFUkJEQkcpKQogCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiSGFyZHdhcmUgZXJyb3I6IGh3ZXJyPTB4JWxseCAiCiAJCQkgIihjbGVhcmVkKVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgaHdlcnJzKTsKQEAgLTQ2NSw3ICs0ODMsNyBAQAogCQkJICAgICAgKGh3ZXJycyAmIH5kZC0+aXBhdGhfaHdlX2JpdHNleHRhbnQpKTsKIAogCWN0cmwgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sKTsKLQlpZiAoY3RybCAmIElORklOSVBBVEhfQ19GUkVFWkVNT0RFKSB7CisJaWYgKChjdHJsICYgSU5GSU5JUEFUSF9DX0ZSRUVaRU1PREUpICYmICFpcGF0aF9kaWFnX2ludXNlKSB7CiAJCS8qCiAJCSAqIHBhcml0eSBlcnJvcnMgaW4gc2VuZCBtZW1vcnkgYXJlIHJlY292ZXJhYmxlLAogCQkgKiBqdXN0IGNhbmNlbCB0aGUgc2VuZCAoaWYgaW5kaWNhdGVkIGluICogc2VuZGJ1ZmZlcmVycm9yKSwKQEAgLTU0MCwxMiArNTU4LDQwIEBACiAJCQkJIGRkLT5pcGF0aF9od2Vycm1hc2spOwogCX0KIAotCWlmICgqbXNnKQotCQlpcGF0aF9kZXZfZXJyKGRkLCAiJXMgaGFyZHdhcmUgZXJyb3JcbiIsIG1zZyk7Ci0JaWYgKGlzZmF0YWwgJiYgIWlwYXRoX2RpYWdfaW51c2UgJiYgZGQtPmlwYXRoX2ZyZWV6ZW1zZykgeworCWlmIChod2VycnMpIHsKIAkJLyoKLQkJICogZm9yIC9zeXMgc3RhdHVzIGZpbGUgOyBpZiBubyB0cmFpbGluZyB9IGlzIGNvcGllZCwgd2UnbGwKLQkJICoga25vdyBpdCB3YXMgdHJ1bmNhdGVkLgorCQkgKiBpZiBhbnkgc2V0IHRoYXQgd2UgYXJlbid0IGlnbm9yaW5nOyBvbmx5CisJCSAqIG1ha2UgdGhlIGNvbXBsYWludCBvbmNlLCBpbiBjYXNlIGl0J3Mgc3R1Y2sKKwkJICogb3IgcmVjdXJyaW5nLCBhbmQgd2UgZ2V0IGhlcmUgbXVsdGlwbGUKKwkJICogdGltZXMuCisJCSAqLworCQlpcGF0aF9kZXZfZXJyKGRkLCAiJXMgaGFyZHdhcmUgZXJyb3JcbiIsIG1zZyk7CisJCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JTklUVEVEKSB7CisJCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRkLCBJUEFUSF9JQl9MSU5LRE9XTik7CisJCQlpcGF0aF9zZXR1cF9wZV9zZXRleHRsZWQoZGQsCisJCQkJSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfRE9XTiwKKwkJCQlJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfRElTQUJMRUQpOworCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhdGFsIEhhcmR3YXJlIEVycm9yIChmcmVlemUgIgorCQkJCQkgICJtb2RlKSwgbm8gbG9uZ2VyIHVzYWJsZSwgU04gJS4xNnNcbiIsCisJCQkJCSAgZGQtPmlwYXRoX3NlcmlhbCk7CisJCQlpc2ZhdGFsID0gMTsKKwkJfQorCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9SRUFEWTsKKwkJLyogbWFyayBhcyBoYXZpbmcgaGFkIGVycm9yICovCisJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfSFdFUlJPUjsKKwkJLyoKKwkJICogbWFyayBhcyBub3QgdXNhYmxlLCBhdCBhIG1pbmltdW0gdW50aWwgZHJpdmVyCisJCSAqIGlzIHJlbG9hZGVkLCBwcm9iYWJseSB1bnRpbCByZWJvb3QsIHNpbmNlIG5vCisJCSAqIG90aGVyIHJlc2V0IGlzIHBvc3NpYmxlLgorCQkgKi8KKwkJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9JTklUVEVEOworCX0gZWxzZQorCQkqbXNnID0gMDsgLyogcmVjb3ZlcmVkIGZyb20gYWxsIG9mIHRoZW0gKi8KKworCWlmIChpc2ZhdGFsICYmICFpcGF0aF9kaWFnX2ludXNlICYmIGRkLT5pcGF0aF9mcmVlemVtc2cgJiYgbXNnKSB7CisJCS8qCisJCSAqIGZvciAvc3lzIHN0YXR1cyBmaWxlIDsgaWYgbm8gdHJhaWxpbmcgYnJhY2UgaXMgY29waWVkLAorCQkgKiB3ZSdsbCBrbm93IGl0IHdhcyB0cnVuY2F0ZWQuCiAJCSAqLwogCQlzbnByaW50ZihkZC0+aXBhdGhfZnJlZXplbXNnLCBkZC0+aXBhdGhfZnJlZXplbGVuLAogCQkJICJ7JXN9IiwgbXNnKTsKQEAgLTYxMCw3ICs2NTYsNiBAQAogCQkJZGQtPmlwYXRoX2ZfcHV0X3RpZCA9IGlwYXRoX3BlX3B1dF90aWRfMjsKIAl9CiAKLQogCS8qCiAJICogc2V0IGhlcmUsIG5vdCBpbiBpcGF0aF9pbml0XypfZnVuY3MgYmVjYXVzZSB3ZSBoYXZlIHRvIGRvCiAJICogaXQgYWZ0ZXIgd2UgY2FuIHJlYWQgY2hpcCByZWdpc3RlcnMuCkBAIC04MzgsNyArODgzLDcgQEAKIAlleHRjdGwgPSBkZC0+aXBhdGhfZXh0Y3RybCAmIH4oSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OIHwKIAkJCQkgICAgICAgSU5GSU5JUEFUSF9FWFRDX0xFRDJQUklQT1JUX09OKTsKIAotCWlmIChsdHN0ICYgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCkKKwlpZiAobHRzdCA9PSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQKQogCQlleHRjdGwgfD0gSU5GSU5JUEFUSF9FWFRDX0xFRDJQUklQT1JUX09OOwogCWlmIChsc3QgPT0gSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFKQogCQlleHRjdGwgfD0gSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OOwpAQCAtODYzLDYgKzkwOCw2MiBAQAogCXBjaV9kaXNhYmxlX21zaShkZC0+cGNpZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgaXBhdGhfNjEyMF9wY2llX3BhcmFtcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTE2IGxpbmtzdGF0LCBzcGVlZDsKKwlpbnQgcG9zOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZC0+cGNpZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKCFwb3MpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkNhbid0IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eSFcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX0VYUF9MTktTVEEsCisJCQkgICAgICZsaW5rc3RhdCk7CisJLyoKKwkgKiBzcGVlZCBpcyBiaXRzIDAtNCwgbGlua3dpZHRoIGlzIGJpdHMgNC04CisJICogbm8gZGVmaW5lcyBmb3IgdGhlbSBpbiBoZWFkZXJzCisJICovCisJc3BlZWQgPSBsaW5rc3RhdCAmIDB4ZjsKKwlsaW5rc3RhdCA+Pj0gNDsKKwlsaW5rc3RhdCAmPSAweDFmOworCWRkLT5pcGF0aF9sYnVzX3dpZHRoID0gbGlua3N0YXQ7CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSAxOgorCQlkZC0+aXBhdGhfbGJ1c19zcGVlZCA9IDI1MDA7IC8qIEdlbjEsIDIuNUdIeiAqLworCQlicmVhazsKKwljYXNlIDI6CisJCWRkLT5pcGF0aF9sYnVzX3NwZWVkID0gNTAwMDsgLyogR2VuMSwgNUdIeiAqLworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBub3QgZGVmaW5lZCwgYXNzdW1lIGdlbjEgKi8KKwkJZGQtPmlwYXRoX2xidXNfc3BlZWQgPSAyNTAwOworCQlicmVhazsKKwl9CisKKwlpZiAobGlua3N0YXQgPCA4KQorCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJIlBDSWUgd2lkdGggJXUgKHg4IEhDQSksIHBlcmZvcm1hbmNlIHJlZHVjZWRcbiIsCisJCQlsaW5rc3RhdCk7CisJZWxzZQorCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJQQ0llIHNwZWVkICV1IHdpZHRoICV1ICh4OCBIQ0EpXG4iLAorCQkJZGQtPmlwYXRoX2xidXNfc3BlZWQsIGxpbmtzdGF0KTsKKworCWlmIChzcGVlZCAhPSAxKQorCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJIlBDSWUgbGlua3NwZWVkICV1IGlzIGluY29ycmVjdDsgIgorCQkJInNob3VsZCBiZSAxICgyNTAwKSFcbiIsIHNwZWVkKTsKK2JhaWw6CisJLyogZmlsbCBpbiBzdHJpbmcsIGV2ZW4gb24gZXJyb3JzICovCisJc25wcmludGYoZGQtPmlwYXRoX2xidXNfaW5mbywgc2l6ZW9mKGRkLT5pcGF0aF9sYnVzX2luZm8pLAorCQkiUENJZSwldU1Ieix4JXVcbiIsCisJCWRkLT5pcGF0aF9sYnVzX3NwZWVkLAorCQlkZC0+aXBhdGhfbGJ1c193aWR0aCk7CisKKwlyZXR1cm47Cit9CisKIC8qKgogICogaXBhdGhfc2V0dXBfcGVfY29uZmlnIC0gc2V0dXAgUENJZSBjb25maWcgcmVsYXRlZCBzdHVmZgogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKQEAgLTkyMCwxOSArMTAyMSw4IEBACiAJfSBlbHNlCiAJCWlwYXRoX2Rldl9lcnIoZGQsICJDYW4ndCBmaW5kIE1TSSBjYXBhYmlsaXR5LCAiCiAJCQkgICAgICAiY2FuJ3Qgc2F2ZSBNU0kgc2V0dGluZ3MgZm9yIHJlc2V0XG4iKTsKLQlpZiAoKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGQtPnBjaWRldiwgUENJX0NBUF9JRF9FWFApKSkgewotCQl1MTYgbGlua3N0YXQ7Ci0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRkLT5wY2lkZXYsIHBvcyArIFBDSV9FWFBfTE5LU1RBLAotCQkJCSAgICAgJmxpbmtzdGF0KTsKLQkJbGlua3N0YXQgPj49IDQ7Ci0JCWxpbmtzdGF0ICY9IDB4MWY7Ci0JCWlmIChsaW5rc3RhdCAhPSA4KQotCQkJaXBhdGhfZGV2X2VycihkZCwgIlBDSWUgd2lkdGggJXUsICIKLQkJCQkgICAgICAicGVyZm9ybWFuY2UgcmVkdWNlZFxuIiwgbGlua3N0YXQpOwotCX0KLQllbHNlCi0JCWlwYXRoX2Rldl9lcnIoZGQsICJDYW4ndCBmaW5kIFBDSSBFeHByZXNzICIKLQkJCSAgICAgICJjYXBhYmlsaXR5IVxuIik7CisKKwlpcGF0aF82MTIwX3BjaWVfcGFyYW1zKGRkKTsKIAogCWRkLT5pcGF0aF9saW5rX3dpZHRoX3N1cHBvcnRlZCA9IElCX1dJRFRIXzFYIHwgSUJfV0lEVEhfNFg7CiAJZGQtPmlwYXRoX2xpbmtfc3BlZWRfc3VwcG9ydGVkID0gSVBBVEhfSUJfU0RSOwpAQCAtMTA2NSwxMCArMTE1NSw3IEBACiAJCUlORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9NQVNLIDw8CiAJCUlORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVDsKIAotCWRkLT5pcGF0aF9lZXBfc3RfbWFza3NbMl0uZXJyc190b19sb2cgPQotCQlJTkZJTklQQVRIX0VfSU5WQUxJREFERFIgfCBJTkZJTklQQVRIX0VfUkVTRVQ7Ci0KLQorCWRkLT5pcGF0aF9lZXBfc3RfbWFza3NbMl0uZXJyc190b19sb2cgPSBJTkZJTklQQVRIX0VfUkVTRVQ7CiAJZGQtPmRlbGF5X211bHQgPSAyOyAvKiBTRFIsIDRYLCBjYW4ndCBjaGFuZ2UgKi8KIH0KIApAQCAtMTE0Miw2ICsxMjI5LDkgQEAKIAl1NjQgdmFsOwogCWludCBpOwogCWludCByZXQ7CisJdTE2IGNtZHZhbDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRkLT5wY2lkZXYsIFBDSV9DT01NQU5ELCAmY21kdmFsKTsKIAogCS8qIFVzZSBFUlJPUiBzbyBpdCBzaG93cyB1cCBpbiBsb2dzLCBldGMuICovCiAJaXBhdGhfZGV2X2VycihkZCwgIlJlc2V0dGluZyBJbmZpbmlQYXRoIHVuaXQgJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKQEAgLTExNjksMTAgKzEyNTksMTQgQEAKIAkJCWlwYXRoX2Rldl9lcnIoZGQsICJyZXdyaXRlIG9mIEJBUjEgZmFpbGVkOiAlZFxuIiwKIAkJCQkgICAgICByKTsKIAkJLyogbm93IHJlLWVuYWJsZSBtZW1vcnkgYWNjZXNzICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZC0+cGNpZGV2LCBQQ0lfQ09NTUFORCwgY21kdmFsKTsKIAkJaWYgKChyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGQtPnBjaWRldikpKQogCQkJaXBhdGhfZGV2X2VycihkZCwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBhZnRlciAiCiAJCQkJICAgICAgInJlc2V0OiAlZFxuIiwgcik7Ci0JCS8qIHdoZXRoZXIgaXQgd29ya2VkIG9yIG5vdCwgbWFyayBhcyBwcmVzZW50LCBhZ2FpbiAqLworCQkvKgorCQkgKiB3aGV0aGVyIGl0IGZ1bGx5IGVuYWJsZWQgb3Igbm90LCBtYXJrIGFzIHByZXNlbnQsCisJCSAqIGFnYWluIChidXQgbm90IElOSVRURUQpCisJCSAqLwogCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfUFJFU0VOVDsKIAkJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmV2aXNpb24pOwogCQlpZiAodmFsID09IGRkLT5pcGF0aF9yZXZpc2lvbikgewpAQCAtMTE5MCw2ICsxMjg0LDggQEAKIAlyZXQgPSAwOyAvKiBmYWlsZWQgKi8KIAogYmFpbDoKKwlpZiAocmV0KQorCQlpcGF0aF82MTIwX3BjaWVfcGFyYW1zKGRkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjA5LDE2ICsxMzA1LDIxIEBACiB7CiAJdTMyIF9faW9tZW0gKnRpZHAzMiA9ICh1MzIgX19pb21lbSAqKXRpZHB0cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsgLyoga2VlcCBnY2MgcXVpZXQgKi8KKwlpbnQgdGlkeDsKKwlzcGlubG9ja190ICp0aWRsb2NrcDsKKworCWlmICghZGQtPmlwYXRoX2tyZWdiYXNlKQorCQlyZXR1cm47CiAKIAlpZiAocGEgIT0gZGQtPmlwYXRoX3RpZGludmFsaWQpIHsKIAkJaWYgKHBhICYgKCgxVSA8PCAxMSkgLSAxKSkgewogCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkJVRzogcGh5c2FkZHIgJWx4ICIKLQkJCQkgIm5vdCA0S0IgYWxpZ25lZCFcbiIsIHBhKTsKKwkJCQkgIm5vdCAyS0IgYWxpZ25lZCFcbiIsIHBhKTsKIAkJCXJldHVybjsKIAkJfQogCQlwYSA+Pj0gMTE7CiAJCS8qIHBhcmFub2lhIGNoZWNrICovCi0JCWlmIChwYSAmICg3PDwyOSkpCisJCWlmIChwYSAmIH5JTkZJTklQQVRIX1JUX0FERFJfTUFTSykKIAkJCWlwYXRoX2Rldl9lcnIoZGQsCiAJCQkJICAgICAgIkJVRzogUGh5c2ljYWwgcGFnZSBhZGRyZXNzIDB4JWx4ICIKIAkJCQkgICAgICAiaGFzIGJpdHMgc2V0IGluIDMxLTI5XG4iLCBwYSk7CkBAIC0xMjM4LDE0ICsxMzM5LDIyIEBACiAJICogY2FsbCBjYW4gYmUgZG9uZSBmcm9tIGludGVycnVwdCBsZXZlbCBmb3IgdGhlIHBvcnQgMCBlYWdlciBUSURzLAogCSAqIHNvIHdlIGhhdmUgdG8gdXNlIGlycXNhdmUgbG9ja3MuCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF90aWRfbG9jaywgZmxhZ3MpOworCS8qCisJICogQXNzdW1lcyB0aWRwdHIgYWx3YXlzID4gaXBhdGhfZWdydGlkYmFzZQorCSAqIGlmIHR5cGUgPT0gUkNWSFFfUkNWX1RZUEVfRUFHRVIuCisJICovCisJdGlkeCA9IHRpZHB0ciAtIGRkLT5pcGF0aF9lZ3J0aWRiYXNlOworCisJdGlkbG9ja3AgPSAodHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9FQUdFUiAmJiB0aWR4IDwgZGQtPmlwYXRoX3JjdmVncmNudCkKKwkJPyAmZGQtPmlwYXRoX2tlcm5lbF90aWRfbG9jayA6ICZkZC0+aXBhdGhfdXNlcl90aWRfbG9jazsKKwlzcGluX2xvY2tfaXJxc2F2ZSh0aWRsb2NrcCwgZmxhZ3MpOwogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCwgMHhmZWVkZGVhZik7Ci0JaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkKLQkJd3JpdGVsKHBhLCB0aWRwMzIpOworCXdyaXRlbChwYSwgdGlkcDMyKTsKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gsIDB4ZGVhZGJlZWYpOwogCW1taW93YigpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF90aWRfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodGlkbG9ja3AsIGZsYWdzKTsKIH0KKwogLyoqCiAgKiBpcGF0aF9wZV9wdXRfdGlkXzIgLSB3cml0ZSBhIFRJRCBpbiBjaGlwLCBSZXZpc2lvbiAyIG9yIGhpZ2hlcgogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKQEAgLTEyNjEsNiArMTM3MCwxMCBAQAogCQkJICAgICB1MzIgdHlwZSwgdW5zaWduZWQgbG9uZyBwYSkKIHsKIAl1MzIgX19pb21lbSAqdGlkcDMyID0gKHUzMiBfX2lvbWVtICopdGlkcHRyOworCXUzMiB0aWR4OworCisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UpCisJCXJldHVybjsKIAogCWlmIChwYSAhPSBkZC0+aXBhdGhfdGlkaW52YWxpZCkgewogCQlpZiAocGEgJiAoKDFVIDw8IDExKSAtIDEpKSB7CkBAIC0xMjcwLDcgKzEzODMsNyBAQAogCQl9CiAJCXBhID4+PSAxMTsKIAkJLyogcGFyYW5vaWEgY2hlY2sgKi8KLQkJaWYgKHBhICYgKDc8PDI5KSkKKwkJaWYgKHBhICYgfklORklOSVBBVEhfUlRfQUREUl9NQVNLKQogCQkJaXBhdGhfZGV2X2VycihkZCwKIAkJCQkgICAgICAiQlVHOiBQaHlzaWNhbCBwYWdlIGFkZHJlc3MgMHglbHggIgogCQkJCSAgICAgICJoYXMgYml0cyBzZXQgaW4gMzEtMjlcbiIsIHBhKTsKQEAgLTEyODAsOCArMTM5Myw4IEBACiAJCWVsc2UgLyogZm9yIG5vdywgYWx3YXlzIGZ1bGwgNEtCIHBhZ2UgKi8KIAkJCXBhIHw9IDIgPDwgMjk7CiAJfQotCWlmIChkZC0+aXBhdGhfa3JlZ2Jhc2UpCi0JCXdyaXRlbChwYSwgdGlkcDMyKTsKKwl0aWR4ID0gdGlkcHRyIC0gZGQtPmlwYXRoX2VncnRpZGJhc2U7CisJd3JpdGVsKHBhLCB0aWRwMzIpOwogCW1taW93YigpOwogfQogCkBAIC0xMzc5LDE3ICsxNDkyLDEzIEBACiAJZGQtPmlwYXRoX2VncnRpZGJhc2UgPSAodTY0IF9faW9tZW0gKikKIAkJKChjaGFyIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlICsgZGQtPmlwYXRoX3JjdmVncmJhc2UpOwogCi0JLyoKLQkgKiBUbyB0cnVseSBzdXBwb3J0IGEgNEtCIE1UVSAoZm9yIHVzZXJtb2RlKSwgd2UgbmVlZCB0bwotCSAqIGJ1bXAgdGhpcyB0byBhIGxhcmdlciB2YWx1ZS4gIEZvciBub3csIHdlIHVzZSB0aGVtIGZvcgotCSAqIHRoZSBrZXJuZWwgb25seS4KLQkgKi8KLQlkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZSA9IDIwNDg7CisJZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUgPSBpcGF0aF9tdHU0MDk2ID8gNDA5NiA6IDIwNDg7CiAJLyoKIAkgKiB0aGUgbWluKCkgY2hlY2sgaGVyZSBpcyBjdXJyZW50bHkgYSBub3AsIGJ1dCBpdCBtYXkgbm90IGFsd2F5cwogCSAqIGJlLCBkZXBlbmRpbmcgb24ganVzdCBob3cgd2UgZG8gaXBhdGhfcmN2ZWdyYnVmc2l6ZQogCSAqLwotCWRkLT5pcGF0aF9pYm1heGxlbiA9IG1pbihkZC0+aXBhdGhfcGlvc2l6ZTJrLAorCWRkLT5pcGF0aF9pYm1heGxlbiA9IG1pbihpcGF0aF9tdHU0MDk2ID8gZGQtPmlwYXRoX3Bpb3NpemU0ayA6CisJCQkJIGRkLT5pcGF0aF9waW9zaXplMmssCiAJCQkJIGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplICsKIAkJCQkgKGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplIDw8IDIpKTsKIAlkZC0+aXBhdGhfaW5pdF9pYm1heGxlbiA9IGRkLT5pcGF0aF9pYm1heGxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWMwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jCkBAIC0wLDAgKzEsMjU2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgb2YgdGhlIGNvZGUgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUKKyAqIEluZmluaVBhdGggNzIyMCBjaGlwIChleGNlcHQgdGhhdCBzcGVjaWZpYyB0byB0aGUgU2VyRGVzKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBhdGhfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiaXBhdGhfNzIyMC5oIgorCitzdGF0aWMgdm9pZCBpcGF0aF9zZXR1cF83MjIwX3NldGV4dGxlZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1NjQsIHU2NCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpcGF0aF9jb21wYXRfZGRyX25lZ290aWF0ZSA9IDE7CisKK21vZHVsZV9wYXJhbV9uYW1lZChjb21wYXRfZGRyX25lZ290aWF0ZSwgaXBhdGhfY29tcGF0X2Rkcl9uZWdvdGlhdGUsIHVpbnQsCisJCQlTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGNvbXBhdF9kZHJfbmVnb3RpYXRlLAorCQkiQXR0ZW1wdCBwcmUtSUJUQSAxLjIgRERSIHNwZWVkIG5lZ290aWF0aW9uIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpcGF0aF9zZG1hX2ZldGNoX2FyYiA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoZmV0Y2hfYXJiLCBpcGF0aF9zZG1hX2ZldGNoX2FyYiwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZldGNoX2FyYiwgIklCQTcyMjA6IGNoYW5nZSBTRE1BIGRlc2NyaXB0b3IgYXJiaXRyYXRpb24iKTsKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbG1vc3QgYWxsIHRoZSBjaGlwLXNwZWNpZmljIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGFuZAorICogYWNjZXNzIGZ1bmN0aW9ucyBmb3IgdGhlIFFMb2dpYyBJbmZpbmlQYXRoIDcyMjAgUENJLUV4cHJlc3MgY2hpcCwgd2l0aCB0aGUKKyAqIGV4Y2VwdGlvbiBvZiBTZXJEZXMgc3VwcG9ydCwgd2hpY2ggaW4gaW4gaXBhdGhfc2Q3MjIwLmMuCisgKgorICogVGhpcyBsaXN0cyB0aGUgSW5maW5pUGF0aCByZWdpc3RlcnMsIGluIHRoZSBhY3R1YWwgY2hpcCBsYXlvdXQuCisgKiBUaGlzIHN0cnVjdHVyZSBzaG91bGQgbmV2ZXIgYmUgZGlyZWN0bHkgYWNjZXNzZWQuCisgKi8KK3N0cnVjdCBfaW5maW5pcGF0aF9kb19ub3RfdXNlX2tlcm5lbF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmV2aXNpb247CisJdW5zaWduZWQgbG9uZyBsb25nIENvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBsb25nIFBhZ2VBbGlnbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUG9ydENudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRGVidWdQb3J0U2VsZWN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBEZWJ1Z1NpZ3NJbnRTZWw7IC8qIHdhcyBSZXNlcnZlZDA7Ki8KKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZFJlZ0Jhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFVzZXJSZWdCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBDb3VudGVyUmVnQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2NyYXRjaDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRUVQUk9NQWRkckNtZDsgLyogd2FzIFJlc2VydmVkMTsgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgRUVQUk9NRGF0YTsgLyogd2FzIFJlc2VydmVkMjsgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50QmxvY2tlZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50TWFzazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSW50U3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJbnRDbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXJyb3JNYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFcnJvclN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgRXJyb3JDbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHdFcnJNYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBId0VyclN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHdFcnJDbGVhcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSHdEaWFnQ3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgTURJTzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSUJDU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJQkNDdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFeHRTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEV4dEN0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9PdXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIEdQSU9NYXNrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBHUElPU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBHUElPQ2xlYXI7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkN0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkJUSFFQOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJTaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJDbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdkhkckVudFNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdlRJREJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdlRJRENudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2RWdyQmFzZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2RWdyQ250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZCdWZCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZCdWZTaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBSeEludE1lbUJhc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIFJ4SW50TWVtU2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2UGFydGl0aW9uS2V5OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZRUE11bHRpY2FzdFBvcnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFJjdlBrdExFRENudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSUJDRERSQ3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSFJUQlRfR1VJRDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgSUJfU0RURVNUX0lGX1RYOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJQl9TRFRFU1RfSUZfUlg7CisJdW5zaWduZWQgbG9uZyBsb25nIElCQ0REUkN0cmwyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJQkNERFJTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIEpJbnRSZWxvYWQ7CisJdW5zaWduZWQgbG9uZyBsb25nIElCTkNNb2RlQ3RybDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEN0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmRCdWZCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kQnVmU2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZkNudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEF2YWlsQWRkcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgVHhJbnRNZW1CYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBUeEludE1lbVNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmREbWFCYXNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kRG1hTGVuR2VuOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kRG1hVGFpbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZERtYUhlYWQ7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmREbWFIZWFkQWRkcjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZERtYUJ1Zk1hc2swOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kRG1hQnVmTWFzazE7CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmREbWFCdWZNYXNrMjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZERtYVN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZmZlckVycm9yOworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZW5kQnVmZmVyRXJyb3JDT05UMTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZEJ1ZkVycjI7IC8qIHdhcyBSZXNlcnZlZDZTQkVbMC82XSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDZMWzJdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBBdmFpbFVwZENvdW50OworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJBZGRyMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyQWRkcnNbMTZdOyAvKiBXaHkgZW51bWVyYXRlPyAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBSZXNlcnZlZDdoZHRsOyAvKiBBbGlnbiBuZXh0IHRvIDMwMCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBSY3ZIZHJUYWlsQWRkcjA7IC8qIDMwMCwgbGlrZSBvdGhlcnMgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgUmN2SGRyVGFpbEFkZHJzWzE2XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQ5U1dbN107IC8qIHdhcyBbOF07IHdlIGhhdmUgMTcgcG9ydHMgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgSWJzZEVwYkFjY0N0bDsgLyogSUIgU2VyZGVzIEVQQiBhY2Nlc3MgY29udHJvbCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBJYnNkRXBiVHJhbnNSZWc7IC8qIElCIFNlcmRlcyBFUEIgVHJhbnNhY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQxMHNkczsgLyogd2FzIFNlcmRlc1N0YXR1cyBvbiAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBYR1hTQ29uZmlnOworCXVuc2lnbmVkIGxvbmcgbG9uZyBJQlNlckRlc0N0cmw7IC8qIFdhcyBJQlBMTENmZyBvbiBNb250eSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBFRVBDdGxTdGF0OyAvKiBmb3IgImJvb3QiIEVFUFJPTS9GTEFTSCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBFRVBBZGRyQ21kOworCXVuc2lnbmVkIGxvbmcgbG9uZyBFRVBEYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQY2llRXBiQWNjQ3RsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQY2llRXBiVHJhbnNDdGw7CisJdW5zaWduZWQgbG9uZyBsb25nIEVmdXNlQ3RsOyAvKiBFLUZ1c2UgY29udHJvbCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBFZnVzZURhdGFbNF07CisJdW5zaWduZWQgbG9uZyBsb25nIFByb2NNb247CisJLyogdGhpcyBjaGlwIG1vdmVzIGZvbGxvd2luZyB0d28gZnJvbSBwcmV2aW91cyAyMDAsIDIwOCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBQQ0llUkJ1ZlRlc3RSZWcwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBQQ0llUkJ1ZlRlc3RSZWcxOworCS8qIGFkZGVkIGZvciB0aGlzIGNoaXAgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgUENJZVJCdWZUZXN0UmVnMjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUENJZVJCdWZUZXN0UmVnMzsKKwkvKiBhZGRlZCBmb3IgdGhpcyBjaGlwLCBkZWJ1ZyBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBsb25nIFNQQ19KVEFHX0FDQ0VTU19SRUc7CisJdW5zaWduZWQgbG9uZyBsb25nIExBQ29udHJvbFJlZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgR1BJT0RlYnVnU2VsUmVnOworCXVuc2lnbmVkIGxvbmcgbG9uZyBEZWJ1Z1BvcnRWYWx1ZVJlZzsKKwkvKiBhZGRlZCBmb3IgdGhpcyBjaGlwLCBETUEgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgU2VuZERtYUJ1ZlVzZWRbM107CisJdW5zaWduZWQgbG9uZyBsb25nIFNlbmREbWFSZXFUYWdVc2VkOworCS8qCisJICogYWRkZWQgZm9yIHRoaXMgY2hpcCwgRUZVU0U6IG5vdGUgdGhhdCB0aGVzZSBwcm9ncmFtIDY0LWJpdAorCSAqIHdvcmRzIDIgYW5kIDMgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgZWZ1c2VfcGdtX2RhdGFbMl07CisJdW5zaWduZWQgbG9uZyBsb25nIFJlc2VydmVkMTFMQWFsaWduWzEwXTsgLyogU2tpcCA0QjAuLjRGOCAqLworCS8qIHdlIGhhdmUgMzAgcmVncyBmb3IgRERTIGFuZCBSWEVRIGluIElCIFNFUkRFUyAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJEZXNERFNSWEVRWzMwXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgUmVzZXJ2ZWQxMkxBYWxpZ25bMl07IC8qIFNraXAgNUYwLCA1RjggKi8KKwkvKiBhZGRlZCBmb3IgTEEgZGVidWcgc3VwcG9ydCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBMQU1lbW9yeVszMl07Cit9OworCitzdHJ1Y3QgX2luZmluaXBhdGhfZG9fbm90X3VzZV9jb3VudGVycyB7CisJX191NjQgTEJJbnRDbnQ7CisJX191NjQgTEJGbG93U3RhbGxDbnQ7CisJX191NjQgVHhTRG1hRGVzY0NudDsJLyogd2FzIFJlc2VydmVkMSAqLworCV9fdTY0IFR4VW5zdXBWTEVyckNudDsKKwlfX3U2NCBUeERhdGFQa3RDbnQ7CisJX191NjQgVHhGbG93UGt0Q250OworCV9fdTY0IFR4RHdvcmRDbnQ7CisJX191NjQgVHhMZW5FcnJDbnQ7CisJX191NjQgVHhNYXhNaW5MZW5FcnJDbnQ7CisJX191NjQgVHhVbmRlcnJ1bkNudDsKKwlfX3U2NCBUeEZsb3dTdGFsbENudDsKKwlfX3U2NCBUeERyb3BwZWRQa3RDbnQ7CisJX191NjQgUnhEcm9wcGVkUGt0Q250OworCV9fdTY0IFJ4RGF0YVBrdENudDsKKwlfX3U2NCBSeEZsb3dQa3RDbnQ7CisJX191NjQgUnhEd29yZENudDsKKwlfX3U2NCBSeExlbkVyckNudDsKKwlfX3U2NCBSeE1heE1pbkxlbkVyckNudDsKKwlfX3U2NCBSeElDUkNFcnJDbnQ7CisJX191NjQgUnhWQ1JDRXJyQ250OworCV9fdTY0IFJ4Rmxvd0N0cmxFcnJDbnQ7CisJX191NjQgUnhCYWRGb3JtYXRDbnQ7CisJX191NjQgUnhMaW5rUHJvYmxlbUNudDsKKwlfX3U2NCBSeEVCUENudDsKKwlfX3U2NCBSeExQQ1JDRXJyQ250OworCV9fdTY0IFJ4QnVmT3ZmbENudDsKKwlfX3U2NCBSeFRJREZ1bGxFcnJDbnQ7CisJX191NjQgUnhUSURWYWxpZEVyckNudDsKKwlfX3U2NCBSeFBLZXlNaXNtYXRjaENudDsKKwlfX3U2NCBSeFAwSGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFAxSGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFAySGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFAzSGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA0SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA1SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA2SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA3SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA4SGRyRWdyT3ZmbENudDsKKwlfX3U2NCBSeFA5SGRyRWdyT3ZmbENudDsJLyogd2FzIFJlc2VydmVkNiAqLworCV9fdTY0IFJ4UDEwSGRyRWdyT3ZmbENudDsJLyogd2FzIFJlc2VydmVkNyAqLworCV9fdTY0IFJ4UDExSGRyRWdyT3ZmbENudDsJLyogbmV3IGZvciBJQkE3MjIwICovCisJX191NjQgUnhQMTJIZHJFZ3JPdmZsQ250OwkvKiBuZXcgZm9yIElCQTcyMjAgKi8KKwlfX3U2NCBSeFAxM0hkckVnck92ZmxDbnQ7CS8qIG5ldyBmb3IgSUJBNzIyMCAqLworCV9fdTY0IFJ4UDE0SGRyRWdyT3ZmbENudDsJLyogbmV3IGZvciBJQkE3MjIwICovCisJX191NjQgUnhQMTVIZHJFZ3JPdmZsQ250OwkvKiBuZXcgZm9yIElCQTcyMjAgKi8KKwlfX3U2NCBSeFAxNkhkckVnck92ZmxDbnQ7CS8qIG5ldyBmb3IgSUJBNzIyMCAqLworCV9fdTY0IElCU3RhdHVzQ2hhbmdlQ250OworCV9fdTY0IElCTGlua0VyclJlY292ZXJ5Q250OworCV9fdTY0IElCTGlua0Rvd25lZENudDsKKwlfX3U2NCBJQlN5bWJvbEVyckNudDsKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBuZXcgZm9yIElCQTcyMjAgKi8KKwlfX3U2NCBSeFZMMTVEcm9wcGVkUGt0Q250OworCV9fdTY0IFJ4T3RoZXJMb2NhbFBoeUVyckNudDsKKwlfX3U2NCBQY2llUmV0cnlCdWZEaWFnUXdvcmRDbnQ7CisJX191NjQgRXhjZXNzQnVmZmVyT3ZmbENudDsKKwlfX3U2NCBMb2NhbExpbmtJbnRlZ3JpdHlFcnJDbnQ7CisJX191NjQgUnhWbEVyckNudDsKKwlfX3U2NCBSeERsaWRGbHRyQ250OworCV9fdTY0IFJlc2VydmVkOFs3XTsKKwlfX3U2NCBQU1N0YXQ7CisJX191NjQgUFNTdGFydDsKKwlfX3U2NCBQU0ludGVydmFsOworCV9fdTY0IFBTUmN2RGF0YUNvdW50OworCV9fdTY0IFBTUmN2UGt0c0NvdW50OworCV9fdTY0IFBTWG1pdERhdGFDb3VudDsKKwlfX3U2NCBQU1htaXRQa3RzQ291bnQ7CisJX191NjQgUFNYbWl0V2FpdENvdW50OworfTsKKworI2RlZmluZSBJUEFUSF9LUkVHX09GRlNFVChmaWVsZCkgKG9mZnNldG9mKCBcCisJc3RydWN0IF9pbmZpbmlwYXRoX2RvX25vdF91c2Vfa2VybmVsX3JlZ3MsIGZpZWxkKSAvIHNpemVvZih1NjQpKQorI2RlZmluZSBJUEFUSF9DUkVHX09GRlNFVChmaWVsZCkgKG9mZnNldG9mKCBcCisJc3RydWN0IF9pbmZpbmlwYXRoX2RvX25vdF91c2VfY291bnRlcnMsIGZpZWxkKSAvIHNpemVvZih1NjQpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlwYXRoX2tyZWdzIGlwYXRoXzcyMjBfa3JlZ3MgPSB7CisJLmtyX2NvbnRyb2wgPSBJUEFUSF9LUkVHX09GRlNFVChDb250cm9sKSwKKwkua3JfY291bnRlcnJlZ2Jhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChDb3VudGVyUmVnQmFzZSksCisJLmtyX2RlYnVncG9ydHNlbGVjdCA9IElQQVRIX0tSRUdfT0ZGU0VUKERlYnVnUG9ydFNlbGVjdCksCisJLmtyX2Vycm9yY2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChFcnJvckNsZWFyKSwKKwkua3JfZXJyb3JtYXNrID0gSVBBVEhfS1JFR19PRkZTRVQoRXJyb3JNYXNrKSwKKwkua3JfZXJyb3JzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChFcnJvclN0YXR1cyksCisJLmtyX2V4dGN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChFeHRDdHJsKSwKKwkua3JfZXh0c3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoRXh0U3RhdHVzKSwKKwkua3JfZ3Bpb19jbGVhciA9IElQQVRIX0tSRUdfT0ZGU0VUKEdQSU9DbGVhciksCisJLmtyX2dwaW9fbWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEdQSU9NYXNrKSwKKwkua3JfZ3Bpb19vdXQgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPT3V0KSwKKwkua3JfZ3Bpb19zdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChHUElPU3RhdHVzKSwKKwkua3JfaHdkaWFnY3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RGlhZ0N0cmwpLAorCS5rcl9od2VycmNsZWFyID0gSVBBVEhfS1JFR19PRkZTRVQoSHdFcnJDbGVhciksCisJLmtyX2h3ZXJybWFzayA9IElQQVRIX0tSRUdfT0ZGU0VUKEh3RXJyTWFzayksCisJLmtyX2h3ZXJyc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoSHdFcnJTdGF0dXMpLAorCS5rcl9pYmNjdHJsID0gSVBBVEhfS1JFR19PRkZTRVQoSUJDQ3RybCksCisJLmtyX2liY3N0YXR1cyA9IElQQVRIX0tSRUdfT0ZGU0VUKElCQ1N0YXR1cyksCisJLmtyX2ludGJsb2NrZWQgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRCbG9ja2VkKSwKKwkua3JfaW50Y2xlYXIgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRDbGVhciksCisJLmtyX2ludG1hc2sgPSBJUEFUSF9LUkVHX09GRlNFVChJbnRNYXNrKSwKKwkua3JfaW50c3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoSW50U3RhdHVzKSwKKwkua3JfbWRpbyA9IElQQVRIX0tSRUdfT0ZGU0VUKE1ESU8pLAorCS5rcl9wYWdlYWxpZ24gPSBJUEFUSF9LUkVHX09GRlNFVChQYWdlQWxpZ24pLAorCS5rcl9wYXJ0aXRpb25rZXkgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZQYXJ0aXRpb25LZXkpLAorCS5rcl9wb3J0Y250ID0gSVBBVEhfS1JFR19PRkZTRVQoUG9ydENudCksCisJLmtyX3JjdmJ0aHFwID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QlRIUVApLAorCS5rcl9yY3ZidWZiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2QnVmQmFzZSksCisJLmtyX3JjdmJ1ZnNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZCdWZTaXplKSwKKwkua3JfcmN2Y3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkN0cmwpLAorCS5rcl9yY3ZlZ3JiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2RWdyQmFzZSksCisJLmtyX3JjdmVncmNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkVnckNudCksCisJLmtyX3JjdmhkcmNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkckNudCksCisJLmtyX3JjdmhkcmVudHNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZIZHJFbnRTaXplKSwKKwkua3JfcmN2aGRyc2l6ZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkclNpemUpLAorCS5rcl9yY3ZpbnRtZW1iYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoUnhJbnRNZW1CYXNlKSwKKwkua3JfcmN2aW50bWVtc2l6ZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFJ4SW50TWVtU2l6ZSksCisJLmtyX3JjdnRpZGJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZUSURCYXNlKSwKKwkua3JfcmN2dGlkY250ID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2VElEQ250KSwKKwkua3JfcmV2aXNpb24gPSBJUEFUSF9LUkVHX09GRlNFVChSZXZpc2lvbiksCisJLmtyX3NjcmF0Y2ggPSBJUEFUSF9LUkVHX09GRlNFVChTY3JhdGNoKSwKKwkua3Jfc2VuZGJ1ZmZlcmVycm9yID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZEJ1ZmZlckVycm9yKSwKKwkua3Jfc2VuZGN0cmwgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kQ3RybCksCisJLmtyX3NlbmRwaW9hdmFpbGFkZHIgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kQXZhaWxBZGRyKSwKKwkua3Jfc2VuZHBpb2J1ZmJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kQnVmQmFzZSksCisJLmtyX3NlbmRwaW9idWZjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kQnVmQ250KSwKKwkua3Jfc2VuZHBpb3NpemUgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kQnVmU2l6ZSksCisJLmtyX3NlbmRyZWdiYXNlID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZFJlZ0Jhc2UpLAorCS5rcl90eGludG1lbWJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChUeEludE1lbUJhc2UpLAorCS5rcl90eGludG1lbXNpemUgPSBJUEFUSF9LUkVHX09GRlNFVChUeEludE1lbVNpemUpLAorCS5rcl91c2VycmVnYmFzZSA9IElQQVRIX0tSRUdfT0ZGU0VUKFVzZXJSZWdCYXNlKSwKKworCS5rcl94Z3hzY29uZmlnID0gSVBBVEhfS1JFR19PRkZTRVQoWEdYU0NvbmZpZyksCisKKwkvKiBzZW5kIGRtYSByZWxhdGVkIHJlZ3MgKi8KKwkua3Jfc2VuZGRtYWJhc2UgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kRG1hQmFzZSksCisJLmtyX3NlbmRkbWFsZW5nZW4gPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kRG1hTGVuR2VuKSwKKwkua3Jfc2VuZGRtYXRhaWwgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kRG1hVGFpbCksCisJLmtyX3NlbmRkbWFoZWFkID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZERtYUhlYWQpLAorCS5rcl9zZW5kZG1haGVhZGFkZHIgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kRG1hSGVhZEFkZHIpLAorCS5rcl9zZW5kZG1hYnVmbWFzazAgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kRG1hQnVmTWFzazApLAorCS5rcl9zZW5kZG1hYnVmbWFzazEgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kRG1hQnVmTWFzazEpLAorCS5rcl9zZW5kZG1hYnVmbWFzazIgPSBJUEFUSF9LUkVHX09GRlNFVChTZW5kRG1hQnVmTWFzazIpLAorCS5rcl9zZW5kZG1hc3RhdHVzID0gSVBBVEhfS1JFR19PRkZTRVQoU2VuZERtYVN0YXR1cyksCisKKwkvKiBTZXJEZXMgcmVsYXRlZCByZWdzICovCisJLmtyX2lic2VyZGVzY3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKElCU2VyRGVzQ3RybCksCisJLmtyX2liX2VwYmFjYyA9IElQQVRIX0tSRUdfT0ZGU0VUKElic2RFcGJBY2NDdGwpLAorCS5rcl9pYl9lcGJ0cmFucyA9IElQQVRIX0tSRUdfT0ZGU0VUKElic2RFcGJUcmFuc1JlZyksCisJLmtyX3BjaWVfZXBiYWNjID0gSVBBVEhfS1JFR19PRkZTRVQoUGNpZUVwYkFjY0N0bCksCisJLmtyX3BjaWVfZXBidHJhbnMgPSBJUEFUSF9LUkVHX09GRlNFVChQY2llRXBiVHJhbnNDdGwpLAorCS5rcl9pYl9kZHNyeGVxID0gSVBBVEhfS1JFR19PRkZTRVQoU2VyRGVzRERTUlhFUSksCisKKwkvKgorCSAqIFRoZXNlIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSB2aWEgaXBhdGhfcmVhZF9rcmVnNjQoKSwKKwkgKiB1c2UgdGhlbSB3aXRoIGlwYXRoX3JlYWRfa3JlZzY0X3BvcnQoKQorCSAqLworCS5rcl9yY3ZoZHJhZGRyID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2SGRyQWRkcjApLAorCS5rcl9yY3ZoZHJ0YWlsYWRkciA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkclRhaWxBZGRyMCksCisKKwkvKgorCSAqIFRoZSByY3Zwa3RsZWQgcmVnaXN0ZXIgY29udHJvbHMgb25lIG9mIHRoZSBkZWJ1ZyBwb3J0IHNpZ25hbHMsIHNvCisJICogYSBwYWNrZXQgYWN0aXZpdHkgTEVEIGNhbiBiZSBjb25uZWN0ZWQgdG8gaXQuCisJICovCisJLmtyX3JjdnBrdGxlZGNudCA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdlBrdExFRENudCksCisJLmtyX3BjaWVyYnVmdGVzdHJlZzAgPSBJUEFUSF9LUkVHX09GRlNFVChQQ0llUkJ1ZlRlc3RSZWcwKSwKKwkua3JfcGNpZXJidWZ0ZXN0cmVnMSA9IElQQVRIX0tSRUdfT0ZGU0VUKFBDSWVSQnVmVGVzdFJlZzEpLAorCisJLmtyX2hydGJ0X2d1aWQgPSBJUEFUSF9LUkVHX09GRlNFVChIUlRCVF9HVUlEKSwKKwkua3JfaWJjZGRyY3RybCA9IElQQVRIX0tSRUdfT0ZGU0VUKElCQ0REUkN0cmwpLAorCS5rcl9pYmNkZHJzdGF0dXMgPSBJUEFUSF9LUkVHX09GRlNFVChJQkNERFJTdGF0dXMpLAorCS5rcl9qaW50cmVsb2FkID0gSVBBVEhfS1JFR19PRkZTRVQoSkludFJlbG9hZCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXBhdGhfY3JlZ3MgaXBhdGhfNzIyMF9jcmVncyA9IHsKKwkuY3JfYmFkZm9ybWF0Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhCYWRGb3JtYXRDbnQpLAorCS5jcl9lcnJpY3JjY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhJQ1JDRXJyQ250KSwKKwkuY3JfZXJybGlua2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TGlua1Byb2JsZW1DbnQpLAorCS5jcl9lcnJscGNyY2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TFBDUkNFcnJDbnQpLAorCS5jcl9lcnJwa2V5ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhQS2V5TWlzbWF0Y2hDbnQpLAorCS5jcl9lcnJyY3ZmbG93Y3RybGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4Rmxvd0N0cmxFcnJDbnQpLAorCS5jcl9lcnJfcmxlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TGVuRXJyQ250KSwKKwkuY3JfZXJyc2xlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4TGVuRXJyQ250KSwKKwkuY3JfZXJydGlkZnVsbCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4VElERnVsbEVyckNudCksCisJLmNyX2VycnRpZHZhbGlkID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhUSURWYWxpZEVyckNudCksCisJLmNyX2VycnZjcmNjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeFZDUkNFcnJDbnQpLAorCS5jcl9pYnN0YXR1c2NoYW5nZSA9IElQQVRIX0NSRUdfT0ZGU0VUKElCU3RhdHVzQ2hhbmdlQ250KSwKKwkuY3JfaW50Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoTEJJbnRDbnQpLAorCS5jcl9pbnZhbGlkcmxlbmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4TWF4TWluTGVuRXJyQ250KSwKKwkuY3JfaW52YWxpZHNsZW5jbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeE1heE1pbkxlbkVyckNudCksCisJLmNyX2xiZmxvd3N0YWxsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoTEJGbG93U3RhbGxDbnQpLAorCS5jcl9wa3RyY3ZjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeERhdGFQa3RDbnQpLAorCS5jcl9wa3RyY3ZmbG93Y3RybGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4Rmxvd1BrdENudCksCisJLmNyX3BrdHNlbmRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeERhdGFQa3RDbnQpLAorCS5jcl9wa3RzZW5kZmxvd2NudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4Rmxvd1BrdENudCksCisJLmNyX3BvcnRvdmZsY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhQMEhkckVnck92ZmxDbnQpLAorCS5jcl9yY3ZlYnBjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEVCUENudCksCisJLmNyX3Jjdm92ZmxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeEJ1Zk92ZmxDbnQpLAorCS5jcl9zZW5kZHJvcHBlZCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4RHJvcHBlZFBrdENudCksCisJLmNyX3NlbmRzdGFsbGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4Rmxvd1N0YWxsQ250KSwKKwkuY3Jfc2VuZHVuZGVycnVuY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoVHhVbmRlcnJ1bkNudCksCisJLmNyX3dvcmRyY3ZjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChSeER3b3JkQ250KSwKKwkuY3Jfd29yZHNlbmRjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChUeER3b3JkQ250KSwKKwkuY3JfdW5zdXB2bGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFR4VW5zdXBWTEVyckNudCksCisJLmNyX3J4ZHJvcHBrdGNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4RHJvcHBlZFBrdENudCksCisJLmNyX2libGlua2VycnJlY292Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJMaW5rRXJyUmVjb3ZlcnlDbnQpLAorCS5jcl9pYmxpbmtkb3duY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoSUJMaW5rRG93bmVkQ250KSwKKwkuY3JfaWJzeW1ib2xlcnJjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChJQlN5bWJvbEVyckNudCksCisJLmNyX3ZsMTVkcm9wcGVkcGt0Y250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhWTDE1RHJvcHBlZFBrdENudCksCisJLmNyX3J4b3RoZXJsb2NhbHBoeWVycmNudCA9CisJCUlQQVRIX0NSRUdfT0ZGU0VUKFJ4T3RoZXJMb2NhbFBoeUVyckNudCksCisJLmNyX2V4Y2Vzc2J1ZmZlcm92ZmxjbnQgPSBJUEFUSF9DUkVHX09GRlNFVChFeGNlc3NCdWZmZXJPdmZsQ250KSwKKwkuY3JfbG9jYWxsaW5raW50ZWdyaXR5ZXJyY250ID0KKwkJSVBBVEhfQ1JFR19PRkZTRVQoTG9jYWxMaW5rSW50ZWdyaXR5RXJyQ250KSwKKwkuY3Jfcnh2bGVycmNudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFJ4VmxFcnJDbnQpLAorCS5jcl9yeGRsaWRmbHRyY250ID0gSVBBVEhfQ1JFR19PRkZTRVQoUnhEbGlkRmx0ckNudCksCisJLmNyX3Bzc3RhdCA9IElQQVRIX0NSRUdfT0ZGU0VUKFBTU3RhdCksCisJLmNyX3Bzc3RhcnQgPSBJUEFUSF9DUkVHX09GRlNFVChQU1N0YXJ0KSwKKwkuY3JfcHNpbnRlcnZhbCA9IElQQVRIX0NSRUdfT0ZGU0VUKFBTSW50ZXJ2YWwpLAorCS5jcl9wc3JjdmRhdGFjb3VudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFBTUmN2RGF0YUNvdW50KSwKKwkuY3JfcHNyY3Zwa3RzY291bnQgPSBJUEFUSF9DUkVHX09GRlNFVChQU1JjdlBrdHNDb3VudCksCisJLmNyX3BzeG1pdGRhdGFjb3VudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFBTWG1pdERhdGFDb3VudCksCisJLmNyX3BzeG1pdHBrdHNjb3VudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFBTWG1pdFBrdHNDb3VudCksCisJLmNyX3BzeG1pdHdhaXRjb3VudCA9IElQQVRIX0NSRUdfT0ZGU0VUKFBTWG1pdFdhaXRDb3VudCksCit9OworCisvKiBrcl9jb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9DX1JFU0VUICgxVTw8NykKKworLyoga3JfaW50c3RhdHVzLCBrcl9pbnRjbGVhciwga3JfaW50bWFzayBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSyAoKDFVTEw8PDE3KS0xKQorI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUIDMyCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLICgoMVVMTDw8MTcpLTEpCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfSV9TRVJERVNUUklNRE9ORSAoMVVMTDw8MjcpCisKKy8qIGtyX2h3ZXJyY2xlYXIsIGtyX2h3ZXJybWFzaywga3JfaHdlcnJzdGF0dXMsIGJpdHMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9NQVNLICAweDAwMDAwMDAwMDAwMDAwZmZVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCAwCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVQT0lTT05FRFRMUCAgICAgIDB4MDAwMDAwMDAxMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFQ1BMVElNRU9VVCAgICAgICAweDAwMDAwMDAwMjAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVhUTEggICAgMHgwMDAwMDAwMDQwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlYQURNICAgIDB4MDAwMDAwMDA4MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZUkFETSAgICAweDAwMDAwMDAxMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9GQlNMSVAgICAgICAgMHgwMDgwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0NPUkVQTExfUkZTTElQICAgICAgIDB4MDEwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFMVBMTEZBSUxFRCAgICAgICAweDA0MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRTBQTExGQUlMRUQgICAgICAgMHgwODAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCAgICAgIDB4MTAwMDAwMDAwMDAwMDAwMFVMTAorLyogc3BlY2lmaWMgdG8gdGhpcyBjaGlwICovCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVDUExEQVRBUVVFVUVFUlIgICAgICAgICAweDAwMDAwMDAwMDAwMDAwNDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRUNQTEhEUlFVRVVFRVJSICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDA4MFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9TRE1BTUVNUkVBREVSUiAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX0NMS19VQ19QTExOT1RMT0NLRUQJICAgMHgyMDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVTRVJERVNRMFBDTEtOT1RERVRFQ1QgICAweDAxMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUENJRVNFUkRFU1ExUENMS05PVERFVEVDVCAgIDB4MDIwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFU0VSREVTUTJQQ0xLTk9UREVURUNUICAgMHgwNDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVTRVJERVNRM1BDTEtOT1RERVRFQ1QgICAweDA4MDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfRERTUlhFUU1FTU9SWVBBUklUWUVSUgkgICAweDAwMDAwMDgwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSUJfVUNfTUVNT1JZUEFSSVRZRVJSCSAgIDB4MDAwMDAwNDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFX1VDX09DVDBNRU1PUllQQVJJVFlFUlIgMHgwMDAwMDAxMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1BDSUVfVUNfT0NUMU1FTU9SWVBBUklUWUVSUiAweDAwMDAwMDIwMDAwMDAwMDBVTEwKKworI2RlZmluZSBJQkE3MjIwX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTSyAweDFGCisjZGVmaW5lIElCQTcyMjBfSUJDU19MSU5LU1RBVEVfU0hJRlQgNQorI2RlZmluZSBJQkE3MjIwX0lCQ1NfTElOS1NQRUVEX1NISUZUIDgKKyNkZWZpbmUgSUJBNzIyMF9JQkNTX0xJTktXSURUSF9TSElGVCA5CisKKyNkZWZpbmUgSUJBNzIyMF9JQkNDX0xJTktJTklUQ01EX01BU0sgMHg3VUxMCisjZGVmaW5lIElCQTcyMjBfSUJDQ19MSU5LQ01EX1NISUZUIDE5CisjZGVmaW5lIElCQTcyMjBfSUJDQ19NQVhQS1RMRU5fU0hJRlQgMjEKKworLyoga3JfaWJjZGRyY3RybCBiaXRzICovCisjZGVmaW5lIElCQTcyMjBfSUJDX0RMSURMTUNfTUFTSwkweEZGRkZGRkZGVUwKKyNkZWZpbmUgSUJBNzIyMF9JQkNfRExJRExNQ19TSElGVAkzMgorI2RlZmluZSBJQkE3MjIwX0lCQ19IUlRCVF9NQVNLCTMKKyNkZWZpbmUgSUJBNzIyMF9JQkNfSFJUQlRfU0hJRlQJMTYKKyNkZWZpbmUgSUJBNzIyMF9JQkNfSFJUQlRfRU5CCTB4MTAwMDBVTAorI2RlZmluZSBJQkE3MjIwX0lCQ19MQU5FX1JFVl9TVVBQT1JURUQgKDE8PDgpCisjZGVmaW5lIElCQTcyMjBfSUJDX0xSRVZfTUFTSwkxCisjZGVmaW5lIElCQTcyMjBfSUJDX0xSRVZfU0hJRlQJOAorI2RlZmluZSBJQkE3MjIwX0lCQ19SWFBPTF9NQVNLCTEKKyNkZWZpbmUgSUJBNzIyMF9JQkNfUlhQT0xfU0hJRlQJNworI2RlZmluZSBJQkE3MjIwX0lCQ19XSURUSF9TSElGVAk1CisjZGVmaW5lIElCQTcyMjBfSUJDX1dJRFRIX01BU0sJMHgzCisjZGVmaW5lIElCQTcyMjBfSUJDX1dJRFRIXzFYX09OTFkJKDA8PElCQTcyMjBfSUJDX1dJRFRIX1NISUZUKQorI2RlZmluZSBJQkE3MjIwX0lCQ19XSURUSF80WF9PTkxZCSgxPDxJQkE3MjIwX0lCQ19XSURUSF9TSElGVCkKKyNkZWZpbmUgSUJBNzIyMF9JQkNfV0lEVEhfQVVUT05FRwkoMjw8SUJBNzIyMF9JQkNfV0lEVEhfU0hJRlQpCisjZGVmaW5lIElCQTcyMjBfSUJDX1NQRUVEX0FVVE9ORUcJKDE8PDEpCisjZGVmaW5lIElCQTcyMjBfSUJDX1NQRUVEX1NEUgkJKDE8PDIpCisjZGVmaW5lIElCQTcyMjBfSUJDX1NQRUVEX0REUgkJKDE8PDMpCisjZGVmaW5lIElCQTcyMjBfSUJDX1NQRUVEX0FVVE9ORUdfTUFTSyAgKDB4Nzw8MSkKKyNkZWZpbmUgSUJBNzIyMF9JQkNfSUJUQV8xXzJfTUFTSwkoMSkKKworLyoga3JfaWJjZGRyc3RhdHVzICovCisvKiBsaW5rIGxhdGVuY3kgc2hpZnQgaXMgMCwgZG9uJ3QgYm90aGVyIGRlZmluaW5nICovCisjZGVmaW5lIElCQTcyMjBfRERSU1RBVF9MSU5LTEFUX01BU0sgICAgMHgzZmZmZmZmCisKKy8qIGtyX2V4dHN0YXR1cyBiaXRzICovCisjZGVmaW5lIElORklOSVBBVEhfRVhUU19GUkVRU0VMIDB4MgorI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfU0VSREVTU0VMIDB4NAorI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfTUVNQklTVF9FTkRURVNUICAgICAweDAwMDAwMDAwMDAwMDQwMDAKKyNkZWZpbmUgSU5GSU5JUEFUSF9FWFRTX01FTUJJU1RfRElTQUJMRUQgICAgMHgwMDAwMDAwMDAwMDA4MDAwCisKKy8qIGtyX3hneHNjb25maWcgYml0cyAqLworI2RlZmluZSBJTkZJTklQQVRIX1hHWFNfUkVTRVQgICAgICAgICAgMHg1VUxMCisjZGVmaW5lIElORklOSVBBVEhfWEdYU19GQ19TQUZFICAgICAgICAoMVVMTDw8NjMpCisKKy8qIGtyX3JjdnBrdGxlZGNudCAqLworI2RlZmluZSBJQkE3MjIwX0xFREJMSU5LX09OX1NISUZUIDMyIC8qIDRucyBwZXJpb2Qgb24gYWZ0ZXIgcGFja2V0ICovCisjZGVmaW5lIElCQTcyMjBfTEVEQkxJTktfT0ZGX1NISUZUIDAgLyogNG5zIHBlcmlvZCBvZmYgYmVmb3JlIG5leHQgb24gKi8KKworI2RlZmluZSBfSVBBVEhfR1BJT19TREFfTlVNIDEKKyNkZWZpbmUgX0lQQVRIX0dQSU9fU0NMX05VTSAwCisKKyNkZWZpbmUgSVBBVEhfR1BJT19TREEgKDFVTEwgPDwgXAorCShfSVBBVEhfR1BJT19TREFfTlVNK0lORklOSVBBVEhfRVhUQ19HUElPT0VfU0hJRlQpKQorI2RlZmluZSBJUEFUSF9HUElPX1NDTCAoMVVMTCA8PCBcCisJKF9JUEFUSF9HUElPX1NDTF9OVU0rSU5GSU5JUEFUSF9FWFRDX0dQSU9PRV9TSElGVCkpCisKKyNkZWZpbmUgSUJBNzIyMF9SX0lOVFJBVkFJTF9TSElGVCAxNworI2RlZmluZSBJQkE3MjIwX1JfVEFJTFVQRF9TSElGVCAzNQorI2RlZmluZSBJQkE3MjIwX1JfUE9SVENGR19TSElGVCAzNgorCisjZGVmaW5lIElORklOSVBBVEhfSklOVF9QQUNLRVRTSElGVCAxNgorI2RlZmluZSBJTkZJTklQQVRIX0pJTlRfREVGQVVMVF9JRExFX1RJQ0tTICAwCisjZGVmaW5lIElORklOSVBBVEhfSklOVF9ERUZBVUxUX01BWF9QQUNLRVRTIDAKKworI2RlZmluZSBJQkE3MjIwX0hEUkhFQURfUEtUSU5UX1NISUZUIDMyIC8qIGludGVycnVwdCBjbnQgaW4gdXBwZXIgMzIgYml0cyAqLworCisvKgorICogdGhlIHNpemUgYml0cyBnaXZlIHVzIDJeTiwgaW4gS0IgdW5pdHMuICAwIG1hcmtzIGFzIGludmFsaWQsCisgKiBhbmQgNyBpcyByZXNlcnZlZC4gIFdlIGN1cnJlbnRseSB1c2Ugb25seSAyS0IgYW5kIDRLQgorICovCisjZGVmaW5lIElCQTcyMjBfVElEX1NaX1NISUZUIDM3IC8qIHNoaWZ0IHRvIDNiaXQgc2l6ZSBzZWxlY3RvciAqLworI2RlZmluZSBJQkE3MjIwX1RJRF9TWl8ySyAoMVVMPDxJQkE3MjIwX1RJRF9TWl9TSElGVCkgLyogMktCICovCisjZGVmaW5lIElCQTcyMjBfVElEX1NaXzRLICgyVUw8PElCQTcyMjBfVElEX1NaX1NISUZUKSAvKiA0S0IgKi8KKyNkZWZpbmUgSUJBNzIyMF9USURfUEFfU0hJRlQgMTFVIC8qIFRJRCBhZGRyIGluIGNoaXAgc3RvcmVkIHcvbyBsb3cgYml0cyAqLworCisjZGVmaW5lIElQQVRIX0FVVE9ORUdfVFJJRVMgNSAvKiBzZXF1ZW50aWFsIHJldHJpZXMgdG8gbmVnb3RpYXRlIEREUiAqLworCitzdGF0aWMgY2hhciBpbnRfdHlwZVsxNl0gPSAiYXV0byI7Cittb2R1bGVfcGFyYW1fc3RyaW5nKGludGVycnVwdF90eXBlLCBpbnRfdHlwZSwgc2l6ZW9mKGludF90eXBlKSwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGludF90eXBlLCAiIGludGVycnVwdF90eXBlPWF1dG98Zm9yY2VfbXNpfGZvcmNlX2ludHhcbiIpOworCisvKiBwYWNrZXQgcmF0ZSBtYXRjaGluZyBkZWxheTsgY2hpcCBoYXMgc3VwcG9ydCAqLworc3RhdGljIHU4IHJhdGVfdG9fZGVsYXlbMl1bMl0gPSB7CisJLyogMXgsIDR4ICovCisJeyAgIDgsIDIgfSwgLyogU0RSICovCisJeyAgIDQsIDEgfSAgLyogRERSICovCit9OworCisvKiA3MjIwIHNwZWNpZmljIGhhcmR3YXJlIGVycm9ycy4uLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpcGF0aF9od2Vycm9yX21zZ3MgaXBhdGhfNzIyMF9od2Vycm9yX21zZ3NbXSA9IHsKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRVBPSVNPTkVEVExQLCAiUENJZSBQb2lzb25lZCBUTFAiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRUNQTFRJTUVPVVQsICJQQ0llIGNvbXBsZXRpb24gdGltZW91dCIpLAorCS8qCisJICogSW4gcHJhY3RpY2UsIGl0J3MgdW5saWtlbHkgd3RoYXQgd2UnbGwgc2VlIFBDSWUgUExMLCBvciBidXMKKwkgKiBwYXJpdHkgb3IgbWVtb3J5IHBhcml0eSBlcnJvciBmYWlsdXJlcywgYmVjYXVzZSBtb3N0IGxpa2VseSB3ZQorCSAqIHdvbid0IGJlIGFibGUgdG8gdGFsayB0byB0aGUgY29yZSBvZiB0aGUgY2hpcC4gIE5vbmV0aGVsZXNzLCB3ZQorCSAqIG1pZ2h0IHNlZSB0aGVtLCBpZiB0aGV5IGFyZSBpbiBwYXJ0cyBvZiB0aGUgUENJZSBjb3JlIHRoYXQgYXJlbid0CisJICogZXNzZW50aWFsLgorCSAqLworCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFMVBMTEZBSUxFRCwgIlBDSWVQTEwxIiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKFBDSUUwUExMRkFJTEVELCAiUENJZVBMTDAiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRUJVU1BBUklUWVhUTEgsICJQQ0llIFhUTEggY29yZSBwYXJpdHkiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRUJVU1BBUklUWVhBRE0sICJQQ0llIEFETSBUWCBjb3JlIHBhcml0eSIpLAorCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFQlVTUEFSSVRZUkFETSwgIlBDSWUgQURNIFJYIGNvcmUgcGFyaXR5IiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKFJYRFNZTkNNRU1QQVJJVFlFUlIsICJSeCBEc3luYyIpLAorCUlORklOSVBBVEhfSFdFX01TRyhTRVJERVNQTExGQUlMRUQsICJTZXJEZXMgUExMIiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKFBDSUVDUExEQVRBUVVFVUVFUlIsICJQQ0llIGNwbCBoZWFkZXIgcXVldWUiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRUNQTEhEUlFVRVVFRVJSLCAiUENJZSBjcGwgZGF0YSBxdWV1ZSIpLAorCUlORklOSVBBVEhfSFdFX01TRyhTRE1BTUVNUkVBREVSUiwgIlNlbmQgRE1BIG1lbW9yeSByZWFkIiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKENMS19VQ19QTExOT1RMT0NLRUQsICJ1QyBQTEwgY2xvY2sgbm90IGxvY2tlZCIpLAorCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFU0VSREVTUTBQQ0xLTk9UREVURUNULAorCQkiUENJZSBzZXJkZXMgUTAgbm8gY2xvY2siKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRVNFUkRFU1ExUENMS05PVERFVEVDVCwKKwkJIlBDSWUgc2VyZGVzIFExIG5vIGNsb2NrIiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKFBDSUVTRVJERVNRMlBDTEtOT1RERVRFQ1QsCisJCSJQQ0llIHNlcmRlcyBRMiBubyBjbG9jayIpLAorCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFU0VSREVTUTNQQ0xLTk9UREVURUNULAorCQkiUENJZSBzZXJkZXMgUTMgbm8gY2xvY2siKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coRERTUlhFUU1FTU9SWVBBUklUWUVSUiwKKwkJIkREUyBSWEVRIG1lbW9yeSBwYXJpdHkiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coSUJfVUNfTUVNT1JZUEFSSVRZRVJSLCAiSUIgdUMgbWVtb3J5IHBhcml0eSIpLAorCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFX1VDX09DVDBNRU1PUllQQVJJVFlFUlIsCisJCSJQQ0llIHVDIG9jdDAgbWVtb3J5IHBhcml0eSIpLAorCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFX1VDX09DVDFNRU1PUllQQVJJVFlFUlIsCisJCSJQQ0llIHVDIG9jdDEgbWVtb3J5IHBhcml0eSIpLAorfTsKKworc3RhdGljIHZvaWQgYXV0b25lZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKKworLyoKKyAqIHRoZSBvZmZzZXQgaXMgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgY29uZmlndXJlZCBwb3J0IG51bWJlcnMsIHNpbmNlCisgKiBwb3J0MCBpcyBmaXhlZCBpbiBzaXplLCBidXQgb3RoZXJzIGNhbiB2YXJ5LiAgIE1ha2UgaXQgYSBmdW5jdGlvbiB0bworICogbWFrZSB0aGUgaXNzdWUgbW9yZSBvYnZpb3VzLgorKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHBvcnRfZWdydGlkX2lkeChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIHBvcnQpCit7CisJIHJldHVybiBwb3J0ID8gZGQtPmlwYXRoX3AwX3JjdmVncmNudCArCisJCSAocG9ydC0xKSAqIGRkLT5pcGF0aF9yY3ZlZ3JjbnQgOiAwOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF83MjIwX3R4ZV9yZWNvdmVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwkrK2lwYXRoX3N0YXRzLnNwc190eGVwYXJpdHk7CisKKwlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkiUmVjb3ZlcmluZyBmcm9tIFRYRSBQSU8gcGFyaXR5IGVycm9yXG4iKTsKKwlpcGF0aF9kaXNhcm1fc2VuZGVycmJ1ZnMoZGQsIDEpOworfQorCisKKy8qKgorICogaXBhdGhfNzIyMF9oYW5kbGVfaHdlcnJvcnMgLSBkaXNwbGF5IGhhcmR3YXJlIGVycm9ycy4KKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbXNnOiB0aGUgb3V0cHV0IGJ1ZmZlcgorICogQG1zZ2w6IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKgorICogVXNlIHNhbWUgbXNnIGJ1ZmZlciBhcyByZWd1bGFyIGVycm9ycyB0byBhdm9pZCBleGNlc3NpdmUgc3RhY2sKKyAqIHVzZS4gIE1vc3QgaGFyZHdhcmUgZXJyb3JzIGFyZSBjYXRhc3Ryb3BoaWMsIGJ1dCBmb3IgcmlnaHQgbm93LAorICogd2UnbGwgcHJpbnQgdGhlbSBhbmQgY29udGludWUuICBXZSByZXVzZSB0aGUgc2FtZSBtZXNzYWdlIGJ1ZmZlciBhcworICogaXBhdGhfaGFuZGxlX2Vycm9ycygpIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBzdGFjayB1c2FnZS4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfNzIyMF9oYW5kbGVfaHdlcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBjaGFyICptc2csCisJCQkJICAgICAgIHNpemVfdCBtc2dsKQoreworCWlwYXRoX2Vycl90IGh3ZXJyczsKKwl1MzIgYml0cywgY3RybDsKKwlpbnQgaXNmYXRhbCA9IDA7CisJY2hhciBiaXRzbXNnWzY0XTsKKwlpbnQgbG9nX2lkeDsKKworCWh3ZXJycyA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyc3RhdHVzKTsKKwlpZiAoIWh3ZXJycykgeworCQkvKgorCQkgKiBiZXR0ZXIgdGhhbiBwcmludGluZyBjb2Z1c2luZyBtZXNzYWdlcworCQkgKiBUaGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gY2xlYXJpbmcgdGhlIGNyYyBlcnJvciwgb3IKKwkJICogdGhlIHBsbCBlcnJvciBkdXJpbmcgaW5pdC4KKwkJICovCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkNhbGxlZCBidXQgbm8gaGFyZHdhcmUgZXJyb3JzIHNldFxuIik7CisJCWdvdG8gYmFpbDsKKwl9IGVsc2UgaWYgKGh3ZXJycyA9PSB+MFVMTCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiUmVhZCBvZiBoYXJkd2FyZSBlcnJvciBzdGF0dXMgZmFpbGVkICIKKwkJCSAgICAgICIoYWxsIGJpdHMgc2V0KTsgaWdub3JpbmdcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCWlwYXRoX3N0YXRzLnNwc19od2VycnMrKzsKKworCS8qCisJICogQWx3YXlzIGNsZWFyIHRoZSBlcnJvciBzdGF0dXMgcmVnaXN0ZXIsIGV4Y2VwdCBNRU1CSVNURkFJTCwKKwkgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgY29udGludWUgb3Igc3RvcCB1c2luZyB0aGUgY2hpcC4KKwkgKiBXZSB3YW50IHRoYXQgc2V0IHNvIHdlIGtub3cgaXQgZmFpbGVkLCBldmVuIGFjcm9zcyBkcml2ZXIgcmVsb2FkLgorCSAqIFdlJ2xsIHN0aWxsIGlnbm9yZSBpdCBpbiB0aGUgaHdlcnJtYXNrLiAgV2UgZG8gdGhpcyBwYXJ0bHkgZm9yCisJICogZGlhZ25vc3RpY3MsIGJ1dCBhbHNvIGZvciBzdXBwb3J0LgorCSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJjbGVhciwKKwkJCSBod2VycnMmfklORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQpOworCisJaHdlcnJzICY9IGRkLT5pcGF0aF9od2Vycm1hc2s7CisKKwkvKiBXZSBsb2cgc29tZSBlcnJvcnMgdG8gRUVQUk9NLCBjaGVjayBpZiB3ZSBoYXZlIGFueSBvZiB0aG9zZS4gKi8KKwlmb3IgKGxvZ19pZHggPSAwOyBsb2dfaWR4IDwgSVBBVEhfRUVQX0xPR19DTlQ7ICsrbG9nX2lkeCkKKwkJaWYgKGh3ZXJycyAmIGRkLT5pcGF0aF9lZXBfc3RfbWFza3NbbG9nX2lkeF0uaHdlcnJzX3RvX2xvZykKKwkJCWlwYXRoX2luY19lZXByb21fZXJyKGRkLCBsb2dfaWR4LCAxKTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBnZXQgdGhpcyBtdWNoIG91dCwgdW5sZXNzIHRvbGQgdG8gYmUgcXVpZXQsCisJICogb3IgaXQncyBvY2N1cnJlZCB3aXRoaW4gdGhlIGxhc3QgNSBzZWNvbmRzLgorCSAqLworCWlmICgoaHdlcnJzICYgfihkZC0+aXBhdGhfbGFzdGh3ZXJyb3IgfAorCQkJKChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPQlVGIHwKKwkJCSAgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1BJT1BCQykKKwkJCSA8PCBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpKSkgfHwKKwkgICAgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9WRVJCREJHKSkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkhhcmR3YXJlIGVycm9yOiBod2Vycj0weCVsbHggIgorCQkJICIoY2xlYXJlZClcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGh3ZXJycyk7CisJZGQtPmlwYXRoX2xhc3Rod2Vycm9yIHw9IGh3ZXJyczsKKworCWlmIChod2VycnMgJiB+ZGQtPmlwYXRoX2h3ZV9iaXRzZXh0YW50KQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiaHdlcnJvciBpbnRlcnJ1cHQgd2l0aCB1bmtub3duIGVycm9ycyAiCisJCQkgICAgICAiJWxseCBzZXRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgICAoaHdlcnJzICYgfmRkLT5pcGF0aF9od2VfYml0c2V4dGFudCkpOworCisJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0lCX1VDX01FTU9SWVBBUklUWUVSUikKKwkJaXBhdGhfc2Q3MjIwX2Nscl9pYnBhcihkZCk7CisKKwljdHJsID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCk7CisJaWYgKChjdHJsICYgSU5GSU5JUEFUSF9DX0ZSRUVaRU1PREUpICYmICFpcGF0aF9kaWFnX2ludXNlKSB7CisJCS8qCisJCSAqIFBhcml0eSBlcnJvcnMgaW4gc2VuZCBtZW1vcnkgYXJlIHJlY292ZXJhYmxlLAorCQkgKiBqdXN0IGNhbmNlbCB0aGUgc2VuZCAoaWYgaW5kaWNhdGVkIGluICogc2VuZGJ1ZmZlcmVycm9yKSwKKwkJICogY291bnQgdGhlIG9jY3VycmVuY2UsIHVuZnJlZXplIChpZiBubyBvdGhlciBoYW5kbGVkCisJCSAqIGhhcmR3YXJlIGVycm9yIGJpdHMgYXJlIHNldCksIGFuZCBjb250aW51ZS4KKwkJICovCisJCWlmIChod2VycnMgJiAoKElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9QSU9CVUYgfAorCQkJICAgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9QSU9QQkMpCisJCQkgICAgICA8PCBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpKSB7CisJCQlpcGF0aF83MjIwX3R4ZV9yZWNvdmVyKGRkKTsKKwkJCWh3ZXJycyAmPSB+KChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPQlVGIHwKKwkJCQkgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9QSU9QQkMpCisJCQkJICAgIDw8IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCk7CisJCQlpZiAoIWh3ZXJycykgeworCQkJCS8qIGVsc2UgbGVhdmUgaW4gZnJlZXplIG1vZGUgKi8KKwkJCQlpcGF0aF93cml0ZV9rcmVnKGRkLAorCQkJCQkJIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwKKwkJCQkJCSBkZC0+aXBhdGhfY29udHJvbCk7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9CisJCWlmIChod2VycnMpIHsKKwkJCS8qCisJCQkgKiBJZiBhbnkgc2V0IHRoYXQgd2UgYXJlbid0IGlnbm9yaW5nIG9ubHkgbWFrZSB0aGUKKwkJCSAqIGNvbXBsYWludCBvbmNlLCBpbiBjYXNlIGl0J3Mgc3R1Y2sgb3IgcmVjdXJyaW5nLAorCQkJICogYW5kIHdlIGdldCBoZXJlIG11bHRpcGxlIHRpbWVzCisJCQkgKiBGb3JjZSBsaW5rIGRvd24sIHNvIHN3aXRjaCBrbm93cywgYW5kCisJCQkgKiBMRURzIGFyZSB0dXJuZWQgb2ZmLgorCQkJICovCisJCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkgeworCQkJCWlwYXRoX3NldF9saW5rc3RhdGUoZGQsIElQQVRIX0lCX0xJTktET1dOKTsKKwkJCQlpcGF0aF9zZXR1cF83MjIwX3NldGV4dGxlZChkZCwKKwkJCQkJSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfRE9XTiwKKwkJCQkJSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0RJU0FCTEVEKTsKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmF0YWwgSGFyZHdhcmUgRXJyb3IgIgorCQkJCQkgICAgICAiKGZyZWV6ZSBtb2RlKSwgbm8gbG9uZ2VyIgorCQkJCQkgICAgICAiIHVzYWJsZSwgU04gJS4xNnNcbiIsCisJCQkJCQkgIGRkLT5pcGF0aF9zZXJpYWwpOworCQkJCWlzZmF0YWwgPSAxOworCQkJfQorCQkJLyoKKwkJCSAqIE1hcmsgYXMgaGF2aW5nIGhhZCBhbiBlcnJvciBmb3IgZHJpdmVyLCBhbmQgYWxzbworCQkJICogZm9yIC9zeXMgYW5kIHN0YXR1cyB3b3JkIG1hcHBlZCB0byB1c2VyIHByb2dyYW1zLgorCQkJICogVGhpcyBtYXJrcyB1bml0IGFzIG5vdCB1c2FibGUsIHVudGlsIHJlc2V0LgorCQkJICovCisJCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9SRUFEWTsKKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfSFdFUlJPUjsKKwkJCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfSU5JVFRFRDsKKwkJfSBlbHNlIHsKKwkJCWlwYXRoX2RiZygiQ2xlYXJpbmcgZnJlZXplbW9kZSBvbiBpZ25vcmVkIGhhcmR3YXJlICIKKwkJCQkgICJlcnJvclxuIik7CisJCQlpcGF0aF9jbGVhcl9mcmVlemUoZGQpOworCQl9CisJfQorCisJKm1zZyA9ICdcMCc7CisKKwlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCkgeworCQlzdHJsY2F0KG1zZywgIltNZW1vcnkgQklTVCB0ZXN0IGZhaWxlZCwgIgorCQkJIkluZmluaVBhdGggaGFyZHdhcmUgdW51c2FibGVdIiwgbXNnbCk7CisJCS8qIGlnbm9yZSBmcm9tIG5vdyBvbiwgc28gZGlzYWJsZSB1bnRpbCBkcml2ZXIgcmVsb2FkZWQgKi8KKwkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9IElQQVRIX1NUQVRVU19IV0VSUk9SOworCQlkZC0+aXBhdGhfaHdlcnJtYXNrICY9IH5JTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJfQorCisJaXBhdGhfZm9ybWF0X2h3ZXJyb3JzKGh3ZXJycywKKwkJCSAgICAgIGlwYXRoXzcyMjBfaHdlcnJvcl9tc2dzLAorCQkJICAgICAgQVJSQVlfU0laRShpcGF0aF83MjIwX2h3ZXJyb3JfbXNncyksCisJCQkgICAgICBtc2csIG1zZ2wpOworCisJaWYgKGh3ZXJycyAmIChJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX01BU0sKKwkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCkpIHsKKwkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+CisJCQkgICAgICAgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCkgJgorCQkJICAgICAgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9NQVNLKTsKKwkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csCisJCQkgIltQQ0llIE1lbSBQYXJpdHkgRXJycyAleF0gIiwgYml0cyk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwl9CisKKyNkZWZpbmUgX0lQQVRIX1BMTF9GQUlMIChJTkZJTklQQVRIX0hXRV9DT1JFUExMX0ZCU0xJUCB8CVwKKwkJCSBJTkZJTklQQVRIX0hXRV9DT1JFUExMX1JGU0xJUCkKKworCWlmIChod2VycnMgJiBfSVBBVEhfUExMX0ZBSUwpIHsKKwkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csCisJCQkgIltQTEwgZmFpbGVkICglbGx4KSwgSW5maW5pUGF0aCBoYXJkd2FyZSB1bnVzYWJsZV0iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCk7CisJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKKwkJLyogaWdub3JlIGZyb20gbm93IG9uLCBzbyBkaXNhYmxlIHVudGlsIGRyaXZlciByZWxvYWRlZCAqLworCQlkZC0+aXBhdGhfaHdlcnJtYXNrICY9IH4oaHdlcnJzICYgX0lQQVRIX1BMTF9GQUlMKTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2Vycm1hc2ssCisJCQkJIGRkLT5pcGF0aF9od2Vycm1hc2spOworCX0KKworCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQpIHsKKwkJLyoKKwkJICogSWYgaXQgb2NjdXJzLCBpdCBpcyBsZWZ0IG1hc2tlZCBzaW5jZSB0aGUgZXRlcm5hbAorCQkgKiBpbnRlcmZhY2UgaXMgdW51c2VkLgorCQkgKi8KKwkJZGQtPmlwYXRoX2h3ZXJybWFzayAmPSB+SU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CisJfQorCisJaXBhdGhfZGV2X2VycihkZCwgIiVzIGhhcmR3YXJlIGVycm9yXG4iLCBtc2cpOworCS8qCisJICogRm9yIC9zeXMgc3RhdHVzIGZpbGUuIGlmIG5vIHRyYWlsaW5nIH0gaXMgY29waWVkLCB3ZSdsbAorCSAqIGtub3cgaXQgd2FzIHRydW5jYXRlZC4KKwkgKi8KKwlpZiAoaXNmYXRhbCAmJiAhaXBhdGhfZGlhZ19pbnVzZSAmJiBkZC0+aXBhdGhfZnJlZXplbXNnKQorCQlzbnByaW50ZihkZC0+aXBhdGhfZnJlZXplbXNnLCBkZC0+aXBhdGhfZnJlZXplbGVuLAorCQkJICJ7JXN9IiwgbXNnKTsKK2JhaWw6OworfQorCisvKioKKyAqIGlwYXRoXzcyMjBfYm9hcmRuYW1lIC0gZmlsbCBpbiB0aGUgYm9hcmQgbmFtZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBuYW1lOiB0aGUgb3V0cHV0IGJ1ZmZlcgorICogQG5hbWVsZW46IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKgorICogaW5mbyBpcyBiYXNlZCBvbiB0aGUgYm9hcmQgcmV2aXNpb24gcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBpcGF0aF83MjIwX2JvYXJkbmFtZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKm5hbWUsCisJc2l6ZV90IG5hbWVsZW4pCit7CisJY2hhciAqbiA9IE5VTEw7CisJdTggYm9hcmRyZXYgPSBkZC0+aXBhdGhfYm9hcmRyZXY7CisJaW50IHJldDsKKworCWlmIChib2FyZHJldiA9PSAxNSkgeworCQkvKgorCQkgKiBFbXVsYXRvciBzb21ldGltZXMgY29tZXMgdXAgYWxsLW9uZXMsIHJhdGhlciB0aGFuIHplcm8uCisJCSAqLworCQlib2FyZHJldiA9IDA7CisJCWRkLT5pcGF0aF9ib2FyZHJldiA9IGJvYXJkcmV2OworCX0KKwlzd2l0Y2ggKGJvYXJkcmV2KSB7CisJY2FzZSAwOgorCQluID0gIkluZmluaVBhdGhfNzIyMF9FbXVsYXRpb24iOworCQlicmVhazsKKwljYXNlIDE6CisJCW4gPSAiSW5maW5pUGF0aF9RTEU3MjQwIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQluID0gIkluZmluaVBhdGhfUUxFNzI4MCI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJbiA9ICJJbmZpbmlQYXRoX1FMRTcyNDIiOworCQlicmVhazsKKwljYXNlIDQ6CisJCW4gPSAiSW5maW5pUGF0aF9RRU03MjQwIjsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQluID0gIkluZmluaVBhdGhfUU1JNzI0MCI7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJbiA9ICJJbmZpbmlQYXRoX1FNSTcyNjQiOworCQlicmVhazsKKwljYXNlIDc6CisJCW4gPSAiSW5maW5pUGF0aF9RTUg3MjQwIjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQluID0gIkluZmluaVBhdGhfUU1FNzI0MCI7CisJCWJyZWFrOworCWNhc2UgOToKKwkJbiA9ICJJbmZpbmlQYXRoX1FMRTcyNTAiOworCQlicmVhazsKKwljYXNlIDEwOgorCQluID0gIkluZmluaVBhdGhfUUxFNzI5MCI7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCW4gPSAiSW5maW5pUGF0aF9RRU03MjUwIjsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJbiA9ICJJbmZpbmlQYXRoX1FMRS1CcmluZ3VwIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSAgICAgICJEb24ndCB5ZXQga25vdyBhYm91dCBib2FyZCB3aXRoIElEICV1XG4iLAorCQkJICAgICAgYm9hcmRyZXYpOworCQlzbnByaW50ZihuYW1lLCBuYW1lbGVuLCAiVW5rbm93bl9JbmZpbmlQYXRoX1BDSWVfJXUiLAorCQkJIGJvYXJkcmV2KTsKKwkJYnJlYWs7CisJfQorCWlmIChuKQorCQlzbnByaW50ZihuYW1lLCBuYW1lbGVuLCAiJXMiLCBuKTsKKworCWlmIChkZC0+aXBhdGhfbWFqcmV2ICE9IDUgfHwgIWRkLT5pcGF0aF9taW5yZXYgfHwKKwkJZGQtPmlwYXRoX21pbnJldiA+IDIpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlVuc3VwcG9ydGVkIEluZmluaVBhdGggaGFyZHdhcmUgIgorCQkJICAgICAgInJldmlzaW9uICV1LiV1IVxuIiwKKwkJCSAgICAgIGRkLT5pcGF0aF9tYWpyZXYsIGRkLT5pcGF0aF9taW5yZXYpOworCQlyZXQgPSAxOworCX0gZWxzZSBpZiAoZGQtPmlwYXRoX21pbnJldiA9PSAxKSB7CisJCS8qIFJldjEgY2hpcHMgYXJlIHByb3RvdHlwZS4gQ29tcGxhaW4sIGJ1dCBhbGxvdyB1c2UgKi8KKwkJaXBhdGhfZGV2X2VycihkZCwgIlVuc3VwcG9ydGVkIGhhcmR3YXJlICIKKwkJCSAgICAgICJyZXZpc2lvbiAldS4ldSwgQ29udGFjdCBzdXBwb3J0QHFsb2dpYy5jb21cbiIsCisJCQkgICAgICBkZC0+aXBhdGhfbWFqcmV2LCBkZC0+aXBhdGhfbWlucmV2KTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworCS8qCisJICogU2V0IGhlcmUgbm90IGluIGlwYXRoX2luaXRfKl9mdW5jcyBiZWNhdXNlIHdlIGhhdmUgdG8gZG8KKwkgKiBpdCBhZnRlciB3ZSBjYW4gcmVhZCBjaGlwIHJlZ2lzdGVycy4KKwkgKi8KKwlkZC0+aXBhdGhfdXJlZ19hbGlnbiA9IDB4MTAwMDA7ICAvKiA2NEtCIGFsaWdubWVudCAqLworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF83MjIwX2luaXRfaHdlcnJvcnMgLSBlbmFibGUgaGFyZHdhcmUgZXJyb3JzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIG5vdyB0aGF0IHdlIGhhdmUgZmluaXNoZWQgaW5pdGlhbGl6aW5nIGV2ZXJ5dGhpbmcgdGhhdCBtaWdodCByZWFzb25hYmx5CisgKiBjYXVzZSBhIGhhcmR3YXJlIGVycm9yLCBhbmQgY2xlYXJlZCB0aG9zZSBlcnJvcnMgYml0cyBhcyB0aGV5IG9jY3VyLAorICogd2UgY2FuIGVuYWJsZSBoYXJkd2FyZSBlcnJvcnMgaW4gdGhlIG1hc2sgKHBvdGVudGlhbGx5IGVuYWJsaW5nCisgKiBmcmVlemUgbW9kZSksIGFuZCBlbmFibGUgaGFyZHdhcmUgZXJyb3JzIGFzIGVycm9ycyAoYWxvbmcgd2l0aAorICogZXZlcnl0aGluZyBlbHNlKSBpbiBlcnJvcm1hc2sKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfNzIyMF9pbml0X2h3ZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpcGF0aF9lcnJfdCB2YWw7CisJdTY0IGV4dHN2YWw7CisKKwlleHRzdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0c3RhdHVzKTsKKworCWlmICghKGV4dHN2YWwgJiAoSU5GSU5JUEFUSF9FWFRTX01FTUJJU1RfRU5EVEVTVCB8CisJCQlJTkZJTklQQVRIX0VYVFNfTUVNQklTVF9ESVNBQkxFRCkpKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiTWVtQklTVCBkaWQgbm90IGNvbXBsZXRlIVxuIik7CisJaWYgKGV4dHN2YWwgJiBJTkZJTklQQVRIX0VYVFNfTUVNQklTVF9ESVNBQkxFRCkKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIk1lbUJJU1QgaXMgZGlzYWJsZWQuXG4iKTsKKworCXZhbCA9IH4wVUxMOwkvKiBiYXJyaW5nIGJ1Z3MsIGFsbCBod2Vycm9ycyBiZWNvbWUgaW50ZXJydXB0cywgKi8KKworCWlmICghZGQtPmlwYXRoX2JvYXJkcmV2KQkvKiBubyBQTEwgZm9yIEVtdWxhdG9yICovCisJCXZhbCAmPSB+SU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEOworCisJaWYgKGRkLT5pcGF0aF9taW5yZXYgPT0gMSkKKwkJdmFsICY9IH4oMVVMTCA8PCA0Mik7IC8qIFRYRSBMYXVuY2hGSUZPIFBhcml0eSByZXYxIGlzc3VlICovCisKKwl2YWwgJj0gfklORklOSVBBVEhfSFdFX0lCX1VDX01FTU9SWVBBUklUWUVSUjsKKwlkZC0+aXBhdGhfaHdlcnJtYXNrID0gdmFsOworCisJLyoKKwkgKiBzcGVjaWFsIHRyaWdnZXIgImVycm9yIiBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBJdAorCSAqIHdvcmtzIGFyb3VuZCBhIHByb2Nlc3Nvci9jaGlwc2V0IHByb2JsZW0uICBUaGUgZXJyb3IKKwkgKiBpbnRlcnJ1cHQgYWxsb3dzIHVzIHRvIGNvdW50IG9jY3VycmVuY2VzLCBidXQgd2UgZG9uJ3QKKwkgKiB3YW50IHRvIHBheSB0aGUgb3ZlcmhlYWQgZm9yIG5vcm1hbCB1c2UuICBFbXVsYXRpb24gb25seQorCSAqLworCWlmICghZGQtPmlwYXRoX2JvYXJkcmV2KQorCQlkZC0+aXBhdGhfbWFza2VkZXJycyA9IElORklOSVBBVEhfRV9TRU5EU1BFQ0lBTFRSSUdHRVI7Cit9CisKKy8qCisgKiBBbGwgZGV0YWlsZWQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgU2VyRGVzIGhhcyBiZWVuIG1vdmVkIHRvIGlwYXRoX3NkNzIyMC5jCisgKgorICogVGhlIHBvcnRpb24gb2YgSUJBNzIyMC1zcGVjaWZpYyBicmluZ3VwX3NlcmRlcygpIHRoYXQgYWN0dWFsbHkgZGVhbHMgd2l0aAorICogcmVnaXN0ZXJzIGFuZCBtZW1vcnkgd2l0aGluIHRoZSBTZXJEZXMgaXRzZWxmIGlzIGlwYXRoX3NkNzIyMF9pbml0KCkuCisgKi8KKworLyoqCisgKiBpcGF0aF83MjIwX2JyaW5ndXBfc2VyZGVzIC0gYnJpbmcgdXAgdGhlIHNlcmRlcworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqLworc3RhdGljIGludCBpcGF0aF83MjIwX2JyaW5ndXBfc2VyZGVzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1NjQgdmFsLCBwcmV2X3ZhbCwgZ3VpZDsKKwlpbnQgd2FzX3Jlc2V0OwkJLyogTm90ZSB3aGV0aGVyIHVDIHdhcyByZXNldCAqLworCisJaXBhdGhfZGJnKCJUcnlpbmcgdG8gYnJpbmd1cCBzZXJkZXNcbiIpOworCisJaWYgKGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyc3RhdHVzKSAmCisJICAgIElORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCkgeworCQlpcGF0aF9kYmcoIkF0IHN0YXJ0LCBzZXJkZXMgUExMIGZhaWxlZCBiaXQgc2V0ICIKKwkJCSAgImluIGh3ZXJyc3RhdHVzLCBjbGVhcmluZyBhbmQgY29udGludWluZ1xuIik7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJjbGVhciwKKwkJCQkgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKTsKKwl9CisKKwlpZiAoIWRkLT5pcGF0aF9pYmNkZHJjdHJsKSB7CisJCS8qIG5vdCBvbiByZS1pbml0IGFmdGVyIHJlc2V0ICovCisJCWRkLT5pcGF0aF9pYmNkZHJjdHJsID0KKwkJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2RkcmN0cmwpOworCisJCWlmIChkZC0+aXBhdGhfbGlua19zcGVlZF9lbmFibGVkID09CisJCQkoSVBBVEhfSUJfU0RSIHwgSVBBVEhfSUJfRERSKSkKKwkJCWRkLT5pcGF0aF9pYmNkZHJjdHJsIHw9CisJCQkJSUJBNzIyMF9JQkNfU1BFRURfQVVUT05FR19NQVNLIHwKKwkJCQlJQkE3MjIwX0lCQ19JQlRBXzFfMl9NQVNLOworCQllbHNlCisJCQlkZC0+aXBhdGhfaWJjZGRyY3RybCB8PQorCQkJCWRkLT5pcGF0aF9saW5rX3NwZWVkX2VuYWJsZWQgPT0gSVBBVEhfSUJfRERSCisJCQkJPyAgSUJBNzIyMF9JQkNfU1BFRURfRERSIDoKKwkJCQlJQkE3MjIwX0lCQ19TUEVFRF9TRFI7CisJCWlmICgoZGQtPmlwYXRoX2xpbmtfd2lkdGhfZW5hYmxlZCAmIChJQl9XSURUSF8xWCB8CisJCQlJQl9XSURUSF80WCkpID09IChJQl9XSURUSF8xWCB8IElCX1dJRFRIXzRYKSkKKwkJCWRkLT5pcGF0aF9pYmNkZHJjdHJsIHw9IElCQTcyMjBfSUJDX1dJRFRIX0FVVE9ORUc7CisJCWVsc2UKKwkJCWRkLT5pcGF0aF9pYmNkZHJjdHJsIHw9CisJCQkJZGQtPmlwYXRoX2xpbmtfd2lkdGhfZW5hYmxlZCA9PSBJQl9XSURUSF80WAorCQkJCT8gSUJBNzIyMF9JQkNfV0lEVEhfNFhfT05MWSA6CisJCQkJSUJBNzIyMF9JQkNfV0lEVEhfMVhfT05MWTsKKworCQkvKiBhbHdheXMgZW5hYmxlIHRoZXNlIG9uIGRyaXZlciByZWxvYWQsIG5vdCBzdGlja3kgKi8KKwkJZGQtPmlwYXRoX2liY2RkcmN0cmwgfD0KKwkJCUlCQTcyMjBfSUJDX1JYUE9MX01BU0sgPDwgSUJBNzIyMF9JQkNfUlhQT0xfU0hJRlQ7CisJCWRkLT5pcGF0aF9pYmNkZHJjdHJsIHw9CisJCQlJQkE3MjIwX0lCQ19IUlRCVF9NQVNLIDw8IElCQTcyMjBfSUJDX0hSVEJUX1NISUZUOworCQkvKgorCQkgKiBhdXRvbWF0aWMgbGFuZSByZXZlcnNhbCBkZXRlY3Rpb24gZm9yIHJlY2VpdmUKKwkJICogZG9lc24ndCB3b3JrIGNvcnJlY3RseSBpbiByZXYgMSwgc28gZGlzYWJsZSBpdAorCQkgKiBvbiB0aGF0IHJldiwgb3RoZXJ3aXNlIGVuYWJsZSAoZGlzYWJsaW5nIG5vdAorCQkgKiBzdGlja3kgYWNyb3NzIHJlbG9hZCBmb3IgPnJldjEpCisJCSAqLworCQlpZiAoZGQtPmlwYXRoX21pbnJldiA9PSAxKQorCQkJZGQtPmlwYXRoX2liY2RkcmN0cmwgJj0KKwkJCX5JQkE3MjIwX0lCQ19MQU5FX1JFVl9TVVBQT1JURUQ7CisJCWVsc2UKKwkJCWRkLT5pcGF0aF9pYmNkZHJjdHJsIHw9CisJCQkJSUJBNzIyMF9JQkNfTEFORV9SRVZfU1VQUE9SVEVEOworCX0KKworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjZGRyY3RybCwKKwkJCWRkLT5pcGF0aF9pYmNkZHJjdHJsKTsKKworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIElQQVRIX0tSRUdfT0ZGU0VUKElCTkNNb2RlQ3RybCksIDBVbGwpOworCisJLyogSUJBNzIyMCBoYXMgU0VSREVTIE1QVSByZXNldCBpbiBEMCBvZiB3aGF0IF93YXNfIElCUExMQ2ZnICovCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJzZXJkZXNjdHJsKTsKKwkvKiByZW1lbWJlciBpZiB1QyB3YXMgaW4gUmVzZXQgb3Igbm90LCBmb3IgZGFjdHJpbSAqLworCXdhc19yZXNldCA9ICh2YWwgJiAxKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJJQlJlc2V0ICVzIHhneHNjb25maWcgJWxseFxuIiwKKwkJICAgd2FzX3Jlc2V0ID8gIkFzc2VydGVkIiA6ICJOZWdhdGVkIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZykpOworCisJaWYgKGRkLT5pcGF0aF9ib2FyZHJldikgeworCQkvKgorCQkgKiBIYXJkd2FyZSBpcyBub3QgZW11bGF0b3IsIGFuZCBtYXkgaGF2ZSBiZWVuIHJlc2V0LiBJbml0IGl0LgorCQkgKiBCZWxvdyB3aWxsIHJlbGVhc2UgcmVzZXQsIGJ1dCBuZWVkcyB0byBrbm93IGlmIGNoaXAgd2FzCisJCSAqIG9yaWdpbmFsbHkgaW4gcmVzZXQsIHRvIG9ubHkgdHJpbSBEQUNzIG9uIGZpcnN0IHRpbWUKKwkJICogYWZ0ZXIgY2hpcCByZXNldCBvciBwb3dlcmN5Y2xlIChub3QgZHJpdmVyIHJlbG9hZCkKKwkJICovCisJCXJldCA9IGlwYXRoX3NkNzIyMF9pbml0KGRkLCB3YXNfcmVzZXQpOworCX0KKworCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcpOworCXByZXZfdmFsID0gdmFsOworCXZhbCB8PSBJTkZJTklQQVRIX1hHWFNfRkNfU0FGRTsKKwlpZiAodmFsICE9IHByZXZfdmFsKSB7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZywgdmFsKTsKKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJfQorCWlmICh2YWwgJiBJTkZJTklQQVRIX1hHWFNfUkVTRVQpCisJCXZhbCAmPSB+SU5GSU5JUEFUSF9YR1hTX1JFU0VUOworCWlmICh2YWwgIT0gcHJldl92YWwpCisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZywgdmFsKTsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImRvbmU6IHhneHM9JWxseCBmcm9tICVsbHhcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCSAgIGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcpLAorCQkgICBwcmV2X3ZhbCk7CisKKwlndWlkID0gYmU2NF90b19jcHUoZGQtPmlwYXRoX2d1aWQpOworCisJaWYgKCFndWlkKSB7CisJCS8qIGhhdmUgdG8gaGF2ZSBzb21ldGhpbmcsIHNvIHVzZSBsaWtlbHkgdW5pcXVlIHRzYyAqLworCQlndWlkID0gZ2V0X2N5Y2xlcygpOworCQlpcGF0aF9kYmcoIk5vIEdVSUQgZm9yIGhlYXJ0YmVhdCwgZmFraW5nICVsbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWd1aWQpOworCX0gZWxzZQorCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJXcm90ZSAlbGxYIHRvIEhSVEJUX0dVSURcbiIsIGd1aWQpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHJ0YnRfZ3VpZCwgZ3VpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfNzIyMF9jb25maWdfamludChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICAgdTE2IGlkbGVfdGlja3MsIHUxNiBtYXhfcGFja2V0cykKK3sKKworCS8qCisJICogV2UgY2FuIHJlcXVlc3QgYSByZWNlaXZlIGludGVycnVwdCBmb3IgMSBvciBtb3JlIHBhY2tldHMKKwkgKiBmcm9tIGN1cnJlbnQgb2Zmc2V0LgorCSAqLworCWlmIChpZGxlX3RpY2tzID09IDAgfHwgbWF4X3BhY2tldHMgPT0gMCkKKwkJLyogaW50ZXJydXB0IGFmdGVyIG9uZSBwYWNrZXQgaWYgbm8gbWl0aWdhdGlvbiAqLworCQlkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYgPQorCQkJMVVMTCA8PCBJQkE3MjIwX0hEUkhFQURfUEtUSU5UX1NISUZUOworCWVsc2UKKwkJLyogVHVybiBvZmYgUmN2SGRySGVhZCBpbnRlcnJ1cHRzIGlmIHVzaW5nIG1pdGlnYXRpb24gKi8KKwkJZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmID0gMFVMTDsKKworCS8qIHJlZnJlc2gga2VybmVsIFJjdkhkckhlYWQgcmVnaXN0ZXJzLi4uICovCisJaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwKKwkJCSBkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYgfAorCQkJIGRkLT5pcGF0aF9wZFswXS0+cG9ydF9oZWFkLCAwKTsKKworCWRkLT5pcGF0aF9qaW50X21heF9wYWNrZXRzID0gbWF4X3BhY2tldHM7CisJZGQtPmlwYXRoX2ppbnRfaWRsZV90aWNrcyA9IGlkbGVfdGlja3M7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9qaW50cmVsb2FkLAorCQkJICgodTY0KSBtYXhfcGFja2V0cyA8PCBJTkZJTklQQVRIX0pJTlRfUEFDS0VUU0hJRlQpIHwKKwkJCSBpZGxlX3RpY2tzKTsKK30KKworLyoqCisgKiBpcGF0aF83MjIwX3F1aWV0X3NlcmRlcyAtIHNldCBzZXJkZXMgdG8gdHhpZGxlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQ2FsbGVkIHdoZW4gZHJpdmVyIGlzIGJlaW5nIHVubG9hZGVkCisgKi8KK3N0YXRpYyB2b2lkIGlwYXRoXzcyMjBfcXVpZXRfc2VyZGVzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1NjQgdmFsOworCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfSUJfQVVUT05FR19JTlBST0c7CisJd2FrZV91cCgmZGQtPmlwYXRoX2F1dG9uZWdfd2FpdCk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmZGQtPmlwYXRoX2F1dG9uZWdfd29yayk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlpcGF0aF9zaHV0ZG93bl9yZWxvY2tfcG9sbChkZCk7CisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZyk7CisJdmFsIHw9IElORklOSVBBVEhfWEdYU19SRVNFVDsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfNzIyMF9pbnRjb25maWcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWlwYXRoXzcyMjBfY29uZmlnX2ppbnQoZGQsIGRkLT5pcGF0aF9qaW50X2lkbGVfdGlja3MsCisJCQkgICAgICAgZGQtPmlwYXRoX2ppbnRfbWF4X3BhY2tldHMpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX3NldHVwXzcyMjBfc2V0ZXh0bGVkIC0gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgdHdvIGV4dGVybmFsIExFRHMKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbHN0OiB0aGUgTCBzdGF0ZQorICogQGx0c3Q6IHRoZSBMVCBzdGF0ZQorICoKKyAqIFRoZXNlIExFRHMgaW5kaWNhdGUgdGhlIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHN0YXRlIG9mIElCIGxpbmsuCisgKiBGb3IgdGhpcyBjaGlwIChhdCBsZWFzdCB3aXRoIHJlY29tbWVuZGVkIGJvYXJkIHBpbm91dHMpLCBMRUQxCisgKiBpcyBZZWxsb3cgKGxvZ2ljYWwgc3RhdGUpIGFuZCBMRUQyIGlzIEdyZWVuIChwaHlzaWNhbCBzdGF0ZSksCisgKgorICogTm90ZTogIFdlIHRyeSB0byBtYXRjaCB0aGUgTWVsbGFub3ggSENBIExFRCBiZWhhdmlvciBhcyBiZXN0CisgKiB3ZSBjYW4uICBHcmVlbiBpbmRpY2F0ZXMgcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBPSyAoc29tZXRoaW5nIGlzCisgKiBwbHVnZ2VkIGluLCBhbmQgd2UgY2FuIHRyYWluKS4KKyAqIEFtYmVyIGluZGljYXRlcyB0aGUgbGluayBpcyBsb2dpY2FsbHkgdXAgKEFDVElWRSkuCisgKiBNZWxsYW5veCBmdXJ0aGVyIGJsaW5rcyB0aGUgYW1iZXIgTEVEIHRvIGluZGljYXRlIGRhdGEgcGFja2V0CisgKiBhY3Rpdml0eSwgYnV0IHdlIGhhdmUgbm8gaGFyZHdhcmUgc3VwcG9ydCBmb3IgdGhhdCwgc28gaXQgd291bGQKKyAqIHJlcXVpcmUgd2FraW5nIHVwIGV2ZXJ5IDEwLTIwIG1zZWNzIGFuZCBjaGVja2luZyB0aGUgY291bnRlcnMKKyAqIG9uIHRoZSBjaGlwLCBhbmQgdGhlbiB0dXJuaW5nIHRoZSBMRUQgb2ZmIGlmIGFwcHJvcHJpYXRlLiAgVGhhdCdzCisgKiB2aXNpYmxlIG92ZXJoZWFkLCBzbyBub3Qgc29tZXRoaW5nIHdlIHdpbGwgZG8uCisgKgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9zZXR1cF83MjIwX3NldGV4dGxlZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU2NCBsc3QsCisJCQkJICAgICAgIHU2NCBsdHN0KQoreworCXU2NCBleHRjdGwsIGxlZGJsaW5rID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCS8qIHRoZSBkaWFncyB1c2UgdGhlIExFRCB0byBpbmRpY2F0ZSBkaWFnIGluZm8sIHNvIHdlIGxlYXZlCisJICogdGhlIGV4dGVybmFsIExFRCBhbG9uZSB3aGVuIHRoZSBkaWFncyBhcmUgcnVubmluZyAqLworCWlmIChpcGF0aF9kaWFnX2ludXNlKQorCQlyZXR1cm47CisKKwkvKiBBbGxvdyBvdmVycmlkZSBvZiBMRUQgZGlzcGxheSBmb3IsIGUuZy4gTG9jYXRpbmcgc3lzdGVtIGluIHJhY2sgKi8KKwlpZiAoZGQtPmlwYXRoX2xlZF9vdmVycmlkZSkgeworCQlsdHN0ID0gKGRkLT5pcGF0aF9sZWRfb3ZlcnJpZGUgJiBJUEFUSF9MRURfUEhZUykKKwkJCT8gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUAorCQkJOiBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfRElTQUJMRUQ7CisJCWxzdCA9IChkZC0+aXBhdGhfbGVkX292ZXJyaWRlICYgSVBBVEhfTEVEX0xPRykKKwkJCT8gSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFCisJCQk6IElORklOSVBBVEhfSUJDU19MX1NUQVRFX0RPV047CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9ncGlvX2xvY2ssIGZsYWdzKTsKKwlleHRjdGwgPSBkZC0+aXBhdGhfZXh0Y3RybCAmIH4oSU5GSU5JUEFUSF9FWFRDX0xFRDFQUklQT1JUX09OIHwKKwkJCQkgICAgICAgSU5GSU5JUEFUSF9FWFRDX0xFRDJQUklQT1JUX09OKTsKKwlpZiAobHRzdCA9PSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQKSB7CisJCWV4dGN0bCB8PSBJTkZJTklQQVRIX0VYVENfTEVEMVBSSVBPUlRfT047CisJCS8qCisJCSAqIGNvdW50cyBhcmUgaW4gY2hpcCBjbG9jayAoNG5zKSBwZXJpb2RzLgorCQkgKiBUaGlzIGlzIDEvMTYgc2VjICg2Ni42bXMpIG9uLAorCQkgKiAzLzE2IHNlYyAoMTg3LjUgbXMpIG9mZiwgd2l0aCBwYWNrZXRzIHJjdmQKKwkJICovCisJCWxlZGJsaW5rID0gKCg2NjYwMCoxMDAwVUwvNCkgPDwgSUJBNzIyMF9MRURCTElOS19PTl9TSElGVCkKKwkJCXwgKCgxODc1MDAqMTAwMFVMLzQpIDw8IElCQTcyMjBfTEVEQkxJTktfT0ZGX1NISUZUKTsKKwl9CisJaWYgKGxzdCA9PSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9BQ1RJVkUpCisJCWV4dGN0bCB8PSBJTkZJTklQQVRIX0VYVENfTEVEMlBSSVBPUlRfT047CisJZGQtPmlwYXRoX2V4dGN0cmwgPSBleHRjdGw7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRjdHJsLCBleHRjdGwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9ncGlvX2xvY2ssIGZsYWdzKTsKKworCWlmIChsZWRibGluaykgLyogYmxpbmsgdGhlIExFRCBvbiBwYWNrZXQgcmVjZWl2ZSAqLworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdnBrdGxlZGNudCwKKwkJCWxlZGJsaW5rKTsKK30KKworLyoKKyAqIFNpbWlsYXIgdG8gcGNpX2ludHgocGRldiwgMSksIGV4Y2VwdCB0aGF0IHdlIG1ha2Ugc3VyZQorICogbXNpIGlzIG9mZi4uLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9lbmFibGVfaW50eChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1MTYgY3csIG5ldzsKKwlpbnQgcG9zOworCisJLyogZmlyc3QsIHR1cm4gb24gSU5UeCAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY3cpOworCW5ldyA9IGN3ICYgflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKKwlpZiAobmV3ICE9IGN3KQorCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIG5ldyk7CisKKwkvKiB0aGVuIHR1cm4gb2ZmIE1TSSAqLworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0kpOworCWlmIChwb3MpIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgJmN3KTsKKwkJbmV3ID0gY3cgJiB+UENJX01TSV9GTEFHU19FTkFCTEU7CisJCWlmIChuZXcgIT0gY3cpCisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgbmV3KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfbXNpX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHBvcywgcmV0ID0gMDsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0kpOworCWlmIChwb3MpIHsKKwkJdTE2IGN3OworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9NU0lfRkxBR1MsICZjdyk7CisJCXJldCA9ICEhKGN3ICYgUENJX01TSV9GTEFHU19FTkFCTEUpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZGlzYWJsZSBtc2kgaW50ZXJydXB0IGlmIGVuYWJsZWQsIGFuZCBjbGVhciB0aGUgZmxhZy4KKyAqIGZsYWcgaXMgdXNlZCBwcmltYXJpbHkgZm9yIHRoZSBmYWxsYmFjayB0byBJTlR4LCBidXQKKyAqIGlzIGFsc28gdXNlZCBpbiByZWluaXQgYWZ0ZXIgcmVzZXQgYXMgYSBmbGFnLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF83MjIwX25vbXNpKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlkZC0+aXBhdGhfbXNpX2xvID0gMDsKKworCWlmIChpcGF0aF9tc2lfZW5hYmxlZChkZC0+cGNpZGV2KSkgeworCQkvKgorCQkgKiBmcmVlLCBidXQgZG9uJ3QgemVybzsgbGF0ZXIga2VybmVscyByZXF1aXJlCisJCSAqIGl0IGJlIGZyZWVkIGJlZm9yZSBkaXNhYmxlX21zaSwgc28gdGhlIGludHgKKwkJICogc2V0dXAgaGFzIHRvIHJlcXVlc3QgaXQgYWdhaW4uCisJCSAqLworCQkgaWYgKGRkLT5pcGF0aF9pcnEpCisJCQlmcmVlX2lycShkZC0+aXBhdGhfaXJxLCBkZCk7CisJCXBjaV9kaXNhYmxlX21zaShkZC0+cGNpZGV2KTsKKwl9Cit9CisKKy8qCisgKiBpcGF0aF9zZXR1cF83MjIwX2NsZWFudXAgLSBjbGVhbiB1cCBhbnkgcGVyLWNoaXAgY2hpcC1zcGVjaWZpYyBzdHVmZgorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBOb3RoaW5nIGJ1dCBtc2kgaW50ZXJydXB0IGNsZWFudXAgZm9yIG5vdy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgZHJpdmVyIHVubG9hZC4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfc2V0dXBfNzIyMF9jbGVhbnVwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpcGF0aF83MjIwX25vbXNpKGRkKTsKK30KKworCitzdGF0aWMgdm9pZCBpcGF0aF83MjIwX3BjaWVfcGFyYW1zKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGJvYXJkcmV2KQoreworCXUxNiBsaW5rc3RhdCwgbWlud2lkdGgsIHNwZWVkOworCWludCBwb3M7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRkLT5wY2lkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoIXBvcykgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2FuJ3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5IVxuIik7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS1NUQSwKKwkJCSAgICAgJmxpbmtzdGF0KTsKKwkvKgorCSAqIHNwZWVkIGlzIGJpdHMgMC00LCBsaW5rd2lkdGggaXMgYml0cyA0LTgKKwkgKiBubyBkZWZpbmVzIGZvciB0aGVtIGluIGhlYWRlcnMKKwkgKi8KKwlzcGVlZCA9IGxpbmtzdGF0ICYgMHhmOworCWxpbmtzdGF0ID4+PSA0OworCWxpbmtzdGF0ICY9IDB4MWY7CisJZGQtPmlwYXRoX2xidXNfd2lkdGggPSBsaW5rc3RhdDsKKwlzd2l0Y2ggKGJvYXJkcmV2KSB7CisJY2FzZSAwOgorCWNhc2UgMjoKKwljYXNlIDEwOgorCWNhc2UgMTI6CisJCW1pbndpZHRoID0gMTY7IC8qIHgxNiBjYXBhYmxlIGJvYXJkcyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQltaW53aWR0aCA9IDg7IC8qIHg4IGNhcGFibGUgYm9hcmRzICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIDE6CisJCWRkLT5pcGF0aF9sYnVzX3NwZWVkID0gMjUwMDsgLyogR2VuMSwgMi41R0h6ICovCisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGQtPmlwYXRoX2xidXNfc3BlZWQgPSA1MDAwOyAvKiBHZW4xLCA1R0h6ICovCisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIG5vdCBkZWZpbmVkLCBhc3N1bWUgZ2VuMSAqLworCQlkZC0+aXBhdGhfbGJ1c19zcGVlZCA9IDI1MDA7CisJCWJyZWFrOworCX0KKworCWlmIChsaW5rc3RhdCA8IG1pbndpZHRoKQorCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJIlBDSWUgd2lkdGggJXUgKHgldSBIQ0EpLCBwZXJmb3JtYW5jZSAiCisJCQkicmVkdWNlZFxuIiwgbGlua3N0YXQsIG1pbndpZHRoKTsKKwllbHNlCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlBDSWUgc3BlZWQgJXUgd2lkdGggJXUgKHgldSBIQ0EpXG4iLAorCQkJZGQtPmlwYXRoX2xidXNfc3BlZWQsIGxpbmtzdGF0LCBtaW53aWR0aCk7CisKKwlpZiAoc3BlZWQgIT0gMSkKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSJQQ0llIGxpbmtzcGVlZCAldSBpcyBpbmNvcnJlY3Q7ICIKKwkJCSJzaG91bGQgYmUgMSAoMjUwMCkhXG4iLCBzcGVlZCk7CisKK2JhaWw6CisJLyogZmlsbCBpbiBzdHJpbmcsIGV2ZW4gb24gZXJyb3JzICovCisJc25wcmludGYoZGQtPmlwYXRoX2xidXNfaW5mbywgc2l6ZW9mKGRkLT5pcGF0aF9sYnVzX2luZm8pLAorCQkiUENJZSwldU1Ieix4JXVcbiIsCisJCWRkLT5pcGF0aF9sYnVzX3NwZWVkLAorCQlkZC0+aXBhdGhfbGJ1c193aWR0aCk7CisJcmV0dXJuOworfQorCisKKy8qKgorICogaXBhdGhfc2V0dXBfNzIyMF9jb25maWcgLSBzZXR1cCBQQ0llIGNvbmZpZyByZWxhdGVkIHN0dWZmCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBkZXY6IHRoZSBQQ0kgZGV2aWNlCisgKgorICogVGhlIHBjaV9lbmFibGVfbXNpKCkgY2FsbCB3aWxsIGZhaWwgb24gc3lzdGVtcyB3aXRoIE1TSSBxdWlya3MKKyAqIHN1Y2ggYXMgdGhvc2Ugd2l0aCBBTUQ4MTMxLCBldmVuIGlmIHRoZSBkZXZpY2Ugb2YgaW50ZXJlc3QgaXMgbm90CisgKiBhdHRhY2hlZCB0byB0aGF0IGRldmljZSwgKGluIHRoZSAyLjYuMTMgLSAyLjYuMTUga2VybmVscywgYXQgbGVhc3QsIGZpeGVkCisgKiBsYXRlIGluIDIuNi4xNikuCisgKiBBbGwgdGhhdCBjYW4gYmUgZG9uZSBpcyB0byBlZGl0IHRoZSBrZXJuZWwgc291cmNlIHRvIHJlbW92ZSB0aGUgcXVpcmsKKyAqIGNoZWNrIHVudGlsIHRoYXQgaXMgZml4ZWQuCisgKiBXZSBkbyBub3QgbmVlZCB0byBjYWxsIGVuYWJsZV9tc2koKSBmb3Igb3VyIEh5cGVyVHJhbnNwb3J0IGNoaXAsCisgKiBldmVuIHRob3VnaCBpdCB1c2VzIE1TSSwgYW5kIHdlIHdhbnQgdG8gYXZvaWQgdGhlIHF1aXJrIHdhcm5pbmcsIHNvCisgKiBTbyB3ZSBjYWxsIGVuYWJsZV9tc2kgb25seSBmb3IgUENJZS4gIElmIHdlIGRvIGVuZCB1cCBuZWVkaW5nCisgKiBwY2lfZW5hYmxlX21zaSBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgZm9yIEhULCB3ZSdsbCBtb3ZlIHRoZQorICogY2FsbCBiYWNrIGludG8gdGhlIG1haW4gaW5pdF9vbmUgY29kZS4KKyAqIFdlIHNhdmUgdGhlIG1zaSBsbyBhbmQgaGkgdmFsdWVzLCBzbyB3ZSBjYW4gcmVzdG9yZSB0aGVtIGFmdGVyCisgKiBjaGlwIHJlc2V0ICh0aGUga2VybmVsIFBDSSBpbmZyYXN0cnVjdHVyZSBkb2Vzbid0IHlldCBoYW5kbGUgdGhhdAorICogY29ycmVjdGx5KS4KKyAqLworc3RhdGljIGludCBpcGF0aF9zZXR1cF83MjIwX2NvbmZpZyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHBvcywgcmV0ID0gLTE7CisJdTMyIGJvYXJkcmV2OworCisJZGQtPmlwYXRoX21zaV9sbyA9IDA7CS8qIHVzZWQgYXMgYSBmbGFnIGR1cmluZyByZXNldCBwcm9jZXNzaW5nICovCisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAoIXN0cmNtcChpbnRfdHlwZSwgImZvcmNlX21zaSIpIHx8ICFzdHJjbXAoaW50X3R5cGUsICJhdXRvIikpCisJCXJldCA9IHBjaV9lbmFibGVfbXNpKHBkZXYpOworCWlmIChyZXQpIHsKKwkJaWYgKCFzdHJjbXAoaW50X3R5cGUsICJmb3JjZV9tc2kiKSkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgInBjaV9lbmFibGVfbXNpIGZhaWxlZDogJWQsICIKKwkJCQkgICAgICAiZm9yY2VfbXNpIGlzIG9uLCBzbyBub3QgY29udGludWluZy5cbiIsCisJCQkJICAgICAgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpcGF0aF9lbmFibGVfaW50eChwZGV2KTsKKwkJaWYgKCFzdHJjbXAoaW50X3R5cGUsICJhdXRvIikpCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAicGNpX2VuYWJsZV9tc2kgZmFpbGVkOiAlZCwgIgorCQkJCSAgICAgICJmYWxsaW5nIGJhY2sgdG8gSU5UeFxuIiwgcmV0KTsKKwl9IGVsc2UgaWYgKHBvcykgeworCQl1MTYgY29udHJvbDsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19MTywKKwkJCQkgICAgICAmZGQtPmlwYXRoX21zaV9sbyk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfSEksCisJCQkJICAgICAgJmRkLT5pcGF0aF9tc2lfaGkpOworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLAorCQkJCSAgICAgJmNvbnRyb2wpOworCQkvKiBub3cgc2F2ZSB0aGUgZGF0YSAodmVjdG9yKSBpbmZvICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsCisJCQkJICAgICBwb3MgKyAoKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKQorCQkJCQkgICAgPyBQQ0lfTVNJX0RBVEFfNjQgOgorCQkJCQkgICAgUENJX01TSV9EQVRBXzMyKSwKKwkJCQkgICAgICZkZC0+aXBhdGhfbXNpX2RhdGEpOworCX0gZWxzZQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2FuJ3QgZmluZCBNU0kgY2FwYWJpbGl0eSwgIgorCQkJICAgICAgImNhbid0IHNhdmUgTVNJIHNldHRpbmdzIGZvciByZXNldFxuIik7CisKKwlkZC0+aXBhdGhfaXJxID0gcGRldi0+aXJxOworCisJLyoKKwkgKiBXZSBzYXZlIHRoZSBjYWNoZWxpbmVzaXplIGFsc28sIGFsdGhvdWdoIGl0IGRvZXNuJ3QKKwkgKiByZWFsbHkgbWF0dGVyLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCisJCQkgICAgICZkZC0+aXBhdGhfcGNpX2NhY2hlbGluZSk7CisKKwkvKgorCSAqIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGVhcmx5LCBpcGF0aF9ib2FyZHJldiBub3Qgc2V0IHlldC4gIENhbid0CisJICogdXNlIGlwYXRoX3JlYWRfa3JlZzY0KCkgeWV0LCB0b28gZWFybHkgaW4gaW5pdCwgc28gdXNlIHJlYWRxKCkKKwkgKi8KKwlib2FyZHJldiA9IChyZWFkcSgmZGQtPmlwYXRoX2tyZWdiYXNlW2RkLT5pcGF0aF9rcmVncy0+a3JfcmV2aXNpb25dKQorCQkgPj4gSU5GSU5JUEFUSF9SX0JPQVJESURfU0hJRlQpICYgSU5GSU5JUEFUSF9SX0JPQVJESURfTUFTSzsKKworCWlwYXRoXzcyMjBfcGNpZV9wYXJhbXMoZGQsIGJvYXJkcmV2KTsKKworCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9OT0RNQV9SVEFJTCB8IElQQVRIX0hBU19TRU5EX0RNQSB8CisJCUlQQVRIX0hBU19QQkNfQ05UIHwgSVBBVEhfSEFTX1RIUkVTSF9VUERBVEU7CisJZGQtPmlwYXRoX3Bpb3VwZF90aHJlc2ggPSA0VTsgLyogc2V0IGRlZmF1bHQgdXBkYXRlIHRocmVzaG9sZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9pbml0XzcyMjBfdmFyaWFibGVzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwkvKgorCSAqIHNldHVwIHRoZSByZWdpc3RlciBvZmZzZXRzLCBzaW5jZSB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGVhY2gKKwkgKiBjaGlwCisJICovCisJZGQtPmlwYXRoX2tyZWdzID0gJmlwYXRoXzcyMjBfa3JlZ3M7CisJZGQtPmlwYXRoX2NyZWdzID0gJmlwYXRoXzcyMjBfY3JlZ3M7CisKKwkvKgorCSAqIGJpdHMgZm9yIHNlbGVjdGluZyBpMmMgZGlyZWN0aW9uIGFuZCB2YWx1ZXMsCisJICogdXNlZCBmb3IgSTJDIHNlcmlhbCBmbGFzaAorCSAqLworCWRkLT5pcGF0aF9ncGlvX3NkYV9udW0gPSBfSVBBVEhfR1BJT19TREFfTlVNOworCWRkLT5pcGF0aF9ncGlvX3NjbF9udW0gPSBfSVBBVEhfR1BJT19TQ0xfTlVNOworCWRkLT5pcGF0aF9ncGlvX3NkYSA9IElQQVRIX0dQSU9fU0RBOworCWRkLT5pcGF0aF9ncGlvX3NjbCA9IElQQVRIX0dQSU9fU0NMOworCisJLyoKKwkgKiBGaWxsIGluIGRhdGEgZm9yIGZpZWxkLXZhbHVlcyB0aGF0IGNoYW5nZSBpbiBJQkE3MjIwLgorCSAqIFdlIGR5bmFtaWNhbGx5IHNwZWNpZnkgb25seSB0aGUgbWFzayBmb3IgTElOS1RSQUlOSU5HU1RBVEUKKwkgKiBhbmQgb25seSB0aGUgc2hpZnQgZm9yIExJTktTVEFURSwgYXMgdGhleSBhcmUgdGhlIG9ubHkgb25lcworCSAqIHRoYXQgY2hhbmdlLiAgQWxzbyBwcmVjYWxjdWxhdGUgdGhlIDMgbGluayBzdGF0ZXMgb2YgaW50ZXJlc3QKKwkgKiBhbmQgdGhlIGNvbWJpbmVkIG1hc2suCisJICovCisJZGQtPmliY3NfbHNfc2hpZnQgPSBJQkE3MjIwX0lCQ1NfTElOS1NUQVRFX1NISUZUOworCWRkLT5pYmNzX2x0c19tYXNrID0gSUJBNzIyMF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0s7CisJZGQtPmliY3NfbWFzayA9IChJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX01BU0sgPDwKKwkJZGQtPmliY3NfbHNfc2hpZnQpIHwgZGQtPmliY3NfbHRzX21hc2s7CisJZGQtPmliX2luaXQgPSAoSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCA8PAorCQlJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpIHwKKwkJKElORklOSVBBVEhfSUJDU19MX1NUQVRFX0lOSVQgPDwgZGQtPmliY3NfbHNfc2hpZnQpOworCWRkLT5pYl9hcm0gPSAoSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCA8PAorCQlJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpIHwKKwkJKElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FSTSA8PCBkZC0+aWJjc19sc19zaGlmdCk7CisJZGQtPmliX2FjdGl2ZSA9IChJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQIDw8CisJCUlORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkgfAorCQkoSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFIDw8IGRkLT5pYmNzX2xzX3NoaWZ0KTsKKworCS8qCisJICogRmlsbCBpbiBkYXRhIGZvciBpYmNjIGZpZWxkLXZhbHVlcyB0aGF0IGNoYW5nZSBpbiBJQkE3MjIwLgorCSAqIFdlIGR5bmFtaWNhbGx5IHNwZWNpZnkgb25seSB0aGUgbWFzayBmb3IgTElOS0lOSVRDTUQKKwkgKiBhbmQgb25seSB0aGUgc2hpZnQgZm9yIExJTktDTUQgYW5kIE1BWFBLVExFTiwgYXMgdGhleSBhcmUKKwkgKiB0aGUgb25seSBvbmVzIHRoYXQgY2hhbmdlLgorCSAqLworCWRkLT5pYmNjX2xpY19tYXNrID0gSUJBNzIyMF9JQkNDX0xJTktJTklUQ01EX01BU0s7CisJZGQtPmliY2NfbGNfc2hpZnQgPSBJQkE3MjIwX0lCQ0NfTElOS0NNRF9TSElGVDsKKwlkZC0+aWJjY19tcGxfc2hpZnQgPSBJQkE3MjIwX0lCQ0NfTUFYUEtUTEVOX1NISUZUOworCisJLyogRmlsbCBpbiBzaGlmdHMgZm9yIFJjdkN0cmwuICovCisJZGQtPmlwYXRoX3JfcG9ydGVuYWJsZV9zaGlmdCA9IElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUOworCWRkLT5pcGF0aF9yX2ludHJhdmFpbF9zaGlmdCA9IElCQTcyMjBfUl9JTlRSQVZBSUxfU0hJRlQ7CisJZGQtPmlwYXRoX3JfdGFpbHVwZF9zaGlmdCA9IElCQTcyMjBfUl9UQUlMVVBEX1NISUZUOworCWRkLT5pcGF0aF9yX3BvcnRjZmdfc2hpZnQgPSBJQkE3MjIwX1JfUE9SVENGR19TSElGVDsKKworCS8qIHZhcmlhYmxlcyBmb3Igc2FuaXR5IGNoZWNraW5nIGludGVycnVwdCBhbmQgZXJyb3JzICovCisJZGQtPmlwYXRoX2h3ZV9iaXRzZXh0YW50ID0KKwkJKElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9NQVNLIDw8CisJCSBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpIHwKKwkJKElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NQVNLIDw8CisJCSBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpIHwKKwkJKElORklOSVBBVEhfSFdFX1BDSUVNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQkgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCkgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFMVBMTEZBSUxFRCB8CisJCUlORklOSVBBVEhfSFdFX1BDSUUwUExMRkFJTEVEIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRVBPSVNPTkVEVExQIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRUNQTFRJTUVPVVQgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZWFRMSCB8CisJCUlORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlYQURNIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVJBRE0gfAorCQlJTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEIHwKKwkJSU5GSU5JUEFUSF9IV0VfQ09SRVBMTF9GQlNMSVAgfAorCQlJTkZJTklQQVRIX0hXRV9DT1JFUExMX1JGU0xJUCB8CisJCUlORklOSVBBVEhfSFdFX1NFUkRFU1BMTEZBSUxFRCB8CisJCUlORklOSVBBVEhfSFdFX0lCQ0JVU1RPU1BDUEFSSVRZRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfSUJDQlVTRlJTUENQQVJJVFlFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFQ1BMREFUQVFVRVVFRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRUNQTEhEUlFVRVVFRVJSIHwKKwkJSU5GSU5JUEFUSF9IV0VfU0RNQU1FTVJFQURFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9DTEtfVUNfUExMTk9UTE9DS0VEIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRVNFUkRFU1EwUENMS05PVERFVEVDVCB8CisJCUlORklOSVBBVEhfSFdFX1BDSUVTRVJERVNRMVBDTEtOT1RERVRFQ1QgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFU0VSREVTUTJQQ0xLTk9UREVURUNUIHwKKwkJSU5GSU5JUEFUSF9IV0VfUENJRVNFUkRFU1EzUENMS05PVERFVEVDVCB8CisJCUlORklOSVBBVEhfSFdFX0REU1JYRVFNRU1PUllQQVJJVFlFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9JQl9VQ19NRU1PUllQQVJJVFlFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFX1VDX09DVDBNRU1PUllQQVJJVFlFUlIgfAorCQlJTkZJTklQQVRIX0hXRV9QQ0lFX1VDX09DVDFNRU1PUllQQVJJVFlFUlI7CisJZGQtPmlwYXRoX2lfYml0c2V4dGFudCA9CisJCUlORklOSVBBVEhfSV9TRE1BSU5UIHwgSU5GSU5JUEFUSF9JX1NETUFESVNBQkxFRCB8CisJCShJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgPDwgSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkgfAorCQkoSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0sgPDwKKwkJIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCkgfAorCQlJTkZJTklQQVRIX0lfRVJST1IgfCBJTkZJTklQQVRIX0lfU1BJT1NFTlQgfAorCQlJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMIHwgSU5GSU5JUEFUSF9JX0dQSU8gfAorCQlJTkZJTklQQVRIX0lfSklOVCB8IElORklOSVBBVEhfSV9TRVJERVNUUklNRE9ORTsKKwlkZC0+aXBhdGhfZV9iaXRzZXh0YW50ID0KKwkJSU5GSU5JUEFUSF9FX1JGT1JNQVRFUlIgfCBJTkZJTklQQVRIX0VfUlZDUkMgfAorCQlJTkZJTklQQVRIX0VfUklDUkMgfCBJTkZJTklQQVRIX0VfUk1JTlBLVExFTiB8CisJCUlORklOSVBBVEhfRV9STUFYUEtUTEVOIHwgSU5GSU5JUEFUSF9FX1JMT05HUEtUTEVOIHwKKwkJSU5GSU5JUEFUSF9FX1JTSE9SVFBLVExFTiB8IElORklOSVBBVEhfRV9SVU5FWFBDSEFSIHwKKwkJSU5GSU5JUEFUSF9FX1JVTlNVUFZMIHwgSU5GSU5JUEFUSF9FX1JFQlAgfAorCQlJTkZJTklQQVRIX0VfUklCRkxPVyB8IElORklOSVBBVEhfRV9SQkFEVkVSU0lPTiB8CisJCUlORklOSVBBVEhfRV9SUkNWRUdSRlVMTCB8IElORklOSVBBVEhfRV9SUkNWSERSRlVMTCB8CisJCUlORklOSVBBVEhfRV9SQkFEVElEIHwgSU5GSU5JUEFUSF9FX1JIRFJMRU4gfAorCQlJTkZJTklQQVRIX0VfUkhEUiB8IElORklOSVBBVEhfRV9SSUJMT1NUTElOSyB8CisJCUlORklOSVBBVEhfRV9TRU5EU1BFQ0lBTFRSSUdHRVIgfAorCQlJTkZJTklQQVRIX0VfU0RNQURJU0FCTEVEIHwgSU5GSU5JUEFUSF9FX1NNSU5QS1RMRU4gfAorCQlJTkZJTklQQVRIX0VfU01BWFBLVExFTiB8IElORklOSVBBVEhfRV9TVU5ERVJSVU4gfAorCQlJTkZJTklQQVRIX0VfU1BLVExFTiB8IElORklOSVBBVEhfRV9TRFJPUFBFRFNNUFBLVCB8CisJCUlORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QgfAorCQlJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCB8IElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0gfAorCQlJTkZJTklQQVRIX0VfU1VOU1VQVkwgfCBJTkZJTklQQVRIX0VfU0VOREJVRk1JU1VTRSB8CisJCUlORklOSVBBVEhfRV9TRE1BR0VOTUlTTUFUQ0ggfCBJTkZJTklQQVRIX0VfU0RNQU9VVE9GQk9VTkQgfAorCQlJTkZJTklQQVRIX0VfU0RNQVRBSUxPVVRPRkJPVU5EIHwgSU5GSU5JUEFUSF9FX1NETUFCQVNFIHwKKwkJSU5GSU5JUEFUSF9FX1NETUExU1RERVNDIHwgSU5GSU5JUEFUSF9FX1NETUFSUFlUQUcgfAorCQlJTkZJTklQQVRIX0VfU0RNQURXRU4gfCBJTkZJTklQQVRIX0VfU0RNQU1JU1NJTkdEVyB8CisJCUlORklOSVBBVEhfRV9TRE1BVU5FWFBEQVRBIHwKKwkJSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCB8IElORklOSVBBVEhfRV9JTlZBTElEQUREUiB8CisJCUlORklOSVBBVEhfRV9SRVNFVCB8IElORklOSVBBVEhfRV9IQVJEV0FSRSB8CisJCUlORklOSVBBVEhfRV9TRE1BREVTQ0FERFJNSVNBTElHTiB8CisJCUlORklOSVBBVEhfRV9JTlZBTElERUVQQ01EOworCisJZGQtPmlwYXRoX2lfcmN2YXZhaWxfbWFzayA9IElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLOworCWRkLT5pcGF0aF9pX3JjdnVyZ19tYXNrID0gSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLOworCWRkLT5pcGF0aF9pX3JjdmF2YWlsX3NoaWZ0ID0gSU5GSU5JUEFUSF9JX1JDVkFWQUlMX1NISUZUOworCWRkLT5pcGF0aF9pX3JjdnVyZ19zaGlmdCA9IElORklOSVBBVEhfSV9SQ1ZVUkdfU0hJRlQ7CisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0lOVFJFR182NCB8IElQQVRIX0hBU19NVUxUX0lCX1NQRUVECisJCXwgSVBBVEhfSEFTX0xJTktfTEFURU5DWTsKKworCS8qCisJICogRUVQUk9NIGVycm9yIGxvZyAwIGlzIFRYRSBQYXJpdHkgZXJyb3JzLiAxIGlzIFJYRSBQYXJpdHkuCisJICogMiBpcyBTb21lIE1pc2MsIDMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZS4KKwkgKi8KKwlkZC0+aXBhdGhfZWVwX3N0X21hc2tzWzBdLmh3ZXJyc190b19sb2cgPQorCQlJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQlJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQ7CisKKwlkZC0+aXBhdGhfZWVwX3N0X21hc2tzWzFdLmh3ZXJyc190b19sb2cgPQorCQlJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQlJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQ7CisKKwlkZC0+aXBhdGhfZWVwX3N0X21hc2tzWzJdLmVycnNfdG9fbG9nID0gSU5GSU5JUEFUSF9FX1JFU0VUOworCisJaXBhdGhfbGlua3JlY292ZXJ5ID0gMDsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRkLT5pcGF0aF9hdXRvbmVnX3dhaXQpOworCUlOSVRfREVMQVlFRF9XT1JLKCZkZC0+aXBhdGhfYXV0b25lZ193b3JrLCAgYXV0b25lZ193b3JrKTsKKworCWRkLT5pcGF0aF9saW5rX3dpZHRoX3N1cHBvcnRlZCA9IElCX1dJRFRIXzFYIHwgSUJfV0lEVEhfNFg7CisJZGQtPmlwYXRoX2xpbmtfc3BlZWRfc3VwcG9ydGVkID0gSVBBVEhfSUJfU0RSIHwgSVBBVEhfSUJfRERSOworCisJZGQtPmlwYXRoX2xpbmtfd2lkdGhfZW5hYmxlZCA9IGRkLT5pcGF0aF9saW5rX3dpZHRoX3N1cHBvcnRlZDsKKwlkZC0+aXBhdGhfbGlua19zcGVlZF9lbmFibGVkID0gZGQtPmlwYXRoX2xpbmtfc3BlZWRfc3VwcG9ydGVkOworCS8qCisJICogc2V0IHRoZSBpbml0aWFsIHZhbHVlcyB0byByZWFzb25hYmxlIGRlZmF1bHQsIHdpbGwgYmUgc2V0CisJICogZm9yIHJlYWwgd2hlbiBsaW5rIGlzIHVwLgorCSAqLworCWRkLT5pcGF0aF9saW5rX3dpZHRoX2FjdGl2ZSA9IElCX1dJRFRIXzRYOworCWRkLT5pcGF0aF9saW5rX3NwZWVkX2FjdGl2ZSA9IElQQVRIX0lCX1NEUjsKKwlkZC0+ZGVsYXlfbXVsdCA9IHJhdGVfdG9fZGVsYXlbMF1bMV07Cit9CisKKworLyoKKyAqIFNldHVwIHRoZSBNU0kgc3R1ZmYgYWdhaW4gYWZ0ZXIgYSByZXNldC4gIEknZCBsaWtlIHRvIGp1c3QgY2FsbAorICogcGNpX2VuYWJsZV9tc2koKSBhbmQgcmVxdWVzdF9pcnEoKSBhZ2FpbiwgYnV0IHdoZW4gSSBkbyB0aGF0LAorICogdGhlIE1TSSBlbmFibGUgYml0IGRvZXNuJ3QgZ2V0IHNldCBpbiB0aGUgY29tbWFuZCB3b3JkLCBhbmQKKyAqIHdlIHN3aXRjaCB0byB0byBhIGRpZmZlcmVudCBpbnRlcnJ1cHQgdmVjdG9yLCB3aGljaCBpcyBjb25mdXNpbmcsCisgKiBzbyBJIGluc3RlYWQganVzdCBkbyBpdCBhbGwgaW5saW5lLiAgUGVyaGFwcyBzb21laG93IGNhbiB0aWUgdGhpcworICogaW50byB0aGUgUENJZSBob3RwbHVnIHN1cHBvcnQgYXQgc29tZSBwb2ludAorICogTm90ZSwgYmVjYXVzZSBJJ20gZG9pbmcgaXQgYWxsIGhlcmUsIEkgZG9uJ3QgY2FsbCBwY2lfZGlzYWJsZV9tc2koKQorICogb3IgZnJlZV9pcnEoKSBhdCB0aGUgc3RhcnQgb2YgaXBhdGhfc2V0dXBfNzIyMF9yZXNldCgpLgorICovCitzdGF0aWMgaW50IGlwYXRoX3JlaW5pdF9tc2koc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQgPSAwOworCisJaW50IHBvczsKKwl1MTYgY29udHJvbDsKKwlpZiAoIWRkLT5pcGF0aF9tc2lfbG8pIC8qIFVzaW5nIGludFgsIG9yIGluaXQgcHJvYmxlbSAqLworCQlnb3RvIGJhaWw7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRkLT5wY2lkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAoIXBvcykgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2FuJ3QgZmluZCBNU0kgY2FwYWJpbGl0eSwgIgorCQkJICAgICAgImNhbid0IHJlc3RvcmUgTVNJIHNldHRpbmdzXG4iKTsKKwkJZ290byBiYWlsOworCX0KKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJXcml0aW5nIG1zaV9sbyAweCV4IHRvIGNvbmZpZyBvZmZzZXQgMHgleFxuIiwKKwkJICAgZGQtPmlwYXRoX21zaV9sbywgcG9zICsgUENJX01TSV9BRERSRVNTX0xPKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRkLT5wY2lkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19MTywKKwkJCSAgICAgICBkZC0+aXBhdGhfbXNpX2xvKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJXcml0aW5nIG1zaV9sbyAweCV4IHRvIGNvbmZpZyBvZmZzZXQgMHgleFxuIiwKKwkJICAgZGQtPmlwYXRoX21zaV9oaSwgcG9zICsgUENJX01TSV9BRERSRVNTX0hJKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRkLT5wY2lkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19ISSwKKwkJCSAgICAgICBkZC0+aXBhdGhfbXNpX2hpKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLCAmY29udHJvbCk7CisJaWYgKCEoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfRU5BQkxFKSkgeworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJNU0kgY29udHJvbCBhdCBvZmYgJXggd2FzICV4LCAiCisJCQkgICAic2V0dGluZyBNU0kgZW5hYmxlICgleClcbiIsIHBvcyArIFBDSV9NU0lfRkxBR1MsCisJCQkgICBjb250cm9sLCBjb250cm9sIHwgUENJX01TSV9GTEFHU19FTkFCTEUpOworCQljb250cm9sIHw9IFBDSV9NU0lfRkxBR1NfRU5BQkxFOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGQtPnBjaWRldiwgcG9zICsgUENJX01TSV9GTEFHUywKKwkJCQkgICAgICBjb250cm9sKTsKKwl9CisJLyogbm93IHJld3JpdGUgdGhlIGRhdGEgKHZlY3RvcikgaW5mbyAqLworCXBjaV93cml0ZV9jb25maWdfd29yZChkZC0+cGNpZGV2LCBwb3MgKworCQkJICAgICAgKChjb250cm9sICYgUENJX01TSV9GTEFHU182NEJJVCkgPyAxMiA6IDgpLAorCQkJICAgICAgZGQtPmlwYXRoX21zaV9kYXRhKTsKKwlyZXQgPSAxOworCitiYWlsOgorCWlmICghcmV0KSB7CisJCWlwYXRoX2RiZygiVXNpbmcgSU5UeCwgTVNJIGRpc2FibGVkIG9yIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJaXBhdGhfZW5hYmxlX2ludHgoZGQtPnBjaWRldik7CisJCXJldCA9IDE7CisJfQorCS8qCisJICogV2UgcmVzdG9yZSB0aGUgY2FjaGVsaW5lc2l6ZSBhbHNvLCBhbHRob3VnaCBpdCBkb2Vzbid0IHJlYWxseQorCSAqIG1hdHRlci4KKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGQtPnBjaWRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwKKwkJCSAgICAgIGRkLT5pcGF0aF9wY2lfY2FjaGVsaW5lKTsKKwkvKiBhbmQgbm93IHNldCB0aGUgcGNpIG1hc3RlciBiaXQgYWdhaW4gKi8KKwlwY2lfc2V0X21hc3RlcihkZC0+cGNpZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgc2xlZXBzLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQsIG5vdAorICogZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gIElmIHdlIG5lZWQgaW50ZXJydXB0IGNvbnRleHQsIHdlIGNhbiBzcGxpdAorICogaXQgaW50byB0d28gcm91dGluZXMuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfc2V0dXBfNzIyMF9yZXNldChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTY0IHZhbDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCXUxNiBjbWR2YWw7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZC0+cGNpZGV2LCBQQ0lfQ09NTUFORCwgJmNtZHZhbCk7CisKKwkvKiBVc2UgZGV2X2VyciBzbyBpdCBzaG93cyB1cCBpbiBsb2dzLCBldGMuICovCisJaXBhdGhfZGV2X2VycihkZCwgIlJlc2V0dGluZyBJbmZpbmlQYXRoIHVuaXQgJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKKworCS8qIGtlZXAgY2hpcCBmcm9tIGJlaW5nIGFjY2Vzc2VkIGluIGEgZmV3IHBsYWNlcyAqLworCWRkLT5pcGF0aF9mbGFncyAmPSB+KElQQVRIX0lOSVRURUQgfCBJUEFUSF9QUkVTRU5UKTsKKwl2YWwgPSBkZC0+aXBhdGhfY29udHJvbCB8IElORklOSVBBVEhfQ19SRVNFVDsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsIHZhbCk7CisJbWIoKTsKKworCWZvciAoaSA9IDE7IGkgPD0gNTsgaSsrKSB7CisJCWludCByOworCisJCS8qCisJCSAqIEFsbG93IE1CSVNULCBldGMuIHRvIGNvbXBsZXRlOyBsb25nZXIgb24gZWFjaCByZXRyeS4KKwkJICogV2Ugc29tZXRpbWVzIGdldCBtYWNoaW5lIGNoZWNrcyBmcm9tIGJ1cyB0aW1lb3V0IGlmIG5vCisJCSAqIHJlc3BvbnNlLCBzbyBmb3Igbm93LCBtYWtlIGl0ICpyZWFsbHkqIGxvbmcuCisJCSAqLworCQltc2xlZXAoMTAwMCArICgxICsgaSkgKiAyMDAwKTsKKwkJciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGQtPnBjaWRldiwgUENJX0JBU0VfQUREUkVTU18wLAorCQkJCQkgICBkZC0+aXBhdGhfcGNpYmFyMCk7CisJCWlmIChyKQorCQkJaXBhdGhfZGV2X2VycihkZCwgInJld3JpdGUgb2YgQkFSMCBmYWlsZWQ6ICVkXG4iLCByKTsKKwkJciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGQtPnBjaWRldiwgUENJX0JBU0VfQUREUkVTU18xLAorCQkJCQkgICBkZC0+aXBhdGhfcGNpYmFyMSk7CisJCWlmIChyKQorCQkJaXBhdGhfZGV2X2VycihkZCwgInJld3JpdGUgb2YgQkFSMSBmYWlsZWQ6ICVkXG4iLCByKTsKKwkJLyogbm93IHJlLWVuYWJsZSBtZW1vcnkgYWNjZXNzICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZC0+cGNpZGV2LCBQQ0lfQ09NTUFORCwgY21kdmFsKTsKKwkJciA9IHBjaV9lbmFibGVfZGV2aWNlKGRkLT5wY2lkZXYpOworCQlpZiAocikKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQgYWZ0ZXIgIgorCQkJCSAgICAgICJyZXNldDogJWRcbiIsIHIpOworCQkvKgorCQkgKiB3aGV0aGVyIGl0IGZ1bGx5IGVuYWJsZWQgb3Igbm90LCBtYXJrIGFzIHByZXNlbnQsCisJCSAqIGFnYWluIChidXQgbm90IElOSVRURUQpCisJCSAqLworCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfUFJFU0VOVDsKKwkJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmV2aXNpb24pOworCQlpZiAodmFsID09IGRkLT5pcGF0aF9yZXZpc2lvbikgeworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiR290IG1hdGNoaW5nIHJldmlzaW9uICIKKwkJCQkgICAicmVnaXN0ZXIgJWxseCBvbiB0cnkgJWRcbiIsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsLCBpKTsKKwkJCXJldCA9IGlwYXRoX3JlaW5pdF9tc2koZGQpOworCQkJZ290byBiYWlsOworCQl9CisJCS8qIFByb2JhYmx5IGdldHRpbmcgLTEgYmFjayAqLworCQlpcGF0aF9kYmcoIkRpZG4ndCBnZXQgZXhwZWN0ZWQgcmV2aXNpb24gcmVnaXN0ZXIsICIKKwkJCSAgImdvdCAlbGx4LCB0cnkgJWRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCwKKwkJCSAgaSArIDEpOworCX0KKwlyZXQgPSAwOyAvKiBmYWlsZWQgKi8KKworYmFpbDoKKwlpZiAocmV0KQorCQlpcGF0aF83MjIwX3BjaWVfcGFyYW1zKGRkLCBkZC0+aXBhdGhfYm9hcmRyZXYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpcGF0aF83MjIwX3B1dF90aWQgLSB3cml0ZSBhIFRJRCB0byB0aGUgY2hpcAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEB0aWRwdHI6IHBvaW50ZXIgdG8gdGhlIGV4cGVjdGVkIFRJRCAoaW4gY2hpcCkgdG8gdWRwYXRlCisgKiBAdGlkdHlwZTogMCBmb3IgZWFnZXIsIDEgZm9yIGV4cGVjdGVkCisgKiBAcGE6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgaW4gbWVtb3J5IGJ1ZmZlcjsgaXBhdGhfdGlkaW52YWxpZCBpZiBmcmVlaW5nCisgKgorICogVGhpcyBleGlzdHMgYXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIGFsbG93IGZvciBzZWxlY3Rpb24gb2YgdGhlCisgKiBhcHByb3ByaWF0ZSAiZmxhdm9yIi4gVGhlIHN0YXRpYyBjYWxscyBpbiBjbGVhbnVwIGp1c3QgdXNlIHRoZQorICogcmV2aXNpb24tYWdub3N0aWMgZm9ybSwgYXMgdGhleSBhcmUgbm90IHBlcmZvcm1hbmNlIGNyaXRpY2FsLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF83MjIwX3B1dF90aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1NjQgX19pb21lbSAqdGlkcHRyLAorCQkJICAgICB1MzIgdHlwZSwgdW5zaWduZWQgbG9uZyBwYSkKK3sKKwlpZiAocGEgIT0gZGQtPmlwYXRoX3RpZGludmFsaWQpIHsKKwkJdTY0IGNoaXBwYSA9IHBhID4+IElCQTcyMjBfVElEX1BBX1NISUZUOworCisJCS8qIHBhcmFub2lhIGNoZWNrcyAqLworCQlpZiAocGEgIT0gKGNoaXBwYSA8PCBJQkE3MjIwX1RJRF9QQV9TSElGVCkpIHsKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJCVUc6IHBoeXNhZGRyICVseCAiCisJCQkJICJub3QgMktCIGFsaWduZWQhXG4iLCBwYSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHBhID49ICgxVUwgPDwgSUJBNzIyMF9USURfU1pfU0hJRlQpKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJCSAgICAgICJCVUc6IFBoeXNpY2FsIHBhZ2UgYWRkcmVzcyAweCVseCAiCisJCQkJICAgICAgImxhcmdlciB0aGFuIHN1cHBvcnRlZFxuIiwgcGEpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHR5cGUgPT0gUkNWSFFfUkNWX1RZUEVfRUFHRVIpCisJCQljaGlwcGEgfD0gZGQtPmlwYXRoX3RpZHRlbXBsYXRlOworCQllbHNlIC8qIGZvciBub3csIGFsd2F5cyBmdWxsIDRLQiBwYWdlICovCisJCQljaGlwcGEgfD0gSUJBNzIyMF9USURfU1pfNEs7CisJCXdyaXRlcShjaGlwcGEsIHRpZHB0cik7CisJfSBlbHNlCisJCXdyaXRlcShwYSwgdGlkcHRyKTsKKwltbWlvd2IoKTsKK30KKworLyoqCisgKiBpcGF0aF83MjIwX2NsZWFyX3RpZCAtIGNsZWFyIGFsbCBUSUQgZW50cmllcyBmb3IgYSBwb3J0LCBleHBlY3RlZCBhbmQgZWFnZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAcG9ydDogdGhlIHBvcnQKKyAqCisgKiBjbGVhciBhbGwgVElEIGVudHJpZXMgZm9yIGEgcG9ydCwgZXhwZWN0ZWQgYW5kIGVhZ2VyLgorICogVXNlZCBmcm9tIGlwYXRoX2Nsb3NlKCkuICBPbiB0aGlzIGNoaXAsIFRJRHMgYXJlIG9ubHkgMzIgYml0cywKKyAqIG5vdCA2NCwgYnV0IHRoZXkgYXJlIHN0aWxsIG9uIDY0IGJpdCBib3VuZGFyaWVzLCBzbyB0aWRiYXNlCisgKiBpcyBkZWNsYXJlZCBhcyB1NjQgKiBmb3IgdGhlIHBvaW50ZXIgbWF0aCwgZXZlbiB0aG91Z2ggd2Ugd3JpdGUgMzIgYml0cworICovCitzdGF0aWMgdm9pZCBpcGF0aF83MjIwX2NsZWFyX3RpZHMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBwb3J0KQoreworCXU2NCBfX2lvbWVtICp0aWRiYXNlOworCXVuc2lnbmVkIGxvbmcgdGlkaW52OworCWludCBpOworCisJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UpCisJCXJldHVybjsKKworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkludmFsaWRhdGUgVElEcyBmb3IgcG9ydCAldVxuIiwgcG9ydCk7CisKKwl0aWRpbnYgPSBkZC0+aXBhdGhfdGlkaW52YWxpZDsKKwl0aWRiYXNlID0gKHU2NCBfX2lvbWVtICopCisJCSgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkgKworCQkgZGQtPmlwYXRoX3JjdnRpZGJhc2UgKworCQkgcG9ydCAqIGRkLT5pcGF0aF9yY3Z0aWRjbnQgKiBzaXplb2YoKnRpZGJhc2UpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfcmN2dGlkY250OyBpKyspCisJCWlwYXRoXzcyMjBfcHV0X3RpZChkZCwgJnRpZGJhc2VbaV0sIFJDVkhRX1JDVl9UWVBFX0VYUEVDVEVELAorCQkJCSAgIHRpZGludik7CisKKwl0aWRiYXNlID0gKHU2NCBfX2lvbWVtICopCisJCSgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkgKworCQkgZGQtPmlwYXRoX3JjdmVncmJhc2UgKyBwb3J0X2VncnRpZF9pZHgoZGQsIHBvcnQpCisJCSAqIHNpemVvZigqdGlkYmFzZSkpOworCisJZm9yIChpID0gcG9ydCA/IGRkLT5pcGF0aF9yY3ZlZ3JjbnQgOiBkZC0+aXBhdGhfcDBfcmN2ZWdyY250OyBpOyBpLS0pCisJCWlwYXRoXzcyMjBfcHV0X3RpZChkZCwgJnRpZGJhc2VbaS0xXSwgUkNWSFFfUkNWX1RZUEVfRUFHRVIsCisJCQl0aWRpbnYpOworfQorCisvKioKKyAqIGlwYXRoXzcyMjBfdGlkdGVtcGxhdGUgLSBzZXR1cCBjb25zdGFudHMgZm9yIFRJRCB1cGRhdGVzCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFdlIHNldHVwIHN0dWZmIHRoYXQgd2UgdXNlIGEgbG90LCB0byBhdm9pZCBjYWxjdWxhdGluZyBlYWNoIHRpbWUKKyAqLworc3RhdGljIHZvaWQgaXBhdGhfNzIyMF90aWR0ZW1wbGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJLyogRm9yIG5vdywgd2UgYWx3YXlzIGFsbG9jYXRlIDRLQiBidWZmZXJzIChhdCBpbml0KSBzbyB3ZSBjYW4KKwkgKiByZWNlaXZlIG1heCBzaXplIHBhY2tldHMuICBXZSBtYXkgd2FudCBhIG1vZHVsZSBwYXJhbWV0ZXIgdG8KKwkgKiBzcGVjaWZ5IDJLQiBvciA0S0IgYW5kL29yIG1ha2UgYmUgcGVyIHBvcnQgaW5zdGVhZCBvZiBwZXIgZGV2aWNlCisJICogZm9yIHRob3NlIHdobyB3YW50IHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50LiAgTm90ZSB0aGF0IHRoZQorCSAqIGlwYXRoX3JjdmhkcmVudHNpemUgc2l6ZSBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBsYXJnZXN0CisJICogSUIgaGVhZGVyIChjdXJyZW50bHkgOTYgYnl0ZXMpIHRoYXQgd2UgZXhwZWN0IHRvIGhhbmRsZSAocGx1cyBvZgorCSAqIGNvdXJzZSB0aGUgMiBkd29yZHMgb2YgUkhGKS4KKwkgKi8KKwlpZiAoZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUgPT0gMjA0OCkKKwkJZGQtPmlwYXRoX3RpZHRlbXBsYXRlID0gSUJBNzIyMF9USURfU1pfMks7CisJZWxzZSBpZiAoZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUgPT0gNDA5NikKKwkJZGQtPmlwYXRoX3RpZHRlbXBsYXRlID0gSUJBNzIyMF9USURfU1pfNEs7CisJZWxzZSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJCVUc6IHVuc3VwcG9ydGVkIGVncmJ1ZnNpemUgIgorCQkJICIldSwgdXNpbmcgJXVcbiIsIGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplLAorCQkJIDQwOTYpOworCQlkZC0+aXBhdGhfdGlkdGVtcGxhdGUgPSBJQkE3MjIwX1RJRF9TWl80SzsKKwl9CisJZGQtPmlwYXRoX3RpZGludmFsaWQgPSAwOworfQorCitzdGF0aWMgaW50IGlwYXRoXzcyMjBfZWFybHlfaW5pdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdTMyIGksIHM7CisKKwlpZiAoc3RyY21wKGludF90eXBlLCAiYXV0byIpICYmCisJICAgIHN0cmNtcChpbnRfdHlwZSwgImZvcmNlX21zaSIpICYmCisJICAgIHN0cmNtcChpbnRfdHlwZSwgImZvcmNlX2ludHgiKSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiSW52YWxpZCBpbnRlcnJ1cHRfdHlwZTogJyVzJywgZXhwZWN0aW5nICIKKwkJCSAgICAgICJhdXRvLCBmb3JjZV9tc2kgb3IgZm9yY2VfaW50eFxuIiwgaW50X3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIENvbnRyb2xbNF0gaGFzIGJlZW4gYWRkZWQgdG8gY2hhbmdlIHRoZSBhcmJpdHJhdGlvbiB3aXRoaW4KKwkgKiB0aGUgU0RNQSBlbmdpbmUgYmV0d2VlbiBmYXZvcmluZyBkYXRhIGZldGNoZXMgb3ZlciBkZXNjcmlwdG9yCisJICogZmV0Y2hlcy4gIGlwYXRoX3NkbWFfZmV0Y2hfYXJiPT0wIGdpdmVzIGRhdGEgZmV0Y2hlcyBwcmlvcml0eS4KKwkgKi8KKwlpZiAoaXBhdGhfc2RtYV9mZXRjaF9hcmIgJiYgKGRkLT5pcGF0aF9taW5yZXYgPiAxKSkKKwkJZGQtPmlwYXRoX2NvbnRyb2wgfD0gMTw8NDsKKworCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF80QllURV9USUQ7CisKKwkvKgorCSAqIEZvciBvcGVuZmFicmljcywgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSBhbiBJQiBoZWFkZXIgb2YKKwkgKiAyNCBkd29yZHMuICBIVCBjaGlwIGhhcyBhcmJpdHJhcnkgc2l6ZWQgcmVjZWl2ZSBidWZmZXJzLCBzbyB3ZQorCSAqIG1hZGUgdGhlbSB0aGUgc2FtZSBzaXplIGFzIHRoZSBQSU8gYnVmZmVycy4gIFRoaXMgY2hpcCBkb2VzIG5vdAorCSAqIGhhbmRsZSBhcmJpdHJhcnkgc2l6ZSBidWZmZXJzLCBzbyB3ZSBuZWVkIHRoZSBoZWFkZXIgbGFyZ2UgZW5vdWdoCisJICogdG8gaGFuZGxlIGxhcmdlc3QgSUIgaGVhZGVyLCBidXQgc3RpbGwgaGF2ZSByb29tIGZvciBhIDJLQiBNVFUKKwkgKiBzdGFuZGFyZCBJQiBwYWNrZXQuCisJICovCisJZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgPSAyNDsKKwlkZC0+aXBhdGhfcmN2aGRyc2l6ZSA9IElQQVRIX0RGTFRfUkNWSERSU0laRTsKKwlkZC0+aXBhdGhfcmhmX29mZnNldCA9CisJCWRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplIC0gc2l6ZW9mKHU2NCkgLyBzaXplb2YodTMyKTsKKworCWRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplID0gaXBhdGhfbXR1NDA5NiA/IDQwOTYgOiAyMDQ4OworCS8qCisJICogdGhlIG1pbigpIGNoZWNrIGhlcmUgaXMgY3VycmVudGx5IGEgbm9wLCBidXQgaXQgbWF5IG5vdCBhbHdheXMKKwkgKiBiZSwgZGVwZW5kaW5nIG9uIGp1c3QgaG93IHdlIGRvIGlwYXRoX3JjdmVncmJ1ZnNpemUKKwkgKi8KKwlkZC0+aXBhdGhfaWJtYXhsZW4gPSBtaW4oaXBhdGhfbXR1NDA5NiA/IGRkLT5pcGF0aF9waW9zaXplNGsgOgorCQkJCSBkZC0+aXBhdGhfcGlvc2l6ZTJrLAorCQkJCSBkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZSArCisJCQkJIChkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZSA8PCAyKSk7CisJZGQtPmlwYXRoX2luaXRfaWJtYXhsZW4gPSBkZC0+aXBhdGhfaWJtYXhsZW47CisKKwlpcGF0aF83MjIwX2NvbmZpZ19qaW50KGRkLCBJTkZJTklQQVRIX0pJTlRfREVGQVVMVF9JRExFX1RJQ0tTLAorCQkJICAgICAgIElORklOSVBBVEhfSklOVF9ERUZBVUxUX01BWF9QQUNLRVRTKTsKKworCWlmIChkZC0+aXBhdGhfYm9hcmRyZXYpIC8qIG5vIGVlcHJvbSBvbiBlbXVsYXRvciAqLworCQlpcGF0aF9nZXRfZWVwcm9tX2luZm8oZGQpOworCisJLyogc3RhcnQgb2YgY29kZSB0byBjaGVjayBhbmQgcHJpbnQgcHJvY21vbiAqLworCXMgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgSVBBVEhfS1JFR19PRkZTRVQoUHJvY01vbikpOworCXMgJj0gfigxVTw8MzEpOyAvKiBjbGVhciBkb25lIGJpdCAqLworCXMgfD0gMVU8PDE0OyAvKiBjbGVhciBjb3VudGVyICh3cml0ZSAxIHRvIGNsZWFyKSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIElQQVRIX0tSRUdfT0ZGU0VUKFByb2NNb24pLCBzKTsKKwkvKiBtYWtlIHN1cmUgY2xlYXJfY291bnRlciBsb3cgbG9uZyBlbm91Z2ggYmVmb3JlIHN0YXJ0ICovCisJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisKKwlzICY9IH4oMVU8PDE0KTsgLyogYWxsb3cgY291bnRlciB0byBjb3VudCAoYmVmb3JlIHN0YXJ0aW5nKSAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIElQQVRIX0tSRUdfT0ZGU0VUKFByb2NNb24pLCBzKTsKKwlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwlzID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIElQQVRIX0tSRUdfT0ZGU0VUKFByb2NNb24pKTsKKworCXMgfD0gMVU8PDE1OyAvKiBzdGFydCB0aGUgY291bnRlciAqLworCXMgJj0gfigxVTw8MzEpOyAvKiBjbGVhciBkb25lIGJpdCAqLworCXMgJj0gfjB4N2ZmVTsgLyogY2xlYXIgZnJlcXVlbmN5IGJpdHMgKi8KKwlzIHw9IDB4ZTI5OyAvKiBzZXQgZnJlcXVlbmN5IGJpdHMsIGluIGNhc2UgY2xlYXJlZCAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIElQQVRIX0tSRUdfT0ZGU0VUKFByb2NNb24pLCBzKTsKKworCXMgPSAwOworCWZvciAoaSA9IDUwMDsgaSA+IDAgJiYgIShzJigxVUxMPDwzMSkpOyBpLS0pIHsKKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJCXMgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgSVBBVEhfS1JFR19PRkZTRVQoUHJvY01vbikpOworCX0KKwlpZiAoIShzJigxVTw8MzEpKSkKKwkJaXBhdGhfZGV2X2VycihkZCwgIlByb2NNb24gcmVnaXN0ZXIgbm90IHZhbGlkOiAweCV4XG4iLCBzKTsKKwllbHNlCisJCWlwYXRoX2RiZygiUHJvY01vbj0weCV4LCBjb3VudD0weCV4XG4iLCBzLCAocz4+MTYpJjB4MWZmKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwYXRoX2luaXRfNzIyMF9nZXRfYmFzZV9pbmZvIC0gc2V0IGNoaXAtc3BlY2lmaWMgZmxhZ3MgZm9yIHVzZXIgY29kZQorICogQHBkOiB0aGUgaW5maW5pcGF0aCBwb3J0CisgKiBAa2Jhc2U6IGlwYXRoX2Jhc2VfaW5mbyBwb2ludGVyCisgKgorICogV2Ugc2V0IHRoZSBQQ0lFIGZsYWcgYmVjYXVzZSB0aGUgbG93ZXIgYmFuZHdpZHRoIG9uIFBDSWUgdnMKKyAqIEh5cGVyVHJhbnNwb3J0IGNhbiBhZmZlY3Qgc29tZSB1c2VyIHBhY2tldCBhbGdvcml0aGltcy4KKyAqLworc3RhdGljIGludCBpcGF0aF83MjIwX2dldF9iYXNlX2luZm8oc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwgdm9pZCAqa2Jhc2UpCit7CisJc3RydWN0IGlwYXRoX2Jhc2VfaW5mbyAqa2luZm8gPSBrYmFzZTsKKworCWtpbmZvLT5zcGlfcnVudGltZV9mbGFncyB8PQorCQlJUEFUSF9SVU5USU1FX1BDSUUgfCBJUEFUSF9SVU5USU1FX05PRE1BX1JUQUlMIHwKKwkJSVBBVEhfUlVOVElNRV9TRE1BOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoXzcyMjBfZnJlZV9pcnEoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWZyZWVfaXJxKGRkLT5pcGF0aF9pcnEsIGRkKTsKKwlkZC0+aXBhdGhfaXJxID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcGF0aF9tZXNzYWdlX2hlYWRlciAqCitpcGF0aF83MjIwX2dldF9tc2doZWFkZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBfX2xlMzIgKnJoZl9hZGRyKQoreworCXUzMiBvZmZzZXQgPSBpcGF0aF9oZHJnZXRfb2Zmc2V0KHJoZl9hZGRyKTsKKworCXJldHVybiAoc3RydWN0IGlwYXRoX21lc3NhZ2VfaGVhZGVyICopCisJCShyaGZfYWRkciAtIGRkLT5pcGF0aF9yaGZfb2Zmc2V0ICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfNzIyMF9jb25maWdfcG9ydHMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1c2hvcnQgY2ZncG9ydHMpCit7CisJdTMyIG5jaGlwcG9ydHM7CisKKwluY2hpcHBvcnRzID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcG9ydGNudCk7CisJaWYgKCFjZmdwb3J0cykgeworCQlpbnQgbmNwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKKworCQlpZiAobmNwdXMgPD0gNCkKKwkJCWRkLT5pcGF0aF9wb3J0Y250ID0gNTsKKwkJZWxzZSBpZiAobmNwdXMgPD0gOCkKKwkJCWRkLT5pcGF0aF9wb3J0Y250ID0gOTsKKwkJaWYgKGRkLT5pcGF0aF9wb3J0Y250KQorCQkJaXBhdGhfZGJnKCJBdXRvLWNvbmZpZ3VyZWQgZm9yICV1IHBvcnRzLCAlZCBjcHVzICIKKwkJCQkib25saW5lXG4iLCBkZC0+aXBhdGhfcG9ydGNudCwgbmNwdXMpOworCX0gZWxzZSBpZiAoY2ZncG9ydHMgPD0gbmNoaXBwb3J0cykKKwkJZGQtPmlwYXRoX3BvcnRjbnQgPSBjZmdwb3J0czsKKwlpZiAoIWRkLT5pcGF0aF9wb3J0Y250KSAvKiBub25lIG9mIHRoZSBhYm92ZSwgc2V0IHRvIG1heCAqLworCQlkZC0+aXBhdGhfcG9ydGNudCA9IG5jaGlwcG9ydHM7CisJLyoKKwkgKiBjaGlwIGNhbiBiZSBjb25maWd1cmVkIGZvciA1LCA5LCBvciAxNyBwb3J0cywgYW5kIGNob2ljZQorCSAqIGFmZmVjdHMgbnVtYmVyIG9mIGVhZ2VyIFRJRHMgcGVyIHBvcnQgKDFLLCAySywgNEspLgorCSAqLworCWlmIChkZC0+aXBhdGhfcG9ydGNudCA+IDkpCisJCWRkLT5pcGF0aF9yY3ZjdHJsIHw9IDJVTEwgPDwgSUJBNzIyMF9SX1BPUlRDRkdfU0hJRlQ7CisJZWxzZSBpZiAoZGQtPmlwYXRoX3BvcnRjbnQgPiA1KQorCQlkZC0+aXBhdGhfcmN2Y3RybCB8PSAxVUxMIDw8IElCQTcyMjBfUl9QT1JUQ0ZHX1NISUZUOworCS8qIGVsc2UgY29uZmlndXJlIGZvciBkZWZhdWx0IDUgcmVjZWl2ZSBwb3J0cyAqLworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CisJZGQtPmlwYXRoX3AwX3JjdmVncmNudCA9IDIwNDg7IC8qIGFsd2F5cyAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9IQVNfU0VORF9ETUEpCisJCWRkLT5pcGF0aF9waW9yZXNlcnZlZCA9IDE7IC8qIHJlc2VydmUgYSBidWZmZXIgKi8KK30KKworCitzdGF0aWMgaW50IGlwYXRoXzcyMjBfZ2V0X2liX2NmZyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB3aGljaCkKK3sKKwlpbnQgbHNiLCByZXQgPSAwOworCXU2NCBtYXNrcjsgLyogcmlnaHQtanVzdGlmaWVkIG1hc2sgKi8KKworCXN3aXRjaCAod2hpY2gpIHsKKwljYXNlIElQQVRIX0lCX0NGR19IUlRCVDogLyogR2V0IEhlYXJ0YmVhdCBvZmYvZW5hYmxlL2F1dG8gKi8KKwkJbHNiID0gSUJBNzIyMF9JQkNfSFJUQlRfU0hJRlQ7CisJCW1hc2tyID0gSUJBNzIyMF9JQkNfSFJUQlRfTUFTSzsKKwkJYnJlYWs7CisKKwljYXNlIElQQVRIX0lCX0NGR19MV0lEX0VOQjogLyogR2V0IGFsbG93ZWQgTGluay13aWR0aCAqLworCQlyZXQgPSBkZC0+aXBhdGhfbGlua193aWR0aF9lbmFibGVkOworCQlnb3RvIGRvbmU7CisKKwljYXNlIElQQVRIX0lCX0NGR19MV0lEOiAvKiBHZXQgY3VycmVudGx5IGFjdGl2ZSBMaW5rLXdpZHRoICovCisJCXJldCA9IGRkLT5pcGF0aF9saW5rX3dpZHRoX2FjdGl2ZTsKKwkJZ290byBkb25lOworCisJY2FzZSBJUEFUSF9JQl9DRkdfU1BEX0VOQjogLyogR2V0IGFsbG93ZWQgTGluayBzcGVlZHMgKi8KKwkJcmV0ID0gZGQtPmlwYXRoX2xpbmtfc3BlZWRfZW5hYmxlZDsKKwkJZ290byBkb25lOworCisJY2FzZSBJUEFUSF9JQl9DRkdfU1BEOiAvKiBHZXQgY3VycmVudCBMaW5rIHNwZCAqLworCQlyZXQgPSBkZC0+aXBhdGhfbGlua19zcGVlZF9hY3RpdmU7CisJCWdvdG8gZG9uZTsKKworCWNhc2UgSVBBVEhfSUJfQ0ZHX1JYUE9MX0VOQjogLyogR2V0IEF1dG8tUlgtcG9sYXJpdHkgZW5hYmxlICovCisJCWxzYiA9IElCQTcyMjBfSUJDX1JYUE9MX1NISUZUOworCQltYXNrciA9IElCQTcyMjBfSUJDX1JYUE9MX01BU0s7CisJCWJyZWFrOworCisJY2FzZSBJUEFUSF9JQl9DRkdfTFJFVl9FTkI6IC8qIEdldCBBdXRvLUxhbmUtcmV2ZXJzYWwgZW5hYmxlICovCisJCWxzYiA9IElCQTcyMjBfSUJDX0xSRVZfU0hJRlQ7CisJCW1hc2tyID0gSUJBNzIyMF9JQkNfTFJFVl9NQVNLOworCQlicmVhazsKKworCWNhc2UgSVBBVEhfSUJfQ0ZHX0xJTktMQVRFTkNZOgorCQlyZXQgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNkZHJzdGF0dXMpCisJCQkmIElCQTcyMjBfRERSU1RBVF9MSU5LTEFUX01BU0s7CisJCWdvdG8gZG9uZTsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBkb25lOworCX0KKwlyZXQgPSAoaW50KSgoZGQtPmlwYXRoX2liY2RkcmN0cmwgPj4gbHNiKSAmIG1hc2tyKTsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF83MjIwX3NldF9pYl9jZmcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgd2hpY2gsIHUzMiB2YWwpCit7CisJaW50IGxzYiwgcmV0ID0gMCwgc2V0Zm9yY2UgPSAwOworCXU2NCBtYXNrcjsgLyogcmlnaHQtanVzdGlmaWVkIG1hc2sgKi8KKworCXN3aXRjaCAod2hpY2gpIHsKKwljYXNlIElQQVRIX0lCX0NGR19MSURMTUM6CisJCS8qCisJCSAqIFNldCBMSUQgYW5kIExNQy4gQ29tYmluZWQgdG8gYXZvaWQgcG9zc2libGUgaGF6YXJkCisJCSAqIGNhbGxlciBwdXRzIExNQyBpbiAxNk1TYml0cywgRExJRCBpbiAxNkxTYml0cyBvZiB2YWwKKwkJICovCisJCWxzYiA9IElCQTcyMjBfSUJDX0RMSURMTUNfU0hJRlQ7CisJCW1hc2tyID0gSUJBNzIyMF9JQkNfRExJRExNQ19NQVNLOworCQlicmVhazsKKworCWNhc2UgSVBBVEhfSUJfQ0ZHX0hSVEJUOiAvKiBzZXQgSGVhcnRiZWF0IG9mZi9lbmFibGUvYXV0byAqLworCQlpZiAodmFsICYgSVBBVEhfSUJfSFJUQlRfT04gJiYKKwkJCShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9OT19IUlRCVCkpCisJCQlnb3RvIGJhaWw7CisJCWxzYiA9IElCQTcyMjBfSUJDX0hSVEJUX1NISUZUOworCQltYXNrciA9IElCQTcyMjBfSUJDX0hSVEJUX01BU0s7CisJCWJyZWFrOworCisJY2FzZSBJUEFUSF9JQl9DRkdfTFdJRF9FTkI6IC8qIHNldCBhbGxvd2VkIExpbmstd2lkdGggKi8KKwkJLyoKKwkJICogQXMgd2l0aCBzcGVlZCwgb25seSB3cml0ZSB0aGUgYWN0dWFsIHJlZ2lzdGVyIGlmCisJCSAqIHRoZSBsaW5rIGlzIGN1cnJlbnRseSBkb3duLCBvdGhlcndpc2UgdGFrZXMgZWZmZWN0CisJCSAqIG9uIG5leHQgbGluayBjaGFuZ2UuCisJCSAqLworCQlkZC0+aXBhdGhfbGlua193aWR0aF9lbmFibGVkID0gdmFsOworCQlpZiAoKGRkLT5pcGF0aF9mbGFncyAmIChJUEFUSF9MSU5LRE9XTnxJUEFUSF9MSU5LSU5JVCkpICE9CisJCQlJUEFUSF9MSU5LRE9XTikKKwkJCWdvdG8gYmFpbDsKKwkJLyoKKwkJICogV2Ugc2V0IHRoZSBJUEFUSF9JQl9GT1JDRV9OT1RJRlkgYml0IHNvIHVwZG93bgorCQkgKiB3aWxsIGdldCBjYWxsZWQgYmVjYXVzZSB3ZSB3YW50IHVwZGF0ZQorCQkgKiBsaW5rX3dpZHRoX2FjdGl2ZSwgYW5kIHRoZSBjaGFuZ2UgbWF5IG5vdCB0YWtlCisJCSAqIGVmZmVjdCBmb3Igc29tZSB0aW1lIChpZiB3ZSBhcmUgaW4gUE9MTCksIHNvIHRoaXMKKwkJICogZmxhZyB3aWxsIGZvcmNlIHRoZSB1cGRvd24gcm91dGluZSB0byBiZSBjYWxsZWQKKwkJICogb24gdGhlIG5leHQgaWJzdGF0dXNjaGFuZ2UgZG93biBpbnRlcnJ1cHQsIGV2ZW4KKwkJICogaWYgaXQncyBub3QgYW4gZG93bi0+dXAgdHJhbnNpdGlvbi4KKwkJICovCisJCXZhbC0tOyAvKiBjb252ZXJ0IGZyb20gSUIgdG8gY2hpcCAqLworCQltYXNrciA9IElCQTcyMjBfSUJDX1dJRFRIX01BU0s7CisJCWxzYiA9IElCQTcyMjBfSUJDX1dJRFRIX1NISUZUOworCQlzZXRmb3JjZSA9IDE7CisJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9JQl9GT1JDRV9OT1RJRlk7CisJCWJyZWFrOworCisJY2FzZSBJUEFUSF9JQl9DRkdfU1BEX0VOQjogLyogc2V0IGFsbG93ZWQgTGluayBzcGVlZHMgKi8KKwkJLyoKKwkJICogSWYgd2UgdHVybiBvZmYgSUIxLjIsIG5lZWQgdG8gcHJlc2V0IFNlckRlcyBkZWZhdWx0cywKKwkJICogYnV0IG5vdCByaWdodCBub3cuIFNldCBhIGZsYWcgZm9yIHRoZSBuZXh0IHRpbWUKKwkJICogd2UgY29tbWFuZCB0aGUgbGluayBkb3duLiAgQXMgd2l0aCB3aWR0aCwgb25seSB3cml0ZSB0aGUKKwkJICogYWN0dWFsIHJlZ2lzdGVyIGlmIHRoZSBsaW5rIGlzIGN1cnJlbnRseSBkb3duLCBvdGhlcndpc2UKKwkJICogdGFrZXMgZWZmZWN0IG9uIG5leHQgbGluayBjaGFuZ2UuICBTaW5jZSBzZXR0aW5nIGlzIGJlaW5nCisJCSAqIGV4cGxpY3RseSByZXF1ZXN0ZWQgKHZpYSBNQUQgb3Igc3lzZnMpLCBjbGVhciBhdXRvbmVnCisJCSAqIGZhaWx1cmUgc3RhdHVzIGlmIHNwZWVkIGF1dG9uZWcgaXMgZW5hYmxlZC4KKwkJICovCisJCWRkLT5pcGF0aF9saW5rX3NwZWVkX2VuYWJsZWQgPSB2YWw7CisJCWlmIChkZC0+aXBhdGhfaWJjZGRyY3RybCAmIElCQTcyMjBfSUJDX0lCVEFfMV8yX01BU0sgJiYKKwkJICAgICEodmFsICYgKHZhbCAtIDEpKSkKKwkJCWRkLT5pcGF0aF9wcmVzZXRzX25lZWRlZCA9IDE7CisJCWlmICgoZGQtPmlwYXRoX2ZsYWdzICYgKElQQVRIX0xJTktET1dOfElQQVRIX0xJTktJTklUKSkgIT0KKwkJCUlQQVRIX0xJTktET1dOKQorCQkJZ290byBiYWlsOworCQkvKgorCQkgKiBXZSBzZXQgdGhlIElQQVRIX0lCX0ZPUkNFX05PVElGWSBiaXQgc28gdXBkb3duCisJCSAqIHdpbGwgZ2V0IGNhbGxlZCBiZWNhdXNlIHdlIHdhbnQgdXBkYXRlCisJCSAqIGxpbmtfc3BlZWRfYWN0aXZlLCBhbmQgdGhlIGNoYW5nZSBtYXkgbm90IHRha2UKKwkJICogZWZmZWN0IGZvciBzb21lIHRpbWUgKGlmIHdlIGFyZSBpbiBQT0xMKSwgc28gdGhpcworCQkgKiBmbGFnIHdpbGwgZm9yY2UgdGhlIHVwZG93biByb3V0aW5lIHRvIGJlIGNhbGxlZAorCQkgKiBvbiB0aGUgbmV4dCBpYnN0YXR1c2NoYW5nZSBkb3duIGludGVycnVwdCwgZXZlbgorCQkgKiBpZiBpdCdzIG5vdCBhbiBkb3duLT51cCB0cmFuc2l0aW9uLiAgV2hlbiBzZXR0aW5nCisJCSAqIHNwZWVkIGF1dG9uZWcsIGNsZWFyIEFVVE9ORUdfRkFJTEVELgorCQkgKi8KKwkJaWYgKHZhbCA9PSAoSVBBVEhfSUJfU0RSIHwgSVBBVEhfSUJfRERSKSkgeworCQkJdmFsID0gSUJBNzIyMF9JQkNfU1BFRURfQVVUT05FR19NQVNLIHwKKwkJCQlJQkE3MjIwX0lCQ19JQlRBXzFfMl9NQVNLOworCQkJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9JQl9BVVRPTkVHX0ZBSUxFRDsKKwkJfSBlbHNlCisJCQl2YWwgPSB2YWwgPT0gSVBBVEhfSUJfRERSID8gIElCQTcyMjBfSUJDX1NQRUVEX0REUgorCQkJCTogSUJBNzIyMF9JQkNfU1BFRURfU0RSOworCQltYXNrciA9IElCQTcyMjBfSUJDX1NQRUVEX0FVVE9ORUdfTUFTSyB8CisJCQlJQkE3MjIwX0lCQ19JQlRBXzFfMl9NQVNLOworCQlsc2IgPSAwOyAvKiBzcGVlZCBiaXRzIGFyZSBsb3cgYml0cyAqLworCQlzZXRmb3JjZSA9IDE7CisJCWJyZWFrOworCisJY2FzZSBJUEFUSF9JQl9DRkdfUlhQT0xfRU5COiAvKiBzZXQgQXV0by1SWC1wb2xhcml0eSBlbmFibGUgKi8KKwkJbHNiID0gSUJBNzIyMF9JQkNfUlhQT0xfU0hJRlQ7CisJCW1hc2tyID0gSUJBNzIyMF9JQkNfUlhQT0xfTUFTSzsKKwkJYnJlYWs7CisKKwljYXNlIElQQVRIX0lCX0NGR19MUkVWX0VOQjogLyogc2V0IEF1dG8tTGFuZS1yZXZlcnNhbCBlbmFibGUgKi8KKwkJbHNiID0gSUJBNzIyMF9JQkNfTFJFVl9TSElGVDsKKwkJbWFza3IgPSBJQkE3MjIwX0lCQ19MUkVWX01BU0s7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1RTVVBQOworCQlnb3RvIGJhaWw7CisJfQorCWRkLT5pcGF0aF9pYmNkZHJjdHJsICY9IH4obWFza3IgPDwgbHNiKTsKKwlkZC0+aXBhdGhfaWJjZGRyY3RybCB8PSAoKCh1NjQpIHZhbCAmIG1hc2tyKSA8PCBsc2IpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjZGRyY3RybCwKKwkJCSBkZC0+aXBhdGhfaWJjZGRyY3RybCk7CisJaWYgKHNldGZvcmNlKQorCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfSUJfRk9SQ0VfTk9USUZZOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpcGF0aF83MjIwX3JlYWRfY291bnRlcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICAgc3RydWN0IGluZmluaXBhdGhfY291bnRlcnMgKmNudHJzKQoreworCXU2NCAqY291bnRlcnMgPSAodTY0ICopIGNudHJzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZigqY250cnMpIC8gc2l6ZW9mKHU2NCk7IGkrKykKKwkJY291bnRlcnNbaV0gPSBpcGF0aF9zbmFwX2NudHIoZGQsIGkpOworfQorCisvKiBpZiB3ZSBhcmUgdXNpbmcgTVNJLCB0cnkgdG8gZmFsbGJhY2sgdG8gSU5UeCAqLworc3RhdGljIGludCBpcGF0aF83MjIwX2ludHJfZmFsbGJhY2soc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWlmIChkZC0+aXBhdGhfbXNpX2xvKSB7CisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJNU0kgaW50ZXJydXB0IG5vdCBkZXRlY3RlZCwiCisJCQkiIHRyeWluZyBJTlR4IGludGVycnVwdHNcbiIpOworCQlpcGF0aF83MjIwX25vbXNpKGRkKTsKKwkJaXBhdGhfZW5hYmxlX2ludHgoZGQtPnBjaWRldik7CisJCS8qCisJCSAqIHNvbWUgbmV3ZXIga2VybmVscyByZXF1aXJlIGZyZWVfaXJxIGJlZm9yZSBkaXNhYmxlX21zaSwKKwkJICogYW5kIGlycSBjYW4gYmUgY2hhbmdlZCBkdXJpbmcgZGlzYWJsZSBhbmQgaW50eCBlbmFibGUKKwkJICogYW5kIHdlIG5lZWQgdG8gdGhlcmVmb3JlIHVzZSB0aGUgcGNpZGV2LT5pcnEgdmFsdWUsCisJCSAqIG5vdCBvdXIgc2F2ZWQgTVNJIHZhbHVlLgorCQkgKi8KKwkJZGQtPmlwYXRoX2lycSA9IGRkLT5wY2lkZXYtPmlycTsKKwkJaWYgKHJlcXVlc3RfaXJxKGRkLT5pcGF0aF9pcnEsIGlwYXRoX2ludHIsIElSUUZfU0hBUkVELAorCQkJSVBBVEhfRFJWX05BTUUsIGRkKSkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsCisJCQkJIkNvdWxkIG5vdCByZS1yZXF1ZXN0X2lycSBmb3IgSU5UeFxuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc2V0IHRoZSBYR1hTIChiZXR3ZWVuIHNlcmRlcyBhbmQgSUJDKS4gIFNsaWdodGx5IGxlc3MgaW50cnVzaXZlCisgKiB0aGFuIHJlc2V0dGluZyB0aGUgSUJDIG9yIGV4dGVybmFsIGxpbmsgc3RhdGUsIGFuZCB1c2VmdWwgaW4gc29tZQorICogY2FzZXMgdG8gY2F1c2Ugc29tZSByZXRyYWluaW5nLiAgVG8gZG8gdGhpcyByaWdodCwgd2UgcmVzZXQgSUJDCisgKiBhcyB3ZWxsLgorICovCitzdGF0aWMgdm9pZCBpcGF0aF83MjIwX3hneHNfcmVzZXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXU2NCB2YWwsIHByZXZfdmFsOworCisJcHJldl92YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnKTsKKwl2YWwgPSBwcmV2X3ZhbCB8IElORklOSVBBVEhfWEdYU19SRVNFVDsKKwlwcmV2X3ZhbCAmPSB+SU5GSU5JUEFUSF9YR1hTX1JFU0VUOyAvKiBiZSBzdXJlICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLAorCQkJIGRkLT5pcGF0aF9jb250cm9sICYgfklORklOSVBBVEhfQ19MSU5LRU5BQkxFKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcsIHZhbCk7CisJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnLCBwcmV2X3ZhbCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLAorCQkJIGRkLT5pcGF0aF9jb250cm9sKTsKK30KKworCisvKiBTdGlsbCBuZWVkcyBjbGVhbnVwLCB0b28gbXVjaCBoYXJkd2lyZWQgc3R1ZmYgKi8KK3N0YXRpYyB2b2lkIGF1dG9uZWdfc2VuZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJdTMyICpoZHIsIHUzMiBkY250LCB1MzIgKmRhdGEpCit7CisJaW50IGk7CisJdTY0IGNudDsKKwl1MzIgX19pb21lbSAqcGlvYnVmOworCXUzMiBwbnVtOworCisJaSA9IDA7CisJY250ID0gNyArIGRjbnQgKyAxOyAvKiA3IGR3b3JkIGhlYWRlciwgZHdvcmQgZGF0YSwgaWNyYyAqLworCXdoaWxlICghKHBpb2J1ZiA9IGlwYXRoX2dldHBpb2J1ZihkZCwgY250LCAmcG51bSkpKSB7CisJCWlmIChpKysgPiAxNSkgeworCQkJaXBhdGhfZGJnKCJDb3VsZG4ndCBnZXQgcGlvIGJ1ZmZlciBmb3Igc2VuZFxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJdWRlbGF5KDIpOworCX0KKwlpZiAoZGQtPmlwYXRoX2ZsYWdzJklQQVRIX0hBU19QQkNfQ05UKQorCQljbnQgfD0gMHg4MDAwMDAwMFVMPDwzMjsgLyogbWFyayBhcyBWTDE1ICovCisJd3JpdGVxKGNudCwgcGlvYnVmKTsKKwlpcGF0aF9mbHVzaF93YygpOworCV9faW93cml0ZTMyX2NvcHkocGlvYnVmICsgMiwgaGRyLCA3KTsKKwlfX2lvd3JpdGUzMl9jb3B5KHBpb2J1ZiArIDksIGRhdGEsIGRjbnQpOworCWlwYXRoX2ZsdXNoX3djKCk7Cit9CisKKy8qCisgKiBfc3RhcnQgcGFja2V0IGdldHMgc2VudCB0d2ljZSBhdCBzdGFydCwgX2RvbmUgZ2V0cyBzZW50IHR3aWNlIGF0IGVuZAorICovCitzdGF0aWMgdm9pZCBpcGF0aF9hdXRvbmVnX3NlbmQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgd2hpY2gpCit7CisJc3RhdGljIHUzMiBzd2FwcGVkOworCXUzMiBkdywgaSwgaGNudCwgZGNudCwgKmRhdGE7CisJc3RhdGljIHUzMiBoZHJbN10gPSB7IDB4ZjAwMmZmZmYsIDB4NDhmZmZmLCAweDY0MDBhYmJhIH07CisJc3RhdGljIHUzMiBtYWRwYXlsb2FkX3N0YXJ0WzB4NDBdID0geworCQkweDE4MTAxMDMsIDB4MSwgMHgwLCAweDAsIDB4MmM5MDAwMCwgMHgyYzksIDB4MCwgMHgwLAorCQkweGZmZmZmZmZmLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsCisJCTB4MSwgMHgxMzg4LCAweDE1ZSwgMHgxLCAvKiByZXN0IDAncyAqLworCQl9OworCXN0YXRpYyB1MzIgbWFkcGF5bG9hZF9kb25lWzB4NDBdID0geworCQkweDE4MTAxMDMsIDB4MSwgMHgwLCAweDAsIDB4MmM5MDAwMCwgMHgyYzksIDB4MCwgMHgwLAorCQkweGZmZmZmZmZmLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsCisJCTB4NDAwMDAwMDEsIDB4MTM4OCwgMHgxNWUsIC8qIHJlc3QgMCdzICovCisJCX07CisJZGNudCA9IHNpemVvZihtYWRwYXlsb2FkX3N0YXJ0KS9zaXplb2YobWFkcGF5bG9hZF9zdGFydFswXSk7CisJaGNudCA9IHNpemVvZihoZHIpL3NpemVvZihoZHJbMF0pOworCWlmICghc3dhcHBlZCkgeworCQkvKiBmb3IgbWFpbnRhaW5hYmlsaXR5LCBkbyBpdCBhdCBydW50aW1lICovCisJCWZvciAoaSA9IDA7IGkgPCBoY250OyBpKyspIHsKKwkJCWR3ID0gKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihoZHJbaV0pOworCQkJaGRyW2ldID0gZHc7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGRjbnQ7IGkrKykgeworCQkJZHcgPSAoX19mb3JjZSB1MzIpIGNwdV90b19iZTMyKG1hZHBheWxvYWRfc3RhcnRbaV0pOworCQkJbWFkcGF5bG9hZF9zdGFydFtpXSA9IGR3OworCQkJZHcgPSAoX19mb3JjZSB1MzIpIGNwdV90b19iZTMyKG1hZHBheWxvYWRfZG9uZVtpXSk7CisJCQltYWRwYXlsb2FkX2RvbmVbaV0gPSBkdzsKKwkJfQorCQlzd2FwcGVkID0gMTsKKwl9CisKKwlkYXRhID0gd2hpY2ggPyBtYWRwYXlsb2FkX2RvbmUgOiBtYWRwYXlsb2FkX3N0YXJ0OworCWlwYXRoX2NkYmcoUEtULCAiU2VuZGluZyAlcyBzcGVjaWFsIE1BRHNcbiIsIHdoaWNoPyJkb25lIjoic3RhcnQiKTsKKworCWF1dG9uZWdfc2VuZChkZCwgaGRyLCBkY250LCBkYXRhKTsKKwlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwl1ZGVsYXkoMik7CisJYXV0b25lZ19zZW5kKGRkLCBoZHIsIGRjbnQsIGRhdGEpOworCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCXVkZWxheSgyKTsKK30KKworCisKKy8qCisgKiBEbyB0aGUgYWJzb2x1dGUgbWluaW11bSB0byBjYXVzZSBhbiBJQiBzcGVlZCBjaGFuZ2UsIGFuZCBtYWtlIGl0CisgKiByZWFkeSwgYnV0IGRvbid0IGFjdHVhbGx5IHRyaWdnZXIgdGhlIGNoYW5nZS4gICBUaGUgY2FsbGVyIHdpbGwKKyAqIGRvIHRoYXQgd2hlbiByZWFkeSAoaWYgbGluayBpcyBpbiBQb2xsaW5nIHRyYWluaW5nIHN0YXRlLCBpdCB3aWxsCisgKiBoYXBwZW4gaW1tZWRpYXRlbHksIG90aGVyd2lzZSB3aGVuIGxpbmsgbmV4dCBnb2VzIGRvd24pCisgKgorICogVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgRERSIGF1dG9uZWdvdGF0aW9uCisgKiBjb2RlIGZvciBkZXZpY2VzIHRoYXQgYXJlIG5vdCBjb21wbGlhbnQgd2l0aCBJQiAxLjIgKG9yIGNvZGUgdGhhdAorICogZml4ZXMgdGhpbmdzIHVwIGZvciBzYW1lKS4KKyAqCisgKiBXaGVuIGxpbmsgaGFzIGdvbmUgZG93biwgYW5kIGF1dG9uZWcgZW5hYmxlZCwgb3IgYXV0b25lZyBoYXMKKyAqIGZhaWxlZCBhbmQgd2UgZ2l2ZSB1cCB1bnRpbCBuZXh0IHRpbWUgd2Ugc2V0IGJvdGggc3BlZWRzLCBhbmQKKyAqIHRoZW4gd2Ugd2FudCBJQlRBIGVuYWJsZWQgYXMgd2VsbCBhcyAidXNlIG1heCBlbmFibGVkIHNwZWVkLgorICovCitzdGF0aWMgdm9pZCBzZXRfc3BlZWRfZmFzdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBzcGVlZCkKK3sKKwlkZC0+aXBhdGhfaWJjZGRyY3RybCAmPSB+KElCQTcyMjBfSUJDX1NQRUVEX0FVVE9ORUdfTUFTSyB8CisJCUlCQTcyMjBfSUJDX0lCVEFfMV8yX01BU0sgfAorCQkoSUJBNzIyMF9JQkNfV0lEVEhfTUFTSyA8PCBJQkE3MjIwX0lCQ19XSURUSF9TSElGVCkpOworCisJaWYgKHNwZWVkID09IChJUEFUSF9JQl9TRFIgfCBJUEFUSF9JQl9ERFIpKQorCQlkZC0+aXBhdGhfaWJjZGRyY3RybCB8PSBJQkE3MjIwX0lCQ19TUEVFRF9BVVRPTkVHX01BU0sgfAorCQkJSUJBNzIyMF9JQkNfSUJUQV8xXzJfTUFTSzsKKwllbHNlCisJCWRkLT5pcGF0aF9pYmNkZHJjdHJsIHw9IHNwZWVkID09IElQQVRIX0lCX0REUiA/CisJCQlJQkE3MjIwX0lCQ19TUEVFRF9ERFIgOiBJQkE3MjIwX0lCQ19TUEVFRF9TRFI7CisKKwkvKgorCSAqIENvbnZlcnQgZnJvbSBJQi1zdHlsZSAxID0gMXgsIDIgPSA0eCwgMyA9IGF1dG8KKwkgKiB0byBjaGlwLWNlbnRyaWMgICAgICAgMCA9IDF4LCAxID0gNHgsIDIgPSBhdXRvCisJICovCisJZGQtPmlwYXRoX2liY2RkcmN0cmwgfD0gKHU2NCkoZGQtPmlwYXRoX2xpbmtfd2lkdGhfZW5hYmxlZCAtIDEpIDw8CisJCUlCQTcyMjBfSUJDX1dJRFRIX1NISUZUOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjZGRyY3RybCwKKwkJCWRkLT5pcGF0aF9pYmNkZHJjdHJsKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJzZXR1cCBmb3IgSUIgc3BlZWQgKCV4KSBkb25lXG4iLCBzcGVlZCk7Cit9CisKKworLyoKKyAqIHRoaXMgcm91dGluZSBpcyBvbmx5IHVzZWQgd2hlbiB3ZSBhcmUgbm90IHRhbGtpbmcgdG8gYW5vdGhlcgorICogSUIgMS4yLWNvbXBsaWFudCBkZXZpY2UgdGhhdCB3ZSB0aGluayBjYW4gZG8gRERSLgorICogKFRoaXMgaW5jbHVkZXMgYWxsIGV4aXN0aW5nIHN3aXRjaCBjaGlwcyBhcyBvZiBPY3QgMjAwNy4pCisgKiAxLjItY29tcGxpYW50IGRldmljZXMgZ28gZGlyZWN0bHkgdG8gRERSIHByaW9yIHRvIHJlYWNoaW5nIElOSVQKKyAqLworc3RhdGljIHZvaWQgdHJ5X2F1dG9fbmVnKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwkvKgorCSAqIHJlcXVpcmVkIGZvciBvbGRlciBub24tSUIxLjIgRERSIHN3aXRjaGVzLiAgTmV3ZXIKKwkgKiBub24tSUItY29tcGxpYW50IHN3aXRjaGVzIGRvbid0IG5lZWQgaXQsIGJ1dCBzbyBmYXIsCisJICogYXJlbid0IGJvdGhlcmVkIGJ5IGl0IGVpdGhlci4gICJNYWdpYyBjb25zdGFudCIKKwkgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBJUEFUSF9LUkVHX09GRlNFVChJQk5DTW9kZUN0cmwpLAorCQkweDNiOWRjMDcpOworCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9JQl9BVVRPTkVHX0lOUFJPRzsKKwlpcGF0aF9hdXRvbmVnX3NlbmQoZGQsIDApOworCXNldF9zcGVlZF9mYXN0KGRkLCBJUEFUSF9JQl9ERFIpOworCWlwYXRoX3RvZ2dsZV9yY2xrcmxzKGRkKTsKKwkvKiAyIG1zZWMgaXMgbWluaW11bSBsZW5ndGggb2YgYSBwb2xsIGN5Y2xlICovCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZC0+aXBhdGhfYXV0b25lZ193b3JrLAorCQltc2Vjc190b19qaWZmaWVzKDIpKTsKK30KKworCitzdGF0aWMgaW50IGlwYXRoXzcyMjBfaWJfdXBkb3duKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IGlidXAsIHU2NCBpYmNzKQoreworCWludCByZXQgPSAwOworCXUzMiBsdHN0YXRlID0gaXBhdGhfaWJfbGlua3N0YXRlKGRkLCBpYmNzKTsKKworCWRkLT5pcGF0aF9saW5rX3dpZHRoX2FjdGl2ZSA9CisJCSgoaWJjcyA+PiBJQkE3MjIwX0lCQ1NfTElOS1dJRFRIX1NISUZUKSAmIDEpID8KKwkJICAgIElCX1dJRFRIXzRYIDogSUJfV0lEVEhfMVg7CisJZGQtPmlwYXRoX2xpbmtfc3BlZWRfYWN0aXZlID0KKwkJKChpYmNzID4+IElCQTcyMjBfSUJDU19MSU5LU1BFRURfU0hJRlQpICYgMSkgPworCQkgICAgSVBBVEhfSUJfRERSIDogSVBBVEhfSUJfU0RSOworCisJaWYgKCFpYnVwKSB7CisJCS8qCisJCSAqIHdoZW4gbGluayBnb2VzIGRvd24gd2UgZG9uJ3Qgd2FudCBhZXEgcnVubmluZywgc28gaXQKKwkJICogd29uJ3QndCBpbnRlcmZlcmUgd2l0aCBJQkMgdHJhaW5pbmcsIGV0Yy4sIGFuZCB3ZSBuZWVkCisJCSAqIHRvIGdvIGJhY2sgdG8gdGhlIHN0YXRpYyBTZXJEZXMgcHJlc2V0IHZhbHVlcworCQkgKi8KKwkJaWYgKGRkLT5pcGF0aF94MV9maXhfdHJpZXMgJiYKKwkJCSBsdHN0YXRlIDw9IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9TTEVFUFFVSUVUICYmCisJCQlsdHN0YXRlICE9IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVApCisJCQlkZC0+aXBhdGhfeDFfZml4X3RyaWVzID0gMDsKKwkJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgKElQQVRIX0lCX0FVVE9ORUdfRkFJTEVEIHwKKwkJCUlQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSkpCisJCQlzZXRfc3BlZWRfZmFzdChkZCwgZGQtPmlwYXRoX2xpbmtfc3BlZWRfZW5hYmxlZCk7CisJCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSkgeworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiU2V0dGluZyBSWEVRIGRlZmF1bHRzXG4iKTsKKwkJCWlwYXRoX3NkNzIyMF9wcmVzZXRzKGRkKTsKKwkJfQorCQkvKiB0aGlzIG1pZ2h0IGJldHRlciBpbiBpcGF0aF9zZDcyMjBfcHJlc2V0cygpICovCisJCWlwYXRoX3NldF9yZWxvY2tfcG9sbChkZCwgaWJ1cCk7CisJfSBlbHNlIHsKKwkJaWYgKGlwYXRoX2NvbXBhdF9kZHJfbmVnb3RpYXRlICYmCisJCSAgICAhKGRkLT5pcGF0aF9mbGFncyAmIChJUEFUSF9JQl9BVVRPTkVHX0ZBSUxFRCB8CisJCQlJUEFUSF9JQl9BVVRPTkVHX0lOUFJPRykpICYmCisJCQlkZC0+aXBhdGhfbGlua19zcGVlZF9hY3RpdmUgPT0gSVBBVEhfSUJfU0RSICYmCisJCQkoZGQtPmlwYXRoX2xpbmtfc3BlZWRfZW5hYmxlZCAmCisJCQkgICAgKElQQVRIX0lCX0REUiB8IElQQVRIX0lCX1NEUikpID09CisJCQkgICAgKElQQVRIX0lCX0REUiB8IElQQVRIX0lCX1NEUikgJiYKKwkJCWRkLT5pcGF0aF9hdXRvbmVnX3RyaWVzIDwgSVBBVEhfQVVUT05FR19UUklFUykgeworCQkJLyogd2UgYXJlIFNEUiwgYW5kIEREUiBhdXRvLW5lZ290aWF0aW9uIGVuYWJsZWQgKi8KKwkJCSsrZGQtPmlwYXRoX2F1dG9uZWdfdHJpZXM7CisJCQlpcGF0aF9kYmcoIkREUiBuZWdvdGlhdGlvbiB0cnksICV1LyV1XG4iLAorCQkJCWRkLT5pcGF0aF9hdXRvbmVnX3RyaWVzLAorCQkJCUlQQVRIX0FVVE9ORUdfVFJJRVMpOworCQkJdHJ5X2F1dG9fbmVnKGRkKTsKKwkJCXJldCA9IDE7IC8qIG5vIG90aGVyIElCIHN0YXR1cyBjaGFuZ2UgcHJvY2Vzc2luZyAqLworCQl9IGVsc2UgaWYgKChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JQl9BVVRPTkVHX0lOUFJPRykKKwkJCSYmIGRkLT5pcGF0aF9saW5rX3NwZWVkX2FjdGl2ZSA9PSBJUEFUSF9JQl9TRFIpIHsKKwkJCWlwYXRoX2F1dG9uZWdfc2VuZChkZCwgMSk7CisJCQlzZXRfc3BlZWRfZmFzdChkZCwgSVBBVEhfSUJfRERSKTsKKwkJCXVkZWxheSgyKTsKKwkJCWlwYXRoX3RvZ2dsZV9yY2xrcmxzKGRkKTsKKwkJCXJldCA9IDE7IC8qIG5vIG90aGVyIElCIHN0YXR1cyBjaGFuZ2UgcHJvY2Vzc2luZyAqLworCQl9IGVsc2UgeworCQkJaWYgKChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JQl9BVVRPTkVHX0lOUFJPRykgJiYKKwkJCQkoZGQtPmlwYXRoX2xpbmtfc3BlZWRfYWN0aXZlICYgSVBBVEhfSUJfRERSKSkgeworCQkJCWlwYXRoX2RiZygiR290IHRvIElOSVQgd2l0aCBERFIgYXV0b25lZ1xuIik7CisJCQkJZGQtPmlwYXRoX2ZsYWdzICY9IH4oSVBBVEhfSUJfQVVUT05FR19JTlBST0cKKwkJCQkJfCBJUEFUSF9JQl9BVVRPTkVHX0ZBSUxFRCk7CisJCQkJZGQtPmlwYXRoX2F1dG9uZWdfdHJpZXMgPSAwOworCQkJCS8qIHJlLWVuYWJsZSBTRFIsIGZvciBuZXh0IGxpbmsgZG93biAqLworCQkJCXNldF9zcGVlZF9mYXN0KGRkLAorCQkJCQlkZC0+aXBhdGhfbGlua19zcGVlZF9lbmFibGVkKTsKKwkJCQl3YWtlX3VwKCZkZC0+aXBhdGhfYXV0b25lZ193YWl0KTsKKwkJCX0gZWxzZSBpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSUJfQVVUT05FR19GQUlMRUQpIHsKKwkJCQkvKgorCQkJCSAqIGNsZWFyIGF1dG9uZWcgZmFpbHVyZSBmbGFnLCBhbmQgZG8gc2V0dXAKKwkJCQkgKiBzbyB3ZSdsbCB0cnkgbmV4dCB0aW1lIGxpbmsgZ29lcyBkb3duIGFuZAorCQkJCSAqIGJhY2sgdG8gSU5JVCAocG9zc2libHkgY29ubmVjdGVkIHRvIGRpZmZlcmVudAorCQkJCSAqIGRldmljZSkuCisJCQkJICovCisJCQkJaXBhdGhfZGJnKCJJTklUICVzRFIgYWZ0ZXIgYXV0b25lZyBmYWlsdXJlXG4iLAorCQkJCQkoZGQtPmlwYXRoX2xpbmtfc3BlZWRfYWN0aXZlICYKKwkJCQkJICBJUEFUSF9JQl9ERFIpID8gIkQiIDogIlMiKTsKKwkJCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfklQQVRIX0lCX0FVVE9ORUdfRkFJTEVEOworCQkJCWRkLT5pcGF0aF9pYmNkZHJjdHJsIHw9CisJCQkJCUlCQTcyMjBfSUJDX0lCVEFfMV8yX01BU0s7CisJCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwKKwkJCQkJSVBBVEhfS1JFR19PRkZTRVQoSUJOQ01vZGVDdHJsKSwgMCk7CisJCQl9CisJCX0KKwkJLyoKKwkJICogaWYgd2UgYXJlIGluIDFYLCBhbmQgYXJlIGluIGF1dG9uZWcgd2lkdGgsIGl0CisJCSAqIGNvdWxkIGJlIGR1ZSB0byBhbiB4Z3hzIHByb2JsZW0sIHNvIGlmIHdlIGhhdmVuJ3QKKwkJICogYWxyZWFkeSB0cmllZCwgdHJ5IHR3aWNlIHRvIGdldCB0byA0WDsgaWYgd2UKKwkJICogdHJpZWQsIGFuZCBjb3VsZG4ndCwgcmVwb3J0IGl0LCBzaW5jZSBpdCB3aWxsCisJCSAqIHByb2JhYmx5IG5vdCBiZSB3aGF0IGlzIGRlc2lyZWQuCisJCSAqLworCQlpZiAoKGRkLT5pcGF0aF9saW5rX3dpZHRoX2VuYWJsZWQgJiAoSUJfV0lEVEhfMVggfAorCQkJSUJfV0lEVEhfNFgpKSA9PSAoSUJfV0lEVEhfMVggfCBJQl9XSURUSF80WCkKKwkJCSYmIGRkLT5pcGF0aF9saW5rX3dpZHRoX2FjdGl2ZSA9PSBJQl9XSURUSF8xWAorCQkJJiYgZGQtPmlwYXRoX3gxX2ZpeF90cmllcyA8IDMpIHsKKwkJCWlmICgrK2RkLT5pcGF0aF94MV9maXhfdHJpZXMgPT0gMykKKwkJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJCQkiSUIgbGluayBpcyBpbiAxWCBtb2RlXG4iKTsKKwkJCWVsc2UgeworCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIklCIDFYIGluICIKKwkJCQkJImF1dG8td2lkdGgsIHRyeSAldSB0byBiZSAiCisJCQkJCSJzdXJlIGl0J3MgcmVhbGx5IDFYOyAiCisJCQkJCSJsdHN0YXRlICV1XG4iLAorCQkJCQkgZGQtPmlwYXRoX3gxX2ZpeF90cmllcywKKwkJCQkJIGx0c3RhdGUpOworCQkJCWRkLT5pcGF0aF9mX3hneHNfcmVzZXQoZGQpOworCQkJCXJldCA9IDE7IC8qIHNraXAgb3RoZXIgcHJvY2Vzc2luZyAqLworCQkJfQorCQl9CisKKwkJaWYgKCFyZXQpIHsKKwkJCWRkLT5kZWxheV9tdWx0ID0gcmF0ZV90b19kZWxheQorCQkJICAgIFsoaWJjcyA+PiBJQkE3MjIwX0lCQ1NfTElOS1NQRUVEX1NISUZUKSAmIDFdCisJCQkgICAgWyhpYmNzID4+IElCQTcyMjBfSUJDU19MSU5LV0lEVEhfU0hJRlQpICYgMV07CisKKwkJCWlwYXRoX3NldF9yZWxvY2tfcG9sbChkZCwgaWJ1cCk7CisJCX0KKwl9CisKKwlpZiAoIXJldCkKKwkJaXBhdGhfc2V0dXBfNzIyMF9zZXRleHRsZWQoZGQsIGlwYXRoX2liX2xpbmtzdGF0ZShkZCwgaWJjcyksCisJCQlsdHN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBIYW5kbGUgdGhlIGVtcGlyaWNhbGx5IGRldGVybWluZWQgbWVjaGFuaXNtIGZvciBhdXRvLW5lZ290aWF0aW9uCisgKiBvZiBERFIgc3BlZWQgd2l0aCBzd2l0Y2hlcy4KKyAqLworc3RhdGljIHZvaWQgYXV0b25lZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJdTY0IHN0YXJ0bXM7CisJdTMyIGxhc3RsdHMsIGk7CisKKwlkZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSwKKwkJaXBhdGhfYXV0b25lZ193b3JrLndvcmspOworCisJc3RhcnRtcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CisKKwkvKgorCSAqIGJ1c3kgd2FpdCBmb3IgdGhpcyBmaXJzdCBwYXJ0LCBpdCBzaG91bGQgYmUgYXQgbW9zdCBhCisJICogZmV3IGh1bmRyZWQgdXNlYywgc2luY2Ugd2Ugc2NoZWR1bGVkIG91cnNlbHZlcyBmb3IgMm1zZWMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDI1OyBpKyspIHsKKwkJbGFzdGx0cyA9IGlwYXRoX2liX2xpbmt0cnN0YXRlKGRkLCBkZC0+aXBhdGhfbGFzdGliY3N0YXQpOworCQlpZiAobGFzdGx0cyA9PSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUE9MTFFVSUVUKSB7CisJCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRkLCBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFKTsKKwkJCWJyZWFrOworCQl9CisJCXVkZWxheSgxMDApOworCX0KKworCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSkKKwkJZ290byBkb25lOyAvKiB3ZSBnb3QgdGhlcmUgZWFybHkgb3IgdG9sZCB0byBzdG9wICovCisKKwkvKiB3ZSBleHBlY3QgdGhpcyB0byB0aW1lb3V0ICovCisJaWYgKHdhaXRfZXZlbnRfdGltZW91dChkZC0+aXBhdGhfYXV0b25lZ193YWl0LAorCQkhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSwKKwkJbXNlY3NfdG9famlmZmllcyg5MCkpKQorCQlnb3RvIGRvbmU7CisKKwlpcGF0aF90b2dnbGVfcmNsa3JscyhkZCk7CisKKwkvKiB3ZSBleHBlY3QgdGhpcyB0byB0aW1lb3V0ICovCisJaWYgKHdhaXRfZXZlbnRfdGltZW91dChkZC0+aXBhdGhfYXV0b25lZ193YWl0LAorCQkhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSwKKwkJbXNlY3NfdG9famlmZmllcygxNzAwKSkpCisJCWdvdG8gZG9uZTsKKworCXNldF9zcGVlZF9mYXN0KGRkLCBJUEFUSF9JQl9TRFIpOworCWlwYXRoX3RvZ2dsZV9yY2xrcmxzKGRkKTsKKworCS8qCisJICogd2FpdCB1cCB0byAyNTAgbXNlYyBmb3IgbGluayB0byB0cmFpbiBhbmQgZ2V0IHRvIElOSVQgYXQgRERSOworCSAqIHRoaXMgc2hvdWxkIHRlcm1pbmF0ZSBlYXJseQorCSAqLworCXdhaXRfZXZlbnRfdGltZW91dChkZC0+aXBhdGhfYXV0b25lZ193YWl0LAorCQkhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSwKKwkJbXNlY3NfdG9famlmZmllcygyNTApKTsKK2RvbmU6CisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSB7CisJCWlwYXRoX2RiZygiRGlkIG5vdCBnZXQgdG8gRERSIElOSVQgKCV4KSBhZnRlciAlTHUgbXNlY3NcbiIsCisJCQlpcGF0aF9pYl9zdGF0ZShkZCwgZGQtPmlwYXRoX2xhc3RpYmNzdGF0KSwKKwkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyktc3RhcnRtcyk7CisJCWRkLT5pcGF0aF9mbGFncyAmPSB+SVBBVEhfSUJfQVVUT05FR19JTlBST0c7CisJCWlmIChkZC0+aXBhdGhfYXV0b25lZ190cmllcyA9PSBJUEFUSF9BVVRPTkVHX1RSSUVTKSB7CisJCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfSUJfQVVUT05FR19GQUlMRUQ7CisJCQlpcGF0aF9kYmcoIkdpdmluZyB1cCBvbiBERFIgdW50aWwgbmV4dCBJQiAiCisJCQkJImxpbmsgRG93blxuIik7CisJCQlkZC0+aXBhdGhfYXV0b25lZ190cmllcyA9IDA7CisJCX0KKwkJc2V0X3NwZWVkX2Zhc3QoZGQsIGRkLT5pcGF0aF9saW5rX3NwZWVkX2VuYWJsZWQpOworCX0KK30KKworCisvKioKKyAqIGlwYXRoX2luaXRfaWJhNzIyMF9mdW5jcyAtIHNldCB1cCB0aGUgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqCisgKiBUaGlzIGlzIGdsb2JhbCwgYW5kIGlzIGNhbGxlZCBkaXJlY3RseSBhdCBpbml0IHRvIHNldCB1cCB0aGUKKyAqIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGxhdGVyIHVzZS4KKyAqLwordm9pZCBpcGF0aF9pbml0X2liYTcyMjBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWRkLT5pcGF0aF9mX2ludHJzZXR1cCA9IGlwYXRoXzcyMjBfaW50Y29uZmlnOworCWRkLT5pcGF0aF9mX2J1cyA9IGlwYXRoX3NldHVwXzcyMjBfY29uZmlnOworCWRkLT5pcGF0aF9mX3Jlc2V0ID0gaXBhdGhfc2V0dXBfNzIyMF9yZXNldDsKKwlkZC0+aXBhdGhfZl9nZXRfYm9hcmRuYW1lID0gaXBhdGhfNzIyMF9ib2FyZG5hbWU7CisJZGQtPmlwYXRoX2ZfaW5pdF9od2Vycm9ycyA9IGlwYXRoXzcyMjBfaW5pdF9od2Vycm9yczsKKwlkZC0+aXBhdGhfZl9lYXJseV9pbml0ID0gaXBhdGhfNzIyMF9lYXJseV9pbml0OworCWRkLT5pcGF0aF9mX2hhbmRsZV9od2Vycm9ycyA9IGlwYXRoXzcyMjBfaGFuZGxlX2h3ZXJyb3JzOworCWRkLT5pcGF0aF9mX3F1aWV0X3NlcmRlcyA9IGlwYXRoXzcyMjBfcXVpZXRfc2VyZGVzOworCWRkLT5pcGF0aF9mX2JyaW5ndXBfc2VyZGVzID0gaXBhdGhfNzIyMF9icmluZ3VwX3NlcmRlczsKKwlkZC0+aXBhdGhfZl9jbGVhcl90aWRzID0gaXBhdGhfNzIyMF9jbGVhcl90aWRzOworCWRkLT5pcGF0aF9mX3B1dF90aWQgPSBpcGF0aF83MjIwX3B1dF90aWQ7CisJZGQtPmlwYXRoX2ZfY2xlYW51cCA9IGlwYXRoX3NldHVwXzcyMjBfY2xlYW51cDsKKwlkZC0+aXBhdGhfZl9zZXRleHRsZWQgPSBpcGF0aF9zZXR1cF83MjIwX3NldGV4dGxlZDsKKwlkZC0+aXBhdGhfZl9nZXRfYmFzZV9pbmZvID0gaXBhdGhfNzIyMF9nZXRfYmFzZV9pbmZvOworCWRkLT5pcGF0aF9mX2ZyZWVfaXJxID0gaXBhdGhfNzIyMF9mcmVlX2lycTsKKwlkZC0+aXBhdGhfZl90aWR0ZW1wbGF0ZSA9IGlwYXRoXzcyMjBfdGlkdGVtcGxhdGU7CisJZGQtPmlwYXRoX2ZfaW50cl9mYWxsYmFjayA9IGlwYXRoXzcyMjBfaW50cl9mYWxsYmFjazsKKwlkZC0+aXBhdGhfZl94Z3hzX3Jlc2V0ID0gaXBhdGhfNzIyMF94Z3hzX3Jlc2V0OworCWRkLT5pcGF0aF9mX2dldF9pYl9jZmcgPSBpcGF0aF83MjIwX2dldF9pYl9jZmc7CisJZGQtPmlwYXRoX2Zfc2V0X2liX2NmZyA9IGlwYXRoXzcyMjBfc2V0X2liX2NmZzsKKwlkZC0+aXBhdGhfZl9jb25maWdfamludCA9IGlwYXRoXzcyMjBfY29uZmlnX2ppbnQ7CisJZGQtPmlwYXRoX2ZfY29uZmlnX3BvcnRzID0gaXBhdGhfNzIyMF9jb25maWdfcG9ydHM7CisJZGQtPmlwYXRoX2ZfcmVhZF9jb3VudGVycyA9IGlwYXRoXzcyMjBfcmVhZF9jb3VudGVyczsKKwlkZC0+aXBhdGhfZl9nZXRfbXNnaGVhZGVyID0gaXBhdGhfNzIyMF9nZXRfbXNnaGVhZGVyOworCWRkLT5pcGF0aF9mX2liX3VwZG93biA9IGlwYXRoXzcyMjBfaWJfdXBkb3duOworCisJLyogaW5pdGlhbGl6ZSBjaGlwLXNwZWNpZmljIHZhcmlhYmxlcyAqLworCWlwYXRoX2luaXRfNzIyMF92YXJpYWJsZXMoZGQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCmluZGV4IDQ0NzE2NzQuLjI3ZGQ4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTE1NSwyNCArMTU1LDEzIEBACiAJCQkgZGQtPmlwYXRoX2NvbnRyb2wpOwogCiAJLyoKLQkgKiBOb3RlIHRoYXQgcHJpb3IgdG8gdHJ5IDE0IG9yIDE1IG9mIElCLCB0aGUgY3JlZGl0IHNjYWxpbmcKLQkgKiB3YXNuJ3Qgd29ya2luZywgYmVjYXVzZSBpdCB3YXMgc3dhcHBlZCBmb3Igd3JpdGVzIHdpdGggdGhlCi0JICogMSBiaXQgZGVmYXVsdCBsaW5rc3RhdGUgZmllbGQKKwkgKiBzZXQgaW5pdGlhbCBtYXggc2l6ZSBwa3QgSUJDIHdpbGwgc2VuZCwgaW5jbHVkaW5nIElDUkM7IGl0J3MgdGhlCisJICogUElPIGJ1ZmZlciBzaXplIGluIGR3b3JkcywgbGVzcyAxOyBhbHNvIHNlZSBpcGF0aF9zZXRfbXR1KCkKIAkgKi8KKwl2YWwgPSAoZGQtPmlwYXRoX2libWF4bGVuID4+IDIpICsgMTsKKwlpYmMgPSB2YWwgPDwgZGQtPmliY2NfbXBsX3NoaWZ0OwogCi0JLyogaWdub3JlIHBiYyBhbmQgYWxpZ24gd29yZCAqLwotCXZhbCA9IGRkLT5pcGF0aF9waW9zaXplMmsgLSAyICogc2l6ZW9mKHUzMik7Ci0JLyoKLQkgKiBmb3IgSUNSQywgd2hpY2ggd2Ugb25seSBzZW5kIGluIGRpYWcgdGVzdCBwa3QgbW9kZSwgYW5kIHdlCi0JICogZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IGZvciBtdHUKLQkgKi8KLQl2YWwgKz0gMTsKLQkvKgotCSAqIFNldCB0aGUgSUJDIG1heHBrdGxlbmd0aCB0byB0aGUgc2l6ZSBvZiBvdXIgcGlvIGJ1ZmZlcnMgdGhlCi0JICogbWF4cGt0bGVuZ3RoIGlzIGluIHdvcmRzLiAgVGhpcyBpcyAqbm90KiB0aGUgSUIgZGF0YSBNVFUuCi0JICovCi0JaWJjID0gKHZhbCAvIHNpemVvZih1MzIpKSA8PCBJTkZJTklQQVRIX0lCQ0NfTUFYUEtUTEVOX1NISUZUOwotCS8qIGluIEtCICovCisJLyogZmxvd2NvbnRyb2x3YXRlcm1hcmsgaXMgaW4gdW5pdHMgb2YgS0J5dGVzICovCiAJaWJjIHw9IDB4NVVMTCA8PCBJTkZJTklQQVRIX0lCQ0NfRkxPV0NUUkxXQVRFUk1BUktfU0hJRlQ7CiAJLyoKIAkgKiBIb3cgb2Z0ZW4gZmxvd2N0cmwgc2VudC4gIE1vcmUgb3IgbGVzcyBpbiB1c2VjczsgYmFsYW5jZSBhZ2FpbnN0CkBAIC0xOTEsMTAgKzE4MCwxMyBAQAogCS8qCiAJICogV2FudCB0byBzdGFydCBvdXQgd2l0aCBib3RoIExJTktDTUQgYW5kIExJTktJTklUQ01EIGluIE5PUAogCSAqICgwIGFuZCAwKS4gIERvbid0IHB1dCBsaW5raW5pdGNtZCBpbiBpcGF0aF9pYmNjdHJsLCB3YW50IHRoYXQKLQkgKiB0byBzdGF5IGEgTk9QCisJICogdG8gc3RheSBhIE5PUC4gRmxhZyB0aGF0IHdlIGFyZSBkaXNhYmxlZCwgZm9yIHRoZSAodW5saWtlbHkpCisJICogY2FzZSB0aGF0IHNvbWUgcmVjb3ZlcnkgcGF0aCBpcyB0cnlpbmcgdG8gYnJpbmcgdGhlIGxpbmsgdXAKKwkgKiBiZWZvcmUgd2UgYXJlIHJlYWR5LgogCSAqLwogCWliYyB8PSBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSA8PAogCQlJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQ7CisJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0lCX0xJTktfRElTQUJMRUQ7CiAJaXBhdGhfY2RiZyhWRVJCT1NFLCAiV3JpdGluZyAweCVsbHggdG8gaWJjY3RybFxuIiwKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaWJjKTsKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsIGliYyk7CkBAIC0yMjcsMTcgKzIxOSwyNiBAQAogCQlwZC0+cG9ydF9jbnQgPSAxOwogCQkvKiBUaGUgcG9ydCAwIHBrZXkgdGFibGUgaXMgdXNlZCBieSB0aGUgbGF5ZXIgaW50ZXJmYWNlLiAqLwogCQlwZC0+cG9ydF9wa2V5c1swXSA9IElQQVRIX0RFRkFVTFRfUF9LRVk7CisJCXBkLT5wb3J0X3NlcV9jbnQgPSAxOwogCX0KIAlyZXR1cm4gcGQ7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9jaGlwX2ZpcnN0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKLQkJCSAgIHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqKnBkcCkKK3N0YXRpYyBpbnQgaW5pdF9jaGlwX2ZpcnN0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKLQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gTlVMTDsKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkOwogCWludCByZXQgPSAwOwogCXU2NCB2YWw7CiAKKwlzcGluX2xvY2tfaW5pdCgmZGQtPmlwYXRoX2tlcm5lbF90aWRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRkLT5pcGF0aF91c2VyX3RpZF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZC0+aXBhdGhfc2RtYV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGQtPmlwYXRoX2dwaW9fbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRkLT5pcGF0aF9lZXBfc3RfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRkLT5pcGF0aF9zZGVwYl9sb2NrKTsKKwltdXRleF9pbml0KCZkZC0+aXBhdGhfZWVwX2xvY2spOworCiAJLyoKIAkgKiBza2lwIGNmZ3BvcnRzIHN0dWZmIGJlY2F1c2Ugd2UgYXJlIG5vdCBhbGxvY2F0aW5nIG1lbW9yeSwKIAkgKiBhbmQgd2UgZG9uJ3Qgd2FudCBwcm9ibGVtcyBpZiB0aGUgcG9ydGNudCBjaGFuZ2VkIGR1ZSB0bwpAQCAtMjUwLDEyICsyNTEsMTQgQEAKIAllbHNlIGlmIChpcGF0aF9jZmdwb3J0cyA8PSBkZC0+aXBhdGhfcG9ydGNudCkgewogCQlkZC0+aXBhdGhfY2ZncG9ydHMgPSBpcGF0aF9jZmdwb3J0czsKIAkJaXBhdGhfZGJnKCJDb25maWd1cmVkIHRvIHVzZSAldSBwb3J0cyBvdXQgb2YgJXUgaW4gY2hpcFxuIiwKLQkJCSAgZGQtPmlwYXRoX2NmZ3BvcnRzLCBkZC0+aXBhdGhfcG9ydGNudCk7CisJCQkgIGRkLT5pcGF0aF9jZmdwb3J0cywgaXBhdGhfcmVhZF9rcmVnMzIoZGQsCisJCQkgIGRkLT5pcGF0aF9rcmVncy0+a3JfcG9ydGNudCkpOwogCX0gZWxzZSB7CiAJCWRkLT5pcGF0aF9jZmdwb3J0cyA9IGRkLT5pcGF0aF9wb3J0Y250OwogCQlpcGF0aF9kYmcoIlRyaWVkIHRvIGNvbmZpZ3VyZWQgdG8gdXNlICV1IHBvcnRzOyBjaGlwICIKIAkJCSAgIm9ubHkgc3VwcG9ydHMgJXVcbiIsIGlwYXRoX2NmZ3BvcnRzLAotCQkJICBkZC0+aXBhdGhfcG9ydGNudCk7CisJCQkgIGlwYXRoX3JlYWRfa3JlZzMyKGRkLAorCQkJCSAgZGQtPmlwYXRoX2tyZWdzLT5rcl9wb3J0Y250KSk7CiAJfQogCS8qCiAJICogQWxsb2NhdGUgZnVsbCBwb3J0Y250IGFycmF5LCByYXRoZXIgdGhhbiBqdXN0IGNmZ3BvcnRzLCBiZWNhdXNlCkBAIC0yOTUsMTIgKzI5OCw5IEBACiAJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZHBpb3NpemUpOwogCWRkLT5pcGF0aF9waW9zaXplMmsgPSB2YWwgJiB+MFU7CiAJZGQtPmlwYXRoX3Bpb3NpemU0ayA9IHZhbCA+PiAzMjsKLQkvKgotCSAqIE5vdGU6IHRoZSBjaGlwcyBzdXBwb3J0IGEgbWF4aW11bSBNVFUgb2YgNDA5NiwgYnV0IHRoZSBkcml2ZXIKLQkgKiBoYXNuJ3QgaW1wbGVtZW50ZWQgdGhpcyBmZWF0dXJlIHlldCwgc28gc2V0IHRoZSBpbml0aWFsIHZhbHVlCi0JICogdG8gMjA0OC4KLQkgKi8KLQlkZC0+aXBhdGhfaWJtdHUgPSAyMDQ4OworCWlmIChkZC0+aXBhdGhfcGlvc2l6ZTRrID09IDAgJiYgaXBhdGhfbXR1NDA5NikKKwkJaXBhdGhfbXR1NDA5NiA9IDA7IC8qIDRLQiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCAqLworCWRkLT5pcGF0aF9pYm10dSA9IGlwYXRoX210dTQwOTYgPyA0MDk2IDogMjA0ODsKIAl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kcGlvYnVmY250KTsKIAlkZC0+aXBhdGhfcGlvYmNudDJrID0gdmFsICYgfjBVOwogCWRkLT5pcGF0aF9waW9iY250NGsgPSB2YWwgPj4gMzI7CkBAIC0zMjgsNDMgKzMyOCw0NiBAQAogCWVsc2UgaXBhdGhfZGJnKCIldSAyayBwaW9idWZzIEAgJXBcbiIsCiAJCSAgICAgICBkZC0+aXBhdGhfcGlvYmNudDJrLCBkZC0+aXBhdGhfcGlvMmtiYXNlKTsKIAotCXNwaW5fbG9ja19pbml0KCZkZC0+aXBhdGhfdGlkX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRkLT5pcGF0aF9ncGlvX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZkZC0+aXBhdGhfZWVwX3N0X2xvY2spOwotCW11dGV4X2luaXQoJmRkLT5pcGF0aF9lZXBfbG9jayk7Ci0KIGRvbmU6Ci0JKnBkcCA9IHBkOwogCXJldHVybiByZXQ7CiB9CiAKIC8qKgogICogaW5pdF9jaGlwX3Jlc2V0IC0gcmUtaW5pdGlhbGl6ZSBhZnRlciBhIHJlc2V0LCBvciBlbmFibGUKICAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAcGRwOiBvdXRwdXQgZm9yIHBvcnQgZGF0YQogICoKICAqIHNhbml0eSBjaGVjayBhdCBsZWFzdCBzb21lIG9mIHRoZSB2YWx1ZXMgYWZ0ZXIgcmVzZXQsIGFuZAogICogZW5zdXJlIG5vIHJlY2VpdmUgb3IgdHJhbnNtaXQgKGV4cGxpY3RseSwgaW4gY2FzZSByZXNldAogICogZmFpbGVkCiAgKi8KLXN0YXRpYyBpbnQgaW5pdF9jaGlwX3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKLQkJCSAgIHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqKnBkcCkKK3N0YXRpYyBpbnQgaW5pdF9jaGlwX3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKIAl1MzIgcnRtcDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JKnBkcCA9IGRkLT5pcGF0aF9wZFswXTsKLQkvKiBlbnN1cmUgY2hpcCBkb2VzIG5vIHNlbmRzIG9yIHJlY2VpdmVzIHdoaWxlIHdlIHJlLWluaXRpYWxpemUgKi8KLQlkZC0+aXBhdGhfY29udHJvbCA9IGRkLT5pcGF0aF9zZW5kY3RybCA9IGRkLT5pcGF0aF9yY3ZjdHJsID0gMFU7Ci0JaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLCBkZC0+aXBhdGhfcmN2Y3RybCk7CisJLyoKKwkgKiBlbnN1cmUgY2hpcCBkb2VzIG5vIHNlbmRzIG9yIHJlY2VpdmVzLCB0YWlsIHVwZGF0ZXMsIG9yCisJICogcGlvYXZhaWwgdXBkYXRlcyB3aGlsZSB3ZSByZS1pbml0aWFsaXplCisJICovCisJZGQtPmlwYXRoX3JjdmN0cmwgJj0gfigxVUxMIDw8IGRkLT5pcGF0aF9yX3RhaWx1cGRfc2hpZnQpOworCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfcG9ydGNudDsgaSsrKSB7CisJCWNsZWFyX2JpdChkZC0+aXBhdGhfcl9wb3J0ZW5hYmxlX3NoaWZ0ICsgaSwKKwkJCSAgJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKwkJY2xlYXJfYml0KGRkLT5pcGF0aF9yX2ludHJhdmFpbF9zaGlmdCArIGksCisJCQkgICZkZC0+aXBhdGhfcmN2Y3RybCk7CisJfQorCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKKwkJZGQtPmlwYXRoX3JjdmN0cmwpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7CisJZGQtPmlwYXRoX3NlbmRjdHJsID0gMFU7IC8qIG5vIHNkbWEsIGV0YyAqLwogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsIGRkLT5pcGF0aF9zZW5kY3RybCk7Ci0JaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLCBkZC0+aXBhdGhfY29udHJvbCk7CisJaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKIAotCXJ0bXAgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9wb3J0Y250KTsKLQlpZiAoZGQtPmlwYXRoX3BvcnRjbnQgIT0gcnRtcCkKLQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgInBvcnRjbnQgd2FzICV1IGJlZm9yZSAiCi0JCQkgInJlc2V0LCBub3cgJXUsIHVzaW5nIG9yaWdpbmFsXG4iLAotCQkJIGRkLT5pcGF0aF9wb3J0Y250LCBydG1wKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsIDBVTEwpOworCiAJcnRtcCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdnRpZGNudCk7CiAJaWYgKHJ0bXAgIT0gZGQtPmlwYXRoX3JjdnRpZGNudCkKIAkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgInRpZGNudCB3YXMgJXUgYmVmb3JlICIKQEAgLTQ2NywxMCArNDcwLDEwIEBACiAJZGQtPmlwYXRoX3BoeXNzaGFkb3cgPSBhZGRyczsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2NoaXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAotCQkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwgaW50IHJlaW5pdCkKK3N0YXRpYyB2b2lkIGVuYWJsZV9jaGlwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHJlaW5pdCkKIHsKIAl1MzIgdmFsOworCXU2NCByY3ZtYXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKQEAgLTQ4NCwxNyArNDg3LDI4IEBACiAJLyogRW5hYmxlIFBJTyBzZW5kLCBhbmQgdXBkYXRlIG9mIFBJT2F2YWlsIHJlZ3MgdG8gbWVtb3J5LiAqLwogCWRkLT5pcGF0aF9zZW5kY3RybCA9IElORklOSVBBVEhfU19QSU9FTkFCTEUgfAogCQlJTkZJTklQQVRIX1NfUElPQlVGQVZBSUxVUEQ7CisKKwkvKgorCSAqIFNldCB0aGUgUElPIGF2YWlsIHVwZGF0ZSB0aHJlc2hvbGQgdG8gaG9zdCBtZW1vcnkKKwkgKiBvbiBjaGlwcyB0aGF0IHN1cHBvcnQgaXQuCisJICovCisJaWYgKGRkLT5pcGF0aF9waW91cGRfdGhyZXNoKQorCQlkZC0+aXBhdGhfc2VuZGN0cmwgfD0gZGQtPmlwYXRoX3Bpb3VwZF90aHJlc2gKKwkJCTw8IElORklOSVBBVEhfU19VUERUSFJFU0hfU0hJRlQ7CiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwgZGQtPmlwYXRoX3NlbmRjdHJsKTsKIAlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOwogCiAJLyoKLQkgKiBlbmFibGUgcG9ydCAwIHJlY2VpdmUsIGFuZCByZWNlaXZlIGludGVycnVwdC4gIG90aGVyIHBvcnRzCi0JICogZG9uZSBhcyB1c2VyIG9wZW5zIGFuZCBpbml0cyB0aGVtLgorCSAqIEVuYWJsZSBrZXJuZWwgcG9ydHMnIHJlY2VpdmUgYW5kIHJlY2VpdmUgaW50ZXJydXB0LgorCSAqIE90aGVyIHBvcnRzIGRvbmUgYXMgdXNlciBvcGVucyBhbmQgaW5pdHMgdGhlbS4KIAkgKi8KLQlkZC0+aXBhdGhfcmN2Y3RybCA9ICgxVUxMIDw8IGRkLT5pcGF0aF9yX3RhaWx1cGRfc2hpZnQpIHwKLQkJKDFVTEwgPDwgZGQtPmlwYXRoX3JfcG9ydGVuYWJsZV9zaGlmdCkgfAotCQkoMVVMTCA8PCBkZC0+aXBhdGhfcl9pbnRyYXZhaWxfc2hpZnQpOworCXJjdm1hc2sgPSAxVUxMOworCWRkLT5pcGF0aF9yY3ZjdHJsIHw9IChyY3ZtYXNrIDw8IGRkLT5pcGF0aF9yX3BvcnRlbmFibGVfc2hpZnQpIHwKKwkJKHJjdm1hc2sgPDwgZGQtPmlwYXRoX3JfaW50cmF2YWlsX3NoaWZ0KTsKKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9OT0RNQV9SVEFJTCkpCisJCWRkLT5pcGF0aF9yY3ZjdHJsIHw9ICgxVUxMIDw8IGRkLT5pcGF0aF9yX3RhaWx1cGRfc2hpZnQpOworCiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAogCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKIApAQCAtNTA1LDE2ICs1MTksMTYgQEAKIAlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfSU5JVFRFRDsKIAogCS8qCi0JICogaW5pdCBvdXIgc2hhZG93IGNvcGllcyBvZiBoZWFkIGZyb20gdGFpbCB2YWx1ZXMsIGFuZCB3cml0ZQotCSAqIGhlYWQgdmFsdWVzIHRvIG1hdGNoLgorCSAqIEluaXQgb3VyIHNoYWRvdyBjb3BpZXMgb2YgaGVhZCBmcm9tIHRhaWwgdmFsdWVzLAorCSAqIGFuZCB3cml0ZSBoZWFkIHZhbHVlcyB0byBtYXRjaC4KIAkgKi8KIAl2YWwgPSBpcGF0aF9yZWFkX3VyZWczMihkZCwgdXJfcmN2ZWdyaW5kZXh0YWlsLCAwKTsKLQkodm9pZClpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZlZ3JpbmRleGhlYWQsIHZhbCwgMCk7CisJaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2ZWdyaW5kZXhoZWFkLCB2YWwsIDApOwogCiAJLyogSW5pdGlhbGl6ZSBzbyB3ZSBpbnRlcnJ1cHQgb24gbmV4dCBwYWNrZXQgcmVjZWl2ZWQgKi8KLQkodm9pZClpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZoZHJoZWFkLAotCQkJICAgICAgIGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZiB8Ci0JCQkgICAgICAgZGQtPmlwYXRoX3BkWzBdLT5wb3J0X2hlYWQsIDApOworCWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmhkcmhlYWQsCisJCQkgZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmIHwKKwkJCSBkZC0+aXBhdGhfcGRbMF0tPnBvcnRfaGVhZCwgMCk7CiAKIAkvKgogCSAqIGJ5IG5vdyBwaW9hdmFpbCB1cGRhdGVzIHRvIG1lbW9yeSBzaG91bGQgaGF2ZSBvY2N1cnJlZCwgc28KQEAgLTUyMywyNSArNTM3LDI2IEBACiAJICogaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGdlbmVyYXRpb24gYml0IGNvcnJlY3QuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9waW9hdnJlZ3M7IGkrKykgewotCQlfX2xlNjQgdmFsOworCQlfX2xlNjQgcGlvYXZhaWw7CiAKIAkJLyoKIAkJICogQ2hpcCBFcnJhdGEgYnVnIDY2NDE7IGV2ZW4gYW5kIG9kZCBxd29yZHM+MyBhcmUgc3dhcHBlZC4KIAkJICovCiAJCWlmIChpID4gMyAmJiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfU1dBUF9QSU9CVUZTKSkKLQkJCXZhbCA9IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2kgXiAxXTsKKwkJCXBpb2F2YWlsID0gZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaSBeIDFdOwogCQllbHNlCi0JCQl2YWwgPSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYVtpXTsKLQkJZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93W2ldID0gbGU2NF90b19jcHUodmFsKTsKKwkJCXBpb2F2YWlsID0gZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWFbaV07CisJCWRkLT5pcGF0aF9waW9hdmFpbHNoYWRvd1tpXSA9IGxlNjRfdG9fY3B1KHBpb2F2YWlsKSB8CisJCQkofmRkLT5pcGF0aF9waW9hdmFpbGtlcm5lbFtpXSA8PAorCQkJSU5GSU5JUEFUSF9TRU5EUElPQVZBSUxfQlVTWV9TSElGVCk7CiAJfQogCS8qIGNhbiBnZXQgY291bnRlcnMsIHN0YXRzLCBldGMuICovCiAJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX1BSRVNFTlQ7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9ob3VzZWtlZXBpbmcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAotCQkJICAgICBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKipwZHAsIGludCByZWluaXQpCitzdGF0aWMgaW50IGluaXRfaG91c2VrZWVwaW5nKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHJlaW5pdCkKIHsKLQljaGFyIGJvYXJkblszMl07CisJY2hhciBib2FyZG5bNDBdOwogCWludCByZXQgPSAwOwogCiAJLyoKQEAgLTYwMCwxOCArNjE1LDkgQEAKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2Vycm9yY2xlYXIsCiAJCQkgSU5GSU5JUEFUSF9FX1JFU0VUKTsKIAotCWlmIChyZWluaXQpCi0JCXJldCA9IGluaXRfY2hpcF9yZXNldChkZCwgcGRwKTsKLQllbHNlCi0JCXJldCA9IGluaXRfY2hpcF9maXJzdChkZCwgcGRwKTsKLQotCWlmIChyZXQpCi0JCWdvdG8gZG9uZTsKLQotCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlJldmlzaW9uICVsbHggKFBDSSAleCksICV1IHBvcnRzLCAldSB0aWRzLCAiCi0JCSAgICIldSBlZ3J0aWRzXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBkZC0+aXBhdGhfcmV2aXNpb24sCi0JCSAgIGRkLT5pcGF0aF9wY2lyZXYsIGRkLT5pcGF0aF9wb3J0Y250LCBkZC0+aXBhdGhfcmN2dGlkY250LAotCQkgICBkZC0+aXBhdGhfcmN2ZWdyY250KTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZXZpc2lvbiAlbGx4IChQQ0kgJXgpXG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBkZC0+aXBhdGhfcmV2aXNpb24sCisJCSAgIGRkLT5pcGF0aF9wY2lyZXYpOwogCiAJaWYgKCgoZGQtPmlwYXRoX3JldmlzaW9uID4+IElORklOSVBBVEhfUl9TT0ZUV0FSRV9TSElGVCkgJgogCSAgICAgSU5GSU5JUEFUSF9SX1NPRlRXQVJFX01BU0spICE9IElQQVRIX0NISVBfU1dWRVJTSU9OKSB7CkBAIC02NTAsMTAgKzY1NiwzOSBAQAogCiAJaXBhdGhfZGJnKCIlcyIsIGRkLT5pcGF0aF9ib2FyZHZlcnNpb24pOwogCisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJaWYgKHJlaW5pdCkKKwkJcmV0ID0gaW5pdF9jaGlwX3Jlc2V0KGRkKTsKKwllbHNlCisJCXJldCA9IGluaXRfY2hpcF9maXJzdChkZCk7CisKIGRvbmU6CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgdmVyaWZ5X2ludGVycnVwdCh1bnNpZ25lZCBsb25nIG9wYXF1ZSkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSAoc3RydWN0IGlwYXRoX2RldmRhdGEgKikgb3BhcXVlOworCisJaWYgKCFkZCkKKwkJcmV0dXJuOyAvKiBiZWluZyB0b3JuIGRvd24gKi8KKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgaW50ZXJydXB0cywgbGV0IHRoZSB1c2VyIGtub3cgYW5kCisJICogZG9uJ3QgYm90aGVyIGNoZWNraW5nIGFnYWluLgorCSAqLworCWlmIChkZC0+aXBhdGhfaW50X2NvdW50ZXIgPT0gMCkgeworCQlpZiAoIWRkLT5pcGF0aF9mX2ludHJfZmFsbGJhY2soZGQpKQorCQkJZGV2X2VycigmZGQtPnBjaWRldi0+ZGV2LCAiTm8gaW50ZXJydXB0cyBkZXRlY3RlZCwgIgorCQkJCSJub3QgdXNhYmxlLlxuIik7CisJCWVsc2UgLyogcmUtYXJtIHRoZSB0aW1lciB0byBzZWUgaWYgZmFsbGJhY2sgd29ya3MgKi8KKwkJCW1vZF90aW1lcigmZGQtPmlwYXRoX2ludHJjaGtfdGltZXIsIGppZmZpZXMgKyBIWi8yKTsKKwl9IGVsc2UKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJXUgaW50ZXJydXB0cyBhdCB0aW1lciBjaGVja1xuIiwKKwkJCWRkLT5pcGF0aF9pbnRfY291bnRlcik7Cit9CiAKIC8qKgogICogaXBhdGhfaW5pdF9jaGlwIC0gZG8gdGhlIGFjdHVhbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvbiB0aGUgY2hpcApAQCAtNjc2LDExICs3MTEsMTEgQEAKIAl1MzIgdmFsMzIsIGtwaW9idWZzOwogCXUzMiBwaW9idWZzLCB1cG9ydHM7CiAJdTY0IHZhbDsKLQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gTlVMTDsgLyoga2VlcCBnY2M0IGhhcHB5ICovCisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKIAlnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfVVNFUiB8IF9fR0ZQX0NPTVA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJldCA9IGluaXRfaG91c2VrZWVwaW5nKGRkLCAmcGQsIHJlaW5pdCk7CisJcmV0ID0gaW5pdF9ob3VzZWtlZXBpbmcoZGQsIHJlaW5pdCk7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwogCkBAIC03MDAsNyArNzM1LDcgQEAKIAkgKiB3ZSBub3cgdXNlIHJvdXRpbmVzIHRoYXQgYmFja2VuZCBvbnRvIF9fZ2V0X2ZyZWVfcGFnZXMsIHRoZQogCSAqIHJlc3Qgd291bGQgYmUgd2FzdGVkLgogCSAqLwotCWRkLT5pcGF0aF9yY3ZoZHJjbnQgPSBkZC0+aXBhdGhfcmN2ZWdyY250OworCWRkLT5pcGF0aF9yY3ZoZHJjbnQgPSBtYXgoZGQtPmlwYXRoX3AwX3JjdmVncmNudCwgZGQtPmlwYXRoX3JjdmVncmNudCk7CiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJjbnQsCiAJCQkgZGQtPmlwYXRoX3JjdmhkcmNudCk7CiAKQEAgLTczMSw4ICs3NjYsOCBAQAogCWlmIChrcGlvYnVmcyArICh1cG9ydHMgKiBJUEFUSF9NSU5fVVNFUl9QT1JUX0JVRkNOVCkgPiBwaW9idWZzKSB7CiAJCWludCBpID0gKGludCkgcGlvYnVmcyAtCiAJCQkoaW50KSAodXBvcnRzICogSVBBVEhfTUlOX1VTRVJfUE9SVF9CVUZDTlQpOwotCQlpZiAoaSA8IDApCi0JCQlpID0gMDsKKwkJaWYgKGkgPCAxKQorCQkJaSA9IDE7CiAJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJBbGxvY2F0aW5nICVkIFBJTyBidWZzIG9mICIKIAkJCSAiJWQgZm9yIGtlcm5lbCBsZWF2ZXMgdG9vIGZldyBmb3IgJWQgdXNlciBwb3J0cyAiCiAJCQkgIiglZCBlYWNoKTsgdXNpbmcgJXVcbiIsIGtwaW9idWZzLApAQCAtNzUxLDI0ICs3ODYsNDAgQEAKIAkJaXBhdGhfZGJnKCJhbGxvY2F0aW5nICV1IHBidWZzL3BvcnQgbGVhdmVzICV1IHVudXNlZCwgIgogCQkJICAiYWRkIHRvIGtlcm5lbFxuIiwgZGQtPmlwYXRoX3BidWZzcG9ydCwgdmFsMzIpOwogCQlkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmIC09IHZhbDMyOworCQlrcGlvYnVmcyArPSB2YWwzMjsKIAkJaXBhdGhfZGJnKCIldSBwYnVmcy9wb3J0IGxlYXZlcyAldSB1bnVzZWQsIGFkZCB0byBrZXJuZWxcbiIsCiAJCQkgIGRkLT5pcGF0aF9wYnVmc3BvcnQsIHZhbDMyKTsKIAl9Ci0JZGQtPmlwYXRoX2xhc3RwaW9pbmRleCA9IGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWY7CisJZGQtPmlwYXRoX2xhc3RwaW9pbmRleCA9IDA7CisJZGQtPmlwYXRoX2xhc3RwaW9pbmRleGwgPSBkZC0+aXBhdGhfcGlvYmNudDJrOworCWlwYXRoX2NoZ19waW9hdmFpbGtlcm5lbChkZCwgMCwgcGlvYnVmcywgMSk7CiAJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJWQgUElPIGJ1ZnMgZm9yIGtlcm5lbCBvdXQgb2YgJWQgdG90YWwgJXUgIgogCQkgICAiZWFjaCBmb3IgJXUgdXNlciBwb3J0c1xuIiwga3Bpb2J1ZnMsCiAJCSAgIHBpb2J1ZnMsIGRkLT5pcGF0aF9wYnVmc3BvcnQsIHVwb3J0cyk7CisJaWYgKGRkLT5pcGF0aF9waW91cGRfdGhyZXNoKSB7CisJCWlmIChkZC0+aXBhdGhfcGJ1ZnNwb3J0IDwgZGQtPmlwYXRoX3Bpb3VwZF90aHJlc2gpCisJCQlkZC0+aXBhdGhfcGlvdXBkX3RocmVzaCA9IGRkLT5pcGF0aF9wYnVmc3BvcnQ7CisJCWlmIChrcGlvYnVmcyA8IGRkLT5pcGF0aF9waW91cGRfdGhyZXNoKQorCQkJZGQtPmlwYXRoX3Bpb3VwZF90aHJlc2ggPSBrcGlvYnVmczsKKwl9CiAKLQlkZC0+aXBhdGhfZl9lYXJseV9pbml0KGRkKTsKKwlyZXQgPSBkZC0+aXBhdGhfZl9lYXJseV9pbml0KGRkKTsKKwlpZiAocmV0KSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJFYXJseSBpbml0aWFsaXphdGlvbiBmYWlsdXJlXG4iKTsKKwkJZ290byBkb25lOworCX0KKwogCS8qCi0JICogY2FuY2VsIGFueSBwb3NzaWJsZSBhY3RpdmUgc2VuZHMgZnJvbSBlYXJseSBkcml2ZXIgbG9hZC4KKwkgKiBDYW5jZWwgYW55IHBvc3NpYmxlIGFjdGl2ZSBzZW5kcyBmcm9tIGVhcmx5IGRyaXZlciBsb2FkLgogCSAqIEZvbGxvd3MgZWFybHlfaW5pdCBiZWNhdXNlIHNvbWUgY2hpcHMgaGF2ZSB0byBpbml0aWFsaXplCiAJICogUElPIGJ1ZmZlcnMgaW4gZWFybHlfaW5pdCB0byBhdm9pZCBmYWxzZSBwYXJpdHkgZXJyb3JzLgogCSAqLwogCWlwYXRoX2NhbmNlbF9zZW5kcyhkZCwgMCk7CiAKLQkvKiBlYXJseV9pbml0IHNldHMgcmN2aGRyZW50c2l6ZSBhbmQgcmN2aGRyc2l6ZSwgc28gdGhpcyBtdXN0IGJlCi0JICogZG9uZSBhZnRlciBlYXJseV9pbml0ICovCisJLyoKKwkgKiBFYXJseV9pbml0IHNldHMgcmN2aGRyZW50c2l6ZSBhbmQgcmN2aGRyc2l6ZSwgc28gdGhpcyBtdXN0IGJlCisJICogZG9uZSBhZnRlciBlYXJseV9pbml0LgorCSAqLwogCWRkLT5pcGF0aF9oZHJxbGFzdCA9CiAJCWRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplICogKGRkLT5pcGF0aF9yY3ZoZHJjbnQgLSAxKTsKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmVudHNpemUsCkBAIC03ODMsOCArODM0LDggQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLQkodm9pZClpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRwaW9hdmFpbGFkZHIsCi0JCQkgICAgICAgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRwaW9hdmFpbGFkZHIsCisJCQkgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzKTsKIAkvKgogCSAqIHRoaXMgaXMgdG8gZGV0ZWN0IHMvdyBlcnJvcnMsIHdoaWNoIHRoZSBoL3cgd29ya3MgYXJvdW5kIGJ5CiAJICogaWdub3JpbmcgdGhlIGxvdyA2IGJpdHMgb2YgYWRkcmVzcywgaWYgaXQgd2Fzbid0IGFsaWduZWQuCkBAIC04NDMsNTggKzg5NCw2NSBAQAogCS8qIGVuYWJsZSBlcnJvcnMgdGhhdCBhcmUgbWFza2VkLCBhdCBsZWFzdCB0aGlzIGZpcnN0IHRpbWUuICovCiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcm1hc2ssCiAJCQkgfmRkLT5pcGF0aF9tYXNrZWRlcnJzKTsKLQlkZC0+aXBhdGhfZXJyb3JtYXNrID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsCi0JCWRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JtYXNrKTsKKwlkZC0+aXBhdGhfbWFza2VkZXJycyA9IDA7IC8qIGRvbid0IHJlLWVuYWJsZSBpZ25vcmVkIGluIHRpbWVyICovCisJZGQtPmlwYXRoX2Vycm9ybWFzayA9CisJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2Vycm9ybWFzayk7CiAJLyogY2xlYXIgYW55IGludGVycnVwdHMgdXAgdG8gdGhpcyBwb2ludCAoaW50cyBzdGlsbCBub3QgZW5hYmxlZCkgKi8KIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludGNsZWFyLCAtMUxMKTsKIAorCWRkLT5pcGF0aF9mX3RpZHRlbXBsYXRlKGRkKTsKKwogCS8qCiAJICogU2V0IHVwIHRoZSBwb3J0IDAgKGtlcm5lbCkgcmN2aGRyIHEgYW5kIGVnciBUSURzLiAgSWYgZG9pbmcKIAkgKiByZS1pbml0LCB0aGUgc2ltcGxlc3Qgd2F5IHRvIGhhbmRsZSB0aGlzIGlzIHRvIGZyZWUKIAkgKiBleGlzdGluZywgYW5kIHJlLWFsbG9jYXRlLgogCSAqIE5lZWQgdG8gcmUtY3JlYXRlIHJlc3Qgb2YgcG9ydCAwIHBvcnRkYXRhIGFzIHdlbGwuCiAJICovCisJcGQgPSBkZC0+aXBhdGhfcGRbMF07CiAJaWYgKHJlaW5pdCkgewotCQkvKiBBbGxvYyBhbmQgaW5pdCBuZXcgaXBhdGhfcG9ydGRhdGEgZm9yIHBvcnQwLAorCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKm5wZDsKKworCQkvKgorCQkgKiBBbGxvYyBhbmQgaW5pdCBuZXcgaXBhdGhfcG9ydGRhdGEgZm9yIHBvcnQwLAogCQkgKiBUaGVuIGZyZWUgb2xkIHBkLiBDb3VsZCBsZWFkIHRvIGZyYWdtZW50YXRpb24sIGJ1dCBhbHNvCiAJCSAqIG1ha2VzIGxhdGVyIHN1cHBvcnQgZm9yIGhvdC1zd2FwIGVhc2llci4KIAkJICovCi0JCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqbnBkOwogCQlucGQgPSBjcmVhdGVfcG9ydGRhdGEwKGRkKTsKIAkJaWYgKG5wZCkgewogCQkJaXBhdGhfZnJlZV9wZGRhdGEoZGQsIHBkKTsKLQkJCWRkLT5pcGF0aF9wZFswXSA9IHBkID0gbnBkOworCQkJZGQtPmlwYXRoX3BkWzBdID0gbnBkOworCQkJcGQgPSBucGQ7CiAJCX0gZWxzZSB7Ci0JCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHBvcnRkYXRhIGZvciIKLQkJCQkgICAgICAiICBwb3J0IDAsIGZhaWxpbmdcbiIpOworCQkJaXBhdGhfZGV2X2VycihkZCwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwb3J0ZGF0YSIKKwkJCQkgICAgICAiIGZvciBwb3J0IDAsIGZhaWxpbmdcbiIpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KLQlkZC0+aXBhdGhfZl90aWR0ZW1wbGF0ZShkZCk7CiAJcmV0ID0gaXBhdGhfY3JlYXRlX3JjdmhkcnEoZGQsIHBkKTsKLQlpZiAoIXJldCkgewotCQlkZC0+aXBhdGhfaGRycXRhaWxwdHIgPQotCQkJKHZvbGF0aWxlIF9fbGU2NCAqKXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOworCWlmICghcmV0KQogCQlyZXQgPSBjcmVhdGVfcG9ydDBfZWdyKGRkKTsKLQl9Ci0JaWYgKHJldCkKLQkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0IDAgKGtlcm5lbCkgIgorCWlmIChyZXQpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBrZXJuZWwgcG9ydCdzICIKIAkJCSAgICAgICJyY3ZoZHJxIGFuZC9vciBlZ3IgYnVmc1xuIik7CisJCWdvdG8gZG9uZTsKKwl9CiAJZWxzZQotCQllbmFibGVfY2hpcChkZCwgcGQsIHJlaW5pdCk7CisJCWVuYWJsZV9jaGlwKGRkLCByZWluaXQpOwogCi0KLQlpZiAoIXJldCAmJiAhcmVpbml0KSB7Ci0JICAgIC8qIHVzZWQgd2hlbiB3ZSBjbG9zZSBhIHBvcnQsIGZvciBETUEgYWxyZWFkeSBpbiBmbGlnaHQgYXQgY2xvc2UgKi8KKwlpZiAoIXJlaW5pdCkgeworCQkvKgorCQkgKiBVc2VkIHdoZW4gd2UgY2xvc2UgYSBwb3J0LCBmb3IgRE1BIGFscmVhZHkgaW4gZmxpZ2h0CisJCSAqIGF0IGNsb3NlLgorCQkgKi8KIAkJZGQtPmlwYXRoX2R1bW15X2hkcnEgPSBkbWFfYWxsb2NfY29oZXJlbnQoCi0JCQkmZGQtPnBjaWRldi0+ZGV2LCBwZC0+cG9ydF9yY3ZoZHJxX3NpemUsCisJCQkmZGQtPnBjaWRldi0+ZGV2LCBkZC0+aXBhdGhfcGRbMF0tPnBvcnRfcmN2aGRycV9zaXplLAogCQkJJmRkLT5pcGF0aF9kdW1teV9oZHJxX3BoeXMsCiAJCQlnZnBfZmxhZ3MpOwotCQlpZiAoIWRkLT5pcGF0aF9kdW1teV9oZHJxICkgeworCQlpZiAoIWRkLT5pcGF0aF9kdW1teV9oZHJxKSB7CiAJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAogCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSAweCVseCBieXRlcyBmb3IgZHVtbXkgaGRycVxuIiwKLQkJCQlwZC0+cG9ydF9yY3ZoZHJxX3NpemUpOworCQkJCWRkLT5pcGF0aF9wZFswXS0+cG9ydF9yY3ZoZHJxX3NpemUpOwogCQkJLyogZmFsbGJhY2sgdG8ganVzdCAwJ2luZyAqLwogCQkJZGQtPmlwYXRoX2R1bW15X2hkcnFfcGh5cyA9IDBVTDsKIAkJfQpAQCAtOTA2LDcgKzk2NCw3IEBACiAJICovCiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwgMFVMTCk7CiAKLQlpZighZGQtPmlwYXRoX3N0YXRzX3RpbWVyX2FjdGl2ZSkgeworCWlmICghZGQtPmlwYXRoX3N0YXRzX3RpbWVyX2FjdGl2ZSkgewogCQkvKgogCQkgKiBmaXJzdCBpbml0LCBvciBhZnRlciBhbiBhZG1pbiBkaXNhYmxlL2VuYWJsZQogCQkgKiBzZXQgdXAgc3RhdHMgcmV0cmlldmFsIHRpbWVyLCBldmVuIGlmIHdlIGhhZCBlcnJvcnMKQEAgLTkyMiw2ICs5ODAsMTYgQEAKIAkJZGQtPmlwYXRoX3N0YXRzX3RpbWVyX2FjdGl2ZSA9IDE7CiAJfQogCisJLyogU2V0IHVwIFNlbmRETUEgaWYgY2hpcCBzdXBwb3J0cyBpdCAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9IQVNfU0VORF9ETUEpCisJCXJldCA9IHNldHVwX3NkbWEoZGQpOworCisJLyogU2V0IHVwIEhvTCBzdGF0ZSAqLworCWluaXRfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIpOworCWRkLT5pcGF0aF9ob2xfdGltZXIuZnVuY3Rpb24gPSBpcGF0aF9ob2xfZXZlbnQ7CisJZGQtPmlwYXRoX2hvbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGQ7CisJZGQtPmlwYXRoX2hvbF9zdGF0ZSA9IElQQVRIX0hPTF9VUDsKKwogZG9uZToKIAlpZiAoIXJldCkgewogCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0NISVBfUFJFU0VOVDsKQEAgLTkzNCw2ICsxMDAyLDIwIEBACiAJCQkJCSAwVUxMKTsKIAkJCS8qIGNoaXAgaXMgdXNhYmxlOyBtYXJrIGl0IGFzIGluaXRpYWxpemVkICovCiAJCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX0lOSVRURUQ7CisKKwkJCS8qCisJCQkgKiBzZXR1cCB0byB2ZXJpZnkgd2UgZ2V0IGFuIGludGVycnVwdCwgYW5kIGZhbGxiYWNrCisJCQkgKiB0byBhbiBhbHRlcm5hdGUgaWYgbmVjZXNzYXJ5IGFuZCBwb3NzaWJsZQorCQkJICovCisJCQlpZiAoIXJlaW5pdCkgeworCQkJCWluaXRfdGltZXIoJmRkLT5pcGF0aF9pbnRyY2hrX3RpbWVyKTsKKwkJCQlkZC0+aXBhdGhfaW50cmNoa190aW1lci5mdW5jdGlvbiA9CisJCQkJCXZlcmlmeV9pbnRlcnJ1cHQ7CisJCQkJZGQtPmlwYXRoX2ludHJjaGtfdGltZXIuZGF0YSA9CisJCQkJCSh1bnNpZ25lZCBsb25nKSBkZDsKKwkJCX0KKwkJCWRkLT5pcGF0aF9pbnRyY2hrX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFovMjsKKwkJCWFkZF90aW1lcigmZGQtPmlwYXRoX2ludHJjaGtfdGltZXIpOwogCQl9IGVsc2UKIAkJCWlwYXRoX2Rldl9lcnIoZGQsICJObyBpbnRlcnJ1cHRzIGVuYWJsZWQsIGNvdWxkbid0ICIKIAkJCQkgICAgICAic2V0dXAgaW50ZXJydXB0IGFkZHJlc3NcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggOTJlNThjOS4uMWI1OGY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0zMiw2ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgpAQCAtNTksOSArNjAsMTEgQEAKIAlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAogCQkiUmV3cml0ZSBQSU8gYnVmZmVyICV1LCB0byByZWNvdmVyIGZyb20gcGFyaXR5IGVycm9yXG4iLAogCQlwbnVtKTsKLQkqcGJ1ZiA9IGR3Y250KzE7IC8qIG5vIGZsdXNoIHJlcXVpcmVkLCBzaW5jZSBhbHJlYWR5IGluIGZyZWV6ZSAqLwotCXdoaWxlKC0tZHdjbnQpCi0JCSpwYnVmKysgPSAwOworCisJLyogbm8gZmx1c2ggcmVxdWlyZWQsIHNpbmNlIGFscmVhZHkgaW4gZnJlZXplICovCisJd3JpdGVsKGR3Y250ICsgMSwgcGJ1Zik7CisJd2hpbGUgKC0tZHdjbnQpCisJCXdyaXRlbCgwLCBwYnVmKyspOwogfQogCiAvKgpAQCAtNzAsNyArNzMsNyBAQAogICogSWYgcmV3cml0ZSBpcyB0cnVlLCBhbmQgYml0cyBhcmUgc2V0IGluIHRoZSBzZW5kYnVmZmVycm9yIHJlZ2lzdGVycywKICAqIHdlJ2xsIHdyaXRlIHRvIHRoZSBidWZmZXIsIGZvciBlcnJvciByZWNvdmVyeSBvbiBwYXJpdHkgZXJyb3JzLgogICovCi1zdGF0aWMgdm9pZCBpcGF0aF9kaXNhcm1fc2VuZGVycmJ1ZnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgcmV3cml0ZSkKK3ZvaWQgaXBhdGhfZGlzYXJtX3NlbmRlcnJidWZzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHJld3JpdGUpCiB7CiAJdTMyIHBpb2JjbnQ7CiAJdW5zaWduZWQgbG9uZyBzYnVmWzRdOwpAQCAtODQsMTIgKzg3LDE0IEBACiAJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRidWZmZXJlcnJvcik7CiAJc2J1ZlsxXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAogCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IgKyAxKTsKLQlpZiAocGlvYmNudCA+IDEyOCkgeworCWlmIChwaW9iY250ID4gMTI4KQogCQlzYnVmWzJdID0gaXBhdGhfcmVhZF9rcmVnNjQoCiAJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IgKyAyKTsKKwlpZiAocGlvYmNudCA+IDE5MikKIAkJc2J1ZlszXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAogCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGJ1ZmZlcmVycm9yICsgMyk7Ci0JfQorCWVsc2UKKwkJc2J1ZlszXSA9IDA7CiAKIAlpZiAoc2J1ZlswXSB8fCBzYnVmWzFdIHx8IChwaW9iY250ID4gMTI4ICYmIChzYnVmWzJdIHx8IHNidWZbM10pKSkgewogCQlpbnQgaTsKQEAgLTI1NCwyNCArMjU5LDIwIEBACiB9CiAKIC8qIHJldHVybiB0aGUgc3RyaW5ncyBmb3IgdGhlIG1vc3QgY29tbW9uIGxpbmsgc3RhdGVzICovCi1zdGF0aWMgY2hhciAqaWJfbGlua3N0YXRlKHUzMiBsaW5rc3RhdGUpCitzdGF0aWMgY2hhciAqaWJfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTY0IGliY3MpCiB7CiAJY2hhciAqcmV0OworCXUzMiBzdGF0ZTsKIAotCXN3aXRjaCAobGlua3N0YXRlKSB7Ci0JY2FzZSBJUEFUSF9JQlNUQVRFX0lOSVQ6CisJc3RhdGUgPSBpcGF0aF9pYl9zdGF0ZShkZCwgaWJjcyk7CisJaWYgKHN0YXRlID09IGRkLT5pYl9pbml0KQogCQlyZXQgPSAiSW5pdCI7Ci0JCWJyZWFrOwotCWNhc2UgSVBBVEhfSUJTVEFURV9BUk06CisJZWxzZSBpZiAoc3RhdGUgPT0gZGQtPmliX2FybSkKIAkJcmV0ID0gIkFybSI7Ci0JCWJyZWFrOwotCWNhc2UgSVBBVEhfSUJTVEFURV9BQ1RJVkU6CisJZWxzZSBpZiAoc3RhdGUgPT0gZGQtPmliX2FjdGl2ZSkKIAkJcmV0ID0gIkFjdGl2ZSI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJZWxzZQogCQlyZXQgPSAiRG93biI7Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjg2LDEwMyArMjg3LDE3MiBAQAogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAotCQkJCSAgICAgaXBhdGhfZXJyX3QgZXJycywgaW50IG5vcHJpbnQpCisJCQkJICAgICBpcGF0aF9lcnJfdCBlcnJzKQogewotCXU2NCB2YWw7Ci0JdTMyIGx0c3RhdGUsIGxzdGF0ZTsKKwl1MzIgbHRzdGF0ZSwgbHN0YXRlLCBpYnN0YXRlLCBsYXN0bHN0YXRlOworCXUzMiBpbml0ID0gZGQtPmliX2luaXQ7CisJdTMyIGFybSA9IGRkLT5pYl9hcm07CisJdTMyIGFjdGl2ZSA9IGRkLT5pYl9hY3RpdmU7CisJY29uc3QgdTY0IGliY3MgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpOworCisJbHN0YXRlID0gaXBhdGhfaWJfbGlua3N0YXRlKGRkLCBpYmNzKTsgLyogbGlua3N0YXRlICovCisJaWJzdGF0ZSA9IGlwYXRoX2liX3N0YXRlKGRkLCBpYmNzKTsKKwkvKiBsaW5rc3RhdGUgYXQgbGFzdCBpbnRlcnJ1cHQgKi8KKwlsYXN0bHN0YXRlID0gaXBhdGhfaWJfbGlua3N0YXRlKGRkLCBkZC0+aXBhdGhfbGFzdGliY3N0YXQpOworCWx0c3RhdGUgPSBpcGF0aF9pYl9saW5rdHJzdGF0ZShkZCwgaWJjcyk7IC8qIGxpbmt0cmFpbmluZ3RhdGUgKi8KIAogCS8qCi0JICogZXZlbiBpZiBkaWFncyBhcmUgZW5hYmxlZCwgd2Ugd2FudCB0byBub3RpY2UgTElOS0lOSVQsIGV0Yy4KLQkgKiBXZSBqdXN0IGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBMRUQgc3RhdGUsIG9yCi0JICogZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsCisJICogU2luY2UgZ29pbmcgaW50byBhIHJlY292ZXJ5IHN0YXRlIGNhdXNlcyB0aGUgbGluayBzdGF0ZSB0byBnbworCSAqIGRvd24gYW5kIHNpbmNlIHJlY292ZXJ5IGlzIHRyYW5zaXRvcnksIGl0IGlzIGJldHRlciBpZiB3ZSAibWlzcyIKKwkgKiBldmVyIHNlZWluZyB0aGUgbGluayB0cmFpbmluZyBzdGF0ZSBnbyBpbnRvIHJlY292ZXJ5IChpLmUuLAorCSAqIGlnbm9yZSB0aGlzIHRyYW5zaXRpb24gZm9yIGxpbmsgc3RhdGUgc3BlY2lhbCBoYW5kbGluZyBwdXJwb3NlcykKKwkgKiB3aXRob3V0IGV2ZW4gdXBkYXRpbmcgaXBhdGhfbGFzdGliY3N0YXQuCiAJICovCi0JdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjc3RhdHVzKTsKLQlsc3RhdGUgPSB2YWwgJiBJUEFUSF9JQlNUQVRFX01BU0s7CisJaWYgKChsdHN0YXRlID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9SRUNPVkVSUkVUUkFJTikgfHwKKwkgICAgKGx0c3RhdGUgPT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJXQUlUUk1UKSB8fAorCSAgICAobHRzdGF0ZSA9PSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUkVDT1ZFUklETEUpKQorCQlnb3RvIGRvbmU7CiAKIAkvKgotCSAqIHRoaXMgaXMgY29uZnVzaW5nIGVub3VnaCB3aGVuIGl0IGhhcHBlbnMgdGhhdCBJIHdhbnQgdG8gYWx3YXlzIHB1dCBpdAotCSAqIG9uIHRoZSBjb25zb2xlIGFuZCBpbiB0aGUgbG9ncy4gIElmIGl0IHdhcyBhIHJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UsCi0JICogd2UnbGwgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgdGhlIGZsYWdzLCBzbyB3ZSB3b24ndCBwcmludCB0aGlzIHdhcm5pbmcKKwkgKiBpZiBsaW5rc3RhdGUgdHJhbnNpdGlvbnMgaW50byBJTklUIGZyb20gYW55IG9mIHRoZSB2YXJpb3VzIGRvd24KKwkgKiBzdGF0ZXMsIG9yIGlmIGl0IHRyYW5zaXRpb25zIGZyb20gYW55IG9mIHRoZSB1cCAoSU5JVCBvciBiZXR0ZXIpCisJICogc3RhdGVzIGludG8gYW55IG9mIHRoZSBkb3duIHN0YXRlcyAoZXhjZXB0IGxpbmsgcmVjb3ZlcnkpLCB0aGVuCisJICogY2FsbCB0aGUgY2hpcC1zcGVjaWZpYyBjb2RlIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9ucy4KIAkgKi8KLQlpZiAoKGxzdGF0ZSAhPSBJUEFUSF9JQlNUQVRFX0FSTSAmJiBsc3RhdGUgIT0gSVBBVEhfSUJTVEFURV9BQ1RJVkUpCi0JCSYmIChkZC0+aXBhdGhfZmxhZ3MgJiAoSVBBVEhfTElOS0FSTUVEIHwgSVBBVEhfTElOS0FDVElWRSkpKSB7Ci0JCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJMaW5rIHN0YXRlIGNoYW5nZWQgZnJvbSAlcyB0byAlc1xuIiwKLQkJCQkgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBUk1FRCkgPyAiQVJNIiA6ICJBQ1RJVkUiLAotCQkJCSBpYl9saW5rc3RhdGUobHN0YXRlKSk7Ci0JCS8qCi0JCSAqIEZsdXNoIGFsbCBxdWV1ZWQgc2VuZHMgd2hlbiBsaW5rIHdlbnQgdG8gRE9XTiBvciBJTklULAotCQkgKiB0byBiZSBzdXJlIHRoYXQgdGhleSBkb24ndCBibG9jayBTTUEgYW5kIG90aGVyIE1BRCBwYWNrZXRzCi0JCSAqLwotCQlpcGF0aF9jYW5jZWxfc2VuZHMoZGQsIDEpOwotCX0KLQllbHNlIGlmIChsc3RhdGUgPT0gSVBBVEhfSUJTVEFURV9JTklUIHx8IGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0FSTSB8fAotCSAgICBsc3RhdGUgPT0gSVBBVEhfSUJTVEFURV9BQ1RJVkUpIHsKLQkJLyoKLQkJICogb25seSBwcmludCBhdCBTTUEgaWYgdGhlcmUgaXMgYSBjaGFuZ2UsIGRlYnVnIGlmIG5vdAotCQkgKiAoc29tZXRpbWVzIHdlIHdhbnQgdG8ga25vdyB0aGF0LCB1c3VhbGx5IG5vdCkuCi0JCSAqLwotCQlpZiAobHN0YXRlID09ICgodW5zaWduZWQpIGRkLT5pcGF0aF9sYXN0aWJjc3RhdAotCQkJICAgICAgICYgSVBBVEhfSUJTVEFURV9NQVNLKSkgewotCQkJaXBhdGhfZGJnKCJTdGF0dXMgY2hhbmdlIGludHIgYnV0IG5vIGNoYW5nZSAoJXMpXG4iLAotCQkJCSAgaWJfbGlua3N0YXRlKGxzdGF0ZSkpOworCWlmIChsc3RhdGUgPj0gSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfSU5JVCAmJgorCQlsYXN0bHN0YXRlID09IElORklOSVBBVEhfSUJDU19MX1NUQVRFX0RPV04pIHsKKwkJLyogdHJhbnNpdGlvbmVkIHRvIFVQICovCisJCWlmIChkZC0+aXBhdGhfZl9pYl91cGRvd24oZGQsIDEsIGliY3MpKSB7CisJCQkvKiBsaW5rIGNhbWUgdXAsIHNvIHdlIG11c3Qgbm8gbG9uZ2VyIGJlIGRpc2FibGVkICovCisJCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfklQQVRIX0lCX0xJTktfRElTQUJMRUQ7CisJCQlpcGF0aF9jZGJnKExJTktWRVJCLCAiTGlua1VwIGhhbmRsZWQsIHNraXBwZWRcbiIpOworCQkJZ290byBza2lwX2liY2hhbmdlOyAvKiBjaGlwLWNvZGUgaGFuZGxlZCAqLwogCQl9Ci0JCWVsc2UKLQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVuaXQgJXUgbGluayBzdGF0ZSAlcywgbGFzdCAiCi0JCQkJICAgIndhcyAlc1xuIiwgZGQtPmlwYXRoX3VuaXQsCi0JCQkJICAgaWJfbGlua3N0YXRlKGxzdGF0ZSksCi0JCQkJICAgaWJfbGlua3N0YXRlKCh1bnNpZ25lZCkKLQkJCQkJCWRkLT5pcGF0aF9sYXN0aWJjc3RhdAotCQkJCQkJJiBJUEFUSF9JQlNUQVRFX01BU0spKTsKKwl9IGVsc2UgaWYgKChsYXN0bHN0YXRlID49IElORklOSVBBVEhfSUJDU19MX1NUQVRFX0lOSVQgfHwKKwkJKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0ZPUkNFX05PVElGWSkpICYmCisJCWx0c3RhdGUgPD0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0NGR1dBSVRSTVQgJiYKKwkJbHRzdGF0ZSAhPSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQKSB7CisJCWludCBoYW5kbGVkOworCQloYW5kbGVkID0gZGQtPmlwYXRoX2ZfaWJfdXBkb3duKGRkLCAwLCBpYmNzKTsKKwkJZGQtPmlwYXRoX2ZsYWdzICY9IH5JUEFUSF9JQl9GT1JDRV9OT1RJRlk7CisJCWlmIChoYW5kbGVkKSB7CisJCQlpcGF0aF9jZGJnKExJTktWRVJCLCAiTGlua0Rvd24gaGFuZGxlZCwgc2tpcHBlZFxuIik7CisJCQlnb3RvIHNraXBfaWJjaGFuZ2U7IC8qIGNoaXAtY29kZSBoYW5kbGVkICovCisJCX0KIAl9Ci0JZWxzZSB7Ci0JCWxzdGF0ZSA9IGRkLT5pcGF0aF9sYXN0aWJjc3RhdCAmIElQQVRIX0lCU1RBVEVfTUFTSzsKLQkJaWYgKGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0lOSVQgfHwKLQkJICAgIGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0FSTSB8fAotCQkgICAgbHN0YXRlID09IElQQVRIX0lCU1RBVEVfQUNUSVZFKQotCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5pdCAldSBsaW5rIHN0YXRlIGRvd24iCi0JCQkJICAgIiAoc3RhdGUgMHgleCksIGZyb20gJXNcbiIsCi0JCQkJICAgZGQtPmlwYXRoX3VuaXQsCi0JCQkJICAgKHUzMil2YWwgJiBJUEFUSF9JQlNUQVRFX01BU0ssCi0JCQkJICAgaWJfbGlua3N0YXRlKGxzdGF0ZSkpOwotCQllbHNlCi0JCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJVbml0ICV1IGxpbmsgc3RhdGUgY2hhbmdlZCAiCi0JCQkJICAgInRvIDB4JXggZnJvbSBkb3duICgleClcbiIsCi0JCQkJICAgZGQtPmlwYXRoX3VuaXQsICh1MzIpIHZhbCwgbHN0YXRlKTsKKworCS8qCisJICogU2lnbmlmaWNhbnQgZW5vdWdoIHRvIGFsd2F5cyBwcmludCBhbmQgZ2V0IGludG8gbG9ncywgaWYgaXQgd2FzCisJICogdW5leHBlY3RlZC4gIElmIGl0IHdhcyBhIHJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UsIHdlJ2xsIGhhdmUKKwkgKiBhbHJlYWR5IGNsZWFyZWQgdGhlIGZsYWdzLCBzbyB3ZSB3b24ndCBwcmludCB0aGlzIHdhcm5pbmcKKwkgKi8KKwlpZiAoKGlic3RhdGUgIT0gYXJtICYmIGlic3RhdGUgIT0gYWN0aXZlKSAmJgorCSAgICAoZGQtPmlwYXRoX2ZsYWdzICYgKElQQVRIX0xJTktBUk1FRCB8IElQQVRIX0xJTktBQ1RJVkUpKSkgeworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiTGluayBzdGF0ZSBjaGFuZ2VkIGZyb20gJXMgIgorCQkJICJ0byAlc1xuIiwgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBUk1FRCkgPworCQkJICJBUk0iIDogIkFDVElWRSIsIGliX2xpbmtzdGF0ZShkZCwgaWJjcykpOwogCX0KLQlsdHN0YXRlID0gKHZhbCA+PiBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpICYKLQkJSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0s7Ci0JbHN0YXRlID0gKHZhbCA+PiBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSAmCi0JCUlORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSzsKIAogCWlmIChsdHN0YXRlID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMQUNUSVZFIHx8CiAJICAgIGx0c3RhdGUgPT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1BPTExRVUlFVCkgewotCQl1MzIgbGFzdF9sdHN0YXRlOwotCisJCXUzMiBsYXN0bHRzOworCQlsYXN0bHRzID0gaXBhdGhfaWJfbGlua3Ryc3RhdGUoZGQsIGRkLT5pcGF0aF9sYXN0aWJjc3RhdCk7CiAJCS8qCi0JCSAqIElnbm9yZSBjeWNsaW5nIGJhY2sgYW5kIGZvcnRoIGZyb20gUG9sbGluZy5BY3RpdmUKLQkJICogdG8gUG9sbGluZy5RdWlldCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgb3RoZXIgZW5kIG9mCi0JCSAqIHRoZSBsaW5rIHRvIGNvbWUgdXAuIFdlIHdpbGwgY3ljbGUgYmFjayBhbmQgZm9ydGgKLQkJICogYmV0d2VlbiB0aGVtIGlmIG5vIGNhYmxlIGlzIHBsdWdnZWQgaW4sCi0JCSAqIHRoZSBvdGhlciBkZXZpY2UgaXMgcG93ZXJlZCBvZmYgb3IgZGlzYWJsZWQsIGV0Yy4KKwkJICogSWdub3JlIGN5Y2xpbmcgYmFjayBhbmQgZm9ydGggZnJvbSBQb2xsaW5nLkFjdGl2ZSB0bworCQkgKiBQb2xsaW5nLlF1aWV0IHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsKKwkJICogdG8gY29tZSB1cCwgZXhjZXB0IHRvIHRyeSBhbmQgZGVjaWRlIGlmIHdlIGFyZSBjb25uZWN0ZWQKKwkJICogdG8gYSBsaXZlIElCIGRldmljZSBvciBub3QuICBXZSB3aWxsIGN5Y2xlIGJhY2sgYW5kCisJCSAqIGZvcnRoIGJldHdlZW4gdGhlbSBpZiBubyBjYWJsZSBpcyBwbHVnZ2VkIGluLCB0aGUgb3RoZXIKKwkJICogZGV2aWNlIGlzIHBvd2VyZWQgb2ZmIG9yIGRpc2FibGVkLCBldGMuCiAJCSAqLwotCQlsYXN0X2x0c3RhdGUgPSAoZGQtPmlwYXRoX2xhc3RpYmNzdGF0ID4+Ci0JCQkJSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKQotCQkJJiBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTSzsKLQkJaWYgKGxhc3RfbHRzdGF0ZSA9PSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUE9MTEFDVElWRQotCQkgICAgfHwgbGFzdF9sdHN0YXRlID09Ci0JCSAgICBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfUE9MTFFVSUVUKSB7Ci0JCQlpZiAoZGQtPmlwYXRoX2licG9sbGNudCA+IDQwKSB7CisJCWlmIChsYXN0bHRzID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMQUNUSVZFIHx8CisJCSAgICBsYXN0bHRzID09IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9QT0xMUVVJRVQpIHsKKwkJCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0FVVE9ORUdfSU5QUk9HKSAmJgorCQkJICAgICAoKytkZC0+aXBhdGhfaWJwb2xsY250ID09IDQwKSkgewogCQkJCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9OT0NBQkxFOwogCQkJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PQogCQkJCQlJUEFUSF9TVEFUVVNfSUJfTk9DQUJMRTsKLQkJCX0gZWxzZQotCQkJCWRkLT5pcGF0aF9pYnBvbGxjbnQrKzsKKwkJCQlpcGF0aF9jZGJnKExJTktWRVJCLCAiU2V0IE5PQ0FCTEVcbiIpOworCQkJfQorCQkJaXBhdGhfY2RiZyhMSU5LVkVSQiwgIlBPTEwgY2hhbmdlIHRvICVzICgleClcbiIsCisJCQkJaXBhdGhfaWJjc3RhdHVzX3N0cltsdHN0YXRlXSwgaWJzdGF0ZSk7CiAJCQlnb3RvIHNraXBfaWJjaGFuZ2U7CiAJCX0KIAl9Ci0JZGQtPmlwYXRoX2licG9sbGNudCA9IDA7CS8qIHNvbWUgc3RhdGUgb3RoZXIgdGhhbiAyIG9yIDMgKi8KKworCWRkLT5pcGF0aF9pYnBvbGxjbnQgPSAwOyAvKiBub3QgcG9sbCosIG5vdyAqLwogCWlwYXRoX3N0YXRzLnNwc19pYmxpbmsrKzsKLQlpZiAobHRzdGF0ZSAhPSBJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQKSB7CisKKwlpZiAoaWJzdGF0ZSAhPSBpbml0ICYmIGRkLT5pcGF0aF9sYXN0bGlua3JlY292ICYmIGlwYXRoX2xpbmtyZWNvdmVyeSkgeworCQl1NjQgbGlua3JlY292OworCQlsaW5rcmVjb3YgPSBpcGF0aF9zbmFwX2NudHIoZGQsCisJCQlkZC0+aXBhdGhfY3JlZ3MtPmNyX2libGlua2VycnJlY292Y250KTsKKwkJaWYgKGxpbmtyZWNvdiAhPSBkZC0+aXBhdGhfbGFzdGxpbmtyZWNvdikgeworCQkJaXBhdGhfZGJnKCJJQiBsaW5rcmVjb3YgdXAgJUx4ICglcyAlcykgcmVjb3YgJUx1XG4iLAorCQkJCWliY3MsIGliX2xpbmtzdGF0ZShkZCwgaWJjcyksCisJCQkJaXBhdGhfaWJjc3RhdHVzX3N0cltsdHN0YXRlXSwKKwkJCQlsaW5rcmVjb3YpOworCQkJLyogYW5kIG5vIG1vcmUgdW50aWwgYWN0aXZlIGFnYWluICovCisJCQlkZC0+aXBhdGhfbGFzdGxpbmtyZWNvdiA9IDA7CisJCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRkLCBJUEFUSF9JQl9MSU5LRE9XTik7CisJCQlnb3RvIHNraXBfaWJjaGFuZ2U7CisJCX0KKwl9CisKKwlpZiAoaWJzdGF0ZSA9PSBpbml0IHx8IGlic3RhdGUgPT0gYXJtIHx8IGlic3RhdGUgPT0gYWN0aXZlKSB7CisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0lCX05PQ0FCTEU7CisJCWlmIChpYnN0YXRlID09IGluaXQgfHwgaWJzdGF0ZSA9PSBhcm0pIHsKKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0lCX1JFQURZOworCQkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpCisJCQkJc2lnbmFsX2liX2V2ZW50KGRkLCBJQl9FVkVOVF9QT1JUX0VSUik7CisJCX0KKwkJaWYgKGlic3RhdGUgPT0gYXJtKSB7CisJCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS0FSTUVEOworCQkJZGQtPmlwYXRoX2ZsYWdzICY9IH4oSVBBVEhfTElOS1VOSyB8CisJCQkJSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LRE9XTiB8CisJCQkJSVBBVEhfTElOS0FDVElWRSB8IElQQVRIX05PQ0FCTEUpOworCQkJaXBhdGhfaG9sX2Rvd24oZGQpOworCQl9IGVsc2UgIGlmIChpYnN0YXRlID09IGluaXQpIHsKKwkJCS8qCisJCQkgKiBzZXQgSU5JVCBhbmQgRE9XTi4gIERvd24gaXMgY2hlY2tlZCBieQorCQkJICogbW9zdCBvZiB0aGUgb3RoZXIgY29kZSwgYnV0IElOSVQgaXMKKwkJCSAqIHVzZWZ1bCB0byBrbm93IGluIGEgZmV3IHBsYWNlcy4KKwkJCSAqLworCQkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktJTklUIHwKKwkJCQlJUEFUSF9MSU5LRE9XTjsKKwkJCWRkLT5pcGF0aF9mbGFncyAmPSB+KElQQVRIX0xJTktVTksgfAorCQkJCUlQQVRIX0xJTktBUk1FRCB8IElQQVRIX0xJTktBQ1RJVkUgfAorCQkJCUlQQVRIX05PQ0FCTEUpOworCQkJaXBhdGhfaG9sX2Rvd24oZGQpOworCQl9IGVsc2UgeyAgLyogYWN0aXZlICovCisJCQlkZC0+aXBhdGhfbGFzdGxpbmtyZWNvdiA9IGlwYXRoX3NuYXBfY250cihkZCwKKwkJCQlkZC0+aXBhdGhfY3JlZ3MtPmNyX2libGlua2VycnJlY292Y250KTsKKwkJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PQorCQkJCUlQQVRIX1NUQVRVU19JQl9SRUFEWSB8IElQQVRIX1NUQVRVU19JQl9DT05GOworCQkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktBQ1RJVkU7CisJCQlkZC0+aXBhdGhfZmxhZ3MgJj0gfihJUEFUSF9MSU5LVU5LIHwgSVBBVEhfTElOS0lOSVQKKwkJCQl8IElQQVRIX0xJTktET1dOIHwgSVBBVEhfTElOS0FSTUVEIHwKKwkJCQlJUEFUSF9OT0NBQkxFKTsKKwkJCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9IQVNfU0VORF9ETUEpCisJCQkJaXBhdGhfcmVzdGFydF9zZG1hKGRkKTsKKwkJCXNpZ25hbF9pYl9ldmVudChkZCwgSUJfRVZFTlRfUE9SVF9BQ1RJVkUpOworCQkJLyogTEVEIGFjdGl2ZSBub3QgaGFuZGxlZCBpbiBjaGlwIF9mX3VwZG93biAqLworCQkJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCBsc3RhdGUsIGx0c3RhdGUpOworCQkJaXBhdGhfaG9sX3VwKGRkKTsKKwkJfQorCisJCS8qCisJCSAqIHByaW50IGFmdGVyIHdlJ3ZlIGFscmVhZHkgZG9uZSB0aGUgd29yaywgc28gYXMgbm90IHRvCisJCSAqIGRlbGF5IHRoZSBzdGF0ZSBjaGFuZ2VzIGFuZCBub3RpZmljYXRpb25zLCBmb3IgZGVidWdnaW5nCisJCSAqLworCQlpZiAobHN0YXRlID09IGxhc3Rsc3RhdGUpCisJCQlpcGF0aF9jZGJnKExJTktWRVJCLCAiVW5jaGFuZ2VkIGZyb20gbGFzdDogJXMgIgorCQkJCSIoJXgpXG4iLCBpYl9saW5rc3RhdGUoZGQsIGliY3MpLCBpYnN0YXRlKTsKKwkJZWxzZQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5pdCAldTogbGluayB1cCB0byAlcyAlcyAoJXgpXG4iLAorCQkJCSAgZGQtPmlwYXRoX3VuaXQsIGliX2xpbmtzdGF0ZShkZCwgaWJjcyksCisJCQkJICBpcGF0aF9pYmNzdGF0dXNfc3RyW2x0c3RhdGVdLCAgaWJzdGF0ZSk7CisJfSBlbHNlIHsgLyogZG93biAqLwogCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FDVElWRSkKIAkJCXNpZ25hbF9pYl9ldmVudChkZCwgSUJfRVZFTlRfUE9SVF9FUlIpOwogCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS0RPV047CkBAIC0zOTEsNjkgKzQ2MSwyOCBAQAogCQkJCSAgICAgSVBBVEhfTElOS0FSTUVEKTsKIAkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfSUJfUkVBRFk7CiAJCWRkLT5pcGF0aF9sbGlfY291bnRlciA9IDA7Ci0JCWlmICghbm9wcmludCkgewotCQkJaWYgKCgoZGQtPmlwYXRoX2xhc3RpYmNzdGF0ID4+Ci0JCQkgICAgICBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSAmCi0JCQkgICAgIElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSykKLQkJCSAgICA9PSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9BQ1RJVkUpCi0JCQkJLyogaWYgZnJvbSB1cCB0byBkb3duIGJlIG1vcmUgdm9jYWwgKi8KLQkJCQlpcGF0aF9jZGJnKFZFUkJPU0UsCi0JCQkJCSAgICJVbml0ICV1IGxpbmsgbm93IGRvd24gKCVzKVxuIiwKLQkJCQkJICAgZGQtPmlwYXRoX3VuaXQsCi0JCQkJCSAgIGlwYXRoX2liY3N0YXR1c19zdHJbbHRzdGF0ZV0pOwotCQkJZWxzZQotCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVuaXQgJXUgbGluayBpcyAiCi0JCQkJCSAgICJkb3duICglcylcbiIsIGRkLT5pcGF0aF91bml0LAotCQkJCQkgICBpcGF0aF9pYmNzdGF0dXNfc3RyW2x0c3RhdGVdKTsKLQkJfQogCi0JCWRkLT5pcGF0aF9mX3NldGV4dGxlZChkZCwgbHN0YXRlLCBsdHN0YXRlKTsKLQl9IGVsc2UgaWYgKCh2YWwgJiBJUEFUSF9JQlNUQVRFX01BU0spID09IElQQVRIX0lCU1RBVEVfQUNUSVZFKSB7Ci0JCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9MSU5LQUNUSVZFOwotCQlkZC0+aXBhdGhfZmxhZ3MgJj0KLQkJCX4oSVBBVEhfTElOS1VOSyB8IElQQVRIX0xJTktJTklUIHwgSVBBVEhfTElOS0RPV04gfAotCQkJICBJUEFUSF9MSU5LQVJNRUQgfCBJUEFUSF9OT0NBQkxFKTsKLQkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfSUJfTk9DQUJMRTsKLQkJKmRkLT5pcGF0aF9zdGF0dXNwIHw9Ci0JCQlJUEFUSF9TVEFUVVNfSUJfUkVBRFkgfCBJUEFUSF9TVEFUVVNfSUJfQ09ORjsKLQkJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCBsc3RhdGUsIGx0c3RhdGUpOwotCQlzaWduYWxfaWJfZXZlbnQoZGQsIElCX0VWRU5UX1BPUlRfQUNUSVZFKTsKLQl9IGVsc2UgaWYgKCh2YWwgJiBJUEFUSF9JQlNUQVRFX01BU0spID09IElQQVRIX0lCU1RBVEVfSU5JVCkgewotCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FDVElWRSkKLQkJCXNpZ25hbF9pYl9ldmVudChkZCwgSUJfRVZFTlRfUE9SVF9FUlIpOwotCQkvKgotCQkgKiBzZXQgSU5JVCBhbmQgRE9XTi4gIERvd24gaXMgY2hlY2tlZCBieSBtb3N0IG9mIHRoZSBvdGhlcgotCQkgKiBjb2RlLCBidXQgSU5JVCBpcyB1c2VmdWwgdG8ga25vdyBpbiBhIGZldyBwbGFjZXMuCi0JCSAqLwotCQlkZC0+aXBhdGhfZmxhZ3MgfD0gSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LRE9XTjsKLQkJZGQtPmlwYXRoX2ZsYWdzICY9Ci0JCQl+KElQQVRIX0xJTktVTksgfCBJUEFUSF9MSU5LQUNUSVZFIHwgSVBBVEhfTElOS0FSTUVECi0JCQkgIHwgSVBBVEhfTk9DQUJMRSk7Ci0JCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+KElQQVRIX1NUQVRVU19JQl9OT0NBQkxFCi0JCQkJCXwgSVBBVEhfU1RBVFVTX0lCX1JFQURZKTsKLQkJZGQtPmlwYXRoX2Zfc2V0ZXh0bGVkKGRkLCBsc3RhdGUsIGx0c3RhdGUpOwotCX0gZWxzZSBpZiAoKHZhbCAmIElQQVRIX0lCU1RBVEVfTUFTSykgPT0gSVBBVEhfSUJTVEFURV9BUk0pIHsKLQkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpCi0JCQlzaWduYWxfaWJfZXZlbnQoZGQsIElCX0VWRU5UX1BPUlRfRVJSKTsKLQkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0xJTktBUk1FRDsKLQkJZGQtPmlwYXRoX2ZsYWdzICY9Ci0JCQl+KElQQVRIX0xJTktVTksgfCBJUEFUSF9MSU5LRE9XTiB8IElQQVRIX0xJTktJTklUIHwKLQkJCSAgSVBBVEhfTElOS0FDVElWRSB8IElQQVRIX05PQ0FCTEUpOwotCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfihJUEFUSF9TVEFUVVNfSUJfTk9DQUJMRQotCQkJCQl8IElQQVRIX1NUQVRVU19JQl9SRUFEWSk7Ci0JCWRkLT5pcGF0aF9mX3NldGV4dGxlZChkZCwgbHN0YXRlLCBsdHN0YXRlKTsKLQl9IGVsc2UgewotCQlpZiAoIW5vcHJpbnQpCi0JCQlpcGF0aF9kYmcoIklCc3RhdHVzY2hhbmdlIHVuaXQgJXU6ICVzICgleClcbiIsCi0JCQkJICBkZC0+aXBhdGhfdW5pdCwKLQkJCQkgIGlwYXRoX2liY3N0YXR1c19zdHJbbHRzdGF0ZV0sIGx0c3RhdGUpOworCQlpZiAobGFzdGxzdGF0ZSAhPSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9ET1dOKQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5pdCAldSBsaW5rIHN0YXRlIGRvd24gIgorCQkJCSAgICIoc3RhdGUgMHgleCksIGZyb20gJXNcbiIsCisJCQkJICAgZGQtPmlwYXRoX3VuaXQsIGxzdGF0ZSwKKwkJCQkgICBpYl9saW5rc3RhdGUoZGQsIGRkLT5pcGF0aF9sYXN0aWJjc3RhdCkpOworCQllbHNlCisJCQlpcGF0aF9jZGJnKExJTktWRVJCLCAiVW5pdCAldSBsaW5rIHN0YXRlIGNoYW5nZWQgIgorCQkJCSAgICJ0byAlcyAoMHgleCkgZnJvbSBkb3duICgleClcbiIsCisJCQkJICAgZGQtPmlwYXRoX3VuaXQsCisJCQkJICAgaXBhdGhfaWJjc3RhdHVzX3N0cltsdHN0YXRlXSwKKwkJCQkgICBpYnN0YXRlLCBsYXN0bHN0YXRlKTsKIAl9CisKIHNraXBfaWJjaGFuZ2U6Ci0JZGQtPmlwYXRoX2xhc3RpYmNzdGF0ID0gdmFsOworCWRkLT5pcGF0aF9sYXN0aWJjc3RhdCA9IGliY3M7Citkb25lOgorCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX3N1cHBfbXNncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCi0JCQkgICAgIHVuc2lnbmVkIHN1cHBfbXNncywgY2hhciAqbXNnLCBpbnQgbXNnc3opCisJCQkgICAgIHVuc2lnbmVkIHN1cHBfbXNncywgY2hhciAqbXNnLCB1MzIgbXNnc3opCiB7CiAJLyoKIAkgKiBQcmludCB0aGUgbWVzc2FnZSB1bmxlc3MgaXQncyBpYmMgc3RhdHVzIGNoYW5nZSBvbmx5LCB3aGljaApAQCAtNDYxLDEyICs0OTAsMTkgQEAKIAkgKi8KIAlpZiAoZGQtPmlwYXRoX2xhc3RlcnJvciAmIH5JTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEKSB7CiAJCWludCBpc2VycjsKLQkJaXNlcnIgPSBpcGF0aF9kZWNvZGVfZXJyKG1zZywgbXNnc3osCisJCWlwYXRoX2Vycl90IG1hc2s7CisJCWlzZXJyID0gaXBhdGhfZGVjb2RlX2VycihkZCwgbXNnLCBtc2dzeiwKIAkJCQkJIGRkLT5pcGF0aF9sYXN0ZXJyb3IgJgogCQkJCQkgfklORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQpOwotCQlpZiAoZGQtPmlwYXRoX2xhc3RlcnJvciAmCi0JCQl+KElORklOSVBBVEhfRV9SUkNWRUdSRlVMTCB8Ci0JCQlJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgfCBJTkZJTklQQVRIX0VfUEtURVJSUykpCisKKwkJbWFzayA9IElORklOSVBBVEhfRV9SUkNWRUdSRlVMTCB8IElORklOSVBBVEhfRV9SUkNWSERSRlVMTCB8CisJCQlJTkZJTklQQVRIX0VfUEtURVJSUyB8IElORklOSVBBVEhfRV9TRE1BRElTQUJMRUQ7CisKKwkJLyogaWYgd2UncmUgaW4gZGVidWcsIHRoZW4gZG9uJ3QgbWFzayBTRE1BRElTQUJMRUQgbXNncyAqLworCQlpZiAoaXBhdGhfZGVidWcgJiBfX0lQQVRIX0RCRykKKwkJCW1hc2sgJj0gfklORklOSVBBVEhfRV9TRE1BRElTQUJMRUQ7CisKKwkJaWYgKGRkLT5pcGF0aF9sYXN0ZXJyb3IgJiB+bWFzaykKIAkJCWlwYXRoX2Rldl9lcnIoZGQsICJTdXBwcmVzc2VkICV1IG1lc3NhZ2VzIGZvciAiCiAJCQkJICAgICAgImZhc3QtcmVwZWF0aW5nIGVycm9ycyAoJXMpICglbGx4KVxuIiwKIAkJCQkgICAgICBzdXBwX21zZ3MsIG1zZywKQEAgLTQ5Myw3ICs1MjksNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaGFuZGxlX2ZyZXF1ZW50X2Vycm9ycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCiAJCQkJICAgICAgIGlwYXRoX2Vycl90IGVycnMsIGNoYXIgKm1zZywKLQkJCQkgICAgICAgaW50IG1zZ3N6LCBpbnQgKm5vcHJpbnQpCisJCQkJICAgICAgIHUzMiBtc2dzeiwgaW50ICpub3ByaW50KQogewogCXVuc2lnbmVkIGxvbmcgbmM7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV4dG1zZ190aW1lOwpAQCAtNTIzLDE5ICs1NTksMTI1IEBACiAJcmV0dXJuIHN1cHBfbXNnczsKIH0KIAorc3RhdGljIHZvaWQgaGFuZGxlX3NkbWFfZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaXBhdGhfZXJyX3QgZXJycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBleHBlY3RlZDsKKworCWlmIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfREJHKSB7CisJCWNoYXIgbXNnWzEyOF07CisJCWlwYXRoX2RlY29kZV9lcnIoZGQsIG1zZywgc2l6ZW9mIG1zZywgZXJycyAmCisJCQlJTkZJTklQQVRIX0VfU0RNQUVSUlMpOworCQlpcGF0aF9kYmcoImVycm9ycyAlbHggKCVzKVxuIiwgKHVuc2lnbmVkIGxvbmcpZXJycywgbXNnKTsKKwl9CisJaWYgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9WRVJCREJHKSB7CisJCXVuc2lnbmVkIGxvbmcgdGwsIGhkLCBzdGF0dXMsIGxlbmdlbjsKKwkJdGwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1hdGFpbCk7CisJCWhkID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWhlYWQpOworCQlzdGF0dXMgPSBpcGF0aF9yZWFkX2tyZWc2NChkZAorCQkJLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFzdGF0dXMpOworCQlsZW5nZW4gPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwKKwkJCWRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWxlbmdlbik7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInNkbWEgdGwgMHglbHggaGQgMHglbHggc3RhdHVzIDB4JWx4ICIKKwkJCSJsZW5nZW4gMHglbHhcbiIsIHRsLCBoZCwgc3RhdHVzLCBsZW5nZW4pOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisJX19zZXRfYml0KElQQVRIX1NETUFfRElTQUJMRUQsICZkZC0+aXBhdGhfc2RtYV9zdGF0dXMpOworCWV4cGVjdGVkID0gdGVzdF9iaXQoSVBBVEhfU0RNQV9BQk9SVElORywgJmRkLT5pcGF0aF9zZG1hX3N0YXR1cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCWlmICghZXhwZWN0ZWQpCisJCWlwYXRoX2NhbmNlbF9zZW5kcyhkZCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9zZG1hX2ludHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1NjQgaXN0YXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXhwZWN0ZWQ7CisKKwlpZiAoKGlzdGF0ICYgSU5GSU5JUEFUSF9JX1NETUFJTlQpICYmCisJICAgICF0ZXN0X2JpdChJUEFUSF9TRE1BX1NIVVRET1dOLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKSkKKwkJaXBhdGhfc2RtYV9pbnRyKGRkKTsKKworCWlmIChpc3RhdCAmIElORklOSVBBVEhfSV9TRE1BRElTQUJMRUQpIHsKKwkJZXhwZWN0ZWQgPSB0ZXN0X2JpdChJUEFUSF9TRE1BX0FCT1JUSU5HLAorCQkJJmRkLT5pcGF0aF9zZG1hX3N0YXR1cyk7CisJCWlwYXRoX2RiZygiJXMgU0RtYURpc2FibGVkIGludHJcbiIsCisJCQlleHBlY3RlZCA/ICJleHBlY3RlZCIgOiAidW5leHBlY3RlZCIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCQlfX3NldF9iaXQoSVBBVEhfU0RNQV9ESVNBQkxFRCwgJmRkLT5pcGF0aF9zZG1hX3N0YXR1cyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFleHBlY3RlZCkKKwkJCWlwYXRoX2NhbmNlbF9zZW5kcyhkZCwgMSk7CisJCWlmICghdGVzdF9iaXQoSVBBVEhfU0RNQV9TSFVURE9XTiwgJmRkLT5pcGF0aF9zZG1hX3N0YXR1cykpCisJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZkZC0+aXBhdGhfc2RtYV9hYm9ydF90YXNrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2hkcnFfZnVsbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IGNoa2VycnBrdHMgPSAwOworCXUzMiBoZCwgdGw7CisJdTMyIGk7CisKKwlpcGF0aF9zdGF0cy5zcHNfaGRycWZ1bGwrKzsKKwlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFtpXTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQkvKgorCQkJICogRm9yIGtlcm5lbCByZWNlaXZlIHF1ZXVlcywgd2UganVzdCB3YW50IHRvIGtub3cKKwkJCSAqIGlmIHRoZXJlIGFyZSBwYWNrZXRzIGluIHRoZSBxdWV1ZSB0aGF0IHdlIGNhbgorCQkJICogcHJvY2Vzcy4KKwkJCSAqLworCQkJaWYgKHBkLT5wb3J0X2hlYWQgIT0gaXBhdGhfZ2V0X2hkcnF0YWlsKHBkKSkKKwkJCQljaGtlcnJwa3RzIHw9IDEgPDwgaTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBpZiB1c2VyIGNvbnRleHQgaXMgbm90IG9wZW4gKi8KKwkJaWYgKCFwZCB8fCAhcGQtPnBvcnRfY250KQorCQkJY29udGludWU7CisKKwkJLyogRG9uJ3QgcmVwb3J0IHRoZSBzYW1lIHBvaW50IG11bHRpcGxlIHRpbWVzLiAqLworCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTk9ETUFfUlRBSUwpCisJCQl0bCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJ0YWlsLCBpKTsKKwkJZWxzZQorCQkJdGwgPSBpcGF0aF9nZXRfcmN2aGRydGFpbChwZCk7CisJCWlmICh0bCA9PSBwZC0+cG9ydF9sYXN0cmN2aGRycXRhaWwpCisJCQljb250aW51ZTsKKworCQloZCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJoZWFkLCBpKTsKKwkJaWYgKGhkID09ICh0bCArIDEpIHx8ICghaGQgJiYgdGwgPT0gZGQtPmlwYXRoX2hkcnFsYXN0KSkgeworCQkJcGQtPnBvcnRfbGFzdHJjdmhkcnF0YWlsID0gdGw7CisJCQlwZC0+cG9ydF9oZHJxZnVsbCsrOworCQkJLyogZmx1c2ggaGRycWZ1bGwgc28gdGhhdCBwb2xsKCkgc2VlcyBpdCAqLworCQkJd21iKCk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkLT5wb3J0X3dhaXQpOworCQl9CisJfQorCisJcmV0dXJuIGNoa2VycnBrdHM7Cit9CisKIHN0YXRpYyBpbnQgaGFuZGxlX2Vycm9ycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2Vycl90IGVycnMpCiB7CiAJY2hhciBtc2dbMTI4XTsKIAl1NjQgaWdub3JlX3RoaXNfdGltZSA9IDA7Ci0JaW50IGksIGlzZXJyID0gMDsKKwl1NjQgaXNlcnIgPSAwOwogCWludCBjaGtlcnJwa3RzID0gMCwgbm9wcmludCA9IDA7CiAJdW5zaWduZWQgc3VwcF9tc2dzOwogCWludCBsb2dfaWR4OwogCi0Jc3VwcF9tc2dzID0gaGFuZGxlX2ZyZXF1ZW50X2Vycm9ycyhkZCwgZXJycywgbXNnLCBzaXplb2YgbXNnLCAmbm9wcmludCk7CisJLyoKKwkgKiBkb24ndCByZXBvcnQgZXJyb3JzIHRoYXQgYXJlIG1hc2tlZCwgZWl0aGVyIGF0IGluaXQKKwkgKiAobm90IHNldCBpbiBpcGF0aF9lcnJvcm1hc2spLCBvciB0ZW1wb3JhcmlseSAoc2V0IGluCisJICogaXBhdGhfbWFza2VkZXJycykKKwkgKi8KKwllcnJzICY9IGRkLT5pcGF0aF9lcnJvcm1hc2sgJiB+ZGQtPmlwYXRoX21hc2tlZGVycnM7CiAKLQkvKiBkb24ndCByZXBvcnQgZXJyb3JzIHRoYXQgYXJlIG1hc2tlZCAqLwotCWVycnMgJj0gfmRkLT5pcGF0aF9tYXNrZWRlcnJzOworCXN1cHBfbXNncyA9IGhhbmRsZV9mcmVxdWVudF9lcnJvcnMoZGQsIGVycnMsIG1zZywgKHUzMilzaXplb2YgbXNnLAorCQkmbm9wcmludCk7CiAKIAkvKiBkbyB0aGVzZSBmaXJzdCwgdGhleSBhcmUgbW9zdCBpbXBvcnRhbnQgKi8KIAlpZiAoZXJycyAmIElORklOSVBBVEhfRV9IQVJEV0FSRSkgewpAQCAtNTUwLDYgKzY5Miw5IEBACiAJCX0KIAl9CiAKKwlpZiAoZXJycyAmIElORklOSVBBVEhfRV9TRE1BRVJSUykKKwkJaGFuZGxlX3NkbWFfZXJyb3JzKGRkLCBlcnJzKTsKKwogCWlmICghbm9wcmludCAmJiAoZXJycyAmIH5kZC0+aXBhdGhfZV9iaXRzZXh0YW50KSkKIAkJaXBhdGhfZGV2X2VycihkZCwgImVycm9yIGludGVycnVwdCB3aXRoIHVua25vd24gZXJyb3JzICIKIAkJCSAgICAgICIlbGx4IHNldFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKQEAgLTU4MCwxOCArNzI1LDE5IEBACiAJCSAqIG9uZXMgb24gdGhpcyBwYXJ0aWN1bGFyIGludGVycnVwdCwgd2hpY2ggYWxzbyBpc24ndCBncmVhdAogCQkgKi8KIAkJZGQtPmlwYXRoX21hc2tlZGVycnMgfD0gZGQtPmlwYXRoX2xhc3RlcnJvciB8IGVycnM7CisKIAkJZGQtPmlwYXRoX2Vycm9ybWFzayAmPSB+ZGQtPmlwYXRoX21hc2tlZGVycnM7CiAJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXJyb3JtYXNrLAotCQkJZGQtPmlwYXRoX2Vycm9ybWFzayk7Ci0JCXNfaXNlcnIgPSBpcGF0aF9kZWNvZGVfZXJyKG1zZywgc2l6ZW9mIG1zZywKLQkJCWRkLT5pcGF0aF9tYXNrZWRlcnJzKTsKKwkJCQkgZGQtPmlwYXRoX2Vycm9ybWFzayk7CisJCXNfaXNlcnIgPSBpcGF0aF9kZWNvZGVfZXJyKGRkLCBtc2csIHNpemVvZiBtc2csCisJCQkJCSAgIGRkLT5pcGF0aF9tYXNrZWRlcnJzKTsKIAogCQlpZiAoZGQtPmlwYXRoX21hc2tlZGVycnMgJgotCQkJfihJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfAotCQkJSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMIHwgSU5GSU5JUEFUSF9FX1BLVEVSUlMpKQorCQkgICAgfihJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfAorCQkgICAgICBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgfCBJTkZJTklQQVRIX0VfUEtURVJSUykpCiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiVGVtcG9yYXJpbHkgZGlzYWJsaW5nICIKIAkJCSAgICAiZXJyb3IocykgJWxseCByZXBvcnRpbmc7IHRvbyBmcmVxdWVudCAoJXMpXG4iLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGQtPmlwYXRoX21hc2tlZGVycnMsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgZGQtPmlwYXRoX21hc2tlZGVycnMsCiAJCQkJbXNnKTsKIAkJZWxzZSB7CiAJCQkvKgpAQCAtNjMzLDI2ICs3NzksNDMgQEAKIAkJCSAgSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCk7CiAJfQogCi0JLyogbGlrZWx5IGR1ZSB0byBjYW5jZWwsIHNvIHN1cHByZXNzICovCisJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfU0VORFNQRUNJQUxUUklHR0VSKSB7CisJCWRkLT5pcGF0aF9zcGVjdHJpZ2dlcmhpdCsrOworCQlpcGF0aF9kYmcoIiVsdSBzcGVjaWFsIHRyaWdnZXIgaGl0c1xuIiwKKwkJCWRkLT5pcGF0aF9zcGVjdHJpZ2dlcmhpdCk7CisJfQorCisJLyogbGlrZWx5IGR1ZSB0byBjYW5jZWw7IHNvIHN1cHByZXNzIG1lc3NhZ2UgdW5sZXNzIHZlcmJvc2UgKi8KIAlpZiAoKGVycnMgJiAoSU5GSU5JUEFUSF9FX1NQS1RMRU4gfCBJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCkpICYmCiAJCWRkLT5pcGF0aF9sYXN0Y2FuY2VsID4gamlmZmllcykgewotCQlpcGF0aF9kYmcoIlN1cHByZXNzZWQgYXJtbGF1bmNoL3Nwa3RsZW4gYWZ0ZXIgZXJyb3Igc2VuZCBjYW5jZWxcbiIpOworCQkvKiBhcm1sYXVuY2ggdGFrZXMgcHJlY2VkZW5jZTsgaXQgb2Z0ZW4gY2F1c2VzIGJvdGguICovCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwKKwkJCSJTdXBwcmVzc2VkICVzIGVycm9yICglbGx4KSBhZnRlciBzZW5kYnVmIGNhbmNlbFxuIiwKKwkJCShlcnJzICYgIElORklOSVBBVEhfRV9TUElPQVJNTEFVTkNIKSA/CisJCQkiYXJtbGF1bmNoIiA6ICJzZW5kcGt0bGVuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyllcnJzKTsKIAkJZXJycyAmPSB+KElORklOSVBBVEhfRV9TUElPQVJNTEFVTkNIIHwgSU5GSU5JUEFUSF9FX1NQS1RMRU4pOwogCX0KIAogCWlmICghZXJycykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIW5vcHJpbnQpCisJaWYgKCFub3ByaW50KSB7CisJCWlwYXRoX2Vycl90IG1hc2s7CiAJCS8qCi0JCSAqIHRoZSBvbmVzIHdlIG1hc2sgb2ZmIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBiZWxvdyBvciBhYm92ZQorCQkgKiBUaGUgb25lcyB3ZSBtYXNrIG9mZiBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYmVsb3cKKwkJICogb3IgYWJvdmUuICBBbHNvIG1hc2sgU0RNQURJU0FCTEVEIGJ5IGRlZmF1bHQgYXMgaXQKKwkJICogaXMgdG9vIGNoYXR0eS4KIAkJICovCi0JCWlwYXRoX2RlY29kZV9lcnIobXNnLCBzaXplb2YgbXNnLAotCQkJCSBlcnJzICYgfihJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEIHwKLQkJCQkJICBJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfAotCQkJCQkgIElORklOSVBBVEhfRV9SUkNWSERSRlVMTCB8Ci0JCQkJCSAgSU5GSU5JUEFUSF9FX0hBUkRXQVJFKSk7Ci0JZWxzZQorCQltYXNrID0gSU5GSU5JUEFUSF9FX0lCU1RBVFVTQ0hBTkdFRCB8CisJCQlJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfCBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgfAorCQkJSU5GSU5JUEFUSF9FX0hBUkRXQVJFIHwgSU5GSU5JUEFUSF9FX1NETUFESVNBQkxFRDsKKworCQkvKiBpZiB3ZSdyZSBpbiBkZWJ1ZywgdGhlbiBkb24ndCBtYXNrIFNETUFESVNBQkxFRCBtc2dzICovCisJCWlmIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfREJHKQorCQkJbWFzayAmPSB+SU5GSU5JUEFUSF9FX1NETUFESVNBQkxFRDsKKworCQlpcGF0aF9kZWNvZGVfZXJyKGRkLCBtc2csIHNpemVvZiBtc2csIGVycnMgJiB+bWFzayk7CisJfSBlbHNlCiAJCS8qIHNvIHdlIGRvbid0IG5lZWQgaWYgKCFub3ByaW50KSBhdCBzdHJsY2F0J3MgYmVsb3cgKi8KIAkJKm1zZyA9IDA7CiAKQEAgLTY3Nyw0MCArODQwLDggQEAKIAkgKiBmYXN0X3N0YXRzLCBubyBtb3JlIHRoYW4gZXZlcnkgNSBzZWNvbmRzLCB1c2VyIHBvcnRzIGdldCBwcmludGVkCiAJICogb24gY2xvc2UKIAkgKi8KLQlpZiAoZXJycyAmIElORklOSVBBVEhfRV9SUkNWSERSRlVMTCkgewotCQl1MzIgaGQsIHRsOwotCQlpcGF0aF9zdGF0cy5zcHNfaGRycWZ1bGwrKzsKLQkJZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7Ci0JCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkW2ldOwotCQkJaWYgKGkgPT0gMCkgewotCQkJCWhkID0gcGQtPnBvcnRfaGVhZDsKLQkJCQl0bCA9ICh1MzIpIGxlNjRfdG9fY3B1KAotCQkJCQkqZGQtPmlwYXRoX2hkcnF0YWlscHRyKTsKLQkJCX0gZWxzZSBpZiAocGQgJiYgcGQtPnBvcnRfY250ICYmCi0JCQkJICAgcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIpIHsKLQkJCQkvKgotCQkJCSAqIGRvbid0IHJlcG9ydCBzYW1lIHBvaW50IG11bHRpcGxlIHRpbWVzLAotCQkJCSAqIGV4Y2VwdCBrZXJuZWwKLQkJCQkgKi8KLQkJCQl0bCA9ICoodTY0ICopIHBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOwotCQkJCWlmICh0bCA9PSBwZC0+cG9ydF9sYXN0cmN2aGRycXRhaWwpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWhkID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcmhlYWQsCi0JCQkJCQkgICAgICAgaSk7Ci0JCQl9IGVsc2UKLQkJCQljb250aW51ZTsKLQkJCWlmIChoZCA9PSAodGwgKyAxKSB8fAotCQkJICAgICghaGQgJiYgdGwgPT0gZGQtPmlwYXRoX2hkcnFsYXN0KSkgewotCQkJCWlmIChpID09IDApCi0JCQkJCWNoa2VycnBrdHMgPSAxOwotCQkJCXBkLT5wb3J0X2xhc3RyY3ZoZHJxdGFpbCA9IHRsOwotCQkJCXBkLT5wb3J0X2hkcnFmdWxsKys7Ci0JCQkJLyogZmx1c2ggaGRycWZ1bGwgc28gdGhhdCBwb2xsKCkgc2VlcyBpdCAqLwotCQkJCXdtYigpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGQtPnBvcnRfd2FpdCk7Ci0JCQl9Ci0JCX0KLQl9CisJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwpCisJCWNoa2VycnBrdHMgfD0gaGFuZGxlX2hkcnFfZnVsbChkZCk7CiAJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwpIHsKIAkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFswXTsKIApAQCAtNzIxLDkgKzg1Miw4IEBACiAJCSAqIHZzIHVzZXIpCiAJCSAqLwogCQlpcGF0aF9zdGF0cy5zcHNfZXRpZGZ1bGwrKzsKLQkJaWYgKHBkLT5wb3J0X2hlYWQgIT0KLQkJICAgICh1MzIpIGxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKQotCQkJY2hrZXJycGt0cyA9IDE7CisJCWlmIChwZC0+cG9ydF9oZWFkICE9IGlwYXRoX2dldF9oZHJxdGFpbChwZCkpCisJCQljaGtlcnJwa3RzIHw9IDE7CiAJfQogCiAJLyoKQEAgLTc0MSwxNiArODcxLDEzIEBACiAJCWRkLT5pcGF0aF9mbGFncyAmPSB+KElQQVRIX0xJTktVTksgfCBJUEFUSF9MSU5LSU5JVAogCQkJCSAgICAgfCBJUEFUSF9MSU5LQVJNRUQgfCBJUEFUSF9MSU5LQUNUSVZFKTsKIAkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfSUJfUkVBRFk7Ci0JCWlmICghbm9wcmludCkgewotCQkJdTY0IHN0ID0gaXBhdGhfcmVhZF9rcmVnNjQoCi0JCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjc3RhdHVzKTsKIAotCQkJaXBhdGhfZGJnKCJMb3N0IGxpbmssIGxpbmsgbm93IGRvd24gKCVzKVxuIiwKLQkJCQkgIGlwYXRoX2liY3N0YXR1c19zdHJbc3QgJiAweGZdKTsKLQkJfQorCQlpcGF0aF9kYmcoIkxvc3QgbGluaywgbGluayBub3cgZG93biAoJXMpXG4iLAorCQkJaXBhdGhfaWJjc3RhdHVzX3N0cltpcGF0aF9yZWFkX2tyZWc2NChkZCwKKwkJCWRkLT5pcGF0aF9rcmVncy0+a3JfaWJjc3RhdHVzKSAmIDB4Zl0pOwogCX0KIAlpZiAoZXJycyAmIElORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQpCi0JCWhhbmRsZV9lX2lic3RhdHVzY2hhbmdlZChkZCwgZXJycywgbm9wcmludCk7CisJCWhhbmRsZV9lX2lic3RhdHVzY2hhbmdlZChkZCwgZXJycyk7CiAKIAlpZiAoZXJycyAmIElORklOSVBBVEhfRV9SRVNFVCkgewogCQlpZiAoIW5vcHJpbnQpCkBAIC03NjUsOSArODkyLDYgQEAKIAlpZiAoIW5vcHJpbnQgJiYgKm1zZykgewogCQlpZiAoaXNlcnIpCiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiJXMgZXJyb3JcbiIsIG1zZyk7Ci0JCWVsc2UKLQkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICIlcyBwYWNrZXQgcHJvYmxlbXNcbiIsCi0JCQkJbXNnKTsKIAl9CiAJaWYgKGRkLT5pcGF0aF9zdGF0ZV93YW50ZWQgJiBkZC0+aXBhdGhfZmxhZ3MpIHsKIAkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiZHJpdmVyIHdhbnRlZCBzdGF0ZSAleCwgaWZsYWdzIG5vdyAleCwgIgpAQCAtNzc5LDcgKzkwMyw2IEBACiAJcmV0dXJuIGNoa2VycnBrdHM7CiB9CiAKLQogLyoKICAqIHRyeSB0byBjbGVhbnVwIGFzIG11Y2ggYXMgcG9zc2libGUgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZSBnb25lCiAgKiB3cm9uZyB3aGlsZSBpbiBmcmVlemUgbW9kZSwgc3VjaCBhcyBwaW8gYnVmZmVycyBiZWluZyB3cml0dGVuIGJ5IHVzZXIKQEAgLTc5Niw4ICs5MTksNyBAQAogdm9pZCBpcGF0aF9jbGVhcl9mcmVlemUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCWludCBpLCBpbTsKLQlfX2xlNjQgdmFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IHZhbDsKIAogCS8qIGRpc2FibGUgZXJyb3IgaW50ZXJydXB0cywgdG8gYXZvaWQgY29uZnVzaW9uICovCiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcm1hc2ssIDBVTEwpOwpAQCAtODE2LDE0ICs5MzgsNyBAQAogCQkJIGRkLT5pcGF0aF9jb250cm9sKTsKIAogCS8qIGVuc3VyZSBwaW8gYXZhaWwgdXBkYXRlcyBjb250aW51ZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOwotCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCi0JCSBkZC0+aXBhdGhfc2VuZGN0cmwgJiB+SU5GSU5JUEFUSF9TX1BJT0JVRkFWQUlMVVBEKTsKLQlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKLQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAotCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7Ci0JaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKKwlpcGF0aF9mb3JjZV9waW9fYXZhaWxfdXBkYXRlKGRkKTsKIAogCS8qCiAJICogV2UganVzdCBlbmFibGVkIHBpb2F2YWlsdXBkYXRlLCBzbyBkbWEgY29weSBpcyBhbG1vc3QgY2VydGFpbmx5CkBAIC04MzEsMTAgKzk0NiwxMyBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfcGlvYXZyZWdzOyBpKyspIHsKIAkJLyogZGVhbCB3aXRoIDYxMTAgY2hpcCBidWcgKi8KLQkJaW0gPSBpID4gMyA/IGkgXiAxIDogaTsKKwkJaW0gPSAoaSA+IDMgJiYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1NXQVBfUElPQlVGUykpID8KKwkJCWkgXiAxIDogaTsKIAkJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsICgweDEwMDAgLyBzaXplb2YodTY0KSkgKyBpbSk7Ci0JCWRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2ldID0gZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93W2ldCi0JCQk9IGxlNjRfdG9fY3B1KHZhbCk7CisJCWRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hW2ldID0gY3B1X3RvX2xlNjQodmFsKTsKKwkJZGQtPmlwYXRoX3Bpb2F2YWlsc2hhZG93W2ldID0gdmFsIHwKKwkJCSh+ZGQtPmlwYXRoX3Bpb2F2YWlsa2VybmVsW2ldIDw8CisJCQlJTkZJTklQQVRIX1NFTkRQSU9BVkFJTF9CVVNZX1NISUZUKTsKIAl9CiAKIAkvKgpAQCAtOTUwLDcgKzEwNjgsNyBAQAogICogcHJvY2VzcyB3YXMgd2FpdGluZyBmb3IgYSBwYWNrZXQgdG8gYXJyaXZlLCBhbmQgZGlkbid0IHdhbnQKICAqIHRvIHBvbGwKICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX3VyY3Yoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgaXN0YXQpCitzdGF0aWMgdm9pZCBoYW5kbGVfdXJjdihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU2NCBpc3RhdCkKIHsKIAl1NjQgcG9ydHI7CiAJaW50IGk7CkBAIC05NjYsMTIgKzEwODQsMTMgQEAKIAkgKiBhbmQgaXBhdGhfcG9sbF9uZXh0KCkuLi4KIAkgKi8KIAlybWIoKTsKLQlwb3J0ciA9ICgoaXN0YXQgPj4gSU5GSU5JUEFUSF9JX1JDVkFWQUlMX1NISUZUKSAmCi0JCSBkZC0+aXBhdGhfaV9yY3ZhdmFpbF9tYXNrKQotCQl8ICgoaXN0YXQgPj4gSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkgJgotCQkgICBkZC0+aXBhdGhfaV9yY3Z1cmdfbWFzayk7CisJcG9ydHIgPSAoKGlzdGF0ID4+IGRkLT5pcGF0aF9pX3JjdmF2YWlsX3NoaWZ0KSAmCisJCSBkZC0+aXBhdGhfaV9yY3ZhdmFpbF9tYXNrKSB8CisJCSgoaXN0YXQgPj4gZGQtPmlwYXRoX2lfcmN2dXJnX3NoaWZ0KSAmCisJCSBkZC0+aXBhdGhfaV9yY3Z1cmdfbWFzayk7CiAJZm9yIChpID0gMTsgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbaV07CisKIAkJaWYgKHBvcnRyICYgKDEgPDwgaSkgJiYgcGQgJiYgcGQtPnBvcnRfY250KSB7CiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsCiAJCQkJCSAgICAgICAmcGQtPnBvcnRfZmxhZykpIHsKQEAgLTk4OCw3ICsxMTA3LDcgQEAKIAl9CiAJaWYgKHJjdmRpbnQpIHsKIAkJLyogb25seSB3YW50IHRvIHRha2Ugb25lIGludGVycnVwdCwgc28gdHVybiBvZmYgdGhlIHJjdgotCQkgKiBpbnRlcnJ1cHQgZm9yIGFsbCB0aGUgcG9ydHMgdGhhdCB3ZSBkaWQgdGhlIHdha2V1cCBvbgorCQkgKiBpbnRlcnJ1cHQgZm9yIGFsbCB0aGUgcG9ydHMgdGhhdCB3ZSBzZXQgdGhlIHJjdl93YWl0aW5nCiAJCSAqIChidXQgbmV2ZXIgZm9yIGtlcm5lbCBwb3J0KQogCQkgKi8KIAkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLApAQCAtOTk5LDEyICsxMTE4LDExIEBACiBpcnFyZXR1cm5fdCBpcGF0aF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGF0YTsKLQl1MzIgaXN0YXQsIGNoazByY3YgPSAwOworCXU2NCBpc3RhdCwgY2hrMHJjdiA9IDA7CiAJaXBhdGhfZXJyX3QgZXN0YXQgPSAwOwogCWlycXJldHVybl90IHJldDsKIAlzdGF0aWMgdW5zaWduZWQgdW5leHBlY3RlZCA9IDA7Ci0Jc3RhdGljIGNvbnN0IHUzMiBwb3J0MHJiaXRzID0gKDFVPDxJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpIHwKLQkJICgxVTw8SU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCk7CisJdTY0IGtwb3J0cmJpdHM7CiAKIAlpcGF0aF9zdGF0cy5zcHNfaW50cysrOwogCkBAIC0xMDUzLDE3ICsxMTcxLDE3IEBACiAKIAlpZiAodW5saWtlbHkoaXN0YXQgJiB+ZGQtPmlwYXRoX2lfYml0c2V4dGFudCkpCiAJCWlwYXRoX2Rldl9lcnIoZGQsCi0JCQkgICAgICAiaW50ZXJydXB0IHdpdGggdW5rbm93biBpbnRlcnJ1cHRzICV4IHNldFxuIiwKLQkJCSAgICAgIGlzdGF0ICYgKHUzMikgfiBkZC0+aXBhdGhfaV9iaXRzZXh0YW50KTsKLQllbHNlCi0JCWlwYXRoX2NkYmcoVkVSQk9TRSwgImludHIgc3RhdD0weCV4XG4iLCBpc3RhdCk7CisJCQkgICAgICAiaW50ZXJydXB0IHdpdGggdW5rbm93biBpbnRlcnJ1cHRzICVMeCBzZXRcbiIsCisJCQkgICAgICBpc3RhdCAmIH5kZC0+aXBhdGhfaV9iaXRzZXh0YW50KTsKKwllbHNlIGlmIChpc3RhdCAmIH5JTkZJTklQQVRIX0lfRVJST1IpIC8qIGVycm9ycyBkbyBvd24gcHJpbnRpbmcgKi8KKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiaW50ciBzdGF0PTB4JUx4XG4iLCBpc3RhdCk7CiAKLQlpZiAodW5saWtlbHkoaXN0YXQgJiBJTkZJTklQQVRIX0lfRVJST1IpKSB7CisJaWYgKGlzdGF0ICYgSU5GSU5JUEFUSF9JX0VSUk9SKSB7CiAJCWlwYXRoX3N0YXRzLnNwc19lcnJpbnRzKys7CiAJCWVzdGF0ID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsCiAJCQkJCSAgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcnN0YXR1cyk7CiAJCWlmICghZXN0YXQpCi0JCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiZXJyb3IgaW50ZXJydXB0ICgleCksICIKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJlcnJvciBpbnRlcnJ1cHQgKCVMeCksICIKIAkJCQkgImJ1dCBubyBlcnJvciBiaXRzIHNldCFcbiIsIGlzdGF0KTsKIAkJZWxzZSBpZiAoZXN0YXQgPT0gLTFMTCkKIAkJCS8qCkBAIC0xMDczLDkgKzExOTEsNyBAQAogCQkJaXBhdGhfZGV2X2VycihkZCwgIlJlYWQgb2YgZXJyb3Igc3RhdHVzIGZhaWxlZCAiCiAJCQkJICAgICAgIihhbGwgYml0cyBzZXQpOyBpZ25vcmluZ1xuIik7CiAJCWVsc2UKLQkJCWlmIChoYW5kbGVfZXJyb3JzKGRkLCBlc3RhdCkpCi0JCQkJLyogZm9yY2UgY2FsbGluZyBpcGF0aF9rcmVjZWl2ZSgpICovCi0JCQkJY2hrMHJjdiA9IDE7CisJCQljaGswcmN2IHw9IGhhbmRsZV9lcnJvcnMoZGQsIGVzdGF0KTsKIAl9CiAKIAlpZiAoaXN0YXQgJiBJTkZJTklQQVRIX0lfR1BJTykgewpAQCAtMTA5Myw4ICsxMjA5LDcgQEAKIAogCQlncGlvc3RhdHVzID0gaXBhdGhfcmVhZF9rcmVnMzIoCiAJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX3N0YXR1cyk7Ci0JCS8qIEZpcnN0IHRoZSBlcnJvci1jb3VudGVyIGNhc2UuCi0JCSAqLworCQkvKiBGaXJzdCB0aGUgZXJyb3ItY291bnRlciBjYXNlLiAqLwogCQlpZiAoKGdwaW9zdGF0dXMgJiBJUEFUSF9HUElPX0VSUklOVFJfTUFTSykgJiYKIAkJICAgIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9HUElPX0VSUklOVFJTKSkgewogCQkJLyogd2FudCB0byBjbGVhciB0aGUgYml0cyB3ZSBzZWUgYXNzZXJ0ZWQuICovCkBAIC0xMTU2LDcgKzEyNzEsNiBAQAogCQkJCQkodTY0KSB0b19jbGVhcik7CiAJCX0KIAl9Ci0JY2hrMHJjdiB8PSBpc3RhdCAmIHBvcnQwcmJpdHM7CiAKIAkvKgogCSAqIENsZWFyIHRoZSBpbnRlcnJ1cHQgYml0cyB3ZSBmb3VuZCBzZXQsIHVubGVzcyB0aGV5IGFyZSByZWNlaXZlCkBAIC0xMTY5LDIyICsxMjgzLDI1IEBACiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwgaXN0YXQpOwogCiAJLyoKLQkgKiBoYW5kbGUgcG9ydDAgcmVjZWl2ZSAgYmVmb3JlIGNoZWNraW5nIGZvciBwaW8gYnVmZmVycyBhdmFpbGFibGUsCi0JICogc2luY2UgcmVjZWl2ZXMgY2FuIG92ZXJmbG93OyBwaW9idWYgd2FpdGVycyBjYW4gYWZmb3JkIGEgZmV3Ci0JICogZXh0cmEgY3ljbGVzLCBzaW5jZSB0aGV5IHdlcmUgd2FpdGluZyBhbnl3YXksIGFuZCB1c2VyJ3Mgd2FpdGluZwotCSAqIGZvciByZWNlaXZlIGFyZSBhdCB0aGUgYm90dG9tLgorCSAqIEhhbmRsZSBrZXJuZWwgcmVjZWl2ZSBxdWV1ZXMgYmVmb3JlIGNoZWNraW5nIGZvciBwaW8gYnVmZmVycworCSAqIGF2YWlsYWJsZSBzaW5jZSByZWNlaXZlcyBjYW4gb3ZlcmZsb3c7IHBpb2J1ZiB3YWl0ZXJzIGNhbiBhZmZvcmQKKwkgKiBhIGZldyBleHRyYSBjeWNsZXMsIHNpbmNlIHRoZXkgd2VyZSB3YWl0aW5nIGFueXdheSwgYW5kIHVzZXIncworCSAqIHdhaXRpbmcgZm9yIHJlY2VpdmUgYXJlIGF0IHRoZSBib3R0b20uCiAJICovCi0JaWYgKGNoazByY3YpIHsKKwlrcG9ydHJiaXRzID0gKDFVTEwgPDwgZGQtPmlwYXRoX2lfcmN2YXZhaWxfc2hpZnQpIHwKKwkJKDFVTEwgPDwgZGQtPmlwYXRoX2lfcmN2dXJnX3NoaWZ0KTsKKwlpZiAoY2hrMHJjdiB8fCAoaXN0YXQgJiBrcG9ydHJiaXRzKSkgeworCQlpc3RhdCAmPSB+a3BvcnRyYml0czsKIAkJaXBhdGhfa3JlY2VpdmUoZGQtPmlwYXRoX3BkWzBdKTsKLQkJaXN0YXQgJj0gfnBvcnQwcmJpdHM7CiAJfQogCi0JaWYgKGlzdGF0ICYgKChkZC0+aXBhdGhfaV9yY3ZhdmFpbF9tYXNrIDw8Ci0JCSAgICAgIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCkKLQkJICAgICB8IChkZC0+aXBhdGhfaV9yY3Z1cmdfbWFzayA8PAotCQkJSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkpKQorCWlmIChpc3RhdCAmICgoZGQtPmlwYXRoX2lfcmN2YXZhaWxfbWFzayA8PCBkZC0+aXBhdGhfaV9yY3ZhdmFpbF9zaGlmdCkgfAorCQkgICAgIChkZC0+aXBhdGhfaV9yY3Z1cmdfbWFzayA8PCBkZC0+aXBhdGhfaV9yY3Z1cmdfc2hpZnQpKSkKIAkJaGFuZGxlX3VyY3YoZGQsIGlzdGF0KTsKIAorCWlmIChpc3RhdCAmIChJTkZJTklQQVRIX0lfU0RNQUlOVCB8IElORklOSVBBVEhfSV9TRE1BRElTQUJMRUQpKQorCQloYW5kbGVfc2RtYV9pbnRyKGRkLCBpc3RhdCk7CisKIAlpZiAoaXN0YXQgJiBJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTExOTUsNyArMTMxMiwxMCBAQAogCQlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKIAotCQloYW5kbGVfbGF5ZXJfcGlvYXZhaWwoZGQpOworCQlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9IQVNfU0VORF9ETUEpKQorCQkJaGFuZGxlX2xheWVyX3Bpb2F2YWlsKGRkKTsKKwkJZWxzZQorCQkJaXBhdGhfZGJnKCJ1bmV4cGVjdGVkIEJVRkFWQUlMIGludHJcbiIpOwogCX0KIAogCXJldCA9IElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCmluZGV4IDRjYzBmOTUuLjIwMjMzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9JUEFUSF9LRVJORUxfSAogI2RlZmluZSBfSVBBVEhfS0VSTkVMX0gKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAKQEAgLTE3NSw5ICsxNzcsMTMgQEAKIAl1MTYgcG9sbF90eXBlOwogCS8qIHBvcnQgcmN2aGRycSBoZWFkIG9mZnNldCAqLwogCXUzMiBwb3J0X2hlYWQ7CisJLyogcmVjZWl2ZSBwYWNrZXQgc2VxdWVuY2UgY291bnRlciAqLworCXUzMiBwb3J0X3NlcV9jbnQ7CiB9OwogCiBzdHJ1Y3Qgc2tfYnVmZjsKK3N0cnVjdCBpcGF0aF9zZ2Vfc3RhdGU7CitzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXE7CiAKIC8qCiAgKiBjb250cm9sIGluZm9ybWF0aW9uIGZvciBsYXllcmVkIGRyaXZlcnMKQEAgLTE5MSw2ICsxOTcsNDAgQEAKIAlkbWFfYWRkcl90IHBoeXM7CiB9OwogCitzdHJ1Y3QgaXBhdGhfc2RtYV90eHJlcSB7CisJaW50ICAgICAgICAgICAgICAgICBmbGFnczsKKwlpbnQgICAgICAgICAgICAgICAgIHNnX2NvdW50OworCXVuaW9uIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwkJdm9pZCAqbWFwX2FkZHI7CisJfTsKKwl2b2lkICAgICAgICAgICAgICAoKmNhbGxiYWNrKSh2b2lkICosIGludCk7CisJdm9pZCAgICAgICAgICAgICAgICpjYWxsYmFja19jb29raWU7CisJaW50ICAgICAgICAgICAgICAgICBjYWxsYmFja19zdGF0dXM7CisJdTE2ICAgICAgICAgICAgICAgICBzdGFydF9pZHg7ICAvKiBzZG1hIHByaXZhdGUgKi8KKwl1MTYgICAgICAgICAgICAgICAgIG5leHRfZGVzY3FfaWR4OyAgLyogc2RtYSBwcml2YXRlICovCisJc3RydWN0IGxpc3RfaGVhZCAgICBsaXN0OyAgICAgICAvKiBzZG1hIHByaXZhdGUgKi8KK307CisKK3N0cnVjdCBpcGF0aF9zZG1hX2Rlc2MgeworCV9fbGU2NCBxd1syXTsKK307CisKKyNkZWZpbmUgSVBBVEhfU0RNQV9UWFJFUV9GX1VTRUxBUkdFQlVGICAweDEKKyNkZWZpbmUgSVBBVEhfU0RNQV9UWFJFUV9GX0hFQURUT0hPU1QgICAweDIKKyNkZWZpbmUgSVBBVEhfU0RNQV9UWFJFUV9GX0lOVFJFUSAgICAgICAweDQKKyNkZWZpbmUgSVBBVEhfU0RNQV9UWFJFUV9GX0ZSRUVCVUYgICAgICAweDgKKyNkZWZpbmUgSVBBVEhfU0RNQV9UWFJFUV9GX0ZSRUVERVNDICAgICAweDEwCisjZGVmaW5lIElQQVRIX1NETUFfVFhSRVFfRl9WTDE1ICAgICAgICAgMHgyMAorCisjZGVmaW5lIElQQVRIX1NETUFfVFhSRVFfU19PSyAgICAgICAgMAorI2RlZmluZSBJUEFUSF9TRE1BX1RYUkVRX1NfU0VOREVSUk9SIDEKKyNkZWZpbmUgSVBBVEhfU0RNQV9UWFJFUV9TX0FCT1JURUQgICAyCisjZGVmaW5lIElQQVRIX1NETUFfVFhSRVFfU19TSFVURE9XTiAgMworCisvKiBtYXggZHdvcmRzIGluIHNtYWxsIGJ1ZmZlciBwYWNrZXQgKi8KKyNkZWZpbmUgSVBBVEhfU01BTExCVUZfRFdPUkRTIChkZC0+aXBhdGhfcGlvc2l6ZTJrID4+IDIpCisKIC8qCiAgKiBQb3NzaWJsZSBJQiBjb25maWcgcGFyYW1ldGVycyBmb3IgaXBhdGhfZl9nZXQvc2V0X2liX2NmZygpCiAgKi8KQEAgLTIyMSwxMSArMjYxLDYgQEAKIAl1bnNpZ25lZCBsb25nIGlwYXRoX3BoeXNhZGRyOwogCS8qIGJhc2Ugb2YgbWVtb3J5IGFsbG9jZWQgZm9yIGlwYXRoX2tyZWdiYXNlLCBmb3IgZnJlZSAqLwogCXU2NCAqaXBhdGhfa3JlZ2FsbG9jOwotCS8qCi0JICogdmlydHVhbCBhZGRyZXNzIHdoZXJlIHBvcnQwIHJjdmhkcnF0YWlsIHVwZGF0ZWQgZm9yIHRoaXMgdW5pdC4KLQkgKiBvbmx5IHdyaXR0ZW4gdG8gYnkgdGhlIGNoaXAsIG5vdCB0aGUgZHJpdmVyLgotCSAqLwotCXZvbGF0aWxlIF9fbGU2NCAqaXBhdGhfaGRycXRhaWxwdHI7CiAJLyogaXBhdGhfY2ZncG9ydHMgcG9pbnRlcnMgKi8KIAlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKippcGF0aF9wZDsKIAkvKiBza19idWZmcyB1c2VkIGJ5IHBvcnQgMCBlYWdlciByZWNlaXZlIHF1ZXVlICovCkBAIC0yODMsNiArMzE4LDcgQEAKIAkvKiBwZXIgY2hpcCBhY3Rpb25zIG5lZWRlZCBmb3IgSUIgTGluayB1cC9kb3duIGNoYW5nZXMgKi8KIAlpbnQgKCppcGF0aF9mX2liX3VwZG93bikoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaW50LCB1NjQpOwogCisJdW5zaWduZWQgaXBhdGhfbGFzdGVncl9pZHg7CiAJc3RydWN0IGlwYXRoX2liZGV2ICp2ZXJic19kZXY7CiAJc3RydWN0IHRpbWVyX2xpc3QgdmVyYnNfdGltZXI7CiAJLyogdG90YWwgZHdvcmRzIHNlbnQgKHN1bW1lZCBmcm9tIGNvdW50ZXIpICovCkBAIC0zMDksNiArMzQ1LDcgQEAKIAlpcGF0aF9lcnJfdCBpcGF0aF9sYXN0aHdlcnJvcjsKIAkvKiBlcnJvcnMgbWFza2VkIGJlY2F1c2UgdGhleSBvY2N1ciB0b28gZmFzdCAqLwogCWlwYXRoX2Vycl90IGlwYXRoX21hc2tlZGVycnM7CisJdTY0IGlwYXRoX2xhc3RsaW5rcmVjb3Y7IC8qIGxpbmsgcmVjb3ZlcmllcyBhdCBsYXN0IEFDVElWRSAqLwogCS8qIHRpbWUgaW4gamlmZmllcyBhdCB3aGljaCB0byByZS1lbmFibGUgbWFza2VkZXJycyAqLwogCXVuc2lnbmVkIGxvbmcgaXBhdGhfdW5tYXNrdGltZTsKIAkvKiBjb3VudCBvZiBlZ3JmdWxsIGVycm9ycywgY29tYmluZWQgZm9yIGFsbCBwb3J0cyAqLwpAQCAtMzQ3LDYgKzM4NCw3IEBACiAJdTMyIGlwYXRoX2xhc3RycGt0czsKIAkvKiBwaW8gYnVmcyBhbGxvY2F0ZWQgcGVyIHBvcnQgKi8KIAl1MzIgaXBhdGhfcGJ1ZnNwb3J0OworCXUzMiBpcGF0aF9waW91cGRfdGhyZXNoOyAvKiB1cGRhdGUgdGhyZXNob2xkLCBzb21lIGNoaXBzICovCiAJLyoKIAkgKiBudW1iZXIgb2YgcG9ydHMgY29uZmlndXJlZCBhcyBtYXg7IHplcm8gaXMgc2V0IHRvIG51bWJlciBjaGlwCiAJICogc3VwcG9ydHMsIGxlc3MgZ2l2ZXMgbW9yZSBwaW8gYnVmcy9wb3J0LCBldGMuCkBAIC0zNjUsNiArNDAzLDcgQEAKIAkgKiBnZXQgdG8gbXVsdGlwbGUgZGV2aWNlcwogCSAqLwogCXUzMiBpcGF0aF9sYXN0cGlvaW5kZXg7CisJdTMyIGlwYXRoX2xhc3RwaW9pbmRleGw7CiAJLyogbWF4IGxlbmd0aCBvZiBmcmVlemVtc2cgKi8KIAl1MzIgaXBhdGhfZnJlZXplbGVuOwogCS8qCkBAIC0zODEsNiArNDIwLDE1IEBACiAJdTMyIGlwYXRoX3BjaWJhcjA7CiAJLyogc28gd2UgY2FuIHJld3JpdGUgaXQgYWZ0ZXIgYSBjaGlwIHJlc2V0ICovCiAJdTMyIGlwYXRoX3BjaWJhcjE7CisJdTMyIGlwYXRoX3gxX2ZpeF90cmllczsKKwl1MzIgaXBhdGhfYXV0b25lZ190cmllczsKKwl1MzIgc2VyZGVzX2ZpcnN0X2luaXRfZG9uZTsKKworCXN0cnVjdCBpcGF0aF9yZWxvY2sgeworCQlhdG9taWNfdCBpcGF0aF9yZWxvY2tfdGltZXJfYWN0aXZlOworCQlzdHJ1Y3QgdGltZXJfbGlzdCBpcGF0aF9yZWxvY2tfdGltZXI7CisJCXVuc2lnbmVkIGludCBpcGF0aF9yZWxvY2tfaW50ZXJ2YWw7IC8qIGluIGppZmZpZXMgKi8KKwl9IGlwYXRoX3JlbG9ja19zaW5nbGV0b247CiAKIAkvKiBpbnRlcnJ1cHQgbnVtYmVyICovCiAJaW50IGlwYXRoX2lycTsKQEAgLTQwMyw3ICs0NTEsNyBAQAogCXU2NCBfX2lvbWVtICppcGF0aF9lZ3J0aWRiYXNlOwogCS8qIGxvY2sgdG8gd29ya2Fyb3VuZCBjaGlwIGJ1ZyA5NDM3IGFuZCBvdGhlcnMgKi8KIAlzcGlubG9ja190IGlwYXRoX2tlcm5lbF90aWRfbG9jazsKLQlzcGlubG9ja190IGlwYXRoX3RpZF9sb2NrOworCXNwaW5sb2NrX3QgaXBhdGhfdXNlcl90aWRfbG9jazsKIAlzcGlubG9ja190IGlwYXRoX3NlbmRjdHJsX2xvY2s7CiAKIAkvKgpAQCAtNDE4LDE1ICs0NjYsNTIgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwogCXN0cnVjdCBjZGV2ICp1c2VyX2NkZXY7CiAJc3RydWN0IGNkZXYgKmRpYWdfY2RldjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICp1c2VyX2NsYXNzX2RldjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkaWFnX2NsYXNzX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICp1c2VyX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkaWFnX2RldjsKIAkvKiB0aW1lciB1c2VkIHRvIHByZXZlbnQgc3RhdHMgb3ZlcmZsb3csIGVycm9yIHRocm90dGxpbmcsIGV0Yy4gKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBpcGF0aF9zdGF0c190aW1lcjsKKwkvKiB0aW1lciB0byB2ZXJpZnkgaW50ZXJydXB0cyB3b3JrLCBhbmQgZmFsbGJhY2sgaWYgcG9zc2libGUgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBpcGF0aF9pbnRyY2hrX3RpbWVyOwogCXZvaWQgKmlwYXRoX2R1bW15X2hkcnE7CS8qIHVzZWQgYWZ0ZXIgcG9ydCBjbG9zZSAqLwogCWRtYV9hZGRyX3QgaXBhdGhfZHVtbXlfaGRycV9waHlzOwogCisJLyogU2VuZERNQSByZWxhdGVkIGVudHJpZXMgKi8KKwlzcGlubG9ja190ICAgICAgICAgICAgaXBhdGhfc2RtYV9sb2NrOworCXU2NCAgICAgICAgICAgICAgICAgICBpcGF0aF9zZG1hX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgaXBhdGhfc2RtYV9hYm9ydF9qaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgICAgICAgICBpcGF0aF9zZG1hX2Fib3J0X2ludHJfdGltZW91dDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgaXBhdGhfc2RtYV9idWZfamlmZmllczsKKwlzdHJ1Y3QgaXBhdGhfc2RtYV9kZXNjICppcGF0aF9zZG1hX2Rlc2NxOworCXU2NAkJICAgICAgaXBhdGhfc2RtYV9kZXNjcV9hZGRlZDsKKwl1NjQJCSAgICAgIGlwYXRoX3NkbWFfZGVzY3FfcmVtb3ZlZDsKKwlpbnQJCSAgICAgIGlwYXRoX3NkbWFfZGVzY19ucmVzZXJ2ZWQ7CisJdTE2ICAgICAgICAgICAgICAgICAgIGlwYXRoX3NkbWFfZGVzY3FfY250OworCXUxNiAgICAgICAgICAgICAgICAgICBpcGF0aF9zZG1hX2Rlc2NxX3RhaWw7CisJdTE2ICAgICAgICAgICAgICAgICAgIGlwYXRoX3NkbWFfZGVzY3FfaGVhZDsKKwl1MTYgICAgICAgICAgICAgICAgICAgaXBhdGhfc2RtYV9uZXh0X2ludHI7CisJdTE2ICAgICAgICAgICAgICAgICAgIGlwYXRoX3NkbWFfcmVzZXRfd2FpdDsKKwl1OCAgICAgICAgICAgICAgICAgICAgaXBhdGhfc2RtYV9nZW5lcmF0aW9uOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcGF0aF9zZG1hX2Fib3J0X3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlwYXRoX3NkbWFfbm90aWZ5X3Rhc2s7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgIGlwYXRoX3NkbWFfYWN0aXZlbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgaXBhdGhfc2RtYV9ub3RpZnlsaXN0OworCWF0b21pY190ICAgICAgICAgICAgICBpcGF0aF9zZG1hX3ZsMTVfY291bnQ7CisJc3RydWN0IHRpbWVyX2xpc3QgICAgIGlwYXRoX3NkbWFfdmwxNV90aW1lcjsKKworCWRtYV9hZGRyX3QgICAgICAgaXBhdGhfc2RtYV9kZXNjcV9waHlzOworCXZvbGF0aWxlIF9fbGU2NCAqaXBhdGhfc2RtYV9oZWFkX2RtYTsKKwlkbWFfYWRkcl90ICAgICAgIGlwYXRoX3NkbWFfaGVhZF9waHlzOworCiAJdW5zaWduZWQgbG9uZyBpcGF0aF91cmVnX2FsaWduOyAvKiB1c2VyIHJlZ2lzdGVyIGFsaWdubWVudCAqLwogCisJc3RydWN0IGRlbGF5ZWRfd29yayBpcGF0aF9hdXRvbmVnX3dvcms7CisJd2FpdF9xdWV1ZV9oZWFkX3QgaXBhdGhfYXV0b25lZ193YWl0OworCisJLyogSG9MIGJsb2NraW5nIC8gdXNlciBhcHAgZm9yd2FyZC1wcm9ncmVzcyBzdGF0ZSAqLworCXVuc2lnbmVkICAgICAgICAgIGlwYXRoX2hvbF9zdGF0ZTsKKwl1bnNpZ25lZCAgICAgICAgICBpcGF0aF9ob2xfbmV4dDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBpcGF0aF9ob2xfdGltZXI7CisKIAkvKgogCSAqIFNoYWRvdyBjb3BpZXMgb2YgcmVnaXN0ZXJzOyBzaXplIGluZGljYXRlcyByZWFkIGFjY2VzcyBzaXplLgogCSAqIE1vc3Qgb2YgdGhlbSBhcmUgcmVhZG9ubHksIGJ1dCBzb21lIGFyZSB3cml0ZS1vbmx5IHJlZ2lzdGVyLApAQCAtNDQ3LDYgKzUzMiw4IEBACiAJICogaW5pdCB0aW1lLgogCSAqLwogCXVuc2lnbmVkIGxvbmcgaXBhdGhfcGlvYXZhaWxzaGFkb3dbOF07CisJLyogYml0bWFwIG9mIHNlbmQgYnVmZmVycyBhdmFpbGFibGUgZm9yIHRoZSBrZXJuZWwgdG8gdXNlIHdpdGggUElPLiAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfcGlvYXZhaWxrZXJuZWxbOF07CiAJLyogc2hhZG93IG9mIGtyX2dwaW9fb3V0LCBmb3Igcm13IG9wcyAqLwogCXU2NCBpcGF0aF9ncGlvX291dDsKIAkvKiBzaGFkb3cgdGhlIGdwaW8gbWFzayByZWdpc3RlciAqLwpAQCAtNDcyLDYgKzU1OSw4IEBACiAJdTY0IGlwYXRoX2ludGNvbmZpZzsKIAkvKiBrcl9zZW5kcGlvYnVmYmFzZSB2YWx1ZSAqLwogCXU2NCBpcGF0aF9waW9idWZiYXNlOworCS8qIGtyX2liY2RkcmN0cmwgc2hhZG93ICovCisJdTY0IGlwYXRoX2liY2RkcmN0cmw7CiAKIAkvKiB0aGVzZSBhcmUgdGhlICIzMiBiaXQiIHJlZ3MgKi8KIApAQCAtNDg4LDcgKzU3NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgaXBhdGhfcmN2Y3RybDsKIAkvKiBzaGFkb3cga3Jfc2VuZGN0cmwgKi8KIAl1bnNpZ25lZCBsb25nIGlwYXRoX3NlbmRjdHJsOwotCXVuc2lnbmVkIGxvbmcgaXBhdGhfbGFzdGNhbmNlbDsgLyogdG8gbm90IGNvdW50IGFybWxhdW5jaCBhZnRlciBjYW5jZWwgKi8KKwkvKiB0byBub3QgY291bnQgYXJtbGF1bmNoIGFmdGVyIGNhbmNlbCAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfbGFzdGNhbmNlbDsKKwkvKiBjb3VudCBjYXNlcyB3aGVyZSBzcGVjaWFsIHRyaWdnZXIgd2FzIG5lZWRlZCAoZG91YmxlIHdyaXRlKSAqLworCXVuc2lnbmVkIGxvbmcgaXBhdGhfc3BlY3RyaWdnZXJoaXQ7CiAKIAkvKiB2YWx1ZSB3ZSBwdXQgaW4ga3JfcmN2aGRyY250ICovCiAJdTMyIGlwYXRoX3JjdmhkcmNudDsKQEAgLTUxMCw2ICs2MDIsNyBAQAogCXUzMiBpcGF0aF9waW9iY250NGs7CiAJLyogc2l6ZSBpbiBieXRlcyBvZiAiNEtCIiBQSU8gYnVmZmVycyAqLwogCXUzMiBpcGF0aF9waW9zaXplNGs7CisJdTMyIGlwYXRoX3Bpb3Jlc2VydmVkOyAvKiByZXNlcnZlZCBzcGVjaWFsLWlua2VybmVsOyAqLwogCS8qIGtyX3JjdmVncmJhc2UgdmFsdWUgKi8KIAl1MzIgaXBhdGhfcmN2ZWdyYmFzZTsKIAkvKiBrcl9yY3ZlZ3JjbnQgdmFsdWUgKi8KQEAgLTU0NiwxMCArNjM5LDEwIEBACiAJdTMyIGlwYXRoX2luaXRfaWJtYXhsZW47CiAJLyogc2l6ZSBvZiBlYWNoIHJjdmVncmJ1ZmZlciAqLwogCXUzMiBpcGF0aF9yY3ZlZ3JidWZzaXplOwotCS8qIHdpZHRoICgyLDQsOCwxNiwzMikgZnJvbSBIVCBjb25maWcgcmVnICovCi0JdTMyIGlwYXRoX2h0d2lkdGg7Ci0JLyogSFQgc3BlZWQgKDIwMCw0MDAsODAwLDEwMDApIGZyb20gSFQgY29uZmlnICovCi0JdTMyIGlwYXRoX2h0c3BlZWQ7CisJLyogbG9jYWxidXMgd2lkdGggKDEsIDIsNCw4LDE2LDMyKSBmcm9tIGNvbmZpZyBzcGFjZSAgKi8KKwl1MzIgaXBhdGhfbGJ1c193aWR0aDsKKwkvKiBsb2NhbGJ1cyBzcGVlZCAoSFQ6IDIwMCw0MDAsODAwLDEwMDA7IFBDSWUgMjUwMCkgKi8KKwl1MzIgaXBhdGhfbGJ1c19zcGVlZDsKIAkvKgogCSAqIG51bWJlciBvZiBzZXF1ZW50aWFsIGliY3N0YXR1cyBjaGFuZ2UgZm9yIHBvbGxpbmcgYWN0aXZlL3F1aWV0CiAJICogKGkuZS4sIGxpbmsgbm90IGNvbWluZyB1cCkuCkBAIC01NzMsMjEgKzY2NiwxNCBAQAogCSAqLwogCXU4IGlwYXRoX3NlcmlhbFsxNl07CiAJLyogaHVtYW4gcmVhZGFibGUgYm9hcmQgdmVyc2lvbiAqLwotCXU4IGlwYXRoX2JvYXJkdmVyc2lvbls4MF07CisJdTggaXBhdGhfYm9hcmR2ZXJzaW9uWzk2XTsKKwl1OCBpcGF0aF9sYnVzX2luZm9bMzJdOyAvKiBodW1hbiByZWFkYWJsZSBsb2NhbGJ1cyBpbmZvICovCiAJLyogY2hpcCBtYWpvciByZXYsIGZyb20gaXBhdGhfcmV2aXNpb24gKi8KIAl1OCBpcGF0aF9tYWpyZXY7CiAJLyogY2hpcCBtaW5vciByZXYsIGZyb20gaXBhdGhfcmV2aXNpb24gKi8KIAl1OCBpcGF0aF9taW5yZXY7CiAJLyogYm9hcmQgcmV2LCBmcm9tIGlwYXRoX3JldmlzaW9uICovCiAJdTggaXBhdGhfYm9hcmRyZXY7Ci0KLQl1OCBpcGF0aF9yX3BvcnRlbmFibGVfc2hpZnQ7Ci0JdTggaXBhdGhfcl9pbnRyYXZhaWxfc2hpZnQ7Ci0JdTggaXBhdGhfcl90YWlsdXBkX3NoaWZ0OwotCXU4IGlwYXRoX3JfcG9ydGNmZ19zaGlmdDsKLQotCS8qIHVuaXQgIyBvZiB0aGlzIGNoaXAsIGlmIHByZXNlbnQgKi8KLQlpbnQgaXBhdGhfdW5pdDsKIAkvKiBzYXZlZCBmb3IgcmVzdG9yZSBhZnRlciByZXNldCAqLwogCXU4IGlwYXRoX3BjaV9jYWNoZWxpbmU7CiAJLyogTElEIG1hc2sgY29udHJvbCAqLwpAQCAtNjAzLDYgKzY4OSwxNCBAQAogCS8qIFJ4IFBvbGFyaXR5IGludmVyc2lvbiAoY29tcGVuc2F0ZSBmb3IgfnR4IG9uIHBhcnRuZXIpICovCiAJdTggaXBhdGhfcnhfcG9sX2ludjsKIAorCXU4IGlwYXRoX3JfcG9ydGVuYWJsZV9zaGlmdDsKKwl1OCBpcGF0aF9yX2ludHJhdmFpbF9zaGlmdDsKKwl1OCBpcGF0aF9yX3RhaWx1cGRfc2hpZnQ7CisJdTggaXBhdGhfcl9wb3J0Y2ZnX3NoaWZ0OworCisJLyogdW5pdCAjIG9mIHRoaXMgY2hpcCwgaWYgcHJlc2VudCAqLworCWludCBpcGF0aF91bml0OworCiAJLyogbG9jYWwgbGluayBpbnRlZ3JpdHkgY291bnRlciAqLwogCXUzMiBpcGF0aF9sbGlfY291bnRlcjsKIAkvKiBsb2NhbCBsaW5rIGludGVncml0eSBlcnJvcnMgKi8KQEAgLTYxNyw5ICs3MTEsNiBAQAogCXUzMiBpcGF0aF9vdmVycnVuX3RocmVzaF9lcnJzOwogCXUzMiBpcGF0aF9sbGlfZXJyczsKIAotCS8qIHN0YXR1cyBjaGVjayB3b3JrICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBzdGF0dXNfd29yazsKLQogCS8qCiAJICogTm90IGFsbCBkZXZpY2VzIG1hbmFnZWQgYnkgYSBkcml2ZXIgaW5zdGFuY2UgYXJlIHRoZSBzYW1lCiAJICogdHlwZSwgc28gdGhlc2UgZmllbGRzIG11c3QgYmUgcGVyLWRldmljZS4KQEAgLTYzMiw4ICs3MjMsOCBAQAogCSAqIEJlbG93IHNob3VsZCBiZSBjb21wdXRhYmxlIGZyb20gbnVtYmVyIG9mIHBvcnRzLAogCSAqIHNpbmNlIHRoZXkgYXJlIG5ldmVyIG1vZGlmaWVkLgogCSAqLwotCXUzMiBpcGF0aF9pX3JjdmF2YWlsX21hc2s7Ci0JdTMyIGlwYXRoX2lfcmN2dXJnX21hc2s7CisJdTY0IGlwYXRoX2lfcmN2YXZhaWxfbWFzazsKKwl1NjQgaXBhdGhfaV9yY3Z1cmdfbWFzazsKIAl1MTYgaXBhdGhfaV9yY3Z1cmdfc2hpZnQ7CiAJdTE2IGlwYXRoX2lfcmN2YXZhaWxfc2hpZnQ7CiAKQEAgLTY0MSw4ICs3MzIsOSBAQAogCSAqIFJlZ2lzdGVyIGJpdHMgZm9yIHNlbGVjdGluZyBpMmMgZGlyZWN0aW9uIGFuZCB2YWx1ZXMsIHVzZWQgZm9yCiAJICogSTJDIHNlcmlhbCBmbGFzaC4KIAkgKi8KLQl1MTYgaXBhdGhfZ3Bpb19zZGFfbnVtOwotCXUxNiBpcGF0aF9ncGlvX3NjbF9udW07CisJdTggaXBhdGhfZ3Bpb19zZGFfbnVtOworCXU4IGlwYXRoX2dwaW9fc2NsX251bTsKKwl1OCBpcGF0aF9pMmNfY2hhaW5fdHlwZTsKIAl1NjQgaXBhdGhfZ3Bpb19zZGE7CiAJdTY0IGlwYXRoX2dwaW9fc2NsOwogCkBAIC03MDMsMTMgKzc5NSw1MSBAQAogCS8qIGludGVycnVwdCBtaXRpZ2F0aW9uIHJlbG9hZCByZWdpc3RlciBpbmZvICovCiAJdTE2IGlwYXRoX2ppbnRfaWRsZV90aWNrczsJLyogaWRsZSBjbG9jayB0aWNrcyAqLwogCXUxNiBpcGF0aF9qaW50X21heF9wYWNrZXRzOwkvKiBtYXggcGFja2V0cyBhY3Jvc3MgYWxsIHBvcnRzICovCisKKwkvKgorCSAqIGxvY2sgZm9yIGFjY2VzcyB0byBTZXJEZXMsIGFuZCBmbGFncyB0byBzZXF1ZW5jZSBwcmVzZXQKKwkgKiB2ZXJzdXMgc3RlYWR5LXN0YXRlLiA3MjIwLW9ubHkgYXQgdGhlIG1vbWVudC4KKwkgKi8KKwlzcGlubG9ja190IGlwYXRoX3NkZXBiX2xvY2s7CisJdTggaXBhdGhfcHJlc2V0c19uZWVkZWQ7IC8qIFNldCBpZiBwcmVzZXRzIHRvIGJlIHJlc3RvcmVkIG5leHQgRE9XTiAqLwogfTsKIAorLyogaXBhdGhfaG9sX3N0YXRlIHZhbHVlcyAoc3RvcHBpbmcvc3RhcnRpbmcgdXNlciBwcm9jLCBzZW5kIGZsdXNoaW5nKSAqLworI2RlZmluZSBJUEFUSF9IT0xfVVAgICAgICAgMAorI2RlZmluZSBJUEFUSF9IT0xfRE9XTiAgICAgMQorLyogaXBhdGhfaG9sX25leHQgdG9nZ2xlIHZhbHVlcywgdXNlZCB3aGVuIGhvbF9zdGF0ZSBJUEFUSF9IT0xfRE9XTiAqLworI2RlZmluZSBJUEFUSF9IT0xfRE9XTlNUT1AgMAorI2RlZmluZSBJUEFUSF9IT0xfRE9XTkNPTlQgMQorCisvKiBiaXQgcG9zaXRpb25zIGZvciBzZG1hX3N0YXR1cyAqLworI2RlZmluZSBJUEFUSF9TRE1BX0FCT1JUSU5HICAwCisjZGVmaW5lIElQQVRIX1NETUFfRElTQVJNRUQgIDEKKyNkZWZpbmUgSVBBVEhfU0RNQV9ESVNBQkxFRCAgMgorI2RlZmluZSBJUEFUSF9TRE1BX0xBWUVSQlVGICAzCisjZGVmaW5lIElQQVRIX1NETUFfUlVOTklORyAgNjIKKyNkZWZpbmUgSVBBVEhfU0RNQV9TSFVURE9XTiA2MworCisvKiBiaXQgY29tYmluYXRpb25zIHRoYXQgY29ycmVzcG9uZCB0byBhYm9ydCBzdGF0ZXMgKi8KKyNkZWZpbmUgSVBBVEhfU0RNQV9BQk9SVF9OT05FIDAKKyNkZWZpbmUgSVBBVEhfU0RNQV9BQk9SVF9BQk9SVElORyAoMVVMIDw8IElQQVRIX1NETUFfQUJPUlRJTkcpCisjZGVmaW5lIElQQVRIX1NETUFfQUJPUlRfRElTQVJNRUQgKCgxVUwgPDwgSVBBVEhfU0RNQV9BQk9SVElORykgfCBcCisJKDFVTCA8PCBJUEFUSF9TRE1BX0RJU0FSTUVEKSkKKyNkZWZpbmUgSVBBVEhfU0RNQV9BQk9SVF9ESVNBQkxFRCAoKDFVTCA8PCBJUEFUSF9TRE1BX0FCT1JUSU5HKSB8IFwKKwkoMVVMIDw8IElQQVRIX1NETUFfRElTQUJMRUQpKQorI2RlZmluZSBJUEFUSF9TRE1BX0FCT1JUX0FCT1JURUQgKCgxVUwgPDwgSVBBVEhfU0RNQV9BQk9SVElORykgfCBcCisJKDFVTCA8PCBJUEFUSF9TRE1BX0RJU0FSTUVEKSB8ICgxVUwgPDwgSVBBVEhfU0RNQV9ESVNBQkxFRCkpCisjZGVmaW5lIElQQVRIX1NETUFfQUJPUlRfTUFTSyAoKDFVTDw8SVBBVEhfU0RNQV9BQk9SVElORykgfCBcCisJKDFVTCA8PCBJUEFUSF9TRE1BX0RJU0FSTUVEKSB8ICgxVUwgPDwgSVBBVEhfU0RNQV9ESVNBQkxFRCkpCisKKyNkZWZpbmUgSVBBVEhfU0RNQV9CVUZfTk9ORSAwCisjZGVmaW5lIElQQVRIX1NETUFfQlVGX01BU0sgKDFVTDw8SVBBVEhfU0RNQV9MQVlFUkJVRikKKwogLyogUHJpdmF0ZSBkYXRhIGZvciBmaWxlIG9wZXJhdGlvbnMgKi8KIHN0cnVjdCBpcGF0aF9maWxlZGF0YSB7CiAJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKIAl1bnNpZ25lZCBzdWJwb3J0OwogCXVuc2lnbmVkIHRpZGN1cnNvcjsKKwlzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcTsKIH07CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpcGF0aF9kZXZfbGlzdDsKIGV4dGVybiBzcGlubG9ja190IGlwYXRoX2RldnNfbG9jazsKQEAgLTcxOCwxNSArODQ4LDE1IEBACiBpbnQgaXBhdGhfaW5pdF9jaGlwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGludCk7CiBpbnQgaXBhdGhfZW5hYmxlX3djKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CiB2b2lkIGlwYXRoX2Rpc2FibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKLWludCBpcGF0aF9jb3VudF91bml0cyhpbnQgKm5wcmVzZW50cCwgaW50ICpudXBwLCB1MzIgKm1heHBvcnRzcCk7CitpbnQgaXBhdGhfY291bnRfdW5pdHMoaW50ICpucHJlc2VudHAsIGludCAqbnVwcCwgaW50ICptYXhwb3J0c3ApOwogdm9pZCBpcGF0aF9zaHV0ZG93bl9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CiB2b2lkIGlwYXRoX2NsZWFyX2ZyZWV6ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIAogc3RydWN0IGZpbGVfb3BlcmF0aW9uczsKIGludCBpcGF0aF9jZGV2X2luaXQoaW50IG1pbm9yLCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAotCQkgICAgc3RydWN0IGNkZXYgKipjZGV2cCwgc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApOworCQkgICAgc3RydWN0IGNkZXYgKipjZGV2cCwgc3RydWN0IGRldmljZSAqKmRldnApOwogdm9pZCBpcGF0aF9jZGV2X2NsZWFudXAoc3RydWN0IGNkZXYgKipjZGV2cCwKLQkJCXN0cnVjdCBjbGFzc19kZXZpY2UgKipjbGFzc19kZXZwKTsKKwkJCXN0cnVjdCBkZXZpY2UgKipkZXZwKTsKIAogaW50IGlwYXRoX2RpYWdfYWRkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogdm9pZCBpcGF0aF9kaWFnX3JlbW92ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKQEAgLTc0MSw3ICs4NzEsOCBAQAogZXh0ZXJuIGludCBpcGF0aF9kaWFnX2ludXNlOwogCiBpcnFyZXR1cm5fdCBpcGF0aF9pbnRyKGludCBpcnEsIHZvaWQgKmRldmlkKTsKLWludCBpcGF0aF9kZWNvZGVfZXJyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sIGlwYXRoX2Vycl90IGVycik7CitpbnQgaXBhdGhfZGVjb2RlX2VycihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisJCSAgICAgaXBhdGhfZXJyX3QgZXJyKTsKICNpZiBfX0lQQVRIX0lORk8gfHwgX19JUEFUSF9EQkcKIGV4dGVybiBjb25zdCBjaGFyICppcGF0aF9pYmNzdGF0dXNfc3RyW107CiAjZW5kaWYKQEAgLTc2NywxMiArODk4LDIwIEBACiBpbnQgaXBhdGhfc2V0cmN2aGRyc2l6ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1bnNpZ25lZCk7CiBpbnQgaXBhdGhfcmVzZXRfZGV2aWNlKGludCk7CiB2b2lkIGlwYXRoX2dldF9mYXN0c3RhdHModW5zaWduZWQgbG9uZyk7CitpbnQgaXBhdGhfd2FpdF9saW5rc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyLCBpbnQpOwogaW50IGlwYXRoX3NldF9saW5rc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTgpOwogaW50IGlwYXRoX3NldF9tdHUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTE2KTsKIGludCBpcGF0aF9zZXRfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiwgdTgpOwogaW50IGlwYXRoX3NldF9yeF9wb2xfaW52KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggbmV3X3BvbF9pbnYpOwogdm9pZCBpcGF0aF9lbmFibGVfYXJtbGF1bmNoKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogdm9pZCBpcGF0aF9kaXNhYmxlX2FybWxhdW5jaChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfaG9sX2Rvd24oc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Cit2b2lkIGlwYXRoX2hvbF91cChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfaG9sX2V2ZW50KHVuc2lnbmVkIGxvbmcpOwordm9pZCBpcGF0aF90b2dnbGVfcmNsa3JscyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfc2Q3MjIwX2Nscl9pYnBhcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfc2V0X3JlbG9ja19wb2xsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGludCk7Cit2b2lkIGlwYXRoX3NodXRkb3duX3JlbG9ja19wb2xsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogCiAvKiBmb3IgdXNlIGluIHN5c3RlbSBjYWxscywgd2hlcmUgd2Ugd2FudCB0byBrbm93IGRldmljZSB0eXBlLCBldGMuICovCiAjZGVmaW5lIHBvcnRfZnAoZnApICgoc3RydWN0IGlwYXRoX2ZpbGVkYXRhICopKGZwKS0+cHJpdmF0ZV9kYXRhKS0+cGQKQEAgLTc4MCwxMSArOTE5LDE1IEBACiAJKChzdHJ1Y3QgaXBhdGhfZmlsZWRhdGEgKikoZnApLT5wcml2YXRlX2RhdGEpLT5zdWJwb3J0CiAjZGVmaW5lIHRpZGN1cnNvcl9mcChmcCkgXAogCSgoc3RydWN0IGlwYXRoX2ZpbGVkYXRhICopKGZwKS0+cHJpdmF0ZV9kYXRhKS0+dGlkY3Vyc29yCisjZGVmaW5lIHVzZXJfc2RtYV9xdWV1ZV9mcChmcCkgXAorCSgoc3RydWN0IGlwYXRoX2ZpbGVkYXRhICopKGZwKS0+cHJpdmF0ZV9kYXRhKS0+cHEKIAogLyoKICAqIHZhbHVlcyBmb3IgaXBhdGhfZmxhZ3MKICAqLwotLyogVGhlIGNoaXAgaXMgdXAgYW5kIGluaXR0ZWQgKi8KKwkJLyogY2hpcCBjYW4gcmVwb3J0IGxpbmsgbGF0ZW5jeSAoSUIgMS4yKSAqLworI2RlZmluZSBJUEFUSF9IQVNfTElOS19MQVRFTkNZIDB4MQorCQkvKiBUaGUgY2hpcCBpcyB1cCBhbmQgaW5pdHRlZCAqLwogI2RlZmluZSBJUEFUSF9JTklUVEVEICAgICAgIDB4MgogCQkvKiBzZXQgaWYgYW55IHVzZXIgY29kZSBoYXMgc2V0IGtyX3JjdmhkcnNpemUgKi8KICNkZWZpbmUgSVBBVEhfUkNWSERSU1pfU0VUICAweDQKQEAgLTgwOCw2ICs5NTEsOCBAQAogI2RlZmluZSBJUEFUSF9MSU5LVU5LICAgICAgIDB4NDAwCiAJCS8qIFdyaXRlIGNvbWJpbmluZyBmbHVzaCBuZWVkZWQgZm9yIFBJTyAqLwogI2RlZmluZSBJUEFUSF9QSU9fRkxVU0hfV0MgIDB4MTAwMAorCQkvKiBETUEgUmVjZWl2ZSB0YWlsIHBvaW50ZXIgKi8KKyNkZWZpbmUgSVBBVEhfTk9ETUFfUlRBSUwgICAweDIwMDAKIAkJLyogbm8gSUIgY2FibGUsIG9yIG5vIGRldmljZSBvbiBJQiBjYWJsZSAqLwogI2RlZmluZSBJUEFUSF9OT0NBQkxFICAgICAgIDB4NDAwMAogCQkvKiBTdXBwb3J0cyBwb3J0IHplcm8gcGVyIHBhY2tldCByZWNlaXZlIGludGVycnVwdHMgdmlhCkBAIC04MTgsMTYgKzk2MywyNiBAQAogCQkvKiBwYWNrZXQvd29yZCBjb3VudGVycyBhcmUgMzIgYml0LCBlbHNlIHRob3NlIDQgY291bnRlcnMKIAkJICogYXJlIDY0Yml0ICovCiAjZGVmaW5lIElQQVRIXzMyQklUQ09VTlRFUlMgMHgyMDAwMAotCQkvKiBjYW4gbWlzcyBwb3J0MCByeCBpbnRlcnJ1cHRzICovCiAJCS8qIEludGVycnVwdCByZWdpc3RlciBpcyA2NCBiaXRzICovCiAjZGVmaW5lIElQQVRIX0lOVFJFR182NCAgICAgMHg0MDAwMAorCQkvKiBjYW4gbWlzcyBwb3J0MCByeCBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIElQQVRIX0RJU0FCTEVEICAgICAgMHg4MDAwMCAvKiBhZG1pbmlzdHJhdGl2ZWx5IGRpc2FibGVkICovCiAJCS8qIFVzZSBHUElPIGludGVycnVwdHMgZm9yIG5ldyBjb3VudGVycyAqLwogI2RlZmluZSBJUEFUSF9HUElPX0VSUklOVFJTIDB4MTAwMDAwCiAjZGVmaW5lIElQQVRIX1NXQVBfUElPQlVGUyAgMHgyMDAwMDAKKwkJLyogU3VwcG9ydHMgU2VuZCBETUEgKi8KKyNkZWZpbmUgSVBBVEhfSEFTX1NFTkRfRE1BICAweDQwMDAwMAorCQkvKiBTdXBwb3J0cyBTZW5kIENvdW50IChub3QganVzdCB3b3JkIGNvdW50KSBpbiBQQkMgKi8KKyNkZWZpbmUgSVBBVEhfSEFTX1BCQ19DTlQgICAweDgwMDAwMAogCQkvKiBTdXBwcmVzcyBoZWFydGJlYXQsIGV2ZW4gaWYgdHVybmluZyBvZmYgbG9vcGJhY2sgKi8KICNkZWZpbmUgSVBBVEhfTk9fSFJUQlQgICAgICAweDEwMDAwMDAKKyNkZWZpbmUgSVBBVEhfSEFTX1RIUkVTSF9VUERBVEUgMHg0MDAwMDAwCiAjZGVmaW5lIElQQVRIX0hBU19NVUxUX0lCX1NQRUVEIDB4ODAwMDAwMAorI2RlZmluZSBJUEFUSF9JQl9BVVRPTkVHX0lOUFJPRyAweDEwMDAwMDAwCisjZGVmaW5lIElQQVRIX0lCX0FVVE9ORUdfRkFJTEVEIDB4MjAwMDAwMDAKKwkJLyogTGlua2Rvd24tZGlzYWJsZSBpbnRlbnRpb25hbGx5LCBEbyBub3QgYXR0ZW1wdCB0byBicmluZyB1cCAqLworI2RlZmluZSBJUEFUSF9JQl9MSU5LX0RJU0FCTEVEIDB4NDAwMDAwMDAKKyNkZWZpbmUgSVBBVEhfSUJfRk9SQ0VfTk9USUZZIDB4ODAwMDAwMDAgLyogZm9yY2Ugbm90aWZ5IG9uIG5leHQgaWIgY2hhbmdlICovCiAKIC8qIEJpdHMgaW4gR1BJTyBmb3IgdGhlIGFkZGVkIGludGVycnVwdHMgKi8KICNkZWZpbmUgSVBBVEhfR1BJT19QT1JUMF9CSVQgMgpAQCAtODQ2LDEzICsxMDAxLDE4IEBACiAKIC8qIGZyZWUgdXAgYW55IGFsbG9jYXRlZCBkYXRhIGF0IGNsb3NlcyAqLwogdm9pZCBpcGF0aF9mcmVlX2RhdGEoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpkZCk7Ci11MzIgX19pb21lbSAqaXBhdGhfZ2V0cGlvYnVmKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiAqKTsKK3UzMiBfX2lvbWVtICppcGF0aF9nZXRwaW9idWYoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyLCB1MzIgKik7Cit2b2lkIGlwYXRoX2NoZ19waW9hdmFpbGtlcm5lbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIHN0YXJ0LAorCQkJCXVuc2lnbmVkIGxlbiwgaW50IGF2YWlsKTsKK3ZvaWQgaXBhdGhfaW5pdF9pYmE3MjIwX2Z1bmNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogdm9pZCBpcGF0aF9pbml0X2liYTYxMjBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CiB2b2lkIGlwYXRoX2luaXRfaWJhNjExMF9mdW5jcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIHZvaWQgaXBhdGhfZ2V0X2VlcHJvbV9pbmZvKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogaW50IGlwYXRoX3VwZGF0ZV9lZXByb21fbG9nKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CiB2b2lkIGlwYXRoX2luY19lZXByb21fZXJyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGVpZHgsIHUzMiBpbmNyKTsKIHU2NCBpcGF0aF9zbmFwX2NudHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaXBhdGhfY3JlZyk7Cit2b2lkIGlwYXRoX2Rpc2FybV9zZW5kZXJyYnVmcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBpbnQpOwordm9pZCBpcGF0aF9mb3JjZV9waW9fYXZhaWxfdXBkYXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogdm9pZCBzaWduYWxfaWJfZXZlbnQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBlbnVtIGliX2V2ZW50X3R5cGUgZXYpOwogCiAvKgpAQCAtODY0LDYgKzEwMjQsMzQgQEAKICNkZWZpbmUgSVBBVEhfTEVEX0xPRyAyICAvKiBMb2dpY2FsIChsaW5rKSBZRUxMT1cgTEVEICovCiB2b2lkIGlwYXRoX3NldF9sZWRfb3ZlcnJpZGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBpbnQgdmFsKTsKIAorLyogc2VuZCBkbWEgcm91dGluZXMgKi8KK2ludCBzZXR1cF9zZG1hKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordm9pZCB0ZWFyZG93bl9zZG1hKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordm9pZCBpcGF0aF9yZXN0YXJ0X3NkbWEoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Cit2b2lkIGlwYXRoX3NkbWFfaW50cihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK2ludCBpcGF0aF9zZG1hX3ZlcmJzX3NlbmQoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqLAorCQkJICB1MzIsIHN0cnVjdCBpcGF0aF92ZXJic190eHJlcSAqKTsKKy8qIGlwYXRoX3NkbWFfbG9jayBzaG91bGQgYmUgbG9ja2VkIGJlZm9yZSBjYWxsaW5nIHRoaXMuICovCitpbnQgaXBhdGhfc2RtYV9tYWtlX3Byb2dyZXNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CisKKy8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGlwYXRoX3NkbWFfbG9jayAqLworc3RhdGljIGlubGluZSB1MTYgaXBhdGhfc2RtYV9kZXNjcV9mcmVlY250KGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250IC0KKwkJKGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2FkZGVkIC0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfcmVtb3ZlZCkgLQorCQkxIC0gZGQtPmlwYXRoX3NkbWFfZGVzY19ucmVzZXJ2ZWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGF0aF9zZG1hX2Rlc2NfcmVzZXJ2ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiBjbnQpCit7CisJZGQtPmlwYXRoX3NkbWFfZGVzY19ucmVzZXJ2ZWQgKz0gY250OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBhdGhfc2RtYV9kZXNjX3VucmVzZXJ2ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiBjbnQpCit7CisJZGQtPmlwYXRoX3NkbWFfZGVzY19ucmVzZXJ2ZWQgLT0gY250OworfQorCiAvKgogICogbnVtYmVyIG9mIHdvcmRzIHVzZWQgZm9yIHByb3RvY29sIGhlYWRlciBpZiBub3Qgc2V0IGJ5IGlwYXRoX3VzZXJpbml0KCk7CiAgKi8KQEAgLTg3NCw2ICsxMDYyLDggQEAKIHZvaWQgaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzX29uX2Nsb3NlKHN0cnVjdCBwYWdlICoqLCBzaXplX3QpOwogaW50IGlwYXRoX2VlcHJvbV9yZWFkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHU4LCB2b2lkICosIGludCk7CiBpbnQgaXBhdGhfZWVwcm9tX3dyaXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHU4LCBjb25zdCB2b2lkICosIGludCk7CitpbnQgaXBhdGhfdGVtcHNlbnNlX3JlYWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTggcmVnbnVtKTsKK2ludCBpcGF0aF90ZW1wc2Vuc2Vfd3JpdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTggcmVnbnVtLCB1OCBkYXRhKTsKIAogLyogdGhlc2UgYXJlIHVzZWQgZm9yIHRoZSByZWdpc3RlcnMgdGhhdCB2YXJ5IHdpdGggcG9ydCAqLwogdm9pZCBpcGF0aF93cml0ZV9rcmVnX3BvcnQoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaXBhdGhfa3JlZywKQEAgLTg5MCw4ICsxMDgwLDcgQEAKIAogLyoKICAqIEF0IHRoZSBtb21lbnQsIG5vbmUgb2YgdGhlIHMtcmVnaXN0ZXJzIGFyZSB3cml0YWJsZSwgc28gbm8KLSAqIGlwYXRoX3dyaXRlX3NyZWcoKSwgYW5kIG5vbmUgb2YgdGhlIGMtcmVnaXN0ZXJzIGFyZSB3cml0YWJsZSwgc28gbm8KLSAqIGlwYXRoX3dyaXRlX2NyZWcoKS4KKyAqIGlwYXRoX3dyaXRlX3NyZWcoKS4KICAqLwogCiAvKioKQEAgLTEwMDAsNiArMTE4OSwyNyBAQAogCQkJCXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGlwYXRoX2dldF9oZHJxdGFpbChjb25zdCBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkKQoreworCWNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXUzMiBoZHJxdGFpbDsKKworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9OT0RNQV9SVEFJTCkgeworCQlfX2xlMzIgKnJoZl9hZGRyOworCQl1MzIgc2VxOworCisJCXJoZl9hZGRyID0gKF9fbGUzMiAqKSBwZC0+cG9ydF9yY3ZoZHJxICsKKwkJCXBkLT5wb3J0X2hlYWQgKyBkZC0+aXBhdGhfcmhmX29mZnNldDsKKwkJc2VxID0gaXBhdGhfaGRyZ2V0X3NlcShyaGZfYWRkcik7CisJCWhkcnF0YWlsID0gcGQtPnBvcnRfaGVhZDsKKwkJaWYgKHNlcSA9PSBwZC0+cG9ydF9zZXFfY250KQorCQkJaGRycXRhaWwrKzsKKwl9IGVsc2UKKwkJaGRycXRhaWwgPSBpcGF0aF9nZXRfcmN2aGRydGFpbChwZCk7CisKKwlyZXR1cm4gaGRycXRhaWw7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTY0IGlwYXRoX3JlYWRfaXJlZyhjb25zdCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2tyZWcgcikKIHsKIAlyZXR1cm4gKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOVFJFR182NCkgPwpAQCAtMTAyOCw2ICsxMjM4LDIxIEBACiB9CiAKIC8qCisgKiBmcm9tIGNvbnRlbnRzIG9mIElCQ1N0YXR1cyAob3IgYSBzYXZlZCBjb3B5KSwgcmV0dXJuIGxvZ2ljYWwgbGluayBzdGF0ZQorICogY29tYmluYXRpb24gb2YgbGluayBzdGF0ZSBhbmQgbGlua3RyYWluaW5nIHN0YXRlIChkb3duLCBhY3RpdmUsIGluaXQsCisgKiBhcm0sIGV0Yy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgaXBhdGhfaWJfc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1NjQgaWJjcykKK3sKKwl1MzIgaWJzOworCWlicyA9ICh1MzIpKGliY3MgPj4gSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSAmCisJCWRkLT5pYmNzX2x0c19tYXNrOworCWlicyB8PSAodTMyKShpYmNzICYKKwkJKElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSyA8PCBkZC0+aWJjc19sc19zaGlmdCkpOworCXJldHVybiBpYnM7Cit9CisKKy8qCiAgKiBzeXNmcyBpbnRlcmZhY2UuCiAgKi8KIApAQCAtMTA1Miw2ICsxMjc3LDcgQEAKIGRtYV9hZGRyX3QgaXBhdGhfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZywKIAkJCSAgc2l6ZV90LCBpbnQpOwogZG1hX2FkZHJfdCBpcGF0aF9tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICosIHZvaWQgKiwgc2l6ZV90LCBpbnQpOworY29uc3QgY2hhciAqaXBhdGhfZ2V0X3VuaXRfbmFtZShpbnQgdW5pdCk7CiAKIC8qCiAgKiBGbHVzaCB3cml0ZSBjb21iaW5pbmcgc3RvcmUgYnVmZmVycyAoaWYgcHJlc2VudCkgYW5kIHBlcmZvcm0gYSB3cml0ZQpAQCAtMTA2NCwxMSArMTI5MCw4IEBACiAjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGlwYXRoX2RlYnVnOyAvKiBkZWJ1Z2dpbmcgYml0IG1hc2sgKi8KLQotI2RlZmluZSBJUEFUSF9NQVhfUEFSSVRZX0FUVEVNUFRTIDEwMDAwIC8qIG1heCB0aW1lcyB0byB0cnkgcmVjb3ZlcnkgKi8KLQotY29uc3QgY2hhciAqaXBhdGhfZ2V0X3VuaXRfbmFtZShpbnQgdW5pdCk7Ci0KK2V4dGVybiB1bnNpZ25lZCBpcGF0aF9saW5rcmVjb3Zlcnk7CitleHRlcm4gdW5zaWduZWQgaXBhdGhfbXR1NDA5NjsKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggaXBhdGhfbXV0ZXg7CiAKICNkZWZpbmUgSVBBVEhfRFJWX05BTUUJCSJpYl9pcGF0aCIKQEAgLTEwOTUsNyArMTMxOCw3IEBACiAKICMgZGVmaW5lIF9fSVBBVEhfREJHX1dISUNIKHdoaWNoLGZtdCwuLi4pIFwKIAlkbyB7IFwKLQkJaWYodW5saWtlbHkoaXBhdGhfZGVidWcmKHdoaWNoKSkpIFwKKwkJaWYgKHVubGlrZWx5KGlwYXRoX2RlYnVnICYgKHdoaWNoKSkpIFwKIAkJCXByaW50ayhLRVJOX0RFQlVHIElQQVRIX0RSVl9OQU1FICI6ICVzOiAiIGZtdCwgXAogCQkJICAgICAgIF9fZnVuY19fLCMjX19WQV9BUkdTX18pOyBcCiAJfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCmluZGV4IGQ5OGQ1ZjEuLjFmZjQ2YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTE0Niw2ICsxNDYsMTUgQEAKIAlyZXR1cm4gcmVwbHkoc21wKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2xpbmtfd2lkdGhfZW5hYmxlZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiB3KQoreworCSh2b2lkKSBkZC0+aXBhdGhfZl9zZXRfaWJfY2ZnKGRkLCBJUEFUSF9JQl9DRkdfTFdJRF9FTkIsIHcpOworfQorCitzdGF0aWMgdm9pZCBzZXRfbGlua19zcGVlZF9lbmFibGVkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIHMpCit7CisJKHZvaWQpIGRkLT5pcGF0aF9mX3NldF9pYl9jZmcoZGQsIElQQVRIX0lCX0NGR19TUERfRU5CLCBzKTsKK30KIAogc3RhdGljIGludCBnZXRfb3ZlcnJ1bnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CkBAIC0yMjYsNiArMjM1LDcgQEAKIAkJCQkgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKIAlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaXAgPSAoc3RydWN0IGliX3BvcnRfaW5mbyAqKXNtcC0+ZGF0YTsKIAl1MTYgbGlkOwogCXU4IGliY3N0YXQ7CkBAIC0yMzksNiArMjQ5LDcgQEAKIAl9CiAKIAlkZXYgPSB0b19pZGV2KGliZGV2KTsKKwlkZCA9IGRldi0+ZGQ7CiAKIAkvKiBDbGVhciBhbGwgZmllbGRzLiAgT25seSBzZXQgdGhlIG5vbi16ZXJvIGZpZWxkcy4gKi8KIAltZW1zZXQoc21wLT5kYXRhLCAwLCBzaXplb2Yoc21wLT5kYXRhKSk7CkBAIC0yNDgsMjUgKzI1OSwyOCBAQAogCSAgICBkZXYtPm1rZXlwcm90ID09IDApCiAJCXBpcC0+bWtleSA9IGRldi0+bWtleTsKIAlwaXAtPmdpZF9wcmVmaXggPSBkZXYtPmdpZF9wcmVmaXg7Ci0JbGlkID0gZGV2LT5kZC0+aXBhdGhfbGlkOworCWxpZCA9IGRkLT5pcGF0aF9saWQ7CiAJcGlwLT5saWQgPSBsaWQgPyBjcHVfdG9fYmUxNihsaWQpIDogSUJfTElEX1BFUk1JU1NJVkU7CiAJcGlwLT5zbV9saWQgPSBjcHVfdG9fYmUxNihkZXYtPnNtX2xpZCk7CiAJcGlwLT5jYXBfbWFzayA9IGNwdV90b19iZTMyKGRldi0+cG9ydF9jYXBfZmxhZ3MpOwogCS8qIHBpcC0+ZGlhZ19jb2RlOyAqLwogCXBpcC0+bWtleV9sZWFzZV9wZXJpb2QgPSBjcHVfdG9fYmUxNihkZXYtPm1rZXlfbGVhc2VfcGVyaW9kKTsKIAlwaXAtPmxvY2FsX3BvcnRfbnVtID0gcG9ydDsKLQlwaXAtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IGRldi0+bGlua193aWR0aF9lbmFibGVkOwotCXBpcC0+bGlua193aWR0aF9zdXBwb3J0ZWQgPSAzOwkvKiAxeCBvciA0eCAqLwotCXBpcC0+bGlua193aWR0aF9hY3RpdmUgPSAyOwkvKiA0eCAqLwotCXBpcC0+bGlua3NwZWVkX3BvcnRzdGF0ZSA9IDB4MTA7CS8qIDIuNUdicHMgKi8KLQlpYmNzdGF0ID0gZGV2LT5kZC0+aXBhdGhfbGFzdGliY3N0YXQ7Ci0JcGlwLT5saW5rc3BlZWRfcG9ydHN0YXRlIHw9ICgoaWJjc3RhdCA+PiA0KSAmIDB4MykgKyAxOworCXBpcC0+bGlua193aWR0aF9lbmFibGVkID0gZGQtPmlwYXRoX2xpbmtfd2lkdGhfZW5hYmxlZDsKKwlwaXAtPmxpbmtfd2lkdGhfc3VwcG9ydGVkID0gZGQtPmlwYXRoX2xpbmtfd2lkdGhfc3VwcG9ydGVkOworCXBpcC0+bGlua193aWR0aF9hY3RpdmUgPSBkZC0+aXBhdGhfbGlua193aWR0aF9hY3RpdmU7CisJcGlwLT5saW5rc3BlZWRfcG9ydHN0YXRlID0gZGQtPmlwYXRoX2xpbmtfc3BlZWRfc3VwcG9ydGVkIDw8IDQ7CisJaWJjc3RhdCA9IGRkLT5pcGF0aF9sYXN0aWJjc3RhdDsKKwkvKiBtYXAgTGlua1N0YXRlIHRvIElCIHBvcnRpbmZvIHZhbHVlcy4gICovCisJcGlwLT5saW5rc3BlZWRfcG9ydHN0YXRlIHw9IGlwYXRoX2liX2xpbmtzdGF0ZShkZCwgaWJjc3RhdCkgKyAxOworCiAJcGlwLT5wb3J0cGh5c3N0YXRlX2xpbmtkb3duID0KLQkJKGlwYXRoX2N2dF9waHlzcG9ydHN0YXRlW2liY3N0YXQgJiAweGZdIDw8IDQpIHwKLQkJKGdldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkKSA/IDEgOiAyKTsKLQlwaXAtPm1rZXlwcm90X3Jlc3ZfbG1jID0gKGRldi0+bWtleXByb3QgPDwgNikgfCBkZXYtPmRkLT5pcGF0aF9sbWM7Ci0JcGlwLT5saW5rc3BlZWRhY3RpdmVfZW5hYmxlZCA9IDB4MTE7CS8qIDIuNUdicHMsIDIuNUdicHMgKi8KLQlzd2l0Y2ggKGRldi0+ZGQtPmlwYXRoX2libXR1KSB7CisJCShpcGF0aF9jdnRfcGh5c3BvcnRzdGF0ZVtpYmNzdGF0ICYgZGQtPmliY3NfbHRzX21hc2tdIDw8IDQpIHwKKwkJKGdldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZCkgPyAxIDogMik7CisJcGlwLT5ta2V5cHJvdF9yZXN2X2xtYyA9IChkZXYtPm1rZXlwcm90IDw8IDYpIHwgZGQtPmlwYXRoX2xtYzsKKwlwaXAtPmxpbmtzcGVlZGFjdGl2ZV9lbmFibGVkID0gKGRkLT5pcGF0aF9saW5rX3NwZWVkX2FjdGl2ZSA8PCA0KSB8CisJCWRkLT5pcGF0aF9saW5rX3NwZWVkX2VuYWJsZWQ7CisJc3dpdGNoIChkZC0+aXBhdGhfaWJtdHUpIHsKIAljYXNlIDQwOTY6CiAJCW10dSA9IElCX01UVV80MDk2OwogCQlicmVhazsKQEAgLTI5MiwxOSArMzA2LDE1IEBACiAJLyogcGlwLT52bF9hcmJfaGlnaF9jYXA7IC8vIG9ubHkgb25lIFZMICovCiAJLyogcGlwLT52bF9hcmJfbG93X2NhcDsgLy8gb25seSBvbmUgVkwgKi8KIAkvKiBJbml0VHlwZVJlcGx5ID0gMCAqLwotCS8qCi0JICogTm90ZTogdGhlIGNoaXBzIHN1cHBvcnQgYSBtYXhpbXVtIE1UVSBvZiA0MDk2LCBidXQgdGhlIGRyaXZlcgotCSAqIGhhc24ndCBpbXBsZW1lbnRlZCB0aGlzIGZlYXR1cmUgeWV0LCBzbyBzZXQgdGhlIG1heGltdW0gdmFsdWUKLQkgKiB0byAyMDQ4LgotCSAqLwotCXBpcC0+aW5pdHR5cGVyZXBseV9tdHVjYXAgPSBJQl9NVFVfMjA0ODsKLQkvLyBIQ0FzIGlnbm9yZSBWTFN0YWxsQ291bnQgYW5kIEhPUUxpZmUKKwkvKiBvdXIgbXR1IGNhcCBkZXBlbmRzIG9uIHdoZXRoZXIgNEsgTVRVIGVuYWJsZWQgb3Igbm90ICovCisJcGlwLT5pbml0dHlwZXJlcGx5X210dWNhcCA9IGlwYXRoX210dTQwOTYgPyBJQl9NVFVfNDA5NiA6IElCX01UVV8yMDQ4OworCS8qIEhDQXMgaWdub3JlIFZMU3RhbGxDb3VudCBhbmQgSE9RTGlmZSAqLwogCS8qIHBpcC0+dmxzdGFsbGNudF9ob3FsaWZlOyAqLwogCXBpcC0+b3BlcmF0aW9uYWx2bF9wZWlfcGVvX2ZwaV9mcG8gPSAweDEwOwkvKiBPVkxzID0gMSAqLwogCXBpcC0+bWtleV92aW9sYXRpb25zID0gY3B1X3RvX2JlMTYoZGV2LT5ta2V5X3Zpb2xhdGlvbnMpOwogCS8qIFBfS2V5VmlvbGF0aW9ucyBhcmUgY291bnRlZCBieSBoYXJkd2FyZS4gKi8KIAlwaXAtPnBrZXlfdmlvbGF0aW9ucyA9Ci0JCWNwdV90b19iZTE2KChpcGF0aF9nZXRfY3JfZXJycGtleShkZXYtPmRkKSAtCisJCWNwdV90b19iZTE2KChpcGF0aF9nZXRfY3JfZXJycGtleShkZCkgLQogCQkJICAgICBkZXYtPnpfcGtleV92aW9sYXRpb25zKSAmIDB4RkZGRik7CiAJcGlwLT5xa2V5X3Zpb2xhdGlvbnMgPSBjcHVfdG9fYmUxNihkZXYtPnFrZXlfdmlvbGF0aW9ucyk7CiAJLyogT25seSB0aGUgaGFyZHdhcmUgR1VJRCBpcyBzdXBwb3J0ZWQgZm9yIG5vdyAqLwpAQCAtMzEzLDEwICszMjMsMTcgQEAKIAkvKiAzMi43NjggdXNlYy4gcmVzcG9uc2UgdGltZSAoZ3Vlc3NpbmcpICovCiAJcGlwLT5yZXN2X3Jlc3B0aW1ldmFsdWUgPSAzOwogCXBpcC0+bG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9ycyA9Ci0JCShnZXRfcGh5ZXJydGhyZXNob2xkKGRldi0+ZGQpIDw8IDQpIHwKLQkJZ2V0X292ZXJydW50aHJlc2hvbGQoZGV2LT5kZCk7CisJCShnZXRfcGh5ZXJydGhyZXNob2xkKGRkKSA8PCA0KSB8CisJCWdldF9vdmVycnVudGhyZXNob2xkKGRkKTsKIAkvKiBwaXAtPm1heF9jcmVkaXRfaGludDsgKi8KLQkvKiBwaXAtPmxpbmtfcm91bmR0cmlwX2xhdGVuY3lbM107ICovCisJaWYgKGRldi0+cG9ydF9jYXBfZmxhZ3MgJiBJQl9QT1JUX0xJTktfTEFURU5DWV9TVVApIHsKKwkJdTMyIHY7CisKKwkJdiA9IGRkLT5pcGF0aF9mX2dldF9pYl9jZmcoZGQsIElQQVRIX0lCX0NGR19MSU5LTEFURU5DWSk7CisJCXBpcC0+bGlua19yb3VuZHRyaXBfbGF0ZW5jeVswXSA9IHYgPj4gMTY7CisJCXBpcC0+bGlua19yb3VuZHRyaXBfbGF0ZW5jeVsxXSA9IHYgPj4gODsKKwkJcGlwLT5saW5rX3JvdW5kdHJpcF9sYXRlbmN5WzJdID0gdjsKKwl9CiAKIAlyZXQgPSByZXBseShzbXApOwogCkBAIC00NDQsMTkgKzQ2MSwyNSBAQAogCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOwogCX0KIAotCS8qIE9ubHkgNHggc3VwcG9ydGVkIGJ1dCBhbGxvdyAxeCBvciA0eCB0byBiZSBzZXQgKHNlZSAxNC4yLjYuNikuICovCisJLyogQWxsb3cgMXggb3IgNHggdG8gYmUgc2V0IChzZWUgMTQuMi42LjYpLiAqLwogCWx3ZSA9IHBpcC0+bGlua193aWR0aF9lbmFibGVkOwotCWlmICgobHdlID49IDQgJiYgbHdlIDw9IDgpIHx8IChsd2UgPj0gMHhDICYmIGx3ZSA8PSAweEZFKSkKLQkJZ290byBlcnI7Ci0JaWYgKGx3ZSA9PSAweEZGKQotCQlkZXYtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IDM7CS8qIDF4IG9yIDR4ICovCi0JZWxzZSBpZiAobHdlKQotCQlkZXYtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IGx3ZTsKKwlpZiAobHdlKSB7CisJCWlmIChsd2UgPT0gMHhGRikKKwkJCWx3ZSA9IGRkLT5pcGF0aF9saW5rX3dpZHRoX3N1cHBvcnRlZDsKKwkJZWxzZSBpZiAobHdlID49IDE2IHx8IChsd2UgJiB+ZGQtPmlwYXRoX2xpbmtfd2lkdGhfc3VwcG9ydGVkKSkKKwkJCWdvdG8gZXJyOworCQlzZXRfbGlua193aWR0aF9lbmFibGVkKGRkLCBsd2UpOworCX0KIAotCS8qIE9ubHkgMi41IEdicyBzdXBwb3J0ZWQuICovCisJLyogQWxsb3cgMi41IG9yIDUuMCBHYnMuICovCiAJbHNlID0gcGlwLT5saW5rc3BlZWRhY3RpdmVfZW5hYmxlZCAmIDB4RjsKLQlpZiAobHNlID49IDIgJiYgbHNlIDw9IDB4RSkKLQkJZ290byBlcnI7CisJaWYgKGxzZSkgeworCQlpZiAobHNlID09IDE1KQorCQkJbHNlID0gZGQtPmlwYXRoX2xpbmtfc3BlZWRfc3VwcG9ydGVkOworCQllbHNlIGlmIChsc2UgPj0gOCB8fCAobHNlICYgfmRkLT5pcGF0aF9saW5rX3NwZWVkX3N1cHBvcnRlZCkpCisJCQlnb3RvIGVycjsKKwkJc2V0X2xpbmtfc3BlZWRfZW5hYmxlZChkZCwgbHNlKTsKKwl9CiAKIAkvKiBTZXQgbGluayBkb3duIGRlZmF1bHQgc3RhdGUuICovCiAJc3dpdGNoIChwaXAtPnBvcnRwaHlzc3RhdGVfbGlua2Rvd24gJiAweEYpIHsKQEAgLTQ5MSw2ICs1MTQsOCBAQAogCQltdHUgPSAyMDQ4OwogCQlicmVhazsKIAljYXNlIElCX01UVV80MDk2OgorCQlpZiAoIWlwYXRoX210dTQwOTYpCisJCQlnb3RvIGVycjsKIAkJbXR1ID0gNDA5NjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTU1NSwxMCArNTgwLDcgQEAKIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIElCX1BPUlRfRE9XTjoKIAkJaWYgKGxzdGF0ZSA9PSAwKQotCQkJaWYgKGdldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZCkpCi0JCQkJbHN0YXRlID0gSVBBVEhfSUJfTElOS0RPV05fU0xFRVA7Ci0JCQllbHNlCi0JCQkJbHN0YXRlID0gSVBBVEhfSUJfTElOS0RPV047CisJCQlsc3RhdGUgPSBJUEFUSF9JQl9MSU5LRE9XTl9PTkxZOwogCQllbHNlIGlmIChsc3RhdGUgPT0gMSkKIAkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOX1NMRUVQOwogCQllbHNlIGlmIChsc3RhdGUgPT0gMikKQEAgLTU2OCw2ICs1OTAsMTIgQEAKIAkJZWxzZQogCQkJZ290byBlcnI7CiAJCWlwYXRoX3NldF9saW5rc3RhdGUoZGQsIGxzdGF0ZSk7CisJCWlmIChsc3RhdGUgPT0gSVBBVEhfSUJfTElOS0RPV05fRElTQUJMRSkgeworCQkJcmV0ID0gSUJfTUFEX1JFU1VMVF9TVUNDRVNTIHwgSUJfTUFEX1JFU1VMVF9DT05TVU1FRDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpcGF0aF93YWl0X2xpbmtzdGF0ZShkZCwgSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LQVJNRUQgfAorCQkJCUlQQVRIX0xJTktBQ1RJVkUsIDEwMDApOwogCQlicmVhazsKIAljYXNlIElCX1BPUlRfQVJNRUQ6CiAJCWlwYXRoX3NldF9saW5rc3RhdGUoZGQsIElQQVRIX0lCX0xJTktBUk0pOwpAQCAtOTQ5LDEwICs5NzcsMTQgQEAKIAkgKiBuc2VjLiAgMCA9PSA0IG5zZWMuLCAxID09IDggbnNlYy4sIC4uLiwgMjU1ID09IDEwMjAgbnNlYy4gIFNhbXBsZQogCSAqIGludGVydmFscyBhcmUgY291bnRlZCBpbiB0aWNrcy4gIFNpbmNlIHdlIHVzZSBMaW51eCB0aW1lcnMsIHRoYXQKIAkgKiBjb3VudCBpbiBqaWZmaWVzLCB3ZSBjYW4ndCBzYW1wbGUgZm9yIGxlc3MgdGhhbiAxMDAwIHRpY2tzIGlmIEhaCi0JICogPT0gMTAwMCAoNDAwMCB0aWNrcyBpZiBIWiBpcyAyNTApLgorCSAqID09IDEwMDAgKDQwMDAgdGlja3MgaWYgSFogaXMgMjUwKS4gIGxpbmtfc3BlZWRfYWN0aXZlIHJldHVybnMgMiBmb3IKKwkgKiBERFIsIDEgZm9yIFNEUiwgc2V0IHRoZSB0aWNrIHRvIDEgZm9yIEREUiwgMCBmb3IgU0RSIG9uIGNoaXBzIHRoYXQKKwkgKiBoYXZlIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGRlbGF5aW5nIHBhY2tldHMuCiAJICovCi0JLyogWFhYIFRoaXMgaXMgV1JPTkcuICovCi0JcC0+dGljayA9IDI1MDsJCS8qIDEgdXNlYy4gKi8KKwlpZiAoY3JwLT5jcl9wc3N0YXQpCisJCXAtPnRpY2sgPSBkZXYtPmRkLT5pcGF0aF9saW5rX3NwZWVkX2FjdGl2ZSAtIDE7CisJZWxzZQorCQlwLT50aWNrID0gMjUwOwkJLyogMSB1c2VjLiAqLwogCXAtPmNvdW50ZXJfd2lkdGggPSA0OwkvKiAzMiBiaXQgY291bnRlcnMgKi8KIAlwLT5jb3VudGVyX21hc2swXzkgPSBDT1VOVEVSX01BU0swXzk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CkBAIC0xMzY1LDcgKzEzOTcsOCBAQAogCX0KIAogCS8qIElzIHRoZSBta2V5IGluIHRoZSBwcm9jZXNzIG9mIGV4cGlyaW5nPyAqLwotCWlmIChkZXYtPm1rZXlfbGVhc2VfdGltZW91dCAmJiBqaWZmaWVzID49IGRldi0+bWtleV9sZWFzZV90aW1lb3V0KSB7CisJaWYgKGRldi0+bWtleV9sZWFzZV90aW1lb3V0ICYmCisJICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZGV2LT5ta2V5X2xlYXNlX3RpbWVvdXQpKSB7CiAJCS8qIENsZWFyIHRpbWVvdXQgYW5kIG1rZXkgcHJvdGVjdGlvbiBmaWVsZC4gKi8KIAkJZGV2LT5ta2V5X2xlYXNlX3RpbWVvdXQgPSAwOwogCQlkZXYtPm1rZXlwcm90ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKaW5kZXggODBkYzYyMy4uZGQ1YjZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTMyOSw4ICszMjksOSBAQAogLyoqCiAgKiBpcGF0aF9yZXNldF9xcCAtIGluaXRpYWxpemUgdGhlIFFQIHN0YXRlIHRvIHRoZSByZXNldCBzdGF0ZQogICogQHFwOiB0aGUgUVAgdG8gcmVzZXQKKyAqIEB0eXBlOiB0aGUgUVAgdHlwZQogICovCi1zdGF0aWMgdm9pZCBpcGF0aF9yZXNldF9xcChzdHJ1Y3QgaXBhdGhfcXAgKnFwKQorc3RhdGljIHZvaWQgaXBhdGhfcmVzZXRfcXAoc3RydWN0IGlwYXRoX3FwICpxcCwgZW51bSBpYl9xcF90eXBlIHR5cGUpCiB7CiAJcXAtPnJlbW90ZV9xcG4gPSAwOwogCXFwLT5xa2V5ID0gMDsKQEAgLTMzOSwxMCArMzQwLDExIEBACiAJcXAtPnNfZmxhZ3MgJj0gSVBBVEhfU19TSUdOQUxfUkVRX1dSOwogCXFwLT5zX2hkcndvcmRzID0gMDsKIAlxcC0+c193cWUgPSBOVUxMOworCXFwLT5zX3BrdF9kZWxheSA9IDA7CiAJcXAtPnNfcHNuID0gMDsKIAlxcC0+cl9wc24gPSAwOwogCXFwLT5yX21zbiA9IDA7Ci0JaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1JDKSB7CisJaWYgKHR5cGUgPT0gSUJfUVBUX1JDKSB7CiAJCXFwLT5zX3N0YXRlID0gSUJfT1BDT0RFX1JDX1NFTkRfTEFTVDsKIAkJcXAtPnJfc3RhdGUgPSBJQl9PUENPREVfUkNfU0VORF9MQVNUOwogCX0gZWxzZSB7CkBAIC0zOTEsNyArMzkzLDYgQEAKIAkJICBxcC0+aWJxcC5xcF9udW0sIHFwLT5yZW1vdGVfcXBuLCBlcnIpOwogCiAJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7Ci0JLyogWFhYIFdoYXQgaWYgaXRzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgdGltZW91dCBjb2RlPyAqLwogCWlmICghbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCiAJCWxpc3RfZGVsX2luaXQoJnFwLT50aW1lcndhaXQpOwogCWlmICghbGlzdF9lbXB0eSgmcXAtPnBpb3dhaXQpKQpAQCAtNDE0LDcgKzQxNSw3IEBACiAJCXdjLndyX2lkID0gcXAtPnJfd3JfaWQ7CiAJCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7CiAJCXdjLnN0YXR1cyA9IGVycjsKLQkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCAmd2MsIDEpOworCQlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywgMSk7CiAJfQogCXdjLnN0YXR1cyA9IElCX1dDX1dSX0ZMVVNIX0VSUjsKIApAQCAtNTE1LDEzICs1MTYsMTMgQEAKIAkJCWdvdG8gaW52YWw7CiAKIAkvKgotCSAqIE5vdGU6IHRoZSBjaGlwcyBzdXBwb3J0IGEgbWF4aW11bSBNVFUgb2YgNDA5NiwgYnV0IHRoZSBkcml2ZXIKLQkgKiBoYXNuJ3QgaW1wbGVtZW50ZWQgdGhpcyBmZWF0dXJlIHlldCwgc28gZG9uJ3QgYWxsb3cgUGF0aCBNVFUKLQkgKiB2YWx1ZXMgZ3JlYXRlciB0aGFuIDIwNDguCisJICogZG9uJ3QgYWxsb3cgaW52YWxpZCBQYXRoIE1UVSB2YWx1ZXMgb3IgZ3JlYXRlciB0aGFuIDIwNDgKKwkgKiB1bmxlc3Mgd2UgYXJlIGNvbmZpZ3VyZWQgZm9yIGEgNEtCIE1UVQogCSAqLwotCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QQVRIX01UVSkKLQkJaWYgKGF0dHItPnBhdGhfbXR1ID4gSUJfTVRVXzIwNDgpCi0JCQlnb3RvIGludmFsOworCWlmICgoYXR0cl9tYXNrICYgSUJfUVBfUEFUSF9NVFUpICYmCisJCShpYl9tdHVfZW51bV90b19pbnQoYXR0ci0+cGF0aF9tdHUpID09IC0xIHx8CisJCShhdHRyLT5wYXRoX210dSA+IElCX01UVV8yMDQ4ICYmICFpcGF0aF9tdHU0MDk2KSkpCisJCWdvdG8gaW52YWw7CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEFUSF9NSUdfU1RBVEUpCiAJCWlmIChhdHRyLT5wYXRoX21pZ19zdGF0ZSAhPSBJQl9NSUdfTUlHUkFURUQgJiYKQEAgLTUzNCw3ICs1MzUsNyBAQAogCiAJc3dpdGNoIChuZXdfc3RhdGUpIHsKIAljYXNlIElCX1FQU19SRVNFVDoKLQkJaXBhdGhfcmVzZXRfcXAocXApOworCQlpcGF0aF9yZXNldF9xcChxcCwgaWJxcC0+cXBfdHlwZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9RUFNfRVJSOgpAQCAtNTYzLDggKzU2NCwxMCBAQAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BQ0NFU1NfRkxBR1MpCiAJCXFwLT5xcF9hY2Nlc3NfZmxhZ3MgPSBhdHRyLT5xcF9hY2Nlc3NfZmxhZ3M7CiAKLQlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQVYpCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FWKSB7CiAJCXFwLT5yZW1vdGVfYWhfYXR0ciA9IGF0dHItPmFoX2F0dHI7CisJCXFwLT5zX2RtdWx0ID0gaXBhdGhfaWJfcmF0ZV90b19tdWx0KGF0dHItPmFoX2F0dHIuc3RhdGljX3JhdGUpOworCX0KIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QQVRIX01UVSkKIAkJcXAtPnBhdGhfbXR1ID0gYXR0ci0+cGF0aF9tdHU7CkBAIC02NDcsNyArNjUwLDcgQEAKIAlhdHRyLT5wb3J0X251bSA9IDE7CiAJYXR0ci0+dGltZW91dCA9IHFwLT50aW1lb3V0OwogCWF0dHItPnJldHJ5X2NudCA9IHFwLT5zX3JldHJ5X2NudDsKLQlhdHRyLT5ybnJfcmV0cnkgPSBxcC0+c19ybnJfcmV0cnk7CisJYXR0ci0+cm5yX3JldHJ5ID0gcXAtPnNfcm5yX3JldHJ5X2NudDsKIAlhdHRyLT5hbHRfcG9ydF9udW0gPSAwOwogCWF0dHItPmFsdF90aW1lb3V0ID0gMDsKIApAQCAtNzQ3LDIyICs3NTAsMzMgQEAKIAlzaXplX3Qgc3o7CiAJc3RydWN0IGliX3FwICpyZXQ7CiAKLQlpZiAoaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlID4gaWJfaXBhdGhfbWF4X3NnZXMgfHwKLQkgICAgaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlID4gaWJfaXBhdGhfbWF4X3NnZXMgfHwKLQkgICAgaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgPiBpYl9pcGF0aF9tYXhfcXBfd3JzIHx8Ci0JICAgIGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyID4gaWJfaXBhdGhfbWF4X3FwX3dycykgewotCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCWlmIChpbml0X2F0dHItPmNyZWF0ZV9mbGFncykgeworCQlyZXQgPSBFUlJfUFRSKC1FSU5WQUwpOwogCQlnb3RvIGJhaWw7CiAJfQogCi0JaWYgKGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSArCi0JICAgIGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSArCi0JICAgIGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyICsKLQkgICAgaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgPT0gMCkgeworCWlmIChpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgPiBpYl9pcGF0aF9tYXhfc2dlcyB8fAorCSAgICBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciA+IGliX2lwYXRoX21heF9xcF93cnMpIHsKIAkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJZ290byBiYWlsOwogCX0KIAorCS8qIENoZWNrIHJlY2VpdmUgcXVldWUgcGFyYW1ldGVycyBpZiBubyBTUlEgaXMgc3BlY2lmaWVkLiAqLworCWlmICghaW5pdF9hdHRyLT5zcnEpIHsKKwkJaWYgKGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSA+IGliX2lwYXRoX21heF9zZ2VzIHx8CisJCSAgICBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciA+IGliX2lwYXRoX21heF9xcF93cnMpIHsKKwkJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaWYgKGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSArCisJCSAgICBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciArCisJCSAgICBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2UgKworCQkgICAgaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgPT0gMCkgeworCQkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKwogCXN3aXRjaCAoaW5pdF9hdHRyLT5xcF90eXBlKSB7CiAJY2FzZSBJQl9RUFRfVUM6CiAJY2FzZSBJQl9RUFRfUkM6CkBAIC04MzksNyArODUzLDggQEAKIAkJCWdvdG8gYmFpbF9xcDsKIAkJfQogCQlxcC0+aXAgPSBOVUxMOwotCQlpcGF0aF9yZXNldF9xcChxcCk7CisJCXFwLT5zX3R4ID0gTlVMTDsKKwkJaXBhdGhfcmVzZXRfcXAocXAsIGluaXRfYXR0ci0+cXBfdHlwZSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTk0NCwxMiArOTU5LDIwIEBACiAJLyogU3RvcCB0aGUgc2VuZGluZyB0YXNrbGV0LiAqLwogCXRhc2tsZXRfa2lsbCgmcXAtPnNfdGFzayk7CiAKKwlpZiAocXAtPnNfdHgpIHsKKwkJYXRvbWljX2RlYygmcXAtPnJlZmNvdW50KTsKKwkJaWYgKHFwLT5zX3R4LT50eHJlcS5mbGFncyAmIElQQVRIX1NETUFfVFhSRVFfRl9GUkVFQlVGKQorCQkJa2ZyZWUocXAtPnNfdHgtPnR4cmVxLm1hcF9hZGRyKTsKKwl9CisKIAkvKiBNYWtlIHN1cmUgdGhlIFFQIGlzbid0IG9uIHRoZSB0aW1lb3V0IGxpc3QuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CiAJaWYgKCFsaXN0X2VtcHR5KCZxcC0+dGltZXJ3YWl0KSkKIAkJbGlzdF9kZWxfaW5pdCgmcXAtPnRpbWVyd2FpdCk7CiAJaWYgKCFsaXN0X2VtcHR5KCZxcC0+cGlvd2FpdCkpCiAJCWxpc3RfZGVsX2luaXQoJnFwLT5waW93YWl0KTsKKwlpZiAocXAtPnNfdHgpCisJCWxpc3RfYWRkKCZxcC0+c190eC0+dHhyZXEubGlzdCwgJmRldi0+dHhyZXFfZnJlZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCS8qCkBAIC0xMDIwLDcgKzEwNDMsNiBAQAogCQkgIHFwLT5pYnFwLnFwX251bSwgcXAtPnJlbW90ZV9xcG4sIHdjLT5zdGF0dXMpOwogCiAJc3Bpbl9sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7Ci0JLyogWFhYIFdoYXQgaWYgaXRzIGFscmVhZHkgcmVtb3ZlZCBieSB0aGUgdGltZW91dCBjb2RlPyAqLwogCWlmICghbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCiAJCWxpc3RfZGVsX2luaXQoJnFwLT50aW1lcndhaXQpOwogCWlmICghbGlzdF9lbXB0eSgmcXAtPnBpb3dhaXQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYwppbmRleCA0NTllNDZlLi5jNDA1ZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMzEsNiArMzEsOCBAQAogICogU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogCkBAIC0zMDYsNyArMzA4LDcgQEAKIAkJCWVsc2UgewogCQkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFKTsKIAkJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciB0aGUgQlRIICovCi0JCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuZXguaW1tX2RhdGE7CiAJCQkJaHdvcmRzICs9IDE7CiAJCQl9CiAJCQlpZiAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCkBAIC0zNDQsNyArMzQ2LDcgQEAKIAkJCQlxcC0+c19zdGF0ZSA9CiAJCQkJCU9QKFJETUFfV1JJVEVfT05MWV9XSVRIX0lNTUVESUFURSk7CiAJCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgUkVUSCAqLwotCQkJCW9oZHItPnUucmMuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJCW9oZHItPnUucmMuaW1tX2RhdGEgPSB3cWUtPndyLmV4LmltbV9kYXRhOwogCQkJCWh3b3JkcyArPSAxOwogCQkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKIAkJCQkJYnRoMCB8PSAxIDw8IDIzOwpAQCAtNDg4LDcgKzQ5MCw3IEBACiAJCWVsc2UgewogCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1RfV0lUSF9JTU1FRElBVEUpOwogCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIEJUSCAqLwotCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5leC5pbW1fZGF0YTsKIAkJCWh3b3JkcyArPSAxOwogCQl9CiAJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKQEAgLTUyNCw3ICs1MjYsNyBAQAogCQllbHNlIHsKIAkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9XUklURV9MQVNUX1dJVEhfSU1NRURJQVRFKTsKIAkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIHRoZSBCVEggKi8KLQkJCW9oZHItPnUuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuZXguaW1tX2RhdGE7CiAJCQlod29yZHMgKz0gMTsKIAkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKIAkJCQlidGgwIHw9IDEgPDwgMjM7CkBAIC01ODUsMTkgKzU4NywzOSBAQAogc3RhdGljIHZvaWQgc2VuZF9yY19hY2soc3RydWN0IGlwYXRoX3FwICpxcCkKIHsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAJdTE2IGxyaDA7CiAJdTMyIGJ0aDA7CiAJdTMyIGh3b3JkczsKKwl1MzIgX19pb21lbSAqcGlvYnVmOwogCXN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgaGRyOwogCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCiAJLyogRG9uJ3Qgc2VuZCBBQ0sgb3IgTkFLIGlmIGEgUkRNQSByZWFkIG9yIGF0b21pYyBpcyBwZW5kaW5nLiAqLwogCWlmIChxcC0+cl9oZWFkX2Fja19xdWV1ZSAhPSBxcC0+c190YWlsX2Fja19xdWV1ZSB8fAogCSAgICAocXAtPnNfZmxhZ3MgJiBJUEFUSF9TX0FDS19QRU5ESU5HKSB8fAogCSAgICBxcC0+c19hY2tfc3RhdGUgIT0gT1AoQUNLTk9XTEVER0UpKQogCQlnb3RvIHF1ZXVlX2FjazsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKworCWRkID0gZGV2LT5kZDsKKwlwaW9idWYgPSBpcGF0aF9nZXRwaW9idWYoZGQsIDAsIE5VTEwpOworCWlmICghcGlvYnVmKSB7CisJCS8qCisJCSAqIFdlIGFyZSBvdXQgb2YgUElPIGJ1ZmZlcnMgYXQgdGhlIG1vbWVudC4KKwkJICogUGFzcyByZXNwb25zaWJpbGl0eSBmb3Igc2VuZGluZyB0aGUgQUNLIHRvIHRoZQorCQkgKiBzZW5kIHRhc2tsZXQgc28gdGhhdCB3aGVuIGEgUElPIGJ1ZmZlciBiZWNvbWVzCisJCSAqIGF2YWlsYWJsZSwgdGhlIEFDSyBpcyBzZW50IGFoZWFkIG9mIG90aGVyIG91dGdvaW5nCisJCSAqIHBhY2tldHMuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCQlnb3RvIHF1ZXVlX2FjazsKKwl9CisKIAkvKiBDb25zdHJ1Y3QgdGhlIGhlYWRlci4gKi8KIAlvaGRyID0gJmhkci51Lm90aDsKIAlscmgwID0gSVBBVEhfTFJIX0JUSDsKQEAgLTYxMSw3ICs2MzMsNyBAQAogCQlscmgwID0gSVBBVEhfTFJIX0dSSDsKIAl9CiAJLyogcmVhZCBwa2V5X2luZGV4IHcvbyBsb2NrIChpdHMgYXRvbWljKSAqLwotCWJ0aDAgPSBpcGF0aF9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KSB8CisJYnRoMCA9IGlwYXRoX2dldF9wa2V5KGRkLCBxcC0+c19wa2V5X2luZGV4KSB8CiAJCShPUChBQ0tOT1dMRURHRSkgPDwgMjQpIHwgKDEgPDwgMjIpOwogCWlmIChxcC0+cl9uYWtfc3RhdGUpCiAJCW9oZHItPnUuYWV0aCA9IGNwdV90b19iZTMyKChxcC0+cl9tc24gJiBJUEFUSF9NU05fTUFTSykgfApAQCAtNjIzLDMwICs2NDUsMjkgQEAKIAloZHIubHJoWzBdID0gY3B1X3RvX2JlMTYobHJoMCk7CiAJaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKIAloZHIubHJoWzJdID0gY3B1X3RvX2JlMTYoaHdvcmRzICsgU0laRV9PRl9DUkMpOwotCWhkci5scmhbM10gPSBjcHVfdG9fYmUxNihkZXYtPmRkLT5pcGF0aF9saWQpOworCWhkci5scmhbM10gPSBjcHVfdG9fYmUxNihkZC0+aXBhdGhfbGlkKTsKIAlvaGRyLT5idGhbMF0gPSBjcHVfdG9fYmUzMihidGgwKTsKIAlvaGRyLT5idGhbMV0gPSBjcHVfdG9fYmUzMihxcC0+cmVtb3RlX3Fwbik7CiAJb2hkci0+YnRoWzJdID0gY3B1X3RvX2JlMzIocXAtPnJfYWNrX3BzbiAmIElQQVRIX1BTTl9NQVNLKTsKIAotCS8qCi0JICogSWYgd2UgY2FuIHNlbmQgdGhlIEFDSywgY2xlYXIgdGhlIEFDSyBzdGF0ZS4KLQkgKi8KLQlpZiAoaXBhdGhfdmVyYnNfc2VuZChxcCwgJmhkciwgaHdvcmRzLCBOVUxMLCAwKSA9PSAwKSB7Ci0JCWRldi0+bl91bmljYXN0X3htaXQrKzsKLQkJZ290byBkb25lOwotCX0KKwl3cml0ZXEoaHdvcmRzICsgMSwgcGlvYnVmKTsKIAotCS8qCi0JICogV2UgYXJlIG91dCBvZiBQSU8gYnVmZmVycyBhdCB0aGUgbW9tZW50LgotCSAqIFBhc3MgcmVzcG9uc2liaWxpdHkgZm9yIHNlbmRpbmcgdGhlIEFDSyB0byB0aGUKLQkgKiBzZW5kIHRhc2tsZXQgc28gdGhhdCB3aGVuIGEgUElPIGJ1ZmZlciBiZWNvbWVzCi0JICogYXZhaWxhYmxlLCB0aGUgQUNLIGlzIHNlbnQgYWhlYWQgb2Ygb3RoZXIgb3V0Z29pbmcKLQkgKiBwYWNrZXRzLgotCSAqLwotCWRldi0+bl9yY19xYWNrcysrOworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QSU9fRkxVU0hfV0MpIHsKKwkJdTMyICpoZHJwID0gKHUzMiAqKSAmaGRyOworCisJCWlwYXRoX2ZsdXNoX3djKCk7CisJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmICsgMiwgaGRycCwgaHdvcmRzIC0gMSk7CisJCWlwYXRoX2ZsdXNoX3djKCk7CisJCV9fcmF3X3dyaXRlbChoZHJwW2h3b3JkcyAtIDFdLCBwaW9idWYgKyBod29yZHMgKyAxKTsKKwl9IGVsc2UKKwkJX19pb3dyaXRlMzJfY29weShwaW9idWYgKyAyLCAodTMyICopICZoZHIsIGh3b3Jkcyk7CisKKwlpcGF0aF9mbHVzaF93YygpOworCisJZGV2LT5uX3VuaWNhc3RfeG1pdCsrOworCWdvdG8gZG9uZTsKIAogcXVldWVfYWNrOgotCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CiAJZGV2LT5uX3JjX3FhY2tzKys7CiAJcXAtPnNfZmxhZ3MgfD0gSVBBVEhfU19BQ0tfUEVORElORzsKIAlxcC0+c19uYWtfc3RhdGUgPSBxcC0+cl9uYWtfc3RhdGU7CkBAIC0xMTk2LDYgKzEyMTcsMTAgQEAKIAkJCWxpc3RfbW92ZV90YWlsKCZxcC0+dGltZXJ3YWl0LAogCQkJCSAgICAgICAmZGV2LT5wZW5kaW5nW2Rldi0+cGVuZGluZ19pbmRleF0pOwogCQlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCisJCWlmIChvcGNvZGUgPT0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSkpCisJCQlxcC0+c19yZXRyeSA9IHFwLT5zX3JldHJ5X2NudDsKKwogCQkvKgogCQkgKiBVcGRhdGUgdGhlIFJETUEgcmVjZWl2ZSBzdGF0ZSBidXQgZG8gdGhlIGNvcHkgdy9vCiAJCSAqIGhvbGRpbmcgdGhlIGxvY2tzIGFuZCBibG9ja2luZyBpbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JlZ2lzdGVycy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JlZ2lzdGVycy5oCmluZGV4IDZkMmExN2YuLjhmNDRkMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmVnaXN0ZXJzLmgKQEAgLTYzLDY3ICs2Myw5MiBAQAogLyoga3JfY29udHJvbCBiaXRzICovCiAjZGVmaW5lIElORklOSVBBVEhfQ19GUkVFWkVNT0RFIDB4MDAwMDAwMDIKICNkZWZpbmUgSU5GSU5JUEFUSF9DX0xJTktFTkFCTEUgMHgwMDAwMDAwNAotI2RlZmluZSBJTkZJTklQQVRIX0NfUkVTRVQgMHgwMDAwMDAwMQogCiAvKiBrcl9zZW5kY3RybCBiaXRzICovCiAjZGVmaW5lIElORklOSVBBVEhfU19ESVNBUk1QSU9CVUZfU0hJRlQgMTYKKyNkZWZpbmUgSU5GSU5JUEFUSF9TX1VQRFRIUkVTSF9TSElGVCAyNAorI2RlZmluZSBJTkZJTklQQVRIX1NfVVBEVEhSRVNIX01BU0sgMHgxZgogCiAjZGVmaW5lIElQQVRIX1NfQUJPUlQJCTAKICNkZWZpbmUgSVBBVEhfU19QSU9JTlRCVUZBVkFJTAkxCiAjZGVmaW5lIElQQVRIX1NfUElPQlVGQVZBSUxVUEQJMgogI2RlZmluZSBJUEFUSF9TX1BJT0VOQUJMRQkzCisjZGVmaW5lIElQQVRIX1NfU0RNQUlOVEVOQUJMRQk5CisjZGVmaW5lIElQQVRIX1NfU0RNQVNJTkdMRURFU0NSSVBUT1IJMTAKKyNkZWZpbmUgSVBBVEhfU19TRE1BRU5BQkxFCTExCisjZGVmaW5lIElQQVRIX1NfU0RNQUhBTFQJMTIKICNkZWZpbmUgSVBBVEhfU19ESVNBUk0JCTMxCiAKICNkZWZpbmUgSU5GSU5JUEFUSF9TX0FCT1JUCQkoMVUgPDwgSVBBVEhfU19BQk9SVCkKICNkZWZpbmUgSU5GSU5JUEFUSF9TX1BJT0lOVEJVRkFWQUlMCSgxVSA8PCBJUEFUSF9TX1BJT0lOVEJVRkFWQUlMKQogI2RlZmluZSBJTkZJTklQQVRIX1NfUElPQlVGQVZBSUxVUEQJKDFVIDw8IElQQVRIX1NfUElPQlVGQVZBSUxVUEQpCiAjZGVmaW5lIElORklOSVBBVEhfU19QSU9FTkFCTEUJCSgxVSA8PCBJUEFUSF9TX1BJT0VOQUJMRSkKKyNkZWZpbmUgSU5GSU5JUEFUSF9TX1NETUFJTlRFTkFCTEUJKDFVIDw8IElQQVRIX1NfU0RNQUlOVEVOQUJMRSkKKyNkZWZpbmUgSU5GSU5JUEFUSF9TX1NETUFTSU5HTEVERVNDUklQVE9SIFwKKwkJCQkJKDFVIDw8IElQQVRIX1NfU0RNQVNJTkdMRURFU0NSSVBUT1IpCisjZGVmaW5lIElORklOSVBBVEhfU19TRE1BRU5BQkxFCQkoMVUgPDwgSVBBVEhfU19TRE1BRU5BQkxFKQorI2RlZmluZSBJTkZJTklQQVRIX1NfU0RNQUhBTFQJCSgxVSA8PCBJUEFUSF9TX1NETUFIQUxUKQogI2RlZmluZSBJTkZJTklQQVRIX1NfRElTQVJNCQkoMVUgPDwgSVBBVEhfU19ESVNBUk0pCiAKLS8qIGtyX3JjdmN0cmwgYml0cyAqLworLyoga3JfcmN2Y3RybCBiaXRzIHRoYXQgYXJlIHRoZSBzYW1lIG9uIG11bHRpcGxlIGNoaXBzICovCiAjZGVmaW5lIElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUIDAKICNkZWZpbmUgSU5GSU5JUEFUSF9SX1FQTUFQX0VOQUJMRSAoMVVMTCA8PCAzOCkKIAogLyoga3JfaW50c3RhdHVzLCBrcl9pbnRjbGVhciwga3JfaW50bWFzayBiaXRzICovCi0jZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZVUkdfU0hJRlQgMAotI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQgMTIKLSNkZWZpbmUgSU5GSU5JUEFUSF9JX0VSUk9SICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIElORklOSVBBVEhfSV9TUElPU0VOVCAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMIDB4MjAwMDAwMDAKLSNkZWZpbmUgSU5GSU5JUEFUSF9JX0dQSU8gICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElORklOSVBBVEhfSV9TRE1BSU5UCQkweDgwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1NETUFESVNBQkxFRAkweDQwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX0VSUk9SCQkweDAwMDAwMDAwODAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1NQSU9TRU5UCQkweDAwMDAwMDAwNDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1NQSU9CVUZBVkFJTAkweDAwMDAwMDAwMjAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX0dQSU8JCTB4MDAwMDAwMDAxMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0lfSklOVAkJMHgwMDAwMDAwMDA0MDAwMDAwVUxMCiAKIC8qIGtyX2Vycm9yc3RhdHVzLCBrcl9lcnJvcmNsZWFyLCBrcl9lcnJvcm1hc2sgYml0cyAqLwotI2RlZmluZSBJTkZJTklQQVRIX0VfUkZPUk1BVEVSUiAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUlZDUkMgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMlVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUklDUkMgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwNFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUk1JTlBLVExFTiAgICAgIDB4MDAwMDAwMDAwMDAwMDAwOFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUk1BWFBLVExFTiAgICAgIDB4MDAwMDAwMDAwMDAwMDAxMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUkxPTkdQS1RMRU4gICAgIDB4MDAwMDAwMDAwMDAwMDAyMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUlNIT1JUUEtUTEVOICAgIDB4MDAwMDAwMDAwMDAwMDA0MFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUlVORVhQQ0hBUiAgICAgIDB4MDAwMDAwMDAwMDAwMDA4MFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUlVOU1VQVkwgICAgICAgIDB4MDAwMDAwMDAwMDAwMDEwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUkVCUCAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDIwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUklCRkxPVyAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDQwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUkJBRFZFUlNJT04gICAgIDB4MDAwMDAwMDAwMDAwMDgwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgICAgIDB4MDAwMDAwMDAwMDAwMTAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgICAgIDB4MDAwMDAwMDAwMDAwMjAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUkJBRFRJRCAgICAgICAgIDB4MDAwMDAwMDAwMDAwNDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUkhEUkxFTiAgICAgICAgIDB4MDAwMDAwMDAwMDAwODAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUkhEUiAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAxMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUklCTE9TVExJTksgICAgIDB4MDAwMDAwMDAwMDAyMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU01JTlBLVExFTiAgICAgIDB4MDAwMDAwMDAyMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU01BWFBLVExFTiAgICAgIDB4MDAwMDAwMDA0MDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU1VOREVSUlVOICAgICAgIDB4MDAwMDAwMDA4MDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU1BLVExFTiAgICAgICAgIDB4MDAwMDAwMDEwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU0RST1BQRURTTVBQS1QgIDB4MDAwMDAwMDIwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU0RST1BQRUREQVRBUEtUIDB4MDAwMDAwMDQwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCAgIDB4MDAwMDAwMDgwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU1VORVhQRVJSUEtUTlVNIDB4MDAwMDAwMTAwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfU1VOU1VQVkwgICAgICAgIDB4MDAwMDAwMjAwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEIDB4MDAwMTAwMDAwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfSU5WQUxJREFERFIgICAgIDB4MDAwMjAwMDAwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfUkVTRVQgICAgICAgICAgIDB4MDAwNDAwMDAwMDAwMDAwMFVMTAotI2RlZmluZSBJTkZJTklQQVRIX0VfSEFSRFdBUkUgICAgICAgIDB4MDAwODAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfUkZPUk1BVEVSUgkJCTB4MDAwMDAwMDAwMDAwMDAwMVVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfUlZDUkMJCQkweDAwMDAwMDAwMDAwMDAwMDJVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JJQ1JDCQkJMHgwMDAwMDAwMDAwMDAwMDA0VUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9STUlOUEtUTEVOCQkJMHgwMDAwMDAwMDAwMDAwMDA4VUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9STUFYUEtUTEVOCQkJMHgwMDAwMDAwMDAwMDAwMDEwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9STE9OR1BLVExFTgkJMHgwMDAwMDAwMDAwMDAwMDIwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9SU0hPUlRQS1RMRU4JCTB4MDAwMDAwMDAwMDAwMDA0MFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfUlVORVhQQ0hBUgkJCTB4MDAwMDAwMDAwMDAwMDA4MFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfUlVOU1VQVkwJCQkweDAwMDAwMDAwMDAwMDAxMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JFQlAJCQkweDAwMDAwMDAwMDAwMDAyMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JJQkZMT1cJCQkweDAwMDAwMDAwMDAwMDA0MDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JCQURWRVJTSU9OCQkweDAwMDAwMDAwMDAwMDA4MDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMCQkweDAwMDAwMDAwMDAwMDEwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMCQkweDAwMDAwMDAwMDAwMDIwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JCQURUSUQJCQkweDAwMDAwMDAwMDAwMDQwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JIRFJMRU4JCQkweDAwMDAwMDAwMDAwMDgwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JIRFIJCQkweDAwMDAwMDAwMDAwMTAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1JJQkxPU1RMSU5LCQkweDAwMDAwMDAwMDAwMjAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NFTkRTUEVDSUFMVFJJR0dFUgkJMHgwMDAwMDAwMDA4MDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TRE1BRElTQUJMRUQJCTB4MDAwMDAwMDAxMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU01JTlBLVExFTgkJCTB4MDAwMDAwMDAyMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU01BWFBLVExFTgkJCTB4MDAwMDAwMDA0MDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU1VOREVSUlVOCQkJMHgwMDAwMDAwMDgwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TUEtUTEVOCQkJMHgwMDAwMDAwMTAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TRFJPUFBFRFNNUFBLVAkJMHgwMDAwMDAwMjAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QJCTB4MDAwMDAwMDQwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSAkJMHgwMDAwMDAwODAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0JCTB4MDAwMDAwMTAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU1VOU1VQVkwJCQkweDAwMDAwMDIwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NFTkRCVUZNSVNVU0UJCTB4MDAwMDAwNDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU0RNQUdFTk1JU01BVENICQkweDAwMDAwMDgwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NETUFPVVRPRkJPVU5ECQkweDAwMDAwMTAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NETUFUQUlMT1VUT0ZCT1VORAkJMHgwMDAwMDIwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TRE1BQkFTRQkJCTB4MDAwMDA0MDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU0RNQTFTVERFU0MJCTB4MDAwMDA4MDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU0RNQVJQWVRBRwkJCTB4MDAwMDEwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU0RNQURXRU4JCQkweDAwMDAyMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX1NETUFNSVNTSU5HRFcJCTB4MDAwMDQwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfU0RNQVVORVhQREFUQQkJMHgwMDAwODAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9JQlNUQVRVU0NIQU5HRUQJCTB4MDAwMTAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfSU5WQUxJREFERFIJCTB4MDAwMjAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBJTkZJTklQQVRIX0VfUkVTRVQJCQkweDAwMDQwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX0hBUkRXQVJFCQkJMHgwMDA4MDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIElORklOSVBBVEhfRV9TRE1BREVTQ0FERFJNSVNBTElHTgkweDAwMTAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9FX0lOVkFMSURFRVBDTUQJCTB4MDAyMDAwMDAwMDAwMDAwMFVMTAogCiAvKgogICogdGhpcyBpcyB1c2VkIHRvIHByaW50ICJjb21tb24iIHBhY2tldCBlcnJvcnMgb25seSB3aGVuIHRoZQpAQCAtMTM0LDYgKzE1OSwxNyBAQAogCQl8IElORklOSVBBVEhfRV9SSUNSQyB8IElORklOSVBBVEhfRV9SU0hPUlRQS1RMRU4gXAogCQl8IElORklOSVBBVEhfRV9SRUJQICkKIAorLyogQ29udmVuaWVuY2UgZm9yIGRlY29kaW5nIFNlbmQgRE1BIGVycm9ycyAqLworI2RlZmluZSBJTkZJTklQQVRIX0VfU0RNQUVSUlMgKCBcCisJSU5GSU5JUEFUSF9FX1NETUFHRU5NSVNNQVRDSCB8IElORklOSVBBVEhfRV9TRE1BT1VUT0ZCT1VORCB8IFwKKwlJTkZJTklQQVRIX0VfU0RNQVRBSUxPVVRPRkJPVU5EIHwgSU5GSU5JUEFUSF9FX1NETUFCQVNFIHwgXAorCUlORklOSVBBVEhfRV9TRE1BMVNUREVTQyB8IElORklOSVBBVEhfRV9TRE1BUlBZVEFHIHwgXAorCUlORklOSVBBVEhfRV9TRE1BRFdFTiB8IElORklOSVBBVEhfRV9TRE1BTUlTU0lOR0RXIHwgXAorCUlORklOSVBBVEhfRV9TRE1BVU5FWFBEQVRBIHwgXAorCUlORklOSVBBVEhfRV9TRE1BREVTQ0FERFJNSVNBTElHTiB8IFwKKwlJTkZJTklQQVRIX0VfU0RNQURJU0FCTEVEIHwgXAorCUlORklOSVBBVEhfRV9TRU5EQlVGTUlTVVNFKQorCiAvKiBrcl9od2VycmNsZWFyLCBrcl9od2Vycm1hc2ssIGtyX2h3ZXJyc3RhdHVzLCBiaXRzICovCiAvKiBUWEVNRU1QQVJJVFlFUlIgYml0IDA6IFBJT2J1ZiwgMTogUElPcGJjLCAyOiBsYXVuY2hmaWZvCiAgKiBSWEVNRU1QQVJJVFlFUlIgYml0IDA6IHJjdmJ1ZiwgMTogbG9va3VwcSwgMjogIGV4cFRJRCwgMzogZWFnZXJUSUQKQEAgLTE1OCw3ICsxOTQsNyBAQAogI2RlZmluZSBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfSERSSU5GTyAgMHg0MFVMTAogLyogd2FsZG8gc3BlY2lmaWMgLS0gZmluZCB0aGUgcmVzdCBpbiBpcGF0aF82MTEwLmMgKi8KICNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhEU1lOQ01FTVBBUklUWUVSUiAgMHgwMDAwMDAwNDAwMDAwMDAwVUxMCi0vKiBtb250eSBzcGVjaWZpYyAtLSBmaW5kIHRoZSByZXN0IGluIGlwYXRoXzYxMjAuYyAqLworLyogNjEyMC83MjIwIHNwZWNpZmljIC0tIGZpbmQgdGhlIHJlc3QgaW4gaXBhdGhfNjEyMC5jIGFuZCBpcGF0aF83MjIwLmMgKi8KICNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRAkweDAwNDAwMDAwMDAwMDAwMDBVTEwKIAogLyoga3JfaHdkaWFnY3RybCBiaXRzICovCkBAIC0xODUsOCArMjIxLDggQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NMRUVQIDMKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NISUZUIDE2CiAjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX01BU0sgMHgzVUxMCi0jZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0lOSVQgMQkvKiBtb3ZlIHRvIDB4MTEgKi8KLSNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQVJNRUQgMgkvKiBtb3ZlIHRvIDB4MjEgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfRE9XTiAxCQkvKiBtb3ZlIHRvIDB4MTEgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQVJNRUQgMgkJLyogbW92ZSB0byAweDIxICovCiAjZGVmaW5lIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0FDVElWRSAzCS8qIG1vdmUgdG8gMHgzMSAqLwogI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCAxOAogI2RlZmluZSBJTkZJTklQQVRIX0lCQ0NfTUFYUEtUTEVOX01BU0sgMHg3RkZVTEwKQEAgLTIwMSwxMCArMjM3LDkgQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNDX0xJTktET1dOREVGQVVMVFNUQVRFIDB4NDAwMDAwMDAwMDAwMDAwMFVMTAogCiAvKiBrcl9pYmNzdGF0dXMgYml0cyAqLwotI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTSyAweEYKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUIDAKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9NQVNLIDB4NwotI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUIDQKKwogI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfVFhSRUFEWSAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIElORklOSVBBVEhfSUJDU19UWENSRURJVE9LICAgIDB4ODAwMDAwMDAKIC8qIGxpbmsgdHJhaW5pbmcgc3RhdGVzIChzaGlmdCBieQpAQCAtMjIyLDMwICsyNTcsMTMgQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJSRVRSQUlOCTB4MGMKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJXQUlUUk1UCTB4MGUKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJJRExFCTB4MGYKLS8qIGxpbmsgc3RhdGUgbWFjaGluZSBzdGF0ZXMgKHNoaWZ0IGJ5IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpICovCisvKiBsaW5rIHN0YXRlIG1hY2hpbmUgc3RhdGVzIChzaGlmdCBieSBpYmNzX2xzX3NoaWZ0KSAqLwogI2RlZmluZSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9ET1dOCQkweDAKICNkZWZpbmUgSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfSU5JVAkJMHgxCiAjZGVmaW5lIElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FSTQkJMHgyCiAjZGVmaW5lIElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FDVElWRQkJMHgzCiAjZGVmaW5lIElORklOSVBBVEhfSUJDU19MX1NUQVRFX0FDVF9ERUZFUgkweDQKIAotLyogY29tYmluYXRpb24gbGluayBzdGF0dXMgc3RhdGVzIHRoYXQgd2UgdXNlIHdpdGggc29tZSBmcmVxdWVuY3kgKi8KLSNkZWZpbmUgSVBBVEhfSUJTVEFURV9NQVNLICgoSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX01BU0sgXAotCQk8PCBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpIHwgXAotCQkoSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9NQVNLIFwKLQkJPDxJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSkKLSNkZWZpbmUgSVBBVEhfSUJTVEFURV9JTklUICgoSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfSU5JVCBcCi0JCTw8IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpIHwgXAotCQkoSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCBcCi0JCTw8SU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSkKLSNkZWZpbmUgSVBBVEhfSUJTVEFURV9BUk0gKChJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9BUk0gXAotCQk8PCBJTkZJTklQQVRIX0lCQ1NfTElOS1NUQVRFX1NISUZUKSB8IFwKLQkJKElORklOSVBBVEhfSUJDU19MVF9TVEFURV9MSU5LVVAgXAotCQk8PElORklOSVBBVEhfSUJDU19MSU5LVFJBSU5JTkdTVEFURV9TSElGVCkpCi0jZGVmaW5lIElQQVRIX0lCU1RBVEVfQUNUSVZFICgoSU5GSU5JUEFUSF9JQkNTX0xfU1RBVEVfQUNUSVZFIFwKLQkJPDwgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9TSElGVCkgfCBcCi0JCShJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQIFwKLQkJPDxJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpKQogCiAvKiBrcl9leHRzdGF0dXMgYml0cyAqLwogI2RlZmluZSBJTkZJTklQQVRIX0VYVFNfU0VSREVTUExMTE9DSyAweDEKQEAgLTI4Niw4ICszMDQsNyBAQAogLyogTDEgUG93ZXIgZG93bjsgdXNlIHdpdGggUlhERVRFQ1QsIE90aGVyd2lzZSBub3QgdXNlZCBvbiBJQiBzaWRlICovCiAjZGVmaW5lIElORklOSVBBVEhfU0VSREMwX0wxUFdSX0ROCSAweEYwVUxMCiAKLS8qIGtyX3hneHNjb25maWcgYml0cyAqLwotI2RlZmluZSBJTkZJTklQQVRIX1hHWFNfUkVTRVQgICAgICAgICAgMHg3VUxMCisvKiBjb21tb24ga3JfeGd4c2NvbmZpZyBiaXRzIChvciBzYWZlIGluIGFsbCwgZXZlbiBpZiBub3QgaW1wbGVtZW50ZWQpICovCiAjZGVmaW5lIElORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQgMTkKICNkZWZpbmUgSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9NQVNLIDB4ZlVMTAogCkBAIC00MTcsNiArNDM0LDI5IEBACiAJaXBhdGhfa3JlZyBrcl9wY2llcTFzZXJkZXNjb25maWcwOwogCWlwYXRoX2tyZWcga3JfcGNpZXExc2VyZGVzY29uZmlnMTsKIAlpcGF0aF9rcmVnIGtyX3BjaWVxMXNlcmRlc3N0YXR1czsKKwlpcGF0aF9rcmVnIGtyX2hydGJ0X2d1aWQ7CisJaXBhdGhfa3JlZyBrcl9pYmNkZHJjdHJsOworCWlwYXRoX2tyZWcga3JfaWJjZGRyc3RhdHVzOworCWlwYXRoX2tyZWcga3JfamludHJlbG9hZDsKKworCS8qIHNlbmQgZG1hIHJlbGF0ZWQgcmVncyAqLworCWlwYXRoX2tyZWcga3Jfc2VuZGRtYWJhc2U7CisJaXBhdGhfa3JlZyBrcl9zZW5kZG1hbGVuZ2VuOworCWlwYXRoX2tyZWcga3Jfc2VuZGRtYXRhaWw7CisJaXBhdGhfa3JlZyBrcl9zZW5kZG1haGVhZDsKKwlpcGF0aF9rcmVnIGtyX3NlbmRkbWFoZWFkYWRkcjsKKwlpcGF0aF9rcmVnIGtyX3NlbmRkbWFidWZtYXNrMDsKKwlpcGF0aF9rcmVnIGtyX3NlbmRkbWFidWZtYXNrMTsKKwlpcGF0aF9rcmVnIGtyX3NlbmRkbWFidWZtYXNrMjsKKwlpcGF0aF9rcmVnIGtyX3NlbmRkbWFzdGF0dXM7CisKKwkvKiBTZXJEZXMgcmVsYXRlZCByZWdzIChJQkE3MjIwLW9ubHkpICovCisJaXBhdGhfa3JlZyBrcl9pYnNlcmRlc2N0cmw7CisJaXBhdGhfa3JlZyBrcl9pYl9lcGJhY2M7CisJaXBhdGhfa3JlZyBrcl9pYl9lcGJ0cmFuczsKKwlpcGF0aF9rcmVnIGtyX3BjaWVfZXBiYWNjOworCWlwYXRoX2tyZWcga3JfcGNpZV9lcGJ0cmFuczsKKwlpcGF0aF9rcmVnIGtyX2liX2Rkc3J4ZXE7CiB9OwogCiBzdHJ1Y3QgaXBhdGhfY3JlZ3MgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCmluZGV4IGE1OWJkYmQuLjhhYzVjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCXN3aXRjaCAod3FlLT53ci5vcGNvZGUpIHsKIAljYXNlIElCX1dSX1NFTkRfV0lUSF9JTU06CiAJCXdjLndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07Ci0JCXdjLmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJd2MuaW1tX2RhdGEgPSB3cWUtPndyLmV4LmltbV9kYXRhOwogCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgSUJfV1JfU0VORDoKIAkJaWYgKCFpcGF0aF9nZXRfcndxZShxcCwgMCkpIHsKQEAgLTMzOSw3ICszMzksNyBAQAogCQkJZ290byBlcnI7CiAJCX0KIAkJd2Mud2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKLQkJd2MuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQl3Yy5pbW1fZGF0YSA9IHdxZS0+d3IuZXguaW1tX2RhdGE7CiAJCWlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDEpKQogCQkJZ290byBybnJfbmFrOwogCQkvKiBGQUxMVEhST1VHSCAqLwpAQCAtNDgzLDE0ICs0ODMsMTYgQEAKIAogc3RhdGljIHZvaWQgd2FudF9idWZmZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSEFTX1NFTkRfRE1BKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7Ci0JZGQtPmlwYXRoX3NlbmRjdHJsIHw9IElORklOSVBBVEhfU19QSU9JTlRCVUZBVkFJTDsKLQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAotCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7Ci0JaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7CisJCWRkLT5pcGF0aF9zZW5kY3RybCB8PSBJTkZJTklQQVRIX1NfUElPSU5UQlVGQVZBSUw7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7CisJCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2Q3MjIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2Q3MjIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0N2ViNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZDcyMjAuYwpAQCAtMCwwICsxLDE0NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG9mIHRoZSBjb2RlIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIFNlckRlcworICogb24gdGhlIEluZmluaVBhdGggNzIyMCBjaGlwLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBhdGhfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiaXBhdGhfNzIyMC5oIgorCisvKgorICogVGhlIElCU2VyRGVzTWFwcFRhYmxlIGlzIGEgbWVtb3J5IHRoYXQgaG9sZHMgdmFsdWVzIHRvIGJlIHN0b3JlZCBpbgorICogdmFyaW91cyBTZXJEZXMgcmVnaXN0ZXJzIGJ5IElCQy4gSXQgaXMgbm90IHBhcnQgb2YgdGhlIG5vcm1hbCBrcmVncworICogbWFwIGFuZCBpcyB1c2VkIGluIGV4YWN0bHkgb25lIHBsYWNlLCBoZW5jZSB0aGUgI2RlZmluZSBiZWxvdy4KKyAqLworI2RlZmluZSBLUl9JQlNlckRlc01hcHBUYWJsZSAoMHg5NDAwMCAvIChzaXplb2YodWludDY0X3QpKSkKKworLyoKKyAqIEJlbG93IHVzZWQgZm9yIHNkbnVtIHBhcmFtZXRlciwgc2VsZWN0aW5nIG9uZSBvZiB0aGUgdHdvIHNlY3Rpb25zCisgKiB1c2VkIGZvciBQQ0llLCBvciB0aGUgc2luZ2xlIFNlckRlcyB1c2VkIGZvciBJQi4KKyAqLworI2RlZmluZSBQQ0lFX1NFUkRFUzAgMAorI2RlZmluZSBQQ0lFX1NFUkRFUzEgMQorCisvKgorICogVGhlIEVQQiByZXF1aXJlcyBhZGRyZXNzaW5nIGluIGEgcGFydGljdWxhciBmb3JtLiBFUEJfTE9DKCkgaXMgaW50ZW5kZWQKKyAqIHRvIG1ha2UgI2RlZmluaXRpb25zIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCisgKi8KKyNkZWZpbmUgRVBCX0FERFJfU0hGIDgKKyNkZWZpbmUgRVBCX0xPQyhjaG4sIGVsdCwgcmVnKSBcCisJKCgoZWx0ICYgMHhmKSB8ICgoY2huICYgNykgPDwgNCkgfCAoKHJlZyAmIDB4M2YpIDw8IDkpKSA8PCBcCisJIEVQQl9BRERSX1NIRikKKyNkZWZpbmUgRVBCX0lCX1FVQUQwX0NTX1NIRiAoMjUpCisjZGVmaW5lIEVQQl9JQl9RVUFEMF9DUyAoMVUgPDwgIEVQQl9JQl9RVUFEMF9DU19TSEYpCisjZGVmaW5lIEVQQl9JQl9VQ19DU19TSEYgKDI2KQorI2RlZmluZSBFUEJfUENJRV9VQ19DU19TSEYgKDI3KQorI2RlZmluZSBFUEJfR0xPQkFMX1dSICgxVSA8PCAoRVBCX0FERFJfU0hGICsgOCkpCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zLiAqLworc3RhdGljIGludCBpcGF0aF9zZDcyMjBfcmVnX21vZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBzZG51bSwgdTMyIGxvYywKKwkJCQl1MzIgZGF0YSwgdTMyIG1hc2spOworc3RhdGljIGludCBpYnNkX21vZF9hbGxjaG5scyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBsb2MsIGludCB2YWwsCisJCQkgICAgIGludCBtYXNrKTsKK3N0YXRpYyBpbnQgaXBhdGhfc2RfdHJpbWRvbmVfcG9sbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworc3RhdGljIHZvaWQgaXBhdGhfc2RfdHJpbWRvbmVfbW9uaXRvcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICAgICAgY29uc3QgY2hhciAqd2hlcmUpOworc3RhdGljIGludCBpcGF0aF9zZF9zZXR2YWxzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitzdGF0aWMgaW50IGlwYXRoX3NkX2Vhcmx5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CitzdGF0aWMgaW50IGlwYXRoX3NkX2RhY3RyaW0oc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKKy8qIFNldCB0aGUgcmVnaXN0ZXJzIHRoYXQgSUJDIG1heSBtdWNrIHdpdGggdG8gdGhlaXIgZGVmYXVsdCAicHJlc2V0IiB2YWx1ZXMgKi8KK2ludCBpcGF0aF9zZDcyMjBfcHJlc2V0cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOworc3RhdGljIGludCBpcGF0aF9pbnRlcm5hbF9wcmVzZXRzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CisvKiBUd2VhayB0aGUgcmVnaXN0ZXIgKENNVUNUUkw1KSB0aGF0IGNvbnRhaW5zIHRoZSBUUklNU0VMRiBjb250cm9scyAqLworc3RhdGljIGludCBpcGF0aF9zZF90cmltc2VsZihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB2YWwpOworc3RhdGljIGludCBlcGJfYWNjZXNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHNkbnVtLCBpbnQgY2xhaW0pOworCit2b2lkIGlwYXRoX3NldF9yZWxvY2tfcG9sbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBpYnVwKTsKKworLyoKKyAqIEJlbG93IGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlICJvbmNlIHBlciBwb3dlci1vbiIgaW5pdGlhbGl6YXRpb24gaGFzCisgKiBiZWVuIGRvbmUsIGJlY2F1c2UgdUMgY29kZSBWZXJzaW9uIDEuMzIuMTcgb3IgaGlnaGVyIGFsbG93cyB0aGUgdUMgdG8KKyAqIGJlIHJlc2V0IGF0IHdpbGwsIGFuZCBBdXRvbWF0aWMgRXF1YWxpemF0aW9uIG1heSByZXF1aXJlIGl0LiBTbyB0aGUKKyAqIHN0YXRlIG9mIHRoZSByZXNldCAicGluIiwgYXMgcmVmbGVjdGVkIGluIHdhc19yZXNldCBwYXJhbWV0ZXIgdG8KKyAqIGlwYXRoX3NkNzIyMF9pbml0KCkgaXMgbm8gbG9uZ2VyIHZhbGlkLiBJbnN0ZWFkLCB3ZSBjaGVjayBmb3IgdGhlCisgKiBhY3R1YWwgdUMgY29kZSBoYXZpbmcgYmVlbiBsb2FkZWQuCisgKi8KK3N0YXRpYyBpbnQgaXBhdGhfaWJzZF91Y29kZV9sb2FkZWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWlmICghZGQtPnNlcmRlc19maXJzdF9pbml0X2RvbmUgJiYgKGlwYXRoX3NkNzIyMF9pYl92ZnkoZGQpID4gMCkpCisJCWRkLT5zZXJkZXNfZmlyc3RfaW5pdF9kb25lID0gMTsKKwlyZXR1cm4gZGQtPnNlcmRlc19maXJzdF9pbml0X2RvbmU7Cit9CisKKy8qIHJlcGVhdCAjZGVmaW5lIGZvciBsb2NhbCB1c2UuICJSZWFsIiAjZGVmaW5lIGlzIGluIGlwYXRoX2liYTcyMjAuYyAqLworI2RlZmluZSBJTkZJTklQQVRIX0hXRV9JQl9VQ19NRU1PUllQQVJJVFlFUlIgICAgICAweDAwMDAwMDQwMDAwMDAwMDBVTEwKKyNkZWZpbmUgSUJfTVBSRUc1IChFUEJfTE9DKDYsIDAsIDB4RSkgfCAoMUwgPDwgRVBCX0lCX1VDX0NTX1NIRikpCisjZGVmaW5lIElCX01QUkVHNiAoRVBCX0xPQyg2LCAwLCAweEYpIHwgKDFVIDw8IEVQQl9JQl9VQ19DU19TSEYpKQorI2RlZmluZSBVQ19QQVJfQ0xSX0QgOAorI2RlZmluZSBVQ19QQVJfQ0xSX00gMHhDCisjZGVmaW5lIElCX0NUUkwyKGNobikgKEVQQl9MT0MoY2huLCA3LCAzKSB8IEVQQl9JQl9RVUFEMF9DUykKKyNkZWZpbmUgU1RBUlRfRVExKGNoYW4pIEVQQl9MT0MoY2hhbiwgNywgMHgyNykKKwordm9pZCBpcGF0aF9zZDcyMjBfY2xyX2licGFyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcmV0OworCisJLyogY2xlYXIsIHRoZW4gcmUtZW5hYmxlIHBhcml0eSBlcnJzICovCisJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLCBJQl9NUFJFRzYsCisJCVVDX1BBUl9DTFJfRCwgVUNfUEFSX0NMUl9NKTsKKwlpZiAocmV0IDwgMCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIGNsZWFyaW5nIElCU2VyRGVzIFBhcml0eSBlcnJcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCXJldCA9IGlwYXRoX3NkNzIyMF9yZWdfbW9kKGRkLCBJQl83MjIwX1NFUkRFUywgSUJfTVBSRUc2LCAwLAorCQlVQ19QQVJfQ0xSX00pOworCisJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJdWRlbGF5KDQpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaHdlcnJjbGVhciwKKwkJSU5GSU5JUEFUSF9IV0VfSUJfVUNfTUVNT1JZUEFSSVRZRVJSKTsKKwlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKK2JhaWw6CisJcmV0dXJuOworfQorCisvKgorICogQWZ0ZXIgYSByZXNldCBvciBvdGhlciB1bnVzdWFsIGV2ZW50LCB0aGUgZXBiIGludGVyZmFjZSBtYXkgbmVlZAorICogdG8gYmUgcmUtc3luY2hyb25pemVkLCBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgdUMuCisgKiByZXR1cm5zIDwwIGZvciBmYWlsdXJlIHRvIHJlc3luYyB3aXRoaW4gSUJTRF9SRVNZTkNfVFJJRVMgKG5vdCBleHBlY3RlZCkKKyAqLworI2RlZmluZSBJQlNEX1JFU1lOQ19UUklFUyAzCisjZGVmaW5lIElCX1BHVURQKGNobikgKEVQQl9MT0MoKGNobiksIDIsIDEpIHwgRVBCX0lCX1FVQUQwX0NTKQorI2RlZmluZSBJQl9DTVVET05FKGNobikgKEVQQl9MT0MoKGNobiksIDcsIDB4RikgfCBFUEJfSUJfUVVBRDBfQ1MpCisKK3N0YXRpYyBpbnQgaXBhdGhfcmVzeW5jX2liZXBiKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcmV0LCBwYXQsIHRyaWVzLCBjaG47CisJdTMyIGxvYzsKKworCXJldCA9IC0xOworCWNobiA9IDA7CisJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgKDQgKiBJQlNEX1JFU1lOQ19UUklFUyk7ICsrdHJpZXMpIHsKKwkJbG9jID0gSUJfUEdVRFAoY2huKTsKKwkJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLCBsb2MsIDAsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCByZWFkIGluIHJlc3luY1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmV0ICE9IDB4RjAgJiYgcmV0ICE9IDB4NTUgJiYgdHJpZXMgPT0gMCkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJ1bmV4cGVjdGVkIHBhdHRlcm4gaW4gcmVzeW5jXG4iKTsKKwkJcGF0ID0gcmV0IF4gMHhBNTsgLyogYWx0ZXJuYXRlIEYwIGFuZCA1NSAqLworCQlyZXQgPSBpcGF0aF9zZDcyMjBfcmVnX21vZChkZCwgSUJfNzIyMF9TRVJERVMsIGxvYywgcGF0LCAweEZGKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgd3JpdGUgaW4gcmVzeW5jXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJldCA9IGlwYXRoX3NkNzIyMF9yZWdfbW9kKGRkLCBJQl83MjIwX1NFUkRFUywgbG9jLCAwLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgcmUtcmVhZCBpbiByZXN5bmNcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJldCAhPSBwYXQpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgY29tcGFyZTEgaW4gcmVzeW5jXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWxvYyA9IElCX0NNVURPTkUoY2huKTsKKwkJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLCBsb2MsIDAsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCBDTVVET05FIHJkIGluIHJlc3luY1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKHJldCAmIDB4NzApICE9ICgoY2huIDw8IDQpIHwgMHg0MCkpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJCYWQgQ01VRE9ORSB2YWx1ZSAlMDJYLCBjaG4gJWRcbiIsCisJCQkJcmV0LCBjaG4pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCsrY2huID09IDQpCisJCQlicmVhazsgIC8qIFN1Y2Nlc3MgKi8KKwl9CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUmVzeW5jIGluICVkIHRyaWVzXG4iLCB0cmllcyk7CisJcmV0dXJuIChyZXQgPiAwKSA/IDAgOiByZXQ7Cit9CisKKy8qCisgKiBMb2NhbGl6ZSB0aGUgc3R1ZmYgdGhhdCBzaG91bGQgYmUgZG9uZSB0byBjaGFuZ2UgSUIgdUMgcmVzZXQKKyAqIHJldHVybnMgPDAgZm9yIGVycm9ycy4KKyAqLworc3RhdGljIGludCBpcGF0aF9pYnNkX3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IGFzc2VydF9yc3QpCit7CisJdTY0IHJzdF92YWw7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJzdF92YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYnNlcmRlc2N0cmwpOworCWlmIChhc3NlcnRfcnN0KSB7CisJCS8qCisJCSAqIFZlbmRvciByZWNvbW1lbmRzICJpbnRlcnJ1cHRpbmciIHVDIGJlZm9yZSByZXNldCwgdG8KKwkJICogbWluaW1pemUgcG9zc2libGUgZ2xpdGNoZXMuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkZXBiX2xvY2ssIGZsYWdzKTsKKwkJZXBiX2FjY2VzcyhkZCwgSUJfNzIyMF9TRVJERVMsIDEpOworCQlyc3RfdmFsIHw9IDFVTEw7CisJCS8qIFNxdWVsY2ggcG9zc2libGUgcGFyaXR5IGVycm9yIGZyb20gX2Fzc2VydGluZ18gcmVzZXQgKi8KKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2Vycm1hc2ssCisJCQlkZC0+aXBhdGhfaHdlcnJtYXNrICYKKwkJCX5JTkZJTklQQVRIX0hXRV9JQl9VQ19NRU1PUllQQVJJVFlFUlIpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2lic2VyZGVzY3RybCwgcnN0X3ZhbCk7CisJCS8qIGZsdXNoIHdyaXRlLCBkZWxheSB0byBlbnN1cmUgaXQgdG9vayBlZmZlY3QgKi8KKwkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJCXVkZWxheSgyKTsKKwkJLyogb25jZSBpdCdzIHJlc2V0LCBjYW4gcmVtb3ZlIGludGVycnVwdCAqLworCQllcGJfYWNjZXNzKGRkLCBJQl83MjIwX1NFUkRFUywgLTEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RlcGJfbG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEJlZm9yZSB3ZSBkZS1hc3NlcnQgcmVzZXQsIHdlIG5lZWQgdG8gZGVhbCB3aXRoCisJCSAqIHBvc3NpYmxlIGdsaXRjaCBvbiB0aGUgUGFyaXR5LWVycm9yIGxpbmUuCisJCSAqIFN1cHByZXNzIGl0IGFyb3VuZCB0aGUgcmVzZXQsIGJvdGggaW4gY2hpcC1sZXZlbAorCQkgKiBod2Vycm1hc2sgYW5kIGluIElCIHVDIGNvbnRyb2wgcmVnLiB1QyB3aWxsIGFsbG93CisJCSAqIGl0IGFnYWluIGR1cmluZyBzdGFydHVwLgorCQkgKi8KKwkJdTY0IHZhbDsKKwkJcnN0X3ZhbCAmPSB+KDFVTEwpOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKKwkJCWRkLT5pcGF0aF9od2Vycm1hc2sgJgorCQkJfklORklOSVBBVEhfSFdFX0lCX1VDX01FTU9SWVBBUklUWUVSUik7CisKKwkJcmV0ID0gaXBhdGhfcmVzeW5jX2liZXBiKGRkKTsKKwkJaWYgKHJldCA8IDApCisJCQlpcGF0aF9kZXZfZXJyKGRkLCAidW5hYmxlIHRvIHJlLXN5bmMgSUIgRVBCXG4iKTsKKworCQkvKiBzZXQgdUMgY29udHJvbCByZWdzIHRvIHN1cHByZXNzIHBhcml0eSBlcnJzICovCisJCXJldCA9IGlwYXRoX3NkNzIyMF9yZWdfbW9kKGRkLCBJQl83MjIwX1NFUkRFUywgSUJfTVBSRUc1LCAxLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGJhaWw7CisJCS8qIElCIHVDIGNvZGUgcGFzdCBWZXJzaW9uIDEuMzIuMTcgYWxsb3cgc3VwcHJlc3Npb24gb2Ygd2RvZyAqLworCQlyZXQgPSBpcGF0aF9zZDcyMjBfcmVnX21vZChkZCwgSUJfNzIyMF9TRVJERVMsIElCX01QUkVHNiwgMHg4MCwKKwkJCTB4ODApOworCQlpZiAocmV0IDwgMCkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byBzZXQgV0RPRyBkaXNhYmxlXG4iKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2lic2VyZGVzY3RybCwgcnN0X3ZhbCk7CisJCS8qIGZsdXNoIHdyaXRlLCBkZWxheSBmb3Igc3RhcnR1cCAqLworCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwkJdWRlbGF5KDEpOworCQkvKiBjbGVhciwgdGhlbiByZS1lbmFibGUgcGFyaXR5IGVycnMgKi8KKwkJaXBhdGhfc2Q3MjIwX2Nscl9pYnBhcihkZCk7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJyc3RhdHVzKTsKKwkJaWYgKHZhbCAmIElORklOSVBBVEhfSFdFX0lCX1VDX01FTU9SWVBBUklUWUVSUikgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIklCVUMgUGFyaXR5IHN0aWxsIHNldCBhZnRlciBSU1RcbiIpOworCQkJZGQtPmlwYXRoX2h3ZXJybWFzayAmPQorCQkJCX5JTkZJTklQQVRIX0hXRV9JQl9VQ19NRU1PUllQQVJJVFlFUlI7CisJCX0KKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9od2Vycm1hc2ssCisJCQlkZC0+aXBhdGhfaHdlcnJtYXNrKTsKKwl9CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfc2RfdHJpbWRvbmVfbW9uaXRvcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisgICAgICAgY29uc3QgY2hhciAqd2hlcmUpCit7CisJaW50IHJldCwgY2huLCBiYWR1bnM7CisJdTY0IHZhbDsKKworCWlmICghd2hlcmUpCisJCXdoZXJlID0gIj8iOworCisJLyogZ2l2ZSB0aW1lIGZvciByZXNldCB0byBzZXR0bGUgb3V0IGluIEVQQiAqLworCXVkZWxheSgyKTsKKworCXJldCA9IGlwYXRoX3Jlc3luY19pYmVwYihkZCk7CisJaWYgKHJldCA8IDApCisJCWlwYXRoX2Rldl9lcnIoZGQsICJub3QgYWJsZSB0byByZS1zeW5jIElCIEVQQiAoJXMpXG4iLCB3aGVyZSk7CisKKwkvKiBEbyAic2FjcmlmaWNpYWwgcmVhZCIgdG8gZ2V0IEVQQiBpbiBzYW5lIHN0YXRlIGFmdGVyIHJlc2V0ICovCisJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLCBJQl9DVFJMMigwKSwgMCwgMCk7CisJaWYgKHJldCA8IDApCisJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgVFJJTURPTkUgMXN0IHJlYWQsICglcylcbiIsIHdoZXJlKTsKKworCS8qIENoZWNrL3Nob3cgInN1bW1hcnkiIFRyaW0tZG9uZSBiaXQgaW4gSUJDU3RhdHVzICovCisJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjc3RhdHVzKTsKKwlpZiAodmFsICYgKDFVTEwgPDwgMTEpKQorCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJJQkNTIFRSSU1ET05FIHNldCAoJXMpXG4iLCB3aGVyZSk7CisJZWxzZQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiSUJDUyBUUklNRE9ORSBjbGVhciAoJXMpXG4iLCB3aGVyZSk7CisKKwl1ZGVsYXkoMik7CisKKwlyZXQgPSBpcGF0aF9zZDcyMjBfcmVnX21vZChkZCwgSUJfNzIyMF9TRVJERVMsIElCX01QUkVHNiwgMHg4MCwgMHg4MCk7CisJaWYgKHJldCA8IDApCisJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgRHVtbXkgUk1XLCAoJXMpXG4iLCB3aGVyZSk7CisJdWRlbGF5KDEwKTsKKworCWJhZHVucyA9IDA7CisKKwlmb3IgKGNobiA9IDM7IGNobiA+PSAwOyAtLWNobikgeworCQkvKiBSZWFkIENUUkwgcmVnIGZvciBlYWNoIGNoYW5uZWwgdG8gY2hlY2sgVFJJTURPTkUgKi8KKwkJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLAorCQkJSUJfQ1RSTDIoY2huKSwgMCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCBjaGVja2luZyBUUklNRE9ORSwgY2huICVkIgorCQkJCSIgKCVzKVxuIiwgY2huLCB3aGVyZSk7CisKKwkJaWYgKCEocmV0ICYgMHgxMCkpIHsKKwkJCWludCBwcm9iZTsKKwkJCWJhZHVucyB8PSAoMSA8PCBjaG4pOworCQkJaXBhdGhfZGV2X2VycihkZCwgIlRSSU1ET05FIGNsZWFyZWQgb24gY2huICVkICglMDJYKS4iCisJCQkJIiAoJXMpXG4iLCBjaG4sIHJldCwgd2hlcmUpOworCQkJcHJvYmUgPSBpcGF0aF9zZDcyMjBfcmVnX21vZChkZCwgSUJfNzIyMF9TRVJERVMsCisJCQkJSUJfUEdVRFAoMCksIDAsIDApOworCQkJaXBhdGhfZGV2X2VycihkZCwgInByb2JlIGlzICVkICglMDJYKVxuIiwKKwkJCQlwcm9iZSwgcHJvYmUpOworCQkJcHJvYmUgPSBpcGF0aF9zZDcyMjBfcmVnX21vZChkZCwgSUJfNzIyMF9TRVJERVMsCisJCQkJSUJfQ1RSTDIoY2huKSwgMCwgMCk7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAicmUtcmVhZDogJWQgKCUwMlgpXG4iLAorCQkJCXByb2JlLCBwcm9iZSk7CisJCQlyZXQgPSBpcGF0aF9zZDcyMjBfcmVnX21vZChkZCwgSUJfNzIyMF9TRVJERVMsCisJCQkJSUJfQ1RSTDIoY2huKSwgMHgxMCwgMHgxMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLAorCQkJCQkiRXJyIG9uIFRSSU1ET05FIHJld3JpdGUxXG4iKTsKKwkJfQorCX0KKwlmb3IgKGNobiA9IDM7IGNobiA+PSAwOyAtLWNobikgeworCQkvKiBSZWFkIENUUkwgcmVnIGZvciBlYWNoIGNoYW5uZWwgdG8gY2hlY2sgVFJJTURPTkUgKi8KKwkJaWYgKGJhZHVucyAmICgxIDw8IGNobikpIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsCisJCQkJIlJlc2V0aW5nIFRSSU1ET05FIG9uIGNobiAlZCAoJXMpXG4iLAorCQkJCWNobiwgd2hlcmUpOworCQkJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLAorCQkJCUlCX0NUUkwyKGNobiksIDB4MTAsIDB4MTApOworCQkJaWYgKHJldCA8IDApCisJCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCByZS1zZXR0aW5nICIKKwkJCQkJIlRSSU1ET05FLCBjaG4gJWQgKCVzKVxuIiwKKwkJCQkJY2huLCB3aGVyZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBCZWxvdyBpcyBwb3J0aW9uIG9mIElCQTcyMjAtc3BlY2lmaWMgYnJpbmd1cF9zZXJkZXMoKSB0aGF0IGFjdHVhbGx5CisgKiBkZWFscyB3aXRoIHJlZ2lzdGVycyBhbmQgbWVtb3J5IHdpdGhpbiB0aGUgU2VyRGVzIGl0c2VsZi4KKyAqIFBvc3QgSUIgdUMgY29kZSB2ZXJzaW9uIDEuMzIuMTcsIHdhc19yZXNldCBiZWluZyAxIGlzIG5vdCByZWFsbHkKKyAqIGluZm9ybWF0aXZlLCBzbyB3ZSBkb3VibGUtY2hlY2suCisgKi8KK2ludCBpcGF0aF9zZDcyMjBfaW5pdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB3YXNfcmVzZXQpCit7CisJaW50IHJldCA9IDE7IC8qIGRlZmF1bHQgdG8gZmFpbHVyZSAqLworCWludCBmaXJzdF9yZXNldDsKKwlpbnQgdmFsX3N0YXQ7CisKKwlpZiAoIXdhc19yZXNldCkgeworCQkvKiBlbnRlcmVkIHdpdGggcmVzZXQgbm90IGFzc2VydGVkLCB3ZSBuZWVkIHRvIGRvIGl0ICovCisJCWlwYXRoX2lic2RfcmVzZXQoZGQsIDEpOworCQlpcGF0aF9zZF90cmltZG9uZV9tb25pdG9yKGRkLCAiRHJpdmVyLXJlbG9hZCIpOworCX0KKworCS8qIFN1YnN0aXR1dGUgb3VyIGRlZHVjZWQgdmFsdWUgZm9yIHdhc19yZXNldCAqLworCXJldCA9IGlwYXRoX2lic2RfdWNvZGVfbG9hZGVkKGRkKTsKKwlpZiAocmV0IDwgMCkgeworCQlyZXQgPSAxOworCQlnb3RvIGRvbmU7CisJfQorCWZpcnN0X3Jlc2V0ID0gIXJldDsgLyogRmlyc3QgcmVzZXQgaWYgSUJTRCB1Q29kZSBub3QgeWV0IGxvYWRlZCAqLworCisJLyoKKwkgKiBBbHRlciBzb21lIHJlZ3MgcGVyIHZlbmRvciBsYXRlc3QgZG9jLCByZXNldC1kZWZhdWx0cworCSAqIGFyZSBub3QgcmlnaHQgZm9yIElCLgorCSAqLworCXJldCA9IGlwYXRoX3NkX2Vhcmx5KGRkKTsKKwlpZiAocmV0IDwgMCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHNldCBJQiBTRVJERVMgZWFybHkgZGVmYXVsdHNcbiIpOworCQlyZXQgPSAxOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBTZXQgREFDIG1hbnVhbCB0cmltIElCLgorCSAqIFdlIG9ubHkgZG8gdGhpcyBvbmNlIGFmdGVyIGNoaXAgaGFzIGJlZW4gcmVzZXQgKHVzdWFsbHkKKwkgKiBzYW1lIGFzIG9uY2UgcGVyIHN5c3RlbSBib290KS4KKwkgKi8KKwlpZiAoZmlyc3RfcmVzZXQpIHsKKwkJcmV0ID0gaXBhdGhfc2RfZGFjdHJpbShkZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIElCIFNFUkRFUyBEQUMgdHJpbVxuIik7CisJCQlyZXQgPSAxOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJLyoKKwkgKiBTZXQgdmFyaW91cyByZWdpc3RlcnMgKEREUyBhbmQgUlhFUSkgdGhhdCB3aWxsIGJlCisJICogY29udHJvbGxlZCBieSBJQkMgKGluIDEuMiBtb2RlKSB0byByZWFzb25hYmxlIHByZXNldCB2YWx1ZXMKKwkgKiBDYWxsaW5nIHRoZSAiaW50ZXJuYWwiIHZlcnNpb24gYXZvaWRzIHRoZSAiY2hlY2sgZm9yIG5lZWRlZCIKKwkgKiBhbmQgInRyaW1kb25lIG1vbml0b3IiIHRoYXQgbWlnaHQgYmUgY291bnRlci1wcm9kdWN0aXZlLgorCSAqLworCXJldCA9IGlwYXRoX2ludGVybmFsX3ByZXNldHMoZGQpOworCWlmIChyZXQgPCAwKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgdG8gc2V0IElCIFNFUkRFUyBwcmVzZXRzXG4iKTsKKwkJcmV0ID0gMTsKKwkJZ290byBkb25lOworCX0KKwlyZXQgPSBpcGF0aF9zZF90cmltc2VsZihkZCwgMHg4MCk7CisJaWYgKHJldCA8IDApIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byBzZXQgSUIgU0VSREVTIFRSSU1TRUxGXG4iKTsKKwkJcmV0ID0gMTsKKwkJZ290byBkb25lOworCX0KKworCS8qIExvYWQgaW1hZ2UsIHRoZW4gdHJ5IHRvIHZlcmlmeSAqLworCXJldCA9IDA7CS8qIEFzc3VtZSBzdWNjZXNzICovCisJaWYgKGZpcnN0X3Jlc2V0KSB7CisJCWludCB2Znk7CisJCWludCB0cmltX2RvbmU7CisJCWlwYXRoX2RiZygiU2VyRGVzIHVDIHdhcyByZXNldCwgcmVsb2FkaW5nIFBSQU1cbiIpOworCQlyZXQgPSBpcGF0aF9zZDcyMjBfaWJfbG9hZChkZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIGxvYWQgSUIgU0VSREVTIGltYWdlXG4iKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBMb2FkZWQgaW1hZ2UsIHRyeSB0byB2ZXJpZnkgKi8KKwkJdmZ5ID0gaXBhdGhfc2Q3MjIwX2liX3ZmeShkZCk7CisJCWlmICh2ZnkgIT0gcmV0KSB7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiU0VSREVTIFBSQU0gVkZZIGZhaWxlZFxuIik7CisJCQlyZXQgPSAxOworCQkJZ290byBkb25lOworCQl9CisJCS8qCisJCSAqIExvYWRlZCBhbmQgdmVyaWZpZWQuIEFsbW9zdCBnb29kLi4uCisJCSAqIGhvbGQgInN1Y2Nlc3MiIGluIHJldAorCQkgKi8KKwkJcmV0ID0gMDsKKworCQkvKgorCQkgKiBQcmV2IHN0ZXBzIGFsbCB3b3JrZWQsIGNvbnRpbnVlIGJyaW5ndXAKKwkJICogRGUtYXNzZXJ0IFJFU0VUIHRvIHVDLCBvbmx5IGluIGZpcnN0IHJlc2V0LCB0byBhbGxvdworCQkgKiB0cmltbWluZy4KKwkJICoKKwkJICogU2luY2Ugb3VyIGRlZmF1bHQgc2V0dXAgc2V0cyBTVEFSVF9FUTEgdG8KKwkJICogUFJFU0VULCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgZm9yIHRoaXMgdmVyeSBmaXJzdCBydW4uCisJCSAqLworCQlyZXQgPSBpYnNkX21vZF9hbGxjaG5scyhkZCwgU1RBUlRfRVExKDApLCAwLCAweDM4KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgY2xlYXJpbmcgU1RBUlRfRVExXG4iKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpcGF0aF9pYnNkX3Jlc2V0KGRkLCAwKTsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHJlc2V0LCB0cmltZG9uZSBzaG91bGQgYmUgc2V0CisJCSAqIGFscmVhZHkuCisJCSAqLworCQl0cmltX2RvbmUgPSBpcGF0aF9zZF90cmltZG9uZV9wb2xsKGRkKTsKKwkJLyoKKwkJICogV2hldGhlciBvciBub3QgdHJpbWRvbmUgc3VjY2VlZGVkLCB3ZSBuZWVkIHRvIHB1dCB0aGUKKwkJICogdUMgYmFjayBpbnRvIHJlc2V0IHRvIGF2b2lkIGEgcG9zc2libGUgZmlnaHQgd2l0aCB0aGUKKwkJICogSUJDIHN0YXRlLW1hY2hpbmUuCisJCSAqLworCQlpcGF0aF9pYnNkX3Jlc2V0KGRkLCAxKTsKKworCQlpZiAoIXRyaW1fZG9uZSkgeworCQkJaXBhdGhfZGV2X2VycihkZCwgIk5vIFRSSU1ET05FIHNlZW5cbiIpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlwYXRoX3NkX3RyaW1kb25lX21vbml0b3IoZGQsICJGaXJzdC1yZXNldCIpOworCQkvKiBSZW1lbWJlciBzbyB3ZSBkbyBub3QgcmUtZG8gdGhlIGxvYWQsIGRhY3RyaW0sIGV0Yy4gKi8KKwkJZGQtPnNlcmRlc19maXJzdF9pbml0X2RvbmUgPSAxOworCX0KKwkvKgorCSAqIFNldHVwIGZvciBjaGFubmVsIHRyYWluaW5nIGFuZCBsb2FkIHZhbHVlcyBmb3IKKwkgKiBSeEVxIGFuZCBERFMgaW4gdGFibGVzIHVzZWQgYnkgSUJDIGluIElCMS4yIG1vZGUKKwkgKi8KKworCXZhbF9zdGF0ID0gaXBhdGhfc2Rfc2V0dmFscyhkZCk7CisJaWYgKHZhbF9zdGF0IDwgMCkKKwkJcmV0ID0gMTsKK2RvbmU6CisJLyogc3RhcnQgcmVsb2NrIHRpbWVyIHJlZ2FyZGxlc3MsIGJ1dCBzdGFydCBhdCAxIHNlY29uZCAqLworCWlwYXRoX3NldF9yZWxvY2tfcG9sbChkZCwgLTEpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgRVBCX0FDQ19SRVEgMQorI2RlZmluZSBFUEJfQUNDX0dOVCAweDEwMAorI2RlZmluZSBFUEJfREFUQV9NQVNLIDB4RkYKKyNkZWZpbmUgRVBCX1JEICgxVUxMIDw8IDI0KQorI2RlZmluZSBFUEJfVFJBTlNfUkRZICgxVUxMIDw8IDMxKQorI2RlZmluZSBFUEJfVFJBTlNfRVJSICgxVUxMIDw8IDMwKQorI2RlZmluZSBFUEJfVFJBTlNfVFJJRVMgNQorCisvKgorICogcXVlcnksIGNsYWltLCByZWxlYXNlIG93bmVyc2hpcCBvZiB0aGUgRVBCIChFeHRlcm5hbCBQYXJhbGxlbCBCdXMpCisgKiBmb3IgYSBzcGVjaWZpZWQgU0VSREVTLgorICogdGhlICJjbGFpbSIgcGFyYW1ldGVyIGlzID4wIHRvIGNsYWltLCA8MCB0byByZWxlYXNlLCAwIHRvIHF1ZXJ5LgorICogUmV0dXJucyA8MCBmb3IgZXJyb3JzLCA+MCBpZiB3ZSBoYWQgb3duZXJzaGlwLCBlbHNlIDAuCisgKi8KK3N0YXRpYyBpbnQgZXBiX2FjY2VzcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBzZG51bSwgaW50IGNsYWltKQoreworCXUxNiBhY2M7CisJdTY0IGFjY3ZhbDsKKwlpbnQgb3duZWQgPSAwOworCXU2NCBvY3Rfc2VsID0gMDsKKworCXN3aXRjaCAoc2RudW0pIHsKKwljYXNlIElCXzcyMjBfU0VSREVTIDoKKwkJLyoKKwkJICogVGhlIElCIFNFUkRFUyAib3duZXJzaGlwIiBpcyBmYWlybHkgc2ltcGxlLiBBIHNpbmdsZSBlYWNoCisJCSAqIHJlcXVlc3QvZ3JhbnQuCisJCSAqLworCQlhY2MgPSBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liX2VwYmFjYzsKKwkJYnJlYWs7CisJY2FzZSBQQ0lFX1NFUkRFUzAgOgorCWNhc2UgUENJRV9TRVJERVMxIDoKKwkJLyogUENJZSBTRVJERVMgaGFzIHR3byAib2N0YW50cyIsIG5lZWQgdG8gc2VsZWN0IHdoaWNoICovCisJCWFjYyA9IGRkLT5pcGF0aF9rcmVncy0+a3JfcGNpZV9lcGJhY2M7CisJCW9jdF9zZWwgPSAoMiA8PCAoc2RudW0gLSBQQ0lFX1NFUkRFUzApKTsKKwkJYnJlYWs7CisJZGVmYXVsdCA6CisJCXJldHVybiAwOworCX0KKworCS8qIE1ha2Ugc3VyZSBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24gd2FzIHNlZW4gKi8KKwlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwl1ZGVsYXkoMTUpOworCisJYWNjdmFsID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGFjYyk7CisKKwlvd25lZCA9ICEhKGFjY3ZhbCAmIEVQQl9BQ0NfR05UKTsKKwlpZiAoY2xhaW0gPCAwKSB7CisJCS8qIE5lZWQgdG8gcmVsZWFzZSAqLworCQl1NjQgcG9sbHZhbDsKKwkJLyoKKwkJICogVGhlIG9ubHkgd3JpdGVhYmxlIGJpdHMgYXJlIHRoZSByZXF1ZXN0IGFuZCBDUy4KKwkJICogQm90aCBzaG91bGQgYmUgY2xlYXIKKwkJICovCisJCXU2NCBuZXd2YWwgPSAwOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBhY2MsIG5ld3ZhbCk7CisJCS8qIEZpcnN0IHJlYWQgYWZ0ZXIgd3JpdGUgaXMgbm90IHRydXN0d29ydGh5ICovCisJCXBvbGx2YWwgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgYWNjKTsKKwkJdWRlbGF5KDUpOworCQlwb2xsdmFsID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGFjYyk7CisJCWlmIChwb2xsdmFsICYgRVBCX0FDQ19HTlQpCisJCQlvd25lZCA9IC0xOworCX0gZWxzZSBpZiAoY2xhaW0gPiAwKSB7CisJCS8qIE5lZWQgdG8gY2xhaW0gKi8KKwkJdTY0IHBvbGx2YWw7CisJCXU2NCBuZXd2YWwgPSBFUEJfQUNDX1JFUSB8IG9jdF9zZWw7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGFjYywgbmV3dmFsKTsKKwkJLyogRmlyc3QgcmVhZCBhZnRlciB3cml0ZSBpcyBub3QgdHJ1c3R3b3J0aHkgKi8KKwkJcG9sbHZhbCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCBhY2MpOworCQl1ZGVsYXkoNSk7CisJCXBvbGx2YWwgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgYWNjKTsKKwkJaWYgKCEocG9sbHZhbCAmIEVQQl9BQ0NfR05UKSkKKwkJCW93bmVkID0gLTE7CisJfQorCXJldHVybiBvd25lZDsKK30KKworLyoKKyAqIExlbW1hIHRvIGRlYWwgd2l0aCByYWNlIGNvbmRpdGlvbiBvZiB3cml0ZS4ucmVhZCB0byBlcGIgcmVncworICovCitzdGF0aWMgaW50IGVwYl90cmFucyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiByZWcsIHU2NCBpX3ZhbCwgdTY0ICpvX3ZwKQoreworCWludCB0cmllczsKKwl1NjQgdHJhbnN2YWw7CisKKworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIHJlZywgaV92YWwpOworCS8qIFRocm93IGF3YXkgZmlyc3QgcmVhZCwgYXMgUkRZIGJpdCBtYXkgYmUgc3RhbGUgKi8KKwl0cmFuc3ZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCByZWcpOworCisJZm9yICh0cmllcyA9IEVQQl9UUkFOU19UUklFUzsgdHJpZXM7IC0tdHJpZXMpIHsKKwkJdHJhbnN2YWwgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgcmVnKTsKKwkJaWYgKHRyYW5zdmFsICYgRVBCX1RSQU5TX1JEWSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoNSk7CisJfQorCWlmICh0cmFuc3ZhbCAmIEVQQl9UUkFOU19FUlIpCisJCXJldHVybiAtMTsKKwlpZiAodHJpZXMgPiAwICYmIG9fdnApCisJCSpvX3ZwID0gdHJhbnN2YWw7CisJcmV0dXJuIHRyaWVzOworfQorCisvKioKKyAqCisgKiBpcGF0aF9zZDcyMjBfcmVnX21vZCAtIG1vZGlmeSBTRVJERVMgcmVnaXN0ZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAc2RudW06IHdoaWNoIFNFUkRFUyB0byBhY2Nlc3MKKyAqIEBsb2M6IGxvY2F0aW9uIC0gY2hhbm5lbCwgZWxlbWVudCwgcmVnaXN0ZXIsIGFzIHBhY2tlZCBieSBFUEJfTE9DKCkgbWFjcm8uCisgKiBAd2Q6IFdyaXRlIERhdGEgLSB2YWx1ZSB0byBzZXQgaW4gcmVnaXN0ZXIKKyAqIEBtYXNrOiBvbmVzIHdoZXJlIGRhdGEgc2hvdWxkIGJlIHNwbGljZWQgaW50byByZWcuCisgKgorICogQmFzaWMgcmVnaXN0ZXIgcmVhZC9tb2RpZnkvd3JpdGUsIHdpdGggdW4tbmVlZGVkIGFjZXNzZXMgZWxpZGVkLiBUaGF0IGlzLAorICogYSBtYXNrIG9mIHplcm8gd2lsbCBwcmV2ZW50IHdyaXRlLCB3aGlsZSBhIG1hc2sgb2YgMHhGRiB3aWxsIHByZXZlbnQgcmVhZC4KKyAqIHJldHVybnMgY3VycmVudCAocHJlc3VtZWQsIGlmIGEgd3JpdGUgd2FzIGRvbmUpIGNvbnRlbnRzIG9mIHNlbGVjdGVkCisgKiByZWdpc3Rlciwgb3IgPDAgaWYgZXJyb3JzLgorICovCitzdGF0aWMgaW50IGlwYXRoX3NkNzIyMF9yZWdfbW9kKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHNkbnVtLCB1MzIgbG9jLAorCQkJCXUzMiB3ZCwgdTMyIG1hc2spCit7CisJdTE2IHRyYW5zOworCXU2NCB0cmFuc3ZhbDsKKwlpbnQgb3duZWQ7CisJaW50IHRyaWVzLCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN3aXRjaCAoc2RudW0pIHsKKwljYXNlIElCXzcyMjBfU0VSREVTIDoKKwkJdHJhbnMgPSBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liX2VwYnRyYW5zOworCQlicmVhazsKKwljYXNlIFBDSUVfU0VSREVTMCA6CisJY2FzZSBQQ0lFX1NFUkRFUzEgOgorCQl0cmFucyA9IGRkLT5pcGF0aF9rcmVncy0+a3JfcGNpZV9lcGJ0cmFuczsKKwkJYnJlYWs7CisJZGVmYXVsdCA6CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIEFsbCBhY2Nlc3MgaXMgbG9ja2VkIGluIHNvZnR3YXJlICh2cyBvdGhlciBob3N0IHRocmVhZHMpIGFuZAorCSAqIGhhcmR3YXJlICh2cyB1QyBhY2Nlc3MpLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2RlcGJfbG9jaywgZmxhZ3MpOworCisJb3duZWQgPSBlcGJfYWNjZXNzKGRkLCBzZG51bSwgMSk7CisJaWYgKG93bmVkIDwgMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RlcGJfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLTE7CisJfQorCXJldCA9IDA7CisJZm9yICh0cmllcyA9IEVQQl9UUkFOU19UUklFUzsgdHJpZXM7IC0tdHJpZXMpIHsKKwkJdHJhbnN2YWwgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgdHJhbnMpOworCQlpZiAodHJhbnN2YWwgJiBFUEJfVFJBTlNfUkRZKQorCQkJYnJlYWs7CisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAodHJpZXMgPiAwKSB7CisJCXRyaWVzID0gMTsJLyogdG8gbWFrZSByZWFkLXNraXAgd29yayAqLworCQlpZiAobWFzayAhPSAweEZGKSB7CisJCQkvKgorCQkJICogTm90IGEgcHVyZSB3cml0ZSwgc28gbmVlZCB0byByZWFkLgorCQkJICogbG9jIGVuY29kZXMgY2hpcC1zZWxlY3QgYXMgd2VsbCBhcyBhZGRyZXNzCisJCQkgKi8KKwkJCXRyYW5zdmFsID0gbG9jIHwgRVBCX1JEOworCQkJdHJpZXMgPSBlcGJfdHJhbnMoZGQsIHRyYW5zLCB0cmFuc3ZhbCwgJnRyYW5zdmFsKTsKKwkJfQorCQlpZiAodHJpZXMgPiAwICYmIG1hc2sgIT0gMCkgeworCQkJLyoKKwkJCSAqIE5vdCBhIHB1cmUgcmVhZCwgc28gbmVlZCB0byB3cml0ZS4KKwkJCSAqLworCQkJd2QgPSAod2QgJiBtYXNrKSB8ICh0cmFuc3ZhbCAmIH5tYXNrKTsKKwkJCXRyYW5zdmFsID0gbG9jIHwgKHdkICYgRVBCX0RBVEFfTUFTSyk7CisJCQl0cmllcyA9IGVwYl90cmFucyhkZCwgdHJhbnMsIHRyYW5zdmFsLCAmdHJhbnN2YWwpOworCQl9CisJfQorCS8qIGVsc2UsIGZhaWxlZCB0byBzZWUgcmVhZHksIHdoYXQgZXJyb3ItaGFuZGxpbmc/ICovCisKKwkvKgorCSAqIFJlbGVhc2UgYnVzLiBGYWlsdXJlIGlzIGFuIGVycm9yLgorCSAqLworCWlmIChlcGJfYWNjZXNzKGRkLCBzZG51bSwgLTEpIDwgMCkKKwkJcmV0ID0gLTE7CisJZWxzZQorCQlyZXQgPSB0cmFuc3ZhbCAmIEVQQl9EQVRBX01BU0s7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RlcGJfbG9jaywgZmxhZ3MpOworCWlmICh0cmllcyA8PSAwKQorCQlyZXQgPSAtMTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEVQQl9ST01fUiAoMikKKyNkZWZpbmUgRVBCX1JPTV9XICgxKQorLyoKKyAqIEJlbG93LCBhbGwgdUMtcmVsYXRlZCwgdXNlIGFwcHJvcHJpYXRlIFVDX0NTLCBkZXBlbmRpbmcKKyAqIG9uIHdoaWNoIFNlckRlcyBpcyB1c2VkLgorICovCisjZGVmaW5lIEVQQl9VQ19DVEwgRVBCX0xPQyg2LCAwLCAwKQorI2RlZmluZSBFUEJfTUFERFJMIEVQQl9MT0MoNiwgMCwgMikKKyNkZWZpbmUgRVBCX01BRERSSCBFUEJfTE9DKDYsIDAsIDMpCisjZGVmaW5lIEVQQl9ST01EQVRBIEVQQl9MT0MoNiwgMCwgNCkKKyNkZWZpbmUgRVBCX1JBTURBVEEgRVBCX0xPQyg2LCAwLCA1KQorCisvKiBUcmFuc2ZlciBkYXRlIHRvL2Zyb20gdUMgUHJvZ3JhbSBSQU0gb2YgSUIgb3IgUENJZSBTZXJEZXMgKi8KK3N0YXRpYyBpbnQgaXBhdGhfc2Q3MjIwX3JhbV94ZmVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHNkbnVtLCB1MzIgbG9jLAorCQkJICAgICAgIHU4ICpidWYsIGludCBjbnQsIGludCByZF9ub3R3cikKK3sKKwl1MTYgdHJhbnM7CisJdTY0IHRyYW5zdmFsOworCXU2NCBjc2JpdDsKKwlpbnQgb3duZWQ7CisJaW50IHRyaWVzOworCWludCBzb2ZhcjsKKwlpbnQgYWRkcjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3QgY2hhciAqb3A7CisKKwkvKiBQaWNrIGFwcHJvcHJpYXRlIHRyYW5zYWN0aW9uIHJlZyBhbmQgIkNoaXAgc2VsZWN0IiBmb3IgdGhpcyBzZXJkZXMgKi8KKwlzd2l0Y2ggKHNkbnVtKSB7CisJY2FzZSBJQl83MjIwX1NFUkRFUyA6CisJCWNzYml0ID0gMVVMTCA8PCBFUEJfSUJfVUNfQ1NfU0hGOworCQl0cmFucyA9IGRkLT5pcGF0aF9rcmVncy0+a3JfaWJfZXBidHJhbnM7CisJCWJyZWFrOworCWNhc2UgUENJRV9TRVJERVMwIDoKKwljYXNlIFBDSUVfU0VSREVTMSA6CisJCS8qIFBDSWUgU0VSREVTIGhhcyB1QyAiY2hpcCBzZWxlY3QiIGluIGRpZmZlcmVudCBiaXQsIHRvbyAqLworCQljc2JpdCA9IDFVTEwgPDwgRVBCX1BDSUVfVUNfQ1NfU0hGOworCQl0cmFucyA9IGRkLT5pcGF0aF9rcmVncy0+a3JfcGNpZV9lcGJ0cmFuczsKKwkJYnJlYWs7CisJZGVmYXVsdCA6CisJCXJldHVybiAtMTsKKwl9CisKKwlvcCA9IHJkX25vdHdyID8gIlJkIiA6ICJXciI7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZGVwYl9sb2NrLCBmbGFncyk7CisKKwlvd25lZCA9IGVwYl9hY2Nlc3MoZGQsIHNkbnVtLCAxKTsKKwlpZiAob3duZWQgPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZGVwYl9sb2NrLCBmbGFncyk7CisJCWlwYXRoX2RiZygiQ291bGQgbm90IGdldCAlcyBhY2Nlc3MgdG8gJXMgRVBCOiAlWCwgbG9jICVYXG4iLAorCQkJb3AsIChzZG51bSA9PSBJQl83MjIwX1NFUkRFUykgPyAiSUIiIDogIlBDSWUiLAorCQkJb3duZWQsIGxvYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIEluIGZ1dHVyZSBjb2RlLCB3ZSBtYXkgbmVlZCB0byBkaXN0aW5ndWlzaCBzZXZlcmFsIGFkZHJlc3MgcmFuZ2VzLAorCSAqIGFuZCBzZWxlY3QgdmFyaW91cyBtZW1vcmllcyBiYXNlZCBvbiB0aGlzLiBGb3Igbm93LCBqdXN0IHRyaW0KKwkgKiAibG9jIiAobG9jYXRpb24gaW5jbHVkaW5nIGFkZHJlc3MgYW5kIG1lbW9yeSBzZWxlY3QpIHRvCisJICogImFkZHIiIChhZGRyZXNzIHdpdGhpbiBtZW1vcnkpLiB3ZSB3aWxsIG9ubHkgc3VwcG9ydCBQUkFNCisJICogVGhlIG1lbW9yeSBpcyA4S0IuCisJICovCisJYWRkciA9IGxvYyAmIDB4MUZGRjsKKwlmb3IgKHRyaWVzID0gRVBCX1RSQU5TX1RSSUVTOyB0cmllczsgLS10cmllcykgeworCQl0cmFuc3ZhbCA9IGlwYXRoX3JlYWRfa3JlZzMyKGRkLCB0cmFucyk7CisJCWlmICh0cmFuc3ZhbCAmIEVQQl9UUkFOU19SRFkpCisJCQlicmVhazsKKwkJdWRlbGF5KDUpOworCX0KKworCXNvZmFyID0gMDsKKwlpZiAodHJpZXMgPD0gMCkKKwkJaXBhdGhfZGJnKCJObyBpbml0aWFsIFJEWSBvbiBFUEIgYWNjZXNzIHJlcXVlc3RcbiIpOworCWVsc2UgeworCQkvKgorCQkgKiBFdmVyeSAibWVtb3J5IiBhY2Nlc3MgaXMgZG91Ymx5LWluZGlyZWN0LgorCQkgKiBXZSBzZXQgdHdvIGJ5dGVzIG9mIGFkZHJlc3MsIHRoZW4gcmVhZC93cml0ZQorCQkgKiBvbmUgb3IgbW9yZXMgYnl0ZXMgb2YgZGF0YS4KKwkJICovCisKKwkJLyogRmlyc3QsIHdlIHNldCBjb250cm9sIHRvICJSZWFkIiBvciAiV3JpdGUiICovCisJCXRyYW5zdmFsID0gY3NiaXQgfCBFUEJfVUNfQ1RMIHwKKwkJCShyZF9ub3R3ciA/IEVQQl9ST01fUiA6IEVQQl9ST01fVyk7CisJCXRyaWVzID0gZXBiX3RyYW5zKGRkLCB0cmFucywgdHJhbnN2YWwsICZ0cmFuc3ZhbCk7CisJCWlmICh0cmllcyA8PSAwKQorCQkJaXBhdGhfZGJnKCJObyBFUEIgcmVzcG9uc2UgdG8gdUMgJXMgY21kXG4iLCBvcCk7CisJCXdoaWxlICh0cmllcyA+IDAgJiYgc29mYXIgPCBjbnQpIHsKKwkJCWlmICghc29mYXIpIHsKKwkJCQkvKiBPbmx5IHNldCBhZGRyZXNzIGF0IHN0YXJ0IG9mIGNodW5rICovCisJCQkJaW50IGFkZHJieXRlID0gKGFkZHIgKyBzb2ZhcikgPj4gODsKKwkJCQl0cmFuc3ZhbCA9IGNzYml0IHwgRVBCX01BRERSSCB8IGFkZHJieXRlOworCQkJCXRyaWVzID0gZXBiX3RyYW5zKGRkLCB0cmFucywgdHJhbnN2YWwsCisJCQkJCQkgICZ0cmFuc3ZhbCk7CisJCQkJaWYgKHRyaWVzIDw9IDApIHsKKwkJCQkJaXBhdGhfZGJnKCJObyBFUEIgcmVzcG9uc2UgQUREUkhcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYWRkcmJ5dGUgPSAoYWRkciArIHNvZmFyKSAmIDB4RkY7CisJCQkJdHJhbnN2YWwgPSBjc2JpdCB8IEVQQl9NQUREUkwgfCBhZGRyYnl0ZTsKKwkJCQl0cmllcyA9IGVwYl90cmFucyhkZCwgdHJhbnMsIHRyYW5zdmFsLAorCQkJCQkJICZ0cmFuc3ZhbCk7CisJCQkJaWYgKHRyaWVzIDw9IDApIHsKKwkJCQkJaXBhdGhfZGJnKCJObyBFUEIgcmVzcG9uc2UgQUREUkxcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChyZF9ub3R3cikKKwkJCQl0cmFuc3ZhbCA9IGNzYml0IHwgRVBCX1JPTURBVEEgfCBFUEJfUkQ7CisJCQllbHNlCisJCQkJdHJhbnN2YWwgPSBjc2JpdCB8IEVQQl9ST01EQVRBIHwgYnVmW3NvZmFyXTsKKwkJCXRyaWVzID0gZXBiX3RyYW5zKGRkLCB0cmFucywgdHJhbnN2YWwsICZ0cmFuc3ZhbCk7CisJCQlpZiAodHJpZXMgPD0gMCkgeworCQkJCWlwYXRoX2RiZygiTm8gRVBCIHJlc3BvbnNlIERBVEFcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHJkX25vdHdyKQorCQkJCWJ1Zltzb2Zhcl0gPSB0cmFuc3ZhbCAmIEVQQl9EQVRBX01BU0s7CisJCQkrK3NvZmFyOworCQl9CisJCS8qIEZpbmFsbHksIGNsZWFyIGNvbnRyb2wtYml0IGZvciBSZWFkIG9yIFdyaXRlICovCisJCXRyYW5zdmFsID0gY3NiaXQgfCBFUEJfVUNfQ1RMOworCQl0cmllcyA9IGVwYl90cmFucyhkZCwgdHJhbnMsIHRyYW5zdmFsLCAmdHJhbnN2YWwpOworCQlpZiAodHJpZXMgPD0gMCkKKwkJCWlwYXRoX2RiZygiTm8gRVBCIHJlc3BvbnNlIHRvIGRyb3Agb2YgdUMgJXMgY21kXG4iLCBvcCk7CisJfQorCisJcmV0ID0gc29mYXI7CisJLyogUmVsZWFzZSBidXMuIEZhaWx1cmUgaXMgYW4gZXJyb3IgKi8KKwlpZiAoZXBiX2FjY2VzcyhkZCwgc2RudW0sIC0xKSA8IDApCisJCXJldCA9IC0xOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NkZXBiX2xvY2ssIGZsYWdzKTsKKwlpZiAodHJpZXMgPD0gMCkgeworCQlpcGF0aF9kYmcoIlNFUkRFUyBQUkFNICVzIGZhaWxlZCBhZnRlciAlZCBieXRlc1xuIiwgb3AsIHNvZmFyKTsKKwkJcmV0ID0gLTE7CisJfQorCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgUFJPR19DSFVOSyA2NAorCitpbnQgaXBhdGhfc2Q3MjIwX3Byb2dfbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgc2RudW0sCisJdTggKmltZywgaW50IGxlbiwgaW50IG9mZnNldCkKK3sKKwlpbnQgY250LCBzb2ZhciwgcmVxOworCisJc29mYXIgPSAwOworCXdoaWxlIChzb2ZhciA8IGxlbikgeworCQlyZXEgPSBsZW4gLSBzb2ZhcjsKKwkJaWYgKHJlcSA+IFBST0dfQ0hVTkspCisJCQlyZXEgPSBQUk9HX0NIVU5LOworCQljbnQgPSBpcGF0aF9zZDcyMjBfcmFtX3hmZXIoZGQsIHNkbnVtLCBvZmZzZXQgKyBzb2ZhciwKKwkJCQkJICBpbWcgKyBzb2ZhciwgcmVxLCAwKTsKKwkJaWYgKGNudCA8IHJlcSkgeworCQkJc29mYXIgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJCXNvZmFyICs9IHJlcTsKKwl9CisJcmV0dXJuIHNvZmFyOworfQorCisjZGVmaW5lIFZGWV9DSFVOSyA2NAorI2RlZmluZSBTRF9QUkFNX0VSUk9SX0xJTUlUIDQyCisKK2ludCBpcGF0aF9zZDcyMjBfcHJvZ192Znkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgc2RudW0sCisJY29uc3QgdTggKmltZywgaW50IGxlbiwgaW50IG9mZnNldCkKK3sKKwlpbnQgY250LCBzb2ZhciwgcmVxLCBpZHgsIGVycm9yczsKKwl1bnNpZ25lZCBjaGFyIHJlYWRiYWNrW1ZGWV9DSFVOS107CisKKwllcnJvcnMgPSAwOworCXNvZmFyID0gMDsKKwl3aGlsZSAoc29mYXIgPCBsZW4pIHsKKwkJcmVxID0gbGVuIC0gc29mYXI7CisJCWlmIChyZXEgPiBWRllfQ0hVTkspCisJCQlyZXEgPSBWRllfQ0hVTks7CisJCWNudCA9IGlwYXRoX3NkNzIyMF9yYW1feGZlcihkZCwgc2RudW0sIHNvZmFyICsgb2Zmc2V0LAorCQkJCQkgIHJlYWRiYWNrLCByZXEsIDEpOworCQlpZiAoY250IDwgcmVxKSB7CisJCQkvKiBmYWlsZWQgaW4gcmVhZCBpdHNlbGYgKi8KKwkJCXNvZmFyID0gLTE7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGNudDsgKytpZHgpIHsKKwkJCWlmIChyZWFkYmFja1tpZHhdICE9IGltZ1tpZHgrc29mYXJdKQorCQkJCSsrZXJyb3JzOworCQl9CisJCXNvZmFyICs9IGNudDsKKwl9CisJcmV0dXJuIGVycm9ycyA/IC1lcnJvcnMgOiBzb2ZhcjsKK30KKworLyogSVJRIG5vdCBzZXQgdXAgYXQgdGhpcyBwb2ludCBpbiBpbml0LCBzbyB3ZSBwb2xsLiAqLworI2RlZmluZSBJQl9TRVJERVNfVFJJTV9ET05FICgxVUxMIDw8IDExKQorI2RlZmluZSBUUklNX1RNTyAoMzApCisKK3N0YXRpYyBpbnQgaXBhdGhfc2RfdHJpbWRvbmVfcG9sbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHRyaW1fdG1vLCByZXQ7CisJdWludDY0X3QgdmFsOworCisJLyoKKwkgKiBEZWZhdWx0IHRvIGZhaWx1cmUsIHNvIElCQyB3aWxsIG5vdCBzdGFydAorCSAqIHdpdGhvdXQgSUJfU0VSREVTX1RSSU1fRE9ORS4KKwkgKi8KKwlyZXQgPSAwOworCWZvciAodHJpbV90bW8gPSAwOyB0cmltX3RtbyA8IFRSSU1fVE1POyArK3RyaW1fdG1vKSB7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY3N0YXR1cyk7CisJCWlmICh2YWwgJiBJQl9TRVJERVNfVFJJTV9ET05FKSB7CisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJUUklNRE9ORSBhZnRlciAlZFxuIiwgdHJpbV90bW8pOworCQkJcmV0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCW1zbGVlcCgxMCk7CisJfQorCWlmICh0cmltX3RtbyA+PSBUUklNX1RNTykgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiTm8gVFJJTURPTkUgaW4gJWQgdHJpZXNcbiIsIHRyaW1fdG1vKTsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBUWF9GQVNUX0VMVCAoOSkKKworLyoKKyAqIFNldCB0aGUgIm5lZ290aWF0aW9uIiB2YWx1ZXMgZm9yIFNFUkRFUy4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlIElCMS4yCisgKiBsaW5rIG5lZ290aWF0aW9uLiBNYWNyb3MgYmVsb3cgYXJlIGF0dGVtcHQgdG8ga2VlcCB0aGUgdmFsdWVzIGEKKyAqIGxpdHRsZSBtb3JlIGh1bWFuLWVkaXRhYmxlLgorICogRmlyc3QsIHZhbHVlcyByZWxhdGVkIHRvIERyaXZlIERlLWVtcGhhc2lzIFNldHRpbmdzLgorICovCisKKyNkZWZpbmUgTlVNX0REU19SRUdTIDYKKyNkZWZpbmUgRERTX1JFR19NQVAgMHg3NkE5MTAgLyogTFNCLWZpcnN0IGxpc3Qgb2YgcmVncyAoaW4gZWx0IDkpIHRvIG1vZCAqLworCisjZGVmaW5lIEREU19WQUwoYW1wX2QsIG1haW5fZCwgaXBzdF9kLCBpcHJlX2QsIGFtcF9zLCBtYWluX3MsIGlwc3RfcywgaXByZV9zKSBcCisJeyB7ICgoYW1wX2QgJiAweDFGKSA8PCAxKSB8IDEsICgoYW1wX3MgJiAweDFGKSA8PCAxKSB8IDEsIFwKKwkgIChtYWluX2QgPDwgMykgfCA0IHwgKGlwcmVfZCA+PiAyKSwgXAorCSAgKG1haW5fcyA8PCAzKSB8IDQgfCAoaXByZV9zID4+IDIpLCBcCisJICAoKGlwc3RfZCAmIDB4RikgPDwgMSkgfCAoKGlwcmVfZCAmIDMpIDw8IDYpIHwgMHgyMSwgXAorCSAgKChpcHN0X3MgJiAweEYpIDw8IDEpIHwgKChpcHJlX3MgJiAzKSA8PCA2KSB8IDB4MjEgfSB9CisKK3N0YXRpYyBzdHJ1Y3QgZGRzX2luaXQgeworCXVpbnQ4X3QgcmVnX3ZhbHNbTlVNX0REU19SRUdTXTsKK30gZGRzX2luaXRfdmFsc1tdID0geworCS8qICAgICAgIEREUihGRFIpICAgICAgIFNEUihIRFIpICAgKi8KKwkvKiBWZW5kb3IgcmVjb21tZW5kcyBiZWxvdyBmb3IgM20gY2FibGUgKi8KKyNkZWZpbmUgRERTXzNNIDAKKwlERFNfVkFMKDMxLCAxOSwgMTIsIDAsIDI5LCAyMiwgIDksIDApLAorCUREU19WQUwoMzEsIDEyLCAxNSwgNCwgMzEsIDE1LCAxNSwgMSksCisJRERTX1ZBTCgzMSwgMTMsIDE1LCAzLCAzMSwgMTYsIDE1LCAwKSwKKwlERFNfVkFMKDMxLCAxNCwgMTUsIDIsIDMxLCAxNywgMTQsIDApLAorCUREU19WQUwoMzEsIDE1LCAxNSwgMSwgMzEsIDE4LCAxMywgMCksCisJRERTX1ZBTCgzMSwgMTYsIDE1LCAwLCAzMSwgMTksIDEyLCAwKSwKKwlERFNfVkFMKDMxLCAxNywgMTQsIDAsIDMxLCAyMCwgMTEsIDApLAorCUREU19WQUwoMzEsIDE4LCAxMywgMCwgMzAsIDIxLCAxMCwgMCksCisJRERTX1ZBTCgzMSwgMjAsIDExLCAwLCAyOCwgMjMsICA4LCAwKSwKKwlERFNfVkFMKDMxLCAyMSwgMTAsIDAsIDI3LCAyNCwgIDcsIDApLAorCUREU19WQUwoMzEsIDIyLCAgOSwgMCwgMjYsIDI1LCAgNiwgMCksCisJRERTX1ZBTCgzMCwgMjMsICA4LCAwLCAyNSwgMjYsICA1LCAwKSwKKwlERFNfVkFMKDI5LCAyNCwgIDcsIDAsIDIzLCAyNywgIDQsIDApLAorCS8qIFZlbmRvciByZWNvbW1lbmRzIGJlbG93IGZvciAxbSBjYWJsZSAqLworI2RlZmluZSBERFNfMU0gMTMKKwlERFNfVkFMKDI4LCAyNSwgIDYsIDAsIDIxLCAyOCwgIDMsIDApLAorCUREU19WQUwoMjcsIDI2LCAgNSwgMCwgMTksIDI5LCAgMiwgMCksCisJRERTX1ZBTCgyNSwgMjcsICA0LCAwLCAxNywgMzAsICAxLCAwKQorfTsKKworLyoKKyAqIE5leHQsIHZhbHVlcyByZWxhdGVkIHRvIFJlY2VpdmUgRXF1YWxpemF0aW9uLgorICogSW4gY29tbWVudHMsIEZEUiAoRnVsbCkgaXMgSUIgRERSLCBIRFIgKEhhbGYpIGlzIElCIFNEUgorICovCisvKiBIYXJkd2FyZSBwYWNrcyBhbiBlbGVtZW50IG51bWJlciBhbmQgcmVnaXN0ZXIgYWRkcmVzcyB0aHVzOiAqLworI2RlZmluZSBSWEVRX0lOSVRfUkRFU0MoZWx0LCBhZGRyKSAoKChlbHQpICYgMHhGKSB8ICgoYWRkcikgPDwgNCkpCisjZGVmaW5lIFJYRVFfVkFMKGVsdCwgYWRyLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKSBcCisJe1JYRVFfSU5JVF9SREVTQygoZWx0KSwgKGFkcikpLCB7KHZhbDApLCAodmFsMSksICh2YWwyKSwgKHZhbDMpfSB9CisKKyNkZWZpbmUgUlhFUV9WQUxfQUxMKGVsdCwgYWRyLCB2YWwpICBcCisJe1JYRVFfSU5JVF9SREVTQygoZWx0KSwgKGFkcikpLCB7KHZhbCksICh2YWwpLCAodmFsKSwgKHZhbCl9IH0KKworI2RlZmluZSBSWEVRX1NEUl9ERkVMVEggMAorI2RlZmluZSBSWEVRX1NEUl9UTFRIIDAKKyNkZWZpbmUgUlhFUV9TRFJfRzFDTlRfWjFDTlQgMHgxMQorI2RlZmluZSBSWEVRX1NEUl9aQ05UIDIzCisKK3N0YXRpYyBzdHJ1Y3QgcnhlcV9pbml0IHsKKwl1MTYgcmRlc2M7CS8qIGluIGZvcm0gdXNlZCBpbiBTZXJEZXNERFNSWEVRICovCisJdTggIHJkYXRhWzRdOworfSByeGVxX2luaXRfdmFsc1tdID0geworCS8qIFNldCBSY3YgRXEuIHRvIFByZXNldCBub2RlICovCisJUlhFUV9WQUxfQUxMKDcsIDB4MjcsIDB4MTApLAorCS8qIFNldCBERkVMVEhGRFIvSERSIHRocmVzaG9sZHMgKi8KKwlSWEVRX1ZBTCg3LCA4LCAgICAwLCAwLCAwLCAwKSwgLyogRkRSICovCisJUlhFUV9WQUwoNywgMHgyMSwgMCwgMCwgMCwgMCksIC8qIEhEUiAqLworCS8qIFNldCBUTFRIRkRSL0hEUiB0aGVzaG9sZCAqLworCVJYRVFfVkFMKDcsIDksICAgIDIsIDIsIDIsIDIpLCAvKiBGRFIgKi8KKwlSWEVRX1ZBTCg3LCAweDIzLCAyLCAyLCAyLCAyKSwgLyogSERSICovCisJLyogU2V0IFByZWFtcCBzZXR0aW5nIDIgKFpGUi9aQ05UKSAqLworCVJYRVFfVkFMKDcsIDB4MUIsIDEyLCAxMiwgMTIsIDEyKSwgLyogRkRSICovCisJUlhFUV9WQUwoNywgMHgxQywgMTIsIDEyLCAxMiwgMTIpLCAvKiBIRFIgKi8KKwkvKiBTZXQgUHJlYW1wIERDIGdhaW4gYW5kIFNldHRpbmcgMSAoR0ZSL0dIUikgKi8KKwlSWEVRX1ZBTCg3LCAweDFFLCAweDEwLCAweDEwLCAweDEwLCAweDEwKSwgLyogRkRSICovCisJUlhFUV9WQUwoNywgMHgxRiwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCksIC8qIEhEUiAqLworCS8qIFRvZ2dsZSBSRUxPQ0sgKGluIFZDRExfQ1RSTDApIHRvIGxvY2sgdG8gZGF0YSAqLworCVJYRVFfVkFMX0FMTCg2LCA2LCAweDIwKSwgLyogU2V0IEQ1IEhpZ2ggKi8KKwlSWEVRX1ZBTF9BTEwoNiwgNiwgMCksIC8qIFNldCBENSBMb3cgKi8KK307CisKKy8qIFRoZXJlIGFyZSAxNyB2YWx1ZXMgZnJvbSB2ZW5kb3IsIGJ1dCBJQkMgb25seSBhY2Nlc3NlcyB0aGUgZmlyc3QgMTYgKi8KKyNkZWZpbmUgRERTX1JPV1MgKDE2KQorI2RlZmluZSBSWEVRX1JPV1MgQVJSQVlfU0laRShyeGVxX2luaXRfdmFscykKKworc3RhdGljIGludCBpcGF0aF9zZF9zZXR2YWxzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgaWR4LCBtaWR4OworCWludCBtaW5faWR4OwkgLyogTWluaW11bSBpbmRleCBmb3IgdGhpcyBwb3J0aW9uIG9mIHRhYmxlICovCisJdWludDMyX3QgZGRzX3JlZ19tYXA7CisJdTY0IF9faW9tZW0gKnRhZGRyLCAqaWFkZHI7CisJdWludDY0X3QgZGF0YTsKKwl1aW50NjRfdCBzZGN0bDsKKworCXRhZGRyID0gZGQtPmlwYXRoX2tyZWdiYXNlICsgS1JfSUJTZXJEZXNNYXBwVGFibGU7CisJaWFkZHIgPSBkZC0+aXBhdGhfa3JlZ2Jhc2UgKyBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liX2Rkc3J4ZXE7CisKKwkvKgorCSAqIEluaXQgdGhlIEREUyBzZWN0aW9uIG9mIHRoZSB0YWJsZS4KKwkgKiBFYWNoICJyb3ciIG9mIHRoZSB0YWJsZSBwcm92b2tlcyBOVU1fRERTX1JFRyB3cml0ZXMsIHRvIHRoZQorCSAqIHJlZ2lzdGVycyBpbmRpY2F0ZWQgaW4gRERTX1JFR19NQVAuCisJICovCisJc2RjdGwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYnNlcmRlc2N0cmwpOworCXNkY3RsID0gKHNkY3RsICYgfigweDFmIDw8IDgpKSB8IChOVU1fRERTX1JFR1MgPDwgOCk7CisJc2RjdGwgPSAoc2RjdGwgJiB+KDB4MWYgPDwgMTMpKSB8IChSWEVRX1JPV1MgPDwgMTMpOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJzZXJkZXNjdHJsLCBzZGN0bCk7CisKKwkvKgorCSAqIEl0ZXJhdGUgZG93biB0YWJsZSB3aXRoaW4gbG9vcCBmb3IgZWFjaCByZWdpc3RlciB0byBzdG9yZS4KKwkgKi8KKwlkZHNfcmVnX21hcCA9IEREU19SRUdfTUFQOworCWZvciAoaWR4ID0gMDsgaWR4IDwgTlVNX0REU19SRUdTOyArK2lkeCkgeworCQlkYXRhID0gKChkZHNfcmVnX21hcCAmIDB4RikgPDwgNCkgfCBUWF9GQVNUX0VMVDsKKwkJd3JpdGVxKGRhdGEsIGlhZGRyICsgaWR4KTsKKwkJbW1pb3diKCk7CisJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCQlkZHNfcmVnX21hcCA+Pj0gNDsKKwkJZm9yIChtaWR4ID0gMDsgbWlkeCA8IEREU19ST1dTOyArK21pZHgpIHsKKwkJCXU2NCBfX2lvbWVtICpkYWRkciA9IHRhZGRyICsgKChtaWR4IDw8IDQpICsgaWR4KTsKKwkJCWRhdGEgPSBkZHNfaW5pdF92YWxzW21pZHhdLnJlZ192YWxzW2lkeF07CisJCQl3cml0ZXEoZGF0YSwgZGFkZHIpOworCQkJbW1pb3diKCk7CisJCQlpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwkJfSAvKiBFbmQgaW5uZXIgZm9yICh2YWxzIGZvciB0aGlzIHJlZywgZWFjaCByb3cpICovCisJfSAvKiBlbmQgb3V0ZXIgZm9yIChyZWdzIHRvIGJlIHN0b3JlZCkgKi8KKworCS8qCisJICogSW5pdCB0aGUgUlhFUSBzZWN0aW9uIG9mIHRoZSB0YWJsZS4gQXMgZXhwbGFpbmVkIGFib3ZlIHRoZSB0YWJsZQorCSAqIHJ4ZXFfaW5pdF92YWxzW10sIHRoaXMgcnVucyBpbiBhIGRpZmZlcmVudCBvcmRlciwgYXMgdGhlIHBhdHRlcm4KKwkgKiBvZiByZWdpc3RlciByZWZlcmVuY2VzIGlzIG1vcmUgY29tcGxleCwgYnV0IHRoZXJlIGFyZSBvbmx5CisJICogZm91ciAiZGF0YSIgdmFsdWVzIHBlciByZWdpc3Rlci4KKwkgKi8KKwltaW5faWR4ID0gaWR4OyAvKiBSWEVRIGluZGljZXMgcGljayB1cCB3aGVyZSBERFMgbGVmdCBvZmYgKi8KKwl0YWRkciArPSAweDEwMDsgLyogUlhFUSBkYXRhIGlzIGluIHNlY29uZCBoYWxmIG9mIHRhYmxlICovCisJLyogSXRlcmF0ZSB0aHJvdWdoIFJYRVEgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisJZm9yIChpZHggPSAwOyBpZHggPCBSWEVRX1JPV1M7ICsraWR4KSB7CisJCWludCBkaWR4OyAvKiAiZGVzdGluYXRpb24iICovCisJCWludCB2aWR4OworCisJCS8qIGRpZHggaXMgb2Zmc2V0IGJ5IG1pbl9pZHggdG8gYWRkcmVzcyBSWEVRIHJhbmdlIG9mIHJlZ3MgKi8KKwkJZGlkeCA9IGlkeCArIG1pbl9pZHg7CisJCS8qIFN0b3JlIHRoZSBuZXh0IFJYRVEgcmVnaXN0ZXIgYWRkcmVzcyAqLworCQl3cml0ZXEocnhlcV9pbml0X3ZhbHNbaWR4XS5yZGVzYywgaWFkZHIgKyBkaWR4KTsKKwkJbW1pb3diKCk7CisJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCQkvKiBJdGVyYXRlIHRocm91Z2ggUlhFUSB2YWx1ZXMgKi8KKwkJZm9yICh2aWR4ID0gMDsgdmlkeCA8IDQ7IHZpZHgrKykgeworCQkJZGF0YSA9IHJ4ZXFfaW5pdF92YWxzW2lkeF0ucmRhdGFbdmlkeF07CisJCQl3cml0ZXEoZGF0YSwgdGFkZHIgKyAodmlkeCA8PCA2KSArIGlkeCk7CisJCQltbWlvd2IoKTsKKwkJCWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCQl9CisJfSAvKiBlbmQgb3V0ZXIgZm9yIChSZWctd3JpdGVzIGZvciBSWEVRKSAqLworCXJldHVybiAwOworfQorCisjZGVmaW5lIENNVUNUUkw1IEVQQl9MT0MoNywgMCwgMHgxNSkKKyNkZWZpbmUgUlhIU0NUUkwwKGNoYW4pIEVQQl9MT0MoY2hhbiwgNiwgMCkKKyNkZWZpbmUgVkNETF9EQUMyKGNoYW4pIEVQQl9MT0MoY2hhbiwgNiwgNSkKKyNkZWZpbmUgVkNETF9DVFJMMChjaGFuKSBFUEJfTE9DKGNoYW4sIDYsIDYpCisjZGVmaW5lIFZDRExfQ1RSTDIoY2hhbikgRVBCX0xPQyhjaGFuLCA2LCA4KQorI2RlZmluZSBTVEFSVF9FUTIoY2hhbikgRVBCX0xPQyhjaGFuLCA3LCAweDI4KQorCitzdGF0aWMgaW50IGlic2Rfc3RvX25vaXN5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IGxvYywgaW50IHZhbCwgaW50IG1hc2spCit7CisJaW50IHJldCA9IC0xOworCWludCBzbG9jOyAvKiBzaGlmdGVkIGxvYywgZm9yIG1lc3NhZ2VzICovCisKKwlsb2MgfD0gKDFVIDw8IEVQQl9JQl9RVUFEMF9DU19TSEYpOworCXNsb2MgPSBsb2MgPj4gRVBCX0FERFJfU0hGOworCisJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLCBsb2MsIHZhbCwgbWFzayk7CisJaWYgKHJldCA8IDApCisJCWlwYXRoX2Rldl9lcnIoZGQsICJXcml0ZSBmYWlsZWQ6IGVsdCAlZCwiCisJCQkiIGFkZHIgMHglWCwgY2hubCAlZCwgdmFsIDB4JTAyWCwgbWFzayAweCUwMlhcbiIsCisJCQkoc2xvYyAmIDB4RiksIChzbG9jID4+IDkpICYgMHgzZiwgKHNsb2MgPj4gNCkgJiA3LAorCQkJdmFsICYgMHhGRiwgbWFzayAmIDB4RkYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXBlYXQgYSAic3RvcmUiIGFjcm9zcyBhbGwgY2hhbm5lbHMgb2YgdGhlIElCIFNlckRlcy4KKyAqIEFsdGhvdWdoIG5vbWluYWxseSBpdCBpbmhlcml0cyB0aGUgInJlYWQgdmFsdWUiIG9mIHRoZSBsYXN0CisgKiBjaGFubmVsIGl0IG1vZGlmaWVkLCB0aGUgb25seSByZWFsbHkgdXNlZnVsIHJldHVybiBpcyA8MCBmb3IKKyAqIGZhaWx1cmUsID49IDAgZm9yIHN1Y2Nlc3MuIFRoZSBwYXJhbWV0ZXIgJ2xvYycgaXMgYXNzdW1lZCB0bworICogYmUgdGhlIGxvY2F0aW9uIGZvciB0aGUgY2hhbm5lbC0wIGNvcHkgb2YgdGhlIHJlZ2lzdGVyIHRvCisgKiBiZSBtb2RpZmllZC4KKyAqLworc3RhdGljIGludCBpYnNkX21vZF9hbGxjaG5scyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBsb2MsIGludCB2YWwsCisJaW50IG1hc2spCit7CisJaW50IHJldCA9IC0xOworCWludCBjaG5sOworCisJaWYgKGxvYyAmIEVQQl9HTE9CQUxfV1IpIHsKKwkJLyoKKwkJICogT3VyIGNhbGxlciBoYXMgYXNzdXJlZCB1cyB0aGF0IHdlIGNhbiBzZXQgYWxsIGZvdXIKKwkJICogY2hhbm5lbHMgYXQgb25jZS4gVHJ1c3QgdGhhdC4gSWYgbWFzayBpcyBub3QgMHhGRiwKKwkJICogd2Ugd2lsbCByZWFkIHRoZSBfc3BlY2lmaWVkXyBjaGFubmVsIGZvciBvdXIgc3RhcnRpbmcKKwkJICogdmFsdWUuCisJCSAqLworCQlsb2MgfD0gKDFVIDw8IEVQQl9JQl9RVUFEMF9DU19TSEYpOworCQljaG5sID0gKGxvYyA+PiAoNCArIEVQQl9BRERSX1NIRikpICYgNzsKKwkJaWYgKG1hc2sgIT0gMHhGRikgeworCQkJcmV0ID0gaXBhdGhfc2Q3MjIwX3JlZ19tb2QoZGQsIElCXzcyMjBfU0VSREVTLAorCQkJCWxvYyAmIH5FUEJfR0xPQkFMX1dSLCAwLCAwKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJaW50IHNsb2MgPSBsb2MgPj4gRVBCX0FERFJfU0hGOworCQkJCWlwYXRoX2Rldl9lcnIoZGQsICJwcmUtcmVhZCBmYWlsZWQ6IGVsdCAlZCwiCisJCQkJCSIgYWRkciAweCVYLCBjaG5sICVkXG4iLCAoc2xvYyAmIDB4RiksCisJCQkJCShzbG9jID4+IDkpICYgMHgzZiwgY2hubCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCXZhbCA9IChyZXQgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJCX0KKwkJbG9jICY9ICB+KDcgPDwgKDQrRVBCX0FERFJfU0hGKSk7CisJCXJldCA9IGlwYXRoX3NkNzIyMF9yZWdfbW9kKGRkLCBJQl83MjIwX1NFUkRFUywgbG9jLCB2YWwsIDB4RkYpOworCQlpZiAocmV0IDwgMCkgeworCQkJaW50IHNsb2MgPSBsb2MgPj4gRVBCX0FERFJfU0hGOworCQkJaXBhdGhfZGV2X2VycihkZCwgIkdsb2JhbCBXUiBmYWlsZWQ6IGVsdCAlZCwiCisJCQkJIiBhZGRyIDB4JVgsIHZhbCAlMDJYXG4iLAorCQkJCShzbG9jICYgMHhGKSwgKHNsb2MgPj4gOSkgJiAweDNmLCB2YWwpOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCS8qIENsZWFyICJjaGFubmVsIiBhbmQgc2V0IENTIHNvIHdlIGNhbiBzaW1wbHkgaXRlcmF0ZSAqLworCWxvYyAmPSAgfig3IDw8ICg0K0VQQl9BRERSX1NIRikpOworCWxvYyB8PSAoMVUgPDwgRVBCX0lCX1FVQUQwX0NTX1NIRik7CisJZm9yIChjaG5sID0gMDsgY2hubCA8IDQ7ICsrY2hubCkgeworCQlpbnQgY2xvYzsKKwkJY2xvYyA9IGxvYyB8IChjaG5sIDw8ICg0K0VQQl9BRERSX1NIRikpOworCQlyZXQgPSBpcGF0aF9zZDcyMjBfcmVnX21vZChkZCwgSUJfNzIyMF9TRVJERVMsIGNsb2MsIHZhbCwgbWFzayk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpbnQgc2xvYyA9IGxvYyA+PiBFUEJfQUREUl9TSEY7CisJCQlpcGF0aF9kZXZfZXJyKGRkLCAiV3JpdGUgZmFpbGVkOiBlbHQgJWQsIgorCQkJCSIgYWRkciAweCVYLCBjaG5sICVkLCB2YWwgMHglMDJYLCIKKwkJCQkiIG1hc2sgMHglMDJYXG4iLAorCQkJCShzbG9jICYgMHhGKSwgKHNsb2MgPj4gOSkgJiAweDNmLCBjaG5sLAorCQkJCXZhbCAmIDB4RkYsIG1hc2sgJiAweEZGKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTZXQgdGhlIFR4IHZhbHVlcyBub3JtYWxseSBtb2RpZmllZCBieSBJQkMgaW4gSUIxLjIgbW9kZSB0byBkZWZhdWx0CisgKiB2YWx1ZXMsIGFzIGdvdHRlbiBmcm9tIGZpcnN0IHJvdyBvZiBpbml0IHRhYmxlLgorICovCitzdGF0aWMgaW50IHNldF9kZHNfdmFscyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHN0cnVjdCBkZHNfaW5pdCAqZGRpKQoreworCWludCByZXQ7CisJaW50IGlkeCwgcmVnLCBkYXRhOworCXVpbnQzMl90IHJlZ21hcDsKKworCXJlZ21hcCA9IEREU19SRUdfTUFQOworCWZvciAoaWR4ID0gMDsgaWR4IDwgTlVNX0REU19SRUdTOyArK2lkeCkgeworCQlyZWcgPSAocmVnbWFwICYgMHhGKTsKKwkJcmVnbWFwID4+PSA0OworCQlkYXRhID0gZGRpLT5yZWdfdmFsc1tpZHhdOworCQkvKiBWZW5kb3Igc2F5cyBSTVcgbm90IG5lZWRlZCBmb3IgdGhlc2UgcmVncywgdXNlIDB4RkYgbWFzayAqLworCQlyZXQgPSBpYnNkX21vZF9hbGxjaG5scyhkZCwgRVBCX0xPQygwLCA5LCByZWcpLCBkYXRhLCAweEZGKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCB0aGUgUnggdmFsdWVzIG5vcm1hbGx5IG1vZGlmaWVkIGJ5IElCQyBpbiBJQjEuMiBtb2RlIHRvIGRlZmF1bHQKKyAqIHZhbHVlcywgYXMgZ290dGVuIGZyb20gc2VsZWN0ZWQgY29sdW1uIG9mIGluaXQgdGFibGUuCisgKi8KK3N0YXRpYyBpbnQgc2V0X3J4ZXFfdmFscyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB2c2VsKQoreworCWludCByZXQ7CisJaW50IHJpZHg7CisJaW50IGNudCA9IEFSUkFZX1NJWkUocnhlcV9pbml0X3ZhbHMpOworCisJZm9yIChyaWR4ID0gMDsgcmlkeCA8IGNudDsgKytyaWR4KSB7CisJCWludCBlbHQsIHJlZywgdmFsLCBsb2M7CisJCWVsdCA9IHJ4ZXFfaW5pdF92YWxzW3JpZHhdLnJkZXNjICYgMHhGOworCQlyZWcgPSByeGVxX2luaXRfdmFsc1tyaWR4XS5yZGVzYyA+PiA0OworCQlsb2MgPSBFUEJfTE9DKDAsIGVsdCwgcmVnKTsKKwkJdmFsID0gcnhlcV9pbml0X3ZhbHNbcmlkeF0ucmRhdGFbdnNlbF07CisJCS8qIG1hc2sgb2YgMHhGRiwgYmVjYXVzZSBoYXJkd2FyZSBkb2VzIGZ1bGwtYnl0ZSBzdG9yZS4gKi8KKwkJcmV0ID0gaWJzZF9tb2RfYWxsY2hubHMoZGQsIGxvYywgdmFsLCAweEZGKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgKHJvdyAwKSBmb3IgRERSIERyaXZlciBEZW1waGFzaXMuCisgKiB3ZSBkbyB0aGlzIGluaXRpYWxseSBhbmQgd2hlbmV2ZXIgd2UgdHVybiBvZmYgSUItMS4yCisgKiBUaGUgImRlZmF1bHQiIHZhbHVlcyBmb3IgUnggZXF1YWxpemF0aW9uIGFyZSBhbHNvIHN0b3JlZCB0bworICogU2VyRGVzIHJlZ2lzdGVycy4gRm9ybWVybHkgKGFuZCBzdGlsbCBkZWZhdWx0KSwgd2UgdXNlZCBzZXQgMi4KKyAqIEZvciBleHBlcmltZW50aW5nIHdpdGggY2FibGVzIGFuZCBsaW5rLXBhcnRuZXJzLCB3ZSBhbGxvdyBjaGFuZ2luZworICogdGhhdCB2aWEgYSBtb2R1bGUgcGFyYW1ldGVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaXBhdGhfcnhlcV9zZXQgPSAyOworbW9kdWxlX3BhcmFtX25hbWVkKHJ4ZXFfZGVmYXVsdF9zZXQsIGlwYXRoX3J4ZXFfc2V0LCB1aW50LAorCVNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocnhlcV9kZWZhdWx0X3NldCwKKwkiV2hpY2ggc2V0IFswLi4zXSBvZiBSeCBFcXVhbGl6YXRpb24gdmFsdWVzIGlzIGRlZmF1bHQiKTsKKworc3RhdGljIGludCBpcGF0aF9pbnRlcm5hbF9wcmVzZXRzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHNldF9kZHNfdmFscyhkZCwgZGRzX2luaXRfdmFscyArIEREU18zTSk7CisKKwlpZiAocmV0IDwgMCkKKwkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byBzZXQgZGVmYXVsdCBERFMgdmFsdWVzXG4iKTsKKwlyZXQgPSBzZXRfcnhlcV92YWxzKGRkLCBpcGF0aF9yeGVxX3NldCAmIDMpOworCWlmIChyZXQgPCAwKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHNldCBkZWZhdWx0IFJYRVEgdmFsdWVzXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfc2Q3MjIwX3ByZXNldHMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFkZC0+aXBhdGhfcHJlc2V0c19uZWVkZWQpCisJCXJldHVybiByZXQ7CisJZGQtPmlwYXRoX3ByZXNldHNfbmVlZGVkID0gMDsKKwkvKiBBc3NlcnQgdUMgcmVzZXQsIHNvIHdlIGRvbid0IGNsYXNoIHdpdGggaXQuICovCisJaXBhdGhfaWJzZF9yZXNldChkZCwgMSk7CisJdWRlbGF5KDIpOworCWlwYXRoX3NkX3RyaW1kb25lX21vbml0b3IoZGQsICJsaW5rLWRvd24iKTsKKworCXJldCA9IGlwYXRoX2ludGVybmFsX3ByZXNldHMoZGQpOworcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF9zZF90cmltc2VsZihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB2YWwpCit7CisJcmV0dXJuIGlic2Rfc3RvX25vaXN5KGRkLCBDTVVDVFJMNSwgdmFsLCAweEZGKTsKK30KKworc3RhdGljIGludCBpcGF0aF9zZF9lYXJseShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldCA9IC0xOyAvKiBEZWZhdWx0IGZhaWxlZCAqLworCWludCBjaG5sOworCisJZm9yIChjaG5sID0gMDsgY2hubCA8IDQ7ICsrY2hubCkgeworCQlyZXQgPSBpYnNkX3N0b19ub2lzeShkZCwgUlhIU0NUUkwwKGNobmwpLCAweEQ0LCAweEZGKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGJhaWw7CisJfQorCWZvciAoY2hubCA9IDA7IGNobmwgPCA0OyArK2NobmwpIHsKKwkJcmV0ID0gaWJzZF9zdG9fbm9pc3koZGQsIFZDRExfREFDMihjaG5sKSwgMHgyRCwgMHhGRik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBiYWlsOworCX0KKwkvKiBtb3JlIGZpbmUtdHVuaW5nIG9mIHdoYXQgd2lsbCBiZSBkZWZhdWx0ICovCisJZm9yIChjaG5sID0gMDsgY2hubCA8IDQ7ICsrY2hubCkgeworCQlyZXQgPSBpYnNkX3N0b19ub2lzeShkZCwgVkNETF9DVFJMMihjaG5sKSwgMywgMHhGKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGJhaWw7CisJfQorCWZvciAoY2hubCA9IDA7IGNobmwgPCA0OyArK2NobmwpIHsKKwkJcmV0ID0gaWJzZF9zdG9fbm9pc3koZGQsIFNUQVJUX0VRMShjaG5sKSwgMHgxMCwgMHhGRik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBiYWlsOworCX0KKwlmb3IgKGNobmwgPSAwOyBjaG5sIDwgNDsgKytjaG5sKSB7CisJCXJldCA9IGlic2Rfc3RvX25vaXN5KGRkLCBTVEFSVF9FUTIoY2hubCksIDB4MzAsIDB4RkYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gYmFpbDsKKwl9CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgQkFDVFJMKGNobmwpIEVQQl9MT0MoY2hubCwgNiwgMHgwRSkKKyNkZWZpbmUgTERPVVRDVFJMMShjaG5sKSBFUEJfTE9DKGNobmwsIDcsIDYpCisjZGVmaW5lIFJYSFNTVEFUVVMoY2hubCkgRVBCX0xPQyhjaG5sLCA2LCAweEYpCisKK3N0YXRpYyBpbnQgaXBhdGhfc2RfZGFjdHJpbShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldCA9IC0xOyAvKiBEZWZhdWx0IGZhaWxlZCAqLworCWludCBjaG5sOworCisJZm9yIChjaG5sID0gMDsgY2hubCA8IDQ7ICsrY2hubCkgeworCQlyZXQgPSBpYnNkX3N0b19ub2lzeShkZCwgQkFDVFJMKGNobmwpLCAweDQwLCAweEZGKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGJhaWw7CisJfQorCWZvciAoY2hubCA9IDA7IGNobmwgPCA0OyArK2NobmwpIHsKKwkJcmV0ID0gaWJzZF9zdG9fbm9pc3koZGQsIExET1VUQ1RSTDEoY2hubCksIDB4MDQsIDB4RkYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gYmFpbDsKKwl9CisJZm9yIChjaG5sID0gMDsgY2hubCA8IDQ7ICsrY2hubCkgeworCQlyZXQgPSBpYnNkX3N0b19ub2lzeShkZCwgUlhIU1NUQVRVUyhjaG5sKSwgMHgwNCwgMHhGRik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBiYWlsOworCX0KKwkvKgorCSAqIGRlbGF5IGZvciBtYXggcG9zc2libGUgbnVtYmVyIG9mIHN0ZXBzLCB3aXRoIHNsb3AuCisJICogRWFjaCBzdGVwIGlzIGFib3V0IDR1c2VjLgorCSAqLworCXVkZWxheSg0MTUpOworCWZvciAoY2hubCA9IDA7IGNobmwgPCA0OyArK2NobmwpIHsKKwkJcmV0ID0gaWJzZF9zdG9fbm9pc3koZGQsIExET1VUQ1RSTDEoY2hubCksIDB4MDAsIDB4RkYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gYmFpbDsKKwl9CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgUkVMT0NLX0ZJUlNUX01TIDMKKyNkZWZpbmUgUlhMU1BQTShjaGFuKSBFUEJfTE9DKGNoYW4sIDAsIDIpCit2b2lkIGlwYXRoX3RvZ2dsZV9yY2xrcmxzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgbG9jID0gUlhMU1BQTSgwKSB8IEVQQl9HTE9CQUxfV1I7CisJaW50IHJldDsKKworCXJldCA9IGlic2RfbW9kX2FsbGNobmxzKGRkLCBsb2MsIDAsIDB4ODApOworCWlmIChyZXQgPCAwKQorCQlpcGF0aF9kZXZfZXJyKGRkLCAiUkNMS1JMUyBmYWlsZWQgdG8gY2xlYXIgRDdcbiIpOworCWVsc2UgeworCQl1ZGVsYXkoMSk7CisJCWlic2RfbW9kX2FsbGNobmxzKGRkLCBsb2MsIDB4ODAsIDB4ODApOworCX0KKwkvKiBBbmQgYWdhaW4gZm9yIGdvb2QgbWVhc3VyZSAqLworCXVkZWxheSgxKTsKKwlyZXQgPSBpYnNkX21vZF9hbGxjaG5scyhkZCwgbG9jLCAwLCAweDgwKTsKKwlpZiAocmV0IDwgMCkKKwkJaXBhdGhfZGV2X2VycihkZCwgIlJDTEtSTFMgZmFpbGVkIHRvIGNsZWFyIEQ3XG4iKTsKKwllbHNlIHsKKwkJdWRlbGF5KDEpOworCQlpYnNkX21vZF9hbGxjaG5scyhkZCwgbG9jLCAweDgwLCAweDgwKTsKKwl9CisJLyogTm93IHJlc2V0IHhneHMgYW5kIElCQyB0byBjb21wbGV0ZSB0aGUgcmVjb3ZlcnkgKi8KKwlkZC0+aXBhdGhfZl94Z3hzX3Jlc2V0KGRkKTsKK30KKworLyoKKyAqIFNodXQgZG93biB0aGUgdGltZXIgdGhhdCBwb2xscyBmb3IgcmVsb2NrIG9jY2FzaW9ucywgaWYgbmVlZGVkCisgKiB0aGlzIGlzICJob29rZWQiIGZyb20gaXBhdGhfNzIyMF9xdWlldF9zZXJkZXMoKSwgd2hpY2ggaXMgY2FsbGVkCisgKiBqdXN0IGJlZm9yZSBpcGF0aF9zaHV0ZG93bl9kZXZpY2UoKSBpbiBpcGF0aF9kcml2ZXIuYyBzaHV0cyBkb3duIGFsbAorICogdGhlIG90aGVyIHRpbWVycworICovCit2b2lkIGlwYXRoX3NodXRkb3duX3JlbG9ja19wb2xsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzdHJ1Y3QgaXBhdGhfcmVsb2NrICppcnAgPSAmZGQtPmlwYXRoX3JlbG9ja19zaW5nbGV0b247CisJaWYgKGF0b21pY19yZWFkKCZpcnAtPmlwYXRoX3JlbG9ja190aW1lcl9hY3RpdmUpKSB7CisJCWRlbF90aW1lcl9zeW5jKCZpcnAtPmlwYXRoX3JlbG9ja190aW1lcik7CisJCWF0b21pY19zZXQoJmlycC0+aXBhdGhfcmVsb2NrX3RpbWVyX2FjdGl2ZSwgMCk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaXBhdGhfcmVsb2NrX2J5X3RpbWVyID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChyZWxvY2tfYnlfdGltZXIsIGlwYXRoX3JlbG9ja19ieV90aW1lciwgdWludCwKKwlTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJlbG9ja19ieV90aW1lciwgIkFsbG93IHJlbG9jayBhdHRlbXB0IGlmIGxpbmsgbm90IHVwIik7CisKK3N0YXRpYyB2b2lkIGlwYXRoX3J1bl9yZWxvY2sodW5zaWduZWQgbG9uZyBvcGFxdWUpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopb3BhcXVlOworCXN0cnVjdCBpcGF0aF9yZWxvY2sgKmlycCA9ICZkZC0+aXBhdGhfcmVsb2NrX3NpbmdsZXRvbjsKKwl1NjQgdmFsLCBsdHN0YXRlOworCisJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpIHsKKwkJLyogTm90IHlldCB1cCwganVzdCByZWVuYWJsZSB0aGUgdGltZXIgZm9yIGxhdGVyICovCisJCWlycC0+aXBhdGhfcmVsb2NrX2ludGVydmFsID0gSFo7CisJCW1vZF90aW1lcigmaXJwLT5pcGF0aF9yZWxvY2tfdGltZXIsIGppZmZpZXMgKyBIWik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENoZWNrIGxpbmstdHJhaW5pbmcgc3RhdGUgZm9yICJzdHVjayIgc3RhdGUuCisJICogaWYgZm91bmQsIHRyeSByZWxvY2sgYW5kIHNjaGVkdWxlIGFub3RoZXIgdHJ5IGF0CisJICogZXhwb25lbnRpYWxseSBncm93aW5nIGRlbGF5LCBtYXhlZCBhdCBvbmUgc2Vjb25kLgorCSAqIGlmIG5vdCBzdHVjaywgb3VyIHdvcmsgaXMgZG9uZS4KKwkgKi8KKwl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpOworCWx0c3RhdGUgPSBpcGF0aF9pYl9saW5rdHJzdGF0ZShkZCwgdmFsKTsKKworCWlmIChsdHN0YXRlIDw9IElORklOSVBBVEhfSUJDU19MVF9TVEFURV9DRkdXQUlUUk1UCisJCSYmIGx0c3RhdGUgIT0gSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX0xJTktVUCkgeworCQlpbnQgdGltZW9mZjsKKwkJLyogTm90IHVwIHlldC4gVHJ5IGFnYWluLCBpZiBhbGxvd2VkIGJ5IG1vZHVsZS1wYXJhbSAqLworCQlpZiAoaXBhdGhfcmVsb2NrX2J5X3RpbWVyKSB7CisJCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSUJfQVVUT05FR19JTlBST0cpCisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiU2tpcCBSRUxPQ0sgaW4gQVVUT05FR1xuIik7CisJCQllbHNlIGlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lCX0xJTktfRElTQUJMRUQpKSB7CisJCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiUkVMT0NLXG4iKTsKKwkJCQlpcGF0aF90b2dnbGVfcmNsa3JscyhkZCk7CisJCQl9CisJCX0KKwkJLyogcmUtc2V0IHRpbWVyIGZvciBuZXh0IGNoZWNrICovCisJCXRpbWVvZmYgPSBpcnAtPmlwYXRoX3JlbG9ja19pbnRlcnZhbCA8PCAxOworCQlpZiAodGltZW9mZiA+IEhaKQorCQkJdGltZW9mZiA9IEhaOworCQlpcnAtPmlwYXRoX3JlbG9ja19pbnRlcnZhbCA9IHRpbWVvZmY7CisKKwkJbW9kX3RpbWVyKCZpcnAtPmlwYXRoX3JlbG9ja190aW1lciwgamlmZmllcyArIHRpbWVvZmYpOworCX0gZWxzZSB7CisJCS8qIFVwLCBzbyBubyBtb3JlIG5lZWQgdG8gY2hlY2sgc28gb2Z0ZW4gKi8KKwkJbW9kX3RpbWVyKCZpcnAtPmlwYXRoX3JlbG9ja190aW1lciwgamlmZmllcyArIEhaKTsKKwl9Cit9CisKK3ZvaWQgaXBhdGhfc2V0X3JlbG9ja19wb2xsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IGlidXApCit7CisJc3RydWN0IGlwYXRoX3JlbG9jayAqaXJwID0gJmRkLT5pcGF0aF9yZWxvY2tfc2luZ2xldG9uOworCisJaWYgKGlidXAgPiAwKSB7CisJCS8qIHdlIGFyZSBub3cgdXAsIHNvIHJlbGF4IHRpbWVyIHRvIDEgc2Vjb25kIGludGVydmFsICovCisJCWlmIChhdG9taWNfcmVhZCgmaXJwLT5pcGF0aF9yZWxvY2tfdGltZXJfYWN0aXZlKSkKKwkJCW1vZF90aW1lcigmaXJwLT5pcGF0aF9yZWxvY2tfdGltZXIsIGppZmZpZXMgKyBIWik7CisJfSBlbHNlIHsKKwkJLyogVHJhbnNpdGlvbiB0byBkb3duLCAocmUtKXNldCB0aW1lciB0byBzaG9ydCBpbnRlcnZhbC4gKi8KKwkJaW50IHRpbWVvdXQ7CisJCXRpbWVvdXQgPSAoSFogKiAoKGlidXAgPT0gLTEpID8gMTAwMCA6IFJFTE9DS19GSVJTVF9NUykpLzEwMDA7CisJCWlmICh0aW1lb3V0ID09IDApCisJCQl0aW1lb3V0ID0gMTsKKwkJLyogSWYgdGltZXIgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkLCBkbyBzby4gKi8KKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZpcnAtPmlwYXRoX3JlbG9ja190aW1lcl9hY3RpdmUpID09IDEpIHsKKwkJCWluaXRfdGltZXIoJmlycC0+aXBhdGhfcmVsb2NrX3RpbWVyKTsKKwkJCWlycC0+aXBhdGhfcmVsb2NrX3RpbWVyLmZ1bmN0aW9uID0gaXBhdGhfcnVuX3JlbG9jazsKKwkJCWlycC0+aXBhdGhfcmVsb2NrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGQ7CisJCQlpcnAtPmlwYXRoX3JlbG9ja19pbnRlcnZhbCA9IHRpbWVvdXQ7CisJCQlpcnAtPmlwYXRoX3JlbG9ja190aW1lci5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQ7CisJCQlhZGRfdGltZXIoJmlycC0+aXBhdGhfcmVsb2NrX3RpbWVyKTsKKwkJfSBlbHNlIHsKKwkJCWlycC0+aXBhdGhfcmVsb2NrX2ludGVydmFsID0gdGltZW91dDsKKwkJCW1vZF90aW1lcigmaXJwLT5pcGF0aF9yZWxvY2tfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKKwkJCWF0b21pY19kZWMoJmlycC0+aXBhdGhfcmVsb2NrX3RpbWVyX2FjdGl2ZSk7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZDcyMjBfaW1nLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2Q3MjIwX2ltZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZjU5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2Q3MjIwX2ltZy5jCkBAIC0wLDAgKzEsMTA4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtZW1vcnkgaW1hZ2UgZnJvbSB0aGUgdmVuZG9yLCB0byBiZSBjb3BpZWQgaW50bworICogdGhlIElCIFNFUkRFUyBvZiB0aGUgSUJBNzIyMCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgKiBUaGUgZmlsZSBhbHNvIGluY2x1ZGVzIHRoZSB0d28gZnVuY3Rpb25zIHdoaWNoIHVzZSB0aGlzIGltYWdlLgorICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwYXRoX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImlwYXRoXzcyMjAuaCIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaXBhdGhfc2Q3MjIwX2liX2ltZ1tdID0geworLyowMDAwKi8weDAyLCAweDBBLCAweDI5LCAweDAyLCAweDBBLCAweDg3LCAweEU1LCAweEU2LAorCTB4MzAsIDB4RTYsIDB4MDQsIDB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0YsCisvKjAwMTAqLzB4MDAsIDB4RTUsIDB4RTIsIDB4MzAsIDB4RTQsIDB4MDQsIDB4N0UsIDB4MDEsCisJMHg4MCwgMHgwMiwgMHg3RSwgMHgwMCwgMHhFRSwgMHg1RiwgMHg2MCwgMHgwOCwKKy8qMDAyMCovMHg1MywgMHhGOSwgMHhGNywgMHhFNCwgMHhGNSwgMHhGRSwgMHg4MCwgMHgwOCwKKwkweDdGLCAweDBBLCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDBFLCAweEEyLAorLyowMDMwKi8weDc1LCAweEZDLCAweDA4LCAweEU0LCAweEY1LCAweEZELCAweEU1LCAweEU3LAorCTB4MjAsIDB4RTcsIDB4MDMsIDB4NDMsIDB4RjksIDB4MDgsIDB4MjIsIDB4MDAsCisvKjAwNDAqLzB4MDEsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDAsIDB4NzUsCisJMHg1MSwgMHgwMSwgMHhFNCwgMHhGNSwgMHg1MiwgMHhGNSwgMHg1MywgMHhGNSwKKy8qMDA1MCovMHg1MiwgMHhGNSwgMHg3RSwgMHg3RiwgMHgwNCwgMHgwMiwgMHgwNCwgMHgzOCwKKwkweEMyLCAweDM2LCAweDA1LCAweDUyLCAweEU1LCAweDUyLCAweEQzLCAweDk0LAorLyowMDYwKi8weDBDLCAweDQwLCAweDA1LCAweDc1LCAweDUyLCAweDAxLCAweEQyLCAweDM2LAorCTB4OTAsIDB4MDcsIDB4MEMsIDB4NzQsIDB4MDcsIDB4RjAsIDB4QTMsIDB4NzQsCisvKjAwNzAqLzB4RkYsIDB4RjAsIDB4RTQsIDB4RjUsIDB4MEMsIDB4QTMsIDB4RjAsIDB4OTAsCisJMHgwNywgMHgxNCwgMHhGMCwgMHhBMywgMHhGMCwgMHg3NSwgMHgwQiwgMHgyMCwKKy8qMDA4MCovMHhGNSwgMHgwOSwgMHhFNCwgMHhGNSwgMHgwOCwgMHhFNSwgMHgwOCwgMHhEMywKKwkweDk0LCAweDMwLCAweDQwLCAweDAzLCAweDAyLCAweDA0LCAweDA0LCAweDEyLAorLyowMDkwKi8weDAwLCAweDA2LCAweDE1LCAweDBCLCAweEU1LCAweDA4LCAweDcwLCAweDA0LAorCTB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0YsIDB4MDAsIDB4RTUsIDB4MDksCisvKjAwQTAqLzB4NzAsIDB4MDQsIDB4N0UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsCisJMHhFRSwgMHg1RiwgMHg2MCwgMHgwNSwgMHgxMiwgMHgxOCwgMHg3MSwgMHhEMiwKKy8qMDBCMCovMHgzNSwgMHg1MywgMHhFMSwgMHhGNywgMHhFNSwgMHgwOCwgMHg0NSwgMHgwOSwKKwkweEZGLCAweEU1LCAweDBCLCAweDI1LCAweEUwLCAweDI1LCAweEUwLCAweDI0LAorLyowMEMwKi8weDgzLCAweEY1LCAweDgyLCAweEU0LCAweDM0LCAweDA3LCAweEY1LCAweDgzLAorCTB4RUYsIDB4RjAsIDB4ODUsIDB4RTIsIDB4MjAsIDB4RTUsIDB4NTIsIDB4RDMsCisvKjAwRDAqLzB4OTQsIDB4MDEsIDB4NDAsIDB4MEQsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsCisJMHg1NCwgMHhBMCwgMHg2NCwgMHg0MCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywKKy8qMDBFMCovMHhGQiwgMHg1MywgMHhGOSwgMHhGOCwgMHg5MCwgMHg5NCwgMHg3MCwgMHhFNCwKKwkweEYwLCAweEUwLCAweEY1LCAweDEwLCAweEFGLCAweDA5LCAweDEyLCAweDFFLAorLyowMEYwKi8weEIzLCAweEFGLCAweDA4LCAweEVGLCAweDQ0LCAweDA4LCAweEY1LCAweDgyLAorCTB4NzUsIDB4ODMsIDB4ODAsIDB4RTAsIDB4RjUsIDB4MjksIDB4RUYsIDB4NDQsCisvKjAxMDAqLzB4MDcsIDB4MTIsIDB4MUEsIDB4M0MsIDB4RjUsIDB4MjIsIDB4NTQsIDB4NDAsCisJMHhEMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgxRSwgMHhFNSwgMHgyOSwgMHg1NCwKKy8qMDExMCovMHhGMCwgMHg3MCwgMHgyMSwgMHgxMiwgMHgxOSwgMHhGMywgMHhFMCwgMHg0NCwKKwkweDgwLCAweEYwLCAweEU1LCAweDIyLCAweDU0LCAweDMwLCAweDY1LCAweDA4LAorLyowMTIwKi8weDcwLCAweDA5LCAweDEyLCAweDE5LCAweEYzLCAweEUwLCAweDU0LCAweEJGLAorCTB4RjAsIDB4ODAsIDB4MDksIDB4MTIsIDB4MTksIDB4RjMsIDB4NzQsIDB4NDAsCisvKjAxMzAqLzB4RjAsIDB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsIDB4MUEsIDB4MTIsIDB4NzUsCisJMHg4MywgMHhBRSwgMHg3NCwgMHhGRiwgMHhGMCwgMHhBRiwgMHgwOCwgMHg3RSwKKy8qMDE0MCovMHgwMCwgMHhFRiwgMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHhFMCwgMHhGRCwKKwkweEU1LCAweDBCLCAweDI1LCAweEUwLCAweDI1LCAweEUwLCAweDI0LCAweDgxLAorLyowMTUwKi8weEY1LCAweDgyLCAweEU0LCAweDM0LCAweDA3LCAweEY1LCAweDgzLCAweEVELAorCTB4RjAsIDB4OTAsIDB4MDcsIDB4MEUsIDB4RTAsIDB4MDQsIDB4RjAsIDB4RUYsCisvKjAxNjAqLzB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsIDB4NzUsIDB4ODMsIDB4OTgsIDB4RTAsCisJMHhGNSwgMHgyOCwgMHgxMiwgMHgxQSwgMHgyMywgMHg0MCwgMHgwQywgMHgxMiwKKy8qMDE3MCovMHgxOSwgMHhGMywgMHhFMCwgMHg0NCwgMHgwMSwgMHgxMiwgMHgxQSwgMHgzMiwKKwkweDAyLCAweDAzLCAweEY2LCAweEFGLCAweDA4LCAweDdFLCAweDAwLCAweDc0LAorLyowMTgwKi8weDgwLCAweENELCAweEVGLCAweENELCAweDhELCAweDgyLCAweEY1LCAweDgzLAorCTB4RTAsIDB4MzAsIDB4RTAsIDB4MEEsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsCisvKjAxOTAqLzB4NDQsIDB4MjAsIDB4RjAsIDB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsIDB4MTksCisJMHhGMywgMHhFMCwgMHg1NCwgMHhERiwgMHhGMCwgMHhFRSwgMHg0NCwgMHhBRSwKKy8qMDFBMCovMHgxMiwgMHgxQSwgMHg0MywgMHgzMCwgMHhFNCwgMHgwMywgMHgwMiwgMHgwMywKKwkweEZCLCAweDc0LCAweDlFLCAweDEyLCAweDFBLCAweDA1LCAweDIwLCAweEUwLAorLyowMUIwKi8weDAzLCAweDAyLCAweDAzLCAweEZCLCAweDhGLCAweDgyLCAweDhFLCAweDgzLAorCTB4RTAsIDB4MjAsIDB4RTAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsCisvKjAxQzAqLzB4MTksIDB4RjMsIDB4RTAsIDB4NDQsIDB4MTAsIDB4RjAsIDB4RTUsIDB4RTMsCisJMHgyMCwgMHhFNywgMHgwOCwgMHhFNSwgMHgwOCwgMHgxMiwgMHgxQSwgMHgzQSwKKy8qMDFEMCovMHg0NCwgMHgwNCwgMHhGMCwgMHhBRiwgMHgwOCwgMHg3RSwgMHgwMCwgMHhFRiwKKwkweDEyLCAweDFBLCAweDNBLCAweDIwLCAweEUyLCAweDM0LCAweDEyLCAweDE5LAorLyowMUUwKi8weEYzLCAweEUwLCAweDQ0LCAweDA4LCAweEYwLCAweEU1LCAweEU0LCAweDMwLAorCTB4RTYsIDB4MDQsIDB4N0QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0QsIDB4MDAsCisvKjAxRjAqLzB4RTUsIDB4N0UsIDB4QzMsIDB4OTQsIDB4MDQsIDB4NTAsIDB4MDQsIDB4N0MsCisJMHgwMSwgMHg4MCwgMHgwMiwgMHg3QywgMHgwMCwgMHhFQywgMHg0RCwgMHg2MCwKKy8qMDIwMCovMHgwNSwgMHhDMiwgMHgzNSwgMHgwMiwgMHgwMywgMHhGQiwgMHhFRSwgMHg0NCwKKwkweEQyLCAweDEyLCAweDFBLCAweDQzLCAweDQ0LCAweDQwLCAweEYwLCAweDAyLAorLyowMjEwKi8weDAzLCAweEZCLCAweDEyLCAweDE5LCAweEYzLCAweEUwLCAweDU0LCAweEY3LAorCTB4RjAsIDB4MTIsIDB4MUEsIDB4MTIsIDB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsCisvKjAyMjAqLzB4NTQsIDB4QkYsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MTQsIDB4RTAsIDB4MDQsCisJMHhGMCwgMHhFNSwgMHg3RSwgMHg3MCwgMHgwMywgMHg3NSwgMHg3RSwgMHgwMSwKKy8qMDIzMCovMHhBRiwgMHgwOCwgMHg3RSwgMHgwMCwgMHgxMiwgMHgxQSwgMHgyMywgMHg0MCwKKwkweDEyLCAweDEyLCAweDE5LCAweEYzLCAweEUwLCAweDQ0LCAweDAxLCAweDEyLAorLyowMjQwKi8weDE5LCAweEYyLCAweEUwLCAweDU0LCAweDAyLCAweDEyLCAweDFBLCAweDMyLAorCTB4MDIsIDB4MDMsIDB4RkIsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsIDB4NDQsCisvKjAyNTAqLzB4MDIsIDB4MTIsIDB4MTksIDB4RjIsIDB4RTAsIDB4NTQsIDB4RkUsIDB4RjAsCisJMHhDMiwgMHgzNSwgMHhFRSwgMHg0NCwgMHg4QSwgMHg4RiwgMHg4MiwgMHhGNSwKKy8qMDI2MCovMHg4MywgMHhFMCwgMHhGNSwgMHgxNywgMHg1NCwgMHg4RiwgMHg0NCwgMHg0MCwKKwkweEYwLCAweDc0LCAweDkwLCAweEZDLCAweEU1LCAweDA4LCAweDQ0LCAweDA3LAorLyowMjcwKi8weEZELCAweEY1LCAweDgyLCAweDhDLCAweDgzLCAweEUwLCAweDU0LCAweDNGLAorCTB4OTAsIDB4MDcsIDB4MDIsIDB4RjAsIDB4RTAsIDB4NTQsIDB4QzAsIDB4OEQsCisvKjAyODAqLzB4ODIsIDB4OEMsIDB4ODMsIDB4RjAsIDB4NzQsIDB4OTIsIDB4MTIsIDB4MUEsCisJMHgwNSwgMHg5MCwgMHgwNywgMHgwMywgMHgxMiwgMHgxQSwgMHgxOSwgMHg3NCwKKy8qMDI5MCovMHg4MiwgMHgxMiwgMHgxQSwgMHgwNSwgMHg5MCwgMHgwNywgMHgwNCwgMHgxMiwKKwkweDFBLCAweDE5LCAweDc0LCAweEI0LCAweDEyLCAweDFBLCAweDA1LCAweDkwLAorLyowMkEwKi8weDA3LCAweDA1LCAweDEyLCAweDFBLCAweDE5LCAweDc0LCAweDk0LCAweEZFLAorCTB4RTUsIDB4MDgsIDB4NDQsIDB4MDYsIDB4MTIsIDB4MUEsIDB4MEEsIDB4RjUsCisvKjAyQjAqLzB4MTAsIDB4MzAsIDB4RTAsIDB4MDQsIDB4RDIsIDB4MzcsIDB4ODAsIDB4MDIsCisJMHhDMiwgMHgzNywgMHhFNSwgMHgxMCwgMHg1NCwgMHg3RiwgMHg4RiwgMHg4MiwKKy8qMDJDMCovMHg4RSwgMHg4MywgMHhGMCwgMHgzMCwgMHg0NCwgMHgzMCwgMHgxMiwgMHgxQSwKKwkweDAzLCAweDU0LCAweDgwLCAweEQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LAorLyowMkQwKi8weEQyLCAweDM5LCAweDgwLCAweDAyLCAweEMyLCAweDM5LCAweDhGLCAweDgyLAorCTB4OEUsIDB4ODMsIDB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4MTIsIDB4MUEsCisvKjAyRTAqLzB4MDMsIDB4NTQsIDB4NDAsIDB4RDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsCisJMHhEMiwgMHgzQSwgMHg4MCwgMHgwMiwgMHhDMiwgMHgzQSwgMHg4RiwgMHg4MiwKKy8qMDJGMCovMHg4RSwgMHg4MywgMHhFMCwgMHg0NCwgMHg0MCwgMHhGMCwgMHg3NCwgMHg5MiwKKwkweEZFLCAweEU1LCAweDA4LCAweDQ0LCAweDA2LCAweDEyLCAweDFBLCAweDBBLAorLyowMzAwKi8weDMwLCAweEU3LCAweDA0LCAweEQyLCAweDM4LCAweDgwLCAweDAyLCAweEMyLAorCTB4MzgsIDB4OEYsIDB4ODIsIDB4OEUsIDB4ODMsIDB4RTAsIDB4NTQsIDB4N0YsCisvKjAzMTAqLzB4RjAsIDB4MTIsIDB4MUUsIDB4NDYsIDB4RTQsIDB4RjUsIDB4MEEsIDB4MjAsCisJMHgwMywgMHgwMiwgMHg4MCwgMHgwMywgMHgzMCwgMHg0MywgMHgwMywgMHgxMiwKKy8qMDMyMCovMHgxOSwgMHg5NSwgMHgyMCwgMHgwMiwgMHgwMiwgMHg4MCwgMHgwMywgMHgzMCwKKwkweDQyLCAweDAzLCAweDEyLCAweDBDLCAweDhGLCAweDMwLCAweDMwLCAweDA2LAorLyowMzMwKi8weDEyLCAweDE5LCAweDk1LCAweDEyLCAweDBDLCAweDhGLCAweDEyLCAweDBELAorCTB4NDcsIDB4MTIsIDB4MTksIDB4RjMsIDB4RTAsIDB4NTQsIDB4RkIsIDB4RjAsCisvKjAzNDAqLzB4RTUsIDB4MEEsIDB4QzMsIDB4OTQsIDB4MDEsIDB4NDAsIDB4NDYsIDB4NDMsCisJMHhFMSwgMHgwOCwgMHgxMiwgMHgxOSwgMHhGMywgMHhFMCwgMHg0NCwgMHgwNCwKKy8qMDM1MCovMHhGMCwgMHhFNSwgMHhFNCwgMHgyMCwgMHhFNywgMHgyQSwgMHgxMiwgMHgxQSwKKwkweDEyLCAweDc1LCAweDgzLCAweEQyLCAweEUwLCAweDU0LCAweDA4LCAweEQzLAorLyowMzYwKi8weDk0LCAweDAwLCAweDQwLCAweDA0LCAweDdGLCAweDAxLCAweDgwLCAweDAyLAorCTB4N0YsIDB4MDAsIDB4RTUsIDB4MEEsIDB4QzMsIDB4OTQsIDB4MDEsIDB4NDAsCisvKjAzNzAqLzB4MDQsIDB4N0UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RUYsCisJMHg1RSwgMHg2MCwgMHgwNSwgMHgxMiwgMHgxRCwgMHhENywgMHg4MCwgMHgxNywKKy8qMDM4MCovMHgxMiwgMHgxQSwgMHgxMiwgMHg3NSwgMHg4MywgMHhEMiwgMHhFMCwgMHg0NCwKKwkweDA4LCAweEYwLCAweDAyLCAweDAzLCAweEZCLCAweDEyLCAweDFBLCAweDEyLAorLyowMzkwKi8weDc1LCAweDgzLCAweEQyLCAweEUwLCAweDU0LCAweEY3LCAweEYwLCAweDEyLAorCTB4MUUsIDB4NDYsIDB4N0YsIDB4MDgsIDB4MTIsIDB4MTcsIDB4MzEsIDB4NzQsCisvKjAzQTAqLzB4OEUsIDB4RkUsIDB4MTIsIDB4MUEsIDB4MTIsIDB4OEUsIDB4ODMsIDB4RTAsCisJMHhGNSwgMHgxMCwgMHg1NCwgMHhGRSwgMHhGMCwgMHhFNSwgMHgxMCwgMHg0NCwKKy8qMDNCMCovMHgwMSwgMHhGRiwgMHhFNSwgMHgwOCwgMHhGRCwgMHhFRCwgMHg0NCwgMHgwNywKKwkweEY1LCAweDgyLCAweEVGLCAweEYwLCAweEU1LCAweDEwLCAweDU0LCAweEZFLAorLyowM0MwKi8weEZGLCAweEVELCAweDQ0LCAweDA3LCAweEY1LCAweDgyLCAweEVGLCAweDEyLAorCTB4MUEsIDB4MTEsIDB4NzUsIDB4ODMsIDB4ODYsIDB4RTAsIDB4NDQsIDB4MTAsCisvKjAzRDAqLzB4MTIsIDB4MUEsIDB4MTEsIDB4RTAsIDB4NDQsIDB4MTAsIDB4RjAsIDB4MTIsCisJMHgxOSwgMHhGMywgMHhFMCwgMHg1NCwgMHhGRCwgMHg0NCwgMHgwMSwgMHhGRiwKKy8qMDNFMCovMHgxMiwgMHgxOSwgMHhGMywgMHhFRiwgMHgxMiwgMHgxQSwgMHgzMiwgMHgzMCwKKwkweDMyLCAweDBDLCAweEU1LCAweDA4LCAweDQ0LCAweDA4LCAweEY1LCAweDgyLAorLyowM0YwKi8weDc1LCAweDgzLCAweDgyLCAweDc0LCAweDA1LCAweEYwLCAweEFGLCAweDBCLAorCTB4MTIsIDB4MTgsIDB4RDcsIDB4NzQsIDB4MTAsIDB4MjUsIDB4MDgsIDB4RjUsCisvKjA0MDAqLzB4MDgsIDB4MDIsIDB4MDAsIDB4ODUsIDB4MDUsIDB4MDksIDB4RTUsIDB4MDksCisJMHhEMywgMHg5NCwgMHgwNywgMHg1MCwgMHgwMywgMHgwMiwgMHgwMCwgMHg4MiwKKy8qMDQxMCovMHhFNSwgMHg3RSwgMHhEMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNCwgMHg3RiwKKwkweDAxLCAweDgwLCAweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDdFLCAweEMzLAorLyowNDIwKi8weDk0LCAweEZBLCAweDUwLCAweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLAorCTB4N0UsIDB4MDAsIDB4RUUsIDB4NUYsIDB4NjAsIDB4MDIsIDB4MDUsIDB4N0UsCisvKjA0MzAqLzB4MzAsIDB4MzUsIDB4MEIsIDB4NDMsIDB4RTEsIDB4MDEsIDB4N0YsIDB4MDksCisJMHgxMiwgMHgxNywgMHgzMSwgMHgwMiwgMHgwMCwgMHg1OCwgMHg1MywgMHhFMSwKKy8qMDQ0MCovMHhGRSwgMHgwMiwgMHgwMCwgMHg1OCwgMHg4RSwgMHg2QSwgMHg4RiwgMHg2QiwKKwkweDhDLCAweDZDLCAweDhELCAweDZELCAweDc1LCAweDZFLCAweDAxLCAweDc1LAorLyowNDUwKi8weDZGLCAweDAxLCAweDc1LCAweDcwLCAweDAxLCAweEU0LCAweEY1LCAweDczLAorCTB4RjUsIDB4NzQsIDB4RjUsIDB4NzUsIDB4OTAsIDB4MDcsIDB4MkYsIDB4RjAsCisvKjA0NjAqLzB4RjUsIDB4M0MsIDB4RjUsIDB4M0UsIDB4RjUsIDB4NDYsIDB4RjUsIDB4NDcsCisJMHhGNSwgMHgzRCwgMHhGNSwgMHgzRiwgMHhGNSwgMHg2RiwgMHhFNSwgMHg2RiwKKy8qMDQ3MCovMHg3MCwgMHgwRiwgMHhFNSwgMHg2QiwgMHg0NSwgMHg2QSwgMHgxMiwgMHgwNywKKwkweDJBLCAweDc1LCAweDgzLCAweDgwLCAweDc0LCAweDNBLCAweEYwLCAweDgwLAorLyowNDgwKi8weDA5LCAweDEyLCAweDA3LCAweDJBLCAweDc1LCAweDgzLCAweDgwLCAweDc0LAorCTB4MUEsIDB4RjAsIDB4RTQsIDB4RjUsIDB4NkUsIDB4QzMsIDB4NzQsIDB4M0YsCisvKjA0OTAqLzB4OTUsIDB4NkUsIDB4RkYsIDB4MTIsIDB4MDgsIDB4NjUsIDB4NzUsIDB4ODMsCisJMHg4MiwgMHhFRiwgMHhGMCwgMHgxMiwgMHgxQSwgMHg0RCwgMHgxMiwgMHgwOCwKKy8qMDRBMCovMHhDNiwgMHhFNSwgMHgzMywgMHhGMCwgMHgxMiwgMHgwOCwgMHhGQSwgMHgxMiwKKwkweDA4LCAweEIxLCAweDQwLCAweEUxLCAweEU1LCAweDZGLCAweDcwLCAweDBCLAorLyowNEIwKi8weDEyLCAweDA3LCAweDJBLCAweDc1LCAweDgzLCAweDgwLCAweDc0LCAweDM2LAorCTB4RjAsIDB4ODAsIDB4MDksIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsCisvKjA0QzAqLzB4ODAsIDB4NzQsIDB4MTYsIDB4RjAsIDB4NzUsIDB4NkUsIDB4MDEsIDB4MTIsCisJMHgwNywgMHgyQSwgMHg3NSwgMHg4MywgMHhCNCwgMHhFNSwgMHg2RSwgMHhGMCwKKy8qMDREMCovMHgxMiwgMHgxQSwgMHg0RCwgMHg3NCwgMHgzRiwgMHgyNSwgMHg2RSwgMHhGNSwKKwkweDgyLCAweEU0LCAweDM0LCAweDAwLCAweEY1LCAweDgzLCAweEU1LCAweDMzLAorLyowNEUwKi8weEYwLCAweDc0LCAweEJGLCAweDI1LCAweDZFLCAweEY1LCAweDgyLCAweEU0LAorCTB4MzQsIDB4MDAsIDB4MTIsIDB4MDgsIDB4QjEsIDB4NDAsIDB4RDgsIDB4RTQsCisvKjA0RjAqLzB4RjUsIDB4NzAsIDB4RjUsIDB4NDYsIDB4RjUsIDB4NDcsIDB4RjUsIDB4NkUsCisJMHgxMiwgMHgwOCwgMHhGQSwgMHhGNSwgMHg4MywgMHhFMCwgMHhGRSwgMHgxMiwKKy8qMDUwMCovMHgwOCwgMHhDNiwgMHhFMCwgMHg3QywgMHgwMCwgMHgyNCwgMHgwMCwgMHhGRiwKKwkweEVDLCAweDNFLCAweEZFLCAweEFELCAweDNCLCAweEQzLCAweEVGLCAweDlELAorLyowNTEwKi8weEVFLCAweDlDLCAweDUwLCAweDA0LCAweDdCLCAweDAxLCAweDgwLCAweDAyLAorCTB4N0IsIDB4MDAsIDB4RTUsIDB4NzAsIDB4NzAsIDB4MDQsIDB4N0EsIDB4MDEsCisvKjA1MjAqLzB4ODAsIDB4MDIsIDB4N0EsIDB4MDAsIDB4RUIsIDB4NUEsIDB4NjAsIDB4MDYsCisJMHg4NSwgMHg2RSwgMHg0NiwgMHg3NSwgMHg3MCwgMHgwMSwgMHhEMywgMHhFRiwKKy8qMDUzMCovMHg5RCwgMHhFRSwgMHg5QywgMHg1MCwgMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwKKwkweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDcwLCAweEI0LCAweDAxLCAweDA0LAorLyowNTQwKi8weDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVGLCAweDVFLAorCTB4NjAsIDB4MDMsIDB4ODUsIDB4NkUsIDB4NDcsIDB4MDUsIDB4NkUsIDB4RTUsCisvKjA1NTAqLzB4NkUsIDB4NjQsIDB4N0YsIDB4NzAsIDB4QTMsIDB4RTUsIDB4NDYsIDB4NjAsCisJMHgwNSwgMHhFNSwgMHg0NywgMHhCNCwgMHg3RSwgMHgwMywgMHg4NSwgMHg0NiwKKy8qMDU2MCovMHg0NywgMHhFNSwgMHg2RiwgMHg3MCwgMHgwOCwgMHg4NSwgMHg0NiwgMHg3NiwKKwkweDg1LCAweDQ3LCAweDc3LCAweDgwLCAweDBFLCAweEMzLCAweDc0LCAweDdGLAorLyowNTcwKi8weDk1LCAweDQ2LCAweEY1LCAweDc4LCAweEMzLCAweDc0LCAweDdGLCAweDk1LAorCTB4NDcsIDB4RjUsIDB4NzksIDB4RTUsIDB4NkYsIDB4NzAsIDB4MzcsIDB4RTUsCisvKjA1ODAqLzB4NDYsIDB4NjUsIDB4NDcsIDB4NzAsIDB4MEMsIDB4NzUsIDB4NzMsIDB4MDEsCisJMHg3NSwgMHg3NCwgMHgwMSwgMHhGNSwgMHgzQywgMHhGNSwgMHgzRCwgMHg4MCwKKy8qMDU5MCovMHgzNSwgMHhFNCwgMHhGNSwgMHg0RSwgMHhDMywgMHhFNSwgMHg0NywgMHg5NSwKKwkweDQ2LCAweEY1LCAweDNDLCAweEMzLCAweDEzLCAweEY1LCAweDcxLCAweDI1LAorLyowNUEwKi8weDQ2LCAweEY1LCAweDcyLCAweEMzLCAweDk0LCAweDNGLCAweDQwLCAweDA1LAorCTB4RTQsIDB4RjUsIDB4M0QsIDB4ODAsIDB4NDAsIDB4QzMsIDB4NzQsIDB4M0YsCisvKjA1QjAqLzB4OTUsIDB4NzIsIDB4RjUsIDB4M0QsIDB4ODAsIDB4MzcsIDB4RTUsIDB4NDYsCisJMHg2NSwgMHg0NywgMHg3MCwgMHgwRiwgMHg3NSwgMHg3MywgMHgwMSwgMHg3NSwKKy8qMDVDMCovMHg3NSwgMHgwMSwgMHhGNSwgMHgzRSwgMHhGNSwgMHgzRiwgMHg3NSwgMHg0RSwKKwkweDAxLCAweDgwLCAweDIyLCAweEU0LCAweEY1LCAweDRFLCAweEMzLCAweEU1LAorLyowNUQwKi8weDQ3LCAweDk1LCAweDQ2LCAweEY1LCAweDNFLCAweEMzLCAweDEzLCAweEY1LAorCTB4NzEsIDB4MjUsIDB4NDYsIDB4RjUsIDB4NzIsIDB4RDMsIDB4OTQsIDB4M0YsCisvKjA1RTAqLzB4NTAsIDB4MDUsIDB4RTQsIDB4RjUsIDB4M0YsIDB4ODAsIDB4MDYsIDB4RTUsCisJMHg3MiwgMHgyNCwgMHhDMSwgMHhGNSwgMHgzRiwgMHgwNSwgMHg2RiwgMHhFNSwKKy8qMDVGMCovMHg2RiwgMHhDMywgMHg5NCwgMHgwMiwgMHg1MCwgMHgwMywgMHgwMiwgMHgwNCwKKwkweDZFLCAweEU1LCAweDZELCAweDQ1LCAweDZDLCAweDcwLCAweDAyLCAweDgwLAorLyowNjAwKi8weDA0LCAweEU1LCAweDc0LCAweDQ1LCAweDc1LCAweDkwLCAweDA3LCAweDJGLAorCTB4RjAsIDB4N0YsIDB4MDEsIDB4RTUsIDB4M0UsIDB4NjAsIDB4MDQsIDB4RTUsCisvKjA2MTAqLzB4M0MsIDB4NzAsIDB4MTQsIDB4RTQsIDB4RjUsIDB4M0MsIDB4RjUsIDB4M0QsCisJMHhGNSwgMHgzRSwgMHhGNSwgMHgzRiwgMHgxMiwgMHgwOCwgMHhEMiwgMHg3MCwKKy8qMDYyMCovMHgwNCwgMHhGMCwgMHgwMiwgMHgwNiwgMHhBNCwgMHg4MCwgMHg3QSwgMHhFNSwKKwkweDNDLCAweEMzLCAweDk1LCAweDNFLCAweDQwLCAweDA3LCAweEU1LCAweDNDLAorLyowNjMwKi8weDk1LCAweDNFLCAweEZGLCAweDgwLCAweDA2LCAweEMzLCAweEU1LCAweDNFLAorCTB4OTUsIDB4M0MsIDB4RkYsIDB4RTUsIDB4NzYsIDB4RDMsIDB4OTUsIDB4NzksCisvKjA2NDAqLzB4NDAsIDB4MDUsIDB4ODUsIDB4NzYsIDB4N0EsIDB4ODAsIDB4MDMsIDB4ODUsCisJMHg3OSwgMHg3QSwgMHhFNSwgMHg3NywgMHhDMywgMHg5NSwgMHg3OCwgMHg1MCwKKy8qMDY1MCovMHgwNSwgMHg4NSwgMHg3NywgMHg3QiwgMHg4MCwgMHgwMywgMHg4NSwgMHg3OCwKKwkweDdCLCAweEU1LCAweDdCLCAweEQzLCAweDk1LCAweDdBLCAweDQwLCAweDMwLAorLyowNjYwKi8weEU1LCAweDdCLCAweDk1LCAweDdBLCAweEY1LCAweDNDLCAweEY1LCAweDNFLAorCTB4QzMsIDB4RTUsIDB4N0IsIDB4OTUsIDB4N0EsIDB4OTAsIDB4MDcsIDB4MTksCisvKjA2NzAqLzB4RjAsIDB4RTUsIDB4M0MsIDB4QzMsIDB4MTMsIDB4RjUsIDB4NzEsIDB4MjUsCisJMHg3QSwgMHhGNSwgMHg3MiwgMHhDMywgMHg5NCwgMHgzRiwgMHg0MCwgMHgwNSwKKy8qMDY4MCovMHhFNCwgMHhGNSwgMHgzRCwgMHg4MCwgMHgxRiwgMHhDMywgMHg3NCwgMHgzRiwKKwkweDk1LCAweDcyLCAweEY1LCAweDNELCAweEY1LCAweDNGLCAweDgwLCAweDE0LAorLyowNjkwKi8weEU0LCAweEY1LCAweDNDLCAweEY1LCAweDNFLCAweDkwLCAweDA3LCAweDE5LAorCTB4RjAsIDB4MTIsIDB4MDgsIDB4RDIsIDB4NzAsIDB4MDMsIDB4RjAsIDB4ODAsCisvKjA2QTAqLzB4MDMsIDB4NzQsIDB4MDEsIDB4RjAsIDB4MTIsIDB4MDgsIDB4NjUsIDB4NzUsCisJMHg4MywgMHhEMCwgMHhFMCwgMHg1NCwgMHgwRiwgMHhGRSwgMHhBRCwgMHgzQywKKy8qMDZCMCovMHg3MCwgMHgwMiwgMHg3RSwgMHgwNywgMHhCRSwgMHgwRiwgMHgwMiwgMHg3RSwKKwkweDgwLCAweEVFLCAweEZCLCAweEVGLCAweEQzLCAweDlCLCAweDc0LCAweDgwLAorLyowNkMwKi8weEY4LCAweDk4LCAweDQwLCAweDFGLCAweEU0LCAweEY1LCAweDNDLCAweEY1LAorCTB4M0UsIDB4MTIsIDB4MDgsIDB4RDIsIDB4NzAsIDB4MDMsIDB4RjAsIDB4ODAsCisvKjA2RDAqLzB4MTIsIDB4NzQsIDB4MDEsIDB4RjAsIDB4RTUsIDB4MDgsIDB4RkIsIDB4RUIsCisJMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHg3NSwgMHg4MywgMHhEMiwgMHhFMCwKKy8qMDZFMCovMHg0NCwgMHgxMCwgMHhGMCwgMHhFNSwgMHgwOCwgMHhGQiwgMHhFQiwgMHg0NCwKKwkweDA5LCAweEY1LCAweDgyLCAweDc1LCAweDgzLCAweDlFLCAweEVELCAweEYwLAorLyowNkYwKi8weEVCLCAweDQ0LCAweDA3LCAweEY1LCAweDgyLCAweDc1LCAweDgzLCAweENBLAorCTB4RUQsIDB4RjAsIDB4MTIsIDB4MDgsIDB4NjUsIDB4NzUsIDB4ODMsIDB4Q0MsCisvKjA3MDAqLzB4RUYsIDB4RjAsIDB4MjIsIDB4RTUsIDB4MDgsIDB4NDQsIDB4MDcsIDB4RjUsCisJMHg4MiwgMHg3NSwgMHg4MywgMHhCQywgMHhFMCwgMHg1NCwgMHhGMCwgMHhGMCwKKy8qMDcxMCovMHhFNSwgMHgwOCwgMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHg3NSwgMHg4MywKKwkweEJFLCAweEUwLCAweDU0LCAweEYwLCAweEYwLCAweEU1LCAweDA4LCAweDQ0LAorLyowNzIwKi8weDA3LCAweEY1LCAweDgyLCAweDc1LCAweDgzLCAweEMwLCAweEUwLCAweDU0LAorCTB4RjAsIDB4RjAsIDB4RTUsIDB4MDgsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCisvKjA3MzAqLzB4MjIsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjgsIDB4RTAsIDB4RkUsIDB4QTMsCisJMHhFMCwgMHhGNSwgMHg4MiwgMHg4RSwgMHg4MywgMHgyMiwgMHg4NSwgMHg0MiwKKy8qMDc0MCovMHg0MiwgMHg4NSwgMHg0MSwgMHg0MSwgMHg4NSwgMHg0MCwgMHg0MCwgMHg3NCwKKwkweEMwLCAweDJGLCAweEY1LCAweDgyLCAweDc0LCAweDAyLCAweDNFLCAweEY1LAorLyowNzUwKi8weDgzLCAweEU1LCAweDQyLCAweEYwLCAweDc0LCAweEUwLCAweDJGLCAweEY1LAorCTB4ODIsIDB4NzQsIDB4MDIsIDB4M0UsIDB4RjUsIDB4ODMsIDB4MjIsIDB4RTUsCisvKjA3NjAqLzB4NDIsIDB4MjksIDB4RkQsIDB4RTQsIDB4MzMsIDB4RkMsIDB4RTUsIDB4M0MsCisJMHhDMywgMHg5RCwgMHhFQywgMHg2NCwgMHg4MCwgMHhGOCwgMHg3NCwgMHg4MCwKKy8qMDc3MCovMHg5OCwgMHgyMiwgMHhGNSwgMHg4MywgMHhFMCwgMHg5MCwgMHgwNywgMHgyMiwKKwkweDU0LCAweDFGLCAweEZELCAweEUwLCAweEZBLCAweEEzLCAweEUwLCAweEY1LAorLyowNzgwKi8weDgyLCAweDhBLCAweDgzLCAweEVELCAweEYwLCAweDIyLCAweDkwLCAweDA3LAorCTB4MjIsIDB4RTAsIDB4RkMsIDB4QTMsIDB4RTAsIDB4RjUsIDB4ODIsIDB4OEMsCisvKjA3OTAqLzB4ODMsIDB4MjIsIDB4OTAsIDB4MDcsIDB4MjQsIDB4RkYsIDB4RUQsIDB4NDQsCisJMHgwNywgMHhDRiwgMHhGMCwgMHhBMywgMHhFRiwgMHhGMCwgMHgyMiwgMHg4NSwKKy8qMDdBMCovMHgzOCwgMHgzOCwgMHg4NSwgMHgzOSwgMHgzOSwgMHg4NSwgMHgzQSwgMHgzQSwKKwkweDc0LCAweEMwLCAweDJGLCAweEY1LCAweDgyLCAweDc0LCAweDAyLCAweDNFLAorLyowN0IwKi8weEY1LCAweDgzLCAweDIyLCAweDkwLCAweDA3LCAweDI2LCAweEZGLCAweEVELAorCTB4NDQsIDB4MDcsIDB4Q0YsIDB4RjAsIDB4QTMsIDB4RUYsIDB4RjAsIDB4MjIsCisvKjA3QzAqLzB4RjAsIDB4NzQsIDB4QTAsIDB4MkYsIDB4RjUsIDB4ODIsIDB4NzQsIDB4MDIsCisJMHgzRSwgMHhGNSwgMHg4MywgMHgyMiwgMHg3NCwgMHhDMCwgMHgyNSwgMHgxMSwKKy8qMDdEMCovMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwMSwgMHhGNSwgMHg4MywgMHgyMiwKKwkweDc0LCAweDAwLCAweDI1LCAweDExLCAweEY1LCAweDgyLCAweEU0LCAweDM0LAorLyowN0UwKi8weDAyLCAweEY1LCAweDgzLCAweDIyLCAweDc0LCAweDYwLCAweDI1LCAweDExLAorCTB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsIDB4MDMsIDB4RjUsIDB4ODMsIDB4MjIsCisvKjA3RjAqLzB4NzQsIDB4ODAsIDB4MjUsIDB4MTEsIDB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsCisJMHgwMywgMHhGNSwgMHg4MywgMHgyMiwgMHg3NCwgMHhFMCwgMHgyNSwgMHgxMSwKKy8qMDgwMCovMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwMywgMHhGNSwgMHg4MywgMHgyMiwKKwkweDc0LCAweDQwLCAweDI1LCAweDExLCAweEY1LCAweDgyLCAweEU0LCAweDM0LAorLyowODEwKi8weDA2LCAweEY1LCAweDgzLCAweDIyLCAweDc0LCAweDgwLCAweDJGLCAweEY1LAorCTB4ODIsIDB4NzQsIDB4MDIsIDB4M0UsIDB4RjUsIDB4ODMsIDB4MjIsIDB4QUYsCisvKjA4MjAqLzB4MDgsIDB4N0UsIDB4MDAsIDB4RUYsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCisJMHgyMiwgMHhGNSwgMHg4MywgMHhFNSwgMHg4MiwgMHg0NCwgMHgwNywgMHhGNSwKKy8qMDgzMCovMHg4MiwgMHhFNSwgMHg0MCwgMHhGMCwgMHgyMiwgMHg3NCwgMHg0MCwgMHgyNSwKKwkweDExLCAweEY1LCAweDgyLCAweEU0LCAweDM0LCAweDAyLCAweEY1LCAweDgzLAorLyowODQwKi8weDIyLCAweDc0LCAweEMwLCAweDI1LCAweDExLCAweEY1LCAweDgyLCAweEU0LAorCTB4MzQsIDB4MDMsIDB4RjUsIDB4ODMsIDB4MjIsIDB4NzQsIDB4MDAsIDB4MjUsCisvKjA4NTAqLzB4MTEsIDB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsIDB4MDYsIDB4RjUsIDB4ODMsCisJMHgyMiwgMHg3NCwgMHgyMCwgMHgyNSwgMHgxMSwgMHhGNSwgMHg4MiwgMHhFNCwKKy8qMDg2MCovMHgzNCwgMHgwNiwgMHhGNSwgMHg4MywgMHgyMiwgMHhFNSwgMHgwOCwgMHhGRCwKKwkweEVELCAweDQ0LCAweDA3LCAweEY1LCAweDgyLCAweDIyLCAweEU1LCAweDQxLAorLyowODcwKi8weEYwLCAweEU1LCAweDY1LCAweDY0LCAweDAxLCAweDQ1LCAweDY0LCAweDIyLAorCTB4N0UsIDB4MDAsIDB4RkIsIDB4N0EsIDB4MDAsIDB4RkQsIDB4N0MsIDB4MDAsCisvKjA4ODAqLzB4MjIsIDB4NzQsIDB4MjAsIDB4MjUsIDB4MTEsIDB4RjUsIDB4ODIsIDB4RTQsCisJMHgzNCwgMHgwMiwgMHgyMiwgMHg3NCwgMHhBMCwgMHgyNSwgMHgxMSwgMHhGNSwKKy8qMDg5MCovMHg4MiwgMHhFNCwgMHgzNCwgMHgwMywgMHgyMiwgMHg4NSwgMHgzRSwgMHg0MiwKKwkweDg1LCAweDNGLCAweDQxLCAweDhGLCAweDQwLCAweDIyLCAweDg1LCAweDNDLAorLyowOEEwKi8weDQyLCAweDg1LCAweDNELCAweDQxLCAweDhGLCAweDQwLCAweDIyLCAweDc1LAorCTB4NDUsIDB4M0YsIDB4OTAsIDB4MDcsIDB4MjAsIDB4RTQsIDB4RjAsIDB4QTMsCisvKjA4QjAqLzB4MjIsIDB4RjUsIDB4ODMsIDB4RTUsIDB4MzIsIDB4RjAsIDB4MDUsIDB4NkUsCisJMHhFNSwgMHg2RSwgMHhDMywgMHg5NCwgMHg0MCwgMHgyMiwgMHhGMCwgMHhFNSwKKy8qMDhDMCovMHgwOCwgMHg0NCwgMHgwNiwgMHhGNSwgMHg4MiwgMHgyMiwgMHg3NCwgMHgwMCwKKwkweDI1LCAweDZFLCAweEY1LCAweDgyLCAweEU0LCAweDM0LCAweDAwLCAweEY1LAorLyowOEQwKi8weDgzLCAweDIyLCAweEU1LCAweDZELCAweDQ1LCAweDZDLCAweDkwLCAweDA3LAorCTB4MkYsIDB4MjIsIDB4RTQsIDB4RjksIDB4RTUsIDB4M0MsIDB4RDMsIDB4OTUsCisvKjA4RTAqLzB4M0UsIDB4MjIsIDB4NzQsIDB4ODAsIDB4MkUsIDB4RjUsIDB4ODIsIDB4RTQsCisJMHgzNCwgMHgwMiwgMHhGNSwgMHg4MywgMHhFMCwgMHgyMiwgMHg3NCwgMHhBMCwKKy8qMDhGMCovMHgyRSwgMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwMiwgMHhGNSwgMHg4MywKKwkweEUwLCAweDIyLCAweDc0LCAweDgwLCAweDI1LCAweDZFLCAweEY1LCAweDgyLAorLyowOTAwKi8weEU0LCAweDM0LCAweDAwLCAweDIyLCAweDI1LCAweDQyLCAweEZELCAweEU0LAorCTB4MzMsIDB4RkMsIDB4MjIsIDB4ODUsIDB4NDIsIDB4NDIsIDB4ODUsIDB4NDEsCisvKjA5MTAqLzB4NDEsIDB4ODUsIDB4NDAsIDB4NDAsIDB4MjIsIDB4RUQsIDB4NEMsIDB4NjAsCisJMHgwMywgMHgwMiwgMHgwOSwgMHhFNSwgMHhFRiwgMHg0RSwgMHg3MCwgMHgzNywKKy8qMDkyMCovMHg5MCwgMHgwNywgMHgyNiwgMHgxMiwgMHgwNywgMHg4OSwgMHhFMCwgMHhGRCwKKwkweDEyLCAweDA3LCAweENDLCAweEVELCAweEYwLCAweDkwLCAweDA3LCAweDI4LAorLyowOTMwKi8weDEyLCAweDA3LCAweDg5LCAweEUwLCAweEZELCAweDEyLCAweDA3LCAweEQ4LAorCTB4RUQsIDB4RjAsIDB4MTIsIDB4MDcsIDB4ODYsIDB4RTAsIDB4NTQsIDB4MUYsCisvKjA5NDAqLzB4RkQsIDB4MTIsIDB4MDgsIDB4ODEsIDB4RjUsIDB4ODMsIDB4RUQsIDB4RjAsCisJMHg5MCwgMHgwNywgMHgyNCwgMHgxMiwgMHgwNywgMHg4OSwgMHhFMCwgMHg1NCwKKy8qMDk1MCovMHgxRiwgMHhGRCwgMHgxMiwgMHgwOCwgMHgzNSwgMHhFRCwgMHhGMCwgMHhFRiwKKwkweDY0LCAweDA0LCAweDRFLCAweDcwLCAweDM3LCAweDkwLCAweDA3LCAweDI2LAorLyowOTYwKi8weDEyLCAweDA3LCAweDg5LCAweEUwLCAweEZELCAweDEyLCAweDA3LCAweEU0LAorCTB4RUQsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjgsIDB4MTIsIDB4MDcsIDB4ODksCisvKjA5NzAqLzB4RTAsIDB4RkQsIDB4MTIsIDB4MDcsIDB4RjAsIDB4RUQsIDB4RjAsIDB4MTIsCisJMHgwNywgMHg4NiwgMHhFMCwgMHg1NCwgMHgxRiwgMHhGRCwgMHgxMiwgMHgwOCwKKy8qMDk4MCovMHg4QiwgMHhGNSwgMHg4MywgMHhFRCwgMHhGMCwgMHg5MCwgMHgwNywgMHgyNCwKKwkweDEyLCAweDA3LCAweDg5LCAweEUwLCAweDU0LCAweDFGLCAweEZELCAweDEyLAorLyowOTkwKi8weDA4LCAweDQxLCAweEVELCAweEYwLCAweEVGLCAweDY0LCAweDAxLCAweDRFLAorCTB4NzAsIDB4MDQsIDB4N0QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0QsIDB4MDAsCisvKjA5QTAqLzB4RUYsIDB4NjQsIDB4MDIsIDB4NEUsIDB4NzAsIDB4MDQsIDB4N0YsIDB4MDEsCisJMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHhFRiwgMHg0RCwgMHg2MCwgMHg3OCwKKy8qMDlCMCovMHg5MCwgMHgwNywgMHgyNiwgMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHhGRiwKKwkweDEyLCAweDA3LCAweEZDLCAweEVGLCAweDEyLCAweDA3LCAweDMxLCAweEUwLAorLyowOUMwKi8weEZGLCAweDEyLCAweDA4LCAweDA4LCAweEVGLCAweEYwLCAweDkwLCAweDA3LAorCTB4MjIsIDB4MTIsIDB4MDcsIDB4MzUsIDB4RTAsIDB4NTQsIDB4MUYsIDB4RkYsCisvKjA5RDAqLzB4MTIsIDB4MDgsIDB4NEQsIDB4RUYsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjQsCisJMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHg1NCwgMHgxRiwgMHhGRiwgMHgxMiwKKy8qMDlFMCovMHgwOCwgMHg1OSwgMHhFRiwgMHhGMCwgMHgyMiwgMHgxMiwgMHgwNywgMHhDQywKKwkweEU0LCAweEYwLCAweDEyLCAweDA3LCAweEQ4LCAweEU0LCAweEYwLCAweDEyLAorLyowOUYwKi8weDA4LCAweDgxLCAweEY1LCAweDgzLCAweEU0LCAweEYwLCAweDEyLCAweDA4LAorCTB4MzUsIDB4NzQsIDB4MTQsIDB4RjAsIDB4MTIsIDB4MDcsIDB4RTQsIDB4RTQsCisvKjBBMDAqLzB4RjAsIDB4MTIsIDB4MDcsIDB4RjAsIDB4RTQsIDB4RjAsIDB4MTIsIDB4MDgsCisJMHg4QiwgMHhGNSwgMHg4MywgMHhFNCwgMHhGMCwgMHgxMiwgMHgwOCwgMHg0MSwKKy8qMEExMCovMHg3NCwgMHgxNCwgMHhGMCwgMHgxMiwgMHgwNywgMHhGQywgMHhFNCwgMHhGMCwKKwkweDEyLCAweDA4LCAweDA4LCAweEU0LCAweEYwLCAweDEyLCAweDA4LCAweDRELAorLyowQTIwKi8weEU0LCAweEYwLCAweDEyLCAweDA4LCAweDU5LCAweDc0LCAweDE0LCAweEYwLAorCTB4MjIsIDB4NTMsIDB4RjksIDB4RjcsIDB4NzUsIDB4RkMsIDB4MTAsIDB4RTQsCisvKjBBMzAqLzB4RjUsIDB4RkQsIDB4NzUsIDB4RkUsIDB4MzAsIDB4RjUsIDB4RkYsIDB4RTUsCisJMHhFNywgMHgyMCwgMHhFNywgMHgwMywgMHg0MywgMHhGOSwgMHgwOCwgMHhFNSwKKy8qMEE0MCovMHhFNiwgMHgyMCwgMHhFNywgMHgwQiwgMHg3OCwgMHhGRiwgMHhFNCwgMHhGNiwKKwkweEQ4LCAweEZELCAweDUzLCAweEU2LCAweEZFLCAweDgwLCAweDA5LCAweDc4LAorLyowQTUwKi8weDA4LCAweEU0LCAweEY2LCAweEQ4LCAweEZELCAweDUzLCAweEU2LCAweEZFLAorCTB4NzUsIDB4ODEsIDB4ODAsIDB4RTQsIDB4RjUsIDB4QTgsIDB4RDIsIDB4QTgsCisvKjBBNjAqLzB4QzIsIDB4QTksIDB4RDIsIDB4QUYsIDB4RTUsIDB4RTIsIDB4MjAsIDB4RTUsCisJMHgwNSwgMHgyMCwgMHhFNiwgMHgwMiwgMHg4MCwgMHgwMywgMHg0MywgMHhFMSwKKy8qMEE3MCovMHgwMiwgMHhFNSwgMHhFMiwgMHgyMCwgMHhFMCwgMHgwRSwgMHg5MCwgMHgwMCwKKwkweDAwLCAweDdGLCAweDAwLCAweDdFLCAweDA4LCAweEU0LCAweEYwLCAweEEzLAorLyowQTgwKi8weERGLCAweEZDLCAweERFLCAweEZBLCAweDAyLCAweDBBLCAweERCLCAweDQzLAorCTB4RkEsIDB4MDEsIDB4QzAsIDB4RTAsIDB4QzAsIDB4RjAsIDB4QzAsIDB4ODMsCisvKjBBOTAqLzB4QzAsIDB4ODIsIDB4QzAsIDB4RDAsIDB4MTIsIDB4MUMsIDB4RTcsIDB4RDAsCisJMHhEMCwgMHhEMCwgMHg4MiwgMHhEMCwgMHg4MywgMHhEMCwgMHhGMCwgMHhEMCwKKy8qMEFBMCovMHhFMCwgMHg1MywgMHhGQSwgMHhGRSwgMHgzMiwgMHgwMiwgMHgxQiwgMHg1NSwKKwkweEU0LCAweDkzLCAweEEzLCAweEY4LCAweEU0LCAweDkzLCAweEEzLCAweEY2LAorLyowQUIwKi8weDA4LCAweERGLCAweEY5LCAweDgwLCAweDI5LCAweEU0LCAweDkzLCAweEEzLAorCTB4RjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MEMsIDB4QzgsIDB4QzMsIDB4MzMsCisvKjBBQzAqLzB4QzQsIDB4NTQsIDB4MEYsIDB4NDQsIDB4MjAsIDB4QzgsIDB4ODMsIDB4NDAsCisJMHgwNCwgMHhGNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhGNiwgMHhERiwKKy8qMEFEMCovMHhFNCwgMHg4MCwgMHgwQiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwKKwkweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDAwLCAweDNGLCAweEU0LCAweDdFLAorLyowQUUwKi8weDAxLCAweDkzLCAweDYwLCAweEMxLCAweEEzLCAweEZGLCAweDU0LCAweDNGLAorCTB4MzAsIDB4RTUsIDB4MDksIDB4NTQsIDB4MUYsIDB4RkUsIDB4RTQsIDB4OTMsCisvKjBBRjAqLzB4QTMsIDB4NjAsIDB4MDEsIDB4MEUsIDB4Q0YsIDB4NTQsIDB4QzAsIDB4MjUsCisJMHhFMCwgMHg2MCwgMHhBRCwgMHg0MCwgMHhCOCwgMHg4MCwgMHhGRSwgMHg4QywKKy8qMEIwMCovMHg2NCwgMHg4RCwgMHg2NSwgMHg4QSwgMHg2NiwgMHg4QiwgMHg2NywgMHhFNCwKKwkweEY1LCAweDY5LCAweEVGLCAweDRFLCAweDcwLCAweDAzLCAweDAyLCAweDFELAorLyowQjEwKi8weDU1LCAweEU0LCAweEY1LCAweDY4LCAweEU1LCAweDY3LCAweDQ1LCAweDY2LAorCTB4NzAsIDB4MzIsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4OTAsCisvKjBCMjAqLzB4RTQsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzIsIDB4RTQsCisJMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDNCwgMHhFNCwgMHgxMiwKKy8qMEIzMCovMHgwOCwgMHg3MCwgMHg3MCwgMHgyOSwgMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwKKwkweDgzLCAweDkyLCAweEU0LCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLAorLyowQjQwKi8weEM2LCAweEU0LCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEM4LAorCTB4RTQsIDB4RjAsIDB4ODAsIDB4MTEsIDB4OTAsIDB4MDcsIDB4MjYsIDB4MTIsCisvKjBCNTAqLzB4MDcsIDB4MzUsIDB4RTQsIDB4MTIsIDB4MDgsIDB4NzAsIDB4NzAsIDB4MDUsCisJMHgxMiwgMHgwNywgMHgzMiwgMHhFNCwgMHhGMCwgMHgxMiwgMHgxRCwgMHg1NSwKKy8qMEI2MCovMHgxMiwgMHgxRSwgMHhCRiwgMHhFNSwgMHg2NywgMHg0NSwgMHg2NiwgMHg3MCwKKwkweDMzLCAweDEyLCAweDA3LCAweDJBLCAweDc1LCAweDgzLCAweDkwLCAweEU1LAorLyowQjcwKi8weDQxLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMyLCAweEU1LAorCTB4NDEsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzQsIDB4MTIsCisvKjBCODAqLzB4MDgsIDB4NkUsIDB4NzAsIDB4MjksIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsCisJMHg4MywgMHg5MiwgMHhFNSwgMHg0MCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwKKy8qMEI5MCovMHg4MywgMHhDNiwgMHhFNSwgMHg0MCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwKKwkweDgzLCAweEM4LCAweDgwLCAweDBFLCAweDkwLCAweDA3LCAweDI2LCAweDEyLAorLyowQkEwKi8weDA3LCAweDM1LCAweDEyLCAweDA4LCAweDZFLCAweDcwLCAweDA2LCAweDEyLAorCTB4MDcsIDB4MzIsIDB4RTUsIDB4NDAsIDB4RjAsIDB4QUYsIDB4NjksIDB4N0UsCisvKjBCQjAqLzB4MDAsIDB4QUQsIDB4NjcsIDB4QUMsIDB4NjYsIDB4MTIsIDB4MDQsIDB4NDQsCisJMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwgMHg4MywgMHhDQSwgMHhFMCwgMHhEMywKKy8qMEJDMCovMHg5NCwgMHgwMCwgMHg1MCwgMHgwQywgMHgwNSwgMHg2OCwgMHhFNSwgMHg2OCwKKwkweEMzLCAweDk0LCAweDA1LCAweDUwLCAweDAzLCAweDAyLCAweDBCLCAweDE0LAorLyowQkQwKi8weDIyLCAweDhDLCAweDYwLCAweDhELCAweDYxLCAweDEyLCAweDA4LCAweERBLAorCTB4NzQsIDB4MjAsIDB4NDAsIDB4MEQsIDB4MkYsIDB4RjUsIDB4ODIsIDB4NzQsCisvKjBCRTAqLzB4MDMsIDB4M0UsIDB4RjUsIDB4ODMsIDB4RTUsIDB4M0UsIDB4RjAsIDB4ODAsCisJMHgwQiwgMHgyRiwgMHhGNSwgMHg4MiwgMHg3NCwgMHgwMywgMHgzRSwgMHhGNSwKKy8qMEJGMCovMHg4MywgMHhFNSwgMHgzQywgMHhGMCwgMHhFNSwgMHgzQywgMHhEMywgMHg5NSwKKwkweDNFLCAweDQwLCAweDNDLCAweEU1LCAweDYxLCAweDQ1LCAweDYwLCAweDcwLAorLyowQzAwKi8weDEwLCAweEU5LCAweDEyLCAweDA5LCAweDA0LCAweEU1LCAweDNFLCAweDEyLAorCTB4MDcsIDB4NjgsIDB4NDAsIDB4M0IsIDB4MTIsIDB4MDgsIDB4OTUsIDB4ODAsCisvKjBDMTAqLzB4MTgsIDB4RTUsIDB4M0UsIDB4QzMsIDB4OTUsIDB4MzgsIDB4NDAsIDB4MUQsCisJMHg4NSwgMHgzRSwgMHgzOCwgMHhFNSwgMHgzRSwgMHg2MCwgMHgwNSwgMHg4NSwKKy8qMEMyMCovMHgzRiwgMHgzOSwgMHg4MCwgMHgwMywgMHg4NSwgMHgzOSwgMHgzOSwgMHg4RiwKKwkweDNBLCAweDEyLCAweDA4LCAweDE0LCAweEU1LCAweDNFLCAweDEyLCAweDA3LAorLyowQzMwKi8weEMwLCAweEU1LCAweDNGLCAweEYwLCAweDIyLCAweDgwLCAweDQzLCAweEU1LAorCTB4NjEsIDB4NDUsIDB4NjAsIDB4NzAsIDB4MTksIDB4MTIsIDB4MDcsIDB4NUYsCisvKjBDNDAqLzB4NDAsIDB4MDUsIDB4MTIsIDB4MDgsIDB4OUUsIDB4ODAsIDB4MjcsIDB4MTIsCisJMHgwOSwgMHgwQiwgMHgxMiwgMHgwOCwgMHgxNCwgMHhFNSwgMHg0MiwgMHgxMiwKKy8qMEM1MCovMHgwNywgMHhDMCwgMHhFNSwgMHg0MSwgMHhGMCwgMHgyMiwgMHhFNSwgMHgzQywKKwkweEMzLCAweDk1LCAweDM4LCAweDQwLCAweDFELCAweDg1LCAweDNDLCAweDM4LAorLyowQzYwKi8weEU1LCAweDNDLCAweDYwLCAweDA1LCAweDg1LCAweDNELCAweDM5LCAweDgwLAorCTB4MDMsIDB4ODUsIDB4MzksIDB4MzksIDB4OEYsIDB4M0EsIDB4MTIsIDB4MDgsCisvKjBDNzAqLzB4MTQsIDB4RTUsIDB4M0MsIDB4MTIsIDB4MDcsIDB4QzAsIDB4RTUsIDB4M0QsCisJMHhGMCwgMHgyMiwgMHg4NSwgMHgzOCwgMHgzOCwgMHg4NSwgMHgzOSwgMHgzOSwKKy8qMEM4MCovMHg4NSwgMHgzQSwgMHgzQSwgMHgxMiwgMHgwOCwgMHgxNCwgMHhFNSwgMHgzOCwKKwkweDEyLCAweDA3LCAweEMwLCAweEU1LCAweDM5LCAweEYwLCAweDIyLCAweDdGLAorLyowQzkwKi8weDA2LCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDFELCAweDIzLCAweDEyLAorCTB4MEUsIDB4MDQsIDB4MTIsIDB4MEUsIDB4MzMsIDB4RTAsIDB4NDQsIDB4MEEsCisvKjBDQTAqLzB4RjAsIDB4NzQsIDB4OEUsIDB4RkUsIDB4MTIsIDB4MEUsIDB4MDQsIDB4MTIsCisJMHgwRSwgMHgwQiwgMHhFRiwgMHhGMCwgMHhFNSwgMHgyOCwgMHgzMCwgMHhFNSwKKy8qMENCMCovMHgwMywgMHhEMywgMHg4MCwgMHgwMSwgMHhDMywgMHg0MCwgMHgwNSwgMHg3NSwKKwkweDE0LCAweDIwLCAweDgwLCAweDAzLCAweDc1LCAweDE0LCAweDA4LCAweDEyLAorLyowQ0MwKi8weDBFLCAweDA0LCAweDc1LCAweDgzLCAweDhBLCAweEU1LCAweDE0LCAweEYwLAorCTB4QjQsIDB4RkYsIDB4MDUsIDB4NzUsIDB4MTIsIDB4ODAsIDB4ODAsIDB4MDYsCisvKjBDRDAqLzB4RTUsIDB4MTQsIDB4QzMsIDB4MTMsIDB4RjUsIDB4MTIsIDB4RTQsIDB4RjUsCisJMHgxNiwgMHhGNSwgMHg3RiwgMHgxMiwgMHgxOSwgMHgzNiwgMHgxMiwgMHgxMywKKy8qMENFMCovMHhBMywgMHhFNSwgMHgwQSwgMHhDMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgwOSwKKwkweDA1LCAweDE2LCAweEU1LCAweDE2LCAweEMzLCAweDk0LCAweDE0LCAweDQwLAorLyowQ0YwKi8weEVBLCAweEU1LCAweEU0LCAweDIwLCAweEU3LCAweDI4LCAweDEyLCAweDBFLAorCTB4MDQsIDB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsIDB4NTQsIDB4MDgsIDB4RDMsCisvKjBEMDAqLzB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsCisJMHg3RiwgMHgwMCwgMHhFNSwgMHgwQSwgMHhDMywgMHg5NCwgMHgwMSwgMHg0MCwKKy8qMEQxMCovMHgwNCwgMHg3RSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RSwgMHgwMCwgMHhFRiwKKwkweDVFLCAweDYwLCAweDAzLCAweDEyLCAweDFELCAweEQ3LCAweEU1LCAweDdGLAorLyowRDIwKi8weEMzLCAweDk0LCAweDExLCAweDQwLCAweDE0LCAweDEyLCAweDBFLCAweDA0LAorCTB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4RTUsCisvKjBEMzAqLzB4RTQsIDB4MjAsIDB4RTcsIDB4MEYsIDB4MTIsIDB4MUQsIDB4RDcsIDB4ODAsCisJMHgwQSwgMHgxMiwgMHgwRSwgMHgwNCwgMHg3NSwgMHg4MywgMHhEMiwgMHhFMCwKKy8qMEQ0MCovMHg1NCwgMHg3RiwgMHhGMCwgMHgxMiwgMHgxRCwgMHgyMywgMHgyMiwgMHg3NCwKKwkweDhBLCAweDg1LCAweDA4LCAweDgyLCAweEY1LCAweDgzLCAweEU1LCAweDE3LAorLyowRDUwKi8weEYwLCAweDEyLCAweDBFLCAweDNBLCAweEU0LCAweEYwLCAweDkwLCAweDA3LAorCTB4MDIsIDB4RTAsIDB4MTIsIDB4MEUsIDB4MTcsIDB4NzUsIDB4ODMsIDB4OTAsCisvKjBENjAqLzB4RUYsIDB4RjAsIDB4NzQsIDB4OTIsIDB4RkUsIDB4RTUsIDB4MDgsIDB4NDQsCisJMHgwNywgMHhGRiwgMHhGNSwgMHg4MiwgMHg4RSwgMHg4MywgMHhFMCwgMHg1NCwKKy8qMEQ3MCovMHhDMCwgMHhGRCwgMHg5MCwgMHgwNywgMHgwMywgMHhFMCwgMHg1NCwgMHgzRiwKKwkweDRELCAweDhGLCAweDgyLCAweDhFLCAweDgzLCAweEYwLCAweDkwLCAweDA3LAorLyowRDgwKi8weDA0LCAweEUwLCAweDEyLCAweDBFLCAweDE3LCAweDc1LCAweDgzLCAweDgyLAorCTB4RUYsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MDUsIDB4RTAsIDB4RkYsIDB4RUQsCisvKjBEOTAqLzB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsIDB4NzUsIDB4ODMsIDB4QjQsIDB4RUYsCisJMHgxMiwgMHgwRSwgMHgwMywgMHg3NSwgMHg4MywgMHg4MCwgMHhFMCwgMHg1NCwKKy8qMERBMCovMHhCRiwgMHhGMCwgMHgzMCwgMHgzNywgMHgwQSwgMHgxMiwgMHgwRSwgMHg5MSwKKwkweDc1LCAweDgzLCAweDk0LCAweEUwLCAweDQ0LCAweDgwLCAweEYwLCAweDMwLAorLyowREIwKi8weDM4LCAweDBBLCAweDEyLCAweDBFLCAweDkxLCAweDc1LCAweDgzLCAweDkyLAorCTB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4RTUsIDB4MjgsIDB4MzAsIDB4RTQsCisvKjBEQzAqLzB4MUEsIDB4MjAsIDB4MzksIDB4MEEsIDB4MTIsIDB4MEUsIDB4MDQsIDB4NzUsCisJMHg4MywgMHg4OCwgMHhFMCwgMHg1NCwgMHg3RiwgMHhGMCwgMHgyMCwgMHgzQSwKKy8qMEREMCovMHgwQSwgMHgxMiwgMHgwRSwgMHgwNCwgMHg3NSwgMHg4MywgMHg4OCwgMHhFMCwKKwkweDU0LCAweEJGLCAweEYwLCAweDc0LCAweDhDLCAweEZFLCAweDEyLCAweDBFLAorLyowREUwKi8weDA0LCAweDhFLCAweDgzLCAweEUwLCAweDU0LCAweDBGLCAweDEyLCAweDBFLAorCTB4MDMsIDB4NzUsIDB4ODMsIDB4ODYsIDB4RTAsIDB4NTQsIDB4QkYsIDB4RjAsCisvKjBERjAqLzB4RTUsIDB4MDgsIDB4NDQsIDB4MDYsIDB4MTIsIDB4MEQsIDB4RkQsIDB4NzUsCisJMHg4MywgMHg4QSwgMHhFNCwgMHhGMCwgMHgyMiwgMHhGNSwgMHg4MiwgMHg3NSwKKy8qMEUwMCovMHg4MywgMHg4MiwgMHhFNCwgMHhGMCwgMHhFNSwgMHgwOCwgMHg0NCwgMHgwNywKKwkweEY1LCAweDgyLCAweDIyLCAweDhFLCAweDgzLCAweEUwLCAweEY1LCAweDEwLAorLyowRTEwKi8weDU0LCAweEZFLCAweEYwLCAweEU1LCAweDEwLCAweDQ0LCAweDAxLCAweEZGLAorCTB4RTUsIDB4MDgsIDB4RkQsIDB4RUQsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCisvKjBFMjAqLzB4MjIsIDB4RTUsIDB4MTUsIDB4QzQsIDB4NTQsIDB4MDcsIDB4RkYsIDB4RTUsCisJMHgwOCwgMHhGRCwgMHhFRCwgMHg0NCwgMHgwOCwgMHhGNSwgMHg4MiwgMHg3NSwKKy8qMEUzMCovMHg4MywgMHg4MiwgMHgyMiwgMHg3NSwgMHg4MywgMHg4MCwgMHhFMCwgMHg0NCwKKwkweDQwLCAweEYwLCAweEU1LCAweDA4LCAweDQ0LCAweDA4LCAweEY1LCAweDgyLAorLyowRTQwKi8weDc1LCAweDgzLCAweDhBLCAweDIyLCAweEU1LCAweDE2LCAweDI1LCAweEUwLAorCTB4MjUsIDB4RTAsIDB4MjQsIDB4QUYsIDB4RjUsIDB4ODIsIDB4RTQsIDB4MzQsCisvKjBFNTAqLzB4MUEsIDB4RjUsIDB4ODMsIDB4RTQsIDB4OTMsIDB4RjUsIDB4MEQsIDB4MjIsCisJMHg0MywgMHhFMSwgMHgxMCwgMHg0MywgMHhFMSwgMHg4MCwgMHg1MywgMHhFMSwKKy8qMEU2MCovMHhGRCwgMHg4NSwgMHhFMSwgMHgxMCwgMHgyMiwgMHhFNSwgMHgxNiwgMHgyNSwKKwkweEUwLCAweDI1LCAweEUwLCAweDI0LCAweEIyLCAweEY1LCAweDgyLCAweEU0LAorLyowRTcwKi8weDM0LCAweDFBLCAweEY1LCAweDgzLCAweEU0LCAweDkzLCAweDIyLCAweDg1LAorCTB4NTUsIDB4ODIsIDB4ODUsIDB4NTQsIDB4ODMsIDB4RTUsIDB4MTUsIDB4RjAsCisvKjBFODAqLzB4MjIsIDB4RTUsIDB4RTIsIDB4NTQsIDB4MjAsIDB4RDMsIDB4OTQsIDB4MDAsCisJMHgyMiwgMHhFNSwgMHhFMiwgMHg1NCwgMHg0MCwgMHhEMywgMHg5NCwgMHgwMCwKKy8qMEU5MCovMHgyMiwgMHhFNSwgMHgwOCwgMHg0NCwgMHgwNiwgMHhGNSwgMHg4MiwgMHgyMiwKKwkweEZELCAweEU1LCAweDA4LCAweEZCLCAweEVCLCAweDQ0LCAweDA3LCAweEY1LAorLyowRUEwKi8weDgyLCAweDIyLCAweDUzLCAweEY5LCAweEY3LCAweDc1LCAweEZFLCAweDMwLAorCTB4MjIsIDB4RUYsIDB4NEUsIDB4NzAsIDB4MjYsIDB4MTIsIDB4MDcsIDB4Q0MsCisvKjBFQjAqLzB4RTAsIDB4RkQsIDB4OTAsIDB4MDcsIDB4MjYsIDB4MTIsIDB4MDcsIDB4N0IsCisJMHgxMiwgMHgwNywgMHhEOCwgMHhFMCwgMHhGRCwgMHg5MCwgMHgwNywgMHgyOCwKKy8qMEVDMCovMHgxMiwgMHgwNywgMHg3QiwgMHgxMiwgMHgwOCwgMHg4MSwgMHgxMiwgMHgwNywKKwkweDcyLCAweDEyLCAweDA4LCAweDM1LCAweEUwLCAweDkwLCAweDA3LCAweDI0LAorLyowRUQwKi8weDEyLCAweDA3LCAweDc4LCAweEVGLCAweDY0LCAweDA0LCAweDRFLCAweDcwLAorCTB4MjksIDB4MTIsIDB4MDcsIDB4RTQsIDB4RTAsIDB4RkQsIDB4OTAsIDB4MDcsCisvKjBFRTAqLzB4MjYsIDB4MTIsIDB4MDcsIDB4N0IsIDB4MTIsIDB4MDcsIDB4RjAsIDB4RTAsCisJMHhGRCwgMHg5MCwgMHgwNywgMHgyOCwgMHgxMiwgMHgwNywgMHg3QiwgMHgxMiwKKy8qMEVGMCovMHgwOCwgMHg4QiwgMHgxMiwgMHgwNywgMHg3MiwgMHgxMiwgMHgwOCwgMHg0MSwKKwkweEUwLCAweDU0LCAweDFGLCAweEZELCAweDkwLCAweDA3LCAweDI0LCAweDEyLAorLyowRjAwKi8weDA3LCAweDdCLCAweEVGLCAweDY0LCAweDAxLCAweDRFLCAweDcwLCAweDA0LAorCTB4N0QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N0QsIDB4MDAsIDB4RUYsIDB4NjQsCisvKjBGMTAqLzB4MDIsIDB4NEUsIDB4NzAsIDB4MDQsIDB4N0YsIDB4MDEsIDB4ODAsIDB4MDIsCisJMHg3RiwgMHgwMCwgMHhFRiwgMHg0RCwgMHg2MCwgMHgzNSwgMHgxMiwgMHgwNywKKy8qMEYyMCovMHhGQywgMHhFMCwgMHhGRiwgMHg5MCwgMHgwNywgMHgyNiwgMHgxMiwgMHgwNywKKwkweDg5LCAweEVGLCAweEYwLCAweDEyLCAweDA4LCAweDA4LCAweEUwLCAweEZGLAorLyowRjMwKi8weDkwLCAweDA3LCAweDI4LCAweDEyLCAweDA3LCAweDg5LCAweEVGLCAweEYwLAorCTB4MTIsIDB4MDgsIDB4NEQsIDB4RTAsIDB4NTQsIDB4MUYsIDB4RkYsIDB4MTIsCisvKjBGNDAqLzB4MDcsIDB4ODYsIDB4RUYsIDB4RjAsIDB4MTIsIDB4MDgsIDB4NTksIDB4RTAsCisJMHg1NCwgMHgxRiwgMHhGRiwgMHg5MCwgMHgwNywgMHgyNCwgMHgxMiwgMHgwNywKKy8qMEY1MCovMHg4OSwgMHhFRiwgMHhGMCwgMHgyMiwgMHhFNCwgMHhGNSwgMHg1MywgMHgxMiwKKwkweDBFLCAweDgxLCAweDQwLCAweDA0LCAweDdGLCAweDAxLCAweDgwLCAweDAyLAorLyowRjYwKi8weDdGLCAweDAwLCAweDEyLCAweDBFLCAweDg5LCAweDQwLCAweDA0LCAweDdFLAorCTB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RUUsIDB4NEYsIDB4NzAsCisvKjBGNzAqLzB4MDMsIDB4MDIsIDB4MEYsIDB4RjYsIDB4ODUsIDB4RTEsIDB4MTAsIDB4NDMsCisJMHhFMSwgMHgwMiwgMHg1MywgMHhFMSwgMHgwRiwgMHg4NSwgMHhFMSwgMHgxMCwKKy8qMEY4MCovMHhFNCwgMHhGNSwgMHg1MSwgMHhFNSwgMHhFMywgMHg1NCwgMHgzRiwgMHhGNSwKKwkweDUyLCAweDEyLCAweDBFLCAweDg5LCAweDQwLCAweDFELCAweEFELCAweDUyLAorLyowRjkwKi8weEFGLCAweDUxLCAweDEyLCAweDExLCAweDE4LCAweEVGLCAweDYwLCAweDA4LAorCTB4ODUsIDB4RTEsIDB4MTAsIDB4NDMsIDB4RTEsIDB4NDAsIDB4ODAsIDB4MEIsCisvKjBGQTAqLzB4NTMsIDB4RTEsIDB4QkYsIDB4MTIsIDB4MEUsIDB4NTgsIDB4MTIsIDB4MDAsCisJMHgwNiwgMHg4MCwgMHhGQiwgMHhFNSwgMHhFMywgMHg1NCwgMHgzRiwgMHhGNSwKKy8qMEZCMCovMHg1MSwgMHhFNSwgMHhFNCwgMHg1NCwgMHgzRiwgMHhGNSwgMHg1MiwgMHgxMiwKKwkweDBFLCAweDgxLCAweDQwLCAweDFELCAweEFELCAweDUyLCAweEFGLCAweDUxLAorLyowRkMwKi8weDEyLCAweDExLCAweDE4LCAweEVGLCAweDYwLCAweDA4LCAweDg1LCAweEUxLAorCTB4MTAsIDB4NDMsIDB4RTEsIDB4MjAsIDB4ODAsIDB4MEIsIDB4NTMsIDB4RTEsCisvKjBGRDAqLzB4REYsIDB4MTIsIDB4MEUsIDB4NTgsIDB4MTIsIDB4MDAsIDB4MDYsIDB4ODAsCisJMHhGQiwgMHgxMiwgMHgwRSwgMHg4MSwgMHg0MCwgMHgwNCwgMHg3RiwgMHgwMSwKKy8qMEZFMCovMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHgxMiwgMHgwRSwgMHg4OSwgMHg0MCwKKwkweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLAorLyowRkYwKi8weDRGLCAweDYwLCAweDAzLCAweDEyLCAweDBFLCAweDVCLCAweDIyLCAweDEyLAorCTB4MEUsIDB4MjEsIDB4RUYsIDB4RjAsIDB4MTIsIDB4MTAsIDB4OTEsIDB4MjIsCisvKjEwMDAqLzB4MDIsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MTAsIDB4NDAsIDB4MDIsIDB4MTAsCisJMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qMTAxMCovMHgwMSwgMHgyMCwgMHgwMSwgMHgyMCwgMHhFNCwgMHhGNSwgMHg1NywgMHgxMiwKKwkweDE2LCAweEJELCAweDEyLCAweDE2LCAweDQ0LCAweEU0LCAweDEyLCAweDEwLAorLyoxMDIwKi8weDU2LCAweDEyLCAweDE0LCAweEI3LCAweDkwLCAweDA3LCAweDI2LCAweDEyLAorCTB4MDcsIDB4MzUsIDB4RTQsIDB4MTIsIDB4MDcsIDB4MzEsIDB4RTQsIDB4RjAsCisvKjEwMzAqLzB4MTIsIDB4MTAsIDB4NTYsIDB4MTIsIDB4MTQsIDB4QjcsIDB4OTAsIDB4MDcsCisJMHgyNiwgMHgxMiwgMHgwNywgMHgzNSwgMHhFNSwgMHg0MSwgMHgxMiwgMHgwNywKKy8qMTA0MCovMHgzMSwgMHhFNSwgMHg0MCwgMHhGMCwgMHhBRiwgMHg1NywgMHg3RSwgMHgwMCwKKwkweEFELCAweDU2LCAweDdDLCAweDAwLCAweDEyLCAweDA0LCAweDQ0LCAweEFGLAorLyoxMDUwKi8weDU2LCAweDdFLCAweDAwLCAweDAyLCAweDExLCAweEVFLCAweEZGLCAweDkwLAorCTB4MDcsIDB4MjAsIDB4QTMsIDB4RTAsIDB4RkQsIDB4RTQsIDB4RjUsIDB4NTYsCisvKjEwNjAqLzB4RjUsIDB4NDAsIDB4RkUsIDB4RkMsIDB4QUIsIDB4NTYsIDB4RkEsIDB4MTIsCisJMHgxMSwgMHg1MSwgMHg3RiwgMHgwRiwgMHg3RCwgMHgxOCwgMHhFNCwgMHhGNSwKKy8qMTA3MCovMHg1NiwgMHhGNSwgMHg0MCwgMHhGRSwgMHhGQywgMHhBQiwgMHg1NiwgMHhGQSwKKwkweDEyLCAweDE1LCAweDQxLCAweEFGLCAweDU2LCAweDdFLCAweDAwLCAweDEyLAorLyoxMDgwKi8weDFBLCAweEZGLCAweEU0LCAweEZGLCAweEY1LCAweDU2LCAweDdELCAweDFGLAorCTB4RjUsIDB4NDAsIDB4RkUsIDB4RkMsIDB4QUIsIDB4NTYsIDB4RkEsIDB4MjIsCisvKjEwOTAqLzB4MjIsIDB4RTQsIDB4RjUsIDB4NTUsIDB4RTUsIDB4MDgsIDB4RkQsIDB4NzQsCisJMHhBMCwgMHhGNSwgMHg1NiwgMHhFRCwgMHg0NCwgMHgwNywgMHhGNSwgMHg1NywKKy8qMTBBMCovMHhFNSwgMHgyOCwgMHgzMCwgMHhFNSwgMHgwMywgMHhEMywgMHg4MCwgMHgwMSwKKwkweEMzLCAweDQwLCAweDA1LCAweDdGLCAweDI4LCAweEVGLCAweDgwLCAweDA0LAorLyoxMEIwKi8weDdGLCAweDE0LCAweEVGLCAweEMzLCAweDEzLCAweEY1LCAweDU0LCAweEU0LAorCTB4RjksIDB4MTIsIDB4MEUsIDB4MTgsIDB4NzUsIDB4ODMsIDB4OEUsIDB4RTAsCisvKjEwQzAqLzB4RjUsIDB4MTAsIDB4Q0UsIDB4RUYsIDB4Q0UsIDB4RUUsIDB4RDMsIDB4OTQsCisJMHgwMCwgMHg0MCwgMHgyNiwgMHhFNSwgMHgxMCwgMHg1NCwgMHhGRSwgMHgxMiwKKy8qMTBEMCovMHgwRSwgMHg5OCwgMHg3NSwgMHg4MywgMHg4RSwgMHhFRCwgMHhGMCwgMHhFNSwKKwkweDEwLCAweDQ0LCAweDAxLCAweEZELCAweEVCLCAweDQ0LCAweDA3LCAweEY1LAorLyoxMEUwKi8weDgyLCAweEVELCAweEYwLCAweDg1LCAweDU3LCAweDgyLCAweDg1LCAweDU2LAorCTB4ODMsIDB4RTAsIDB4MzAsIDB4RTMsIDB4MDEsIDB4MDksIDB4MUUsIDB4ODAsCisvKjEwRjAqLzB4RDQsIDB4QzIsIDB4MzQsIDB4RTksIDB4QzMsIDB4OTUsIDB4NTQsIDB4NDAsCisJMHgwMiwgMHhEMiwgMHgzNCwgMHgyMiwgMHgwMiwgMHgwMCwgMHgwNiwgMHgyMiwKKy8qMTEwMCovMHgzMCwgMHgzMCwgMHgxMSwgMHg5MCwgMHgxMCwgMHgwMCwgMHhFNCwgMHg5MywKKwkweEY1LCAweDEwLCAweDkwLCAweDEwLCAweDEwLCAweEU0LCAweDkzLCAweEY1LAorLyoxMTEwKi8weDEwLCAweDEyLCAweDEwLCAweDkwLCAweDEyLCAweDExLCAweDUwLCAweDIyLAorCTB4RTQsIDB4RkMsIDB4QzMsIDB4RUQsIDB4OUYsIDB4RkEsIDB4RUYsIDB4RjUsCisvKjExMjAqLzB4ODMsIDB4NzUsIDB4ODIsIDB4MDAsIDB4NzksIDB4RkYsIDB4RTQsIDB4OTMsCisJMHhDQywgMHg2QywgMHhDQywgMHhBMywgMHhEOSwgMHhGOCwgMHhEQSwgMHhGNiwKKy8qMTEzMCovMHhFNSwgMHhFMiwgMHgzMCwgMHhFNCwgMHgwMiwgMHg4QywgMHhFNSwgMHhFRCwKKwkweDI0LCAweEZGLCAweEZGLCAweEVGLCAweDc1LCAweDgyLCAweEZGLCAweEY1LAorLyoxMTQwKi8weDgzLCAweEU0LCAweDkzLCAweDZDLCAweDcwLCAweDAzLCAweDdGLCAweDAxLAorCTB4MjIsIDB4N0YsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MTEsIDB4MDAsIDB4MDAsCisvKjExNTAqLzB4MjIsIDB4OEUsIDB4NTgsIDB4OEYsIDB4NTksIDB4OEMsIDB4NUEsIDB4OEQsCisJMHg1QiwgMHg4QSwgMHg1QywgMHg4QiwgMHg1RCwgMHg3NSwgMHg1RSwgMHgwMSwKKy8qMTE2MCovMHhFNCwgMHhGNSwgMHg1RiwgMHhGNSwgMHg2MCwgMHhGNSwgMHg2MiwgMHgxMiwKKwkweDA3LCAweDJBLCAweDc1LCAweDgzLCAweEQwLCAweEUwLCAweEZGLCAweEM0LAorLyoxMTcwKi8weDU0LCAweDBGLCAweEY1LCAweDYxLCAweDEyLCAweDFFLCAweEE1LCAweDg1LAorCTB4NTksIDB4NUUsIDB4RDMsIDB4RTUsIDB4NUUsIDB4OTUsIDB4NUIsIDB4RTUsCisvKjExODAqLzB4NUEsIDB4MTIsIDB4MDcsIDB4NkIsIDB4NTAsIDB4NEIsIDB4MTIsIDB4MDcsCisJMHgwMywgMHg3NSwgMHg4MywgMHhCQywgMHhFMCwgMHg0NSwgMHg1RSwgMHgxMiwKKy8qMTE5MCovMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCRSwgMHhFMCwgMHg0NSwgMHg1RSwKKwkweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMwLCAweEUwLCAweDQ1LAorLyoxMUEwKi8weDVFLCAweEYwLCAweEFGLCAweDVGLCAweEU1LCAweDYwLCAweDEyLCAweDA4LAorCTB4NzgsIDB4MTIsIDB4MEEsIDB4RkYsIDB4QUYsIDB4NjIsIDB4N0UsIDB4MDAsCisvKjExQjAqLzB4QUQsIDB4NUQsIDB4QUMsIDB4NUMsIDB4MTIsIDB4MDQsIDB4NDQsIDB4RTUsCisJMHg2MSwgMHhBRiwgMHg1RSwgMHg3RSwgMHgwMCwgMHhCNCwgMHgwMywgMHgwNSwKKy8qMTFDMCovMHgxMiwgMHgxRSwgMHgyMSwgMHg4MCwgMHgwNywgMHhBRCwgMHg1RCwgMHhBQywKKwkweDVDLCAweDEyLCAweDEzLCAweDE3LCAweDA1LCAweDVFLCAweDAyLCAweDExLAorLyoxMUQwKi8weDdBLCAweDEyLCAweDA3LCAweDAzLCAweDc1LCAweDgzLCAweEJDLCAweEUwLAorCTB4NDUsIDB4NDAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QkUsCisvKjExRTAqLzB4RTAsIDB4NDUsIDB4NDAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsCisJMHhDMCwgMHhFMCwgMHg0NSwgMHg0MCwgMHhGMCwgMHgyMiwgMHg4RSwgMHg1OCwKKy8qMTFGMCovMHg4RiwgMHg1OSwgMHg3NSwgMHg1QSwgMHgwMSwgMHg3OSwgMHgwMSwgMHg3NSwKKwkweDVCLCAweDAxLCAweEU0LCAweEZCLCAweDEyLCAweDA3LCAweDJBLCAweDc1LAorLyoxMjAwKi8weDgzLCAweEFFLCAweEUwLCAweDU0LCAweDFBLCAweEZGLCAweDEyLCAweDA4LAorCTB4NjUsIDB4RTAsIDB4QzQsIDB4MTMsIDB4NTQsIDB4MDcsIDB4RkUsIDB4RUYsCisvKjEyMTAqLzB4NzAsIDB4MEMsIDB4RUUsIDB4NjUsIDB4MzUsIDB4NzAsIDB4MDcsIDB4OTAsCisJMHgwNywgMHgyRiwgMHhFMCwgMHhCNCwgMHgwMSwgMHgwRCwgMHhBRiwgMHgzNSwKKy8qMTIyMCovMHg3RSwgMHgwMCwgMHgxMiwgMHgwRSwgMHhBOSwgMHhDRiwgMHhFQiwgMHhDRiwKKwkweDAyLCAweDFFLCAweDYwLCAweEU1LCAweDU5LCAweDY0LCAweDAyLCAweDQ1LAorLyoxMjMwKi8weDU4LCAweDcwLCAweDA0LCAweDdGLCAweDAxLCAweDgwLCAweDAyLCAweDdGLAorCTB4MDAsIDB4RTUsIDB4NTksIDB4NDUsIDB4NTgsIDB4NzAsIDB4MDQsIDB4N0UsCisvKjEyNDAqLzB4MDEsIDB4ODAsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RUUsIDB4NEYsIDB4NjAsCisJMHgyMywgMHg4NSwgMHg0MSwgMHg0OSwgMHg4NSwgMHg0MCwgMHg0QiwgMHhFNSwKKy8qMTI1MCovMHg1OSwgMHg0NSwgMHg1OCwgMHg3MCwgMHgyQywgMHhBRiwgMHg1QSwgMHhGRSwKKwkweENELCAweEU5LCAweENELCAweEZDLCAweEFCLCAweDU5LCAweEFBLCAweDU4LAorLyoxMjYwKi8weDEyLCAweDBBLCAweEZGLCAweEFGLCAweDVCLCAweDdFLCAweDAwLCAweDEyLAorCTB4MUUsIDB4NjAsIDB4ODAsIDB4MTUsIDB4QUYsIDB4NUIsIDB4N0UsIDB4MDAsCisvKjEyNzAqLzB4MTIsIDB4MUUsIDB4NjAsIDB4OTAsIDB4MDcsIDB4MjYsIDB4MTIsIDB4MDcsCisJMHgzNSwgMHhFNSwgMHg0OSwgMHgxMiwgMHgwNywgMHgzMSwgMHhFNSwgMHg0QiwKKy8qMTI4MCovMHhGMCwgMHhFNCwgMHhGRCwgMHhBRiwgMHgzNSwgMHhGRSwgMHhGQywgMHgxMiwKKwkweDA5LCAweDE1LCAweDIyLCAweDhDLCAweDY0LCAweDhELCAweDY1LCAweDEyLAorLyoxMjkwKi8weDA4LCAweERBLCAweDQwLCAweDNDLCAweEU1LCAweDY1LCAweDQ1LCAweDY0LAorCTB4NzAsIDB4MTAsIDB4MTIsIDB4MDksIDB4MDQsIDB4QzMsIDB4RTUsIDB4M0UsCisvKjEyQTAqLzB4MTIsIDB4MDcsIDB4NjksIDB4NDAsIDB4M0IsIDB4MTIsIDB4MDgsIDB4OTUsCisJMHg4MCwgMHgxOCwgMHhFNSwgMHgzRSwgMHhDMywgMHg5NSwgMHgzOCwgMHg0MCwKKy8qMTJCMCovMHgxRCwgMHg4NSwgMHgzRSwgMHgzOCwgMHhFNSwgMHgzRSwgMHg2MCwgMHgwNSwKKwkweDg1LCAweDNGLCAweDM5LCAweDgwLCAweDAzLCAweDg1LCAweDM5LCAweDM5LAorLyoxMkMwKi8weDhGLCAweDNBLCAweDEyLCAweDA3LCAweEE4LCAweEU1LCAweDNFLCAweDEyLAorCTB4MDcsIDB4NTMsIDB4RTUsIDB4M0YsIDB4RjAsIDB4MjIsIDB4ODAsIDB4M0IsCisvKjEyRDAqLzB4RTUsIDB4NjUsIDB4NDUsIDB4NjQsIDB4NzAsIDB4MTEsIDB4MTIsIDB4MDcsCisJMHg1RiwgMHg0MCwgMHgwNSwgMHgxMiwgMHgwOCwgMHg5RSwgMHg4MCwgMHgxRiwKKy8qMTJFMCovMHgxMiwgMHgwNywgMHgzRSwgMHhFNSwgMHg0MSwgMHhGMCwgMHgyMiwgMHhFNSwKKwkweDNDLCAweEMzLCAweDk1LCAweDM4LCAweDQwLCAweDFELCAweDg1LCAweDNDLAorLyoxMkYwKi8weDM4LCAweEU1LCAweDNDLCAweDYwLCAweDA1LCAweDg1LCAweDNELCAweDM5LAorCTB4ODAsIDB4MDMsIDB4ODUsIDB4MzksIDB4MzksIDB4OEYsIDB4M0EsIDB4MTIsCisvKjEzMDAqLzB4MDcsIDB4QTgsIDB4RTUsIDB4M0MsIDB4MTIsIDB4MDcsIDB4NTMsIDB4RTUsCisJMHgzRCwgMHhGMCwgMHgyMiwgMHgxMiwgMHgwNywgMHg5RiwgMHhFNSwgMHgzOCwKKy8qMTMxMCovMHgxMiwgMHgwNywgMHg1MywgMHhFNSwgMHgzOSwgMHhGMCwgMHgyMiwgMHg4QywKKwkweDYzLCAweDhELCAweDY0LCAweDEyLCAweDA4LCAweERBLCAweDQwLCAweDNDLAorLyoxMzIwKi8weEU1LCAweDY0LCAweDQ1LCAweDYzLCAweDcwLCAweDEwLCAweDEyLCAweDA5LAorCTB4MDQsIDB4QzMsIDB4RTUsIDB4M0UsIDB4MTIsIDB4MDcsIDB4NjksIDB4NDAsCisvKjEzMzAqLzB4M0IsIDB4MTIsIDB4MDgsIDB4OTUsIDB4ODAsIDB4MTgsIDB4RTUsIDB4M0UsCisJMHhDMywgMHg5NSwgMHgzOCwgMHg0MCwgMHgxRCwgMHg4NSwgMHgzRSwgMHgzOCwKKy8qMTM0MCovMHhFNSwgMHgzRSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgzRiwgMHgzOSwgMHg4MCwKKwkweDAzLCAweDg1LCAweDM5LCAweDM5LCAweDhGLCAweDNBLCAweDEyLCAweDA3LAorLyoxMzUwKi8weEE4LCAweEU1LCAweDNFLCAweDEyLCAweDA3LCAweDUzLCAweEU1LCAweDNGLAorCTB4RjAsIDB4MjIsIDB4ODAsIDB4M0IsIDB4RTUsIDB4NjQsIDB4NDUsIDB4NjMsCisvKjEzNjAqLzB4NzAsIDB4MTEsIDB4MTIsIDB4MDcsIDB4NUYsIDB4NDAsIDB4MDUsIDB4MTIsCisJMHgwOCwgMHg5RSwgMHg4MCwgMHgxRiwgMHgxMiwgMHgwNywgMHgzRSwgMHhFNSwKKy8qMTM3MCovMHg0MSwgMHhGMCwgMHgyMiwgMHhFNSwgMHgzQywgMHhDMywgMHg5NSwgMHgzOCwKKwkweDQwLCAweDFELCAweDg1LCAweDNDLCAweDM4LCAweEU1LCAweDNDLCAweDYwLAorLyoxMzgwKi8weDA1LCAweDg1LCAweDNELCAweDM5LCAweDgwLCAweDAzLCAweDg1LCAweDM5LAorCTB4MzksIDB4OEYsIDB4M0EsIDB4MTIsIDB4MDcsIDB4QTgsIDB4RTUsIDB4M0MsCisvKjEzOTAqLzB4MTIsIDB4MDcsIDB4NTMsIDB4RTUsIDB4M0QsIDB4RjAsIDB4MjIsIDB4MTIsCisJMHgwNywgMHg5RiwgMHhFNSwgMHgzOCwgMHgxMiwgMHgwNywgMHg1MywgMHhFNSwKKy8qMTNBMCovMHgzOSwgMHhGMCwgMHgyMiwgMHhFNSwgMHgwRCwgMHhGRSwgMHhFNSwgMHgwOCwKKwkweDhFLCAweDU0LCAweDQ0LCAweDA1LCAweEY1LCAweDU1LCAweDc1LCAweDE1LAorLyoxM0IwKi8weDBGLCAweEY1LCAweDgyLCAweDEyLCAweDBFLCAweDdBLCAweDEyLCAweDE3LAorCTB4QTMsIDB4MjAsIDB4MzEsIDB4MDUsIDB4NzUsIDB4MTUsIDB4MDMsIDB4ODAsCisvKjEzQzAqLzB4MDMsIDB4NzUsIDB4MTUsIDB4MEIsIDB4RTUsIDB4MEEsIDB4QzMsIDB4OTQsCisJMHgwMSwgMHg1MCwgMHgzOCwgMHgxMiwgMHgxNCwgMHgyMCwgMHgyMCwgMHgzMSwKKy8qMTNEMCovMHgwNiwgMHgwNSwgMHgxNSwgMHgwNSwgMHgxNSwgMHg4MCwgMHgwNCwgMHgxNSwKKwkweDE1LCAweDE1LCAweDE1LCAweEU1LCAweDBBLCAweEMzLCAweDk0LCAweDAxLAorLyoxM0UwKi8weDUwLCAweDIxLCAweDEyLCAweDE0LCAweDIwLCAweDIwLCAweDMxLCAweDA0LAorCTB4MDUsIDB4MTUsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MTUsIDB4RTUsIDB4MEEsCisvKjEzRjAqLzB4QzMsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MEUsIDB4MTIsIDB4MEUsIDB4NzcsCisJMHgxMiwgMHgxNywgMHhBMywgMHgyMCwgMHgzMSwgMHgwNSwgMHgwNSwgMHgxNSwKKy8qMTQwMCovMHgxMiwgMHgwRSwgMHg3NywgMHhFNSwgMHgxNSwgMHhCNCwgMHgwOCwgMHgwNCwKKwkweDdGLCAweDAxLCAweDgwLCAweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDE1LAorLyoxNDEwKi8weEI0LCAweDA3LCAweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLAorCTB4MDAsIDB4RUUsIDB4NEYsIDB4NjAsIDB4MDIsIDB4MDUsIDB4N0YsIDB4MjIsCisvKjE0MjAqLzB4ODUsIDB4NTUsIDB4ODIsIDB4ODUsIDB4NTQsIDB4ODMsIDB4RTUsIDB4MTUsCisJMHhGMCwgMHgxMiwgMHgxNywgMHhBMywgMHgyMiwgMHgxMiwgMHgwNywgMHgyQSwKKy8qMTQzMCovMHg3NSwgMHg4MywgMHhBRSwgMHg3NCwgMHhGRiwgMHgxMiwgMHgwNywgMHgyOSwKKwkweEUwLCAweDU0LCAweDFBLCAweEY1LCAweDM0LCAweEUwLCAweEM0LCAweDEzLAorLyoxNDQwKi8weDU0LCAweDA3LCAweEY1LCAweDM1LCAweDI0LCAweEZFLCAweDYwLCAweDI0LAorCTB4MjQsIDB4RkUsIDB4NjAsIDB4M0MsIDB4MjQsIDB4MDQsIDB4NzAsIDB4NjMsCisvKjE0NTAqLzB4NzUsIDB4MzEsIDB4MkQsIDB4RTUsIDB4MDgsIDB4RkQsIDB4NzQsIDB4QjYsCisJMHgxMiwgMHgwNywgMHg5MiwgMHg3NCwgMHhCQywgMHg5MCwgMHgwNywgMHgyMiwKKy8qMTQ2MCovMHgxMiwgMHgwNywgMHg5NSwgMHg3NCwgMHg5MCwgMHgxMiwgMHgwNywgMHhCMywKKwkweDc0LCAweDkyLCAweDgwLCAweDNDLCAweDc1LCAweDMxLCAweDNBLCAweEU1LAorLyoxNDcwKi8weDA4LCAweEZELCAweDc0LCAweEJBLCAweDEyLCAweDA3LCAweDkyLCAweDc0LAorCTB4QzAsIDB4OTAsIDB4MDcsIDB4MjIsIDB4MTIsIDB4MDcsIDB4QjYsIDB4NzQsCisvKjE0ODAqLzB4QzQsIDB4MTIsIDB4MDcsIDB4QjMsIDB4NzQsIDB4QzgsIDB4ODAsIDB4MjAsCisJMHg3NSwgMHgzMSwgMHgzNSwgMHhFNSwgMHgwOCwgMHhGRCwgMHg3NCwgMHhCOCwKKy8qMTQ5MCovMHgxMiwgMHgwNywgMHg5MiwgMHg3NCwgMHhCRSwgMHhGRiwgMHhFRCwgMHg0NCwKKwkweDA3LCAweDkwLCAweDA3LCAweDIyLCAweENGLCAweEYwLCAweEEzLCAweEVGLAorLyoxNEEwKi8weEYwLCAweDc0LCAweEMyLCAweDEyLCAweDA3LCAweEIzLCAweDc0LCAweEM2LAorCTB4RkYsIDB4RUQsIDB4NDQsIDB4MDcsIDB4QTMsIDB4Q0YsIDB4RjAsIDB4QTMsCisvKjE0QjAqLzB4RUYsIDB4RjAsIDB4MjIsIDB4NzUsIDB4MzQsIDB4MDEsIDB4MjIsIDB4OEUsCisJMHg1OCwgMHg4RiwgMHg1OSwgMHg4QywgMHg1QSwgMHg4RCwgMHg1QiwgMHg4QSwKKy8qMTRDMCovMHg1QywgMHg4QiwgMHg1RCwgMHg3NSwgMHg1RSwgMHgwMSwgMHhFNCwgMHhGNSwKKwkweDVGLCAweDEyLCAweDFFLCAweEE1LCAweDg1LCAweDU5LCAweDVFLCAweEQzLAorLyoxNEQwKi8weEU1LCAweDVFLCAweDk1LCAweDVCLCAweEU1LCAweDVBLCAweDEyLCAweDA3LAorCTB4NkIsIDB4NTAsIDB4NTcsIDB4RTUsIDB4NUQsIDB4NDUsIDB4NUMsIDB4NzAsCisvKjE0RTAqLzB4MzAsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4OTIsIDB4RTUsCisJMHg1RSwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDNiwgMHhFNSwKKy8qMTRGMCovMHg1RSwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDOCwgMHhFNSwKKwkweDVFLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweDkwLCAweEU1LAorLyoxNTAwKi8weDVFLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMyLCAweEU1LAorCTB4NUUsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzQsIDB4ODAsCisvKjE1MTAqLzB4MDMsIDB4MTIsIDB4MDcsIDB4MzIsIDB4RTUsIDB4NUUsIDB4RjAsIDB4QUYsCisJMHg1RiwgMHg3RSwgMHgwMCwgMHhBRCwgMHg1RCwgMHhBQywgMHg1QywgMHgxMiwKKy8qMTUyMCovMHgwNCwgMHg0NCwgMHhBRiwgMHg1RSwgMHg3RSwgMHgwMCwgMHhBRCwgMHg1RCwKKwkweEFDLCAweDVDLCAweDEyLCAweDBCLCAweEQxLCAweDA1LCAweDVFLCAweDAyLAorLyoxNTMwKi8weDE0LCAweENGLCAweEFCLCAweDVELCAweEFBLCAweDVDLCAweEFELCAweDVCLAorCTB4QUMsIDB4NUEsIDB4QUYsIDB4NTksIDB4QUUsIDB4NTgsIDB4MDIsIDB4MUIsCisvKjE1NDAqLzB4RkIsIDB4OEMsIDB4NUMsIDB4OEQsIDB4NUQsIDB4OEEsIDB4NUUsIDB4OEIsCisJMHg1RiwgMHg3NSwgMHg2MCwgMHgwMSwgMHhFNCwgMHhGNSwgMHg2MSwgMHhGNSwKKy8qMTU1MCovMHg2MiwgMHhGNSwgMHg2MywgMHgxMiwgMHgxRSwgMHhBNSwgMHg4RiwgMHg2MCwKKwkweEQzLCAweEU1LCAweDYwLCAweDk1LCAweDVELCAweEU1LCAweDVDLCAweDEyLAorLyoxNTYwKi8weDA3LCAweDZCLCAweDUwLCAweDYxLCAweEU1LCAweDVGLCAweDQ1LCAweDVFLAorCTB4NzAsIDB4MjcsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4QjYsCisvKjE1NzAqLzB4RTUsIDB4NjAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QjgsCisJMHhFNSwgMHg2MCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCQSwKKy8qMTU4MCovMHhFNSwgMHg2MCwgMHhGMCwgMHhBRiwgMHg2MSwgMHg3RSwgMHgwMCwgMHhFNSwKKwkweDYyLCAweDEyLCAweDA4LCAweDdBLCAweDEyLCAweDBBLCAweEZGLCAweDgwLAorLyoxNTkwKi8weDE5LCAweDkwLCAweDA3LCAweDI0LCAweDEyLCAweDA3LCAweDM1LCAweEU1LAorCTB4NjAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4OEUsIDB4RTQsCisvKjE1QTAqLzB4MTIsIDB4MDcsIDB4MjksIDB4NzQsIDB4MDEsIDB4MTIsIDB4MDcsIDB4MjksCisJMHhFNCwgMHhGMCwgMHhBRiwgMHg2MywgMHg3RSwgMHgwMCwgMHhBRCwgMHg1RiwKKy8qMTVCMCovMHhBQywgMHg1RSwgMHgxMiwgMHgwNCwgMHg0NCwgMHhBRiwgMHg2MCwgMHg3RSwKKwkweDAwLCAweEFELCAweDVGLCAweEFDLCAweDVFLCAweDEyLCAweDEyLCAweDhCLAorLyoxNUMwKi8weDA1LCAweDYwLCAweDAyLCAweDE1LCAweDU4LCAweDIyLCAweDkwLCAweDExLAorCTB4NEQsIDB4RTQsIDB4OTMsIDB4OTAsIDB4MDcsIDB4MkUsIDB4RjAsIDB4MTIsCisvKjE1RDAqLzB4MDgsIDB4MUYsIDB4NzUsIDB4ODMsIDB4QUUsIDB4RTAsIDB4NTQsIDB4MUEsCisJMHhGNSwgMHgzNCwgMHg3MCwgMHg2NywgMHhFRiwgMHg0NCwgMHgwNywgMHhGNSwKKy8qMTVFMCovMHg4MiwgMHg3NSwgMHg4MywgMHhDRSwgMHhFMCwgMHhGRiwgMHgxMywgMHgxMywKKwkweDEzLCAweDU0LCAweDA3LCAweEY1LCAweDM2LCAweDU0LCAweDBGLCAweEQzLAorLyoxNUYwKi8weDk0LCAweDAwLCAweDQwLCAweDA2LCAweDEyLCAweDE0LCAweDJELCAweDEyLAorCTB4MUIsIDB4QTksIDB4RTUsIDB4MzYsIDB4NTQsIDB4MEYsIDB4MjQsIDB4RkUsCisvKjE2MDAqLzB4NjAsIDB4MEMsIDB4MTQsIDB4NjAsIDB4MEMsIDB4MTQsIDB4NjAsIDB4MTksCisJMHgyNCwgMHgwMywgMHg3MCwgMHgzNywgMHg4MCwgMHgxMCwgMHgwMiwgMHgxRSwKKy8qMTYxMCovMHg5MSwgMHgxMiwgMHgxRSwgMHg5MSwgMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwKKwkweDgzLCAweENFLCAweEUwLCAweDU0LCAweEVGLCAweEYwLCAweDAyLCAweDFELAorLyoxNjIwKi8weEFFLCAweDEyLCAweDEwLCAweDE0LCAweEU0LCAweEY1LCAweDU1LCAweDEyLAorCTB4MUQsIDB4ODUsIDB4MDUsIDB4NTUsIDB4RTUsIDB4NTUsIDB4QzMsIDB4OTQsCisvKjE2MzAqLzB4MDUsIDB4NDAsIDB4RjQsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsCisJMHhDRSwgMHhFMCwgMHg1NCwgMHhDNywgMHgxMiwgMHgwNywgMHgyOSwgMHhFMCwKKy8qMTY0MCovMHg0NCwgMHgwOCwgMHhGMCwgMHgyMiwgMHhFNCwgMHhGNSwgMHg1OCwgMHhGNSwKKwkweDU5LCAweEFGLCAweDA4LCAweEVGLCAweDQ0LCAweDA3LCAweEY1LCAweDgyLAorLyoxNjUwKi8weDc1LCAweDgzLCAweEQwLCAweEUwLCAweEZELCAweEM0LCAweDU0LCAweDBGLAorCTB4RjUsIDB4NUEsIDB4RUYsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsIDB4NzUsCisvKjE2NjAqLzB4ODMsIDB4ODAsIDB4NzQsIDB4MDEsIDB4RjAsIDB4MTIsIDB4MDgsIDB4MjEsCisJMHg3NSwgMHg4MywgMHg4MiwgMHhFNSwgMHg0NSwgMHhGMCwgMHhFRiwgMHg0NCwKKy8qMTY3MCovMHgwNywgMHhGNSwgMHg4MiwgMHg3NSwgMHg4MywgMHg4QSwgMHg3NCwgMHhGRiwKKwkweEYwLCAweDEyLCAweDFBLCAweDRELCAweDEyLCAweDA3LCAweDJBLCAweDc1LAorLyoxNjgwKi8weDgzLCAweEJDLCAweEUwLCAweDU0LCAweEVGLCAweDEyLCAweDA3LCAweDI5LAorCTB4NzUsIDB4ODMsIDB4QkUsIDB4RTAsIDB4NTQsIDB4RUYsIDB4MTIsIDB4MDcsCisvKjE2OTAqLzB4MjksIDB4NzUsIDB4ODMsIDB4QzAsIDB4RTAsIDB4NTQsIDB4RUYsIDB4MTIsCisJMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCQywgMHhFMCwgMHg0NCwgMHgxMCwKKy8qMTZBMCovMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhCRSwgMHhFMCwgMHg0NCwKKwkweDEwLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEMwLCAweEUwLAorLyoxNkIwKi8weDQ0LCAweDEwLCAweEYwLCAweEFGLCAweDU4LCAweEU1LCAweDU5LCAweDEyLAorCTB4MDgsIDB4NzgsIDB4MDIsIDB4MEEsIDB4RkYsIDB4RTQsIDB4RjUsIDB4NTgsCisvKjE2QzAqLzB4N0QsIDB4MDEsIDB4RjUsIDB4NTksIDB4QUYsIDB4MzUsIDB4RkUsIDB4RkMsCisJMHgxMiwgMHgwOSwgMHgxNSwgMHgxMiwgMHgwNywgMHgyQSwgMHg3NSwgMHg4MywKKy8qMTZEMCovMHhCNiwgMHg3NCwgMHgxMCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywKKwkweEI4LCAweDc0LCAweDEwLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLAorLyoxNkUwKi8weEJBLCAweDc0LCAweDEwLCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLAorCTB4QkMsIDB4NzQsIDB4MTAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsCisvKjE2RjAqLzB4QkUsIDB4NzQsIDB4MTAsIDB4MTIsIDB4MDcsIDB4MjksIDB4NzUsIDB4ODMsCisJMHhDMCwgMHg3NCwgMHgxMCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywKKy8qMTcwMCovMHg5MCwgMHhFNCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NSwgMHg4MywgMHhDMiwKKwkweEU0LCAweDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweEM0LCAweEU0LAorLyoxNzEwKi8weDEyLCAweDA3LCAweDI5LCAweDc1LCAweDgzLCAweDkyLCAweEU0LCAweDEyLAorCTB4MDcsIDB4MjksIDB4NzUsIDB4ODMsIDB4QzYsIDB4RTQsIDB4MTIsIDB4MDcsCisvKjE3MjAqLzB4MjksIDB4NzUsIDB4ODMsIDB4QzgsIDB4RTQsIDB4RjAsIDB4QUYsIDB4NTgsCisJMHhGRSwgMHhFNSwgMHg1OSwgMHgxMiwgMHgwOCwgMHg3QSwgMHgwMiwgMHgwQSwKKy8qMTczMCovMHhGRiwgMHhFNSwgMHhFMiwgMHgzMCwgMHhFNCwgMHg2QywgMHhFNSwgMHhFNywKKwkweDU0LCAweEMwLCAweDY0LCAweDQwLCAweDcwLCAweDY0LCAweEU1LCAweDA5LAorLyoxNzQwKi8weEM0LCAweDU0LCAweDMwLCAweEZFLCAweEU1LCAweDA4LCAweDI1LCAweEUwLAorCTB4MjUsIDB4RTAsIDB4NTQsIDB4QzAsIDB4NEUsIDB4RkUsIDB4RUYsIDB4NTQsCisvKjE3NTAqLzB4M0YsIDB4NEUsIDB4RkQsIDB4RTUsIDB4MkIsIDB4QUUsIDB4MkEsIDB4NzgsCisJMHgwMiwgMHhDMywgMHgzMywgMHhDRSwgMHgzMywgMHhDRSwgMHhEOCwgMHhGOSwKKy8qMTc2MCovMHhGNSwgMHg4MiwgMHg4RSwgMHg4MywgMHhFRCwgMHhGMCwgMHhFNSwgMHgyQiwKKwkweEFFLCAweDJBLCAweDc4LCAweDAyLCAweEMzLCAweDMzLCAweENFLCAweDMzLAorLyoxNzcwKi8weENFLCAweEQ4LCAweEY5LCAweEZGLCAweEY1LCAweDgyLCAweDhFLCAweDgzLAorCTB4QTMsIDB4RTUsIDB4RkUsIDB4RjAsIDB4OEYsIDB4ODIsIDB4OEUsIDB4ODMsCisvKjE3ODAqLzB4QTMsIDB4QTMsIDB4RTUsIDB4RkQsIDB4RjAsIDB4OEYsIDB4ODIsIDB4OEUsCisJMHg4MywgMHhBMywgMHhBMywgMHhBMywgMHhFNSwgMHhGQywgMHhGMCwgMHhDMywKKy8qMTc5MCovMHhFNSwgMHgyQiwgMHg5NCwgMHhGQSwgMHhFNSwgMHgyQSwgMHg5NCwgMHgwMCwKKwkweDUwLCAweDA4LCAweDA1LCAweDJCLCAweEU1LCAweDJCLCAweDcwLCAweDAyLAorLyoxN0EwKi8weDA1LCAweDJBLCAweDIyLCAweEU0LCAweEZGLCAweEU0LCAweEY1LCAweDU4LAorCTB4RjUsIDB4NTYsIDB4RjUsIDB4NTcsIDB4NzQsIDB4ODIsIDB4RkMsIDB4MTIsCisvKjE3QjAqLzB4MEUsIDB4MDQsIDB4OEMsIDB4ODMsIDB4RTAsIDB4RjUsIDB4MTAsIDB4NTQsCisJMHg3RiwgMHhGMCwgMHhFNSwgMHgxMCwgMHg0NCwgMHg4MCwgMHgxMiwgMHgwRSwKKy8qMTdDMCovMHg5OCwgMHhFRCwgMHhGMCwgMHg3RSwgMHgwQSwgMHgxMiwgMHgwRSwgMHgwNCwKKwkweDc1LCAweDgzLCAweEEwLCAweEUwLCAweDIwLCAweEUwLCAweDI2LCAweERFLAorLyoxN0QwKi8weEY0LCAweDA1LCAweDU3LCAweEU1LCAweDU3LCAweDcwLCAweDAyLCAweDA1LAorCTB4NTYsIDB4RTUsIDB4MTQsIDB4MjQsIDB4MDEsIDB4RkQsIDB4RTQsIDB4MzMsCisvKjE3RTAqLzB4RkMsIDB4RDMsIDB4RTUsIDB4NTcsIDB4OUQsIDB4RTUsIDB4NTYsIDB4OUMsCisJMHg0MCwgMHhEOSwgMHhFNSwgMHgwQSwgMHg5NCwgMHgyMCwgMHg1MCwgMHgwMiwKKy8qMTdGMCovMHgwNSwgMHgwQSwgMHg0MywgMHhFMSwgMHgwOCwgMHhDMiwgMHgzMSwgMHgxMiwKKwkweDBFLCAweDA0LCAweDc1LCAweDgzLCAweEE2LCAweEUwLCAweDU1LCAweDEyLAorLyoxODAwKi8weDY1LCAweDEyLCAweDcwLCAweDAzLCAweEQyLCAweDMxLCAweDIyLCAweEMyLAorCTB4MzEsIDB4MjIsIDB4OTAsIDB4MDcsIDB4MjYsIDB4RTAsIDB4RkEsIDB4QTMsCisvKjE4MTAqLzB4RTAsIDB4RjUsIDB4ODIsIDB4OEEsIDB4ODMsIDB4RTAsIDB4RjUsIDB4NDEsCisJMHhFNSwgMHgzOSwgMHhDMywgMHg5NSwgMHg0MSwgMHg0MCwgMHgyNiwgMHhFNSwKKy8qMTgyMCovMHgzOSwgMHg5NSwgMHg0MSwgMHhDMywgMHg5RiwgMHhFRSwgMHgxMiwgMHgwNywKKwkweDZCLCAweDQwLCAweDA0LCAweDdDLCAweDAxLCAweDgwLCAweDAyLCAweDdDLAorLyoxODMwKi8weDAwLCAweEU1LCAweDQxLCAweDY0LCAweDNGLCAweDYwLCAweDA0LCAweDdCLAorCTB4MDEsIDB4ODAsIDB4MDIsIDB4N0IsIDB4MDAsIDB4RUMsIDB4NUIsIDB4NjAsCisvKjE4NDAqLzB4MjksIDB4MDUsIDB4NDEsIDB4ODAsIDB4MjgsIDB4QzMsIDB4RTUsIDB4NDEsCisJMHg5NSwgMHgzOSwgMHhDMywgMHg5RiwgMHhFRSwgMHgxMiwgMHgwNywgMHg2QiwKKy8qMTg1MCovMHg0MCwgMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwKKwkweEU1LCAweDQxLCAweDYwLCAweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLAorLyoxODYwKi8weDdFLCAweDAwLCAweEVGLCAweDVFLCAweDYwLCAweDA0LCAweDE1LCAweDQxLAorCTB4ODAsIDB4MDMsIDB4ODUsIDB4MzksIDB4NDEsIDB4ODUsIDB4M0EsIDB4NDAsCisvKjE4NzAqLzB4MjIsIDB4RTUsIDB4RTIsIDB4MzAsIDB4RTQsIDB4NjAsIDB4RTUsIDB4RTEsCisJMHgzMCwgMHhFMiwgMHg1QiwgMHhFNSwgMHgwOSwgMHg3MCwgMHgwNCwgMHg3RiwKKy8qMTg4MCovMHgwMSwgMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHhFNSwgMHgwOCwgMHg3MCwKKwkweDA0LCAweDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLAorLyoxODkwKi8weDVGLCAweDYwLCAweDQzLCAweDUzLCAweEY5LCAweEY4LCAweEU1LCAweEUyLAorCTB4MzAsIDB4RTQsIDB4M0IsIDB4RTUsIDB4RTEsIDB4MzAsIDB4RTIsIDB4MkUsCisvKjE4QTAqLzB4NDMsIDB4RkEsIDB4MDIsIDB4NTMsIDB4RkEsIDB4RkIsIDB4RTQsIDB4RjUsCisJMHgxMCwgMHg5MCwgMHg5NCwgMHg3MCwgMHhFNSwgMHgxMCwgMHhGMCwgMHhFNSwKKy8qMThCMCovMHhFMSwgMHgzMCwgMHhFMiwgMHhFNywgMHg5MCwgMHg5NCwgMHg3MCwgMHhFMCwKKwkweDY1LCAweDEwLCAweDYwLCAweDAzLCAweDQzLCAweEZBLCAweDA0LCAweDA1LAorLyoxOEMwKi8weDEwLCAweDkwLCAweDk0LCAweDcwLCAweEU1LCAweDEwLCAweEYwLCAweDcwLAorCTB4RTYsIDB4MTIsIDB4MDAsIDB4MDYsIDB4ODAsIDB4RTEsIDB4NTMsIDB4RkEsCisvKjE4RDAqLzB4RkQsIDB4NTMsIDB4RkEsIDB4RkIsIDB4ODAsIDB4QzAsIDB4MjIsIDB4OEYsCisJMHg1NCwgMHgxMiwgMHgwMCwgMHgwNiwgMHhFNSwgMHhFMSwgMHgzMCwgMHhFMCwKKy8qMThFMCovMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RiwgMHgwMCwgMHhFNSwKKwkweDdFLCAweEQzLCAweDk0LCAweDA1LCAweDQwLCAweDA0LCAweDdFLCAweDAxLAorLyoxOEYwKi8weDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLCAweDRGLCAweDYwLCAweDNELAorCTB4ODUsIDB4NTQsIDB4MTEsIDB4RTUsIDB4RTIsIDB4MjAsIDB4RTEsIDB4MzIsCisvKjE5MDAqLzB4NzQsIDB4Q0UsIDB4MTIsIDB4MUEsIDB4MDUsIDB4MzAsIDB4RTcsIDB4MDQsCisJMHg3RCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3RCwgMHgwMCwgMHg4RiwgMHg4MiwKKy8qMTkxMCovMHg4RSwgMHg4MywgMHhFMCwgMHgzMCwgMHhFNiwgMHgwNCwgMHg3RiwgMHgwMSwKKwkweDgwLCAweDAyLCAweDdGLCAweDAwLCAweEVGLCAweDVELCAweDcwLCAweDE1LAorLyoxOTIwKi8weDEyLCAweDE1LCAweEM2LCAweDc0LCAweENFLCAweDEyLCAweDFBLCAweDA1LAorCTB4MzAsIDB4RTYsIDB4MDcsIDB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4NDMsCisvKjE5MzAqLzB4RjksIDB4ODAsIDB4MTIsIDB4MTgsIDB4NzEsIDB4MjIsIDB4MTIsIDB4MEUsCisJMHg0NCwgMHhFNSwgMHgxNiwgMHgyNSwgMHhFMCwgMHgyNSwgMHhFMCwgMHgyNCwKKy8qMTk0MCovMHhCMCwgMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgxQSwgMHhGNSwgMHg4MywKKwkweEU0LCAweDkzLCAweEY1LCAweDBGLCAweEU1LCAweDE2LCAweDI1LCAweEUwLAorLyoxOTUwKi8weDI1LCAweEUwLCAweDI0LCAweEIxLCAweEY1LCAweDgyLCAweEU0LCAweDM0LAorCTB4MUEsIDB4RjUsIDB4ODMsIDB4RTQsIDB4OTMsIDB4RjUsIDB4MEUsIDB4MTIsCisvKjE5NjAqLzB4MEUsIDB4NjUsIDB4RjUsIDB4MTAsIDB4RTUsIDB4MEYsIDB4NTQsIDB4RjAsCisJMHgxMiwgMHgwRSwgMHgxNywgMHg3NSwgMHg4MywgMHg4QywgMHhFRiwgMHhGMCwKKy8qMTk3MCovMHhFNSwgMHgwRiwgMHgzMCwgMHhFMCwgMHgwQywgMHgxMiwgMHgwRSwgMHgwNCwKKwkweDc1LCAweDgzLCAweDg2LCAweEUwLCAweDQ0LCAweDQwLCAweEYwLCAweDgwLAorLyoxOTgwKi8weDBBLCAweDEyLCAweDBFLCAweDA0LCAweDc1LCAweDgzLCAweDg2LCAweEUwLAorCTB4NTQsIDB4QkYsIDB4RjAsIDB4MTIsIDB4MEUsIDB4OTEsIDB4NzUsIDB4ODMsCisvKjE5OTAqLzB4ODIsIDB4RTUsIDB4MEUsIDB4RjAsIDB4MjIsIDB4N0YsIDB4MDUsIDB4MTIsCisJMHgxNywgMHgzMSwgMHgxMiwgMHgwRSwgMHgwNCwgMHgxMiwgMHgwRSwgMHgzMywKKy8qMTlBMCovMHg3NCwgMHgwMiwgMHhGMCwgMHg3NCwgMHg4RSwgMHhGRSwgMHgxMiwgMHgwRSwKKwkweDA0LCAweDEyLCAweDBFLCAweDBCLCAweEVGLCAweEYwLCAweDc1LCAweDE1LAorLyoxOUIwKi8weDcwLCAweDEyLCAweDBGLCAweEY3LCAweDIwLCAweDM0LCAweDA1LCAweDc1LAorCTB4MTUsIDB4MTAsIDB4ODAsIDB4MDMsIDB4NzUsIDB4MTUsIDB4NTAsIDB4MTIsCisvKjE5QzAqLzB4MEYsIDB4RjcsIDB4MjAsIDB4MzQsIDB4MDQsIDB4NzQsIDB4MTAsIDB4ODAsCisJMHgwMiwgMHg3NCwgMHhGMCwgMHgyNSwgMHgxNSwgMHhGNSwgMHgxNSwgMHgxMiwKKy8qMTlEMCovMHgwRSwgMHgyMSwgMHhFRiwgMHhGMCwgMHgxMiwgMHgxMCwgMHg5MSwgMHgyMCwKKwkweDM0LCAweDE3LCAweEU1LCAweDE1LCAweDY0LCAweDMwLCAweDYwLCAweDBDLAorLyoxOUUwKi8weDc0LCAweDEwLCAweDI1LCAweDE1LCAweEY1LCAweDE1LCAweEI0LCAweDgwLAorCTB4MDMsIDB4RTQsIDB4RjUsIDB4MTUsIDB4MTIsIDB4MEUsIDB4MjEsIDB4RUYsCisvKjE5RjAqLzB4RjAsIDB4MjIsIDB4RjAsIDB4RTUsIDB4MEIsIDB4MjUsIDB4RTAsIDB4MjUsCisJMHhFMCwgMHgyNCwgMHg4MiwgMHhGNSwgMHg4MiwgMHhFNCwgMHgzNCwgMHgwNywKKy8qMUEwMCovMHhGNSwgMHg4MywgMHgyMiwgMHg3NCwgMHg4OCwgMHhGRSwgMHhFNSwgMHgwOCwKKwkweDQ0LCAweDA3LCAweEZGLCAweEY1LCAweDgyLCAweDhFLCAweDgzLCAweEUwLAorLyoxQTEwKi8weDIyLCAweEYwLCAweEU1LCAweDA4LCAweDQ0LCAweDA3LCAweEY1LCAweDgyLAorCTB4MjIsIDB4RjAsIDB4RTAsIDB4NTQsIDB4QzAsIDB4OEYsIDB4ODIsIDB4OEUsCisvKjFBMjAqLzB4ODMsIDB4RjAsIDB4MjIsIDB4RUYsIDB4NDQsIDB4MDcsIDB4RjUsIDB4ODIsCisJMHg3NSwgMHg4MywgMHg4NiwgMHhFMCwgMHg1NCwgMHgxMCwgMHhEMywgMHg5NCwKKy8qMUEzMCovMHgwMCwgMHgyMiwgMHhGMCwgMHg5MCwgMHgwNywgMHgxNSwgMHhFMCwgMHgwNCwKKwkweEYwLCAweDIyLCAweDQ0LCAweDA2LCAweEY1LCAweDgyLCAweDc1LCAweDgzLAorLyoxQTQwKi8weDlFLCAweEUwLCAweDIyLCAweEZFLCAweEVGLCAweDQ0LCAweDA3LCAweEY1LAorCTB4ODIsIDB4OEUsIDB4ODMsIDB4RTAsIDB4MjIsIDB4RTQsIDB4OTAsIDB4MDcsCisvKjFBNTAqLzB4MkEsIDB4RjAsIDB4QTMsIDB4RjAsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsCisJMHg4MywgMHg4MiwgMHhFMCwgMHg1NCwgMHg3RiwgMHgxMiwgMHgwNywgMHgyOSwKKy8qMUE2MCovMHhFMCwgMHg0NCwgMHg4MCwgMHhGMCwgMHgxMiwgMHgxMCwgMHhGQywgMHgxMiwKKwkweDA4LCAweDFGLCAweDc1LCAweDgzLCAweEEwLCAweEUwLCAweDIwLCAweEUwLAorLyoxQTcwKi8weDFBLCAweDkwLCAweDA3LCAweDJCLCAweEUwLCAweDA0LCAweEYwLCAweDcwLAorCTB4MDYsIDB4OTAsIDB4MDcsIDB4MkEsIDB4RTAsIDB4MDQsIDB4RjAsIDB4OTAsCisvKjFBODAqLzB4MDcsIDB4MkEsIDB4RTAsIDB4QjQsIDB4MTAsIDB4RTEsIDB4QTMsIDB4RTAsCisJMHhCNCwgMHgwMCwgMHhEQywgMHhFRSwgMHg0NCwgMHhBNiwgMHhGQywgMHhFRiwKKy8qMUE5MCovMHg0NCwgMHgwNywgMHhGNSwgMHg4MiwgMHg4QywgMHg4MywgMHhFMCwgMHhGNSwKKwkweDMyLCAweEVFLCAweDQ0LCAweEE4LCAweEZFLCAweEVGLCAweDQ0LCAweDA3LAorLyoxQUEwKi8weEY1LCAweDgyLCAweDhFLCAweDgzLCAweEUwLCAweEY1LCAweDMzLCAweDIyLAorCTB4MDEsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDAsIDB4OTAsCisvKjFBQjAqLzB4MDAsIDB4MjAsIDB4MEYsIDB4OTIsIDB4MDAsIDB4MjEsIDB4MEYsIDB4OTQsCisJMHgwMCwgMHgyMiwgMHgwRiwgMHg5NiwgMHgwMCwgMHgyMywgMHgwRiwgMHg5OCwKKy8qMUFDMCovMHgwMCwgMHgyNCwgMHgwRiwgMHg5QSwgMHgwMCwgMHgyNSwgMHgwRiwgMHg5QywKKwkweDAwLCAweDI2LCAweDBGLCAweDlFLCAweDAwLCAweDI3LCAweDBGLCAweEEwLAorLyoxQUQwKi8weDAxLCAweDIwLCAweDAxLCAweEEyLCAweDAxLCAweDIxLCAweDAxLCAweEE0LAorCTB4MDEsIDB4MjIsIDB4MDEsIDB4QTYsIDB4MDEsIDB4MjMsIDB4MDEsIDB4QTgsCisvKjFBRTAqLzB4MDEsIDB4MjQsIDB4MDEsIDB4QUEsIDB4MDEsIDB4MjUsIDB4MDEsIDB4QUMsCisJMHgwMSwgMHgyNiwgMHgwMSwgMHhBRSwgMHgwMSwgMHgyNywgMHgwMSwgMHhCMCwKKy8qMUFGMCovMHgwMSwgMHgyOCwgMHgwMSwgMHhCNCwgMHgwMCwgMHgyOCwgMHgwRiwgMHhCNiwKKwkweDQwLCAweDI4LCAweDBGLCAweEI4LCAweDYxLCAweDI4LCAweDAxLCAweENCLAorLyoxQjAwKi8weEVGLCAweENCLCAweENBLCAweEVFLCAweENBLCAweDdGLCAweDAxLCAweEU0LAorCTB4RkQsIDB4RUIsIDB4NEEsIDB4NzAsIDB4MjQsIDB4RTUsIDB4MDgsIDB4RjUsCisvKjFCMTAqLzB4ODIsIDB4NzQsIDB4QjYsIDB4MTIsIDB4MDgsIDB4MjksIDB4RTUsIDB4MDgsCisJMHhGNSwgMHg4MiwgMHg3NCwgMHhCOCwgMHgxMiwgMHgwOCwgMHgyOSwgMHhFNSwKKy8qMUIyMCovMHgwOCwgMHhGNSwgMHg4MiwgMHg3NCwgMHhCQSwgMHgxMiwgMHgwOCwgMHgyOSwKKwkweDdFLCAweDAwLCAweDdDLCAweDAwLCAweDEyLCAweDBBLCAweEZGLCAweDgwLAorLyoxQjMwKi8weDEyLCAweDkwLCAweDA3LCAweDI2LCAweDEyLCAweDA3LCAweDM1LCAweEU1LAorCTB4NDEsIDB4RjAsIDB4OTAsIDB4MDcsIDB4MjQsIDB4MTIsIDB4MDcsIDB4MzUsCisvKjFCNDAqLzB4RTUsIDB4NDAsIDB4RjAsIDB4MTIsIDB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsCisJMHg4RSwgMHhFNCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NCwgMHgwMSwgMHgxMiwKKy8qMUI1MCovMHgwNywgMHgyOSwgMHhFNCwgMHhGMCwgMHgyMiwgMHhFNCwgMHhGNSwgMHgyNiwKKwkweEY1LCAweDI3LCAweDUzLCAweEUxLCAweEZFLCAweEY1LCAweDJBLCAweDc1LAorLyoxQjYwKi8weDJCLCAweDAxLCAweEY1LCAweDA4LCAweDdGLCAweDAxLCAweDEyLCAweDE3LAorCTB4MzEsIDB4MzAsIDB4MzAsIDB4MUMsIDB4OTAsIDB4MUEsIDB4QTksIDB4RTQsCisvKjFCNzAqLzB4OTMsIDB4RjUsIDB4MTAsIDB4OTAsIDB4MUYsIDB4RjksIDB4RTQsIDB4OTMsCisJMHhGNSwgMHgxMCwgMHg5MCwgMHgwMCwgMHg0MSwgMHhFNCwgMHg5MywgMHhGNSwKKy8qMUI4MCovMHgxMCwgMHg5MCwgMHgxRSwgMHhDQSwgMHhFNCwgMHg5MywgMHhGNSwgMHgxMCwKKwkweDdGLCAweDAyLCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDBGLCAweDU0LAorLyoxQjkwKi8weDdGLCAweDAzLCAweDEyLCAweDE3LCAweDMxLCAweDEyLCAweDAwLCAweDA2LAorCTB4RTUsIDB4RTIsIDB4MzAsIDB4RTcsIDB4MDksIDB4MTIsIDB4MTAsIDB4MDAsCisvKjFCQTAqLzB4MzAsIDB4MzAsIDB4MDMsIDB4MTIsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MDAsCisJMHg0NywgMHgxMiwgMHgwOCwgMHgxRiwgMHg3NSwgMHg4MywgMHhEMCwgMHhFMCwKKy8qMUJCMCovMHhDNCwgMHg1NCwgMHgwRiwgMHhGRCwgMHg3NSwgMHg0MywgMHgwMSwgMHg3NSwKKwkweDQ0LCAweEZGLCAweDEyLCAweDA4LCAweEFBLCAweDc0LCAweDA0LCAweEYwLAorLyoxQkMwKi8weDc1LCAweDNCLCAweDAxLCAweEVELCAweDE0LCAweDYwLCAweDBDLCAweDE0LAorCTB4NjAsIDB4MEIsIDB4MTQsIDB4NjAsIDB4MEYsIDB4MjQsIDB4MDMsIDB4NzAsCisvKjFCRDAqLzB4MEIsIDB4ODAsIDB4MDksIDB4ODAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4QTcsCisJMHgwNCwgMHhGMCwgMHg4MCwgMHgwNiwgMHgxMiwgMHgwOCwgMHhBNywgMHg3NCwKKy8qMUJFMCovMHgwNCwgMHhGMCwgMHhFRSwgMHg0NCwgMHg4MiwgMHhGRSwgMHhFRiwgMHg0NCwKKwkweDA3LCAweEY1LCAweDgyLCAweDhFLCAweDgzLCAweEU1LCAweDQ1LCAweDEyLAorLyoxQkYwKi8weDA4LCAweEJFLCAweDc1LCAweDgzLCAweDgyLCAweEU1LCAweDMxLCAweEYwLAorCTB4MDIsIDB4MTEsIDB4NEMsIDB4OEUsIDB4NjAsIDB4OEYsIDB4NjEsIDB4MTIsCisvKjFDMDAqLzB4MUUsIDB4QTUsIDB4RTQsIDB4RkYsIDB4Q0UsIDB4RUQsIDB4Q0UsIDB4RUUsCisJMHhEMywgMHg5NSwgMHg2MSwgMHhFNSwgMHg2MCwgMHgxMiwgMHgwNywgMHg2QiwKKy8qMUMxMCovMHg0MCwgMHgzOSwgMHg3NCwgMHgyMCwgMHgyRSwgMHhGNSwgMHg4MiwgMHhFNCwKKwkweDM0LCAweDAzLCAweEY1LCAweDgzLCAweEUwLCAweDcwLCAweDAzLCAweEZGLAorLyoxQzIwKi8weDgwLCAweDI2LCAweDEyLCAweDA4LCAweEUyLCAweEZELCAweEMzLCAweDlGLAorCTB4NDAsIDB4MUUsIDB4Q0YsIDB4RUQsIDB4Q0YsIDB4RUIsIDB4NEEsIDB4NzAsCisvKjFDMzAqLzB4MEIsIDB4OEQsIDB4NDIsIDB4MTIsIDB4MDgsIDB4RUUsIDB4RjUsIDB4NDEsCisJMHg4RSwgMHg0MCwgMHg4MCwgMHgwQywgMHgxMiwgMHgwOCwgMHhFMiwgMHhGNSwKKy8qMUM0MCovMHgzOCwgMHgxMiwgMHgwOCwgMHhFRSwgMHhGNSwgMHgzOSwgMHg4RSwgMHgzQSwKKwkweDFFLCAweDgwLCAweEJDLCAweDIyLCAweDc1LCAweDU4LCAweDAxLCAweEU1LAorLyoxQzUwKi8weDM1LCAweDcwLCAweDBDLCAweDEyLCAweDA3LCAweENDLCAweEUwLCAweEY1LAorCTB4NEEsIDB4MTIsIDB4MDcsIDB4RDgsIDB4RTAsIDB4RjUsIDB4NEMsIDB4RTUsCisvKjFDNjAqLzB4MzUsIDB4QjQsIDB4MDQsIDB4MEMsIDB4MTIsIDB4MDcsIDB4RTQsIDB4RTAsCisJMHhGNSwgMHg0QSwgMHgxMiwgMHgwNywgMHhGMCwgMHhFMCwgMHhGNSwgMHg0QywKKy8qMUM3MCovMHhFNSwgMHgzNSwgMHhCNCwgMHgwMSwgMHgwNCwgMHg3RiwgMHgwMSwgMHg4MCwKKwkweDAyLCAweDdGLCAweDAwLCAweEU1LCAweDM1LCAweEI0LCAweDAyLCAweDA0LAorLyoxQzgwKi8weDdFLCAweDAxLCAweDgwLCAweDAyLCAweDdFLCAweDAwLCAweEVFLCAweDRGLAorCTB4NjAsIDB4MEMsIDB4MTIsIDB4MDcsIDB4RkMsIDB4RTAsIDB4RjUsIDB4NEEsCisvKjFDOTAqLzB4MTIsIDB4MDgsIDB4MDgsIDB4RTAsIDB4RjUsIDB4NEMsIDB4ODUsIDB4NDEsCisJMHg0OSwgMHg4NSwgMHg0MCwgMHg0QiwgMHgyMiwgMHg3NSwgMHg1QiwgMHgwMSwKKy8qMUNBMCovMHg5MCwgMHgwNywgMHgyNCwgMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHg1NCwKKwkweDFGLCAweEZGLCAweEQzLCAweDk0LCAweDAyLCAweDUwLCAweDA0LCAweDhGLAorLyoxQ0IwKi8weDU4LCAweDgwLCAweDA1LCAweEVGLCAweDI0LCAweEZFLCAweEY1LCAweDU4LAorCTB4RUYsIDB4QzMsIDB4OTQsIDB4MTgsIDB4NDAsIDB4MDUsIDB4NzUsIDB4NTksCisvKjFDQzAqLzB4MTgsIDB4ODAsIDB4MDQsIDB4RUYsIDB4MDQsIDB4RjUsIDB4NTksIDB4ODUsCisJMHg0MywgMHg1QSwgMHhBRiwgMHg1OCwgMHg3RSwgMHgwMCwgMHhBRCwgMHg1OSwKKy8qMUNEMCovMHg3QywgMHgwMCwgMHhBQiwgMHg1QiwgMHg3QSwgMHgwMCwgMHgxMiwgMHgxNSwKKwkweDQxLCAweEFGLCAweDVBLCAweDdFLCAweDAwLCAweDEyLCAweDE4LCAweDBBLAorLyoxQ0UwKi8weEFGLCAweDVCLCAweDdFLCAweDAwLCAweDAyLCAweDFBLCAweEZGLCAweEU1LAorCTB4RTIsIDB4MzAsIDB4RTcsIDB4MEUsIDB4MTIsIDB4MTAsIDB4MDMsIDB4QzIsCisvKjFDRjAqLzB4MzAsIDB4MzAsIDB4MzAsIDB4MDMsIDB4MTIsIDB4MTAsIDB4RkYsIDB4MjAsCisJMHgzMywgMHgyOCwgMHhFNSwgMHhFNywgMHgzMCwgMHhFNywgMHgwNSwgMHgxMiwKKy8qMUQwMCovMHgwRSwgMHhBMiwgMHg4MCwgMHgwRCwgMHhFNSwgMHhGRSwgMHhDMywgMHg5NCwKKwkweDIwLCAweDUwLCAweDA2LCAweDEyLCAweDBFLCAweEEyLCAweDQzLCAweEY5LAorLyoxRDEwKi8weDA4LCAweEU1LCAweEYyLCAweDMwLCAweEU3LCAweDAzLCAweDUzLCAweEY5LAorCTB4N0YsIDB4RTUsIDB4RjEsIDB4NTQsIDB4NzAsIDB4RDMsIDB4OTQsIDB4MDAsCisvKjFEMjAqLzB4NTAsIDB4RDgsIDB4MjIsIDB4MTIsIDB4MEUsIDB4MDQsIDB4NzUsIDB4ODMsCisJMHg4MCwgMHhFNCwgMHhGMCwgMHhFNSwgMHgwOCwgMHg0NCwgMHgwNywgMHgxMiwKKy8qMUQzMCovMHgwRCwgMHhGRCwgMHg3NSwgMHg4MywgMHg4NCwgMHgxMiwgMHgwRSwgMHgwMiwKKwkweDc1LCAweDgzLCAweDg2LCAweDEyLCAweDBFLCAweDAyLCAweDc1LCAweDgzLAorLyoxRDQwKi8weDhDLCAweEUwLCAweDU0LCAweEYzLCAweDEyLCAweDBFLCAweDAzLCAweDc1LAorCTB4ODMsIDB4OEUsIDB4MTIsIDB4MEUsIDB4MDIsIDB4NzUsIDB4ODMsIDB4OTQsCisvKjFENTAqLzB4RTAsIDB4NTQsIDB4RkIsIDB4RjAsIDB4MjIsIDB4MTIsIDB4MDcsIDB4MkEsCisJMHg3NSwgMHg4MywgMHg4RSwgMHhFNCwgMHgxMiwgMHgwNywgMHgyOSwgMHg3NCwKKy8qMUQ2MCovMHgwMSwgMHgxMiwgMHgwNywgMHgyOSwgMHhFNCwgMHgxMiwgMHgwOCwgMHhCRSwKKwkweDc1LCAweDgzLCAweDhDLCAweEUwLCAweDQ0LCAweDIwLCAweDEyLCAweDA4LAorLyoxRDcwKi8weEJFLCAweEUwLCAweDU0LCAweERGLCAweEYwLCAweDc0LCAweDg0LCAweDg1LAorCTB4MDgsIDB4ODIsIDB4RjUsIDB4ODMsIDB4RTAsIDB4NTQsIDB4N0YsIDB4RjAsCisvKjFEODAqLzB4RTAsIDB4NDQsIDB4ODAsIDB4RjAsIDB4MjIsIDB4NzUsIDB4NTYsIDB4MDEsCisJMHhFNCwgMHhGRCwgMHhGNSwgMHg1NywgMHhBRiwgMHgzNSwgMHhGRSwgMHhGQywKKy8qMUQ5MCovMHgxMiwgMHgwOSwgMHgxNSwgMHgxMiwgMHgxQywgMHg5RCwgMHgxMiwgMHgxRSwKKwkweDdBLCAweDEyLCAweDFDLCAweDRDLCAweEFGLCAweDU3LCAweDdFLCAweDAwLAorLyoxREEwKi8weEFELCAweDU2LCAweDdDLCAweDAwLCAweDEyLCAweDA0LCAweDQ0LCAweEFGLAorCTB4NTYsIDB4N0UsIDB4MDAsIDB4MDIsIDB4MTEsIDB4RUUsIDB4NzUsIDB4NTYsCisvKjFEQjAqLzB4MDEsIDB4RTQsIDB4RkQsIDB4RjUsIDB4NTcsIDB4QUYsIDB4MzUsIDB4RkUsCisJMHhGQywgMHgxMiwgMHgwOSwgMHgxNSwgMHgxMiwgMHgxQywgMHg5RCwgMHgxMiwKKy8qMURDMCovMHgxRSwgMHg3QSwgMHgxMiwgMHgxQywgMHg0QywgMHhBRiwgMHg1NywgMHg3RSwKKwkweDAwLCAweEFELCAweDU2LCAweDdDLCAweDAwLCAweDEyLCAweDA0LCAweDQ0LAorLyoxREQwKi8weEFGLCAweDU2LCAweDdFLCAweDAwLCAweDAyLCAweDExLCAweEVFLCAweEU0LAorCTB4RjUsIDB4MTYsIDB4MTIsIDB4MEUsIDB4NDQsIDB4RkUsIDB4RTUsIDB4MDgsCisvKjFERTAqLzB4NDQsIDB4MDUsIDB4RkYsIDB4MTIsIDB4MEUsIDB4NjUsIDB4OEYsIDB4ODIsCisJMHg4RSwgMHg4MywgMHhGMCwgMHgwNSwgMHgxNiwgMHhFNSwgMHgxNiwgMHhDMywKKy8qMURGMCovMHg5NCwgMHgxNCwgMHg0MCwgMHhFNiwgMHhFNSwgMHgwOCwgMHgxMiwgMHgwRSwKKwkweDJCLCAweEU0LCAweEYwLCAweDIyLCAweEU0LCAweEY1LCAweDU4LCAweEY1LAorLyoxRTAwKi8weDU5LCAweEY1LCAweDVBLCAweEZGLCAweEZFLCAweEFELCAweDU4LCAweEZDLAorCTB4MTIsIDB4MDksIDB4MTUsIDB4N0YsIDB4MDQsIDB4N0UsIDB4MDAsIDB4QUQsCisvKjFFMTAqLzB4NTgsIDB4N0MsIDB4MDAsIDB4MTIsIDB4MDksIDB4MTUsIDB4N0YsIDB4MDIsCisJMHg3RSwgMHgwMCwgMHhBRCwgMHg1OCwgMHg3QywgMHgwMCwgMHgwMiwgMHgwOSwKKy8qMUUyMCovMHgxNSwgMHhFNSwgMHgzQywgMHgyNSwgMHgzRSwgMHhGQywgMHhFNSwgMHg0MiwKKwkweDI0LCAweDAwLCAweEZCLCAweEU0LCAweDMzLCAweEZBLCAweEVDLCAweEMzLAorLyoxRTMwKi8weDlCLCAweEVBLCAweDEyLCAweDA3LCAweDZCLCAweDQwLCAweDBCLCAweDhDLAorCTB4NDIsIDB4RTUsIDB4M0QsIDB4MjUsIDB4M0YsIDB4RjUsIDB4NDEsIDB4OEYsCisvKjFFNDAqLzB4NDAsIDB4MjIsIDB4MTIsIDB4MDksIDB4MEIsIDB4MjIsIDB4NzQsIDB4ODQsCisJMHhGNSwgMHgxOCwgMHg4NSwgMHgwOCwgMHgxOSwgMHg4NSwgMHgxOSwgMHg4MiwKKy8qMUU1MCovMHg4NSwgMHgxOCwgMHg4MywgMHhFMCwgMHg1NCwgMHg3RiwgMHhGMCwgMHhFMCwKKwkweDQ0LCAweDgwLCAweEYwLCAweEUwLCAweDQ0LCAweDgwLCAweEYwLCAweDIyLAorLyoxRTYwKi8weEVGLCAweDRFLCAweDcwLCAweDBCLCAweDEyLCAweDA3LCAweDJBLCAweDc1LAorCTB4ODMsIDB4RDIsIDB4RTAsIDB4NTQsIDB4REYsIDB4RjAsIDB4MjIsIDB4MTIsCisvKjFFNzAqLzB4MDcsIDB4MkEsIDB4NzUsIDB4ODMsIDB4RDIsIDB4RTAsIDB4NDQsIDB4MjAsCisJMHhGMCwgMHgyMiwgMHg3NSwgMHg1OCwgMHgwMSwgMHg5MCwgMHgwNywgMHgyNiwKKy8qMUU4MCovMHgxMiwgMHgwNywgMHgzNSwgMHhFMCwgMHg1NCwgMHgzRiwgMHhGNSwgMHg0MSwKKwkweDEyLCAweDA3LCAweDMyLCAweEUwLCAweDU0LCAweDNGLCAweEY1LCAweDQwLAorLyoxRTkwKi8weDIyLCAweDc1LCAweDU2LCAweDAyLCAweEU0LCAweEY1LCAweDU3LCAweDEyLAorCTB4MUQsIDB4RkMsIDB4QUYsIDB4NTcsIDB4N0UsIDB4MDAsIDB4QUQsIDB4NTYsCisvKjFFQTAqLzB4N0MsIDB4MDAsIDB4MDIsIDB4MDQsIDB4NDQsIDB4RTQsIDB4RjUsIDB4NDIsCisJMHhGNSwgMHg0MSwgMHhGNSwgMHg0MCwgMHhGNSwgMHgzOCwgMHhGNSwgMHgzOSwKKy8qMUVCMCovMHhGNSwgMHgzQSwgMHgyMiwgMHhFRiwgMHg1NCwgMHgwNywgMHhGRiwgMHhFNSwKKwkweEY5LCAweDU0LCAweEY4LCAweDRGLCAweEY1LCAweEY5LCAweDIyLCAweDdGLAorLyoxRUMwKi8weDAxLCAweEU0LCAweEZFLCAweDBGLCAweDBFLCAweEJFLCAweEZGLCAweEZCLAorCTB4MjIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MjAsIDB4MDAsCisvKjFFRDAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qMUVFMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorLyoxRUYwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisvKjFGMDAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qMUYxMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorLyoxRjIwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisvKjFGMzAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qMUY0MCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorLyoxRjUwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisvKjFGNjAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qMUY3MCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorLyoxRjgwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisvKjFGOTAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qMUZBMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorLyoxRkIwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisvKjFGQzAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qMUZEMCovMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorLyoxRkUwKi8weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisvKjFGRjAqLzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgyMCwgMHgxMSwgMHgwMCwgMHgwNCwgMHgyMCwgMHgwMCwgMHg4MQorfTsKKworaW50IGlwYXRoX3NkNzIyMF9pYl9sb2FkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gaXBhdGhfc2Q3MjIwX3Byb2dfbGQoZGQsIElCXzcyMjBfU0VSREVTLCBpcGF0aF9zZDcyMjBfaWJfaW1nLAorCQlzaXplb2YoaXBhdGhfc2Q3MjIwX2liX2ltZyksIDApOworfQorCitpbnQgaXBhdGhfc2Q3MjIwX2liX3ZmeShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGlwYXRoX3NkNzIyMF9wcm9nX3ZmeShkZCwgSUJfNzIyMF9TRVJERVMsIGlwYXRoX3NkNzIyMF9pYl9pbWcsCisJCXNpemVvZihpcGF0aF9zZDcyMjBfaWJfaW1nKSwgMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc0ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYwpAQCAtMCwwICsxLDc5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCisKKyNkZWZpbmUgU0RNQV9ERVNDUV9TWiBQQUdFX1NJWkUgLyogMjU2IGVudHJpZXMgcGVyIDRLQiBwYWdlICovCisKK3N0YXRpYyB2b2lkIHZsMTVfd2F0Y2hkb2dfZW5xKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwkvKiBpcGF0aF9zZG1hX2xvY2sgbXVzdCBhbHJlYWR5IGJlIGhlbGQgKi8KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmRkLT5pcGF0aF9zZG1hX3ZsMTVfY291bnQpID09IDEpIHsKKwkJdW5zaWduZWQgbG9uZyBpbnRlcnZhbCA9IChIWiArIDE5KSAvIDIwOworCQlkZC0+aXBhdGhfc2RtYV92bDE1X3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgaW50ZXJ2YWw7CisJCWFkZF90aW1lcigmZGQtPmlwYXRoX3NkbWFfdmwxNV90aW1lcik7CisJfQorfQorCitzdGF0aWMgdm9pZCB2bDE1X3dhdGNoZG9nX2RlcShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJLyogaXBhdGhfc2RtYV9sb2NrIG11c3QgYWxyZWFkeSBiZSBoZWxkICovCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZkZC0+aXBhdGhfc2RtYV92bDE1X2NvdW50KSAhPSAwKSB7CisJCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSAoSFogKyAxOSkgLyAyMDsKKwkJbW9kX3RpbWVyKCZkZC0+aXBhdGhfc2RtYV92bDE1X3RpbWVyLCBqaWZmaWVzICsgaW50ZXJ2YWwpOworCX0gZWxzZSB7CisJCWRlbF90aW1lcigmZGQtPmlwYXRoX3NkbWFfdmwxNV90aW1lcik7CisJfQorfQorCitzdGF0aWMgdm9pZCB2bDE1X3dhdGNoZG9nX3RpbWVvdXQodW5zaWduZWQgbG9uZyBvcGFxdWUpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopb3BhcXVlOworCisJaWYgKGF0b21pY19yZWFkKCZkZC0+aXBhdGhfc2RtYV92bDE1X2NvdW50KSAhPSAwKSB7CisJCWlwYXRoX2RiZygidmwxNSB3YXRjaGRvZyB0aW1lb3V0IC0gY2xlYXJpbmdcbiIpOworCQlpcGF0aF9jYW5jZWxfc2VuZHMoZGQsIDEpOworCQlpcGF0aF9ob2xfZG93bihkZCk7CisJfSBlbHNlIHsKKwkJaXBhdGhfZGJnKCJ2bDE1IHdhdGNoZG9nIHRpbWVvdXQgLSAiCisJCQkgICJjb25kaXRpb24gYWxyZWFkeSBjbGVhcmVkXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVubWFwX2Rlc2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBoZWFkKQoreworCV9fbGU2NCAqZGVzY3FwID0gJmRkLT5pcGF0aF9zZG1hX2Rlc2NxW2hlYWRdLnF3WzBdOworCXU2NCBkZXNjWzJdOworCWRtYV9hZGRyX3QgYWRkcjsKKwlzaXplX3QgbGVuOworCisJZGVzY1swXSA9IGxlNjRfdG9fY3B1KGRlc2NxcFswXSk7CisJZGVzY1sxXSA9IGxlNjRfdG9fY3B1KGRlc2NxcFsxXSk7CisKKwlhZGRyID0gKGRlc2NbMV0gPDwgMzIpIHwgKGRlc2NbMF0gPj4gMzIpOworCWxlbiA9IChkZXNjWzBdID4+IDE0KSAmICgweDdmZlVMTCA8PCAyKTsKKwlkbWFfdW5tYXBfc2luZ2xlKCZkZC0+cGNpZGV2LT5kZXYsIGFkZHIsIGxlbiwgRE1BX1RPX0RFVklDRSk7Cit9CisKKy8qCisgKiBpcGF0aF9zZG1hX2xvY2sgc2hvdWxkIGJlIGxvY2tlZCBiZWZvcmUgY2FsbGluZyB0aGlzLgorICovCitpbnQgaXBhdGhfc2RtYV9tYWtlX3Byb2dyZXNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscCA9IE5VTEw7CisJc3RydWN0IGlwYXRoX3NkbWFfdHhyZXEgKnR4cCA9IE5VTEw7CisJdTE2IGRtYWhlYWQ7CisJdTE2IHN0YXJ0X2lkeCA9IDA7CisJaW50IHByb2dyZXNzID0gMDsKKworCWlmICghbGlzdF9lbXB0eSgmZGQtPmlwYXRoX3NkbWFfYWN0aXZlbGlzdCkpIHsKKwkJbHAgPSBkZC0+aXBhdGhfc2RtYV9hY3RpdmVsaXN0Lm5leHQ7CisJCXR4cCA9IGxpc3RfZW50cnkobHAsIHN0cnVjdCBpcGF0aF9zZG1hX3R4cmVxLCBsaXN0KTsKKwkJc3RhcnRfaWR4ID0gdHhwLT5zdGFydF9pZHg7CisJfQorCisJLyoKKwkgKiBSZWFkIHRoZSBTRE1BIGhlYWQgcmVnaXN0ZXIgaW4gb3JkZXIgdG8ga25vdyB0aGF0IHRoZQorCSAqIGludGVycnVwdCBjbGVhciBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBjaGlwLgorCSAqIE90aGVyd2lzZSwgd2UgbWF5IG5vdCBnZXQgYW4gaW50ZXJydXB0IGZvciB0aGUgbGFzdAorCSAqIGRlc2NyaXB0b3IgaW4gdGhlIHF1ZXVlLgorCSAqLworCWRtYWhlYWQgPSAodTE2KWlwYXRoX3JlYWRfa3JlZzMyKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFoZWFkKTsKKwkvKiBzYW5pdHkgY2hlY2sgcmV0dXJuIHZhbHVlIGZvciBlcnJvciBoYW5kbGluZyAoY2hpcCByZXNldCwgZXRjLikgKi8KKwlpZiAoZG1haGVhZCA+PSBkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnQpCisJCWdvdG8gZG9uZTsKKworCXdoaWxlIChkZC0+aXBhdGhfc2RtYV9kZXNjcV9oZWFkICE9IGRtYWhlYWQpIHsKKwkJaWYgKHR4cCAmJiB0eHAtPmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX0ZSRUVERVNDICYmCisJCSAgICBkZC0+aXBhdGhfc2RtYV9kZXNjcV9oZWFkID09IHN0YXJ0X2lkeCkgeworCQkJdW5tYXBfZGVzYyhkZCwgZGQtPmlwYXRoX3NkbWFfZGVzY3FfaGVhZCk7CisJCQlzdGFydF9pZHgrKzsKKwkJCWlmIChzdGFydF9pZHggPT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250KQorCQkJCXN0YXJ0X2lkeCA9IDA7CisJCX0KKworCQkvKiBpbmNyZW1lbnQgZnJlZSBjb3VudCBhbmQgaGVhZCAqLworCQlkZC0+aXBhdGhfc2RtYV9kZXNjcV9yZW1vdmVkKys7CisJCWlmICgrK2RkLT5pcGF0aF9zZG1hX2Rlc2NxX2hlYWQgPT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250KQorCQkJZGQtPmlwYXRoX3NkbWFfZGVzY3FfaGVhZCA9IDA7CisKKwkJaWYgKHR4cCAmJiB0eHAtPm5leHRfZGVzY3FfaWR4ID09IGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2hlYWQpIHsKKwkJCS8qIG1vdmUgdG8gbm90aWZ5IGxpc3QgKi8KKwkJCWlmICh0eHAtPmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX1ZMMTUpCisJCQkJdmwxNV93YXRjaGRvZ19kZXEoZGQpOworCQkJbGlzdF9tb3ZlX3RhaWwobHAsICZkZC0+aXBhdGhfc2RtYV9ub3RpZnlsaXN0KTsKKwkJCWlmICghbGlzdF9lbXB0eSgmZGQtPmlwYXRoX3NkbWFfYWN0aXZlbGlzdCkpIHsKKwkJCQlscCA9IGRkLT5pcGF0aF9zZG1hX2FjdGl2ZWxpc3QubmV4dDsKKwkJCQl0eHAgPSBsaXN0X2VudHJ5KGxwLCBzdHJ1Y3QgaXBhdGhfc2RtYV90eHJlcSwKKwkJCQkJCSBsaXN0KTsKKwkJCQlzdGFydF9pZHggPSB0eHAtPnN0YXJ0X2lkeDsKKwkJCX0gZWxzZSB7CisJCQkJbHAgPSBOVUxMOworCQkJCXR4cCA9IE5VTEw7CisJCQl9CisJCX0KKwkJcHJvZ3Jlc3MgPSAxOworCX0KKworCWlmIChwcm9ncmVzcykKKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmZGQtPmlwYXRoX3NkbWFfbm90aWZ5X3Rhc2spOworCitkb25lOgorCXJldHVybiBwcm9ncmVzczsKK30KKworc3RhdGljIHZvaWQgaXBhdGhfc2RtYV9ub3RpZnkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCBpcGF0aF9zZG1hX3R4cmVxICp0eHAsICp0eHBfbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0eHAsIHR4cF9uZXh0LCBsaXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJnR4cC0+bGlzdCk7CisKKwkJaWYgKHR4cC0+Y2FsbGJhY2spCisJCQkoKnR4cC0+Y2FsbGJhY2spKHR4cC0+Y2FsbGJhY2tfY29va2llLAorCQkJCQkgdHhwLT5jYWxsYmFja19zdGF0dXMpOworCX0KK30KKworc3RhdGljIHZvaWQgc2RtYV9ub3RpZnlfdGFza2JvZHkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKworCWxpc3Rfc3BsaWNlX2luaXQoJmRkLT5pcGF0aF9zZG1hX25vdGlmeWxpc3QsICZsaXN0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKworCWlwYXRoX3NkbWFfbm90aWZ5KGRkLCAmbGlzdCk7CisKKwkvKgorCSAqIFRoZSBJQiB2ZXJicyBsYXllciBuZWVkcyB0byBzZWUgdGhlIGNhbGxiYWNrIGJlZm9yZSBnZXR0aW5nCisJICogdGhlIGNhbGwgdG8gaXBhdGhfaWJfcGlvYnVmYXZhaWwoKSBiZWNhdXNlIHRoZSBjYWxsYmFjaworCSAqIGhhbmRsZXMgcmVsZWFzaW5nIHJlc291cmNlcyB0aGUgbmV4dCBzZW5kIHdpbGwgbmVlZC4KKwkgKiBPdGhlcndpc2UsIHdlIGNvdWxkIGRvIHRoZXNlIGNhbGxzIGluCisJICogaXBhdGhfc2RtYV9tYWtlX3Byb2dyZXNzKCkuCisJICovCisJaXBhdGhfaWJfcGlvYnVmYXZhaWwoZGQtPnZlcmJzX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHNkbWFfbm90aWZ5X3Rhc2sodW5zaWduZWQgbG9uZyBvcGFxdWUpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopb3BhcXVlOworCisJaWYgKCF0ZXN0X2JpdChJUEFUSF9TRE1BX1NIVVRET1dOLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKSkKKwkJc2RtYV9ub3RpZnlfdGFza2JvZHkoZGQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3NkbWFfc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYXN0YXR1cyk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAia3Jfc2VuZGRtYXN0YXR1czogMHglMDE2bHhcbiIsIHJlZyk7CisKKwlyZWcgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCk7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAia3Jfc2VuZGN0cmw6IDB4JTAxNmx4XG4iLCByZWcpOworCisJcmVnID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWJ1Zm1hc2swKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJrcl9zZW5kZG1hYnVmbWFzazA6IDB4JTAxNmx4XG4iLCByZWcpOworCisJcmVnID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWJ1Zm1hc2sxKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJrcl9zZW5kZG1hYnVmbWFzazE6IDB4JTAxNmx4XG4iLCByZWcpOworCisJcmVnID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWJ1Zm1hc2syKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJrcl9zZW5kZG1hYnVmbWFzazI6IDB4JTAxNmx4XG4iLCByZWcpOworCisJcmVnID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYXRhaWwpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgImtyX3NlbmRkbWF0YWlsOiAweCUwMTZseFxuIiwgcmVnKTsKKworCXJlZyA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFoZWFkKTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJrcl9zZW5kZG1haGVhZDogMHglMDE2bHhcbiIsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNkbWFfYWJvcnRfdGFzayh1bnNpZ25lZCBsb25nIG9wYXF1ZSkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSAoc3RydWN0IGlwYXRoX2RldmRhdGEgKikgb3BhcXVlOworCXU2NCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh0ZXN0X2JpdChJUEFUSF9TRE1BX1NIVVRET1dOLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKworCXN0YXR1cyA9IGRkLT5pcGF0aF9zZG1hX3N0YXR1cyAmIElQQVRIX1NETUFfQUJPUlRfTUFTSzsKKworCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAoc3RhdHVzID09IElQQVRIX1NETUFfQUJPUlRfTk9ORSkKKwkJZ290byB1bmxvY2s7CisKKwkvKiBpcGF0aF9zZG1hX2Fib3J0KCkgaXMgZG9uZSwgd2FpdGluZyBmb3IgaW50ZXJydXB0ICovCisJaWYgKHN0YXR1cyA9PSBJUEFUSF9TRE1BX0FCT1JUX0RJU0FSTUVEKSB7CisJCWlmIChqaWZmaWVzIDwgZGQtPmlwYXRoX3NkbWFfYWJvcnRfaW50cl90aW1lb3V0KQorCQkJZ290byByZXNjaGVkX25vcHJpbnQ7CisJCS8qIGdpdmUgdXAsIGludHIgZ290IGxvc3Qgc29tZXdoZXJlICovCisJCWlwYXRoX2RiZygiZ2l2ZSB1cCB3YWl0aW5nIGZvciBTRE1BRElTQUJMRUQgaW50clxuIik7CisJCV9fc2V0X2JpdChJUEFUSF9TRE1BX0RJU0FCTEVELCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKTsKKwkJc3RhdHVzID0gSVBBVEhfU0RNQV9BQk9SVF9BQk9SVEVEOworCX0KKworCS8qIGV2ZXJ5dGhpbmcgaXMgc3RvcHBlZCwgdGltZSB0byBjbGVhbiB1cCBhbmQgcmVzdGFydCAqLworCWlmIChzdGF0dXMgPT0gSVBBVEhfU0RNQV9BQk9SVF9BQk9SVEVEKSB7CisJCXN0cnVjdCBpcGF0aF9zZG1hX3R4cmVxICp0eHAsICp0eHBuZXh0OworCQl1NjQgaHdzdGF0dXM7CisJCWludCBub3RpZnkgPSAwOworCisJCWh3c3RhdHVzID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsCisJCQkJZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1hc3RhdHVzKTsKKworCQlpZiAoLyogU2NvcmVCb2FyZERyYWluSW5Qcm9nICovCisJCSAgICB0ZXN0X2JpdCg2MywgJmh3c3RhdHVzKSB8fAorCQkgICAgLyogQWJvcnRJblByb2cgKi8KKwkJICAgIHRlc3RfYml0KDYyLCAmaHdzdGF0dXMpIHx8CisJCSAgICAvKiBJbnRlcm5hbFNEbWFFbmFibGUgKi8KKwkJICAgIHRlc3RfYml0KDYxLCAmaHdzdGF0dXMpIHx8CisJCSAgICAvKiBTY2JFbXB0eSAqLworCQkgICAgIXRlc3RfYml0KDMwLCAmaHdzdGF0dXMpKSB7CisJCQlpZiAoZGQtPmlwYXRoX3NkbWFfcmVzZXRfd2FpdCA+IDApIHsKKwkJCQkvKiBub3QgZG9uZSBzaHV0dGluZyBkb3duIHNkbWEgKi8KKwkJCQktLWRkLT5pcGF0aF9zZG1hX3Jlc2V0X3dhaXQ7CisJCQkJZ290byByZXNjaGVkOworCQkJfQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiZ2F2ZSB1cCB3YWl0aW5nIGZvciBxdWllc2NlbnQgIgorCQkJCSJzdGF0dXMgYWZ0ZXIgU0RNQSByZXNldCwgY29udGludWluZ1xuIik7CisJCQlkdW1wX3NkbWFfc3RhdGUoZGQpOworCQl9CisKKwkJLyogZGVxdWV1ZSBhbGwgInNlbnQiIHJlcXVlc3RzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0eHAsIHR4cG5leHQsCisJCQkJCSAmZGQtPmlwYXRoX3NkbWFfYWN0aXZlbGlzdCwgbGlzdCkgeworCQkJdHhwLT5jYWxsYmFja19zdGF0dXMgPSBJUEFUSF9TRE1BX1RYUkVRX1NfQUJPUlRFRDsKKwkJCWlmICh0eHAtPmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX1ZMMTUpCisJCQkJdmwxNV93YXRjaGRvZ19kZXEoZGQpOworCQkJbGlzdF9tb3ZlX3RhaWwoJnR4cC0+bGlzdCwgJmRkLT5pcGF0aF9zZG1hX25vdGlmeWxpc3QpOworCQkJbm90aWZ5ID0gMTsKKwkJfQorCQlpZiAobm90aWZ5KQorCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmZGQtPmlwYXRoX3NkbWFfbm90aWZ5X3Rhc2spOworCisJCS8qIHJlc2V0IG91ciBub3Rpb24gb2YgaGVhZCBhbmQgdGFpbCAqLworCQlkZC0+aXBhdGhfc2RtYV9kZXNjcV90YWlsID0gMDsKKwkJZGQtPmlwYXRoX3NkbWFfZGVzY3FfaGVhZCA9IDA7CisJCWRkLT5pcGF0aF9zZG1hX2hlYWRfZG1hWzBdID0gMDsKKwkJZGQtPmlwYXRoX3NkbWFfZ2VuZXJhdGlvbiA9IDA7CisJCWRkLT5pcGF0aF9zZG1hX2Rlc2NxX3JlbW92ZWQgPSBkZC0+aXBhdGhfc2RtYV9kZXNjcV9hZGRlZDsKKworCQkvKiBSZXNldCBTZW5kRG1hTGVuR2VuICovCisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWxlbmdlbiwKKwkJCSh1NjQpIGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudCB8ICgxVUxMIDw8IDE4KSk7CisKKwkJLyogZG9uZSB3aXRoIHNkbWEgc3RhdGUgZm9yIGEgYml0ICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKworCQkvKgorCQkgKiBEb24ndCByZXN0YXJ0IHNkbWEgaGVyZS4gV2FpdCB1bnRpbCBsaW5rIGlzIHVwIHRvIEFDVElWRS4KKwkJICogVkwxNSBNQURzIHVzZWQgdG8gYnJpbmcgdGhlIGxpbmsgdXAgdXNlIFBJTywgYW5kIG11bHRpcGxlCisJCSAqIGxpbmsgdHJhbnNpdGlvbnMgb3RoZXJ3aXNlIGNhdXNlIHRoZSBzZG1hIGVuZ2luZSB0byBiZQorCQkgKiBzdG9wcGVkIGFuZCBzdGFydGVkIG11bHRpcGxlIHRpbWVzLgorCQkgKiBUaGUgZGlzYWJsZSBpcyBkb25lIGhlcmUsIGluY2x1ZGluZyB0aGUgc2hhZG93LCBzbyB0aGUKKwkJICogc3RhdGUgaXMga2VwdCBjb25zaXN0ZW50LgorCQkgKiBTZWUgaXBhdGhfcmVzdGFydF9zZG1hKCkgZm9yIHRoZSBhY3R1YWwgc3RhcnRpbmcgb2Ygc2RtYS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCQlkZC0+aXBhdGhfc2VuZGN0cmwgJj0gfklORklOSVBBVEhfU19TRE1BRU5BQkxFOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJCSBkZC0+aXBhdGhfc2VuZGN0cmwpOworCQlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKKworCQkvKiBtYWtlIHN1cmUgSSBzZWUgbmV4dCBtZXNzYWdlICovCisJCWRkLT5pcGF0aF9zZG1hX2Fib3J0X2ppZmZpZXMgPSAwOworCisJCWdvdG8gZG9uZTsKKwl9CisKK3Jlc2NoZWQ6CisJLyoKKwkgKiBmb3Igbm93LCBrZWVwIHNwaW5uaW5nCisJICogSkFHIC0gdGhpcyBpcyBiYWQgdG8ganVzdCBoYXZlIGRlZmF1bHQgYmUgYSBsb29wIHdpdGhvdXQKKwkgKiBzdGF0ZSBjaGFuZ2UKKwkgKi8KKwlpZiAoamlmZmllcyA+IGRkLT5pcGF0aF9zZG1hX2Fib3J0X2ppZmZpZXMpIHsKKwkJaXBhdGhfZGJnKCJsb29waW5nIHdpdGggc3RhdHVzIDB4JTAxNmxseFxuIiwKKwkJCSAgZGQtPmlwYXRoX3NkbWFfc3RhdHVzKTsKKwkJZGQtPmlwYXRoX3NkbWFfYWJvcnRfamlmZmllcyA9IGppZmZpZXMgKyA1ICogSFo7CisJfQorcmVzY2hlZF9ub3ByaW50OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXRlc3RfYml0KElQQVRIX1NETUFfU0hVVERPV04sICZkZC0+aXBhdGhfc2RtYV9zdGF0dXMpKQorCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZkZC0+aXBhdGhfc2RtYV9hYm9ydF90YXNrKTsKKwlyZXR1cm47CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7Citkb25lOgorCXJldHVybjsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgaXBhdGhfc2RtYV9pbnRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKworCSh2b2lkKSBpcGF0aF9zZG1hX21ha2VfcHJvZ3Jlc3MoZGQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGFsbG9jX3NkbWEoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCByZXQgPSAwOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBTZW5kRE1BIGRlc2NyaXB0b3IgRklGTyAqLworCWRkLT5pcGF0aF9zZG1hX2Rlc2NxID0gZG1hX2FsbG9jX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsCisJCVNETUFfREVTQ1FfU1osICZkZC0+aXBhdGhfc2RtYV9kZXNjcV9waHlzLCBHRlBfS0VSTkVMKTsKKworCWlmICghZGQtPmlwYXRoX3NkbWFfZGVzY3EpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBTZW5kRE1BIGRlc2NyaXB0b3IgIgorCQkJIkZJRk8gbWVtb3J5XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCWRkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudCA9CisJCVNETUFfREVTQ1FfU1ogLyBzaXplb2Yoc3RydWN0IGlwYXRoX3NkbWFfZGVzYyk7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIERNQSBvZiBoZWFkIHJlZ2lzdGVyIHRvIG1lbW9yeSAqLworCWRkLT5pcGF0aF9zZG1hX2hlYWRfZG1hID0gZG1hX2FsbG9jX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsCisJCVBBR0VfU0laRSwgJmRkLT5pcGF0aF9zZG1hX2hlYWRfcGh5cywgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZC0+aXBhdGhfc2RtYV9oZWFkX2RtYSkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIGFsbG9jYXRlIFNlbmRETUEgaGVhZCBtZW1vcnlcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXBfZGVzY3E7CisJfQorCWRkLT5pcGF0aF9zZG1hX2hlYWRfZG1hWzBdID0gMDsKKworCWluaXRfdGltZXIoJmRkLT5pcGF0aF9zZG1hX3ZsMTVfdGltZXIpOworCWRkLT5pcGF0aF9zZG1hX3ZsMTVfdGltZXIuZnVuY3Rpb24gPSB2bDE1X3dhdGNoZG9nX3RpbWVvdXQ7CisJZGQtPmlwYXRoX3NkbWFfdmwxNV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGQ7CisJYXRvbWljX3NldCgmZGQtPmlwYXRoX3NkbWFfdmwxNV9jb3VudCwgMCk7CisKKwlnb3RvIGRvbmU7CisKK2NsZWFudXBfZGVzY3E6CisJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgU0RNQV9ERVNDUV9TWiwKKwkJKHZvaWQgKilkZC0+aXBhdGhfc2RtYV9kZXNjcSwgZGQtPmlwYXRoX3NkbWFfZGVzY3FfcGh5cyk7CisJZGQtPmlwYXRoX3NkbWFfZGVzY3EgPSBOVUxMOworCWRkLT5pcGF0aF9zZG1hX2Rlc2NxX3BoeXMgPSAwOworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2V0dXBfc2RtYShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaSwgbjsKKwl1NjQgdG1wNjQ7CisJdTY0IHNlbmRkbWFidWZtYXNrWzNdID0geyAwIH07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJldCA9IGFsbG9jX3NkbWEoZGQpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCWlmICghZGQtPmlwYXRoX3NkbWFfZGVzY3EpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgIlNlbmRETUEgbWVtb3J5IG5vdCBhbGxvY2F0ZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJZGQtPmlwYXRoX3NkbWFfc3RhdHVzID0gMDsKKwlkZC0+aXBhdGhfc2RtYV9hYm9ydF9qaWZmaWVzID0gMDsKKwlkZC0+aXBhdGhfc2RtYV9nZW5lcmF0aW9uID0gMDsKKwlkZC0+aXBhdGhfc2RtYV9kZXNjcV90YWlsID0gMDsKKwlkZC0+aXBhdGhfc2RtYV9kZXNjcV9oZWFkID0gMDsKKwlkZC0+aXBhdGhfc2RtYV9kZXNjcV9yZW1vdmVkID0gMDsKKwlkZC0+aXBhdGhfc2RtYV9kZXNjcV9hZGRlZCA9IDA7CisKKwkvKiBTZXQgU2VuZERtYUJhc2UgKi8KKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFiYXNlLAorCQkJIGRkLT5pcGF0aF9zZG1hX2Rlc2NxX3BoeXMpOworCS8qIFNldCBTZW5kRG1hTGVuR2VuICovCisJdG1wNjQgPSBkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnQ7CisJdG1wNjQgfD0gMTw8MTg7IC8qIGVuYWJsZSBnZW5lcmF0aW9uIGNoZWNraW5nICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1hbGVuZ2VuLCB0bXA2NCk7CisJLyogU2V0IFNlbmREbWFUYWlsICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1hdGFpbCwKKwkJCSBkZC0+aXBhdGhfc2RtYV9kZXNjcV90YWlsKTsKKwkvKiBTZXQgU2VuZERtYUhlYWRBZGRyICovCisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1haGVhZGFkZHIsCisJCQkgZGQtPmlwYXRoX3NkbWFfaGVhZF9waHlzKTsKKworCS8qIFJlc2VydmUgYWxsIHRoZSBmb3JtZXIgImtlcm5lbCIgcGlvYnVmcyAqLworCW4gPSBkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0ayAtIGRkLT5pcGF0aF9waW9yZXNlcnZlZDsKKwlmb3IgKGkgPSBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmOyBpIDwgbjsgKytpKSB7CisJCXVuc2lnbmVkIHdvcmQgPSBpIC8gNjQ7CisJCXVuc2lnbmVkIGJpdCA9IGkgJiA2MzsKKwkJQlVHX09OKHdvcmQgPj0gMyk7CisJCXNlbmRkbWFidWZtYXNrW3dvcmRdIHw9IDFVTEwgPDwgYml0OworCX0KKwlpcGF0aF9jaGdfcGlvYXZhaWxrZXJuZWwoZGQsIGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYsCisJCW4gLSBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmLCAwKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFidWZtYXNrMCwKKwkJCSBzZW5kZG1hYnVmbWFza1swXSk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1hYnVmbWFzazEsCisJCQkgc2VuZGRtYWJ1Zm1hc2tbMV0pOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWJ1Zm1hc2syLAorCQkJIHNlbmRkbWFidWZtYXNrWzJdKTsKKworCUlOSVRfTElTVF9IRUFEKCZkZC0+aXBhdGhfc2RtYV9hY3RpdmVsaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGQtPmlwYXRoX3NkbWFfbm90aWZ5bGlzdCk7CisKKwl0YXNrbGV0X2luaXQoJmRkLT5pcGF0aF9zZG1hX25vdGlmeV90YXNrLCBzZG1hX25vdGlmeV90YXNrLAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZCk7CisJdGFza2xldF9pbml0KCZkZC0+aXBhdGhfc2RtYV9hYm9ydF90YXNrLCBzZG1hX2Fib3J0X3Rhc2ssCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRkKTsKKworCS8qCisJICogTm8gdXNlIHRvIHR1cm4gb24gU0RNQSBoZXJlLCBhcyBsaW5rIGlzIHByb2JhYmx5IG5vdCBBQ1RJVkUKKwkgKiBKdXN0IG1hcmsgaXQgUlVOTklORyBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHQsIGFuZCBsZXQgdGhlCisJICogaXBhdGhfcmVzdGFydF9zZG1hKCkgb24gbGluayB0cmFuc2l0aW9uIHRvIEFDVElWRSBhY3R1YWxseQorCSAqIGVuYWJsZSBpdC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NlbmRjdHJsX2xvY2ssIGZsYWdzKTsKKwlkZC0+aXBhdGhfc2VuZGN0cmwgfD0gSU5GSU5JUEFUSF9TX1NETUFJTlRFTkFCTEU7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwgZGQtPmlwYXRoX3NlbmRjdHJsKTsKKwlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwlfX3NldF9iaXQoSVBBVEhfU0RNQV9SVU5OSU5HLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgdGVhcmRvd25fc2RtYShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc3RydWN0IGlwYXRoX3NkbWFfdHhyZXEgKnR4cCwgKnR4cG5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkbWFfYWRkcl90IHNkbWFfaGVhZF9waHlzID0gMDsKKwlkbWFfYWRkcl90IHNkbWFfZGVzY3FfcGh5cyA9IDA7CisJdm9pZCAqc2RtYV9kZXNjcSA9IE5VTEw7CisJdm9pZCAqc2RtYV9oZWFkX2RtYSA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCV9fY2xlYXJfYml0KElQQVRIX1NETUFfUlVOTklORywgJmRkLT5pcGF0aF9zZG1hX3N0YXR1cyk7CisJX19zZXRfYml0KElQQVRIX1NETUFfQUJPUlRJTkcsICZkZC0+aXBhdGhfc2RtYV9zdGF0dXMpOworCV9fc2V0X2JpdChJUEFUSF9TRE1BX1NIVVRET1dOLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisKKwl0YXNrbGV0X2tpbGwoJmRkLT5pcGF0aF9zZG1hX2Fib3J0X3Rhc2spOworCXRhc2tsZXRfa2lsbCgmZGQtPmlwYXRoX3NkbWFfbm90aWZ5X3Rhc2spOworCisJLyogdHVybiBvZmYgc2RtYSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCWRkLT5pcGF0aF9zZW5kY3RybCAmPSB+SU5GSU5JUEFUSF9TX1NETUFFTkFCTEU7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJZGQtPmlwYXRoX3NlbmRjdHJsKTsKKwlpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zY3JhdGNoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKwkvKiBkZXF1ZXVlIGFsbCAic2VudCIgcmVxdWVzdHMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHhwLCB0eHBuZXh0LCAmZGQtPmlwYXRoX3NkbWFfYWN0aXZlbGlzdCwKKwkJCQkgbGlzdCkgeworCQl0eHAtPmNhbGxiYWNrX3N0YXR1cyA9IElQQVRIX1NETUFfVFhSRVFfU19TSFVURE9XTjsKKwkJaWYgKHR4cC0+ZmxhZ3MgJiBJUEFUSF9TRE1BX1RYUkVRX0ZfVkwxNSkKKwkJCXZsMTVfd2F0Y2hkb2dfZGVxKGRkKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJnR4cC0+bGlzdCwgJmRkLT5pcGF0aF9zZG1hX25vdGlmeWxpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisKKwlzZG1hX25vdGlmeV90YXNrYm9keShkZCk7CisKKwlkZWxfdGltZXJfc3luYygmZGQtPmlwYXRoX3NkbWFfdmwxNV90aW1lcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCisJZGQtPmlwYXRoX3NkbWFfYWJvcnRfamlmZmllcyA9IDA7CisKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFiYXNlLCAwKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFsZW5nZW4sIDApOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYXRhaWwsIDApOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWhlYWRhZGRyLCAwKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRkbWFidWZtYXNrMCwgMCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1hYnVmbWFzazEsIDApOworCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYWJ1Zm1hc2syLCAwKTsKKworCWlmIChkZC0+aXBhdGhfc2RtYV9oZWFkX2RtYSkgeworCQlzZG1hX2hlYWRfZG1hID0gKHZvaWQgKikgZGQtPmlwYXRoX3NkbWFfaGVhZF9kbWE7CisJCXNkbWFfaGVhZF9waHlzID0gZGQtPmlwYXRoX3NkbWFfaGVhZF9waHlzOworCQlkZC0+aXBhdGhfc2RtYV9oZWFkX2RtYSA9IE5VTEw7CisJCWRkLT5pcGF0aF9zZG1hX2hlYWRfcGh5cyA9IDA7CisJfQorCisJaWYgKGRkLT5pcGF0aF9zZG1hX2Rlc2NxKSB7CisJCXNkbWFfZGVzY3EgPSBkZC0+aXBhdGhfc2RtYV9kZXNjcTsKKwkJc2RtYV9kZXNjcV9waHlzID0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfcGh5czsKKwkJZGQtPmlwYXRoX3NkbWFfZGVzY3EgPSBOVUxMOworCQlkZC0+aXBhdGhfc2RtYV9kZXNjcV9waHlzID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisKKwlpZiAoc2RtYV9oZWFkX2RtYSkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCSAgc2RtYV9oZWFkX2RtYSwgc2RtYV9oZWFkX3BoeXMpOworCisJaWYgKHNkbWFfZGVzY3EpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIFNETUFfREVTQ1FfU1osCisJCQkJICBzZG1hX2Rlc2NxLCBzZG1hX2Rlc2NxX3BoeXMpOworfQorCisvKgorICogW1JlXXN0YXJ0IFNETUEsIGlmIHdlIHVzZSBpdCwgYW5kIGl0J3Mgbm90IGFscmVhZHkgT0suCisgKiBUaGlzIGlzIGNhbGxlZCBvbiB0cmFuc2l0aW9uIHRvIGxpbmsgQUNUSVZFLCBlaXRoZXIgdGhlIGZpcnN0IG9yCisgKiBzdWJzZXF1ZW50IHRpbWVzLgorICovCit2b2lkIGlwYXRoX3Jlc3RhcnRfc2RtYShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbmVlZGVkID0gMTsKKworCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0hBU19TRU5EX0RNQSkpCisJCWdvdG8gYmFpbDsKKworCS8qCisJICogRmlyc3QsIG1ha2Ugc3VyZSB3ZSBzaG91bGQsIHdoaWNoIGlzIHRvIHNheSwKKwkgKiBjaGVjayB0aGF0IHdlIGFyZSAiUlVOTklORyIgKG5vdCBpbiB0ZWFyZG93bikKKwkgKiBhbmQgbm90ICJTSFVURE9XTiIKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCWlmICghdGVzdF9iaXQoSVBBVEhfU0RNQV9SVU5OSU5HLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKQorCQl8fCB0ZXN0X2JpdChJUEFUSF9TRE1BX1NIVVRET1dOLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKSkKKwkJCW5lZWRlZCA9IDA7CisJZWxzZSB7CisJCV9fY2xlYXJfYml0KElQQVRIX1NETUFfRElTQUJMRUQsICZkZC0+aXBhdGhfc2RtYV9zdGF0dXMpOworCQlfX2NsZWFyX2JpdChJUEFUSF9TRE1BX0RJU0FSTUVELCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKTsKKwkJX19jbGVhcl9iaXQoSVBBVEhfU0RNQV9BQk9SVElORywgJmRkLT5pcGF0aF9zZG1hX3N0YXR1cyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZG1hX2xvY2ssIGZsYWdzKTsKKwlpZiAoIW5lZWRlZCkgeworCQlpcGF0aF9kYmcoImludmFsaWQgYXR0ZW1wdCB0byByZXN0YXJ0IFNETUEsIHN0YXR1cyAweCUwMTZsbHhcbiIsCisJCQlkZC0+aXBhdGhfc2RtYV9zdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2VuZGN0cmxfbG9jaywgZmxhZ3MpOworCS8qCisJICogRmlyc3QgY2xlYXIsIGp1c3QgdG8gYmUgc2FmZS4gRW5hYmxlIGlzIG9ubHkgZG9uZQorCSAqIGluIGNoaXAgb24gMC0+MSB0cmFuc2l0aW9uCisJICovCisJZGQtPmlwYXRoX3NlbmRjdHJsICY9IH5JTkZJTklQQVRIX1NfU0RNQUVOQUJMRTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLCBkZC0+aXBhdGhfc2VuZGN0cmwpOworCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCWRkLT5pcGF0aF9zZW5kY3RybCB8PSBJTkZJTklQQVRIX1NfU0RNQUVOQUJMRTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLCBkZC0+aXBhdGhfc2VuZGN0cmwpOworCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5pcGF0aF9zZW5kY3RybF9sb2NrLCBmbGFncyk7CisKK2JhaWw6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9zZG1hX2Rlc2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCXU2NCAqc2RtYWRlc2MsIHU2NCBhZGRyLCB1NjQgZHdsZW4sIHU2NCBkd29mZnNldCkKK3sKKwlXQVJOX09OKGFkZHIgJiAzKTsKKwkvKiBTRG1hUGh5QWRkcls0NzozMl0gKi8KKwlzZG1hZGVzY1sxXSA9IGFkZHIgPj4gMzI7CisJLyogU0RtYVBoeUFkZHJbMzE6MF0gKi8KKwlzZG1hZGVzY1swXSA9IChhZGRyICYgMHhmZmZmZmZmY1VMTCkgPDwgMzI7CisJLyogU0RtYUdlbmVyYXRpb25bMTowXSAqLworCXNkbWFkZXNjWzBdIHw9IChkZC0+aXBhdGhfc2RtYV9nZW5lcmF0aW9uICYgM1VMTCkgPDwgMzA7CisJLyogU0RtYUR3b3JkQ291bnRbMTA6MF0gKi8KKwlzZG1hZGVzY1swXSB8PSAoZHdsZW4gJiAweDdmZlVMTCkgPDwgMTY7CisJLyogU0RtYUJ1Zk9mZnNldFsxMjoyXSAqLworCXNkbWFkZXNjWzBdIHw9IGR3b2Zmc2V0ICYgMHg3ZmZVTEw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHF1ZXVlcyBvbmUgSUIgcGFja2V0IG9udG8gdGhlIHNlbmQgRE1BIHF1ZXVlIHBlciBjYWxsLgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmc6CisgKiAxKSBUaGUgbnVtYmVyIG9mIHNlbmQgRE1BIGRlc2NyaXB0b3IgZW50cmllcyBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2YKKyAqICAgIHRoZSBkZXNjcmlwdG9yIHF1ZXVlLgorICogMikgVGhlIElCIFNHRSBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgYXJlIDMyLWJpdCBhbGlnbmVkCisgKiAgICAoZXhjZXB0IHBvc3NpYmx5IHRoZSBsYXN0IFNHRSdzIGxlbmd0aCkKKyAqIDMpIFRoZSBTR0UgYWRkcmVzc2VzIGFyZSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBkbWFfbWFwX3NpbmdsZSgpLgorICovCitpbnQgaXBhdGhfc2RtYV92ZXJic19zZW5kKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywgdTMyIGR3b3JkcywKKwlzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXEgKnR4KQoreworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXBhdGhfc2dlICpzZ2U7CisJaW50IHJldCA9IDA7CisJdTE2IHRhaWw7CisJX19sZTY0ICpkZXNjcXA7CisJdTY0IHNkbWFkZXNjWzJdOworCXUzMiBkd29mZnNldDsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlpZiAoKHR4LT5tYXBfbGVuICsgKGR3b3Jkczw8MikpID4gZGQtPmlwYXRoX2libWF4bGVuKSB7CisJCWlwYXRoX2RiZygicGFja2V0IHNpemUgJVggPiBpYm1heCAlWCwgZmFpbFxuIiwKKwkJCXR4LT5tYXBfbGVuICsgKGR3b3Jkczw8MiksIGRkLT5pcGF0aF9pYm1heGxlbik7CisJCXJldCA9IC1FTVNHU0laRTsKKwkJZ290byBmYWlsOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisKK3JldHJ5OgorCWlmICh1bmxpa2VseSh0ZXN0X2JpdChJUEFUSF9TRE1BX0FCT1JUSU5HLCAmZGQtPmlwYXRoX3NkbWFfc3RhdHVzKSkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAodHgtPnR4cmVxLnNnX2NvdW50ID4gaXBhdGhfc2RtYV9kZXNjcV9mcmVlY250KGRkKSkgeworCQlpZiAoaXBhdGhfc2RtYV9tYWtlX3Byb2dyZXNzKGRkKSkKKwkJCWdvdG8gcmV0cnk7CisJCXJldCA9IC1FTk9CVUZTOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlhZGRyID0gZG1hX21hcF9zaW5nbGUoJmRkLT5wY2lkZXYtPmRldiwgdHgtPnR4cmVxLm1hcF9hZGRyLAorCQkJICAgICAgdHgtPm1hcF9sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihhZGRyKSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlkd29mZnNldCA9IHR4LT5tYXBfbGVuID4+IDI7CisJbWFrZV9zZG1hX2Rlc2MoZGQsIHNkbWFkZXNjLCAodTY0KSBhZGRyLCBkd29mZnNldCwgMCk7CisKKwkvKiBTRG1hRmlyc3REZXNjICovCisJc2RtYWRlc2NbMF0gfD0gMVVMTCA8PCAxMjsKKwlpZiAodHgtPnR4cmVxLmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX1VTRUxBUkdFQlVGKQorCQlzZG1hZGVzY1swXSB8PSAxVUxMIDw8IDE0OwkvKiBTRG1hVXNlTGFyZ2VCdWYgKi8KKworCS8qIHdyaXRlIHRvIHRoZSBkZXNjcSAqLworCXRhaWwgPSBkZC0+aXBhdGhfc2RtYV9kZXNjcV90YWlsOworCWRlc2NxcCA9ICZkZC0+aXBhdGhfc2RtYV9kZXNjcVt0YWlsXS5xd1swXTsKKwkqZGVzY3FwKysgPSBjcHVfdG9fbGU2NChzZG1hZGVzY1swXSk7CisJKmRlc2NxcCsrID0gY3B1X3RvX2xlNjQoc2RtYWRlc2NbMV0pOworCisJaWYgKHR4LT50eHJlcS5mbGFncyAmIElQQVRIX1NETUFfVFhSRVFfRl9GUkVFREVTQykKKwkJdHgtPnR4cmVxLnN0YXJ0X2lkeCA9IHRhaWw7CisKKwkvKiBpbmNyZW1lbnQgdGhlIHRhaWwgKi8KKwlpZiAoKyt0YWlsID09IGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudCkgeworCQl0YWlsID0gMDsKKwkJZGVzY3FwID0gJmRkLT5pcGF0aF9zZG1hX2Rlc2NxWzBdLnF3WzBdOworCQkrK2RkLT5pcGF0aF9zZG1hX2dlbmVyYXRpb247CisJfQorCisJc2dlID0gJnNzLT5zZ2U7CisJd2hpbGUgKGR3b3JkcykgeworCQl1MzIgZHc7CisJCXUzMiBsZW47CisKKwkJbGVuID0gZHdvcmRzIDw8IDI7CisJCWlmIChsZW4gPiBzZ2UtPmxlbmd0aCkKKwkJCWxlbiA9IHNnZS0+bGVuZ3RoOworCQlpZiAobGVuID4gc2dlLT5zZ2VfbGVuZ3RoKQorCQkJbGVuID0gc2dlLT5zZ2VfbGVuZ3RoOworCQlCVUdfT04obGVuID09IDApOworCQlkdyA9IChsZW4gKyAzKSA+PiAyOworCQlhZGRyID0gZG1hX21hcF9zaW5nbGUoJmRkLT5wY2lkZXYtPmRldiwgc2dlLT52YWRkciwgZHcgPDwgMiwKKwkJCQkgICAgICBETUFfVE9fREVWSUNFKTsKKwkJbWFrZV9zZG1hX2Rlc2MoZGQsIHNkbWFkZXNjLCAodTY0KSBhZGRyLCBkdywgZHdvZmZzZXQpOworCQkvKiBTRG1hVXNlTGFyZ2VCdWYgaGFzIHRvIGJlIHNldCBpbiBldmVyeSBkZXNjcmlwdG9yICovCisJCWlmICh0eC0+dHhyZXEuZmxhZ3MgJiBJUEFUSF9TRE1BX1RYUkVRX0ZfVVNFTEFSR0VCVUYpCisJCQlzZG1hZGVzY1swXSB8PSAxVUxMIDw8IDE0OworCQkvKiB3cml0ZSB0byB0aGUgZGVzY3EgKi8KKwkJKmRlc2NxcCsrID0gY3B1X3RvX2xlNjQoc2RtYWRlc2NbMF0pOworCQkqZGVzY3FwKysgPSBjcHVfdG9fbGU2NChzZG1hZGVzY1sxXSk7CisKKwkJLyogaW5jcmVtZW50IHRoZSB0YWlsICovCisJCWlmICgrK3RhaWwgPT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250KSB7CisJCQl0YWlsID0gMDsKKwkJCWRlc2NxcCA9ICZkZC0+aXBhdGhfc2RtYV9kZXNjcVswXS5xd1swXTsKKwkJCSsrZGQtPmlwYXRoX3NkbWFfZ2VuZXJhdGlvbjsKKwkJfQorCQlzZ2UtPnZhZGRyICs9IGxlbjsKKwkJc2dlLT5sZW5ndGggLT0gbGVuOworCQlzZ2UtPnNnZV9sZW5ndGggLT0gbGVuOworCQlpZiAoc2dlLT5zZ2VfbGVuZ3RoID09IDApIHsKKwkJCWlmICgtLXNzLT5udW1fc2dlKQorCQkJCSpzZ2UgPSAqc3MtPnNnX2xpc3QrKzsKKwkJfSBlbHNlIGlmIChzZ2UtPmxlbmd0aCA9PSAwICYmIHNnZS0+bXIgIT0gTlVMTCkgeworCQkJaWYgKCsrc2dlLT5uID49IElQQVRIX1NFR1NaKSB7CisJCQkJaWYgKCsrc2dlLT5tID49IHNnZS0+bXItPm1hcHN6KQorCQkJCQlicmVhazsKKwkJCQlzZ2UtPm4gPSAwOworCQkJfQorCQkJc2dlLT52YWRkciA9CisJCQkJc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS52YWRkcjsKKwkJCXNnZS0+bGVuZ3RoID0KKwkJCQlzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLmxlbmd0aDsKKwkJfQorCisJCWR3b2Zmc2V0ICs9IGR3OworCQlkd29yZHMgLT0gZHc7CisJfQorCisJaWYgKCF0YWlsKQorCQlkZXNjcXAgPSAmZGQtPmlwYXRoX3NkbWFfZGVzY3FbZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250XS5xd1swXTsKKwlkZXNjcXAgLT0gMjsKKwkvKiBTRG1hTGFzdERlc2MgKi8KKwlkZXNjcXBbMF0gfD0gX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDExKTsKKwlpZiAodHgtPnR4cmVxLmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX0lOVFJFUSkgeworCQkvKiBTRG1hSW50UmVxICovCisJCWRlc2NxcFswXSB8PSBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTUpOworCX0KKworCS8qIENvbW1pdCB3cml0ZXMgdG8gbWVtb3J5IGFuZCBhZHZhbmNlIHRoZSB0YWlsIG9uIHRoZSBjaGlwICovCisJd21iKCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kZG1hdGFpbCwgdGFpbCk7CisKKwl0eC0+dHhyZXEubmV4dF9kZXNjcV9pZHggPSB0YWlsOworCXR4LT50eHJlcS5jYWxsYmFja19zdGF0dXMgPSBJUEFUSF9TRE1BX1RYUkVRX1NfT0s7CisJZGQtPmlwYXRoX3NkbWFfZGVzY3FfdGFpbCA9IHRhaWw7CisJZGQtPmlwYXRoX3NkbWFfZGVzY3FfYWRkZWQgKz0gdHgtPnR4cmVxLnNnX2NvdW50OworCWxpc3RfYWRkX3RhaWwoJnR4LT50eHJlcS5saXN0LCAmZGQtPmlwYXRoX3NkbWFfYWN0aXZlbGlzdCk7CisJaWYgKHR4LT50eHJlcS5mbGFncyAmIElQQVRIX1NETUFfVFhSRVFfRl9WTDE1KQorCQl2bDE1X3dhdGNoZG9nX2VucShkZCk7CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3JxLmMKaW5kZXggZjc3MjEwMi4uZTNkODBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMjQ1LDcgKzI0NSw4IEBACiAJCQkJCQkgc2l6ZW9mKG9mZnNldF9hZGRyKSk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gYmFpbF9mcmVlOwotCQkJdWRhdGEtPm91dGJ1ZiA9ICh2b2lkIF9fdXNlciAqKSBvZmZzZXRfYWRkcjsKKwkJCXVkYXRhLT5vdXRidWYgPQorCQkJCSh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgb2Zmc2V0X2FkZHI7CiAJCQlyZXQgPSBpYl9jb3B5X3RvX3VkYXRhKHVkYXRhLCAmb2Zmc2V0LAogCQkJCQkgICAgICAgc2l6ZW9mKG9mZnNldCkpOwogCQkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zdGF0cy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMKaW5kZXggZDI3MjVjZC4uYzhlM2Q2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTEzNiw2ICsxMzYsNyBAQAogCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbMF07CiAJc2l6ZV90IGJsZW4gPSAwOwogCWNoYXIgYnVmWzEyOF07CisJdTMyIGhkcnF0YWlsOwogCiAJKmJ1ZiA9IDA7CiAJaWYgKHBkLT5wb3J0X2hkcnFmdWxsICE9IGRkLT5pcGF0aF9wMF9oZHJxZnVsbCkgewpAQCAtMTc0LDE3ICsxNzUsMTggQEAKIAlpZiAoYmxlbikKIAkJaXBhdGhfZGJnKCIlc1xuIiwgYnVmKTsKIAotCWlmIChwZC0+cG9ydF9oZWFkICE9ICh1MzIpCi0JICAgIGxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKSB7CisJaGRycXRhaWwgPSBpcGF0aF9nZXRfaGRycXRhaWwocGQpOworCWlmIChwZC0+cG9ydF9oZWFkICE9IGhkcnF0YWlsKSB7CiAJCWlmIChkZC0+aXBhdGhfbGFzdHBvcnQwcmN2X2NudCA9PQogCQkgICAgaXBhdGhfc3RhdHMuc3BzX3BvcnQwcGt0cykgewogCQkJaXBhdGhfY2RiZyhQS1QsICJtaXNzaW5nIHJjdiBpbnRlcnJ1cHRzPyAiCi0JCQkJICAgInBvcnQwIGhkPSVsbHggdGw9JXg7IHBvcnQwcGt0cyAlbGx4XG4iLAotCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJICAgbGU2NF90b19jcHUoKmRkLT5pcGF0aF9oZHJxdGFpbHB0ciksCi0JCQkJICAgcGQtPnBvcnRfaGVhZCwKKwkJCQkgICAicG9ydDAgaGQ9JXggdGw9JXg7IHBvcnQwcGt0cyAlbGx4OyB3cml0ZSIKKwkJCQkgICAiIGhkICh3L2ludHIpXG4iLAorCQkJCSAgIHBkLT5wb3J0X2hlYWQsIGhkcnF0YWlsLAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkJICAgaXBhdGhfc3RhdHMuc3BzX3BvcnQwcGt0cyk7CisJCQlpcGF0aF93cml0ZV91cmVnKGRkLCB1cl9yY3ZoZHJoZWFkLCBoZHJxdGFpbCB8CisJCQkJZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmLCBwZC0+cG9ydF9wb3J0KTsKIAkJfQogCQlkZC0+aXBhdGhfbGFzdHBvcnQwcmN2X2NudCA9IGlwYXRoX3N0YXRzLnNwc19wb3J0MHBrdHM7CiAJfQpAQCAtMjkwLDExICsyOTIsMTEgQEAKIAkgICAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBkZC0+aXBhdGhfdW5tYXNrdGltZSkpIHsKIAkJY2hhciBlYnVmWzI1Nl07CiAJCWludCBpc2VycjsKLQkJaXNlcnIgPSBpcGF0aF9kZWNvZGVfZXJyKGVidWYsIHNpemVvZiBlYnVmLAotCQkJZGQtPmlwYXRoX21hc2tlZGVycnMpOworCQlpc2VyciA9IGlwYXRoX2RlY29kZV9lcnIoZGQsIGVidWYsIHNpemVvZiBlYnVmLAorCQkJCQkgZGQtPmlwYXRoX21hc2tlZGVycnMpOwogCQlpZiAoZGQtPmlwYXRoX21hc2tlZGVycnMgJgotCQkJCX4oSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMIHwgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMIHwKLQkJCQlJTkZJTklQQVRIX0VfUEtURVJSUyApKQorCQkgICAgfihJTkZJTklQQVRIX0VfUlJDVkVHUkZVTEwgfCBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwgfAorCQkgICAgICBJTkZJTklQQVRIX0VfUEtURVJSUykpCiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiUmUtZW5hYmxpbmcgbWFza2VkIGVycm9ycyAiCiAJCQkJICAgICAgIiglcylcbiIsIGVidWYpOwogCQllbHNlIHsKQEAgLTMwNiwxNyArMzA4LDE4IEBACiAJCQkgKiBsZXZlbC4KIAkJCSAqLwogCQkJaWYgKGlzZXJyKQotCQkJCQlpcGF0aF9kYmcoIlJlLWVuYWJsaW5nIHF1ZXVlIGZ1bGwgZXJyb3JzICglcylcbiIsCi0JCQkJCQkJZWJ1Zik7CisJCQkJaXBhdGhfZGJnKAorCQkJCQkiUmUtZW5hYmxpbmcgcXVldWUgZnVsbCBlcnJvcnMgKCVzKVxuIiwKKwkJCQkJZWJ1Zik7CiAJCQllbHNlCiAJCQkJaXBhdGhfY2RiZyhFUlJQS1QsICJSZS1lbmFibGluZyBwYWNrZXQiCi0JCQkJCQkiIHByb2JsZW0gaW50ZXJydXB0ICglcylcbiIsIGVidWYpOworCQkJCQkiIHByb2JsZW0gaW50ZXJydXB0ICglcylcbiIsIGVidWYpOwogCQl9CiAKIAkJLyogcmUtZW5hYmxlIG1hc2tlZCBlcnJvcnMgKi8KIAkJZGQtPmlwYXRoX2Vycm9ybWFzayB8PSBkZC0+aXBhdGhfbWFza2VkZXJyczsKIAkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcm1hc2ssCi0JCQlkZC0+aXBhdGhfZXJyb3JtYXNrKTsKKwkJCQkgZGQtPmlwYXRoX2Vycm9ybWFzayk7CiAJCWRkLT5pcGF0aF9tYXNrZWRlcnJzID0gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N5c2ZzLmMKaW5kZXggNTZkZmM4YS4uYTZjOGVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N5c2ZzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAogLyoqCkBAIC0xNjMsNiArMTY0LDE1IEBACiAJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzIiwgZGQtPmlwYXRoX2JvYXJkdmVyc2lvbik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfbG9jYWxidXNfaW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCS8qIFRoZSBzdHJpbmcgcHJpbnRlZCBoZXJlIGlzIGFscmVhZHkgbmV3bGluZS10ZXJtaW5hdGVkLiAqLworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlcyIsIGRkLT5pcGF0aF9sYnVzX2luZm8pOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X2xtYyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCWNoYXIgKmJ1ZikKQEAgLTMxMSw2ICszMjEsOCBAQAogCiAJZGQtPmlwYXRoX2d1aWQgPSBuZXdfZ3VpZDsKIAlkZC0+aXBhdGhfbmd1aWQgPSAxOworCWlmIChkZC0+dmVyYnNfZGV2KQorCQlkZC0+dmVyYnNfZGV2LT5pYmRldi5ub2RlX2d1aWQgPSBuZXdfZ3VpZDsKIAogCXJldCA9IHN0cmxlbihidWYpOwogCWdvdG8gYmFpbDsKQEAgLTkxOSwyMSArOTMxLDIxIEBACiAJdTE2IHZhbDsKIAogCXJldCA9IGlwYXRoX3BhcnNlX3VzaG9ydChidWYsICZ2YWwpOwotCWlmIChyZXQgPCAwIHx8IHZhbCA+IDEpCi0JCWdvdG8gaW52YWxpZDsKLQotCXIgPSBkZC0+aXBhdGhfZl9zZXRfaWJfY2ZnKGRkLCBJUEFUSF9JQl9DRkdfUlhQT0xfRU5CLCB2YWwpOwotCWlmIChyIDwgMCkgewotCQlyZXQgPSByOworCWlmIChyZXQgPj0gMCAmJiB2YWwgPiAxKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsCisJCQkiYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBSeCBQb2xhcml0eSAoZW5hYmxlKVxuIik7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlnb3RvIGJhaWw7Ci1pbnZhbGlkOgotCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIHNldCBpbnZhbGlkIFJ4IFBvbGFyaXR5IChlbmFibGUpXG4iKTsKKwlyID0gZGQtPmlwYXRoX2Zfc2V0X2liX2NmZyhkZCwgSVBBVEhfSUJfQ0ZHX1JYUE9MX0VOQiwgdmFsKTsKKwlpZiAociA8IDApCisJCXJldCA9IHI7CisKIGJhaWw6CiAJcmV0dXJuIHJldDsKIH0KKwogLyoKICAqIEdldC9TZXQgUlggbGFuZS1yZXZlcnNhbCBlbmFibGUuIDA9bm8sIDE9eWVzLgogICovCkBAIC05ODgsNiArMTAwMCw3NSBAQAogCS5hdHRycyA9IGRyaXZlcl9hdHRyaWJ1dGVzCiB9OwogCitzdGF0aWMgc3NpemVfdCBzdG9yZV90ZW1wc2Vuc2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCwgc3RhdDsKKwl1MTYgdmFsOworCisJcmV0ID0gaXBhdGhfcGFyc2VfdXNob3J0KGJ1ZiwgJnZhbCk7CisJaWYgKHJldCA8PSAwKSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJhdHRlbXB0IHRvIHNldCBpbnZhbGlkIHRlbXBzZW5zZSBjb25maWdcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCS8qIElmIGFueXRoaW5nIGJ1dCB0aGUgaGlnaGVzdCBsaW1pdCwgZW5hYmxlIFRfQ1JJVF9BICJpbnRlcnJ1cHQiICovCisJc3RhdCA9IGlwYXRoX3RlbXBzZW5zZV93cml0ZShkZCwgOSwgKHZhbCA9PSAweDdmN2YpID8gMHg4MCA6IDApOworCWlmIChzdGF0KSB7CisJCWlwYXRoX2Rldl9lcnIoZGQsICJVbmFibGUgdG8gc2V0IHRlbXBzZW5zZSBjb25maWdcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byBiYWlsOworCX0KKwlzdGF0ID0gaXBhdGhfdGVtcHNlbnNlX3dyaXRlKGRkLCAweEIsICh1OCkgKHZhbCAmIDB4RkYpKTsKKwlpZiAoc3RhdCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIHNldCBsb2NhbCBUY3JpdFxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIGJhaWw7CisJfQorCXN0YXQgPSBpcGF0aF90ZW1wc2Vuc2Vfd3JpdGUoZGQsIDB4RCwgKHU4KSAodmFsID4+IDgpKTsKKwlpZiAoc3RhdCkgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiVW5hYmxlIHRvIHNldCByZW1vdGUgVGNyaXRcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byBiYWlsOworCX0KKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZHVtcCB0ZW1wc2Vuc2UgcmVncy4gaW4gZGVjaW1hbCwgdG8gZWFzZSBzaGVsbC1zY3JpcHRzLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBzZW5zZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCWludCBpZHg7CisJdTggcmVndmFsc1s4XTsKKworCXJldCA9IC1FTlhJTzsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDg7ICsraWR4KSB7CisJCWlmIChpZHggPT0gNikKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBpcGF0aF90ZW1wc2Vuc2VfcmVhZChkZCwgaWR4KTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJcmVndmFsc1tpZHhdID0gcmV0OworCX0KKwlpZiAoaWR4ID09IDgpCisJCXJldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkICVkICUwMlggJTAyWCAlZCAlZFxuIiwKKwkJCSooc2lnbmVkIGNoYXIgKikocmVndmFscyksCisJCQkqKHNpZ25lZCBjaGFyICopKHJlZ3ZhbHMgKyAxKSwKKwkJCXJlZ3ZhbHNbMl0sIHJlZ3ZhbHNbM10sCisJCQkqKHNpZ25lZCBjaGFyICopKHJlZ3ZhbHMgKyA1KSwKKwkJCSooc2lnbmVkIGNoYXIgKikocmVndmFscyArIDcpKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppcGF0aF9kcml2ZXJfYXR0cl9ncm91cHNbXSA9IHsKIAkmZHJpdmVyX2F0dHJfZ3JvdXAsCiAJTlVMTCwKQEAgLTEwMTEsMTAgKzEwOTIsMTMgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihyeF9wb2xfaW52LCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9yeF9wb2xfaW52KTsKIHN0YXRpYyBERVZJQ0VfQVRUUihsZWRfb3ZlcnJpZGUsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2xlZF9vdmVycmlkZSk7CiBzdGF0aWMgREVWSUNFX0FUVFIobG9nZ2VkX2Vycm9ycywgU19JUlVHTywgc2hvd19sb2dnZWRfZXJycywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobG9jYWxidXNfaW5mbywgU19JUlVHTywgc2hvd19sb2NhbGJ1c19pbmZvLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihqaW50X21heF9wYWNrZXRzLCBTX0lXVVNSIHwgU19JUlVHTywKIAkJICAgc2hvd19qaW50X21heF9wYWNrZXRzLCBzdG9yZV9qaW50X21heF9wYWNrZXRzKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihqaW50X2lkbGVfdGlja3MsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBzaG93X2ppbnRfaWRsZV90aWNrcywgc3RvcmVfamludF9pZGxlX3RpY2tzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wc2Vuc2UsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgICBzaG93X3RlbXBzZW5zZSwgc3RvcmVfdGVtcHNlbnNlKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRldl9hdHRyaWJ1dGVzW10gPSB7CiAJJmRldl9hdHRyX2d1aWQuYXR0ciwKQEAgLTEwMzQsNiArMTExOCw4IEBACiAJJmRldl9hdHRyX3J4X3BvbF9pbnYuYXR0ciwKIAkmZGV2X2F0dHJfbGVkX292ZXJyaWRlLmF0dHIsCiAJJmRldl9hdHRyX2xvZ2dlZF9lcnJvcnMuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcHNlbnNlLmF0dHIsCisJJmRldl9hdHRyX2xvY2FsYnVzX2luZm8uYXR0ciwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCmluZGV4IDJkZDhkZTIuLmJmZTg5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCkBAIC05NCw3ICs5NCw3IEBACiAJCQkJcXAtPnNfc3RhdGUgPQogCQkJCQlPUChTRU5EX09OTFlfV0lUSF9JTU1FRElBVEUpOwogCQkJCS8qIEltbWVkaWF0ZSBkYXRhIGNvbWVzIGFmdGVyIHRoZSBCVEggKi8KLQkJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5leC5pbW1fZGF0YTsKIAkJCQlod29yZHMgKz0gMTsKIAkJCX0KIAkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQkJCXFwLT5zX3N0YXRlID0KIAkJCQkJT1AoUkRNQV9XUklURV9PTkxZX1dJVEhfSU1NRURJQVRFKTsKIAkJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciB0aGUgUkVUSCAqLwotCQkJCW9oZHItPnUucmMuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOworCQkJCW9oZHItPnUucmMuaW1tX2RhdGEgPSB3cWUtPndyLmV4LmltbV9kYXRhOwogCQkJCWh3b3JkcyArPSAxOwogCQkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKIAkJCQkJYnRoMCB8PSAxIDw8IDIzOwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJCWVsc2UgewogCQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1RfV0lUSF9JTU1FRElBVEUpOwogCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgdGhlIEJUSCAqLwotCQkJb2hkci0+dS5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5leC5pbW1fZGF0YTsKIAkJCWh3b3JkcyArPSAxOwogCQl9CiAJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJcXAtPnNfc3RhdGUgPQogCQkJCU9QKFJETUFfV1JJVEVfTEFTVF9XSVRIX0lNTUVESUFURSk7CiAJCQkvKiBJbW1lZGlhdGUgZGF0YSBjb21lcyBhZnRlciB0aGUgQlRIICovCi0JCQlvaGRyLT51LmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJCW9oZHItPnUuaW1tX2RhdGEgPSB3cWUtPndyLmV4LmltbV9kYXRhOwogCQkJaHdvcmRzICs9IDE7CiAJCQlpZiAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCiAJCQkJYnRoMCB8PSAxIDw8IDIzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCBkZTY3ZWVkLi44YjZhMjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtOTUsNyArOTUsNyBAQAogCiAJaWYgKHN3cWUtPndyLm9wY29kZSA9PSBJQl9XUl9TRU5EX1dJVEhfSU1NKSB7CiAJCXdjLndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07Ci0JCXdjLmltbV9kYXRhID0gc3dxZS0+d3IuaW1tX2RhdGE7CisJCXdjLmltbV9kYXRhID0gc3dxZS0+d3IuZXguaW1tX2RhdGE7CiAJfSBlbHNlIHsKIAkJd2Mud2NfZmxhZ3MgPSAwOwogCQl3Yy5pbW1fZGF0YSA9IDA7CkBAIC0zMDMsNiArMzAzLDcgQEAKIAlxcC0+c19oZHJ3b3JkcyA9IDc7CiAJcXAtPnNfY3VyX3NpemUgPSB3cWUtPmxlbmd0aDsKIAlxcC0+c19jdXJfc2dlID0gJnFwLT5zX3NnZTsKKwlxcC0+c19kbXVsdCA9IGFoX2F0dHItPnN0YXRpY19yYXRlOwogCXFwLT5zX3dxZSA9IHdxZTsKIAlxcC0+c19zZ2Uuc2dlID0gd3FlLT5zZ19saXN0WzBdOwogCXFwLT5zX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKQEAgLTMyNiw3ICszMjcsNyBAQAogCX0KIAlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfU0VORF9XSVRIX0lNTSkgewogCQlxcC0+c19oZHJ3b3JkcysrOwotCQlvaGRyLT51LnVkLmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKKwkJb2hkci0+dS51ZC5pbW1fZGF0YSA9IHdxZS0+d3IuZXguaW1tX2RhdGE7CiAJCWJ0aDAgPSBJQl9PUENPREVfVURfU0VORF9PTkxZX1dJVEhfSU1NRURJQVRFIDw8IDI0OwogCX0gZWxzZQogCQlidGgwID0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWSA8PCAyNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmUwMTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCkBAIC0wLDAgKzEsODc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorI2luY2x1ZGUgImlwYXRoX3VzZXJfc2RtYS5oIgorCisvKiBtaW5pbXVtIHNpemUgb2YgaGVhZGVyICovCisjZGVmaW5lIElQQVRIX1VTRVJfU0RNQV9NSU5fSEVBREVSX0xFTkdUSAk2NAorLyogZXhwZWN0ZWQgc2l6ZSBvZiBoZWFkZXJzIChmb3IgZG1hX3Bvb2wpICovCisjZGVmaW5lIElQQVRIX1VTRVJfU0RNQV9FWFBfSEVBREVSX0xFTkdUSAk2NAorLyogbGVuZ3RoIG1hc2sgaW4gUEJDIChsb3dlciAxMSBiaXRzKSAqLworI2RlZmluZSBJUEFUSF9QQkNfTEVOR1RIX01BU0sJCQkoKDEgPDwgMTEpIC0gMSkKKworc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9wa3QgeworCXU4IG5hZGRyOwkJLyogZGltZW5zaW9uIG9mIGFkZHIgKDEuLjMpIC4uLiAqLworCXUzMiBjb3VudGVyOwkJLyogc2RtYSBwa3RzIHF1ZXVlZCBjb3VudGVyIGZvciB0aGlzIGVudHJ5ICovCisJdTY0IGFkZGVkOwkJLyogZ2xvYmFsIGRlc2NxIG51bWJlciBvZiBlbnRyaWVzICovCisKKwlzdHJ1Y3QgeworCQl1MzIgb2Zmc2V0OwkJCS8qIG9mZnNldCBmb3Iga3ZhZGRyLCBhZGRyICovCisJCXUzMiBsZW5ndGg7CQkJLyogbGVuZ3RoIGluIHBhZ2UgKi8KKwkJdTggIHB1dF9wYWdlOwkJCS8qIHNob3VsZCB3ZSBwdXRfcGFnZT8gKi8KKwkJdTggIGRtYV9tYXBwZWQ7CQkJLyogaXMgcGFnZSBkbWFfbWFwcGVkPyAqLworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsJCS8qIG1heSBiZSBOVUxMIChjb2hlcmVudCBtZW0pICovCisJCXZvaWQgKmt2YWRkcjsJCQkvKiBGSVhNRTogb25seSBmb3IgcGlvIGhhY2sgKi8KKwkJZG1hX2FkZHJfdCBhZGRyOworCX0gYWRkcls0XTsgICAvKiBtYXggcGFnZXMsIGFueSBtb3JlIGFuZCB3ZSBjb2FsZXNjZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbGlzdCBlbGVtZW50ICovCit9OworCitzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlIHsKKwkvKgorCSAqIHBrdHMgc2VudCB0byBkbWEgZW5naW5lIGFyZSBxdWV1ZWQgb24gdGhpcworCSAqIGxpc3QgaGVhZC4gIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBvZiB0aGlzCisJICogbGlzdCBhcmUgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9wa3QuLi4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNlbnQ7CisKKwkvKiBoZWFkZXJzIHdpdGggZXhwZWN0ZWQgbGVuZ3RoIGFyZSBhbGxvY2F0ZWQgZnJvbSBoZXJlLi4uICovCisJY2hhciBoZWFkZXJfY2FjaGVfbmFtZVs2NF07CisJc3RydWN0IGRtYV9wb29sICpoZWFkZXJfY2FjaGU7CisKKwkvKiBwYWNrZXRzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2xhYiBjYWNoZS4uLiAqLworCWNoYXIgcGt0X3NsYWJfbmFtZVs2NF07CisJc3RydWN0IGttZW1fY2FjaGUgKnBrdF9zbGFiOworCisJLyogYXMgcGFja2V0cyBnbyBvbiB0aGUgcXVldWVkIHF1ZXVlLCB0aGV5IGFyZSBjb3VudGVkLi4uICovCisJdTMyIGNvdW50ZXI7CisJdTMyIHNlbnRfY291bnRlcjsKKworCS8qIGRtYSBwYWdlIHRhYmxlICovCisJc3RydWN0IHJiX3Jvb3QgZG1hX3BhZ2VzX3Jvb3Q7CisKKwkvKiBwcm90ZWN0IGV2ZXJ5dGhpbmcgYWJvdmUuLi4gKi8KKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKK3N0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKgoraXBhdGhfdXNlcl9zZG1hX3F1ZXVlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCB1bml0LCBpbnQgcG9ydCwgaW50IHNwb3J0KQoreworCXN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKnBxID0KKwkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSksIEdGUF9LRVJORUwpOworCisJaWYgKCFwcSkKKwkJZ290byBkb25lOworCisJcHEtPmNvdW50ZXIgPSAwOworCXBxLT5zZW50X2NvdW50ZXIgPSAwOworCUlOSVRfTElTVF9IRUFEKCZwcS0+c2VudCk7CisKKwltdXRleF9pbml0KCZwcS0+bG9jayk7CisKKwlzbnByaW50ZihwcS0+cGt0X3NsYWJfbmFtZSwgc2l6ZW9mKHBxLT5wa3Rfc2xhYl9uYW1lKSwKKwkJICJpcGF0aC11c2VyLXNkbWEtcGt0cy0ldS0lMDJ1LiUwMnUiLCB1bml0LCBwb3J0LCBzcG9ydCk7CisJcHEtPnBrdF9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUocHEtPnBrdF9zbGFiX25hbWUsCisJCQkJCSBzaXplb2Yoc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9wa3QpLAorCQkJCQkgMCwgMCwgTlVMTCk7CisKKwlpZiAoIXBxLT5wa3Rfc2xhYikKKwkJZ290byBlcnJfa2ZyZWU7CisKKwlzbnByaW50ZihwcS0+aGVhZGVyX2NhY2hlX25hbWUsIHNpemVvZihwcS0+aGVhZGVyX2NhY2hlX25hbWUpLAorCQkgImlwYXRoLXVzZXItc2RtYS1oZWFkZXJzLSV1LSUwMnUuJTAydSIsIHVuaXQsIHBvcnQsIHNwb3J0KTsKKwlwcS0+aGVhZGVyX2NhY2hlID0gZG1hX3Bvb2xfY3JlYXRlKHBxLT5oZWFkZXJfY2FjaGVfbmFtZSwKKwkJCQkJICAgZGV2LAorCQkJCQkgICBJUEFUSF9VU0VSX1NETUFfRVhQX0hFQURFUl9MRU5HVEgsCisJCQkJCSAgIDQsIDApOworCWlmICghcHEtPmhlYWRlcl9jYWNoZSkKKwkJZ290byBlcnJfc2xhYjsKKworCXBxLT5kbWFfcGFnZXNfcm9vdCA9IFJCX1JPT1Q7CisKKwlnb3RvIGRvbmU7CisKK2Vycl9zbGFiOgorCWttZW1fY2FjaGVfZGVzdHJveShwcS0+cGt0X3NsYWIpOworZXJyX2tmcmVlOgorCWtmcmVlKHBxKTsKKwlwcSA9IE5VTEw7CisKK2RvbmU6CisJcmV0dXJuIHBxOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF91c2VyX3NkbWFfaW5pdF9mcmFnKHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0ICpwa3QsCisJCQkJICAgICAgaW50IGksIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sCisJCQkJICAgICAgaW50IHB1dF9wYWdlLCBpbnQgZG1hX21hcHBlZCwKKwkJCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICB2b2lkICprdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcGt0LT5hZGRyW2ldLm9mZnNldCA9IG9mZnNldDsKKwlwa3QtPmFkZHJbaV0ubGVuZ3RoID0gbGVuOworCXBrdC0+YWRkcltpXS5wdXRfcGFnZSA9IHB1dF9wYWdlOworCXBrdC0+YWRkcltpXS5kbWFfbWFwcGVkID0gZG1hX21hcHBlZDsKKwlwa3QtPmFkZHJbaV0ucGFnZSA9IHBhZ2U7CisJcGt0LT5hZGRyW2ldLmt2YWRkciA9IGt2YWRkcjsKKwlwa3QtPmFkZHJbaV0uYWRkciA9IGRtYV9hZGRyOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF91c2VyX3NkbWFfaW5pdF9oZWFkZXIoc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9wa3QgKnBrdCwKKwkJCQkJdTMyIGNvdW50ZXIsIHNpemVfdCBvZmZzZXQsCisJCQkJCXNpemVfdCBsZW4sIGludCBkbWFfbWFwcGVkLAorCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJdm9pZCAqa3ZhZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXBrdC0+bmFkZHIgPSAxOworCXBrdC0+Y291bnRlciA9IGNvdW50ZXI7CisJaXBhdGhfdXNlcl9zZG1hX2luaXRfZnJhZyhwa3QsIDAsIG9mZnNldCwgbGVuLCAwLCBkbWFfbWFwcGVkLCBwYWdlLAorCQkJCSAga3ZhZGRyLCBkbWFfYWRkcik7Cit9CisKKy8qIHdlJ3ZlIHRvbyBtYW55IHBhZ2VzIGluIHRoZSBpb3ZlYywgY29hbGVzY2UgdG8gYSBzaW5nbGUgcGFnZSAqLworc3RhdGljIGludCBpcGF0aF91c2VyX3NkbWFfY29hbGVzY2UoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICBzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3BrdCAqcGt0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBuaW92KSB7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXZvaWQgKm1wYWdlX3NhdmU7CisJY2hhciAqbXBhZ2U7CisJaW50IGk7CisJaW50IGxlbiA9IDA7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKworCWlmICghcGFnZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJbXBhZ2UgPSBrbWFwKHBhZ2UpOworCW1wYWdlX3NhdmUgPSBtcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgbmlvdjsgaSsrKSB7CisJCWludCBjZnVyOworCisJCWNmdXIgPSBjb3B5X2Zyb21fdXNlcihtcGFnZSwKKwkJCQkgICAgICBpb3ZbaV0uaW92X2Jhc2UsIGlvdltpXS5pb3ZfbGVuKTsKKwkJaWYgKGNmdXIpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGZyZWVfdW5tYXA7CisJCX0KKworCQltcGFnZSArPSBpb3ZbaV0uaW92X2xlbjsKKwkJbGVuICs9IGlvdltpXS5pb3ZfbGVuOworCX0KKworCWRtYV9hZGRyID0gZG1hX21hcF9wYWdlKCZkZC0+cGNpZGV2LT5kZXYsIHBhZ2UsIDAsIGxlbiwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHIpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV91bm1hcDsKKwl9CisKKwlpcGF0aF91c2VyX3NkbWFfaW5pdF9mcmFnKHBrdCwgMSwgMCwgbGVuLCAwLCAxLCBwYWdlLCBtcGFnZV9zYXZlLAorCQkJCSAgZG1hX2FkZHIpOworCXBrdC0+bmFkZHIgPSAyOworCisJZ290byBkb25lOworCitmcmVlX3VubWFwOgorCWt1bm1hcChwYWdlKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyogaG93IG1hbnkgcGFnZXMgaW4gdGhpcyBpb3ZlYyBlbGVtZW50PyAqLworc3RhdGljIGludCBpcGF0aF91c2VyX3NkbWFfbnVtX3BhZ2VzKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92KQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciAgPSAodW5zaWduZWQgbG9uZykgaW92LT5pb3ZfYmFzZTsKKwljb25zdCB1bnNpZ25lZCBsb25nICBsZW4gID0gaW92LT5pb3ZfbGVuOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgc3BhZ2UgPSBhZGRyICYgUEFHRV9NQVNLOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgZXBhZ2UgPSAoYWRkciArIGxlbiAtIDEpICYgUEFHRV9NQVNLOworCisJcmV0dXJuIDEgKyAoKGVwYWdlIC0gc3BhZ2UpID4+IFBBR0VfU0hJRlQpOworfQorCisvKiB0cnVuY2F0ZSBsZW5ndGggdG8gcGFnZSBib3VuZHJ5ICovCitzdGF0aWMgaW50IGlwYXRoX3VzZXJfc2RtYV9wYWdlX2xlbmd0aCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYWRkciAmIH5QQUdFX01BU0s7CisKKwlyZXR1cm4gKChvZmZzZXQgKyBsZW4pID4gUEFHRV9TSVpFKSA/IChQQUdFX1NJWkUgLSBvZmZzZXQpIDogbGVuOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF91c2VyX3NkbWFfZnJlZV9wa3RfZnJhZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEsCisJCQkJCSAgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9wa3QgKnBrdCwKKwkJCQkJICBpbnQgZnJhZykKK3sKKwljb25zdCBpbnQgaSA9IGZyYWc7CisKKwlpZiAocGt0LT5hZGRyW2ldLnBhZ2UpIHsKKwkJaWYgKHBrdC0+YWRkcltpXS5kbWFfbWFwcGVkKQorCQkJZG1hX3VubWFwX3BhZ2UoZGV2LAorCQkJCSAgICAgICBwa3QtPmFkZHJbaV0uYWRkciwKKwkJCQkgICAgICAgcGt0LT5hZGRyW2ldLmxlbmd0aCwKKwkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisKKwkJaWYgKHBrdC0+YWRkcltpXS5rdmFkZHIpCisJCQlrdW5tYXAocGt0LT5hZGRyW2ldLnBhZ2UpOworCisJCWlmIChwa3QtPmFkZHJbaV0ucHV0X3BhZ2UpCisJCQlwdXRfcGFnZShwa3QtPmFkZHJbaV0ucGFnZSk7CisJCWVsc2UKKwkJCV9fZnJlZV9wYWdlKHBrdC0+YWRkcltpXS5wYWdlKTsKKwl9IGVsc2UgaWYgKHBrdC0+YWRkcltpXS5rdmFkZHIpCisJCS8qIGZyZWUgY29oZXJlbnQgbWVtIGZyb20gY2FjaGUuLi4gKi8KKwkJZG1hX3Bvb2xfZnJlZShwcS0+aGVhZGVyX2NhY2hlLAorCQkJICAgICAgcGt0LT5hZGRyW2ldLmt2YWRkciwgcGt0LT5hZGRyW2ldLmFkZHIpOworfQorCisvKiByZXR1cm4gbnVtYmVyIG9mIHBhZ2VzIHBpbm5lZC4uLiAqLworc3RhdGljIGludCBpcGF0aF91c2VyX3NkbWFfcGluX3BhZ2VzKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0ICpwa3QsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCB0bGVuLCBpbnQgbnBhZ2VzKQoreworCXN0cnVjdCBwYWdlICpwYWdlc1syXTsKKwlpbnQgajsKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsCisJCQkgICAgIG5wYWdlcywgMCwgMSwgcGFnZXMsIE5VTEwpOworCisJaWYgKHJldCAhPSBucGFnZXMpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHJldDsgaSsrKQorCQkJcHV0X3BhZ2UocGFnZXNbaV0pOworCisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgbnBhZ2VzOyBqKyspIHsKKwkJLyogbWFwIHRoZSBwYWdlcy4uLiAqLworCQljb25zdCBpbnQgZmxlbiA9CisJCQlpcGF0aF91c2VyX3NkbWFfcGFnZV9sZW5ndGgoYWRkciwgdGxlbik7CisJCWRtYV9hZGRyX3QgZG1hX2FkZHIgPQorCQkJZG1hX21hcF9wYWdlKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJICAgICBwYWdlc1tqXSwgMCwgZmxlbiwgRE1BX1RPX0RFVklDRSk7CisJCXVuc2lnbmVkIGxvbmcgZm9mcyA9IGFkZHIgJiB+UEFHRV9NQVNLOworCisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcikpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpcGF0aF91c2VyX3NkbWFfaW5pdF9mcmFnKHBrdCwgcGt0LT5uYWRkciwgZm9mcywgZmxlbiwgMSwgMSwKKwkJCQkJICBwYWdlc1tqXSwga21hcChwYWdlc1tqXSksCisJCQkJCSAgZG1hX2FkZHIpOworCisJCXBrdC0+bmFkZHIrKzsKKwkJYWRkciArPSBmbGVuOworCQl0bGVuIC09IGZsZW47CisJfQorCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBhdGhfdXNlcl9zZG1hX3Bpbl9wa3QoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKnBxLAorCQkJCSAgIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0ICpwa3QsCisJCQkJICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJICAgdW5zaWduZWQgbG9uZyBuaW92KQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCBuaW92OyBpZHgrKykgeworCQljb25zdCBpbnQgbnBhZ2VzID0gaXBhdGhfdXNlcl9zZG1hX251bV9wYWdlcyhpb3YgKyBpZHgpOworCQljb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgaW92W2lkeF0uaW92X2Jhc2U7CisKKwkJcmV0ID0gaXBhdGhfdXNlcl9zZG1hX3Bpbl9wYWdlcyhkZCwgcGt0LAorCQkJCQkJYWRkciwgaW92W2lkeF0uaW92X2xlbiwKKwkJCQkJCW5wYWdlcyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmcmVlX3BrdDsKKwl9CisKKwlnb3RvIGRvbmU7CisKK2ZyZWVfcGt0OgorCWZvciAoaWR4ID0gMDsgaWR4IDwgcGt0LT5uYWRkcjsgaWR4KyspCisJCWlwYXRoX3VzZXJfc2RtYV9mcmVlX3BrdF9mcmFnKCZkZC0+cGNpZGV2LT5kZXYsIHBxLCBwa3QsIGlkeCk7CisKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF91c2VyX3NkbWFfaW5pdF9wYXlsb2FkKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkJc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEsCisJCQkJCXN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0ICpwa3QsCisJCQkJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCQl1bnNpZ25lZCBsb25nIG5pb3YsIGludCBucGFnZXMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAobnBhZ2VzID49IEFSUkFZX1NJWkUocGt0LT5hZGRyKSkKKwkJcmV0ID0gaXBhdGhfdXNlcl9zZG1hX2NvYWxlc2NlKGRkLCBwa3QsIGlvdiwgbmlvdik7CisJZWxzZQorCQlyZXQgPSBpcGF0aF91c2VyX3NkbWFfcGluX3BrdChkZCwgcHEsIHBrdCwgaW92LCBuaW92KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGZyZWUgYSBwYWNrZXQgbGlzdCAtLSByZXR1cm4gY291bnRlciB2YWx1ZSBvZiBsYXN0IHBhY2tldCAqLworc3RhdGljIHZvaWQgaXBhdGhfdXNlcl9zZG1hX2ZyZWVfcGt0X2xpc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKnBxLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9wa3QgKnBrdCwgKnBrdF9uZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgcGt0X25leHQsIGxpc3QsIGxpc3QpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHBrdC0+bmFkZHI7IGkrKykKKwkJCWlwYXRoX3VzZXJfc2RtYV9mcmVlX3BrdF9mcmFnKGRldiwgcHEsIHBrdCwgaSk7CisKKwkJa21lbV9jYWNoZV9mcmVlKHBxLT5wa3Rfc2xhYiwgcGt0KTsKKwl9Cit9CisKKy8qCisgKiBjb3B5IGhlYWRlcnMsIGNvYWxlc2NlIGV0YyAtLSBwcS0+bG9jayBtdXN0IGJlIGhlbGQKKyAqCisgKiB3ZSBxdWV1ZSBhbGwgdGhlIHBhY2tldHMgdG8gbGlzdCwgcmV0dXJuaW5nIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIHRvdGFsLiAgbGlzdCBtdXN0IGJlIGVtcHR5IGluaXRpYWxseSwKKyAqIGFzLCBpZiB0aGVyZSBpcyBhbiBlcnJvciB3ZSBjbGVhbiBpdC4uLgorICovCitzdGF0aWMgaW50IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZV9wa3RzKGNvbnN0IHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgICAgICBzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSwKKwkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmlvdiwKKwkJCQkgICAgICBpbnQgbWF4cGt0cykKK3sKKwl1bnNpZ25lZCBsb25nIGlkeCA9IDA7CisJaW50IHJldCA9IDA7CisJaW50IG5wa3RzID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJX19sZTMyICpwYmM7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3BrdCAqcGt0ID0gTlVMTDsKKwlzaXplX3QgbGVuOworCXNpemVfdCBudzsKKwl1MzIgY291bnRlciA9IHBxLT5jb3VudGVyOworCWludCBkbWFfbWFwcGVkID0gMDsKKworCXdoaWxlIChpZHggPCBuaW92ICYmIG5wa3RzIDwgbWF4cGt0cykgeworCQljb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgaW92W2lkeF0uaW92X2Jhc2U7CisJCWNvbnN0IHVuc2lnbmVkIGxvbmcgaWR4X3NhdmUgPSBpZHg7CisJCXVuc2lnbmVkIHBrdG53OworCQl1bnNpZ25lZCBwa3Rud2M7CisJCWludCBuZnJhZ3MgPSAwOworCQlpbnQgbnBhZ2VzID0gMDsKKwkJaW50IGNmdXI7CisKKwkJZG1hX21hcHBlZCA9IDA7CisJCWxlbiA9IGlvdltpZHhdLmlvdl9sZW47CisJCW53ID0gbGVuID4+IDI7CisJCXBhZ2UgPSBOVUxMOworCisJCXBrdCA9IGttZW1fY2FjaGVfYWxsb2MocHEtPnBrdF9zbGFiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwa3QpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfbGlzdDsKKwkJfQorCisJCWlmIChsZW4gPCBJUEFUSF9VU0VSX1NETUFfTUlOX0hFQURFUl9MRU5HVEggfHwKKwkJICAgIGxlbiA+IFBBR0VfU0laRSB8fCBsZW4gJiAzIHx8IGFkZHIgJiAzKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBmcmVlX3BrdDsKKwkJfQorCisJCWlmIChsZW4gPT0gSVBBVEhfVVNFUl9TRE1BX0VYUF9IRUFERVJfTEVOR1RIKQorCQkJcGJjID0gZG1hX3Bvb2xfYWxsb2MocHEtPmhlYWRlcl9jYWNoZSwgR0ZQX0tFUk5FTCwKKwkJCQkJICAgICAmZG1hX2FkZHIpOworCQllbHNlCisJCQlwYmMgPSBOVUxMOworCisJCWlmICghcGJjKSB7CisJCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJCWlmICghcGFnZSkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBmcmVlX3BrdDsKKwkJCX0KKwkJCXBiYyA9IGttYXAocGFnZSk7CisJCX0KKworCQljZnVyID0gY29weV9mcm9tX3VzZXIocGJjLCBpb3ZbaWR4XS5pb3ZfYmFzZSwgbGVuKTsKKwkJaWYgKGNmdXIpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGZyZWVfcGJjOworCQl9CisKKwkJLyoKKwkJICogdGhpcyBhc3NpZ25tZW50IGlzIGEgYml0IHN0cmFuZ2UuICBpdCdzIGJlY2F1c2UgdGhlCisJCSAqIHRoZSBwYmMgY291bnRzIHRoZSBudW1iZXIgb2YgMzIgYml0IHdvcmRzIGluIHRoZSBmdWxsCisJCSAqIHBhY2tldCBfZXhjZXB0XyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgcGJjIGl0c2VsZi4uLgorCQkgKi8KKwkJcGt0bndjID0gbncgLSAxOworCisJCS8qCisJCSAqIHBrdG53IGNvbXB1dGF0aW9uIHlpZWxkcyB0aGUgbnVtYmVyIG9mIDMyIGJpdCB3b3JkcworCQkgKiB0aGF0IHRoZSBjYWxsZXIgaGFzIGluZGljYXRlZCBpbiB0aGUgUEJDLiAgbm90ZSB0aGF0CisJCSAqIHRoaXMgaXMgb25lIGxlc3MgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIHdvcmRzIHRoYXQKKwkJICogZ29lcyB0byB0aGUgc2VuZCBETUEgZW5naW5lIGFzIHRoZSBmaXJzdCAzMiBiaXQgd29yZAorCQkgKiBvZiB0aGUgUEJDIGl0c2VsZiBpcyBub3QgY291bnRlZC4gIEFybWVkIHdpdGggdGhpcyBjb3VudCwKKwkJICogd2UgY2FuIHZlcmlmeSB0aGF0IHRoZSBwYWNrZXQgaXMgY29uc2lzdGVudCB3aXRoIHRoZQorCQkgKiBpb3ZlYyBsZW5ndGhzLgorCQkgKi8KKwkJcGt0bncgPSBsZTMyX3RvX2NwdSgqcGJjKSAmIElQQVRIX1BCQ19MRU5HVEhfTUFTSzsKKwkJaWYgKHBrdG53IDwgcGt0bndjIHx8IHBrdG53ID4gcGt0bndjICsgKFBBR0VfU0laRSA+PiAyKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZnJlZV9wYmM7CisJCX0KKworCisJCWlkeCsrOworCQl3aGlsZSAocGt0bndjIDwgcGt0bncgJiYgaWR4IDwgbmlvdikgeworCQkJY29uc3Qgc2l6ZV90IHNsZW4gPSBpb3ZbaWR4XS5pb3ZfbGVuOworCQkJY29uc3QgdW5zaWduZWQgbG9uZyBmYWRkciA9CisJCQkJKHVuc2lnbmVkIGxvbmcpIGlvdltpZHhdLmlvdl9iYXNlOworCisJCQlpZiAoc2xlbiAmIDMgfHwgZmFkZHIgJiAzIHx8ICFzbGVuIHx8CisJCQkgICAgc2xlbiA+IFBBR0VfU0laRSkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBmcmVlX3BiYzsKKwkJCX0KKworCQkJbnBhZ2VzKys7CisJCQlpZiAoKGZhZGRyICYgUEFHRV9NQVNLKSAhPQorCQkJICAgICgoZmFkZHIgKyBzbGVuIC0gMSkgJiBQQUdFX01BU0spKQorCQkJCW5wYWdlcysrOworCisJCQlwa3Rud2MgKz0gc2xlbiA+PiAyOworCQkJaWR4Kys7CisJCQluZnJhZ3MrKzsKKwkJfQorCisJCWlmIChwa3Rud2MgIT0gcGt0bncpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGZyZWVfcGJjOworCQl9CisKKwkJaWYgKHBhZ2UpIHsKKwkJCWRtYV9hZGRyID0gZG1hX21hcF9wYWdlKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJCQlwYWdlLCAwLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyKSkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBmcmVlX3BiYzsKKwkJCX0KKworCQkJZG1hX21hcHBlZCA9IDE7CisJCX0KKworCQlpcGF0aF91c2VyX3NkbWFfaW5pdF9oZWFkZXIocGt0LCBjb3VudGVyLCAwLCBsZW4sIGRtYV9tYXBwZWQsCisJCQkJCSAgICBwYWdlLCBwYmMsIGRtYV9hZGRyKTsKKworCQlpZiAobmZyYWdzKSB7CisJCQlyZXQgPSBpcGF0aF91c2VyX3NkbWFfaW5pdF9wYXlsb2FkKGRkLCBwcSwgcGt0LAorCQkJCQkJCSAgIGlvdiArIGlkeF9zYXZlICsgMSwKKwkJCQkJCQkgICBuZnJhZ3MsIG5wYWdlcyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGZyZWVfcGJjX2RtYTsKKwkJfQorCisJCWNvdW50ZXIrKzsKKwkJbnBrdHMrKzsKKworCQlsaXN0X2FkZF90YWlsKCZwa3QtPmxpc3QsIGxpc3QpOworCX0KKworCXJldCA9IGlkeDsKKwlnb3RvIGRvbmU7CisKK2ZyZWVfcGJjX2RtYToKKwlpZiAoZG1hX21hcHBlZCkKKwkJZG1hX3VubWFwX3BhZ2UoJmRkLT5wY2lkZXYtPmRldiwgZG1hX2FkZHIsIGxlbiwgRE1BX1RPX0RFVklDRSk7CitmcmVlX3BiYzoKKwlpZiAocGFnZSkgeworCQlrdW5tYXAocGFnZSk7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOworCX0gZWxzZQorCQlkbWFfcG9vbF9mcmVlKHBxLT5oZWFkZXJfY2FjaGUsIHBiYywgZG1hX2FkZHIpOworZnJlZV9wa3Q6CisJa21lbV9jYWNoZV9mcmVlKHBxLT5wa3Rfc2xhYiwgcGt0KTsKK2ZyZWVfbGlzdDoKKwlpcGF0aF91c2VyX3NkbWFfZnJlZV9wa3RfbGlzdCgmZGQtPnBjaWRldi0+ZGV2LCBwcSwgbGlzdCk7Citkb25lOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX3VzZXJfc2RtYV9zZXRfY29tcGxldGVfY291bnRlcihzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSwKKwkJCQkJCSB1MzIgYykKK3sKKwlwcS0+c2VudF9jb3VudGVyID0gYzsKK30KKworLyogdHJ5IHRvIGNsZWFuIG91dCBxdWV1ZSAtLSBuZWVkcyBwcS0+bG9jayAqLworc3RhdGljIGludCBpcGF0aF91c2VyX3NkbWFfcXVldWVfY2xlYW4oY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICAgICBzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwlzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3BrdCAqcGt0OworCXN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0ICpwa3RfcHJldjsKKwlpbnQgcmV0ID0gMDsKKworCUlOSVRfTElTVF9IRUFEKCZmcmVlX2xpc3QpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgcGt0X3ByZXYsICZwcS0+c2VudCwgbGlzdCkgeworCQlzNjQgZGVzY2QgPSBkZC0+aXBhdGhfc2RtYV9kZXNjcV9yZW1vdmVkIC0gcGt0LT5hZGRlZDsKKworCQlpZiAoZGVzY2QgPCAwKQorCQkJYnJlYWs7CisKKwkJbGlzdF9tb3ZlX3RhaWwoJnBrdC0+bGlzdCwgJmZyZWVfbGlzdCk7CisKKwkJLyogb25lIG1vcmUgcGFja2V0IGNsZWFuZWQgKi8KKwkJcmV0Kys7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZmcmVlX2xpc3QpKSB7CisJCXUzMiBjb3VudGVyOworCisJCXBrdCA9IGxpc3RfZW50cnkoZnJlZV9saXN0LnByZXYsCisJCQkJIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0LCBsaXN0KTsKKwkJY291bnRlciA9IHBrdC0+Y291bnRlcjsKKworCQlpcGF0aF91c2VyX3NkbWFfZnJlZV9wa3RfbGlzdCgmZGQtPnBjaWRldi0+ZGV2LCBwcSwgJmZyZWVfbGlzdCk7CisJCWlwYXRoX3VzZXJfc2RtYV9zZXRfY29tcGxldGVfY291bnRlcihwcSwgY291bnRlcik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcGF0aF91c2VyX3NkbWFfcXVldWVfZGVzdHJveShzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSkKK3sKKwlpZiAoIXBxKQorCQlyZXR1cm47CisKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocHEtPnBrdF9zbGFiKTsKKwlkbWFfcG9vbF9kZXN0cm95KHBxLT5oZWFkZXJfY2FjaGUpOworCWtmcmVlKHBxKTsKK30KKworLyogY2xlYW4gZGVzY3JpcHRvciBxdWV1ZSwgcmV0dXJucyA+IDAgaWYgc29tZSBlbGVtZW50cyBjbGVhbmVkICovCitzdGF0aWMgaW50IGlwYXRoX3VzZXJfc2RtYV9od3F1ZXVlX2NsZWFuKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCXJldCA9IGlwYXRoX3NkbWFfbWFrZV9wcm9ncmVzcyhkZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyogd2UncmUgaW4gY2xvc2UsIGRyYWluIHBhY2tldHMgc28gdGhhdCB3ZSBjYW4gY2xlYW51cCBzdWNjZXNzZnVsbHkuLi4gKi8KK3ZvaWQgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlX2RyYWluKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEpCit7CisJaW50IGk7CisKKwlpZiAoIXBxKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJbXV0ZXhfbG9jaygmcHEtPmxvY2spOworCQlpZiAobGlzdF9lbXB0eSgmcHEtPnNlbnQpKSB7CisJCQltdXRleF91bmxvY2soJnBxLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWlwYXRoX3VzZXJfc2RtYV9od3F1ZXVlX2NsZWFuKGRkKTsKKwkJaXBhdGhfdXNlcl9zZG1hX3F1ZXVlX2NsZWFuKGRkLCBwcSk7CisJCW11dGV4X3VubG9jaygmcHEtPmxvY2spOworCQltc2xlZXAoMTApOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmcHEtPnNlbnQpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OworCisJCXByaW50ayhLRVJOX0lORk8gImRyYWluOiBsaXN0cyBub3QgZW1wdHk6IGZvcmNpbmchXG4iKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmZyZWVfbGlzdCk7CisJCW11dGV4X2xvY2soJnBxLT5sb2NrKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcHEtPnNlbnQsICZmcmVlX2xpc3QpOworCQlpcGF0aF91c2VyX3NkbWFfZnJlZV9wa3RfbGlzdCgmZGQtPnBjaWRldi0+ZGV2LCBwcSwgJmZyZWVfbGlzdCk7CisJCW11dGV4X3VubG9jaygmcHEtPmxvY2spOworCX0KK30KKworc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2Rlc2MwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkJICAgdTY0IGFkZHIsIHU2NCBkd2xlbiwgdTY0IGR3b2Zmc2V0KQoreworCXJldHVybiBjcHVfdG9fbGU2NCgvKiBTRG1hUGh5QWRkclszMTowXSAqLworCQkJICAgKChhZGRyICYgMHhmZmZmZmZmY1VMTCkgPDwgMzIpIHwKKwkJCSAgIC8qIFNEbWFHZW5lcmF0aW9uWzE6MF0gKi8KKwkJCSAgICgoZGQtPmlwYXRoX3NkbWFfZ2VuZXJhdGlvbiAmIDNVTEwpIDw8IDMwKSB8CisJCQkgICAvKiBTRG1hRHdvcmRDb3VudFsxMDowXSAqLworCQkJICAgKChkd2xlbiAmIDB4N2ZmVUxMKSA8PCAxNikgfAorCQkJICAgLyogU0RtYUJ1Zk9mZnNldFsxMjoyXSAqLworCQkJICAgKGR3b2Zmc2V0ICYgMHg3ZmZVTEwpKTsKK30KKworc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2ZpcnN0X2Rlc2MwKF9fbGU2NCBkZXNjcSkKK3sKKwlyZXR1cm4gZGVzY3EgfCBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfbGFzdF9kZXNjMChfX2xlNjQgZGVzY3EpCit7CisJCQkJCSAgICAgIC8qIGxhc3QgKi8gIC8qIGRtYSBoZWFkICovCisJcmV0dXJuIGRlc2NxIHwgX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDExIHwgMVVMTCA8PCAxMyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19sZTY0IGlwYXRoX3NkbWFfbWFrZV9kZXNjMSh1NjQgYWRkcikKK3sKKwkvKiBTRG1hUGh5QWRkcls0NzozMl0gKi8KKwlyZXR1cm4gY3B1X3RvX2xlNjQoYWRkciA+PiAzMik7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX3VzZXJfc2RtYV9zZW5kX2ZyYWcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICAgIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0ICpwa3QsIGludCBpZHgsCisJCQkJICAgICAgdW5zaWduZWQgb2ZzLCB1MTYgdGFpbCkKK3sKKwljb25zdCB1NjQgYWRkciA9ICh1NjQpIHBrdC0+YWRkcltpZHhdLmFkZHIgKworCQkodTY0KSBwa3QtPmFkZHJbaWR4XS5vZmZzZXQ7CisJY29uc3QgdTY0IGR3bGVuID0gKHU2NCkgcGt0LT5hZGRyW2lkeF0ubGVuZ3RoIC8gNDsKKwlfX2xlNjQgKmRlc2NxcDsKKwlfX2xlNjQgZGVzY3EwOworCisJZGVzY3FwID0gJmRkLT5pcGF0aF9zZG1hX2Rlc2NxW3RhaWxdLnF3WzBdOworCisJZGVzY3EwID0gaXBhdGhfc2RtYV9tYWtlX2Rlc2MwKGRkLCBhZGRyLCBkd2xlbiwgb2ZzKTsKKwlpZiAoaWR4ID09IDApCisJCWRlc2NxMCA9IGlwYXRoX3NkbWFfbWFrZV9maXJzdF9kZXNjMChkZXNjcTApOworCWlmIChpZHggPT0gcGt0LT5uYWRkciAtIDEpCisJCWRlc2NxMCA9IGlwYXRoX3NkbWFfbWFrZV9sYXN0X2Rlc2MwKGRlc2NxMCk7CisKKwlkZXNjcXBbMF0gPSBkZXNjcTA7CisJZGVzY3FwWzFdID0gaXBhdGhfc2RtYV9tYWtlX2Rlc2MxKGFkZHIpOworfQorCisvKiBwcS0+bG9jayBtdXN0IGJlIGhlbGQsIGdldCBwYWNrZXRzIG9uIHRoZSB3aXJlLi4uICovCitzdGF0aWMgaW50IGlwYXRoX3VzZXJfc2RtYV9wdXNoX3BrdHMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAorCQkJCSAgICAgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwa3RsaXN0KQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHRhaWw7CisKKwlpZiAobGlzdF9lbXB0eShwa3RsaXN0KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSkpCisJCXJldHVybiAtRUNPTU07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmlwYXRoX3NkbWFfbG9jaywgZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KGRkLT5pcGF0aF9zZG1hX3N0YXR1cyAmIElQQVRIX1NETUFfQUJPUlRfTUFTSykpIHsKKwkJcmV0ID0gLUVDT01NOworCQlnb3RvIHVubG9jazsKKwl9CisKKwl0YWlsID0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfdGFpbDsKKwl3aGlsZSAoIWxpc3RfZW1wdHkocGt0bGlzdCkpIHsKKwkJc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9wa3QgKnBrdCA9CisJCQlsaXN0X2VudHJ5KHBrdGxpc3QtPm5leHQsIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcGt0LAorCQkJCSAgIGxpc3QpOworCQlpbnQgaTsKKwkJdW5zaWduZWQgb2ZzID0gMDsKKwkJdTE2IGR0YWlsID0gdGFpbDsKKworCQlpZiAocGt0LT5uYWRkciA+IGlwYXRoX3NkbWFfZGVzY3FfZnJlZWNudChkZCkpCisJCQlnb3RvIHVubG9ja19jaGVja190YWlsOworCisJCWZvciAoaSA9IDA7IGkgPCBwa3QtPm5hZGRyOyBpKyspIHsKKwkJCWlwYXRoX3VzZXJfc2RtYV9zZW5kX2ZyYWcoZGQsIHBrdCwgaSwgb2ZzLCB0YWlsKTsKKwkJCW9mcyArPSBwa3QtPmFkZHJbaV0ubGVuZ3RoID4+IDI7CisKKwkJCWlmICgrK3RhaWwgPT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250KSB7CisJCQkJdGFpbCA9IDA7CisJCQkJKytkZC0+aXBhdGhfc2RtYV9nZW5lcmF0aW9uOworCQkJfQorCQl9CisKKwkJaWYgKChvZnM8PDIpID4gZGQtPmlwYXRoX2libWF4bGVuKSB7CisJCQlpcGF0aF9kYmcoInBhY2tldCBzaXplICVYID4gaWJtYXggJVgsIGZhaWxcbiIsCisJCQkJb2ZzPDwyLCBkZC0+aXBhdGhfaWJtYXhsZW4pOworCQkJcmV0ID0gLUVNU0dTSVpFOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQkvKgorCQkgKiBpZiB0aGUgcGFja2V0IGlzID49IDJLQiBtdHUgZXF1aXZhbGVudCwgd2UgaGF2ZSB0byB1c2UKKwkJICogdGhlIGxhcmdlIGJ1ZmZlcnMsIGFuZCBoYXZlIHRvIG1hcmsgZWFjaCBkZXNjcmlwdG9yIGFzCisJCSAqIHBhcnQgb2YgYSBsYXJnZSBidWZmZXIgcGFja2V0LgorCQkgKi8KKwkJaWYgKG9mcyA+PSBJUEFUSF9TTUFMTEJVRl9EV09SRFMpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBwa3QtPm5hZGRyOyBpKyspIHsKKwkJCQlkZC0+aXBhdGhfc2RtYV9kZXNjcVtkdGFpbF0ucXdbMF0gfD0KKwkJCQkJX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDE0KTsKKwkJCQlpZiAoKytkdGFpbCA9PSBkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnQpCisJCQkJCWR0YWlsID0gMDsKKwkJCX0KKwkJfQorCisJCWRkLT5pcGF0aF9zZG1hX2Rlc2NxX2FkZGVkICs9IHBrdC0+bmFkZHI7CisJCXBrdC0+YWRkZWQgPSBkZC0+aXBhdGhfc2RtYV9kZXNjcV9hZGRlZDsKKwkJbGlzdF9tb3ZlX3RhaWwoJnBrdC0+bGlzdCwgJnBxLT5zZW50KTsKKwkJcmV0Kys7CisJfQorCit1bmxvY2tfY2hlY2tfdGFpbDoKKwkvKiBhZHZhbmNlIHRoZSB0YWlsIG9uIHRoZSBjaGlwIGlmIG5lY2Vzc2FyeSAqLworCWlmIChkZC0+aXBhdGhfc2RtYV9kZXNjcV90YWlsICE9IHRhaWwpIHsKKwkJd21iKCk7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGRtYXRhaWwsIHRhaWwpOworCQlkZC0+aXBhdGhfc2RtYV9kZXNjcV90YWlsID0gdGFpbDsKKwl9CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfc2RtYV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXBhdGhfdXNlcl9zZG1hX3dyaXRldihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkgICBzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgdW5zaWduZWQgbG9uZyBkaW0pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWludCBucGt0cyA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CisKKwltdXRleF9sb2NrKCZwcS0+bG9jayk7CisKKwlpZiAoZGQtPmlwYXRoX3NkbWFfZGVzY3FfYWRkZWQgIT0gZGQtPmlwYXRoX3NkbWFfZGVzY3FfcmVtb3ZlZCkgeworCQlpcGF0aF91c2VyX3NkbWFfaHdxdWV1ZV9jbGVhbihkZCk7CisJCWlwYXRoX3VzZXJfc2RtYV9xdWV1ZV9jbGVhbihkZCwgcHEpOworCX0KKworCXdoaWxlIChkaW0pIHsKKwkJY29uc3QgaW50IG14cCA9IDg7CisKKwkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gaXBhdGhfdXNlcl9zZG1hX3F1ZXVlX3BrdHMoZGQsIHBxLCAmbGlzdCwgaW92LCBkaW0sIG14cCk7CisJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJCWlmIChyZXQgPD0gMCkKKwkJCWdvdG8gZG9uZV91bmxvY2s7CisJCWVsc2UgeworCQkJZGltIC09IHJldDsKKwkJCWlvdiArPSByZXQ7CisJCX0KKworCQkvKiBmb3JjZSBwYWNrZXRzIG9udG8gdGhlIHNkbWEgaHcgcXVldWUuLi4gKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZsaXN0KSkgeworCQkJLyoKKwkJCSAqIGxhemlseSBjbGVhbiBodyBxdWV1ZS4gIHRoZSA0IGlzIGEgZ3Vlc3Mgb2YgYWJvdXQKKwkJCSAqIGhvdyBtYW55IHNkbWEgZGVzY3JpcHRvcnMgYSBwYWNrZXQgd2lsbCB0YWtlIChpdAorCQkJICogZG9lc24ndCBoYXZlIHRvIGJlIHBlcmZlY3QpLgorCQkJICovCisJCQlpZiAoaXBhdGhfc2RtYV9kZXNjcV9mcmVlY250KGRkKSA8IHJldCAqIDQpIHsKKwkJCQlpcGF0aF91c2VyX3NkbWFfaHdxdWV1ZV9jbGVhbihkZCk7CisJCQkJaXBhdGhfdXNlcl9zZG1hX3F1ZXVlX2NsZWFuKGRkLCBwcSk7CisJCQl9CisKKwkJCXJldCA9IGlwYXRoX3VzZXJfc2RtYV9wdXNoX3BrdHMoZGQsIHBxLCAmbGlzdCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGRvbmVfdW5sb2NrOworCQkJZWxzZSB7CisJCQkJbnBrdHMgKz0gcmV0OworCQkJCXBxLT5jb3VudGVyICs9IHJldDsKKworCQkJCWlmICghbGlzdF9lbXB0eSgmbGlzdCkpCisJCQkJCWdvdG8gZG9uZV91bmxvY2s7CisJCQl9CisJCX0KKwl9CisKK2RvbmVfdW5sb2NrOgorCWlmICghbGlzdF9lbXB0eSgmbGlzdCkpCisJCWlwYXRoX3VzZXJfc2RtYV9mcmVlX3BrdF9saXN0KCZkZC0+cGNpZGV2LT5kZXYsIHBxLCAmbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwcS0+bG9jayk7CisKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogbnBrdHM7Cit9CisKK2ludCBpcGF0aF91c2VyX3NkbWFfbWFrZV9wcm9ncmVzcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICBzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnBxLT5sb2NrKTsKKwlpcGF0aF91c2VyX3NkbWFfaHdxdWV1ZV9jbGVhbihkZCk7CisJcmV0ID0gaXBhdGhfdXNlcl9zZG1hX3F1ZXVlX2NsZWFuKGRkLCBwcSk7CisJbXV0ZXhfdW5sb2NrKCZwcS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCit1MzIgaXBhdGhfdXNlcl9zZG1hX2NvbXBsZXRlX2NvdW50ZXIoY29uc3Qgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEpCit7CisJcmV0dXJuIHBxLT5zZW50X2NvdW50ZXI7Cit9CisKK3UzMiBpcGF0aF91c2VyX3NkbWFfaW5mbGlnaHRfY291bnRlcihzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSkKK3sKKwlyZXR1cm4gcHEtPmNvdW50ZXI7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA5NDZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZTsKKworc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqCitpcGF0aF91c2VyX3NkbWFfcXVldWVfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHVuaXQsIGludCBwb3J0LCBpbnQgc3BvcnQpOwordm9pZCBpcGF0aF91c2VyX3NkbWFfcXVldWVfZGVzdHJveShzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSk7CisKK2ludCBpcGF0aF91c2VyX3NkbWFfd3JpdGV2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCSAgIHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKnBxLAorCQkJICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICB1bnNpZ25lZCBsb25nIGRpbSk7CisKK2ludCBpcGF0aF91c2VyX3NkbWFfbWFrZV9wcm9ncmVzcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCQkJICBzdHJ1Y3QgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlICpwcSk7CisKK2ludCBpcGF0aF91c2VyX3NkbWFfcGt0X3NlbnQoY29uc3Qgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEsCisJCQkgICAgIHUzMiBjb3VudGVyKTsKK3ZvaWQgaXBhdGhfdXNlcl9zZG1hX3F1ZXVlX2RyYWluKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCQkgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEpOworCit1MzIgaXBhdGhfdXNlcl9zZG1hX2NvbXBsZXRlX2NvdW50ZXIoY29uc3Qgc3RydWN0IGlwYXRoX3VzZXJfc2RtYV9xdWV1ZSAqcHEpOwordTMyIGlwYXRoX3VzZXJfc2RtYV9pbmZsaWdodF9jb3VudGVyKHN0cnVjdCBpcGF0aF91c2VyX3NkbWFfcXVldWUgKnBxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKaW5kZXggMzJkOGY4OC4uZTYzOTI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IFFMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTEwOSw3ICsxMDksNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGliX2lwYXRoX2Rpc2FibGVfc21hOwogbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfc21hLCBpYl9pcGF0aF9kaXNhYmxlX3NtYSwgdWludCwgU19JV1VTUiB8IFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhpYl9pcGF0aF9kaXNhYmxlX3NtYSwgIkRpc2FibGUgdGhlIFNNQSIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3NtYSwgIkRpc2FibGUgdGhlIFNNQSIpOwogCiBjb25zdCBpbnQgaWJfaXBhdGhfc3RhdGVfb3BzW0lCX1FQU19FUlIgKyAxXSA9IHsKIAlbSUJfUVBTX1JFU0VUXSA9IDAsCkBAIC0yNDIsNiArMjQyLDkzIEBACiAJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCAmd2MsIDEpOwogfQogCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBETUEgZGVzY3JpcHRvcnMgbmVlZGVkIHRvIHNlbmQgbGVuZ3RoIGJ5dGVzIG9mIGRhdGEuCisgKiBEb24ndCBtb2RpZnkgdGhlIGlwYXRoX3NnZV9zdGF0ZSB0byBnZXQgdGhlIGNvdW50LgorICogUmV0dXJuIHplcm8gaWYgYW55IG9mIHRoZSBzZWdtZW50cyBpcyBub3QgYWxpZ25lZC4KKyAqLworc3RhdGljIHUzMiBpcGF0aF9jb3VudF9zZ2Uoc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHUzMiBsZW5ndGgpCit7CisJc3RydWN0IGlwYXRoX3NnZSAqc2dfbGlzdCA9IHNzLT5zZ19saXN0OworCXN0cnVjdCBpcGF0aF9zZ2Ugc2dlID0gc3MtPnNnZTsKKwl1OCBudW1fc2dlID0gc3MtPm51bV9zZ2U7CisJdTMyIG5kZXNjID0gMTsJLyogY291bnQgdGhlIGhlYWRlciAqLworCisJd2hpbGUgKGxlbmd0aCkgeworCQl1MzIgbGVuID0gc2dlLmxlbmd0aDsKKworCQlpZiAobGVuID4gbGVuZ3RoKQorCQkJbGVuID0gbGVuZ3RoOworCQlpZiAobGVuID4gc2dlLnNnZV9sZW5ndGgpCisJCQlsZW4gPSBzZ2Uuc2dlX2xlbmd0aDsKKwkJQlVHX09OKGxlbiA9PSAwKTsKKwkJaWYgKCgobG9uZykgc2dlLnZhZGRyICYgKHNpemVvZih1MzIpIC0gMSkpIHx8CisJCSAgICAobGVuICE9IGxlbmd0aCAmJiAobGVuICYgKHNpemVvZih1MzIpIC0gMSkpKSkgeworCQkJbmRlc2MgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJbmRlc2MrKzsKKwkJc2dlLnZhZGRyICs9IGxlbjsKKwkJc2dlLmxlbmd0aCAtPSBsZW47CisJCXNnZS5zZ2VfbGVuZ3RoIC09IGxlbjsKKwkJaWYgKHNnZS5zZ2VfbGVuZ3RoID09IDApIHsKKwkJCWlmICgtLW51bV9zZ2UpCisJCQkJc2dlID0gKnNnX2xpc3QrKzsKKwkJfSBlbHNlIGlmIChzZ2UubGVuZ3RoID09IDAgJiYgc2dlLm1yICE9IE5VTEwpIHsKKwkJCWlmICgrK3NnZS5uID49IElQQVRIX1NFR1NaKSB7CisJCQkJaWYgKCsrc2dlLm0gPj0gc2dlLm1yLT5tYXBzeikKKwkJCQkJYnJlYWs7CisJCQkJc2dlLm4gPSAwOworCQkJfQorCQkJc2dlLnZhZGRyID0KKwkJCQlzZ2UubXItPm1hcFtzZ2UubV0tPnNlZ3Nbc2dlLm5dLnZhZGRyOworCQkJc2dlLmxlbmd0aCA9CisJCQkJc2dlLm1yLT5tYXBbc2dlLm1dLT5zZWdzW3NnZS5uXS5sZW5ndGg7CisJCX0KKwkJbGVuZ3RoIC09IGxlbjsKKwl9CisJcmV0dXJuIG5kZXNjOworfQorCisvKgorICogQ29weSBmcm9tIHRoZSBTR0VzIHRvIHRoZSBkYXRhIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfY29weV9mcm9tX3NnZSh2b2lkICpkYXRhLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJCQl1MzIgbGVuZ3RoKQoreworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOworCisJd2hpbGUgKGxlbmd0aCkgeworCQl1MzIgbGVuID0gc2dlLT5sZW5ndGg7CisKKwkJaWYgKGxlbiA+IGxlbmd0aCkKKwkJCWxlbiA9IGxlbmd0aDsKKwkJaWYgKGxlbiA+IHNnZS0+c2dlX2xlbmd0aCkKKwkJCWxlbiA9IHNnZS0+c2dlX2xlbmd0aDsKKwkJQlVHX09OKGxlbiA9PSAwKTsKKwkJbWVtY3B5KGRhdGEsIHNnZS0+dmFkZHIsIGxlbik7CisJCXNnZS0+dmFkZHIgKz0gbGVuOworCQlzZ2UtPmxlbmd0aCAtPSBsZW47CisJCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW47CisJCWlmIChzZ2UtPnNnZV9sZW5ndGggPT0gMCkgeworCQkJaWYgKC0tc3MtPm51bV9zZ2UpCisJCQkJKnNnZSA9ICpzcy0+c2dfbGlzdCsrOworCQl9IGVsc2UgaWYgKHNnZS0+bGVuZ3RoID09IDAgJiYgc2dlLT5tciAhPSBOVUxMKSB7CisJCQlpZiAoKytzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCisJCQkJCWJyZWFrOworCQkJCXNnZS0+biA9IDA7CisJCQl9CisJCQlzZ2UtPnZhZGRyID0KKwkJCQlzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLnZhZGRyOworCQkJc2dlLT5sZW5ndGggPQorCQkJCXNnZS0+bXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoOworCQl9CisJCWRhdGEgKz0gbGVuOworCQlsZW5ndGggLT0gbGVuOworCX0KK30KKwogLyoqCiAgKiBpcGF0aF9wb3N0X29uZV9zZW5kIC0gcG9zdCBvbmUgUkMsIFVDLCBvciBVRCBzZW5kIHdvcmsgcmVxdWVzdAogICogQHFwOiB0aGUgUVAgdG8gcG9zdCBvbgpAQCAtODY2LDI3ICs5NTMsMjU3IEBACiAJCV9fcmF3X3dyaXRlbChsYXN0LCBwaW9idWYpOwogfQogCi1zdGF0aWMgaW50IGlwYXRoX3ZlcmJzX3NlbmRfcGlvKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHUzMiAqaGRyLCB1MzIgaGRyd29yZHMsCisvKgorICogQ29udmVydCBJQiByYXRlIHRvIGRlbGF5IG11bHRpcGxpZXIuCisgKi8KK3Vuc2lnbmVkIGlwYXRoX2liX3JhdGVfdG9fbXVsdChlbnVtIGliX3JhdGUgcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIElCX1JBVEVfMl81X0dCUFM6IHJldHVybiA4OworCWNhc2UgSUJfUkFURV81X0dCUFM6ICAgcmV0dXJuIDQ7CisJY2FzZSBJQl9SQVRFXzEwX0dCUFM6ICByZXR1cm4gMjsKKwljYXNlIElCX1JBVEVfMjBfR0JQUzogIHJldHVybiAxOworCWRlZmF1bHQ6CSAgICAgICByZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBDb252ZXJ0IGRlbGF5IG11bHRpcGxpZXIgdG8gSUIgcmF0ZQorICovCitzdGF0aWMgZW51bSBpYl9yYXRlIGlwYXRoX211bHRfdG9faWJfcmF0ZSh1bnNpZ25lZCBtdWx0KQoreworCXN3aXRjaCAobXVsdCkgeworCWNhc2UgODogIHJldHVybiBJQl9SQVRFXzJfNV9HQlBTOworCWNhc2UgNDogIHJldHVybiBJQl9SQVRFXzVfR0JQUzsKKwljYXNlIDI6ICByZXR1cm4gSUJfUkFURV8xMF9HQlBTOworCWNhc2UgMTogIHJldHVybiBJQl9SQVRFXzIwX0dCUFM7CisJZGVmYXVsdDogcmV0dXJuIElCX1JBVEVfUE9SVF9DVVJSRU5UOworCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXEgKmdldF90eHJlcShzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldikKK3sKKwlzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXEgKnR4ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPnR4cmVxX2ZyZWUpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmwgPSBkZXYtPnR4cmVxX2ZyZWUubmV4dDsKKworCQlsaXN0X2RlbChsKTsKKwkJdHggPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBpcGF0aF92ZXJic190eHJlcSwgdHhyZXEubGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHR4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3R4cmVxKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXEgKnR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmdHgtPnR4cmVxLmxpc3QsICZkZXYtPnR4cmVxX2ZyZWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNkbWFfY29tcGxldGUodm9pZCAqY29va2llLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBpcGF0aF92ZXJic190eHJlcSAqdHggPSBjb29raWU7CisJc3RydWN0IGlwYXRoX3FwICpxcCA9IHR4LT5xcDsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKworCS8qIEdlbmVyYXRlIGEgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSBpZiBuZWVkZWQgKi8KKwlpZiAocXAtPmlicXAucXBfdHlwZSAhPSBJQl9RUFRfUkMgJiYgdHgtPndxZSkgeworCQllbnVtIGliX3djX3N0YXR1cyBpYnMgPSBzdGF0dXMgPT0gSVBBVEhfU0RNQV9UWFJFUV9TX09LID8KKwkJCUlCX1dDX1NVQ0NFU1MgOiBJQl9XQ19XUl9GTFVTSF9FUlI7CisKKwkJaXBhdGhfc2VuZF9jb21wbGV0ZShxcCwgdHgtPndxZSwgaWJzKTsKKwl9CisKKwlpZiAodHgtPnR4cmVxLmZsYWdzICYgSVBBVEhfU0RNQV9UWFJFUV9GX0ZSRUVCVUYpCisJCWtmcmVlKHR4LT50eHJlcS5tYXBfYWRkcik7CisJcHV0X3R4cmVxKGRldiwgdHgpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnFwLT5yZWZjb3VudCkpCisJCXdha2VfdXAoJnFwLT53YWl0KTsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMgb2YgZGVsYXkgYmVmb3JlIHNlbmRpbmcgdGhlIG5leHQgcGFja2V0LgorICogVGhlIG11bHRpcGxpZXJzIHJlZmxlY3QgdGhlIG51bWJlciBvZiBjbG9ja3MgZm9yIHRoZSBmYXN0ZXN0IHJhdGUgc28KKyAqIG9uZSB0aWNrIGF0IDR4RERSIGlzIDggdGlja3MgYXQgMXhTRFIuCisgKiBJZiB0aGUgZGVzdGluYXRpb24gcG9ydCB3aWxsIHRha2UgbG9uZ2VyIHRvIHJlY2VpdmUgYSBwYWNrZXQgdGhhbgorICogdGhlIG91dGdvaW5nIGxpbmsgY2FuIHNlbmQgaXQsIHdlIG5lZWQgdG8gZGVsYXkgc2VuZGluZyB0aGUgbmV4dCBwYWNrZXQKKyAqIGJ5IHRoZSBkaWZmZXJlbmNlIGluIHRpbWUgaXQgdGFrZXMgdGhlIHJlY2VpdmVyIHRvIHJlY2VpdmUgYW5kIHRoZSBzZW5kZXIKKyAqIHRvIHNlbmQgdGhpcyBwYWNrZXQuCisgKiBOb3RlIHRoYXQgdGhpcyBkZWxheSBpcyBhbHdheXMgY29ycmVjdCBmb3IgVUMgYW5kIFJDIGJ1dCBub3QgYWx3YXlzCisgKiBvcHRpbWFsIGZvciBVRC4gRm9yIFVELCB0aGUgZGVzdGluYXRpb24gSENBIGNhbiBiZSBkaWZmZXJlbnQgZm9yIGVhY2gKKyAqIHBhY2tldCwgaW4gd2hpY2ggY2FzZSwgd2UgY291bGQgc2VuZCBwYWNrZXRzIHRvIGEgZGlmZmVyZW50IGRlc3RpbmF0aW9uCisgKiB3aGlsZSAid2FpdGluZyIgZm9yIHRoZSBkZWxheS4gVGhlIG92ZXJoZWFkIGZvciBkb2luZyB0aGlzIHdpdGhvdXQKKyAqIEhXIHN1cHBvcnQgaXMgbW9yZSB0aGFuIGp1c3QgcGF5aW5nIHRoZSBjb3N0IG9mIGRlbGF5aW5nIHNvbWUgcGFja2V0cworICogdW5uZWNlc3NhcmlseS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpcGF0aF9wa3RfZGVsYXkodTMyIHBsZW4sIHU4IHNuZF9tdWx0LCB1OCByY3ZfbXVsdCkKK3sKKwlyZXR1cm4gKHJjdl9tdWx0ID4gc25kX211bHQpID8KKwkJKHBsZW4gKiAocmN2X211bHQgLSBzbmRfbXVsdCkgKyAxKSA+PiAxIDogMDsKK30KKworc3RhdGljIGludCBpcGF0aF92ZXJic19zZW5kX2RtYShzdHJ1Y3QgaXBhdGhfcXAgKnFwLAorCQkJCXN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgKmhkciwgdTMyIGhkcndvcmRzLAorCQkJCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB1MzIgbGVuLAorCQkJCXUzMiBwbGVuLCB1MzIgZHdvcmRzKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGRldi0+ZGQ7CisJc3RydWN0IGlwYXRoX3ZlcmJzX3R4cmVxICp0eDsKKwl1MzIgKnBpb2J1ZjsKKwl1MzIgY29udHJvbDsKKwl1MzIgbmRlc2M7CisJaW50IHJldDsKKworCXR4ID0gcXAtPnNfdHg7CisJaWYgKHR4KSB7CisJCXFwLT5zX3R4ID0gTlVMTDsKKwkJLyogcmVzZW5kIHByZXZpb3VzbHkgY29uc3RydWN0ZWQgcGFja2V0ICovCisJCXJldCA9IGlwYXRoX3NkbWFfdmVyYnNfc2VuZChkZCwgdHgtPnNzLCB0eC0+bGVuLCB0eCk7CisJCWlmIChyZXQpCisJCQlxcC0+c190eCA9IHR4OworCQlnb3RvIGJhaWw7CisJfQorCisJdHggPSBnZXRfdHhyZXEoZGV2KTsKKwlpZiAoIXR4KSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogR2V0IHRoZSBzYXZlZCBkZWxheSBjb3VudCB3ZSBjb21wdXRlZCBmb3IgdGhlIHByZXZpb3VzIHBhY2tldAorCSAqIGFuZCBzYXZlIHRoZSBkZWxheSBjb3VudCBmb3IgdGhpcyBwYWNrZXQgdG8gYmUgdXNlZCBuZXh0IHRpbWUKKwkgKiB3ZSBnZXQgaGVyZS4KKwkgKi8KKwljb250cm9sID0gcXAtPnNfcGt0X2RlbGF5OworCXFwLT5zX3BrdF9kZWxheSA9IGlwYXRoX3BrdF9kZWxheShwbGVuLCBkZC0+ZGVsYXlfbXVsdCwgcXAtPnNfZG11bHQpOworCisJdHgtPnFwID0gcXA7CisJYXRvbWljX2luYygmcXAtPnJlZmNvdW50KTsKKwl0eC0+d3FlID0gcXAtPnNfd3FlOworCXR4LT50eHJlcS5jYWxsYmFjayA9IHNkbWFfY29tcGxldGU7CisJdHgtPnR4cmVxLmNhbGxiYWNrX2Nvb2tpZSA9IHR4OworCXR4LT50eHJlcS5mbGFncyA9IElQQVRIX1NETUFfVFhSRVFfRl9IRUFEVE9IT1NUIHwKKwkJSVBBVEhfU0RNQV9UWFJFUV9GX0lOVFJFUSB8IElQQVRIX1NETUFfVFhSRVFfRl9GUkVFREVTQzsKKwlpZiAocGxlbiArIDEgPj0gSVBBVEhfU01BTExCVUZfRFdPUkRTKQorCQl0eC0+dHhyZXEuZmxhZ3MgfD0gSVBBVEhfU0RNQV9UWFJFUV9GX1VTRUxBUkdFQlVGOworCisJLyogVkwxNSBwYWNrZXRzIGJ5cGFzcyBjcmVkaXQgY2hlY2sgKi8KKwlpZiAoKGJlMTZfdG9fY3B1KGhkci0+bHJoWzBdKSA+PiAxMikgPT0gMTUpIHsKKwkJY29udHJvbCB8PSAxVUxMIDw8IDMxOworCQl0eC0+dHhyZXEuZmxhZ3MgfD0gSVBBVEhfU0RNQV9UWFJFUV9GX1ZMMTU7CisJfQorCisJaWYgKGxlbikgeworCQkvKgorCQkgKiBEb24ndCB0cnkgdG8gRE1BIGlmIGl0IHRha2VzIG1vcmUgZGVzY3JpcHRvcnMgdGhhbgorCQkgKiB0aGUgcXVldWUgaG9sZHMuCisJCSAqLworCQluZGVzYyA9IGlwYXRoX2NvdW50X3NnZShzcywgbGVuKTsKKwkJaWYgKG5kZXNjID49IGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudCkKKwkJCW5kZXNjID0gMDsKKwl9IGVsc2UKKwkJbmRlc2MgPSAxOworCWlmIChuZGVzYykgeworCQl0eC0+aGRyLnBiY1swXSA9IGNwdV90b19sZTMyKHBsZW4pOworCQl0eC0+aGRyLnBiY1sxXSA9IGNwdV90b19sZTMyKGNvbnRyb2wpOworCQltZW1jcHkoJnR4LT5oZHIuaGRyLCBoZHIsIGhkcndvcmRzIDw8IDIpOworCQl0eC0+dHhyZXEuc2dfY291bnQgPSBuZGVzYzsKKwkJdHgtPm1hcF9sZW4gPSAoaGRyd29yZHMgKyAyKSA8PCAyOworCQl0eC0+dHhyZXEubWFwX2FkZHIgPSAmdHgtPmhkcjsKKwkJcmV0ID0gaXBhdGhfc2RtYV92ZXJic19zZW5kKGRkLCBzcywgZHdvcmRzLCB0eCk7CisJCWlmIChyZXQpIHsKKwkJCS8qIHNhdmUgc3MgYW5kIGxlbmd0aCBpbiBkd29yZHMgKi8KKwkJCXR4LT5zcyA9IHNzOworCQkJdHgtPmxlbiA9IGR3b3JkczsKKwkJCXFwLT5zX3R4ID0gdHg7CisJCX0KKwkJZ290byBiYWlsOworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVmZmVyIGFuZCBjb3B5IHRoZSBoZWFkZXIgYW5kIHBheWxvYWQgdG8gaXQuICovCisJdHgtPm1hcF9sZW4gPSAocGxlbiArIDEpIDw8IDI7CisJcGlvYnVmID0ga21hbGxvYyh0eC0+bWFwX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KHBpb2J1ZiA9PSBOVUxMKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3R4OworCX0KKwl0eC0+dHhyZXEubWFwX2FkZHIgPSBwaW9idWY7CisJdHgtPnR4cmVxLmZsYWdzIHw9IElQQVRIX1NETUFfVFhSRVFfRl9GUkVFQlVGOworCXR4LT50eHJlcS5zZ19jb3VudCA9IDE7CisKKwkqcGlvYnVmKysgPSAoX19mb3JjZSB1MzIpIGNwdV90b19sZTMyKHBsZW4pOworCSpwaW9idWYrKyA9IChfX2ZvcmNlIHUzMikgY3B1X3RvX2xlMzIoY29udHJvbCk7CisJbWVtY3B5KHBpb2J1ZiwgaGRyLCBoZHJ3b3JkcyA8PCAyKTsKKwlpcGF0aF9jb3B5X2Zyb21fc2dlKHBpb2J1ZiArIGhkcndvcmRzLCBzcywgbGVuKTsKKworCXJldCA9IGlwYXRoX3NkbWFfdmVyYnNfc2VuZChkZCwgTlVMTCwgMCwgdHgpOworCS8qCisJICogSWYgd2UgY291bGRuJ3QgcXVldWUgdGhlIERNQSByZXF1ZXN0LCBzYXZlIHRoZSBpbmZvCisJICogYW5kIHRyeSBhZ2FpbiBsYXRlciByYXRoZXIgdGhhbiBkZXN0cm95aW5nIHRoZQorCSAqIGJ1ZmZlciBhbmQgdW5kb2luZyB0aGUgc2lkZSBlZmZlY3RzIG9mIHRoZSBjb3B5LgorCSAqLworCWlmIChyZXQpIHsKKwkJdHgtPnNzID0gTlVMTDsKKwkJdHgtPmxlbiA9IDA7CisJCXFwLT5zX3R4ID0gdHg7CisJfQorCWRldi0+bl91bmFsaWduZWQrKzsKKwlnb3RvIGJhaWw7CisKK2Vycl90eDoKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSkKKwkJd2FrZV91cCgmcXAtPndhaXQpOworCXB1dF90eHJlcShkZXYsIHR4KTsKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpcGF0aF92ZXJic19zZW5kX3BpbyhzdHJ1Y3QgaXBhdGhfcXAgKnFwLAorCQkJCXN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgKmliaGRyLCB1MzIgaGRyd29yZHMsCiAJCQkJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHUzMiBsZW4sCiAJCQkJdTMyIHBsZW4sIHUzMiBkd29yZHMpCiB7CiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpLT5kZDsKKwl1MzIgKmhkciA9ICh1MzIgKikgaWJoZHI7CiAJdTMyIF9faW9tZW0gKnBpb2J1ZjsKIAl1bnNpZ25lZCBmbHVzaF93YzsKKwl1MzIgY29udHJvbDsKIAlpbnQgcmV0OwogCi0JcGlvYnVmID0gaXBhdGhfZ2V0cGlvYnVmKGRkLCBOVUxMKTsKKwlwaW9idWYgPSBpcGF0aF9nZXRwaW9idWYoZGQsIHBsZW4sIE5VTEwpOwogCWlmICh1bmxpa2VseShwaW9idWYgPT0gTlVMTCkpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGJhaWw7CiAJfQogCiAJLyoKLQkgKiBXcml0ZSBsZW4gdG8gY29udHJvbCBxd29yZCwgbm8gZmxhZ3MuCisJICogR2V0IHRoZSBzYXZlZCBkZWxheSBjb3VudCB3ZSBjb21wdXRlZCBmb3IgdGhlIHByZXZpb3VzIHBhY2tldAorCSAqIGFuZCBzYXZlIHRoZSBkZWxheSBjb3VudCBmb3IgdGhpcyBwYWNrZXQgdG8gYmUgdXNlZCBuZXh0IHRpbWUKKwkgKiB3ZSBnZXQgaGVyZS4KKwkgKi8KKwljb250cm9sID0gcXAtPnNfcGt0X2RlbGF5OworCXFwLT5zX3BrdF9kZWxheSA9IGlwYXRoX3BrdF9kZWxheShwbGVuLCBkZC0+ZGVsYXlfbXVsdCwgcXAtPnNfZG11bHQpOworCisJLyogVkwxNSBwYWNrZXRzIGJ5cGFzcyBjcmVkaXQgY2hlY2sgKi8KKwlpZiAoKGJlMTZfdG9fY3B1KGliaGRyLT5scmhbMF0pID4+IDEyKSA9PSAxNSkKKwkJY29udHJvbCB8PSAxVUxMIDw8IDMxOworCisJLyoKKwkgKiBXcml0ZSB0aGUgbGVuZ3RoIHRvIHRoZSBjb250cm9sIHF3b3JkIHBsdXMgYW55IG5lZWRlZCBmbGFncy4KIAkgKiBXZSBoYXZlIHRvIGZsdXNoIGFmdGVyIHRoZSBQQkMgZm9yIGNvcnJlY3RuZXNzIG9uIHNvbWUgY3B1cwogCSAqIG9yIFdDIGJ1ZmZlciBjYW4gYmUgd3JpdHRlbiBvdXQgb2Ygb3JkZXIuCiAJICovCi0Jd3JpdGVxKHBsZW4sIHBpb2J1Zik7CisJd3JpdGVxKCgodTY0KSBjb250cm9sIDw8IDMyKSB8IHBsZW4sIHBpb2J1Zik7CiAJcGlvYnVmICs9IDI7CiAKIAlmbHVzaF93YyA9IGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BJT19GTFVTSF9XQzsKQEAgLTk2MSwxNSArMTI3OCwyNSBAQAogCSAqLwogCXBsZW4gPSBoZHJ3b3JkcyArIGR3b3JkcyArIDE7CiAKLQkvKiBEcm9wIG5vbi1WTDE1IHBhY2tldHMgaWYgd2UgYXJlIG5vdCBpbiB0aGUgYWN0aXZlIHN0YXRlICovCi0JaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FDVElWRSkgJiYKLQkgICAgcXAtPmlicXAucXBfdHlwZSAhPSBJQl9RUFRfU01JKSB7CisJLyoKKwkgKiBWTDE1IHBhY2tldHMgKElCX1FQVF9TTUkpIHdpbGwgYWx3YXlzIHVzZSBQSU8sIHNvIHdlCisJICogY2FuIGRlZmVyIFNETUEgcmVzdGFydCB1bnRpbCBsaW5rIGdvZXMgQUNUSVZFIHdpdGhvdXQKKwkgKiB3b3JyeWluZyBhYm91dCBqdXN0IGhvdyB3ZSBnb3QgdGhlcmUuCisJICovCisJaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1NNSSkKKwkJcmV0ID0gaXBhdGhfdmVyYnNfc2VuZF9waW8ocXAsIGhkciwgaGRyd29yZHMsIHNzLCBsZW4sCisJCQkJCSAgIHBsZW4sIGR3b3Jkcyk7CisJLyogQWxsIG5vbi1WTDE1IHBhY2tldHMgYXJlIGRyb3BwZWQgaWYgbGluayBpcyBub3QgQUNUSVZFICovCisJZWxzZSBpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSkgewogCQlpZiAocXAtPnNfd3FlKQogCQkJaXBhdGhfc2VuZF9jb21wbGV0ZShxcCwgcXAtPnNfd3FlLCBJQl9XQ19TVUNDRVNTKTsKIAkJcmV0ID0gMDsKLQl9IGVsc2UKLQkJcmV0ID0gaXBhdGhfdmVyYnNfc2VuZF9waW8ocXAsICh1MzIgKikgaGRyLCBoZHJ3b3JkcywKLQkJCQkJICAgc3MsIGxlbiwgcGxlbiwgZHdvcmRzKTsKKwl9IGVsc2UgaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0hBU19TRU5EX0RNQSkKKwkJcmV0ID0gaXBhdGhfdmVyYnNfc2VuZF9kbWEocXAsIGhkciwgaGRyd29yZHMsIHNzLCBsZW4sCisJCQkJCSAgIHBsZW4sIGR3b3Jkcyk7CisJZWxzZQorCQlyZXQgPSBpcGF0aF92ZXJic19zZW5kX3BpbyhxcCwgaGRyLCBoZHJ3b3Jkcywgc3MsIGxlbiwKKwkJCQkJICAgcGxlbiwgZHdvcmRzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDM4LDYgKzEzNjUsMTIgQEAKIAkJaXBhdGhfc25hcF9jbnRyKGRkLCBjcnAtPmNyX2VycmxwY3JjY250KSArCiAJCWlwYXRoX3NuYXBfY250cihkZCwgY3JwLT5jcl9iYWRmb3JtYXRjbnQpICsKIAkJZGQtPmlwYXRoX3J4ZmNfdW5zdXB2bF9lcnJzOworCWlmIChjcnAtPmNyX3J4b3RoZXJsb2NhbHBoeWVycmNudCkKKwkJY250cnMtPnBvcnRfcmN2X2Vycm9ycyArPQorCQkJaXBhdGhfc25hcF9jbnRyKGRkLCBjcnAtPmNyX3J4b3RoZXJsb2NhbHBoeWVycmNudCk7CisJaWYgKGNycC0+Y3Jfcnh2bGVycmNudCkKKwkJY250cnMtPnBvcnRfcmN2X2Vycm9ycyArPQorCQkJaXBhdGhfc25hcF9jbnRyKGRkLCBjcnAtPmNyX3J4dmxlcnJjbnQpOwogCWNudHJzLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9CiAJCWlwYXRoX3NuYXBfY250cihkZCwgY3JwLT5jcl9yY3ZlYnBjbnQpOwogCWNudHJzLT5wb3J0X3htaXRfZGlzY2FyZHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGNycC0+Y3JfdW5zdXB2bGNudCk7CkBAIC0xMDQ2LDkgKzEzNzksMTYgQEAKIAljbnRycy0+cG9ydF94bWl0X3BhY2tldHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGNycC0+Y3JfcGt0c2VuZGNudCk7CiAJY250cnMtPnBvcnRfcmN2X3BhY2tldHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGNycC0+Y3JfcGt0cmN2Y250KTsKIAljbnRycy0+bG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzID0KLQkJKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fRVJSSU5UUlMpID8KLQkJZGQtPmlwYXRoX2xsaV9lcnJzIDogZGQtPmlwYXRoX2xsaV9lcnJvcnM7Ci0JY250cnMtPmV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnMgPSBkZC0+aXBhdGhfb3ZlcnJ1bl90aHJlc2hfZXJyczsKKwkJY3JwLT5jcl9sb2NhbGxpbmtpbnRlZ3JpdHllcnJjbnQgPworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGNycC0+Y3JfbG9jYWxsaW5raW50ZWdyaXR5ZXJyY250KSA6CisJCSgoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfR1BJT19FUlJJTlRSUykgPworCQkgZGQtPmlwYXRoX2xsaV9lcnJzIDogZGQtPmlwYXRoX2xsaV9lcnJvcnMpOworCWNudHJzLT5leGNlc3NpdmVfYnVmZmVyX292ZXJydW5fZXJyb3JzID0KKwkJY3JwLT5jcl9leGNlc3NidWZmZXJvdmZsY250ID8KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBjcnAtPmNyX2V4Y2Vzc2J1ZmZlcm92ZmxjbnQpIDoKKwkJZGQtPmlwYXRoX292ZXJydW5fdGhyZXNoX2VycnM7CisJY250cnMtPnZsMTVfZHJvcHBlZCA9IGNycC0+Y3JfdmwxNWRyb3BwZWRwa3RjbnQgPworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGNycC0+Y3JfdmwxNWRyb3BwZWRwa3RjbnQpIDogMDsKIAogCXJldCA9IDA7CiAKQEAgLTExODMsNyArMTUyMyw5IEBACiAJcHJvcHMtPnNtX2xpZCA9IGRldi0+c21fbGlkOwogCXByb3BzLT5zbV9zbCA9IGRldi0+c21fc2w7CiAJaWJjc3RhdCA9IGRkLT5pcGF0aF9sYXN0aWJjc3RhdDsKLQlwcm9wcy0+c3RhdGUgPSAoKGliY3N0YXQgPj4gNCkgJiAweDMpICsgMTsKKwkvKiBtYXAgTGlua1N0YXRlIHRvIElCIHBvcnRpbmZvIHZhbHVlcy4gICovCisJcHJvcHMtPnN0YXRlID0gaXBhdGhfaWJfbGlua3N0YXRlKGRkLCBpYmNzdGF0KSArIDE7CisKIAkvKiBTZWUgcGh5c19zdGF0ZV9zaG93KCkgKi8KIAlwcm9wcy0+cGh5c19zdGF0ZSA9IC8qIE1FQTogYXNzdW1lcyBzaGlmdCA9PSAwICovCiAJCWlwYXRoX2N2dF9waHlzcG9ydHN0YXRlW2RkLT5pcGF0aF9sYXN0aWJjc3RhdCAmCkBAIC0xMTk1LDE4ICsxNTM3LDEzIEBACiAJcHJvcHMtPmJhZF9wa2V5X2NudHIgPSBpcGF0aF9nZXRfY3JfZXJycGtleShkZCkgLQogCQlkZXYtPnpfcGtleV92aW9sYXRpb25zOwogCXByb3BzLT5xa2V5X3Zpb2xfY250ciA9IGRldi0+cWtleV92aW9sYXRpb25zOwotCXByb3BzLT5hY3RpdmVfd2lkdGggPSBJQl9XSURUSF80WDsKKwlwcm9wcy0+YWN0aXZlX3dpZHRoID0gZGQtPmlwYXRoX2xpbmtfd2lkdGhfYWN0aXZlOwogCS8qIFNlZSByYXRlX3Nob3coKSAqLwotCXByb3BzLT5hY3RpdmVfc3BlZWQgPSAxOwkvKiBSZWd1bGFyIDEwTWJzIHNwZWVkLiAqLworCXByb3BzLT5hY3RpdmVfc3BlZWQgPSBkZC0+aXBhdGhfbGlua19zcGVlZF9hY3RpdmU7CiAJcHJvcHMtPm1heF92bF9udW0gPSAxOwkJLyogVkxDYXAgPSBWTDAgKi8KIAlwcm9wcy0+aW5pdF90eXBlX3JlcGx5ID0gMDsKIAotCS8qCi0JICogTm90ZTogdGhlIGNoaXAgc3VwcG9ydHMgYSBtYXhpbXVtIE1UVSBvZiA0MDk2LCBidXQgdGhlIGRyaXZlcgotCSAqIGhhc24ndCBpbXBsZW1lbnRlZCB0aGlzIGZlYXR1cmUgeWV0LCBzbyBzZXQgdGhlIG1heGltdW0gdmFsdWUKLQkgKiB0byAyMDQ4LgotCSAqLwotCXByb3BzLT5tYXhfbXR1ID0gSUJfTVRVXzIwNDg7CisJcHJvcHMtPm1heF9tdHUgPSBpcGF0aF9tdHU0MDk2ID8gSUJfTVRVXzQwOTYgOiBJQl9NVFVfMjA0ODsKIAlzd2l0Y2ggKGRkLT5pcGF0aF9pYm10dSkgewogCWNhc2UgNDA5NjoKIAkJbXR1ID0gSUJfTVRVXzQwOTY7CkBAIC0xMzk5LDYgKzE3MzYsNyBAQAogCiAJLyogaWJfY3JlYXRlX2FoKCkgd2lsbCBpbml0aWFsaXplIGFoLT5pYmFoLiAqLwogCWFoLT5hdHRyID0gKmFoX2F0dHI7CisJYWgtPmF0dHIuc3RhdGljX3JhdGUgPSBpcGF0aF9pYl9yYXRlX3RvX211bHQoYWhfYXR0ci0+c3RhdGljX3JhdGUpOwogCiAJcmV0ID0gJmFoLT5pYmFoOwogCkBAIC0xNDMyLDYgKzE3NzAsNyBAQAogCXN0cnVjdCBpcGF0aF9haCAqYWggPSB0b19pYWgoaWJhaCk7CiAKIAkqYWhfYXR0ciA9IGFoLT5hdHRyOworCWFoX2F0dHItPnN0YXRpY19yYXRlID0gaXBhdGhfbXVsdF90b19pYl9yYXRlKGFoLT5hdHRyLnN0YXRpY19yYXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU4MSw2ICsxOTIwLDggQEAKIAlzdHJ1Y3QgaXBhdGhfdmVyYnNfY291bnRlcnMgY250cnM7CiAJc3RydWN0IGlwYXRoX2liZGV2ICppZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXEgKnR4OworCXVuc2lnbmVkIGk7CiAJaW50IHJldDsKIAogCWlkZXYgPSAoc3RydWN0IGlwYXRoX2liZGV2ICopaWJfYWxsb2NfZGV2aWNlKHNpemVvZiAqaWRldik7CkBAIC0xNTkxLDYgKzE5MzIsMTcgQEAKIAogCWRldiA9ICZpZGV2LT5pYmRldjsKIAorCWlmIChkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnQpIHsKKwkJdHggPSBrbWFsbG9jKGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudCAqIHNpemVvZiAqdHgsCisJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAodHggPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3R4OworCQl9CisJfSBlbHNlCisJCXR4ID0gTlVMTDsKKwlpZGV2LT50eHJlcV9idWZzID0gdHg7CisKIAkvKiBPbmx5IG5lZWQgdG8gaW5pdGlhbGl6ZSBub24temVybyBmaWVsZHMuICovCiAJc3Bpbl9sb2NrX2luaXQoJmlkZXYtPm5fcGRzX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpZGV2LT5uX2Foc19sb2NrKTsKQEAgLTE2MzEsMTUgKzE5ODMsMTcgQEAKIAlJTklUX0xJU1RfSEVBRCgmaWRldi0+cGVuZGluZ1syXSk7CiAJSU5JVF9MSVNUX0hFQUQoJmlkZXYtPnBpb3dhaXQpOwogCUlOSVRfTElTVF9IRUFEKCZpZGV2LT5ybnJ3YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmaWRldi0+dHhyZXFfZnJlZSk7CiAJaWRldi0+cGVuZGluZ19pbmRleCA9IDA7CiAJaWRldi0+cG9ydF9jYXBfZmxhZ3MgPQogCQlJQl9QT1JUX1NZU19JTUFHRV9HVUlEX1NVUCB8IElCX1BPUlRfQ0xJRU5UX1JFR19TVVA7CisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0hBU19MSU5LX0xBVEVOQ1kpCisJCWlkZXYtPnBvcnRfY2FwX2ZsYWdzIHw9IElCX1BPUlRfTElOS19MQVRFTkNZX1NVUDsKIAlpZGV2LT5wbWFfY291bnRlcl9zZWxlY3RbMF0gPSBJQl9QTUFfUE9SVF9YTUlUX0RBVEE7CiAJaWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzFdID0gSUJfUE1BX1BPUlRfUkNWX0RBVEE7CiAJaWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzJdID0gSUJfUE1BX1BPUlRfWE1JVF9QS1RTOwogCWlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFszXSA9IElCX1BNQV9QT1JUX1JDVl9QS1RTOwogCWlkZXYtPnBtYV9jb3VudGVyX3NlbGVjdFs0XSA9IElCX1BNQV9QT1JUX1hNSVRfV0FJVDsKLQlpZGV2LT5saW5rX3dpZHRoX2VuYWJsZWQgPSAzOwkvKiAxeCBvciA0eCAqLwogCiAJLyogU25hcHNob3QgY3VycmVudCBIVyBjb3VudGVycyB0byAiY2xlYXIiIHRoZW0uICovCiAJaXBhdGhfZ2V0X2NvdW50ZXJzKGRkLCAmY250cnMpOwpAQCAtMTY2MSw2ICsyMDE1LDkgQEAKIAkJY250cnMuZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9yczsKIAlpZGV2LT56X3ZsMTVfZHJvcHBlZCA9IGNudHJzLnZsMTVfZHJvcHBlZDsKIAorCWZvciAoaSA9IDA7IGkgPCBkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnQ7IGkrKywgdHgrKykKKwkJbGlzdF9hZGQoJnR4LT50eHJlcS5saXN0LCAmaWRldi0+dHhyZXFfZnJlZSk7CisKIAkvKgogCSAqIFRoZSBzeXN0ZW0gaW1hZ2UgR1VJRCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsCiAJICogSUIgSENBcyBpbiBhIHNpbmdsZSBzeXN0ZW0gYnV0IHNpbmNlIHRoZXJlIGNhbiBiZSBvdGhlcgpAQCAtMTc3NCw2ICsyMTMxLDggQEAKIGVycl9sazoKIAlrZnJlZShpZGV2LT5xcF90YWJsZS50YWJsZSk7CiBlcnJfcXA6CisJa2ZyZWUoaWRldi0+dHhyZXFfYnVmcyk7CitlcnJfdHg6CiAJaWJfZGVhbGxvY19kZXZpY2UoZGV2KTsKIAlpcGF0aF9kZXZfZXJyKGRkLCAiY2Fubm90IHJlZ2lzdGVyIHZlcmJzOiAlZCFcbiIsIC1yZXQpOwogCWlkZXYgPSBOVUxMOwpAQCAtMTgwOCwyMSArMjE2NywyNCBAQAogCWlwYXRoX2ZyZWVfYWxsX3FwcygmZGV2LT5xcF90YWJsZSk7CiAJa2ZyZWUoZGV2LT5xcF90YWJsZS50YWJsZSk7CiAJa2ZyZWUoZGV2LT5sa190YWJsZS50YWJsZSk7CisJa2ZyZWUoZGV2LT50eHJlcV9idWZzKTsKIAlpYl9kZWFsbG9jX2RldmljZShpYmRldik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfcmV2KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfcmV2KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQotCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOworCQljb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaXBhdGhfaWJkZXYsIGliZGV2LmRldik7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgZGV2LT5kZC0+aXBhdGhfcGNpcmV2KTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19oY2Eoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19oY2Eoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9Ci0JCWNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgaXBhdGhfaWJkZXYsIGliZGV2LmNsYXNzX2Rldik7CisJCWNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpcGF0aF9pYmRldiwgaWJkZXYuZGV2KTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZGV2LT5kZC0+aXBhdGhfZl9nZXRfYm9hcmRuYW1lKGRldi0+ZGQsIGJ1ZiwgMTI4KTsKQEAgLTE4MzUsMTAgKzIxOTcsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3N0YXRzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHMoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0KLQkJY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBpcGF0aF9pYmRldiwgaWJkZXYuY2xhc3NfZGV2KTsKKwkJY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5kZXYpOwogCWludCBpOwogCWludCBsZW47CiAKQEAgLTE4NTUsMTMgKzIyMTgsMTUgQEAKIAkJICAgICAgIlJDIHN0YWxscyAgICVkXG4iCiAJCSAgICAgICJwaW9idWYgd2FpdCAlZFxuIgogCQkgICAgICAibm8gcGlvYnVmICAgJWRcbiIKKwkJICAgICAgInVuYWxpZ25lZCAgICVkXG4iCiAJCSAgICAgICJQS1QgZHJvcHMgICAlZFxuIgogCQkgICAgICAiV1FFIGVycnMgICAgJWRcbiIsCiAJCSAgICAgIGRldi0+bl9yY19yZXNlbmRzLCBkZXYtPm5fcmNfcWFja3MsIGRldi0+bl9yY19hY2tzLAogCQkgICAgICBkZXYtPm5fc2VxX25ha3MsIGRldi0+bl9yZG1hX3NlcSwgZGV2LT5uX3Jucl9uYWtzLAogCQkgICAgICBkZXYtPm5fb3RoZXJfbmFrcywgZGV2LT5uX3RpbWVvdXRzLAogCQkgICAgICBkZXYtPm5fcmRtYV9kdXBfYnVzeSwgZGV2LT5uX3JjX3N0YWxscywgZGV2LT5uX3Bpb3dhaXQsCi0JCSAgICAgIGRldi0+bl9ub19waW9idWYsIGRldi0+bl9wa3RfZHJvcHMsIGRldi0+bl93cWVfZXJycyk7CisJCSAgICAgIGRldi0+bl9ub19waW9idWYsIGRldi0+bl91bmFsaWduZWQsCisJCSAgICAgIGRldi0+bl9wa3RfZHJvcHMsIGRldi0+bl93cWVfZXJycyk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2LT5vcHN0YXRzKTsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpcGF0aF9vcGNvZGVfc3RhdHMgKnNpID0gJmRldi0+b3BzdGF0c1tpXTsKIApAQCAtMTg3NCwxNiArMjIzOSwxNiBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihod19yZXYsIFNfSVJVR08sIHNob3dfcmV2LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihoY2FfdHlwZSwgU19JUlVHTywgc2hvd19oY2EsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJvYXJkX2lkLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc3RhdHMsIFNfSVJVR08sIHNob3dfc3RhdHMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGh3X3JldiwgU19JUlVHTywgc2hvd19yZXYsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhjYV90eXBlLCBTX0lSVUdPLCBzaG93X2hjYSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfaWQsIFNfSVJVR08sIHNob3dfaGNhLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0cywgU19JUlVHTywgc2hvd19zdGF0cywgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaXBhdGhfY2xhc3NfYXR0cmlidXRlc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9od19yZXYsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hjYV90eXBlLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ib2FyZF9pZCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfc3RhdHMKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqaXBhdGhfY2xhc3NfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9od19yZXYsCisJJmRldl9hdHRyX2hjYV90eXBlLAorCSZkZXZfYXR0cl9ib2FyZF9pZCwKKwkmZGV2X2F0dHJfc3RhdHMKIH07CiAKIHN0YXRpYyBpbnQgaXBhdGhfdmVyYnNfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGliX2RldmljZSAqZGV2KQpAQCAtMTg5Miw4ICsyMjU3LDggQEAKIAlpbnQgcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXBhdGhfY2xhc3NfYXR0cmlidXRlcyk7ICsraSkKLQkJaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5jbGFzc19kZXYsCi0JCQkJCSAgICAgaXBhdGhfY2xhc3NfYXR0cmlidXRlc1tpXSkpIHsKKwkJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsCisJCQkJICAgICAgIGlwYXRoX2NsYXNzX2F0dHJpYnV0ZXNbaV0pKSB7CiAJCQlyZXQgPSAxOwogCQkJZ290byBiYWlsOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCmluZGV4IDNkNTk3MzYuLjY1MTRhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBRTG9naWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggUUxvZ2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0xMzgsNiArMTM4LDExIEBACiAJfSB1OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBpcGF0aF9waW9faGVhZGVyIHsKKwlfX2xlMzIgcGJjWzJdOworCXN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgaGRyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qCiAgKiBUaGVyZSBpcyBvbmUgc3RydWN0IGlwYXRoX21jYXN0IGZvciBlYWNoIG11bHRpY2FzdCBHSUQuCiAgKiBBbGwgYXR0YWNoZWQgUVBzIGFyZSB0aGVuIHN0b3JlZCBhcyBhIGxpc3Qgb2YKQEAgLTMxOSw2ICszMjQsNyBAQAogCXN0cnVjdCBpcGF0aF9zZ2UgKnNnX2xpc3Q7ICAgICAgLyogbmV4dCBTR0UgdG8gYmUgdXNlZCBpZiBhbnkgKi8KIAlzdHJ1Y3QgaXBhdGhfc2dlIHNnZTsgICAvKiBwcm9ncmVzcyBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgU0dFICovCiAJdTggbnVtX3NnZTsKKwl1OCBzdGF0aWNfcmF0ZTsKIH07CiAKIC8qCkBAIC0zNTYsNiArMzYyLDcgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgc190YXNrOwogCXN0cnVjdCBpcGF0aF9tbWFwX2luZm8gKmlwOwogCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNfY3VyX3NnZTsKKwlzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXEgKnNfdHg7CiAJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSBzX3NnZTsJLyogY3VycmVudCBzZW5kIHJlcXVlc3QgZGF0YSAqLwogCXN0cnVjdCBpcGF0aF9hY2tfZW50cnkgc19hY2tfcXVldWVbSVBBVEhfTUFYX1JETUFfQVRPTUlDICsgMV07CiAJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSBzX2Fja19yZG1hX3NnZTsKQEAgLTM2Myw3ICszNzAsOCBAQAogCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgcl9zZ2U7CS8qIGN1cnJlbnQgcmVjZWl2ZSBkYXRhICovCiAJc3BpbmxvY2tfdCBzX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBzX2J1c3k7Ci0JdTMyIHNfaGRyd29yZHM7CQkvKiBzaXplIG9mIHNfaGRyIGluIDMyIGJpdCB3b3JkcyAqLworCXUxNiBzX3BrdF9kZWxheTsKKwl1MTYgc19oZHJ3b3JkczsJCS8qIHNpemUgb2Ygc19oZHIgaW4gMzIgYml0IHdvcmRzICovCiAJdTMyIHNfY3VyX3NpemU7CQkvKiBzaXplIG9mIHNlbmQgcGFja2V0IGluIGJ5dGVzICovCiAJdTMyIHNfbGVuOwkJLyogdG90YWwgbGVuZ3RoIG9mIHNfc2dlICovCiAJdTMyIHNfcmRtYV9yZWFkX2xlbjsJLyogdG90YWwgbGVuZ3RoIG9mIHNfcmRtYV9yZWFkX3NnZSAqLwpAQCAtMzg3LDcgKzM5NSw2IEBACiAJdTggcl9uYWtfc3RhdGU7CQkvKiBub24temVybyBpZiBOQUsgaXMgcGVuZGluZyAqLwogCXU4IHJfbWluX3Jucl90aW1lcjsJLyogcmV0cnkgdGltZW91dCB2YWx1ZSBmb3IgUk5SIE5BS3MgKi8KIAl1OCByX3JldXNlX3NnZTsJCS8qIGZvciBVQyByZWNlaXZlIGVycm9ycyAqLwotCXU4IHJfc2dlX2lueDsJCS8qIGN1cnJlbnQgaW5kZXggaW50byBzZ19saXN0ICovCiAJdTggcl93cmlkX3ZhbGlkOwkvKiByX3dyaWQgc2V0IGJ1dCBDUSBlbnRyeSBub3QgeWV0IG1hZGUgKi8KIAl1OCByX21heF9yZF9hdG9taWM7CS8qIG1heCBudW1iZXIgb2YgUkRNQSByZWFkL2F0b21pYyB0byByZWNlaXZlICovCiAJdTggcl9oZWFkX2Fja19xdWV1ZTsJLyogaW5kZXggaW50byBzX2Fja19xdWV1ZVtdICovCkBAIC00MDMsNiArNDEwLDcgQEAKIAl1OCBzX251bV9yZF9hdG9taWM7CS8qIG51bWJlciBvZiBSRE1BIHJlYWQvYXRvbWljIHBlbmRpbmcgKi8KIAl1OCBzX3RhaWxfYWNrX3F1ZXVlOwkvKiBpbmRleCBpbnRvIHNfYWNrX3F1ZXVlW10gKi8KIAl1OCBzX2ZsYWdzOworCXU4IHNfZG11bHQ7CiAJdTggdGltZW91dDsJCS8qIFRpbWVvdXQgZm9yIHRoaXMgUVAgKi8KIAllbnVtIGliX210dSBwYXRoX210dTsKIAl1MzIgcmVtb3RlX3FwbjsKQEAgLTUxMCw2ICs1MTgsOCBAQAogCXN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlIGxrX3RhYmxlOwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ1szXTsJLyogRklGTyBvZiBRUHMgd2FpdGluZyBmb3IgQUNLcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcGlvd2FpdDsJLyogbGlzdCBmb3Igd2FpdCBQSU8gYnVmICovCisJc3RydWN0IGxpc3RfaGVhZCB0eHJlcV9mcmVlOworCXZvaWQgKnR4cmVxX2J1ZnM7CiAJLyogbGlzdCBvZiBRUHMgd2FpdGluZyBmb3IgUk5SIHRpbWVyICovCiAJc3RydWN0IGxpc3RfaGVhZCBybnJ3YWl0OwogCXNwaW5sb2NrX3QgcGVuZGluZ19sb2NrOwpAQCAtNTcwLDYgKzU4MCw3IEBACiAJdTMyIG5fcmRtYV9kdXBfYnVzeTsKIAl1MzIgbl9waW93YWl0OwogCXUzMiBuX25vX3Bpb2J1ZjsKKwl1MzIgbl91bmFsaWduZWQ7CiAJdTMyIHBvcnRfY2FwX2ZsYWdzOwogCXUzMiBwbWFfc2FtcGxlX3N0YXJ0OwogCXUzMiBwbWFfc2FtcGxlX2ludGVydmFsOwpAQCAtNTgxLDcgKzU5Miw2IEBACiAJdTE2IHBlbmRpbmdfaW5kZXg7CS8qIHdoaWNoIHBlbmRpbmcgcXVldWUgaXMgYWN0aXZlICovCiAJdTggcG1hX3NhbXBsZV9zdGF0dXM7CiAJdTggc3VibmV0X3RpbWVvdXQ7Ci0JdTggbGlua193aWR0aF9lbmFibGVkOwogCXU4IHZsX2hpZ2hfbGltaXQ7CiAJc3RydWN0IGlwYXRoX29wY29kZV9zdGF0cyBvcHN0YXRzWzEyOF07CiB9OwpAQCAtNjAyLDYgKzYxMiwxNiBAQAogCXUzMiB2bDE1X2Ryb3BwZWQ7CiB9OwogCitzdHJ1Y3QgaXBhdGhfdmVyYnNfdHhyZXEgeworCXN0cnVjdCBpcGF0aF9xcCAgICAgICAgICpxcDsKKwlzdHJ1Y3QgaXBhdGhfc3dxZSAgICAgICAqd3FlOworCXUzMiAgICAgICAgICAgICAgICAgICAgICBtYXBfbGVuOworCXUzMiAgICAgICAgICAgICAgICAgICAgICBsZW47CisJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAgKnNzOworCXN0cnVjdCBpcGF0aF9waW9faGVhZGVyICBoZHI7CisJc3RydWN0IGlwYXRoX3NkbWFfdHhyZXEgIHR4cmVxOworfTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfbXIgKnRvX2ltcihzdHJ1Y3QgaWJfbXIgKmlibXIpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpYm1yLCBzdHJ1Y3QgaXBhdGhfbXIsIGlibXIpOwpAQCAtNjk0LDExICs3MTQsMTEgQEAKIAogdm9pZCBpcGF0aF9nZXRfY3JlZGl0KHN0cnVjdCBpcGF0aF9xcCAqcXAsIHUzMiBhZXRoKTsKIAordW5zaWduZWQgaXBhdGhfaWJfcmF0ZV90b19tdWx0KGVudW0gaWJfcmF0ZSByYXRlKTsKKwogaW50IGlwYXRoX3ZlcmJzX3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGlwYXRoX2liX2hlYWRlciAqaGRyLAogCQkgICAgIHUzMiBoZHJ3b3Jkcywgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHUzMiBsZW4pOwogCi12b2lkIGlwYXRoX2NxX2VudGVyKHN0cnVjdCBpcGF0aF9jcSAqY3EsIHN0cnVjdCBpYl93YyAqZW50cnksIGludCBzaWcpOwotCiB2b2lkIGlwYXRoX2NvcHlfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB2b2lkICpkYXRhLCB1MzIgbGVuZ3RoKTsKIAogdm9pZCBpcGF0aF9za2lwX3NnZShzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywgdTMyIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvY3EuYwppbmRleCA3MzYwYmJhLi4zNTU3ZTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2NxLmMKQEAgLTg1LDYgKzg1LDgyIEBACiAJcmV0dXJuIGdldF9zd19jcWUoY3EsIGNxLT5tY3EuY29uc19pbmRleCk7CiB9CiAKK2ludCBtbHg0X2liX21vZGlmeV9jcShzdHJ1Y3QgaWJfY3EgKmNxLCB1MTYgY3FfY291bnQsIHUxNiBjcV9wZXJpb2QpCit7CisJc3RydWN0IG1seDRfaWJfY3EgKm1jcSA9IHRvX21jcShjcSk7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KGNxLT5kZXZpY2UpOworCisJcmV0dXJuIG1seDRfY3FfbW9kaWZ5KGRldi0+ZGV2LCAmbWNxLT5tY3EsIGNxX2NvdW50LCBjcV9wZXJpb2QpOworfQorCitzdGF0aWMgaW50IG1seDRfaWJfYWxsb2NfY3FfYnVmKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pYl9jcV9idWYgKmJ1ZiwgaW50IG5lbnQpCit7CisJaW50IGVycjsKKworCWVyciA9IG1seDRfYnVmX2FsbG9jKGRldi0+ZGV2LCBuZW50ICogc2l6ZW9mKHN0cnVjdCBtbHg0X2NxZSksCisJCQkgICAgIFBBR0VfU0laRSAqIDIsICZidWYtPmJ1Zik7CisKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IG1seDRfbXR0X2luaXQoZGV2LT5kZXYsIGJ1Zi0+YnVmLm5wYWdlcywgYnVmLT5idWYucGFnZV9zaGlmdCwKKwkJCQkgICAgJmJ1Zi0+bXR0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9idWY7CisKKwllcnIgPSBtbHg0X2J1Zl93cml0ZV9tdHQoZGV2LT5kZXYsICZidWYtPm10dCwgJmJ1Zi0+YnVmKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tdHQ7CisKKwlyZXR1cm4gMDsKKworZXJyX210dDoKKwltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmYnVmLT5tdHQpOworCitlcnJfYnVmOgorCW1seDRfYnVmX2ZyZWUoZGV2LT5kZXYsIG5lbnQgKiBzaXplb2Yoc3RydWN0IG1seDRfY3FlKSwKKwkJCSAgICAgICZidWYtPmJ1Zik7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2liX2ZyZWVfY3FfYnVmKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pYl9jcV9idWYgKmJ1ZiwgaW50IGNxZSkKK3sKKwltbHg0X2J1Zl9mcmVlKGRldi0+ZGV2LCAoY3FlICsgMSkgKiBzaXplb2Yoc3RydWN0IG1seDRfY3FlKSwgJmJ1Zi0+YnVmKTsKK30KKworc3RhdGljIGludCBtbHg0X2liX2dldF9jcV91bWVtKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkgICAgICAgc3RydWN0IG1seDRfaWJfY3FfYnVmICpidWYsIHN0cnVjdCBpYl91bWVtICoqdW1lbSwKKwkJCSAgICAgICB1NjQgYnVmX2FkZHIsIGludCBjcWUpCit7CisJaW50IGVycjsKKworCSp1bWVtID0gaWJfdW1lbV9nZXQoY29udGV4dCwgYnVmX2FkZHIsIGNxZSAqIHNpemVvZiAoc3RydWN0IG1seDRfY3FlKSwKKwkJCSAgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCWlmIChJU19FUlIoKnVtZW0pKQorCQlyZXR1cm4gUFRSX0VSUigqdW1lbSk7CisKKwllcnIgPSBtbHg0X210dF9pbml0KGRldi0+ZGV2LCBpYl91bWVtX3BhZ2VfY291bnQoKnVtZW0pLAorCQkJICAgIGlsb2cyKCgqdW1lbSktPnBhZ2Vfc2l6ZSksICZidWYtPm10dCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfYnVmOworCisJZXJyID0gbWx4NF9pYl91bWVtX3dyaXRlX210dChkZXYsICZidWYtPm10dCwgKnVtZW0pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX210dDsKKworCXJldHVybiAwOworCitlcnJfbXR0OgorCW1seDRfbXR0X2NsZWFudXAoZGV2LT5kZXYsICZidWYtPm10dCk7CisKK2Vycl9idWY6CisJaWJfdW1lbV9yZWxlYXNlKCp1bWVtKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0cnVjdCBpYl9jcSAqbWx4NF9pYl9jcmVhdGVfY3Eoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBlbnRyaWVzLCBpbnQgdmVjdG9yLAogCQkJCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKIAkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQpAQCAtOTIsNyArMTY4LDYgQEAKIAlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9IHRvX21kZXYoaWJkZXYpOwogCXN0cnVjdCBtbHg0X2liX2NxICpjcTsKIAlzdHJ1Y3QgbWx4NF91YXIgKnVhcjsKLQlpbnQgYnVmX3NpemU7CiAJaW50IGVycjsKIAogCWlmIChlbnRyaWVzIDwgMSB8fCBlbnRyaWVzID4gZGV2LT5kZXYtPmNhcHMubWF4X2NxZXMpCkBAIC0xMDQsOCArMTc5LDEwIEBACiAKIAllbnRyaWVzICAgICAgPSByb3VuZHVwX3Bvd19vZl90d28oZW50cmllcyArIDEpOwogCWNxLT5pYmNxLmNxZSA9IGVudHJpZXMgLSAxOwotCWJ1Zl9zaXplICAgICA9IGVudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBtbHg0X2NxZSk7CisJbXV0ZXhfaW5pdCgmY3EtPnJlc2l6ZV9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNxLT5sb2NrKTsKKwljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CisJY3EtPnJlc2l6ZV91bWVtID0gTlVMTDsKIAogCWlmIChjb250ZXh0KSB7CiAJCXN0cnVjdCBtbHg0X2liX2NyZWF0ZV9jcSB1Y21kOwpAQCAtMTE1LDIxICsxOTIsMTAgQEAKIAkJCWdvdG8gZXJyX2NxOwogCQl9CiAKLQkJY3EtPnVtZW0gPSBpYl91bWVtX2dldChjb250ZXh0LCB1Y21kLmJ1Zl9hZGRyLCBidWZfc2l6ZSwKLQkJCQkgICAgICAgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKLQkJaWYgKElTX0VSUihjcS0+dW1lbSkpIHsKLQkJCWVyciA9IFBUUl9FUlIoY3EtPnVtZW0pOworCQllcnIgPSBtbHg0X2liX2dldF9jcV91bWVtKGRldiwgY29udGV4dCwgJmNxLT5idWYsICZjcS0+dW1lbSwKKwkJCQkJICB1Y21kLmJ1Zl9hZGRyLCBlbnRyaWVzKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gZXJyX2NxOwotCQl9Ci0KLQkJZXJyID0gbWx4NF9tdHRfaW5pdChkZXYtPmRldiwgaWJfdW1lbV9wYWdlX2NvdW50KGNxLT51bWVtKSwKLQkJCQkgICAgaWxvZzIoY3EtPnVtZW0tPnBhZ2Vfc2l6ZSksICZjcS0+YnVmLm10dCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9idWY7Ci0KLQkJZXJyID0gbWx4NF9pYl91bWVtX3dyaXRlX210dChkZXYsICZjcS0+YnVmLm10dCwgY3EtPnVtZW0pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfbXR0OwogCiAJCWVyciA9IG1seDRfaWJfZGJfbWFwX3VzZXIodG9fbXVjb250ZXh0KGNvbnRleHQpLCB1Y21kLmRiX2FkZHIsCiAJCQkJCSAgJmNxLT5kYik7CkBAIC0xNDcsMTkgKzIxMyw5IEBACiAJCSpjcS0+bWNxLnNldF9jaV9kYiA9IDA7CiAJCSpjcS0+bWNxLmFybV9kYiAgICA9IDA7CiAKLQkJaWYgKG1seDRfYnVmX2FsbG9jKGRldi0+ZGV2LCBidWZfc2l6ZSwgUEFHRV9TSVpFICogMiwgJmNxLT5idWYuYnVmKSkgewotCQkJZXJyID0gLUVOT01FTTsKKwkJZXJyID0gbWx4NF9pYl9hbGxvY19jcV9idWYoZGV2LCAmY3EtPmJ1ZiwgZW50cmllcyk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9kYjsKLQkJfQotCi0JCWVyciA9IG1seDRfbXR0X2luaXQoZGV2LT5kZXYsIGNxLT5idWYuYnVmLm5wYWdlcywgY3EtPmJ1Zi5idWYucGFnZV9zaGlmdCwKLQkJCQkgICAgJmNxLT5idWYubXR0KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2J1ZjsKLQotCQllcnIgPSBtbHg0X2J1Zl93cml0ZV9tdHQoZGV2LT5kZXYsICZjcS0+YnVmLm10dCwgJmNxLT5idWYuYnVmKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX210dDsKIAogCQl1YXIgPSAmZGV2LT5wcml2X3VhcjsKIAl9CkBAIC0xODcsMTIgKzI0MywxMCBAQAogZXJyX210dDoKIAltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmY3EtPmJ1Zi5tdHQpOwogCi1lcnJfYnVmOgogCWlmIChjb250ZXh0KQogCQlpYl91bWVtX3JlbGVhc2UoY3EtPnVtZW0pOwogCWVsc2UKLQkJbWx4NF9idWZfZnJlZShkZXYtPmRldiwgZW50cmllcyAqIHNpemVvZiAoc3RydWN0IG1seDRfY3FlKSwKLQkJCSAgICAgICZjcS0+YnVmLmJ1Zik7CisJCW1seDRfaWJfZnJlZV9jcV9idWYoZGV2LCAmY3EtPmJ1ZiwgZW50cmllcyk7CiAKIGVycl9kYjoKIAlpZiAoIWNvbnRleHQpCkBAIC0yMDQsNiArMjU4LDE3MCBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBpbnQgbWx4NF9hbGxvY19yZXNpemVfYnVmKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EsCisJCQkJICBpbnQgZW50cmllcykKK3sKKwlpbnQgZXJyOworCisJaWYgKGNxLT5yZXNpemVfYnVmKQorCQlyZXR1cm4gLUVCVVNZOworCisJY3EtPnJlc2l6ZV9idWYgPSBrbWFsbG9jKHNpemVvZiAqY3EtPnJlc2l6ZV9idWYsIEdGUF9BVE9NSUMpOworCWlmICghY3EtPnJlc2l6ZV9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gbWx4NF9pYl9hbGxvY19jcV9idWYoZGV2LCAmY3EtPnJlc2l6ZV9idWYtPmJ1ZiwgZW50cmllcyk7CisJaWYgKGVycikgeworCQlrZnJlZShjcS0+cmVzaXplX2J1Zik7CisJCWNxLT5yZXNpemVfYnVmID0gTlVMTDsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljcS0+cmVzaXplX2J1Zi0+Y3FlID0gZW50cmllcyAtIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X2FsbG9jX3Jlc2l6ZV91bWVtKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EsCisJCQkJICAgaW50IGVudHJpZXMsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IG1seDRfaWJfcmVzaXplX2NxIHVjbWQ7CisJaW50IGVycjsKKworCWlmIChjcS0+cmVzaXplX3VtZW0pCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoaWJfY29weV9mcm9tX3VkYXRhKCZ1Y21kLCB1ZGF0YSwgc2l6ZW9mIHVjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWNxLT5yZXNpemVfYnVmID0ga21hbGxvYyhzaXplb2YgKmNxLT5yZXNpemVfYnVmLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNxLT5yZXNpemVfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IG1seDRfaWJfZ2V0X2NxX3VtZW0oZGV2LCBjcS0+dW1lbS0+Y29udGV4dCwgJmNxLT5yZXNpemVfYnVmLT5idWYsCisJCQkJICAmY3EtPnJlc2l6ZV91bWVtLCB1Y21kLmJ1Zl9hZGRyLCBlbnRyaWVzKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGNxLT5yZXNpemVfYnVmKTsKKwkJY3EtPnJlc2l6ZV9idWYgPSBOVUxMOworCQlyZXR1cm4gZXJyOworCX0KKworCWNxLT5yZXNpemVfYnVmLT5jcWUgPSBlbnRyaWVzIC0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1seDRfaWJfZ2V0X291dHN0YW5kaW5nX2NxZXMoc3RydWN0IG1seDRfaWJfY3EgKmNxKQoreworCXUzMiBpOworCisJaSA9IGNxLT5tY3EuY29uc19pbmRleDsKKwl3aGlsZSAoZ2V0X3N3X2NxZShjcSwgaSAmIGNxLT5pYmNxLmNxZSkpCisJCSsraTsKKworCXJldHVybiBpIC0gY3EtPm1jcS5jb25zX2luZGV4OworfQorCitzdGF0aWMgdm9pZCBtbHg0X2liX2NxX3Jlc2l6ZV9jb3B5X2NxZXMoc3RydWN0IG1seDRfaWJfY3EgKmNxKQoreworCXN0cnVjdCBtbHg0X2NxZSAqY3FlOworCWludCBpOworCisJaSA9IGNxLT5tY3EuY29uc19pbmRleDsKKwljcWUgPSBnZXRfY3FlKGNxLCBpICYgY3EtPmliY3EuY3FlKTsKKwl3aGlsZSAoKGNxZS0+b3duZXJfc3Jfb3Bjb2RlICYgTUxYNF9DUUVfT1BDT0RFX01BU0spICE9IE1MWDRfQ1FFX09QQ09ERV9SRVNJWkUpIHsKKwkJbWVtY3B5KGdldF9jcWVfZnJvbV9idWYoJmNxLT5yZXNpemVfYnVmLT5idWYsCisJCQkJCShpICsgMSkgJiBjcS0+cmVzaXplX2J1Zi0+Y3FlKSwKKwkJCWdldF9jcWUoY3EsIGkgJiBjcS0+aWJjcS5jcWUpLCBzaXplb2Yoc3RydWN0IG1seDRfY3FlKSk7CisJCWNxZSA9IGdldF9jcWUoY3EsICsraSAmIGNxLT5pYmNxLmNxZSk7CisJfQorCSsrY3EtPm1jcS5jb25zX2luZGV4OworfQorCitpbnQgbWx4NF9pYl9yZXNpemVfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgZW50cmllcywgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9IHRvX21kZXYoaWJjcS0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EgPSB0b19tY3EoaWJjcSk7CisJaW50IG91dHN0X2NxZTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmY3EtPnJlc2l6ZV9tdXRleCk7CisKKwlpZiAoZW50cmllcyA8IDEgfHwgZW50cmllcyA+IGRldi0+ZGV2LT5jYXBzLm1heF9jcWVzKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWVudHJpZXMgPSByb3VuZHVwX3Bvd19vZl90d28oZW50cmllcyArIDEpOworCWlmIChlbnRyaWVzID09IGliY3EtPmNxZSArIDEpIHsKKwkJZXJyID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGliY3EtPnVvYmplY3QpIHsKKwkJZXJyID0gbWx4NF9hbGxvY19yZXNpemVfdW1lbShkZXYsIGNxLCBlbnRyaWVzLCB1ZGF0YSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQkvKiBDYW4ndCBiZSBzbWFsbGVyIHRoZW4gdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZyBDUUVzICovCisJCW91dHN0X2NxZSA9IG1seDRfaWJfZ2V0X291dHN0YW5kaW5nX2NxZXMoY3EpOworCQlpZiAoZW50cmllcyA8IG91dHN0X2NxZSArIDEpIHsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IG1seDRfYWxsb2NfcmVzaXplX2J1ZihkZXYsIGNxLCBlbnRyaWVzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCWVyciA9IG1seDRfY3FfcmVzaXplKGRldi0+ZGV2LCAmY3EtPm1jcSwgZW50cmllcywgJmNxLT5yZXNpemVfYnVmLT5idWYubXR0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9idWY7CisKKwlpZiAoaWJjcS0+dW9iamVjdCkgeworCQljcS0+YnVmICAgICAgPSBjcS0+cmVzaXplX2J1Zi0+YnVmOworCQljcS0+aWJjcS5jcWUgPSBjcS0+cmVzaXplX2J1Zi0+Y3FlOworCQlpYl91bWVtX3JlbGVhc2UoY3EtPnVtZW0pOworCQljcS0+dW1lbSAgICAgPSBjcS0+cmVzaXplX3VtZW07CisKKwkJa2ZyZWUoY3EtPnJlc2l6ZV9idWYpOworCQljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CisJCWNxLT5yZXNpemVfdW1lbSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycSgmY3EtPmxvY2spOworCQlpZiAoY3EtPnJlc2l6ZV9idWYpIHsKKwkJCW1seDRfaWJfY3FfcmVzaXplX2NvcHlfY3FlcyhjcSk7CisJCQltbHg0X2liX2ZyZWVfY3FfYnVmKGRldiwgJmNxLT5idWYsIGNxLT5pYmNxLmNxZSk7CisJCQljcS0+YnVmICAgICAgPSBjcS0+cmVzaXplX2J1Zi0+YnVmOworCQkJY3EtPmliY3EuY3FlID0gY3EtPnJlc2l6ZV9idWYtPmNxZTsKKworCQkJa2ZyZWUoY3EtPnJlc2l6ZV9idWYpOworCQkJY3EtPnJlc2l6ZV9idWYgPSBOVUxMOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmY3EtPmxvY2spOworCX0KKworCWdvdG8gb3V0OworCitlcnJfYnVmOgorCWlmICghaWJjcS0+dW9iamVjdCkKKwkJbWx4NF9pYl9mcmVlX2NxX2J1ZihkZXYsICZjcS0+cmVzaXplX2J1Zi0+YnVmLAorCQkJCSAgICBjcS0+cmVzaXplX2J1Zi0+Y3FlKTsKKworCWtmcmVlKGNxLT5yZXNpemVfYnVmKTsKKwljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CisKKwlpZiAoY3EtPnJlc2l6ZV91bWVtKSB7CisJCWliX3VtZW1fcmVsZWFzZShjcS0+cmVzaXplX3VtZW0pOworCQljcS0+cmVzaXplX3VtZW0gPSBOVUxMOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmY3EtPnJlc2l6ZV9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKwogaW50IG1seDRfaWJfZGVzdHJveV9jcShzdHJ1Y3QgaWJfY3EgKmNxKQogewogCXN0cnVjdCBtbHg0X2liX2RldiAqZGV2ID0gdG9fbWRldihjcS0+ZGV2aWNlKTsKQEAgLTIxNiw4ICs0MzQsNyBAQAogCQltbHg0X2liX2RiX3VubWFwX3VzZXIodG9fbXVjb250ZXh0KGNxLT51b2JqZWN0LT5jb250ZXh0KSwgJm1jcS0+ZGIpOwogCQlpYl91bWVtX3JlbGVhc2UobWNxLT51bWVtKTsKIAl9IGVsc2UgewotCQltbHg0X2J1Zl9mcmVlKGRldi0+ZGV2LCAoY3EtPmNxZSArIDEpICogc2l6ZW9mIChzdHJ1Y3QgbWx4NF9jcWUpLAotCQkJICAgICAgJm1jcS0+YnVmLmJ1Zik7CisJCW1seDRfaWJfZnJlZV9jcV9idWYoZGV2LCAmbWNxLT5idWYsIGNxLT5jcWUgKyAxKTsKIAkJbWx4NF9pYl9kYl9mcmVlKGRldiwgJm1jcS0+ZGIpOwogCX0KIApAQCAtMjk3LDYgKzUxNCwyMCBAQAogCXdjLT52ZW5kb3JfZXJyID0gY3FlLT52ZW5kb3JfZXJyX3N5bmRyb21lOwogfQogCitzdGF0aWMgaW50IG1seDRfaWJfaXBvaWJfY3N1bV9vayhfX2JlMzIgc3RhdHVzLCBfX2JlMTYgY2hlY2tzdW0pCit7CisJcmV0dXJuICgoc3RhdHVzICYgY3B1X3RvX2JlMzIoTUxYNF9DUUVfSVBPSUJfU1RBVFVTX0lQVjQJfAorCQkJCSAgICAgIE1MWDRfQ1FFX0lQT0lCX1NUQVRVU19JUFY0Rgl8CisJCQkJICAgICAgTUxYNF9DUUVfSVBPSUJfU1RBVFVTX0lQVjRPUFQJfAorCQkJCSAgICAgIE1MWDRfQ1FFX0lQT0lCX1NUQVRVU19JUFY2CXwKKwkJCQkgICAgICBNTFg0X0NRRV9JUE9JQl9TVEFUVVNfSVBPSykpID09CisJCWNwdV90b19iZTMyKE1MWDRfQ1FFX0lQT0lCX1NUQVRVU19JUFY0CXwKKwkJCSAgICBNTFg0X0NRRV9JUE9JQl9TVEFUVVNfSVBPSykpCQkmJgorCQkoc3RhdHVzICYgY3B1X3RvX2JlMzIoTUxYNF9DUUVfSVBPSUJfU1RBVFVTX1VEUAl8CisJCQkJICAgICAgTUxYNF9DUUVfSVBPSUJfU1RBVFVTX1RDUCkpCSYmCisJCWNoZWNrc3VtID09IGNwdV90b19iZTE2KDB4ZmZmZik7Cit9CisKIHN0YXRpYyBpbnQgbWx4NF9pYl9wb2xsX29uZShzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EsCiAJCQkgICAgc3RydWN0IG1seDRfaWJfcXAgKipjdXJfcXAsCiAJCQkgICAgc3RydWN0IGliX3djICp3YykKQEAgLTMxMCw2ICs1NDEsNyBAQAogCXUzMiBnX21scGF0aF9ycXBuOwogCXUxNiB3cWVfY3RyOwogCityZXBvbGw6CiAJY3FlID0gbmV4dF9jcWVfc3coY3EpOwogCWlmICghY3FlKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTMzMiw2ICs1NjQsMjIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogUmVzaXplIENRIGluIHByb2dyZXNzICovCisJaWYgKHVubGlrZWx5KChjcWUtPm93bmVyX3NyX29wY29kZSAmIE1MWDRfQ1FFX09QQ09ERV9NQVNLKSA9PSBNTFg0X0NRRV9PUENPREVfUkVTSVpFKSkgeworCQlpZiAoY3EtPnJlc2l6ZV9idWYpIHsKKwkJCXN0cnVjdCBtbHg0X2liX2RldiAqZGV2ID0gdG9fbWRldihjcS0+aWJjcS5kZXZpY2UpOworCisJCQltbHg0X2liX2ZyZWVfY3FfYnVmKGRldiwgJmNxLT5idWYsIGNxLT5pYmNxLmNxZSk7CisJCQljcS0+YnVmICAgICAgPSBjcS0+cmVzaXplX2J1Zi0+YnVmOworCQkJY3EtPmliY3EuY3FlID0gY3EtPnJlc2l6ZV9idWYtPmNxZTsKKworCQkJa2ZyZWUoY3EtPnJlc2l6ZV9idWYpOworCQkJY3EtPnJlc2l6ZV9idWYgPSBOVUxMOworCQl9CisKKwkJZ290byByZXBvbGw7CisJfQorCiAJaWYgKCEqY3VyX3FwIHx8CiAJICAgIChiZTMyX3RvX2NwdShjcWUtPm15X3FwbikgJiAweGZmZmZmZikgIT0gKCpjdXJfcXApLT5tcXAucXBuKSB7CiAJCS8qCkBAIC00MDYsNiArNjU0LDkgQEAKIAkJY2FzZSBNTFg0X09QQ09ERV9CSU5EX01XOgogCQkJd2MtPm9wY29kZSAgICA9IElCX1dDX0JJTkRfTVc7CiAJCQlicmVhazsKKwkJY2FzZSBNTFg0X09QQ09ERV9MU086CisJCQl3Yy0+b3Bjb2RlICAgID0gSUJfV0NfTFNPOworCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQl3Yy0+Ynl0ZV9sZW4gPSBiZTMyX3RvX2NwdShjcWUtPmJ5dGVfY250KTsKQEAgLTQzNCw2ICs2ODUsOCBAQAogCQl3Yy0+ZGxpZF9wYXRoX2JpdHMgPSAoZ19tbHBhdGhfcnFwbiA+PiAyNCkgJiAweDdmOwogCQl3Yy0+d2NfZmxhZ3MJICB8PSBnX21scGF0aF9ycXBuICYgMHg4MDAwMDAwMCA/IElCX1dDX0dSSCA6IDA7CiAJCXdjLT5wa2V5X2luZGV4ICAgICA9IGJlMzJfdG9fY3B1KGNxZS0+aW1tZWRfcnNzX2ludmFsaWQpICYgMHg3ZjsKKwkJd2MtPmNzdW1fb2sJICAgPSBtbHg0X2liX2lwb2liX2NzdW1fb2soY3FlLT5pcG9pYl9zdGF0dXMsCisJCQkJCQkJICAgY3FlLT5jaGVja3N1bSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCmluZGV4IDBlZDAyYjcuLjRjMWU3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJCWV2ZW50LmRldmljZQkgICAgICAgPSBpYmRldjsKIAkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAotCQkJaWYocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKQorCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOwogCQkJZWxzZQogCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwppbmRleCA5NmEzOWI1Li40ZDliNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCkBAIC00NCw4ICs0NCw4IEBACiAjaW5jbHVkZSAidXNlci5oIgogCiAjZGVmaW5lIERSVl9OQU1FCSJtbHg0X2liIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wMSIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIk1heSAxLCAyMDA2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgorI2RlZmluZSBEUlZfUkVMREFURQkiQXByaWwgNCwgMjAwOCIKIAogTU9EVUxFX0FVVEhPUigiUm9sYW5kIERyZWllciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWxsYW5veCBDb25uZWN0WCBIQ0EgSW5maW5pQmFuZCBkcml2ZXIiKTsKQEAgLTk5LDYgKzk5LDEwIEBACiAJCXByb3BzLT5kZXZpY2VfY2FwX2ZsYWdzIHw9IElCX0RFVklDRV9BVVRPX1BBVEhfTUlHOwogCWlmIChkZXYtPmRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX1VEX0FWX1BPUlQpCiAJCXByb3BzLT5kZXZpY2VfY2FwX2ZsYWdzIHw9IElCX0RFVklDRV9VRF9BVl9QT1JUX0VORk9SQ0U7CisJaWYgKGRldi0+ZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfSVBPSUJfQ1NVTSkKKwkJcHJvcHMtPmRldmljZV9jYXBfZmxhZ3MgfD0gSUJfREVWSUNFX1VEX0lQX0NTVU07CisJaWYgKGRldi0+ZGV2LT5jYXBzLm1heF9nc29fc3opCisJCXByb3BzLT5kZXZpY2VfY2FwX2ZsYWdzIHw9IElCX0RFVklDRV9VRF9UU087CiAKIAlwcm9wcy0+dmVuZG9yX2lkCSAgID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikgKG91dF9tYWQtPmRhdGEgKyAzNikpICYKIAkJMHhmZmZmZmY7CkBAIC00NzcsNDIgKzQ4MSw1MSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7Ci0Jc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IG1seDRfaWJfZGV2LCBpYl9kZXYuY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9CisJCWNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBtbHg0X2liX2RldiwgaWJfZGV2LmRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiTVQlZFxuIiwgZGV2LT5kZXYtPnBkZXYtPmRldmljZSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfZndfdmVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZndfdmVyKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IG1seDRfaWJfZGV2LCBpYl9kZXYuY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9CisJCWNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBtbHg0X2liX2RldiwgaWJfZGV2LmRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWQuJWRcbiIsIChpbnQpIChkZXYtPmRldi0+Y2Fwcy5md192ZXIgPj4gMzIpLAogCQkgICAgICAgKGludCkgKGRldi0+ZGV2LT5jYXBzLmZ3X3ZlciA+PiAxNikgJiAweGZmZmYsCiAJCSAgICAgICAoaW50KSBkZXYtPmRldi0+Y2Fwcy5md192ZXIgJiAweGZmZmYpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBtbHg0X2liX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBtbHg0X2liX2RldiwgaWJfZGV2LmNsYXNzX2Rldik7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPQorCQljb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgbWx4NF9pYl9kZXYsIGliX2Rldi5kZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBkZXYtPmRldi0+cmV2X2lkKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19ib2FyZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2JvYXJkKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgbWx4NF9pYl9kZXYsIGliX2Rldi5jbGFzc19kZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUuKnNcbiIsIE1MWDRfQk9BUkRfSURfTEVOLCBkZXYtPmRldi0+Ym9hcmRfaWQpOworCXN0cnVjdCBtbHg0X2liX2RldiAqZGV2ID0KKwkJY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IG1seDRfaWJfZGV2LCBpYl9kZXYuZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlLipzXG4iLCBNTFg0X0JPQVJEX0lEX0xFTiwKKwkJICAgICAgIGRldi0+ZGV2LT5ib2FyZF9pZCk7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihod19yZXYsICAgU19JUlVHTywgc2hvd19yZXYsICAgIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZ3X3ZlciwgICBTX0lSVUdPLCBzaG93X2Z3X3ZlciwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaGNhX3R5cGUsIFNfSVJVR08sIHNob3dfaGNhLCAgICBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihib2FyZF9pZCwgU19JUlVHTywgc2hvd19ib2FyZCwgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGh3X3JldiwgICBTX0lSVUdPLCBzaG93X3JldiwgICAgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZndfdmVyLCAgIFNfSVJVR08sIHNob3dfZndfdmVyLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihoY2FfdHlwZSwgU19JUlVHTywgc2hvd19oY2EsICAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX2lkLCBTX0lSVUdPLCBzaG93X2JvYXJkLCAgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqbWx4NF9jbGFzc19hdHRyaWJ1dGVzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX2h3X3JldiwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfZndfdmVyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9oY2FfdHlwZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfaWQKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWx4NF9jbGFzc19hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2h3X3JldiwKKwkmZGV2X2F0dHJfZndfdmVyLAorCSZkZXZfYXR0cl9oY2FfdHlwZSwKKwkmZGV2X2F0dHJfYm9hcmRfaWQKIH07CiAKIHN0YXRpYyB2b2lkICptbHg0X2liX2FkZChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKQEAgLTU2Nyw2ICs1ODAsNyBAQAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVJFR19NUikJCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NPTVBfQ0hBTk5FTCkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ1EpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1JFU0laRV9DUSkJCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9DUSkJCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1FQKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfUVApCQl8CkBAIC02MDUsNiArNjE5LDggQEAKIAlpYmRldi0+aWJfZGV2LnBvc3Rfc2VuZAkJPSBtbHg0X2liX3Bvc3Rfc2VuZDsKIAlpYmRldi0+aWJfZGV2LnBvc3RfcmVjdgkJPSBtbHg0X2liX3Bvc3RfcmVjdjsKIAlpYmRldi0+aWJfZGV2LmNyZWF0ZV9jcQkJPSBtbHg0X2liX2NyZWF0ZV9jcTsKKwlpYmRldi0+aWJfZGV2Lm1vZGlmeV9jcQkJPSBtbHg0X2liX21vZGlmeV9jcTsKKwlpYmRldi0+aWJfZGV2LnJlc2l6ZV9jcQkJPSBtbHg0X2liX3Jlc2l6ZV9jcTsKIAlpYmRldi0+aWJfZGV2LmRlc3Ryb3lfY3EJPSBtbHg0X2liX2Rlc3Ryb3lfY3E7CiAJaWJkZXYtPmliX2Rldi5wb2xsX2NxCQk9IG1seDRfaWJfcG9sbF9jcTsKIAlpYmRldi0+aWJfZGV2LnJlcV9ub3RpZnlfY3EJPSBtbHg0X2liX2FybV9jcTsKQEAgLTYzMyw4ICs2NDksOCBAQAogCQlnb3RvIGVycl9yZWc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtbHg0X2NsYXNzX2F0dHJpYnV0ZXMpOyArK2kpIHsKLQkJaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmaWJkZXYtPmliX2Rldi5jbGFzc19kZXYsCi0JCQkJCSAgICAgICBtbHg0X2NsYXNzX2F0dHJpYnV0ZXNbaV0pKQorCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZpYmRldi0+aWJfZGV2LmRldiwKKwkJCQkgICAgICAgbWx4NF9jbGFzc19hdHRyaWJ1dGVzW2ldKSkKIAkJCWdvdG8gZXJyX3JlZzsKIAl9CiAKQEAgLTY3NSwxOCArNjkxLDIwIEBACiB9CiAKIHN0YXRpYyB2b2lkIG1seDRfaWJfZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmliZGV2X3B0ciwKLQkJCSAgZW51bSBtbHg0X2Rldl9ldmVudCBldmVudCwgaW50IHN1YnR5cGUsCi0JCQkgIGludCBwb3J0KQorCQkJICBlbnVtIG1seDRfZGV2X2V2ZW50IGV2ZW50LCBpbnQgcG9ydCkKIHsKIAlzdHJ1Y3QgaWJfZXZlbnQgaWJldjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIE1MWDRfRVZFTlRfVFlQRV9QT1JUX0NIQU5HRToKLQkJaWJldi5ldmVudCA9IHN1YnR5cGUgPT0gTUxYNF9QT1JUX0NIQU5HRV9TVUJUWVBFX0FDVElWRSA/Ci0JCQlJQl9FVkVOVF9QT1JUX0FDVElWRSA6IElCX0VWRU5UX1BPUlRfRVJSOworCWNhc2UgTUxYNF9ERVZfRVZFTlRfUE9SVF9VUDoKKwkJaWJldi5ldmVudCA9IElCX0VWRU5UX1BPUlRfQUNUSVZFOwogCQlicmVhazsKIAotCWNhc2UgTUxYNF9FVkVOVF9UWVBFX0xPQ0FMX0NBVEFTX0VSUk9SOgorCWNhc2UgTUxYNF9ERVZfRVZFTlRfUE9SVF9ET1dOOgorCQlpYmV2LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCWJyZWFrOworCisJY2FzZSBNTFg0X0RFVl9FVkVOVF9DQVRBU1RST1BISUNfRVJST1I6CiAJCWliZXYuZXZlbnQgPSBJQl9FVkVOVF9ERVZJQ0VfRkFUQUw7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmgKaW5kZXggMzcyNmU0NS4uOWU2MzczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWx4NF9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21seDRfaWIuaApAQCAtNzgsMTMgKzc4LDIxIEBACiAJc3RydWN0IG1seDRfbXR0CQltdHQ7CiB9OwogCitzdHJ1Y3QgbWx4NF9pYl9jcV9yZXNpemUgeworCXN0cnVjdCBtbHg0X2liX2NxX2J1ZglidWY7CisJaW50CQkJY3FlOworfTsKKwogc3RydWN0IG1seDRfaWJfY3EgewogCXN0cnVjdCBpYl9jcQkJaWJjcTsKIAlzdHJ1Y3QgbWx4NF9jcQkJbWNxOwogCXN0cnVjdCBtbHg0X2liX2NxX2J1ZglidWY7CisJc3RydWN0IG1seDRfaWJfY3FfcmVzaXplICpyZXNpemVfYnVmOwogCXN0cnVjdCBtbHg0X2liX2RiCWRiOwogCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IG11dGV4CQlyZXNpemVfbXV0ZXg7CiAJc3RydWN0IGliX3VtZW0JICAgICAgICp1bWVtOworCXN0cnVjdCBpYl91bWVtCSAgICAgICAqcmVzaXplX3VtZW07CiB9OwogCiBzdHJ1Y3QgbWx4NF9pYl9tciB7CkBAIC0xMTAsNiArMTE4LDEwIEBACiAJdW5zaWduZWQJCXRhaWw7CiB9OwogCitlbnVtIG1seDRfaWJfcXBfZmxhZ3MgeworCU1MWDRfSUJfUVBfTFNPCQk9IDEgPDwgMAorfTsKKwogc3RydWN0IG1seDRfaWJfcXAgewogCXN0cnVjdCBpYl9xcAkJaWJxcDsKIAlzdHJ1Y3QgbWx4NF9xcAkJbXFwOwpAQCAtMTI5LDYgKzE0MSw3IEBACiAJc3RydWN0IG1seDRfbXR0CQltdHQ7CiAJaW50CQkJYnVmX3NpemU7CiAJc3RydWN0IG11dGV4CQltdXRleDsKKwl1MzIJCQlmbGFnczsKIAl1OAkJCXBvcnQ7CiAJdTgJCQlhbHRfcG9ydDsKIAl1OAkJCWF0b21pY19yZF9lbjsKQEAgLTI0OSw2ICsyNjIsOCBAQAogCQkJCSAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiBpbnQgbWx4NF9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKm1yKTsKIAoraW50IG1seDRfaWJfbW9kaWZ5X2NxKHN0cnVjdCBpYl9jcSAqY3EsIHUxNiBjcV9jb3VudCwgdTE2IGNxX3BlcmlvZCk7CitpbnQgbWx4NF9pYl9yZXNpemVfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgZW50cmllcywgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiBzdHJ1Y3QgaWJfY3EgKm1seDRfaWJfY3JlYXRlX2NxKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBpbnQgZW50cmllcywgaW50IHZlY3RvciwKIAkJCQlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCiAJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCA5NThlMjA1Li5iNzVlZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTcxLDYgKzcxLDcgQEAKIAogc3RhdGljIGNvbnN0IF9fYmUzMiBtbHg0X2liX29wY29kZVtdID0gewogCVtJQl9XUl9TRU5EXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSwKKwlbSUJfV1JfTFNPXQkJCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MU08pLAogCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU1NKSwKIAlbSUJfV1JfUkRNQV9XUklURV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKIAlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKQEAgLTEyMiw3ICsxMjMsNyBAQAogICovCiBzdGF0aWMgdm9pZCBzdGFtcF9zZW5kX3dxZShzdHJ1Y3QgbWx4NF9pYl9xcCAqcXAsIGludCBuLCBpbnQgc2l6ZSkKIHsKLQl1MzIgKndxZTsKKwlfX2JlMzIgKndxZTsKIAlpbnQgaTsKIAlpbnQgczsKIAlpbnQgaW5kOwpAQCAtMTQzLDcgKzE0NCw3IEBACiAJCWJ1ZiA9IGdldF9zZW5kX3dxZShxcCwgbiAmIChxcC0+c3Eud3FlX2NudCAtIDEpKTsKIAkJZm9yIChpID0gNjQ7IGkgPCBzOyBpICs9IDY0KSB7CiAJCQl3cWUgPSBidWYgKyBpOwotCQkJKndxZSA9IDB4ZmZmZmZmZmY7CisJCQkqd3FlID0gY3B1X3RvX2JlMzIoMHhmZmZmZmZmZik7CiAJCX0KIAl9CiB9CkBAIC0yNDIsNyArMjQzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2VuZF93cWVfb3ZlcmhlYWQoZW51bSBpYl9xcF90eXBlIHR5cGUpCitzdGF0aWMgaW50IHNlbmRfd3FlX292ZXJoZWFkKGVudW0gaWJfcXBfdHlwZSB0eXBlLCB1MzIgZmxhZ3MpCiB7CiAJLyoKIAkgKiBVRCBXUUVzIG11c3QgaGF2ZSBhIGRhdGFncmFtIHNlZ21lbnQuCkBAIC0yNTMsNyArMjU0LDggQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIElCX1FQVF9VRDoKIAkJcmV0dXJuIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2N0cmxfc2VnKSArCi0JCQlzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhZ3JhbV9zZWcpOworCQkJc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfZGF0YWdyYW1fc2VnKSArCisJCQkoKGZsYWdzICYgTUxYNF9JQl9RUF9MU08pID8gNjQgOiAwKTsKIAljYXNlIElCX1FQVF9VQzoKIAkJcmV0dXJuIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2N0cmxfc2VnKSArCiAJCQlzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9yYWRkcl9zZWcpOwpAQCAtMzE1LDcgKzMxNyw3IEBACiAJLyogU2FuaXR5IGNoZWNrIFNRIHNpemUgYmVmb3JlIHByb2NlZWRpbmcgKi8KIAlpZiAoY2FwLT5tYXhfc2VuZF93cgkgPiBkZXYtPmRldi0+Y2Fwcy5tYXhfd3FlcyAgfHwKIAkgICAgY2FwLT5tYXhfc2VuZF9zZ2UJID4gZGV2LT5kZXYtPmNhcHMubWF4X3NxX3NnIHx8Ci0JICAgIGNhcC0+bWF4X2lubGluZV9kYXRhICsgc2VuZF93cWVfb3ZlcmhlYWQodHlwZSkgKworCSAgICBjYXAtPm1heF9pbmxpbmVfZGF0YSArIHNlbmRfd3FlX292ZXJoZWFkKHR5cGUsIHFwLT5mbGFncykgKwogCSAgICBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9pbmxpbmVfc2VnKSA+IGRldi0+ZGV2LT5jYXBzLm1heF9zcV9kZXNjX3N6KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzI5LDcgKzMzMSw3IEBACiAKIAlzID0gbWF4KGNhcC0+bWF4X3NlbmRfc2dlICogc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcpLAogCQljYXAtPm1heF9pbmxpbmVfZGF0YSArIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcpKSArCi0JCXNlbmRfd3FlX292ZXJoZWFkKHR5cGUpOworCQlzZW5kX3dxZV9vdmVyaGVhZCh0eXBlLCBxcC0+ZmxhZ3MpOwogCiAJLyoKIAkgKiBIZXJtb24gc3VwcG9ydHMgc2hyaW5raW5nIFdRRXMsIHN1Y2ggdGhhdCBhIHNpbmdsZSB3b3JrCkBAIC0zOTQsNyArMzk2LDggQEAKIAl9CiAKIAlxcC0+c3EubWF4X2dzID0gKChxcC0+c3FfbWF4X3dxZXNfcGVyX3dyIDw8IHFwLT5zcS53cWVfc2hpZnQpIC0KLQkJCSBzZW5kX3dxZV9vdmVyaGVhZCh0eXBlKSkgLyBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyk7CisJCQkgc2VuZF93cWVfb3ZlcmhlYWQodHlwZSwgcXAtPmZsYWdzKSkgLworCQlzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyk7CiAKIAlxcC0+YnVmX3NpemUgPSAocXAtPnJxLndxZV9jbnQgPDwgcXAtPnJxLndxZV9zaGlmdCkgKwogCQkocXAtPnNxLndxZV9jbnQgPDwgcXAtPnNxLndxZV9zaGlmdCk7CkBAIC01MDMsNiArNTA2LDkgQEAKIAl9IGVsc2UgewogCQlxcC0+c3Ffbm9fcHJlZmV0Y2ggPSAwOwogCisJCWlmIChpbml0X2F0dHItPmNyZWF0ZV9mbGFncyAmIElCX1FQX0NSRUFURV9JUE9JQl9VRF9MU08pCisJCQlxcC0+ZmxhZ3MgfD0gTUxYNF9JQl9RUF9MU087CisKIAkJZXJyID0gc2V0X2tlcm5lbF9zcV9zaXplKGRldiwgJmluaXRfYXR0ci0+Y2FwLCBpbml0X2F0dHItPnFwX3R5cGUsIHFwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyOwpAQCAtNjczLDYgKzY3OSwxMyBAQAogCXN0cnVjdCBtbHg0X2liX3FwICpxcDsKIAlpbnQgZXJyOwogCisJLyogV2Ugb25seSBzdXBwb3J0IExTTywgYW5kIG9ubHkgZm9yIGtlcm5lbCBVRCBRUHMuICovCisJaWYgKGluaXRfYXR0ci0+Y3JlYXRlX2ZsYWdzICYgfklCX1FQX0NSRUFURV9JUE9JQl9VRF9MU08pCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChpbml0X2F0dHItPmNyZWF0ZV9mbGFncyAmIElCX1FQX0NSRUFURV9JUE9JQl9VRF9MU08gJiYKKwkgICAgKHBkLT51b2JqZWN0IHx8IGluaXRfYXR0ci0+cXBfdHlwZSAhPSBJQl9RUFRfVUQpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwogCXN3aXRjaCAoaW5pdF9hdHRyLT5xcF90eXBlKSB7CiAJY2FzZSBJQl9RUFRfUkM6CiAJY2FzZSBJQl9RUFRfVUM6CkBAIC04NzYsMTAgKzg4OSwxNSBAQAogCQl9CiAJfQogCi0JaWYgKGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX0dTSSB8fCBpYnFwLT5xcF90eXBlID09IElCX1FQVF9TTUkgfHwKLQkgICAgaWJxcC0+cXBfdHlwZSA9PSBJQl9RUFRfVUQpCisJaWYgKGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX0dTSSB8fCBpYnFwLT5xcF90eXBlID09IElCX1FQVF9TTUkpCiAJCWNvbnRleHQtPm10dV9tc2dtYXggPSAoSUJfTVRVXzQwOTYgPDwgNSkgfCAxMTsKLQllbHNlIGlmIChhdHRyX21hc2sgJiBJQl9RUF9QQVRIX01UVSkgeworCWVsc2UgaWYgKGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1VEKSB7CisJCWlmIChxcC0+ZmxhZ3MgJiBNTFg0X0lCX1FQX0xTTykKKwkJCWNvbnRleHQtPm10dV9tc2dtYXggPSAoSUJfTVRVXzQwOTYgPDwgNSkgfAorCQkJCQkgICAgICBpbG9nMihkZXYtPmRldi0+Y2Fwcy5tYXhfZ3NvX3N6KTsKKwkJZWxzZQorCQkJY29udGV4dC0+bXR1X21zZ21heCA9IChJQl9NVFVfNDA5NiA8PCA1KSB8IDExOworCX0gZWxzZSBpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEFUSF9NVFUpIHsKIAkJaWYgKGF0dHItPnBhdGhfbXR1IDwgSUJfTVRVXzI1NiB8fCBhdHRyLT5wYXRoX210dSA+IElCX01UVV80MDk2KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInBhdGggTVRVICgldSkgaXMgaW52YWxpZFxuIiwKIAkJCSAgICAgICBhdHRyLT5wYXRoX210dSk7CkBAIC0xMTgyLDcgKzEyMDAsNyBAQAogfQogCiBzdGF0aWMgaW50IGJ1aWxkX21seF9oZWFkZXIoc3RydWN0IG1seDRfaWJfc3FwICpzcXAsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwKLQkJCSAgICB2b2lkICp3cWUpCisJCQkgICAgdm9pZCAqd3FlLCB1bnNpZ25lZCAqbWx4X3NlZ19sZW4pCiB7CiAJc3RydWN0IGliX2RldmljZSAqaWJfZGV2ID0gJnRvX21kZXYoc3FwLT5xcC5pYnFwLmRldmljZSktPmliX2RldjsKIAlzdHJ1Y3QgbWx4NF93cWVfbWx4X3NlZyAqbWx4ID0gd3FlOwpAQCAtMTIzMSw3ICsxMjQ5LDcgQEAKIAljYXNlIElCX1dSX1NFTkRfV0lUSF9JTU06CiAJCXNxcC0+dWRfaGVhZGVyLmJ0aC5vcGNvZGUJID0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWV9XSVRIX0lNTUVESUFURTsKIAkJc3FwLT51ZF9oZWFkZXIuaW1tZWRpYXRlX3ByZXNlbnQgPSAxOwotCQlzcXAtPnVkX2hlYWRlci5pbW1lZGlhdGVfZGF0YSAgICA9IHdyLT5pbW1fZGF0YTsKKwkJc3FwLT51ZF9oZWFkZXIuaW1tZWRpYXRlX2RhdGEgICAgPSB3ci0+ZXguaW1tX2RhdGE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMwMyw3ICsxMzIxLDkgQEAKIAkJaSA9IDI7CiAJfQogCi0JcmV0dXJuIEFMSUdOKGkgKiBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9pbmxpbmVfc2VnKSArIGhlYWRlcl9zaXplLCAxNik7CisJKm1seF9zZWdfbGVuID0KKwkJQUxJR04oaSAqIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcpICsgaGVhZGVyX3NpemUsIDE2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtbHg0X3dxX292ZXJmbG93KHN0cnVjdCBtbHg0X2liX3dxICp3cSwgaW50IG5yZXEsIHN0cnVjdCBpYl9jcSAqaWJfY3EpCkBAIC0xMzk2LDYgKzE0MTYsMzQgQEAKIAlkc2VnLT5hZGRyICAgICAgID0gY3B1X3RvX2JlNjQoc2ctPmFkZHIpOwogfQogCitzdGF0aWMgaW50IGJ1aWxkX2xzb19zZWcoc3RydWN0IG1seDRfbHNvX3NlZyAqd3FlLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsCisJCQkgc3RydWN0IG1seDRfaWJfcXAgKnFwLCB1bnNpZ25lZCAqbHNvX3NlZ19sZW4pCit7CisJdW5zaWduZWQgaGFsaWduID0gQUxJR04oc2l6ZW9mICp3cWUgKyB3ci0+d3IudWQuaGxlbiwgMTYpOworCisJLyoKKwkgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGxpbWl0YXRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbgorCSAqIGEgZm9ydGhjb21pbmcgRlcgcmVsZWFzZToKKwkgKi8KKwlpZiAodW5saWtlbHkoaGFsaWduID4gNjQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseSghKHFwLT5mbGFncyAmIE1MWDRfSUJfUVBfTFNPKSAmJgorCQkgICAgIHdyLT5udW1fc2dlID4gcXAtPnNxLm1heF9ncyAtIChoYWxpZ24gPj4gNCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweSh3cWUtPmhlYWRlciwgd3ItPndyLnVkLmhlYWRlciwgd3ItPndyLnVkLmhsZW4pOworCisJLyogbWFrZSBzdXJlIExTTyBoZWFkZXIgaXMgd3JpdHRlbiBiZWZvcmUgb3ZlcndyaXRpbmcgc3RhbXBpbmcgKi8KKwl3bWIoKTsKKworCXdxZS0+bXNzX2hkcl9zaXplID0gY3B1X3RvX2JlMzIoKHdyLT53ci51ZC5tc3MgLSB3ci0+d3IudWQuaGxlbikgPDwgMTYgfAorCQkJCQl3ci0+d3IudWQuaGxlbik7CisKKwkqbHNvX3NlZ19sZW4gPSBoYWxpZ247CisJcmV0dXJuIDA7Cit9CisKIGludCBtbHg0X2liX3Bvc3Rfc2VuZChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwKIAkJICAgICAgc3RydWN0IGliX3NlbmRfd3IgKipiYWRfd3IpCiB7CkBAIC0xNDA5LDYgKzE0NTcsNyBAQAogCXVuc2lnbmVkIGluZDsKIAlpbnQgdW5pbml0aWFsaXplZF92YXIoc3RhbXApOwogCWludCB1bmluaXRpYWxpemVkX3ZhcihzaXplKTsKKwl1bnNpZ25lZCBzZWdsZW47CiAJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNxLmxvY2ssIGZsYWdzKTsKQEAgLTE0MzYsMTEgKzE0ODUsMTQgQEAKIAkJCSBjcHVfdG9fYmUzMihNTFg0X1dRRV9DVFJMX0NRX1VQREFURSkgOiAwKSB8CiAJCQkod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCA/CiAJCQkgY3B1X3RvX2JlMzIoTUxYNF9XUUVfQ1RSTF9TT0xJQ0lURUQpIDogMCkgfAorCQkJKCh3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfSVBfQ1NVTSkgPworCQkJIGNwdV90b19iZTMyKE1MWDRfV1FFX0NUUkxfSVBfQ1NVTSB8CisJCQkJICAgICBNTFg0X1dRRV9DVFJMX1RDUF9VRFBfQ1NVTSkgOiAwKSB8CiAJCQlxcC0+c3Ffc2lnbmFsX2JpdHM7CiAKIAkJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfU0VORF9XSVRIX0lNTSB8fAogCQkgICAgd3ItPm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NKQotCQkJY3RybC0+aW1tID0gd3ItPmltbV9kYXRhOworCQkJY3RybC0+aW1tID0gd3ItPmV4LmltbV9kYXRhOwogCQllbHNlCiAJCQljdHJsLT5pbW0gPSAwOwogCkBAIC0xNDg0LDE5ICsxNTM2LDI3IEBACiAJCQlzZXRfZGF0YWdyYW1fc2VnKHdxZSwgd3IpOwogCQkJd3FlICArPSBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhZ3JhbV9zZWcpOwogCQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhZ3JhbV9zZWcpIC8gMTY7CisKKwkJCWlmICh3ci0+b3Bjb2RlID09IElCX1dSX0xTTykgeworCQkJCWVyciA9IGJ1aWxkX2xzb19zZWcod3FlLCB3ciwgcXAsICZzZWdsZW4pOworCQkJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQkJCSpiYWRfd3IgPSB3cjsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCXdxZSAgKz0gc2VnbGVuOworCQkJCXNpemUgKz0gc2VnbGVuIC8gMTY7CisJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIElCX1FQVF9TTUk6CiAJCWNhc2UgSUJfUVBUX0dTSToKLQkJCWVyciA9IGJ1aWxkX21seF9oZWFkZXIodG9fbXNxcChxcCksIHdyLCBjdHJsKTsKLQkJCWlmIChlcnIgPCAwKSB7CisJCQllcnIgPSBidWlsZF9tbHhfaGVhZGVyKHRvX21zcXAocXApLCB3ciwgY3RybCwgJnNlZ2xlbik7CisJCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJCSpiYWRfd3IgPSB3cjsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCXdxZSAgKz0gZXJyOwotCQkJc2l6ZSArPSBlcnIgLyAxNjsKLQotCQkJZXJyID0gMDsKKwkJCXdxZSAgKz0gc2VnbGVuOworCQkJc2l6ZSArPSBzZWdsZW4gLyAxNjsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0xNzI1LDcgKzE3ODUsOSBAQAogCXN0cnVjdCBtbHg0X2liX3FwICpxcCA9IHRvX21xcChpYnFwKTsKIAlzdHJ1Y3QgbWx4NF9xcF9jb250ZXh0IGNvbnRleHQ7CiAJaW50IG1seDRfc3RhdGU7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJnFwLT5tdXRleCk7CiAKIAlpZiAocXAtPnN0YXRlID09IElCX1FQU19SRVNFVCkgewogCQlxcF9hdHRyLT5xcF9zdGF0ZSA9IElCX1FQU19SRVNFVDsKQEAgLTE3MzMsMTIgKzE3OTUsMTUgQEAKIAl9CiAKIAllcnIgPSBtbHg0X3FwX3F1ZXJ5KGRldi0+ZGV2LCAmcXAtPm1xcCwgJmNvbnRleHQpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChlcnIpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQogCiAJbWx4NF9zdGF0ZSA9IGJlMzJfdG9fY3B1KGNvbnRleHQuZmxhZ3MpID4+IDI4OwogCi0JcXBfYXR0ci0+cXBfc3RhdGUJICAgICA9IHRvX2liX3FwX3N0YXRlKG1seDRfc3RhdGUpOworCXFwLT5zdGF0ZQkJICAgICA9IHRvX2liX3FwX3N0YXRlKG1seDRfc3RhdGUpOworCXFwX2F0dHItPnFwX3N0YXRlCSAgICAgPSBxcC0+c3RhdGU7CiAJcXBfYXR0ci0+cGF0aF9tdHUJICAgICA9IGNvbnRleHQubXR1X21zZ21heCA+PiA1OwogCXFwX2F0dHItPnBhdGhfbWlnX3N0YXRlCSAgICAgPQogCQl0b19pYl9taWdfc3RhdGUoKGJlMzJfdG9fY3B1KGNvbnRleHQuZmxhZ3MpID4+IDExKSAmIDB4Myk7CkBAIC0xNzk3LDYgKzE4NjIsOCBAQAogCiAJcXBfaW5pdF9hdHRyLT5jYXAJICAgICA9IHFwX2F0dHItPmNhcDsKIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmcXAtPm11dGV4KTsKKwlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKaW5kZXggMDlhMzBkZC4uNTRkMjMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgY3B1X3RvX2JlMzIoKDEgPDwgSENSX0dPX0JJVCkgICAgICAgICAgICAgICAgfAogCQkJCQkgICAgICAgKDEgPDwgSENBX0VfQklUKSAgICAgICAgICAgICAgICAgfAogCQkJCQkgICAgICAgKG9wX21vZGlmaWVyIDw8IEhDUl9PUE1PRF9TSElGVCkgfAotCQkJCQkgICAgICAgIG9wKSwgICAgICAgICAgICAgICAgICAgICAgcHRyICsgb2Zmc1s2XSk7CisJCQkJCQlvcCksCQkJICBwdHIgKyBvZmZzWzZdKTsKIAl3bWIoKTsKIAlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKyBvZmZzWzddKTsKIAl3bWIoKTsKQEAgLTEzMzksNiArMTMzOSwxMCBAQAogCS8qIENoZWNrIHBvcnQgZm9yIFVEIGFkZHJlc3MgdmVjdG9yOiAqLwogCSooaW5ib3ggKyBJTklUX0hDQV9GTEFHUzJfT0ZGU0VUIC8gNCkgfD0gY3B1X3RvX2JlMzIoMSk7CiAKKwkvKiBFbmFibGUgSVBvSUIgY2hlY2tzdW1taW5nIGlmIHdlIGNhbjogKi8KKwlpZiAoZGV2LT5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX1VEX0lQX0NTVU0pCisJCSooaW5ib3ggKyBJTklUX0hDQV9GTEFHUzJfT0ZGU0VUIC8gNCkgfD0gY3B1X3RvX2JlMzIoNyA8PCAzKTsKKwogCS8qIFdlIGxlYXZlIHdxZV9xdW90YSwgcmVzcG9uZGVyX2V4dSwgZXRjIGFzIDAgKGRlZmF1bHQpICovCiAKIAkvKiBRUEMvRUVDL0NRQy9FUUMvUkRCIGF0dHJpYnV0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuaAppbmRleCAyZjk3NmYyLi44OTI4Y2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5oCkBAIC0xMDMsNiArMTAzLDcgQEAKIAlERVZfTElNX0ZMQUdfUkFXX0lQVjYgICAgICAgICAgID0gMSA8PCA0LAogCURFVl9MSU1fRkxBR19SQVdfRVRIRVIgICAgICAgICAgPSAxIDw8IDUsCiAJREVWX0xJTV9GTEFHX1NSUSAgICAgICAgICAgICAgICA9IDEgPDwgNiwKKwlERVZfTElNX0ZMQUdfSVBPSUJfQ1NVTQkJPSAxIDw8IDcsCiAJREVWX0xJTV9GTEFHX0JBRF9QS0VZX0NOVFIgICAgICA9IDEgPDwgOCwKIAlERVZfTElNX0ZMQUdfQkFEX1FLRVlfQ05UUiAgICAgID0gMSA8PCA5LAogCURFVl9MSU1fRkxBR19NVyAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwppbmRleCAxZTFlMzM2Li4yMDQwMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwpAQCAtMTE5LDcgKzExOSw4IEBACiAJX19iZTMyIG15X3FwbjsKIAlfX2JlMzIgbXlfZWU7CiAJX19iZTMyIHJxcG47Ci0JX19iZTE2IHNsX2dfbWxwYXRoOworCXU4ICAgICBzbF9pcG9rOworCXU4ICAgICBnX21scGF0aDsKIAlfX2JlMTYgcmxpZDsKIAlfX2JlMzIgaW1tX2V0eXBlX3BrZXlfZWVjOwogCV9fYmUzMiBieXRlX2NudDsKQEAgLTQ5Myw2ICs0OTQsNyBAQAogCWludCBpc19zZW5kOwogCWludCBmcmVlX2NxZSA9IDE7CiAJaW50IGVyciA9IDA7CisJdTE2IGNoZWNrc3VtOwogCiAJY3FlID0gbmV4dF9jcWVfc3coY3EpOwogCWlmICghY3FlKQpAQCAtNjM1LDEyICs2MzcsMTQgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWVudHJ5LT5zbGlkIAkgICA9IGJlMTZfdG9fY3B1KGNxZS0+cmxpZCk7Ci0JCWVudHJ5LT5zbCAgIAkgICA9IGJlMTZfdG9fY3B1KGNxZS0+c2xfZ19tbHBhdGgpID4+IDEyOworCQllbnRyeS0+c2wgICAJICAgPSBjcWUtPnNsX2lwb2sgPj4gNDsKIAkJZW50cnktPnNyY19xcCAJICAgPSBiZTMyX3RvX2NwdShjcWUtPnJxcG4pICYgMHhmZmZmZmY7Ci0JCWVudHJ5LT5kbGlkX3BhdGhfYml0cyA9IGJlMTZfdG9fY3B1KGNxZS0+c2xfZ19tbHBhdGgpICYgMHg3ZjsKKwkJZW50cnktPmRsaWRfcGF0aF9iaXRzID0gY3FlLT5nX21scGF0aCAmIDB4N2Y7CiAJCWVudHJ5LT5wa2V5X2luZGV4ICA9IGJlMzJfdG9fY3B1KGNxZS0+aW1tX2V0eXBlX3BrZXlfZWVjKSA+PiAxNjsKLQkJZW50cnktPndjX2ZsYWdzICAgfD0gYmUxNl90b19jcHUoY3FlLT5zbF9nX21scGF0aCkgJiAweDgwID8KLQkJCQkJSUJfV0NfR1JIIDogMDsKKwkJZW50cnktPndjX2ZsYWdzICAgfD0gY3FlLT5nX21scGF0aCAmIDB4ODAgPyBJQl9XQ19HUkggOiAwOworCQljaGVja3N1bSA9IChiZTMyX3RvX2NwdShjcWUtPnJxcG4pID4+IDI0KSB8CisJCQkJKChiZTMyX3RvX2NwdShjcWUtPm15X2VlKSA+PiAxNikgJiAweGZmMDApOworCQllbnRyeS0+Y3N1bV9vayA9IChjcWUtPnNsX2lwb2sgJiAxICYmIGNoZWNrc3VtID09IDB4ZmZmZik7CiAJfQogCiAJZW50cnktPnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKaW5kZXggN2JiZGQxZi4uN2JjMzJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaApAQCAtNDYsMTYgKzQ2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLQotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgIm10aGNhX3Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAibXRoY2FfZG9vcmJlbGwuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkiaWJfbXRoY2EiCiAjZGVmaW5lIFBGWAkJRFJWX05BTUUgIjogIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wOCIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIkZlYnJ1YXJ5IDE0LCAyMDA2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgorI2RlZmluZSBEUlZfUkVMREFURQkiQXByaWwgNCwgMjAwOCIKIAogZW51bSB7CiAJTVRIQ0FfRkxBR19ERFJfSElEREVOID0gMSA8PCAxLApAQCAtMzkwLDExICszODksMTEgQEAKIAlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJdm9pZCAqX19wID0gKGNoYXIgKikgKHNvdXJjZSkgKyAob2Zmc2V0KTsgICAgICAgICAgICAgXAogCQlzd2l0Y2ggKHNpemVvZiAoZGVzdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQljYXNlIDE6IChkZXN0KSA9ICoodTggKikgX19wOyAgICAgICBicmVhazsgICAgXAotCQkJY2FzZSAyOiAoZGVzdCkgPSBiZTE2X3RvX2NwdXAoX19wKTsgYnJlYWs7ICAgIFwKLQkJCWNhc2UgNDogKGRlc3QpID0gYmUzMl90b19jcHVwKF9fcCk7IGJyZWFrOyAgICBcCi0JCQljYXNlIDg6IChkZXN0KSA9IGJlNjRfdG9fY3B1cChfX3ApOyBicmVhazsgICAgXAotCQkJZGVmYXVsdDogX19idWdneV91c2Vfb2ZfTVRIQ0FfR0VUKCk7ICAgICAgICAgIFwKKwkJY2FzZSAxOiAoZGVzdCkgPSAqKHU4ICopIF9fcDsgICAgICAgYnJlYWs7CSAgICAgIFwKKwkJY2FzZSAyOiAoZGVzdCkgPSBiZTE2X3RvX2NwdXAoX19wKTsgYnJlYWs7CSAgICAgIFwKKwkJY2FzZSA0OiAoZGVzdCkgPSBiZTMyX3RvX2NwdXAoX19wKTsgYnJlYWs7CSAgICAgIFwKKwkJY2FzZSA4OiAoZGVzdCkgPSBiZTY0X3RvX2NwdXAoX19wKTsgYnJlYWs7CSAgICAgIFwKKwkJZGVmYXVsdDogX19idWdneV91c2Vfb2ZfTVRIQ0FfR0VUKCk7CQkgICAgICBcCiAJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAl9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9lcS5jCmluZGV4IGI2MGViNWQuLjhiZGU3ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9lcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9lcS5jCkBAIC0yMzIsOSArMjMyLDkgQEAKIAlyZXR1cm4gZXEtPnBhZ2VfbGlzdFtvZmYgLyBQQUdFX1NJWkVdLmJ1ZiArIG9mZiAlIFBBR0VfU0laRTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRoY2FfZXFlKiBuZXh0X2VxZV9zdyhzdHJ1Y3QgbXRoY2FfZXEgKmVxKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRoY2FfZXFlICpuZXh0X2VxZV9zdyhzdHJ1Y3QgbXRoY2FfZXEgKmVxKQogewotCXN0cnVjdCBtdGhjYV9lcWUqIGVxZTsKKwlzdHJ1Y3QgbXRoY2FfZXFlICplcWU7CiAJZXFlID0gZ2V0X2VxZShlcSwgZXEtPmNvbnNfaW5kZXgpOwogCXJldHVybiAoTVRIQ0FfRVFfRU5UUllfT1dORVJfSFcgJiBlcWUtPm93bmVyKSA/IE5VTEwgOiBlcWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKaW5kZXggYWNmYTQxZC4uOGI3ZTgzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJCQlldmVudC5kZXZpY2UgICAgICAgICAgID0gaWJkZXY7CiAJCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydF9udW07CiAKLQkJCWlmKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApCiAJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUjsKIAkJCWVsc2UKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwppbmRleCBjZDNkOGFkLi45ZWJhZGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKQEAgLTI2NywxMSArMjY3LDE2IEBACiAJaWYgKGRldl9saW0tPmZsYWdzICYgREVWX0xJTV9GTEFHX1NSUSkKIAkJbWRldi0+bXRoY2FfZmxhZ3MgfD0gTVRIQ0FfRkxBR19TUlE7CiAKKwlpZiAobXRoY2FfaXNfbWVtZnJlZShtZGV2KSkKKwkJaWYgKGRldl9saW0tPmZsYWdzICYgREVWX0xJTV9GTEFHX0lQT0lCX0NTVU0pCisJCQltZGV2LT5kZXZpY2VfY2FwX2ZsYWdzIHw9IElCX0RFVklDRV9VRF9JUF9DU1VNOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXRoY2FfaW5pdF90YXZvcihzdHJ1Y3QgbXRoY2FfZGV2ICptZGV2KQogeworCXM2NCBzaXplOwogCXU4IHN0YXR1czsKIAlpbnQgZXJyOwogCXN0cnVjdCBtdGhjYV9kZXZfbGltICAgICAgICBkZXZfbGltOwpAQCAtMzI0LDkgKzMyOSwxMSBAQAogCWlmIChtZGV2LT5tdGhjYV9mbGFncyAmIE1USENBX0ZMQUdfU1JRKQogCQlwcm9maWxlLm51bV9zcnEgPSBkZXZfbGltLm1heF9zcnFzOwogCi0JZXJyID0gbXRoY2FfbWFrZV9wcm9maWxlKG1kZXYsICZwcm9maWxlLCAmZGV2X2xpbSwgJmluaXRfaGNhKTsKLQlpZiAoZXJyIDwgMCkKKwlzaXplID0gbXRoY2FfbWFrZV9wcm9maWxlKG1kZXYsICZwcm9maWxlLCAmZGV2X2xpbSwgJmluaXRfaGNhKTsKKwlpZiAoc2l6ZSA8IDApIHsKKwkJZXJyID0gc2l6ZTsKIAkJZ290byBlcnJfZGlzYWJsZTsKKwl9CiAKIAllcnIgPSBtdGhjYV9JTklUX0hDQShtZGV2LCAmaW5pdF9oY2EsICZzdGF0dXMpOwogCWlmIChlcnIpIHsKQEAgLTYwNSw3ICs2MTIsNyBAQAogCXN0cnVjdCBtdGhjYV9kZXZfbGltICAgICAgICBkZXZfbGltOwogCXN0cnVjdCBtdGhjYV9wcm9maWxlICAgICAgICBwcm9maWxlOwogCXN0cnVjdCBtdGhjYV9pbml0X2hjYV9wYXJhbSBpbml0X2hjYTsKLQl1NjQgaWNtX3NpemU7CisJczY0IGljbV9zaXplOwogCXU4IHN0YXR1czsKIAlpbnQgZXJyOwogCkBAIC02NTMsNyArNjYwLDcgQEAKIAkJcHJvZmlsZS5udW1fc3JxID0gZGV2X2xpbS5tYXhfc3JxczsKIAogCWljbV9zaXplID0gbXRoY2FfbWFrZV9wcm9maWxlKG1kZXYsICZwcm9maWxlLCAmZGV2X2xpbSwgJmluaXRfaGNhKTsKLQlpZiAoKGludCkgaWNtX3NpemUgPCAwKSB7CisJaWYgKGljbV9zaXplIDwgMCkgewogCQllcnIgPSBpY21fc2l6ZTsKIAkJZ290byBlcnJfc3RvcF9mdzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwppbmRleCAyNTJkYjA4Li5iMjI0MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKQEAgLTM1OSwxMiArMzU5LDE0IEBACiAJCQkJCSAgICAgIGludCB1c2VfbG93bWVtLCBpbnQgdXNlX2NvaGVyZW50KQogewogCXN0cnVjdCBtdGhjYV9pY21fdGFibGUgKnRhYmxlOworCWludCBvYmpfcGVyX2NodW5rOwogCWludCBudW1faWNtOwogCXVuc2lnbmVkIGNodW5rX3NpemU7CiAJaW50IGk7CiAJdTggc3RhdHVzOwogCi0JbnVtX2ljbSA9IChvYmpfc2l6ZSAqIG5vYmogKyBNVEhDQV9UQUJMRV9DSFVOS19TSVpFIC0gMSkgLyBNVEhDQV9UQUJMRV9DSFVOS19TSVpFOworCW9ial9wZXJfY2h1bmsgPSBNVEhDQV9UQUJMRV9DSFVOS19TSVpFIC8gb2JqX3NpemU7CisJbnVtX2ljbSA9IERJVl9ST1VORF9VUChub2JqLCBvYmpfcGVyX2NodW5rKTsKIAogCXRhYmxlID0ga21hbGxvYyhzaXplb2YgKnRhYmxlICsgbnVtX2ljbSAqIHNpemVvZiAqdGFibGUtPmljbSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0YWJsZSkKQEAgLTQxMiw3ICs0MTQsNyBAQAogCQlpZiAodGFibGUtPmljbVtpXSkgewogCQkJbXRoY2FfVU5NQVBfSUNNKGRldiwgdmlydCArIGkgKiBNVEhDQV9UQUJMRV9DSFVOS19TSVpFLAogCQkJCQlNVEhDQV9UQUJMRV9DSFVOS19TSVpFIC8gTVRIQ0FfSUNNX1BBR0VfU0laRSwKLQkJCQkgICAgICAgICZzdGF0dXMpOworCQkJCQkmc3RhdHVzKTsKIAkJCW10aGNhX2ZyZWVfaWNtKGRldiwgdGFibGUtPmljbVtpXSwgdGFibGUtPmNvaGVyZW50KTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tci5jCmluZGV4IDNiNjk4NTUuLjM1MzhkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tci5jCkBAIC02ODYsNyArNjg2LDcgQEAKIAltdGhjYV90YWJsZV9wdXQoZGV2LCBkZXYtPm1yX3RhYmxlLm1wdF90YWJsZSwga2V5KTsKIAogZXJyX291dF9tcHRfZnJlZToKLQltdGhjYV9mcmVlKCZkZXYtPm1yX3RhYmxlLm1wdF9hbGxvYywgbXItPmlibXIubGtleSk7CisJbXRoY2FfZnJlZSgmZGV2LT5tcl90YWJsZS5tcHRfYWxsb2MsIGtleSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb2ZpbGUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm9maWxlLmMKaW5kZXggMjZiZjg2ZC4uNjA1YThkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb2ZpbGUuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvZmlsZS5jCkBAIC02Myw3ICs2Myw3IEBACiAJTVRIQ0FfTlVNX1BEUyA9IDEgPDwgMTUKIH07CiAKLXU2NCBtdGhjYV9tYWtlX3Byb2ZpbGUoc3RydWN0IG10aGNhX2RldiAqZGV2LAorczY0IG10aGNhX21ha2VfcHJvZmlsZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgbXRoY2FfcHJvZmlsZSAqcmVxdWVzdCwKIAkJICAgICAgIHN0cnVjdCBtdGhjYV9kZXZfbGltICpkZXZfbGltLAogCQkgICAgICAgc3RydWN0IG10aGNhX2luaXRfaGNhX3BhcmFtICppbml0X2hjYSkKQEAgLTc3LDcgKzc3LDcgQEAKIAl9OwogCiAJdTY0IG1lbV9iYXNlLCBtZW1fYXZhaWw7Ci0JdTY0IHRvdGFsX3NpemUgPSAwOworCXM2NCB0b3RhbF9zaXplID0gMDsKIAlzdHJ1Y3QgbXRoY2FfcmVzb3VyY2UgKnByb2ZpbGU7CiAJc3RydWN0IG10aGNhX3Jlc291cmNlIHRtcDsKIAlpbnQgaSwgajsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm9maWxlLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvZmlsZS5oCmluZGV4IDk0NjQxODAuLmU3NmNiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm9maWxlLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb2ZpbGUuaApAQCAtNTMsNyArNTMsNyBAQAogCWludCBmbXJfcmVzZXJ2ZWRfbXR0czsKIH07CiAKLXU2NCBtdGhjYV9tYWtlX3Byb2ZpbGUoc3RydWN0IG10aGNhX2RldiAqbWRldiwKK3M2NCBtdGhjYV9tYWtlX3Byb2ZpbGUoc3RydWN0IG10aGNhX2RldiAqbWRldiwKIAkJICAgICAgIHN0cnVjdCBtdGhjYV9wcm9maWxlICpyZXF1ZXN0LAogCQkgICAgICAgc3RydWN0IG10aGNhX2Rldl9saW0gKmRldl9saW0sCiAJCSAgICAgICBzdHJ1Y3QgbXRoY2FfaW5pdF9oY2FfcGFyYW0gKmluaXRfaGNhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKaW5kZXggOWU0OTFkZi4uNjk2ZTFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlzdHJ1Y3QgaWJfc21wICppbl9tYWQgID0gTlVMTDsKIAlzdHJ1Y3QgaWJfc21wICpvdXRfbWFkID0gTlVMTDsKIAlpbnQgZXJyID0gLUVOT01FTTsKLQlzdHJ1Y3QgbXRoY2FfZGV2KiBtZGV2ID0gdG9fbWRldihpYmRldik7CisJc3RydWN0IG10aGNhX2RldiAqbWRldiA9IHRvX21kZXYoaWJkZXYpOwogCiAJdTggc3RhdHVzOwogCkBAIC01NDAsNiArNTQwLDkgQEAKIAlzdHJ1Y3QgbXRoY2FfcXAgKnFwOwogCWludCBlcnI7CiAKKwlpZiAoaW5pdF9hdHRyLT5jcmVhdGVfZmxhZ3MpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCiAJc3dpdGNoIChpbml0X2F0dHItPnFwX3R5cGUpIHsKIAljYXNlIElCX1FQVF9SQzoKIAljYXNlIElCX1FQVF9VQzoKQEAgLTExNjcsMjMgKzExNzAsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19yZXYoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19yZXYoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IG10aGNhX2RldiwgaWJfZGV2LmNsYXNzX2Rldik7CisJc3RydWN0IG10aGNhX2RldiAqZGV2ID0KKwkJY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IG10aGNhX2RldiwgaWJfZGV2LmRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGRldi0+cmV2X2lkKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19md192ZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19md192ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IG10aGNhX2RldiwgaWJfZGV2LmNsYXNzX2Rldik7CisJc3RydWN0IG10aGNhX2RldiAqZGV2ID0KKwkJY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IG10aGNhX2RldiwgaWJfZGV2LmRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWQuJWRcbiIsIChpbnQpIChkZXYtPmZ3X3ZlciA+PiAzMiksCiAJCSAgICAgICAoaW50KSAoZGV2LT5md192ZXIgPj4gMTYpICYgMHhmZmZmLAogCQkgICAgICAgKGludCkgZGV2LT5md192ZXIgJiAweGZmZmYpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2hjYShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2hjYShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgbXRoY2FfZGV2LCBpYl9kZXYuY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPQorCQljb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgbXRoY2FfZGV2LCBpYl9kZXYuZGV2KTsKIAlzd2l0Y2ggKGRldi0+cGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1RBVk9SOgogCQlyZXR1cm4gc3ByaW50ZihidWYsICJNVDIzMTA4XG4iKTsKQEAgLTExOTksMjIgKzEyMDgsMjQgQEAKIAl9CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfYm9hcmQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19ib2FyZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG10aGNhX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBtdGhjYV9kZXYsIGliX2Rldi5jbGFzc19kZXYpOworCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9CisJCWNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBtdGhjYV9kZXYsIGliX2Rldi5kZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUuKnNcbiIsIE1USENBX0JPQVJEX0lEX0xFTiwgZGV2LT5ib2FyZF9pZCk7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihod19yZXYsICAgU19JUlVHTywgc2hvd19yZXYsICAgIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZ3X3ZlciwgICBTX0lSVUdPLCBzaG93X2Z3X3ZlciwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaGNhX3R5cGUsIFNfSVJVR08sIHNob3dfaGNhLCAgICBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihib2FyZF9pZCwgU19JUlVHTywgc2hvd19ib2FyZCwgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGh3X3JldiwgICBTX0lSVUdPLCBzaG93X3JldiwgICAgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZndfdmVyLCAgIFNfSVJVR08sIHNob3dfZndfdmVyLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihoY2FfdHlwZSwgU19JUlVHTywgc2hvd19oY2EsICAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX2lkLCBTX0lSVUdPLCBzaG93X2JvYXJkLCAgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqbXRoY2FfY2xhc3NfYXR0cmlidXRlc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9od19yZXYsCi0JJmNsYXNzX2RldmljZV9hdHRyX2Z3X3ZlciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaGNhX3R5cGUsCi0JJmNsYXNzX2RldmljZV9hdHRyX2JvYXJkX2lkCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm10aGNhX2Rldl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2h3X3JldiwKKwkmZGV2X2F0dHJfZndfdmVyLAorCSZkZXZfYXR0cl9oY2FfdHlwZSwKKwkmZGV2X2F0dHJfYm9hcmRfaWQKIH07CiAKIHN0YXRpYyBpbnQgbXRoY2FfaW5pdF9ub2RlX2RhdGEoc3RydWN0IG10aGNhX2RldiAqZGV2KQpAQCAtMTM3Niw5ICsxMzg3LDkgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRoY2FfY2xhc3NfYXR0cmlidXRlcyk7ICsraSkgewotCQlyZXQgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+aWJfZGV2LmNsYXNzX2RldiwKLQkJCQkJICAgICAgIG10aGNhX2NsYXNzX2F0dHJpYnV0ZXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10aGNhX2Rldl9hdHRyaWJ1dGVzKTsgKytpKSB7CisJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5pYl9kZXYuZGV2LAorCQkJCQkgbXRoY2FfZGV2X2F0dHJpYnV0ZXNbaV0pOwogCQlpZiAocmV0KSB7CiAJCQlpYl91bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5pYl9kZXYpOwogCQkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggZGI1NTk1Yi4uMDlkYzM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTQzNywyOSArNDM3LDM0IEBACiAJaW50IG10aGNhX3N0YXRlOwogCXU4IHN0YXR1czsKIAorCW11dGV4X2xvY2soJnFwLT5tdXRleCk7CisKIAlpZiAocXAtPnN0YXRlID09IElCX1FQU19SRVNFVCkgewogCQlxcF9hdHRyLT5xcF9zdGF0ZSA9IElCX1FQU19SRVNFVDsKIAkJZ290byBkb25lOwogCX0KIAogCW1haWxib3ggPSBtdGhjYV9hbGxvY19tYWlsYm94KGRldiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKElTX0VSUihtYWlsYm94KSkKLQkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisJaWYgKElTX0VSUihtYWlsYm94KSkgeworCQllcnIgPSBQVFJfRVJSKG1haWxib3gpOworCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBtdGhjYV9RVUVSWV9RUChkZXYsIHFwLT5xcG4sIDAsIG1haWxib3gsICZzdGF0dXMpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9tYWlsYm94OwogCWlmIChzdGF0dXMpIHsKIAkJbXRoY2Ffd2FybihkZXYsICJRVUVSWV9RUCByZXR1cm5lZCBzdGF0dXMgJTAyeFxuIiwgc3RhdHVzKTsKIAkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X21haWxib3g7CiAJfQogCiAJcXBfcGFyYW0gICAgPSBtYWlsYm94LT5idWY7CiAJY29udGV4dCAgICAgPSAmcXBfcGFyYW0tPmNvbnRleHQ7CiAJbXRoY2Ffc3RhdGUgPSBiZTMyX3RvX2NwdShjb250ZXh0LT5mbGFncykgPj4gMjg7CiAKLQlxcF9hdHRyLT5xcF9zdGF0ZSAJICAgICA9IHRvX2liX3FwX3N0YXRlKG10aGNhX3N0YXRlKTsKKwlxcC0+c3RhdGUJCSAgICAgPSB0b19pYl9xcF9zdGF0ZShtdGhjYV9zdGF0ZSk7CisJcXBfYXR0ci0+cXBfc3RhdGUJICAgICA9IHFwLT5zdGF0ZTsKIAlxcF9hdHRyLT5wYXRoX210dSAJICAgICA9IGNvbnRleHQtPm10dV9tc2dtYXggPj4gNTsKIAlxcF9hdHRyLT5wYXRoX21pZ19zdGF0ZSAgICAgID0KIAkJdG9faWJfbWlnX3N0YXRlKChiZTMyX3RvX2NwdShjb250ZXh0LT5mbGFncykgPj4gMTEpICYgMHgzKTsKQEAgLTUwNiw4ICs1MTEsMTEgQEAKIAogCXFwX2luaXRfYXR0ci0+Y2FwCSAgICAgPSBxcF9hdHRyLT5jYXA7CiAKLW91dDoKK291dF9tYWlsYm94OgogCW10aGNhX2ZyZWVfbWFpbGJveChkZXYsIG1haWxib3gpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZxcC0+bXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1MzIsNyArMTU0MCw3IEBACiAJY2FzZSBJQl9XUl9TRU5EX1dJVEhfSU1NOgogCQlzcXAtPnVkX2hlYWRlci5idGgub3Bjb2RlID0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWV9XSVRIX0lNTUVESUFURTsKIAkJc3FwLT51ZF9oZWFkZXIuaW1tZWRpYXRlX3ByZXNlbnQgPSAxOwotCQlzcXAtPnVkX2hlYWRlci5pbW1lZGlhdGVfZGF0YSA9IHdyLT5pbW1fZGF0YTsKKwkJc3FwLT51ZF9oZWFkZXIuaW1tZWRpYXRlX2RhdGEgPSB3ci0+ZXguaW1tX2RhdGE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY3OSw3ICsxNjg3LDcgQEAKIAkJCWNwdV90b19iZTMyKDEpOwogCQlpZiAod3ItPm9wY29kZSA9PSBJQl9XUl9TRU5EX1dJVEhfSU1NIHx8CiAJCSAgICB3ci0+b3Bjb2RlID09IElCX1dSX1JETUFfV1JJVEVfV0lUSF9JTU0pCi0JCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSB3cWUpLT5pbW0gPSB3ci0+aW1tX2RhdGE7CisJCQkoKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyAqKSB3cWUpLT5pbW0gPSB3ci0+ZXguaW1tX2RhdGE7CiAKIAkJd3FlICs9IHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKTsKIAkJc2l6ZSA9IHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSAvIDE2OwpAQCAtMjAxNSwxMCArMjAyMywxMiBAQAogCQkJIGNwdV90b19iZTMyKE1USENBX05FWFRfQ1FfVVBEQVRFKSA6IDApIHwKIAkJCSgod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkgPwogCQkJIGNwdV90b19iZTMyKE1USENBX05FWFRfU09MSUNJVCkgOiAwKSAgIHwKKwkJCSgod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX0lQX0NTVU0pID8KKwkJCSBjcHVfdG9fYmUzMihNVEhDQV9ORVhUX0lQX0NTVU0gfCBNVEhDQV9ORVhUX1RDUF9VRFBfQ1NVTSkgOiAwKSB8CiAJCQljcHVfdG9fYmUzMigxKTsKIAkJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfU0VORF9XSVRIX0lNTSB8fAogCQkgICAgd3ItPm9wY29kZSA9PSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NKQotCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgd3FlKS0+aW1tID0gd3ItPmltbV9kYXRhOworCQkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgd3FlKS0+aW1tID0gd3ItPmV4LmltbV9kYXRhOwogCiAJCXdxZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyk7CiAJCXNpemUgPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZykgLyAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV93cWUuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV93cWUuaAppbmRleCBmNmE2NmZlLi5iMzU1MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffd3FlLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3dxZS5oCkBAIC0zOCwxNCArMzgsMTYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBlbnVtIHsKLQlNVEhDQV9ORVhUX0RCRCAgICAgICA9IDEgPDwgNywKLQlNVEhDQV9ORVhUX0ZFTkNFICAgICA9IDEgPDwgNiwKLQlNVEhDQV9ORVhUX0NRX1VQREFURSA9IDEgPDwgMywKLQlNVEhDQV9ORVhUX0VWRU5UX0dFTiA9IDEgPDwgMiwKLQlNVEhDQV9ORVhUX1NPTElDSVQgICA9IDEgPDwgMSwKKwlNVEhDQV9ORVhUX0RCRAkJPSAxIDw8IDcsCisJTVRIQ0FfTkVYVF9GRU5DRQk9IDEgPDwgNiwKKwlNVEhDQV9ORVhUX0NRX1VQREFURQk9IDEgPDwgMywKKwlNVEhDQV9ORVhUX0VWRU5UX0dFTgk9IDEgPDwgMiwKKwlNVEhDQV9ORVhUX1NPTElDSVQJPSAxIDw8IDEsCisJTVRIQ0FfTkVYVF9JUF9DU1VNCT0gMSA8PCA0LAorCU1USENBX05FWFRfVENQX1VEUF9DU1VNID0gMSA8PCA1LAogCi0JTVRIQ0FfTUxYX1ZMMTUgICAgICAgPSAxIDw8IDE3LAotCU1USENBX01MWF9TTFIgICAgICAgID0gMSA8PCAxNgorCU1USENBX01MWF9WTDE1CQk9IDEgPDwgMTcsCisJTVRIQ0FfTUxYX1NMUgkJPSAxIDw8IDE2CiB9OwogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCmluZGV4IDdmODg1M2IuLmIwNDYyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwpAQCAtNjUsNyArNjUsNiBAQAogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCiBpbnQgbWF4X210dSA9IDkwMDA7Ci1pbnQgbmljc19wZXJfZnVuY3Rpb24gPSAxOwogaW50IGludGVycnVwdF9tb2RfaW50ZXJ2YWwgPSAwOwogCiAKQEAgLTkzLDIyICs5MiwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIkVuYWJsZSBkZWJ1ZyBvdXRwdXQgbGV2ZWwiKTsKIAogTElTVF9IRUFEKG5lc19hZGFwdGVyX2xpc3QpOwotTElTVF9IRUFEKG5lc19kZXZfbGlzdCk7CitzdGF0aWMgTElTVF9IRUFEKG5lc19kZXZfbGlzdCk7CiAKIGF0b21pY190IHFwc19kZXN0cm95ZWQ7Ci1hdG9taWNfdCBjcXBfcmVxc19hbGxvY2F0ZWQ7Ci1hdG9taWNfdCBjcXBfcmVxc19mcmVlZDsKLWF0b21pY190IGNxcF9yZXFzX2R5bmFsbG9jYXRlZDsKLWF0b21pY190IGNxcF9yZXFzX2R5bmZyZWVkOwotYXRvbWljX3QgY3FwX3JlcXNfcXVldWVkOwotYXRvbWljX3QgY3FwX3JlcXNfcmVkcml2ZW47CiAKLXN0YXRpYyB2b2lkIG5lc19wcmludF9tYWNhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwotc3RhdGljIGlycXJldHVybl90IG5lc19pbnRlcnJ1cHQoaW50LCB2b2lkICopOwotc3RhdGljIGludCBfX2RldmluaXQgbmVzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOwotc3RhdGljIHZvaWQgX19kZXZleGl0IG5lc19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKik7Ci1zdGF0aWMgaW50IF9faW5pdCBuZXNfaW5pdF9tb2R1bGUodm9pZCk7Ci1zdGF0aWMgdm9pZCBfX2V4aXQgbmVzX2V4aXRfbW9kdWxlKHZvaWQpOwogc3RhdGljIHVuc2lnbmVkIGludCBlZV9mbHNoX2FkYXB0ZXI7CiBzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX25vbmlkeF9hZGRyOwogc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19pZHhfYWRkcjsKQEAgLTMxMCw3ICsyOTcsNyBAQAogCiAJaWYgKGF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpID09IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBSZWZlcmVuY2UgY291bnQgYWxyZWFkeSAwIGZvciBRUCVkLCBsYXN0IGFlcSA9IDB4JTA0WC5cbiIsCi0JCQkJX19GVU5DVElPTl9fLCBpYnFwLT5xcF9udW0sIG5lc3FwLT5sYXN0X2FlcSk7CisJCQkJX19mdW5jX18sIGlicXAtPnFwX251bSwgbmVzcXAtPmxhc3RfYWVxKTsKIAkJQlVHKCk7CiAJfQogCkBAIC01NjcsMTIgKzU1NCwxMiBAQAogCiAJLyogSW5pdCB0aGUgYWRhcHRlciAqLwogCW5lc2Rldi0+bmVzYWRhcHRlciA9IG5lc19pbml0X2FkYXB0ZXIobmVzZGV2LCBod19yZXYpOwotCW5lc2Rldi0+bmVzYWRhcHRlci0+ZXRfcnhfY29hbGVzY2VfdXNlY3NfaXJxID0gaW50ZXJydXB0X21vZF9pbnRlcnZhbDsKIAlpZiAoIW5lc2Rldi0+bmVzYWRhcHRlcikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyLlxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gYmFpbDU7CiAJfQorCW5lc2Rldi0+bmVzYWRhcHRlci0+ZXRfcnhfY29hbGVzY2VfdXNlY3NfaXJxID0gaW50ZXJydXB0X21vZF9pbnRlcnZhbDsKIAogCS8qIG5lc2Rldi0+YmFzZV9kb29yYmVsbF9pbmRleCA9CiAJCQluZXNkZXYtPm5lc2FkYXB0ZXItPnBkX2NvbmZpZ19iYXNlW1BDSV9GVU5DKG5lc2Rldi0+cGNpZGV2LT5kZXZmbildOyAqLwpAQCAtNzUxLDEzICs3MzgsMTMgQEAKIAogCWxpc3RfZGVsKCZuZXNkZXYtPmxpc3QpOwogCW5lc19kZXN0cm95X2NxcChuZXNkZXYpOworCisJZnJlZV9pcnEocGNpZGV2LT5pcnEsIG5lc2Rldik7CiAJdGFza2xldF9raWxsKCZuZXNkZXYtPmRwY190YXNrbGV0KTsKIAogCS8qIERlYWxsb2NhdGUgdGhlIEFkYXB0ZXIgU3RydWN0dXJlICovCiAJbmVzX2Rlc3Ryb3lfYWRhcHRlcihuZXNkZXYtPm5lc2FkYXB0ZXIpOwogCi0JZnJlZV9pcnEocGNpZGV2LT5pcnEsIG5lc2Rldik7Ci0KIAlpZiAobmVzZGV2LT5tc2lfZW5hYmxlZCkgewogCQlwY2lfZGlzYWJsZV9tc2kocGNpZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAppbmRleCBmZDU3ZThhLi5jZGYyZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyYy5oPgpAQCAtMTQzLDEyICsxNDIsMTIgQEAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9ORVNfREVCVUcKICNkZWZpbmUgbmVzX2RlYnVnKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKIAlpZiAobGV2ZWwgJiBuZXNfZGVidWdfbGV2ZWwpIFwKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXNbJXVdOiAiIGZtdCwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNhcmdzKQorCQlwcmludGsoS0VSTl9FUlIgUEZYICIlc1sldV06ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjYXJncykKIAogI2RlZmluZSBhc3NlcnQoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiBpZiAoIShleHByKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsICVzLCAlcywgbGluZSAlZFxuIiwgIFwKLQkJICAgI2V4cHIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgXAorCQkgICAjZXhwciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBORVNfRVZFTlRfVElNRU9VVCAgIDEyMDAwMDAKQEAgLTE2Niw3ICsxNjUsNiBAQAogI2luY2x1ZGUgIm5lc19jbS5oIgogCiBleHRlcm4gaW50IG1heF9tdHU7Ci1leHRlcm4gaW50IG5pY3NfcGVyX2Z1bmN0aW9uOwogI2RlZmluZSBtYXhfZnJhbWVfbGVuIChtYXhfbXR1K0VUSF9ITEVOKQogZXh0ZXJuIGludCBpbnRlcnJ1cHRfbW9kX2ludGVydmFsOwogZXh0ZXJuIGludCBuZXNfaWZfY291bnQ7CkBAIC0xNzcsOSArMTc1LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmVzX2RlYnVnX2xldmVsOwogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBuZXNfYWRhcHRlcl9saXN0OwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbmVzX2Rldl9saXN0OwotCi1leHRlcm4gc3RydWN0IG5lc19jbV9jb3JlICpnX2NtX2NvcmU7CiAKIGV4dGVybiBhdG9taWNfdCBjbV9jb25uZWN0czsKIGV4dGVybiBhdG9taWNfdCBjbV9hY2NlcHRzOwpAQCAtMjA5LDcgKzIwNCw2IEBACiBleHRlcm4gYXRvbWljX3QgY21fYWNjZWxfZHJvcHBlZF9wa3RzOwogZXh0ZXJuIGF0b21pY190IGNtX3Jlc2V0c19yZWN2ZDsKIAotZXh0ZXJuIHUzMiBjcml0X2Vycl9jb3VudDsKIGV4dGVybiB1MzIgaW50X21vZF90aW1lcl9pbml0OwogZXh0ZXJuIHUzMiBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKIGV4dGVybiB1MzIgaW50X21vZF9jcV9kZXB0aF8xMjg7CkBAIC0yMTksMTQgKzIxMyw2IEBACiBleHRlcm4gdTMyIGludF9tb2RfY3FfZGVwdGhfNDsKIGV4dGVybiB1MzIgaW50X21vZF9jcV9kZXB0aF8xOwogCi1leHRlcm4gYXRvbWljX3QgY3FwX3JlcXNfYWxsb2NhdGVkOwotZXh0ZXJuIGF0b21pY190IGNxcF9yZXFzX2ZyZWVkOwotZXh0ZXJuIGF0b21pY190IGNxcF9yZXFzX2R5bmFsbG9jYXRlZDsKLWV4dGVybiBhdG9taWNfdCBjcXBfcmVxc19keW5mcmVlZDsKLWV4dGVybiBhdG9taWNfdCBjcXBfcmVxc19xdWV1ZWQ7Ci1leHRlcm4gYXRvbWljX3QgY3FwX3JlcXNfcmVkcml2ZW47Ci0KLQogc3RydWN0IG5lc19kZXZpY2UgewogCXN0cnVjdCBuZXNfYWRhcHRlcgkgICAqbmVzYWRhcHRlcjsKIAl2b2lkIF9faW9tZW0gICAgICAgICAgICpyZWdzOwpAQCAtMjg1LDYgKzI3MSwyMSBAQAogfTsKIAogCitzdGF0aWMgaW5saW5lIF9fbGUzMiBnZXRfY3JjX3ZhbHVlKHN0cnVjdCBuZXNfdjRfcXVhZCAqbmVzX3F1YWQpCit7CisJdTMyIGNyY192YWx1ZTsKKwljcmNfdmFsdWUgPSBjcmMzMmMofjAsICh2b2lkICopbmVzX3F1YWQsIHNpemVvZiAoc3RydWN0IG5lc192NF9xdWFkKSk7CisKKwkvKgorCSAqIFdpdGggY29tbWl0IGVmMTk0NTRiICgiW0xJQl0gY3JjMzJjOiBLZWVwIGludGVybWVkaWF0ZSBjcmMKKwkgKiBzdGF0ZSBpbiBjcHUgb3JkZXIiKSwgYmVoYXZpb3Igb2YgY3JjMzJjIGNoYW5nZXMgb24KKwkgKiBiaWctZW5kaWFuIHBsYXRmb3Jtcy4gIE91ciBhbGdvcml0aG0gZXhwZWN0cyB0aGUgcHJldmlvdXMKKwkgKiBiZWhhdmlvcjsgb3RoZXJ3aXNlIHdlIGhhdmUgUkRNQSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQKKwkgKiBpc3N1ZSBvbiBiaWctZW5kaWFuLgorCSAqLworCXJldHVybiBjcHVfdG9fbGUzMihjcmNfdmFsdWUpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIHNldF93cWVfNjRiaXRfdmFsdWUoX19sZTMyICp3cWVfd29yZHMsIHUzMiBpbmRleCwgdTY0IHZhbHVlKQogewpAQCAtMzk3LDcgKzM5OCw3IEBACiAJaWYgKHJlc291cmNlX251bSA+PSBtYXhfcmVzb3VyY2VzKSB7CiAJCXJlc291cmNlX251bSA9IGZpbmRfZmlyc3RfemVyb19iaXQocmVzb3VyY2VfYXJyYXksIG1heF9yZXNvdXJjZXMpOwogCQlpZiAocmVzb3VyY2VfbnVtID49IG1heF9yZXNvdXJjZXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBObyBhdmFpbGFibGUgcmVzb3VyY2Vzcy5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogTm8gYXZhaWxhYmxlIHJlc291cmNlc3MuXG4iLCBfX2Z1bmNfXyk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5yZXNvdXJjZV9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVNRklMRTsKIAkJfQpAQCAtNDk1LDkgKzQ5Niw2IEBACiAvKiBuZXNfaHcuYyAqLwogc3RydWN0IG5lc19hZGFwdGVyICpuZXNfaW5pdF9hZGFwdGVyKHN0cnVjdCBuZXNfZGV2aWNlICosIHU4KTsKIHZvaWQgIG5lc19uaWNfaW5pdF90aW1lcl9kZWZhdWx0cyhzdHJ1Y3QgbmVzX2RldmljZSAqLCB1OCk7Ci11bnNpZ25lZCBpbnQgbmVzX3Jlc2V0X2FkYXB0ZXJfbmUwMjAoc3RydWN0IG5lc19kZXZpY2UgKiwgdTggKik7Ci1pbnQgbmVzX2luaXRfc2VyZGVzKHN0cnVjdCBuZXNfZGV2aWNlICosIHU4LCB1OCwgdTgpOwotdm9pZCBuZXNfaW5pdF9jc3JfbmUwMjAoc3RydWN0IG5lc19kZXZpY2UgKiwgdTgsIHU4KTsKIHZvaWQgbmVzX2Rlc3Ryb3lfYWRhcHRlcihzdHJ1Y3QgbmVzX2FkYXB0ZXIgKik7CiBpbnQgbmVzX2luaXRfY3FwKHN0cnVjdCBuZXNfZGV2aWNlICopOwogaW50IG5lc19pbml0X3BoeShzdHJ1Y3QgbmVzX2RldmljZSAqKTsKQEAgLTUwNSwyMCArNTAzLDEyIEBACiB2b2lkIG5lc19kZXN0cm95X25pY19xcChzdHJ1Y3QgbmVzX3ZuaWMgKik7CiBpbnQgbmVzX25hcGlfaXNyKHN0cnVjdCBuZXNfZGV2aWNlICopOwogdm9pZCBuZXNfZHBjKHVuc2lnbmVkIGxvbmcpOwotdm9pZCBuZXNfcHJvY2Vzc19jZXEoc3RydWN0IG5lc19kZXZpY2UgKiwgc3RydWN0IG5lc19od19jZXEgKik7Ci12b2lkIG5lc19wcm9jZXNzX2FlcShzdHJ1Y3QgbmVzX2RldmljZSAqLCBzdHJ1Y3QgbmVzX2h3X2FlcSAqKTsKLXZvaWQgbmVzX3Byb2Nlc3NfbWFjX2ludHIoc3RydWN0IG5lc19kZXZpY2UgKiwgdTMyKTsKLXZvaWQgbmVzX25pY19uYXBpX2NlX2hhbmRsZXIoc3RydWN0IG5lc19kZXZpY2UgKiwgc3RydWN0IG5lc19od19uaWNfY3EgKik7CiB2b2lkIG5lc19uaWNfY2VfaGFuZGxlcihzdHJ1Y3QgbmVzX2RldmljZSAqLCBzdHJ1Y3QgbmVzX2h3X25pY19jcSAqKTsKLXZvaWQgbmVzX2NxcF9jZV9oYW5kbGVyKHN0cnVjdCBuZXNfZGV2aWNlICosIHN0cnVjdCBuZXNfaHdfY3EgKik7Ci12b2lkIG5lc19wcm9jZXNzX2l3YXJwX2FlcWUoc3RydWN0IG5lc19kZXZpY2UgKiwgc3RydWN0IG5lc19od19hZXFlICopOwogdm9pZCBuZXNfaXdhcnBfY2VfaGFuZGxlcihzdHJ1Y3QgbmVzX2RldmljZSAqLCBzdHJ1Y3QgbmVzX2h3X2NxICopOwogaW50IG5lc19kZXN0cm95X2NxcChzdHJ1Y3QgbmVzX2RldmljZSAqKTsKIGludCBuZXNfbmljX2NtX3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKIC8qIG5lc19uaWMuYyAqLwotdm9pZCBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXZvaWQgbmVzX25ldGRldl9leGl0KHN0cnVjdCBuZXNfdm5pYyAqKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpuZXNfbmV0ZGV2X2luaXQoc3RydWN0IG5lc19kZXZpY2UgKiwgdm9pZCBfX2lvbWVtICopOwogdm9pZCBuZXNfbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKik7CiBpbnQgbmVzX25pY19jbV94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwpAQCAtNTI5LDcgKzUxOSw2IEBACiB2b2lkIG5lc191cGRhdGVfYXJwKHVuc2lnbmVkIGNoYXIgKiwgdTMyLCB1MzIsIHUxNiwgdTE2KTsKIHZvaWQgbmVzX21hbmFnZV9hcnBfY2FjaGUoc3RydWN0IG5ldF9kZXZpY2UgKiwgdW5zaWduZWQgY2hhciAqLCB1MzIsIHUzMik7CiB2b2lkIG5lc19zb2NrX3JlbGVhc2Uoc3RydWN0IG5lc19xcCAqLCB1bnNpZ25lZCBsb25nICopOwotc3RydWN0IG5lc19jbV9jb3JlICpuZXNfY21fYWxsb2NfY29yZSh2b2lkKTsKIHZvaWQgZmx1c2hfd3FlcyhzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCBzdHJ1Y3QgbmVzX3FwICosIHUzMiwgdTMyKTsKIGludCBuZXNfbWFuYWdlX2FwYnZ0KHN0cnVjdCBuZXNfdm5pYyAqLCB1MzIsIHUzMiwgdTMyKTsKIGludCBuZXNfY21fZGlzY29ubihzdHJ1Y3QgbmVzX3FwICopOwpAQCAtNTQxLDcgKzUzMCw2IEBACiBzdHJ1Y3QgbmVzX2liX2RldmljZSAqbmVzX2luaXRfb2ZhX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHZvaWQgbmVzX2Rlc3Ryb3lfb2ZhX2RldmljZShzdHJ1Y3QgbmVzX2liX2RldmljZSAqKTsKIGludCBuZXNfcmVnaXN0ZXJfb2ZhX2RldmljZShzdHJ1Y3QgbmVzX2liX2RldmljZSAqKTsKLXZvaWQgbmVzX3VucmVnaXN0ZXJfb2ZhX2RldmljZShzdHJ1Y3QgbmVzX2liX2RldmljZSAqKTsKIAogLyogbmVzX3V0aWwuYyAqLwogaW50IG5lc19yZWFkX2VlcHJvbV92YWx1ZXMoc3RydWN0IG5lc19kZXZpY2UgKiwgc3RydWN0IG5lc19hZGFwdGVyICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKaW5kZXggYmQ1Y2ZlYS4uZDA3Mzg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC03OSw3ICs4MCwzMCBAQAogc3RhdGljIGludCBhZGRfcmVmX2NtX25vZGUoc3RydWN0IG5lc19jbV9ub2RlICopOwogc3RhdGljIGludCByZW1fcmVmX2NtX25vZGUoc3RydWN0IG5lc19jbV9jb3JlICosIHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKIHN0YXRpYyBpbnQgbWluaV9jbV9kZWxfbGlzdGVuKHN0cnVjdCBuZXNfY21fY29yZSAqLCBzdHJ1Y3QgbmVzX2NtX2xpc3RlbmVyICopOworc3RhdGljIHN0cnVjdCBza19idWZmICpmb3JtX2NtX2ZyYW1lKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXNfY21fbm9kZSAqLAorCQkJCSAgICAgdm9pZCAqLCB1MzIsIHZvaWQgKiwgdTMyLCB1OCk7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmdldF9mcmVlX3BrdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpOwogCitzdGF0aWMgc3RydWN0IG5lc19jbV9ub2RlICptaW5pX2NtX2Nvbm5lY3Qoc3RydWN0IG5lc19jbV9jb3JlICosCisJCQkJCSAgIHN0cnVjdCBuZXNfdm5pYyAqLAorCQkJCQkgICBzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKiwKKwkJCQkJICAgc3RydWN0IG5lc19jbV9pbmZvICopOworc3RhdGljIGludCBtaW5pX2NtX2FjY2VwdChzdHJ1Y3QgbmVzX2NtX2NvcmUgKiwgc3RydWN0IGlldGZfbXBhX2ZyYW1lICosCisJCQkgIHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKK3N0YXRpYyBpbnQgbWluaV9jbV9yZWplY3Qoc3RydWN0IG5lc19jbV9jb3JlICosIHN0cnVjdCBpZXRmX21wYV9mcmFtZSAqLAorCQkJICBzdHJ1Y3QgbmVzX2NtX25vZGUgKik7CitzdGF0aWMgaW50IG1pbmlfY21fY2xvc2Uoc3RydWN0IG5lc19jbV9jb3JlICosIHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKK3N0YXRpYyBpbnQgbWluaV9jbV9yZWN2X3BrdChzdHJ1Y3QgbmVzX2NtX2NvcmUgKiwgc3RydWN0IG5lc192bmljICosCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKik7CitzdGF0aWMgaW50IG1pbmlfY21fZGVhbGxvY19jb3JlKHN0cnVjdCBuZXNfY21fY29yZSAqKTsKK3N0YXRpYyBpbnQgbWluaV9jbV9nZXQoc3RydWN0IG5lc19jbV9jb3JlICopOworc3RhdGljIGludCBtaW5pX2NtX3NldChzdHJ1Y3QgbmVzX2NtX2NvcmUgKiwgdTMyLCB1MzIpOworc3RhdGljIGludCBuZXNfY21fZGlzY29ubl90cnVlKHN0cnVjdCBuZXNfcXAgKik7CitzdGF0aWMgaW50IG5lc19jbV9wb3N0X2V2ZW50KHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KTsKK3N0YXRpYyBpbnQgbmVzX2Rpc2Nvbm5lY3Qoc3RydWN0IG5lc19xcCAqbmVzcXAsIGludCBhYnJ1cHQpOworc3RhdGljIHZvaWQgbmVzX2Rpc2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgaW50IHNlbmRfYWNrKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSk7CitzdGF0aWMgaW50IHNlbmRfZmluKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qIEV4dGVybmFsIENNIEFQSSBJbnRlcmZhY2UgKi8KIC8qIGluc3RhbmNlIG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBjbGllbnQgQVBJICovCkBAIC05OCw3ICsxMjIsNyBAQAogCW1pbmlfY21fc2V0CiB9OwogCi1zdHJ1Y3QgbmVzX2NtX2NvcmUgKmdfY21fY29yZTsKK3N0YXRpYyBzdHJ1Y3QgbmVzX2NtX2NvcmUgKmdfY21fY29yZTsKIAogYXRvbWljX3QgY21fY29ubmVjdHM7CiBhdG9taWNfdCBjbV9hY2NlcHRzOwpAQCAtMTQ4LDcgKzE3Miw3IEBACiAvKioKICAqIHNlbmRfbXBhX3JlcXVlc3QKICAqLwotaW50IHNlbmRfbXBhX3JlcXVlc3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQorc3RhdGljIGludCBzZW5kX21wYV9yZXF1ZXN0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCByZXQ7CkBAIC0yNDIsOCArMjY2LDkgQEAKICAqIGZvcm1fY21fZnJhbWUgLSBnZXQgYSBmcmVlIHBhY2tldCBhbmQgYnVpbGQgZW1wdHkgZnJhbWUgVXNlCiAgKiBub2RlIGluZm8gdG8gYnVpbGQuCiAgKi8KLXN0cnVjdCBza19idWZmICpmb3JtX2NtX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwKLQkJdm9pZCAqb3B0aW9ucywgdTMyIG9wdGlvbnNpemUsIHZvaWQgKmRhdGEsIHUzMiBkYXRhc2l6ZSwgdTggZmxhZ3MpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZvcm1fY21fZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLAorCQkJCSAgICAgdm9pZCAqb3B0aW9ucywgdTMyIG9wdGlvbnNpemUsIHZvaWQgKmRhdGEsCisJCQkJICAgICB1MzIgZGF0YXNpemUsIHU4IGZsYWdzKQogewogCXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiAJc3RydWN0IGlwaGRyICppcGg7CkBAIC0zNDEsNyArMzY2LDYgQEAKIAlpZiAoIWNvcmUpCiAJCXJldHVybjsKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JbmVzX2RlYnVnKE5FU19EQkdfQ00sICJTZXNzaW9uIElEICAgIDogJXUgXG4iLCBhdG9taWNfcmVhZCgmY29yZS0+c2Vzc2lvbl9pZCkpOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJTdGF0ZSAgICAgICAgIDogJXUgXG4iLCAgY29yZS0+c3RhdGUpOwogCkBAIC0zNzAsMTEgKzM5NCwxMSBAQAogCWludCByZXQgPSAwOwogCXUzMiB3YXNfdGltZXJfc2V0OwogCisJaWYgKCFjbV9ub2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKIAluZXdfc2VuZCA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfc2VuZCksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X3NlbmQpCiAJCXJldHVybiAtMTsKLQlpZiAoIWNtX25vZGUpCi0JCXJldHVybiAtRUlOVkFMOwogCiAJLyogbmV3X3NlbmQtPnRpbWV0b3NlbmQgPSBjdXJyZW50dGltZSAqLwogCW5ld19zZW5kLT5yZXRyeWNvdW50ID0gTkVTX0RFRkFVTFRfUkVUUllTOwpAQCAtMzk0LDcgKzQxOCw3IEBACiAJfQogCiAJaWYgKHR5cGUgPT0gTkVTX1RJTUVSX1RZUEVfU0VORCkgewotCQluZXdfc2VuZC0+c2VxX251bSA9IGh0b25sKHRjcF9oZHIoc2tiKS0+c2VxKTsKKwkJbmV3X3NlbmQtPnNlcV9udW0gPSBudG9obCh0Y3BfaGRyKHNrYiktPnNlcSk7CiAJCWF0b21pY19pbmMoJm5ld19zZW5kLT5za2ItPnVzZXJzKTsKIAogCQlyZXQgPSBuZXNfbmljX2NtX3htaXQobmV3X3NlbmQtPnNrYiwgY21fbm9kZS0+bmV0ZGV2KTsKQEAgLTQxOSw3ICs0NDMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywgZmxhZ3MpOwogCX0KIAlpZiAodHlwZSA9PSBORVNfVElNRVJfVFlQRV9SRUNWKSB7Ci0JCW5ld19zZW5kLT5zZXFfbnVtID0gaHRvbmwodGNwX2hkcihza2IpLT5zZXEpOworCQluZXdfc2VuZC0+c2VxX251bSA9IG50b2hsKHRjcF9oZHIoc2tiKS0+c2VxKTsKIAkJbmV3X3NlbmQtPnRpbWV0b3NlbmQgPSBqaWZmaWVzOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmbmV3X3NlbmQtPmxpc3QsICZjbV9ub2RlLT5yZWN2X2xpc3QpOwpAQCAtNDQxLDcgKzQ2NSw3IEBACiAvKioKICAqIG5lc19jbV90aW1lcl90aWNrCiAgKi8KLXZvaWQgbmVzX2NtX3RpbWVyX3RpY2sodW5zaWduZWQgbG9uZyBwYXNzKQorc3RhdGljIHZvaWQgbmVzX2NtX3RpbWVyX3RpY2sodW5zaWduZWQgbG9uZyBwYXNzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHFwbG9ja2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbmV4dHRpbWVvdXQgPSBqaWZmaWVzICsgTkVTX0xPTkdfVElNRTsKQEAgLTY0Myw3ICs2NjcsNyBAQAogLyoqCiAgKiBzZW5kX3N5bgogICovCi1pbnQgc2VuZF9zeW4oc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1MzIgc2VuZGFjaykKK3N0YXRpYyBpbnQgc2VuZF9zeW4oc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1MzIgc2VuZGFjaykKIHsKIAlpbnQgcmV0OwogCWludCBmbGFncyA9IFNFVF9TWU47CkBAIC03MDksNyArNzMzLDcgQEAKIC8qKgogICogc2VuZF9yZXNldAogICovCi1pbnQgc2VuZF9yZXNldChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCitzdGF0aWMgaW50IHNlbmRfcmVzZXQoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCWludCByZXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGdldF9mcmVlX3BrdChjbV9ub2RlKTsKQEAgLTczMSw3ICs3NTUsNyBAQAogLyoqCiAgKiBzZW5kX2FjawogICovCi1pbnQgc2VuZF9hY2soc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQorc3RhdGljIGludCBzZW5kX2FjayhzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZ2V0X2ZyZWVfcGt0KGNtX25vZGUpOwpAQCAtNzUxLDcgKzc3NSw3IEBACiAvKioKICAqIHNlbmRfZmluCiAgKi8KLWludCBzZW5kX2ZpbihzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IHNlbmRfZmluKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0OwogCkBAIC03NzQsNyArNzk4LDcgQEAKIC8qKgogICogZ2V0X2ZyZWVfcGt0CiAgKi8KLXN0cnVjdCBza19idWZmICpnZXRfZnJlZV9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQorc3RhdGljIHN0cnVjdCBza19idWZmICpnZXRfZnJlZV9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCXN0cnVjdCBza19idWZmICpza2IsICpuZXdfc2tiOwogCkBAIC04MTksNyArODQzLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBoYXNoa2V5OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zOwogCXN0cnVjdCBsaXN0X2hlYWQgKmh0ZTsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7CiAKQEAgLTgzNCw4ICs4NTcsNyBAQAogCiAJLyogd2FsayBsaXN0IGFuZCBmaW5kIGNtX25vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbiBJRCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9jb3JlLT5odF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaChsaXN0X3BvcywgaHRlKSB7Ci0JCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9wb3MsIHN0cnVjdCBuZXNfY21fbm9kZSwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbV9ub2RlLCBodGUsIGxpc3QpIHsKIAkJLyogY29tcGFyZSBxdWFkLCByZXR1cm4gbm9kZSBoYW5kbGUgaWYgYSBtYXRjaCAqLwogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgImZpbmRpbmcgbm9kZSAleDoleCA9PyAleDoleCBeICV4OiV4ID0/ICV4OiV4XG4iLAogCQkJCWNtX25vZGUtPmxvY19hZGRyLCBjbV9ub2RlLT5sb2NfcG9ydCwKQEAgLTg2MywxMyArODg1LDExIEBACiAJCW5lc19hZGRyX3QgZHN0X2FkZHIsIHUxNiBkc3RfcG9ydCwgZW51bSBuZXNfY21fbGlzdGVuZXJfc3RhdGUgbGlzdGVuZXJfc3RhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ZW5fbGlzdDsKIAlzdHJ1Y3QgbmVzX2NtX2xpc3RlbmVyICpsaXN0ZW5fbm9kZTsKIAogCS8qIHdhbGsgbGlzdCBhbmQgZmluZCBjbV9ub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24gSUQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY21fY29yZS0+bGlzdGVuX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2gobGlzdGVuX2xpc3QsICZjbV9jb3JlLT5saXN0ZW5fbGlzdC5saXN0KSB7Ci0JCWxpc3Rlbl9ub2RlID0gY29udGFpbmVyX29mKGxpc3Rlbl9saXN0LCBzdHJ1Y3QgbmVzX2NtX2xpc3RlbmVyLCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpc3Rlbl9ub2RlLCAmY21fY29yZS0+bGlzdGVuX2xpc3QubGlzdCwgbGlzdCkgewogCQkvKiBjb21wYXJlIG5vZGUgcGFpciwgcmV0dXJuIG5vZGUgaGFuZGxlIGlmIGEgbWF0Y2ggKi8KIAkJaWYgKCgobGlzdGVuX25vZGUtPmxvY19hZGRyID09IGRzdF9hZGRyKSB8fAogCQkJCWxpc3Rlbl9ub2RlLT5sb2NfYWRkciA9PSAweDAwMDAwMDAwKSAmJgpAQCAtOTQ3LDYgKzk2Nyw3IEBACiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiZGVzdHJveWluZyBsaXN0ZW5lciAoJXApXG4iLCBsaXN0ZW5lcik7CiAKIAkJa2ZyZWUobGlzdGVuZXIpOworCQlsaXN0ZW5lciA9IE5VTEw7CiAJCXJldCA9IDA7CiAJCWNtX2xpc3RlbnNfZGVzdHJveWVkKys7CiAJfSBlbHNlIHsKQEAgLTEwMTIsNyArMTAzMyw3IEBACiAJZmwubmxfdS5pcDRfdS5kYWRkciA9IGh0b25sKGRzdF9pcCk7CiAJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKIAkJcHJpbnRrKCIlczogaXBfcm91dGVfb3V0cHV0X2tleSBmYWlsZWQgZm9yIDB4JTA4WFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGRzdF9pcCk7CisJCQkJX19mdW5jX18sIGRzdF9pcCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNzEsMTIgKzEwOTIsMTAgQEAKIAl0cyA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsKIAljbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0gPSBodG9ubCh0cy50dl9uc2VjKTsKIAljbV9ub2RlLT50Y3BfY250eHQubXNzID0gbmVzdm5pYy0+bWF4X2ZyYW1lX3NpemUgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSAtCi0JCQlzaXplb2Yoc3RydWN0IHRjcGhkcikgLSBFVEhfSExFTjsKKwkJCXNpemVvZihzdHJ1Y3QgdGNwaGRyKSAtIEVUSF9ITEVOIC0gVkxBTl9ITEVOOwogCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gMDsKIAkvKiBnZXQgYSB1bmlxdWUgc2Vzc2lvbiBJRCAsIGFkZCB0aHJlYWRfaWQgdG8gYW4gdXBjb3VudGVyIHRvIGhhbmRsZSByYWNlICovCiAJYXRvbWljX2luYygmY21fY29yZS0+bm9kZV9jbnQpOwotCWF0b21pY19pbmMoJmNtX2NvcmUtPnNlc3Npb25faWQpOwotCWNtX25vZGUtPnNlc3Npb25faWQgPSAodTMyKShhdG9taWNfcmVhZCgmY21fY29yZS0+c2Vzc2lvbl9pZCkgKyBjdXJyZW50LT50Z2lkKTsKIAljbV9ub2RlLT5jb25uX3R5cGUgPSBjbV9pbmZvLT5jb25uX3R5cGU7CiAJY21fbm9kZS0+YXBidnRfc2V0ID0gMDsKIAljbV9ub2RlLT5hY2NlcHRfcGVuZCA9IDA7CkBAIC0xMjM3LDcgKzEyNTYsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJY2FzZSBPUFRJT05fTlVNQkVSX01TUzoKIAkJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIiVzOiBNU1MgTGVuZ3RoOiAlZCBPZmZzZXQ6ICVkIFNpemU6ICVkXG4iLAotCQkJCQkJX19GVU5DVElPTl9fLAorCQkJCQkJX19mdW5jX18sCiAJCQkJCQlhbGxfb3B0aW9ucy0+YXNfbXNzLmxlbmd0aCwgb2Zmc2V0LCBvcHRpb25zaXplKTsKIAkJCQlnb3RfbXNzX29wdGlvbiA9IDE7CiAJCQkJaWYgKGFsbF9vcHRpb25zLT5hc19tc3MubGVuZ3RoICE9IDQpIHsKQEAgLTEyNzAsOCArMTI4OSw4IEBACiAvKioKICAqIHByb2Nlc3NfcGFja2V0CiAgKi8KLWludCBwcm9jZXNzX3BhY2tldChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IsCi0JCXN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSkKK3N0YXRpYyBpbnQgcHJvY2Vzc19wYWNrZXQoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICBzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUpCiB7CiAJaW50IG9wdGlvbnNpemU7CiAJaW50IGRhdGFzaXplOwpAQCAtMTM1OCw3ICsxMzc3LDcgQEAKIAlpZiAob3B0aW9uc2l6ZSkgewogCQl1OCAqb3B0aW9uc2xvYyA9ICh1OCAqKSZ0Y3BoWzFdOwogCQlpZiAocHJvY2Vzc19vcHRpb25zKGNtX25vZGUsIG9wdGlvbnNsb2MsIG9wdGlvbnNpemUsICh1MzIpdGNwaC0+c3luKSkgewotCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICIlczogTm9kZSAlcCwgU2VuZGluZyBSRVNFVFxuIiwgX19GVU5DVElPTl9fLCBjbV9ub2RlKTsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiJXM6IE5vZGUgJXAsIFNlbmRpbmcgUkVTRVRcbiIsIF9fZnVuY19fLCBjbV9ub2RlKTsKIAkJCXNlbmRfcmVzZXQoY21fbm9kZSk7CiAJCQlpZiAoY21fbm9kZS0+c3RhdGUgIT0gTkVTX0NNX1NUQVRFX1NZTl9TRU5UKQogCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOwpAQCAtMTYwMyw5ICsxNjIyLDcgQEAKIAlsaXN0ZW5lci0+Y21fY29yZSA9IGNtX2NvcmU7CiAJbGlzdGVuZXItPm5lc3ZuaWMgPSBuZXN2bmljOwogCWF0b21pY19pbmMoJmNtX2NvcmUtPm5vZGVfY250KTsKLQlhdG9taWNfaW5jKCZjbV9jb3JlLT5zZXNzaW9uX2lkKTsKIAotCWxpc3RlbmVyLT5zZXNzaW9uX2lkID0gKHUzMikoYXRvbWljX3JlYWQoJmNtX2NvcmUtPnNlc3Npb25faWQpICsgY3VycmVudC0+dGdpZCk7CiAJbGlzdGVuZXItPmNvbm5fdHlwZSA9IGNtX2luZm8tPmNvbm5fdHlwZTsKIAlsaXN0ZW5lci0+YmFja2xvZyA9IGNtX2luZm8tPmJhY2tsb2c7CiAJbGlzdGVuZXItPmxpc3RlbmVyX3N0YXRlID0gTkVTX0NNX0xJU1RFTkVSX0FDVElWRV9TVEFURTsKQEAgLTE2MjksOSArMTY0NiwxMCBAQAogLyoqCiAgKiBtaW5pX2NtX2Nvbm5lY3QgLSBtYWtlIGEgY29ubmVjdGlvbiBub2RlIHdpdGggcGFyYW1zCiAgKi8KLXN0cnVjdCBuZXNfY21fbm9kZSAqbWluaV9jbV9jb25uZWN0KHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKLQkJc3RydWN0IG5lc192bmljICpuZXN2bmljLCBzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKm1wYV9mcmFtZSwKLQkJc3RydWN0IG5lc19jbV9pbmZvICpjbV9pbmZvKQorc3RhdGljIHN0cnVjdCBuZXNfY21fbm9kZSAqbWluaV9jbV9jb25uZWN0KHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKKwkJCQkJICAgc3RydWN0IG5lc192bmljICpuZXN2bmljLAorCQkJCQkgICBzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKm1wYV9mcmFtZSwKKwkJCQkJICAgc3RydWN0IG5lc19jbV9pbmZvICpjbV9pbmZvKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKQEAgLTE3MTUsOCArMTczMyw4IEBACiAgKiBtaW5pX2NtX2FjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24KICAqIFRoaXMgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkCiAgKi8KLWludCBtaW5pX2NtX2FjY2VwdChzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUsIHN0cnVjdCBpZXRmX21wYV9mcmFtZSAqbXBhX2ZyYW1lLAotCQlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCitzdGF0aWMgaW50IG1pbmlfY21fYWNjZXB0KHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwgc3RydWN0IGlldGZfbXBhX2ZyYW1lICptcGFfZnJhbWUsCisJCQkgIHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MjUsOSArMTc0Myw5IEBACiAvKioKICAqIG1pbmlfY21fcmVqZWN0IC0gcmVqZWN0IGFuZCB0ZWFyZG93biBhIGNvbm5lY3Rpb24KICAqLwotaW50IG1pbmlfY21fcmVqZWN0KHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKLQkJc3RydWN0IGlldGZfbXBhX2ZyYW1lICptcGFfZnJhbWUsCi0JCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKK3N0YXRpYyBpbnQgbWluaV9jbV9yZWplY3Qoc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlLAorCQkJICBzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKm1wYV9mcmFtZSwKKwkJCSAgc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xNzU5LDcgKzE3NzcsNyBAQAogLyoqCiAgKiBtaW5pX2NtX2Nsb3NlCiAgKi8KLWludCBtaW5pX2NtX2Nsb3NlKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwgc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQorc3RhdGljIGludCBtaW5pX2NtX2Nsb3NlKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwgc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCWludCByZXQgPSAwOwogCkBAIC0xODA2LDggKzE4MjQsOCBAQAogICogcmVjdl9wa3QgLSByZWN2IGFuIEVUSEVSTkVUIHBhY2tldCwgYW5kIHByb2Nlc3MgaXQgdGhyb3VnaCBDTQogICogbm9kZSBzdGF0ZSBtYWNoaW5lCiAgKi8KLWludCBtaW5pX2NtX3JlY3ZfcGt0KHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwgc3RydWN0IG5lc192bmljICpuZXN2bmljLAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBtaW5pX2NtX3JlY3ZfcGt0KHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwgc3RydWN0IG5lc192bmljICpuZXN2bmljLAorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlID0gTlVMTDsKIAlzdHJ1Y3QgbmVzX2NtX2xpc3RlbmVyICpsaXN0ZW5lciA9IE5VTEw7CkBAIC0xODk2LDcgKzE5MTQsNyBAQAogLyoqCiAgKiBuZXNfY21fYWxsb2NfY29yZSAtIGFsbG9jYXRlIGEgdG9wIGxldmVsIGluc3RhbmNlIG9mIGEgY20gY29yZQogICovCi1zdHJ1Y3QgbmVzX2NtX2NvcmUgKm5lc19jbV9hbGxvY19jb3JlKHZvaWQpCitzdGF0aWMgc3RydWN0IG5lc19jbV9jb3JlICpuZXNfY21fYWxsb2NfY29yZSh2b2lkKQogewogCWludCBpOwogCkBAIC0xOTE3LDcgKzE5MzUsNiBAQAogCWNtX2NvcmUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0lOSVRFRDsKIAljbV9jb3JlLT5mcmVlX3R4X3BrdF9tYXggPSBORVNfQ01fREVGQVVMVF9GUkVFX1BLVFM7CiAKLQlhdG9taWNfc2V0KCZjbV9jb3JlLT5zZXNzaW9uX2lkLCAwKTsKIAlhdG9taWNfc2V0KCZjbV9jb3JlLT5ldmVudHNfcG9zdGVkLCAwKTsKIAogCS8qIGluaXQgdGhlIHBhY2tldCBsaXN0cyAqLwpAQCAtMTk1Niw3ICsxOTczLDcgQEAKIC8qKgogICogbWluaV9jbV9kZWFsbG9jX2NvcmUgLSBkZWFsbG9jYXRlIGEgdG9wIGxldmVsIGluc3RhbmNlIG9mIGEgY20gY29yZQogICovCi1pbnQgbWluaV9jbV9kZWFsbG9jX2NvcmUoc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlKQorc3RhdGljIGludCBtaW5pX2NtX2RlYWxsb2NfY29yZShzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUpCiB7CiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJEZS1BbGxvYyBDTSBDb3JlICglcClcbiIsIGNtX2NvcmUpOwogCkBAIC0xOTgxLDcgKzE5OTgsNyBAQAogLyoqCiAgKiBtaW5pX2NtX2dldAogICovCi1pbnQgbWluaV9jbV9nZXQoc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlKQorc3RhdGljIGludCBtaW5pX2NtX2dldChzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUpCiB7CiAJcmV0dXJuIGNtX2NvcmUtPnN0YXRlOwogfQpAQCAtMTk5MCw3ICsyMDA3LDcgQEAKIC8qKgogICogbWluaV9jbV9zZXQKICAqLwotaW50IG1pbmlfY21fc2V0KHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwgdTMyIHR5cGUsIHUzMiB2YWx1ZSkKK3N0YXRpYyBpbnQgbWluaV9jbV9zZXQoc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlLCB1MzIgdHlwZSwgdTMyIHZhbHVlKQogewogCWludCByZXQgPSAwOwogCkBAIC0yMTA3LDcgKzIxMjQsNyBAQAogLyoqCiAgKiBuZXNfZGlzY29ubmVjdF93b3JrZXIKICAqLwotdm9pZCBuZXNfZGlzY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgbmVzX2Rpc2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbmVzX3FwICpuZXNxcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmVzX3FwLCBkaXNjb25uX3dvcmspOwogCkBAIC0yMTIwLDcgKzIxMzcsNyBAQAogLyoqCiAgKiBuZXNfY21fZGlzY29ubl90cnVlCiAgKi8KLWludCBuZXNfY21fZGlzY29ubl90cnVlKHN0cnVjdCBuZXNfcXAgKm5lc3FwKQorc3RhdGljIGludCBuZXNfY21fZGlzY29ubl90cnVlKHN0cnVjdCBuZXNfcXAgKm5lc3FwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CkBAIC0yMjYzLDcgKzIyODAsNyBAQAogLyoqCiAgKiBuZXNfZGlzY29ubmVjdAogICovCi1pbnQgbmVzX2Rpc2Nvbm5lY3Qoc3RydWN0IG5lc19xcCAqbmVzcXAsIGludCBhYnJ1cHQpCitzdGF0aWMgaW50IG5lc19kaXNjb25uZWN0KHN0cnVjdCBuZXNfcXAgKm5lc3FwLCBpbnQgYWJydXB0KQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYzsKQEAgLTIzMTksNiArMjMzNiw3IEBACiAJc3RydWN0IGl3X2NtX2V2ZW50IGNtX2V2ZW50OwogCXN0cnVjdCBuZXNfaHdfcXBfd3FlICp3cWU7CiAJc3RydWN0IG5lc192NF9xdWFkIG5lc19xdWFkOworCXUzMiBjcmNfdmFsdWU7CiAJaW50IHJldDsKIAogCWlicXAgPSBuZXNfZ2V0X3FwKGNtX2lkLT5kZXZpY2UsIGNvbm5fcGFyYW0tPnFwbik7CkBAIC0yNDM1LDggKzI0NTMsOCBAQAogCW5lc19xdWFkLlRjcFBvcnRzWzFdICAgPSBjbV9pZC0+bG9jYWxfYWRkci5zaW5fcG9ydDsKIAogCS8qIFByb2R1Y2UgaGFzaCBrZXkgKi8KLQluZXNxcC0+aHRlX2luZGV4ID0gY3B1X3RvX2JlMzIoCi0JCQljcmMzMmMofjAsICh2b2lkICopJm5lc19xdWFkLCBzaXplb2YobmVzX3F1YWQpKSBeIDB4ZmZmZmZmZmYpOworCWNyY192YWx1ZSA9IGdldF9jcmNfdmFsdWUoJm5lc19xdWFkKTsKKwluZXNxcC0+aHRlX2luZGV4ID0gY3B1X3RvX2JlMzIoY3JjX3ZhbHVlIF4gMHhmZmZmZmZmZik7CiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJIVEUgSW5kZXggPSAweCUwOFgsIENSQyA9IDB4JTA4WFxuIiwKIAkJCW5lc3FwLT5odGVfaW5kZXgsIG5lc3FwLT5odGVfaW5kZXggJiBhZGFwdGVyLT5odGVfaW5kZXhfbWFzayk7CiAKQEAgLTI0NzksNyArMjQ5Nyw3IEBACiAJfQogCWlmIChyZXQpCiAJCXByaW50aygiJXNbJXVdIE9GQSBDTSBldmVudF9oYW5kbGVyIHJldHVybmVkLCByZXQ9JWRcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywgcmV0KTsKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2NDcsNyArMjY2NSw3IEBACiAJY21fbm9kZSA9IGdfY21fY29yZS0+YXBpLT5saXN0ZW4oZ19jbV9jb3JlLCBuZXN2bmljLCAmY21faW5mbyk7CiAJaWYgKCFjbV9ub2RlKSB7CiAJCXByaW50aygiJXNbJXVdIEVycm9yIHJldHVybmVkIGZyb20gbGlzdGVuIEFQSSBjYWxsXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjczNyw3ICsyNzU1LDcgQEAKICAqIGNtX2V2ZW50X2Nvbm5lY3RlZAogICogaGFuZGxlIGEgY29ubmVjdGVkIGV2ZW50LCBzZXR1cCBRUHMgYW5kIEhXCiAgKi8KLXZvaWQgY21fZXZlbnRfY29ubmVjdGVkKHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KQorc3RhdGljIHZvaWQgY21fZXZlbnRfY29ubmVjdGVkKHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KQogewogCXU2NCB1NjR0ZW1wOwogCXN0cnVjdCBuZXNfcXAgKm5lc3FwOwpAQCAtMjc1MCw2ICsyNzY4LDcgQEAKIAlzdHJ1Y3QgaXdfY21fZXZlbnQgY21fZXZlbnQ7CiAJc3RydWN0IG5lc19od19xcF93cWUgKndxZTsKIAlzdHJ1Y3QgbmVzX3Y0X3F1YWQgbmVzX3F1YWQ7CisJdTMyIGNyY192YWx1ZTsKIAlpbnQgcmV0OwogCiAJLyogZ2V0IGFsbCBvdXIgaGFuZGxlcyAqLwpAQCAtMjgyNyw4ICsyODQ2LDggQEAKIAluZXNfcXVhZC5UY3BQb3J0c1sxXSA9IGNtX2lkLT5sb2NhbF9hZGRyLnNpbl9wb3J0OwogCiAJLyogUHJvZHVjZSBoYXNoIGtleSAqLwotCW5lc3FwLT5odGVfaW5kZXggPSBjcHVfdG9fYmUzMigKLQkJCWNyYzMyYyh+MCwgKHZvaWQgKikmbmVzX3F1YWQsIHNpemVvZihuZXNfcXVhZCkpIF4gMHhmZmZmZmZmZik7CisJY3JjX3ZhbHVlID0gZ2V0X2NyY192YWx1ZSgmbmVzX3F1YWQpOworCW5lc3FwLT5odGVfaW5kZXggPSBjcHVfdG9fYmUzMihjcmNfdmFsdWUgXiAweGZmZmZmZmZmKTsKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgIkhURSBJbmRleCA9IDB4JTA4WCwgQWZ0ZXIgQ1JDID0gMHglMDhYXG4iLAogCQkJbmVzcXAtPmh0ZV9pbmRleCwgbmVzcXAtPmh0ZV9pbmRleCAmIG5lc2FkYXB0ZXItPmh0ZV9pbmRleF9tYXNrKTsKIApAQCAtMjg2MCw3ICsyODc5LDcgQEAKIAogCWlmIChyZXQpCiAJCXByaW50aygiJXNbJXVdIE9GQSBDTSBldmVudF9oYW5kbGVyIHJldHVybmVkLCByZXQ9JWRcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywgcmV0KTsKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJFeGl0aW5nIGNvbm5lY3QgdGhyZWFkIGZvciBRUCV1LiBqaWZmaWVzID0gJWx1XG4iLAogCQkJbmVzcXAtPmh3cXAucXBfaWQsIGppZmZpZXMgKTsKIApAQCAtMjg3Myw3ICsyODkyLDcgQEAKIC8qKgogICogY21fZXZlbnRfY29ubmVjdF9lcnJvcgogICovCi12b2lkIGNtX2V2ZW50X2Nvbm5lY3RfZXJyb3Ioc3RydWN0IG5lc19jbV9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBjbV9ldmVudF9jb25uZWN0X2Vycm9yKHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBuZXNfcXAgKm5lc3FwOwogCXN0cnVjdCBpd19jbV9pZCAqY21faWQ7CkBAIC0yOTE1LDcgKzI5MzQsNyBAQAogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwgcmV0KTsKIAlpZiAocmV0KQogCQlwcmludGsoIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgX19MSU5FX18sIHJldCk7CisJCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOwogCW5lc19yZW1fcmVmKCZuZXNxcC0+aWJxcCk7CiAJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKIApAQCAtMjkyNiw3ICsyOTQ1LDcgQEAKIC8qKgogICogY21fZXZlbnRfcmVzZXQKICAqLwotdm9pZCBjbV9ldmVudF9yZXNldChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIGNtX2V2ZW50X3Jlc2V0KHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBuZXNfcXAgKm5lc3FwOwogCXN0cnVjdCBpd19jbV9pZCAqY21faWQ7CkBAIC0yOTY5LDcgKzI5ODgsNyBAQAogLyoqCiAgKiBjbV9ldmVudF9tcGFfcmVxCiAgKi8KLXZvaWQgY21fZXZlbnRfbXBhX3JlcShzdHJ1Y3QgbmVzX2NtX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZXEoc3RydWN0IG5lc19jbV9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGl3X2NtX2lkICAgKmNtX2lkOwogCXN0cnVjdCBpd19jbV9ldmVudCBjbV9ldmVudDsKQEAgLTMwMDMsNyArMzAyMiw3IEBACiAJcmV0ID0gY21faWQtPmV2ZW50X2hhbmRsZXIoY21faWQsICZjbV9ldmVudCk7CiAJaWYgKHJldCkKIAkJcHJpbnRrKCIlc1sldV0gT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fLCByZXQpOworCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKIAogCXJldHVybjsKIH0KQEAgLTMwMTUsNyArMzAzNCw3IEBACiAgKiBuZXNfY21fcG9zdF9ldmVudAogICogcG9zdCBhbiBldmVudCB0byB0aGUgY20gZXZlbnQgaGFuZGxlcgogICovCi1pbnQgbmVzX2NtX3Bvc3RfZXZlbnQoc3RydWN0IG5lc19jbV9ldmVudCAqZXZlbnQpCitzdGF0aWMgaW50IG5lc19jbV9wb3N0X2V2ZW50KHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KQogewogCWF0b21pY19pbmMoJmV2ZW50LT5jbV9ub2RlLT5jbV9jb3JlLT5ldmVudHNfcG9zdGVkKTsKIAlhZGRfcmVmX2NtX25vZGUoZXZlbnQtPmNtX25vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKaW5kZXggYTU5ZjBhNy4uNzcxN2NiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCkBAIC0yMjUsNyArMjI1LDYgQEAKIAogc3RydWN0IG5lc19jbV9saXN0ZW5lciB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgbGlzdDsKLQl1NjQgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwogCXN0cnVjdCBuZXNfY21fY29yZSAgICAgICAgICpjbV9jb3JlOwogCXU4ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY19tYWNbRVRIX0FMRU5dOwogCW5lc19hZGRyX3QgICAgICAgICAgICAgICAgIGxvY19hZGRyOwpAQCAtMjQyLDcgKzI0MSw2IEBACiAKIC8qIHBlciBjb25uZWN0aW9uIG5vZGUgYW5kIG5vZGUgc3RhdGUgaW5mb3JtYXRpb24gKi8KIHN0cnVjdCBuZXNfY21fbm9kZSB7Ci0JdTY0ICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgaGFzaGtleTsKIAogCW5lc19hZGRyX3QgICAgICAgICAgICAgICAgbG9jX2FkZHIsIHJlbV9hZGRyOwpAQCAtMzI3LDcgKzMyNSw2IEBACiAKIHN0cnVjdCBuZXNfY21fY29yZSB7CiAJZW51bSBuZXNfY21fbm9kZV9zdGF0ZSAgc3RhdGU7Ci0JYXRvbWljX3QgICAgICAgICAgICAgICAgc2Vzc2lvbl9pZDsKIAogCWF0b21pY190ICAgICAgICAgICAgICAgIGxpc3Rlbl9ub2RlX2NudDsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgICAgICBsaXN0ZW5fbGlzdDsKQEAgLTM4MywzNSArMzgwLDEwIEBACiAJaW50ICgqc2V0KShzdHJ1Y3QgbmVzX2NtX2NvcmUgKiwgdTMyLCB1MzIpOwogfTsKIAotCi1pbnQgc2VuZF9tcGFfcmVxdWVzdChzdHJ1Y3QgbmVzX2NtX25vZGUgKik7Ci1zdHJ1Y3Qgc2tfYnVmZiAqZm9ybV9jbV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmVzX2NtX25vZGUgKiwKLQkJdm9pZCAqLCB1MzIsIHZvaWQgKiwgdTMyLCB1OCk7CiBpbnQgc2NoZWR1bGVfbmVzX3RpbWVyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAogCQllbnVtIG5lc190aW1lcl90eXBlLCBpbnQsIGludCk7Ci12b2lkIG5lc19jbV90aW1lcl90aWNrKHVuc2lnbmVkIGxvbmcpOwotaW50IHNlbmRfc3luKHN0cnVjdCBuZXNfY21fbm9kZSAqLCB1MzIpOwotaW50IHNlbmRfcmVzZXQoc3RydWN0IG5lc19jbV9ub2RlICopOwotaW50IHNlbmRfYWNrKHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKLWludCBzZW5kX2ZpbihzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdHJ1Y3Qgc2tfYnVmZiAqZ2V0X2ZyZWVfcGt0KHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKLWludCBwcm9jZXNzX3BhY2tldChzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5lc19jbV9jb3JlICopOwotCi1zdHJ1Y3QgbmVzX2NtX25vZGUgKiBtaW5pX2NtX2Nvbm5lY3Qoc3RydWN0IG5lc19jbV9jb3JlICosCi0JCXN0cnVjdCBuZXNfdm5pYyAqLCBzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKiwgc3RydWN0IG5lc19jbV9pbmZvICopOwotaW50IG1pbmlfY21fYWNjZXB0KHN0cnVjdCBuZXNfY21fY29yZSAqLCBzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKiwgc3RydWN0IG5lc19jbV9ub2RlICopOwotaW50IG1pbmlfY21fcmVqZWN0KHN0cnVjdCBuZXNfY21fY29yZSAqLCBzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKiwgc3RydWN0IG5lc19jbV9ub2RlICopOwotaW50IG1pbmlfY21fY2xvc2Uoc3RydWN0IG5lc19jbV9jb3JlICosIHN0cnVjdCBuZXNfY21fbm9kZSAqKTsKLWludCBtaW5pX2NtX3JlY3ZfcGt0KHN0cnVjdCBuZXNfY21fY29yZSAqLCBzdHJ1Y3QgbmVzX3ZuaWMgKiwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdHJ1Y3QgbmVzX2NtX2NvcmUgKm1pbmlfY21fYWxsb2NfY29yZShzdHJ1Y3QgbmVzX2NtX2luZm8gKik7Ci1pbnQgbWluaV9jbV9kZWFsbG9jX2NvcmUoc3RydWN0IG5lc19jbV9jb3JlICopOwotaW50IG1pbmlfY21fZ2V0KHN0cnVjdCBuZXNfY21fY29yZSAqKTsKLWludCBtaW5pX2NtX3NldChzdHJ1Y3QgbmVzX2NtX2NvcmUgKiwgdTMyLCB1MzIpOwogCiBpbnQgbmVzX2NtX2Rpc2Nvbm4oc3RydWN0IG5lc19xcCAqKTsKLXZvaWQgbmVzX2Rpc2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLWludCBuZXNfY21fZGlzY29ubl90cnVlKHN0cnVjdCBuZXNfcXAgKik7Ci1pbnQgbmVzX2Rpc2Nvbm5lY3Qoc3RydWN0IG5lc19xcCAqLCBpbnQpOwogCiBpbnQgbmVzX2FjY2VwdChzdHJ1Y3QgaXdfY21faWQgKiwgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKik7CiBpbnQgbmVzX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKiwgY29uc3Qgdm9pZCAqLCB1OCk7CkBAIC00MjMsMTEgKzM5NSw0IEBACiBpbnQgbmVzX2NtX3N0YXJ0KHZvaWQpOwogaW50IG5lc19jbV9zdG9wKHZvaWQpOwogCi0vKiBDTSBldmVudCBoYW5kbGVyIGZ1bmN0aW9ucyAqLwotdm9pZCBjbV9ldmVudF9jb25uZWN0ZWQoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKLXZvaWQgY21fZXZlbnRfY29ubmVjdF9lcnJvcihzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOwotdm9pZCBjbV9ldmVudF9yZXNldChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOwotdm9pZCBjbV9ldmVudF9tcGFfcmVxKHN0cnVjdCBuZXNfY21fZXZlbnQgKik7Ci1pbnQgbmVzX2NtX3Bvc3RfZXZlbnQoc3RydWN0IG5lc19jbV9ldmVudCAqKTsKLQogI2VuZGlmCQkJLyogTkVTX0NNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCmluZGV4IDdjNGMwZmIuLmFhNTNhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwpAQCAtNDEsNyArNDEsNyBAQAogCiAjaW5jbHVkZSAibmVzLmgiCiAKLXUzMiBjcml0X2Vycl9jb3VudCA9IDA7CitzdGF0aWMgdTMyIGNyaXRfZXJyX2NvdW50OwogdTMyIGludF9tb2RfdGltZXJfaW5pdDsKIHUzMiBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKIHUzMiBpbnRfbW9kX2NxX2RlcHRoXzEyODsKQEAgLTUzLDYgKzUzLDE3IEBACiAKICNpbmNsdWRlICJuZXNfY20uaCIKIAorc3RhdGljIHZvaWQgbmVzX2NxcF9jZV9oYW5kbGVyKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfY3EgKmNxKTsKK3N0YXRpYyB2b2lkIG5lc19pbml0X2Nzcl9uZTAyMChzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1OCBod19yZXYsIHU4IHBvcnRfY291bnQpOworc3RhdGljIGludCBuZXNfaW5pdF9zZXJkZXMoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwgdTggaHdfcmV2LCB1OCBwb3J0X2NvdW50LAorCQkJICAgdTggT25lR19Nb2RlKTsKK3N0YXRpYyB2b2lkIG5lc19uaWNfbmFwaV9jZV9oYW5kbGVyKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfbmljX2NxICpjcSk7CitzdGF0aWMgdm9pZCBuZXNfcHJvY2Vzc19hZXEoc3RydWN0IG5lc19kZXZpY2UgKm5lc2Rldiwgc3RydWN0IG5lc19od19hZXEgKmFlcSk7CitzdGF0aWMgdm9pZCBuZXNfcHJvY2Vzc19jZXEoc3RydWN0IG5lc19kZXZpY2UgKm5lc2Rldiwgc3RydWN0IG5lc19od19jZXEgKmNlcSk7CitzdGF0aWMgdm9pZCBuZXNfcHJvY2Vzc19pd2FycF9hZXFlKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsCisJCQkJICAgc3RydWN0IG5lc19od19hZXFlICphZXFlKTsKK3N0YXRpYyB2b2lkIG5lc19wcm9jZXNzX21hY19pbnRyKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHUzMiBtYWNfbnVtYmVyKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmVzX3Jlc2V0X2FkYXB0ZXJfbmUwMjAoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwgdTggKk9uZUdfTW9kZSk7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9ORVNfREVCVUcKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpuZXNfaXdhcnBfc3RhdGVfc3RyW10gPSB7CkBAIC0xNTYsMTUgKzE2NywxNCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBlcmlvZGljX3RpbWVyX2xvY2ssIGZsYWdzKTsKIAotCWlmIChzaGFyZWRfdGltZXItPmNxX2NvdW50X29sZCA8IGNxX2NvdW50KSB7Ci0JCWlmIChjcV9jb3VudCA+IHNoYXJlZF90aW1lci0+dGhyZXNob2xkX2xvdykKLQkJCXNoYXJlZF90aW1lci0+Y3FfZGlyZWN0aW9uX2Rvd253YXJkPTA7Ci0JfQotCWlmIChzaGFyZWRfdGltZXItPmNxX2NvdW50X29sZCA+PSBjcV9jb3VudCkKKwlpZiAoc2hhcmVkX3RpbWVyLT5jcV9jb3VudF9vbGQgPD0gY3FfY291bnQpCisJCXNoYXJlZF90aW1lci0+Y3FfZGlyZWN0aW9uX2Rvd253YXJkID0gMDsKKwllbHNlCiAJCXNoYXJlZF90aW1lci0+Y3FfZGlyZWN0aW9uX2Rvd253YXJkKys7CiAJc2hhcmVkX3RpbWVyLT5jcV9jb3VudF9vbGQgPSBjcV9jb3VudDsKIAlpZiAoc2hhcmVkX3RpbWVyLT5jcV9kaXJlY3Rpb25fZG93bndhcmQgPiBORVNfTklDX0NRX0RPV05XQVJEX1RSRU5EKSB7Ci0JCWlmIChjcV9jb3VudCA8PSBzaGFyZWRfdGltZXItPnRocmVzaG9sZF9sb3cpIHsKKwkJaWYgKGNxX2NvdW50IDw9IHNoYXJlZF90aW1lci0+dGhyZXNob2xkX2xvdyAmJgorCQkgICAgc2hhcmVkX3RpbWVyLT50aHJlc2hvbGRfbG93ID4gNCkgewogCQkJc2hhcmVkX3RpbWVyLT50aHJlc2hvbGRfbG93ID0gc2hhcmVkX3RpbWVyLT50aHJlc2hvbGRfbG93LzI7CiAJCQlzaGFyZWRfdGltZXItPmNxX2RpcmVjdGlvbl9kb3dud2FyZD0wOwogCQkJbmVzZGV2LT5jdXJyY3FfY291bnQgPSAwOwpAQCAtMzcxLDcgKzM4MSw3IEBACiAJCW5lc2FkYXB0ZXItPmV0X3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IDE7CiAJCW5lc2FkYXB0ZXItPnRpbWVyX2ludF9saW1pdCA9IE5FU19USU1FUl9JTlRfTElNSVRfRFlOQU1JQzsKIAkJbmVzYWRhcHRlci0+ZXRfcnhfY29hbGVzY2VfdXNlY3NfaXJxID0gMDsKLQkJcHJpbnRrKFBGWCAiJXM6IFVzaW5nIEFkYXB0aXZlIEludGVycnVwdCBNb2RlcmF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoUEZYICIlczogVXNpbmcgQWRhcHRpdmUgSW50ZXJydXB0IE1vZGVyYXRpb25cbiIsIF9fZnVuY19fKTsKIAl9CiAJLyogU2V0dXAgYW5kIGVuYWJsZSB0aGUgcGVyaW9kaWMgdGltZXIgKi8KIAlpZiAobmVzYWRhcHRlci0+ZXRfcnhfY29hbGVzY2VfdXNlY3NfaXJxKQpAQCAtMzgzLDcgKzM5Myw3IEBACiAJbmVzYWRhcHRlci0+YmFzZV9wZCA9IDE7CiAKIAluZXNhZGFwdGVyLT5kZXZpY2VfY2FwX2ZsYWdzID0KLQkJCUlCX0RFVklDRV9aRVJPX1NUQUcgfCBJQl9ERVZJQ0VfU0VORF9XX0lOViB8IElCX0RFVklDRV9NRU1fV0lORE9XOworCQlJQl9ERVZJQ0VfWkVST19TVEFHIHwgSUJfREVWSUNFX01FTV9XSU5ET1c7CiAKIAluZXNhZGFwdGVyLT5hbGxvY2F0ZWRfcXBzID0gKHVuc2lnbmVkIGxvbmcgKikmKCgodW5zaWduZWQgY2hhciAqKW5lc2FkYXB0ZXIpCiAJCQlbKHNpemVvZihzdHJ1Y3QgbmVzX2FkYXB0ZXIpKyhzaXplb2YodW5zaWduZWQgbG9uZyktMSkpJih+KHNpemVvZih1bnNpZ25lZCBsb25nKS0xKSldKTsKQEAgLTU3Myw3ICs1ODMsNyBAQAogCQlpZiAodmVuZG9yX2lkID09IDB4ZmZmZikKIAkJCWJyZWFrOwogCX0KLQluZXNfZGVidWcoTkVTX0RCR19JTklULCAiJXMgJWQgZnVuY3Rpb25zIGZvdW5kIGZvciAlcy5cbiIsIF9fRlVOQ1RJT05fXywKKwluZXNfZGVidWcoTkVTX0RCR19JTklULCAiJXMgJWQgZnVuY3Rpb25zIGZvdW5kIGZvciAlcy5cbiIsIF9fZnVuY19fLAogCQlmdW5jX2luZGV4LCBwY2lfbmFtZShuZXNkZXYtPnBjaWRldikpOwogCW5lc2FkYXB0ZXItPmFkYXB0ZXJfZmNuX2NvdW50ID0gZnVuY19pbmRleDsKIApAQCAtNTg0LDcgKzU5NCw3IEBACiAvKioKICAqIG5lc19yZXNldF9hZGFwdGVyX25lMDIwCiAgKi8KLXVuc2lnbmVkIGludCBuZXNfcmVzZXRfYWRhcHRlcl9uZTAyMChzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1OCAqT25lR19Nb2RlKQorc3RhdGljIHVuc2lnbmVkIGludCBuZXNfcmVzZXRfYWRhcHRlcl9uZTAyMChzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1OCAqT25lR19Nb2RlKQogewogCXUzMiBwb3J0X2NvdW50OwogCXUzMiB1MzJ0ZW1wOwpAQCAtNjkyLDcgKzcwMiw4IEBACiAvKioKICAqIG5lc19pbml0X3NlcmRlcwogICovCi1pbnQgbmVzX2luaXRfc2VyZGVzKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHU4IGh3X3JldiwgdTggcG9ydF9jb3VudCwgdTggIE9uZUdfTW9kZSkKK3N0YXRpYyBpbnQgbmVzX2luaXRfc2VyZGVzKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHU4IGh3X3JldiwgdTggcG9ydF9jb3VudCwKKwkJCSAgIHU4IE9uZUdfTW9kZSkKIHsKIAlpbnQgaTsKIAl1MzIgdTMydGVtcDsKQEAgLTc0MCw3ICs3NTEsNyBAQAogCQkJCSYgMHgwMDAwMDAwZikpICE9IDB4MDAwMDAwMGYpICYmIChpKysgPCA1MDAwKSkKIAkJCQltZGVsYXkoMSk7CiAJCQlpZiAoaSA+PSA1MDAwKSB7Ci0JCQkJcHJpbnRrKCIlczogSW5pdDogc2VyZGVzIDEgbm90IHJlYWR5LCBzdGF0dXM9JXhcbiIsIF9fRlVOQ1RJT05fXywgdTMydGVtcCk7CisJCQkJcHJpbnRrKCIlczogSW5pdDogc2VyZGVzIDEgbm90IHJlYWR5LCBzdGF0dXM9JXhcbiIsIF9fZnVuY19fLCB1MzJ0ZW1wKTsKIAkJCQkvKiByZXR1cm4gMTsgKi8KIAkJCX0KIAkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX1RYX0VNUDEsIDB4MDAwYmRlZjcpOwpAQCAtNzYxLDcgKzc3Miw3IEBACiAgKiBuZXNfaW5pdF9jc3JfbmUwMjAKICAqIEluaXRpYWxpemUgcmVnaXN0ZXJzIGZvciBuZTAyMCBoYXJkd2FyZQogICovCi12b2lkIG5lc19pbml0X2Nzcl9uZTAyMChzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1OCBod19yZXYsIHU4IHBvcnRfY291bnQpCitzdGF0aWMgdm9pZCBuZXNfaW5pdF9jc3JfbmUwMjAoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwgdTggaHdfcmV2LCB1OCBwb3J0X2NvdW50KQogewogCXUzMiB1MzJ0ZW1wOwogCkBAIC0xMjA1LDcgKzEyMTYsNyBAQAogCWlmIChuZXNhZGFwdGVyLT5PbmVHX01vZGUpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfUEhZLCAiMUcgUEhZLCBtYWNfaW5kZXggPSAlZC5cbiIsIG1hY19pbmRleCk7CiAJCWlmIChuZXNhZGFwdGVyLT5waHlfdHlwZVttYWNfaW5kZXhdID09IE5FU19QSFlfVFlQRV8xRykgewotCQkJcHJpbnRrKFBGWCAiJXM6IFByb2dyYW1taW5nIG1kYyBjb25maWcgZm9yIDFHXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJpbnRrKFBGWCAiJXM6IFByb2dyYW1taW5nIG1kYyBjb25maWcgZm9yIDFHXG4iLCBfX2Z1bmNfXyk7CiAJCQl0eF9jb25maWcgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfVFhfQ09ORklHKTsKIAkJCXR4X2NvbmZpZyB8PSAweDA0OwogCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19UWF9DT05GSUcsIHR4X2NvbmZpZyk7CkBAIC0xMzU5LDcgKzEzNzAsNyBAQAogc3RhdGljIHZvaWQgbmVzX3JxX3dxZXNfdGltZW91dCh1bnNpZ25lZCBsb25nIHBhcm0pCiB7CiAJc3RydWN0IG5lc192bmljICpuZXN2bmljID0gKHN0cnVjdCBuZXNfdm5pYyAqKXBhcm07Ci0JcHJpbnRrKCIlczogVGltZXIgZmlyZWQuXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50aygiJXM6IFRpbWVyIGZpcmVkLlxuIiwgX19mdW5jX18pOwogCWF0b21pY19zZXQoJm5lc3ZuaWMtPnJ4X3NrYl90aW1lcl9ydW5uaW5nLCAwKTsKIAlpZiAoYXRvbWljX3JlYWQoJm5lc3ZuaWMtPnJ4X3NrYnNfbmVlZGVkKSkKIAkJbmVzX3JlcGxlbmlzaF9uaWNfcnEobmVzdm5pYyk7CkBAIC0xNzI4LDcgKzE3MzksNiBAQAogCQkJbmVzZGV2LT5pbnRfcmVxICY9IH5ORVNfSU5UX1RJTUVSOwogCQkJbmVzX3dyaXRlMzIobmVzZGV2LT5yZWdzK05FU19JTlRGX0lOVF9NQVNLLCB+KG5lc2Rldi0+aW50Zl9pbnRfcmVxKSk7CiAJCQluZXNfd3JpdGUzMihuZXNkZXYtPnJlZ3MrTkVTX0lOVF9NQVNLLCB+bmVzZGV2LT5pbnRfcmVxKTsKLQkJCW5lc2FkYXB0ZXItPnR1bmVfdGltZXIudGltZXJfaW5fdXNlX29sZCA9IDA7CiAJCX0KIAkJbmVzZGV2LT5kZWVwY3FfY291bnQgPSAwOwogCQlyZXR1cm4gMTsKQEAgLTE4NjcsNyArMTg3Nyw2IEBACiAJCQkJCW5lc2Rldi0+aW50X3JlcSAmPSB+TkVTX0lOVF9USU1FUjsKIAkJCQkJbmVzX3dyaXRlMzIobmVzZGV2LT5yZWdzICsgTkVTX0lOVEZfSU5UX01BU0ssIH4obmVzZGV2LT5pbnRmX2ludF9yZXEpKTsKIAkJCQkJbmVzX3dyaXRlMzIobmVzZGV2LT5yZWdzK05FU19JTlRfTUFTSywgfm5lc2Rldi0+aW50X3JlcSk7Ci0JCQkJCW5lc2Rldi0+bmVzYWRhcHRlci0+dHVuZV90aW1lci50aW1lcl9pbl91c2Vfb2xkID0gMDsKIAkJCQl9IGVsc2UgewogCQkJCQluZXNfd3JpdGUzMihuZXNkZXYtPnJlZ3MrTkVTX0lOVF9NQVNLLCAweDAwMDBmZmZmfCh+bmVzZGV2LT5pbnRfcmVxKSk7CiAJCQkJfQpAQCAtMTkxMiw3ICsxOTIxLDcgQEAKIC8qKgogICogbmVzX3Byb2Nlc3NfY2VxCiAgKi8KLXZvaWQgbmVzX3Byb2Nlc3NfY2VxKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfY2VxICpjZXEpCitzdGF0aWMgdm9pZCBuZXNfcHJvY2Vzc19jZXEoc3RydWN0IG5lc19kZXZpY2UgKm5lc2Rldiwgc3RydWN0IG5lc19od19jZXEgKmNlcSkKIHsKIAl1NjQgdTY0dGVtcDsKIAlzdHJ1Y3QgbmVzX2h3X2NxICpjcTsKQEAgLTE5NTIsNyArMTk2MSw3IEBACiAvKioKICAqIG5lc19wcm9jZXNzX2FlcQogICovCi12b2lkIG5lc19wcm9jZXNzX2FlcShzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCBzdHJ1Y3QgbmVzX2h3X2FlcSAqYWVxKQorc3RhdGljIHZvaWQgbmVzX3Byb2Nlc3NfYWVxKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfYWVxICphZXEpCiB7CiAvLwl1NjQgdTY0dGVtcDsKIAl1MzIgaGVhZDsKQEAgLTIwNjMsNyArMjA3Miw3IEBACiAvKioKICAqIG5lc19wcm9jZXNzX21hY19pbnRyCiAgKi8KLXZvaWQgbmVzX3Byb2Nlc3NfbWFjX2ludHIoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwgdTMyIG1hY19udW1iZXIpCitzdGF0aWMgdm9pZCBuZXNfcHJvY2Vzc19tYWNfaW50cihzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1MzIgbWFjX251bWJlcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBwY3NfY29udHJvbF9zdGF0dXM7CkBAIC0yMTY2LDcgKzIxNzUsNyBAQAogCQkJCXRlbXBfcGh5X2RhdGEgPSBwaHlfZGF0YTsKIAkJCX0gd2hpbGUgKDEpOwogCQkJbmVzX2RlYnVnKE5FU19EQkdfUEhZLCAiJXM6IFBoeSBkYXRhID0gMHglMDRYLCBsaW5rIHdhcyAlcy5cbiIsCi0JCQkJX19GVU5DVElPTl9fLCBwaHlfZGF0YSwgbmVzYWRhcHRlci0+bWFjX2xpbmtfZG93biA/ICJET1dOIiA6ICJVUCIpOworCQkJCV9fZnVuY19fLCBwaHlfZGF0YSwgbmVzYWRhcHRlci0+bWFjX2xpbmtfZG93biA/ICJET1dOIiA6ICJVUCIpOwogCiAJCX0gZWxzZSB7CiAJCQlwaHlfZGF0YSA9ICgweDBmMGYwMDAwID09IChwY3NfY29udHJvbF9zdGF0dXMgJiAweDBmMWYwMDAwKSkgPyA0IDogMDsKQEAgLTIyMDgsNyArMjIxNyw3IEBACiAKIAogCi12b2lkIG5lc19uaWNfbmFwaV9jZV9oYW5kbGVyKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfbmljX2NxICpjcSkKK3N0YXRpYyB2b2lkIG5lc19uaWNfbmFwaV9jZV9oYW5kbGVyKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfbmljX2NxICpjcSkKIHsKIAlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBuZXNfdm5pYywgbmljX2NxKTsKIApAQCAtMjQzMSw3ICsyNDQwLDcgQEAKIC8qKgogICogbmVzX2NxcF9jZV9oYW5kbGVyCiAgKi8KLXZvaWQgbmVzX2NxcF9jZV9oYW5kbGVyKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfY3EgKmNxKQorc3RhdGljIHZvaWQgbmVzX2NxcF9jZV9oYW5kbGVyKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfaHdfY3EgKmNxKQogewogCXU2NCB1NjR0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTcwLDcgKzI1NzksOCBAQAogLyoqCiAgKiBuZXNfcHJvY2Vzc19pd2FycF9hZXFlCiAgKi8KLXZvaWQgbmVzX3Byb2Nlc3NfaXdhcnBfYWVxZShzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCBzdHJ1Y3QgbmVzX2h3X2FlcWUgKmFlcWUpCitzdGF0aWMgdm9pZCBuZXNfcHJvY2Vzc19pd2FycF9hZXFlKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsCisJCQkJICAgc3RydWN0IG5lc19od19hZXFlICphZXFlKQogewogCXU2NCBjb250ZXh0OwogCXU2NCBhZXFlX2NvbnRleHQgPSAwOwpAQCAtMjgyMiw3ICsyODMyLDcgQEAKIAkJCQkJbGUzMl90b19jcHUoYWVxZS0+YWVxZV93b3Jkc1tORVNfQUVRRV9DT01QX1FQX0NRX0lEX0lEWF0pKTsKIAkJCWlmIChyZXNvdXJjZV9hbGxvY2F0ZWQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogUHJvY2Vzc2luZyBhbiBORVNfQUVRRV9BRUlEX0NRX09QRVJBVElPTl9FUlJPUiBldmVudCBvbiBDUSV1XG4iLAotCQkJCQkJX19GVU5DVElPTl9fLCBsZTMyX3RvX2NwdShhZXFlLT5hZXFlX3dvcmRzW05FU19BRVFFX0NPTVBfUVBfQ1FfSURfSURYXSkpOworCQkJCQkJX19mdW5jX18sIGxlMzJfdG9fY3B1KGFlcWUtPmFlcWVfd29yZHNbTkVTX0FFUUVfQ09NUF9RUF9DUV9JRF9JRFhdKSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfRERQX01FU1NBR0VfVE9PX0xPTkdfRk9SX0FWQUlMQUJMRV9CVUZGRVI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCAxZTEwZGY1Li5iN2UyODQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTk2Miw3ICs5NjIsNyBAQAogI2RlZmluZSBERUZBVUxUX0pVTUJPX05FU19RTF9MT1cgICAgMTIKICNkZWZpbmUgREVGQVVMVF9KVU1CT19ORVNfUUxfVEFSR0VUIDQwCiAjZGVmaW5lIERFRkFVTFRfSlVNQk9fTkVTX1FMX0hJR0ggICAxMjgKLSNkZWZpbmUgTkVTX05JQ19DUV9ET1dOV0FSRF9UUkVORCAgIDgKKyNkZWZpbmUgTkVTX05JQ19DUV9ET1dOV0FSRF9UUkVORCAgIDE2CiAKIHN0cnVjdCBuZXNfaHdfdHVuZV90aW1lciB7CiAgICAgLy91MTYgY3FfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCmluZGV4IGI2Y2MyNjUuLjAxY2QwZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCkBAIC05MiwxNSArOTIsNiBAQAogCQl8IE5FVElGX01TR19JRlVQIHwgTkVUSUZfTVNHX0lGRE9XTjsKIHN0YXRpYyBpbnQgZGVidWcgPSAtMTsKIAotCi1zdGF0aWMgaW50IG5lc19uZXRkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgbmVzX25ldGRldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBuZXNfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5lc19uZXRkZXZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgbmVzX25ldGRldl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBuZXNfbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopOwotc3RhdGljIGludCBuZXNfbmV0ZGV2X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKLQogLyoqCiAgKiBuZXNfbmV0ZGV2X3BvbGwKICAqLwpAQCAtMTQ4LDE0ICsxMzksMTUgQEAKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCWludCByZXQ7CiAJaW50IGk7Ci0Jc3RydWN0IG5lc192bmljICpmaXJzdF9uZXN2bmljOworCXN0cnVjdCBuZXNfdm5pYyAqZmlyc3RfbmVzdm5pYyA9IE5VTEw7CiAJdTMyIG5pY19hY3RpdmVfYml0OwogCXUzMiBuaWNfYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF90ZW1wOwogCiAJYXNzZXJ0KG5lc2RldiAhPSBOVUxMKTsKIAotCWZpcnN0X25lc3ZuaWMgPSBsaXN0X2VudHJ5KG5lc2Rldi0+bmVzYWRhcHRlci0+bmVzdm5pY19saXN0W25lc2Rldi0+bWFjX2luZGV4XS5uZXh0LAotCQkJc3RydWN0IG5lc192bmljLCBsaXN0KTsKKwlpZiAobmVzdm5pYy0+bmV0ZGV2X29wZW4gPT0gMSkKKwkJcmV0dXJuIDA7CiAKIAlpZiAobmV0aWZfbXNnX2lmdXAobmVzdm5pYykpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZW5hYmxpbmcgaW50ZXJmYWNlXG4iLCBuZXRkZXYtPm5hbWUpOwpAQCAtMjI1LDcgKzIxNywxOCBAQAogCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncytORVNfQ1FFX0FMTE9DLCBORVNfQ1FFX0FMTE9DX05PVElGWV9ORVhUIHwKIAkJCW5lc3ZuaWMtPm5pY19jcS5jcV9udW1iZXIpOwogCW5lc19yZWFkMzIobmVzZGV2LT5yZWdzK05FU19DUUVfQUxMT0MpOwotCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3RlbXAsICZuZXNkZXYtPm5lc2FkYXB0ZXItPm5lc3ZuaWNfbGlzdFtuZXNkZXYtPm1hY19pbmRleF0pIHsKKwkJZmlyc3RfbmVzdm5pYyA9IGNvbnRhaW5lcl9vZihsaXN0X3Bvcywgc3RydWN0IG5lc192bmljLCBsaXN0KTsKKwkJaWYgKGZpcnN0X25lc3ZuaWMtPm5ldGRldl9vcGVuID09IDEpCisJCQlicmVhazsKKwl9CisJaWYgKGZpcnN0X25lc3ZuaWMtPm5ldGRldl9vcGVuID09IDApIHsKKwkJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIlNldHRpbmcgdXAgTUFDIGludGVycnVwdCBtYXNrLlxuIik7CisJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfSU5UX01BU0sgKyAoMHgyMDAgKiBuZXNkZXYtPm1hY19pbmRleCksCisJCQkJfihORVNfTUFDX0lOVF9MSU5LX1NUQVRfQ0hHIHwgTkVTX01BQ19JTlRfWEdNSUlfRVhUIHwKKwkJCQlORVNfTUFDX0lOVF9UWF9VTkRFUkZMT1cgfCBORVNfTUFDX0lOVF9UWF9FUlJPUikpOworCQlmaXJzdF9uZXN2bmljID0gbmVzdm5pYzsKKwl9CiAJaWYgKGZpcnN0X25lc3ZuaWMtPmxpbmt1cCkgewogCQkvKiBFbmFibGUgbmV0d29yayBwYWNrZXRzICovCiAJCW5lc3ZuaWMtPmxpbmt1cCA9IDE7CkBAIC0yNDgsNiArMjUxLDggQEAKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCXUzMiBuaWNfYWN0aXZlX21hc2s7CiAJdTMyIG5pY19hY3RpdmU7CisJc3RydWN0IG5lc192bmljICpmaXJzdF9uZXN2bmljID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcywgKmxpc3RfdGVtcDsKIAogCW5lc19kZWJ1ZyhORVNfREJHX1NIVVRET1dOLCAibmVzdm5pYz0lcCwgbmVzZGV2PSVwLCBuZXRkZXY9JXAgJXNcbiIsCiAJCQluZXN2bmljLCBuZXNkZXYsIG5ldGRldiwgbmV0ZGV2LT5uYW1lKTsKQEAgLTI2MCw5ICsyNjUsMjAgQEAKIAkvKiBEaXNhYmxlIG5ldHdvcmsgcGFja2V0cyAqLwogCW5hcGlfZGlzYWJsZSgmbmVzdm5pYy0+bmFwaSk7CiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCWlmICgobmVzZGV2LT5uZXRkZXZbMF0gPT0gbmV0ZGV2KSAmIChuZXN2bmljLT5sb2dpY2FsX3BvcnQgPT0gbmVzZGV2LT5tYWNfaW5kZXgpKSB7Ci0JCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwKLQkJCQlORVNfSURYX01BQ19JTlRfTUFTSysoMHgyMDAqbmVzZGV2LT5tYWNfaW5kZXgpLCAweGZmZmZmZmZmKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9wb3MsIGxpc3RfdGVtcCwgJm5lc2Rldi0+bmVzYWRhcHRlci0+bmVzdm5pY19saXN0W25lc2Rldi0+bWFjX2luZGV4XSkgeworCQlmaXJzdF9uZXN2bmljID0gY29udGFpbmVyX29mKGxpc3RfcG9zLCBzdHJ1Y3QgbmVzX3ZuaWMsIGxpc3QpOworCQlpZiAoKGZpcnN0X25lc3ZuaWMtPm5ldGRldl9vcGVuID09IDEpICYmIChmaXJzdF9uZXN2bmljICE9IG5lc3ZuaWMpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGZpcnN0X25lc3ZuaWMtPm5ldGRldl9vcGVuID09IDApCisJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfSU5UX01BU0srKDB4MjAwKm5lc2Rldi0+bWFjX2luZGV4KSwgMHhmZmZmZmZmZik7CisJZWxzZSBpZiAoKGZpcnN0X25lc3ZuaWMgIT0gbmVzdm5pYykgJiYKKwkJIChQQ0lfRlVOQyhmaXJzdF9uZXN2bmljLT5uZXNkZXYtPnBjaWRldi0+ZGV2Zm4pICE9IFBDSV9GVU5DKG5lc3ZuaWMtPm5lc2Rldi0+cGNpZGV2LT5kZXZmbikpKSB7CisJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfSU5UX01BU0sgKyAoMHgyMDAgKiBuZXNkZXYtPm1hY19pbmRleCksIDB4ZmZmZmZmZmYpOworCQluZXNfd3JpdGVfaW5kZXhlZChmaXJzdF9uZXN2bmljLT5uZXNkZXYsIE5FU19JRFhfTUFDX0lOVF9NQVNLICsgKDB4MjAwICogZmlyc3RfbmVzdm5pYy0+bmVzZGV2LT5tYWNfaW5kZXgpLAorCQkJCX4oTkVTX01BQ19JTlRfTElOS19TVEFUX0NIRyB8IE5FU19NQUNfSU5UX1hHTUlJX0VYVCB8CisJCQkJTkVTX01BQ19JTlRfVFhfVU5ERVJGTE9XIHwgTkVTX01BQ19JTlRfVFhfRVJST1IpKTsKIAl9CiAKIAluaWNfYWN0aXZlX21hc2sgPSB+KCh1MzIpKDEgPDwgbmVzdm5pYy0+bmljX2luZGV4KSk7CkBAIC03NzcsNyArNzkzLDcgQEAKIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBtYWNfYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJcHJpbnRrKFBGWCAiJXM6IEFkZHJlc3MgbGVuZ3RoID0gJWQsIEFkZHJlc3MgPSAlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlguLlxuIiwKLQkJICAgX19GVU5DVElPTl9fLCBuZXRkZXYtPmFkZHJfbGVuLAorCQkgICBfX2Z1bmNfXywgbmV0ZGV2LT5hZGRyX2xlbiwKIAkJICAgbWFjX2FkZHItPnNhX2RhdGFbMF0sIG1hY19hZGRyLT5zYV9kYXRhWzFdLAogCQkgICBtYWNfYWRkci0+c2FfZGF0YVsyXSwgbWFjX2FkZHItPnNhX2RhdGFbM10sCiAJCSAgIG1hY19hZGRyLT5zYV9kYXRhWzRdLCBtYWNfYWRkci0+c2FfZGF0YVs1XSk7CkBAIC04MDcsNyArODIzLDcgQEAKIC8qKgogICogbmVzX25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QKICAqLwotdm9pZCBuZXNfbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHZvaWQgbmVzX25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7CkBAIC04NTksNyArODc1LDYgQEAKIAkJZm9yIChtY19pbmRleD0wOyBtY19pbmRleCA8IE5FU19NVUxUSUNBU1RfUEZfTUFYOyBtY19pbmRleCsrKSB7CiAJCQl3aGlsZSAobXVsdGljYXN0X2FkZHIgJiYgbmVzdm5pYy0+bWNycV9tY2FzdF9maWx0ZXIgJiYgKChtY19uaWNfaW5kZXggPSBuZXN2bmljLT5tY3JxX21jYXN0X2ZpbHRlcihuZXN2bmljLCBtdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHIpKSA9PSAwKSkKIAkJCQltdWx0aWNhc3RfYWRkciA9IG11bHRpY2FzdF9hZGRyLT5uZXh0OwotCiAJCQlpZiAobWNfbmljX2luZGV4IDwgMCkKIAkJCQltY19uaWNfaW5kZXggPSBuZXN2bmljLT5uaWNfaW5kZXg7CiAJCQlpZiAobXVsdGljYXN0X2FkZHIpIHsKQEAgLTkwOCw3ICs5MjMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5ldGRldi0+bXR1CT0gbmV3X210dTsKLQluZXN2bmljLT5tYXhfZnJhbWVfc2l6ZQk9IG5ld19tdHUrRVRIX0hMRU47CisJbmVzdm5pYy0+bWF4X2ZyYW1lX3NpemUJPSBuZXdfbXR1ICsgVkxBTl9FVEhfSExFTjsKIAogCWlmIChuZXRkZXYtPm10dQk+IDE1MDApCXsKIAkJanVtYm9tb2RlPTE7CkBAIC05MjMsMjggKzkzOCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi0vKioKLSAqIG5lc19uZXRkZXZfZXhpdCAtIGRlc3Ryb3kgbmV0d29yayBkZXZpY2UKLSAqLwotdm9pZCBuZXNfbmV0ZGV2X2V4aXQoc3RydWN0IG5lc192bmljICpuZXN2bmljKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXN2bmljLT5uZXRkZXY7Ci0Jc3RydWN0IG5lc19pYl9kZXZpY2UgKm5lc2liZGV2ID0gbmVzdm5pYy0+bmVzaWJkZXY7Ci0KLQluZXNfZGVidWcoTkVTX0RCR19TSFVURE9XTiwgIlxuIik7Ci0KLQkvLyBkZXN0cm95IHRoZSBpYmRldmljZSBpZiBSRE1BIGVuYWJsZWQKLQlpZiAoKG5lc3ZuaWMtPnJkbWFfZW5hYmxlZCkmJihuZXN2bmljLT5vZl9kZXZpY2VfcmVnaXN0ZXJlZCkpIHsKLQkJbmVzX2Rlc3Ryb3lfb2ZhX2RldmljZSggbmVzaWJkZXYgKTsKLQkJbmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQgPSAwOwotCQluZXN2bmljLT5uZXNpYmRldiA9IE5VTEw7Ci0JfQotCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0JbmVzX2RlYnVnKE5FU19EQkdfU0hVVERPV04sICJcbiIpOwotfQotCi0KICNkZWZpbmUgTkVTX0VUSFRPT0xfU1RBVF9DT1VOVCA1NQogc3RhdGljIGNvbnN0IGNoYXIgbmVzX2V0aHRvb2xfc3RyaW5nc2V0W05FU19FVEhUT09MX1NUQVRfQ09VTlRdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJIkxpbmsgQ2hhbmdlIEludGVycnVwdHMiLApAQCAtMTQ3MCwxMCArMTQ2MywxNSBAQAogewogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKKwlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CiAJdTMyIHUzMnRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOwogCW5lc3ZuaWMtPnZsYW5fZ3JwID0gZ3JwOwogCisJbmVzX2RlYnVnKE5FU19EQkdfTkVUREVWLCAiJXM6ICVzXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lKTsKKwogCS8qIEVuYWJsZS9EaXNhYmxlIFZMQU4gU3RyaXBwaW5nICovCiAJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX1BDSVhfRElBRyk7CiAJaWYgKGdycCkKQEAgLTE0ODIsNiArMTQ4MCw3IEBACiAJCXUzMnRlbXAJfD0gMHgwMjAwMDAwMDsKIAogCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9QQ0lYX0RJQUcsIHUzMnRlbXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBoeV9sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtMTU0MCw3ICsxNTM5LDcgQEAKIAluZXN2bmljLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIGRlZmF1bHRfbXNnKTsKIAluZXN2bmljLT5uZXRkZXZfaW5kZXggPSBuZXNkZXYtPm5ldGRldl9jb3VudDsKIAluZXN2bmljLT5wZXJmZWN0X2ZpbHRlcl9pbmRleCA9IG5lc2Rldi0+bmVzYWRhcHRlci0+bmV0ZGV2X2NvdW50OwotCW5lc3ZuaWMtPm1heF9mcmFtZV9zaXplID0gbmV0ZGV2LT5tdHUrbmV0ZGV2LT5oYXJkX2hlYWRlcl9sZW47CisJbmVzdm5pYy0+bWF4X2ZyYW1lX3NpemUgPSBuZXRkZXYtPm10dSArIG5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICsgVkxBTl9ITEVOOwogCiAJY3Vycl9xcF9tYXAgPSBuaWNfcXBfbWFwcGluZ19wZXJfZnVuY3Rpb25bUENJX0ZVTkMobmVzZGV2LT5wY2lkZXYtPmRldmZuKV07CiAJbmVzdm5pYy0+bmljLnFwX2lkID0gY3Vycl9xcF9tYXBbbmVzZGV2LT5uZXRkZXZfY291bnRdLnFwaWQ7CkBAIC0xNjEwLDcgKzE2MDksNyBAQAogCWxpc3RfYWRkX3RhaWwoJm5lc3ZuaWMtPmxpc3QsICZuZXNkZXYtPm5lc2FkYXB0ZXItPm5lc3ZuaWNfbGlzdFtuZXNkZXYtPm1hY19pbmRleF0pOwogCiAJaWYgKChuZXNkZXYtPm5ldGRldl9jb3VudCA9PSAwKSAmJgotCQkJKFBDSV9GVU5DKG5lc2Rldi0+cGNpZGV2LT5kZXZmbikgPT0gbmVzZGV2LT5tYWNfaW5kZXgpKSB7CisJICAgIChQQ0lfRlVOQyhuZXNkZXYtPnBjaWRldi0+ZGV2Zm4pID09IG5lc2Rldi0+bWFjX2luZGV4KSkgewogCQluZXNfZGVidWcoTkVTX0RCR19JTklULCAiU2V0dGluZyB1cCBQSFkgaW50ZXJydXB0IG1hc2suIFVzaW5nIHJlZ2lzdGVyIGluZGV4IDB4JTA0WFxuIiwKIAkJCQlORVNfSURYX1BIWV9QQ1NfQ09OVFJPTF9TVEFUVVMwKygweDIwMCoobmVzdm5pYy0+bG9naWNhbF9wb3J0JjEpKSk7CiAJCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9QSFlfUENTX0NPTlRST0xfU1RBVFVTMCArCkBAIC0xNjQ4LDE4ICsxNjQ3LDE0IEBACiAJCQkJbmVzdm5pYy0+bGlua3VwID0gMTsKIAkJCX0KIAkJfQotCQluZXNfZGVidWcoTkVTX0RCR19JTklULCAiU2V0dGluZyB1cCBNQUMgaW50ZXJydXB0IG1hc2suXG4iKTsKIAkJLyogY2xlYXIgdGhlIE1BQyBpbnRlcnJ1cHQgc3RhdHVzLCBhc3N1bWVzIGRpcmVjdCBsb2dpY2FsIHRvIHBoeXNpY2FsIG1hcHBpbmcgKi8KLQkJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19JTlRfU1RBVFVTKygweDIwMCpuZXN2bmljLT5sb2dpY2FsX3BvcnQpKTsKKwkJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19JTlRfU1RBVFVTICsgKDB4MjAwICogbmVzZGV2LT5tYWNfaW5kZXgpKTsKIAkJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIlBoeSBpbnRlcnJ1cHQgc3RhdHVzID0gMHglWC5cbiIsIHUzMnRlbXApOwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX0lOVF9TVEFUVVMrKDB4MjAwKm5lc3ZuaWMtPmxvZ2ljYWxfcG9ydCksIHUzMnRlbXApOworCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX0lOVF9TVEFUVVMgKyAoMHgyMDAgKiBuZXNkZXYtPm1hY19pbmRleCksIHUzMnRlbXApOwogCi0JCWlmIChuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV90eXBlW25lc3ZuaWMtPmxvZ2ljYWxfcG9ydF0gIT0gTkVTX1BIWV9UWVBFX0lSSVMpCisJCWlmIChuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV90eXBlW25lc2Rldi0+bWFjX2luZGV4XSAhPSBORVNfUEhZX1RZUEVfSVJJUykKIAkJCW5lc19pbml0X3BoeShuZXNkZXYpOwogCi0JCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfSU5UX01BU0srKDB4MjAwKm5lc3ZuaWMtPmxvZ2ljYWxfcG9ydCksCi0JCQkJfihORVNfTUFDX0lOVF9MSU5LX1NUQVRfQ0hHIHwgTkVTX01BQ19JTlRfWEdNSUlfRVhUIHwKLQkJCQlORVNfTUFDX0lOVF9UWF9VTkRFUkZMT1cgfCBORVNfTUFDX0lOVF9UWF9FUlJPUikpOwogCX0KIAogCXJldHVybiBuZXRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwppbmRleCBjNGVjNmFjLi5mOWRiMDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKQEAgLTU2Niw3ICs1NjYsNyBAQAogCQkJCWNxcF9yZXF1ZXN0KTsKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZWQgYSBDUVAgcmVxdWVzdC5cbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCiAJcmV0dXJuIGNxcF9yZXF1ZXN0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggZmZkNGI0Mi4uZjlhNWQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC00OSw2ICs0OSw3IEBACiBhdG9taWNfdCBxcHNfY3JlYXRlZDsKIGF0b21pY190IHN3X3Fwc19kZXN0cm95ZWQ7CiAKK3N0YXRpYyB2b2lkIG5lc191bnJlZ2lzdGVyX29mYV9kZXZpY2Uoc3RydWN0IG5lc19pYl9kZXZpY2UgKm5lc2liZGV2KTsKIAogLyoqCiAgKiBuZXNfYWxsb2NfbXcKQEAgLTkyOSw3ICs5MzAsNyBAQAogCQkJCU5FU19NQVhfVVNFUl9EQl9SRUdJT05TLCBuZXN1Y29udGV4dC0+Zmlyc3RfZnJlZV9kYik7CiAJCW5lc19kZWJ1ZyhORVNfREJHX1BELCAiZmluZF9maXJzdF96ZXJvX2JpdG9uIGRvb3JiZWxscyByZXR1cm5lZCAldSwgbWFwcGluZyBwZF9pZCAldS5cbiIsCiAJCQkJbmVzcGQtPm1tYXBfZGJfaW5kZXgsIG5lc3BkLT5wZF9pZCk7Ci0JCWlmIChuZXNwZC0+bW1hcF9kYl9pbmRleCA+IE5FU19NQVhfVVNFUl9EQl9SRUdJT05TKSB7CisJCWlmIChuZXNwZC0+bW1hcF9kYl9pbmRleCA+PSBORVNfTUFYX1VTRVJfREJfUkVHSU9OUykgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfUEQsICJtbWFwX2RiX2luZGV4ID4gTUFYXG4iKTsKIAkJCW5lc19mcmVlX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9wZHMsIHBkX251bSk7CiAJCQlrZnJlZShuZXNwZCk7CkBAIC0xMDQzLDEwICsxMDQ0LDEwIEBACiAJdTggc3FfcGJsX2VudHJpZXM7CiAKIAlwYmxfZW50cmllcyA9IG5lc3BibC0+cGJsX3NpemUgPj4gMzsKLQluZXNfZGVidWcoTkVTX0RCR19RUCwgIlVzZXJzcGFjZSBQQkwsIHBibF9zaXplPSV1LCBwYmxfZW50cmllcyA9ICVkIHBibF92YmFzZT0lcCwgcGJsX3BiYXNlPSVwXG4iLAorCW5lc19kZWJ1ZyhORVNfREJHX1FQLCAiVXNlcnNwYWNlIFBCTCwgcGJsX3NpemU9JXUsIHBibF9lbnRyaWVzID0gJWQgcGJsX3ZiYXNlPSVwLCBwYmxfcGJhc2U9JWx4XG4iLAogCQkJbmVzcGJsLT5wYmxfc2l6ZSwgcGJsX2VudHJpZXMsCiAJCQkodm9pZCAqKW5lc3BibC0+cGJsX3ZiYXNlLAotCQkJKHZvaWQgKiluZXNwYmwtPnBibF9wYmFzZSk7CisJCQkodW5zaWduZWQgbG9uZykgbmVzcGJsLT5wYmxfcGJhc2UpOwogCXBibCA9IChfX2xlNjQgKikgbmVzcGJsLT5wYmxfdmJhc2U7IC8qIHBvaW50cyB0byBmaXJzdCBwYmwgZW50cnkgKi8KIAkvKiBub3cgbGV0cyBzZXQgdGhlIHNxX3ZiYXNlIGFzIHdlbGwgYXMgcnFfdmJhc2UgYWRkcnMgd2Ugd2lsbCBhc3NpZ24gKi8KIAkvKiB0aGUgZmlyc3QgcGJsIHRvIGJlIGZybyB0aGUgcnFfdmJhc2UuLi4gKi8KQEAgLTEwNzQsOSArMTA3NSw5IEBACiAJLyogbmVzcXAtPmh3cXAucnFfdmJhc2UgPSBidXNfdG9fdmlydCgqcGJsKTsgKi8KIAkvKm5lc3FwLT5od3FwLnJxX3ZiYXNlID0gcGh5c190b192aXJ0KCpwYmwpOyAqLwogCi0JbmVzX2RlYnVnKE5FU19EQkdfUVAsICJRUCBzcV92YmFzZT0gJXAgc3FfcGJhc2U9JXAgcnFfdmJhc2U9JXAgcnFfcGJhc2U9JXBcbiIsCi0JCQluZXNxcC0+aHdxcC5zcV92YmFzZSwgKHZvaWQgKiluZXNxcC0+aHdxcC5zcV9wYmFzZSwKLQkJCW5lc3FwLT5od3FwLnJxX3ZiYXNlLCAodm9pZCAqKW5lc3FwLT5od3FwLnJxX3BiYXNlKTsKKwluZXNfZGVidWcoTkVTX0RCR19RUCwgIlFQIHNxX3ZiYXNlPSAlcCBzcV9wYmFzZT0lbHggcnFfdmJhc2U9JXAgcnFfcGJhc2U9JWx4XG4iLAorCQkgIG5lc3FwLT5od3FwLnNxX3ZiYXNlLCAodW5zaWduZWQgbG9uZykgbmVzcXAtPmh3cXAuc3FfcGJhc2UsCisJCSAgbmVzcXAtPmh3cXAucnFfdmJhc2UsICh1bnNpZ25lZCBsb25nKSBuZXNxcC0+aHdxcC5ycV9wYmFzZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJaWYgKCFuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCBuZXNwYmwtPnBibF9zaXplLCBuZXNwYmwtPnBibF92YmFzZSwKQEAgLTEyNTEsNiArMTI1Miw5IEBACiAJdTggcnFfZW5jb2RlZF9zaXplOwogCS8qIGludCBjb3VudGVyOyAqLwogCisJaWYgKGluaXRfYXR0ci0+Y3JlYXRlX2ZsYWdzKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwogCWF0b21pY19pbmMoJnFwc19jcmVhdGVkKTsKIAlzd2l0Y2ggKGluaXRfYXR0ci0+cXBfdHlwZSkgewogCQljYXNlIElCX1FQVF9SQzoKQEAgLTEzMjcsNyArMTMzMSw3IEBACiAJCQkJCQkJCSAgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpcmVxLnVzZXJfd3FlX2J1ZmZlcnMpOwogCQkJCQkJCW5lc19mcmVlX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9xcHMsIHFwX251bSk7CiAJCQkJCQkJa2ZyZWUobmVzcXAtPmFsbG9jYXRlZF9idWZmZXIpOwotCQkJCQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQkJCQkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCQkJCQkJfQogCQkJCQl9CiAKQEAgLTEzMzcsNyArMTM0MSw3IEBACiAJCQkJCQkJCSAgIE5FU19NQVhfVVNFUl9XUV9SRUdJT05TLCBuZXNfdWNvbnRleHQtPmZpcnN0X2ZyZWVfd3EpOwogCQkJCQkvKiBuZXNfZGVidWcoTkVTX0RCR19RUCwgImZpbmRfZmlyc3RfemVyb19iaXRvbiB3cXMgcmV0dXJuZWQgJXVcbiIsCiAJCQkJCQkJbmVzcGQtPm1tYXBfZGJfaW5kZXgpOyAqLwotCQkJCQlpZiAobmVzcXAtPm1tYXBfc3FfZGJfaW5kZXggPiBORVNfTUFYX1VTRVJfV1FfUkVHSU9OUykgeworCQkJCQlpZiAobmVzcXAtPm1tYXBfc3FfZGJfaW5kZXggPj0gTkVTX01BWF9VU0VSX1dRX1JFR0lPTlMpIHsKIAkJCQkJCW5lc19kZWJ1ZyhORVNfREJHX1FQLAogCQkJCQkJCSAgImRiIGluZGV4ID4gbWF4IHVzZXIgcmVnaW9ucywgZmFpbGluZyBjcmVhdGUgUVBcbiIpOwogCQkJCQkJbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX3FwcywgcXBfbnVtKTsKQEAgLTE2NzQsNiArMTY3OCw3IEBACiAJCX0KIAkJbmVzX2RlYnVnKE5FU19EQkdfQ1EsICJDUSBWaXJ0dWFsIEFkZHJlc3MgPSAlMDhsWCwgc2l6ZSA9ICV1LlxuIiwKIAkJCQkodW5zaWduZWQgbG9uZylyZXEudXNlcl9jcV9idWZmZXIsIGVudHJpZXMpOworCQllcnIgPSAxOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5lc3BibCwgJm5lc191Y29udGV4dC0+Y3FfcmVnX21lbV9saXN0LCBsaXN0KSB7CiAJCQlpZiAobmVzcGJsLT51c2VyX2Jhc2UgPT0gKHVuc2lnbmVkIGxvbmcgKXJlcS51c2VyX2NxX2J1ZmZlcikgewogCQkJCWxpc3RfZGVsKCZuZXNwYmwtPmxpc3QpOwpAQCAtMTY4Niw3ICsxNjkxLDcgQEAKIAkJaWYgKGVycikgewogCQkJbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX2NxcywgY3FfbnVtKTsKIAkJCWtmcmVlKG5lc2NxKTsKLQkJCXJldHVybiBFUlJfUFRSKGVycik7CisJCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKIAkJfQogCiAJCXBibF9lbnRyaWVzID0gbmVzcGJsLT5wYmxfc2l6ZSA+PiAzOwpAQCAtMTgzMSw5ICsxODM2LDYgQEAKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNkZXYtPmNxcC5sb2NrLCBmbGFncyk7CiAJCQl9CiAJCX0KLQkJbmVzX2RlYnVnKE5FU19EQkdfQ1EsICJpV0FSUCBDUSV1IGNyZWF0ZSB0aW1lb3V0IGV4cGlyZWQsIG1ham9yIGNvZGUgPSAweCUwNFgsIgotCQkJCSIgbWlub3IgY29kZSA9IDB4JTA0WFxuIiwKLQkJCQluZXNjcS0+aHdfY3EuY3FfbnVtYmVyLCBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZSwgY3FwX3JlcXVlc3QtPm1pbm9yX2NvZGUpOwogCQlpZiAoIWNvbnRleHQpCiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCBuZXNjcS0+Y3FfbWVtX3NpemUsIG1lbSwKIAkJCQkJbmVzY3EtPmh3X2NxLmNxX3BiYXNlKTsKQEAgLTE5MTAsMTMgKzE5MTIsMTMgQEAKIAkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwrKzsKIAkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsID4gbmVzYWRhcHRlci0+bWF4XzI1NnBibCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGZyZWUgMjU2QiBQQkxzKCV1KSBoYXMgZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwsIG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpOworCQkJCQlfX2Z1bmNfXywgbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwsIG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpOwogCQl9CiAJfSBlbHNlIGlmIChuZXNjcS0+dmlydHVhbF9jcSA9PSAyKSB7CiAJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwrKzsKIAkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBmcmVlIDRLIFBCTHMoJXUpIGhhcyBleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKLQkJCQkJX19GVU5DVElPTl9fLCBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsLCBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpOworCQkJCQlfX2Z1bmNfXywgbmVzYWRhcHRlci0+ZnJlZV80a3BibCwgbmVzYWRhcHRlci0+bWF4XzRrcGJsKTsKIAkJfQogCQlvcGNvZGUgfD0gTkVTX0NRUF9DUV80S0JfQ0hVTks7CiAJfQpAQCAtMjY1NSwxMCArMjY1NywxMCBAQAogCiAJCQluZXNwYmwtPnBibF92YmFzZSA9ICh1NjQgKilwYmw7CiAJCQluZXNwYmwtPnVzZXJfYmFzZSA9IHN0YXJ0OwotCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJBbGxvY2F0ZWQgUEJMIG1lbW9yeSwgJXUgYnl0ZXMsIHBibF9wYmFzZT0lcCwiCisJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIkFsbG9jYXRlZCBQQkwgbWVtb3J5LCAldSBieXRlcywgcGJsX3BiYXNlPSVseCwiCiAJCQkJCSIgcGJsX3ZiYXNlPSVwIHVzZXJfYmFzZT0weCVseFxuIiwKLQkJCQkJbmVzcGJsLT5wYmxfc2l6ZSwgKHZvaWQgKiluZXNwYmwtPnBibF9wYmFzZSwKLQkJCQkJKHZvaWQqKW5lc3BibC0+cGJsX3ZiYXNlLCBuZXNwYmwtPnVzZXJfYmFzZSk7CisJCQkJICBuZXNwYmwtPnBibF9zaXplLCAodW5zaWduZWQgbG9uZykgbmVzcGJsLT5wYmxfcGJhc2UsCisJCQkJICAodm9pZCAqKSBuZXNwYmwtPnBibF92YmFzZSwgbmVzcGJsLT51c2VyX2Jhc2UpOwogCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KSB7CiAJCQkJZm9yIChubWFwX2luZGV4ID0gMDsgbm1hcF9pbmRleCA8IGNodW5rLT5ubWFwOyArK25tYXBfaW5kZXgpIHsKQEAgLTI3OTgsMTAgKzI4MDAsMTEgQEAKIC8qKgogICogc2hvd19yZXYKICAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19yZXYoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19yZXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbmVzX2liX2RldmljZSAqbmVzaWJkZXYgPQotCQkJY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBuZXNfaWJfZGV2aWNlLCBpYmRldi5jbGFzc19kZXYpOworCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5lc19pYl9kZXZpY2UsIGliZGV2LmRldik7CiAJc3RydWN0IG5lc192bmljICpuZXN2bmljID0gbmVzaWJkZXYtPm5lc3ZuaWM7CiAKIAluZXNfZGVidWcoTkVTX0RCR19JTklULCAiXG4iKTsKQEAgLTI4MTIsMTAgKzI4MTUsMTEgQEAKIC8qKgogICogc2hvd19md192ZXIKICAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19md192ZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19md192ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbmVzX2liX2RldmljZSAqbmVzaWJkZXYgPQotCQkJY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBuZXNfaWJfZGV2aWNlLCBpYmRldi5jbGFzc19kZXYpOworCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5lc19pYl9kZXZpY2UsIGliZGV2LmRldik7CiAJc3RydWN0IG5lc192bmljICpuZXN2bmljID0gbmVzaWJkZXYtPm5lc3ZuaWM7CiAKIAluZXNfZGVidWcoTkVTX0RCR19JTklULCAiXG4iKTsKQEAgLTI4MjksNyArMjgzMyw4IEBACiAvKioKICAqIHNob3dfaGNhCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICAgY2hhciAqYnVmKQogewogCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJcbiIpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIk5FUzAyMFxuIik7CkBAIC0yODM5LDIzICsyODQ0LDI0IEBACiAvKioKICAqIHNob3dfYm9hcmQKICAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19ib2FyZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2JvYXJkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKIHsKIAluZXNfZGVidWcoTkVTX0RCR19JTklULCAiXG4iKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlLipzXG4iLCAzMiwgIk5FUzAyMCBCb2FyZCBJRCIpOwogfQogCiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihod19yZXYsIFNfSVJVR08sIHNob3dfcmV2LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihmd192ZXIsIFNfSVJVR08sIHNob3dfZndfdmVyLCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihoY2FfdHlwZSwgU19JUlVHTywgc2hvd19oY2EsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJvYXJkX2lkLCBTX0lSVUdPLCBzaG93X2JvYXJkLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihod19yZXYsIFNfSVJVR08sIHNob3dfcmV2LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmd192ZXIsIFNfSVJVR08sIHNob3dfZndfdmVyLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihoY2FfdHlwZSwgU19JUlVHTywgc2hvd19oY2EsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX2lkLCBTX0lSVUdPLCBzaG93X2JvYXJkLCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpuZXNfY2xhc3NfYXR0cmlidXRlc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9od19yZXYsCi0JJmNsYXNzX2RldmljZV9hdHRyX2Z3X3ZlciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaGNhX3R5cGUsCi0JJmNsYXNzX2RldmljZV9hdHRyX2JvYXJkX2lkCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm5lc19kZXZfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9od19yZXYsCisJJmRldl9hdHRyX2Z3X3ZlciwKKwkmZGV2X2F0dHJfaGNhX3R5cGUsCisJJmRldl9hdHRyX2JvYXJkX2lkCiB9OwogCiAKQEAgLTM3ODAsNyArMzc4Niw3IEBACiAJbmVzaWJkZXYtPmliZGV2LnBoeXNfcG9ydF9jbnQgPSAxOwogCW5lc2liZGV2LT5pYmRldi5udW1fY29tcF92ZWN0b3JzID0gMTsKIAluZXNpYmRldi0+aWJkZXYuZG1hX2RldmljZSA9ICZuZXNkZXYtPnBjaWRldi0+ZGV2OwotCW5lc2liZGV2LT5pYmRldi5jbGFzc19kZXYuZGV2ID0gJm5lc2Rldi0+cGNpZGV2LT5kZXY7CisJbmVzaWJkZXYtPmliZGV2LmRldi5wYXJlbnQgPSAmbmVzZGV2LT5wY2lkZXYtPmRldjsKIAluZXNpYmRldi0+aWJkZXYucXVlcnlfZGV2aWNlID0gbmVzX3F1ZXJ5X2RldmljZTsKIAluZXNpYmRldi0+aWJkZXYucXVlcnlfcG9ydCA9IG5lc19xdWVyeV9wb3J0OwogCW5lc2liZGV2LT5pYmRldi5tb2RpZnlfcG9ydCA9IG5lc19tb2RpZnlfcG9ydDsKQEAgLTM4NzUsMTMgKzM4ODEsMTMgQEAKIAluZXNpYmRldi0+bWF4X3FwID0gKG5lc2FkYXB0ZXItPm1heF9xcC1ORVNfRklSU1RfUVBOKSAvIG5lc2FkYXB0ZXItPnBvcnRfY291bnQ7CiAJbmVzaWJkZXYtPm1heF9wZCA9IG5lc2FkYXB0ZXItPm1heF9wZCAvIG5lc2FkYXB0ZXItPnBvcnRfY291bnQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuZXNfY2xhc3NfYXR0cmlidXRlcyk7ICsraSkgewotCQlyZXQgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJm5lc2liZGV2LT5pYmRldi5jbGFzc19kZXYsIG5lc19jbGFzc19hdHRyaWJ1dGVzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuZXNfZGV2X2F0dHJpYnV0ZXMpOyArK2kpIHsKKwkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXNpYmRldi0+aWJkZXYuZGV2LCBuZXNfZGV2X2F0dHJpYnV0ZXNbaV0pOwogCQlpZiAocmV0KSB7CiAJCQl3aGlsZSAoaSA+IDApIHsKIAkJCQlpLS07Ci0JCQkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZuZXNpYmRldi0+aWJkZXYuY2xhc3NfZGV2LAotCQkJCQkJbmVzX2NsYXNzX2F0dHJpYnV0ZXNbaV0pOworCQkJCWRldmljZV9yZW1vdmVfZmlsZSgmbmVzaWJkZXYtPmliZGV2LmRldiwKKwkJCQkJCSAgIG5lc19kZXZfYXR0cmlidXRlc1tpXSk7CiAJCQl9CiAJCQlpYl91bnJlZ2lzdGVyX2RldmljZSgmbmVzaWJkZXYtPmliZGV2KTsKIAkJCXJldHVybiByZXQ7CkBAIC0zODk3LDE2ICszOTAzLDEzIEBACiAvKioKICAqIG5lc191bnJlZ2lzdGVyX29mYV9kZXZpY2UKICAqLwotdm9pZCBuZXNfdW5yZWdpc3Rlcl9vZmFfZGV2aWNlKHN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldikKK3N0YXRpYyB2b2lkIG5lc191bnJlZ2lzdGVyX29mYV9kZXZpY2Uoc3RydWN0IG5lc19pYl9kZXZpY2UgKm5lc2liZGV2KQogewogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IG5lc2liZGV2LT5uZXN2bmljOwogCWludCBpOwogCi0JaWYgKG5lc2liZGV2ID09IE5VTEwpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5lc19jbGFzc19hdHRyaWJ1dGVzKTsgKytpKSB7Ci0JCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmbmVzaWJkZXYtPmliZGV2LmNsYXNzX2RldiwgbmVzX2NsYXNzX2F0dHJpYnV0ZXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5lc19kZXZfYXR0cmlidXRlcyk7ICsraSkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5lc2liZGV2LT5pYmRldi5kZXYsIG5lc19kZXZfYXR0cmlidXRlc1tpXSk7CiAJfQogCiAJaWYgKG5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9NYWtlZmlsZQppbmRleCA5OGVlMzhlLi4zMDkwMTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvTWFrZWZpbGUKQEAgLTQsNyArNCw4IEBACiAJCQkJCQkgICBpcG9pYl9pYi5vIFwKIAkJCQkJCSAgIGlwb2liX211bHRpY2FzdC5vIFwKIAkJCQkJCSAgIGlwb2liX3ZlcmJzLm8gXAotCQkJCQkJICAgaXBvaWJfdmxhbi5vCisJCQkJCQkgICBpcG9pYl92bGFuLm8gXAorCQkJCQkJICAgaXBvaWJfZXRodG9vbC5vCiBpYl9pcG9pYi0kKENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNKQkJKz0gaXBvaWJfY20ubwogaWJfaXBvaWItJChDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRykJKz0gaXBvaWJfZnMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKaW5kZXggMDU0ZmFiOC4uNzNiMmIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaApAQCAtODcsNiArODcsNyBAQAogCUlQT0lCX01DQVNUX1NUQVJURUQJICA9IDgsCiAJSVBPSUJfRkxBR19BRE1JTl9DTQkgID0gOSwKIAlJUE9JQl9GTEFHX1VNQ0FTVAkgID0gMTAsCisJSVBPSUJfRkxBR19DU1VNCQkgID0gMTEsCiAKIAlJUE9JQl9NQVhfQkFDS09GRl9TRUNPTkRTID0gMTYsCiAKQEAgLTI0MSw2ICsyNDIsMTEgQEAKIAlpbnQJCQludW1fZnJhZ3M7CiB9OwogCitzdHJ1Y3QgaXBvaWJfZXRodG9vbF9zdCB7CisJdTE2ICAgICBjb2FsZXNjZV91c2VjczsKKwl1MTYgICAgIG1heF9jb2FsZXNjZWRfZnJhbWVzOworfTsKKwogLyoKICAqIERldmljZSBwcml2YXRlIGxvY2tpbmc6IHR4X2xvY2sgcHJvdGVjdHMgbWVtYmVycyB1c2VkIGluIFRYIGZhc3QKICAqIHBhdGggKGFuZCB3ZSB1c2UgTExUWCBzbyB1cHBlciBsYXllcnMgZG9uJ3QgZG8gZXh0cmEgbG9ja2luZykuCkBAIC0zMTgsNiArMzI0LDggQEAKIAlzdHJ1Y3QgZGVudHJ5ICptY2dfZGVudHJ5OwogCXN0cnVjdCBkZW50cnkgKnBhdGhfZGVudHJ5OwogI2VuZGlmCisJaW50CWhjYV9jYXBzOworCXN0cnVjdCBpcG9pYl9ldGh0b29sX3N0IGV0aHRvb2w7CiB9OwogCiBzdHJ1Y3QgaXBvaWJfYWggewpAQCAtNDU4LDYgKzQ2Niw4IEBACiBpbnQgaXBvaWJfcGtleV9kZXZfZGVsYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgaXBvaWJfZHJhaW5fY3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKK3ZvaWQgaXBvaWJfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCiAjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00KIAogI2RlZmluZSBJUE9JQl9GTEFHU19SQwkJMHg4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IDdkZDJlYzQuLjlkYjdiMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiaXBvaWIuaCIKIApAQCAtNjM3LDYgKzYzOCw3IEBACiAJcHJpdi0+dHhfc2dlWzBdLmFkZHIgICAgICAgICAgPSBhZGRyOwogCXByaXYtPnR4X3NnZVswXS5sZW5ndGggICAgICAgID0gbGVuOwogCisJcHJpdi0+dHhfd3IubnVtX3NnZQk9IDE7CiAJcHJpdi0+dHhfd3Iud3JfaWQJPSB3cl9pZCB8IElQT0lCX09QX0NNOwogCiAJcmV0dXJuIGliX3Bvc3Rfc2VuZCh0eC0+cXAsICZwcml2LT50eF93ciwgJmJhZF93cik7CkBAIC04MjQsNyArODI2LDYgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcG9pYl9jbV9yeCAqcDsKIAl1bnNpZ25lZCBsb25nIGJlZ2luOwotCUxJU1RfSEVBRChsaXN0KTsKIAlpbnQgcmV0OwogCiAJaWYgKCFJUE9JQl9DTV9TVVBQT1JURUQoZGV2LT5kZXZfYWRkcikgfHwgIXByaXYtPmNtLmlkKQpAQCAtODU3LDkgKzg1OCwxMiBAQAogCQkJLyoKIAkJCSAqIGFzc3VtZSB0aGUgSFcgaXMgd2VkZ2VkIGFuZCBqdXN0IGZyZWUgdXAgZXZlcnl0aGluZy4KIAkJCSAqLwotCQkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+Y20ucnhfZmx1c2hfbGlzdCwgJmxpc3QpOwotCQkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+Y20ucnhfZXJyb3JfbGlzdCwgJmxpc3QpOwotCQkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+Y20ucnhfZHJhaW5fbGlzdCwgJmxpc3QpOworCQkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+Y20ucnhfZmx1c2hfbGlzdCwKKwkJCQkJICZwcml2LT5jbS5yeF9yZWFwX2xpc3QpOworCQkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+Y20ucnhfZXJyb3JfbGlzdCwKKwkJCQkJICZwcml2LT5jbS5yeF9yZWFwX2xpc3QpOworCQkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+Y20ucnhfZHJhaW5fbGlzdCwKKwkJCQkJICZwcml2LT5jbS5yeF9yZWFwX2xpc3QpOwogCQkJYnJlYWs7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKQEAgLTEwMDMsOSArMTAwNyw5IEBACiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOwogCWludCBxcF9hdHRyX21hc2ssIHJldDsKLQlyZXQgPSBpYl9maW5kX2NhY2hlZF9wa2V5KHByaXYtPmNhLCBwcml2LT5wb3J0LCBwcml2LT5wa2V5LCAmcXBfYXR0ci5wa2V5X2luZGV4KTsKKwlyZXQgPSBpYl9maW5kX3BrZXkocHJpdi0+Y2EsIHByaXYtPnBvcnQsIHByaXYtPnBrZXksICZxcF9hdHRyLnBrZXlfaW5kZXgpOwogCWlmIChyZXQpIHsKLQkJaXBvaWJfd2Fybihwcml2LCAicGtleSAweCV4IG5vdCBpbiBjYWNoZTogJWRcbiIsIHByaXYtPnBrZXksIHJldCk7CisJCWlwb2liX3dhcm4ocHJpdiwgInBrZXkgMHgleCBub3QgZm91bmQ6ICVkXG4iLCBwcml2LT5wa2V5LCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTAyOCwxMyArMTAzMiwxMyBAQAogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHAtPmRldik7CiAJaW50IHJldDsKIAotCXAtPnR4X3JpbmcgPSBremFsbG9jKGlwb2liX3NlbmRxX3NpemUgKiBzaXplb2YgKnAtPnR4X3JpbmcsCi0JCQkJR0ZQX0tFUk5FTCk7CisJcC0+dHhfcmluZyA9IHZtYWxsb2MoaXBvaWJfc2VuZHFfc2l6ZSAqIHNpemVvZiAqcC0+dHhfcmluZyk7CiAJaWYgKCFwLT50eF9yaW5nKSB7CiAJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSB0eCByaW5nXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfdHg7CiAJfQorCW1lbXNldChwLT50eF9yaW5nLCAwLCBpcG9pYl9zZW5kcV9zaXplICogc2l6ZW9mICpwLT50eF9yaW5nKTsKIAogCXAtPnFwID0gaXBvaWJfY21fY3JlYXRlX3R4X3FwKHAtPmRldiwgcCk7CiAJaWYgKElTX0VSUihwLT5xcCkpIHsKQEAgLTEwNzUsNiArMTA3OSw3IEBACiAJaWJfZGVzdHJveV9xcChwLT5xcCk7CiBlcnJfcXA6CiAJcC0+cXAgPSBOVUxMOworCXZmcmVlKHAtPnR4X3JpbmcpOwogZXJyX3R4OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMTI1LDcgKzExMzAsNyBAQAogCWlmIChwLT5xcCkKIAkJaWJfZGVzdHJveV9xcChwLT5xcCk7CiAKLQlrZnJlZShwLT50eF9yaW5nKTsKKwl2ZnJlZShwLT50eF9yaW5nKTsKIAlrZnJlZShwKTsKIH0KIApAQCAtMTM3OCw2ICsxMzgzLDEwIEBACiAJCXNldF9iaXQoSVBPSUJfRkxBR19BRE1JTl9DTSwgJnByaXYtPmZsYWdzKTsKIAkJaXBvaWJfd2Fybihwcml2LCAiZW5hYmxpbmcgY29ubmVjdGVkIG1vZGUgIgogCQkJICAgIndpbGwgY2F1c2UgbXVsdGljYXN0IHBhY2tldCBkcm9wc1xuIik7CisKKwkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyk7CisJCXByaXYtPnR4X3dyLnNlbmRfZmxhZ3MgJj0gfklCX1NFTkRfSVBfQ1NVTTsKKwogCQlpcG9pYl9mbHVzaF9wYXRocyhkZXYpOwogCQlyZXR1cm4gY291bnQ7CiAJfQpAQCAtMTM4Niw2ICsxMzk1LDEzIEBACiAJCWNsZWFyX2JpdChJUE9JQl9GTEFHX0FETUlOX0NNLCAmcHJpdi0+ZmxhZ3MpOwogCQlkZXYtPm10dSA9IG1pbihwcml2LT5tY2FzdF9tdHUsIGRldi0+bXR1KTsKIAkJaXBvaWJfZmx1c2hfcGF0aHMoZGV2KTsKKworCQlpZiAodGVzdF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpKSB7CisJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0c7CisJCQlpZiAocHJpdi0+aGNhX2NhcHMgJiBJQl9ERVZJQ0VfVURfVFNPKQorCQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJCX0KKwogCQlyZXR1cm4gY291bnQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDc0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlICJpcG9pYi5oIgorCitzdGF0aWMgdm9pZCBpcG9pYl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgImlwb2liIiwgc2l6ZW9mKGRydmluZm8tPmRyaXZlcikgLSAxKTsKK30KKworc3RhdGljIGludCBpcG9pYl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwljb2FsLT5yeF9jb2FsZXNjZV91c2VjcyA9IHByaXYtPmV0aHRvb2wuY29hbGVzY2VfdXNlY3M7CisJY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgPSBwcml2LT5ldGh0b29sLmNvYWxlc2NlX3VzZWNzOworCWNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gcHJpdi0+ZXRodG9vbC5tYXhfY29hbGVzY2VkX2ZyYW1lczsKKwljb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IHByaXYtPmV0aHRvb2wubWF4X2NvYWxlc2NlZF9mcmFtZXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcG9pYl9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKworCS8qCisJICogU2luY2UgSVBvSUIgdXNlcyBhIHNpbmdsZSBDUSBmb3IgYm90aCByeCBhbmQgdHgsIHdlIGFzc3VtZQorCSAqIHRoYXQgcnggcGFyYW1zIGRpY3RhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBUaGVzZSB2YWx1ZXMgYXJlCisJICogc2F2ZWQgaW4gdGhlIHByaXZhdGUgZGF0YSBhbmQgcmV0dXJuZWQgd2hlbiBpcG9pYl9nZXRfY29hbGVzY2UoKQorCSAqIGlzIGNhbGxlZC4KKwkgKi8KKwlpZiAoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgICAgICAgPiAweGZmZmYgfHwKKwkgICAgY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaWJfbW9kaWZ5X2NxKHByaXYtPmNxLCBjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcywKKwkJCSAgIGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PU1lTKSB7CisJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCBtb2RpZnlpbmcgQ1EgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb2FsLT50eF9jb2FsZXNjZV91c2VjcyAgICAgICA9IGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOworCWNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisJcHJpdi0+ZXRodG9vbC5jb2FsZXNjZV91c2VjcyAgICAgICA9IGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOworCXByaXYtPmV0aHRvb2wubWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlwb2liX2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbwkJPSBpcG9pYl9nZXRfZHJ2aW5mbywKKwkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCisJLmdldF9jb2FsZXNjZQkJPSBpcG9pYl9nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZQkJPSBpcG9pYl9zZXRfY29hbGVzY2UsCit9OworCit2b2lkIGlwb2liX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhkZXYsICZpcG9pYl9ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggMDhjNDM5Ni4uMDIwNWViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KIAogI2luY2x1ZGUgImlwb2liLmgiCiAKQEAgLTIzMSw2ICsyMzMsMTAgQEAKIAlza2ItPmRldiA9IGRldjsKIAkvKiBYWFggZ2V0IGNvcnJlY3QgUEFDS0VUXyB0eXBlIGhlcmUgKi8KIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisKKwlpZiAodGVzdF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpICYmIGxpa2VseSh3Yy0+Y3N1bV9vaykpCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiByZXBvc3Q6CkBAIC0yNDUsMjkgKzI1MSwzNyBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSB0eF9yZXEtPnNrYjsKIAl1NjQgKm1hcHBpbmcgPSB0eF9yZXEtPm1hcHBpbmc7CiAJaW50IGk7CisJaW50IG9mZjsKIAotCW1hcHBpbmdbMF0gPSBpYl9kbWFfbWFwX3NpbmdsZShjYSwgc2tiLT5kYXRhLCBza2JfaGVhZGxlbihza2IpLAotCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKLQlpZiAodW5saWtlbHkoaWJfZG1hX21hcHBpbmdfZXJyb3IoY2EsIG1hcHBpbmdbMF0pKSkKLQkJcmV0dXJuIC1FSU87CisJaWYgKHNrYl9oZWFkbGVuKHNrYikpIHsKKwkJbWFwcGluZ1swXSA9IGliX2RtYV9tYXBfc2luZ2xlKGNhLCBza2ItPmRhdGEsIHNrYl9oZWFkbGVuKHNrYiksCisJCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVubGlrZWx5KGliX2RtYV9tYXBwaW5nX2Vycm9yKGNhLCBtYXBwaW5nWzBdKSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlvZmYgPSAxOworCX0gZWxzZQorCQlvZmYgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7ICsraSkgewogCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0JCW1hcHBpbmdbaSArIDFdID0gaWJfZG1hX21hcF9wYWdlKGNhLCBmcmFnLT5wYWdlLAorCQltYXBwaW5nW2kgKyBvZmZdID0gaWJfZG1hX21hcF9wYWdlKGNhLCBmcmFnLT5wYWdlLAogCQkJCQkJIGZyYWctPnBhZ2Vfb2Zmc2V0LCBmcmFnLT5zaXplLAogCQkJCQkJIERNQV9UT19ERVZJQ0UpOwotCQlpZiAodW5saWtlbHkoaWJfZG1hX21hcHBpbmdfZXJyb3IoY2EsIG1hcHBpbmdbaSArIDFdKSkpCisJCWlmICh1bmxpa2VseShpYl9kbWFfbWFwcGluZ19lcnJvcihjYSwgbWFwcGluZ1tpICsgb2ZmXSkpKQogCQkJZ290byBwYXJ0aWFsX2Vycm9yOwogCX0KIAlyZXR1cm4gMDsKIAogcGFydGlhbF9lcnJvcjoKLQlpYl9kbWFfdW5tYXBfc2luZ2xlKGNhLCBtYXBwaW5nWzBdLCBza2JfaGVhZGxlbihza2IpLCBETUFfVE9fREVWSUNFKTsKLQogCWZvciAoOyBpID4gMDsgLS1pKSB7CiAJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV07Ci0JCWliX2RtYV91bm1hcF9wYWdlKGNhLCBtYXBwaW5nW2ldLCBmcmFnLT5zaXplLCBETUFfVE9fREVWSUNFKTsKKwkJaWJfZG1hX3VubWFwX3BhZ2UoY2EsIG1hcHBpbmdbaSAtICFvZmZdLCBmcmFnLT5zaXplLCBETUFfVE9fREVWSUNFKTsKIAl9CisKKwlpZiAob2ZmKQorCQlpYl9kbWFfdW5tYXBfc2luZ2xlKGNhLCBtYXBwaW5nWzBdLCBza2JfaGVhZGxlbihza2IpLCBETUFfVE9fREVWSUNFKTsKKwogCXJldHVybiAtRUlPOwogfQogCkBAIC0yNzcsMTIgKzI5MSwxNyBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSB0eF9yZXEtPnNrYjsKIAl1NjQgKm1hcHBpbmcgPSB0eF9yZXEtPm1hcHBpbmc7CiAJaW50IGk7CisJaW50IG9mZjsKIAotCWliX2RtYV91bm1hcF9zaW5nbGUoY2EsIG1hcHBpbmdbMF0sIHNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOworCWlmIChza2JfaGVhZGxlbihza2IpKSB7CisJCWliX2RtYV91bm1hcF9zaW5nbGUoY2EsIG1hcHBpbmdbMF0sIHNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOworCQlvZmYgPSAxOworCX0gZWxzZQorCQlvZmYgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7ICsraSkgewogCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0JCWliX2RtYV91bm1hcF9wYWdlKGNhLCBtYXBwaW5nW2kgKyAxXSwgZnJhZy0+c2l6ZSwKKwkJaWJfZG1hX3VubWFwX3BhZ2UoY2EsIG1hcHBpbmdbaSArIG9mZl0sIGZyYWctPnNpemUsCiAJCQkJICBETUFfVE9fREVWSUNFKTsKIAl9CiB9CkBAIC0zODgsMjQgKzQwNyw0MCBAQAogc3RhdGljIGlubGluZSBpbnQgcG9zdF9zZW5kKHN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiwKIAkJCSAgICB1bnNpZ25lZCBpbnQgd3JfaWQsCiAJCQkgICAgc3RydWN0IGliX2FoICphZGRyZXNzLCB1MzIgcXBuLAotCQkJICAgIHU2NCAqbWFwcGluZywgaW50IGhlYWRsZW4sCi0JCQkgICAgc2tiX2ZyYWdfdCAqZnJhZ3MsCi0JCQkgICAgaW50IG5yX2ZyYWdzKQorCQkJICAgIHN0cnVjdCBpcG9pYl90eF9idWYgKnR4X3JlcSwKKwkJCSAgICB2b2lkICpoZWFkLCBpbnQgaGxlbikKIHsKIAlzdHJ1Y3QgaWJfc2VuZF93ciAqYmFkX3dyOwotCWludCBpOworCWludCBpLCBvZmY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4X3JlcS0+c2tiOworCXNrYl9mcmFnX3QgKmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsKKwlpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXU2NCAqbWFwcGluZyA9IHR4X3JlcS0+bWFwcGluZzsKIAotCXByaXYtPnR4X3NnZVswXS5hZGRyCSAgICAgPSBtYXBwaW5nWzBdOwotCXByaXYtPnR4X3NnZVswXS5sZW5ndGggICAgICAgPSBoZWFkbGVuOworCWlmIChza2JfaGVhZGxlbihza2IpKSB7CisJCXByaXYtPnR4X3NnZVswXS5hZGRyICAgICAgICAgPSBtYXBwaW5nWzBdOworCQlwcml2LT50eF9zZ2VbMF0ubGVuZ3RoICAgICAgID0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJb2ZmID0gMTsKKwl9IGVsc2UKKwkJb2ZmID0gMDsKKwogCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgKytpKSB7Ci0JCXByaXYtPnR4X3NnZVtpICsgMV0uYWRkciA9IG1hcHBpbmdbaSArIDFdOwotCQlwcml2LT50eF9zZ2VbaSArIDFdLmxlbmd0aCA9IGZyYWdzW2ldLnNpemU7CisJCXByaXYtPnR4X3NnZVtpICsgb2ZmXS5hZGRyID0gbWFwcGluZ1tpICsgb2ZmXTsKKwkJcHJpdi0+dHhfc2dlW2kgKyBvZmZdLmxlbmd0aCA9IGZyYWdzW2ldLnNpemU7CiAJfQotCXByaXYtPnR4X3dyLm51bV9zZ2UJICAgICA9IG5yX2ZyYWdzICsgMTsKKwlwcml2LT50eF93ci5udW1fc2dlCSAgICAgPSBucl9mcmFncyArIG9mZjsKIAlwcml2LT50eF93ci53cl9pZCAJICAgICA9IHdyX2lkOwogCXByaXYtPnR4X3dyLndyLnVkLnJlbW90ZV9xcG4gPSBxcG47CiAJcHJpdi0+dHhfd3Iud3IudWQuYWggCSAgICAgPSBhZGRyZXNzOwogCisJaWYgKGhlYWQpIHsKKwkJcHJpdi0+dHhfd3Iud3IudWQubXNzCSA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJCXByaXYtPnR4X3dyLndyLnVkLmhlYWRlciA9IGhlYWQ7CisJCXByaXYtPnR4X3dyLndyLnVkLmhsZW4JID0gaGxlbjsKKwkJcHJpdi0+dHhfd3Iub3Bjb2RlCSA9IElCX1dSX0xTTzsKKwl9IGVsc2UKKwkJcHJpdi0+dHhfd3Iub3Bjb2RlCSA9IElCX1dSX1NFTkQ7CisKIAlyZXR1cm4gaWJfcG9zdF9zZW5kKHByaXYtPnFwLCAmcHJpdi0+dHhfd3IsICZiYWRfd3IpOwogfQogCkBAIC00MTQsMTQgKzQ0OSwzMCBAQAogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwb2liX3R4X2J1ZiAqdHhfcmVxOworCWludCBobGVuOworCXZvaWQgKnBoZWFkOwogCi0JaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gcHJpdi0+bWNhc3RfbXR1ICsgSVBPSUJfRU5DQVBfTEVOKSkgewotCQlpcG9pYl93YXJuKHByaXYsICJwYWNrZXQgbGVuICVkICg+ICVkKSB0b28gbG9uZyB0byBzZW5kLCBkcm9wcGluZ1xuIiwKLQkJCSAgIHNrYi0+bGVuLCBwcml2LT5tY2FzdF9tdHUgKyBJUE9JQl9FTkNBUF9MRU4pOwotCQkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKLQkJKytkZXYtPnN0YXRzLnR4X2Vycm9yczsKLQkJaXBvaWJfY21fc2tiX3Rvb19sb25nKGRldiwgc2tiLCBwcml2LT5tY2FzdF9tdHUpOwotCQlyZXR1cm47CisJaWYgKHNrYl9pc19nc28oc2tiKSkgeworCQlobGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKKwkJcGhlYWQgPSBza2ItPmRhdGE7CisJCWlmICh1bmxpa2VseSghc2tiX3B1bGwoc2tiLCBobGVuKSkpIHsKKwkJCWlwb2liX3dhcm4ocHJpdiwgImxpbmVhciBkYXRhIHRvbyBzbWFsbFxuIik7CisJCQkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKKwkJCSsrZGV2LT5zdGF0cy50eF9lcnJvcnM7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gcHJpdi0+bWNhc3RfbXR1ICsgSVBPSUJfRU5DQVBfTEVOKSkgeworCQkJaXBvaWJfd2Fybihwcml2LCAicGFja2V0IGxlbiAlZCAoPiAlZCkgdG9vIGxvbmcgdG8gc2VuZCwgZHJvcHBpbmdcbiIsCisJCQkJICAgc2tiLT5sZW4sIHByaXYtPm1jYXN0X210dSArIElQT0lCX0VOQ0FQX0xFTik7CisJCQkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKKwkJCSsrZGV2LT5zdGF0cy50eF9lcnJvcnM7CisJCQlpcG9pYl9jbV9za2JfdG9vX2xvbmcoZGV2LCBza2IsIHByaXYtPm1jYXN0X210dSk7CisJCQlyZXR1cm47CisJCX0KKwkJcGhlYWQgPSBOVUxMOworCQlobGVuICA9IDA7CiAJfQogCiAJaXBvaWJfZGJnX2RhdGEocHJpdiwgInNlbmRpbmcgcGFja2V0LCBsZW5ndGg9JWQgYWRkcmVzcz0lcCBxcG49MHglMDZ4XG4iLApAQCAtNDQyLDEwICs0OTMsMTMgQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQorCQlwcml2LT50eF93ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfSVBfQ1NVTTsKKwllbHNlCisJCXByaXYtPnR4X3dyLnNlbmRfZmxhZ3MgJj0gfklCX1NFTkRfSVBfQ1NVTTsKKwogCWlmICh1bmxpa2VseShwb3N0X3NlbmQocHJpdiwgcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSksCi0JCQkgICAgICAgYWRkcmVzcy0+YWgsIHFwbiwKLQkJCSAgICAgICB0eF9yZXEtPm1hcHBpbmcsIHNrYl9oZWFkbGVuKHNrYiksCi0JCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFncywgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykpKSB7CisJCQkgICAgICAgYWRkcmVzcy0+YWgsIHFwbiwgdHhfcmVxLCBwaGVhZCwgaGxlbikpKSB7CiAJCWlwb2liX3dhcm4ocHJpdiwgInBvc3Rfc2VuZCBmYWlsZWRcbiIpOwogCQkrK2Rldi0+c3RhdHMudHhfZXJyb3JzOwogCQlpcG9pYl9kbWFfdW5tYXBfdHgocHJpdi0+Y2EsIHR4X3JlcSk7CkBAIC01NDAsNyArNTk0LDcgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNiBwa2V5X2luZGV4ID0gMDsKIAotCWlmIChpYl9maW5kX2NhY2hlZF9wa2V5KHByaXYtPmNhLCBwcml2LT5wb3J0LCBwcml2LT5wa2V5LCAmcGtleV9pbmRleCkpCisJaWYgKGliX2ZpbmRfcGtleShwcml2LT5jYSwgcHJpdi0+cG9ydCwgcHJpdi0+cGtleSwgJnBrZXlfaW5kZXgpKQogCQljbGVhcl9iaXQoSVBPSUJfUEtFWV9BU1NJR05FRCwgJnByaXYtPmZsYWdzKTsKIAllbHNlCiAJCXNldF9iaXQoSVBPSUJfUEtFWV9BU1NJR05FRCwgJnByaXYtPmZsYWdzKTsKQEAgLTc4MSwxMyArODM1LDEzIEBACiAJCQljbGVhcl9iaXQoSVBPSUJfUEtFWV9BU1NJR05FRCwgJnByaXYtPmZsYWdzKTsKIAkJCWlwb2liX2liX2Rldl9kb3duKGRldiwgMCk7CiAJCQlpcG9pYl9pYl9kZXZfc3RvcChkZXYsIDApOwotCQkJaXBvaWJfcGtleV9kZXZfZGVsYXlfb3BlbihkZXYpOwotCQkJcmV0dXJuOworCQkJaWYgKGlwb2liX3BrZXlfZGV2X2RlbGF5X29wZW4oZGV2KSkKKwkJCQlyZXR1cm47CiAJCX0KLQkJc2V0X2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpOwogCiAJCS8qIHJlc3RhcnQgUVAgb25seSBpZiBQX0tleSBpbmRleCBpcyBjaGFuZ2VkICovCi0JCWlmIChuZXdfaW5kZXggPT0gcHJpdi0+cGtleV9pbmRleCkgeworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpICYmCisJCSAgICBuZXdfaW5kZXggPT0gcHJpdi0+cGtleV9pbmRleCkgewogCQkJaXBvaWJfZGJnKHByaXYsICJOb3QgZmx1c2hpbmcgLSBQX0tleSBpbmRleCBub3QgY2hhbmdlZC5cbiIpOwogCQkJcmV0dXJuOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IGY5NjQ3N2EuLmJkMDdmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogRm9yIEFSUEhSRF94eHggKi8KIApAQCAtMzU4LDggKzM1OSw3IEBACiAJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAotCWxpc3Rfc3BsaWNlKCZwcml2LT5wYXRoX2xpc3QsICZyZW1vdmVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPnBhdGhfbGlzdCk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+cGF0aF9saXN0LCAmcmVtb3ZlX2xpc3QpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmcmVtb3ZlX2xpc3QsIGxpc3QpCiAJCXJiX2VyYXNlKCZwYXRoLT5yYl9ub2RlLCAmcHJpdi0+cGF0aF90cmVlKTsKQEAgLTg4NywxMyArODg3LDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXByaXYtPnR4X3JpbmcgPSBremFsbG9jKGlwb2liX3NlbmRxX3NpemUgKiBzaXplb2YgKnByaXYtPnR4X3JpbmcsCi0JCQkJR0ZQX0tFUk5FTCk7CisJcHJpdi0+dHhfcmluZyA9IHZtYWxsb2MoaXBvaWJfc2VuZHFfc2l6ZSAqIHNpemVvZiAqcHJpdi0+dHhfcmluZyk7CiAJaWYgKCFwcml2LT50eF9yaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgVFggcmluZyAoJWQgZW50cmllcylcbiIsCiAJCSAgICAgICBjYS0+bmFtZSwgaXBvaWJfc2VuZHFfc2l6ZSk7CiAJCWdvdG8gb3V0X3J4X3JpbmdfY2xlYW51cDsKIAl9CisJbWVtc2V0KHByaXYtPnR4X3JpbmcsIDAsIGlwb2liX3NlbmRxX3NpemUgKiBzaXplb2YgKnByaXYtPnR4X3JpbmcpOwogCiAJLyogcHJpdi0+dHhfaGVhZCwgdHhfdGFpbCAmIHR4X291dHN0YW5kaW5nIGFyZSBhbHJlYWR5IDAgKi8KIApAQCAtOTAzLDcgKzkwMyw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF90eF9yaW5nX2NsZWFudXA6Ci0Ja2ZyZWUocHJpdi0+dHhfcmluZyk7CisJdmZyZWUocHJpdi0+dHhfcmluZyk7CiAKIG91dF9yeF9yaW5nX2NsZWFudXA6CiAJa2ZyZWUocHJpdi0+cnhfcmluZyk7CkBAIC05MjgsNyArOTI4LDcgQEAKIAlpcG9pYl9pYl9kZXZfY2xlYW51cChkZXYpOwogCiAJa2ZyZWUocHJpdi0+cnhfcmluZyk7Ci0Ja2ZyZWUocHJpdi0+dHhfcmluZyk7CisJdmZyZWUocHJpdi0+dHhfcmluZyk7CiAKIAlwcml2LT5yeF9yaW5nID0gTlVMTDsKIAlwcml2LT50eF9yaW5nID0gTlVMTDsKQEAgLTk1MSw2ICs5NTEsOCBAQAogCWRldi0+c2V0X211bHRpY2FzdF9saXN0CSA9IGlwb2liX3NldF9tY2FzdF9saXN0OwogCWRldi0+bmVpZ2hfc2V0dXAJID0gaXBvaWJfbmVpZ2hfc2V0dXBfZGV2OwogCisJaXBvaWJfc2V0X2V0aHRvb2xfb3BzKGRldik7CisKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBpcG9pYl9wb2xsLCAxMDApOwogCiAJZGV2LT53YXRjaGRvZ190aW1lbwkgPSBIWjsKQEAgLTExMDQsNiArMTEwNiw3IEBACiAJCQkJCSBzdHJ1Y3QgaWJfZGV2aWNlICpoY2EsIHU4IHBvcnQpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2OworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqZGV2aWNlX2F0dHI7CiAJaW50IHJlc3VsdCA9IC1FTk9NRU07CiAKIAlwcml2ID0gaXBvaWJfaW50Zl9hbGxvYyhmb3JtYXQpOwpAQCAtMTExOSw2ICsxMTIyLDI5IEBACiAJCWdvdG8gZGV2aWNlX2luaXRfZmFpbGVkOwogCX0KIAorCWRldmljZV9hdHRyID0ga21hbGxvYyhzaXplb2YgKmRldmljZV9hdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldmljZV9hdHRyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBhbGxvY2F0aW9uIG9mICV6dSBieXRlcyBmYWlsZWRcbiIsCisJCSAgICAgICBoY2EtPm5hbWUsIHNpemVvZiAqZGV2aWNlX2F0dHIpOworCQlnb3RvIGRldmljZV9pbml0X2ZhaWxlZDsKKwl9CisKKwlyZXN1bHQgPSBpYl9xdWVyeV9kZXZpY2UoaGNhLCBkZXZpY2VfYXR0cik7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaWJfcXVlcnlfZGV2aWNlIGZhaWxlZCAocmV0ID0gJWQpXG4iLAorCQkgICAgICAgaGNhLT5uYW1lLCByZXN1bHQpOworCQlrZnJlZShkZXZpY2VfYXR0cik7CisJCWdvdG8gZGV2aWNlX2luaXRfZmFpbGVkOworCX0KKwlwcml2LT5oY2FfY2FwcyA9IGRldmljZV9hdHRyLT5kZXZpY2VfY2FwX2ZsYWdzOworCisJa2ZyZWUoZGV2aWNlX2F0dHIpOworCisJaWYgKHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX0lQX0NTVU0pIHsKKwkJc2V0X2JpdChJUE9JQl9GTEFHX0NTVU0sICZwcml2LT5mbGFncyk7CisJCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKwl9CisKIAkvKgogCSAqIFNldCB0aGUgZnVsbCBtZW1iZXJzaGlwIGJpdCwgc28gdGhhdCB3ZSBqb2luIHRoZSByaWdodAogCSAqIGJyb2FkY2FzdCBncm91cCwgZXRjLgpAQCAtMTEzNiw3ICsxMTYyLDYgQEAKIAl9IGVsc2UKIAkJbWVtY3B5KHByaXYtPmRldi0+ZGV2X2FkZHIgKyA0LCBwcml2LT5sb2NhbF9naWQucmF3LCBzaXplb2YgKHVuaW9uIGliX2dpZCkpOwogCi0KIAlyZXN1bHQgPSBpcG9pYl9kZXZfaW5pdChwcml2LT5kZXYsIGhjYSwgcG9ydCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBpbml0aWFsaXplIHBvcnQgJWQgKHJldCA9ICVkKVxuIiwKQEAgLTExNTQsNiArMTE3OSw5IEBACiAJCWdvdG8gZXZlbnRfZmFpbGVkOwogCX0KIAorCWlmIChwcml2LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRyAmJiBwcml2LT5oY2FfY2FwcyAmIElCX0RFVklDRV9VRF9UU08pCisJCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisKIAlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXYocHJpdi0+ZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZG4ndCByZWdpc3RlciBpcG9pYiBwb3J0ICVkOyBlcnJvciAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IDI2MjgzMzkuLjMxYTUzYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJICovCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAotCWlmICghdGVzdF9iaXQoSVBPSUJfTUNBU1RfU1RBUlRFRCwgJnByaXYtPmZsYWdzKQl8fAorCWlmICghdGVzdF9iaXQoSVBPSUJfRkxBR19PUEVSX1VQLCAmcHJpdi0+ZmxhZ3MpCQl8fAogCSAgICAhcHJpdi0+YnJvYWRjYXN0CQkJCQl8fAogCSAgICAhdGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19BVFRBQ0hFRCwgJnByaXYtPmJyb2FkY2FzdC0+ZmxhZ3MpKSB7CiAJCSsrZGV2LT5zdGF0cy50eF9kcm9wcGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCmluZGV4IGEzYWViOTEuLjhhMjBlMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKQEAgLTE5Miw2ICsxOTIsOSBAQAogCWluaXRfYXR0ci5zZW5kX2NxID0gcHJpdi0+Y3E7CiAJaW5pdF9hdHRyLnJlY3ZfY3EgPSBwcml2LT5jcTsKIAorCWlmIChwcml2LT5oY2FfY2FwcyAmIElCX0RFVklDRV9VRF9UU08pCisJCWluaXRfYXR0ci5jcmVhdGVfZmxhZ3MgPSBJQl9RUF9DUkVBVEVfSVBPSUJfVURfTFNPOworCiAJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKQogCQlpbml0X2F0dHIuY2FwLm1heF9zZW5kX3NnZSA9IE1BWF9TS0JfRlJBR1MgKyAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCmluZGV4IDgzMjQ3ZjEuLjA4ZGM4MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCkBAIC00MDUsNyArNDA1LDcgQEAKIAlzdHJ1Y3QgaXNlcl9kdG8gKnNlbmRfZHRvID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGJ1Zl9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBkYXRhX3NlZ19sZW47Ci0JdW5zaWduZWQgaW50IGl0dDsKKwl1aW50MzJfdCBpdHQ7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIWlzZXJfY29ubl9zdGF0ZV9jb21wKGlzZXJfY29ubi0+aWJfY29ubiwgSVNFUl9DT05OX1VQKSkgewpAQCAtNDE2LDcgKzQxNiw3IEBACiAJaWYgKGlzZXJfY2hlY2tfeG1pdChjb25uLCBjdGFzaykpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCWl0dCA9IG50b2hsKGhkci0+aXR0KTsKKwlpdHQgPSAoX19mb3JjZSB1aW50MzJfdCloZHItPml0dDsKIAlkYXRhX3NlZ19sZW4gPSBudG9oMjQoaGRyLT5kbGVuZ3RoKTsKIAlidWZfb2Zmc2V0ICAgPSBudG9obChoZHItPm9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCmluZGV4IDcxNGI4ZGIuLmQxOWNmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYwpAQCAtMjM3LDM2ICsyMzcsMzIgQEAKIHN0YXRpYwogc3RydWN0IGlzZXJfZGV2aWNlICppc2VyX2RldmljZV9maW5kX2J5X2liX2RldmljZShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21hX2lkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgICAgKnBfbGlzdDsKLQlzdHJ1Y3QgaXNlcl9kZXZpY2UgICpkZXZpY2UgPSBOVUxMOworCXN0cnVjdCBpc2VyX2RldmljZSAqZGV2aWNlOwogCiAJbXV0ZXhfbG9jaygmaWcuZGV2aWNlX2xpc3RfbXV0ZXgpOwogCi0JcF9saXN0ID0gaWcuZGV2aWNlX2xpc3QubmV4dDsKLQl3aGlsZSAocF9saXN0ICE9ICZpZy5kZXZpY2VfbGlzdCkgewotCQlkZXZpY2UgPSBsaXN0X2VudHJ5KHBfbGlzdCwgc3RydWN0IGlzZXJfZGV2aWNlLCBpZ19saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmlnLmRldmljZV9saXN0LCBpZ19saXN0KQogCQkvKiBmaW5kIGlmIHRoZXJlJ3MgYSBtYXRjaCB1c2luZyB0aGUgbm9kZSBHVUlEICovCiAJCWlmIChkZXZpY2UtPmliX2RldmljZS0+bm9kZV9ndWlkID09IGNtYV9pZC0+ZGV2aWNlLT5ub2RlX2d1aWQpCi0JCQlicmVhazsKLQl9CisJCQlnb3RvIGluY19yZWZjbnQ7CiAKLQlpZiAoZGV2aWNlID09IE5VTEwpIHsKLQkJZGV2aWNlID0ga3phbGxvYyhzaXplb2YgKmRldmljZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChkZXZpY2UgPT0gTlVMTCkKLQkJCWdvdG8gb3V0OwotCQkvKiBhc3NpZ24gdGhpcyBkZXZpY2UgdG8gdGhlIGRldmljZSAqLwotCQlkZXZpY2UtPmliX2RldmljZSA9IGNtYV9pZC0+ZGV2aWNlOwotCQkvKiBpbml0IHRoZSBkZXZpY2UgYW5kIGxpbmsgaXQgaW50byBpZyBkZXZpY2UgbGlzdCAqLwotCQlpZiAoaXNlcl9jcmVhdGVfZGV2aWNlX2liX3JlcyhkZXZpY2UpKSB7Ci0JCQlrZnJlZShkZXZpY2UpOwotCQkJZGV2aWNlID0gTlVMTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWxpc3RfYWRkKCZkZXZpY2UtPmlnX2xpc3QsICZpZy5kZXZpY2VfbGlzdCk7CisJZGV2aWNlID0ga3phbGxvYyhzaXplb2YgKmRldmljZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldmljZSA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCS8qIGFzc2lnbiB0aGlzIGRldmljZSB0byB0aGUgZGV2aWNlICovCisJZGV2aWNlLT5pYl9kZXZpY2UgPSBjbWFfaWQtPmRldmljZTsKKwkvKiBpbml0IHRoZSBkZXZpY2UgYW5kIGxpbmsgaXQgaW50byBpZyBkZXZpY2UgbGlzdCAqLworCWlmIChpc2VyX2NyZWF0ZV9kZXZpY2VfaWJfcmVzKGRldmljZSkpIHsKKwkJa2ZyZWUoZGV2aWNlKTsKKwkJZGV2aWNlID0gTlVMTDsKKwkJZ290byBvdXQ7CiAJfQotb3V0OgotCUJVR19PTihkZXZpY2UgPT0gTlVMTCk7CisJbGlzdF9hZGQoJmRldmljZS0+aWdfbGlzdCwgJmlnLmRldmljZV9saXN0KTsKKworaW5jX3JlZmNudDoKIAlkZXZpY2UtPnJlZmNvdW50Kys7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpZy5kZXZpY2VfbGlzdF9tdXRleCk7CiAJcmV0dXJuIGRldmljZTsKIH0KQEAgLTM3Miw2ICszNjgsMTIgQEAKIAlpbnQgICAgcmV0OwogCiAJZGV2aWNlID0gaXNlcl9kZXZpY2VfZmluZF9ieV9pYl9kZXZpY2UoY21hX2lkKTsKKwlpZiAoIWRldmljZSkgeworCQlpc2VyX2VycigiZGV2aWNlIGxvb2t1cC9jcmVhdGlvbiBmYWlsZWRcbiIpOworCQlpc2VyX2Nvbm5lY3RfZXJyb3IoY21hX2lkKTsKKwkJcmV0dXJuOworCX0KKwogCWliX2Nvbm4gPSAoc3RydWN0IGlzZXJfY29ubiAqKWNtYV9pZC0+Y29udGV4dDsKIAlpYl9jb25uLT5kZXZpY2UgPSBkZXZpY2U7CiAKQEAgLTM4MCw3ICszODIsNiBAQAogCQlpc2VyX2VycigicmVzb2x2ZSByb3V0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlpc2VyX2Nvbm5lY3RfZXJyb3IoY21hX2lkKTsKIAl9Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBpc2VyX3JvdXRlX2hhbmRsZXIoc3RydWN0IHJkbWFfY21faWQgKmNtYV9pZCkKQEAgLTQ3MiwxMSArNDczLDggQEAKIAkJaXNlcl9jb25uZWN0X2Vycm9yKGNtYV9pZCk7CiAJCWJyZWFrOwogCWNhc2UgUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQ6Ci0JCWlzZXJfZGlzY29ubmVjdGVkX2hhbmRsZXIoY21hX2lkKTsKLQkJYnJlYWs7CiAJY2FzZSBSRE1BX0NNX0VWRU5UX0RFVklDRV9SRU1PVkFMOgotCQlpc2VyX2VycigiRGV2aWNlIHJlbW92YWwgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkXG4iKTsKLQkJQlVHKCk7CisJCWlzZXJfZGlzY29ubmVjdGVkX2hhbmRsZXIoY21hX2lkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaXNlcl9lcnIoIlVuZXhwZWN0ZWQgUkRNQSBDTSBldmVudCAoJWQpXG4iLCBldmVudC0+ZXZlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCBmZDRhNDlmLi40MzUxNDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtNjgsNyArNjgsNyBAQAogCiBtb2R1bGVfcGFyYW0oc3JwX3NnX3RhYmxlc2l6ZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc3JwX3NnX3RhYmxlc2l6ZSwKLQkJICJNYXggbnVtYmVyIG9mIGdhdGhlci9zY2F0dGVyIGVudHJpZXMgcGVyIEkvTyAoZGVmYXVsdCBpcyAxMikiKTsKKwkJICJNYXggbnVtYmVyIG9mIGdhdGhlci9zY2F0dGVyIGVudHJpZXMgcGVyIEkvTyAoZGVmYXVsdCBpcyAxMiwgbWF4IDI1NSkiKTsKIAogc3RhdGljIGludCB0b3BzcGluX3dvcmthcm91bmRzID0gMTsKIApAQCAtMTM5LDggKzEzOSw5IEBACiAJaWYgKCFpdS0+YnVmKQogCQlnb3RvIG91dF9mcmVlX2l1OwogCi0JaXUtPmRtYSA9IGliX2RtYV9tYXBfc2luZ2xlKGhvc3QtPmRldi0+ZGV2LCBpdS0+YnVmLCBzaXplLCBkaXJlY3Rpb24pOwotCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihob3N0LT5kZXYtPmRldiwgaXUtPmRtYSkpCisJaXUtPmRtYSA9IGliX2RtYV9tYXBfc2luZ2xlKGhvc3QtPnNycF9kZXYtPmRldiwgaXUtPmJ1Ziwgc2l6ZSwKKwkJCQkgICAgZGlyZWN0aW9uKTsKKwlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoaG9zdC0+c3JwX2Rldi0+ZGV2LCBpdS0+ZG1hKSkKIAkJZ290byBvdXRfZnJlZV9idWY7CiAKIAlpdS0+c2l6ZSAgICAgID0gc2l6ZTsKQEAgLTE2MSw3ICsxNjIsOCBAQAogCWlmICghaXUpCiAJCXJldHVybjsKIAotCWliX2RtYV91bm1hcF9zaW5nbGUoaG9zdC0+ZGV2LT5kZXYsIGl1LT5kbWEsIGl1LT5zaXplLCBpdS0+ZGlyZWN0aW9uKTsKKwlpYl9kbWFfdW5tYXBfc2luZ2xlKGhvc3QtPnNycF9kZXYtPmRldiwgaXUtPmRtYSwgaXUtPnNpemUsCisJCQkgICAgaXUtPmRpcmVjdGlvbik7CiAJa2ZyZWUoaXUtPmJ1Zik7CiAJa2ZyZWUoaXUpOwogfQpAQCAtMTgxLDcgKzE4Myw3IEBACiAJaWYgKCFhdHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGliX2ZpbmRfY2FjaGVkX3BrZXkodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYsCisJcmV0ID0gaWJfZmluZF9jYWNoZWRfcGtleSh0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCiAJCQkJICB0YXJnZXQtPnNycF9ob3N0LT5wb3J0LAogCQkJCSAgYmUxNl90b19jcHUodGFyZ2V0LT5wYXRoLnBrZXkpLAogCQkJCSAgJmF0dHItPnBrZXlfaW5kZXgpOwpAQCAtMjA4LDcgKzIxMCw3IEBACiB7CiAJc3RydWN0IGliX2NtX2lkICpuZXdfY21faWQ7CiAKLQluZXdfY21faWQgPSBpYl9jcmVhdGVfY21faWQodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYsCisJbmV3X2NtX2lkID0gaWJfY3JlYXRlX2NtX2lkKHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKIAkJCQkgICAgc3JwX2NtX2hhbmRsZXIsIHRhcmdldCk7CiAJaWYgKElTX0VSUihuZXdfY21faWQpKQogCQlyZXR1cm4gUFRSX0VSUihuZXdfY21faWQpOwpAQCAtMjI5LDggKzIzMSw4IEBACiAJaWYgKCFpbml0X2F0dHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdGFyZ2V0LT5jcSA9IGliX2NyZWF0ZV9jcSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldiwgc3JwX2NvbXBsZXRpb24sCi0JCQkJICBOVUxMLCB0YXJnZXQsIFNSUF9DUV9TSVpFLCAwKTsKKwl0YXJnZXQtPmNxID0gaWJfY3JlYXRlX2NxKHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKKwkJCQkgIHNycF9jb21wbGV0aW9uLCBOVUxMLCB0YXJnZXQsIFNSUF9DUV9TSVpFLCAwKTsKIAlpZiAoSVNfRVJSKHRhcmdldC0+Y3EpKSB7CiAJCXJldCA9IFBUUl9FUlIodGFyZ2V0LT5jcSk7CiAJCWdvdG8gb3V0OwpAQCAtMjQ4LDcgKzI1MCw3IEBACiAJaW5pdF9hdHRyLT5zZW5kX2NxICAgICAgICAgICAgID0gdGFyZ2V0LT5jcTsKIAlpbml0X2F0dHItPnJlY3ZfY3EgICAgICAgICAgICAgPSB0YXJnZXQtPmNxOwogCi0JdGFyZ2V0LT5xcCA9IGliX2NyZWF0ZV9xcCh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPnBkLCBpbml0X2F0dHIpOworCXRhcmdldC0+cXAgPSBpYl9jcmVhdGVfcXAodGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+cGQsIGluaXRfYXR0cik7CiAJaWYgKElTX0VSUih0YXJnZXQtPnFwKSkgewogCQlyZXQgPSBQVFJfRVJSKHRhcmdldC0+cXApOwogCQlpYl9kZXN0cm95X2NxKHRhcmdldC0+Y3EpOwpAQCAtMzAyLDcgKzMwNCw3IEBACiAJaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPmRvbmUpOwogCiAJdGFyZ2V0LT5wYXRoX3F1ZXJ5X2lkID0gaWJfc2FfcGF0aF9yZWNfZ2V0KCZzcnBfc2FfY2xpZW50LAotCQkJCQkJICAgdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYsCisJCQkJCQkgICB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCiAJCQkJCQkgICB0YXJnZXQtPnNycF9ob3N0LT5wb3J0LAogCQkJCQkJICAgJnRhcmdldC0+cGF0aCwKIAkJCQkJCSAgIElCX1NBX1BBVEhfUkVDX1NFUlZJQ0VfSUQJfApAQCAtNDAzLDcgKzQwNSw3IEBACiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+aW9jX2d1aWQpKTsKIAkJbWVtc2V0KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCwgMCwgOCk7CiAJCW1lbWNweShyZXEtPnByaXYuaW5pdGlhdG9yX3BvcnRfaWQgKyA4LAotCQkgICAgICAgJnRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5ub2RlX2d1aWQsIDgpOworCQkgICAgICAgJnRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldi0+bm9kZV9ndWlkLCA4KTsKIAl9CiAKIAlzdGF0dXMgPSBpYl9zZW5kX2NtX3JlcSh0YXJnZXQtPmNtX2lkLCAmcmVxLT5wYXJhbSk7CkBAIC01MjAsNyArNTIyLDcgQEAKIAkJcmVxLT5mbXIgPSBOVUxMOwogCX0KIAotCWliX2RtYV91bm1hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldiwgc2NzaV9zZ2xpc3Qoc2NtbmQpLAorCWliX2RtYV91bm1hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsIHNjc2lfc2dsaXN0KHNjbW5kKSwKIAkJCXNjc2lfc2dfY291bnQoc2NtbmQpLCBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwogfQogCkBAIC02MjgsNyArNjMwLDcgQEAKIAlpbnQgcGFnZV9jbnQ7CiAJaW50IGksIGo7CiAJaW50IHJldDsKLQlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2OworCXN0cnVjdCBzcnBfZGV2aWNlICpkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gZGV2LT5kZXY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIApAQCAtNzIzLDcgKzcyNSw3IEBACiAJbmVudHMgPSBzY3NpX3NnX2NvdW50KHNjbW5kKTsKIAlzY2F0ICA9IHNjc2lfc2dsaXN0KHNjbW5kKTsKIAotCWRldiA9IHRhcmdldC0+c3JwX2hvc3QtPmRldjsKKwlkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2OwogCWliZGV2ID0gZGV2LT5kZXY7CiAKIAljb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsIHNjYXQsIG5lbnRzLCBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwpAQCAtNzc5LDcgKzc4MSw3IEBACiAJCWJ1Zi0+dGFibGVfZGVzYy52YSAgPQogCQkJY3B1X3RvX2JlNjQocmVxLT5jbWQtPmRtYSArIHNpemVvZiAqY21kICsgc2l6ZW9mICpidWYpOwogCQlidWYtPnRhYmxlX2Rlc2Mua2V5ID0KLQkJCWNwdV90b19iZTMyKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+bXItPnJrZXkpOworCQkJY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+bXItPnJrZXkpOwogCQlidWYtPnRhYmxlX2Rlc2MubGVuID0KIAkJCWNwdV90b19iZTMyKGNvdW50ICogc2l6ZW9mIChzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpKTsKIApAQCAtODU1LDcgKzg1Nyw3IEBACiAKIAlpdSA9IHRhcmdldC0+cnhfcmluZ1t3Yy0+d3JfaWQgJiB+U1JQX09QX1JFQ1ZdOwogCi0JZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXY7CisJZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2OwogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgdGFyZ2V0LT5tYXhfdGlfaXVfbGVuLAogCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CiAKQEAgLTkzNyw3ICs5MzksNyBAQAogCiAJbGlzdC5hZGRyICAgPSBpdS0+ZG1hOwogCWxpc3QubGVuZ3RoID0gaXUtPnNpemU7Ci0JbGlzdC5sa2V5ICAgPSB0YXJnZXQtPnNycF9ob3N0LT5kZXYtPm1yLT5sa2V5OworCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+bXItPmxrZXk7CiAKIAl3ci5uZXh0ICAgICA9IE5VTEw7CiAJd3Iuc2dfbGlzdCAgPSAmbGlzdDsKQEAgLTk5Niw3ICs5OTgsNyBAQAogCiAJbGlzdC5hZGRyICAgPSBpdS0+ZG1hOwogCWxpc3QubGVuZ3RoID0gbGVuOwotCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+bGtleTsKKwlsaXN0LmxrZXkgICA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPm1yLT5sa2V5OwogCiAJd3IubmV4dCAgICAgICA9IE5VTEw7CiAJd3Iud3JfaWQgICAgICA9IHRhcmdldC0+dHhfaGVhZCAmIFNSUF9TUV9TSVpFOwpAQCAtMTAzOSw3ICsxMDQxLDcgQEAKIAlpZiAoIWl1KQogCQlnb3RvIGVycjsKIAotCWRldiA9IHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2OworCWRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldjsKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGl1LT5kbWEsIHNycF9tYXhfaXVfbGVuLAogCQkJCSAgIERNQV9UT19ERVZJQ0UpOwogCkBAIC0xNDU2LDkgKzE0NTgsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2lkX2V4dChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2lkX2V4dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKIAogCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfREVBRCB8fAogCSAgICB0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfUkVNT1ZFRCkKQEAgLTE0NjgsOSArMTQ3MSwxMCBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUodGFyZ2V0LT5pZF9leHQpKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19pb2NfZ3VpZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2lvY19ndWlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChjZGV2KSk7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0RFQUQgfHwKIAkgICAgdGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1JFTU9WRUQpCkBAIC0xNDgwLDkgKzE0ODQsMTAgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+aW9jX2d1aWQpKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19zZXJ2aWNlX2lkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2VydmljZV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChjZGV2KSk7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0RFQUQgfHwKIAkgICAgdGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1JFTU9WRUQpCkBAIC0xNDkyLDkgKzE0OTcsMTAgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+c2VydmljZV9pZCkpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3BrZXkoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19wa2V5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKIAogCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfREVBRCB8fAogCSAgICB0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfUkVNT1ZFRCkKQEAgLTE1MDMsOSArMTUwOSwxMCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0eFxuIiwgYmUxNl90b19jcHUodGFyZ2V0LT5wYXRoLnBrZXkpKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19kZ2lkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZGdpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChjZGV2KSk7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0RFQUQgfHwKIAkgICAgdGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1JFTU9WRUQpCkBAIC0xNTIyLDkgKzE1MjksMTAgQEAKIAkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIHRhcmdldC0+cGF0aC5kZ2lkLnJhdylbN10pKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19vcmlnX2RnaWQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19vcmlnX2RnaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChjZGV2KSk7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0RFQUQgfHwKIAkgICAgdGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1JFTU9WRUQpCkBAIC0xNTQxLDkgKzE1NDksMTAgQEAKIAkJICAgICAgIGJlMTZfdG9fY3B1KHRhcmdldC0+b3JpZ19kZ2lkWzddKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfemVyb19yZXFfbGltKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfemVyb19yZXFfbGltKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChjZGV2KSk7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlpZiAodGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX0RFQUQgfHwKIAkgICAgdGFyZ2V0LT5zdGF0ZSA9PSBTUlBfVEFSR0VUX1JFTU9WRUQpCkBAIC0xNTUyLDQwICsxNTYxLDQyIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRhcmdldC0+emVyb19yZXFfbGltKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19sb2NhbF9pYl9wb3J0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbG9jYWxfaWJfcG9ydChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0YXJnZXQtPnNycF9ob3N0LT5wb3J0KTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19sb2NhbF9pYl9kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19sb2NhbF9pYl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldi0+bmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldi0+bmFtZSk7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpZF9leHQsCSAgU19JUlVHTywgc2hvd19pZF9leHQsCQkgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaW9jX2d1aWQsCSAgU19JUlVHTywgc2hvd19pb2NfZ3VpZCwJIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNlcnZpY2VfaWQsCSAgU19JUlVHTywgc2hvd19zZXJ2aWNlX2lkLAkgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIocGtleSwJCSAgU19JUlVHTywgc2hvd19wa2V5LAkJIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGRnaWQsCQkgIFNfSVJVR08sIHNob3dfZGdpZCwJCSBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihvcmlnX2RnaWQsCSAgU19JUlVHTywgc2hvd19vcmlnX2RnaWQsCSBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih6ZXJvX3JlcV9saW0sCSAgU19JUlVHTywgc2hvd196ZXJvX3JlcV9saW0sCSBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihsb2NhbF9pYl9wb3J0LCAgIFNfSVJVR08sIHNob3dfbG9jYWxfaWJfcG9ydCwJIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxvY2FsX2liX2RldmljZSwgU19JUlVHTywgc2hvd19sb2NhbF9pYl9kZXZpY2UsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGlkX2V4dCwJICAgIFNfSVJVR08sIHNob3dfaWRfZXh0LAkgICBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpb2NfZ3VpZCwJICAgIFNfSVJVR08sIHNob3dfaW9jX2d1aWQsCSAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHNlcnZpY2VfaWQsCSAgICBTX0lSVUdPLCBzaG93X3NlcnZpY2VfaWQsCSAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBrZXksCSAgICBTX0lSVUdPLCBzaG93X3BrZXksCQkgICBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZ2lkLAkgICAgU19JUlVHTywgc2hvd19kZ2lkLAkJICAgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIob3JpZ19kZ2lkLAkgICAgU19JUlVHTywgc2hvd19vcmlnX2RnaWQsCSAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHplcm9fcmVxX2xpbSwgICAgU19JUlVHTywgc2hvd196ZXJvX3JlcV9saW0sCSAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxvY2FsX2liX3BvcnQsICAgU19JUlVHTywgc2hvd19sb2NhbF9pYl9wb3J0LCAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxvY2FsX2liX2RldmljZSwgU19JUlVHTywgc2hvd19sb2NhbF9pYl9kZXZpY2UsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnNycF9ob3N0X2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX2lkX2V4dCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaW9jX2d1aWQsCi0JJmNsYXNzX2RldmljZV9hdHRyX3NlcnZpY2VfaWQsCi0JJmNsYXNzX2RldmljZV9hdHRyX3BrZXksCi0JJmNsYXNzX2RldmljZV9hdHRyX2RnaWQsCi0JJmNsYXNzX2RldmljZV9hdHRyX29yaWdfZGdpZCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfemVyb19yZXFfbGltLAotCSZjbGFzc19kZXZpY2VfYXR0cl9sb2NhbF9pYl9wb3J0LAotCSZjbGFzc19kZXZpY2VfYXR0cl9sb2NhbF9pYl9kZXZpY2UsCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnNycF9ob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2lkX2V4dCwKKwkmZGV2X2F0dHJfaW9jX2d1aWQsCisJJmRldl9hdHRyX3NlcnZpY2VfaWQsCisJJmRldl9hdHRyX3BrZXksCisJJmRldl9hdHRyX2RnaWQsCisJJmRldl9hdHRyX29yaWdfZGdpZCwKKwkmZGV2X2F0dHJfemVyb19yZXFfbGltLAorCSZkZXZfYXR0cl9sb2NhbF9pYl9wb3J0LAorCSZkZXZfYXR0cl9sb2NhbF9pYl9kZXZpY2UsCiAJTlVMTAogfTsKIApAQCAtMTYxMyw3ICsxNjI0LDcgQEAKIAlzcHJpbnRmKHRhcmdldC0+dGFyZ2V0X25hbWUsICJTUlAuVDEwOiUwMTZsbFgiLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUodGFyZ2V0LT5pZF9leHQpKTsKIAotCWlmIChzY3NpX2FkZF9ob3N0KHRhcmdldC0+c2NzaV9ob3N0LCBob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSkpCisJaWYgKHNjc2lfYWRkX2hvc3QodGFyZ2V0LT5zY3NpX2hvc3QsIGhvc3QtPnNycF9kZXYtPmRldi0+ZG1hX2RldmljZSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbWVtY3B5KGlkcy5wb3J0X2lkLCAmdGFyZ2V0LT5pZF9leHQsIDgpOwpAQCAtMTYzNywxNyArMTY0OCwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfcmVsZWFzZV9jbGFzc19kZXYoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2KQorc3RhdGljIHZvaWQgc3JwX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPQotCQljb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGNsYXNzX2Rldik7CisJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzcnBfaG9zdCwgZGV2KTsKIAogCWNvbXBsZXRlKCZob3N0LT5yZWxlYXNlZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0gewogCS5uYW1lICAgID0gImluZmluaWJhbmRfc3JwIiwKLQkucmVsZWFzZSA9IHNycF9yZWxlYXNlX2NsYXNzX2RldgorCS5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldgogfTsKIAogLyoKQEAgLTE4MzUsMTEgKzE4NDYsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzcnBfY3JlYXRlX3RhcmdldChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCitzdGF0aWMgc3NpemVfdCBzcnBfY3JlYXRlX3RhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPQotCQljb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGNsYXNzX2Rldik7CisJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzcnBfaG9zdCwgZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICp0YXJnZXRfaG9zdDsKIAlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQ7CiAJaW50IHJldDsKQEAgLTE4NzEsNyArMTg4Myw4IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlpYl9nZXRfY2FjaGVkX2dpZChob3N0LT5kZXYtPmRldiwgaG9zdC0+cG9ydCwgMCwgJnRhcmdldC0+cGF0aC5zZ2lkKTsKKwlpYl9nZXRfY2FjaGVkX2dpZChob3N0LT5zcnBfZGV2LT5kZXYsIGhvc3QtPnBvcnQsIDAsCisJCQkgICZ0YXJnZXQtPnBhdGguc2dpZCk7CiAKIAlzaG9zdF9wcmludGsoS0VSTl9ERUJVRywgdGFyZ2V0LT5zY3NpX2hvc3QsIFBGWAogCQkgICAgICJuZXcgdGFyZ2V0OiBpZF9leHQgJTAxNmxseCBpb2NfZ3VpZCAlMDE2bGx4IHBrZXkgJTA0eCAiCkBAIC0xOTI2LDI3ICsxOTM5LDI3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGFkZF90YXJnZXQsIFNfSVdVU1IsIE5VTEwsIHNycF9jcmVhdGVfdGFyZ2V0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhZGRfdGFyZ2V0LCBTX0lXVVNSLCBOVUxMLCBzcnBfY3JlYXRlX3RhcmdldCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaWJkZXYoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2liZGV2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPQotCQljb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGNsYXNzX2Rldik7CisJc3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGhvc3QtPmRldi0+ZGV2LT5uYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaG9zdC0+c3JwX2Rldi0+ZGV2LT5uYW1lKTsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGliZGV2LCBTX0lSVUdPLCBzaG93X2liZGV2LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpYmRldiwgU19JUlVHTywgc2hvd19pYmRldiwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfcG9ydChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfcG9ydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPQotCQljb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGNsYXNzX2Rldik7CisJc3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGhvc3QtPnBvcnQpOwogfQogCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIocG9ydCwgU19JUlVHTywgc2hvd19wb3J0LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3J0LCBTX0lSVUdPLCBzaG93X3BvcnQsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHNycF9ob3N0ICpzcnBfYWRkX3BvcnQoc3RydWN0IHNycF9kZXZpY2UgKmRldmljZSwgdTggcG9ydCkKIHsKQEAgLTE5NTksMjcgKzE5NzIsMjcgQEAKIAlJTklUX0xJU1RfSEVBRCgmaG9zdC0+dGFyZ2V0X2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZob3N0LT50YXJnZXRfbG9jayk7CiAJaW5pdF9jb21wbGV0aW9uKCZob3N0LT5yZWxlYXNlZCk7Ci0JaG9zdC0+ZGV2ICA9IGRldmljZTsKKwlob3N0LT5zcnBfZGV2ID0gZGV2aWNlOwogCWhvc3QtPnBvcnQgPSBwb3J0OwogCi0JaG9zdC0+Y2xhc3NfZGV2LmNsYXNzID0gJnNycF9jbGFzczsKLQlob3N0LT5jbGFzc19kZXYuZGV2ICAgPSBkZXZpY2UtPmRldi0+ZG1hX2RldmljZTsKLQlzbnByaW50Zihob3N0LT5jbGFzc19kZXYuY2xhc3NfaWQsIEJVU19JRF9TSVpFLCAic3JwLSVzLSVkIiwKKwlob3N0LT5kZXYuY2xhc3MgPSAmc3JwX2NsYXNzOworCWhvc3QtPmRldi5wYXJlbnQgPSBkZXZpY2UtPmRldi0+ZG1hX2RldmljZTsKKwlzbnByaW50Zihob3N0LT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgInNycC0lcy0lZCIsCiAJCSBkZXZpY2UtPmRldi0+bmFtZSwgcG9ydCk7CiAKLQlpZiAoY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZob3N0LT5jbGFzc19kZXYpKQorCWlmIChkZXZpY2VfcmVnaXN0ZXIoJmhvc3QtPmRldikpCiAJCWdvdG8gZnJlZV9ob3N0OwotCWlmIChjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJmhvc3QtPmNsYXNzX2RldiwgJmNsYXNzX2RldmljZV9hdHRyX2FkZF90YXJnZXQpKQorCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJmhvc3QtPmRldiwgJmRldl9hdHRyX2FkZF90YXJnZXQpKQogCQlnb3RvIGVycl9jbGFzczsKLQlpZiAoY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZob3N0LT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pYmRldikpCisJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmaG9zdC0+ZGV2LCAmZGV2X2F0dHJfaWJkZXYpKQogCQlnb3RvIGVycl9jbGFzczsKLQlpZiAoY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZob3N0LT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wb3J0KSkKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZob3N0LT5kZXYsICZkZXZfYXR0cl9wb3J0KSkKIAkJZ290byBlcnJfY2xhc3M7CiAKIAlyZXR1cm4gaG9zdDsKIAogZXJyX2NsYXNzOgotCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZob3N0LT5jbGFzc19kZXYpOworCWRldmljZV91bnJlZ2lzdGVyKCZob3N0LT5kZXYpOwogCiBmcmVlX2hvc3Q6CiAJa2ZyZWUoaG9zdCk7CkBAIC0yMDg0LDcgKzIwOTcsNyBAQAogCXNycF9kZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmc3JwX2NsaWVudCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zdCwgdG1wX2hvc3QsICZzcnBfZGV2LT5kZXZfbGlzdCwgbGlzdCkgewotCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmaG9zdC0+Y2xhc3NfZGV2KTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmhvc3QtPmRldik7CiAJCS8qCiAJCSAqIFdhaXQgZm9yIHRoZSBzeXNmcyBlbnRyeSB0byBnbyBhd2F5LCBzbyB0aGF0IG5vIG5ldwogCQkgKiB0YXJnZXQgcG9ydHMgY2FuIGJlIGNyZWF0ZWQuCkBAIC0yMTM4LDYgKzIxNTEsMTEgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKHNycF9zZ190YWJsZXNpemUgPiAyNTUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkNsYW1waW5nIHNycF9zZ190YWJsZXNpemUgdG8gMjU1XG4iKTsKKwkJc3JwX3NnX3RhYmxlc2l6ZSA9IDI1NTsKKwl9CisKIAlpYl9zcnBfdHJhbnNwb3J0X3RlbXBsYXRlID0KIAkJc3JwX2F0dGFjaF90cmFuc3BvcnQoJmliX3NycF90cmFuc3BvcnRfZnVuY3Rpb25zKTsKIAlpZiAoIWliX3NycF90cmFuc3BvcnRfdGVtcGxhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCmluZGV4IGNiNmViODEuLjYzZDJhZTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaApAQCAtOTcsOSArOTcsOSBAQAogfTsKIAogc3RydWN0IHNycF9ob3N0IHsKLQlzdHJ1Y3Qgc3JwX2RldmljZSAgICAgICpkZXY7CisJc3RydWN0IHNycF9kZXZpY2UgICAgICAqc3JwX2RldjsKIAl1OAkJCXBvcnQ7Ci0Jc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7CisJc3RydWN0IGRldmljZQkJZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQJdGFyZ2V0X2xpc3Q7CiAJc3BpbmxvY2tfdAkJdGFyZ2V0X2xvY2s7CiAJc3RydWN0IGNvbXBsZXRpb24JcmVsZWFzZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2FwbS1wb3dlci5jIGIvZHJpdmVycy9pbnB1dC9hcG0tcG93ZXIuYwppbmRleCBjMzZkMTEwLi43ZDYxYTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2FwbS1wb3dlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvYXBtLXBvd2VyLmMKQEAgLTYzLDggKzYzLDYgQEAKIAloYW5kbGUtPmhhbmRsZXIgPSBoYW5kbGVyOwogCWhhbmRsZS0+bmFtZSA9ICJhcG0tcG93ZXIiOwogCi0JaGFuZGxlci0+cHJpdmF0ZSA9IGhhbmRsZTsKLQogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfaGFuZGxlKGhhbmRsZSk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtODcsMTEgKzg1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFwbXBvd2VyX2Rpc2Nvbm5lY3Qoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlcikKK3N0YXRpYyB2b2lkIGFwbXBvd2VyX2Rpc2Nvbm5lY3Qoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlKQogewotCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSA9IGhhbmRsZXItPnByaXZhdGU7Ci0KIAlpbnB1dF9jbG9zZV9kZXZpY2UoaGFuZGxlKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2hhbmRsZShoYW5kbGUpOwogCWtmcmVlKGhhbmRsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCAwNzI3YjBhLi5iMzI5ODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC0xMjQsNiArMTI0LDcgQEAKIHsKIAlzdHJ1Y3QgZXZkZXYgKmV2ZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGV2ZGV2LCBkZXYpOwogCisJaW5wdXRfcHV0X2RldmljZShldmRldi0+aGFuZGxlLmRldik7CiAJa2ZyZWUoZXZkZXYpOwogfQogCkBAIC04OTMsNyArODk0LDcgQEAKIAlldmRldi0+ZXhpc3QgPSAxOwogCWV2ZGV2LT5taW5vciA9IG1pbm9yOwogCi0JZXZkZXYtPmhhbmRsZS5kZXYgPSBkZXY7CisJZXZkZXYtPmhhbmRsZS5kZXYgPSBpbnB1dF9nZXRfZGV2aWNlKGRldik7CiAJZXZkZXYtPmhhbmRsZS5uYW1lID0gZXZkZXYtPm5hbWU7CiAJZXZkZXYtPmhhbmRsZS5oYW5kbGVyID0gaGFuZGxlcjsKIAlldmRldi0+aGFuZGxlLnByaXZhdGUgPSBldmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDIyYjI3ODkuLjY1ZDcwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtMTcxLDYgKzE3MSw3IEBACiB7CiAJc3RydWN0IGpveWRldiAqam95ZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGpveWRldiwgZGV2KTsKIAorCWlucHV0X3B1dF9kZXZpY2Uoam95ZGV2LT5oYW5kbGUuZGV2KTsKIAlrZnJlZShqb3lkZXYpOwogfQogCkBAIC03NTAsNyArNzUxLDcgQEAKIAlqb3lkZXYtPm1pbm9yID0gbWlub3I7CiAKIAlqb3lkZXYtPmV4aXN0ID0gMTsKLQlqb3lkZXYtPmhhbmRsZS5kZXYgPSBkZXY7CisJam95ZGV2LT5oYW5kbGUuZGV2ID0gaW5wdXRfZ2V0X2RldmljZShkZXYpOwogCWpveWRldi0+aGFuZGxlLm5hbWUgPSBqb3lkZXYtPm5hbWU7CiAJam95ZGV2LT5oYW5kbGUuaGFuZGxlciA9IGhhbmRsZXI7CiAJam95ZGV2LT5oYW5kbGUucHJpdmF0ZSA9IGpveWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCA4ZWE3MDliLi5lZmQ3MGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0zMTQsNCArMzE0LDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBiZjU0eC1rZXlzLgogCitjb25maWcgS0VZQk9BUkRfU0hfS0VZU0MKKwl0cmlzdGF0ZSAiU3VwZXJIIEtFWVNDIGtleXBhZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1VQRVJICisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBrZXlwYWQgYXR0YWNoZWQgdG8gdGhlIEtFWVNDIGJsb2NrCisJICBvbiBTdXBlckggcHJvY2Vzc29ycyBzdWNoIGFzIHNoNzcyMiBhbmQgc2g3MzQzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaF9rZXlzYy4KIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQppbmRleCBlNzQxZjQwLi4wZWRjOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKQEAgLTI2LDMgKzI2LDQgQEAKIG9iai0kKENPTkZJR19LRVlCT0FSRF9IUDdYWCkJCSs9IGpvcm5hZGE3MjBfa2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9NQVBMRSkJCSs9IG1hcGxlX2tleWIubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX0JGSU4pCQkrPSBiZjU0eC1rZXlzLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQykJCSs9IHNoX2tleXNjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwppbmRleCA3OTBmZWQzLi41ZDZjYzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvY29yZ2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KIAogI2RlZmluZSBLQl9ST1dTCQkJCTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcHhhMjd4X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKaW5kZXggNjIyNGMyZi4uNGU2NTFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKQEAgLTUwLDkgKzUwLDkgQEAKICNkZWZpbmUgS1BLREkgICAgICAgICAgIDB4MDA0OAogCiAvKiBiaXQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgS1BDX01LUk4obikJKCgoKG4pICYgMHg3KSAtIDEpIDw8IDI2KSAvKiBtYXRyaXgga2V5IHJvdyBudW1iZXIgKi8KLSNkZWZpbmUgS1BDX01LQ04obikJKCgoKG4pICYgMHg3KSAtIDEpIDw8IDIzKSAvKiBtYXRyaXgga2V5IGNvbHVtbiBudW1iZXIgKi8KLSNkZWZpbmUgS1BDX0RLTihuKQkoKCgobikgJiAweDcpIC0gMSkgPDwgNikgIC8qIGRpcmVjdCBrZXkgbnVtYmVyICovCisjZGVmaW5lIEtQQ19NS1JOKG4pCSgoKChuKSAtIDEpICYgMHg3KSA8PCAyNikgLyogbWF0cml4IGtleSByb3cgbnVtYmVyICovCisjZGVmaW5lIEtQQ19NS0NOKG4pCSgoKChuKSAtIDEpICYgMHg3KSA8PCAyMykgLyogbWF0cml4IGtleSBjb2x1bW4gbnVtYmVyICovCisjZGVmaW5lIEtQQ19ES04obikJKCgoKG4pIC0gMSkgJiAweDcpIDw8IDYpICAvKiBkaXJlY3Qga2V5IG51bWJlciAqLwogCiAjZGVmaW5lIEtQQ19BUyAgICAgICAgICAoMHgxIDw8IDMwKSAgLyogQXV0b21hdGljIFNjYW4gYml0ICovCiAjZGVmaW5lIEtQQ19BU0FDVCAgICAgICAoMHgxIDw8IDI5KSAgLyogQXV0b21hdGljIFNjYW4gb24gQWN0aXZpdHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg2YWJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogU3VwZXJIIEtFWVNDIEtleXBhZCBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFnbnVzIERhbW0KKyAqCisgKiBCYXNlZCBvbiBncGlvX2tleXMuYywgQ29weXJpZ2h0IDIwMDUgUGhpbCBCbHVuZGVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vc2hfa2V5c2MuaD4KKworI2RlZmluZSBLWUNSMV9PRkZTICAgMHgwMAorI2RlZmluZSBLWUNSMl9PRkZTICAgMHgwNAorI2RlZmluZSBLWUlORFJfT0ZGUyAgMHgwOAorI2RlZmluZSBLWU9VVERSX09GRlMgMHgwYworCisjZGVmaW5lIEtZQ1IyX0lSUV9MRVZFTCAgICAweDEwCisjZGVmaW5lIEtZQ1IyX0lSUV9ESVNBQkxFRCAweDAwCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIga3ltZCwga2V5b3V0LCBrZXlpbjsKK30gc2hfa2V5c2NfbW9kZVtdID0geworCVtTSF9LRVlTQ19NT0RFXzFdID0geyAwLCA2LCA1IH0sCisJW1NIX0tFWVNDX01PREVfMl0gPSB7IDEsIDUsIDYgfSwKKwlbU0hfS0VZU0NfTU9ERV8zXSA9IHsgMiwgNCwgNyB9LAorfTsKKworc3RydWN0IHNoX2tleXNjX3ByaXYgeworCXZvaWQgX19pb21lbSAqaW9tZW1fYmFzZTsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfa2V5czsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBwZGF0YTsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9rZXlzY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXZfaWQ7CisJc3RydWN0IHNoX2tleXNjX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyAqcGRhdGEgPSAmcHJpdi0+cGRhdGE7CisJdW5zaWduZWQgbG9uZyBrZXlzLCBrZXlzMSwga2V5czAsIG1hc2s7CisJdW5zaWduZWQgY2hhciBrZXlpbl9zZXQsIHRtcDsKKwlpbnQgaSwgazsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgImlzciFcbiIpOworCisJa2V5czEgPSB+MDsKKwlrZXlzMCA9IDA7CisKKwlkbyB7CisJCWtleXMgPSAwOworCQlrZXlpbl9zZXQgPSAwOworCisJCWlvd3JpdGUxNihLWUNSMl9JUlFfRElTQUJMRUQsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5b3V0OyBpKyspIHsKKwkJCWlvd3JpdGUxNigweGZmZiBeICgzIDw8IChpICogMikpLAorCQkJCSAgcHJpdi0+aW9tZW1fYmFzZSArIEtZT1VURFJfT0ZGUyk7CisJCQl1ZGVsYXkocGRhdGEtPmRlbGF5KTsKKwkJCXRtcCA9IGlvcmVhZDE2KHByaXYtPmlvbWVtX2Jhc2UgKyBLWUlORFJfT0ZGUyk7CisJCQlrZXlzIHw9IHRtcCA8PCAoc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5aW4gKiBpKTsKKwkJCXRtcCBePSAoMSA8PCBzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5rZXlpbikgLSAxOworCQkJa2V5aW5fc2V0IHw9IHRtcDsKKwkJfQorCisJCWlvd3JpdGUxNigwLCBwcml2LT5pb21lbV9iYXNlICsgS1lPVVREUl9PRkZTKTsKKwkJaW93cml0ZTE2KEtZQ1IyX0lSUV9MRVZFTCB8IChrZXlpbl9zZXQgPDwgOCksCisJCQkgIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKworCQlrZXlzIF49IH4wOworCQlrZXlzICY9ICgxIDw8IChzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5rZXlpbiAqCisJCQkgICAgICAgc2hfa2V5c2NfbW9kZVtwZGF0YS0+bW9kZV0ua2V5b3V0KSkgLSAxOworCQlrZXlzMSAmPSBrZXlzOworCQlrZXlzMCB8PSBrZXlzOworCisJCWRldl9kYmcoJnBkZXYtPmRldiwgImtleXMgMHglMDhseFxuIiwga2V5cyk7CisKKwl9IHdoaWxlIChpb3JlYWQxNihwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUykgJiAweDAxKTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgImxhc3Rfa2V5cyAweCUwOGx4IGtleXMwIDB4JTA4bHgga2V5czEgMHglMDhseFxuIiwKKwkJcHJpdi0+bGFzdF9rZXlzLCBrZXlzMCwga2V5czEpOworCisJZm9yIChpID0gMDsgaSA8IFNIX0tFWVNDX01BWEtFWVM7IGkrKykgeworCQlrID0gcGRhdGEtPmtleWNvZGVzW2ldOworCQlpZiAoIWspCisJCQljb250aW51ZTsKKworCQltYXNrID0gMSA8PCBpOworCisJCWlmICghKChwcml2LT5sYXN0X2tleXMgXiBrZXlzMCkgJiBtYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoa2V5czEgfCBrZXlzMCkgJiBtYXNrKSB7CisJCQlpbnB1dF9ldmVudChwcml2LT5pbnB1dCwgRVZfS0VZLCBrLCAxKTsKKwkJCXByaXYtPmxhc3Rfa2V5cyB8PSBtYXNrOworCQl9CisKKwkJaWYgKCEoa2V5czEgJiBtYXNrKSkgeworCQkJaW5wdXRfZXZlbnQocHJpdi0+aW5wdXQsIEVWX0tFWSwgaywgMCk7CisJCQlwcml2LT5sYXN0X2tleXMgJj0gfm1hc2s7CisJCX0KKworCX0KKwlpbnB1dF9zeW5jKHByaXYtPmlucHV0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2RlZmluZSByZXNfc2l6ZShyZXMpICgocmVzKS0+ZW5kIC0gKHJlcyktPnN0YXJ0ICsgMSkKKworc3RhdGljIGludCBfX2RldmluaXQgc2hfa2V5c2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcHJpdjsKKwlzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyAqcGRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJaW50IGksIGs7CisJaW50IGlycSwgZXJyb3I7CisKKwlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgZGVmaW5lZFxuIik7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBlcnIwOworCX0KKworCWVycm9yID0gLUVOWElPOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgaXJxXG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJbWVtY3B5KCZwcml2LT5wZGF0YSwgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHNpemVvZihwcml2LT5wZGF0YSkpOworCXBkYXRhID0gJnByaXYtPnBkYXRhOworCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19zaXplKHJlcyksIHBkZXYtPm5hbWUpOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlwcml2LT5pb21lbV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc19zaXplKHJlcykpOworCWlmIChwcml2LT5pb21lbV9iYXNlID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQllcnJvciA9IC1FTlhJTzsKKwkJZ290byBlcnIyOworCX0KKworCXByaXYtPmlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFwcml2LT5pbnB1dCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycjM7CisJfQorCisJaW5wdXQgPSBwcml2LT5pbnB1dDsKKwlpbnB1dC0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCisJaW5wdXQtPm5hbWUgPSBwZGV2LT5uYW1lOworCWlucHV0LT5waHlzID0gInNoLWtleXNjLWtleXMvaW5wdXQwIjsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWlucHV0LT5pZC52ZW5kb3IgPSAweDAwMDE7CisJaW5wdXQtPmlkLnByb2R1Y3QgPSAweDAwMDE7CisJaW5wdXQtPmlkLnZlcnNpb24gPSAweDAxMDA7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgc2hfa2V5c2NfaXNyLCAwLCBwZGV2LT5uYW1lLCBwZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJRXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBTSF9LRVlTQ19NQVhLRVlTOyBpKyspIHsKKwkJayA9IHBkYXRhLT5rZXljb2Rlc1tpXTsKKwkJaWYgKGspCisJCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dCwgRVZfS0VZLCBrKTsKKwl9CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGVycjU7CisJfQorCisJaW93cml0ZTE2KChzaF9rZXlzY19tb2RlW3BkYXRhLT5tb2RlXS5reW1kIDw8IDgpIHwKKwkJICBwZGF0YS0+c2Nhbl90aW1pbmcsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMV9PRkZTKTsKKwlpb3dyaXRlMTYoMCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZT1VURFJfT0ZGUyk7CisJaW93cml0ZTE2KEtZQ1IyX0lSUV9MRVZFTCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpOworCXJldHVybiAwOworIGVycjU6CisJZnJlZV9pcnEoaXJxLCBwZGV2KTsKKyBlcnI0OgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKyBlcnIzOgorCWlvdW5tYXAocHJpdi0+aW9tZW1fYmFzZSk7CisgZXJyMjoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUocmVzKSk7CisgZXJyMToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShwcml2KTsKKyBlcnIwOgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2hfa2V5c2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX2tleXNjX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWlvd3JpdGUxNihLWUNSMl9JUlFfRElTQUJMRUQsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHByaXYtPmlucHV0KTsKKwlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBwZGV2KTsKKwlpb3VubWFwKHByaXYtPmlvbWVtX2Jhc2UpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gMDsKK30KKworCisjZGVmaW5lIHNoX2tleXNjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzaF9rZXlzY19yZXN1bWUgTlVMTAorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX2tleXNjX2RldmljZV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNoX2tleXNjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfa2V5c2NfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IHNoX2tleXNjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzaF9rZXlzY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoX2tleXNjIiwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9rZXlzY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2hfa2V5c2NfZGV2aWNlX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzaF9rZXlzY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX2tleXNjX2RldmljZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaF9rZXlzY19pbml0KTsKK21vZHVsZV9leGl0KHNoX2tleXNjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggS0VZU0MgS2V5cGFkIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCmluZGV4IDFkNTlhMmQuLjBiZTc0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9zcGl0ei5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogCiAjZGVmaW5lIEtCX1JPV1MJCQk3CiAjZGVmaW5lIEtCX0NPTFMJCQkxMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCA4YjEwZDlmLi5jNTI2M2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtNDIsMTQgKzQyLDE0IEBACiAKIGNvbmZpZyBJTlBVVF9BUEFORUwKIAl0cmlzdGF0ZSAiRnVqaXRzdSBMaWZlYm9vayBBcHBsaWNhdGlvbiBQYW5lbCBidXR0b25zIgotCWRlcGVuZHMgb24gWDg2Ci0Jc2VsZWN0IEkyQ19JODAxCisJZGVwZW5kcyBvbiBYODYgJiYgSTJDICYmIExFRFNfQ0xBU1MKIAlzZWxlY3QgSU5QVVRfUE9MTERFVgogCXNlbGVjdCBDSEVDS19TSUdOQVRVUkUKIAloZWxwCiAJIFNheSBZIGhlcmUgZm9yIHN1cHBvcnQgb2YgdGhlIEFwcGxpY2F0aW9uIFBhbmVsIGJ1dHRvbnMsIHVzZWQgb24KIAkgRnVqaXRzdSBMaWZlYm9vay4gVGhlc2UgYXJlIGF0dGFjaGVkIHRvIHRoZSBtYWluYm9hcmQgdGhyb3VnaAotCSBhbiBTTUJ1cyBpbnRlcmZhY2UgbWFuYWdlZCBieSB0aGUgSTJDIEludGVsIElDSCAoaTgwMSkgZHJpdmVyLgorCSBhbiBTTUJ1cyBpbnRlcmZhY2UgbWFuYWdlZCBieSB0aGUgSTJDIEludGVsIElDSCAoaTgwMSkgZHJpdmVyLAorCSB3aGljaCB5b3Ugc2hvdWxkIGFsc28gYnVpbGQgZm9yIHRoaXMga2VybmVsLgogCiAJIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbAogCSBiZSBjYWxsZWQgYXBhbmVsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2NvYmFsdF9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwppbmRleCA0ODMzYjFhLi41NTExZWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29iYWx0IGJ1dHRvbiBpbnRlcmZhY2UgZHJpdmVyLgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFlvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0LXBvbGxkZXYuaD4KQEAgLTU1LDcgKzU1LDcgQEAKIAlzdGF0dXMgPSB+cmVhZGwoYmRldi0+cmVnKSA+PiAyNDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJkZXYtPmtleW1hcCk7IGkrKykgewotCQlpZiAoc3RhdHVzICYgKDFVTCA8PCBpKSkgeworCQlpZiAoc3RhdHVzICYgKDFVIDw8IGkpKSB7CiAJCQlpZiAoKytiZGV2LT5jb3VudFtpXSA9PSBCVVRUT05TX0NPVU5UX1RIUkVTSE9MRCkgewogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCBpKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBiZGV2LT5rZXltYXBbaV0sIDEpOwpAQCAtOTcsMTYgKzk3LDE2IEBACiAJaW5wdXQtPm5hbWUgPSAiQ29iYWx0IGJ1dHRvbnMiOwogCWlucHV0LT5waHlzID0gImNvYmFsdC9pbnB1dDAiOwogCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JaW5wdXQtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlpbnB1dC0+a2V5Y29kZSA9IHBkZXYtPmtleW1hcDsKLQlpbnB1dC0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUocGRldi0+a2V5bWFwKTsKKwlpbnB1dC0+a2V5Y29kZSA9IGJkZXYtPmtleW1hcDsKKwlpbnB1dC0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoYmRldi0+a2V5bWFwKTsKIAlpbnB1dC0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOwogCiAJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4pOwogCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnV0dG9uc19tYXApOyBpKyspCi0JCV9fc2V0X2JpdChpbnB1dC0+a2V5Y29kZVtpXSwgaW5wdXQtPmtleWJpdCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29iYWx0X21hcCk7IGkrKykKKwkJX19zZXRfYml0KGJkZXYtPmtleW1hcFtpXSwgaW5wdXQtPmtleWJpdCk7CiAJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dC0+a2V5Yml0KTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwppbmRleCBkMmFkZTc0Li43OThkODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKQEAgLTI1LDYgKzI1LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJpeHA0eHggYmVlcGVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTppeHA0eHgtYmVlcGVyIik7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmVlcF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwppbmRleCBiMzQ2YTNiLi4zODVlMzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwpAQCAtMTE2LDggKzExNiw4IEBACiAJfQogCiAJaWYgKHByaXYtPmktPmZsYWdzICYgQUxQU19GV19CS18xKSB7Ci0JCWJhY2sgPSBwYWNrZXRbMl0gJiA0OwotCQlmb3J3YXJkID0gcGFja2V0WzBdICYgMHgxMDsKKwkJYmFjayA9IHBhY2tldFswXSAmIDB4MTA7CisJCWZvcndhcmQgPSBwYWNrZXRbMl0gJiA0OwogCX0KIAogCWlmIChwcml2LT5pLT5mbGFncyAmIEFMUFNfRldfQktfMikgewpAQCAtNDgzLDYgKzQ4Myw3IEBACiAJZGV2Mi0+aWQudmVuZG9yICA9IDB4MDAwMjsKIAlkZXYyLT5pZC5wcm9kdWN0ID0gUFNNT1VTRV9BTFBTOwogCWRldjItPmlkLnZlcnNpb24gPSAweDAwMDA7CisJZGV2Mi0+ZGV2LnBhcmVudCA9ICZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldjsKIAogCWRldjItPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7CiAJZGV2Mi0+cmVsYml0W0JJVF9XT1JEKFJFTF9YKV0gfD0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FwcGxldG91Y2guYwppbmRleCBiNDQyM2E0Li44ZGQzOTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FwcGxldG91Y2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FwcGxldG91Y2guYwpAQCAtNjIsNiArNjIsMTAgQEAKICNkZWZpbmUgR0VZU0VSNF9JU09fUFJPRFVDVF9JRAkweDAyMUIKICNkZWZpbmUgR0VZU0VSNF9KSVNfUFJPRFVDVF9JRAkweDAyMUMKIAorI2RlZmluZSBHRVlTRVI0X0hGX0FOU0lfUFJPRFVDVF9JRAkweDAyMjkKKyNkZWZpbmUgR0VZU0VSNF9IRl9JU09fUFJPRFVDVF9JRAkweDAyMkEKKyNkZWZpbmUgR0VZU0VSNF9IRl9KSVNfUFJPRFVDVF9JRAkweDAyMkIKKwogI2RlZmluZSBBVFBfREVWSUNFKHByb2QpCQkJCQlcCiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAkJXAogCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAkJXApAQCAtOTMsNiArOTcsMTAgQEAKIAl7IEFUUF9ERVZJQ0UoR0VZU0VSNF9JU09fUFJPRFVDVF9JRCkgfSwKIAl7IEFUUF9ERVZJQ0UoR0VZU0VSNF9KSVNfUFJPRFVDVF9JRCkgfSwKIAorCXsgQVRQX0RFVklDRShHRVlTRVI0X0hGX0FOU0lfUFJPRFVDVF9JRCkgfSwKKwl7IEFUUF9ERVZJQ0UoR0VZU0VSNF9IRl9JU09fUFJPRFVDVF9JRCkgfSwKKwl7IEFUUF9ERVZJQ0UoR0VZU0VSNF9IRl9KSVNfUFJPRFVDVF9JRCkgfSwKKwogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyB9CiB9OwpAQCAtMjE3LDcgKzIyNSwxMCBAQAogCQkocHJvZHVjdElkID09IEdFWVNFUjNfSklTX1BST0RVQ1RfSUQpIHx8CiAJCShwcm9kdWN0SWQgPT0gR0VZU0VSNF9BTlNJX1BST0RVQ1RfSUQpIHx8CiAJCShwcm9kdWN0SWQgPT0gR0VZU0VSNF9JU09fUFJPRFVDVF9JRCkgfHwKLQkJKHByb2R1Y3RJZCA9PSBHRVlTRVI0X0pJU19QUk9EVUNUX0lEKTsKKwkJKHByb2R1Y3RJZCA9PSBHRVlTRVI0X0pJU19QUk9EVUNUX0lEKSB8fAorCQkocHJvZHVjdElkID09IEdFWVNFUjRfSEZfQU5TSV9QUk9EVUNUX0lEKSB8fAorCQkocHJvZHVjdElkID09IEdFWVNFUjRfSEZfSVNPX1BST0RVQ1RfSUQpIHx8CisJCShwcm9kdWN0SWQgPT0gR0VZU0VSNF9IRl9KSVNfUFJPRFVDVF9JRCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggYmJiZTVlOC4uYjk4OTc0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtNDE0LDYgKzQxNCw3IEBACiB7CiAJc3RydWN0IG1vdXNlZGV2ICptb3VzZWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtb3VzZWRldiwgZGV2KTsKIAorCWlucHV0X3B1dF9kZXZpY2UobW91c2VkZXYtPmhhbmRsZS5kZXYpOwogCWtmcmVlKG1vdXNlZGV2KTsKIH0KIApAQCAtODY1LDcgKzg2Niw3IEBACiAKIAltb3VzZWRldi0+bWlub3IgPSBtaW5vcjsKIAltb3VzZWRldi0+ZXhpc3QgPSAxOwotCW1vdXNlZGV2LT5oYW5kbGUuZGV2ID0gZGV2OworCW1vdXNlZGV2LT5oYW5kbGUuZGV2ID0gaW5wdXRfZ2V0X2RldmljZShkZXYpOwogCW1vdXNlZGV2LT5oYW5kbGUubmFtZSA9IG1vdXNlZGV2LT5uYW1lOwogCW1vdXNlZGV2LT5oYW5kbGUuaGFuZGxlciA9IGhhbmRsZXI7CiAJbW91c2VkZXYtPmhhbmRsZS5wcml2YXRlID0gbW91c2VkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkY19tbGMuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjX21sYy5jCmluZGV4IGM0NWVhNzQuLmYxZmQzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjX21sYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjX21sYy5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2RlZmluZSBQUkVGSVggIkhQIFNEQyBNTEM6ICIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1zbmlybS5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1zbmlybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOWE5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNuaXJtLmgKQEAgLTAsMCArMSw3NSBAQAorI2lmbmRlZiBfSTgwNDJfU05JUk1fSAorI2RlZmluZSBfSTgwNDJfU05JUk1fSAorCisjaW5jbHVkZSA8YXNtL3NuaS5oPgorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogTmFtZXMuCisgKi8KKworI2RlZmluZSBJODA0Ml9LQkRfUEhZU19ERVNDICJvbmJvYXJkL3NlcmlvMCIKKyNkZWZpbmUgSTgwNDJfQVVYX1BIWVNfREVTQyAib25ib2FyZC9zZXJpbzEiCisjZGVmaW5lIEk4MDQyX01VWF9QSFlTX0RFU0MgIm9uYm9hcmQvc2VyaW8lZCIKKworLyoKKyAqIElSUXMuCisgKi8KK3N0YXRpYyBpbnQgaTgwNDJfa2JkX2lycTsKK3N0YXRpYyBpbnQgaTgwNDJfYXV4X2lycTsKKyNkZWZpbmUgSTgwNDJfS0JEX0lSUSBpODA0Ml9rYmRfaXJxCisjZGVmaW5lIEk4MDQyX0FVWF9JUlEgaTgwNDJfYXV4X2lycQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICprYmRfaW9iYXNlOworCisjZGVmaW5lIEk4MDQyX0NPTU1BTkRfUkVHCShrYmRfaW9iYXNlICsgMHg2NFVMKQorI2RlZmluZSBJODA0Ml9EQVRBX1JFRwkJKGtiZF9pb2Jhc2UgKyAweDYwVUwpCisKK3N0YXRpYyBpbmxpbmUgaW50IGk4MDQyX3JlYWRfZGF0YSh2b2lkKQoreworCXJldHVybiByZWFkYihrYmRfaW9iYXNlICsgMHg2MFVMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTgwNDJfcmVhZF9zdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gcmVhZGIoa2JkX2lvYmFzZSArIDB4NjRVTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpODA0Ml93cml0ZV9kYXRhKGludCB2YWwpCit7CisJd3JpdGViKHZhbCwga2JkX2lvYmFzZSArIDB4NjBVTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpODA0Ml93cml0ZV9jb21tYW5kKGludCB2YWwpCit7CisJd3JpdGViKHZhbCwga2JkX2lvYmFzZSArIDB4NjRVTCk7Cit9CitzdGF0aWMgaW5saW5lIGludCBpODA0Ml9wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJLyogUk0yMDAgaXMgc3RyYW5nZSAuLi4gKi8KKwlpZiAoc25pX2JyZF90eXBlID09IFNOSV9CUkRfUk0yMDApIHsKKwkJa2JkX2lvYmFzZSA9IGlvcmVtYXAoMHgxNjAwMDAwMCwgNCk7CisJCWk4MDQyX2tiZF9pcnEgPSAzMzsKKwkJaTgwNDJfYXV4X2lycSA9IDQ0OworCX0gZWxzZSB7CisJCWtiZF9pb2Jhc2UgPSBpb3JlbWFwKDB4MTQwMDAwMDAsIDQpOworCQlpODA0Ml9rYmRfaXJxID0gMTsKKwkJaTgwNDJfYXV4X2lycSA9IDEyOworCX0KKwlpZiAoIWtiZF9pb2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpODA0Ml9wbGF0Zm9ybV9leGl0KHZvaWQpCit7CisKK30KKworI2VuZGlmIC8qIF9JODA0Ml9TTklSTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAppbmRleCA2NjJlODQ0Li42MDkzMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTI3Nyw2ICsyNzcsMTMgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTTYzNi9BNzM3IHBsYXRmb3JtIiksCiAJCX0sCiAJfSwKKwl7CisJCS5pZGVudCA9ICJMZW5vdm8gMzAwMCBuMTAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJMRU5PVk8iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiMzAwMCBOMTAwIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCAyNzYzMzk0Li42NWE3NGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC0xMTUxLDcgKzExNTEsNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgaTgwNDJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBlcnJvcjsKLQljaGFyIHBhcmFtOwogCiAJZXJyb3IgPSBpODA0Ml9jb250cm9sbGVyX3NlbGZ0ZXN0KCk7CiAJaWYgKGVycm9yKQpAQCAtMTE3NCw3ICsxMTczLDcgQEAKIAl9CiAjaWZkZWYgQ09ORklHX1g4NgogCWlmIChpODA0Ml9kcml0ZWspIHsKLQkJcGFyYW0gPSAweDkwOworCQljaGFyIHBhcmFtID0gMHg5MDsKIAkJZXJyb3IgPSBpODA0Ml9jb21tYW5kKCZwYXJhbSwgMHgxMDU5KTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuaAppbmRleCBkZDIyZDkxLi5jYmMxYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5oCkBAIC0xNiw4ICsxNiwxMCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9KQVpaKQogI2luY2x1ZGUgImk4MDQyLWphenppby5oIgotI2VsaWYgZGVmaW5lZChDT05GSUdfU0dJX0lQMjIpCisjZWxpZiBkZWZpbmVkKENPTkZJR19TR0lfSEFTX0k4MDQyKQogI2luY2x1ZGUgImk4MDQyLWlwMjJpby5oIgorI2VsaWYgZGVmaW5lZChDT05GSUdfU05JX1JNKQorI2luY2x1ZGUgImk4MDQyLXNuaXJtLmgiCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUEMpCiAjaW5jbHVkZSAiaTgwNDItcHBjaW8uaCIKICNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmgKaW5kZXggNjU0MmVkYi4uYWNmOTgzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaAorKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCkBAIC0xMSw3ICsxMSw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBFZ2dlcgkJPGVnZ2VyQHN1c2UuZGU+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDAxIEZyZWRlcmljIExlcGllZAkJPGZsZXBpZWRAbWFuZHJha2Vzb2Z0LmNvbT4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDQgUGFuYWdpb3RpcyBJc3NhcmlzCTxwYW5hZ2lvdGlzLmlzc2FyaXNAbWVjaC5rdWxldXZlbi5hYy5iZT4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNyBQaW5nIENoZW5nCQk8cGluZ2NAd2Fjb20uY29tPgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA4IFBpbmcgQ2hlbmcJCTxwaW5nY0B3YWNvbS5jb20+CiAgKgogICogIENoYW5nZUxvZzoKICAqICAgICAgdjAuMSAodnApICAtIEluaXRpYWwgcmVsZWFzZQpAQCAtNjUsNiArNjUsNyBAQAogICoJCSAgIC0gYW5kIHdhY29tX3dhYy5jIGRlYWxzIHdpdGggV2Fjb20gc3BlY2lmaWMgY29kZQogICoJCSAgIC0gU3VwcG9ydCBJbnR1b3MzIDR4NgogICogICAgICB2MS40NyAocGMpIC0gQWRkZWQgc3VwcG9ydCBmb3IgQmFtYm9vCisgKiAgICAgIHYxLjQ4IChwYykgLSBBZGRlZCBzdXBwb3J0IGZvciBCYW1ib28xLCBCYW1ib29GdW4sIGFuZCBDaW50aXEgMTJXWAogICovCiAKIC8qCkBAIC04NSw3ICs4Niw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40NyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjQ4IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+IgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFdhY29tIEdyYXBoaXJlIGFuZCBXYWNvbSBJbnR1b3MgdGFibGV0IGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKQEAgLTEyNSw2ICsxMjYsNyBAQAogZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X3BsKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKIGV4dGVybiB2b2lkIGlucHV0X2Rldl9wdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CiBleHRlcm4gdm9pZCBpbnB1dF9kZXZfbW8oc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOworZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X2JlZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CiBleHRlcm4gX191MTYgd2Fjb21fbGUxNl90b19jcHUodW5zaWduZWQgY2hhciAqZGF0YSk7CiBleHRlcm4gX191MTYgd2Fjb21fYmUxNl90b19jcHUodW5zaWduZWQgY2hhciAqZGF0YSk7CiBleHRlcm4gc3RydWN0IHdhY29tX2ZlYXR1cmVzICogZ2V0X3dhY29tX2ZlYXR1cmUoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKaW5kZXggZDY0YjFlYTEuLjQxY2FhZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC0xNzEsNiArMTcxLDcgQEAKIAlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldIHw9IEJJVF9NQVNLKEJUTl8wKSB8CiAJCUJJVF9NQVNLKEJUTl8xKSB8IEJJVF9NQVNLKEJUTl8yKSB8IEJJVF9NQVNLKEJUTl8zKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWCwgMCwgNDA5NiwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWiwgLTkwMCwgODk5LCAwLCAwKTsKIH0KIAogdm9pZCBpbnB1dF9kZXZfaTMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCkBAIC0xODAsNiArMTgxLDExIEBACiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlksIDAsIDQwOTYsIDAsIDApOwogfQogCit2b2lkIGlucHV0X2Rldl9iZWUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCit7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0xFRlQpXSB8PSBCSVRfTUFTSyhCVE5fOCkgfCBCSVRfTUFTSyhCVE5fOSk7Cit9CisKIHZvaWQgaW5wdXRfZGV2X2koc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCiB7CiAJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9NU0MpIHwgQklUX01BU0soRVZfUkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKaW5kZXggZmMwM2JhMi4uZmZlMzM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKQEAgLTE2Myw3ICsxNjMsOSBAQAogCX0KIAogCWlkID0gU1RZTFVTX0RFVklDRV9JRDsKLQlpZiAoZGF0YVsxXSAmIDB4ODApIHsgLyogaW4gcHJveCAqLworCWlmICgoZGF0YVsxXSAmIDB4ODApICYmICgoZGF0YVsxXSAmIDB4MDcpIHx8IGRhdGFbMl0gfHwgZGF0YVszXSB8fCBkYXRhWzRdCisJCQl8fCBkYXRhWzVdIHx8IGRhdGFbNl0gfHwgKGRhdGFbN10gJiAweDA3KSkpIHsKKwkJLyogaW4gcHJveCBhbmQgbm90IGEgcGFkIGRhdGEgKi8KIAogCQlzd2l0Y2ggKChkYXRhWzFdID4+IDUpICYgMykgewogCkBAIC0yMzMsNyArMjM1LDYgQEAKIAkJaWYgKGRhdGFbN10gJiAweGY4KSB7CiAJCQl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7IC8qIHN5bmMgbGFzdCBldmVudCAqLwogCQkJd2Fjb20tPmlkWzFdID0gMTsKLQkJCXdhY29tLT5zZXJpYWxbMV0gPSAoZGF0YVs3XSAmIDB4ZjgpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl8wLCAoZGF0YVs3XSAmIDB4NDApKTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fNCwgKGRhdGFbN10gJiAweDgwKSk7CiAJCQlydyA9ICgoZGF0YVs3XSAmIDB4MTgpID4+IDMpIC0gKChkYXRhWzddICYgMHgyMCkgPj4gMyk7CkBAIC0yNTIsMTAgKzI1Myw5IEBACiAJCX0KIAkJYnJlYWs7CiAJICAgIGNhc2UgV0FDT01fTU86Ci0JCWlmICgoZGF0YVs3XSAmIDB4ZjgpIHx8IChkYXRhWzhdICYgMHg4MCkpIHsKKwkJaWYgKChkYXRhWzddICYgMHhmOCkgfHwgKGRhdGFbOF0gJiAweGZmKSkgewogCQkJd2Fjb21faW5wdXRfc3luYyh3Y29tYm8pOyAvKiBzeW5jIGxhc3QgZXZlbnQgKi8KIAkJCXdhY29tLT5pZFsxXSA9IDE7Ci0JCQl3YWNvbS0+c2VyaWFsWzFdID0gKGRhdGFbN10gJiAweGY4KTsKIAkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMCwgKGRhdGFbN10gJiAweDA4KSk7CiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzEsIChkYXRhWzddICYgMHgyMCkpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl80LCAoZGF0YVs3XSAmIDB4MTApKTsKQEAgLTQzNCwxMCArNDM0LDEyIEBACiAJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fNSwgKGRhdGFbNl0gJiAweDAyKSk7CiAJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fNiwgKGRhdGFbNl0gJiAweDA0KSk7CiAJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fNywgKGRhdGFbNl0gJiAweDA4KSk7CisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fOCwgKGRhdGFbNV0gJiAweDEwKSk7CisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fOSwgKGRhdGFbNl0gJiAweDEwKSk7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUlgsICgoZGF0YVsxXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVsyXSk7CiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUlksICgoZGF0YVszXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVs0XSk7CiAKLQkJaWYoKGRhdGFbNV0gJiAweDBmKSB8IChkYXRhWzZdICYgMHgwZikgfCAoZGF0YVsxXSAmIDB4MWYpIHwKKwkJaWYgKChkYXRhWzVdICYgMHgxZikgfCAoZGF0YVs2XSAmIDB4MWYpIHwgKGRhdGFbMV0gJiAweDFmKSB8CiAJCQlkYXRhWzJdIHwgKGRhdGFbM10gJiAweDFmKSB8IGRhdGFbNF0pCiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIDEpOwogCQllbHNlCkBAIC00ODEsMTMgKzQ4MywxMSBAQAogCQlpZiAoZGF0YVsxXSAmIDB4MDIpIHsKIAkJCS8qIFJvdGF0aW9uIHBhY2tldCAqLwogCQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUykgewotCQkJCS8qIEkzIG1hcmtlciBwZW4gcm90YXRpb24gcmVwb3J0ZWQgYXMgd2hlZWwKLQkJCQkgKiBkdWUgdG8gdmFsdWF0b3IgbGltaXRhdGlvbgotCQkJCSAqLworCQkJCS8qIEkzIG1hcmtlciBwZW4gcm90YXRpb24gKi8KIAkJCQl0ID0gKGRhdGFbNl0gPDwgMykgfCAoKGRhdGFbN10gPj4gNSkgJiA3KTsKIAkJCQl0ID0gKGRhdGFbN10gJiAweDIwKSA/ICgodCA+IDkwMCkgPyAoKHQtMSkgLyAyIC0gMTM1MCkgOgogCQkJCQkoKHQtMSkgLyAyICsgNDUwKSkgOiAoNDUwIC0gdCAvIDIpIDsKLQkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1dIRUVMLCB0KTsKKwkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1osIHQpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiA0RCBtb3VzZSByb3RhdGlvbiBwYWNrZXQgKi8KIAkJCQl0ID0gKGRhdGFbNl0gPDwgMykgfCAoKGRhdGFbN10gPj4gNSkgJiA3KTsKQEAgLTU1OCw2ICs1NTgsNyBAQAogCQljYXNlIElOVFVPUzM6CiAJCWNhc2UgSU5UVU9TM0w6CiAJCWNhc2UgQ0lOVElROgorCQljYXNlIFdBQ09NX0JFRToKIAkJCXJldHVybiAod2Fjb21faW50dW9zX2lycSh3YWNvbV93YWMsIHdjb21ibykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC01NzcsNiArNTc4LDggQEAKIAkJY2FzZSBHUkFQSElSRToKIAkJCWlucHV0X2Rldl9nKGlucHV0X2Rldiwgd2Fjb21fd2FjKTsKIAkJCWJyZWFrOworCQljYXNlIFdBQ09NX0JFRToKKwkJCWlucHV0X2Rldl9iZWUoaW5wdXRfZGV2LCB3YWNvbV93YWMpOwogCQljYXNlIElOVFVPUzM6CiAJCWNhc2UgSU5UVU9TM0w6CiAJCWNhc2UgQ0lOVElROgpAQCAtNjA3LDEyICs2MTAsMTUgQEAKIAl7ICJXYWNvbSBHcmFwaGlyZTMgNng4IiwgOCwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCiAJeyAiV2Fjb20gR3JhcGhpcmU0IDR4NSIsIDgsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9LAogCXsgIldhY29tIEdyYXBoaXJlNCA2eDgiLCA4LCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgV0FDT01fRzQgfSwKKwl7ICJXYWNvbSBCYW1ib29GdW4gNHg1IiwgOSwgIDE0NzYwLCAgOTIyNSwgIDUxMSwgNjMsIFdBQ09NX01PIH0sCisJeyAiV2Fjb20gQmFtYm9vRnVuIDZ4OCIsIDksICAyMTY0OCwgMTM1MzAsICA1MTEsIDYzLCBXQUNPTV9NTyB9LAogCXsgIldhY29tIFZvbGl0byIsICAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKIAl7ICJXYWNvbSBQZW5TdGF0aW9uMiIsICAgOCwgICAzMjUwLCAgMjMyMCwgIDI1NSwgNjMsIEdSQVBISVJFIH0sCiAJeyAiV2Fjb20gVm9saXRvMiA0eDUiLCAgIDgsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAogCXsgIldhY29tIFZvbGl0bzIgMngzIiwgICA4LCAgIDMyNDgsICAyMzIwLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBQZW5QYXJ0bmVyMiIsICAgOCwgICAzMjUwLCAgMjMyMCwgIDI1NSwgNjMsIEdSQVBISVJFIH0sCisJeyAiV2Fjb20gUGVuUGFydG5lcjIiLCAgIDgsICAgMzI1MCwgIDIzMjAsICA1MTEsIDYzLCBHUkFQSElSRSB9LAogCXsgIldhY29tIEJhbWJvbyIsICAgICAgICA5LCAgMTQ3NjAsICA5MjI1LCAgNTExLCA2MywgV0FDT01fTU8gfSwKKwl7ICJXYWNvbSBCYW1ib28xIiwgICAgICAgOCwgICA1MTA0LCAgMzcxMiwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCiAJeyAiV2Fjb20gSW50dW9zIDR4NSIsICAgMTAsICAxMjcwMCwgMTA2MDAsIDEwMjMsIDMxLCBJTlRVT1MgfSwKIAl7ICJXYWNvbSBJbnR1b3MgNng4IiwgICAxMCwgIDIwMzIwLCAxNjI0MCwgMTAyMywgMzEsIElOVFVPUyB9LAogCXsgIldhY29tIEludHVvcyA5eDEyIiwgIDEwLCAgMzA0ODAsIDI0MDYwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCkBAIC02NDMsNiArNjQ5LDcgQEAKIAl7ICJXYWNvbSBJbnR1b3MzIDZ4MTEiLCAgMTAsIDU0MjA0LCAzMTc1MCwgMTAyMywgNjMsIElOVFVPUzMgfSwKIAl7ICJXYWNvbSBJbnR1b3MzIDR4NiIsICAgMTAsIDMxNDk2LCAxOTY4NSwgMTAyMywgNjMsIElOVFVPUzNTIH0sCiAJeyAiV2Fjb20gQ2ludGlxIDIxVVgiLCAgIDEwLCA4NzIwMCwgNjU2MDAsIDEwMjMsIDYzLCBDSU5USVEgfSwKKwl7ICJXYWNvbSBDaW50aXEgMTJXWCIsICAgMTAsIDUzMDIwLCAzMzQ0MCwgMTAyMywgNjMsIFdBQ09NX0JFRSB9LAogCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAzMSwgSU5UVU9TIH0sCiAJeyB9CiB9OwpAQCAtNjU2LDEyICs2NjMsMTUgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxOCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2NCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2NSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2OSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMikgfSwKQEAgLTY5Miw2ICs3MDIsNyBAQAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEI1KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEI3KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDNGKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEM2KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ3KSB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5oIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmgKaW5kZXggYTMwMmUyMi4uMzM0MmJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmgKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAlJTlRVT1MzLAogCUlOVFVPUzNMLAogCUNJTlRJUSwKKwlXQUNPTV9CRUUsCiAJV0FDT01fTU8sCiAJTUFYX1RZUEUKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IDU4OTM0YTQwLi4zOTU3M2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtMjgsMTMgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2lmZGVmCUNPTkZJR19BUk0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2lmZGVmCUNPTkZJR19BUkNIX09NQVAKLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0jZW5kaWYKLSNlbmRpZgotCiAKIC8qCiAgKiBUaGlzIGNvZGUgaGFzIGJlZW4gaGVhdmlseSB0ZXN0ZWQgb24gYSBOb2tpYSA3NzAsIGFuZCBsaWdodGx5CkBAIC0yMTMsNyArMjA2LDcgQEAKIAlzdHJ1Y3QgYWRzNzg0NgkJKnRzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNlcl9yZXEJCSpyZXEgPSBremFsbG9jKHNpemVvZiAqcmVxLCBHRlBfS0VSTkVMKTsKIAlpbnQJCQlzdGF0dXM7Ci0JaW50CQkJc2FtcGxlOworCWludAkJCXVuaW5pdGlhbGl6ZWRfdmFyKHNhbXBsZSk7CiAJaW50CQkJdXNlX2ludGVybmFsOwogCiAJaWYgKCFyZXEpCkBAIC0xMTc0LDMxICsxMTY3LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWRzNzg0Nl9pbml0KHZvaWQpCiB7Ci0JLyogZ3JyLCBib2FyZC1zcGVjaWZpYyBpbml0IHNob3VsZCBzdGF5IG91dCBvZiBkcml2ZXJzISEgKi8KLQotI2lmZGVmCUNPTkZJR19BUkNIX09NQVAKLQlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKSB7Ci0JCS8qIEdQSU80ID0gUEVOSVJROyBHUElPNiA9IEJVU1kgKi8KLQkJb21hcF9yZXF1ZXN0X2dwaW8oNCk7Ci0JCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDQsIDEpOwotCQlvbWFwX3JlcXVlc3RfZ3Bpbyg2KTsKLQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oNiwgMSk7Ci0JfQotCS8vIGFsc28gVEkgMTUxMCBJbm5vdmF0b3IsIGJpdGJhbmdpbmcgdGhyb3VnaCBGUEdBCi0JLy8gYWxzbyBOb2tpYSA3NzAKLQkvLyBhbHNvIFBhbG0gVHVuZ3N0ZW4gVDIKLSNlbmRpZgotCi0JLy8gUFhBOgotCS8vIGFsc28gRGVsbCBBeGltIFg1MAotCS8vIGFsc28gSFAgaVBhcSBIMTkxeC9IMTkyeC9INDE1eC9INDM1eAotCS8vIGFsc28gSW50ZWwgTHViYm9jayAoYWRkaXRpb25hbCB0byBVQ0IxNDAwOyBhcyB0ZW1wZXJhdHVyZSBzZW5zb3IpCi0JLy8gYWxzbyBTaGFycCBaYXVydXMgQzd4eCwgQzh4eCAoY29yZ2kvc2hlcGVyZC9odXNreSkKLQotCS8vIEF0bWVsIGF0OTFzYW05MjYxLUVLIHVzZXMgYWRzNzg0MwotCi0JLy8gYWxzbyB2YXJpb3VzIEFNRCBBdTF4MDAgZGV2ZWwgYm9hcmRzCi0KIAlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWRzNzg0Nl9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoYWRzNzg0Nl9pbml0KTsKQEAgLTEyMDYsMTQgKzExNzQsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IGFkczc4NDZfZXhpdCh2b2lkKQogewogCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWRzNzg0Nl9kcml2ZXIpOwotCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUAotCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKLQkJb21hcF9mcmVlX2dwaW8oNCk7Ci0JCW9tYXBfZnJlZV9ncGlvKDYpOwotCX0KLSNlbmRpZgotCiB9CiBtb2R1bGVfZXhpdChhZHM3ODQ2X2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKaW5kZXggOTlkOTJmNS4uYTIyNTc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KIAogCiAjZGVmaW5lIFBXUl9NT0RFX0FDVElWRQkJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwppbmRleCBhYWNlZGVjLi44MjdjMzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwpAQCAtNjM3LDcgKzYzNyw2IEBACiAJCWVycigibWF4aW11bSBudW1iZXIgb2YgZGV2aWNlcyBleGNlZWRlZCIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbXV0ZXhfaW5pdCgmY3MtPm11dGV4KTsKIAogCWdpZ19kYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgYmNzWzAuLiVkXSIsIGNoYW5uZWxzIC0gMSk7CiAJY3MtPmJjcyA9IGttYWxsb2MoY2hhbm5lbHMgKiBzaXplb2Yoc3RydWN0IGJjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CkBAIC04OTgsOCArODk3LDEwIEBACiB7CiAJbXV0ZXhfbG9jaygmY3MtPm11dGV4KTsKIAotCWlmICghKGNzLT5mbGFncyAmIFZBTElEX01JTk9SKSkKKwlpZiAoIShjcy0+ZmxhZ3MgJiBWQUxJRF9NSU5PUikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCQlyZXR1cm4gLTE7CisJfQogCiAJY3MtPndhaXRpbmcgPSAxOwogCkBAIC0xMDg2LDYgKzEwODcsNyBAQAogCQlkcnYtPmNzW2ldLmRyaXZlciA9IGRydjsKIAkJZHJ2LT5jc1tpXS5vcHMgPSBkcnYtPm9wczsKIAkJZHJ2LT5jc1tpXS5taW5vcl9pbmRleCA9IGk7CisJCW11dGV4X2luaXQoJmRydi0+Y3NbaV0ubXV0ZXgpOwogCX0KIAogCWdpZ2FzZXRfaWZfaW5pdGRyaXZlcihkcnYsIHByb2NuYW1lLCBkZXZuYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hc3VzY29tLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXN1c2NvbS5jCmluZGV4IDYxZTY5ZTkuLmI5NmYzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hc3VzY29tLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FzdXNjb20uYwpAQCAtMjAsOCArMjAsNiBAQAogI2luY2x1ZGUgImhzY3guaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpBc3VzY29tX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xNC4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKQEAgLTM3Niw4ICszNzQsNyBAQAogCWNzLT5pcnEgPSBjYXJkLT5wYXJhWzBdOwogCWlmICghcmVxdWVzdF9yZWdpb24oY3MtPmh3LmFzdXMuY2ZnX3JlZywgYnl0ZWNudCwgImFzdXNjb20gaXNkbiIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJIaVNheDogJXMgY29uZmlnIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCi0JCSAgICAgICBDYXJkVHlwZVtjYXJkLT50eXBdLAorCQkgICAgICAgIkhpU2F4OiBJU0ROTGluayBjb25maWcgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgICAgIGNzLT5ody5hc3VzLmNmZ19yZWcsCiAJCSAgICAgICBjcy0+aHcuYXN1cy5jZmdfcmVnICsgYnl0ZWNudCk7CiAJCXJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX2ExLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX2ExLmMKaW5kZXggZDkwMjhlOS4uZWI2YjQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9hMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fYTEuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgImhzY3guaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiBzdGF0aWMgY29uc3QgY2hhciAqYXZtX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xNS4yLjQgJCI7CiAKICNkZWZpbmUJIEFWTV9BMV9TVEFUX0lTQUMJMHgwMQpAQCAtMjAwLDE2ICsxOTksMTQgQEAKIAljcy0+aXJxID0gY2FyZC0+cGFyYVswXTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGNzLT5ody5hdm0uY2ZnX3JlZywgOCwgImF2bSBjZmciKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiSGlTYXg6ICVzIGNvbmZpZyBwb3J0ICV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkgICAgICAgQ2FyZFR5cGVbY2FyZC0+dHlwXSwKKwkJICAgICAgICJIaVNheDogQVZNIEExIGNvbmZpZyBwb3J0ICV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAogCQkgICAgICAgY3MtPmh3LmF2bS5jZmdfcmVnLAogCQkgICAgICAgY3MtPmh3LmF2bS5jZmdfcmVnICsgOCk7CiAJCXJldHVybiAoMCk7CiAJfQogCWlmICghcmVxdWVzdF9yZWdpb24oY3MtPmh3LmF2bS5pc2FjICsgMzIsIDMyLCAiSGlTYXggaXNhYyIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJIaVNheDogJXMgaXNhYyBwb3J0cyAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJICAgICAgIENhcmRUeXBlW2NzLT50eXBdLAorCQkgICAgICAgIkhpU2F4OiBBVk0gQTEgaXNhYyBwb3J0cyAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgICAgIGNzLT5ody5hdm0uaXNhYyArIDMyLAogCQkgICAgICAgY3MtPmh3LmF2bS5pc2FjICsgNjQpOwogCQlyZWxlYXNlX2lvcmVncyhjcywgMCk7CkBAIC0yMTcsMTYgKzIxNCwxNCBAQAogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGNzLT5ody5hdm0uaXNhY2ZpZm8sIDEsICJIaVNheCBpc2FjIGZpZm8iKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiSGlTYXg6ICVzIGlzYWMgZmlmbyBwb3J0ICV4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkgICAgICAgQ2FyZFR5cGVbY3MtPnR5cF0sCisJCSAgICAgICAiSGlTYXg6IEFWTSBBMSBpc2FjIGZpZm8gcG9ydCAleCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgICAgIGNzLT5ody5hdm0uaXNhY2ZpZm8pOwogCQlyZWxlYXNlX2lvcmVncyhjcywgMSk7CiAJCXJldHVybiAoMCk7CiAJfQogCWlmICghcmVxdWVzdF9yZWdpb24oY3MtPmh3LmF2bS5oc2N4WzBdICsgMzIsIDMyLCAiSGlTYXggaHNjeCBBIikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkhpU2F4OiAlcyBoc2N4IEEgcG9ydHMgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCi0JCSAgICAgICBDYXJkVHlwZVtjcy0+dHlwXSwKKwkJICAgICAgICJIaVNheDogQVZNIEExIGhzY3ggQSBwb3J0cyAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgICAgIGNzLT5ody5hdm0uaHNjeFswXSArIDMyLAogCQkgICAgICAgY3MtPmh3LmF2bS5oc2N4WzBdICsgNjQpOwogCQlyZWxlYXNlX2lvcmVncyhjcywgMyk7CkBAIC0yMzQsMTYgKzIyOSwxNCBAQAogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGNzLT5ody5hdm0uaHNjeGZpZm9bMF0sIDEsICJIaVNheCBoc2N4IEEgZmlmbyIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJIaVNheDogJXMgaHNjeCBBIGZpZm8gcG9ydCAleCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJICAgICAgIENhcmRUeXBlW2NzLT50eXBdLAorCQkgICAgICAgIkhpU2F4OiBBVk0gQTEgaHNjeCBBIGZpZm8gcG9ydCAleCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgICAgIGNzLT5ody5hdm0uaHNjeGZpZm9bMF0pOwogCQlyZWxlYXNlX2lvcmVncyhjcywgNyk7CiAJCXJldHVybiAoMCk7CiAJfQogCWlmICghcmVxdWVzdF9yZWdpb24oY3MtPmh3LmF2bS5oc2N4WzFdICsgMzIsIDMyLCAiSGlTYXggaHNjeCBCIikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkhpU2F4OiAlcyBoc2N4IEIgcG9ydHMgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCi0JCSAgICAgICBDYXJkVHlwZVtjcy0+dHlwXSwKKwkJICAgICAgICJIaVNheDogQVZNIEExIGhzY3ggQiBwb3J0cyAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgICAgIGNzLT5ody5hdm0uaHNjeFsxXSArIDMyLAogCQkgICAgICAgY3MtPmh3LmF2bS5oc2N4WzFdICsgNjQpOwogCQlyZWxlYXNlX2lvcmVncyhjcywgMHhmKTsKQEAgLTI1MSw4ICsyNDQsNyBAQAogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGNzLT5ody5hdm0uaHNjeGZpZm9bMV0sIDEsICJIaVNheCBoc2N4IEIgZmlmbyIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJIaVNheDogJXMgaHNjeCBCIGZpZm8gcG9ydCAleCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJICAgICAgIENhcmRUeXBlW2NzLT50eXBdLAorCQkgICAgICAgIkhpU2F4OiBBVk0gQTEgaHNjeCBCIGZpZm8gcG9ydCAleCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgICAgIGNzLT5ody5hdm0uaHNjeGZpZm9bMV0pOwogCQlyZWxlYXNlX2lvcmVncyhjcywgMHgxZik7CiAJCXJldHVybiAoMCk7CkBAIC0yODQsOSArMjc2LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJBVk0gQTE6IEJ5dGUgYXQgJXggaXMgJXhcbiIsCiAJICAgICAgIGNzLT5ody5hdm0uY2ZnX3JlZywgdmFsKTsKIAotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIkhpU2F4OiAlcyBjb25maWcgaXJxOiVkIGNmZzoweCVYXG4iLAotCSAgICAgICBDYXJkVHlwZVtjcy0+dHlwXSwgY3MtPmlycSwKKwlwcmludGsoS0VSTl9JTkZPICJIaVNheDogQVZNIEExIGNvbmZpZyBpcnE6JWQgY2ZnOjB4JVhcbiIsCisJICAgICAgIGNzLT5pcnEsCiAJICAgICAgIGNzLT5ody5hdm0uY2ZnX3JlZyk7CiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiSGlTYXg6IGlzYWM6MHglWC8weCVYXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKaW5kZXggM2QxYmRjOC4uOWNhMmVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCkBAIC0yMCw4ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiYmttX2F4LmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqYmttX2E0dF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMjIuMi40ICQiOwogCiAKQEAgLTI4NCwxNSArMjgyLDE2IEBACiAJSTIwX1JFR0lTVEVSX0ZJTEUgKnBJMjBfUmVnczsKIAogCWlmICghY3MtPmlycSkgewkJLyogSVJRIHJhbmdlIGNoZWNrID8/ICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiAlczogTm8gSVJRXG4iLCBDYXJkVHlwZVtjYXJkLT50eXBdKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFRlbGVrb20gQTRUOiBObyBJUlFcbiIpOwogCQlyZXR1cm4gKDApOwogCX0KIAljcy0+aHcuYXguYmFzZSA9IChsb25nKSBpb3JlbWFwKHBjaV9tZW1hZGRyLCA0MDk2KTsKIAkvKiBDaGVjayBzdXNwZWNpb3VzIGFkZHJlc3MgKi8KIAlwSTIwX1JlZ3MgPSAoSTIwX1JFR0lTVEVSX0ZJTEUgKikgKGNzLT5ody5heC5iYXNlKTsKIAlpZiAoKHBJMjBfUmVncy0+aTIwSW50U3RhdHVzICYgMHg4RUZGRkZGRikgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJIaVNheDogJXMgYWRkcmVzcyAlbHgtJWx4IHN1c3BlY2lvdXNcbiIsCi0JCSAgICAgICBDYXJkVHlwZVtjYXJkLT50eXBdLCBjcy0+aHcuYXguYmFzZSwgY3MtPmh3LmF4LmJhc2UgKyA0MDk2KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFRlbGVrb20gQTRUIGFkZHJlc3MgIgorCQkgICAgICAgIiVseC0lbHggc3VzcGljaW91c1xuIiwKKwkJICAgICAgIGNzLT5ody5heC5iYXNlLCBjcy0+aHcuYXguYmFzZSArIDQwOTYpOwogCQlpb3VubWFwKCh2b2lkICopIGNzLT5ody5heC5iYXNlKTsKIAkJY3MtPmh3LmF4LmJhc2UgPSAwOwogCQlyZXR1cm4gKDApOwpAQCAtMzAyLDggKzMwMSw5IEBACiAJY3MtPmh3LmF4LmlzYWNfYWxlID0gR0NTXzE7CiAJY3MtPmh3LmF4LmphZGVfYWxlID0gR0NTXzM7CiAKLQlwcmludGsoS0VSTl9JTkZPICJIaVNheDogJXM6IENhcmQgY29uZmlndXJlZCBhdCAweCVsWCBJUlEgJWRcbiIsCi0JICAgICAgIENhcmRUeXBlW2NhcmQtPnR5cF0sIGNzLT5ody5heC5iYXNlLCBjcy0+aXJxKTsKKwlwcmludGsoS0VSTl9JTkZPICJIaVNheDogVGVsZWtvbSBBNFQ6IENhcmQgY29uZmlndXJlZCBhdCAiCisJICAgICAgICIweCVsWCBJUlEgJWRcbiIsCisJICAgICAgIGNzLT5ody5heC5iYXNlLCBjcy0+aXJxKTsKIAogCXNldHVwX2lzYWMoY3MpOwogCWNzLT5yZWFkaXNhYyA9ICZSZWFkSVNBQzsKQEAgLTM0OSwxMSArMzQ5LDEyIEBACiAJCQlicmVhazsKIAl9CiAJaWYgKCFmb3VuZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJIaVNheDogJXM6IENhcmQgbm90IGZvdW5kXG4iLCBDYXJkVHlwZVtjYXJkLT50eXBdKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFRlbGVrb20gQTRUOiBDYXJkIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAoMCk7CiAJfQogCWlmICghcGNpX21lbWFkZHIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6ICVzOiBObyBNZW1vcnkgYmFzZSBhZGRyZXNzXG4iLCBDYXJkVHlwZVtjYXJkLT50eXBdKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFRlbGVrb20gQTRUOiAiCisJCSAgICAgICAiTm8gTWVtb3J5IGJhc2UgYWRkcmVzc1xuIik7CiAJCXJldHVybiAoMCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKaW5kZXggOTllZjNiNC4uZTFmZjQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYwpAQCAtMjIsOCArMjIsNiBAQAogCiAjZGVmaW5lCUFUVEVNUFRfUENJX1JFTUFQUElORwkvKiBSZXF1aXJlZCBmb3IgUExYIHJldiAxICovCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciBzY3RfcXVhZHJvX3JldmlzaW9uW10gPSAiJFJldmlzaW9uOiAxLjIyLjIuNCAkIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNjdF9xdWFkcm9fc3VidHlwZXNbXSA9CkBAIC0xODEsOCArMTc5LDcgQEAKIAkJZ290byBTdGFydF9JUEFDOwogCX0KIAlpZiAoIWljbnQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiAlcyAoJXMpIElSUSBMT09QXG4iLAotCQkgICAgICAgQ2FyZFR5cGVbY3MtPnR5cF0sCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiBTY2l0ZWwgUXVhZHJvICglcykgSVJRIExPT1BcbiIsCiAJCSAgICAgICBzY3RfcXVhZHJvX3N1YnR5cGVzW2NzLT5zdWJ0eXBdKTsKIAl3cml0ZXJlZyhjcy0+aHcuYXguYmFzZSwgY3MtPmh3LmF4LmRhdGFfYWRyLCBJUEFDX01BU0ssIDB4RkYpOwogCXdyaXRlcmVnKGNzLT5ody5heC5iYXNlLCBjcy0+aHcuYXguZGF0YV9hZHIsIElQQUNfTUFTSywgMHhDMCk7CkBAIC0yOTYsOCArMjkzLDggQEAKIAlpZiAoY2FyZC0+cGFyYVswXSA+PSBTQ1RfMSAmJiBjYXJkLT5wYXJhWzBdIDw9IFNDVF80KQogCQljcy0+c3VidHlwID0gY2FyZC0+cGFyYVswXTsKIAllbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6ICVzOiBJbnZhbGlkIHN1YmNvbnRyb2xsZXIgaW4gY29uZmlndXJhdGlvbiwgZGVmYXVsdCB0byAxXG4iLAotCQkJQ2FyZFR5cGVbY2FyZC0+dHlwXSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiBTY2l0ZWwgUXVhZHJvOiBJbnZhbGlkICIKKwkJICAgICAgICJzdWJjb250cm9sbGVyIGluIGNvbmZpZ3VyYXRpb24sIGRlZmF1bHQgdG8gMVxuIik7CiAJCXJldHVybiAoMCk7CiAJfQogCWlmICgoY3MtPnN1YnR5cCAhPSBTQ1RfMSkgJiYgKChzdWJfc3lzX2lkICE9IFBDSV9ERVZJQ0VfSURfQkVSS09NX1NDSVRFTF9RVUFEUk8pIHx8CkBAIC0zMjIsMTYgKzMxOSwxNiBAQAogCQkJfQogCQl9CiAJCWlmICghZm91bmQpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiAlcyAoJXMpOiBDYXJkIG5vdCBmb3VuZFxuIiwKLQkJCQlDYXJkVHlwZVtjYXJkLT50eXBdLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFNjaXRlbCBRdWFkcm8gKCVzKTogIgorCQkJCSJDYXJkIG5vdCBmb3VuZFxuIiwKIAkJCQlzY3RfcXVhZHJvX3N1YnR5cGVzW2NzLT5zdWJ0eXBdKTsKIAkJCXJldHVybiAoMCk7CiAJCX0KICNpZmRlZiBBVFRFTVBUX1BDSV9SRU1BUFBJTkcKIC8qIEhBQ0s6IFBMWCByZXZpc2lvbiAxIGJ1ZzogUExYIGFkZHJlc3MgYml0IDcgbXVzdCBub3QgYmUgc2V0ICovCiAJCWlmICgocGNpX2lvYWRkcjEgJiAweDgwKSAmJiAoZGV2X2E4LT5yZXZpc2lvbiA9PSAxKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6ICVzICglcyk6IFBMWCByZXYgMSwgcmVtYXBwaW5nIHJlcXVpcmVkIVxuIiwKLQkJCQlDYXJkVHlwZVtjYXJkLT50eXBdLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFNjaXRlbCBRdWFkcm8gKCVzKTogIgorCQkJCSJQTFggcmV2IDEsIHJlbWFwcGluZyByZXF1aXJlZCFcbiIsCiAJCQkJc2N0X3F1YWRyb19zdWJ0eXBlc1tjcy0+c3VidHlwXSk7CiAJCQkvKiBSZXN0YXJ0IFBDSSBuZWdvdGlhdGlvbiAqLwogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfYTgsIFBDSV9CQVNFX0FERFJFU1NfMSwgKHVfaW50KSAtIDEpOwpAQCAtMzQ0LDggKzM0MSw3IEBACiAjZW5kaWYgLyogRW5kIEhBQ0sgKi8KIAl9CiAJaWYgKCFwY2lfaXJxKSB7CQkvKiBJUlEgcmFuZ2UgY2hlY2sgPz8gKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6ICVzICglcyk6IE5vIElSUVxuIiwKLQkJICAgICAgIENhcmRUeXBlW2NhcmQtPnR5cF0sCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiBTY2l0ZWwgUXVhZHJvICglcyk6IE5vIElSUVxuIiwKIAkJICAgICAgIHNjdF9xdWFkcm9fc3VidHlwZXNbY3MtPnN1YnR5cF0pOwogCQlyZXR1cm4gKDApOwogCX0KQEAgLTM1NSw4ICszNTEsOCBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfYTgsIFBDSV9CQVNFX0FERFJFU1NfNCwgJnBjaV9pb2FkZHI0KTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X2E4LCBQQ0lfQkFTRV9BRERSRVNTXzUsICZwY2lfaW9hZGRyNSk7CiAJaWYgKCFwY2lfaW9hZGRyMSB8fCAhcGNpX2lvYWRkcjIgfHwgIXBjaV9pb2FkZHIzIHx8ICFwY2lfaW9hZGRyNCB8fCAhcGNpX2lvYWRkcjUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6ICVzICglcyk6IE5vIElPIGJhc2UgYWRkcmVzcyhlcylcbiIsCi0JCSAgICAgICBDYXJkVHlwZVtjYXJkLT50eXBdLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJIaVNheDogU2NpdGVsIFF1YWRybyAoJXMpOiAiCisJCSAgICAgICAiTm8gSU8gYmFzZSBhZGRyZXNzKGVzKVxuIiwKIAkJICAgICAgIHNjdF9xdWFkcm9fc3VidHlwZXNbY3MtPnN1YnR5cF0pOwogCQlyZXR1cm4gKDApOwogCX0KQEAgLTQxMSw4ICs0MDcsOCBAQAogCS8qIEZvciBpc2FjIGFuZCBoc2N4IGRhdGEgcGF0aCAqLwogCWNzLT5ody5heC5kYXRhX2FkciA9IGNzLT5ody5heC5iYXNlICsgNDsKIAotCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiAlcyAoJXMpIGNvbmZpZ3VyZWQgYXQgMHglLjRsWCwgMHglLjRsWCwgMHglLjRsWCBhbmQgSVJRICVkXG4iLAotCSAgICAgICBDYXJkVHlwZVtjYXJkLT50eXBdLAorCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiBTY2l0ZWwgUXVhZHJvICglcykgY29uZmlndXJlZCBhdCAiCisJICAgICAgICIweCUuNGxYLCAweCUuNGxYLCAweCUuNGxYIGFuZCBJUlEgJWRcbiIsCiAJICAgICAgIHNjdF9xdWFkcm9fc3VidHlwZXNbY3MtPnN1YnR5cF0sCiAJICAgICAgIGNzLT5ody5heC5wbHhfYWRyLAogCSAgICAgICBjcy0+aHcuYXguYmFzZSwKQEAgLTQzMiw4ICs0MjgsNyBAQAogCWNzLT5jYXJkbXNnID0gJkJLTV9jYXJkX21zZzsKIAljcy0+aXJxX2Z1bmMgPSAmYmttX2ludGVycnVwdF9pcGFjOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6ICVzICglcyk6IElQQUMgVmVyc2lvbiAlZFxuIiwKLQkJQ2FyZFR5cGVbY2FyZC0+dHlwXSwKKwlwcmludGsoS0VSTl9JTkZPICJIaVNheDogU2NpdGVsIFF1YWRybyAoJXMpOiBJUEFDIFZlcnNpb24gJWRcbiIsCiAJCXNjdF9xdWFkcm9fc3VidHlwZXNbY3MtPnN1YnR5cF0sCiAJCXJlYWRyZWcoY3MtPmh3LmF4LmJhc2UsIGNzLT5ody5heC5kYXRhX2FkciwgSVBBQ19JRCkpOwogCXJldHVybiAoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKaW5kZXggYTBlZTQzYy4uODRkNzVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwpAQCAtMTE2OSw3ICsxMTY5LDkgQEAKIC8qIFVzZWQgZnJvbSBhbiBleHBvcnRlZCBmdW5jdGlvbiBidXQgY2FsbHMgX19kZXZpbml0IGZ1bmN0aW9ucy4KICAqIFRlbGwgbW9kcG9zdCBub3QgdG8gd2FybiAoX19yZWYpCiAgKi8KLXN0YXRpYyBpbnQgX19yZWYgY2hlY2tjYXJkKGludCBjYXJkbnIsIGNoYXIgKmlkLCBpbnQgKmJ1c3lfZmxhZywgc3RydWN0IG1vZHVsZSAqbG9ja293bmVyKQorc3RhdGljIGludCBfX3JlZiBjaGVja2NhcmQoaW50IGNhcmRuciwgY2hhciAqaWQsIGludCAqYnVzeV9mbGFnLAorCQkJICAgc3RydWN0IG1vZHVsZSAqbG9ja293bmVyLAorCQkJICAgaGlzYXhfc2V0dXBfZnVuY190IGNhcmRfc2V0dXApCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQgPSBjYXJkcyArIGNhcmRucjsKQEAgLTExODcsNyArMTE4OSw3IEBACiAJICAgICAgIChjYXJkLT5wcm90b2NvbCA9PSBJU0ROX1BUWVBFX05JMSkgPyAiTkkxIiA6CiAJICAgICAgICJOT05FIiwgY3MtPmlpZi5pZCwgY3MtPm15aWQpOwogCi0JcmV0ID0gaGlzYXhfY3Nfc2V0dXBfY2FyZChjYXJkKTsKKwlyZXQgPSBjYXJkX3NldHVwKGNhcmQpOwogCWlmICghcmV0KSB7CiAJCWxsX3VubG9hZChjcyk7CiAJCWdvdG8gb3V0Zl9jczsKQEAgLTEyNDEsNyArMTI0Myw4IEBACiAJCQllbHNlCiAJCQkJc3ByaW50ZihpZHMsICIlcyVkIiwgaWQsIGkpOwogCQl9Ci0JCWlmIChjaGVja2NhcmQoaSwgaWRzLCBidXN5X2ZsYWcsIFRISVNfTU9EVUxFKSkgeworCQlpZiAoY2hlY2tjYXJkKGksIGlkcywgYnVzeV9mbGFnLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIGhpc2F4X2NzX3NldHVwX2NhcmQpKSB7CiAJCQlmb3VuZGNhcmRzKys7CiAJCQlpKys7CiAJCX0gZWxzZSB7CkBAIC0xNTQ5LDcgKzE1NTIsOCBAQAogCQlzcHJpbnRmKGlkcywgIkhpU2F4JWQiLCBucmNhcmRzKTsKIAllbHNlCiAJCXNwcmludGYoaWRzLCAiSGlTYXgiKTsKLQlpZiAoIWNoZWNrY2FyZChucmNhcmRzLCBpZHMsIGJ1c3lfZmxhZywgVEhJU19NT0RVTEUpKQorCWlmICghY2hlY2tjYXJkKG5yY2FyZHMsIGlkcywgYnVzeV9mbGFnLCBUSElTX01PRFVMRSwKKwkJICAgICAgIGhpc2F4X2NzX3NldHVwX2NhcmQpKQogCQlnb3RvIGVycm9yOwogCiAJcmV0ID0gbnJjYXJkczsKQEAgLTE1OTUsNyArMTU5OSw3IEBACiAJY2FyZHNbaV0ucHJvdG9jb2wgPSBwcm90b2NvbDsKIAlzcHJpbnRmKGlkLCAiJXMlZCIsIG5hbWUsIGkpOwogCW5yY2FyZHMrKzsKLQlyZXR2YWwgPSBjaGVja2NhcmQoaSwgaWQsIE5VTEwsIGhpc2F4X2RfaWYtPm93bmVyKTsKKwlyZXR2YWwgPSBjaGVja2NhcmQoaSwgaWQsIE5VTEwsIGhpc2F4X2RfaWYtPm93bmVyLCBoaXNheF9jc19zZXR1cF9jYXJkKTsKIAlpZiAocmV0dmFsID09IDApIHsgLy8geXVjawogCQljYXJkc1tpXS50eXAgPSAwOwogCQlucmNhcmRzLS07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYwppbmRleCBkMjcyZDhjLi4yYzM2OTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKQEAgLTI5OSw3ICsyOTksNyBAQAogCQl2YWwgPSBzZXJpYWxfaW5wKGNzLCBVQVJUX0lJUik7CiAJCWlmICghKHZhbCAmIFVBUlRfSUlSX05PX0lOVCkpIHsKIAkJCWRlYnVnbDEoY3MsIklJUiAlMDJ4IiwgdmFsKTsKLQkJCXJzX2ludGVycnVwdF9lbHNhKGludG5vLCBjcyk7CisJCQlyc19pbnRlcnJ1cHRfZWxzYShjcyk7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTM3OSw3ICszNzksNyBAQAogCQl2YWwgPSBzZXJpYWxfaW5wKGNzLCBVQVJUX0lJUik7CiAJCWlmICghKHZhbCAmIFVBUlRfSUlSX05PX0lOVCkpIHsKIAkJCWRlYnVnbDEoY3MsIklJUiAlMDJ4IiwgdmFsKTsKLQkJCXJzX2ludGVycnVwdF9lbHNhKGludG5vLCBjcyk7CisJCQlyc19pbnRlcnJ1cHRfZWxzYShjcyk7CiAJCX0KIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKaW5kZXggMTY0MmRjYS4uZjE4MWRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKQEAgLTM4NCwxMyArMzg0LDEzIEBACiB9CiAKIAotc3RhdGljIHZvaWQgcnNfaW50ZXJydXB0X2Vsc2EoaW50IGlycSwgc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQorc3RhdGljIHZvaWQgcnNfaW50ZXJydXB0X2Vsc2Eoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWludCBzdGF0dXMsIGlpciwgbXNyOwogCWludCBwYXNzX2NvdW50ZXIgPSAwOwogCQogI2lmZGVmIFNFUklBTF9ERUJVR19JTlRSCi0JcHJpbnRrKCJyc19pbnRlcnJ1cHRfc2luZ2xlKCVkKS4uLiIsIGlycSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInJzX2ludGVycnVwdF9zaW5nbGUoJWQpLi4uIiwgY3MtPmlycSk7CiAjZW5kaWYKIAogCWRvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9nYXplbC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKaW5kZXggZjY2NjIwYS4uMGVhM2I0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlICJpcGFjLmgiCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogc3RhdGljIGNvbnN0IGNoYXIgKmdhemVsX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xOS4yLjQgJCI7CiAKICNkZWZpbmUgUjY0NyAgICAgIDEKQEAgLTQ3OSw4ICs0NzgsOCBAQAogCXJldHVybiAwOwogCiAgICAgICBlcnJvcjoKLQlwcmludGsoS0VSTl9XQVJOSU5HICJHYXplbDogJXMgaW8gcG9ydHMgMHgleC0weCV4IGFscmVhZHkgaW4gdXNlXG4iLAotCSAgICAgICBDYXJkVHlwZVtjcy0+dHlwXSwgYWRyLCBhZHIgKyBsZW4pOworCXByaW50ayhLRVJOX1dBUk5JTkcgIkdhemVsOiBpbyBwb3J0cyAweCV4LTB4JXggYWxyZWFkeSBpbiB1c2VcbiIsCisJICAgICAgIGFkciwgYWRyICsgbGVuKTsKIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggZmJhOGI2Mi4uZjEyNjU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC0yMiw4ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqaGZjcGNpX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS40OC4yLjQgJCI7CiAKIC8qIHRhYmxlIGVudHJ5IGluIHRoZSBQQ0kgZGV2aWNlcyBsaXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKaW5kZXggMDU0ODJkMi4uZjRhMjEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYwpAQCAtMTgsOCArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKmhmY3N4X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xMi4yLjUgJCI7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IDM0NzMzYzkuLmU4ZDQyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC05MjUsNyArOTI1LDcgQEAKIAlpbnQJCSgqY2FyZG1zZykgKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICosIGludCwgdm9pZCAqKTsKIAl2b2lkCQkoKnNldHN0YWNrX2QpIChzdHJ1Y3QgUFN0YWNrICosIHN0cnVjdCBJc2RuQ2FyZFN0YXRlICopOwogCXZvaWQJCSgqRENfQ2xvc2UpIChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqKTsKLQlpbnQJCSgqaXJxX2Z1bmMpIChpbnQsIHZvaWQgKik7CisJaXJxX2hhbmRsZXJfdAlpcnFfZnVuYzsKIAlpbnQJCSgqYXV4Y21kKSAoc3RydWN0IElzZG5DYXJkU3RhdGUgKiwgaXNkbl9jdHJsICopOwogCXN0cnVjdCBDaGFubmVsCWNoYW5uZWxbMitNQVhfV0FJVElOR19DQUxMU107CiAJc3RydWN0IEJDU3RhdGUJYmNzWzIrTUFYX1dBSVRJTkdfQ0FMTFNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2NmZy5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2NmZy5oCmluZGV4IGNhM2ZlNjIuLjE3YTJmZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9jZmcuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXhfY2ZnLmgKQEAgLTYwLDUgKzYwLDcgQEAKIAlJc2RuQ2FyZFN0YXRlX3QJKmNzOwogfTsKIAordHlwZWRlZiBpbnQgKCpoaXNheF9zZXR1cF9mdW5jX3QpKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCk7CisKIGV4dGVybiB2b2lkCUhpU2F4X2Nsb3NlY2FyZChpbnQpOwogZXh0ZXJuIGludAloaXNheF9pbml0X3BjbWNpYSh2b2lkICosIGludCAqLCBJc2RuQ2FyZF90ICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXhfZmNwY2lwbnAuYwppbmRleCA3OTkzZTAxLi43NjA0M2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXhfZmNwY2lwbnAuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXhfZmNwY2lwbnAuYwpAQCAtNzI1LDIzICs3MjUsNiBAQAogCiAJc3dpdGNoIChhZGFwdGVyLT50eXBlKSB7CiAJY2FzZSBBVk1fRlJJVFpfUENJVjI6Ci0JCXJldHZhbCA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPmlycSwgZmNwY2kyX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJICAgICAiZmNwY2lwbnAiLCBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVk1fRlJJVFpfUENJOgotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGZjcGNpX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJICAgICAiZmNwY2lwbnAiLCBhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVk1fRlJJVFpfUE5QOgotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGZjcGNpX2lycSwgMCwKLQkJCQkgICAgICJmY3BjaXBucCIsIGFkYXB0ZXIpOwotCQlicmVhazsKLQl9Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJfcmVnaW9uOwotCi0Jc3dpdGNoIChhZGFwdGVyLT50eXBlKSB7Ci0JY2FzZSBBVk1fRlJJVFpfUENJVjI6CiAJY2FzZSBBVk1fRlJJVFpfUENJOgogCQl2YWwgPSBpbmwoYWRhcHRlci0+aW8pOwogCQlicmVhazsKQEAgLTc5Niw2ICs3NzksMjMgQEAKIAogCXN3aXRjaCAoYWRhcHRlci0+dHlwZSkgewogCWNhc2UgQVZNX0ZSSVRaX1BDSVYyOgorCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGZjcGNpMl9pcnEsIElSUUZfU0hBUkVELAorCQkJCSAgICAgImZjcGNpcG5wIiwgYWRhcHRlcik7CisJCWJyZWFrOworCWNhc2UgQVZNX0ZSSVRaX1BDSToKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBmY3BjaV9pcnEsIElSUUZfU0hBUkVELAorCQkJCSAgICAgImZjcGNpcG5wIiwgYWRhcHRlcik7CisJCWJyZWFrOworCWNhc2UgQVZNX0ZSSVRaX1BOUDoKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBmY3BjaV9pcnEsIDAsCisJCQkJICAgICAiZmNwY2lwbnAiLCBhZGFwdGVyKTsKKwkJYnJlYWs7CisJfQorCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX3JlZ2lvbjsKKworCXN3aXRjaCAoYWRhcHRlci0+dHlwZSkgeworCWNhc2UgQVZNX0ZSSVRaX1BDSVYyOgogCQlmY3BjaTJfaW5pdChhZGFwdGVyKTsKIAkJaXNhY3N4X3NldHVwKCZhZGFwdGVyLT5pc2FjKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXN1cmYuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc3VyZi5jCmluZGV4IDU1ZGUwNjkuLmNhNDE2MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc3VyZi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc3VyZi5jCkBAIC0xNyw4ICsxNyw2IEBACiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiBzdGF0aWMgY29uc3QgY2hhciAqSVN1cmZfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEyLjIuNCAkIjsKIAogI2RlZmluZSBieXRlb3V0KGFkZHIsdmFsKSBvdXRiKHZhbCxhZGRyKQpAQCAtMjUxLDIyICsyNDksMTkgQEAKIAkJCXJldHVybigwKTsKIAkJfQogI2Vsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6ICVzIHBvcnQvbWVtIG5vdCBzZXRcbiIsCi0JCQlDYXJkVHlwZVtjYXJkLT50eXBdKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFNpZW1lbnMgSS1TdXJmIHBvcnQvbWVtIG5vdCBzZXRcbiIpOwogCQlyZXR1cm4gKDApOwogI2VuZGlmCiAJfQogCWlmICghcmVxdWVzdF9yZWdpb24oY3MtPmh3LmlzdXJmLnJlc2V0LCAxLCAiaXN1cmYgaXNkbiIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJIaVNheDogJXMgY29uZmlnIHBvcnQgJXggYWxyZWFkeSBpbiB1c2VcbiIsCi0JCQlDYXJkVHlwZVtjYXJkLT50eXBdLAorCQkJIkhpU2F4OiBTaWVtZW5zIEktU3VyZiBjb25maWcgcG9ydCAleCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJCWNzLT5ody5pc3VyZi5yZXNldCk7CiAJCQlyZXR1cm4gKDApOwogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGNzLT5ody5pc3VyZi5waHltZW0sIElTVVJGX0lPTUVNX1NJWkUsICJpc3VyZiBpb21lbSIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJIaVNheDogJXMgbWVtb3J5IHJlZ2lvbiAlbHgtJWx4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkJQ2FyZFR5cGVbY2FyZC0+dHlwXSwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFNpZW1lbnMgSS1TdXJmIG1lbW9yeSByZWdpb24gIgorCQkJIiVseC0lbHggYWxyZWFkeSBpbiB1c2VcbiIsCiAJCQljcy0+aHcuaXN1cmYucGh5bWVtLAogCQkJY3MtPmh3LmlzdXJmLnBoeW1lbSArIElTVVJGX0lPTUVNX1NJWkUpOwogCQlyZWxlYXNlX3JlZ2lvbihjcy0+aHcuaXN1cmYucmVzZXQsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2l4MV9taWNyby5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2l4MV9taWNyby5jCmluZGV4IDI1MmQ3OWQuLjJkMThkNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9peDFfbWljcm8uYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXgxX21pY3JvLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJoc2N4LmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogc3RhdGljIGNvbnN0IGNoYXIgKml4MV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTIuMi40ICQiOwogCiAjZGVmaW5lIGJ5dGVvdXQoYWRkcix2YWwpIG91dGIodmFsLGFkZHIpCkBAIC0yODgsMTUgKzI4NywxNSBAQAogCWlmIChjcy0+aHcuaXgxLmNmZ19yZWcpIHsKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcuaXgxLmNmZ19yZWcsIDQsICJpeDFtaWNybyBjZmciKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAiSGlTYXg6ICVzIGNvbmZpZyBwb3J0ICV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkJICAgICAgIENhcmRUeXBlW2NhcmQtPnR5cF0sCisJCQkgICJIaVNheDogSVRLIGl4MS1taWNybyBSZXYuMiBjb25maWcgcG9ydCAiCisJCQkgICIleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJCSAgICAgICBjcy0+aHcuaXgxLmNmZ19yZWcsCiAJCQkgICAgICAgY3MtPmh3Lml4MS5jZmdfcmVnICsgNCk7CiAJCQlyZXR1cm4gKDApOwogCQl9CiAJfQotCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiAlcyBjb25maWcgaXJxOiVkIGlvOjB4JVhcbiIsCi0JCUNhcmRUeXBlW2NzLT50eXBdLCBjcy0+aXJxLCBjcy0+aHcuaXgxLmNmZ19yZWcpOworCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiBJVEsgaXgxLW1pY3JvIFJldi4yIGNvbmZpZyBpcnE6JWQgaW86MHglWFxuIiwKKwkJY3MtPmlycSwgY3MtPmh3Lml4MS5jZmdfcmVnKTsKIAlzZXR1cF9pc2FjKGNzKTsKIAljcy0+cmVhZGlzYWMgPSAmUmVhZElTQUM7CiAJY3MtPndyaXRlaXNhYyA9ICZXcml0ZUlTQUM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbWljLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbWljLmMKaW5kZXggYTgxZDE3NS4uMjUzOTQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L21pYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9taWMuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgImhzY3guaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICptaWNfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEyLjIuNCAkIjsKIAogI2RlZmluZSBieXRlb3V0KGFkZHIsdmFsKSBvdXRiKHZhbCxhZGRyKQpAQCAtMjEwLDggKzIwOCw3IEBACiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGNzLT5ody5taWMuY2ZnX3JlZywgYnl0ZWNudCwgIm1pYyBpc2RuIikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkhpU2F4OiAlcyBjb25maWcgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJICAgICAgIENhcmRUeXBlW2NhcmQtPnR5cF0sCisJCSAgICAgICAiSGlTYXg6IGl0aCBtaWMgY29uZmlnIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCiAJCSAgICAgICBjcy0+aHcubWljLmNmZ19yZWcsCiAJCSAgICAgICBjcy0+aHcubWljLmNmZ19yZWcgKyBieXRlY250KTsKIAkJcmV0dXJuICgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9uZXRqZXQuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9uZXRqZXQuaAppbmRleCA0ZDg5ZDNlLi42OGU1MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmV0amV0LmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25ldGpldC5oCkBAIC0xMiw4ICsxMiw2IEBACiAgKgogICovCiAKLWV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotCiAjZGVmaW5lIGJ5dGVvdXQoYWRkcix2YWwpIG91dGIodmFsLGFkZHIpCiAjZGVmaW5lIGJ5dGVpbihhZGRyKSBpbmIoYWRkcikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmljY3kuYwppbmRleCBiZDk5MjExLi40MjFiOGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmljY3kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmljY3kuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKIHN0YXRpYyBjb25zdCBjaGFyICpuaWNjeV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMjEuMi40ICQiOwogCiAjZGVmaW5lIGJ5dGVvdXQoYWRkcix2YWwpIG91dGIodmFsLGFkZHIpCkBAIC0yODQsMTQgKzI4MywxNCBAQAogCQljcy0+c3VidHlwID0gTklDQ1lfUE5QOwogCQljcy0+aXJxID0gY2FyZC0+cGFyYVswXTsKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcubmljY3kuaXNhYywgMiwgIm5pY2N5IGRhdGEiKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6ICVzIGRhdGEgcG9ydCAleC0leCAiCi0JCQkJImFscmVhZHkgaW4gdXNlXG4iLCBDYXJkVHlwZVtjYXJkLT50eXBdLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IE5JQ0NZIGRhdGEgcG9ydCAleC0leCAiCisJCQkJImFscmVhZHkgaW4gdXNlXG4iLAogCQkJCWNzLT5ody5uaWNjeS5pc2FjLCBjcy0+aHcubmljY3kuaXNhYyArIDEpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcubmljY3kuaXNhY19hbGUsIDIsICJuaWNjeSBhZGRyIikpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiAlcyBhZGRyZXNzIHBvcnQgJXgtJXggIgotCQkJCSJhbHJlYWR5IGluIHVzZVxuIiwgQ2FyZFR5cGVbY2FyZC0+dHlwXSwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhpU2F4OiBOSUNDWSBhZGRyZXNzIHBvcnQgJXgtJXggIgorCQkJCSJhbHJlYWR5IGluIHVzZVxuIiwKIAkJCQljcy0+aHcubmljY3kuaXNhY19hbGUsCiAJCQkJY3MtPmh3Lm5pY2N5LmlzYWNfYWxlICsgMSk7CiAJCQlyZWxlYXNlX3JlZ2lvbihjcy0+aHcubmljY3kuaXNhYywgMik7CkBAIC0zMzksMTUgKzMzOCwxMyBAQAogCQljcy0+aHcubmljY3kuaHNjeF9hbGUgPSBwY2lfaW9hZGRyICsgSFNDWF9QQ0lfQUREUjsKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcubmljY3kuaXNhYywgNCwgIm5pY2N5IikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiSGlTYXg6ICVzIGRhdGEgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJCSAgICAgICBDYXJkVHlwZVtjYXJkLT50eXBdLAorCQkJICAgICAgICJIaVNheDogTklDQ1kgZGF0YSBwb3J0ICV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAogCQkJICAgICAgIGNzLT5ody5uaWNjeS5pc2FjLCBjcy0+aHcubmljY3kuaXNhYyArIDQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcubmljY3kuY2ZnX3JlZywgMHg0MCwgIm5pY2N5IHBjaSIpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIkhpU2F4OiAlcyBwY2kgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJCSAgICAgICBDYXJkVHlwZVtjYXJkLT50eXBdLAorCQkJICAgICAgICJIaVNheDogTklDQ1kgcGNpIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCiAJCQkgICAgICAgY3MtPmh3Lm5pY2N5LmNmZ19yZWcsCiAJCQkgICAgICAgY3MtPmh3Lm5pY2N5LmNmZ19yZWcgKyAweDQwKTsKIAkJCXJlbGVhc2VfcmVnaW9uKGNzLT5ody5uaWNjeS5pc2FjLCA0KTsKQEAgLTM1OSw4ICszNTYsOCBAQAogCQlyZXR1cm4gMDsKICNlbmRpZgkJCQkvKiBDT05GSUdfUENJX0xFR0FDWSAqLwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJIaVNheDogJXMgJXMgY29uZmlnIGlycTolZCBkYXRhOjB4JVggYWxlOjB4JVhcbiIsCi0JCUNhcmRUeXBlW2NzLT50eXBdLCAoY3MtPnN1YnR5cCA9PSAxKSA/ICJQblAiIDogIlBDSSIsCisJcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6IE5JQ0NZICVzIGNvbmZpZyBpcnE6JWQgZGF0YToweCVYIGFsZToweCVYXG4iLAorCQkoY3MtPnN1YnR5cCA9PSAxKSA/ICJQblAiIDogIlBDSSIsCiAJCWNzLT5pcnEsIGNzLT5ody5uaWNjeS5pc2FjLCBjcy0+aHcubmljY3kuaXNhY19hbGUpOwogCXNldHVwX2lzYWMoY3MpOwogCWNzLT5yZWFkaXNhYyA9ICZSZWFkSVNBQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCmluZGV4IGE4OTVkZmUuLjhkMzZjY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwpAQCAtMjM1LDggKzIzNSw3IEBACiAJCWNzLT5zdWJ0eXAgPyAiVEozMjAiIDogIlRKMzAwIiwgY3MtPmh3Lm5qZXQuYmFzZSwgY3MtPmlycSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcubmpldC5iYXNlLCBieXRlY250LCAibmV0amV0LXMgaXNkbiIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJIaVNheDogJXMgY29uZmlnIHBvcnQgJSNseC0lI2x4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkgICAgICAgQ2FyZFR5cGVbY2FyZC0+dHlwXSwKKwkJICAgICAgICJIaVNheDogTkVUamV0LVMgY29uZmlnIHBvcnQgJSNseC0lI2x4IGFscmVhZHkgaW4gdXNlXG4iLAogCQkgICAgICAgY3MtPmh3Lm5qZXQuYmFzZSwKIAkJICAgICAgIGNzLT5ody5uamV0LmJhc2UgKyBieXRlY250KTsKIAkJcmV0dXJuICgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCmluZGV4IGYwMTdkMzguLmQzMDZjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYwpAQCAtMTk3LDggKzE5Nyw4IEBACiAJCWNzLT5ody5uamV0LmJhc2UsIGNzLT5pcnEpOwogCWlmICghcmVxdWVzdF9yZWdpb24oY3MtPmh3Lm5qZXQuYmFzZSwgYnl0ZWNudCwgIm5ldHNwaWRlci11IGlzZG4iKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiSGlTYXg6ICVzIGNvbmZpZyBwb3J0ICUjbHgtJSNseCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJICAgICAgIENhcmRUeXBlW2NhcmQtPnR5cF0sCisJCSAgICAgICAiSGlTYXg6IE5FVHNwaWRlci1VIGNvbmZpZyBwb3J0ICUjbHgtJSNseCAiCisJCSAgICAgICAiYWxyZWFkeSBpbiB1c2VcbiIsCiAJCSAgICAgICBjcy0+aHcubmpldC5iYXNlLAogCQkgICAgICAgY3MtPmh3Lm5qZXQuYmFzZSArIGJ5dGVjbnQpOwogCQlyZXR1cm4gKDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3MwYm94LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvczBib3guYwppbmRleCAxNTBlZjY4Li4xNmQwMGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvczBib3guYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvczBib3guYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgImhzY3guaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiBzdGF0aWMgY29uc3QgY2hhciAqczBib3hfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjYuMi40ICQiOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTIzMSwxOSArMjMwLDE1IEBACiAJY3MtPmh3LnRlbGVzMy5oc2N4Zmlmb1sxXSA9IGNzLT5ody50ZWxlczMuaHNjeFsxXSArIDB4M2U7CiAJY3MtPmlycSA9IGNhcmQtPnBhcmFbMF07CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcudGVsZXMzLmNmZ19yZWcsOCwgIlMwQm94IHBhcmFsbGVsIEkvTyIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJIaVNheDogJXMgcG9ydHMgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCi0JCSAgICAgICBDYXJkVHlwZVtjcy0+dHlwXSwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGlTYXg6IFMwQm94IHBvcnRzICV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBjcy0+aHcudGVsZXMzLmNmZ19yZWcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNzLT5ody50ZWxlczMuY2ZnX3JlZyArIDcpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTwotCQkiSGlTYXg6ICVzIGNvbmZpZyBpcnE6JWQgaXNhYzoweCV4ICBjZmc6MHgleFxuIiwKLQkJQ2FyZFR5cGVbY3MtPnR5cF0sIGNzLT5pcnEsCisJcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6IFMwQm94IGNvbmZpZyBpcnE6JWQgaXNhYzoweCV4ICBjZmc6MHgleFxuIiwKKwkJY3MtPmlycSwKIAkJY3MtPmh3LnRlbGVzMy5pc2FjLCBjcy0+aHcudGVsZXMzLmNmZ19yZWcpOwotCXByaW50ayhLRVJOX0lORk8KLQkJIkhpU2F4OiBoc2N4IEE6MHgleCAgaHNjeCBCOjB4JXhcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6IGhzY3ggQToweCV4ICBoc2N4IEI6MHgleFxuIiwKIAkJY3MtPmh3LnRlbGVzMy5oc2N4WzBdLCBjcy0+aHcudGVsZXMzLmhzY3hbMV0pOwogCXNldHVwX2lzYWMoY3MpOwogCWNzLT5yZWFkaXNhYyA9ICZSZWFkSVNBQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zYXBoaXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zYXBoaXIuYwppbmRleCBjOTliMTY2Li5iMzRhODFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2FwaGlyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NhcGhpci5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiaHNjeC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKIHN0YXRpYyBjaGFyICpzYXBoaXJfcmV2ID0gIiRSZXZpc2lvbjogMS4xMC4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKQEAgLTI2MCwxNSArMjU5LDE0IEBACiAJY3MtPmlycSA9IGNhcmQtPnBhcmFbMF07CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjcy0+aHcuc2FwaGlyLmNmZ19yZWcsIDYsICJzYXBoaXIiKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiSGlTYXg6ICVzIGNvbmZpZyBwb3J0ICV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkJQ2FyZFR5cGVbY2FyZC0+dHlwXSwKKwkJCSJIaVNheDogSFNUIFNhcGhpciBjb25maWcgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJCWNzLT5ody5zYXBoaXIuY2ZnX3JlZywKIAkJCWNzLT5ody5zYXBoaXIuY2ZnX3JlZyArIDUpOwogCQlyZXR1cm4gKDApOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiAlcyBjb25maWcgaXJxOiVkIGlvOjB4JVhcbiIsCi0JCUNhcmRUeXBlW2NzLT50eXBdLCBjcy0+aXJxLCBjcy0+aHcuc2FwaGlyLmNmZ19yZWcpOworCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiBIU1QgU2FwaGlyIGNvbmZpZyBpcnE6JWQgaW86MHglWFxuIiwKKwkgICAgICAgY3MtPmlycSwgY3MtPmh3LnNhcGhpci5jZmdfcmVnKTsKIAogCXNldHVwX2lzYWMoY3MpOwogCWNzLT5ody5zYXBoaXIudGltZXIuZnVuY3Rpb24gPSAodm9pZCAqKSBTYXBoaXJXYXRjaERvZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zcG9ydHN0ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zcG9ydHN0ZXIuYwppbmRleCAwMjIwOTUwLi4wYTUzNzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3BvcnRzdGVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3Nwb3J0c3Rlci5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiaHNjeC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKIHN0YXRpYyBjb25zdCBjaGFyICpzcG9ydHN0ZXJfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjE2LjIuNCAkIjsKIAogI2RlZmluZSBieXRlb3V0KGFkZHIsdmFsKSBvdXRiKHZhbCxhZGRyKQpAQCAtMTkyLDkgKzE5MSw5IEBACiAJZm9yIChpPTA7aTw2NDtpKyspIHsKIAkJYWRyID0gY3MtPmh3LnNwdC5jZmdfcmVnICsgaSAqMTAyNDsKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZHIsIDgsICJzcG9ydHN0ZXIiKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJIaVNheDogJXMgY29uZmlnIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCi0JCQkJQ2FyZFR5cGVbY3MtPnR5cF0sIGFkciwgYWRyICsgOCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJIaVNheDogVVNSIFNwb3J0c3RlciBjb25maWcgcG9ydCAiCisJCQkJIiV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAorCQkJCWFkciwgYWRyICsgOCk7CiAJCQlicmVhazsKIAkJfSAKIAl9CkBAIC0yNDcsOCArMjQ2LDggQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwb3J0c3Rlcjogd3JvbmcgSVJRXG4iKTsKIAkJCXJldHVybigwKTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6ICVzIGNvbmZpZyBpcnE6JWQgY2ZnOjB4JVhcbiIsCi0JCUNhcmRUeXBlW2NzLT50eXBdLCBjcy0+aXJxLCBjcy0+aHcuc3B0LmNmZ19yZWcpOworCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiBVU1IgU3BvcnRzdGVyIGNvbmZpZyBpcnE6JWQgY2ZnOjB4JVhcbiIsCisJCWNzLT5pcnEsIGNzLT5ody5zcHQuY2ZnX3JlZyk7CiAJc2V0dXBfaXNhYyhjcyk7CiAJY3MtPnJlYWRpc2FjID0gJlJlYWRJU0FDOwogCWNzLT53cml0ZWlzYWMgPSAmV3JpdGVJU0FDOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVpbnQuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlaW50LmMKaW5kZXggMDkwOTY2Mi4uYjBjZTRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVpbnQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZWludC5jCkBAIC0xNiw4ICsxNiw2IEBACiAjaW5jbHVkZSAiaGZjXzJiczAuaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpUZWxlSW50X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xNi4yLjUgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKQEAgLTI4Niw4ICsyODQsNyBAQAogCWluaXRfdGltZXIoJmNzLT5ody5oZmMudGltZXIpOwogCWlmICghcmVxdWVzdF9yZWdpb24oY3MtPmh3LmhmYy5hZGRyLCAyLCAiVGVsZUludCBpc2RuIikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkhpU2F4OiAlcyBjb25maWcgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJICAgICAgIENhcmRUeXBlW2NhcmQtPnR5cF0sCisJCSAgICAgICAiSGlTYXg6IFRlbGVJbnQgY29uZmlnIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCiAJCSAgICAgICBjcy0+aHcuaGZjLmFkZHIsCiAJCSAgICAgICBjcy0+aHcuaGZjLmFkZHIgKyAyKTsKIAkJcmV0dXJuICgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzcGNpLmMKaW5kZXggNDM5MzAwMy4uMjhiMDhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzcGNpLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlICJpc2RubDEuaCIKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiBzdGF0aWMgY29uc3QgY2hhciAqdGVsZXNwY2lfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjIzLjIuMyAkIjsKIAogI2RlZmluZSBaT1JBTl9QT19SUV9QRU4JMHgwMjAwMDAwMApAQCAtMzI5LDggKzMyOCw4IEBACiAJLyogd3JpdGVsKDB4MDA4MDAwMDAsIGNzLT5ody50ZWxlczAubWVtYmFzZSArIDB4MjAwKTsgKi8KIAogCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIkhpU2F4OiAlcyBjb25maWcgaXJxOiVkIG1lbTolcFxuIiwKLQkgICAgICAgQ2FyZFR5cGVbY3MtPnR5cF0sIGNzLT5pcnEsCisJICAgICAgICJIaVNheDogVGVsZXMgUENJIGNvbmZpZyBpcnE6JWQgbWVtOiVwXG4iLAorCSAgICAgICBjcy0+aXJxLAogCSAgICAgICBjcy0+aHcudGVsZXMwLm1lbWJhc2UpOwogCiAJc2V0dXBfaXNhYyhjcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCmluZGV4IDM5MTI5YjkuLmJiMWM4ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCkBAIC0zOCw4ICszOCw2IEBACiAjZGVmaW5lIFc2NjkyX0RZTkFMSU5LIDEKICNkZWZpbmUgVzY2OTJfVVNSICAgICAgMgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKnc2NjkyX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xOC4yLjQgJCI7CiAKICNkZWZpbmUgREJVU1lfVElNRVJfVkFMVUUgODAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwppbmRleCA5Y2VmNmZjLi5kNGFkNjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCkBAIC05ODEsMTMgKzk4MSwxMyBAQAogfQogCiAKLXN0YXRpYyBfX2lubGluZSBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBpc2RuX21pbm9yMmRydihpbnQgbWlub3IpCiB7CiAJcmV0dXJuIChkZXYtPmRydm1hcFttaW5vcl0pOwogfQogCi1zdGF0aWMgX19pbmxpbmUgaW50CitzdGF0aWMgaW5saW5lIGludAogaXNkbl9taW5vcjJjaGFuKGludCBtaW5vcikKIHsKIAlyZXR1cm4gKGRldi0+Y2hhbm1hcFttaW5vcl0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCmluZGV4IGNlZDgzYzIuLmVmMWEzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKQEAgLTIwMTAsNiArMjAxMCw3IEBACiAJbmRldi0+ZmxhZ3MgPSBJRkZfTk9BUlB8SUZGX1BPSU5UT1BPSU5UOwogCW5kZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CiAJbmRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKKwluZGV2LT52YWxpZGF0ZV9hZGRyID0gTlVMTDsKIAogCS8qIGZvciBjbGllbnRzIHdpdGggTVBQUCBtYXliZSBoaWdoZXIgdmFsdWVzIGJldHRlciAqLwogCW5kZXYtPnR4X3F1ZXVlX2xlbiA9IDMwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eWZheC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eWZheC5jCmluZGV4IGY5M2RlNGEuLjc4Zjc2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHlmYXguYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5ZmF4LmMKQEAgLTkwNiw3ICs5MDYsOCBAQAogCQkJc3ByaW50ZihycywgIlxyXG4wLTIiKTsKIAkJCWlzZG5fdHR5X2F0X2NvdXQocnMsIGluZm8pOwogCQl9IGVsc2UgewotCQkJaWYgKChmLT5waGFzZSAhPSBJU0ROX0ZBWF9QSEFTRV9EKSB8fCAoIWluZm8tPmZheG9ubGluZSAmIDEpKQorCQkJaWYgKChmLT5waGFzZSAhPSBJU0ROX0ZBWF9QSEFTRV9EKSB8fAorCQkJICAgICghKGluZm8tPmZheG9ubGluZSAmIDEpKSkKIAkJCQlQQVJTRV9FUlJPUjE7CiAJCQlwYXIgPSBpc2RuX2dldG51bShwKTsKIAkJCWlmICgocGFyIDwgMCkgfHwgKHBhciA+IDIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3YxMTAuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl92MTEwLmMKaW5kZXggNTQ4NGQzYy4uYzVkMDJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3YxMTAuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdjExMC5jCkBAIC02Miw3ICs2Miw3IEBACiAgKiBhbmQgdG8gNjc0NTIzMDEgd2hlbiBrZXlsZW4gPSAyLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9yZGVyaW5nIG9uCiAgKiB0aGUgaXNkbiBsaW5lIGlzIHRoZSBvdGhlciB3YXkuCiAgKi8KLXN0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIKIEZsaXBCaXRzKHVuc2lnbmVkIGNoYXIgYywgaW50IGtleWxlbikKIHsKIAl1bnNpZ25lZCBjaGFyIGIgPSBjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMgYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYwppbmRleCA2NTVlZjlhLi5hMzM1Yzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYworKysgYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYwpAQCAtMTI4OSw3ICsxMjg5LDcgQEAKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCWNhc2UgSVNETl9DTURfQ0xSRUFaOgotCQkJCWlmICghY2FyZC0+ZmxhZ3MgJiBJU0ROTE9PUF9GTEFHU19SVU5OSU5HKQorCQkJCWlmICghKGNhcmQtPmZsYWdzICYgSVNETkxPT1BfRkxBR1NfUlVOTklORykpCiAJCQkJCXJldHVybiAtRU5PREVWOwogCQkJCWlmIChjYXJkLT5sZWFzZWQpCiAJCQkJCWJyZWFrOwpAQCAtMTMzMyw3ICsxMzMzLDcgQEAKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCWNhc2UgSVNETl9DTURfU0VUTDM6Ci0JCQkJaWYgKCFjYXJkLT5mbGFncyAmIElTRE5MT09QX0ZMQUdTX1JVTk5JTkcpCisJCQkJaWYgKCEoY2FyZC0+ZmxhZ3MgJiBJU0ROTE9PUF9GTEFHU19SVU5OSU5HKSkKIAkJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQkJcmV0dXJuIDA7CiAJCWRlZmF1bHQ6CkBAIC0xMzgwLDcgKzEzODAsNyBAQAogCWlzZG5sb29wX2NhcmQgKmNhcmQgPSBpc2RubG9vcF9maW5kY2FyZChpZCk7CiAKIAlpZiAoY2FyZCkgewotCQlpZiAoIWNhcmQtPmZsYWdzICYgSVNETkxPT1BfRkxBR1NfUlVOTklORykKKwkJaWYgKCEoY2FyZC0+ZmxhZ3MgJiBJU0ROTE9PUF9GTEFHU19SVU5OSU5HKSkKIAkJCXJldHVybiAtRU5PREVWOwogCQlyZXR1cm4gKGlzZG5sb29wX3dyaXRlY21kKGJ1ZiwgbGVuLCAxLCBjYXJkKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA4NTk4MTRmLi5hM2E2MTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtNDYsMTMgKzQ2LDYgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMgb24gU2hhcnAgWmF1cnVzCiAJICBTTC1DeHgwMCBzZXJpZXMgKEMxMDAwLCBDMzAwMCwgQzMxMDApLgogCi1jb25maWcgTEVEU19UT1NBCi0JdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciB0aGUgU2hhcnAgU0wtNjAwMCBzZXJpZXMiCi0JZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIFBYQV9TSEFSUFNMCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTEVEcyBvbiBTaGFycCBaYXVydXMKLQkgIFNMLTYwMDAgc2VyaWVzLgotCiBjb25maWcgTEVEU19TM0MyNFhYCiAJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciBTYW1zdW5nIFMzQzI0WFggR1BJTyBMRURzIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBBUkNIX1MzQzI0MTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQppbmRleCA4NGNlZDNiLi5lNTRmNDJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtOSw3ICs5LDYgQEAKIG9iai0kKENPTkZJR19MRURTX0NPUkdJKQkJKz0gbGVkcy1jb3JnaS5vCiBvYmotJChDT05GSUdfTEVEU19MT0NPTU8pCQkrPSBsZWRzLWxvY29tby5vCiBvYmotJChDT05GSUdfTEVEU19TUElUWikJCSs9IGxlZHMtc3BpdHoubwotb2JqLSQoQ09ORklHX0xFRFNfVE9TQSkJCQkrPSBsZWRzLXRvc2Eubwogb2JqLSQoQ09ORklHX0xFRFNfUzNDMjRYWCkJCSs9IGxlZHMtczNjMjR4eC5vCiBvYmotJChDT05GSUdfTEVEU19BTVNfREVMVEEpCQkrPSBsZWRzLWFtcy1kZWx0YS5vCiBvYmotJChDT05GSUdfTEVEU19ORVQ0OFhYKQkJKz0gbGVkcy1uZXQ0OHh4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwppbmRleCA0YTkzODc4Li42M2FhZDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCkBAIC0xMzksMTIgKzEzOSwxMCBAQAogLyoqCiAgKiBfX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlcnMgYSBvYmplY3Qgb2YgbGVkX3Byb3BlcnRpZXMgY2xhc3MuCiAgKiBAbGVkX2NkZXY6IHRoZSBsZWQgZGV2aWNlIHRvIHVucmVnaXN0ZXIKLSAqIEBzdXNwZW5kZWQ6IGluZGljYXRlcyB3aGV0aGVyIHN5c3RlbS13aWRlIHN1c3BlbmQgb3IgcmVzdW1lIGlzIGluIHByb2dyZXNzCiAgKgogICogVW5yZWdpc3RlcnMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdmlhIGxlZF9jbGFzc2Rldl9yZWdpc3RlciBvYmplY3QuCiAgKi8KLXZvaWQgX19sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKLQkJCQkgICAgICBib29sIHN1c3BlbmRlZCkKK3ZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiB7CiAJZGV2aWNlX3JlbW92ZV9maWxlKGxlZF9jZGV2LT5kZXYsICZkZXZfYXR0cl9icmlnaHRuZXNzKTsKICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwpAQCAtMTU1LDE2ICsxNTMsMTMgQEAKIAl1cF93cml0ZSgmbGVkX2NkZXYtPnRyaWdnZXJfbG9jayk7CiAjZW5kaWYKIAotCWlmIChzdXNwZW5kZWQpCi0JCWRldmljZV9wbV9zY2hlZHVsZV9yZW1vdmFsKGxlZF9jZGV2LT5kZXYpOwotCWVsc2UKLQkJZGV2aWNlX3VucmVnaXN0ZXIobGVkX2NkZXYtPmRldik7CisJZGV2aWNlX3VucmVnaXN0ZXIobGVkX2NkZXYtPmRldik7CiAKIAlkb3duX3dyaXRlKCZsZWRzX2xpc3RfbG9jayk7CiAJbGlzdF9kZWwoJmxlZF9jZGV2LT5ub2RlKTsKIAl1cF93cml0ZSgmbGVkc19saXN0X2xvY2spOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoX19sZWRfY2xhc3NkZXZfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTChsZWRfY2xhc3NkZXZfdW5yZWdpc3Rlcik7CiAKIHN0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtYW1zLWRlbHRhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1hbXMtZGVsdGEuYwppbmRleCA5ZTMwNzc0Li5jMzdiYjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1hbXMtZGVsdGEuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1hbXMtZGVsdGEuYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJLnJlc3VtZQkJPSBhbXNfZGVsdGFfbGVkX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUgPSAiYW1zLWRlbHRhLWxlZCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xNTksMyArMTYwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIkpvbmF0aGFuIE1jRG93ZWxsIDxub29kbGVzQGVhcnRoLmxpPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbXN0cmFkIERlbHRhIExFRCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YW1zLWRlbHRhLWxlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtYXRtZWwtcHdtLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1hdG1lbC1wd20uYwppbmRleCBhZjYxZjU1Li4yOGRiNmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1hdG1lbC1wd20uYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1hdG1lbC1wd20uYwpAQCAtMTMyLDYgKzEzMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpsZWRzLWF0bWVsLXB3bSIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwd21sZWRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0JCSJsZWRzLWF0bWVsLXB3bSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMKaW5kZXggNmMzZDMzYi4uNTc1MGIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY2xldm8tbWFpbC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYwpAQCAtMTcwLDYgKzE3MCw3IEBACiAJLnJlc3VtZQkJPSBjbGV2b19tYWlsX2xlZF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNtLXgyNzAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNtLXgyNzAuYwppbmRleCA5YWViZWYwLi5hY2NjN2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jbS14MjcwLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY20teDI3MC5jCkBAIC0xMDEsNiArMTAxLDcgQEAKICNlbmRpZgogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAiY20teDI3MC1sZWQiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTEyMCwzICsxMjEsNCBAQAogTU9EVUxFX0FVVEhPUigiTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ00teDI3MCBMRUQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNtLXgyNzAtbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYwppbmRleCBkMmI1NGI1Li4wOTY4ODFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKQEAgLTc1LDYgKzc1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNvYmFsdC1xdWJlLWxlZHMiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29iYWx0X3F1YmVfbGVkX2RyaXZlciA9IHsKIAkucHJvYmUJPSBjb2JhbHRfcXViZV9sZWRfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGNvYmFsdF9xdWJlX2xlZF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY29yZ2kuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvcmdpLmMKaW5kZXggZTQ1ZjZjNC4uMjllOTMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY29yZ2kuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb3JnaS5jCkBAIC05OSw2ICs5OSw3IEBACiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gImNvcmdpLWxlZCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtMTE4LDMgKzExOSw0IEBACiBNT0RVTEVfQVVUSE9SKCJSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ29yZ2kgTEVEIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpjb3JnaS1sZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYwppbmRleCA2YzBhOWM0Li4xYWFlOGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jCkBAIC00OSwxMyArNDksMTMgQEAKIAlpZiAobGVkX2RhdC0+YWN0aXZlX2xvdykKIAkJbGV2ZWwgPSAhbGV2ZWw7CiAKLQkvKiBzZXR0aW5nIEdQSU9zIHdpdGggSTJDL2V0YyByZXF1aXJlcyBhIHByZWVtcHRpYmxlIHRhc2sgY29udGV4dCAqLworCS8qIFNldHRpbmcgR1BJT3Mgd2l0aCBJMkMvZXRjIHJlcXVpcmVzIGEgdGFzayBjb250ZXh0LCBhbmQgd2UgZG9uJ3QKKwkgKiBzZWVtIHRvIGhhdmUgYSByZWxpYWJsZSB3YXkgdG8ga25vdyBpZiB3ZSdyZSBhbHJlYWR5IGluIG9uZTsgc28KKwkgKiBsZXQncyBqdXN0IGFzc3VtZSB0aGUgd29yc3QuCisJICovCiAJaWYgKGxlZF9kYXQtPmNhbl9zbGVlcCkgewotCQlpZiAocHJlZW1wdF9jb3VudCgpKSB7Ci0JCQlsZWRfZGF0LT5uZXdfbGV2ZWwgPSBsZXZlbDsKLQkJCXNjaGVkdWxlX3dvcmsoJmxlZF9kYXQtPndvcmspOwotCQl9IGVsc2UKLQkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGxlZF9kYXQtPmdwaW8sIGxldmVsKTsKKwkJbGVkX2RhdC0+bmV3X2xldmVsID0gbGV2ZWw7CisJCXNjaGVkdWxlX3dvcmsoJmxlZF9kYXQtPndvcmspOwogCX0gZWxzZQogCQlncGlvX3NldF92YWx1ZShsZWRfZGF0LT5ncGlvLCBsZXZlbCk7CiB9CkBAIC03OSw2ICs3OSwxMCBAQAogCQljdXJfbGVkID0gJnBkYXRhLT5sZWRzW2ldOwogCQlsZWRfZGF0ID0gJmxlZHNfZGF0YVtpXTsKIAorCQlyZXQgPSBncGlvX3JlcXVlc3QoY3VyX2xlZC0+Z3BpbywgY3VyX2xlZC0+bmFtZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnI7CisKIAkJbGVkX2RhdC0+Y2Rldi5uYW1lID0gY3VyX2xlZC0+bmFtZTsKIAkJbGVkX2RhdC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBjdXJfbGVkLT5kZWZhdWx0X3RyaWdnZXI7CiAJCWxlZF9kYXQtPmdwaW8gPSBjdXJfbGVkLT5ncGlvOwpAQCAtODcsMTAgKzkxLDYgQEAKIAkJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IGdwaW9fbGVkX3NldDsKIAkJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzID0gTEVEX09GRjsKIAotCQlyZXQgPSBncGlvX3JlcXVlc3QobGVkX2RhdC0+Z3BpbywgbGVkX2RhdC0+Y2Rldi5uYW1lKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjsKLQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQobGVkX2RhdC0+Z3BpbywgbGVkX2RhdC0+YWN0aXZlX2xvdyk7CiAKIAkJSU5JVF9XT1JLKCZsZWRfZGF0LT53b3JrLCBncGlvX2xlZF93b3JrKTsKQEAgLTE5OSwzICsxOTksNCBAQAogTU9EVUxFX0FVVEhPUigiUmFwaGFlbCBBc3NlbmF0IDxyYXBoQDhkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR1BJTyBMRUQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmxlZHMtZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtaDE5NDAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWgxOTQwLmMKaW5kZXggNjc3Yzk5My4uNmU1MWM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtaDE5NDAuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1oMTk0MC5jCkBAIC0xMzksNiArMTM5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGgxOTQwbGVkc19kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImgxOTQwLWxlZHMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSBoMTk0MGxlZHNfcHJvYmUsCiAJLnJlbW92ZQkJPSBoMTk0MGxlZHNfcmVtb3ZlLApAQCAtMTYxLDMgKzE2Miw0IEBACiBNT0RVTEVfQVVUSE9SKCJBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJMRUQgZHJpdmVyIGZvciB0aGUgaVBBUSBIMTk0MCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpoMTk0MC1sZWRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtaHA2eHguYwppbmRleCA4MmQ0ZWMzLi44NzBmNWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMKQEAgLTkwLDYgKzkwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmhwNnh4LWxlZCIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBocDZ4eGxlZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGhwNnh4bGVkX3Byb2JlLAogCS5yZW1vdmUJCT0gaHA2eHhsZWRfcmVtb3ZlLApAQCAtOTksNiArMTAyLDcgQEAKICNlbmRpZgogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAiaHA2eHgtbGVkIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKaW5kZXggMGZkNjQwNy4uMGQxMGUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYwpAQCAtMTYwLDMgKzE2MCw0IEBACiBNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzI0WFggTEVEIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNHh4X2xlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtc3BpdHouYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXNwaXR6LmMKaW5kZXggOTNlMTAxMi4uODcwMDdjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtc3BpdHouYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1zcGl0ei5jCkBAIC0xMDUsNiArMTA1LDcgQEAKICNlbmRpZgogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAic3BpdHotbGVkIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xMjQsMyArMTI1LDQgQEAKIE1PRFVMRV9BVVRIT1IoIlJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGl0eiBMRUQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNwaXR6LWxlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdG9zYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdG9zYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTBhMTg4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXRvc2EuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogTEVEIFRyaWdnZXJzIENvcmUKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNSBEaXJrIE9wZmVyCi0gKgotICogQXV0aG9yOiBEaXJrIE9wZmVyIDxEaXJrQE9wZmVyLU9ubGluZS5kZT4KLSAqCWJhc2VkIG9uIHNwaXR6LmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90b3NhLmg+Ci0KLXN0YXRpYyB2b2lkIHRvc2FsZWRfYW1iZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAotCQkJCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCi17Ci0JaWYgKHZhbHVlKQotCQlzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2pjX2RldmljZS5kZXYsCi0JCQkJVE9TQV9TQ09PUF9KQ19DSFJHX0VSUl9MRUQpOwotCWVsc2UKLQkJcmVzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2pjX2RldmljZS5kZXYsCi0JCQkJVE9TQV9TQ09PUF9KQ19DSFJHX0VSUl9MRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0b3NhbGVkX2dyZWVuX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKLQkJCQllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQotewotCWlmICh2YWx1ZSkKLQkJc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9qY19kZXZpY2UuZGV2LAotCQkJCVRPU0FfU0NPT1BfSkNfTk9URV9MRUQpOwotCWVsc2UKLQkJcmVzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2pjX2RldmljZS5kZXYsCi0JCQkJVE9TQV9TQ09PUF9KQ19OT1RFX0xFRCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHRvc2FfYW1iZXJfbGVkID0gewotCS5uYW1lCQkJPSAidG9zYTphbWJlcjpjaGFyZ2UiLAotCS5kZWZhdWx0X3RyaWdnZXIJPSAic2hhcnBzbC1jaGFyZ2UiLAotCS5icmlnaHRuZXNzX3NldAkJPSB0b3NhbGVkX2FtYmVyX3NldCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHRvc2FfZ3JlZW5fbGVkID0gewotCS5uYW1lCQkJPSAidG9zYTpncmVlbjptYWlsIiwKLQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCi0JLmJyaWdodG5lc3Nfc2V0CQk9IHRvc2FsZWRfZ3JlZW5fc2V0LAotfTsKLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCB0b3NhbGVkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKLQlpZiAodG9zYV9hbWJlcl9sZWQudHJpZ2dlciAmJiBzdHJjbXAodG9zYV9hbWJlcl9sZWQudHJpZ2dlci0+bmFtZSwKLQkJCQkJCSJzaGFycHNsLWNoYXJnZSIpKQotI2VuZGlmCi0JCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZ0b3NhX2FtYmVyX2xlZCk7Ci0JbGVkX2NsYXNzZGV2X3N1c3BlbmQoJnRvc2FfZ3JlZW5fbGVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0b3NhbGVkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JbGVkX2NsYXNzZGV2X3Jlc3VtZSgmdG9zYV9hbWJlcl9sZWQpOwotCWxlZF9jbGFzc2Rldl9yZXN1bWUoJnRvc2FfZ3JlZW5fbGVkKTsKLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi0jZGVmaW5lIHRvc2FsZWRfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHRvc2FsZWRfcmVzdW1lIE5VTEwKLSNlbmRpZgotCi1zdGF0aWMgaW50IHRvc2FsZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZ0b3NhX2FtYmVyX2xlZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJnRvc2FfZ3JlZW5fbGVkKTsKLQlpZiAocmV0IDwgMCkKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnRvc2FfYW1iZXJfbGVkKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdG9zYWxlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmdG9zYV9hbWJlcl9sZWQpOwotCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZ0b3NhX2dyZWVuX2xlZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdG9zYWxlZF9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHRvc2FsZWRfcHJvYmUsCi0JLnJlbW92ZQkJPSB0b3NhbGVkX3JlbW92ZSwKLQkuc3VzcGVuZAk9IHRvc2FsZWRfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHRvc2FsZWRfcmVzdW1lLAotCS5kcml2ZXIJCT0gewotCQkubmFtZQkJPSAidG9zYS1sZWQiLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0b3NhbGVkX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0b3NhbGVkX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0b3NhbGVkX2V4aXQodm9pZCkKLXsKLSAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRvc2FsZWRfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodG9zYWxlZF9pbml0KTsKLW1vZHVsZV9leGl0KHRvc2FsZWRfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkRpcmsgT3BmZXIgPERpcmtAT3BmZXItT25saW5lLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJUb3NhIExFRCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L01ha2VmaWxlIGIvZHJpdmVycy9sZ3Vlc3QvTWFrZWZpbGUKaW5kZXggNWU4MjcyZC4uN2Q0NjNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZ3Vlc3QvTWFrZWZpbGUKQEAgLTE5LDMgKzE5LDExIEBACiAJQGZvciBmIGluIFByZXBhcmF0aW9uIEd1ZXN0IERyaXZlcnMgTGF1bmNoZXIgSG9zdCBTd2l0Y2hlciBNYXN0ZXJ5OyBkbyBlY2hvICJ7PT0tICQkZiAtPT19IjsgbWFrZSAtcyAkJGY7IGRvbmU7IGVjaG8gIns9PS09PX0iCiBQcmVwYXJhdGlvbiBQcmVwYXJhdGlvbiEgR3Vlc3QgRHJpdmVycyBMYXVuY2hlciBIb3N0IFN3aXRjaGVyIE1hc3Rlcnk6CiAJQHNoIC4uLy4uL0RvY3VtZW50YXRpb24vbGd1ZXN0L2V4dHJhY3QgJChQUkVGSVgpIGBmaW5kIC4uLy4uLyogLW5hbWUgJyouW2NoU10nIC13aG9sZW5hbWUgJypsZ3Vlc3QqJ2AKK1B1cHB5OgorCUBjbGVhcgorCUBwcmludGYgIiAgICAgIF9fICBcbiAoX19fKCknXGA7XG4gLywgICAgL1xgXG4gXFxcXFxcXCItLVxcXFxcXCAgIFxuIgorCUBzbGVlcCAyOyBjbGVhcjsgcHJpbnRmICJcblxuICAgU2l0IVxuXG4iOyBzbGVlcCAxOyBjbGVhcgorCUBwcmludGYgIiAgICBfXyAgICBcbiAgICgpJ1xgOyAgXG4gICAvXFx8XGAgXG4gIC8gIHwgIFxuKC9fKV98XyAgIFxuIgorCUBzbGVlcCAyOyBjbGVhcjsgcHJpbnRmICJcblxuICBTdGFuZCFcblxuIjsgc2xlZXAgMTsgY2xlYXIKKwlAcHJpbnRmICIgICAgX18gICAgXG4gICAoKSdcYDsgIFxuICAgL1xcfFxgIFxuICAvLl8uPSBcbiAvfCAvICAgICBcbihfXF8pXyAgICBcbiIKKwlAc2xlZXAgMjsgY2xlYXI7IHByaW50ZiAiXG5cbiAgR29vZCBwdXBweSFcblxuIjsgc2xlZXAgMTsgY2xlYXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2NvcmUuYyBiL2RyaXZlcnMvbGd1ZXN0L2NvcmUuYwppbmRleCA3NzQzZDczLi41ZWVhNDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9jb3JlLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvY29yZS5jCkBAIC0xLDggKzEsNiBAQAogLypQOjQwMCBUaGlzIGNvbnRhaW5zIHJ1bl9ndWVzdCgpIHdoaWNoIGFjdHVhbGx5IGNhbGxzIGludG8gdGhlIEhvc3Q8LT5HdWVzdAogICogU3dpdGNoZXIgYW5kIGFuYWx5emVzIHRoZSByZXR1cm4sIHN1Y2ggYXMgZGV0ZXJtaW5pbmcgaWYgdGhlIEd1ZXN0IHdhbnRzIHRoZQotICogSG9zdCB0byBkbyBzb21ldGhpbmcuICBUaGlzIGZpbGUgYWxzbyBjb250YWlucyB1c2VmdWwgaGVscGVyIHJvdXRpbmVzLCBhbmQgYQotICogY291cGxlIG9mIG5vbi1vYnZpb3VzIHNldHVwIGFuZCB0ZWFyZG93biBwaWVjZXMgd2hpY2ggd2VyZSBpbXBsZW1lbnRlZCBhZnRlcgotICogZGF5cyBvZiBkZWJ1Z2dpbmcgcGFpbi4gOiovCisgKiBIb3N0IHRvIGRvIHNvbWV0aGluZy4gIFRoaXMgZmlsZSBhbHNvIGNvbnRhaW5zIHVzZWZ1bCBoZWxwZXIgcm91dGluZXMuIDoqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpAQCAtNDksOCArNDcsOCBAQAogCSAqIGVhc3kuCiAJICovCiAKLQkvKiBXZSBhbGxvY2F0ZSBhbiBhcnJheSBvZiAic3RydWN0IHBhZ2Uicy4gIG1hcF92bV9hcmVhKCkgd2FudHMgdGhlCi0JICogcGFnZXMgaW4gdGhpcyBmb3JtLCByYXRoZXIgdGhhbiBqdXN0IGFuIGFycmF5IG9mIHBvaW50ZXJzLiAqLworCS8qIFdlIGFsbG9jYXRlIGFuIGFycmF5IG9mIHN0cnVjdCBwYWdlIHBvaW50ZXJzLiAgbWFwX3ZtX2FyZWEoKSB3YW50cworCSAqIHRoaXMsIHJhdGhlciB0aGFuIGp1c3QgYW4gYXJyYXkgb2YgcGFnZXMuICovCiAJc3dpdGNoZXJfcGFnZSA9IGttYWxsb2Moc2l6ZW9mKHN3aXRjaGVyX3BhZ2VbMF0pKlRPVEFMX1NXSVRDSEVSX1BBR0VTLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghc3dpdGNoZXJfcGFnZSkgewpAQCAtNjksMTEgKzY3LDIyIEBACiAJCXN3aXRjaGVyX3BhZ2VbaV0gPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CiAJfQogCisJLyogRmlyc3Qgd2UgY2hlY2sgdGhhdCB0aGUgU3dpdGNoZXIgd29uJ3Qgb3ZlcmxhcCB0aGUgZml4bWFwIGFyZWEgYXQKKwkgKiB0aGUgdG9wIG9mIG1lbW9yeS4gIEl0J3MgY3VycmVudGx5IG5vd2hlcmUgbmVhciwgYnV0IGl0IGNvdWxkIGhhdmUKKwkgKiB2ZXJ5IHN0cmFuZ2UgZWZmZWN0cyBpZiBpdCBldmVyIGhhcHBlbmVkLiAqLworCWlmIChTV0lUQ0hFUl9BRERSICsgKFRPVEFMX1NXSVRDSEVSX1BBR0VTKzEpKlBBR0VfU0laRSA+IEZJWEFERFJfU1RBUlQpeworCQllcnIgPSAtRU5PTUVNOworCQlwcmludGsoImxndWVzdDogbWFwcGluZyBzd2l0Y2hlciB3b3VsZCB0aHdhY2sgZml4bWFwXG4iKTsKKwkJZ290byBmcmVlX3BhZ2VzOworCX0KKwogCS8qIE5vdyB3ZSByZXNlcnZlIHRoZSAidmlydHVhbCBtZW1vcnkgYXJlYSIgd2Ugd2FudDogMHhGRkMwMDAwMAogCSAqIChTV0lUQ0hFUl9BRERSKS4gIFdlIG1pZ2h0IG5vdCBnZXQgaXQgaW4gdGhlb3J5LCBidXQgaW4gcHJhY3RpY2UKLQkgKiBpdCdzIHdvcmtlZCBzbyBmYXIuICovCisJICogaXQncyB3b3JrZWQgc28gZmFyLiAgVGhlIGVuZCBhZGRyZXNzIG5lZWRzICsxIGJlY2F1c2UgX19nZXRfdm1fYXJlYQorCSAqIGFsbG9jYXRlcyBhbiBleHRyYSBndWFyZCBwYWdlLCBzbyB3ZSBuZWVkIHNwYWNlIGZvciB0aGF0LiAqLwogCXN3aXRjaGVyX3ZtYSA9IF9fZ2V0X3ZtX2FyZWEoVE9UQUxfU1dJVENIRVJfUEFHRVMgKiBQQUdFX1NJWkUsCi0JCQkJICAgICAgIFZNX0FMTE9DLCBTV0lUQ0hFUl9BRERSLCBWTUFMTE9DX0VORCk7CisJCQkJICAgICBWTV9BTExPQywgU1dJVENIRVJfQUREUiwgU1dJVENIRVJfQUREUgorCQkJCSAgICAgKyAoVE9UQUxfU1dJVENIRVJfUEFHRVMrMSkgKiBQQUdFX1NJWkUpOwogCWlmICghc3dpdGNoZXJfdm1hKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCXByaW50aygibGd1ZXN0OiBjb3VsZCBub3QgbWFwIHN3aXRjaGVyIHBhZ2VzIGhpZ2hcbiIpOwpAQCAtMTYxLDcgKzE3MCw3IEBACiAJfQogfQogCi0vKiBUaGlzIGlzIHRoZSB3cml0ZSAoY29weSBpbnRvIGd1ZXN0KSB2ZXJzaW9uLiAqLworLyogVGhpcyBpcyB0aGUgd3JpdGUgKGNvcHkgaW50byBHdWVzdCkgdmVyc2lvbi4gKi8KIHZvaWQgX19sZ3dyaXRlKHN0cnVjdCBsZ19jcHUgKmNwdSwgdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpiLAogCSAgICAgICB1bnNpZ25lZCBieXRlcykKIHsKQEAgLTE5OCw5ICsyMDcsOSBAQAogCQlpZiAoY3B1LT5icmVha19vdXQpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAotCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IGludGVycnVwdHMgd2hpY2ggY2FuIGJlIGRlbGl2ZXJlZAotCQkgKiBub3c6IGlmIHNvLCB0aGlzIHNldHMgdXAgdGhlIGhhbmRlciB0byBiZSBleGVjdXRlZCB3aGVuIHdlCi0JCSAqIG5leHQgcnVuIHRoZSBHdWVzdC4gKi8KKwkJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBpbnRlcnJ1cHRzIHdoaWNoIGNhbiBiZSBkZWxpdmVyZWQgbm93OgorCQkgKiBpZiBzbywgdGhpcyBzZXRzIHVwIHRoZSBoYW5kZXIgdG8gYmUgZXhlY3V0ZWQgd2hlbiB3ZSBuZXh0CisJCSAqIHJ1biB0aGUgR3Vlc3QuICovCiAJCW1heWJlX2RvX2ludGVycnVwdChjcHUpOwogCiAJCS8qIEFsbCBsb25nLWxpdmVkIGtlcm5lbCBsb29wcyBuZWVkIHRvIGNoZWNrIHdpdGggdGhpcyBob3JyaWJsZQpAQCAtMjM1LDggKzI0NCwxMCBAQAogCQlsZ3Vlc3RfYXJjaF9oYW5kbGVfdHJhcChjcHUpOwogCX0KIAorCS8qIFNwZWNpYWwgY2FzZTogR3Vlc3QgaXMgJ2RlYWQnIGJ1dCB3YW50cyBhIHJlYm9vdC4gKi8KIAlpZiAoY3B1LT5sZy0+ZGVhZCA9PSBFUlJfUFRSKC1FUkVTVEFSVCkpCiAJCXJldHVybiAtRVJFU1RBUlQ7CisKIAkvKiBUaGUgR3Vlc3QgaXMgZGVhZCA9PiAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIgKi8KIAlyZXR1cm4gLUVOT0VOVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2h5cGVyY2FsbHMuYyBiL2RyaXZlcnMvbGd1ZXN0L2h5cGVyY2FsbHMuYwppbmRleCAwZjJjYjRmLi41NGQ2NmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9oeXBlcmNhbGxzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvaHlwZXJjYWxscy5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAibGcuaCIKIAogLypIOjEyMCBUaGlzIGlzIHRoZSBjb3JlIGh5cGVyY2FsbCByb3V0aW5lOiB3aGVyZSB0aGUgR3Vlc3QgZ2V0cyB3aGF0IGl0IHdhbnRzLgotICogT3IgZ2V0cyBraWxsZWQuICBPciwgaW4gdGhlIGNhc2Ugb2YgTEhDQUxMX0NSQVNILCBib3RoLiAqLworICogT3IgZ2V0cyBraWxsZWQuICBPciwgaW4gdGhlIGNhc2Ugb2YgTEhDQUxMX1NIVVRET1dOLCBib3RoLiAqLwogc3RhdGljIHZvaWQgZG9faGNhbGwoc3RydWN0IGxnX2NwdSAqY3B1LCBzdHJ1Y3QgaGNhbGxfYXJncyAqYXJncykKIHsKIAlzd2l0Y2ggKGFyZ3MtPmFyZzApIHsKQEAgLTE5MCw2ICsxOTAsMTMgQEAKIAkgKiBwYWdldGFibGUuICovCiAJZ3Vlc3RfcGFnZXRhYmxlX2NsZWFyX2FsbChjcHUpOwogfQorLyo6Ki8KKworLypNOjAxMyBJZiBhIEd1ZXN0IHJlYWRzIGZyb20gYSBwYWdlIChzbyBjcmVhdGVzIGEgbWFwcGluZykgdGhhdCBpdCBoYXMgbmV2ZXIKKyAqIHdyaXR0ZW4gdG8sIGFuZCB0aGVuIHRoZSBMYXVuY2hlciB3cml0ZXMgdG8gaXQgKGllLiB0aGUgb3V0cHV0IG9mIGEgdmlydHVhbAorICogZGV2aWNlKSwgdGhlIEd1ZXN0IHdpbGwgc3RpbGwgc2VlIHRoZSBvbGQgcGFnZS4gIEluIHByYWN0aWNlLCB0aGlzIG5ldmVyCisgKiBoYXBwZW5zOiB3aHkgd291bGQgdGhlIEd1ZXN0IHJlYWQgYSBwYWdlIHdoaWNoIGl0IGhhcyBuZXZlciB3cml0dGVuIHRvPyAgQnV0CisgKiBhIHNpbWlsYXIgc2NlbmFyaW8gbWlnaHQgb25lIGRheSBiaXRlIHVzLCBzbyBpdCdzIHdvcnRoIG1lbnRpb25pbmcuIDoqLwogCiAvKkg6MTAwCiAgKiBIeXBlcmNhbGxzCkBAIC0yMjcsNyArMjM0LDcgQEAKIAkJICogSG93ZXZlciwgaWYgd2UgYXJlIHNpZ25hbGxlZCBvciB0aGUgR3Vlc3Qgc2VuZHMgSS9PIHRvIHRoZQogCQkgKiBMYXVuY2hlciwgdGhlIHJ1bl9ndWVzdCgpIGxvb3Agd2lsbCBleGl0IHdpdGhvdXQgcnVubmluZyB0aGUKIAkJICogR3Vlc3QuICBXaGVuIGl0IGNvbWVzIGJhY2sgaXQgd291bGQgdHJ5IHRvIHJlLXJ1biB0aGUKLQkJICogaHlwZXJjYWxsLiAqLworCQkgKiBoeXBlcmNhbGwuICBGaW5kaW5nIHRoYXQgYnVnIHN1Y2tlZC4gKi8KIAkJY3B1LT5oY2FsbCA9IE5VTEw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYyBiL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKaW5kZXggMzJlOTdjMS4uMDQxNGRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYworKysgYi9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCkBAIC0xNDQsNyArMTQ0LDYgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmJsaywgY3B1LT5sZy0+bGd1ZXN0X2RhdGEtPmJsb2NrZWRfaW50ZXJydXB0cywKIAkJCSAgIHNpemVvZihibGspKSkKIAkJcmV0dXJuOwotCiAJYml0bWFwX2FuZG5vdChibGssIGNwdS0+aXJxc19wZW5kaW5nLCBibGssIExHVUVTVF9JUlFTKTsKIAogCS8qIEZpbmQgdGhlIGZpcnN0IGludGVycnVwdC4gKi8KQEAgLTIzNyw5ICsyMzYsOSBAQAogCQljbGVhcl9iaXQoc3lzY2FsbF92ZWN0b3IsIHVzZWRfdmVjdG9ycyk7CiB9CiAKLS8qSDoyMjAgTm93IHdlJ3ZlIGdvdCB0aGUgcm91dGluZXMgdG8gZGVsaXZlciBpbnRlcnJ1cHRzLCBkZWxpdmVyaW5nIHRyYXBzCi0gKiBsaWtlIHBhZ2UgZmF1bHQgaXMgZWFzeS4gIFRoZSBvbmx5IHRyaWNrIGlzIHRoYXQgSW50ZWwgZGVjaWRlZCB0aGF0IHNvbWUKLSAqIHRyYXBzIHNob3VsZCBoYXZlIGVycm9yIGNvZGVzOiAqLworLypIOjIyMCBOb3cgd2UndmUgZ290IHRoZSByb3V0aW5lcyB0byBkZWxpdmVyIGludGVycnVwdHMsIGRlbGl2ZXJpbmcgdHJhcHMgbGlrZQorICogcGFnZSBmYXVsdCBpcyBlYXN5LiAgVGhlIG9ubHkgdHJpY2sgaXMgdGhhdCBJbnRlbCBkZWNpZGVkIHRoYXQgc29tZSB0cmFwcworICogc2hvdWxkIGhhdmUgZXJyb3IgY29kZXM6ICovCiBzdGF0aWMgaW50IGhhc19lcnIodW5zaWduZWQgaW50IHRyYXApCiB7CiAJcmV0dXJuICh0cmFwID09IDggfHwgKHRyYXAgPj0gMTAgJiYgdHJhcCA8PSAxNCkgfHwgdHJhcCA9PSAxNyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9sZy5oIGIvZHJpdmVycy9sZ3Vlc3QvbGcuaAppbmRleCAyMzM3ZTFhLi4wMDViZDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9sZy5oCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2xnLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9sZ3Vlc3QuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jCmluZGV4IDFiMmVjMGIuLjJiYzliZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF9kZXZpY2UuYworKysgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfZGV2aWNlLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qUDowNTAgTGd1ZXN0IGd1ZXN0cyB1c2UgYSB2ZXJ5IHNpbXBsZSBtZXRob2QgdG8gZGVzY3JpYmUgZGV2aWNlcy4gIEl0J3MgYQotICogc2VyaWVzIG9mIGRldmljZSBkZXNjcmlwdG9ycyBjb250YWluZWQganVzdCBhYm92ZSB0aGUgdG9wIG9mIG5vcm1hbAorICogc2VyaWVzIG9mIGRldmljZSBkZXNjcmlwdG9ycyBjb250YWluZWQganVzdCBhYm92ZSB0aGUgdG9wIG9mIG5vcm1hbCBHdWVzdAogICogbWVtb3J5LgogICoKICAqIFdlIHVzZSB0aGUgc3RhbmRhcmQgInZpcnRpbyIgZGV2aWNlIGluZnJhc3RydWN0dXJlLCB3aGljaCBwcm92aWRlcyB1cyB3aXRoIGEKICAqIGNvbnNvbGUsIGEgbmV0d29yayBhbmQgYSBibG9jayBkcml2ZXIuICBFYWNoIG9uZSBleHBlY3RzIHNvbWUgY29uZmlndXJhdGlvbgotICogaW5mb3JtYXRpb24gYW5kIGEgInZpcnRxdWV1ZSIgbWVjaGFuaXNtIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YS4gOiovCisgKiBpbmZvcm1hdGlvbiBhbmQgYSAidmlydHF1ZXVlIiBvciB0d28gdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhLiA6Ki8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2xndWVzdF9sYXVuY2hlci5oPgpAQCAtNTMsNyArNTMsNyBAQAogICogRGV2aWNlIGNvbmZpZ3VyYXRpb25zCiAgKgogICogVGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIGEgZGV2aWNlIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlCi0gKiB2aXJ0cXVldWVzLCBhIGZlYXR1cmUgYml0bWFrcywgYW5kIHNvbWUgY29uZmlndXJhdGlvbiBieXRlcy4gIFRoZQorICogdmlydHF1ZXVlcywgYSBmZWF0dXJlIGJpdG1hcCwgYW5kIHNvbWUgY29uZmlndXJhdGlvbiBieXRlcy4gIFRoZQogICogY29uZmlndXJhdGlvbiBieXRlcyBkb24ndCByZWFsbHkgbWF0dGVyIHRvIHVzOiB0aGUgTGF1bmNoZXIgc2V0cyB0aGVtIHVwLCBhbmQKICAqIHRoZSBkcml2ZXIgd2lsbCBsb29rIGF0IHRoZW0gZHVyaW5nIHNldHVwLgogICoKQEAgLTE3OSw3ICsxNzksNyBAQAogfTsKIAogLyogV2hlbiB0aGUgdmlydGlvX3JpbmcgY29kZSB3YW50cyB0byBwcm9kIHRoZSBIb3N0LCBpdCBjYWxscyB1cyBoZXJlIGFuZCB3ZQotICogbWFrZSBhIGh5cGVyY2FsbC4gIFdlIGhhbmQgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSB2aXJ0cXVldWUgc28gdGhlIEhvc3QKKyAqIG1ha2UgYSBoeXBlcmNhbGwuICBXZSBoYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2aXJ0cXVldWUgc28gdGhlIEhvc3QKICAqIGtub3dzIHdoaWNoIHZpcnRxdWV1ZSB3ZSdyZSB0YWxraW5nIGFib3V0LiAqLwogc3RhdGljIHZvaWQgbGdfbm90aWZ5KHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogewpAQCAtMTk5LDcgKzE5OSw4IEBACiAgKiBhbGxvY2F0ZSBpdHMgb3duIHBhZ2VzIGFuZCB0ZWxsIHRoZSBIb3N0IHdoZXJlIHRoZXkgYXJlLCBidXQgZm9yIGxndWVzdCBpdCdzCiAgKiBzaW1wbGVyIGZvciB0aGUgSG9zdCB0byBzaW1wbHkgdGVsbCB1cyB3aGVyZSB0aGUgcGFnZXMgYXJlLgogICoKLSAqIFNvIHdlIHByb3ZpZGUgZGV2aWNlcyB3aXRoIGEgImZpbmQgdmlydHF1ZXVlIGFuZCBzZXQgaXQgdXAiIGZ1bmN0aW9uLiAqLworICogU28gd2UgcHJvdmlkZSBkcml2ZXJzIHdpdGggYSAiZmluZCB0aGUgTnRoIHZpcnRxdWV1ZSBhbmQgc2V0IGl0IHVwIgorICogZnVuY3Rpb24uICovCiBzdGF0aWMgc3RydWN0IHZpcnRxdWV1ZSAqbGdfZmluZF92cShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwKIAkJCQkgICAgdW5zaWduZWQgaW5kZXgsCiAJCQkJICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqdnEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYyBiL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKaW5kZXggODVkNDJkMy4uNjQ1ZTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYworKysgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCkBAIC03Myw3ICs3Myw3IEBACiAJaWYgKGN1cnJlbnQgIT0gY3B1LT50c2spCiAJCXJldHVybiAtRVBFUk07CiAKLQkvKiBJZiB0aGUgZ3Vlc3QgaXMgYWxyZWFkeSBkZWFkLCB3ZSBpbmRpY2F0ZSB3aHkgKi8KKwkvKiBJZiB0aGUgR3Vlc3QgaXMgYWxyZWFkeSBkZWFkLCB3ZSBpbmRpY2F0ZSB3aHkgKi8KIAlpZiAobGctPmRlYWQpIHsKIAkJc2l6ZV90IGxlbjsKIApAQCAtODgsNyArODgsNyBAQAogCQlyZXR1cm4gbGVuOwogCX0KIAotCS8qIElmIHdlIHJldHVybmVkIGZyb20gcmVhZCgpIGxhc3QgdGltZSBiZWNhdXNlIHRoZSBHdWVzdCBub3RpZmllZCwKKwkvKiBJZiB3ZSByZXR1cm5lZCBmcm9tIHJlYWQoKSBsYXN0IHRpbWUgYmVjYXVzZSB0aGUgR3Vlc3Qgc2VudCBJL08sCiAJICogY2xlYXIgdGhlIGZsYWcuICovCiAJaWYgKGNwdS0+cGVuZGluZ19ub3RpZnkpCiAJCWNwdS0+cGVuZGluZ19ub3RpZnkgPSAwOwpAQCAtOTcsMTQgKzk3LDIwIEBACiAJcmV0dXJuIHJ1bl9ndWVzdChjcHUsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKXVzZXIpOwogfQogCisvKkw6MDI1IFRoaXMgYWN0dWFsbHkgaW5pdGlhbGl6ZXMgYSBDUFUuICBGb3IgdGhlIG1vbWVudCwgYSBHdWVzdCBpcyBvbmx5CisgKiB1bmlwcm9jZXNzb3IsIHNvICJpZCIgaXMgYWx3YXlzIDAuICovCiBzdGF0aWMgaW50IGxnX2NwdV9zdGFydChzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2lwKQogeworCS8qIFdlIGhhdmUgYSBsaW1pdGVkIG51bWJlciB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIGxndWVzdCBzdHJ1Y3QuICovCiAJaWYgKGlkID49IE5SX0NQVVMpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogU2V0IHVwIHRoaXMgQ1BVJ3MgaWQsIGFuZCBwb2ludGVyIGJhY2sgdG8gdGhlIGxndWVzdCBzdHJ1Y3QuICovCiAJY3B1LT5pZCA9IGlkOwogCWNwdS0+bGcgPSBjb250YWluZXJfb2YoKGNwdSAtIGlkKSwgc3RydWN0IGxndWVzdCwgY3B1c1swXSk7CiAJY3B1LT5sZy0+bnJfY3B1cysrOworCisJLyogRWFjaCBDUFUgaGFzIGEgdGltZXIgaXQgY2FuIHNldC4gKi8KIAlpbml0X2Nsb2NrZGV2KGNwdSk7CiAKIAkvKiBXZSBuZWVkIGEgY29tcGxldGUgcGFnZSBmb3IgdGhlIEd1ZXN0IHJlZ2lzdGVyczogdGhleSBhcmUgYWNjZXNzaWJsZQpAQCAtMTIwLDExICsxMjYsMTEgQEAKIAkgKiBhZGRyZXNzLiAqLwogCWxndWVzdF9hcmNoX3NldHVwX3JlZ3MoY3B1LCBzdGFydF9pcCk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBxdWV1ZSBmb3IgdGhlIHdha2VyIHRvIHdhaXQgb24gKi8KKwkvKiBJbml0aWFsaXplIHRoZSBxdWV1ZSBmb3IgdGhlIFdha2VyIHRvIHdhaXQgb24gKi8KIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjcHUtPmJyZWFrX3dxKTsKIAogCS8qIFdlIGtlZXAgYSBwb2ludGVyIHRvIHRoZSBMYXVuY2hlciB0YXNrIChpZS4gY3VycmVudCB0YXNrKSBmb3Igd2hlbgotCSAqIG90aGVyIEd1ZXN0cyB3YW50IHRvIHdha2UgdGhpcyBvbmUgKGludGVyLUd1ZXN0IEkvTykuICovCisJICogb3RoZXIgR3Vlc3RzIHdhbnQgdG8gd2FrZSB0aGlzIG9uZSAoZWcuIGNvbnNvbGUgaW5wdXQpLiAqLwogCWNwdS0+dHNrID0gY3VycmVudDsKIAogCS8qIFdlIG5lZWQgdG8ga2VlcCBhIHBvaW50ZXIgdG8gdGhlIExhdW5jaGVyJ3MgbWVtb3J5IG1hcCwgYmVjYXVzZSBpZgpAQCAtMTM2LDYgKzE0Miw3IEBACiAJICogd2hlbiB0aGUgc2FtZSBHdWVzdCBydW5zIG9uIHRoZSBzYW1lIENQVSB0d2ljZS4gKi8KIAljcHUtPmxhc3RfcGFnZXMgPSBOVUxMOwogCisJLyogTm8gZXJyb3IgPT0gc3VjY2Vzcy4gKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgyLDE3ICsxODksMTYgQEAKIAl9CiAKIAkvKiBQb3B1bGF0ZSB0aGUgZWFzeSBmaWVsZHMgb2Ygb3VyICJzdHJ1Y3QgbGd1ZXN0IiAqLwotCWxnLT5tZW1fYmFzZSA9ICh2b2lkIF9fdXNlciAqKShsb25nKWFyZ3NbMF07CisJbGctPm1lbV9iYXNlID0gKHZvaWQgX191c2VyICopYXJnc1swXTsKIAlsZy0+cGZuX2xpbWl0ID0gYXJnc1sxXTsKIAotCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGNwdSAqLworCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGNwdSAoY3B1IDApIGFuZCBpdCB3aWxsIHN0YXJ0IGJvb3RpbmcgYXQgYXJnc1szXSAqLwogCWVyciA9IGxnX2NwdV9zdGFydCgmbGctPmNwdXNbMF0sIDAsIGFyZ3NbM10pOwogCWlmIChlcnIpCiAJCWdvdG8gcmVsZWFzZV9ndWVzdDsKIAogCS8qIEluaXRpYWxpemUgdGhlIEd1ZXN0J3Mgc2hhZG93IHBhZ2UgdGFibGVzLCB1c2luZyB0aGUgdG9wbGV2ZWwKLQkgKiBhZGRyZXNzIHRoZSBMYXVuY2hlciBnYXZlIHVzLiAgVGhpcyBhbGxvY2F0ZXMgbWVtb3J5LCBzbyBjYW4KLQkgKiBmYWlsLiAqLworCSAqIGFkZHJlc3MgdGhlIExhdW5jaGVyIGdhdmUgdXMuICBUaGlzIGFsbG9jYXRlcyBtZW1vcnksIHNvIGNhbiBmYWlsLiAqLwogCWVyciA9IGluaXRfZ3Vlc3RfcGFnZXRhYmxlKGxnLCBhcmdzWzJdKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfcmVnczsKQEAgLTIxOCwxMSArMjI0LDE2IEBACiAvKkw6MDEwIFRoZSBmaXJzdCBvcGVyYXRpb24gdGhlIExhdW5jaGVyIGRvZXMgbXVzdCBiZSBhIHdyaXRlLiAgQWxsIHdyaXRlcwogICogc3RhcnQgd2l0aCBhbiB1bnNpZ25lZCBsb25nIG51bWJlcjogZm9yIHRoZSBmaXJzdCB3cml0ZSB0aGlzIG11c3QgYmUKICAqIExIUkVRX0lOSVRJQUxJWkUgdG8gc2V0IHVwIHRoZSBHdWVzdC4gIEFmdGVyIHRoYXQgdGhlIExhdW5jaGVyIGNhbiB1c2UKLSAqIHdyaXRlcyBvZiBvdGhlciB2YWx1ZXMgdG8gc2VuZCBpbnRlcnJ1cHRzLiAqLworICogd3JpdGVzIG9mIG90aGVyIHZhbHVlcyB0byBzZW5kIGludGVycnVwdHMuCisgKgorICogTm90ZSB0aGF0IHdlIG92ZXJsb2FkIHRoZSAib2Zmc2V0IiBpbiB0aGUgL2Rldi9sZ3Vlc3QgZmlsZSB0byBpbmRpY2F0ZSB3aGF0CisgKiBDUFUgbnVtYmVyIHdlJ3JlIGRlYWxpbmcgd2l0aC4gIEN1cnJlbnRseSB0aGlzIGlzIGFsd2F5cyAwLCBzaW5jZSB3ZSBvbmx5CisgKiBzdXBwb3J0IHVuaXByb2Nlc3NvciBHdWVzdHMsIGJ1dCB5b3UgY2FuIHNlZSB0aGUgYmVnaW5uaW5ncyBvZiBTTVAgc3VwcG9ydAorICogaGVyZS4gKi8KIHN0YXRpYyBzc2l6ZV90IHdyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqaW4sCiAJCSAgICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqb2ZmKQogewotCS8qIE9uY2UgdGhlIGd1ZXN0IGlzIGluaXRpYWxpemVkLCB3ZSBob2xkIHRoZSAic3RydWN0IGxndWVzdCIgaW4gdGhlCisJLyogT25jZSB0aGUgR3Vlc3QgaXMgaW5pdGlhbGl6ZWQsIHdlIGhvbGQgdGhlICJzdHJ1Y3QgbGd1ZXN0IiBpbiB0aGUKIAkgKiBmaWxlIHByaXZhdGUgZGF0YS4gKi8KIAlzdHJ1Y3QgbGd1ZXN0ICpsZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljb25zdCB1bnNpZ25lZCBsb25nIF9fdXNlciAqaW5wdXQgPSAoY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKilpbjsKQEAgLTIzMCw2ICsyNDEsNyBAQAogCXN0cnVjdCBsZ19jcHUgKnVuaW5pdGlhbGl6ZWRfdmFyKGNwdSk7CiAJdW5zaWduZWQgaW50IGNwdV9pZCA9ICpvZmY7CiAKKwkvKiBUaGUgZmlyc3QgdmFsdWUgdGVsbHMgdXMgd2hhdCB0aGlzIHJlcXVlc3QgaXMuICovCiAJaWYgKGdldF91c2VyKHJlcSwgaW5wdXQpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwogCWlucHV0Kys7CkBAIC0yNDEsMTYgKzI1MywxNyBAQAogCQljcHUgPSAmbGctPmNwdXNbY3B1X2lkXTsKIAkJaWYgKCFjcHUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBPbmNlIHRoZSBHdWVzdCBpcyBkZWFkLCB5b3UgY2FuIG9ubHkgcmVhZCgpIHdoeSBpdCBkaWVkLiAqLworCQlpZiAobGctPmRlYWQpCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQkvKiBJZiB5b3UncmUgbm90IHRoZSB0YXNrIHdoaWNoIG93bnMgdGhlIEd1ZXN0LCBhbGwgeW91IGNhbiBkbworCQkgKiBpcyBicmVhayB0aGUgTGF1bmNoZXIgb3V0IG9mIHJ1bm5pbmcgdGhlIEd1ZXN0LiAqLworCQlpZiAoY3VycmVudCAhPSBjcHUtPnRzayAmJiByZXEgIT0gTEhSRVFfQlJFQUspCisJCQlyZXR1cm4gLUVQRVJNOwogCX0KIAotCS8qIE9uY2UgdGhlIEd1ZXN0IGlzIGRlYWQsIGFsbCB5b3UgY2FuIGRvIGlzIHJlYWQoKSB3aHkgaXQgZGllZC4gKi8KLQlpZiAobGcgJiYgbGctPmRlYWQpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JLyogSWYgeW91J3JlIG5vdCB0aGUgdGFzayB3aGljaCBvd25zIHRoZSBHdWVzdCwgeW91IGNhbiBvbmx5IGJyZWFrICovCi0JaWYgKGxnICYmIGN1cnJlbnQgIT0gY3B1LT50c2sgJiYgcmVxICE9IExIUkVRX0JSRUFLKQotCQlyZXR1cm4gLUVQRVJNOwotCiAJc3dpdGNoIChyZXEpIHsKIAljYXNlIExIUkVRX0lOSVRJQUxJWkU6CiAJCXJldHVybiBpbml0aWFsaXplKGZpbGUsIGlucHV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMgYi9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jCmluZGV4IDI3NWYyM2MuLmQ5MzUwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYwpAQCAtMiw4ICsyLDggQEAKICAqIHByZXZpb3VzIGVuY291bnRlcnMuICBJdCdzIGZ1bmN0aW9uYWwsIGFuZCBhcyBuZWF0IGFzIGl0IGNhbiBiZSBpbiB0aGUKICAqIGNpcmN1bXN0YW5jZXMsIGJ1dCBiZSB3YXJ5LCBmb3IgdGhlc2UgdGhpbmdzIGFyZSBzdWJ0bGUgYW5kIGJyZWFrIGVhc2lseS4KICAqIFRoZSBHdWVzdCBwcm92aWRlcyBhIHZpcnR1YWwgdG8gcGh5c2ljYWwgbWFwcGluZywgYnV0IHdlIGNhbiBuZWl0aGVyIHRydXN0Ci0gKiBpdCBub3IgdXNlIGl0OiB3ZSB2ZXJpZnkgYW5kIGNvbnZlcnQgaXQgaGVyZSB0byBwb2ludCB0aGUgaGFyZHdhcmUgdG8gdGhlCi0gKiBhY3R1YWwgR3Vlc3QgcGFnZXMgd2hlbiBydW5uaW5nIHRoZSBHdWVzdC4gOiovCisgKiBpdCBub3IgdXNlIGl0OiB3ZSB2ZXJpZnkgYW5kIGNvbnZlcnQgaXQgaGVyZSB0aGVuIHBvaW50IHRoZSBDUFUgdG8gdGhlCisgKiBjb252ZXJ0ZWQgR3Vlc3QgcGFnZXMgd2hlbiBydW5uaW5nIHRoZSBHdWVzdC4gOiovCiAKIC8qIENvcHlyaWdodCAoQykgUnVzdHkgUnVzc2VsbCBJQk0gQ29ycG9yYXRpb24gMjAwNi4KICAqIEdQTCB2MiBhbmQgYW55IGxhdGVyIHZlcnNpb24gKi8KQEAgLTEwNiw2ICsxMDYsMTEgQEAKIAlCVUdfT04oIShwZ2RfZmxhZ3MoZ3BnZCkgJiBfUEFHRV9QUkVTRU5UKSk7CiAJcmV0dXJuIGdwYWdlICsgKCh2YWRkcj4+UEFHRV9TSElGVCkgJSBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKHB0ZV90KTsKIH0KKy8qOiovCisKKy8qTTowMTQgZ2V0X3BmbiBpcyBzbG93OyBpdCB0YWtlcyB0aGUgbW1hcCBzZW0gYW5kIGNhbGxzIGdldF91c2VyX3BhZ2VzLiAgV2UKKyAqIGNvdWxkIHByb2JhYmx5IHRyeSB0byBncmFiIGJhdGNoZXMgb2YgcGFnZXMgaGVyZSBhcyBhbiBvcHRpbWl6YXRpb24KKyAqIChpZS4gcHJlLWZhdWx0aW5nKS4gOiovCiAKIC8qSDozNTAgVGhpcyByb3V0aW5lIHRha2VzIGEgcGFnZSBudW1iZXIgZ2l2ZW4gYnkgdGhlIEd1ZXN0IGFuZCBjb252ZXJ0cyBpdCB0bwogICogYW4gYWN0dWFsLCBwaHlzaWNhbCBwYWdlIG51bWJlci4gIEl0IGNhbiBmYWlsIGZvciBzZXZlcmFsIHJlYXNvbnM6IHRoZQpAQCAtMTEzLDggKzExOCw4IEBACiAgKiBhbmQgdGhlIHBhZ2UgaXMgcmVhZC1vbmx5LCBvciB0aGUgd3JpdGUgZmxhZyB3YXMgc2V0IGFuZCB0aGUgcGFnZSB3YXMKICAqIHNoYXJlZCBzbyBoYWQgdG8gYmUgY29waWVkLCBidXQgd2UgcmFuIG91dCBvZiBtZW1vcnkuCiAgKgotICogVGhpcyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgcGFnZSwgc28gcmVsZWFzZV9wdGUoKSBpcyBjYXJlZnVsIHRvCi0gKiBwdXQgdGhhdCBiYWNrLiAqLworICogVGhpcyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgcGFnZSwgc28gcmVsZWFzZV9wdGUoKSBpcyBjYXJlZnVsIHRvIHB1dCB0aGF0CisgKiBiYWNrLiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3Bmbih1bnNpZ25lZCBsb25nIHZpcnRwZm4sIGludCB3cml0ZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTM5MSw3ICszOTYsNyBAQAogewogCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxnLT5wZ2RpcnMpOyBpKyspCi0JCWlmIChsZy0+cGdkaXJzW2ldLmdwZ2RpciA9PSBwZ3RhYmxlKQorCQlpZiAobGctPnBnZGlyc1tpXS5wZ2RpciAmJiBsZy0+cGdkaXJzW2ldLmdwZ2RpciA9PSBwZ3RhYmxlKQogCQkJYnJlYWs7CiAJcmV0dXJuIGk7CiB9CkBAIC01MzIsMTMgKzUzNywxMyBAQAogICogYWxsIHByb2Nlc3Nlcy4gIFNvIHdoZW4gdGhlIHBhZ2UgdGFibGUgYWJvdmUgdGhhdCBhZGRyZXNzIGNoYW5nZXMsIHdlIHVwZGF0ZQogICogYWxsIHRoZSBwYWdlIHRhYmxlcywgbm90IGp1c3QgdGhlIGN1cnJlbnQgb25lLiAgVGhpcyBpcyByYXJlLgogICoKLSAqIFRoZSBiZW5lZml0IGlzIHRoYXQgd2hlbiB3ZSBoYXZlIHRvIHRyYWNrIGEgbmV3IHBhZ2UgdGFibGUsIHdlIGNhbiBjb3B5IGtlZXAKLSAqIGFsbCB0aGUga2VybmVsIG1hcHBpbmdzLiAgVGhpcyBzcGVlZHMgdXAgY29udGV4dCBzd2l0Y2ggaW1tZW5zZWx5LiAqLworICogVGhlIGJlbmVmaXQgaXMgdGhhdCB3aGVuIHdlIGhhdmUgdG8gdHJhY2sgYSBuZXcgcGFnZSB0YWJsZSwgd2UgY2FuIGtlZXAgYWxsCisgKiB0aGUga2VybmVsIG1hcHBpbmdzLiAgVGhpcyBzcGVlZHMgdXAgY29udGV4dCBzd2l0Y2ggaW1tZW5zZWx5LiAqLwogdm9pZCBndWVzdF9zZXRfcHRlKHN0cnVjdCBsZ19jcHUgKmNwdSwKIAkJICAgdW5zaWduZWQgbG9uZyBncGdkaXIsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IGdwdGUpCiB7Ci0JLyogS2VybmVsIG1hcHBpbmdzIG11c3QgYmUgY2hhbmdlZCBvbiBhbGwgdG9wIGxldmVscy4gIFNsb3csIGJ1dAotCSAqIGRvZXNuJ3QgaGFwcGVuIG9mdGVuLiAqLworCS8qIEtlcm5lbCBtYXBwaW5ncyBtdXN0IGJlIGNoYW5nZWQgb24gYWxsIHRvcCBsZXZlbHMuICBTbG93LCBidXQgZG9lc24ndAorCSAqIGhhcHBlbiBvZnRlbi4gKi8KIAlpZiAodmFkZHIgPj0gY3B1LT5sZy0+a2VybmVsX2FkZHJlc3MpIHsKIAkJdW5zaWduZWQgaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwdS0+bGctPnBnZGlycyk7IGkrKykKQEAgLTcwNCwxMiArNzA5LDExIEBACiAvKiBXZSd2ZSBtYWRlIGl0IHRocm91Z2ggdGhlIHBhZ2UgdGFibGUgY29kZS4gIFBlcmhhcHMgb3VyIHRpcmVkIGJyYWlucyBhcmUKICAqIHN0aWxsIHByb2Nlc3NpbmcgdGhlIGRldGFpbHMsIG9yIHBlcmhhcHMgd2UncmUgc2ltcGx5IGdsYWQgaXQncyBvdmVyLgogICoKLSAqIElmIG5vdGhpbmcgZWxzZSwgbm90ZSB0aGF0IGFsbCB0aGlzIGNvbXBsZXhpdHkgaW4ganVnZ2xpbmcgc2hhZG93IHBhZ2UKLSAqIHRhYmxlcyBpbiBzeW5jIHdpdGggdGhlIEd1ZXN0J3MgcGFnZSB0YWJsZXMgaXMgZm9yIG9uZSByZWFzb246IGZvciBtb3N0Ci0gKiBHdWVzdHMgdGhpcyBwYWdlIHRhYmxlIGRhbmNlIGRldGVybWluZXMgaG93IGJhZCBwZXJmb3JtYW5jZSB3aWxsIGJlLiAgVGhpcwotICogaXMgd2h5IFhlbiB1c2VzIGV4b3RpYyBkaXJlY3QgR3Vlc3QgcGFnZXRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIHdoeSBib3RoCi0gKiBJbnRlbCBhbmQgQU1EIGhhdmUgaW1wbGVtZW50ZWQgc2hhZG93IHBhZ2UgdGFibGUgc3VwcG9ydCBkaXJlY3RseSBpbnRvCi0gKiBoYXJkd2FyZS4KKyAqIElmIG5vdGhpbmcgZWxzZSwgbm90ZSB0aGF0IGFsbCB0aGlzIGNvbXBsZXhpdHkgaW4ganVnZ2xpbmcgc2hhZG93IHBhZ2UgdGFibGVzCisgKiBpbiBzeW5jIHdpdGggdGhlIEd1ZXN0J3MgcGFnZSB0YWJsZXMgaXMgZm9yIG9uZSByZWFzb246IGZvciBtb3N0IEd1ZXN0cyB0aGlzCisgKiBwYWdlIHRhYmxlIGRhbmNlIGRldGVybWluZXMgaG93IGJhZCBwZXJmb3JtYW5jZSB3aWxsIGJlLiAgVGhpcyBpcyB3aHkgWGVuCisgKiB1c2VzIGV4b3RpYyBkaXJlY3QgR3Vlc3QgcGFnZXRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIHdoeSBib3RoIEludGVsIGFuZCBBTUQKKyAqIGhhdmUgaW1wbGVtZW50ZWQgc2hhZG93IHBhZ2UgdGFibGUgc3VwcG9ydCBkaXJlY3RseSBpbnRvIGhhcmR3YXJlLgogICoKICAqIFRoZXJlIGlzIGp1c3Qgb25lIGZpbGUgcmVtYWluaW5nIGluIHRoZSBIb3N0LiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC94ODYvY29yZS5jIGIvZHJpdmVycy9sZ3Vlc3QveDg2L2NvcmUuYwppbmRleCA2MzUxODc4Li41MTI2ZDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC94ODYvY29yZS5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMKQEAgLTE3LDYgKzE3LDEzIEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KKy8qUDo0NTAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB4ODYtc3BlY2lmaWMgbGd1ZXN0IGNvZGUuICBJdCB1c2VkIHRvIGJlIGFsbAorICogbWl4ZWQgaW4gd2l0aCBkcml2ZXJzL2xndWVzdC9jb3JlLmMgYnV0IHNldmVyYWwgZm9vbGhhcmR5IGNvZGUgc2xhc2hlcnMKKyAqIHdyZXN0bGVkIG1vc3Qgb2YgdGhlIGRlcGVuZGVuY2llcyBvdXQgdG8gaGVyZSBpbiBwcmVwYXJhdGlvbiBmb3IgcG9ydGluZworICogbGd1ZXN0IHRvIG90aGVyIGFyY2hpdGVjdHVyZXMgKHNlZSB3aGF0IEkgbWVhbiBieSBmb29saGFyZHk/KS4KKyAqCisgKiBUaGlzIGFsc28gY29udGFpbnMgYSBjb3VwbGUgb2Ygbm9uLW9idmlvdXMgc2V0dXAgYW5kIHRlYXJkb3duIHBpZWNlcyB3aGljaAorICogd2VyZSBpbXBsZW1lbnRlZCBhZnRlciBkYXlzIG9mIGRlYnVnZ2luZyBwYWluLiA6Ki8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGFydF9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTE1Nyw2ICsxNjQsOCBAQAogICogYWxzbyBzaW1wbGlmeSBjb3B5X2luX2d1ZXN0X2luZm8oKS4gIE5vdGUgdGhhdCB3ZSdkIHN0aWxsIG5lZWQgdG8gcmVzdG9yZQogICogdGhpbmdzIHdoZW4gd2UgZXhpdCB0byBMYXVuY2hlciB1c2Vyc3BhY2UsIGJ1dCB0aGF0J3MgZmFpcmx5IGVhc3kuCiAgKgorICogV2UgY291bGQgYWxzbyB0cnkgdXNpbmcgdGhpcyBob29rcyBmb3IgUEdFLCBidXQgdGhhdCBtaWdodCBiZSB0b28gZXhwZW5zaXZlLgorICoKICAqIFRoZSBob29rcyB3ZXJlIGRlc2lnbmVkIGZvciBLVk0sIGJ1dCB3ZSBjYW4gYWxzbyBwdXQgdGhlbSB0byBnb29kIHVzZS4gOiovCiAKIC8qSDowNDAgVGhpcyBpcyB0aGUgaTM4Ni1zcGVjaWZpYyBjb2RlIHRvIHNldHVwIGFuZCBydW4gdGhlIEd1ZXN0LiAgSW50ZXJydXB0cwpAQCAtMTgyLDcgKzE5MSw3IEBACiAJICogd2FzIGRvaW5nLiAqLwogCXJ1bl9ndWVzdF9vbmNlKGNwdSwgbGd1ZXN0X3BhZ2VzKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpKTsKIAotCS8qIE5vdGUgdGhhdCB0aGUgInJlZ3MiIHBvaW50ZXIgY29udGFpbnMgdHdvIGV4dHJhIGVudHJpZXMgd2hpY2ggYXJlCisJLyogTm90ZSB0aGF0IHRoZSAicmVncyIgc3RydWN0dXJlIGNvbnRhaW5zIHR3byBleHRyYSBlbnRyaWVzIHdoaWNoIGFyZQogCSAqIG5vdCByZWFsbHkgcmVnaXN0ZXJzOiBhIHRyYXAgbnVtYmVyIHdoaWNoIHNheXMgd2hhdCBpbnRlcnJ1cHQgb3IKIAkgKiB0cmFwIG1hZGUgdGhlIHN3aXRjaGVyIGNvZGUgY29tZSBiYWNrLCBhbmQgYW4gZXJyb3IgY29kZSB3aGljaCBzb21lCiAJICogdHJhcHMgc2V0LiAgKi8KQEAgLTI5MywxMSArMzAyLDEwIEBACiAJCWJyZWFrOwogCWNhc2UgMTQ6IC8qIFdlJ3ZlIGludGVyY2VwdGVkIGEgUGFnZSBGYXVsdC4gKi8KIAkJLyogVGhlIEd1ZXN0IGFjY2Vzc2VkIGEgdmlydHVhbCBhZGRyZXNzIHRoYXQgd2Fzbid0IG1hcHBlZC4KLQkJICogVGhpcyBoYXBwZW5zIGEgbG90OiB3ZSBkb24ndCBhY3R1YWxseSBzZXQgdXAgbW9zdCBvZiB0aGUKLQkJICogcGFnZSB0YWJsZXMgZm9yIHRoZSBHdWVzdCBhdCBhbGwgd2hlbiB3ZSBzdGFydDogYXMgaXQgcnVucwotCQkgKiBpdCBhc2tzIGZvciBtb3JlIGFuZCBtb3JlLCBhbmQgd2Ugc2V0IHRoZW0gdXAgYXMKLQkJICogcmVxdWlyZWQuIEluIHRoaXMgY2FzZSwgd2UgZG9uJ3QgZXZlbiB0ZWxsIHRoZSBHdWVzdCB0aGF0Ci0JCSAqIHRoZSBmYXVsdCBoYXBwZW5lZC4KKwkJICogVGhpcyBoYXBwZW5zIGEgbG90OiB3ZSBkb24ndCBhY3R1YWxseSBzZXQgdXAgbW9zdCBvZiB0aGUgcGFnZQorCQkgKiB0YWJsZXMgZm9yIHRoZSBHdWVzdCBhdCBhbGwgd2hlbiB3ZSBzdGFydDogYXMgaXQgcnVucyBpdCBhc2tzCisJCSAqIGZvciBtb3JlIGFuZCBtb3JlLCBhbmQgd2Ugc2V0IHRoZW0gdXAgYXMgcmVxdWlyZWQuIEluIHRoaXMKKwkJICogY2FzZSwgd2UgZG9uJ3QgZXZlbiB0ZWxsIHRoZSBHdWVzdCB0aGF0IHRoZSBmYXVsdCBoYXBwZW5lZC4KIAkJICoKIAkJICogVGhlIGVycmNvZGUgdGVsbHMgd2hldGhlciB0aGlzIHdhcyBhIHJlYWQgb3IgYSB3cml0ZSwgYW5kCiAJCSAqIHdoZXRoZXIga2VybmVsIG9yIHVzZXJzcGFjZSBjb2RlLiAqLwpAQCAtMzQyLDcgKzM1MCw3IEBACiAJaWYgKCFkZWxpdmVyX3RyYXAoY3B1LCBjcHUtPnJlZ3MtPnRyYXBudW0pKQogCQkvKiBJZiB0aGUgR3Vlc3QgZG9lc24ndCBoYXZlIGEgaGFuZGxlciAoZWl0aGVyIGl0IGhhc24ndAogCQkgKiByZWdpc3RlcmVkIGFueSB5ZXQsIG9yIGl0J3Mgb25lIG9mIHRoZSBmYXVsdHMgd2UgZG9uJ3QgbGV0Ci0JCSAqIGl0IGhhbmRsZSksIGl0IGRpZXMgd2l0aCBhIGNyeXB0aWMgZXJyb3IgbWVzc2FnZS4gKi8KKwkJICogaXQgaGFuZGxlKSwgaXQgZGllcyB3aXRoIHRoaXMgY3J5cHRpYyBlcnJvciBtZXNzYWdlLiAqLwogCQlraWxsX2d1ZXN0KGNwdSwgInVuaGFuZGxlZCB0cmFwICVsaSBhdCAlI2x4ICglI2x4KSIsCiAJCQkgICBjcHUtPnJlZ3MtPnRyYXBudW0sIGNwdS0+cmVncy0+ZWlwLAogCQkJICAgY3B1LT5yZWdzLT50cmFwbnVtID09IDE0ID8gY3B1LT5hcmNoLmxhc3RfcGFnZWZhdWx0CkBAIC0zNzUsOCArMzgzLDggQEAKIAkgKiBUaGUgb25seSBleGNlcHRpb24gaXMgdGhlIGludGVycnVwdCBoYW5kbGVycyBpbiBzd2l0Y2hlci5TOiB0aGVpcgogCSAqIGFkZHJlc3NlcyBhcmUgcGxhY2VkIGluIGEgdGFibGUgKGRlZmF1bHRfaWR0X2VudHJpZXMpLCBzbyB3ZSBuZWVkIHRvCiAJICogdXBkYXRlIHRoZSB0YWJsZSB3aXRoIHRoZSBuZXcgYWRkcmVzc2VzLiAgc3dpdGNoZXJfb2Zmc2V0KCkgaXMgYQotCSAqIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJ1aWx0aW4KLQkgKiBzd2l0Y2hlciBjb2RlIGFuZCB0aGUgaGlnaC1tYXBwZWQgY29weSB3ZSBqdXN0IG1hZGUuICovCisJICogY29udmVuaWVuY2UgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKwkgKiBjb21waWxlZC1pbiBzd2l0Y2hlciBjb2RlIGFuZCB0aGUgaGlnaC1tYXBwZWQgY29weSB3ZSBqdXN0IG1hZGUuICovCiAJZm9yIChpID0gMDsgaSA8IElEVF9FTlRSSUVTOyBpKyspCiAJCWRlZmF1bHRfaWR0X2VudHJpZXNbaV0gKz0gc3dpdGNoZXJfb2Zmc2V0KCk7CiAKQEAgLTQxNiw3ICs0MjQsNyBAQAogCQlzdGF0ZS0+Z3Vlc3RfZ2R0X2Rlc2MuYWRkcmVzcyA9IChsb25nKSZzdGF0ZS0+Z3Vlc3RfZ2R0OwogCiAJCS8qIFdlIGtub3cgd2hlcmUgd2Ugd2FudCB0aGUgc3RhY2sgdG8gYmUgd2hlbiB0aGUgR3Vlc3QgZW50ZXJzCi0JCSAqIHRoZSBzd2l0Y2hlcjogaW4gcGFnZXMtPnJlZ3MuICBUaGUgc3RhY2sgZ3Jvd3MgdXB3YXJkcywgc28KKwkJICogdGhlIFN3aXRjaGVyOiBpbiBwYWdlcy0+cmVncy4gIFRoZSBzdGFjayBncm93cyB1cHdhcmRzLCBzbwogCQkgKiB3ZSBzdGFydCBpdCBhdCB0aGUgZW5kIG9mIHRoYXQgc3RydWN0dXJlLiAqLwogCQlzdGF0ZS0+Z3Vlc3RfdHNzLnNwMCA9IChsb25nKSgmcGFnZXMtPnJlZ3MgKyAxKTsKIAkJLyogQW5kIHRoaXMgaXMgdGhlIEdEVCBlbnRyeSB0byB1c2UgZm9yIHRoZSBzdGFjazogd2Uga2VlcCBhCkBAIC01MTMsOCArNTIxLDggQEAKIHsKIAl1MzIgdHNjX3NwZWVkOwogCi0JLyogVGhlIHBvaW50ZXIgdG8gdGhlIEd1ZXN0J3MgInN0cnVjdCBsZ3Vlc3RfZGF0YSIgaXMgdGhlIG9ubHkKLQkgKiBhcmd1bWVudC4gIFdlIGNoZWNrIHRoYXQgYWRkcmVzcyBub3cuICovCisJLyogVGhlIHBvaW50ZXIgdG8gdGhlIEd1ZXN0J3MgInN0cnVjdCBsZ3Vlc3RfZGF0YSIgaXMgdGhlIG9ubHkgYXJndW1lbnQuCisJICogV2UgY2hlY2sgdGhhdCBhZGRyZXNzIG5vdy4gKi8KIAlpZiAoIWxndWVzdF9hZGRyZXNzX29rKGNwdS0+bGcsIGNwdS0+aGNhbGwtPmFyZzEsCiAJCQkgICAgICAgc2l6ZW9mKCpjcHUtPmxnLT5sZ3Vlc3RfZGF0YSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTU0Niw2ICs1NTQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisvKjoqLwogCiAvKkw6MDMwIGxndWVzdF9hcmNoX3NldHVwX3JlZ3MoKQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3g4Ni9zd2l0Y2hlcl8zMi5TIGIvZHJpdmVycy9sZ3Vlc3QveDg2L3N3aXRjaGVyXzMyLlMKaW5kZXggMGFmOGJhYS4uM2ZjMTUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QveDg2L3N3aXRjaGVyXzMyLlMKKysrIGIvZHJpdmVycy9sZ3Vlc3QveDg2L3N3aXRjaGVyXzMyLlMKQEAgLTEsNiArMSw2IEBACi0vKlA6OTAwIFRoaXMgaXMgdGhlIFN3aXRjaGVyOiBjb2RlIHdoaWNoIHNpdHMgYXQgMHhGRkMwMDAwMCB0byBkbyB0aGUgbG93LWxldmVsCi0gKiBHdWVzdDwtPkhvc3Qgc3dpdGNoLiAgSXQgaXMgYXMgc2ltcGxlIGFzIGl0IGNhbiBiZSBtYWRlLCBidXQgaXQncyBuYXR1cmFsbHkKLSAqIHZlcnkgc3BlY2lmaWMgdG8geDg2LgorLypQOjkwMCBUaGlzIGlzIHRoZSBTd2l0Y2hlcjogY29kZSB3aGljaCBzaXRzIGF0IDB4RkZDMDAwMDAgYXN0cmlkZSBib3RoIHRoZQorICogSG9zdCBhbmQgR3Vlc3QgdG8gZG8gdGhlIGxvdy1sZXZlbCBHdWVzdDwtPkhvc3Qgc3dpdGNoLiAgSXQgaXMgYXMgc2ltcGxlIGFzCisgKiBpdCBjYW4gYmUgbWFkZSwgYnV0IGl0J3MgbmF0dXJhbGx5IHZlcnkgc3BlY2lmaWMgdG8geDg2LgogICoKICAqIFlvdSBoYXZlIG5vdyBjb21wbGV0ZWQgUHJlcGFyYXRpb24uICBJZiB0aGlzIGhhcyB3aGV0IHlvdXIgYXBwZXRpdGU7IGlmIHlvdQogICogYXJlIGZlZWxpbmcgaW52aWdvcmF0ZWQgYW5kIHJlZnJlc2hlZCB0aGVuIHRoZSBuZXh0LCBtb3JlIGNoYWxsZW5naW5nIHN0YWdlCkBAIC0xODksNyArMTg5LDcgQEAKIAkvLyBJbnRlcnJ1cHRzIGFyZSB0dXJuZWQgYmFjayBvbjogd2UgYXJlIEd1ZXN0LgogCWlyZXQKIAotLy8gV2UgdHJlYXQgdHdvIHBhdGhzIHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBIb3N0CisvLyBXZSB0cmVhZCB0d28gcGF0aHMgdG8gc3dpdGNoIGJhY2sgdG8gdGhlIEhvc3QKIC8vIFlldCBib3RoIG11c3Qgc2F2ZSBHdWVzdCBzdGF0ZSBhbmQgcmVzdG9yZSBIb3N0CiAvLyBTbyB3ZSBwdXQgdGhlIHJvdXRpbmUgaW4gYSBtYWNyby4KICNkZWZpbmUgU1dJVENIX1RPX0hPU1QJCQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwppbmRleCAyODk1ODEwLi4yMDk3ODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwpAQCAtMzcsOSArMzcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2lmZGVmIENPTkZJR19QUEMKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYwppbmRleCA1MWExMTI4Li44MmFkZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMKQEAgLTc5LDYgKzc5LDcgQEAKIAlpbnQJCQkJc2xlZXBpbmc7CiAJc3RydWN0IHNlbWFwaG9yZQkJbG9jazsKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQworCWlkZV9od2lmX3QJCQkqY2RfcG9ydDsKIAl2b2lkIF9faW9tZW0JCQkqY2RfYmFzZTsKIAlpbnQJCQkJY2RfaXJxOwogCWludAkJCQljZF9yZXRyeTsKQEAgLTQ0OCw3ICs0NDksNyBAQAogfQogCiBpbnQgbWVkaWFfYmF5X3NldF9pZGVfaW5mb3Moc3RydWN0IGRldmljZV9ub2RlKiB3aGljaF9iYXksIHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCSAgICBpbnQgaXJxLCBpbnQgaW5kZXgpCisJCQkgICAgaW50IGlycSwgaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpbnQJaTsKIApAQCAtNDU2LDEwICs0NTcsMTEgQEAKIAkJc3RydWN0IG1lZGlhX2JheV9pbmZvKiBiYXkgPSAmbWVkaWFfYmF5c1tpXTsKIAogCQlpZiAoYmF5LT5tZGV2ICYmIHdoaWNoX2JheSA9PSBiYXktPm1kZXYtPm9mZGV2Lm5vZGUpIHsKLQkJCWludCB0aW1lb3V0ID0gNTAwMDsKKwkJCWludCB0aW1lb3V0ID0gNTAwMCwgaW5kZXggPSBod2lmLT5pbmRleDsKIAkJCQogCQkJZG93bigmYmF5LT5sb2NrKTsKIAorCQkJYmF5LT5jZF9wb3J0CT0gaHdpZjsKICAJCQliYXktPmNkX2Jhc2UJPSAodm9pZCBfX2lvbWVtICopIGJhc2U7CiAJCQliYXktPmNkX2lycQk9IGlycTsKIApAQCAtNTUxLDE1ICs1NTMsMTAgQEAKIAkJCWJheS0+dGltZXIgPSAwOwogCQkJYmF5LT5zdGF0ZSA9IG1iX3VwOwogCQkJaWYgKGJheS0+Y2RfaW5kZXggPCAwKSB7Ci0JCQkJaHdfcmVnc190IGh3OwotCiAJCQkJcHJpbnRrKCJtZWRpYWJheSAlZCwgcmVnaXN0ZXJpbmcgSURFLi4uXG4iLCBpKTsKIAkJCQlwbXVfc3VzcGVuZCgpOwotCQkJCWlkZV9pbml0X2h3aWZfcG9ydHMoJmh3LCAodW5zaWduZWQgbG9uZykgYmF5LT5jZF9iYXNlLCAodW5zaWduZWQgbG9uZykgMCwgTlVMTCk7Ci0JCQkJaHcuaXJxID0gYmF5LT5jZF9pcnE7Ci0JCQkJaHcuY2hpcHNldCA9IGlkZV9wbWFjOwotCQkJCWJheS0+Y2RfaW5kZXggPQotCQkJCQlpZGVfcmVnaXN0ZXJfaHcoJmh3LCBOVUxMLCBOVUxMKTsKKwkJCQlpZGVfcG9ydF9zY2FuKGJheS0+Y2RfcG9ydCk7CisJCQkJYmF5LT5jZF9pbmRleCA9IGJheS0+Y2RfcG9ydC0+aW5kZXg7CiAJCQkJcG11X3Jlc3VtZSgpOwogCQkJfQogCQkJaWYgKGJheS0+Y2RfaW5kZXggPT0gLTEpIHsKQEAgLTU4OSw3ICs1ODYsNyBAQAogICAgIAkgICAgICAgIGlmIChiYXktPmNkX2luZGV4ID49IDApIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJVbnJlZ2lzdGVyaW5nIG1iICVkIGlkZSwgaW5kZXg6JWRcbiIsIGksCiAJCQkgICAgICAgYmF5LT5jZF9pbmRleCk7Ci0JCQlpZGVfdW5yZWdpc3RlcihiYXktPmNkX2luZGV4LCAxLCAxKTsKKwkJCWlkZV9wb3J0X3VucmVnaXN0ZXJfZGV2aWNlcyhiYXktPmNkX3BvcnQpOwogCQkJYmF5LT5jZF9pbmRleCA9IC0xOwogCQl9CiAJICAgIAlpZiAoYmF5LT5jZF9yZXRyeSkgewpAQCAtNjk4LDcgKzY5NSw4IEBACiB7CiAJc3RydWN0IG1lZGlhX2JheV9pbmZvCSpiYXkgPSBtYWNpb19nZXRfZHJ2ZGF0YShtZGV2KTsKIAotCWlmIChzdGF0ZS5ldmVudCAhPSBtZGV2LT5vZmRldi5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgJiYgc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCWlmIChzdGF0ZS5ldmVudCAhPSBtZGV2LT5vZmRldi5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQKKwkgICAgJiYgKHN0YXRlLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApKSB7CiAJCWRvd24oJmJheS0+bG9jayk7CiAJCWJheS0+c2xlZXBpbmcgPSAxOwogCQlzZXRfbWJfcG93ZXIoYmF5LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCmluZGV4IDc0MWEyZTMuLmEzNDhiYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgcG11X2JhY2tsaWdodF9kYXRhOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwbXVfYmFja2xpZ2h0X2xvY2spOwotc3RhdGljIGludCBzbGVlcGluZzsKK3N0YXRpYyBpbnQgc2xlZXBpbmcsIHVzZXNfcG11X2JsOwogc3RhdGljIHU4IGJsX2N1cnZlW0ZCX0JBQ0tMSUdIVF9MRVZFTFNdOwogCiBzdGF0aWMgdm9pZCBwbXVfYmFja2xpZ2h0X2luaXRfY3VydmUodTggb2ZmLCB1OCBtaW4sIHU4IG1heCkKQEAgLTEyOCw3ICsxMjgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9iYWNrbGlnaHRfbG9jaywgZmxhZ3MpOwogCXNsZWVwaW5nID0gc2xlZXA7Ci0JaWYgKHBtYWNfYmFja2xpZ2h0KSB7CisJaWYgKHBtYWNfYmFja2xpZ2h0ICYmIHVzZXNfcG11X2JsKSB7CiAJCWlmIChzbGVlcCkgewogCQkJc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKIApAQCAtMTY2LDYgKzE2Niw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiUE1VIEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KKwl1c2VzX3BtdV9ibCA9IDE7CiAJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7CiAJcG11X2JhY2tsaWdodF9pbml0X2N1cnZlKDB4N0YsIDB4NDYsIDB4MEUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggZWJlYzY2My4uZDYzNjVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtMjUyOCw3ICsyNTI4LDcgQEAKIEVYUE9SVF9TWU1CT0wocG11X3N1c3BlbmQpOwogRVhQT1JUX1NZTUJPTChwbXVfcmVzdW1lKTsKIEVYUE9SVF9TWU1CT0wocG11X3VubG9jayk7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1VTUEVORCkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiBFWFBPUlRfU1lNQk9MKHBtdV9lbmFibGVfaXJsZWQpOwogRVhQT1JUX1NZTUJPTChwbXVfYmF0dGVyeV9jb3VudCk7CiBFWFBPUlRfU1lNQk9MKHBtdV9iYXR0ZXJpZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCmluZGV4IGY0NDlkNzcuLjc5NzkxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zbXUuaD4KICNpbmNsdWRlIDxhc20vcG1hY19sb3dfaTJjLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCA3YWVjZWVkLi5jMTRkYWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTEwNDUsOCArMTA0NSwxNCBAQAogCWlmIChiaXRtYXAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBiaXRtYXAtPmRhZW1vbl9sYXN0cnVuICsgYml0bWFwLT5kYWVtb25fc2xlZXAqSFopKQotCQlyZXR1cm47CisJCWdvdG8gZG9uZTsKKwogCWJpdG1hcC0+ZGFlbW9uX2xhc3RydW4gPSBqaWZmaWVzOworCWlmIChiaXRtYXAtPmFsbGNsZWFuKSB7CisJCWJpdG1hcC0+bWRkZXYtPnRocmVhZC0+dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCQlyZXR1cm47CisJfQorCWJpdG1hcC0+YWxsY2xlYW4gPSAxOwogCiAJZm9yIChqID0gMDsgaiA8IGJpdG1hcC0+Y2h1bmtzOyBqKyspIHsKIAkJYml0bWFwX2NvdW50ZXJfdCAqYm1jOwpAQCAtMTA2OCw4ICsxMDc0LDEwIEBACiAJCQkJCWNsZWFyX3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UsIEJJVE1BUF9QQUdFX05FRURXUklURSk7CiAKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKLQkJCQlpZiAobmVlZF93cml0ZSkKKwkJCQlpZiAobmVlZF93cml0ZSkgewogCQkJCQl3cml0ZV9wYWdlKGJpdG1hcCwgcGFnZSwgMCk7CisJCQkJCWJpdG1hcC0+YWxsY2xlYW4gPSAwOworCQkJCX0KIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMTA5OCw2ICsxMTA2LDkgQEAKIC8qCiAgIGlmIChqIDwgMTAwKSBwcmludGsoImJpdG1hcDogaj0lbHUsICpibWMgPSAweCV4XG4iLCBqLCAqYm1jKTsKICovCisJCQlpZiAoKmJtYykKKwkJCQliaXRtYXAtPmFsbGNsZWFuID0gMDsKKwogCQkJaWYgKCpibWMgPT0gMikgewogCQkJCSpibWM9MTsgLyogbWF5YmUgY2xlYXIgdGhlIGJpdCBuZXh0IHRpbWUgKi8KIAkJCQlzZXRfcGFnZV9hdHRyKGJpdG1hcCwgcGFnZSwgQklUTUFQX1BBR0VfQ0xFQU4pOwpAQCAtMTEzMiw2ICsxMTQzLDkgQEAKIAkJfQogCX0KIAorIGRvbmU6CisJaWYgKGJpdG1hcC0+YWxsY2xlYW4gPT0gMCkKKwkJYml0bWFwLT5tZGRldi0+dGhyZWFkLT50aW1lb3V0ID0gYml0bWFwLT5kYWVtb25fc2xlZXAgKiBIWjsKIH0KIAogc3RhdGljIGJpdG1hcF9jb3VudGVyX3QgKmJpdG1hcF9nZXRfY291bnRlcihzdHJ1Y3QgYml0bWFwICpiaXRtYXAsCkBAIC0xMjI2LDYgKzEyNDAsNyBAQAogCQkJc2VjdG9ycyAtPSBibG9ja3M7CiAJCWVsc2Ugc2VjdG9ycyA9IDA7CiAJfQorCWJpdG1hcC0+YWxsY2xlYW4gPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0xMjk2LDYgKzEzMTEsNyBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmYml0bWFwLT5sb2NrKTsKKwliaXRtYXAtPmFsbGNsZWFuID0gMDsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTEzMzIsNiArMTM0OCw3IEBACiAJfQogIHVubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKKwliaXRtYXAtPmFsbGNsZWFuID0gMDsKIH0KIAogdm9pZCBiaXRtYXBfY2xvc2Vfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXApCkBAIC0xMzk5LDcgKzE0MTYsNyBAQAogCQlzZXRfcGFnZV9hdHRyKGJpdG1hcCwgcGFnZSwgQklUTUFQX1BBR0VfQ0xFQU4pOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmJpdG1hcC0+bG9jayk7Ci0KKwliaXRtYXAtPmFsbGNsZWFuID0gMDsKIH0KIAogLyogZGlydHkgdGhlIG1lbW9yeSBhbmQgZmlsZSBiaXRzIGZvciBiaXRtYXAgY2h1bmtzICJzIiB0byAiZSIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCBiMDRmOThkLi44MzVkZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyBDaHJpc3RvcGhlIFNhb3V0IDxjaHJpc3RvcGhlQHNhb3V0LmRlPgogICogQ29weXJpZ2h0IChDKSAyMDA0IENsZW1lbnMgRnJ1aHdpcnRoIDxjbGVtZW5zQGVuZG9ycGhpbi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KQEAgLTkzLDYgKzkzLDggQEAKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppb19xdWV1ZTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY3J5cHRfcXVldWU7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVxOworCiAJLyoKIAkgKiBjcnlwdG8gcmVsYXRlZCBkYXRhCiAJICovCkBAIC0zMzEsMTQgKzMzMyw3IEBACiAJY3R4LT5pZHhfb3V0ID0gYmlvX291dCA/IGJpb19vdXQtPmJpX2lkeCA6IDA7CiAJY3R4LT5zZWN0b3IgPSBzZWN0b3IgKyBjYy0+aXZfb2Zmc2V0OwogCWluaXRfY29tcGxldGlvbigmY3R4LT5yZXN0YXJ0KTsKLQkvKgotCSAqIENyeXB0byBvcGVyYXRpb24gY2FuIGJlIGFzeW5jaHJvbm91cywKLQkgKiBjdHgtPnBlbmRpbmcgaXMgaW5jcmVhc2VkIGFmdGVyIHJlcXVlc3Qgc3VibWlzc2lvbi4KLQkgKiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGNhbGwgdGhlIGNyeXB0IGZpbmlzaAotCSAqIG9wZXJhdGlvbiBiZWZvcmUgcGVuZGluZyBnb3QgaW5jcmVtZW50ZWQKLQkgKiAoZGVwZW5kZW50IG9uIGNyeXB0IHN1Ym1pc3Npb24gcmV0dXJuIGNvZGUpLgotCSAqLwotCWF0b21pY19zZXQoJmN0eC0+cGVuZGluZywgMik7CisJYXRvbWljX3NldCgmY3R4LT5wZW5kaW5nLCAxKTsKIH0KIAogc3RhdGljIGludCBjcnlwdF9jb252ZXJ0X2Jsb2NrKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLApAQCAtNDExLDQzICs0MDYsNDIgQEAKIHN0YXRpYyBpbnQgY3J5cHRfY29udmVydChzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywKIAkJCSBzdHJ1Y3QgY29udmVydF9jb250ZXh0ICpjdHgpCiB7Ci0JaW50IHIgPSAwOworCWludCByOwogCiAJd2hpbGUoY3R4LT5pZHhfaW4gPCBjdHgtPmJpb19pbi0+YmlfdmNudCAmJgogCSAgICAgIGN0eC0+aWR4X291dCA8IGN0eC0+YmlvX291dC0+YmlfdmNudCkgewogCiAJCWNyeXB0X2FsbG9jX3JlcShjYywgY3R4KTsKIAorCQlhdG9taWNfaW5jKCZjdHgtPnBlbmRpbmcpOworCiAJCXIgPSBjcnlwdF9jb252ZXJ0X2Jsb2NrKGNjLCBjdHgsIGNjLT5yZXEpOwogCiAJCXN3aXRjaCAocikgeworCQkvKiBhc3luYyAqLwogCQljYXNlIC1FQlVTWToKIAkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmN0eC0+cmVzdGFydCk7CiAJCQlJTklUX0NPTVBMRVRJT04oY3R4LT5yZXN0YXJ0KTsKIAkJCS8qIGZhbGwgdGhyb3VnaCovCiAJCWNhc2UgLUVJTlBST0dSRVNTOgotCQkJYXRvbWljX2luYygmY3R4LT5wZW5kaW5nKTsKIAkJCWNjLT5yZXEgPSBOVUxMOwotCQkJciA9IDA7Ci0JCQkvKiBmYWxsIHRocm91Z2gqLwotCQljYXNlIDA6CiAJCQljdHgtPnNlY3RvcisrOwogCQkJY29udGludWU7Ci0JCX0KIAotCQlicmVhazsKKwkJLyogc3luYyAqLworCQljYXNlIDA6CisJCQlhdG9taWNfZGVjKCZjdHgtPnBlbmRpbmcpOworCQkJY3R4LT5zZWN0b3IrKzsKKwkJCWNvbnRpbnVlOworCisJCS8qIGVycm9yICovCisJCWRlZmF1bHQ6CisJCQlhdG9taWNfZGVjKCZjdHgtPnBlbmRpbmcpOworCQkJcmV0dXJuIHI7CisJCX0KIAl9CiAKLQkvKgotCSAqIElmIHRoZXJlIGFyZSBwZW5kaW5nIGNyeXB0byBvcGVyYXRpb24gcnVuIGFzeW5jCi0JICogY29kZS4gT3RoZXJ3aXNlIHByb2Nlc3MgcmV0dXJuIGNvZGUgc3luY2hyb25vdXNseS4KLQkgKiBUaGUgc3RlcCBvZiAyIGVuc3VyZXMgdGhhdCBhc3luYyBmaW5pc2ggZG9lc24ndAotCSAqIGNhbGwgY3J5cHRvIGZpbmlzaCB0b28gZWFybHkuCi0JICovCi0JaWYgKGF0b21pY19zdWJfcmV0dXJuKDIsICZjdHgtPnBlbmRpbmcpKQotCQlyZXR1cm4gLUVJTlBST0dSRVNTOwotCi0JcmV0dXJuIHI7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRtX2NyeXB0X2Jpb19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKQEAgLTYyNCw4ICs2MTgsMTAgQEAKIHN0YXRpYyB2b2lkIGtjcnlwdGRfaW9fd3JpdGUoc3RydWN0IGRtX2NyeXB0X2lvICppbykKIHsKIAlzdHJ1Y3QgYmlvICpjbG9uZSA9IGlvLT5jdHguYmlvX291dDsKKwlzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyA9IGlvLT50YXJnZXQtPnByaXZhdGU7CiAKIAlnZW5lcmljX21ha2VfcmVxdWVzdChjbG9uZSk7CisJd2FrZV91cCgmY2MtPndyaXRlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIGtjcnlwdGRfaW8oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNjk4LDcgKzY5NCw4IEBACiAKIAkJciA9IGNyeXB0X2NvbnZlcnQoY2MsICZpby0+Y3R4KTsKIAotCQlpZiAociAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlvLT5jdHgucGVuZGluZykpIHsKKwkJCS8qIHByb2Nlc3NlZCwgbm8gcnVubmluZyBhc3luYyBjcnlwdG8gICovCiAJCQlrY3J5cHRkX2NyeXB0X3dyaXRlX2lvX3N1Ym1pdChpbywgciwgMCk7CiAJCQlpZiAodW5saWtlbHkociA8IDApKQogCQkJCXJldHVybjsKQEAgLTcwNiw4ICs3MDMsMTIgQEAKIAkJCWF0b21pY19pbmMoJmlvLT5wZW5kaW5nKTsKIAogCQkvKiBvdXQgb2YgbWVtb3J5IC0+IHJ1biBxdWV1ZXMgKi8KLQkJaWYgKHVubGlrZWx5KHJlbWFpbmluZykpCisJCWlmICh1bmxpa2VseShyZW1haW5pbmcpKSB7CisJCQkvKiB3YWl0IGZvciBhc3luYyBjcnlwdG8gdGhlbiByZWluaXRpYWxpemUgcGVuZGluZyAqLworCQkJd2FpdF9ldmVudChjYy0+d3JpdGVxLCAhYXRvbWljX3JlYWQoJmlvLT5jdHgucGVuZGluZykpOworCQkJYXRvbWljX3NldCgmaW8tPmN0eC5wZW5kaW5nLCAxKTsKIAkJCWNvbmdlc3Rpb25fd2FpdChXUklURSwgSFovMTAwKTsKKwkJfQogCX0KIH0KIApAQCAtNzQ2LDcgKzc0Nyw3IEBACiAKIAlyID0gY3J5cHRfY29udmVydChjYywgJmlvLT5jdHgpOwogCi0JaWYgKHIgIT0gLUVJTlBST0dSRVNTKQorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+Y3R4LnBlbmRpbmcpKQogCQlrY3J5cHRkX2NyeXB0X3JlYWRfZG9uZShpbywgcik7CiAKIAljcnlwdF9kZWNfcGVuZGluZyhpbyk7CkBAIC0xMDQ3LDYgKzEwNDgsNyBAQAogCQlnb3RvIGJhZF9jcnlwdF9xdWV1ZTsKIAl9CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYy0+d3JpdGVxKTsKIAl0aS0+cHJpdmF0ZSA9IGNjOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvLmMgYi9kcml2ZXJzL21kL2RtLWlvLmMKaW5kZXggYjhlMzQyZi4uOGYyNWY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pby5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW8uYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCQl3YWtlX3VwX3Byb2Nlc3MoaW8tPnNsZWVwZXIpOwogCiAJCWVsc2UgewotCQkJaW50IHIgPSBpby0+ZXJyb3I7CisJCQl1bnNpZ25lZCBsb25nIHIgPSBpby0+ZXJyb3I7CiAJCQlpb19ub3RpZnlfZm4gZm4gPSBpby0+Y2FsbGJhY2s7CiAJCQl2b2lkICpjb250ZXh0ID0gaW8tPmNvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwppbmRleCAyOTI4ZWYyMi4uNzYyY2IwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwpAQCAtNzUzLDcgKzc1Myw3IEBACiAgKiBhcmUgaW4gdGhlIG5vLXN5bmMgc3RhdGUuICBXZSBoYXZlIHRvIHJlY292ZXIgdGhlc2UgYnkKICAqIHJlY29weWluZyBmcm9tIHRoZSBkZWZhdWx0IG1pcnJvciB0byBhbGwgdGhlIG90aGVycy4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHJlY292ZXJ5X2NvbXBsZXRlKGludCByZWFkX2VyciwgdW5zaWduZWQgaW50IHdyaXRlX2VyciwKK3N0YXRpYyB2b2lkIHJlY292ZXJ5X2NvbXBsZXRlKGludCByZWFkX2VyciwgdW5zaWduZWQgbG9uZyB3cml0ZV9lcnIsCiAJCQkgICAgICB2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCByZWdpb24gKnJlZyA9IChzdHJ1Y3QgcmVnaW9uICopY29udGV4dDsKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCX0KIAogCWlmICh3cml0ZV9lcnIpIHsKLQkJRE1FUlJfTElNSVQoIldyaXRlIGVycm9yIGR1cmluZyByZWNvdmVyeSAoZXJyb3IgPSAweCV4KSIsCisJCURNRVJSX0xJTUlUKCJXcml0ZSBlcnJvciBkdXJpbmcgcmVjb3ZlcnkgKGVycm9yID0gMHglbHgpIiwKIAkJCSAgICB3cml0ZV9lcnIpOwogCQkvKgogCQkgKiBCaXRzIGNvcnJlc3BvbmQgdG8gZGV2aWNlcyAoZXhjbHVkaW5nIGRlZmF1bHQgbWlycm9yKS4KQEAgLTE2OTUsMTQgKzE2OTUsMTUgQEAKIAkJCSAqIGluZm9ybWF0aW9uIGZvciBhIHJldHJ5IG9yIHRoZXJlIHdhcyBubyBvdGhlcgogCQkJICogbWlycm9yIGluLXN5bmMuCiAJCQkgKi8KLQkJCURNRVJSX0xJTUlUKCJNaXJyb3IgcmVhZCBmYWlsZWQgZnJvbSAlcy4iLAotCQkJCSAgICBtLT5kZXYtPm5hbWUpOworCQkJRE1FUlJfTElNSVQoIk1pcnJvciByZWFkIGZhaWxlZC4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisKKwkJbSA9IHJlYWRfcmVjb3JkLT5tOworCiAJCURNRVJSKCJNaXJyb3IgcmVhZCBmYWlsZWQgZnJvbSAlcy4gVHJ5aW5nIGFsdGVybmF0aXZlIGRldmljZS4iLAogCQkgICAgICBtLT5kZXYtPm5hbWUpOwogCi0JCW0gPSByZWFkX3JlY29yZC0+bTsKIAkJZmFpbF9taXJyb3IobSwgRE1fUkFJRDFfUkVBRF9FUlJPUik7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggYWUyNGVhYi4uNGRjOGE0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCkBAIC04MDQsNyArODA0LDcgQEAKICAqIENhbGxlZCB3aGVuIHRoZSBjb3B5IEkvTyBoYXMgZmluaXNoZWQuICBrY29weWQgYWN0dWFsbHkgcnVucwogICogdGhpcyBjb2RlIHNvIGRvbid0IGJsb2NrLgogICovCi1zdGF0aWMgdm9pZCBjb3B5X2NhbGxiYWNrKGludCByZWFkX2VyciwgdW5zaWduZWQgaW50IHdyaXRlX2Vyciwgdm9pZCAqY29udGV4dCkKK3N0YXRpYyB2b2lkIGNvcHlfY2FsbGJhY2soaW50IHJlYWRfZXJyLCB1bnNpZ25lZCBsb25nIHdyaXRlX2Vyciwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGUgPSBjb250ZXh0OwogCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHBlLT5zbmFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9rY29weWQuYyBiL2RyaXZlcnMvbWQva2NvcHlkLmMKaW5kZXggZjM4MzFmMy4uZTc2YjUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9rY29weWQuYworKysgYi9kcml2ZXJzL21kL2tjb3B5ZC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAkgKiBFcnJvciBzdGF0ZSBvZiB0aGUgam9iLgogCSAqLwogCWludCByZWFkX2VycjsKLQl1bnNpZ25lZCBpbnQgd3JpdGVfZXJyOworCXVuc2lnbmVkIGxvbmcgd3JpdGVfZXJyOwogCiAJLyoKIAkgKiBFaXRoZXIgUkVBRCBvciBXUklURQpAQCAtMjkzLDcgKzI5Myw3IEBACiB7CiAJdm9pZCAqY29udGV4dCA9IGpvYi0+Y29udGV4dDsKIAlpbnQgcmVhZF9lcnIgPSBqb2ItPnJlYWRfZXJyOwotCXVuc2lnbmVkIGludCB3cml0ZV9lcnIgPSBqb2ItPndyaXRlX2VycjsKKwl1bnNpZ25lZCBsb25nIHdyaXRlX2VyciA9IGpvYi0+d3JpdGVfZXJyOwogCWtjb3B5ZF9ub3RpZnlfZm4gZm4gPSBqb2ItPmZuOwogCXN0cnVjdCBrY29weWRfY2xpZW50ICprYyA9IGpvYi0+a2M7CiAKQEAgLTM5Niw3ICszOTYsNyBAQAogCQlpZiAociA8IDApIHsKIAkJCS8qIGVycm9yIHRoaXMgcm9ndWUgam9iICovCiAJCQlpZiAoam9iLT5ydyA9PSBXUklURSkKLQkJCQlqb2ItPndyaXRlX2VyciA9ICh1bnNpZ25lZCBpbnQpIC0xOworCQkJCWpvYi0+d3JpdGVfZXJyID0gKHVuc2lnbmVkIGxvbmcpIC0xTDsKIAkJCWVsc2UKIAkJCQlqb2ItPnJlYWRfZXJyID0gMTsKIAkJCXB1c2goJl9jb21wbGV0ZV9qb2JzLCBqb2IpOwpAQCAtNDQ4LDggKzQ0OCw4IEBACiB9CiAKICNkZWZpbmUgU1VCX0pPQl9TSVpFIDEyOAotc3RhdGljIHZvaWQgc2VnbWVudF9jb21wbGV0ZShpbnQgcmVhZF9lcnIsCi0JCQkgICAgIHVuc2lnbmVkIGludCB3cml0ZV9lcnIsIHZvaWQgKmNvbnRleHQpCitzdGF0aWMgdm9pZCBzZWdtZW50X2NvbXBsZXRlKGludCByZWFkX2VyciwgdW5zaWduZWQgbG9uZyB3cml0ZV9lcnIsCisJCQkgICAgIHZvaWQgKmNvbnRleHQpCiB7CiAJLyogRklYTUU6IHRpZHkgdGhpcyBmdW5jdGlvbiAqLwogCXNlY3Rvcl90IHByb2dyZXNzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQva2NvcHlkLmggYi9kcml2ZXJzL21kL2tjb3B5ZC5oCmluZGV4IDQ2MjFlYTAuLjQ4NDVmMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQva2NvcHlkLmgKKysrIGIvZHJpdmVycy9tZC9rY29weWQuaApAQCAtMzIsOCArMzIsOCBAQAogICogcmVhZF9lcnIgaXMgYSBib29sZWFuLAogICogd3JpdGVfZXJyIGlzIGEgYml0c2V0LCB3aXRoIDEgYml0IGZvciBlYWNoIGRlc3RpbmF0aW9uIHJlZ2lvbgogICovCi10eXBlZGVmIHZvaWQgKCprY29weWRfbm90aWZ5X2ZuKShpbnQgcmVhZF9lcnIsCi0JCQkJIHVuc2lnbmVkIGludCB3cml0ZV9lcnIsIHZvaWQgKmNvbnRleHQpOwordHlwZWRlZiB2b2lkICgqa2NvcHlkX25vdGlmeV9mbikoaW50IHJlYWRfZXJyLCB1bnNpZ25lZCBsb25nIHdyaXRlX2VyciwKKwkJCQkgdm9pZCAqY29udGV4dCk7CiAKIGludCBrY29weWRfY29weShzdHJ1Y3Qga2NvcHlkX2NsaWVudCAqa2MsIHN0cnVjdCBpb19yZWdpb24gKmZyb20sCiAJCXVuc2lnbmVkIGludCBudW1fZGVzdHMsIHN0cnVjdCBpb19yZWdpb24gKmRlc3RzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDdkYTZlYzIuLjVlYmZiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTExMDUsNyArMTEwNSwxMSBAQAogCXJkZXYtPnNiX3NpemUgPSBsZTMyX3RvX2NwdShzYi0+bWF4X2RldikgKiAyICsgMjU2OwogCWJtYXNrID0gcXVldWVfaGFyZHNlY3Rfc2l6ZShyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZSktMTsKIAlpZiAocmRldi0+c2Jfc2l6ZSAmIGJtYXNrKQotCQlyZGV2LT4gc2Jfc2l6ZSA9IChyZGV2LT5zYl9zaXplIHwgYm1hc2spKzE7CisJCXJkZXYtPnNiX3NpemUgPSAocmRldi0+c2Jfc2l6ZSB8IGJtYXNrKSArIDE7CisKKwlpZiAobWlub3JfdmVyc2lvbgorCSAgICAmJiByZGV2LT5kYXRhX29mZnNldCA8IHNiX29mZnNldCArIChyZGV2LT5zYl9zaXplLzUxMikpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHNiLT5sZXZlbCA9PSBjcHVfdG9fbGUzMihMRVZFTF9NVUxUSVBBVEgpKQogCQlyZGV2LT5kZXNjX25yID0gLTE7CkBAIC0xMTM3LDcgKzExNDEsNyBAQAogCQllbHNlCiAJCQlyZXQgPSAwOwogCX0KLQlpZiAobWlub3JfdmVyc2lvbikgCisJaWYgKG1pbm9yX3ZlcnNpb24pCiAJCXJkZXYtPnNpemUgPSAoKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemU+PjkpIC0gbGU2NF90b19jcHUoc2ItPmRhdGFfb2Zmc2V0KSkgLyAyOwogCWVsc2UKIAkJcmRldi0+c2l6ZSA9IHJkZXYtPnNiX29mZnNldDsKQEAgLTE0OTksNyArMTUwMyw4IEBACiAJZnJlZV9kaXNrX3NiKHJkZXYpOwogCWxpc3RfZGVsX2luaXQoJnJkZXYtPnNhbWVfc2V0KTsKICNpZm5kZWYgTU9EVUxFCi0JbWRfYXV0b2RldGVjdF9kZXYocmRldi0+YmRldi0+YmRfZGV2KTsKKwlpZiAodGVzdF9iaXQoQXV0b0RldGVjdGVkLCAmcmRldi0+ZmxhZ3MpKQorCQltZF9hdXRvZGV0ZWN0X2RldihyZGV2LT5iZGV2LT5iZF9kZXYpOwogI2VuZGlmCiAJdW5sb2NrX3JkZXYocmRldik7CiAJa29iamVjdF9wdXQoJnJkZXYtPmtvYmopOwpAQCAtMTg1OSwxNyArMTg2NCw2IEBACiBfX0FUVFIoc3RhdGUsIFNfSVJVR098U19JV1VTUiwgc3RhdGVfc2hvdywgc3RhdGVfc3RvcmUpOwogCiBzdGF0aWMgc3NpemVfdAotc3VwZXJfc2hvdyhtZGtfcmRldl90ICpyZGV2LCBjaGFyICpwYWdlKQotewotCWlmIChyZGV2LT5zYl9sb2FkZWQgJiYgcmRldi0+c2Jfc2l6ZSkgewotCQltZW1jcHkocGFnZSwgcGFnZV9hZGRyZXNzKHJkZXYtPnNiX3BhZ2UpLCByZGV2LT5zYl9zaXplKTsKLQkJcmV0dXJuIHJkZXYtPnNiX3NpemU7Ci0JfSBlbHNlCi0JCXJldHVybiAwOwotfQotc3RhdGljIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHJkZXZfc3VwZXIgPSBfX0FUVFJfUk8oc3VwZXIpOwotCi1zdGF0aWMgc3NpemVfdAogZXJyb3JzX3Nob3cobWRrX3JkZXZfdCAqcmRldiwgY2hhciAqcGFnZSkKIHsKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGF0b21pY19yZWFkKCZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzKSk7CkBAIC0xOTk2LDkgKzE5OTAsMTEgQEAKIAljaGFyICplOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZiwgJmUsIDEwKTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgb2xkc2l6ZSA9IHJkZXYtPnNpemU7CisJbWRkZXZfdCAqbXlfbWRkZXYgPSByZGV2LT5tZGRldjsKKwogCWlmIChlPT1idWYgfHwgKCplICYmICplICE9ICdcbicpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocmRldi0+bWRkZXYtPnBlcnMpCisJaWYgKG15X21kZGV2LT5wZXJzKQogCQlyZXR1cm4gLUVCVVNZOwogCXJkZXYtPnNpemUgPSBzaXplOwogCWlmIChzaXplID4gb2xkc2l6ZSAmJiByZGV2LT5tZGRldi0+ZXh0ZXJuYWwpIHsKQEAgLTIwMTEsNyArMjAwNyw3IEBACiAJCWludCBvdmVybGFwID0gMDsKIAkJc3RydWN0IGxpc3RfaGVhZCAqdG1wLCAqdG1wMjsKIAotCQltZGRldl91bmxvY2socmRldi0+bWRkZXYpOworCQltZGRldl91bmxvY2sobXlfbWRkZXYpOwogCQlmb3JfZWFjaF9tZGRldihtZGRldiwgdG1wKSB7CiAJCQltZGtfcmRldl90ICpyZGV2MjsKIApAQCAtMjAzMSw3ICsyMDI3LDcgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQltZGRldl9sb2NrKHJkZXYtPm1kZGV2KTsKKwkJbWRkZXZfbG9jayhteV9tZGRldik7CiAJCWlmIChvdmVybGFwKSB7CiAJCQkvKiBTb21lb25lIGVsc2UgY291bGQgaGF2ZSBzbGlwcGVkIGluIGEgc2l6ZQogCQkJICogY2hhbmdlIGhlcmUsIGJ1dCBkb2luZyBzbyBpcyBqdXN0IHNpbGx5LgpAQCAtMjA0Myw4ICsyMDM5LDggQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAl9Ci0JaWYgKHNpemUgPCByZGV2LT5tZGRldi0+c2l6ZSB8fCByZGV2LT5tZGRldi0+c2l6ZSA9PSAwKQotCQlyZGV2LT5tZGRldi0+c2l6ZSA9IHNpemU7CisJaWYgKHNpemUgPCBteV9tZGRldi0+c2l6ZSB8fCBteV9tZGRldi0+c2l6ZSA9PSAwKQorCQlteV9tZGRldi0+c2l6ZSA9IHNpemU7CiAJcmV0dXJuIGxlbjsKIH0KIApAQCAtMjA1Myw3ICsyMDQ5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJkZXZfZGVmYXVsdF9hdHRyc1tdID0gewogCSZyZGV2X3N0YXRlLmF0dHIsCi0JJnJkZXZfc3VwZXIuYXR0ciwKIAkmcmRldl9lcnJvcnMuYXR0ciwKIAkmcmRldl9zbG90LmF0dHIsCiAJJnJkZXZfb2Zmc2V0LmF0dHIsCkBAIC0yMDY1LDEwICsyMDYwLDIxIEBACiB7CiAJc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTsKIAltZGtfcmRldl90ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIG1ka19yZGV2X3QsIGtvYmopOworCW1kZGV2X3QgKm1kZGV2ID0gcmRldi0+bWRkZXY7CisJc3NpemVfdCBydjsKIAogCWlmICghZW50cnktPnNob3cpCiAJCXJldHVybiAtRUlPOwotCXJldHVybiBlbnRyeS0+c2hvdyhyZGV2LCBwYWdlKTsKKworCXJ2ID0gbWRkZXYgPyBtZGRldl9sb2NrKG1kZGV2KSA6IC1FQlVTWTsKKwlpZiAoIXJ2KSB7CisJCWlmIChyZGV2LT5tZGRldiA9PSBOVUxMKQorCQkJcnYgPSAtRUJVU1k7CisJCWVsc2UKKwkJCXJ2ID0gZW50cnktPnNob3cocmRldiwgcGFnZSk7CisJCW1kZGV2X3VubG9jayhtZGRldik7CisJfQorCXJldHVybiBydjsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTIwNzcsMTUgKzIwODMsMTkgQEAKIHsKIAlzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHJkZXZfc3lzZnNfZW50cnksIGF0dHIpOwogCW1ka19yZGV2X3QgKnJkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgbWRrX3JkZXZfdCwga29iaik7Ci0JaW50IHJ2OworCXNzaXplX3QgcnY7CisJbWRkZXZfdCAqbWRkZXYgPSByZGV2LT5tZGRldjsKIAogCWlmICghZW50cnktPnN0b3JlKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwotCXJ2ID0gbWRkZXZfbG9jayhyZGV2LT5tZGRldik7CisJcnYgPSBtZGRldiA/IG1kZGV2X2xvY2sobWRkZXYpOiAtRUJVU1k7CiAJaWYgKCFydikgewotCQlydiA9IGVudHJ5LT5zdG9yZShyZGV2LCBwYWdlLCBsZW5ndGgpOworCQlpZiAocmRldi0+bWRkZXYgPT0gTlVMTCkKKwkJCXJ2ID0gLUVCVVNZOworCQllbHNlCisJCQlydiA9IGVudHJ5LT5zdG9yZShyZGV2LCBwYWdlLCBsZW5ndGgpOwogCQltZGRldl91bmxvY2socmRldi0+bWRkZXYpOwogCX0KIAlyZXR1cm4gcnY7CkBAIC00MTQyLDcgKzQxNTIsNyBAQAogCiAJcmV0dXJuIDA7CiBidXN5OgotCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiBjYW5ub3QgcmVtb3ZlIGFjdGl2ZSBkaXNrICVzIGZyb20gJXMgLi4uIFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogY2Fubm90IHJlbW92ZSBhY3RpdmUgZGlzayAlcyBmcm9tICVzIC4uLlxuIiwKIAkJYmRldm5hbWUocmRldi0+YmRldixiKSwgbWRuYW1lKG1kZGV2KSk7CiAJcmV0dXJuIC1FQlVTWTsKIH0KQEAgLTUxMjcsNyArNTEzNyw3IEBACiAJCQlpZiAobWRkZXYtPnJvPT0xKQogCQkJCXNlcV9wcmludGYoc2VxLCAiIChyZWFkLW9ubHkpIik7CiAJCQlpZiAobWRkZXYtPnJvPT0yKQotCQkJCXNlcV9wcmludGYoc2VxLCAiKGF1dG8tcmVhZC1vbmx5KSIpOworCQkJCXNlcV9wcmludGYoc2VxLCAiIChhdXRvLXJlYWQtb25seSkiKTsKIAkJCXNlcV9wcmludGYoc2VxLCAiICVzIiwgbWRkZXYtPnBlcnMtPm5hbWUpOwogCQl9CiAKQEAgLTUzNTEsNiArNTM2MSw3IEBACiAJCW1kZGV2LT5ybyA9IDA7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+c3luY190aHJlYWQpOwogCX0KIAlhdG9taWNfaW5jKCZtZGRldi0+d3JpdGVzX3BlbmRpbmcpOwogCWlmIChtZGRldi0+aW5fc3luYykgewpAQCAtNjAyMSw2ICs2MDMyLDcgQEAKIAkJCU1EX0JVRygpOwogCQkJY29udGludWU7CiAJCX0KKwkJc2V0X2JpdChBdXRvRGV0ZWN0ZWQsICZyZGV2LT5mbGFncyk7CiAJCWxpc3RfYWRkKCZyZGV2LT5zYW1lX3NldCwgJnBlbmRpbmdfcmFpZF9kaXNrcyk7CiAJCWlfcGFzc2VkKys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDVjN2ZlZjAuLmZmNjFiMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTU5Miw2ICs1OTIsMzcgQEAKIH0KIAogCitzdGF0aWMgaW50IGZsdXNoX3BlbmRpbmdfd3JpdGVzKGNvbmZfdCAqY29uZikKK3sKKwkvKiBBbnkgd3JpdGVzIHRoYXQgaGF2ZSBiZWVuIHF1ZXVlZCBidXQgYXJlIGF3YWl0aW5nCisJICogYml0bWFwIHVwZGF0ZXMgZ2V0IGZsdXNoZWQgaGVyZS4KKwkgKiBXZSByZXR1cm4gMSBpZiBhbnkgcmVxdWVzdHMgd2VyZSBhY3R1YWxseSBzdWJtaXR0ZWQuCisJICovCisJaW50IHJ2ID0gMDsKKworCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKKworCWlmIChjb25mLT5wZW5kaW5nX2Jpb19saXN0LmhlYWQpIHsKKwkJc3RydWN0IGJpbyAqYmlvOworCQliaW8gPSBiaW9fbGlzdF9nZXQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QpOworCQlibGtfcmVtb3ZlX3BsdWcoY29uZi0+bWRkZXYtPnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CisJCS8qIGZsdXNoIGFueSBwZW5kaW5nIGJpdG1hcCB3cml0ZXMgdG8KKwkJICogZGlzayBiZWZvcmUgcHJvY2VlZGluZyB3LyBJL08gKi8KKwkJYml0bWFwX3VucGx1Zyhjb25mLT5tZGRldi0+Yml0bWFwKTsKKworCQl3aGlsZSAoYmlvKSB7IC8qIHN1Ym1pdCBwZW5kaW5nIHdyaXRlcyAqLworCQkJc3RydWN0IGJpbyAqbmV4dCA9IGJpby0+YmlfbmV4dDsKKwkJCWJpby0+YmlfbmV4dCA9IE5VTEw7CisJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOworCQkJYmlvID0gbmV4dDsKKwkJfQorCQlydiA9IDE7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOworCXJldHVybiBydjsKK30KKwogLyogQmFycmllcnMuLi4uCiAgKiBTb21ldGltZXMgd2UgbmVlZCB0byBzdXNwZW5kIElPIHdoaWxlIHdlIGRvIHNvbWV0aGluZyBlbHNlLAogICogZWl0aGVyIHNvbWUgcmVzeW5jL3JlY292ZXJ5LCBvciByZWNvbmZpZ3VyZSB0aGUgYXJyYXkuCkBAIC02NzMsMTUgKzcwNCwyMyBAQAogCS8qIHN0b3Agc3luY2lvIGFuZCBub3JtYWwgSU8gYW5kIHdhaXQgZm9yIGV2ZXJ5dGhpbmcgdG8KIAkgKiBnbyBxdWl0ZS4KIAkgKiBXZSBpbmNyZW1lbnQgYmFycmllciBhbmQgbnJfd2FpdGluZywgYW5kIHRoZW4KLQkgKiB3YWl0IHVudGlsIGJhcnJpZXIrbnJfcGVuZGluZyBtYXRjaCBucl9xdWV1ZWQrMgorCSAqIHdhaXQgdW50aWwgbnJfcGVuZGluZyBtYXRjaCBucl9xdWV1ZWQrMQorCSAqIFRoaXMgaXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIG9uZSBub3JtYWwgSU8gcmVxdWVzdAorCSAqIHRoYXQgaGFzIGZhaWxlZC4gVGh1cyBhbnkgc3luYyByZXF1ZXN0IHRoYXQgbWlnaHQgYmUgcGVuZGluZworCSAqIHdpbGwgYmUgYmxvY2tlZCBieSBucl9wZW5kaW5nLCBhbmQgd2UgbmVlZCB0byB3YWl0IGZvcgorCSAqIHBlbmRpbmcgSU8gcmVxdWVzdHMgdG8gY29tcGxldGUgb3IgYmUgcXVldWVkIGZvciByZS10cnkuCisJICogVGh1cyB0aGUgbnVtYmVyIHF1ZXVlZCAobnJfcXVldWVkKSBwbHVzIHRoaXMgcmVxdWVzdCAoMSkKKwkgKiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcGVuZGluZyBJT3MgKG5yX3BlbmRpbmcpIGJlZm9yZQorCSAqIHdlIGNvbnRpbnVlLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsKIAljb25mLT5iYXJyaWVyKys7CiAJY29uZi0+bnJfd2FpdGluZysrOwogCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9iYXJyaWVyLAotCQkJICAgIGNvbmYtPmJhcnJpZXIrY29uZi0+bnJfcGVuZGluZyA9PSBjb25mLT5ucl9xdWV1ZWQrMiwKKwkJCSAgICBjb25mLT5ucl9wZW5kaW5nID09IGNvbmYtPm5yX3F1ZXVlZCsxLAogCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJICAgIHJhaWQxX3VucGx1Zyhjb25mLT5tZGRldi0+cXVldWUpKTsKKwkJCSAgICAoeyBmbHVzaF9wZW5kaW5nX3dyaXRlcyhjb25mKTsKKwkJCSAgICAgICByYWlkMV91bnBsdWcoY29uZi0+bWRkZXYtPnF1ZXVlKTsgfSkpOwogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOwogfQogc3RhdGljIHZvaWQgdW5mcmVlemVfYXJyYXkoY29uZl90ICpjb25mKQpAQCAtOTA3LDYgKzk0Niw5IEBACiAJYmxrX3BsdWdfZGV2aWNlKG1kZGV2LT5xdWV1ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAorCS8qIEluIGNhc2UgcmFpZDFkIHNudWNrIGludG8gZnJlZXplX2FycmF5ICovCisJd2FrZV91cCgmY29uZi0+d2FpdF9iYXJyaWVyKTsKKwogCWlmIChkb19zeW5jKQogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogI2lmIDAKQEAgLTE0NzMsMjggKzE1MTUsMTQgQEAKIAkKIAlmb3IgKDs7KSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKworCQl1bnBsdWcgKz0gZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZik7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKGNvbmYtPnBlbmRpbmdfYmlvX2xpc3QuaGVhZCkgewotCQkJYmlvID0gYmlvX2xpc3RfZ2V0KCZjb25mLT5wZW5kaW5nX2Jpb19saXN0KTsKLQkJCWJsa19yZW1vdmVfcGx1ZyhtZGRldi0+cXVldWUpOworCQlpZiAobGlzdF9lbXB0eShoZWFkKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJCS8qIGZsdXNoIGFueSBwZW5kaW5nIGJpdG1hcCB3cml0ZXMgdG8gZGlzayBiZWZvcmUgcHJvY2VlZGluZyB3LyBJL08gKi8KLQkJCWJpdG1hcF91bnBsdWcobWRkZXYtPmJpdG1hcCk7Ci0KLQkJCXdoaWxlIChiaW8pIHsgLyogc3VibWl0IHBlbmRpbmcgd3JpdGVzICovCi0JCQkJc3RydWN0IGJpbyAqbmV4dCA9IGJpby0+YmlfbmV4dDsKLQkJCQliaW8tPmJpX25leHQgPSBOVUxMOwotCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7Ci0JCQkJYmlvID0gbmV4dDsKLQkJCX0KLQkJCXVucGx1ZyA9IDE7Ci0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCiAJCQlicmVhazsKKwkJfQogCQlyMV9iaW8gPSBsaXN0X2VudHJ5KGhlYWQtPnByZXYsIHIxYmlvX3QsIHJldHJ5X2xpc3QpOwogCQlsaXN0X2RlbChoZWFkLT5wcmV2KTsKIAkJY29uZi0+bnJfcXVldWVkLS07CkBAIC0xNTkwLDcgKzE2MTgsNiBAQAogCQkJfQogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCAwMTdmNTgxLi4zMjM4OWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTUzNyw3ICs1MzcsOCBAQAogCWN1cnJlbnRfZGlzdGFuY2UgPSBhYnMocjEwX2Jpby0+ZGV2c1tzbG90XS5hZGRyIC0KIAkJCSAgICAgICBjb25mLT5taXJyb3JzW2Rpc2tdLmhlYWRfcG9zaXRpb24pOwogCi0JLyogRmluZCB0aGUgZGlzayB3aG9zZSBoZWFkIGlzIGNsb3Nlc3QgKi8KKwkvKiBGaW5kIHRoZSBkaXNrIHdob3NlIGhlYWQgaXMgY2xvc2VzdCwKKwkgKiBvciAtIGZvciBmYXIgPiAxIC0gZmluZCB0aGUgY2xvc2VzdCB0byBwYXJ0aXRpb24gYmVnaW5uaW5nICovCiAKIAlmb3IgKG5zbG90ID0gc2xvdDsgbnNsb3QgPCBjb25mLT5jb3BpZXM7IG5zbG90KyspIHsKIAkJaW50IG5kaXNrID0gcjEwX2Jpby0+ZGV2c1tuc2xvdF0uZGV2bnVtOwpAQCAtNTU3LDggKzU1OCwxMyBAQAogCQkJc2xvdCA9IG5zbG90OwogCQkJYnJlYWs7CiAJCX0KLQkJbmV3X2Rpc3RhbmNlID0gYWJzKHIxMF9iaW8tPmRldnNbbnNsb3RdLmFkZHIgLQotCQkJCSAgIGNvbmYtPm1pcnJvcnNbbmRpc2tdLmhlYWRfcG9zaXRpb24pOworCisJCS8qIGZvciBmYXIgPiAxIGFsd2F5cyB1c2UgdGhlIGxvd2VzdCBhZGRyZXNzICovCisJCWlmIChjb25mLT5mYXJfY29waWVzID4gMSkKKwkJCW5ld19kaXN0YW5jZSA9IHIxMF9iaW8tPmRldnNbbnNsb3RdLmFkZHI7CisJCWVsc2UKKwkJCW5ld19kaXN0YW5jZSA9IGFicyhyMTBfYmlvLT5kZXZzW25zbG90XS5hZGRyIC0KKwkJCQkJICAgY29uZi0+bWlycm9yc1tuZGlza10uaGVhZF9wb3NpdGlvbik7CiAJCWlmIChuZXdfZGlzdGFuY2UgPCBjdXJyZW50X2Rpc3RhbmNlKSB7CiAJCQljdXJyZW50X2Rpc3RhbmNlID0gbmV3X2Rpc3RhbmNlOwogCQkJZGlzayA9IG5kaXNrOwpAQCAtNjI5LDcgKzYzNSwzNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZl90ICpjb25mKQoreworCS8qIEFueSB3cml0ZXMgdGhhdCBoYXZlIGJlZW4gcXVldWVkIGJ1dCBhcmUgYXdhaXRpbmcKKwkgKiBiaXRtYXAgdXBkYXRlcyBnZXQgZmx1c2hlZCBoZXJlLgorCSAqIFdlIHJldHVybiAxIGlmIGFueSByZXF1ZXN0cyB3ZXJlIGFjdHVhbGx5IHN1Ym1pdHRlZC4KKwkgKi8KKwlpbnQgcnYgPSAwOwogCisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOworCisJaWYgKGNvbmYtPnBlbmRpbmdfYmlvX2xpc3QuaGVhZCkgeworCQlzdHJ1Y3QgYmlvICpiaW87CisJCWJpbyA9IGJpb19saXN0X2dldCgmY29uZi0+cGVuZGluZ19iaW9fbGlzdCk7CisJCWJsa19yZW1vdmVfcGx1Zyhjb25mLT5tZGRldi0+cXVldWUpOworCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKKwkJLyogZmx1c2ggYW55IHBlbmRpbmcgYml0bWFwIHdyaXRlcyB0byBkaXNrCisJCSAqIGJlZm9yZSBwcm9jZWVkaW5nIHcvIEkvTyAqLworCQliaXRtYXBfdW5wbHVnKGNvbmYtPm1kZGV2LT5iaXRtYXApOworCisJCXdoaWxlIChiaW8pIHsgLyogc3VibWl0IHBlbmRpbmcgd3JpdGVzICovCisJCQlzdHJ1Y3QgYmlvICpuZXh0ID0gYmlvLT5iaV9uZXh0OworCQkJYmlvLT5iaV9uZXh0ID0gTlVMTDsKKwkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CisJCQliaW8gPSBuZXh0OworCQl9CisJCXJ2ID0gMTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CisJcmV0dXJuIHJ2OworfQogLyogQmFycmllcnMuLi4uCiAgKiBTb21ldGltZXMgd2UgbmVlZCB0byBzdXNwZW5kIElPIHdoaWxlIHdlIGRvIHNvbWV0aGluZyBlbHNlLAogICogZWl0aGVyIHNvbWUgcmVzeW5jL3JlY292ZXJ5LCBvciByZWNvbmZpZ3VyZSB0aGUgYXJyYXkuCkBAIC03MTIsMTUgKzc0NywyMyBAQAogCS8qIHN0b3Agc3luY2lvIGFuZCBub3JtYWwgSU8gYW5kIHdhaXQgZm9yIGV2ZXJ5dGhpbmcgdG8KIAkgKiBnbyBxdWlldC4KIAkgKiBXZSBpbmNyZW1lbnQgYmFycmllciBhbmQgbnJfd2FpdGluZywgYW5kIHRoZW4KLQkgKiB3YWl0IHVudGlsIGJhcnJpZXIrbnJfcGVuZGluZyBtYXRjaCBucl9xdWV1ZWQrMgorCSAqIHdhaXQgdW50aWwgbnJfcGVuZGluZyBtYXRjaCBucl9xdWV1ZWQrMQorCSAqIFRoaXMgaXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIG9uZSBub3JtYWwgSU8gcmVxdWVzdAorCSAqIHRoYXQgaGFzIGZhaWxlZC4gVGh1cyBhbnkgc3luYyByZXF1ZXN0IHRoYXQgbWlnaHQgYmUgcGVuZGluZworCSAqIHdpbGwgYmUgYmxvY2tlZCBieSBucl9wZW5kaW5nLCBhbmQgd2UgbmVlZCB0byB3YWl0IGZvcgorCSAqIHBlbmRpbmcgSU8gcmVxdWVzdHMgdG8gY29tcGxldGUgb3IgYmUgcXVldWVkIGZvciByZS10cnkuCisJICogVGh1cyB0aGUgbnVtYmVyIHF1ZXVlZCAobnJfcXVldWVkKSBwbHVzIHRoaXMgcmVxdWVzdCAoMSkKKwkgKiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcGVuZGluZyBJT3MgKG5yX3BlbmRpbmcpIGJlZm9yZQorCSAqIHdlIGNvbnRpbnVlLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsKIAljb25mLT5iYXJyaWVyKys7CiAJY29uZi0+bnJfd2FpdGluZysrOwogCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9iYXJyaWVyLAotCQkJICAgIGNvbmYtPmJhcnJpZXIrY29uZi0+bnJfcGVuZGluZyA9PSBjb25mLT5ucl9xdWV1ZWQrMiwKKwkJCSAgICBjb25mLT5ucl9wZW5kaW5nID09IGNvbmYtPm5yX3F1ZXVlZCsxLAogCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJICAgIHJhaWQxMF91bnBsdWcoY29uZi0+bWRkZXYtPnF1ZXVlKSk7CisJCQkgICAgKHsgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZik7CisJCQkgICAgICAgcmFpZDEwX3VucGx1Zyhjb25mLT5tZGRldi0+cXVldWUpOyB9KSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CiAKQEAgLTg5Miw2ICs5MzUsOSBAQAogCWJsa19wbHVnX2RldmljZShtZGRldi0+cXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAKKwkvKiBJbiBjYXNlIHJhaWQxMGQgc251Y2sgaW4gdG8gZnJlZXplX2FycmF5ICovCisJd2FrZV91cCgmY29uZi0+d2FpdF9iYXJyaWVyKTsKKwogCWlmIChkb19zeW5jKQogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCkBAIC0xNDY0LDI4ICsxNTEwLDE0IEBACiAKIAlmb3IgKDs7KSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKworCQl1bnBsdWcgKz0gZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZik7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKGNvbmYtPnBlbmRpbmdfYmlvX2xpc3QuaGVhZCkgewotCQkJYmlvID0gYmlvX2xpc3RfZ2V0KCZjb25mLT5wZW5kaW5nX2Jpb19saXN0KTsKLQkJCWJsa19yZW1vdmVfcGx1ZyhtZGRldi0+cXVldWUpOworCQlpZiAobGlzdF9lbXB0eShoZWFkKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJCS8qIGZsdXNoIGFueSBwZW5kaW5nIGJpdG1hcCB3cml0ZXMgdG8gZGlzayBiZWZvcmUgcHJvY2VlZGluZyB3LyBJL08gKi8KLQkJCWJpdG1hcF91bnBsdWcobWRkZXYtPmJpdG1hcCk7Ci0KLQkJCXdoaWxlIChiaW8pIHsgLyogc3VibWl0IHBlbmRpbmcgd3JpdGVzICovCi0JCQkJc3RydWN0IGJpbyAqbmV4dCA9IGJpby0+YmlfbmV4dDsKLQkJCQliaW8tPmJpX25leHQgPSBOVUxMOwotCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7Ci0JCQkJYmlvID0gbmV4dDsKLQkJCX0KLQkJCXVucGx1ZyA9IDE7Ci0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCiAJCQlicmVhazsKKwkJfQogCQlyMTBfYmlvID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCByMTBiaW9fdCwgcmV0cnlfbGlzdCk7CiAJCWxpc3RfZGVsKGhlYWQtPnByZXYpOwogCQljb25mLT5ucl9xdWV1ZWQtLTsKQEAgLTE1NDgsNyArMTU4MCw2IEBACiAJCQl9CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAlpZiAodW5wbHVnKQogCQl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKIH0KQEAgLTE3ODcsNiArMTgxOCw4IEBACiAJCQkJaWYgKGogPT0gY29uZi0+Y29waWVzKSB7CiAJCQkJCS8qIENhbm5vdCByZWNvdmVyLCBzbyBhYm9ydCB0aGUgcmVjb3ZlcnkgKi8KIAkJCQkJcHV0X2J1ZihyMTBfYmlvKTsKKwkJCQkJaWYgKHJiMikKKwkJCQkJCWF0b21pY19kZWMoJnJiMi0+cmVtYWluaW5nKTsKIAkJCQkJcjEwX2JpbyA9IHJiMjsKIAkJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1EX1JFQ09WRVJZX0VSUiwgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCQkJCQlwcmludGsoS0VSTl9JTkZPICJyYWlkMTA6ICVzOiBpbnN1ZmZpY2llbnQgd29ya2luZyBkZXZpY2VzIGZvciByZWNvdmVyeS5cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggMmQ2ZjFhNS4uYjE2MmI4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMTE0Myw3ICsxMTQzLDcgQEAKIAkJCXJkZXYgPSBjb25mLT5kaXNrc1tpXS5yZGV2OwogCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDU6JXM6IHJlYWQgZXJyb3IgY29ycmVjdGVkICglbHUgc2VjdG9ycyBhdCAlbGx1IG9uICVzKVxuIiwKIAkJCSAgICAgICBtZG5hbWUoY29uZi0+bWRkZXYpLCBTVFJJUEVfU0VDVE9SUywKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IgKyByZGV2LT5kYXRhX29mZnNldCwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShzaC0+c2VjdG9yICsgcmRldi0+ZGF0YV9vZmZzZXQpLAogCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKIAkJCWNsZWFyX2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsKIAkJCWNsZWFyX2JpdChSNV9SZVdyaXRlLCAmc2gtPmRldltpXS5mbGFncyk7CkBAIC0xMTYwLDEzICsxMTYwLDEzIEBACiAJCWlmIChjb25mLT5tZGRldi0+ZGVncmFkZWQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYWlkNTolczogcmVhZCBlcnJvciBub3QgY29ycmVjdGFibGUgKHNlY3RvciAlbGx1IG9uICVzKS5cbiIsCiAJCQkgICAgICAgbWRuYW1lKGNvbmYtPm1kZGV2KSwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IgKyByZGV2LT5kYXRhX29mZnNldCwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShzaC0+c2VjdG9yICsgcmRldi0+ZGF0YV9vZmZzZXQpLAogCQkJICAgICAgIGJkbik7CiAJCWVsc2UgaWYgKHRlc3RfYml0KFI1X1JlV3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKSkKIAkJCS8qIE9oLCBubyEhISAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicmFpZDU6JXM6IHJlYWQgZXJyb3IgTk9UIGNvcnJlY3RlZCEhIChzZWN0b3IgJWxsdSBvbiAlcykuXG4iLAogCQkJICAgICAgIG1kbmFtZShjb25mLT5tZGRldiksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yICsgcmRldi0+ZGF0YV9vZmZzZXQsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2gtPnNlY3RvciArIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCSAgICAgICBiZG4pOwogCQllbHNlIGlmIChhdG9taWNfcmVhZCgmcmRldi0+cmVhZF9lcnJvcnMpCiAJCQkgPiBjb25mLT5tYXhfbnJfc3RyaXBlcykKQEAgLTIzNDgsMjUgKzIzNDgsMTUgQEAKIHN0YXRpYyB2b2lkIGhhbmRsZV9wYXJpdHlfY2hlY2tzNShyYWlkNV9jb25mX3QgKmNvbmYsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCiAJCQkJc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzLCBpbnQgZGlza3MpCiB7Ci0Jc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKLQkvKiBUYWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnM6Ci0JICogMS8gc3RhcnQgYSBjaGVjayBwYXJpdHkgb3BlcmF0aW9uIGlmICh1cHRvZGF0ZSA9PSBkaXNrcykKLQkgKiAyLyBmaW5pc2ggYSBjaGVjayBwYXJpdHkgb3BlcmF0aW9uIGFuZCBhY3Qgb24gdGhlIHJlc3VsdAotCSAqIDMvIHNraXAgdG8gdGhlIHdyaXRlYmFjayBzZWN0aW9uIGlmIHdlIHByZXZpb3VzbHkKLQkgKiAgICBpbml0aWF0ZWQgYSByZWNvdmVyeSBvcGVyYXRpb24KLQkgKi8KLQlpZiAocy0+ZmFpbGVkID09IDAgJiYKLQkgICAgIXRlc3RfYml0KFNUUklQRV9PUF9NT0RfUkVQQUlSX1BELCAmc2gtPm9wcy5wZW5kaW5nKSkgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU1RSSVBFX09QX0NIRUNLLCAmc2gtPm9wcy5wZW5kaW5nKSkgewotCQkJQlVHX09OKHMtPnVwdG9kYXRlICE9IGRpc2tzKTsKLQkJCWNsZWFyX2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbc2gtPnBkX2lkeF0uZmxhZ3MpOwotCQkJc2gtPm9wcy5jb3VudCsrOwotCQkJcy0+dXB0b2RhdGUtLTsKLQkJfSBlbHNlIGlmICgKLQkJICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdChTVFJJUEVfT1BfQ0hFQ0ssICZzaC0+b3BzLmNvbXBsZXRlKSkgewotCQkJY2xlYXJfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMuYWNrKTsKLQkJCWNsZWFyX2JpdChTVFJJUEVfT1BfQ0hFQ0ssICZzaC0+b3BzLnBlbmRpbmcpOworCWludCBjYW5jZWxlZF9jaGVjayA9IDA7CiAKKwlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOworCisJLyogY29tcGxldGUgYSBjaGVjayBvcGVyYXRpb24gKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMuY29tcGxldGUpKSB7CisJICAgIGNsZWFyX2JpdChTVFJJUEVfT1BfQ0hFQ0ssICZzaC0+b3BzLmFjayk7CisJICAgIGNsZWFyX2JpdChTVFJJUEVfT1BfQ0hFQ0ssICZzaC0+b3BzLnBlbmRpbmcpOworCQlpZiAocy0+ZmFpbGVkID09IDApIHsKIAkJCWlmIChzaC0+b3BzLnplcm9fc3VtX3Jlc3VsdCA9PSAwKQogCQkJCS8qIHBhcml0eSBpcyBjb3JyZWN0IChvbiBkaXNjLAogCQkJCSAqIG5vdCBpbiBidWZmZXIgYW55IG1vcmUpCkBAIC0yMzkxLDcgKzIzODEsOCBAQAogCQkJCQlzLT51cHRvZGF0ZSsrOwogCQkJCX0KIAkJCX0KLQkJfQorCQl9IGVsc2UKKwkJCWNhbmNlbGVkX2NoZWNrID0gMTsgLyogU1RSSVBFX0lOU1lOQyBpcyBub3Qgc2V0ICovCiAJfQogCiAJLyogY2hlY2sgaWYgd2UgY2FuIGNsZWFyIGEgcGFyaXR5IGRpc2sgcmVjb25zdHJ1Y3QgKi8KQEAgLTI0MDQsMTIgKzIzOTUsMjggQEAKIAkJY2xlYXJfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMucGVuZGluZyk7CiAJfQogCi0JLyogV2FpdCBmb3IgY2hlY2sgcGFyaXR5IGFuZCBjb21wdXRlIGJsb2NrIG9wZXJhdGlvbnMgdG8gY29tcGxldGUKLQkgKiBiZWZvcmUgd3JpdGUtYmFjaworCS8qIHN0YXJ0IGEgbmV3IGNoZWNrIG9wZXJhdGlvbiBpZiB0aGVyZSBhcmUgbm8gZmFpbHVyZXMsIHRoZSBzdHJpcGUgaXMKKwkgKiBub3QgaW5zeW5jLCBhbmQgYSByZXBhaXIgaXMgbm90IGluIGZsaWdodAogCSAqLwotCWlmICghdGVzdF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSkgJiYKLQkJIXRlc3RfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMucGVuZGluZykgJiYKLQkJIXRlc3RfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMucGVuZGluZykpIHsKKwlpZiAocy0+ZmFpbGVkID09IDAgJiYKKwkgICAgIXRlc3RfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpICYmCisJICAgICF0ZXN0X2JpdChTVFJJUEVfT1BfTU9EX1JFUEFJUl9QRCwgJnNoLT5vcHMucGVuZGluZykpIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMucGVuZGluZykpIHsKKwkJCUJVR19PTihzLT51cHRvZGF0ZSAhPSBkaXNrcyk7CisJCQljbGVhcl9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W3NoLT5wZF9pZHhdLmZsYWdzKTsKKwkJCXNoLT5vcHMuY291bnQrKzsKKwkJCXMtPnVwdG9kYXRlLS07CisJCX0KKwl9CisKKwkvKiBXYWl0IGZvciBjaGVjayBwYXJpdHkgYW5kIGNvbXB1dGUgYmxvY2sgb3BlcmF0aW9ucyB0byBjb21wbGV0ZQorCSAqIGJlZm9yZSB3cml0ZS1iYWNrLiAgSWYgYSBmYWlsdXJlIG9jY3VycmVkIHdoaWxlIHRoZSBjaGVjayBvcGVyYXRpb24KKwkgKiB3YXMgaW4gZmxpZ2h0IHdlIG5lZWQgdG8gY3ljbGUgdGhpcyBzdHJpcGUgdGhyb3VnaCBoYW5kbGVfc3RyaXBlCisJICogc2luY2UgdGhlIHBhcml0eSBibG9jayBtYXkgbm90IGJlIHVwdG9kYXRlCisJICovCisJaWYgKCFjYW5jZWxlZF9jaGVjayAmJiAhdGVzdF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSkgJiYKKwkgICAgIXRlc3RfYml0KFNUUklQRV9PUF9DSEVDSywgJnNoLT5vcHMucGVuZGluZykgJiYKKwkgICAgIXRlc3RfYml0KFNUUklQRV9PUF9DT01QVVRFX0JMSywgJnNoLT5vcHMucGVuZGluZykpIHsKIAkJc3RydWN0IHI1ZGV2ICpkZXY7CiAJCS8qIGVpdGhlciBmYWlsZWQgcGFyaXR5IGNoZWNrLCBvciByZWNvdmVyeSBpcyBoYXBwZW5pbmcgKi8KIAkJaWYgKHMtPmZhaWxlZCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCmluZGV4IDhmNGE0NTMuLjExOTUwNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKQEAgLTI1LDExICsyNSwxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmlkZW9kZXYuCiAKK2NvbmZpZyBWSURFT19WNEwyX0NPTU1PTgorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiAoSTJDIHx8IEkyQz1uKSAmJiBWSURFT19ERVYKKwlkZWZhdWx0IChJMkMgfHwgSTJDPW4pICYmIFZJREVPX0RFVgorCiBjb25maWcgVklERU9fVjRMMQogCWJvb2wgIkVuYWJsZSBWaWRlbyBGb3IgTGludXggQVBJIDEgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gVklERU9fREVWCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVklERU9fVjRMMl9DT01NT04KKwlkZWZhdWx0IFZJREVPX0RFViAmJiBWSURFT19WNEwyX0NPTU1PTgogCXNlbGVjdCBWSURFT19WNEwxX0NPTVBBVAotCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZXMgYSBjb21wYXRpYmlsaXR5IEFQSSB1c2VkIGJ5IG1vc3QgVjRMMiBkZXZpY2VzIHRvIGFsbG93CiAJICBpdHMgdXNhZ2Ugd2l0aCBsZWdhY3kgYXBwbGljYXRpb25zIHRoYXQgc3VwcG9ydHMgb25seSBWNEwxIGFwaS4KQEAgLTM5LDcgKzQ0LDcgQEAKIGNvbmZpZyBWSURFT19WNEwxX0NPTVBBVAogCWJvb2wgIkVuYWJsZSBWaWRlbyBGb3IgTGludXggQVBJIDEgY29tcGF0aWJsZSBMYXllciIKIAlkZXBlbmRzIG9uIFZJREVPX0RFVgotCWRlZmF1bHQgeQorCWRlZmF1bHQgVklERU9fREVWCiAJLS0taGVscC0tLQogCSAgVGhpcyBhcGkgd2VyZSBkZXZlbG9wZWQgdG8gYmUgdXNlZCBhdCBLZXJuZWwgMi4yIGFuZCAyLjQsIGJ1dAogCSAgbGFja3Mgc3VwcG9ydCBmb3Igc2V2ZXJhbCB2aWRlbyBzdGFuZGFyZHMuIFRoZXJlIGFyZSBzZXZlcmFsCkBAIC01NSw4ICs2MCw4IEBACiAKIGNvbmZpZyBWSURFT19WNEwyCiAJYm9vbAotCWRlcGVuZHMgb24gVklERU9fREVWCi0JZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVklERU9fVjRMMl9DT01NT04KKwlkZWZhdWx0IFZJREVPX0RFViAmJiBWSURFT19WNEwyX0NPTU1PTgogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyIKIApAQCAtOTMsNyArOTgsNyBAQAogCiBjb25maWcgVFVORVJfWEMyMDI4CiAJdHJpc3RhdGUgIlhDZWl2ZSB4YzIwMjgveGMzMDI4IHR1bmVycyIKLQlkZXBlbmRzIG9uIEkyQworCWRlcGVuZHMgb24gSTJDICYmIEZXX0xPQURFUgogCWRlZmF1bHQgbSBpZiBWSURFT19UVU5FUl9DVVNUT01JWkUKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIHhjMjAyOC94YzMwMjggdHVuZXJzLgpAQCAtMTgwLDcgKzE4NSw2IEBACiAKIGNvbmZpZyBEQUIKIAlib29sZWFuICJEQUIgYWRhcHRlcnMiCi0JZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgQWxsb3cgc2VsZWN0aW5nIHN1cHBvcnQgZm9yIGZvciBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKQogCSAgUmVjZWl2ZXIgYWRhcHRlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9NYWtlZmlsZQppbmRleCA4Y2Y5MTM1Li43YjhiYjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvTWFrZWZpbGUKQEAgLTYsMyArNiw2IEBACiBvYmoteSArPSB2aWRlby8KIG9iai0kKENPTkZJR19WSURFT19ERVYpICs9IHJhZGlvLwogb2JqLSQoQ09ORklHX0RWQl9DT1JFKSAgKz0gZHZiLworaWZlcSAoJChDT05GSUdfRFZCX0NPUkUpLCkKKyAgb2JqLSQoQ09ORklHX1ZJREVPX1RVTkVSKSAgKz0gZHZiL2Zyb250ZW5kcy8KK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZwppbmRleCAwNmNhNzU5Li43NjljNmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL0tjb25maWcKQEAgLTQsNiArNCw2IEBACiAKIGNvbmZpZyBWSURFT19TQUE3MTQ2X1ZWCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFZJREVPX0RFVgorCWRlcGVuZHMgb24gVklERU9fVjRMMgogCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKIAlzZWxlY3QgVklERU9fU0FBNzE0NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCmluZGV4IGE0YTkzN2MuLjJhYjVhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKQEAgLTE5ODcsMyArMTk4Nyw0OSBAQAogfTsKIAogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYmVob2xkKTsKKworLyoKKyAqIFJlbW90ZSBjb250cm9sIGZvciB0aGUgR2VuaXVzIFRWR08gQTExTUNFCisgKiBBZHJpYW4gUGFyZGluaSA8cGFyZG8uYnNzb0BnbWFpbC5jb20+CisgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZVtJUl9LRVlUQUJfU0laRV0gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwlbMHg0OF0gPSBLRVlfMCwKKwlbMHgwOV0gPSBLRVlfMSwKKwlbMHgxZF0gPSBLRVlfMiwKKwlbMHgxZl0gPSBLRVlfMywKKwlbMHgxOV0gPSBLRVlfNCwKKwlbMHgxYl0gPSBLRVlfNSwKKwlbMHgxMV0gPSBLRVlfNiwKKwlbMHgxN10gPSBLRVlfNywKKwlbMHgxMl0gPSBLRVlfOCwKKwlbMHgxNl0gPSBLRVlfOSwKKworCVsweDU0XSA9IEtFWV9SRUNPUkQsCQkvKiByZWNvcmRpbmcgKi8KKwlbMHgwNl0gPSBLRVlfTVVURSwJCS8qIG11dGUgKi8KKwlbMHgxMF0gPSBLRVlfUE9XRVIsCisJWzB4NDBdID0gS0VZX0xBU1QsCQkvKiByZWNhbGwgKi8KKwlbMHg0Y10gPSBLRVlfQ0hBTk5FTFVQLAkJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCVsweDAwXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLworCVsweDBkXSA9IEtFWV9WT0xVTUVVUCwKKwlbMHgxNV0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbMHg0ZF0gPSBLRVlfT0ssCQkvKiBhbHNvIGxhYmVsZWQgYXMgUGF1c2UgKi8KKwlbMHgxY10gPSBLRVlfWk9PTSwJCS8qIGZ1bGwgc2NyZWVuIGFuZCBTdG9wKi8KKwlbMHgwMl0gPSBLRVlfTU9ERSwJCS8qIEFWIFNvdXJjZSBvciBSZXdpbmQqLworCVsweDA0XSA9IEtFWV9MSVNULAkJLyogLS8tLSAqLworCS8qIHNtYWxsIGFycm93cyBhYm92ZSBudW1iZXJzICovCisJWzB4MWFdID0gS0VZX05FWFQsCQkvKiBhbHNvIEZhc3QgRm9yd2FyZCAqLworCVsweDBlXSA9IEtFWV9QUkVWSU9VUywJLyogYWxzbyBSZXdpbmQgKi8KKwkvKiB0aGVzZSBhcmUgaW4gYSByYXRoZXIgbm9uIHN0YW5kYXJkIGxheW91dCBhbmQgaGF2ZQorCWFuIGFsdGVybmF0ZSBuYW1lIHdyaXR0ZW4gKi8KKwlbMHgxZV0gPSBLRVlfVVAsCQkvKiBWaWRlbyBTZXR0aW5nICovCisJWzB4MGFdID0gS0VZX0RPV04sCQkvKiBWaWRlbyBEZWZhdWx0ICovCisJWzB4MDVdID0gS0VZX0xFRlQsCQkvKiBTbmFwc2hvdCAqLworCVsweDBjXSA9IEtFWV9SSUdIVCwJCS8qIEhpZGUgUGFuZWwgKi8KKwkvKiBGb3VyIGJ1dHRvbnMgd2l0aG91dCBsYWJlbCAqLworCVsweDQ5XSA9IEtFWV9SRUQsCisJWzB4MGJdID0gS0VZX0dSRUVOLAorCVsweDEzXSA9IEtFWV9ZRUxMT1csCisJWzB4NTBdID0gS0VZX0JMVUUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZ2VuaXVzX3R2Z29fYTExbWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKaW5kZXggMTY4YThkMy4uNzcwN2I4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKQEAgLTMwNiwyNSArMzA2LDIyIEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKLQlpZiggMCAhPSAoZGV2LT5leHQpKSB7Ci0JCWlmKCAwICE9IChkZXYtPmV4dC0+aXJxX21hc2sgJiBpc3IgKSkgewotCQkJaWYoIDAgIT0gZGV2LT5leHQtPmlycV9mdW5jICkgeworCWlmIChkZXYtPmV4dCkgeworCQlpZiAoZGV2LT5leHQtPmlycV9tYXNrICYgaXNyKSB7CisJCQlpZiAoZGV2LT5leHQtPmlycV9mdW5jKQogCQkJCWRldi0+ZXh0LT5pcnFfZnVuYyhkZXYsICZpc3IpOwotCQkJfQogCQkJaXNyICY9IH5kZXYtPmV4dC0+aXJxX21hc2s7CiAJCX0KIAl9CiAJaWYgKDAgIT0gKGlzciAmIChNQVNLXzI3KSkpIHsKIAkJREVCX0lOVCgoImlycTogUlBTMCAoMHglMDh4KS5cbiIsaXNyKSk7Ci0JCWlmKCAwICE9IGRldi0+dnZfZGF0YSAmJiAwICE9IGRldi0+dnZfY2FsbGJhY2spIHsKKwkJaWYgKGRldi0+dnZfZGF0YSAmJiBkZXYtPnZ2X2NhbGxiYWNrKQogCQkJZGV2LT52dl9jYWxsYmFjayhkZXYsaXNyKTsKLQkJfQogCQlpc3IgJj0gfk1BU0tfMjc7CiAJfQogCWlmICgwICE9IChpc3IgJiAoTUFTS18yOCkpKSB7Ci0JCWlmKCAwICE9IGRldi0+dnZfZGF0YSAmJiAwICE9IGRldi0+dnZfY2FsbGJhY2spIHsKKwkJaWYgKGRldi0+dnZfZGF0YSAmJiBkZXYtPnZ2X2NhbGxiYWNrKQogCQkJZGV2LT52dl9jYWxsYmFjayhkZXYsaXNyKTsKLQkJfQogCQlpc3IgJj0gfk1BU0tfMjg7CiAJfQogCWlmICgwICE9IChpc3IgJiAoTUFTS18xNnxNQVNLXzE3KSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggZjA3MDNkOC4uMTcxYWZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiAJcmVzdWx0ID0gMDsKIG91dDoKLQlpZiggZmggIT0gMCAmJiByZXN1bHQgIT0gMCApIHsKKwlpZiAoZmggJiYgcmVzdWx0ICE9IDApIHsKIAkJa2ZyZWUoZmgpOwogCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmJpLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jCmluZGV4IGMzMmRkYTkuLmJmYmQ1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92YmkuYwpAQCAtNDEzLDcgKzQxMyw2IEBACiAJCQkgICAgVjRMMl9GSUVMRF9TRVFfVEIsIC8vIEZJWE1FOiBkb2VzIHRoaXMgcmVhbGx5IHdvcms/CiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X2J1ZiksCiAJCQkgICAgZmlsZSk7Ci0JbXV0ZXhfaW5pdCgmZmgtPnZiaV9xLmxvY2spOwogCiAJaW5pdF90aW1lcigmZmgtPnZiaV9yZWFkX3RpbWVvdXQpOwogCWZoLT52YmlfcmVhZF90aW1lb3V0LmZ1bmN0aW9uID0gdmJpX3JlYWRfdGltZW91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwppbmRleCBjMzFhYjQ4Li42NmZkYmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCkBAIC0xNDE3LDggKzE0MTcsNiBAQAogCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9idWYpLAogCQkJICAgIGZpbGUpOwogCi0JbXV0ZXhfaW5pdCgmZmgtPnZpZGVvX3EubG9jayk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKaW5kZXggYzdiYmI0MC4uNTZkOGZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCkBAIC03NSw3ICs3NSwxMSBAQAogI2lmIGRlZmluZWQoZHByaW50aykKICN1bmRlZiBkcHJpbnRrCiAjZW5kaWYKLSNkZWZpbmUgZHByaW50ayBpZihidDg3OF9kZWJ1ZykgcHJpbnRrCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGJ0ODc4X2RlYnVnKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjYXJnKTsgXAorCX0gd2hpbGUgKDApCiAKIHN0YXRpYyB2b2lkIGJ0ODc4X21lbV9mcmVlKHN0cnVjdCBidDg3OCAqYnQpCiB7CkBAIC0xNTQsNyArMTU4LDcgQEAKIAl9CiAKIAlpZiAoYnQtPmxpbmVfY291bnQgPiAyNTUpIHsKLQkJcHJpbnRrKCJidDg3ODogYnVmZmVyIHNpemUgZXJyb3IhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJidDg3ODogYnVmZmVyIHNpemUgZXJyb3IhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMjg1LDcgKzI4OSw4IEBACiAKIAkJaWYgKGFzdGF0ICYgKEJUODc4X0FTQ0VSUiB8IEJUODc4X0FPQ0VSUikpIHsKIAkJCWlmIChidDg3OF92ZXJib3NlKSB7Ci0JCQkJcHJpbnRrKCJidDg3OCglZCk6IGlycSVzJXMgcmlzY19wYz0lMDh4XG4iLAorCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgImJ0ODc4KCVkKTogaXJxJXMlcyByaXNjX3BjPSUwOHhcbiIsCiAJCQkJICAgICAgIGJ0LT5uciwKIAkJCQkgICAgICAgKGFzdGF0ICYgQlQ4NzhfQVNDRVJSKSA/ICIgU0NFUlIiIDoKIAkJCQkgICAgICAgIiIsCkBAIC0yOTUsOCArMzAwLDggQEAKIAkJfQogCQlpZiAoYXN0YXQgJiAoQlQ4NzhfQVBBQk9SVCB8IEJUODc4X0FSSVBFUlIgfCBCVDg3OF9BUFBFUlIpKSB7CiAJCQlpZiAoYnQ4NzhfdmVyYm9zZSkgewotCQkJCXByaW50awotCQkJCSAgICAoImJ0ODc4KCVkKTogaXJxJXMlcyVzIHJpc2NfcGM9JTA4eFxuIiwKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAiYnQ4NzgoJWQpOiBpcnElcyVzJXMgcmlzY19wYz0lMDh4XG4iLAogCQkJCSAgICAgYnQtPm5yLAogCQkJCSAgICAgKGFzdGF0ICYgQlQ4NzhfQVBBQk9SVCkgPyAiIFBBQk9SVCIgOgogCQkJCSAgICAgIiIsCkBAIC0zMDgsOCArMzEzLDggQEAKIAkJfQogCQlpZiAoYXN0YXQgJiAoQlQ4NzhfQUZEU1IgfCBCVDg3OF9BRlRSR1QgfCBCVDg3OF9BRkJVUykpIHsKIAkJCWlmIChidDg3OF92ZXJib3NlKSB7Ci0JCQkJcHJpbnRrCi0JCQkJICAgICgiYnQ4NzgoJWQpOiBpcnElcyVzJXMgcmlzY19wYz0lMDh4XG4iLAorCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICJidDg3OCglZCk6IGlycSVzJXMlcyByaXNjX3BjPSUwOHhcbiIsCiAJCQkJICAgICBidC0+bnIsCiAJCQkJICAgICAoYXN0YXQgJiBCVDg3OF9BRkRTUikgPyAiIEZEU1IiIDogIiIsCiAJCQkJICAgICAoYXN0YXQgJiBCVDg3OF9BRlRSR1QpID8gIiBGVFJHVCIgOgpAQCAtNTEwLDcgKzUxNSw3IEBACiAqLwogCiAJaWYgKChyZXN1bHQgPSBidDg3OF9tZW1fYWxsb2MoYnQpKSkgewotCQlwcmludGsoImJ0ODc4OiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiYnQ4Nzg6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkhXG4iKTsKIAkJZ290byBmYWlsMjsKIAl9CiAKQEAgLTUzNiw3ICs1NDEsNyBAQAogCXN0cnVjdCBidDg3OCAqYnQgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKIAlpZiAoYnQ4NzhfdmVyYm9zZSkKLQkJcHJpbnRrKCJidDg3OCglZCk6IHVubG9hZGluZ1xuIiwgYnQtPm5yKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYnQ4NzgoJWQpOiB1bmxvYWRpbmdcbiIsIGJ0LT5ucik7CiAKIAkvKiB0dXJuIG9mZiBhbGwgY2FwdHVyaW5nLCBETUEgYW5kIElSUXMgKi8KIAlidGFuZCh+MHgxMywgQlQ4NzhfQUdQSU9fRE1BX0NUTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggZWQzZjgyNi4uNGM4YjYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtNzg0LDggKzc4NCw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZlZWQtPnByaXY7CiAKLQlpZiAoYnVmZmVyMiAhPSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJidWZmZXIyIG5vdCAwOiAlcC5cbiIsIGJ1ZmZlcjIpOworCWlmIChidWZmZXIyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJidWZmZXIyIG5vdCBOVUxMOiAlcC5cbiIsIGJ1ZmZlcjIpOwogCWlmIChidWZmZXIxX2xlbiA+IDMyNzY4KQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJsZW5ndGggPiAzMms6ICV6dS5cbiIsIGJ1ZmZlcjFfbGVuKTsKIAkvKiBwcmludGsoIlRTIGNhbGxiYWNrOiAldSBieXRlcywgJXUgVFMgY2VsbHMgQCAlcC5cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwppbmRleCAyMTkzNWJmLi4zMDJjYzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKQEAgLTQ3OCw5ICs0NzgsOSBAQAogCQkJCWVycigiY291bGQgbm90IHJlc3RhcnQgdGhlIFVTQiBjb250cm9sbGVyIENQVS4iKTsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJfQotCQkJa2ZyZWUocCk7CiAJCX0KIAl9CisJa2ZyZWUocCk7CiAJaWYgKGZ3KSB7CiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdHR1c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3R0dXNiMi5jCmluZGV4IDg4ZGM0MzYuLjNiOWRhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdHR1c2IyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi90dHVzYjIuYwpAQCAtMTQ0LDYgKzE0NCw3IEBACiBzdGF0aWMgc3RydWN0IHRkYTEwMDg2X2NvbmZpZyB0ZGExMDA4Nl9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDBlLAogCS5pbnZlcnQgPSAwLAorCS5kaXNlcWNfdG9uZSA9IDEsCiB9OwogCiBzdGF0aWMgaW50IHR0dXNiMl9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTEzMi5jCmluZGV4IDFkMmQyOGMuLjhmZmI4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuYwpAQCAtOTEsNyArOTEsNyBAQAogICAgTGVzcyBjb2RlIGFuZCBtb3JlIGVmZmljaWVudCB0aGF0IGxvYWRpbmcgYSBidWZmZXIgb24gdGhlIHN0YWNrIHdpdGgKICAgIHRoZSBieXRlcyB0byBzZW5kIGFuZCB0aGVuIGNhbGxpbmcgb3I1MTEzMl93cml0ZWJ1ZigpIG9uIHRoYXQuICovCiAjZGVmaW5lIG9yNTExMzJfd3JpdGVieXRlcyhzdGF0ZSwgZGF0YS4uLikgIFwKLQkoeyBjb25zdCBzdGF0aWMgdTggX2RhdGFbXSA9IHtkYXRhfTsgXAorCSh7IHN0YXRpYyBjb25zdCB1OCBfZGF0YVtdID0ge2RhdGF9OyBcCiAJb3I1MTEzMl93cml0ZWJ1ZihzdGF0ZSwgX2RhdGEsIHNpemVvZihfZGF0YSkpOyB9KQogCiAvKiBSZWFkIGRhdGEgZnJvbSBkZW1vZCBpbnRvIGJ1ZmZlci4gIFJldHVybnMgMCBvbiBzdWNjZXNzLiAqLwpAQCAtMTMyLDcgKzEzMiw3IEBACiBzdGF0aWMgaW50IG9yNTExMzJfbG9hZF9maXJtd2FyZSAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7CiAJc3RydWN0IG9yNTExMzJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JY29uc3Qgc3RhdGljIHU4IHJ1bl9idWZbXSA9IHsweDdGLDB4MDF9OworCXN0YXRpYyBjb25zdCB1OCBydW5fYnVmW10gPSB7MHg3RiwweDAxfTsKIAl1OCByZWNfYnVmWzhdOwogCXUzMiBmaXJtd2FyZUFzaXplLCBmaXJtd2FyZUJzaXplOwogCWludCBpLHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jCmluZGV4IDgxOTQzMzQuLjFhNGQ4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJCQlzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZTMpIHwgMHgxMTAwKTsKIAllbHNlCiAJCXJldHVybiBzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweGUzLAotCQkJczVoMTQwOV9yZWFkcmVnKHN0YXRlLCAweGUzKSAmIDB4ZWVmZik7CisJCQlzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZTMpICYgMHhmZWZmKTsKIH0KIAogc3RhdGljIGludCBzNWgxNDA5X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwODYuYwppbmRleCA5ZDI2YWNlNi4uMGQyYjY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmMKQEAgLTEwNiw5ICsxMDYsMTIgQEAKIHN0YXRpYyBpbnQgdGRhMTAwODZfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKIHsKIAlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggdDIya19vZmYgPSAweDgwOwogCiAJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCisJaWYgKHN0YXRlLT5jb25maWctPmRpc2VxY190b25lKQorCQl0MjJrX29mZiA9IDA7CiAJLy8gcmVzZXQKIAl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDAwLCAweDAwKTsKIAltc2xlZXAoMTApOwpAQCAtMTU4LDcgKzE2MSw3IEBACiAJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzZCwgMHg4MCk7CiAKIAkvLyBzZXR1cCBTRUMKLQl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM2LCAweDgwKTsgLy8gYWxsIFNFQyBvZmYsIG5vIDIyayB0b25lCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzNiwgdDIya19vZmYpOyAvLyBhbGwgU0VDIG9mZiwgMjJrIHRvbmUKIAl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM0LCAoKCgxPDwxOSkgKiAoMjIwMDAvMTAwMCkpIC8gKFNBQ0xLLzEwMDApKSk7ICAgICAgLy8gfSB0b25lIGZyZXF1ZW5jeQogCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzUsICgoKDE8PDE5KSAqICgyMjAwMC8xMDAwKSkgLyAoU0FDTEsvMTAwMCkpID4+IDgpOyAvLyB9CiAKQEAgLTE4MCwxNiArMTgzLDIwIEBACiBzdGF0aWMgaW50IHRkYTEwMDg2X3NldF90b25lIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCiB7CiAJc3RydWN0IHRkYTEwMDg2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHQyMmtfb2ZmID0gMHg4MDsKIAogCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAorCWlmIChzdGF0ZS0+Y29uZmlnLT5kaXNlcWNfdG9uZSkKKwkJdDIya19vZmYgPSAwOworCiAJc3dpdGNoICh0b25lKSB7CiAJY2FzZSBTRUNfVE9ORV9PRkY6Ci0JCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIDB4ODApOworCQl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM2LCB0MjJrX29mZik7CiAJCWJyZWFrOwogCiAJY2FzZSBTRUNfVE9ORV9PTjoKLQkJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzNiwgMHg4MSk7CisJCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIDB4MDEgKyB0MjJrX29mZik7CiAJCWJyZWFrOwogCX0KIApAQCAtMjAyLDkgKzIwOSwxMyBAQAogCXN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaTsKIAl1OCBvbGR2YWw7CisJdTggdDIya19vZmYgPSAweDgwOwogCiAJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCisJaWYgKHN0YXRlLT5jb25maWctPmRpc2VxY190b25lKQorCQl0MjJrX29mZiA9IDA7CisKIAlpZiAoY21kLT5tc2dfbGVuID4gNikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJb2xkdmFsID0gdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDM2KTsKQEAgLTIxMiw3ICsyMjMsOCBAQAogCWZvcihpPTA7IGk8IGNtZC0+bXNnX2xlbjsgaSsrKSB7CiAJCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4NDgraSwgY21kLT5tc2dbaV0pOwogCX0KLQl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM2LCAweDg4IHwgKChjbWQtPm1zZ19sZW4gLSAxKSA8PCA0KSk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzNiwgKDB4MDggKyB0MjJrX29mZikKKwkJCQkJfCAoKGNtZC0+bXNnX2xlbiAtIDEpIDw8IDQpKTsKIAogCXRkYTEwMDg2X2Rpc2VxY193YWl0KHN0YXRlKTsKIApAQCAtMjI1LDE2ICsyMzcsMjAgQEAKIHsKIAlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggb2xkdmFsID0gdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDM2KTsKKwl1OCB0MjJrX29mZiA9IDB4ODA7CiAKIAlkcHJpbnRrICgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKKwlpZiAoc3RhdGUtPmNvbmZpZy0+ZGlzZXFjX3RvbmUpCisJCXQyMmtfb2ZmID0gMDsKKwogCXN3aXRjaChtaW5pY21kKSB7CiAJY2FzZSBTRUNfTUlOSV9BOgotCQl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM2LCAweDg0KTsKKwkJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzNiwgMHgwNCArIHQyMmtfb2ZmKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNFQ19NSU5JX0I6Ci0JCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIDB4ODYpOworCQl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM2LCAweDA2ICsgdDIya19vZmYpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA4Ni5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmgKaW5kZXggZWQ1ODRhOC4uZWVjZWFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDg2LmgKQEAgLTMzLDYgKzMzLDkgQEAKIAogCS8qIGRvZXMgdGhlICJpbnZlcnNpb24iIG5lZWQgaW52ZXJ0ZWQ/ICovCiAJdTggaW52ZXJ0OworCisJLyogZG8gd2UgbmVlZCB0aGUgZGlzZXFjIHNpZ25hbCB3aXRoIGNhcnJpZXI/ICovCisJdTggZGlzZXFjX3RvbmU7CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDg2KSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDg2X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTE4MjcxLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTE4MjcxLWNvbW1vbi5jCmluZGV4IGNlYmI2YjkuLmJjYTU3MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExODI3MS1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTgyNzEtY29tbW9uLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWlmIChyZXQgIT0gMikKIAkJdGRhX2VycigiRVJST1I6IGkyY190cmFuc2ZlciByZXR1cm5lZDogJWRcbiIsIHJldCk7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IFREQTE4MjcxX05VTV9SRUdTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVERBMTgyNzFfTlVNX1JFR1M7IGkrKykgewogCQkvKiBkb24ndCB1cGRhdGUgd3JpdGUtb25seSByZWdpc3RlcnMgKi8KIAkJaWYgKChpICE9IFJfRUI5KSAgJiYKIAkJICAgIChpICE9IFJfRUIxNikgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy94YzUwMDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy94YzUwMDAuaAppbmRleCBlMGU4NDU2Li4zMmE1ZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMveGM1MDAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3hjNTAwMC5oCkBAIC00NSw3ICs0NSw4IEBACiAvKiB4YzUwMDAgY2FsbGJhY2sgY29tbWFuZCAqLwogI2RlZmluZSBYQzUwMDBfVFVORVJfUkVTRVQJCTAKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9YQzUwMDApIHx8IGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9YQzUwMDBfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9YQzUwMDApIHx8IFwKKyAgICAoZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX1hDNTAwMF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB4YzUwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAogCQkJCQkgIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwppbmRleCBhZWY2ZTM2Li4zZTZiNjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwpAQCAtOTY2LDYgKzk2Niw3IEBACiBzdGF0aWMgaW50IHBsYXlfaWZyYW1lKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgY2hhciBfX3VzZXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwgaW50IG5vbmJsb2NrKQogewogCWludCBpLCBuOworCWludCBwcm9ncmVzc2l2ZSA9IDA7CiAKIAlkcHJpbnRrKDIsICJhdjcxMTA6JXAsIFxuIiwgYXY3MTEwKTsKIApAQCAtOTc0LDYgKzk3NSwxNCBAQAogCQkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gNTsgaSsrKSB7CisJCS8qIGdldCBwcm9ncmVzc2l2ZSBmbGFnIGZyb20gcGljdHVyZSBleHRlbnNpb24gKi8KKwkJaWYgKGJ1ZltpXSA9PSAweDAwICYmIGJ1ZltpKzFdID09IDB4MDAgJiYKKwkJICAgIGJ1ZltpKzJdID09IDB4MDEgJiYgKHVuc2lnbmVkIGNoYXIpYnVmW2krM10gPT0gMHhiNSAmJgorCQkgICAgKGJ1ZltpKzRdICYgMHhmMCkgPT0gMHgxMCkKKwkJCXByb2dyZXNzaXZlID0gYnVmW2krNV0gJiAweDA4OworCX0KKwogCS8qIHNldHRpbmcgbiBhbHdheXMgPiAxLCBmaXhlcyBwcm9ibGVtcyB3aGVuIHBsYXlpbmcgc3RpbGxmcmFtZXMKIAkgICBjb25zaXN0aW5nIG9mIEktIGFuZCBQLUZyYW1lcyAqLwogCW4gPSBNSU5fSUZSQU1FIC8gbGVuICsgMTsKQEAgLTk4NSw3ICs5OTQsMTEgQEAKIAkJZHZiX3BsYXkoYXY3MTEwLCBidWYsIGxlbiwgMCwgMSk7CiAKIAlhdjcxMTBfaXBhY2tfZmx1c2goJmF2NzExMC0+aXBhY2tbMV0pOwotCXJldHVybiAwOworCisJaWYgKHByb2dyZXNzaXZlKQorCQlyZXR1cm4gdmlkY29tKGF2NzExMCwgQVZfVklERU9fQ01EX0ZSRUVaRSwgMSk7CisJZWxzZQorCQlyZXR1cm4gMDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCmluZGV4IDM0MzljOTguLjJkNjRkNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCkBAIC04OTYsNiArODk2LDcgQEAKICNkZWZpbmUgU1VCSURfRFZCU19DSU5FUkdZMTIwMAkJMHgxMTU0CiAjZGVmaW5lIFNVQklEX0RWQlNfQ1lORVJHWTEyMDBOIAkweDExNTUKICNkZWZpbmUgU1VCSURfRFZCU19UVl9TVEFSCQkweDAwMTQKKyNkZWZpbmUgU1VCSURfRFZCU19UVl9TVEFSX1BMVVNfWDQJMHgwMDE1CiAjZGVmaW5lIFNVQklEX0RWQlNfVFZfU1RBUl9DSQkJMHgwMDE2CiAjZGVmaW5lIFNVQklEX0RWQlNfRUFTWVdBVENIXzEgIAkweDAwMWEKICNkZWZpbmUgU1VCSURfRFZCU19FQVNZV0FUQ0hfMiAgCTB4MDAxYgpAQCAtOTEwLDYgKzkxMSw3IEBACiAjZGVmaW5lIFNVQklEX0RWQkNfQ0lORVJHWTEyMDAJCTB4MTE1NgogI2RlZmluZSBTVUJJRF9EVkJDX0NJTkVSR1kxMjAwX01LMwkweDExNzYKIAorI2RlZmluZSBTVUJJRF9EVkJUX0VBU1lXQVRDSAkJMHgwMDNhCiAjZGVmaW5lIFNVQklEX0RWQlRfS05DMV9QTFVTCQkweDAwMzEKICNkZWZpbmUgU1VCSURfRFZCVF9LTkMxCQkJMHgwMDMwCiAjZGVmaW5lIFNVQklEX0RWQlRfQ0lORVJHWTEyMDAJCTB4MTE1NwpAQCAtOTU3LDYgKzk1OSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTVUJJRF9EVkJTX1RWX1NUQVI6CisJY2FzZSBTVUJJRF9EVkJTX1RWX1NUQVJfUExVU19YNDoKIAljYXNlIFNVQklEX0RWQlNfVFZfU1RBUl9DSToKIAljYXNlIFNVQklEX0RWQlNfQ1lORVJHWTEyMDBOOgogCWNhc2UgU1VCSURfRFZCU19FQVNZV0FUQ0g6CkBAIC0xMDE4LDYgKzEwMjEsNyBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBTVUJJRF9EVkJUX0VBU1lXQVRDSDoKIAljYXNlIFNVQklEX0RWQlRfS05DMToKIAljYXNlIFNVQklEX0RWQlRfS05DMV9QTFVTOgogCWNhc2UgU1VCSURfRFZCVF9DSU5FUkdZMTIwMDoKQEAgLTEyNDgsNyArMTI1Miw5IEBACiBNQUtFX0JVREdFVF9JTkZPKHNhdGV3cHMsICJTYXRlbGNvIEVhc3lXYXRjaCBEVkItUyIsIEJVREdFVF9LTkMxUyk7CiBNQUtFX0JVREdFVF9JTkZPKHNhdGV3cGxjLCAiU2F0ZWxjbyBFYXN5V2F0Y2ggRFZCLUMiLCBCVURHRVRfS05DMUNQKTsKIE1BS0VfQlVER0VUX0lORk8oc2F0ZXdjbWszLCAiU2F0ZWxjbyBFYXN5V2F0Y2ggRFZCLUMgTUszIiwgQlVER0VUX0tOQzFDX01LMyk7CitNQUtFX0JVREdFVF9JTkZPKHNhdGV3dCwgIlNhdGVsY28gRWFzeVdhdGNoIERWQi1UIiwgQlVER0VUX0tOQzFUKTsKIE1BS0VfQlVER0VUX0lORk8oa25jMXNwLCAiS05DMSBEVkItUyBQbHVzIiwgQlVER0VUX0tOQzFTUCk7CitNQUtFX0JVREdFVF9JTkZPKGtuYzFzcHg0LCAiS05DMSBEVkItUyBQbHVzIFg0IiwgQlVER0VUX0tOQzFTUCk7CiBNQUtFX0JVREdFVF9JTkZPKGtuYzFjcCwgIktOQzEgRFZCLUMgUGx1cyIsIEJVREdFVF9LTkMxQ1ApOwogTUFLRV9CVURHRVRfSU5GTyhrbmMxY21rMywgIktOQzEgRFZCLUMgTUszIiwgQlVER0VUX0tOQzFDX01LMyk7CiBNQUtFX0JVREdFVF9JTkZPKGtuYzFjcG1rMywgIktOQzEgRFZCLUMgUGx1cyBNSzMiLCBCVURHRVRfS05DMUNQX01LMyk7CkBAIC0xMjY2LDEyICsxMjcyLDE0IEBACiAJTUFLRV9FWFRFTlNJT05fUENJKGtuYzFzcCwgMHgxMTMxLCAweDAwMTEpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmMxc3AsIDB4MTg5NCwgMHgwMDExKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jeHMsIDB4MTg5NCwgMHgwMDE0KSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXNweDQsIDB4MTg5NCwgMHgwMDE1KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jeHMsIDB4MTg5NCwgMHgwMDE2KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koc2F0ZXdwbHMsIDB4MTg5NCwgMHgwMDFlKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koc2F0ZXdwbHMxLCAweDE4OTQsIDB4MDAxYSksCiAJTUFLRV9FWFRFTlNJT05fUENJKHNhdGV3cHMsIDB4MTg5NCwgMHgwMDFiKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koc2F0ZXdwbGMsIDB4MTg5NCwgMHgwMDJhKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koc2F0ZXdjbWszLCAweDE4OTQsIDB4MDAyYyksCisJTUFLRV9FWFRFTlNJT05fUENJKHNhdGV3dCwgMHgxODk0LCAweDAwM2EpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmMxYywgMHgxODk0LCAweDAwMjApLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmMxY3AsIDB4MTg5NCwgMHgwMDIxKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMWNtazMsIDB4MTg5NCwgMHgwMDIyKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggOTI2OGE4Mi4uMTRiMDBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTM1MSw2ICszNTEsNyBAQAogc3RhdGljIHN0cnVjdCB0ZGExMDA4Nl9jb25maWcgdGRhMTAwODZfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKIAkuaW52ZXJ0ID0gMCwKKwkuZGlzZXFjX3RvbmUgPSAxLAogfTsKIAogc3RhdGljIHU4IHJlYWRfcHdtKHN0cnVjdCBidWRnZXQqIGJ1ZGdldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCA4ZDUyMTRmLi4xYjQxYjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC00LDEyICs0LDEyIEBACiAKIG1lbnVjb25maWcgUkFESU9fQURBUFRFUlMKIAlib29sICJSYWRpbyBBZGFwdGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFVgorCWRlcGVuZHMgb24gVklERU9fVjRMMgogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHNlbGVjdGluZyBBTS9GTSByYWRpbyBhZGFwdGVycy4KIAotaWYgUkFESU9fQURBUFRFUlMgJiYgVklERU9fREVWCitpZiBSQURJT19BREFQVEVSUyAmJiBWSURFT19WNEwyCiAKIGNvbmZpZyBSQURJT19DQURFVAogCXRyaXN0YXRlICJBRFMgQ2FkZXQgQU0vRk0gVHVuZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCmluZGV4IGYwYTY3ZTkuLmM2OWJkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgkvKiBMb2NrIGZvciB0aGUgSS9PIAkJKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4JLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPCSovCiAjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKaW5kZXggMzRlMzE3Yy4uNTdiOWUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwpAQCAtNTg3LDYgKzU4Nyw4IEBACiAJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAogfTsKIAorI2lmZGVmIENPTkZJR19QTlAKKwogc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIGNhZGV0X3BucF9kZXZpY2VzW10gPSB7CiAJLyogQURTIENhZGV0IEFNL0ZNIFJhZGlvIENhcmQgKi8KIAl7LmlkID0gIk1TTTBjMjQiLCAuZHJpdmVyX2RhdGEgPSAwfSwKQEAgLTYyMSw2ICs2MjMsMTAgQEAKIAkucmVtb3ZlCQk9IE5VTEwsCiB9OwogCisjZWxzZQorc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGNhZGV0X3BucF9kcml2ZXI7CisjZW5kaWYKKwogc3RhdGljIGludCBjYWRldF9wcm9iZSh2b2lkKQogewogCXN0YXRpYyBpbnQgaW92YWxzWzhdPXsweDMzMCwweDMzMiwweDMzNCwweDMzNiwweDMzOCwweDMzYSwweDMzYywweDMzZX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCmluZGV4IDMxMThiZGEuLjUzZTExNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAl9CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInJhZGlvLXNmMTZmbWkiKSkgewogCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbWk6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCmluZGV4IGY3YzhiMDAuLmViYzVmYmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCkBAIC00NzAsOSArNDcwLDggQEAKIAogCW11dGV4X2luaXQoJmxvY2spOwogCi0JaWYgKHJlcXVlc3RfcmVnaW9uKGlvLCAyLCAic2YxNmZtcjIiKSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiZm1yMjogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInNmMTZmbXIyIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1zZjE2Zm1yMjogcmVxdWVzdF9yZWdpb24gZmFpbGVkIVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwppbmRleCA4ZTRiZDQ3Li42NDlmMTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKQEAgLTYyLDYgKzYyLDI5IEBACiAgKgkJLSBjb2RlIGNsZWFuZWQgb2YgdW5uZWNlc3NhcnkgcmRzX2NvbW1hbmRzCiAgKgkJLSBVU0IgVmVuZG9yL1Byb2R1Y3QgSUQgZm9yIEFEUy9UZWNoIEZNIFJhZGlvIFJlY2VpdmVyIHZlcmlmaWVkCiAgKgkJICAodGhhbmtzIHRvIEd1aWxsYXVtZSBSQU1PVVNTRSkKKyAqIDIwMDgtMDEtMjcJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICoJCVZlcnNpb24gMS4wLjUKKyAqCQktIG51bWJlciBvZiBzZWVrX3JldHJpZXMgY2hhbmdlZCB0byB0dW5lX3RpbWVvdXQKKyAqCQktIGZpeGVkIHByb2JsZW0gd2l0aCBpbmNvbXBsZXRlIHR1bmUgb3BlcmF0aW9ucyBieSBvd24gYnVmZmVycworICoJCS0gb3B0aW1pemF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgcHJpbnRmIHR5cGVzCisgKgkJLSBpbXByb3ZlZCBlcnJvciBsb2dnaW5nCisgKiAyMDA4LTAxLTMxCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqCQlPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm9yZz4KKyAqCQlWZXJzaW9uIDEuMC42CisgKgkJLSBmaXhlZCBjb3Zlcml0eSBjaGVja2VyIHdhcm5pbmdzIGluICpfdXNiX2RyaXZlcl9kaXNjb25uZWN0CisgKgkJLSBwcm9iZSgpL29wZW4oKSByYWNlIGJ5IGNvcnJlY3Qgb3JkZXJpbmcgaW4gcHJvYmUoKQorICoJCS0gRE1BIGNvaGVyZW5jeSBydWxlcyBieSBzZXBhcmF0ZSBhbGxvY2F0aW9uIG9mIGFsbCBidWZmZXJzCisgKgkJLSB1c2Ugb2YgZW5kaWFubmVzcyBtYWNyb3MKKyAqCQktIGFidXNlIG9mIHNwaW5sb2NrLCByZXBsYWNlZCBieSBtdXRleAorICoJCS0gcmFjeSBoYW5kbGluZyBvZiB0aW1lciBpbiBkaXNjb25uZWN0LAorICoJCSAgcmVwbGFjZWQgYnkgZGVsYXllZF93b3JrCisgKgkJLSByYWN5IGludGVycnVwdGlibGVfc2xlZXBfb24oKSwKKyAqCQkgIHJlcGxhY2VkIHdpdGggd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkKKyAqCQktIGhhbmRsZSBzaWduYWxzIGluIHJlYWQoKQorICogMjAwOC0wMi0wOAlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKgkJT2xpdmVyIE5ldWt1bSA8b2xpdmVyQG5ldWt1bS5vcmc+CisgKgkJVmVyc2lvbiAxLjAuNworICoJCS0gdXNiIGF1dG9zdXNwZW5kIHN1cHBvcnQKICAqCiAgKiBUb0RvOgogICogLSBhZGQgc2Vla2luZyBzdXBwb3J0CkBAIC03NCw5ICs5NywxMCBAQAogLyogZHJpdmVyIGRlZmluaXRpb25zICovCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4iCiAjZGVmaW5lIERSSVZFUl9OQU1FICJyYWRpby1zaTQ3MHgiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDQpCisjZGVmaW5lIERSSVZFUl9LRVJORUxfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigxLCAwLCA2KQogI2RlZmluZSBEUklWRVJfQ0FSRCAiU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlciIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiByYWRpbyBkcml2ZXIgZm9yIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAuNiIKIAogCiAvKiBrZXJuZWwgaW5jbHVkZXMgKi8KQEAgLTg5LDggKzExMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvcmRzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAKIC8qIFVTQiBEZXZpY2UgSUQgTGlzdCAqLwpAQCAtMTE5LDU2ICsxNDUsNTYgQEAKIC8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLwogLyogMTogMTAwIGtIeiAoRXVyb3BlLCBKYXBhbikgKi8KIC8qIDI6ICA1MCBrSHogKi8KLXN0YXRpYyBpbnQgc3BhY2UgPSAyOwotbW9kdWxlX3BhcmFtKHNwYWNlLCBpbnQsIDApOworc3RhdGljIHVuc2lnbmVkIHNob3J0IHNwYWNlID0gMjsKK21vZHVsZV9wYXJhbShzcGFjZSwgdXNob3J0LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJTcGFjaW5nOiAwPTIwMGtIeiAxPTEwMGtIeiAqMj01MGtIeioiKTsKIAogLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KIC8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSkqLwogLyogMTogNzYgICAtIDEwOCBNSHogKEphcGFuIHdpZGUgYmFuZCkgKi8KIC8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KLXN0YXRpYyBpbnQgYmFuZCA9IDE7Ci1tb2R1bGVfcGFyYW0oYmFuZCwgaW50LCAwKTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBiYW5kID0gMTsKK21vZHVsZV9wYXJhbShiYW5kLCB1c2hvcnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIkJhbmQ6IDA9ODcuNS4uMTA4TUh6ICoxPTc2Li4xMDhNSHoqIDI9NzYuLjkwTUh6Iik7CiAKIC8qIERlLWVtcGhhc2lzICovCiAvKiAwOiA3NSB1cyAoVVNBKSAqLwogLyogMTogNTAgdXMgKEV1cm9wZSwgQXVzdHJhbGlhLCBKYXBhbikgKi8KLXN0YXRpYyBpbnQgZGUgPSAxOwotbW9kdWxlX3BhcmFtKGRlLCBpbnQsIDApOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlID0gMTsKK21vZHVsZV9wYXJhbShkZSwgdXNob3J0LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJEZS1lbXBoYXNpczogMD03NXVzICoxPTUwdXMqIik7CiAKIC8qIFVTQiB0aW1lb3V0ICovCi1zdGF0aWMgaW50IHVzYl90aW1lb3V0ID0gNTAwOwotbW9kdWxlX3BhcmFtKHVzYl90aW1lb3V0LCBpbnQsIDApOworc3RhdGljIHVuc2lnbmVkIGludCB1c2JfdGltZW91dCA9IDUwMDsKK21vZHVsZV9wYXJhbSh1c2JfdGltZW91dCwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVzYl90aW1lb3V0LCAiVVNCIHRpbWVvdXQgKG1zKTogKjUwMCoiKTsKIAotLyogU2VlayByZXRyaWVzICovCi1zdGF0aWMgaW50IHNlZWtfcmV0cmllcyA9IDEwMDsKLW1vZHVsZV9wYXJhbShzZWVrX3JldHJpZXMsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNlZWtfcmV0cmllcywgIlNlZWsgcmV0cmllczogKjEwMCoiKTsKKy8qIFR1bmUgdGltZW91dCAqLworc3RhdGljIHVuc2lnbmVkIGludCB0dW5lX3RpbWVvdXQgPSAzMDAwOworbW9kdWxlX3BhcmFtKHR1bmVfdGltZW91dCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHR1bmVfdGltZW91dCwgIlR1bmUgdGltZW91dDogKjMwMDAqIik7CiAKIC8qIFJEUyBidWZmZXIgYmxvY2tzICovCi1zdGF0aWMgaW50IHJkc19idWYgPSAxMDA7Ci1tb2R1bGVfcGFyYW0ocmRzX2J1ZiwgaW50LCAwKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX2J1ZiA9IDEwMDsKK21vZHVsZV9wYXJhbShyZHNfYnVmLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocmRzX2J1ZiwgIlJEUyBidWZmZXIgZW50cmllczogKjEwMCoiKTsKIAogLyogUkRTIG1heGltdW0gYmxvY2sgZXJyb3JzICovCi1zdGF0aWMgaW50IG1heF9yZHNfZXJyb3JzID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXhfcmRzX2Vycm9ycyA9IDE7CiAvKiAwIG1lYW5zICAgMCAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICovCiAvKiAxIG1lYW5zIDEtMiAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICh1c2VkIGJ5IG9yaWdpbmFsIFVTQlJhZGlvLmV4ZSkgKi8KIC8qIDIgbWVhbnMgMy01ICBlcnJvcnMgcmVxdWlyaW5nIGNvcnJlY3Rpb24gKi8KIC8qIDMgbWVhbnMgICA2KyBlcnJvcnMgb3IgZXJyb3JzIGluIGNoZWNrd29yZCwgY29ycmVjdGlvbiBub3QgcG9zc2libGUgKi8KLW1vZHVsZV9wYXJhbShtYXhfcmRzX2Vycm9ycywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShtYXhfcmRzX2Vycm9ycywgdXNob3J0LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3Jkc19lcnJvcnMsICJSRFMgbWF4aW11bSBibG9jayBlcnJvcnM6ICoxKiIpOwogCiAvKiBSRFMgcG9sbCBmcmVxdWVuY3kgKi8KLXN0YXRpYyBpbnQgcmRzX3BvbGxfdGltZSA9IDQwOworc3RhdGljIHVuc2lnbmVkIGludCByZHNfcG9sbF90aW1lID0gNDA7CiAvKiA0MCBpcyB1c2VkIGJ5IHRoZSBvcmlnaW5hbCBVU0JSYWRpby5leGUgKi8KIC8qIDUwIGlzIHVzZWQgYnkgcmFkaW8tY2FkZXQgKi8KIC8qIDc1IHNob3VsZCBiZSBva2F5ICovCiAvKiA4MCBpcyB0aGUgdXN1YWwgUkRTIHJlY2VpdmUgaW50ZXJ2YWwgKi8KLW1vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHJkc19wb2xsX3RpbWUsIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhyZHNfcG9sbF90aW1lLCAiUkRTIHBvbGwgdGltZSAobXMpOiAqNDAqIik7CiAKIApAQCAtMzkzLDIyICs0MTksMTkgQEAKIHN0cnVjdCBzaTQ3MHhfZGV2aWNlIHsKIAkvKiByZWZlcmVuY2UgdG8gVVNCIGFuZCB2aWRlbyBkZXZpY2UgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2OwogCi0JLyogYXJlIHRoZXNlIHJlYWxseSBuZWNlc3NhcnkgPyAqLwotCWludCB1c2VyczsKLQotCS8qIHJlcG9ydCBidWZmZXIgKG1heGltdW0gNjQgYnl0ZXMpICovCi0JdW5zaWduZWQgY2hhciBidWZbNjRdOworCS8qIGRyaXZlciBtYW5hZ2VtZW50ICovCisJdW5zaWduZWQgaW50IHVzZXJzOwogCiAJLyogU2lsYWJzIGludGVybmFsIHJlZ2lzdGVycyAoMC4uMTUpICovCiAJdW5zaWduZWQgc2hvcnQgcmVnaXN0ZXJzW1JBRElPX1JFR0lTVEVSX05VTV07CiAKIAkvKiBSRFMgcmVjZWl2ZSBidWZmZXIgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF9xdWV1ZTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQlzcGlubG9ja190IGxvY2s7CQkvKiBidWZmZXIgbG9ja2luZyAqLworCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogYnVmZmVyIGxvY2tpbmcgKi8KIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CQkvKiBzaXplIGlzIGFsd2F5cyBtdWx0aXBsZSBvZiB0aHJlZSAqLwogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcmRfaW5kZXg7CkBAIC00MzQsMjggKzQ1Nyw0NiBAQAogLyoKICAqIHNpNDcweF9nZXRfcmVwb3J0IC0gcmVjZWl2ZSBhIEhJRCByZXBvcnQKICAqLwotc3RhdGljIGludCBzaTQ3MHhfZ2V0X3JlcG9ydChzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIGludCBzaXplKQorc3RhdGljIGludCBzaTQ3MHhfZ2V0X3JlcG9ydChzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7Ci0JcmV0dXJuIHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LAorCXVuc2lnbmVkIGNoYXIgKnJlcG9ydCA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZjsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsCiAJCXVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKIAkJSElEX1JFUV9HRVRfUkVQT1JULAogCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAotCQlyYWRpby0+YnVmWzBdLCAyLAotCQlyYWRpby0+YnVmLCBzaXplLCB1c2JfdGltZW91dCk7CisJCXJlcG9ydFswXSwgMiwKKwkJYnVmLCBzaXplLCB1c2JfdGltZW91dCk7CisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCSI6IHNpNDcweF9nZXRfcmVwb3J0OiB1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCisJCQlyZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKIH0KIAogCiAvKgogICogc2k0NzB4X3NldF9yZXBvcnQgLSBzZW5kIGEgSElEIHJlcG9ydAogICovCi1zdGF0aWMgaW50IHNpNDcweF9zZXRfcmVwb3J0KHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgaW50IHNpemUpCitzdGF0aWMgaW50IHNpNDcweF9zZXRfcmVwb3J0KHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKIHsKLQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsCisJdW5zaWduZWQgY2hhciAqcmVwb3J0ID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwKIAkJdXNiX3NuZGN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAogCQlISURfUkVRX1NFVF9SRVBPUlQsCiAJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAotCQlyYWRpby0+YnVmWzBdLCAyLAotCQlyYWRpby0+YnVmLCBzaXplLCB1c2JfdGltZW91dCk7CisJCXJlcG9ydFswXSwgMiwKKwkJYnVmLCBzaXplLCB1c2JfdGltZW91dCk7CisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCSI6IHNpNDcweF9zZXRfcmVwb3J0OiB1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCisJCQlyZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC00NjQsMTMgKzUwNSwxNiBAQAogICovCiBzdGF0aWMgaW50IHNpNDcweF9nZXRfcmVnaXN0ZXIoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCBpbnQgcmVnbnIpCiB7CisJdW5zaWduZWQgY2hhciBidWZbUkVHSVNURVJfUkVQT1JUX1NJWkVdOwogCWludCByZXR2YWw7CiAKLQlyYWRpby0+YnVmWzBdID0gUkVHSVNURVJfUkVQT1JUKHJlZ25yKTsKKwlidWZbMF0gPSBSRUdJU1RFUl9SRVBPUlQocmVnbnIpOwogCi0JcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sIFJFR0lTVEVSX1JFUE9SVF9TSVpFKTsKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCiAJaWYgKHJldHZhbCA+PSAwKQotCQlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9IChyYWRpby0+YnVmWzFdIDw8IDgpIHwgcmFkaW8tPmJ1ZlsyXTsKKwkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKAorCQkJKHVuc2lnbmVkIHNob3J0ICopICZidWZbMV0pKTsKIAogCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKIH0KQEAgLTQ4MSwxMyArNTI1LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgc2k0NzB4X3NldF9yZWdpc3RlcihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIGludCByZWducikKIHsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltSRUdJU1RFUl9SRVBPUlRfU0laRV07CiAJaW50IHJldHZhbDsKIAotCXJhZGlvLT5idWZbMF0gPSBSRUdJU1RFUl9SRVBPUlQocmVnbnIpOwotCXJhZGlvLT5idWZbMV0gPSAocmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gJiAweGZmMDApID4+IDg7Ci0JcmFkaW8tPmJ1ZlsyXSA9IChyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSAmIDB4MDBmZik7CisJYnVmWzBdID0gUkVHSVNURVJfUkVQT1JUKHJlZ25yKTsKKwlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTE2KHJhZGlvLT5yZWdpc3RlcnNbcmVnbnJdKSwKKwkJKHVuc2lnbmVkIHNob3J0ICopICZidWZbMV0pOwogCi0JcmV0dmFsID0gc2k0NzB4X3NldF9yZXBvcnQocmFkaW8sIFJFR0lTVEVSX1JFUE9SVF9TSVpFKTsKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAJcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOwogfQpAQCAtNDk4LDE4ICs1NDMsMTkgQEAKICAqLwogc3RhdGljIGludCBzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQogeworCXVuc2lnbmVkIGNoYXIgYnVmW0VOVElSRV9SRVBPUlRfU0laRV07CiAJaW50IHJldHZhbDsKLQlpbnQgcmVnbnI7CisJdW5zaWduZWQgY2hhciByZWducjsKIAotCXJhZGlvLT5idWZbMF0gPSBFTlRJUkVfUkVQT1JUOworCWJ1ZlswXSA9IEVOVElSRV9SRVBPUlQ7CiAKLQlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgRU5USVJFX1JFUE9SVF9TSVpFKTsKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAJaWYgKHJldHZhbCA+PSAwKQogCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSQURJT19SRUdJU1RFUl9OVU07IHJlZ25yKyspCi0JCQlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9Ci0JCQkocmFkaW8tPmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSA8PCA4KSB8Ci0JCQkgcmFkaW8tPmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAyXTsKKwkJCXJhZGlvLT5yZWdpc3RlcnNbcmVnbnJdID0gYmUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgKKwkJCQkodW5zaWduZWQgc2hvcnQgKikKKwkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKSk7CiAKIAlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7CiB9CkBAIC01MjAsMjEgKzU2NiwyOCBAQAogICovCiBzdGF0aWMgaW50IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCiB7CisJdW5zaWduZWQgY2hhciBidWZbUkRTX1JFUE9SVF9TSVpFXTsKIAlpbnQgcmV0dmFsOwotCWludCByZWducjsKIAlpbnQgc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIHJlZ25yOwogCi0JcmFkaW8tPmJ1ZlswXSA9IFJEU19SRVBPUlQ7CisJYnVmWzBdID0gUkRTX1JFUE9SVDsKIAogCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKHJhZGlvLT51c2JkZXYsCi0JCXVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAxKSwKLQkJcmFkaW8tPmJ1ZiwgUkRTX1JFUE9SVF9TSVpFLCAmc2l6ZSwgdXNiX3RpbWVvdXQpOworCQl1c2JfcmN2aW50cGlwZShyYWRpby0+dXNiZGV2LCAxKSwKKwkJKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZiksICZzaXplLCB1c2JfdGltZW91dCk7CisJaWYgKHNpemUgIT0gc2l6ZW9mKGJ1ZikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXI6ICIKKwkJCSJyZXR1cm4gc2l6ZSBkaWZmZXJzOiAlZCAhPSAlenVcbiIsIHNpemUsIHNpemVvZihidWYpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKKwkJCSJ1c2JfaW50ZXJydXB0X21zZyByZXR1cm5lZCAlZFxuIiwgcmV0dmFsKTsKIAogCWlmIChyZXR2YWwgPj0gMCkKIAkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkRTX1JFR0lTVEVSX05VTTsgcmVnbnIrKykKIAkJCXJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSSArIHJlZ25yXSA9Ci0JCQkocmFkaW8tPmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSA8PCA4KSB8Ci0JCQkgcmFkaW8tPmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAyXTsKKwkJCQliZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKCh1bnNpZ25lZCBzaG9ydCAqKQorCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pKTsKIAogCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKIH0KQEAgLTU0Myw5ICs1OTYsMTEgQEAKIC8qCiAgKiBzaTQ3MHhfc2V0X2NoYW4gLSBzZXQgdGhlIGNoYW5uZWwKICAqLwotc3RhdGljIGludCBzaTQ3MHhfc2V0X2NoYW4oc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCBpbnQgY2hhbikKK3N0YXRpYyBpbnQgc2k0NzB4X3NldF9jaGFuKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgc2hvcnQgY2hhbikKIHsKLQlpbnQgcmV0dmFsLCBpOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWJvb2wgdGltZWRfb3V0ID0gMDsKIAogCS8qIHN0YXJ0IHR1bmluZyAqLwogCXJhZGlvLT5yZWdpc3RlcnNbQ0hBTk5FTF0gJj0gfkNIQU5ORUxfQ0hBTjsKQEAgLTU1NSwxNiArNjEwLDE3IEBACiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiB3YWl0IHRpbGwgc2VlayBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCAqLwotCWkgPSAwOworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0dW5lX3RpbWVvdXQpOwogCWRvIHsKIAkJcmV0dmFsID0gc2k0NzB4X2dldF9yZWdpc3RlcihyYWRpbywgU1RBVFVTUlNTSSk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIHJldHZhbDsKLQl9IHdoaWxlICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1RDKSAmJgotCQkoKytpIDwgc2Vla19yZXRyaWVzKSk7Ci0JaWYgKGkgPj0gc2Vla19yZXRyaWVzKQorCQl0aW1lZF9vdXQgPSB0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpOworCX0gd2hpbGUgKCgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1RDKSA9PSAwKSAmJgorCQkoIXRpbWVkX291dCkpOworCWlmICh0aW1lZF9vdXQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHNlZWsgZG9lcyBub3QgZmluaXNoIGFmdGVyICVkIHRyaWVzXG4iLCBpKTsKKwkJCSI6IHNlZWsgZG9lcyBub3QgZmluaXNoIGFmdGVyICV1IG1zXG4iLCB0dW5lX3RpbWVvdXQpOwogCiAJLyogc3RvcCB0dW5pbmcgKi8KIAlyYWRpby0+cmVnaXN0ZXJzW0NIQU5ORUxdICY9IH5DSEFOTkVMX1RVTkU7CkBAIC01NzUsOSArNjMxLDEwIEBACiAvKgogICogc2k0NzB4X2dldF9mcmVxIC0gZ2V0IHRoZSBmcmVxdWVuY3kKICAqLwotc3RhdGljIGludCBzaTQ3MHhfZ2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQorc3RhdGljIHVuc2lnbmVkIGludCBzaTQ3MHhfZ2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQogewotCWludCBzcGFjaW5nLCBiYW5kX2JvdHRvbSwgY2hhbiwgZnJlcTsKKwl1bnNpZ25lZCBpbnQgc3BhY2luZywgYmFuZF9ib3R0b20sIGZyZXE7CisJdW5zaWduZWQgc2hvcnQgY2hhbjsKIAlpbnQgcmV0dmFsOwogCiAJLyogU3BhY2luZyAoa0h6KSAqLwpAQCAtNjE2LDkgKzY3MywxMCBAQAogLyoKICAqIHNpNDcweF9zZXRfZnJlcSAtIHNldCB0aGUgZnJlcXVlbmN5CiAgKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3NldF9mcmVxKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgaW50IGZyZXEpCitzdGF0aWMgaW50IHNpNDcweF9zZXRfZnJlcShzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIHVuc2lnbmVkIGludCBmcmVxKQogewotCWludCBzcGFjaW5nLCBiYW5kX2JvdHRvbSwgY2hhbjsKKwl1bnNpZ25lZCBpbnQgc3BhY2luZywgYmFuZF9ib3R0b207CisJdW5zaWduZWQgc2hvcnQgY2hhbjsKIAogCS8qIFNwYWNpbmcgKGtIeikgKi8KIAlzd2l0Y2ggKHNwYWNlKSB7CkBAIC03MDksOSArNzY3LDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgc2k0NzB4X3Jkc19vbihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCiB7CisJaW50IHJldHZhbDsKKwogCS8qIHN5c2NvbmZpZyAxICovCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwogCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gfD0gU1lTQ09ORklHMV9SRFM7Ci0JcmV0dXJuIHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzEpOworCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzEpOworCWlmIChyZXR2YWwgPCAwKQorCQlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICY9IH5TWVNDT05GSUcxX1JEUzsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtNzI1LDExICs3OTEsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgc2k0NzB4X3JkcyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCiB7Ci0JdW5zaWduZWQgY2hhciB0bXBidWZbM107CiAJdW5zaWduZWQgY2hhciBibG9ja251bTsKLQl1bnNpZ25lZCBjaGFyIGJsZXI7IC8qIHJkcyBibG9jayBlcnJvcnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBibGVyOyAvKiByZHMgYmxvY2sgZXJyb3JzICovCiAJdW5zaWduZWQgc2hvcnQgcmRzOwotCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGNoYXIgdG1wYnVmWzNdOwogCiAJLyogZ2V0IHJkcyBibG9ja3MgKi8KIAlpZiAoc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzKHJhZGlvKSA8IDApCkBAIC03NDMsNjMgKzgwOCw1OCBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogY29weSBmb3VyIFJEUyBibG9ja3MgdG8gaW50ZXJuYWwgYnVmZmVyICovCi0JaWYgKHNwaW5fdHJ5bG9jaygmcmFkaW8tPmxvY2spKSB7Ci0JCS8qIHByb2Nlc3MgZWFjaCByZHMgYmxvY2sgKi8KLQkJZm9yIChibG9ja251bSA9IDA7IGJsb2NrbnVtIDwgNDsgYmxvY2tudW0rKykgewotCQkJc3dpdGNoIChibG9ja251bSkgewotCQkJZGVmYXVsdDoKLQkJCQlibGVyID0gKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJgotCQkJCQkJU1RBVFVTUlNTSV9CTEVSQSkgPj4gOTsKLQkJCQlyZHMgPSByYWRpby0+cmVnaXN0ZXJzW1JEU0FdOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWJsZXIgPSAocmFkaW8tPnJlZ2lzdGVyc1tSRUFEQ0hBTl0gJgotCQkJCQkJUkVBRENIQU5fQkxFUkIpID4+IDE0OwotCQkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQl07Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI6Ci0JCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCi0JCQkJCQlSRUFEQ0hBTl9CTEVSQykgPj4gMTI7Ci0JCQkJcmRzID0gcmFkaW8tPnJlZ2lzdGVyc1tSRFNDXTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzoKLQkJCQlibGVyID0gKHJhZGlvLT5yZWdpc3RlcnNbUkVBRENIQU5dICYKLQkJCQkJCVJFQURDSEFOX0JMRVJEKSA+PiAxMDsKLQkJCQlyZHMgPSByYWRpby0+cmVnaXN0ZXJzW1JEU0RdOwotCQkJCWJyZWFrOwotCQkJfTsKKwkvKiBjb3B5IGFsbCBmb3VyIFJEUyBibG9ja3MgdG8gaW50ZXJuYWwgYnVmZmVyICovCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCWZvciAoYmxvY2tudW0gPSAwOyBibG9ja251bSA8IDQ7IGJsb2NrbnVtKyspIHsKKwkJc3dpdGNoIChibG9ja251bSkgeworCQlkZWZhdWx0OgorCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYKKwkJCQkJU1RBVFVTUlNTSV9CTEVSQSkgPj4gOTsKKwkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQV07CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCisJCQkJCVJFQURDSEFOX0JMRVJCKSA+PiAxNDsKKwkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQl07CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCisJCQkJCVJFQURDSEFOX0JMRVJDKSA+PiAxMjsKKwkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQ107CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCisJCQkJCVJFQURDSEFOX0JMRVJEKSA+PiAxMDsKKwkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTRF07CisJCQlicmVhazsKKwkJfTsKIAotCQkJLyogRmlsbCB0aGUgVjRMMiBSRFMgYnVmZmVyICovCi0JCQl0bXBidWZbMF0gPSByZHMgJiAweDAwZmY7CS8qIExTQiAqLwotCQkJdG1wYnVmWzFdID0gKHJkcyAmIDB4ZmYwMCkgPj4gODsvKiBNU0IgKi8KLQkJCXRtcGJ1ZlsyXSA9IGJsb2NrbnVtOwkJLyogb2Zmc2V0IG5hbWUgKi8KLQkJCXRtcGJ1ZlsyXSB8PSBibG9ja251bSA8PCAzOwkvKiByZWNlaXZlZCBvZmZzZXQgKi8KLQkJCWlmIChibGVyID4gbWF4X3Jkc19lcnJvcnMpCi0JCQkJdG1wYnVmWzJdIHw9IDB4ODA7IC8qIHVuY29ycmVjdGFibGUgZXJyb3JzICovCi0JCQllbHNlIGlmIChibGVyID4gMCkKLQkJCQl0bXBidWZbMl0gfD0gMHg0MDsgLyogY29ycmVjdGVkIGVycm9yKHMpICovCisJCS8qIEZpbGwgdGhlIFY0TDIgUkRTIGJ1ZmZlciAqLworCQlwdXRfdW5hbGlnbmVkKGNwdV90b19sZTE2KHJkcyksICh1bnNpZ25lZCBzaG9ydCAqKSAmdG1wYnVmKTsKKwkJdG1wYnVmWzJdID0gYmxvY2tudW07CQkvKiBvZmZzZXQgbmFtZSAqLworCQl0bXBidWZbMl0gfD0gYmxvY2tudW0gPDwgMzsJLyogcmVjZWl2ZWQgb2Zmc2V0ICovCisJCWlmIChibGVyID4gbWF4X3Jkc19lcnJvcnMpCisJCQl0bXBidWZbMl0gfD0gMHg4MDsgLyogdW5jb3JyZWN0YWJsZSBlcnJvcnMgKi8KKwkJZWxzZSBpZiAoYmxlciA+IDApCisJCQl0bXBidWZbMl0gfD0gMHg0MDsgLyogY29ycmVjdGVkIGVycm9yKHMpICovCiAKLQkJCS8qIGNvcHkgUkRTIGJsb2NrIHRvIGludGVybmFsIGJ1ZmZlciAqLwotCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQkJCXJhZGlvLT5idWZmZXJbcmFkaW8tPndyX2luZGV4XSA9IHRtcGJ1ZltpXTsKLQkJCQlyYWRpby0+d3JfaW5kZXgrKzsKLQkJCX0KKwkJLyogY29weSBSRFMgYmxvY2sgdG8gaW50ZXJuYWwgYnVmZmVyICovCisJCW1lbWNweSgmcmFkaW8tPmJ1ZmZlcltyYWRpby0+d3JfaW5kZXhdLCAmdG1wYnVmLCAzKTsKKwkJcmFkaW8tPndyX2luZGV4ICs9IDM7CiAKLQkJCS8qIHdyYXAgd3JpdGUgcG9pbnRlciAqLwotCQkJaWYgKHJhZGlvLT53cl9pbmRleCA+PSByYWRpby0+YnVmX3NpemUpCi0JCQkJcmFkaW8tPndyX2luZGV4ID0gMDsKKwkJLyogd3JhcCB3cml0ZSBwb2ludGVyICovCisJCWlmIChyYWRpby0+d3JfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQorCQkJcmFkaW8tPndyX2luZGV4ID0gMDsKIAotCQkJLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCi0JCQlpZiAocmFkaW8tPndyX2luZGV4ID09IHJhZGlvLT5yZF9pbmRleCkgewotCQkJCS8qIGluY3JlbWVudCBhbmQgd3JhcCByZWFkIHBvaW50ZXIgKi8KLQkJCQlyYWRpby0+cmRfaW5kZXggKz0gMzsKLQkJCQlpZiAocmFkaW8tPnJkX2luZGV4ID49IHJhZGlvLT5idWZfc2l6ZSkKLQkJCQkJcmFkaW8tPnJkX2luZGV4ID0gMDsKLQkJCX0KKwkJLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCisJCWlmIChyYWRpby0+d3JfaW5kZXggPT0gcmFkaW8tPnJkX2luZGV4KSB7CisJCQkvKiBpbmNyZW1lbnQgYW5kIHdyYXAgcmVhZCBwb2ludGVyICovCisJCQlyYWRpby0+cmRfaW5kZXggKz0gMzsKKwkJCWlmIChyYWRpby0+cmRfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQorCQkJCXJhZGlvLT5yZF9pbmRleCA9IDA7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAKIAkvKiB3YWtlIHVwIHJlYWQgcXVldWUgKi8KIAlpZiAocmFkaW8tPndyX2luZGV4ICE9IHJhZGlvLT5yZF9pbmRleCkKQEAgLTgwOCwyOSArODY4LDE4IEBACiAKIAogLyoKLSAqIHNpNDcweF90aW1lciAtIHJkcyB0aW1lciBmdW5jdGlvbgotICovCi1zdGF0aWMgdm9pZCBzaTQ3MHhfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IChzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqKSBkYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmcmFkaW8tPndvcmspOwotfQotCi0KLS8qCiAgKiBzaTQ3MHhfd29yayAtIHJkcyB3b3JrIGZ1bmN0aW9uCiAgKi8KIHN0YXRpYyB2b2lkIHNpNDcweF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNpNDcweF9kZXZpY2UsCi0JCXdvcmspOworCQl3b3JrLndvcmspOwogCiAJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICYgU1lTQ09ORklHMV9SRFMpID09IDApCiAJCXJldHVybjsKIAogCXNpNDcweF9yZHMocmFkaW8pOwotCW1vZF90aW1lcigmcmFkaW8tPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhyZHNfcG9sbF90aW1lKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyYWRpby0+d29yaywgbXNlY3NfdG9famlmZmllcyhyZHNfcG9sbF90aW1lKSk7CiB9CiAKIApAQCAtODUyLDQ0ICs5MDEsNDQgQEAKIAkvKiBzd2l0Y2ggb24gcmRzIHJlY2VwdGlvbiAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcxXSAmIFNZU0NPTkZJRzFfUkRTKSA9PSAwKSB7CiAJCXNpNDcweF9yZHNfb24ocmFkaW8pOwotCQlzY2hlZHVsZV93b3JrKCZyYWRpby0+d29yayk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmFkaW8tPndvcmssCisJCQltc2Vjc190b19qaWZmaWVzKHJkc19wb2xsX3RpbWUpKTsKIAl9CiAKIAkvKiBibG9jayBpZiBubyBuZXcgZGF0YSBhdmFpbGFibGUgKi8KIAl3aGlsZSAocmFkaW8tPndyX2luZGV4ID09IHJhZGlvLT5yZF9pbmRleCkgewogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZyYWRpby0+cmVhZF9xdWV1ZSk7CisJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmFkaW8tPnJlYWRfcXVldWUsCisJCQlyYWRpby0+d3JfaW5kZXggIT0gcmFkaW8tPnJkX2luZGV4KSA8IDApCisJCQlyZXR1cm4gLUVJTlRSOwogCX0KIAogCS8qIGNhbGN1bGF0ZSBibG9jayBjb3VudCBmcm9tIGJ5dGUgY291bnQgKi8KIAljb3VudCAvPSAzOwogCiAJLyogY29weSBSRFMgYmxvY2sgb3V0IG9mIGludGVybmFsIGJ1ZmZlciBhbmQgdG8gdXNlciBidWZmZXIgKi8KLQlpZiAoc3Bpbl90cnlsb2NrKCZyYWRpby0+bG9jaykpIHsKLQkJd2hpbGUgKGJsb2NrX2NvdW50IDwgY291bnQpIHsKLQkJCWlmIChyYWRpby0+cmRfaW5kZXggPT0gcmFkaW8tPndyX2luZGV4KQotCQkJCWJyZWFrOworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKwl3aGlsZSAoYmxvY2tfY291bnQgPCBjb3VudCkgeworCQlpZiAocmFkaW8tPnJkX2luZGV4ID09IHJhZGlvLT53cl9pbmRleCkKKwkJCWJyZWFrOwogCi0JCQkvKiBhbHdheXMgdHJhbnNmZXIgcmRzIGNvbXBsZXRlIGJsb2NrcyAqLwotCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsCi0JCQkJCSZyYWRpby0+YnVmZmVyW3JhZGlvLT5yZF9pbmRleF0sIDMpKQotCQkJCS8qIHJldHZhbCA9IC1FRkFVTFQ7ICovCi0JCQkJYnJlYWs7CisJCS8qIGFsd2F5cyB0cmFuc2ZlciByZHMgY29tcGxldGUgYmxvY2tzICovCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmcmFkaW8tPmJ1ZmZlcltyYWRpby0+cmRfaW5kZXhdLCAzKSkKKwkJCS8qIHJldHZhbCA9IC1FRkFVTFQ7ICovCisJCQlicmVhazsKIAotCQkJLyogaW5jcmVtZW50IGFuZCB3cmFwIHJlYWQgcG9pbnRlciAqLwotCQkJcmFkaW8tPnJkX2luZGV4ICs9IDM7Ci0JCQlpZiAocmFkaW8tPnJkX2luZGV4ID49IHJhZGlvLT5idWZfc2l6ZSkKLQkJCQlyYWRpby0+cmRfaW5kZXggPSAwOworCQkvKiBpbmNyZW1lbnQgYW5kIHdyYXAgcmVhZCBwb2ludGVyICovCisJCXJhZGlvLT5yZF9pbmRleCArPSAzOworCQlpZiAocmFkaW8tPnJkX2luZGV4ID49IHJhZGlvLT5idWZfc2l6ZSkKKwkJCXJhZGlvLT5yZF9pbmRleCA9IDA7CiAKLQkJCS8qIGluY3JlbWVudCBjb3VudGVycyAqLwotCQkJYmxvY2tfY291bnQrKzsKLQkJCWJ1ZiArPSAzOwotCQkJcmV0dmFsICs9IDM7Ci0JCX0KLQotCQlzcGluX3VubG9jaygmcmFkaW8tPmxvY2spOworCQkvKiBpbmNyZW1lbnQgY291bnRlcnMgKi8KKwkJYmxvY2tfY291bnQrKzsKKwkJYnVmICs9IDM7CisJCXJldHZhbCArPSAzOwogCX0KKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC05MDYsNyArOTU1LDggQEAKIAkvKiBzd2l0Y2ggb24gcmRzIHJlY2VwdGlvbiAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcxXSAmIFNZU0NPTkZJRzFfUkRTKSA9PSAwKSB7CiAJCXNpNDcweF9yZHNfb24ocmFkaW8pOwotCQlzY2hlZHVsZV93b3JrKCZyYWRpby0+d29yayk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmFkaW8tPndvcmssCisJCQltc2Vjc190b19qaWZmaWVzKHJkc19wb2xsX3RpbWUpKTsKIAl9CiAKIAlwb2xsX3dhaXQoZmlsZSwgJnJhZGlvLT5yZWFkX3F1ZXVlLCBwdHMpOwpAQCAtOTI0LDEwICs5NzQsMjIgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJcmFkaW8tPnVzZXJzKys7Ci0JaWYgKHJhZGlvLT51c2VycyA9PSAxKQotCQlyZXR1cm4gc2k0NzB4X3N0YXJ0KHJhZGlvKTsKKworCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmFkaW8tPnVzZXJzLS07CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChyYWRpby0+dXNlcnMgPT0gMSkgeworCQlyZXR2YWwgPSBzaTQ3MHhfc3RhcnQocmFkaW8pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzksNiArMTAwMSw3IEBACiBzdGF0aWMgaW50IHNpNDcweF9mb3BzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCWlmICghcmFkaW8pCiAJCXJldHVybiAtRU5PREVWOwpAQCAtOTQ2LDEzICsxMDA5LDE0IEBACiAJcmFkaW8tPnVzZXJzLS07CiAJaWYgKHJhZGlvLT51c2VycyA9PSAwKSB7CiAJCS8qIHN0b3AgcmRzIHJlY2VwdGlvbiAqLwotCQlkZWxfdGltZXJfc3luYygmcmFkaW8tPnRpbWVyKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyYWRpby0+d29yayk7CiAKIAkJLyogY2FuY2VsIHJlYWQgcHJvY2Vzc2VzICovCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcmFkaW8tPnJlYWRfcXVldWUpOwogCi0JCXJldHVybiBzaTQ3MHhfc3RvcChyYWRpbyk7CisJCXJldHZhbCA9IHNpNDcweF9zdG9wKHJhZGlvKTsKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEwMzAsNyArMTA5NCw3IEBACiAJc3RybGNweShjYXBhYmlsaXR5LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoY2FwYWJpbGl0eS0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBEUklWRVJfQ0FSRCwgc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKIAlzcHJpbnRmKGNhcGFiaWxpdHktPmJ1c19pbmZvLCAiVVNCIik7Ci0JY2FwYWJpbGl0eS0+dmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OOworCWNhcGFiaWxpdHktPnZlcnNpb24gPSBEUklWRVJfS0VSTkVMX1ZFUlNJT047CiAJY2FwYWJpbGl0eS0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAogCXJldHVybiAwOwpAQCAtMTA2NywxNiArMTEzMSwyMSBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIGk7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaTQ3MHhfdjRsMl9xdWVyeWN0cmwpOyBpKyspIHsKIAkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldLmlkKSB7CiAJCQltZW1jcHkocWMsICYoc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR2YWwgPSAwOworCQkJYnJlYWs7CiAJCX0KIAl9CisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCSI6IHF1ZXJ5IGNvbnRyb2wgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTExMTAsMjEgKzExNzksMjkgQEAKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICY9IH5TWVNDT05GSUcyX1ZPTFVNRTsKIAkJcmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSB8PSBjdHJsLT52YWx1ZTsKLQkJcmV0dXJuIHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzIpOworCQlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcyKTsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUgPT0gMSkKIAkJCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19ETVVURTsKIAkJZWxzZQogCQkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfRE1VVEU7Ci0JCXJldHVybiBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRyk7CisJCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKIAl9CisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCSI6IHNldCBjb250cm9sIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwogCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC0xMTYzLDggKzEyNDAsOCBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAlpZiAodHVuZXItPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjIwLDYgKzEyOTcsNyBAQAogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCiB7CiAJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCWlmICh0dW5lci0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyMjksNyArMTMwNywxMiBAQAogCWVsc2UKIAkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX01PTk87IC8qIHRyeSBzdGVyZW8gKi8KIAotCXJldHVybiBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRyk7CisJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOworCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBzZXQgdHVuZXIgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTEyNTUsMTEgKzEzMzgsMTcgQEAKIAkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQogewogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAlpZiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBzaTQ3MHhfc2V0X2ZyZXEocmFkaW8sIGZyZXEtPmZyZXF1ZW5jeSk7CisJcmV0dmFsID0gc2k0NzB4X3NldF9mcmVxKHJhZGlvLCBmcmVxLT5mcmVxdWVuY3kpOworCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBzZXQgZnJlcXVlbmN5IGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOworCisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTI5OSw3MSArMTM4OCwxMTYgQEAKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbzsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCS8qIG1lbW9yeSBhbmQgaW50ZXJmYWNlIGFsbG9jYXRpb25zICovCi0JcmFkaW8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2k0NzB4X2RldmljZSksIEdGUF9LRVJORUwpOworCS8qIHByaXZhdGUgZGF0YSBhbGxvY2F0aW9uICovCisJcmFkaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2k0NzB4X2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghcmFkaW8pCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGVycl9pbml0aWFsOworCisJLyogdmlkZW8gZGV2aWNlIGFsbG9jYXRpb24gKi8KIAlyYWRpby0+dmlkZW9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAoIXJhZGlvLT52aWRlb2RldikgewotCQlrZnJlZShyYWRpbyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlpZiAoIXJhZGlvLT52aWRlb2RldikKKwkJZ290byBlcnJfcmFkaW87CisKKwkvKiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi8KIAltZW1jcHkocmFkaW8tPnZpZGVvZGV2LCAmc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSwKIAkJCXNpemVvZihzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlKSk7CiAJcmFkaW8tPnVzZXJzID0gMDsKIAlyYWRpby0+dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlyYWRpby0+aW50ZiA9IGludGY7CisJbXV0ZXhfaW5pdCgmcmFkaW8tPmxvY2spOwogCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCQkiOiBDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKLQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKLQkJa2ZyZWUocmFkaW8pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCByYWRpbyk7CiAKIAkvKiBzaG93IHNvbWUgaW5mb3MgYWJvdXQgdGhlIHNwZWNpZmljIGRldmljZSAqLwotCWlmIChzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMocmFkaW8pIDwgMCkgewotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOwotCQlrZnJlZShyYWRpbyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IERldmljZUlEPTB4JTQuNHggQ2hpcElEPTB4JTQuNHhcbiIsCisJcmV0dmFsID0gLUVJTzsKKwlpZiAoc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHJhZGlvKSA8IDApCisJCWdvdG8gZXJyX2FsbDsKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IERldmljZUlEPTB4JTQuNGh4IENoaXBJRD0weCU0LjRoeFxuIiwKIAkJCXJhZGlvLT5yZWdpc3RlcnNbREVWSUNFSURdLCByYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0pOwogCiAJLyogY2hlY2sgaWYgZmlybXdhcmUgaXMgY3VycmVudCAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdICYgQ0hJUElEX0ZJUk1XQVJFKQotCQkJPCBSQURJT19TV19WRVJTSU9OX0NVUlJFTlQpCisJCQk8IFJBRElPX1NXX1ZFUlNJT05fQ1VSUkVOVCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBUaGlzIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggY2hpcCB2ZXJzaW9uICVkLCAiCi0JCQkiYnV0IHRoZSBkZXZpY2UgaGFzIGZpcm13YXJlICVkLlxuIgotCQkJRFJJVkVSX05BTUUKLQkJCSJJZiB5b3UgaGF2ZSBzb21lIHRyb3VibGUgdXNpbmcgdGhpcyBkcml2ZXIsIHBsZWFzZSAiCi0JCQkicmVwb3J0IHRvIFY0TCBNTCBhdCB2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb21cbiIsCi0JCQlyYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0gJiBDSElQSURfRklSTVdBUkUsCi0JCQlSQURJT19TV19WRVJTSU9OX0NVUlJFTlQpOworCQkJIjogVGhpcyBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoICIKKwkJCSJmaXJtd2FyZSB2ZXJzaW9uICVodSxcbiIsIFJBRElPX1NXX1ZFUlNJT05fQ1VSUkVOVCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCSI6IGJ1dCB0aGUgZGV2aWNlIGhhcyBmaXJtd2FyZSB2ZXJzaW9uICVodS5cbiIsCisJCQlyYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0gJiBDSElQSURfRklSTVdBUkUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCisJCQkiOiBJZiB5b3UgaGF2ZSBzb21lIHRyb3VibGUgdXNpbmcgdGhpcyBkcml2ZXIsXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQorCQkJIjogcGxlYXNlIHJlcG9ydCB0byBWNEwgTUwgYXQgIgorCQkJInZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbVxuIik7CisJfQogCiAJLyogc2V0IGluaXRpYWwgZnJlcXVlbmN5ICovCiAJc2k0NzB4X3NldF9mcmVxKHJhZGlvLCA4Ny41ICogRlJFUV9NVUwpOyAvKiBhdmFpbGFibGUgaW4gYWxsIHJlZ2lvbnMgKi8KIAotCS8qIHJkcyBpbml0aWFsaXphdGlvbiAqLworCS8qIHJkcyBidWZmZXIgYWxsb2NhdGlvbiAqLwogCXJhZGlvLT5idWZfc2l6ZSA9IHJkc19idWYgKiAzOwogCXJhZGlvLT5idWZmZXIgPSBrbWFsbG9jKHJhZGlvLT5idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyYWRpby0+YnVmZmVyKSB7Ci0JCXZpZGVvX2RldmljZV9yZWxlYXNlKHJhZGlvLT52aWRlb2Rldik7Ci0JCWtmcmVlKHJhZGlvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmICghcmFkaW8tPmJ1ZmZlcikKKwkJZ290byBlcnJfYWxsOworCisJLyogcmRzIGJ1ZmZlciBjb25maWd1cmF0aW9uICovCiAJcmFkaW8tPndyX2luZGV4ID0gMDsKIAlyYWRpby0+cmRfaW5kZXggPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJhZGlvLT5yZWFkX3F1ZXVlKTsKIAotCS8qIHByZXBhcmUgcG9sbGluZyB2aWEgZXZlbnRkICovCi0JSU5JVF9XT1JLKCZyYWRpby0+d29yaywgc2k0NzB4X3dvcmspOwotCWluaXRfdGltZXIoJnJhZGlvLT50aW1lcik7Ci0JcmFkaW8tPnRpbWVyLmZ1bmN0aW9uID0gc2k0NzB4X3RpbWVyOwotCXJhZGlvLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHJhZGlvOworCS8qIHByZXBhcmUgcmRzIHdvcmsgZnVuY3Rpb24gKi8KKwlJTklUX0RFTEFZRURfV09SSygmcmFkaW8tPndvcmssIHNpNDcweF93b3JrKTsKKworCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKKwkJCQkiOiBDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfYWxsOworCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHJhZGlvKTsKKworCXJldHVybiAwOworZXJyX2FsbDoKKwl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOworCWtmcmVlKHJhZGlvLT5idWZmZXIpOworZXJyX3JhZGlvOgorCWtmcmVlKHJhZGlvKTsKK2Vycl9pbml0aWFsOgorCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF91c2JfZHJpdmVyX3N1c3BlbmQgLSBzdXNwZW5kIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIGludCBzaTQ3MHhfdXNiX2RyaXZlcl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBzdXNwZW5kaW5nIG5vdy4uLlxuIik7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJhZGlvLT53b3JrKTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBzaTQ3MHhfdXNiX2RyaXZlcl9yZXN1bWUgLSByZXN1bWUgdGhlIGRldmljZQorICovCitzdGF0aWMgaW50IHNpNDcweF91c2JfZHJpdmVyX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiByZXN1bWluZyBub3cuLi5cbiIpOworCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCWlmIChyYWRpby0+dXNlcnMgJiYgcmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcxXSAmIFNZU0NPTkZJRzFfUkRTKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJhZGlvLT53b3JrLAorCQkJbXNlY3NfdG9famlmZmllcyhyZHNfcG9sbF90aW1lKSk7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNzYsMTUgKzE1MTAsMTEgQEAKIHsKIAlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JZGVsX3RpbWVyX3N5bmMoJnJhZGlvLT50aW1lcik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmFkaW8tPndvcmspOwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JaWYgKHJhZGlvKSB7Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7Ci0JCWtmcmVlKHJhZGlvLT5idWZmZXIpOwotCQlrZnJlZShyYWRpbyk7Ci0JfQorCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CisJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJa2ZyZWUocmFkaW8pOwogfQogCiAKQEAgLTEzOTIsMTAgKzE1MjIsMTMgQEAKICAqIHNpNDcweF91c2JfZHJpdmVyIC0gdXNiIGRyaXZlciBpbnRlcmZhY2UKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNpNDcweF91c2JfZHJpdmVyID0gewotCS5uYW1lCQk9IERSSVZFUl9OQU1FLAotCS5wcm9iZQkJPSBzaTQ3MHhfdXNiX2RyaXZlcl9wcm9iZSwKLQkuZGlzY29ubmVjdAk9IHNpNDcweF91c2JfZHJpdmVyX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlCT0gc2k0NzB4X3VzYl9kcml2ZXJfaWRfdGFibGUsCisJLm5hbWUJCQk9IERSSVZFUl9OQU1FLAorCS5wcm9iZQkJCT0gc2k0NzB4X3VzYl9kcml2ZXJfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gc2k0NzB4X3VzYl9kcml2ZXJfZGlzY29ubmVjdCwKKwkuc3VzcGVuZAkJPSBzaTQ3MHhfdXNiX2RyaXZlcl9zdXNwZW5kLAorCS5yZXN1bWUJCQk9IHNpNDcweF91c2JfZHJpdmVyX3Jlc3VtZSwKKwkuaWRfdGFibGUJCT0gc2k0NzB4X3VzYl9kcml2ZXJfaWRfdGFibGUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kCT0gMSwKIH07CiAKIApAQCAtMTQwOSw3ICsxNTQyLDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgc2k0NzB4X21vZHVsZV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIsIFZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzaTQ3MHhfdXNiX2RyaXZlcik7CiB9CiAKQEAgLTE0MjksNCArMTU2Miw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjAuNCIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IGEyZTg5ODcuLjE4MzI5NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTQsMTQgKzQsMTQgQEAKIAogbWVudWNvbmZpZyBWSURFT19DQVBUVVJFX0RSSVZFUlMKIAlib29sICJWaWRlbyBjYXB0dXJlIGFkYXB0ZXJzIgotCWRlcGVuZHMgb24gVklERU9fREVWCisJZGVwZW5kcyBvbiBWSURFT19WNEwyCiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc2VsZWN0aW5nIHRoZSB2aWRlbyBhZGFwdGVycyBmb3IKIAkgIHdlYmNhbXMsIGFuYWxvZyBUViwgYW5kIGh5YnJpZCBhbmFsb2cvZGlnaXRhbCBUVi4KIAkgIFNvbWUgb2YgdGhvc2UgZGV2aWNlcyBhbHNvIHN1cHBvcnRzIEZNIHJhZGlvLgogCi1pZiBWSURFT19DQVBUVVJFX0RSSVZFUlMgJiYgVklERU9fREVWCitpZiBWSURFT19DQVBUVVJFX0RSSVZFUlMgJiYgVklERU9fVjRMMgogCiBjb25maWcgVklERU9fQURWX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGFkdmFuY2VkIGRlYnVnIGZ1bmN0aW9uYWxpdHkiCkBAIC0zMDUsNyArMzA1LDcgQEAKIAogY29uZmlnIFZJREVPX0NYMjM0MVgKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyMzQxeCBNUEVHIGVuY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDJfQ09NTU9OCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIENvbmV4YW50IENYMjM0MTYgTVBFRyBlbmNvZGVycwogCSAgYW5kIENYMjM0MTUgTVBFRyBlbmNvZGVyL2RlY29kZXJzLgpAQCAtMzgyLDcgKzM4Miw3IEBACiAKIGNvbmZpZyBWSURFT19WSVZJCiAJdHJpc3RhdGUgIlZpcnR1YWwgVmlkZW8gRHJpdmVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiAhU1BBUkMzMiAmJiAhU1BBUkM2NAorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIgJiYgIVNQQVJDMzIgJiYgIVNQQVJDNjQKIAlzZWxlY3QgVklERU9CVUZfVk1BTExPQwogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDg1MGI4YzYuLjNmMjA5YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtMTAsOCArMTAsOSBAQAogCiBzdGt3ZWJjYW0tb2Jqcwk6PQlzdGstd2ViY2FtLm8gc3RrLXNlbnNvci5vCiAKLW9iai0kKENPTkZJR19WSURFT19ERVYpICs9IHZpZGVvZGV2Lm8gdjRsMi1jb21tb24ubyBjb21wYXRfaW9jdGwzMi5vIFwKLQkJCSAgIHY0bDItaW50LWRldmljZS5vCitvYmotJChDT05GSUdfVklERU9fREVWKSArPSB2aWRlb2Rldi5vIGNvbXBhdF9pb2N0bDMyLm8gdjRsMi1pbnQtZGV2aWNlLm8KKworb2JqLSQoQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OKSArPSB2NGwyLWNvbW1vbi5vCiAKIGlmZXEgKCQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKSx5KQogICBvYmotJChDT05GSUdfVklERU9fREVWKSArPSB2NGwxLWNvbXBhdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCmluZGV4IGNiYWI1M2YuLmZlYTJlNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCkBAIC00MDgsNyArNDA4LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gMCkKKwlpZiAoIWNsaWVudCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKIAljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwppbmRleCAwZDBjNTU0Li4xMGQ0ZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCXJldHVybiAwOwogCiAJY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IDApCisJaWYgKCFjbGllbnQpCiAJCXJldHVybiAtRU5PTUVNOwogCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CiAJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwppbmRleCAxMmQxYjkyLi5lNjYzY2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCkBAIC01MjQsNyArNTI0LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gMCkKKwlpZiAoIWNsaWVudCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKIAljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCmluZGV4IGUxMDI4YTcuLjdkZWUyZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSAwKQorCWlmICghY2xpZW50KQogCQlyZXR1cm4gLUVOT01FTTsKIAljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwogCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0ODMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0ODMyLmMKaW5kZXggYTUxODc2MS4uZjkyZjA2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idDgzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuYwpAQCAtOTcsNiArOTcsMTEgQEAKIAlpbnQgcmM7CiAKIAlidWY9a21hbGxvYyg2NSxHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQl2NGxfZXJyKCZ0LT5jbGllbnQsCisJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeS4gRGV0YWNoaW5nLlxuIik7CisJCXJldHVybiAwOworCX0KIAlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwogCiAJaWYoYnVmWzB4NDBdICE9IDB4MzEpIHsKQEAgLTIxMSw3ICsyMTYsMTIgQEAKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIEJUODMyX0hFWERVTVA6IHsKIAkJCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQkJCWJ1Zj1rbWFsbG9jKDY1LEdGUF9LRVJORUwpOworCQkJYnVmID0ga21hbGxvYyg2NSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWJ1ZikgeworCQkJCXY0bF9lcnIoJnQtPmNsaWVudCwKKwkJCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQkJCWJyZWFrOworCQkJfQogCQkJYnQ4MzJfaGV4ZHVtcCgmdC0+Y2xpZW50LGJ1Zik7CiAJCQlrZnJlZShidWYpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggOTA3ZGM2Mi4uZmNmOGYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtMTk5MCw3ICsxOTkwLDcgQEAKIAlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJZi0+dHlwZSA9IGJ0di0+cmFkaW9fdXNlciA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBidHYtPmZyZXE7CiAKIAlyZXR1cm4gMDsKQEAgLTIwMDksNyArMjAwOSw4IEBACiAKIAlpZiAodW5saWtlbHkoZi0+dHVuZXIgIT0gMCkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICh1bmxpa2VseShmLT50eXBlICE9IFY0TDJfVFVORVJfQU5BTE9HX1RWKSkKKwlpZiAodW5saWtlbHkoZi0+dHlwZSAhPSAoYnR2LT5yYWRpb191c2VyCisJCT8gVjRMMl9UVU5FUl9SQURJTyA6IFY0TDJfVFVORVJfQU5BTE9HX1RWKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJmJ0di0+bG9jayk7CiAJYnR2LT5mcmVxID0gZi0+ZnJlcXVlbmN5OwpAQCAtMjM1NCw4ICsyMzU1LDggQEAKIAkJQlVHKCk7CiAJfQogCi0JbXV0ZXhfbG9jaygmZmgtPmNhcC5sb2NrKTsKLQkJa2ZyZWUoZmgtPm92LmNsaXBzKTsKKwltdXRleF9sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOworCWtmcmVlKGZoLT5vdi5jbGlwcyk7CiAJZmgtPm92LmNsaXBzICAgID0gY2xpcHM7CiAJZmgtPm92Lm5jbGlwcyAgID0gbjsKIApAQCAtMjM3Niw3ICsyMzc3LDcgQEAKIAkJYnR0dl9vdmVybGF5X3Jpc2MoYnR2LCAmZmgtPm92LCBmaC0+b3ZmbXQsIG5ldyk7CiAJCXJldHZhbCA9IGJ0dHZfc3dpdGNoX292ZXJsYXkoYnR2LGZoLG5ldyk7CiAJfQotCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKKwltdXRleF91bmxvY2soJmZoLT5jYXAudmJfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjU3Niw3ICsyNTc3LDcgQEAKIAlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwogCiAJLyogdXBkYXRlIG91ciBzdGF0ZSBpbmZvcm1hdGlvbnMgKi8KLQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOworCW11dGV4X2xvY2soJmZoLT5jYXAudmJfbG9jayk7CiAJZmgtPmZtdCAgICAgICAgICAgICAgPSBmbXQ7CiAJZmgtPmNhcC5maWVsZCAgICAgICAgPSBmLT5mbXQucGl4LmZpZWxkOwogCWZoLT5jYXAubGFzdCAgICAgICAgID0gVjRMMl9GSUVMRF9OT05FOwpAQCAtMjU4NSw3ICsyNTg2LDcgQEAKIAlidHYtPmluaXQuZm10ICAgICAgICA9IGZtdDsKIAlidHYtPmluaXQud2lkdGggICAgICA9IGYtPmZtdC5waXgud2lkdGg7CiAJYnR2LT5pbml0LmhlaWdodCAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKLQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjExLDExICsyNjEyLDExIEBACiAJdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gcHJpdjsKIAotCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CisJbXV0ZXhfbG9jaygmZmgtPmNhcC52Yl9sb2NrKTsKIAlyZXR2YWwgPSB2aWRlb2J1Zl9tbWFwX3NldHVwKCZmaC0+Y2FwLCBnYnVmZmVycywgZ2J1ZnNpemUsCiAJCQkJICAgICBWNEwyX01FTU9SWV9NTUFQKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CisJCW11dGV4X3VubG9jaygmZmgtPmNhcC52Yl9sb2NrKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTI2MjcsNyArMjYyOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGdidWZmZXJzOyBpKyspCiAJCW1idWYtPm9mZnNldHNbaV0gPSBpICogZ2J1ZnNpemU7CiAKLQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0yNzU2LDEwICsyNzU3LDExIEBACiAJaWYgKCFjaGVja19hbGxvY19idHJlcyhidHYsIGZoLCBSRVNPVVJDRV9PVkVSTEFZKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CisJbXV0ZXhfbG9jaygmZmgtPmNhcC52Yl9sb2NrKTsKIAlpZiAob24pIHsKIAkJZmgtPm92LnR2bm9ybSA9IGJ0di0+dHZub3JtOwogCQluZXcgPSB2aWRlb2J1Zl9wY2lfYWxsb2Moc2l6ZW9mKCpuZXcpKTsKKwkJbmV3LT5jcm9wID0gYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdLnJlY3Q7CiAJCWJ0dHZfb3ZlcmxheV9yaXNjKGJ0diwgJmZoLT5vdiwgZmgtPm92Zm10LCBuZXcpOwogCX0gZWxzZSB7CiAJCW5ldyA9IE5VTEw7CkBAIC0yNzY3LDcgKzI3NjksNyBAQAogCiAJLyogc3dpdGNoIG92ZXIgKi8KIAlyZXR2YWwgPSBidHR2X3N3aXRjaF9vdmVybGF5KGJ0diwgZmgsIG5ldyk7Ci0JbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOworCW11dGV4X3VubG9jaygmZmgtPmNhcC52Yl9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yODA2LDcgKzI4MDgsNyBAQAogCX0KIAogCS8qIG9rLCBhY2NlcHQgaXQgKi8KLQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOworCW11dGV4X2xvY2soJmZoLT5jYXAudmJfbG9jayk7CiAJYnR2LT5mYnVmLmJhc2UgICAgICAgPSBmYi0+YmFzZTsKIAlidHYtPmZidWYuZm10LndpZHRoICA9IGZiLT5mbXQud2lkdGg7CiAJYnR2LT5mYnVmLmZtdC5oZWlnaHQgPSBmYi0+Zm10LmhlaWdodDsKQEAgLTI4MzgsNyArMjg0MCw3IEBACiAJCQlyZXR2YWwgPSBidHR2X3N3aXRjaF9vdmVybGF5KGJ0diwgZmgsIG5ldyk7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOworCW11dGV4X3VubG9jaygmZmgtPmNhcC52Yl9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0zMDkwLDcgKzMwOTIsNyBAQAogCiAJZmgtPmRvX2Nyb3AgPSAxOwogCi0JbXV0ZXhfbG9jaygmZmgtPmNhcC5sb2NrKTsKKwltdXRleF9sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOwogCiAJaWYgKGZoLT53aWR0aCA8IGMubWluX3NjYWxlZF93aWR0aCkgewogCQlmaC0+d2lkdGggPSBjLm1pbl9zY2FsZWRfd2lkdGg7CkBAIC0zMTA4LDcgKzMxMTAsNyBAQAogCQlidHYtPmluaXQuaGVpZ2h0ID0gYy5tYXhfc2NhbGVkX2hlaWdodDsKIAl9CiAKLQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMTc3LDMwICszMTc5LDI1IEBACiAJCWJ1ZiA9IGxpc3RfZW50cnkoZmgtPmNhcC5zdHJlYW0ubmV4dCxzdHJ1Y3QgYnR0dl9idWZmZXIsdmIuc3RyZWFtKTsKIAl9IGVsc2UgewogCQkvKiByZWFkKCkgY2FwdHVyZSAqLwotCQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF9sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOwogCQlpZiAoTlVMTCA9PSBmaC0+Y2FwLnJlYWRfYnVmKSB7CiAJCQkvKiBuZWVkIHRvIGNhcHR1cmUgYSBuZXcgZnJhbWUgKi8KLQkJCWlmIChsb2NrZWRfYnRyZXMoZmgtPmJ0dixSRVNPVVJDRV9WSURFT19TVFJFQU0pKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwotCQkJCXJldHVybiBQT0xMRVJSOwotCQkJfQorCQkJaWYgKGxvY2tlZF9idHJlcyhmaC0+YnR2LFJFU09VUkNFX1ZJREVPX1NUUkVBTSkpCisJCQkJZ290byBlcnI7CiAJCQlmaC0+Y2FwLnJlYWRfYnVmID0gdmlkZW9idWZfcGNpX2FsbG9jKGZoLT5jYXAubXNpemUpOwotCQkJaWYgKE5VTEwgPT0gZmgtPmNhcC5yZWFkX2J1ZikgewotCQkJCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKLQkJCQlyZXR1cm4gUE9MTEVSUjsKLQkJCX0KKwkJCWlmIChOVUxMID09IGZoLT5jYXAucmVhZF9idWYpCisJCQkJZ290byBlcnI7CiAJCQlmaC0+Y2FwLnJlYWRfYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOwogCQkJZmllbGQgPSB2aWRlb2J1Zl9uZXh0X2ZpZWxkKCZmaC0+Y2FwKTsKIAkJCWlmICgwICE9IGZoLT5jYXAub3BzLT5idWZfcHJlcGFyZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmLGZpZWxkKSkgewogCQkJCWtmcmVlIChmaC0+Y2FwLnJlYWRfYnVmKTsKIAkJCQlmaC0+Y2FwLnJlYWRfYnVmID0gTlVMTDsKLQkJCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7Ci0JCQkJcmV0dXJuIFBPTExFUlI7CisJCQkJZ290byBlcnI7CiAJCQl9CiAJCQlmaC0+Y2FwLm9wcy0+YnVmX3F1ZXVlKCZmaC0+Y2FwLGZoLT5jYXAucmVhZF9idWYpOwogCQkJZmgtPmNhcC5yZWFkX29mZiA9IDA7CiAJCX0KLQkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF91bmxvY2soJmZoLT5jYXAudmJfbG9jayk7CiAJCWJ1ZiA9IChzdHJ1Y3QgYnR0dl9idWZmZXIqKWZoLT5jYXAucmVhZF9idWY7CiAJfQogCkBAIC0zMjA5LDYgKzMyMDYsOSBAQAogCSAgICBidWYtPnZiLnN0YXRlID09IFZJREVPQlVGX0VSUk9SKQogCQlyZXR1cm4gUE9MTElOfFBPTExSRE5PUk07CiAJcmV0dXJuIDA7CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOworCXJldHVybiBQT0xMRVJSOwogfQogCiBzdGF0aWMgaW50IGJ0dHZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTMzOTAsNyArMzM5MCw2IEBACiAJLnZpZGlvY2dtYnVmICAgICAgICAgICAgICAgICAgICA9IHZpZGlvY2dtYnVmLAogI2VuZGlmCiAJLnZpZGlvY19nX2Nyb3AgICAgICAgICAgICAgICAgICA9IGJ0dHZfZ19jcm9wLAotCS52aWRpb2NfZ19jcm9wICAgICAgICAgICAgICAgICAgPSBidHR2X2dfY3JvcCwKIAkudmlkaW9jX3NfY3JvcCAgICAgICAgICAgICAgICAgID0gYnR0dl9zX2Nyb3AsCiAJLnZpZGlvY19nX2ZidWYgICAgICAgICAgICAgICAgICA9IGJ0dHZfZ19mYnVmLAogCS52aWRpb2Nfc19mYnVmICAgICAgICAgICAgICAgICAgPSBidHR2X3NfZmJ1ZiwKQEAgLTM0MTcsNiArMzQxNiw3IEBACiB7CiAJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gTlVMTDsKKwlzdHJ1Y3QgYnR0dl9maCAqZmg7CiAJdW5zaWduZWQgaW50IGk7CiAKIAlkcHJpbnRrKCJidHR2OiBvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKQEAgLTM0MzEsMTIgKzM0MzEsMTkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlkcHJpbnRrKCJidHR2JWQ6IG9wZW4gY2FsbGVkIChyYWRpbylcbiIsYnR2LT5jLm5yKTsKKworCS8qIGFsbG9jYXRlIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KKwlmaCA9IGttYWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwkqZmggPSBidHYtPmluaXQ7CisJdjRsMl9wcmlvX29wZW4oJmJ0di0+cHJpbywgJmZoLT5wcmlvKTsKKwogCW11dGV4X2xvY2soJmJ0di0+bG9jayk7CiAKIAlidHYtPnJhZGlvX3VzZXIrKzsKIAotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGJ0djsKLQogCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsQVVEQ19TRVRfUkFESU8sTlVMTCk7CiAJYXVkaW9faW5wdXQoYnR2LFRWQVVESU9fSU5QVVRfUkFESU8pOwogCkBAIC0zNDQ2LDcgKzM0NTMsOCBAQAogCiBzdGF0aWMgaW50IHJhZGlvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYnR0dl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CiAJc3RydWN0IHJkc19jb21tYW5kIGNtZDsKIAogCWJ0di0+cmFkaW9fdXNlci0tOwpAQCAtMzUxMCw4ICszNTE4LDEyIEBACiBzdGF0aWMgaW50IHJhZGlvX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogeworCWlmIChhLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKIAlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzU3MSw3ICszNTgzLDggQEAKIHN0YXRpYyBzc2l6ZV90IHJhZGlvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAogCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBidHR2ICAgICpidHYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGJ0dHZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwogCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CiAJY21kLmJsb2NrX2NvdW50ID0gY291bnQvMzsKIAljbWQuYnVmZmVyID0gZGF0YTsKQEAgLTM1ODUsNyArMzU5OCw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmFkaW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQlzdHJ1Y3QgYnR0diAgICAqYnR2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBidHR2X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKIAlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOwogCWNtZC5pbnN0YW5jZSA9IGZpbGU7CiAJY21kLmV2ZW50X2xpc3QgPSB3YWl0OwpAQCAtMzYwMSw2ICszNjE1LDcgQEAKIAkub3BlbgkgID0gcmFkaW9fb3BlbiwKIAkucmVhZCAgICAgPSByYWRpb19yZWFkLAogCS5yZWxlYXNlICA9IHJhZGlvX3JlbGVhc2UsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkuaW9jdGwJICA9IHZpZGVvX2lvY3RsMiwKIAkubGxzZWVrCSAgPSBub19sbHNlZWssCiAJLnBvbGwgICAgID0gcmFkaW9fcG9sbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwppbmRleCAxZjBjYzc5Li43NWZhODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCkBAIC0zNTIsMTMgKzM1MiwxMyBAQAogCSAgIGJlY2F1c2UgdmJpX2ZtdC5lbmQgY291bnRzIGZpZWxkIGxpbmVzIHRpbWVzIHR3by4gKi8KIAllbmQgPSBtYXgoZnJ0LT5mbXQudmJpLnN0YXJ0WzBdLCBzdGFydDEpICogMiArIDI7CiAKLQltdXRleF9sb2NrKCZmaC0+dmJpLmxvY2spOworCW11dGV4X2xvY2soJmZoLT52YmkudmJfbG9jayk7CiAKIAlmaC0+dmJpX2ZtdC5mbXQgICAgPSBmcnQtPmZtdC52Ymk7CiAJZmgtPnZiaV9mbXQudHZub3JtID0gdHZub3JtOwogCWZoLT52YmlfZm10LmVuZCAgICA9IGVuZDsKIAotCW11dGV4X3VubG9jaygmZmgtPnZiaS5sb2NrKTsKKwltdXRleF91bmxvY2soJmZoLT52YmkudmJfbG9jayk7CiAKIAlyYyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDJkNDE0ZGEuLmRmYTI2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjMyLDYgKzIzMiw3IEBACiAJY2FzZSA3ODYzMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBObyBJUiwgTm8gRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCiAJY2FzZSA3OTAwMTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgZnVsbCBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwogCWNhc2UgNzkxMDE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc5NTYxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBoYWxmIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCiAJY2FzZSA3OTU3MTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgZnVsbCBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwogCWNhc2UgNzk2NzE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KIAkJYnJlYWs7CkBAIC0zNDcsMTAgKzM0OCwxMyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKKwkJaWYgKGRldi0+aTJjX2J1c1swXS5pMmNfcmMgPT0gMCkKKwkJCWhhdXBwYXVnZV9lZXByb20oZGV2LCBlZXByb20rMHg4MCk7CisJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBscDoKIAkJaWYgKGRldi0+aTJjX2J1c1swXS5pMmNfcmMgPT0gMCkKLQkJCWhhdXBwYXVnZV9lZXByb20oZGV2LCBlZXByb20rMHg4MCk7CisJCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgZWVwcm9tKzB4YzApOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwppbmRleCA4ZTQwYzdiLi43ZjEwYjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCkBAIC01NiwxMzcgKzU2LDYgQEAKIAogI2RlZmluZSBOT19TWU5DX0xJTkUgKC0xVSkKIAotLyoKLSAqIENYMjM4ODUgQXNzdW1wdGlvbnMKLSAqIDEgbGluZSA9IDE2IGJ5dGVzIG9mIENEVAotICogY21kcyBzaXplID0gODAKLSAqIGNkdCBzaXplID0gMTYgKiBsaW5lc2l6ZQotICogaXFzaXplID0gNjQKLSAqIG1heGxpbmVzID0gNgotICoKLSAqIEFkZHJlc3MgU3BhY2U6Ci0gKiAweDAwMDAwMDAwIDB4MDAwMDhmZmYgRklGTyBjbHVzdGVycwotICogMHgwMDAxMDAwMCAweDAwMDEwNGFmIENoYW5uZWwgTWFuYWdlbWVudCBEYXRhIFN0cnVjdHVyZXMKLSAqIDB4MDAwMTA0YjAgMHgwMDAxMDRmZiBGcmVlCi0gKiAweDAwMDEwNTAwIDB4MDAwMTA4YmYgMTUgY2hhbm5lbHMgKiBpcXNpemUKLSAqIDB4MDAwMTA4YzAgMHgwMDAxMDhmZiBGcmVlCi0gKiAweDAwMDEwOTAwIDB4MDAwMTBlOWYgSVEncyArIENsdXN0ZXIgRGVzY3JpcHRvciBUYWJsZXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAxNSBjaGFubmVscyAqIChpcXNpemUgKyAobWF4bGluZXMgKiBsaW5lc2l6ZSkpCi0gKiAweDAwMDEwZWEwIDB4MDAwMTB4eHggRnJlZQotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc3JhbV9jaGFubmVsIGN4MjM4ODVfc3JhbV9jaGFubmVsc1tdID0gewotCVtTUkFNX0NIMDFdID0gewotCQkubmFtZQkJPSAiVklEIEEiLAotCQkuY21kc19zdGFydAk9IDB4MTAwMDAsCi0JCS5jdHJsX3N0YXJ0CT0gMHgxMDViMCwKLQkJLmNkdAkJPSAweDEwN2IwLAotCQkuZmlmb19zdGFydAk9IDB4NDAsCi0JCS5maWZvX3NpemUJPSAweDI4MDAsCi0JCS5wdHIxX3JlZwk9IERNQTFfUFRSMSwKLQkJLnB0cjJfcmVnCT0gRE1BMV9QVFIyLAotCQkuY250MV9yZWcJPSBETUExX0NOVDEsCi0JCS5jbnQyX3JlZwk9IERNQTFfQ05UMiwKLQkJLmp1bXBvbmx5CT0gMSwKLQl9LAotCVtTUkFNX0NIMDJdID0gewotCQkubmFtZQkJPSAiY2gyIiwKLQkJLmNtZHNfc3RhcnQJPSAweDAsCi0JCS5jdHJsX3N0YXJ0CT0gMHgwLAotCQkuY2R0CQk9IDB4MCwKLQkJLmZpZm9fc3RhcnQJPSAweDAsCi0JCS5maWZvX3NpemUJPSAweDAsCi0JCS5wdHIxX3JlZwk9IERNQTJfUFRSMSwKLQkJLnB0cjJfcmVnCT0gRE1BMl9QVFIyLAotCQkuY250MV9yZWcJPSBETUEyX0NOVDEsCi0JCS5jbnQyX3JlZwk9IERNQTJfQ05UMiwKLQl9LAotCVtTUkFNX0NIMDNdID0gewotCQkubmFtZQkJPSAiVFMxIEIiLAotCQkuY21kc19zdGFydAk9IDB4MTAwQTAsCi0JCS5jdHJsX3N0YXJ0CT0gMHgxMDYzMCwKLQkJLmNkdAkJPSAweDEwODcwLAotCQkuZmlmb19zdGFydAk9IDB4NTAwMCwKLQkJLmZpZm9fc2l6ZQk9IDB4MTAwMCwKLQkJLnB0cjFfcmVnCT0gRE1BM19QVFIxLAotCQkucHRyMl9yZWcJPSBETUEzX1BUUjIsCi0JCS5jbnQxX3JlZwk9IERNQTNfQ05UMSwKLQkJLmNudDJfcmVnCT0gRE1BM19DTlQyLAotCX0sCi0JW1NSQU1fQ0gwNF0gPSB7Ci0JCS5uYW1lCQk9ICJjaDQiLAotCQkuY21kc19zdGFydAk9IDB4MCwKLQkJLmN0cmxfc3RhcnQJPSAweDAsCi0JCS5jZHQJCT0gMHgwLAotCQkuZmlmb19zdGFydAk9IDB4MCwKLQkJLmZpZm9fc2l6ZQk9IDB4MCwKLQkJLnB0cjFfcmVnCT0gRE1BNF9QVFIxLAotCQkucHRyMl9yZWcJPSBETUE0X1BUUjIsCi0JCS5jbnQxX3JlZwk9IERNQTRfQ05UMSwKLQkJLmNudDJfcmVnCT0gRE1BNF9DTlQyLAotCX0sCi0JW1NSQU1fQ0gwNV0gPSB7Ci0JCS5uYW1lCQk9ICJjaDUiLAotCQkuY21kc19zdGFydAk9IDB4MCwKLQkJLmN0cmxfc3RhcnQJPSAweDAsCi0JCS5jZHQJCT0gMHgwLAotCQkuZmlmb19zdGFydAk9IDB4MCwKLQkJLmZpZm9fc2l6ZQk9IDB4MCwKLQkJLnB0cjFfcmVnCT0gRE1BNV9QVFIxLAotCQkucHRyMl9yZWcJPSBETUE1X1BUUjIsCi0JCS5jbnQxX3JlZwk9IERNQTVfQ05UMSwKLQkJLmNudDJfcmVnCT0gRE1BNV9DTlQyLAotCX0sCi0JW1NSQU1fQ0gwNl0gPSB7Ci0JCS5uYW1lCQk9ICJUUzIgQyIsCi0JCS5jbWRzX3N0YXJ0CT0gMHgxMDE0MCwKLQkJLmN0cmxfc3RhcnQJPSAweDEwNjgwLAotCQkuY2R0CQk9IDB4MTA4ZDAsCi0JCS5maWZvX3N0YXJ0CT0gMHg2MDAwLAotCQkuZmlmb19zaXplCT0gMHgxMDAwLAotCQkucHRyMV9yZWcJPSBETUE1X1BUUjEsCi0JCS5wdHIyX3JlZwk9IERNQTVfUFRSMiwKLQkJLmNudDFfcmVnCT0gRE1BNV9DTlQxLAotCQkuY250Ml9yZWcJPSBETUE1X0NOVDIsCi0JfSwKLQlbU1JBTV9DSDA3XSA9IHsKLQkJLm5hbWUJCT0gImNoNyIsCi0JCS5jbWRzX3N0YXJ0CT0gMHgwLAotCQkuY3RybF9zdGFydAk9IDB4MCwKLQkJLmNkdAkJPSAweDAsCi0JCS5maWZvX3N0YXJ0CT0gMHgwLAotCQkuZmlmb19zaXplCT0gMHgwLAotCQkucHRyMV9yZWcJPSBETUE2X1BUUjEsCi0JCS5wdHIyX3JlZwk9IERNQTZfUFRSMiwKLQkJLmNudDFfcmVnCT0gRE1BNl9DTlQxLAotCQkuY250Ml9yZWcJPSBETUE2X0NOVDIsCi0JfSwKLQlbU1JBTV9DSDA4XSA9IHsKLQkJLm5hbWUJCT0gImNoOCIsCi0JCS5jbWRzX3N0YXJ0CT0gMHgwLAotCQkuY3RybF9zdGFydAk9IDB4MCwKLQkJLmNkdAkJPSAweDAsCi0JCS5maWZvX3N0YXJ0CT0gMHgwLAotCQkuZmlmb19zaXplCT0gMHgwLAotCQkucHRyMV9yZWcJPSBETUE3X1BUUjEsCi0JCS5wdHIyX3JlZwk9IERNQTdfUFRSMiwKLQkJLmNudDFfcmVnCT0gRE1BN19DTlQxLAotCQkuY250Ml9yZWcJPSBETUE3X0NOVDIsCi0JfSwKLQlbU1JBTV9DSDA5XSA9IHsKLQkJLm5hbWUJCT0gImNoOSIsCi0JCS5jbWRzX3N0YXJ0CT0gMHgwLAotCQkuY3RybF9zdGFydAk9IDB4MCwKLQkJLmNkdAkJPSAweDAsCi0JCS5maWZvX3N0YXJ0CT0gMHgwLAotCQkuZmlmb19zaXplCT0gMHgwLAotCQkucHRyMV9yZWcJPSBETUE4X1BUUjEsCi0JCS5wdHIyX3JlZwk9IERNQThfUFRSMiwKLQkJLmNudDFfcmVnCT0gRE1BOF9DTlQxLAotCQkuY250Ml9yZWcJPSBETUE4X0NOVDIsCi0JfSwKLX07Ci0KIC8qIEZJWE1FLCB0aGVzZSBhbGxvY2F0aW9ucyB3aWxsIGNoYW5nZSB3aGVuCiAgKiBhbmFsb2cgYXJyaXZlcy4gVGhlIGJlIHJldmlld2VkLgogICogQ1gyMzg4NyBBc3N1bXB0aW9ucwpAQCAtNzU0LDYgKzYyMyw3IEBACiAJYXRvbWljX2luYygmZGV2LT5yZWZjb3VudCk7CiAKIAlkZXYtPm5yID0gY3gyMzg4NV9kZXZjb3VudCsrOworCWRldi0+c3JhbV9jaGFubmVscyA9IGN4MjM4ODdfc3JhbV9jaGFubmVsczsKIAlzcHJpbnRmKGRldi0+bmFtZSwgImN4MjM4ODVbJWRdIiwgZGV2LT5ucik7CiAKIAltdXRleF9sb2NrKCZkZXZsaXN0KTsKQEAgLTc2MywxMyArNjMzLDExIEBACiAJLyogQ29uZmlndXJlIHRoZSBpbnRlcm5hbCBtZW1vcnkgKi8KIAlpZihkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg4MCkgewogCQlkZXYtPmJyaWRnZSA9IENYMjM4ODVfQlJJREdFXzg4NzsKLQkJZGV2LT5zcmFtX2NoYW5uZWxzID0gY3gyMzg4N19zcmFtX2NoYW5uZWxzOwogCQkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJCWRldi0+Y2xrX2ZyZXEgPSAyNTAwMDAwMDsKIAl9IGVsc2UKIAlpZihkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg1MikgewogCQlkZXYtPmJyaWRnZSA9IENYMjM4ODVfQlJJREdFXzg4NTsKLQkJZGV2LT5zcmFtX2NoYW5uZWxzID0gY3gyMzg4NV9zcmFtX2NoYW5uZWxzOwogCQkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJCWRldi0+Y2xrX2ZyZXEgPSAyODAwMDAwMDsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IGU2YjdmNTEuLjhjOWE4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMjE5Niw2ICsyMTk2LDExIEBACiAJY3g4OF9yZXNldChjb3JlKTsKIAljeDg4X2NhcmRfc2V0dXBfcHJlX2kyYyhjb3JlKTsKIAljeDg4X2kyY19pbml0KGNvcmUsIHBjaSk7CisKKwkvKiBsb2FkIHR1bmVyIG1vZHVsZSwgaWYgbmVlZGVkICovCisJaWYgKFRVTkVSX0FCU0VOVCAhPSBjb3JlLT5ib2FyZC50dW5lcl90eXBlKQorCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKKwogCWN4ODhfY2FsbF9pMmNfY2xpZW50cyAoY29yZSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOwogCWN4ODhfY2FyZF9zZXR1cChjb3JlKTsKIAljeDg4X2lyX2luaXQoY29yZSwgcGNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCAwYWVkYmVhLi5lMzU3ZjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC02MDksMTMgKzYwOSwxOSBAQAogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CiAKIAkvKiBGYWlsIGEgcmVxdWVzdCBmb3IgaGFyZHdhcmUgaWYgdGhlIGRldmljZSBpcyBidXN5LiAqLwotCWlmIChjb3JlLT5hY3RpdmVfdHlwZV9pZCAhPSBDWDg4X0JPQVJEX05PTkUpCisJaWYgKGNvcmUtPmFjdGl2ZV90eXBlX2lkICE9IENYODhfQk9BUkRfTk9ORSAmJgorCSAgICBjb3JlLT5hY3RpdmVfdHlwZV9pZCAhPSBkcnYtPnR5cGVfaWQpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoZHJ2LT5hZHZpc2VfYWNxdWlyZSkKIAl7Ci0JCWNvcmUtPmFjdGl2ZV90eXBlX2lkID0gZHJ2LT50eXBlX2lkOwotCQlkcnYtPmFkdmlzZV9hY3F1aXJlKGRydik7CisJCW11dGV4X2xvY2soJmRydi0+Y29yZS0+bG9jayk7CisJCWNvcmUtPmFjdGl2ZV9yZWYrKzsKKwkJaWYgKGNvcmUtPmFjdGl2ZV90eXBlX2lkID09IENYODhfQk9BUkRfTk9ORSkgeworCQkJY29yZS0+YWN0aXZlX3R5cGVfaWQgPSBkcnYtPnR5cGVfaWQ7CisJCQlkcnYtPmFkdmlzZV9hY3F1aXJlKGRydik7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZkcnYtPmNvcmUtPmxvY2spOwogCiAJCW1wZWdfZGJnKDEsIiVzKCkgUG9zdCBhY3F1aXJlIEdQSU89JXhcbiIsIF9fRlVOQ1RJT05fXywgY3hfcmVhZChNT19HUDBfSU8pKTsKIAl9CkBAIC02MjgsMTIgKzYzNCwxNCBAQAogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CiAKLQlpZiAoZHJ2LT5hZHZpc2VfcmVsZWFzZSkKKwltdXRleF9sb2NrKCZkcnYtPmNvcmUtPmxvY2spOworCWlmIChkcnYtPmFkdmlzZV9yZWxlYXNlICYmIC0tY29yZS0+YWN0aXZlX3JlZiA9PSAwKQogCXsKIAkJZHJ2LT5hZHZpc2VfcmVsZWFzZShkcnYpOwogCQljb3JlLT5hY3RpdmVfdHlwZV9pZCA9IENYODhfQk9BUkRfTk9ORTsKIAkJbXBlZ19kYmcoMSwiJXMoKSBQb3N0IHJlbGVhc2UgR1BJTz0leFxuIiwgX19GVU5DVElPTl9fLCBjeF9yZWFkKE1PX0dQMF9JTykpOwogCX0KKwltdXRleF91bmxvY2soJmRydi0+Y29yZS0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IDdmMTkzMWEuLjIyNzE3OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtMTgyNiw4ICsxODI2LDYgQEAKIAljeF9zZXQoTU9fUENJX0lOVE1TSywgY29yZS0+cGNpX2lycW1hc2spOwogCiAJLyogbG9hZCBhbmQgY29uZmlndXJlIGhlbHBlciBtb2R1bGVzICovCi0JaWYgKFRVTkVSX0FCU0VOVCAhPSBjb3JlLT5ib2FyZC50dW5lcl90eXBlKQotCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKIAogCWlmIChjb3JlLT5ib2FyZC5hdWRpb19jaGlwID09IEFVRElPX0NISVBfV004Nzc1KQogCQlyZXF1ZXN0X21vZHVsZSgid204Nzc1Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCA0ZTgyM2YyLi4zN2U2ZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTMzNiw2ICszMzYsNyBAQAogCS8qIGN4ODgtdmlkZW8gbmVlZHMgdG8gYWNjZXNzIGN4ODgwMiBmb3IgaHlicmlkIHR1bmVyIHBsbCBhY2Nlc3MuICovCiAJc3RydWN0IGN4ODgwMl9kZXYgICAgICAgICAgKmR2YmRldjsKIAllbnVtIGN4ODhfYm9hcmRfdHlwZSAgICAgICBhY3RpdmVfdHlwZV9pZDsKKwlpbnQJCQkgICBhY3RpdmVfcmVmOwogfTsKIAogc3RydWN0IGN4ODgwMF9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RwYzcxNDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZHBjNzE0Ni5jCmluZGV4IDU2NmU0NzkuLjljZWI2YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZHBjNzE0Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZHBjNzE0Ni5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRwYy0+aTJjX2FkYXB0ZXIuZGV2LCBkcGMsIGRwY19jaGVja19jbGllbnRzKTsKIAogCS8qIGNoZWNrIGlmIGFsbCBkZXZpY2VzIGFyZSBwcmVzZW50ICovCi0JaWYoIDAgPT0gZHBjLT5zYWE3MTExYSApIHsKKwlpZiAoIWRwYy0+c2FhNzExMWEpIHsKIAkJREVCX0QoKCJkcGNfdjRsMi5vOiBkcGNfYXR0YWNoIGZhaWxlZCBmb3IgdGhpcyBkZXZpY2UuXG4iKSk7CiAJCWkyY19kZWxfYWRhcHRlcigmZHBjLT5pMmNfYWRhcHRlcik7CiAJCWtmcmVlKGRwYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDk0MTM1N2MuLjhjNjdmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgpAQCAtMjcwLDggKzI2OSwxMSBAQAogCWRwcmludGsoIm9wZW5pbmcgZGV2aWNlIGFuZCB0cnlpbmcgdG8gYWNxdWlyZSBleGNsdXNpdmUgbG9ja1xuIik7CiAKIAkvKiBTZXRzIHZvbHVtZSwgbXV0ZSwgZXRjICovCisKIAlkZXYtPm11dGUgPSAwOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJcmV0ID0gZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwogCkBAIC0zMDMsNyArMzA1LDkgQEAKIAlkcHJpbnRrKCJjbG9zaW5nIGRldmljZVxuIik7CiAKIAlkZXYtPm11dGUgPSAxOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlpZiAoZGV2LT5hZGV2LT51c2VycyA9PSAwICYmIGRldi0+YWRldi0+c2h1dGRvd24gPT0gMSkgewogCQlkcHJpbnRrKCJhdWRpbyB1c2VyczogJWRcbiIsIGRldi0+YWRldi0+dXNlcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCAyMTU5ZDAxLi5hYWU3NzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMzkzLDE1ICszOTMsMTUgQEAKIAkJLmlucHV0ICAgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogfTsKQEAgLTQ0MSw2ICs0NDEsOCBAQAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MCB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NjUwMCksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDY1MDIpLAorCQkJLmRyaXZlcl9pbmZvID0gRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg2NTEzKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzk1MCB9LAogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDA0MiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCBmNmI3ODM1Li5jMWNhYWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTcyLDcgKzcyLDggQEAKIAljb25zdCBzaXplX3QgaW1hZ2VzaXplID0gUEFHRV9BTElHTihkZXYtPmZyYW1lX3NpemUpOwkvKm5lZWRzIHRvIGJlIHBhZ2UgYWxpZ25lZCBjYXVzZSB0aGUgYnVmZmVycyBjYW4gYmUgbWFwcGVkIGluZGl2aWR1YWxseSEgKi8KIAl2b2lkICpidWZmID0gTlVMTDsKIAl1MzIgaTsKLQllbTI4eHhfY29yZWRiZygicmVxdWVzdGVkICVpIGJ1ZmZlcnMgd2l0aCBzaXplICV6aSIsIGNvdW50LCBpbWFnZXNpemUpOworCWVtMjh4eF9jb3JlZGJnKCJyZXF1ZXN0ZWQgJWkgYnVmZmVycyB3aXRoIHNpemUgJXppXG4iLAorCQkJY291bnQsIGltYWdlc2l6ZSk7CiAJaWYgKGNvdW50ID4gRU0yOFhYX05VTV9GUkFNRVMpCiAJCWNvdW50ID0gRU0yOFhYX05VTV9GUkFNRVM7CiAKQEAgLTE1MCw3ICsxNTEsNyBAQAogCWlmIChyZWdfZGVidWcpewogCQlwcmludGsocmV0IDwgMCA/ICIgZmFpbGVkIVxuIiA6ICIlMDJ4IHZhbHVlczogIiwgcmV0KTsKIAkJZm9yIChieXRlID0gMDsgYnl0ZSA8IGxlbjsgYnl0ZSsrKSB7Ci0JCQlwcmludGsoIiAlMDJ4IiwgYnVmW2J5dGVdKTsKKwkJCXByaW50aygiICUwMngiLCAodW5zaWduZWQgY2hhcilidWZbYnl0ZV0pOwogCQl9CiAJCXByaW50aygiXG4iKTsKIAl9CkBAIC0xNzcsNyArMTc4LDggQEAKIAkJCSAgICAgIDB4MDAwMCwgcmVnLCAmdmFsLCAxLCBIWik7CiAKIAlpZiAocmVnX2RlYnVnKQotCQlwcmludGsocmV0IDwgMCA/ICIgZmFpbGVkIVxuIiA6ICIlMDJ4XG4iLCB2YWwpOworCQlwcmludGsocmV0IDwgMCA/ICIgZmFpbGVkIVxuIiA6CisJCQkJICIlMDJ4XG4iLCAodW5zaWduZWQgY2hhcikgdmFsKTsKIAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMjM3LDcgKzIzOSw3IEBACiAgKiBzZXRzIG9ubHkgc29tZSBiaXRzIChzcGVjaWZpZWQgYnkgYml0bWFzaykgb2YgYSByZWdpc3RlciwgYnkgZmlyc3QgcmVhZGluZwogICogdGhlIGFjdHVhbCB2YWx1ZQogICovCi1pbnQgZW0yOHh4X3dyaXRlX3JlZ19iaXRzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsLAorc3RhdGljIGludCBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgcmVnLCB1OCB2YWwsCiAJCQkJIHU4IGJpdG1hc2spCiB7CiAJaW50IG9sZHZhbDsKQEAgLTI1NCwyNiArMjU2LDMxIEBACiAgKi8KIHN0YXRpYyBpbnQgZW0yOHh4X3dyaXRlX2FjOTcoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZWcsIHU4ICp2YWwpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCXU4IGFkZHIgPSByZWcgJiAweDdmOwogCWlmICgocmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBBQzk3TFNCX1JFRywgdmFsLCAyKSkgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICgocmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBBQzk3QUREUl9SRUcsICZhZGRyLCAxKSkgPCAwKQogCQlyZXR1cm4gcmV0OwotCWlmICgocmV0ID0gZW0yOHh4X3JlYWRfcmVnKGRldiwgQUM5N0JVU1lfUkVHKSkgPCAwKQotCQlyZXR1cm4gcmV0OwotCWVsc2UgaWYgKCgodTgpIHJldCkgJiAweDAxKSB7Ci0JCWVtMjh4eF93YXJuICgiQUM5NyBjb21tYW5kIHN0aWxsIGJlaW5nIGV4ZWN1dGVkOiBub3QgaGFuZGxlZCBwcm9wZXJseSFcbiIpOworCisJLyogV2FpdCB1cCB0byA1MCBtcyBmb3IgQUM5NyBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaWYgKChyZXQgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBBQzk3QlVTWV9SRUcpKSA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpZiAoIShyZXQgJiAweDAxKSkKKwkJCXJldHVybiAwOworCQltc2xlZXAoNSk7CiAJfQorCWVtMjh4eF93YXJuICgiQUM5NyBjb21tYW5kIHN0aWxsIGJlaW5nIGV4ZWN1dGVkOiBub3QgaGFuZGxlZCBwcm9wZXJseSFcbiIpOwogCXJldHVybiAwOwogfQogCi1pbnQgZW0yOHh4X3NldF9hdWRpb19zb3VyY2Uoc3RydWN0IGVtMjh4eCAqZGV2KQorc3RhdGljIGludCBlbTI4eHhfc2V0X2F1ZGlvX3NvdXJjZShzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CiAJc3RhdGljIGNoYXIgKmVuYWJsZSAgPSAiXHgwOFx4MDgiOwogCXN0YXRpYyBjaGFyICpkaXNhYmxlID0gIlx4MDhceDg4IjsKIAljaGFyICp2aWRlbyA9IGVuYWJsZSwgKmxpbmUgPSBkaXNhYmxlOwotCWludCByZXQsIG5vX2FjOTc7CisJaW50IHJldDsKIAl1OCBpbnB1dDsKIAogCWlmIChkZXYtPmlzX2VtMjgwMCkgewpAQCAtMjkzLDExICszMDAsOSBAQAogCQlzd2l0Y2ggKGRldi0+Y3RsX2FpbnB1dCkgewogCQljYXNlIEVNMjhYWF9BTVVYX1ZJREVPOgogCQkJaW5wdXQgPSBFTTI4WFhfQVVESU9fU1JDX1RVTkVSOwotCQkJbm9fYWM5NyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBFTTI4WFhfQU1VWF9MSU5FX0lOOgogCQkJaW5wdXQgPSBFTTI4WFhfQVVESU9fU1JDX0xJTkU7Ci0JCQlub19hYzk3ID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIEVNMjhYWF9BTVVYX0FDOTdfVklERU86CiAJCQlpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfTElORTsKQEAgLTMxMywxMiArMzE4LDExIEBACiAJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgQVVESU9TUkNfUkVHLCBpbnB1dCwgMHhjMCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CisJbXNsZWVwKDUpOwogCi0JaWYgKG5vX2FjOTcpCi0JCXJldHVybiAwOwotCi0JLyogU2V0cyBBQzk3IG1peGVyIHJlZ2lzdGVycyAqLwotCisJLyogU2V0cyBBQzk3IG1peGVyIHJlZ2lzdGVycworCSAgIFRoaXMgaXMgc2VlbXMgdG8gYmUgbmVlZGVkLCBldmVuIGZvciBub24tYWM5NyBjb25maWdzCisJICovCiAJcmV0ID0gZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBWSURFT19BQzk3LCB2aWRlbyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC0zMzcsOSArMzQxLDEwIEBACiAJc1swXSB8PSAweDFmIC0gZGV2LT52b2x1bWU7CiAJc1sxXSB8PSAweDFmIC0gZGV2LT52b2x1bWU7CiAKLQlpZiAoZGV2LT5tdXRlKQotCQlzWzFdIHw9IDB4ODA7CisJLyogTXV0ZSAqLworCXNbMV0gfD0gMHg4MDsKIAlyZXQgPSBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIE1BU1RFUl9BQzk3LCBzKTsKKwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0zNTcsNiArMzYyLDExIEBACiAJLyogU2VsZWN0cyB0aGUgcHJvcGVyIGF1ZGlvIGlucHV0ICovCiAJcmV0ID0gZW0yOHh4X3NldF9hdWRpb19zb3VyY2UoZGV2KTsKIAorCS8qIFVubXV0ZSBkZXZpY2UgKi8KKwlpZiAoIWRldi0+bXV0ZSkKKwkJc1sxXSAmPSB+MHg4MDsKKwlyZXQgPSBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIE1BU1RFUl9BQzk3LCBzKTsKKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbTI4eHhfYXVkaW9fYW5hbG9nX3NldCk7CkBAIC02NjcsNyArNjc3LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPgotCQkJCQkJIGRldi0+bWF4X3BrdF9zaXplKSB7CisJCQkgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGgpIHsKIAkJCQllbTI4eHhfaXNvY2RiZygicGFja2V0IGJpZ2dlciB0aGFuIHBhY2tldCBzaXplIik7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC03MTMsOCArNzIzLDExIEBACiAJZm9yIChpID0gMDsgaSA8IEVNMjhYWF9OVU1fQlVGUzsgaSsrKSB7CiAJCWlmIChkZXYtPnVyYltpXSkgewogCQkJdXNiX2tpbGxfdXJiKGRldi0+dXJiW2ldKTsKLQkJCWlmIChkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSl7Ci0JCQkJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwoRU0yOFhYX05VTV9QQUNLRVRTKmRldi0+bWF4X3BrdF9zaXplKSxkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSxkZXYtPnVyYltpXS0+dHJhbnNmZXJfZG1hKTsKKwkJCWlmIChkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsCisJCQkJCQlkZXYtPnVyYltpXS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJCWRldi0+dHJhbnNmZXJfYnVmZmVyW2ldLAorCQkJCQkJZGV2LT51cmJbaV0tPnRyYW5zZmVyX2RtYSk7CiAJCQl9CiAJCQl1c2JfZnJlZV91cmIoZGV2LT51cmJbaV0pOwogCQl9CkBAIC03MzIsNyArNzQ1LDEwIEBACiB7CiAJLyogY2hhbmdlIGludGVyZmFjZSB0byAzIHdoaWNoIGFsbG93cyB0aGUgYmlnZ2VzdCBwYWNrZXQgc2l6ZXMgKi8KIAlpbnQgaSwgZXJyQ29kZTsKLQljb25zdCBpbnQgc2Jfc2l6ZSA9IEVNMjhYWF9OVU1fUEFDS0VUUyAqIGRldi0+bWF4X3BrdF9zaXplOworCWludCBzYl9zaXplOworCisJZW0yOHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKKwlzYl9zaXplID0gRU0yOFhYX05VTV9QQUNLRVRTICogZGV2LT5tYXhfcGt0X3NpemU7CiAKIAkvKiByZXNldCBzdHJlYW1pbmcgdmFycyAqLwogCWRldi0+ZnJhbWVfY3VycmVudCA9IE5VTEw7CkBAIC03NDEsNyArNzU3LDcgQEAKIAkvKiBhbGxvY2F0ZSB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IEVNMjhYWF9OVU1fQlVGUzsgaSsrKSB7CiAJCXN0cnVjdCB1cmIgKnVyYjsKLQkJaW50IGosIGs7CisJCWludCBqOwogCQkvKiBhbGxvY2F0ZSB0cmFuc2ZlciBidWZmZXIgKi8KIAkJdXJiID0gdXNiX2FsbG9jX3VyYihFTTI4WFhfTlVNX1BBQ0tFVFMsIEdGUF9LRVJORUwpOwogCQlpZiAoIXVyYil7CkBAIC03NDksNyArNzY1LDkgQEAKIAkJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJZGV2LT50cmFuc2Zlcl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dWRldiwgc2Jfc2l6ZSwgR0ZQX0tFUk5FTCwmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LT51ZGV2LCBzYl9zaXplLAorCQkJCQkJCSAgIEdGUF9LRVJORUwsCisJCQkJCQkJICAgJnVyYi0+dHJhbnNmZXJfZG1hKTsKIAkJaWYgKCFkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSkgewogCQkJZW0yOHh4X2VycmRldgogCQkJCQkoInVuYWJsZSB0byBhbGxvY2F0ZSAlaSBieXRlcyBmb3IgdHJhbnNmZXIgYnVmZmVyICVpXG4iLApAQCAtNzYyLDIyICs3ODAsMjIgQEAKIAkJdXJiLT5kZXYgPSBkZXYtPnVkZXY7CiAJCXVyYi0+Y29udGV4dCA9IGRldjsKIAkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldi0+dWRldiwgMHg4Mik7Ci0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAkJdXJiLT5pbnRlcnZhbCA9IDE7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gZGV2LT50cmFuc2Zlcl9idWZmZXJbaV07CiAJCXVyYi0+Y29tcGxldGUgPSBlbTI4eHhfaXNvY0lycTsKIAkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEVNMjhYWF9OVU1fUEFDS0VUUzsKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2Jfc2l6ZTsKLQkJZm9yIChqID0gayA9IDA7IGogPCBFTTI4WFhfTlVNX1BBQ0tFVFM7Ci0JCQkJaisrLCBrICs9IGRldi0+bWF4X3BrdF9zaXplKSB7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGs7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9Ci0JCQkJZGV2LT5tYXhfcGt0X3NpemU7CisJCWZvciAoaiA9IDA7IGogPCBFTTI4WFhfTlVNX1BBQ0tFVFM7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBqICogZGV2LT5tYXhfcGt0X3NpemU7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IGRldi0+bWF4X3BrdF9zaXplOwogCQl9CiAJCWRldi0+dXJiW2ldID0gdXJiOwogCX0KIAogCS8qIHN1Ym1pdCB1cmJzICovCisJZW0yOHh4X2NvcmVkYmcoIlN1Ym1pdHRpbmcgJWQgdXJicyBvZiAlZCBwYWNrZXRzICglZCBlYWNoKVxuIiwKKwkJICAgICAgIEVNMjhYWF9OVU1fQlVGUywgRU0yOFhYX05VTV9QQUNLRVRTLCBkZXYtPm1heF9wa3Rfc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IEVNMjhYWF9OVU1fQlVGUzsgaSsrKSB7CiAJCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYltpXSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChlcnJDb2RlKSB7CkBAIC03OTQsMjIgKzgxMiwzMSBAQAogaW50IGVtMjh4eF9zZXRfYWx0ZXJuYXRlKHN0cnVjdCBlbTI4eHggKmRldikKIHsKIAlpbnQgZXJyQ29kZSwgcHJldl9hbHQgPSBkZXYtPmFsdDsKLQlkZXYtPmFsdCA9IGFsdDsKLQlpZiAoZGV2LT5hbHQgPT0gMCkgewotCQlpbnQgaTsKLQkJZm9yKGk9MDtpPCBkZXYtPm51bV9hbHQ7IGkrKykKLQkJCWlmKGRldi0+YWx0X21heF9wa3Rfc2l6ZVtpXT5kZXYtPmFsdF9tYXhfcGt0X3NpemVbZGV2LT5hbHRdKQotCQkJCWRldi0+YWx0PWk7Ci0JfQorCWludCBpOworCXVuc2lnbmVkIGludCBtaW5fcGt0X3NpemUgPSBkZXYtPmJ5dGVzcGVybGluZSs0OworCisJLyogV2hlbiBpbWFnZSBzaXplIGlzIGJpZ2dlciB0aGFuIGEgY2VpcnRhaW4gdmFsdWUsCisJICAgdGhlIGZyYW1lIHNpemUgc2hvdWxkIGJlIGluY3JlYXNlZCwgb3RoZXJ3aXNlLCBvbmx5CisJICAgZ3JlZW4gc2NyZWVuIHdpbGwgYmUgcmVjZWl2ZWQuCisJICovCisJaWYgKGRldi0+ZnJhbWVfc2l6ZSA+IDcyMCoyNDAqMikKKwkJbWluX3BrdF9zaXplICo9IDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fYWx0OyBpKyspCisJCWlmIChkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0gPj0gbWluX3BrdF9zaXplKQorCQkJYnJlYWs7CisJZGV2LT5hbHQgPSBpOwogCiAJaWYgKGRldi0+YWx0ICE9IHByZXZfYWx0KSB7CisJCWVtMjh4eF9jb3JlZGJnKCJtaW5pbXVtIGlzb2MgcGFja2V0IHNpemU6ICV1IChhbHQ9JWQpXG4iLAorCQkJCW1pbl9wa3Rfc2l6ZSwgZGV2LT5hbHQpOwogCQlkZXYtPm1heF9wa3Rfc2l6ZSA9IGRldi0+YWx0X21heF9wa3Rfc2l6ZVtkZXYtPmFsdF07Ci0JCWVtMjh4eF9jb3JlZGJnKCJzZXR0aW5nIGFsdGVybmF0ZSAlZCB3aXRoIHdNYXhQYWNrZXRTaXplPSV1XG4iLCBkZXYtPmFsdCwKLQkJICAgICAgIGRldi0+bWF4X3BrdF9zaXplKTsKKwkJZW0yOHh4X2NvcmVkYmcoInNldHRpbmcgYWx0ZXJuYXRlICVkIHdpdGggd01heFBhY2tldFNpemU9JXVcbiIsCisJCQkgICAgICAgZGV2LT5hbHQsIGRldi0+bWF4X3BrdF9zaXplKTsKIAkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dWRldiwgMCwgZGV2LT5hbHQpOwogCQlpZiAoZXJyQ29kZSA8IDApIHsKIAkJCWVtMjh4eF9lcnJkZXYgKCJjYW5ub3QgY2hhbmdlIGFsdGVybmF0ZSBudW1iZXIgdG8gJWQgKGVycm9yPSVpKVxuIiwKLQkJCQkJCQlkZXYtPmFsdCwgZXJyQ29kZSk7CisJCQkJCWRldi0+YWx0LCBlcnJDb2RlKTsKIAkJCXJldHVybiBlcnJDb2RlOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCBhMGMzMzQ2Li40YWJlNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CiAJfQogCi0JZW0yOHh4X3NldF9hdWRpb19zb3VyY2UoZGV2KTsKKwllbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOwogfQogCiAvKiBVc2FnZSBsb2NrIGNoZWNrIGZ1bmN0aW9ucyAqLwpAQCAtODMwLDYgKzgzMCw2MyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBlbTI4eHhfcmVnX2xlbihpbnQgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBBQzk3TFNCX1JFRzoKKwljYXNlIEhTQ0FMRUxPV19SRUc6CisJY2FzZSBWU0NBTEVMT1dfUkVHOgorCQlyZXR1cm4gMjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGVtMjh4eF9maCAgICAgICpmaCAgPSBwcml2OworCXN0cnVjdCBlbTI4eHggICAgICAgICAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVtMjh4eF9yZWdfbGVuKHJlZy0+cmVnKSA9PSAxKSB7CisJCXJldCA9IGVtMjh4eF9yZWFkX3JlZyhkZXYsIHJlZy0+cmVnKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJlZy0+dmFsID0gcmV0OworCX0gZWxzZSB7CisJCXU2NCB2YWwgPSAwOworCQlyZXQgPSBlbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihkZXYsIFVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCQkJCSAgIHJlZy0+cmVnLCAoY2hhciAqKSZ2YWwsIDIpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmVnLT52YWwgPSBjcHVfdG9fbGU2NCgoX191NjQpdmFsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OworCXU2NCBidWY7CisKKwlidWYgPSBsZTY0X3RvX2NwdSgoX191NjQpcmVnLT52YWwpOworCisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgcmVnLT5yZWcsIChjaGFyICopJmJ1ZiwKKwkJCQkgZW0yOHh4X3JlZ19sZW4ocmVnLT5yZWcpKTsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBpbnQgdmlkaW9jX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNjKQogewpAQCAtMTI5NSw4ICsxMzUyLDYgQEAKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBmaDsKIAogCWlmIChkZXYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmIGRldi0+dXNlcnMgPT0gMCkgewotCQllbTI4eHhfc2V0X2FsdGVybmF0ZShkZXYpOwotCiAJCWRldi0+d2lkdGggPSBub3JtX21heHcoZGV2KTsKIAkJZGV2LT5oZWlnaHQgPSBub3JtX21heGgoZGV2KTsKIAkJZGV2LT5mcmFtZV9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKQEAgLTEzMDUsNiArMTM2MCw3IEBACiAJCWRldi0+aHNjYWxlID0gMDsKIAkJZGV2LT52c2NhbGUgPSAwOwogCisJCWVtMjh4eF9zZXRfYWx0ZXJuYXRlKGRldik7CiAJCWVtMjh4eF9jYXB0dXJlX3N0YXJ0KGRldiwgMSk7CiAJCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOwogCkBAIC0xNzMwLDYgKzE3ODYsMTAgQEAKIAkudmlkaW9jX3NfdHVuZXIgICAgICAgICAgICAgPSB2aWRpb2Nfc190dW5lciwKIAkudmlkaW9jX2dfZnJlcXVlbmN5ICAgICAgICAgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCiAJLnZpZGlvY19zX2ZyZXF1ZW5jeSAgICAgICAgID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgICAgICAgICAgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgICAgICAgICAgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgogCiAJLnR2bm9ybXMgICAgICAgICAgICAgICAgICAgID0gVjRMMl9TVERfQUxMLAogCS5jdXJyZW50X25vcm0gICAgICAgICAgICAgICA9IFY0TDJfU1REX1BBTCwKQEAgLTE3NTIsNiArMTgxMiwxMCBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgICA9IHZpZGlvY19zX2N0cmwsCiAJLnZpZGlvY19nX2ZyZXF1ZW5jeSAgID0gdmlkaW9jX2dfZnJlcXVlbmN5LAogCS52aWRpb2Nfc19mcmVxdWVuY3kgICA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyICAgID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyICAgID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB1c2IgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTc5NiwxMCArMTg2MCwxMCBAQAogfQogRVhQT1JUX1NZTUJPTChlbTI4eHhfdW5yZWdpc3Rlcl9leHRlbnNpb24pOwogCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlICplbTI4eHhfdmRldl9pbml0KHN0cnVjdCBlbTI4eHggKmRldiwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZW1wbGF0ZSwKLQkJCQkgICAgICBjb25zdCBpbnQgdHlwZSwKLQkJCQkgICAgICBjb25zdCBjaGFyICp0eXBlX25hbWUpCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqZW0yOHh4X3ZkZXZfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSAqdGVtcGxhdGUsCisJCQkJCSAgICAgY29uc3QgaW50IHR5cGUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqdHlwZV9uYW1lKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKIApAQCAtMjA2NCw2ICsyMTI4LDcgQEAKIAlzbnByaW50ZihkZXYtPm5hbWUsIDI5LCAiZW0yOHh4ICMlZCIsIG5yKTsKIAlkZXYtPmRldm5vID0gbnI7CiAJZGV2LT5tb2RlbCA9IGlkLT5kcml2ZXJfaW5mbzsKKwlkZXYtPmFsdCAgID0gLTE7CiAKIAkvKiBDaGVja3MgaWYgYXVkaW8gaXMgcHJvdmlkZWQgYnkgc29tZSBpbnRlcmZhY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdWRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggZjNiYWQwYy4uMDRlMGU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTMzLDcgKzMzLDcgQEAKICNkZWZpbmUgVU5TRVQgLTEKIAogLyogbWF4aW11bSBudW1iZXIgb2YgZW0yOHh4IGJvYXJkcyAqLwotI2RlZmluZSBFTTI4WFhfTUFYQk9BUkRTIDEgLypGSVhNRTogc2hvdWxkIGJlIGJpZ2dlciAqLworI2RlZmluZSBFTTI4WFhfTUFYQk9BUkRTIDQgLypGSVhNRTogc2hvdWxkIGJlIGJpZ2dlciAqLwogCiAvKiBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdGhhdCBjYW4gYmUgcXVldWVkICovCiAjZGVmaW5lIEVNMjhYWF9OVU1fRlJBTUVTIDUKQEAgLTM0NSw5ICszNDUsNiBAQAogaW50IGVtMjh4eF93cml0ZV9yZWdzX3JlcShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywgY2hhciAqYnVmLAogCQkJICBpbnQgbGVuKTsKIGludCBlbTI4eHhfd3JpdGVfcmVncyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIGNoYXIgKmJ1ZiwgaW50IGxlbik7Ci1pbnQgZW0yOHh4X3dyaXRlX3JlZ19iaXRzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsLAotCQkJICB1OCBiaXRtYXNrKTsKLWludCBlbTI4eHhfc2V0X2F1ZGlvX3NvdXJjZShzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogaW50IGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KHN0cnVjdCBlbTI4eHggKmRldik7CiAKIGludCBlbTI4eHhfY29sb3JsZXZlbHNfc2V0X2RlZmF1bHQoc3RydWN0IGVtMjh4eCAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggOTg1MTk4Ny4uZGFiYWZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGQ0MmYxMjAuLjk0OGNhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiaXZ0di12YmkuaCIKICNpbmNsdWRlICJpdnR2LXJvdXRpbmcuaCIKICNpbmNsdWRlICJpdnR2LWdwaW8uaCIKLSNpbmNsdWRlICJpdnR2LXl1di5oIgogCiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CkBAIC03MDAsNiArNjk5LDkgQEAKIAlpdHYtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU7CiAJaXR2LT52Ymkuc2xpY2VkX2luID0gJml0di0+dmJpLmluLmZtdC5zbGljZWQ7CiAKKwkvKiBJbml0IHRoZSBzZyB0YWJsZSBmb3Igb3NkL3l1diBvdXRwdXQgKi8KKwlzZ19pbml0X3RhYmxlKGl0di0+dWRtYS5TR2xpc3QsIElWVFZfRE1BX1NHX09TRF9FTlQpOworCiAJLyogT1NEICovCiAJaXR2LT5vc2RfZ2xvYmFsX2FscGhhX3N0YXRlID0gMTsKIAlpdHYtPm9zZF9nbG9iYWxfYWxwaGEgPSAyNTU7CkBAIC0xMDUzLDkgKzEwNTUsNiBAQAogCQlnb3RvIGZyZWVfaW87CiAJfQogCi0JLyogQ2hlY2sgeXV2IG91dHB1dCBmaWx0ZXIgdGFibGUgKi8KLQlpZiAoaXR2LT5oYXNfY3gyMzQxNSkgaXZ0dl95dXZfZmlsdGVyX2NoZWNrKGl0dik7Ci0KIAlpdnR2X2dwaW9faW5pdChpdHYpOwogCiAJLyogYWN0aXZlIGkyYyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IDQyNWViMTAuLjZkYmE1NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIml2dHYtZHJpdmVyLmgiCiAjaW5jbHVkZSAiaXZ0di1tYWlsYm94LmgiCiAjaW5jbHVkZSAiaXZ0di1maXJtd2FyZS5oIgorI2luY2x1ZGUgIml2dHYteXV2LmgiCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2RlZmluZSBJVlRWX01BU0tfU1BVX0VOQUJMRSAJCTB4RkZGRkZGRkUKQEAgLTIyNSwxMSArMjI2LDE0IEBACiAJCXJldHVybiAwOwogCiAJaXR2LT5kZWNfbWJveC5tYm94ID0gaXZ0dl9zZWFyY2hfbWFpbGJveChpdHYtPmRlY19tZW0sIElWVFZfREVDT0RFUl9TSVpFKTsKLQlpZiAoaXR2LT5kZWNfbWJveC5tYm94ID09IE5VTEwpCisJaWYgKGl0di0+ZGVjX21ib3gubWJveCA9PSBOVUxMKSB7CiAJCUlWVFZfRVJSKCJEZWNvZGVyIG1haWxib3ggbm90IGZvdW5kXG4iKTsKLQllbHNlIGlmIChpdHYtPmhhc19jeDIzNDE1ICYmIGl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1BJTkdfRlcsIDApKSB7CisJfSBlbHNlIGlmIChpdHYtPmhhc19jeDIzNDE1ICYmIGl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1BJTkdfRlcsIDApKSB7CiAJCUlWVFZfRVJSKCJEZWNvZGVyIGZpcm13YXJlIGRlYWQhXG4iKTsKIAkJaXR2LT5kZWNfbWJveC5tYm94ID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBGaXJtd2FyZSBva2F5LCBzbyBjaGVjayB5dXYgb3V0cHV0IGZpbHRlciB0YWJsZSAqLworCQlpdnR2X3l1dl9maWx0ZXJfY2hlY2soaXR2KTsKIAl9CiAJcmV0dXJuIGl0di0+ZGVjX21ib3gubWJveCA/IDAgOiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDIweHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQyMHh4LmMKaW5kZXggNThiYWI2NS4uNzRmZDZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDIweHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210MjB4eC5jCkBAIC02NDcsNyArNjQ3LDcgQEAKIAlkZWZhdWx0OgogCQl0dW5lcl9pbmZvKCJtaWNyb3R1bmUgJXMgZm91bmQsIG5vdCAoeWV0Pykgc3VwcG9ydGVkLCBzb3JyeSA6LS9cbiIsCiAJCQkgICBuYW1lKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCX0KIAogCXN0cmxjcHkoZmUtPm9wcy50dW5lcl9vcHMuaW5mby5uYW1lLCBuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKaW5kZXggYWRkNmQwZC4uY2I1YTUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCkBAIC0yMjEsOSArMjIxLDggQEAKIAlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJm14Yi0+aTJjX2FkYXB0ZXIuZGV2LCBteGIsIG14Yl9jaGVja19jbGllbnRzKTsKIAogCS8qIGNoZWNrIGlmIGFsbCBkZXZpY2VzIGFyZSBwcmVzZW50ICovCi0JaWYoICAgIDAgPT0gbXhiLT50ZWE2NDIwXzEJfHwgMCA9PSBteGItPnRlYTY0MjBfMgl8fCAwID09IG14Yi0+dGVhNjQxNWMKLQkgICAgfHwgMCA9PSBteGItPnRkYTk4NDAJfHwgMCA9PSBteGItPnNhYTcxMTFhCXx8IDAgPT0gbXhiLT50dW5lciApIHsKLQorCWlmICghbXhiLT50ZWE2NDIwXzEgfHwgIW14Yi0+dGVhNjQyMF8yIHx8ICFteGItPnRlYTY0MTVjIHx8CisJICAgICFteGItPnRkYTk4NDAgfHwgIW14Yi0+c2FhNzExMWEgfHwgIW14Yi0+dHVuZXIpIHsKIAkJcHJpbnRrKCJteGI6IGRpZCBub3QgZmluZCBhbGwgaTJjIGRldmljZXMuIGFib3J0aW5nXG4iKTsKIAkJaTJjX2RlbF9hZGFwdGVyKCZteGItPmkyY19hZGFwdGVyKTsKIAkJa2ZyZWUobXhiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYwppbmRleCBkNTVkNTgwLi42NTkwMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuYwppbmRleCA5ZDk0YWVkLi4xNjA0MzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAKIHN0YXRpYyB2b2lkIHB2cjJfY29udGV4dF9kZXN0cm95KHN0cnVjdCBwdnIyX2NvbnRleHQgKm1wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCmluZGV4IDQ2ZjE1NmYuLjVhM2U4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAlpZiAoIWNwdHIpIHJldHVybiAtRUlOVkFMOwogCUxPQ0tfVEFLRShjcHRyLT5oZHctPmJpZ19sb2NrKTsgZG8gewotCQlpZiAoY3B0ci0+aW5mby0+c2V0X3ZhbHVlICE9IDApIHsKKwkJaWYgKGNwdHItPmluZm8tPnNldF92YWx1ZSkgewogCQkJaWYgKGNwdHItPmluZm8tPnR5cGUgPT0gcHZyMl9jdGxfYml0bWFzaykgewogCQkJCW1hc2sgJj0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfYml0bWFzay52YWxpZF9iaXRzOwogCQkJfSBlbHNlIGlmIChjcHRyLT5pbmZvLT50eXBlID09IHB2cjJfY3RsX2ludCkgewpAQCAtMjY1LDcgKzI2NSw3IEBACiBpbnQgcHZyMl9jdHJsX2lzX3dyaXRhYmxlKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIpCiB7CiAJaWYgKCFjcHRyKSByZXR1cm4gMDsKLQlyZXR1cm4gY3B0ci0+aW5mby0+c2V0X3ZhbHVlICE9IDA7CisJcmV0dXJuIGNwdHItPmluZm8tPnNldF92YWx1ZSAhPSBOVUxMOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYwppbmRleCA0ZGY2ZDZkLi5mZTk5OTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCkBAIC0xNTUsNiArMTU1LDQxIEBACiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogSGF1cHBhdWdlIFBWUi1VU0IyIE1vZGVsIDczeHh4ICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF83M3h4eFtdID0geworCSJjeDI1ODQwIiwKKwkidHVuZXIiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZncxX25hbWVzXzczeHh4W10gPSB7CisJCSJ2NGwtcHZydXNiMi03M3h4eC0wMS5mdyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfNzN4eHggPSB7CisJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBQVlIgVVNCMiBNb2RlbCBDYXRlZ29yeSA3M3h4eHgiLAorCQkuc2hvcnRuYW1lID0gIjczeHh4IiwKKwkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50XzczeHh4LAorCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF83M3h4eCksCisJCS5meDJfZmlybXdhcmUubHN0ID0gcHZyMl9mdzFfbmFtZXNfNzN4eHgsCisJCS5meDJfZmlybXdhcmUuY250ID0gQVJSQVlfU0laRShwdnIyX2Z3MV9uYW1lc183M3h4eCksCisJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCisJCS5mbGFnX2hhc19oYXVwcGF1Z2Vfcm9tID0gITAsCisjaWYgMAorCQkuZmxhZ19oYXNfYW5hbG9ndHVuZXIgPSAhMCwKKwkJLmZsYWdfaGFzX2NvbXBvc2l0ZSA9ICEwLAorCQkuZmxhZ19oYXNfc3ZpZGVvID0gITAsCisJCS5zaWduYWxfcm91dGluZ19zY2hlbWUgPSBQVlIyX1JPVVRJTkdfU0NIRU1FX0hBVVBQQVVHRSwKKwkJLmRpZ2l0YWxfY29udHJvbF9zY2hlbWUgPSBQVlIyX0RJR0lUQUxfU0NIRU1FX0hBVVBQQVVHRSwKKwkJLmxlZF9zY2hlbWUgPSBQVlIyX0xFRF9TQ0hFTUVfSEFVUFBBVUdFLAorI2Vsc2UKKwkJLnNpZ25hbF9yb3V0aW5nX3NjaGVtZSA9IFBWUjJfUk9VVElOR19TQ0hFTUVfSEFVUFBBVUdFLAorI2VuZGlmCit9OworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogSGF1cHBhdWdlIFBWUi1VU0IyIE1vZGVsIDc1eHh4ICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF83NXh4eFtdID0gewpAQCAtMTk4LDggKzIzMywxMiBAQAogCXsgVVNCX0RFVklDRSgweDExYmEsIDB4MTAwMSksCiAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnB2cjJfZGV2aWNlX29uYWlyX3VzYjJ9LAogI2VuZGlmCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg3MzAwKSwKKwkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcHZyMl9kZXZpY2VfNzN4eHh9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzUwMCksCiAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnB2cjJfZGV2aWNlXzc1eHh4fSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDc1MDEpLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwdnIyX2RldmljZV83NXh4eH0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IDQxYWU5ODAuLjI0MDQwNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlICJwdnJ1c2IyLmgiCiAjaW5jbHVkZSAicHZydXNiMi1zdGQuaCIKICNpbmNsdWRlICJwdnJ1c2IyLXV0aWwuaCIKQEAgLTIyOTEsNyArMjI5MCw3IEBACiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGhkdy0+Y29udHJvbF9jbnQ7IGlkeCsrKSB7CiAJCWNwdHIgPSBoZHctPmNvbnRyb2xzICsgaWR4OwotCQlpZiAoY3B0ci0+aW5mby0+aXNfZGlydHkgPT0gMCkgY29udGludWU7CisJCWlmICghY3B0ci0+aW5mby0+aXNfZGlydHkpIGNvbnRpbnVlOwogCQlpZiAoIWNwdHItPmluZm8tPmlzX2RpcnR5KGNwdHIpKSBjb250aW51ZTsKIAkJY29tbWl0X2ZsYWcgPSAhMDsKIApAQCAtMjY0Niw3ICsyNjQ1LDcgQEAKIAl1MTYgYWRkcmVzczsKIAl1bnNpZ25lZCBpbnQgcGlwZTsKIAlMT0NLX1RBS0UoaGR3LT5iaWdfbG9jayk7IGRvIHsKLQkJaWYgKChoZHctPmZ3X2J1ZmZlciA9PSAwKSA9PSAhZW5hYmxlX2ZsYWcpIGJyZWFrOworCQlpZiAoKGhkdy0+ZndfYnVmZmVyID09IE5VTEwpID09ICFlbmFibGVfZmxhZykgYnJlYWs7CiAKIAkJaWYgKCFlbmFibGVfZmxhZykgewogCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0ZJUk1XQVJFLApAQCAtMjcxNSw3ICsyNzE0LDcgQEAKIC8qIFJldHVybiB0cnVlIGlmIHdlJ3JlIGluIGEgbW9kZSBmb3IgcmV0cmlldmFsIENQVSBmaXJtd2FyZSAqLwogaW50IHB2cjJfaGR3X2NwdWZ3X2dldF9lbmFibGVkKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewotCXJldHVybiBoZHctPmZ3X2J1ZmZlciAhPSAwOworCXJldHVybiBoZHctPmZ3X2J1ZmZlciAhPSBOVUxMOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5jCmluZGV4IGNlM2M4OTguLmE5ODg5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJc3RydWN0IHB2cjJfYnVmZmVyICpicDsKIAltdXRleF9sb2NrKCZzcC0+bXV0ZXgpOyBkbyB7CiAJCXB2cjJfc3RyZWFtX2ludGVybmFsX2ZsdXNoKHNwKTsKLQkJd2hpbGUgKChicCA9IHB2cjJfc3RyZWFtX2dldF9yZWFkeV9idWZmZXIoc3ApKSAhPSAwKSB7CisJCXdoaWxlICgoYnAgPSBwdnIyX3N0cmVhbV9nZXRfcmVhZHlfYnVmZmVyKHNwKSkgIT0gTlVMTCkgewogCQkJcHZyMl9idWZmZXJfc2V0X2lkbGUoYnApOwogCQl9CiAJCWlmIChzcC0+YnVmZmVyX3RvdGFsX2NvdW50ICE9IHNwLT5idWZmZXJfdGFyZ2V0X2NvdW50KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jCmluZGV4IGY3ODI0MTguLmM1NzIyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlpZiAoIShjcC0+c3RyZWFtKSkgcmV0dXJuIDA7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX1NUQVJUX1NUT1AsCiAJCSAgICIvKi0tLVRSQUNFX1JFQUQtLS0qLyBwdnIyX2lvcmVhZF9zdGFydCBpZD0lcCIsY3ApOwotCXdoaWxlICgoYnAgPSBwdnIyX3N0cmVhbV9nZXRfaWRsZV9idWZmZXIoY3AtPnN0cmVhbSkpICE9IDApIHsKKwl3aGlsZSAoKGJwID0gcHZyMl9zdHJlYW1fZ2V0X2lkbGVfYnVmZmVyKGNwLT5zdHJlYW0pKSAhPSBOVUxMKSB7CiAJCXN0YXQgPSBwdnIyX2J1ZmZlcl9xdWV1ZShicCk7CiAJCWlmIChzdGF0IDwgMCkgewogCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0RBVEFfRkxPVywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCmluZGV4IDdhMWNkODcuLjA3ZjRlYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlICJwdnJ1c2IyLXN5c2ZzLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHcuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCmluZGV4IGY5OTFkNzIuLmUwYTQ1M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCkBAIC05MTUsNyArOTE1LDcgQEAKIAkJc3RydWN0IHVyYiAqdXJiOwogCiAJCXVyYiA9IHBkZXYtPnNidWZbaV0udXJiOwotCQlpZiAodXJiICE9IDApIHsKKwkJaWYgKHVyYikgewogCQkJUFdDX0RFQlVHX01FTU9SWSgiVW5saW5raW5nIFVSQiAlcFxuIiwgdXJiKTsKIAkJCXVzYl9raWxsX3VyYih1cmIpOwogCQl9CkBAIC05MzEsNyArOTMxLDcgQEAKIAkJc3RydWN0IHVyYiAqdXJiOwogCiAJCXVyYiA9IHBkZXYtPnNidWZbaV0udXJiOwotCQlpZiAodXJiICE9IDApIHsKKwkJaWYgKHVyYikgewogCQkJUFdDX0RFQlVHX01FTU9SWSgiRnJlZWluZyBVUkJcbiIpOwogCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCQlwZGV2LT5zYnVmW2ldLnVyYiA9IE5VTEw7CkBAIC0xNzU5LDggKzE3NTksNyBAQAogCiAJLyogQWxsb2NhdGUgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSAqLwogCXBkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAocGRldi0+dmRldiA9PSAwKQotCXsKKwlpZiAoIXBkZXYtPnZkZXYpIHsKIAkJUFdDX0VSUk9SKCJFcnIsIGNhbm5vdCBhbGxvY2F0ZSB2aWRlb19kZXZpY2Ugc3RydXR1cmUuIEZhaWxpbmcgcHJvYmUuIik7CiAJCWtmcmVlKHBkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMKaW5kZXggMDYxMTM0YS4uMWRmMjYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSAwKQorCWlmICghY2xpZW50KQogCQlyZXR1cm4gLUVOT01FTTsKIAljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwogCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CkBAIC00OTYsNyArNDk2LDcgQEAKIAlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTEwIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExMCksIEdGUF9LRVJORUwpOwotCWlmIChkZWNvZGVyID09IDApIHsKKwlpZiAoIWRlY29kZXIpIHsKIAkJa2ZyZWUoY2xpZW50KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYwppbmRleCA3YWUyZDY0Li5hMDc3MmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJCXJldHVybiAwOwogCiAJY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IDApCisJaWYgKCFjbGllbnQpCiAJCXJldHVybiAtRU5PTUVNOwogCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CiAJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKaW5kZXggNjc3ZGY1MS4uYmY5MWE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSAwKQorCWlmICghY2xpZW50KQogCQlyZXR1cm4gLUVOT01FTTsKIAljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwogCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA3ZDdmMzgzLi42ZjU3NDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTkyOCwyNyArOTI4LDM4IEBACiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ncGlvbWFzawk9IDB4MDMsCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CiAJCQkubmFtZSA9IG5hbWVfdHYsCiAJCQkudm11eCA9IDEsCiAJCQkuYW11eCA9IFRWLAogCQkJLnR2ICAgPSAxLAotCQl9LHsKKwkJCS5ncGlvID0gMHgwMCwKKwkJfSwgewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAotCQkJLnZtdXggPSAwLAotCQkJLmFtdXggPSBMSU5FMiwKLQkJfSx7Ci0JCQkubmFtZSA9IG5hbWVfY29tcDIsCiAJCQkudm11eCA9IDMsCi0JCQkuYW11eCA9IExJTkUyLAotCQl9LHsKKwkJCS5hbXV4ID0gTElORTEsCisJCQkuZ3BpbyA9IDB4MDIsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMiwKKwkJCS52bXV4ID0gMCwKKwkJCS5hbXV4ID0gTElORTEsCisJCQkuZ3BpbyA9IDB4MDIsCisJCX0sIHsKIAkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCiAJCQkudm11eCA9IDgsCi0JCQkuYW11eCA9IExJTkUyLAotCQl9fSwKKwkJCS5hbXV4ID0gTElORTEsCisJCQkuZ3BpbyA9IDB4MDIsCisJCX0gfSwKIAkJLnJhZGlvID0gewogCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAotCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5hbXV4ID0gTElORTEsCisJCQkuZ3BpbyA9IDB4MDEsCisJCX0sCisJCS5tdXRlICA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwMCwKIAkJfSwKIAl9LAogCVtTQUE3MTM0X0JPQVJEX0JNS19NUEVYX1RVTkVSXSA9IHsKQEAgLTI0NzMsMjcgKzI0ODQsMjggQEAKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwODAyMDAwMDAsCi0JCS5pbnB1dHMgICAgICAgICA9IHt7Ci0JCQkgIC5uYW1lID0gbmFtZV90diwKLQkJCSAgLnZtdXggPSA0LAotCQkJICAuYW11eCA9IFRWLAotCQkJICAudHYgICA9IDEsCi0JCX0sewotCQkJICAubmFtZSA9IG5hbWVfY29tcDEsCi0JCQkgIC52bXV4ID0gMSwKLQkJCSAuYW11eCA9IExJTkUyLAotCSAgICAgICB9LHsKLQkJCSAubmFtZSA9IG5hbWVfY29tcDIsCi0JCQkgLnZtdXggPSAwLAotCQkJICAuYW11eCA9IExJTkUyLAotCQl9LHsKLQkJCSAgLm5hbWUgPSBuYW1lX3N2aWRlbywKLQkJCSAgLnZtdXggPSA4LAotCQkJICAuYW11eCA9IExJTkUyLAotCQl9fSwKKwkJLmlucHV0cyAgICAgICAgID0geyB7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDQsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IExJTkUyLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IExJTkUyLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSB9LAogCQkucmFkaW8gPSB7Ci0JCQkgIC5uYW1lID0gbmFtZV9yYWRpbywKLQkJCSAgLmFtdXggPSBMSU5FMSwKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gVFYsCisJCQkuZ3BpbyA9IDB4MDIwMDAwMCwKIAkJfSwKIAl9LAogCVtTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTF0gPSB7CkBAIC0zOTEyLDYgKzM5MjQsNzQgQEAKIAkJfSwKIAkJLm1wZWcgID0gU0FBNzEzNF9NUEVHX0VNUFJFU1MsCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9UV0lOSEFOX0RUVl9EVkJfMzA1Nl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUd2luaGFuIEh5YnJpZCBEVFYtRFZCIDMwNTYgUENJIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS50dW5lcl9jb25maWcgICA9IDIsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDIwMDAwMCwKKwkJLmlucHV0cyA9IHt7CisJCQkubmFtZSAgID0gbmFtZV90diwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IFRWLAorCQkJLnR2ICAgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lICAgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggICA9IDMsCisJCQkuYW11eCAgID0gTElORTEsCisJCX0sIHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAkJLyogdW50ZXN0ZWQgKi8KKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSAgID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ICAgPSBUViwKKwkJCS5ncGlvICAgPSAweDAyMDAwMDAsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9HRU5JVVNfVFZHT19BMTFNQ0VdID0geworCQkvKiBBZHJpYW4gUGFyZGluaSA8cGFyZG8uYnNzb0BnbWFpbC5jb20+ICovCisJCS5uYW1lCQk9ICJHZW5pdXMgVFZHTyBBTTExTUNFIiwKKwkJLmF1ZGlvX2Nsb2NrCT0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9UTkZfNTMzNU1GLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4ZjAwMCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90dl9tb25vLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5ncGlvID0gMHgwMDAwLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQkJLmdwaW8gPSAweDIwMDAsCisJCQkudHYgPSAxCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUxLAorCQkJLmdwaW8gPSAweDIwMDAsCisJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDEwMDAsCisJCX0sCisJCS5tdXRlID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDYwMDAsCisJCX0sCisJfSwKIH07CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwpAQCAtNDUxMSw2ICs0NTkxLDEyIEBACiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4NTE2OCwKKwkJLnN1YmRldmljZSAgICA9IDB4MzMwNywgLyogRmx5RFZCLVQgSHlicmlkIE1pbmkgUENJICovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVMsCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE2YmUsCiAJCS5zdWJkZXZpY2UgICAgPSAweDAwMDcsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX01FRElPTl9NRDg4MDBfUVVBRFJPLApAQCAtNDUyMyw2ICs0NjA5LDEyIEBACiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTZiZSwKKwkJLnN1YmRldmljZSAgICA9IDB4MDAwZCwgLyogdHJpcGxlIENUWDk0OF9WMS4xLjEgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfTUVESU9OX01EODgwMF9RVUFEUk8sCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsCiAJCS5zdWJkZXZpY2UgICAgPSAweDJjMDUsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83NzcsCkBAIC00ODQzLDcgKzQ5MzUsMTMgQEAKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAogCQkuc3VidmVuZG9yICAgID0gMHg0ZTQyLAogCQkuc3ViZGV2aWNlICAgID0gMHgzNTAyLAotCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVMsCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE4MjIsIC8qVHdpbmhhbiBUZWNobm9sb2d5IENvLiBMdGQqLworCQkuc3ViZGV2aWNlICAgID0gMHgwMDIyLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9UV0lOSEFOX0RUVl9EVkJfMzA1NiwKIAl9LHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKQEAgLTQ5OTUsNiArNTA5Myw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN185Rk06CisJY2FzZSBTQUE3MTM0X0JPQVJEX0dFTklVU19UVkdPX0ExMU1DRToKIAkJZGV2LT5oYXNfcmVtb3RlID0gU0FBNzEzNF9SRU1PVEVfR1BJTzsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlNfTFIzMDA6CkBAIC01MjMyLDcgKzUzMzEsOCBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUw6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfSFlCUklEX0xOQToKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUVESU9OX01EODgwMF9RVUFEUk86Ci0gICAgICAgY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVVBFUl8wMDc6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVVBFUl8wMDc6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1RXSU5IQU5fRFRWX0RWQl8zMDU2OgogCQkvKiB0aGlzIGlzIGEgaHlicmlkIGJvYXJkLCBpbml0aWFsaXplIHRvIGFuYWxvZyBtb2RlCiAJCSAqIGFuZCBjb25maWd1cmUgZmlybXdhcmUgZWVwcm9tIGFkZHJlc3MKIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggNTJiYWE0Zi4uNThhYjE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtMTAyMiwxMiArMTAyMiwxMyBAQAogCXNhYTcxMzRfaTJjX3JlZ2lzdGVyKGRldik7CiAKIAkvKiBpbml0aWFsaXplIGhhcmR3YXJlICMyICovCisJaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpCisJCXJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOwogCXNhYTcxMzRfYm9hcmRfaW5pdDIoZGV2KTsKKwogCXNhYTcxMzRfaHdpbml0MihkZXYpOwogCiAJLyogbG9hZCBpMmMgaGVscGVycyAqLwotCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQotCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKIAlpZiAoY2FyZF9pc19lbXByZXNzKGRldikpIHsKIAkJcmVxdWVzdF9tb2R1bGUoInNhYTY3NTJocyIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggYTljYTU3My4uZWEyYmU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTc3OSw2ICs3NzksMjEgQEAKIAkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdGRhMTAwNHhfcmVxdWVzdF9maXJtd2FyZQogfTsKIAorc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgdHdpbmhhbl9kdHZfZHZiXzMwNTZfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwOCwKKwkuaW52ZXJ0ICAgICAgICA9IDEsCisJLmludmVydF9vY2xrICAgPSAwLAorCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF8xNk0sCisJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfVERBODI3WCwKKwkuZ3Bpb19jb25maWcgICA9IFREQTEwMDQ2X0dQMDFfSSwKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAorCS5pMmNfZ2F0ZSAgICAgID0gMHg0MiwKKwkudHVuZXJfYWRkcmVzcyA9IDB4NjEsCisJLnR1bmVyX2NvbmZpZyAgPSAyLAorCS5hbnRlbm5hX3N3aXRjaCA9IDEsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkYTEwMDR4X3JlcXVlc3RfZmlybXdhcmUKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogc3BlY2lhbCBjYXNlOiB0aGlzIGNhcmQgdXNlcyBzYWE3MTN4IEdQSU8yMiBmb3IgdGhlIG1vZGUgc3dpdGNoCiAgKi8KQEAgLTgyNiw2ICs4NDEsNyBAQAogc3RhdGljIHN0cnVjdCB0ZGExMDA4Nl9jb25maWcgZmx5ZHZicyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4MGUsCiAJLmludmVydCA9IDAsCisJLmRpc2VxY190b25lID0gMCwKIH07CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtOTQwLDkgKzk1Niw5IEBACiAJCWNvbmZpZ3VyZV90ZGE4Mjd4X2ZlKGRldiwgJnRkYTgyN3hfbGlmZXZpZXdfY29uZmlnKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQl9UUklPOgotCQlpZighIHVzZV9mcm9udGVuZCkgewkvL3RlcnJlc3RyaWFsCisJCWlmKCEgdXNlX2Zyb250ZW5kKSB7CS8qIHRlcnJlc3RyaWFsICovCiAJCQljb25maWd1cmVfdGRhODI3eF9mZShkZXYsICZsaWZldmlld190cmlvX2NvbmZpZyk7Ci0JCX0gZWxzZSB7ICAJICAgICAgLy9zYXRlbGxpdGUKKwkJfSBlbHNlIHsgIAkgICAgICAgIC8qIHNhdGVsbGl0ZSAqLwogCQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsICZkZXYtPmkyY19hZGFwKTsKIAkJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MywKQEAgLTEwMDcsOCArMTAyMyw5IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBMl9IWUJSSUQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZtZWRpb25fY2FyZGJ1cywKLQkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCQkJCSAgICAgICAmbWVkaW9uX2NhcmRidXMsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJZGV2LT5vcmlnaW5hbF9kZW1vZF9zbGVlcCA9IGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXA7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfZGVtb2Rfc2xlZXA7CkBAIC0xMDQ0LDYgKzEwNjEsOSBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1VQRVJfMDA3OgogCQljb25maWd1cmVfdGRhODI3eF9mZShkZXYsICZhdmVybWVkaWFfc3VwZXJfMDA3X2NvbmZpZyk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9UV0lOSEFOX0RUVl9EVkJfMzA1NjoKKwkJY29uZmlndXJlX3RkYTgyN3hfZmUoZGV2LCAmdHdpbmhhbl9kdHZfZHZiXzMwNTZfY29uZmlnKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJd3ByaW50aygiSHVoPyB1bmtub3duIERWQiBjYXJkP1xuIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IGIxYjAxZmEuLjNkMmVjMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAogCWRwcmludGsoIm9wZW4gbWlub3I9JWRcbiIsbWlub3IpOwogCWVyciA9IC1FQlVTWTsKLQlpZiAoIW11dGV4X3RyeWxvY2soJmRldi0+ZW1wcmVzc190c3EubG9jaykpCisJaWYgKCFtdXRleF90cnlsb2NrKCZkZXYtPmVtcHJlc3NfdHNxLnZiX2xvY2spKQogCQlnb3RvIGRvbmU7CiAJaWYgKGRldi0+ZW1wcmVzc191c2VycykKIAkJZ290byBkb25lX3VwOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJZXJyID0gMDsKIAogZG9uZV91cDoKLQltdXRleF91bmxvY2soJmRldi0+ZW1wcmVzc190c3EubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmVtcHJlc3NfdHNxLnZiX2xvY2spOwogZG9uZToKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTEwLDcgKzExMCw2IEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQltdXRleF9sb2NrKCZkZXYtPmVtcHJlc3NfdHNxLmxvY2spOwogCXZpZGVvYnVmX3N0b3AoJmRldi0+ZW1wcmVzc190c3EpOwogCXZpZGVvYnVmX21tYXBfZnJlZSgmZGV2LT5lbXByZXNzX3RzcSk7CiAJZGV2LT5lbXByZXNzX3VzZXJzLS07CkBAIC0xMjIsNyArMTIxLDYgQEAKIAlzYWFfd3JpdGViKFNBQTcxMzRfQVVESU9fTVVURV9DVFJMLAogCQlzYWFfcmVhZGIoU0FBNzEzNF9BVURJT19NVVRFX0NUUkwpIHwgKDEgPDwgNikpOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmVtcHJlc3NfdHNxLmxvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwppbmRleCAwZGI5NTVjLi5iNDE4ODgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKQEAgLTQwNiw2ICs0MDYsMTIgQEAKIAkJbWFza19rZXl1cCAgID0gMHg4MDAwMDAwOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLy9tcwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfR0VOSVVTX1RWR09fQTExTUNFOgorCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2U7CisJCW1hc2tfa2V5Y29kZSA9IDB4ZmY7CisJCW1hc2tfa2V5ZG93biA9IDB4ZjAwMDAwOworCQlwb2xsaW5nID0gNTA7IC8qIG1zICovCisJCWJyZWFrOwogCX0KIAlpZiAoTlVMTCA9PSBpcl9jb2RlcykgewogCQlwcmludGsoIiVzOiBPb3BzOiBJUiBjb25maWcgZXJyb3IgW2NhcmQ9JWRdXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggMTE4NGQzNS4uMzljNDFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0xNDE0LDIxICsxNDE0LDE3IEBACiAJCWlmICghbGlzdF9lbXB0eSgmZmgtPmNhcC5zdHJlYW0pKQogCQkJYnVmID0gbGlzdF9lbnRyeShmaC0+Y2FwLnN0cmVhbS5uZXh0LCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBzdHJlYW0pOwogCX0gZWxzZSB7Ci0JCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CisJCW11dGV4X2xvY2soJmZoLT5jYXAudmJfbG9jayk7CiAJCWlmIChVTlNFVCA9PSBmaC0+Y2FwLnJlYWRfb2ZmKSB7CiAJCQkvKiBuZWVkIHRvIGNhcHR1cmUgYSBuZXcgZnJhbWUgKi8KLQkJCWlmIChyZXNfbG9ja2VkKGZoLT5kZXYsUkVTT1VSQ0VfVklERU8pKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwotCQkJCXJldHVybiBQT0xMRVJSOwotCQkJfQotCQkJaWYgKDAgIT0gZmgtPmNhcC5vcHMtPmJ1Zl9wcmVwYXJlKCZmaC0+Y2FwLGZoLT5jYXAucmVhZF9idWYsZmgtPmNhcC5maWVsZCkpIHsKLQkJCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7Ci0JCQkJcmV0dXJuIFBPTExFUlI7Ci0JCQl9CisJCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2LFJFU09VUkNFX1ZJREVPKSkKKwkJCQlnb3RvIGVycjsKKwkJCWlmICgwICE9IGZoLT5jYXAub3BzLT5idWZfcHJlcGFyZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmLGZoLT5jYXAuZmllbGQpKQorCQkJCWdvdG8gZXJyOwogCQkJZmgtPmNhcC5vcHMtPmJ1Zl9xdWV1ZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmKTsKIAkJCWZoLT5jYXAucmVhZF9vZmYgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLnZiX2xvY2spOwogCQlidWYgPSBmaC0+Y2FwLnJlYWRfYnVmOwogCX0KIApAQCAtMTQ0MCw2ICsxNDM2LDEwIEBACiAJICAgIGJ1Zi0+c3RhdGUgPT0gVklERU9CVUZfRVJST1IpCiAJCXJldHVybiBQT0xMSU58UE9MTFJETk9STTsKIAlyZXR1cm4gMDsKKworZXJyOgorCW11dGV4X3VubG9jaygmZmgtPmNhcC52Yl9sb2NrKTsKKwlyZXR1cm4gUE9MTEVSUjsKIH0KIAogc3RhdGljIGludCB2aWRlb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggYjg4Y2E5OS4uZjk0MGQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0yNTIsNiArMjUyLDggQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfQ09MVU1CVVNfVFZGTSAxMjgKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNjA3XzlGTQkxMjkKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTYJCTEzMAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1RXSU5IQU5fRFRWX0RWQl8zMDU2IDEzMQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0dFTklVU19UVkdPX0ExMU1DRSAxMzIKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyA4CiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKaW5kZXggNjZjYzkyYy4uNDFmNzA0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKQEAgLTQwMyw3ICs0MDMsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSAwKQorCWlmICghY2xpZW50KQogCQlyZXR1cm4gLUVOT01FTTsKIAljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwogCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3NlbnNvci5oCmluZGV4IDJkN2Q3ODYuLjJkYzdjNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3NlbnNvci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3NlbnNvci5oCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgIFJlZ2lzdGVyIGFkcmVzc2VzIG11c3QgYmUgPCAyNTYuCiAqLwogI2RlZmluZSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3Moc245YzEwMl9kZXZpY2UsIGRhdGEuLi4pICAgICAgICAgICAgICAgICAgICAgXAotCSh7IGNvbnN0IHN0YXRpYyB1OCBfdmFscmVnW11bMl0gPSB7ZGF0YX07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKHsgc3RhdGljIGNvbnN0IHU4IF92YWxyZWdbXVsyXSA9IHtkYXRhfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlzbjljMTAyX3dyaXRlX3JlZ3Moc245YzEwMl9kZXZpY2UsIF92YWxyZWcsIEFSUkFZX1NJWkUoX3ZhbHJlZykpOyB9KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay1zZW5zb3IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXNlbnNvci5jCmluZGV4IDRhOWEwYjYuLmU1NDZiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXNlbnNvci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXNlbnNvci5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogCiAvKiBSZXR1cm5zIDAgaWYgT0sgKi8KLWludCBzdGtfc2Vuc29yX291dGIoc3RydWN0IHN0a19jYW1lcmEgKmRldiwgdTggcmVnLCB1OCB2YWwpCitzdGF0aWMgaW50IHN0a19zZW5zb3Jfb3V0YihzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2LCB1OCByZWcsIHU4IHZhbCkKIHsKIAlpbnQgaSA9IDA7CiAJaW50IHRtcHZhbCA9IDA7CkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLWludCBzdGtfc2Vuc29yX2luYihzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2LCB1OCByZWcsIHU4ICp2YWwpCitzdGF0aWMgaW50IHN0a19zZW5zb3JfaW5iKHN0cnVjdCBzdGtfY2FtZXJhICpkZXYsIHU4IHJlZywgdTggKnZhbCkKIHsKIAlpbnQgaSA9IDA7CiAJaW50IHRtcHZhbCA9IDA7CkBAIC0zODAsNyArMzgwLDcgQEAKIAkJU1RLX0VSUk9SKCJTdHJhbmdlIGVycm9yIHJlYWRpbmcgc2Vuc29yIElEXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChpZGggIT0gMHg3RiB8fCBpZGwgIT0gMHhBMikgeworCWlmIChpZGggIT0gMHg3ZiB8fCBpZGwgIT0gMHhhMikgewogCQlTVEtfRVJST1IoIkh1aD8geW91IGRvbid0IGhhdmUgYSBzZW5zb3IgZnJvbSBvdnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00MDksNiArNDA5LDE5IEBACiAJe1JFR19DT00xNSwgQ09NMTVfUjAwRkYgfSwKIAl7MHhmZiwgMHhmZn0sIC8qIEVORCBNQVJLRVIgKi8KIH07CisvKiBWNEwyX1BJWF9GTVRfWVVZViAqLworc3RhdGljIHN0cnVjdCByZWd2YWwgb3ZfZm10X3l1eXZbXSA9IHsKKwl7UkVHX1RTTEIsIDAgfSwKKwl7IDB4NGYsIDB4ODAgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgMSIgKi8KKwl7IDB4NTAsIDB4ODAgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgMiIgKi8KKwl7IDB4NTEsIDAgICAgfSwJCS8qIHZiICovCisJeyAweDUyLCAweDIyIH0sIAkvKiAibWF0cml4IGNvZWZmaWNpZW50IDQiICovCisJeyAweDUzLCAweDVlIH0sIAkvKiAibWF0cml4IGNvZWZmaWNpZW50IDUiICovCisJeyAweDU0LCAweDgwIH0sIAkvKiAibWF0cml4IGNvZWZmaWNpZW50IDYiICovCisJe1JFR19DT00xMywgQ09NMTNfVVZTQVR8Q09NMTNfQ01BVFJJWH0sCisJe1JFR19DT00xNSwgQ09NMTVfUjAwRkYgfSwKKwl7MHhmZiwgMHhmZn0sIC8qIEVORCBNQVJLRVIgKi8KK307CiAKIC8qIFY0TDJfUElYX0ZNVF9SR0I1NjVYIHJycnJyZ2dnIGdnZ2JiYmJiICovCiBzdGF0aWMgc3RydWN0IHJlZ3ZhbCBvdl9mbXRfcmdicltdID0gewpAQCAtNTE5LDYgKzUzMiwxMCBAQAogCQljb203IHw9IENPTTdfWVVWOwogCQlydiA9IG92X2ZtdF91eXZ5OwogCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQljb203IHw9IENPTTdfWVVWOworCQlydiA9IG92X2ZtdF95dXl2OworCQlicmVhazsKIAljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CiAJCWNvbTcgfD0gQ09NN19SR0I7CiAJCXJ2ID0gb3ZfZm10X3JnYnA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IGQzN2U1ZTIuLmNlYmE0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC02Myw3ICs2Myw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHN0a3dlYmNhbV90YWJsZSk7CiAKLXZvaWQgc3RrX2NhbWVyYV9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgc3RrX2NhbWVyYV9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSB0b19zdGtfY2FtZXJhKGtyZWYpOwogCkBAIC02ODIsNiArNjgyLDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlmcC0+cHJpdmF0ZV9kYXRhID0gdmRldjsKIAlrcmVmX2dldCgmZGV2LT5rcmVmKTsKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGV2LT5pbnRlcmZhY2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MDMsNiArNzA0LDcgQEAKIAl9CiAKIAlpZiAoZGV2LT5vd25lciAhPSBmcCkgeworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRlcmZhY2UpOwogCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBzdGtfY2FtZXJhX2NsZWFudXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03MTMsNiArNzE1LDcgQEAKIAogCWRldi0+b3duZXIgPSBOVUxMOwogCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50ZXJmYWNlKTsKIAlrcmVmX3B1dCgmZGV2LT5rcmVmLCBzdGtfY2FtZXJhX2NsZWFudXApOwogCiAJcmV0dXJuIDA7CkBAIC05OTMsNiArOTk2LDEwIEBACiAJCWZtdGQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKIAkJc3RyY3B5KGZtdGQtPmRlc2NyaXB0aW9uLCAiUmF3IGJheWVyIik7CiAJCWJyZWFrOworCWNhc2UgNDoKKwkJZm10ZC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJc3RyY3B5KGZtdGQtPmRlc2NyaXB0aW9uLCAieXV2NDoyOjIiKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTA0OCw2ICsxMDU1LDcgQEAKIAljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CiAJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1WDoKIAljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CiAJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTA4MCw2ICsxMDg4LDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3RrX3NldHVwX2Zvcm1hdChzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2KQoreworCWludCBpID0gMDsKKwlpbnQgZGVwdGg7CisJaWYgKGRldi0+dnNldHRpbmdzLnBhbGV0dGUgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKKwkJZGVwdGggPSAxOworCWVsc2UKKwkJZGVwdGggPSAyOworCXdoaWxlIChzdGtfc2l6ZXNbaV0ubSAhPSBkZXYtPnZzZXR0aW5ncy5tb2RlCisJCQkmJiBpIDwgQVJSQVlfU0laRShzdGtfc2l6ZXMpKQorCQlpKys7CisJaWYgKGkgPT0gQVJSQVlfU0laRShzdGtfc2l6ZXMpKSB7CisJCVNUS19FUlJPUigiU29tZXRoaW5nIGlzIGJyb2tlbiBpbiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIFRoaXMgcmVnaXN0ZXJzIGNvbnRyb2xzIHNvbWUgdGltaW5ncywgbm90IHN1cmUgb2Ygd2hhdC4gKi8KKwlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDAxYiwgMHgwZSk7CisJaWYgKGRldi0+dnNldHRpbmdzLm1vZGUgPT0gTU9ERV9TWEdBKQorCQlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDAxYywgMHgwZSk7CisJZWxzZQorCQlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDAxYywgMHg0Nik7CisJLyoKKwkgKiBSZWdpc3RlcnMgMHgwMTE1IDB4MDExNCBhcmUgdGhlIHNpemUgb2YgZWFjaCBsaW5lIChieXRlcyksCisJICogcmVncyAweDAxMTcgMHgwMTE2IGFyZSB0aGUgaGVpZ3RoIG9mIHRoZSBpbWFnZS4KKwkgKi8KKwlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDExNSwKKwkJKChzdGtfc2l6ZXNbaV0udyAqIGRlcHRoKSA+PiA4KSAmIDB4ZmYpOworCXN0a19jYW1lcmFfd3JpdGVfcmVnKGRldiwgMHgwMTE0LAorCQkoc3RrX3NpemVzW2ldLncgKiBkZXB0aCkgJiAweGZmKTsKKwlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDExNywKKwkJKHN0a19zaXplc1tpXS5oID4+IDgpICYgMHhmZik7CisJc3RrX2NhbWVyYV93cml0ZV9yZWcoZGV2LCAweDAxMTYsCisJCXN0a19zaXplc1tpXS5oICYgMHhmZik7CisJcmV0dXJuIHN0a19zZW5zb3JfY29uZmlndXJlKGRldik7Cit9CisKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19zX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ZCkKIHsKQEAgLTEwOTQsMTAgKzExMzgsMTAgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoZGV2LT5vd25lciAmJiBkZXYtPm93bmVyICE9IGZpbHApCiAJCXJldHVybiAtRUJVU1k7Ci0JZGV2LT5vd25lciA9IGZpbHA7CiAJcmV0ID0gc3RrX3ZpZGlvY190cnlfZm10X2NhcChmaWxwLCBwcml2LCBmbXRkKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OworCWRldi0+b3duZXIgPSBmaWxwOwogCiAJZGV2LT52c2V0dGluZ3MucGFsZXR0ZSA9IGZtdGQtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CiAJc3RrX2ZyZWVfYnVmZmVycyhkZXYpOwpAQCAtMTEwNSwyNSArMTE0OSw3IEBACiAJZGV2LT52c2V0dGluZ3MubW9kZSA9IHN0a19zaXplc1tmbXRkLT5mbXQucGl4LnByaXZdLm07CiAKIAlzdGtfaW5pdGlhbGlzZShkZXYpOwotCS8qIFRoaXMgcmVnaXN0ZXJzIGNvbnRyb2xzIHNvbWUgdGltaW5ncywgbm90IHN1cmUgb2Ygd2hhdC4gKi8KLQlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDAxYiwgMHgwZSk7Ci0JaWYgKGRldi0+dnNldHRpbmdzLm1vZGUgPT0gTU9ERV9TWEdBKQotCQlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDAxYywgMHgwZSk7Ci0JZWxzZQotCQlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDAxYywgMHg0Nik7Ci0JLyoKLQkgKiBSZWdpc3RlcnMgMHgwMTE1IDB4MDExNCBhcmUgdGhlIHNpemUgb2YgZWFjaCBsaW5lIChieXRlcyksCi0JICogcmVncyAweDAxMTcgMHgwMTE2IGFyZSB0aGUgaGVpZ3RoIG9mIHRoZSBpbWFnZS4KLQkgKi8KLQlzdGtfY2FtZXJhX3dyaXRlX3JlZyhkZXYsIDB4MDExNSwKLQkJKGZtdGQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4+IDgpICYgMHhmZik7Ci0Jc3RrX2NhbWVyYV93cml0ZV9yZWcoZGV2LCAweDAxMTQsCi0JCWZtdGQtPmZtdC5waXguYnl0ZXNwZXJsaW5lICYgMHhmZik7Ci0Jc3RrX2NhbWVyYV93cml0ZV9yZWcoZGV2LCAweDAxMTcsCi0JCShmbXRkLT5mbXQucGl4LmhlaWdodCA+PiA4KSAmIDB4ZmYpOwotCXN0a19jYW1lcmFfd3JpdGVfcmVnKGRldiwgMHgwMTE2LAotCQlmbXRkLT5mbXQucGl4LmhlaWdodCAmIDB4ZmYpOwotCXJldHVybiBzdGtfc2Vuc29yX2NvbmZpZ3VyZShkZXYpOworCXJldHVybiBzdGtfc2V0dXBfZm9ybWF0KGRldik7CiB9CiAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxwLApAQCAtMTI4OCw2ICsxMzE0LDkgQEAKIAkucG9sbCA9IHY0bF9zdGtfcG9sbCwKIAkubW1hcCA9IHY0bF9zdGtfbW1hcCwKIAkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCisjZW5kaWYKIAkubGxzZWVrID0gbm9fbGxzZWVrCiB9OwogCkBAIC0xNDAzLDcgKzE0MzIsNyBAQAogCWRldi0+dnNldHRpbmdzLmJyaWdodG5lc3MgPSAweDdmZmY7CiAJZGV2LT52c2V0dGluZ3MucGFsZXR0ZSA9IFY0TDJfUElYX0ZNVF9SR0I1NjU7CiAJZGV2LT52c2V0dGluZ3MubW9kZSA9IE1PREVfVkdBOwotCWRldi0+ZnJhbWVfc2l6ZSA9IDY0MCo0ODAqMjsKKwlkZXYtPmZyYW1lX3NpemUgPSA2NDAgKiA0ODAgKiAyOwogCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+c2lvX2F2YWlsKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5zaW9fZnVsbCk7CkBAIC0xNDE3LDYgKzE0NDYsNyBAQAogCX0KIAogCXN0a19jcmVhdGVfc3lzZnNfZmlsZXMoJmRldi0+dmRldik7CisJdXNiX2F1dG9wbV9lbmFibGUoZGV2LT5pbnRlcmZhY2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDM0LDExICsxNDY0LDQxIEBACiAJa3JlZl9wdXQoJmRldi0+a3JlZiwgc3RrX2NhbWVyYV9jbGVhbnVwKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQoraW50IHN0a19jYW1lcmFfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaWYgKGlzX3N0cmVhbWluZyhkZXYpKSB7CisJCXN0a19zdG9wX3N0cmVhbShkZXYpOworCQkvKiB5ZXMsIHRoaXMgaXMgdWdseSAqLworCQlzZXRfc3RyZWFtaW5nKGRldik7CisJfQorCXJldHVybiAwOworfQorCitpbnQgc3RrX2NhbWVyYV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaWYgKCFpc19pbml0aWFsaXNlZChkZXYpKQorCQlyZXR1cm4gMDsKKwl1bnNldF9pbml0aWFsaXNlZChkZXYpOworCXN0a19pbml0aWFsaXNlKGRldik7CisJc3RrX3NldHVwX2Zvcm1hdChkZXYpOworCWlmIChpc19zdHJlYW1pbmcoZGV2KSkKKwkJc3RrX3N0YXJ0X3N0cmVhbShkZXYpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdGtfY2FtZXJhX2RyaXZlciA9IHsKIAkubmFtZSA9ICJzdGt3ZWJjYW0iLAogCS5wcm9iZSA9IHN0a19jYW1lcmFfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBzdGtfY2FtZXJhX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0gc3Rrd2ViY2FtX3RhYmxlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc3RrX2NhbWVyYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBzdGtfY2FtZXJhX3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCmluZGV4IDdlOTg5ZDEuLmRmNGRmZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oCkBAIC03OSw2ICs3OSw3IEBACiAjZGVmaW5lIHVuc2V0X3ByZXNlbnQoZGV2KQkoKGRldiktPnN0YXR1cyAmPSBcCiAJCQkJCX4oU19QUkVTRU5UfFNfSU5JVElBTElTRUR8U19TVFJFQU1JTkcpKQogI2RlZmluZSBzZXRfaW5pdGlhbGlzZWQoZGV2KQkoKGRldiktPnN0YXR1cyB8PSBTX0lOSVRJQUxJU0VEKQorI2RlZmluZSB1bnNldF9pbml0aWFsaXNlZChkZXYpCSgoZGV2KS0+c3RhdHVzICY9IH5TX0lOSVRJQUxJU0VEKQogI2RlZmluZSBzZXRfbWVtYWxsb2NkKGRldikJKChkZXYpLT5zdGF0dXMgfD0gU19NRU1BTExPQ0QpCiAjZGVmaW5lIHVuc2V0X21lbWFsbG9jZChkZXYpCSgoZGV2KS0+c3RhdHVzICY9IH5TX01FTUFMTE9DRCkKICNkZWZpbmUgc2V0X3N0cmVhbWluZyhkZXYpCSgoZGV2KS0+c3RhdHVzIHw9IFNfU1RSRUFNSU5HKQpAQCAtMTI3LDggKzEyOCw2IEBACiBpbnQgc3RrX2NhbWVyYV93cml0ZV9yZWcoc3RydWN0IHN0a19jYW1lcmEgKiwgdTE2LCB1OCk7CiBpbnQgc3RrX2NhbWVyYV9yZWFkX3JlZyhzdHJ1Y3Qgc3RrX2NhbWVyYSAqLCB1MTYsIGludCAqKTsKIAotaW50IHN0a19zZW5zb3Jfb3V0YihzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2LCB1OCByZWcsIHU4IHZhbCk7Ci1pbnQgc3RrX3NlbnNvcl9pbmIoc3RydWN0IHN0a19jYW1lcmEgKmRldiwgdTggcmVnLCB1OCAqdmFsKTsKIGludCBzdGtfc2Vuc29yX2luaXQoc3RydWN0IHN0a19jYW1lcmEgKik7CiBpbnQgc3RrX3NlbnNvcl9jb25maWd1cmUoc3RydWN0IHN0a19jYW1lcmEgKik7CiBpbnQgc3RrX3NlbnNvcl9zbGVlcChzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKaW5kZXggNDFjZDZhMC4uZmI4OTVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKQEAgLTg1MSw3ICs4NTEsNyBAQAogCXNlbnNvci0+cGxhdGZvcm1fZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoc2Vuc29yLT5wbGF0Zm9ybV9kYXRhID09IE5VTEwKLQkgICAgJiYgIXNlbnNvci0+cGxhdGZvcm1fZGF0YS0+aXNfb2theSgpKQorCSAgICB8fCAhc2Vuc29yLT5wbGF0Zm9ybV9kYXRhLT5pc19va2F5KCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc2Vuc29yLT52NGwyX2ludF9kZXZpY2UgPSAmdGNtODI1eF9pbnRfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwppbmRleCBlZjQ5NGZlLi5iZGNhNWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNsaWVudCBzdHJ1Y3R1cmUgKi8KIAljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICgwID09IGNsaWVudCkgeworCWlmICghY2xpZW50KSB7CiAJCXByaW50aygibm90IGVub3VnaCBrZXJuZWwgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCmluZGV4IDUyM2RmMGIuLmRmMmZhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2xpZW50IHN0cnVjdHVyZSAqLwogCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKDAgPT0gY2xpZW50KSB7CisJaWYgKCFjbGllbnQpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCmluZGV4IGNhMDVjZDYuLjRmZjZjNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2xpZW50IHN0cnVjdHVyZSAqLwogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKDAgPT0gY2xpZW50KSB7CisJaWYgKCFjbGllbnQpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IGJhNTM4ZjYuLjc4YTA5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLUxJU1RfSEVBRCh0dW5lcl9saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQodHVuZXJfbGlzdCk7CiAKIC8qIFNlYXJjaCBmb3IgZXhpc3RpbmcgcmFkaW8gYW5kL29yIFRWIHR1bmVycyBvbiB0aGUgZ2l2ZW4gSTJDIGFkYXB0ZXIuCiAgICBOb3RlIHRoYXQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHR1bmVyX3Byb2JlIHlvdSBjYW4gYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXIteGMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXhjMjAyOC5jCmluZGV4IGYxOTFmNmEuLjUwY2Y4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXIteGMyMDI4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci14YzIwMjguYwpAQCAtNzU0LDYgKzc1NCw5IEBACiAJCWdvdG8gY2hlY2tfZGV2aWNlOwogCX0KIAorCWlmIChuZXdfZncudHlwZSAmIEZNKQorCQlnb3RvIGNoZWNrX2RldmljZTsKKwogCS8qIExvYWQgU0NPREUgZmlybXdhcmUsIGlmIGV4aXN0cyAqLwogCXR1bmVyX2RiZygiVHJ5aW5nIHRvIGxvYWQgc2NvZGUgJWRcbiIsIG5ld19mdy5zY29kZV9ucik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKaW5kZXggYTc1NTYwNS4uMDFlYmNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKQEAgLTE1NzEsMTQgKzE1NzEsMTQgQEAKIAkJY3RybC0+dmFsdWU9Y2hpcC0+bXV0ZWQ7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlpZiAoIWRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKQorCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkpCiAJCQlicmVhazsKIAkJY3RybC0+dmFsdWUgPSBtYXgoY2hpcC0+bGVmdCxjaGlwLT5yaWdodCk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAl7CiAJCWludCB2b2x1bWU7Ci0JCWlmICghZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpCisJCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKSkKIAkJCWJyZWFrOwogCQl2b2x1bWUgPSBtYXgoY2hpcC0+bGVmdCxjaGlwLT5yaWdodCk7CiAJCWlmICh2b2x1bWUpCkBAIC0xNjIxLDcgKzE2MjEsNyBAQAogCXsKIAkJaW50IHZvbHVtZSxiYWxhbmNlOwogCi0JCWlmICghZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpCisJCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKSkKIAkJCWJyZWFrOwogCiAJCXZvbHVtZSA9IG1heChjaGlwLT5sZWZ0LGNoaXAtPnJpZ2h0KTsKQEAgLTE2NDIsNyArMTY0Miw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgogCXsKIAkJaW50IHZvbHVtZSwgYmFsYW5jZTsKLQkJaWYgKCFkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkKKwkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpKQogCQkJYnJlYWs7CiAKIAkJdm9sdW1lID0gbWF4KGNoaXAtPmxlZnQsY2hpcC0+cmlnaHQpOwpAQCAtMTcwMiw3ICsxNzAyLDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQkJCWlmICghZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpCisJCQkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpKQogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCAwYjhmYmFkLi5kYzBkYTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlRDTCBNMjUyM18zREJIX0UifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlRDTCBNMjUyM18zRElIX0UifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlRDTCBNRlBFMDVfMl9VIn0sCi0JeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJQaGlsaXBzIEZNRDEyMTZNRVgifSwKKwl7IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywJIlBoaWxpcHMgRk1EMTIxNk1FWCJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGhpbGlwcyBGUkgyMDM2QiJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGFuYXNvbmljIEVOR0Y3NV8wMUdGIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJNYXhMaW5lYXIgTVhMNTAwNSJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYwppbmRleCA0NDVlYmE0Li5iNmUyNGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYwpAQCAtNjcyLDcgKzY3Miw3IEBACiAJaWYgKHN0ZCA9PSBWNEwyX1NURF9BTEwpIHsKIAkJdHZwNTE1MF9lcnIoIlZCSSBjYW4ndCBiZSBjb25maWd1cmVkIHdpdGhvdXQga25vd2luZyBudW1iZXIgb2YgbGluZXNcbiIpOwogCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHN0ZCAmJiBWNEwyX1NURF82MjVfNTApIHsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REXzYyNV81MCkgewogCQkvKiBEb24ndCBmb2xsb3cgTlRTQyBMaW5lIG51bWJlciBjb252ZW5zaW9uICovCiAJCWxpbmUgKz0gMzsKIAl9CkBAIC03MTksNyArNzE5LDcgQEAKIAlpZiAoc3RkID09IFY0TDJfU1REX0FMTCkgewogCQl0dnA1MTUwX2VycigiVkJJIGNhbid0IGJlIGNvbmZpZ3VyZWQgd2l0aG91dCBrbm93aW5nIG51bWJlciBvZiBsaW5lc1xuIik7CiAJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc3RkICYmIFY0TDJfU1REXzYyNV81MCkgeworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7CiAJCS8qIERvbid0IGZvbGxvdyBOVFNDIExpbmUgbnVtYmVyIGNvbnZlbnNpb24gKi8KIAkJbGluZSArPSAzOwogCX0KQEAgLTEwNzIsMTIgKzEwNzIsMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAljID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoYyA9PSAwKQorCWlmICghYykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtY3B5KGMsICZjbGllbnRfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCiAJY29yZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0dnA1MTUwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvcmUgPT0gMCkgeworCWlmICghY29yZSkgewogCQlrZnJlZShjKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCmluZGV4IGZiNDM0YjUuLjVkMzYzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKQEAgLTEwMzQsNiArMTAzNCwxMSBAQAogCQlpbmZvKCIlczogaWZhY2U9JWQuIGVuZHBvaW50PSQlMDJ4IHBhbGV0dGVCaXRzPSQlMDhseCIsCiAJCSAgICAgX19GVU5DVElPTl9fLCB1dmQtPmlmYWNlLCB1dmQtPnZpZGVvX2VuZHAsIHV2ZC0+cGFsZXR0ZUJpdHMpOwogCX0KKwlpZiAodXZkLT5kZXYgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmRldiA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXV2ZC0+dmRldi5kZXY9Jih1dmQtPmRldi0+ZGV2KTsKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ1dmQtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA9PSAtMSkgewogCQllcnIoIiVzOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FUElQRTsKQEAgLTEwNDEsMTAgKzEwNDYsNiBAQAogCWlmICh1dmQtPmRlYnVnID4gMSkgewogCQlpbmZvKCIlczogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgc3VjY2Vzc2Z1bCIsIF9fRlVOQ1RJT05fXyk7CiAJfQotCWlmICh1dmQtPmRldiA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHV2ZC0+ZGV2ID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlpbmZvKCIlcyBvbiAvZGV2L3ZpZGVvJWQ6IGNhbnZhcz0lcyB2aWRlb3NpemU9JXMiLAogCSAgICAgKHV2ZC0+aGFuZGxlICE9IE5VTEwpID8gdXZkLT5oYW5kbGUtPmRydk5hbWUgOiAiPz8/IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwppbmRleCBkY2YyMmEzLi5lM2FjNWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotY29uc3Qgc3RhdGljIHVuc2lnbmVkIGludCBwYWxldHRlMnBpeGVsZm9ybWF0W10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBhbGV0dGUycGl4ZWxmb3JtYXRbXSA9IHsKIAlbVklERU9fUEFMRVRURV9HUkVZXSAgICA9IFY0TDJfUElYX0ZNVF9HUkVZLAogCVtWSURFT19QQUxFVFRFX1JHQjU1NV0gID0gVjRMMl9QSVhfRk1UX1JHQjU1NSwKIAlbVklERU9fUEFMRVRURV9SR0I1NjVdICA9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCkBAIC0zMDMsNyArMzAzLDExIEBACiAJewogCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCi0JCWNhcDIgPSBremFsbG9jKHNpemVvZigqY2FwMiksR0ZQX0tFUk5FTCk7CisJCWNhcDIgPSBremFsbG9jKHNpemVvZigqY2FwMiksIEdGUF9LRVJORUwpOworCQlpZiAoIWNhcDIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQogCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwogCQltZW1zZXQoJmZidWYyLCAwLCBzaXplb2YoZmJ1ZjIpKTsKIApAQCAtNDI2LDcgKzQzMCwxMSBAQAogCXsKIAkJc3RydWN0IHZpZGVvX3dpbmRvdwkqd2luID0gYXJnOwogCi0JCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksR0ZQX0tFUk5FTCk7CisJCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksIEdGUF9LRVJORUwpOworCQlpZiAoIWZtdDIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQogCQltZW1zZXQod2luLDAsc2l6ZW9mKCp3aW4pKTsKIAogCQlmbXQyLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOwpAQCAtNDY0LDcgKzQ3MiwxMSBAQAogCQlzdHJ1Y3QgdmlkZW9fd2luZG93CSp3aW4gPSBhcmc7CiAJCWludCBlcnIxLGVycjI7CiAKLQkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSxHRlBfS0VSTkVMKTsKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWRydihpbm9kZSwgZmlsZSwgVklESU9DX1NUUkVBTU9GRiwgJmZtdDItPnR5cGUpOwogCQllcnIxID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GTVQsIGZtdDIpOwpAQCAtNTg2LDYgKzU5OCwxMiBAQAogCXsKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUJKnBpY3QgPSBhcmc7CiAKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKIAkJcGljdC0+YnJpZ2h0bmVzcyA9IGdldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKIAkJCQkJCSAgIFY0TDJfQ0lEX0JSSUdIVE5FU1MsZHJ2KTsKIAkJcGljdC0+aHVlID0gZ2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLApAQCAtNTk3LDcgKzYxNSw2IEBACiAJCXBpY3QtPndoaXRlbmVzcyA9IGdldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKIAkJCQkJCSAgVjRMMl9DSURfV0hJVEVORVNTLCBkcnYpOwogCi0JCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksR0ZQX0tFUk5FTCk7CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQyKTsKIAkJaWYgKGVyciA8IDApIHsKQEAgLTYxNyw2ICs2MzQsMTEgQEAKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUJKnBpY3QgPSBhcmc7CiAJCWludCBtZW1fZXJyID0gMCwgb3ZsX2VyciA9IDA7CiAKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCW1lbXNldCgmZmJ1ZjIsIDAsIHNpemVvZihmYnVmMikpOwogCiAJCXNldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKQEAgLTYzNiw3ICs2NTgsNiBAQAogCQkgKiBkaWZmZXJlbnQgcGl4ZWwgZm9ybWF0cyBmb3IgbWVtb3J5IHZzIG92ZXJsYXkuCiAJCSAqLwogCi0JCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksR0ZQX0tFUk5FTCk7CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQyKTsKIAkJLyogSWYgVklESU9DX0dfRk1UIGZhaWxlZCwgdGhlbiB0aGUgZHJpdmVyIGxpa2VseSBkb2Vzbid0CkBAIC04OTAsNyArOTExLDExIEBACiAJewogCQlzdHJ1Y3QgdmlkZW9fbW1hcAkqbW0gPSBhcmc7CiAKLQkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSxHRlBfS0VSTkVMKTsKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCW1lbXNldCgmYnVmMiwwLHNpemVvZihidWYyKSk7CiAKIAkJZm10Mi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKQEAgLTk4Niw3ICsxMDExLDExIEBACiAJewogCQlzdHJ1Y3QgdmJpX2Zvcm1hdCAgICAgICpmbXQgPSBhcmc7CiAKLQkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSxHRlBfS0VSTkVMKTsKKwkJZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm10MikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQyKTsKQEAgLTEwMTgsOCArMTA0NywxMSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlmbXQyID0ga3phbGxvYyhzaXplb2YoKmZtdDIpLEdGUF9LRVJORUwpOwotCisJCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksIEdGUF9LRVJORUwpOworCQlpZiAoIWZtdDIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQogCQlmbXQyLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKIAkJZm10Mi0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gZm10LT5zYW1wbGVzX3Blcl9saW5lOwogCQlmbXQyLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgPSBmbXQtPnNhbXBsaW5nX3JhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggYzA1NmZmNi4uMzRkZWI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2RlZmluZSBfX09MRF9WSURJT0NfIC8qIFRvIGFsbG93IGZpeGluZyBvbGQgY2FsbHMqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CkBAIC04MiwxMDggKzgxLDYgQEAKICAqLwogCiAKLWNoYXIgKnY0bDJfbm9ybV90b19uYW1lKHY0bDJfc3RkX2lkIGlkKQotewotCWNoYXIgKm5hbWU7Ci0JdTMyIG15aWQgPSBpZDsKLQotCS8qIEhBQ0s6IHBwYzMyIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGhhdmUgX191Y21wZGkyIGZ1bmN0aW9uIHRvIGhhbmRsZQotCSAgIDY0IGJpdCBjb21wYXJhdGlvbnMuIFNvLCBvbiB0aGF0IGFyY2hpdGVjdHVyZSwgd2l0aCBzb21lIGdjYyB2YXJpYW50cywKLQkgICBjb21waWxhdGlvbiBmYWlscy4gQ3VycmVudGx5LCB0aGUgbWF4IHZhbHVlIGlzIDMwYml0IHdpZGUuCi0JICovCi0JQlVHX09OKG15aWQgIT0gaWQpOwotCi0Jc3dpdGNoIChteWlkKSB7Ci0JY2FzZSBWNEwyX1NURF9QQUw6Ci0JCW5hbWU9IlBBTCI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX1BBTF9CRzoKLQkJbmFtZT0iUEFMLUJHIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfUEFMX0RLOgotCQluYW1lPSJQQUwtREsiOwkJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9QQUxfQjoKLQkJbmFtZT0iUEFMLUIiOwkJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9QQUxfQjE6Ci0JCW5hbWU9IlBBTC1CMSI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX1BBTF9HOgotCQluYW1lPSJQQUwtRyI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX1BBTF9IOgotCQluYW1lPSJQQUwtSCI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX1BBTF9JOgotCQluYW1lPSJQQUwtSSI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX1BBTF9EOgotCQluYW1lPSJQQUwtRCI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX1BBTF9EMToKLQkJbmFtZT0iUEFMLUQxIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfUEFMX0s6Ci0JCW5hbWU9IlBBTC1LIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfUEFMX006Ci0JCW5hbWU9IlBBTC1NIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfUEFMX046Ci0JCW5hbWU9IlBBTC1OIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfUEFMX05jOgotCQluYW1lPSJQQUwtTmMiOwkJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9QQUxfNjA6Ci0JCW5hbWU9IlBBTC02MCI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX05UU0M6Ci0JCW5hbWU9Ik5UU0MiOwkJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9OVFNDX006Ci0JCW5hbWU9Ik5UU0MtTSI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX05UU0NfTV9KUDoKLQkJbmFtZT0iTlRTQy1NLUpQIjsJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9OVFNDXzQ0MzoKLQkJbmFtZT0iTlRTQy00NDMiOwlicmVhazsKLQljYXNlIFY0TDJfU1REX05UU0NfTV9LUjoKLQkJbmFtZT0iTlRTQy1NLUtSIjsJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9TRUNBTToKLQkJbmFtZT0iU0VDQU0iOwkJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9TRUNBTV9ESzoKLQkJbmFtZT0iU0VDQU0tREsiOwlicmVhazsKLQljYXNlIFY0TDJfU1REX1NFQ0FNX0I6Ci0JCW5hbWU9IlNFQ0FNLUIiOwkJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9TRUNBTV9EOgotCQluYW1lPSJTRUNBTS1EIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfU0VDQU1fRzoKLQkJbmFtZT0iU0VDQU0tRyI7CQlicmVhazsKLQljYXNlIFY0TDJfU1REX1NFQ0FNX0g6Ci0JCW5hbWU9IlNFQ0FNLUgiOwkJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9TRUNBTV9LOgotCQluYW1lPSJTRUNBTS1LIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfU0VDQU1fSzE6Ci0JCW5hbWU9IlNFQ0FNLUsxIjsJYnJlYWs7Ci0JY2FzZSBWNEwyX1NURF9TRUNBTV9MOgotCQluYW1lPSJTRUNBTS1MIjsJCWJyZWFrOwotCWNhc2UgVjRMMl9TVERfU0VDQU1fTEM6Ci0JCW5hbWU9IlNFQ0FNLUxDIjsJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmFtZT0iVW5rbm93biI7CQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbmFtZTsKLX0KLQotLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIGEgdjRsMl9zdGFuZGFyZCBzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvIHRoZQotICAgJ2lkJyBhbmQgJ3RyYW5zbWlzc2lvbicgcGFyYW1ldGVycy4gIFJldHVybnMgbmVnYXRpdmUgb24gZXJyb3IuICAqLwotaW50IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMsCi0JCQkgICAgIGludCBpZCwgY2hhciAqbmFtZSkKLXsKLQl1MzIgaW5kZXggPSB2cy0+aW5kZXg7Ci0KLQltZW1zZXQodnMsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkpOwotCXZzLT5pbmRleCA9IGluZGV4OwotCXZzLT5pZCAgICA9IGlkOwotCWlmIChpZCAmIFY0TDJfU1REXzUyNV82MCkgewotCQl2cy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKLQkJdnMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMzAwMDA7Ci0JCXZzLT5mcmFtZWxpbmVzID0gNTI1OwotCX0gZWxzZSB7Ci0JCXZzLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOwotCQl2cy0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKLQkJdnMtPmZyYW1lbGluZXMgPSA2MjU7Ci0JfQotCXN0cmxjcHkodnMtPm5hbWUsbmFtZSxzaXplb2YodnMtPm5hbWUpKTsKLQlyZXR1cm4gMDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHByaW9yaXR5IGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTE5Niw2ICs5Myw3IEBACiAJbWVtc2V0KGdsb2JhbCwwLHNpemVvZigqZ2xvYmFsKSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19pbml0KTsKIAogaW50IHY0bDJfcHJpb19jaGFuZ2Uoc3RydWN0IHY0bDJfcHJpb19zdGF0ZSAqZ2xvYmFsLCBlbnVtIHY0bDJfcHJpb3JpdHkgKmxvY2FsLAogCQkgICAgIGVudW0gdjRsMl9wcmlvcml0eSBuZXcpCkBAIC0yMTEsMTEgKzEwOSwxMyBAQAogCSpsb2NhbCA9IG5ldzsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodjRsMl9wcmlvX2NoYW5nZSk7CiAKIGludCB2NGwyX3ByaW9fb3BlbihzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwsIGVudW0gdjRsMl9wcmlvcml0eSAqbG9jYWwpCiB7CiAJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoZ2xvYmFsLGxvY2FsLFY0TDJfUFJJT1JJVFlfREVGQVVMVCk7CiB9CitFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19vcGVuKTsKIAogaW50IHY0bDJfcHJpb19jbG9zZShzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwsIGVudW0gdjRsMl9wcmlvcml0eSAqbG9jYWwpCiB7CkBAIC0yMjMsNiArMTIzLDcgQEAKIAkJYXRvbWljX2RlYygmZ2xvYmFsLT5wcmlvc1sqbG9jYWxdKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodjRsMl9wcmlvX2Nsb3NlKTsKIAogZW51bSB2NGwyX3ByaW9yaXR5IHY0bDJfcHJpb19tYXgoc3RydWN0IHY0bDJfcHJpb19zdGF0ZSAqZ2xvYmFsKQogewpAQCAtMjM0LDYgKzEzNSw3IEBACiAJCXJldHVybiBWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkQ7CiAJcmV0dXJuIFY0TDJfUFJJT1JJVFlfVU5TRVQ7CiB9CitFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19tYXgpOwogCiBpbnQgdjRsMl9wcmlvX2NoZWNrKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCkKIHsKQEAgLTI0MSwyMjUgKzE0Myw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJcmV0dXJuIDA7CiB9Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIHNvbWUgYXJyYXlzIGZvciBwcmV0dHktcHJpbnRpbmcgZGVidWcgbWVzc2FnZXMgb2YgZW51bSB0eXBlcyAgICAgICovCi0KLWNoYXIgKnY0bDJfZmllbGRfbmFtZXNbXSA9IHsKLQlbVjRMMl9GSUVMRF9BTlldICAgICAgICA9ICJhbnkiLAotCVtWNEwyX0ZJRUxEX05PTkVdICAgICAgID0gIm5vbmUiLAotCVtWNEwyX0ZJRUxEX1RPUF0gICAgICAgID0gInRvcCIsCi0JW1Y0TDJfRklFTERfQk9UVE9NXSAgICAgPSAiYm90dG9tIiwKLQlbVjRMMl9GSUVMRF9JTlRFUkxBQ0VEXSA9ICJpbnRlcmxhY2VkIiwKLQlbVjRMMl9GSUVMRF9TRVFfVEJdICAgICA9ICJzZXEtdGIiLAotCVtWNEwyX0ZJRUxEX1NFUV9CVF0gICAgID0gInNlcS1idCIsCi0JW1Y0TDJfRklFTERfQUxURVJOQVRFXSAgPSAiYWx0ZXJuYXRlIiwKLQlbVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCXSA9ICJpbnRlcmxhY2VkLXRiIiwKLQlbVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUXSA9ICJpbnRlcmxhY2VkLWJ0IiwKLX07Ci0KLWNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdID0gewotCVtWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVdICAgICAgPSAidmlkZW8tY2FwIiwKLQlbVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZXSAgICAgID0gInZpZGVvLW92ZXIiLAotCVtWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF0gICAgICAgPSAidmlkZW8tb3V0IiwKLQlbVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRV0gICAgICAgID0gInZiaS1jYXAiLAotCVtWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVRdICAgICAgICAgPSAidmJpLW91dCIsCi0JW1Y0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFXSA9ICJzbGljZWQtdmJpLWNhcCIsCi0JW1Y0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVRdICA9ICJzbGljZWQtdmJpLW91dCIsCi0JW1Y0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVldID0gInZpZGVvLW91dC1vdmVyIiwKLX07Ci0KLQotI2RlZmluZSBwcnRfbmFtZXMoYSxhcnIpICgoKGEpPj0wKSYmKChhKTxBUlJBWV9TSVpFKGFycikpKT9hcnJbYV06InVua25vd24iCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogZGVidWcgaGVscCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLXN0YXRpYyBjb25zdCBjaGFyICp2NGwxX2lvY3Rsc1tdID0gewotCVtfSU9DX05SKFZJRElPQ0dDQVApXSAgICAgICA9ICJWSURJT0NHQ0FQIiwKLQlbX0lPQ19OUihWSURJT0NHQ0hBTildICAgICAgPSAiVklESU9DR0NIQU4iLAotCVtfSU9DX05SKFZJRElPQ1NDSEFOKV0gICAgICA9ICJWSURJT0NTQ0hBTiIsCi0JW19JT0NfTlIoVklESU9DR1RVTkVSKV0gICAgID0gIlZJRElPQ0dUVU5FUiIsCi0JW19JT0NfTlIoVklESU9DU1RVTkVSKV0gICAgID0gIlZJRElPQ1NUVU5FUiIsCi0JW19JT0NfTlIoVklESU9DR1BJQ1QpXSAgICAgID0gIlZJRElPQ0dQSUNUIiwKLQlbX0lPQ19OUihWSURJT0NTUElDVCldICAgICAgPSAiVklESU9DU1BJQ1QiLAotCVtfSU9DX05SKFZJRElPQ0NBUFRVUkUpXSAgICA9ICJWSURJT0NDQVBUVVJFIiwKLQlbX0lPQ19OUihWSURJT0NHV0lOKV0gICAgICAgPSAiVklESU9DR1dJTiIsCi0JW19JT0NfTlIoVklESU9DU1dJTildICAgICAgID0gIlZJRElPQ1NXSU4iLAotCVtfSU9DX05SKFZJRElPQ0dGQlVGKV0gICAgICA9ICJWSURJT0NHRkJVRiIsCi0JW19JT0NfTlIoVklESU9DU0ZCVUYpXSAgICAgID0gIlZJRElPQ1NGQlVGIiwKLQlbX0lPQ19OUihWSURJT0NLRVkpXSAgICAgICAgPSAiVklESU9DS0VZIiwKLQlbX0lPQ19OUihWSURJT0NHRlJFUSldICAgICAgPSAiVklESU9DR0ZSRVEiLAotCVtfSU9DX05SKFZJRElPQ1NGUkVRKV0gICAgICA9ICJWSURJT0NTRlJFUSIsCi0JW19JT0NfTlIoVklESU9DR0FVRElPKV0gICAgID0gIlZJRElPQ0dBVURJTyIsCi0JW19JT0NfTlIoVklESU9DU0FVRElPKV0gICAgID0gIlZJRElPQ1NBVURJTyIsCi0JW19JT0NfTlIoVklESU9DU1lOQyldICAgICAgID0gIlZJRElPQ1NZTkMiLAotCVtfSU9DX05SKFZJRElPQ01DQVBUVVJFKV0gICA9ICJWSURJT0NNQ0FQVFVSRSIsCi0JW19JT0NfTlIoVklESU9DR01CVUYpXSAgICAgID0gIlZJRElPQ0dNQlVGIiwKLQlbX0lPQ19OUihWSURJT0NHVU5JVCldICAgICAgPSAiVklESU9DR1VOSVQiLAotCVtfSU9DX05SKFZJRElPQ0dDQVBUVVJFKV0gICA9ICJWSURJT0NHQ0FQVFVSRSIsCi0JW19JT0NfTlIoVklESU9DU0NBUFRVUkUpXSAgID0gIlZJRElPQ1NDQVBUVVJFIiwKLQlbX0lPQ19OUihWSURJT0NTUExBWU1PREUpXSAgPSAiVklESU9DU1BMQVlNT0RFIiwKLQlbX0lPQ19OUihWSURJT0NTV1JJVEVNT0RFKV0gPSAiVklESU9DU1dSSVRFTU9ERSIsCi0JW19JT0NfTlIoVklESU9DR1BMQVlJTkZPKV0gID0gIlZJRElPQ0dQTEFZSU5GTyIsCi0JW19JT0NfTlIoVklESU9DU01JQ1JPQ09ERSldID0gIlZJRElPQ1NNSUNST0NPREUiLAotCVtfSU9DX05SKFZJRElPQ0dWQklGTVQpXSAgICA9ICJWSURJT0NHVkJJRk1UIiwKLQlbX0lPQ19OUihWSURJT0NTVkJJRk1UKV0gICAgPSAiVklESU9DU1ZCSUZNVCIKLX07Ci0jZGVmaW5lIFY0TDFfSU9DVExTIEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpCi0jZW5kaWYKLQotc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfaW9jdGxzW10gPSB7Ci0JW19JT0NfTlIoVklESU9DX1FVRVJZQ0FQKV0gICAgICAgICA9ICJWSURJT0NfUVVFUllDQVAiLAotCVtfSU9DX05SKFZJRElPQ19SRVNFUlZFRCldICAgICAgICAgPSAiVklESU9DX1JFU0VSVkVEIiwKLQlbX0lPQ19OUihWSURJT0NfRU5VTV9GTVQpXSAgICAgICAgID0gIlZJRElPQ19FTlVNX0ZNVCIsCi0JW19JT0NfTlIoVklESU9DX0dfRk1UKV0gICAgICAgICAgICA9ICJWSURJT0NfR19GTVQiLAotCVtfSU9DX05SKFZJRElPQ19TX0ZNVCldICAgICAgICAgICAgPSAiVklESU9DX1NfRk1UIiwKLQlbX0lPQ19OUihWSURJT0NfUkVRQlVGUyldICAgICAgICAgID0gIlZJRElPQ19SRVFCVUZTIiwKLQlbX0lPQ19OUihWSURJT0NfUVVFUllCVUYpXSAgICAgICAgID0gIlZJRElPQ19RVUVSWUJVRiIsCi0JW19JT0NfTlIoVklESU9DX0dfRkJVRildICAgICAgICAgICA9ICJWSURJT0NfR19GQlVGIiwKLQlbX0lPQ19OUihWSURJT0NfU19GQlVGKV0gICAgICAgICAgID0gIlZJRElPQ19TX0ZCVUYiLAotCVtfSU9DX05SKFZJRElPQ19PVkVSTEFZKV0gICAgICAgICAgPSAiVklESU9DX09WRVJMQVkiLAotCVtfSU9DX05SKFZJRElPQ19RQlVGKV0gICAgICAgICAgICAgPSAiVklESU9DX1FCVUYiLAotCVtfSU9DX05SKFZJRElPQ19EUUJVRildICAgICAgICAgICAgPSAiVklESU9DX0RRQlVGIiwKLQlbX0lPQ19OUihWSURJT0NfU1RSRUFNT04pXSAgICAgICAgID0gIlZJRElPQ19TVFJFQU1PTiIsCi0JW19JT0NfTlIoVklESU9DX1NUUkVBTU9GRildICAgICAgICA9ICJWSURJT0NfU1RSRUFNT0ZGIiwKLQlbX0lPQ19OUihWSURJT0NfR19QQVJNKV0gICAgICAgICAgID0gIlZJRElPQ19HX1BBUk0iLAotCVtfSU9DX05SKFZJRElPQ19TX1BBUk0pXSAgICAgICAgICAgPSAiVklESU9DX1NfUEFSTSIsCi0JW19JT0NfTlIoVklESU9DX0dfU1REKV0gICAgICAgICAgICA9ICJWSURJT0NfR19TVEQiLAotCVtfSU9DX05SKFZJRElPQ19TX1NURCldICAgICAgICAgICAgPSAiVklESU9DX1NfU1REIiwKLQlbX0lPQ19OUihWSURJT0NfRU5VTVNURCldICAgICAgICAgID0gIlZJRElPQ19FTlVNU1REIiwKLQlbX0lPQ19OUihWSURJT0NfRU5VTUlOUFVUKV0gICAgICAgID0gIlZJRElPQ19FTlVNSU5QVVQiLAotCVtfSU9DX05SKFZJRElPQ19HX0NUUkwpXSAgICAgICAgICAgPSAiVklESU9DX0dfQ1RSTCIsCi0JW19JT0NfTlIoVklESU9DX1NfQ1RSTCldICAgICAgICAgICA9ICJWSURJT0NfU19DVFJMIiwKLQlbX0lPQ19OUihWSURJT0NfR19UVU5FUildICAgICAgICAgID0gIlZJRElPQ19HX1RVTkVSIiwKLQlbX0lPQ19OUihWSURJT0NfU19UVU5FUildICAgICAgICAgID0gIlZJRElPQ19TX1RVTkVSIiwKLQlbX0lPQ19OUihWSURJT0NfR19BVURJTyldICAgICAgICAgID0gIlZJRElPQ19HX0FVRElPIiwKLQlbX0lPQ19OUihWSURJT0NfU19BVURJTyldICAgICAgICAgID0gIlZJRElPQ19TX0FVRElPIiwKLQlbX0lPQ19OUihWSURJT0NfUVVFUllDVFJMKV0gICAgICAgID0gIlZJRElPQ19RVUVSWUNUUkwiLAotCVtfSU9DX05SKFZJRElPQ19RVUVSWU1FTlUpXSAgICAgICAgPSAiVklESU9DX1FVRVJZTUVOVSIsCi0JW19JT0NfTlIoVklESU9DX0dfSU5QVVQpXSAgICAgICAgICA9ICJWSURJT0NfR19JTlBVVCIsCi0JW19JT0NfTlIoVklESU9DX1NfSU5QVVQpXSAgICAgICAgICA9ICJWSURJT0NfU19JTlBVVCIsCi0JW19JT0NfTlIoVklESU9DX0dfT1VUUFVUKV0gICAgICAgICA9ICJWSURJT0NfR19PVVRQVVQiLAotCVtfSU9DX05SKFZJRElPQ19TX09VVFBVVCldICAgICAgICAgPSAiVklESU9DX1NfT1VUUFVUIiwKLQlbX0lPQ19OUihWSURJT0NfRU5VTU9VVFBVVCldICAgICAgID0gIlZJRElPQ19FTlVNT1VUUFVUIiwKLQlbX0lPQ19OUihWSURJT0NfR19BVURPVVQpXSAgICAgICAgID0gIlZJRElPQ19HX0FVRE9VVCIsCi0JW19JT0NfTlIoVklESU9DX1NfQVVET1VUKV0gICAgICAgICA9ICJWSURJT0NfU19BVURPVVQiLAotCVtfSU9DX05SKFZJRElPQ19HX01PRFVMQVRPUildICAgICAgPSAiVklESU9DX0dfTU9EVUxBVE9SIiwKLQlbX0lPQ19OUihWSURJT0NfU19NT0RVTEFUT1IpXSAgICAgID0gIlZJRElPQ19TX01PRFVMQVRPUiIsCi0JW19JT0NfTlIoVklESU9DX0dfRlJFUVVFTkNZKV0gICAgICA9ICJWSURJT0NfR19GUkVRVUVOQ1kiLAotCVtfSU9DX05SKFZJRElPQ19TX0ZSRVFVRU5DWSldICAgICAgPSAiVklESU9DX1NfRlJFUVVFTkNZIiwKLQlbX0lPQ19OUihWSURJT0NfQ1JPUENBUCldICAgICAgICAgID0gIlZJRElPQ19DUk9QQ0FQIiwKLQlbX0lPQ19OUihWSURJT0NfR19DUk9QKV0gICAgICAgICAgID0gIlZJRElPQ19HX0NST1AiLAotCVtfSU9DX05SKFZJRElPQ19TX0NST1ApXSAgICAgICAgICAgPSAiVklESU9DX1NfQ1JPUCIsCi0JW19JT0NfTlIoVklESU9DX0dfSlBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfR19KUEVHQ09NUCIsCi0JW19JT0NfTlIoVklESU9DX1NfSlBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfU19KUEVHQ09NUCIsCi0JW19JT0NfTlIoVklESU9DX1FVRVJZU1REKV0gICAgICAgICA9ICJWSURJT0NfUVVFUllTVEQiLAotCVtfSU9DX05SKFZJRElPQ19UUllfRk1UKV0gICAgICAgICAgPSAiVklESU9DX1RSWV9GTVQiLAotCVtfSU9DX05SKFZJRElPQ19FTlVNQVVESU8pXSAgICAgICAgPSAiVklESU9DX0VOVU1BVURJTyIsCi0JW19JT0NfTlIoVklESU9DX0VOVU1BVURPVVQpXSAgICAgICA9ICJWSURJT0NfRU5VTUFVRE9VVCIsCi0JW19JT0NfTlIoVklESU9DX0dfUFJJT1JJVFkpXSAgICAgICA9ICJWSURJT0NfR19QUklPUklUWSIsCi0JW19JT0NfTlIoVklESU9DX1NfUFJJT1JJVFkpXSAgICAgICA9ICJWSURJT0NfU19QUklPUklUWSIsCi0JW19JT0NfTlIoVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVApXSA9ICJWSURJT0NfR19TTElDRURfVkJJX0NBUCIsCi0JW19JT0NfTlIoVklESU9DX0xPR19TVEFUVVMpXSAgICAgICA9ICJWSURJT0NfTE9HX1NUQVRVUyIsCi0JW19JT0NfTlIoVklESU9DX0dfRVhUX0NUUkxTKV0gICAgICA9ICJWSURJT0NfR19FWFRfQ1RSTFMiLAotCVtfSU9DX05SKFZJRElPQ19TX0VYVF9DVFJMUyldICAgICAgPSAiVklESU9DX1NfRVhUX0NUUkxTIiwKLQlbX0lPQ19OUihWSURJT0NfVFJZX0VYVF9DVFJMUyldICAgID0gIlZJRElPQ19UUllfRVhUX0NUUkxTIiwKLSNpZiAxCi0JW19JT0NfTlIoVklESU9DX0VOVU1fRlJBTUVTSVpFUyldICA9ICJWSURJT0NfRU5VTV9GUkFNRVNJWkVTIiwKLQlbX0lPQ19OUihWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUyldID0gIlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIiwKLQlbX0lPQ19OUihWSURJT0NfR19FTkNfSU5ERVgpXSAJICAgPSAiVklESU9DX0dfRU5DX0lOREVYIiwKLQlbX0lPQ19OUihWSURJT0NfRU5DT0RFUl9DTUQpXSAJICAgPSAiVklESU9DX0VOQ09ERVJfQ01EIiwKLQlbX0lPQ19OUihWSURJT0NfVFJZX0VOQ09ERVJfQ01EKV0gID0gIlZJRElPQ19UUllfRU5DT0RFUl9DTUQiLAotCi0JW19JT0NfTlIoVklESU9DX0RCR19TX1JFR0lTVEVSKV0gICA9ICJWSURJT0NfREJHX1NfUkVHSVNURVIiLAotCVtfSU9DX05SKFZJRElPQ19EQkdfR19SRUdJU1RFUildICAgPSAiVklESU9DX0RCR19HX1JFR0lTVEVSIiwKLQotCVtfSU9DX05SKFZJRElPQ19HX0NISVBfSURFTlQpXSAgICAgPSAiVklESU9DX0dfQ0hJUF9JREVOVCIsCi0jZW5kaWYKLX07Ci0jZGVmaW5lIFY0TDJfSU9DVExTIEFSUkFZX1NJWkUodjRsMl9pb2N0bHMpCi0KLXN0YXRpYyBjb25zdCBjaGFyICp2NGwyX2ludF9pb2N0bHNbXSA9IHsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQlbX0lPQ19OUihERUNPREVSX0dFVF9DQVBBQklMSVRJRVMpXSAgICA9ICJERUNPREVSX0dFVF9DQVBBQklMSVRJRVMiLAotCVtfSU9DX05SKERFQ09ERVJfR0VUX1NUQVRVUyldICAgICAgICAgID0gIkRFQ09ERVJfR0VUX1NUQVRVUyIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfTk9STSldICAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfTk9STSIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfSU5QVVQpXSAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfSU5QVVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX09VVFBVVCldICAgICAgICAgID0gIkRFQ09ERVJfU0VUX09VVFBVVCIsCi0JW19JT0NfTlIoREVDT0RFUl9FTkFCTEVfT1VUUFVUKV0gICAgICAgPSAiREVDT0RFUl9FTkFCTEVfT1VUUFVUIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9QSUNUVVJFKV0gICAgICAgICA9ICJERUNPREVSX1NFVF9QSUNUVVJFIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9HUElPKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9HUElPIiwKLQlbX0lPQ19OUihERUNPREVSX0lOSVQpXSAgICAgICAgICAgICAgICA9ICJERUNPREVSX0lOSVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX1ZCSV9CWVBBU1MpXSAgICAgID0gIkRFQ09ERVJfU0VUX1ZCSV9CWVBBU1MiLAotCVtfSU9DX05SKERFQ09ERVJfRFVNUCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfRFVNUCIsCi0jZW5kaWYKLQlbX0lPQ19OUihBVURDX1NFVF9SQURJTyldICAgICAgICAgICAgICA9ICJBVURDX1NFVF9SQURJTyIsCi0KLQlbX0lPQ19OUihUVU5FUl9TRVRfVFlQRV9BRERSKV0gICAgICAgICA9ICJUVU5FUl9TRVRfVFlQRV9BRERSIiwKLQlbX0lPQ19OUihUVU5FUl9TRVRfU1RBTkRCWSldICAgICAgICAgICA9ICJUVU5FUl9TRVRfU1RBTkRCWSIsCi0JW19JT0NfTlIoVFVORVJfU0VUX0NPTkZJRyldICAgICAgICAgICAgPSAiVFVORVJfU0VUX0NPTkZJRyIsCi0KLQlbX0lPQ19OUihWSURJT0NfSU5UX1NfVFVORVJfTU9ERSldICAgICA9ICJWSURJT0NfSU5UX1NfVFVORVJfTU9ERSIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9SRVNFVCldICAgICAgICAgICAgPSAiVklESU9DX0lOVF9SRVNFVCIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRKV0gPSAiVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRIiwKLQlbX0lPQ19OUihWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSldICA9ICJWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9TX1ZCSV9EQVRBKV0gICAgICAgPSAiVklESU9DX0lOVF9TX1ZCSV9EQVRBIiwKLQlbX0lPQ19OUihWSURJT0NfSU5UX0dfVkJJX0RBVEEpXSAgICAgICA9ICJWSURJT0NfSU5UX0dfVkJJX0RBVEEiLAotCVtfSU9DX05SKFZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVEpXSAgID0gIlZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVEiLAotCVtfSU9DX05SKFZJRElPQ19JTlRfU19TVEFOREJZKV0gICAgICAgID0gIlZJRElPQ19JTlRfU19TVEFOREJZIiwKLQlbX0lPQ19OUihWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkcpXSAgPSAiVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkciLAotCVtfSU9DX05SKFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HKV0gID0gIlZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HIiwKLQlbX0lPQ19OUihWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9TX0NSWVNUQUxfRlJFUSldICAgPSAiVklESU9DX0lOVF9TX0NSWVNUQUxfRlJFUSIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9JTklUKV0gICAJICAgICAgID0gIlZJRElPQ19JTlRfSU5JVCIsCi0JW19JT0NfTlIoVklESU9DX0lOVF9HX1NURF9PVVRQVVQpXSAgICAgPSAiVklESU9DX0lOVF9HX1NURF9PVVRQVVQiLAotCVtfSU9DX05SKFZJRElPQ19JTlRfU19TVERfT1VUUFVUKV0gICAgID0gIlZJRElPQ19JTlRfU19TVERfT1VUUFVUIiwKLX07Ci0jZGVmaW5lIFY0TDJfSU5UX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW50X2lvY3RscykKLQotCi0vKiBDb21tb24gaW9jdGwgZGVidWcgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkKLSAgIGV4dGVybmFsIGlvY3RsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgaW50ZXJuYWwgVjRMIGlvY3RsICovCi12b2lkIHY0bF9wcmludGtfaW9jdGwodW5zaWduZWQgaW50IGNtZCkKLXsKLQljaGFyICpkaXI7Ci0KLQlzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKLQljYXNlIF9JT0NfTk9ORTogICAgICAgICAgICAgIGRpciA9ICItLSI7IGJyZWFrOwotCWNhc2UgX0lPQ19SRUFEOiAgICAgICAgICAgICAgZGlyID0gInItIjsgYnJlYWs7Ci0JY2FzZSBfSU9DX1dSSVRFOiAgICAgICAgICAgICBkaXIgPSAiLXciOyBicmVhazsKLQljYXNlIF9JT0NfUkVBRCB8IF9JT0NfV1JJVEU6IGRpciA9ICJydyI7IGJyZWFrOwotCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgZGlyID0gIipFUlIqIjsgYnJlYWs7Ci0JfQotCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKLQljYXNlICdkJzoKLQkJcHJpbnRrKCJ2NGwyX2ludCBpb2N0bCAlcywgZGlyPSVzICgweCUwOHgpXG4iLAotCQkgICAgICAgKF9JT0NfTlIoY21kKSA8IFY0TDJfSU5UX0lPQ1RMUykgPwotCQkgICAgICAgdjRsMl9pbnRfaW9jdGxzW19JT0NfTlIoY21kKV0gOiAiVU5LTk9XTiIsIGRpciwgY21kKTsKLQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSAndic6Ci0JCXByaW50aygidjRsMSBpb2N0bCAlcywgZGlyPSVzICgweCUwOHgpXG4iLAotCQkgICAgICAgKF9JT0NfTlIoY21kKSA8IFY0TDFfSU9DVExTKSA/Ci0JCSAgICAgICB2NGwxX2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIlVOS05PV04iLCBkaXIsIGNtZCk7Ci0JCWJyZWFrOwotI2VuZGlmCi0JY2FzZSAnVic6Ci0JCXByaW50aygidjRsMiBpb2N0bCAlcywgZGlyPSVzICgweCUwOHgpXG4iLAotCQkgICAgICAgKF9JT0NfTlIoY21kKSA8IFY0TDJfSU9DVExTKSA/Ci0JCSAgICAgICB2NGwyX2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIlVOS05PV04iLCBkaXIsIGNtZCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJpbnRrKCJ1bmtub3duIGlvY3RsICclYycsIGRpcj0lcywgIyVkICgweCUwOHgpXG4iLAotCQkgICAgICAgX0lPQ19UWVBFKGNtZCksIGRpciwgX0lPQ19OUihjbWQpLCBjbWQpOwotCX0KLX0KLQorRVhQT1JUX1NZTUJPTCh2NGwyX3ByaW9fY2hlY2spOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC00ODgsNiArMTcyLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9jaGVjayk7CiAKIC8qIFJldHVybnMgTlVMTCBvciBhIGNoYXJhY3RlciBwb2ludGVyIGFycmF5IGNvbnRhaW5pbmcgdGhlIG1lbnUgZm9yCiAgICB0aGUgZ2l2ZW4gY29udHJvbCBJRC4gVGhlIHBvaW50ZXIgYXJyYXkgZW5kcyB3aXRoIGEgTlVMTCBwb2ludGVyLgpAQCAtNjQ4LDYgKzMzMyw3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9nZXRfbWVudSk7CiAKIC8qIEZpbGwgaW4gYSBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKi8KIGludCB2NGwyX2N0cmxfcXVlcnlfZmlsbChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBzMzIgbWluLCBzMzIgbWF4LCBzMzIgc3RlcCwgczMyIGRlZikKQEAgLTc3MCw2ICs0NTYsNyBAQAogCXNucHJpbnRmKHFjdHJsLT5uYW1lLCBzaXplb2YocWN0cmwtPm5hbWUpLCBuYW1lKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X2ZpbGwpOwogCiAvKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnljdHJsIHdpdGggc3RhbmRhcmQgdmFsdWVzIGJhc2VkIG9uCiAgICB0aGUgY29udHJvbCBJRC4gKi8KQEAgLTkwNCw2ICs1OTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZCk7CiAKIC8qIEZpbGwgaW4gYSBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgYmFzZWQgb24gdGhlIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBhbmQKICAgIHRoZSBtZW51LiBUaGUgcWN0cmwgcG9pbnRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBpZ25vcmVkLiAqLwpAQCAtOTIyLDYgKzYxMCw3IEBACiAJcW1lbnUtPnJlc2VydmVkID0gMDsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X21lbnUpOwogCiAvKiBjdHJsX2NsYXNzZXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHUzMiBwb2ludGVycywgdGhlIGxhc3QgZWxlbWVudCBpcwogICAgYSBOVUxMIHBvaW50ZXIuIEVhY2ggdTMyIGFycmF5IGlzIGEgMC10ZXJtaW5hdGVkIGFycmF5IG9mIGNvbnRyb2wgSURzLgpAQCAtOTcyLDcgKzY2MSwyMCBAQAogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKipjdHJsX2NsYXNzZXM7CiB9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9uZXh0KTsKIAoraW50IHY0bDJfY2hpcF9tYXRjaF9ob3N0KHUzMiBtYXRjaF90eXBlLCB1MzIgbWF0Y2hfY2hpcCkKK3sKKwlzd2l0Y2ggKG1hdGNoX3R5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9IT1NUOgorCQlyZXR1cm4gbWF0Y2hfY2hpcCA9PSAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jaGlwX21hdGNoX2hvc3QpOworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogaW50IHY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1MzIgbWF0Y2hfdHlwZSwgdTMyIG1hdGNoX2NoaXApCiB7CiAJc3dpdGNoIChtYXRjaF90eXBlKSB7CkBAIC05ODQsNiArNjg2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogfQorRVhQT1JUX1NZTUJPTCh2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudCk7CiAKIGludCB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCwKIAkJdTMyIGlkZW50LCB1MzIgcmV2aXNpb24pCkBAIC0xMDAwLDE2ICs3MDMsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotaW50IHY0bDJfY2hpcF9tYXRjaF9ob3N0KHUzMiBtYXRjaF90eXBlLCB1MzIgbWF0Y2hfY2hpcCkKLXsKLQlzd2l0Y2ggKG1hdGNoX3R5cGUpIHsKLQljYXNlIFY0TDJfQ0hJUF9NQVRDSF9IT1NUOgotCQlyZXR1cm4gbWF0Y2hfY2hpcCA9PSAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KK0VYUE9SVF9TWU1CT0wodjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMDM4LDM4ICs3MzIsNSBAQAogCX0KIAlyZXR1cm4gZXJyICE9IC1FTk9NRU0gPyAwIDogZXJyOwogfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1FWFBPUlRfU1lNQk9MKHY0bDJfbm9ybV90b19uYW1lKTsKLUVYUE9SVF9TWU1CT0wodjRsMl92aWRlb19zdGRfY29uc3RydWN0KTsKLQotRVhQT1JUX1NZTUJPTCh2NGwyX3ByaW9faW5pdCk7Ci1FWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19jaGFuZ2UpOwotRVhQT1JUX1NZTUJPTCh2NGwyX3ByaW9fb3Blbik7Ci1FWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19jbG9zZSk7Ci1FWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19tYXgpOwotRVhQT1JUX1NZTUJPTCh2NGwyX3ByaW9fY2hlY2spOwotCi1FWFBPUlRfU1lNQk9MKHY0bDJfZmllbGRfbmFtZXMpOwotRVhQT1JUX1NZTUJPTCh2NGwyX3R5cGVfbmFtZXMpOwotRVhQT1JUX1NZTUJPTCh2NGxfcHJpbnRrX2lvY3RsKTsKLQotRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfbmV4dCk7Ci1FWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9jaGVjayk7Ci1FWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9nZXRfbWVudSk7Ci1FWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9xdWVyeV9tZW51KTsKLUVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X2ZpbGwpOwotRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQpOwotCi1FWFBPUlRfU1lNQk9MKHY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KTsKLUVYUE9SVF9TWU1CT0wodjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQpOwotRVhQT1JUX1NZTUJPTCh2NGwyX2NoaXBfbWF0Y2hfaG9zdCk7Ci0KIEVYUE9SVF9TWU1CT0wodjRsMl9pMmNfYXR0YWNoKTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWludC1kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pbnQtZGV2aWNlLmMKaW5kZXggYTU0NWRjYS4uMGU0NTQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWludC1kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW50LWRldmljZS5jCkBAIC0xNTYsMyArMTU2LDUgQEAKIAkJZmluZF9pb2N0bChkLT51LnNsYXZlLCBjbWQsCiAJCQkgICAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKW5vX3N1Y2hfaW9jdGxfMSkpKGQsIGFyZyk7CiB9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMKaW5kZXggODBhMTRkYS4uZWFiNzlmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCS8qIEhhdmluZyBpbXBsZW1lbnRhdGlvbnMgZm9yIGFic3RyYWN0IG1ldGhvZHMgYXJlIG1hbmRhdG9yeSAqLwogCUJVR19PTighcS0+aW50X29wcyk7CiAKLQltdXRleF9pbml0KCZxLT5sb2NrKTsKKwltdXRleF9pbml0KCZxLT52Yl9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcS0+c3RyZWFtKTsKIH0KIApAQCAtMTg5LDcgKzE4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIExvY2tpbmc6IENhbGxlciBob2xkcyBxLT5sb2NrICovCisvKiBMb2NraW5nOiBDYWxsZXIgaG9sZHMgcS0+dmJfbG9jayAqLwogdm9pZCB2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtMjIwLDcgKzIyMCw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBMb2NraW5nOiBDYWxsZXIgaG9sZHMgcS0+bG9jayAqLworLyogTG9ja2luZzogQ2FsbGVyIGhvbGRzIHEtPnZiX2xvY2sgKi8KIGVudW0gdjRsMl9maWVsZCB2aWRlb2J1Zl9uZXh0X2ZpZWxkKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSkKIHsKIAllbnVtIHY0bDJfZmllbGQgZmllbGQgPSBxLT5maWVsZDsKQEAgLTIzOSw3ICsyMzksNyBAQAogCXJldHVybiBmaWVsZDsKIH0KIAotLyogTG9ja2luZzogQ2FsbGVyIGhvbGRzIHEtPmxvY2sgKi8KKy8qIExvY2tpbmc6IENhbGxlciBob2xkcyBxLT52Yl9sb2NrICovCiBzdGF0aWMgdm9pZCB2aWRlb2J1Zl9zdGF0dXMoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIsCiAJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewpAQCAtMjk1LDcgKzI5NSw3IEBACiAJYi0+c2VxdWVuY2UgID0gdmItPmZpZWxkX2NvdW50ID4+IDE7CiB9CiAKLS8qIExvY2tpbmc6IENhbGxlciBob2xkcyBxLT5sb2NrICovCisvKiBMb2NraW5nOiBDYWxsZXIgaG9sZHMgcS0+dmJfbG9jayAqLwogc3RhdGljIGludCBfX3ZpZGVvYnVmX21tYXBfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpCiB7CiAJaW50IGk7CkBAIC0zMjgsMTMgKzMyOCwxMyBAQAogaW50IHZpZGVvYnVmX21tYXBfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpCiB7CiAJaW50IHJldDsKLQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAlyZXQgPSBfX3ZpZGVvYnVmX21tYXBfZnJlZShxKTsKLQltdXRleF91bmxvY2soJnEtPmxvY2spOworCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyogTG9ja2luZzogQ2FsbGVyIGhvbGRzIHEtPmxvY2sgKi8KKy8qIExvY2tpbmc6IENhbGxlciBob2xkcyBxLT52Yl9sb2NrICovCiBzdGF0aWMgaW50IF9fdmlkZW9idWZfbW1hcF9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQl1bnNpZ25lZCBpbnQgYmNvdW50LCB1bnNpZ25lZCBpbnQgYnNpemUsCiAJCQllbnVtIHY0bDJfbWVtb3J5IG1lbW9yeSkKQEAgLTM4NCw5ICszODQsOSBAQAogCQkJZW51bSB2NGwyX21lbW9yeSBtZW1vcnkpCiB7CiAJaW50IHJldDsKLQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAlyZXQgPSBfX3ZpZGVvYnVmX21tYXBfc2V0dXAocSwgYmNvdW50LCBic2l6ZSwgbWVtb3J5KTsKLQltdXRleF91bmxvY2soJnEtPmxvY2spOworCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDA4LDcgKzQwOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW11dGV4X2xvY2soJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOwogCWlmIChyZXEtPnR5cGUgIT0gcS0+dHlwZSkgewogCQlkcHJpbnRrKDEsICJyZXFidWZzOiBxdWV1ZSB0eXBlIGludmFsaWRcbiIpOwogCQlyZXR2YWwgPSAtRUlOVkFMOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJcmVxLT5jb3VudCA9IHJldHZhbDsKIAogIGRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmcS0+bG9jayk7CisJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CiAJaWYgKHVubGlrZWx5KGItPnR5cGUgIT0gcS0+dHlwZSkpIHsKIAkJZHByaW50aygxLCAicXVlcnlidWY6IFdyb25nIHR5cGUuXG4iKTsKIAkJZ290byBkb25lOwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAKIAlyZXQgPSAwOwogZG9uZToKLQltdXRleF91bmxvY2soJnEtPmxvY2spOworCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJaWYgKGItPm1lbW9yeSA9PSBWNEwyX01FTU9SWV9NTUFQKQogCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKHEtPnJlYWRpbmcpIHsKIAkJZHByaW50aygxLCAicWJ1ZjogUmVhZGluZyBydW5uaW5nLi4uXG4iKTsKQEAgLTU3Myw3ICs1NzMsNyBAQAogCXJldHZhbCA9IDA7CiAKICBkb25lOgotCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIAogCWlmIChiLT5tZW1vcnkgPT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKQEAgLTU4OSw3ICs1ODksNyBAQAogCiAJTUFHSUNfQ0hFQ0socS0+aW50X29wcy0+bWFnaWMsIE1BR0lDX1FUWVBFX09QUyk7CiAKLQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKHEtPnJlYWRpbmcpIHsKIAkJZHByaW50aygxLCAiZHFidWY6IFJlYWRpbmcgcnVubmluZy4uLlxuIik7CkBAIC02MzIsNyArNjMyLDcgQEAKIAl2aWRlb2J1Zl9zdGF0dXMocSwgYiwgYnVmLCBxLT50eXBlKTsKIAogIGRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY0Miw3ICs2NDIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCByZXR2YWw7CiAKLQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKHEtPnJlYWRpbmcpCiAJCWdvdG8gZG9uZTsKQEAgLTY1OSwxMSArNjU5LDExIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+aXJxbG9jaywgZmxhZ3MpOwogCiAgZG9uZToKLQltdXRleF91bmxvY2soJnEtPmxvY2spOworCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogTG9ja2luZzogQ2FsbGVyIGhvbGRzIHEtPmxvY2sgKi8KKy8qIExvY2tpbmc6IENhbGxlciBob2xkcyBxLT52Yl9sb2NrICovCiBzdGF0aWMgaW50IF9fdmlkZW9idWZfc3RyZWFtb2ZmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSkKIHsKIAlpZiAoIXEtPnN0cmVhbWluZykKQEAgLTY3OSwxNCArNjc5LDE0IEBACiB7CiAJaW50IHJldHZhbDsKIAotCW11dGV4X2xvY2soJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOwogCXJldHZhbCA9IF9fdmlkZW9idWZfc3RyZWFtb2ZmKHEpOwotCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qIExvY2tpbmc6IENhbGxlciBob2xkcyBxLT5sb2NrICovCisvKiBMb2NraW5nOiBDYWxsZXIgaG9sZHMgcS0+dmJfbG9jayAqLwogc3RhdGljIHNzaXplX3QgdmlkZW9idWZfcmVhZF96ZXJvY29weShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkJICAgICAgY2hhciBfX3VzZXIgKmRhdGEsCiAJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC03NDUsNyArNzQ1LDcgQEAKIAogCU1BR0lDX0NIRUNLKHEtPmludF9vcHMtPm1hZ2ljLCBNQUdJQ19RVFlQRV9PUFMpOwogCi0JbXV0ZXhfbG9jaygmcS0+bG9jayk7CisJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CiAKIAluYnVmcyA9IDE7IHNpemUgPSAwOwogCXEtPm9wcy0+YnVmX3NldHVwKHEsICZuYnVmcywgJnNpemUpOwpAQCAtODE3LDExICs4MTcsMTEgQEAKIAl9CiAKICBkb25lOgotCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiBMb2NraW5nOiBDYWxsZXIgaG9sZHMgcS0+bG9jayAqLworLyogTG9ja2luZzogQ2FsbGVyIGhvbGRzIHEtPnZiX2xvY2sgKi8KIHN0YXRpYyBpbnQgX192aWRlb2J1Zl9yZWFkX3N0YXJ0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSkKIHsKIAllbnVtIHY0bDJfZmllbGQgZmllbGQ7CkBAIC04ODIsMjMgKzg4MiwyMyBAQAogewogCWludCByYzsKIAotCW11dGV4X2xvY2soJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOwogCXJjID0gX192aWRlb2J1Zl9yZWFkX3N0YXJ0KHEpOwotCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIAogCXJldHVybiByYzsKIH0KIAogdm9pZCB2aWRlb2J1Zl9yZWFkX3N0b3Aoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKQogewotCW11dGV4X2xvY2soJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOwogCV9fdmlkZW9idWZfcmVhZF9zdG9wKHEpOwotCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIH0KIAogdm9pZCB2aWRlb2J1Zl9zdG9wKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSkKIHsKLQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAogCWlmIChxLT5zdHJlYW1pbmcpCiAJCV9fdmlkZW9idWZfc3RyZWFtb2ZmKHEpOwpAQCAtOTA2LDcgKzkwNiw3IEBACiAJaWYgKHEtPnJlYWRpbmcpCiAJCV9fdmlkZW9idWZfcmVhZF9zdG9wKHEpOwogCi0JbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogfQogCiAKQEAgLTkyMCw3ICs5MjAsNyBAQAogCU1BR0lDX0NIRUNLKHEtPmludF9vcHMtPm1hZ2ljLCBNQUdJQ19RVFlQRV9PUFMpOwogCiAJZHByaW50aygyLCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JbXV0ZXhfbG9jaygmcS0+bG9jayk7CisJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CiAJcmV0dmFsID0gLUVCVVNZOwogCWlmIChxLT5zdHJlYW1pbmcpCiAJCWdvdG8gZG9uZTsKQEAgLTk4MCw3ICs5ODAsNyBAQAogCX0KIAogIGRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk5MSw3ICs5OTEsNyBAQAogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1ZiA9IE5VTEw7CiAJdW5zaWduZWQgaW50IHJjID0gMDsKIAotCW11dGV4X2xvY2soJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPnZiX2xvY2spOwogCWlmIChxLT5zdHJlYW1pbmcpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZxLT5zdHJlYW0pKQogCQkJYnVmID0gbGlzdF9lbnRyeShxLT5zdHJlYW0ubmV4dCwKQEAgLTEwMTksNyArMTAxOSw3IEBACiAJCSAgICBidWYtPnN0YXRlID09IFZJREVPQlVGX0VSUk9SKQogCQkJcmMgPSBQT0xMSU58UE9MTFJETk9STTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtMTAzMCwxMCArMTAzMCwxMCBAQAogCiAJTUFHSUNfQ0hFQ0socS0+aW50X29wcy0+bWFnaWMsIE1BR0lDX1FUWVBFX09QUyk7CiAKLQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAlyZXR2YWwgPSBDQUxMKHEsIG1tYXBfbWFwcGVyLCBxLCB2bWEpOwogCXEtPmlzX21tYXBwZWQgPSAxOwotCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwppbmRleCA5OGVmZDdhLi41M2ZlZDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCW1hcC0+Y291bnQtLTsKIAlpZiAoMCA9PSBtYXAtPmNvdW50KSB7CiAJCWRwcmludGsoMSwibXVubWFwICVwIHE9JXBcbiIsbWFwLHEpOwotCQltdXRleF9sb2NrKCZxLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CiAJCWZvciAoaSA9IDA7IGkgPCBWSURFT19NQVhfRlJBTUU7IGkrKykgewogCQkJaWYgKE5VTEwgPT0gcS0+YnVmc1tpXSkKIAkJCQljb250aW51ZTsKQEAgLTM3Myw3ICszNzMsNyBAQAogCQkJcS0+YnVmc1tpXS0+YmFkZHIgPSAwOwogCQkJcS0+b3BzLT5idWZfcmVsZWFzZShxLHEtPmJ1ZnNbaV0pOwogCQl9Ci0JCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CiAJCWtmcmVlKG1hcCk7CiAJfQogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMKaW5kZXggOWIzODk4My4uNTI2NmVjYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCkBAIC03MCw3ICs3MCw3IEBACiAJbWFwLT5jb3VudC0tOwogCWlmICgwID09IG1hcC0+Y291bnQpIHsKIAkJZHByaW50aygxLCJtdW5tYXAgJXAgcT0lcFxuIixtYXAscSk7Ci0JCW11dGV4X2xvY2soJnEtPmxvY2spOworCQltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKIAkJZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7CiAJCQlpZiAoTlVMTCA9PSBxLT5idWZzW2ldKQogCQkJCWNvbnRpbnVlOwpAQCAtODMsNyArODMsNyBAQAogCQkJcS0+YnVmc1tpXS0+bWFwICAgPSBOVUxMOwogCQkJcS0+YnVmc1tpXS0+YmFkZHIgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmcS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CiAJCWtmcmVlKG1hcCk7CiAJfQogCXJldHVybjsKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBzdGF0aWMgdm9pZCAqX192aWRlb2J1Zl9hbGxvYyhzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgdmlkZWJ1Zl92bWFsbG9jX21lbW9yeSAqbWVtOworCXN0cnVjdCB2aWRlb2J1Zl92bWFsbG9jX21lbW9yeSAqbWVtOwogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOwogCiAJdmIgPSBremFsbG9jKHNpemUrc2l6ZW9mKCptZW0pLEdGUF9LRVJORUwpOwpAQCAtMTI3LDkgKzEyNyw3IEBACiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1ZikKIHsKIAlpbnQgcGFnZXM7Ci0KLQlzdHJ1Y3QgdmlkZWJ1Zl92bWFsbG9jX21lbW9yeSAqbWVtPXZiLT5wcml2OwotCisJc3RydWN0IHZpZGVvYnVmX3ZtYWxsb2NfbWVtb3J5ICptZW09dmItPnByaXY7CiAKIAlCVUdfT04oIW1lbSk7CiAKQEAgLTE5NSw3ICsxOTMsNyBAQAogc3RhdGljIGludCBfX3ZpZGVvYnVmX21tYXBfbWFwcGVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgdmlkZWJ1Zl92bWFsbG9jX21lbW9yeSAqbWVtOworCXN0cnVjdCB2aWRlb2J1Zl92bWFsbG9jX21lbW9yeSAqbWVtOwogCXN0cnVjdCB2aWRlb2J1Zl9tYXBwaW5nICptYXA7CiAJdW5zaWduZWQgaW50IGZpcnN0OwogCWludCByZXR2YWw7CkBAIC0yNjcsNyArMjY1LDcgQEAKIAkJCQljaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LAogCQkJCWludCBub25ibG9ja2luZyApCiB7Ci0Jc3RydWN0IHZpZGVidWZfdm1hbGxvY19tZW1vcnkgKm1lbT1xLT5yZWFkX2J1Zi0+cHJpdjsKKwlzdHJ1Y3QgdmlkZW9idWZfdm1hbGxvY19tZW1vcnkgKm1lbT1xLT5yZWFkX2J1Zi0+cHJpdjsKIAlCVUdfT04gKCFtZW0pOwogCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsTUFHSUNfVk1BTF9NRU0pOwogCkBAIC0yODgsNyArMjg2LDcgQEAKIAkJCQlpbnQgdmJpaGFjaywgaW50IG5vbmJsb2NraW5nICkKIHsKIAl1bnNpZ25lZCBpbnQgICpmYzsKLQlzdHJ1Y3QgdmlkZWJ1Zl92bWFsbG9jX21lbW9yeSAqbWVtPXEtPnJlYWRfYnVmLT5wcml2OworCXN0cnVjdCB2aWRlb2J1Zl92bWFsbG9jX21lbW9yeSAqbWVtPXEtPnJlYWRfYnVmLT5wcml2OwogCUJVR19PTiAoIW1lbSk7CiAJTUFHSUNfQ0hFQ0sobWVtLT5tYWdpYyxNQUdJQ19WTUFMX01FTSk7CiAKQEAgLTM0MSw3ICszMzksNyBAQAogCiB2b2lkICp2aWRlb2J1Zl90b192bWFsbG9jIChzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpCiB7Ci0Jc3RydWN0IHZpZGVidWZfdm1hbGxvY19tZW1vcnkgKm1lbT1idWYtPnByaXY7CisJc3RydWN0IHZpZGVvYnVmX3ZtYWxsb2NfbWVtb3J5ICptZW09YnVmLT5wcml2OwogCUJVR19PTiAoIW1lbSk7CiAJTUFHSUNfQ0hFQ0sobWVtLT5tYWdpYyxNQUdJQ19WTUFMX01FTSk7CiAKQEAgLTM1MSw3ICszNDksNyBAQAogCiB2b2lkIHZpZGVvYnVmX3ZtYWxsb2NfZnJlZSAoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKQogewotCXN0cnVjdCB2aWRlYnVmX3ZtYWxsb2NfbWVtb3J5ICptZW09YnVmLT5wcml2OworCXN0cnVjdCB2aWRlb2J1Zl92bWFsbG9jX21lbW9yeSAqbWVtPWJ1Zi0+cHJpdjsKIAlCVUdfT04gKCFtZW0pOwogCiAJTUFHSUNfQ0hFQ0sobWVtLT5tYWdpYyxNQUdJQ19WTUFMX01FTSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKaW5kZXggMjg2NTVmOC4uMGQ5YjYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwpAQCAtNDYsMTAgKzQ2LDM3MyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KIAogI2RlZmluZSBWSURFT19OVU1fREVWSUNFUwkyNTYKICNkZWZpbmUgVklERU9fTkFNRSAgICAgICAgICAgICAgInZpZGVvNGxpbnV4IgogCisvKiB2aWRlbzRsaW51eCBzdGFuZGFyZCBJRCBjb252ZXJzaW9uIHRvIHN0YW5kYXJkIG5hbWUKKyAqLworY2hhciAqdjRsMl9ub3JtX3RvX25hbWUodjRsMl9zdGRfaWQgaWQpCit7CisJY2hhciAqbmFtZTsKKwl1MzIgbXlpZCA9IGlkOworCisJLyogSEFDSzogcHBjMzIgYXJjaGl0ZWN0dXJlIGRvZXNuJ3QgaGF2ZSBfX3VjbXBkaTIgZnVuY3Rpb24gdG8gaGFuZGxlCisJICAgNjQgYml0IGNvbXBhcmF0aW9ucy4gU28sIG9uIHRoYXQgYXJjaGl0ZWN0dXJlLCB3aXRoIHNvbWUgZ2NjCisJICAgdmFyaWFudHMsIGNvbXBpbGF0aW9uIGZhaWxzLiBDdXJyZW50bHksIHRoZSBtYXggdmFsdWUgaXMgMzBiaXQgd2lkZS4KKwkgKi8KKwlCVUdfT04obXlpZCAhPSBpZCk7CisKKwlzd2l0Y2ggKG15aWQpIHsKKwljYXNlIFY0TDJfU1REX1BBTDoKKwkJbmFtZSA9ICJQQUwiOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9CRzoKKwkJbmFtZSA9ICJQQUwtQkciOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9ESzoKKwkJbmFtZSA9ICJQQUwtREsiOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9COgorCQluYW1lID0gIlBBTC1CIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfQjE6CisJCW5hbWUgPSAiUEFMLUIxIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfRzoKKwkJbmFtZSA9ICJQQUwtRyI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMX0g6CisJCW5hbWUgPSAiUEFMLUgiOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9JOgorCQluYW1lID0gIlBBTC1JIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfRDoKKwkJbmFtZSA9ICJQQUwtRCI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMX0QxOgorCQluYW1lID0gIlBBTC1EMSI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMX0s6CisJCW5hbWUgPSAiUEFMLUsiOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9NOgorCQluYW1lID0gIlBBTC1NIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfTjoKKwkJbmFtZSA9ICJQQUwtTiI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMX05jOgorCQluYW1lID0gIlBBTC1OYyI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMXzYwOgorCQluYW1lID0gIlBBTC02MCI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfTlRTQzoKKwkJbmFtZSA9ICJOVFNDIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9OVFNDX006CisJCW5hbWUgPSAiTlRTQy1NIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9OVFNDX01fSlA6CisJCW5hbWUgPSAiTlRTQy1NLUpQIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9OVFNDXzQ0MzoKKwkJbmFtZSA9ICJOVFNDLTQ0MyI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfTlRTQ19NX0tSOgorCQluYW1lID0gIk5UU0MtTS1LUiI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU06CisJCW5hbWUgPSAiU0VDQU0iOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1NFQ0FNX0RLOgorCQluYW1lID0gIlNFQ0FNLURLIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9TRUNBTV9COgorCQluYW1lID0gIlNFQ0FNLUIiOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1NFQ0FNX0Q6CisJCW5hbWUgPSAiU0VDQU0tRCI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU1fRzoKKwkJbmFtZSA9ICJTRUNBTS1HIjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9TRUNBTV9IOgorCQluYW1lID0gIlNFQ0FNLUgiOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1NFQ0FNX0s6CisJCW5hbWUgPSAiU0VDQU0tSyI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU1fSzE6CisJCW5hbWUgPSAiU0VDQU0tSzEiOworCQlicmVhazsKKwljYXNlIFY0TDJfU1REX1NFQ0FNX0w6CisJCW5hbWUgPSAiU0VDQU0tTCI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU1fTEM6CisJCW5hbWUgPSAiU0VDQU0tTEMiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQluYW1lID0gIlVua25vd24iOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbmFtZTsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9ub3JtX3RvX25hbWUpOworCisvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgYSB2NGwyX3N0YW5kYXJkIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gdGhlCisgICAnaWQnIGFuZCAndHJhbnNtaXNzaW9uJyBwYXJhbWV0ZXJzLiAgUmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvci4gICovCitpbnQgdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0cnVjdCB2NGwyX3N0YW5kYXJkICp2cywKKwkJCSAgICAgaW50IGlkLCBjaGFyICpuYW1lKQoreworCXUzMiBpbmRleCA9IHZzLT5pbmRleDsKKworCW1lbXNldCh2cywgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSk7CisJdnMtPmluZGV4ID0gaW5kZXg7CisJdnMtPmlkICAgID0gaWQ7CisJaWYgKGlkICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCXZzLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxMDAxOworCQl2cy0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKKwkJdnMtPmZyYW1lbGluZXMgPSA1MjU7CisJfSBlbHNlIHsKKwkJdnMtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7CisJCXZzLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OworCQl2cy0+ZnJhbWVsaW5lcyA9IDYyNTsKKwl9CisJc3RybGNweSh2cy0+bmFtZSwgbmFtZSwgc2l6ZW9mKHZzLT5uYW1lKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzb21lIGFycmF5cyBmb3IgcHJldHR5LXByaW50aW5nIGRlYnVnIG1lc3NhZ2VzIG9mIGVudW0gdHlwZXMgICAgICAqLworCitjaGFyICp2NGwyX2ZpZWxkX25hbWVzW10gPSB7CisJW1Y0TDJfRklFTERfQU5ZXSAgICAgICAgPSAiYW55IiwKKwlbVjRMMl9GSUVMRF9OT05FXSAgICAgICA9ICJub25lIiwKKwlbVjRMMl9GSUVMRF9UT1BdICAgICAgICA9ICJ0b3AiLAorCVtWNEwyX0ZJRUxEX0JPVFRPTV0gICAgID0gImJvdHRvbSIsCisJW1Y0TDJfRklFTERfSU5URVJMQUNFRF0gPSAiaW50ZXJsYWNlZCIsCisJW1Y0TDJfRklFTERfU0VRX1RCXSAgICAgPSAic2VxLXRiIiwKKwlbVjRMMl9GSUVMRF9TRVFfQlRdICAgICA9ICJzZXEtYnQiLAorCVtWNEwyX0ZJRUxEX0FMVEVSTkFURV0gID0gImFsdGVybmF0ZSIsCisJW1Y0TDJfRklFTERfSU5URVJMQUNFRF9UQl0gPSAiaW50ZXJsYWNlZC10YiIsCisJW1Y0TDJfRklFTERfSU5URVJMQUNFRF9CVF0gPSAiaW50ZXJsYWNlZC1idCIsCit9OworRVhQT1JUX1NZTUJPTCh2NGwyX2ZpZWxkX25hbWVzKTsKKworY2hhciAqdjRsMl90eXBlX25hbWVzW10gPSB7CisJW1Y0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV0gICAgICA9ICJ2aWRlby1jYXAiLAorCVtWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVldICAgICAgPSAidmlkZW8tb3ZlciIsCisJW1Y0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUXSAgICAgICA9ICJ2aWRlby1vdXQiLAorCVtWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFXSAgICAgICAgPSAidmJpLWNhcCIsCisJW1Y0TDJfQlVGX1RZUEVfVkJJX09VVFBVVF0gICAgICAgICA9ICJ2Ymktb3V0IiwKKwlbVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkVdID0gInNsaWNlZC12YmktY2FwIiwKKwlbVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVF0gID0gInNsaWNlZC12Ymktb3V0IiwKKwlbVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWV0gPSAidmlkZW8tb3V0LW92ZXIiLAorfTsKK0VYUE9SVF9TWU1CT0wodjRsMl90eXBlX25hbWVzKTsKKworc3RhdGljIGNoYXIgKnY0bDJfbWVtb3J5X25hbWVzW10gPSB7CisJW1Y0TDJfTUVNT1JZX01NQVBdICAgID0gIm1tYXAiLAorCVtWNEwyX01FTU9SWV9VU0VSUFRSXSA9ICJ1c2VycHRyIiwKKwlbVjRMMl9NRU1PUllfT1ZFUkxBWV0gPSAib3ZlcmxheSIsCit9OworCisjZGVmaW5lIHBydF9uYW1lcyhhLCBhcnIpICgoKChhKSA+PSAwKSAmJiAoKGEpIDwgQVJSQVlfU0laRShhcnIpKSkgPyBcCisJCQkgICBhcnJbYV0gOiAidW5rbm93biIpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogZGVidWcgaGVscCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKK3N0YXRpYyBjb25zdCBjaGFyICp2NGwxX2lvY3Rsc1tdID0geworCVtfSU9DX05SKFZJRElPQ0dDQVApXSAgICAgICA9ICJWSURJT0NHQ0FQIiwKKwlbX0lPQ19OUihWSURJT0NHQ0hBTildICAgICAgPSAiVklESU9DR0NIQU4iLAorCVtfSU9DX05SKFZJRElPQ1NDSEFOKV0gICAgICA9ICJWSURJT0NTQ0hBTiIsCisJW19JT0NfTlIoVklESU9DR1RVTkVSKV0gICAgID0gIlZJRElPQ0dUVU5FUiIsCisJW19JT0NfTlIoVklESU9DU1RVTkVSKV0gICAgID0gIlZJRElPQ1NUVU5FUiIsCisJW19JT0NfTlIoVklESU9DR1BJQ1QpXSAgICAgID0gIlZJRElPQ0dQSUNUIiwKKwlbX0lPQ19OUihWSURJT0NTUElDVCldICAgICAgPSAiVklESU9DU1BJQ1QiLAorCVtfSU9DX05SKFZJRElPQ0NBUFRVUkUpXSAgICA9ICJWSURJT0NDQVBUVVJFIiwKKwlbX0lPQ19OUihWSURJT0NHV0lOKV0gICAgICAgPSAiVklESU9DR1dJTiIsCisJW19JT0NfTlIoVklESU9DU1dJTildICAgICAgID0gIlZJRElPQ1NXSU4iLAorCVtfSU9DX05SKFZJRElPQ0dGQlVGKV0gICAgICA9ICJWSURJT0NHRkJVRiIsCisJW19JT0NfTlIoVklESU9DU0ZCVUYpXSAgICAgID0gIlZJRElPQ1NGQlVGIiwKKwlbX0lPQ19OUihWSURJT0NLRVkpXSAgICAgICAgPSAiVklESU9DS0VZIiwKKwlbX0lPQ19OUihWSURJT0NHRlJFUSldICAgICAgPSAiVklESU9DR0ZSRVEiLAorCVtfSU9DX05SKFZJRElPQ1NGUkVRKV0gICAgICA9ICJWSURJT0NTRlJFUSIsCisJW19JT0NfTlIoVklESU9DR0FVRElPKV0gICAgID0gIlZJRElPQ0dBVURJTyIsCisJW19JT0NfTlIoVklESU9DU0FVRElPKV0gICAgID0gIlZJRElPQ1NBVURJTyIsCisJW19JT0NfTlIoVklESU9DU1lOQyldICAgICAgID0gIlZJRElPQ1NZTkMiLAorCVtfSU9DX05SKFZJRElPQ01DQVBUVVJFKV0gICA9ICJWSURJT0NNQ0FQVFVSRSIsCisJW19JT0NfTlIoVklESU9DR01CVUYpXSAgICAgID0gIlZJRElPQ0dNQlVGIiwKKwlbX0lPQ19OUihWSURJT0NHVU5JVCldICAgICAgPSAiVklESU9DR1VOSVQiLAorCVtfSU9DX05SKFZJRElPQ0dDQVBUVVJFKV0gICA9ICJWSURJT0NHQ0FQVFVSRSIsCisJW19JT0NfTlIoVklESU9DU0NBUFRVUkUpXSAgID0gIlZJRElPQ1NDQVBUVVJFIiwKKwlbX0lPQ19OUihWSURJT0NTUExBWU1PREUpXSAgPSAiVklESU9DU1BMQVlNT0RFIiwKKwlbX0lPQ19OUihWSURJT0NTV1JJVEVNT0RFKV0gPSAiVklESU9DU1dSSVRFTU9ERSIsCisJW19JT0NfTlIoVklESU9DR1BMQVlJTkZPKV0gID0gIlZJRElPQ0dQTEFZSU5GTyIsCisJW19JT0NfTlIoVklESU9DU01JQ1JPQ09ERSldID0gIlZJRElPQ1NNSUNST0NPREUiLAorCVtfSU9DX05SKFZJRElPQ0dWQklGTVQpXSAgICA9ICJWSURJT0NHVkJJRk1UIiwKKwlbX0lPQ19OUihWSURJT0NTVkJJRk1UKV0gICAgPSAiVklESU9DU1ZCSUZNVCIKK307CisjZGVmaW5lIFY0TDFfSU9DVExTIEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfaW9jdGxzW10gPSB7CisJW19JT0NfTlIoVklESU9DX1FVRVJZQ0FQKV0gICAgICAgICA9ICJWSURJT0NfUVVFUllDQVAiLAorCVtfSU9DX05SKFZJRElPQ19SRVNFUlZFRCldICAgICAgICAgPSAiVklESU9DX1JFU0VSVkVEIiwKKwlbX0lPQ19OUihWSURJT0NfRU5VTV9GTVQpXSAgICAgICAgID0gIlZJRElPQ19FTlVNX0ZNVCIsCisJW19JT0NfTlIoVklESU9DX0dfRk1UKV0gICAgICAgICAgICA9ICJWSURJT0NfR19GTVQiLAorCVtfSU9DX05SKFZJRElPQ19TX0ZNVCldICAgICAgICAgICAgPSAiVklESU9DX1NfRk1UIiwKKwlbX0lPQ19OUihWSURJT0NfUkVRQlVGUyldICAgICAgICAgID0gIlZJRElPQ19SRVFCVUZTIiwKKwlbX0lPQ19OUihWSURJT0NfUVVFUllCVUYpXSAgICAgICAgID0gIlZJRElPQ19RVUVSWUJVRiIsCisJW19JT0NfTlIoVklESU9DX0dfRkJVRildICAgICAgICAgICA9ICJWSURJT0NfR19GQlVGIiwKKwlbX0lPQ19OUihWSURJT0NfU19GQlVGKV0gICAgICAgICAgID0gIlZJRElPQ19TX0ZCVUYiLAorCVtfSU9DX05SKFZJRElPQ19PVkVSTEFZKV0gICAgICAgICAgPSAiVklESU9DX09WRVJMQVkiLAorCVtfSU9DX05SKFZJRElPQ19RQlVGKV0gICAgICAgICAgICAgPSAiVklESU9DX1FCVUYiLAorCVtfSU9DX05SKFZJRElPQ19EUUJVRildICAgICAgICAgICAgPSAiVklESU9DX0RRQlVGIiwKKwlbX0lPQ19OUihWSURJT0NfU1RSRUFNT04pXSAgICAgICAgID0gIlZJRElPQ19TVFJFQU1PTiIsCisJW19JT0NfTlIoVklESU9DX1NUUkVBTU9GRildICAgICAgICA9ICJWSURJT0NfU1RSRUFNT0ZGIiwKKwlbX0lPQ19OUihWSURJT0NfR19QQVJNKV0gICAgICAgICAgID0gIlZJRElPQ19HX1BBUk0iLAorCVtfSU9DX05SKFZJRElPQ19TX1BBUk0pXSAgICAgICAgICAgPSAiVklESU9DX1NfUEFSTSIsCisJW19JT0NfTlIoVklESU9DX0dfU1REKV0gICAgICAgICAgICA9ICJWSURJT0NfR19TVEQiLAorCVtfSU9DX05SKFZJRElPQ19TX1NURCldICAgICAgICAgICAgPSAiVklESU9DX1NfU1REIiwKKwlbX0lPQ19OUihWSURJT0NfRU5VTVNURCldICAgICAgICAgID0gIlZJRElPQ19FTlVNU1REIiwKKwlbX0lPQ19OUihWSURJT0NfRU5VTUlOUFVUKV0gICAgICAgID0gIlZJRElPQ19FTlVNSU5QVVQiLAorCVtfSU9DX05SKFZJRElPQ19HX0NUUkwpXSAgICAgICAgICAgPSAiVklESU9DX0dfQ1RSTCIsCisJW19JT0NfTlIoVklESU9DX1NfQ1RSTCldICAgICAgICAgICA9ICJWSURJT0NfU19DVFJMIiwKKwlbX0lPQ19OUihWSURJT0NfR19UVU5FUildICAgICAgICAgID0gIlZJRElPQ19HX1RVTkVSIiwKKwlbX0lPQ19OUihWSURJT0NfU19UVU5FUildICAgICAgICAgID0gIlZJRElPQ19TX1RVTkVSIiwKKwlbX0lPQ19OUihWSURJT0NfR19BVURJTyldICAgICAgICAgID0gIlZJRElPQ19HX0FVRElPIiwKKwlbX0lPQ19OUihWSURJT0NfU19BVURJTyldICAgICAgICAgID0gIlZJRElPQ19TX0FVRElPIiwKKwlbX0lPQ19OUihWSURJT0NfUVVFUllDVFJMKV0gICAgICAgID0gIlZJRElPQ19RVUVSWUNUUkwiLAorCVtfSU9DX05SKFZJRElPQ19RVUVSWU1FTlUpXSAgICAgICAgPSAiVklESU9DX1FVRVJZTUVOVSIsCisJW19JT0NfTlIoVklESU9DX0dfSU5QVVQpXSAgICAgICAgICA9ICJWSURJT0NfR19JTlBVVCIsCisJW19JT0NfTlIoVklESU9DX1NfSU5QVVQpXSAgICAgICAgICA9ICJWSURJT0NfU19JTlBVVCIsCisJW19JT0NfTlIoVklESU9DX0dfT1VUUFVUKV0gICAgICAgICA9ICJWSURJT0NfR19PVVRQVVQiLAorCVtfSU9DX05SKFZJRElPQ19TX09VVFBVVCldICAgICAgICAgPSAiVklESU9DX1NfT1VUUFVUIiwKKwlbX0lPQ19OUihWSURJT0NfRU5VTU9VVFBVVCldICAgICAgID0gIlZJRElPQ19FTlVNT1VUUFVUIiwKKwlbX0lPQ19OUihWSURJT0NfR19BVURPVVQpXSAgICAgICAgID0gIlZJRElPQ19HX0FVRE9VVCIsCisJW19JT0NfTlIoVklESU9DX1NfQVVET1VUKV0gICAgICAgICA9ICJWSURJT0NfU19BVURPVVQiLAorCVtfSU9DX05SKFZJRElPQ19HX01PRFVMQVRPUildICAgICAgPSAiVklESU9DX0dfTU9EVUxBVE9SIiwKKwlbX0lPQ19OUihWSURJT0NfU19NT0RVTEFUT1IpXSAgICAgID0gIlZJRElPQ19TX01PRFVMQVRPUiIsCisJW19JT0NfTlIoVklESU9DX0dfRlJFUVVFTkNZKV0gICAgICA9ICJWSURJT0NfR19GUkVRVUVOQ1kiLAorCVtfSU9DX05SKFZJRElPQ19TX0ZSRVFVRU5DWSldICAgICAgPSAiVklESU9DX1NfRlJFUVVFTkNZIiwKKwlbX0lPQ19OUihWSURJT0NfQ1JPUENBUCldICAgICAgICAgID0gIlZJRElPQ19DUk9QQ0FQIiwKKwlbX0lPQ19OUihWSURJT0NfR19DUk9QKV0gICAgICAgICAgID0gIlZJRElPQ19HX0NST1AiLAorCVtfSU9DX05SKFZJRElPQ19TX0NST1ApXSAgICAgICAgICAgPSAiVklESU9DX1NfQ1JPUCIsCisJW19JT0NfTlIoVklESU9DX0dfSlBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfR19KUEVHQ09NUCIsCisJW19JT0NfTlIoVklESU9DX1NfSlBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfU19KUEVHQ09NUCIsCisJW19JT0NfTlIoVklESU9DX1FVRVJZU1REKV0gICAgICAgICA9ICJWSURJT0NfUVVFUllTVEQiLAorCVtfSU9DX05SKFZJRElPQ19UUllfRk1UKV0gICAgICAgICAgPSAiVklESU9DX1RSWV9GTVQiLAorCVtfSU9DX05SKFZJRElPQ19FTlVNQVVESU8pXSAgICAgICAgPSAiVklESU9DX0VOVU1BVURJTyIsCisJW19JT0NfTlIoVklESU9DX0VOVU1BVURPVVQpXSAgICAgICA9ICJWSURJT0NfRU5VTUFVRE9VVCIsCisJW19JT0NfTlIoVklESU9DX0dfUFJJT1JJVFkpXSAgICAgICA9ICJWSURJT0NfR19QUklPUklUWSIsCisJW19JT0NfTlIoVklESU9DX1NfUFJJT1JJVFkpXSAgICAgICA9ICJWSURJT0NfU19QUklPUklUWSIsCisJW19JT0NfTlIoVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVApXSA9ICJWSURJT0NfR19TTElDRURfVkJJX0NBUCIsCisJW19JT0NfTlIoVklESU9DX0xPR19TVEFUVVMpXSAgICAgICA9ICJWSURJT0NfTE9HX1NUQVRVUyIsCisJW19JT0NfTlIoVklESU9DX0dfRVhUX0NUUkxTKV0gICAgICA9ICJWSURJT0NfR19FWFRfQ1RSTFMiLAorCVtfSU9DX05SKFZJRElPQ19TX0VYVF9DVFJMUyldICAgICAgPSAiVklESU9DX1NfRVhUX0NUUkxTIiwKKwlbX0lPQ19OUihWSURJT0NfVFJZX0VYVF9DVFJMUyldICAgID0gIlZJRElPQ19UUllfRVhUX0NUUkxTIiwKKyNpZiAxCisJW19JT0NfTlIoVklESU9DX0VOVU1fRlJBTUVTSVpFUyldICA9ICJWSURJT0NfRU5VTV9GUkFNRVNJWkVTIiwKKwlbX0lPQ19OUihWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUyldID0gIlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIiwKKwlbX0lPQ19OUihWSURJT0NfR19FTkNfSU5ERVgpXSAJICAgPSAiVklESU9DX0dfRU5DX0lOREVYIiwKKwlbX0lPQ19OUihWSURJT0NfRU5DT0RFUl9DTUQpXSAJICAgPSAiVklESU9DX0VOQ09ERVJfQ01EIiwKKwlbX0lPQ19OUihWSURJT0NfVFJZX0VOQ09ERVJfQ01EKV0gID0gIlZJRElPQ19UUllfRU5DT0RFUl9DTUQiLAorCisJW19JT0NfTlIoVklESU9DX0RCR19TX1JFR0lTVEVSKV0gICA9ICJWSURJT0NfREJHX1NfUkVHSVNURVIiLAorCVtfSU9DX05SKFZJRElPQ19EQkdfR19SRUdJU1RFUildICAgPSAiVklESU9DX0RCR19HX1JFR0lTVEVSIiwKKworCVtfSU9DX05SKFZJRElPQ19HX0NISVBfSURFTlQpXSAgICAgPSAiVklESU9DX0dfQ0hJUF9JREVOVCIsCisjZW5kaWYKK307CisjZGVmaW5lIFY0TDJfSU9DVExTIEFSUkFZX1NJWkUodjRsMl9pb2N0bHMpCisKK3N0YXRpYyBjb25zdCBjaGFyICp2NGwyX2ludF9pb2N0bHNbXSA9IHsKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwlbX0lPQ19OUihERUNPREVSX0dFVF9DQVBBQklMSVRJRVMpXSAgICA9ICJERUNPREVSX0dFVF9DQVBBQklMSVRJRVMiLAorCVtfSU9DX05SKERFQ09ERVJfR0VUX1NUQVRVUyldICAgICAgICAgID0gIkRFQ09ERVJfR0VUX1NUQVRVUyIsCisJW19JT0NfTlIoREVDT0RFUl9TRVRfTk9STSldICAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfTk9STSIsCisJW19JT0NfTlIoREVDT0RFUl9TRVRfSU5QVVQpXSAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfSU5QVVQiLAorCVtfSU9DX05SKERFQ09ERVJfU0VUX09VVFBVVCldICAgICAgICAgID0gIkRFQ09ERVJfU0VUX09VVFBVVCIsCisJW19JT0NfTlIoREVDT0RFUl9FTkFCTEVfT1VUUFVUKV0gICAgICAgPSAiREVDT0RFUl9FTkFCTEVfT1VUUFVUIiwKKwlbX0lPQ19OUihERUNPREVSX1NFVF9QSUNUVVJFKV0gICAgICAgICA9ICJERUNPREVSX1NFVF9QSUNUVVJFIiwKKwlbX0lPQ19OUihERUNPREVSX1NFVF9HUElPKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9HUElPIiwKKwlbX0lPQ19OUihERUNPREVSX0lOSVQpXSAgICAgICAgICAgICAgICA9ICJERUNPREVSX0lOSVQiLAorCVtfSU9DX05SKERFQ09ERVJfU0VUX1ZCSV9CWVBBU1MpXSAgICAgID0gIkRFQ09ERVJfU0VUX1ZCSV9CWVBBU1MiLAorCVtfSU9DX05SKERFQ09ERVJfRFVNUCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfRFVNUCIsCisjZW5kaWYKKwlbX0lPQ19OUihBVURDX1NFVF9SQURJTyldICAgICAgICAgICAgICA9ICJBVURDX1NFVF9SQURJTyIsCisKKwlbX0lPQ19OUihUVU5FUl9TRVRfVFlQRV9BRERSKV0gICAgICAgICA9ICJUVU5FUl9TRVRfVFlQRV9BRERSIiwKKwlbX0lPQ19OUihUVU5FUl9TRVRfU1RBTkRCWSldICAgICAgICAgICA9ICJUVU5FUl9TRVRfU1RBTkRCWSIsCisJW19JT0NfTlIoVFVORVJfU0VUX0NPTkZJRyldICAgICAgICAgICAgPSAiVFVORVJfU0VUX0NPTkZJRyIsCisKKwlbX0lPQ19OUihWSURJT0NfSU5UX1NfVFVORVJfTU9ERSldICAgICA9ICJWSURJT0NfSU5UX1NfVFVORVJfTU9ERSIsCisJW19JT0NfTlIoVklESU9DX0lOVF9SRVNFVCldICAgICAgICAgICAgPSAiVklESU9DX0lOVF9SRVNFVCIsCisJW19JT0NfTlIoVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRKV0gPSAiVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSldICA9ICJWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSIsCisJW19JT0NfTlIoVklESU9DX0lOVF9TX1ZCSV9EQVRBKV0gICAgICAgPSAiVklESU9DX0lOVF9TX1ZCSV9EQVRBIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX0dfVkJJX0RBVEEpXSAgICAgICA9ICJWSURJT0NfSU5UX0dfVkJJX0RBVEEiLAorCVtfSU9DX05SKFZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVEpXSAgID0gIlZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVEiLAorCVtfSU9DX05SKFZJRElPQ19JTlRfU19TVEFOREJZKV0gICAgICAgID0gIlZJRElPQ19JTlRfU19TVEFOREJZIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyIsCisJW19JT0NfTlIoVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkcpXSAgPSAiVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkciLAorCVtfSU9DX05SKFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HKV0gID0gIlZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HIiwKKwlbX0lPQ19OUihWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyldICA9ICJWSURJT0NfSU5UX0dfVklERU9fUk9VVElORyIsCisJW19JT0NfTlIoVklESU9DX0lOVF9TX0NSWVNUQUxfRlJFUSldICAgPSAiVklESU9DX0lOVF9TX0NSWVNUQUxfRlJFUSIsCisJW19JT0NfTlIoVklESU9DX0lOVF9JTklUKV0gICAJICAgICAgID0gIlZJRElPQ19JTlRfSU5JVCIsCisJW19JT0NfTlIoVklESU9DX0lOVF9HX1NURF9PVVRQVVQpXSAgICAgPSAiVklESU9DX0lOVF9HX1NURF9PVVRQVVQiLAorCVtfSU9DX05SKFZJRElPQ19JTlRfU19TVERfT1VUUFVUKV0gICAgID0gIlZJRElPQ19JTlRfU19TVERfT1VUUFVUIiwKK307CisjZGVmaW5lIFY0TDJfSU5UX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW50X2lvY3RscykKKworLyogQ29tbW9uIGlvY3RsIGRlYnVnIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5CisgICBleHRlcm5hbCBpb2N0bCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGludGVybmFsIFY0TCBpb2N0bCAqLwordm9pZCB2NGxfcHJpbnRrX2lvY3RsKHVuc2lnbmVkIGludCBjbWQpCit7CisJY2hhciAqZGlyOworCisJc3dpdGNoIChfSU9DX0RJUihjbWQpKSB7CisJY2FzZSBfSU9DX05PTkU6ICAgICAgICAgICAgICBkaXIgPSAiLS0iOyBicmVhazsKKwljYXNlIF9JT0NfUkVBRDogICAgICAgICAgICAgIGRpciA9ICJyLSI7IGJyZWFrOworCWNhc2UgX0lPQ19XUklURTogICAgICAgICAgICAgZGlyID0gIi13IjsgYnJlYWs7CisJY2FzZSBfSU9DX1JFQUQgfCBfSU9DX1dSSVRFOiBkaXIgPSAicnciOyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgIGRpciA9ICIqRVJSKiI7IGJyZWFrOworCX0KKwlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7CisJY2FzZSAnZCc6CisJCXByaW50aygidjRsMl9pbnQgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKKwkJICAgICAgIChfSU9DX05SKGNtZCkgPCBWNEwyX0lOVF9JT0NUTFMpID8KKwkJICAgICAgIHY0bDJfaW50X2lvY3Rsc1tfSU9DX05SKGNtZCldIDogIlVOS05PV04iLCBkaXIsIGNtZCk7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCWNhc2UgJ3YnOgorCQlwcmludGsoInY0bDEgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKKwkJICAgICAgIChfSU9DX05SKGNtZCkgPCBWNEwxX0lPQ1RMUykgPworCQkgICAgICAgdjRsMV9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgJ1YnOgorCQlwcmludGsoInY0bDIgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKKwkJICAgICAgIChfSU9DX05SKGNtZCkgPCBWNEwyX0lPQ1RMUykgPworCQkgICAgICAgdjRsMl9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygidW5rbm93biBpb2N0bCAnJWMnLCBkaXI9JXMsICMlZCAoMHglMDh4KVxuIiwKKwkJICAgICAgIF9JT0NfVFlQRShjbWQpLCBkaXIsIF9JT0NfTlIoY21kKSwgY21kKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHY0bF9wcmludGtfaW9jdGwpOworCiAvKgogICoJc3lzZnMgc3R1ZmYKICAqLwpAQCAtNjksMTEgKzQzMiwxMyBAQAogCXZmZCA9IGt6YWxsb2Moc2l6ZW9mKCp2ZmQpLEdGUF9LRVJORUwpOwogCXJldHVybiB2ZmQ7CiB9CitFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmljZV9hbGxvYyk7CiAKIHZvaWQgdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQogewogCWtmcmVlKHZmZCk7CiB9CitFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmljZV9yZWxlYXNlKTsKIAogc3RhdGljIHZvaWQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpjZCkKIHsKQEAgLTExMCw2ICs0NzUsNyBAQAogewogCXJldHVybiB2aWRlb19kZXZpY2VbaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpXTsKIH0KK0VYUE9SVF9TWU1CT0wodmlkZW9fZGV2ZGF0YSk7CiAKIC8qCiAgKglPcGVuIGEgdmlkZW8gZGV2aWNlIC0gRklYTUU6IE9ic29sZXRlZApAQCAtMjc4LDYgKzY0NCw3IEBACiAJa2ZyZWUobWJ1Zik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0wodmlkZW9fdXNlcmNvcHkpOwogCiAvKgogICogb3Blbi9yZWxlYXNlIGhlbHBlciBmdW5jdGlvbnMgLS0gaGFuZGxlIGV4Y2x1c2l2ZSBvcGVucwpAQCAtMjk3LDYgKzY2NCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ2ZmwtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CitFWFBPUlRfU1lNQk9MKHZpZGVvX2V4Y2x1c2l2ZV9vcGVuKTsKIAogaW50IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtMzA1LDQxICs2NzMsNyBAQAogCXZmbC0+dXNlcnMtLTsKIAlyZXR1cm4gMDsKIH0KLQotc3RhdGljIGNoYXIgKnY0bDJfbWVtb3J5X25hbWVzW10gPSB7Ci0JW1Y0TDJfTUVNT1JZX01NQVBdICAgID0gIm1tYXAiLAotCVtWNEwyX01FTU9SWV9VU0VSUFRSXSA9ICJ1c2VycHRyIiwKLQlbVjRMMl9NRU1PUllfT1ZFUkxBWV0gPSAib3ZlcmxheSIsCi19OwotCi0KLS8qIEZJWE1FOiBUaG9zZSBzdHVmZiBhcmUgcmVwbGljYXRlZCBhbHNvIG9uIHY0bDItY29tbW9uLmMgKi8KLXN0YXRpYyBjaGFyICp2NGwyX3R5cGVfbmFtZXNfRklYTUVbXSA9IHsKLQlbVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFXSAgICAgID0gInZpZGVvLWNhcCIsCi0JW1Y0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWV0gICAgICA9ICJ2aWRlby1vdmVyIiwKLQlbVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRdICAgICAgID0gInZpZGVvLW91dCIsCi0JW1Y0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkVdICAgICAgICA9ICJ2YmktY2FwIiwKLQlbVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUXSAgICAgICAgID0gInZiaS1vdXQiLAotCVtWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUXSAgPSAic2xpY2VkLXZiaS1vdXQiLAotCVtWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRV0gPSAic2xpY2VkLXZiaS1jYXB0dXJlIiwKLQlbVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWV0gPSAidmlkZW8tb3V0LW92ZXIiLAotCVtWNEwyX0JVRl9UWVBFX1BSSVZBVEVdICAgICAgICAgICAgPSAicHJpdmF0ZSIsCi19OwotCi1zdGF0aWMgY2hhciAqdjRsMl9maWVsZF9uYW1lc19GSVhNRVtdID0gewotCVtWNEwyX0ZJRUxEX0FOWV0gICAgICAgID0gImFueSIsCi0JW1Y0TDJfRklFTERfTk9ORV0gICAgICAgPSAibm9uZSIsCi0JW1Y0TDJfRklFTERfVE9QXSAgICAgICAgPSAidG9wIiwKLQlbVjRMMl9GSUVMRF9CT1RUT01dICAgICA9ICJib3R0b20iLAotCVtWNEwyX0ZJRUxEX0lOVEVSTEFDRURdID0gImludGVybGFjZWQiLAotCVtWNEwyX0ZJRUxEX1NFUV9UQl0gICAgID0gInNlcS10YiIsCi0JW1Y0TDJfRklFTERfU0VRX0JUXSAgICAgPSAic2VxLWJ0IiwKLQlbVjRMMl9GSUVMRF9BTFRFUk5BVEVdICA9ICJhbHRlcm5hdGUiLAotCVtWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEJdID0gImludGVybGFjZWQtdGIiLAotCVtWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlRdID0gImludGVybGFjZWQtYnQiLAotfTsKLQotI2RlZmluZSBwcnRfbmFtZXMoYSxhcnIpICgoKGEpPj0wKSYmKChhKTxBUlJBWV9TSVpFKGFycikpKT9hcnJbYV06InVua25vd24iCitFWFBPUlRfU1lNQk9MKHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKTsKIAogc3RhdGljIHZvaWQgZGJnYnVmKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwKIAkJCQkJc3RydWN0IHY0bDJfYnVmZmVyICpwKQpAQCAtMzU0LDEwICs2ODgsMTAgQEAKIAkJCShpbnQpKHAtPnRpbWVzdGFtcC50dl9zZWMlNjApLAogCQkJcC0+dGltZXN0YW1wLnR2X3VzZWMsCiAJCQlwLT5pbmRleCwKLQkJCXBydF9uYW1lcyhwLT50eXBlLHY0bDJfdHlwZV9uYW1lc19GSVhNRSksCi0JCQlwLT5ieXRlc3VzZWQscC0+ZmxhZ3MsCi0JCQlwLT5maWVsZCxwLT5zZXF1ZW5jZSwKLQkJCXBydF9uYW1lcyhwLT5tZW1vcnksdjRsMl9tZW1vcnlfbmFtZXMpLAorCQkJcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcyksCisJCQlwLT5ieXRlc3VzZWQsIHAtPmZsYWdzLAorCQkJcC0+ZmllbGQsIHAtPnNlcXVlbmNlLAorCQkJcHJ0X25hbWVzKHAtPm1lbW9yeSwgdjRsMl9tZW1vcnlfbmFtZXMpLAogCQkJcC0+bS51c2VycHRyLCBwLT5sZW5ndGgpOwogCWRiZ2FyZzIgKCJ0aW1lY29kZT0gJTAyZDolMDJkOiUwMmQgdHlwZT0lZCwgIgogCQkiZmxhZ3M9MHglMDhkLCBmcmFtZXM9JWQsIHVzZXJiaXRzPTB4JTA4eFxuIiwKQEAgLTM4Miw4ICs3MTYsOCBAQAogCQkoZm10LT5waXhlbGZvcm1hdCA+PiAgOCkgJiAweGZmLAogCQkoZm10LT5waXhlbGZvcm1hdCA+PiAxNikgJiAweGZmLAogCQkoZm10LT5waXhlbGZvcm1hdCA+PiAyNCkgJiAweGZmLAotCQlwcnRfbmFtZXMoZm10LT5maWVsZCx2NGwyX2ZpZWxkX25hbWVzX0ZJWE1FKSwKLQkJZm10LT5ieXRlc3BlcmxpbmUsZm10LT5zaXplaW1hZ2UsZm10LT5jb2xvcnNwYWNlKTsKKwkJcHJ0X25hbWVzKGZtdC0+ZmllbGQsIHY0bDJfZmllbGRfbmFtZXMpLAorCQlmbXQtPmJ5dGVzcGVybGluZSwgZm10LT5zaXplaW1hZ2UsIGZtdC0+Y29sb3JzcGFjZSk7CiB9OwogCiAKQEAgLTU5Nyw3ICs5MzEsNyBAQAogCiAJCS8qIEZJWE1FOiBTaG91bGQgYmUgb25lIGR1bXAgcGVyIHR5cGUgKi8KIAkJZGJnYXJnIChjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXModHlwZSwKLQkJCQkJdjRsMl90eXBlX25hbWVzX0ZJWE1FKSk7CisJCQkJCXY0bDJfdHlwZV9uYW1lcykpOwogCiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKQEAgLTY1MCw3ICs5ODQsNyBAQAogCiAJCS8qIEZJWE1FOiBTaG91bGQgYmUgb25lIGR1bXAgcGVyIHR5cGUgKi8KIAkJZGJnYXJnIChjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMoZi0+dHlwZSwKLQkJCQkJdjRsMl90eXBlX25hbWVzX0ZJWE1FKSk7CisJCQkJCXY0bDJfdHlwZV9uYW1lcykpOwogCiAJCXN3aXRjaCAoZi0+dHlwZSkgewogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKQEAgLTcwMiw3ICsxMDM2LDcgQEAKIAogCQkvKiBGSVhNRTogU2hvdWxkIGJlIG9uZSBkdW1wIHBlciB0eXBlICovCiAJCWRiZ2FyZyAoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKGYtPnR5cGUsCi0JCQkJCQl2NGwyX3R5cGVfbmFtZXNfRklYTUUpKTsKKwkJCQkJCXY0bDJfdHlwZV9uYW1lcykpOwogCQlzd2l0Y2ggKGYtPnR5cGUpIHsKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CiAJCQlpZiAodmZkLT52aWRpb2NfdHJ5X2ZtdF9jYXApCkBAIC03NjgsOCArMTEwMiw4IEBACiAJCXJldD12ZmQtPnZpZGlvY19yZXFidWZzKGZpbGUsIGZoLCBwKTsKIAkJZGJnYXJnIChjbWQsICJjb3VudD0lZCwgdHlwZT0lcywgbWVtb3J5PSVzXG4iLAogCQkJCXAtPmNvdW50LAotCQkJCXBydF9uYW1lcyhwLT50eXBlLHY0bDJfdHlwZV9uYW1lc19GSVhNRSksCi0JCQkJcHJ0X25hbWVzKHAtPm1lbW9yeSx2NGwyX21lbW9yeV9uYW1lcykpOworCQkJCXBydF9uYW1lcyhwLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpLAorCQkJCXBydF9uYW1lcyhwLT5tZW1vcnksIHY0bDJfbWVtb3J5X25hbWVzKSk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19RVUVSWUJVRjoKQEAgLTg1OCw3ICsxMTkyLDcgQEAKIAkJZW51bSB2NGwyX2J1Zl90eXBlIGkgPSAqKGludCAqKWFyZzsKIAkJaWYgKCF2ZmQtPnZpZGlvY19zdHJlYW1vbikKIAkJCWJyZWFrOwotCQlkYmdhcmcgKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhpLHY0bDJfdHlwZV9uYW1lc19GSVhNRSkpOworCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKGksIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQ9dmZkLT52aWRpb2Nfc3RyZWFtb24oZmlsZSwgZmgsaSk7CiAJCWJyZWFrOwogCX0KQEAgLTg2OCw3ICsxMjAyLDcgQEAKIAogCQlpZiAoIXZmZC0+dmlkaW9jX3N0cmVhbW9mZikKIAkJCWJyZWFrOwotCQlkYmdhcmcgKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhpLHY0bDJfdHlwZV9uYW1lc19GSVhNRSkpOworCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKGksIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQ9dmZkLT52aWRpb2Nfc3RyZWFtb2ZmKGZpbGUsIGZoLCBpKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTYyNCw3ICsxOTU4LDcgQEAKIAlrZnJlZShtYnVmKTsKIAlyZXR1cm4gZXJyOwogfQotCitFWFBPUlRfU1lNQk9MKHZpZGVvX2lvY3RsMik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHM7CiAKQEAgLTE3NDMsNiArMjA3Nyw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTCh2aWRlb19yZWdpc3Rlcl9kZXZpY2UpOwogCiAvKioKICAqCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlIC0gdW5yZWdpc3RlciBhIHZpZGVvNGxpbnV4IGRldmljZQpAQCAtMTc2Miw2ICsyMDk3LDcgQEAKIAlkZXZpY2VfdW5yZWdpc3RlcigmdmZkLT5jbGFzc19kZXYpOwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKTsKIAogLyoKICAqIFZpZGVvIGZzIG9wZXJhdGlvbnMKQEAgLTE4MDYsMTYgKzIxNDIsNiBAQAogbW9kdWxlX2luaXQodmlkZW9kZXZfaW5pdCkKIG1vZHVsZV9leGl0KHZpZGVvZGV2X2V4aXQpCiAKLUVYUE9SVF9TWU1CT0wodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wodmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTCh2aWRlb19kZXZkYXRhKTsKLUVYUE9SVF9TWU1CT0wodmlkZW9fdXNlcmNvcHkpOwotRVhQT1JUX1NZTUJPTCh2aWRlb19leGNsdXNpdmVfb3Blbik7Ci1FWFBPUlRfU1lNQk9MKHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKTsKLUVYUE9SVF9TWU1CT0wodmlkZW9faW9jdGwyKTsKLUVYUE9SVF9TWU1CT0wodmlkZW9fZGV2aWNlX2FsbG9jKTsKLUVYUE9SVF9TWU1CT0wodmlkZW9fZGV2aWNlX3JlbGVhc2UpOwotCiBNT0RVTEVfQVVUSE9SKCJBbGFuIENveCwgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSByZWdpc3RyYXIgZm9yIFZpZGVvNExpbnV4IGRyaXZlcnMgdjIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4uaAppbmRleCA5MzdjNGE2Li40OThhNDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi5oCkBAIC0yMjEsMTUgKzIyMSwxNSBAQAogfTsKIAogZW51bSBncGlvX3R5cGUgewotCUdQSU9fSlBFR19TTEVFUCA9IDAsCi0JR1BJT19KUEVHX1JFU0VULAotCUdQSU9fSlBFR19GUkFNRSwKLQlHUElPX1ZJRF9ESVIsCi0JR1BJT19WSURfRU4sCi0JR1BJT19WSURfUkVTRVQsCi0JR1BJT19DTEtfU0VMMSwKLQlHUElPX0NMS19TRUwyLAotCUdQSU9fTUFYLAorCVpSX0dQSU9fSlBFR19TTEVFUCA9IDAsCisJWlJfR1BJT19KUEVHX1JFU0VULAorCVpSX0dQSU9fSlBFR19GUkFNRSwKKwlaUl9HUElPX1ZJRF9ESVIsCisJWlJfR1BJT19WSURfRU4sCisJWlJfR1BJT19WSURfUkVTRVQsCisJWlJfR1BJT19DTEtfU0VMMSwKKwlaUl9HUElPX0NMS19TRUwyLAorCVpSX0dQSU9fTUFYLAogfTsKIAogZW51bSBncGNzX3R5cGUgewpAQCAtMzc4LDExICszNzgsMTEgQEAKIAogCXUzMiBqcGVnX2ludDsJCS8qIEpQRUcgaW50ZXJydXB0ICovCiAJdTMyIHZzeW5jX2ludDsJCS8qIFZTWU5DIGludGVycnVwdCAqLwotCXM4IGdwaW9bR1BJT19NQVhdOworCXM4IGdwaW9bWlJfR1BJT19NQVhdOwogCXU4IGdwY3NbR1BDU19NQVhdOwogCiAJc3RydWN0IHZmZV9wb2xhcml0eSB2ZmVfcG9sOwotCXU4IGdwaW9fcG9sW0dQSU9fTUFYXTsKKwl1OCBncGlvX3BvbFtaUl9HUElPX01BWF07CiAKIAkvKiBpcyB0aGUgL0dXUyBsaW5lIGNvbmVjdGVkPyAqLwogCXU4IGd3c19ub3RfY29ubmVjdGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmMKaW5kZXggNjhjN2M1MC4uZjk3YzIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIGpwZWdfY29kZWNfc2xlZXAgKHN0cnVjdCB6b3JhbiAqenIsCiAJCSAgaW50ICAgICAgICAgICBzbGVlcCkKIHsKLQlHUElPKHpyLCB6ci0+Y2FyZC5ncGlvW0dQSU9fSlBFR19TTEVFUF0sICFzbGVlcCk7CisJR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX0pQRUdfU0xFRVBdLCAhc2xlZXApOwogCWlmICghc2xlZXApIHsKIAkJZHByaW50aygzLAogCQkJS0VSTl9ERUJVRwpAQCAtMjc3LDkgKzI3Nyw5IEBACiAJCQkJICAwKTsKIAkJdWRlbGF5KDIpOwogCX0gZWxzZSB7Ci0JCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bR1BJT19KUEVHX1JFU0VUXSwgMCk7CisJCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX1JFU0VUXSwgMCk7CiAJCXVkZWxheSgyKTsKLQkJR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1tHUElPX0pQRUdfUkVTRVRdLCAxKTsKKwkJR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX0pQRUdfUkVTRVRdLCAxKTsKIAkJdWRlbGF5KDIpOwogCX0KIApAQCAtNjg4LDcgKzY4OCw3IEBACiBzZXRfZnJhbWUgKHN0cnVjdCB6b3JhbiAqenIsCiAJICAgaW50ICAgICAgICAgICB2YWwpCiB7Ci0JR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1tHUElPX0pQRUdfRlJBTUVdLCB2YWwpOworCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX0ZSQU1FXSwgdmFsKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTcwNCw4ICs3MDQsOCBAQAogCQkJR1BJTyh6ciwgNSwgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bR1BJT19WSURfRElSXSwKLQkJICAgICB6ci0+Y2FyZC5ncGlvX3BvbFtHUElPX1ZJRF9ESVJdID8gIXZhbCA6IHZhbCk7CisJCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19WSURfRElSXSwKKwkJICAgICB6ci0+Y2FyZC5ncGlvX3BvbFtaUl9HUElPX1ZJRF9ESVJdID8gIXZhbCA6IHZhbCk7CiAJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCmluZGV4IGRkM2Q3ZDIuLmZlYTQ5NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYwpAQCAtMzM5LDcgKzMzOSw3IEBACiAJCQkvKiBVc2Uga21hbGxvYyAqLwogCiAJCQltZW0gPSBrbWFsbG9jKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAobWVtID09IDApIHsKKwkJCWlmICghbWVtKSB7CiAJCQkJZHByaW50aygxLAogCQkJCQlLRVJOX0VSUgogCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBrbWFsbG9jIGZvciBWNEwgYnVmICVkIGZhaWxlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKaW5kZXggMWZkYmI0Ni4uMDQ5NDljOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKQEAgLTkzLDYgKzkzLDggQEAKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzNCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKIAl7VVNCX0RFVklDRSgweDBhMTcsIDB4MDA2MiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzYiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKKwl7VVNCX0RFVklDRSgweDBhMTcsIDB4MDA0ZSksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1ZCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC0zODgsNyArMzkwLDcgQEAKIH0KIAogCi1zdGF0aWMgc3NpemVfdCB6cjM2NHh4X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNudCwKK3N0YXRpYyBzc2l6ZV90IHpyMzY0eHhfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNudCwKIAkJCSAgICBsb2ZmX3QgKiBwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgY291bnQgPSBjbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL0tjb25maWcgYi9kcml2ZXJzL21lbXN0aWNrL0tjb25maWcKaW5kZXggMTA5M2ZkYi4uZjBjYTQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svS2NvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIAkgIFNvbnkgTWVtb3J5U3RpY2sgaXMgYSBwcm9wcmlldGFyeSBzdG9yYWdlL2V4dGVuc2lvbiBjYXJkIHByb3RvY29sLgogCiAJICBJZiB5b3Ugd2FudCBNZW1vcnlTdGljayBzdXBwb3J0LCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgYW5kIGFsc28KLQkgIHRvIHRoZSBzcGVjaWZpYyBkcml2ZXIgZm9yIHlvdXIgTU1DIGludGVyZmFjZS4KKwkgIHRvIHRoZSBzcGVjaWZpYyBkcml2ZXIgZm9yIHlvdXIgTWVtb3J5U3RpY2sgaW50ZXJmYWNlLgogCiBpZiBNRU1TVElDSwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbWVtc3RpY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCmluZGV4IGJiYTQ2N2YuLjYxYjk4YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2RlZmluZSBEUklWRVJfTkFNRSAibWVtc3RpY2siCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjIiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY21kX3JldHJpZXMgPSAzOwogbW9kdWxlX3BhcmFtKGNtZF9yZXRyaWVzLCB1aW50LCAwNjQ0KTsKQEAgLTE3OCwxNiArMTc3LDE2IEBACiAJLnJlc3VtZSAgICAgICAgID0gbWVtc3RpY2tfZGV2aWNlX3Jlc3VtZQogfTsKIAotc3RhdGljIHZvaWQgbWVtc3RpY2tfZnJlZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorc3RhdGljIHZvaWQgbWVtc3RpY2tfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IG1lbXN0aWNrX2hvc3QsCi0JCQkJCQkgIGNkZXYpOworCXN0cnVjdCBtZW1zdGlja19ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1lbXN0aWNrX2hvc3QsCisJCQkJCQkgIGRldik7CiAJa2ZyZWUoaG9zdCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgbWVtc3RpY2tfaG9zdF9jbGFzcyA9IHsKIAkubmFtZSAgICAgICA9ICJtZW1zdGlja19ob3N0IiwKLQkucmVsZWFzZSAgICA9IG1lbXN0aWNrX2ZyZWUKKwkuZGV2X3JlbGVhc2UgPSBtZW1zdGlja19mcmVlCiB9OwogCiBzdGF0aWMgdm9pZCBtZW1zdGlja19mcmVlX2NhcmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMjM2LDcgKzIzNSw3IEBACiAJCXJjID0gaG9zdC0+Y2FyZC0+bmV4dF9yZXF1ZXN0KGhvc3QtPmNhcmQsIG1ycSk7CiAKIAlpZiAoIXJjKQotCQlob3N0LT5yZXRyaWVzID0gY21kX3JldHJpZXM7CisJCWhvc3QtPnJldHJpZXMgPSBjbWRfcmV0cmllcyA+IDEgPyBjbWRfcmV0cmllcyAtIDEgOiAxOwogCWVsc2UKIAkJKm1ycSA9IE5VTEw7CiAKQEAgLTI3MSwxNCArMjcwLDEyIEBACiAJCW1ycS0+ZGF0YV9kaXIgPSBSRUFEOwogCiAJbXJxLT5zZyA9ICpzZzsKLQltcnEtPmlvX3R5cGUgPSBNRU1TVElDS19JT19TRzsKKwltcnEtPmxvbmdfZGF0YSA9IDE7CiAKIAlpZiAodHBjID09IE1TX1RQQ19TRVRfQ01EIHx8IHRwYyA9PSBNU19UUENfRVhfU0VUX0NNRCkKIAkJbXJxLT5uZWVkX2NhcmRfaW50ID0gMTsKIAllbHNlCiAJCW1ycS0+bmVlZF9jYXJkX2ludCA9IDA7Ci0KLQltcnEtPmdldF9pbnRfcmVnID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wobWVtc3RpY2tfaW5pdF9yZXFfc2cpOwogCkBAIC0zMDYsMTQgKzMwMywxMiBAQAogCWlmIChtcnEtPmRhdGFfZGlyID09IFdSSVRFKQogCQltZW1jcHkobXJxLT5kYXRhLCBidWYsIG1ycS0+ZGF0YV9sZW4pOwogCi0JbXJxLT5pb190eXBlID0gTUVNU1RJQ0tfSU9fVkFMOworCW1ycS0+bG9uZ19kYXRhID0gMDsKIAogCWlmICh0cGMgPT0gTVNfVFBDX1NFVF9DTUQgfHwgdHBjID09IE1TX1RQQ19FWF9TRVRfQ01EKQogCQltcnEtPm5lZWRfY2FyZF9pbnQgPSAxOwogCWVsc2UKIAkJbXJxLT5uZWVkX2NhcmRfaW50ID0gMDsKLQotCW1ycS0+Z2V0X2ludF9yZWcgPSAwOwogfQogRVhQT1JUX1NZTUJPTChtZW1zdGlja19pbml0X3JlcSk7CiAKQEAgLTM0Myw2ICszMzgsNyBAQAogCQkJY2FyZC0+aWQuY2xhc3MgPSBpZF9yZWcuY2xhc3M7CiAJCX0KIAkJY29tcGxldGUoJmNhcmQtPm1ycV9jb21wbGV0ZSk7CisJCWRldl9kYmcoJmNhcmQtPmRldiwgImlmX21vZGUgPSAlMDJ4XG4iLCBpZF9yZWcuaWZfbW9kZSk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIH0KQEAgLTM4Nyw4ICszODMsOCBAQAogCWlmIChjYXJkKSB7CiAJCWNhcmQtPmhvc3QgPSBob3N0OwogCQlzbnByaW50ZihjYXJkLT5kZXYuYnVzX2lkLCBzaXplb2YoY2FyZC0+ZGV2LmJ1c19pZCksCi0JCQkgIiVzIiwgaG9zdC0+Y2Rldi5jbGFzc19pZCk7Ci0JCWNhcmQtPmRldi5wYXJlbnQgPSBob3N0LT5jZGV2LmRldjsKKwkJCSAiJXMiLCBob3N0LT5kZXYuYnVzX2lkKTsKKwkJY2FyZC0+ZGV2LnBhcmVudCA9ICZob3N0LT5kZXY7CiAJCWNhcmQtPmRldi5idXMgPSAmbWVtc3RpY2tfYnVzX3R5cGU7CiAJCWNhcmQtPmRldi5yZWxlYXNlID0gbWVtc3RpY2tfZnJlZV9jYXJkOwogCQljYXJkLT5jaGVjayA9IG1lbXN0aWNrX2R1bW15X2NoZWNrOwpAQCAtNDIzLDcgKzQxOSw2IEBACiB7CiAJaG9zdC0+c2V0X3BhcmFtKGhvc3QsIE1FTVNUSUNLX1BPV0VSLCBNRU1TVElDS19QT1dFUl9PTik7CiAJaG9zdC0+c2V0X3BhcmFtKGhvc3QsIE1FTVNUSUNLX0lOVEVSRkFDRSwgTUVNU1RJQ0tfU0VSSUFMKTsKLQltc2xlZXAoMSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbXN0aWNrX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTQzMiw3ICs0MjcsNyBAQAogCQkJCQkJICBtZWRpYV9jaGVja2VyKTsKIAlzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkOwogCi0JZGV2X2RiZyhob3N0LT5jZGV2LmRldiwgIm1lbXN0aWNrX2NoZWNrIHN0YXJ0ZWRcbiIpOworCWRldl9kYmcoJmhvc3QtPmRldiwgIm1lbXN0aWNrX2NoZWNrIHN0YXJ0ZWRcbiIpOwogCW11dGV4X2xvY2soJmhvc3QtPmxvY2spOwogCWlmICghaG9zdC0+Y2FyZCkKIAkJbWVtc3RpY2tfcG93ZXJfb24oaG9zdCk7CkBAIC00NDUsNyArNDQwLDcgQEAKIAkJCWhvc3QtPmNhcmQgPSBOVUxMOwogCQl9CiAJfSBlbHNlIHsKLQkJZGV2X2RiZyhob3N0LT5jZGV2LmRldiwgIm5ldyBjYXJkICUwMngsICUwMngsICUwMnhcbiIsCisJCWRldl9kYmcoJmhvc3QtPmRldiwgIm5ldyBjYXJkICUwMngsICUwMngsICUwMnhcbiIsCiAJCQljYXJkLT5pZC50eXBlLCBjYXJkLT5pZC5jYXRlZ29yeSwgY2FyZC0+aWQuY2xhc3MpOwogCQlpZiAoaG9zdC0+Y2FyZCkgewogCQkJaWYgKG1lbXN0aWNrX3NldF9yd19hZGRyKGhvc3QtPmNhcmQpCkBAIC00NzAsNyArNDY1LDcgQEAKIAkJaG9zdC0+c2V0X3BhcmFtKGhvc3QsIE1FTVNUSUNLX1BPV0VSLCBNRU1TVElDS19QT1dFUl9PRkYpOwogCiAJbXV0ZXhfdW5sb2NrKCZob3N0LT5sb2NrKTsKLQlkZXZfZGJnKGhvc3QtPmNkZXYuZGV2LCAibWVtc3RpY2tfY2hlY2sgZmluaXNoZWRcbiIpOworCWRldl9kYmcoJmhvc3QtPmRldiwgIm1lbXN0aWNrX2NoZWNrIGZpbmlzaGVkXG4iKTsKIH0KIAogLyoqCkBAIC00ODcsOSArNDgyLDkgQEAKIAlpZiAoaG9zdCkgewogCQltdXRleF9pbml0KCZob3N0LT5sb2NrKTsKIAkJSU5JVF9XT1JLKCZob3N0LT5tZWRpYV9jaGVja2VyLCBtZW1zdGlja19jaGVjayk7Ci0JCWhvc3QtPmNkZXYuY2xhc3MgPSAmbWVtc3RpY2tfaG9zdF9jbGFzczsKLQkJaG9zdC0+Y2Rldi5kZXYgPSBkZXY7Ci0JCWNsYXNzX2RldmljZV9pbml0aWFsaXplKCZob3N0LT5jZGV2KTsKKwkJaG9zdC0+ZGV2LmNsYXNzID0gJm1lbXN0aWNrX2hvc3RfY2xhc3M7CisJCWhvc3QtPmRldi5wYXJlbnQgPSBkZXY7CisJCWRldmljZV9pbml0aWFsaXplKCZob3N0LT5kZXYpOwogCX0KIAlyZXR1cm4gaG9zdDsKIH0KQEAgLTUxMiwxMCArNTA3LDkgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCXNucHJpbnRmKGhvc3QtPmNkZXYuY2xhc3NfaWQsIEJVU19JRF9TSVpFLAotCQkgIm1lbXN0aWNrJXUiLCBob3N0LT5pZCk7CisJc25wcmludGYoaG9zdC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJtZW1zdGljayV1IiwgaG9zdC0+aWQpOwogCi0JcmMgPSBjbGFzc19kZXZpY2VfYWRkKCZob3N0LT5jZGV2KTsKKwlyYyA9IGRldmljZV9hZGQoJmhvc3QtPmRldik7CiAJaWYgKHJjKSB7CiAJCXNwaW5fbG9jaygmbWVtc3RpY2tfaG9zdF9sb2NrKTsKIAkJaWRyX3JlbW92ZSgmbWVtc3RpY2tfaG9zdF9pZHIsIGhvc3QtPmlkKTsKQEAgLTU0Niw3ICs1NDAsNyBAQAogCXNwaW5fbG9jaygmbWVtc3RpY2tfaG9zdF9sb2NrKTsKIAlpZHJfcmVtb3ZlKCZtZW1zdGlja19ob3N0X2lkciwgaG9zdC0+aWQpOwogCXNwaW5fdW5sb2NrKCZtZW1zdGlja19ob3N0X2xvY2spOwotCWNsYXNzX2RldmljZV9kZWwoJmhvc3QtPmNkZXYpOworCWRldmljZV9kZWwoJmhvc3QtPmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKG1lbXN0aWNrX3JlbW92ZV9ob3N0KTsKIApAQCAtNTU3LDEwICs1NTEsMzYgQEAKIHZvaWQgbWVtc3RpY2tfZnJlZV9ob3N0KHN0cnVjdCBtZW1zdGlja19ob3N0ICpob3N0KQogewogCW11dGV4X2Rlc3Ryb3koJmhvc3QtPmxvY2spOwotCWNsYXNzX2RldmljZV9wdXQoJmhvc3QtPmNkZXYpOworCXB1dF9kZXZpY2UoJmhvc3QtPmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKG1lbXN0aWNrX2ZyZWVfaG9zdCk7CiAKKy8qKgorICogbWVtc3RpY2tfc3VzcGVuZF9ob3N0IC0gbm90aWZ5IGJ1cyBkcml2ZXIgb2YgaG9zdCBzdXNwZW5zaW9uCisgKiBAaG9zdCAtIGhvc3QgdG8gdXNlCisgKi8KK3ZvaWQgbWVtc3RpY2tfc3VzcGVuZF9ob3N0KHN0cnVjdCBtZW1zdGlja19ob3N0ICpob3N0KQoreworCW11dGV4X2xvY2soJmhvc3QtPmxvY2spOworCWhvc3QtPnNldF9wYXJhbShob3N0LCBNRU1TVElDS19QT1dFUiwgTUVNU1RJQ0tfUE9XRVJfT0ZGKTsKKwltdXRleF91bmxvY2soJmhvc3QtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTChtZW1zdGlja19zdXNwZW5kX2hvc3QpOworCisvKioKKyAqIG1lbXN0aWNrX3Jlc3VtZV9ob3N0IC0gbm90aWZ5IGJ1cyBkcml2ZXIgb2YgaG9zdCByZXN1bXB0aW9uCisgKiBAaG9zdCAtIGhvc3QgdG8gdXNlCisgKi8KK3ZvaWQgbWVtc3RpY2tfcmVzdW1lX2hvc3Qoc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QpCit7CisJbXV0ZXhfbG9jaygmaG9zdC0+bG9jayk7CisJaWYgKGhvc3QtPmNhcmQpCisJCW1lbXN0aWNrX3Bvd2VyX29uKGhvc3QpOworCW11dGV4X3VubG9jaygmaG9zdC0+bG9jayk7CisJbWVtc3RpY2tfZGV0ZWN0X2NoYW5nZShob3N0KTsKK30KK0VYUE9SVF9TWU1CT0wobWVtc3RpY2tfcmVzdW1lX2hvc3QpOworCiBpbnQgbWVtc3RpY2tfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtZW1zdGlja19kcml2ZXIgKmRydikKIHsKIAlkcnYtPmRyaXZlci5idXMgPSAmbWVtc3RpY2tfYnVzX3R5cGU7CkBAIC02MTEsNCArNjMxLDMgQEAKIE1PRFVMRV9BVVRIT1IoIkFsZXggRHVib3YiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU29ueSBNZW1vcnlTdGljayBjb3JlIGRyaXZlciIpOwotTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwppbmRleCA0MjNhZDhjLi40NzdkMGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwpAQCAtMTYsMTAgKzE2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1zdGljay5oPgogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJtc3Byb19ibG9jayIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMiIKIAogc3RhdGljIGludCBtYWpvcjsKIG1vZHVsZV9wYXJhbShtYWpvciwgaW50LCAwNjQ0KTsKQEAgLTExMCw2ICsxMTAsMTcgQEAKIAl1bnNpZ25lZCBpbnQgIHNlY3RvcnNfcGVyX3BhcnRpdGlvbjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBtc3Byb19zcGVjZmlsZSB7CisJY2hhciAgICAgICAgICAgbmFtZVs4XTsKKwljaGFyICAgICAgICAgICBleHRbM107CisJdW5zaWduZWQgY2hhciAgYXR0cjsKKwl1bnNpZ25lZCBjaGFyICByZXNlcnZlZFsxMF07CisJdW5zaWduZWQgc2hvcnQgdGltZTsKKwl1bnNpZ25lZCBzaG9ydCBkYXRlOworCXVuc2lnbmVkIHNob3J0IGNsdXN0ZXI7CisJdW5zaWduZWQgaW50ICAgc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0cnVjdCBtc3Byb19kZXZpbmZvIHsKIAl1bnNpZ25lZCBzaG9ydCBjeWxpbmRlcnM7CiAJdW5zaWduZWQgc2hvcnQgaGVhZHM7CkBAIC0xMjIsNiArMTMzLDcgQEAKIHN0cnVjdCBtc3Byb19ibG9ja19kYXRhIHsKIAlzdHJ1Y3QgbWVtc3RpY2tfZGV2ICAgKmNhcmQ7CiAJdW5zaWduZWQgaW50ICAgICAgICAgIHVzYWdlX2NvdW50OworCXVuc2lnbmVkIGludCAgICAgICAgICBjYXBzOwogCXN0cnVjdCBnZW5kaXNrICAgICAgICAqZGlzazsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAgKnF1ZXVlOwogCXNwaW5sb2NrX3QgICAgICAgICAgICBxX2xvY2s7CkBAIC0yOTMsNiArMzA1LDIwIEBACiAJCQkJCQkgICAgIGRldl9hdHRyKTsKIAlzdHJ1Y3QgbXNwcm9fc3lzX2luZm8gKnhfc3lzID0geF9hdHRyLT5kYXRhOwogCXNzaXplX3QgcmMgPSAwOworCWludCBkYXRlX3R6ID0gMCwgZGF0ZV90el9mID0gMDsKKworCWlmICh4X3N5cy0+YXNzZW1ibHlfZGF0ZVswXSA+IDB4ODBVKSB7CisJCWRhdGVfdHogPSAofnhfc3lzLT5hc3NlbWJseV9kYXRlWzBdKSArIDE7CisJCWRhdGVfdHpfZiA9IGRhdGVfdHogJiAzOworCQlkYXRlX3R6ID4+PSAyOworCQlkYXRlX3R6ID0gLWRhdGVfdHo7CisJCWRhdGVfdHpfZiAqPSAxNTsKKwl9IGVsc2UgaWYgKHhfc3lzLT5hc3NlbWJseV9kYXRlWzBdIDwgMHg4MFUpIHsKKwkJZGF0ZV90eiA9IHhfc3lzLT5hc3NlbWJseV9kYXRlWzBdOworCQlkYXRlX3R6X2YgPSBkYXRlX3R6ICYgMzsKKwkJZGF0ZV90eiA+Pj0gMjsKKwkJZGF0ZV90el9mICo9IDE1OworCX0KIAogCXJjICs9IHNjbnByaW50ZihidWZmZXIgKyByYywgUEFHRV9TSVpFIC0gcmMsICJjbGFzczogJXhcbiIsCiAJCQl4X3N5cy0+Y2xhc3MpOwpAQCAtMzA1LDggKzMzMSw4IEBACiAJcmMgKz0gc2NucHJpbnRmKGJ1ZmZlciArIHJjLCBQQUdFX1NJWkUgLSByYywgInBhZ2Ugc2l6ZTogJXhcbiIsCiAJCQliZTE2X3RvX2NwdSh4X3N5cy0+cGFnZV9zaXplKSk7CiAJcmMgKz0gc2NucHJpbnRmKGJ1ZmZlciArIHJjLCBQQUdFX1NJWkUgLSByYywgImFzc2VtYmx5IGRhdGU6ICIKLQkJCSIlZCAlMDR1LSUwMnUtJTAydSAlMDJ1OiUwMnU6JTAydVxuIiwKLQkJCXhfc3lzLT5hc3NlbWJseV9kYXRlWzBdLAorCQkJIkdNVCUrZDolZCAlMDR1LSUwMnUtJTAydSAlMDJ1OiUwMnU6JTAydVxuIiwKKwkJCWRhdGVfdHosIGRhdGVfdHpfZiwKIAkJCWJlMTZfdG9fY3B1KCoodW5zaWduZWQgc2hvcnQgKikKIAkJCQkgICAgJnhfc3lzLT5hc3NlbWJseV9kYXRlWzFdKSwKIAkJCXhfc3lzLT5hc3NlbWJseV9kYXRlWzNdLCB4X3N5cy0+YXNzZW1ibHlfZGF0ZVs0XSwKQEAgLTM5OCw2ICs0MjQsNDEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IG1zcHJvX2Jsb2NrX2F0dHJfc2hvd19zcGVjZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IG1zcHJvX3N5c19hdHRyICp4X2F0dHIgPSBjb250YWluZXJfb2YoYXR0ciwKKwkJCQkJCSAgICAgc3RydWN0IG1zcHJvX3N5c19hdHRyLAorCQkJCQkJICAgICBkZXZfYXR0cik7CisJc3RydWN0IG1zcHJvX3NwZWNmaWxlICp4X3NwZmlsZSA9IHhfYXR0ci0+ZGF0YTsKKwljaGFyIG5hbWVbOV0sIGV4dFs0XTsKKwlzc2l6ZV90IHJjID0gMDsKKworCW1lbWNweShuYW1lLCB4X3NwZmlsZS0+bmFtZSwgOCk7CisJbmFtZVs4XSA9IDA7CisJbWVtY3B5KGV4dCwgeF9zcGZpbGUtPmV4dCwgMyk7CisJZXh0WzNdID0gMDsKKworCXJjICs9IHNjbnByaW50ZihidWZmZXIgKyByYywgUEFHRV9TSVpFIC0gcmMsICJuYW1lOiAlc1xuIiwgbmFtZSk7CisJcmMgKz0gc2NucHJpbnRmKGJ1ZmZlciArIHJjLCBQQUdFX1NJWkUgLSByYywgImV4dDogJXNcbiIsIGV4dCk7CisJcmMgKz0gc2NucHJpbnRmKGJ1ZmZlciArIHJjLCBQQUdFX1NJWkUgLSByYywgImF0dHJpYnV0ZTogJXhcbiIsCisJCQl4X3NwZmlsZS0+YXR0cik7CisJcmMgKz0gc2NucHJpbnRmKGJ1ZmZlciArIHJjLCBQQUdFX1NJWkUgLSByYywgInRpbWU6ICVkOiVkOiVkXG4iLAorCQkJeF9zcGZpbGUtPnRpbWUgPj4gMTEsCisJCQkoeF9zcGZpbGUtPnRpbWUgPj4gNSkgJiAweDNmLAorCQkJKHhfc3BmaWxlLT50aW1lICYgMHgxZikgKiAyKTsKKwlyYyArPSBzY25wcmludGYoYnVmZmVyICsgcmMsIFBBR0VfU0laRSAtIHJjLCAiZGF0ZTogJWQtJWQtJWRcbiIsCisJCQkoeF9zcGZpbGUtPmRhdGUgPj4gOSkgKyAxOTgwLAorCQkJKHhfc3BmaWxlLT5kYXRlID4+IDUpICYgMHhmLAorCQkJeF9zcGZpbGUtPmRhdGUgJiAweDFmKTsKKwlyYyArPSBzY25wcmludGYoYnVmZmVyICsgcmMsIFBBR0VfU0laRSAtIHJjLCAic3RhcnQgY2x1c3RlcjogJXhcbiIsCisJCQl4X3NwZmlsZS0+Y2x1c3Rlcik7CisJcmMgKz0gc2NucHJpbnRmKGJ1ZmZlciArIHJjLCBQQUdFX1NJWkUgLSByYywgInNpemU6ICV4XG4iLAorCQkJeF9zcGZpbGUtPnNpemUpOworCXJldHVybiByYzsKK30KKwogc3RhdGljIHNzaXplX3QgbXNwcm9fYmxvY2tfYXR0cl9zaG93X2RldmluZm8oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgIGNoYXIgKmJ1ZmZlcikKQEAgLTQzMCw2ICs0OTEsOSBAQAogCQlyZXR1cm4gbXNwcm9fYmxvY2tfYXR0cl9zaG93X21vZGVsbmFtZTsKIAljYXNlIE1TUFJPX0JMT0NLX0lEX01CUjoKIAkJcmV0dXJuIG1zcHJvX2Jsb2NrX2F0dHJfc2hvd19tYnI7CisJY2FzZSBNU1BST19CTE9DS19JRF9TUEVDRklMRVZBTFVFUzE6CisJY2FzZSBNU1BST19CTE9DS19JRF9TUEVDRklMRVZBTFVFUzI6CisJCXJldHVybiBtc3Byb19ibG9ja19hdHRyX3Nob3dfc3BlY2ZpbGU7CiAJY2FzZSBNU1BST19CTE9DS19JRF9ERVZJTkZPOgogCQlyZXR1cm4gbXNwcm9fYmxvY2tfYXR0cl9zaG93X2RldmluZm87CiAJZGVmYXVsdDoKQEAgLTUxNCw3ICs1NzgsNiBAQAogc3RhdGljIGludCBoX21zcHJvX2Jsb2NrX3RyYW5zZmVyX2RhdGEoc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZCwKIAkJCQkgICAgICAgc3RydWN0IG1lbXN0aWNrX3JlcXVlc3QgKiptcnEpCiB7Ci0Jc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwogCXN0cnVjdCBtc3Byb19ibG9ja19kYXRhICptc2IgPSBtZW1zdGlja19nZXRfZHJ2ZGF0YShjYXJkKTsKIAl1bnNpZ25lZCBjaGFyIHRfdmFsID0gMDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgdF9zZyA9IHsgMCB9OwpAQCAtNTI4LDEyICs1OTEsMTIgQEAKIAlzd2l0Y2ggKCgqbXJxKS0+dHBjKSB7CiAJY2FzZSBNU19UUENfV1JJVEVfUkVHOgogCQltZW1zdGlja19pbml0X3JlcSgqbXJxLCBNU19UUENfU0VUX0NNRCwgJm1zYi0+dHJhbnNmZXJfY21kLCAxKTsKLQkJKCptcnEpLT5nZXRfaW50X3JlZyA9IDE7CisJCSgqbXJxKS0+bmVlZF9jYXJkX2ludCA9IDE7CiAJCXJldHVybiAwOwogCWNhc2UgTVNfVFBDX1NFVF9DTUQ6CiAJCXRfdmFsID0gKCptcnEpLT5pbnRfcmVnOwogCQltZW1zdGlja19pbml0X3JlcSgqbXJxLCBNU19UUENfR0VUX0lOVCwgTlVMTCwgMSk7Ci0JCWlmIChob3N0LT5jYXBzICYgTUVNU1RJQ0tfQ0FQX0FVVE9fR0VUX0lOVCkKKwkJaWYgKG1zYi0+Y2FwcyAmIE1FTVNUSUNLX0NBUF9BVVRPX0dFVF9JTlQpCiAJCQlnb3RvIGhhc19pbnRfcmVnOwogCQlyZXR1cm4gMDsKIAljYXNlIE1TX1RQQ19HRVRfSU5UOgpAQCAtNTgzLDEyICs2NDYsMTIgQEAKIAkJCQkJICAgPyBNU19UUENfUkVBRF9MT05HX0RBVEEKIAkJCQkJICAgOiBNU19UUENfV1JJVEVfTE9OR19EQVRBLAogCQkJCSAgICAgJnRfc2cpOwotCQkoKm1ycSktPmdldF9pbnRfcmVnID0gMTsKKwkJKCptcnEpLT5uZWVkX2NhcmRfaW50ID0gMTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBNU19UUENfUkVBRF9MT05HX0RBVEE6CiAJY2FzZSBNU19UUENfV1JJVEVfTE9OR19EQVRBOgogCQltc2ItPmN1cnJlbnRfcGFnZSsrOwotCQlpZiAoaG9zdC0+Y2FwcyAmIE1FTVNUSUNLX0NBUF9BVVRPX0dFVF9JTlQpIHsKKwkJaWYgKG1zYi0+Y2FwcyAmIE1FTVNUSUNLX0NBUF9BVVRPX0dFVF9JTlQpIHsKIAkJCXRfdmFsID0gKCptcnEpLT5pbnRfcmVnOwogCQkJZ290byBoYXNfaW50X3JlZzsKIAkJfSBlbHNlIHsKQEAgLTYyOSw3ICs2OTIsNyBAQAogCQkJcGFyYW0uc3lzdGVtID0gbXNiLT5zeXN0ZW07CiAJCQlwYXJhbS5kYXRhX2NvdW50ID0gY3B1X3RvX2JlMTYocGFnZV9jb3VudCk7CiAJCQlwYXJhbS5kYXRhX2FkZHJlc3MgPSBjcHVfdG9fYmUzMigodWludDMyX3QpdF9zZWMpOwotCQkJcGFyYW0uY21kX3BhcmFtID0gMDsKKwkJCXBhcmFtLnRwY19wYXJhbSA9IDA7CiAKIAkJCW1zYi0+ZGF0YV9kaXIgPSBycV9kYXRhX2RpcihyZXEpOwogCQkJbXNiLT50cmFuc2Zlcl9jbWQgPSBtc2ItPmRhdGFfZGlyID09IFJFQUQKQEAgLTc1MywxNSArODE2LDE2IEBACiAJcmV0dXJuIGNhcmQtPmN1cnJlbnRfbXJxLmVycm9yOwogfQogCi1zdGF0aWMgaW50IG1zcHJvX2Jsb2NrX3N3aXRjaF90b19wYXJhbGxlbChzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkKQorc3RhdGljIGludCBtc3Byb19ibG9ja19zZXRfaW50ZXJmYWNlKHN0cnVjdCBtZW1zdGlja19kZXYgKmNhcmQsCisJCQkJICAgICB1bnNpZ25lZCBjaGFyIHN5c19yZWcpCiB7CiAJc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwogCXN0cnVjdCBtc3Byb19ibG9ja19kYXRhICptc2IgPSBtZW1zdGlja19nZXRfZHJ2ZGF0YShjYXJkKTsKIAlzdHJ1Y3QgbXNwcm9fcGFyYW1fcmVnaXN0ZXIgcGFyYW0gPSB7Ci0JCS5zeXN0ZW0gPSAwLAorCQkuc3lzdGVtID0gc3lzX3JlZywKIAkJLmRhdGFfY291bnQgPSAwLAogCQkuZGF0YV9hZGRyZXNzID0gMCwKLQkJLmNtZF9wYXJhbSA9IDAKKwkJLnRwY19wYXJhbSA9IDAKIAl9OwogCiAJY2FyZC0+bmV4dF9yZXF1ZXN0ID0gaF9tc3Byb19ibG9ja19yZXFfaW5pdDsKQEAgLTc3MCwyNSArODM0LDcwIEBACiAJCQkgIHNpemVvZihwYXJhbSkpOwogCW1lbXN0aWNrX25ld19yZXEoaG9zdCk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmY2FyZC0+bXJxX2NvbXBsZXRlKTsKLQlpZiAoY2FyZC0+Y3VycmVudF9tcnEuZXJyb3IpCi0JCXJldHVybiBjYXJkLT5jdXJyZW50X21ycS5lcnJvcjsKKwlyZXR1cm4gY2FyZC0+Y3VycmVudF9tcnEuZXJyb3I7Cit9CiAKLQltc2ItPnN5c3RlbSA9IDA7Ci0JaG9zdC0+c2V0X3BhcmFtKGhvc3QsIE1FTVNUSUNLX0lOVEVSRkFDRSwgTUVNU1RJQ0tfUEFSQUxMRUwpOworc3RhdGljIGludCBtc3Byb19ibG9ja19zd2l0Y2hfaW50ZXJmYWNlKHN0cnVjdCBtZW1zdGlja19kZXYgKmNhcmQpCit7CisJc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OworCXN0cnVjdCBtc3Byb19ibG9ja19kYXRhICptc2IgPSBtZW1zdGlja19nZXRfZHJ2ZGF0YShjYXJkKTsKKwlpbnQgcmMgPSAwOworCisJaWYgKG1zYi0+Y2FwcyAmIE1FTVNUSUNLX0NBUF9QQVI0KQorCQlyYyA9IG1zcHJvX2Jsb2NrX3NldF9pbnRlcmZhY2UoY2FyZCwgTUVNU1RJQ0tfU1lTX1BBUjQpOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBjb3VsZCBub3Qgc3dpdGNoIHRvIDQtYml0IG1vZGUsIGVycm9yICVkXG4iLAorCQkgICAgICAgY2FyZC0+ZGV2LmJ1c19pZCwgcmMpOworCQlyZXR1cm4gMDsKKwl9CisKKwltc2ItPnN5c3RlbSA9IE1FTVNUSUNLX1NZU19QQVI0OworCWhvc3QtPnNldF9wYXJhbShob3N0LCBNRU1TVElDS19JTlRFUkZBQ0UsIE1FTVNUSUNLX1BBUjQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBzd2l0Y2hpbmcgdG8gNC1iaXQgcGFyYWxsZWwgbW9kZVxuIiwKKwkgICAgICAgY2FyZC0+ZGV2LmJ1c19pZCk7CisKKwlpZiAobXNiLT5jYXBzICYgTUVNU1RJQ0tfQ0FQX1BBUjgpIHsKKwkJcmMgPSBtc3Byb19ibG9ja19zZXRfaW50ZXJmYWNlKGNhcmQsIE1FTVNUSUNLX1NZU19QQVI4KTsKKworCQlpZiAoIXJjKSB7CisJCQltc2ItPnN5c3RlbSA9IE1FTVNUSUNLX1NZU19QQVI4OworCQkJaG9zdC0+c2V0X3BhcmFtKGhvc3QsIE1FTVNUSUNLX0lOVEVSRkFDRSwKKwkJCQkJTUVNU1RJQ0tfUEFSOCk7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIiVzOiBzd2l0Y2hpbmcgdG8gOC1iaXQgcGFyYWxsZWwgbW9kZVxuIiwKKwkJCSAgICAgICBjYXJkLT5kZXYuYnVzX2lkKTsKKwkJfSBlbHNlCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBjb3VsZCBub3Qgc3dpdGNoIHRvIDgtYml0IG1vZGUsIGVycm9yICVkXG4iLAorCQkJICAgICAgIGNhcmQtPmRldi5idXNfaWQsIHJjKTsKKwl9CiAKIAljYXJkLT5uZXh0X3JlcXVlc3QgPSBoX21zcHJvX2Jsb2NrX3JlcV9pbml0OwogCW1zYi0+bXJxX2hhbmRsZXIgPSBoX21zcHJvX2Jsb2NrX2RlZmF1bHQ7CiAJbWVtc3RpY2tfaW5pdF9yZXEoJmNhcmQtPmN1cnJlbnRfbXJxLCBNU19UUENfR0VUX0lOVCwgTlVMTCwgMSk7CiAJbWVtc3RpY2tfbmV3X3JlcShjYXJkLT5ob3N0KTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYXJkLT5tcnFfY29tcGxldGUpOworCXJjID0gY2FyZC0+Y3VycmVudF9tcnEuZXJyb3I7CiAKLQlpZiAoY2FyZC0+Y3VycmVudF9tcnEuZXJyb3IpIHsKLQkJbXNiLT5zeXN0ZW0gPSAweDgwOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXM6IGludGVyZmFjZSBlcnJvciwgdHJ5aW5nIHRvIGZhbGwgYmFjayB0byBzZXJpYWxcbiIsCisJCSAgICAgICBjYXJkLT5kZXYuYnVzX2lkKTsKKwkJbXNiLT5zeXN0ZW0gPSBNRU1TVElDS19TWVNfU0VSSUFMOworCQlob3N0LT5zZXRfcGFyYW0oaG9zdCwgTUVNU1RJQ0tfUE9XRVIsIE1FTVNUSUNLX1BPV0VSX09GRik7CisJCW1zbGVlcCgxMCk7CisJCWhvc3QtPnNldF9wYXJhbShob3N0LCBNRU1TVElDS19QT1dFUiwgTUVNU1RJQ0tfUE9XRVJfT04pOwogCQlob3N0LT5zZXRfcGFyYW0oaG9zdCwgTUVNU1RJQ0tfSU5URVJGQUNFLCBNRU1TVElDS19TRVJJQUwpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKLQlyZXR1cm4gMDsKKwkJcmMgPSBtZW1zdGlja19zZXRfcndfYWRkcihjYXJkKTsKKwkJaWYgKCFyYykKKwkJCXJjID0gbXNwcm9fYmxvY2tfc2V0X2ludGVyZmFjZShjYXJkLCBtc2ItPnN5c3RlbSk7CisJfQorCXJldHVybiByYzsKIH0KIAogLyogTWVtb3J5IGFsbG9jYXRlZCBmb3IgYXR0cmlidXRlcyBieSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBmcmVlZCBieQpAQCAtODAyLDcgKzkxMSw3IEBACiAJCS5zeXN0ZW0gPSBtc2ItPnN5c3RlbSwKIAkJLmRhdGFfY291bnQgPSBjcHVfdG9fYmUxNigxKSwKIAkJLmRhdGFfYWRkcmVzcyA9IDAsCi0JCS5jbWRfcGFyYW0gPSAwCisJCS50cGNfcGFyYW0gPSAwCiAJfTsKIAlzdHJ1Y3QgbXNwcm9fYXR0cmlidXRlICphdHRyID0gTlVMTDsKIAlzdHJ1Y3QgbXNwcm9fc3lzX2F0dHIgKnNfYXR0ciA9IE5VTEw7CkBAIC05MjIsNyArMTAzMSw3IEBACiAJCXBhcmFtLnN5c3RlbSA9IG1zYi0+c3lzdGVtOwogCQlwYXJhbS5kYXRhX2NvdW50ID0gY3B1X3RvX2JlMTYoKHJjIC8gbXNiLT5wYWdlX3NpemUpICsgMSk7CiAJCXBhcmFtLmRhdGFfYWRkcmVzcyA9IGNwdV90b19iZTMyKGFkZHIgLyBtc2ItPnBhZ2Vfc2l6ZSk7Ci0JCXBhcmFtLmNtZF9wYXJhbSA9IDA7CisJCXBhcmFtLnRwY19wYXJhbSA9IDA7CiAKIAkJc2dfaW5pdF9vbmUoJm1zYi0+cmVxX3NnWzBdLCBidWZmZXIsCiAJCQkgICAgYmUxNl90b19jcHUocGFyYW0uZGF0YV9jb3VudCkgKiBtc2ItPnBhZ2Vfc2l6ZSk7CkBAIC05NjQsNyArMTA3Myw3IEBACiAJc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwogCWludCByYyA9IDA7CiAKLQltc2ItPnN5c3RlbSA9IDB4ODA7CisJbXNiLT5zeXN0ZW0gPSBNRU1TVElDS19TWVNfU0VSSUFMOwogCWNhcmQtPnJlZ19hZGRyLnJfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1zcHJvX3JlZ2lzdGVyLCBzdGF0dXMpOwogCWNhcmQtPnJlZ19hZGRyLnJfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBtc19zdGF0dXNfcmVnaXN0ZXIpOwogCWNhcmQtPnJlZ19hZGRyLndfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1zcHJvX3JlZ2lzdGVyLCBwYXJhbSk7CkBAIC05NzMsMTYgKzEwODIsMTggQEAKIAlpZiAobWVtc3RpY2tfc2V0X3J3X2FkZHIoY2FyZCkpCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKGhvc3QtPmNhcHMgJiBNRU1TVElDS19DQVBfUEFSQUxMRUwpIHsKLQkJaWYgKG1zcHJvX2Jsb2NrX3N3aXRjaF90b19wYXJhbGxlbChjYXJkKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZCBub3Qgc3dpdGNoIHRvICIKLQkJCSAgICAgICAicGFyYWxsZWwgaW50ZXJmYWNlXG4iLCBjYXJkLT5kZXYuYnVzX2lkKTsKLQl9CisJbXNiLT5jYXBzID0gaG9zdC0+Y2FwczsKKwlyYyA9IG1zcHJvX2Jsb2NrX3N3aXRjaF9pbnRlcmZhY2UoY2FyZCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKKwltc2xlZXAoMjAwKTsKIAlyYyA9IG1zcHJvX2Jsb2NrX3dhaXRfZm9yX2NlZChjYXJkKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlkZXZfZGJnKCZjYXJkLT5kZXYsICJjYXJkIGFjdGl2YXRlZFxuIik7CisJaWYgKG1zYi0+c3lzdGVtICE9IE1FTVNUSUNLX1NZU19TRVJJQUwpCisJCW1zYi0+Y2FwcyB8PSBNRU1TVElDS19DQVBfQVVUT19HRVRfSU5UOwogCiAJY2FyZC0+bmV4dF9yZXF1ZXN0ID0gaF9tc3Byb19ibG9ja19yZXFfaW5pdDsKIAltc2ItPm1ycV9oYW5kbGVyID0gaF9tc3Byb19ibG9ja19nZXRfcm87CkBAIC0xMDE2LDggKzExMjcsOCBAQAogCXU2NCBsaW1pdCA9IEJMS19CT1VOQ0VfSElHSDsKIAl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OwogCi0JaWYgKGhvc3QtPmNkZXYuZGV2LT5kbWFfbWFzayAmJiAqKGhvc3QtPmNkZXYuZGV2LT5kbWFfbWFzaykpCi0JCWxpbWl0ID0gKihob3N0LT5jZGV2LmRldi0+ZG1hX21hc2spOworCWlmIChob3N0LT5kZXYuZG1hX21hc2sgJiYgKihob3N0LT5kZXYuZG1hX21hc2spKQorCQlsaW1pdCA9ICooaG9zdC0+ZGV2LmRtYV9tYXNrKTsKIAogCWZvciAocmMgPSAwOyBtc2ItPmF0dHJfZ3JvdXAuYXR0cnNbcmNdOyArK3JjKSB7CiAJCXNfYXR0ciA9IG1zcHJvX2Zyb21fc3lzZnNfYXR0cihtc2ItPmF0dHJfZ3JvdXAuYXR0cnNbcmNdKTsKQEAgLTEzNDgsNCArMTQ1OSwzIEBACiBNT0RVTEVfQVVUSE9SKCJBbGV4IER1Ym92Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNvbnkgTWVtb3J5U3RpY2tQcm8gYmxvY2sgZGV2aWNlIGRyaXZlciIpOwogTU9EVUxFX0RFVklDRV9UQUJMRShtZW1zdGljaywgbXNwcm9fYmxvY2tfaWRfdGJsKTsKLU1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tZW1zdGljay9ob3N0L0tjb25maWcKaW5kZXggYzAwMmZjYy4uNGNlNWM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZW1zdGljay9ob3N0L0tjb25maWcKQEAgLTIwLDMgKzIwLDEzIEBACiAgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlmbV9tcy4KIAorY29uZmlnIE1FTVNUSUNLX0pNSUNST05fMzhYCisJdHJpc3RhdGUgIkpNaWNyb24gSk1CMzhYIE1lbW9yeVN0aWNrIGludGVyZmFjZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFBDSQorCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGFjY2VzcyBNZW1vcnlTdGljayBjYXJkcyB3aXRoCisJICB0aGUgSk1pY3JvbihSKSBKTUIzOFggTWVtb3J5U3RpY2sgY2FyZCByZWFkZXIuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBqbWIzOHhfbXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvTWFrZWZpbGUKaW5kZXggZWU2NjYzOC4uMTI1MzBlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9NYWtlZmlsZQpAQCAtMyw4ICszLDggQEAKICMKIAogaWZlcSAoJChDT05GSUdfTUVNU1RJQ0tfREVCVUcpLHkpCi0JRVhUUkFfQ0ZMQUdTCQkrPSAtRERFQlVHCisJRVhUUkFfQ0ZMQUdTCQkJKz0gLURERUJVRwogZW5kaWYKIAotb2JqLSQoQ09ORklHX01FTVNUSUNLX1RJRk1fTVMpCSs9IHRpZm1fbXMubwotCitvYmotJChDT05GSUdfTUVNU1RJQ0tfVElGTV9NUykJCSs9IHRpZm1fbXMubworb2JqLSQoQ09ORklHX01FTVNUSUNLX0pNSUNST05fMzhYKQkrPSBqbWIzOHhfbXMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9ob3N0L2ptYjM4eF9tcy5jIGIvZHJpdmVycy9tZW1zdGljay9ob3N0L2ptYjM4eF9tcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTQ2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3Qvam1iMzh4X21zLmMKQEAgLTAsMCArMSw5NTQgQEAKKy8qCisgKiAgam1iMzh4X21zLmMgLSBKTWljcm9uIGptYjM4eCBNZW1vcnlTdGljayBjYXJkIHJlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBEdWJvdiA8b2FrYWRAeWFob28uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvbWVtc3RpY2suaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAiam1iMzh4X21zIgorCitzdGF0aWMgaW50IG5vX2RtYTsKK21vZHVsZV9wYXJhbShub19kbWEsIGJvb2wsIDA2NDQpOworCitlbnVtIHsKKwlETUFfQUREUkVTUyAgICAgICA9IDB4MDAsCisJQkxPQ0sgICAgICAgICAgICAgPSAweDA0LAorCURNQV9DT05UUk9MICAgICAgID0gMHgwOCwKKwlUUENfUDAgICAgICAgICAgICA9IDB4MGMsCisJVFBDX1AxICAgICAgICAgICAgPSAweDEwLAorCVRQQyAgICAgICAgICAgICAgID0gMHgxNCwKKwlIT1NUX0NPTlRST0wgICAgICA9IDB4MTgsCisJREFUQSAgICAgICAgICAgICAgPSAweDFjLAorCVNUQVRVUyAgICAgICAgICAgID0gMHgyMCwKKwlJTlRfU1RBVFVTICAgICAgICA9IDB4MjQsCisJSU5UX1NUQVRVU19FTkFCTEUgPSAweDI4LAorCUlOVF9TSUdOQUxfRU5BQkxFID0gMHgyYywKKwlUSU1FUiAgICAgICAgICAgICA9IDB4MzAsCisJVElNRVJfQ09OVFJPTCAgICAgPSAweDM0LAorCVBBRF9PVVRQVVRfRU5BQkxFID0gMHgzOCwKKwlQQURfUFVfUEQgICAgICAgICA9IDB4M2MsCisJQ0xPQ0tfREVMQVkgICAgICAgPSAweDQwLAorCUFETUFfQUREUkVTUyAgICAgID0gMHg0NCwKKwlDTE9DS19DT05UUk9MICAgICA9IDB4NDgsCisJTEVEX0NPTlRST0wgICAgICAgPSAweDRjLAorCVZFUlNJT04gICAgICAgICAgID0gMHg1MAorfTsKKworc3RydWN0IGptYjM4eF9tc19ob3N0IHsKKwlzdHJ1Y3Qgam1iMzh4X21zICAgICAgICAqY2hpcDsKKwl2b2lkIF9faW9tZW0gICAgICAgICAgICAqYWRkcjsKKwlzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOworCWludCAgICAgICAgICAgICAgICAgICAgIGlkOworCWNoYXIgICAgICAgICAgICAgICAgICAgIGhvc3RfaWRbREVWSUNFX0lEX1NJWkVdOworCWludCAgICAgICAgICAgICAgICAgICAgIGlycTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBibG9ja19wb3M7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgdGltZW91dF9qaWZmaWVzOworCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOworCXN0cnVjdCBtZW1zdGlja19yZXF1ZXN0ICpyZXE7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgY21kX2ZsYWdzOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGlvX3BvczsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBpb193b3JkWzJdOworfTsKKworc3RydWN0IGptYjM4eF9tcyB7CisJc3RydWN0IHBjaV9kZXYgICAgICAgICpwZGV2OworCWludCAgICAgICAgICAgICAgICAgICBob3N0X2NudDsKKwlzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAgKmhvc3RzW107Cit9OworCisjZGVmaW5lIEJMT0NLX0NPVU5UX01BU0sgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBCTE9DS19TSVpFX01BU0sgICAgICAgIDB4MDAwMDBmZmYKKworI2RlZmluZSBETUFfQ09OVFJPTF9FTkFCTEUgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBUUENfREFUQV9TRUwgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgVFBDX0RJUiAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFRQQ19XQUlUX0lOVCAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBUUENfR0VUX0lOVCAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgVFBDX0NPREVfU1pfTUFTSyAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIFRQQ19EQVRBX1NaX01BU0sgICAgICAgMHgwMDAwMDAwNworCisjZGVmaW5lIEhPU1RfQ09OVFJPTF9SRVNFVF9SRVEgMHgwMDAwODAwMAorI2RlZmluZSBIT1NUX0NPTlRST0xfUkVJICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSE9TVF9DT05UUk9MX0xFRCAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEhPU1RfQ09OVFJPTF9GQVNUX0NMSyAgMHgwMDAwMDIwMAorI2RlZmluZSBIT1NUX0NPTlRST0xfUkVTRVQgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSE9TVF9DT05UUk9MX1BPV0VSX0VOICAweDAwMDAwMDgwCisjZGVmaW5lIEhPU1RfQ09OVFJPTF9DTE9DS19FTiAgMHgwMDAwMDA0MAorI2RlZmluZSBIT1NUX0NPTlRST0xfSUZfU0hJRlQgIDQKKworI2RlZmluZSBIT1NUX0NPTlRST0xfSUZfU0VSSUFMIDB4MAorI2RlZmluZSBIT1NUX0NPTlRST0xfSUZfUEFSNCAgIDB4MQorI2RlZmluZSBIT1NUX0NPTlRST0xfSUZfUEFSOCAgIDB4MworCisjZGVmaW5lIFNUQVRVU19CVVNZICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgU1RBVFVTX01TX0RBVDcgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBTVEFUVVNfTVNfREFUNiAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFNUQVRVU19NU19EQVQ1ICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgU1RBVFVTX01TX0RBVDQgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBTVEFUVVNfTVNfREFUMyAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFNUQVRVU19NU19EQVQyICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgU1RBVFVTX01TX0RBVDEgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBTVEFUVVNfTVNfREFUMCAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFNUQVRVU19IQVNfTUVESUEgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgU1RBVFVTX0ZJRk9fRU1QVFkgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBTVEFUVVNfRklGT19GVUxMICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFNUQVRVU19NU19DRUQgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgU1RBVFVTX01TX0VSUiAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBTVEFUVVNfTVNfQlJRICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFNUQVRVU19NU19DTksgICAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBJTlRfU1RBVFVTX1RQQ19FUlIgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIElOVF9TVEFUVVNfQ1JDX0VSUiAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU5UX1NUQVRVU19USU1FUl9UTyAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJTlRfU1RBVFVTX0hTS19UTyAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElOVF9TVEFUVVNfQU5ZX0VSUiAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSU5UX1NUQVRVU19GSUZPX1dSRFkgICAgMHgwMDAwMDA4MAorI2RlZmluZSBJTlRfU1RBVFVTX0ZJRk9fUlJEWSAgICAweDAwMDAwMDQwCisjZGVmaW5lIElOVF9TVEFUVVNfTUVESUFfT1VUICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU5UX1NUQVRVU19NRURJQV9JTiAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJTlRfU1RBVFVTX0RNQV9CT1VOREFSWSAweDAwMDAwMDA0CisjZGVmaW5lIElOVF9TVEFUVVNfRU9UUkFOICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSU5UX1NUQVRVU19FT1RQQyAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIElOVF9TVEFUVVNfQUxMICAgICAgICAgIDB4MDAwZjgwMWYKKworI2RlZmluZSBQQURfT1VUUFVUX0VOQUJMRV9NUyAgMHgwRjNGCisKKyNkZWZpbmUgUEFEX1BVX1BEX09GRiAgICAgICAgIDB4N0ZGRjAwMDAKKyNkZWZpbmUgUEFEX1BVX1BEX09OX01TX1NPQ0swIDB4NWY4ZjAwMDAKKyNkZWZpbmUgUEFEX1BVX1BEX09OX01TX1NPQ0sxIDB4MGYwZjAwMDAKKworI2RlZmluZSBDTE9DS19DT05UUk9MXzQwTUhaICAgMHgwMDAwMDAwMQorI2RlZmluZSBDTE9DS19DT05UUk9MXzUwTUhaICAgMHgwMDAwMDAwMgorI2RlZmluZSBDTE9DS19DT05UUk9MXzYwTUhaICAgMHgwMDAwMDAwOAorI2RlZmluZSBDTE9DS19DT05UUk9MXzYyXzVNSFogMHgwMDAwMDAwYworI2RlZmluZSBDTE9DS19DT05UUk9MX09GRiAgICAgMHgwMDAwMDAwMAorCitlbnVtIHsKKwlDTURfUkVBRFkgICAgPSAweDAxLAorCUZJRk9fUkVBRFkgICA9IDB4MDIsCisJUkVHX0RBVEEgICAgID0gMHgwNCwKKwlETUFfREFUQSAgICAgPSAweDA4Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGptYjM4eF9tc19yZWFkX2RhdGEoc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0LAorCQkJCQl1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdW5zaWduZWQgaW50IG9mZiA9IDA7CisKKwl3aGlsZSAoaG9zdC0+aW9fcG9zICYmIGxlbmd0aCkgeworCQlidWZbb2ZmKytdID0gaG9zdC0+aW9fd29yZFswXSAmIDB4ZmY7CisJCWhvc3QtPmlvX3dvcmRbMF0gPj49IDg7CisJCWxlbmd0aC0tOworCQlob3N0LT5pb19wb3MtLTsKKwl9CisKKwlpZiAoIWxlbmd0aCkKKwkJcmV0dXJuIG9mZjsKKworCXdoaWxlICghKFNUQVRVU19GSUZPX0VNUFRZICYgcmVhZGwoaG9zdC0+YWRkciArIFNUQVRVUykpKSB7CisJCWlmIChsZW5ndGggPCA0KQorCQkJYnJlYWs7CisJCSoodW5zaWduZWQgaW50ICopKGJ1ZiArIG9mZikgPSBfX3Jhd19yZWFkbChob3N0LT5hZGRyICsgREFUQSk7CisJCWxlbmd0aCAtPSA0OworCQlvZmYgKz0gNDsKKwl9CisKKwlpZiAobGVuZ3RoCisJICAgICYmICEoU1RBVFVTX0ZJRk9fRU1QVFkgJiByZWFkbChob3N0LT5hZGRyICsgU1RBVFVTKSkpIHsKKwkJaG9zdC0+aW9fd29yZFswXSA9IHJlYWRsKGhvc3QtPmFkZHIgKyBEQVRBKTsKKwkJZm9yIChob3N0LT5pb19wb3MgPSA0OyBob3N0LT5pb19wb3M7IC0taG9zdC0+aW9fcG9zKSB7CisJCQlidWZbb2ZmKytdID0gaG9zdC0+aW9fd29yZFswXSAmIDB4ZmY7CisJCQlob3N0LT5pb193b3JkWzBdID4+PSA4OworCQkJbGVuZ3RoLS07CisJCQlpZiAoIWxlbmd0aCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgam1iMzh4X21zX3JlYWRfcmVnX2RhdGEoc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0LAorCQkJCQkgICAgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQgb2ZmID0gMDsKKworCXdoaWxlIChob3N0LT5pb19wb3MgPiA0ICYmIGxlbmd0aCkgeworCQlidWZbb2ZmKytdID0gaG9zdC0+aW9fd29yZFswXSAmIDB4ZmY7CisJCWhvc3QtPmlvX3dvcmRbMF0gPj49IDg7CisJCWxlbmd0aC0tOworCQlob3N0LT5pb19wb3MtLTsKKwl9CisKKwlpZiAoIWxlbmd0aCkKKwkJcmV0dXJuIG9mZjsKKworCXdoaWxlIChob3N0LT5pb19wb3MgJiYgbGVuZ3RoKSB7CisJCWJ1ZltvZmYrK10gPSBob3N0LT5pb193b3JkWzFdICYgMHhmZjsKKwkJaG9zdC0+aW9fd29yZFsxXSA+Pj0gODsKKwkJbGVuZ3RoLS07CisJCWhvc3QtPmlvX3Bvcy0tOworCX0KKworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgam1iMzh4X21zX3dyaXRlX2RhdGEoc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0LAorCQkJCQkgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQgb2ZmID0gMDsKKworCWlmIChob3N0LT5pb19wb3MpIHsKKwkJd2hpbGUgKGhvc3QtPmlvX3BvcyA8IDQgJiYgbGVuZ3RoKSB7CisJCQlob3N0LT5pb193b3JkWzBdIHw9ICBidWZbb2ZmKytdIDw8IChob3N0LT5pb19wb3MgKiA4KTsKKwkJCWhvc3QtPmlvX3BvcysrOworCQkJbGVuZ3RoLS07CisJCX0KKwl9CisKKwlpZiAoaG9zdC0+aW9fcG9zID09IDQKKwkgICAgJiYgIShTVEFUVVNfRklGT19GVUxMICYgcmVhZGwoaG9zdC0+YWRkciArIFNUQVRVUykpKSB7CisJCXdyaXRlbChob3N0LT5pb193b3JkWzBdLCBob3N0LT5hZGRyICsgREFUQSk7CisJCWhvc3QtPmlvX3BvcyA9IDA7CisJCWhvc3QtPmlvX3dvcmRbMF0gPSAwOworCX0gZWxzZSBpZiAoaG9zdC0+aW9fcG9zKSB7CisJCXJldHVybiBvZmY7CisJfQorCisJaWYgKCFsZW5ndGgpCisJCXJldHVybiBvZmY7CisKKwl3aGlsZSAoIShTVEFUVVNfRklGT19GVUxMICYgcmVhZGwoaG9zdC0+YWRkciArIFNUQVRVUykpKSB7CisJCWlmIChsZW5ndGggPCA0KQorCQkJYnJlYWs7CisKKwkJX19yYXdfd3JpdGVsKCoodW5zaWduZWQgaW50ICopKGJ1ZiArIG9mZiksCisJCQkgICAgIGhvc3QtPmFkZHIgKyBEQVRBKTsKKwkJbGVuZ3RoIC09IDQ7CisJCW9mZiArPSA0OworCX0KKworCXN3aXRjaCAobGVuZ3RoKSB7CisJY2FzZSAzOgorCQlob3N0LT5pb193b3JkWzBdIHw9IGJ1ZltvZmYgKyAyXSA8PCAxNjsKKwkJaG9zdC0+aW9fcG9zKys7CisJY2FzZSAyOgorCQlob3N0LT5pb193b3JkWzBdIHw9IGJ1ZltvZmYgKyAxXSA8PCA4OworCQlob3N0LT5pb19wb3MrKzsKKwljYXNlIDE6CisJCWhvc3QtPmlvX3dvcmRbMF0gfD0gYnVmW29mZl07CisJCWhvc3QtPmlvX3BvcysrOworCX0KKworCW9mZiArPSBob3N0LT5pb19wb3M7CisKKwlyZXR1cm4gb2ZmOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGptYjM4eF9tc193cml0ZV9yZWdfZGF0YShzdHJ1Y3Qgam1iMzh4X21zX2hvc3QgKmhvc3QsCisJCQkJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdW5zaWduZWQgaW50IG9mZiA9IDA7CisKKwl3aGlsZSAoaG9zdC0+aW9fcG9zIDwgNCAmJiBsZW5ndGgpIHsKKwkJaG9zdC0+aW9fd29yZFswXSAmPSB+KDB4ZmYgPDwgKGhvc3QtPmlvX3BvcyAqIDgpKTsKKwkJaG9zdC0+aW9fd29yZFswXSB8PSAgYnVmW29mZisrXSA8PCAoaG9zdC0+aW9fcG9zICogOCk7CisJCWhvc3QtPmlvX3BvcysrOworCQlsZW5ndGgtLTsKKwl9CisKKwlpZiAoIWxlbmd0aCkKKwkJcmV0dXJuIG9mZjsKKworCXdoaWxlIChob3N0LT5pb19wb3MgPCA4ICYmIGxlbmd0aCkgeworCQlob3N0LT5pb193b3JkWzFdICY9IH4oMHhmZiA8PCAoaG9zdC0+aW9fcG9zICogOCkpOworCQlob3N0LT5pb193b3JkWzFdIHw9ICBidWZbb2ZmKytdIDw8IChob3N0LT5pb19wb3MgKiA4KTsKKwkJaG9zdC0+aW9fcG9zKys7CisJCWxlbmd0aC0tOworCX0KKworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyBpbnQgam1iMzh4X21zX3RyYW5zZmVyX2RhdGEoc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0KQoreworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IG9mZjsKKwl1bnNpZ25lZCBpbnQgdF9zaXplLCBwX2NudDsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJc3RydWN0IHBhZ2UgKnBnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJaWYgKGhvc3QtPnJlcS0+bG9uZ19kYXRhKSB7CisJCWxlbmd0aCA9IGhvc3QtPnJlcS0+c2cubGVuZ3RoIC0gaG9zdC0+YmxvY2tfcG9zOworCQlvZmYgPSBob3N0LT5yZXEtPnNnLm9mZnNldCArIGhvc3QtPmJsb2NrX3BvczsKKwl9IGVsc2UgeworCQlsZW5ndGggPSBob3N0LT5yZXEtPmRhdGFfbGVuIC0gaG9zdC0+YmxvY2tfcG9zOworCQlvZmYgPSAwOworCX0KKworCXdoaWxlIChsZW5ndGgpIHsKKwkJdW5zaWduZWQgaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHBfb2ZmKTsKKworCQlpZiAoaG9zdC0+cmVxLT5sb25nX2RhdGEpIHsKKwkJCXBnID0gbnRoX3BhZ2Uoc2dfcGFnZSgmaG9zdC0+cmVxLT5zZyksCisJCQkJICAgICAgb2ZmID4+IFBBR0VfU0hJRlQpOworCQkJcF9vZmYgPSBvZmZzZXRfaW5fcGFnZShvZmYpOworCQkJcF9jbnQgPSBQQUdFX1NJWkUgLSBwX29mZjsKKwkJCXBfY250ID0gbWluKHBfY250LCBsZW5ndGgpOworCisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlidWYgPSBrbWFwX2F0b21pYyhwZywgS01fQklPX1NSQ19JUlEpICsgcF9vZmY7CisJCX0gZWxzZSB7CisJCQlidWYgPSBob3N0LT5yZXEtPmRhdGEgKyBob3N0LT5ibG9ja19wb3M7CisJCQlwX2NudCA9IGhvc3QtPnJlcS0+ZGF0YV9sZW4gLSBob3N0LT5ibG9ja19wb3M7CisJCX0KKworCQlpZiAoaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBXUklURSkKKwkJCXRfc2l6ZSA9ICEoaG9zdC0+Y21kX2ZsYWdzICYgUkVHX0RBVEEpCisJCQkJID8gam1iMzh4X21zX3dyaXRlX2RhdGEoaG9zdCwgYnVmLCBwX2NudCkKKwkJCQkgOiBqbWIzOHhfbXNfd3JpdGVfcmVnX2RhdGEoaG9zdCwgYnVmLCBwX2NudCk7CisJCWVsc2UKKwkJCXRfc2l6ZSA9ICEoaG9zdC0+Y21kX2ZsYWdzICYgUkVHX0RBVEEpCisJCQkJID8gam1iMzh4X21zX3JlYWRfZGF0YShob3N0LCBidWYsIHBfY250KQorCQkJCSA6IGptYjM4eF9tc19yZWFkX3JlZ19kYXRhKGhvc3QsIGJ1ZiwgcF9jbnQpOworCisJCWlmIChob3N0LT5yZXEtPmxvbmdfZGF0YSkgeworCQkJa3VubWFwX2F0b21pYyhidWYgLSBwX29mZiwgS01fQklPX1NSQ19JUlEpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQl9CisKKwkJaWYgKCF0X3NpemUpCisJCQlicmVhazsKKwkJaG9zdC0+YmxvY2tfcG9zICs9IHRfc2l6ZTsKKwkJbGVuZ3RoIC09IHRfc2l6ZTsKKwkJb2ZmICs9IHRfc2l6ZTsKKwl9CisKKwlpZiAoIWxlbmd0aCAmJiBob3N0LT5yZXEtPmRhdGFfZGlyID09IFdSSVRFKSB7CisJCWlmIChob3N0LT5jbWRfZmxhZ3MgJiBSRUdfREFUQSkgeworCQkJd3JpdGVsKGhvc3QtPmlvX3dvcmRbMF0sIGhvc3QtPmFkZHIgKyBUUENfUDApOworCQkJd3JpdGVsKGhvc3QtPmlvX3dvcmRbMV0sIGhvc3QtPmFkZHIgKyBUUENfUDEpOworCQl9IGVsc2UgaWYgKGhvc3QtPmlvX3BvcykgeworCQkJd3JpdGVsKGhvc3QtPmlvX3dvcmRbMF0sIGhvc3QtPmFkZHIgKyBEQVRBKTsKKwkJfQorCX0KKworCXJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQgam1iMzh4X21zX2lzc3VlX2NtZChzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqbXNoKQoreworCXN0cnVjdCBqbWIzOHhfbXNfaG9zdCAqaG9zdCA9IG1lbXN0aWNrX3ByaXYobXNoKTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXVuc2lnbmVkIGludCBkYXRhX2xlbiwgY21kLCB0X3ZhbDsKKworCWlmICghKFNUQVRVU19IQVNfTUVESUEgJiByZWFkbChob3N0LT5hZGRyICsgU1RBVFVTKSkpIHsKKwkJZGV2X2RiZygmbXNoLT5kZXYsICJubyBtZWRpYSBzdGF0dXNcbiIpOworCQlob3N0LT5yZXEtPmVycm9yID0gLUVUSU1FOworCQlyZXR1cm4gaG9zdC0+cmVxLT5lcnJvcjsKKwl9CisKKwlkZXZfZGJnKCZtc2gtPmRldiwgImNvbnRyb2wgJTA4eFxuIiwKKwkJcmVhZGwoaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCkpOworCWRldl9kYmcoJm1zaC0+ZGV2LCAic3RhdHVzICUwOHhcbiIsIHJlYWRsKGhvc3QtPmFkZHIgKyBJTlRfU1RBVFVTKSk7CisJZGV2X2RiZygmbXNoLT5kZXYsICJoc3RhdHVzICUwOHhcbiIsIHJlYWRsKGhvc3QtPmFkZHIgKyBTVEFUVVMpKTsKKworCWhvc3QtPmNtZF9mbGFncyA9IDA7CisJaG9zdC0+YmxvY2tfcG9zID0gMDsKKwlob3N0LT5pb19wb3MgPSAwOworCWhvc3QtPmlvX3dvcmRbMF0gPSAwOworCWhvc3QtPmlvX3dvcmRbMV0gPSAwOworCisJY21kID0gaG9zdC0+cmVxLT50cGMgPDwgMTY7CisJY21kIHw9IFRQQ19EQVRBX1NFTDsKKworCWlmIChob3N0LT5yZXEtPmRhdGFfZGlyID09IFJFQUQpCisJCWNtZCB8PSBUUENfRElSOworCWlmIChob3N0LT5yZXEtPm5lZWRfY2FyZF9pbnQpCisJCWNtZCB8PSBUUENfV0FJVF9JTlQ7CisKKwlkYXRhID0gaG9zdC0+cmVxLT5kYXRhOworCisJaWYgKCFub19kbWEpCisJCWhvc3QtPmNtZF9mbGFncyB8PSBETUFfREFUQTsKKworCWlmIChob3N0LT5yZXEtPmxvbmdfZGF0YSkgeworCQlkYXRhX2xlbiA9IGhvc3QtPnJlcS0+c2cubGVuZ3RoOworCX0gZWxzZSB7CisJCWRhdGFfbGVuID0gaG9zdC0+cmVxLT5kYXRhX2xlbjsKKwkJaG9zdC0+Y21kX2ZsYWdzICY9IH5ETUFfREFUQTsKKwl9CisKKwlpZiAoZGF0YV9sZW4gPD0gOCkgeworCQljbWQgJj0gfihUUENfREFUQV9TRUwgfCAweGYpOworCQlob3N0LT5jbWRfZmxhZ3MgfD0gUkVHX0RBVEE7CisJCWNtZCB8PSBkYXRhX2xlbiAmIDB4ZjsKKwkJaG9zdC0+Y21kX2ZsYWdzICY9IH5ETUFfREFUQTsKKwl9CisKKwlpZiAoaG9zdC0+Y21kX2ZsYWdzICYgRE1BX0RBVEEpIHsKKwkJaWYgKDEgIT0gcGNpX21hcF9zZyhob3N0LT5jaGlwLT5wZGV2LCAmaG9zdC0+cmVxLT5zZywgMSwKKwkJCQkgICAgaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBSRUFECisJCQkJICAgID8gUENJX0RNQV9GUk9NREVWSUNFCisJCQkJICAgIDogUENJX0RNQV9UT0RFVklDRSkpIHsKKwkJCWhvc3QtPnJlcS0+ZXJyb3IgPSAtRU5PTUVNOworCQkJcmV0dXJuIGhvc3QtPnJlcS0+ZXJyb3I7CisJCX0KKwkJZGF0YV9sZW4gPSBzZ19kbWFfbGVuKCZob3N0LT5yZXEtPnNnKTsKKwkJd3JpdGVsKHNnX2RtYV9hZGRyZXNzKCZob3N0LT5yZXEtPnNnKSwKKwkJICAgICAgIGhvc3QtPmFkZHIgKyBETUFfQUREUkVTUyk7CisJCXdyaXRlbCgoKDEgPDwgMTYpICYgQkxPQ0tfQ09VTlRfTUFTSykKKwkJICAgICAgIHwgKGRhdGFfbGVuICYgQkxPQ0tfU0laRV9NQVNLKSwKKwkJICAgICAgIGhvc3QtPmFkZHIgKyBCTE9DSyk7CisJCXdyaXRlbChETUFfQ09OVFJPTF9FTkFCTEUsIGhvc3QtPmFkZHIgKyBETUFfQ09OVFJPTCk7CisJfSBlbHNlIGlmICghKGhvc3QtPmNtZF9mbGFncyAmIFJFR19EQVRBKSkgeworCQl3cml0ZWwoKCgxIDw8IDE2KSAmIEJMT0NLX0NPVU5UX01BU0spCisJCSAgICAgICB8IChkYXRhX2xlbiAmIEJMT0NLX1NJWkVfTUFTSyksCisJCSAgICAgICBob3N0LT5hZGRyICsgQkxPQ0spOworCQkJdF92YWwgPSByZWFkbChob3N0LT5hZGRyICsgSU5UX1NUQVRVU19FTkFCTEUpOworCQkJdF92YWwgfD0gaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBSRUFECisJCQkJID8gSU5UX1NUQVRVU19GSUZPX1JSRFkKKwkJCQkgOiBJTlRfU1RBVFVTX0ZJRk9fV1JEWTsKKworCQkJd3JpdGVsKHRfdmFsLCBob3N0LT5hZGRyICsgSU5UX1NUQVRVU19FTkFCTEUpOworCQkJd3JpdGVsKHRfdmFsLCBob3N0LT5hZGRyICsgSU5UX1NJR05BTF9FTkFCTEUpOworCX0gZWxzZSB7CisJCWNtZCAmPSB+KFRQQ19EQVRBX1NFTCB8IDB4Zik7CisJCWhvc3QtPmNtZF9mbGFncyB8PSBSRUdfREFUQTsKKwkJY21kIHw9IGRhdGFfbGVuICYgMHhmOworCisJCWlmIChob3N0LT5yZXEtPmRhdGFfZGlyID09IFdSSVRFKSB7CisJCQlqbWIzOHhfbXNfdHJhbnNmZXJfZGF0YShob3N0KTsKKwkJCXdyaXRlbChob3N0LT5pb193b3JkWzBdLCBob3N0LT5hZGRyICsgVFBDX1AwKTsKKwkJCXdyaXRlbChob3N0LT5pb193b3JkWzFdLCBob3N0LT5hZGRyICsgVFBDX1AxKTsKKwkJfQorCX0KKworCW1vZF90aW1lcigmaG9zdC0+dGltZXIsIGppZmZpZXMgKyBob3N0LT50aW1lb3V0X2ppZmZpZXMpOworCXdyaXRlbChIT1NUX0NPTlRST0xfTEVEIHwgcmVhZGwoaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCksCisJICAgICAgIGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOworCWhvc3QtPnJlcS0+ZXJyb3IgPSAwOworCisJd3JpdGVsKGNtZCwgaG9zdC0+YWRkciArIFRQQyk7CisJZGV2X2RiZygmbXNoLT5kZXYsICJleGVjdXRpbmcgVFBDICUwOHgsIGxlbiAleFxuIiwgY21kLCBkYXRhX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgam1iMzh4X21zX2NvbXBsZXRlX2NtZChzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqbXNoLCBpbnQgbGFzdCkKK3sKKwlzdHJ1Y3Qgam1iMzh4X21zX2hvc3QgKmhvc3QgPSBtZW1zdGlja19wcml2KG1zaCk7CisJdW5zaWduZWQgaW50IHRfdmFsID0gMDsKKwlpbnQgcmM7CisKKwlkZWxfdGltZXIoJmhvc3QtPnRpbWVyKTsKKworCWRldl9kYmcoJm1zaC0+ZGV2LCAiYyBjb250cm9sICUwOHhcbiIsCisJCXJlYWRsKGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpKTsKKwlkZXZfZGJnKCZtc2gtPmRldiwgImMgc3RhdHVzICUwOHhcbiIsCisJCXJlYWRsKGhvc3QtPmFkZHIgKyBJTlRfU1RBVFVTKSk7CisJZGV2X2RiZygmbXNoLT5kZXYsICJjIGhzdGF0dXMgJTA4eFxuIiwgcmVhZGwoaG9zdC0+YWRkciArIFNUQVRVUykpOworCisJaG9zdC0+cmVxLT5pbnRfcmVnID0gcmVhZGwoaG9zdC0+YWRkciArIFNUQVRVUykgJiAweGZmOworCisJd3JpdGVsKDAsIGhvc3QtPmFkZHIgKyBCTE9DSyk7CisJd3JpdGVsKDAsIGhvc3QtPmFkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlpZiAoaG9zdC0+Y21kX2ZsYWdzICYgRE1BX0RBVEEpIHsKKwkJcGNpX3VubWFwX3NnKGhvc3QtPmNoaXAtPnBkZXYsICZob3N0LT5yZXEtPnNnLCAxLAorCQkJICAgICBob3N0LT5yZXEtPmRhdGFfZGlyID09IFJFQUQKKwkJCSAgICAgPyBQQ0lfRE1BX0ZST01ERVZJQ0UgOiBQQ0lfRE1BX1RPREVWSUNFKTsKKwl9IGVsc2UgeworCQl0X3ZhbCA9IHJlYWRsKGhvc3QtPmFkZHIgKyBJTlRfU1RBVFVTX0VOQUJMRSk7CisJCWlmIChob3N0LT5yZXEtPmRhdGFfZGlyID09IFJFQUQpCisJCQl0X3ZhbCAmPSB+SU5UX1NUQVRVU19GSUZPX1JSRFk7CisJCWVsc2UKKwkJCXRfdmFsICY9IH5JTlRfU1RBVFVTX0ZJRk9fV1JEWTsKKworCQl3cml0ZWwodF92YWwsIGhvc3QtPmFkZHIgKyBJTlRfU1RBVFVTX0VOQUJMRSk7CisJCXdyaXRlbCh0X3ZhbCwgaG9zdC0+YWRkciArIElOVF9TSUdOQUxfRU5BQkxFKTsKKwl9CisKKwl3cml0ZWwoKH5IT1NUX0NPTlRST0xfTEVEKSAmIHJlYWRsKGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpLAorCSAgICAgICBob3N0LT5hZGRyICsgSE9TVF9DT05UUk9MKTsKKworCWlmICghbGFzdCkgeworCQlkbyB7CisJCQlyYyA9IG1lbXN0aWNrX25leHRfcmVxKG1zaCwgJmhvc3QtPnJlcSk7CisJCX0gd2hpbGUgKCFyYyAmJiBqbWIzOHhfbXNfaXNzdWVfY21kKG1zaCkpOworCX0gZWxzZSB7CisJCWRvIHsKKwkJCXJjID0gbWVtc3RpY2tfbmV4dF9yZXEobXNoLCAmaG9zdC0+cmVxKTsKKwkJCWlmICghcmMpCisJCQkJaG9zdC0+cmVxLT5lcnJvciA9IC1FVElNRTsKKwkJfSB3aGlsZSAoIXJjKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBqbWIzOHhfbXNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqbXNoID0gZGV2X2lkOworCXN0cnVjdCBqbWIzOHhfbXNfaG9zdCAqaG9zdCA9IG1lbXN0aWNrX3ByaXYobXNoKTsKKwl1bnNpZ25lZCBpbnQgaXJxX3N0YXR1czsKKworCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CisJaXJxX3N0YXR1cyA9IHJlYWRsKGhvc3QtPmFkZHIgKyBJTlRfU1RBVFVTKTsKKwlkZXZfZGJnKCZob3N0LT5jaGlwLT5wZGV2LT5kZXYsICJpcnFfc3RhdHVzID0gJTA4eFxuIiwgaXJxX3N0YXR1cyk7CisJaWYgKGlycV9zdGF0dXMgPT0gMCB8fCBpcnFfc3RhdHVzID09ICh+MCkpIHsKKwkJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKGhvc3QtPnJlcSkgeworCQlpZiAoaXJxX3N0YXR1cyAmIElOVF9TVEFUVVNfQU5ZX0VSUikgeworCQkJaWYgKGlycV9zdGF0dXMgJiBJTlRfU1RBVFVTX0NSQ19FUlIpCisJCQkJaG9zdC0+cmVxLT5lcnJvciA9IC1FSUxTRVE7CisJCQllbHNlCisJCQkJaG9zdC0+cmVxLT5lcnJvciA9IC1FVElNRTsKKwkJfSBlbHNlIHsKKwkJCWlmIChob3N0LT5jbWRfZmxhZ3MgJiBETUFfREFUQSkgeworCQkJCWlmIChpcnFfc3RhdHVzICYgSU5UX1NUQVRVU19FT1RSQU4pCisJCQkJCWhvc3QtPmNtZF9mbGFncyB8PSBGSUZPX1JFQURZOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaXJxX3N0YXR1cyAmIChJTlRfU1RBVFVTX0ZJRk9fUlJEWQorCQkJCQkJICB8IElOVF9TVEFUVVNfRklGT19XUkRZKSkKKwkJCQkJam1iMzh4X21zX3RyYW5zZmVyX2RhdGEoaG9zdCk7CisKKwkJCQlpZiAoaXJxX3N0YXR1cyAmIElOVF9TVEFUVVNfRU9UUkFOKSB7CisJCQkJCWptYjM4eF9tc190cmFuc2Zlcl9kYXRhKGhvc3QpOworCQkJCQlob3N0LT5jbWRfZmxhZ3MgfD0gRklGT19SRUFEWTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpcnFfc3RhdHVzICYgSU5UX1NUQVRVU19FT1RQQykgeworCQkJCWhvc3QtPmNtZF9mbGFncyB8PSBDTURfUkVBRFk7CisJCQkJaWYgKGhvc3QtPmNtZF9mbGFncyAmIFJFR19EQVRBKSB7CisJCQkJCWlmIChob3N0LT5yZXEtPmRhdGFfZGlyID09IFJFQUQpIHsKKwkJCQkJCWhvc3QtPmlvX3dvcmRbMF0KKwkJCQkJCQk9IHJlYWRsKGhvc3QtPmFkZHIKKwkJCQkJCQkJKyBUUENfUDApOworCQkJCQkJaG9zdC0+aW9fd29yZFsxXQorCQkJCQkJCT0gcmVhZGwoaG9zdC0+YWRkcgorCQkJCQkJCQkrIFRQQ19QMSk7CisJCQkJCQlob3N0LT5pb19wb3MgPSA4OworCisJCQkJCQlqbWIzOHhfbXNfdHJhbnNmZXJfZGF0YShob3N0KTsKKwkJCQkJfQorCQkJCQlob3N0LT5jbWRfZmxhZ3MgfD0gRklGT19SRUFEWTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaXJxX3N0YXR1cyAmIChJTlRfU1RBVFVTX01FRElBX0lOIHwgSU5UX1NUQVRVU19NRURJQV9PVVQpKSB7CisJCWRldl9kYmcoJmhvc3QtPmNoaXAtPnBkZXYtPmRldiwgIm1lZGlhIGNoYW5nZWRcbiIpOworCQltZW1zdGlja19kZXRlY3RfY2hhbmdlKG1zaCk7CisJfQorCisJd3JpdGVsKGlycV9zdGF0dXMsIGhvc3QtPmFkZHIgKyBJTlRfU1RBVFVTKTsKKworCWlmIChob3N0LT5yZXEKKwkgICAgJiYgKCgoaG9zdC0+Y21kX2ZsYWdzICYgQ01EX1JFQURZKQorCQkgJiYgKGhvc3QtPmNtZF9mbGFncyAmIEZJRk9fUkVBRFkpKQorCQl8fCBob3N0LT5yZXEtPmVycm9yKSkKKwkJam1iMzh4X21zX2NvbXBsZXRlX2NtZChtc2gsIDApOworCisJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgam1iMzh4X21zX2Fib3J0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqbXNoID0gKHN0cnVjdCBtZW1zdGlja19ob3N0ICopZGF0YTsKKwlzdHJ1Y3Qgam1iMzh4X21zX2hvc3QgKmhvc3QgPSBtZW1zdGlja19wcml2KG1zaCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoJmhvc3QtPmNoaXAtPnBkZXYtPmRldiwgImFib3J0XG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWlmIChob3N0LT5yZXEpIHsKKwkJaG9zdC0+cmVxLT5lcnJvciA9IC1FVElNRTsKKwkJam1iMzh4X21zX2NvbXBsZXRlX2NtZChtc2gsIDApOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGptYjM4eF9tc19yZXF1ZXN0KHN0cnVjdCBtZW1zdGlja19ob3N0ICptc2gpCit7CisJc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0ID0gbWVtc3RpY2tfcHJpdihtc2gpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoaG9zdC0+cmVxKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlkbyB7CisJCXJjID0gbWVtc3RpY2tfbmV4dF9yZXEobXNoLCAmaG9zdC0+cmVxKTsKKwl9IHdoaWxlICghcmMgJiYgam1iMzh4X21zX2lzc3VlX2NtZChtc2gpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGptYjM4eF9tc19yZXNldChzdHJ1Y3Qgam1iMzh4X21zX2hvc3QgKmhvc3QpCit7CisJdW5zaWduZWQgaW50IGhvc3RfY3RsID0gcmVhZGwoaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCk7CisKKwl3cml0ZWwoSE9TVF9DT05UUk9MX1JFU0VUX1JFUSwgaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCk7CisKKwl3aGlsZSAoSE9TVF9DT05UUk9MX1JFU0VUX1JFUQorCSAgICAgICAmIChob3N0X2N0bCA9IHJlYWRsKGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpKSkgeworCQluZGVsYXkoMjApOworCQlkZXZfZGJnKCZob3N0LT5jaGlwLT5wZGV2LT5kZXYsICJyZXNldCAlMDh4XG4iLCBob3N0X2N0bCk7CisJfQorCisJd3JpdGVsKEhPU1RfQ09OVFJPTF9SRVNFVCwgaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCk7CisJbW1pb3diKCk7CisJd3JpdGVsKElOVF9TVEFUVVNfQUxMLCBob3N0LT5hZGRyICsgSU5UX1NJR05BTF9FTkFCTEUpOworCXdyaXRlbChJTlRfU1RBVFVTX0FMTCwgaG9zdC0+YWRkciArIElOVF9TVEFUVVNfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgam1iMzh4X21zX3NldF9wYXJhbShzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqbXNoLAorCQkJCWVudW0gbWVtc3RpY2tfcGFyYW0gcGFyYW0sCisJCQkJaW50IHZhbHVlKQoreworCXN0cnVjdCBqbWIzOHhfbXNfaG9zdCAqaG9zdCA9IG1lbXN0aWNrX3ByaXYobXNoKTsKKwl1bnNpZ25lZCBpbnQgaG9zdF9jdGwgPSByZWFkbChob3N0LT5hZGRyICsgSE9TVF9DT05UUk9MKTsKKwl1bnNpZ25lZCBpbnQgY2xvY2tfY3RsID0gQ0xPQ0tfQ09OVFJPTF80ME1IWiwgY2xvY2tfZGVsYXkgPSAwOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgTUVNU1RJQ0tfUE9XRVI6CisJCWlmICh2YWx1ZSA9PSBNRU1TVElDS19QT1dFUl9PTikgeworCQkJam1iMzh4X21zX3Jlc2V0KGhvc3QpOworCisJCQl3cml0ZWwoaG9zdC0+aWQgPyBQQURfUFVfUERfT05fTVNfU09DSzEKKwkJCQkJOiBQQURfUFVfUERfT05fTVNfU09DSzAsCisJCQkgICAgICAgaG9zdC0+YWRkciArIFBBRF9QVV9QRCk7CisKKwkJCXdyaXRlbChQQURfT1VUUFVUX0VOQUJMRV9NUywKKwkJCSAgICAgICBob3N0LT5hZGRyICsgUEFEX09VVFBVVF9FTkFCTEUpOworCisJCQlob3N0X2N0bCA9IDc7CisJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfUE9XRVJfRU4KKwkJCQkgfCBIT1NUX0NPTlRST0xfQ0xPQ0tfRU47CisJCQl3cml0ZWwoaG9zdF9jdGwsIGhvc3QtPmFkZHIgKyBIT1NUX0NPTlRST0wpOworCisJCQlkZXZfZGJnKCZob3N0LT5jaGlwLT5wZGV2LT5kZXYsICJwb3dlciBvblxuIik7CisJCX0gZWxzZSBpZiAodmFsdWUgPT0gTUVNU1RJQ0tfUE9XRVJfT0ZGKSB7CisJCQlob3N0X2N0bCAmPSB+KEhPU1RfQ09OVFJPTF9QT1dFUl9FTgorCQkJCSAgICAgIHwgSE9TVF9DT05UUk9MX0NMT0NLX0VOKTsKKwkJCXdyaXRlbChob3N0X2N0bCwgaG9zdC0+YWRkciArICBIT1NUX0NPTlRST0wpOworCQkJd3JpdGVsKDAsIGhvc3QtPmFkZHIgKyBQQURfT1VUUFVUX0VOQUJMRSk7CisJCQl3cml0ZWwoUEFEX1BVX1BEX09GRiwgaG9zdC0+YWRkciArIFBBRF9QVV9QRCk7CisJCQlkZXZfZGJnKCZob3N0LT5jaGlwLT5wZGV2LT5kZXYsICJwb3dlciBvZmZcbiIpOworCQl9CisJCWJyZWFrOworCWNhc2UgTUVNU1RJQ0tfSU5URVJGQUNFOgorCQlob3N0X2N0bCAmPSB+KDMgPDwgSE9TVF9DT05UUk9MX0lGX1NISUZUKTsKKworCQlpZiAodmFsdWUgPT0gTUVNU1RJQ0tfU0VSSUFMKSB7CisJCQlob3N0X2N0bCAmPSB+SE9TVF9DT05UUk9MX0ZBU1RfQ0xLOworCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX0lGX1NFUklBTAorCQkJCSAgICA8PCBIT1NUX0NPTlRST0xfSUZfU0hJRlQ7CisJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfUkVJOworCQkJY2xvY2tfY3RsID0gQ0xPQ0tfQ09OVFJPTF80ME1IWjsKKwkJCWNsb2NrX2RlbGF5ID0gMDsKKwkJfSBlbHNlIGlmICh2YWx1ZSA9PSBNRU1TVElDS19QQVI0KSB7CisJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfRkFTVF9DTEs7CisJCQlob3N0X2N0bCB8PSBIT1NUX0NPTlRST0xfSUZfUEFSNAorCQkJCSAgICA8PCBIT1NUX0NPTlRST0xfSUZfU0hJRlQ7CisJCQlob3N0X2N0bCAmPSB+SE9TVF9DT05UUk9MX1JFSTsKKwkJCWNsb2NrX2N0bCA9IENMT0NLX0NPTlRST0xfNDBNSFo7CisJCQljbG9ja19kZWxheSA9IDQ7CisJCX0gZWxzZSBpZiAodmFsdWUgPT0gTUVNU1RJQ0tfUEFSOCkgeworCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX0ZBU1RfQ0xLOworCQkJaG9zdF9jdGwgfD0gSE9TVF9DT05UUk9MX0lGX1BBUjgKKwkJCQkgICAgPDwgSE9TVF9DT05UUk9MX0lGX1NISUZUOworCQkJaG9zdF9jdGwgJj0gfkhPU1RfQ09OVFJPTF9SRUk7CisJCQljbG9ja19jdGwgPSBDTE9DS19DT05UUk9MXzYwTUhaOworCQkJY2xvY2tfZGVsYXkgPSAwOworCQl9CisJCXdyaXRlbChob3N0X2N0bCwgaG9zdC0+YWRkciArIEhPU1RfQ09OVFJPTCk7CisJCXdyaXRlbChjbG9ja19jdGwsIGhvc3QtPmFkZHIgKyBDTE9DS19DT05UUk9MKTsKKwkJd3JpdGVsKGNsb2NrX2RlbGF5LCBob3N0LT5hZGRyICsgQ0xPQ0tfREVMQVkpOworCQlicmVhazsKKwl9OworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgam1iMzh4X21zX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBqbWIzOHhfbXMgKmptID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaW50IGNudDsKKworCWZvciAoY250ID0gMDsgY250IDwgam0tPmhvc3RfY250OyArK2NudCkgeworCQlpZiAoIWptLT5ob3N0c1tjbnRdKQorCQkJYnJlYWs7CisJCW1lbXN0aWNrX3N1c3BlbmRfaG9zdChqbS0+aG9zdHNbY250XSk7CisJfQorCisJcGNpX3NhdmVfc3RhdGUoZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgc3RhdGUpLCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgam1iMzh4X21zX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBqbWIzOHhfbXMgKmptID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJjOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4YWMsICZyYyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4YWMsIHJjIHwgMHgwMDQ3MDAwMCk7CisKKwlmb3IgKHJjID0gMDsgcmMgPCBqbS0+aG9zdF9jbnQ7ICsrcmMpIHsKKwkJaWYgKCFqbS0+aG9zdHNbcmNdKQorCQkJYnJlYWs7CisJCW1lbXN0aWNrX3Jlc3VtZV9ob3N0KGptLT5ob3N0c1tyY10pOworCQltZW1zdGlja19kZXRlY3RfY2hhbmdlKGptLT5ob3N0c1tyY10pOworCX0KKworCXJldHVybiAwOworfQorCisjZWxzZQorCisjZGVmaW5lIGptYjM4eF9tc19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgam1iMzh4X21zX3Jlc3VtZSBOVUxMCisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGludCBqbWIzOHhfbXNfY291bnRfc2xvdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGNudCwgcmMgPSAwOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBQQ0lfUk9NX1JFU09VUkNFOyArK2NudCkgeworCQlpZiAoIShJT1JFU09VUkNFX01FTSAmIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBjbnQpKSkKKwkJCWJyZWFrOworCisJCWlmICgyNTYgIT0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBjbnQpKQorCQkJYnJlYWs7CisKKwkJKytyYzsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3RydWN0IG1lbXN0aWNrX2hvc3QgKmptYjM4eF9tc19hbGxvY19ob3N0KHN0cnVjdCBqbWIzOHhfbXMgKmptLCBpbnQgY250KQoreworCXN0cnVjdCBtZW1zdGlja19ob3N0ICptc2g7CisJc3RydWN0IGptYjM4eF9tc19ob3N0ICpob3N0OworCisJbXNoID0gbWVtc3RpY2tfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IGptYjM4eF9tc19ob3N0KSwKKwkJCQkgICZqbS0+cGRldi0+ZGV2KTsKKwlpZiAoIW1zaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlob3N0ID0gbWVtc3RpY2tfcHJpdihtc2gpOworCWhvc3QtPmNoaXAgPSBqbTsKKwlob3N0LT5hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoam0tPnBkZXYsIGNudCksCisJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oam0tPnBkZXYsIGNudCkpOworCWlmICghaG9zdC0+YWRkcikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisJaG9zdC0+aWQgPSBjbnQ7CisJc25wcmludGYoaG9zdC0+aG9zdF9pZCwgREVWSUNFX0lEX1NJWkUsIERSSVZFUl9OQU1FICI6c2xvdCVkIiwKKwkJIGhvc3QtPmlkKTsKKwlob3N0LT5pcnEgPSBqbS0+cGRldi0+aXJxOworCWhvc3QtPnRpbWVvdXRfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJbXNoLT5yZXF1ZXN0ID0gam1iMzh4X21zX3JlcXVlc3Q7CisJbXNoLT5zZXRfcGFyYW0gPSBqbWIzOHhfbXNfc2V0X3BhcmFtOworCisJbXNoLT5jYXBzID0gTUVNU1RJQ0tfQ0FQX1BBUjQgfCBNRU1TVElDS19DQVBfUEFSODsKKworCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgam1iMzh4X21zX2Fib3J0LCAodW5zaWduZWQgbG9uZyltc2gpOworCisJaWYgKCFyZXF1ZXN0X2lycShob3N0LT5pcnEsIGptYjM4eF9tc19pc3IsIElSUUZfU0hBUkVELCBob3N0LT5ob3N0X2lkLAorCQkJIG1zaCkpCisJCXJldHVybiBtc2g7CisKKwlpb3VubWFwKGhvc3QtPmFkZHIpOworZXJyX291dF9mcmVlOgorCWtmcmVlKG1zaCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGptYjM4eF9tc19mcmVlX2hvc3Qoc3RydWN0IG1lbXN0aWNrX2hvc3QgKm1zaCkKK3sKKwlzdHJ1Y3Qgam1iMzh4X21zX2hvc3QgKmhvc3QgPSBtZW1zdGlja19wcml2KG1zaCk7CisKKwlmcmVlX2lycShob3N0LT5pcnEsIG1zaCk7CisJaW91bm1hcChob3N0LT5hZGRyKTsKKwltZW1zdGlja19mcmVlX2hvc3QobXNoKTsKK30KKworc3RhdGljIGludCBqbWIzOHhfbXNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBqbWIzOHhfbXMgKmptOworCWludCBwY2lfZGV2X2J1c3kgPSAwOworCWludCByYywgY250OworCisJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7CisJaWYgKHJjKSB7CisJCXBjaV9kZXZfYnVzeSA9IDE7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhhYywgJnJjKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4YWMsIHJjIHwgMHgwMDQ3MDAwMCk7CisKKwljbnQgPSBqbWIzOHhfbXNfY291bnRfc2xvdHMocGRldik7CisJaWYgKCFjbnQpIHsKKwkJcmMgPSAtRU5PREVWOworCQlwY2lfZGV2X2J1c3kgPSAxOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJam0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgam1iMzh4X21zKQorCQkgICAgICsgY250ICogc2l6ZW9mKHN0cnVjdCBtZW1zdGlja19ob3N0ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWptKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2ludDsKKwl9CisKKwlqbS0+cGRldiA9IHBkZXY7CisJam0tPmhvc3RfY250ID0gY250OworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBqbSk7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IGptLT5ob3N0X2NudDsgKytjbnQpIHsKKwkJam0tPmhvc3RzW2NudF0gPSBqbWIzOHhfbXNfYWxsb2NfaG9zdChqbSwgY250KTsKKwkJaWYgKCFqbS0+aG9zdHNbY250XSkKKwkJCWJyZWFrOworCisJCXJjID0gbWVtc3RpY2tfYWRkX2hvc3Qoam0tPmhvc3RzW2NudF0pOworCisJCWlmIChyYykgeworCQkJam1iMzh4X21zX2ZyZWVfaG9zdChqbS0+aG9zdHNbY250XSk7CisJCQlqbS0+aG9zdHNbY250XSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChjbnQpCisJCXJldHVybiAwOworCisJcmMgPSAtRU5PREVWOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGptKTsKK2Vycl9vdXRfaW50OgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfb3V0OgorCWlmICghcGNpX2Rldl9idXN5KQorCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBqbWIzOHhfbXNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGptYjM4eF9tcyAqam0gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgam1iMzh4X21zX2hvc3QgKmhvc3Q7CisJaW50IGNudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBqbS0+aG9zdF9jbnQ7ICsrY250KSB7CisJCWlmICgham0tPmhvc3RzW2NudF0pCisJCQlicmVhazsKKworCQlob3N0ID0gbWVtc3RpY2tfcHJpdihqbS0+aG9zdHNbY250XSk7CisKKwkJd3JpdGVsKDAsIGhvc3QtPmFkZHIgKyBJTlRfU0lHTkFMX0VOQUJMRSk7CisJCXdyaXRlbCgwLCBob3N0LT5hZGRyICsgSU5UX1NUQVRVU19FTkFCTEUpOworCQltbWlvd2IoKTsKKwkJZGV2X2RiZygmam0tPnBkZXYtPmRldiwgImludGVycnVwdHMgb2ZmXG4iKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGhvc3QtPnJlcSkgeworCQkJaG9zdC0+cmVxLT5lcnJvciA9IC1FVElNRTsKKwkJCWptYjM4eF9tc19jb21wbGV0ZV9jbWQoam0tPmhvc3RzW2NudF0sIDEpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCQltZW1zdGlja19yZW1vdmVfaG9zdChqbS0+aG9zdHNbY250XSk7CisJCWRldl9kYmcoJmptLT5wZGV2LT5kZXYsICJob3N0IHJlbW92ZWRcbiIpOworCisJCWptYjM4eF9tc19mcmVlX2hvc3Qoam0tPmhvc3RzW2NudF0pOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlrZnJlZShqbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBqbWIzOHhfbXNfaWRfdGJsIFtdID0geworCXsgUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX01TLCBQQ0lfQU5ZX0lELAorCSAgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGptYjM4eF9tc19kcml2ZXIgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPSBqbWIzOHhfbXNfaWRfdGJsLAorCS5wcm9iZSA9IGptYjM4eF9tc19wcm9iZSwKKwkucmVtb3ZlID0gam1iMzh4X21zX3JlbW92ZSwKKwkuc3VzcGVuZCA9IGptYjM4eF9tc19zdXNwZW5kLAorCS5yZXN1bWUgPSBqbWIzOHhfbXNfcmVzdW1lCit9OworCitzdGF0aWMgaW50IF9faW5pdCBqbWIzOHhfbXNfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZqbWIzOHhfbXNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGptYjM4eF9tc19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZqbWIzOHhfbXNfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiQWxleCBEdWJvdiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJKTWljcm9uIGptYjM4eCBNZW1vcnlTdGljayBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBqbWIzOHhfbXNfaWRfdGJsKTsKKworbW9kdWxlX2luaXQoam1iMzh4X21zX2luaXQpOworbW9kdWxlX2V4aXQoam1iMzh4X21zX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3RpZm1fbXMuYyBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC90aWZtX21zLmMKaW5kZXggNGZiMjQyMS4uODU3N2RlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3RpZm1fbXMuYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvdGlmbV9tcy5jCkBAIC0yMCwyOTMgKzIwLDMxNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJ0aWZtX21zIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xIgogCiBzdGF0aWMgaW50IG5vX2RtYTsKIG1vZHVsZV9wYXJhbShub19kbWEsIGJvb2wsIDA2NDQpOwogCi0jZGVmaW5lIFRJRk1fTVNfVElNRU9VVCAgICAgIDB4MDAxMDAKLSNkZWZpbmUgVElGTV9NU19CQURDUkMgICAgICAgMHgwMDIwMAotI2RlZmluZSBUSUZNX01TX0VPVFBDICAgICAgICAweDAxMDAwCi0jZGVmaW5lIFRJRk1fTVNfSU5UICAgICAgICAgIDB4MDIwMDAKKy8qCisgKiBTb21lIGNvbnRyb2wgYml0cyBvZiBUSUZNIGFwcGVhciB0byBjb25mb3JtIHRvIFNvbnkncyByZWZlcmVuY2UgZGVzaWduLAorICogc28gSSdtIGp1c3QgYXNzdW1pbmcgdGhleSBhbGwgYXJlLgorICovCiAKLS8qIFRoZSBtZWFuaW5nIG9mIHRoZSBiaXQgbWFqb3JpdHkgaW4gdGhpcyBjb25zdGFudCBpcyB1bmtub3duLiAqLwotI2RlZmluZSBUSUZNX01TX1NFUklBTCAgICAgICAweDA0MDEwCisjZGVmaW5lIFRJRk1fTVNfU1RBVF9EUlEgICAgIDB4MDQwMDAKKyNkZWZpbmUgVElGTV9NU19TVEFUX01TSU5UICAgMHgwMjAwMAorI2RlZmluZSBUSUZNX01TX1NUQVRfUkRZICAgICAweDAxMDAwCisjZGVmaW5lIFRJRk1fTVNfU1RBVF9DUkMgICAgIDB4MDAyMDAKKyNkZWZpbmUgVElGTV9NU19TVEFUX1RPRSAgICAgMHgwMDEwMAorI2RlZmluZSBUSUZNX01TX1NUQVRfRU1QICAgICAweDAwMDIwCisjZGVmaW5lIFRJRk1fTVNfU1RBVF9GVUwgICAgIDB4MDAwMTAKKyNkZWZpbmUgVElGTV9NU19TVEFUX0NFRCAgICAgMHgwMDAwOAorI2RlZmluZSBUSUZNX01TX1NUQVRfRVJSICAgICAweDAwMDA0CisjZGVmaW5lIFRJRk1fTVNfU1RBVF9CUlEgICAgIDB4MDAwMDIKKyNkZWZpbmUgVElGTV9NU19TVEFUX0NOSyAgICAgMHgwMDAwMQogCi0jZGVmaW5lIFRJRk1fTVNfU1lTX0xBVENIICAgIDB4MDAxMDAKLSNkZWZpbmUgVElGTV9NU19TWVNfTk9UX1JEWSAgMHgwMDgwMAotI2RlZmluZSBUSUZNX01TX1NZU19EQVRBICAgICAweDEwMDAwCisjZGVmaW5lIFRJRk1fTVNfU1lTX0RNQSAgICAgIDB4MTAwMDAKKyNkZWZpbmUgVElGTV9NU19TWVNfUkVTRVQgICAgMHgwODAwMAorI2RlZmluZSBUSUZNX01TX1NZU19TUkFDICAgICAweDA0MDAwCisjZGVmaW5lIFRJRk1fTVNfU1lTX0lOVEVOICAgIDB4MDIwMDAKKyNkZWZpbmUgVElGTV9NU19TWVNfTk9DUkMgICAgMHgwMTAwMAorI2RlZmluZSBUSUZNX01TX1NZU19JTlRDTFIgICAweDAwODAwCisjZGVmaW5lIFRJRk1fTVNfU1lTX01TSUVOICAgIDB4MDA0MDAKKyNkZWZpbmUgVElGTV9NU19TWVNfRkNMUiAgICAgMHgwMDIwMAorI2RlZmluZSBUSUZNX01TX1NZU19GRElSICAgICAweDAwMTAwCisjZGVmaW5lIFRJRk1fTVNfU1lTX0RBTSAgICAgIDB4MDAwODAKKyNkZWZpbmUgVElGTV9NU19TWVNfRFJNICAgICAgMHgwMDA0MAorI2RlZmluZSBUSUZNX01TX1NZU19EUlFTTCAgICAweDAwMDIwCisjZGVmaW5lIFRJRk1fTVNfU1lTX1JFSSAgICAgIDB4MDAwMTAKKyNkZWZpbmUgVElGTV9NU19TWVNfUkVPICAgICAgMHgwMDAwOAorI2RlZmluZSBUSUZNX01TX1NZU19CU1lfTUFTSyAweDAwMDA3CisKKyNkZWZpbmUgVElGTV9NU19TWVNfRklGTyAgICAgKFRJRk1fTVNfU1lTX0lOVEVOIHwgVElGTV9NU19TWVNfTVNJRU4gXAorCQkJICAgICAgfCBUSUZNX01TX1NZU19GQ0xSIHwgVElGTV9NU19TWVNfQlNZX01BU0spCiAKIC8qIEhhcmR3YXJlIGZsYWdzICovCiBlbnVtIHsKLQlDTURfUkVBRFkgID0gMHgwMDAxLAotCUZJRk9fUkVBRFkgPSAweDAwMDIsCi0JQ0FSRF9SRUFEWSA9IDB4MDAwNCwKLQlEQVRBX0NBUlJZID0gMHgwMDA4CisJQ01EX1JFQURZICA9IDB4MDEsCisJRklGT19SRUFEWSA9IDB4MDIsCisJQ0FSRF9JTlQgICA9IDB4MDQKIH07CiAKIHN0cnVjdCB0aWZtX21zIHsKIAlzdHJ1Y3QgdGlmbV9kZXYgICAgICAgICAqZGV2OwotCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGVqZWN0OjEsCi0JCQkJbm9fZG1hOjE7Ci0JdW5zaWduZWQgc2hvcnQgICAgICAgICAgY21kX2ZsYWdzOworCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOworCXN0cnVjdCBtZW1zdGlja19yZXF1ZXN0ICpyZXE7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgbW9kZV9tYXNrOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGJsb2NrX3BvczsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgICB0aW1lb3V0X2ppZmZpZXM7Ci0KLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICB0aW1lcjsKLQlzdHJ1Y3QgbWVtc3RpY2tfcmVxdWVzdCAqcmVxOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGVqZWN0OjEsCisJCQkJdXNlX2RtYToxOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGNtZF9mbGFnczsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICBpb19wb3M7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgaW9fd29yZDsKIH07CiAKLXN0YXRpYyB2b2lkIHRpZm1fbXNfcmVhZF9maWZvKHN0cnVjdCB0aWZtX21zICpob3N0LCB1bnNpZ25lZCBpbnQgZmlmb19vZmZzZXQsCi0JCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGcsIHVuc2lnbmVkIGludCBwYWdlX29mZiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgaW50IHRpZm1fbXNfcmVhZF9kYXRhKHN0cnVjdCB0aWZtX21zICpob3N0LAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgdGlmbV9kZXYgKnNvY2sgPSBob3N0LT5kZXY7Ci0JdW5zaWduZWQgaW50IGNudCA9IDAsIG9mZiA9IDA7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0ga21hcF9hdG9taWMocGcsIEtNX0JJT19EU1RfSVJRKSArIHBhZ2Vfb2ZmOworCXVuc2lnbmVkIGludCBvZmYgPSAwOwogCi0JaWYgKGhvc3QtPmNtZF9mbGFncyAmIERBVEFfQ0FSUlkpIHsKLQkJd2hpbGUgKChmaWZvX29mZnNldCAmIDMpICYmIGxlbmd0aCkgeworCXdoaWxlIChob3N0LT5pb19wb3MgJiYgbGVuZ3RoKSB7CisJCWJ1ZltvZmYrK10gPSBob3N0LT5pb193b3JkICYgMHhmZjsKKwkJaG9zdC0+aW9fd29yZCA+Pj0gODsKKwkJbGVuZ3RoLS07CisJCWhvc3QtPmlvX3Bvcy0tOworCX0KKworCWlmICghbGVuZ3RoKQorCQlyZXR1cm4gb2ZmOworCisJd2hpbGUgKCEoVElGTV9NU19TVEFUX0VNUCAmIHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX1NUQVRVUykpKSB7CisJCWlmIChsZW5ndGggPCA0KQorCQkJYnJlYWs7CisJCSoodW5zaWduZWQgaW50ICopKGJ1ZiArIG9mZikgPSBfX3Jhd19yZWFkbChzb2NrLT5hZGRyCisJCQkJCQkJICAgKyBTT0NLX01TX0RBVEEpOworCQlsZW5ndGggLT0gNDsKKwkJb2ZmICs9IDQ7CisJfQorCisJaWYgKGxlbmd0aAorCSAgICAmJiAhKFRJRk1fTVNfU1RBVF9FTVAgJiByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TVEFUVVMpKSkgeworCQlob3N0LT5pb193b3JkID0gcmVhZGwoc29jay0+YWRkciArIFNPQ0tfTVNfREFUQSk7CisJCWZvciAoaG9zdC0+aW9fcG9zID0gNDsgaG9zdC0+aW9fcG9zOyAtLWhvc3QtPmlvX3BvcykgewogCQkJYnVmW29mZisrXSA9IGhvc3QtPmlvX3dvcmQgJiAweGZmOwogCQkJaG9zdC0+aW9fd29yZCA+Pj0gODsKIAkJCWxlbmd0aC0tOwotCQkJZmlmb19vZmZzZXQrKzsKKwkJCWlmICghbGVuZ3RoKQorCQkJCWJyZWFrOwogCQl9Ci0JCWlmICghKGZpZm9fb2Zmc2V0ICYgMykpCi0JCQlob3N0LT5jbWRfZmxhZ3MgJj0gfkRBVEFfQ0FSUlk7Ci0JCWlmICghbGVuZ3RoKQotCQkJcmV0dXJuOwogCX0KIAotCWRvIHsKLQkJaG9zdC0+aW9fd29yZCA9IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX0ZJRk9fQUNDRVNTCi0JCQkJICAgICAgKyBmaWZvX29mZnNldCk7Ci0JCWNudCA9IDQ7Ci0JCXdoaWxlIChsZW5ndGggJiYgY250KSB7Ci0JCQlidWZbb2ZmKytdID0gKGhvc3QtPmlvX3dvcmQgPj4gOCkgJiAweGZmOwotCQkJY250LS07Ci0JCQlsZW5ndGgtLTsKLQkJfQotCQlmaWZvX29mZnNldCArPSA0IC0gY250OwotCX0gd2hpbGUgKGxlbmd0aCk7Ci0KLQlpZiAoY250KQotCQlob3N0LT5jbWRfZmxhZ3MgfD0gREFUQV9DQVJSWTsKLQotCWt1bm1hcF9hdG9taWMoYnVmIC0gcGFnZV9vZmYsIEtNX0JJT19EU1RfSVJRKTsKKwlyZXR1cm4gb2ZmOwogfQogCi1zdGF0aWMgdm9pZCB0aWZtX21zX3dyaXRlX2ZpZm8oc3RydWN0IHRpZm1fbXMgKmhvc3QsIHVuc2lnbmVkIGludCBmaWZvX29mZnNldCwKLQkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGcsIHVuc2lnbmVkIGludCBwYWdlX29mZiwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQorc3RhdGljIHVuc2lnbmVkIGludCB0aWZtX21zX3dyaXRlX2RhdGEoc3RydWN0IHRpZm1fbXMgKmhvc3QsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgdGlmbV9kZXYgKnNvY2sgPSBob3N0LT5kZXY7Ci0JdW5zaWduZWQgaW50IGNudCA9IDAsIG9mZiA9IDA7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0ga21hcF9hdG9taWMocGcsIEtNX0JJT19TUkNfSVJRKSArIHBhZ2Vfb2ZmOworCXVuc2lnbmVkIGludCBvZmYgPSAwOwogCi0JaWYgKGhvc3QtPmNtZF9mbGFncyAmIERBVEFfQ0FSUlkpIHsKLQkJd2hpbGUgKGZpZm9fb2Zmc2V0ICYgMykgewotCQkJaG9zdC0+aW9fd29yZCB8PSBidWZbb2ZmKytdIDw8ICg4ICogKGZpZm9fb2Zmc2V0ICYgMykpOworCWlmIChob3N0LT5pb19wb3MpIHsKKwkJd2hpbGUgKGhvc3QtPmlvX3BvcyA8IDQgJiYgbGVuZ3RoKSB7CisJCQlob3N0LT5pb193b3JkIHw9ICBidWZbb2ZmKytdIDw8IChob3N0LT5pb19wb3MgKiA4KTsKKwkJCWhvc3QtPmlvX3BvcysrOwogCQkJbGVuZ3RoLS07Ci0JCQlmaWZvX29mZnNldCsrOwogCQl9Ci0JCWlmICghKGZpZm9fb2Zmc2V0ICYgMykpIHsKLQkJCXdyaXRlbChob3N0LT5pb193b3JkLCBzb2NrLT5hZGRyICsgU09DS19GSUZPX0FDQ0VTUwotCQkJICAgICAgICsgZmlmb19vZmZzZXQgLSA0KTsKLQotCQkJaG9zdC0+Y21kX2ZsYWdzICY9IH5EQVRBX0NBUlJZOwotCQl9Ci0JCWlmICghbGVuZ3RoKQotCQkJcmV0dXJuOwogCX0KIAotCWRvIHsKLQkJY250ID0gNDsKKwlpZiAoaG9zdC0+aW9fcG9zID09IDQKKwkgICAgJiYgIShUSUZNX01TX1NUQVRfRlVMICYgcmVhZGwoc29jay0+YWRkciArIFNPQ0tfTVNfU1RBVFVTKSkpIHsKKwkJd3JpdGVsKFRJRk1fTVNfU1lTX0ZESVIgfCByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pLAorCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKKwkJd3JpdGVsKGhvc3QtPmlvX3dvcmQsIHNvY2stPmFkZHIgKyBTT0NLX01TX0RBVEEpOworCQlob3N0LT5pb19wb3MgPSAwOwogCQlob3N0LT5pb193b3JkID0gMDsKLQkJd2hpbGUgKGxlbmd0aCAmJiBjbnQpIHsKLQkJCWhvc3QtPmlvX3dvcmQgfD0gYnVmW29mZisrXSA8PCAoNCAtIGNudCk7Ci0JCQljbnQtLTsKLQkJCWxlbmd0aC0tOwotCQl9Ci0JCWZpZm9fb2Zmc2V0ICs9IDQgLSBjbnQ7Ci0JCWlmICghY250KQotCQkJd3JpdGVsKGhvc3QtPmlvX3dvcmQsIHNvY2stPmFkZHIgKyBTT0NLX0ZJRk9fQUNDRVNTCi0JCQkJCSAgICAgICsgZmlmb19vZmZzZXQgLSA0KTsKLQotCX0gd2hpbGUgKGxlbmd0aCk7Ci0KLQlpZiAoY250KQotCQlob3N0LT5jbWRfZmxhZ3MgfD0gREFUQV9DQVJSWTsKLQotCWt1bm1hcF9hdG9taWMoYnVmIC0gcGFnZV9vZmYsIEtNX0JJT19TUkNfSVJRKTsKLX0KLQotc3RhdGljIHZvaWQgdGlmbV9tc19tb3ZlX2Jsb2NrKHN0cnVjdCB0aWZtX21zICpob3N0LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotCXVuc2lnbmVkIGludCB0X3NpemU7Ci0JdW5zaWduZWQgaW50IG9mZiA9IGhvc3QtPnJlcS0+c2cub2Zmc2V0ICsgaG9zdC0+YmxvY2tfcG9zOwotCXVuc2lnbmVkIGludCBwX29mZiwgcF9jbnQ7Ci0Jc3RydWN0IHBhZ2UgKnBnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXZfZGJnKCZob3N0LT5kZXYtPmRldiwgIm1vdmluZyBibG9ja1xuIik7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRfc2l6ZSA9IGxlbmd0aDsKLQl3aGlsZSAodF9zaXplKSB7Ci0JCXBnID0gbnRoX3BhZ2Uoc2dfcGFnZSgmaG9zdC0+cmVxLT5zZyksIG9mZiA+PiBQQUdFX1NISUZUKTsKLQkJcF9vZmYgPSBvZmZzZXRfaW5fcGFnZShvZmYpOwotCQlwX2NudCA9IFBBR0VfU0laRSAtIHBfb2ZmOwotCQlwX2NudCA9IG1pbihwX2NudCwgdF9zaXplKTsKLQotCQlpZiAoaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBXUklURSkKLQkJCXRpZm1fbXNfd3JpdGVfZmlmbyhob3N0LCBsZW5ndGggLSB0X3NpemUsCi0JCQkJCSAgIHBnLCBwX29mZiwgcF9jbnQpOwotCQllbHNlCi0JCQl0aWZtX21zX3JlYWRfZmlmbyhob3N0LCBsZW5ndGggLSB0X3NpemUsCi0JCQkJCSAgcGcsIHBfb2ZmLCBwX2NudCk7Ci0KLQkJdF9zaXplIC09IHBfY250OworCX0gZWxzZSBpZiAoaG9zdC0+aW9fcG9zKSB7CisJCXJldHVybiBvZmY7CiAJfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCB0aWZtX21zX3RyYW5zZmVyX2RhdGEoc3RydWN0IHRpZm1fbXMgKmhvc3QsIGludCBza2lwKQotewotCXN0cnVjdCB0aWZtX2RldiAqc29jayA9IGhvc3QtPmRldjsKLQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gaG9zdC0+cmVxLT5zZy5sZW5ndGggLSBob3N0LT5ibG9ja19wb3M7CiAKIAlpZiAoIWxlbmd0aCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiBvZmY7CiAKLQlpZiAobGVuZ3RoID4gVElGTV9GSUZPX1NJWkUpCi0JCWxlbmd0aCA9IFRJRk1fRklGT19TSVpFOwotCi0JaWYgKCFza2lwKSB7Ci0JCXRpZm1fbXNfbW92ZV9ibG9jayhob3N0LCBsZW5ndGgpOwotCQlob3N0LT5ibG9ja19wb3MgKz0gbGVuZ3RoOworCXdoaWxlICghKFRJRk1fTVNfU1RBVF9GVUwgJiByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TVEFUVVMpKSkgeworCQlpZiAobGVuZ3RoIDwgNCkKKwkJCWJyZWFrOworCQl3cml0ZWwoVElGTV9NU19TWVNfRkRJUiB8IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSksCisJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOworCQlfX3Jhd193cml0ZWwoKih1bnNpZ25lZCBpbnQgKikoYnVmICsgb2ZmKSwKKwkJCSAgICAgc29jay0+YWRkciArIFNPQ0tfTVNfREFUQSk7CisJCWxlbmd0aCAtPSA0OworCQlvZmYgKz0gNDsKIAl9CiAKLQlpZiAoKGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gUkVBRCkKLQkgICAgJiYgKGhvc3QtPmJsb2NrX3BvcyA9PSBob3N0LT5yZXEtPnNnLmxlbmd0aCkpCi0JCXJldHVybiAxOworCXN3aXRjaCAobGVuZ3RoKSB7CisJY2FzZSAzOgorCQlob3N0LT5pb193b3JkIHw9IGJ1ZltvZmYgKyAyXSA8PCAxNjsKKwkJaG9zdC0+aW9fcG9zKys7CisJY2FzZSAyOgorCQlob3N0LT5pb193b3JkIHw9IGJ1ZltvZmYgKyAxXSA8PCA4OworCQlob3N0LT5pb19wb3MrKzsKKwljYXNlIDE6CisJCWhvc3QtPmlvX3dvcmQgfD0gYnVmW29mZl07CisJCWhvc3QtPmlvX3BvcysrOworCX0KIAotCXdyaXRlbChpbG9nMihsZW5ndGgpIC0gMiwgc29jay0+YWRkciArIFNPQ0tfRklGT19QQUdFX1NJWkUpOwotCWlmIChob3N0LT5yZXEtPmRhdGFfZGlyID09IFdSSVRFKQotCQl3cml0ZWwoKDEgPDwgOCkgfCBUSUZNX0RNQV9UWCwgc29jay0+YWRkciArIFNPQ0tfRE1BX0NPTlRST0wpOwotCWVsc2UKLQkJd3JpdGVsKCgxIDw8IDgpLCBzb2NrLT5hZGRyICsgU09DS19ETUFfQ09OVFJPTCk7CisJb2ZmICs9IGhvc3QtPmlvX3BvczsKIAotCXJldHVybiAwOworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGlmbV9tc190cmFuc2Zlcl9kYXRhKHN0cnVjdCB0aWZtX21zICpob3N0KQoreworCXN0cnVjdCB0aWZtX2RldiAqc29jayA9IGhvc3QtPmRldjsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBvZmY7CisJdW5zaWduZWQgaW50IHRfc2l6ZSwgcF9jbnQ7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXN0cnVjdCBwYWdlICpwZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCWlmIChob3N0LT5yZXEtPmxvbmdfZGF0YSkgeworCQlsZW5ndGggPSBob3N0LT5yZXEtPnNnLmxlbmd0aCAtIGhvc3QtPmJsb2NrX3BvczsKKwkJb2ZmID0gaG9zdC0+cmVxLT5zZy5vZmZzZXQgKyBob3N0LT5ibG9ja19wb3M7CisJfSBlbHNlIHsKKwkJbGVuZ3RoID0gaG9zdC0+cmVxLT5kYXRhX2xlbiAtIGhvc3QtPmJsb2NrX3BvczsKKwkJb2ZmID0gMDsKKwl9CisJZGV2X2RiZygmc29jay0+ZGV2LCAiZmlmbyBkYXRhIHRyYW5zZmVyLCAlZCwgJWRcbiIsIGxlbmd0aCwKKwkJaG9zdC0+YmxvY2tfcG9zKTsKKworCXdoaWxlIChsZW5ndGgpIHsKKwkJdW5zaWduZWQgaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHBfb2ZmKTsKKworCQlpZiAoaG9zdC0+cmVxLT5sb25nX2RhdGEpIHsKKwkJCXBnID0gbnRoX3BhZ2Uoc2dfcGFnZSgmaG9zdC0+cmVxLT5zZyksCisJCQkJICAgICAgb2ZmID4+IFBBR0VfU0hJRlQpOworCQkJcF9vZmYgPSBvZmZzZXRfaW5fcGFnZShvZmYpOworCQkJcF9jbnQgPSBQQUdFX1NJWkUgLSBwX29mZjsKKwkJCXBfY250ID0gbWluKHBfY250LCBsZW5ndGgpOworCisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlidWYgPSBrbWFwX2F0b21pYyhwZywgS01fQklPX1NSQ19JUlEpICsgcF9vZmY7CisJCX0gZWxzZSB7CisJCQlidWYgPSBob3N0LT5yZXEtPmRhdGEgKyBob3N0LT5ibG9ja19wb3M7CisJCQlwX2NudCA9IGhvc3QtPnJlcS0+ZGF0YV9sZW4gLSBob3N0LT5ibG9ja19wb3M7CisJCX0KKworCQl0X3NpemUgPSBob3N0LT5yZXEtPmRhdGFfZGlyID09IFdSSVRFCisJCQkgPyB0aWZtX21zX3dyaXRlX2RhdGEoaG9zdCwgYnVmLCBwX2NudCkKKwkJCSA6IHRpZm1fbXNfcmVhZF9kYXRhKGhvc3QsIGJ1ZiwgcF9jbnQpOworCisJCWlmIChob3N0LT5yZXEtPmxvbmdfZGF0YSkgeworCQkJa3VubWFwX2F0b21pYyhidWYgLSBwX29mZiwgS01fQklPX1NSQ19JUlEpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQl9CisKKwkJaWYgKCF0X3NpemUpCisJCQlicmVhazsKKwkJaG9zdC0+YmxvY2tfcG9zICs9IHRfc2l6ZTsKKwkJbGVuZ3RoIC09IHRfc2l6ZTsKKwkJb2ZmICs9IHRfc2l6ZTsKKwl9CisKKwlkZXZfZGJnKCZzb2NrLT5kZXYsICJmaWZvIGRhdGEgdHJhbnNmZXIsICVkIHJlbWFpbmluZ1xuIiwgbGVuZ3RoKTsKKwlpZiAoIWxlbmd0aCAmJiAoaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBXUklURSkpIHsKKwkJaWYgKGhvc3QtPmlvX3BvcykgeworCQkJd3JpdGVsKFRJRk1fTVNfU1lTX0ZESVIKKwkJCSAgICAgICB8IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSksCisJCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKKwkJCXdyaXRlbChob3N0LT5pb193b3JkLCBzb2NrLT5hZGRyICsgU09DS19NU19EQVRBKTsKKwkJfQorCQl3cml0ZWwoVElGTV9NU19TWVNfRkRJUgorCQkgICAgICAgfCByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pLAorCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKKwkJd3JpdGVsKDAsIHNvY2stPmFkZHIgKyBTT0NLX01TX0RBVEEpOworCX0gZWxzZSB7CisJCXJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX0RBVEEpOworCX0KKworCXJldHVybiBsZW5ndGg7CiB9CiAKIHN0YXRpYyBpbnQgdGlmbV9tc19pc3N1ZV9jbWQoc3RydWN0IHRpZm1fbXMgKmhvc3QpCiB7CiAJc3RydWN0IHRpZm1fZGV2ICpzb2NrID0gaG9zdC0+ZGV2OwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0JdW5zaWduZWQgaW50IGRhdGFfbGVuID0gMCwgY21kID0gMCwgY21kX21hc2sgPSAwLCBjbnQsIHR2YWwgPSAwOworCXVuc2lnbmVkIGludCBkYXRhX2xlbiwgY21kLCBzeXNfcGFyYW07CiAKIAlob3N0LT5jbWRfZmxhZ3MgPSAwOworCWhvc3QtPmJsb2NrX3BvcyA9IDA7CisJaG9zdC0+aW9fcG9zID0gMDsKKwlob3N0LT5pb193b3JkID0gMDsKKwlob3N0LT5jbWRfZmxhZ3MgPSAwOwogCi0JaWYgKGhvc3QtPnJlcS0+aW9fdHlwZSA9PSBNRU1TVElDS19JT19TRykgewotCQlpZiAoIWhvc3QtPm5vX2RtYSkgewotCQkJaWYgKDEgIT0gdGlmbV9tYXBfc2coc29jaywgJmhvc3QtPnJlcS0+c2csIDEsCi0JCQkJCSAgICAgaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBSRUFECi0JCQkJCSAgICAgPyBQQ0lfRE1BX0ZST01ERVZJQ0UKLQkJCQkJICAgICA6IFBDSV9ETUFfVE9ERVZJQ0UpKSB7Ci0JCQkJaG9zdC0+cmVxLT5lcnJvciA9IC1FTk9NRU07Ci0JCQkJcmV0dXJuIGhvc3QtPnJlcS0+ZXJyb3I7Ci0JCQl9Ci0JCQlkYXRhX2xlbiA9IHNnX2RtYV9sZW4oJmhvc3QtPnJlcS0+c2cpOwotCQl9IGVsc2UKLQkJCWRhdGFfbGVuID0gaG9zdC0+cmVxLT5zZy5sZW5ndGg7CisJZGF0YSA9IGhvc3QtPnJlcS0+ZGF0YTsKIAotCQl3cml0ZWwoVElGTV9GSUZPX0lOVF9TRVRBTEwsCi0JCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19ETUFfRklGT19JTlRfRU5BQkxFX0NMRUFSKTsKLQkJd3JpdGVsKFRJRk1fRklGT19FTkFCTEUsCi0JCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19GSUZPX0NPTlRST0wpOworCWhvc3QtPnVzZV9kbWEgPSAhbm9fZG1hOworCisJaWYgKGhvc3QtPnJlcS0+bG9uZ19kYXRhKSB7CisJCWRhdGFfbGVuID0gaG9zdC0+cmVxLT5zZy5sZW5ndGg7CisJCWlmICghaXNfcG93ZXJfb2ZfMihkYXRhX2xlbikpCisJCQlob3N0LT51c2VfZG1hID0gMDsKKwl9IGVsc2UgeworCQlkYXRhX2xlbiA9IGhvc3QtPnJlcS0+ZGF0YV9sZW47CisJCWhvc3QtPnVzZV9kbWEgPSAwOworCX0KKworCXdyaXRlbChUSUZNX0ZJRk9fSU5UX1NFVEFMTCwKKwkgICAgICAgc29jay0+YWRkciArIFNPQ0tfRE1BX0ZJRk9fSU5UX0VOQUJMRV9DTEVBUik7CisJd3JpdGVsKFRJRk1fRklGT19FTkFCTEUsCisJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0ZJRk9fQ09OVFJPTCk7CisKKwlpZiAoaG9zdC0+dXNlX2RtYSkgeworCQlpZiAoMSAhPSB0aWZtX21hcF9zZyhzb2NrLCAmaG9zdC0+cmVxLT5zZywgMSwKKwkJCQkgICAgIGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gUkVBRAorCQkJCSAgICAgPyBQQ0lfRE1BX0ZST01ERVZJQ0UKKwkJCQkgICAgIDogUENJX0RNQV9UT0RFVklDRSkpIHsKKwkJCWhvc3QtPnJlcS0+ZXJyb3IgPSAtRU5PTUVNOworCQkJcmV0dXJuIGhvc3QtPnJlcS0+ZXJyb3I7CisJCX0KKwkJZGF0YV9sZW4gPSBzZ19kbWFfbGVuKCZob3N0LT5yZXEtPnNnKTsKKworCQl3cml0ZWwoaWxvZzIoZGF0YV9sZW4pIC0gMiwKKwkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0ZJRk9fUEFHRV9TSVpFKTsKKwkJd3JpdGVsKFRJRk1fRklGT19JTlRNQVNLLAorCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfRE1BX0ZJRk9fSU5UX0VOQUJMRV9TRVQpOworCQlzeXNfcGFyYW0gPSBUSUZNX0RNQV9FTiB8ICgxIDw8IDgpOworCQlpZiAoaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBXUklURSkKKwkJCXN5c19wYXJhbSB8PSBUSUZNX0RNQV9UWDsKKwogCQl3cml0ZWwoVElGTV9GSUZPX0lOVE1BU0ssCiAJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19ETUFfRklGT19JTlRfRU5BQkxFX1NFVCk7CiAKLQkJaWYgKCFob3N0LT5ub19kbWEpIHsKLQkJCXdyaXRlbChpbG9nMihkYXRhX2xlbikgLSAyLAotCQkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0ZJRk9fUEFHRV9TSVpFKTsKLQkJCXdyaXRlbChzZ19kbWFfYWRkcmVzcygmaG9zdC0+cmVxLT5zZyksCi0JCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfRE1BX0FERFJFU1MpOwotCQkJaWYgKGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gV1JJVEUpCi0JCQkJd3JpdGVsKCgxIDw8IDgpIHwgVElGTV9ETUFfVFggfCBUSUZNX0RNQV9FTiwKLQkJCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfRE1BX0NPTlRST0wpOwotCQkJZWxzZQotCQkJCXdyaXRlbCgoMSA8PCA4KSB8IFRJRk1fRE1BX0VOLAotCQkJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19ETUFfQ09OVFJPTCk7Ci0JCX0gZWxzZSB7Ci0JCQl0aWZtX21zX3RyYW5zZmVyX2RhdGEoaG9zdCwKLQkJCQkJICAgICAgaG9zdC0+cmVxLT5kYXRhX2RpciA9PSBSRUFEKTsKLQkJfQorCQl3cml0ZWwoc2dfZG1hX2FkZHJlc3MoJmhvc3QtPnJlcS0+c2cpLAorCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfRE1BX0FERFJFU1MpOworCQl3cml0ZWwoc3lzX3BhcmFtLCBzb2NrLT5hZGRyICsgU09DS19ETUFfQ09OVFJPTCk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKGhvc3QtPm1vZGVfbWFzayB8IFRJRk1fTVNfU1lTX0ZJRk8sCisJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOwogCi0JCWNtZF9tYXNrID0gcmVhZGwoc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKLQkJY21kX21hc2sgfD0gVElGTV9NU19TWVNfREFUQSB8IFRJRk1fTVNfU1lTX05PVF9SRFk7Ci0JCXdyaXRlbChjbWRfbWFzaywgc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKLQl9IGVsc2UgaWYgKGhvc3QtPnJlcS0+aW9fdHlwZSA9PSBNRU1TVElDS19JT19WQUwpIHsKLQkJZGF0YSA9IGhvc3QtPnJlcS0+ZGF0YTsKLQkJZGF0YV9sZW4gPSBob3N0LT5yZXEtPmRhdGFfbGVuOwotCi0JCWNtZF9tYXNrID0gaG9zdC0+bW9kZV9tYXNrIHwgMHgyNjA3OyAvKiB1bmtub3duIGNvbnN0YW50ICovCi0KLQkJaWYgKGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gV1JJVEUpIHsKLQkJCWNtZF9tYXNrIHw9IFRJRk1fTVNfU1lTX0xBVENIOwotCQkJd3JpdGVsKGNtZF9tYXNrLCBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOwotCQkJZm9yIChjbnQgPSAwOyAoZGF0YV9sZW4gLSBjbnQpID49IDQ7IGNudCArPSA0KSB7Ci0JCQkJd3JpdGVsKFRJRk1fTVNfU1lTX0xBVENICi0JCQkJICAgICAgIHwgcmVhZGwoc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKSwKLQkJCQkgICAgICAgc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKLQkJCQlfX3Jhd193cml0ZWwoKih1bnNpZ25lZCBpbnQgKikoZGF0YSArIGNudCksCi0JCQkJCSAgICAgc29jay0+YWRkciArIFNPQ0tfTVNfREFUQSk7Ci0JCQkJZGV2X2RiZygmc29jay0+ZGV2LCAid3JpdGluZyAleFxuIiwKLQkJCQkJKihpbnQgKikoZGF0YSArIGNudCkpOwotCQkJfQotCQkJc3dpdGNoIChkYXRhX2xlbiAtIGNudCkgewotCQkJY2FzZSAzOgotCQkJCXR2YWwgfD0gZGF0YVtjbnQgKyAyXSA8PCAxNjsKLQkJCWNhc2UgMjoKLQkJCQl0dmFsIHw9IGRhdGFbY250ICsgMV0gPDwgODsKLQkJCWNhc2UgMToKLQkJCQl0dmFsIHw9IGRhdGFbY250XTsKLQkJCQl3cml0ZWwoVElGTV9NU19TWVNfTEFUQ0gKLQkJCQkgICAgICAgfCByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pLAotCQkJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOwotCQkJCXdyaXRlbCh0dmFsLCBzb2NrLT5hZGRyICsgU09DS19NU19EQVRBKTsKLQkJCQlkZXZfZGJnKCZzb2NrLT5kZXYsICJ3cml0aW5nICV4XG4iLCB0dmFsKTsKLQkJCX0KLQotCQkJd3JpdGVsKFRJRk1fTVNfU1lTX0xBVENICi0JCQkgICAgICAgfCByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pLAotCQkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSk7Ci0JCQl3cml0ZWwoMCwgc29jay0+YWRkciArIFNPQ0tfTVNfREFUQSk7Ci0JCQlkZXZfZGJnKCZzb2NrLT5kZXYsICJ3cml0aW5nICV4XG4iLCAwKTsKLQotCQl9IGVsc2UKLQkJCXdyaXRlbChjbWRfbWFzaywgc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKLQotCQljbWRfbWFzayA9IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSk7Ci0JCWNtZF9tYXNrICY9IH5USUZNX01TX1NZU19EQVRBOwotCQljbWRfbWFzayB8PSBUSUZNX01TX1NZU19OT1RfUkRZOwotCQlkZXZfZGJnKCZzb2NrLT5kZXYsICJtYXNrICV4XG4iLCBjbWRfbWFzayk7Ci0JCXdyaXRlbChjbWRfbWFzaywgc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKTsKLQl9IGVsc2UKLQkJQlVHKCk7CisJCXdyaXRlbChUSUZNX0ZJRk9fTU9SRSwKKwkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0RNQV9GSUZPX0lOVF9FTkFCTEVfU0VUKTsKKwl9CiAKIAltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgaG9zdC0+dGltZW91dF9qaWZmaWVzKTsKIAl3cml0ZWwoVElGTV9DVFJMX0xFRCB8IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX0NPTlRST0wpLAogCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19DT05UUk9MKTsKIAlob3N0LT5yZXEtPmVycm9yID0gMDsKIAorCXN5c19wYXJhbSA9IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSk7CisJc3lzX3BhcmFtIHw9IFRJRk1fTVNfU1lTX0lOVENMUjsKKworCWlmIChob3N0LT51c2VfZG1hKQorCQlzeXNfcGFyYW0gfD0gVElGTV9NU19TWVNfRE1BOworCWVsc2UKKwkJc3lzX3BhcmFtICY9IH5USUZNX01TX1NZU19ETUE7CisKKwl3cml0ZWwoc3lzX3BhcmFtLCBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOworCiAJY21kID0gKGhvc3QtPnJlcS0+dHBjICYgMHhmKSA8PCAxMjsKIAljbWQgfD0gZGF0YV9sZW47CiAJd3JpdGVsKGNtZCwgc29jay0+YWRkciArIFNPQ0tfTVNfQ09NTUFORCk7CiAKLQlkZXZfZGJnKCZzb2NrLT5kZXYsICJleGVjdXRpbmcgVFBDICV4LCAleFxuIiwgY21kLCBjbWRfbWFzayk7CisJZGV2X2RiZygmc29jay0+ZGV2LCAiZXhlY3V0aW5nIFRQQyAleCwgJXhcbiIsIGNtZCwgc3lzX3BhcmFtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE0LDQ3ICszMzgsMjkgQEAKIHsKIAlzdHJ1Y3QgdGlmbV9kZXYgKnNvY2sgPSBob3N0LT5kZXY7CiAJc3RydWN0IG1lbXN0aWNrX2hvc3QgKm1zaCA9IHRpZm1fZ2V0X2RydmRhdGEoc29jayk7Ci0JdW5zaWduZWQgaW50IHR2YWwgPSAwLCBkYXRhX2xlbjsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwogCWludCByYzsKIAogCWRlbF90aW1lcigmaG9zdC0+dGltZXIpOwotCWlmIChob3N0LT5yZXEtPmlvX3R5cGUgPT0gTUVNU1RJQ0tfSU9fU0cpIHsKLQkJaWYgKCFob3N0LT5ub19kbWEpCi0JCQl0aWZtX3VubWFwX3NnKHNvY2ssICZob3N0LT5yZXEtPnNnLCAxLAotCQkJCSAgICAgIGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gUkVBRAotCQkJCSAgICAgID8gUENJX0RNQV9GUk9NREVWSUNFCi0JCQkJICAgICAgOiBQQ0lfRE1BX1RPREVWSUNFKTsKLQl9IGVsc2UgaWYgKGhvc3QtPnJlcS0+aW9fdHlwZSA9PSBNRU1TVElDS19JT19WQUwpIHsKLQkJd3JpdGVsKH5USUZNX01TX1NZU19EQVRBICYgcmVhZGwoc29jay0+YWRkciArIFNPQ0tfTVNfU1lTVEVNKSwKLQkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSk7CiAKLQkJZGF0YSA9IGhvc3QtPnJlcS0+ZGF0YTsKLQkJZGF0YV9sZW4gPSBob3N0LT5yZXEtPmRhdGFfbGVuOworCWhvc3QtPnJlcS0+aW50X3JlZyA9IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX1NUQVRVUykgJiAweGZmOworCWhvc3QtPnJlcS0+aW50X3JlZyA9IChob3N0LT5yZXEtPmludF9yZWcgJiAxKQorCQkJICAgICB8ICgoaG9zdC0+cmVxLT5pbnRfcmVnIDw8IDQpICYgMHhlMCk7CiAKLQkJaWYgKGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gUkVBRCkgewotCQkJZm9yIChyYyA9IDA7IChkYXRhX2xlbiAtIHJjKSA+PSA0OyByYyArPSA0KQotCQkJCSooaW50ICopKGRhdGEgKyByYykKLQkJCQkJPSBfX3Jhd19yZWFkbChzb2NrLT5hZGRyCi0JCQkJCQkgICAgICArIFNPQ0tfTVNfREFUQSk7CisJd3JpdGVsKFRJRk1fRklGT19JTlRfU0VUQUxMLAorCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19ETUFfRklGT19JTlRfRU5BQkxFX0NMRUFSKTsKKwl3cml0ZWwoVElGTV9ETUFfUkVTRVQsIHNvY2stPmFkZHIgKyBTT0NLX0RNQV9DT05UUk9MKTsKIAotCQkJaWYgKGRhdGFfbGVuIC0gcmMpCi0JCQkJdHZhbCA9IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX0RBVEEpOwotCQkJc3dpdGNoIChkYXRhX2xlbiAtIHJjKSB7Ci0JCQljYXNlIDM6Ci0JCQkJZGF0YVtyYyArIDJdID0gKHR2YWwgPj4gMTYpICYgMHhmZjsKLQkJCWNhc2UgMjoKLQkJCQlkYXRhW3JjICsgMV0gPSAodHZhbCA+PiA4KSAmIDB4ZmY7Ci0JCQljYXNlIDE6Ci0JCQkJZGF0YVtyY10gPSB0dmFsICYgMHhmZjsKLQkJCX0KLQkJCXJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX0RBVEEpOwotCQl9CisJaWYgKGhvc3QtPnVzZV9kbWEpIHsKKwkJdGlmbV91bm1hcF9zZyhzb2NrLCAmaG9zdC0+cmVxLT5zZywgMSwKKwkJCSAgICAgIGhvc3QtPnJlcS0+ZGF0YV9kaXIgPT0gUkVBRAorCQkJICAgICAgPyBQQ0lfRE1BX0ZST01ERVZJQ0UKKwkJCSAgICAgIDogUENJX0RNQV9UT0RFVklDRSk7CiAJfQogCiAJd3JpdGVsKCh+VElGTV9DVFJMX0xFRCkgJiByZWFkbChzb2NrLT5hZGRyICsgU09DS19DT05UUk9MKSwKIAkgICAgICAgc29jay0+YWRkciArIFNPQ0tfQ09OVFJPTCk7CiAKKwlkZXZfZGJnKCZzb2NrLT5kZXYsICJUUEMgY29tcGxldGVcbiIpOwogCWRvIHsKIAkJcmMgPSBtZW1zdGlja19uZXh0X3JlcShtc2gsICZob3N0LT5yZXEpOwogCX0gd2hpbGUgKCFyYyAmJiB0aWZtX21zX2lzc3VlX2NtZChob3N0KSk7CkBAIC0zNjUsMTEgKzM3MSwxMCBAQAogCWlmICghaG9zdC0+cmVxLT5lcnJvcikgewogCQlpZiAoIShob3N0LT5jbWRfZmxhZ3MgJiBDTURfUkVBRFkpKQogCQkJcmV0dXJuIDE7Ci0JCWlmICgoaG9zdC0+cmVxLT5pb190eXBlID09IE1FTVNUSUNLX0lPX1NHKQotCQkgICAgJiYgIShob3N0LT5jbWRfZmxhZ3MgJiBGSUZPX1JFQURZKSkKKwkJaWYgKCEoaG9zdC0+Y21kX2ZsYWdzICYgRklGT19SRUFEWSkpCiAJCQlyZXR1cm4gMTsKIAkJaWYgKGhvc3QtPnJlcS0+bmVlZF9jYXJkX2ludAotCQkgICAgJiYgIShob3N0LT5jbWRfZmxhZ3MgJiBDQVJEX1JFQURZKSkKKwkJICAgICYmICEoaG9zdC0+Y21kX2ZsYWdzICYgQ0FSRF9JTlQpKQogCQkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtMzc5LDE4ICszODQsMjQgQEAKIHN0YXRpYyB2b2lkIHRpZm1fbXNfZGF0YV9ldmVudChzdHJ1Y3QgdGlmbV9kZXYgKnNvY2spCiB7CiAJc3RydWN0IHRpZm1fbXMgKmhvc3Q7Ci0JdW5zaWduZWQgaW50IGZpZm9fc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgZmlmb19zdGF0dXMgPSAwLCBob3N0X3N0YXR1cyA9IDA7CiAJaW50IHJjID0gMTsKIAogCXNwaW5fbG9jaygmc29jay0+bG9jayk7CiAJaG9zdCA9IG1lbXN0aWNrX3ByaXYoKHN0cnVjdCBtZW1zdGlja19ob3N0ICopdGlmbV9nZXRfZHJ2ZGF0YShzb2NrKSk7CiAJZmlmb19zdGF0dXMgPSByZWFkbChzb2NrLT5hZGRyICsgU09DS19ETUFfRklGT19TVEFUVVMpOwotCWRldl9kYmcoJnNvY2stPmRldiwgImRhdGEgZXZlbnQ6IGZpZm9fc3RhdHVzICV4LCBmbGFncyAleFxuIiwKLQkJZmlmb19zdGF0dXMsIGhvc3QtPmNtZF9mbGFncyk7CisJaG9zdF9zdGF0dXMgPSByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TVEFUVVMpOworCWRldl9kYmcoJnNvY2stPmRldiwKKwkJImRhdGEgZXZlbnQ6IGZpZm9fc3RhdHVzICV4LCBob3N0X3N0YXR1cyAleCwgZmxhZ3MgJXhcbiIsCisJCWZpZm9fc3RhdHVzLCBob3N0X3N0YXR1cywgaG9zdC0+Y21kX2ZsYWdzKTsKIAogCWlmIChob3N0LT5yZXEpIHsKLQkJaWYgKGZpZm9fc3RhdHVzICYgVElGTV9GSUZPX1JFQURZKSB7Ci0JCQlpZiAoIWhvc3QtPm5vX2RtYSB8fCB0aWZtX21zX3RyYW5zZmVyX2RhdGEoaG9zdCwgMCkpIHsKKwkJaWYgKGhvc3QtPnVzZV9kbWEgJiYgKGZpZm9fc3RhdHVzICYgMSkpIHsKKwkJCWhvc3QtPmNtZF9mbGFncyB8PSBGSUZPX1JFQURZOworCQkJcmMgPSB0aWZtX21zX2NoZWNrX3N0YXR1cyhob3N0KTsKKwkJfQorCQlpZiAoIWhvc3QtPnVzZV9kbWEgJiYgKGZpZm9fc3RhdHVzICYgVElGTV9GSUZPX01PUkUpKSB7CisJCQlpZiAoIXRpZm1fbXNfdHJhbnNmZXJfZGF0YShob3N0KSkgewogCQkJCWhvc3QtPmNtZF9mbGFncyB8PSBGSUZPX1JFQURZOwogCQkJCXJjID0gdGlmbV9tc19jaGVja19zdGF0dXMoaG9zdCk7CiAJCQl9CkBAIC00MTksMjkgKzQzMCwyMiBAQAogCQlob3N0X3N0YXR1cywgaG9zdC0+Y21kX2ZsYWdzKTsKIAogCWlmIChob3N0LT5yZXEpIHsKLQkJaWYgKGhvc3Rfc3RhdHVzICYgVElGTV9NU19USU1FT1VUKQorCQlpZiAoaG9zdF9zdGF0dXMgJiBUSUZNX01TX1NUQVRfVE9FKQogCQkJaG9zdC0+cmVxLT5lcnJvciA9IC1FVElNRTsKLQkJZWxzZSBpZiAoaG9zdF9zdGF0dXMgJiBUSUZNX01TX0JBRENSQykKKwkJZWxzZSBpZiAoaG9zdF9zdGF0dXMgJiBUSUZNX01TX1NUQVRfQ1JDKQogCQkJaG9zdC0+cmVxLT5lcnJvciA9IC1FSUxTRVE7CiAKLQkJaWYgKGhvc3QtPnJlcS0+ZXJyb3IpIHsKLQkJCXdyaXRlbChUSUZNX0ZJRk9fSU5UX1NFVEFMTCwKLQkJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19ETUFfRklGT19JTlRfRU5BQkxFX0NMRUFSKTsKLQkJCXdyaXRlbChUSUZNX0RNQV9SRVNFVCwgc29jay0+YWRkciArIFNPQ0tfRE1BX0NPTlRST0wpOwotCQl9Ci0KLQkJaWYgKGhvc3Rfc3RhdHVzICYgVElGTV9NU19FT1RQQykKKwkJaWYgKGhvc3Rfc3RhdHVzICYgVElGTV9NU19TVEFUX1JEWSkKIAkJCWhvc3QtPmNtZF9mbGFncyB8PSBDTURfUkVBRFk7Ci0JCWlmIChob3N0X3N0YXR1cyAmIFRJRk1fTVNfSU5UKQotCQkJaG9zdC0+Y21kX2ZsYWdzIHw9IENBUkRfUkVBRFk7CisKKwkJaWYgKGhvc3Rfc3RhdHVzICYgVElGTV9NU19TVEFUX01TSU5UKQorCQkJaG9zdC0+Y21kX2ZsYWdzIHw9IENBUkRfSU5UOwogCiAJCXJjID0gdGlmbV9tc19jaGVja19zdGF0dXMoaG9zdCk7CiAKIAl9CiAKLQl3cml0ZWwoVElGTV9NU19TWVNfTk9UX1JEWSB8IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSksCi0JICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSk7Ci0Jd3JpdGVsKCh+VElGTV9NU19TWVNfREFUQSkgJiByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pLAorCXdyaXRlbChUSUZNX01TX1NZU19JTlRDTFIgfCByZWFkbChzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pLAogCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOwogCiAJaWYgKCFyYykKQEAgLTQ5NywxNSArNTAxLDI2IEBACiAKIAlzd2l0Y2ggKHBhcmFtKSB7CiAJY2FzZSBNRU1TVElDS19QT1dFUjoKLQkJLyogdGhpcyBpcyBzZXQgYnkgY2FyZCBkZXRlY3Rpb24gbWVjaGFuaXNtICovCisJCS8qIGFsc28gYWZmZWN0ZWQgYnkgbWVkaWEgZGV0ZWN0aW9uIG1lY2hhbmlzbSAqLworCQlpZiAodmFsdWUgPT0gTUVNU1RJQ0tfUE9XRVJfT04pIHsKKwkJCWhvc3QtPm1vZGVfbWFzayA9IFRJRk1fTVNfU1lTX1NSQUMgfCBUSUZNX01TX1NZU19SRUk7CisJCQl3cml0ZWwoVElGTV9NU19TWVNfUkVTRVQsIHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSk7CisJCQl3cml0ZWwoVElGTV9NU19TWVNfRkNMUiB8IFRJRk1fTVNfU1lTX0lOVENMUiwKKwkJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOworCQkJd3JpdGVsKDB4ZmZmZmZmZmYsIHNvY2stPmFkZHIgKyBTT0NLX01TX1NUQVRVUyk7CisJCX0gZWxzZSBpZiAodmFsdWUgPT0gTUVNU1RJQ0tfUE9XRVJfT0ZGKSB7CisJCQl3cml0ZWwoVElGTV9NU19TWVNfRkNMUiB8IFRJRk1fTVNfU1lTX0lOVENMUiwKKwkJCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOworCQkJd3JpdGVsKDB4ZmZmZmZmZmYsIHNvY2stPmFkZHIgKyBTT0NLX01TX1NUQVRVUyk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBNRU1TVElDS19JTlRFUkZBQ0U6CiAJCWlmICh2YWx1ZSA9PSBNRU1TVElDS19TRVJJQUwpIHsKLQkJCWhvc3QtPm1vZGVfbWFzayA9IFRJRk1fTVNfU0VSSUFMOworCQkJaG9zdC0+bW9kZV9tYXNrID0gVElGTV9NU19TWVNfU1JBQyB8IFRJRk1fTVNfU1lTX1JFSTsKIAkJCXdyaXRlbCgoflRJRk1fQ1RSTF9GQVNUX0NMSykKIAkJCSAgICAgICAmIHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX0NPTlRST0wpLAogCQkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0NPTlRST0wpOwotCQl9IGVsc2UgaWYgKHZhbHVlID09IE1FTVNUSUNLX1BBUkFMTEVMKSB7CisJCX0gZWxzZSBpZiAodmFsdWUgPT0gTUVNU1RJQ0tfUEFSNCkgewogCQkJaG9zdC0+bW9kZV9tYXNrID0gMDsKIAkJCXdyaXRlbChUSUZNX0NUUkxfRkFTVF9DTEsKIAkJCSAgICAgICB8IHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX0NPTlRST0wpLApAQCAtNTMyLDIxICs1NDcsNiBAQAogCXRpZm1fZWplY3QoaG9zdC0+ZGV2KTsKIH0KIAotc3RhdGljIGludCB0aWZtX21zX2luaXRpYWxpemVfaG9zdChzdHJ1Y3QgdGlmbV9tcyAqaG9zdCkKLXsKLQlzdHJ1Y3QgdGlmbV9kZXYgKnNvY2sgPSBob3N0LT5kZXY7Ci0Jc3RydWN0IG1lbXN0aWNrX2hvc3QgKm1zaCA9IHRpZm1fZ2V0X2RydmRhdGEoc29jayk7Ci0KLQlob3N0LT5tb2RlX21hc2sgPSBUSUZNX01TX1NFUklBTDsKLQl3cml0ZWwoMHg4MDAwLCBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOwotCXdyaXRlbCgweDAyMDAgfCBUSUZNX01TX1NZU19OT1RfUkRZLCBzb2NrLT5hZGRyICsgU09DS19NU19TWVNURU0pOwotCXdyaXRlbCgweGZmZmZmZmZmLCBzb2NrLT5hZGRyICsgU09DS19NU19TVEFUVVMpOwotCWlmICh0aWZtX2hhc19tc19waWYoc29jaykpCi0JCW1zaC0+Y2FwcyB8PSBNRU1TVElDS19DQVBfUEFSQUxMRUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB0aWZtX21zX3Byb2JlKHN0cnVjdCB0aWZtX2RldiAqc29jaykKIHsKIAlzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqbXNoOwpAQCAtNTY4LDcgKzU2OCw2IEBACiAJdGlmbV9zZXRfZHJ2ZGF0YShzb2NrLCBtc2gpOwogCWhvc3QtPmRldiA9IHNvY2s7CiAJaG9zdC0+dGltZW91dF9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcygxMDAwKTsKLQlob3N0LT5ub19kbWEgPSBub19kbWE7CiAKIAlzZXR1cF90aW1lcigmaG9zdC0+dGltZXIsIHRpZm1fbXNfYWJvcnQsICh1bnNpZ25lZCBsb25nKWhvc3QpOwogCkBAIC01NzYsMTAgKzU3NSwxMCBAQAogCW1zaC0+c2V0X3BhcmFtID0gdGlmbV9tc19zZXRfcGFyYW07CiAJc29jay0+Y2FyZF9ldmVudCA9IHRpZm1fbXNfY2FyZF9ldmVudDsKIAlzb2NrLT5kYXRhX2V2ZW50ID0gdGlmbV9tc19kYXRhX2V2ZW50OwotCXJjID0gdGlmbV9tc19pbml0aWFsaXplX2hvc3QoaG9zdCk7CisJaWYgKHRpZm1faGFzX21zX3BpZihzb2NrKSkKKwkJbXNoLT5jYXBzIHw9IE1FTVNUSUNLX0NBUF9QQVI0OwogCi0JaWYgKCFyYykKLQkJcmMgPSBtZW1zdGlja19hZGRfaG9zdChtc2gpOworCXJjID0gbWVtc3RpY2tfYWRkX2hvc3QobXNoKTsKIAlpZiAoIXJjKQogCQlyZXR1cm4gMDsKIApAQCAtNjAxLDcgKzYwMCw3IEBACiAJCXdyaXRlbChUSUZNX0ZJRk9fSU5UX1NFVEFMTCwKIAkJICAgICAgIHNvY2stPmFkZHIgKyBTT0NLX0RNQV9GSUZPX0lOVF9FTkFCTEVfQ0xFQVIpOwogCQl3cml0ZWwoVElGTV9ETUFfUkVTRVQsIHNvY2stPmFkZHIgKyBTT0NLX0RNQV9DT05UUk9MKTsKLQkJaWYgKChob3N0LT5yZXEtPmlvX3R5cGUgPT0gTUVNU1RJQ0tfSU9fU0cpICYmICFob3N0LT5ub19kbWEpCisJCWlmIChob3N0LT51c2VfZG1hKQogCQkJdGlmbV91bm1hcF9zZyhzb2NrLCAmaG9zdC0+cmVxLT5zZywgMSwKIAkJCQkgICAgICBob3N0LT5yZXEtPmRhdGFfZGlyID09IFJFQUQKIAkJCQkgICAgICA/IFBDSV9ETUFfVE9ERVZJQ0UKQEAgLTYxNywxMCArNjE2LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NrLT5sb2NrLCBmbGFncyk7CiAKIAltZW1zdGlja19yZW1vdmVfaG9zdChtc2gpOwotCi0Jd3JpdGVsKDB4MDIwMCB8IFRJRk1fTVNfU1lTX05PVF9SRFksIHNvY2stPmFkZHIgKyBTT0NLX01TX1NZU1RFTSk7Ci0Jd3JpdGVsKDB4ZmZmZmZmZmYsIHNvY2stPmFkZHIgKyBTT0NLX01TX1NUQVRVUyk7Ci0KIAltZW1zdGlja19mcmVlX2hvc3QobXNoKTsKIH0KIApAQCAtNjI4LDE3ICs2MjMsMTcgQEAKIAogc3RhdGljIGludCB0aWZtX21zX3N1c3BlbmQoc3RydWN0IHRpZm1fZGV2ICpzb2NrLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IG1lbXN0aWNrX2hvc3QgKm1zaCA9IHRpZm1fZ2V0X2RydmRhdGEoc29jayk7CisKKwltZW1zdGlja19zdXNwZW5kX2hvc3QobXNoKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0aWZtX21zX3Jlc3VtZShzdHJ1Y3QgdGlmbV9kZXYgKnNvY2spCiB7CiAJc3RydWN0IG1lbXN0aWNrX2hvc3QgKm1zaCA9IHRpZm1fZ2V0X2RydmRhdGEoc29jayk7Ci0Jc3RydWN0IHRpZm1fbXMgKmhvc3QgPSBtZW1zdGlja19wcml2KG1zaCk7CiAKLQl0aWZtX21zX2luaXRpYWxpemVfaG9zdChob3N0KTsKLQltZW1zdGlja19kZXRlY3RfY2hhbmdlKG1zaCk7Ci0KKwltZW1zdGlja19yZXN1bWVfaG9zdChtc2gpOwogCXJldHVybiAwOwogfQogCkBAIC02NzksNyArNjc0LDYgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiVEkgRmxhc2hNZWRpYSBNZW1vcnlTdGljayBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodGlmbSwgdGlmbV9tc19pZF90YmwpOwotTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogCiBtb2R1bGVfaW5pdCh0aWZtX21zX2luaXQpOwogbW9kdWxlX2V4aXQodGlmbV9tc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggYmZkYTczMS4uZGIzYzg5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTc5LDcgKzc5LDcgQEAKIC8qCiAgKiAgY21kIGxpbmUgcGFyYW1ldGVycwogICovCi1zdGF0aWMgaW50IG1wdF9tc2lfZW5hYmxlOworc3RhdGljIGludCBtcHRfbXNpX2VuYWJsZSA9IC0xOwogbW9kdWxlX3BhcmFtKG1wdF9tc2lfZW5hYmxlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtcHRfbXNpX2VuYWJsZSwgIiBNU0kgU3VwcG9ydCBFbmFibGUgKGRlZmF1bHQ9MCkiKTsKIApAQCAtNjMyLDggKzYzMiw3IEBACiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgotICoJbXB0X2V2ZW50X3JlZ2lzdGVyIC0gUmVnaXN0ZXIgcHJvdG9jb2wtc3BlY2lmaWMgZXZlbnQgY2FsbGJhY2sKLSAqCWhhbmRsZXIuCisgKgltcHRfZXZlbnRfcmVnaXN0ZXIgLSBSZWdpc3RlciBwcm90b2NvbC1zcGVjaWZpYyBldmVudCBjYWxsYmFjayBoYW5kbGVyLgogICoJQGNiX2lkeDogcHJldmlvdXNseSByZWdpc3RlcmVkICh2aWEgbXB0X3JlZ2lzdGVyKSBjYWxsYmFjayBoYW5kbGUKICAqCUBldl9jYmZ1bmM6IGNhbGxiYWNrIGZ1bmN0aW9uCiAgKgpAQCAtNjU0LDggKzY1Myw3IEBACiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgotICoJbXB0X2V2ZW50X2RlcmVnaXN0ZXIgLSBEZXJlZ2lzdGVyIHByb3RvY29sLXNwZWNpZmljIGV2ZW50IGNhbGxiYWNrCi0gKgloYW5kbGVyLgorICoJbXB0X2V2ZW50X2RlcmVnaXN0ZXIgLSBEZXJlZ2lzdGVyIHByb3RvY29sLXNwZWNpZmljIGV2ZW50IGNhbGxiYWNrIGhhbmRsZXIKICAqCUBjYl9pZHg6IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjayBoYW5kbGUKICAqCiAgKglFYWNoIHByb3RvY29sLXNwZWNpZmljIGRyaXZlciBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUKQEAgLTc2NSwxMSArNzYzLDEzIEBACiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgotICoJbXB0X2dldF9tc2dfZnJhbWUgLSBPYnRhaW4gYSBNUFQgcmVxdWVzdCBmcmFtZSBmcm9tIHRoZSBwb29sIChvZiAxMDI0KQotICoJYWxsb2NhdGVkIHBlciBNUFQgYWRhcHRlci4KKyAqCW1wdF9nZXRfbXNnX2ZyYW1lIC0gT2J0YWluIGFuIE1QVCByZXF1ZXN0IGZyYW1lIGZyb20gdGhlIHBvb2wKICAqCUBjYl9pZHg6IEhhbmRsZSBvZiByZWdpc3RlcmVkIE1QVCBwcm90b2NvbCBkcml2ZXIKICAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUIGFkYXB0ZXIgc3RydWN0dXJlCiAgKgorICoJT2J0YWluIGFuIE1QVCByZXF1ZXN0IGZyYW1lIGZyb20gdGhlIHBvb2wgKG9mIDEwMjQpIHRoYXQgYXJlCisgKglhbGxvY2F0ZWQgcGVyIE1QVCBhZGFwdGVyLgorICoKICAqCVJldHVybnMgcG9pbnRlciB0byBhIE1QVCByZXF1ZXN0IGZyYW1lIG9yICVOVUxMIGlmIG5vbmUgYXJlIGF2YWlsYWJsZQogICoJb3IgSU9DIGlzIG5vdCBhY3RpdmUuCiAgKi8KQEAgLTgzNCwxMyArODM0LDEyIEBACiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgotICoJbXB0X3B1dF9tc2dfZnJhbWUgLSBTZW5kIGEgcHJvdG9jb2wgc3BlY2lmaWMgTVBUIHJlcXVlc3QgZnJhbWUKLSAqCXRvIGEgSU9DLgorICoJbXB0X3B1dF9tc2dfZnJhbWUgLSBTZW5kIGEgcHJvdG9jb2wtc3BlY2lmaWMgTVBUIHJlcXVlc3QgZnJhbWUgdG8gYW4gSU9DCiAgKglAY2JfaWR4OiBIYW5kbGUgb2YgcmVnaXN0ZXJlZCBNUFQgcHJvdG9jb2wgZHJpdmVyCiAgKglAaW9jOiBQb2ludGVyIHRvIE1QVCBhZGFwdGVyIHN0cnVjdHVyZQogICoJQG1mOiBQb2ludGVyIHRvIE1QVCByZXF1ZXN0IGZyYW1lCiAgKgotICoJVGhpcyByb3V0aW5lIHBvc3RzIGEgTVBUIHJlcXVlc3QgZnJhbWUgdG8gdGhlIHJlcXVlc3QgcG9zdCBGSUZPIG9mIGEKKyAqCVRoaXMgcm91dGluZSBwb3N0cyBhbiBNUFQgcmVxdWVzdCBmcmFtZSB0byB0aGUgcmVxdWVzdCBwb3N0IEZJRk8gb2YgYQogICoJc3BlY2lmaWMgTVBUIGFkYXB0ZXIuCiAgKi8KIHZvaWQKQEAgLTg2OCwxMyArODY3LDE1IEBACiB9CiAKIC8qKgotICoJbXB0X3B1dF9tc2dfZnJhbWVfaGlfcHJpIC0gU2VuZCBhIHByb3RvY29sIHNwZWNpZmljIE1QVCByZXF1ZXN0IGZyYW1lCi0gKgl0byBhIElPQyB1c2luZyBoaSBwcmlvcml0eSByZXF1ZXN0IHF1ZXVlLgorICoJbXB0X3B1dF9tc2dfZnJhbWVfaGlfcHJpIC0gU2VuZCBhIGhpLXByaSBwcm90b2NvbC1zcGVjaWZpYyBNUFQgcmVxdWVzdCBmcmFtZQogICoJQGNiX2lkeDogSGFuZGxlIG9mIHJlZ2lzdGVyZWQgTVBUIHByb3RvY29sIGRyaXZlcgogICoJQGlvYzogUG9pbnRlciB0byBNUFQgYWRhcHRlciBzdHJ1Y3R1cmUKICAqCUBtZjogUG9pbnRlciB0byBNUFQgcmVxdWVzdCBmcmFtZQogICoKLSAqCVRoaXMgcm91dGluZSBwb3N0cyBhIE1QVCByZXF1ZXN0IGZyYW1lIHRvIHRoZSByZXF1ZXN0IHBvc3QgRklGTyBvZiBhCisgKglTZW5kIGEgcHJvdG9jb2wtc3BlY2lmaWMgTVBUIHJlcXVlc3QgZnJhbWUgdG8gYW4gSU9DIHVzaW5nCisgKgloaS1wcmlvcml0eSByZXF1ZXN0IHF1ZXVlLgorICoKKyAqCVRoaXMgcm91dGluZSBwb3N0cyBhbiBNUFQgcmVxdWVzdCBmcmFtZSB0byB0aGUgcmVxdWVzdCBwb3N0IEZJRk8gb2YgYQogICoJc3BlY2lmaWMgTVBUIGFkYXB0ZXIuCiAgKiovCiB2b2lkCkBAIC0xNDI5LDYgKzE0MzAsOTggQEAKIAkJc3ByaW50Zihwcm9kX25hbWUsICIlcyIsIHByb2R1Y3Rfc3RyKTsKIH0KIAorLyoqCisgKgltcHRfbWFwcmVzb3VyY2VzIC0gbWFwIGluIG1lbW9yeSBtYXBwZWQgaW8KKyAqCUBpb2M6IFBvaW50ZXIgdG8gcG9pbnRlciB0byBJT0MgYWRhcHRlcgorICoKKyAqKi8KK3N0YXRpYyBpbnQKK21wdF9tYXByZXNvdXJjZXMoTVBUX0FEQVBURVIgKmlvYykKK3sKKwl1OAkJX19pb21lbSAqbWVtOworCWludAkJIGlpOworCXVuc2lnbmVkIGxvbmcJIG1lbV9waHlzOworCXVuc2lnbmVkIGxvbmcJIHBvcnQ7CisJdTMyCQkgbXNpemU7CisJdTMyCQkgcHNpemU7CisJdTgJCSByZXZpc2lvbjsKKwlpbnQJCSByID0gLUVOT0RFVjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCXBkZXYgPSBpb2MtPnBjaWRldjsKKwlpb2MtPmJhcnMgPSBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0pOworCWlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHsKKwkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVCAicGNpX2VuYWJsZV9kZXZpY2VfbWVtKCkgIgorCQkgICAgImZhaWxlZFxuIiwgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIHI7CisJfQorCWlmIChwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGlvYy0+YmFycywgIm1wdCIpKSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoKSB3aXRoICIKKwkJICAgICJNRU0gZmFpbGVkXG4iLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gcjsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXZpc2lvbik7CisKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spCisJICAgICYmICFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSB7CisJCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKKwkJICAgICI6IDY0IEJJVCBQQ0kgQlVTIERNQSBBRERSRVNTSU5HIFNVUFBPUlRFRFxuIiwKKwkJICAgIGlvYy0+bmFtZSkpOworCX0gZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spCisJICAgICYmICFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKKwkJICAgICI6IDMyIEJJVCBQQ0kgQlVTIERNQSBBRERSRVNTSU5HIFNVUFBPUlRFRFxuIiwKKwkJICAgIGlvYy0+bmFtZSkpOworCX0gZWxzZSB7CisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJubyBzdWl0YWJsZSBETUEgbWFzayBmb3IgJXNcbiIsCisJCSAgICBpb2MtPm5hbWUsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMpOworCQlyZXR1cm4gcjsKKwl9CisKKwltZW1fcGh5cyA9IG1zaXplID0gMDsKKwlwb3J0ID0gcHNpemUgPSAwOworCWZvciAoaWkgPSAwOyBpaSA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaWkrKykgeworCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGlpKSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKKwkJCWlmIChwc2l6ZSkKKwkJCQljb250aW51ZTsKKwkJCS8qIEdldCBJL08gc3BhY2UhICovCisJCQlwb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGlpKTsKKwkJCXBzaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpaSk7CisJCX0gZWxzZSB7CisJCQlpZiAobXNpemUpCisJCQkJY29udGludWU7CisJCQkvKiBHZXQgbWVtbWFwICovCisJCQltZW1fcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpaSk7CisJCQltc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaWkpOworCQl9CisJfQorCWlvYy0+bWVtX3NpemUgPSBtc2l6ZTsKKworCW1lbSA9IE5VTEw7CisJLyogR2V0IGxvZ2ljYWwgcHRyIGZvciBQY2lNZW0wIHNwYWNlICovCisJLyptZW0gPSBpb3JlbWFwKG1lbV9waHlzLCBtc2l6ZSk7Ki8KKwltZW0gPSBpb3JlbWFwKG1lbV9waHlzLCBtc2l6ZSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgIjogRVJST1IgLSBVbmFibGUgdG8gbWFwIGFkYXB0ZXIiCisJCQkiIG1lbW9yeSFcbiIsIGlvYy0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpb2MtPm1lbW1hcCA9IG1lbTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0lORk9fRk1UICJtZW0gPSAlcCwgbWVtX3BoeXMgPSAlbHhcbiIsCisJICAgIGlvYy0+bmFtZSwgbWVtLCBtZW1fcGh5cykpOworCisJaW9jLT5tZW1fcGh5cyA9IG1lbV9waHlzOworCWlvYy0+Y2hpcCA9IChTWVNJRl9SRUdTIF9faW9tZW0gKiltZW07CisKKwkvKiBTYXZlIFBvcnQgSU8gdmFsdWVzIGluIGNhc2Ugd2UgbmVlZCB0byBkbyBkb3dubG9hZGJvb3QgKi8KKwlpb2MtPnBpb19tZW1fcGh5cyA9IHBvcnQ7CisJaW9jLT5waW9fY2hpcCA9IChTWVNJRl9SRUdTIF9faW9tZW0gKilwb3J0OworCisJcmV0dXJuIDA7Cit9CisKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgogICoJbXB0X2F0dGFjaCAtIEluc3RhbGwgYSBQQ0kgaW50ZWxsaWdlbnQgTVBUIGFkYXB0ZXIuCkBAIC0xNDUxLDEzICsxNTQ0LDYgQEAKIG1wdF9hdHRhY2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlNUFRfQURBUFRFUgkqaW9jOwotCXU4CQlfX2lvbWVtICptZW07Ci0JdTgJCV9faW9tZW0gKnBtZW07Ci0JdW5zaWduZWQgbG9uZwkgbWVtX3BoeXM7Ci0JdW5zaWduZWQgbG9uZwkgcG9ydDsKLQl1MzIJCSBtc2l6ZTsKLQl1MzIJCSBwc2l6ZTsKLQlpbnQJCSBpaTsKIAl1OAkJIGNiX2lkeDsKIAlpbnQJCSByID0gLUVOT0RFVjsKIAl1OAkJIHJldmlzaW9uOwpAQCAtMTQ2Nyw1MiArMTU1MywzMiBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGVudCwgKmVudDsKICNlbmRpZgogCi0JaWYgKG1wdF9kZWJ1Z19sZXZlbCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBNWU5BTSAiOiBtcHRfZGVidWdfbGV2ZWw9JXhoXG4iLCBtcHRfZGVidWdfbGV2ZWwpOwotCiAJaW9jID0ga3phbGxvYyhzaXplb2YoTVBUX0FEQVBURVIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoaW9jID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIE1ZTkFNICI6IEVSUk9SIC0gSW5zdWZmaWNpZW50IG1lbW9yeSB0byBhZGQgYWRhcHRlciFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaW9jLT5kZWJ1Z19sZXZlbCA9IG1wdF9kZWJ1Z19sZXZlbDsKKwogCWlvYy0+aWQgPSBtcHRfaWRzKys7CiAJc3ByaW50Zihpb2MtPm5hbWUsICJpb2MlZCIsIGlvYy0+aWQpOwogCi0JaW9jLT5iYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7Ci0JCWtmcmVlKGlvYyk7Ci0JCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgInBjaV9lbmFibGVfZGV2aWNlX21lbSgpICIKLQkJICAgICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7Ci0JCXJldHVybiByOwotCX0KLQlpZiAocGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMsICJtcHQiKSkgewotCQlrZnJlZShpb2MpOwotCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKCkgd2l0aCAiCi0JCSAgICAgICAiTUVNIGZhaWxlZFxuIiwgaW9jLT5uYW1lKTsKLQkJcmV0dXJuIHI7Ci0JfQorCS8qCisJICogc2V0IGluaXRpYWwgZGVidWcgbGV2ZWwKKwkgKiAocmVmZXIgdG8gbXB0ZGVidWcuaCkKKwkgKgorCSAqLworCWlvYy0+ZGVidWdfbGV2ZWwgPSBtcHRfZGVidWdfbGV2ZWw7CisJaWYgKG1wdF9kZWJ1Z19sZXZlbCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXB0X2RlYnVnX2xldmVsPSV4aFxuIiwgbXB0X2RlYnVnX2xldmVsKTsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIjogbXB0X2FkYXB0ZXJfaW5zdGFsbFxuIiwgaW9jLT5uYW1lKSk7CiAKLQlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSB7Ci0JCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAotCQkJIjogNjQgQklUIFBDSSBCVVMgRE1BIEFERFJFU1NJTkcgU1VQUE9SVEVEXG4iLCBpb2MtPm5hbWUpKTsKLQl9IGVsc2UgaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7Ci0JCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICI6IDMyIEJJVCBQQ0kgQlVTIERNQSBBRERSRVNTSU5HIE5PVCBTVVBQT1JURURcbiIsCi0JCSAgICBpb2MtPm5hbWUpOworCWlvYy0+cGNpZGV2ID0gcGRldjsKKwlpZiAobXB0X21hcHJlc291cmNlcyhpb2MpKSB7CiAJCWtmcmVlKGlvYyk7CiAJCXJldHVybiByOwogCX0KIAotCWlmICghcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgewotCQlkcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkJCSI6IFVzaW5nIDY0IGJpdCBjb25zaXN0ZW50IG1hc2tcbiIsIGlvYy0+bmFtZSkpOwotCX0gZWxzZSB7Ci0JCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAotCQkJIjogTm90IHVzaW5nIDY0IGJpdCBjb25zaXN0ZW50IG1hc2tcbiIsIGlvYy0+bmFtZSkpOwotCX0KLQogCWlvYy0+YWxsb2NfdG90YWwgPSBzaXplb2YoTVBUX0FEQVBURVIpOwogCWlvYy0+cmVxX3N6ID0gTVBUX0RFRkFVTFRfRlJBTUVfU0laRTsJCS8qIGF2b2lkIGRpdiBieSB6ZXJvISAqLwogCWlvYy0+cmVwbHlfc3ogPSBNUFRfUkVQTFlfRlJBTUVfU0laRTsKQEAgLTE1NTAsNDggKzE2MTYsOSBAQAogCS8qIEZpbmQgbG9va3VwIHNsb3QuICovCiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+bGlzdCk7CiAKLQltZW1fcGh5cyA9IG1zaXplID0gMDsKLQlwb3J0ID0gcHNpemUgPSAwOwotCWZvciAoaWk9MDsgaWkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGlpKyspIHsKLQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpaSkgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7Ci0JCQlpZiAocHNpemUpCi0JCQkJY29udGludWU7Ci0JCQkvKiBHZXQgSS9PIHNwYWNlISAqLwotCQkJcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpaSk7Ci0JCQlwc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldixpaSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobXNpemUpCi0JCQkJY29udGludWU7Ci0JCQkvKiBHZXQgbWVtbWFwICovCi0JCQltZW1fcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpaSk7Ci0JCQltc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldixpaSk7Ci0JCX0KLQl9Ci0JaW9jLT5tZW1fc2l6ZSA9IG1zaXplOwotCi0JbWVtID0gTlVMTDsKLQkvKiBHZXQgbG9naWNhbCBwdHIgZm9yIFBjaU1lbTAgc3BhY2UgKi8KLQkvKm1lbSA9IGlvcmVtYXAobWVtX3BoeXMsIG1zaXplKTsqLwotCW1lbSA9IGlvcmVtYXAobWVtX3BoeXMsIG1zaXplKTsKLQlpZiAobWVtID09IE5VTEwpIHsKLQkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVCAiVW5hYmxlIHRvIG1hcCBhZGFwdGVyIG1lbW9yeSFcbiIsIGlvYy0+bmFtZSk7Ci0JCWtmcmVlKGlvYyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpb2MtPm1lbW1hcCA9IG1lbTsKLQlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0lORk9fRk1UICJtZW0gPSAlcCwgbWVtX3BoeXMgPSAlbHhcbiIsIGlvYy0+bmFtZSwgbWVtLCBtZW1fcGh5cykpOwotCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAiZmFjdHMgQCAlcCwgcGZhY3RzWzBdIEAgJXBcbiIsCiAJICAgIGlvYy0+bmFtZSwgJmlvYy0+ZmFjdHMsICZpb2MtPnBmYWN0c1swXSkpOwogCi0JaW9jLT5tZW1fcGh5cyA9IG1lbV9waHlzOwotCWlvYy0+Y2hpcCA9IChTWVNJRl9SRUdTIF9faW9tZW0gKiltZW07Ci0KLQkvKiBTYXZlIFBvcnQgSU8gdmFsdWVzIGluIGNhc2Ugd2UgbmVlZCB0byBkbyBkb3dubG9hZGJvb3QgKi8KLQlpb2MtPnBpb19tZW1fcGh5cyA9IHBvcnQ7Ci0JcG1lbSA9ICh1OCBfX2lvbWVtICopcG9ydDsKLQlpb2MtPnBpb19jaGlwID0gKFNZU0lGX1JFR1MgX19pb21lbSAqKXBtZW07Ci0KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXZpc2lvbik7CiAJbXB0X2dldF9wcm9kdWN0X25hbWUocGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHJldmlzaW9uLCBpb2MtPnByb2RfbmFtZSk7CiAKQEAgLTE2NTksNiArMTY4NiwxMSBAQAogCQlpb2MtPmJ1c190eXBlID0gU0FTOwogCX0KIAorCWlmIChpb2MtPmJ1c190eXBlID09IFNBUyAmJiBtcHRfbXNpX2VuYWJsZSA9PSAtMSkKKwkJaW9jLT5tc2lfZW5hYmxlID0gMTsKKwllbHNlCisJCWlvYy0+bXNpX2VuYWJsZSA9IG1wdF9tc2lfZW5hYmxlOworCiAJaWYgKGlvYy0+ZXJyYXRhX2ZsYWdfMTA2NCkKIAkJcGNpX2Rpc2FibGVfaW9fYWNjZXNzKHBkZXYpOwogCkBAIC0xNjg3LDcgKzE3MTksOSBAQAogCQlsaXN0X2RlbCgmaW9jLT5saXN0KTsKIAkJaWYgKGlvYy0+YWx0X2lvYykKIAkJCWlvYy0+YWx0X2lvYy0+YWx0X2lvYyA9IE5VTEw7Ci0JCWlvdW5tYXAobWVtKTsKKwkJaW91bm1hcChpb2MtPm1lbW1hcCk7CisJCWlmIChyICE9IC01KQorCQkJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMpOwogCQlrZnJlZShpb2MpOwogCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJCXJldHVybiByOwpAQCAtMTc4MywxMyArMTgxNywxMCBAQAogCXUzMiBkZXZpY2Vfc3RhdGU7CiAJTVBUX0FEQVBURVIgKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldmljZV9zdGF0ZT1wY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKTsKLQotCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCi0JInBjaS1zdXNwZW5kOiBwZGV2PTB4JXAsIHNsb3Q9JXMsIEVudGVyaW5nIG9wZXJhdGluZyBzdGF0ZSBbRCVkXVxuIiwKLQkJaW9jLT5uYW1lLCBwZGV2LCBwY2lfbmFtZShwZGV2KSwgZGV2aWNlX3N0YXRlKTsKLQotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWRldmljZV9zdGF0ZSA9IHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpOworCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJwY2ktc3VzcGVuZDogcGRldj0weCVwLCBzbG90PSVzLCBFbnRlcmluZyAiCisJICAgICJvcGVyYXRpbmcgc3RhdGUgW0QlZF1cbiIsIGlvYy0+bmFtZSwgcGRldiwgcGNpX25hbWUocGRldiksCisJICAgIGRldmljZV9zdGF0ZSk7CiAKIAkvKiBwdXQgaW9jIGludG8gUkVBRFlfU1RBVEUgKi8KIAlpZihTZW5kSW9jUmVzZXQoaW9jLCBNUElfRlVOQ1RJT05fSU9DX01FU1NBR0VfVU5JVF9SRVNFVCwgQ0FOX1NMRUVQKSkgewpAQCAtMTgwNCwxMCArMTgzNSwxNCBAQAogCS8qIENsZWFyIGFueSBsaW5nZXJpbmcgaW50ZXJydXB0ICovCiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkludFN0YXR1cywgMCk7CiAKKwlmcmVlX2lycShpb2MtPnBjaV9pcnEsIGlvYyk7CisJaWYgKGlvYy0+bXNpX2VuYWJsZSkKKwkJcGNpX2Rpc2FibGVfbXNpKGlvYy0+cGNpZGV2KTsKKwlpb2MtPnBjaV9pcnEgPSAtMTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgZGV2aWNlX3N0YXRlKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xODIyLDQ4ICsxODU3LDU0IEBACiAJTVBUX0FEQVBURVIgKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl1MzIgZGV2aWNlX3N0YXRlID0gcGRldi0+Y3VycmVudF9zdGF0ZTsKIAlpbnQgcmVjb3Zlcnlfc3RhdGU7CisJaW50IGVycjsKIAotCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCi0JInBjaS1yZXN1bWU6IHBkZXY9MHglcCwgc2xvdD0lcywgUHJldmlvdXMgb3BlcmF0aW5nIHN0YXRlIFtEJWRdXG4iLAotCQlpb2MtPm5hbWUsIHBkZXYsIHBjaV9uYW1lKHBkZXYpLCBkZXZpY2Vfc3RhdGUpOworCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJwY2ktcmVzdW1lOiBwZGV2PTB4JXAsIHNsb3Q9JXMsIFByZXZpb3VzICIKKwkgICAgIm9wZXJhdGluZyBzdGF0ZSBbRCVkXVxuIiwgaW9jLT5uYW1lLCBwZGV2LCBwY2lfbmFtZShwZGV2KSwKKwkgICAgZGV2aWNlX3N0YXRlKTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCWlmIChpb2MtPmZhY3RzLkZsYWdzICYgTVBJX0lPQ0ZBQ1RTX0ZMQUdTX0ZXX0RPV05MT0FEX0JPT1QpIHsKLQkJaW9jLT5iYXJzID0gcGNpX3NlbGVjdF9iYXJzKGlvYy0+cGNpZGV2LCBJT1JFU09VUkNFX01FTSB8Ci0JCQlJT1JFU09VUkNFX0lPKTsKLQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJaW9jLT5iYXJzID0gcGNpX3NlbGVjdF9iYXJzKHBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKLQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkKLQkJCXJldHVybiAwOworCWlvYy0+cGNpZGV2ID0gcGRldjsKKwllcnIgPSBtcHRfbWFwcmVzb3VyY2VzKGlvYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJwY2ktcmVzdW1lOiBpb2Mtc3RhdGU9MHgleCxkb29yYmVsbD0weCV4XG4iLAorCSAgICBpb2MtPm5hbWUsIChtcHRfR2V0SW9jU3RhdGUoaW9jLCAxKSA+PiBNUElfSU9DX1NUQVRFX1NISUZUKSwKKwkgICAgQ0hJUFJFR19SRUFEMzIoJmlvYy0+Y2hpcC0+RG9vcmJlbGwpKTsKKworCS8qCisJICogRXJyYXRhIHdvcmthcm91bmQgZm9yIFNBUyBwY2kgZXhwcmVzczoKKwkgKiBVcG9uIHJldHVybmluZyB0byB0aGUgRDAgc3RhdGUsIHRoZSBjb250ZW50cyBvZiB0aGUgZG9vcmJlbGwgd2lsbCBiZQorCSAqIHN0YWxlIGRhdGEsIGFuZCB0aGlzIHdpbGwgaW5jb3JyZWN0bHkgc2lnbmFsIHRvIHRoZSBob3N0IGRyaXZlciB0aGF0CisJICogdGhlIGZpcm13YXJlIGlzIHJlYWR5IHRvIHByb2Nlc3MgbXB0IGNvbW1hbmRzLiAgIFRoZSB3b3JrYXJvdW5kIGlzCisJICogdG8gaXNzdWUgYSBkaWFnbm9zdGljIHJlc2V0LgorCSAqLworCWlmIChpb2MtPmJ1c190eXBlID09IFNBUyAmJiAocGRldi0+ZGV2aWNlID09CisJICAgIE1QSV9NQU5VRkFDVFBBR0VfREVWSURfU0FTMTA2OEUgfHwgcGRldi0+ZGV2aWNlID09CisJICAgIE1QSV9NQU5VRkFDVFBBR0VfREVWSURfU0FTMTA2NEUpKSB7CisJCWlmIChLaWNrU3RhcnQoaW9jLCAxLCBDQU5fU0xFRVApIDwgMCkgeworCQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgInBjaS1yZXN1bWU6IENhbm5vdCByZWNvdmVyXG4iLAorCQkJICAgIGlvYy0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQogCX0KLQlpZiAocGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBpb2MtPmJhcnMsICJtcHQiKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCUNISVBSRUdfV1JJVEUzMigmaW9jLT5jaGlwLT5JbnRNYXNrLCBNUElfSElNX0RJTSk7Ci0JaW9jLT5hY3RpdmUgPSAxOwotCi0JcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkJInBjaS1yZXN1bWU6IGlvYy1zdGF0ZT0weCV4LGRvb3JiZWxsPTB4JXhcbiIsCi0JCWlvYy0+bmFtZSwKLQkJKG1wdF9HZXRJb2NTdGF0ZShpb2MsIDEpID4+IE1QSV9JT0NfU1RBVEVfU0hJRlQpLAotCQlDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5Eb29yYmVsbCkpOwogCiAJLyogYnJpbmcgaW9jIHRvIG9wZXJhdGlvbmFsIHN0YXRlICovCi0JaWYgKChyZWNvdmVyeV9zdGF0ZSA9IG1wdF9kb19pb2NfcmVjb3ZlcnkoaW9jLAotCSAgICBNUFRfSE9TVEVWRU5UX0lPQ19SRUNPVkVSLCBDQU5fU0xFRVApKSAhPSAwKSB7CisJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIlNlbmRpbmcgbXB0X2RvX2lvY19yZWNvdmVyeVxuIiwgaW9jLT5uYW1lKTsKKwlyZWNvdmVyeV9zdGF0ZSA9IG1wdF9kb19pb2NfcmVjb3ZlcnkoaW9jLCBNUFRfSE9TVEVWRU5UX0lPQ19CUklOR1VQLAorCQkJCQkJIENBTl9TTEVFUCk7CisJaWYgKHJlY292ZXJ5X3N0YXRlICE9IDApCisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJwY2ktcmVzdW1lOiBDYW5ub3QgcmVjb3ZlciwgIgorCQkgICAgImVycm9yOlsleF1cbiIsIGlvYy0+bmFtZSwgcmVjb3Zlcnlfc3RhdGUpOworCWVsc2UKIAkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkJCSJwY2ktcmVzdW1lOiBDYW5ub3QgcmVjb3ZlciwgZXJyb3I6WyV4XVxuIiwKLQkJCWlvYy0+bmFtZSwgcmVjb3Zlcnlfc3RhdGUpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCi0JCQkicGNpLXJlc3VtZTogc3VjY2Vzc1xuIiwgaW9jLT5uYW1lKTsKLQl9Ci0KKwkJICAgICJwY2ktcmVzdW1lOiBzdWNjZXNzXG4iLCBpb2MtPm5hbWUpOworIG91dDoKIAlyZXR1cm4gMDsKKwogfQogI2VuZGlmCiAKQEAgLTE5MDIsNiArMTk0Myw3IEBACiAgKgkJLTMgaWYgUkVBRFkgYnV0IFByaW1lSU9DRmlmb3MgRmFpbGVkCiAgKgkJLTQgaWYgUkVBRFkgYnV0IElPQ0luaXQgRmFpbGVkCiAgKgkJLTUgaWYgZmFpbGVkIHRvIGVuYWJsZV9kZXZpY2UgYW5kL29yIHJlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucworICoJCS02IGlmIGZhaWxlZCB0byB1cGxvYWQgZmlybXdhcmUKICAqLwogc3RhdGljIGludAogbXB0X2RvX2lvY19yZWNvdmVyeShNUFRfQURBUFRFUiAqaW9jLCB1MzIgcmVhc29uLCBpbnQgc2xlZXBGbGFnKQpAQCAtMjAyMCwxNSArMjA2MiwxNyBAQAogCWlmICgocmV0ID09IDApICYmIChyZWFzb24gPT0gTVBUX0hPU1RFVkVOVF9JT0NfQlJJTkdVUCkpIHsKIAkJaW9jLT5wY2lfaXJxID0gLTE7CiAJCWlmIChpb2MtPnBjaWRldi0+aXJxKSB7Ci0JCQlpZiAobXB0X21zaV9lbmFibGUgJiYgIXBjaV9lbmFibGVfbXNpKGlvYy0+cGNpZGV2KSkKKwkJCWlmIChpb2MtPm1zaV9lbmFibGUgJiYgIXBjaV9lbmFibGVfbXNpKGlvYy0+cGNpZGV2KSkKIAkJCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAiUENJLU1TSSBlbmFibGVkXG4iLAogCQkJCSAgICBpb2MtPm5hbWUpOworCQkJZWxzZQorCQkJCWlvYy0+bXNpX2VuYWJsZSA9IDA7CiAJCQlyYyA9IHJlcXVlc3RfaXJxKGlvYy0+cGNpZGV2LT5pcnEsIG1wdF9pbnRlcnJ1cHQsCiAJCQkgICAgSVJRRl9TSEFSRUQsIGlvYy0+bmFtZSwgaW9jKTsKIAkJCWlmIChyYyA8IDApIHsKIAkJCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJVbmFibGUgdG8gYWxsb2NhdGUgIgogCQkJCSAgICAiaW50ZXJydXB0ICVkIVxuIiwgaW9jLT5uYW1lLCBpb2MtPnBjaWRldi0+aXJxKTsKLQkJCQlpZiAobXB0X21zaV9lbmFibGUpCisJCQkJaWYgKGlvYy0+bXNpX2VuYWJsZSkKIAkJCQkJcGNpX2Rpc2FibGVfbXNpKGlvYy0+cGNpZGV2KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQpAQCAtMjA5Niw3ICsyMTQwLDcgQEAKIAkJCQl9IGVsc2UgewogCQkJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAogCQkJCQkgICAgImZpcm13YXJlIHVwbG9hZCBmYWlsdXJlIVxuIiwgaW9jLT5uYW1lKTsKLQkJCQkJcmV0ID0gLTU7CisJCQkJCXJldCA9IC02OwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMjEzNiw3ICsyMTgwLDcgQEAKIAkJLyoKIAkJICogSW5pdGFsaXplIGxpbmsgbGlzdCBmb3IgaW5hY3RpdmUgcmFpZCB2b2x1bWVzLgogCQkgKi8KLQkJaW5pdF9NVVRFWCgmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CisJCW11dGV4X2luaXQoJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3RfbXV0ZXgpOwogCQlJTklUX0xJU1RfSEVBRCgmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdCk7CiAKIAkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU0FTKSB7CkBAIC0yMjI0LDcgKzIyNjgsNyBAQAogIG91dDoKIAlpZiAoKHJldCAhPSAwKSAmJiBpcnFfYWxsb2NhdGVkKSB7CiAJCWZyZWVfaXJxKGlvYy0+cGNpX2lycSwgaW9jKTsKLQkJaWYgKG1wdF9tc2lfZW5hYmxlKQorCQlpZiAoaW9jLT5tc2lfZW5hYmxlKQogCQkJcGNpX2Rpc2FibGVfbXNpKGlvYy0+cGNpZGV2KTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTI0MDYsNyArMjQ1MCw3IEBACiAKIAlpZiAoaW9jLT5wY2lfaXJxICE9IC0xKSB7CiAJCWZyZWVfaXJxKGlvYy0+cGNpX2lycSwgaW9jKTsKLQkJaWYgKG1wdF9tc2lfZW5hYmxlKQorCQlpZiAoaW9jLT5tc2lfZW5hYmxlKQogCQkJcGNpX2Rpc2FibGVfbXNpKGlvYy0+cGNpZGV2KTsKIAkJaW9jLT5wY2lfaXJxID0gLTE7CiAJfQpAQCAtNTEyMiwxMyArNTE2NiwxMyBAQAogCWlmIChsaXN0X2VtcHR5KCZpb2MtPnJhaWRfZGF0YS5pbmFjdGl2ZV9saXN0KSkKIAkJcmV0dXJuOwogCi0JZG93bigmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbXBvbmVudF9pbmZvLCBwTmV4dCwKIAkgICAgJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmNvbXBvbmVudF9pbmZvLT5saXN0KTsKIAkJa2ZyZWUoY29tcG9uZW50X2luZm8pOwogCX0KLQl1cCgmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPnJhaWRfZGF0YS5pbmFjdGl2ZV9saXN0X211dGV4KTsKIH0KIAogLyoqCkBAIC01MTg3LDcgKzUyMzEsNyBAQAogCWlmICghaGFuZGxlX2luYWN0aXZlX3ZvbHVtZXMpCiAJCWdvdG8gb3V0OwogCi0JZG93bigmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+TnVtUGh5c0Rpc2tzOyBpKyspIHsKIAkJaWYobXB0X3JhaWRfcGh5c19kaXNrX3BnMChpb2MsCiAJCSAgICBidWZmZXItPlBoeXNEaXNrW2ldLlBoeXNEaXNrTnVtLCAmcGh5c19kaXNrKSAhPSAwKQpAQCAtNTIwNyw3ICs1MjUxLDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmY29tcG9uZW50X2luZm8tPmxpc3QsCiAJCSAgICAmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdCk7CiAJfQotCXVwKCZpb2MtPnJhaWRfZGF0YS5pbmFjdGl2ZV9saXN0X211dGV4KTsKKwltdXRleF91bmxvY2soJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3RfbXV0ZXgpOwogCiAgb3V0OgogCWlmIChidWZmZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IGQ4M2VhOTYuLmE4ZjYxNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCkBAIC01MSw2ICs1MSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSAibHNpL21waV90eXBlLmgiCiAjaW5jbHVkZSAibHNpL21waS5oIgkJLyogRnVzaW9uIE1QSShudGVyZmFjZSkgYmFzaWMgZGVmcyAqLwpAQCAtNTMxLDcgKzUzMiw3IEBACiB0eXBlZGVmCXN0cnVjdCBfUmFpZENmZ0RhdGEgewogCUlPQ1BhZ2UyX3QJKnBJb2NQZzI7CQkvKiB0YWJsZSBvZiBSYWlkIFZvbHVtZXMgKi8KIAlJT0NQYWdlM190CSpwSW9jUGczOwkJLyogdGFibGUgb2YgcGh5c2ljYWwgZGlza3MgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCWluYWN0aXZlX2xpc3RfbXV0ZXg7CisJc3RydWN0IG11dGV4CWluYWN0aXZlX2xpc3RfbXV0ZXg7CiAJc3RydWN0IGxpc3RfaGVhZAlpbmFjdGl2ZV9saXN0OyAvKiBsaW5rIGxpc3QgZm9yIHBoeXNpY2FsCiAJCQkJCQlkaXNrIHRoYXQgYmVsb25nIGluCiAJCQkJCQlpbmFjdGl2ZSB2b2x1bWVzICovCkBAIC02MzAsNiArNjMxLDcgQEAKIAlpbnQJCQkgbXRycl9yZWc7CiAJc3RydWN0IHBjaV9kZXYJCSpwY2lkZXY7CS8qIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi8KIAlpbnQJCQliYXJzOwkJLyogYml0bWFzayBvZiBCQVIncyB0aGF0IG11c3QgYmUgY29uZmlndXJlZCAqLworCWludAkJCW1zaV9lbmFibGU7CiAJdTgJCQlfX2lvbWVtICptZW1tYXA7CS8qIG1tYXAgYWRkcmVzcyAqLwogCXN0cnVjdCBTY3NpX0hvc3QJKnNoOwkJLyogU2NzaSBIb3N0IHBvaW50ZXIgKi8KIAlTcGlDZmdEYXRhCQlzcGlfZGF0YTsJLyogU2NzaSBjb25maWcuIGRhdGEgKi8KQEAgLTY5Myw3ICs2OTUsNiBAQAogCXN0cnVjdCBtdXRleAkJIHNhc19kaXNjb3ZlcnlfbXV0ZXg7CiAJdTgJCQkgc2FzX2Rpc2NvdmVyeV9ydW50aW1lOwogCXU4CQkJIHNhc19kaXNjb3ZlcnlfaWdub3JlX2V2ZW50czsKLQl1MTYJCQkgaGFuZGxlOwogCWludAkJCSBzYXNfaW5kZXg7IC8qIGluZGV4IHJlZnJlbmNpbmcgKi8KIAlNUFRfU0FTX01HTVQJCSBzYXNfbWdtdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJIHNhc19wZXJzaXN0X3Rhc2s7CkBAIC05MjMsNyArOTI0LDcgQEAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KICNlbmRpZgkJLyogfSBfX0tFUk5FTF9fICovCiAKLSNpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX3NwYXJjX3Y5X18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykKKyNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQ0FTVF9VMzJfVE9fUFRSKHgpCSgodm9pZCAqKSh1NjQpeCkKICNkZWZpbmUgQ0FTVF9QVFJfVE9fVTMyKHgpCSgodTMyKSh1NjQpeCkKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCBmNzdiMzI5Li40Njg0ODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTIzMCw2ICsyMzAsMjAgQEAKIAlyZXR1cm4gKChNUFRfU0NTSV9IT1NUICopc2hvc3QtPmhvc3RkYXRhKS0+aW9jOwogfQogCitzdGF0aWMgc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqCittcHRzYXNfZ2V0X2hiYV9wb3J0aW5mbyhNUFRfQURBUFRFUiAqaW9jKQoreworCXN0cnVjdCBsaXN0X2hlYWQJKmhlYWQgPSAmaW9jLT5zYXNfdG9wb2xvZ3k7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbwkqcGkgPSBOVUxMOworCisJLyogYWx3YXlzIHRoZSBmaXJzdCBlbnRyeSBvbiBzYXNfdG9wb2xvZ3kgbGlzdCAqLworCisJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKQorCQlwaSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IG1wdHNhc19wb3J0aW5mbywgbGlzdCk7CisKKwlyZXR1cm4gcGk7Cit9CisKIC8qCiAgKiBtcHRzYXNfZmluZF9wb3J0aW5mb19ieV9oYW5kbGUKICAqCkBAIC0xMjkwLDcgKzEzMDQsNyBAQAogCQlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwb3J0X2luZm87CiAKIAkJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwotCQlwb3J0X2luZm8gPSBtcHRzYXNfZmluZF9wb3J0aW5mb19ieV9oYW5kbGUoaW9jLCBpb2MtPmhhbmRsZSk7CisJCXBvcnRfaW5mbyA9IG1wdHNhc19nZXRfaGJhX3BvcnRpbmZvKGlvYyk7CiAJCWlmIChwb3J0X2luZm8gJiYgcG9ydF9pbmZvLT5waHlfaW5mbykKIAkJCXNhc19hZGRyZXNzID0KIAkJCQlwb3J0X2luZm8tPnBoeV9pbmZvWzBdLnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3M7CkBAIC0xNzAxLDYgKzE3MTUsMTEgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKIAorCWlmICghYnVmZmVyLT5OdW1QaHlzKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCX0KKwogCS8qIHNhdmUgY29uZmlnIGRhdGEgKi8KIAlwb3J0X2luZm8tPm51bV9waHlzID0gYnVmZmVyLT5OdW1QaHlzOwogCXBvcnRfaW5mby0+cGh5X2luZm8gPSBrY2FsbG9jKHBvcnRfaW5mby0+bnVtX3BoeXMsCkBAIC0yMDIzLDggKzIwNDIsNyBAQAogCQkJaW50IGk7CiAKIAkJCW11dGV4X2xvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKLQkJCXBvcnRfaW5mbyA9IG1wdHNhc19maW5kX3BvcnRpbmZvX2J5X2hhbmRsZShpb2MsCi0JCQkJCQkJCSAgIGlvYy0+aGFuZGxlKTsKKwkJCXBvcnRfaW5mbyA9IG1wdHNhc19nZXRfaGJhX3BvcnRpbmZvKGlvYyk7CiAJCQltdXRleF91bmxvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKIAogCQkJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykKQEAgLTIwOTQsOCArMjExMiw3IEBACiAKIAltcHRzYXNfc2FzX2lvX3VuaXRfcGcxKGlvYyk7CiAJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwotCWlvYy0+aGFuZGxlID0gaGJhLT5waHlfaW5mb1swXS5oYW5kbGU7Ci0JcG9ydF9pbmZvID0gbXB0c2FzX2ZpbmRfcG9ydGluZm9fYnlfaGFuZGxlKGlvYywgaW9jLT5oYW5kbGUpOworCXBvcnRfaW5mbyA9IG1wdHNhc19nZXRfaGJhX3BvcnRpbmZvKGlvYyk7CiAJaWYgKCFwb3J0X2luZm8pIHsKIAkJcG9ydF9pbmZvID0gaGJhOwogCQlsaXN0X2FkZF90YWlsKCZwb3J0X2luZm8tPmxpc3QsICZpb2MtPnNhc190b3BvbG9neSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggYWYxZGUwYy4uYjEwOWJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtMTE3MCw2ICsxMTcwLDEwIEBACiBpbnQKIG1wdHNjc2loX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwlNUFRfQURBUFRFUiAJCSppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlzY3NpX2Jsb2NrX3JlcXVlc3RzKGlvYy0+c2gpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJbXB0c2NzaWhfc2h1dGRvd24ocGRldik7CiAJcmV0dXJuIG1wdF9zdXNwZW5kKHBkZXYsc3RhdGUpOwogfQpAQCAtMTE4Myw3ICsxMTg3LDEyIEBACiBpbnQKIG1wdHNjc2loX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlyZXR1cm4gbXB0X3Jlc3VtZShwZGV2KTsKKwlNUFRfQURBUFRFUiAJCSppb2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJjOworCisJcmMgPSBtcHRfcmVzdW1lKHBkZXYpOworCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhpb2MtPnNoKTsKKwlyZXR1cm4gcmM7CiB9CiAKICNlbmRpZgpAQCAtMTUzMyw3ICsxNTQyLDcgQEAKICAqCiAgKglSZW1hcms6IEN1cnJlbnRseSBpbnZva2VkIGZyb20gYSBub24taW50ZXJydXB0IHRocmVhZCAoX2JoKS4KICAqCi0gKglSZW1hcms6IFdpdGggb2xkIEVIIGNvZGUsIGF0IG1vc3QgMSBTQ1NJIFRhc2tNZ210IGZ1bmN0aW9uIHBlciBJT0MKKyAqCU5vdGU6IFdpdGggb2xkIEVIIGNvZGUsIGF0IG1vc3QgMSBTQ1NJIFRhc2tNZ210IGZ1bmN0aW9uIHBlciBJT0MKICAqCXdpbGwgYmUgYWN0aXZlLgogICoKICAqCVJldHVybnMgMCBmb3IgU1VDQ0VTUywgb3IgJUZBSUxFRC4KQEAgLTIyOTUsMTQgKzIzMDQsMTQgQEAKIAlpZiAobGlzdF9lbXB0eSgmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdCkpCiAJCWdvdG8gb3V0OwogCi0JZG93bigmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb21wb25lbnRfaW5mbywgJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3QsCiAJICAgIGxpc3QpIHsKIAkJaWYgKChjb21wb25lbnRfaW5mby0+ZC5QaHlzRGlza0lEID09IGlkKSAmJgogCQkgICAgKGNvbXBvbmVudF9pbmZvLT5kLlBoeXNEaXNrQnVzID09IGNoYW5uZWwpKQogCQkJcmMgPSAxOwogCX0KLQl1cCgmaW9jLT5yYWlkX2RhdGEuaW5hY3RpdmVfbGlzdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPnJhaWRfZGF0YS5pbmFjdGl2ZV9saXN0X211dGV4KTsKIAogIG91dDoKIAlyZXR1cm4gcmM7CkBAIC0yMzMyLDE0ICsyMzQxLDE0IEBACiAJaWYgKGxpc3RfZW1wdHkoJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3QpKQogCQlnb3RvIG91dDsKIAotCWRvd24oJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3RfbXV0ZXgpOworCW11dGV4X2xvY2soJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29tcG9uZW50X2luZm8sICZpb2MtPnJhaWRfZGF0YS5pbmFjdGl2ZV9saXN0LAogCSAgICBsaXN0KSB7CiAJCWlmICgoY29tcG9uZW50X2luZm8tPmQuUGh5c0Rpc2tJRCA9PSBpZCkgJiYKIAkJICAgIChjb21wb25lbnRfaW5mby0+ZC5QaHlzRGlza0J1cyA9PSBjaGFubmVsKSkKIAkJCXJjID0gY29tcG9uZW50X2luZm8tPmQuUGh5c0Rpc2tOdW07CiAJfQotCXVwKCZpb2MtPnJhaWRfZGF0YS5pbmFjdGl2ZV9saXN0X211dGV4KTsKKwltdXRleF91bmxvY2soJmlvYy0+cmFpZF9kYXRhLmluYWN0aXZlX2xpc3RfbXV0ZXgpOwogCiAgb3V0OgogCXJldHVybiByYzsKQEAgLTI1MzcsMTQgKzI1NDYsMTIgQEAKIAogLyoqCiAgKiBtcHRzY3NpaF9nZXRfc2NzaV9sb29rdXAKLSAqCi0gKiByZXRyaWV2ZXMgc2NtZCBlbnRyeSBmcm9tIFNjc2lMb29rdXBbXSBhcnJheSBsaXN0Ci0gKgogICogQGlvYzogUG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKICAqIEBpOiBpbmRleCBpbnRvIHRoZSBhcnJheQogICoKLSAqIFJldHVybnMgdGhlIHNjc2lfY21kIHBvaW50ZXIKKyAqIHJldHJpZXZlcyBzY21kIGVudHJ5IGZyb20gU2NzaUxvb2t1cFtdIGFycmF5IGxpc3QKICAqCisgKiBSZXR1cm5zIHRoZSBzY3NpX2NtZCBwb2ludGVyCiAgKiovCiBzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqCiBtcHRzY3NpaF9nZXRfc2NzaV9sb29rdXAoTVBUX0FEQVBURVIgKmlvYywgaW50IGkpCkBAIC0yNTYxLDE0ICsyNTY4LDEyIEBACiAKIC8qKgogICogbXB0c2NzaWhfZ2V0Y2xlYXJfc2NzaV9sb29rdXAKLSAqCi0gKiByZXRyaWV2ZXMgYW5kIGNsZWFycyBzY21kIGVudHJ5IGZyb20gU2NzaUxvb2t1cFtdIGFycmF5IGxpc3QKLSAqCiAgKiBAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQogICogQGk6IGluZGV4IGludG8gdGhlIGFycmF5CiAgKgotICogUmV0dXJucyB0aGUgc2NzaV9jbWQgcG9pbnRlcgorICogcmV0cmlldmVzIGFuZCBjbGVhcnMgc2NtZCBlbnRyeSBmcm9tIFNjc2lMb29rdXBbXSBhcnJheSBsaXN0CiAgKgorICogUmV0dXJucyB0aGUgc2NzaV9jbWQgcG9pbnRlcgogICoqLwogc3RhdGljIHN0cnVjdCBzY3NpX2NtbmQgKgogbXB0c2NzaWhfZ2V0Y2xlYXJfc2NzaV9sb29rdXAoTVBUX0FEQVBURVIgKmlvYywgaW50IGkpCkBAIC0zMjk1LDkgKzMzMDAsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLW1wdHNjc2loX3ZlcnNpb25fZndfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCittcHRzY3NpaF92ZXJzaW9uX2Z3X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCU1QVF9TQ1NJX0hPU1QJKmhkID0gc2hvc3RfcHJpdihob3N0KTsKIAlNUFRfQURBUFRFUiAqaW9jID0gaGQtPmlvYzsKIApAQCAtMzMwNywxMiArMzMxMywxMyBAQAogCSAgICAoaW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCAmIDB4MDAwMEZGMDApID4+IDgsCiAJICAgIGlvYy0+ZmFjdHMuRldWZXJzaW9uLldvcmQgJiAweDAwMDAwMEZGKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih2ZXJzaW9uX2Z3LCBTX0lSVUdPLCBtcHRzY3NpaF92ZXJzaW9uX2Z3X3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHZlcnNpb25fZncsIFNfSVJVR08sIG1wdHNjc2loX3ZlcnNpb25fZndfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1tcHRzY3NpaF92ZXJzaW9uX2Jpb3Nfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCittcHRzY3NpaF92ZXJzaW9uX2Jpb3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlNUFRfU0NTSV9IT1NUCSpoZCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJTVBUX0FEQVBURVIgKmlvYyA9IGhkLT5pb2M7CiAKQEAgLTMzMjIsMTI5ICszMzI5LDE0MSBAQAogCSAgICAoaW9jLT5iaW9zVmVyc2lvbiAmIDB4MDAwMEZGMDApID4+IDgsCiAJICAgIGlvYy0+Ymlvc1ZlcnNpb24gJiAweDAwMDAwMEZGKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih2ZXJzaW9uX2Jpb3MsIFNfSVJVR08sIG1wdHNjc2loX3ZlcnNpb25fYmlvc19zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uX2Jpb3MsIFNfSVJVR08sIG1wdHNjc2loX3ZlcnNpb25fYmlvc19zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QKLW1wdHNjc2loX3ZlcnNpb25fbXBpX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbXB0c2NzaWhfdmVyc2lvbl9tcGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCU1QVF9TQ1NJX0hPU1QJKmhkID0gc2hvc3RfcHJpdihob3N0KTsKIAlNUFRfQURBUFRFUiAqaW9jID0gaGQtPmlvYzsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwM3hcbiIsIGlvYy0+ZmFjdHMuTXNnVmVyc2lvbik7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodmVyc2lvbl9tcGksIFNfSVJVR08sIG1wdHNjc2loX3ZlcnNpb25fbXBpX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHZlcnNpb25fbXBpLCBTX0lSVUdPLCBtcHRzY3NpaF92ZXJzaW9uX21waV9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QKLW1wdHNjc2loX3ZlcnNpb25fcHJvZHVjdF9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK21wdHNjc2loX3ZlcnNpb25fcHJvZHVjdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlNUFRfU0NTSV9IT1NUCSpoZCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJTVBUX0FEQVBURVIgKmlvYyA9IGhkLT5pb2M7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgaW9jLT5wcm9kX25hbWUpOwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHZlcnNpb25fcHJvZHVjdCwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uX3Byb2R1Y3QsIFNfSVJVR08sCiAgICAgbXB0c2NzaWhfdmVyc2lvbl9wcm9kdWN0X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotbXB0c2NzaWhfdmVyc2lvbl9udmRhdGFfcGVyc2lzdGVudF9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK21wdHNjc2loX3ZlcnNpb25fbnZkYXRhX3BlcnNpc3RlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCU1QVF9TQ1NJX0hPU1QJKmhkID0gc2hvc3RfcHJpdihob3N0KTsKIAlNUFRfQURBUFRFUiAqaW9jID0gaGQtPmlvYzsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMnhoXG4iLAogCSAgICBpb2MtPm52ZGF0YV92ZXJzaW9uX3BlcnNpc3RlbnQpOwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHZlcnNpb25fbnZkYXRhX3BlcnNpc3RlbnQsIFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbl9udmRhdGFfcGVyc2lzdGVudCwgU19JUlVHTywKICAgICBtcHRzY3NpaF92ZXJzaW9uX252ZGF0YV9wZXJzaXN0ZW50X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotbXB0c2NzaWhfdmVyc2lvbl9udmRhdGFfZGVmYXVsdF9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK21wdHNjc2loX3ZlcnNpb25fbnZkYXRhX2RlZmF1bHRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlNUFRfU0NTSV9IT1NUCSpoZCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJTVBUX0FEQVBURVIgKmlvYyA9IGhkLT5pb2M7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJ4aFxuIixpb2MtPm52ZGF0YV92ZXJzaW9uX2RlZmF1bHQpOwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHZlcnNpb25fbnZkYXRhX2RlZmF1bHQsIFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbl9udmRhdGFfZGVmYXVsdCwgU19JUlVHTywKICAgICBtcHRzY3NpaF92ZXJzaW9uX252ZGF0YV9kZWZhdWx0X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotbXB0c2NzaWhfYm9hcmRfbmFtZV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK21wdHNjc2loX2JvYXJkX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJTVBUX1NDU0lfSE9TVAkqaGQgPSBzaG9zdF9wcml2KGhvc3QpOwogCU1QVF9BREFQVEVSICppb2MgPSBoZC0+aW9jOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGlvYy0+Ym9hcmRfbmFtZSk7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYm9hcmRfbmFtZSwgU19JUlVHTywgbXB0c2NzaWhfYm9hcmRfbmFtZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihib2FyZF9uYW1lLCBTX0lSVUdPLCBtcHRzY3NpaF9ib2FyZF9uYW1lX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotbXB0c2NzaWhfYm9hcmRfYXNzZW1ibHlfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCittcHRzY3NpaF9ib2FyZF9hc3NlbWJseV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJTVBUX1NDU0lfSE9TVAkqaGQgPSBzaG9zdF9wcml2KGhvc3QpOwogCU1QVF9BREFQVEVSICppb2MgPSBoZC0+aW9jOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGlvYy0+Ym9hcmRfYXNzZW1ibHkpOwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJvYXJkX2Fzc2VtYmx5LCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX2Fzc2VtYmx5LCBTX0lSVUdPLAogICAgIG1wdHNjc2loX2JvYXJkX2Fzc2VtYmx5X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotbXB0c2NzaWhfYm9hcmRfdHJhY2VyX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbXB0c2NzaWhfYm9hcmRfdHJhY2VyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJTVBUX1NDU0lfSE9TVAkqaGQgPSBzaG9zdF9wcml2KGhvc3QpOwogCU1QVF9BREFQVEVSICppb2MgPSBoZC0+aW9jOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGlvYy0+Ym9hcmRfdHJhY2VyKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihib2FyZF90cmFjZXIsIFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfdHJhY2VyLCBTX0lSVUdPLAogICAgIG1wdHNjc2loX2JvYXJkX3RyYWNlcl9zaG93LCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QKLW1wdHNjc2loX2lvX2RlbGF5X3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbXB0c2NzaWhfaW9fZGVsYXlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlNUFRfU0NTSV9IT1NUCSpoZCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJTVBUX0FEQVBURVIgKmlvYyA9IGhkLT5pb2M7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJkXG4iLCBpb2MtPmlvX21pc3NpbmdfZGVsYXkpOwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGlvX2RlbGF5LCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGlvX2RlbGF5LCBTX0lSVUdPLAogICAgIG1wdHNjc2loX2lvX2RlbGF5X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotbXB0c2NzaWhfZGV2aWNlX2RlbGF5X3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbXB0c2NzaWhfZGV2aWNlX2RlbGF5X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJTVBUX1NDU0lfSE9TVAkqaGQgPSBzaG9zdF9wcml2KGhvc3QpOwogCU1QVF9BREFQVEVSICppb2MgPSBoZC0+aW9jOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTAyZFxuIiwgaW9jLT5kZXZpY2VfbWlzc2luZ19kZWxheSk7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZGV2aWNlX2RlbGF5LCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKGRldmljZV9kZWxheSwgU19JUlVHTywKICAgICBtcHRzY3NpaF9kZXZpY2VfZGVsYXlfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1tcHRzY3NpaF9kZWJ1Z19sZXZlbF9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK21wdHNjc2loX2RlYnVnX2xldmVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlNUFRfU0NTSV9IT1NUCSpoZCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJTVBUX0FEQVBURVIgKmlvYyA9IGhkLT5pb2M7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDh4aFxuIiwgaW9jLT5kZWJ1Z19sZXZlbCk7CiB9CiBzdGF0aWMgc3NpemVfdAotbXB0c2NzaWhfZGVidWdfbGV2ZWxfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAotCQkJCQkJCQlzaXplX3QgY291bnQpCittcHRzY3NpaF9kZWJ1Z19sZXZlbF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCU1QVF9TQ1NJX0hPU1QJKmhkID0gc2hvc3RfcHJpdihob3N0KTsKIAlNUFRfQURBUFRFUiAqaW9jID0gaGQtPmlvYzsKIAlpbnQgdmFsID0gMDsKQEAgLTM0NTcsMjIgKzM0NzYsMjIgQEAKIAkJCQlpb2MtPm5hbWUsIGlvYy0+ZGVidWdfbGV2ZWwpOwogCXJldHVybiBzdHJsZW4oYnVmKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihkZWJ1Z19sZXZlbCwgU19JUlVHTyB8IFNfSVdVU1IsCi0gICAgbXB0c2NzaWhfZGVidWdfbGV2ZWxfc2hvdywgbXB0c2NzaWhfZGVidWdfbGV2ZWxfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGRlYnVnX2xldmVsLCBTX0lSVUdPIHwgU19JV1VTUiwKKwltcHRzY3NpaF9kZWJ1Z19sZXZlbF9zaG93LCBtcHRzY3NpaF9kZWJ1Z19sZXZlbF9zdG9yZSk7CiAKLXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICptcHRzY3NpaF9ob3N0X2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX3ZlcnNpb25fZncsCi0JJmNsYXNzX2RldmljZV9hdHRyX3ZlcnNpb25fYmlvcywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfdmVyc2lvbl9tcGksCi0JJmNsYXNzX2RldmljZV9hdHRyX3ZlcnNpb25fcHJvZHVjdCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfdmVyc2lvbl9udmRhdGFfcGVyc2lzdGVudCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfdmVyc2lvbl9udmRhdGFfZGVmYXVsdCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfbmFtZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfYXNzZW1ibHksCi0JJmNsYXNzX2RldmljZV9hdHRyX2JvYXJkX3RyYWNlciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaW9fZGVsYXksCi0JJmNsYXNzX2RldmljZV9hdHRyX2RldmljZV9kZWxheSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfZGVidWdfbGV2ZWwsCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0c2NzaWhfaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl92ZXJzaW9uX2Z3LAorCSZkZXZfYXR0cl92ZXJzaW9uX2Jpb3MsCisJJmRldl9hdHRyX3ZlcnNpb25fbXBpLAorCSZkZXZfYXR0cl92ZXJzaW9uX3Byb2R1Y3QsCisJJmRldl9hdHRyX3ZlcnNpb25fbnZkYXRhX3BlcnNpc3RlbnQsCisJJmRldl9hdHRyX3ZlcnNpb25fbnZkYXRhX2RlZmF1bHQsCisJJmRldl9hdHRyX2JvYXJkX25hbWUsCisJJmRldl9hdHRyX2JvYXJkX2Fzc2VtYmx5LAorCSZkZXZfYXR0cl9ib2FyZF90cmFjZXIsCisJJmRldl9hdHRyX2lvX2RlbGF5LAorCSZkZXZfYXR0cl9kZXZpY2VfZGVsYXksCisJJmRldl9hdHRyX2RlYnVnX2xldmVsLAogCU5VTEwsCiB9OwogRVhQT1JUX1NZTUJPTChtcHRzY3NpaF9ob3N0X2F0dHJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaAppbmRleCBkMjg5ZTk3Li43ZWE3ZGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCkBAIC0xMjksNCArMTI5LDQgQEAKIGV4dGVybiBpbnQgbXB0c2NzaWhfVE1IYW5kbGVyKE1QVF9TQ1NJX0hPU1QgKmhkLCB1OCB0eXBlLCB1OCBjaGFubmVsLCB1OCBpZCwgaW50IGx1biwgaW50IGN0eDJhYm9ydCwgdWxvbmcgdGltZW91dCk7CiBleHRlcm4gdTggbXB0c2NzaWhfcmFpZF9pZF90b19udW0oTVBUX0FEQVBURVIgKmlvYywgdTggY2hhbm5lbCwgdTggaWQpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9pc19waHlzX2Rpc2soTVBUX0FEQVBURVIgKmlvYywgdTggY2hhbm5lbCwgdTggaWQpOwotZXh0ZXJuIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICptcHRzY3NpaF9ob3N0X2F0dHJzW107CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1wdHNjc2loX2hvc3RfYXR0cnNbXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IDBjODg2YzguLjI1NjY0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtMjIsNiArMjIsMjIgQEAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBBU0lDMyBtdWx0aWZ1bmN0aW9uIGNoaXAgZm91bmQgb24gbWFueQogCSAgUERBcyAobWFpbmx5IGlQQVEgYW5kIEhUQyBiYXNlZCBvbmVzKQogCitjb25maWcgSFRDX0VHUElPCisJYm9vbCAiSFRDIEVHUElPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBHRU5FUklDX0hBUkRJUlFTICYmIEhBVkVfR1BJT19MSUIKKwloZWxwCisJICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBDUExEIGVncGlvIGNoaXAgcHJlc2VudCBvbgorCSAgICBzZXZlcmFsIEhUQyBwaG9uZXMuICBJdCBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciBpbnB1dAorCSAgICBwaW5zLCBvdXRwdXQgcGlucywgYW5kIGlycXMuCisKK2NvbmZpZyBIVENfUEFTSUMzCisJdHJpc3RhdGUgIkhUQyBQQVNJQzMgTEVEL0RTMVdNIGNoaXAgc3VwcG9ydCIKKwloZWxwCisJICBUaGlzIGNvcmUgZHJpdmVyIHByb3ZpZGVzIHJlZ2lzdGVyIGFjY2VzcyBmb3IgdGhlIExFRC9EUzFXTQorCSAgY2hpcHMgbGFiZWxlZCAiQUlDMiIgYW5kICJBSUMzIiwgZm91bmQgb24gSFRDIEJsdWVhbmdlbCBhbmQKKwkgIEhUQyBNYWdpY2lhbiBkZXZpY2VzLCByZXNwZWN0aXZlbHkuIEFjdHVhbCBmdW5jdGlvbmFsaXR5IGlzCisJICBoYW5kbGVkIGJ5IHRoZSBsZWRzLXBhc2ljMyBhbmQgZHMxd20gZHJpdmVycy4KKwogZW5kbWVudQogCiBtZW51ICJNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IDUyMWNkNWMuLmVlZjRlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC01LDYgKzUsOSBAQAogb2JqLSQoQ09ORklHX01GRF9TTTUwMSkJCSs9IHNtNTAxLm8KIG9iai0kKENPTkZJR19NRkRfQVNJQzMpCQkrPSBhc2ljMy5vCiAKK29iai0kKENPTkZJR19IVENfRUdQSU8pCQkrPSBodGMtZWdwaW8ubworb2JqLSQoQ09ORklHX0hUQ19QQVNJQzMpCSs9IGh0Yy1wYXNpYzMubworCiBvYmotJChDT05GSUdfTUNQKQkJKz0gbWNwLWNvcmUubwogb2JqLSQoQ09ORklHX01DUF9TQTExWDApCSs9IG1jcC1zYTExeDAubwogb2JqLSQoQ09ORklHX01DUF9VQ0IxMjAwKQkrPSB1Y2IxeDAwLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKaW5kZXggNjNmYjFmZjMuLmY2ZjJkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvYXNpYzMuYwpAQCAtMjgsMTQgKzI4LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXNpYzNfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGFzaWMzICphc2ljLAogCQkJCSB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsdWUpCiB7Ci0JaW93cml0ZTE2KHZhbHVlLCAodW5zaWduZWQgbG9uZylhc2ljLT5tYXBwaW5nICsKKwlpb3dyaXRlMTYodmFsdWUsIGFzaWMtPm1hcHBpbmcgKwogCQkgIChyZWcgPj4gYXNpYy0+YnVzX3NoaWZ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGFzaWMzX3JlYWRfcmVnaXN0ZXIoc3RydWN0IGFzaWMzICphc2ljLAogCQkJICAgICAgIHVuc2lnbmVkIGludCByZWcpCiB7Ci0JcmV0dXJuIGlvcmVhZDE2KCh1bnNpZ25lZCBsb25nKWFzaWMtPm1hcHBpbmcgKworCXJldHVybiBpb3JlYWQxNihhc2ljLT5tYXBwaW5nICsKIAkJCShyZWcgPj4gYXNpYy0+YnVzX3NoaWZ0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jIGIvZHJpdmVycy9tZmQvaHRjLWVncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3MmNjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jCkBAIC0wLDAgKzEsNDQwIEBACisvKgorICogU3VwcG9ydCBmb3IgdGhlIEdQSU8vSVJRIGV4cGFuZGVyIGNoaXBzIHByZXNlbnQgb24gc2V2ZXJhbCBIVEMgcGhvbmVzLgorICogVGhlc2UgYXJlIGltcGxlbWVudGVkIGluIENQTEQgY2hpcHMgcHJlc2VudCBvbiB0aGUgYm9hcmQuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEtldmluIE8nQ29ubm9yIDxrZXZpbkBrb2Nvbm5vci5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgUGhpbGlwcCBaYWJlbCA8cGhpbGlwcC56YWJlbEBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgbGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2h0Yy1lZ3Bpby5oPgorCitzdHJ1Y3QgZWdwaW9fY2hpcCB7CisJaW50ICAgICAgICAgICAgICByZWdfc3RhcnQ7CisJaW50ICAgICAgICAgICAgICBjYWNoZWRfdmFsdWVzOworCXVuc2lnbmVkIGxvbmcgICAgaXNfb3V0OworCXN0cnVjdCBkZXZpY2UgICAgKmRldjsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7Cit9OworCitzdHJ1Y3QgZWdwaW9faW5mbyB7CisJc3BpbmxvY2tfdCAgICAgICAgbG9jazsKKworCS8qIGlvbWVtIGluZm8gKi8KKwl2b2lkIF9faW9tZW0gICAgICAqYmFzZV9hZGRyOworCWludCAgICAgICAgICAgICAgIGJ1c19zaGlmdDsJLyogYnl0ZSBzaGlmdCAqLworCWludCAgICAgICAgICAgICAgIHJlZ19zaGlmdDsJLyogYml0IHNoaWZ0ICovCisJaW50ICAgICAgICAgICAgICAgcmVnX21hc2s7CisKKwkvKiBpcnEgaW5mbyAqLworCWludCAgICAgICAgICAgICAgIGFja19yZWdpc3RlcjsKKwlpbnQgICAgICAgICAgICAgICBhY2tfd3JpdGU7CisJdTE2ICAgICAgICAgICAgICAgaXJxc19lbmFibGVkOworCXVpbnQgICAgICAgICAgICAgIGlycV9zdGFydDsKKwlpbnQgICAgICAgICAgICAgICBuaXJxczsKKwl1aW50ICAgICAgICAgICAgICBjaGFpbmVkX2lycTsKKworCS8qIGVncGlvIGluZm8gKi8KKwlzdHJ1Y3QgZWdwaW9fY2hpcCAqY2hpcDsKKwlpbnQgICAgICAgICAgICAgICBuY2hpcHM7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZWdwaW9fd3JpdGV3KHUxNiB2YWx1ZSwgc3RydWN0IGVncGlvX2luZm8gKmVpLCBpbnQgcmVnKQoreworCXdyaXRldyh2YWx1ZSwgZWktPmJhc2VfYWRkciArIChyZWcgPDwgZWktPmJ1c19zaGlmdCkpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBlZ3Bpb19yZWFkdyhzdHJ1Y3QgZWdwaW9faW5mbyAqZWksIGludCByZWcpCit7CisJcmV0dXJuIHJlYWR3KGVpLT5iYXNlX2FkZHIgKyAocmVnIDw8IGVpLT5idXNfc2hpZnQpKTsKK30KKworLyoKKyAqIElSUXMKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX2lycXMoc3RydWN0IGVncGlvX2luZm8gKmVpKQoreworCWVncGlvX3dyaXRldyhlaS0+YWNrX3dyaXRlLCBlaSwgZWktPmFja19yZWdpc3Rlcik7CisJcHJfZGVidWcoIkVHUElPIGFjayAtIHdyaXRlICV4IHRvIGJhc2UrJXhcbiIsCisJCQllaS0+YWNrX3dyaXRlLCBlaS0+YWNrX3JlZ2lzdGVyIDw8IGVpLT5idXNfc2hpZnQpOworfQorCitzdGF0aWMgdm9pZCBlZ3Bpb19hY2sodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworLyogVGhlcmUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByb2FjdGl2ZWx5IG1hc2sgaW50ZXJydXB0cworICogb24gdGhlIGVncGlvIGNoaXAgaXRzZWxmLiAgU28sIHdlIHNpbXBseSBpZ25vcmUgaW50ZXJydXB0cyB0aGF0CisgKiBhcmVuJ3QgZGVzaXJlZC4gKi8KK3N0YXRpYyB2b2lkIGVncGlvX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgZWdwaW9faW5mbyAqZWkgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWVpLT5pcnFzX2VuYWJsZWQgJj0gfigxIDw8IChpcnEgLSBlaS0+aXJxX3N0YXJ0KSk7CisJcHJfZGVidWcoIkVHUElPIG1hc2sgJWQgJTA0eFxuIiwgaXJxLCBlaS0+aXJxc19lbmFibGVkKTsKK30KK3N0YXRpYyB2b2lkIGVncGlvX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBlZ3Bpb19pbmZvICplaSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJZWktPmlycXNfZW5hYmxlZCB8PSAxIDw8IChpcnEgLSBlaS0+aXJxX3N0YXJ0KTsKKwlwcl9kZWJ1ZygiRUdQSU8gdW5tYXNrICVkICUwNHhcbiIsIGlycSwgZWktPmlycXNfZW5hYmxlZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZWdwaW9fbXV4ZWRfY2hpcCA9IHsKKwkubmFtZSAgID0gImh0Yy1lZ3BpbyIsCisJLmFjawk9IGVncGlvX2FjaywKKwkubWFzayAgID0gZWdwaW9fbWFzaywKKwkudW5tYXNrID0gZWdwaW9fdW5tYXNrLAorfTsKKworc3RhdGljIHZvaWQgZWdwaW9faGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGVncGlvX2luZm8gKmVpID0gZ2V0X2lycV9kYXRhKGlycSk7CisJaW50IGlycXBpbjsKKworCS8qIFJlYWQgY3VycmVudCBwaW5zLiAqLworCXVuc2lnbmVkIGxvbmcgcmVhZHZhbCA9IGVncGlvX3JlYWR3KGVpLCBlaS0+YWNrX3JlZ2lzdGVyKTsKKwlwcl9kZWJ1ZygiSVJRIHJlZzogJXhcbiIsICh1bnNpZ25lZCBpbnQpcmVhZHZhbCk7CisJLyogQWNrL3VubWFzayBpbnRlcnJ1cHRzLiAqLworCWFja19pcnFzKGVpKTsKKwkvKiBQcm9jZXNzIGFsbCBzZXQgcGlucy4gKi8KKwlyZWFkdmFsICY9IGVpLT5pcnFzX2VuYWJsZWQ7CisJZm9yX2VhY2hfYml0KGlycXBpbiwgJnJlYWR2YWwsIGVpLT5uaXJxcykgeworCQkvKiBSdW4gaXJxIGhhbmRsZXIgKi8KKwkJcHJfZGVidWcoImdvdCBJUlEgJWRcbiIsIGlycXBpbik7CisJCWlycSA9IGVpLT5pcnFfc3RhcnQgKyBpcnFwaW47CisJCWRlc2MgPSAmaXJxX2Rlc2NbaXJxXTsKKwkJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOworCX0KK30KKworaW50IGh0Y19lZ3Bpb19nZXRfd2FrZXVwX2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVncGlvX2luZm8gKmVpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBSZWFkIGN1cnJlbnQgcGlucy4gKi8KKwl1MTYgcmVhZHZhbCA9IGVncGlvX3JlYWR3KGVpLCBlaS0+YWNrX3JlZ2lzdGVyKTsKKwkvKiBBY2svdW5tYXNrIGludGVycnVwdHMuICovCisJYWNrX2lycXMoZWkpOworCS8qIFJldHVybiBmaXJzdCBzZXQgcGluLiAqLworCXJlYWR2YWwgJj0gZWktPmlycXNfZW5hYmxlZDsKKwlyZXR1cm4gZWktPmlycV9zdGFydCArIGZmcyhyZWFkdmFsKSAtIDE7Cit9CitFWFBPUlRfU1lNQk9MKGh0Y19lZ3Bpb19nZXRfd2FrZXVwX2lycSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGVncGlvX3BvcyhzdHJ1Y3QgZWdwaW9faW5mbyAqZWksIGludCBiaXQpCit7CisJcmV0dXJuIGJpdCA+PiBlaS0+cmVnX3NoaWZ0OworfQorCitzdGF0aWMgaW5saW5lIGludCBlZ3Bpb19iaXQoc3RydWN0IGVncGlvX2luZm8gKmVpLCBpbnQgYml0KQoreworCXJldHVybiAxIDw8IChiaXQgJiAoKDEgPDwgZWktPnJlZ19zaGlmdCktMSkpOworfQorCisvKgorICogSW5wdXQgcGlucworICovCisKK3N0YXRpYyBpbnQgZWdwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZWdwaW9fY2hpcCAqZWdwaW87CisJc3RydWN0IGVncGlvX2luZm8gKmVpOworCXVuc2lnbmVkICAgICAgICAgICBiaXQ7CisJaW50ICAgICAgICAgICAgICAgIHJlZzsKKwlpbnQgICAgICAgICAgICAgICAgdmFsdWU7CisKKwlwcl9kZWJ1ZygiZWdwaW9fZ2V0X3ZhbHVlKCVkKVxuIiwgY2hpcC0+YmFzZSArIG9mZnNldCk7CisKKwllZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZWdwaW9fY2hpcCwgY2hpcCk7CisJZWkgICAgPSBkZXZfZ2V0X2RydmRhdGEoZWdwaW8tPmRldik7CisJYml0ICAgPSBlZ3Bpb19iaXQoZWksIG9mZnNldCk7CisJcmVnICAgPSBlZ3Bpby0+cmVnX3N0YXJ0ICsgZWdwaW9fcG9zKGVpLCBvZmZzZXQpOworCisJdmFsdWUgPSBlZ3Bpb19yZWFkdyhlaSwgcmVnKTsKKwlwcl9kZWJ1ZygicmVhZHcoJXAgKyAleCkgPSAleFxuIiwKKwkJCWVpLT5iYXNlX2FkZHIsIHJlZyA8PCBlaS0+YnVzX3NoaWZ0LCB2YWx1ZSk7CisJcmV0dXJuIHZhbHVlICYgYml0OworfQorCitzdGF0aWMgaW50IGVncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGVncGlvX2NoaXAgKmVncGlvOworCisJZWdwaW8gPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGVncGlvX2NoaXAsIGNoaXApOworCXJldHVybiB0ZXN0X2JpdChvZmZzZXQsICZlZ3Bpby0+aXNfb3V0KSA/IC1FSU5WQUwgOiAwOworfQorCisKKy8qCisgKiBPdXRwdXQgcGlucworICovCisKK3N0YXRpYyB2b2lkIGVncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nICAgICBmbGFnOworCXN0cnVjdCBlZ3Bpb19jaGlwICplZ3BpbzsKKwlzdHJ1Y3QgZWdwaW9faW5mbyAqZWk7CisJdW5zaWduZWQgICAgICAgICAgYml0OworCWludCAgICAgICAgICAgICAgIHBvczsKKwlpbnQgICAgICAgICAgICAgICByZWc7CisJaW50ICAgICAgICAgICAgICAgc2hpZnQ7CisKKwlwcl9kZWJ1ZygiZWdwaW9fc2V0KCVzLCAlZCglZCksICVkKVxuIiwKKwkJCWNoaXAtPmxhYmVsLCBvZmZzZXQsIG9mZnNldCtjaGlwLT5iYXNlLCB2YWx1ZSk7CisKKwllZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZWdwaW9fY2hpcCwgY2hpcCk7CisJZWkgICAgPSBkZXZfZ2V0X2RydmRhdGEoZWdwaW8tPmRldik7CisJYml0ICAgPSBlZ3Bpb19iaXQoZWksIG9mZnNldCk7CisJcG9zICAgPSBlZ3Bpb19wb3MoZWksIG9mZnNldCk7CisJcmVnICAgPSBlZ3Bpby0+cmVnX3N0YXJ0ICsgcG9zOworCXNoaWZ0ID0gcG9zIDw8IGVpLT5yZWdfc2hpZnQ7CisKKwlwcl9kZWJ1ZygiZWdwaW8gJXM6IHJlZyAlZCA9IDB4JTA0eFxuIiwgdmFsdWUgPyAic2V0IiA6ICJjbGVhciIsCisJCQlyZWcsIChlZ3Bpby0+Y2FjaGVkX3ZhbHVlcyA+PiBzaGlmdCkgJiBlaS0+cmVnX21hc2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVpLT5sb2NrLCBmbGFnKTsKKwlpZiAodmFsdWUpCisJCWVncGlvLT5jYWNoZWRfdmFsdWVzIHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQllZ3Bpby0+Y2FjaGVkX3ZhbHVlcyAmPSB+KDEgPDwgb2Zmc2V0KTsKKwllZ3Bpb193cml0ZXcoKGVncGlvLT5jYWNoZWRfdmFsdWVzID4+IHNoaWZ0KSAmIGVpLT5yZWdfbWFzaywgZWksIHJlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWktPmxvY2ssIGZsYWcpOworfQorCitzdGF0aWMgaW50IGVncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGVncGlvX2NoaXAgKmVncGlvOworCisJZWdwaW8gPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGVncGlvX2NoaXAsIGNoaXApOworCWlmICh0ZXN0X2JpdChvZmZzZXQsICZlZ3Bpby0+aXNfb3V0KSkgeworCQllZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHZvaWQgZWdwaW9fd3JpdGVfY2FjaGUoc3RydWN0IGVncGlvX2luZm8gKmVpKQoreworCWludCAgICAgICAgICAgICAgIGk7CisJc3RydWN0IGVncGlvX2NoaXAgKmVncGlvOworCWludCAgICAgICAgICAgICAgIHNoaWZ0OworCisJZm9yIChpID0gMDsgaSA8IGVpLT5uY2hpcHM7IGkrKykgeworCQllZ3BpbyA9ICYoZWktPmNoaXBbaV0pOworCQlpZiAoIWVncGlvLT5pc19vdXQpCisJCQljb250aW51ZTsKKworCQlmb3IgKHNoaWZ0ID0gMDsgc2hpZnQgPCBlZ3Bpby0+Y2hpcC5uZ3BpbzsKKwkJCQlzaGlmdCArPSAoMTw8ZWktPnJlZ19zaGlmdCkpIHsKKworCQkJaW50IHJlZyA9IGVncGlvLT5yZWdfc3RhcnQgKyBlZ3Bpb19wb3MoZWksIHNoaWZ0KTsKKworCQkJaWYgKCEoKGVncGlvLT5pc19vdXQgPj4gc2hpZnQpICYgZWktPnJlZ19tYXNrKSkKKwkJCQljb250aW51ZTsKKworCQkJcHJfZGVidWcoIkVHUElPOiBzZXR0aW5nICV4IHRvICV4LCB3YXMgJXhcbiIsIHJlZywKKwkJCQkoZWdwaW8tPmNhY2hlZF92YWx1ZXMgPj4gc2hpZnQpICYgZWktPnJlZ19tYXNrLAorCQkJCWVncGlvX3JlYWR3KGVpLCByZWcpKTsKKworCQkJZWdwaW9fd3JpdGV3KChlZ3Bpby0+Y2FjaGVkX3ZhbHVlcyA+PiBzaGlmdCkKKwkJCQkJJiBlaS0+cmVnX21hc2ssIGVpLCByZWcpOworCQl9CisJfQorfQorCisKKy8qCisgKiBTZXR1cAorICovCisKK3N0YXRpYyBpbnQgX19pbml0IGVncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGh0Y19lZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAgICpyZXM7CisJc3RydWN0IGVncGlvX2luZm8gKmVpOworCXN0cnVjdCBncGlvX2NoaXAgICpjaGlwOworCXVuc2lnbmVkIGludCAgICAgIGlycSwgaXJxX2VuZDsKKwlpbnQgICAgICAgICAgICAgICBpOworCWludCAgICAgICAgICAgICAgIHJldDsKKworCS8qIEluaXRpYWxpemUgZWkgZGF0YSBzdHJ1Y3R1cmUuICovCisJZWkgPSBremFsbG9jKHNpemVvZigqZWkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZlaS0+bG9jayk7CisKKwkvKiBGaW5kIGNoYWluZWQgaXJxICovCisJcmV0ID0gLUVJTlZBTDsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyZXMpCisJCWVpLT5jaGFpbmVkX2lycSA9IHJlcy0+c3RhcnQ7CisKKwkvKiBNYXAgZWdwaW8gY2hpcCBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlnb3RvIGZhaWw7CisJZWktPmJhc2VfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworCWlmICghZWktPmJhc2VfYWRkcikKKwkJZ290byBmYWlsOworCXByX2RlYnVnKCJFR1BJTyBwaHlzPSUwOHggdmlydD0lcFxuIiwgcmVzLT5zdGFydCwgZWktPmJhc2VfYWRkcik7CisKKwlpZiAoKHBkYXRhLT5idXNfd2lkdGggIT0gMTYpICYmIChwZGF0YS0+YnVzX3dpZHRoICE9IDMyKSkKKwkJZ290byBmYWlsOworCWVpLT5idXNfc2hpZnQgPSBmbHMocGRhdGEtPmJ1c193aWR0aCAtIDEpIC0gMzsKKwlwcl9kZWJ1ZygiYnVzX3NoaWZ0ID0gJWRcbiIsIGVpLT5idXNfc2hpZnQpOworCisJaWYgKChwZGF0YS0+cmVnX3dpZHRoICE9IDgpICYmIChwZGF0YS0+cmVnX3dpZHRoICE9IDE2KSkKKwkJZ290byBmYWlsOworCWVpLT5yZWdfc2hpZnQgPSBmbHMocGRhdGEtPnJlZ193aWR0aCAtIDEpOworCXByX2RlYnVnKCJyZWdfc2hpZnQgPSAlZFxuIiwgZWktPnJlZ19zaGlmdCk7CisKKwllaS0+cmVnX21hc2sgPSAoMSA8PCBwZGF0YS0+cmVnX3dpZHRoKSAtIDE7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlaSk7CisKKwllaS0+bmNoaXBzID0gcGRhdGEtPm51bV9jaGlwczsKKwllaS0+Y2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZ3Bpb19jaGlwKSAqIGVpLT5uY2hpcHMsIEdGUF9LRVJORUwpOworCWlmICghZWkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZWktPm5jaGlwczsgaSsrKSB7CisJCWVpLT5jaGlwW2ldLnJlZ19zdGFydCA9IHBkYXRhLT5jaGlwW2ldLnJlZ19zdGFydDsKKwkJZWktPmNoaXBbaV0uY2FjaGVkX3ZhbHVlcyA9IHBkYXRhLT5jaGlwW2ldLmluaXRpYWxfdmFsdWVzOworCQllaS0+Y2hpcFtpXS5pc19vdXQgPSBwZGF0YS0+Y2hpcFtpXS5kaXJlY3Rpb247CisJCWVpLT5jaGlwW2ldLmRldiA9ICYocGRldi0+ZGV2KTsKKwkJY2hpcCA9ICYoZWktPmNoaXBbaV0uY2hpcCk7CisJCWNoaXAtPmxhYmVsICAgICAgICAgICA9ICJodGMtZWdwaW8iOworCQljaGlwLT5nZXQgICAgICAgICAgICAgPSBlZ3Bpb19nZXQ7CisJCWNoaXAtPnNldCAgICAgICAgICAgICA9IGVncGlvX3NldDsKKwkJY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID0gZWdwaW9fZGlyZWN0aW9uX2lucHV0OworCQljaGlwLT5kaXJlY3Rpb25fb3V0cHV0ID0gZWdwaW9fZGlyZWN0aW9uX291dHB1dDsKKwkJY2hpcC0+YmFzZSAgICAgICAgICAgID0gcGRhdGEtPmNoaXBbaV0uZ3Bpb19iYXNlOworCQljaGlwLT5uZ3BpbyAgICAgICAgICAgPSBwZGF0YS0+Y2hpcFtpXS5udW1fZ3Bpb3M7CisKKwkJZ3Bpb2NoaXBfYWRkKGNoaXApOworCX0KKworCS8qIFNldCBpbml0aWFsIHBpbiB2YWx1ZXMgKi8KKwllZ3Bpb193cml0ZV9jYWNoZShlaSk7CisKKwllaS0+aXJxX3N0YXJ0ID0gcGRhdGEtPmlycV9iYXNlOworCWVpLT5uaXJxcyA9IHBkYXRhLT5udW1faXJxczsKKwllaS0+YWNrX3JlZ2lzdGVyID0gcGRhdGEtPmFja19yZWdpc3RlcjsKKworCWlmIChlaS0+Y2hhaW5lZF9pcnEpIHsKKwkJLyogU2V0dXAgaXJxIGhhbmRsZXJzICovCisJCWVpLT5hY2tfd3JpdGUgPSAweEZGRkY7CisJCWlmIChwZGF0YS0+aW52ZXJ0X2Fja3MpCisJCQllaS0+YWNrX3dyaXRlID0gMDsKKwkJaXJxX2VuZCA9IGVpLT5pcnFfc3RhcnQgKyBlaS0+bmlycXM7CisJCWZvciAoaXJxID0gZWktPmlycV9zdGFydDsgaXJxIDwgaXJxX2VuZDsgaXJxKyspIHsKKwkJCXNldF9pcnFfY2hpcChpcnEsICZlZ3Bpb19tdXhlZF9jaGlwKTsKKwkJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgZWkpOworCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX3NpbXBsZV9pcnEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJfQorCQlzZXRfaXJxX3R5cGUoZWktPmNoYWluZWRfaXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CisJCXNldF9pcnFfZGF0YShlaS0+Y2hhaW5lZF9pcnEsIGVpKTsKKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoZWktPmNoYWluZWRfaXJxLCBlZ3Bpb19oYW5kbGVyKTsKKwkJYWNrX2lycXMoZWkpOworCisJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlwcmludGsoS0VSTl9FUlIgIkVHUElPIGZhaWxlZCB0byBzZXR1cFxuIik7CisJa2ZyZWUoZWkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGVncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBlZ3Bpb19pbmZvICplaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGludCAgICAgIGlycSwgaXJxX2VuZDsKKworCWlmIChlaS0+Y2hhaW5lZF9pcnEpIHsKKwkJaXJxX2VuZCA9IGVpLT5pcnFfc3RhcnQgKyBlaS0+bmlycXM7CisJCWZvciAoaXJxID0gZWktPmlycV9zdGFydDsgaXJxIDwgaXJxX2VuZDsgaXJxKyspIHsKKwkJCXNldF9pcnFfY2hpcChpcnEsIE5VTEwpOworCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgTlVMTCk7CisJCQlzZXRfaXJxX2ZsYWdzKGlycSwgMCk7CisJCX0KKwkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoZWktPmNoYWluZWRfaXJxLCBOVUxMKTsKKwkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOworCX0KKwlpb3VubWFwKGVpLT5iYXNlX2FkZHIpOworCWtmcmVlKGVpLT5jaGlwKTsKKwlrZnJlZShlaSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBlZ3Bpb19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZWdwaW9faW5mbyAqZWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChlaS0+Y2hhaW5lZF9pcnEgJiYgZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCWVuYWJsZV9pcnFfd2FrZShlaS0+Y2hhaW5lZF9pcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVncGlvX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBlZ3Bpb19pbmZvICplaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGVpLT5jaGFpbmVkX2lycSAmJiBkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShlaS0+Y2hhaW5lZF9pcnEpOworCisJLyogVXBkYXRlIHJlZ2lzdGVycyBmcm9tIHRoZSBjYWNoZSwgaW4gY2FzZQorCSAgIHRoZSBDUExEIHdhcyBwb3dlcmVkIG9mZiBkdXJpbmcgc3VzcGVuZCAqLworCWVncGlvX3dyaXRlX2NhY2hlKGVpKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGVncGlvX3N1c3BlbmQgTlVMTAorI2RlZmluZSBlZ3Bpb19yZXN1bWUgTlVMTAorI2VuZGlmCisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWdwaW9fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImh0Yy1lZ3BpbyIsCisJfSwKKwkucmVtb3ZlICAgICAgID0gX19leGl0X3AoZWdwaW9fcmVtb3ZlKSwKKwkuc3VzcGVuZCAgICAgID0gZWdwaW9fc3VzcGVuZCwKKwkucmVzdW1lICAgICAgID0gZWdwaW9fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWdwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmVncGlvX2RyaXZlciwgZWdwaW9fcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZWdwaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlZ3Bpb19kcml2ZXIpOworfQorCisvKiBzdGFydCBlYXJseSBmb3IgZGVwZW5kZW5jaWVzICovCitzdWJzeXNfaW5pdGNhbGwoZWdwaW9faW5pdCk7Cittb2R1bGVfZXhpdChlZ3Bpb19leGl0KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJLZXZpbiBPJ0Nvbm5vciA8a2V2aW5Aa29jb25ub3IubmV0PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvaHRjLXBhc2ljMy5jIGIvZHJpdmVycy9tZmQvaHRjLXBhc2ljMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjZmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9odGMtcGFzaWMzLmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBDb3JlIGRyaXZlciBmb3IgSFRDIFBBU0lDMyBMRUQvRFMxV00gY2hpcC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUGhpbGlwcCBaYWJlbCA8cGhpbGlwcC56YWJlbEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RzMXdtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2h0Yy1wYXNpYzMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisKK3N0cnVjdCBwYXNpYzNfZGF0YSB7CisJdm9pZCBfX2lvbWVtICptYXBwaW5nOworCXVuc2lnbmVkIGludCBidXNfc2hpZnQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHMxd21fcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpsZWRfcGRldjsKK307CisKKyNkZWZpbmUgUkVHX0FERFIgIDUKKyNkZWZpbmUgUkVHX0RBVEEgIDYKKyNkZWZpbmUgTlVNX1JFR1MgIDcKKworI2RlZmluZSBSRUFEX01PREUgMHg4MAorCisvKgorICogd3JpdGUgdG8gYSBzZWNvbmRhcnkgcmVnaXN0ZXIgb24gdGhlIFBBU0lDMworICovCit2b2lkIHBhc2ljM193cml0ZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgcGFzaWMzX2RhdGEgKmFzaWMgPSBkZXYtPmRyaXZlcl9kYXRhOworCWludCBidXNfc2hpZnQgPSBhc2ljLT5idXNfc2hpZnQ7CisJdm9pZCBfX2lvbWVtICphZGRyID0gYXNpYy0+bWFwcGluZyArIChSRUdfQUREUiA8PCBidXNfc2hpZnQpOworCXZvaWQgX19pb21lbSAqZGF0YSA9IGFzaWMtPm1hcHBpbmcgKyAoUkVHX0RBVEEgPDwgYnVzX3NoaWZ0KTsKKworCV9fcmF3X3dyaXRlYih+UkVBRF9NT0RFICYgcmVnLCBhZGRyKTsKKwlfX3Jhd193cml0ZWIodmFsLCBkYXRhKTsKK30KK0VYUE9SVF9TWU1CT0wocGFzaWMzX3dyaXRlX3JlZ2lzdGVyKTsgLyogZm9yIGxlZHMtcGFzaWMzICovCisKKy8qCisgKiByZWFkIGZyb20gYSBzZWNvbmRhcnkgcmVnaXN0ZXIgb24gdGhlIFBBU0lDMworICovCit1OCBwYXNpYzNfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiByZWcpCit7CisJc3RydWN0IHBhc2ljM19kYXRhICphc2ljID0gZGV2LT5kcml2ZXJfZGF0YTsKKwlpbnQgYnVzX3NoaWZ0ID0gYXNpYy0+YnVzX3NoaWZ0OworCXZvaWQgX19pb21lbSAqYWRkciA9IGFzaWMtPm1hcHBpbmcgKyAoUkVHX0FERFIgPDwgYnVzX3NoaWZ0KTsKKwl2b2lkIF9faW9tZW0gKmRhdGEgPSBhc2ljLT5tYXBwaW5nICsgKFJFR19EQVRBIDw8IGJ1c19zaGlmdCk7CisKKwlfX3Jhd193cml0ZWIoUkVBRF9NT0RFIHwgcmVnLCBhZGRyKTsKKwlyZXR1cm4gX19yYXdfcmVhZGIoZGF0YSk7Cit9CitFWFBPUlRfU1lNQk9MKHBhc2ljM19yZWFkX3JlZ2lzdGVyKTsgLyogZm9yIGxlZHMtcGFzaWMzICovCisKKy8qCisgKiBMRURzCisgKi8KKworc3RhdGljIGludCBsZWRfZGV2aWNlX2FkZChzdHJ1Y3QgZGV2aWNlICpwYXNpYzNfZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwYXNpYzNfbGVkc19tYWNoaW5mbyAqcGRhdGEpCit7CisJc3RydWN0IHBhc2ljM19kYXRhICphc2ljID0gcGFzaWMzX2Rldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgcmV0OworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicGFzaWMzLWxlZCIsIC0xKTsKKwlpZiAoIXBkZXYpIHsKKwkJZGV2X2RiZyhwYXNpYzNfZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIExFRCBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgcGRhdGEsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGFzaWMzX2xlZHNfbWFjaGluZm8pKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZGJnKHBhc2ljM19kZXYsICJmYWlsZWQgdG8gYWRkIExFRCBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJZ290byBleGl0X3BkZXZfcHV0OworCX0KKworCXBkZXYtPmRldi5wYXJlbnQgPSBwYXNpYzNfZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2RiZyhwYXNpYzNfZGV2LCAiZmFpbGVkIHRvIGFkZCBMRUQgcGxhdGZvcm0gZGV2aWNlXG4iKTsKKwkJZ290byBleGl0X3BkZXZfcHV0OworCX0KKworCWFzaWMtPmxlZF9wZGV2ID0gcGRldjsKKwlyZXR1cm4gMDsKKworZXhpdF9wZGV2X3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEUzFXTQorICovCisKK3N0YXRpYyB2b2lkIGRzMXdtX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CisJaW50IGM7CisKKwljID0gcGFzaWMzX3JlYWRfcmVnaXN0ZXIoZGV2LCAweDI4KTsKKwlwYXNpYzNfd3JpdGVfcmVnaXN0ZXIoZGV2LCAweDI4LCBjICYgMHg3Zik7CisKKwlkZXZfZGJnKGRldiwgIkRTMVdNIE9XTV9FTiBsb3cgKGFjdGl2ZSkgJTAyeFxuIiwgYyAmIDB4N2YpOworfQorCitzdGF0aWMgdm9pZCBkczF3bV9kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGRldi0+ZGV2LnBhcmVudDsKKwlpbnQgYzsKKworCWMgPSBwYXNpYzNfcmVhZF9yZWdpc3RlcihkZXYsIDB4MjgpOworCXBhc2ljM193cml0ZV9yZWdpc3RlcihkZXYsIDB4MjgsIGMgfCAweDgwKTsKKworCWRldl9kYmcoZGV2LCAiRFMxV00gT1dNX0VOIGhpZ2ggKGluYWN0aXZlKSAlMDJ4XG4iLCBjIHwgMHg4MCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHMxd21fcGxhdGZvcm1fZGF0YSBkczF3bV9wZGF0YSA9IHsKKwkuYnVzX3NoaWZ0ID0gMiwKKwkuZW5hYmxlICAgID0gZHMxd21fZW5hYmxlLAorCS5kaXNhYmxlICAgPSBkczF3bV9kaXNhYmxlLAorfTsKKworc3RhdGljIGludCBkczF3bV9kZXZpY2VfYWRkKHN0cnVjdCBkZXZpY2UgKnBhc2ljM19kZXYsIGludCBidXNfc2hpZnQpCit7CisJc3RydWN0IHBhc2ljM19kYXRhICphc2ljID0gcGFzaWMzX2Rldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgcmV0OworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiZHMxd20iLCAtMSk7CisJaWYgKCFwZGV2KSB7CisJCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBEUzFXTSBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCBwZGV2LT5yZXNvdXJjZSwKKwkJCQkJCXBkZXYtPm51bV9yZXNvdXJjZXMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhZGQgRFMxV00gcmVzb3VyY2VzXG4iKTsKKwkJZ290byBleGl0X3BkZXZfcHV0OworCX0KKworCWRzMXdtX3BkYXRhLmJ1c19zaGlmdCA9IGFzaWMtPmJ1c19zaGlmdDsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJmRzMXdtX3BkYXRhLAorCQkJCQlzaXplb2Yoc3RydWN0IGRzMXdtX3BsYXRmb3JtX2RhdGEpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZGJnKHBhc2ljM19kZXYsICJmYWlsZWQgdG8gYWRkIERTMVdNIHBsYXRmb3JtIGRhdGFcbiIpOworCQlnb3RvIGV4aXRfcGRldl9wdXQ7CisJfQorCisJcGRldi0+ZGV2LnBhcmVudCA9IHBhc2ljM19kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZGJnKHBhc2ljM19kZXYsICJmYWlsZWQgdG8gYWRkIERTMVdNIHBsYXRmb3JtIGRldmljZVxuIik7CisJCWdvdG8gZXhpdF9wZGV2X3B1dDsKKwl9CisKKwlhc2ljLT5kczF3bV9wZGV2ID0gcGRldjsKKwlyZXR1cm4gMDsKKworZXhpdF9wZGV2X3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBhc2ljM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwYXNpYzNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBwYXNpYzNfZGF0YSAqYXNpYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldDsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcikKKwkJcmV0dXJuIC1FTlhJTzsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEsICJwYXNpYzMiKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWFzaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFzaWMzX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFzaWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYXNpYyk7CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmJ1c19zaGlmdCkKKwkJYXNpYy0+YnVzX3NoaWZ0ID0gcGRhdGEtPmJ1c19zaGlmdDsKKwllbHNlCisJCWFzaWMtPmJ1c19zaGlmdCA9IDI7CisKKwlhc2ljLT5tYXBwaW5nID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlpZiAoIWFzaWMtPm1hcHBpbmcpIHsKKwkJZGV2X2VycihkZXYsICJjb3VsZG4ndCBpb3JlbWFwIFBBU0lDM1xuIik7CisJCWtmcmVlKGFzaWMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBkczF3bV9kZXZpY2VfYWRkKGRldiwgYXNpYy0+YnVzX3NoaWZ0KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERTMVdNXG4iKTsKKworCWlmIChwZGF0YS0+bGVkX3BkYXRhKSB7CisJCXJldCA9IGxlZF9kZXZpY2VfYWRkKGRldiwgcGRhdGEtPmxlZF9wZGF0YSk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIExFRCBkZXZpY2VcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhc2ljM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGFzaWMzX2RhdGEgKmFzaWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisKKwlpZiAoYXNpYy0+bGVkX3BkZXYpCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFzaWMtPmxlZF9wZGV2KTsKKwlpZiAoYXNpYy0+ZHMxd21fcGRldikKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXNpYy0+ZHMxd21fcGRldik7CisKKwlpb3VubWFwKGFzaWMtPm1hcHBpbmcpOworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlrZnJlZShhc2ljKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGFzaWMzX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicGFzaWMzIiwKKwl9LAorCS5yZW1vdmUJCT0gcGFzaWMzX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBhc2ljM19iYXNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZwYXNpYzNfZHJpdmVyLCBwYXNpYzNfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFzaWMzX2Jhc2VfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwYXNpYzNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGFzaWMzX2Jhc2VfaW5pdCk7Cittb2R1bGVfZXhpdChwYXNpYzNfYmFzZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiUGhpbGlwcCBaYWJlbCA8cGhpbGlwcC56YWJlbEBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvcmUgZHJpdmVyIGZvciBIVEMgUEFTSUMzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zbTUwMS5jIGIvZHJpdmVycy9tZmQvc201MDEuYwppbmRleCBhZmQ4Mjk2Li4xM2JhYzUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvc201MDEuYworKysgYi9kcml2ZXJzL21mZC9zbTUwMS5jCkBAIC00OCwzMSArNDgsMTMgQEAKIAl1bnNpZ25lZCBpbnQJCQkgcGRldl9pZDsKIAl1bnNpZ25lZCBpbnQJCQkgaXJxOwogCXZvaWQgX19pb21lbQkJCSpyZWdzOworCXVuc2lnbmVkIGludAkJCSByZXY7CiB9OwogCiAjZGVmaW5lIE1IWiAoMTAwMCAqIDEwMDApCiAKICNpZmRlZiBERUJVRwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXNjX2RpdltdID0gewotCVswXQkJPSAxLAotCVsxXQkJPSAyLAotCVsyXQkJPSA0LAotCVszXQkJPSA4LAotCVs0XQkJPSAxNiwKLQlbNV0JCT0gMzIsCi0JWzZdCQk9IDY0LAotCVs3XQkJPSAxMjgsCi0JWzhdCQk9IDMsCi0JWzldCQk9IDYsCi0JWzEwXQkJPSAxMiwKLQlbMTFdCQk9IDI0LAotCVsxMl0JCT0gNDgsCi0JWzEzXQkJPSA5NiwKLQlbMTRdCQk9IDE5MiwKLQlbMTVdCQk9IDM4NCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcHhfZGl2W10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRpdl90YWJbXSA9IHsKIAlbMF0JCT0gMSwKIAlbMV0JCT0gMiwKIAlbMl0JCT0gNCwKQEAgLTEwMSwxMiArODMsMTIgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVjb2RlX2Rpdih1bnNpZ25lZCBsb25nIHBsbDIsIHVuc2lnbmVkIGxvbmcgdmFsLAogCQkJCXVuc2lnbmVkIGludCBsc2hmdCwgdW5zaWduZWQgaW50IHNlbGJpdCwKLQkJCQl1bnNpZ25lZCBsb25nIG1hc2ssIGNvbnN0IHVuc2lnbmVkIGludCAqZHRhYikKKwkJCQl1bnNpZ25lZCBsb25nIG1hc2spCiB7CiAJaWYgKHZhbCAmIHNlbGJpdCkKIAkJcGxsMiA9IDI4OCAqIE1IWjsKIAotCXJldHVybiBwbGwyIC8gZHRhYlsodmFsID4+IGxzaGZ0KSAmIG1hc2tdOworCXJldHVybiBwbGwyIC8gZGl2X3RhYlsodmFsID4+IGxzaGZ0KSAmIG1hc2tdOwogfQogCiAjZGVmaW5lIGZtdF9mcmVxKHgpICgoeCkgLyBNSFopLCAoKHgpICUgTUhaKSwgKHgpCkBAIC0xNDEsMTAgKzEyMywxMCBAQAogCX0KIAogCXNkY2xrMCA9IChtaXNjdCAmICgxPDwxMikpID8gcGxsMiA6IDI4OCAqIE1IWjsKLQlzZGNsazAgLz0gbWlzY19kaXZbKChtaXNjdCA+PiA4KSAmIDB4ZildOworCXNkY2xrMCAvPSBkaXZfdGFiWygobWlzY3QgPj4gOCkgJiAweGYpXTsKIAogCXNkY2xrMSA9IChtaXNjdCAmICgxPDwyMCkpID8gcGxsMiA6IDI4OCAqIE1IWjsKLQlzZGNsazEgLz0gbWlzY19kaXZbKChtaXNjdCA+PiAxNikgJiAweGYpXTsKKwlzZGNsazEgLz0gZGl2X3RhYlsoKG1pc2N0ID4+IDE2KSAmIDB4ZildOwogCiAJZGV2X2RiZyhzbS0+ZGV2LCAiTUlTQ1Q9JTA4bHgsIFBNMD0lMDhseCwgUE0xPSUwOGx4XG4iLAogCQltaXNjdCwgcG0wLCBwbTEpOwpAQCAtMTU4LDE5ICsxNDAsMTkgQEAKIAkJICJQMiAlbGQuJWxkIE1IeiAoJWxkKSwgVjIgJWxkLiVsZCAoJWxkKSwgIgogCQkgIk0gJWxkLiVsZCAoJWxkKSwgTVgxICVsZC4lbGQgKCVsZClcbiIsCiAJCSAocG1jICYgMyApID09IDAgPyAnKicgOiAnLScsCi0JCSBmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMCwgMjQsIDE8PDI5LCAzMSwgcHhfZGl2KSksCi0JCSBmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMCwgMTYsIDE8PDIwLCAxNSwgbWlzY19kaXYpKSwKLQkJIGZtdF9mcmVxKGRlY29kZV9kaXYocGxsMiwgcG0wLCA4LCAgMTw8MTIsIDE1LCBtaXNjX2RpdikpLAotCQkgZm10X2ZyZXEoZGVjb2RlX2RpdihwbGwyLCBwbTAsIDAsICAxPDw0LCAgMTUsIG1pc2NfZGl2KSkpOworCQkgZm10X2ZyZXEoZGVjb2RlX2RpdihwbGwyLCBwbTAsIDI0LCAxPDwyOSwgMzEpKSwKKwkJIGZtdF9mcmVxKGRlY29kZV9kaXYocGxsMiwgcG0wLCAxNiwgMTw8MjAsIDE1KSksCisJCSBmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMCwgOCwgIDE8PDEyLCAxNSkpLAorCQkgZm10X2ZyZXEoZGVjb2RlX2RpdihwbGwyLCBwbTAsIDAsICAxPDw0LCAgMTUpKSk7CiAKIAlkZXZfZGJnKHNtLT5kZXYsICJQTTFbJWNdOiAiCiAJCSJQMiAlbGQuJWxkIE1IeiAoJWxkKSwgVjIgJWxkLiVsZCAoJWxkKSwgIgogCQkiTSAlbGQuJWxkICglbGQpLCBNWDEgJWxkLiVsZCAoJWxkKVxuIiwKIAkJKHBtYyAmIDMgKSA9PSAxID8gJyonIDogJy0nLAotCQlmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMSwgMjQsIDE8PDI5LCAzMSwgcHhfZGl2KSksCi0JCWZtdF9mcmVxKGRlY29kZV9kaXYocGxsMiwgcG0xLCAxNiwgMTw8MjAsIDE1LCBtaXNjX2RpdikpLAotCQlmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMSwgOCwgIDE8PDEyLCAxNSwgbWlzY19kaXYpKSwKLQkJZm10X2ZyZXEoZGVjb2RlX2RpdihwbGwyLCBwbTEsIDAsICAxPDw0LCAgMTUsIG1pc2NfZGl2KSkpOworCQlmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMSwgMjQsIDE8PDI5LCAzMSkpLAorCQlmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMSwgMTYsIDE8PDIwLCAxNSkpLAorCQlmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMSwgOCwgIDE8PDEyLCAxNSkpLAorCQlmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMSwgMCwgIDE8PDQsICAxNSkpKTsKIH0KIAogc3RhdGljIHZvaWQgc201MDFfZHVtcF9yZWdzKHN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSkKQEAgLTQzNiw0NiArNDE4LDEwOCBAQAogCXVuc2lnbmVkIGxvbmcgbWNsazsKIAlpbnQgZGl2aWRlcjsKIAlpbnQgc2hpZnQ7CisJdW5zaWduZWQgaW50IG0sIG4sIGs7CiB9OwogCisvKiBzbTUwMV9jYWxjX2Nsb2NrCisgKgorICogQ2FsY3VsYXRlcyB0aGUgbmVhcmVzdCBkaXNjcmV0ZSBjbG9jayBmcmVxdWVuY3kgdGhhdAorICogY2FuIGJlIGFjaGlldmVkIHdpdGggdGhlIHNwZWNpZmllZCBpbnB1dCBjbG9jay4KKyAqICAgdGhlIG1heGltdW0gZGl2aXNvciBpcyAzIG9yIDUKKyAqLworCitzdGF0aWMgaW50IHNtNTAxX2NhbGNfY2xvY2sodW5zaWduZWQgbG9uZyBmcmVxLAorCQkJICAgIHN0cnVjdCBzbTUwMV9jbG9jayAqY2xvY2ssCisJCQkgICAgaW50IG1heF9kaXYsCisJCQkgICAgdW5zaWduZWQgbG9uZyBtY2xrLAorCQkJICAgIGxvbmcgKmJlc3RfZGlmZikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZGl2aWRlcjsKKwlpbnQgc2hpZnQ7CisJbG9uZyBkaWZmOworCisJLyogdHJ5IGRpdmlkZXJzIDEgYW5kIDMgZm9yIENSVCBhbmQgZm9yIHBhbmVsLAorCSAgIHRyeSBkaXZpZGVyIDUgZm9yIHBhbmVsIG9ubHkuKi8KKworCWZvciAoZGl2aWRlciA9IDE7IGRpdmlkZXIgPD0gbWF4X2RpdjsgZGl2aWRlciArPSAyKSB7CisJCS8qIHRyeSBhbGwgOCBzaGlmdCB2YWx1ZXMuKi8KKwkJZm9yIChzaGlmdCA9IDA7IHNoaWZ0IDwgODsgc2hpZnQrKykgeworCQkJLyogQ2FsY3VsYXRlIGRpZmZlcmVuY2UgdG8gcmVxdWVzdGVkIGNsb2NrICovCisJCQlkaWZmID0gc201MDFmYl9yb3VuZF9kaXYobWNsaywgZGl2aWRlciA8PCBzaGlmdCkgLSBmcmVxOworCQkJaWYgKGRpZmYgPCAwKQorCQkJCWRpZmYgPSAtZGlmZjsKKworCQkJLyogSWYgaXQgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50LCB1c2UgaXQgKi8KKwkJCWlmIChkaWZmIDwgKmJlc3RfZGlmZikgeworCQkJCSpiZXN0X2RpZmYgPSBkaWZmOworCisJCQkJY2xvY2stPm1jbGsgPSBtY2xrOworCQkJCWNsb2NrLT5kaXZpZGVyID0gZGl2aWRlcjsKKwkJCQljbG9jay0+c2hpZnQgPSBzaGlmdDsKKwkJCQlyZXQgPSAxOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogc201MDFfY2FsY19wbGwKKyAqCisgKiBDYWxjdWxhdGVzIHRoZSBuZWFyZXN0IGRpc2NyZXRlIGNsb2NrIGZyZXF1ZW5jeSB0aGF0IGNhbiBiZQorICogYWNoaWV2ZWQgdXNpbmcgdGhlIHByb2dyYW1tYWJsZSBQTEwuCisgKiAgIHRoZSBtYXhpbXVtIGRpdmlzb3IgaXMgMyBvciA1CisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc201MDFfY2FsY19wbGwodW5zaWduZWQgbG9uZyBmcmVxLAorCQkJCQlzdHJ1Y3Qgc201MDFfY2xvY2sgKmNsb2NrLAorCQkJCQlpbnQgbWF4X2RpdikKK3sKKwl1bnNpZ25lZCBsb25nIG1jbGs7CisJdW5zaWduZWQgaW50IG0sIG4sIGs7CisJbG9uZyBiZXN0X2RpZmYgPSA5OTk5OTk5OTk7CisKKwkvKgorCSAqIFRoZSBTTTUwMiBkYXRhc2hlZXQgZG9lc24ndCBzcGVjaWZ5IHRoZSBtaW4vbWF4IHZhbHVlcyBmb3IgTSBhbmQgTi4KKwkgKiBOID0gMSBhdCBsZWFzdCBkb2Vzbid0IHdvcmsgaW4gcHJhY3RpY2UuCisJICovCisJZm9yIChtID0gMjsgbSA8PSAyNTU7IG0rKykgeworCQlmb3IgKG4gPSAyOyBuIDw9IDEyNzsgbisrKSB7CisJCQlmb3IgKGsgPSAwOyBrIDw9IDE7IGsrKykgeworCQkJCW1jbGsgPSAoMjQwMDAwMDBVTCAqIG0gLyBuKSA+PiBrOworCisJCQkJaWYgKHNtNTAxX2NhbGNfY2xvY2soZnJlcSwgY2xvY2ssIG1heF9kaXYsCisJCQkJCQkgICAgIG1jbGssICZiZXN0X2RpZmYpKSB7CisJCQkJCWNsb2NrLT5tID0gbTsKKwkJCQkJY2xvY2stPm4gPSBuOworCQkJCQljbG9jay0+ayA9IGs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogUmV0dXJuIGJlc3QgY2xvY2suICovCisJcmV0dXJuIGNsb2NrLT5tY2xrIC8gKGNsb2NrLT5kaXZpZGVyIDw8IGNsb2NrLT5zaGlmdCk7Cit9CisKIC8qIHNtNTAxX3NlbGVjdF9jbG9jawogICoKLSAqIHNlbGVjdHMgbmVhcmVzdCBkaXNjcmV0ZSBjbG9jayBmcmVxdWVuY3kgdGhlIFNNNTAxIGNhbiBhY2hpdmUKKyAqIENhbGN1bGF0ZXMgdGhlIG5lYXJlc3QgZGlzY3JldGUgY2xvY2sgZnJlcXVlbmN5IHRoYXQgY2FuIGJlCisgKiBhY2hpZXZlZCB1c2luZyB0aGUgMjg4TUh6IGFuZCAzMzZNSHogUExMcy4KICAqICAgdGhlIG1heGltdW0gZGl2aXNvciBpcyAzIG9yIDUKICAqLworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbTUwMV9zZWxlY3RfY2xvY2sodW5zaWduZWQgbG9uZyBmcmVxLAogCQkJCQlzdHJ1Y3Qgc201MDFfY2xvY2sgKmNsb2NrLAogCQkJCQlpbnQgbWF4X2RpdikKIHsKIAl1bnNpZ25lZCBsb25nIG1jbGs7Ci0JaW50IGRpdmlkZXI7Ci0JaW50IHNoaWZ0OwotCWxvbmcgZGlmZjsKIAlsb25nIGJlc3RfZGlmZiA9IDk5OTk5OTk5OTsKIAogCS8qIFRyeSAyODhNSHogYW5kIDMzNk1IeiBjbG9ja3MuICovCiAJZm9yIChtY2xrID0gMjg4MDAwMDAwOyBtY2xrIDw9IDMzNjAwMDAwMDsgbWNsayArPSA0ODAwMDAwMCkgewotCQkvKiB0cnkgZGl2aWRlcnMgMSBhbmQgMyBmb3IgQ1JUIGFuZCBmb3IgcGFuZWwsCi0JCSAgIHRyeSBkaXZpZGVyIDUgZm9yIHBhbmVsIG9ubHkuKi8KLQotCQlmb3IgKGRpdmlkZXIgPSAxOyBkaXZpZGVyIDw9IG1heF9kaXY7IGRpdmlkZXIgKz0gMikgewotCQkJLyogdHJ5IGFsbCA4IHNoaWZ0IHZhbHVlcy4qLwotCQkJZm9yIChzaGlmdCA9IDA7IHNoaWZ0IDwgODsgc2hpZnQrKykgewotCQkJCS8qIENhbGN1bGF0ZSBkaWZmZXJlbmNlIHRvIHJlcXVlc3RlZCBjbG9jayAqLwotCQkJCWRpZmYgPSBzbTUwMWZiX3JvdW5kX2RpdihtY2xrLCBkaXZpZGVyIDw8IHNoaWZ0KSAtIGZyZXE7Ci0JCQkJaWYgKGRpZmYgPCAwKQotCQkJCQlkaWZmID0gLWRpZmY7Ci0KLQkJCQkvKiBJZiBpdCBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQsIHVzZSBpdCAqLwotCQkJCWlmIChkaWZmIDwgYmVzdF9kaWZmKSB7Ci0JCQkJCWJlc3RfZGlmZiA9IGRpZmY7Ci0KLQkJCQkJY2xvY2stPm1jbGsgPSBtY2xrOwotCQkJCQljbG9jay0+ZGl2aWRlciA9IGRpdmlkZXI7Ci0JCQkJCWNsb2NrLT5zaGlmdCA9IHNoaWZ0OwotCQkJCX0KLQkJCX0KLQkJfQorCQlzbTUwMV9jYWxjX2Nsb2NrKGZyZXEsIGNsb2NrLCBtYXhfZGl2LCBtY2xrLCAmYmVzdF9kaWZmKTsKIAl9CiAKIAkvKiBSZXR1cm4gYmVzdCBjbG9jay4gKi8KQEAgLTQ5Nyw2ICs1NDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZ2F0ZSA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfQ1VSUkVOVF9HQVRFKTsKIAl1bnNpZ25lZCBsb25nIGNsb2NrID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9DVVJSRU5UX0NMT0NLKTsKIAl1bnNpZ25lZCBjaGFyIHJlZzsKKwl1bnNpZ25lZCBpbnQgcGxsX3JlZyA9IDA7CiAJdW5zaWduZWQgbG9uZyBzbTUwMV9mcmVxOyAvKiB0aGUgYWN0dWFsIGZyZXF1ZW5jeSBhY2hlaXZlZCAqLwogCiAJc3RydWN0IHNtNTAxX2Nsb2NrIHRvOwpAQCAtNTExLDE0ICs1NTYsMjggQEAKIAkJICogcmVxdWVzdGVkIGZyZXF1ZW5jeSB0aGUgdmFsdWUgbXVzdCBiZSBtdWx0aXBsaWVkIGJ5CiAJCSAqIDIuIFRoaXMgY2xvY2sgYWxzbyBoYXMgYW4gYWRkaXRpb25hbCBwcmUgZGl2aXNvciAqLwogCi0JCXNtNTAxX2ZyZXEgPSAoc201MDFfc2VsZWN0X2Nsb2NrKDIgKiByZXFfZnJlcSwgJnRvLCA1KSAvIDIpOwotCQlyZWc9dG8uc2hpZnQgJiAweDA3Oy8qIGJvdHRvbSAzIGJpdHMgYXJlIHNoaWZ0ICovCi0JCWlmICh0by5kaXZpZGVyID09IDMpCi0JCQlyZWcgfD0gMHgwODsgLyogLzMgZGl2aWRlciByZXF1aXJlZCAqLwotCQllbHNlIGlmICh0by5kaXZpZGVyID09IDUpCi0JCQlyZWcgfD0gMHgxMDsgLyogLzUgZGl2aWRlciByZXF1aXJlZCAqLwotCQlpZiAodG8ubWNsayAhPSAyODgwMDAwMDApCi0JCQlyZWcgfD0gMHgyMDsgLyogd2hpY2ggbWNsayBwbGwgaXMgc291cmNlICovCisJCWlmIChzbS0+cmV2ID49IDB4QzApIHsKKwkJCS8qIFNNNTAyIC0+IHVzZSB0aGUgcHJvZ3JhbW1hYmxlIFBMTCAqLworCQkJc201MDFfZnJlcSA9IChzbTUwMV9jYWxjX3BsbCgyICogcmVxX2ZyZXEsCisJCQkJCQkgICAgICZ0bywgNSkgLyAyKTsKKwkJCXJlZyA9IHRvLnNoaWZ0ICYgMHgwNzsvKiBib3R0b20gMyBiaXRzIGFyZSBzaGlmdCAqLworCQkJaWYgKHRvLmRpdmlkZXIgPT0gMykKKwkJCQlyZWcgfD0gMHgwODsgLyogLzMgZGl2aWRlciByZXF1aXJlZCAqLworCQkJZWxzZSBpZiAodG8uZGl2aWRlciA9PSA1KQorCQkJCXJlZyB8PSAweDEwOyAvKiAvNSBkaXZpZGVyIHJlcXVpcmVkICovCisJCQlyZWcgfD0gMHg0MDsgLyogc2VsZWN0IHRoZSBwcm9ncmFtbWFibGUgUExMICovCisJCQlwbGxfcmVnID0gMHgyMDAwMCB8ICh0by5rIDw8IDE1KSB8ICh0by5uIDw8IDgpIHwgdG8ubTsKKwkJfSBlbHNlIHsKKwkJCXNtNTAxX2ZyZXEgPSAoc201MDFfc2VsZWN0X2Nsb2NrKDIgKiByZXFfZnJlcSwKKwkJCQkJCQkgJnRvLCA1KSAvIDIpOworCQkJcmVnID0gdG8uc2hpZnQgJiAweDA3Oy8qIGJvdHRvbSAzIGJpdHMgYXJlIHNoaWZ0ICovCisJCQlpZiAodG8uZGl2aWRlciA9PSAzKQorCQkJCXJlZyB8PSAweDA4OyAvKiAvMyBkaXZpZGVyIHJlcXVpcmVkICovCisJCQllbHNlIGlmICh0by5kaXZpZGVyID09IDUpCisJCQkJcmVnIHw9IDB4MTA7IC8qIC81IGRpdmlkZXIgcmVxdWlyZWQgKi8KKwkJCWlmICh0by5tY2xrICE9IDI4ODAwMDAwMCkKKwkJCQlyZWcgfD0gMHgyMDsgLyogd2hpY2ggbWNsayBwbGwgaXMgc291cmNlICovCisJCX0KIAkJYnJlYWs7CiAKIAljYXNlIFNNNTAxX0NMT0NLX1YyWENMSzoKQEAgLTU3OSw2ICs2MzgsMTAgQEAKIAl9CiAKIAl3cml0ZWwobW9kZSwgc20tPnJlZ3MgKyBTTTUwMV9QT1dFUl9NT0RFX0NPTlRST0wpOworCisJaWYgKHBsbF9yZWcpCisJCXdyaXRlbChwbGxfcmVnLCBzbS0+cmVncyArIFNNNTAxX1BST0dSQU1NQUJMRV9QTExfQ09OVFJPTCk7CisKIAlzbTUwMV9zeW5jX3JlZ3Moc20pOwogCiAJZGV2X2luZm8oc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLApAQCAtNTk5LDE1ICs2NjIsMjQgQEAKICAqIGZpbmRzIHRoZSBjbG9zZXN0IGF2YWlsYWJsZSBmcmVxdWVuY3kgZm9yIGEgZ2l2ZW4gY2xvY2sKICovCiAKLXVuc2lnbmVkIGxvbmcgc201MDFfZmluZF9jbG9jayhpbnQgY2xrc3JjLAordW5zaWduZWQgbG9uZyBzbTUwMV9maW5kX2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBpbnQgY2xrc3JjLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcmVxX2ZyZXEpCiB7CisJc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZyBzbTUwMV9mcmVxOyAvKiB0aGUgZnJlcXVlbmN5IGFjaGl2ZWFibGUgYnkgdGhlIDUwMSAqLwogCXN0cnVjdCBzbTUwMV9jbG9jayB0bzsKIAogCXN3aXRjaCAoY2xrc3JjKSB7CiAJY2FzZSBTTTUwMV9DTE9DS19QMlhDTEs6Ci0JCXNtNTAxX2ZyZXEgPSAoc201MDFfc2VsZWN0X2Nsb2NrKDIgKiByZXFfZnJlcSwgJnRvLCA1KSAvIDIpOworCQlpZiAoc20tPnJldiA+PSAweEMwKSB7CisJCQkvKiBTTTUwMiAtPiB1c2UgdGhlIHByb2dyYW1tYWJsZSBQTEwgKi8KKwkJCXNtNTAxX2ZyZXEgPSAoc201MDFfY2FsY19wbGwoMiAqIHJlcV9mcmVxLAorCQkJCQkJICAgICAmdG8sIDUpIC8gMik7CisJCX0gZWxzZSB7CisJCQlzbTUwMV9mcmVxID0gKHNtNTAxX3NlbGVjdF9jbG9jaygyICogcmVxX2ZyZXEsCisJCQkJCQkJICZ0bywgNSkgLyAyKTsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgU001MDFfQ0xPQ0tfVjJYQ0xLOgpAQCAtOTE0LDYgKzk4Niw4IEBACiAJZGV2X2luZm8oc20tPmRldiwgIlNNNTAxIEF0ICVwOiBWZXJzaW9uICUwOGx4LCAlbGQgTWIsIElSUSAlZFxuIiwKIAkJIHNtLT5yZWdzLCBkZXZpZCwgKHVuc2lnbmVkIGxvbmcpbWVtX2F2YWlsID4+IDIwLCBzbS0+aXJxKTsKIAorCXNtLT5yZXYgPSBkZXZpZCAmIFNNNTAxX0RFVklDRUlEX1JFVk1BU0s7CisKIAlzbTUwMV9kdW1wX2dhdGUoc20pOwogCiAJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKHNtLT5kZXYsICZkZXZfYXR0cl9kYmdfcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMgYi9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKaW5kZXggZmRiYWE3Ny4uNWU4NTk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29sbGllLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCAxYWJjOTVjLi5iYjk0Y2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMjIsNiArMjIsMzkgQEAKIAkgIHB1cnBvc2VzIGluY2x1ZGluZyBzb2Z0d2FyZSBjb250cm9sbGVkIHBvd2VyLWVmZmljZW50IGJhY2tsaWdodHMKIAkgIG9uIExDRCBkaXNwbGF5cywgbW90b3IgY29udHJvbCwgYW5kIHdhdmVmb3JtIGdlbmVyYXRpb24uCiAKK2NvbmZpZyBBVE1FTF9UQ0xJQgorCWJvb2wgIkF0bWVsIEFUMzIvQVQ5MSBUaW1lci9Db3VudGVyIExpYnJhcnkiCisJZGVwZW5kcyBvbiAoQVZSMzIgfHwgQVJDSF9BVDkxKQorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IGEgbGlicmFyeSB0byBhbGxvY2F0ZSB0aGUgVGltZXIvQ291bnRlcgorCSAgYmxvY2tzIGZvdW5kIG9uIG1hbnkgQXRtZWwgcHJvY2Vzc29ycy4gIFRoaXMgZmFjaWxpdGF0ZXMgdXNpbmcKKwkgIHRoZXNlIGJsb2NrcyBieSBkaWZmZXJlbnQgZHJpdmVycyBkZXNwaXRlIHByb2Nlc3NvciBkaWZmZXJlbmNlcy4KKworY29uZmlnIEFUTUVMX1RDQl9DTEtTUkMKKwlib29sICJUQyBCbG9jayBDbG9ja3NvdXJjZSIKKwlkZXBlbmRzIG9uIEFUTUVMX1RDTElCICYmIEdFTkVSSUNfVElNRQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIHRvIGdldCBhIGhpZ2ggcHJlY2lzaW9uIGNsb2Nrc291cmNlIGJhc2VkIG9uIGEKKwkgIFRDIGJsb2NrIHdpdGggYSA1KyBNSHogYmFzZSBjbG9jayByYXRlLiAgVHdvIHRpbWVyIGNoYW5uZWxzCisJICBhcmUgY29tYmluZWQgdG8gbWFrZSBhIHNpbmdsZSAzMi1iaXQgdGltZXIuCisKKwkgIFdoZW4gR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBkZWZpbmVkLCB0aGUgdGhpcmQgdGltZXIgY2hhbm5lbAorCSAgbWF5IGJlIHVzZWQgYXMgYSBjbG9jayBldmVudCBkZXZpY2Ugc3VwcG9ydGluZyBvbmVzaG90IG1vZGUKKwkgIChkZWxheXMgb2YgdXAgdG8gdHdvIHNlY29uZHMpIGJhc2VkIG9uIHRoZSAzMiBLaUh6IGNsb2NrLgorCitjb25maWcgQVRNRUxfVENCX0NMS1NSQ19CTE9DSworCWludAorCWRlcGVuZHMgb24gQVRNRUxfVENCX0NMS1NSQworCXByb21wdCAiVEMgQmxvY2siIGlmIEFSQ0hfQVQ5MVJNOTIwMCB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IENQVV9BVDMyQVA3MDBYCisJZGVmYXVsdCAwCisJcmFuZ2UgMCAxCisJaGVscAorCSAgU29tZSBjaGlwcyBwcm92aWRlIG1vcmUgdGhhbiBvbmUgVEMgYmxvY2ssIHNvIHlvdSBoYXZlIHRoZQorCSAgY2hvaWNlIG9mIHdoaWNoIG9uZSB0byB1c2UgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsuICBUaGUgb3RoZXIKKwkgIFRDIGNhbiBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcywgc3VjaCBhcyBQV00gZ2VuZXJhdGlvbiBhbmQKKwkgIGludGVydmFsIHRpbWluZy4KKwogY29uZmlnIElCTV9BU00KIAl0cmlzdGF0ZSAiRGV2aWNlIGRyaXZlciBmb3IgSUJNIFJTQSBzZXJ2aWNlIHByb2Nlc3NvciIKIAlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kgJiYgSU5QVVQgJiYgRVhQRVJJTUVOVEFMCkBAIC0xMDgsNiArMTQxLDcgQEAKIAlkZXBlbmRzIG9uIEFDUEkKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MKIAlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwlkZXBlbmRzIG9uIFNFUklPX0k4MDQyCiAJc2VsZWN0IEFDUElfV01JCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgbmV3ZXIgQWNlciAoYW5kIFdpc3Ryb24pIGxhcHRvcHMuIEl0IGFkZHMKQEAgLTI1OCw2ICsyOTIsMjMgQEAKIAogCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkgaGVyZS4KIAorY29uZmlnIFRISU5LUEFEX0FDUElfVklERU8KKwlib29sICJWaWRlbyBvdXRwdXQgY29udHJvbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVEhJTktQQURfQUNQSQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIEFsbG93cyB0aGUgdGhpbmtwYWRfYWNwaSBkcml2ZXIgdG8gcHJvdmlkZSBhbiBpbnRlcmZhY2UgdG8gY29udHJvbAorCSAgdGhlIHZhcmlvdXMgdmlkZW8gb3V0cHV0IHBvcnRzLgorCisJICBUaGlzIGZlYXR1cmUgb2Z0ZW4gd29uJ3Qgd29yayB3ZWxsLCBkZXBlbmRpbmcgb24gVGhpbmtQYWQgbW9kZWwsCisJICBkaXNwbGF5IHN0YXRlLCB2aWRlbyBvdXRwdXQgZGV2aWNlcyBpbiB1c2UsIHdoZXRoZXIgdGhlcmUgaXMgYSBYCisJICBzZXJ2ZXIgcnVubmluZywgcGhhc2Ugb2YgdGhlIG1vb24sIGFuZCB0aGUgY3VycmVudCBtb29kIG9mCisJICBTY2hyb2VkaW5nZXIncyBjYXQuICBJZiB5b3UgY2FuIHVzZSBYLm9yZydzIFJhbmRSIHRvIGNvbnRyb2wKKwkgIHlvdXIgVGhpbmtQYWQncyB2aWRlbyBvdXRwdXQgcG9ydHMgaW5zdGVhZCBvZiB0aGlzIGZlYXR1cmUsCisJICBkb24ndCB0aGluayB0d2ljZTogZG8gaXQgYW5kIHNheSBOIGhlcmUgdG8gc2F2ZSBzb21lIG1lbW9yeS4KKworCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkgaGVyZS4KKwogY29uZmlnIFRISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIAlib29sICJTdXBvcnQgTlZSQU0gcG9sbGluZyBmb3IgaG90IGtleXMiCiAJZGVwZW5kcyBvbiBUSElOS1BBRF9BQ1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggM2IxMmY1ZC4uNDU4MWIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQAogb2JqLSQoQ09ORklHX0FTVVNfTEFQVE9QKSAgICAgKz0gYXN1cy1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0FUTUVMX1BXTSkJCSs9IGF0bWVsX3B3bS5vCiBvYmotJChDT05GSUdfQVRNRUxfU1NDKQkJKz0gYXRtZWwtc3NjLm8KK29iai0kKENPTkZJR19BVE1FTF9UQ0xJQikJKz0gYXRtZWxfdGNsaWIubwogb2JqLSQoQ09ORklHX1RDMTEwMF9XTUkpCSs9IHRjMTEwMC13bWkubwogb2JqLSQoQ09ORklHX0xLRFRNKQkJKz0gbGtkdG0ubwogb2JqLSQoQ09ORklHX1RJRk1fQ09SRSkgICAgICAgCSs9IHRpZm1fY29yZS5vCkBAIC0yMiwzICsyMyw0IEBACiBvYmotJChDT05GSUdfRUVQUk9NXzkzQ1g2KQkrPSBlZXByb21fOTNjeDYubwogb2JqLSQoQ09ORklHX0lOVEVMX01FTkxPVykJKz0gaW50ZWxfbWVubG93Lm8KIG9iai0kKENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMpICs9IGVuY2xvc3VyZS5vCitvYmotJChDT05GSUdfS0dEQl9URVNUUykJKz0ga2dkYnRzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9hY2VyLXdtaS5jIGIvZHJpdmVycy9taXNjL2FjZXItd21pLmMKaW5kZXggZDdhZWE5My4uZGQxM2EzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9taXNjL2FjZXItd21pLmMKQEAgLTIxOSw2ICsyMTksMTUgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCisJCS5pZGVudCA9ICJBY2VyIEFzcGlyZSAzNjEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFzcGlyZSAzNjEwIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9ICZxdWlya19hY2VyX3RyYXZlbG1hdGVfMjQ5MCwKKwl9LAorCXsKKwkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCiAJCS5pZGVudCA9ICJBY2VyIEFzcGlyZSA1MTAwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCkBAIC0yMjgsNiArMjM3LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiQWNlciBBc3BpcmUgNTYxMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBc3BpcmUgNTYxMCIpLAorCQl9LAorCQkuZHJpdmVyX2RhdGEgPSAmcXVpcmtfYWNlcl90cmF2ZWxtYXRlXzI0OTAsCisJfSwKKwl7CisJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAogCQkuaWRlbnQgPSAiQWNlciBBc3BpcmUgNTYzMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLApAQCAtMjczLDYgKzI5MSwxNSBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKKwkJLmlkZW50ID0gIkFjZXIgVHJhdmVsTWF0ZSA0MjAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlRyYXZlbE1hdGUgNDIwMCIpLAorCQl9LAorCQkuZHJpdmVyX2RhdGEgPSAmcXVpcmtfYWNlcl90cmF2ZWxtYXRlXzI0OTAsCisJfSwKKwl7CisJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAogCQkuaWRlbnQgPSAiTWVkaW9uIE1EIDk4MzAwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNRURJT04iKSwKQEAgLTc1MiwxMSArNzc5LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IG1haWxfbGVkID0gewotCS5uYW1lID0gImFjZXItbWFpbDpncmVlbiIsCisJLm5hbWUgPSAiYWNlci13bWk6Om1haWwiLAogCS5icmlnaHRuZXNzX3NldCA9IG1haWxfbGVkX3NldCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFjZXJfbGVkX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgYWNlcl9sZWRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIGxlZF9jbGFzc2Rldl9yZWdpc3RlcihkZXYsICZtYWlsX2xlZCk7CiB9CkBAIC03ODksNyArODE2LDcgQEAKIAkudXBkYXRlX3N0YXR1cyA9IHVwZGF0ZV9ibF9zdGF0dXMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBhY2VyX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFjZXJfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKIApAQCAtODA4LDcgKzgzNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBhY2VyX2JhY2tsaWdodF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBhY2VyX2JhY2tsaWdodF9leGl0KHZvaWQpCiB7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGFjZXJfYmFja2xpZ2h0X2RldmljZSk7CiB9CkBAIC0xMDQzLDExICsxMDcwLDEyIEBACiAKIAlpZiAod21pX2hhc19ndWlkKFdNSURfR1VJRDIpICYmIGludGVyZmFjZSkgewogCQlpZiAoQUNQSV9GQUlMVVJFKFdNSURfc2V0X2NhcGFiaWxpdGllcygpKSkgewotCQkJcHJpbnRrKEFDRVJfRVJSICJVbmFibGUgdG8gZGV0ZWN0IGF2YWlsYWJsZSBkZXZpY2VzXG4iKTsKKwkJCXByaW50ayhBQ0VSX0VSUiAiVW5hYmxlIHRvIGRldGVjdCBhdmFpbGFibGUgV01JRCAiCisJCQkJCSJkZXZpY2VzXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfSBlbHNlIGlmICghd21pX2hhc19ndWlkKFdNSURfR1VJRDIpICYmIGludGVyZmFjZSkgewotCQlwcmludGsoQUNFUl9FUlIgIlVuYWJsZSB0byBkZXRlY3QgYXZhaWxhYmxlIGRldmljZXNcbiIpOworCQlwcmludGsoQUNFUl9FUlIgIk5vIFdNSUQgZGV2aWNlIGRldGVjdGlvbiBtZXRob2QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEwNTUsMjEgKzEwODMsMjAgQEAKIAkJaW50ZXJmYWNlID0gJkFNVzBfaW50ZXJmYWNlOwogCiAJCWlmIChBQ1BJX0ZBSUxVUkUoQU1XMF9zZXRfY2FwYWJpbGl0aWVzKCkpKSB7Ci0JCQlwcmludGsoQUNFUl9FUlIgIlVuYWJsZSB0byBkZXRlY3QgYXZhaWxhYmxlIGRldmljZXNcbiIpOworCQkJcHJpbnRrKEFDRVJfRVJSICJVbmFibGUgdG8gZGV0ZWN0IGF2YWlsYWJsZSBBTVcwICIKKwkJCQkJImRldmljZXNcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpZiAod21pX2hhc19ndWlkKEFNVzBfR1VJRDEpKSB7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoQU1XMF9maW5kX21haWxsZWQoKSkpCi0JCQlwcmludGsoQUNFUl9FUlIgIlVuYWJsZSB0byBkZXRlY3QgbWFpbCBMRURcbiIpOwotCX0KKwlpZiAod21pX2hhc19ndWlkKEFNVzBfR1VJRDEpKQorCQlBTVcwX2ZpbmRfbWFpbGxlZCgpOwogCiAJZmluZF9xdWlya3MoKTsKIAogCWlmICghaW50ZXJmYWNlKSB7Ci0JCXByaW50ayhBQ0VSX0VSUiAiTm8gb3IgdW5zdXBwb3J0ZWQgV01JIGludGVyZmFjZSwgdW5hYmxlIHRvICIpOwotCQlwcmludGsoS0VSTl9DT05UICJsb2FkLlxuIik7CisJCXByaW50ayhBQ0VSX0VSUiAiTm8gb3IgdW5zdXBwb3J0ZWQgV01JIGludGVyZmFjZSwgdW5hYmxlIHRvICIKKwkJCQkibG9hZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2F0bWVsLXNzYy5jIGIvZHJpdmVycy9taXNjL2F0bWVsLXNzYy5jCmluZGV4IDA1OGNjYWMuLmUxNzE2NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9hdG1lbC1zc2MuYworKysgYi9kcml2ZXJzL21pc2MvYXRtZWwtc3NjLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3NjX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9ICJzc2MiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTE3MiwzICsxNzMsNCBAQAogTU9EVUxFX0FVVEhPUigiSGFucy1DaHJpc3RpYW4gRWd0dmVkdCA8aGNlZ3R2ZWR0QGF0bWVsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU1NDIGRyaXZlciBmb3IgQXRtZWwgQVZSMzIgYW5kIEFUOTEiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c3NjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYXRtZWxfcHdtLmMgYi9kcml2ZXJzL21pc2MvYXRtZWxfcHdtLmMKaW5kZXggZjhkM2I5YS4uMGQ1Y2UwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2F0bWVsX3B3bS5jCisrKyBiL2RyaXZlcnMvbWlzYy9hdG1lbF9wd20uYwpAQCAtNDA3LDMgKzQwNyw0IEBACiAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBVDMyL0FUOTEgUFdNIG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdG1lbF9wd20iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5jIGIvZHJpdmVycy9taXNjL2F0bWVsX3RjbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVkYzhhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5jCkBAIC0wLDAgKzEsMTYxIEBACisjaW5jbHVkZSA8bGludXgvYXRtZWxfdGMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlc2VydmUgZm9yIHRoZSBpb21lbSByZXNvdXJjZSAqLworI2RlZmluZSBBVE1FTF9UQ19JT01FTV9TSVpFCTI1NgorCisKKy8qCisgKiBUaGlzIGlzIGEgdGhpbiBsaWJyYXJ5IHRvIHNvbHZlIHRoZSBwcm9ibGVtIG9mIGhvdyB0byBwb3J0YWJseSBhbGxvY2F0ZQorICogb25lIG9mIHRoZSBUQyBibG9ja3MuICBGb3Igc2ltcGxpY2l0eSwgaXQgZG9lc24ndCBjdXJyZW50bHkgZXhwZWN0IHRvCisgKiBzaGFyZSBpbmRpdmlkdWFsIHRpbWVycyBiZXR3ZWVuIGRpZmZlcmVudCBkcml2ZXJzLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVlIzMikKKy8qIEFWUjMyIGhhcyB0aGVzZSBkaXZpZGUgUEJCICovCitjb25zdCB1OCBhdG1lbF90Y19kaXZpc29yc1s1XSA9IHsgMCwgNCwgOCwgMTYsIDMyLCB9OworRVhQT1JUX1NZTUJPTChhdG1lbF90Y19kaXZpc29ycyk7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MSkKKy8qIEFUOTEgaGFzIHRoZXNlIGRpdmlkZSBNQ0sgKi8KK2NvbnN0IHU4IGF0bWVsX3RjX2Rpdmlzb3JzWzVdID0geyAyLCA4LCAzMiwgMTI4LCAwLCB9OworRVhQT1JUX1NZTUJPTChhdG1lbF90Y19kaXZpc29ycyk7CisKKyNlbmRpZgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjX2xpc3RfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHRjX2xpc3QpOworCisvKioKKyAqIGF0bWVsX3RjX2FsbG9jIC0gYWxsb2NhdGUgYSBzcGVjaWZpZWQgVEMgYmxvY2sKKyAqIEBibG9jazogd2hpY2ggYmxvY2sgdG8gYWxsb2NhdGUKKyAqIEBuYW1lOiBuYW1lIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW9tZW0gcmVzb3VyY2UKKyAqCisgKiBDYWxsZXIgYWxsb2NhdGVzIGEgYmxvY2suICBJZiBpdCBpcyBhdmFpbGFibGUsIGEgcG9pbnRlciB0byBhCisgKiBwcmUtaW5pdGlhbGl6ZWQgc3RydWN0IGF0bWVsX3RjIGlzIHJldHVybmVkLiBUaGUgY2FsbGVyIGNhbiBhY2Nlc3MKKyAqIHRoZSByZWdpc3RlcnMgZGlyZWN0bHkgdGhyb3VnaCB0aGUgInJlZ3MiIGZpZWxkLgorICovCitzdHJ1Y3QgYXRtZWxfdGMgKmF0bWVsX3RjX2FsbG9jKHVuc2lnbmVkIGJsb2NrLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdG1lbF90YwkJKnRjOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZQkJKnI7CisKKwlzcGluX2xvY2soJnRjX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YywgJnRjX2xpc3QsIG5vZGUpIHsKKwkJaWYgKHRjLT5wZGV2LT5pZCA9PSBibG9jaykgeworCQkJcGRldiA9IHRjLT5wZGV2OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXBkZXYgfHwgdGMtPmlvbWVtKQorCQlnb3RvIGZhaWw7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCBBVE1FTF9UQ19JT01FTV9TSVpFLCBuYW1lKTsKKwlpZiAoIXIpCisJCWdvdG8gZmFpbDsKKworCXRjLT5yZWdzID0gaW9yZW1hcChyLT5zdGFydCwgQVRNRUxfVENfSU9NRU1fU0laRSk7CisJaWYgKCF0Yy0+cmVncykKKwkJZ290byBmYWlsX2lvcmVtYXA7CisKKwl0Yy0+aW9tZW0gPSByOworCitvdXQ6CisJc3Bpbl91bmxvY2soJnRjX2xpc3RfbG9jayk7CisJcmV0dXJuIHRjOworCitmYWlsX2lvcmVtYXA6CisJcmVsZWFzZV9yZXNvdXJjZShyKTsKK2ZhaWw6CisJdGMgPSBOVUxMOworCWdvdG8gb3V0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRtZWxfdGNfYWxsb2MpOworCisvKioKKyAqIGF0bWVsX3RjX2ZyZWUgLSByZWxlYXNlIGEgc3BlY2lmaWVkIFRDIGJsb2NrCisgKiBAdGM6IFRpbWVyL2NvdW50ZXIgYmxvY2sgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYXRtZWxfdGNfYWxsb2MoKQorICoKKyAqIFRoaXMgcmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiBhdG1lbF90Y19hbGxvYygpLCB1bm1hcHBpbmcgdGhlIEkvTworICogcmVnaXN0ZXJzLCBpbnZhbGlkYXRpbmcgdGhlIHJlc291cmNlIHJldHVybmVkIGJ5IHRoYXQgcm91dGluZSBhbmQKKyAqIG1ha2luZyB0aGUgVEMgYXZhaWxhYmxlIHRvIG90aGVyIGRyaXZlcnMuCisgKi8KK3ZvaWQgYXRtZWxfdGNfZnJlZShzdHJ1Y3QgYXRtZWxfdGMgKnRjKQoreworCXNwaW5fbG9jaygmdGNfbGlzdF9sb2NrKTsKKwlpZiAodGMtPnJlZ3MpIHsKKwkJaW91bm1hcCh0Yy0+cmVncyk7CisJCXJlbGVhc2VfcmVzb3VyY2UodGMtPmlvbWVtKTsKKwkJdGMtPnJlZ3MgPSBOVUxMOworCQl0Yy0+aW9tZW0gPSBOVUxMOworCX0KKwlzcGluX3VubG9jaygmdGNfbGlzdF9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGF0bWVsX3RjX2ZyZWUpOworCitzdGF0aWMgaW50IF9faW5pdCB0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdG1lbF90YyAqdGM7CisJc3RydWN0IGNsawkqY2xrOworCWludAkJaXJxOworCisJaWYgKCFwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRtZWxfdGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRjLT5wZGV2ID0gcGRldjsKKworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInQwX2NsayIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlrZnJlZSh0Yyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXRjLT5jbGtbMF0gPSBjbGs7CisJdGMtPmNsa1sxXSA9IGNsa19nZXQoJnBkZXYtPmRldiwgInQxX2NsayIpOworCWlmIChJU19FUlIodGMtPmNsa1sxXSkpCisJCXRjLT5jbGtbMV0gPSBjbGs7CisJdGMtPmNsa1syXSA9IGNsa19nZXQoJnBkZXYtPmRldiwgInQyX2NsayIpOworCWlmIChJU19FUlIodGMtPmNsa1syXSkpCisJCXRjLT5jbGtbMl0gPSBjbGs7CisKKwl0Yy0+aXJxWzBdID0gaXJxOworCXRjLT5pcnFbMV0gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCWlmICh0Yy0+aXJxWzFdIDwgMCkKKwkJdGMtPmlycVsxXSA9IGlycTsKKwl0Yy0+aXJxWzJdID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKKwlpZiAodGMtPmlycVsyXSA8IDApCisJCXRjLT5pcnFbMl0gPSBpcnE7CisKKwlzcGluX2xvY2soJnRjX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmdGMtPm5vZGUsICZ0Y19saXN0KTsKKwlzcGluX3VubG9jaygmdGNfbGlzdF9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0Y19kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gImF0bWVsX3RjYiIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmdGNfZHJpdmVyLCB0Y19wcm9iZSk7Cit9CithcmNoX2luaXRjYWxsKHRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCmluZGV4IDZmY2IwZTkuLmZhZmI1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYworKysgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKQEAgLTQwLDE2ICs0MCwxNiBAQAogICogTG9va3MgdGhyb3VnaCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGVuY2xvc3VyZXMgdG8gc2VlCiAgKiBpZiBpdCBjYW4gZmluZCBhIG1hdGNoIGZvciBhIGRldmljZS4gIFJldHVybnMgTlVMTCBpZiBubwogICogZW5jbG9zdXJlIGlzIGZvdW5kLiBPYnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbmNsb3N1cmUgY2xhc3MKLSAqIGRldmljZSB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIHdpdGggY2xhc3NfZGV2aWNlX3B1dCgpLgorICogZGV2aWNlIHdoaWNoIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBkZXZpY2VfcHV0KCkuCiAgKi8KIHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplbmNsb3N1cmVfZmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYgPSBOVUxMOworCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2OwogCiAJbXV0ZXhfbG9jaygmY29udGFpbmVyX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlZGV2LCAmY29udGFpbmVyX2xpc3QsIG5vZGUpIHsKLQkJaWYgKGVkZXYtPmNkZXYuZGV2ID09IGRldikgewotCQkJY2xhc3NfZGV2aWNlX2dldCgmZWRldi0+Y2Rldik7CisJCWlmIChlZGV2LT5lZGV2LnBhcmVudCA9PSBkZXYpIHsKKwkJCWdldF9kZXZpY2UoJmVkZXYtPmVkZXYpOwogCQkJbXV0ZXhfdW5sb2NrKCZjb250YWluZXJfbGlzdF9sb2NrKTsKIAkJCXJldHVybiBlZGV2OwogCQl9CkBAIC0xMTcsMTEgKzExNywxMSBAQAogCiAJZWRldi0+Y29tcG9uZW50cyA9IGNvbXBvbmVudHM7CiAKLQllZGV2LT5jZGV2LmNsYXNzID0gJmVuY2xvc3VyZV9jbGFzczsKLQllZGV2LT5jZGV2LmRldiA9IGdldF9kZXZpY2UoZGV2KTsKKwllZGV2LT5lZGV2LmNsYXNzID0gJmVuY2xvc3VyZV9jbGFzczsKKwllZGV2LT5lZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoZGV2KTsKIAllZGV2LT5jYiA9IGNiOwotCXNucHJpbnRmKGVkZXYtPmNkZXYuY2xhc3NfaWQsIEJVU19JRF9TSVpFLCAiJXMiLCBuYW1lKTsKLQllcnIgPSBjbGFzc19kZXZpY2VfcmVnaXN0ZXIoJmVkZXYtPmNkZXYpOworCXNucHJpbnRmKGVkZXYtPmVkZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIiVzIiwgbmFtZSk7CisJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZlZGV2LT5lZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycjsKIApAQCAtMTM1LDcgKzEzNSw3IEBACiAJcmV0dXJuIGVkZXY7CiAKICBlcnI6Ci0JcHV0X2RldmljZShlZGV2LT5jZGV2LmRldik7CisJcHV0X2RldmljZShlZGV2LT5lZGV2LnBhcmVudCk7CiAJa2ZyZWUoZWRldik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE1OCwyNyArMTU4LDI4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZWRldi0+Y29tcG9uZW50czsgaSsrKQogCQlpZiAoZWRldi0+Y29tcG9uZW50W2ldLm51bWJlciAhPSAtMSkKLQkJCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZlZGV2LT5jb21wb25lbnRbaV0uY2Rldik7CisJCQlkZXZpY2VfdW5yZWdpc3RlcigmZWRldi0+Y29tcG9uZW50W2ldLmNkZXYpOwogCiAJLyogcHJldmVudCBhbnkgY2FsbGJhY2tzIGludG8gc2VydmljZSB1c2VyICovCiAJZWRldi0+Y2IgPSAmZW5jbG9zdXJlX251bGxfY2FsbGJhY2tzOwotCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZlZGV2LT5jZGV2KTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmZWRldi0+ZWRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbmNsb3N1cmVfdW5yZWdpc3Rlcik7CiAKLXN0YXRpYyB2b2lkIGVuY2xvc3VyZV9yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCitzdGF0aWMgdm9pZCBlbmNsb3N1cmVfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2ID0gdG9fZW5jbG9zdXJlX2RldmljZShjZGV2KTsKIAotCXB1dF9kZXZpY2UoY2Rldi0+ZGV2KTsKKwlwdXRfZGV2aWNlKGNkZXYtPnBhcmVudCk7CiAJa2ZyZWUoZWRldik7CiB9CiAKLXN0YXRpYyB2b2lkIGVuY2xvc3VyZV9jb21wb25lbnRfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorc3RhdGljIHZvaWQgZW5jbG9zdXJlX2NvbXBvbmVudF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoY2Rldi0+ZGV2KQotCQlwdXRfZGV2aWNlKGNkZXYtPmRldik7Ci0JY2xhc3NfZGV2aWNlX3B1dChjZGV2LT5wYXJlbnQpOworCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2ID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChkZXYpOworCisJcHV0X2RldmljZShjZGV2LT5kZXYpOworCXB1dF9kZXZpY2UoZGV2LT5wYXJlbnQpOwogfQogCiAvKioKQEAgLTIwMSw3ICsyMDIsNyBAQAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2OworCXN0cnVjdCBkZXZpY2UgKmNkZXY7CiAJaW50IGVycjsKIAogCWlmIChudW1iZXIgPj0gZWRldi0+Y29tcG9uZW50cykKQEAgLTIxNSwxNCArMjE2LDE0IEBACiAJZWNvbXAtPnR5cGUgPSB0eXBlOwogCWVjb21wLT5udW1iZXIgPSBudW1iZXI7CiAJY2RldiA9ICZlY29tcC0+Y2RldjsKLQljZGV2LT5wYXJlbnQgPSBjbGFzc19kZXZpY2VfZ2V0KCZlZGV2LT5jZGV2KTsKKwljZGV2LT5wYXJlbnQgPSBnZXRfZGV2aWNlKCZlZGV2LT5lZGV2KTsKIAljZGV2LT5jbGFzcyA9ICZlbmNsb3N1cmVfY29tcG9uZW50X2NsYXNzOwogCWlmIChuYW1lKQotCQlzbnByaW50ZihjZGV2LT5jbGFzc19pZCwgQlVTX0lEX1NJWkUsICIlcyIsIG5hbWUpOworCQlzbnByaW50ZihjZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFLCAiJXMiLCBuYW1lKTsKIAllbHNlCi0JCXNucHJpbnRmKGNkZXYtPmNsYXNzX2lkLCBCVVNfSURfU0laRSwgIiV1IiwgbnVtYmVyKTsKKwkJc25wcmludGYoY2Rldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgIiV1IiwgbnVtYmVyKTsKIAotCWVyciA9IGNsYXNzX2RldmljZV9yZWdpc3RlcihjZGV2KTsKKwllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoY2Rldik7CiAJaWYgKGVycikKIAkJRVJSX1BUUihlcnIpOwogCkBAIC0yNDcsMTggKzI0OCwxNyBAQAogaW50IGVuY2xvc3VyZV9hZGRfZGV2aWNlKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LCBpbnQgY29tcG9uZW50LAogCQkJIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2OworCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2OwogCiAJaWYgKCFlZGV2IHx8IGNvbXBvbmVudCA+PSBlZGV2LT5jb21wb25lbnRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNkZXYgPSAmZWRldi0+Y29tcG9uZW50W2NvbXBvbmVudF0uY2RldjsKKwljZGV2ID0gJmVkZXYtPmNvbXBvbmVudFtjb21wb25lbnRdOwogCi0JY2xhc3NfZGV2aWNlX2RlbChjZGV2KTsKLQlpZiAoY2Rldi0+ZGV2KQotCQlwdXRfZGV2aWNlKGNkZXYtPmRldik7CisJZGV2aWNlX2RlbCgmY2Rldi0+Y2Rldik7CisJcHV0X2RldmljZShjZGV2LT5kZXYpOwogCWNkZXYtPmRldiA9IGdldF9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gY2xhc3NfZGV2aWNlX2FkZChjZGV2KTsKKwlyZXR1cm4gZGV2aWNlX2FkZCgmY2Rldi0+Y2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbmNsb3N1cmVfYWRkX2RldmljZSk7CiAKQEAgLTI3MiwxOCArMjcyLDE3IEBACiAgKi8KIGludCBlbmNsb3N1cmVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwgaW50IGNvbXBvbmVudCkKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2OworCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2OwogCiAJaWYgKCFlZGV2IHx8IGNvbXBvbmVudCA+PSBlZGV2LT5jb21wb25lbnRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNkZXYgPSAmZWRldi0+Y29tcG9uZW50W2NvbXBvbmVudF0uY2RldjsKKwljZGV2ID0gJmVkZXYtPmNvbXBvbmVudFtjb21wb25lbnRdOwogCi0JY2xhc3NfZGV2aWNlX2RlbChjZGV2KTsKLQlpZiAoY2Rldi0+ZGV2KQotCQlwdXRfZGV2aWNlKGNkZXYtPmRldik7CisJZGV2aWNlX2RlbCgmY2Rldi0+Y2Rldik7CisJcHV0X2RldmljZShjZGV2LT5kZXYpOwogCWNkZXYtPmRldiA9IE5VTEw7Ci0JcmV0dXJuIGNsYXNzX2RldmljZV9hZGQoY2Rldik7CisJcmV0dXJuIGRldmljZV9hZGQoJmNkZXYtPmNkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW5jbG9zdXJlX3JlbW92ZV9kZXZpY2UpOwogCkBAIC0yOTEsMTQgKzI5MCwxNiBAQAogICogc3lzZnMgcGllY2VzIGJlbG93CiAgKi8KIAotc3RhdGljIHNzaXplX3QgZW5jbG9zdXJlX3Nob3dfY29tcG9uZW50cyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBlbmNsb3N1cmVfc2hvd19jb21wb25lbnRzKHN0cnVjdCBkZXZpY2UgKmNkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiA9IHRvX2VuY2xvc3VyZV9kZXZpY2UoY2Rldik7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCA0MCwgIiVkXG4iLCBlZGV2LT5jb21wb25lbnRzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGVuY2xvc3VyZV9hdHRyc1tdID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGVuY2xvc3VyZV9hdHRyc1tdID0gewogCV9fQVRUUihjb21wb25lbnRzLCBTX0lSVUdPLCBlbmNsb3N1cmVfc2hvd19jb21wb25lbnRzLCBOVUxMKSwKIAlfX0FUVFJfTlVMTAogfTsKQEAgLTMwNiw4ICszMDcsOCBAQAogc3RhdGljIHN0cnVjdCBjbGFzcyBlbmNsb3N1cmVfY2xhc3MgPSB7CiAJLm5hbWUJCQk9ICJlbmNsb3N1cmUiLAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLnJlbGVhc2UJCT0gZW5jbG9zdXJlX3JlbGVhc2UsCi0JLmNsYXNzX2Rldl9hdHRycwk9IGVuY2xvc3VyZV9hdHRycywKKwkuZGV2X3JlbGVhc2UJCT0gZW5jbG9zdXJlX3JlbGVhc2UsCisJLmRldl9hdHRycwkJPSBlbmNsb3N1cmVfYXR0cnMsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZW5jbG9zdXJlX3N0YXR1cyBbXSA9IHsKQEAgLTMyNiw3ICszMjcsOCBAQAogCVtFTkNMT1NVUkVfQ09NUE9ORU5UX0FSUkFZX0RFVklDRV0gPSAiYXJyYXkgZGV2aWNlIiwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IGdldF9jb21wb25lbnRfZmF1bHQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZ2V0X2NvbXBvbmVudF9mYXVsdChzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYgPSB0b19lbmNsb3N1cmVfZGV2aWNlKGNkZXYtPnBhcmVudCk7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChjZGV2KTsKQEAgLTMzNiw4ICszMzgsOSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDQwLCAiJWRcbiIsIGVjb21wLT5mYXVsdCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF9jb21wb25lbnRfZmF1bHQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAotCQkJCSAgIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHNldF9jb21wb25lbnRfZmF1bHQoc3RydWN0IGRldmljZSAqY2RldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiA9IHRvX2VuY2xvc3VyZV9kZXZpY2UoY2Rldi0+cGFyZW50KTsKIAlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXAgPSB0b19lbmNsb3N1cmVfY29tcG9uZW50KGNkZXYpOwpAQCAtMzQ4LDcgKzM1MSw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBnZXRfY29tcG9uZW50X3N0YXR1cyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBnZXRfY29tcG9uZW50X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixjaGFyICpidWYpCiB7CiAJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYgPSB0b19lbmNsb3N1cmVfZGV2aWNlKGNkZXYtPnBhcmVudCk7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChjZGV2KTsKQEAgLTM1OCw4ICszNjIsOSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDQwLCAiJXNcbiIsIGVuY2xvc3VyZV9zdGF0dXNbZWNvbXAtPnN0YXR1c10pOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfY29tcG9uZW50X3N0YXR1cyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkJICAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2V0X2NvbXBvbmVudF9zdGF0dXMoc3RydWN0IGRldmljZSAqY2RldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2ID0gdG9fZW5jbG9zdXJlX2RldmljZShjZGV2LT5wYXJlbnQpOwogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcCA9IHRvX2VuY2xvc3VyZV9jb21wb25lbnQoY2Rldik7CkBAIC0zODAsNyArMzg1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGdldF9jb21wb25lbnRfYWN0aXZlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGdldF9jb21wb25lbnRfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKmNkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYgPSB0b19lbmNsb3N1cmVfZGV2aWNlKGNkZXYtPnBhcmVudCk7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChjZGV2KTsKQEAgLTM5MCw4ICszOTYsOSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDQwLCAiJWRcbiIsIGVjb21wLT5hY3RpdmUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfY29tcG9uZW50X2FjdGl2ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkJICAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2V0X2NvbXBvbmVudF9hY3RpdmUoc3RydWN0IGRldmljZSAqY2RldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2ID0gdG9fZW5jbG9zdXJlX2RldmljZShjZGV2LT5wYXJlbnQpOwogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcCA9IHRvX2VuY2xvc3VyZV9jb21wb25lbnQoY2Rldik7CkBAIC00MDIsNyArNDA5LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGdldF9jb21wb25lbnRfbG9jYXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGdldF9jb21wb25lbnRfbG9jYXRlKHN0cnVjdCBkZXZpY2UgKmNkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYgPSB0b19lbmNsb3N1cmVfZGV2aWNlKGNkZXYtPnBhcmVudCk7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChjZGV2KTsKQEAgLTQxMiw4ICs0MjAsOSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDQwLCAiJWRcbiIsIGVjb21wLT5sb2NhdGUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfY29tcG9uZW50X2xvY2F0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkJICAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2V0X2NvbXBvbmVudF9sb2NhdGUoc3RydWN0IGRldmljZSAqY2RldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2ID0gdG9fZW5jbG9zdXJlX2RldmljZShjZGV2LT5wYXJlbnQpOwogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcCA9IHRvX2VuY2xvc3VyZV9jb21wb25lbnQoY2Rldik7CkBAIC00MjQsNyArNDMzLDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGdldF9jb21wb25lbnRfdHlwZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBnZXRfY29tcG9uZW50X3R5cGUoc3RydWN0IGRldmljZSAqY2RldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChjZGV2KTsKIApAQCAtNDMyLDcgKzQ0Miw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGVuY2xvc3VyZV9jb21wb25lbnRfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBlbmNsb3N1cmVfY29tcG9uZW50X2F0dHJzW10gPSB7CiAJX19BVFRSKGZhdWx0LCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X2NvbXBvbmVudF9mYXVsdCwKIAkgICAgICAgc2V0X2NvbXBvbmVudF9mYXVsdCksCiAJX19BVFRSKHN0YXR1cywgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9jb21wb25lbnRfc3RhdHVzLApAQCAtNDQ4LDggKzQ1OCw4IEBACiBzdGF0aWMgc3RydWN0IGNsYXNzIGVuY2xvc3VyZV9jb21wb25lbnRfY2xhc3MgPSAgewogCS5uYW1lCQkJPSAiZW5jbG9zdXJlX2NvbXBvbmVudCIsCiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuY2xhc3NfZGV2X2F0dHJzCT0gZW5jbG9zdXJlX2NvbXBvbmVudF9hdHRycywKLQkucmVsZWFzZQkJPSBlbmNsb3N1cmVfY29tcG9uZW50X3JlbGVhc2UsCisJLmRldl9hdHRycwk9IGVuY2xvc3VyZV9jb21wb25lbnRfYXR0cnMsCisJLmRldl9yZWxlYXNlCQk9IGVuY2xvc3VyZV9jb21wb25lbnRfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGVuY2xvc3VyZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZnVqaXRzdS1sYXB0b3AuYyBiL2RyaXZlcnMvbWlzYy9mdWppdHN1LWxhcHRvcC5jCmluZGV4IDFjZmQ3ZjMuLmUyZTdjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9mdWppdHN1LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvbWlzYy9mdWppdHN1LWxhcHRvcC5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCWZ1aml0c3UtPmFjcGlfaGFuZGxlID0gMDsKKwlmdWppdHN1LT5hY3BpX2hhbmRsZSA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X2NwdXN0YXRlLmMgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jCmluZGV4IGFhOGNlN2FiLi4zMDJlOTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X2NwdXN0YXRlLmMKQEAgLTE2NCw2ICsxNjQsNyBAQAogCS5yZW1vdmUgPSBoZHB1X2NwdXN0YXRlX3JlbW92ZSwKIAkuZHJpdmVyID0gewogCQkubmFtZSA9IEhEUFVfQ1BVU1RBVEVfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTI0OCwzICsyNDksNCBAQAogCiBNT0RVTEVfQVVUSE9SKCJCcmlhbiBXYWl0ZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIEhEUFVfQ1BVU1RBVEVfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jIGIvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfbmV4dXMuYwppbmRleCAyODg3YjIxLi4yZmEzNmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCisrKyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X25leHVzLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkucmVtb3ZlID0gaGRwdV9uZXh1c19yZW1vdmUsCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBIRFBVX05FWFVTX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xNTEsMyArMTUyLDQgQEAKIAogTU9EVUxFX0FVVEhPUigiQnJpYW4gV2FpdGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBIRFBVX05FWFVTX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9tb2R1bGUuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vbW9kdWxlLmMKaW5kZXggNGY5ZDRhOS4uYjVmNmFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9tb2R1bGUuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL21vZHVsZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlzcC0+aXJxID0gcGRldi0+aXJxOwogCXNwLT5iYXNlX2FkZHJlc3MgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKIAkJCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JaWYgKHNwLT5iYXNlX2FkZHJlc3MgPT0gMCkgeworCWlmICghc3AtPmJhc2VfYWRkcmVzcykgewogCQlkZXZfZXJyKHNwLT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBwY2kgbWVtb3J5XG4iKTsKIAkJcmVzdWx0ID0gIC1FTk9ERVY7CiAJCWdvdG8gZXJyb3JfaW9yZW1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pbnRlbF9tZW5sb3cuYyBiL2RyaXZlcnMvbWlzYy9pbnRlbF9tZW5sb3cuYwppbmRleCBmNzA5ODRhYi4uMGMwYmIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2ludGVsX21lbmxvdy5jCisrKyBiL2RyaXZlcnMvbWlzYy9pbnRlbF9tZW5sb3cuYwpAQCAtMTcwLDEwICsxNzAsMTMgQEAKIAogCWNkZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKCJNZW1vcnkgY29udHJvbGxlciIsIGRldmljZSwKIAkJCQkJICAgICAgICZtZW1vcnlfY29vbGluZ19vcHMpOwotCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGNkZXY7Ci0JaWYgKCFjZGV2KQotCQlyZXN1bHQgPSAtRU5PREVWOwotCWVsc2UgeworCWlmIChJU19FUlIoY2RldikpIHsKKwkJcmVzdWx0ID0gUFRSX0VSUihjZGV2KTsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGNkZXYpIHsKKwkJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gY2RldjsKIAkJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosCiAJCQkJCSZjZGV2LT5kZXZpY2Uua29iaiwgInRoZXJtYWxfY29vbGluZyIpOwogCQlpZiAocmVzdWx0KQpAQCAtMjEwLDcgKzIxMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgaW50ZWxfbWVubG93X21lbW9yeV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgaW50ZWxfbWVubG93X21lbW9yeV9pZHNbXSA9IHsKIAl7IklOVDAwMDIiLCAwfSwKIAl7IiIsIDB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9rZ2RidHMuYyBiL2RyaXZlcnMvbWlzYy9rZ2RidHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDYyODZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9taXNjL2tnZGJ0cy5jCkBAIC0wLDAgKzEsMTA5MCBAQAorLyoKKyAqIGtnZGJ0cyBpcyBhIHRlc3Qgc3VpdGUgZm9yIGtnZGIgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgdmFsaWRhdGluZworICogdGhhdCBrZXkgcGllY2VzIG9mIHRoZSBrZ2RiIGludGVybmFscyBhcmUgd29ya2luZyBwcm9wZXJseSBzdWNoIGFzCisgKiBIVy9TVyBicmVha3BvaW50cywgc2luZ2xlIHN0ZXBwaW5nLCBhbmQgTk1JLgorICoKKyAqIENyZWF0ZWQgYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGtnZGIgdGVzdCBzdWl0ZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUga2dkYiB0ZXN0IHN1aXRlIGlzIGRlc2lnbmVkIGFzIGEgS0dEQiBJL08gbW9kdWxlIHdoaWNoCisgKiBzaW11bGF0ZXMgdGhlIGNvbW11bmljYXRpb25zIHRoYXQgYSBkZWJ1Z2dlciB3b3VsZCBoYXZlIHdpdGgga2dkYi4KKyAqIFRoZSB0ZXN0cyBhcmUgYnJva2VuIHVwIGluIHRvIGEgbGluZSBieSBsaW5lIGFuZCByZWZlcmVuY2VkIGhlcmUgYXMKKyAqIGEgImdldCIgd2hpY2ggaXMga2dkYiByZXF1ZXN0aW5nIGlucHV0IGFuZCAicHV0IiB3aGljaCBpcyBrZ2RiCisgKiBzZW5kaW5nIGEgcmVzcG9uc2UuCisgKgorICogVGhlIGtnZGIgc3VpdGUgY2FuIGJlIGludm9rZWQgZnJvbSB0aGUga2VybmVsIGNvbW1hbmQgbGluZQorICogYXJndW1lbnRzIHN5c3RlbSBvciBleGVjdXRlZCBkeW5hbWljYWxseSBhdCBydW4gdGltZS4gIFRoZSB0ZXN0CisgKiBzdWl0ZSB1c2VzIHRoZSB2YXJpYWJsZSAia2dkYnRzIiB0byBvYnRhaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0CisgKiB3aGljaCB0ZXN0cyB0byBydW4gYW5kIHRvIGNvbmZpZ3VyZSB0aGUgdmVyYm9zaXR5IGxldmVsLiAgVGhlCisgKiBmb2xsb3dpbmcgYXJlIHRoZSB2YXJpb3VzIGNoYXJhY3RlcnMgeW91IGNhbiB1c2Ugd2l0aCB0aGUga2dkYnRzPQorICogbGluZToKKyAqCisgKiBXaGVuIHVzaW5nIHRoZSAia2dkYnRzPSIgeW91IG9ubHkgY2hvb3NlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvcmUKKyAqIHRlc3QgdHlwZXM6CisgKiBBID0gUnVuIGFsbCB0aGUgY29yZSB0ZXN0cyBzaWxlbnRseQorICogVjEgPSBSdW4gYWxsIHRoZSBjb3JlIHRlc3RzIHdpdGggbWluaW1hbCBvdXRwdXQKKyAqIFYyID0gUnVuIGFsbCB0aGUgY29yZSB0ZXN0cyBpbiBkZWJ1ZyBtb2RlCisgKgorICogWW91IGNhbiBhbHNvIHNwZWNpZnkgb3B0aW9uYWwgdGVzdHM6CisgKiBOIyMgPSBHbyB0byBzbGVlcCB3aXRoIGludGVycnVwdHMgb2YgZm9yICMjIHNlY29uZHMKKyAqICAgICAgIHRvIHRlc3QgdGhlIEhXIE5NSSB3YXRjaGRvZworICogRiMjID0gQnJlYWsgYXQgZG9fZm9yayBmb3IgIyMgaXRlcmF0aW9ucworICogUyMjID0gQnJlYWsgYXQgc3lzX29wZW4gZm9yICMjIGl0ZXJhdGlvbnMKKyAqCisgKiBOT1RFOiB0aGF0IHRoZSBkb19mb3JrIGFuZCBzeXNfb3BlbiB0ZXN0cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICoKKyAqIFRvIGludm9rZSB0aGUga2dkYiB0ZXN0IHN1aXRlIGZyb20gYm9vdCB5b3UgdXNlIGEga2VybmVsIHN0YXJ0CisgKiBhcmd1bWVudCBhcyBmb2xsb3dzOgorICogCWtnZGJ0cz1WMSBrZ2Rid2FpdAorICogT3IgaWYgeW91IHdhbnRlZCB0byBwZXJmb3JtIHRoZSBOTUkgdGVzdCBmb3IgNiBzZWNvbmRzIGFuZCBkb19mb3JrCisgKiB0ZXN0IGZvciAxMDAgZm9ya3MsIHlvdSBjb3VsZCB1c2U6CisgKiAJa2dkYnRzPVYxTjZGMTAwIGtnZGJ3YWl0CisgKgorICogVGhlIHRlc3Qgc3VpdGUgY2FuIGFsc28gYmUgaW52b2tlZCBhdCBydW4gdGltZSB3aXRoOgorICoJZWNobyBrZ2RidHM9VjFONkYxMDAgPiAvc3lzL21vZHVsZS9rZ2RidHMvcGFyYW1ldGVycy9rZ2RidHMKKyAqIE9yIGFzIGFub3RoZXIgZXhhbXBsZToKKyAqCWVjaG8ga2dkYnRzPVYyID4gL3N5cy9tb2R1bGUva2dkYnRzL3BhcmFtZXRlcnMva2dkYnRzCisgKgorICogV2hlbiBkZXZlbG9waW5nIGEgbmV3IGtnZGIgYXJjaCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvcgorICogdXNpbmcgdGhlc2UgdGVzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIHJlZ3Jlc3Npb24gdGVzdGluZywKKyAqIHNldmVyYWwgaW52b2NhdGlvbnMgYXJlIHJlcXVpcmVkLgorICoKKyAqIDEpIEJvb3Qgd2l0aCB0aGUgdGVzdCBzdWl0ZSBlbmFibGVkIGJ5IHVzaW5nIHRoZSBrZXJuZWwgYXJndW1lbnRzCisgKiAgICAgICAia2dkYnRzPVYxRjEwMCBrZ2Rid2FpdCIKKyAqICAgICMjIElmIGtnZGIgYXJjaCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBoYXMgTk1JIHVzZQorICogICAgICAgImtnZGJ0cz1WMU42RjEwMAorICoKKyAqIDIpIEFmdGVyIHRoZSBzeXN0ZW0gYm9vdCBydW4gdGhlIGJhc2ljIHRlc3QuCisgKiBlY2hvIGtnZGJ0cz1WMSA+IC9zeXMvbW9kdWxlL2tnZGJ0cy9wYXJhbWV0ZXJzL2tnZGJ0cworICoKKyAqIDMpIFJ1biB0aGUgY29uY3VycmVuY3kgdGVzdHMuICBJdCBpcyBiZXN0IHRvIHVzZSBuKzEKKyAqICAgIHdoaWxlIGxvb3BzIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBjcHVzIHlvdSBoYXZlCisgKiAgICBpbiB5b3VyIHN5c3RlbS4gIFRoZSBleGFtcGxlIGJlbG93IHVzZXMgb25seSB0d28KKyAqICAgIGxvb3BzLgorICoKKyAqICMjIFRoaXMgdGVzdHMgYnJlYWsgcG9pbnRzIG9uIHN5c19vcGVuCisgKiB3aGlsZSBbIDEgXSA7IGRvIGZpbmQgLyA+IC9kZXYvbnVsbCAyPiYxIDsgZG9uZSAmCisgKiB3aGlsZSBbIDEgXSA7IGRvIGZpbmQgLyA+IC9kZXYvbnVsbCAyPiYxIDsgZG9uZSAmCisgKiBlY2hvIGtnZGJ0cz1WMVMxMDAwMCA+IC9zeXMvbW9kdWxlL2tnZGJ0cy9wYXJhbWV0ZXJzL2tnZGJ0cworICogZmcgIyBhbmQgaGl0IGNvbnRyb2wtYworICogZmcgIyBhbmQgaGl0IGNvbnRyb2wtYworICogIyMgVGhpcyB0ZXN0cyBicmVhayBwb2ludHMgb24gZG9fZm9yaworICogd2hpbGUgWyAxIF0gOyBkbyBkYXRlID4gL2Rldi9udWxsIDsgZG9uZSAmCisgKiB3aGlsZSBbIDEgXSA7IGRvIGRhdGUgPiAvZGV2L251bGwgOyBkb25lICYKKyAqIGVjaG8ga2dkYnRzPVYxRjEwMDAgPiAvc3lzL21vZHVsZS9rZ2RidHMvcGFyYW1ldGVycy9rZ2RidHMKKyAqIGZnICMgYW5kIGhpdCBjb250cm9sLWMKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNkZWZpbmUgdjFwcmludGsoYS4uLikgZG8geyBcCisJaWYgKHZlcmJvc2UpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyBhKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIHYycHJpbnRrKGEuLi4pIGRvIHsgXAorCWlmICh2ZXJib3NlID4gMSkgXAorCQlwcmludGsoS0VSTl9JTkZPIGEpOyBcCisJCXRvdWNoX25taV93YXRjaGRvZygpOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgZXByaW50ayhhLi4uKSBkbyB7IFwKKwkJcHJpbnRrKEtFUk5fRVJSIGEpOyBcCisJCVdBUk5fT04oMSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBNQVhfQ09ORklHX0xFTgkJNDAKKworc3RhdGljIGNvbnN0IGNoYXIgaGV4Y2hhcnNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKK3N0YXRpYyBzdHJ1Y3Qga2dkYl9pbyBrZ2RidHNfaW9fb3BzOworc3RhdGljIGNoYXIgZ2V0X2J1ZltCVUZNQVhdOworc3RhdGljIGludCBnZXRfYnVmX2NudDsKK3N0YXRpYyBjaGFyIHB1dF9idWZbQlVGTUFYXTsKK3N0YXRpYyBpbnQgcHV0X2J1Zl9jbnQ7CitzdGF0aWMgY2hhciBzY3JhdGNoX2J1ZltCVUZNQVhdOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCByZXBlYXRfdGVzdDsKK3N0YXRpYyBpbnQgdGVzdF9jb21wbGV0ZTsKK3N0YXRpYyBpbnQgc2VuZF9hY2s7CitzdGF0aWMgaW50IGZpbmFsX2FjazsKK3N0YXRpYyBpbnQgaHdfYnJlYWtfdmFsOworc3RhdGljIGludCBod19icmVha192YWwyOworI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfTUlQUykKK3N0YXRpYyBpbnQgYXJjaF9uZWVkc19zc3RlcF9lbXVsYXRpb24gPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgYXJjaF9uZWVkc19zc3RlcF9lbXVsYXRpb247CisjZW5kaWYKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNzdGVwX2FkZHI7CitzdGF0aWMgaW50IHNzdGVwX3N0YXRlOworCisvKiBTdG9yYWdlIGZvciB0aGUgcmVnaXN0ZXJzLCBpbiBHREIgZm9ybWF0LiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga2dkYnRzX2dkYl9yZWdzWyhOVU1SRUdCWVRFUyArCisJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpIC8KKwkJCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKK3N0YXRpYyBzdHJ1Y3QgcHRfcmVncyBrZ2RidHNfcmVnczsKKworLyogLTEgPSBpbml0IG5vdCBydW4geWV0LCAwID0gdW5jb25maWd1cmVkLCAxID0gY29uZmlndXJlZC4gKi8KK3N0YXRpYyBpbnQgY29uZmlndXJlZAkJPSAtMTsKKworI2lmZGVmIENPTkZJR19LR0RCX1RFU1RTX0JPT1RfU1RSSU5HCitzdGF0aWMgY2hhciBjb25maWdbTUFYX0NPTkZJR19MRU5dID0gQ09ORklHX0tHREJfVEVTVFNfQk9PVF9TVFJJTkc7CisjZWxzZQorc3RhdGljIGNoYXIgY29uZmlnW01BWF9DT05GSUdfTEVOXTsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBrcGFyYW1fc3RyaW5nIGtwcyA9IHsKKwkuc3RyaW5nCQkJPSBjb25maWcsCisJLm1heGxlbgkJCT0gTUFYX0NPTkZJR19MRU4sCit9OworCitzdGF0aWMgdm9pZCBmaWxsX2dldF9idWYoY2hhciAqYnVmKTsKKworc3RydWN0IHRlc3Rfc3RydWN0IHsKKwljaGFyICpnZXQ7CisJY2hhciAqcHV0OworCXZvaWQgKCpnZXRfaGFuZGxlcikoY2hhciAqKTsKKwlpbnQgKCpwdXRfaGFuZGxlcikoY2hhciAqLCBjaGFyICopOworfTsKKworc3RydWN0IHRlc3Rfc3RhdGUgeworCWNoYXIgKm5hbWU7CisJc3RydWN0IHRlc3Rfc3RydWN0ICp0c3Q7CisJaW50IGlkeDsKKwlpbnQgKCpydW5fdGVzdCkgKGludCwgaW50KTsKKwlpbnQgKCp2YWxpZGF0ZV9wdXQpIChjaGFyICopOworfTsKKworc3RhdGljIHN0cnVjdCB0ZXN0X3N0YXRlIHRzOworCitzdGF0aWMgaW50IGtnZGJ0c191bnJlZ190aHJlYWQodm9pZCAqcHRyKQoreworCS8qIFdhaXQgdW50aWwgdGhlIHRlc3RzIGFyZSBjb21wbGV0ZSBhbmQgdGhlbiB1bmdyZXNpdGVyIHRoZSBJL08KKwkgKiBkcml2ZXIuCisJICovCisJd2hpbGUgKCFmaW5hbF9hY2spCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDE1MDApOworCisJaWYgKGNvbmZpZ3VyZWQpCisJCWtnZGJfdW5yZWdpc3Rlcl9pb19tb2R1bGUoJmtnZGJ0c19pb19vcHMpOworCWNvbmZpZ3VyZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaXMgbm9pbmxpbmUgc3VjaCB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciBhIHNpbmdsZSBsb2NhdGlvbiB0bworICogcGxhY2UgYSBicmVha3BvaW50CisgKi8KK3N0YXRpYyBub2lubGluZSB2b2lkIGtnZGJ0c19icmVha190ZXN0KHZvaWQpCit7CisJdjJwcmludGsoImtnZGJ0czogYnJlYWtwb2ludCBjb21wbGV0ZVxuIik7Cit9CisKKy8qIExvb2t1cCBzeW1ib2wgaW5mbyBpbiB0aGUga2VybmVsICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb29rdXBfYWRkcihjaGFyICphcmcpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKKworCWlmICghc3RyY21wKGFyZywgImtnZGJ0c19icmVha190ZXN0IikpCisJCWFkZHIgPSAodW5zaWduZWQgbG9uZylrZ2RidHNfYnJlYWtfdGVzdDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInN5c19vcGVuIikpCisJCWFkZHIgPSAodW5zaWduZWQgbG9uZylzeXNfb3BlbjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImRvX2ZvcmsiKSkKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKWRvX2Zvcms7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJod19icmVha192YWwiKSkKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSZod19icmVha192YWw7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGJyZWFrX2hlbHBlcihjaGFyICpicF90eXBlLCBjaGFyICphcmcsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaWYgKGFyZykKKwkJYWRkciA9IGxvb2t1cF9hZGRyKGFyZyk7CisJZWxzZQorCQlhZGRyID0gdmFkZHI7CisKKwlzcHJpbnRmKHNjcmF0Y2hfYnVmLCAiJXMsJWx4LCVpIiwgYnBfdHlwZSwgYWRkciwKKwkJQlJFQUtfSU5TVFJfU0laRSk7CisJZmlsbF9nZXRfYnVmKHNjcmF0Y2hfYnVmKTsKK30KKworc3RhdGljIHZvaWQgc3dfYnJlYWsoY2hhciAqYXJnKQoreworCWJyZWFrX2hlbHBlcigiWjAiLCBhcmcsIDApOworfQorCitzdGF0aWMgdm9pZCBzd19yZW1fYnJlYWsoY2hhciAqYXJnKQoreworCWJyZWFrX2hlbHBlcigiejAiLCBhcmcsIDApOworfQorCitzdGF0aWMgdm9pZCBod19icmVhayhjaGFyICphcmcpCit7CisJYnJlYWtfaGVscGVyKCJaMSIsIGFyZywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGh3X3JlbV9icmVhayhjaGFyICphcmcpCit7CisJYnJlYWtfaGVscGVyKCJ6MSIsIGFyZywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGh3X3dyaXRlX2JyZWFrKGNoYXIgKmFyZykKK3sKKwlicmVha19oZWxwZXIoIloyIiwgYXJnLCAwKTsKK30KKworc3RhdGljIHZvaWQgaHdfcmVtX3dyaXRlX2JyZWFrKGNoYXIgKmFyZykKK3sKKwlicmVha19oZWxwZXIoInoyIiwgYXJnLCAwKTsKK30KKworc3RhdGljIHZvaWQgaHdfYWNjZXNzX2JyZWFrKGNoYXIgKmFyZykKK3sKKwlicmVha19oZWxwZXIoIlo0IiwgYXJnLCAwKTsKK30KKworc3RhdGljIHZvaWQgaHdfcmVtX2FjY2Vzc19icmVhayhjaGFyICphcmcpCit7CisJYnJlYWtfaGVscGVyKCJ6NCIsIGFyZywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGh3X2JyZWFrX3ZhbF9hY2Nlc3Modm9pZCkKK3sKKwlod19icmVha192YWwyID0gaHdfYnJlYWtfdmFsOworfQorCitzdGF0aWMgdm9pZCBod19icmVha192YWxfd3JpdGUodm9pZCkKK3sKKwlod19icmVha192YWwrKzsKK30KKworc3RhdGljIGludCBjaGVja19hbmRfcmV3aW5kX3BjKGNoYXIgKnB1dF9zdHIsIGNoYXIgKmFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBsb29rdXBfYWRkcihhcmcpOworCWludCBvZmZzZXQgPSAwOworCisJa2dkYl9oZXgybWVtKCZwdXRfc3RyWzFdLCAoY2hhciAqKWtnZGJ0c19nZGJfcmVncywKKwkJIE5VTVJFR0JZVEVTKTsKKwlnZGJfcmVnc190b19wdF9yZWdzKGtnZGJ0c19nZGJfcmVncywgJmtnZGJ0c19yZWdzKTsKKwl2MnByaW50aygiU3RvcHBlZCBhdCBJUDogJWx4XG4iLCBpbnN0cnVjdGlvbl9wb2ludGVyKCZrZ2RidHNfcmVncykpOworI2lmZGVmIENPTkZJR19YODYKKwkvKiBPbiB4ODYgYSBicmVha3BvaW50IHN0b3AgcmVxdWlyZXMgaXQgdG8gYmUgZGVjcmVtZW50ZWQgKi8KKwlpZiAoYWRkciArIDEgPT0ga2dkYnRzX3JlZ3MuaXApCisJCW9mZnNldCA9IC0xOworI2VuZGlmCisJaWYgKHN0cmNtcChhcmcsICJzaWxlbnQiKSAmJgorCQlpbnN0cnVjdGlvbl9wb2ludGVyKCZrZ2RidHNfcmVncykgKyBvZmZzZXQgIT0gYWRkcikgeworCQllcHJpbnRrKCJrZ2RidHM6IEJQIG1pc21hdGNoICVseCBleHBlY3RlZCAlbHhcbiIsCisJCQkgICBpbnN0cnVjdGlvbl9wb2ludGVyKCZrZ2RidHNfcmVncykgKyBvZmZzZXQsIGFkZHIpOworCQlyZXR1cm4gMTsKKwl9CisjaWZkZWYgQ09ORklHX1g4NgorCS8qIE9uIHg4NiBhZGp1c3QgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgaWYgbmVlZGVkICovCisJa2dkYnRzX3JlZ3MuaXAgKz0gb2Zmc2V0OworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc2luZ2xlX3N0ZXAoY2hhciAqcHV0X3N0ciwgY2hhciAqYXJnKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGxvb2t1cF9hZGRyKGFyZyk7CisJLyoKKwkgKiBGcm9tIGFuIGFyY2ggaW5kZXBlbnQgcG9pbnQgb2YgdmlldyB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlcgorCSAqIHNob3VsZCBiZSBvbiBhIGRpZmZlcmVudCBpbnN0cnVjdGlvbgorCSAqLworCWtnZGJfaGV4Mm1lbSgmcHV0X3N0clsxXSwgKGNoYXIgKilrZ2RidHNfZ2RiX3JlZ3MsCisJCSBOVU1SRUdCWVRFUyk7CisJZ2RiX3JlZ3NfdG9fcHRfcmVncyhrZ2RidHNfZ2RiX3JlZ3MsICZrZ2RidHNfcmVncyk7CisJdjJwcmludGsoIlNpbmdsZXN0ZXAgc3RvcHBlZCBhdCBJUDogJWx4XG4iLAorCQkgICBpbnN0cnVjdGlvbl9wb2ludGVyKCZrZ2RidHNfcmVncykpOworCWlmIChpbnN0cnVjdGlvbl9wb2ludGVyKCZrZ2RidHNfcmVncykgPT0gYWRkcikgeworCQllcHJpbnRrKCJrZ2RidHM6IFNpbmdsZVN0ZXAgZmFpbGVkIGF0ICVseFxuIiwKKwkJCSAgIGluc3RydWN0aW9uX3BvaW50ZXIoJmtnZGJ0c19yZWdzKSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yZWdzKGNoYXIgKmFyZykKK3sKKwltZW1zZXQoc2NyYXRjaF9idWYsIDAsIHNpemVvZihzY3JhdGNoX2J1ZikpOworCXNjcmF0Y2hfYnVmWzBdID0gJ0cnOworCXB0X3JlZ3NfdG9fZ2RiX3JlZ3Moa2dkYnRzX2dkYl9yZWdzLCAma2dkYnRzX3JlZ3MpOworCWtnZGJfbWVtMmhleCgoY2hhciAqKWtnZGJ0c19nZGJfcmVncywgJnNjcmF0Y2hfYnVmWzFdLCBOVU1SRUdCWVRFUyk7CisJZmlsbF9nZXRfYnVmKHNjcmF0Y2hfYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2tpcF9iYWNrX3JlcGVhdF90ZXN0KGNoYXIgKmFyZykKK3sKKwlpbnQgZ29fYmFjayA9IHNpbXBsZV9zdHJ0b2woYXJnLCBOVUxMLCAxMCk7CisKKwlyZXBlYXRfdGVzdC0tOworCWlmIChyZXBlYXRfdGVzdCA8PSAwKQorCQl0cy5pZHgrKzsKKwllbHNlCisJCXRzLmlkeCAtPSBnb19iYWNrOworCWZpbGxfZ2V0X2J1Zih0cy50c3RbdHMuaWR4XS5nZXQpOworfQorCitzdGF0aWMgaW50IGdvdF9icmVhayhjaGFyICpwdXRfc3RyLCBjaGFyICphcmcpCit7CisJdGVzdF9jb21wbGV0ZSA9IDE7CisJaWYgKCFzdHJuY21wKHB1dF9zdHIrMSwgYXJnLCAyKSkgeworCQlpZiAoIXN0cm5jbXAoYXJnLCAiVDAiLCAyKSkKKwkJCXRlc3RfY29tcGxldGUgPSAyOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGVtdWxfc3N0ZXBfZ2V0KGNoYXIgKmFyZykKK3sKKwlpZiAoIWFyY2hfbmVlZHNfc3N0ZXBfZW11bGF0aW9uKSB7CisJCWZpbGxfZ2V0X2J1ZihhcmcpOworCQlyZXR1cm47CisJfQorCXN3aXRjaCAoc3N0ZXBfc3RhdGUpIHsKKwljYXNlIDA6CisJCXYycHJpbnRrKCJFbXVsYXRlIHNpbmdsZSBzdGVwXG4iKTsKKwkJLyogU3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY3VycmVudCBQQyAqLworCQlmaWxsX2dldF9idWYoImciKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiBzZXQgYnJlYWtwb2ludCAqLworCQlicmVha19oZWxwZXIoIlowIiwgMCwgc3N0ZXBfYWRkcik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogQ29udGludWUgKi8KKwkJZmlsbF9nZXRfYnVmKCJjIik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJLyogQ2xlYXIgYnJlYWtwb2ludCAqLworCQlicmVha19oZWxwZXIoInowIiwgMCwgc3N0ZXBfYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVwcmludGsoImtnZGJ0czogRVJST1IgZmFpbGVkIHNzdGVwIGdldCBlbXVsYXRpb25cbiIpOworCX0KKwlzc3RlcF9zdGF0ZSsrOworfQorCitzdGF0aWMgaW50IGVtdWxfc3N0ZXBfcHV0KGNoYXIgKnB1dF9zdHIsIGNoYXIgKmFyZykKK3sKKwlpZiAoIWFyY2hfbmVlZHNfc3N0ZXBfZW11bGF0aW9uKSB7CisJCWlmICghc3RybmNtcChwdXRfc3RyKzEsIGFyZywgMikpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDE7CisJfQorCXN3aXRjaCAoc3N0ZXBfc3RhdGUpIHsKKwljYXNlIDE6CisJCS8qIHZhbGlkYXRlIHRoZSAiZyIgcGFja2V0IHRvIGdldCB0aGUgSVAgKi8KKwkJa2dkYl9oZXgybWVtKCZwdXRfc3RyWzFdLCAoY2hhciAqKWtnZGJ0c19nZGJfcmVncywKKwkJCSBOVU1SRUdCWVRFUyk7CisJCWdkYl9yZWdzX3RvX3B0X3JlZ3Moa2dkYnRzX2dkYl9yZWdzLCAma2dkYnRzX3JlZ3MpOworCQl2MnByaW50aygiU3RvcHBlZCBhdCBJUDogJWx4XG4iLAorCQkJIGluc3RydWN0aW9uX3BvaW50ZXIoJmtnZGJ0c19yZWdzKSk7CisJCS8qIFdhbnQgdG8gc3RvcCBhdCBJUCArIGJyZWFrIGluc3RydWN0aW9uIHNpemUgYnkgZGVmYXVsdCAqLworCQlzc3RlcF9hZGRyID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcigma2dkYnRzX3JlZ3MpICsKKwkJCUJSRUFLX0lOU1RSX1NJWkU7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKHN0cm5jbXAocHV0X3N0ciwgIiRPSyIsIDMpKSB7CisJCQllcHJpbnRrKCJrZ2RidHM6IGZhaWxlZCBzc3RlcCBicmVhayBzZXRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpZiAoc3RybmNtcChwdXRfc3RyLCAiJFQwIiwgMykpIHsKKwkJCWVwcmludGsoImtnZGJ0czogZmFpbGVkIGNvbnRpbnVlIHNzdGVwXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHN0cm5jbXAocHV0X3N0ciwgIiRPSyIsIDMpKSB7CisJCQllcHJpbnRrKCJrZ2RidHM6IGZhaWxlZCBzc3RlcCBicmVhayB1bnNldFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQkvKiBTaW5nbGUgc3RlcCBpcyBjb21wbGV0ZSBzbyBjb250aW51ZSBvbiEgKi8KKwkJc3N0ZXBfc3RhdGUgPSAwOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQllcHJpbnRrKCJrZ2RidHM6IEVSUk9SIGZhaWxlZCBzc3RlcCBwdXQgZW11bGF0aW9uXG4iKTsKKwl9CisKKwkvKiBDb250aW51ZSBvbiB0aGUgc2FtZSB0ZXN0IGxpbmUgdW50aWwgZW11bGF0aW9uIGlzIGNvbXBsZXRlICovCisJdHMuaWR4LS07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmluYWxfYWNrX3NldChjaGFyICpwdXRfc3RyLCBjaGFyICphcmcpCit7CisJaWYgKHN0cm5jbXAocHV0X3N0cisxLCBhcmcsIDIpKQorCQlyZXR1cm4gMTsKKwlmaW5hbF9hY2sgPSAxOworCXJldHVybiAwOworfQorLyoKKyAqIFRlc3QgdG8gcGxhbnQgYSBicmVha3BvaW50IGFuZCBkZXRhY2gsIHdoaWNoIHNob3VsZCBjbGVhciBvdXQgdGhlCisgKiBicmVha3BvaW50IGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCBwbGFudF9hbmRfZGV0YWNoX3Rlc3RbXSA9IHsKKwl7ICI/IiwgIlMwKiIgfSwgLyogQ2xlYXIgYnJlYWsgcG9pbnRzICovCisJeyAia2dkYnRzX2JyZWFrX3Rlc3QiLCAiT0siLCBzd19icmVhaywgfSwgLyogc2V0IHN3IGJyZWFrcG9pbnQgKi8KKwl7ICJEIiwgIk9LIiB9LCAvKiBEZXRhY2ggKi8KKwl7ICIiLCAiIiB9LAorfTsKKworLyoKKyAqIFNpbXBsZSB0ZXN0IHRvIHdyaXRlIGluIGEgc29mdHdhcmUgYnJlYWtwb2ludCwgY2hlY2sgZm9yIHRoZQorICogY29ycmVjdCBzdG9wIGxvY2F0aW9uIGFuZCBkZXRhY2guCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdGVzdF9zdHJ1Y3Qgc3dfYnJlYWtwb2ludF90ZXN0W10gPSB7CisJeyAiPyIsICJTMCoiIH0sIC8qIENsZWFyIGJyZWFrIHBvaW50cyAqLworCXsgImtnZGJ0c19icmVha190ZXN0IiwgIk9LIiwgc3dfYnJlYWssIH0sIC8qIHNldCBzdyBicmVha3BvaW50ICovCisJeyAiYyIsICJUMCoiLCB9LCAvKiBDb250aW51ZSAqLworCXsgImciLCAia2dkYnRzX2JyZWFrX3Rlc3QiLCAwLCBjaGVja19hbmRfcmV3aW5kX3BjIH0sCisJeyAid3JpdGUiLCAiT0siLCB3cml0ZV9yZWdzIH0sCisJeyAia2dkYnRzX2JyZWFrX3Rlc3QiLCAiT0siLCBzd19yZW1fYnJlYWsgfSwgLypyZW1vdmUgYnJlYWtwb2ludCAqLworCXsgIkQiLCAiT0siIH0sIC8qIERldGFjaCAqLworCXsgIkQiLCAiT0siLCAwLCAgZ290X2JyZWFrIH0sIC8qIElmIHRoZSB0ZXN0IHdvcmtlZCB3ZSBtYWRlIGl0IGhlcmUgKi8KKwl7ICIiLCAiIiB9LAorfTsKKworLyoKKyAqIFRlc3QgYSBrbm93biBiYWQgbWVtb3J5IHJlYWQgbG9jYXRpb24gdG8gdGVzdCB0aGUgZmF1bHQgaGFuZGxlciBhbmQKKyAqIHJlYWQgYnl0ZXMgMS04IGF0IHRoZSBiYWQgYWRkcmVzcworICovCitzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IGJhZF9yZWFkX3Rlc3RbXSA9IHsKKwl7ICI/IiwgIlMwKiIgfSwgLyogQ2xlYXIgYnJlYWsgcG9pbnRzICovCisJeyAibTAsMSIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyAxICovCisJeyAibTAsMiIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyAyICovCisJeyAibTAsMyIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyAzICovCisJeyAibTAsNCIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyA0ICovCisJeyAibTAsNSIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyA1ICovCisJeyAibTAsNiIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyA2ICovCisJeyAibTAsNyIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyA3ICovCisJeyAibTAsOCIsICJFKiIgfSwgLyogcmVhZCAxIGJ5dGUgYXQgYWRkcmVzcyA4ICovCisJeyAiRCIsICJPSyIgfSwgLyogRGV0YWNoIHdoaWNoIHJlbW92ZXMgYWxsIGJyZWFrcG9pbnRzIGFuZCBjb250aW51ZXMgKi8KKwl7ICIiLCAiIiB9LAorfTsKKworLyoKKyAqIFRlc3QgZm9yIGhpdHRpbmcgYSBicmVha3BvaW50LCByZW1vdmUgaXQsIHNpbmdsZSBzdGVwLCBwbGFudCBpdAorICogYWdhaW4gYW5kIGRldGFjaC4KKyAqLworc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCBzaW5nbGVzdGVwX2JyZWFrX3Rlc3RbXSA9IHsKKwl7ICI/IiwgIlMwKiIgfSwgLyogQ2xlYXIgYnJlYWsgcG9pbnRzICovCisJeyAia2dkYnRzX2JyZWFrX3Rlc3QiLCAiT0siLCBzd19icmVhaywgfSwgLyogc2V0IHN3IGJyZWFrcG9pbnQgKi8KKwl7ICJjIiwgIlQwKiIsIH0sIC8qIENvbnRpbnVlICovCisJeyAiZyIsICJrZ2RidHNfYnJlYWtfdGVzdCIsIDAsIGNoZWNrX2FuZF9yZXdpbmRfcGMgfSwKKwl7ICJ3cml0ZSIsICJPSyIsIHdyaXRlX3JlZ3MgfSwgLyogV3JpdGUgcmVnaXN0ZXJzICovCisJeyAia2dkYnRzX2JyZWFrX3Rlc3QiLCAiT0siLCBzd19yZW1fYnJlYWsgfSwgLypyZW1vdmUgYnJlYWtwb2ludCAqLworCXsgInMiLCAiVDAqIiwgZW11bF9zc3RlcF9nZXQsIGVtdWxfc3N0ZXBfcHV0IH0sIC8qIFNpbmdsZSBzdGVwICovCisJeyAiZyIsICJrZ2RidHNfYnJlYWtfdGVzdCIsIDAsIGNoZWNrX3NpbmdsZV9zdGVwIH0sCisJeyAia2dkYnRzX2JyZWFrX3Rlc3QiLCAiT0siLCBzd19icmVhaywgfSwgLyogc2V0IHN3IGJyZWFrcG9pbnQgKi8KKwl7ICJjIiwgIlQwKiIsIH0sIC8qIENvbnRpbnVlICovCisJeyAiZyIsICJrZ2RidHNfYnJlYWtfdGVzdCIsIDAsIGNoZWNrX2FuZF9yZXdpbmRfcGMgfSwKKwl7ICJ3cml0ZSIsICJPSyIsIHdyaXRlX3JlZ3MgfSwgLyogV3JpdGUgcmVnaXN0ZXJzICovCisJeyAiRCIsICJPSyIgfSwgLyogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBhbmQgY29udGludWVzICovCisJeyAiIiwgIiIgfSwKK307CisKKy8qCisgKiBUZXN0IGZvciBoaXR0aW5nIGEgYnJlYWtwb2ludCBhdCBkb19mb3JrIGZvciB3aGF0IGV2ZXIgdGhlIG51bWJlcgorICogb2YgaXRlcmF0aW9ucyByZXF1aXJlZCBieSB0aGUgdmFyaWFibGUgcmVwZWF0X3Rlc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdGVzdF9zdHJ1Y3QgZG9fZm9ya190ZXN0W10gPSB7CisJeyAiPyIsICJTMCoiIH0sIC8qIENsZWFyIGJyZWFrIHBvaW50cyAqLworCXsgImRvX2ZvcmsiLCAiT0siLCBzd19icmVhaywgfSwgLyogc2V0IHN3IGJyZWFrcG9pbnQgKi8KKwl7ICJjIiwgIlQwKiIsIH0sIC8qIENvbnRpbnVlICovCisJeyAiZyIsICJkb19mb3JrIiwgMCwgY2hlY2tfYW5kX3Jld2luZF9wYyB9LCAvKiBjaGVjayBsb2NhdGlvbiAqLworCXsgIndyaXRlIiwgIk9LIiwgd3JpdGVfcmVncyB9LCAvKiBXcml0ZSByZWdpc3RlcnMgKi8KKwl7ICJkb19mb3JrIiwgIk9LIiwgc3dfcmVtX2JyZWFrIH0sIC8qcmVtb3ZlIGJyZWFrcG9pbnQgKi8KKwl7ICJzIiwgIlQwKiIsIGVtdWxfc3N0ZXBfZ2V0LCBlbXVsX3NzdGVwX3B1dCB9LCAvKiBTaW5nbGUgc3RlcCAqLworCXsgImciLCAiZG9fZm9yayIsIDAsIGNoZWNrX3NpbmdsZV9zdGVwIH0sCisJeyAiZG9fZm9yayIsICJPSyIsIHN3X2JyZWFrLCB9LCAvKiBzZXQgc3cgYnJlYWtwb2ludCAqLworCXsgIjciLCAiVDAqIiwgc2tpcF9iYWNrX3JlcGVhdF90ZXN0IH0sIC8qIExvb3AgYmFzZWQgb24gcmVwZWF0X3Rlc3QgKi8KKwl7ICJEIiwgIk9LIiwgMCwgZmluYWxfYWNrX3NldCB9LCAvKiBkZXRhY2ggYW5kIHVucmVnaXN0ZXIgSS9PICovCisJeyAiIiwgIiIgfSwKK307CisKKy8qIFRlc3QgZm9yIGhpdHRpbmcgYSBicmVha3BvaW50IGF0IHN5c19vcGVuIGZvciB3aGF0IGV2ZXIgdGhlIG51bWJlcgorICogb2YgaXRlcmF0aW9ucyByZXF1aXJlZCBieSB0aGUgdmFyaWFibGUgcmVwZWF0X3Rlc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdGVzdF9zdHJ1Y3Qgc3lzX29wZW5fdGVzdFtdID0geworCXsgIj8iLCAiUzAqIiB9LCAvKiBDbGVhciBicmVhayBwb2ludHMgKi8KKwl7ICJzeXNfb3BlbiIsICJPSyIsIHN3X2JyZWFrLCB9LCAvKiBzZXQgc3cgYnJlYWtwb2ludCAqLworCXsgImMiLCAiVDAqIiwgfSwgLyogQ29udGludWUgKi8KKwl7ICJnIiwgInN5c19vcGVuIiwgMCwgY2hlY2tfYW5kX3Jld2luZF9wYyB9LCAvKiBjaGVjayBsb2NhdGlvbiAqLworCXsgIndyaXRlIiwgIk9LIiwgd3JpdGVfcmVncyB9LCAvKiBXcml0ZSByZWdpc3RlcnMgKi8KKwl7ICJzeXNfb3BlbiIsICJPSyIsIHN3X3JlbV9icmVhayB9LCAvKnJlbW92ZSBicmVha3BvaW50ICovCisJeyAicyIsICJUMCoiLCBlbXVsX3NzdGVwX2dldCwgZW11bF9zc3RlcF9wdXQgfSwgLyogU2luZ2xlIHN0ZXAgKi8KKwl7ICJnIiwgInN5c19vcGVuIiwgMCwgY2hlY2tfc2luZ2xlX3N0ZXAgfSwKKwl7ICJzeXNfb3BlbiIsICJPSyIsIHN3X2JyZWFrLCB9LCAvKiBzZXQgc3cgYnJlYWtwb2ludCAqLworCXsgIjciLCAiVDAqIiwgc2tpcF9iYWNrX3JlcGVhdF90ZXN0IH0sIC8qIExvb3AgYmFzZWQgb24gcmVwZWF0X3Rlc3QgKi8KKwl7ICJEIiwgIk9LIiwgMCwgZmluYWxfYWNrX3NldCB9LCAvKiBkZXRhY2ggYW5kIHVucmVnaXN0ZXIgSS9PICovCisJeyAiIiwgIiIgfSwKK307CisKKy8qCisgKiBUZXN0IGZvciBoaXR0aW5nIGEgc2ltcGxlIGh3IGJyZWFrcG9pbnQKKyAqLworc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCBod19icmVha3BvaW50X3Rlc3RbXSA9IHsKKwl7ICI/IiwgIlMwKiIgfSwgLyogQ2xlYXIgYnJlYWsgcG9pbnRzICovCisJeyAia2dkYnRzX2JyZWFrX3Rlc3QiLCAiT0siLCBod19icmVhaywgfSwgLyogc2V0IGh3IGJyZWFrcG9pbnQgKi8KKwl7ICJjIiwgIlQwKiIsIH0sIC8qIENvbnRpbnVlICovCisJeyAiZyIsICJrZ2RidHNfYnJlYWtfdGVzdCIsIDAsIGNoZWNrX2FuZF9yZXdpbmRfcGMgfSwKKwl7ICJ3cml0ZSIsICJPSyIsIHdyaXRlX3JlZ3MgfSwKKwl7ICJrZ2RidHNfYnJlYWtfdGVzdCIsICJPSyIsIGh3X3JlbV9icmVhayB9LCAvKnJlbW92ZSBicmVha3BvaW50ICovCisJeyAiRCIsICJPSyIgfSwgLyogRGV0YWNoICovCisJeyAiRCIsICJPSyIsIDAsICBnb3RfYnJlYWsgfSwgLyogSWYgdGhlIHRlc3Qgd29ya2VkIHdlIG1hZGUgaXQgaGVyZSAqLworCXsgIiIsICIiIH0sCit9OworCisvKgorICogVGVzdCBmb3IgaGl0dGluZyBhIGh3IHdyaXRlIGJyZWFrcG9pbnQKKyAqLworc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCBod193cml0ZV9icmVha190ZXN0W10gPSB7CisJeyAiPyIsICJTMCoiIH0sIC8qIENsZWFyIGJyZWFrIHBvaW50cyAqLworCXsgImh3X2JyZWFrX3ZhbCIsICJPSyIsIGh3X3dyaXRlX2JyZWFrLCB9LCAvKiBzZXQgaHcgYnJlYWtwb2ludCAqLworCXsgImMiLCAiVDAqIiwgMCwgZ290X2JyZWFrIH0sIC8qIENvbnRpbnVlICovCisJeyAiZyIsICJzaWxlbnQiLCAwLCBjaGVja19hbmRfcmV3aW5kX3BjIH0sCisJeyAid3JpdGUiLCAiT0siLCB3cml0ZV9yZWdzIH0sCisJeyAiaHdfYnJlYWtfdmFsIiwgIk9LIiwgaHdfcmVtX3dyaXRlX2JyZWFrIH0sIC8qcmVtb3ZlIGJyZWFrcG9pbnQgKi8KKwl7ICJEIiwgIk9LIiB9LCAvKiBEZXRhY2ggKi8KKwl7ICJEIiwgIk9LIiwgMCwgIGdvdF9icmVhayB9LCAvKiBJZiB0aGUgdGVzdCB3b3JrZWQgd2UgbWFkZSBpdCBoZXJlICovCisJeyAiIiwgIiIgfSwKK307CisKKy8qCisgKiBUZXN0IGZvciBoaXR0aW5nIGEgaHcgYWNjZXNzIGJyZWFrcG9pbnQKKyAqLworc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCBod19hY2Nlc3NfYnJlYWtfdGVzdFtdID0geworCXsgIj8iLCAiUzAqIiB9LCAvKiBDbGVhciBicmVhayBwb2ludHMgKi8KKwl7ICJod19icmVha192YWwiLCAiT0siLCBod19hY2Nlc3NfYnJlYWssIH0sIC8qIHNldCBodyBicmVha3BvaW50ICovCisJeyAiYyIsICJUMCoiLCAwLCBnb3RfYnJlYWsgfSwgLyogQ29udGludWUgKi8KKwl7ICJnIiwgInNpbGVudCIsIDAsIGNoZWNrX2FuZF9yZXdpbmRfcGMgfSwKKwl7ICJ3cml0ZSIsICJPSyIsIHdyaXRlX3JlZ3MgfSwKKwl7ICJod19icmVha192YWwiLCAiT0siLCBod19yZW1fYWNjZXNzX2JyZWFrIH0sIC8qcmVtb3ZlIGJyZWFrcG9pbnQgKi8KKwl7ICJEIiwgIk9LIiB9LCAvKiBEZXRhY2ggKi8KKwl7ICJEIiwgIk9LIiwgMCwgIGdvdF9icmVhayB9LCAvKiBJZiB0aGUgdGVzdCB3b3JrZWQgd2UgbWFkZSBpdCBoZXJlICovCisJeyAiIiwgIiIgfSwKK307CisKKy8qCisgKiBUZXN0IGZvciBoaXR0aW5nIGEgaHcgYWNjZXNzIGJyZWFrcG9pbnQKKyAqLworc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCBubWlfc2xlZXBfdGVzdFtdID0geworCXsgIj8iLCAiUzAqIiB9LCAvKiBDbGVhciBicmVhayBwb2ludHMgKi8KKwl7ICJjIiwgIlQwKiIsIDAsIGdvdF9icmVhayB9LCAvKiBDb250aW51ZSAqLworCXsgIkQiLCAiT0siIH0sIC8qIERldGFjaCAqLworCXsgIkQiLCAiT0siLCAwLCAgZ290X2JyZWFrIH0sIC8qIElmIHRoZSB0ZXN0IHdvcmtlZCB3ZSBtYWRlIGl0IGhlcmUgKi8KKwl7ICIiLCAiIiB9LAorfTsKKworc3RhdGljIHZvaWQgZmlsbF9nZXRfYnVmKGNoYXIgKmJ1ZikKK3sKKwl1bnNpZ25lZCBjaGFyIGNoZWNrc3VtID0gMDsKKwlpbnQgY291bnQgPSAwOworCWNoYXIgY2g7CisKKwlzdHJjcHkoZ2V0X2J1ZiwgIiQiKTsKKwlzdHJjYXQoZ2V0X2J1ZiwgYnVmKTsKKwl3aGlsZSAoKGNoID0gYnVmW2NvdW50XSkpIHsKKwkJY2hlY2tzdW0gKz0gY2g7CisJCWNvdW50Kys7CisJfQorCXN0cmNhdChnZXRfYnVmLCAiIyIpOworCWdldF9idWZbY291bnQgKyAyXSA9IGhleGNoYXJzW2NoZWNrc3VtID4+IDRdOworCWdldF9idWZbY291bnQgKyAzXSA9IGhleGNoYXJzW2NoZWNrc3VtICYgMHhmXTsKKwlnZXRfYnVmW2NvdW50ICsgNF0gPSAnXDAnOworCXYycHJpbnRrKCJnZXQlaTogJXNcbiIsIHRzLmlkeCwgZ2V0X2J1Zik7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfc2ltcGxlX3Rlc3QoY2hhciAqcHV0X3N0cikKK3sKKwljaGFyICpjaGtfc3RyOworCisJaWYgKHRzLnRzdFt0cy5pZHhdLnB1dF9oYW5kbGVyKQorCQlyZXR1cm4gdHMudHN0W3RzLmlkeF0ucHV0X2hhbmRsZXIocHV0X3N0ciwKKwkJCXRzLnRzdFt0cy5pZHhdLnB1dCk7CisKKwljaGtfc3RyID0gdHMudHN0W3RzLmlkeF0ucHV0OworCWlmICgqcHV0X3N0ciA9PSAnJCcpCisJCXB1dF9zdHIrKzsKKworCXdoaWxlICgqY2hrX3N0ciAhPSAnXDAnICYmICpwdXRfc3RyICE9ICdcMCcpIHsKKwkJLyogSWYgc29tZW9uZSBkb2VzIGEgKiB0byBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLCBhbGxvdworCQkgKiBpdCwgb3Igc3RvcCBpZiB0aGUgcmVjaWV2ZWQgc3RyaW5nIGlzIGNvbXBsZXRlLgorCQkgKi8KKwkJaWYgKCpwdXRfc3RyID09ICcjJyB8fCAqY2hrX3N0ciA9PSAnKicpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCpwdXRfc3RyICE9ICpjaGtfc3RyKQorCQkJcmV0dXJuIDE7CisKKwkJY2hrX3N0cisrOworCQlwdXRfc3RyKys7CisJfQorCWlmICgqY2hrX3N0ciA9PSAnXDAnICYmICgqcHV0X3N0ciA9PSAnXDAnIHx8ICpwdXRfc3RyID09ICcjJykpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NpbXBsZV90ZXN0KGludCBpc19nZXRfY2hhciwgaW50IGNocikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAoaXNfZ2V0X2NoYXIpIHsKKwkJLyogU2VuZCBhbiBBQ0sgb24gdGhlIGdldCBpZiBhIHByaW9yIHB1dCBjb21wbGV0ZWQgYW5kIHNldCB0aGUKKwkJICogc2VuZCBhY2sgdmFyaWFibGUKKwkJICovCisJCWlmIChzZW5kX2FjaykgeworCQkJc2VuZF9hY2sgPSAwOworCQkJcmV0dXJuICcrJzsKKwkJfQorCQkvKiBPbiB0aGUgZmlyc3QgZ2V0IGNoYXIsIGZpbGwgdGhlIHRyYW5zbWl0IGJ1ZmZlciBhbmQgdGhlbgorCQkgKiB0YWtlIGZyb20gdGhlIGdldF9zdHJpbmcuCisJCSAqLworCQlpZiAoZ2V0X2J1Zl9jbnQgPT0gMCkgeworCQkJaWYgKHRzLnRzdFt0cy5pZHhdLmdldF9oYW5kbGVyKQorCQkJCXRzLnRzdFt0cy5pZHhdLmdldF9oYW5kbGVyKHRzLnRzdFt0cy5pZHhdLmdldCk7CisJCQllbHNlCisJCQkJZmlsbF9nZXRfYnVmKHRzLnRzdFt0cy5pZHhdLmdldCk7CisJCX0KKworCQlpZiAoZ2V0X2J1ZltnZXRfYnVmX2NudF0gPT0gJ1wwJykgeworCQkJZXByaW50aygia2dkYnRzOiBFUlJPUiBHRVQ6IEVPQiBvbiAnJXMnIGF0ICVpXG4iLAorCQkJICAgdHMubmFtZSwgdHMuaWR4KTsKKwkJCWdldF9idWZfY250ID0gMDsKKwkJCWZpbGxfZ2V0X2J1ZigiRCIpOworCQl9CisJCXJldCA9IGdldF9idWZbZ2V0X2J1Zl9jbnRdOworCQlnZXRfYnVmX2NudCsrOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRoaXMgY2FsbGJhY2sgaXMgYSBwdXQgY2hhciB3aGljaCBpcyB3aGVuIGtnZGIgc2VuZHMgZGF0YSB0bworCSAqIHRoaXMgSS9PIG1vZHVsZS4KKwkgKi8KKwlpZiAodHMudHN0W3RzLmlkeF0uZ2V0WzBdID09ICdcMCcgJiYKKwkJdHMudHN0W3RzLmlkeF0ucHV0WzBdID09ICdcMCcpIHsKKwkJZXByaW50aygia2dkYnRzOiBFUlJPUjogYmV5b25kIGVuZCBvZiB0ZXN0IG9uIgorCQkJICAgIiAnJXMnIGxpbmUgJWlcbiIsIHRzLm5hbWUsIHRzLmlkeCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChwdXRfYnVmX2NudCA+PSBCVUZNQVgpIHsKKwkJZXByaW50aygia2dkYnRzOiBFUlJPUjogcHV0IGJ1ZmZlciBvdmVyZmxvdyBvbiIKKwkJCSAgICIgJyVzJyBsaW5lICVpXG4iLCB0cy5uYW1lLCB0cy5pZHgpOworCQlwdXRfYnVmX2NudCA9IDA7CisJCXJldHVybiAwOworCX0KKwkvKiBJZ25vcmUgZXZlcnl0aGluZyB1bnRpbCB0aGUgZmlyc3QgdmFsaWQgcGFja2V0IHN0YXJ0ICckJyAqLworCWlmIChwdXRfYnVmX2NudCA9PSAwICYmIGNociAhPSAnJCcpCisJCXJldHVybiAwOworCisJcHV0X2J1ZltwdXRfYnVmX2NudF0gPSBjaHI7CisJcHV0X2J1Zl9jbnQrKzsKKworCS8qIEVuZCBvZiBwYWNrZXQgPT0gI1hYIHNvIGxvb2sgZm9yIHRoZSAnIycgKi8KKwlpZiAocHV0X2J1Zl9jbnQgPiAzICYmIHB1dF9idWZbcHV0X2J1Zl9jbnQgLSAzXSA9PSAnIycpIHsKKwkJcHV0X2J1ZltwdXRfYnVmX2NudF0gPSAnXDAnOworCQl2MnByaW50aygicHV0JWk6ICVzXG4iLCB0cy5pZHgsIHB1dF9idWYpOworCQkvKiBUcmlnZ2VyIGNoZWNrIGhlcmUgKi8KKwkJaWYgKHRzLnZhbGlkYXRlX3B1dCAmJiB0cy52YWxpZGF0ZV9wdXQocHV0X2J1ZikpIHsKKwkJCWVwcmludGsoImtnZGJ0czogRVJST1IgUFVUOiBlbmQgb2YgdGVzdCAiCisJCQkgICAiYnVmZmVyIG9uICclcycgbGluZSAlaSBleHBlY3RlZCAlcyBnb3QgJXNcbiIsCisJCQkgICB0cy5uYW1lLCB0cy5pZHgsIHRzLnRzdFt0cy5pZHhdLnB1dCwgcHV0X2J1Zik7CisJCX0KKwkJdHMuaWR4Kys7CisJCXB1dF9idWZfY250ID0gMDsKKwkJZ2V0X2J1Zl9jbnQgPSAwOworCQlzZW5kX2FjayA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0X3NpbXBsZV90ZXN0KHZvaWQpCit7CisJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisJdHMucnVuX3Rlc3QgPSBydW5fc2ltcGxlX3Rlc3Q7CisJdHMudmFsaWRhdGVfcHV0ID0gdmFsaWRhdGVfc2ltcGxlX3Rlc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9wbGFudF9hbmRfZGV0YWNoX3Rlc3QoaW50IGlzX2Vhcmx5KQoreworCWNoYXIgYmVmb3JlW0JSRUFLX0lOU1RSX1NJWkVdOworCWNoYXIgYWZ0ZXJbQlJFQUtfSU5TVFJfU0laRV07CisKKwlwcm9iZV9rZXJuZWxfcmVhZChiZWZvcmUsIChjaGFyICopa2dkYnRzX2JyZWFrX3Rlc3QsCisJICBCUkVBS19JTlNUUl9TSVpFKTsKKwlpbml0X3NpbXBsZV90ZXN0KCk7CisJdHMudHN0ID0gcGxhbnRfYW5kX2RldGFjaF90ZXN0OworCXRzLm5hbWUgPSAicGxhbnRfYW5kX2RldGFjaF90ZXN0IjsKKwkvKiBBY3RpdmF0ZSB0ZXN0IHdpdGggaW5pdGlhbCBicmVha3BvaW50ICovCisJaWYgKCFpc19lYXJseSkKKwkJa2dkYl9icmVha3BvaW50KCk7CisJcHJvYmVfa2VybmVsX3JlYWQoYWZ0ZXIsIChjaGFyICopa2dkYnRzX2JyZWFrX3Rlc3QsCisJICBCUkVBS19JTlNUUl9TSVpFKTsKKwlpZiAobWVtY21wKGJlZm9yZSwgYWZ0ZXIsIEJSRUFLX0lOU1RSX1NJWkUpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgImtnZGJ0czogRVJST1Iga2dkYiBjb3JydXB0ZWQgbWVtb3J5XG4iKTsKKwkJcGFuaWMoImtnZGIgbWVtb3J5IGNvcnJ1cHRpb24iKTsKKwl9CisKKwkvKiBjb21wbGV0ZSB0aGUgZGV0YWNoIHRlc3QgKi8KKwlpZiAoIWlzX2Vhcmx5KQorCQlrZ2RidHNfYnJlYWtfdGVzdCgpOworfQorCitzdGF0aWMgdm9pZCBydW5fYnJlYWtwb2ludF90ZXN0KGludCBpc19od19icmVha3BvaW50KQoreworCXRlc3RfY29tcGxldGUgPSAwOworCWluaXRfc2ltcGxlX3Rlc3QoKTsKKwlpZiAoaXNfaHdfYnJlYWtwb2ludCkgeworCQl0cy50c3QgPSBod19icmVha3BvaW50X3Rlc3Q7CisJCXRzLm5hbWUgPSAiaHdfYnJlYWtwb2ludF90ZXN0IjsKKwl9IGVsc2UgeworCQl0cy50c3QgPSBzd19icmVha3BvaW50X3Rlc3Q7CisJCXRzLm5hbWUgPSAic3dfYnJlYWtwb2ludF90ZXN0IjsKKwl9CisJLyogQWN0aXZhdGUgdGVzdCB3aXRoIGluaXRpYWwgYnJlYWtwb2ludCAqLworCWtnZGJfYnJlYWtwb2ludCgpOworCS8qIHJ1biBjb2RlIHdpdGggdGhlIGJyZWFrIHBvaW50IGluIGl0ICovCisJa2dkYnRzX2JyZWFrX3Rlc3QoKTsKKwlrZ2RiX2JyZWFrcG9pbnQoKTsKKworCWlmICh0ZXN0X2NvbXBsZXRlKQorCQlyZXR1cm47CisKKwllcHJpbnRrKCJrZ2RidHM6IEVSUk9SICVzIHRlc3QgZmFpbGVkXG4iLCB0cy5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgcnVuX2h3X2JyZWFrX3Rlc3QoaW50IGlzX3dyaXRlX3Rlc3QpCit7CisJdGVzdF9jb21wbGV0ZSA9IDA7CisJaW5pdF9zaW1wbGVfdGVzdCgpOworCWlmIChpc193cml0ZV90ZXN0KSB7CisJCXRzLnRzdCA9IGh3X3dyaXRlX2JyZWFrX3Rlc3Q7CisJCXRzLm5hbWUgPSAiaHdfd3JpdGVfYnJlYWtfdGVzdCI7CisJfSBlbHNlIHsKKwkJdHMudHN0ID0gaHdfYWNjZXNzX2JyZWFrX3Rlc3Q7CisJCXRzLm5hbWUgPSAiaHdfYWNjZXNzX2JyZWFrX3Rlc3QiOworCX0KKwkvKiBBY3RpdmF0ZSB0ZXN0IHdpdGggaW5pdGlhbCBicmVha3BvaW50ICovCisJa2dkYl9icmVha3BvaW50KCk7CisJaHdfYnJlYWtfdmFsX2FjY2VzcygpOworCWlmIChpc193cml0ZV90ZXN0KSB7CisJCWlmICh0ZXN0X2NvbXBsZXRlID09IDIpCisJCQllcHJpbnRrKCJrZ2RidHM6IEVSUk9SICVzIGJyb2tlIG9uIGFjY2Vzc1xuIiwKKwkJCQl0cy5uYW1lKTsKKwkJaHdfYnJlYWtfdmFsX3dyaXRlKCk7CisJfQorCWtnZGJfYnJlYWtwb2ludCgpOworCisJaWYgKHRlc3RfY29tcGxldGUgPT0gMSkKKwkJcmV0dXJuOworCisJZXByaW50aygia2dkYnRzOiBFUlJPUiAlcyB0ZXN0IGZhaWxlZFxuIiwgdHMubmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9ubWlfc2xlZXBfdGVzdChpbnQgbm1pX3NsZWVwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbml0X3NpbXBsZV90ZXN0KCk7CisJdHMudHN0ID0gbm1pX3NsZWVwX3Rlc3Q7CisJdHMubmFtZSA9ICJubWlfc2xlZXBfdGVzdCI7CisJLyogQWN0aXZhdGUgdGVzdCB3aXRoIGluaXRpYWwgYnJlYWtwb2ludCAqLworCWtnZGJfYnJlYWtwb2ludCgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltZGVsYXkobm1pX3NsZWVwKjEwMDApOworCXRvdWNoX25taV93YXRjaGRvZygpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlpZiAodGVzdF9jb21wbGV0ZSAhPSAyKQorCQllcHJpbnRrKCJrZ2RidHM6IEVSUk9SIG5taV90ZXN0IGRpZCBub3QgaGl0IG5taVxuIik7CisJa2dkYl9icmVha3BvaW50KCk7CisJaWYgKHRlc3RfY29tcGxldGUgPT0gMSkKKwkJcmV0dXJuOworCisJZXByaW50aygia2dkYnRzOiBFUlJPUiAlcyB0ZXN0IGZhaWxlZFxuIiwgdHMubmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9iYWRfcmVhZF90ZXN0KHZvaWQpCit7CisJaW5pdF9zaW1wbGVfdGVzdCgpOworCXRzLnRzdCA9IGJhZF9yZWFkX3Rlc3Q7CisJdHMubmFtZSA9ICJiYWRfcmVhZF90ZXN0IjsKKwkvKiBBY3RpdmF0ZSB0ZXN0IHdpdGggaW5pdGlhbCBicmVha3BvaW50ICovCisJa2dkYl9icmVha3BvaW50KCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9kb19mb3JrX3Rlc3Qodm9pZCkKK3sKKwlpbml0X3NpbXBsZV90ZXN0KCk7CisJdHMudHN0ID0gZG9fZm9ya190ZXN0OworCXRzLm5hbWUgPSAiZG9fZm9ya190ZXN0IjsKKwkvKiBBY3RpdmF0ZSB0ZXN0IHdpdGggaW5pdGlhbCBicmVha3BvaW50ICovCisJa2dkYl9icmVha3BvaW50KCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9zeXNfb3Blbl90ZXN0KHZvaWQpCit7CisJaW5pdF9zaW1wbGVfdGVzdCgpOworCXRzLnRzdCA9IHN5c19vcGVuX3Rlc3Q7CisJdHMubmFtZSA9ICJzeXNfb3Blbl90ZXN0IjsKKwkvKiBBY3RpdmF0ZSB0ZXN0IHdpdGggaW5pdGlhbCBicmVha3BvaW50ICovCisJa2dkYl9icmVha3BvaW50KCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9zaW5nbGVzdGVwX2JyZWFrX3Rlc3Qodm9pZCkKK3sKKwlpbml0X3NpbXBsZV90ZXN0KCk7CisJdHMudHN0ID0gc2luZ2xlc3RlcF9icmVha190ZXN0OworCXRzLm5hbWUgPSAic2luZ2xlc3RlcF9icmVha3BvaW50X3Rlc3QiOworCS8qIEFjdGl2YXRlIHRlc3Qgd2l0aCBpbml0aWFsIGJyZWFrcG9pbnQgKi8KKwlrZ2RiX2JyZWFrcG9pbnQoKTsKKwlrZ2RidHNfYnJlYWtfdGVzdCgpOworCWtnZGJ0c19icmVha190ZXN0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGtnZGJ0c19ydW5fdGVzdHModm9pZCkKK3sKKwljaGFyICpwdHI7CisJaW50IGZvcmtfdGVzdCA9IDA7CisJaW50IHN5c19vcGVuX3Rlc3QgPSAwOworCWludCBubWlfc2xlZXAgPSAwOworCisJcHRyID0gc3Ryc3RyKGNvbmZpZywgIkYiKTsKKwlpZiAocHRyKQorCQlmb3JrX3Rlc3QgPSBzaW1wbGVfc3RydG9sKHB0cisxLCBOVUxMLCAxMCk7CisJcHRyID0gc3Ryc3RyKGNvbmZpZywgIlMiKTsKKwlpZiAocHRyKQorCQlzeXNfb3Blbl90ZXN0ID0gc2ltcGxlX3N0cnRvbChwdHIrMSwgTlVMTCwgMTApOworCXB0ciA9IHN0cnN0cihjb25maWcsICJOIik7CisJaWYgKHB0cikKKwkJbm1pX3NsZWVwID0gc2ltcGxlX3N0cnRvbChwdHIrMSwgTlVMTCwgMTApOworCisJLyogcmVxdWlyZWQgaW50ZXJuYWwgS0dEQiB0ZXN0cyAqLworCXYxcHJpbnRrKCJrZ2RidHM6UlVOIHBsYW50IGFuZCBkZXRhY2ggdGVzdFxuIik7CisJcnVuX3BsYW50X2FuZF9kZXRhY2hfdGVzdCgwKTsKKwl2MXByaW50aygia2dkYnRzOlJVTiBzdyBicmVha3BvaW50IHRlc3RcbiIpOworCXJ1bl9icmVha3BvaW50X3Rlc3QoMCk7CisJdjFwcmludGsoImtnZGJ0czpSVU4gYmFkIG1lbW9yeSBhY2Nlc3MgdGVzdFxuIik7CisJcnVuX2JhZF9yZWFkX3Rlc3QoKTsKKwl2MXByaW50aygia2dkYnRzOlJVTiBzaW5nbGVzdGVwIGJyZWFrcG9pbnQgdGVzdFxuIik7CisJcnVuX3NpbmdsZXN0ZXBfYnJlYWtfdGVzdCgpOworCisJLyogPT09T3B0aW9uYWwgdGVzdHM9PT0gKi8KKworCS8qIEFsbCBIVyBicmVhayBwb2ludCB0ZXN0cyAqLworCWlmIChhcmNoX2tnZGJfb3BzLmZsYWdzICYgS0dEQl9IV19CUkVBS1BPSU5UKSB7CisJCXYxcHJpbnRrKCJrZ2RidHM6UlVOIGh3IGJyZWFrcG9pbnQgdGVzdFxuIik7CisJCXJ1bl9icmVha3BvaW50X3Rlc3QoMSk7CisJCXYxcHJpbnRrKCJrZ2RidHM6UlVOIGh3IHdyaXRlIGJyZWFrcG9pbnQgdGVzdFxuIik7CisJCXJ1bl9od19icmVha190ZXN0KDEpOworCQl2MXByaW50aygia2dkYnRzOlJVTiBhY2Nlc3Mgd3JpdGUgYnJlYWtwb2ludCB0ZXN0XG4iKTsKKwkJcnVuX2h3X2JyZWFrX3Rlc3QoMCk7CisJfQorCisJaWYgKG5taV9zbGVlcCkgeworCQl2MXByaW50aygia2dkYnRzOlJVTiBOTUkgc2xlZXAgJWkgc2Vjb25kcyB0ZXN0XG4iLCBubWlfc2xlZXApOworCQlydW5fbm1pX3NsZWVwX3Rlc3Qobm1pX3NsZWVwKTsKKwl9CisKKwkvKiBJZiB0aGUgZG9fZm9yayB0ZXN0IGlzIHJ1biBpdCB3aWxsIGJlIHRoZSBsYXN0IHRlc3QgdGhhdCBpcworCSAqIGV4ZWN1dGVkIGJlY2F1c2UgYSBrZXJuZWwgdGhyZWFkIHdpbGwgYmUgc3Bhd25lZCBhdCB0aGUgdmVyeQorCSAqIGVuZCB0byB1bnJlZ2lzdGVyIHRoZSBkZWJ1ZyBob29rcy4KKwkgKi8KKwlpZiAoZm9ya190ZXN0KSB7CisJCXJlcGVhdF90ZXN0ID0gZm9ya190ZXN0OworCQlwcmludGsoS0VSTl9JTkZPICJrZ2RidHM6UlVOIGRvX2ZvcmsgZm9yICVpIGJyZWFrcG9pbnRzXG4iLAorCQkJcmVwZWF0X3Rlc3QpOworCQlrdGhyZWFkX3J1bihrZ2RidHNfdW5yZWdfdGhyZWFkLCAwLCAia2dkYnRzX3VucmVnIik7CisJCXJ1bl9kb19mb3JrX3Rlc3QoKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSBzeXNfb3BlbiB0ZXN0IGlzIHJ1biBpdCB3aWxsIGJlIHRoZSBsYXN0IHRlc3QgdGhhdCBpcworCSAqIGV4ZWN1dGVkIGJlY2F1c2UgYSBrZXJuZWwgdGhyZWFkIHdpbGwgYmUgc3Bhd25lZCBhdCB0aGUgdmVyeQorCSAqIGVuZCB0byB1bnJlZ2lzdGVyIHRoZSBkZWJ1ZyBob29rcy4KKwkgKi8KKwlpZiAoc3lzX29wZW5fdGVzdCkgeworCQlyZXBlYXRfdGVzdCA9IHN5c19vcGVuX3Rlc3Q7CisJCXByaW50ayhLRVJOX0lORk8gImtnZGJ0czpSVU4gc3lzX29wZW4gZm9yICVpIGJyZWFrcG9pbnRzXG4iLAorCQkJcmVwZWF0X3Rlc3QpOworCQlrdGhyZWFkX3J1bihrZ2RidHNfdW5yZWdfdGhyZWFkLCAwLCAia2dkYnRzX3VucmVnIik7CisJCXJ1bl9zeXNfb3Blbl90ZXN0KCk7CisJCXJldHVybjsKKwl9CisJLyogU2h1dGRvd24gYW5kIHVucmVnaXN0ZXIgKi8KKwlrZ2RiX3VucmVnaXN0ZXJfaW9fbW9kdWxlKCZrZ2RidHNfaW9fb3BzKTsKKwljb25maWd1cmVkID0gMDsKK30KKworc3RhdGljIGludCBrZ2RidHNfb3B0aW9uX3NldHVwKGNoYXIgKm9wdCkKK3sKKwlpZiAoc3RybGVuKG9wdCkgPiBNQVhfQ09ORklHX0xFTikgeworCQlwcmludGsoS0VSTl9FUlIgImtnZGJ0czogY29uZmlnIHN0cmluZyB0b28gbG9uZ1xuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwlzdHJjcHkoY29uZmlnLCBvcHQpOworCisJdmVyYm9zZSA9IDA7CisJaWYgKHN0cnN0cihjb25maWcsICJWMSIpKQorCQl2ZXJib3NlID0gMTsKKwlpZiAoc3Ryc3RyKGNvbmZpZywgIlYyIikpCisJCXZlcmJvc2UgPSAyOworCisJcmV0dXJuIDA7Cit9CisKK19fc2V0dXAoImtnZGJ0cz0iLCBrZ2RidHNfb3B0aW9uX3NldHVwKTsKKworc3RhdGljIGludCBjb25maWd1cmVfa2dkYnRzKHZvaWQpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXN0cmxlbihjb25maWcpIHx8IGlzc3BhY2UoY29uZmlnWzBdKSkKKwkJZ290byBub2NvbmZpZzsKKwllcnIgPSBrZ2RidHNfb3B0aW9uX3NldHVwKGNvbmZpZyk7CisJaWYgKGVycikKKwkJZ290byBub2NvbmZpZzsKKworCWZpbmFsX2FjayA9IDA7CisJcnVuX3BsYW50X2FuZF9kZXRhY2hfdGVzdCgxKTsKKworCWVyciA9IGtnZGJfcmVnaXN0ZXJfaW9fbW9kdWxlKCZrZ2RidHNfaW9fb3BzKTsKKwlpZiAoZXJyKSB7CisJCWNvbmZpZ3VyZWQgPSAwOworCQlyZXR1cm4gZXJyOworCX0KKwljb25maWd1cmVkID0gMTsKKwlrZ2RidHNfcnVuX3Rlc3RzKCk7CisKKwlyZXR1cm4gZXJyOworCitub2NvbmZpZzoKKwljb25maWdbMF0gPSAwOworCWNvbmZpZ3VyZWQgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9rZ2RidHModm9pZCkKK3sKKwkvKiBBbHJlYWR5IGNvbmZpZ3VyZWQ/ICovCisJaWYgKGNvbmZpZ3VyZWQgPT0gMSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY29uZmlndXJlX2tnZGJ0cygpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2tnZGJ0cyh2b2lkKQoreworCWlmIChjb25maWd1cmVkID09IDEpCisJCWtnZGJfdW5yZWdpc3Rlcl9pb19tb2R1bGUoJmtnZGJ0c19pb19vcHMpOworfQorCitzdGF0aWMgaW50IGtnZGJ0c19nZXRfY2hhcih2b2lkKQoreworCWludCB2YWwgPSAwOworCisJaWYgKHRzLnJ1bl90ZXN0KQorCQl2YWwgPSB0cy5ydW5fdGVzdCgxLCAwKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGtnZGJ0c19wdXRfY2hhcih1OCBjaHIpCit7CisJaWYgKHRzLnJ1bl90ZXN0KQorCQl0cy5ydW5fdGVzdCgwLCBjaHIpOworfQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9rZ2RidHNfdmFyKGNvbnN0IGNoYXIgKmttZXNzYWdlLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKGttZXNzYWdlKTsKKworCWlmIChsZW4gPj0gTUFYX0NPTkZJR19MRU4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJrZ2RidHM6IGNvbmZpZyBzdHJpbmcgdG9vIGxvbmdcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwkvKiBPbmx5IGNvcHkgaW4gdGhlIHN0cmluZyBpZiB0aGUgaW5pdCBmdW5jdGlvbiBoYXMgbm90IHJ1biB5ZXQgKi8KKwlpZiAoY29uZmlndXJlZCA8IDApIHsKKwkJc3RyY3B5KGNvbmZpZywga21lc3NhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoa2dkYl9jb25uZWN0ZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJICAgICAgICJrZ2RidHM6IENhbm5vdCByZWNvbmZpZ3VyZSB3aGlsZSBLR0RCIGlzIGNvbm5lY3RlZC5cbiIpOworCisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3RyY3B5KGNvbmZpZywga21lc3NhZ2UpOworCS8qIENob3Agb3V0IFxuIGNoYXIgYXMgYSByZXN1bHQgb2YgZWNobyAqLworCWlmIChjb25maWdbbGVuIC0gMV0gPT0gJ1xuJykKKwkJY29uZmlnW2xlbiAtIDFdID0gJ1wwJzsKKworCWlmIChjb25maWd1cmVkID09IDEpCisJCWNsZWFudXBfa2dkYnRzKCk7CisKKwkvKiBHbyBhbmQgY29uZmlndXJlIHdpdGggdGhlIG5ldyBwYXJhbXMuICovCisJcmV0dXJuIGNvbmZpZ3VyZV9rZ2RidHMoKTsKK30KKworc3RhdGljIHZvaWQga2dkYnRzX3ByZV9leHBfaGFuZGxlcih2b2lkKQoreworCS8qIEluY3JlbWVudCB0aGUgbW9kdWxlIGNvdW50IHdoZW4gdGhlIGRlYnVnZ2VyIGlzIGFjdGl2ZSAqLworCWlmICgha2dkYl9jb25uZWN0ZWQpCisJCXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHZvaWQga2dkYnRzX3Bvc3RfZXhwX2hhbmRsZXIodm9pZCkKK3sKKwkvKiBkZWNyZW1lbnQgdGhlIG1vZHVsZSBjb3VudCB3aGVuIHRoZSBkZWJ1Z2dlciBkZXRhY2hlcyAqLworCWlmICgha2dkYl9jb25uZWN0ZWQpCisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IGtnZGJfaW8ga2dkYnRzX2lvX29wcyA9IHsKKwkubmFtZQkJCT0gImtnZGJ0cyIsCisJLnJlYWRfY2hhcgkJPSBrZ2RidHNfZ2V0X2NoYXIsCisJLndyaXRlX2NoYXIJCT0ga2dkYnRzX3B1dF9jaGFyLAorCS5wcmVfZXhjZXB0aW9uCQk9IGtnZGJ0c19wcmVfZXhwX2hhbmRsZXIsCisJLnBvc3RfZXhjZXB0aW9uCQk9IGtnZGJ0c19wb3N0X2V4cF9oYW5kbGVyLAorfTsKKworbW9kdWxlX2luaXQoaW5pdF9rZ2RidHMpOworbW9kdWxlX2V4aXQoY2xlYW51cF9rZ2RidHMpOworbW9kdWxlX3BhcmFtX2NhbGwoa2dkYnRzLCBwYXJhbV9zZXRfa2dkYnRzX3ZhciwgcGFyYW1fZ2V0X3N0cmluZywgJmtwcywgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGtnZGJ0cywgIjxBfFYxfFYyPltGI3xTI11bTiNdIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIktHREIgVGVzdCBTdWl0ZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9sa2R0bS5jIGIvZHJpdmVycy9taXNjL2xrZHRtLmMKaW5kZXggYzg4NDczMC4uMWJmZTVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2xrZHRtLmMKKysrIGIvZHJpdmVycy9taXNjL2xrZHRtLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogewogCWludCBpOwogCi0JaWYgKGNwb2ludF9uYW1lID09IElOVkFMSUQgfHwgY3BvaW50X3R5cGUgPT0gTk9ORSB8fAorCWlmIChjcG9pbnRfbmFtZSA9PSBOVUxMIHx8IGNwb2ludF90eXBlID09IE5VTEwgfHwKIAkJCQkJY3BvaW50X2NvdW50IDwgMSB8fCByZWN1cl9jb3VudCA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jCmluZGV4IDg5OWUzZjcuLjAyZmYzZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlpZiAoZXZlbnQgPiBBUlJBWV9TSVpFKHNvbnlfbGFwdG9wX2lucHV0X2luZGV4KSkgeworCQlpZiAoZXZlbnQgPj0gQVJSQVlfU0laRShzb255X2xhcHRvcF9pbnB1dF9pbmRleCkpIHsKIAkJCWRwcmludGsoInNvbnlfbGFwdG9wX3JlcG9ydF9pbnB1dF9ldmVudCwgZXZlbnQgbm90IGtub3duOiAlZFxuIiwgZXZlbnQpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5jCmluZGV4IGUyYzdlZGQuLjZjYjc4MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy90aGlua3BhZF9hY3BpLmMKKysrIGIvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuYwpAQCAtMjIxLDYgKzIyMSw3IEBACiAJdTMyIGhvdGtleToxOwogCXUzMiBob3RrZXlfbWFzazoxOwogCXUzMiBob3RrZXlfd2xzdzoxOworCXUzMiBob3RrZXlfdGFibGV0OjE7CiAJdTMyIGxpZ2h0OjE7CiAJdTMyIGxpZ2h0X3N0YXR1czoxOwogCXUzMiBicmlnaHRfMTZsZXZlbHM6MTsKQEAgLTMwMSw2ICszMDIsMTMgQEAKIAkgICAiSEtFWSIsCQkvKiBhbGwgb3RoZXJzICovCiAJICAgKTsJCQkvKiA1NzAgKi8KIAorVFBBQ1BJX0hBTkRMRSh2aWQsIHJvb3QsICJcXF9TQi5QQ0kuQUdQLlZHQSIsCS8qIDU3MCAqLworCSAgICJcXF9TQi5QQ0kwLkFHUDAuVklEMCIsCS8qIDYwMGUveCwgNzcweCAqLworCSAgICJcXF9TQi5QQ0kwLlZJRDAiLAkvKiA3NzBlICovCisJICAgIlxcX1NCLlBDSTAuVklEIiwJLyogQTIxZSwgRzR4LCBSNTBlLCBYMzAsIFg0MCAqLworCSAgICJcXF9TQi5QQ0kwLkFHUC5WSUQiLAkvKiBhbGwgb3RoZXJzICovCisJICAgKTsJCQkJLyogUjMwLCBSMzEgKi8KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQUNQSSBoZWxwZXJzCkBAIC0xMDUzLDYgKzEwNjEsOSBAQAogI2RlZmluZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAogI2VuZGlmIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCiAKKy8qIEhLRVkuTUhLRygpIHJldHVybiBiaXRzICovCisjZGVmaW5lIFRQX0hPVEtFWV9UQUJMRVRfTUFTSyAoMSA8PCAzKQorCiBzdGF0aWMgaW50IGhvdGtleV9nZXRfd2xzdyhpbnQgKnN0YXR1cykKIHsKIAlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsIHN0YXR1cywgIldMU1ciLCAiZCIpKQpAQCAtMTA2MCw2ICsxMDcxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaG90a2V5X2dldF90YWJsZXRfbW9kZShpbnQgKnN0YXR1cykKK3sKKwlpbnQgczsKKworCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJnMsICJNSEtHIiwgImQiKSkKKwkJcmV0dXJuIC1FSU87CisKKwkqc3RhdHVzID0gKChzICYgVFBfSE9US0VZX1RBQkxFVF9NQVNLKSAhPSAwKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIENhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZAogICovCkBAIC0xMTU0LDE1ICsxMTc2LDMxIEBACiB7CiAJaW50IHdsc3c7CiAKLQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7Ci0KIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5X3dsc3cgJiYgIWhvdGtleV9nZXRfd2xzdygmd2xzdykpIHsKKwkJbXV0ZXhfbG9jaygmdHBhY3BpX2lucHV0ZGV2X3NlbmRfbXV0ZXgpOworCiAJCWlucHV0X3JlcG9ydF9zd2l0Y2godHBhY3BpX2lucHV0ZGV2LAogCQkJCSAgICBTV19SQURJTywgISF3bHN3KTsKIAkJaW5wdXRfc3luYyh0cGFjcGlfaW5wdXRkZXYpOwotCX0KIAotCW11dGV4X3VubG9jaygmdHBhY3BpX2lucHV0ZGV2X3NlbmRfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRwYWNwaV9pbnB1dF9zZW5kX3RhYmxldHN3KHZvaWQpCit7CisJaW50IHN0YXRlOworCisJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV90YWJsZXQgJiYKKwkgICAgIWhvdGtleV9nZXRfdGFibGV0X21vZGUoJnN0YXRlKSkgeworCQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CisKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaCh0cGFjcGlfaW5wdXRkZXYsCisJCQkJICAgIFNXX1RBQkxFVF9NT0RFLCAhIXN0YXRlKTsKKwkJaW5wdXRfc3luYyh0cGFjcGlfaW5wdXRkZXYpOworCisJCW11dGV4X3VubG9jaygmdHBhY3BpX2lucHV0ZGV2X3NlbmRfbXV0ZXgpOworCX0KIH0KIAogc3RhdGljIHZvaWQgdHBhY3BpX2lucHV0X3NlbmRfa2V5KHVuc2lnbmVkIGludCBzY2FuY29kZSkKQEAgLTE0MTcsNiArMTQ1NSwxNCBAQAogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIH0KIAorI2Vsc2UgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KKworc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXBfc2FmZShpbnQgX191bnVzZWQpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTCAqLworCiBzdGF0aWMgaW50IGhvdGtleV9pbnB1dGRldl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlzd2l0Y2ggKHRwYWNwaV9saWZlY3ljbGUpIHsKQEAgLTE0NDQsNyArMTQ5MCw2IEBACiAJaWYgKHRwYWNwaV9saWZlY3ljbGUgPT0gVFBBQ1BJX0xJRkVfUlVOTklORykKIAkJaG90a2V5X3BvbGxfc2V0dXBfc2FmZSgwKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTCAqLwogCiAvKiBzeXNmcyBob3RrZXkgZW5hYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBzc2l6ZV90IGhvdGtleV9lbmFibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNjY2LDYgKzE3MTEsMjkgQEAKIAkJCSAgICAgImhvdGtleV9yYWRpb19zdyIpOwogfQogCisvKiBzeXNmcyBob3RrZXkgdGFibGV0IG1vZGUgKHBvbGxhYmxlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBzc2l6ZV90IGhvdGtleV90YWJsZXRfbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCWludCByZXMsIHM7CisJcmVzID0gaG90a2V5X2dldF90YWJsZXRfbW9kZSgmcyk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgISFzKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2hvdGtleV90YWJsZXRfbW9kZSA9CisJX19BVFRSKGhvdGtleV90YWJsZXRfbW9kZSwgU19JUlVHTywgaG90a2V5X3RhYmxldF9tb2RlX3Nob3csIE5VTEwpOworCitzdGF0aWMgdm9pZCBob3RrZXlfdGFibGV0X21vZGVfbm90aWZ5X2NoYW5nZSh2b2lkKQoreworCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfdGFibGV0KQorCQlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKKwkJCSAgICAgImhvdGtleV90YWJsZXRfbW9kZSIpOworfQorCiAvKiBzeXNmcyBob3RrZXkgcmVwb3J0X21vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBzc2l6ZV90IGhvdGtleV9yZXBvcnRfbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMTg3OCw3ICsxOTQ2LDcgQEAKIAkJc3RyX3N1cHBvcnRlZCh0cF9mZWF0dXJlcy5ob3RrZXkpKTsKIAogCWlmICh0cF9mZWF0dXJlcy5ob3RrZXkpIHsKLQkJaG90a2V5X2Rldl9hdHRyaWJ1dGVzID0gY3JlYXRlX2F0dHJfc2V0KDEyLCBOVUxMKTsKKwkJaG90a2V5X2Rldl9hdHRyaWJ1dGVzID0gY3JlYXRlX2F0dHJfc2V0KDEzLCBOVUxMKTsKIAkJaWYgKCFob3RrZXlfZGV2X2F0dHJpYnV0ZXMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJcmVzID0gYWRkX21hbnlfdG9fYXR0cl9zZXQoaG90a2V5X2Rldl9hdHRyaWJ1dGVzLApAQCAtMTk1Nyw2ICsyMDI1LDE4IEBACiAJCQkJCSZkZXZfYXR0cl9ob3RrZXlfcmFkaW9fc3cuYXR0cik7CiAJCX0KIAorCQkvKiBGb3IgWDQxdCwgWDYwdCwgWDYxdCBUYWJsZXRzLi4uICovCisJCWlmICghcmVzICYmIGFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZzdGF0dXMsICJNSEtHIiwgInFkIikpIHsKKwkJCXRwX2ZlYXR1cmVzLmhvdGtleV90YWJsZXQgPSAxOworCQkJcHJpbnRrKFRQQUNQSV9JTkZPCisJCQkJInBvc3NpYmxlIHRhYmxldCBtb2RlIHN3aXRjaCBmb3VuZDsgIgorCQkJCSJUaGlua1BhZCBpbiAlcyBtb2RlXG4iLAorCQkJCShzdGF0dXMgJiBUUF9IT1RLRVlfVEFCTEVUX01BU0spPworCQkJCQkidGFibGV0IiA6ICJsYXB0b3AiKTsKKwkJCXJlcyA9IGFkZF90b19hdHRyX3NldChob3RrZXlfZGV2X2F0dHJpYnV0ZXMsCisJCQkJCSZkZXZfYXR0cl9ob3RrZXlfdGFibGV0X21vZGUuYXR0cik7CisJCX0KKwogCQlpZiAoIXJlcykKIAkJCXJlcyA9IHJlZ2lzdGVyX2F0dHJfc2V0X3dpdGhfc3lzZnMoCiAJCQkJCWhvdGtleV9kZXZfYXR0cmlidXRlcywKQEAgLTIwMDYsNiArMjA4NiwxMCBAQAogCQkJc2V0X2JpdChFVl9TVywgdHBhY3BpX2lucHV0ZGV2LT5ldmJpdCk7CiAJCQlzZXRfYml0KFNXX1JBRElPLCB0cGFjcGlfaW5wdXRkZXYtPnN3Yml0KTsKIAkJfQorCQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X3RhYmxldCkgeworCQkJc2V0X2JpdChFVl9TVywgdHBhY3BpX2lucHV0ZGV2LT5ldmJpdCk7CisJCQlzZXRfYml0KFNXX1RBQkxFVF9NT0RFLCB0cGFjcGlfaW5wdXRkZXYtPnN3Yml0KTsKKwkJfQogCiAJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULAogCQkJCSJlbmFibGluZyBob3Qga2V5IGhhbmRsaW5nXG4iKTsKQEAgLTIwMjMsMTIgKzIxMDcsMTIgQEAKIAkJCQkoaG90a2V5X3JlcG9ydF9tb2RlIDwgMikgPwogCQkJCQkiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKIAotI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCiAJCXRwYWNwaV9pbnB1dGRldi0+b3BlbiA9ICZob3RrZXlfaW5wdXRkZXZfb3BlbjsKIAkJdHBhY3BpX2lucHV0ZGV2LT5jbG9zZSA9ICZob3RrZXlfaW5wdXRkZXZfY2xvc2U7CiAKIAkJaG90a2V5X3BvbGxfc2V0dXBfc2FmZSgxKTsKLSNlbmRpZgorCQl0cGFjcGlfaW5wdXRfc2VuZF9yYWRpb3N3KCk7CisJCXRwYWNwaV9pbnB1dF9zZW5kX3RhYmxldHN3KCk7CiAJfQogCiAJcmV0dXJuICh0cF9mZWF0dXJlcy5ob3RrZXkpPyAwIDogMTsKQEAgLTIxNTYsMTEgKzIyNDAsMTUgQEAKIAkJCS8qIDB4NTAwMC0weDVGRkY6IGh1bWFuIGludGVyZmFjZSBoZWxwZXJzICovCiAJCQlzd2l0Y2ggKGhrZXkpIHsKIAkJCWNhc2UgMHg1MDEwOiAvKiBMZW5vdm8gbmV3IEJJT1M6IGJyaWdodG5lc3MgY2hhbmdlZCAqLwotCQkJY2FzZSAweDUwMDk6IC8qIFg2MXQ6IHN3aXZlbCB1cCAodGFibGV0IG1vZGUpICovCi0JCQljYXNlIDB4NTAwYTogLyogWDYxdDogc3dpdmVsIGRvd24gKG5vcm1hbCBtb2RlKSAqLwogCQkJY2FzZSAweDUwMGI6IC8qIFg2MXQ6IHRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBiYXkgKi8KIAkJCWNhc2UgMHg1MDBjOiAvKiBYNjF0OiB0YWJsZXQgcGVuIHJlbW92ZWQgZnJvbSBiYXkgKi8KIAkJCQlicmVhazsKKwkJCWNhc2UgMHg1MDA5OiAvKiBYNDF0LVg2MXQ6IHN3aXZlbCB1cCAodGFibGV0IG1vZGUpICovCisJCQljYXNlIDB4NTAwYTogLyogWDQxdC1YNjF0OiBzd2l2ZWwgZG93biAobm9ybWFsIG1vZGUpICovCisJCQkJdHBhY3BpX2lucHV0X3NlbmRfdGFibGV0c3coKTsKKwkJCQlob3RrZXlfdGFibGV0X21vZGVfbm90aWZ5X2NoYW5nZSgpOworCQkJCXNlbmRfYWNwaV9ldiA9IDA7CisJCQkJYnJlYWs7CiAJCQljYXNlIDB4NTAwMToKIAkJCWNhc2UgMHg1MDAyOgogCQkJCS8qIExJRCBzd2l0Y2ggZXZlbnRzLiAgRG8gbm90IHByb3BhZ2F0ZSAqLwpAQCAtMjIxOSwxMSArMjMwNywxMCBAQAogCQkgICAgICAgImZyb20gZmlybXdhcmVcbiIpOwogCXRwYWNwaV9pbnB1dF9zZW5kX3JhZGlvc3coKTsKIAlob3RrZXlfcmFkaW9fc3dfbm90aWZ5X2NoYW5nZSgpOworCWhvdGtleV90YWJsZXRfbW9kZV9ub3RpZnlfY2hhbmdlKCk7CiAJaG90a2V5X3dha2V1cF9yZWFzb25fbm90aWZ5X2NoYW5nZSgpOwogCWhvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlX25vdGlmeV9jaGFuZ2UoKTsKLSNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAogCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoMCk7Ci0jZW5kaWYKIH0KIAogLyogcHJvY2ZzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNjc2LDYgKzI3NjMsOCBAQAogICogVmlkZW8gc3ViZHJpdmVyCiAgKi8KIAorI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX1ZJREVPCisKIGVudW0gdmlkZW9fYWNjZXNzX21vZGUgewogCVRQQUNQSV9WSURFT19OT05FID0gMCwKIAlUUEFDUElfVklERU9fNTcwLAkvKiA1NzAgKi8KQEAgLTI3MDMsMTMgKzI3OTIsNiBAQAogc3RhdGljIGludCB2aWRlb19hdXRvc3dfZ2V0KHZvaWQpOwogc3RhdGljIGludCB2aWRlb19hdXRvc3dfc2V0KGludCBlbmFibGUpOwogCi1UUEFDUElfSEFORExFKHZpZCwgcm9vdCwgIlxcX1NCLlBDSS5BR1AuVkdBIiwJLyogNTcwICovCi0JICAgIlxcX1NCLlBDSTAuQUdQMC5WSUQwIiwJLyogNjAwZS94LCA3NzB4ICovCi0JICAgIlxcX1NCLlBDSTAuVklEMCIsCS8qIDc3MGUgKi8KLQkgICAiXFxfU0IuUENJMC5WSUQiLAkvKiBBMjFlLCBHNHgsIFI1MGUsIFgzMCwgWDQwICovCi0JICAgIlxcX1NCLlBDSTAuQUdQLlZJRCIsCS8qIGFsbCBvdGhlcnMgKi8KLQkgICApOwkJCQkvKiBSMzAsIFIzMSAqLwotCiBUUEFDUElfSEFORExFKHZpZDIsIHJvb3QsICJcXF9TQi5QQ0kwLkFHUEIuVklEIik7CS8qIEc0MSAqLwogCiBzdGF0aWMgaW50IF9faW5pdCB2aWRlb19pbml0KHN0cnVjdCBpYm1faW5pdF9zdHJ1Y3QgKmlpYm0pCkBAIC0zMDE5LDYgKzMxMDEsOCBAQAogCS5leGl0ID0gdmlkZW9fZXhpdCwKIH07CiAKKyNlbmRpZiAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9WSURFTyAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTGlnaHQgKHRoaW5rbGlnaHQpIHN1YmRyaXZlcgogICovCkBAIC01ODAzLDEwICs1ODg3LDEyIEBACiAJCS5pbml0ID0gd2FuX2luaXQsCiAJCS5kYXRhID0gJndhbl9kcml2ZXJfZGF0YSwKIAl9LAorI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX1ZJREVPCiAJewogCQkuaW5pdCA9IHZpZGVvX2luaXQsCiAJCS5kYXRhID0gJnZpZGVvX2RyaXZlcl9kYXRhLAogCX0sCisjZW5kaWYKIAl7CiAJCS5pbml0ID0gbGlnaHRfaW5pdCwKIAkJLmRhdGEgPSAmbGlnaHRfZHJpdmVyX2RhdGEsCkBAIC01OTE4LDcgKzYwMDQsNyBAQAogCiAjZGVmaW5lIFRQQUNQSV9QQVJBTShmZWF0dXJlKSBcCiAJbW9kdWxlX3BhcmFtX2NhbGwoZmVhdHVyZSwgc2V0X2libV9wYXJhbSwgTlVMTCwgTlVMTCwgMCk7IFwKLQlNT0RVTEVfUEFSTV9ERVNDKGZlYXR1cmUsICJTaW11bGF0ZXMgdGhpbmtwYWQtYWNpIHByb2NmcyBjb21tYW5kICIgXAorCU1PRFVMRV9QQVJNX0RFU0MoZmVhdHVyZSwgIlNpbXVsYXRlcyB0aGlua3BhZC1hY3BpIHByb2NmcyBjb21tYW5kICIgXAogCQkJICJhdCBtb2R1bGUgbG9hZCwgc2VlIGRvY3VtZW50YXRpb24iKQogCiBUUEFDUElfUEFSQU0oaG90a2V5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aWZtXzd4eDEuYyBiL2RyaXZlcnMvbWlzYy90aWZtXzd4eDEuYwppbmRleCA2M2EwODliLi42NzUwM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGlmbV83eHgxLmMKKysrIGIvZHJpdmVycy9taXNjL3RpZm1fN3h4MS5jCkBAIC0zNjgsNiArMzY4LDggQEAKIAkJZ290byBlcnJfb3V0X2lycTsKIAogCXdyaXRlbChUSUZNX0lSUV9FTkFCTEUgfCBUSUZNX0lSUV9TT0NLTUFTSygoMSA8PCBmbS0+bnVtX3NvY2tldHMpIC0gMSksCisJICAgICAgIGZtLT5hZGRyICsgRk1fQ0xFQVJfSU5URVJSVVBUX0VOQUJMRSk7CisJd3JpdGVsKFRJRk1fSVJRX0VOQUJMRSB8IFRJRk1fSVJRX1NPQ0tNQVNLKCgxIDw8IGZtLT5udW1fc29ja2V0cykgLSAxKSwKIAkgICAgICAgZm0tPmFkZHIgKyBGTV9TRVRfSU5URVJSVVBUX0VOQUJMRSk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9jb3JlL01ha2VmaWxlCmluZGV4IDQ5ODU4MDcuLjE5YTFhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvY29yZS9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKIGVuZGlmCiAKIG9iai0kKENPTkZJR19NTUMpCQkrPSBtbWNfY29yZS5vCi1tbWNfY29yZS15CQkJOj0gY29yZS5vIHN5c2ZzLm8gYnVzLm8gaG9zdC5vIFwKK21tY19jb3JlLXkJCQk6PSBjb3JlLm8gYnVzLm8gaG9zdC5vIFwKIAkJCQkgICBtbWMubyBtbWNfb3BzLm8gc2QubyBzZF9vcHMubyBcCiAJCQkJICAgc2Rpby5vIHNkaW9fb3BzLm8gc2Rpb19idXMubyBcCiAJCQkJICAgc2Rpb19jaXMubyBzZGlvX2lvLm8gc2Rpb19pcnEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKaW5kZXggYjBjMjJjYS4uZmQ5NWIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9idXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCi0jaW5jbHVkZSAic3lzZnMuaCIKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAic2Rpb19jaXMuaCIKICNpbmNsdWRlICJidXMuaCIKQEAgLTQzLDcgKzQyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG1tY19kZXZfYXR0cnNbXSA9IHsKLQlNTUNfQVRUUl9STyh0eXBlKSwKKwlfX0FUVFIodHlwZSwgU19JUlVHTywgbW1jX3R5cGVfc2hvdywgTlVMTCksCiAJX19BVFRSX05VTEwsCiB9OwogCkBAIC0xODksNyArMTg4LDcgQEAKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIG5ldyBNTUMgY2FyZCBzdHJ1Y3R1cmUuCiAgKi8KLXN0cnVjdCBtbWNfY2FyZCAqbW1jX2FsbG9jX2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0KQorc3RydWN0IG1tY19jYXJkICptbWNfYWxsb2NfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZpY2VfdHlwZSAqdHlwZSkKIHsKIAlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQ7CiAKQEAgLTIwNCw2ICsyMDMsNyBAQAogCWNhcmQtPmRldi5wYXJlbnQgPSBtbWNfY2xhc3NkZXYoaG9zdCk7CiAJY2FyZC0+ZGV2LmJ1cyA9ICZtbWNfYnVzX3R5cGU7CiAJY2FyZC0+ZGV2LnJlbGVhc2UgPSBtbWNfcmVsZWFzZV9jYXJkOworCWNhcmQtPmRldi50eXBlID0gdHlwZTsKIAogCXJldHVybiBjYXJkOwogfQpAQCAtMjQ4LDI0ICsyNDgsMTAgQEAKIAkJCXR5cGUsIGNhcmQtPnJjYSk7CiAJfQogCi0JY2FyZC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDE7Ci0KIAlyZXQgPSBkZXZpY2VfYWRkKCZjYXJkLT5kZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoY2FyZC0+aG9zdC0+YnVzX29wcy0+c3lzZnNfYWRkKSB7Ci0JCXJldCA9IGNhcmQtPmhvc3QtPmJ1c19vcHMtPnN5c2ZzX2FkZChjYXJkLT5ob3N0LCBjYXJkKTsKLQkJaWYgKHJldCkgewotCQkJZGV2aWNlX2RlbCgmY2FyZC0+ZGV2KTsKLQkJCXJldHVybiByZXQ7Ci0JCSB9Ci0JfQotCi0JY2FyZC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7Ci0KLQlrb2JqZWN0X3VldmVudCgmY2FyZC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKLQogCW1tY19jYXJkX3NldF9wcmVzZW50KGNhcmQpOwogCiAJcmV0dXJuIDA7CkBAIC0yODUsOSArMjcxLDYgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYXJkICUwNHggcmVtb3ZlZFxuIiwKIAkJCQltbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIGNhcmQtPnJjYSk7CiAJCX0KLQotCQlpZiAoY2FyZC0+aG9zdC0+YnVzX29wcy0+c3lzZnNfcmVtb3ZlKQotCQkJY2FyZC0+aG9zdC0+YnVzX29wcy0+c3lzZnNfcmVtb3ZlKGNhcmQtPmhvc3QsIGNhcmQpOwogCQlkZXZpY2VfZGVsKCZjYXJkLT5kZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9idXMuaCBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmgKaW5kZXggNGYzNTQzMS4uMTgxNzg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9idXMuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5oCkBAIC0xMSw3ICsxMSwxNiBAQAogI2lmbmRlZiBfTU1DX0NPUkVfQlVTX0gKICNkZWZpbmUgX01NQ19DT1JFX0JVU19ICiAKLXN0cnVjdCBtbWNfY2FyZCAqbW1jX2FsbG9jX2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKKyNkZWZpbmUgTU1DX0RFVl9BVFRSKG5hbWUsIGZtdCwgYXJncy4uLikJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IG1tY18jI25hbWUjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQkJXAorCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtbWNfY2FyZCwgZGV2KTsJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm10LCBhcmdzKTsJCQkJCQlcCit9CQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBtbWNfIyNuYW1lIyNfc2hvdywgTlVMTCkKKworc3RydWN0IG1tY19jYXJkICptbWNfYWxsb2NfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsCisJc3RydWN0IGRldmljZV90eXBlICp0eXBlKTsKIGludCBtbWNfYWRkX2NhcmQoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIHZvaWQgbW1jX3JlbW92ZV9jYXJkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggYjk2NjY3NC4uMDFjZWQ0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTM1LDEwICszNSw2IEBACiAjaW5jbHVkZSAic2Rfb3BzLmgiCiAjaW5jbHVkZSAic2Rpb19vcHMuaCIKIAotZXh0ZXJuIGludCBtbWNfYXR0YWNoX21tYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpOwotZXh0ZXJuIGludCBtbWNfYXR0YWNoX3NkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jcik7Ci1leHRlcm4gaW50IG1tY19hdHRhY2hfc2RpbyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpOwotCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKIAogLyoKQEAgLTUxNiw3ICs1MTIsNyBAQAogLyoKICAqIENsZWFudXAgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGJ1cyBvcGVyYXRvciBpcyBkcm9wcGVkLgogICovCi12b2lkIF9fbW1jX3JlbGVhc2VfYnVzKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyB2b2lkIF9fbW1jX3JlbGVhc2VfYnVzKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKIAlCVUdfT04oIWhvc3QpOwogCUJVR19PTihob3N0LT5idXNfcmVmcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCmluZGV4IDM5ZGFmMmYuLmNkYjMzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5oCkBAIC0xOCw4ICsxOCw2IEBACiBzdHJ1Y3QgbW1jX2J1c19vcHMgewogCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCBtbWNfaG9zdCAqKTsKIAl2b2lkICgqZGV0ZWN0KShzdHJ1Y3QgbW1jX2hvc3QgKik7Ci0JaW50ICgqc3lzZnNfYWRkKShzdHJ1Y3QgbW1jX2hvc3QgKiwgc3RydWN0IG1tY19jYXJkICpjYXJkKTsKLQl2b2lkICgqc3lzZnNfcmVtb3ZlKShzdHJ1Y3QgbW1jX2hvc3QgKiwgc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIAl2b2lkICgqc3VzcGVuZCkoc3RydWN0IG1tY19ob3N0ICopOwogCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBtbWNfaG9zdCAqKTsKIH07CkBAIC00OCw2ICs0NiwxMCBAQAogdm9pZCBtbWNfc3RhcnRfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogdm9pZCBtbWNfc3RvcF9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiAKK2ludCBtbWNfYXR0YWNoX21tYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IpOworaW50IG1tY19hdHRhY2hfc2Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyKTsKK2ludCBtbWNfYXR0YWNoX3NkaW8oc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyKTsKKwogZXh0ZXJuIGludCB1c2Vfc3BpX2NyYzsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCmluZGV4IGM2NWQyMDMuLjFkNzk1YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCkBAIC0yLDcgKzIsNyBAQAogICogIGxpbnV4L2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBSdXNzZWxsIEtpbmcsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IFBpZXJyZSBPc3NtYW4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBQaWVycmUgT3NzbWFuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC01NywxMiArNTcsMjUgQEAKICAqLwogc3RydWN0IG1tY19ob3N0ICptbWNfYWxsb2NfaG9zdChpbnQgZXh0cmEsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlpbnQgZXJyOwogCXN0cnVjdCBtbWNfaG9zdCAqaG9zdDsKIAorCWlmICghaWRyX3ByZV9nZXQoJm1tY19ob3N0X2lkciwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiBOVUxMOworCiAJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNfaG9zdCkgKyBleHRyYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFob3N0KQogCQlyZXR1cm4gTlVMTDsKIAorCXNwaW5fbG9jaygmbW1jX2hvc3RfbG9jayk7CisJZXJyID0gaWRyX2dldF9uZXcoJm1tY19ob3N0X2lkciwgaG9zdCwgJmhvc3QtPmluZGV4KTsKKwlzcGluX3VubG9jaygmbW1jX2hvc3RfbG9jayk7CisJaWYgKGVycikKKwkJZ290byBmcmVlOworCisJc25wcmludGYoaG9zdC0+Y2xhc3NfZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsCisJCSAibW1jJWQiLCBob3N0LT5pbmRleCk7CisKIAlob3N0LT5wYXJlbnQgPSBkZXY7CiAJaG9zdC0+Y2xhc3NfZGV2LnBhcmVudCA9IGRldjsKIAlob3N0LT5jbGFzc19kZXYuY2xhc3MgPSAmbW1jX2hvc3RfY2xhc3M7CkBAIC04NSw2ICs5OCwxMCBAQAogCWhvc3QtPm1heF9ibGtfY291bnQgPSBQQUdFX0NBQ0hFX1NJWkUgLyA1MTI7CiAKIAlyZXR1cm4gaG9zdDsKKworZnJlZToKKwlrZnJlZShob3N0KTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogRVhQT1JUX1NZTUJPTChtbWNfYWxsb2NfaG9zdCk7CkBAIC0xMDQsMTggKzEyMSw2IEBACiAJV0FSTl9PTigoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfU0RJT19JUlEpICYmCiAJCSFob3N0LT5vcHMtPmVuYWJsZV9zZGlvX2lycSk7CiAKLQlpZiAoIWlkcl9wcmVfZ2V0KCZtbWNfaG9zdF9pZHIsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaW5fbG9jaygmbW1jX2hvc3RfbG9jayk7Ci0JZXJyID0gaWRyX2dldF9uZXcoJm1tY19ob3N0X2lkciwgaG9zdCwgJmhvc3QtPmluZGV4KTsKLQlzcGluX3VubG9jaygmbW1jX2hvc3RfbG9jayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXNucHJpbnRmKGhvc3QtPmNsYXNzX2Rldi5idXNfaWQsIEJVU19JRF9TSVpFLAotCQkgIm1tYyVkIiwgaG9zdC0+aW5kZXgpOwotCiAJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKGhvc3QtPmNsYXNzX2Rldi5idXNfaWQsICZob3N0LT5sZWQpOwogCiAJZXJyID0gZGV2aWNlX2FkZCgmaG9zdC0+Y2xhc3NfZGV2KTsKQEAgLTE0NCwxMCArMTQ5LDYgQEAKIAlkZXZpY2VfZGVsKCZob3N0LT5jbGFzc19kZXYpOwogCiAJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoaG9zdC0+bGVkKTsKLQotCXNwaW5fbG9jaygmbW1jX2hvc3RfbG9jayk7Ci0JaWRyX3JlbW92ZSgmbW1jX2hvc3RfaWRyLCBob3N0LT5pbmRleCk7Ci0Jc3Bpbl91bmxvY2soJm1tY19ob3N0X2xvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKG1tY19yZW1vdmVfaG9zdCk7CkBAIC0xNjAsNiArMTYxLDEwIEBACiAgKi8KIHZvaWQgbW1jX2ZyZWVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CisJc3Bpbl9sb2NrKCZtbWNfaG9zdF9sb2NrKTsKKwlpZHJfcmVtb3ZlKCZtbWNfaG9zdF9pZHIsIGhvc3QtPmluZGV4KTsKKwlzcGluX3VubG9jaygmbW1jX2hvc3RfbG9jayk7CisKIAlwdXRfZGV2aWNlKCZob3N0LT5jbGFzc19kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tYy5jIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwppbmRleCA2OGMwZTNiLi4zZGEyOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAic3lzZnMuaCIKICNpbmNsdWRlICJidXMuaCIKICNpbmNsdWRlICJtbWNfb3BzLmgiCiAKQEAgLTI0OCw2ICsyNDcsNDQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitNTUNfREVWX0FUVFIoY2lkLCAiJTA4eCUwOHglMDh4JTA4eFxuIiwgY2FyZC0+cmF3X2NpZFswXSwgY2FyZC0+cmF3X2NpZFsxXSwKKwljYXJkLT5yYXdfY2lkWzJdLCBjYXJkLT5yYXdfY2lkWzNdKTsKK01NQ19ERVZfQVRUUihjc2QsICIlMDh4JTA4eCUwOHglMDh4XG4iLCBjYXJkLT5yYXdfY3NkWzBdLCBjYXJkLT5yYXdfY3NkWzFdLAorCWNhcmQtPnJhd19jc2RbMl0sIGNhcmQtPnJhd19jc2RbM10pOworTU1DX0RFVl9BVFRSKGRhdGUsICIlMDJkLyUwNGRcbiIsIGNhcmQtPmNpZC5tb250aCwgY2FyZC0+Y2lkLnllYXIpOworTU1DX0RFVl9BVFRSKGZ3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmZ3cmV2KTsKK01NQ19ERVZfQVRUUihod3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5od3Jldik7CitNTUNfREVWX0FUVFIobWFuZmlkLCAiMHglMDZ4XG4iLCBjYXJkLT5jaWQubWFuZmlkKTsKK01NQ19ERVZfQVRUUihuYW1lLCAiJXNcbiIsIGNhcmQtPmNpZC5wcm9kX25hbWUpOworTU1DX0RFVl9BVFRSKG9lbWlkLCAiMHglMDR4XG4iLCBjYXJkLT5jaWQub2VtaWQpOworTU1DX0RFVl9BVFRSKHNlcmlhbCwgIjB4JTA4eFxuIiwgY2FyZC0+Y2lkLnNlcmlhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptbWNfc3RkX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NpZC5hdHRyLAorCSZkZXZfYXR0cl9jc2QuYXR0ciwKKwkmZGV2X2F0dHJfZGF0ZS5hdHRyLAorCSZkZXZfYXR0cl9md3Jldi5hdHRyLAorCSZkZXZfYXR0cl9od3Jldi5hdHRyLAorCSZkZXZfYXR0cl9tYW5maWQuYXR0ciwKKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAorCSZkZXZfYXR0cl9vZW1pZC5hdHRyLAorCSZkZXZfYXR0cl9zZXJpYWwuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbW1jX3N0ZF9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IG1tY19zdGRfYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbW1jX2F0dHJfZ3JvdXBzW10gPSB7CisJJm1tY19zdGRfYXR0cl9ncm91cCwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBtbWNfdHlwZSA9IHsKKwkuZ3JvdXBzID0gbW1jX2F0dHJfZ3JvdXBzLAorfTsKKwogLyoKICAqIEhhbmRsZSB0aGUgZGV0ZWN0aW9uIGFuZCBpbml0aWFsaXNhdGlvbiBvZiBhIGNhcmQuCiAgKgpAQCAtMzA4LDcgKzM0NSw3IEBACiAJCS8qCiAJCSAqIEFsbG9jYXRlIGNhcmQgc3RydWN0dXJlLgogCQkgKi8KLQkJY2FyZCA9IG1tY19hbGxvY19jYXJkKGhvc3QpOworCQljYXJkID0gbW1jX2FsbG9jX2NhcmQoaG9zdCwgJm1tY190eXBlKTsKIAkJaWYgKElTX0VSUihjYXJkKSkgewogCQkJZXJyID0gUFRSX0VSUihjYXJkKTsKIAkJCWdvdG8gZXJyOwpAQCAtNDU5LDUzICs0OTYsNiBAQAogCX0KIH0KIAotTU1DX0FUVFJfRk4oY2lkLCAiJTA4eCUwOHglMDh4JTA4eFxuIiwgY2FyZC0+cmF3X2NpZFswXSwgY2FyZC0+cmF3X2NpZFsxXSwKLQljYXJkLT5yYXdfY2lkWzJdLCBjYXJkLT5yYXdfY2lkWzNdKTsKLU1NQ19BVFRSX0ZOKGNzZCwgIiUwOHglMDh4JTA4eCUwOHhcbiIsIGNhcmQtPnJhd19jc2RbMF0sIGNhcmQtPnJhd19jc2RbMV0sCi0JY2FyZC0+cmF3X2NzZFsyXSwgY2FyZC0+cmF3X2NzZFszXSk7Ci1NTUNfQVRUUl9GTihkYXRlLCAiJTAyZC8lMDRkXG4iLCBjYXJkLT5jaWQubW9udGgsIGNhcmQtPmNpZC55ZWFyKTsKLU1NQ19BVFRSX0ZOKGZ3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmZ3cmV2KTsKLU1NQ19BVFRSX0ZOKGh3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmh3cmV2KTsKLU1NQ19BVFRSX0ZOKG1hbmZpZCwgIjB4JTA2eFxuIiwgY2FyZC0+Y2lkLm1hbmZpZCk7Ci1NTUNfQVRUUl9GTihuYW1lLCAiJXNcbiIsIGNhcmQtPmNpZC5wcm9kX25hbWUpOwotTU1DX0FUVFJfRk4ob2VtaWQsICIweCUwNHhcbiIsIGNhcmQtPmNpZC5vZW1pZCk7Ci1NTUNfQVRUUl9GTihzZXJpYWwsICIweCUwOHhcbiIsIGNhcmQtPmNpZC5zZXJpYWwpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbW1jX2Rldl9hdHRyc1tdID0gewotCU1NQ19BVFRSX1JPKGNpZCksCi0JTU1DX0FUVFJfUk8oY3NkKSwKLQlNTUNfQVRUUl9STyhkYXRlKSwKLQlNTUNfQVRUUl9STyhmd3JldiksCi0JTU1DX0FUVFJfUk8oaHdyZXYpLAotCU1NQ19BVFRSX1JPKG1hbmZpZCksCi0JTU1DX0FUVFJfUk8obmFtZSksCi0JTU1DX0FUVFJfUk8ob2VtaWQpLAotCU1NQ19BVFRSX1JPKHNlcmlhbCksCi0JX19BVFRSX05VTEwsCi19OwotCi0vKgotICogQWRkcyBzeXNmcyBlbnRyaWVzIGFzIHJlbGV2YW50LgotICovCi1zdGF0aWMgaW50IG1tY19zeXNmc19hZGQoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IG1tY19hZGRfYXR0cnMoY2FyZCwgbW1jX2Rldl9hdHRycyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlbW92ZXMgdGhlIHN5c2ZzIGVudHJpZXMgYWRkZWQgYnkgbW1jX3N5c2ZzX2FkZCgpLgotICovCi1zdGF0aWMgdm9pZCBtbWNfc3lzZnNfcmVtb3ZlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jYXJkICpjYXJkKQotewotCW1tY19yZW1vdmVfYXR0cnMoY2FyZCwgbW1jX2Rldl9hdHRycyk7Ci19Ci0KICNpZmRlZiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUKIAogLyoKQEAgLTU2MCw4ICs1NTAsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfb3BzID0gewogCS5yZW1vdmUgPSBtbWNfcmVtb3ZlLAogCS5kZXRlY3QgPSBtbWNfZGV0ZWN0LAotCS5zeXNmc19hZGQgPSBtbWNfc3lzZnNfYWRkLAotCS5zeXNmc19yZW1vdmUgPSBtbWNfc3lzZnNfcmVtb3ZlLAogCS5zdXNwZW5kID0gbW1jX3N1c3BlbmQsCiAJLnJlc3VtZSA9IG1tY19yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZC5jIGIvZHJpdmVycy9tbWMvY29yZS9zZC5jCmluZGV4IGQxYzFlMGY1Li43ZWYzYjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL3NkLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAic3lzZnMuaCIKICNpbmNsdWRlICJidXMuaCIKICNpbmNsdWRlICJtbWNfb3BzLmgiCiAjaW5jbHVkZSAic2Rfb3BzLmgiCkBAIC0yODMsNiArMjgyLDQ3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorTU1DX0RFVl9BVFRSKGNpZCwgIiUwOHglMDh4JTA4eCUwOHhcbiIsIGNhcmQtPnJhd19jaWRbMF0sIGNhcmQtPnJhd19jaWRbMV0sCisJY2FyZC0+cmF3X2NpZFsyXSwgY2FyZC0+cmF3X2NpZFszXSk7CitNTUNfREVWX0FUVFIoY3NkLCAiJTA4eCUwOHglMDh4JTA4eFxuIiwgY2FyZC0+cmF3X2NzZFswXSwgY2FyZC0+cmF3X2NzZFsxXSwKKwljYXJkLT5yYXdfY3NkWzJdLCBjYXJkLT5yYXdfY3NkWzNdKTsKK01NQ19ERVZfQVRUUihzY3IsICIlMDh4JTA4eFxuIiwgY2FyZC0+cmF3X3NjclswXSwgY2FyZC0+cmF3X3NjclsxXSk7CitNTUNfREVWX0FUVFIoZGF0ZSwgIiUwMmQvJTA0ZFxuIiwgY2FyZC0+Y2lkLm1vbnRoLCBjYXJkLT5jaWQueWVhcik7CitNTUNfREVWX0FUVFIoZndyZXYsICIweCV4XG4iLCBjYXJkLT5jaWQuZndyZXYpOworTU1DX0RFVl9BVFRSKGh3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmh3cmV2KTsKK01NQ19ERVZfQVRUUihtYW5maWQsICIweCUwNnhcbiIsIGNhcmQtPmNpZC5tYW5maWQpOworTU1DX0RFVl9BVFRSKG5hbWUsICIlc1xuIiwgY2FyZC0+Y2lkLnByb2RfbmFtZSk7CitNTUNfREVWX0FUVFIob2VtaWQsICIweCUwNHhcbiIsIGNhcmQtPmNpZC5vZW1pZCk7CitNTUNfREVWX0FUVFIoc2VyaWFsLCAiMHglMDh4XG4iLCBjYXJkLT5jaWQuc2VyaWFsKTsKKworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc2Rfc3RkX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NpZC5hdHRyLAorCSZkZXZfYXR0cl9jc2QuYXR0ciwKKwkmZGV2X2F0dHJfc2NyLmF0dHIsCisJJmRldl9hdHRyX2RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfZndyZXYuYXR0ciwKKwkmZGV2X2F0dHJfaHdyZXYuYXR0ciwKKwkmZGV2X2F0dHJfbWFuZmlkLmF0dHIsCisJJmRldl9hdHRyX25hbWUuYXR0ciwKKwkmZGV2X2F0dHJfb2VtaWQuYXR0ciwKKwkmZGV2X2F0dHJfc2VyaWFsLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNkX3N0ZF9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHNkX3N0ZF9hdHRycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpzZF9hdHRyX2dyb3Vwc1tdID0geworCSZzZF9zdGRfYXR0cl9ncm91cCwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBzZF90eXBlID0geworCS5ncm91cHMgPSBzZF9hdHRyX2dyb3VwcywKK307CisKIC8qCiAgKiBIYW5kbGUgdGhlIGRldGVjdGlvbiBhbmQgaW5pdGlhbGlzYXRpb24gb2YgYSBjYXJkLgogICoKQEAgLTM1Miw3ICszOTIsNyBAQAogCQkvKgogCQkgKiBBbGxvY2F0ZSBjYXJkIHN0cnVjdHVyZS4KIAkJICovCi0JCWNhcmQgPSBtbWNfYWxsb2NfY2FyZChob3N0KTsKKwkJY2FyZCA9IG1tY19hbGxvY19jYXJkKGhvc3QsICZzZF90eXBlKTsKIAkJaWYgKElTX0VSUihjYXJkKSkgewogCQkJZXJyID0gUFRSX0VSUihjYXJkKTsKIAkJCWdvdG8gZXJyOwpAQCAtNTE4LDU1ICs1NTgsNiBAQAogCX0KIH0KIAotTU1DX0FUVFJfRk4oY2lkLCAiJTA4eCUwOHglMDh4JTA4eFxuIiwgY2FyZC0+cmF3X2NpZFswXSwgY2FyZC0+cmF3X2NpZFsxXSwKLQljYXJkLT5yYXdfY2lkWzJdLCBjYXJkLT5yYXdfY2lkWzNdKTsKLU1NQ19BVFRSX0ZOKGNzZCwgIiUwOHglMDh4JTA4eCUwOHhcbiIsIGNhcmQtPnJhd19jc2RbMF0sIGNhcmQtPnJhd19jc2RbMV0sCi0JY2FyZC0+cmF3X2NzZFsyXSwgY2FyZC0+cmF3X2NzZFszXSk7Ci1NTUNfQVRUUl9GTihzY3IsICIlMDh4JTA4eFxuIiwgY2FyZC0+cmF3X3NjclswXSwgY2FyZC0+cmF3X3NjclsxXSk7Ci1NTUNfQVRUUl9GTihkYXRlLCAiJTAyZC8lMDRkXG4iLCBjYXJkLT5jaWQubW9udGgsIGNhcmQtPmNpZC55ZWFyKTsKLU1NQ19BVFRSX0ZOKGZ3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmZ3cmV2KTsKLU1NQ19BVFRSX0ZOKGh3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmh3cmV2KTsKLU1NQ19BVFRSX0ZOKG1hbmZpZCwgIjB4JTA2eFxuIiwgY2FyZC0+Y2lkLm1hbmZpZCk7Ci1NTUNfQVRUUl9GTihuYW1lLCAiJXNcbiIsIGNhcmQtPmNpZC5wcm9kX25hbWUpOwotTU1DX0FUVFJfRk4ob2VtaWQsICIweCUwNHhcbiIsIGNhcmQtPmNpZC5vZW1pZCk7Ci1NTUNfQVRUUl9GTihzZXJpYWwsICIweCUwOHhcbiIsIGNhcmQtPmNpZC5zZXJpYWwpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbW1jX3NkX2Rldl9hdHRyc1tdID0gewotCU1NQ19BVFRSX1JPKGNpZCksCi0JTU1DX0FUVFJfUk8oY3NkKSwKLQlNTUNfQVRUUl9STyhzY3IpLAotCU1NQ19BVFRSX1JPKGRhdGUpLAotCU1NQ19BVFRSX1JPKGZ3cmV2KSwKLQlNTUNfQVRUUl9STyhod3JldiksCi0JTU1DX0FUVFJfUk8obWFuZmlkKSwKLQlNTUNfQVRUUl9STyhuYW1lKSwKLQlNTUNfQVRUUl9STyhvZW1pZCksCi0JTU1DX0FUVFJfUk8oc2VyaWFsKSwKLQlfX0FUVFJfTlVMTCwKLX07Ci0KLS8qCi0gKiBBZGRzIHN5c2ZzIGVudHJpZXMgYXMgcmVsZXZhbnQuCi0gKi8KLXN0YXRpYyBpbnQgbW1jX3NkX3N5c2ZzX2FkZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbW1jX2FkZF9hdHRycyhjYXJkLCBtbWNfc2RfZGV2X2F0dHJzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlcyB0aGUgc3lzZnMgZW50cmllcyBhZGRlZCBieSBtbWNfc3lzZnNfYWRkKCkuCi0gKi8KLXN0YXRpYyB2b2lkIG1tY19zZF9zeXNmc19yZW1vdmUoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCi17Ci0JbW1jX3JlbW92ZV9hdHRycyhjYXJkLCBtbWNfc2RfZGV2X2F0dHJzKTsKLX0KLQogI2lmZGVmIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRQogCiAvKgpAQCAtNjIxLDggKzYxMiw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19zZF9vcHMgPSB7CiAJLnJlbW92ZSA9IG1tY19zZF9yZW1vdmUsCiAJLmRldGVjdCA9IG1tY19zZF9kZXRlY3QsCi0JLnN5c2ZzX2FkZCA9IG1tY19zZF9zeXNmc19hZGQsCi0JLnN5c2ZzX3JlbW92ZSA9IG1tY19zZF9zeXNmc19yZW1vdmUsCiAJLnN1c3BlbmQgPSBtbWNfc2Rfc3VzcGVuZCwKIAkucmVzdW1lID0gbW1jX3NkX3Jlc3VtZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCmluZGV4IDg3YTUwZjQuLjRlYWI3OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAkvKgogCSAqIEFsbG9jYXRlIGNhcmQgc3RydWN0dXJlLgogCSAqLwotCWNhcmQgPSBtbWNfYWxsb2NfY2FyZChob3N0KTsKKwljYXJkID0gbW1jX2FsbG9jX2NhcmQoaG9zdCwgTlVMTCk7CiAJaWYgKElTX0VSUihjYXJkKSkgewogCQllcnIgPSBQVFJfRVJSKGNhcmQpOwogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pcnEuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pcnEuYwppbmRleCAzYmQzMDIxLi5jMjkyZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9faXJxLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lycS5jCkBAIC0xMjgsMTIgKzEyOCwxMiBAQAogCQkJfQogCQl9CiAKLQkJc2V0X3Rhc2tfc3RhdGUoY3VycmVudCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX1NESU9fSVJRKQogCQkJaG9zdC0+b3BzLT5lbmFibGVfc2Rpb19pcnEoaG9zdCwgMSk7CiAJCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJc2NoZWR1bGVfdGltZW91dChwZXJpb2QpOwotCQlzZXRfdGFza19zdGF0ZShjdXJyZW50LCBUQVNLX1JVTk5JTkcpOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwogCiAJaWYgKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX1NESU9fSVJRKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5jCmluZGV4IGUxZmNhNTguLmM4ZmEwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgInNkaW9fb3BzLmgiCiAKIGludCBtbWNfc2VuZF9pb19vcF9jb25kKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jciwgdTMyICpyb2NyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGE5N2U3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc3lzZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiAgbGludXgvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMyBSdXNzZWxsIEtpbmcsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IDIwMDcgUGllcnJlIE9zc21hbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIE1NQyBzeXNmcy9kcml2ZXIgbW9kZWwgc3VwcG9ydC4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KLQotI2luY2x1ZGUgInN5c2ZzLmgiCi0KLWludCBtbWNfYWRkX2F0dHJzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJzKQotewotCWludCBlcnJvciA9IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBhdHRyX25hbWUoYXR0cnNbaV0pOyBpKyspIHsKLQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNhcmQtPmRldiwgJmF0dHJzW2ldKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQl3aGlsZSAoLS1pID49IDApCi0JCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZjYXJkLT5kZXYsICZhdHRyc1tpXSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBtbWNfcmVtb3ZlX2F0dHJzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJzKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgYXR0cl9uYW1lKGF0dHJzW2ldKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNhcmQtPmRldiwgJmF0dHJzW2ldKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5oIGIvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjhmNjcwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc3lzZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvZHJpdmVycy9tbWMvY29yZS9zeXNmcy5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMyBSdXNzZWxsIEtpbmcsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IDIwMDcgUGllcnJlIE9zc21hbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpZm5kZWYgX01NQ19DT1JFX1NZU0ZTX0gKLSNkZWZpbmUgX01NQ19DT1JFX1NZU0ZTX0gKLQotI2RlZmluZSBNTUNfQVRUUl9GTihuYW1lLCBmbXQsIGFyZ3MuLi4pCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBtbWNfIyNuYW1lIyNfc2hvdyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtbWNfY2FyZCwgZGV2KTtcCi0JcmV0dXJuIHNwcmludGYoYnVmLCBmbXQsIGFyZ3MpOwkJCQkJXAotfQotCi0jZGVmaW5lIE1NQ19BVFRSX1JPKG5hbWUpIF9fQVRUUihuYW1lLCBTX0lSVUdPLCBtbWNfIyNuYW1lIyNfc2hvdywgTlVMTCkKLQotaW50IG1tY19hZGRfYXR0cnMoc3RydWN0IG1tY19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnMpOwotdm9pZCBtbWNfcmVtb3ZlX2F0dHJzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKaW5kZXggMjFhY2VjYy4uYTI4ZmMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwpAQCAtMTA3NSwzICsxMDc1LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQVQ5MSBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTmljayBSYW5kZWxsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF0OTFfbWNpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCmluZGV4IGMzOTI2ZWIuLmNjNWY3YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jCkBAIC05OTgsNiArOTk4LDcgQEAKIAkucmVzdW1lICAgICAgICA9IE5VTEwsCiAJLmRyaXZlciAgICAgICAgPSB7CiAJCS5uYW1lICA9IERSSVZFUl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtMTAxOCw1ICsxMDE5LDYgQEAKIE1PRFVMRV9BVVRIT1IoIkFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNTUMvU0QgZHJpdmVyIGZvciB0aGUgQWxjaGVteSBBdTFYWFgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXUxeHh4LW1tYyIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvaW14bW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2lteG1tYy5jCmluZGV4IGYyMDcwYTEuLjk1ZjMzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvaW14bW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9pbXhtbWMuYwpAQCAtMTEyOCw2ICsxMTI4LDcgQEAKIAkucmVzdW1lCQk9IGlteG1jaV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfQogfTsKIApAQCAtMTE0NywzICsxMTQ4LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiaS5NWCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIERyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTppbXgtbW1jIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IGM5ZGZlYjEuLjE0NzU5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgpAQCAtOTMsOSArOTQsMjcgQEAKIAogLyogU3BlY2lmaWVzIGhvdyBvZnRlbiBpbiBtaWxsaXNlY3MgdG8gcG9sbCBmb3IgY2FyZCBzdGF0dXMgY2hhbmdlcwogICogd2hlbiB0aGUgY292ZXIgc3dpdGNoIGlzIG9wZW4gKi8KLSNkZWZpbmUgT01BUF9NTUNfU1dJVENIX1BPTExfREVMQVkJNTAwCisjZGVmaW5lIE9NQVBfTU1DX0NPVkVSX1BPTExfREVMQVkJNTAwCiAKLXN0YXRpYyBpbnQgbW1jX29tYXBfZW5hYmxlX3BvbGwgPSAxOworc3RydWN0IG1tY19vbWFwX2hvc3Q7CisKK3N0cnVjdCBtbWNfb21hcF9zbG90IHsKKwlpbnQJCQlpZDsKKwl1bnNpZ25lZCBpbnQJCXZkZDsKKwl1MTYJCQlzYXZlZF9jb247CisJdTE2CQkJYnVzX21vZGU7CisJdW5zaWduZWQgaW50CQlmY2xrX2ZyZXE7CisJdW5zaWduZWQJCXBvd2VyZWQ6MTsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAljb3Zlcl90YXNrbGV0OworCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIGNvdmVyX3RpbWVyOworCXVuc2lnbmVkCQljb3Zlcl9vcGVuOworCisJc3RydWN0IG1tY19yZXF1ZXN0ICAgICAgKm1ycTsKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAgICAqaG9zdDsKKwlzdHJ1Y3QgbW1jX2hvc3QJCSptbWM7CisJc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSAqcGRhdGE7Cit9OwogCiBzdHJ1Y3QgbW1jX29tYXBfaG9zdCB7CiAJaW50CQkJaW5pdGlhbGl6ZWQ7CkBAIC0xMTUsNiArMTM0LDE1IEBACiAJdW5zaWduZWQgY2hhcgkJYnVzX21vZGU7CiAJdW5zaWduZWQgY2hhcgkJaHdfYnVzX21vZGU7CiAKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJY21kX2Fib3J0X3dvcms7CisJdW5zaWduZWQJCWFib3J0OjE7CisJc3RydWN0IHRpbWVyX2xpc3QJY21kX2Fib3J0X3RpbWVyOworCisJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgc2xvdF9yZWxlYXNlX3dvcms7CisJc3RydWN0IG1tY19vbWFwX3Nsb3QgICAgKm5leHRfc2xvdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBzZW5kX3N0b3Bfd29yazsKKwlzdHJ1Y3QgbW1jX2RhdGEJCSpzdG9wX2RhdGE7CisKIAl1bnNpZ25lZCBpbnQJCXNnX2xlbjsKIAlpbnQJCQlzZ19pZHg7CiAJdTE2ICoJCQlidWZmZXI7CkBAIC0xMzEsNjMgKzE1OSwxNzggQEAKIAl1bnNpZ25lZAkJZG1hX2xlbjsKIAogCXNob3J0CQkJcG93ZXJfcGluOwotCXNob3J0CQkJd3BfcGluOwogCi0JaW50CQkJc3dpdGNoX3BpbjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc3dpdGNoX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJc3dpdGNoX3RpbWVyOwotCWludAkJCXN3aXRjaF9sYXN0X3N0YXRlOworCXN0cnVjdCBtbWNfb21hcF9zbG90ICAgICpzbG90c1tPTUFQX01NQ19NQVhfU0xPVFNdOworCXN0cnVjdCBtbWNfb21hcF9zbG90ICAgICpjdXJyZW50X3Nsb3Q7CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgc2xvdF9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIHNsb3Rfd3E7CisJaW50ICAgICAgICAgICAgICAgICAgICAgbnJfc2xvdHM7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICBjbGtfdGltZXI7CisJc3BpbmxvY2tfdAkJY2xrX2xvY2s7ICAgICAvKiBmb3IgY2hhbmdpbmcgZW5hYmxlZCBzdGF0ZSAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGZjbGtfZW5hYmxlZDoxOworCisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogfTsKIAotc3RhdGljIGlubGluZSBpbnQKLW1tY19vbWFwX2NvdmVyX2lzX29wZW4oc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QpCit2b2lkIG1tY19vbWFwX2ZjbGtfb2ZmZGVsYXkoc3RydWN0IG1tY19vbWFwX3Nsb3QgKnNsb3QpCiB7Ci0JaWYgKGhvc3QtPnN3aXRjaF9waW4gPCAwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gb21hcF9nZXRfZ3Bpb19kYXRhaW4oaG9zdC0+c3dpdGNoX3Bpbik7CisJdW5zaWduZWQgbG9uZyB0aWNrX25zOworCisJaWYgKHNsb3QgIT0gTlVMTCAmJiBzbG90LT5ob3N0LT5mY2xrX2VuYWJsZWQgJiYgc2xvdC0+ZmNsa19mcmVxID4gMCkgeworCQl0aWNrX25zID0gKDEwMDAwMDAwMDAgKyBzbG90LT5mY2xrX2ZyZXEgLSAxKSAvIHNsb3QtPmZjbGtfZnJlcTsKKwkJbmRlbGF5KDggKiB0aWNrX25zKTsKKwl9Cit9CisKK3ZvaWQgbW1jX29tYXBfZmNsa19lbmFibGUoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworCWlmIChob3N0LT5mY2xrX2VuYWJsZWQgIT0gZW5hYmxlKSB7CisJCWhvc3QtPmZjbGtfZW5hYmxlZCA9IGVuYWJsZTsKKwkJaWYgKGVuYWJsZSkKKwkJCWNsa19lbmFibGUoaG9zdC0+ZmNsayk7CisJCWVsc2UKKwkJCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtbWNfb21hcF9zZWxlY3Rfc2xvdChzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCwgaW50IGNsYWltZWQpCit7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBzbG90LT5ob3N0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoY2xhaW1lZCkKKwkJZ290byBub19jbGFpbTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+c2xvdF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKGhvc3QtPm1tYyAhPSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPnNsb3RfbG9jaywgZmxhZ3MpOworCQl3YWl0X2V2ZW50KGhvc3QtPnNsb3Rfd3EsIGhvc3QtPm1tYyA9PSBOVUxMKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPnNsb3RfbG9jaywgZmxhZ3MpOworCX0KKwlob3N0LT5tbWMgPSBzbG90LT5tbWM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+c2xvdF9sb2NrLCBmbGFncyk7Citub19jbGFpbToKKwlkZWxfdGltZXIoJmhvc3QtPmNsa190aW1lcik7CisJaWYgKGhvc3QtPmN1cnJlbnRfc2xvdCAhPSBzbG90IHx8ICFjbGFpbWVkKQorCQltbWNfb21hcF9mY2xrX29mZmRlbGF5KGhvc3QtPmN1cnJlbnRfc2xvdCk7CisKKwlpZiAoaG9zdC0+Y3VycmVudF9zbG90ICE9IHNsb3QpIHsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ09OLCBzbG90LT5zYXZlZF9jb24gJiAweEZDMDApOworCQlpZiAoaG9zdC0+cGRhdGEtPnN3aXRjaF9zbG90ICE9IE5VTEwpCisJCQlob3N0LT5wZGF0YS0+c3dpdGNoX3Nsb3QobW1jX2RldihzbG90LT5tbWMpLCBzbG90LT5pZCk7CisJCWhvc3QtPmN1cnJlbnRfc2xvdCA9IHNsb3Q7CisJfQorCisJaWYgKGNsYWltZWQpIHsKKwkJbW1jX29tYXBfZmNsa19lbmFibGUoaG9zdCwgMSk7CisKKwkJLyogRG9pbmcgdGhlIGR1bW15IHJlYWQgaGVyZSBzZWVtcyB0byB3b3JrIGFyb3VuZCBzb21lIGJ1ZworCQkgKiBhdCBsZWFzdCBpbiBPTUFQMjR4eCBzaWxpY29uIHdoZXJlIHRoZSBjb21tYW5kIHdvdWxkIG5vdAorCQkgKiBzdGFydCBhZnRlciB3cml0aW5nIHRoZSBDTUQgcmVnaXN0ZXIuIFNpZ2guICovCisJCU9NQVBfTU1DX1JFQUQoaG9zdCwgQ09OKTsKKworCQlPTUFQX01NQ19XUklURShob3N0LCBDT04sIHNsb3QtPnNhdmVkX2Nvbik7CisJfSBlbHNlCisJCW1tY19vbWFwX2ZjbGtfZW5hYmxlKGhvc3QsIDApOworfQorCitzdGF0aWMgdm9pZCBtbWNfb21hcF9zdGFydF9yZXF1ZXN0KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAorCQkJCSAgIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKTsKKworc3RhdGljIHZvaWQgbW1jX29tYXBfc2xvdF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbWNfb21hcF9ob3N0LAorCQkJCQkJICBzbG90X3JlbGVhc2Vfd29yayk7CisJc3RydWN0IG1tY19vbWFwX3Nsb3QgKm5leHRfc2xvdCA9IGhvc3QtPm5leHRfc2xvdDsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJxOworCisJaG9zdC0+bmV4dF9zbG90ID0gTlVMTDsKKwltbWNfb21hcF9zZWxlY3Rfc2xvdChuZXh0X3Nsb3QsIDEpOworCisJcnEgPSBuZXh0X3Nsb3QtPm1ycTsKKwluZXh0X3Nsb3QtPm1ycSA9IE5VTEw7CisJbW1jX29tYXBfc3RhcnRfcmVxdWVzdChob3N0LCBycSk7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19vbWFwX3JlbGVhc2Vfc2xvdChzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCwgaW50IGNsa19lbmFibGVkKQoreworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gc2xvdC0+aG9zdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJQlVHX09OKHNsb3QgPT0gTlVMTCB8fCBob3N0LT5tbWMgPT0gTlVMTCk7CisKKwlpZiAoY2xrX2VuYWJsZWQpCisJCS8qIEtlZXBzIGNsb2NrIHJ1bm5pbmcgZm9yIGF0IGxlYXN0IDggY3ljbGVzIG9uIHZhbGlkIGZyZXEgKi8KKwkJbW9kX3RpbWVyKCZob3N0LT5jbGtfdGltZXIsIGppZmZpZXMgICsgSFovMTApOworCWVsc2UgeworCQlkZWxfdGltZXIoJmhvc3QtPmNsa190aW1lcik7CisJCW1tY19vbWFwX2ZjbGtfb2ZmZGVsYXkoc2xvdCk7CisJCW1tY19vbWFwX2ZjbGtfZW5hYmxlKGhvc3QsIDApOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5zbG90X2xvY2ssIGZsYWdzKTsKKwkvKiBDaGVjayBmb3IgYW55IHBlbmRpbmcgcmVxdWVzdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bnJfc2xvdHM7IGkrKykgeworCQlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqbmV3X3Nsb3Q7CisKKwkJaWYgKGhvc3QtPnNsb3RzW2ldID09IE5VTEwgfHwgaG9zdC0+c2xvdHNbaV0tPm1ycSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJQlVHX09OKGhvc3QtPm5leHRfc2xvdCAhPSBOVUxMKTsKKwkJbmV3X3Nsb3QgPSBob3N0LT5zbG90c1tpXTsKKwkJLyogVGhlIGN1cnJlbnQgc2xvdCBzaG91bGQgbm90IGhhdmUgYSByZXF1ZXN0IGluIHF1ZXVlICovCisJCUJVR19PTihuZXdfc2xvdCA9PSBob3N0LT5jdXJyZW50X3Nsb3QpOworCisJCWhvc3QtPm5leHRfc2xvdCA9IG5ld19zbG90OworCQlob3N0LT5tbWMgPSBuZXdfc2xvdC0+bW1jOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5zbG90X2xvY2ssIGZsYWdzKTsKKwkJc2NoZWR1bGVfd29yaygmaG9zdC0+c2xvdF9yZWxlYXNlX3dvcmspOworCQlyZXR1cm47CisJfQorCisJaG9zdC0+bW1jID0gTlVMTDsKKwl3YWtlX3VwKCZob3N0LT5zbG90X3dxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5zbG90X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZQoraW50IG1tY19vbWFwX2NvdmVyX2lzX29wZW4oc3RydWN0IG1tY19vbWFwX3Nsb3QgKnNsb3QpCit7CisJaWYgKHNsb3QtPnBkYXRhLT5nZXRfY292ZXJfc3RhdGUpCisJCXJldHVybiBzbG90LT5wZGF0YS0+Z2V0X2NvdmVyX3N0YXRlKG1tY19kZXYoc2xvdC0+bW1jKSwKKwkJCQkJCSAgICBzbG90LT5pZCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1tbWNfb21hcF9zaG93X2NvdmVyX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK21tY19vbWFwX3Nob3dfY292ZXJfc3dpdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtbWNfaG9zdCwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbW1jX29tYXBfY292ZXJfaXNfb3Blbihob3N0KSA/ICJvcGVuIiA6Ci0JCQkiY2xvc2VkIik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1tY19vbWFwX2NvdmVyX2lzX29wZW4oc2xvdCkgPyAib3BlbiIgOgorCQkgICAgICAgImNsb3NlZCIpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoY292ZXJfc3dpdGNoLCBTX0lSVUdPLCBtbWNfb21hcF9zaG93X2NvdmVyX3N3aXRjaCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1tbWNfb21hcF9zaG93X2VuYWJsZV9wb2xsKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorbW1jX29tYXBfc2hvd19zbG90X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgbW1jX29tYXBfZW5hYmxlX3BvbGwpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1tY19ob3N0LCBjbGFzc19kZXYpOworCXN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzbG90LT5wZGF0YS0+bmFtZSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1tbWNfb21hcF9zdG9yZV9lbmFibGVfcG9sbChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKLQlzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgZW5hYmxlX3BvbGw7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiUxMGQiLCAmZW5hYmxlX3BvbGwpICE9IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVuYWJsZV9wb2xsICE9IG1tY19vbWFwX2VuYWJsZV9wb2xsKSB7Ci0JCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQkJbW1jX29tYXBfZW5hYmxlX3BvbGwgPSBlbmFibGVfcG9sbDsKLQkJaWYgKGVuYWJsZV9wb2xsICYmIGhvc3QtPnN3aXRjaF9waW4gPj0gMCkKLQkJCXNjaGVkdWxlX3dvcmsoJmhvc3QtPnN3aXRjaF93b3JrKTsKLQl9Ci0JcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVfcG9sbCwgMDY2NCwKLQkJICAgbW1jX29tYXBfc2hvd19lbmFibGVfcG9sbCwgbW1jX29tYXBfc3RvcmVfZW5hYmxlX3BvbGwpOworc3RhdGljIERFVklDRV9BVFRSKHNsb3RfbmFtZSwgU19JUlVHTywgbW1jX29tYXBfc2hvd19zbG90X25hbWUsIE5VTEwpOwogCiBzdGF0aWMgdm9pZAogbW1jX29tYXBfc3RhcnRfY29tbWFuZChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCkBAIC0yMzMsNyArMzc2LDcgQEAKIAogCWNtZHJlZyA9IGNtZC0+b3Bjb2RlIHwgKHJlc3B0eXBlIDw8IDgpIHwgKGNtZHR5cGUgPDwgMTIpOwogCi0JaWYgKGhvc3QtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTikKKwlpZiAoaG9zdC0+Y3VycmVudF9zbG90LT5idXNfbW9kZSA9PSBNTUNfQlVTTU9ERV9PUEVORFJBSU4pCiAJCWNtZHJlZyB8PSAxIDw8IDY7CiAKIAlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfQlVTWSkKQEAgLTI0Miw3ICszODUsNyBAQAogCWlmIChob3N0LT5kYXRhICYmICEoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkpCiAJCWNtZHJlZyB8PSAxIDw8IDE1OwogCi0JY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKKwltb2RfdGltZXIoJmhvc3QtPmNtZF9hYm9ydF90aW1lciwgamlmZmllcyArIEhaLzIpOwogCiAJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ1RPLCAyMDApOwogCU9NQVBfTU1DX1dSSVRFKGhvc3QsIEFSR0wsIGNtZC0+YXJnICYgMHhmZmZmKTsKQEAgLTI1NywyNiArNDAwLDQ2IEBACiB9CiAKIHN0YXRpYyB2b2lkCittbWNfb21hcF9yZWxlYXNlX2RtYShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhLAorCQkgICAgIGludCBhYm9ydCkKK3sKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGF0YV9kaXI7CisKKwlCVUdfT04oaG9zdC0+ZG1hX2NoIDwgMCk7CisJaWYgKGRhdGEtPmVycm9yKQorCQlvbWFwX3N0b3BfZG1hKGhvc3QtPmRtYV9jaCk7CisJLyogUmVsZWFzZSBETUEgY2hhbm5lbCBsYXppbHkgKi8KKwltb2RfdGltZXIoJmhvc3QtPmRtYV90aW1lciwgamlmZmllcyArIEhaKTsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJZG1hX2RhdGFfZGlyID0gRE1BX1RPX0RFVklDRTsKKwllbHNlCisJCWRtYV9kYXRhX2RpciA9IERNQV9GUk9NX0RFVklDRTsKKwlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+c2dfbGVuLAorCQkgICAgIGRtYV9kYXRhX2Rpcik7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19vbWFwX3NlbmRfc3RvcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbW1jX29tYXBfaG9zdCwKKwkJCQkJCSAgc2VuZF9zdG9wX3dvcmspOworCXN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90ID0gaG9zdC0+Y3VycmVudF9zbG90OworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPnN0b3BfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHRpY2tfbnM7CisKKwl0aWNrX25zID0gKDEwMDAwMDAwMDAgKyBzbG90LT5mY2xrX2ZyZXEgLSAxKS9zbG90LT5mY2xrX2ZyZXE7CisJbmRlbGF5KDgqdGlja19ucyk7CisKKwltbWNfb21hcF9zdGFydF9jb21tYW5kKGhvc3QsIGRhdGEtPnN0b3ApOworfQorCitzdGF0aWMgdm9pZAogbW1jX29tYXBfeGZlcl9kb25lKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7Ci0JaWYgKGhvc3QtPmRtYV9pbl91c2UpIHsKLQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RhdGFfZGlyOworCWlmIChob3N0LT5kbWFfaW5fdXNlKQorCQltbWNfb21hcF9yZWxlYXNlX2RtYShob3N0LCBkYXRhLCBkYXRhLT5lcnJvcik7CiAKLQkJQlVHX09OKGhvc3QtPmRtYV9jaCA8IDApOwotCQlpZiAoZGF0YS0+ZXJyb3IpCi0JCQlvbWFwX3N0b3BfZG1hKGhvc3QtPmRtYV9jaCk7Ci0JCS8qIFJlbGVhc2UgRE1BIGNoYW5uZWwgbGF6aWx5ICovCi0JCW1vZF90aW1lcigmaG9zdC0+ZG1hX3RpbWVyLCBqaWZmaWVzICsgSFopOwotCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKLQkJCWRtYV9kYXRhX2RpciA9IERNQV9UT19ERVZJQ0U7Ci0JCWVsc2UKLQkJCWRtYV9kYXRhX2RpciA9IERNQV9GUk9NX0RFVklDRTsKLQkJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGhvc3QtPnNnX2xlbiwKLQkJCSAgICAgZG1hX2RhdGFfZGlyKTsKLQl9CiAJaG9zdC0+ZGF0YSA9IE5VTEw7CiAJaG9zdC0+c2dfbGVuID0gMDsKLQljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKIAogCS8qIE5PVEU6ICBNTUMgbGF5ZXIgd2lsbCBzb21ldGltZXMgcG9sbC13YWl0IENNRDEzIG5leHQsIGlzc3VpbmcKIAkgKiBkb3plbnMgb2YgcmVxdWVzdHMgdW50aWwgdGhlIGNhcmQgZmluaXNoZXMgd3JpdGluZyBkYXRhLgpAQCAtMjg0LDEyICs0NDcsNTggQEAKIAkgKi8KIAogCWlmICghZGF0YS0+c3RvcCkgeworCQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwogCQlob3N0LT5tcnEgPSBOVUxMOwotCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgZGF0YS0+bXJxKTsKKwkJbW1jID0gaG9zdC0+bW1jOworCQltbWNfb21hcF9yZWxlYXNlX3Nsb3QoaG9zdC0+Y3VycmVudF9zbG90LCAxKTsKKwkJbW1jX3JlcXVlc3RfZG9uZShtbWMsIGRhdGEtPm1ycSk7CiAJCXJldHVybjsKIAl9CiAKLQltbWNfb21hcF9zdGFydF9jb21tYW5kKGhvc3QsIGRhdGEtPnN0b3ApOworCWhvc3QtPnN0b3BfZGF0YSA9IGRhdGE7CisJc2NoZWR1bGVfd29yaygmaG9zdC0+c2VuZF9zdG9wX3dvcmspOworfQorCitzdGF0aWMgdm9pZAorbW1jX29tYXBfc2VuZF9hYm9ydChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgaW50IG1heGxvb3BzKQoreworCXN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90ID0gaG9zdC0+Y3VycmVudF9zbG90OworCXVuc2lnbmVkIGludCByZXN0YXJ0cywgcGFzc2VzLCB0aW1lb3V0OworCXUxNiBzdGF0ID0gMDsKKworCS8qIFNlbmRpbmcgYWJvcnQgdGFrZXMgODAgY2xvY2tzLiBIYXZlIHNvbWUgZXh0cmEgYW5kIHJvdW5kIHVwICovCisJdGltZW91dCA9ICgxMjAqMTAwMDAwMCArIHNsb3QtPmZjbGtfZnJlcSAtIDEpL3Nsb3QtPmZjbGtfZnJlcTsKKwlyZXN0YXJ0cyA9IDA7CisJd2hpbGUgKHJlc3RhcnRzIDwgbWF4bG9vcHMpIHsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgU1RBVCwgMHhGRkZGKTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ01ELCAoMyA8PCAxMikgfCAoMSA8PCA3KSk7CisKKwkJcGFzc2VzID0gMDsKKwkJd2hpbGUgKHBhc3NlcyA8IHRpbWVvdXQpIHsKKwkJCXN0YXQgPSBPTUFQX01NQ19SRUFEKGhvc3QsIFNUQVQpOworCQkJaWYgKHN0YXQgJiBPTUFQX01NQ19TVEFUX0VORF9PRl9DTUQpCisJCQkJZ290byBvdXQ7CisJCQl1ZGVsYXkoMSk7CisJCQlwYXNzZXMrKzsKKwkJfQorCisJCXJlc3RhcnRzKys7CisJfQorb3V0OgorCU9NQVBfTU1DX1dSSVRFKGhvc3QsIFNUQVQsIHN0YXQpOworfQorCitzdGF0aWMgdm9pZAorbW1jX29tYXBfYWJvcnRfeGZlcihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWlmIChob3N0LT5kbWFfaW5fdXNlKQorCQltbWNfb21hcF9yZWxlYXNlX2RtYShob3N0LCBkYXRhLCAxKTsKKworCWhvc3QtPmRhdGEgPSBOVUxMOworCWhvc3QtPnNnX2xlbiA9IDA7CisKKwltbWNfb21hcF9zZW5kX2Fib3J0KGhvc3QsIDEwMDAwKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM0NSw2ICs1NTQsOCBAQAogewogCWhvc3QtPmNtZCA9IE5VTEw7CiAKKwlkZWxfdGltZXIoJmhvc3QtPmNtZF9hYm9ydF90aW1lcik7CisKIAlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgewogCQlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CiAJCQkvKiByZXNwb25zZSB0eXBlIDIgKi8KQEAgLTM2OSwxMiArNTgwLDY4IEBACiAJfQogCiAJaWYgKGhvc3QtPmRhdGEgPT0gTlVMTCB8fCBjbWQtPmVycm9yKSB7CisJCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCisJCWlmIChob3N0LT5kYXRhICE9IE5VTEwpCisJCQltbWNfb21hcF9hYm9ydF94ZmVyKGhvc3QsIGhvc3QtPmRhdGEpOwogCQlob3N0LT5tcnEgPSBOVUxMOwotCQljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKLQkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIGNtZC0+bXJxKTsKKwkJbW1jID0gaG9zdC0+bW1jOworCQltbWNfb21hcF9yZWxlYXNlX3Nsb3QoaG9zdC0+Y3VycmVudF9zbG90LCAxKTsKKwkJbW1jX3JlcXVlc3RfZG9uZShtbWMsIGNtZC0+bXJxKTsKIAl9CiB9CiAKKy8qCisgKiBBYm9ydCBzdHVjayBjb21tYW5kLiBDYW4gb2NjdXIgd2hlbiBjYXJkIGlzIHJlbW92ZWQgd2hpbGUgaXQgaXMgYmVpbmcKKyAqIHJlYWQuCisgKi8KK3N0YXRpYyB2b2lkIG1tY19vbWFwX2Fib3J0X2NvbW1hbmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtbWNfb21hcF9ob3N0LAorCQkJCQkJICBjbWRfYWJvcnRfd29yayk7CisJQlVHX09OKCFob3N0LT5jbWQpOworCisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJBYm9ydGluZyBzdHVjayBjb21tYW5kIENNRCVkXG4iLAorCQlob3N0LT5jbWQtPm9wY29kZSk7CisKKwlpZiAoaG9zdC0+Y21kLT5lcnJvciA9PSAwKQorCQlob3N0LT5jbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKKworCWlmIChob3N0LT5kYXRhID09IE5VTEwpIHsKKwkJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CisJCXN0cnVjdCBtbWNfaG9zdCAgICAqbW1jOworCisJCWNtZCA9IGhvc3QtPmNtZDsKKwkJaG9zdC0+Y21kID0gTlVMTDsKKwkJbW1jX29tYXBfc2VuZF9hYm9ydChob3N0LCAxMDAwMCk7CisKKwkJaG9zdC0+bXJxID0gTlVMTDsKKwkJbW1jID0gaG9zdC0+bW1jOworCQltbWNfb21hcF9yZWxlYXNlX3Nsb3QoaG9zdC0+Y3VycmVudF9zbG90LCAxKTsKKwkJbW1jX3JlcXVlc3RfZG9uZShtbWMsIGNtZC0+bXJxKTsKKwl9IGVsc2UKKwkJbW1jX29tYXBfY21kX2RvbmUoaG9zdCwgaG9zdC0+Y21kKTsKKworCWhvc3QtPmFib3J0ID0gMDsKKwllbmFibGVfaXJxKGhvc3QtPmlycSk7Cit9CisKK3N0YXRpYyB2b2lkCittbWNfb21hcF9jbWRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gKHN0cnVjdCBtbWNfb21hcF9ob3N0ICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5zbG90X2xvY2ssIGZsYWdzKTsKKwlpZiAoaG9zdC0+Y21kICE9IE5VTEwgJiYgIWhvc3QtPmFib3J0KSB7CisJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIElFLCAwKTsKKwkJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJaG9zdC0+YWJvcnQgPSAxOworCQlzY2hlZHVsZV93b3JrKCZob3N0LT5jbWRfYWJvcnRfd29yayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPnNsb3RfbG9jaywgZmxhZ3MpOworfQorCiAvKiBQSU8gb25seSAqLwogc3RhdGljIHZvaWQKIG1tY19vbWFwX3NnX3RvX2J1ZihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCkKQEAgLTM4OCw2ICs2NTUsMTQgQEAKIAkJaG9zdC0+YnVmZmVyX2J5dGVzX2xlZnQgPSBob3N0LT50b3RhbF9ieXRlc19sZWZ0OwogfQogCitzdGF0aWMgdm9pZAorbW1jX29tYXBfY2xrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqKSBkYXRhOworCisJbW1jX29tYXBfZmNsa19lbmFibGUoaG9zdCwgMCk7Cit9CisKIC8qIFBJTyBvbmx5ICovCiBzdGF0aWMgdm9pZAogbW1jX29tYXBfeGZlcl9kYXRhKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBpbnQgd3JpdGUpCkBAIC00MzYsMTEgKzcxMSwxMiBAQAogCXUxNiBzdGF0dXM7CiAJaW50IGVuZF9jb21tYW5kOwogCWludCBlbmRfdHJhbnNmZXI7Ci0JaW50IHRyYW5zZmVyX2Vycm9yOworCWludCB0cmFuc2Zlcl9lcnJvciwgY21kX2Vycm9yOwogCiAJaWYgKGhvc3QtPmNtZCA9PSBOVUxMICYmIGhvc3QtPmRhdGEgPT0gTlVMTCkgewogCQlzdGF0dXMgPSBPTUFQX01NQ19SRUFEKGhvc3QsIFNUQVQpOwotCQlkZXZfaW5mbyhtbWNfZGV2KGhvc3QtPm1tYyksInNwdXJpb3VzIGlycSAweCUwNHhcbiIsIHN0YXR1cyk7CisJCWRldl9pbmZvKG1tY19kZXYoaG9zdC0+c2xvdHNbMF0tPm1tYyksCisJCQkgIlNwdXJpb3VzIElSUSAweCUwNHhcbiIsIHN0YXR1cyk7CiAJCWlmIChzdGF0dXMgIT0gMCkgewogCQkJT01BUF9NTUNfV1JJVEUoaG9zdCwgU1RBVCwgc3RhdHVzKTsKIAkJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIElFLCAwKTsKQEAgLTQ1MSwxMiArNzI3LDE5IEBACiAJZW5kX2NvbW1hbmQgPSAwOwogCWVuZF90cmFuc2ZlciA9IDA7CiAJdHJhbnNmZXJfZXJyb3IgPSAwOworCWNtZF9lcnJvciA9IDA7CiAKIAl3aGlsZSAoKHN0YXR1cyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgU1RBVCkpICE9IDApIHsKKwkJaW50IGNtZDsKKwogCQlPTUFQX01NQ19XUklURShob3N0LCBTVEFULCBzdGF0dXMpOworCQlpZiAoaG9zdC0+Y21kICE9IE5VTEwpCisJCQljbWQgPSBob3N0LT5jbWQtPm9wY29kZTsKKwkJZWxzZQorCQkJY21kID0gLTE7CiAjaWZkZWYgQ09ORklHX01NQ19ERUJVRwogCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1NQyBJUlEgJTA0eCAoQ01EICVkKTogIiwKLQkJCXN0YXR1cywgaG9zdC0+Y21kICE9IE5VTEwgPyBob3N0LT5jbWQtPm9wY29kZSA6IC0xKTsKKwkJCXN0YXR1cywgY21kKTsKIAkJbW1jX29tYXBfcmVwb3J0X2lycShzdGF0dXMpOwogCQlwcmludGsoIlxuIik7CiAjZW5kaWYKQEAgLTQ2OCwxMiArNzUxLDEyIEBACiAJCQkJbW1jX29tYXBfeGZlcl9kYXRhKGhvc3QsIDEpOwogCQl9CiAKLQkJaWYgKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfRU5EX09GX0RBVEEpIHsKKwkJaWYgKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfRU5EX09GX0RBVEEpCiAJCQllbmRfdHJhbnNmZXIgPSAxOwotCQl9CiAKIAkJaWYgKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfREFUQV9UT1VUKSB7Ci0JCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImRhdGEgdGltZW91dFxuIik7CisJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImRhdGEgdGltZW91dCAoQ01EJWQpXG4iLAorCQkJCWNtZCk7CiAJCQlpZiAoaG9zdC0+ZGF0YSkgewogCQkJCWhvc3QtPmRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKIAkJCQl0cmFuc2Zlcl9lcnJvciA9IDE7CkBAIC00OTUsMTcgKzc3OCwxNiBAQAogCQlpZiAoc3RhdHVzICYgT01BUF9NTUNfU1RBVF9DTURfVE9VVCkgewogCQkJLyogVGltZW91dHMgYXJlIHJvdXRpbmUgd2l0aCBzb21lIGNvbW1hbmRzICovCiAJCQlpZiAoaG9zdC0+Y21kKSB7Ci0JCQkJaWYgKGhvc3QtPmNtZC0+b3Bjb2RlICE9IE1NQ19BTExfU0VORF9DSUQgJiYKLQkJCQkJCWhvc3QtPmNtZC0+b3Bjb2RlICE9Ci0JCQkJCQlNTUNfU0VORF9PUF9DT05EICYmCi0JCQkJCQlob3N0LT5jbWQtPm9wY29kZSAhPQotCQkJCQkJTU1DX0FQUF9DTUQgJiYKLQkJCQkJCSFtbWNfb21hcF9jb3Zlcl9pc19vcGVuKGhvc3QpKQorCQkJCXN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90ID0KKwkJCQkJaG9zdC0+Y3VycmVudF9zbG90OworCQkJCWlmIChzbG90ID09IE5VTEwgfHwKKwkJCQkgICAgIW1tY19vbWFwX2NvdmVyX2lzX29wZW4oc2xvdCkpCiAJCQkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAotCQkJCQkJImNvbW1hbmQgdGltZW91dCwgQ01EICVkXG4iLAotCQkJCQkJaG9zdC0+Y21kLT5vcGNvZGUpOworCQkJCQkJImNvbW1hbmQgdGltZW91dCAoQ01EJWQpXG4iLAorCQkJCQkJY21kKTsKIAkJCQlob3N0LT5jbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKIAkJCQllbmRfY29tbWFuZCA9IDE7CisJCQkJY21kX2Vycm9yID0gMTsKIAkJCX0KIAkJfQogCkBAIC01MTMsOSArNzk1LDEwIEBACiAJCQlpZiAoaG9zdC0+Y21kKSB7CiAJCQkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksCiAJCQkJCSJjb21tYW5kIENSQyBlcnJvciAoQ01EJWQsIGFyZyAweCUwOHgpXG4iLAotCQkJCQlob3N0LT5jbWQtPm9wY29kZSwgaG9zdC0+Y21kLT5hcmcpOworCQkJCQljbWQsIGhvc3QtPmNtZC0+YXJnKTsKIAkJCQlob3N0LT5jbWQtPmVycm9yID0gLUVJTFNFUTsKIAkJCQllbmRfY29tbWFuZCA9IDE7CisJCQkJY21kX2Vycm9yID0gMTsKIAkJCX0gZWxzZQogCQkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAogCQkJCQkiY29tbWFuZCBDUkMgZXJyb3Igd2l0aG91dCBjbWQ/XG4iKTsKQEAgLTUyNCwxMyArODA3LDEzIEBACiAJCWlmIChzdGF0dXMgJiBPTUFQX01NQ19TVEFUX0NBUkRfRVJSKSB7CiAJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKIAkJCQkiaWdub3JpbmcgY2FyZCBzdGF0dXMgZXJyb3IgKENNRCVkKVxuIiwKLQkJCQlob3N0LT5jbWQtPm9wY29kZSk7CisJCQkJY21kKTsKIAkJCWVuZF9jb21tYW5kID0gMTsKIAkJfQogCiAJCS8qCiAJCSAqIE5PVEU6IE9uIDE2MTAgdGhlIEVORF9PRl9DTUQgbWF5IGNvbWUgdG9vIGVhcmx5IHdoZW4KLQkJICogc3RhcnRpbmcgYSB3cml0ZSAKKwkJICogc3RhcnRpbmcgYSB3cml0ZQogCQkgKi8KIAkJaWYgKChzdGF0dXMgJiBPTUFQX01NQ19TVEFUX0VORF9PRl9DTUQpICYmCiAJCSAgICAoIShzdGF0dXMgJiBPTUFQX01NQ19TVEFUX0FfRU1QVFkpKSkgewpAQCAtNTM4LDYzICs4MjEsNzIgQEAKIAkJfQogCX0KIAotCWlmIChlbmRfY29tbWFuZCkgeworCWlmIChjbWRfZXJyb3IgJiYgaG9zdC0+ZGF0YSkgeworCQlkZWxfdGltZXIoJmhvc3QtPmNtZF9hYm9ydF90aW1lcik7CisJCWhvc3QtPmFib3J0ID0gMTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgSUUsIDApOworCQlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCQlzY2hlZHVsZV93b3JrKCZob3N0LT5jbWRfYWJvcnRfd29yayk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoZW5kX2NvbW1hbmQpCiAJCW1tY19vbWFwX2NtZF9kb25lKGhvc3QsIGhvc3QtPmNtZCk7CisJaWYgKGhvc3QtPmRhdGEgIT0gTlVMTCkgeworCQlpZiAodHJhbnNmZXJfZXJyb3IpCisJCQltbWNfb21hcF94ZmVyX2RvbmUoaG9zdCwgaG9zdC0+ZGF0YSk7CisJCWVsc2UgaWYgKGVuZF90cmFuc2ZlcikKKwkJCW1tY19vbWFwX2VuZF9vZl9kYXRhKGhvc3QsIGhvc3QtPmRhdGEpOwogCX0KLQlpZiAodHJhbnNmZXJfZXJyb3IpCi0JCW1tY19vbWFwX3hmZXJfZG9uZShob3N0LCBob3N0LT5kYXRhKTsKLQllbHNlIGlmIChlbmRfdHJhbnNmZXIpCi0JCW1tY19vbWFwX2VuZF9vZl9kYXRhKGhvc3QsIGhvc3QtPmRhdGEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbW1jX29tYXBfc3dpdGNoX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit2b2lkIG9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBudW0sIGludCBpc19jbG9zZWQpCiB7Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1tY19vbWFwX2hvc3QgKikgZGV2X2lkOworCWludCBjb3Zlcl9vcGVuOworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19vbWFwX3Nsb3QgKnNsb3QgPSBob3N0LT5zbG90c1tudW1dOwogCi0Jc2NoZWR1bGVfd29yaygmaG9zdC0+c3dpdGNoX3dvcmspOworCUJVR19PTihudW0gPj0gaG9zdC0+bnJfc2xvdHMpOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZCBtbWNfb21hcF9zd2l0Y2hfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1tY19vbWFwX2hvc3QgKikgYXJnOwotCi0Jc2NoZWR1bGVfd29yaygmaG9zdC0+c3dpdGNoX3dvcmspOwotfQotCi1zdGF0aWMgdm9pZCBtbWNfb21hcF9zd2l0Y2hfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1tY19vbWFwX2hvc3QsIHN3aXRjaF93b3JrKTsKLQlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQ7Ci0Jc3RhdGljIGludCBjb21wbGFpbmVkID0gMDsKLQlpbnQgY2FyZHMgPSAwLCBjb3Zlcl9vcGVuOwotCi0JaWYgKGhvc3QtPnN3aXRjaF9waW4gPT0gLTEpCisJLyogT3RoZXIgc3Vic3lzdGVtcyBjYW4gY2FsbCBpbiBoZXJlIGJlZm9yZSB3ZSdyZSBpbml0aWFsaXNlZC4gKi8KKwlpZiAoaG9zdC0+bnJfc2xvdHMgPT0gMCB8fCAhaG9zdC0+c2xvdHNbbnVtXSkKIAkJcmV0dXJuOwotCWNvdmVyX29wZW4gPSBtbWNfb21hcF9jb3Zlcl9pc19vcGVuKGhvc3QpOwotCWlmIChjb3Zlcl9vcGVuICE9IGhvc3QtPnN3aXRjaF9sYXN0X3N0YXRlKSB7Ci0JCWtvYmplY3RfdWV2ZW50KCZob3N0LT5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKLQkJaG9zdC0+c3dpdGNoX2xhc3Rfc3RhdGUgPSBjb3Zlcl9vcGVuOworCisJY292ZXJfb3BlbiA9IG1tY19vbWFwX2NvdmVyX2lzX29wZW4oc2xvdCk7CisJaWYgKGNvdmVyX29wZW4gIT0gc2xvdC0+Y292ZXJfb3BlbikgeworCQlzbG90LT5jb3Zlcl9vcGVuID0gY292ZXJfb3BlbjsKKwkJc3lzZnNfbm90aWZ5KCZzbG90LT5tbWMtPmNsYXNzX2Rldi5rb2JqLCBOVUxMLCAiY292ZXJfc3dpdGNoIik7CiAJfQotCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmaG9zdC0+bW1jLT5jYXJkcywgbm9kZSkgewotCQlpZiAobW1jX2NhcmRfcHJlc2VudChjYXJkKSkKLQkJCWNhcmRzKys7Ci0JfQotCWlmIChtbWNfb21hcF9jb3Zlcl9pc19vcGVuKGhvc3QpKSB7Ci0JCWlmICghY29tcGxhaW5lZCkgewotCQkJZGV2X2luZm8obW1jX2Rldihob3N0LT5tbWMpLCAiY292ZXIgaXMgb3BlblxuIik7Ci0JCQljb21wbGFpbmVkID0gMTsKLQkJfQotCQlpZiAobW1jX29tYXBfZW5hYmxlX3BvbGwpCi0JCQltb2RfdGltZXIoJmhvc3QtPnN3aXRjaF90aW1lciwgamlmZmllcyArCi0JCQkJbXNlY3NfdG9famlmZmllcyhPTUFQX01NQ19TV0lUQ0hfUE9MTF9ERUxBWSkpOwotCX0gZWxzZSB7Ci0JCWNvbXBsYWluZWQgPSAwOwotCX0KKworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNsb3QtPmNvdmVyX3Rhc2tsZXQpOworfQorCitzdGF0aWMgdm9pZCBtbWNfb21hcF9jb3Zlcl90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCA9IChzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqKSBhcmc7CisJdGFza2xldF9zY2hlZHVsZSgmc2xvdC0+Y292ZXJfdGFza2xldCk7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19vbWFwX2NvdmVyX2hhbmRsZXIodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCA9IChzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqKXBhcmFtOworCWludCBjb3Zlcl9vcGVuID0gbW1jX29tYXBfY292ZXJfaXNfb3BlbihzbG90KTsKKworCW1tY19kZXRlY3RfY2hhbmdlKHNsb3QtPm1tYywgMCk7CisJaWYgKCFjb3Zlcl9vcGVuKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIG5vIGNhcmQgaXMgaW5zZXJ0ZWQsIHdlIHBvc3Rwb25lIHBvbGxpbmcgdW50aWwKKwkgKiB0aGUgY292ZXIgaGFzIGJlZW4gY2xvc2VkLgorCSAqLworCWlmIChzbG90LT5tbWMtPmNhcmQgPT0gTlVMTCB8fCAhbW1jX2NhcmRfcHJlc2VudChzbG90LT5tbWMtPmNhcmQpKQorCQlyZXR1cm47CisKKwltb2RfdGltZXIoJnNsb3QtPmNvdmVyX3RpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE9NQVBfTU1DX0NPVkVSX1BPTExfREVMQVkpKTsKIH0KIAogLyogUHJlcGFyZSB0byB0cmFuc2ZlciB0aGUgbmV4dCBzZWdtZW50IG9mIGEgc2NhdHRlcmxpc3QgKi8KQEAgLTc2NSwxMyArMTA1NywxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RhdGFfdGltZW91dChzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCiB7Ci0JaW50IHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IHRpbWVvdXQsIGN5Y2xlX25zOwogCXUxNiByZWc7CiAKLQkvKiBDb252ZXJ0IG5zIHRvIGNsb2NrIGN5Y2xlcyBieSBhc3N1bWluZyAyME1IeiBmcmVxdWVuY3kKLQkgKiAxIGN5Y2xlIGF0IDIwTUh6ID0gNTAwIG5zCi0JICovCi0JdGltZW91dCA9IHJlcS0+ZGF0YS0+dGltZW91dF9jbGtzICsgcmVxLT5kYXRhLT50aW1lb3V0X25zIC8gNTAwOworCWN5Y2xlX25zID0gMTAwMDAwMDAwMCAvIGhvc3QtPmN1cnJlbnRfc2xvdC0+ZmNsa19mcmVxOworCXRpbWVvdXQgPSByZXEtPmRhdGEtPnRpbWVvdXRfbnMgLyBjeWNsZV9uczsKKwl0aW1lb3V0ICs9IHJlcS0+ZGF0YS0+dGltZW91dF9jbGtzOwogCiAJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byB1c2UgdGltZW91dCBtdWx0aXBsaWVyIHJlZ2lzdGVyICovCiAJcmVnID0gT01BUF9NTUNfUkVBRChob3N0LCBTRElPKTsKQEAgLTg1NCwxMSArMTE0NSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbW1jX29tYXBfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBtbWNfb21hcF9zdGFydF9yZXF1ZXN0KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LAorCQkJCSAgIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLQotCVdBUk5fT04oaG9zdC0+bXJxICE9IE5VTEwpOworCUJVR19PTihob3N0LT5tcnEgIT0gTlVMTCk7CiAKIAlob3N0LT5tcnEgPSByZXE7CiAKQEAgLTg2Nyw2MCArMTE1Nyw1NiBAQAogCW1tY19vbWFwX3N0YXJ0X2NvbW1hbmQoaG9zdCwgcmVxLT5jbWQpOwogCWlmIChob3N0LT5kbWFfaW5fdXNlKQogCQlvbWFwX3N0YXJ0X2RtYShob3N0LT5kbWFfY2gpOworCUJVR19PTihpcnFzX2Rpc2FibGVkKCkpOwogfQogCi1zdGF0aWMgdm9pZCBpbm5vdmF0b3JfZnBnYV9zb2NrZXRfcG93ZXIoaW50IG9uKQorc3RhdGljIHZvaWQgbW1jX29tYXBfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICpyZXEpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKLQlpZiAob24pIHsKLQkJZnBnYV93cml0ZShmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUikgfCAoMSA8PCAzKSwKLQkJICAgICBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQl9IGVsc2UgewotCQlmcGdhX3dyaXRlKGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKSAmIH4oMSA8PCAzKSwKLQkJICAgICBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQl9Ci0jZW5kaWYKKwlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBzbG90LT5ob3N0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+c2xvdF9sb2NrLCBmbGFncyk7CisJaWYgKGhvc3QtPm1tYyAhPSBOVUxMKSB7CisJCUJVR19PTihzbG90LT5tcnEgIT0gTlVMTCk7CisJCXNsb3QtPm1ycSA9IHJlcTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+c2xvdF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJaG9zdC0+bW1jID0gbW1jOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPnNsb3RfbG9jaywgZmxhZ3MpOworCW1tY19vbWFwX3NlbGVjdF9zbG90KHNsb3QsIDEpOworCW1tY19vbWFwX3N0YXJ0X3JlcXVlc3QoaG9zdCwgcmVxKTsKIH0KIAotLyoKLSAqIFR1cm4gdGhlIHNvY2tldCBwb3dlciBvbi9vZmYuIElubm92YXRvciB1c2VzIEZQR0EsIG1vc3QgYm9hcmRzCi0gKiBwcm9iYWJseSB1c2UgR1BJTy4KLSAqLwotc3RhdGljIHZvaWQgbW1jX29tYXBfcG93ZXIoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIGludCBvbikKK3N0YXRpYyB2b2lkIG1tY19vbWFwX3NldF9wb3dlcihzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCwgaW50IHBvd2VyX29uLAorCQkJCWludCB2ZGQpCiB7Ci0JaWYgKG9uKSB7Ci0JCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpCi0JCQlpbm5vdmF0b3JfZnBnYV9zb2NrZXRfcG93ZXIoMSk7Ci0JCWVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9oMigpKQotCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU8zLCBISUdIKTsKLQkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX2gzKCkpCi0JCQkvKiBHUElPIDQgb2YgVFBTNjUwMTAgc2VuZHMgU0RfRU4gc2lnbmFsICovCi0JCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzQsIEhJR0gpOwotCQllbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQkJdTE2IHJlZyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgQ09OKTsKLQkJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIENPTiwgcmVnIHwgKDEgPDwgMTEpKTsKLQkJfSBlbHNlCi0JCQlpZiAoaG9zdC0+cG93ZXJfcGluID49IDApCi0JCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGhvc3QtPnBvd2VyX3BpbiwgMSk7Ci0JfSBlbHNlIHsKLQkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkKLQkJCWlubm92YXRvcl9mcGdhX3NvY2tldF9wb3dlcigwKTsKLQkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX2gyKCkpCi0JCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzMsIExPVyk7Ci0JCWVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9oMygpKQotCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU80LCBMT1cpOwotCQllbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQkJdTE2IHJlZyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgQ09OKTsKLQkJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIENPTiwgcmVnICYgfigxIDw8IDExKSk7Ci0JCX0gZWxzZQotCQkJaWYgKGhvc3QtPnBvd2VyX3BpbiA+PSAwKQotCQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChob3N0LT5wb3dlcl9waW4sIDApOworCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0OworCisJaG9zdCA9IHNsb3QtPmhvc3Q7CisKKwlpZiAoc2xvdC0+cGRhdGEtPnNldF9wb3dlciAhPSBOVUxMKQorCQlzbG90LT5wZGF0YS0+c2V0X3Bvd2VyKG1tY19kZXYoc2xvdC0+bW1jKSwgc2xvdC0+aWQsIHBvd2VyX29uLAorCQkJCQl2ZGQpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXUxNiB3OworCisJCWlmIChwb3dlcl9vbikgeworCQkJdyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgQ09OKTsKKwkJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIENPTiwgdyB8ICgxIDw8IDExKSk7CisJCX0gZWxzZSB7CisJCQl3ID0gT01BUF9NTUNfUkVBRChob3N0LCBDT04pOworCQkJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ09OLCB3ICYgfigxIDw8IDExKSk7CisJCX0KIAl9CiB9CiAKIHN0YXRpYyBpbnQgbW1jX29tYXBfY2FsY19kaXZpc29yKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBzbG90LT5ob3N0OwogCWludCBmdW5jX2Nsa19yYXRlID0gY2xrX2dldF9yYXRlKGhvc3QtPmZjbGspOwogCWludCBkc29yOwogCkBAIC05MzYsNyArMTIyMiw4IEBACiAKIAlpZiAoZHNvciA+IDI1MCkKIAkJZHNvciA9IDI1MDsKLQlkc29yKys7CisKKwlzbG90LT5mY2xrX2ZyZXEgPSBmdW5jX2Nsa19yYXRlIC8gZHNvcjsKIAogCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCiAJCWRzb3IgfD0gMSA8PCAxNTsKQEAgLTk0NiwyOCArMTIzMyw0MCBAQAogCiBzdGF0aWMgdm9pZCBtbWNfb21hcF9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLQlpbnQgZHNvcjsKLQlpbnQgaTsKKwlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBzbG90LT5ob3N0OworCWludCBpLCBkc29yOworCWludCBjbGtfZW5hYmxlZDsKKworCW1tY19vbWFwX3NlbGVjdF9zbG90KHNsb3QsIDApOwogCiAJZHNvciA9IG1tY19vbWFwX2NhbGNfZGl2aXNvcihtbWMsIGlvcyk7Ci0JaG9zdC0+YnVzX21vZGUgPSBpb3MtPmJ1c19tb2RlOwotCWhvc3QtPmh3X2J1c19tb2RlID0gaG9zdC0+YnVzX21vZGU7CiAKKwlpZiAoaW9zLT52ZGQgIT0gc2xvdC0+dmRkKQorCQlzbG90LT52ZGQgPSBpb3MtPnZkZDsKKworCWNsa19lbmFibGVkID0gMDsKIAlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCWNhc2UgTU1DX1BPV0VSX09GRjoKLQkJbW1jX29tYXBfcG93ZXIoaG9zdCwgMCk7CisJCW1tY19vbWFwX3NldF9wb3dlcihzbG90LCAwLCBpb3MtPnZkZCk7CiAJCWJyZWFrOwogCWNhc2UgTU1DX1BPV0VSX1VQOgogCQkvKiBDYW5ub3QgdG91Y2ggZHNvciB5ZXQsIGp1c3QgcG93ZXIgdXAgTU1DICovCi0JCW1tY19vbWFwX3Bvd2VyKGhvc3QsIDEpOwotCQlyZXR1cm47CisJCW1tY19vbWFwX3NldF9wb3dlcihzbG90LCAxLCBpb3MtPnZkZCk7CisJCWdvdG8gZXhpdDsKIAljYXNlIE1NQ19QT1dFUl9PTjoKKwkJbW1jX29tYXBfZmNsa19lbmFibGUoaG9zdCwgMSk7CisJCWNsa19lbmFibGVkID0gMTsKIAkJZHNvciB8PSAxIDw8IDExOwogCQlicmVhazsKIAl9CiAKLQljbGtfZW5hYmxlKGhvc3QtPmZjbGspOworCWlmIChzbG90LT5idXNfbW9kZSAhPSBpb3MtPmJ1c19tb2RlKSB7CisJCWlmIChzbG90LT5wZGF0YS0+c2V0X2J1c19tb2RlICE9IE5VTEwpCisJCQlzbG90LT5wZGF0YS0+c2V0X2J1c19tb2RlKG1tY19kZXYobW1jKSwgc2xvdC0+aWQsCisJCQkJCQkgIGlvcy0+YnVzX21vZGUpOworCQlzbG90LT5idXNfbW9kZSA9IGlvcy0+YnVzX21vZGU7CisJfQogCiAJLyogT24gaW5zYW5lbHkgaGlnaCBhcm1fcGVyIGZyZXF1ZW5jaWVzIHNvbWV0aGluZyBzb21ldGltZXMKIAkgKiBnb2VzIHNvbWVob3cgb3V0IG9mIHN5bmMsIGFuZCB0aGUgUE9XIGJpdCBpcyBub3QgYmVpbmcgc2V0LApAQCAtOTc1LDQzICsxMjc0LDE0MyBAQAogCSAqIFdyaXRpbmcgdG8gdGhlIENPTiByZWdpc3RlciB0d2ljZSBzZWVtcyB0byBkbyB0aGUgdHJpY2suICovCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ09OLCBkc29yKTsKKwlzbG90LT5zYXZlZF9jb24gPSBkc29yOwogCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09OKSB7CisJCS8qIHdvcnN0IGNhc2UgYXQgNDAwa0h6LCA4MCBjeWNsZXMgbWFrZXMgMjAwIG1pY3Jvc2VjcyAqLworCQlpbnQgdXNlY3MgPSAyNTA7CisKIAkJLyogU2VuZCBjbG9jayBjeWNsZXMsIHBvbGwgY29tcGxldGlvbiAqLwogCQlPTUFQX01NQ19XUklURShob3N0LCBJRSwgMCk7CiAJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIFNUQVQsIDB4ZmZmZik7CiAJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIENNRCwgMSA8PCA3KTsKLQkJd2hpbGUgKChPTUFQX01NQ19SRUFEKGhvc3QsIFNUQVQpICYgMSkgPT0gMCk7CisJCXdoaWxlICh1c2VjcyA+IDAgJiYgKE9NQVBfTU1DX1JFQUQoaG9zdCwgU1RBVCkgJiAxKSA9PSAwKSB7CisJCQl1ZGVsYXkoMSk7CisJCQl1c2Vjcy0tOworCQl9CiAJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIFNUQVQsIDEpOwogCX0KLQljbGtfZGlzYWJsZShob3N0LT5mY2xrKTsKLX0KIAotc3RhdGljIGludCBtbWNfb21hcF9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCi17Ci0Jc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCi0JcmV0dXJuIGhvc3QtPndwX3BpbiAmJiBvbWFwX2dldF9ncGlvX2RhdGFpbihob3N0LT53cF9waW4pOworZXhpdDoKKwltbWNfb21hcF9yZWxlYXNlX3Nsb3Qoc2xvdCwgY2xrX2VuYWJsZWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtbWNfb21hcF9vcHMgPSB7CiAJLnJlcXVlc3QJPSBtbWNfb21hcF9yZXF1ZXN0LAogCS5zZXRfaW9zCT0gbW1jX29tYXBfc2V0X2lvcywKLQkuZ2V0X3JvCQk9IG1tY19vbWFwX2dldF9ybywKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IG1tY19vbWFwX25ld19zbG90KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBpbnQgaWQpCit7CisJc3RydWN0IG1tY19vbWFwX3Nsb3QgKnNsb3QgPSBOVUxMOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCWludCByOworCisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtbWNfb21hcF9zbG90KSwgaG9zdC0+ZGV2KTsKKwlpZiAobW1jID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc2xvdCA9IG1tY19wcml2KG1tYyk7CisJc2xvdC0+aG9zdCA9IGhvc3Q7CisJc2xvdC0+bW1jID0gbW1jOworCXNsb3QtPmlkID0gaWQ7CisJc2xvdC0+cGRhdGEgPSAmaG9zdC0+cGRhdGEtPnNsb3RzW2lkXTsKKworCWhvc3QtPnNsb3RzW2lkXSA9IHNsb3Q7CisKKwltbWMtPmNhcHMgPSBNTUNfQ0FQX01VTFRJV1JJVEU7CisJaWYgKGhvc3QtPnBkYXRhLT5jb25mLndpcmU0KQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOworCisJbW1jLT5vcHMgPSAmbW1jX29tYXBfb3BzOworCW1tYy0+Zl9taW4gPSA0MDAwMDA7CisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpCisJCW1tYy0+Zl9tYXggPSA0ODAwMDAwMDsKKwllbHNlCisJCW1tYy0+Zl9tYXggPSAyNDAwMDAwMDsKKwlpZiAoaG9zdC0+cGRhdGEtPm1heF9mcmVxKQorCQltbWMtPmZfbWF4ID0gbWluKGhvc3QtPnBkYXRhLT5tYXhfZnJlcSwgbW1jLT5mX21heCk7CisJbW1jLT5vY3JfYXZhaWwgPSBzbG90LT5wZGF0YS0+b2NyX21hc2s7CisKKwkvKiBVc2Ugc2NhdHRlcmxpc3QgRE1BIHRvIHJlZHVjZSBwZXItdHJhbnNmZXIgY29zdHMuCisJICogTk9URSBtYXhfc2VnX3NpemUgYXNzdW1wdGlvbiB0aGF0IHNtYWxsIGJsb2NrcyBhcmVuJ3QKKwkgKiBub3JtYWxseSB1c2VkIChleGNlcHQgZS5nLiBmb3IgcmVhZGluZyBTRCByZWdpc3RlcnMpLgorCSAqLworCW1tYy0+bWF4X3BoeXNfc2VncyA9IDMyOworCW1tYy0+bWF4X2h3X3NlZ3MgPSAzMjsKKwltbWMtPm1heF9ibGtfc2l6ZSA9IDIwNDg7CS8qIEJMRU4gaXMgMTEgYml0cyAoKzEpICovCisJbW1jLT5tYXhfYmxrX2NvdW50ID0gMjA0ODsJLyogTkJMSyBpcyAxMSBiaXRzICgrMSkgKi8KKwltbWMtPm1heF9yZXFfc2l6ZSA9IG1tYy0+bWF4X2Jsa19zaXplICogbW1jLT5tYXhfYmxrX2NvdW50OworCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfcmVxX3NpemU7CisKKwlyID0gbW1jX2FkZF9ob3N0KG1tYyk7CisJaWYgKHIgPCAwKQorCQlnb3RvIGVycl9yZW1vdmVfaG9zdDsKKworCWlmIChzbG90LT5wZGF0YS0+bmFtZSAhPSBOVUxMKSB7CisJCXIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LAorCQkJCQkmZGV2X2F0dHJfc2xvdF9uYW1lKTsKKwkJaWYgKHIgPCAwKQorCQkJZ290byBlcnJfcmVtb3ZlX2hvc3Q7CisJfQorCisJaWYgKHNsb3QtPnBkYXRhLT5nZXRfY292ZXJfc3RhdGUgIT0gTlVMTCkgeworCQlyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZtbWMtPmNsYXNzX2RldiwKKwkJCQkJJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7CisJCWlmIChyIDwgMCkKKwkJCWdvdG8gZXJyX3JlbW92ZV9zbG90X25hbWU7CisKKwkJc2V0dXBfdGltZXIoJnNsb3QtPmNvdmVyX3RpbWVyLCBtbWNfb21hcF9jb3Zlcl90aW1lciwKKwkJCSAgICAodW5zaWduZWQgbG9uZylzbG90KTsKKwkJdGFza2xldF9pbml0KCZzbG90LT5jb3Zlcl90YXNrbGV0LCBtbWNfb21hcF9jb3Zlcl9oYW5kbGVyLAorCQkJICAgICAodW5zaWduZWQgbG9uZylzbG90KTsKKwkJdGFza2xldF9zY2hlZHVsZSgmc2xvdC0+Y292ZXJfdGFza2xldCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZW1vdmVfc2xvdF9uYW1lOgorCWlmIChzbG90LT5wZGF0YS0+bmFtZSAhPSBOVUxMKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1tYy0+Y2xhc3NfZGV2LCAmZGV2X2F0dHJfc2xvdF9uYW1lKTsKK2Vycl9yZW1vdmVfaG9zdDoKKwltbWNfcmVtb3ZlX2hvc3QobW1jKTsKKwltbWNfZnJlZV9ob3N0KG1tYyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19vbWFwX3JlbW92ZV9zbG90KHN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90KQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gc2xvdC0+bW1jOworCisJaWYgKHNsb3QtPnBkYXRhLT5uYW1lICE9IE5VTEwpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmbW1jLT5jbGFzc19kZXYsICZkZXZfYXR0cl9zbG90X25hbWUpOworCWlmIChzbG90LT5wZGF0YS0+Z2V0X2NvdmVyX3N0YXRlICE9IE5VTEwpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmbW1jLT5jbGFzc19kZXYsICZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOworCisJdGFza2xldF9raWxsKCZzbG90LT5jb3Zlcl90YXNrbGV0KTsKKwlkZWxfdGltZXJfc3luYygmc2xvdC0+Y292ZXJfdGltZXIpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwltbWNfcmVtb3ZlX2hvc3QobW1jKTsKKwltbWNfZnJlZV9ob3N0KG1tYyk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IG1tY19vbWFwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG9tYXBfbW1jX2NvbmYgKm1pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWM7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCByZXQgPSAwOworCWludCBpLCByZXQgPSAwOwogCWludCBpcnE7CiAKLQlpZiAobWluZm8gPT0gTlVMTCkgeworCWlmIChwZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtIGRhdGEgbWlzc2luZ1xuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQorCWlmIChwZGF0YS0+bnJfc2xvdHMgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBzbG90c1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtMTAxOSwyOCArMTQxOCw0NiBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkgICAgICAgICBwZGV2LT5uYW1lKTsKKwkJCQkgcGRldi0+bmFtZSk7CiAJaWYgKHJlcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtbWNfb21hcF9ob3N0KSwgJnBkZXYtPmRldik7Ci0JaWYgKG1tYyA9PSBOVUxMKSB7CisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNfb21hcF9ob3N0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGhvc3QgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlX21lbV9yZWdpb247CiAJfQogCi0JaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0JaG9zdC0+bW1jID0gbW1jOworCUlOSVRfV09SSygmaG9zdC0+c2xvdF9yZWxlYXNlX3dvcmssIG1tY19vbWFwX3Nsb3RfcmVsZWFzZV93b3JrKTsKKwlJTklUX1dPUksoJmhvc3QtPnNlbmRfc3RvcF93b3JrLCBtbWNfb21hcF9zZW5kX3N0b3Bfd29yayk7CisKKwlJTklUX1dPUksoJmhvc3QtPmNtZF9hYm9ydF93b3JrLCBtbWNfb21hcF9hYm9ydF9jb21tYW5kKTsKKwlzZXR1cF90aW1lcigmaG9zdC0+Y21kX2Fib3J0X3RpbWVyLCBtbWNfb21hcF9jbWRfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgaG9zdCk7CisKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+Y2xrX2xvY2spOworCXNldHVwX3RpbWVyKCZob3N0LT5jbGtfdGltZXIsIG1tY19vbWFwX2Nsa190aW1lciwgKHVuc2lnbmVkIGxvbmcpIGhvc3QpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmRtYV9sb2NrKTsKLQlpbml0X3RpbWVyKCZob3N0LT5kbWFfdGltZXIpOwotCWhvc3QtPmRtYV90aW1lci5mdW5jdGlvbiA9IG1tY19vbWFwX2RtYV90aW1lcjsKLQlob3N0LT5kbWFfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBob3N0OworCXNldHVwX3RpbWVyKCZob3N0LT5kbWFfdGltZXIsIG1tY19vbWFwX2RtYV90aW1lciwgKHVuc2lnbmVkIGxvbmcpIGhvc3QpOworCXNwaW5fbG9ja19pbml0KCZob3N0LT5zbG90X2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhvc3QtPnNsb3Rfd3EpOworCisJaG9zdC0+cGRhdGEgPSBwZGF0YTsKKwlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwogCiAJaG9zdC0+aWQgPSBwZGV2LT5pZDsKIAlob3N0LT5tZW1fcmVzID0gcmVzOwogCWhvc3QtPmlycSA9IGlycTsKIAorCWhvc3QtPnVzZV9kbWEgPSAxOworCWhvc3QtPmRtYV9jaCA9IC0xOworCisJaG9zdC0+aXJxID0gaXJxOworCWhvc3QtPnBoeXNfYmFzZSA9IGhvc3QtPm1lbV9yZXMtPnN0YXJ0OworCWhvc3QtPnZpcnRfYmFzZSA9ICh2b2lkIF9faW9tZW0gKikgSU9fQUREUkVTUyhob3N0LT5waHlzX2Jhc2UpOworCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNfaWNrIik7CiAJCWlmIChJU19FUlIoaG9zdC0+aWNsaykpCkBAIC0xMDU4LDEwOSArMTQ3NSwzNCBAQAogCQlnb3RvIGVycl9mcmVlX2ljbGs7CiAJfQogCi0JLyogUkVWSVNJVDoKLQkgKiBBbHNvLCB1c2UgbWluZm8tPmNvdmVyIHRvIGRlY2lkZSBob3cgdG8gbWFuYWdlCi0JICogdGhlIGNhcmQgZGV0ZWN0IHNlbnNpbmcuCi0JICovCi0JaG9zdC0+cG93ZXJfcGluID0gbWluZm8tPnBvd2VyX3BpbjsKLQlob3N0LT5zd2l0Y2hfcGluID0gbWluZm8tPnN3aXRjaF9waW47Ci0JaG9zdC0+d3BfcGluID0gbWluZm8tPndwX3BpbjsKLQlob3N0LT51c2VfZG1hID0gMTsKLQlob3N0LT5kbWFfY2ggPSAtMTsKLQotCWhvc3QtPmlycSA9IGlycTsKLQlob3N0LT5waHlzX2Jhc2UgPSBob3N0LT5tZW1fcmVzLT5zdGFydDsKLQlob3N0LT52aXJ0X2Jhc2UgPSAodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoaG9zdC0+cGh5c19iYXNlKTsKLQotCW1tYy0+b3BzID0gJm1tY19vbWFwX29wczsKLQltbWMtPmZfbWluID0gNDAwMDAwOwotCW1tYy0+Zl9tYXggPSAyNDAwMDAwMDsKLQltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OwotCW1tYy0+Y2FwcyA9IE1NQ19DQVBfTVVMVElXUklURSB8IE1NQ19DQVBfQllURUJMT0NLOwotCi0JaWYgKG1pbmZvLT53aXJlNCkKLQkJIG1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7Ci0KLQkvKiBVc2Ugc2NhdHRlcmxpc3QgRE1BIHRvIHJlZHVjZSBwZXItdHJhbnNmZXIgY29zdHMuCi0JICogTk9URSBtYXhfc2VnX3NpemUgYXNzdW1wdGlvbiB0aGF0IHNtYWxsIGJsb2NrcyBhcmVuJ3QKLQkgKiBub3JtYWxseSB1c2VkIChleGNlcHQgZS5nLiBmb3IgcmVhZGluZyBTRCByZWdpc3RlcnMpLgotCSAqLwotCW1tYy0+bWF4X3BoeXNfc2VncyA9IDMyOwotCW1tYy0+bWF4X2h3X3NlZ3MgPSAzMjsKLQltbWMtPm1heF9ibGtfc2l6ZSA9IDIwNDg7CS8qIEJMRU4gaXMgMTEgYml0cyAoKzEpICovCi0JbW1jLT5tYXhfYmxrX2NvdW50ID0gMjA0ODsJLyogTkJMSyBpcyAxMSBiaXRzICgrMSkgKi8KLQltbWMtPm1heF9yZXFfc2l6ZSA9IG1tYy0+bWF4X2Jsa19zaXplICogbW1jLT5tYXhfYmxrX2NvdW50OwotCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfcmVxX3NpemU7Ci0KLQlpZiAoaG9zdC0+cG93ZXJfcGluID49IDApIHsKLQkJaWYgKChyZXQgPSBvbWFwX3JlcXVlc3RfZ3Bpbyhob3N0LT5wb3dlcl9waW4pKSAhPSAwKSB7Ci0JCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJCQkiVW5hYmxlIHRvIGdldCBHUElPIHBpbiBmb3IgTU1DIHBvd2VyXG4iKTsKLQkJCWdvdG8gZXJyX2ZyZWVfZmNsazsKLQkJfQotCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihob3N0LT5wb3dlcl9waW4sIDApOwotCX0KLQogCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgbW1jX29tYXBfaXJxLCAwLCBEUklWRVJfTkFNRSwgaG9zdCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV9wb3dlcl9ncGlvOworCQlnb3RvIGVycl9mcmVlX2ZjbGs7CiAKLQlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwotCi0JaWYgKGhvc3QtPnN3aXRjaF9waW4gPj0gMCkgewotCQlJTklUX1dPUksoJmhvc3QtPnN3aXRjaF93b3JrLCBtbWNfb21hcF9zd2l0Y2hfaGFuZGxlcik7Ci0JCWluaXRfdGltZXIoJmhvc3QtPnN3aXRjaF90aW1lcik7Ci0JCWhvc3QtPnN3aXRjaF90aW1lci5mdW5jdGlvbiA9IG1tY19vbWFwX3N3aXRjaF90aW1lcjsKLQkJaG9zdC0+c3dpdGNoX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaG9zdDsKLQkJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKGhvc3QtPnN3aXRjaF9waW4pICE9IDApIHsKLQkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVuYWJsZSB0byBnZXQgR1BJTyBwaW4gZm9yIE1NQyBjb3ZlciBzd2l0Y2hcbiIpOwotCQkJaG9zdC0+c3dpdGNoX3BpbiA9IC0xOwotCQkJZ290byBub19zd2l0Y2g7Ci0JCX0KLQotCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihob3N0LT5zd2l0Y2hfcGluLCAxKTsKLQkJcmV0ID0gcmVxdWVzdF9pcnEoT01BUF9HUElPX0lSUShob3N0LT5zd2l0Y2hfcGluKSwKLQkJCQkgIG1tY19vbWFwX3N3aXRjaF9pcnEsIElSUUZfVFJJR0dFUl9SSVNJTkcsIERSSVZFUl9OQU1FLCBob3N0KTsKLQkJaWYgKHJldCkgewotCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiVW5hYmxlIHRvIGdldCBJUlEgZm9yIE1NQyBjb3ZlciBzd2l0Y2hcbiIpOwotCQkJb21hcF9mcmVlX2dwaW8oaG9zdC0+c3dpdGNoX3Bpbik7Ci0JCQlob3N0LT5zd2l0Y2hfcGluID0gLTE7Ci0JCQlnb3RvIG5vX3N3aXRjaDsKLQkJfQotCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7Ci0JCWlmIChyZXQgPT0gMCkgewotCQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVfcG9sbCk7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOwotCQl9Ci0JCWlmIChyZXQpIHsKLQkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVuYWJsZSB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlc1xuIik7Ci0JCQlmcmVlX2lycShPTUFQX0dQSU9fSVJRKGhvc3QtPnN3aXRjaF9waW4pLCBob3N0KTsKLQkJCW9tYXBfZnJlZV9ncGlvKGhvc3QtPnN3aXRjaF9waW4pOwotCQkJaG9zdC0+c3dpdGNoX3BpbiA9IC0xOwotCQkJZ290byBub19zd2l0Y2g7Ci0JCX0KLQkJaWYgKG1tY19vbWFwX2VuYWJsZV9wb2xsICYmIG1tY19vbWFwX2NvdmVyX2lzX29wZW4oaG9zdCkpCi0JCQlzY2hlZHVsZV93b3JrKCZob3N0LT5zd2l0Y2hfd29yayk7CisJaWYgKHBkYXRhLT5pbml0ICE9IE5VTEwpIHsKKwkJcmV0ID0gcGRhdGEtPmluaXQoJnBkZXYtPmRldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCi0JbW1jX2FkZF9ob3N0KG1tYyk7CisJaG9zdC0+bnJfc2xvdHMgPSBwZGF0YS0+bnJfc2xvdHM7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ucl9zbG90czsgaSsrKSB7CisJCXJldCA9IG1tY19vbWFwX25ld19zbG90KGhvc3QsIGkpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2hpbGUgKC0taSA+PSAwKQorCQkJCW1tY19vbWFwX3JlbW92ZV9zbG90KGhvc3QtPnNsb3RzW2ldKTsKKworCQkJZ290byBlcnJfcGxhdF9jbGVhbnVwOworCQl9CisJfQogCiAJcmV0dXJuIDA7CiAKLW5vX3N3aXRjaDoKLQkvKiBGSVhNRTogRnJlZSBvdGhlciByZXNvdXJjZXMgdG9vLiAqLwotCWlmIChob3N0KSB7Ci0JCWlmIChob3N0LT5pY2xrICYmICFJU19FUlIoaG9zdC0+aWNsaykpCi0JCQljbGtfcHV0KGhvc3QtPmljbGspOwotCQlpZiAoaG9zdC0+ZmNsayAmJiAhSVNfRVJSKGhvc3QtPmZjbGspKQotCQkJY2xrX3B1dChob3N0LT5mY2xrKTsKLQkJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOwotCX0KLWVycl9mcmVlX3Bvd2VyX2dwaW86Ci0JaWYgKGhvc3QtPnBvd2VyX3BpbiA+PSAwKQotCQlvbWFwX2ZyZWVfZ3Bpbyhob3N0LT5wb3dlcl9waW4pOworZXJyX3BsYXRfY2xlYW51cDoKKwlpZiAocGRhdGEtPmNsZWFudXApCisJCXBkYXRhLT5jbGVhbnVwKCZwZGV2LT5kZXYpOworZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiBlcnJfZnJlZV9mY2xrOgogCWNsa19wdXQoaG9zdC0+ZmNsayk7CiBlcnJfZnJlZV9pY2xrOgpAQCAtMTE2OSw3ICsxNTExLDcgQEAKIAkJY2xrX3B1dChob3N0LT5pY2xrKTsKIAl9CiBlcnJfZnJlZV9tbWNfaG9zdDoKLQltbWNfZnJlZV9ob3N0KGhvc3QtPm1tYyk7CisJa2ZyZWUoaG9zdCk7CiBlcnJfZnJlZV9tZW1fcmVnaW9uOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTE3OCwyNSArMTUyMCwxOCBAQAogc3RhdGljIGludCBtbWNfb21hcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlCVUdfT04oaG9zdCA9PSBOVUxMKTsKIAotCW1tY19yZW1vdmVfaG9zdChob3N0LT5tbWMpOwotCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5yX3Nsb3RzOyBpKyspCisJCW1tY19vbWFwX3JlbW92ZV9zbG90KGhvc3QtPnNsb3RzW2ldKTsKIAotCWlmIChob3N0LT5wb3dlcl9waW4gPj0gMCkKLQkJb21hcF9mcmVlX2dwaW8oaG9zdC0+cG93ZXJfcGluKTsKLQlpZiAoaG9zdC0+c3dpdGNoX3BpbiA+PSAwKSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlX3BvbGwpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7Ci0JCWZyZWVfaXJxKE9NQVBfR1BJT19JUlEoaG9zdC0+c3dpdGNoX3BpbiksIGhvc3QpOwotCQlvbWFwX2ZyZWVfZ3Bpbyhob3N0LT5zd2l0Y2hfcGluKTsKLQkJaG9zdC0+c3dpdGNoX3BpbiA9IC0xOwotCQlkZWxfdGltZXJfc3luYygmaG9zdC0+c3dpdGNoX3RpbWVyKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9CisJaWYgKGhvc3QtPnBkYXRhLT5jbGVhbnVwKQorCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKKwogCWlmIChob3N0LT5pY2xrICYmICFJU19FUlIoaG9zdC0+aWNsaykpCiAJCWNsa19wdXQoaG9zdC0+aWNsayk7CiAJaWYgKGhvc3QtPmZjbGsgJiYgIUlTX0VSUihob3N0LT5mY2xrKSkKQEAgLTEyMDUsNyArMTU0MCw3IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAogCQkJICAgcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKIAotCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKKwlrZnJlZShob3N0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxMywzNSArMTU0OCw0NyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBtbWNfb21hcF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCWludCByZXQgPSAwOworCWludCBpLCByZXQgPSAwOwogCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlpZiAoaG9zdCAmJiBob3N0LT5zdXNwZW5kZWQpCisJaWYgKGhvc3QgPT0gTlVMTCB8fCBob3N0LT5zdXNwZW5kZWQpCiAJCXJldHVybiAwOwogCi0JaWYgKGhvc3QpIHsKLQkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChob3N0LT5tbWMsIG1lc2cpOwotCQlpZiAocmV0ID09IDApCi0JCQlob3N0LT5zdXNwZW5kZWQgPSAxOworCWZvciAoaSA9IDA7IGkgPCBob3N0LT5ucl9zbG90czsgaSsrKSB7CisJCXN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90OworCisJCXNsb3QgPSBob3N0LT5zbG90c1tpXTsKKwkJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChzbG90LT5tbWMsIG1lc2cpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2hpbGUgKC0taSA+PSAwKSB7CisJCQkJc2xvdCA9IGhvc3QtPnNsb3RzW2ldOworCQkJCW1tY19yZXN1bWVfaG9zdChzbG90LT5tbWMpOworCQkJfQorCQkJcmV0dXJuIHJldDsKKwkJfQogCX0KLQlyZXR1cm4gcmV0OworCWhvc3QtPnN1c3BlbmRlZCA9IDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbW1jX29tYXBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IHJldCA9IDA7CisJaW50IGksIHJldCA9IDA7CiAJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWlmIChob3N0ICYmICFob3N0LT5zdXNwZW5kZWQpCisJaWYgKGhvc3QgPT0gTlVMTCB8fCAhaG9zdC0+c3VzcGVuZGVkKQogCQlyZXR1cm4gMDsKIAotCWlmIChob3N0KSB7Ci0JCXJldCA9IG1tY19yZXN1bWVfaG9zdChob3N0LT5tbWMpOwotCQlpZiAocmV0ID09IDApCi0JCQlob3N0LT5zdXNwZW5kZWQgPSAwOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bnJfc2xvdHM7IGkrKykgeworCQlzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdDsKKwkJc2xvdCA9IGhvc3QtPnNsb3RzW2ldOworCQlyZXQgPSBtbWNfcmVzdW1lX2hvc3Qoc2xvdC0+bW1jKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIHJldDsKKwkJaG9zdC0+c3VzcGVuZGVkID0gMDsKKwl9CisJcmV0dXJuIDA7CiB9CiAjZWxzZQogI2RlZmluZSBtbWNfb21hcF9zdXNwZW5kCU5VTEwKQEAgLTEyNTUsNiArMTYwMiw3IEBACiAJLnJlc3VtZQkJPSBtbWNfb21hcF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xMjczLDUgKzE2MjEsNSBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAgTXVsdGltZWRpYSBDYXJkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTKERSSVZFUl9OQU1FKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUklWRVJfTkFNRSk7CiBNT0RVTEVfQVVUSE9SKCJKdWhhIFlyavZs5CIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKaW5kZXggMWVhODQ4Mi4uNjUyMTBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCkBAIC02OTMsNiArNjkzLDcgQEAKIAkucmVzdW1lCQk9IHB4YW1jaV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC03MTEsMyArNzEyLDQgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQWEEgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cHhhMnh4LW1jaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IDRiNjczYWEuLjA3YzIwNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYyAtIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFBpZXJyZSBPc3NtYW4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUGllcnJlIE9zc21hbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCiAjaW5jbHVkZSAic2RoY2kuaCIKQEAgLTMwLDEwICszMiw2IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdfcXVpcmtzID0gMDsKIAotLyogRm9yIG11bHRpIGNvbnRyb2xsZXJzIGluIG9uZSBwbGF0Zm9ybSBjYXNlICovCi1zdGF0aWMgdTE2IGNoaXBfaW5kZXggPSAwOwotc3RhdGljIHNwaW5sb2NrX3QgaW5kZXhfbG9jazsKLQogLyoKICAqIERpZmZlcmVudCBxdWlya3MgdG8gaGFuZGxlIHdoZW4gdGhlIGhhcmR3YXJlIGRldmlhdGVzIGZyb20gYSBzdHJpY3QKICAqIGludGVycHJldGF0aW9uIG9mIHRoZSBTREhDSSBzcGVjaWZpY2F0aW9uLgpAQCAtNDMsNyArNDEsNyBAQAogI2RlZmluZSBTREhDSV9RVUlSS19DTE9DS19CRUZPUkVfUkVTRVQJCQkoMTw8MCkKIC8qIENvbnRyb2xsZXIgaGFzIGJhZCBjYXBzIGJpdHMsIGJ1dCByZWFsbHkgc3VwcG9ydHMgRE1BICovCiAjZGVmaW5lIFNESENJX1FVSVJLX0ZPUkNFX0RNQQkJCQkoMTw8MSkKLS8qIENvbnRyb2xsZXIgZG9lc24ndCBsaWtlIHNvbWUgcmVzZXRzIHdoZW4gdGhlcmUgaXMgbm8gY2FyZCBpbnNlcnRlZC4gKi8KKy8qIENvbnRyb2xsZXIgZG9lc24ndCBsaWtlIHRvIGJlIHJlc2V0IHdoZW4gdGhlcmUgaXMgbm8gY2FyZCBpbnNlcnRlZC4gKi8KICNkZWZpbmUgU0RIQ0lfUVVJUktfTk9fQ0FSRF9OT19SRVNFVAkJCSgxPDwyKQogLyogQ29udHJvbGxlciBkb2Vzbid0IGxpa2UgY2xlYXJpbmcgdGhlIHBvd2VyIHJlZyBiZWZvcmUgYSBjaGFuZ2UgKi8KICNkZWZpbmUgU0RIQ0lfUVVJUktfU0lOR0xFX1BPV0VSX1dSSVRFCQkJKDE8PDMpCkBAIC03MSwxMyArNjksMjEgQEAKIAl7CiAJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9SSUNPSCwKIAkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1JJQ09IX1I1QzgyMiwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcsCiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAogCQkuZHJpdmVyX2RhdGEJPSBTREhDSV9RVUlSS19GT1JDRV9ETUEgfAogCQkJCSAgU0RIQ0lfUVVJUktfTk9fQ0FSRF9OT19SRVNFVCwKIAl9LAogCiAJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUklDT0gsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MjIsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gU0RIQ0lfUVVJUktfRk9SQ0VfRE1BLAorCX0sCisKKwl7CiAJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9USSwKIAkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMV9TRCwKIAkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCkBAIC0yNTYsNiArMjYyLDI0IEBACiAJd3JpdGViKGN0cmwsIGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworc3RhdGljIHZvaWQgc2RoY2lfbGVkX2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkLAorCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGNvbnRhaW5lcl9vZihsZWQsIHN0cnVjdCBzZGhjaV9ob3N0LCBsZWQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGJyaWdodG5lc3MgPT0gTEVEX09GRikKKwkJc2RoY2lfZGVhY3RpdmF0ZV9sZWQoaG9zdCk7CisJZWxzZQorCQlzZGhjaV9hY3RpdmF0ZV9sZWQoaG9zdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBDb3JlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTc3Myw3ICs3OTcsOSBAQAogCiAJV0FSTl9PTihob3N0LT5tcnEgIT0gTlVMTCk7CiAKKyNpZm5kZWYgQ09ORklHX0xFRFNfQ0xBU1MKIAlzZGhjaV9hY3RpdmF0ZV9sZWQoaG9zdCk7CisjZW5kaWYKIAogCWhvc3QtPm1ycSA9IG1ycTsKIApAQCAtOTY1LDcgKzk5MSw5IEBACiAJaG9zdC0+Y21kID0gTlVMTDsKIAlob3N0LT5kYXRhID0gTlVMTDsKIAorI2lmbmRlZiBDT05GSUdfTEVEU19DTEFTUwogCXNkaGNpX2RlYWN0aXZhdGVfbGVkKGhvc3QpOworI2VuZGlmCiAKIAltbWlvd2IoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CkBAIC0xMTA1LDcgKzExMzMsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlEQkcoIioqKiAlcyBnb3QgaW50ZXJydXB0OiAweCUwOHhcbiIsIGhvc3QtPnNsb3RfZGVzY3IsIGludG1hc2spOworCURCRygiKioqICVzIGdvdCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGludG1hc2spOwogCiAJaWYgKGludG1hc2sgJiAoU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwgU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKSkgewogCQl3cml0ZWwoaW50bWFzayAmIChTREhDSV9JTlRfQ0FSRF9JTlNFUlQgfCBTREhDSV9JTlRfQ0FSRF9SRU1PVkUpLApAQCAtMTIzNSw3ICsxMjY0LDcgQEAKIAkJaWYgKGNoaXAtPmhvc3RzW2ldLT5mbGFncyAmIFNESENJX1VTRV9ETUEpCiAJCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoY2hpcC0+aG9zdHNbaV0tPmlycSwgc2RoY2lfaXJxLAotCQkJSVJRRl9TSEFSRUQsIGNoaXAtPmhvc3RzW2ldLT5zbG90X2Rlc2NyLAorCQkJSVJRRl9TSEFSRUQsIG1tY19ob3N0bmFtZShjaGlwLT5ob3N0c1tpXS0+bW1jKSwKIAkJCWNoaXAtPmhvc3RzW2ldKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC0xMzI0LDkgKzEzNTMsNyBAQAogCiAJREJHKCJzbG90ICVkIGF0IDB4JTA4bHgsIGlycSAlZFxuIiwgc2xvdCwgaG9zdC0+YWRkciwgaG9zdC0+aXJxKTsKIAotCXNucHJpbnRmKGhvc3QtPnNsb3RfZGVzY3IsIDIwLCAic2RoYyVkOnNsb3QlZCIsIGNoaXAtPmluZGV4LCBzbG90KTsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCBob3N0LT5iYXIsIGhvc3QtPnNsb3RfZGVzY3IpOworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCBob3N0LT5iYXIsIG1tY19ob3N0bmFtZShtbWMpKTsKIAlpZiAocmV0KQogCQlnb3RvIGZyZWU7CiAKQEAgLTEzNDMsNyArMTM3MCw3IEBACiAJdmVyc2lvbiA9ICh2ZXJzaW9uICYgU0RIQ0lfU1BFQ19WRVJfTUFTSykgPj4gU0RIQ0lfU1BFQ19WRVJfU0hJRlQ7CiAJaWYgKHZlcnNpb24gPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVua25vd24gY29udHJvbGxlciB2ZXJzaW9uICglZCkuICIKLQkJCSJZb3UgbWF5IGV4cGVyaWVuY2UgcHJvYmxlbXMuXG4iLCBob3N0LT5zbG90X2Rlc2NyLAorCQkJIllvdSBtYXkgZXhwZXJpZW5jZSBwcm9ibGVtcy5cbiIsIG1tY19ob3N0bmFtZShtbWMpLAogCQkJdmVyc2lvbik7CiAJfQogCkBAIC0xMzY2LDEzICsxMzkzLDEzIEBACiAJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBXaWxsIHVzZSBETUEgIgogCQkJIm1vZGUgZXZlbiB0aG91Z2ggSFcgZG9lc24ndCBmdWxseSAiCi0JCQkiY2xhaW0gdG8gc3VwcG9ydCBpdC5cbiIsIGhvc3QtPnNsb3RfZGVzY3IpOworCQkJImNsYWltIHRvIHN1cHBvcnQgaXQuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CiAJfQogCiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkgewogCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLiAiCi0JCQkJIkZhbGxpbmcgYmFjayB0byBQSU8uXG4iLCBob3N0LT5zbG90X2Rlc2NyKTsKKwkJCQkiRmFsbGluZyBiYWNrIHRvIFBJTy5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKIAkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfRE1BOwogCQl9CiAJfQpAQCAtMTM4Niw3ICsxNDEzLDcgQEAKIAkJKGNhcHMgJiBTREhDSV9DTE9DS19CQVNFX01BU0spID4+IFNESENJX0NMT0NLX0JBU0VfU0hJRlQ7CiAJaWYgKGhvc3QtPm1heF9jbGsgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBIYXJkd2FyZSBkb2Vzbid0IHNwZWNpZnkgYmFzZSBjbG9jayAiCi0JCQkiZnJlcXVlbmN5LlxuIiwgaG9zdC0+c2xvdF9kZXNjcik7CisJCQkiZnJlcXVlbmN5LlxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIHVubWFwOwogCX0KQEAgLTEzOTYsNyArMTQyMyw3IEBACiAJCShjYXBzICYgU0RIQ0lfVElNRU9VVF9DTEtfTUFTSykgPj4gU0RIQ0lfVElNRU9VVF9DTEtfU0hJRlQ7CiAJaWYgKGhvc3QtPnRpbWVvdXRfY2xrID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IHRpbWVvdXQgY2xvY2sgIgotCQkJImZyZXF1ZW5jeS5cbiIsIGhvc3QtPnNsb3RfZGVzY3IpOworCQkJImZyZXF1ZW5jeS5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byB1bm1hcDsKIAl9CkBAIC0xNDI0LDcgKzE0NTEsNyBAQAogCiAJaWYgKG1tYy0+b2NyX2F2YWlsID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCByZXBvcnQgYW55ICIKLQkJCSJzdXBwb3J0IHZvbHRhZ2VzLlxuIiwgaG9zdC0+c2xvdF9kZXNjcik7CisJCQkic3VwcG9ydCB2b2x0YWdlcy5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byB1bm1hcDsKIAl9CkBAIC0xNDU4LDggKzE0ODUsOCBAQAogCSAqLwogCW1tYy0+bWF4X2Jsa19zaXplID0gKGNhcHMgJiBTREhDSV9NQVhfQkxPQ0tfTUFTSykgPj4gU0RIQ0lfTUFYX0JMT0NLX1NISUZUOwogCWlmIChtbWMtPm1heF9ibGtfc2l6ZSA+PSAzKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIG1heGltdW0gYmxvY2sgc2l6ZSwgYXNzdW1pbmcgNTEyXG4iLAotCQkJaG9zdC0+c2xvdF9kZXNjcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIG1heGltdW0gYmxvY2sgc2l6ZSwgIgorCQkJImFzc3VtaW5nIDUxMiBieXRlc1xuIiwgbW1jX2hvc3RuYW1lKG1tYykpOwogCQltbWMtPm1heF9ibGtfc2l6ZSA9IDUxMjsKIAl9IGVsc2UKIAkJbW1jLT5tYXhfYmxrX3NpemUgPSA1MTIgPDwgbW1jLT5tYXhfYmxrX3NpemU7CkBAIC0xNDgwLDcgKzE1MDcsNyBAQAogCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgc2RoY2lfdGltZW91dF90aW1lciwgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIHNkaGNpX2lycSwgSVJRRl9TSEFSRUQsCi0JCWhvc3QtPnNsb3RfZGVzY3IsIGhvc3QpOworCQltbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7CiAJaWYgKHJldCkKIAkJZ290byB1bnRhc2tsZXQ7CiAKQEAgLTE0OTAsMTYgKzE1MTcsMzIgQEAKIAlzZGhjaV9kdW1wcmVncyhob3N0KTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKwlob3N0LT5sZWQubmFtZSA9IG1tY19ob3N0bmFtZShtbWMpOworCWhvc3QtPmxlZC5icmlnaHRuZXNzID0gTEVEX09GRjsKKwlob3N0LT5sZWQuZGVmYXVsdF90cmlnZ2VyID0gbW1jX2hvc3RuYW1lKG1tYyk7CisJaG9zdC0+bGVkLmJyaWdodG5lc3Nfc2V0ID0gc2RoY2lfbGVkX2NvbnRyb2w7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmhvc3QtPmxlZCk7CisJaWYgKHJldCkKKwkJZ290byByZXNldDsKKyNlbmRpZgorCiAJbW1pb3diKCk7CiAKIAltbWNfYWRkX2hvc3QobW1jKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBTREhDSSBhdCAweCUwOGx4IGlycSAlZCAlc1xuIiwgbW1jX2hvc3RuYW1lKG1tYyksCi0JCWhvc3QtPmFkZHIsIGhvc3QtPmlycSwKKwlwcmludGsoS0VSTl9JTkZPICIlczogU0RIQ0kgYXQgMHglMDhseCBpcnEgJWQgJXNcbiIsCisJCW1tY19ob3N0bmFtZShtbWMpLCBob3N0LT5hZGRyLCBob3N0LT5pcnEsCiAJCShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpPyJETUEiOiJQSU8iKTsKIAogCXJldHVybiAwOwogCisjaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKK3Jlc2V0OgorCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0FMTCk7CisJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKKyNlbmRpZgogdW50YXNrbGV0OgogCXRhc2tsZXRfa2lsbCgmaG9zdC0+Y2FyZF90YXNrbGV0KTsKIAl0YXNrbGV0X2tpbGwoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKQEAgLTE1MjcsNiArMTU3MCwxMCBAQAogCiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAKKyNpZmRlZiBDT05GSUdfTEVEU19DTEFTUworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZob3N0LT5sZWQpOworI2VuZGlmCisKIAlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9BTEwpOwogCiAJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKQEAgLTE1ODksMTEgKzE2MzYsNiBAQAogCWNoaXAtPm51bV9zbG90cyA9IHNsb3RzOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKIAotCS8qIEFkZCBmb3IgbXVsdGkgY29udHJvbGxlciBjYXNlICovCi0Jc3Bpbl9sb2NrKCZpbmRleF9sb2NrKTsKLQljaGlwLT5pbmRleCA9IGNoaXBfaW5kZXgrKzsKLQlzcGluX3VubG9jaygmaW5kZXhfbG9jayk7Ci0KIAlmb3IgKGkgPSAwO2kgPCBzbG90cztpKyspIHsKIAkJcmV0ID0gc2RoY2lfcHJvYmVfc2xvdChwZGV2LCBpKTsKIAkJaWYgKHJldCkgewpAQCAtMTY1NCw4ICsxNjk2LDYgQEAKIAkJIjogU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXJcbiIpOwogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogQ29weXJpZ2h0KGMpIFBpZXJyZSBPc3NtYW5cbiIpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmluZGV4X2xvY2spOwotCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNkaGNpX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCBkNWEzOGYxLi43ZmIwMmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBsaW51eC9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmggLSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlcgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBQaWVycmUgT3NzbWFuLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFBpZXJyZSBPc3NtYW4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNjgsNiArMTY4LDEwIEBACiAJc3RydWN0IHNkaGNpX2NoaXAJKmNoaXA7CiAJc3RydWN0IG1tY19ob3N0CQkqbW1jOwkJLyogTU1DIHN0cnVjdHVyZSAqLwogCisjaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2CWxlZDsJCS8qIExFRCBjb250cm9sICovCisjZW5kaWYKKwogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBNdXRleCAqLwogCiAJaW50CQkJZmxhZ3M7CQkvKiBIb3N0IGF0dHJpYnV0ZXMgKi8KQEAgLTE5MCw4ICsxOTQsNiBAQAogCWludAkJCW9mZnNldDsJCS8qIE9mZnNldCBpbnRvIGN1cnJlbnQgc2cgKi8KIAlpbnQJCQlyZW1haW47CQkvKiBCeXRlcyBsZWZ0IGluIGN1cnJlbnQgKi8KIAotCWNoYXIJCQlzbG90X2Rlc2NyWzIwXTsJLyogTmFtZSBmb3IgcmVzZXJ2YXRpb25zICovCi0KIAlpbnQJCQlpcnE7CQkvKiBEZXZpY2UgSVJRICovCiAJaW50CQkJYmFyOwkJLyogUENJIEJBUiBpbmRleCAqLwogCXVuc2lnbmVkIGxvbmcJCWFkZHI7CQkvKiBCdXMgYWRkcmVzcyAqLwpAQCAtMjA4LDcgKzIxMCw2IEBACiAKIAl1bnNpZ25lZCBsb25nCQlxdWlya3M7CiAKLQlpbnQJCQlpbmRleDsJCS8qIEluZGV4IGZvciBjaGlwMCwgY2hpcDEgLi4uKi8KIAlpbnQJCQludW1fc2xvdHM7CS8qIFNsb3RzIG9uIGNvbnRyb2xsZXIgKi8KIAlzdHJ1Y3Qgc2RoY2lfaG9zdAkqaG9zdHNbMF07CS8qIFBvaW50ZXJzIHRvIGhvc3RzICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90aWZtX3NkLmMgYi9kcml2ZXJzL21tYy9ob3N0L3RpZm1fc2QuYwppbmRleCAyMGQ1YzdiLi4xYzE0YTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RpZm1fc2QuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3RpZm1fc2QuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCQlob3N0LT5zZ19wb3MrKzsKIAkJCWlmIChob3N0LT5zZ19wb3MgPT0gaG9zdC0+c2dfbGVuKSB7CiAJCQkJaWYgKChyX2RhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCi0JCQkJICAgICYmIERBVEFfQ0FSUlkpCisJCQkJICAgICYmIChob3N0LT5jbWRfZmxhZ3MgJiBEQVRBX0NBUlJZKSkKIAkJCQkJd3JpdGVsKGhvc3QtPmJvdW5jZV9idWZfZGF0YVswXSwKIAkJCQkJICAgICAgIGhvc3QtPmRldi0+YWRkcgogCQkJCQkgICAgICAgKyBTT0NLX01NQ1NEX0RBVEEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC93YnNkLmMgYi9kcml2ZXJzL21tYy9ob3N0L3dic2QuYwppbmRleCA0ZDVmMzc0Li5iZTYyNGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3dic2QuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3dic2QuYwpAQCAtMTk0OCw2ICsxOTQ4LDcgQEAKIAkucmVzdW1lCQk9IHdic2RfcGxhdGZvcm1fcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwppbmRleCA0Nzc5NGQyLi4wMDgwNDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJCQkvKiBTb21lb25lIGVsc2UgbWlnaHQgaGF2ZSBiZWVuIHBsYXlpbmcgd2l0aCBpdC4gKi8KIAkJCXJldHVybiAtRUFHQUlOOwogCQl9Ci0KKwkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBGTF9SRUFEWToKIAljYXNlIEZMX0NGSV9RVUVSWToKIAljYXNlIEZMX0pFREVDX1FVRVJZOgpAQCAtNzc4LDE0ICs3NzgsMTQgQEAKIAkJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKIAkJcmV0dXJuIDA7CiAKKwljYXNlIEZMX1NIVVRET1dOOgorCQkvKiBUaGUgbWFjaGluZSBpcyByZWJvb3Rpbmcgbm93LHNvIG5vIG9uZSBjYW4gZ2V0IGNoaXAgYW55bW9yZSAqLworCQlyZXR1cm4gLUVJTzsKIAljYXNlIEZMX1BPSU5UOgogCQkvKiBPbmx5IGlmIHRoZXJlJ3Mgbm8gb3BlcmF0aW9uIHN1c3BlbmRlZC4uLiAqLwogCQlpZiAobW9kZSA9PSBGTF9SRUFEWSAmJiBjaGlwLT5vbGRzdGF0ZSA9PSBGTF9SRUFEWSkKIAkJCXJldHVybiAwOwotCi0JY2FzZSBGTF9TSFVURE9XTjoKLQkJLyogVGhlIG1hY2hpbmUgaXMgcmVib290aW5nIG5vdyxzbyBubyBvbmUgY2FuIGdldCBjaGlwIGFueW1vcmUgKi8KLQkJcmV0dXJuIC1FSU87CisJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CiAJc2xlZXA6CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKaW5kZXggZDA3MmU4Ny4uNDU4ZDQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKQEAgLTE3NjMsNiArMTc2Myw3IEBACiAKIAkJZGVmYXVsdDoKIAkJCS8qIE5vdCBhbiBpZGxlIHN0YXRlICovCisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKIAogCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwppbmRleCBiMzQ0ZmY4Li40OTJlMmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwpAQCAtMTAxNSw2ICsxMDE1LDcgQEAKIAogCQlkZWZhdWx0OgogCQkJLyogTm90IGFuIGlkbGUgc3RhdGUgKi8KKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwogCiAJCQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwppbmRleCBlZWFhYTlkLi5hZDE4ODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKQEAgLTQwOCw3ICs0MDgsNiBAQAogCWlmICh0b2tlblsxXSkgewogCQlyZXQgPSBwYXJzZV9udW0oJmVyYXNlX3NpemUsIHRva2VuWzFdKTsKIAkJaWYgKHJldCkgewotCQkJa2ZyZWUobmFtZSk7CiAJCQlwYXJzZV9lcnIoImlsbGVnYWwgZXJhc2Ugc2l6ZSIpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwppbmRleCBmMDBlMDRlLi5iYzQ2NDlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMKQEAgLTIwMiw5ICsyMDIsOCBAQAogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JaWYgKGluZm8pCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVTT1VSQ0VTOyBpKyspCi0JCQlyZXQgfD0gaW5mby0+bXRkW2ldLT5zdXNwZW5kKGluZm8tPm10ZFtpXSk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9SRVNPVVJDRVMgJiYgaW5mby0+bXRkW2ldOyBpKyspCisJCXJldCB8PSBpbmZvLT5tdGRbaV0tPnN1c3BlbmQoaW5mby0+bXRkW2ldKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTQsOSArMjEzLDkgQEAKIAlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgaTsKIAotCWlmIChpbmZvKQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JFU09VUkNFUzsgaSsrKQotCQkJaW5mby0+bXRkW2ldLT5yZXN1bWUoaW5mby0+bXRkW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1JFU09VUkNFUyAmJiBpbmZvLT5tdGRbaV07IGkrKykKKwkJaW5mby0+bXRkW2ldLT5yZXN1bWUoaW5mby0+bXRkW2ldKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMjUsOCArMjI0LDggQEAKIAlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVTT1VSQ0VTOyBpKyspCi0JCWlmIChpbmZvICYmIGluZm8tPm10ZFtpXS0+c3VzcGVuZChpbmZvLT5tdGRbaV0pID09IDApCisJZm9yIChpID0gMDsgaSA8IE1BWF9SRVNPVVJDRVMgJiYgaW5mby0+bXRkW2ldOyBpKyspCisJCWlmIChpbmZvLT5tdGRbaV0tPnN1c3BlbmQoaW5mby0+bXRkW2ldKSA9PSAwKQogCQkJaW5mby0+bXRkW2ldLT5yZXN1bWUoaW5mby0+bXRkW2ldKTsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggNGEzYzY3NS4uOTU5ZmI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtMzE0LDcgKzMxNCw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9PUklPTgogCXRyaXN0YXRlICJOQU5EIEZsYXNoIHN1cHBvcnQgZm9yIE1hcnZlbGwgT3Jpb24gU29DIgotCWRlcGVuZHMgb24gQVJDSF9PUklPTiAmJiBNVERfTkFORAorCWRlcGVuZHMgb24gUExBVF9PUklPTiAmJiBNVERfTkFORAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIE9yaW9uIG1hY2hpbmVzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCmluZGV4IGIwMjVkZmUuLjM3OGI3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCkBAIC0zNiwyMDcgKzM2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotCisjaW5jbHVkZSA8YXNtL2ZzbF9sYmMuaD4KIAogI2RlZmluZSBNQVhfQkFOS1MgOAogI2RlZmluZSBFUlJfQllURSAweEZGIC8qIFZhbHVlIHJldHVybmVkIGZvciByZWFkIGJ5dGVzIHdoZW4gcmVhZCBmYWlsZWQgKi8KICNkZWZpbmUgRkNNX1RJTUVPVVRfTVNFQ1MgNTAwIC8qIE1heGltdW0gbnVtYmVyIG9mIG1TZWNzIHRvIHdhaXQgZm9yIEZDTSAqLwogCi1zdHJ1Y3QgZWxiY19iYW5rIHsKLQlfX2JlMzIgYnI7ICAgICAgICAgICAgIC8qKjwgQmFzZSBSZWdpc3RlciAgKi8KLSNkZWZpbmUgQlJfQkEgICAgICAgICAgIDB4RkZGRjgwMDAKLSNkZWZpbmUgQlJfQkFfU0hJRlQgICAgICAgICAgICAgMTUKLSNkZWZpbmUgQlJfUFMgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgQlJfUFNfU0hJRlQgICAgICAgICAgICAgMTEKLSNkZWZpbmUgQlJfUFNfOCAgICAgICAgIDB4MDAwMDA4MDAgIC8qIFBvcnQgU2l6ZSA4IGJpdCAqLwotI2RlZmluZSBCUl9QU18xNiAgICAgICAgMHgwMDAwMTAwMCAgLyogUG9ydCBTaXplIDE2IGJpdCAqLwotI2RlZmluZSBCUl9QU18zMiAgICAgICAgMHgwMDAwMTgwMCAgLyogUG9ydCBTaXplIDMyIGJpdCAqLwotI2RlZmluZSBCUl9ERUNDICAgICAgICAgMHgwMDAwMDYwMAotI2RlZmluZSBCUl9ERUNDX1NISUZUICAgICAgICAgICAgOQotI2RlZmluZSBCUl9ERUNDX09GRiAgICAgMHgwMDAwMDAwMCAgLyogSFcgRUNDIGNoZWNraW5nIGFuZCBnZW5lcmF0aW9uIG9mZiAqLwotI2RlZmluZSBCUl9ERUNDX0NISyAgICAgMHgwMDAwMDIwMCAgLyogSFcgRUNDIGNoZWNraW5nIG9uLCBnZW5lcmF0aW9uIG9mZiAqLwotI2RlZmluZSBCUl9ERUNDX0NIS19HRU4gMHgwMDAwMDQwMCAgLyogSFcgRUNDIGNoZWNraW5nIGFuZCBnZW5lcmF0aW9uIG9uICovCi0jZGVmaW5lIEJSX1dQICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIEJSX1dQX1NISUZUICAgICAgICAgICAgICA4Ci0jZGVmaW5lIEJSX01TRUwgICAgICAgICAweDAwMDAwMEUwCi0jZGVmaW5lIEJSX01TRUxfU0hJRlQgICAgICAgICAgICA1Ci0jZGVmaW5lIEJSX01TX0dQQ00gICAgICAweDAwMDAwMDAwICAvKiBHUENNICovCi0jZGVmaW5lIEJSX01TX0ZDTSAgICAgICAweDAwMDAwMDIwICAvKiBGQ00gKi8KLSNkZWZpbmUgQlJfTVNfU0RSQU0gICAgIDB4MDAwMDAwNjAgIC8qIFNEUkFNICovCi0jZGVmaW5lIEJSX01TX1VQTUEgICAgICAweDAwMDAwMDgwICAvKiBVUE1BICovCi0jZGVmaW5lIEJSX01TX1VQTUIgICAgICAweDAwMDAwMEEwICAvKiBVUE1CICovCi0jZGVmaW5lIEJSX01TX1VQTUMgICAgICAweDAwMDAwMEMwICAvKiBVUE1DICovCi0jZGVmaW5lIEJSX1YgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEJSX1ZfU0hJRlQgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJSX1JFUyAgICAgICAgICB+KEJSX0JBfEJSX1BTfEJSX0RFQ0N8QlJfV1B8QlJfTVNFTHxCUl9WKQotCi0JX19iZTMyIG9yOyAgICAgICAgICAgICAvKio8IEJhc2UgUmVnaXN0ZXIgICovCi0jZGVmaW5lIE9SMCAweDUwMDQKLSNkZWZpbmUgT1IxIDB4NTAwQwotI2RlZmluZSBPUjIgMHg1MDE0Ci0jZGVmaW5lIE9SMyAweDUwMUMKLSNkZWZpbmUgT1I0IDB4NTAyNAotI2RlZmluZSBPUjUgMHg1MDJDCi0jZGVmaW5lIE9SNiAweDUwMzQKLSNkZWZpbmUgT1I3IDB4NTAzQwotCi0jZGVmaW5lIE9SX0ZDTV9BTSAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKLSNkZWZpbmUgT1JfRkNNX0FNX1NISUZUICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBPUl9GQ01fQkNUTEQgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIE9SX0ZDTV9CQ1RMRF9TSElGVCAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgT1JfRkNNX1BHUyAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBPUl9GQ01fUEdTX1NISUZUICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIE9SX0ZDTV9DU0NUICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgT1JfRkNNX0NTQ1RfU0hJRlQgICAgICAgICAgICAgICAgOQotI2RlZmluZSBPUl9GQ01fQ1NUICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIE9SX0ZDTV9DU1RfU0hJRlQgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgT1JfRkNNX0NIVCAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBPUl9GQ01fQ0hUX1NISUZUICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIE9SX0ZDTV9TQ1kgICAgICAgICAgICAgIDB4MDAwMDAwNzAKLSNkZWZpbmUgT1JfRkNNX1NDWV9TSElGVCAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBPUl9GQ01fU0NZXzEgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE9SX0ZDTV9TQ1lfMiAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgT1JfRkNNX1NDWV8zICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBPUl9GQ01fU0NZXzQgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIE9SX0ZDTV9TQ1lfNSAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgT1JfRkNNX1NDWV82ICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBPUl9GQ01fU0NZXzcgICAgICAgICAgICAweDAwMDAwMDcwCi0jZGVmaW5lIE9SX0ZDTV9SU1QgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgT1JfRkNNX1JTVF9TSElGVCAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBPUl9GQ01fVFJMWCAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE9SX0ZDTV9UUkxYX1NISUZUICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgT1JfRkNNX0VIVFIgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBPUl9GQ01fRUhUUl9TSElGVCAgICAgICAgICAgICAgICAxCi19OwotCi1zdHJ1Y3QgZWxiY19yZWdzIHsKLQlzdHJ1Y3QgZWxiY19iYW5rIGJhbmtbOF07Ci0JdTggcmVzMFsweDI4XTsKLQlfX2JlMzIgbWFyOyAgICAgICAgICAgICAvKio8IFVQTSBBZGRyZXNzIFJlZ2lzdGVyICovCi0JdTggcmVzMVsweDRdOwotCV9fYmUzMiBtYW1yOyAgICAgICAgICAgIC8qKjwgVVBNQSBNb2RlIFJlZ2lzdGVyICovCi0JX19iZTMyIG1ibXI7ICAgICAgICAgICAgLyoqPCBVUE1CIE1vZGUgUmVnaXN0ZXIgKi8KLQlfX2JlMzIgbWNtcjsgICAgICAgICAgICAvKio8IFVQTUMgTW9kZSBSZWdpc3RlciAqLwotCXU4IHJlczJbMHg4XTsKLQlfX2JlMzIgbXJ0cHI7ICAgICAgICAgICAvKio8IE1lbW9yeSBSZWZyZXNoIFRpbWVyIFByZXNjYWxlciBSZWdpc3RlciAqLwotCV9fYmUzMiBtZHI7ICAgICAgICAgICAgIC8qKjwgVVBNIERhdGEgUmVnaXN0ZXIgKi8KLQl1OCByZXMzWzB4NF07Ci0JX19iZTMyIGxzb3I7ICAgICAgICAgICAgLyoqPCBTcGVjaWFsIE9wZXJhdGlvbiBJbml0aWF0aW9uIFJlZ2lzdGVyICovCi0JX19iZTMyIGxzZG1yOyAgICAgICAgICAgLyoqPCBTRFJBTSBNb2RlIFJlZ2lzdGVyICovCi0JdTggcmVzNFsweDhdOwotCV9fYmUzMiBsdXJ0OyAgICAgICAgICAgIC8qKjwgVVBNIFJlZnJlc2ggVGltZXIgKi8KLQlfX2JlMzIgbHNydDsgICAgICAgICAgICAvKio8IFNEUkFNIFJlZnJlc2ggVGltZXIgKi8KLQl1OCByZXM1WzB4OF07Ci0JX19iZTMyIGx0ZXNyOyAgICAgICAgICAgLyoqPCBUcmFuc2ZlciBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTFRFU1JfQk0gICAweDgwMDAwMDAwCi0jZGVmaW5lIExURVNSX0ZDVCAgMHg0MDAwMDAwMAotI2RlZmluZSBMVEVTUl9QQVIgIDB4MjAwMDAwMDAKLSNkZWZpbmUgTFRFU1JfV1AgICAweDA0MDAwMDAwCi0jZGVmaW5lIExURVNSX0FUTVcgMHgwMDgwMDAwMAotI2RlZmluZSBMVEVTUl9BVE1SIDB4MDA0MDAwMDAKLSNkZWZpbmUgTFRFU1JfQ1MgICAweDAwMDgwMDAwCi0jZGVmaW5lIExURVNSX0NDICAgMHgwMDAwMDAwMQotI2RlZmluZSBMVEVTUl9OQU5EX01BU0sgKExURVNSX0ZDVCB8IExURVNSX1BBUiB8IExURVNSX0NDKQotCV9fYmUzMiBsdGVkcjsgICAgICAgICAgIC8qKjwgVHJhbnNmZXIgRXJyb3IgRGlzYWJsZSBSZWdpc3RlciAqLwotCV9fYmUzMiBsdGVpcjsgICAgICAgICAgIC8qKjwgVHJhbnNmZXIgRXJyb3IgSW50ZXJydXB0IFJlZ2lzdGVyICovCi0JX19iZTMyIGx0ZWF0cjsgICAgICAgICAgLyoqPCBUcmFuc2ZlciBFcnJvciBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCi0JX19iZTMyIGx0ZWFyOyAgICAgICAgICAgLyoqPCBUcmFuc2ZlciBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCi0JdTggcmVzNlsweENdOwotCV9fYmUzMiBsYmNyOyAgICAgICAgICAgIC8qKjwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZSBMQkNSX0xESVMgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTEJDUl9MRElTX1NISUZUICAgIDMxCi0jZGVmaW5lIExCQ1JfQkNUTEMgMHgwMEMwMDAwMAotI2RlZmluZSBMQkNSX0JDVExDX1NISUZUICAgMjIKLSNkZWZpbmUgTEJDUl9BSEQgICAweDAwMjAwMDAwCi0jZGVmaW5lIExCQ1JfTFBCU0UgMHgwMDAyMDAwMAotI2RlZmluZSBMQkNSX0xQQlNFX1NISUZUICAgMTcKLSNkZWZpbmUgTEJDUl9FUEFSICAweDAwMDEwMDAwCi0jZGVmaW5lIExCQ1JfRVBBUl9TSElGVCAgICAxNgotI2RlZmluZSBMQkNSX0JNVCAgIDB4MDAwMEZGMDAKLSNkZWZpbmUgTEJDUl9CTVRfU0hJRlQgICAgICA4Ci0jZGVmaW5lIExCQ1JfSU5JVCAgMHgwMDA0MDAwMAotCV9fYmUzMiBsY3JyOyAgICAgICAgICAgIC8qKjwgQ2xvY2sgUmF0aW8gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTENSUl9EQllQICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTENSUl9EQllQX1NISUZUICAgICAgMzEKLSNkZWZpbmUgTENSUl9CVUZDTURDIDB4MzAwMDAwMDAKLSNkZWZpbmUgTENSUl9CVUZDTURDX1NISUZUICAgMjgKLSNkZWZpbmUgTENSUl9FQ0wgICAgIDB4MDMwMDAwMDAKLSNkZWZpbmUgTENSUl9FQ0xfU0hJRlQgICAgICAgMjQKLSNkZWZpbmUgTENSUl9FQURDICAgIDB4MDAwMzAwMDAKLSNkZWZpbmUgTENSUl9FQURDX1NISUZUICAgICAgMTYKLSNkZWZpbmUgTENSUl9DTEtESVYgIDB4MDAwMDAwMEYKLSNkZWZpbmUgTENSUl9DTEtESVZfU0hJRlQgICAgIDAKLQl1OCByZXM3WzB4OF07Ci0JX19iZTMyIGZtcjsgICAgICAgICAgICAgLyoqPCBGbGFzaCBNb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEZNUl9DV1RPICAgICAweDAwMDBGMDAwCi0jZGVmaW5lIEZNUl9DV1RPX1NISUZUICAgICAgIDEyCi0jZGVmaW5lIEZNUl9CT09UICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEZNUl9FQ0NNICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIEZNUl9BTCAgICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIEZNUl9BTF9TSElGVCAgICAgICAgICA0Ci0jZGVmaW5lIEZNUl9PUCAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIEZNUl9PUF9TSElGVCAgICAgICAgICAwCi0JX19iZTMyIGZpcjsgICAgICAgICAgICAgLyoqPCBGbGFzaCBJbnN0cnVjdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZSBGSVJfT1AwICAgICAgMHhGMDAwMDAwMAotI2RlZmluZSBGSVJfT1AwX1NISUZUICAgICAgICAyOAotI2RlZmluZSBGSVJfT1AxICAgICAgMHgwRjAwMDAwMAotI2RlZmluZSBGSVJfT1AxX1NISUZUICAgICAgICAyNAotI2RlZmluZSBGSVJfT1AyICAgICAgMHgwMEYwMDAwMAotI2RlZmluZSBGSVJfT1AyX1NISUZUICAgICAgICAyMAotI2RlZmluZSBGSVJfT1AzICAgICAgMHgwMDBGMDAwMAotI2RlZmluZSBGSVJfT1AzX1NISUZUICAgICAgICAxNgotI2RlZmluZSBGSVJfT1A0ICAgICAgMHgwMDAwRjAwMAotI2RlZmluZSBGSVJfT1A0X1NISUZUICAgICAgICAxMgotI2RlZmluZSBGSVJfT1A1ICAgICAgMHgwMDAwMEYwMAotI2RlZmluZSBGSVJfT1A1X1NISUZUICAgICAgICAgOAotI2RlZmluZSBGSVJfT1A2ICAgICAgMHgwMDAwMDBGMAotI2RlZmluZSBGSVJfT1A2X1NISUZUICAgICAgICAgNAotI2RlZmluZSBGSVJfT1A3ICAgICAgMHgwMDAwMDAwRgotI2RlZmluZSBGSVJfT1A3X1NISUZUICAgICAgICAgMAotI2RlZmluZSBGSVJfT1BfTk9QICAgMHgwCS8qIE5vIG9wZXJhdGlvbiBhbmQgZW5kIG9mIHNlcXVlbmNlICovCi0jZGVmaW5lIEZJUl9PUF9DQSAgICAweDEgICAgICAgIC8qIElzc3VlIGN1cnJlbnQgY29sdW1uIGFkZHJlc3MgKi8KLSNkZWZpbmUgRklSX09QX1BBICAgIDB4MiAgICAgICAgLyogSXNzdWUgY3VycmVudCBibG9jaytwYWdlIGFkZHJlc3MgKi8KLSNkZWZpbmUgRklSX09QX1VBICAgIDB4MyAgICAgICAgLyogSXNzdWUgdXNlciBkZWZpbmVkIGFkZHJlc3MgKi8KLSNkZWZpbmUgRklSX09QX0NNMCAgIDB4NCAgICAgICAgLyogSXNzdWUgY29tbWFuZCBmcm9tIEZDUltDTUQwXSAqLwotI2RlZmluZSBGSVJfT1BfQ00xICAgMHg1ICAgICAgICAvKiBJc3N1ZSBjb21tYW5kIGZyb20gRkNSW0NNRDFdICovCi0jZGVmaW5lIEZJUl9PUF9DTTIgICAweDYgICAgICAgIC8qIElzc3VlIGNvbW1hbmQgZnJvbSBGQ1JbQ01EMl0gKi8KLSNkZWZpbmUgRklSX09QX0NNMyAgIDB4NyAgICAgICAgLyogSXNzdWUgY29tbWFuZCBmcm9tIEZDUltDTUQzXSAqLwotI2RlZmluZSBGSVJfT1BfV0IgICAgMHg4ICAgICAgICAvKiBXcml0ZSBGQkNSIGJ5dGVzIGZyb20gRkNNIGJ1ZmZlciAqLwotI2RlZmluZSBGSVJfT1BfV1MgICAgMHg5ICAgICAgICAvKiBXcml0ZSAxIG9yIDIgYnl0ZXMgZnJvbSBNRFJbQVNdICovCi0jZGVmaW5lIEZJUl9PUF9SQiAgICAweEEgICAgICAgIC8qIFJlYWQgRkJDUiBieXRlcyB0byBGQ00gYnVmZmVyICovCi0jZGVmaW5lIEZJUl9PUF9SUyAgICAweEIgICAgICAgIC8qIFJlYWQgMSBvciAyIGJ5dGVzIHRvIE1EUltBU10gKi8KLSNkZWZpbmUgRklSX09QX0NXMCAgIDB4QyAgICAgICAgLyogV2FpdCB0aGVuIGlzc3VlIEZDUltDTUQwXSAqLwotI2RlZmluZSBGSVJfT1BfQ1cxICAgMHhEICAgICAgICAvKiBXYWl0IHRoZW4gaXNzdWUgRkNSW0NNRDFdICovCi0jZGVmaW5lIEZJUl9PUF9SQlcgICAweEUgICAgICAgIC8qIFdhaXQgdGhlbiByZWFkIEZCQ1IgYnl0ZXMgKi8KLSNkZWZpbmUgRklSX09QX1JTVyAgIDB4RSAgICAgICAgLyogV2FpdCB0aGVuIHJlYWQgMSBvciAyIGJ5dGVzICovCi0JX19iZTMyIGZjcjsgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyICovCi0jZGVmaW5lIEZDUl9DTUQwICAgICAweEZGMDAwMDAwCi0jZGVmaW5lIEZDUl9DTUQwX1NISUZUICAgICAgIDI0Ci0jZGVmaW5lIEZDUl9DTUQxICAgICAweDAwRkYwMDAwCi0jZGVmaW5lIEZDUl9DTUQxX1NISUZUICAgICAgIDE2Ci0jZGVmaW5lIEZDUl9DTUQyICAgICAweDAwMDBGRjAwCi0jZGVmaW5lIEZDUl9DTUQyX1NISUZUICAgICAgICA4Ci0jZGVmaW5lIEZDUl9DTUQzICAgICAweDAwMDAwMEZGCi0jZGVmaW5lIEZDUl9DTUQzX1NISUZUICAgICAgICAwCi0JX19iZTMyIGZiYXI7ICAgICAgICAgICAgLyoqPCBGbGFzaCBCbG9jayBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEZCQVJfQkxLICAgICAweDAwRkZGRkZGCi0JX19iZTMyIGZwYXI7ICAgICAgICAgICAgLyoqPCBGbGFzaCBQYWdlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRlBBUl9TUF9QSSAgIDB4MDAwMDdDMDAKLSNkZWZpbmUgRlBBUl9TUF9QSV9TSElGVCAgICAgMTAKLSNkZWZpbmUgRlBBUl9TUF9NUyAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgRlBBUl9TUF9DSSAgIDB4MDAwMDAxRkYKLSNkZWZpbmUgRlBBUl9TUF9DSV9TSElGVCAgICAgIDAKLSNkZWZpbmUgRlBBUl9MUF9QSSAgIDB4MDAwM0YwMDAKLSNkZWZpbmUgRlBBUl9MUF9QSV9TSElGVCAgICAgMTIKLSNkZWZpbmUgRlBBUl9MUF9NUyAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgRlBBUl9MUF9DSSAgIDB4MDAwMDA3RkYKLSNkZWZpbmUgRlBBUl9MUF9DSV9TSElGVCAgICAgIDAKLQlfX2JlMzIgZmJjcjsgICAgICAgICAgICAvKio8IEZsYXNoIEJ5dGUgQ291bnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRkJDUl9CQyAgICAgIDB4MDAwMDBGRkYKLQl1OCByZXMxMVsweDhdOwotCXU4IHJlczhbMHhGMDBdOwotfTsKLQogc3RydWN0IGZzbF9lbGJjX2N0cmw7CiAKIC8qIG10ZCBpbmZvcm1hdGlvbiBwZXIgc2V0ICovCkBAIC0yNjEsNyArNjYsNyBAQAogCiAJLyogZGV2aWNlIGluZm8gKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGVsYmNfcmVncyBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqcmVnczsKIAlpbnQgaXJxOwogCXdhaXRfcXVldWVfaGVhZF90IGlycV93YWl0OwogCXVuc2lnbmVkIGludCBpcnFfc3RhdHVzOyAvKiBzdGF0dXMgcmVhZCBmcm9tIExURVNSIGJ5IGlycSBoYW5kbGVyICovCkBAIC0zMjIsNyArMTI3LDcgQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBmc2xfZWxiY19tdGQgKnByaXYgPSBjaGlwLT5wcml2OwogCXN0cnVjdCBmc2xfZWxiY19jdHJsICpjdHJsID0gcHJpdi0+Y3RybDsKLQlzdHJ1Y3QgZWxiY19yZWdzIF9faW9tZW0gKmxiYyA9IGN0cmwtPnJlZ3M7CisJc3RydWN0IGZzbF9sYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOwogCWludCBidWZfbnVtOwogCiAJY3RybC0+cGFnZSA9IHBhZ2VfYWRkcjsKQEAgLTM2Myw3ICsxNjgsNyBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJc3RydWN0IGZzbF9lbGJjX210ZCAqcHJpdiA9IGNoaXAtPnByaXY7CiAJc3RydWN0IGZzbF9lbGJjX2N0cmwgKmN0cmwgPSBwcml2LT5jdHJsOwotCXN0cnVjdCBlbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKKwlzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmxiYyA9IGN0cmwtPnJlZ3M7CiAKIAkvKiBTZXR1cCB0aGUgRk1SW09QXSB0byBleGVjdXRlIHdpdGhvdXQgd3JpdGUgcHJvdGVjdGlvbiAqLwogCW91dF9iZTMyKCZsYmMtPmZtciwgcHJpdi0+Zm1yIHwgMyk7CkBAIC00MDYsNyArMjExLDcgQEAKIHsKIAlzdHJ1Y3QgZnNsX2VsYmNfbXRkICpwcml2ID0gY2hpcC0+cHJpdjsKIAlzdHJ1Y3QgZnNsX2VsYmNfY3RybCAqY3RybCA9IHByaXYtPmN0cmw7Ci0Jc3RydWN0IGVsYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOworCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKIAogCWlmIChwcml2LT5wYWdlX3NpemUpIHsKIAkJb3V0X2JlMzIoJmxiYy0+ZmlyLApAQCAtNDM5LDcgKzI0NCw3IEBACiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZnNsX2VsYmNfbXRkICpwcml2ID0gY2hpcC0+cHJpdjsKIAlzdHJ1Y3QgZnNsX2VsYmNfY3RybCAqY3RybCA9IHByaXYtPmN0cmw7Ci0Jc3RydWN0IGVsYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOworCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKIAogCWN0cmwtPnVzZV9tZHIgPSAwOwogCkBAIC03NzUsNyArNTgwLDcgQEAKIHsKIAlzdHJ1Y3QgZnNsX2VsYmNfbXRkICpwcml2ID0gY2hpcC0+cHJpdjsKIAlzdHJ1Y3QgZnNsX2VsYmNfY3RybCAqY3RybCA9IHByaXYtPmN0cmw7Ci0Jc3RydWN0IGVsYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOworCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKIAogCWlmIChjdHJsLT5zdGF0dXMgIT0gTFRFU1JfQ0MpCiAJCXJldHVybiBOQU5EX1NUQVRVU19GQUlMOwpAQCAtODA3LDcgKzYxMiw3IEBACiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZnNsX2VsYmNfbXRkICpwcml2ID0gY2hpcC0+cHJpdjsKIAlzdHJ1Y3QgZnNsX2VsYmNfY3RybCAqY3RybCA9IHByaXYtPmN0cmw7Ci0Jc3RydWN0IGVsYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOworCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKIAl1bnNpZ25lZCBpbnQgYWw7CiAKIAkvKiBjYWxjdWxhdGUgRk1SIEFkZHJlc3MgTGVuZ3RoIGZpZWxkICovCkBAIC05MjIsNyArNzI3LDcgQEAKIHN0YXRpYyBpbnQgZnNsX2VsYmNfY2hpcF9pbml0KHN0cnVjdCBmc2xfZWxiY19tdGQgKnByaXYpCiB7CiAJc3RydWN0IGZzbF9lbGJjX2N0cmwgKmN0cmwgPSBwcml2LT5jdHJsOwotCXN0cnVjdCBlbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKKwlzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmxiYyA9IGN0cmwtPnJlZ3M7CiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9ICZwcml2LT5jaGlwOwogCiAJZGV2X2RiZyhwcml2LT5kZXYsICJlTEJDIFNldCBJbmZvcm1hdGlvbiBmb3IgYmFuayAlZFxuIiwgcHJpdi0+YmFuayk7CkBAIC05ODYsNyArNzkxLDcgQEAKIHN0YXRpYyBpbnQgZnNsX2VsYmNfY2hpcF9wcm9iZShzdHJ1Y3QgZnNsX2VsYmNfY3RybCAqY3RybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiB7Ci0Jc3RydWN0IGVsYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOworCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKIAlzdHJ1Y3QgZnNsX2VsYmNfbXRkICpwcml2OwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCkBAIC0xMDgzLDcgKzg4OCw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9lbGJjX2N0cmxfaW5pdChzdHJ1Y3QgZnNsX2VsYmNfY3RybCAqY3RybCkKIHsKLQlzdHJ1Y3QgZWxiY19yZWdzIF9faW9tZW0gKmxiYyA9IGN0cmwtPnJlZ3M7CisJc3RydWN0IGZzbF9sYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOwogCiAJLyogY2xlYXIgZXZlbnQgcmVnaXN0ZXJzICovCiAJc2V0Yml0czMyKCZsYmMtPmx0ZXNyLCBMVEVTUl9OQU5EX01BU0spOwpAQCAtMTEyOCw3ICs5MzMsNyBAQAogc3RhdGljIGlycXJldHVybl90IGZzbF9lbGJjX2N0cmxfaXJxKGludCBpcnFubywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZnNsX2VsYmNfY3RybCAqY3RybCA9IGRhdGE7Ci0Jc3RydWN0IGVsYmNfcmVncyBfX2lvbWVtICpsYmMgPSBjdHJsLT5yZWdzOworCXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqbGJjID0gY3RybC0+cmVnczsKIAlfX2JlMzIgc3RhdHVzID0gaW5fYmUzMigmbGJjLT5sdGVzcikgJiBMVEVTUl9OQU5EX01BU0s7CiAKIAlpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL29yaW9uX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvb3Jpb25fbmFuZC5jCmluZGV4IDkxNjJjY2EuLmVjNWFkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvb3Jpb25fbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvb3Jpb25fbmFuZC5jCkBAIC0xOCw4ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtb3Jpb24vb3Jpb25fbmFuZC5oPgogCiAjaWZkZWYgQ09ORklHX01URF9DTURMSU5FX1BBUlRTCiBzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcnRjX2Zyb200LmMKaW5kZXggOTE4OWVjOC4uMGY2YWMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAkJCWVyX3N0YXQgfD0gMSA8PCAxOwogCQlrZnJlZShidWYpOwogCX0KLQorb3V0OgogCXJ0biA9IHN0YXR1czsKIAlpZiAoZXJfc3RhdCA9PSAwKSB7CS8qIGlmIEVDQyBpcyBhdmFpbGFibGUgICAqLwogCQlydG4gPSAoc3RhdHVzICYgfk5BTkRfU1RBVFVTX0ZBSUwpOwkvKiAgIGNsZWFyIHRoZSBlcnJvciBiaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggNmFjODFlMy4uMjc1OTYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTEwMDAsOCArMTAwMCw4IEBACiAJCW11dGV4X3VubG9jaygmdWJpX2RldmljZXNfbXV0ZXgpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHV0X210ZF9kZXZpY2UobXRkKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiVUJJIGVycm9yOiBjYW5ub3QgYXR0YWNoICVzXG4iLAotCQkJICAgICAgIHAtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fRVJSICJVQkkgZXJyb3I6IGNhbm5vdCBhdHRhY2ggbXRkJWRcbiIsCisJCQkgICAgICAgbXRkLT5pbmRleCk7CiAJCQlnb3RvIG91dF9kZXRhY2g7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvdWJpLmggYi9kcml2ZXJzL210ZC91YmkvdWJpLmgKaW5kZXggNDU3NzEwNjEuLmE1NDhjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS91YmkuaAorKysgYi9kcml2ZXJzL210ZC91YmkvdWJpLmgKQEAgLTIxNywxMSArMjE3LDExIEBACiAJdm9pZCAqdXBkX2J1ZjsKIAogCWludCAqZWJhX3RibDsKLQlpbnQgY2hlY2tlZDoxOwotCWludCBjb3JydXB0ZWQ6MTsKLQlpbnQgdXBkX21hcmtlcjoxOwotCWludCB1cGRhdGluZzoxOwotCWludCBjaGFuZ2luZ19sZWI6MTsKKwl1bnNpZ25lZCBpbnQgY2hlY2tlZDoxOworCXVuc2lnbmVkIGludCBjb3JydXB0ZWQ6MTsKKwl1bnNpZ25lZCBpbnQgdXBkX21hcmtlcjoxOworCXVuc2lnbmVkIGludCB1cGRhdGluZzoxOworCXVuc2lnbmVkIGludCBjaGFuZ2luZ19sZWI6MTsKIAogI2lmZGVmIENPTkZJR19NVERfVUJJX0dMVUVCSQogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvdm10LmMgYi9kcml2ZXJzL210ZC91Ymkvdm10LmMKaW5kZXggYTNjYTIyNS4uNWJlNThkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3ZtdC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS92bXQuYwpAQCAtMzc2LDcgKzM3Niw5IEBACiAJZ2V0X2RldmljZSgmdm9sLT5kZXYpOwogCXZvbHVtZV9zeXNmc19jbG9zZSh2b2wpOwogb3V0X2dsdWViaToKLQl1YmlfZGVzdHJveV9nbHVlYmkodm9sKTsKKwlpZiAodWJpX2Rlc3Ryb3lfZ2x1ZWJpKHZvbCkpCisJCWRiZ19lcnIoImNhbm5vdCBkZXN0cm95IGdsdWViaSBmb3Igdm9sdW1lICVkOiVkIiwKKwkJCXViaS0+dWJpX251bSwgdm9sX2lkKTsKIG91dF9jZGV2OgogCWNkZXZfZGVsKCZ2b2wtPmNkZXYpOwogb3V0X21hcHBpbmc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvdnRibC5jIGIvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYwppbmRleCA1NmZjM2ZiLi5hZjM2YjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvdnRibC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMKQEAgLTUxOSw2ICs1MTksNyBAQAogCQkJaWYgKHViaS0+YXV0b3Jlc2l6ZV92b2xfaWQgIT0gLTEpIHsKIAkJCQl1YmlfZXJyKCJtb3JlIHRoZW4gb25lIGF1dG8tcmVzaXplIHZvbHVtZSAoJWQgIgogCQkJCQkiYW5kICVkKSIsIHViaS0+YXV0b3Jlc2l6ZV92b2xfaWQsIGkpOworCQkJCWtmcmVlKHZvbCk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDdkMjUzNjguLjViYTRiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtNDg1LDkgKzQ4NSw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJ1cnBlZCBkdXJpbmcgdHggbG9hZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JfQotCXdoaWxlICgxKTsKLQorCX0gd2hpbGUgKDEpOwogfQogCiAvKioKQEAgLTYxMiw3ICs2MTAsOCBAQAogCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlpZiAoZWxfZGVidWcgPiA2KQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIgVHggc3VjY2VlZGVkICVzXG4iLAotCQkJCQkodHhzciAmIFRYX1JEWSkgPyAiLiIgOiAiYnV0IHR4IGlzIGJ1c3khIik7CisJCQkJCSh0eHNyICYgVFhfUkRZKSA/ICIuIiA6CisJCQkJCQkJImJ1dCB0eCBpcyBidXN5ISIpOwogCQkJLyoKIAkJCSAqCVRoaXMgaXMgc2FmZSB0aGUgaW50ZXJydXB0IGlzIGF0b21pYyBXUlQgaXRzZWxmLgogCQkJICovCkBAIC02OTMsNyArNjkyLDggQEAKIAogCWlmIChwa3RfbGVuIDwgNjAgfHwgcGt0X2xlbiA+IDE1MzYpIHsKIAkJaWYgKGVsX2RlYnVnKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQsIGxlbmd0aD0lZFxuIiwgZGV2LT5uYW1lLCBwa3RfbGVuKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0LCBsZW5ndGg9JWRcbiIsCisJCQkJCQlkZXYtPm5hbWUsIHBrdF9sZW4pOwogCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CkBAIC03MTEsNyArNzExLDggQEAKIAogCW91dHcoMHgwMCwgR1BfTE9XKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCisJCQkJCQkJCWRldi0+bmFtZSk7CiAJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKQEAgLTc0OCw3ICs3NDksOCBAQAogCWlmIChlbF9kZWJ1ZyA+IDIpCiAJCXByaW50ayhLRVJOX0lORk8gIjNjNTAxIHJlc2V0Li4uIik7CiAJb3V0YihBWF9SRVNFVCwgQVhfQ01EKTsJCS8qIFJlc2V0IHRoZSBjaGlwICovCi0Jb3V0YihBWF9MT09QLCBBWF9DTUQpOwkJLyogQXV4IGNvbnRyb2wsIGlycSBhbmQgbG9vcGJhY2sgZW5hYmxlZCAqLworCS8qIEF1eCBjb250cm9sLCBpcnEgYW5kIGxvb3BiYWNrIGVuYWJsZWQgKi8KKwlvdXRiKEFYX0xPT1AsIEFYX0NNRCk7CiAJewogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykJLyogU2V0IHRoZSBzdGF0aW9uIGFkZHJlc3MuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwOS5jIGIvZHJpdmVycy9uZXQvM2M1MDkuYwppbmRleCA4ZmFmYWM5Li41NGRhYzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwOS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKQEAgLTU0LDI1ICs1NCwyNCBAQAogCQl2MS4xOWEgMjhPY3QyMDAyIERhdnVkIFJ1Z2dpZXJvIDxqZHJAZmFyZmFsbGUuY29tPgogCQkJLSBJbmNyZWFzZSAqcmVhZF9lZXByb20gdWRlbGF5IHRvIHdvcmthcm91bmQgb29wcyB3aXRoIDIgY2FyZHMuCiAJCXYxLjE5YiAwOE5vdjIwMDIgTWFyYyBaeW5naWVyIDxtYXpAd2lsZC13aW5kLmZyLmV1Lm9yZz4KLQkJICAgIC0gSW50cm9kdWNlIGRyaXZlciBtb2RlbCBmb3IgRUlTQSBjYXJkcy4KKwkJCS0gSW50cm9kdWNlIGRyaXZlciBtb2RlbCBmb3IgRUlTQSBjYXJkcy4KKwkJdjEuMjAgIDA0RmViMjAwOCBPbmRyZWogWmFyeSA8bGludXhAcmFpbmJvdy1zb2Z0d2FyZS5vcmc+CisJCQktIGNvbnZlcnQgdG8gaXNhX2RyaXZlciBhbmQgcG5wX2RyaXZlciBhbmQgc29tZSBjbGVhbnVwcwogKi8KIAogI2RlZmluZSBEUlZfTkFNRQkiM2M1MDkiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjE5YiIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIjA4Tm92MjAwMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMjAiCisjZGVmaW5lIERSVl9SRUxEQVRFCSIwNEZlYjIwMDgiCiAKIC8qIEEgZmV3IHZhbHVlcyB0aGF0IG1heSBiZSB0d2Vha2VkLiAqLwogCiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiAjZGVmaW5lIFRYX1RJTUVPVVQgICg0MDAqSFovMTAwMCkKLS8qIE1heGltdW0gZXZlbnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQuICovCi1zdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDEwOwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaWZkZWYgQ09ORklHX01DQQogI2luY2x1ZGUgPGxpbnV4L21jYS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTk3LDEwICs5Niw2IEBACiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gRFJWX05BTUUgIi5jOiIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgYmVja2VyQHNjeWxkLmNvbVxuIjsKIAotI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiAoZGVmaW5lZChDT05GSUdfTUNBKSB8fCBkZWZpbmVkKENPTkZJR19FSVNBKSkKLSNkZWZpbmUgRUwzX1NVU1BFTkQKLSNlbmRpZgotCiAjaWZkZWYgRUwzX0RFQlVHCiBzdGF0aWMgaW50IGVsM19kZWJ1ZyA9IEVMM19ERUJVRzsKICNlbHNlCkBAIC0xMTEsNiArMTA2LDcgQEAKICAqIGEgZ2xvYmFsIHZhcmlhYmxlIHNvIHRoYXQgdGhlIG1jYS9laXNhIHByb2JlIHJvdXRpbmVzIGNhbiBpbmNyZW1lbnQKICAqIGl0ICovCiBzdGF0aWMgaW50IGVsM19jYXJkcyA9IDA7CisjZGVmaW5lIEVMM19NQVhfQ0FSRFMgOAogCiAvKiBUbyBtaW5pbWl6ZSB0aGUgc2l6ZSBvZiB0aGUgZHJpdmVyIHNvdXJjZSBJIG9ubHkgZGVmaW5lIG9wZXJhdGluZwogICAgY29uc3RhbnRzIGlmIHRoZXkgYXJlIHVzZWQgc2V2ZXJhbCB0aW1lcy4gIFlvdSdsbCBuZWVkIHRoZSBtYW51YWwKQEAgLTExOSw3ICsxMTUsNyBAQAogI2RlZmluZSBFTDNfREFUQSAweDAwCiAjZGVmaW5lIEVMM19DTUQgMHgwZQogI2RlZmluZSBFTDNfU1RBVFVTIDB4MGUKLSNkZWZpbmUJIEVFUFJPTV9SRUFEIDB4ODAKKyNkZWZpbmUJRUVQUk9NX1JFQUQgMHg4MAogCiAjZGVmaW5lIEVMM19JT19FWFRFTlQJMTYKIApAQCAtMTY4LDIzICsxNjQsMzEgQEAKICAqLwogI2RlZmluZSBTS0JfUVVFVUVfU0laRQk2NAogCitlbnVtIGVsM19jYXJkdHlwZSB7IEVMM19JU0EsIEVMM19QTlAsIEVMM19NQ0EsIEVMM19FSVNBIH07CisKIHN0cnVjdCBlbDNfcHJpdmF0ZSB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5leHRfZGV2OwogCXNwaW5sb2NrX3QgbG9jazsKIAkvKiBza2Igc2VuZC1xdWV1ZSAqLwogCWludCBoZWFkLCBzaXplOwogCXN0cnVjdCBza19idWZmICpxdWV1ZVtTS0JfUVVFVUVfU0laRV07Ci0JZW51bSB7Ci0JCUVMM19NQ0EsCi0JCUVMM19QTlAsCi0JCUVMM19FSVNBLAotCX0gdHlwZTsJCQkJCQkvKiB0eXBlIG9mIGRldmljZSAqLwotCXN0cnVjdCBkZXZpY2UgKmRldjsKKwllbnVtIGVsM19jYXJkdHlwZSB0eXBlOwogfTsKLXN0YXRpYyBpbnQgaWRfcG9ydCBfX2luaXRkYXRhID0gMHgxMTA7CS8qIFN0YXJ0IHdpdGggMHgxMTAgdG8gYXZvaWQgbmV3IHNvdW5kIGNhcmRzLiovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmVsM19yb290X2RldjsKK3N0YXRpYyBpbnQgaWRfcG9ydDsKK3N0YXRpYyBpbnQgY3VycmVudF90YWc7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmVsM19kZXZzW0VMM19NQVhfQ0FSRFNdOwogCisvKiBQYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIHBhc3NlZCBpbnRvIHRoZSBtb2R1bGUuICovCitzdGF0aWMgaW50IGRlYnVnID0gLTE7CitzdGF0aWMgaW50IGlycVtdID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07CisvKiBNYXhpbXVtIGV2ZW50cyAoUnggcGFja2V0cywgZXRjLikgdG8gaGFuZGxlIGF0IGVhY2ggaW50ZXJydXB0LiAqLworc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAxMDsKKyNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IG5vcG5wOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IGVsM19jb21tb25faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGVsM19jb21tb25fcmVtb3ZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHVzaG9ydCBpZF9yZWFkX2VlcHJvbShpbnQgaW5kZXgpOwogc3RhdGljIHVzaG9ydCByZWFkX2VlcHJvbShpbnQgaW9hZGRyLCBpbnQgaW5kZXgpOwogc3RhdGljIGludCBlbDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE5OSw3ICsyMDMsNyBAQAogc3RhdGljIHZvaWQgZWwzX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbDNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwotI2lmZGVmIEVMM19TVVNQRU5ECisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGVsM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKiwgcG1fbWVzc2FnZV90KTsKIHN0YXRpYyBpbnQgZWwzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICopOwogI2Vsc2UKQEAgLTIwOSwxMyArMjEzLDI3MiBAQAogCiAKIC8qIGdlbmVyaWMgZGV2aWNlIHJlbW92ZSBmb3IgYWxsIGRldmljZSB0eXBlcyAqLwotI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKIHN0YXRpYyBpbnQgZWwzX2RldmljZV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgZWwzX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgogCisvKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGVycm9yLCAyIHdoZW4gZm91bmQgYWxyZWFkeSBkZXRlY3RlZCBQblAgY2FyZCAqLworc3RhdGljIGludCBlbDNfaXNhX2lkX3NlcXVlbmNlKF9fYmUxNiAqcGh5c19hZGRyKQoreworCXNob3J0IGxyc19zdGF0ZSA9IDB4ZmY7CisJaW50IGk7CisKKwkvKiBJU0EgYm9hcmRzIGFyZSBkZXRlY3RlZCBieSBzZW5kaW5nIHRoZSBJRCBzZXF1ZW5jZSB0byB0aGUKKwkgICBJRF9QT1JULiAgV2UgZmluZCBjYXJkcyBwYXN0IHRoZSBmaXJzdCBieSBzZXR0aW5nIHRoZSAnY3VycmVudF90YWcnCisJICAgb24gY2FyZHMgYXMgdGhleSBhcmUgZm91bmQuICBDYXJkcyB3aXRoIHRoZWlyIHRhZyBzZXQgd2lsbCBub3QKKwkgICByZXNwb25kIHRvIHN1YnNlcXVlbnQgSUQgc2VxdWVuY2VzLiAqLworCisJb3V0YigweDAwLCBpZF9wb3J0KTsKKwlvdXRiKDB4MDAsIGlkX3BvcnQpOworCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykgeworCQlvdXRiKGxyc19zdGF0ZSwgaWRfcG9ydCk7CisJCWxyc19zdGF0ZSA8PD0gMTsKKwkJbHJzX3N0YXRlID0gbHJzX3N0YXRlICYgMHgxMDAgPyBscnNfc3RhdGUgXiAweGNmIDogbHJzX3N0YXRlOworCX0KKwkvKiBGb3IgdGhlIGZpcnN0IHByb2JlLCBjbGVhciBhbGwgYm9hcmQncyB0YWcgcmVnaXN0ZXJzLiAqLworCWlmIChjdXJyZW50X3RhZyA9PSAwKQorCQlvdXRiKDB4ZDAsIGlkX3BvcnQpOworCWVsc2UJCQkvKiBPdGhlcndpc2Uga2lsbCBvZmYgYWxyZWFkeS1mb3VuZCBib2FyZHMuICovCisJCW91dGIoMHhkOCwgaWRfcG9ydCk7CisJaWYgKGlkX3JlYWRfZWVwcm9tKDcpICE9IDB4NmQ1MCkKKwkJcmV0dXJuIDE7CisJLyogUmVhZCBpbiBFRVBST00gZGF0YSwgd2hpY2ggZG9lcyBjb250ZW50aW9uLXNlbGVjdC4KKwkgICBPbmx5IHRoZSBsb3dlc3QgYWRkcmVzcyBib2FyZCB3aWxsIHN0YXkgIm9uLWxpbmUiLgorCSAgIDNDb20gZ290IHRoZSBieXRlIG9yZGVyIGJhY2t3YXJkcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlwaHlzX2FkZHJbaV0gPSBodG9ucyhpZF9yZWFkX2VlcHJvbShpKSk7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmICghbm9wbnApIHsKKwkJLyogVGhlIElTQSBQblAgM2M1MDkgY2FyZHMgcmVzcG9uZCB0byB0aGUgSUQgc2VxdWVuY2UgdG9vLgorCQkgICBUaGlzIGNoZWNrIGlzIG5lZWRlZCBpbiBvcmRlciBub3QgdG8gcmVnaXN0ZXIgdGhlbSB0d2ljZS4gKi8KKwkJZm9yIChpID0gMDsgaSA8IGVsM19jYXJkczsgaSsrKSB7CisJCQlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZWwzX2RldnNbaV0pOworCQkJaWYgKGxwLT50eXBlID09IEVMM19QTlAKKwkJCSAgICAmJiAhbWVtY21wKHBoeXNfYWRkciwgZWwzX2RldnNbaV0tPmRldl9hZGRyLAorCQkJCSAgICAgICBFVEhfQUxFTikpIHsKKwkJCQlpZiAoZWwzX2RlYnVnID4gMykKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIjNjNTA5IHdpdGggYWRkcmVzcyAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCB3YXMgZm91bmQgYnkgSVNBUG5QXG4iLAorCQkJCQkJcGh5c19hZGRyWzBdICYgMHhmZiwgcGh5c19hZGRyWzBdID4+IDgsCisJCQkJCQlwaHlzX2FkZHJbMV0gJiAweGZmLCBwaHlzX2FkZHJbMV0gPj4gOCwKKwkJCQkJCXBoeXNfYWRkclsyXSAmIDB4ZmYsIHBoeXNfYWRkclsyXSA+PiA4KTsKKwkJCQkvKiBTZXQgdGhlIGFkYXB0b3IgdGFnIHNvIHRoYXQgdGhlIG5leHQgY2FyZCBjYW4gYmUgZm91bmQuICovCisJCQkJb3V0YigweGQwICsgKytjdXJyZW50X3RhZywgaWRfcG9ydCk7CisJCQkJcmV0dXJuIDI7CisJCQl9CisJCX0KKwl9CisjZW5kaWYgLyogQ09ORklHX1BOUCAqLworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBlbDNfZGV2X2ZpbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2ICpwaHlzX2FkZHIsCisJCQkJICAgaW50IGlvYWRkciwgaW50IGlycSwgaW50IGlmX3BvcnQsCisJCQkJICAgZW51bSBlbDNfY2FyZHR5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBwaHlzX2FkZHIsIEVUSF9BTEVOKTsKKwlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKKwlkZXYtPmlycSA9IGlycTsKKwlkZXYtPmlmX3BvcnQgPSBpZl9wb3J0OworCWxwLT50eXBlID0gdHlwZTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZWwzX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCSAgIHVuc2lnbmVkIGludCBuZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGlvYWRkciwgaXNhX2lycSwgaWZfcG9ydCwgZXJyOworCXVuc2lnbmVkIGludCBpb2Jhc2U7CisJX19iZTE2IHBoeXNfYWRkclszXTsKKworCXdoaWxlICgoZXJyID0gZWwzX2lzYV9pZF9zZXF1ZW5jZShwaHlzX2FkZHIpKSA9PSAyKQorCQk7CS8qIFNraXAgdG8gbmV4dCBjYXJkIHdoZW4gUG5QIGNhcmQgZm91bmQgKi8KKwlpZiAoZXJyID09IDEpCisJCXJldHVybiAwOworCisJaW9iYXNlID0gaWRfcmVhZF9lZXByb20oOCk7CisJaWZfcG9ydCA9IGlvYmFzZSA+PiAxNDsKKwlpb2FkZHIgPSAweDIwMCArICgoaW9iYXNlICYgMHgxZikgPDwgNCk7CisJaWYgKGlycVtlbDNfY2FyZHNdID4gMSAmJiBpcnFbZWwzX2NhcmRzXSA8IDE2KQorCQlpc2FfaXJxID0gaXJxW2VsM19jYXJkc107CisJZWxzZQorCQlpc2FfaXJxID0gaWRfcmVhZF9lZXByb20oOSkgPj4gMTI7CisKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGVsM19wcml2YXRlKSk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBFTDNfSU9fRVhURU5ULCAiM2M1MDktaXNhIikpIHsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2V0IHRoZSBhZGFwdG9yIHRhZyBzbyB0aGF0IHRoZSBuZXh0IGNhcmQgY2FuIGJlIGZvdW5kLiAqLworCW91dGIoMHhkMCArICsrY3VycmVudF90YWcsIGlkX3BvcnQpOworCisJLyogQWN0aXZhdGUgdGhlIGFkYXB0b3IgYXQgdGhlIEVFUFJPTSBsb2NhdGlvbi4gKi8KKwlvdXRiKChpb2FkZHIgPj4gNCkgfCAweGUwLCBpZF9wb3J0KTsKKworCUVMM1dJTkRPVygwKTsKKwlpZiAoaW53KGlvYWRkcikgIT0gMHg2ZDUwKSB7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXJldHVybiAwOworCX0KKworCS8qIEZyZWUgdGhlIGludGVycnVwdCBzbyB0aGF0IHNvbWUgb3RoZXIgY2FyZCBjYW4gdXNlIGl0LiAqLworCW91dHcoMHgwZjAwLCBpb2FkZHIgKyBXTjBfSVJRKTsKKworCWVsM19kZXZfZmlsbChkZXYsIHBoeXNfYWRkciwgaW9hZGRyLCBpc2FfaXJxLCBpZl9wb3J0LCBFTDNfSVNBKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlpZiAoZWwzX2NvbW1vbl9pbml0KGRldikpIHsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZWwzX2RldnNbZWwzX2NhcmRzKytdID0gZGV2OworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBlbDNfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbmRldikKK3sKKwllbDNfZGV2aWNlX3JlbW92ZShwZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZWwzX2lzYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4sCisJCQkgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJY3VycmVudF90YWcgPSAwOworCXJldHVybiBlbDNfc3VzcGVuZChkZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBlbDNfaXNhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkciwgZXJyOworCV9fYmUxNiBwaHlzX2FkZHJbM107CisKKwl3aGlsZSAoKGVyciA9IGVsM19pc2FfaWRfc2VxdWVuY2UocGh5c19hZGRyKSkgPT0gMikKKwkJOwkvKiBTa2lwIHRvIG5leHQgY2FyZCB3aGVuIFBuUCBjYXJkIGZvdW5kICovCisJaWYgKGVyciA9PSAxKQorCQlyZXR1cm4gMDsKKwkvKiBTZXQgdGhlIGFkYXB0b3IgdGFnIHNvIHRoYXQgdGhlIG5leHQgY2FyZCBjYW4gYmUgZm91bmQuICovCisJb3V0YigweGQwICsgKytjdXJyZW50X3RhZywgaWRfcG9ydCk7CisJLyogRW5hYmxlIHRoZSBjYXJkICovCisJb3V0YigoaW9hZGRyID4+IDQpIHwgMHhlMCwgaWRfcG9ydCk7CisJRUwzV0lORE9XKDApOworCWlmIChpbncoaW9hZGRyKSAhPSAweDZkNTApCisJCXJldHVybiAxOworCS8qIEZyZWUgdGhlIGludGVycnVwdCBzbyB0aGF0IHNvbWUgb3RoZXIgY2FyZCBjYW4gdXNlIGl0LiAqLworCW91dHcoMHgwZjAwLCBpb2FkZHIgKyBXTjBfSVJRKTsKKwlyZXR1cm4gZWwzX3Jlc3VtZShkZXYpOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBlbDNfaXNhX2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gZWwzX2lzYV9tYXRjaCwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGVsM19pc2FfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IGVsM19pc2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IGVsM19pc2FfcmVzdW1lLAorI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIjNjNTA5IgorCX0sCit9Oworc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKKworI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBlbDNfcG5wX2lkc1tdID0geworCXsgLmlkID0gIlRDTTUwOTAiIH0sIC8qIDNDb20gRXRoZXJsaW5rIElJSSAoVFApICovCisJeyAuaWQgPSAiVENNNTA5MSIgfSwgLyogM0NvbSBFdGhlcmxpbmsgSUlJICovCisJeyAuaWQgPSAiVENNNTA5NCIgfSwgLyogM0NvbSBFdGhlcmxpbmsgSUlJIChjb21ibykgKi8KKwl7IC5pZCA9ICJUQ001MDk1IiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgKFRQTykgKi8KKwl7IC5pZCA9ICJUQ001MDk4IiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgKFRQQykgKi8KKwl7IC5pZCA9ICJQTlA4MGY3IiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgY29tcGF0aWJsZSAqLworCXsgLmlkID0gIlBOUDgwZjgiIH0sIC8qIDNDb20gRXRoZXJsaW5rIElJSSBjb21wYXRpYmxlICovCisJeyAuaWQgPSAiIiB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIGVsM19wbnBfaWRzKTsKKworc3RhdGljIGludCBfX2RldmluaXQgZWwzX3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqcGRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmlkKQoreworCXNob3J0IGk7CisJaW50IGlvYWRkciwgaXJxLCBpZl9wb3J0OworCXUxNiBwaHlzX2FkZHJbM107CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJaW50IGVycjsKKworCWlvYWRkciA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBFTDNfSU9fRVhURU5ULCAiM2M1MDktcG5wIikpCisJCXJldHVybiAtRUJVU1k7CisJaXJxID0gcG5wX2lycShwZGV2LCAwKTsKKwlFTDNXSU5ET1coMCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJcGh5c19hZGRyW2ldID0gaHRvbnMocmVhZF9lZXByb20oaW9hZGRyLCBpKSk7CisJaWZfcG9ydCA9IHJlYWRfZWVwcm9tKGlvYWRkciwgOCkgPj4gMTQ7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlbDNfcHJpdmF0ZSkpOworCWlmICghZGV2KSB7CisJCXJlbGVhc2VfcmVnaW9uKGlvYWRkciwgRUwzX0lPX0VYVEVOVCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CisKKwllbDNfZGV2X2ZpbGwoZGV2LCBwaHlzX2FkZHIsIGlvYWRkciwgaXJxLCBpZl9wb3J0LCBFTDNfUE5QKTsKKwlwbnBfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwllcnIgPSBlbDNfY29tbW9uX2luaXQoZGV2KTsKKworCWlmIChlcnIpIHsKKwkJcG5wX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlmcmVlX25ldGRldihkZXYpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVsM19kZXZzW2VsM19jYXJkcysrXSA9IGRldjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGVsM19wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQoreworCWVsM19jb21tb25fcmVtb3ZlKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJcG5wX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGVsM19wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBlbDNfc3VzcGVuZCgmcGRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZWwzX3BucF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBkZXYpCit7CisJcmV0dXJuIGVsM19yZXN1bWUoJnBkZXYtPmRldik7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGVsM19wbnBfZHJpdmVyID0geworCS5uYW1lCQk9ICIzYzUwOSIsCisJLmlkX3RhYmxlCT0gZWwzX3BucF9pZHMsCisJLnByb2JlCQk9IGVsM19wbnBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChlbDNfcG5wX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBlbDNfcG5wX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBlbDNfcG5wX3Jlc3VtZSwKKyNlbmRpZgorfTsKK3N0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CisjZW5kaWYgLyogQ09ORklHX1BOUCAqLworCiAjaWZkZWYgQ09ORklHX0VJU0EKIHN0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZWwzX2Vpc2FfaWRzW10gPSB7CiAJCXsgIlRDTTUwOTIiIH0sCkBAIC0yMzAsMTMgKzQ5MywxNCBAQAogc3RhdGljIHN0cnVjdCBlaXNhX2RyaXZlciBlbDNfZWlzYV9kcml2ZXIgPSB7CiAJCS5pZF90YWJsZSA9IGVsM19laXNhX2lkcywKIAkJLmRyaXZlciAgID0gewotCQkJCS5uYW1lICAgID0gIjNjNTA5IiwKKwkJCQkubmFtZSAgICA9ICIzYzU3OSIsCiAJCQkJLnByb2JlICAgPSBlbDNfZWlzYV9wcm9iZSwKIAkJCQkucmVtb3ZlICA9IF9fZGV2ZXhpdF9wIChlbDNfZGV2aWNlX3JlbW92ZSksCiAJCQkJLnN1c3BlbmQgPSBlbDNfc3VzcGVuZCwKIAkJCQkucmVzdW1lICA9IGVsM19yZXN1bWUsCiAJCX0KIH07CitzdGF0aWMgaW50IGVpc2FfcmVnaXN0ZXJlZDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01DQQpAQCAtMjcxLDQ1ICs1MzUsOSBAQAogCQkJCS5yZXN1bWUgID0gZWwzX3Jlc3VtZSwKIAkJfSwKIH07CitzdGF0aWMgaW50IG1jYV9yZWdpc3RlcmVkOwogI2VuZGlmIC8qIENPTkZJR19NQ0EgKi8KIAotI2lmIGRlZmluZWQoX19JU0FQTlBfXykKLXN0YXRpYyBzdHJ1Y3QgaXNhcG5wX2RldmljZV9pZCBlbDNfaXNhcG5wX2FkYXB0ZXJzW10gX19pbml0ZGF0YSA9IHsKLQl7CUlTQVBOUF9BTllfSUQsIElTQVBOUF9BTllfSUQsCi0JCUlTQVBOUF9WRU5ET1IoJ1QnLCAnQycsICdNJyksIElTQVBOUF9GVU5DVElPTigweDUwOTApLAotCQkobG9uZykgIjNDb20gRXRoZXJsaW5rIElJSSAoVFApIiB9LAotCXsJSVNBUE5QX0FOWV9JRCwgSVNBUE5QX0FOWV9JRCwKLQkJSVNBUE5QX1ZFTkRPUignVCcsICdDJywgJ00nKSwgSVNBUE5QX0ZVTkNUSU9OKDB4NTA5MSksCi0JCShsb25nKSAiM0NvbSBFdGhlcmxpbmsgSUlJIiB9LAotCXsJSVNBUE5QX0FOWV9JRCwgSVNBUE5QX0FOWV9JRCwKLQkJSVNBUE5QX1ZFTkRPUignVCcsICdDJywgJ00nKSwgSVNBUE5QX0ZVTkNUSU9OKDB4NTA5NCksCi0JCShsb25nKSAiM0NvbSBFdGhlcmxpbmsgSUlJIChjb21ibykiIH0sCi0JewlJU0FQTlBfQU5ZX0lELCBJU0FQTlBfQU5ZX0lELAotCQlJU0FQTlBfVkVORE9SKCdUJywgJ0MnLCAnTScpLCBJU0FQTlBfRlVOQ1RJT04oMHg1MDk1KSwKLQkJKGxvbmcpICIzQ29tIEV0aGVybGluayBJSUkgKFRQTykiIH0sCi0JewlJU0FQTlBfQU5ZX0lELCBJU0FQTlBfQU5ZX0lELAotCQlJU0FQTlBfVkVORE9SKCdUJywgJ0MnLCAnTScpLCBJU0FQTlBfRlVOQ1RJT04oMHg1MDk4KSwKLQkJKGxvbmcpICIzQ29tIEV0aGVybGluayBJSUkgKFRQQykiIH0sCi0JewlJU0FQTlBfQU5ZX0lELCBJU0FQTlBfQU5ZX0lELAotCQlJU0FQTlBfVkVORE9SKCdQJywgJ04nLCAnUCcpLCBJU0FQTlBfRlVOQ1RJT04oMHg4MGY3KSwKLQkJKGxvbmcpICIzQ29tIEV0aGVybGluayBJSUkgY29tcGF0aWJsZSIgfSwKLQl7CUlTQVBOUF9BTllfSUQsIElTQVBOUF9BTllfSUQsCi0JCUlTQVBOUF9WRU5ET1IoJ1AnLCAnTicsICdQJyksIElTQVBOUF9GVU5DVElPTigweDgwZjgpLAotCQkobG9uZykgIjNDb20gRXRoZXJsaW5rIElJSSBjb21wYXRpYmxlIiB9LAotCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwotfTsKLQotc3RhdGljIF9fYmUxNiBlbDNfaXNhcG5wX3BoeXNfYWRkcls4XVszXTsKLXN0YXRpYyBpbnQgbm9wbnA7Ci0jZW5kaWYgLyogX19JU0FQTlBfXyAqLwotCi0vKiBXaXRoIHRoZSBkcml2ZXIgbW9kZWwgaW50cm9kdWN0aW9uIGZvciBFSVNBIGRldmljZXMsIGJvdGggaW5pdAotICogYW5kIGNsZWFudXAgaGF2ZSBiZWVuIHNwbGl0IDoKLSAqIC0gRUlTQSBkZXZpY2VzIHByb2JlL3JlbW92ZSBzdGFydHMgaW4gZWwzX2Vpc2FfcHJvYmUvZWwzX2RldmljZV9yZW1vdmUKLSAqIC0gTUNBL0lTQSBzdGlsbCB1c2UgZWwzX3Byb2JlCi0gKgotICogQm90aCBjYWxsIGVsM19jb21tb25faW5pdC9lbDNfY29tbW9uX3JlbW92ZS4gKi8KLQogc3RhdGljIGludCBfX2luaXQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zNjAsMjMxICs1ODgsMTEgQEAKIAogc3RhdGljIHZvaWQgZWwzX2NvbW1vbl9yZW1vdmUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkodm9pZCkgbHA7CQkJCS8qIEtlZXAgZ2NjIHF1aWV0Li4uICovCi0jaWYgZGVmaW5lZChfX0lTQVBOUF9fKQotCWlmIChscC0+dHlwZSA9PSBFTDNfUE5QKQotCQlwbnBfZGV2aWNlX2RldGFjaCh0b19wbnBfZGV2KGxwLT5kZXYpKTsKLSNlbmRpZgotCiAJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldik7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIEVMM19JT19FWFRFTlQpOwogCWZyZWVfbmV0ZGV2IChkZXYpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBlbDNfcHJvYmUoaW50IGNhcmRfaWR4KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGVsM19wcml2YXRlICpscDsKLQlzaG9ydCBscnNfc3RhdGUgPSAweGZmLCBpOwotCWludCBpb2FkZHIsIGlycSwgaWZfcG9ydDsKLQlfX2JlMTYgcGh5c19hZGRyWzNdOwotCXN0YXRpYyBpbnQgY3VycmVudF90YWc7Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0jaWYgZGVmaW5lZChfX0lTQVBOUF9fKQotCXN0YXRpYyBpbnQgcG5wX2NhcmRzOwotCXN0cnVjdCBwbnBfZGV2ICppZGV2ID0gTlVMTDsKLQlpbnQgcG5wX2ZvdW5kID0gMDsKLQotCWlmIChub3BucCA9PSAxKQotCQlnb3RvIG5vX3BucDsKLQotCWZvciAoaT0wOyBlbDNfaXNhcG5wX2FkYXB0ZXJzW2ldLnZlbmRvciAhPSAwOyBpKyspIHsKLQkJaW50IGo7Ci0JCXdoaWxlICgoaWRldiA9IHBucF9maW5kX2RldihOVUxMLAotCQkJCQkgICAgZWwzX2lzYXBucF9hZGFwdGVyc1tpXS52ZW5kb3IsCi0JCQkJCSAgICBlbDNfaXNhcG5wX2FkYXB0ZXJzW2ldLmZ1bmN0aW9uLAotCQkJCQkgICAgaWRldikpKSB7Ci0JCQlpZiAocG5wX2RldmljZV9hdHRhY2goaWRldikgPCAwKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHBucF9hY3RpdmF0ZV9kZXYoaWRldikgPCAwKSB7Ci1fX2FnYWluOgotCQkJCXBucF9kZXZpY2VfZGV0YWNoKGlkZXYpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKCFwbnBfcG9ydF92YWxpZChpZGV2LCAwKSB8fCAhcG5wX2lycV92YWxpZChpZGV2LCAwKSkKLQkJCQlnb3RvIF9fYWdhaW47Ci0JCQlpb2FkZHIgPSBwbnBfcG9ydF9zdGFydChpZGV2LCAwKTsKLQkJCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBFTDNfSU9fRVhURU5ULCAiM2M1MDkgUG5QIikpIHsKLQkJCQlwbnBfZGV2aWNlX2RldGFjaChpZGV2KTsKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJfQotCQkJaXJxID0gcG5wX2lycShpZGV2LCAwKTsKLQkJCWlmIChlbDNfZGVidWcgPiAzKQotCQkJCXByaW50ayAoIklTQVBuUCByZXBvcnRzICVzIGF0IGkvbyAweCV4LCBpcnEgJWRcbiIsCi0JCQkJCShjaGFyKikgZWwzX2lzYXBucF9hZGFwdGVyc1tpXS5kcml2ZXJfZGF0YSwgaW9hZGRyLCBpcnEpOwotCQkJRUwzV0lORE9XKDApOwotCQkJZm9yIChqID0gMDsgaiA8IDM7IGorKykKLQkJCQllbDNfaXNhcG5wX3BoeXNfYWRkcltwbnBfY2FyZHNdW2pdID0KLQkJCQkJcGh5c19hZGRyW2pdID0KLQkJCQkJCWh0b25zKHJlYWRfZWVwcm9tKGlvYWRkciwgaikpOwotCQkJaWZfcG9ydCA9IHJlYWRfZWVwcm9tKGlvYWRkciwgOCkgPj4gMTQ7Ci0JCQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YgKHN0cnVjdCBlbDNfcHJpdmF0ZSkpOwotCQkJaWYgKCFkZXYpIHsKLQkJCQkJcmVsZWFzZV9yZWdpb24oaW9hZGRyLCBFTDNfSU9fRVhURU5UKTsKLQkJCQkJcG5wX2RldmljZV9kZXRhY2goaWRldik7Ci0JCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQlTRVRfTkVUREVWX0RFVihkZXYsICZpZGV2LT5kZXYpOwotCQkJcG5wX2NhcmRzKys7Ci0KLQkJCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7Ci0JCQlwbnBfZm91bmQgPSAxOwotCQkJZ290byBmb3VuZDsKLQkJfQotCX0KLW5vX3BucDoKLSNlbmRpZiAvKiBfX0lTQVBOUF9fICovCi0KLQkvKiBTZWxlY3QgYW4gb3BlbiBJL08gbG9jYXRpb24gYXQgMHgxKjAgdG8gZG8gY29udGVudGlvbiBzZWxlY3QuICovCi0JZm9yICggOyBpZF9wb3J0IDwgMHgyMDA7IGlkX3BvcnQgKz0gMHgxMCkgewotCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlkX3BvcnQsIDEsICIzYzUwOSIpKQotCQkJY29udGludWU7Ci0JCW91dGIoMHgwMCwgaWRfcG9ydCk7Ci0JCW91dGIoMHhmZiwgaWRfcG9ydCk7Ci0JCWlmIChpbmIoaWRfcG9ydCkgJiAweDAxKXsKLQkJCXJlbGVhc2VfcmVnaW9uKGlkX3BvcnQsIDEpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZQotCQkJcmVsZWFzZV9yZWdpb24oaWRfcG9ydCwgMSk7Ci0JfQotCWlmIChpZF9wb3J0ID49IDB4MjAwKSB7Ci0JCS8qIFJhcmUgLS0gZG8gd2UgcmVhbGx5IG5lZWQgYSB3YXJuaW5nPyAqLwotCQlwcmludGsoIiBXQVJOSU5HOiBObyBJL08gcG9ydCBhdmFpbGFibGUgZm9yIDNjNTA5IGFjdGl2YXRpb24uXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogTmV4dCBjaGVjayBmb3IgYWxsIElTQSBidXMgYm9hcmRzIGJ5IHNlbmRpbmcgdGhlIElEIHNlcXVlbmNlIHRvIHRoZQotCSAgIElEX1BPUlQuICBXZSBmaW5kIGNhcmRzIHBhc3QgdGhlIGZpcnN0IGJ5IHNldHRpbmcgdGhlICdjdXJyZW50X3RhZycKLQkgICBvbiBjYXJkcyBhcyB0aGV5IGFyZSBmb3VuZC4gIENhcmRzIHdpdGggdGhlaXIgdGFnIHNldCB3aWxsIG5vdAotCSAgIHJlc3BvbmQgdG8gc3Vic2VxdWVudCBJRCBzZXF1ZW5jZXMuICovCi0KLQlvdXRiKDB4MDAsIGlkX3BvcnQpOwotCW91dGIoMHgwMCwgaWRfcG9ydCk7Ci0JZm9yKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKLQkJb3V0YihscnNfc3RhdGUsIGlkX3BvcnQpOwotCQlscnNfc3RhdGUgPDw9IDE7Ci0JCWxyc19zdGF0ZSA9IGxyc19zdGF0ZSAmIDB4MTAwID8gbHJzX3N0YXRlIF4gMHhjZiA6IGxyc19zdGF0ZTsKLQl9Ci0KLQkvKiBGb3IgdGhlIGZpcnN0IHByb2JlLCBjbGVhciBhbGwgYm9hcmQncyB0YWcgcmVnaXN0ZXJzLiAqLwotCWlmIChjdXJyZW50X3RhZyA9PSAwKQotCQlvdXRiKDB4ZDAsIGlkX3BvcnQpOwotCWVsc2UJCQkJLyogT3RoZXJ3aXNlIGtpbGwgb2ZmIGFscmVhZHktZm91bmQgYm9hcmRzLiAqLwotCQlvdXRiKDB4ZDgsIGlkX3BvcnQpOwotCi0JaWYgKGlkX3JlYWRfZWVwcm9tKDcpICE9IDB4NmQ1MCkgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBSZWFkIGluIEVFUFJPTSBkYXRhLCB3aGljaCBkb2VzIGNvbnRlbnRpb24tc2VsZWN0LgotCSAgIE9ubHkgdGhlIGxvd2VzdCBhZGRyZXNzIGJvYXJkIHdpbGwgc3RheSAib24tbGluZSIuCi0JICAgM0NvbSBnb3QgdGhlIGJ5dGUgb3JkZXIgYmFja3dhcmRzLiAqLwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcGh5c19hZGRyW2ldID0gaHRvbnMoaWRfcmVhZF9lZXByb20oaSkpOwotCX0KLQotI2lmIGRlZmluZWQoX19JU0FQTlBfXykKLQlpZiAobm9wbnAgPT0gMCkgewotCQkvKiBUaGUgSVNBIFBuUCAzYzUwOSBjYXJkcyByZXNwb25kIHRvIHRoZSBJRCBzZXF1ZW5jZS4KLQkJICAgVGhpcyBjaGVjayBpcyBuZWVkZWQgaW4gb3JkZXIgbm90IHRvIHJlZ2lzdGVyIHRoZW0gdHdpY2UuICovCi0JCWZvciAoaSA9IDA7IGkgPCBwbnBfY2FyZHM7IGkrKykgewotCQkJaWYgKHBoeXNfYWRkclswXSA9PSBlbDNfaXNhcG5wX3BoeXNfYWRkcltpXVswXSAmJgotCQkJICAgIHBoeXNfYWRkclsxXSA9PSBlbDNfaXNhcG5wX3BoeXNfYWRkcltpXVsxXSAmJgotCQkJICAgIHBoeXNfYWRkclsyXSA9PSBlbDNfaXNhcG5wX3BoeXNfYWRkcltpXVsyXSkKLQkJCXsKLQkJCQlpZiAoZWwzX2RlYnVnID4gMykKLQkJCQkJcHJpbnRrKCIzYzUwOSB3aXRoIGFkZHJlc3MgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggd2FzIGZvdW5kIGJ5IElTQVBuUFxuIiwKLQkJCQkJCXBoeXNfYWRkclswXSAmIDB4ZmYsIHBoeXNfYWRkclswXSA+PiA4LAotCQkJCQkJcGh5c19hZGRyWzFdICYgMHhmZiwgcGh5c19hZGRyWzFdID4+IDgsCi0JCQkJCQlwaHlzX2FkZHJbMl0gJiAweGZmLCBwaHlzX2FkZHJbMl0gPj4gOCk7Ci0JCQkJLyogU2V0IHRoZSBhZGFwdG9yIHRhZyBzbyB0aGF0IHRoZSBuZXh0IGNhcmQgY2FuIGJlIGZvdW5kLiAqLwotCQkJCW91dGIoMHhkMCArICsrY3VycmVudF90YWcsIGlkX3BvcnQpOwotCQkJCWdvdG8gbm9fcG5wOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmIC8qIF9fSVNBUE5QX18gKi8KLQotCXsKLQkJdW5zaWduZWQgaW50IGlvYmFzZSA9IGlkX3JlYWRfZWVwcm9tKDgpOwotCQlpZl9wb3J0ID0gaW9iYXNlID4+IDE0OwotCQlpb2FkZHIgPSAweDIwMCArICgoaW9iYXNlICYgMHgxZikgPDwgNCk7Ci0JfQotCWlycSA9IGlkX3JlYWRfZWVwcm9tKDkpID4+IDEyOwotCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mIChzdHJ1Y3QgZWwzX3ByaXZhdGUpKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhkZXYpOwotCi0JLyogU2V0IHBhc3NlZC1pbiBJUlEgb3IgSS9PIEFkZHIuICovCi0JaWYgKGRldi0+aXJxID4gMSAgJiYgIGRldi0+aXJxIDwgMTYpCi0JCQlpcnEgPSBkZXYtPmlycTsKLQotCWlmIChkZXYtPmJhc2VfYWRkcikgewotCQlpZiAoZGV2LT5tZW1fZW5kID09IDB4M2M1MDkgCS8qIE1hZ2ljIGtleSAqLwotCQkgICAgJiYgZGV2LT5iYXNlX2FkZHIgPj0gMHgyMDAgICYmICBkZXYtPmJhc2VfYWRkciA8PSAweDNlMCkKLQkJCWlvYWRkciA9IGRldi0+YmFzZV9hZGRyICYgMHgzZjA7Ci0JCWVsc2UgaWYgKGRldi0+YmFzZV9hZGRyICE9IGlvYWRkcikKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBFTDNfSU9fRVhURU5ULCAiM2M1MDkiKSkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFNldCB0aGUgYWRhcHRvciB0YWcgc28gdGhhdCB0aGUgbmV4dCBjYXJkIGNhbiBiZSBmb3VuZC4gKi8KLQlvdXRiKDB4ZDAgKyArK2N1cnJlbnRfdGFnLCBpZF9wb3J0KTsKLQotCS8qIEFjdGl2YXRlIHRoZSBhZGFwdG9yIGF0IHRoZSBFRVBST00gbG9jYXRpb24uICovCi0Jb3V0YigoaW9hZGRyID4+IDQpIHwgMHhlMCwgaWRfcG9ydCk7Ci0KLQlFTDNXSU5ET1coMCk7Ci0JaWYgKGludyhpb2FkZHIpICE9IDB4NmQ1MCkKLQkJZ290byBvdXQxOwotCi0JLyogRnJlZSB0aGUgaW50ZXJydXB0IHNvIHRoYXQgc29tZSBvdGhlciBjYXJkIGNhbiB1c2UgaXQuICovCi0Jb3V0dygweDBmMDAsIGlvYWRkciArIFdOMF9JUlEpOwotCi0jaWYgZGVmaW5lZChfX0lTQVBOUF9fKQotIGZvdW5kOgkJCQkJCQkvKiBQTlAganVtcHMgaGVyZS4uLiAqLwotI2VuZGlmIC8qIF9fSVNBUE5QX18gKi8KLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBwaHlzX2FkZHIsIHNpemVvZihwaHlzX2FkZHIpKTsKLQlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKLQlkZXYtPmlycSA9IGlycTsKLQlkZXYtPmlmX3BvcnQgPSBpZl9wb3J0OwotCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSNpZiBkZWZpbmVkKF9fSVNBUE5QX18pCi0JbHAtPmRldiA9ICZpZGV2LT5kZXY7Ci0JaWYgKHBucF9mb3VuZCkKLQkJbHAtPnR5cGUgPSBFTDNfUE5QOwotI2VuZGlmCi0JZXJyID0gZWwzX2NvbW1vbl9pbml0KGRldik7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIG91dDE7Ci0KLQllbDNfY2FyZHMrKzsKLQlscC0+bmV4dF9kZXYgPSBlbDNfcm9vdF9kZXY7Ci0JZWwzX3Jvb3RfZGV2ID0gZGV2OwotCXJldHVybiAwOwotCi1vdXQxOgotI2lmIGRlZmluZWQoX19JU0FQTlBfXykKLQlpZiAoaWRldikKLQkJcG5wX2RldmljZV9kZXRhY2goaWRldik7Ci0jZW5kaWYKLW91dDoKLQlmcmVlX25ldGRldihkZXYpOwotCXJldHVybiBlcnI7Ci19Ci0KICNpZmRlZiBDT05GSUdfTUNBCiBzdGF0aWMgaW50IF9faW5pdCBlbDNfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKQEAgLTU5Niw3ICs2MDQsNiBAQAogCSAqIHJlZG9uZSBmb3IgbXVsdGktY2FyZCBkZXRlY3Rpb24gYnkgWlAgR3UgKHpwZ0BjYXN0bGUubmV0KQogCSAqIG5vdyB3b3JrcyBhcyBhIG1vZHVsZSAqLwogCi0Jc3RydWN0IGVsM19wcml2YXRlICpscDsKIAlzaG9ydCBpOwogCWludCBpb2FkZHIsIGlycSwgaWZfcG9ydDsKIAl1MTYgcGh5c19hZGRyWzNdOwpAQCAtNjEzLDcgKzYyMCw3IEBACiAJaXJxID0gcG9zNSAmIDB4MGY7CiAKIAotCXByaW50aygiM2M1Mjk6IGZvdW5kICVzIGF0IHNsb3QgJWRcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiM2M1Mjk6IGZvdW5kICVzIGF0IHNsb3QgJWRcbiIsCiAJCSAgIGVsM19tY2FfYWRhcHRlcl9uYW1lc1ttZGV2LT5pbmRleF0sIHNsb3QgKyAxKTsKIAogCS8qIGNsYWltIHRoZSBzbG90ICovCkBAIC02MjYsNyArNjMzLDcgQEAKIAlpcnEgPSBtY2FfZGV2aWNlX3RyYW5zZm9ybV9pcnEobWRldiwgaXJxKTsKIAlpb2FkZHIgPSBtY2FfZGV2aWNlX3RyYW5zZm9ybV9pb3BvcnQobWRldiwgaW9hZGRyKTsKIAlpZiAoZWwzX2RlYnVnID4gMikgewotCQkJcHJpbnRrKCIzYzUyOTogaXJxICVkICBpb2FkZHIgMHgleCAgaWZwb3J0ICVkXG4iLCBpcnEsIGlvYWRkciwgaWZfcG9ydCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiM2M1Mjk6IGlycSAlZCAgaW9hZGRyIDB4JXggIGlmcG9ydCAlZFxuIiwgaXJxLCBpb2FkZHIsIGlmX3BvcnQpOwogCX0KIAlFTDNXSU5ET1coMCk7CiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewpAQCAtNjQxLDEzICs2NDgsNyBAQAogCiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIAotCW1lbWNweShkZXYtPmRldl9hZGRyLCBwaHlzX2FkZHIsIHNpemVvZihwaHlzX2FkZHIpKTsKLQlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKLQlkZXYtPmlycSA9IGlycTsKLQlkZXYtPmlmX3BvcnQgPSBpZl9wb3J0OwotCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlscC0+ZGV2ID0gZGV2aWNlOwotCWxwLT50eXBlID0gRUwzX01DQTsKKwllbDNfZGV2X2ZpbGwoZGV2LCBwaHlzX2FkZHIsIGlvYWRkciwgaXJxLCBpZl9wb3J0LCBFTDNfTUNBKTsKIAlkZXZpY2UtPmRyaXZlcl9kYXRhID0gZGV2OwogCWVyciA9IGVsM19jb21tb25faW5pdChkZXYpOwogCkBAIC02NTcsNyArNjU4LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZWwzX2NhcmRzKys7CisJZWwzX2RldnNbZWwzX2NhcmRzKytdID0gZGV2OwogCXJldHVybiAwOwogfQogCkBAIC02NjYsNyArNjY3LDYgQEAKICNpZmRlZiBDT05GSUdfRUlTQQogc3RhdGljIGludCBfX2luaXQgZWwzX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwOwogCXNob3J0IGk7CiAJaW50IGlvYWRkciwgaXJxLCBpZl9wb3J0OwogCXUxNiBwaHlzX2FkZHJbM107CkBAIC02NzgsNyArNjc4LDcgQEAKIAllZGV2ID0gdG9fZWlzYV9kZXZpY2UgKGRldmljZSk7CiAJaW9hZGRyID0gZWRldi0+YmFzZV9hZGRyOwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIEVMM19JT19FWFRFTlQsICIzYzUwOSIpKQorCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBFTDNfSU9fRVhURU5ULCAiM2M1NzktZWlzYSIpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQ2hhbmdlIHRoZSByZWdpc3RlciBzZXQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gd2luZG93IDAuICovCkBAIC03MDAsMTMgKzcwMCw3IEBACiAKIAluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhkZXYpOwogCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBoeXNfYWRkciwgc2l6ZW9mKHBoeXNfYWRkcikpOwotCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOwotCWRldi0+aXJxID0gaXJxOwotCWRldi0+aWZfcG9ydCA9IGlmX3BvcnQ7Ci0JbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxwLT5kZXYgPSBkZXZpY2U7Ci0JbHAtPnR5cGUgPSBFTDNfRUlTQTsKKwllbDNfZGV2X2ZpbGwoZGV2LCBwaHlzX2FkZHIsIGlvYWRkciwgaXJxLCBpZl9wb3J0LCBFTDNfRUlTQSk7CiAJZWlzYV9zZXRfZHJ2ZGF0YSAoZWRldiwgZGV2KTsKIAllcnIgPSBlbDNfY29tbW9uX2luaXQoZGV2KTsKIApAQCAtNzE2LDEyICs3MTAsMTEgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQllbDNfY2FyZHMrKzsKKwllbDNfZGV2c1tlbDNfY2FyZHMrK10gPSBkZXY7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKIC8qIFRoaXMgcmVtb3ZlIHdvcmtzIGZvciBhbGwgZGV2aWNlIHR5cGVzLgogICoKICAqIFRoZSBuZXQgZGV2IG11c3QgYmUgc3RvcmVkIGluIHRoZSBkcml2ZXJfZGF0YSBmaWVsZCAqLwpAQCAtNzM0LDcgKzcyNyw2IEBACiAJZWwzX2NvbW1vbl9yZW1vdmUgKGRldik7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogLyogUmVhZCBhIHdvcmQgZnJvbSB0aGUgRUVQUk9NIHVzaW5nIHRoZSByZWd1bGFyIEVFUFJPTSBhY2Nlc3MgcmVnaXN0ZXIuCiAgICBBc3N1bWUgdGhhdCB3ZSBhcmUgaW4gcmVnaXN0ZXIgd2luZG93IHplcm8uCkBAIC03NDksNyArNzQxLDcgQEAKIH0KIAogLyogUmVhZCBhIHdvcmQgZnJvbSB0aGUgRUVQUk9NIHdoZW4gaW4gdGhlIElTQSBJRCBwcm9iZSBzdGF0ZS4gKi8KLXN0YXRpYyB1c2hvcnQgX19pbml0IGlkX3JlYWRfZWVwcm9tKGludCBpbmRleCkKK3N0YXRpYyB1c2hvcnQgaWRfcmVhZF9lZXByb20oaW50IGluZGV4KQogewogCWludCBiaXQsIHdvcmQgPSAwOwogCkBAIC03NjUsNyArNzU3LDcgQEAKIAkJd29yZCA9ICh3b3JkIDw8IDEpICsgKGluYihpZF9wb3J0KSAmIDB4MDEpOwogCiAJaWYgKGVsM19kZWJ1ZyA+IDMpCi0JCXByaW50aygiICAzYzUwOSBFRVBST00gd29yZCAlZCAlIzQuNHguXG4iLCBpbmRleCwgd29yZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgIDNjNTA5IEVFUFJPTSB3b3JkICVkICUjNC40eC5cbiIsIGluZGV4LCB3b3JkKTsKIAogCXJldHVybiB3b3JkOwogfQpAQCAtNzg3LDEzICs3NzksMTMgQEAKIAogCUVMM1dJTkRPVygwKTsKIAlpZiAoZWwzX2RlYnVnID4gMykKLQkJcHJpbnRrKCIlczogT3BlbmluZywgSVJRICVkCSBzdGF0dXNAJXggJTQuNHguXG4iLCBkZXYtPm5hbWUsCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogT3BlbmluZywgSVJRICVkCSBzdGF0dXNAJXggJTQuNHguXG4iLCBkZXYtPm5hbWUsCiAJCQkgICBkZXYtPmlycSwgaW9hZGRyICsgRUwzX1NUQVRVUywgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKIAogCWVsM191cChkZXYpOwogCiAJaWYgKGVsM19kZWJ1ZyA+IDMpCi0JCXByaW50aygiJXM6IE9wZW5lZCAzYzUwOSAgSVJRICVkICBzdGF0dXMgJTQuNHguXG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE9wZW5lZCAzYzUwOSAgSVJRICVkICBzdGF0dXMgJTQuNHguXG4iLAogCQkJICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKIAogCXJldHVybiAwOwpAQCAtODA2LDcgKzc5OCw3IEBACiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCiAJLyogVHJhbnNtaXR0ZXIgdGltZW91dCwgc2VyaW91cyBwcm9ibGVtcy4gKi8KLQlwcmludGsoIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsIFR4X3N0YXR1cyAlMi4yeCBzdGF0dXMgJTQuNHggIgorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsIFR4X3N0YXR1cyAlMi4yeCBzdGF0dXMgJTQuNHggIgogCQkgICAiVHggRklGTyByb29tICVkLlxuIiwKIAkJICAgZGV2LT5uYW1lLCBpbmIoaW9hZGRyICsgVFhfU1RBVFVTKSwgaW53KGlvYWRkciArIEVMM19TVEFUVVMpLAogCQkgICBpbncoaW9hZGRyICsgVFhfRlJFRSkpOwpAQCAtODMxLDcgKzgyMyw3IEBACiAJbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJaWYgKGVsM19kZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKCIlczogZWwzX3N0YXJ0X3htaXQobGVuZ3RoID0gJXUpIGNhbGxlZCwgc3RhdHVzICU0LjR4LlxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlbDNfc3RhcnRfeG1pdChsZW5ndGggPSAldSkgY2FsbGVkLCBzdGF0dXMgJTQuNHguXG4iLAogCQkJICAgZGV2LT5uYW1lLCBza2ItPmxlbiwgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKIAl9CiAjaWYgMApAQCAtODQwLDcgKzgzMiw3IEBACiAJCXVzaG9ydCBzdGF0dXMgPSBpbncoaW9hZGRyICsgRUwzX1NUQVRVUyk7CiAJCWlmIChzdGF0dXMgJiAweDAwMDEgCQkvKiBJUlEgbGluZSBhY3RpdmUsIG1pc3NlZCBvbmUuICovCiAJCQkmJiBpbncoaW9hZGRyICsgRUwzX1NUQVRVUykgJiAxKSB7IAkJCS8qIE1ha2Ugc3VyZS4gKi8KLQkJCXByaW50aygiJXM6IE1pc3NlZCBpbnRlcnJ1cHQsIHN0YXR1cyB0aGVuICUwNHggbm93ICUwNHgiCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1pc3NlZCBpbnRlcnJ1cHQsIHN0YXR1cyB0aGVuICUwNHggbm93ICUwNHgiCiAJCQkJICAgIiAgVHggJTIuMnggUnggJTQuNHguXG4iLCBkZXYtPm5hbWUsIHN0YXR1cywKIAkJCQkgICBpbncoaW9hZGRyICsgRUwzX1NUQVRVUyksIGluYihpb2FkZHIgKyBUWF9TVEFUVVMpLAogCQkJCSAgIGludyhpb2FkZHIgKyBSWF9TVEFUVVMpKTsKQEAgLTkxNCw3ICs5MDYsNyBAQAogCiAJaWYgKGVsM19kZWJ1ZyA+IDQpIHsKIAkJc3RhdHVzID0gaW53KGlvYWRkciArIEVMM19TVEFUVVMpOwotCQlwcmludGsoIiVzOiBpbnRlcnJ1cHQsIHN0YXR1cyAlNC40eC5cbiIsIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnRlcnJ1cHQsIHN0YXR1cyAlNC40eC5cbiIsIGRldi0+bmFtZSwgc3RhdHVzKTsKIAl9CiAKIAl3aGlsZSAoKHN0YXR1cyA9IGludyhpb2FkZHIgKyBFTDNfU1RBVFVTKSkgJgpAQCAtOTI1LDcgKzkxNyw3IEBACiAKIAkJaWYgKHN0YXR1cyAmIFR4QXZhaWxhYmxlKSB7CiAJCQlpZiAoZWwzX2RlYnVnID4gNSkKLQkJCQlwcmludGsoIglUWCByb29tIGJpdCB3YXMgaGFuZGxlZC5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICIJVFggcm9vbSBiaXQgd2FzIGhhbmRsZWQuXG4iKTsKIAkJCS8qIFRoZXJlJ3Mgcm9vbSBpbiB0aGUgRklGTyBmb3IgYSBmdWxsLXNpemVkIHBhY2tldC4gKi8KIAkJCW91dHcoQWNrSW50ciB8IFR4QXZhaWxhYmxlLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAkJCW5ldGlmX3dha2VfcXVldWUgKGRldik7CkBAIC05NjQsNyArOTU2LDcgQEAKIAkJfQogCiAJCWlmICgtLWkgPCAwKSB7Ci0JCQlwcmludGsoIiVzOiBJbmZpbml0ZSBsb29wIGluIGludGVycnVwdCwgc3RhdHVzICU0LjR4LlxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEluZmluaXRlIGxvb3AgaW4gaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAogCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKIAkJCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzLiAqLwogCQkJb3V0dyhBY2tJbnRyIHwgMHhGRiwgaW9hZGRyICsgRUwzX0NNRCk7CkBAIC05NzUsNyArOTY3LDcgQEAKIAl9CiAKIAlpZiAoZWwzX2RlYnVnID4gNCkgewotCQlwcmludGsoIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzICU0LjR4LlxuIiwgZGV2LT5uYW1lLAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLCBkZXYtPm5hbWUsCiAJCQkgICBpbncoaW9hZGRyICsgRUwzX1NUQVRVUykpOwogCX0KIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwpAQCAtMTQ1MCw3ICsxNDQyLDcgQEAKIH0KIAogLyogUG93ZXIgTWFuYWdlbWVudCBzdXBwb3J0IGZ1bmN0aW9ucyAqLwotI2lmZGVmIEVMM19TVVNQRU5ECisjaWZkZWYgQ09ORklHX1BNCiAKIHN0YXRpYyBpbnQKIGVsM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTE1MDAsNzkgKzE0OTIsMTAyIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBFTDNfU1VTUEVORCAqLwotCi0vKiBQYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIHBhc3NlZCBpbnRvIHRoZSBtb2R1bGUuICovCi1zdGF0aWMgaW50IGRlYnVnID0gLTE7Ci1zdGF0aWMgaW50IGlycVtdID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07Ci1zdGF0aWMgaW50IHhjdnJbXSA9IHstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogbW9kdWxlX3BhcmFtKGRlYnVnLGludCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KHhjdnIsIGludCwgTlVMTCwgMCk7CiBtb2R1bGVfcGFyYW0obWF4X2ludGVycnVwdF93b3JrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsICgwLTYpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSBudW1iZXIocykgKGFzc2lnbmVkKSIpOwotTU9EVUxFX1BBUk1fREVTQyh4Y3ZyLCJ0cmFuc2NlaXZlcihzKSAoMD1pbnRlcm5hbCwgMT1leHRlcm5hbCkiKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2ludGVycnVwdF93b3JrLCAibWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7Ci0jaWYgZGVmaW5lZChfX0lTQVBOUF9fKQorI2lmZGVmIENPTkZJR19QTlAKIG1vZHVsZV9wYXJhbShub3BucCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9wbnAsICJkaXNhYmxlIElTQSBQblAgc3VwcG9ydCAoMC0xKSIpOwotTU9EVUxFX0RFVklDRV9UQUJMRShpc2FwbnAsIGVsM19pc2FwbnBfYWRhcHRlcnMpOwotI2VuZGlmCS8qIF9fSVNBUE5QX18gKi8KLU1PRFVMRV9ERVNDUklQVElPTigiM0NvbSBFdGhlcmxpbmsgSUlJICgzYzUwOSwgM2M1MDlCKSBJU0EvUG5QIGV0aGVybmV0IGRyaXZlciIpOworI2VuZGlmCS8qIENPTkZJR19QTlAgKi8KK01PRFVMRV9ERVNDUklQVElPTigiM0NvbSBFdGhlcmxpbmsgSUlJICgzYzUwOSwgM2M1MDlCLCAzYzUyOSwgM2M1NzkpIGV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBlbDNfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQllbDNfY2FyZHMgPSAwOwogCiAJaWYgKGRlYnVnID49IDApCiAJCWVsM19kZWJ1ZyA9IGRlYnVnOwogCi0JZWwzX3Jvb3RfZGV2ID0gTlVMTDsKLQl3aGlsZSAoZWwzX3Byb2JlKGVsM19jYXJkcykgPT0gMCkgewotCQlpZiAoaXJxW2VsM19jYXJkc10gPiAxKQotCQkJZWwzX3Jvb3RfZGV2LT5pcnEgPSBpcnFbZWwzX2NhcmRzXTsKLQkJaWYgKHhjdnJbZWwzX2NhcmRzXSA+PSAwKQotCQkJZWwzX3Jvb3RfZGV2LT5pZl9wb3J0ID0geGN2cltlbDNfY2FyZHNdOwotCQllbDNfY2FyZHMrKzsKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKCFub3BucCkgeworCQlyZXQgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZlbDNfcG5wX2RyaXZlcik7CisJCWlmICghcmV0KQorCQkJcG5wX3JlZ2lzdGVyZWQgPSAxOwogCX0KLQorI2VuZGlmCisJLyogU2VsZWN0IGFuIG9wZW4gSS9PIGxvY2F0aW9uIGF0IDB4MSowIHRvIGRvIElTQSBjb250ZW50aW9uIHNlbGVjdC4gKi8KKwkvKiBTdGFydCB3aXRoIDB4MTEwIHRvIGF2b2lkIHNvbWUgc291bmQgY2FyZHMuKi8KKwlmb3IgKGlkX3BvcnQgPSAweDExMCA7IGlkX3BvcnQgPCAweDIwMDsgaWRfcG9ydCArPSAweDEwKSB7CisJCWlmICghcmVxdWVzdF9yZWdpb24oaWRfcG9ydCwgMSwgIjNjNTA5LWNvbnRyb2wiKSkKKwkJCWNvbnRpbnVlOworCQlvdXRiKDB4MDAsIGlkX3BvcnQpOworCQlvdXRiKDB4ZmYsIGlkX3BvcnQpOworCQlpZiAoaW5iKGlkX3BvcnQpICYgMHgwMSkKKwkJCWJyZWFrOworCQllbHNlCisJCQlyZWxlYXNlX3JlZ2lvbihpZF9wb3J0LCAxKTsKKwl9CisJaWYgKGlkX3BvcnQgPj0gMHgyMDApIHsKKwkJaWRfcG9ydCA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gSS9PIHBvcnQgYXZhaWxhYmxlIGZvciAzYzUwOSBhY3RpdmF0aW9uLlxuIik7CisJfSBlbHNlIHsKKwkJcmV0ID0gaXNhX3JlZ2lzdGVyX2RyaXZlcigmZWwzX2lzYV9kcml2ZXIsIEVMM19NQVhfQ0FSRFMpOworCQlpZiAoIXJldCkKKwkJCWlzYV9yZWdpc3RlcmVkID0gMTsKKwl9CiAjaWZkZWYgQ09ORklHX0VJU0EKIAlyZXQgPSBlaXNhX2RyaXZlcl9yZWdpc3RlcigmZWwzX2Vpc2FfZHJpdmVyKTsKKwlpZiAoIXJldCkKKwkJZWlzYV9yZWdpc3RlcmVkID0gMTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19NQ0EKLQl7Ci0JCWludCBlcnIgPSBtY2FfcmVnaXN0ZXJfZHJpdmVyKCZlbDNfbWNhX2RyaXZlcik7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IGVycjsKLQl9CisJcmV0ID0gbWNhX3JlZ2lzdGVyX2RyaXZlcigmZWwzX21jYV9kcml2ZXIpOworCWlmICghcmV0KQorCQltY2FfcmVnaXN0ZXJlZCA9IDE7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAocG5wX3JlZ2lzdGVyZWQpCisJCXJldCA9IDA7CisjZW5kaWYKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisJCXJldCA9IDA7CisjaWZkZWYgQ09ORklHX0VJU0EKKwlpZiAoZWlzYV9yZWdpc3RlcmVkKQorCQlyZXQgPSAwOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01DQQorCWlmIChtY2FfcmVnaXN0ZXJlZCkKKwkJcmV0ID0gMDsKICNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBlbDNfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV4dF9kZXY7Ci0KLQl3aGlsZSAoZWwzX3Jvb3RfZGV2KSB7Ci0JCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihlbDNfcm9vdF9kZXYpOwotCi0JCW5leHRfZGV2ID0gbHAtPm5leHRfZGV2OwotCQllbDNfY29tbW9uX3JlbW92ZSAoZWwzX3Jvb3RfZGV2KTsKLQkJZWwzX3Jvb3RfZGV2ID0gbmV4dF9kZXY7Ci0JfQotCisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChwbnBfcmVnaXN0ZXJlZCkKKwkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZlbDNfcG5wX2RyaXZlcik7CisjZW5kaWYKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisJCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmZWwzX2lzYV9kcml2ZXIpOworCWlmIChpZF9wb3J0KQorCQlyZWxlYXNlX3JlZ2lvbihpZF9wb3J0LCAxKTsKICNpZmRlZiBDT05GSUdfRUlTQQotCWVpc2FfZHJpdmVyX3VucmVnaXN0ZXIgKCZlbDNfZWlzYV9kcml2ZXIpOworCWlmIChlaXNhX3JlZ2lzdGVyZWQpCisJCWVpc2FfZHJpdmVyX3VucmVnaXN0ZXIoJmVsM19laXNhX2RyaXZlcik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUNBCi0JbWNhX3VucmVnaXN0ZXJfZHJpdmVyKCZlbDNfbWNhX2RyaXZlcik7CisJaWYgKG1jYV9yZWdpc3RlcmVkKQorCQltY2FfdW5yZWdpc3Rlcl9kcml2ZXIoJmVsM19tY2FfZHJpdmVyKTsKICNlbmRpZgogfQogCiBtb2R1bGVfaW5pdCAoZWwzX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0IChlbDNfY2xlYW51cF9tb2R1bGUpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCBiNzJiODlkLi5mYWUyOTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTEwMyw4ICsxMDMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggYmU2ZTkxOC4uNTNiZDkwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtOTY2LDggKzk2Niw4IEBACiAKIAlhZGRyX2xlbiA9IHJlYWRfZWVwcm9tIChpb2FkZHIsIDAsIDgpID09IDB4ODEyOSA/IDggOiA2OwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCSgodTE2ICopIChkZXYtPmRldl9hZGRyKSlbaV0gPQotCQkgICAgbGUxNl90b19jcHUgKHJlYWRfZWVwcm9tIChpb2FkZHIsIGkgKyA3LCBhZGRyX2xlbikpOworCQkoKF9fbGUxNiAqKSAoZGV2LT5kZXZfYWRkcikpW2ldID0KKwkJICAgIGNwdV90b19sZTE2KHJlYWRfZWVwcm9tIChpb2FkZHIsIGkgKyA3LCBhZGRyX2xlbikpOwogCW1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAKIAkvKiBUaGUgUnRsODEzOS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwpAQCAtMTM3Myw4ICsxMzczLDggQEAKIAkvKiB1bmxvY2sgQ29uZmlnWzAxMjM0XSBhbmQgQk1DUiByZWdpc3RlciB3cml0ZXMgKi8KIAlSVExfVzhfRiAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwogCS8qIFJlc3RvcmUgb3VyIGlkZWEgb2YgdGhlIE1BQyBhZGRyZXNzLiAqLwotCVJUTF9XMzJfRiAoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSk7Ci0JUlRMX1czMl9GIChNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtPmRldl9hZGRyICsgNCkpKTsKKwlSVExfVzMyX0YgKE1BQzAgKyAwLCBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKikgKGRldi0+ZGV2X2FkZHIgKyAwKSkpOworCVJUTF9XMzJfRiAoTUFDMCArIDQsIGxlMTZfdG9fY3B1ICgqKF9fbGUxNiAqKSAoZGV2LT5kZXZfYWRkciArIDQpKSk7CiAKIAkvKiBNdXN0IGVuYWJsZSBUeC9SeCBiZWZvcmUgc2V0dGluZyB0cmFuc2ZlciB0aHJlc2hvbGRzISAqLwogCVJUTF9XOCAoQ2hpcENtZCwgQ21kUnhFbmIgfCBDbWRUeEVuYik7CkBAIC0xOTQ1LDcgKzE5NDUsNyBAQAogCQlybWIoKTsKIAogCQkvKiByZWFkIHNpemUrc3RhdHVzIG9mIG5leHQgZnJhbWUgZnJvbSBETUEgcmluZyBidWZmZXIgKi8KLQkJcnhfc3RhdHVzID0gbGUzMl90b19jcHUgKCoodTMyICopIChyeF9yaW5nICsgcmluZ19vZmZzZXQpKTsKKwkJcnhfc3RhdHVzID0gbGUzMl90b19jcHUgKCooX19sZTMyICopIChyeF9yaW5nICsgcmluZ19vZmZzZXQpKTsKIAkJcnhfc2l6ZSA9IHJ4X3N0YXR1cyA+PiAxNjsKIAkJcGt0X3NpemUgPSByeF9zaXplIC0gNDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODM5MC5jIGIvZHJpdmVycy9uZXQvODM5MC5jCmluZGV4IGE4MjgwNzYuLmE0OTllODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgzOTAuYworKysgYi9kcml2ZXJzL25ldC84MzkwLmMKQEAgLTQ4LDE0ICs0OCwxNiBAQAogCiAjaWYgZGVmaW5lZChNT0RVTEUpCiAKLWludCBpbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbnM4MzkwX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBuczgzOTBfbW9kdWxlX2V4aXQodm9pZCkKIHsKIH0KIAorbW9kdWxlX2luaXQobnM4MzkwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KG5zODM5MF9tb2R1bGVfZXhpdCk7CiAjZW5kaWYgLyogTU9EVUxFICovCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBmMzM3ODAwLi4yMzk5YTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTkwLDYgKzkwLDExIEBACiAJICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IG1hcCBwYWNrZXRzIHRvCiAJICBvciBmcm9tIHNwZWNpZmljIE1BQyBhZGRyZXNzZXMgdG8gYSBwYXJ0aWN1bGFyIGludGVyZmFjZS4KIAorCSAgTWFjdmxhbiBkZXZpY2VzIGNhbiBiZSBhZGRlZCB1c2luZyB0aGUgImlwIiBjb21tYW5kIGZyb20gdGhlCisJICBpcHJvdXRlMiBwYWNrYWdlIHN0YXJ0aW5nIHdpdGggdGhlIGlwcm91dGUyLTIuNi4yMyByZWxlYXNlOgorCisJICAiaXAgbGluayBhZGQgbGluayA8cmVhbCBkZXY+IFsgYWRkcmVzcyBNQUMgXSBbIE5BTUUgXSB0eXBlIG1hY3ZsYW4iCisKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG1hY3ZsYW4uCiAKQEAgLTQ2Miw2ICs0NjcsMTMgQEAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgb24tYm9hcmQgSW50ZWwgODI1OTYgZXRoZXJuZXQgY29udHJvbGxlcgogCSAgYnVpbHQgaW50byBTTkkgUk0gbWFjaGluZXMuCiAKK2NvbmZpZyBLT1JJTkEKKwl0cmlzdGF0ZSAiS29yaW5hIChJRFQgUkMzMjQzNCkgRXRoZXJuZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBNSUtST1RJS19SQjUwMAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgTWlrcm90aWsgUm91dGVyQm9hcmQgNTAwIG9yIElEVCBSQzMyNDM0CisJICBiYXNlZCBzeXN0ZW0gc2F5IFkuIE90aGVyd2lzZSBzYXkgTi4KKwogY29uZmlnIE1JUFNfSkFaWl9TT05JQwogCXRyaXN0YXRlICJNSVBTIEpBWlogb25ib2FyZCBTT05JQyBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gTUFDSF9KQVpaCkBAIC0xNDI2LDcgKzE0MzgsNyBAQAogY29uZmlnIFRDMzU4MTUKIAl0cmlzdGF0ZSAiVE9TSElCQSBUQzM1ODE1IEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORVRfUENJICYmIFBDSSAmJiBNSVBTCi0Jc2VsZWN0IE1JSQorCXNlbGVjdCBQSFlMSUIKIAogY29uZmlnIEVFUFJPMTAwCiAJdHJpc3RhdGUgIkV0aGVyRXhwcmVzc1Byby8xMDAgc3VwcG9ydCAoZWVwcm8xMDAsIG9yaWdpbmFsIEJlY2tlciBkcml2ZXIpIgpAQCAtMjIxNSw5MyArMjIyNyw2IEBACiAKIAkgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFNLOThMSU4KLQl0cmlzdGF0ZSAiTWFydmVsbCBZdWtvbiBDaGlwc2V0IC8gU3lzS29ubmVjdCBTSy05OHh4IFN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gUENJCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIE1hcnZlbGwgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4L1NLLTk1eHgKLQkgIGNvbXBsaWFudCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIuCi0KLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBvcmlnaW5hbCBZdWtvbiBjaGlwc2V0LiBUaGlzIGRyaXZlciBpcwotCSAgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCBpbiB0aGUgbmVhciBmdXR1cmUsCi0JICBpdCBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgc2tnZSBkcml2ZXIuIHNrZ2UgaXMgY2xlYW5lciBhbmQKLQkgIHNlZW1zIHRvIHdvcmsgYmV0dGVyLgotCi0JICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBuZXdlciBZdWtvbjIgY2hpcHNldC4gQSBzZXBhcmF0ZQotCSAgZHJpdmVyLCBza3kyLCBpcyBwcm92aWRlZCB0byBzdXBwb3J0IFl1a29uMi1iYXNlZCBhZGFwdGVycy4KLQotCSAgVGhlIGZvbGxvd2luZyBhZGFwdGVycyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyOgotCSAgICAtIDNDb20gM0M5NDAgR2lnYWJpdCBMT00gRXRoZXJuZXQgQWRhcHRlcgotCSAgICAtIDNDb20gM0M5NDEgR2lnYWJpdCBMT00gRXRoZXJuZXQgQWRhcHRlcgotCSAgICAtIEFsbGllZCBUZWxlc3luIEFULTI5NzBMWCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLQkgICAgLSBBbGxpZWQgVGVsZXN5biBBVC0yOTcwTFgvMlNDIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotCSAgICAtIEFsbGllZCBUZWxlc3luIEFULTI5NzBTWCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLQkgICAgLSBBbGxpZWQgVGVsZXN5biBBVC0yOTcwU1gvMlNDIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotCSAgICAtIEFsbGllZCBUZWxlc3luIEFULTI5NzBUWCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLQkgICAgLSBBbGxpZWQgVGVsZXN5biBBVC0yOTcwVFgvMlRYIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotCSAgICAtIEFsbGllZCBUZWxlc3luIEFULTI5NzFTWCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLQkgICAgLSBBbGxpZWQgVGVsZXN5biBBVC0yOTcxVCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLQkgICAgLSBCZWxraW4gR2lnYWJpdCBEZXNrdG9wIENhcmQgMTAvMTAwLzEwMDBCYXNlLVQgQWRhcHRlciwgQ29wcGVyIFJKLTQ1Ci0JICAgIC0gRUcxMDMyIHYyIEluc3RhbnQgR2lnYWJpdCBOZXR3b3JrIEFkYXB0ZXIKLQkgICAgLSBFRzEwNjQgdjIgSW5zdGFudCBHaWdhYml0IE5ldHdvcmsgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgODhFODAwMSBHaWdhYml0IExPTSBFdGhlcm5ldCBBZGFwdGVyIChBYml0KQotCSAgICAtIE1hcnZlbGwgODhFODAwMSBHaWdhYml0IExPTSBFdGhlcm5ldCBBZGFwdGVyIChBbGJhdHJvbikKLQkgICAgLSBNYXJ2ZWxsIDg4RTgwMDEgR2lnYWJpdCBMT00gRXRoZXJuZXQgQWRhcHRlciAoQXN1cykKLQkgICAgLSBNYXJ2ZWxsIDg4RTgwMDEgR2lnYWJpdCBMT00gRXRoZXJuZXQgQWRhcHRlciAoRUNTKQotCSAgICAtIE1hcnZlbGwgODhFODAwMSBHaWdhYml0IExPTSBFdGhlcm5ldCBBZGFwdGVyIChFcG94KQotCSAgICAtIE1hcnZlbGwgODhFODAwMSBHaWdhYml0IExPTSBFdGhlcm5ldCBBZGFwdGVyIChGb3hjb25uKQotCSAgICAtIE1hcnZlbGwgODhFODAwMSBHaWdhYml0IExPTSBFdGhlcm5ldCBBZGFwdGVyIChHaWdhYnl0ZSkKLQkgICAgLSBNYXJ2ZWxsIDg4RTgwMDEgR2lnYWJpdCBMT00gRXRoZXJuZXQgQWRhcHRlciAoSXdpbGwpCi0JICAgIC0gTWFydmVsbCA4OEU4MDUwIEdpZ2FiaXQgTE9NIEV0aGVybmV0IEFkYXB0ZXIgKEludGVsKQotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDEgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDIgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDMgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDQgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDYgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDcgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDggQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMDkgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMTAgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMTEgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwMTIgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgUkRLLTgwNTIgQWRhcHRlcgotCSAgICAtIE1hcnZlbGwgWXVrb24gR2lnYWJpdCBFdGhlcm5ldCAxMC8xMDAvMTAwMEJhc2UtVCBBZGFwdGVyICgzMiBiaXQpCi0JICAgIC0gTWFydmVsbCBZdWtvbiBHaWdhYml0IEV0aGVybmV0IDEwLzEwMC8xMDAwQmFzZS1UIEFkYXB0ZXIgKDY0IGJpdCkKLQkgICAgLSBOLVdheSBQQ0ktQnVzIEdpZ2EtQ2FyZCAxMDAwLzEwMC8xME1icHMoTCkKLQkgICAgLSBTSy05NTIxIDEwLzEwMC8xMDAwQmFzZS1UIEFkYXB0ZXIKLQkgICAgLSBTSy05NTIxIFYyLjAgMTAvMTAwLzEwMDBCYXNlLVQgQWRhcHRlcgotCSAgICAtIFNLLTk4MjEgR2lnYWJpdCBFdGhlcm5ldCBTZXJ2ZXIgQWRhcHRlciAoU0stTkVUIEdFLVQpCi0JICAgIC0gU0stOTgyMSBWMi4wIEdpZ2FiaXQgRXRoZXJuZXQgMTAvMTAwLzEwMDBCYXNlLVQgQWRhcHRlcgotCSAgICAtIFNLLTk4MjIgR2lnYWJpdCBFdGhlcm5ldCBTZXJ2ZXIgQWRhcHRlciAoU0stTkVUIEdFLVQgZHVhbCBsaW5rKQotCSAgICAtIFNLLTk4NDEgR2lnYWJpdCBFdGhlcm5ldCBTZXJ2ZXIgQWRhcHRlciAoU0stTkVUIEdFLUxYKQotCSAgICAtIFNLLTk4NDEgVjIuMCBHaWdhYml0IEV0aGVybmV0IDEwMDBCYXNlLUxYIEFkYXB0ZXIKLQkgICAgLSBTSy05ODQyIEdpZ2FiaXQgRXRoZXJuZXQgU2VydmVyIEFkYXB0ZXIgKFNLLU5FVCBHRS1MWCBkdWFsIGxpbmspCi0JICAgIC0gU0stOTg0MyBHaWdhYml0IEV0aGVybmV0IFNlcnZlciBBZGFwdGVyIChTSy1ORVQgR0UtU1gpCi0JICAgIC0gU0stOTg0MyBWMi4wIEdpZ2FiaXQgRXRoZXJuZXQgMTAwMEJhc2UtU1ggQWRhcHRlcgotCSAgICAtIFNLLTk4NDQgR2lnYWJpdCBFdGhlcm5ldCBTZXJ2ZXIgQWRhcHRlciAoU0stTkVUIEdFLVNYIGR1YWwgbGluaykKLQkgICAgLSBTSy05ODUxIFYyLjAgR2lnYWJpdCBFdGhlcm5ldCAxMDAwQmFzZS1TWCBBZGFwdGVyCi0JICAgIC0gU0stOTg2MSBHaWdhYml0IEV0aGVybmV0IFNlcnZlciBBZGFwdGVyIChTSy1ORVQgR0UtU1ggVm9saXRpb24pCi0JICAgIC0gU0stOTg2MSBWMi4wIEdpZ2FiaXQgRXRoZXJuZXQgMTAwMEJhc2UtU1ggQWRhcHRlcgotCSAgICAtIFNLLTk4NjIgR2lnYWJpdCBFdGhlcm5ldCBTZXJ2ZXIgQWRhcHRlciAoU0stTkVUIEdFLVNYIFZvbGl0aW9uIGR1YWwgbGluaykKLQkgICAgLSBTSy05ODcxIEdpZ2FiaXQgRXRoZXJuZXQgU2VydmVyIEFkYXB0ZXIgKFNLLU5FVCBHRS1aWCkKLQkgICAgLSBTSy05ODcxIFYyLjAgR2lnYWJpdCBFdGhlcm5ldCAxMDAwQmFzZS1aWCBBZGFwdGVyCi0JICAgIC0gU0stOTg3MiBHaWdhYml0IEV0aGVybmV0IFNlcnZlciBBZGFwdGVyIChTSy1ORVQgR0UtWlggZHVhbCBsaW5rKQotCSAgICAtIFNNQyBFWiBDYXJkIDEwMDAgKFNNQzk0NTJUWFYuMikKLQkgIAotCSAgVGhlIGFkYXB0ZXJzIHN1cHBvcnQgSnVtYm8gRnJhbWVzLgotCSAgVGhlIGR1YWwgbGluayBhZGFwdGVycyBzdXBwb3J0IGxpbmstZmFpbG92ZXIgYW5kIGR1YWwgcG9ydCBmZWF0dXJlcy4KLQkgIEJvdGggTWFydmVsbCBZdWtvbiBhbmQgU3lzS29ubmVjdCBTSy05OHh4L1NLLTk1eHggYWRhcHRlcnMgc3VwcG9ydCAKLQkgIHRoZSBzY2F0dGVyLWdhdGhlciBmdW5jdGlvbmFsaXR5IHdpdGggc2VuZGZpbGUoKS4gUGxlYXNlIHJlZmVyIHRvIAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAotCSAgb3B0aW9uYWwgZHJpdmVyIHBhcmFtZXRlcnMuCi0JICBRdWVzdGlvbnMgY29uY2VybmluZyB0aGlzIGRyaXZlciBtYXkgYmUgYWRkcmVzc2VkIHRvOgotCSAgICAgIDxsaW51eEBzeXNrb25uZWN0LmRlPgotCSAgCi0JICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoIGNhbiBiZQotCSAgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLAotCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uIFRoZSBtb2R1bGUgd2lsbAotCSAgYmUgY2FsbGVkIHNrOThsaW4uIFRoaXMgaXMgcmVjb21tZW5kZWQuCi0KIGNvbmZpZyBWSUFfVkVMT0NJVFkKIAl0cmlzdGF0ZSAiVklBIFZlbG9jaXR5IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTIzNjEsMTQgKzIyODYsMTUgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwczNfZ2VsaWMuCiAKIGNvbmZpZyBHRUxJQ19XSVJFTEVTUwotICAgICAgIGJvb2wgIlBTMyBXaXJlbGVzcyBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gR0VMSUNfTkVUCi0gICAgICAgaGVscAotICAgICAgICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBzdXBwb3J0IGZvciB0aGUgd2lyZWxlc3MgZmVhdHVyZSBvZiBQUzMuCi0gICAgICAgIElmIHlvdSBoYXZlIHRoZSB3aXJlbGVzcy1sZXNzIG1vZGVsIG9mIFBTMyBvciBoYXZlIG5vIHBsYW4gdG8KLSAgICAgICAgdXNlIHdpcmVsZXNzIGZlYXR1cmUsIGRpc2FibGluZyB0aGlzIG9wdGlvbiBzYXZlcyBtZW1vcnkuICBBcwotICAgICAgICB0aGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgZGlzdGluZ3Vpc2hlcyB0aGUgbW9kZWxzLCB5b3UgY2FuCi0gICAgICAgIHNhZmVseSBlbmFibGUgdGhpcyBvcHRpb24gZXZlbiBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzLWxlc3MgbW9kZWwuCisJYm9vbCAiUFMzIFdpcmVsZXNzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBHRUxJQ19ORVQKKwlzZWxlY3QgV0lSRUxFU1NfRVhUCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyB0aGUgc3VwcG9ydCBmb3IgdGhlIHdpcmVsZXNzIGZlYXR1cmUgb2YgUFMzLgorCSAgSWYgeW91IGhhdmUgdGhlIHdpcmVsZXNzLWxlc3MgbW9kZWwgb2YgUFMzIG9yIGhhdmUgbm8gcGxhbiB0bworCSAgdXNlIHdpcmVsZXNzIGZlYXR1cmUsIGRpc2FibGluZyB0aGlzIG9wdGlvbiBzYXZlcyBtZW1vcnkuICBBcworCSAgdGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGRpc3Rpbmd1aXNoZXMgdGhlIG1vZGVscywgeW91IGNhbgorCSAgc2FmZWx5IGVuYWJsZSB0aGlzIG9wdGlvbiBldmVuIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MtbGVzcyBtb2RlbC4KIAogY29uZmlnIEdJQU5GQVIKIAl0cmlzdGF0ZSAiR2lhbmZhciBFdGhlcm5ldCIKQEAgLTI0MDksNyArMjMzNSw3IEBACiAKIGNvbmZpZyBNVjY0M1hYX0VUSAogCXRyaXN0YXRlICJNYXJ2ZWxsIERpc2NvdmVyeSAoNjQzWFgpIGFuZCBPcmlvbiBldGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTVY2NDM2MCB8fCBNVjY0WDYwIHx8IChQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMikgfHwgQVJDSF9PUklPTgorCWRlcGVuZHMgb24gTVY2NDM2MCB8fCBNVjY0WDYwIHx8IChQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMikgfHwgUExBVF9PUklPTgogCXNlbGVjdCBNSUkKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZQpAQCAtMjUxMyw3ICsyNDM5LDcgQEAKIAogY29uZmlnIEVIRUEKIAl0cmlzdGF0ZSAiZUhFQSBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSUJNRUJVUyAmJiBJTkVUCisJZGVwZW5kcyBvbiBJQk1FQlVTICYmIElORVQgJiYgU1BBUlNFTUVNCiAJc2VsZWN0IElORVRfTFJPCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIElCTSBwU2VyaWVzIGVIRUEgZXRoZXJuZXQgYWRhcHRlci4KQEAgLTI2MjksNyArMjU1NSw3IEBACiAKIGNvbmZpZyBQQVNFTUlfTUFDCiAJdHJpc3RhdGUgIlBBIFNlbWkgMS8xMEdiaXQgTUFDIgotCWRlcGVuZHMgb24gUFBDNjQgJiYgUENJCisJZGVwZW5kcyBvbiBQUENfUEFTRU1JICYmIFBDSQogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgSU5FVF9MUk8KIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDNiMWVhMzIuLjJmMWYzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xNSw3ICsxNSw3IEBACiBvYmotJChDT05GSUdfRUhFQSkgKz0gZWhlYS8KIG9iai0kKENPTkZJR19DQU4pICs9IGNhbi8KIG9iai0kKENPTkZJR19CT05ESU5HKSArPSBib25kaW5nLwotb2JqLSQoQ09ORklHX0FUTDEpICs9IGF0bDEvCitvYmotJChDT05GSUdfQVRMMSkgKz0gYXRseC8KIG9iai0kKENPTkZJR19HSUFORkFSKSArPSBnaWFuZmFyX2RyaXZlci5vCiBvYmotJChDT05GSUdfVEVIVVRJKSArPSB0ZWh1dGkubwogCkBAIC03NSw3ICs3NSw2IEBACiBvYmotJChDT05GSUdfVEMzNTgxNSkgKz0gdGMzNTgxNS5vCiBvYmotJChDT05GSUdfU0tHRSkgKz0gc2tnZS5vCiBvYmotJChDT05GSUdfU0tZMikgKz0gc2t5Mi5vCi1vYmotJChDT05GSUdfU0s5OExJTikgKz0gc2s5OGxpbi8KIG9iai0kKENPTkZJR19TS0ZQKSArPSBza2ZwLwogb2JqLSQoQ09ORklHX1ZJQV9SSElORSkgKz0gdmlhLXJoaW5lLm8KIG9iai0kKENPTkZJR19WSUFfVkVMT0NJVFkpICs9IHZpYS12ZWxvY2l0eS5vCkBAIC0xOTEsNiArMTkwLDcgQEAKIG9iai0kKENPTkZJR19IUExBTkNFKSArPSBocGxhbmNlLm8gNzk5MC5vCiBvYmotJChDT05GSUdfTVZNRTE0N19ORVQpICs9IG12bWUxNDcubyA3OTkwLm8KIG9iai0kKENPTkZJR19FUVVBTElaRVIpICs9IGVxbC5vCitvYmotJChDT05GSUdfS09SSU5BKSArPSBrb3JpbmEubwogb2JqLSQoQ09ORklHX01JUFNfSkFaWl9TT05JQykgKz0gamF6enNvbmljLm8KIG9iai0kKENPTkZJR19NSVBTX0FVMVgwMF9FTkVUKSArPSBhdTEwMDBfZXRoLm8KIG9iai0kKENPTkZJR19NSVBTX1NJTV9ORVQpICs9IG1pcHNuZXQubwpAQCAtMjE4LDcgKzIxOCw4IEBACiBvYmotJChDT05GSUdfQkZJTl9NQUMpICs9IGJmaW5fbWFjLm8KIG9iai0kKENPTkZJR19ETTkwMDApICs9IGRtOTAwMC5vCiBvYmotJChDT05GSUdfRkVDXzhYWCkgKz0gZmVjXzh4eC8KLW9iai0kKENPTkZJR19QQVNFTUlfTUFDKSArPSBwYXNlbWlfbWFjLm8KK29iai0kKENPTkZJR19QQVNFTUlfTUFDKSArPSBwYXNlbWlfbWFjX2RyaXZlci5vCitwYXNlbWlfbWFjX2RyaXZlci1vYmpzIDo9IHBhc2VtaV9tYWMubyBwYXNlbWlfbWFjX2V0aHRvb2wubwogb2JqLSQoQ09ORklHX01MWDRfQ09SRSkgKz0gbWx4NC8KIG9iai0kKENPTkZJR19FTkMyOEo2MCkgKz0gZW5jMjhqNjAubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hYzMyMDAuYyBiL2RyaXZlcnMvbmV0L2FjMzIwMC5jCmluZGV4IDUxMzZkOTQ5Li5iMTQ0ODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hYzMyMDAuYworKysgYi9kcml2ZXJzL25ldC9hYzMyMDAuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkFuc2VsIEFDMzIwMCBFSVNBIGV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1pbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhYzMyMDBfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCB0aGlzX2RldiwgZm91bmQgPSAwOwpAQCAtNDA0LDggKzQwNCw3IEBACiAJaW91bm1hcChlaV9zdGF0dXMubWVtKTsKIH0KIAotdm9pZCBfX2V4aXQKLWNsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYWMzMjAwX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJaW50IHRoaXNfZGV2OwogCkBAIC00MTgsNCArNDE3LDYgQEAKIAkJfQogCX0KIH0KK21vZHVsZV9pbml0KGFjMzIwMF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhYzMyMDBfbW9kdWxlX2V4aXQpOwogI2VuZGlmIC8qIE1PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBuZS5jIGIvZHJpdmVycy9uZXQvYXBuZS5jCmluZGV4IGMxMmNiZGYuLjQ3YTgyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwbmUuYworKysgYi9kcml2ZXJzL25ldC9hcG5lLmMKQEAgLTU2OSw3ICs1NjksNyBAQAogI2lmZGVmIE1PRFVMRQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICphcG5lX2RldjsKIAotaW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXBuZV9tb2R1bGVfaW5pdCh2b2lkKQogewogCWFwbmVfZGV2ID0gYXBuZV9wcm9iZSgtMSk7CiAJaWYgKElTX0VSUihhcG5lX2RldikpCkBAIC01NzcsNyArNTc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhcG5lX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoYXBuZV9kZXYpOwogCkBAIC01OTEsNyArNTkxLDggQEAKIAogCWZyZWVfbmV0ZGV2KGFwbmVfZGV2KTsKIH0KLQorbW9kdWxlX2luaXQoYXBuZV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhcG5lX21vZHVsZV9leGl0KTsKICNlbmRpZgogCiBzdGF0aWMgaW50IGluaXRfcGNtY2lhKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYwppbmRleCA5MmMzYTRjLi44MmU5YTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGFsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNTAzLDcgKzUwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNuYXA9amlmZmllczsKIAogCQkJLyogTGV0IGNhcmQgZmluaXNoIGluaXRpYWxpemluZywgYWJvdXQgMS8zIHNlY29uZCAqLwotCSAgICAgICAgICAgICAgICB3aGlsZShqaWZmaWVzLXNuYXA8SFovMykKKwkJCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzbmFwICsgSFovMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTEwMTAsNyArMTAxMSw3IEBACiBtb2R1bGVfcGFyYW0oaXJxLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtKGJvYXJkX3R5cGUsIGludCwgMCk7CiAKLWludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNvcHNfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpZiAoaW8gPT0gMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFlvdSBzaG91bGRuJ3QgYXV0b3Byb2JlIHdpdGggaW5zbW9kXG4iLApAQCAtMTAyMSwxMiArMTAyMiwxNCBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjb3BzX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoY29wc19kZXYpOwogCWNsZWFudXBfY2FyZChjb3BzX2Rldik7CiAJZnJlZV9uZXRkZXYoY29wc19kZXYpOwogfQorbW9kdWxlX2luaXQoY29wc19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChjb3BzX21vZHVsZV9leGl0KTsKICNlbmRpZiAvKiBNT0RVTEUgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCmluZGV4IDZhYjJjMmQuLmZlZjU1NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwpAQCAtMTI1Miw3ICsxMjUyLDcgQEAKIG1vZHVsZV9wYXJhbShkbWEsIGludCwgMCk7CiAKIAotaW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbHRwY19tb2R1bGVfaW5pdCh2b2lkKQogewogICAgICAgICBpZihpbyA9PSAwKQogCQlwcmludGsoS0VSTl9OT1RJQ0UKQEAgLTEyNjMsNiArMTI2Myw3IEBACiAJCXJldHVybiBQVFJfRVJSKGRldl9sdHBjKTsKIAlyZXR1cm4gMDsKIH0KK21vZHVsZV9pbml0KGx0cGNfbW9kdWxlX2luaXQpOwogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBsdHBjX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwppbmRleCBjNTljODA2Li5iZGM0YzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCkBAIC05NDAsNyArOTQwLDcgQEAKIAogCQkJLyogaXMgdGhlIFJFQ09OIGluZm8gZW1wdHkgb3Igb2xkPyAqLwogCQkJaWYgKCFscC0+Zmlyc3RfcmVjb24gfHwgIWxwLT5sYXN0X3JlY29uIHx8Ci0JCQkgICAgamlmZmllcyAtIGxwLT5sYXN0X3JlY29uID4gSFogKiAxMCkgeworCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgbHAtPmxhc3RfcmVjb24gKyBIWiAqIDEwKSkgewogCQkJCWlmIChscC0+bmV0d29ya19kb3duKQogCQkJCQlCVUdNU0coRF9OT1JNQUwsICJyZWNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQ6IGNhYmxpbmcgcmVzdG9yZWQ/XG4iKTsKIAkJCQlscC0+Zmlyc3RfcmVjb24gPSBscC0+bGFzdF9yZWNvbiA9IGppZmZpZXM7CkBAIC05NzQsNyArOTc0LDggQEAKIAkJCQkJbHAtPm51bV9yZWNvbnMgPSAxOwogCQkJCX0KIAkJCX0KLQkJfSBlbHNlIGlmIChscC0+bmV0d29ya19kb3duICYmIGppZmZpZXMgLSBscC0+bGFzdF9yZWNvbiA+IEhaICogMTApIHsKKwkJfSBlbHNlIGlmIChscC0+bmV0d29ya19kb3duICYmCisJCQkJdGltZV9hZnRlcihqaWZmaWVzLCBscC0+bGFzdF9yZWNvbiArIEhaICogMTApKSB7CiAJCQlpZiAobHAtPm5ldHdvcmtfZG93bikKIAkJCQlCVUdNU0coRF9OT1JNQUwsICJjYWJsaW5nIHJlc3RvcmVkP1xuIik7CiAJCQlscC0+Zmlyc3RfcmVjb24gPSBscC0+bGFzdF9yZWNvbiA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwppbmRleCBjYzQ2MTBkLi4wMmNiOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKQEAgLTgwLDE3ICs4MCwxOSBAQAogCiAjaWZkZWYgTU9EVUxFCiAKLWludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNhcG1vZGVfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlwcmludGsoVkVSU0lPTik7CiAJYXJjbmV0X2NhcF9pbml0KCk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYXBtb2RlX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJYXJjbmV0X3VucmVnaXN0ZXJfcHJvdG8oJmNhcG1vZGVfcHJvdG8pOwogfQorbW9kdWxlX2luaXQoY2FwbW9kZV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChjYXBtb2RlX21vZHVsZV9leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2VuZGlmCQkJCS8qIE1PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYwppbmRleCA3Y2YwYTI1Li44YjUxMzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYwpAQCAtMzQ4LDE0ICszNDgsMTUgQEAKIAogI2lmZGVmIE1PRFVMRQogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNvbTIwMDIwX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJQlVHTFZMKERfTk9STUFMKSBwcmludGsoVkVSU0lPTik7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjb20yMDAyMF9tb2R1bGVfZXhpdCh2b2lkKQogewogfQotCittb2R1bGVfaW5pdChjb20yMDAyMF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChjb20yMDAyMF9tb2R1bGVfZXhpdCk7CiAjZW5kaWYJCQkJLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYwppbmRleCAwYWUwZDgzLi45NzhlMjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKQEAgLTEwNDMsNyArMTA0Myw5IEBACiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NzYjMzNygpKSB7CiAJCS8qIG1peCBsaW5rIGFjdGl2aXR5IHN0YXR1cyBpbnRvIExFRDIgbGluayBzdGF0ZSAqLwogCQl3cml0ZV9waHkocGh5X2FkZHJlc3MsIE1JSV9MRURDVFJMX1JFRywgMHgwZDIyKTsKLQl9CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2VjYmF0OTEoKSkKKwkJd3JpdGVfcGh5KHBoeV9hZGRyZXNzLCBNSUlfTEVEQ1RSTF9SRUcsIDB4MTU2QSk7CisKIAlkaXNhYmxlX21kaSgpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdDE3MDAuYyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCmluZGV4IDI0ZDgxZjkuLjdlODc0ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCkBAIC04ODEsNyArODgxLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiQVQxNzAwL0ZNVjE4WCBJUlEgbnVtYmVyIik7CiBNT0RVTEVfUEFSTV9ERVNDKG5ldF9kZWJ1ZywgIkFUMTcwMC9GTVYxOFggZGVidWcgbGV2ZWwgKDAtNikiKTsKIAotaW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXQxNzAwX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaWYgKGlvID09IDApCiAJCXByaW50aygiYXQxNzAwOiBZb3Ugc2hvdWxkIG5vdCB1c2UgYXV0by1wcm9iaW5nIHdpdGggaW5zbW9kIVxuIik7CkBAIC04OTEsMTMgKzg5MSwxNCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdAotY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdDE3MDBfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXZfYXQxNzAwKTsKIAljbGVhbnVwX2NhcmQoZGV2X2F0MTcwMCk7CiAJZnJlZV9uZXRkZXYoZGV2X2F0MTcwMCk7CiB9Cittb2R1bGVfaW5pdChhdDE3MDBfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYXQxNzAwX21vZHVsZV9leGl0KTsKICNlbmRpZiAvKiBNT0RVTEUgKi8KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCmluZGV4IGI3NGRiZWUuLjRjY2VhYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKQEAgLTMzNiw4ICszMzYsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBhZGRyX2FjY2Vzc2libGUoIHZvbGF0aWxlIHZvaWQgKnJlZ3AsIGludCB3b3JkZmxhZywgaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVmbGFnICk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsYW5jZV9wcm9iZTEoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsYW5jZV9hZGRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbml0X3JlYyApOwogc3RhdGljIGludCBsYW5jZV9vcGVuKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICk7CkBAIC00MDYsNyArNDA0LDggQEAKIAogLyogRGVyaXZlZCBmcm9tIGh3cmVnX3ByZXNlbnQoKSBpbiBhdGFyaS9jb25maWcuYzogKi8KIAotc3RhdGljIGludCBfX2luaXQgYWRkcl9hY2Nlc3NpYmxlKCB2b2xhdGlsZSB2b2lkICpyZWdwLCBpbnQgd29yZGZsYWcsIGludCB3cml0ZWZsYWcgKQorc3RhdGljIG5vaW5saW5lIGludCBfX2luaXQgYWRkcl9hY2Nlc3NpYmxlKHZvbGF0aWxlIHZvaWQgKnJlZ3AsIGludCB3b3JkZmxhZywKKwkJCQkJICAgaW50IHdyaXRlZmxhZykKIHsKIAlpbnQJCXJldDsKIAlsb25nCWZsYWdzOwpAQCAtMTE1Niw3ICsxMTU1LDcgQEAKICNpZmRlZiBNT0RVTEUKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYXRhcmlsYW5jZV9kZXY7CiAKLWludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGF0YXJpbGFuY2VfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlhdGFyaWxhbmNlX2RldiA9IGF0YXJpbGFuY2VfcHJvYmUoLTEpOwogCWlmIChJU19FUlIoYXRhcmlsYW5jZV9kZXYpKQpAQCAtMTE2NCwxMyArMTE2MywxNCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBjbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGF0YXJpbGFuY2VfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAl1bnJlZ2lzdGVyX25ldGRldihhdGFyaWxhbmNlX2Rldik7CiAJZnJlZV9pcnEoYXRhcmlsYW5jZV9kZXYtPmlycSwgYXRhcmlsYW5jZV9kZXYpOwogCWZyZWVfbmV0ZGV2KGF0YXJpbGFuY2VfZGV2KTsKIH0KLQorbW9kdWxlX2luaXQoYXRhcmlsYW5jZV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhdGFyaWxhbmNlX21vZHVsZV9leGl0KTsKICNlbmRpZiAvKiBNT0RVTEUgKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvYXRsMS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiNzA3ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1vYmotJChDT05GSUdfQVRMMSkJKz0gYXRsMS5vCi1hdGwxLXkJCQkrPSBhdGwxX21haW4ubyBhdGwxX2h3Lm8gYXRsMV9ldGh0b29sLm8gYXRsMV9wYXJhbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL2F0bDEuaCBiL2RyaXZlcnMvbmV0L2F0bDEvYXRsMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjQ3NjVmNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL2F0bDEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA2IEF0dGFuc2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0KGMpIDIwMDYgQ2hyaXMgU25vb2sgPGNzbm9va0ByZWRoYXQuY29tPgotICogQ29weXJpZ2h0KGMpIDIwMDYgSmF5IENsaWJ1cm4gPGpjbGlidXJuQGdtYWlsLmNvbT4KLSAqCi0gKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCi0gKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQotICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfQVRMMV9IXwotI2RlZmluZSBfQVRMMV9IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0KLSNpbmNsdWRlICJhdGwxX2h3LmgiCi0KLS8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgbmVlZGVkIGJ5IG11bHRpcGxlIGZpbGVzICovCi1zMzIgYXRsMV91cChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgYXRsMV9kb3duKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IGF0bDFfcmVzZXQoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcik7Ci1zMzIgYXRsMV9zZXR1cF9yaW5nX3Jlc291cmNlcyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgYXRsMV9mcmVlX3JpbmdfcmVzb3VyY2VzKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi1leHRlcm4gY2hhciBhdGwxX2RyaXZlcl9uYW1lW107Ci1leHRlcm4gY2hhciBhdGwxX2RyaXZlcl92ZXJzaW9uW107Ci1leHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDFfZXRodG9vbF9vcHM7Ci0KLXN0cnVjdCBhdGwxX2FkYXB0ZXI7Ci0KLSNkZWZpbmUgQVRMMV9NQVhfSU5UUgkJMwotI2RlZmluZSBBVEwxX01BWF9UWF9CVUZfTEVOCTB4MzAwMAkvKiAxMjI4OCBieXRlcyAqLwotCi0jZGVmaW5lIEFUTDFfREVGQVVMVF9UUEQJMjU2Ci0jZGVmaW5lIEFUTDFfTUFYX1RQRAkJMTAyNAotI2RlZmluZSBBVEwxX01JTl9UUEQJCTY0Ci0jZGVmaW5lIEFUTDFfREVGQVVMVF9SRkQJNTEyCi0jZGVmaW5lIEFUTDFfTUlOX1JGRAkJMTI4Ci0jZGVmaW5lIEFUTDFfTUFYX1JGRAkJMjA0OAotCi0jZGVmaW5lIEFUTDFfR0VUX0RFU0MoUiwgaSwgdHlwZSkJKCYoKCh0eXBlICopKChSKS0+ZGVzYykpW2ldKSkKLSNkZWZpbmUgQVRMMV9SRkRfREVTQyhSLCBpKQlBVEwxX0dFVF9ERVNDKFIsIGksIHN0cnVjdCByeF9mcmVlX2Rlc2MpCi0jZGVmaW5lIEFUTDFfVFBEX0RFU0MoUiwgaSkJQVRMMV9HRVRfREVTQyhSLCBpLCBzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MpCi0jZGVmaW5lIEFUTDFfUlJEX0RFU0MoUiwgaSkJQVRMMV9HRVRfREVTQyhSLCBpLCBzdHJ1Y3QgcnhfcmV0dXJuX2Rlc2MpCi0KLS8qCi0gKiBUaGlzIGRldGFjaGVkIGNvbW1lbnQgaXMgcHJlc2VydmVkIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzIG9ubHkuCi0gKiBJdCB3YXMgb3JpZ2luYWxseSBhdHRhY2hlZCB0byBzb21lIGNvZGUgdGhhdCBnb3QgZGVsZXRlZCwgYnV0IHNlZW1zCi0gKiBpbXBvcnRhbnQgZW5vdWdoIHRvIGtlZXAgYXJvdW5kLi4uCi0gKgotICogPGJlZ2luIGRldGFjaGVkIGNvbW1lbnQ+Ci0gKiBTb21lIHdvcmthcm91bmRzIHJlcXVpcmUgbWlsbGlzZWNvbmQgZGVsYXlzIGFuZCBhcmUgcnVuIGR1cmluZyBpbnRlcnJ1cHQKLSAqIGNvbnRleHQuICBNb3N0IG5vdGFibHksIHdoZW4gZXN0YWJsaXNoaW5nIGxpbmssIHRoZSBwaHkgbWF5IG5lZWQgdHdlYWtpbmcKLSAqIGJ1dCBjYW5ub3QgcHJvY2VzcyBwaHkgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIGZhc3RlciB0aGFuIG1pbGxpc2Vjb25kCi0gKiBpbnRlcnZhbHMuLi5hbmQgd2UgZXN0YWJsaXNoIGxpbmsgZHVlIHRvIGEgImxpbmsgc3RhdHVzIGNoYW5nZSIgaW50ZXJydXB0LgotICogPGVuZCBkZXRhY2hlZCBjb21tZW50PgotICovCi0KLS8qCi0gKiBhdGwxX3JpbmdfaGVhZGVyIHJlcHJlc2VudHMgYSBzaW5nbGUsIGNvbnRpZ3VvdXMgYmxvY2sgb2YgRE1BIHNwYWNlCi0gKiBtYXBwZWQgZm9yIHRoZSB0aHJlZSBkZXNjcmlwdG9yIHJpbmdzICh0cGQsIHJmZCwgcnJkKSBhbmQgdGhlIHR3bwotICogbWVzc2FnZSBibG9ja3MgKGNtYiwgc21iKSBkZXNjcmliZWQgYmVsb3cKLSAqLwotc3RydWN0IGF0bDFfcmluZ19oZWFkZXIgewotCXZvaWQgKmRlc2M7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlkbWFfYWRkcl90IGRtYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MqLwotCXVuc2lnbmVkIGludCBzaXplOwkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KLX07Ci0KLS8qCi0gKiBhdGwxX2J1ZmZlciBpcyB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyCi0gKiBzbyBhIERNQSBoYW5kbGUgY2FuIGJlIHN0b3JlZCBhbG9uZyB3aXRoIHRoZSBza2IKLSAqLwotc3RydWN0IGF0bDFfYnVmZmVyIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwkvKiBzb2NrZXQgYnVmZmVyICovCi0JdTE2IGxlbmd0aDsJCS8qIHJ4IGJ1ZmZlciBsZW5ndGggKi8KLQl1MTYgYWxsb2NlZDsJCS8qIDEgaWYgc2tiIGFsbG9jYXRlZCAqLwotCWRtYV9hZGRyX3QgZG1hOwotfTsKLQotLyogdHJhbnNtaXQgcGFja2V0IGRlc2NyaXB0b3IgKHRwZCkgcmluZyAqLwotc3RydWN0IGF0bDFfdHBkX3JpbmcgewotCXZvaWQgKmRlc2M7CQkvKiBkZXNjcmlwdG9yIHJpbmcgdmlydHVhbCBhZGRyZXNzICovCi0JZG1hX2FkZHJfdCBkbWE7CQkvKiBkZXNjcmlwdG9yIHJpbmcgcGh5c2ljYWwgYWRkcmVzcyAqLwotCXUxNiBzaXplOwkJLyogZGVzY3JpcHRvciByaW5nIGxlbmd0aCBpbiBieXRlcyAqLwotCXUxNiBjb3VudDsJCS8qIG51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgcmluZyAqLwotCXUxNiBod19pZHg7CQkvKiBoYXJkd2FyZSBpbmRleCAqLwotCWF0b21pY190IG5leHRfdG9fY2xlYW47Ci0JYXRvbWljX3QgbmV4dF90b191c2U7Ci0Jc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKLX07Ci0KLS8qIHJlY2VpdmUgZnJlZSBkZXNjcmlwdG9yIChyZmQpIHJpbmcgKi8KLXN0cnVjdCBhdGwxX3JmZF9yaW5nIHsKLQl2b2lkICpkZXNjOwkJLyogZGVzY3JpcHRvciByaW5nIHZpcnR1YWwgYWRkcmVzcyAqLwotCWRtYV9hZGRyX3QgZG1hOwkJLyogZGVzY3JpcHRvciByaW5nIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQl1MTYgc2l6ZTsJCS8qIGRlc2NyaXB0b3IgcmluZyBsZW5ndGggaW4gYnl0ZXMgKi8KLQl1MTYgY291bnQ7CQkvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KLQlhdG9taWNfdCBuZXh0X3RvX3VzZTsKLQl1MTYgbmV4dF90b19jbGVhbjsKLQlzdHJ1Y3QgYXRsMV9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotfTsKLQotLyogcmVjZWl2ZSByZXR1cm4gZGVzY3JpcHRvciAocnJkKSByaW5nICovCi1zdHJ1Y3QgYXRsMV9ycmRfcmluZyB7Ci0Jdm9pZCAqZGVzYzsJCS8qIGRlc2NyaXB0b3IgcmluZyB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlkbWFfYWRkcl90IGRtYTsJCS8qIGRlc2NyaXB0b3IgcmluZyBwaHlzaWNhbCBhZGRyZXNzICovCi0JdW5zaWduZWQgaW50IHNpemU7CS8qIGRlc2NyaXB0b3IgcmluZyBsZW5ndGggaW4gYnl0ZXMgKi8KLQl1MTYgY291bnQ7CQkvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KLQl1MTYgbmV4dF90b191c2U7Ci0JYXRvbWljX3QgbmV4dF90b19jbGVhbjsKLX07Ci0KLS8qIGNvYWxlc2NpbmcgbWVzc2FnZSBibG9jayAoY21iKSAqLwotc3RydWN0IGF0bDFfY21iIHsKLQlzdHJ1Y3QgY29hbHNfbXNnX2Jsb2NrICpjbWI7Ci0JZG1hX2FkZHJfdCBkbWE7Ci19OwotCi0vKiBzdGF0aXN0aWNzIG1lc3NhZ2UgYmxvY2sgKHNtYikgKi8KLXN0cnVjdCBhdGwxX3NtYiB7Ci0Jc3RydWN0IHN0YXRzX21zZ19ibG9jayAqc21iOwotCWRtYV9hZGRyX3QgZG1hOwotfTsKLQotLyogU3RhdGlzdGljcyBjb3VudGVycyAqLwotc3RydWN0IGF0bDFfc2Z0X3N0YXRzIHsKLQl1NjQgcnhfcGFja2V0czsKLQl1NjQgdHhfcGFja2V0czsKLQl1NjQgcnhfYnl0ZXM7Ci0JdTY0IHR4X2J5dGVzOwotCXU2NCBtdWx0aWNhc3Q7Ci0JdTY0IGNvbGxpc2lvbnM7Ci0JdTY0IHJ4X2Vycm9yczsKLQl1NjQgcnhfbGVuZ3RoX2Vycm9yczsKLQl1NjQgcnhfY3JjX2Vycm9yczsKLQl1NjQgcnhfZnJhbWVfZXJyb3JzOwotCXU2NCByeF9maWZvX2Vycm9yczsKLQl1NjQgcnhfbWlzc2VkX2Vycm9yczsKLQl1NjQgdHhfZXJyb3JzOwotCXU2NCB0eF9maWZvX2Vycm9yczsKLQl1NjQgdHhfYWJvcnRlZF9lcnJvcnM7Ci0JdTY0IHR4X3dpbmRvd19lcnJvcnM7Ci0JdTY0IHR4X2NhcnJpZXJfZXJyb3JzOwotCXU2NCB0eF9wYXVzZTsJCS8qIG51bSBwYXVzZSBwYWNrZXRzIHRyYW5zbWl0dGVkLiAqLwotCXU2NCBleGNlY29sOwkJLyogbnVtIHR4IHBhY2tldHMgdy8gZXhjZXNzaXZlIGNvbGxpc2lvbnMuICovCi0JdTY0IGRlZmZlcjsJCS8qIG51bSB0eCBwYWNrZXRzIGRlZmVycmVkICovCi0JdTY0IHNjYzsJCS8qIG51bSBwYWNrZXRzIHN1YnNlcXVlbnRseSB0cmFuc21pdHRlZAotCQkJCSAqIHN1Y2Nlc3NmdWxseSB3LyBzaW5nbGUgcHJpb3IgY29sbGlzaW9uLiAqLwotCXU2NCBtY2M7CQkvKiBudW0gcGFja2V0cyBzdWJzZXF1ZW50bHkgdHJhbnNtaXR0ZWQKLQkJCQkgKiBzdWNjZXNzZnVsbHkgdy8gbXVsdGlwbGUgcHJpb3IgY29sbGlzaW9ucy4gKi8KLQl1NjQgbGF0ZWNvbDsJCS8qIG51bSB0eCBwYWNrZXRzICB3LyBsYXRlIGNvbGxpc2lvbnMuICovCi0JdTY0IHR4X3VuZGVydW47CQkvKiBudW0gdHggcGFja2V0cyBhYm9ydGVkIGR1ZSB0byB0cmFuc21pdAotCQkJCSAqIEZJRk8gdW5kZXJydW4sIG9yIFRSRCBGSUZPIHVuZGVycnVuICovCi0JdTY0IHR4X3RydW5jOwkJLyogbnVtIHR4IHBhY2tldHMgdHJ1bmNhdGVkIGR1ZSB0byBzaXplCi0JCQkJICogZXhjZWVkaW5nIE1UVSwgcmVnYXJkbGVzcyB3aGV0aGVyIHRydW5jYXRlZAotCQkJCSAqIGJ5IHRoZSBjaGlwIG9yIG5vdC4gKFRoZSBuYW1lIGRvZXNuJ3QgcmVhbGx5Ci0JCQkJICogcmVmbGVjdCB0aGUgbWVhbmluZyBpbiB0aGlzIGNhc2UuKSAqLwotCXU2NCByeF9wYXVzZTsJCS8qIG51bSBQYXVzZSBwYWNrZXRzIHJlY2VpdmVkLiAqLwotCXU2NCByeF9ycmRfb3Y7Ci0JdTY0IHJ4X3RydW5jOwotfTsKLQotLyogaGFyZHdhcmUgc3RydWN0dXJlICovCi1zdHJ1Y3QgYXRsMV9odyB7Ci0JdTggX19pb21lbSAqaHdfYWRkcjsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICpiYWNrOwotCWVudW0gYXRsMV9kbWFfb3JkZXIgZG1hX29yZDsKLQllbnVtIGF0bDFfZG1hX3JjYiByY2JfdmFsdWU7Ci0JZW51bSBhdGwxX2RtYV9yZXFfYmxvY2sgZG1hcl9ibG9jazsKLQllbnVtIGF0bDFfZG1hX3JlcV9ibG9jayBkbWF3X2Jsb2NrOwotCXU4IHByZWFtYmxlX2xlbjsKLQl1OCBtYXhfcmV0cnk7CQkvKiBSZXRyYW5zbWlzc2lvbiBtYXhpbXVtLCBhZnRlciB3aGljaCB0aGUKLQkJCQkgKiBwYWNrZXQgd2lsbCBiZSBkaXNjYXJkZWQgKi8KLQl1OCBqYW1faXBnOwkJLyogSVBHIHRvIHN0YXJ0IEpBTSBmb3IgY29sbGlzaW9uIGJhc2VkIGZsb3cKLQkJCQkgKiBjb250cm9sIGluIGhhbGYtZHVwbGV4IG1vZGUuIEluIHVuaXRzIG9mCi0JCQkJICogOC1iaXQgdGltZSAqLwotCXU4IGlwZ3Q7CQkvKiBEZXNpcmVkIGJhY2sgdG8gYmFjayBpbnRlci1wYWNrZXQgZ2FwLgotCQkJCSAqIFRoZSBkZWZhdWx0IGlzIDk2LWJpdCB0aW1lICovCi0JdTggbWluX2lmZzsJCS8qIE1pbmltdW0gbnVtYmVyIG9mIElGRyB0byBlbmZvcmNlIGluIGJldHdlZW4KLQkJCQkgKiByZWNlaXZlIGZyYW1lcy4gRnJhbWUgZ2FwIGJlbG93IHN1Y2ggSUZQCi0JCQkJICogaXMgZHJvcHBlZCAqLwotCXU4IGlwZ3IxOwkJLyogNjRiaXQgQ2Fycmllci1TZW5zZSB3aW5kb3cgKi8KLQl1OCBpcGdyMjsJCS8qIDk2LWJpdCBJUEcgd2luZG93ICovCi0JdTggdHBkX2J1cnN0OwkJLyogTnVtYmVyIG9mIFRQRCB0byBwcmVmZXRjaCBpbiBjYWNoZS1hbGlnbmVkCi0JCQkJICogYnVyc3QuIEVhY2ggVFBEIGlzIDE2IGJ5dGVzIGxvbmcgKi8KLQl1OCByZmRfYnVyc3Q7CQkvKiBOdW1iZXIgb2YgUkZEIHRvIHByZWZldGNoIGluIGNhY2hlLWFsaWduZWQKLQkJCQkgKiBidXJzdC4gRWFjaCBSRkQgaXMgMTIgYnl0ZXMgbG9uZyAqLwotCXU4IHJmZF9mZXRjaF9nYXA7Ci0JdTggcnJkX2J1cnN0OwkJLyogVGhyZXNob2xkIG51bWJlciBvZiBSUkRzIHRoYXQgY2FuIGJlIHJldGlyZWQKLQkJCQkgKiBpbiBhIGJ1cnN0LiBFYWNoIFJSRCBpcyAxNiBieXRlcyBsb25nICovCi0JdTggdHBkX2ZldGNoX3RoOwotCXU4IHRwZF9mZXRjaF9nYXA7Ci0JdTE2IHR4X2p1bWJvX3Rhc2tfdGg7Ci0JdTE2IHR4Zl9idXJzdDsJCS8qIE51bWJlciBvZiBkYXRhIGJ5dGVzIHRvIHJlYWQgaW4gYSBjYWNoZS0KLQkJCQkgKiBhbGlnbmVkIGJ1cnN0LiBFYWNoIFNSQU0gZW50cnkgaXMgOCBieXRlcyAqLwotCXUxNiByeF9qdW1ib190aDsJLyogSnVtYm8gcGFja2V0IHNpemUgZm9yIG5vbi1WTEFOIHBhY2tldC4gVkxBTgotCQkJCSAqIHBhY2tldHMgc2hvdWxkIGFkZCA0IGJ5dGVzICovCi0JdTE2IHJ4X2p1bWJvX2xrYWg7Ci0JdTE2IHJyZF9yZXRfdGltZXI7CS8qIFJSRCByZXRpcmVtZW50IHRpbWVyLiBEZWNyZW1lbnQgYnkgMSBhZnRlcgotCQkJCSAqIGV2ZXJ5IDUxMm5zIHBhc3Nlcy4gKi8KLQl1MTYgbGNvbDsJCS8qIENvbGxpc2lvbiBXaW5kb3cgKi8KLQotCXUxNiBjbWJfdHBkOwotCXUxNiBjbWJfcnJkOwotCXUxNiBjbWJfcnhfdGltZXI7Ci0JdTE2IGNtYl90eF90aW1lcjsKLQl1MzIgc21iX3RpbWVyOwotCXUxNiBtZWRpYV90eXBlOwotCXUxNiBhdXRvbmVnX2FkdmVydGlzZWQ7Ci0KLQl1MTYgbWlpX2F1dG9uZWdfYWR2X3JlZzsKLQl1MTYgbWlpXzEwMDB0X2N0cmxfcmVnOwotCi0JdTMyIG1heF9mcmFtZV9zaXplOwotCXUzMiBtaW5fZnJhbWVfc2l6ZTsKLQotCXUxNiBkZXZfcmV2OwotCi0JLyogc3BpIGZsYXNoICovCi0JdTggZmxhc2hfdmVuZG9yOwotCi0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCXU4IHBlcm1fbWFjX2FkZHJbRVRIX0FMRU5dOwotCi0JYm9vbCBwaHlfY29uZmlndXJlZDsKLX07Ci0KLXN0cnVjdCBhdGwxX2FkYXB0ZXIgewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOwotCXN0cnVjdCBhdGwxX3NmdF9zdGF0cyBzb2Z0X3N0YXRzOwotCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKLQl1MzIgcnhfYnVmZmVyX2xlbjsKLQl1MzIgd29sOwotCXUxNiBsaW5rX3NwZWVkOwotCXUxNiBsaW5rX2R1cGxleDsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua19jaGdfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGNpZV9kbWFfdG9fcnN0X3Rhc2s7Ci0Jc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgcGh5X2NvbmZpZ190aW1lcjsKLQlib29sIHBoeV90aW1lcl9wZW5kaW5nOwotCi0JLyogYWxsIGRlc2NyaXB0b3IgcmluZ3MnIG1lbW9yeSAqLwotCXN0cnVjdCBhdGwxX3JpbmdfaGVhZGVyIHJpbmdfaGVhZGVyOwotCi0JLyogVFggKi8KLQlzdHJ1Y3QgYXRsMV90cGRfcmluZyB0cGRfcmluZzsKLQlzcGlubG9ja190IG1iX2xvY2s7Ci0KLQkvKiBSWCAqLwotCXN0cnVjdCBhdGwxX3JmZF9yaW5nIHJmZF9yaW5nOwotCXN0cnVjdCBhdGwxX3JyZF9yaW5nIHJyZF9yaW5nOwotCXU2NCBod19jc3VtX2VycjsKLQl1NjQgaHdfY3N1bV9nb29kOwotCi0JdTE2IGltdDsJLyogaW50ZXJydXB0IG1vZGVyYXRvciB0aW1lciAoMnVzIHJlc29sdXRpb24gKi8KLQl1MTYgaWN0OwkvKiBpbnRlcnJ1cHQgY2xlYXIgdGltZXIgKDJ1cyByZXNvbHV0aW9uICovCi0Jc3RydWN0IG1paV9pZl9pbmZvIG1paTsJCS8qIE1JSSBpbnRlcmZhY2UgaW5mbyAqLwotCi0JLyogc3RydWN0cyBkZWZpbmVkIGluIGF0bDFfaHcuaCAqLwotCXUzMiBiZF9udW1iZXI7CQkJLyogYm9hcmQgbnVtYmVyICovCi0JYm9vbCBwY2lfdXNpbmdfNjQ7Ci0Jc3RydWN0IGF0bDFfaHcgaHc7Ci0Jc3RydWN0IGF0bDFfc21iIHNtYjsKLQlzdHJ1Y3QgYXRsMV9jbWIgY21iOwotfTsKLQotI2VuZGlmCS8qIF9BVEwxX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2V0aHRvb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhhODNiZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfZXRodG9vbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDYgQXR0YW5zaWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQoYykgMjAwNiBDaHJpcyBTbm9vayA8Y3Nub29rQHJlZGhhdC5jb20+Ci0gKiBDb3B5cmlnaHQoYykgMjAwNiBKYXkgQ2xpYnVybiA8amNsaWJ1cm5AZ21haWwuY29tPgotICoKLSAqIERlcml2ZWQgZnJvbSBJbnRlbCBlMTAwMCBkcml2ZXIKLSAqIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5Ci0gKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImF0bDEuaCIKLQotc3RydWN0IGF0bDFfc3RhdHMgewotCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLQlpbnQgc2l6ZW9mX3N0YXQ7Ci0JaW50IHN0YXRfb2Zmc2V0OwotfTsKLQotI2RlZmluZSBBVEwxX1NUQVQobSkgc2l6ZW9mKCgoc3RydWN0IGF0bDFfYWRhcHRlciAqKTApLT5tKSwgXAotCW9mZnNldG9mKHN0cnVjdCBhdGwxX2FkYXB0ZXIsIG0pCi0KLXN0YXRpYyBzdHJ1Y3QgYXRsMV9zdGF0cyBhdGwxX2dzdHJpbmdzX3N0YXRzW10gPSB7Ci0JeyJyeF9wYWNrZXRzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfcGFja2V0cyl9LAotCXsidHhfcGFja2V0cyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnR4X3BhY2tldHMpfSwKLQl7InJ4X2J5dGVzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfYnl0ZXMpfSwKLQl7InR4X2J5dGVzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMudHhfYnl0ZXMpfSwKLQl7InJ4X2Vycm9ycyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnJ4X2Vycm9ycyl9LAotCXsidHhfZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMudHhfZXJyb3JzKX0sCi0JeyJyeF9kcm9wcGVkIiwgQVRMMV9TVEFUKG5ldF9zdGF0cy5yeF9kcm9wcGVkKX0sCi0JeyJ0eF9kcm9wcGVkIiwgQVRMMV9TVEFUKG5ldF9zdGF0cy50eF9kcm9wcGVkKX0sCi0JeyJtdWx0aWNhc3QiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5tdWx0aWNhc3QpfSwKLQl7ImNvbGxpc2lvbnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5jb2xsaXNpb25zKX0sCi0JeyJyeF9sZW5ndGhfZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyl9LAotCXsicnhfb3Zlcl9lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzKX0sCi0JeyJyeF9jcmNfZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfY3JjX2Vycm9ycyl9LAotCXsicnhfZnJhbWVfZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfZnJhbWVfZXJyb3JzKX0sCi0JeyJyeF9maWZvX2Vycm9ycyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzKX0sCi0JeyJyeF9taXNzZWRfZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfbWlzc2VkX2Vycm9ycyl9LAotCXsidHhfYWJvcnRlZF9lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyl9LAotCXsidHhfY2Fycmllcl9lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyl9LAotCXsidHhfZmlmb19lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy50eF9maWZvX2Vycm9ycyl9LAotCXsidHhfd2luZG93X2Vycm9ycyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnR4X3dpbmRvd19lcnJvcnMpfSwKLQl7InR4X2Fib3J0X2V4Y2VfY29sbCIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLmV4Y2Vjb2wpfSwKLQl7InR4X2Fib3J0X2xhdGVfY29sbCIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLmxhdGVjb2wpfSwKLQl7InR4X2RlZmVycmVkX29rIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMuZGVmZmVyKX0sCi0JeyJ0eF9zaW5nbGVfY29sbF9vayIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnNjYyl9LAotCXsidHhfbXVsdGlfY29sbF9vayIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLm1jYyl9LAotCXsidHhfdW5kZXJ1biIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnR4X3VuZGVydW4pfSwKLQl7InR4X3RydW5jIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMudHhfdHJ1bmMpfSwKLQl7InR4X3BhdXNlIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMudHhfcGF1c2UpfSwKLQl7InJ4X3BhdXNlIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfcGF1c2UpfSwKLQl7InJ4X3JyZF9vdiIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnJ4X3JyZF9vdil9LAotCXsicnhfdHJ1bmMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF90cnVuYyl9Ci19OwotCi1zdGF0aWMgdm9pZCBhdGwxX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IGk7Ci0JY2hhciAqcDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0bDFfZ3N0cmluZ3Nfc3RhdHMpOyBpKyspIHsKLQkJcCA9IChjaGFyICopYWRhcHRlcithdGwxX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0OwotCQlkYXRhW2ldID0gKGF0bDFfZ3N0cmluZ3Nfc3RhdHNbaV0uc2l6ZW9mX3N0YXQgPT0KLQkJCXNpemVvZih1NjQpKSA/ICoodTY0ICopcCA6ICoodTMyICopcDsKLQl9Ci0KLX0KLQotc3RhdGljIGludCBhdGwxX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBzc2V0KQotewotCXN3aXRjaCAoc3NldCkgewotCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlyZXR1cm4gQVJSQVlfU0laRShhdGwxX2dzdHJpbmdzX3N0YXRzKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotfQotCi1zdGF0aWMgaW50IGF0bDFfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJc3RydWN0IGV0aHRvb2xfY21kICplY21kKQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhdGwxX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQotCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKLQkJCSAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAotCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAotCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAotCQkJICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCSAgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX1RQKTsKLQllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfVFA7Ci0JaWYgKGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfQVVUT19TRU5TT1IgfHwKLQkgICAgaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV8xMDAwTV9GVUxMKSB7Ci0JCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKLQkJaWYgKGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfQVVUT19TRU5TT1IpIHsKLQkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKLQkJCWVjbWQtPmFkdmVydGlzaW5nIHw9Ci0JCQkgICAgKEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKLQkJCSAgICAgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAotCQkJICAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAotCQkJICAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAotCQkJICAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKTsKLQkJfQotCQllbHNlCi0JCQllY21kLT5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7Ci0JfQotCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwotCWVjbWQtPnBoeV9hZGRyZXNzID0gMDsKLQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7Ci0KLQlpZiAobmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSB7Ci0JCXUxNiBsaW5rX3NwZWVkLCBsaW5rX2R1cGxleDsKLQkJYXRsMV9nZXRfc3BlZWRfYW5kX2R1cGxleChodywgJmxpbmtfc3BlZWQsICZsaW5rX2R1cGxleCk7Ci0JCWVjbWQtPnNwZWVkID0gbGlua19zcGVlZDsKLQkJaWYgKGxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYKQotCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCWVsc2UKLQkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwotCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7Ci0JCWVjbWQtPmR1cGxleCA9IC0xOwotCX0KLQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUiB8fAotCSAgICBody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFXzEwMDBNX0ZVTEwpCi0JCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQllbHNlCi0JCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdGwxX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCXN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTE2IHBoeV9kYXRhOwotCWludCByZXRfdmFsID0gMDsKLQl1MTYgb2xkX21lZGlhX3R5cGUgPSBody0+bWVkaWFfdHlwZTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKLQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiZXRodG9vbCBzaHV0dGluZyBkb3duIGFkYXB0ZXJcbiIpOwotCQlhdGwxX2Rvd24oYWRhcHRlcik7Ci0JfQotCi0JaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCi0JCWh3LT5tZWRpYV90eXBlID0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUjsKLQllbHNlIHsKLQkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApIHsKLQkJCWlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKLQkJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCQkiY2FuJ3QgZm9yY2UgdG8gMTAwME0gaGFsZiBkdXBsZXhcbiIpOwotCQkJCXJldF92YWwgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXhpdF9zc2V0OwotCQkJfQotCQkJaHctPm1lZGlhX3R5cGUgPSBNRURJQV9UWVBFXzEwMDBNX0ZVTEw7Ci0JCX0gZWxzZSBpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKSB7Ci0JCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQkJaHctPm1lZGlhX3R5cGUgPSBNRURJQV9UWVBFXzEwME1fRlVMTDsKLQkJCX0gZWxzZQotCQkJCWh3LT5tZWRpYV90eXBlID0gTUVESUFfVFlQRV8xMDBNX0hBTEY7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCWh3LT5tZWRpYV90eXBlID0gTUVESUFfVFlQRV8xME1fRlVMTDsKLQkJCWVsc2UKLQkJCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfMTBNX0hBTEY7Ci0JCX0KLQl9Ci0Jc3dpdGNoIChody0+bWVkaWFfdHlwZSkgewotCWNhc2UgTUVESUFfVFlQRV9BVVRPX1NFTlNPUjoKLQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPQotCQkgICAgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAotCQkgICAgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAotCQkgICAgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKLQkJICAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8Ci0JCSAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKLQkJICAgIEFEVkVSVElTRURfQXV0b25lZyB8IEFEVkVSVElTRURfVFA7Ci0JCWJyZWFrOwotCWNhc2UgTUVESUFfVFlQRV8xMDAwTV9GVUxMOgotCQllY21kLT5hZHZlcnRpc2luZyA9Ci0JCSAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKLQkJICAgIEFEVkVSVElTRURfQXV0b25lZyB8IEFEVkVSVElTRURfVFA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVjbWQtPmFkdmVydGlzaW5nID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmIChhdGwxX3BoeV9zZXR1cF9hdXRvbmVnX2FkdihodykpIHsKLQkJcmV0X3ZhbCA9IC1FSU5WQUw7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkiaW52YWxpZCBldGh0b29sIHNwZWVkL2R1cGxleCBzZXR0aW5nXG4iKTsKLQkJZ290byBleGl0X3NzZXQ7Ci0JfQotCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8Ci0JICAgIGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfMTAwME1fRlVMTCkKLQkJcGh5X2RhdGEgPSBNSUlfQ1JfUkVTRVQgfCBNSUlfQ1JfQVVUT19ORUdfRU47Ci0JZWxzZSB7Ci0JCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKLQkJY2FzZSBNRURJQV9UWVBFXzEwME1fRlVMTDoKLQkJCXBoeV9kYXRhID0KLQkJCSAgICBNSUlfQ1JfRlVMTF9EVVBMRVggfCBNSUlfQ1JfU1BFRURfMTAwIHwKLQkJCSAgICBNSUlfQ1JfUkVTRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBNRURJQV9UWVBFXzEwME1fSEFMRjoKLQkJCXBoeV9kYXRhID0gTUlJX0NSX1NQRUVEXzEwMCB8IE1JSV9DUl9SRVNFVDsKLQkJCWJyZWFrOwotCQljYXNlIE1FRElBX1RZUEVfMTBNX0ZVTEw6Ci0JCQlwaHlfZGF0YSA9Ci0JCQkgICAgTUlJX0NSX0ZVTExfRFVQTEVYIHwgTUlJX0NSX1NQRUVEXzEwIHwgTUlJX0NSX1JFU0VUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CS8qIE1FRElBX1RZUEVfMTBNX0hBTEY6ICovCi0JCQlwaHlfZGF0YSA9IE1JSV9DUl9TUEVFRF8xMCB8IE1JSV9DUl9SRVNFVDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWF0bDFfd3JpdGVfcGh5X3JlZyhodywgTUlJX0JNQ1IsIHBoeV9kYXRhKTsKLWV4aXRfc3NldDoKLQlpZiAocmV0X3ZhbCkKLQkJaHctPm1lZGlhX3R5cGUgPSBvbGRfbWVkaWFfdHlwZTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKLQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAiZXRodG9vbCBzdGFydGluZyBhZGFwdGVyXG4iKTsKLQkJYXRsMV91cChhZGFwdGVyKTsKLQl9IGVsc2UgaWYgKCFyZXRfdmFsKSB7Ci0JCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgImV0aHRvb2wgcmVzZXR0aW5nIGFkYXB0ZXJcbiIpOwotCQlhdGwxX3Jlc2V0KGFkYXB0ZXIpOwotCX0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotc3RhdGljIHZvaWQgYXRsMV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgYXRsMV9kcml2ZXJfbmFtZSwgc2l6ZW9mKGRydmluZm8tPmRyaXZlcikpOwotCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgYXRsMV9kcml2ZXJfdmVyc2lvbiwKLQkJc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pKTsKLQlzdHJuY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCBzaXplb2YoZHJ2aW5mby0+ZndfdmVyc2lvbikpOwotCXN0cm5jcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLAotCQlzaXplb2YoZHJ2aW5mby0+YnVzX2luZm8pKTsKLQlkcnZpbmZvLT5lZWR1bXBfbGVuID0gQVRMMV9FRURVTVBfTEVOOwotfQotCi1zdGF0aWMgdm9pZCBhdGwxX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCSAgICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwgV0FLRV9CQ0FTVCB8IFdBS0VfTUFHSUM7Ci0Jd29sLT53b2xvcHRzID0gMDsKLQlpZiAoYWRhcHRlci0+d29sICYgQVRMMV9XVUZDX0VYKQotCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9VQ0FTVDsKLQlpZiAoYWRhcHRlci0+d29sICYgQVRMMV9XVUZDX01DKQotCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQ0FTVDsKLQlpZiAoYWRhcHRlci0+d29sICYgQVRMMV9XVUZDX0JDKQotCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9CQ0FTVDsKLQlpZiAoYWRhcHRlci0+d29sICYgQVRMMV9XVUZDX01BRykKLQkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUFHSUM7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGF0bDFfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKHdvbC0+d29sb3B0cyAmIChXQUtFX1BIWSB8IFdBS0VfQVJQIHwgV0FLRV9NQUdJQ1NFQ1VSRSkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlhZGFwdGVyLT53b2wgPSAwOwotCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1VDQVNUKQotCQlhZGFwdGVyLT53b2wgfD0gQVRMMV9XVUZDX0VYOwotCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKQotCQlhZGFwdGVyLT53b2wgfD0gQVRMMV9XVUZDX01DOwotCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX0JDQVNUKQotCQlhZGFwdGVyLT53b2wgfD0gQVRMMV9XVUZDX0JDOwotCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQotCQlhZGFwdGVyLT53b2wgfD0gQVRMMV9XVUZDX01BRzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYXRsMV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhdGwxX3RwZF9yaW5nICp0eGRyID0gJmFkYXB0ZXItPnRwZF9yaW5nOwotCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyeGRyID0gJmFkYXB0ZXItPnJmZF9yaW5nOwotCi0JcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBBVEwxX01BWF9SRkQ7Ci0JcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBBVEwxX01BWF9UUEQ7Ci0JcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7Ci0JcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSAwOwotCXJpbmctPnJ4X3BlbmRpbmcgPSByeGRyLT5jb3VudDsKLQlyaW5nLT50eF9wZW5kaW5nID0gdHhkci0+Y291bnQ7Ci0JcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKLQlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKLX0KLQotc3RhdGljIGludCBhdGwxX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGF0bDFfdHBkX3JpbmcgKnRwZHIgPSAmYWRhcHRlci0+dHBkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfcnJkX3JpbmcgKnJyZHIgPSAmYWRhcHRlci0+cnJkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfcmZkX3JpbmcgKnJmZHIgPSAmYWRhcHRlci0+cmZkX3Jpbmc7Ci0KLQlzdHJ1Y3QgYXRsMV90cGRfcmluZyB0cGRfb2xkLCB0cGRfbmV3OwotCXN0cnVjdCBhdGwxX3JmZF9yaW5nIHJmZF9vbGQsIHJmZF9uZXc7Ci0Jc3RydWN0IGF0bDFfcnJkX3JpbmcgcnJkX29sZCwgcnJkX25ldzsKLQlzdHJ1Y3QgYXRsMV9yaW5nX2hlYWRlciByaGRyX29sZCwgcmhkcl9uZXc7Ci0JaW50IGVycjsKLQotCXRwZF9vbGQgPSBhZGFwdGVyLT50cGRfcmluZzsKLQlyZmRfb2xkID0gYWRhcHRlci0+cmZkX3Jpbmc7Ci0JcnJkX29sZCA9IGFkYXB0ZXItPnJyZF9yaW5nOwotCXJoZHJfb2xkID0gYWRhcHRlci0+cmluZ19oZWFkZXI7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQotCQlhdGwxX2Rvd24oYWRhcHRlcik7Ci0KLQlyZmRyLT5jb3VudCA9ICh1MTYpIG1heChyaW5nLT5yeF9wZW5kaW5nLCAodTMyKSBBVEwxX01JTl9SRkQpOwotCXJmZHItPmNvdW50ID0gcmZkci0+Y291bnQgPiBBVEwxX01BWF9SRkQgPyBBVEwxX01BWF9SRkQgOgotCQkJcmZkci0+Y291bnQ7Ci0JcmZkci0+Y291bnQgPSAocmZkci0+Y291bnQgKyAzKSAmIH4zOwotCXJyZHItPmNvdW50ID0gcmZkci0+Y291bnQ7Ci0KLQl0cGRyLT5jb3VudCA9ICh1MTYpIG1heChyaW5nLT50eF9wZW5kaW5nLCAodTMyKSBBVEwxX01JTl9UUEQpOwotCXRwZHItPmNvdW50ID0gdHBkci0+Y291bnQgPiBBVEwxX01BWF9UUEQgPyBBVEwxX01BWF9UUEQgOgotCQkJdHBkci0+Y291bnQ7Ci0JdHBkci0+Y291bnQgPSAodHBkci0+Y291bnQgKyAzKSAmIH4zOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewotCQkvKiB0cnkgdG8gZ2V0IG5ldyByZXNvdXJjZXMgYmVmb3JlIGRlbGV0aW5nIG9sZCAqLwotCQllcnIgPSBhdGwxX3NldHVwX3JpbmdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfc2V0dXBfcmluZzsKLQotCQkvKgotCQkgKiBzYXZlIHRoZSBuZXcsIHJlc3RvcmUgdGhlIG9sZCBpbiBvcmRlciB0byBmcmVlIGl0LAotCQkgKiB0aGVuIHJlc3RvcmUgdGhlIG5ldyBiYWNrIGFnYWluCi0JCSAqLwotCi0JCXJmZF9uZXcgPSBhZGFwdGVyLT5yZmRfcmluZzsKLQkJcnJkX25ldyA9IGFkYXB0ZXItPnJyZF9yaW5nOwotCQl0cGRfbmV3ID0gYWRhcHRlci0+dHBkX3Jpbmc7Ci0JCXJoZHJfbmV3ID0gYWRhcHRlci0+cmluZ19oZWFkZXI7Ci0JCWFkYXB0ZXItPnJmZF9yaW5nID0gcmZkX29sZDsKLQkJYWRhcHRlci0+cnJkX3JpbmcgPSBycmRfb2xkOwotCQlhZGFwdGVyLT50cGRfcmluZyA9IHRwZF9vbGQ7Ci0JCWFkYXB0ZXItPnJpbmdfaGVhZGVyID0gcmhkcl9vbGQ7Ci0JCWF0bDFfZnJlZV9yaW5nX3Jlc291cmNlcyhhZGFwdGVyKTsKLQkJYWRhcHRlci0+cmZkX3JpbmcgPSByZmRfbmV3OwotCQlhZGFwdGVyLT5ycmRfcmluZyA9IHJyZF9uZXc7Ci0JCWFkYXB0ZXItPnRwZF9yaW5nID0gdHBkX25ldzsKLQkJYWRhcHRlci0+cmluZ19oZWFkZXIgPSByaGRyX25ldzsKLQotCQllcnIgPSBhdGwxX3VwKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9zZXR1cF9yaW5nOgotCWFkYXB0ZXItPnJmZF9yaW5nID0gcmZkX29sZDsKLQlhZGFwdGVyLT5ycmRfcmluZyA9IHJyZF9vbGQ7Ci0JYWRhcHRlci0+dHBkX3JpbmcgPSB0cGRfb2xkOwotCWFkYXB0ZXItPnJpbmdfaGVhZGVyID0gcmhkcl9vbGQ7Ci0JYXRsMV91cChhZGFwdGVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBhdGwxX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwYXVzZSkKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0KLQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUiB8fAotCSAgICBody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFXzEwMDBNX0ZVTEwpIHsKLQkJZXBhdXNlLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JfSBlbHNlIHsKLQkJZXBhdXNlLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCX0KLQllcGF1c2UtPnJ4X3BhdXNlID0gMTsKLQllcGF1c2UtPnR4X3BhdXNlID0gMTsKLX0KLQotc3RhdGljIGludCBhdGwxX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwYXVzZSkKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0KLQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUiB8fAotCSAgICBody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFXzEwMDBNX0ZVTEwpIHsKLQkJZXBhdXNlLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JfSBlbHNlIHsKLQkJZXBhdXNlLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCX0KLQotCWVwYXVzZS0+cnhfcGF1c2UgPSAxOwotCWVwYXVzZS0+dHhfcGF1c2UgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgYXRsMV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBhdGwxX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsCi0JCQkJdTggKmRhdGEpCi17Ci0JdTggKnAgPSBkYXRhOwotCWludCBpOwotCi0Jc3dpdGNoIChzdHJpbmdzZXQpIHsKLQljYXNlIEVUSF9TU19TVEFUUzoKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXRsMV9nc3RyaW5nc19zdGF0cyk7IGkrKykgewotCQkJbWVtY3B5KHAsIGF0bDFfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9zdHJpbmcsCi0JCQkJRVRIX0dTVFJJTkdfTEVOKTsKLQkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQl9Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBhdGwxX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCXUxNiBwaHlfZGF0YTsKLQkJYXRsMV9kb3duKGFkYXB0ZXIpOwotCi0JCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8Ci0JCQlody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFXzEwMDBNX0ZVTEwpIHsKLQkJCXBoeV9kYXRhID0gTUlJX0NSX1JFU0VUIHwgTUlJX0NSX0FVVE9fTkVHX0VOOwotCQl9IGVsc2UgewotCQkJc3dpdGNoIChody0+bWVkaWFfdHlwZSkgewotCQkJY2FzZSBNRURJQV9UWVBFXzEwME1fRlVMTDoKLQkJCQlwaHlfZGF0YSA9IE1JSV9DUl9GVUxMX0RVUExFWCB8Ci0JCQkJCU1JSV9DUl9TUEVFRF8xMDAgfCBNSUlfQ1JfUkVTRVQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1FRElBX1RZUEVfMTAwTV9IQUxGOgotCQkJCXBoeV9kYXRhID0gTUlJX0NSX1NQRUVEXzEwMCB8IE1JSV9DUl9SRVNFVDsKLQkJCQlicmVhazsKLQkJCWNhc2UgTUVESUFfVFlQRV8xME1fRlVMTDoKLQkJCQlwaHlfZGF0YSA9IE1JSV9DUl9GVUxMX0RVUExFWCB8Ci0JCQkJCU1JSV9DUl9TUEVFRF8xMCB8IE1JSV9DUl9SRVNFVDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6ICAvKiBNRURJQV9UWVBFXzEwTV9IQUxGICovCi0JCQkJcGh5X2RhdGEgPSBNSUlfQ1JfU1BFRURfMTAgfCBNSUlfQ1JfUkVTRVQ7Ci0JCQl9Ci0JCX0KLQkJYXRsMV93cml0ZV9waHlfcmVnKGh3LCBNSUlfQk1DUiwgcGh5X2RhdGEpOwotCQlhdGwxX3VwKGFkYXB0ZXIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDFfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9zZXR0aW5ncwkJPSBhdGwxX2dldF9zZXR0aW5ncywKLQkuc2V0X3NldHRpbmdzCQk9IGF0bDFfc2V0X3NldHRpbmdzLAotCS5nZXRfZHJ2aW5mbwkJPSBhdGwxX2dldF9kcnZpbmZvLAotCS5nZXRfd29sCQk9IGF0bDFfZ2V0X3dvbCwKLQkuc2V0X3dvbAkJPSBhdGwxX3NldF93b2wsCi0JLmdldF9yaW5ncGFyYW0JCT0gYXRsMV9nZXRfcmluZ3BhcmFtLAotCS5zZXRfcmluZ3BhcmFtCQk9IGF0bDFfc2V0X3JpbmdwYXJhbSwKLQkuZ2V0X3BhdXNlcGFyYW0JCT0gYXRsMV9nZXRfcGF1c2VwYXJhbSwKLQkuc2V0X3BhdXNlcGFyYW0gCT0gYXRsMV9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0JCT0gYXRsMV9nZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKLQkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3N0cmluZ3MJCT0gYXRsMV9nZXRfc3RyaW5ncywKLQkubndheV9yZXNldAkJPSBhdGwxX253YXlfcmVzZXQsCi0JLmdldF9ldGh0b29sX3N0YXRzCT0gYXRsMV9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3NzZXRfY291bnQJCT0gYXRsMV9nZXRfc3NldF9jb3VudCwKLQkuc2V0X3RzbwkJPSBldGh0b29sX29wX3NldF90c28sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmMgYi9kcml2ZXJzL25ldC9hdGwxL2F0bDFfaHcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzYmQyMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfaHcuYworKysgL2Rldi9udWxsCkBAIC0xLDcyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA2IEF0dGFuc2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0KGMpIDIwMDYgQ2hyaXMgU25vb2sgPGNzbm9va0ByZWRoYXQuY29tPgotICogQ29weXJpZ2h0KGMpIDIwMDYgSmF5IENsaWJ1cm4gPGpjbGlidXJuQGdtYWlsLmNvbT4KLSAqCi0gKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCi0gKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQotICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotI2luY2x1ZGUgImF0bDEuaCIKLQotLyoKLSAqIFJlc2V0IHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0czsgbWFzayBhbmQgY2xlYXIgYWxsIGludGVycnVwdHMuCi0gKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQotICogcmV0dXJuIDogQVRMMV9TVUNDRVNTICBvciAgaWRsZSBzdGF0dXMgKGlmIGVycm9yKQotICovCi1zMzIgYXRsMV9yZXNldF9odyhzdHJ1Y3QgYXRsMV9odyAqaHcpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBody0+YmFjay0+cGRldjsKLQl1MzIgaWNyOwotCWludCBpOwotCi0JLyoKLQkgKiBDbGVhciBJbnRlcnJ1cHQgbWFzayB0byBzdG9wIGJvYXJkIGZyb20gZ2VuZXJhdGluZwotCSAqIGludGVycnVwdHMgJiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgZXZlbnRzCi0JICovCi0JLyoKLQkgKiBpb3dyaXRlMzIoMCwgaHctPmh3X2FkZHIgKyBSRUdfSU1SKTsKLQkgKiBpb3dyaXRlMzIoMHhmZmZmZmZmZiwgaHctPmh3X2FkZHIgKyBSRUdfSVNSKTsKLQkgKi8KLQotCS8qCi0JICogSXNzdWUgU29mdCBSZXNldCB0byB0aGUgTUFDLiAgVGhpcyB3aWxsIHJlc2V0IHRoZSBjaGlwJ3MKLQkgKiB0cmFuc21pdCwgcmVjZWl2ZSwgRE1BLiAgSXQgd2lsbCBub3QgZWZmZWN0Ci0JICogdGhlIGN1cnJlbnQgUENJIGNvbmZpZ3VyYXRpb24uICBUaGUgZ2xvYmFsIHJlc2V0IGJpdCBpcyBzZWxmLQotCSAqIGNsZWFyaW5nLCBhbmQgc2hvdWxkIGNsZWFyIHdpdGhpbiBhIG1pY3Jvc2Vjb25kLgotCSAqLwotCWlvd3JpdGUzMihNQVNURVJfQ1RSTF9TT0ZUX1JTVCwgaHctPmh3X2FkZHIgKyBSRUdfTUFTVEVSX0NUUkwpOwotCWlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX01BU1RFUl9DVFJMKTsKLQotCWlvd3JpdGUxNigxLCBody0+aHdfYWRkciArIFJFR19HUEhZX0VOQUJMRSk7Ci0JaW9yZWFkMTYoaHctPmh3X2FkZHIgKyBSRUdfR1BIWV9FTkFCTEUpOwotCi0JbXNsZWVwKDEpOwkJLyogZGVsYXkgYWJvdXQgMW1zICovCi0KLQkvKiBXYWl0IGF0IGxlYXN0IDEwbXMgZm9yIEFsbCBtb2R1bGUgdG8gYmUgSWRsZSAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWljciA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX0lETEVfU1RBVFVTKTsKLQkJaWYgKCFpY3IpCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwkvKiBkZWxheSAxIG1zICovCi0JCWNwdV9yZWxheCgpOwkvKiBGSVhNRTogaXMgdGhpcyBzdGlsbCB0aGUgcmlnaHQgd2F5IHRvIGRvIHRoaXM/ICovCi0JfQotCi0JaWYgKGljcikgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJJQ1IgPSAweCV4XG4iLCBpY3IpOwotCQlyZXR1cm4gaWNyOwotCX0KLQotCXJldHVybiBBVEwxX1NVQ0NFU1M7Ci19Ci0KLS8qIGZ1bmN0aW9uIGFib3V0IEVFUFJPTQotICoKLSAqIGNoZWNrX2VlcHJvbV9leGlzdAotICogcmV0dXJuIDAgaWYgZWVwcm9tIGV4aXN0Ci0gKi8KLXN0YXRpYyBpbnQgYXRsMV9jaGVja19lZXByb21fZXhpc3Qoc3RydWN0IGF0bDFfaHcgKmh3KQotewotCXUzMiB2YWx1ZTsKLQl2YWx1ZSA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9DVFJMKTsKLQlpZiAodmFsdWUgJiBTUElfRkxBU0hfQ1RSTF9FTl9WUEQpIHsKLQkJdmFsdWUgJj0gflNQSV9GTEFTSF9DVFJMX0VOX1ZQRDsKLQkJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfQ1RSTCk7Ci0JfQotCi0JdmFsdWUgPSBpb3JlYWQxNihody0+aHdfYWRkciArIFJFR19QQ0lFX0NBUF9MSVNUKTsKLQlyZXR1cm4gKCh2YWx1ZSAmIDB4RkYwMCkgPT0gMHg2QzAwKSA/IDAgOiAxOwotfQotCi1zdGF0aWMgYm9vbCBhdGwxX3JlYWRfZWVwcm9tKHN0cnVjdCBhdGwxX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpwX3ZhbHVlKQotewotCWludCBpOwotCXUzMiBjb250cm9sOwotCi0JaWYgKG9mZnNldCAmIDMpCi0JCXJldHVybiBmYWxzZTsJLyogYWRkcmVzcyBkbyBub3QgYWxpZ24gKi8KLQotCWlvd3JpdGUzMigwLCBody0+aHdfYWRkciArIFJFR19WUERfREFUQSk7Ci0JY29udHJvbCA9IChvZmZzZXQgJiBWUERfQ0FQX1ZQRF9BRERSX01BU0spIDw8IFZQRF9DQVBfVlBEX0FERFJfU0hJRlQ7Ci0JaW93cml0ZTMyKGNvbnRyb2wsIGh3LT5od19hZGRyICsgUkVHX1ZQRF9DQVApOwotCWlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1ZQRF9DQVApOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJbXNsZWVwKDIpOwotCQljb250cm9sID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfVlBEX0NBUCk7Ci0JCWlmIChjb250cm9sICYgVlBEX0NBUF9WUERfRkxBRykKLQkJCWJyZWFrOwotCX0KLQlpZiAoY29udHJvbCAmIFZQRF9DQVBfVlBEX0ZMQUcpIHsKLQkJKnBfdmFsdWUgPSBpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19WUERfREFUQSk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7CQkvKiB0aW1lb3V0ICovCi19Ci0KLS8qCi0gKiBSZWFkcyB0aGUgdmFsdWUgZnJvbSBhIFBIWSByZWdpc3RlcgotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqIHJlZ19hZGRyIC0gYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIHRvIHJlYWQKLSAqLwotczMyIGF0bDFfcmVhZF9waHlfcmVnKHN0cnVjdCBhdGwxX2h3ICpodywgdTE2IHJlZ19hZGRyLCB1MTYgKnBoeV9kYXRhKQotewotCXUzMiB2YWw7Ci0JaW50IGk7Ci0KLQl2YWwgPSAoKHUzMikgKHJlZ19hZGRyICYgTURJT19SRUdfQUREUl9NQVNLKSkgPDwgTURJT19SRUdfQUREUl9TSElGVCB8Ci0JCU1ESU9fU1RBUlQgfCBNRElPX1NVUF9QUkVBTUJMRSB8IE1ESU9fUlcgfCBNRElPX0NMS18yNV80IDw8Ci0JCU1ESU9fQ0xLX1NFTF9TSElGVDsKLQlpb3dyaXRlMzIodmFsLCBody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOwotCWlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX01ESU9fQ1RSTCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTURJT19XQUlUX1RJTUVTOyBpKyspIHsKLQkJdWRlbGF5KDIpOwotCQl2YWwgPSBpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOwotCQlpZiAoISh2YWwgJiAoTURJT19TVEFSVCB8IE1ESU9fQlVTWSkpKQotCQkJYnJlYWs7Ci0JfQotCWlmICghKHZhbCAmIChNRElPX1NUQVJUIHwgTURJT19CVVNZKSkpIHsKLQkJKnBoeV9kYXRhID0gKHUxNikgdmFsOwotCQlyZXR1cm4gQVRMMV9TVUNDRVNTOwotCX0KLQlyZXR1cm4gQVRMMV9FUlJfUEhZOwotfQotCi0jZGVmaW5lIENVU1RPTV9TUElfQ1NfU0VUVVAJMgotI2RlZmluZSBDVVNUT01fU1BJX0NMS19ISQkyCi0jZGVmaW5lIENVU1RPTV9TUElfQ0xLX0xPCTIKLSNkZWZpbmUgQ1VTVE9NX1NQSV9DU19IT0xECTIKLSNkZWZpbmUgQ1VTVE9NX1NQSV9DU19ISQkzCi0KLXN0YXRpYyBib29sIGF0bDFfc3BpX3JlYWQoc3RydWN0IGF0bDFfaHcgKmh3LCB1MzIgYWRkciwgdTMyICpidWYpCi17Ci0JaW50IGk7Ci0JdTMyIHZhbHVlOwotCi0JaW93cml0ZTMyKDAsIGh3LT5od19hZGRyICsgUkVHX1NQSV9EQVRBKTsKLQlpb3dyaXRlMzIoYWRkciwgaHctPmh3X2FkZHIgKyBSRUdfU1BJX0FERFIpOwotCi0JdmFsdWUgPSBTUElfRkxBU0hfQ1RSTF9XQUlUX1JFQURZIHwKLQkgICAgKENVU1RPTV9TUElfQ1NfU0VUVVAgJiBTUElfRkxBU0hfQ1RSTF9DU19TRVRVUF9NQVNLKSA8PAotCSAgICBTUElfRkxBU0hfQ1RSTF9DU19TRVRVUF9TSElGVCB8IChDVVNUT01fU1BJX0NMS19ISSAmCi0JCQkJCSAgICAgU1BJX0ZMQVNIX0NUUkxfQ0xLX0hJX01BU0spIDw8Ci0JICAgIFNQSV9GTEFTSF9DVFJMX0NMS19ISV9TSElGVCB8IChDVVNUT01fU1BJX0NMS19MTyAmCi0JCQkJCSAgIFNQSV9GTEFTSF9DVFJMX0NMS19MT19NQVNLKSA8PAotCSAgICBTUElfRkxBU0hfQ1RSTF9DTEtfTE9fU0hJRlQgfCAoQ1VTVE9NX1NQSV9DU19IT0xEICYKLQkJCQkJICAgU1BJX0ZMQVNIX0NUUkxfQ1NfSE9MRF9NQVNLKSA8PAotCSAgICBTUElfRkxBU0hfQ1RSTF9DU19IT0xEX1NISUZUIHwgKENVU1RPTV9TUElfQ1NfSEkgJgotCQkJCQkgICAgU1BJX0ZMQVNIX0NUUkxfQ1NfSElfTUFTSykgPDwKLQkgICAgU1BJX0ZMQVNIX0NUUkxfQ1NfSElfU0hJRlQgfCAoMSAmIFNQSV9GTEFTSF9DVFJMX0lOU19NQVNLKSA8PAotCSAgICBTUElfRkxBU0hfQ1RSTF9JTlNfU0hJRlQ7Ci0KLQlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9DVFJMKTsKLQotCXZhbHVlIHw9IFNQSV9GTEFTSF9DVFJMX1NUQVJUOwotCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX0NUUkwpOwotCWlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9DVFJMKTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCW1zbGVlcCgxKTsJLyogMW1zICovCi0JCXZhbHVlID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX0NUUkwpOwotCQlpZiAoISh2YWx1ZSAmIFNQSV9GTEFTSF9DVFJMX1NUQVJUKSkKLQkJCWJyZWFrOwotCX0KLQotCWlmICh2YWx1ZSAmIFNQSV9GTEFTSF9DVFJMX1NUQVJUKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkqYnVmID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfU1BJX0RBVEEpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBnZXRfcGVybWFuZW50X2FkZHJlc3MKLSAqIHJldHVybiAwIGlmIGdldCB2YWxpZCBtYWMgYWRkcmVzcywKLSAqLwotc3RhdGljIGludCBhdGwxX2dldF9wZXJtYW5lbnRfYWRkcmVzcyhzdHJ1Y3QgYXRsMV9odyAqaHcpCi17Ci0JdTMyIGFkZHJbMl07Ci0JdTMyIGksIGNvbnRyb2w7Ci0JdTE2IHJlZzsKLQl1OCBldGhfYWRkcltFVEhfQUxFTl07Ci0JYm9vbCBrZXlfdmFsaWQ7Ci0KLQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihody0+cGVybV9tYWNfYWRkcikpCi0JCXJldHVybiAwOwotCi0JLyogaW5pdCAqLwotCWFkZHJbMF0gPSBhZGRyWzFdID0gMDsKLQotCWlmICghYXRsMV9jaGVja19lZXByb21fZXhpc3QoaHcpKSB7CS8qIGVlcHJvbSBleGlzdCAqLwotCQlyZWcgPSAwOwotCQlrZXlfdmFsaWQgPSBmYWxzZTsKLQkJLyogUmVhZCBvdXQgYWxsIEVFUFJPTSBjb250ZW50ICovCi0JCWkgPSAwOwotCQl3aGlsZSAoMSkgewotCQkJaWYgKGF0bDFfcmVhZF9lZXByb20oaHcsIGkgKyAweDEwMCwgJmNvbnRyb2wpKSB7Ci0JCQkJaWYgKGtleV92YWxpZCkgewotCQkJCQlpZiAocmVnID09IFJFR19NQUNfU1RBX0FERFIpCi0JCQkJCQlhZGRyWzBdID0gY29udHJvbDsKLQkJCQkJZWxzZSBpZiAocmVnID09IChSRUdfTUFDX1NUQV9BRERSICsgNCkpCi0JCQkJCQlhZGRyWzFdID0gY29udHJvbDsKLQkJCQkJa2V5X3ZhbGlkID0gZmFsc2U7Ci0JCQkJfSBlbHNlIGlmICgoY29udHJvbCAmIDB4ZmYpID09IDB4NUEpIHsKLQkJCQkJa2V5X3ZhbGlkID0gdHJ1ZTsKLQkJCQkJcmVnID0gKHUxNikgKGNvbnRyb2wgPj4gMTYpOwotCQkJCX0gZWxzZQotCQkJCQlicmVhazsJLyogYXNzdW1lIGRhdGEgZW5kIHdoaWxlIGVuY291bnQgYW4gaW52YWxpZCBLRVlXT1JEICovCi0JCQl9IGVsc2UKLQkJCQlicmVhazsJLyogcmVhZCBlcnJvciAqLwotCQkJaSArPSA0OwotCQl9Ci0KLQkJKih1MzIgKikgJmV0aF9hZGRyWzJdID0gc3dhYjMyKGFkZHJbMF0pOwotCQkqKHUxNiAqKSAmZXRoX2FkZHJbMF0gPSBzd2FiMTYoKih1MTYgKikgJmFkZHJbMV0pOwotCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihldGhfYWRkcikpIHsKLQkJCW1lbWNweShody0+cGVybV9tYWNfYWRkciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIHNlZSBpZiBTUEkgRkxBR1MgZXhpc3QgPyAqLwotCWFkZHJbMF0gPSBhZGRyWzFdID0gMDsKLQlyZWcgPSAwOwotCWtleV92YWxpZCA9IGZhbHNlOwotCWkgPSAwOwotCXdoaWxlICgxKSB7Ci0JCWlmIChhdGwxX3NwaV9yZWFkKGh3LCBpICsgMHgxZjAwMCwgJmNvbnRyb2wpKSB7Ci0JCQlpZiAoa2V5X3ZhbGlkKSB7Ci0JCQkJaWYgKHJlZyA9PSBSRUdfTUFDX1NUQV9BRERSKQotCQkJCQlhZGRyWzBdID0gY29udHJvbDsKLQkJCQllbHNlIGlmIChyZWcgPT0gKFJFR19NQUNfU1RBX0FERFIgKyA0KSkKLQkJCQkJYWRkclsxXSA9IGNvbnRyb2w7Ci0JCQkJa2V5X3ZhbGlkID0gZmFsc2U7Ci0JCQl9IGVsc2UgaWYgKChjb250cm9sICYgMHhmZikgPT0gMHg1QSkgewotCQkJCWtleV92YWxpZCA9IHRydWU7Ci0JCQkJcmVnID0gKHUxNikgKGNvbnRyb2wgPj4gMTYpOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7CS8qIGRhdGEgZW5kICovCi0JCX0gZWxzZQotCQkJYnJlYWs7CS8qIHJlYWQgZXJyb3IgKi8KLQkJaSArPSA0OwotCX0KLQotCSoodTMyICopICZldGhfYWRkclsyXSA9IHN3YWIzMihhZGRyWzBdKTsKLQkqKHUxNiAqKSAmZXRoX2FkZHJbMF0gPSBzd2FiMTYoKih1MTYgKikgJmFkZHJbMV0pOwotCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGV0aF9hZGRyKSkgewotCQltZW1jcHkoaHctPnBlcm1fbWFjX2FkZHIsIGV0aF9hZGRyLCBFVEhfQUxFTik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogT24gc29tZSBtb3RoZXJib2FyZHMsIHRoZSBNQUMgYWRkcmVzcyBpcyB3cml0dGVuIGJ5IHRoZQotCSAqIEJJT1MgZGlyZWN0bHkgdG8gdGhlIE1BQyByZWdpc3RlciBkdXJpbmcgUE9TVCwgYW5kIGlzCi0JICogbm90IHN0b3JlZCBpbiBlZXByb20uICBJZiBhbGwgZWxzZSB0aHVzIGZhciBoYXMgZmFpbGVkCi0JICogdG8gZmV0Y2ggdGhlIHBlcm1hbmVudCBNQUMgYWRkcmVzcywgdHJ5IHJlYWRpbmcgaXQgZGlyZWN0bHkuCi0JICovCi0JYWRkclswXSA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX01BQ19TVEFfQUREUik7Ci0JYWRkclsxXSA9IGlvcmVhZDE2KGh3LT5od19hZGRyICsgKFJFR19NQUNfU1RBX0FERFIgKyA0KSk7Ci0JKih1MzIgKikgJmV0aF9hZGRyWzJdID0gc3dhYjMyKGFkZHJbMF0pOwotCSoodTE2ICopICZldGhfYWRkclswXSA9IHN3YWIxNigqKHUxNiAqKSAmYWRkclsxXSk7Ci0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2FkZHIpKSB7Ci0JCW1lbWNweShody0+cGVybV9tYWNfYWRkciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBSZWFkcyB0aGUgYWRhcHRlcidzIE1BQyBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTQotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqLwotczMyIGF0bDFfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgYXRsMV9odyAqaHcpCi17Ci0JdTE2IGk7Ci0KLQlpZiAoYXRsMV9nZXRfcGVybWFuZW50X2FkZHJlc3MoaHcpKQotCQlyYW5kb21fZXRoZXJfYWRkcihody0+cGVybV9tYWNfYWRkcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJaHctPm1hY19hZGRyW2ldID0gaHctPnBlcm1fbWFjX2FkZHJbaV07Ci0JcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLX0KLQotLyoKLSAqIEhhc2hlcyBhbiBhZGRyZXNzIHRvIGRldGVybWluZSBpdHMgbG9jYXRpb24gaW4gdGhlIG11bHRpY2FzdCB0YWJsZQotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqIG1jX2FkZHIgLSB0aGUgbXVsdGljYXN0IGFkZHJlc3MgdG8gaGFzaAotICoKLSAqIGF0bDFfaGFzaF9tY19hZGRyCi0gKiAgcHVycG9zZQotICogICAgICBzZXQgaGFzaCB2YWx1ZSBmb3IgYSBtdWx0aWNhc3QgYWRkcmVzcwotICogICAgICBoYXNoIGNhbGN1IHByb2Nlc3NpbmcgOgotICogICAgICAgICAgMS4gY2FsY3UgMzJiaXQgQ1JDIGZvciBtdWx0aWNhc3QgYWRkcmVzcwotICogICAgICAgICAgMi4gcmV2ZXJzZSBjcmMgd2l0aCBNU0IgdG8gTFNCCi0gKi8KLXUzMiBhdGwxX2hhc2hfbWNfYWRkcihzdHJ1Y3QgYXRsMV9odyAqaHcsIHU4ICptY19hZGRyKQotewotCXUzMiBjcmMzMiwgdmFsdWUgPSAwOwotCWludCBpOwotCi0JY3JjMzIgPSBldGhlcl9jcmNfbGUoNiwgbWNfYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0JCXZhbHVlIHw9ICgoKGNyYzMyID4+IGkpICYgMSkgPDwgKDMxIC0gaSkpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKgotICogU2V0cyB0aGUgYml0IGluIHRoZSBtdWx0aWNhc3QgdGFibGUgY29ycmVzcG9uZGluZyB0byB0aGUgaGFzaCB2YWx1ZS4KLSAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCi0gKiBoYXNoX3ZhbHVlIC0gTXVsdGljYXN0IGFkZHJlc3MgaGFzaCB2YWx1ZQotICovCi12b2lkIGF0bDFfaGFzaF9zZXQoc3RydWN0IGF0bDFfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSkKLXsKLQl1MzIgaGFzaF9iaXQsIGhhc2hfcmVnOwotCXUzMiBtdGE7Ci0KLQkvKgotCSAqIFRoZSBIQVNIIFRhYmxlICBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDIgMzItYml0IHJlZ2lzdGVycy4KLQkgKiBJdCBpcyB0cmVhdGVkIGxpa2UgYW4gYXJyYXkgb2YgNjQgYml0cy4gIFdlIHdhbnQgdG8gc2V0Ci0JICogYml0IEJpdEFycmF5W2hhc2hfdmFsdWVdLiBTbyB3ZSBmaWd1cmUgb3V0IHdoYXQgcmVnaXN0ZXIKLQkgKiB0aGUgYml0IGlzIGluLCByZWFkIGl0LCBPUiBpbiB0aGUgbmV3IGJpdCwgdGhlbiB3cml0ZQotCSAqIGJhY2sgdGhlIG5ldyB2YWx1ZS4gIFRoZSByZWdpc3RlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZQotCSAqIHVwcGVyIDcgYml0cyBvZiB0aGUgaGFzaCB2YWx1ZSBhbmQgdGhlIGJpdCB3aXRoaW4gdGhhdAotCSAqIHJlZ2lzdGVyIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlciA1IGJpdHMgb2YgdGhlIHZhbHVlLgotCSAqLwotCWhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gMzEpICYgMHgxOwotCWhhc2hfYml0ID0gKGhhc2hfdmFsdWUgPj4gMjYpICYgMHgxRjsKLQltdGEgPSBpb3JlYWQzMigoaHctPmh3X2FkZHIgKyBSRUdfUlhfSEFTSF9UQUJMRSkgKyAoaGFzaF9yZWcgPDwgMikpOwotCW10YSB8PSAoMSA8PCBoYXNoX2JpdCk7Ci0JaW93cml0ZTMyKG10YSwgKGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpICsgKGhhc2hfcmVnIDw8IDIpKTsKLX0KLQotLyoKLSAqIFdyaXRlcyBhIHZhbHVlIHRvIGEgUEhZIHJlZ2lzdGVyCi0gKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQotICogcmVnX2FkZHIgLSBhZGRyZXNzIG9mIHRoZSBQSFkgcmVnaXN0ZXIgdG8gd3JpdGUKLSAqIGRhdGEgLSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBQSFkKLSAqLwotczMyIGF0bDFfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgYXRsMV9odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2IHBoeV9kYXRhKQotewotCWludCBpOwotCXUzMiB2YWw7Ci0KLQl2YWwgPSAoKHUzMikgKHBoeV9kYXRhICYgTURJT19EQVRBX01BU0spKSA8PCBNRElPX0RBVEFfU0hJRlQgfAotCSAgICAocmVnX2FkZHIgJiBNRElPX1JFR19BRERSX01BU0spIDw8IE1ESU9fUkVHX0FERFJfU0hJRlQgfAotCSAgICBNRElPX1NVUF9QUkVBTUJMRSB8Ci0JICAgIE1ESU9fU1RBUlQgfCBNRElPX0NMS18yNV80IDw8IE1ESU9fQ0xLX1NFTF9TSElGVDsKLQlpb3dyaXRlMzIodmFsLCBody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOwotCWlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX01ESU9fQ1RSTCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTURJT19XQUlUX1RJTUVTOyBpKyspIHsKLQkJdWRlbGF5KDIpOwotCQl2YWwgPSBpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOwotCQlpZiAoISh2YWwgJiAoTURJT19TVEFSVCB8IE1ESU9fQlVTWSkpKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkKLQkJcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLQotCXJldHVybiBBVEwxX0VSUl9QSFk7Ci19Ci0KLS8qCi0gKiBNYWtlIEwwMDEncyBQSFkgb3V0IG9mIFBvd2VyIFNhdmluZyBTdGF0ZSAoYnVnKQotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqIHdoZW4gcG93ZXIgb24sIEwwMDEncyBQSFkgYWx3YXlzIG9uIFBvd2VyIHNhdmluZyBTdGF0ZQotICogKEdpZ2FiaXQgTGluayBmb3JiaWRkZW4pCi0gKi8KLXN0YXRpYyBzMzIgYXRsMV9waHlfbGVhdmVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhdGwxX2h3ICpodykKLXsKLQlzMzIgcmV0OwotCXJldCA9IGF0bDFfd3JpdGVfcGh5X3JlZyhodywgMjksIDB4MDAyOSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gYXRsMV93cml0ZV9waHlfcmVnKGh3LCAzMCwgMCk7Ci19Ci0KLS8qCi0gKlRPRE86IGRvIHNvbWV0aGluZyBvciBnZXQgcmlkIG9mIHRoaXMKLSAqLwotczMyIGF0bDFfcGh5X2VudGVyX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYXRsMV9odyAqaHcpCi17Ci0vKiAgICBzMzIgcmV0X3ZhbDsKLSAqICAgIHUxNiBwaHlfZGF0YTsKLSAqLwotCi0vKgotICAgIHJldF92YWwgPSBhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIC4uLik7Ci0gICAgcmV0X3ZhbCA9IGF0bDFfd3JpdGVfcGh5X3JlZyhodywgLi4uKTsKLSAgICAuLi4uCi0qLwotCXJldHVybiBBVEwxX1NVQ0NFU1M7Ci19Ci0KLS8qCi0gKiBSZXNldHMgdGhlIFBIWSBhbmQgbWFrZSBhbGwgY29uZmlnIHZhbGlkYXRlCi0gKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQotICoKLSAqIFNldHMgYml0IDE1IGFuZCAxMiBvZiB0aGUgTUlJIENvbnRyb2wgcmVnaXNlciAoZm9yIEYwMDEgYnVnKQotICovCi1zdGF0aWMgczMyIGF0bDFfcGh5X3Jlc2V0KHN0cnVjdCBhdGwxX2h3ICpodykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3LT5iYWNrLT5wZGV2OwotCXMzMiByZXRfdmFsOwotCXUxNiBwaHlfZGF0YTsKLQotCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8Ci0JICAgIGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfMTAwME1fRlVMTCkKLQkJcGh5X2RhdGEgPSBNSUlfQ1JfUkVTRVQgfCBNSUlfQ1JfQVVUT19ORUdfRU47Ci0JZWxzZSB7Ci0JCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKLQkJY2FzZSBNRURJQV9UWVBFXzEwME1fRlVMTDoKLQkJCXBoeV9kYXRhID0KLQkJCSAgICBNSUlfQ1JfRlVMTF9EVVBMRVggfCBNSUlfQ1JfU1BFRURfMTAwIHwKLQkJCSAgICBNSUlfQ1JfUkVTRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBNRURJQV9UWVBFXzEwME1fSEFMRjoKLQkJCXBoeV9kYXRhID0gTUlJX0NSX1NQRUVEXzEwMCB8IE1JSV9DUl9SRVNFVDsKLQkJCWJyZWFrOwotCQljYXNlIE1FRElBX1RZUEVfMTBNX0ZVTEw6Ci0JCQlwaHlfZGF0YSA9Ci0JCQkgICAgTUlJX0NSX0ZVTExfRFVQTEVYIHwgTUlJX0NSX1NQRUVEXzEwIHwgTUlJX0NSX1JFU0VUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CS8qIE1FRElBX1RZUEVfMTBNX0hBTEY6ICovCi0JCQlwaHlfZGF0YSA9IE1JSV9DUl9TUEVFRF8xMCB8IE1JSV9DUl9SRVNFVDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0X3ZhbCA9IGF0bDFfd3JpdGVfcGh5X3JlZyhodywgTUlJX0JNQ1IsIHBoeV9kYXRhKTsKLQlpZiAocmV0X3ZhbCkgewotCQl1MzIgdmFsOwotCQlpbnQgaTsKLQkJLyogcGNpZSBzZXJkZXMgbGluayBtYXkgYmUgZG93biEgKi8KLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGNpZSBwaHkgbGluayBkb3duXG4iKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMjU7IGkrKykgewotCQkJbXNsZWVwKDEpOwotCQkJdmFsID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfTURJT19DVFJMKTsKLQkJCWlmICghKHZhbCAmIChNRElPX1NUQVJUIHwgTURJT19CVVNZKSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKHZhbCAmIChNRElPX1NUQVJUIHwgTURJT19CVVNZKSkgIT0gMCkgewotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInBjaWUgbGluayBkb3duIGF0IGxlYXN0IDI1bXNcbiIpOwotCQkJcmV0dXJuIHJldF92YWw7Ci0JCX0KLQl9Ci0JcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLX0KLQotLyoKLSAqIENvbmZpZ3VyZXMgUEhZIGF1dG9uZWcgYW5kIGZsb3cgY29udHJvbCBhZHZlcnRpc2VtZW50IHNldHRpbmdzCi0gKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQotICovCi1zMzIgYXRsMV9waHlfc2V0dXBfYXV0b25lZ19hZHYoc3RydWN0IGF0bDFfaHcgKmh3KQotewotCXMzMiByZXRfdmFsOwotCXMxNiBtaWlfYXV0b25lZ19hZHZfcmVnOwotCXMxNiBtaWlfMTAwMHRfY3RybF9yZWc7Ci0KLQkvKiBSZWFkIHRoZSBNSUkgQXV0by1OZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAoQWRkcmVzcyA0KS4gKi8KLQltaWlfYXV0b25lZ19hZHZfcmVnID0gTUlJX0FSX0RFRkFVTFRfQ0FQX01BU0s7Ci0KLQkvKiBSZWFkIHRoZSBNSUkgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLiAqLwotCW1paV8xMDAwdF9jdHJsX3JlZyA9IE1JSV9BVDAwMV9DUl8xMDAwVF9ERUZBVUxUX0NBUF9NQVNLOwotCi0JLyoKLQkgKiBGaXJzdCB3ZSBjbGVhciBhbGwgdGhlIDEwLzEwMCBtYiBzcGVlZCBiaXRzIGluIHRoZSBBdXRvLU5lZwotCSAqIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFkZHJlc3MgNCkgYW5kIHRoZSAxMDAwIG1iIHNwZWVkIGJpdHMgaW4KLQkgKiB0aGUgIDEwMDBCYXNlLVQgQ29udHJvbCBSZWdpc3RlciAoQWRkcmVzcyA5KS4KLQkgKi8KLQltaWlfYXV0b25lZ19hZHZfcmVnICY9IH5NSUlfQVJfU1BFRURfTUFTSzsKLQltaWlfMTAwMHRfY3RybF9yZWcgJj0gfk1JSV9BVDAwMV9DUl8xMDAwVF9TUEVFRF9NQVNLOwotCi0JLyoKLQkgKiBOZWVkIHRvIHBhcnNlIG1lZGlhX3R5cGUgIGFuZCBzZXQgdXAKLQkgKiB0aGUgYXBwcm9wcmlhdGUgUEhZIHJlZ2lzdGVycy4KLQkgKi8KLQlzd2l0Y2ggKGh3LT5tZWRpYV90eXBlKSB7Ci0JY2FzZSBNRURJQV9UWVBFX0FVVE9fU0VOU09SOgotCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IChNSUlfQVJfMTBUX0hEX0NBUFMgfAotCQkJCQlNSUlfQVJfMTBUX0ZEX0NBUFMgfAotCQkJCQlNSUlfQVJfMTAwVFhfSERfQ0FQUyB8Ci0JCQkJCU1JSV9BUl8xMDBUWF9GRF9DQVBTKTsKLQkJbWlpXzEwMDB0X2N0cmxfcmVnIHw9IE1JSV9BVDAwMV9DUl8xMDAwVF9GRF9DQVBTOwotCQlicmVhazsKLQotCWNhc2UgTUVESUFfVFlQRV8xMDAwTV9GVUxMOgotCQltaWlfMTAwMHRfY3RybF9yZWcgfD0gTUlJX0FUMDAxX0NSXzEwMDBUX0ZEX0NBUFM7Ci0JCWJyZWFrOwotCi0JY2FzZSBNRURJQV9UWVBFXzEwME1fRlVMTDoKLQkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBNSUlfQVJfMTAwVFhfRkRfQ0FQUzsKLQkJYnJlYWs7Ci0KLQljYXNlIE1FRElBX1RZUEVfMTAwTV9IQUxGOgotCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE1JSV9BUl8xMDBUWF9IRF9DQVBTOwotCQlicmVhazsKLQotCWNhc2UgTUVESUFfVFlQRV8xME1fRlVMTDoKLQkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBNSUlfQVJfMTBUX0ZEX0NBUFM7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBNSUlfQVJfMTBUX0hEX0NBUFM7Ci0JCWJyZWFrOwotCX0KLQotCS8qIGZsb3cgY29udHJvbCBmaXhlZCB0byBlbmFibGUgYWxsICovCi0JbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSAoTUlJX0FSX0FTTV9ESVIgfCBNSUlfQVJfUEFVU0UpOwotCi0JaHctPm1paV9hdXRvbmVnX2Fkdl9yZWcgPSBtaWlfYXV0b25lZ19hZHZfcmVnOwotCWh3LT5taWlfMTAwMHRfY3RybF9yZWcgPSBtaWlfMTAwMHRfY3RybF9yZWc7Ci0KLQlyZXRfdmFsID0gYXRsMV93cml0ZV9waHlfcmVnKGh3LCBNSUlfQURWRVJUSVNFLCBtaWlfYXV0b25lZ19hZHZfcmVnKTsKLQlpZiAocmV0X3ZhbCkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlyZXRfdmFsID0gYXRsMV93cml0ZV9waHlfcmVnKGh3LCBNSUlfQVQwMDFfQ1IsIG1paV8xMDAwdF9jdHJsX3JlZyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCi0JcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLX0KLQotLyoKLSAqIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncy4KLSAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCi0gKiBBc3N1bWVzIHRoZSBoYXJkd2FyZSBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCB0aGUKLSAqIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciBhcmUgbm90IGVuYWJsZWQuCi0gKi8KLXN0YXRpYyBzMzIgYXRsMV9zZXR1cF9saW5rKHN0cnVjdCBhdGwxX2h3ICpodykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3LT5iYWNrLT5wZGV2OwotCXMzMiByZXRfdmFsOwotCi0JLyoKLQkgKiBPcHRpb25zOgotCSAqICBQSFkgd2lsbCBhZHZlcnRpc2UgdmFsdWUocykgcGFyc2VkIGZyb20KLQkgKiAgYXV0b25lZ19hZHZlcnRpc2VkIGFuZCBmYwotCSAqICBubyBtYXR0ZXIgd2hhdCBhdXRvbmVnIGlzICwgV2Ugd2lsbCBub3Qgd2FpdCBsaW5rIHJlc3VsdC4KLQkgKi8KLQlyZXRfdmFsID0gYXRsMV9waHlfc2V0dXBfYXV0b25lZ19hZHYoaHcpOwotCWlmIChyZXRfdmFsKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIHNldHRpbmcgdXAgYXV0b25lZ290aWF0aW9uXG4iKTsKLQkJcmV0dXJuIHJldF92YWw7Ci0JfQotCS8qIFNXLlJlc2V0ICwgRW4tQXV0by1OZWcgaWYgbmVlZGVkICovCi0JcmV0X3ZhbCA9IGF0bDFfcGh5X3Jlc2V0KGh3KTsKLQlpZiAocmV0X3ZhbCkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciByZXNldHRpbmcgcGh5XG4iKTsKLQkJcmV0dXJuIHJldF92YWw7Ci0JfQotCWh3LT5waHlfY29uZmlndXJlZCA9IHRydWU7Ci0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRsMV9zcGlfZmxhc2hfZGV2IGZsYXNoX3RhYmxlW10gPSB7Ci0vKglNRlJfTkFNRSAgV1JTUiAgUkVBRCAgUFJHTSAgV1JFTiAgV1JESSAgUkRTUiAgUkRJRCAgU0VDVE9SX0VSQVNFIENISVBfRVJBU0UgKi8KLQl7IkF0bWVsIiwgMHgwMCwgMHgwMywgMHgwMiwgMHgwNiwgMHgwNCwgMHgwNSwgMHgxNSwgMHg1MiwgICAgICAgIDB4NjJ9LAotCXsiU1NUIiwgICAweDAxLCAweDAzLCAweDAyLCAweDA2LCAweDA0LCAweDA1LCAweDkwLCAweDIwLCAgICAgICAgMHg2MH0sCi0JeyJTVCIsICAgIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDYsIDB4MDQsIDB4MDUsIDB4QUIsIDB4RDgsICAgICAgICAweEM3fSwKLX07Ci0KLXN0YXRpYyB2b2lkIGF0bDFfaW5pdF9mbGFzaF9vcGNvZGUoc3RydWN0IGF0bDFfaHcgKmh3KQotewotCWlmIChody0+Zmxhc2hfdmVuZG9yID49IEFSUkFZX1NJWkUoZmxhc2hfdGFibGUpKQotCQlody0+Zmxhc2hfdmVuZG9yID0gMDsJLyogQVRNRUwgKi8KLQotCS8qIEluaXQgT1AgdGFibGUgKi8KLQlpb3dyaXRlOChmbGFzaF90YWJsZVtody0+Zmxhc2hfdmVuZG9yXS5jbWRfcHJvZ3JhbSwKLQkJaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX09QX1BST0dSQU0pOwotCWlvd3JpdGU4KGZsYXNoX3RhYmxlW2h3LT5mbGFzaF92ZW5kb3JdLmNtZF9zZWN0b3JfZXJhc2UsCi0JCWh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9PUF9TQ19FUkFTRSk7Ci0JaW93cml0ZTgoZmxhc2hfdGFibGVbaHctPmZsYXNoX3ZlbmRvcl0uY21kX2NoaXBfZXJhc2UsCi0JCWh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9PUF9DSElQX0VSQVNFKTsKLQlpb3dyaXRlOChmbGFzaF90YWJsZVtody0+Zmxhc2hfdmVuZG9yXS5jbWRfcmRpZCwKLQkJaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX09QX1JESUQpOwotCWlvd3JpdGU4KGZsYXNoX3RhYmxlW2h3LT5mbGFzaF92ZW5kb3JdLmNtZF93cmVuLAotCQlody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfT1BfV1JFTik7Ci0JaW93cml0ZTgoZmxhc2hfdGFibGVbaHctPmZsYXNoX3ZlbmRvcl0uY21kX3Jkc3IsCi0JCWh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9PUF9SRFNSKTsKLQlpb3dyaXRlOChmbGFzaF90YWJsZVtody0+Zmxhc2hfdmVuZG9yXS5jbWRfd3JzciwKLQkJaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX09QX1dSU1IpOwotCWlvd3JpdGU4KGZsYXNoX3RhYmxlW2h3LT5mbGFzaF92ZW5kb3JdLmNtZF9yZWFkLAotCQlody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfT1BfUkVBRCk7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtcyBiYXNpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBhZGFwdGVyLgotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqIEFzc3VtZXMgdGhhdCB0aGUgY29udHJvbGxlciBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCBpcyBpbiBhCi0gKiBwb3N0LXJlc2V0IHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEluaXRpYWxpemVzIG11bHRpY2FzdCB0YWJsZSwKLSAqIGFuZCAgQ2FsbHMgcm91dGluZXMgdG8gc2V0dXAgbGluawotICogTGVhdmVzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cyBkaXNhYmxlZCBhbmQgdW5pbml0aWFsaXplZC4KLSAqLwotczMyIGF0bDFfaW5pdF9odyhzdHJ1Y3QgYXRsMV9odyAqaHcpCi17Ci0JdTMyIHJldF92YWwgPSAwOwotCi0JLyogWmVybyBvdXQgdGhlIE11bHRpY2FzdCBIQVNIIHRhYmxlICovCi0JaW93cml0ZTMyKDAsIGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpOwotCS8qIGNsZWFyIHRoZSBvbGQgc2V0dGluZ3MgZnJvbSB0aGUgbXVsdGljYXN0IGhhc2ggdGFibGUgKi8KLQlpb3dyaXRlMzIoMCwgKGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpICsgKDEgPDwgMikpOwotCi0JYXRsMV9pbml0X2ZsYXNoX29wY29kZShodyk7Ci0KLQlpZiAoIWh3LT5waHlfY29uZmlndXJlZCkgewotCQkvKiBlbmFibGUgR1BIWSBMaW5rQ2hhbmdlIEludGVycnJ1cHQgKi8KLQkJcmV0X3ZhbCA9IGF0bDFfd3JpdGVfcGh5X3JlZyhodywgMTgsIDB4QzAwKTsKLQkJaWYgKHJldF92YWwpCi0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJLyogbWFrZSBQSFkgb3V0IG9mIHBvd2VyLXNhdmluZyBzdGF0ZSAqLwotCQlyZXRfdmFsID0gYXRsMV9waHlfbGVhdmVfcG93ZXJfc2F2aW5nKGh3KTsKLQkJaWYgKHJldF92YWwpCi0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJLyogQ2FsbCBhIHN1YnJvdXRpbmUgdG8gY29uZmlndXJlIHRoZSBsaW5rICovCi0JCXJldF92YWwgPSBhdGwxX3NldHVwX2xpbmsoaHcpOwotCX0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyoKLSAqIERldGVjdHMgdGhlIGN1cnJlbnQgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncyBvZiB0aGUgaGFyZHdhcmUuCi0gKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQotICogc3BlZWQgLSBTcGVlZCBvZiB0aGUgY29ubmVjdGlvbgotICogZHVwbGV4IC0gRHVwbGV4IHNldHRpbmcgb2YgdGhlIGNvbm5lY3Rpb24KLSAqLwotczMyIGF0bDFfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGF0bDFfaHcgKmh3LCB1MTYgKnNwZWVkLCB1MTYgKmR1cGxleCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3LT5iYWNrLT5wZGV2OwotCXMzMiByZXRfdmFsOwotCXUxNiBwaHlfZGF0YTsKLQotCS8qIDsgLS0tIFJlYWQgICBQSFkgU3BlY2lmaWMgU3RhdHVzIFJlZ2lzdGVyICgxNykgKi8KLQlyZXRfdmFsID0gYXRsMV9yZWFkX3BoeV9yZWcoaHcsIE1JSV9BVDAwMV9QU1NSLCAmcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQotCWlmICghKHBoeV9kYXRhICYgTUlJX0FUMDAxX1BTU1JfU1BEX0RQTFhfUkVTT0xWRUQpKQotCQlyZXR1cm4gQVRMMV9FUlJfUEhZX1JFUzsKLQotCXN3aXRjaCAocGh5X2RhdGEgJiBNSUlfQVQwMDFfUFNTUl9TUEVFRCkgewotCWNhc2UgTUlJX0FUMDAxX1BTU1JfMTAwME1CUzoKLQkJKnNwZWVkID0gU1BFRURfMTAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNSUlfQVQwMDFfUFNTUl8xMDBNQlM6Ci0JCSpzcGVlZCA9IFNQRUVEXzEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNSUlfQVQwMDFfUFNTUl8xME1CUzoKLQkJKnNwZWVkID0gU1BFRURfMTA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIGdldHRpbmcgc3BlZWRcbiIpOwotCQlyZXR1cm4gQVRMMV9FUlJfUEhZX1NQRUVEOwotCQlicmVhazsKLQl9Ci0JaWYgKHBoeV9kYXRhICYgTUlJX0FUMDAxX1BTU1JfRFBMWCkKLQkJKmR1cGxleCA9IEZVTExfRFVQTEVYOwotCWVsc2UKLQkJKmR1cGxleCA9IEhBTEZfRFVQTEVYOwotCi0JcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLX0KLQotdm9pZCBhdGwxX3NldF9tYWNfYWRkcihzdHJ1Y3QgYXRsMV9odyAqaHcpCi17Ci0JdTMyIHZhbHVlOwotCS8qCi0JICogMDAtMEItNkEtRjYtMDAtREMKLQkgKiAwOiAgNkFGNjAwREMgICAxOiAwMDBCCi0JICogbG93IGR3b3JkCi0JICovCi0JdmFsdWUgPSAoKCh1MzIpIGh3LT5tYWNfYWRkclsyXSkgPDwgMjQpIHwKLQkgICAgKCgodTMyKSBody0+bWFjX2FkZHJbM10pIDw8IDE2KSB8Ci0JICAgICgoKHUzMikgaHctPm1hY19hZGRyWzRdKSA8PCA4KSB8ICgoKHUzMikgaHctPm1hY19hZGRyWzVdKSk7Ci0JaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19NQUNfU1RBX0FERFIpOwotCS8qIGhpZ2ggZHdvcmQgKi8KLQl2YWx1ZSA9ICgoKHUzMikgaHctPm1hY19hZGRyWzBdKSA8PCA4KSB8ICgoKHUzMikgaHctPm1hY19hZGRyWzFdKSk7Ci0JaW93cml0ZTMyKHZhbHVlLCAoaHctPmh3X2FkZHIgKyBSRUdfTUFDX1NUQV9BRERSKSArICgxIDw8IDIpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9ody5oIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOWFhMGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwNiBBdHRhbnNpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodChjKSAyMDA2IENocmlzIFNub29rIDxjc25vb2tAcmVkaGF0LmNvbT4KLSAqIENvcHlyaWdodChjKSAyMDA2IEpheSBDbGlidXJuIDxqY2xpYnVybkBnbWFpbC5jb20+Ci0gKgotICogRGVyaXZlZCBmcm9tIEludGVsIGUxMDAwIGRyaXZlcgotICogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKLSAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFRoZXJlIGFyZSBhIGxvdCBvZiBkZWZpbmVzIGluIGhlcmUgdGhhdCBhcmUgdW51c2VkIGFuZC9vciBoYXZlIGNyeXB0aWMKLSAqIG5hbWVzLiAgUGxlYXNlIGxlYXZlIHRoZW0gYWxvbmUsIGFzIHRoZXkncmUgdGhlIGNsb3Nlc3QgdGhpbmcgd2UgaGF2ZQotICogdG8gYSBzcGVjIGZyb20gQXR0YW5zaWMgYXQgcHJlc2VudC4gKmFoZW0qIC0tIENIUwotICovCi0KLSNpZm5kZWYgX0FUTDFfSFdfSF8KLSNkZWZpbmUgX0FUTDFfSFdfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0KLXN0cnVjdCBhdGwxX2FkYXB0ZXI7Ci1zdHJ1Y3QgYXRsMV9odzsKLQotLyogZnVuY3Rpb24gcHJvdG90eXBlcyBuZWVkZWQgYnkgbXVsdGlwbGUgZmlsZXMgKi8KLXMzMiBhdGwxX3BoeV9zZXR1cF9hdXRvbmVnX2FkdihzdHJ1Y3QgYXRsMV9odyAqaHcpOwotczMyIGF0bDFfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgYXRsMV9odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2IHBoeV9kYXRhKTsKLXMzMiBhdGwxX2dldF9zcGVlZF9hbmRfZHVwbGV4KHN0cnVjdCBhdGwxX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpOwotczMyIGF0bDFfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgYXRsMV9odyAqaHcpOwotczMyIGF0bDFfaW5pdF9odyhzdHJ1Y3QgYXRsMV9odyAqaHcpOwotczMyIGF0bDFfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGF0bDFfaHcgKmh3LCB1MTYgKnNwZWVkLCB1MTYgKmR1cGxleCk7Ci1zMzIgYXRsMV9zZXRfc3BlZWRfYW5kX2R1cGxleChzdHJ1Y3QgYXRsMV9odyAqaHcsIHUxNiBzcGVlZCwgdTE2IGR1cGxleCk7Ci11MzIgYXRsMV9oYXNoX21jX2FkZHIoc3RydWN0IGF0bDFfaHcgKmh3LCB1OCAqbWNfYWRkcik7Ci12b2lkIGF0bDFfaGFzaF9zZXQoc3RydWN0IGF0bDFfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSk7Ci1zMzIgYXRsMV9yZWFkX3BoeV9yZWcoc3RydWN0IGF0bDFfaHcgKmh3LCB1MTYgcmVnX2FkZHIsIHUxNiAqcGh5X2RhdGEpOwotdm9pZCBhdGwxX3NldF9tYWNfYWRkcihzdHJ1Y3QgYXRsMV9odyAqaHcpOwotczMyIGF0bDFfcGh5X2VudGVyX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYXRsMV9odyAqaHcpOwotczMyIGF0bDFfcmVzZXRfaHcoc3RydWN0IGF0bDFfaHcgKmh3KTsKLXZvaWQgYXRsMV9jaGVja19vcHRpb25zKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0vKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBSRUdfUENJRV9DQVBfTElTVAkJCTB4NTgKLQotI2RlZmluZSBSRUdfVlBEX0NBUAkJCQkweDZDCi0jZGVmaW5lIFZQRF9DQVBfSURfTUFTSwkJCQkweGZmCi0jZGVmaW5lIFZQRF9DQVBfSURfU0hJRlQJCQkwCi0jZGVmaW5lIFZQRF9DQVBfTkVYVF9QVFJfTUFTSwkJCTB4RkYKLSNkZWZpbmUgVlBEX0NBUF9ORVhUX1BUUl9TSElGVAkJCTgKLSNkZWZpbmUgVlBEX0NBUF9WUERfQUREUl9NQVNLCQkJMHg3RkZGCi0jZGVmaW5lIFZQRF9DQVBfVlBEX0FERFJfU0hJRlQJCQkxNgotI2RlZmluZSBWUERfQ0FQX1ZQRF9GTEFHCQkJMHg4MDAwMDAwMAotCi0jZGVmaW5lIFJFR19WUERfREFUQQkJCQkweDcwCi0KLSNkZWZpbmUgUkVHX1NQSV9GTEFTSF9DVFJMCQkJMHgyMDAKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfU1RTX05PTl9SRFkJCTB4MQotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9TVFNfV0VOCQkJMHgyCi0jZGVmaW5lIFNQSV9GTEFTSF9DVFJMX1NUU19XUEVOCQkJMHg4MAotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9ERVZfU1RTX01BU0sJCTB4RkYKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfREVWX1NUU19TSElGVAkJMAotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9JTlNfTUFTSwkJCTB4NwotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9JTlNfU0hJRlQJCTgKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfU1RBUlQJCQkweDgwMAotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9FTl9WUEQJCQkweDIwMDAKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfTERTVEFSVAkJCTB4ODAwMAotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9DU19ISV9NQVNLCQkweDMKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfQ1NfSElfU0hJRlQJCTE2Ci0jZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0NTX0hPTERfTUFTSwkJMHgzCi0jZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0NTX0hPTERfU0hJRlQJCTE4Ci0jZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0NMS19MT19NQVNLCQkweDMKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfQ0xLX0xPX1NISUZUCQkyMAotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9DTEtfSElfTUFTSwkJMHgzCi0jZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0NMS19ISV9TSElGVAkJMjIKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfQ1NfU0VUVVBfTUFTSwkJMHgzCi0jZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0NTX1NFVFVQX1NISUZUCQkyNAotI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9FUk9NX1BHU1pfTUFTSwkJMHgzCi0jZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0VST01fUEdTWl9TSElGVAkJMjYKLSNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfV0FJVF9SRUFEWQkJMHgxMDAwMDAwMAotCi0jZGVmaW5lIFJFR19TUElfQUREUgkJCQkweDIwNAotCi0jZGVmaW5lIFJFR19TUElfREFUQQkJCQkweDIwOAotCi0jZGVmaW5lIFJFR19TUElfRkxBU0hfQ09ORklHCQkJMHgyMEMKLSNkZWZpbmUgU1BJX0ZMQVNIX0NPTkZJR19MRF9BRERSX01BU0sJCTB4RkZGRkZGCi0jZGVmaW5lIFNQSV9GTEFTSF9DT05GSUdfTERfQUREUl9TSElGVAkJMAotI2RlZmluZSBTUElfRkxBU0hfQ09ORklHX1ZQRF9BRERSX01BU0sJCTB4MwotI2RlZmluZSBTUElfRkxBU0hfQ09ORklHX1ZQRF9BRERSX1NISUZUCQkyNAotI2RlZmluZSBTUElfRkxBU0hfQ09ORklHX0xEX0VYSVNUCQkweDQwMDAwMDAKLQotI2RlZmluZSBSRUdfU1BJX0ZMQVNIX09QX1BST0dSQU0JCTB4MjEwCi0jZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfU0NfRVJBU0UJCTB4MjExCi0jZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfQ0hJUF9FUkFTRQkJMHgyMTIKLSNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9SRElECQkJMHgyMTMKLSNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9XUkVOCQkJMHgyMTQKLSNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9SRFNSCQkJMHgyMTUKLSNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9XUlNSCQkJMHgyMTYKLSNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9SRUFECQkJMHgyMTcKLQotI2RlZmluZSBSRUdfVFdTSV9DVFJMCQkJCTB4MjE4Ci0jZGVmaW5lIFRXU0lfQ1RSTF9MRF9PRkZTRVRfTUFTSwkJMHhGRgotI2RlZmluZSBUV1NJX0NUUkxfTERfT0ZGU0VUX1NISUZUCQkwCi0jZGVmaW5lIFRXU0lfQ1RSTF9MRF9TTFZfQUREUl9NQVNLCQkweDcKLSNkZWZpbmUgVFdTSV9DVFJMX0xEX1NMVl9BRERSX1NISUZUCQk4Ci0jZGVmaW5lIFRXU0lfQ1RSTF9TV19MRFNUQVJUCQkJMHg4MDAKLSNkZWZpbmUgVFdTSV9DVFJMX0hXX0xEU1RBUlQJCQkweDEwMDAKLSNkZWZpbmUgVFdTSV9DVFJMX1NNQl9TTFZfQUREUl9NQVNLCQkweDdGCi0jZGVmaW5lIFRXU0lfQ1RSTF9TTUJfU0xWX0FERFJfU0hJRlQJCTE1Ci0jZGVmaW5lIFRXU0lfQ1RSTF9MRF9FWElTVAkJCTB4NDAwMDAwCi0jZGVmaW5lIFRXU0lfQ1RSTF9SRUFEX0ZSRVFfU0VMX01BU0sJCTB4MwotI2RlZmluZSBUV1NJX0NUUkxfUkVBRF9GUkVRX1NFTF9TSElGVAkJMjMKLSNkZWZpbmUgVFdTSV9DVFJMX0ZSRVFfU0VMXzEwMEsJCQkwCi0jZGVmaW5lIFRXU0lfQ1RSTF9GUkVRX1NFTF8yMDBLCQkJMQotI2RlZmluZSBUV1NJX0NUUkxfRlJFUV9TRUxfMzAwSwkJCTIKLSNkZWZpbmUgVFdTSV9DVFJMX0ZSRVFfU0VMXzQwMEsJCQkzCi0jZGVmaW5lIFRXU0lfQ1RSTF9TTUJfU0xWX0FERFIKLSNkZWZpbmUgVFdTSV9DVFJMX1dSSVRFX0ZSRVFfU0VMX01BU0sJCTB4MwotI2RlZmluZSBUV1NJX0NUUkxfV1JJVEVfRlJFUV9TRUxfU0hJRlQJCTI0Ci0KLSNkZWZpbmUgUkVHX1BDSUVfREVWX01JU0NfQ1RSTAkJCTB4MjFDCi0jZGVmaW5lIFBDSUVfREVWX01JU0NfQ1RSTF9FWFRfUElQRQkJMHgyCi0jZGVmaW5lIFBDSUVfREVWX01JU0NfQ1RSTF9SRVRSWV9CVUZESVMJCTB4MQotI2RlZmluZSBQQ0lFX0RFVl9NSVNDX0NUUkxfU1BJUk9NX0VYSVNUCQkweDQKLSNkZWZpbmUgUENJRV9ERVZfTUlTQ19DVFJMX1NFUkRFU19FTkRJQU4JMHg4Ci0jZGVmaW5lIFBDSUVfREVWX01JU0NfQ1RSTF9TRVJERVNfU0VMX0RJTgkweDEwCi0KLS8qIFNlbGVuZSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfTUFTVEVSX0NUUkwJCQkJMHgxNDAwCi0jZGVmaW5lIE1BU1RFUl9DVFJMX1NPRlRfUlNUCQkJMHgxCi0jZGVmaW5lIE1BU1RFUl9DVFJMX01USU1FUl9FTgkJCTB4MgotI2RlZmluZSBNQVNURVJfQ1RSTF9JVElNRVJfRU4JCQkweDQKLSNkZWZpbmUgTUFTVEVSX0NUUkxfTUFOVUFMX0lOVAkJCTB4OAotI2RlZmluZSBNQVNURVJfQ1RSTF9SRVZfTlVNX1NISUZUCQkxNgotI2RlZmluZSBNQVNURVJfQ1RSTF9SRVZfTlVNX01BU0sJCTB4ZmYKLSNkZWZpbmUgTUFTVEVSX0NUUkxfREVWX0lEX1NISUZUCQkyNAotI2RlZmluZSBNQVNURVJfQ1RSTF9ERVZfSURfTUFTSwkJCTB4ZmYKLQotLyogVGltZXIgSW5pdGlhbCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfTUFOVUFMX1RJTUVSX0lOSVQJCQkweDE0MDQKLQotLyogSVJRIE1vZGVyYXRvclRpbWVyIEluaXRpYWwgVmFsdWUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX0lSUV9NT0RVX1RJTUVSX0lOSVQJCQkweDE0MDgKLQotI2RlZmluZSBSRUdfR1BIWV9FTkFCTEUJCQkJMHgxNDBDCi0KLS8qIElSUSBBbnRpLUxvc3QgVGltZXIgSW5pdGlhbCBWYWx1ZSBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfQ01CRElTRE1BX1RJTUVSCQkJMHgxNDBFCi0KLS8qIEJsb2NrIElETEUgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19JRExFX1NUQVRVUwkJCQkweDE0MTAKLSNkZWZpbmUgSURMRV9TVEFUVVNfUlhNQUMJCQkxCi0jZGVmaW5lIElETEVfU1RBVFVTX1RYTUFDCQkJMgotI2RlZmluZSBJRExFX1NUQVRVU19SWFEJCQkJNAotI2RlZmluZSBJRExFX1NUQVRVU19UWFEJCQkJOAotI2RlZmluZSBJRExFX1NUQVRVU19ETUFSCQkJMHgxMAotI2RlZmluZSBJRExFX1NUQVRVU19ETUFXCQkJMHgyMAotI2RlZmluZSBJRExFX1NUQVRVU19TTUIJCQkJMHg0MAotI2RlZmluZSBJRExFX1NUQVRVU19DTUIJCQkJMHg4MAotCi0vKiBNRElPIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX01ESU9fQ1RSTAkJCQkweDE0MTQKLSNkZWZpbmUgTURJT19EQVRBX01BU0sJCQkJMHhmZmZmCi0jZGVmaW5lIE1ESU9fREFUQV9TSElGVAkJCQkwCi0jZGVmaW5lIE1ESU9fUkVHX0FERFJfTUFTSwkJCTB4MWYKLSNkZWZpbmUgTURJT19SRUdfQUREUl9TSElGVAkJCTE2Ci0jZGVmaW5lIE1ESU9fUlcJCQkJCTB4MjAwMDAwCi0jZGVmaW5lIE1ESU9fU1VQX1BSRUFNQkxFCQkJMHg0MDAwMDAKLSNkZWZpbmUgTURJT19TVEFSVAkJCQkweDgwMDAwMAotI2RlZmluZSBNRElPX0NMS19TRUxfU0hJRlQJCQkyNAotI2RlZmluZSBNRElPX0NMS18yNV80CQkJCTAKLSNkZWZpbmUgTURJT19DTEtfMjVfNgkJCQkyCi0jZGVmaW5lIE1ESU9fQ0xLXzI1XzgJCQkJMwotI2RlZmluZSBNRElPX0NMS18yNV8xMAkJCQk0Ci0jZGVmaW5lIE1ESU9fQ0xLXzI1XzE0CQkJCTUKLSNkZWZpbmUgTURJT19DTEtfMjVfMjAJCQkJNgotI2RlZmluZSBNRElPX0NMS18yNV8yOAkJCQk3Ci0jZGVmaW5lIE1ESU9fQlVTWQkJCQkweDgwMDAwMDAKLSNkZWZpbmUgTURJT19XQUlUX1RJTUVTCQkJCTMwCi0KLS8qIE1JSSBQSFkgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19QSFlfU1RBVFVTCQkJCTB4MTQxOAotCi0vKiBCSVNUIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcjAgKGZvciB0aGUgUGFja2V0IE1lbW9yeSkgKi8KLSNkZWZpbmUgUkVHX0JJU1QwX0NUUkwJCQkJMHgxNDFjCi0jZGVmaW5lIEJJU1QwX05PVwkJCQkweDEKLSNkZWZpbmUgQklTVDBfU1JBTV9GQUlMCQkJCTB4MgotI2RlZmluZSBCSVNUMF9GVVNFX0ZMQUcJCQkJMHg0Ci0jZGVmaW5lIFJFR19CSVNUMV9DVFJMCQkJCTB4MTQyMAotI2RlZmluZSBCSVNUMV9OT1cJCQkJMHgxCi0jZGVmaW5lIEJJU1QxX1NSQU1fRkFJTAkJCQkweDIKLSNkZWZpbmUgQklTVDFfRlVTRV9GTEFHCQkJCTB4NAotCi0vKiBNQUMgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfTUFDX0NUUkwJCQkJMHgxNDgwCi0jZGVmaW5lIE1BQ19DVFJMX1RYX0VOCQkJCTEKLSNkZWZpbmUgTUFDX0NUUkxfUlhfRU4JCQkJMgotI2RlZmluZSBNQUNfQ1RSTF9UWF9GTE9XCQkJNAotI2RlZmluZSBNQUNfQ1RSTF9SWF9GTE9XCQkJOAotI2RlZmluZSBNQUNfQ1RSTF9MT09QQkFDSwkJCTB4MTAKLSNkZWZpbmUgTUFDX0NUUkxfRFVQTFgJCQkJMHgyMAotI2RlZmluZSBNQUNfQ1RSTF9BRERfQ1JDCQkJMHg0MAotI2RlZmluZSBNQUNfQ1RSTF9QQUQJCQkJMHg4MAotI2RlZmluZSBNQUNfQ1RSTF9MRU5DSEsJCQkJMHgxMDAKLSNkZWZpbmUgTUFDX0NUUkxfSFVHRV9FTgkJCTB4MjAwCi0jZGVmaW5lIE1BQ19DVFJMX1BSTUxFTl9TSElGVAkJCTEwCi0jZGVmaW5lIE1BQ19DVFJMX1BSTUxFTl9NQVNLCQkJMHhmCi0jZGVmaW5lIE1BQ19DVFJMX1JNVl9WTEFOCQkJMHg0MDAwCi0jZGVmaW5lIE1BQ19DVFJMX1BST01JU19FTgkJCTB4ODAwMAotI2RlZmluZSBNQUNfQ1RSTF9UWF9QQVVTRQkJCTB4MTAwMDAKLSNkZWZpbmUgTUFDX0NUUkxfU0NOVAkJCQkweDIwMDAwCi0jZGVmaW5lIE1BQ19DVFJMX1NSU1RfVFgJCQkweDQwMDAwCi0jZGVmaW5lIE1BQ19DVFJMX1RYX1NJTVVSU1QJCQkweDgwMDAwCi0jZGVmaW5lIE1BQ19DVFJMX1NQRUVEX1NISUZUCQkJMjAKLSNkZWZpbmUgTUFDX0NUUkxfU1BFRURfTUFTSwkJCTB4MzAwMDAwCi0jZGVmaW5lIE1BQ19DVFJMX1NQRUVEXzEwMDAJCQkyCi0jZGVmaW5lIE1BQ19DVFJMX1NQRUVEXzEwXzEwMAkJCTEKLSNkZWZpbmUgTUFDX0NUUkxfREJHX1RYX0JLUFJFU1VSRQkJMHg0MDAwMDAKLSNkZWZpbmUgTUFDX0NUUkxfVFhfSFVHRQkJCTB4ODAwMDAwCi0jZGVmaW5lIE1BQ19DVFJMX1JYX0NIS1NVTV9FTgkJCTB4MTAwMDAwMAotI2RlZmluZSBNQUNfQ1RSTF9NQ19BTExfRU4JCQkweDIwMDAwMDAKLSNkZWZpbmUgTUFDX0NUUkxfQkNfRU4JCQkJMHg0MDAwMDAwCi0jZGVmaW5lIE1BQ19DVFJMX0RCRwkJCQkweDgwMDAwMDAKLQotLyogTUFDIElQRy9JRkcgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfTUFDX0lQR19JRkcJCQkJMHgxNDg0Ci0jZGVmaW5lIE1BQ19JUEdfSUZHX0lQR1RfU0hJRlQJCQkwCi0jZGVmaW5lIE1BQ19JUEdfSUZHX0lQR1RfTUFTSwkJCTB4N2YKLSNkZWZpbmUgTUFDX0lQR19JRkdfTUlGR19TSElGVAkJCTgKLSNkZWZpbmUgTUFDX0lQR19JRkdfTUlGR19NQVNLCQkJMHhmZgotI2RlZmluZSBNQUNfSVBHX0lGR19JUEdSMV9TSElGVAkJCTE2Ci0jZGVmaW5lIE1BQ19JUEdfSUZHX0lQR1IxX01BU0sJCQkweDdmCi0jZGVmaW5lIE1BQ19JUEdfSUZHX0lQR1IyX1NISUZUCQkJMjQKLSNkZWZpbmUgTUFDX0lQR19JRkdfSVBHUjJfTUFTSwkJCTB4N2YKLQotLyogTUFDIFNUQVRJT04gQUREUkVTUyAqLwotI2RlZmluZSBSRUdfTUFDX1NUQV9BRERSCQkJMHgxNDg4Ci0KLS8qIEhhc2ggdGFibGUgZm9yIG11bHRpY2FzdCBhZGRyZXNzICovCi0jZGVmaW5lIFJFR19SWF9IQVNIX1RBQkxFCQkJMHgxNDkwCi0KLS8qIE1BQyBIYWxmLUR1cGxleCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19NQUNfSEFMRl9EVVBMWF9DVFJMCQkJMHgxNDk4Ci0jZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfTENPTF9TSElGVAkJMAotI2RlZmluZSBNQUNfSEFMRl9EVVBMWF9DVFJMX0xDT0xfTUFTSwkJMHgzZmYKLSNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9TSElGVAkJMTIKLSNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9NQVNLCQkweGYKLSNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9FWENfREVGX0VOCQkweDEwMDAwCi0jZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfTk9fQkFDS19DCQkweDIwMDAwCi0jZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfTk9fQkFDS19QCQkweDQwMDAwCi0jZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfQUJFQkUJCTB4ODAwMDAKLSNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9BQkVCVF9TSElGVAkJMjAKLSNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9BQkVCVF9NQVNLCQkweGYKLSNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfU0hJRlQJMjQKLSNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfTUFTSwkJMHhmCi0KLS8qIE1heGltdW0gRnJhbWUgTGVuZ3RoIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX01UVQkJCQkJMHgxNDljCi0KLS8qIFdha2UtT24tTGFuIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX1dPTF9DVFJMCQkJCTB4MTRhMAotI2RlZmluZSBXT0xfUEFUVEVSTl9FTgkJCQkweDAwMDAwMDAxCi0jZGVmaW5lIFdPTF9QQVRURVJOX1BNRV9FTgkJCTB4MDAwMDAwMDIKLSNkZWZpbmUgV09MX01BR0lDX0VOCQkJCTB4MDAwMDAwMDQKLSNkZWZpbmUgV09MX01BR0lDX1BNRV9FTgkJCTB4MDAwMDAwMDgKLSNkZWZpbmUgV09MX0xJTktfQ0hHX0VOCQkJCTB4MDAwMDAwMTAKLSNkZWZpbmUgV09MX0xJTktfQ0hHX1BNRV9FTgkJCTB4MDAwMDAwMjAKLSNkZWZpbmUgV09MX1BBVFRFUk5fU1QJCQkJMHgwMDAwMDEwMAotI2RlZmluZSBXT0xfTUFHSUNfU1QJCQkJMHgwMDAwMDIwMAotI2RlZmluZSBXT0xfTElOS0NIR19TVAkJCQkweDAwMDAwNDAwCi0jZGVmaW5lIFdPTF9DTEtfU1dJVENIX0VOCQkJMHgwMDAwODAwMAotI2RlZmluZSBXT0xfUFQwX0VOCQkJCTB4MDAwMTAwMDAKLSNkZWZpbmUgV09MX1BUMV9FTgkJCQkweDAwMDIwMDAwCi0jZGVmaW5lIFdPTF9QVDJfRU4JCQkJMHgwMDA0MDAwMAotI2RlZmluZSBXT0xfUFQzX0VOCQkJCTB4MDAwODAwMDAKLSNkZWZpbmUgV09MX1BUNF9FTgkJCQkweDAwMTAwMDAwCi0jZGVmaW5lIFdPTF9QVDVfRU4JCQkJMHgwMDIwMDAwMAotI2RlZmluZSBXT0xfUFQ2X0VOCQkJCTB4MDA0MDAwMDAKLQotLyogV09MIExlbmd0aCAoIDIgRFdPUkQgKSAqLwotI2RlZmluZSBSRUdfV09MX1BBVFRFUk5fTEVOCQkJMHgxNGE0Ci0jZGVmaW5lIFdPTF9QVF9MRU5fTUFTSwkJCQkweDdmCi0jZGVmaW5lIFdPTF9QVDBfTEVOX1NISUZUCQkJMAotI2RlZmluZSBXT0xfUFQxX0xFTl9TSElGVAkJCTgKLSNkZWZpbmUgV09MX1BUMl9MRU5fU0hJRlQJCQkxNgotI2RlZmluZSBXT0xfUFQzX0xFTl9TSElGVAkJCTI0Ci0jZGVmaW5lIFdPTF9QVDRfTEVOX1NISUZUCQkJMAotI2RlZmluZSBXT0xfUFQ1X0xFTl9TSElGVAkJCTgKLSNkZWZpbmUgV09MX1BUNl9MRU5fU0hJRlQJCQkxNgotCi0vKiBJbnRlcm5hbCBTUkFNIFBhcnRpdGlvbiBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfU1JBTV9SRkRfQUREUgkJCTB4MTUwMAotI2RlZmluZSBSRUdfU1JBTV9SRkRfTEVOCQkJKFJFR19TUkFNX1JGRF9BRERSKyA0KQotI2RlZmluZSBSRUdfU1JBTV9SUkRfQUREUgkJCShSRUdfU1JBTV9SRkRfQUREUisgOCkKLSNkZWZpbmUgUkVHX1NSQU1fUlJEX0xFTgkJCShSRUdfU1JBTV9SRkRfQUREUisxMikKLSNkZWZpbmUgUkVHX1NSQU1fVFBEX0FERFIJCQkoUkVHX1NSQU1fUkZEX0FERFIrMTYpCi0jZGVmaW5lIFJFR19TUkFNX1RQRF9MRU4JCQkoUkVHX1NSQU1fUkZEX0FERFIrMjApCi0jZGVmaW5lIFJFR19TUkFNX1RSRF9BRERSCQkJKFJFR19TUkFNX1JGRF9BRERSKzI0KQotI2RlZmluZSBSRUdfU1JBTV9UUkRfTEVOCQkJKFJFR19TUkFNX1JGRF9BRERSKzI4KQotI2RlZmluZSBSRUdfU1JBTV9SWEZfQUREUgkJCShSRUdfU1JBTV9SRkRfQUREUiszMikKLSNkZWZpbmUgUkVHX1NSQU1fUlhGX0xFTgkJCShSRUdfU1JBTV9SRkRfQUREUiszNikKLSNkZWZpbmUgUkVHX1NSQU1fVFhGX0FERFIJCQkoUkVHX1NSQU1fUkZEX0FERFIrNDApCi0jZGVmaW5lIFJFR19TUkFNX1RYRl9MRU4JCQkoUkVHX1NSQU1fUkZEX0FERFIrNDQpCi0jZGVmaW5lIFJFR19TUkFNX1RDUEhfUEFUSF9BRERSCQkJKFJFR19TUkFNX1JGRF9BRERSKzQ4KQotI2RlZmluZSBTUkFNX1RDUEhfQUREUl9NQVNLCQkJMHgwZmZmCi0jZGVmaW5lIFNSQU1fVENQSF9BRERSX1NISUZUCQkJMAotI2RlZmluZSBTUkFNX1BBVEhfQUREUl9NQVNLCQkJMHgwZmZmCi0jZGVmaW5lIFNSQU1fUEFUSF9BRERSX1NISUZUCQkJMTYKLQotLyogTG9hZCBQdHIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX0xPQURfUFRSCQkJCShSRUdfU1JBTV9SRkRfQUREUis1MikKLQotLyogRGVzY3JpcHRvciBDb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19ERVNDX0JBU0VfQUREUl9ISQkJCTB4MTU0MAotI2RlZmluZSBSRUdfREVTQ19SRkRfQUREUl9MTwkJCShSRUdfREVTQ19CQVNFX0FERFJfSEkrNCkKLSNkZWZpbmUgUkVHX0RFU0NfUlJEX0FERFJfTE8JCQkoUkVHX0RFU0NfQkFTRV9BRERSX0hJKzgpCi0jZGVmaW5lIFJFR19ERVNDX1RQRF9BRERSX0xPCQkJKFJFR19ERVNDX0JBU0VfQUREUl9ISSsxMikKLSNkZWZpbmUgUkVHX0RFU0NfQ01CX0FERFJfTE8JCQkoUkVHX0RFU0NfQkFTRV9BRERSX0hJKzE2KQotI2RlZmluZSBSRUdfREVTQ19TTUJfQUREUl9MTwkJCShSRUdfREVTQ19CQVNFX0FERFJfSEkrMjApCi0jZGVmaW5lIFJFR19ERVNDX1JGRF9SUkRfUklOR19TSVpFCQkoUkVHX0RFU0NfQkFTRV9BRERSX0hJKzI0KQotI2RlZmluZSBERVNDX1JGRF9SSU5HX1NJWkVfTUFTSwkJCTB4N2ZmCi0jZGVmaW5lIERFU0NfUkZEX1JJTkdfU0laRV9TSElGVAkJMAotI2RlZmluZSBERVNDX1JSRF9SSU5HX1NJWkVfTUFTSwkJCTB4N2ZmCi0jZGVmaW5lIERFU0NfUlJEX1JJTkdfU0laRV9TSElGVAkJMTYKLSNkZWZpbmUgUkVHX0RFU0NfVFBEX1JJTkdfU0laRQkJCShSRUdfREVTQ19CQVNFX0FERFJfSEkrMjgpCi0jZGVmaW5lIERFU0NfVFBEX1JJTkdfU0laRV9NQVNLCQkJMHgzZmYKLSNkZWZpbmUgREVTQ19UUERfUklOR19TSVpFX1NISUZUCQkwCi0KLS8qIFRYUSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19UWFFfQ1RSTAkJCQkweDE1ODAKLSNkZWZpbmUgVFhRX0NUUkxfVFBEX0JVUlNUX05VTV9TSElGVAkJMAotI2RlZmluZSBUWFFfQ1RSTF9UUERfQlVSU1RfTlVNX01BU0sJCTB4MWYKLSNkZWZpbmUgVFhRX0NUUkxfRU4JCQkJMHgyMAotI2RlZmluZSBUWFFfQ1RSTF9FTkhfTU9ERQkJCTB4NDAKLSNkZWZpbmUgVFhRX0NUUkxfVFBEX0ZFVENIX1RIX1NISUZUCQk4Ci0jZGVmaW5lIFRYUV9DVFJMX1RQRF9GRVRDSF9USF9NQVNLCQkweDNmCi0jZGVmaW5lIFRYUV9DVFJMX1RYRl9CVVJTVF9OVU1fU0hJRlQJCTE2Ci0jZGVmaW5lIFRYUV9DVFJMX1RYRl9CVVJTVF9OVU1fTUFTSwkJMHhmZmZmCi0KLS8qIEp1bWJvIHBhY2tldCBUaHJlc2hvbGQgZm9yIHRhc2sgb2ZmbG9hZCAqLwotI2RlZmluZSBSRUdfVFhfSlVNQk9fVEFTS19USF9UUERfSVBHCQkweDE1ODQKLSNkZWZpbmUgVFhfSlVNQk9fVEFTS19USF9NQVNLCQkJMHg3ZmYKLSNkZWZpbmUgVFhfSlVNQk9fVEFTS19USF9TSElGVAkJCTAKLSNkZWZpbmUgVFhfVFBEX01JTl9JUEdfTUFTSwkJCTB4MWYKLSNkZWZpbmUgVFhfVFBEX01JTl9JUEdfU0hJRlQJCQkxNgotCi0vKiBSWFEgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfUlhRX0NUUkwJCQkJMHgxNWEwCi0jZGVmaW5lIFJYUV9DVFJMX1JGRF9CVVJTVF9OVU1fU0hJRlQJCTAKLSNkZWZpbmUgUlhRX0NUUkxfUkZEX0JVUlNUX05VTV9NQVNLCQkweGZmCi0jZGVmaW5lIFJYUV9DVFJMX1JSRF9CVVJTVF9USFJFU0hfU0hJRlQJCTgKLSNkZWZpbmUgUlhRX0NUUkxfUlJEX0JVUlNUX1RIUkVTSF9NQVNLCQkweGZmCi0jZGVmaW5lIFJYUV9DVFJMX1JGRF9QUkVGX01JTl9JUEdfU0hJRlQJCTE2Ci0jZGVmaW5lIFJYUV9DVFJMX1JGRF9QUkVGX01JTl9JUEdfTUFTSwkJMHgxZgotI2RlZmluZSBSWFFfQ1RSTF9DVVRfVEhSVV9FTgkJCTB4NDAwMDAwMDAKLSNkZWZpbmUgUlhRX0NUUkxfRU4JCQkJMHg4MDAwMDAwMAotCi0vKiBSeCBqdW1ibyBwYWNrZXQgdGhyZXNob2xkIGFuZCBycmQgIHJldGlyZW1lbnQgdGltZXIgKi8KLSNkZWZpbmUgUkVHX1JYUV9KTUJPU1pfUlJEVElNCQkJKFJFR19SWFFfQ1RSTCsgNCkKLSNkZWZpbmUgUlhRX0pNQk9TWl9USF9NQVNLCQkJMHg3ZmYKLSNkZWZpbmUgUlhRX0pNQk9TWl9USF9TSElGVAkJCTAKLSNkZWZpbmUgUlhRX0pNQk9fTEtBSF9NQVNLCQkJMHhmCi0jZGVmaW5lIFJYUV9KTUJPX0xLQUhfU0hJRlQJCQkxMQotI2RlZmluZSBSWFFfUlJEX1RJTUVSX01BU0sJCQkweGZmZmYKLSNkZWZpbmUgUlhRX1JSRF9USU1FUl9TSElGVAkJCTE2Ci0KLS8qIFJGRCBmbG93IGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX1JYUV9SWEZfUEFVU0VfVEhSRVNICQkoUkVHX1JYUV9DVFJMKyA4KQotI2RlZmluZSBSWFFfUlhGX1BBVVNFX1RIX0hJX1NISUZUCQkxNgotI2RlZmluZSBSWFFfUlhGX1BBVVNFX1RIX0hJX01BU0sJCTB4ZmZmCi0jZGVmaW5lIFJYUV9SWEZfUEFVU0VfVEhfTE9fU0hJRlQJCTAKLSNkZWZpbmUgUlhRX1JYRl9QQVVTRV9USF9MT19NQVNLCQkweGZmZgotCi0vKiBSUkQgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19SWFFfUlJEX1BBVVNFX1RIUkVTSAkJKFJFR19SWFFfQ1RSTCsxMikKLSNkZWZpbmUgUlhRX1JSRF9QQVVTRV9USF9ISV9TSElGVAkJMAotI2RlZmluZSBSWFFfUlJEX1BBVVNFX1RIX0hJX01BU0sJCTB4ZmZmCi0jZGVmaW5lIFJYUV9SUkRfUEFVU0VfVEhfTE9fU0hJRlQJCTE2Ci0jZGVmaW5lIFJYUV9SUkRfUEFVU0VfVEhfTE9fTUFTSwkJMHhmZmYKLQotLyogRE1BIEVuZ2luZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19ETUFfQ1RSTAkJCQkweDE1YzAKLSNkZWZpbmUgRE1BX0NUUkxfRE1BUl9JTl9PUkRFUgkJCTB4MQotI2RlZmluZSBETUFfQ1RSTF9ETUFSX0VOSF9PUkRFUgkJCTB4MgotI2RlZmluZSBETUFfQ1RSTF9ETUFSX09VVF9PUkRFUgkJCTB4NAotI2RlZmluZSBETUFfQ1RSTF9SQ0JfVkFMVUUJCQkweDgKLSNkZWZpbmUgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fU0hJRlQJCTQKLSNkZWZpbmUgRE1BX0NUUkxfRE1BUl9CVVJTVF9MRU5fTUFTSwkJNwotI2RlZmluZSBETUFfQ1RSTF9ETUFXX0JVUlNUX0xFTl9TSElGVAkJNwotI2RlZmluZSBETUFfQ1RSTF9ETUFXX0JVUlNUX0xFTl9NQVNLCQk3Ci0jZGVmaW5lIERNQV9DVFJMX0RNQVJfRU4JCQkJMHg0MDAKLSNkZWZpbmUgRE1BX0NUUkxfRE1BV19FTgkJCQkweDgwMAotCi0vKiBDTUIvU01CIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX0NTTUJfQ1RSTAkJCQkweDE1ZDAKLSNkZWZpbmUgQ1NNQl9DVFJMX0NNQl9OT1cJCQkxCi0jZGVmaW5lIENTTUJfQ1RSTF9TTUJfTk9XCQkJMgotI2RlZmluZSBDU01CX0NUUkxfQ01CX0VOCQkJNAotI2RlZmluZSBDU01CX0NUUkxfU01CX0VOCQkJOAotCi0vKiBDTUIgRE1BIFdyaXRlIFRocmVzaG9sZCBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfQ01CX1dSSVRFX1RICQkJKFJFR19DU01CX0NUUkwrIDQpCi0jZGVmaW5lIENNQl9SUkRfVEhfU0hJRlQJCQkwCi0jZGVmaW5lIENNQl9SUkRfVEhfTUFTSwkJCQkweDdmZgotI2RlZmluZSBDTUJfVFBEX1RIX1NISUZUCQkJMTYKLSNkZWZpbmUgQ01CX1RQRF9USF9NQVNLCQkJCTB4N2ZmCi0KLS8qIFJYL1RYIGNvdW50LWRvd24gdGltZXIgdG8gdHJpZ2dlciBDTUItd3JpdGUuIDJ1cyByZXNvbHV0aW9uLiAqLwotI2RlZmluZSBSRUdfQ01CX1dSSVRFX1RJTUVSCQkJKFJFR19DU01CX0NUUkwrIDgpCi0jZGVmaW5lIENNQl9SWF9UTV9TSElGVAkJCQkwCi0jZGVmaW5lIENNQl9SWF9UTV9NQVNLCQkJCTB4ZmZmZgotI2RlZmluZSBDTUJfVFhfVE1fU0hJRlQJCQkJMTYKLSNkZWZpbmUgQ01CX1RYX1RNX01BU0sJCQkJMHhmZmZmCi0KLS8qIE51bWJlciBvZiBwYWNrZXQgcmVjZWl2ZWQgc2luY2UgbGFzdCBDTUIgd3JpdGUgKi8KLSNkZWZpbmUgUkVHX0NNQl9SWF9QS1RfQ05UCQkJKFJFR19DU01CX0NUUkwrMTIpCi0KLS8qIE51bWJlciBvZiBwYWNrZXQgdHJhbnNtaXR0ZWQgc2luY2UgbGFzdCBDTUIgd3JpdGUgKi8KLSNkZWZpbmUgUkVHX0NNQl9UWF9QS1RfQ05UCQkJKFJFR19DU01CX0NUUkwrMTYpCi0KLS8qIFNNQiBhdXRvIERNQSB0aW1lciByZWdpc3RlciAqLwotI2RlZmluZSBSRUdfU01CX1RJTUVSCQkJCShSRUdfQ1NNQl9DVFJMKzIwKQotCi0vKiBNYWlsYm94IFJlZ2lzdGVyICovCi0jZGVmaW5lIFJFR19NQUlMQk9YCQkJCTB4MTVmMAotI2RlZmluZSBNQl9SRkRfUFJPRF9JTkRYX1NISUZUCQkJMAotI2RlZmluZSBNQl9SRkRfUFJPRF9JTkRYX01BU0sJCQkweDdmZgotI2RlZmluZSBNQl9SUkRfQ09OU19JTkRYX1NISUZUCQkJMTEKLSNkZWZpbmUgTUJfUlJEX0NPTlNfSU5EWF9NQVNLCQkJMHg3ZmYKLSNkZWZpbmUgTUJfVFBEX1BST0RfSU5EWF9TSElGVAkJCTIyCi0jZGVmaW5lIE1CX1RQRF9QUk9EX0lORFhfTUFTSwkJCTB4M2ZmCi0KLS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX0lTUgkJCQkJMHgxNjAwCi0jZGVmaW5lIElTUl9TTUIJCQkJCTEKLSNkZWZpbmUgSVNSX1RJTUVSCQkJCTIKLSNkZWZpbmUgSVNSX01BTlVBTAkJCQk0Ci0jZGVmaW5lIElTUl9SWEZfT1YJCQkJOAotI2RlZmluZSBJU1JfUkZEX1VOUlVOCQkJCTB4MTAKLSNkZWZpbmUgSVNSX1JSRF9PVgkJCQkweDIwCi0jZGVmaW5lIElTUl9UWEZfVU5SVU4JCQkJMHg0MAotI2RlZmluZSBJU1JfTElOSwkJCQkweDgwCi0jZGVmaW5lIElTUl9IT1NUX1JGRF9VTlJVTgkJCTB4MTAwCi0jZGVmaW5lIElTUl9IT1NUX1JSRF9PVgkJCQkweDIwMAotI2RlZmluZSBJU1JfRE1BUl9UT19SU1QJCQkJMHg0MDAKLSNkZWZpbmUgSVNSX0RNQVdfVE9fUlNUCQkJCTB4ODAwCi0jZGVmaW5lIElTUl9HUEhZCQkJCTB4MTAwMAotI2RlZmluZSBJU1JfUlhfUEtUCQkJCTB4MTAwMDAKLSNkZWZpbmUgSVNSX1RYX1BLVAkJCQkweDIwMDAwCi0jZGVmaW5lIElTUl9UWF9ETUEJCQkJMHg0MDAwMAotI2RlZmluZSBJU1JfUlhfRE1BCQkJCTB4ODAwMDAKLSNkZWZpbmUgSVNSX0NNQl9SWAkJCQkweDEwMDAwMAotI2RlZmluZSBJU1JfQ01CX1RYCQkJCTB4MjAwMDAwCi0jZGVmaW5lIElTUl9NQUNfUlgJCQkJMHg0MDAwMDAKLSNkZWZpbmUgSVNSX01BQ19UWAkJCQkweDgwMDAwMAotI2RlZmluZSBJU1JfVVJfREVURUNURUQJCQkJMHgxMDAwMDAwCi0jZGVmaW5lIElTUl9GRVJSX0RFVEVDVEVECQkJMHgyMDAwMDAwCi0jZGVmaW5lIElTUl9ORkVSUl9ERVRFQ1RFRAkJCTB4NDAwMDAwMAotI2RlZmluZSBJU1JfQ0VSUl9ERVRFQ1RFRAkJCTB4ODAwMDAwMAotI2RlZmluZSBJU1JfUEhZX0xJTktET1dOCQkJMHgxMDAwMDAwMAotI2RlZmluZSBJU1JfRElTX1NNQgkJCQkweDIwMDAwMDAwCi0jZGVmaW5lIElTUl9ESVNfRE1BCQkJCTB4NDAwMDAwMDAKLSNkZWZpbmUgSVNSX0RJU19JTlQJCQkJMHg4MDAwMDAwMAotCi0vKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBSRUdfSU1SCQkJCQkweDE2MDQKLQotLyogTm9ybWFsIEludGVycnVwdCBtYXNrICAqLwotI2RlZmluZSBJTVJfTk9STUFMX01BU0sJKFwKLQlJU1JfU01CCQl8XAotCUlTUl9HUEhZCXxcCi0JSVNSX1BIWV9MSU5LRE9XTnxcCi0JSVNSX0RNQVJfVE9fUlNUCXxcCi0JSVNSX0RNQVdfVE9fUlNUCXxcCi0JSVNSX0NNQl9UWAl8XAotCUlTUl9DTUJfUlgJKQotCi0vKiBEZWJ1ZyBJbnRlcnJ1cHQgTWFzayAgKGVuYWJsZSBhbGwgaW50ZXJydXB0KSAqLwotI2RlZmluZSBJTVJfREVCVUdfTUFTSwkoXAotCUlTUl9TTUIJCXxcCi0JSVNSX1RJTUVSCXxcCi0JSVNSX01BTlVBTAl8XAotCUlTUl9SWEZfT1YJfFwKLQlJU1JfUkZEX1VOUlVOCXxcCi0JSVNSX1JSRF9PVgl8XAotCUlTUl9UWEZfVU5SVU4JfFwKLQlJU1JfTElOSwl8XAotCUlTUl9DTUJfVFgJfFwKLQlJU1JfQ01CX1JYCXxcCi0JSVNSX1JYX1BLVAl8XAotCUlTUl9UWF9QS1QJfFwKLQlJU1JfTUFDX1JYCXxcCi0JSVNSX01BQ19UWAkpCi0KLS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkVHX1JGRF9SUkRfSURYCQkJCTB4MTgwMAotI2RlZmluZSBSRUdfVFBEX0lEWAkJCQkweDE4MDQKLQotLyogIE1JSSBkZWZpbml0aW9uICovCi0vKiBQSFkgQ29tbW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9BVDAwMV9DUgkJCQkJMHgwOQotI2RlZmluZSBNSUlfQVQwMDFfU1IJCQkJCTB4MEEKLSNkZWZpbmUgTUlJX0FUMDAxX0VTUgkJCQkJMHgwRgotI2RlZmluZSBNSUlfQVQwMDFfUFNDUgkJCQkJMHgxMAotI2RlZmluZSBNSUlfQVQwMDFfUFNTUgkJCQkJMHgxMQotCi0vKiBQSFkgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNSUlfQ1JfU1BFRURfU0VMRUNUX01TQgkJCQkweDAwNDAJLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCi0jZGVmaW5lIE1JSV9DUl9DT0xMX1RFU1RfRU5BQkxFCQkJCTB4MDA4MAkvKiBDb2xsaXNpb24gdGVzdCBlbmFibGUgKi8KLSNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYCQkJCTB4MDEwMAkvKiBGRFggPTEsIGhhbGYgZHVwbGV4ID0wICovCi0jZGVmaW5lIE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHCQkJCTB4MDIwMAkvKiBSZXN0YXJ0IGF1dG8gbmVnb3RpYXRpb24gKi8KLSNkZWZpbmUgTUlJX0NSX0lTT0xBVEUJCQkJCTB4MDQwMAkvKiBJc29sYXRlIFBIWSBmcm9tIE1JSSAqLwotI2RlZmluZSBNSUlfQ1JfUE9XRVJfRE9XTgkJCQkweDA4MDAJLyogUG93ZXIgZG93biAqLwotI2RlZmluZSBNSUlfQ1JfQVVUT19ORUdfRU4JCQkJMHgxMDAwCS8qIEF1dG8gTmVnIEVuYWJsZSAqLwotI2RlZmluZSBNSUlfQ1JfU1BFRURfU0VMRUNUX0xTQgkJCQkweDIwMDAJLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCi0jZGVmaW5lIE1JSV9DUl9MT09QQkFDSwkJCQkJMHg0MDAwCS8qIDAgPSBub3JtYWwsIDEgPSBsb29wYmFjayAqLwotI2RlZmluZSBNSUlfQ1JfUkVTRVQJCQkJCTB4ODAwMAkvKiAwID0gbm9ybWFsLCAxID0gUEhZIHJlc2V0ICovCi0jZGVmaW5lIE1JSV9DUl9TUEVFRF9NQVNLCQkJCTB4MjA0MAotI2RlZmluZSBNSUlfQ1JfU1BFRURfMTAwMAkJCQkweDAwNDAKLSNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwMAkJCQkweDIwMDAKLSNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwCQkJCQkweDAwMDAKLQotLyogUEhZIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBNSUlfU1JfRVhURU5ERURfQ0FQUwkJCQkweDAwMDEJLyogRXh0ZW5kZWQgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIE1JSV9TUl9KQUJCRVJfREVURUNUCQkJCTB4MDAwMgkvKiBKYWJiZXIgRGV0ZWN0ZWQgKi8KLSNkZWZpbmUgTUlJX1NSX0xJTktfU1RBVFVTCQkJCTB4MDAwNAkvKiBMaW5rIFN0YXR1cyAxID0gbGluayAqLwotI2RlZmluZSBNSUlfU1JfQVVUT05FR19DQVBTCQkJCTB4MDAwOAkvKiBBdXRvIE5lZyBDYXBhYmxlICovCi0jZGVmaW5lIE1JSV9TUl9SRU1PVEVfRkFVTFQJCQkJMHgwMDEwCS8qIFJlbW90ZSBGYXVsdCBEZXRlY3QgKi8KLSNkZWZpbmUgTUlJX1NSX0FVVE9ORUdfQ09NUExFVEUJCQkJMHgwMDIwCS8qIEF1dG8gTmVnIENvbXBsZXRlICovCi0jZGVmaW5lIE1JSV9TUl9QUkVBTUJMRV9TVVBQUkVTUwkJCTB4MDA0MAkvKiBQcmVhbWJsZSBtYXkgYmUgc3VwcHJlc3NlZCAqLwotI2RlZmluZSBNSUlfU1JfRVhURU5ERURfU1RBVFVTCQkJCTB4MDEwMAkvKiBFeHQuIHN0YXR1cyBpbmZvIGluIFJlZyAweDBGICovCi0jZGVmaW5lIE1JSV9TUl8xMDBUMl9IRF9DQVBTCQkJCTB4MDIwMAkvKiAxMDBUMiBIYWxmIER1cGxleCBDYXBhYmxlICovCi0jZGVmaW5lIE1JSV9TUl8xMDBUMl9GRF9DQVBTCQkJCTB4MDQwMAkvKiAxMDBUMiBGdWxsIER1cGxleCBDYXBhYmxlICovCi0jZGVmaW5lIE1JSV9TUl8xMFRfSERfQ0FQUwkJCQkweDA4MDAJLyogMTBUICAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLwotI2RlZmluZSBNSUlfU1JfMTBUX0ZEX0NBUFMJCQkJMHgxMDAwCS8qIDEwVCAgIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KLSNkZWZpbmUgTUlJX1NSXzEwMFhfSERfQ0FQUwkJCQkweDIwMDAJLyogMTAwWCAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLwotI2RlZmluZSBNSUlfU1JfMTAwWF9GRF9DQVBTCQkJCTB4NDAwMAkvKiAxMDBYICBGdWxsIER1cGxleCBDYXBhYmxlICovCi0jZGVmaW5lIE1JSV9TUl8xMDBUNF9DQVBTCQkJCTB4ODAwMAkvKiAxMDBUNCBDYXBhYmxlICovCi0KLS8qIExpbmsgcGFydG5lciBhYmlsaXR5IHJlZ2lzdGVyLiAqLwotI2RlZmluZSBNSUlfTFBBX1NMQ1QJCQkJCTB4MDAxZgkvKiBTYW1lIGFzIGFkdmVydGlzZSBzZWxlY3RvciAgKi8KLSNkZWZpbmUgTUlJX0xQQV8xMEhBTEYJCQkJCTB4MDAyMAkvKiBDYW4gZG8gMTBtYnBzIGhhbGYtZHVwbGV4ICAgKi8KLSNkZWZpbmUgTUlJX0xQQV8xMEZVTEwJCQkJCTB4MDA0MAkvKiBDYW4gZG8gMTBtYnBzIGZ1bGwtZHVwbGV4ICAgKi8KLSNkZWZpbmUgTUlJX0xQQV8xMDBIQUxGCQkJCQkweDAwODAJLyogQ2FuIGRvIDEwMG1icHMgaGFsZi1kdXBsZXggICovCi0jZGVmaW5lIE1JSV9MUEFfMTAwRlVMTAkJCQkJMHgwMTAwCS8qIENhbiBkbyAxMDBtYnBzIGZ1bGwtZHVwbGV4ICAqLwotI2RlZmluZSBNSUlfTFBBXzEwMEJBU0U0CQkJCTB4MDIwMAkvKiAxMDBCQVNFLVQ0ICAqLwotI2RlZmluZSBNSUlfTFBBX1BBVVNFCQkJCQkweDA0MDAJLyogUEFVU0UgKi8KLSNkZWZpbmUgTUlJX0xQQV9BU1lQQVVTRQkJCQkweDA4MDAJLyogQXN5bW1ldHJpY2FsIFBBVVNFICovCi0jZGVmaW5lIE1JSV9MUEFfUkZBVUxUCQkJCQkweDIwMDAJLyogTGluayBwYXJ0bmVyIGZhdWx0ZWQgICAgICAgICovCi0jZGVmaW5lIE1JSV9MUEFfTFBBQ0sJCQkJCTB4NDAwMAkvKiBMaW5rIHBhcnRuZXIgYWNrZWQgdXMgICAgICAgKi8KLSNkZWZpbmUgTUlJX0xQQV9OUEFHRQkJCQkJMHg4MDAwCS8qIE5leHQgcGFnZSBiaXQgICAgICAgICAgICAgICAqLwotCi0vKiBBdXRvbmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0FSX1NFTEVDVE9SX0ZJRUxECQkJCTB4MDAwMQkvKiBpbmRpY2F0ZXMgSUVFRSA4MDIuMyBDU01BL0NEICovCi0jZGVmaW5lIE1JSV9BUl8xMFRfSERfQ0FQUwkJCQkweDAwMjAJLyogMTBUICAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLwotI2RlZmluZSBNSUlfQVJfMTBUX0ZEX0NBUFMJCQkJMHgwMDQwCS8qIDEwVCAgIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KLSNkZWZpbmUgTUlJX0FSXzEwMFRYX0hEX0NBUFMJCQkJMHgwMDgwCS8qIDEwMFRYIEhhbGYgRHVwbGV4IENhcGFibGUgKi8KLSNkZWZpbmUgTUlJX0FSXzEwMFRYX0ZEX0NBUFMJCQkJMHgwMTAwCS8qIDEwMFRYIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KLSNkZWZpbmUgTUlJX0FSXzEwMFQ0X0NBUFMJCQkJMHgwMjAwCS8qIDEwMFQ0IENhcGFibGUgKi8KLSNkZWZpbmUgTUlJX0FSX1BBVVNFCQkJCQkweDA0MDAJLyogUGF1c2Ugb3BlcmF0aW9uIGRlc2lyZWQgKi8KLSNkZWZpbmUgTUlJX0FSX0FTTV9ESVIJCQkJCTB4MDgwMAkvKiBBc3ltbWV0cmljIFBhdXNlIERpcmVjdGlvbiBiaXQgKi8KLSNkZWZpbmUgTUlJX0FSX1JFTU9URV9GQVVMVAkJCQkweDIwMDAJLyogUmVtb3RlIEZhdWx0IGRldGVjdGVkICovCi0jZGVmaW5lIE1JSV9BUl9ORVhUX1BBR0UJCQkJMHg4MDAwCS8qIE5leHQgUGFnZSBhYmlsaXR5IHN1cHBvcnRlZCAqLwotI2RlZmluZSBNSUlfQVJfU1BFRURfTUFTSwkJCQkweDAxRTAKLSNkZWZpbmUgTUlJX0FSX0RFRkFVTFRfQ0FQX01BU0sJCQkJMHgwREUwCi0KLS8qIDEwMDBCQVNFLVQgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfSERfQ0FQUwkJCTB4MDEwMAkvKiBBZHZlcnRpc2UgMTAwMFQgSEQgY2FwYWJpbGl0eSAqLwotI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfRkRfQ0FQUwkJCTB4MDIwMAkvKiBBZHZlcnRpc2UgMTAwMFQgRkQgY2FwYWJpbGl0eSAgKi8KLSNkZWZpbmUgTUlJX0FUMDAxX0NSXzEwMDBUX1JFUEVBVEVSX0RURQkJCTB4MDQwMAkvKiAxPVJlcGVhdGVyL3N3aXRjaCBkZXZpY2UgcG9ydCwgMD1EVEUgZGV2aWNlICovCi0jZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9NU19WQUxVRQkJCTB4MDgwMAkvKiAxPUNvbmZpZ3VyZSBQSFkgYXMgTWFzdGVyLCAwPUNvbmZpZ3VyZSBQSFkgYXMgU2xhdmUgKi8KLSNkZWZpbmUgTUlJX0FUMDAxX0NSXzEwMDBUX01TX0VOQUJMRQkJCTB4MTAwMAkvKiAxPU1hc3Rlci9TbGF2ZSBtYW51YWwgY29uZmlnIHZhbHVlLCAwPUF1dG9tYXRpYyBNYXN0ZXIvU2xhdmUgY29uZmlnICovCi0jZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9URVNUX01PREVfTk9STUFMCQkweDAwMDAJLyogTm9ybWFsIE9wZXJhdGlvbiAqLwotI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfVEVTVF9NT0RFXzEJCQkweDIwMDAJLyogVHJhbnNtaXQgV2F2ZWZvcm0gdGVzdCAqLwotI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfVEVTVF9NT0RFXzIJCQkweDQwMDAJLyogTWFzdGVyIFRyYW5zbWl0IEppdHRlciB0ZXN0ICovCi0jZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9URVNUX01PREVfMwkJCTB4NjAwMAkvKiBTbGF2ZSBUcmFuc21pdCBKaXR0ZXIgdGVzdCAqLwotI2RlZmluZSBNSUlfQVQwMDFfQ1JfMTAwMFRfVEVTVF9NT0RFXzQJCQkweDgwMDAJLyogVHJhbnNtaXR0ZXIgRGlzdG9ydGlvbiB0ZXN0ICovCi0jZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9TUEVFRF9NQVNLCQkJMHgwMzAwCi0jZGVmaW5lIE1JSV9BVDAwMV9DUl8xMDAwVF9ERUZBVUxUX0NBUF9NQVNLCQkweDAzMDAKLQotLyogMTAwMEJBU0UtVCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0FUMDAxX1NSXzEwMDBUX0xQX0hEX0NBUFMJCQkweDA0MDAJLyogTFAgaXMgMTAwMFQgSEQgY2FwYWJsZSAqLwotI2RlZmluZSBNSUlfQVQwMDFfU1JfMTAwMFRfTFBfRkRfQ0FQUwkJCTB4MDgwMAkvKiBMUCBpcyAxMDAwVCBGRCBjYXBhYmxlICovCi0jZGVmaW5lIE1JSV9BVDAwMV9TUl8xMDAwVF9SRU1PVEVfUlhfU1RBVFVTCQkweDEwMDAJLyogUmVtb3RlIHJlY2VpdmVyIE9LICovCi0jZGVmaW5lIE1JSV9BVDAwMV9TUl8xMDAwVF9MT0NBTF9SWF9TVEFUVVMJCTB4MjAwMAkvKiBMb2NhbCByZWNlaXZlciBPSyAqLwotI2RlZmluZSBNSUlfQVQwMDFfU1JfMTAwMFRfTVNfQ09ORklHX1JFUwkJMHg0MDAwCS8qIDE9TG9jYWwgVFggaXMgTWFzdGVyLCAwPVNsYXZlICovCi0jZGVmaW5lIE1JSV9BVDAwMV9TUl8xMDAwVF9NU19DT05GSUdfRkFVTFQJCTB4ODAwMAkvKiBNYXN0ZXIvU2xhdmUgY29uZmlnIGZhdWx0ICovCi0jZGVmaW5lIE1JSV9BVDAwMV9TUl8xMDAwVF9SRU1PVEVfUlhfU1RBVFVTX1NISUZUCTEyCi0jZGVmaW5lIE1JSV9BVDAwMV9TUl8xMDAwVF9MT0NBTF9SWF9TVEFUVVNfU0hJRlQJMTMKLQotLyogRXh0ZW5kZWQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9BVDAwMV9FU1JfMTAwMFRfSERfQ0FQUwkJCTB4MTAwMAkvKiAxMDAwVCBIRCBjYXBhYmxlICovCi0jZGVmaW5lIE1JSV9BVDAwMV9FU1JfMTAwMFRfRkRfQ0FQUwkJCTB4MjAwMAkvKiAxMDAwVCBGRCBjYXBhYmxlICovCi0jZGVmaW5lIE1JSV9BVDAwMV9FU1JfMTAwMFhfSERfQ0FQUwkJCTB4NDAwMAkvKiAxMDAwWCBIRCBjYXBhYmxlICovCi0jZGVmaW5lIE1JSV9BVDAwMV9FU1JfMTAwMFhfRkRfQ0FQUwkJCTB4ODAwMAkvKiAxMDAwWCBGRCBjYXBhYmxlICovCi0KLS8qIEFUMDAxIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU0NSX0pBQkJFUl9ESVNBQkxFCQkJMHgwMDAxCS8qIDE9SmFiYmVyIEZ1bmN0aW9uIGRpc2FibGVkICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU0NSX1BPTEFSSVRZX1JFVkVSU0FMCQkweDAwMDIJLyogMT1Qb2xhcml0eSBSZXZlcnNhbCBlbmFibGVkICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU0NSX1NRRV9URVNUCQkJCTB4MDAwNAkvKiAxPVNRRSBUZXN0IGVuYWJsZWQgKi8KLSNkZWZpbmUgTUlJX0FUMDAxX1BTQ1JfTUFDX1BPV0VSRE9XTgkJCTB4MDAwOAotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9DTEsxMjVfRElTQUJMRQkJCTB4MDAxMAkvKiAxPUNMSzEyNSBsb3csIDA9Q0xLMTI1IHRvZ2dsaW5nICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU0NSX01ESV9NQU5VQUxfTU9ERQkJCTB4MDAwMAkvKiBNREkgQ3Jvc3NvdmVyIE1vZGUgYml0cyA2OjUsIE1hbnVhbCBNREkgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9NRElYX01BTlVBTF9NT0RFCQkJMHgwMDIwCS8qIE1hbnVhbCBNRElYIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUlJX0FUMDAxX1BTQ1JfQVVUT19YXzEwMDBUCQkJMHgwMDQwCS8qIDEwMDBCQVNFLVQ6IEF1dG8gY3Jvc3NvdmVyLCAxMDBCQVNFLVRYLzEwQkFTRS1UOiBNREkgTW9kZSAqLwotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9BVVRPX1hfTU9ERQkJCTB4MDA2MAkvKiBBdXRvIGNyb3Nzb3ZlciBlbmFibGVkIGFsbCBzcGVlZHMuICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU0NSXzEwQlRfRVhUX0RJU1RfRU5BQkxFCQkweDAwODAJLyogMT1FbmFibGUgRXh0ZW5kZWQgMTBCQVNFLVQgZGlzdGFuY2UgKExvd2VyIDEwQkFTRS1UIFJYIFRocmVzaG9sZCksIDA9Tm9ybWFsIDEwQkFTRS1UIFJYIFRocmVzaG9sZCAqLwotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9NSUlfNUJJVF9FTkFCTEUJCQkweDAxMDAJLyogMT01LUJpdCBpbnRlcmZhY2UgaW4gMTAwQkFTRS1UWCwgMD1NSUkgaW50ZXJmYWNlIGluIDEwMEJBU0UtVFggKi8KLSNkZWZpbmUgTUlJX0FUMDAxX1BTQ1JfU0NSQU1CTEVSX0RJU0FCTEUJCTB4MDIwMAkvKiAxPVNjcmFtYmxlciBkaXNhYmxlICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU0NSX0ZPUkNFX0xJTktfR09PRAkJCTB4MDQwMAkvKiAxPUZvcmNlIGxpbmsgZ29vZCAqLwotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9BU1NFUlRfQ1JTX09OX1RYCQkJMHgwODAwCS8qIDE9QXNzZXJ0IENSUyBvbiBUcmFuc21pdCAqLwotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9QT0xBUklUWV9SRVZFUlNBTF9TSElGVAkJMQotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl9BVVRPX1hfTU9ERV9TSElGVAkJNQotI2RlZmluZSBNSUlfQVQwMDFfUFNDUl8xMEJUX0VYVF9ESVNUX0VOQUJMRV9TSElGVAk3Ci0KLS8qIEFUMDAxIFBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0FUMDAxX1BTU1JfU1BEX0RQTFhfUkVTT0xWRUQJCTB4MDgwMAkvKiAxPVNwZWVkICYgRHVwbGV4IHJlc29sdmVkICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU1NSX0RQTFgJCQkJMHgyMDAwCS8qIDE9RHVwbGV4IDA9SGFsZiBEdXBsZXggKi8KLSNkZWZpbmUgTUlJX0FUMDAxX1BTU1JfU1BFRUQJCQkJMHhDMDAwCS8qIFNwZWVkLCBiaXRzIDE0OjE1ICovCi0jZGVmaW5lIE1JSV9BVDAwMV9QU1NSXzEwTUJTCQkJCTB4MDAwMAkvKiAwMD0xME1icyAqLwotI2RlZmluZSBNSUlfQVQwMDFfUFNTUl8xMDBNQlMJCQkJMHg0MDAwCS8qIDAxPTEwME1icyAqLwotI2RlZmluZSBNSUlfQVQwMDFfUFNTUl8xMDAwTUJTCQkJCTB4ODAwMAkvKiAxMD0xMDAwTWJzICovCi0KLS8qIFBDSSBDb21tYW5kIFJlZ2lzdGVyIEJpdCBEZWZpbml0aW9ucyAqLwotI2RlZmluZSBQQ0lfUkVHX0NPTU1BTkQJCQkJCTB4MDQJLyogUENJIENvbW1hbmQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ01EX0lPX1NQQUNFCQkJCQkweDAwMDEKLSNkZWZpbmUgQ01EX01FTU9SWV9TUEFDRQkJCQkweDAwMDIKLSNkZWZpbmUgQ01EX0JVU19NQVNURVIJCQkJCTB4MDAwNAotCi0vKiBXYWtlIFVwIEZpbHRlciBDb250cm9sICovCi0jZGVmaW5lIEFUTDFfV1VGQ19MTktDCTB4MDAwMDAwMDEJLyogTGluayBTdGF0dXMgQ2hhbmdlIFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgQVRMMV9XVUZDX01BRwkweDAwMDAwMDAyCS8qIE1hZ2ljIFBhY2tldCBXYWtldXAgRW5hYmxlICovCi0jZGVmaW5lIEFUTDFfV1VGQ19FWAkweDAwMDAwMDA0CS8qIERpcmVjdGVkIEV4YWN0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgQVRMMV9XVUZDX01DCTB4MDAwMDAwMDgJLyogTXVsdGljYXN0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgQVRMMV9XVUZDX0JDCTB4MDAwMDAwMTAJLyogQnJvYWRjYXN0IFdha2V1cCBFbmFibGUgKi8KLQotLyogRXJyb3IgQ29kZXMgKi8KLSNkZWZpbmUgQVRMMV9TVUNDRVNTCQkJMAotI2RlZmluZSBBVEwxX0VSUl9FRVBST00JCQkxCi0jZGVmaW5lIEFUTDFfRVJSX1BIWQkJCTIKLSNkZWZpbmUgQVRMMV9FUlJfQ09ORklHCQkJMwotI2RlZmluZSBBVEwxX0VSUl9QQVJBTQkJCTQKLSNkZWZpbmUgQVRMMV9FUlJfTUFDX1RZUEUJCTUKLSNkZWZpbmUgQVRMMV9FUlJfUEhZX1RZUEUJCTYKLSNkZWZpbmUgQVRMMV9FUlJfUEhZX1NQRUVECQk3Ci0jZGVmaW5lIEFUTDFfRVJSX1BIWV9SRVMJCTgKLQotI2RlZmluZSBTUEVFRF8wCQkweGZmZmYKLSNkZWZpbmUgU1BFRURfMTAJMTAKLSNkZWZpbmUgU1BFRURfMTAwCTEwMAotI2RlZmluZSBTUEVFRF8xMDAwCTEwMDAKLSNkZWZpbmUgSEFMRl9EVVBMRVgJMQotI2RlZmluZSBGVUxMX0RVUExFWAkyCi0KLSNkZWZpbmUgTUVESUFfVFlQRV9BVVRPX1NFTlNPUgkwCi0jZGVmaW5lIE1FRElBX1RZUEVfMTAwME1fRlVMTAkxCi0jZGVmaW5lIE1FRElBX1RZUEVfMTAwTV9GVUxMCTIKLSNkZWZpbmUgTUVESUFfVFlQRV8xMDBNX0hBTEYJMwotI2RlZmluZSBNRURJQV9UWVBFXzEwTV9GVUxMCTQKLSNkZWZpbmUgTUVESUFfVFlQRV8xME1fSEFMRgk1Ci0KLSNkZWZpbmUgQURWRVJUSVNFXzEwX0hBTEYJCTB4MDAwMQotI2RlZmluZSBBRFZFUlRJU0VfMTBfRlVMTAkJMHgwMDAyCi0jZGVmaW5lIEFEVkVSVElTRV8xMDBfSEFMRgkJMHgwMDA0Ci0jZGVmaW5lIEFEVkVSVElTRV8xMDBfRlVMTAkJMHgwMDA4Ci0jZGVmaW5lIEFEVkVSVElTRV8xMDAwX0hBTEYJCTB4MDAxMAotI2RlZmluZSBBRFZFUlRJU0VfMTAwMF9GVUxMCQkweDAwMjAKLSNkZWZpbmUgQVVUT05FR19BRFZFUlRJU0VfU1BFRURfREVGQVVMVAkweDAwMkYJLyogRXZlcnl0aGluZyBidXQgMTAwMC1IYWxmICovCi0jZGVmaW5lIEFVVE9ORUdfQURWRVJUSVNFXzEwXzEwMF9BTEwJMHgwMDBGCS8qIEFsbCAxMC8xMDAgc3BlZWRzICovCi0jZGVmaW5lIEFVVE9ORUdfQURWRVJUSVNFXzEwX0FMTAkweDAwMDMJLyogMTBNYnBzIEZ1bGwgJiBIYWxmIHNwZWVkcyAqLwotCi0jZGVmaW5lIE1BWF9KVU1CT19GUkFNRV9TSVpFCQkweDI4MDAKLQotI2RlZmluZSBQSFlfQVVUT19ORUdfVElNRQk0NQkvKiA0LjUgU2Vjb25kcyAqLwotI2RlZmluZSBQSFlfRk9SQ0VfVElNRQkJMjAJLyogMi4wIFNlY29uZHMgKi8KLQotLyogRm9yIGNoZWNrc3VtbWluZyAsIHRoZSBzdW0gb2YgYWxsIHdvcmRzIGluIHRoZSBFRVBST00gc2hvdWxkIGVxdWFsIDB4QkFCQSAqLwotI2RlZmluZSBFRVBST01fU1VNCQkweEJBQkEKLQotI2RlZmluZSBBVEwxX0VFRFVNUF9MRU4JCTQ4Ci0KLS8qIFN0YXRpc3RpY3MgY291bnRlcnMgY29sbGVjdGVkIGJ5IHRoZSBNQUMgKi8KLXN0cnVjdCBzdGF0c19tc2dfYmxvY2sgewotCS8qIHJ4ICovCi0JdTMyIHJ4X29rOwkJLyogVGhlIG51bWJlciBvZiBnb29kIHBhY2tldCByZWNlaXZlZC4gKi8KLQl1MzIgcnhfYmNhc3Q7CQkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYnJvYWRjYXN0IHBhY2tldCByZWNlaXZlZC4gKi8KLQl1MzIgcnhfbWNhc3Q7CQkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgbXVsdGljYXN0IHBhY2tldCByZWNlaXZlZC4gKi8KLQl1MzIgcnhfcGF1c2U7CQkvKiBUaGUgbnVtYmVyIG9mIFBhdXNlIHBhY2tldCByZWNlaXZlZC4gKi8KLQl1MzIgcnhfY3RybDsJCS8qIFRoZSBudW1iZXIgb2YgQ29udHJvbCBwYWNrZXQgcmVjZWl2ZWQgb3RoZXIgdGhhbiBQYXVzZSBmcmFtZS4gKi8KLQl1MzIgcnhfZmNzX2VycjsJCS8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyB3aXRoIGJhZCBGQ1MuICovCi0JdTMyIHJ4X2xlbl9lcnI7CQkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgd2l0aCBtaXNtYXRjaCBvZiBsZW5ndGggZmllbGQgYW5kIGFjdHVhbCBzaXplLiAqLwotCXUzMiByeF9ieXRlX2NudDsJLyogVGhlIG51bWJlciBvZiBieXRlcyBvZiBnb29kIHBhY2tldCByZWNlaXZlZC4gRkNTIGlzIE5PVCBpbmNsdWRlZC4gKi8KLQl1MzIgcnhfcnVudDsJCS8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBsZXNzIHRoYW4gNjQgYnl0ZSBsb25nIGFuZCB3aXRoIGdvb2QgRkNTLiAqLwotCXUzMiByeF9mcmFnOwkJLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGxlc3MgdGhhbiA2NCBieXRlIGxvbmcgYW5kIHdpdGggYmFkIEZDUy4gKi8KLQl1MzIgcnhfc3pfNjQ7CQkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIDY0IGJ5dGUgbG9uZy4gKi8KLQl1MzIgcnhfc3pfNjVfMTI3OwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gNjUgYW5kIDEyNy1ieXRlIGxvbmcuICovCi0JdTMyIHJ4X3N6XzEyOF8yNTU7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBhcmUgYmV0d2VlbiAxMjggYW5kIDI1NS1ieXRlIGxvbmcuICovCi0JdTMyIHJ4X3N6XzI1Nl81MTE7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBhcmUgYmV0d2VlbiAyNTYgYW5kIDUxMS1ieXRlIGxvbmcuICovCi0JdTMyIHJ4X3N6XzUxMl8xMDIzOwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gNTEyIGFuZCAxMDIzLWJ5dGUgbG9uZy4gKi8KLQl1MzIgcnhfc3pfMTAyNF8xNTE4OwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gMTAyNCBhbmQgMTUxOC1ieXRlIGxvbmcuICovCi0JdTMyIHJ4X3N6XzE1MTlfbWF4OwkvKiBUaGUgbnVtYmVyIG9mIGdvb2QgYW5kIGJhZCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgYXJlIGJldHdlZW4gMTUxOS1ieXRlIGFuZCBNVFUuICovCi0JdTMyIHJ4X3N6X292OwkJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGFyZSBtb3JlIHRoYW4gTVRVIHNpemUgxaFDIHRydW5jYXRlZCBieSBTZWxlbmUuICovCi0JdTMyIHJ4X3J4Zl9vdjsJCS8qIFRoZSBudW1iZXIgb2YgZnJhbWUgZHJvcHBlZCBkdWUgdG8gb2NjdXJyZW5jZSBvZiBSWCBGSUZPIG92ZXJmbG93LiAqLwotCXUzMiByeF9ycmRfb3Y7CQkvKiBUaGUgbnVtYmVyIG9mIGZyYW1lIGRyb3BwZWQgZHVlIHRvIG9jY3VycmVuY2Ugb2YgUlJEIG92ZXJmbG93LiAqLwotCXUzMiByeF9hbGlnbl9lcnI7CS8qIEFsaWdubWVudCBFcnJvciAqLwotCXUzMiByeF9iY2FzdF9ieXRlX2NudDsJLyogVGhlIGJ5dGUgY291bnQgb2YgYnJvYWRjYXN0IHBhY2tldCByZWNlaXZlZCwgZXhjbHVkaW5nIEZDUy4gKi8KLQl1MzIgcnhfbWNhc3RfYnl0ZV9jbnQ7CS8qIFRoZSBieXRlIGNvdW50IG9mIG11bHRpY2FzdCBwYWNrZXQgcmVjZWl2ZWQsIGV4Y2x1ZGluZyBGQ1MuICovCi0JdTMyIHJ4X2Vycl9hZGRyOwkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgZHJvcHBlZCBkdWUgdG8gYWRkcmVzcyBmaWx0ZXJpbmcuICovCi0KLQkvKiB0eCAqLwotCXUzMiB0eF9vazsJCS8qIFRoZSBudW1iZXIgb2YgZ29vZCBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCi0JdTMyIHR4X2JjYXN0OwkJLyogVGhlIG51bWJlciBvZiBnb29kIGJyb2FkY2FzdCBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCi0JdTMyIHR4X21jYXN0OwkJLyogVGhlIG51bWJlciBvZiBnb29kIG11bHRpY2FzdCBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCi0JdTMyIHR4X3BhdXNlOwkJLyogVGhlIG51bWJlciBvZiBQYXVzZSBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCi0JdTMyIHR4X2V4Y19kZWZlcjsJLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkIHdpdGggZXhjZXNzaXZlIGRlZmVycmFsLiAqLwotCXUzMiB0eF9jdHJsOwkJLyogVGhlIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkIGlzIGEgY29udHJvbCBmcmFtZSwgZXhjbHVkaW5nIFBhdXNlIGZyYW1lLiAqLwotCXUzMiB0eF9kZWZlcjsJCS8qIFRoZSBudW1iZXIgb2YgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGlzIGRlZmVycmVkLiAqLwotCXUzMiB0eF9ieXRlX2NudDsJLyogVGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIHRyYW5zbWl0dGVkLiBGQ1MgaXMgTk9UIGluY2x1ZGVkLiAqLwotCXUzMiB0eF9zel82NDsJCS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgNjQgYnl0ZSBsb25nLiAqLwotCXUzMiB0eF9zel82NV8xMjc7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgYmV0d2VlbiA2NSBhbmQgMTI3LWJ5dGUgbG9uZy4gKi8KLQl1MzIgdHhfc3pfMTI4XzI1NTsJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGFyZSBiZXR3ZWVuIDEyOCBhbmQgMjU1LWJ5dGUgbG9uZy4gKi8KLQl1MzIgdHhfc3pfMjU2XzUxMTsJLyogVGhlIG51bWJlciBvZiBnb29kIGFuZCBiYWQgcGFja2V0cyB0cmFuc21pdHRlZCB0aGF0IGFyZSBiZXR3ZWVuIDI1NiBhbmQgNTExLWJ5dGUgbG9uZy4gKi8KLQl1MzIgdHhfc3pfNTEyXzEwMjM7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgYmV0d2VlbiA1MTIgYW5kIDEwMjMtYnl0ZSBsb25nLiAqLwotCXUzMiB0eF9zel8xMDI0XzE1MTg7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgYmV0d2VlbiAxMDI0IGFuZCAxNTE4LWJ5dGUgbG9uZy4gKi8KLQl1MzIgdHhfc3pfMTUxOV9tYXg7CS8qIFRoZSBudW1iZXIgb2YgZ29vZCBhbmQgYmFkIHBhY2tldHMgdHJhbnNtaXR0ZWQgdGhhdCBhcmUgYmV0d2VlbiAxNTE5LWJ5dGUgYW5kIE1UVS4gKi8KLQl1MzIgdHhfMV9jb2w7CQkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgc3Vic2VxdWVudGx5IHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWxseSB3aXRoIGEgc2luZ2xlIHByaW9yIGNvbGxpc2lvbi4gKi8KLQl1MzIgdHhfMl9jb2w7CQkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgc3Vic2VxdWVudGx5IHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWxseSB3aXRoIG11bHRpcGxlIHByaW9yIGNvbGxpc2lvbnMuICovCi0JdTMyIHR4X2xhdGVfY29sOwkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgd2l0aCBsYXRlIGNvbGxpc2lvbnMuICovCi0JdTMyIHR4X2Fib3J0X2NvbDsJLyogVGhlIG51bWJlciBvZiB0cmFuc21pdCBwYWNrZXRzIGFib3J0ZWQgZHVlIHRvIGV4Y2Vzc2l2ZSBjb2xsaXNpb25zLiAqLwotCXUzMiB0eF91bmRlcnJ1bjsJLyogVGhlIG51bWJlciBvZiB0cmFuc21pdCBwYWNrZXRzIGFib3J0ZWQgZHVlIHRvIHRyYW5zbWl0IEZJRk8gdW5kZXJydW4sIG9yIFRSRCBGSUZPIHVuZGVycnVuICovCi0JdTMyIHR4X3JkX2VvcDsJCS8qIFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCByZWFkIGJleW9uZCB0aGUgRU9QIGludG8gdGhlIG5leHQgZnJhbWUgYXJlYSB3aGVuIFRSRCB3YXMgbm90IHdyaXR0ZW4gdGltZWx5ICovCi0JdTMyIHR4X2xlbl9lcnI7CQkvKiBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0IHBhY2tldHMgd2l0aCBsZW5ndGggZmllbGQgZG9lcyBOT1QgbWF0Y2ggdGhlIGFjdHVhbCBmcmFtZSBzaXplLiAqLwotCXUzMiB0eF90cnVuYzsJCS8qIFRoZSBudW1iZXIgb2YgdHJhbnNtaXQgcGFja2V0cyB0cnVuY2F0ZWQgZHVlIHRvIHNpemUgZXhjZWVkaW5nIE1UVS4gKi8KLQl1MzIgdHhfYmNhc3RfYnl0ZTsJLyogVGhlIGJ5dGUgY291bnQgb2YgYnJvYWRjYXN0IHBhY2tldCB0cmFuc21pdHRlZCwgZXhjbHVkaW5nIEZDUy4gKi8KLQl1MzIgdHhfbWNhc3RfYnl0ZTsJLyogVGhlIGJ5dGUgY291bnQgb2YgbXVsdGljYXN0IHBhY2tldCB0cmFuc21pdHRlZCwgZXhjbHVkaW5nIEZDUy4gKi8KLQl1MzIgc21iX3VwZGF0ZWQ7CS8qIDE6IFNNQiBVcGRhdGVkLiBUaGlzIGlzIHVzZWQgYnkgc29mdHdhcmUgYXMgdGhlIGluZGljYXRpb24gb2YgdGhlIHN0YXRpc3RpY3MgdXBkYXRlLgotCQkJCSAqIFNvZnR3YXJlIHNob3VsZCBjbGVhciB0aGlzIGJpdCBhcyBzb29uIGFzIHJldHJpZXZpbmcgdGhlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24uICovCi19OwotCi0vKiBDb2FsZXNjaW5nIE1lc3NhZ2UgQmxvY2sgKi8KLXN0cnVjdCBjb2Fsc19tc2dfYmxvY2sgewotCXUzMiBpbnRfc3RhdHM7CQkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCi0JdTE2IHJyZF9wcm9kX2lkeDsJLyogVFJEIFByb2R1Y2VyIEluZGV4LiAqLwotCXUxNiByZmRfY29uc19pZHg7CS8qIFJGRCBDb25zdW1lciBJbmRleC4gKi8KLQl1MTYgdXBkYXRlOwkJLyogU2VsZW5lIHNldHMgdGhpcyBiaXQgZXZlcnkgdGltZSBpdCBETUEgdGhlIENNQiB0byBob3N0IG1lbW9yeS4KLQkJCQkgKiBTb2Z0d2FyZSBzdXBwb3NlcyB0byBjbGVhciB0aGlzIGJpdCB3aGVuIENNQiBpbmZvcm1hdGlvbiBpcyBwcm9jZXNzZWQuICovCi0JdTE2IHRwZF9jb25zX2lkeDsJLyogVFBEIENvbnN1bWVyIEluZGV4LiAqLwotfTsKLQotLyogUlJEIGRlc2NyaXB0b3IgKi8KLXN0cnVjdCByeF9yZXR1cm5fZGVzYyB7Ci0JdTggbnVtX2J1ZjsJCS8qIE51bWJlciBvZiBSRkQgYnVmZmVycyB1c2VkIGJ5IHRoZSByZWNlaXZlZCBwYWNrZXQgKi8KLQl1OCByZXN2ZWQ7Ci0JdTE2IGJ1Zl9pbmR4OwkJLyogUkZEIEluZGV4IG9mIHRoZSBmaXJzdCBidWZmZXIgKi8KLQl1bmlvbiB7Ci0JCXUzMiB2YWxpZDsKLQkJc3RydWN0IHsKLQkJCXUxNiByeF9jaGtzdW07Ci0JCQl1MTYgcGt0X3NpemU7Ci0JCX0geHN1bV9zejsKLQl9IHhzejsKLQotCXUxNiBwa3RfZmxnOwkJLyogUGFja2V0IGZsYWdzICovCi0JdTE2IGVycl9mbGc7CQkvKiBFcnJvciBmbGFncyAqLwotCXUxNiByZXN2ZWQyOwotCXUxNiB2bGFuX3RhZzsJCS8qIFZMQU4gVEFHICovCi19OwotCi0jZGVmaW5lIFBBQ0tFVF9GTEFHX0VUSF9UWVBFCTB4MDA4MAotI2RlZmluZSBQQUNLRVRfRkxBR19WTEFOX0lOUwkweDAxMDAKLSNkZWZpbmUgUEFDS0VUX0ZMQUdfRVJSCQkweDAyMDAKLSNkZWZpbmUgUEFDS0VUX0ZMQUdfSVBWNAkweDA0MDAKLSNkZWZpbmUgUEFDS0VUX0ZMQUdfVURQCQkweDA4MDAKLSNkZWZpbmUgUEFDS0VUX0ZMQUdfVENQCQkweDEwMDAKLSNkZWZpbmUgUEFDS0VUX0ZMQUdfQkNBU1QJMHgyMDAwCi0jZGVmaW5lIFBBQ0tFVF9GTEFHX01DQVNUCTB4NDAwMAotI2RlZmluZSBQQUNLRVRfRkxBR19QQVVTRQkweDgwMDAKLQotI2RlZmluZSBFUlJfRkxBR19DUkMJCTB4MDAwMQotI2RlZmluZSBFUlJfRkxBR19DT0RFCQkweDAwMDIKLSNkZWZpbmUgRVJSX0ZMQUdfRFJJQkJMRQkweDAwMDQKLSNkZWZpbmUgRVJSX0ZMQUdfUlVOVAkJMHgwMDA4Ci0jZGVmaW5lIEVSUl9GTEFHX09WCQkweDAwMTAKLSNkZWZpbmUgRVJSX0ZMQUdfVFJVTkMJCTB4MDAyMAotI2RlZmluZSBFUlJfRkxBR19JUF9DSEtTVU0JMHgwMDQwCi0jZGVmaW5lIEVSUl9GTEFHX0w0X0NIS1NVTQkweDAwODAKLSNkZWZpbmUgRVJSX0ZMQUdfTEVOCQkweDAxMDAKLSNkZWZpbmUgRVJSX0ZMQUdfREVTX0FERFIJMHgwMjAwCi0KLS8qIFJGRCBkZXNjcmlwdG9yICovCi1zdHJ1Y3QgcnhfZnJlZV9kZXNjIHsKLQlfX2xlNjQgYnVmZmVyX2FkZHI7CS8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqLwotCV9fbGUxNiBidWZfbGVuOwkJLyogU2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgaW4gaG9zdCBtZW1vcnksIGluIGJ5dGUgKi8KLQl1MTYgY29hbGVzZTsJCS8qIFVwZGF0ZSBjb25zdW1lciBpbmRleCB0byBob3N0IGFmdGVyIHRoZSByZWNlcHRpb24gb2YgdGhpcyBmcmFtZSAqLwotCS8qIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpcyByZXF1aXJlZCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIHRzb3B1IGRlZmluZXMgKi8KLSNkZWZpbmUgVFNPX1BBUkFNX0JVRkxFTl9NQVNLICAgICAgICAgICAweDNGRkYKLSNkZWZpbmUgVFNPX1BBUkFNX0JVRkxFTl9TSElGVCAgICAgICAgICAwCi0jZGVmaW5lIFRTT19QQVJBTV9ETUFJTlRfTUFTSyAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFRTT19QQVJBTV9ETUFJTlRfU0hJRlQgICAgICAgICAgMTQKLSNkZWZpbmUgVFNPX1BBUkFNX1BLVE5UX01BU0sgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgVFNPX1BBUkFNX1BLVElOVF9TSElGVCAgICAgICAgICAxNQotI2RlZmluZSBUU09fUEFSQU1fVkxBTlRBR19NQVNLICAgICAgICAgIDB4RkZGRgotI2RlZmluZSBUU09fUEFSQU1fVkxBTl9TSElGVCAgICAgICAgICAgIDE2Ci0KLS8qIHRzb3BsIGRlZmluZXMgKi8KLSNkZWZpbmUgVFNPX1BBUkFNX0VPUF9NQVNLICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgVFNPX1BBUkFNX0VPUF9TSElGVCAgICAgICAgICAgICAwCi0jZGVmaW5lIFRTT19QQVJBTV9DT0FMRVNDRV9NQVNLICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFRTT19QQVJBTV9DT0FMRVNDRV9TSElGVCAgICAgICAgMQotI2RlZmluZSBUU09fUEFSQU1fSU5TVkxBR19NQVNLICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBUU09fUEFSQU1fSU5TVkxBR19TSElGVCAgICAgICAgIDIKLSNkZWZpbmUgVFNPX1BBUkFNX0NVU1RPTUNLU1VNX01BU0sgICAgICAweDAwMDEKLSNkZWZpbmUgVFNPX1BBUkFNX0NVU1RPTUNLU1VNX1NISUZUICAgICAzCi0jZGVmaW5lIFRTT19QQVJBTV9TRUdNRU5UX01BU0sgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFRTT19QQVJBTV9TRUdNRU5UX1NISUZUICAgICAgICAgNAotI2RlZmluZSBUU09fUEFSQU1fSVBDS1NVTV9NQVNLICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBUU09fUEFSQU1fSVBDS1NVTV9TSElGVCAgICAgICAgIDUKLSNkZWZpbmUgVFNPX1BBUkFNX1RDUENLU1VNX01BU0sgICAgICAgICAweDAwMDEKLSNkZWZpbmUgVFNPX1BBUkFNX1RDUENLU1VNX1NISUZUICAgICAgICA2Ci0jZGVmaW5lIFRTT19QQVJBTV9VRFBDS1NVTV9NQVNLICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFRTT19QQVJBTV9VRFBDS1NVTV9TSElGVCAgICAgICAgNwotI2RlZmluZSBUU09fUEFSQU1fVkxBTlRBR0dFRF9NQVNLICAgICAgIDB4MDAwMQotI2RlZmluZSBUU09fUEFSQU1fVkxBTlRBR0dFRF9TSElGVCAgICAgIDgKLSNkZWZpbmUgVFNPX1BBUkFNX0VUSFRZUEVfTUFTSyAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgVFNPX1BBUkFNX0VUSFRZUEVfU0hJRlQgICAgICAgICA5Ci0jZGVmaW5lIFRTT19QQVJBTV9JUEhMX01BU0sgICAgICAgICAgICAgMHgwMDBGCi0jZGVmaW5lIFRTT19QQVJBTV9JUEhMX1NISUZUICAgICAgICAgICAgMTAKLSNkZWZpbmUgVFNPX1BBUkFNX1RDUEhEUkxFTl9NQVNLICAgICAgICAweDAwMEYKLSNkZWZpbmUgVFNPX1BBUkFNX1RDUEhEUkxFTl9TSElGVCAgICAgICAxNAotI2RlZmluZSBUU09fUEFSQU1fSERSRkxBR19NQVNLICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBUU09fUEFSQU1fSERSRkxBR19TSElGVCAgICAgICAgIDE4Ci0jZGVmaW5lIFRTT19QQVJBTV9NU1NfTUFTSyAgICAgICAgICAgICAgMHgxRkZGCi0jZGVmaW5lIFRTT19QQVJBTV9NU1NfU0hJRlQgICAgICAgICAgICAgMTkKLQotLyogY3N1bXB1IGRlZmluZXMgKi8KLSNkZWZpbmUgQ1NVTV9QQVJBTV9CVUZMRU5fTUFTSyAgICAgICAgICAweDNGRkYKLSNkZWZpbmUgQ1NVTV9QQVJBTV9CVUZMRU5fU0hJRlQgICAgICAgICAwCi0jZGVmaW5lIENTVU1fUEFSQU1fRE1BSU5UX01BU0sgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIENTVU1fUEFSQU1fRE1BSU5UX1NISUZUICAgICAgICAgMTQKLSNkZWZpbmUgQ1NVTV9QQVJBTV9QS1RJTlRfTUFTSyAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgQ1NVTV9QQVJBTV9QS1RJTlRfU0hJRlQgICAgICAgICAxNQotI2RlZmluZSBDU1VNX1BBUkFNX1ZBTEFOVEFHX01BU0sgICAgICAgIDB4RkZGRgotI2RlZmluZSBDU1VNX1BBUkFNX1ZBTEFOX1NISUZUICAgICAgICAgIDE2Ci0KLS8qIGNzdW1wbCBkZWZpbmVzKi8KLSNkZWZpbmUgQ1NVTV9QQVJBTV9FT1BfTUFTSyAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgQ1NVTV9QQVJBTV9FT1BfU0hJRlQgICAgICAgICAgICAwCi0jZGVmaW5lIENTVU1fUEFSQU1fQ09BTEVTQ0VfTUFTSyAgICAgICAgMHgwMDAxCi0jZGVmaW5lIENTVU1fUEFSQU1fQ09BTEVTQ0VfU0hJRlQgICAgICAgMQotI2RlZmluZSBDU1VNX1BBUkFNX0lOU1ZMQUdfTUFTSyAgICAgICAgIDB4MDAwMQotI2RlZmluZSBDU1VNX1BBUkFNX0lOU1ZMQUdfU0hJRlQgICAgICAgIDIKLSNkZWZpbmUgQ1NVTV9QQVJBTV9DVVNUT01DS1NVTV9NQVNLICAgICAweDAwMDEKLSNkZWZpbmUgQ1NVTV9QQVJBTV9DVVNUT01DS1NVTV9TSElGVCAgICAzCi0jZGVmaW5lIENTVU1fUEFSQU1fU0VHTUVOVF9NQVNLICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIENTVU1fUEFSQU1fU0VHTUVOVF9TSElGVCAgICAgICAgNAotI2RlZmluZSBDU1VNX1BBUkFNX0lQQ0tTVU1fTUFTSyAgICAgICAgIDB4MDAwMQotI2RlZmluZSBDU1VNX1BBUkFNX0lQQ0tTVU1fU0hJRlQgICAgICAgIDUKLSNkZWZpbmUgQ1NVTV9QQVJBTV9UQ1BDS1NVTV9NQVNLICAgICAgICAweDAwMDEKLSNkZWZpbmUgQ1NVTV9QQVJBTV9UQ1BDS1NVTV9TSElGVCAgICAgICA2Ci0jZGVmaW5lIENTVU1fUEFSQU1fVURQQ0tTVU1fTUFTSyAgICAgICAgMHgwMDAxCi0jZGVmaW5lIENTVU1fUEFSQU1fVURQQ0tTVU1fU0hJRlQgICAgICAgNwotI2RlZmluZSBDU1VNX1BBUkFNX1ZMQU5UQUdHRURfTUFTSyAgICAgIDB4MDAwMQotI2RlZmluZSBDU1VNX1BBUkFNX1ZMQU5UQUdHRURfU0hJRlQgICAgIDgKLSNkZWZpbmUgQ1NVTV9QQVJBTV9FVEhUWVBFX01BU0sgICAgICAgICAweDAwMDEKLSNkZWZpbmUgQ1NVTV9QQVJBTV9FVEhUWVBFX1NISUZUICAgICAgICA5Ci0jZGVmaW5lIENTVU1fUEFSQU1fSVBITF9NQVNLICAgICAgICAgICAgMHgwMDBGCi0jZGVmaW5lIENTVU1fUEFSQU1fSVBITF9TSElGVCAgICAgICAgICAgMTAKLSNkZWZpbmUgQ1NVTV9QQVJBTV9QTE9BRE9GRlNFVF9NQVNLICAgICAweDAwRkYKLSNkZWZpbmUgQ1NVTV9QQVJBTV9QTE9BRE9GRlNFVF9TSElGVCAgICAxNgotI2RlZmluZSBDU1VNX1BBUkFNX1hTVU1PRkZTRVRfTUFTSyAgICAgIDB4MDBGRgotI2RlZmluZSBDU1VNX1BBUkFNX1hTVU1PRkZTRVRfU0hJRlQgICAgIDI0Ci0KLS8qIFRQRCBkZXNjcmlwdG9yICovCi1zdHJ1Y3QgdHNvX3BhcmFtIHsKLSAgICAgICAgLyogVGhlIG9yZGVyIG9mIHRoZXNlIGRlY2xhcmF0aW9ucyBpcyBpbXBvcnRhbnQgLS0gZG9uJ3QgY2hhbmdlIGl0ICovCi0gICAgICAgIHUzMiB0c29wdTsgICAgICAvKiB0c29fcGFyYW0gdXBwZXIgd29yZCAqLwotICAgICAgICB1MzIgdHNvcGw7ICAgICAgLyogdHNvX3BhcmFtIGxvd2VyIHdvcmQgKi8KLX07Ci0KLXN0cnVjdCBjc3VtX3BhcmFtIHsKLSAgICAgICAgLyogVGhlIG9yZGVyIG9mIHRoZXNlIGRlY2xhcmF0aW9ucyBpcyBpbXBvcnRhbnQgLS0gZG9uJ3QgY2hhbmdlIGl0ICovCi0gICAgICAgIHUzMiBjc3VtcHU7ICAgICAvKiBjc3VtX3BhcmFtIHVwcGVyIHdvcmQgKi8KLSAgICAgICAgdTMyIGNzdW1wbDsgICAgIC8qIGNzdW1fcGFyYW0gbG93ZXIgd29yZCAqLwotfTsKLQotdW5pb24gdHBkX2Rlc2NyIHsKLQl1NjQgZGF0YTsKLQlzdHJ1Y3QgY3N1bV9wYXJhbSBjc3VtOwotCXN0cnVjdCB0c29fcGFyYW0gdHNvOwotfTsKLQotc3RydWN0IHR4X3BhY2tldF9kZXNjIHsKLQlfX2xlNjQgYnVmZmVyX2FkZHI7Ci0JdW5pb24gdHBkX2Rlc2NyIGRlc2M7Ci19OwotCi0vKiBETUEgT3JkZXIgU2V0dGluZ3MgKi8KLWVudW0gYXRsMV9kbWFfb3JkZXIgewotCWF0bDFfZG1hX29yZF9pbiA9IDEsCi0JYXRsMV9kbWFfb3JkX2VuaCA9IDIsCi0JYXRsMV9kbWFfb3JkX291dCA9IDQKLX07Ci0KLWVudW0gYXRsMV9kbWFfcmNiIHsKLQlhdGwxX3JjYl82NCA9IDAsCi0JYXRsMV9yY2JfMTI4ID0gMQotfTsKLQotZW51bSBhdGwxX2RtYV9yZXFfYmxvY2sgewotCWF0bDFfZG1hX3JlcV8xMjggPSAwLAotCWF0bDFfZG1hX3JlcV8yNTYgPSAxLAotCWF0bDFfZG1hX3JlcV81MTIgPSAyLAotCWF0bDFfZG1hX3JlcV8xMDI0ID0gMywKLQlhdGwxX2RtYV9yZXFfMjA0OCA9IDQsCi0JYXRsMV9kbWFfcmVxXzQwOTYgPSA1Ci19OwotCi1zdHJ1Y3QgYXRsMV9zcGlfZmxhc2hfZGV2IHsKLQljb25zdCBjaGFyICptYW51X25hbWU7CS8qIG1hbnVmYWN0dXJlciBpZCAqLwotCS8qIG9wLWNvZGUgKi8KLQl1OCBjbWRfd3JzcjsKLQl1OCBjbWRfcmVhZDsKLQl1OCBjbWRfcHJvZ3JhbTsKLQl1OCBjbWRfd3JlbjsKLQl1OCBjbWRfd3JkaTsKLQl1OCBjbWRfcmRzcjsKLQl1OCBjbWRfcmRpZDsKLQl1OCBjbWRfc2VjdG9yX2VyYXNlOwotCXU4IGNtZF9jaGlwX2VyYXNlOwotfTsKLQotI2VuZGlmCS8qIF9BVEwxX0hXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIwMGVlNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA2IEF0dGFuc2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0KGMpIDIwMDYgQ2hyaXMgU25vb2sgPGNzbm9va0ByZWRoYXQuY29tPgotICogQ29weXJpZ2h0KGMpIDIwMDYgSmF5IENsaWJ1cm4gPGpjbGlidXJuQGdtYWlsLmNvbT4KLSAqCi0gKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCi0gKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQotICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBYaW9uZyBIdWFuZyA8eGlvbmdfaHVhbmdAYXR0YW5zaWMuY29tPgotICogQXR0YW5zaWMgVGVjaG5vbG9neSBDb3JwLiAzRiAxNDcsIFhpYW56aGVuZyA5dGggUm9hZCwgWmh1YmVpLAotICogWGluemh1ICAzMDIsIFRBSVdBTiwgUkVQVUJMSUMgT0YgQ0hJTkEKLSAqCi0gKiBDaHJpcyBTbm9vayA8Y3Nub29rQHJlZGhhdC5jb20+Ci0gKiBKYXkgQ2xpYnVybiA8amNsaWJ1cm5AZ21haWwuY29tPgotICoKLSAqIFRoaXMgdmVyc2lvbiBpcyBhZGFwdGVkIGZyb20gdGhlIEF0dGFuc2ljIHJlZmVyZW5jZSBkcml2ZXIgZm9yCi0gKiBpbmNsdXNpb24gaW4gdGhlIExpbnV4IGtlcm5lbC4gIEl0IGlzIGN1cnJlbnRseSB1bmRlciBoZWF2eSBkZXZlbG9wbWVudC4KLSAqIEEgdmVyeSBpbmNvbXBsZXRlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBkZWFsdCB3aXRoOgotICoKLSAqIFRPRE86Ci0gKiBGaXggVFNPOyB0eCBwZXJmb3JtYW5jZSBpcyBob3JyaWJsZSB3aXRoIFRTTyBlbmFibGVkLgotICogV2FrZSBvbiBMQU4uCi0gKiBBZGQgbW9yZSBldGh0b29sIGZ1bmN0aW9ucy4KLSAqIEZpeCBhYnN0cnVzZSBpcnEgZW5hYmxlL2Rpc2FibGUgY29uZGl0aW9uIGRlc2NyaWJlZCBoZXJlOgotICoJaHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1saW51eC1uZXRkZXYmbT0xMTYzOTg1MDg1MDA1NTMmdz0yCi0gKgotICogTkVFRFMgVEVTVElORzoKLSAqIFZMQU4KLSAqIG11bHRpY2FzdAotICogcHJvbWlzY3VvdXMgbW9kZQotICogaW50ZXJydXB0IGNvYWxlc2NpbmcKLSAqIFNNUCB0b3J0dXJlIHRlc3RpbmcKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvdGNwLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotI2luY2x1ZGUgImF0bDEuaCIKLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMi4wLjciCi0KLWNoYXIgYXRsMV9kcml2ZXJfbmFtZVtdID0gImF0bDEiOwotc3RhdGljIGNvbnN0IGNoYXIgYXRsMV9kcml2ZXJfc3RyaW5nW10gPSAiQXR0YW5zaWMgTDEgRXRoZXJuZXQgTmV0d29yayBEcml2ZXIiOwotc3RhdGljIGNvbnN0IGNoYXIgYXRsMV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQoYykgMjAwNS0yMDA2IEF0dGFuc2ljIENvcnBvcmF0aW9uLiI7Ci1jaGFyIGF0bDFfZHJpdmVyX3ZlcnNpb25bXSA9IERSSVZFUl9WRVJTSU9OOwotCi1NT0RVTEVfQVVUSE9SCi0gICAgKCJBdHRhbnNpYyBDb3Jwb3JhdGlvbiA8eGlvbmdfaHVhbmdAYXR0YW5zaWMuY29tPiwgQ2hyaXMgU25vb2sgPGNzbm9va0ByZWRoYXQuY29tPiwgSmF5IENsaWJ1cm4gPGpjbGlidXJuQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQXR0YW5zaWMgMTAwME0gRXRoZXJuZXQgTmV0d29yayBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKLQotLyoKLSAqIGF0bDFfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0bDFfcGNpX3RibFtdID0gewotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDEpfSwKLQkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCi0JezAsfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0bDFfcGNpX3RibCk7Ci0KLS8qCi0gKiBhdGwxX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlcyAoc3RydWN0IGF0bDFfYWRhcHRlcikKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCi0gKgotICogYXRsMV9zd19pbml0IGluaXRpYWxpemVzIHRoZSBBZGFwdGVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCi0gKiBGaWVsZHMgYXJlIGluaXRpYWxpemVkIGJhc2VkIG9uIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gYW5kCi0gKiBPUyBuZXR3b3JrIGRldmljZSBzZXR0aW5ncyAoTVRVIHNpemUpLgotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxX3N3X2luaXQoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQotCWh3LT5tYXhfZnJhbWVfc2l6ZSA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTiArIFZMQU5fSExFTjsKLQlody0+bWluX2ZyYW1lX3NpemUgPSBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOOwotCi0JYWRhcHRlci0+d29sID0gMDsKLQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gKGh3LT5tYXhfZnJhbWVfc2l6ZSArIDcpICYgfjc7Ci0JYWRhcHRlci0+aWN0ID0gNTAwMDA7CS8qIDEwMG1zICovCi0JYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7CS8qIGhhcmR3YXJlIGluaXQgKi8KLQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOwotCi0JaHctPnBoeV9jb25maWd1cmVkID0gZmFsc2U7Ci0JaHctPnByZWFtYmxlX2xlbiA9IDc7Ci0JaHctPmlwZ3QgPSAweDYwOwotCWh3LT5taW5faWZnID0gMHg1MDsKLQlody0+aXBncjEgPSAweDQwOwotCWh3LT5pcGdyMiA9IDB4NjA7Ci0JaHctPm1heF9yZXRyeSA9IDB4ZjsKLQlody0+bGNvbCA9IDB4Mzc7Ci0JaHctPmphbV9pcGcgPSA3OwotCWh3LT5yZmRfYnVyc3QgPSA4OwotCWh3LT5ycmRfYnVyc3QgPSA4OwotCWh3LT5yZmRfZmV0Y2hfZ2FwID0gMTsKLQlody0+cnhfanVtYm9fdGggPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuIC8gODsKLQlody0+cnhfanVtYm9fbGthaCA9IDE7Ci0JaHctPnJyZF9yZXRfdGltZXIgPSAxNjsKLQlody0+dHBkX2J1cnN0ID0gNDsKLQlody0+dHBkX2ZldGNoX3RoID0gMTY7Ci0JaHctPnR4Zl9idXJzdCA9IDB4MTAwOwotCWh3LT50eF9qdW1ib190YXNrX3RoID0gKGh3LT5tYXhfZnJhbWVfc2l6ZSArIDcpID4+IDM7Ci0JaHctPnRwZF9mZXRjaF9nYXAgPSAxOwotCWh3LT5yY2JfdmFsdWUgPSBhdGwxX3JjYl82NDsKLQlody0+ZG1hX29yZCA9IGF0bDFfZG1hX29yZF9lbmg7Ci0JaHctPmRtYXJfYmxvY2sgPSBhdGwxX2RtYV9yZXFfMjU2OwotCWh3LT5kbWF3X2Jsb2NrID0gYXRsMV9kbWFfcmVxXzI1NjsKLQlody0+Y21iX3JyZCA9IDQ7Ci0JaHctPmNtYl90cGQgPSA0OwotCWh3LT5jbWJfcnhfdGltZXIgPSAxOwkvKiBhYm91dCAydXMgKi8KLQlody0+Y21iX3R4X3RpbWVyID0gMTsJLyogYWJvdXQgMnVzICovCi0JaHctPnNtYl90aW1lciA9IDEwMDAwMDsJLyogYWJvdXQgMjAwbXMgKi8KLQotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWJfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IHJlZ19udW0pCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdTE2IHJlc3VsdDsKLQotCWF0bDFfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgcmVnX251bSAmIDB4MWYsICZyZXN1bHQpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnX251bSwKLQlpbnQgdmFsKQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JYXRsMV93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgcmVnX251bSwgdmFsKTsKLX0KLQotLyoKLSAqIGF0bDFfbWlpX2lvY3RsIC0KLSAqIEBuZXRkZXY6Ci0gKiBAaWZyZXE6Ci0gKiBAY21kOgotICovCi1zdGF0aWMgaW50IGF0bDFfbWlpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldHZhbDsKLQotCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0JcmV0dmFsID0gZ2VuZXJpY19taWlfaW9jdGwoJmFkYXB0ZXItPm1paSwgaWZfbWlpKGlmciksIGNtZCwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoKLSAqIGF0bDFfaW9jdGwgLQotICogQG5ldGRldjoKLSAqIEBpZnJlcToKLSAqIEBjbWQ6Ci0gKi8KLXN0YXRpYyBpbnQgYXRsMV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0lPQ0dNSUlQSFk6Ci0JY2FzZSBTSU9DR01JSVJFRzoKLQljYXNlIFNJT0NTTUlJUkVHOgotCQlyZXR1cm4gYXRsMV9taWlfaW9jdGwobmV0ZGV2LCBpZnIsIGNtZCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLX0KLQotLyoKLSAqIGF0bDFfc2V0dXBfbWVtX3Jlc291cmNlcyAtIGFsbG9jYXRlIFR4IC8gUlggZGVzY3JpcHRvciByZXNvdXJjZXMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoKLSAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKLSAqLwotczMyIGF0bDFfc2V0dXBfcmluZ19yZXNvdXJjZXMoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfcmZkX3JpbmcgKnJmZF9yaW5nID0gJmFkYXB0ZXItPnJmZF9yaW5nOwotCXN0cnVjdCBhdGwxX3JyZF9yaW5nICpycmRfcmluZyA9ICZhZGFwdGVyLT5ycmRfcmluZzsKLQlzdHJ1Y3QgYXRsMV9yaW5nX2hlYWRlciAqcmluZ19oZWFkZXIgPSAmYWRhcHRlci0+cmluZ19oZWFkZXI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCWludCBzaXplOwotCXU4IG9mZnNldCA9IDA7Ci0KLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGwxX2J1ZmZlcikgKiAodHBkX3JpbmctPmNvdW50ICsgcmZkX3JpbmctPmNvdW50KTsKLQl0cGRfcmluZy0+YnVmZmVyX2luZm8gPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghdHBkX3JpbmctPmJ1ZmZlcl9pbmZvKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGZhaWxlZCAsIHNpemUgPSBEJWRcbiIsIHNpemUpOwotCQlnb3RvIGVycl9ub21lbTsKLQl9Ci0JcmZkX3JpbmctPmJ1ZmZlcl9pbmZvID0KLQkJKHN0cnVjdCBhdGwxX2J1ZmZlciAqKSh0cGRfcmluZy0+YnVmZmVyX2luZm8gKyB0cGRfcmluZy0+Y291bnQpOwotCi0JLyogcmVhbCByaW5nIERNQSBidWZmZXIKLQkgKiBlYWNoIHJpbmcvYmxvY2sgbWF5IG5lZWQgdXAgdG8gOCBieXRlcyBmb3IgYWxpZ25tZW50LCBoZW5jZSB0aGUKLQkgKiBhZGRpdGlvbmFsIDQwIGJ5dGVzIHRhY2tlZCBvbnRvIHRoZSBlbmQuCi0JICovCi0JcmluZ19oZWFkZXItPnNpemUgPSBzaXplID0KLQkJc2l6ZW9mKHN0cnVjdCB0eF9wYWNrZXRfZGVzYykgKiB0cGRfcmluZy0+Y291bnQKLQkJKyBzaXplb2Yoc3RydWN0IHJ4X2ZyZWVfZGVzYykgKiByZmRfcmluZy0+Y291bnQKLQkJKyBzaXplb2Yoc3RydWN0IHJ4X3JldHVybl9kZXNjKSAqIHJyZF9yaW5nLT5jb3VudAotCQkrIHNpemVvZihzdHJ1Y3QgY29hbHNfbXNnX2Jsb2NrKQotCQkrIHNpemVvZihzdHJ1Y3Qgc3RhdHNfbXNnX2Jsb2NrKQotCQkrIDQwOwotCi0JcmluZ19oZWFkZXItPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCByaW5nX2hlYWRlci0+c2l6ZSwKLQkJJnJpbmdfaGVhZGVyLT5kbWEpOwotCWlmICh1bmxpa2VseSghcmluZ19oZWFkZXItPmRlc2MpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyX25vbWVtOwotCX0KLQotCW1lbXNldChyaW5nX2hlYWRlci0+ZGVzYywgMCwgcmluZ19oZWFkZXItPnNpemUpOwotCi0JLyogaW5pdCBUUEQgcmluZyAqLwotCXRwZF9yaW5nLT5kbWEgPSByaW5nX2hlYWRlci0+ZG1hOwotCW9mZnNldCA9ICh0cGRfcmluZy0+ZG1hICYgMHg3KSA/ICg4IC0gKHJpbmdfaGVhZGVyLT5kbWEgJiAweDcpKSA6IDA7Ci0JdHBkX3JpbmctPmRtYSArPSBvZmZzZXQ7Ci0JdHBkX3JpbmctPmRlc2MgPSAodTggKikgcmluZ19oZWFkZXItPmRlc2MgKyBvZmZzZXQ7Ci0JdHBkX3JpbmctPnNpemUgPSBzaXplb2Yoc3RydWN0IHR4X3BhY2tldF9kZXNjKSAqIHRwZF9yaW5nLT5jb3VudDsKLQotCS8qIGluaXQgUkZEIHJpbmcgKi8KLQlyZmRfcmluZy0+ZG1hID0gdHBkX3JpbmctPmRtYSArIHRwZF9yaW5nLT5zaXplOwotCW9mZnNldCA9IChyZmRfcmluZy0+ZG1hICYgMHg3KSA/ICg4IC0gKHJmZF9yaW5nLT5kbWEgJiAweDcpKSA6IDA7Ci0JcmZkX3JpbmctPmRtYSArPSBvZmZzZXQ7Ci0JcmZkX3JpbmctPmRlc2MgPSAodTggKikgdHBkX3JpbmctPmRlc2MgKyAodHBkX3JpbmctPnNpemUgKyBvZmZzZXQpOwotCXJmZF9yaW5nLT5zaXplID0gc2l6ZW9mKHN0cnVjdCByeF9mcmVlX2Rlc2MpICogcmZkX3JpbmctPmNvdW50OwotCi0KLQkvKiBpbml0IFJSRCByaW5nICovCi0JcnJkX3JpbmctPmRtYSA9IHJmZF9yaW5nLT5kbWEgKyByZmRfcmluZy0+c2l6ZTsKLQlvZmZzZXQgPSAocnJkX3JpbmctPmRtYSAmIDB4NykgPyAoOCAtIChycmRfcmluZy0+ZG1hICYgMHg3KSkgOiAwOwotCXJyZF9yaW5nLT5kbWEgKz0gb2Zmc2V0OwotCXJyZF9yaW5nLT5kZXNjID0gKHU4ICopIHJmZF9yaW5nLT5kZXNjICsgKHJmZF9yaW5nLT5zaXplICsgb2Zmc2V0KTsKLQlycmRfcmluZy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnhfcmV0dXJuX2Rlc2MpICogcnJkX3JpbmctPmNvdW50OwotCi0KLQkvKiBpbml0IENNQiAqLwotCWFkYXB0ZXItPmNtYi5kbWEgPSBycmRfcmluZy0+ZG1hICsgcnJkX3JpbmctPnNpemU7Ci0Jb2Zmc2V0ID0gKGFkYXB0ZXItPmNtYi5kbWEgJiAweDcpID8gKDggLSAoYWRhcHRlci0+Y21iLmRtYSAmIDB4NykpIDogMDsKLQlhZGFwdGVyLT5jbWIuZG1hICs9IG9mZnNldDsKLQlhZGFwdGVyLT5jbWIuY21iID0gKHN0cnVjdCBjb2Fsc19tc2dfYmxvY2sgKikKLQkJKCh1OCAqKSBycmRfcmluZy0+ZGVzYyArIChycmRfcmluZy0+c2l6ZSArIG9mZnNldCkpOwotCi0JLyogaW5pdCBTTUIgKi8KLQlhZGFwdGVyLT5zbWIuZG1hID0gYWRhcHRlci0+Y21iLmRtYSArIHNpemVvZihzdHJ1Y3QgY29hbHNfbXNnX2Jsb2NrKTsKLQlvZmZzZXQgPSAoYWRhcHRlci0+c21iLmRtYSAmIDB4NykgPyAoOCAtIChhZGFwdGVyLT5zbWIuZG1hICYgMHg3KSkgOiAwOwotCWFkYXB0ZXItPnNtYi5kbWEgKz0gb2Zmc2V0OwotCWFkYXB0ZXItPnNtYi5zbWIgPSAoc3RydWN0IHN0YXRzX21zZ19ibG9jayAqKQotCQkoKHU4ICopIGFkYXB0ZXItPmNtYi5jbWIgKwotCQkoc2l6ZW9mKHN0cnVjdCBjb2Fsc19tc2dfYmxvY2spICsgb2Zmc2V0KSk7Ci0KLQlyZXR1cm4gQVRMMV9TVUNDRVNTOwotCi1lcnJfbm9tZW06Ci0Ja2ZyZWUodHBkX3JpbmctPmJ1ZmZlcl9pbmZvKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHZvaWQgYXRsMV9pbml0X3JpbmdfcHRycyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRfcmluZyA9ICZhZGFwdGVyLT50cGRfcmluZzsKLQlzdHJ1Y3QgYXRsMV9yZmRfcmluZyAqcmZkX3JpbmcgPSAmYWRhcHRlci0+cmZkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfcnJkX3JpbmcgKnJyZF9yaW5nID0gJmFkYXB0ZXItPnJyZF9yaW5nOwotCi0JYXRvbWljX3NldCgmdHBkX3JpbmctPm5leHRfdG9fdXNlLCAwKTsKLQlhdG9taWNfc2V0KCZ0cGRfcmluZy0+bmV4dF90b19jbGVhbiwgMCk7Ci0KLQlyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7Ci0JYXRvbWljX3NldCgmcmZkX3JpbmctPm5leHRfdG9fdXNlLCAwKTsKLQotCXJyZF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7Ci0JYXRvbWljX3NldCgmcnJkX3JpbmctPm5leHRfdG9fY2xlYW4sIDApOwotfQotCi0vKgotICogYXRsMV9jbGVhbl9yeF9yaW5nIC0gRnJlZSBSRkQgQnVmZmVycwotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIGF0bDFfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyZmRfcmluZyA9ICZhZGFwdGVyLT5yZmRfcmluZzsKLQlzdHJ1Y3QgYXRsMV9ycmRfcmluZyAqcnJkX3JpbmcgPSAmYWRhcHRlci0+cnJkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyogRnJlZSBhbGwgdGhlIFJ4IHJpbmcgc2tfYnVmZnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmZkX3JpbmctPmNvdW50OyBpKyspIHsKLQkJYnVmZmVyX2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwotCQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JCX0KLQkJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCWRldl9rZnJlZV9za2IoYnVmZmVyX2luZm8tPnNrYik7Ci0JCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKLQkJfQotCX0KLQotCXNpemUgPSBzaXplb2Yoc3RydWN0IGF0bDFfYnVmZmVyKSAqIHJmZF9yaW5nLT5jb3VudDsKLQltZW1zZXQocmZkX3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKLQotCS8qIFplcm8gb3V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KLQltZW1zZXQocmZkX3JpbmctPmRlc2MsIDAsIHJmZF9yaW5nLT5zaXplKTsKLQotCXJmZF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKLQlhdG9taWNfc2V0KCZyZmRfcmluZy0+bmV4dF90b191c2UsIDApOwotCi0JcnJkX3JpbmctPm5leHRfdG9fdXNlID0gMDsKLQlhdG9taWNfc2V0KCZycmRfcmluZy0+bmV4dF90b19jbGVhbiwgMCk7Ci19Ci0KLS8qCi0gKiBhdGwxX2NsZWFuX3R4X3JpbmcgLSBGcmVlIFR4IEJ1ZmZlcnMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICovCi1zdGF0aWMgdm9pZCBhdGwxX2NsZWFuX3R4X3Jpbmcoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyogRnJlZSBhbGwgdGhlIFR4IHJpbmcgc2tfYnVmZnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgdHBkX3JpbmctPmNvdW50OyBpKyspIHsKLQkJYnVmZmVyX2luZm8gPSAmdHBkX3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwotCQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHRwZF9yaW5nLT5jb3VudDsgaSsrKSB7Ci0JCWJ1ZmZlcl9pbmZvID0gJnRwZF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKLQkJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOwotCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGwxX2J1ZmZlcikgKiB0cGRfcmluZy0+Y291bnQ7Ci0JbWVtc2V0KHRwZF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7Ci0KLQkvKiBaZXJvIG91dCB0aGUgZGVzY3JpcHRvciByaW5nICovCi0JbWVtc2V0KHRwZF9yaW5nLT5kZXNjLCAwLCB0cGRfcmluZy0+c2l6ZSk7Ci0KLQlhdG9taWNfc2V0KCZ0cGRfcmluZy0+bmV4dF90b191c2UsIDApOwotCWF0b21pY19zZXQoJnRwZF9yaW5nLT5uZXh0X3RvX2NsZWFuLCAwKTsKLX0KLQotLyoKLSAqIGF0bDFfZnJlZV9yaW5nX3Jlc291cmNlcyAtIEZyZWUgVHggLyBSWCBkZXNjcmlwdG9yIFJlc291cmNlcwotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCi0gKgotICogRnJlZSBhbGwgdHJhbnNtaXQgc29mdHdhcmUgcmVzb3VyY2VzCi0gKi8KLXZvaWQgYXRsMV9mcmVlX3JpbmdfcmVzb3VyY2VzKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCXN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRfcmluZyA9ICZhZGFwdGVyLT50cGRfcmluZzsKLQlzdHJ1Y3QgYXRsMV9yZmRfcmluZyAqcmZkX3JpbmcgPSAmYWRhcHRlci0+cmZkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfcnJkX3JpbmcgKnJyZF9yaW5nID0gJmFkYXB0ZXItPnJyZF9yaW5nOwotCXN0cnVjdCBhdGwxX3JpbmdfaGVhZGVyICpyaW5nX2hlYWRlciA9ICZhZGFwdGVyLT5yaW5nX2hlYWRlcjsKLQotCWF0bDFfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKLQlhdGwxX2NsZWFuX3J4X3JpbmcoYWRhcHRlcik7Ci0KLQlrZnJlZSh0cGRfcmluZy0+YnVmZmVyX2luZm8pOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgcmluZ19oZWFkZXItPnNpemUsIHJpbmdfaGVhZGVyLT5kZXNjLAotCQlyaW5nX2hlYWRlci0+ZG1hKTsKLQotCXRwZF9yaW5nLT5idWZmZXJfaW5mbyA9IE5VTEw7Ci0JdHBkX3JpbmctPmRlc2MgPSBOVUxMOwotCXRwZF9yaW5nLT5kbWEgPSAwOwotCi0JcmZkX3JpbmctPmJ1ZmZlcl9pbmZvID0gTlVMTDsKLQlyZmRfcmluZy0+ZGVzYyA9IE5VTEw7Ci0JcmZkX3JpbmctPmRtYSA9IDA7Ci0KLQlycmRfcmluZy0+ZGVzYyA9IE5VTEw7Ci0JcnJkX3JpbmctPmRtYSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0bDFfc2V0dXBfbWFjX2N0cmwoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JLyogQ29uZmlnIE1BQyBDVFJMIFJlZ2lzdGVyICovCi0JdmFsdWUgPSBNQUNfQ1RSTF9UWF9FTiB8IE1BQ19DVFJMX1JYX0VOOwotCS8qIGR1cGxleCAqLwotCWlmIChGVUxMX0RVUExFWCA9PSBhZGFwdGVyLT5saW5rX2R1cGxleCkKLQkJdmFsdWUgfD0gTUFDX0NUUkxfRFVQTFg7Ci0JLyogc3BlZWQgKi8KLQl2YWx1ZSB8PSAoKHUzMikgKChTUEVFRF8xMDAwID09IGFkYXB0ZXItPmxpbmtfc3BlZWQpID8KLQkJCSBNQUNfQ1RSTF9TUEVFRF8xMDAwIDogTUFDX0NUUkxfU1BFRURfMTBfMTAwKSA8PAotCQkgIE1BQ19DVFJMX1NQRUVEX1NISUZUKTsKLQkvKiBmbG93IGNvbnRyb2wgKi8KLQl2YWx1ZSB8PSAoTUFDX0NUUkxfVFhfRkxPVyB8IE1BQ19DVFJMX1JYX0ZMT1cpOwotCS8qIFBBRCAmIENSQyAqLwotCXZhbHVlIHw9IChNQUNfQ1RSTF9BRERfQ1JDIHwgTUFDX0NUUkxfUEFEKTsKLQkvKiBwcmVhbWJsZSBsZW5ndGggKi8KLQl2YWx1ZSB8PSAoKCh1MzIpIGFkYXB0ZXItPmh3LnByZWFtYmxlX2xlbgotCQkgICAmIE1BQ19DVFJMX1BSTUxFTl9NQVNLKSA8PCBNQUNfQ1RSTF9QUk1MRU5fU0hJRlQpOwotCS8qIHZsYW4gKi8KLQlpZiAoYWRhcHRlci0+dmxncnApCi0JCXZhbHVlIHw9IE1BQ19DVFJMX1JNVl9WTEFOOwotCS8qIHJ4IGNoZWNrc3VtCi0JICAgaWYgKGFkYXB0ZXItPnJ4X2NzdW0pCi0JICAgdmFsdWUgfD0gTUFDX0NUUkxfUlhfQ0hLU1VNX0VOOwotCSAqLwotCS8qIGZpbHRlciBtb2RlICovCi0JdmFsdWUgfD0gTUFDX0NUUkxfQkNfRU47Ci0JaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJdmFsdWUgfD0gTUFDX0NUUkxfUFJPTUlTX0VOOwotCWVsc2UgaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCi0JCXZhbHVlIHw9IE1BQ19DVFJMX01DX0FMTF9FTjsKLQkvKiB2YWx1ZSB8PSBNQUNfQ1RSTF9MT09QQkFDSzsgKi8KLQlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX01BQ19DVFJMKTsKLX0KLQotLyoKLSAqIGF0bDFfc2V0X21hYyAtIENoYW5nZSB0aGUgRXRoZXJuZXQgQWRkcmVzcyBvZiB0aGUgTklDCi0gKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcDogcG9pbnRlciB0byBhbiBhZGRyZXNzIHN0cnVjdHVyZQotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQgYXRsMV9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCi0JCXJldHVybiAtRUFERFJOT1RBVkFJTDsKLQotCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKLQltZW1jcHkoYWRhcHRlci0+aHcubWFjX2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCi0JYXRsMV9zZXRfbWFjX2FkZHIoJmFkYXB0ZXItPmh3KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBhdGwxX2NoZWNrX2xpbmsoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1MzIgcmV0X3ZhbDsKLQl1MTYgc3BlZWQsIGR1cGxleCwgcGh5X2RhdGE7Ci0JaW50IHJlY29uZmlnID0gMDsKLQotCS8qIE1JSV9CTVNSIG11c3QgcmVhZCB0d2ljZSAqLwotCWF0bDFfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKLQlhdGwxX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICZwaHlfZGF0YSk7Ci0JaWYgKCEocGh5X2RhdGEgJiBCTVNSX0xTVEFUVVMpKSB7CS8qIGxpbmsgZG93biAqLwotCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CS8qIG9sZCBsaW5rIHN0YXRlOiBVcCAqLwotCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgImxpbmsgaXMgZG93blxuIik7Ci0JCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gU1BFRURfMDsKLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JCX0KLQkJcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLQl9Ci0KLQkvKiBMaW5rIFVwICovCi0JcmV0X3ZhbCA9IGF0bDFfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoaHcsICZzcGVlZCwgJmR1cGxleCk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCi0Jc3dpdGNoIChody0+bWVkaWFfdHlwZSkgewotCWNhc2UgTUVESUFfVFlQRV8xMDAwTV9GVUxMOgotCQlpZiAoc3BlZWQgIT0gU1BFRURfMTAwMCB8fCBkdXBsZXggIT0gRlVMTF9EVVBMRVgpCi0JCQlyZWNvbmZpZyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgTUVESUFfVFlQRV8xMDBNX0ZVTEw6Ci0JCWlmIChzcGVlZCAhPSBTUEVFRF8xMDAgfHwgZHVwbGV4ICE9IEZVTExfRFVQTEVYKQotCQkJcmVjb25maWcgPSAxOwotCQlicmVhazsKLQljYXNlIE1FRElBX1RZUEVfMTAwTV9IQUxGOgotCQlpZiAoc3BlZWQgIT0gU1BFRURfMTAwIHx8IGR1cGxleCAhPSBIQUxGX0RVUExFWCkKLQkJCXJlY29uZmlnID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBNRURJQV9UWVBFXzEwTV9GVUxMOgotCQlpZiAoc3BlZWQgIT0gU1BFRURfMTAgfHwgZHVwbGV4ICE9IEZVTExfRFVQTEVYKQotCQkJcmVjb25maWcgPSAxOwotCQlicmVhazsKLQljYXNlIE1FRElBX1RZUEVfMTBNX0hBTEY6Ci0JCWlmIChzcGVlZCAhPSBTUEVFRF8xMCB8fCBkdXBsZXggIT0gSEFMRl9EVVBMRVgpCi0JCQlyZWNvbmZpZyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCS8qIGxpbmsgcmVzdWx0IGlzIG91ciBzZXR0aW5nICovCi0JaWYgKCFyZWNvbmZpZykgewotCQlpZiAoYWRhcHRlci0+bGlua19zcGVlZCAhPSBzcGVlZAotCQkgICAgfHwgYWRhcHRlci0+bGlua19kdXBsZXggIT0gZHVwbGV4KSB7Ci0JCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gc3BlZWQ7Ci0JCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IGR1cGxleDsKLQkJCWF0bDFfc2V0dXBfbWFjX2N0cmwoYWRhcHRlcik7Ci0JCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCSIlcyBsaW5rIGlzIHVwICVkIE1icHMgJXNcbiIsCi0JCQkJbmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5saW5rX3NwZWVkLAotCQkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYID8KLQkJCQkiZnVsbCBkdXBsZXgiIDogImhhbGYgZHVwbGV4Iik7Ci0JCX0KLQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsJLyogTGluayBkb3duIC0+IFVwICovCi0JCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0JCX0KLQkJcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLQl9Ci0KLQkvKiBjaGFuZ2Ugb3JpZ25hbCBsaW5rIHN0YXR1cyAqLwotCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQl9Ci0KLQlpZiAoaHctPm1lZGlhX3R5cGUgIT0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUiAmJgotCSAgICBody0+bWVkaWFfdHlwZSAhPSBNRURJQV9UWVBFXzEwMDBNX0ZVTEwpIHsKLQkJc3dpdGNoIChody0+bWVkaWFfdHlwZSkgewotCQljYXNlIE1FRElBX1RZUEVfMTAwTV9GVUxMOgotCQkJcGh5X2RhdGEgPSBNSUlfQ1JfRlVMTF9EVVBMRVggfCBNSUlfQ1JfU1BFRURfMTAwIHwKLQkJCSAgICAgICAgICAgTUlJX0NSX1JFU0VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUVESUFfVFlQRV8xMDBNX0hBTEY6Ci0JCQlwaHlfZGF0YSA9IE1JSV9DUl9TUEVFRF8xMDAgfCBNSUlfQ1JfUkVTRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBNRURJQV9UWVBFXzEwTV9GVUxMOgotCQkJcGh5X2RhdGEgPQotCQkJICAgIE1JSV9DUl9GVUxMX0RVUExFWCB8IE1JSV9DUl9TUEVFRF8xMCB8IE1JSV9DUl9SRVNFVDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgkvKiBNRURJQV9UWVBFXzEwTV9IQUxGOiAqLwotCQkJcGh5X2RhdGEgPSBNSUlfQ1JfU1BFRURfMTAgfCBNSUlfQ1JfUkVTRVQ7Ci0JCQlicmVhazsKLQkJfQotCQlhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9CTUNSLCBwaHlfZGF0YSk7Ci0JCXJldHVybiBBVEwxX1NVQ0NFU1M7Ci0JfQotCi0JLyogYXV0by1uZWcsIGluc2VydCB0aW1lciB0byByZS1jb25maWcgcGh5ICovCi0JaWYgKCFhZGFwdGVyLT5waHlfdGltZXJfcGVuZGluZykgewotCQlhZGFwdGVyLT5waHlfdGltZXJfcGVuZGluZyA9IHRydWU7Ci0JCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2NvbmZpZ190aW1lciwgamlmZmllcyArIDMgKiBIWik7Ci0JfQotCi0JcmV0dXJuIEFUTDFfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQgYXRsMV9jaGVja19mb3JfbGluayhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTE2IHBoeV9kYXRhID0gMDsKLQotCXNwaW5fbG9jaygmYWRhcHRlci0+bG9jayk7Ci0JYWRhcHRlci0+cGh5X3RpbWVyX3BlbmRpbmcgPSBmYWxzZTsKLQlhdGwxX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOwotCWF0bDFfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgTUlJX0JNU1IsICZwaHlfZGF0YSk7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPmxvY2spOwotCi0JLyogbm90aWZ5IHVwcGVyIGxheWVyIGxpbmsgZG93biBBU0FQICovCi0JaWYgKCEocGh5X2RhdGEgJiBCTVNSX0xTVEFUVVMpKSB7CS8qIExpbmsgRG93biAqLwotCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CS8qIG9sZCBsaW5rIHN0YXRlOiBVcCAqLwotCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzIGxpbmsgaXMgZG93blxuIiwKLQkJCQluZXRkZXYtPm5hbWUpOwotCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7Ci0JCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCQl9Ci0JfQotCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmxpbmtfY2hnX3Rhc2spOwotfQotCi0vKgotICogYXRsMV9zZXRfbXVsdGkgLSBNdWx0aWNhc3QgYW5kIFByb21pc2N1b3VzIG1vZGUgc2V0Ci0gKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogVGhlIHNldF9tdWx0aSBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzCi0gKiBsaXN0IG9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmbGFncyBhcmUgdXBkYXRlZC4gIFRoaXMgcm91dGluZSBpcwotICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIG11bHRpY2FzdCwKLSAqIHByb21pc2N1b3VzIG1vZGUsIGFuZCBhbGwtbXVsdGkgYmVoYXZpb3IuCi0gKi8KLXN0YXRpYyB2b2lkIGF0bDFfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwotCXUzMiByY3RsOwotCXUzMiBoYXNoX3ZhbHVlOwotCi0JLyogQ2hlY2sgZm9yIFByb21pc2N1b3VzIGFuZCBBbGwgTXVsdGljYXN0IG1vZGVzICovCi0JcmN0bCA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX01BQ19DVFJMKTsKLQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotCQlyY3RsIHw9IE1BQ19DVFJMX1BST01JU19FTjsKLQllbHNlIGlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCXJjdGwgfD0gTUFDX0NUUkxfTUNfQUxMX0VOOwotCQlyY3RsICY9IH5NQUNfQ1RSTF9QUk9NSVNfRU47Ci0JfSBlbHNlCi0JCXJjdGwgJj0gfihNQUNfQ1RSTF9QUk9NSVNfRU4gfCBNQUNfQ1RSTF9NQ19BTExfRU4pOwotCi0JaW93cml0ZTMyKHJjdGwsIGh3LT5od19hZGRyICsgUkVHX01BQ19DVFJMKTsKLQotCS8qIGNsZWFyIHRoZSBvbGQgc2V0dGluZ3MgZnJvbSB0aGUgbXVsdGljYXN0IGhhc2ggdGFibGUgKi8KLQlpb3dyaXRlMzIoMCwgaHctPmh3X2FkZHIgKyBSRUdfUlhfSEFTSF9UQUJMRSk7Ci0JaW93cml0ZTMyKDAsIChody0+aHdfYWRkciArIFJFR19SWF9IQVNIX1RBQkxFKSArICgxIDw8IDIpKTsKLQotCS8qIGNvbXB1dGUgbWMgYWRkcmVzc2VzJyBoYXNoIHZhbHVlICxhbmQgcHV0IGl0IGludG8gaGFzaCB0YWJsZSAqLwotCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7IG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgewotCQloYXNoX3ZhbHVlID0gYXRsMV9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOwotCQlhdGwxX2hhc2hfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKLQl9Ci19Ci0KLS8qCi0gKiBhdGwxX2NoYW5nZV9tdHUgLSBDaGFuZ2UgdGhlIE1heGltdW0gVHJhbnNmZXIgVW5pdAotICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQotICogQG5ld19tdHU6IG5ldyB2YWx1ZSBmb3IgbWF4aW11bSBmcmFtZSBzaXplCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludCBhdGwxX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IG9sZF9tdHUgPSBuZXRkZXYtPm10dTsKLQlpbnQgbWF4X2ZyYW1lID0gbmV3X210dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU47Ci0KLQlpZiAoKG1heF9mcmFtZSA8IEVUSF9aTEVOICsgRVRIX0ZDU19MRU4pIHx8Ci0JICAgIChtYXhfZnJhbWUgPiBNQVhfSlVNQk9fRlJBTUVfU0laRSkpIHsKLQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgImludmFsaWQgTVRVIHNldHRpbmdcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKLQlhZGFwdGVyLT5ody50eF9qdW1ib190YXNrX3RoID0gKG1heF9mcmFtZSArIDcpID4+IDM7Ci0JYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IChtYXhfZnJhbWUgKyA3KSAmIH43OwotCWFkYXB0ZXItPmh3LnJ4X2p1bWJvX3RoID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbiAvIDg7Ci0KLQluZXRkZXYtPm10dSA9IG5ld19tdHU7Ci0JaWYgKChvbGRfbXR1ICE9IG5ld19tdHUpICYmIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlhdGwxX2Rvd24oYWRhcHRlcik7Ci0JCWF0bDFfdXAoYWRhcHRlcik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9mbG93X2N0cmxfb2xkKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdTMyIGhpLCBsbywgdmFsdWU7Ci0KLQkvKiBSRkQgRmxvdyBDb250cm9sICovCi0JdmFsdWUgPSBhZGFwdGVyLT5yZmRfcmluZy5jb3VudDsKLQloaSA9IHZhbHVlIC8gMTY7Ci0JaWYgKGhpIDwgMikKLQkJaGkgPSAyOwotCWxvID0gdmFsdWUgKiA3IC8gODsKLQotCXZhbHVlID0gKChoaSAmIFJYUV9SWEZfUEFVU0VfVEhfSElfTUFTSykgPDwgUlhRX1JYRl9QQVVTRV9USF9ISV9TSElGVCkgfAotCQkoKGxvICYgUlhRX1JYRl9QQVVTRV9USF9MT19NQVNLKSA8PCBSWFFfUlhGX1BBVVNFX1RIX0xPX1NISUZUKTsKLQlpb3dyaXRlMzIodmFsdWUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfUlhRX1JYRl9QQVVTRV9USFJFU0gpOwotCi0JLyogUlJEIEZsb3cgQ29udHJvbCAqLwotCXZhbHVlID0gYWRhcHRlci0+cnJkX3JpbmcuY291bnQ7Ci0JbG8gPSB2YWx1ZSAvIDE2OwotCWhpID0gdmFsdWUgKiA3IC8gODsKLQlpZiAobG8gPCAyKQotCQlsbyA9IDI7Ci0JdmFsdWUgPSAoKGhpICYgUlhRX1JSRF9QQVVTRV9USF9ISV9NQVNLKSA8PCBSWFFfUlJEX1BBVVNFX1RIX0hJX1NISUZUKSB8Ci0JCSgobG8gJiBSWFFfUlJEX1BBVVNFX1RIX0xPX01BU0spIDw8IFJYUV9SUkRfUEFVU0VfVEhfTE9fU0hJRlQpOwotCWlvd3JpdGUzMih2YWx1ZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19SWFFfUlJEX1BBVVNFX1RIUkVTSCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9mbG93X2N0cmxfbmV3KHN0cnVjdCBhdGwxX2h3ICpodykKLXsKLQl1MzIgaGksIGxvLCB2YWx1ZTsKLQotCS8qIFJYRiBGbG93IENvbnRyb2wgKi8KLQl2YWx1ZSA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1NSQU1fUlhGX0xFTik7Ci0JbG8gPSB2YWx1ZSAvIDE2OwotCWlmIChsbyA8IDE5MikKLQkJbG8gPSAxOTI7Ci0JaGkgPSB2YWx1ZSAqIDcgLyA4OwotCWlmIChoaSA8IGxvKQotCQloaSA9IGxvICsgMTY7Ci0JdmFsdWUgPSAoKGhpICYgUlhRX1JYRl9QQVVTRV9USF9ISV9NQVNLKSA8PCBSWFFfUlhGX1BBVVNFX1RIX0hJX1NISUZUKSB8Ci0JCSgobG8gJiBSWFFfUlhGX1BBVVNFX1RIX0xPX01BU0spIDw8IFJYUV9SWEZfUEFVU0VfVEhfTE9fU0hJRlQpOwotCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfUlhRX1JYRl9QQVVTRV9USFJFU0gpOwotCi0JLyogUlJEIEZsb3cgQ29udHJvbCAqLwotCXZhbHVlID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfU1JBTV9SUkRfTEVOKTsKLQlsbyA9IHZhbHVlIC8gODsKLQloaSA9IHZhbHVlICogNyAvIDg7Ci0JaWYgKGxvIDwgMikKLQkJbG8gPSAyOwotCWlmIChoaSA8IGxvKQotCQloaSA9IGxvICsgMzsKLQl2YWx1ZSA9ICgoaGkgJiBSWFFfUlJEX1BBVVNFX1RIX0hJX01BU0spIDw8IFJYUV9SUkRfUEFVU0VfVEhfSElfU0hJRlQpIHwKLQkJKChsbyAmIFJYUV9SUkRfUEFVU0VfVEhfTE9fTUFTSykgPDwgUlhRX1JSRF9QQVVTRV9USF9MT19TSElGVCk7Ci0JaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19SWFFfUlJEX1BBVVNFX1RIUkVTSCk7Ci19Ci0KLS8qCi0gKiBhdGwxX2NvbmZpZ3VyZSAtIENvbmZpZ3VyZSBUcmFuc21pdCZSZWNlaXZlIFVuaXQgYWZ0ZXIgUmVzZXQKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoKLSAqIENvbmZpZ3VyZSB0aGUgVHggL1J4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgotICovCi1zdGF0aWMgdTMyIGF0bDFfY29uZmlndXJlKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiB2YWx1ZTsKLQotCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KLQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JU1IpOwotCi0JLyogc2V0IE1BQyBBZGRyZXNzICovCi0JdmFsdWUgPSAoKCh1MzIpIGh3LT5tYWNfYWRkclsyXSkgPDwgMjQpIHwKLQkJKCgodTMyKSBody0+bWFjX2FkZHJbM10pIDw8IDE2KSB8Ci0JCSgoKHUzMikgaHctPm1hY19hZGRyWzRdKSA8PCA4KSB8Ci0JCSgoKHUzMikgaHctPm1hY19hZGRyWzVdKSk7Ci0JaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19NQUNfU1RBX0FERFIpOwotCXZhbHVlID0gKCgodTMyKSBody0+bWFjX2FkZHJbMF0pIDw8IDgpIHwgKCgodTMyKSBody0+bWFjX2FkZHJbMV0pKTsKLQlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgKFJFR19NQUNfU1RBX0FERFIgKyA0KSk7Ci0KLQkvKiB0eCAvIHJ4IHJpbmcgKi8KLQotCS8qIEhJIGJhc2UgYWRkcmVzcyAqLwotCWlvd3JpdGUzMigodTMyKSAoKGFkYXB0ZXItPnRwZF9yaW5nLmRtYSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgPj4gMzIpLAotCQlody0+aHdfYWRkciArIFJFR19ERVNDX0JBU0VfQUREUl9ISSk7Ci0JLyogTE8gYmFzZSBhZGRyZXNzICovCi0JaW93cml0ZTMyKCh1MzIpIChhZGFwdGVyLT5yZmRfcmluZy5kbWEgJiAweDAwMDAwMDAwZmZmZmZmZmZVTEwpLAotCQlody0+aHdfYWRkciArIFJFR19ERVNDX1JGRF9BRERSX0xPKTsKLQlpb3dyaXRlMzIoKHUzMikgKGFkYXB0ZXItPnJyZF9yaW5nLmRtYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCksCi0JCWh3LT5od19hZGRyICsgUkVHX0RFU0NfUlJEX0FERFJfTE8pOwotCWlvd3JpdGUzMigodTMyKSAoYWRhcHRlci0+dHBkX3JpbmcuZG1hICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSwKLQkJaHctPmh3X2FkZHIgKyBSRUdfREVTQ19UUERfQUREUl9MTyk7Ci0JaW93cml0ZTMyKCh1MzIpIChhZGFwdGVyLT5jbWIuZG1hICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSwKLQkJaHctPmh3X2FkZHIgKyBSRUdfREVTQ19DTUJfQUREUl9MTyk7Ci0JaW93cml0ZTMyKCh1MzIpIChhZGFwdGVyLT5zbWIuZG1hICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSwKLQkJaHctPmh3X2FkZHIgKyBSRUdfREVTQ19TTUJfQUREUl9MTyk7Ci0KLQkvKiBlbGVtZW50IGNvdW50ICovCi0JdmFsdWUgPSBhZGFwdGVyLT5ycmRfcmluZy5jb3VudDsKLQl2YWx1ZSA8PD0gMTY7Ci0JdmFsdWUgKz0gYWRhcHRlci0+cmZkX3JpbmcuY291bnQ7Ci0JaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19ERVNDX1JGRF9SUkRfUklOR19TSVpFKTsKLQlpb3dyaXRlMzIoYWRhcHRlci0+dHBkX3JpbmcuY291bnQsIGh3LT5od19hZGRyICsKLQkJUkVHX0RFU0NfVFBEX1JJTkdfU0laRSk7Ci0KLQkvKiBMb2FkIFB0ciAqLwotCWlvd3JpdGUzMigxLCBody0+aHdfYWRkciArIFJFR19MT0FEX1BUUik7Ci0KLQkvKiBjb25maWcgTWFpbGJveCAqLwotCXZhbHVlID0gKChhdG9taWNfcmVhZCgmYWRhcHRlci0+dHBkX3JpbmcubmV4dF90b191c2UpCi0JCSAgJiBNQl9UUERfUFJPRF9JTkRYX01BU0spIDw8IE1CX1RQRF9QUk9EX0lORFhfU0hJRlQpIHwKLQkJKChhdG9taWNfcmVhZCgmYWRhcHRlci0+cnJkX3JpbmcubmV4dF90b19jbGVhbikKLQkJJiBNQl9SUkRfQ09OU19JTkRYX01BU0spIDw8IE1CX1JSRF9DT05TX0lORFhfU0hJRlQpIHwKLQkJKChhdG9taWNfcmVhZCgmYWRhcHRlci0+cmZkX3JpbmcubmV4dF90b191c2UpCi0JCSYgTUJfUkZEX1BST0RfSU5EWF9NQVNLKSA8PCBNQl9SRkRfUFJPRF9JTkRYX1NISUZUKTsKLQlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX01BSUxCT1gpOwotCi0JLyogY29uZmlnIElQRy9JRkcgKi8KLQl2YWx1ZSA9ICgoKHUzMikgaHctPmlwZ3QgJiBNQUNfSVBHX0lGR19JUEdUX01BU0spCi0JCSA8PCBNQUNfSVBHX0lGR19JUEdUX1NISUZUKSB8Ci0JCSgoKHUzMikgaHctPm1pbl9pZmcgJiBNQUNfSVBHX0lGR19NSUZHX01BU0spCi0JCTw8IE1BQ19JUEdfSUZHX01JRkdfU0hJRlQpIHwKLQkJKCgodTMyKSBody0+aXBncjEgJiBNQUNfSVBHX0lGR19JUEdSMV9NQVNLKQotCQk8PCBNQUNfSVBHX0lGR19JUEdSMV9TSElGVCkgfAotCQkoKCh1MzIpIGh3LT5pcGdyMiAmIE1BQ19JUEdfSUZHX0lQR1IyX01BU0spCi0JCTw8IE1BQ19JUEdfSUZHX0lQR1IyX1NISUZUKTsKLQlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX01BQ19JUEdfSUZHKTsKLQotCS8qIGNvbmZpZyAgSGFsZi1EdXBsZXggQ29udHJvbCAqLwotCXZhbHVlID0gKCh1MzIpIGh3LT5sY29sICYgTUFDX0hBTEZfRFVQTFhfQ1RSTF9MQ09MX01BU0spIHwKLQkJKCgodTMyKSBody0+bWF4X3JldHJ5ICYgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9NQVNLKQotCQk8PCBNQUNfSEFMRl9EVVBMWF9DVFJMX1JFVFJZX1NISUZUKSB8Ci0JCU1BQ19IQUxGX0RVUExYX0NUUkxfRVhDX0RFRl9FTiB8Ci0JCSgweGEgPDwgTUFDX0hBTEZfRFVQTFhfQ1RSTF9BQkVCVF9TSElGVCkgfAotCQkoKCh1MzIpIGh3LT5qYW1faXBnICYgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfTUFTSykKLQkJPDwgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfU0hJRlQpOwotCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfTUFDX0hBTEZfRFVQTFhfQ1RSTCk7Ci0KLQkvKiBzZXQgSW50ZXJydXB0IE1vZGVyYXRvciBUaW1lciAqLwotCWlvd3JpdGUxNihhZGFwdGVyLT5pbXQsIGh3LT5od19hZGRyICsgUkVHX0lSUV9NT0RVX1RJTUVSX0lOSVQpOwotCWlvd3JpdGUzMihNQVNURVJfQ1RSTF9JVElNRVJfRU4sIGh3LT5od19hZGRyICsgUkVHX01BU1RFUl9DVFJMKTsKLQotCS8qIHNldCBJbnRlcnJ1cHQgQ2xlYXIgVGltZXIgKi8KLQlpb3dyaXRlMTYoYWRhcHRlci0+aWN0LCBody0+aHdfYWRkciArIFJFR19DTUJESVNETUFfVElNRVIpOwotCi0JLyogc2V0IG1heCBmcmFtZSBzaXplIGh3IHdpbGwgYWNjZXB0ICovCi0JaW93cml0ZTMyKGh3LT5tYXhfZnJhbWVfc2l6ZSwgaHctPmh3X2FkZHIgKyBSRUdfTVRVKTsKLQotCS8qIGp1bWJvIHNpemUgJiBycmQgcmV0aXJlbWVudCB0aW1lciAqLwotCXZhbHVlID0gKCgodTMyKSBody0+cnhfanVtYm9fdGggJiBSWFFfSk1CT1NaX1RIX01BU0spCi0JCSA8PCBSWFFfSk1CT1NaX1RIX1NISUZUKSB8Ci0JCSgoKHUzMikgaHctPnJ4X2p1bWJvX2xrYWggJiBSWFFfSk1CT19MS0FIX01BU0spCi0JCTw8IFJYUV9KTUJPX0xLQUhfU0hJRlQpIHwKLQkJKCgodTMyKSBody0+cnJkX3JldF90aW1lciAmIFJYUV9SUkRfVElNRVJfTUFTSykKLQkJPDwgUlhRX1JSRF9USU1FUl9TSElGVCk7Ci0JaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19SWFFfSk1CT1NaX1JSRFRJTSk7Ci0KLQkvKiBGbG93IENvbnRyb2wgKi8KLQlzd2l0Y2ggKGh3LT5kZXZfcmV2KSB7Ci0JY2FzZSAweDgwMDE6Ci0JY2FzZSAweDkwMDE6Ci0JY2FzZSAweDkwMDI6Ci0JY2FzZSAweDkwMDM6Ci0JCXNldF9mbG93X2N0cmxfb2xkKGFkYXB0ZXIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzZXRfZmxvd19jdHJsX25ldyhodyk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIGNvbmZpZyBUWFEgKi8KLQl2YWx1ZSA9ICgoKHUzMikgaHctPnRwZF9idXJzdCAmIFRYUV9DVFJMX1RQRF9CVVJTVF9OVU1fTUFTSykKLQkJIDw8IFRYUV9DVFJMX1RQRF9CVVJTVF9OVU1fU0hJRlQpIHwKLQkJKCgodTMyKSBody0+dHhmX2J1cnN0ICYgVFhRX0NUUkxfVFhGX0JVUlNUX05VTV9NQVNLKQotCQk8PCBUWFFfQ1RSTF9UWEZfQlVSU1RfTlVNX1NISUZUKSB8Ci0JCSgoKHUzMikgaHctPnRwZF9mZXRjaF90aCAmIFRYUV9DVFJMX1RQRF9GRVRDSF9USF9NQVNLKQotCQk8PCBUWFFfQ1RSTF9UUERfRkVUQ0hfVEhfU0hJRlQpIHwgVFhRX0NUUkxfRU5IX01PREUgfAotCQlUWFFfQ1RSTF9FTjsKLQlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX1RYUV9DVFJMKTsKLQotCS8qIG1pbiB0cGQgZmV0Y2ggZ2FwICYgdHgganVtYm8gcGFja2V0IHNpemUgdGhyZXNob2xkIGZvciB0YXNrb2ZmbG9hZCAqLwotCXZhbHVlID0gKCgodTMyKSBody0+dHhfanVtYm9fdGFza190aCAmIFRYX0pVTUJPX1RBU0tfVEhfTUFTSykKLQkJPDwgVFhfSlVNQk9fVEFTS19USF9TSElGVCkgfAotCQkoKCh1MzIpIGh3LT50cGRfZmV0Y2hfZ2FwICYgVFhfVFBEX01JTl9JUEdfTUFTSykKLQkJPDwgVFhfVFBEX01JTl9JUEdfU0hJRlQpOwotCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfVFhfSlVNQk9fVEFTS19USF9UUERfSVBHKTsKLQotCS8qIGNvbmZpZyBSWFEgKi8KLQl2YWx1ZSA9ICgoKHUzMikgaHctPnJmZF9idXJzdCAmIFJYUV9DVFJMX1JGRF9CVVJTVF9OVU1fTUFTSykKLQkJPDwgUlhRX0NUUkxfUkZEX0JVUlNUX05VTV9TSElGVCkgfAotCQkoKCh1MzIpIGh3LT5ycmRfYnVyc3QgJiBSWFFfQ1RSTF9SUkRfQlVSU1RfVEhSRVNIX01BU0spCi0JCTw8IFJYUV9DVFJMX1JSRF9CVVJTVF9USFJFU0hfU0hJRlQpIHwKLQkJKCgodTMyKSBody0+cmZkX2ZldGNoX2dhcCAmIFJYUV9DVFJMX1JGRF9QUkVGX01JTl9JUEdfTUFTSykKLQkJPDwgUlhRX0NUUkxfUkZEX1BSRUZfTUlOX0lQR19TSElGVCkgfCBSWFFfQ1RSTF9DVVRfVEhSVV9FTiB8Ci0JCVJYUV9DVFJMX0VOOwotCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfUlhRX0NUUkwpOwotCi0JLyogY29uZmlnIERNQSBFbmdpbmUgKi8KLQl2YWx1ZSA9ICgoKCh1MzIpIGh3LT5kbWFyX2Jsb2NrKSAmIERNQV9DVFJMX0RNQVJfQlVSU1RfTEVOX01BU0spCi0JCTw8IERNQV9DVFJMX0RNQVJfQlVSU1RfTEVOX1NISUZUKSB8Ci0JCSgoKCh1MzIpIGh3LT5kbWF3X2Jsb2NrKSAmIERNQV9DVFJMX0RNQVdfQlVSU1RfTEVOX01BU0spCi0JCTw8IERNQV9DVFJMX0RNQVdfQlVSU1RfTEVOX1NISUZUKSB8IERNQV9DVFJMX0RNQVJfRU4gfAotCQlETUFfQ1RSTF9ETUFXX0VOOwotCXZhbHVlIHw9ICh1MzIpIGh3LT5kbWFfb3JkOwotCWlmIChhdGwxX3JjYl8xMjggPT0gaHctPnJjYl92YWx1ZSkKLQkJdmFsdWUgfD0gRE1BX0NUUkxfUkNCX1ZBTFVFOwotCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfRE1BX0NUUkwpOwotCi0JLyogY29uZmlnIENNQiAvIFNNQiAqLwotCXZhbHVlID0gKGh3LT5jbWJfdHBkID4gYWRhcHRlci0+dHBkX3JpbmcuY291bnQpID8KLQkJaHctPmNtYl90cGQgOiBhZGFwdGVyLT50cGRfcmluZy5jb3VudDsKLQl2YWx1ZSA8PD0gMTY7Ci0JdmFsdWUgfD0gaHctPmNtYl9ycmQ7Ci0JaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19DTUJfV1JJVEVfVEgpOwotCXZhbHVlID0gaHctPmNtYl9yeF90aW1lciB8ICgodTMyKSBody0+Y21iX3R4X3RpbWVyIDw8IDE2KTsKLQlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX0NNQl9XUklURV9USU1FUik7Ci0JaW93cml0ZTMyKGh3LT5zbWJfdGltZXIsIGh3LT5od19hZGRyICsgUkVHX1NNQl9USU1FUik7Ci0KLQkvKiAtLS0gZW5hYmxlIENNQiAvIFNNQiAqLwotCXZhbHVlID0gQ1NNQl9DVFJMX0NNQl9FTiB8IENTTUJfQ1RSTF9TTUJfRU47Ci0JaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19DU01CX0NUUkwpOwotCi0JdmFsdWUgPSBpb3JlYWQzMihhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lTUik7Ci0JaWYgKHVubGlrZWx5KCh2YWx1ZSAmIElTUl9QSFlfTElOS0RPV04pICE9IDApKQotCQl2YWx1ZSA9IDE7CS8qIGNvbmZpZyBmYWlsZWQgKi8KLQllbHNlCi0JCXZhbHVlID0gMDsKLQotCS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHQgc3RhdHVzICovCi0JaW93cml0ZTMyKDB4M2ZmZmZmZmYsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSVNSKTsKLQlpb3dyaXRlMzIoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JU1IpOwotCXJldHVybiB2YWx1ZTsKLX0KLQotLyoKLSAqIGF0bDFfcGNpZV9wYXRjaCAtIFBhdGNoIGZvciBQQ0lFIG1vZHVsZQotICovCi1zdGF0aWMgdm9pZCBhdGwxX3BjaWVfcGF0Y2goc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgdmFsdWU7Ci0KLQkvKiBtdWNoIHZlbmRvciBtYWdpYyBoZXJlICovCi0JdmFsdWUgPSAweDY1MDA7Ci0JaW93cml0ZTMyKHZhbHVlLCBhZGFwdGVyLT5ody5od19hZGRyICsgMHgxMkZDKTsKLQkvKiBwY2llIGZsb3cgY29udHJvbCBtb2RlIGNoYW5nZSAqLwotCXZhbHVlID0gaW9yZWFkMzIoYWRhcHRlci0+aHcuaHdfYWRkciArIDB4MTAwOCk7Ci0JdmFsdWUgfD0gMHg4MDAwOwotCWlvd3JpdGUzMih2YWx1ZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIDB4MTAwOCk7Ci19Ci0KLS8qCi0gKiBXaGVuIEFDUEkgcmVzdW1lIG9uIHNvbWUgVklBIE1vdGhlckJvYXJkLCB0aGUgSW50ZXJydXB0IERpc2FibGUgYml0LzB4NDAwCi0gKiBvbiBQQ0kgQ29tbWFuZCByZWdpc3RlciBpcyBkaXNhYmxlLgotICogVGhlIGZ1bmN0aW9uIGVuYWJsZSB0aGlzIGJpdC4KLSAqIEJyYWNrZXR0LCAyMDA2LzAzLzE1Ci0gKi8KLXN0YXRpYyB2b2lkIGF0bDFfdmlhX3dvcmthcm91bmQoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCi0JdmFsdWUgPSBpb3JlYWQxNihhZGFwdGVyLT5ody5od19hZGRyICsgUENJX0NPTU1BTkQpOwotCWlmICh2YWx1ZSAmIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSkKLQkJdmFsdWUgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKLQlpb3dyaXRlMzIodmFsdWUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBQQ0lfQ09NTUFORCk7Ci19Ci0KLS8qCi0gKiBhdGwxX2lycV9lbmFibGUgLSBFbmFibGUgZGVmYXVsdCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBzZXR0aW5ncwotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIGF0bDFfaXJxX2VuYWJsZShzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQotewotCWlvd3JpdGUzMihJTVJfTk9STUFMX01BU0ssIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSU1SKTsKLQlpb3JlYWQzMihhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lNUik7Ci19Ci0KLS8qCi0gKiBhdGwxX2lycV9kaXNhYmxlIC0gTWFzayBvZmYgaW50ZXJydXB0IGdlbmVyYXRpb24gb24gdGhlIE5JQwotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIGF0bDFfaXJxX2Rpc2FibGUoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpb3dyaXRlMzIoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JTVIpOwotCWlvcmVhZDMyKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSU1SKTsKLQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgYXRsMV9jbGVhcl9waHlfaW50KHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdTE2IHBoeV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwotCWF0bDFfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgMTksICZwaHlfZGF0YSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBhdGwxX2luY19zbWIoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgc3RhdHNfbXNnX2Jsb2NrICpzbWIgPSBhZGFwdGVyLT5zbWIuc21iOwotCi0JLyogRmlsbCBvdXQgdGhlIE9TIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi0JYWRhcHRlci0+c29mdF9zdGF0cy5yeF9wYWNrZXRzICs9IHNtYi0+cnhfb2s7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy50eF9wYWNrZXRzICs9IHNtYi0+dHhfb2s7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy5yeF9ieXRlcyArPSBzbWItPnJ4X2J5dGVfY250OwotCWFkYXB0ZXItPnNvZnRfc3RhdHMudHhfYnl0ZXMgKz0gc21iLT50eF9ieXRlX2NudDsKLQlhZGFwdGVyLT5zb2Z0X3N0YXRzLm11bHRpY2FzdCArPSBzbWItPnJ4X21jYXN0OwotCWFkYXB0ZXItPnNvZnRfc3RhdHMuY29sbGlzaW9ucyArPSAoc21iLT50eF8xX2NvbCArIHNtYi0+dHhfMl9jb2wgKiAyICsKLQkJc21iLT50eF9sYXRlX2NvbCArIHNtYi0+dHhfYWJvcnRfY29sICogYWRhcHRlci0+aHcubWF4X3JldHJ5KTsKLQotCS8qIFJ4IEVycm9ycyAqLwotCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfZXJyb3JzICs9IChzbWItPnJ4X2ZyYWcgKyBzbWItPnJ4X2Zjc19lcnIgKwotCQlzbWItPnJ4X2xlbl9lcnIgKyBzbWItPnJ4X3N6X292ICsgc21iLT5yeF9yeGZfb3YgKwotCQlzbWItPnJ4X3JyZF9vdiArIHNtYi0+cnhfYWxpZ25fZXJyKTsKLQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzICs9IHNtYi0+cnhfcnhmX292OwotCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPSBzbWItPnJ4X2xlbl9lcnI7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy5yeF9jcmNfZXJyb3JzICs9IHNtYi0+cnhfZmNzX2VycjsKLQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBzbWItPnJ4X2FsaWduX2VycjsKLQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gKHNtYi0+cnhfcnJkX292ICsKLQkJc21iLT5yeF9yeGZfb3YpOwotCi0JYWRhcHRlci0+c29mdF9zdGF0cy5yeF9wYXVzZSArPSBzbWItPnJ4X3BhdXNlOwotCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfcnJkX292ICs9IHNtYi0+cnhfcnJkX292OwotCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfdHJ1bmMgKz0gc21iLT5yeF9zel9vdjsKLQotCS8qIFR4IEVycm9ycyAqLwotCWFkYXB0ZXItPnNvZnRfc3RhdHMudHhfZXJyb3JzICs9IChzbWItPnR4X2xhdGVfY29sICsKLQkJc21iLT50eF9hYm9ydF9jb2wgKyBzbWItPnR4X3VuZGVycnVuICsgc21iLT50eF90cnVuYyk7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy50eF9maWZvX2Vycm9ycyArPSBzbWItPnR4X3VuZGVycnVuOwotCWFkYXB0ZXItPnNvZnRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gc21iLT50eF9hYm9ydF9jb2w7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy50eF93aW5kb3dfZXJyb3JzICs9IHNtYi0+dHhfbGF0ZV9jb2w7Ci0KLQlhZGFwdGVyLT5zb2Z0X3N0YXRzLmV4Y2Vjb2wgKz0gc21iLT50eF9hYm9ydF9jb2w7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy5kZWZmZXIgKz0gc21iLT50eF9kZWZlcjsKLQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnNjYyArPSBzbWItPnR4XzFfY29sOwotCWFkYXB0ZXItPnNvZnRfc3RhdHMubWNjICs9IHNtYi0+dHhfMl9jb2w7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy5sYXRlY29sICs9IHNtYi0+dHhfbGF0ZV9jb2w7Ci0JYWRhcHRlci0+c29mdF9zdGF0cy50eF91bmRlcnVuICs9IHNtYi0+dHhfdW5kZXJydW47Ci0JYWRhcHRlci0+c29mdF9zdGF0cy50eF90cnVuYyArPSBzbWItPnR4X3RydW5jOwotCWFkYXB0ZXItPnNvZnRfc3RhdHMudHhfcGF1c2UgKz0gc21iLT50eF9wYXVzZTsKLQotCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9wYWNrZXRzID0gYWRhcHRlci0+c29mdF9zdGF0cy5yeF9wYWNrZXRzOwotCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzID0gYWRhcHRlci0+c29mdF9zdGF0cy50eF9wYWNrZXRzOwotCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9ieXRlcyA9IGFkYXB0ZXItPnNvZnRfc3RhdHMucnhfYnl0ZXM7Ci0JYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzID0gYWRhcHRlci0+c29mdF9zdGF0cy50eF9ieXRlczsKLQlhZGFwdGVyLT5uZXRfc3RhdHMubXVsdGljYXN0ID0gYWRhcHRlci0+c29mdF9zdGF0cy5tdWx0aWNhc3Q7Ci0JYWRhcHRlci0+bmV0X3N0YXRzLmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLmNvbGxpc2lvbnM7Ci0JYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2Vycm9ycyA9IGFkYXB0ZXItPnNvZnRfc3RhdHMucnhfZXJyb3JzOwotCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9vdmVyX2Vycm9ycyA9Ci0JCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfbWlzc2VkX2Vycm9yczsKLQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9Ci0JCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfbGVuZ3RoX2Vycm9yczsKLQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfY3JjX2Vycm9ycyA9IGFkYXB0ZXItPnNvZnRfc3RhdHMucnhfY3JjX2Vycm9yczsKLQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZnJhbWVfZXJyb3JzID0KLQkJYWRhcHRlci0+c29mdF9zdGF0cy5yeF9mcmFtZV9lcnJvcnM7Ci0JYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gYWRhcHRlci0+c29mdF9zdGF0cy5yeF9maWZvX2Vycm9yczsKLQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9Ci0JCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfbWlzc2VkX2Vycm9yczsKLQlhZGFwdGVyLT5uZXRfc3RhdHMudHhfZXJyb3JzID0gYWRhcHRlci0+c29mdF9zdGF0cy50eF9lcnJvcnM7Ci0JYWRhcHRlci0+bmV0X3N0YXRzLnR4X2ZpZm9fZXJyb3JzID0gYWRhcHRlci0+c29mdF9zdGF0cy50eF9maWZvX2Vycm9yczsKLQlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPQotCQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzOwotCWFkYXB0ZXItPm5ldF9zdGF0cy50eF93aW5kb3dfZXJyb3JzID0KLQkJYWRhcHRlci0+c29mdF9zdGF0cy50eF93aW5kb3dfZXJyb3JzOwotCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyA9Ci0JCWFkYXB0ZXItPnNvZnRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnM7Ci19Ci0KLS8qCi0gKiBhdGwxX2dldF9zdGF0cyAtIEdldCBTeXN0ZW0gTmV0d29yayBTdGF0aXN0aWNzCi0gKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLgotICogVGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IHVwZGF0ZWQgZnJvbSB0aGUgdGltZXIgY2FsbGJhY2suCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXRsMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlyZXR1cm4gJmFkYXB0ZXItPm5ldF9zdGF0czsKLX0KLQotc3RhdGljIHZvaWQgYXRsMV91cGRhdGVfbWFpbGJveChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHRwZF9uZXh0X3RvX3VzZTsKLQl1MzIgcmZkX25leHRfdG9fdXNlOwotCXUzMiBycmRfbmV4dF90b19jbGVhbjsKLQl1MzIgdmFsdWU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bWJfbG9jaywgZmxhZ3MpOwotCi0JdHBkX25leHRfdG9fdXNlID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnRwZF9yaW5nLm5leHRfdG9fdXNlKTsKLQlyZmRfbmV4dF90b191c2UgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmZkX3JpbmcubmV4dF90b191c2UpOwotCXJyZF9uZXh0X3RvX2NsZWFuID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJyZF9yaW5nLm5leHRfdG9fY2xlYW4pOwotCi0JdmFsdWUgPSAoKHJmZF9uZXh0X3RvX3VzZSAmIE1CX1JGRF9QUk9EX0lORFhfTUFTSykgPDwKLQkJTUJfUkZEX1BST0RfSU5EWF9TSElGVCkgfAotCQkoKHJyZF9uZXh0X3RvX2NsZWFuICYgTUJfUlJEX0NPTlNfSU5EWF9NQVNLKSA8PAotCQlNQl9SUkRfQ09OU19JTkRYX1NISUZUKSB8Ci0JCSgodHBkX25leHRfdG9fdXNlICYgTUJfVFBEX1BST0RfSU5EWF9NQVNLKSA8PAotCQlNQl9UUERfUFJPRF9JTkRYX1NISUZUKTsKLQlpb3dyaXRlMzIodmFsdWUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfTUFJTEJPWCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5tYl9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0bDFfY2xlYW5fYWxsb2NfZmxhZyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLAotCXN0cnVjdCByeF9yZXR1cm5fZGVzYyAqcnJkLCB1MTYgb2Zmc2V0KQotewotCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyZmRfcmluZyA9ICZhZGFwdGVyLT5yZmRfcmluZzsKLQotCXdoaWxlIChyZmRfcmluZy0+bmV4dF90b19jbGVhbiAhPSAocnJkLT5idWZfaW5keCArIG9mZnNldCkpIHsKLQkJcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW3JmZF9yaW5nLT5uZXh0X3RvX2NsZWFuXS5hbGxvY2VkID0gMDsKLQkJaWYgKCsrcmZkX3JpbmctPm5leHRfdG9fY2xlYW4gPT0gcmZkX3JpbmctPmNvdW50KSB7Ci0JCQlyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0bDFfdXBkYXRlX3JmZF9pbmRleChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLAotCXN0cnVjdCByeF9yZXR1cm5fZGVzYyAqcnJkKQotewotCXUxNiBudW1fYnVmOwotCi0JbnVtX2J1ZiA9IChycmQtPnhzei54c3VtX3N6LnBrdF9zaXplICsgYWRhcHRlci0+cnhfYnVmZmVyX2xlbiAtIDEpIC8KLQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKLQlpZiAocnJkLT5udW1fYnVmID09IG51bV9idWYpCi0JCS8qIGNsZWFuIGFsbG9jIGZsYWcgZm9yIGJhZCBycmQgKi8KLQkJYXRsMV9jbGVhbl9hbGxvY19mbGFnKGFkYXB0ZXIsIHJyZCwgbnVtX2J1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0bDFfcnhfY2hlY2tzdW0oc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciwKLQlzdHJ1Y3QgcnhfcmV0dXJuX2Rlc2MgKnJyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0KLQlpZiAodW5saWtlbHkocnJkLT5wa3RfZmxnICYgUEFDS0VUX0ZMQUdfRVJSKSkgewotCQlpZiAocnJkLT5lcnJfZmxnICYgKEVSUl9GTEFHX0NSQyB8IEVSUl9GTEFHX1RSVU5DIHwKLQkJCQkJRVJSX0ZMQUdfQ09ERSB8IEVSUl9GTEFHX09WKSkgewotCQkJYWRhcHRlci0+aHdfY3N1bV9lcnIrKzsKLQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKLQkJCQkicnggY2hlY2tzdW0gZXJyb3JcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogbm90IElQdjQgKi8KLQlpZiAoIShycmQtPnBrdF9mbGcgJiBQQUNLRVRfRkxBR19JUFY0KSkKLQkJLyogY2hlY2tzdW0gaXMgaW52YWxpZCwgYnV0IGl0J3Mgbm90IGFuIElQdjQgcGt0LCBzbyBvayAqLwotCQlyZXR1cm47Ci0KLQkvKiBJUHY0IHBhY2tldCAqLwotCWlmIChsaWtlbHkoIShycmQtPmVycl9mbGcgJgotCQkoRVJSX0ZMQUdfSVBfQ0hLU1VNIHwgRVJSX0ZMQUdfTDRfQ0hLU1VNKSkpKSB7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCWFkYXB0ZXItPmh3X2NzdW1fZ29vZCsrOwotCQlyZXR1cm47Ci0JfQotCi0JLyogSVB2NCwgYnV0IGhhcmR3YXJlIHRoaW5rcyBpdHMgY2hlY2tzdW0gaXMgd3JvbmcgKi8KLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCi0JCSJodyBjc3VtIHdyb25nLCBwa3RfZmxhZzoleCwgZXJyX2ZsYWc6JXhcbiIsCi0JCXJyZC0+cGt0X2ZsZywgcnJkLT5lcnJfZmxnKTsKLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwotCXNrYi0+Y3N1bSA9IGh0b25zKHJyZC0+eHN6LnhzdW1fc3oucnhfY2hrc3VtKTsKLQlhZGFwdGVyLT5od19jc3VtX2VycisrOwotCXJldHVybjsKLX0KLQotLyoKLSAqIGF0bDFfYWxsb2NfcnhfYnVmZmVycyAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnMKLSAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB1MTYgYXRsMV9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IGF0bDFfcmZkX3JpbmcgKnJmZF9yaW5nID0gJmFkYXB0ZXItPnJmZF9yaW5nOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlzdHJ1Y3QgYXRsMV9idWZmZXIgKmJ1ZmZlcl9pbmZvLCAqbmV4dF9pbmZvOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTE2IG51bV9hbGxvYyA9IDA7Ci0JdTE2IHJmZF9uZXh0X3RvX3VzZSwgbmV4dF9uZXh0OwotCXN0cnVjdCByeF9mcmVlX2Rlc2MgKnJmZF9kZXNjOwotCi0JbmV4dF9uZXh0ID0gcmZkX25leHRfdG9fdXNlID0gYXRvbWljX3JlYWQoJnJmZF9yaW5nLT5uZXh0X3RvX3VzZSk7Ci0JaWYgKCsrbmV4dF9uZXh0ID09IHJmZF9yaW5nLT5jb3VudCkKLQkJbmV4dF9uZXh0ID0gMDsKLQlidWZmZXJfaW5mbyA9ICZyZmRfcmluZy0+YnVmZmVyX2luZm9bcmZkX25leHRfdG9fdXNlXTsKLQluZXh0X2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW25leHRfbmV4dF07Ci0KLQl3aGlsZSAoIWJ1ZmZlcl9pbmZvLT5hbGxvY2VkICYmICFuZXh0X2luZm8tPmFsbG9jZWQpIHsKLQkJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCWJ1ZmZlcl9pbmZvLT5hbGxvY2VkID0gMTsKLQkJCWdvdG8gbmV4dDsKLQkJfQotCi0JCXJmZF9kZXNjID0gQVRMMV9SRkRfREVTQyhyZmRfcmluZywgcmZkX25leHRfdG9fdXNlKTsKLQotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gKyBORVRfSVBfQUxJR04pOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZCAqLwotCQkJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogTWFrZSBidWZmZXIgYWxpZ25tZW50IDIgYmV5b25kIGEgMTYgYnl0ZSBib3VuZGFyeQotCQkgKiB0aGlzIHdpbGwgcmVzdWx0IGluIGEgMTYgYnl0ZSBhbGlnbmVkIElQIGhlYWRlciBhZnRlcgotCQkgKiB0aGUgMTQgYnl0ZSBNQUMgaGVhZGVyIGlzIHJlbW92ZWQKLQkJICovCi0JCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQotCQlidWZmZXJfaW5mby0+YWxsb2NlZCA9IDE7Ci0JCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7Ci0JCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSAodTE2KSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOwotCQlwYWdlID0gdmlydF90b19wYWdlKHNrYi0+ZGF0YSk7Ci0JCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIH5QQUdFX01BU0s7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UocGRldiwgcGFnZSwgb2Zmc2V0LAotCQkJCQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiwKLQkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXJmZF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOwotCQlyZmRfZGVzYy0+YnVmX2xlbiA9IGNwdV90b19sZTE2KGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pOwotCQlyZmRfZGVzYy0+Y29hbGVzZSA9IDA7Ci0KLW5leHQ6Ci0JCXJmZF9uZXh0X3RvX3VzZSA9IG5leHRfbmV4dDsKLQkJaWYgKHVubGlrZWx5KCsrbmV4dF9uZXh0ID09IHJmZF9yaW5nLT5jb3VudCkpCi0JCQluZXh0X25leHQgPSAwOwotCi0JCWJ1ZmZlcl9pbmZvID0gJnJmZF9yaW5nLT5idWZmZXJfaW5mb1tyZmRfbmV4dF90b191c2VdOwotCQluZXh0X2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW25leHRfbmV4dF07Ci0JCW51bV9hbGxvYysrOwotCX0KLQotCWlmIChudW1fYWxsb2MpIHsKLQkJLyoKLQkJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKLQkJICoga25vdyB0aGVyZSBhcmUgbmV3IGRlc2NyaXB0b3JzIHRvIGZldGNoLiAgKE9ubHkKLQkJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKLQkJICogc3VjaCBhcyBJQS02NCkuCi0JCSAqLwotCQl3bWIoKTsKLQkJYXRvbWljX3NldCgmcmZkX3JpbmctPm5leHRfdG9fdXNlLCAoaW50KXJmZF9uZXh0X3RvX3VzZSk7Ci0JfQotCXJldHVybiBudW1fYWxsb2M7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0bDFfaW50cl9yeChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQotewotCWludCBpLCBjb3VudDsKLQl1MTYgbGVuZ3RoOwotCXUxNiBycmRfbmV4dF90b19jbGVhbjsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IGF0bDFfcmZkX3JpbmcgKnJmZF9yaW5nID0gJmFkYXB0ZXItPnJmZF9yaW5nOwotCXN0cnVjdCBhdGwxX3JyZF9yaW5nICpycmRfcmluZyA9ICZhZGFwdGVyLT5ycmRfcmluZzsKLQlzdHJ1Y3QgYXRsMV9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCXN0cnVjdCByeF9yZXR1cm5fZGVzYyAqcnJkOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQljb3VudCA9IDA7Ci0KLQlycmRfbmV4dF90b19jbGVhbiA9IGF0b21pY19yZWFkKCZycmRfcmluZy0+bmV4dF90b19jbGVhbik7Ci0KLQl3aGlsZSAoMSkgewotCQlycmQgPSBBVEwxX1JSRF9ERVNDKHJyZF9yaW5nLCBycmRfbmV4dF90b19jbGVhbik7Ci0JCWkgPSAxOwotCQlpZiAobGlrZWx5KHJyZC0+eHN6LnZhbGlkKSkgewkvKiBwYWNrZXQgdmFsaWQgKi8KLWNoa19ycmQ6Ci0JCQkvKiBjaGVjayBycmQgc3RhdHVzICovCi0JCQlpZiAobGlrZWx5KHJyZC0+bnVtX2J1ZiA9PSAxKSkKLQkJCQlnb3RvIHJyZF9vazsKLQotCQkJLyogcnJkIHNlZW1zIHRvIGJlIGJhZCAqLwotCQkJaWYgKHVubGlrZWx5KGktLSA+IDApKSB7Ci0JCQkJLyogcnJkIG1heSBub3QgYmUgRE1BZWQgY29tcGxldGVseSAqLwotCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkJImluY29tcGxldGUgUlJEIERNQSB0cmFuc2ZlclxuIik7Ci0JCQkJdWRlbGF5KDEpOwotCQkJCWdvdG8gY2hrX3JyZDsKLQkJCX0KLQkJCS8qIGJhZCBycmQgKi8KLQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkiYmFkIFJSRFxuIik7Ci0JCQkvKiBzZWUgaWYgdXBkYXRlIFJGRCBpbmRleCAqLwotCQkJaWYgKHJyZC0+bnVtX2J1ZiA+IDEpCi0JCQkJYXRsMV91cGRhdGVfcmZkX2luZGV4KGFkYXB0ZXIsIHJyZCk7Ci0KLQkJCS8qIHVwZGF0ZSBycmQgKi8KLQkJCXJyZC0+eHN6LnZhbGlkID0gMDsKLQkJCWlmICgrK3JyZF9uZXh0X3RvX2NsZWFuID09IHJyZF9yaW5nLT5jb3VudCkKLQkJCQlycmRfbmV4dF90b19jbGVhbiA9IDA7Ci0JCQljb3VudCsrOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSB7CS8qIGN1cnJlbnQgcnJkIHN0aWxsIG5vdCBiZSB1cGRhdGVkICovCi0KLQkJCWJyZWFrOwotCQl9Ci1ycmRfb2s6Ci0JCS8qIGNsZWFuIGFsbG9jIGZsYWcgZm9yIGJhZCBycmQgKi8KLQkJYXRsMV9jbGVhbl9hbGxvY19mbGFnKGFkYXB0ZXIsIHJyZCwgMCk7Ci0KLQkJYnVmZmVyX2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW3JyZC0+YnVmX2luZHhdOwotCQlpZiAoKytyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9PSByZmRfcmluZy0+Y291bnQpCi0JCQlyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7Ci0KLQkJLyogdXBkYXRlIHJyZCBuZXh0IHRvIGNsZWFuICovCi0JCWlmICgrK3JyZF9uZXh0X3RvX2NsZWFuID09IHJyZF9yaW5nLT5jb3VudCkKLQkJCXJyZF9uZXh0X3RvX2NsZWFuID0gMDsKLQkJY291bnQrKzsKLQotCQlpZiAodW5saWtlbHkocnJkLT5wa3RfZmxnICYgUEFDS0VUX0ZMQUdfRVJSKSkgewotCQkJaWYgKCEocnJkLT5lcnJfZmxnICYKLQkJCQkoRVJSX0ZMQUdfSVBfQ0hLU1VNIHwgRVJSX0ZMQUdfTDRfQ0hLU1VNCi0JCQkJfCBFUlJfRkxBR19MRU4pKSkgewotCQkJCS8qIHBhY2tldCBlcnJvciwgZG9uJ3QgbmVlZCB1cHN0cmVhbSAqLwotCQkJCWJ1ZmZlcl9pbmZvLT5hbGxvY2VkID0gMDsKLQkJCQlycmQtPnhzei52YWxpZCA9IDA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQotCQkvKiBHb29kIFJlY2VpdmUgKi8KLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwotCQlsZW5ndGggPSBsZTE2X3RvX2NwdShycmQtPnhzei54c3VtX3N6LnBrdF9zaXplKTsKLQotCQlza2JfcHV0KHNrYiwgbGVuZ3RoIC0gRVRIX0ZDU19MRU4pOwotCi0JCS8qIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCAqLwotCQlhdGwxX3J4X2NoZWNrc3VtKGFkYXB0ZXIsIHJyZCwgc2tiKTsKLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKLQotCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgKHJyZC0+cGt0X2ZsZyAmIFBBQ0tFVF9GTEFHX1ZMQU5fSU5TKSkgewotCQkJdTE2IHZsYW5fdGFnID0gKHJyZC0+dmxhbl90YWcgPj4gNCkgfAotCQkJCQkoKHJyZC0+dmxhbl90YWcgJiA3KSA8PCAxMykgfAotCQkJCQkoKHJyZC0+dmxhbl90YWcgJiA4KSA8PCA5KTsKLQkJCXZsYW5faHdhY2NlbF9yeChza2IsIGFkYXB0ZXItPnZsZ3JwLCB2bGFuX3RhZyk7Ci0JCX0gZWxzZQotCQkJbmV0aWZfcngoc2tiKTsKLQotCQkvKiBsZXQgcHJvdG9jb2wgbGF5ZXIgZnJlZSBza2IgKi8KLQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7Ci0JCWJ1ZmZlcl9pbmZvLT5hbGxvY2VkID0gMDsKLQkJcnJkLT54c3oudmFsaWQgPSAwOwotCi0JCWFkYXB0ZXItPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JfQotCi0JYXRvbWljX3NldCgmcnJkX3JpbmctPm5leHRfdG9fY2xlYW4sIHJyZF9uZXh0X3RvX2NsZWFuKTsKLQotCWF0bDFfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyKTsKLQotCS8qIHVwZGF0ZSBtYWlsYm94ID8gKi8KLQlpZiAoY291bnQpIHsKLQkJdTMyIHRwZF9uZXh0X3RvX3VzZTsKLQkJdTMyIHJmZF9uZXh0X3RvX3VzZTsKLQotCQlzcGluX2xvY2soJmFkYXB0ZXItPm1iX2xvY2spOwotCi0JCXRwZF9uZXh0X3RvX3VzZSA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT50cGRfcmluZy5uZXh0X3RvX3VzZSk7Ci0JCXJmZF9uZXh0X3RvX3VzZSA9Ci0JCSAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmZkX3JpbmcubmV4dF90b191c2UpOwotCQlycmRfbmV4dF90b19jbGVhbiA9Ci0JCSAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+cnJkX3JpbmcubmV4dF90b19jbGVhbik7Ci0JCXZhbHVlID0gKChyZmRfbmV4dF90b191c2UgJiBNQl9SRkRfUFJPRF9JTkRYX01BU0spIDw8Ci0JCQlNQl9SRkRfUFJPRF9JTkRYX1NISUZUKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHJyZF9uZXh0X3RvX2NsZWFuICYgTUJfUlJEX0NPTlNfSU5EWF9NQVNLKSA8PAotCQkJTUJfUlJEX0NPTlNfSU5EWF9TSElGVCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh0cGRfbmV4dF90b191c2UgJiBNQl9UUERfUFJPRF9JTkRYX01BU0spIDw8Ci0JCQlNQl9UUERfUFJPRF9JTkRYX1NISUZUKTsKLQkJaW93cml0ZTMyKHZhbHVlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX01BSUxCT1gpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+bWJfbG9jayk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGwxX2ludHJfdHgoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKLQl1MTYgc3dfdHBkX25leHRfdG9fY2xlYW47Ci0JdTE2IGNtYl90cGRfbmV4dF90b19jbGVhbjsKLQotCXN3X3RwZF9uZXh0X3RvX2NsZWFuID0gYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX2NsZWFuKTsKLQljbWJfdHBkX25leHRfdG9fY2xlYW4gPSBsZTE2X3RvX2NwdShhZGFwdGVyLT5jbWIuY21iLT50cGRfY29uc19pZHgpOwotCi0Jd2hpbGUgKGNtYl90cGRfbmV4dF90b19jbGVhbiAhPSBzd190cGRfbmV4dF90b19jbGVhbikgewotCQlzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MgKnRwZDsKLQotCQl0cGQgPSBBVEwxX1RQRF9ERVNDKHRwZF9yaW5nLCBzd190cGRfbmV4dF90b19jbGVhbik7Ci0JCWJ1ZmZlcl9pbmZvID0gJnRwZF9yaW5nLT5idWZmZXJfaW5mb1tzd190cGRfbmV4dF90b19jbGVhbl07Ci0JCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7Ci0JCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBidWZmZXJfaW5mby0+ZG1hLAotCQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCQl9Ci0KLQkJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCWRldl9rZnJlZV9za2JfaXJxKGJ1ZmZlcl9pbmZvLT5za2IpOwotCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7Ci0JCX0KLQkJdHBkLT5idWZmZXJfYWRkciA9IDA7Ci0JCXRwZC0+ZGVzYy5kYXRhID0gMDsKLQotCQlpZiAoKytzd190cGRfbmV4dF90b19jbGVhbiA9PSB0cGRfcmluZy0+Y291bnQpCi0JCQlzd190cGRfbmV4dF90b19jbGVhbiA9IDA7Ci0JfQotCWF0b21pY19zZXQoJnRwZF9yaW5nLT5uZXh0X3RvX2NsZWFuLCBzd190cGRfbmV4dF90b19jbGVhbik7Ci0KLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChhZGFwdGVyLT5uZXRkZXYpCi0JICAgICYmIG5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwotfQotCi1zdGF0aWMgdTE2IGF0bDFfdHBkX2F2YWlsKHN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRfcmluZykKLXsKLQl1MTYgbmV4dF90b19jbGVhbiA9IGF0b21pY19yZWFkKCZ0cGRfcmluZy0+bmV4dF90b19jbGVhbik7Ci0JdTE2IG5leHRfdG9fdXNlID0gYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX3VzZSk7Ci0JcmV0dXJuICgobmV4dF90b19jbGVhbiA+IG5leHRfdG9fdXNlKSA/Ci0JCW5leHRfdG9fY2xlYW4gLSBuZXh0X3RvX3VzZSAtIDEgOgotCQl0cGRfcmluZy0+Y291bnQgKyBuZXh0X3RvX2NsZWFuIC0gbmV4dF90b191c2UgLSAxKTsKLX0KLQotc3RhdGljIGludCBhdGwxX3RzbyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHN0cnVjdCB0c29fcGFyYW0gKnRzbykKLXsKLQkvKiBXZSBlbnRlciB0aGlzIGZ1bmN0aW9uIGhvbGRpbmcgYSBzcGlubG9jay4gKi8KLQl1OCBpcG9mc3Q7Ci0JaW50IGVycjsKLQotCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKSB7Ci0JCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7Ci0JCQllcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfSVApKSB7Ci0JCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCi0JCQlpcGgtPnRvdF9sZW4gPSAwOwotCQkJaXBoLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsCi0JCQkJaXBoLT5kYWRkciwgMCwgSVBQUk9UT19UQ1AsIDApOwotCQkJaXBvZnN0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7Ci0JCQlpZiAoaXBvZnN0ICE9IEVUSF9ITEVOKSAvKiA4MDIuMyBmcmFtZSAqLwotCQkJCXRzby0+dHNvcGwgfD0gMSA8PCBUU09fUEFSQU1fRVRIVFlQRV9TSElGVDsKLQotCQkJdHNvLT50c29wbCB8PSAoaXBoLT5paGwgJgotCQkJCUNTVU1fUEFSQU1fSVBITF9NQVNLKSA8PCBDU1VNX1BBUkFNX0lQSExfU0hJRlQ7Ci0JCQl0c28tPnRzb3BsIHw9ICh0Y3BfaGRybGVuKHNrYikgJgotCQkJCVRTT19QQVJBTV9UQ1BIRFJMRU5fTUFTSykgPDwKLQkJCQlUU09fUEFSQU1fVENQSERSTEVOX1NISUZUOwotCQkJdHNvLT50c29wbCB8PSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSAmCi0JCQkJVFNPX1BBUkFNX01TU19NQVNLKSA8PCBUU09fUEFSQU1fTVNTX1NISUZUOwotCQkJdHNvLT50c29wbCB8PSAxIDw8IFRTT19QQVJBTV9JUENLU1VNX1NISUZUOwotCQkJdHNvLT50c29wbCB8PSAxIDw8IFRTT19QQVJBTV9UQ1BDS1NVTV9TSElGVDsKLQkJCXRzby0+dHNvcGwgfD0gMSA8PCBUU09fUEFSQU1fU0VHTUVOVF9TSElGVDsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCBhdGwxX3R4X2NzdW0oc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQlzdHJ1Y3QgY3N1bV9wYXJhbSAqY3N1bSkKLXsKLQl1OCBjc3MsIGNzbzsKLQotCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKLQkJY3NvID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKLQkJY3NzID0gY3NvICsgc2tiLT5jc3VtX29mZnNldDsKLQkJaWYgKHVubGlrZWx5KGNzbyAmIDB4MSkpIHsKLQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkicGF5bG9hZCBvZmZzZXQgbm90IGFuIGV2ZW4gbnVtYmVyXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQljc3VtLT5jc3VtcGwgfD0gKGNzbyAmIENTVU1fUEFSQU1fUExPQURPRkZTRVRfTUFTSykgPDwKLQkJCUNTVU1fUEFSQU1fUExPQURPRkZTRVRfU0hJRlQ7Ci0JCWNzdW0tPmNzdW1wbCB8PSAoY3NzICYgQ1NVTV9QQVJBTV9YU1VNT0ZGU0VUX01BU0spIDw8Ci0JCQlDU1VNX1BBUkFNX1hTVU1PRkZTRVRfU0hJRlQ7Ci0JCWNzdW0tPmNzdW1wbCB8PSAxIDw8IENTVU1fUEFSQU1fQ1VTVE9NQ0tTVU1fU0hJRlQ7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBhdGwxX3R4X21hcChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCWJvb2wgdGNwX3NlZykKLXsKLQkvKiBXZSBlbnRlciB0aGlzIGZ1bmN0aW9uIGhvbGRpbmcgYSBzcGlubG9jay4gKi8KLQlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7Ci0Jc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgZmlyc3RfYnVmX2xlbiA9IHNrYi0+bGVuOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCXVuc2lnbmVkIGludCBucl9mcmFnczsKLQl1bnNpZ25lZCBpbnQgZjsKLQl1MTYgdHBkX25leHRfdG9fdXNlOwotCXUxNiBwcm90b19oZHJfbGVuOwotCXUxNiBsZW4xMjsKLQotCWZpcnN0X2J1Zl9sZW4gLT0gc2tiLT5kYXRhX2xlbjsKLQlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JdHBkX25leHRfdG9fdXNlID0gYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX3VzZSk7Ci0JYnVmZmVyX2luZm8gPSAmdHBkX3JpbmctPmJ1ZmZlcl9pbmZvW3RwZF9uZXh0X3RvX3VzZV07Ci0JaWYgKHVubGlrZWx5KGJ1ZmZlcl9pbmZvLT5za2IpKQotCQlCVUcoKTsKLQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsJLyogcHV0IHNrYiBpbiBsYXN0IFRQRCAqLwotCi0JaWYgKHRjcF9zZWcpIHsKLQkJLyogVFNPL0dTTyAqLwotCQlwcm90b19oZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKLQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHByb3RvX2hkcl9sZW47Ci0JCXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2tiLT5kYXRhKTsKLQkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgflBBR0VfTUFTSzsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBwYWdlLAotCQkJCQkJb2Zmc2V0LCBwcm90b19oZHJfbGVuLAotCQkJCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJaWYgKCsrdHBkX25leHRfdG9fdXNlID09IHRwZF9yaW5nLT5jb3VudCkKLQkJCXRwZF9uZXh0X3RvX3VzZSA9IDA7Ci0KLQkJaWYgKGZpcnN0X2J1Zl9sZW4gPiBwcm90b19oZHJfbGVuKSB7Ci0JCQlpbnQgaSwgbTsKLQotCQkJbGVuMTIgPSBmaXJzdF9idWZfbGVuIC0gcHJvdG9faGRyX2xlbjsKLQkJCW0gPSAobGVuMTIgKyBBVEwxX01BWF9UWF9CVUZfTEVOIC0gMSkgLwotCQkJCUFUTDFfTUFYX1RYX0JVRl9MRU47Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7Ci0JCQkJYnVmZmVyX2luZm8gPQotCQkJCSAgICAmdHBkX3JpbmctPmJ1ZmZlcl9pbmZvW3RwZF9uZXh0X3RvX3VzZV07Ci0JCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7Ci0JCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9Ci0JCQkJICAgIChBVEwxX01BWF9UWF9CVUZfTEVOID49Ci0JCQkJICAgICBsZW4xMikgPyBBVEwxX01BWF9UWF9CVUZfTEVOIDogbGVuMTI7Ci0JCQkJbGVuMTIgLT0gYnVmZmVyX2luZm8tPmxlbmd0aDsKLQkJCQlwYWdlID0gdmlydF90b19wYWdlKHNrYi0+ZGF0YSArCi0JCQkJCShwcm90b19oZHJfbGVuICsKLQkJCQkJaSAqIEFUTDFfTUFYX1RYX0JVRl9MRU4pKTsKLQkJCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhICsKLQkJCQkJKHByb3RvX2hkcl9sZW4gKwotCQkJCQlpICogQVRMMV9NQVhfVFhfQlVGX0xFTikpICYgflBBR0VfTUFTSzsKLQkJCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCXBhZ2UsIG9mZnNldCwgYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCQkJaWYgKCsrdHBkX25leHRfdG9fdXNlID09IHRwZF9yaW5nLT5jb3VudCkKLQkJCQkJdHBkX25leHRfdG9fdXNlID0gMDsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCS8qIG5vdCBUU08vR1NPICovCi0JCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBmaXJzdF9idWZfbGVuOwotCQlwYWdlID0gdmlydF90b19wYWdlKHNrYi0+ZGF0YSk7Ci0JCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIH5QQUdFX01BU0s7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcGFnZSwKLQkJCW9mZnNldCwgZmlyc3RfYnVmX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmICgrK3RwZF9uZXh0X3RvX3VzZSA9PSB0cGRfcmluZy0+Y291bnQpCi0JCQl0cGRfbmV4dF90b191c2UgPSAwOwotCX0KLQotCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7Ci0JCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7Ci0JCXUxNiBsZW5mLCBpLCBtOwotCi0JCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKLQkJbGVuZiA9IGZyYWctPnNpemU7Ci0KLQkJbSA9IChsZW5mICsgQVRMMV9NQVhfVFhfQlVGX0xFTiAtIDEpIC8gQVRMMV9NQVhfVFhfQlVGX0xFTjsKLQkJZm9yIChpID0gMDsgaSA8IG07IGkrKykgewotCQkJYnVmZmVyX2luZm8gPSAmdHBkX3JpbmctPmJ1ZmZlcl9pbmZvW3RwZF9uZXh0X3RvX3VzZV07Ci0JCQlpZiAodW5saWtlbHkoYnVmZmVyX2luZm8tPnNrYikpCi0JCQkJQlVHKCk7Ci0JCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKLQkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSAobGVuZiA+IEFUTDFfTUFYX1RYX0JVRl9MRU4pID8KLQkJCQlBVEwxX01BWF9UWF9CVUZfTEVOIDogbGVuZjsKLQkJCWxlbmYgLT0gYnVmZmVyX2luZm8tPmxlbmd0aDsKLQkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQlmcmFnLT5wYWdlLAotCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0ICsgKGkgKiBBVEwxX01BWF9UWF9CVUZfTEVOKSwKLQkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCQkJaWYgKCsrdHBkX25leHRfdG9fdXNlID09IHRwZF9yaW5nLT5jb3VudCkKLQkJCQl0cGRfbmV4dF90b191c2UgPSAwOwotCQl9Ci0JfQotCi0JLyogbGFzdCB0cGQncyBidWZmZXItaW5mbyAqLwotCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0bDFfdHhfcXVldWUoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciwgaW50IGNvdW50LAotICAgICAgIHVuaW9uIHRwZF9kZXNjciAqZGVzY3IpCi17Ci0JLyogV2UgZW50ZXIgdGhpcyBmdW5jdGlvbiBob2xkaW5nIGEgc3BpbmxvY2suICovCi0Jc3RydWN0IGF0bDFfdHBkX3JpbmcgKnRwZF9yaW5nID0gJmFkYXB0ZXItPnRwZF9yaW5nOwotCWludCBqOwotCXUzMiB2YWw7Ci0Jc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKLQlzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MgKnRwZDsKLQl1MTYgdHBkX25leHRfdG9fdXNlID0gYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX3VzZSk7Ci0KLQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykgewotCQlidWZmZXJfaW5mbyA9ICZ0cGRfcmluZy0+YnVmZmVyX2luZm9bdHBkX25leHRfdG9fdXNlXTsKLQkJdHBkID0gQVRMMV9UUERfREVTQygmYWRhcHRlci0+dHBkX3JpbmcsIHRwZF9uZXh0X3RvX3VzZSk7Ci0JCXRwZC0+ZGVzYy5jc3VtLmNzdW1wdSA9IGRlc2NyLT5jc3VtLmNzdW1wdTsKLQkJdHBkLT5kZXNjLmNzdW0uY3N1bXBsID0gZGVzY3ItPmNzdW0uY3N1bXBsOwotCQl0cGQtPmRlc2MudHNvLnRzb3B1ID0gZGVzY3ItPnRzby50c29wdTsKLQkJdHBkLT5kZXNjLnRzby50c29wbCA9IGRlc2NyLT50c28udHNvcGw7Ci0JCXRwZC0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKLQkJdHBkLT5kZXNjLmRhdGEgPSBkZXNjci0+ZGF0YTsKLQkJdHBkLT5kZXNjLmNzdW0uY3N1bXB1IHw9IChjcHVfdG9fbGUxNihidWZmZXJfaW5mby0+bGVuZ3RoKSAmCi0JCQlDU1VNX1BBUkFNX0JVRkxFTl9NQVNLKSA8PCBDU1VNX1BBUkFNX0JVRkxFTl9TSElGVDsKLQotCQl2YWwgPSAoZGVzY3ItPnRzby50c29wbCA+PiBUU09fUEFSQU1fU0VHTUVOVF9TSElGVCkgJgotCQkJVFNPX1BBUkFNX1NFR01FTlRfTUFTSzsKLQkJaWYgKHZhbCAmJiAhaikKLQkJCXRwZC0+ZGVzYy50c28udHNvcGwgfD0gMSA8PCBUU09fUEFSQU1fSERSRkxBR19TSElGVDsKLQotCQlpZiAoaiA9PSAoY291bnQgLSAxKSkKLQkJCXRwZC0+ZGVzYy5jc3VtLmNzdW1wbCB8PSAxIDw8IENTVU1fUEFSQU1fRU9QX1NISUZUOwotCi0JCWlmICgrK3RwZF9uZXh0X3RvX3VzZSA9PSB0cGRfcmluZy0+Y291bnQpCi0JCQl0cGRfbmV4dF90b191c2UgPSAwOwotCX0KLQkvKgotCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93Ci0JICoga25vdyB0aGVyZSBhcmUgbmV3IGRlc2NyaXB0b3JzIHRvIGZldGNoLiAgKE9ubHkKLQkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAotCSAqIHN1Y2ggYXMgSUEtNjQpLgotCSAqLwotCXdtYigpOwotCi0JYXRvbWljX3NldCgmdHBkX3JpbmctPm5leHRfdG9fdXNlLCAoaW50KXRwZF9uZXh0X3RvX3VzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYXRsMV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IGxlbiA9IHNrYi0+bGVuOwotCWludCB0c287Ci0JaW50IGNvdW50ID0gMTsKLQlpbnQgcmV0X3ZhbDsKLQl1MzIgdmFsOwotCXVuaW9uIHRwZF9kZXNjciBwYXJhbTsKLQl1MTYgZnJhZ19zaXplOwotCXUxNiB2bGFuX3RhZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBucl9mcmFncyA9IDA7Ci0JdW5zaWduZWQgaW50IG1zcyA9IDA7Ci0JdW5zaWduZWQgaW50IGY7Ci0JdW5zaWduZWQgaW50IHByb3RvX2hkcl9sZW47Ci0KLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKLQotCWlmICh1bmxpa2VseShza2ItPmxlbiA9PSAwKSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCX0KLQotCXBhcmFtLmRhdGEgPSAwOwotCXBhcmFtLnRzby50c29wdSA9IDA7Ci0JcGFyYW0udHNvLnRzb3BsID0gMDsKLQlwYXJhbS5jc3VtLmNzdW1wdSA9IDA7Ci0JcGFyYW0uY3N1bS5jc3VtcGwgPSAwOwotCi0JLyogbnJfZnJhZ3Mgd2lsbCBiZSBub256ZXJvIGlmIHdlJ3JlIGRvaW5nIHNjYXR0ZXIvZ2F0aGVyIChTRykgKi8KLQlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKLQkJZnJhZ19zaXplID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXS5zaXplOwotCQlpZiAoZnJhZ19zaXplKQotCQkJY291bnQgKz0gKGZyYWdfc2l6ZSArIEFUTDFfTUFYX1RYX0JVRl9MRU4gLSAxKSAvCi0JCQkJQVRMMV9NQVhfVFhfQlVGX0xFTjsKLQl9Ci0KLQkvKiBtc3Mgd2lsbCBiZSBub256ZXJvIGlmIHdlJ3JlIGRvaW5nIHNlZ21lbnQgb2ZmbG9hZCAoVFNPL0dTTykgKi8KLQltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwotCWlmIChtc3MpIHsKLQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCQlwcm90b19oZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKwotCQkJCQkgdGNwX2hkcmxlbihza2IpKTsKLQkJCWlmICh1bmxpa2VseShwcm90b19oZHJfbGVuID4gbGVuKSkgewotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJCX0KLQkJCS8qIG5lZWQgYWRkaXRpb25hbCBUUEQgPyAqLwotCQkJaWYgKHByb3RvX2hkcl9sZW4gIT0gbGVuKQotCQkJCWNvdW50ICs9IChsZW4gLSBwcm90b19oZHJfbGVuICsKLQkJCQkJQVRMMV9NQVhfVFhfQlVGX0xFTiAtIDEpIC8KLQkJCQkJQVRMMV9NQVhfVFhfQlVGX0xFTjsKLQkJfQotCX0KLQotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKSkgewotCQkvKiBDYW4ndCBnZXQgbG9jayAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLwotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZhZGFwdGVyLT5wZGV2LT5kZXYsICJ0eCBsb2NrZWRcbiIpOwotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQl9Ci0KLQlpZiAoYXRsMV90cGRfYXZhaWwoJmFkYXB0ZXItPnRwZF9yaW5nKSA8IGNvdW50KSB7Ci0JCS8qIG5vdCBlbm91Z2ggZGVzY3JpcHRvcnMgKi8KLQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwgInR4IGJ1c3lcbiIpOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCi0JcGFyYW0uZGF0YSA9IDA7Ci0KLQlpZiAoYWRhcHRlci0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXZsYW5fdGFnID0gdmxhbl90eF90YWdfZ2V0KHNrYik7Ci0JCXZsYW5fdGFnID0gKHZsYW5fdGFnIDw8IDQpIHwgKHZsYW5fdGFnID4+IDEzKSB8Ci0JCQkoKHZsYW5fdGFnID4+IDkpICYgMHg4KTsKLQkJcGFyYW0uY3N1bS5jc3VtcGwgfD0gMSA8PCBDU1VNX1BBUkFNX0lOU1ZMQUdfU0hJRlQ7Ci0JCXBhcmFtLmNzdW0uY3N1bXB1IHw9ICh2bGFuX3RhZyAmIENTVU1fUEFSQU1fVkFMQU5UQUdfTUFTSykgPDwKLQkJCUNTVU1fUEFSQU1fVkFMQU5fU0hJRlQ7Ci0JfQotCi0JdHNvID0gYXRsMV90c28oYWRhcHRlciwgc2tiLCAmcGFyYW0udHNvKTsKLQlpZiAodHNvIDwgMCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQotCi0JaWYgKCF0c28pIHsKLQkJcmV0X3ZhbCA9IGF0bDFfdHhfY3N1bShhZGFwdGVyLCBza2IsICZwYXJhbS5jc3VtKTsKLQkJaWYgKHJldF92YWwgPCAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJfQotCX0KLQotCXZhbCA9IChwYXJhbS5jc3VtLmNzdW1wbCA+PiBDU1VNX1BBUkFNX1NFR01FTlRfU0hJRlQpICYKLQkJQ1NVTV9QQVJBTV9TRUdNRU5UX01BU0s7Ci0JYXRsMV90eF9tYXAoYWRhcHRlciwgc2tiLCAxID09IHZhbCk7Ci0JYXRsMV90eF9xdWV1ZShhZGFwdGVyLCBjb3VudCwgJnBhcmFtKTsKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0JYXRsMV91cGRhdGVfbWFpbGJveChhZGFwdGVyKTsKLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi0vKgotICogYXRsMV9pbnRyIC0gSW50ZXJydXB0IEhhbmRsZXIKLSAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKLSAqIEBkYXRhOiBwb2ludGVyIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQotICogQHB0X3JlZ3M6IENQVSByZWdpc3RlcnMgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBhdGwxX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGF0YSk7Ci0JdTMyIHN0YXR1czsKLQl1OCB1cGRhdGVfcng7Ci0JaW50IG1heF9pbnRzID0gMTA7Ci0KLQlzdGF0dXMgPSBhZGFwdGVyLT5jbWIuY21iLT5pbnRfc3RhdHM7Ci0JaWYgKCFzdGF0dXMpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXVwZGF0ZV9yeCA9IDA7Ci0KLQlkbyB7Ci0JCS8qIGNsZWFyIENNQiBpbnRlcnJ1cHQgc3RhdHVzIGF0IG9uY2UgKi8KLQkJYWRhcHRlci0+Y21iLmNtYi0+aW50X3N0YXRzID0gMDsKLQotCQlpZiAoc3RhdHVzICYgSVNSX0dQSFkpCS8qIGNsZWFyIHBoeSBzdGF0dXMgKi8KLQkJCWF0bDFfY2xlYXJfcGh5X2ludChhZGFwdGVyKTsKLQotCQkvKiBjbGVhciBJU1Igc3RhdHVzLCBhbmQgRW5hYmxlIENNQiBETUEvRGlzYWJsZSBJbnRlcnJ1cHQgKi8KLQkJaW93cml0ZTMyKHN0YXR1cyB8IElTUl9ESVNfSU5ULCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lTUik7Ci0KLQkJLyogY2hlY2sgaWYgU01CIGludHIgKi8KLQkJaWYgKHN0YXR1cyAmIElTUl9TTUIpCi0JCQlhdGwxX2luY19zbWIoYWRhcHRlcik7Ci0KLQkJLyogY2hlY2sgaWYgUENJRSBQSFkgTGluayBkb3duICovCi0JCWlmIChzdGF0dXMgJiBJU1JfUEhZX0xJTktET1dOKSB7Ci0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkJInBjaWUgcGh5IGxpbmsgZG93biAleFxuIiwgc3RhdHVzKTsKLQkJCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsJLyogcmVzZXQgTUFDICovCi0JCQkJaW93cml0ZTMyKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSU1SKTsKLQkJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5wY2llX2RtYV90b19yc3RfdGFzayk7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCQl9Ci0KLQkJLyogY2hlY2sgaWYgRE1BIHJlYWQvd3JpdGUgZXJyb3IgPyAqLwotCQlpZiAoc3RhdHVzICYgKElTUl9ETUFSX1RPX1JTVCB8IElTUl9ETUFXX1RPX1JTVCkpIHsKLQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkicGNpZSBETUEgci93IGVycm9yIChzdGF0dXMgPSAweCV4KVxuIiwKLQkJCQlzdGF0dXMpOwotCQkJaW93cml0ZTMyKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSU1SKTsKLQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnBjaWVfZG1hX3RvX3JzdF90YXNrKTsKLQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJfQotCi0JCS8qIGxpbmsgZXZlbnQgKi8KLQkJaWYgKHN0YXR1cyAmIElTUl9HUEhZKSB7Ci0JCQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCQlhdGwxX2NoZWNrX2Zvcl9saW5rKGFkYXB0ZXIpOwotCQl9Ci0KLQkJLyogdHJhbnNtaXQgZXZlbnQgKi8KLQkJaWYgKHN0YXR1cyAmIElTUl9DTUJfVFgpCi0JCQlhdGwxX2ludHJfdHgoYWRhcHRlcik7Ci0KLQkJLyogcnggZXhjZXB0aW9uICovCi0JCWlmICh1bmxpa2VseShzdGF0dXMgJiAoSVNSX1JYRl9PViB8IElTUl9SRkRfVU5SVU4gfAotCQkJSVNSX1JSRF9PViB8IElTUl9IT1NUX1JGRF9VTlJVTiB8Ci0JCQlJU1JfSE9TVF9SUkRfT1YgfCBJU1JfQ01CX1JYKSkpIHsKLQkJCWlmIChzdGF0dXMgJiAoSVNSX1JYRl9PViB8IElTUl9SRkRfVU5SVU4gfAotCQkJCUlTUl9SUkRfT1YgfCBJU1JfSE9TVF9SRkRfVU5SVU4gfAotCQkJCUlTUl9IT1NUX1JSRF9PVikpCi0JCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCQkicnggZXhjZXB0aW9uLCBJU1IgPSAweCV4XG4iLCBzdGF0dXMpOwotCQkJYXRsMV9pbnRyX3J4KGFkYXB0ZXIpOwotCQl9Ci0KLQkJaWYgKC0tbWF4X2ludHMgPCAwKQotCQkJYnJlYWs7Ci0KLQl9IHdoaWxlICgoc3RhdHVzID0gYWRhcHRlci0+Y21iLmNtYi0+aW50X3N0YXRzKSk7Ci0KLQkvKiByZS1lbmFibGUgSW50ZXJydXB0ICovCi0JaW93cml0ZTMyKElTUl9ESVNfU01CIHwgSVNSX0RJU19ETUEsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSVNSKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qCi0gKiBhdGwxX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCi0gKiBAZGF0YTogcG9pbnRlciB0byBuZXRkZXYgY2FzdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcKLSAqLwotc3RhdGljIHZvaWQgYXRsMV93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYXRsMV9hZGFwdGVyICopZGF0YTsKLQotCS8qIFJlc2V0IHRoZSB0aW1lciAqLwotCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAyICogSFopOwotfQotCi0vKgotICogYXRsMV9waHlfY29uZmlnIC0gVGltZXIgQ2FsbC1iYWNrCi0gKiBAZGF0YTogcG9pbnRlciB0byBuZXRkZXYgY2FzdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcKLSAqLwotc3RhdGljIHZvaWQgYXRsMV9waHlfY29uZmlnKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKilkYXRhOwotCXN0cnVjdCBhdGwxX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKLQlhZGFwdGVyLT5waHlfdGltZXJfcGVuZGluZyA9IGZhbHNlOwotCWF0bDFfd3JpdGVfcGh5X3JlZyhodywgTUlJX0FEVkVSVElTRSwgaHctPm1paV9hdXRvbmVnX2Fkdl9yZWcpOwotCWF0bDFfd3JpdGVfcGh5X3JlZyhodywgTUlJX0FUMDAxX0NSLCBody0+bWlpXzEwMDB0X2N0cmxfcmVnKTsKLQlhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9CTUNSLCBNSUlfQ1JfUkVTRVQgfCBNSUlfQ1JfQVVUT19ORUdfRU4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIGF0bDFfdHhfdGltZW91dCAtIFJlc3BvbmQgdG8gYSBUeCBIYW5nCi0gKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIGF0bDFfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCi0Jc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKLX0KLQotLyoKLSAqIE9ycGhhbmVkIHZlbmRvciBjb21tZW50IGxlZnQgaW50YWN0IGhlcmU6Ci0gKiA8dmVuZG9yIGNvbW1lbnQ+Ci0gKiBJZiBUUEQgQnVmZmVyIHNpemUgZXF1YWwgdG8gMCwgUENJRSBETUFSX1RPX0lOVAotICogd2lsbCBhc3NlcnQuIFdlIGRvIHNvZnQgcmVzZXQgPDB4MTQwMD0xPiBhY2NvcmRpbmcKLSAqIHdpdGggdGhlIFNQRUMuIEJVVCwgaXQgc2VlbWVzIHRoYXQgUENJRSBvciBETUEKLSAqIHN0YXRlLW1hY2hpbmUgd2lsbCBub3QgYmUgcmVzZXQuIERNQVJfVE9fSU5UIHdpbGwKLSAqIGFzc2VydCBhZ2FpbiBhbmQgYWdhaW4uCi0gKiA8L3ZlbmRvciBjb21tZW50PgotICovCi1zdGF0aWMgdm9pZCBhdGwxX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMV9hZGFwdGVyLCB0eF90aW1lb3V0X3Rhc2spOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0KLQluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7Ci0JYXRsMV9kb3duKGFkYXB0ZXIpOwotCWF0bDFfdXAoYWRhcHRlcik7Ci0JbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwotfQotCi0vKgotICogYXRsMV9saW5rX2NoZ190YXNrIC0gZGVhbCB3aXRoIGxpbmsgY2hhbmdlIGV2ZW50IE91dCBvZiBpbnRlcnJ1cHQgY29udGV4dAotICovCi1zdGF0aWMgdm9pZCBhdGwxX2xpbmtfY2hnX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPQotICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGwxX2FkYXB0ZXIsIGxpbmtfY2hnX3Rhc2spOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwotCWF0bDFfY2hlY2tfbGluayhhZGFwdGVyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0bDFfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCXN0cnVjdCB2bGFuX2dyb3VwICpncnApCi17Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgY3RybDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0JLyogYXRsMV9pcnFfZGlzYWJsZShhZGFwdGVyKTsgKi8KLQlhZGFwdGVyLT52bGdycCA9IGdycDsKLQotCWlmIChncnApIHsKLQkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwotCQljdHJsID0gaW9yZWFkMzIoYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19NQUNfQ1RSTCk7Ci0JCWN0cmwgfD0gTUFDX0NUUkxfUk1WX1ZMQU47Ci0JCWlvd3JpdGUzMihjdHJsLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX01BQ19DVFJMKTsKLQl9IGVsc2UgewotCQkvKiBkaXNhYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwotCQljdHJsID0gaW9yZWFkMzIoYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19NQUNfQ1RSTCk7Ci0JCWN0cmwgJj0gfk1BQ19DVFJMX1JNVl9WTEFOOwotCQlpb3dyaXRlMzIoY3RybCwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19NQUNfQ1RSTCk7Ci0JfQotCi0JLyogYXRsMV9pcnFfZW5hYmxlKGFkYXB0ZXIpOyAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgYXRsMV9yZXN0b3JlX3ZsYW4oc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlhdGwxX3ZsYW5fcnhfcmVnaXN0ZXIoYWRhcHRlci0+bmV0ZGV2LCBhZGFwdGVyLT52bGdycCk7Ci19Ci0KLWludCBhdGwxX3Jlc2V0KHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGF0bDFfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKLQlpZiAocmV0ICE9IEFUTDFfU1VDQ0VTUykKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gYXRsMV9pbml0X2h3KCZhZGFwdGVyLT5odyk7Ci19Ci0KLXMzMiBhdGwxX3VwKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlpbnQgZXJyOwotCWludCBpcnFfZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007Ci0KLQkvKiBoYXJkd2FyZSBoYXMgYmVlbiByZXNldCwgd2UgbmVlZCB0byByZWxvYWQgc29tZSB0aGluZ3MgKi8KLQlhdGwxX3NldF9tdWx0aShuZXRkZXYpOwotCWF0bDFfaW5pdF9yaW5nX3B0cnMoYWRhcHRlcik7Ci0JYXRsMV9yZXN0b3JlX3ZsYW4oYWRhcHRlcik7Ci0JZXJyID0gYXRsMV9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIpOwotCWlmICh1bmxpa2VseSghZXJyKSkJCS8qIG5vIFJYIEJVRkZFUiBhbGxvY2F0ZWQgKi8KLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAodW5saWtlbHkoYXRsMV9jb25maWd1cmUoYWRhcHRlcikpKSB7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX3VwOwotCX0KLQotCWVyciA9IHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSJVbmFibGUgdG8gZW5hYmxlIE1TSTogJWRcbiIsIGVycik7Ci0JCWlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKLQl9Ci0KLQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsICZhdGwxX2ludHIsIGlycV9mbGFncywKLQkJCW5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKLQlpZiAodW5saWtlbHkoZXJyKSkKLQkJZ290byBlcnJfdXA7Ci0KLQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKLQlhdGwxX2lycV9lbmFibGUoYWRhcHRlcik7Ci0JYXRsMV9jaGVja19saW5rKGFkYXB0ZXIpOwotCXJldHVybiAwOwotCi1lcnJfdXA6Ci0JcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotCS8qIGZyZWUgcnhfYnVmZmVycyAqLwotCWF0bDFfY2xlYW5fcnhfcmluZyhhZGFwdGVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi12b2lkIGF0bDFfZG93bihzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0KLQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwotCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5waHlfY29uZmlnX3RpbWVyKTsKLQlhZGFwdGVyLT5waHlfdGltZXJfcGVuZGluZyA9IGZhbHNlOwotCi0JYXRsMV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKLQlmcmVlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7Ci0JcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotCWF0bDFfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKLQlhZGFwdGVyLT5jbWIuY21iLT5pbnRfc3RhdHMgPSAwOwotCi0JYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7Ci0JYWRhcHRlci0+bGlua19kdXBsZXggPSAtMTsKLQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQotCWF0bDFfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKLQlhdGwxX2NsZWFuX3J4X3JpbmcoYWRhcHRlcik7Ci19Ci0KLS8qCi0gKiBhdGwxX29wZW4gLSBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCi0gKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKLSAqCi0gKiBUaGUgb3BlbiBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUKLSAqIGFjdGl2ZSBieSB0aGUgc3lzdGVtIChJRkZfVVApLiAgQXQgdGhpcyBwb2ludCBhbGwgcmVzb3VyY2VzIG5lZWRlZAotICogZm9yIHRyYW5zbWl0IGFuZCByZWNlaXZlIG9wZXJhdGlvbnMgYXJlIGFsbG9jYXRlZCwgdGhlIGludGVycnVwdAotICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIE9TLCB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgc3RhcnRlZCwKLSAqIGFuZCB0aGUgc3RhY2sgaXMgbm90aWZpZWQgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5LgotICovCi1zdGF0aWMgaW50IGF0bDFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBlcnI7Ci0KLQkvKiBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9ycyAqLwotCWVyciA9IGF0bDFfc2V0dXBfcmluZ19yZXNvdXJjZXMoYWRhcHRlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGF0bDFfdXAoYWRhcHRlcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdXA7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3VwOgotCWF0bDFfcmVzZXQoYWRhcHRlcik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIGF0bDFfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlCi0gKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogUmV0dXJucyAwLCB0aGlzIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwKLSAqCi0gKiBUaGUgY2xvc2UgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGRlLWFjdGl2YXRlZAotICogYnkgdGhlIE9TLiAgVGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVuZGVyIHRoZSBkcml2ZXJzIGNvbnRyb2wsIGJ1dAotICogbmVlZHMgdG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhlCi0gKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgotICovCi1zdGF0aWMgaW50IGF0bDFfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlhdGwxX2Rvd24oYWRhcHRlcik7Ci0JYXRsMV9mcmVlX3JpbmdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF0bDFfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBjdHJsID0gMDsKLQl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKLQotCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQlhdGwxX2Rvd24oYWRhcHRlcik7Ci0KLQlhdGwxX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICh1MTYgKikgJiBjdHJsKTsKLQlhdGwxX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICh1MTYgKikgJiBjdHJsKTsKLQlpZiAoY3RybCAmIEJNU1JfTFNUQVRVUykKLQkJd3VmYyAmPSB+QVRMMV9XVUZDX0xOS0M7Ci0KLQkvKiByZWR1Y2Ugc3BlZWQgdG8gMTAvMTAwTSAqLwotCWlmICh3dWZjKSB7Ci0JCWF0bDFfcGh5X2VudGVyX3Bvd2VyX3NhdmluZyhodyk7Ci0JCS8qIGlmIHJlc3VtZSwgbGV0IGRyaXZlciB0byByZS0gc2V0dXAgbGluayAqLwotCQlody0+cGh5X2NvbmZpZ3VyZWQgPSBmYWxzZTsKLQkJYXRsMV9zZXRfbWFjX2FkZHIoaHcpOwotCQlhdGwxX3NldF9tdWx0aShuZXRkZXYpOwotCi0JCWN0cmwgPSAwOwotCQkvKiB0dXJuIG9uIG1hZ2ljIHBhY2tldCB3b2wgKi8KLQkJaWYgKHd1ZmMgJiBBVEwxX1dVRkNfTUFHKQotCQkJY3RybCA9IFdPTF9NQUdJQ19FTiB8IFdPTF9NQUdJQ19QTUVfRU47Ci0KLQkJLyogdHVybiBvbiBMaW5rIGNoYW5nZSBXT0wgKi8KLQkJaWYgKHd1ZmMgJiBBVEwxX1dVRkNfTE5LQykKLQkJCWN0cmwgfD0gKFdPTF9MSU5LX0NIR19FTiB8IFdPTF9MSU5LX0NIR19QTUVfRU4pOwotCQlpb3dyaXRlMzIoY3RybCwgaHctPmh3X2FkZHIgKyBSRUdfV09MX0NUUkwpOwotCi0JCS8qIHR1cm4gb24gYWxsLW11bHRpIG1vZGUgaWYgd2FrZSBvbiBtdWx0aWNhc3QgaXMgZW5hYmxlZCAqLwotCQljdHJsID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfTUFDX0NUUkwpOwotCQljdHJsICY9IH5NQUNfQ1RSTF9EQkc7Ci0JCWN0cmwgJj0gfk1BQ19DVFJMX1BST01JU19FTjsKLQkJaWYgKHd1ZmMgJiBBVEwxX1dVRkNfTUMpCi0JCQljdHJsIHw9IE1BQ19DVFJMX01DX0FMTF9FTjsKLQkJZWxzZQotCQkJY3RybCAmPSB+TUFDX0NUUkxfTUNfQUxMX0VOOwotCi0JCS8qIHR1cm4gb24gYnJvYWRjYXN0IG1vZGUgaWYgd2FrZSBvbi1CQyBpcyBlbmFibGVkICovCi0JCWlmICh3dWZjICYgQVRMMV9XVUZDX0JDKQotCQkJY3RybCB8PSBNQUNfQ1RSTF9CQ19FTjsKLQkJZWxzZQotCQkJY3RybCAmPSB+TUFDX0NUUkxfQkNfRU47Ci0KLQkJLyogZW5hYmxlIFJYICovCi0JCWN0cmwgfD0gTUFDX0NUUkxfUlhfRU47Ci0JCWlvd3JpdGUzMihjdHJsLCBody0+aHdfYWRkciArIFJFR19NQUNfQ1RSTCk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOwotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7Ci0JfSBlbHNlIHsKLQkJaW93cml0ZTMyKDAsIGh3LT5od19hZGRyICsgUkVHX1dPTF9DVFJMKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKLQl9Ci0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdGwxX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXUzMiByZXRfdmFsOwotCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQotCXJldF92YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7Ci0KLQlpb3dyaXRlMzIoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19XT0xfQ1RSTCk7Ci0JYXRsMV9yZXNldChhZGFwdGVyKTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCWF0bDFfdXAoYWRhcHRlcik7Ci0JbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwotCi0JYXRsMV92aWFfd29ya2Fyb3VuZChhZGFwdGVyKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLSNkZWZpbmUgYXRsMV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgYXRsMV9yZXN1bWUgTlVMTAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotc3RhdGljIHZvaWQgYXRsMV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlkaXNhYmxlX2lycShuZXRkZXYtPmlycSk7Ci0JYXRsMV9pbnRyKG5ldGRldi0+aXJxLCBuZXRkZXYpOwotCWVuYWJsZV9pcnEobmV0ZGV2LT5pcnEpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBhdGwxX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAotICogQGVudDogZW50cnkgaW4gYXRsMV9wY2lfdGJsCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKLSAqCi0gKiBhdGwxX3Byb2JlIGluaXRpYWxpemVzIGFuIGFkYXB0ZXIgaWRlbnRpZmllZCBieSBhIHBjaV9kZXYgc3RydWN0dXJlLgotICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSwKLSAqIGFuZCBhIGhhcmR3YXJlIHJlc2V0IG9jY3VyLgotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyOwotCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQgPSAwOwotCWludCBlcnI7Ci0KLQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyoKLQkgKiBUaGUgYXRsMSBjaGlwIGNhbiBETUEgdG8gNjQtYml0IGFkZHJlc3NlcywgYnV0IGl0IHVzZXMgYSBzaW5nbGUKLQkgKiBzaGFyZWQgcmVnaXN0ZXIgZm9yIHRoZSBoaWdoIDMyIGJpdHMsIHNvIG9ubHkgYSBzaW5nbGUsIGFsaWduZWQsCi0JICogNCBHQiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGNhbiBiZSB1c2VkIGF0IGEgdGltZS4KLQkgKgotCSAqIFN1cHBvcnRpbmcgNjQtYml0IERNQSBvbiB0aGlzIGhhcmR3YXJlIGlzIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3MKLQkgKiB3b3J0aC4gIEl0IGlzIGZhciBlYXNpZXIgdG8gbGltaXQgdG8gMzItYml0IERNQSB0aGFuIHVwZGF0ZQotCSAqIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMgdG8gc3VwcG9ydCB0aGUgbWVjaGFuaWNzIHJlcXVpcmVkIGJ5IGEKLQkgKiBmaXhlZC1oaWdoLTMyLWJpdCBzeXN0ZW0uCi0JICovCi0JZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlnb3RvIGVycl9kbWE7Ci0JfQotCS8qIE1hcmsgYWxsIFBDSSByZWdpb25zIGFzc29jaWF0ZWQgd2l0aCBQQ0kgZGV2aWNlCi0JICogcGRldiBhcyBiZWluZyByZXNlcnZlZCBieSBvd25lciBhdGwxX2RyaXZlcl9uYW1lCi0JICovCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBhdGwxX2RyaXZlcl9uYW1lKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXF1ZXN0X3JlZ2lvbnM7Ci0KLQkvKiBFbmFibGVzIGJ1cy1tYXN0ZXJpbmcgb24gdGhlIGRldmljZSBhbmQgY2FsbHMKLQkgKiBwY2liaW9zX3NldF9tYXN0ZXIgdG8gZG8gdGhlIG5lZWRlZCBhcmNoIHNwZWNpZmljIHNldHRpbmdzCi0JICovCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGF0bDFfYWRhcHRlcikpOwotCWlmICghbmV0ZGV2KSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OwotCX0KLQlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7Ci0JYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwotCWFkYXB0ZXItPnBkZXYgPSBwZGV2OwotCWFkYXB0ZXItPmh3LmJhY2sgPSBhZGFwdGVyOwotCi0JYWRhcHRlci0+aHcuaHdfYWRkciA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKLQlpZiAoIWFkYXB0ZXItPmh3Lmh3X2FkZHIpIHsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfcGNpX2lvbWFwOwotCX0KLQkvKiBnZXQgZGV2aWNlIHJldmlzaW9uIG51bWJlciAqLwotCWFkYXB0ZXItPmh3LmRldl9yZXYgPSBpb3JlYWQxNihhZGFwdGVyLT5ody5od19hZGRyICsKLQkJKFJFR19NQVNURVJfQ1RSTCArIDIpKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmVyc2lvbiAlc1xuIiwgRFJJVkVSX1ZFUlNJT04pOwotCi0JLyogc2V0IGRlZmF1bHQgcmluZyByZXNvdXJjZSBjb3VudHMgKi8KLQlhZGFwdGVyLT5yZmRfcmluZy5jb3VudCA9IGFkYXB0ZXItPnJyZF9yaW5nLmNvdW50ID0gQVRMMV9ERUZBVUxUX1JGRDsKLQlhZGFwdGVyLT50cGRfcmluZy5jb3VudCA9IEFUTDFfREVGQVVMVF9UUEQ7Ci0KLQlhZGFwdGVyLT5taWkuZGV2ID0gbmV0ZGV2OwotCWFkYXB0ZXItPm1paS5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7Ci0JYWRhcHRlci0+bWlpLm1kaW9fd3JpdGUgPSBtZGlvX3dyaXRlOwotCWFkYXB0ZXItPm1paS5waHlfaWRfbWFzayA9IDB4MWY7Ci0JYWRhcHRlci0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7Ci0KLQluZXRkZXYtPm9wZW4gPSAmYXRsMV9vcGVuOwotCW5ldGRldi0+c3RvcCA9ICZhdGwxX2Nsb3NlOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gJmF0bDFfeG1pdF9mcmFtZTsKLQluZXRkZXYtPmdldF9zdGF0cyA9ICZhdGwxX2dldF9zdGF0czsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZhdGwxX3NldF9tdWx0aTsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZhdGwxX3NldF9tYWM7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gJmF0bDFfY2hhbmdlX210dTsKLQluZXRkZXYtPmRvX2lvY3RsID0gJmF0bDFfaW9jdGw7Ci0JbmV0ZGV2LT50eF90aW1lb3V0ID0gJmF0bDFfdHhfdGltZW91dDsKLQluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBhdGwxX3BvbGxfY29udHJvbGxlcjsKLSNlbmRpZgotCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGF0bDFfdmxhbl9yeF9yZWdpc3RlcjsKLQotCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmYXRsMV9ldGh0b29sX29wczsKLQlhZGFwdGVyLT5iZF9udW1iZXIgPSBjYXJkc19mb3VuZDsKLQotCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwotCWVyciA9IGF0bDFfc3dfaW5pdChhZGFwdGVyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9jb21tb247Ci0KLQluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9IV19DU1VNOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlgpOwotCi0JLyoKLQkgKiBGSVhNRSAtIFVudGlsIHRzbyBwZXJmb3JtYW5jZSBnZXRzIGZpeGVkLCBkaXNhYmxlIHRoZSBmZWF0dXJlLgotCSAqIEVuYWJsZSBpdCB3aXRoIGV0aHRvb2wgLUsgaWYgZGVzaXJlZC4KLQkgKi8KLQkvKiBuZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOyAqLwotCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0KLQkvKgotCSAqIHBhdGNoIGZvciBzb21lIEwxIG9mIG9sZCB2ZXJzaW9uLAotCSAqIHRoZSBmaW5hbCB2ZXJzaW9uIG9mIEwxIG1heSBub3QgbmVlZCB0aGVzZQotCSAqIHBhdGNoZXMKLQkgKi8KLQkvKiBhdGwxX3BjaWVfcGF0Y2goYWRhcHRlcik7ICovCi0KLQkvKiByZWFsbHkgcmVzZXQgR1BIWSBjb3JlICovCi0JaW93cml0ZTE2KDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfR1BIWV9FTkFCTEUpOwotCi0JLyoKLQkgKiByZXNldCB0aGUgY29udHJvbGxlciB0bwotCSAqIHB1dCB0aGUgZGV2aWNlIGluIGEga25vd24gZ29vZCBzdGFydGluZyBzdGF0ZQotCSAqLwotCWlmIChhdGwxX3Jlc2V0X2h3KCZhZGFwdGVyLT5odykpIHsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfY29tbW9uOwotCX0KLQotCS8qIGNvcHkgdGhlIE1BQyBhZGRyZXNzIG91dCBvZiB0aGUgRUVQUk9NICovCi0JYXRsMV9yZWFkX21hY19hZGRyKCZhZGFwdGVyLT5odyk7Ci0JbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKLQotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKSkgewotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9jb21tb247Ci0JfQotCi0JYXRsMV9jaGVja19vcHRpb25zKGFkYXB0ZXIpOwotCi0JLyogcHJlLWluaXQgdGhlIE1BQywgYW5kIHNldHVwIGxpbmsgKi8KLQllcnIgPSBhdGwxX2luaXRfaHcoJmFkYXB0ZXItPmh3KTsKLQlpZiAoZXJyKSB7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyX2NvbW1vbjsKLQl9Ci0KLQlhdGwxX3BjaWVfcGF0Y2goYWRhcHRlcik7Ci0JLyogYXNzdW1lIHdlIGhhdmUgbm8gbGluayBmb3Igbm93ICovCi0JbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0KLQlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmYXRsMV93YXRjaGRvZzsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKLQotCWluaXRfdGltZXIoJmFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIpOwotCWFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIuZnVuY3Rpb24gPSAmYXRsMV9waHlfY29uZmlnOwotCWFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7Ci0JYWRhcHRlci0+cGh5X3RpbWVyX3BlbmRpbmcgPSBmYWxzZTsKLQotCUlOSVRfV09SSygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrLCBhdGwxX3R4X3RpbWVvdXRfdGFzayk7Ci0KLQlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfY2hnX3Rhc2ssIGF0bDFfbGlua19jaGdfdGFzayk7Ci0KLQlJTklUX1dPUksoJmFkYXB0ZXItPnBjaWVfZG1hX3RvX3JzdF90YXNrLCBhdGwxX3R4X3RpbWVvdXRfdGFzayk7Ci0KLQllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9jb21tb247Ci0KLQljYXJkc19mb3VuZCsrOwotCWF0bDFfdmlhX3dvcmthcm91bmQoYWRhcHRlcik7Ci0JcmV0dXJuIDA7Ci0KLWVycl9jb21tb246Ci0JcGNpX2lvdW5tYXAocGRldiwgYWRhcHRlci0+aHcuaHdfYWRkcik7Ci1lcnJfcGNpX2lvbWFwOgotCWZyZWVfbmV0ZGV2KG5ldGRldik7Ci1lcnJfYWxsb2NfZXRoZXJkZXY6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLWVycl9kbWE6Ci1lcnJfcmVxdWVzdF9yZWdpb25zOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogYXRsMV9yZW1vdmUgLSBEZXZpY2UgUmVtb3ZhbCBSb3V0aW5lCi0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKLSAqCi0gKiBhdGwxX3JlbW92ZSBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gdG8gYWxlcnQgdGhlIGRyaXZlcgotICogdGhhdCBpdCBzaG91bGQgcmVsZWFzZSBhIFBDSSBkZXZpY2UuICBUaGUgY291bGQgYmUgY2F1c2VkIGJ5IGEKLSAqIEhvdC1QbHVnIGV2ZW50LCBvciBiZWNhdXNlIHRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmcm9tCi0gKiBtZW1vcnkuCi0gKi8KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhdGwxX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0JLyogRGV2aWNlIG5vdCBhdmFpbGFibGUuIFJldHVybi4gKi8KLQlpZiAoIW5ldGRldikKLQkJcmV0dXJuOwotCi0JYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQkvKiBTb21lIGF0bDEgYm9hcmRzIGxhY2sgcGVyc2lzdGVudCBzdG9yYWdlIGZvciB0aGVpciBNQUMsIGFuZCBnZXQgaXQKLQkgKiBmcm9tIHRoZSBCSU9TIGR1cmluZyBQT1NULiAgSWYgd2UndmUgYmVlbiBtZXNzaW5nIHdpdGggdGhlIE1BQwotCSAqIGFkZHJlc3MsIHdlIG5lZWQgdG8gc2F2ZSB0aGUgcGVybWFuZW50IG9uZS4KLQkgKi8KLQlpZiAobWVtY21wKGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBhZGFwdGVyLT5ody5wZXJtX21hY19hZGRyLCBFVEhfQUxFTikpIHsKLQkJbWVtY3B5KGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBhZGFwdGVyLT5ody5wZXJtX21hY19hZGRyLAotCQkJRVRIX0FMRU4pOwotCQlhdGwxX3NldF9tYWNfYWRkcigmYWRhcHRlci0+aHcpOwotCX0KLQotCWlvd3JpdGUxNigwLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0dQSFlfRU5BQkxFKTsKLQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwotCXBjaV9pb3VubWFwKHBkZXYsIGFkYXB0ZXItPmh3Lmh3X2FkZHIpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0JZnJlZV9uZXRkZXYobmV0ZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhdGwxX2RyaXZlciA9IHsKLQkubmFtZSA9IGF0bDFfZHJpdmVyX25hbWUsCi0JLmlkX3RhYmxlID0gYXRsMV9wY2lfdGJsLAotCS5wcm9iZSA9IGF0bDFfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGF0bDFfcmVtb3ZlKSwKLQkuc3VzcGVuZCA9IGF0bDFfc3VzcGVuZCwKLQkucmVzdW1lID0gYXRsMV9yZXN1bWUKLX07Ci0KLS8qCi0gKiBhdGwxX2V4aXRfbW9kdWxlIC0gRHJpdmVyIEV4aXQgQ2xlYW51cCBSb3V0aW5lCi0gKgotICogYXRsMV9leGl0X21vZHVsZSBpcyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIGRyaXZlciBpcyByZW1vdmVkCi0gKiBmcm9tIG1lbW9yeS4KLSAqLwotc3RhdGljIHZvaWQgX19leGl0IGF0bDFfZXhpdF9tb2R1bGUodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0bDFfZHJpdmVyKTsKLX0KLQotLyoKLSAqIGF0bDFfaW5pdF9tb2R1bGUgLSBEcml2ZXIgUmVnaXN0cmF0aW9uIFJvdXRpbmUKLSAqCi0gKiBhdGwxX2luaXRfbW9kdWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKLSAqIGxvYWRlZC4gQWxsIGl0IGRvZXMgaXMgcmVnaXN0ZXIgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYXRsMV9pbml0X21vZHVsZSh2b2lkKQotewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGwxX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGF0bDFfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoYXRsMV9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfcGFyYW0uYyBiL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9wYXJhbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjQ2YmI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9wYXJhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDYgQXR0YW5zaWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQoYykgMjAwNiBDaHJpcyBTbm9vayA8Y3Nub29rQHJlZGhhdC5jb20+Ci0gKiBDb3B5cmlnaHQoYykgMjAwNiBKYXkgQ2xpYnVybiA8amNsaWJ1cm5AZ21haWwuY29tPgotICoKLSAqIERlcml2ZWQgZnJvbSBJbnRlbCBlMTAwMCBkcml2ZXIKLSAqIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5Ci0gKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgImF0bDEuaCIKLQotLyoKLSAqIFRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIGFkanVzdCB0aGUKLSAqIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzIHRoYXQgdGhlIGRyaXZlciBjYW4gbWFuYWdlLgotICovCi0jZGVmaW5lIEFUTDFfTUFYX05JQyA0Ci0KLSNkZWZpbmUgT1BUSU9OX1VOU0VUICAgIC0xCi0jZGVmaW5lIE9QVElPTl9ESVNBQkxFRCAwCi0jZGVmaW5lIE9QVElPTl9FTkFCTEVEICAxCi0KLSNkZWZpbmUgQVRMMV9QQVJBTV9JTklUIHsgWzAgLi4uIEFUTDFfTUFYX05JQ10gPSBPUFRJT05fVU5TRVQgfQotCi0vKgotICogSW50ZXJydXB0IE1vZGVyYXRlIFRpbWVyIGluIHVuaXRzIG9mIDIgdXMKLSAqCi0gKiBWYWxpZCBSYW5nZTogMTAtNjU1MzUKLSAqCi0gKiBEZWZhdWx0IFZhbHVlOiAxMDAgKDIwMHVzKQotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgaW50X21vZF90aW1lcltBVEwxX01BWF9OSUMrMV0gPSBBVEwxX1BBUkFNX0lOSVQ7Ci1zdGF0aWMgaW50IG51bV9pbnRfbW9kX3RpbWVyID0gMDsKLW1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChpbnRfbW9kX3RpbWVyLCBpbnRfbW9kX3RpbWVyLCBpbnQsICZudW1faW50X21vZF90aW1lciwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGludF9tb2RfdGltZXIsICJJbnRlcnJ1cHQgbW9kZXJhdG9yIHRpbWVyIik7Ci0KLS8qCi0gKiBmbGFzaF92ZW5kb3IKLSAqCi0gKiBWYWxpZCBSYW5nZTogMC0yCi0gKgotICogMCAtIEF0bWVsCi0gKiAxIC0gU1NUCi0gKiAyIC0gU1QKLSAqCi0gKiBEZWZhdWx0IFZhbHVlOiAwCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBmbGFzaF92ZW5kb3JbQVRMMV9NQVhfTklDKzFdID0gQVRMMV9QQVJBTV9JTklUOwotc3RhdGljIGludCBudW1fZmxhc2hfdmVuZG9yID0gMDsKLW1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChmbGFzaF92ZW5kb3IsIGZsYXNoX3ZlbmRvciwgaW50LCAmbnVtX2ZsYXNoX3ZlbmRvciwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZsYXNoX3ZlbmRvciwgIlNQSSBmbGFzaCB2ZW5kb3IiKTsKLQotI2RlZmluZSBERUZBVUxUX0lOVF9NT0RfQ05UCTEwMAkvKiAyMDB1cyAqLwotI2RlZmluZSBNQVhfSU5UX01PRF9DTlQJCTY1MDAwCi0jZGVmaW5lIE1JTl9JTlRfTU9EX0NOVAkJNTAKLQotI2RlZmluZSBGTEFTSF9WRU5ET1JfREVGQVVMVAkwCi0jZGVmaW5lIEZMQVNIX1ZFTkRPUl9NSU4JMAotI2RlZmluZSBGTEFTSF9WRU5ET1JfTUFYCTIKLQotc3RydWN0IGF0bDFfb3B0aW9uIHsKLQllbnVtIHsgZW5hYmxlX29wdGlvbiwgcmFuZ2Vfb3B0aW9uLCBsaXN0X29wdGlvbiB9IHR5cGU7Ci0JY2hhciAqbmFtZTsKLQljaGFyICplcnI7Ci0JaW50IGRlZjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7CS8qIHJhbmdlX29wdGlvbiBpbmZvICovCi0JCQlpbnQgbWluOwotCQkJaW50IG1heDsKLQkJfSByOwotCQlzdHJ1Y3QgewkvKiBsaXN0X29wdGlvbiBpbmZvICovCi0JCQlpbnQgbnI7Ci0JCQlzdHJ1Y3QgYXRsMV9vcHRfbGlzdCB7Ci0JCQkJaW50IGk7Ci0JCQkJY2hhciAqc3RyOwotCQkJfSAqcDsKLQkJfSBsOwotCX0gYXJnOwotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgYXRsMV92YWxpZGF0ZV9vcHRpb24oaW50ICp2YWx1ZSwgc3RydWN0IGF0bDFfb3B0aW9uICpvcHQsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCWlmICgqdmFsdWUgPT0gT1BUSU9OX1VOU0VUKSB7Ci0JCSp2YWx1ZSA9IG9wdC0+ZGVmOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzd2l0Y2ggKG9wdC0+dHlwZSkgewotCWNhc2UgZW5hYmxlX29wdGlvbjoKLQkJc3dpdGNoICgqdmFsdWUpIHsKLQkJY2FzZSBPUFRJT05fRU5BQkxFRDoKLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyBlbmFibGVkXG4iLCBvcHQtPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgT1BUSU9OX0RJU0FCTEVEOgotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIGRpc2FibGVkXG4iLCBvcHQtPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSByYW5nZV9vcHRpb246Ci0JCWlmICgqdmFsdWUgPj0gb3B0LT5hcmcuci5taW4gJiYgKnZhbHVlIDw9IG9wdC0+YXJnLnIubWF4KSB7Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgc2V0IHRvICVpXG4iLCBvcHQtPm5hbWUsCi0JCQkJKnZhbHVlKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgbGlzdF9vcHRpb246ewotCQkJaW50IGk7Ci0JCQlzdHJ1Y3QgYXRsMV9vcHRfbGlzdCAqZW50OwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgb3B0LT5hcmcubC5ucjsgaSsrKSB7Ci0JCQkJZW50ID0gJm9wdC0+YXJnLmwucFtpXTsKLQkJCQlpZiAoKnZhbHVlID09IGVudC0+aSkgewotCQkJCQlpZiAoZW50LT5zdHJbMF0gIT0gJ1wwJykKLQkJCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlc1xuIiwKLQkJCQkJCQllbnQtPnN0cik7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbnZhbGlkICVzIHNwZWNpZmllZCAoJWkpICVzXG4iLAotCQlvcHQtPm5hbWUsICp2YWx1ZSwgb3B0LT5lcnIpOwotCSp2YWx1ZSA9IG9wdC0+ZGVmOwotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIGF0bDFfY2hlY2tfb3B0aW9ucyAtIFJhbmdlIENoZWNraW5nIGZvciBDb21tYW5kIExpbmUgUGFyYW1ldGVycwotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCi0gKgotICogVGhpcyByb3V0aW5lIGNoZWNrcyBhbGwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgZm9yIHZhbGlkIHVzZXIKLSAqIGlucHV0LiAgSWYgYW4gaW52YWxpZCB2YWx1ZSBpcyBnaXZlbiwgb3IgaWYgbm8gdXNlciBzcGVjaWZpZWQKLSAqIHZhbHVlIGV4aXN0cywgYSBkZWZhdWx0IHZhbHVlIGlzIHVzZWQuICBUaGUgZmluYWwgdmFsdWUgaXMgc3RvcmVkCi0gKiBpbiBhIHZhcmlhYmxlIGluIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KLSAqLwotdm9pZCBfX2RldmluaXQgYXRsMV9jaGVja19vcHRpb25zKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCWludCBiZCA9IGFkYXB0ZXItPmJkX251bWJlcjsKLQlpZiAoYmQgPj0gQVRMMV9NQVhfTklDKSB7Ci0JCWRldl9ub3RpY2UoJnBkZXYtPmRldiwgIm5vIGNvbmZpZ3VyYXRpb24gZm9yIGJvYXJkIyVpXG4iLCBiZCk7Ci0JCWRldl9ub3RpY2UoJnBkZXYtPmRldiwgInVzaW5nIGRlZmF1bHRzIGZvciBhbGwgdmFsdWVzXG4iKTsKLQl9Ci0JewkJCS8qIEludGVycnVwdCBNb2RlcmF0ZSBUaW1lciAqLwotCQlzdHJ1Y3QgYXRsMV9vcHRpb24gb3B0ID0gewotCQkJLnR5cGUgPSByYW5nZV9vcHRpb24sCi0JCQkubmFtZSA9ICJJbnRlcnJ1cHQgTW9kZXJhdG9yIFRpbWVyIiwKLQkJCS5lcnIgPSAidXNpbmcgZGVmYXVsdCBvZiAiCi0JCQkJX19NT0RVTEVfU1RSSU5HKERFRkFVTFRfSU5UX01PRF9DTlQpLAotCQkJLmRlZiA9IERFRkFVTFRfSU5UX01PRF9DTlQsCi0JCQkuYXJnID0gey5yID0KLQkJCQl7Lm1pbiA9IE1JTl9JTlRfTU9EX0NOVCwubWF4ID0gTUFYX0lOVF9NT0RfQ05UfX0KLQkJfTsKLQkJaW50IHZhbDsKLQkJaWYgKG51bV9pbnRfbW9kX3RpbWVyID4gYmQpIHsKLQkJCXZhbCA9IGludF9tb2RfdGltZXJbYmRdOwotCQkJYXRsMV92YWxpZGF0ZV9vcHRpb24oJnZhbCwgJm9wdCwgcGRldik7Ci0JCQlhZGFwdGVyLT5pbXQgPSAodTE2KSB2YWw7Ci0JCX0gZWxzZQotCQkJYWRhcHRlci0+aW10ID0gKHUxNikgKG9wdC5kZWYpOwotCX0KLQotCXsJCQkvKiBGbGFzaCBWZW5kb3IgKi8KLQkJc3RydWN0IGF0bDFfb3B0aW9uIG9wdCA9IHsKLQkJCS50eXBlID0gcmFuZ2Vfb3B0aW9uLAotCQkJLm5hbWUgPSAiU1BJIEZsYXNoIFZlbmRvciIsCi0JCQkuZXJyID0gInVzaW5nIGRlZmF1bHQgb2YgIgotCQkJCV9fTU9EVUxFX1NUUklORyhGTEFTSF9WRU5ET1JfREVGQVVMVCksCi0JCQkuZGVmID0gREVGQVVMVF9JTlRfTU9EX0NOVCwKLQkJCS5hcmcgPSB7LnIgPQotCQkJCXsubWluID0gRkxBU0hfVkVORE9SX01JTiwubWF4ID0KLQkJCQkgRkxBU0hfVkVORE9SX01BWH19Ci0JCX07Ci0JCWludCB2YWw7Ci0JCWlmIChudW1fZmxhc2hfdmVuZG9yID4gYmQpIHsKLQkJCXZhbCA9IGZsYXNoX3ZlbmRvcltiZF07Ci0JCQlhdGwxX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKLQkJCWFkYXB0ZXItPmh3LmZsYXNoX3ZlbmRvciA9ICh1OCkgdmFsOwotCQl9IGVsc2UKLQkJCWFkYXB0ZXItPmh3LmZsYXNoX3ZlbmRvciA9ICh1OCkgKG9wdC5kZWYpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9hdGx4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNDU1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9hdGx4L01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19BVEwxKQkrPSBhdGwxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4NmZjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jCkBAIC0wLDAgKzEsMzU2NCBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwNiBBdHRhbnNpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA2IC0gMjAwNyBDaHJpcyBTbm9vayA8Y3Nub29rQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQoYykgMjAwNiBKYXkgQ2xpYnVybiA8amNsaWJ1cm5AZ21haWwuY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBJbnRlbCBlMTAwMCBkcml2ZXIKKyAqIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIFhpb25nIEh1YW5nIDx4aW9uZ19odWFuZ0BhdHRhbnNpYy5jb20+CisgKiBBdHRhbnNpYyBUZWNobm9sb2d5IENvcnAuIDNGIDE0NywgWGlhbnpoZW5nIDl0aCBSb2FkLCBaaHViZWksCisgKiBYaW56aHUgIDMwMiwgVEFJV0FOLCBSRVBVQkxJQyBPRiBDSElOQQorICoKKyAqIENocmlzIFNub29rIDxjc25vb2tAcmVkaGF0LmNvbT4KKyAqIEpheSBDbGlidXJuIDxqY2xpYnVybkBnbWFpbC5jb20+CisgKgorICogVGhpcyB2ZXJzaW9uIGlzIGFkYXB0ZWQgZnJvbSB0aGUgQXR0YW5zaWMgcmVmZXJlbmNlIGRyaXZlciBmb3IKKyAqIGluY2x1c2lvbiBpbiB0aGUgTGludXgga2VybmVsLiAgSXQgaXMgY3VycmVudGx5IHVuZGVyIGhlYXZ5IGRldmVsb3BtZW50LgorICogQSB2ZXJ5IGluY29tcGxldGUgbGlzdCBvZiB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRlYWx0IHdpdGg6CisgKgorICogVE9ETzoKKyAqIFdha2Ugb24gTEFOLgorICogQWRkIG1vcmUgZXRodG9vbCBmdW5jdGlvbnMuCisgKiBGaXggYWJzdHJ1c2UgaXJxIGVuYWJsZS9kaXNhYmxlIGNvbmRpdGlvbiBkZXNjcmliZWQgaGVyZToKKyAqCWh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9bGludXgtbmV0ZGV2Jm09MTE2Mzk4NTA4NTAwNTUzJnc9MgorICoKKyAqIE5FRURTIFRFU1RJTkc6CisgKiBWTEFOCisgKiBtdWx0aWNhc3QKKyAqIHByb21pc2N1b3VzIG1vZGUKKyAqIGludGVycnVwdCBjb2FsZXNjaW5nCisgKiBTTVAgdG9ydHVyZSB0ZXN0aW5nCisgKi8KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorCisjaW5jbHVkZSAiYXRsMS5oIgorCisvKiBUZW1wb3JhcnkgaGFjayBmb3IgbWVyZ2luZyBhdGwxIGFuZCBhdGwyICovCisjaW5jbHVkZSAiYXRseC5jIgorCisvKgorICogYXRsMV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRsMV9wY2lfdGJsW10gPSB7CisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMSl9LAorCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KKwl7MCx9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0bDFfcGNpX3RibCk7CisKK3N0YXRpYyBjb25zdCB1MzIgYXRsMV9kZWZhdWx0X21zZyA9IE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfAorCU5FVElGX01TR19MSU5LIHwgTkVUSUZfTVNHX1RJTUVSIHwgTkVUSUZfTVNHX0lGRE9XTiB8IE5FVElGX01TR19JRlVQOworCitzdGF0aWMgaW50IGRlYnVnID0gLTE7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiTWVzc2FnZSBsZXZlbCAoMD1ub25lLC4uLiwxNj1hbGwpIik7CisKKy8qCisgKiBSZXNldCB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgdW5pdHM7IG1hc2sgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzLgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIHJldHVybiA6IDAgIG9yICBpZGxlIHN0YXR1cyAoaWYgZXJyb3IpCisgKi8KK3N0YXRpYyBzMzIgYXRsMV9yZXNldF9odyhzdHJ1Y3QgYXRsMV9odyAqaHcpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBody0+YmFjay0+cGRldjsKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTMyIGljcjsKKwlpbnQgaTsKKworCS8qCisJICogQ2xlYXIgSW50ZXJydXB0IG1hc2sgdG8gc3RvcCBib2FyZCBmcm9tIGdlbmVyYXRpbmcKKwkgKiBpbnRlcnJ1cHRzICYgQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cworCSAqLworCS8qCisJICogaW93cml0ZTMyKDAsIGh3LT5od19hZGRyICsgUkVHX0lNUik7CisJICogaW93cml0ZTMyKDB4ZmZmZmZmZmYsIGh3LT5od19hZGRyICsgUkVHX0lTUik7CisJICovCisKKwkvKgorCSAqIElzc3VlIFNvZnQgUmVzZXQgdG8gdGhlIE1BQy4gIFRoaXMgd2lsbCByZXNldCB0aGUgY2hpcCdzCisJICogdHJhbnNtaXQsIHJlY2VpdmUsIERNQS4gIEl0IHdpbGwgbm90IGVmZmVjdAorCSAqIHRoZSBjdXJyZW50IFBDSSBjb25maWd1cmF0aW9uLiAgVGhlIGdsb2JhbCByZXNldCBiaXQgaXMgc2VsZi0KKwkgKiBjbGVhcmluZywgYW5kIHNob3VsZCBjbGVhciB3aXRoaW4gYSBtaWNyb3NlY29uZC4KKwkgKi8KKwlpb3dyaXRlMzIoTUFTVEVSX0NUUkxfU09GVF9SU1QsIGh3LT5od19hZGRyICsgUkVHX01BU1RFUl9DVFJMKTsKKwlpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19NQVNURVJfQ1RSTCk7CisKKwlpb3dyaXRlMTYoMSwgaHctPmh3X2FkZHIgKyBSRUdfUEhZX0VOQUJMRSk7CisJaW9yZWFkMTYoaHctPmh3X2FkZHIgKyBSRUdfUEhZX0VOQUJMRSk7CisKKwkvKiBkZWxheSBhYm91dCAxbXMgKi8KKwltc2xlZXAoMSk7CisKKwkvKiBXYWl0IGF0IGxlYXN0IDEwbXMgZm9yIEFsbCBtb2R1bGUgdG8gYmUgSWRsZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWljciA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX0lETEVfU1RBVFVTKTsKKwkJaWYgKCFpY3IpCisJCQlicmVhazsKKwkJLyogZGVsYXkgMSBtcyAqLworCQltc2xlZXAoMSk7CisJCS8qIEZJWE1FOiBzdGlsbCB0aGUgcmlnaHQgd2F5IHRvIGRvIHRoaXM/ICovCisJCWNwdV9yZWxheCgpOworCX0KKworCWlmIChpY3IpIHsKKwkJaWYgKG5ldGlmX21zZ19odyhhZGFwdGVyKSkKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIklDUiA9IDB4JXhcbiIsIGljcik7CisJCXJldHVybiBpY3I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGZ1bmN0aW9uIGFib3V0IEVFUFJPTQorICoKKyAqIGNoZWNrX2VlcHJvbV9leGlzdAorICogcmV0dXJuIDAgaWYgZWVwcm9tIGV4aXN0CisgKi8KK3N0YXRpYyBpbnQgYXRsMV9jaGVja19lZXByb21fZXhpc3Qoc3RydWN0IGF0bDFfaHcgKmh3KQoreworCXUzMiB2YWx1ZTsKKwl2YWx1ZSA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9DVFJMKTsKKwlpZiAodmFsdWUgJiBTUElfRkxBU0hfQ1RSTF9FTl9WUEQpIHsKKwkJdmFsdWUgJj0gflNQSV9GTEFTSF9DVFJMX0VOX1ZQRDsKKwkJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfQ1RSTCk7CisJfQorCisJdmFsdWUgPSBpb3JlYWQxNihody0+aHdfYWRkciArIFJFR19QQ0lFX0NBUF9MSVNUKTsKKwlyZXR1cm4gKCh2YWx1ZSAmIDB4RkYwMCkgPT0gMHg2QzAwKSA/IDAgOiAxOworfQorCitzdGF0aWMgYm9vbCBhdGwxX3JlYWRfZWVwcm9tKHN0cnVjdCBhdGwxX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpwX3ZhbHVlKQoreworCWludCBpOworCXUzMiBjb250cm9sOworCisJaWYgKG9mZnNldCAmIDMpCisJCS8qIGFkZHJlc3MgZG8gbm90IGFsaWduICovCisJCXJldHVybiBmYWxzZTsKKworCWlvd3JpdGUzMigwLCBody0+aHdfYWRkciArIFJFR19WUERfREFUQSk7CisJY29udHJvbCA9IChvZmZzZXQgJiBWUERfQ0FQX1ZQRF9BRERSX01BU0spIDw8IFZQRF9DQVBfVlBEX0FERFJfU0hJRlQ7CisJaW93cml0ZTMyKGNvbnRyb2wsIGh3LT5od19hZGRyICsgUkVHX1ZQRF9DQVApOworCWlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1ZQRF9DQVApOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJbXNsZWVwKDIpOworCQljb250cm9sID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfVlBEX0NBUCk7CisJCWlmIChjb250cm9sICYgVlBEX0NBUF9WUERfRkxBRykKKwkJCWJyZWFrOworCX0KKwlpZiAoY29udHJvbCAmIFZQRF9DQVBfVlBEX0ZMQUcpIHsKKwkJKnBfdmFsdWUgPSBpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19WUERfREFUQSk7CisJCXJldHVybiB0cnVlOworCX0KKwkvKiB0aW1lb3V0ICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogUmVhZHMgdGhlIHZhbHVlIGZyb20gYSBQSFkgcmVnaXN0ZXIKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiByZWdfYWRkciAtIGFkZHJlc3Mgb2YgdGhlIFBIWSByZWdpc3RlciB0byByZWFkCisgKi8KK3MzMiBhdGwxX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgYXRsMV9odyAqaHcsIHUxNiByZWdfYWRkciwgdTE2ICpwaHlfZGF0YSkKK3sKKwl1MzIgdmFsOworCWludCBpOworCisJdmFsID0gKCh1MzIpIChyZWdfYWRkciAmIE1ESU9fUkVHX0FERFJfTUFTSykpIDw8IE1ESU9fUkVHX0FERFJfU0hJRlQgfAorCQlNRElPX1NUQVJUIHwgTURJT19TVVBfUFJFQU1CTEUgfCBNRElPX1JXIHwgTURJT19DTEtfMjVfNCA8PAorCQlNRElPX0NMS19TRUxfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgaHctPmh3X2FkZHIgKyBSRUdfTURJT19DVFJMKTsKKwlpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IE1ESU9fV0FJVF9USU1FUzsgaSsrKSB7CisJCXVkZWxheSgyKTsKKwkJdmFsID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfTURJT19DVFJMKTsKKwkJaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoISh2YWwgJiAoTURJT19TVEFSVCB8IE1ESU9fQlVTWSkpKSB7CisJCSpwaHlfZGF0YSA9ICh1MTYpIHZhbDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBBVExYX0VSUl9QSFk7Cit9CisKKyNkZWZpbmUgQ1VTVE9NX1NQSV9DU19TRVRVUAkyCisjZGVmaW5lIENVU1RPTV9TUElfQ0xLX0hJCTIKKyNkZWZpbmUgQ1VTVE9NX1NQSV9DTEtfTE8JMgorI2RlZmluZSBDVVNUT01fU1BJX0NTX0hPTEQJMgorI2RlZmluZSBDVVNUT01fU1BJX0NTX0hJCTMKKworc3RhdGljIGJvb2wgYXRsMV9zcGlfcmVhZChzdHJ1Y3QgYXRsMV9odyAqaHcsIHUzMiBhZGRyLCB1MzIgKmJ1ZikKK3sKKwlpbnQgaTsKKwl1MzIgdmFsdWU7CisKKwlpb3dyaXRlMzIoMCwgaHctPmh3X2FkZHIgKyBSRUdfU1BJX0RBVEEpOworCWlvd3JpdGUzMihhZGRyLCBody0+aHdfYWRkciArIFJFR19TUElfQUREUik7CisKKwl2YWx1ZSA9IFNQSV9GTEFTSF9DVFJMX1dBSVRfUkVBRFkgfAorCSAgICAoQ1VTVE9NX1NQSV9DU19TRVRVUCAmIFNQSV9GTEFTSF9DVFJMX0NTX1NFVFVQX01BU0spIDw8CisJICAgIFNQSV9GTEFTSF9DVFJMX0NTX1NFVFVQX1NISUZUIHwgKENVU1RPTV9TUElfQ0xLX0hJICYKKwkJCQkJICAgICBTUElfRkxBU0hfQ1RSTF9DTEtfSElfTUFTSykgPDwKKwkgICAgU1BJX0ZMQVNIX0NUUkxfQ0xLX0hJX1NISUZUIHwgKENVU1RPTV9TUElfQ0xLX0xPICYKKwkJCQkJICAgU1BJX0ZMQVNIX0NUUkxfQ0xLX0xPX01BU0spIDw8CisJICAgIFNQSV9GTEFTSF9DVFJMX0NMS19MT19TSElGVCB8IChDVVNUT01fU1BJX0NTX0hPTEQgJgorCQkJCQkgICBTUElfRkxBU0hfQ1RSTF9DU19IT0xEX01BU0spIDw8CisJICAgIFNQSV9GTEFTSF9DVFJMX0NTX0hPTERfU0hJRlQgfCAoQ1VTVE9NX1NQSV9DU19ISSAmCisJCQkJCSAgICBTUElfRkxBU0hfQ1RSTF9DU19ISV9NQVNLKSA8PAorCSAgICBTUElfRkxBU0hfQ1RSTF9DU19ISV9TSElGVCB8ICgxICYgU1BJX0ZMQVNIX0NUUkxfSU5TX01BU0spIDw8CisJICAgIFNQSV9GTEFTSF9DVFJMX0lOU19TSElGVDsKKworCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX0NUUkwpOworCisJdmFsdWUgfD0gU1BJX0ZMQVNIX0NUUkxfU1RBUlQ7CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfQ1RSTCk7CisJaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJbXNsZWVwKDEpOworCQl2YWx1ZSA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9DVFJMKTsKKwkJaWYgKCEodmFsdWUgJiBTUElfRkxBU0hfQ1RSTF9TVEFSVCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAodmFsdWUgJiBTUElfRkxBU0hfQ1RSTF9TVEFSVCkKKwkJcmV0dXJuIGZhbHNlOworCisJKmJ1ZiA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1NQSV9EQVRBKTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogZ2V0X3Blcm1hbmVudF9hZGRyZXNzCisgKiByZXR1cm4gMCBpZiBnZXQgdmFsaWQgbWFjIGFkZHJlc3MsCisgKi8KK3N0YXRpYyBpbnQgYXRsMV9nZXRfcGVybWFuZW50X2FkZHJlc3Moc3RydWN0IGF0bDFfaHcgKmh3KQoreworCXUzMiBhZGRyWzJdOworCXUzMiBpLCBjb250cm9sOworCXUxNiByZWc7CisJdTggZXRoX2FkZHJbRVRIX0FMRU5dOworCWJvb2wga2V5X3ZhbGlkOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoaHctPnBlcm1fbWFjX2FkZHIpKQorCQlyZXR1cm4gMDsKKworCS8qIGluaXQgKi8KKwlhZGRyWzBdID0gYWRkclsxXSA9IDA7CisKKwlpZiAoIWF0bDFfY2hlY2tfZWVwcm9tX2V4aXN0KGh3KSkgeworCQlyZWcgPSAwOworCQlrZXlfdmFsaWQgPSBmYWxzZTsKKwkJLyogUmVhZCBvdXQgYWxsIEVFUFJPTSBjb250ZW50ICovCisJCWkgPSAwOworCQl3aGlsZSAoMSkgeworCQkJaWYgKGF0bDFfcmVhZF9lZXByb20oaHcsIGkgKyAweDEwMCwgJmNvbnRyb2wpKSB7CisJCQkJaWYgKGtleV92YWxpZCkgeworCQkJCQlpZiAocmVnID09IFJFR19NQUNfU1RBX0FERFIpCisJCQkJCQlhZGRyWzBdID0gY29udHJvbDsKKwkJCQkJZWxzZSBpZiAocmVnID09IChSRUdfTUFDX1NUQV9BRERSICsgNCkpCisJCQkJCQlhZGRyWzFdID0gY29udHJvbDsKKwkJCQkJa2V5X3ZhbGlkID0gZmFsc2U7CisJCQkJfSBlbHNlIGlmICgoY29udHJvbCAmIDB4ZmYpID09IDB4NUEpIHsKKwkJCQkJa2V5X3ZhbGlkID0gdHJ1ZTsKKwkJCQkJcmVnID0gKHUxNikgKGNvbnRyb2wgPj4gMTYpOworCQkJCX0gZWxzZQorCQkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCS8qIHJlYWQgZXJyb3IgKi8KKwkJCQlicmVhazsKKwkJCWkgKz0gNDsKKwkJfQorCisJCSoodTMyICopICZldGhfYWRkclsyXSA9IHN3YWIzMihhZGRyWzBdKTsKKwkJKih1MTYgKikgJmV0aF9hZGRyWzBdID0gc3dhYjE2KCoodTE2ICopICZhZGRyWzFdKTsKKwkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2FkZHIpKSB7CisJCQltZW1jcHkoaHctPnBlcm1fbWFjX2FkZHIsIGV0aF9hZGRyLCBFVEhfQUxFTik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBzZWUgaWYgU1BJIEZMQUdTIGV4aXN0ID8gKi8KKwlhZGRyWzBdID0gYWRkclsxXSA9IDA7CisJcmVnID0gMDsKKwlrZXlfdmFsaWQgPSBmYWxzZTsKKwlpID0gMDsKKwl3aGlsZSAoMSkgeworCQlpZiAoYXRsMV9zcGlfcmVhZChodywgaSArIDB4MWYwMDAsICZjb250cm9sKSkgeworCQkJaWYgKGtleV92YWxpZCkgeworCQkJCWlmIChyZWcgPT0gUkVHX01BQ19TVEFfQUREUikKKwkJCQkJYWRkclswXSA9IGNvbnRyb2w7CisJCQkJZWxzZSBpZiAocmVnID09IChSRUdfTUFDX1NUQV9BRERSICsgNCkpCisJCQkJCWFkZHJbMV0gPSBjb250cm9sOworCQkJCWtleV92YWxpZCA9IGZhbHNlOworCQkJfSBlbHNlIGlmICgoY29udHJvbCAmIDB4ZmYpID09IDB4NUEpIHsKKwkJCQlrZXlfdmFsaWQgPSB0cnVlOworCQkJCXJlZyA9ICh1MTYpIChjb250cm9sID4+IDE2KTsKKwkJCX0gZWxzZQorCQkJCS8qIGRhdGEgZW5kICovCisJCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJLyogcmVhZCBlcnJvciAqLworCQkJYnJlYWs7CisJCWkgKz0gNDsKKwl9CisKKwkqKHUzMiAqKSAmZXRoX2FkZHJbMl0gPSBzd2FiMzIoYWRkclswXSk7CisJKih1MTYgKikgJmV0aF9hZGRyWzBdID0gc3dhYjE2KCoodTE2ICopICZhZGRyWzFdKTsKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihldGhfYWRkcikpIHsKKwkJbWVtY3B5KGh3LT5wZXJtX21hY19hZGRyLCBldGhfYWRkciwgRVRIX0FMRU4pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE9uIHNvbWUgbW90aGVyYm9hcmRzLCB0aGUgTUFDIGFkZHJlc3MgaXMgd3JpdHRlbiBieSB0aGUKKwkgKiBCSU9TIGRpcmVjdGx5IHRvIHRoZSBNQUMgcmVnaXN0ZXIgZHVyaW5nIFBPU1QsIGFuZCBpcworCSAqIG5vdCBzdG9yZWQgaW4gZWVwcm9tLiAgSWYgYWxsIGVsc2UgdGh1cyBmYXIgaGFzIGZhaWxlZAorCSAqIHRvIGZldGNoIHRoZSBwZXJtYW5lbnQgTUFDIGFkZHJlc3MsIHRyeSByZWFkaW5nIGl0IGRpcmVjdGx5LgorCSAqLworCWFkZHJbMF0gPSBpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19NQUNfU1RBX0FERFIpOworCWFkZHJbMV0gPSBpb3JlYWQxNihody0+aHdfYWRkciArIChSRUdfTUFDX1NUQV9BRERSICsgNCkpOworCSoodTMyICopICZldGhfYWRkclsyXSA9IHN3YWIzMihhZGRyWzBdKTsKKwkqKHUxNiAqKSAmZXRoX2FkZHJbMF0gPSBzd2FiMTYoKih1MTYgKikgJmFkZHJbMV0pOworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGV0aF9hZGRyKSkgeworCQltZW1jcHkoaHctPnBlcm1fbWFjX2FkZHIsIGV0aF9hZGRyLCBFVEhfQUxFTik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogUmVhZHMgdGhlIGFkYXB0ZXIncyBNQUMgYWRkcmVzcyBmcm9tIHRoZSBFRVBST00KKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKi8KK3MzMiBhdGwxX3JlYWRfbWFjX2FkZHIoc3RydWN0IGF0bDFfaHcgKmh3KQoreworCXUxNiBpOworCisJaWYgKGF0bDFfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKGh3KSkKKwkJcmFuZG9tX2V0aGVyX2FkZHIoaHctPnBlcm1fbWFjX2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCWh3LT5tYWNfYWRkcltpXSA9IGh3LT5wZXJtX21hY19hZGRyW2ldOworCXJldHVybiAwOworfQorCisvKgorICogSGFzaGVzIGFuIGFkZHJlc3MgdG8gZGV0ZXJtaW5lIGl0cyBsb2NhdGlvbiBpbiB0aGUgbXVsdGljYXN0IHRhYmxlCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogbWNfYWRkciAtIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyB0byBoYXNoCisgKgorICogYXRsMV9oYXNoX21jX2FkZHIKKyAqICBwdXJwb3NlCisgKiAgICAgIHNldCBoYXNoIHZhbHVlIGZvciBhIG11bHRpY2FzdCBhZGRyZXNzCisgKiAgICAgIGhhc2ggY2FsY3UgcHJvY2Vzc2luZyA6CisgKiAgICAgICAgICAxLiBjYWxjdSAzMmJpdCBDUkMgZm9yIG11bHRpY2FzdCBhZGRyZXNzCisgKiAgICAgICAgICAyLiByZXZlcnNlIGNyYyB3aXRoIE1TQiB0byBMU0IKKyAqLwordTMyIGF0bDFfaGFzaF9tY19hZGRyKHN0cnVjdCBhdGwxX2h3ICpodywgdTggKm1jX2FkZHIpCit7CisJdTMyIGNyYzMyLCB2YWx1ZSA9IDA7CisJaW50IGk7CisKKwljcmMzMiA9IGV0aGVyX2NyY19sZSg2LCBtY19hZGRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJdmFsdWUgfD0gKCgoY3JjMzIgPj4gaSkgJiAxKSA8PCAoMzEgLSBpKSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiBTZXRzIHRoZSBiaXQgaW4gdGhlIG11bHRpY2FzdCB0YWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBoYXNoIHZhbHVlLgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIGhhc2hfdmFsdWUgLSBNdWx0aWNhc3QgYWRkcmVzcyBoYXNoIHZhbHVlCisgKi8KK3ZvaWQgYXRsMV9oYXNoX3NldChzdHJ1Y3QgYXRsMV9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKQoreworCXUzMiBoYXNoX2JpdCwgaGFzaF9yZWc7CisJdTMyIG10YTsKKworCS8qCisJICogVGhlIEhBU0ggVGFibGUgIGlzIGEgcmVnaXN0ZXIgYXJyYXkgb2YgMiAzMi1iaXQgcmVnaXN0ZXJzLgorCSAqIEl0IGlzIHRyZWF0ZWQgbGlrZSBhbiBhcnJheSBvZiA2NCBiaXRzLiAgV2Ugd2FudCB0byBzZXQKKwkgKiBiaXQgQml0QXJyYXlbaGFzaF92YWx1ZV0uIFNvIHdlIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcgorCSAqIHRoZSBiaXQgaXMgaW4sIHJlYWQgaXQsIE9SIGluIHRoZSBuZXcgYml0LCB0aGVuIHdyaXRlCisJICogYmFjayB0aGUgbmV3IHZhbHVlLiAgVGhlIHJlZ2lzdGVyIGlzIGRldGVybWluZWQgYnkgdGhlCisJICogdXBwZXIgNyBiaXRzIG9mIHRoZSBoYXNoIHZhbHVlIGFuZCB0aGUgYml0IHdpdGhpbiB0aGF0CisJICogcmVnaXN0ZXIgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGUgdmFsdWUuCisJICovCisJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiAzMSkgJiAweDE7CisJaGFzaF9iaXQgPSAoaGFzaF92YWx1ZSA+PiAyNikgJiAweDFGOworCW10YSA9IGlvcmVhZDMyKChody0+aHdfYWRkciArIFJFR19SWF9IQVNIX1RBQkxFKSArIChoYXNoX3JlZyA8PCAyKSk7CisJbXRhIHw9ICgxIDw8IGhhc2hfYml0KTsKKwlpb3dyaXRlMzIobXRhLCAoaHctPmh3X2FkZHIgKyBSRUdfUlhfSEFTSF9UQUJMRSkgKyAoaGFzaF9yZWcgPDwgMikpOworfQorCisvKgorICogV3JpdGVzIGEgdmFsdWUgdG8gYSBQSFkgcmVnaXN0ZXIKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiByZWdfYWRkciAtIGFkZHJlc3Mgb2YgdGhlIFBIWSByZWdpc3RlciB0byB3cml0ZQorICogZGF0YSAtIGRhdGEgdG8gd3JpdGUgdG8gdGhlIFBIWQorICovCitzdGF0aWMgczMyIGF0bDFfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgYXRsMV9odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2IHBoeV9kYXRhKQoreworCWludCBpOworCXUzMiB2YWw7CisKKwl2YWwgPSAoKHUzMikgKHBoeV9kYXRhICYgTURJT19EQVRBX01BU0spKSA8PCBNRElPX0RBVEFfU0hJRlQgfAorCSAgICAocmVnX2FkZHIgJiBNRElPX1JFR19BRERSX01BU0spIDw8IE1ESU9fUkVHX0FERFJfU0hJRlQgfAorCSAgICBNRElPX1NVUF9QUkVBTUJMRSB8CisJICAgIE1ESU9fU1RBUlQgfCBNRElPX0NMS18yNV80IDw8IE1ESU9fQ0xLX1NFTF9TSElGVDsKKwlpb3dyaXRlMzIodmFsLCBody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOworCWlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX01ESU9fQ1RSTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTURJT19XQUlUX1RJTUVTOyBpKyspIHsKKwkJdWRlbGF5KDIpOworCQl2YWwgPSBpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOworCQlpZiAoISh2YWwgJiAoTURJT19TVEFSVCB8IE1ESU9fQlVTWSkpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gQVRMWF9FUlJfUEhZOworfQorCisvKgorICogTWFrZSBMMDAxJ3MgUEhZIG91dCBvZiBQb3dlciBTYXZpbmcgU3RhdGUgKGJ1ZykKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiB3aGVuIHBvd2VyIG9uLCBMMDAxJ3MgUEhZIGFsd2F5cyBvbiBQb3dlciBzYXZpbmcgU3RhdGUKKyAqIChHaWdhYml0IExpbmsgZm9yYmlkZGVuKQorICovCitzdGF0aWMgczMyIGF0bDFfcGh5X2xlYXZlX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYXRsMV9odyAqaHcpCit7CisJczMyIHJldDsKKwlyZXQgPSBhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIDI5LCAweDAwMjkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGF0bDFfd3JpdGVfcGh5X3JlZyhodywgMzAsIDApOworfQorCisvKgorICpUT0RPOiBkbyBzb21ldGhpbmcgb3IgZ2V0IHJpZCBvZiB0aGlzCisgKi8KKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBzMzIgYXRsMV9waHlfZW50ZXJfcG93ZXJfc2F2aW5nKHN0cnVjdCBhdGwxX2h3ICpodykKK3sKKy8qICAgIHMzMiByZXRfdmFsOworICogICAgdTE2IHBoeV9kYXRhOworICovCisKKy8qCisgICAgcmV0X3ZhbCA9IGF0bDFfd3JpdGVfcGh5X3JlZyhodywgLi4uKTsKKyAgICByZXRfdmFsID0gYXRsMV93cml0ZV9waHlfcmVnKGh3LCAuLi4pOworICAgIC4uLi4KKyovCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIFJlc2V0cyB0aGUgUEhZIGFuZCBtYWtlIGFsbCBjb25maWcgdmFsaWRhdGUKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKgorICogU2V0cyBiaXQgMTUgYW5kIDEyIG9mIHRoZSBNSUkgQ29udHJvbCByZWdpc2VyIChmb3IgRjAwMSBidWcpCisgKi8KK3N0YXRpYyBzMzIgYXRsMV9waHlfcmVzZXQoc3RydWN0IGF0bDFfaHcgKmh3KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gaHctPmJhY2stPnBkZXY7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXMzMiByZXRfdmFsOworCXUxNiBwaHlfZGF0YTsKKworCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8CisJICAgIGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfMTAwME1fRlVMTCkKKwkJcGh5X2RhdGEgPSBNSUlfQ1JfUkVTRVQgfCBNSUlfQ1JfQVVUT19ORUdfRU47CisJZWxzZSB7CisJCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKKwkJY2FzZSBNRURJQV9UWVBFXzEwME1fRlVMTDoKKwkJCXBoeV9kYXRhID0KKwkJCSAgICBNSUlfQ1JfRlVMTF9EVVBMRVggfCBNSUlfQ1JfU1BFRURfMTAwIHwKKwkJCSAgICBNSUlfQ1JfUkVTRVQ7CisJCQlicmVhazsKKwkJY2FzZSBNRURJQV9UWVBFXzEwME1fSEFMRjoKKwkJCXBoeV9kYXRhID0gTUlJX0NSX1NQRUVEXzEwMCB8IE1JSV9DUl9SRVNFVDsKKwkJCWJyZWFrOworCQljYXNlIE1FRElBX1RZUEVfMTBNX0ZVTEw6CisJCQlwaHlfZGF0YSA9CisJCQkgICAgTUlJX0NSX0ZVTExfRFVQTEVYIHwgTUlJX0NSX1NQRUVEXzEwIHwgTUlJX0NSX1JFU0VUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBNRURJQV9UWVBFXzEwTV9IQUxGOiAqLworCQkJcGh5X2RhdGEgPSBNSUlfQ1JfU1BFRURfMTAgfCBNSUlfQ1JfUkVTRVQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldF92YWwgPSBhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9CTUNSLCBwaHlfZGF0YSk7CisJaWYgKHJldF92YWwpIHsKKwkJdTMyIHZhbDsKKwkJaW50IGk7CisJCS8qIHBjaWUgc2VyZGVzIGxpbmsgbWF5IGJlIGRvd24hICovCisJCWlmIChuZXRpZl9tc2dfaHcoYWRhcHRlcikpCisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwY2llIHBoeSBsaW5rIGRvd25cbiIpOworCisJCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKSB7CisJCQltc2xlZXAoMSk7CisJCQl2YWwgPSBpb3JlYWQzMihody0+aHdfYWRkciArIFJFR19NRElPX0NUUkwpOworCQkJaWYgKCEodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICgodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSAhPSAwKSB7CisJCQlpZiAobmV0aWZfbXNnX2h3KGFkYXB0ZXIpKQorCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJCSJwY2llIGxpbmsgZG93biBhdCBsZWFzdCAyNW1zXG4iKTsKKwkJCXJldHVybiByZXRfdmFsOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlcyBQSFkgYXV0b25lZyBhbmQgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQgc2V0dGluZ3MKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKi8KK3N0YXRpYyBzMzIgYXRsMV9waHlfc2V0dXBfYXV0b25lZ19hZHYoc3RydWN0IGF0bDFfaHcgKmh3KQoreworCXMzMiByZXRfdmFsOworCXMxNiBtaWlfYXV0b25lZ19hZHZfcmVnOworCXMxNiBtaWlfMTAwMHRfY3RybF9yZWc7CisKKwkvKiBSZWFkIHRoZSBNSUkgQXV0by1OZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAoQWRkcmVzcyA0KS4gKi8KKwltaWlfYXV0b25lZ19hZHZfcmVnID0gTUlJX0FSX0RFRkFVTFRfQ0FQX01BU0s7CisKKwkvKiBSZWFkIHRoZSBNSUkgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLiAqLworCW1paV8xMDAwdF9jdHJsX3JlZyA9IE1JSV9BVExYX0NSXzEwMDBUX0RFRkFVTFRfQ0FQX01BU0s7CisKKwkvKgorCSAqIEZpcnN0IHdlIGNsZWFyIGFsbCB0aGUgMTAvMTAwIG1iIHNwZWVkIGJpdHMgaW4gdGhlIEF1dG8tTmVnCisJICogQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAoQWRkcmVzcyA0KSBhbmQgdGhlIDEwMDAgbWIgc3BlZWQgYml0cyBpbgorCSAqIHRoZSAgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLgorCSAqLworCW1paV9hdXRvbmVnX2Fkdl9yZWcgJj0gfk1JSV9BUl9TUEVFRF9NQVNLOworCW1paV8xMDAwdF9jdHJsX3JlZyAmPSB+TUlJX0FUTFhfQ1JfMTAwMFRfU1BFRURfTUFTSzsKKworCS8qCisJICogTmVlZCB0byBwYXJzZSBtZWRpYV90eXBlICBhbmQgc2V0IHVwCisJICogdGhlIGFwcHJvcHJpYXRlIFBIWSByZWdpc3RlcnMuCisJICovCisJc3dpdGNoIChody0+bWVkaWFfdHlwZSkgeworCWNhc2UgTUVESUFfVFlQRV9BVVRPX1NFTlNPUjoKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSAoTUlJX0FSXzEwVF9IRF9DQVBTIHwKKwkJCQkJTUlJX0FSXzEwVF9GRF9DQVBTIHwKKwkJCQkJTUlJX0FSXzEwMFRYX0hEX0NBUFMgfAorCQkJCQlNSUlfQVJfMTAwVFhfRkRfQ0FQUyk7CisJCW1paV8xMDAwdF9jdHJsX3JlZyB8PSBNSUlfQVRMWF9DUl8xMDAwVF9GRF9DQVBTOworCQlicmVhazsKKworCWNhc2UgTUVESUFfVFlQRV8xMDAwTV9GVUxMOgorCQltaWlfMTAwMHRfY3RybF9yZWcgfD0gTUlJX0FUTFhfQ1JfMTAwMFRfRkRfQ0FQUzsKKwkJYnJlYWs7CisKKwljYXNlIE1FRElBX1RZUEVfMTAwTV9GVUxMOgorCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE1JSV9BUl8xMDBUWF9GRF9DQVBTOworCQlicmVhazsKKworCWNhc2UgTUVESUFfVFlQRV8xMDBNX0hBTEY6CisJCW1paV9hdXRvbmVnX2Fkdl9yZWcgfD0gTUlJX0FSXzEwMFRYX0hEX0NBUFM7CisJCWJyZWFrOworCisJY2FzZSBNRURJQV9UWVBFXzEwTV9GVUxMOgorCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE1JSV9BUl8xMFRfRkRfQ0FQUzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE1JSV9BUl8xMFRfSERfQ0FQUzsKKwkJYnJlYWs7CisJfQorCisJLyogZmxvdyBjb250cm9sIGZpeGVkIHRvIGVuYWJsZSBhbGwgKi8KKwltaWlfYXV0b25lZ19hZHZfcmVnIHw9IChNSUlfQVJfQVNNX0RJUiB8IE1JSV9BUl9QQVVTRSk7CisKKwlody0+bWlpX2F1dG9uZWdfYWR2X3JlZyA9IG1paV9hdXRvbmVnX2Fkdl9yZWc7CisJaHctPm1paV8xMDAwdF9jdHJsX3JlZyA9IG1paV8xMDAwdF9jdHJsX3JlZzsKKworCXJldF92YWwgPSBhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9BRFZFUlRJU0UsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCXJldF92YWwgPSBhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9BVExYX0NSLCBtaWlfMTAwMHRfY3RybF9yZWcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlcyBsaW5rIHNldHRpbmdzLgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIEFzc3VtZXMgdGhlIGhhcmR3YXJlIGhhcyBwcmV2aW91c2x5IGJlZW4gcmVzZXQgYW5kIHRoZQorICogdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyIGFyZSBub3QgZW5hYmxlZC4KKyAqLworc3RhdGljIHMzMiBhdGwxX3NldHVwX2xpbmsoc3RydWN0IGF0bDFfaHcgKmh3KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gaHctPmJhY2stPnBkZXY7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXMzMiByZXRfdmFsOworCisJLyoKKwkgKiBPcHRpb25zOgorCSAqICBQSFkgd2lsbCBhZHZlcnRpc2UgdmFsdWUocykgcGFyc2VkIGZyb20KKwkgKiAgYXV0b25lZ19hZHZlcnRpc2VkIGFuZCBmYworCSAqICBubyBtYXR0ZXIgd2hhdCBhdXRvbmVnIGlzICwgV2Ugd2lsbCBub3Qgd2FpdCBsaW5rIHJlc3VsdC4KKwkgKi8KKwlyZXRfdmFsID0gYXRsMV9waHlfc2V0dXBfYXV0b25lZ19hZHYoaHcpOworCWlmIChyZXRfdmFsKSB7CisJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCQkiZXJyb3Igc2V0dGluZyB1cCBhdXRvbmVnb3RpYXRpb25cbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisJLyogU1cuUmVzZXQgLCBFbi1BdXRvLU5lZyBpZiBuZWVkZWQgKi8KKwlyZXRfdmFsID0gYXRsMV9waHlfcmVzZXQoaHcpOworCWlmIChyZXRfdmFsKSB7CisJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIHJlc2V0dGluZyBwaHlcbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisJaHctPnBoeV9jb25maWd1cmVkID0gdHJ1ZTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIHZvaWQgYXRsMV9pbml0X2ZsYXNoX29wY29kZShzdHJ1Y3QgYXRsMV9odyAqaHcpCit7CisJaWYgKGh3LT5mbGFzaF92ZW5kb3IgPj0gQVJSQVlfU0laRShmbGFzaF90YWJsZSkpCisJCS8qIEF0bWVsICovCisJCWh3LT5mbGFzaF92ZW5kb3IgPSAwOworCisJLyogSW5pdCBPUCB0YWJsZSAqLworCWlvd3JpdGU4KGZsYXNoX3RhYmxlW2h3LT5mbGFzaF92ZW5kb3JdLmNtZF9wcm9ncmFtLAorCQlody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfT1BfUFJPR1JBTSk7CisJaW93cml0ZTgoZmxhc2hfdGFibGVbaHctPmZsYXNoX3ZlbmRvcl0uY21kX3NlY3Rvcl9lcmFzZSwKKwkJaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX09QX1NDX0VSQVNFKTsKKwlpb3dyaXRlOChmbGFzaF90YWJsZVtody0+Zmxhc2hfdmVuZG9yXS5jbWRfY2hpcF9lcmFzZSwKKwkJaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX09QX0NISVBfRVJBU0UpOworCWlvd3JpdGU4KGZsYXNoX3RhYmxlW2h3LT5mbGFzaF92ZW5kb3JdLmNtZF9yZGlkLAorCQlody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfT1BfUkRJRCk7CisJaW93cml0ZTgoZmxhc2hfdGFibGVbaHctPmZsYXNoX3ZlbmRvcl0uY21kX3dyZW4sCisJCWh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9PUF9XUkVOKTsKKwlpb3dyaXRlOChmbGFzaF90YWJsZVtody0+Zmxhc2hfdmVuZG9yXS5jbWRfcmRzciwKKwkJaHctPmh3X2FkZHIgKyBSRUdfU1BJX0ZMQVNIX09QX1JEU1IpOworCWlvd3JpdGU4KGZsYXNoX3RhYmxlW2h3LT5mbGFzaF92ZW5kb3JdLmNtZF93cnNyLAorCQlody0+aHdfYWRkciArIFJFR19TUElfRkxBU0hfT1BfV1JTUik7CisJaW93cml0ZTgoZmxhc2hfdGFibGVbaHctPmZsYXNoX3ZlbmRvcl0uY21kX3JlYWQsCisJCWh3LT5od19hZGRyICsgUkVHX1NQSV9GTEFTSF9PUF9SRUFEKTsKK30KKworLyoKKyAqIFBlcmZvcm1zIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFkYXB0ZXIuCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogQXNzdW1lcyB0aGF0IHRoZSBjb250cm9sbGVyIGhhcyBwcmV2aW91c2x5IGJlZW4gcmVzZXQgYW5kIGlzIGluIGEKKyAqIHBvc3QtcmVzZXQgdW5pbml0aWFsaXplZCBzdGF0ZS4gSW5pdGlhbGl6ZXMgbXVsdGljYXN0IHRhYmxlLAorICogYW5kICBDYWxscyByb3V0aW5lcyB0byBzZXR1cCBsaW5rCisgKiBMZWF2ZXMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzIGRpc2FibGVkIGFuZCB1bmluaXRpYWxpemVkLgorICovCitzdGF0aWMgczMyIGF0bDFfaW5pdF9odyhzdHJ1Y3QgYXRsMV9odyAqaHcpCit7CisJdTMyIHJldF92YWwgPSAwOworCisJLyogWmVybyBvdXQgdGhlIE11bHRpY2FzdCBIQVNIIHRhYmxlICovCisJaW93cml0ZTMyKDAsIGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpOworCS8qIGNsZWFyIHRoZSBvbGQgc2V0dGluZ3MgZnJvbSB0aGUgbXVsdGljYXN0IGhhc2ggdGFibGUgKi8KKwlpb3dyaXRlMzIoMCwgKGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpICsgKDEgPDwgMikpOworCisJYXRsMV9pbml0X2ZsYXNoX29wY29kZShodyk7CisKKwlpZiAoIWh3LT5waHlfY29uZmlndXJlZCkgeworCQkvKiBlbmFibGUgR1BIWSBMaW5rQ2hhbmdlIEludGVycnJ1cHQgKi8KKwkJcmV0X3ZhbCA9IGF0bDFfd3JpdGVfcGh5X3JlZyhodywgMTgsIDB4QzAwKTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJLyogbWFrZSBQSFkgb3V0IG9mIHBvd2VyLXNhdmluZyBzdGF0ZSAqLworCQlyZXRfdmFsID0gYXRsMV9waHlfbGVhdmVfcG93ZXJfc2F2aW5nKGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJLyogQ2FsbCBhIHN1YnJvdXRpbmUgdG8gY29uZmlndXJlIHRoZSBsaW5rICovCisJCXJldF92YWwgPSBhdGwxX3NldHVwX2xpbmsoaHcpOworCX0KKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIERldGVjdHMgdGhlIGN1cnJlbnQgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncyBvZiB0aGUgaGFyZHdhcmUuCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogc3BlZWQgLSBTcGVlZCBvZiB0aGUgY29ubmVjdGlvbgorICogZHVwbGV4IC0gRHVwbGV4IHNldHRpbmcgb2YgdGhlIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIHMzMiBhdGwxX2dldF9zcGVlZF9hbmRfZHVwbGV4KHN0cnVjdCBhdGwxX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBody0+YmFjay0+cGRldjsKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJczMyIHJldF92YWw7CisJdTE2IHBoeV9kYXRhOworCisJLyogOyAtLS0gUmVhZCAgIFBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnaXN0ZXIgKDE3KSAqLworCXJldF92YWwgPSBhdGwxX3JlYWRfcGh5X3JlZyhodywgTUlJX0FUTFhfUFNTUiwgJnBoeV9kYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwlpZiAoIShwaHlfZGF0YSAmIE1JSV9BVExYX1BTU1JfU1BEX0RQTFhfUkVTT0xWRUQpKQorCQlyZXR1cm4gQVRMWF9FUlJfUEhZX1JFUzsKKworCXN3aXRjaCAocGh5X2RhdGEgJiBNSUlfQVRMWF9QU1NSX1NQRUVEKSB7CisJY2FzZSBNSUlfQVRMWF9QU1NSXzEwMDBNQlM6CisJCSpzcGVlZCA9IFNQRUVEXzEwMDA7CisJCWJyZWFrOworCWNhc2UgTUlJX0FUTFhfUFNTUl8xMDBNQlM6CisJCSpzcGVlZCA9IFNQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBNSUlfQVRMWF9QU1NSXzEwTUJTOgorCQkqc3BlZWQgPSBTUEVFRF8xMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKG5ldGlmX21zZ19odyhhZGFwdGVyKSkKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIGdldHRpbmcgc3BlZWRcbiIpOworCQlyZXR1cm4gQVRMWF9FUlJfUEhZX1NQRUVEOworCQlicmVhazsKKwl9CisJaWYgKHBoeV9kYXRhICYgTUlJX0FUTFhfUFNTUl9EUExYKQorCQkqZHVwbGV4ID0gRlVMTF9EVVBMRVg7CisJZWxzZQorCQkqZHVwbGV4ID0gSEFMRl9EVVBMRVg7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGwxX3NldF9tYWNfYWRkcihzdHJ1Y3QgYXRsMV9odyAqaHcpCit7CisJdTMyIHZhbHVlOworCS8qCisJICogMDAtMEItNkEtRjYtMDAtREMKKwkgKiAwOiAgNkFGNjAwREMgICAxOiAwMDBCCisJICogbG93IGR3b3JkCisJICovCisJdmFsdWUgPSAoKCh1MzIpIGh3LT5tYWNfYWRkclsyXSkgPDwgMjQpIHwKKwkgICAgKCgodTMyKSBody0+bWFjX2FkZHJbM10pIDw8IDE2KSB8CisJICAgICgoKHUzMikgaHctPm1hY19hZGRyWzRdKSA8PCA4KSB8ICgoKHUzMikgaHctPm1hY19hZGRyWzVdKSk7CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19NQUNfU1RBX0FERFIpOworCS8qIGhpZ2ggZHdvcmQgKi8KKwl2YWx1ZSA9ICgoKHUzMikgaHctPm1hY19hZGRyWzBdKSA8PCA4KSB8ICgoKHUzMikgaHctPm1hY19hZGRyWzFdKSk7CisJaW93cml0ZTMyKHZhbHVlLCAoaHctPmh3X2FkZHIgKyBSRUdfTUFDX1NUQV9BRERSKSArICgxIDw8IDIpKTsKK30KKworLyoKKyAqIGF0bDFfc3dfaW5pdCAtIEluaXRpYWxpemUgZ2VuZXJhbCBzb2Z0d2FyZSBzdHJ1Y3R1cmVzIChzdHJ1Y3QgYXRsMV9hZGFwdGVyKQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBhdGwxX3N3X2luaXQgaW5pdGlhbGl6ZXMgdGhlIEFkYXB0ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4KKyAqIEZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24gUENJIGRldmljZSBpbmZvcm1hdGlvbiBhbmQKKyAqIE9TIG5ldHdvcmsgZGV2aWNlIHNldHRpbmdzIChNVFUgc2l6ZSkuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bDFfc3dfaW5pdChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaHctPm1heF9mcmFtZV9zaXplID0gbmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOICsgVkxBTl9ITEVOOworCWh3LT5taW5fZnJhbWVfc2l6ZSA9IEVUSF9aTEVOICsgRVRIX0ZDU19MRU47CisKKwlhZGFwdGVyLT53b2wgPSAwOworCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSAoaHctPm1heF9mcmFtZV9zaXplICsgNykgJiB+NzsKKwlhZGFwdGVyLT5pY3QgPSA1MDAwMDsJCS8qIDEwMG1zICovCisJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7CS8qIGhhcmR3YXJlIGluaXQgKi8KKwlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOworCisJaHctPnBoeV9jb25maWd1cmVkID0gZmFsc2U7CisJaHctPnByZWFtYmxlX2xlbiA9IDc7CisJaHctPmlwZ3QgPSAweDYwOworCWh3LT5taW5faWZnID0gMHg1MDsKKwlody0+aXBncjEgPSAweDQwOworCWh3LT5pcGdyMiA9IDB4NjA7CisJaHctPm1heF9yZXRyeSA9IDB4ZjsKKwlody0+bGNvbCA9IDB4Mzc7CisJaHctPmphbV9pcGcgPSA3OworCWh3LT5yZmRfYnVyc3QgPSA4OworCWh3LT5ycmRfYnVyc3QgPSA4OworCWh3LT5yZmRfZmV0Y2hfZ2FwID0gMTsKKwlody0+cnhfanVtYm9fdGggPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuIC8gODsKKwlody0+cnhfanVtYm9fbGthaCA9IDE7CisJaHctPnJyZF9yZXRfdGltZXIgPSAxNjsKKwlody0+dHBkX2J1cnN0ID0gNDsKKwlody0+dHBkX2ZldGNoX3RoID0gMTY7CisJaHctPnR4Zl9idXJzdCA9IDB4MTAwOworCWh3LT50eF9qdW1ib190YXNrX3RoID0gKGh3LT5tYXhfZnJhbWVfc2l6ZSArIDcpID4+IDM7CisJaHctPnRwZF9mZXRjaF9nYXAgPSAxOworCWh3LT5yY2JfdmFsdWUgPSBhdGwxX3JjYl82NDsKKwlody0+ZG1hX29yZCA9IGF0bDFfZG1hX29yZF9lbmg7CisJaHctPmRtYXJfYmxvY2sgPSBhdGwxX2RtYV9yZXFfMjU2OworCWh3LT5kbWF3X2Jsb2NrID0gYXRsMV9kbWFfcmVxXzI1NjsKKwlody0+Y21iX3JyZCA9IDQ7CisJaHctPmNtYl90cGQgPSA0OworCWh3LT5jbWJfcnhfdGltZXIgPSAxOwkvKiBhYm91dCAydXMgKi8KKwlody0+Y21iX3R4X3RpbWVyID0gMTsJLyogYWJvdXQgMnVzICovCisJaHctPnNtYl90aW1lciA9IDEwMDAwMDsJLyogYWJvdXQgMjAwbXMgKi8KKworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWJfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IHJlZ19udW0pCit7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2IHJlc3VsdDsKKworCWF0bDFfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgcmVnX251bSAmIDB4MWYsICZyZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnX251bSwKKwlpbnQgdmFsKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXRsMV93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgcmVnX251bSwgdmFsKTsKK30KKworLyoKKyAqIGF0bDFfbWlpX2lvY3RsIC0KKyAqIEBuZXRkZXY6CisgKiBAaWZyZXE6CisgKiBAY21kOgorICovCitzdGF0aWMgaW50IGF0bDFfbWlpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gZ2VuZXJpY19taWlfaW9jdGwoJmFkYXB0ZXItPm1paSwgaWZfbWlpKGlmciksIGNtZCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIGF0bDFfc2V0dXBfbWVtX3Jlc291cmNlcyAtIGFsbG9jYXRlIFR4IC8gUlggZGVzY3JpcHRvciByZXNvdXJjZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIHMzMiBhdGwxX3NldHVwX3JpbmdfcmVzb3VyY2VzKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFfdHBkX3JpbmcgKnRwZF9yaW5nID0gJmFkYXB0ZXItPnRwZF9yaW5nOworCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyZmRfcmluZyA9ICZhZGFwdGVyLT5yZmRfcmluZzsKKwlzdHJ1Y3QgYXRsMV9ycmRfcmluZyAqcnJkX3JpbmcgPSAmYWRhcHRlci0+cnJkX3Jpbmc7CisJc3RydWN0IGF0bDFfcmluZ19oZWFkZXIgKnJpbmdfaGVhZGVyID0gJmFkYXB0ZXItPnJpbmdfaGVhZGVyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgc2l6ZTsKKwl1OCBvZmZzZXQgPSAwOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRsMV9idWZmZXIpICogKHRwZF9yaW5nLT5jb3VudCArIHJmZF9yaW5nLT5jb3VudCk7CisJdHBkX3JpbmctPmJ1ZmZlcl9pbmZvID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXRwZF9yaW5nLT5idWZmZXJfaW5mbykpIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYoYWRhcHRlcikpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGZhaWxlZCAsIHNpemUgPSBEJWRcbiIsCisJCQkJc2l6ZSk7CisJCWdvdG8gZXJyX25vbWVtOworCX0KKwlyZmRfcmluZy0+YnVmZmVyX2luZm8gPQorCQkoc3RydWN0IGF0bDFfYnVmZmVyICopKHRwZF9yaW5nLT5idWZmZXJfaW5mbyArIHRwZF9yaW5nLT5jb3VudCk7CisKKwkvKgorCSAqIHJlYWwgcmluZyBETUEgYnVmZmVyCisJICogZWFjaCByaW5nL2Jsb2NrIG1heSBuZWVkIHVwIHRvIDggYnl0ZXMgZm9yIGFsaWdubWVudCwgaGVuY2UgdGhlCisJICogYWRkaXRpb25hbCA0MCBieXRlcyB0YWNrZWQgb250byB0aGUgZW5kLgorCSAqLworCXJpbmdfaGVhZGVyLT5zaXplID0gc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MpICogdHBkX3JpbmctPmNvdW50CisJCSsgc2l6ZW9mKHN0cnVjdCByeF9mcmVlX2Rlc2MpICogcmZkX3JpbmctPmNvdW50CisJCSsgc2l6ZW9mKHN0cnVjdCByeF9yZXR1cm5fZGVzYykgKiBycmRfcmluZy0+Y291bnQKKwkJKyBzaXplb2Yoc3RydWN0IGNvYWxzX21zZ19ibG9jaykKKwkJKyBzaXplb2Yoc3RydWN0IHN0YXRzX21zZ19ibG9jaykKKwkJKyA0MDsKKworCXJpbmdfaGVhZGVyLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcmluZ19oZWFkZXItPnNpemUsCisJCSZyaW5nX2hlYWRlci0+ZG1hKTsKKwlpZiAodW5saWtlbHkoIXJpbmdfaGVhZGVyLT5kZXNjKSkgeworCQlpZiAobmV0aWZfbXNnX2RydihhZGFwdGVyKSkKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX25vbWVtOworCX0KKworCW1lbXNldChyaW5nX2hlYWRlci0+ZGVzYywgMCwgcmluZ19oZWFkZXItPnNpemUpOworCisJLyogaW5pdCBUUEQgcmluZyAqLworCXRwZF9yaW5nLT5kbWEgPSByaW5nX2hlYWRlci0+ZG1hOworCW9mZnNldCA9ICh0cGRfcmluZy0+ZG1hICYgMHg3KSA/ICg4IC0gKHJpbmdfaGVhZGVyLT5kbWEgJiAweDcpKSA6IDA7CisJdHBkX3JpbmctPmRtYSArPSBvZmZzZXQ7CisJdHBkX3JpbmctPmRlc2MgPSAodTggKikgcmluZ19oZWFkZXItPmRlc2MgKyBvZmZzZXQ7CisJdHBkX3JpbmctPnNpemUgPSBzaXplb2Yoc3RydWN0IHR4X3BhY2tldF9kZXNjKSAqIHRwZF9yaW5nLT5jb3VudDsKKworCS8qIGluaXQgUkZEIHJpbmcgKi8KKwlyZmRfcmluZy0+ZG1hID0gdHBkX3JpbmctPmRtYSArIHRwZF9yaW5nLT5zaXplOworCW9mZnNldCA9IChyZmRfcmluZy0+ZG1hICYgMHg3KSA/ICg4IC0gKHJmZF9yaW5nLT5kbWEgJiAweDcpKSA6IDA7CisJcmZkX3JpbmctPmRtYSArPSBvZmZzZXQ7CisJcmZkX3JpbmctPmRlc2MgPSAodTggKikgdHBkX3JpbmctPmRlc2MgKyAodHBkX3JpbmctPnNpemUgKyBvZmZzZXQpOworCXJmZF9yaW5nLT5zaXplID0gc2l6ZW9mKHN0cnVjdCByeF9mcmVlX2Rlc2MpICogcmZkX3JpbmctPmNvdW50OworCisKKwkvKiBpbml0IFJSRCByaW5nICovCisJcnJkX3JpbmctPmRtYSA9IHJmZF9yaW5nLT5kbWEgKyByZmRfcmluZy0+c2l6ZTsKKwlvZmZzZXQgPSAocnJkX3JpbmctPmRtYSAmIDB4NykgPyAoOCAtIChycmRfcmluZy0+ZG1hICYgMHg3KSkgOiAwOworCXJyZF9yaW5nLT5kbWEgKz0gb2Zmc2V0OworCXJyZF9yaW5nLT5kZXNjID0gKHU4ICopIHJmZF9yaW5nLT5kZXNjICsgKHJmZF9yaW5nLT5zaXplICsgb2Zmc2V0KTsKKwlycmRfcmluZy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnhfcmV0dXJuX2Rlc2MpICogcnJkX3JpbmctPmNvdW50OworCisKKwkvKiBpbml0IENNQiAqLworCWFkYXB0ZXItPmNtYi5kbWEgPSBycmRfcmluZy0+ZG1hICsgcnJkX3JpbmctPnNpemU7CisJb2Zmc2V0ID0gKGFkYXB0ZXItPmNtYi5kbWEgJiAweDcpID8gKDggLSAoYWRhcHRlci0+Y21iLmRtYSAmIDB4NykpIDogMDsKKwlhZGFwdGVyLT5jbWIuZG1hICs9IG9mZnNldDsKKwlhZGFwdGVyLT5jbWIuY21iID0gKHN0cnVjdCBjb2Fsc19tc2dfYmxvY2sgKikKKwkJKCh1OCAqKSBycmRfcmluZy0+ZGVzYyArIChycmRfcmluZy0+c2l6ZSArIG9mZnNldCkpOworCisJLyogaW5pdCBTTUIgKi8KKwlhZGFwdGVyLT5zbWIuZG1hID0gYWRhcHRlci0+Y21iLmRtYSArIHNpemVvZihzdHJ1Y3QgY29hbHNfbXNnX2Jsb2NrKTsKKwlvZmZzZXQgPSAoYWRhcHRlci0+c21iLmRtYSAmIDB4NykgPyAoOCAtIChhZGFwdGVyLT5zbWIuZG1hICYgMHg3KSkgOiAwOworCWFkYXB0ZXItPnNtYi5kbWEgKz0gb2Zmc2V0OworCWFkYXB0ZXItPnNtYi5zbWIgPSAoc3RydWN0IHN0YXRzX21zZ19ibG9jayAqKQorCQkoKHU4ICopIGFkYXB0ZXItPmNtYi5jbWIgKworCQkoc2l6ZW9mKHN0cnVjdCBjb2Fsc19tc2dfYmxvY2spICsgb2Zmc2V0KSk7CisKKwlyZXR1cm4gMDsKKworZXJyX25vbWVtOgorCWtmcmVlKHRwZF9yaW5nLT5idWZmZXJfaW5mbyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfaW5pdF9yaW5nX3B0cnMoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7CisJc3RydWN0IGF0bDFfcmZkX3JpbmcgKnJmZF9yaW5nID0gJmFkYXB0ZXItPnJmZF9yaW5nOworCXN0cnVjdCBhdGwxX3JyZF9yaW5nICpycmRfcmluZyA9ICZhZGFwdGVyLT5ycmRfcmluZzsKKworCWF0b21pY19zZXQoJnRwZF9yaW5nLT5uZXh0X3RvX3VzZSwgMCk7CisJYXRvbWljX3NldCgmdHBkX3JpbmctPm5leHRfdG9fY2xlYW4sIDApOworCisJcmZkX3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOworCWF0b21pY19zZXQoJnJmZF9yaW5nLT5uZXh0X3RvX3VzZSwgMCk7CisKKwlycmRfcmluZy0+bmV4dF90b191c2UgPSAwOworCWF0b21pY19zZXQoJnJyZF9yaW5nLT5uZXh0X3RvX2NsZWFuLCAwKTsKK30KKworLyoKKyAqIGF0bDFfY2xlYW5fcnhfcmluZyAtIEZyZWUgUkZEIEJ1ZmZlcnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBhdGwxX2NsZWFuX3J4X3Jpbmcoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMV9yZmRfcmluZyAqcmZkX3JpbmcgPSAmYWRhcHRlci0+cmZkX3Jpbmc7CisJc3RydWN0IGF0bDFfcnJkX3JpbmcgKnJyZF9yaW5nID0gJmFkYXB0ZXItPnJyZF9yaW5nOworCXN0cnVjdCBhdGwxX2J1ZmZlciAqYnVmZmVyX2luZm87CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIEZyZWUgYWxsIHRoZSBSeCByaW5nIHNrX2J1ZmZzICovCisJZm9yIChpID0gMDsgaSA8IHJmZF9yaW5nLT5jb3VudDsgaSsrKSB7CisJCWJ1ZmZlcl9pbmZvID0gJnJmZF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKKwkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCisJCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCQl9CisJCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKGJ1ZmZlcl9pbmZvLT5za2IpOworCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCX0KKwl9CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGwxX2J1ZmZlcikgKiByZmRfcmluZy0+Y291bnQ7CisJbWVtc2V0KHJmZF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CisKKwkvKiBaZXJvIG91dCB0aGUgZGVzY3JpcHRvciByaW5nICovCisJbWVtc2V0KHJmZF9yaW5nLT5kZXNjLCAwLCByZmRfcmluZy0+c2l6ZSk7CisKKwlyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisJYXRvbWljX3NldCgmcmZkX3JpbmctPm5leHRfdG9fdXNlLCAwKTsKKworCXJyZF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CisJYXRvbWljX3NldCgmcnJkX3JpbmctPm5leHRfdG9fY2xlYW4sIDApOworfQorCisvKgorICogYXRsMV9jbGVhbl90eF9yaW5nIC0gRnJlZSBUeCBCdWZmZXJzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgYXRsMV9jbGVhbl90eF9yaW5nKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFfdHBkX3JpbmcgKnRwZF9yaW5nID0gJmFkYXB0ZXItPnRwZF9yaW5nOworCXN0cnVjdCBhdGwxX2J1ZmZlciAqYnVmZmVyX2luZm87CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIEZyZWUgYWxsIHRoZSBUeCByaW5nIHNrX2J1ZmZzICovCisJZm9yIChpID0gMDsgaSA8IHRwZF9yaW5nLT5jb3VudDsgaSsrKSB7CisJCWJ1ZmZlcl9pbmZvID0gJnRwZF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKKwkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCisJCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCB0cGRfcmluZy0+Y291bnQ7IGkrKykgeworCQlidWZmZXJfaW5mbyA9ICZ0cGRfcmluZy0+YnVmZmVyX2luZm9baV07CisJCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKKwkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCQl9CisJfQorCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRsMV9idWZmZXIpICogdHBkX3JpbmctPmNvdW50OworCW1lbXNldCh0cGRfcmluZy0+YnVmZmVyX2luZm8sIDAsIHNpemUpOworCisJLyogWmVybyBvdXQgdGhlIGRlc2NyaXB0b3IgcmluZyAqLworCW1lbXNldCh0cGRfcmluZy0+ZGVzYywgMCwgdHBkX3JpbmctPnNpemUpOworCisJYXRvbWljX3NldCgmdHBkX3JpbmctPm5leHRfdG9fdXNlLCAwKTsKKwlhdG9taWNfc2V0KCZ0cGRfcmluZy0+bmV4dF90b19jbGVhbiwgMCk7Cit9CisKKy8qCisgKiBhdGwxX2ZyZWVfcmluZ19yZXNvdXJjZXMgLSBGcmVlIFR4IC8gUlggZGVzY3JpcHRvciBSZXNvdXJjZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIEZyZWUgYWxsIHRyYW5zbWl0IHNvZnR3YXJlIHJlc291cmNlcworICovCitzdGF0aWMgdm9pZCBhdGwxX2ZyZWVfcmluZ19yZXNvdXJjZXMoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGF0bDFfdHBkX3JpbmcgKnRwZF9yaW5nID0gJmFkYXB0ZXItPnRwZF9yaW5nOworCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyZmRfcmluZyA9ICZhZGFwdGVyLT5yZmRfcmluZzsKKwlzdHJ1Y3QgYXRsMV9ycmRfcmluZyAqcnJkX3JpbmcgPSAmYWRhcHRlci0+cnJkX3Jpbmc7CisJc3RydWN0IGF0bDFfcmluZ19oZWFkZXIgKnJpbmdfaGVhZGVyID0gJmFkYXB0ZXItPnJpbmdfaGVhZGVyOworCisJYXRsMV9jbGVhbl90eF9yaW5nKGFkYXB0ZXIpOworCWF0bDFfY2xlYW5fcnhfcmluZyhhZGFwdGVyKTsKKworCWtmcmVlKHRwZF9yaW5nLT5idWZmZXJfaW5mbyk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCByaW5nX2hlYWRlci0+c2l6ZSwgcmluZ19oZWFkZXItPmRlc2MsCisJCXJpbmdfaGVhZGVyLT5kbWEpOworCisJdHBkX3JpbmctPmJ1ZmZlcl9pbmZvID0gTlVMTDsKKwl0cGRfcmluZy0+ZGVzYyA9IE5VTEw7CisJdHBkX3JpbmctPmRtYSA9IDA7CisKKwlyZmRfcmluZy0+YnVmZmVyX2luZm8gPSBOVUxMOworCXJmZF9yaW5nLT5kZXNjID0gTlVMTDsKKwlyZmRfcmluZy0+ZG1hID0gMDsKKworCXJyZF9yaW5nLT5kZXNjID0gTlVMTDsKKwlycmRfcmluZy0+ZG1hID0gMDsKK30KKworc3RhdGljIHZvaWQgYXRsMV9zZXR1cF9tYWNfY3RybChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwkvKiBDb25maWcgTUFDIENUUkwgUmVnaXN0ZXIgKi8KKwl2YWx1ZSA9IE1BQ19DVFJMX1RYX0VOIHwgTUFDX0NUUkxfUlhfRU47CisJLyogZHVwbGV4ICovCisJaWYgKEZVTExfRFVQTEVYID09IGFkYXB0ZXItPmxpbmtfZHVwbGV4KQorCQl2YWx1ZSB8PSBNQUNfQ1RSTF9EVVBMWDsKKwkvKiBzcGVlZCAqLworCXZhbHVlIHw9ICgodTMyKSAoKFNQRUVEXzEwMDAgPT0gYWRhcHRlci0+bGlua19zcGVlZCkgPworCQkJIE1BQ19DVFJMX1NQRUVEXzEwMDAgOiBNQUNfQ1RSTF9TUEVFRF8xMF8xMDApIDw8CisJCSAgTUFDX0NUUkxfU1BFRURfU0hJRlQpOworCS8qIGZsb3cgY29udHJvbCAqLworCXZhbHVlIHw9IChNQUNfQ1RSTF9UWF9GTE9XIHwgTUFDX0NUUkxfUlhfRkxPVyk7CisJLyogUEFEICYgQ1JDICovCisJdmFsdWUgfD0gKE1BQ19DVFJMX0FERF9DUkMgfCBNQUNfQ1RSTF9QQUQpOworCS8qIHByZWFtYmxlIGxlbmd0aCAqLworCXZhbHVlIHw9ICgoKHUzMikgYWRhcHRlci0+aHcucHJlYW1ibGVfbGVuCisJCSAgICYgTUFDX0NUUkxfUFJNTEVOX01BU0spIDw8IE1BQ19DVFJMX1BSTUxFTl9TSElGVCk7CisJLyogdmxhbiAqLworCWlmIChhZGFwdGVyLT52bGdycCkKKwkJdmFsdWUgfD0gTUFDX0NUUkxfUk1WX1ZMQU47CisJLyogcnggY2hlY2tzdW0KKwkgICBpZiAoYWRhcHRlci0+cnhfY3N1bSkKKwkgICB2YWx1ZSB8PSBNQUNfQ1RSTF9SWF9DSEtTVU1fRU47CisJICovCisJLyogZmlsdGVyIG1vZGUgKi8KKwl2YWx1ZSB8PSBNQUNfQ1RSTF9CQ19FTjsKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQl2YWx1ZSB8PSBNQUNfQ1RSTF9QUk9NSVNfRU47CisJZWxzZSBpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJdmFsdWUgfD0gTUFDX0NUUkxfTUNfQUxMX0VOOworCS8qIHZhbHVlIHw9IE1BQ19DVFJMX0xPT1BCQUNLOyAqLworCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfTUFDX0NUUkwpOworfQorCitzdGF0aWMgdTMyIGF0bDFfY2hlY2tfbGluayhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiByZXRfdmFsOworCXUxNiBzcGVlZCwgZHVwbGV4LCBwaHlfZGF0YTsKKwlpbnQgcmVjb25maWcgPSAwOworCisJLyogTUlJX0JNU1IgbXVzdCByZWFkIHR3aWNlICovCisJYXRsMV9yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOworCWF0bDFfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwlpZiAoIShwaHlfZGF0YSAmIEJNU1JfTFNUQVRVUykpIHsKKwkJLyogbGluayBkb3duICovCisJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJCS8qIG9sZCBsaW5rIHN0YXRlOiBVcCAqLworCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJsaW5rIGlzIGRvd25cbiIpOworCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7CisJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQl9CisJCXJldHVybiAwOworCX0KKworCS8qIExpbmsgVXAgKi8KKwlyZXRfdmFsID0gYXRsMV9nZXRfc3BlZWRfYW5kX2R1cGxleChodywgJnNwZWVkLCAmZHVwbGV4KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwlzd2l0Y2ggKGh3LT5tZWRpYV90eXBlKSB7CisJY2FzZSBNRURJQV9UWVBFXzEwMDBNX0ZVTEw6CisJCWlmIChzcGVlZCAhPSBTUEVFRF8xMDAwIHx8IGR1cGxleCAhPSBGVUxMX0RVUExFWCkKKwkJCXJlY29uZmlnID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNRURJQV9UWVBFXzEwME1fRlVMTDoKKwkJaWYgKHNwZWVkICE9IFNQRUVEXzEwMCB8fCBkdXBsZXggIT0gRlVMTF9EVVBMRVgpCisJCQlyZWNvbmZpZyA9IDE7CisJCWJyZWFrOworCWNhc2UgTUVESUFfVFlQRV8xMDBNX0hBTEY6CisJCWlmIChzcGVlZCAhPSBTUEVFRF8xMDAgfHwgZHVwbGV4ICE9IEhBTEZfRFVQTEVYKQorCQkJcmVjb25maWcgPSAxOworCQlicmVhazsKKwljYXNlIE1FRElBX1RZUEVfMTBNX0ZVTEw6CisJCWlmIChzcGVlZCAhPSBTUEVFRF8xMCB8fCBkdXBsZXggIT0gRlVMTF9EVVBMRVgpCisJCQlyZWNvbmZpZyA9IDE7CisJCWJyZWFrOworCWNhc2UgTUVESUFfVFlQRV8xME1fSEFMRjoKKwkJaWYgKHNwZWVkICE9IFNQRUVEXzEwIHx8IGR1cGxleCAhPSBIQUxGX0RVUExFWCkKKwkJCXJlY29uZmlnID0gMTsKKwkJYnJlYWs7CisJfQorCisJLyogbGluayByZXN1bHQgaXMgb3VyIHNldHRpbmcgKi8KKwlpZiAoIXJlY29uZmlnKSB7CisJCWlmIChhZGFwdGVyLT5saW5rX3NwZWVkICE9IHNwZWVkCisJCSAgICB8fCBhZGFwdGVyLT5saW5rX2R1cGxleCAhPSBkdXBsZXgpIHsKKwkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBzcGVlZDsKKwkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gZHVwbGV4OworCQkJYXRsMV9zZXR1cF9tYWNfY3RybChhZGFwdGVyKTsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKKwkJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiJXMgbGluayBpcyB1cCAlZCBNYnBzICVzXG4iLAorCQkJCQluZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmxpbmtfc3BlZWQsCisJCQkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYID8KKwkJCQkJImZ1bGwgZHVwbGV4IiA6ICJoYWxmIGR1cGxleCIpOworCQl9CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQkvKiBMaW5rIGRvd24gLT4gVXAgKi8KKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjaGFuZ2Ugb3JpZ2luYWwgbGluayBzdGF0dXMgKi8KKwlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBTUEVFRF8wOworCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJfQorCisJaWYgKGh3LT5tZWRpYV90eXBlICE9IE1FRElBX1RZUEVfQVVUT19TRU5TT1IgJiYKKwkgICAgaHctPm1lZGlhX3R5cGUgIT0gTUVESUFfVFlQRV8xMDAwTV9GVUxMKSB7CisJCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKKwkJY2FzZSBNRURJQV9UWVBFXzEwME1fRlVMTDoKKwkJCXBoeV9kYXRhID0gTUlJX0NSX0ZVTExfRFVQTEVYIHwgTUlJX0NSX1NQRUVEXzEwMCB8CisJCQkgICAgICAgICAgIE1JSV9DUl9SRVNFVDsKKwkJCWJyZWFrOworCQljYXNlIE1FRElBX1RZUEVfMTAwTV9IQUxGOgorCQkJcGh5X2RhdGEgPSBNSUlfQ1JfU1BFRURfMTAwIHwgTUlJX0NSX1JFU0VUOworCQkJYnJlYWs7CisJCWNhc2UgTUVESUFfVFlQRV8xME1fRlVMTDoKKwkJCXBoeV9kYXRhID0KKwkJCSAgICBNSUlfQ1JfRlVMTF9EVVBMRVggfCBNSUlfQ1JfU1BFRURfMTAgfCBNSUlfQ1JfUkVTRVQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIE1FRElBX1RZUEVfMTBNX0hBTEY6ICovCisJCQlwaHlfZGF0YSA9IE1JSV9DUl9TUEVFRF8xMCB8IE1JSV9DUl9SRVNFVDsKKwkJCWJyZWFrOworCQl9CisJCWF0bDFfd3JpdGVfcGh5X3JlZyhodywgTUlJX0JNQ1IsIHBoeV9kYXRhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogYXV0by1uZWcsIGluc2VydCB0aW1lciB0byByZS1jb25maWcgcGh5ICovCisJaWYgKCFhZGFwdGVyLT5waHlfdGltZXJfcGVuZGluZykgeworCQlhZGFwdGVyLT5waHlfdGltZXJfcGVuZGluZyA9IHRydWU7CisJCW1vZF90aW1lcigmYWRhcHRlci0+cGh5X2NvbmZpZ190aW1lciwgamlmZmllcyArIDMgKiBIWik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9mbG93X2N0cmxfb2xkKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGhpLCBsbywgdmFsdWU7CisKKwkvKiBSRkQgRmxvdyBDb250cm9sICovCisJdmFsdWUgPSBhZGFwdGVyLT5yZmRfcmluZy5jb3VudDsKKwloaSA9IHZhbHVlIC8gMTY7CisJaWYgKGhpIDwgMikKKwkJaGkgPSAyOworCWxvID0gdmFsdWUgKiA3IC8gODsKKworCXZhbHVlID0gKChoaSAmIFJYUV9SWEZfUEFVU0VfVEhfSElfTUFTSykgPDwgUlhRX1JYRl9QQVVTRV9USF9ISV9TSElGVCkgfAorCQkoKGxvICYgUlhRX1JYRl9QQVVTRV9USF9MT19NQVNLKSA8PCBSWFFfUlhGX1BBVVNFX1RIX0xPX1NISUZUKTsKKwlpb3dyaXRlMzIodmFsdWUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfUlhRX1JYRl9QQVVTRV9USFJFU0gpOworCisJLyogUlJEIEZsb3cgQ29udHJvbCAqLworCXZhbHVlID0gYWRhcHRlci0+cnJkX3JpbmcuY291bnQ7CisJbG8gPSB2YWx1ZSAvIDE2OworCWhpID0gdmFsdWUgKiA3IC8gODsKKwlpZiAobG8gPCAyKQorCQlsbyA9IDI7CisJdmFsdWUgPSAoKGhpICYgUlhRX1JSRF9QQVVTRV9USF9ISV9NQVNLKSA8PCBSWFFfUlJEX1BBVVNFX1RIX0hJX1NISUZUKSB8CisJCSgobG8gJiBSWFFfUlJEX1BBVVNFX1RIX0xPX01BU0spIDw8IFJYUV9SUkRfUEFVU0VfVEhfTE9fU0hJRlQpOworCWlvd3JpdGUzMih2YWx1ZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19SWFFfUlJEX1BBVVNFX1RIUkVTSCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9mbG93X2N0cmxfbmV3KHN0cnVjdCBhdGwxX2h3ICpodykKK3sKKwl1MzIgaGksIGxvLCB2YWx1ZTsKKworCS8qIFJYRiBGbG93IENvbnRyb2wgKi8KKwl2YWx1ZSA9IGlvcmVhZDMyKGh3LT5od19hZGRyICsgUkVHX1NSQU1fUlhGX0xFTik7CisJbG8gPSB2YWx1ZSAvIDE2OworCWlmIChsbyA8IDE5MikKKwkJbG8gPSAxOTI7CisJaGkgPSB2YWx1ZSAqIDcgLyA4OworCWlmIChoaSA8IGxvKQorCQloaSA9IGxvICsgMTY7CisJdmFsdWUgPSAoKGhpICYgUlhRX1JYRl9QQVVTRV9USF9ISV9NQVNLKSA8PCBSWFFfUlhGX1BBVVNFX1RIX0hJX1NISUZUKSB8CisJCSgobG8gJiBSWFFfUlhGX1BBVVNFX1RIX0xPX01BU0spIDw8IFJYUV9SWEZfUEFVU0VfVEhfTE9fU0hJRlQpOworCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfUlhRX1JYRl9QQVVTRV9USFJFU0gpOworCisJLyogUlJEIEZsb3cgQ29udHJvbCAqLworCXZhbHVlID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfU1JBTV9SUkRfTEVOKTsKKwlsbyA9IHZhbHVlIC8gODsKKwloaSA9IHZhbHVlICogNyAvIDg7CisJaWYgKGxvIDwgMikKKwkJbG8gPSAyOworCWlmIChoaSA8IGxvKQorCQloaSA9IGxvICsgMzsKKwl2YWx1ZSA9ICgoaGkgJiBSWFFfUlJEX1BBVVNFX1RIX0hJX01BU0spIDw8IFJYUV9SUkRfUEFVU0VfVEhfSElfU0hJRlQpIHwKKwkJKChsbyAmIFJYUV9SUkRfUEFVU0VfVEhfTE9fTUFTSykgPDwgUlhRX1JSRF9QQVVTRV9USF9MT19TSElGVCk7CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19SWFFfUlJEX1BBVVNFX1RIUkVTSCk7Cit9CisKKy8qCisgKiBhdGwxX2NvbmZpZ3VyZSAtIENvbmZpZ3VyZSBUcmFuc21pdCZSZWNlaXZlIFVuaXQgYWZ0ZXIgUmVzZXQKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSB0aGUgVHggL1J4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICovCitzdGF0aWMgdTMyIGF0bDFfY29uZmlndXJlKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2YWx1ZTsKKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KKwlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JU1IpOworCisJLyogc2V0IE1BQyBBZGRyZXNzICovCisJdmFsdWUgPSAoKCh1MzIpIGh3LT5tYWNfYWRkclsyXSkgPDwgMjQpIHwKKwkJKCgodTMyKSBody0+bWFjX2FkZHJbM10pIDw8IDE2KSB8CisJCSgoKHUzMikgaHctPm1hY19hZGRyWzRdKSA8PCA4KSB8CisJCSgoKHUzMikgaHctPm1hY19hZGRyWzVdKSk7CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19NQUNfU1RBX0FERFIpOworCXZhbHVlID0gKCgodTMyKSBody0+bWFjX2FkZHJbMF0pIDw8IDgpIHwgKCgodTMyKSBody0+bWFjX2FkZHJbMV0pKTsKKwlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgKFJFR19NQUNfU1RBX0FERFIgKyA0KSk7CisKKwkvKiB0eCAvIHJ4IHJpbmcgKi8KKworCS8qIEhJIGJhc2UgYWRkcmVzcyAqLworCWlvd3JpdGUzMigodTMyKSAoKGFkYXB0ZXItPnRwZF9yaW5nLmRtYSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgPj4gMzIpLAorCQlody0+aHdfYWRkciArIFJFR19ERVNDX0JBU0VfQUREUl9ISSk7CisJLyogTE8gYmFzZSBhZGRyZXNzICovCisJaW93cml0ZTMyKCh1MzIpIChhZGFwdGVyLT5yZmRfcmluZy5kbWEgJiAweDAwMDAwMDAwZmZmZmZmZmZVTEwpLAorCQlody0+aHdfYWRkciArIFJFR19ERVNDX1JGRF9BRERSX0xPKTsKKwlpb3dyaXRlMzIoKHUzMikgKGFkYXB0ZXItPnJyZF9yaW5nLmRtYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCksCisJCWh3LT5od19hZGRyICsgUkVHX0RFU0NfUlJEX0FERFJfTE8pOworCWlvd3JpdGUzMigodTMyKSAoYWRhcHRlci0+dHBkX3JpbmcuZG1hICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSwKKwkJaHctPmh3X2FkZHIgKyBSRUdfREVTQ19UUERfQUREUl9MTyk7CisJaW93cml0ZTMyKCh1MzIpIChhZGFwdGVyLT5jbWIuZG1hICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSwKKwkJaHctPmh3X2FkZHIgKyBSRUdfREVTQ19DTUJfQUREUl9MTyk7CisJaW93cml0ZTMyKCh1MzIpIChhZGFwdGVyLT5zbWIuZG1hICYgMHgwMDAwMDAwMGZmZmZmZmZmVUxMKSwKKwkJaHctPmh3X2FkZHIgKyBSRUdfREVTQ19TTUJfQUREUl9MTyk7CisKKwkvKiBlbGVtZW50IGNvdW50ICovCisJdmFsdWUgPSBhZGFwdGVyLT5ycmRfcmluZy5jb3VudDsKKwl2YWx1ZSA8PD0gMTY7CisJdmFsdWUgKz0gYWRhcHRlci0+cmZkX3JpbmcuY291bnQ7CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19ERVNDX1JGRF9SUkRfUklOR19TSVpFKTsKKwlpb3dyaXRlMzIoYWRhcHRlci0+dHBkX3JpbmcuY291bnQsIGh3LT5od19hZGRyICsKKwkJUkVHX0RFU0NfVFBEX1JJTkdfU0laRSk7CisKKwkvKiBMb2FkIFB0ciAqLworCWlvd3JpdGUzMigxLCBody0+aHdfYWRkciArIFJFR19MT0FEX1BUUik7CisKKwkvKiBjb25maWcgTWFpbGJveCAqLworCXZhbHVlID0gKChhdG9taWNfcmVhZCgmYWRhcHRlci0+dHBkX3JpbmcubmV4dF90b191c2UpCisJCSAgJiBNQl9UUERfUFJPRF9JTkRYX01BU0spIDw8IE1CX1RQRF9QUk9EX0lORFhfU0hJRlQpIHwKKwkJKChhdG9taWNfcmVhZCgmYWRhcHRlci0+cnJkX3JpbmcubmV4dF90b19jbGVhbikKKwkJJiBNQl9SUkRfQ09OU19JTkRYX01BU0spIDw8IE1CX1JSRF9DT05TX0lORFhfU0hJRlQpIHwKKwkJKChhdG9taWNfcmVhZCgmYWRhcHRlci0+cmZkX3JpbmcubmV4dF90b191c2UpCisJCSYgTUJfUkZEX1BST0RfSU5EWF9NQVNLKSA8PCBNQl9SRkRfUFJPRF9JTkRYX1NISUZUKTsKKwlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX01BSUxCT1gpOworCisJLyogY29uZmlnIElQRy9JRkcgKi8KKwl2YWx1ZSA9ICgoKHUzMikgaHctPmlwZ3QgJiBNQUNfSVBHX0lGR19JUEdUX01BU0spCisJCSA8PCBNQUNfSVBHX0lGR19JUEdUX1NISUZUKSB8CisJCSgoKHUzMikgaHctPm1pbl9pZmcgJiBNQUNfSVBHX0lGR19NSUZHX01BU0spCisJCTw8IE1BQ19JUEdfSUZHX01JRkdfU0hJRlQpIHwKKwkJKCgodTMyKSBody0+aXBncjEgJiBNQUNfSVBHX0lGR19JUEdSMV9NQVNLKQorCQk8PCBNQUNfSVBHX0lGR19JUEdSMV9TSElGVCkgfAorCQkoKCh1MzIpIGh3LT5pcGdyMiAmIE1BQ19JUEdfSUZHX0lQR1IyX01BU0spCisJCTw8IE1BQ19JUEdfSUZHX0lQR1IyX1NISUZUKTsKKwlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX01BQ19JUEdfSUZHKTsKKworCS8qIGNvbmZpZyAgSGFsZi1EdXBsZXggQ29udHJvbCAqLworCXZhbHVlID0gKCh1MzIpIGh3LT5sY29sICYgTUFDX0hBTEZfRFVQTFhfQ1RSTF9MQ09MX01BU0spIHwKKwkJKCgodTMyKSBody0+bWF4X3JldHJ5ICYgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9NQVNLKQorCQk8PCBNQUNfSEFMRl9EVVBMWF9DVFJMX1JFVFJZX1NISUZUKSB8CisJCU1BQ19IQUxGX0RVUExYX0NUUkxfRVhDX0RFRl9FTiB8CisJCSgweGEgPDwgTUFDX0hBTEZfRFVQTFhfQ1RSTF9BQkVCVF9TSElGVCkgfAorCQkoKCh1MzIpIGh3LT5qYW1faXBnICYgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfTUFTSykKKwkJPDwgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfU0hJRlQpOworCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfTUFDX0hBTEZfRFVQTFhfQ1RSTCk7CisKKwkvKiBzZXQgSW50ZXJydXB0IE1vZGVyYXRvciBUaW1lciAqLworCWlvd3JpdGUxNihhZGFwdGVyLT5pbXQsIGh3LT5od19hZGRyICsgUkVHX0lSUV9NT0RVX1RJTUVSX0lOSVQpOworCWlvd3JpdGUzMihNQVNURVJfQ1RSTF9JVElNRVJfRU4sIGh3LT5od19hZGRyICsgUkVHX01BU1RFUl9DVFJMKTsKKworCS8qIHNldCBJbnRlcnJ1cHQgQ2xlYXIgVGltZXIgKi8KKwlpb3dyaXRlMTYoYWRhcHRlci0+aWN0LCBody0+aHdfYWRkciArIFJFR19DTUJESVNETUFfVElNRVIpOworCisJLyogc2V0IG1heCBmcmFtZSBzaXplIGh3IHdpbGwgYWNjZXB0ICovCisJaW93cml0ZTMyKGh3LT5tYXhfZnJhbWVfc2l6ZSwgaHctPmh3X2FkZHIgKyBSRUdfTVRVKTsKKworCS8qIGp1bWJvIHNpemUgJiBycmQgcmV0aXJlbWVudCB0aW1lciAqLworCXZhbHVlID0gKCgodTMyKSBody0+cnhfanVtYm9fdGggJiBSWFFfSk1CT1NaX1RIX01BU0spCisJCSA8PCBSWFFfSk1CT1NaX1RIX1NISUZUKSB8CisJCSgoKHUzMikgaHctPnJ4X2p1bWJvX2xrYWggJiBSWFFfSk1CT19MS0FIX01BU0spCisJCTw8IFJYUV9KTUJPX0xLQUhfU0hJRlQpIHwKKwkJKCgodTMyKSBody0+cnJkX3JldF90aW1lciAmIFJYUV9SUkRfVElNRVJfTUFTSykKKwkJPDwgUlhRX1JSRF9USU1FUl9TSElGVCk7CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19SWFFfSk1CT1NaX1JSRFRJTSk7CisKKwkvKiBGbG93IENvbnRyb2wgKi8KKwlzd2l0Y2ggKGh3LT5kZXZfcmV2KSB7CisJY2FzZSAweDgwMDE6CisJY2FzZSAweDkwMDE6CisJY2FzZSAweDkwMDI6CisJY2FzZSAweDkwMDM6CisJCXNldF9mbG93X2N0cmxfb2xkKGFkYXB0ZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZXRfZmxvd19jdHJsX25ldyhodyk7CisJCWJyZWFrOworCX0KKworCS8qIGNvbmZpZyBUWFEgKi8KKwl2YWx1ZSA9ICgoKHUzMikgaHctPnRwZF9idXJzdCAmIFRYUV9DVFJMX1RQRF9CVVJTVF9OVU1fTUFTSykKKwkJIDw8IFRYUV9DVFJMX1RQRF9CVVJTVF9OVU1fU0hJRlQpIHwKKwkJKCgodTMyKSBody0+dHhmX2J1cnN0ICYgVFhRX0NUUkxfVFhGX0JVUlNUX05VTV9NQVNLKQorCQk8PCBUWFFfQ1RSTF9UWEZfQlVSU1RfTlVNX1NISUZUKSB8CisJCSgoKHUzMikgaHctPnRwZF9mZXRjaF90aCAmIFRYUV9DVFJMX1RQRF9GRVRDSF9USF9NQVNLKQorCQk8PCBUWFFfQ1RSTF9UUERfRkVUQ0hfVEhfU0hJRlQpIHwgVFhRX0NUUkxfRU5IX01PREUgfAorCQlUWFFfQ1RSTF9FTjsKKwlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX1RYUV9DVFJMKTsKKworCS8qIG1pbiB0cGQgZmV0Y2ggZ2FwICYgdHgganVtYm8gcGFja2V0IHNpemUgdGhyZXNob2xkIGZvciB0YXNrb2ZmbG9hZCAqLworCXZhbHVlID0gKCgodTMyKSBody0+dHhfanVtYm9fdGFza190aCAmIFRYX0pVTUJPX1RBU0tfVEhfTUFTSykKKwkJPDwgVFhfSlVNQk9fVEFTS19USF9TSElGVCkgfAorCQkoKCh1MzIpIGh3LT50cGRfZmV0Y2hfZ2FwICYgVFhfVFBEX01JTl9JUEdfTUFTSykKKwkJPDwgVFhfVFBEX01JTl9JUEdfU0hJRlQpOworCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfVFhfSlVNQk9fVEFTS19USF9UUERfSVBHKTsKKworCS8qIGNvbmZpZyBSWFEgKi8KKwl2YWx1ZSA9ICgoKHUzMikgaHctPnJmZF9idXJzdCAmIFJYUV9DVFJMX1JGRF9CVVJTVF9OVU1fTUFTSykKKwkJPDwgUlhRX0NUUkxfUkZEX0JVUlNUX05VTV9TSElGVCkgfAorCQkoKCh1MzIpIGh3LT5ycmRfYnVyc3QgJiBSWFFfQ1RSTF9SUkRfQlVSU1RfVEhSRVNIX01BU0spCisJCTw8IFJYUV9DVFJMX1JSRF9CVVJTVF9USFJFU0hfU0hJRlQpIHwKKwkJKCgodTMyKSBody0+cmZkX2ZldGNoX2dhcCAmIFJYUV9DVFJMX1JGRF9QUkVGX01JTl9JUEdfTUFTSykKKwkJPDwgUlhRX0NUUkxfUkZEX1BSRUZfTUlOX0lQR19TSElGVCkgfCBSWFFfQ1RSTF9DVVRfVEhSVV9FTiB8CisJCVJYUV9DVFJMX0VOOworCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfUlhRX0NUUkwpOworCisJLyogY29uZmlnIERNQSBFbmdpbmUgKi8KKwl2YWx1ZSA9ICgoKCh1MzIpIGh3LT5kbWFyX2Jsb2NrKSAmIERNQV9DVFJMX0RNQVJfQlVSU1RfTEVOX01BU0spCisJCTw8IERNQV9DVFJMX0RNQVJfQlVSU1RfTEVOX1NISUZUKSB8CisJCSgoKCh1MzIpIGh3LT5kbWF3X2Jsb2NrKSAmIERNQV9DVFJMX0RNQVdfQlVSU1RfTEVOX01BU0spCisJCTw8IERNQV9DVFJMX0RNQVdfQlVSU1RfTEVOX1NISUZUKSB8IERNQV9DVFJMX0RNQVJfRU4gfAorCQlETUFfQ1RSTF9ETUFXX0VOOworCXZhbHVlIHw9ICh1MzIpIGh3LT5kbWFfb3JkOworCWlmIChhdGwxX3JjYl8xMjggPT0gaHctPnJjYl92YWx1ZSkKKwkJdmFsdWUgfD0gRE1BX0NUUkxfUkNCX1ZBTFVFOworCWlvd3JpdGUzMih2YWx1ZSwgaHctPmh3X2FkZHIgKyBSRUdfRE1BX0NUUkwpOworCisJLyogY29uZmlnIENNQiAvIFNNQiAqLworCXZhbHVlID0gKGh3LT5jbWJfdHBkID4gYWRhcHRlci0+dHBkX3JpbmcuY291bnQpID8KKwkJaHctPmNtYl90cGQgOiBhZGFwdGVyLT50cGRfcmluZy5jb3VudDsKKwl2YWx1ZSA8PD0gMTY7CisJdmFsdWUgfD0gaHctPmNtYl9ycmQ7CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19DTUJfV1JJVEVfVEgpOworCXZhbHVlID0gaHctPmNtYl9yeF90aW1lciB8ICgodTMyKSBody0+Y21iX3R4X3RpbWVyIDw8IDE2KTsKKwlpb3dyaXRlMzIodmFsdWUsIGh3LT5od19hZGRyICsgUkVHX0NNQl9XUklURV9USU1FUik7CisJaW93cml0ZTMyKGh3LT5zbWJfdGltZXIsIGh3LT5od19hZGRyICsgUkVHX1NNQl9USU1FUik7CisKKwkvKiAtLS0gZW5hYmxlIENNQiAvIFNNQiAqLworCXZhbHVlID0gQ1NNQl9DVFJMX0NNQl9FTiB8IENTTUJfQ1RSTF9TTUJfRU47CisJaW93cml0ZTMyKHZhbHVlLCBody0+aHdfYWRkciArIFJFR19DU01CX0NUUkwpOworCisJdmFsdWUgPSBpb3JlYWQzMihhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lTUik7CisJaWYgKHVubGlrZWx5KCh2YWx1ZSAmIElTUl9QSFlfTElOS0RPV04pICE9IDApKQorCQl2YWx1ZSA9IDE7CS8qIGNvbmZpZyBmYWlsZWQgKi8KKwllbHNlCisJCXZhbHVlID0gMDsKKworCS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHQgc3RhdHVzICovCisJaW93cml0ZTMyKDB4M2ZmZmZmZmYsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSVNSKTsKKwlpb3dyaXRlMzIoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JU1IpOworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIGF0bDFfcGNpZV9wYXRjaCAtIFBhdGNoIGZvciBQQ0lFIG1vZHVsZQorICovCitzdGF0aWMgdm9pZCBhdGwxX3BjaWVfcGF0Y2goc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisKKwkvKiBtdWNoIHZlbmRvciBtYWdpYyBoZXJlICovCisJdmFsdWUgPSAweDY1MDA7CisJaW93cml0ZTMyKHZhbHVlLCBhZGFwdGVyLT5ody5od19hZGRyICsgMHgxMkZDKTsKKwkvKiBwY2llIGZsb3cgY29udHJvbCBtb2RlIGNoYW5nZSAqLworCXZhbHVlID0gaW9yZWFkMzIoYWRhcHRlci0+aHcuaHdfYWRkciArIDB4MTAwOCk7CisJdmFsdWUgfD0gMHg4MDAwOworCWlvd3JpdGUzMih2YWx1ZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIDB4MTAwOCk7Cit9CisKKy8qCisgKiBXaGVuIEFDUEkgcmVzdW1lIG9uIHNvbWUgVklBIE1vdGhlckJvYXJkLCB0aGUgSW50ZXJydXB0IERpc2FibGUgYml0LzB4NDAwCisgKiBvbiBQQ0kgQ29tbWFuZCByZWdpc3RlciBpcyBkaXNhYmxlLgorICogVGhlIGZ1bmN0aW9uIGVuYWJsZSB0aGlzIGJpdC4KKyAqIEJyYWNrZXR0LCAyMDA2LzAzLzE1CisgKi8KK3N0YXRpYyB2b2lkIGF0bDFfdmlhX3dvcmthcm91bmQoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJdmFsdWUgPSBpb3JlYWQxNihhZGFwdGVyLT5ody5od19hZGRyICsgUENJX0NPTU1BTkQpOworCWlmICh2YWx1ZSAmIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSkKKwkJdmFsdWUgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKKwlpb3dyaXRlMzIodmFsdWUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBQQ0lfQ09NTUFORCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfaW5jX3NtYihzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzdGF0c19tc2dfYmxvY2sgKnNtYiA9IGFkYXB0ZXItPnNtYi5zbWI7CisKKwkvKiBGaWxsIG91dCB0aGUgT1Mgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X3BhY2tldHMgKz0gc21iLT5yeF9vazsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X3BhY2tldHMgKz0gc21iLT50eF9vazsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X2J5dGVzICs9IHNtYi0+cnhfYnl0ZV9jbnQ7CisJYWRhcHRlci0+c29mdF9zdGF0cy50eF9ieXRlcyArPSBzbWItPnR4X2J5dGVfY250OworCWFkYXB0ZXItPnNvZnRfc3RhdHMubXVsdGljYXN0ICs9IHNtYi0+cnhfbWNhc3Q7CisJYWRhcHRlci0+c29mdF9zdGF0cy5jb2xsaXNpb25zICs9IChzbWItPnR4XzFfY29sICsgc21iLT50eF8yX2NvbCAqIDIgKworCQlzbWItPnR4X2xhdGVfY29sICsgc21iLT50eF9hYm9ydF9jb2wgKiBhZGFwdGVyLT5ody5tYXhfcmV0cnkpOworCisJLyogUnggRXJyb3JzICovCisJYWRhcHRlci0+c29mdF9zdGF0cy5yeF9lcnJvcnMgKz0gKHNtYi0+cnhfZnJhZyArIHNtYi0+cnhfZmNzX2VyciArCisJCXNtYi0+cnhfbGVuX2VyciArIHNtYi0+cnhfc3pfb3YgKyBzbWItPnJ4X3J4Zl9vdiArCisJCXNtYi0+cnhfcnJkX292ICsgc21iLT5yeF9hbGlnbl9lcnIpOworCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfZmlmb19lcnJvcnMgKz0gc21iLT5yeF9yeGZfb3Y7CisJYWRhcHRlci0+c29mdF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzICs9IHNtYi0+cnhfbGVuX2VycjsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X2NyY19lcnJvcnMgKz0gc21iLT5yeF9mY3NfZXJyOworCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IHNtYi0+cnhfYWxpZ25fZXJyOworCWFkYXB0ZXItPnNvZnRfc3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSAoc21iLT5yeF9ycmRfb3YgKworCQlzbWItPnJ4X3J4Zl9vdik7CisKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X3BhdXNlICs9IHNtYi0+cnhfcGF1c2U7CisJYWRhcHRlci0+c29mdF9zdGF0cy5yeF9ycmRfb3YgKz0gc21iLT5yeF9ycmRfb3Y7CisJYWRhcHRlci0+c29mdF9zdGF0cy5yeF90cnVuYyArPSBzbWItPnJ4X3N6X292OworCisJLyogVHggRXJyb3JzICovCisJYWRhcHRlci0+c29mdF9zdGF0cy50eF9lcnJvcnMgKz0gKHNtYi0+dHhfbGF0ZV9jb2wgKworCQlzbWItPnR4X2Fib3J0X2NvbCArIHNtYi0+dHhfdW5kZXJydW4gKyBzbWItPnR4X3RydW5jKTsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X2ZpZm9fZXJyb3JzICs9IHNtYi0+dHhfdW5kZXJydW47CisJYWRhcHRlci0+c29mdF9zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyArPSBzbWItPnR4X2Fib3J0X2NvbDsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X3dpbmRvd19lcnJvcnMgKz0gc21iLT50eF9sYXRlX2NvbDsKKworCWFkYXB0ZXItPnNvZnRfc3RhdHMuZXhjZWNvbCArPSBzbWItPnR4X2Fib3J0X2NvbDsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLmRlZmZlciArPSBzbWItPnR4X2RlZmVyOworCWFkYXB0ZXItPnNvZnRfc3RhdHMuc2NjICs9IHNtYi0+dHhfMV9jb2w7CisJYWRhcHRlci0+c29mdF9zdGF0cy5tY2MgKz0gc21iLT50eF8yX2NvbDsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLmxhdGVjb2wgKz0gc21iLT50eF9sYXRlX2NvbDsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X3VuZGVydW4gKz0gc21iLT50eF91bmRlcnJ1bjsKKwlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X3RydW5jICs9IHNtYi0+dHhfdHJ1bmM7CisJYWRhcHRlci0+c29mdF9zdGF0cy50eF9wYXVzZSArPSBzbWItPnR4X3BhdXNlOworCisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X3BhY2tldHMgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X3BhY2tldHM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X3BhY2tldHM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2J5dGVzID0gYWRhcHRlci0+c29mdF9zdGF0cy5yeF9ieXRlczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYnl0ZXMgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5tdWx0aWNhc3QgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLm11bHRpY2FzdDsKKwlhZGFwdGVyLT5uZXRfc3RhdHMuY29sbGlzaW9ucyA9IGFkYXB0ZXItPnNvZnRfc3RhdHMuY29sbGlzaW9uczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZXJyb3JzID0gYWRhcHRlci0+c29mdF9zdGF0cy5yeF9lcnJvcnM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X292ZXJfZXJyb3JzID0KKwkJYWRhcHRlci0+c29mdF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0KKwkJYWRhcHRlci0+c29mdF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzID0gYWRhcHRlci0+c29mdF9zdGF0cy5yeF9jcmNfZXJyb3JzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPQorCQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X2ZyYW1lX2Vycm9yczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZmlmb19lcnJvcnMgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0KKwkJYWRhcHRlci0+c29mdF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzOworCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9lcnJvcnMgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X2Vycm9yczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMudHhfZmlmb19lcnJvcnMgPSBhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X2ZpZm9fZXJyb3JzOworCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9CisJCWFkYXB0ZXItPnNvZnRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3dpbmRvd19lcnJvcnMgPQorCQlhZGFwdGVyLT5zb2Z0X3N0YXRzLnR4X3dpbmRvd19lcnJvcnM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzID0KKwkJYWRhcHRlci0+c29mdF9zdGF0cy50eF9jYXJyaWVyX2Vycm9yczsKK30KKworc3RhdGljIHZvaWQgYXRsMV91cGRhdGVfbWFpbGJveChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRwZF9uZXh0X3RvX3VzZTsKKwl1MzIgcmZkX25leHRfdG9fdXNlOworCXUzMiBycmRfbmV4dF90b19jbGVhbjsKKwl1MzIgdmFsdWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bWJfbG9jaywgZmxhZ3MpOworCisJdHBkX25leHRfdG9fdXNlID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnRwZF9yaW5nLm5leHRfdG9fdXNlKTsKKwlyZmRfbmV4dF90b191c2UgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmZkX3JpbmcubmV4dF90b191c2UpOworCXJyZF9uZXh0X3RvX2NsZWFuID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJyZF9yaW5nLm5leHRfdG9fY2xlYW4pOworCisJdmFsdWUgPSAoKHJmZF9uZXh0X3RvX3VzZSAmIE1CX1JGRF9QUk9EX0lORFhfTUFTSykgPDwKKwkJTUJfUkZEX1BST0RfSU5EWF9TSElGVCkgfAorCQkoKHJyZF9uZXh0X3RvX2NsZWFuICYgTUJfUlJEX0NPTlNfSU5EWF9NQVNLKSA8PAorCQlNQl9SUkRfQ09OU19JTkRYX1NISUZUKSB8CisJCSgodHBkX25leHRfdG9fdXNlICYgTUJfVFBEX1BST0RfSU5EWF9NQVNLKSA8PAorCQlNQl9UUERfUFJPRF9JTkRYX1NISUZUKTsKKwlpb3dyaXRlMzIodmFsdWUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfTUFJTEJPWCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5tYl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfY2xlYW5fYWxsb2NfZmxhZyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLAorCXN0cnVjdCByeF9yZXR1cm5fZGVzYyAqcnJkLCB1MTYgb2Zmc2V0KQoreworCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyZmRfcmluZyA9ICZhZGFwdGVyLT5yZmRfcmluZzsKKworCXdoaWxlIChyZmRfcmluZy0+bmV4dF90b19jbGVhbiAhPSAocnJkLT5idWZfaW5keCArIG9mZnNldCkpIHsKKwkJcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW3JmZF9yaW5nLT5uZXh0X3RvX2NsZWFuXS5hbGxvY2VkID0gMDsKKwkJaWYgKCsrcmZkX3JpbmctPm5leHRfdG9fY2xlYW4gPT0gcmZkX3JpbmctPmNvdW50KSB7CisJCQlyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfdXBkYXRlX3JmZF9pbmRleChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLAorCXN0cnVjdCByeF9yZXR1cm5fZGVzYyAqcnJkKQoreworCXUxNiBudW1fYnVmOworCisJbnVtX2J1ZiA9IChycmQtPnhzei54c3VtX3N6LnBrdF9zaXplICsgYWRhcHRlci0+cnhfYnVmZmVyX2xlbiAtIDEpIC8KKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKKwlpZiAocnJkLT5udW1fYnVmID09IG51bV9idWYpCisJCS8qIGNsZWFuIGFsbG9jIGZsYWcgZm9yIGJhZCBycmQgKi8KKwkJYXRsMV9jbGVhbl9hbGxvY19mbGFnKGFkYXB0ZXIsIHJyZCwgbnVtX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfcnhfY2hlY2tzdW0oc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgcnhfcmV0dXJuX2Rlc2MgKnJyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwlpZiAodW5saWtlbHkocnJkLT5wa3RfZmxnICYgUEFDS0VUX0ZMQUdfRVJSKSkgeworCQlpZiAocnJkLT5lcnJfZmxnICYgKEVSUl9GTEFHX0NSQyB8IEVSUl9GTEFHX1RSVU5DIHwKKwkJCQkJRVJSX0ZMQUdfQ09ERSB8IEVSUl9GTEFHX09WKSkgeworCQkJYWRhcHRlci0+aHdfY3N1bV9lcnIrKzsKKwkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGFkYXB0ZXIpKQorCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKKwkJCQkJInJ4IGNoZWNrc3VtIGVycm9yXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIG5vdCBJUHY0ICovCisJaWYgKCEocnJkLT5wa3RfZmxnICYgUEFDS0VUX0ZMQUdfSVBWNCkpCisJCS8qIGNoZWNrc3VtIGlzIGludmFsaWQsIGJ1dCBpdCdzIG5vdCBhbiBJUHY0IHBrdCwgc28gb2sgKi8KKwkJcmV0dXJuOworCisJLyogSVB2NCBwYWNrZXQgKi8KKwlpZiAobGlrZWx5KCEocnJkLT5lcnJfZmxnICYKKwkJKEVSUl9GTEFHX0lQX0NIS1NVTSB8IEVSUl9GTEFHX0w0X0NIS1NVTSkpKSkgeworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQlhZGFwdGVyLT5od19jc3VtX2dvb2QrKzsKKwkJcmV0dXJuOworCX0KKworCS8qIElQdjQsIGJ1dCBoYXJkd2FyZSB0aGlua3MgaXRzIGNoZWNrc3VtIGlzIHdyb25nICovCisJaWYgKG5ldGlmX21zZ19yeF9lcnIoYWRhcHRlcikpCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKKwkJCSJodyBjc3VtIHdyb25nLCBwa3RfZmxhZzoleCwgZXJyX2ZsYWc6JXhcbiIsCisJCQlycmQtPnBrdF9mbGcsIHJyZC0+ZXJyX2ZsZyk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKKwlza2ItPmNzdW0gPSBodG9ucyhycmQtPnhzei54c3VtX3N6LnJ4X2Noa3N1bSk7CisJYWRhcHRlci0+aHdfY3N1bV9lcnIrKzsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBhdGwxX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzCisgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdTE2IGF0bDFfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyZmRfcmluZyA9ICZhZGFwdGVyLT5yZmRfcmluZzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbywgKm5leHRfaW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUxNiBudW1fYWxsb2MgPSAwOworCXUxNiByZmRfbmV4dF90b191c2UsIG5leHRfbmV4dDsKKwlzdHJ1Y3QgcnhfZnJlZV9kZXNjICpyZmRfZGVzYzsKKworCW5leHRfbmV4dCA9IHJmZF9uZXh0X3RvX3VzZSA9IGF0b21pY19yZWFkKCZyZmRfcmluZy0+bmV4dF90b191c2UpOworCWlmICgrK25leHRfbmV4dCA9PSByZmRfcmluZy0+Y291bnQpCisJCW5leHRfbmV4dCA9IDA7CisJYnVmZmVyX2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW3JmZF9uZXh0X3RvX3VzZV07CisJbmV4dF9pbmZvID0gJnJmZF9yaW5nLT5idWZmZXJfaW5mb1tuZXh0X25leHRdOworCisJd2hpbGUgKCFidWZmZXJfaW5mby0+YWxsb2NlZCAmJiAhbmV4dF9pbmZvLT5hbGxvY2VkKSB7CisJCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCQlidWZmZXJfaW5mby0+YWxsb2NlZCA9IDE7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlyZmRfZGVzYyA9IEFUTDFfUkZEX0RFU0MocmZkX3JpbmcsIHJmZF9uZXh0X3RvX3VzZSk7CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5yeF9idWZmZXJfbGVuICsgTkVUX0lQX0FMSUdOKTsKKwkJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCQkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kICovCisJCQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZHJvcHBlZCsrOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBNYWtlIGJ1ZmZlciBhbGlnbm1lbnQgMiBiZXlvbmQgYSAxNiBieXRlIGJvdW5kYXJ5CisJCSAqIHRoaXMgd2lsbCByZXN1bHQgaW4gYSAxNiBieXRlIGFsaWduZWQgSVAgaGVhZGVyIGFmdGVyCisJCSAqIHRoZSAxNCBieXRlIE1BQyBoZWFkZXIgaXMgcmVtb3ZlZAorCQkgKi8KKwkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCisJCWJ1ZmZlcl9pbmZvLT5hbGxvY2VkID0gMTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKKwkJYnVmZmVyX2luZm8tPmxlbmd0aCA9ICh1MTYpIGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW47CisJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2tiLT5kYXRhKTsKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgflBBR0VfTUFTSzsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfcGFnZShwZGV2LCBwYWdlLCBvZmZzZXQsCisJCQkJCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmZkX2Rlc2MtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7CisJCXJmZF9kZXNjLT5idWZfbGVuID0gY3B1X3RvX2xlMTYoYWRhcHRlci0+cnhfYnVmZmVyX2xlbik7CisJCXJmZF9kZXNjLT5jb2FsZXNlID0gMDsKKworbmV4dDoKKwkJcmZkX25leHRfdG9fdXNlID0gbmV4dF9uZXh0OworCQlpZiAodW5saWtlbHkoKytuZXh0X25leHQgPT0gcmZkX3JpbmctPmNvdW50KSkKKwkJCW5leHRfbmV4dCA9IDA7CisKKwkJYnVmZmVyX2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW3JmZF9uZXh0X3RvX3VzZV07CisJCW5leHRfaW5mbyA9ICZyZmRfcmluZy0+YnVmZmVyX2luZm9bbmV4dF9uZXh0XTsKKwkJbnVtX2FsbG9jKys7CisJfQorCisJaWYgKG51bV9hbGxvYykgeworCQkvKgorCQkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdworCQkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCQkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAorCQkgKiBzdWNoIGFzIElBLTY0KS4KKwkJICovCisJCXdtYigpOworCQlhdG9taWNfc2V0KCZyZmRfcmluZy0+bmV4dF90b191c2UsIChpbnQpcmZkX25leHRfdG9fdXNlKTsKKwl9CisJcmV0dXJuIG51bV9hbGxvYzsKK30KKworc3RhdGljIHZvaWQgYXRsMV9pbnRyX3J4KHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGNvdW50OworCXUxNiBsZW5ndGg7CisJdTE2IHJyZF9uZXh0X3RvX2NsZWFuOworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgYXRsMV9yZmRfcmluZyAqcmZkX3JpbmcgPSAmYWRhcHRlci0+cmZkX3Jpbmc7CisJc3RydWN0IGF0bDFfcnJkX3JpbmcgKnJyZF9yaW5nID0gJmFkYXB0ZXItPnJyZF9yaW5nOworCXN0cnVjdCBhdGwxX2J1ZmZlciAqYnVmZmVyX2luZm87CisJc3RydWN0IHJ4X3JldHVybl9kZXNjICpycmQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWNvdW50ID0gMDsKKworCXJyZF9uZXh0X3RvX2NsZWFuID0gYXRvbWljX3JlYWQoJnJyZF9yaW5nLT5uZXh0X3RvX2NsZWFuKTsKKworCXdoaWxlICgxKSB7CisJCXJyZCA9IEFUTDFfUlJEX0RFU0MocnJkX3JpbmcsIHJyZF9uZXh0X3RvX2NsZWFuKTsKKwkJaSA9IDE7CisJCWlmIChsaWtlbHkocnJkLT54c3oudmFsaWQpKSB7CS8qIHBhY2tldCB2YWxpZCAqLworY2hrX3JyZDoKKwkJCS8qIGNoZWNrIHJyZCBzdGF0dXMgKi8KKwkJCWlmIChsaWtlbHkocnJkLT5udW1fYnVmID09IDEpKQorCQkJCWdvdG8gcnJkX29rOworCQkJZWxzZSBpZiAobmV0aWZfbXNnX3J4X2VycihhZGFwdGVyKSkgeworCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJInVuZXhwZWN0ZWQgUlJEIGJ1ZmZlciBjb3VudFxuIik7CisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkicnhfYnVmX2xlbiA9ICVkXG4iLAorCQkJCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuKTsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJSUkQgbnVtX2J1ZiA9ICVkXG4iLAorCQkJCQlycmQtPm51bV9idWYpOworCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJIlJSRCBwa3RfbGVuID0gJWRcbiIsCisJCQkJCXJyZC0+eHN6LnhzdW1fc3oucGt0X3NpemUpOworCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJIlJSRCBwa3RfZmxnID0gMHglMDhYXG4iLAorCQkJCQlycmQtPnBrdF9mbGcpOworCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJIlJSRCBlcnJfZmxnID0gMHglMDhYXG4iLAorCQkJCQlycmQtPmVycl9mbGcpOworCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJIlJSRCB2bGFuX3RhZyA9IDB4JTA4WFxuIiwKKwkJCQkJcnJkLT52bGFuX3RhZyk7CisJCQl9CisKKwkJCS8qIHJyZCBzZWVtcyB0byBiZSBiYWQgKi8KKwkJCWlmICh1bmxpa2VseShpLS0gPiAwKSkgeworCQkJCS8qIHJyZCBtYXkgbm90IGJlIERNQWVkIGNvbXBsZXRlbHkgKi8KKwkJCQl1ZGVsYXkoMSk7CisJCQkJZ290byBjaGtfcnJkOworCQkJfQorCQkJLyogYmFkIHJyZCAqLworCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoYWRhcHRlcikpCisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiYmFkIFJSRFxuIik7CisJCQkvKiBzZWUgaWYgdXBkYXRlIFJGRCBpbmRleCAqLworCQkJaWYgKHJyZC0+bnVtX2J1ZiA+IDEpCisJCQkJYXRsMV91cGRhdGVfcmZkX2luZGV4KGFkYXB0ZXIsIHJyZCk7CisKKwkJCS8qIHVwZGF0ZSBycmQgKi8KKwkJCXJyZC0+eHN6LnZhbGlkID0gMDsKKwkJCWlmICgrK3JyZF9uZXh0X3RvX2NsZWFuID09IHJyZF9yaW5nLT5jb3VudCkKKwkJCQlycmRfbmV4dF90b19jbGVhbiA9IDA7CisJCQljb3VudCsrOworCQkJY29udGludWU7CisJCX0gZWxzZSB7CS8qIGN1cnJlbnQgcnJkIHN0aWxsIG5vdCBiZSB1cGRhdGVkICovCisKKwkJCWJyZWFrOworCQl9CitycmRfb2s6CisJCS8qIGNsZWFuIGFsbG9jIGZsYWcgZm9yIGJhZCBycmQgKi8KKwkJYXRsMV9jbGVhbl9hbGxvY19mbGFnKGFkYXB0ZXIsIHJyZCwgMCk7CisKKwkJYnVmZmVyX2luZm8gPSAmcmZkX3JpbmctPmJ1ZmZlcl9pbmZvW3JyZC0+YnVmX2luZHhdOworCQlpZiAoKytyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9PSByZmRfcmluZy0+Y291bnQpCisJCQlyZmRfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisKKwkJLyogdXBkYXRlIHJyZCBuZXh0IHRvIGNsZWFuICovCisJCWlmICgrK3JyZF9uZXh0X3RvX2NsZWFuID09IHJyZF9yaW5nLT5jb3VudCkKKwkJCXJyZF9uZXh0X3RvX2NsZWFuID0gMDsKKwkJY291bnQrKzsKKworCQlpZiAodW5saWtlbHkocnJkLT5wa3RfZmxnICYgUEFDS0VUX0ZMQUdfRVJSKSkgeworCQkJaWYgKCEocnJkLT5lcnJfZmxnICYKKwkJCQkoRVJSX0ZMQUdfSVBfQ0hLU1VNIHwgRVJSX0ZMQUdfTDRfQ0hLU1VNCisJCQkJfCBFUlJfRkxBR19MRU4pKSkgeworCQkJCS8qIHBhY2tldCBlcnJvciwgZG9uJ3QgbmVlZCB1cHN0cmVhbSAqLworCQkJCWJ1ZmZlcl9pbmZvLT5hbGxvY2VkID0gMDsKKwkJCQlycmQtPnhzei52YWxpZCA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkvKiBHb29kIFJlY2VpdmUgKi8KKwkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKKwkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOworCQlsZW5ndGggPSBsZTE2X3RvX2NwdShycmQtPnhzei54c3VtX3N6LnBrdF9zaXplKTsKKworCQlza2JfcHV0KHNrYiwgbGVuZ3RoIC0gRVRIX0ZDU19MRU4pOworCisJCS8qIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCAqLworCQlhdGwxX3J4X2NoZWNrc3VtKGFkYXB0ZXIsIHJyZCwgc2tiKTsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgKHJyZC0+cGt0X2ZsZyAmIFBBQ0tFVF9GTEFHX1ZMQU5fSU5TKSkgeworCQkJdTE2IHZsYW5fdGFnID0gKHJyZC0+dmxhbl90YWcgPj4gNCkgfAorCQkJCQkoKHJyZC0+dmxhbl90YWcgJiA3KSA8PCAxMykgfAorCQkJCQkoKHJyZC0+dmxhbl90YWcgJiA4KSA8PCA5KTsKKwkJCXZsYW5faHdhY2NlbF9yeChza2IsIGFkYXB0ZXItPnZsZ3JwLCB2bGFuX3RhZyk7CisJCX0gZWxzZQorCQkJbmV0aWZfcngoc2tiKTsKKworCQkvKiBsZXQgcHJvdG9jb2wgbGF5ZXIgZnJlZSBza2IgKi8KKwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCWJ1ZmZlcl9pbmZvLT5hbGxvY2VkID0gMDsKKwkJcnJkLT54c3oudmFsaWQgPSAwOworCisJCWFkYXB0ZXItPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJfQorCisJYXRvbWljX3NldCgmcnJkX3JpbmctPm5leHRfdG9fY2xlYW4sIHJyZF9uZXh0X3RvX2NsZWFuKTsKKworCWF0bDFfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyKTsKKworCS8qIHVwZGF0ZSBtYWlsYm94ID8gKi8KKwlpZiAoY291bnQpIHsKKwkJdTMyIHRwZF9uZXh0X3RvX3VzZTsKKwkJdTMyIHJmZF9uZXh0X3RvX3VzZTsKKworCQlzcGluX2xvY2soJmFkYXB0ZXItPm1iX2xvY2spOworCisJCXRwZF9uZXh0X3RvX3VzZSA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT50cGRfcmluZy5uZXh0X3RvX3VzZSk7CisJCXJmZF9uZXh0X3RvX3VzZSA9CisJCSAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmZkX3JpbmcubmV4dF90b191c2UpOworCQlycmRfbmV4dF90b19jbGVhbiA9CisJCSAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+cnJkX3JpbmcubmV4dF90b19jbGVhbik7CisJCXZhbHVlID0gKChyZmRfbmV4dF90b191c2UgJiBNQl9SRkRfUFJPRF9JTkRYX01BU0spIDw8CisJCQlNQl9SRkRfUFJPRF9JTkRYX1NISUZUKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHJyZF9uZXh0X3RvX2NsZWFuICYgTUJfUlJEX0NPTlNfSU5EWF9NQVNLKSA8PAorCQkJTUJfUlJEX0NPTlNfSU5EWF9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh0cGRfbmV4dF90b191c2UgJiBNQl9UUERfUFJPRF9JTkRYX01BU0spIDw8CisJCQlNQl9UUERfUFJPRF9JTkRYX1NISUZUKTsKKwkJaW93cml0ZTMyKHZhbHVlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX01BSUxCT1gpOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+bWJfbG9jayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGwxX2ludHJfdHgoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7CisJc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKKwl1MTYgc3dfdHBkX25leHRfdG9fY2xlYW47CisJdTE2IGNtYl90cGRfbmV4dF90b19jbGVhbjsKKworCXN3X3RwZF9uZXh0X3RvX2NsZWFuID0gYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX2NsZWFuKTsKKwljbWJfdHBkX25leHRfdG9fY2xlYW4gPSBsZTE2X3RvX2NwdShhZGFwdGVyLT5jbWIuY21iLT50cGRfY29uc19pZHgpOworCisJd2hpbGUgKGNtYl90cGRfbmV4dF90b19jbGVhbiAhPSBzd190cGRfbmV4dF90b19jbGVhbikgeworCQlzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MgKnRwZDsKKworCQl0cGQgPSBBVEwxX1RQRF9ERVNDKHRwZF9yaW5nLCBzd190cGRfbmV4dF90b19jbGVhbik7CisJCWJ1ZmZlcl9pbmZvID0gJnRwZF9yaW5nLT5idWZmZXJfaW5mb1tzd190cGRfbmV4dF90b19jbGVhbl07CisJCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7CisJCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCQl9CisKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJCWRldl9rZnJlZV9za2JfaXJxKGJ1ZmZlcl9pbmZvLT5za2IpOworCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCX0KKworCQlpZiAoKytzd190cGRfbmV4dF90b19jbGVhbiA9PSB0cGRfcmluZy0+Y291bnQpCisJCQlzd190cGRfbmV4dF90b19jbGVhbiA9IDA7CisJfQorCWF0b21pY19zZXQoJnRwZF9yaW5nLT5uZXh0X3RvX2NsZWFuLCBzd190cGRfbmV4dF90b19jbGVhbik7CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChhZGFwdGVyLT5uZXRkZXYpCisJICAgICYmIG5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworfQorCitzdGF0aWMgdTE2IGF0bDFfdHBkX2F2YWlsKHN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRfcmluZykKK3sKKwl1MTYgbmV4dF90b19jbGVhbiA9IGF0b21pY19yZWFkKCZ0cGRfcmluZy0+bmV4dF90b19jbGVhbik7CisJdTE2IG5leHRfdG9fdXNlID0gYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX3VzZSk7CisJcmV0dXJuICgobmV4dF90b19jbGVhbiA+IG5leHRfdG9fdXNlKSA/CisJCW5leHRfdG9fY2xlYW4gLSBuZXh0X3RvX3VzZSAtIDEgOgorCQl0cGRfcmluZy0+Y291bnQgKyBuZXh0X3RvX2NsZWFuIC0gbmV4dF90b191c2UgLSAxKTsKK30KKworc3RhdGljIGludCBhdGwxX3RzbyhzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCXN0cnVjdCB0eF9wYWNrZXRfZGVzYyAqcHRwZCkKK3sKKwkvKiBzcGlubG9jayBoZWxkICovCisJdTggaGRyX2xlbiwgaXBfb2ZmOworCXUzMiByZWFsX2xlbjsKKwlpbnQgZXJyOworCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpIHsKKwkJaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpIHsKKwkJCWVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTsKKwkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQKSkgeworCQkJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKKworCQkJcmVhbF9sZW4gPSAoKCh1bnNpZ25lZCBjaGFyICopaXBoIC0gc2tiLT5kYXRhKSArCisJCQkJbnRvaHMoaXBoLT50b3RfbGVuKSk7CisJCQlpZiAocmVhbF9sZW4gPCBza2ItPmxlbikKKwkJCQlwc2tiX3RyaW0oc2tiLCByZWFsX2xlbik7CisJCQloZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOworCQkJaWYgKHNrYi0+bGVuID09IGhkcl9sZW4pIHsKKwkJCQlpcGgtPmNoZWNrID0gMDsKKwkJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0KKwkJCQkJfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsCisJCQkJCWlwaC0+ZGFkZHIsIHRjcF9oZHJsZW4oc2tiKSwKKwkJCQkJSVBQUk9UT19UQ1AsIDApOworCQkJCXB0cGQtPndvcmQzIHw9IChpcGgtPmlobCAmIFRQRF9JUEhMX01BU0spIDw8CisJCQkJCVRQRF9JUEhMX1NISUZUOworCQkJCXB0cGQtPndvcmQzIHw9ICgodGNwX2hkcmxlbihza2IpID4+IDIpICYKKwkJCQkJVFBEX1RDUEhEUkxFTl9NQVNLKSA8PAorCQkJCQlUUERfVENQSERSTEVOX1NISUZUOworCQkJCXB0cGQtPndvcmQzIHw9IDEgPDwgVFBEX0lQX0NTVU1fU0hJRlQ7CisJCQkJcHRwZC0+d29yZDMgfD0gMSA8PCBUUERfVENQX0NTVU1fU0hJRlQ7CisJCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJCWlwaC0+Y2hlY2sgPSAwOworCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLAorCQkJCQlpcGgtPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7CisJCQlpcF9vZmYgPSAodW5zaWduZWQgY2hhciAqKWlwaCAtCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CisJCQlpZiAoaXBfb2ZmID09IDgpIC8qIDgwMi4zLVNOQVAgZnJhbWUgKi8KKwkJCQlwdHBkLT53b3JkMyB8PSAxIDw8IFRQRF9FVEhUWVBFX1NISUZUOworCQkJZWxzZSBpZiAoaXBfb2ZmICE9IDApCisJCQkJcmV0dXJuIC0yOworCisJCQlwdHBkLT53b3JkMyB8PSAoaXBoLT5paGwgJiBUUERfSVBITF9NQVNLKSA8PAorCQkJCVRQRF9JUEhMX1NISUZUOworCQkJcHRwZC0+d29yZDMgfD0gKCh0Y3BfaGRybGVuKHNrYikgPj4gMikgJgorCQkJCVRQRF9UQ1BIRFJMRU5fTUFTSykgPDwgVFBEX1RDUEhEUkxFTl9TSElGVDsKKwkJCXB0cGQtPndvcmQzIHw9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICYKKwkJCQlUUERfTVNTX01BU0spIDw8IFRQRF9NU1NfU0hJRlQ7CisJCQlwdHBkLT53b3JkMyB8PSAxIDw8IFRQRF9TRUdNRU5UX0VOX1NISUZUOworCQkJcmV0dXJuIDM7CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IGF0bDFfdHhfY3N1bShzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCXN0cnVjdCB0eF9wYWNrZXRfZGVzYyAqcHRwZCkKK3sKKwl1OCBjc3MsIGNzbzsKKworCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKKwkJY3NzID0gKHU4KSAoc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYikpOworCQljc28gPSBjc3MgKyAodTgpIHNrYi0+Y3N1bV9vZmZzZXQ7CisJCWlmICh1bmxpa2VseShjc3MgJiAweDEpKSB7CisJCQkvKiBMMSBoYXJkd2FyZSByZXF1aXJlcyBhbiBldmVuIG51bWJlciBoZXJlICovCisJCQlpZiAobmV0aWZfbXNnX3R4X2VycihhZGFwdGVyKSkKKwkJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJwYXlsb2FkIG9mZnNldCBub3QgYW4gZXZlbiBudW1iZXJcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXB0cGQtPndvcmQzIHw9IChjc3MgJiBUUERfUExPQURPRkZTRVRfTUFTSykgPDwKKwkJCVRQRF9QTE9BRE9GRlNFVF9TSElGVDsKKwkJcHRwZC0+d29yZDMgfD0gKGNzbyAmIFRQRF9DQ1NVTU9GRlNFVF9NQVNLKSA8PAorCQkJVFBEX0NDU1VNT0ZGU0VUX1NISUZUOworCQlwdHBkLT53b3JkMyB8PSAxIDw8IFRQRF9DVVNUX0NTVU1fRU5fU0hJRlQ7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRsMV90eF9tYXAoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MgKnB0cGQpCit7CisJLyogc3BpbmxvY2sgaGVsZCAqLworCXN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRfcmluZyA9ICZhZGFwdGVyLT50cGRfcmluZzsKKwlzdHJ1Y3QgYXRsMV9idWZmZXIgKmJ1ZmZlcl9pbmZvOworCXUxNiBidWZfbGVuID0gc2tiLT5sZW47CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgaW50IG5yX2ZyYWdzOworCXVuc2lnbmVkIGludCBmOworCWludCByZXR2YWw7CisJdTE2IG5leHRfdG9fdXNlOworCXUxNiBkYXRhX2xlbjsKKwl1OCBoZHJfbGVuOworCisJYnVmX2xlbiAtPSBza2ItPmRhdGFfbGVuOworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwluZXh0X3RvX3VzZSA9IGF0b21pY19yZWFkKCZ0cGRfcmluZy0+bmV4dF90b191c2UpOworCWJ1ZmZlcl9pbmZvID0gJnRwZF9yaW5nLT5idWZmZXJfaW5mb1tuZXh0X3RvX3VzZV07CisJaWYgKHVubGlrZWx5KGJ1ZmZlcl9pbmZvLT5za2IpKQorCQlCVUcoKTsKKwkvKiBwdXQgc2tiIGluIGxhc3QgVFBEICovCisJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisKKwlyZXR2YWwgPSAocHRwZC0+d29yZDMgPj4gVFBEX1NFR01FTlRfRU5fU0hJRlQpICYgVFBEX1NFR01FTlRfRU5fTUFTSzsKKwlpZiAocmV0dmFsKSB7CisJCS8qIFRTTyAqLworCQloZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKKwkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGhkcl9sZW47CisJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2tiLT5kYXRhKTsKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgflBBR0VfTUFTSzsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBwYWdlLAorCQkJCQkJb2Zmc2V0LCBoZHJfbGVuLAorCQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKKwkJaWYgKCsrbmV4dF90b191c2UgPT0gdHBkX3JpbmctPmNvdW50KQorCQkJbmV4dF90b191c2UgPSAwOworCisJCWlmIChidWZfbGVuID4gaGRyX2xlbikgeworCQkJaW50IGksIG5zZWc7CisKKwkJCWRhdGFfbGVuID0gYnVmX2xlbiAtIGhkcl9sZW47CisJCQluc2VnID0gKGRhdGFfbGVuICsgQVRMMV9NQVhfVFhfQlVGX0xFTiAtIDEpIC8KKwkJCQlBVEwxX01BWF9UWF9CVUZfTEVOOworCQkJZm9yIChpID0gMDsgaSA8IG5zZWc7IGkrKykgeworCQkJCWJ1ZmZlcl9pbmZvID0KKwkJCQkgICAgJnRwZF9yaW5nLT5idWZmZXJfaW5mb1tuZXh0X3RvX3VzZV07CisJCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9CisJCQkJICAgIChBVEwxX01BWF9UWF9CVUZfTEVOID49CisJCQkJICAgICBkYXRhX2xlbikgPyBBVEwxX01BWF9UWF9CVUZfTEVOIDogZGF0YV9sZW47CisJCQkJZGF0YV9sZW4gLT0gYnVmZmVyX2luZm8tPmxlbmd0aDsKKwkJCQlwYWdlID0gdmlydF90b19wYWdlKHNrYi0+ZGF0YSArCisJCQkJCShoZHJfbGVuICsgaSAqIEFUTDFfTUFYX1RYX0JVRl9MRU4pKTsKKwkJCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhICsKKwkJCQkJKGhkcl9sZW4gKyBpICogQVRMMV9NQVhfVFhfQlVGX0xFTikpICYKKwkJCQkJflBBR0VfTUFTSzsKKwkJCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJCXBhZ2UsIG9mZnNldCwgYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQkJaWYgKCsrbmV4dF90b191c2UgPT0gdHBkX3JpbmctPmNvdW50KQorCQkJCQluZXh0X3RvX3VzZSA9IDA7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBub3QgVFNPICovCisJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBidWZfbGVuOworCQlwYWdlID0gdmlydF90b19wYWdlKHNrYi0+ZGF0YSk7CisJCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIH5QQUdFX01BU0s7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcGFnZSwKKwkJCW9mZnNldCwgYnVmX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmICgrK25leHRfdG9fdXNlID09IHRwZF9yaW5nLT5jb3VudCkKKwkJCW5leHRfdG9fdXNlID0gMDsKKwl9CisKKwlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgeworCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOworCQl1MTYgaSwgbnNlZzsKKworCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CisJCWJ1Zl9sZW4gPSBmcmFnLT5zaXplOworCisJCW5zZWcgPSAoYnVmX2xlbiArIEFUTDFfTUFYX1RYX0JVRl9MRU4gLSAxKSAvCisJCQlBVEwxX01BWF9UWF9CVUZfTEVOOworCQlmb3IgKGkgPSAwOyBpIDwgbnNlZzsgaSsrKSB7CisJCQlidWZmZXJfaW5mbyA9ICZ0cGRfcmluZy0+YnVmZmVyX2luZm9bbmV4dF90b191c2VdOworCQkJaWYgKHVubGlrZWx5KGJ1ZmZlcl9pbmZvLT5za2IpKQorCQkJCUJVRygpOworCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gKGJ1Zl9sZW4gPiBBVEwxX01BWF9UWF9CVUZfTEVOKSA/CisJCQkJQVRMMV9NQVhfVFhfQlVGX0xFTiA6IGJ1Zl9sZW47CisJCQlidWZfbGVuIC09IGJ1ZmZlcl9pbmZvLT5sZW5ndGg7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJZnJhZy0+cGFnZSwKKwkJCQlmcmFnLT5wYWdlX29mZnNldCArIChpICogQVRMMV9NQVhfVFhfQlVGX0xFTiksCisJCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJCWlmICgrK25leHRfdG9fdXNlID09IHRwZF9yaW5nLT5jb3VudCkKKwkJCQluZXh0X3RvX3VzZSA9IDA7CisJCX0KKwl9CisKKwkvKiBsYXN0IHRwZCdzIGJ1ZmZlci1pbmZvICovCisJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKK30KKworc3RhdGljIHZvaWQgYXRsMV90eF9xdWV1ZShzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyLCB1MTYgY291bnQsCisgICAgICAgc3RydWN0IHR4X3BhY2tldF9kZXNjICpwdHBkKQoreworCS8qIHNwaW5sb2NrIGhlbGQgKi8KKwlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7CisJc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKKwlzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MgKnRwZDsKKwl1MTYgajsKKwl1MzIgdmFsOworCXUxNiBuZXh0X3RvX3VzZSA9ICh1MTYpIGF0b21pY19yZWFkKCZ0cGRfcmluZy0+bmV4dF90b191c2UpOworCisJZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHsKKwkJYnVmZmVyX2luZm8gPSAmdHBkX3JpbmctPmJ1ZmZlcl9pbmZvW25leHRfdG9fdXNlXTsKKwkJdHBkID0gQVRMMV9UUERfREVTQygmYWRhcHRlci0+dHBkX3JpbmcsIG5leHRfdG9fdXNlKTsKKwkJaWYgKHRwZCAhPSBwdHBkKQorCQkJbWVtY3B5KHRwZCwgcHRwZCwgc2l6ZW9mKHN0cnVjdCB0eF9wYWNrZXRfZGVzYykpOworCQl0cGQtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7CisJCXRwZC0+d29yZDIgPSAoY3B1X3RvX2xlMTYoYnVmZmVyX2luZm8tPmxlbmd0aCkgJgorCQkJVFBEX0JVRkxFTl9NQVNLKSA8PCBUUERfQlVGTEVOX1NISUZUOworCisJCS8qCisJCSAqIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhY2tldCBpbiBhIFRTTyBjaGFpbiwgc2V0CisJCSAqIFRQRF9IRFJGTEFHLCBvdGhlcndpc2UsIGNsZWFyIGl0LgorCQkgKi8KKwkJdmFsID0gKHRwZC0+d29yZDMgPj4gVFBEX1NFR01FTlRfRU5fU0hJRlQpICYKKwkJCVRQRF9TRUdNRU5UX0VOX01BU0s7CisJCWlmICh2YWwpIHsKKwkJCWlmICghaikKKwkJCQl0cGQtPndvcmQzIHw9IDEgPDwgVFBEX0hEUkZMQUdfU0hJRlQ7CisJCQllbHNlCisJCQkJdHBkLT53b3JkMyAmPSB+KDEgPDwgVFBEX0hEUkZMQUdfU0hJRlQpOworCQl9CisKKwkJaWYgKGogPT0gKGNvdW50IC0gMSkpCisJCQl0cGQtPndvcmQzIHw9IDEgPDwgVFBEX0VPUF9TSElGVDsKKworCQlpZiAoKytuZXh0X3RvX3VzZSA9PSB0cGRfcmluZy0+Y291bnQpCisJCQluZXh0X3RvX3VzZSA9IDA7CisJfQorCS8qCisJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuCisJICovCisJd21iKCk7CisKKwlhdG9taWNfc2V0KCZ0cGRfcmluZy0+bmV4dF90b191c2UsIG5leHRfdG9fdXNlKTsKK30KKworc3RhdGljIGludCBhdGwxX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHBkX3JpbmcgPSAmYWRhcHRlci0+dHBkX3Jpbmc7CisJaW50IGxlbiA9IHNrYi0+bGVuOworCWludCB0c287CisJaW50IGNvdW50ID0gMTsKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgdHhfcGFja2V0X2Rlc2MgKnB0cGQ7CisJdTE2IGZyYWdfc2l6ZTsKKwl1MTYgdmxhbl90YWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSAwOworCXVuc2lnbmVkIGludCBtc3MgPSAwOworCXVuc2lnbmVkIGludCBmOworCXVuc2lnbmVkIGludCBwcm90b19oZHJfbGVuOworCisJbGVuIC09IHNrYi0+ZGF0YV9sZW47CisKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPD0gMCkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKKwkJZnJhZ19zaXplID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXS5zaXplOworCQlpZiAoZnJhZ19zaXplKQorCQkJY291bnQgKz0gKGZyYWdfc2l6ZSArIEFUTDFfTUFYX1RYX0JVRl9MRU4gLSAxKSAvCisJCQkJQVRMMV9NQVhfVFhfQlVGX0xFTjsKKwl9CisKKwltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCWlmIChtc3MpIHsKKwkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfSVApKSB7CisJCQlwcm90b19oZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKworCQkJCQkgdGNwX2hkcmxlbihza2IpKTsKKwkJCWlmICh1bmxpa2VseShwcm90b19oZHJfbGVuID4gbGVuKSkgeworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJCX0KKwkJCS8qIG5lZWQgYWRkaXRpb25hbCBUUEQgPyAqLworCQkJaWYgKHByb3RvX2hkcl9sZW4gIT0gbGVuKQorCQkJCWNvdW50ICs9IChsZW4gLSBwcm90b19oZHJfbGVuICsKKwkJCQkJQVRMMV9NQVhfVFhfQlVGX0xFTiAtIDEpIC8KKwkJCQkJQVRMMV9NQVhfVFhfQlVGX0xFTjsKKwkJfQorCX0KKworCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKSkgeworCQkvKiBDYW4ndCBnZXQgbG9jayAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLworCQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChhZGFwdGVyKSkKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkidHggbG9ja2VkXG4iKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CisJfQorCisJaWYgKGF0bDFfdHBkX2F2YWlsKCZhZGFwdGVyLT50cGRfcmluZykgPCBjb3VudCkgeworCQkvKiBub3QgZW5vdWdoIGRlc2NyaXB0b3JzICovCisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworCQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChhZGFwdGVyKSkKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkidHggYnVzeVxuIik7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlwdHBkID0gQVRMMV9UUERfREVTQyh0cGRfcmluZywKKwkJKHUxNikgYXRvbWljX3JlYWQoJnRwZF9yaW5nLT5uZXh0X3RvX3VzZSkpOworCW1lbXNldChwdHBkLCAwLCBzaXplb2Yoc3RydWN0IHR4X3BhY2tldF9kZXNjKSk7CisKKwlpZiAoYWRhcHRlci0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCXZsYW5fdGFnID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCXZsYW5fdGFnID0gKHZsYW5fdGFnIDw8IDQpIHwgKHZsYW5fdGFnID4+IDEzKSB8CisJCQkoKHZsYW5fdGFnID4+IDkpICYgMHg4KTsKKwkJcHRwZC0+d29yZDMgfD0gMSA8PCBUUERfSU5TX1ZMX1RBR19TSElGVDsKKwkJcHRwZC0+d29yZDMgfD0gKHZsYW5fdGFnICYgVFBEX1ZMX1RBR0dFRF9NQVNLKSA8PAorCQkJVFBEX1ZMX1RBR0dFRF9TSElGVDsKKwl9CisKKwl0c28gPSBhdGwxX3RzbyhhZGFwdGVyLCBza2IsIHB0cGQpOworCWlmICh0c28gPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAoIXRzbykgeworCQlyZXRfdmFsID0gYXRsMV90eF9jc3VtKGFkYXB0ZXIsIHNrYiwgcHRwZCk7CisJCWlmIChyZXRfdmFsIDwgMCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CisJCX0KKwl9CisKKwlhdGwxX3R4X21hcChhZGFwdGVyLCBza2IsIHB0cGQpOworCWF0bDFfdHhfcXVldWUoYWRhcHRlciwgY291bnQsIHB0cGQpOworCWF0bDFfdXBkYXRlX21haWxib3goYWRhcHRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKy8qCisgKiBhdGwxX2ludHIgLSBJbnRlcnJ1cHQgSGFuZGxlcgorICogQGlycTogaW50ZXJydXB0IG51bWJlcgorICogQGRhdGE6IHBvaW50ZXIgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcHRfcmVnczogQ1BVIHJlZ2lzdGVycyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlycXJldHVybl90IGF0bDFfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkYXRhKTsKKwl1MzIgc3RhdHVzOworCWludCBtYXhfaW50cyA9IDEwOworCisJc3RhdHVzID0gYWRhcHRlci0+Y21iLmNtYi0+aW50X3N0YXRzOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlkbyB7CisJCS8qIGNsZWFyIENNQiBpbnRlcnJ1cHQgc3RhdHVzIGF0IG9uY2UgKi8KKwkJYWRhcHRlci0+Y21iLmNtYi0+aW50X3N0YXRzID0gMDsKKworCQlpZiAoc3RhdHVzICYgSVNSX0dQSFkpCS8qIGNsZWFyIHBoeSBzdGF0dXMgKi8KKwkJCWF0bHhfY2xlYXJfcGh5X2ludChhZGFwdGVyKTsKKworCQkvKiBjbGVhciBJU1Igc3RhdHVzLCBhbmQgRW5hYmxlIENNQiBETUEvRGlzYWJsZSBJbnRlcnJ1cHQgKi8KKwkJaW93cml0ZTMyKHN0YXR1cyB8IElTUl9ESVNfSU5ULCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lTUik7CisKKwkJLyogY2hlY2sgaWYgU01CIGludHIgKi8KKwkJaWYgKHN0YXR1cyAmIElTUl9TTUIpCisJCQlhdGwxX2luY19zbWIoYWRhcHRlcik7CisKKwkJLyogY2hlY2sgaWYgUENJRSBQSFkgTGluayBkb3duICovCisJCWlmIChzdGF0dXMgJiBJU1JfUEhZX0xJTktET1dOKSB7CisJCQlpZiAobmV0aWZfbXNnX2ludHIoYWRhcHRlcikpCisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkicGNpZSBwaHkgbGluayBkb3duICV4XG4iLCBzdGF0dXMpOworCQkJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewkvKiByZXNldCBNQUMgKi8KKwkJCQlpb3dyaXRlMzIoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JTVIpOworCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnBjaWVfZG1hX3RvX3JzdF90YXNrKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisJCX0KKworCQkvKiBjaGVjayBpZiBETUEgcmVhZC93cml0ZSBlcnJvciA/ICovCisJCWlmIChzdGF0dXMgJiAoSVNSX0RNQVJfVE9fUlNUIHwgSVNSX0RNQVdfVE9fUlNUKSkgeworCQkJaWYgKG5ldGlmX21zZ19pbnRyKGFkYXB0ZXIpKQorCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJInBjaWUgRE1BIHIvdyBlcnJvciAoc3RhdHVzID0gMHgleClcbiIsCisJCQkJCXN0YXR1cyk7CisJCQlpb3dyaXRlMzIoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JTVIpOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cGNpZV9kbWFfdG9fcnN0X3Rhc2spOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisKKwkJLyogbGluayBldmVudCAqLworCQlpZiAoc3RhdHVzICYgSVNSX0dQSFkpIHsKKwkJCWFkYXB0ZXItPnNvZnRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWF0bDFfY2hlY2tfZm9yX2xpbmsoYWRhcHRlcik7CisJCX0KKworCQkvKiB0cmFuc21pdCBldmVudCAqLworCQlpZiAoc3RhdHVzICYgSVNSX0NNQl9UWCkKKwkJCWF0bDFfaW50cl90eChhZGFwdGVyKTsKKworCQkvKiByeCBleGNlcHRpb24gKi8KKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIChJU1JfUlhGX09WIHwgSVNSX1JGRF9VTlJVTiB8CisJCQlJU1JfUlJEX09WIHwgSVNSX0hPU1RfUkZEX1VOUlVOIHwKKwkJCUlTUl9IT1NUX1JSRF9PViB8IElTUl9DTUJfUlgpKSkgeworCQkJaWYgKHN0YXR1cyAmIChJU1JfUlhGX09WIHwgSVNSX1JGRF9VTlJVTiB8CisJCQkJSVNSX1JSRF9PViB8IElTUl9IT1NUX1JGRF9VTlJVTiB8CisJCQkJSVNSX0hPU1RfUlJEX09WKSkKKwkJCQlpZiAobmV0aWZfbXNnX2ludHIoYWRhcHRlcikpCisJCQkJCWRldl9wcmludGsoS0VSTl9ERUJVRywKKwkJCQkJCSZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCQkicnggZXhjZXB0aW9uLCBJU1IgPSAweCV4XG4iLAorCQkJCQkJc3RhdHVzKTsKKwkJCWF0bDFfaW50cl9yeChhZGFwdGVyKTsKKwkJfQorCisJCWlmICgtLW1heF9pbnRzIDwgMCkKKwkJCWJyZWFrOworCisJfSB3aGlsZSAoKHN0YXR1cyA9IGFkYXB0ZXItPmNtYi5jbWItPmludF9zdGF0cykpOworCisJLyogcmUtZW5hYmxlIEludGVycnVwdCAqLworCWlvd3JpdGUzMihJU1JfRElTX1NNQiB8IElTUl9ESVNfRE1BLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lTUik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogYXRsMV93YXRjaGRvZyAtIFRpbWVyIENhbGwtYmFjaworICogQGRhdGE6IHBvaW50ZXIgdG8gbmV0ZGV2IGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFfd2F0Y2hkb2codW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGF0bDFfYWRhcHRlciAqKWRhdGE7CisKKwkvKiBSZXNldCB0aGUgdGltZXIgKi8KKwltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMiAqIEhaKTsKK30KKworLyoKKyAqIGF0bDFfcGh5X2NvbmZpZyAtIFRpbWVyIENhbGwtYmFjaworICogQGRhdGE6IHBvaW50ZXIgdG8gbmV0ZGV2IGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCisgKi8KK3N0YXRpYyB2b2lkIGF0bDFfcGh5X2NvbmZpZyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYXRsMV9hZGFwdGVyICopZGF0YTsKKwlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CisJYWRhcHRlci0+cGh5X3RpbWVyX3BlbmRpbmcgPSBmYWxzZTsKKwlhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9BRFZFUlRJU0UsIGh3LT5taWlfYXV0b25lZ19hZHZfcmVnKTsKKwlhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9BVExYX0NSLCBody0+bWlpXzEwMDB0X2N0cmxfcmVnKTsKKwlhdGwxX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9CTUNSLCBNSUlfQ1JfUkVTRVQgfCBNSUlfQ1JfQVVUT19ORUdfRU4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIE9ycGhhbmVkIHZlbmRvciBjb21tZW50IGxlZnQgaW50YWN0IGhlcmU6CisgKiA8dmVuZG9yIGNvbW1lbnQ+CisgKiBJZiBUUEQgQnVmZmVyIHNpemUgZXF1YWwgdG8gMCwgUENJRSBETUFSX1RPX0lOVAorICogd2lsbCBhc3NlcnQuIFdlIGRvIHNvZnQgcmVzZXQgPDB4MTQwMD0xPiBhY2NvcmRpbmcKKyAqIHdpdGggdGhlIFNQRUMuIEJVVCwgaXQgc2VlbWVzIHRoYXQgUENJRSBvciBETUEKKyAqIHN0YXRlLW1hY2hpbmUgd2lsbCBub3QgYmUgcmVzZXQuIERNQVJfVE9fSU5UIHdpbGwKKyAqIGFzc2VydCBhZ2FpbiBhbmQgYWdhaW4uCisgKiA8L3ZlbmRvciBjb21tZW50PgorICovCisKK3N0YXRpYyBpbnQgYXRsMV9yZXNldChzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByZXQ7CisJcmV0ID0gYXRsMV9yZXNldF9odygmYWRhcHRlci0+aHcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGF0bDFfaW5pdF9odygmYWRhcHRlci0+aHcpOworfQorCitzdGF0aWMgczMyIGF0bDFfdXAoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnI7CisJaW50IGlycV9mbGFncyA9IElSUUZfU0FNUExFX1JBTkRPTTsKKworCS8qIGhhcmR3YXJlIGhhcyBiZWVuIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCBzb21lIHRoaW5ncyAqLworCWF0bHhfc2V0X211bHRpKG5ldGRldik7CisJYXRsMV9pbml0X3JpbmdfcHRycyhhZGFwdGVyKTsKKwlhdGx4X3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKKwllcnIgPSBhdGwxX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlcik7CisJaWYgKHVubGlrZWx5KCFlcnIpKQorCQkvKiBubyBSWCBCVUZGRVIgYWxsb2NhdGVkICovCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVubGlrZWx5KGF0bDFfY29uZmlndXJlKGFkYXB0ZXIpKSkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl91cDsKKwl9CisKKwllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKKwlpZiAoZXJyKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cChhZGFwdGVyKSkKKwkJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJIlVuYWJsZSB0byBlbmFibGUgTVNJOiAlZFxuIiwgZXJyKTsKKwkJaXJxX2ZsYWdzIHw9IElSUUZfU0hBUkVEOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgJmF0bDFfaW50ciwgaXJxX2ZsYWdzLAorCQkJbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIGVycl91cDsKKworCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOworCWF0bHhfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwlhdGwxX2NoZWNrX2xpbmsoYWRhcHRlcik7CisJcmV0dXJuIDA7CisKK2Vycl91cDoKKwlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7CisJLyogZnJlZSByeF9idWZmZXJzICovCisJYXRsMV9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfZG93bihzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5waHlfY29uZmlnX3RpbWVyKTsKKwlhZGFwdGVyLT5waHlfdGltZXJfcGVuZGluZyA9IGZhbHNlOworCisJYXRseF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwlmcmVlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7CisJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCWF0bDFfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKKwlhZGFwdGVyLT5jbWIuY21iLT5pbnRfc3RhdHMgPSAwOworCisJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7CisJYWRhcHRlci0+bGlua19kdXBsZXggPSAtMTsKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCWF0bDFfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKKwlhdGwxX2NsZWFuX3J4X3JpbmcoYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGwxX2FkYXB0ZXIsIHR4X3RpbWVvdXRfdGFzayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwlhdGwxX2Rvd24oYWRhcHRlcik7CisJYXRsMV91cChhZGFwdGVyKTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7Cit9CisKKy8qCisgKiBhdGwxX2NoYW5nZV9tdHUgLSBDaGFuZ2UgdGhlIE1heGltdW0gVHJhbnNmZXIgVW5pdAorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQG5ld19tdHU6IG5ldyB2YWx1ZSBmb3IgbWF4aW11bSBmcmFtZSBzaXplCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBhdGwxX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IG9sZF9tdHUgPSBuZXRkZXYtPm10dTsKKwlpbnQgbWF4X2ZyYW1lID0gbmV3X210dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU47CisKKwlpZiAoKG1heF9mcmFtZSA8IEVUSF9aTEVOICsgRVRIX0ZDU19MRU4pIHx8CisJICAgIChtYXhfZnJhbWUgPiBNQVhfSlVNQk9fRlJBTUVfU0laRSkpIHsKKwkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgImludmFsaWQgTVRVIHNldHRpbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKKwlhZGFwdGVyLT5ody50eF9qdW1ib190YXNrX3RoID0gKG1heF9mcmFtZSArIDcpID4+IDM7CisJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IChtYXhfZnJhbWUgKyA3KSAmIH43OworCWFkYXB0ZXItPmh3LnJ4X2p1bWJvX3RoID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbiAvIDg7CisKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisJaWYgKChvbGRfbXR1ICE9IG5ld19tdHUpICYmIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlhdGwxX2Rvd24oYWRhcHRlcik7CisJCWF0bDFfdXAoYWRhcHRlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdGwxX29wZW4gLSBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKKyAqCisgKiBUaGUgb3BlbiBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUKKyAqIGFjdGl2ZSBieSB0aGUgc3lzdGVtIChJRkZfVVApLiAgQXQgdGhpcyBwb2ludCBhbGwgcmVzb3VyY2VzIG5lZWRlZAorICogZm9yIHRyYW5zbWl0IGFuZCByZWNlaXZlIG9wZXJhdGlvbnMgYXJlIGFsbG9jYXRlZCwgdGhlIGludGVycnVwdAorICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIE9TLCB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgc3RhcnRlZCwKKyAqIGFuZCB0aGUgc3RhY2sgaXMgbm90aWZpZWQgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5LgorICovCitzdGF0aWMgaW50IGF0bDFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBlcnI7CisKKwkvKiBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9ycyAqLworCWVyciA9IGF0bDFfc2V0dXBfcmluZ19yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGF0bDFfdXAoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdXA7CisKKwlyZXR1cm4gMDsKKworZXJyX3VwOgorCWF0bDFfcmVzZXQoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIGF0bDFfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwLCB0aGlzIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwKKyAqCisgKiBUaGUgY2xvc2UgZW50cnkgcG9pbnQgaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGRlLWFjdGl2YXRlZAorICogYnkgdGhlIE9TLiAgVGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVuZGVyIHRoZSBkcml2ZXJzIGNvbnRyb2wsIGJ1dAorICogbmVlZHMgdG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhlCisgKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgorICovCitzdGF0aWMgaW50IGF0bDFfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhdGwxX2Rvd24oYWRhcHRlcik7CisJYXRsMV9mcmVlX3JpbmdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF0bDFfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsID0gMDsKKwl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlhdGwxX2Rvd24oYWRhcHRlcik7CisKKwlhdGwxX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICh1MTYgKikgJiBjdHJsKTsKKwlhdGwxX3JlYWRfcGh5X3JlZyhodywgTUlJX0JNU1IsICh1MTYgKikgJiBjdHJsKTsKKwlpZiAoY3RybCAmIEJNU1JfTFNUQVRVUykKKwkJd3VmYyAmPSB+QVRMWF9XVUZDX0xOS0M7CisKKwkvKiByZWR1Y2Ugc3BlZWQgdG8gMTAvMTAwTSAqLworCWlmICh3dWZjKSB7CisJCWF0bDFfcGh5X2VudGVyX3Bvd2VyX3NhdmluZyhodyk7CisJCS8qIGlmIHJlc3VtZSwgbGV0IGRyaXZlciB0byByZS0gc2V0dXAgbGluayAqLworCQlody0+cGh5X2NvbmZpZ3VyZWQgPSBmYWxzZTsKKwkJYXRsMV9zZXRfbWFjX2FkZHIoaHcpOworCQlhdGx4X3NldF9tdWx0aShuZXRkZXYpOworCisJCWN0cmwgPSAwOworCQkvKiB0dXJuIG9uIG1hZ2ljIHBhY2tldCB3b2wgKi8KKwkJaWYgKHd1ZmMgJiBBVExYX1dVRkNfTUFHKQorCQkJY3RybCA9IFdPTF9NQUdJQ19FTiB8IFdPTF9NQUdJQ19QTUVfRU47CisKKwkJLyogdHVybiBvbiBMaW5rIGNoYW5nZSBXT0wgKi8KKwkJaWYgKHd1ZmMgJiBBVExYX1dVRkNfTE5LQykKKwkJCWN0cmwgfD0gKFdPTF9MSU5LX0NIR19FTiB8IFdPTF9MSU5LX0NIR19QTUVfRU4pOworCQlpb3dyaXRlMzIoY3RybCwgaHctPmh3X2FkZHIgKyBSRUdfV09MX0NUUkwpOworCisJCS8qIHR1cm4gb24gYWxsLW11bHRpIG1vZGUgaWYgd2FrZSBvbiBtdWx0aWNhc3QgaXMgZW5hYmxlZCAqLworCQljdHJsID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfTUFDX0NUUkwpOworCQljdHJsICY9IH5NQUNfQ1RSTF9EQkc7CisJCWN0cmwgJj0gfk1BQ19DVFJMX1BST01JU19FTjsKKwkJaWYgKHd1ZmMgJiBBVExYX1dVRkNfTUMpCisJCQljdHJsIHw9IE1BQ19DVFJMX01DX0FMTF9FTjsKKwkJZWxzZQorCQkJY3RybCAmPSB+TUFDX0NUUkxfTUNfQUxMX0VOOworCisJCS8qIHR1cm4gb24gYnJvYWRjYXN0IG1vZGUgaWYgd2FrZSBvbi1CQyBpcyBlbmFibGVkICovCisJCWlmICh3dWZjICYgQVRMWF9XVUZDX0JDKQorCQkJY3RybCB8PSBNQUNfQ1RSTF9CQ19FTjsKKwkJZWxzZQorCQkJY3RybCAmPSB+TUFDX0NUUkxfQkNfRU47CisKKwkJLyogZW5hYmxlIFJYICovCisJCWN0cmwgfD0gTUFDX0NUUkxfUlhfRU47CisJCWlvd3JpdGUzMihjdHJsLCBody0+aHdfYWRkciArIFJFR19NQUNfQ1RSTCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJfSBlbHNlIHsKKwkJaW93cml0ZTMyKDAsIGh3LT5od19hZGRyICsgUkVHX1dPTF9DVFJMKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKwl9CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGwxX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiBlcnI7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKiBGSVhNRTogY2hlY2sgYW5kIGhhbmRsZSAqLworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKworCWlvd3JpdGUzMigwLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX1dPTF9DVFJMKTsKKwlhdGwxX3Jlc2V0KGFkYXB0ZXIpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJYXRsMV91cChhZGFwdGVyKTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisKKwlhdGwxX3ZpYV93b3JrYXJvdW5kKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBhdGwxX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhdGwxX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBhdGwxX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWRpc2FibGVfaXJxKG5ldGRldi0+aXJxKTsKKwlhdGwxX2ludHIobmV0ZGV2LT5pcnEsIG5ldGRldik7CisJZW5hYmxlX2lycShuZXRkZXYtPmlycSk7Cit9CisjZW5kaWYKKworLyoKKyAqIGF0bDFfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKiBAZW50OiBlbnRyeSBpbiBhdGwxX3BjaV90YmwKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoKKyAqIGF0bDFfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gYWRhcHRlciBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuCisgKiBUaGUgT1MgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyaW5nIG9mIHRoZSBhZGFwdGVyIHByaXZhdGUgc3RydWN0dXJlLAorICogYW5kIGEgaGFyZHdhcmUgcmVzZXQgb2NjdXIuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bDFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RhdGljIGludCBjYXJkc19mb3VuZCA9IDA7CisJaW50IGVycjsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKgorCSAqIFRoZSBhdGwxIGNoaXAgY2FuIERNQSB0byA2NC1iaXQgYWRkcmVzc2VzLCBidXQgaXQgdXNlcyBhIHNpbmdsZQorCSAqIHNoYXJlZCByZWdpc3RlciBmb3IgdGhlIGhpZ2ggMzIgYml0cywgc28gb25seSBhIHNpbmdsZSwgYWxpZ25lZCwKKwkgKiA0IEdCIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgY2FuIGJlIHVzZWQgYXQgYSB0aW1lLgorCSAqCisJICogU3VwcG9ydGluZyA2NC1iaXQgRE1BIG9uIHRoaXMgaGFyZHdhcmUgaXMgbW9yZSB0cm91YmxlIHRoYW4gaXQncworCSAqIHdvcnRoLiAgSXQgaXMgZmFyIGVhc2llciB0byBsaW1pdCB0byAzMi1iaXQgRE1BIHRoYW4gdXBkYXRlCisJICogdmFyaW91cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBzdXBwb3J0IHRoZSBtZWNoYW5pY3MgcmVxdWlyZWQgYnkgYQorCSAqIGZpeGVkLWhpZ2gtMzItYml0IHN5c3RlbS4KKwkgKi8KKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7CisJCWdvdG8gZXJyX2RtYTsKKwl9CisJLyoKKwkgKiBNYXJrIGFsbCBQQ0kgcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggUENJIGRldmljZQorCSAqIHBkZXYgYXMgYmVpbmcgcmVzZXJ2ZWQgYnkgb3duZXIgYXRsMV9kcml2ZXJfbmFtZQorCSAqLworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgQVRMWF9EUklWRVJfTkFNRSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVxdWVzdF9yZWdpb25zOworCisJLyoKKwkgKiBFbmFibGVzIGJ1cy1tYXN0ZXJpbmcgb24gdGhlIGRldmljZSBhbmQgY2FsbHMKKwkgKiBwY2liaW9zX3NldF9tYXN0ZXIgdG8gZG8gdGhlIG5lZWRlZCBhcmNoIHNwZWNpZmljIHNldHRpbmdzCisJICovCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGF0bDFfYWRhcHRlcikpOworCWlmICghbmV0ZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OworCX0KKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgPSBwZGV2OworCWFkYXB0ZXItPmh3LmJhY2sgPSBhZGFwdGVyOworCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgYXRsMV9kZWZhdWx0X21zZyk7CisKKwlhZGFwdGVyLT5ody5od19hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghYWRhcHRlci0+aHcuaHdfYWRkcikgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9wY2lfaW9tYXA7CisJfQorCS8qIGdldCBkZXZpY2UgcmV2aXNpb24gbnVtYmVyICovCisJYWRhcHRlci0+aHcuZGV2X3JldiA9IGlvcmVhZDE2KGFkYXB0ZXItPmh3Lmh3X2FkZHIgKworCQkoUkVHX01BU1RFUl9DVFJMICsgMikpOworCWlmIChuZXRpZl9tc2dfcHJvYmUoYWRhcHRlcikpCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ2ZXJzaW9uICVzXG4iLCBBVExYX0RSSVZFUl9WRVJTSU9OKTsKKworCS8qIHNldCBkZWZhdWx0IHJpbmcgcmVzb3VyY2UgY291bnRzICovCisJYWRhcHRlci0+cmZkX3JpbmcuY291bnQgPSBhZGFwdGVyLT5ycmRfcmluZy5jb3VudCA9IEFUTDFfREVGQVVMVF9SRkQ7CisJYWRhcHRlci0+dHBkX3JpbmcuY291bnQgPSBBVEwxX0RFRkFVTFRfVFBEOworCisJYWRhcHRlci0+bWlpLmRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5taWkubWRpb19yZWFkID0gbWRpb19yZWFkOworCWFkYXB0ZXItPm1paS5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsKKwlhZGFwdGVyLT5taWkucGh5X2lkX21hc2sgPSAweDFmOworCWFkYXB0ZXItPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOworCisJbmV0ZGV2LT5vcGVuID0gJmF0bDFfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSAmYXRsMV9jbG9zZTsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZhdGwxX3htaXRfZnJhbWU7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSAmYXRseF9nZXRfc3RhdHM7CisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmYXRseF9zZXRfbXVsdGk7CisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmYXRsMV9zZXRfbWFjOworCW5ldGRldi0+Y2hhbmdlX210dSA9ICZhdGwxX2NoYW5nZV9tdHU7CisJbmV0ZGV2LT5kb19pb2N0bCA9ICZhdGx4X2lvY3RsOworCW5ldGRldi0+dHhfdGltZW91dCA9ICZhdGx4X3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCW5ldGRldi0+cG9sbF9jb250cm9sbGVyID0gYXRsMV9wb2xsX2NvbnRyb2xsZXI7CisjZW5kaWYKKwluZXRkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBhdGx4X3ZsYW5fcnhfcmVnaXN0ZXI7CisKKwluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmF0bDFfZXRodG9vbF9vcHM7CisJYWRhcHRlci0+YmRfbnVtYmVyID0gY2FyZHNfZm91bmQ7CisKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwllcnIgPSBhdGwxX3N3X2luaXQoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfY29tbW9uOworCisJbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSFdfQ1NVTTsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKTsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworCisJLyoKKwkgKiBwYXRjaCBmb3Igc29tZSBMMSBvZiBvbGQgdmVyc2lvbiwKKwkgKiB0aGUgZmluYWwgdmVyc2lvbiBvZiBMMSBtYXkgbm90IG5lZWQgdGhlc2UKKwkgKiBwYXRjaGVzCisJICovCisJLyogYXRsMV9wY2llX3BhdGNoKGFkYXB0ZXIpOyAqLworCisJLyogcmVhbGx5IHJlc2V0IEdQSFkgY29yZSAqLworCWlvd3JpdGUxNigwLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX1BIWV9FTkFCTEUpOworCisJLyoKKwkgKiByZXNldCB0aGUgY29udHJvbGxlciB0bworCSAqIHB1dCB0aGUgZGV2aWNlIGluIGEga25vd24gZ29vZCBzdGFydGluZyBzdGF0ZQorCSAqLworCWlmIChhdGwxX3Jlc2V0X2h3KCZhZGFwdGVyLT5odykpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfY29tbW9uOworCX0KKworCS8qIGNvcHkgdGhlIE1BQyBhZGRyZXNzIG91dCBvZiB0aGUgRUVQUk9NICovCisJYXRsMV9yZWFkX21hY19hZGRyKCZhZGFwdGVyLT5odyk7CisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKSkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9jb21tb247CisJfQorCisJYXRsMV9jaGVja19vcHRpb25zKGFkYXB0ZXIpOworCisJLyogcHJlLWluaXQgdGhlIE1BQywgYW5kIHNldHVwIGxpbmsgKi8KKwllcnIgPSBhdGwxX2luaXRfaHcoJmFkYXB0ZXItPmh3KTsKKwlpZiAoZXJyKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2NvbW1vbjsKKwl9CisKKwlhdGwxX3BjaWVfcGF0Y2goYWRhcHRlcik7CisJLyogYXNzdW1lIHdlIGhhdmUgbm8gbGluayBmb3Igbm93ICovCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmYXRsMV93YXRjaGRvZzsKKwlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKKworCWluaXRfdGltZXIoJmFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIpOworCWFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIuZnVuY3Rpb24gPSAmYXRsMV9waHlfY29uZmlnOworCWFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CisJYWRhcHRlci0+cGh5X3RpbWVyX3BlbmRpbmcgPSBmYWxzZTsKKworCUlOSVRfV09SSygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrLCBhdGwxX3R4X3RpbWVvdXRfdGFzayk7CisKKwlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfY2hnX3Rhc2ssIGF0bHhfbGlua19jaGdfdGFzayk7CisKKwlJTklUX1dPUksoJmFkYXB0ZXItPnBjaWVfZG1hX3RvX3JzdF90YXNrLCBhdGwxX3R4X3RpbWVvdXRfdGFzayk7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jb21tb247CisKKwljYXJkc19mb3VuZCsrOworCWF0bDFfdmlhX3dvcmthcm91bmQoYWRhcHRlcik7CisJcmV0dXJuIDA7CisKK2Vycl9jb21tb246CisJcGNpX2lvdW5tYXAocGRldiwgYWRhcHRlci0+aHcuaHdfYWRkcik7CitlcnJfcGNpX2lvbWFwOgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CitlcnJfYWxsb2NfZXRoZXJkZXY6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9kbWE6CitlcnJfcmVxdWVzdF9yZWdpb25zOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogYXRsMV9yZW1vdmUgLSBEZXZpY2UgUmVtb3ZhbCBSb3V0aW5lCisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqCisgKiBhdGwxX3JlbW92ZSBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gdG8gYWxlcnQgdGhlIGRyaXZlcgorICogdGhhdCBpdCBzaG91bGQgcmVsZWFzZSBhIFBDSSBkZXZpY2UuICBUaGUgY291bGQgYmUgY2F1c2VkIGJ5IGEKKyAqIEhvdC1QbHVnIGV2ZW50LCBvciBiZWNhdXNlIHRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmcm9tCisgKiBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhdGwxX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXI7CisJLyogRGV2aWNlIG5vdCBhdmFpbGFibGUuIFJldHVybi4gKi8KKwlpZiAoIW5ldGRldikKKwkJcmV0dXJuOworCisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKgorCSAqIFNvbWUgYXRsMSBib2FyZHMgbGFjayBwZXJzaXN0ZW50IHN0b3JhZ2UgZm9yIHRoZWlyIE1BQywgYW5kIGdldCBpdAorCSAqIGZyb20gdGhlIEJJT1MgZHVyaW5nIFBPU1QuICBJZiB3ZSd2ZSBiZWVuIG1lc3Npbmcgd2l0aCB0aGUgTUFDCisJICogYWRkcmVzcywgd2UgbmVlZCB0byBzYXZlIHRoZSBwZXJtYW5lbnQgb25lLgorCSAqLworCWlmIChtZW1jbXAoYWRhcHRlci0+aHcubWFjX2FkZHIsIGFkYXB0ZXItPmh3LnBlcm1fbWFjX2FkZHIsIEVUSF9BTEVOKSkgeworCQltZW1jcHkoYWRhcHRlci0+aHcubWFjX2FkZHIsIGFkYXB0ZXItPmh3LnBlcm1fbWFjX2FkZHIsCisJCQlFVEhfQUxFTik7CisJCWF0bDFfc2V0X21hY19hZGRyKCZhZGFwdGVyLT5odyk7CisJfQorCisJaW93cml0ZTE2KDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfUEhZX0VOQUJMRSk7CisJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlwY2lfaW91bm1hcChwZGV2LCBhZGFwdGVyLT5ody5od19hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRsMV9kcml2ZXIgPSB7CisJLm5hbWUgPSBBVExYX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IGF0bDFfcGNpX3RibCwKKwkucHJvYmUgPSBhdGwxX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhdGwxX3JlbW92ZSksCisJLnN1c3BlbmQgPSBhdGwxX3N1c3BlbmQsCisJLnJlc3VtZSA9IGF0bDFfcmVzdW1lCit9OworCisvKgorICogYXRsMV9leGl0X21vZHVsZSAtIERyaXZlciBFeGl0IENsZWFudXAgUm91dGluZQorICoKKyAqIGF0bDFfZXhpdF9tb2R1bGUgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBkcml2ZXIgaXMgcmVtb3ZlZAorICogZnJvbSBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBhdGwxX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhdGwxX2RyaXZlcik7Cit9CisKKy8qCisgKiBhdGwxX2luaXRfbW9kdWxlIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiBSb3V0aW5lCisgKgorICogYXRsMV9pbml0X21vZHVsZSBpcyB0aGUgZmlyc3Qgcm91dGluZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzCisgKiBsb2FkZWQuIEFsbCBpdCBkb2VzIGlzIHJlZ2lzdGVyIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF0bDFfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXRsMV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhdGwxX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGF0bDFfZXhpdF9tb2R1bGUpOworCitzdHJ1Y3QgYXRsMV9zdGF0cyB7CisJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOworCWludCBzaXplb2Zfc3RhdDsKKwlpbnQgc3RhdF9vZmZzZXQ7Cit9OworCisjZGVmaW5lIEFUTDFfU1RBVChtKSBcCisJc2l6ZW9mKCgoc3RydWN0IGF0bDFfYWRhcHRlciAqKTApLT5tKSwgb2Zmc2V0b2Yoc3RydWN0IGF0bDFfYWRhcHRlciwgbSkKKworc3RhdGljIHN0cnVjdCBhdGwxX3N0YXRzIGF0bDFfZ3N0cmluZ3Nfc3RhdHNbXSA9IHsKKwl7InJ4X3BhY2tldHMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9wYWNrZXRzKX0sCisJeyJ0eF9wYWNrZXRzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMudHhfcGFja2V0cyl9LAorCXsicnhfYnl0ZXMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9ieXRlcyl9LAorCXsidHhfYnl0ZXMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy50eF9ieXRlcyl9LAorCXsicnhfZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfZXJyb3JzKX0sCisJeyJ0eF9lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy50eF9lcnJvcnMpfSwKKwl7InJ4X2Ryb3BwZWQiLCBBVEwxX1NUQVQobmV0X3N0YXRzLnJ4X2Ryb3BwZWQpfSwKKwl7InR4X2Ryb3BwZWQiLCBBVEwxX1NUQVQobmV0X3N0YXRzLnR4X2Ryb3BwZWQpfSwKKwl7Im11bHRpY2FzdCIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLm11bHRpY2FzdCl9LAorCXsiY29sbGlzaW9ucyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLmNvbGxpc2lvbnMpfSwKKwl7InJ4X2xlbmd0aF9lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKX0sCisJeyJyeF9vdmVyX2Vycm9ycyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnJ4X21pc3NlZF9lcnJvcnMpfSwKKwl7InJ4X2NyY19lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9jcmNfZXJyb3JzKX0sCisJeyJyeF9mcmFtZV9lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9mcmFtZV9lcnJvcnMpfSwKKwl7InJ4X2ZpZm9fZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfZmlmb19lcnJvcnMpfSwKKwl7InJ4X21pc3NlZF9lcnJvcnMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzKX0sCisJeyJ0eF9hYm9ydGVkX2Vycm9ycyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKX0sCisJeyJ0eF9jYXJyaWVyX2Vycm9ycyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKX0sCisJeyJ0eF9maWZvX2Vycm9ycyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnR4X2ZpZm9fZXJyb3JzKX0sCisJeyJ0eF93aW5kb3dfZXJyb3JzIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMudHhfd2luZG93X2Vycm9ycyl9LAorCXsidHhfYWJvcnRfZXhjZV9jb2xsIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMuZXhjZWNvbCl9LAorCXsidHhfYWJvcnRfbGF0ZV9jb2xsIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMubGF0ZWNvbCl9LAorCXsidHhfZGVmZXJyZWRfb2siLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5kZWZmZXIpfSwKKwl7InR4X3NpbmdsZV9jb2xsX29rIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMuc2NjKX0sCisJeyJ0eF9tdWx0aV9jb2xsX29rIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMubWNjKX0sCisJeyJ0eF91bmRlcnVuIiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMudHhfdW5kZXJ1bil9LAorCXsidHhfdHJ1bmMiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy50eF90cnVuYyl9LAorCXsidHhfcGF1c2UiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy50eF9wYXVzZSl9LAorCXsicnhfcGF1c2UiLCBBVEwxX1NUQVQoc29mdF9zdGF0cy5yeF9wYXVzZSl9LAorCXsicnhfcnJkX292IiwgQVRMMV9TVEFUKHNvZnRfc3RhdHMucnhfcnJkX292KX0sCisJeyJyeF90cnVuYyIsIEFUTDFfU1RBVChzb2Z0X3N0YXRzLnJ4X3RydW5jKX0KK307CisKK3N0YXRpYyB2b2lkIGF0bDFfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaTsKKwljaGFyICpwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXRsMV9nc3RyaW5nc19zdGF0cyk7IGkrKykgeworCQlwID0gKGNoYXIgKilhZGFwdGVyK2F0bDFfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9vZmZzZXQ7CisJCWRhdGFbaV0gPSAoYXRsMV9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQorCQkJc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwOworCX0KKworfQorCitzdGF0aWMgaW50IGF0bDFfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBBUlJBWV9TSVpFKGF0bDFfZ3N0cmluZ3Nfc3RhdHMpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXRsMV9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJICAgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFApOworCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUDsKKwlpZiAoaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUiB8fAorCSAgICBody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFXzEwMDBNX0ZVTEwpIHsKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOworCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUikgeworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KKwkJCSAgICAoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJICAgICBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CisJCQkgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpOworCQl9IGVsc2UKKwkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKTsKKwl9CisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+cGh5X2FkZHJlc3MgPSAwOworCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKworCWlmIChuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJdTE2IGxpbmtfc3BlZWQsIGxpbmtfZHVwbGV4OworCQlhdGwxX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmbGlua19zcGVlZCwgJmxpbmtfZHVwbGV4KTsKKwkJZWNtZC0+c3BlZWQgPSBsaW5rX3NwZWVkOworCQlpZiAobGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVgpCisJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJZWxzZQorCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJfSBlbHNlIHsKKwkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZWNtZC0+ZHVwbGV4ID0gLTE7CisJfQorCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8CisJICAgIGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfMTAwME1fRlVMTCkKKwkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCWVsc2UKKwkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bDFfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBhdGwxX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MTYgcGh5X2RhdGE7CisJaW50IHJldF92YWwgPSAwOworCXUxNiBvbGRfbWVkaWFfdHlwZSA9IGh3LT5tZWRpYV90eXBlOworCisJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCisJCQlkZXZfZGJnKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJImV0aHRvb2wgc2h1dHRpbmcgZG93biBhZGFwdGVyXG4iKTsKKwkJYXRsMV9kb3duKGFkYXB0ZXIpOworCX0KKworCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQorCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfQVVUT19TRU5TT1I7CisJZWxzZSB7CisJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CisJCQlpZiAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CisJCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkJIjEwMDBNIGhhbGYgaXMgaW52YWxpZFxuIik7CisJCQkJcmV0X3ZhbCA9IC1FSU5WQUw7CisJCQkJZ290byBleGl0X3NzZXQ7CisJCQl9CisJCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfMTAwME1fRlVMTDsKKwkJfSBlbHNlIGlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDApIHsKKwkJCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJaHctPm1lZGlhX3R5cGUgPSBNRURJQV9UWVBFXzEwME1fRlVMTDsKKwkJCWVsc2UKKwkJCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfMTAwTV9IQUxGOworCQl9IGVsc2UgeworCQkJaWYgKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfMTBNX0ZVTEw7CisJCQllbHNlCisJCQkJaHctPm1lZGlhX3R5cGUgPSBNRURJQV9UWVBFXzEwTV9IQUxGOworCQl9CisJfQorCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKKwljYXNlIE1FRElBX1RZUEVfQVVUT19TRU5TT1I6CisJCWVjbWQtPmFkdmVydGlzaW5nID0KKwkJICAgIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJICAgIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJICAgIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCSAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCSAgICBBRFZFUlRJU0VEX0F1dG9uZWcgfCBBRFZFUlRJU0VEX1RQOworCQlicmVhazsKKwljYXNlIE1FRElBX1RZUEVfMTAwME1fRlVMTDoKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgPQorCQkgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCSAgICBBRFZFUlRJU0VEX0F1dG9uZWcgfCBBRFZFUlRJU0VEX1RQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllY21kLT5hZHZlcnRpc2luZyA9IDA7CisJCWJyZWFrOworCX0KKwlpZiAoYXRsMV9waHlfc2V0dXBfYXV0b25lZ19hZHYoaHcpKSB7CisJCXJldF92YWwgPSAtRUlOVkFMOworCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCisJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJpbnZhbGlkIGV0aHRvb2wgc3BlZWQvZHVwbGV4IHNldHRpbmdcbiIpOworCQlnb3RvIGV4aXRfc3NldDsKKwl9CisJaWYgKGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfQVVUT19TRU5TT1IgfHwKKwkgICAgaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV8xMDAwTV9GVUxMKQorCQlwaHlfZGF0YSA9IE1JSV9DUl9SRVNFVCB8IE1JSV9DUl9BVVRPX05FR19FTjsKKwllbHNlIHsKKwkJc3dpdGNoIChody0+bWVkaWFfdHlwZSkgeworCQljYXNlIE1FRElBX1RZUEVfMTAwTV9GVUxMOgorCQkJcGh5X2RhdGEgPQorCQkJICAgIE1JSV9DUl9GVUxMX0RVUExFWCB8IE1JSV9DUl9TUEVFRF8xMDAgfAorCQkJICAgIE1JSV9DUl9SRVNFVDsKKwkJCWJyZWFrOworCQljYXNlIE1FRElBX1RZUEVfMTAwTV9IQUxGOgorCQkJcGh5X2RhdGEgPSBNSUlfQ1JfU1BFRURfMTAwIHwgTUlJX0NSX1JFU0VUOworCQkJYnJlYWs7CisJCWNhc2UgTUVESUFfVFlQRV8xME1fRlVMTDoKKwkJCXBoeV9kYXRhID0KKwkJCSAgICBNSUlfQ1JfRlVMTF9EVVBMRVggfCBNSUlfQ1JfU1BFRURfMTAgfCBNSUlfQ1JfUkVTRVQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIE1FRElBX1RZUEVfMTBNX0hBTEY6ICovCisJCQlwaHlfZGF0YSA9IE1JSV9DUl9TUEVFRF8xMCB8IE1JSV9DUl9SRVNFVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWF0bDFfd3JpdGVfcGh5X3JlZyhodywgTUlJX0JNQ1IsIHBoeV9kYXRhKTsKK2V4aXRfc3NldDoKKwlpZiAocmV0X3ZhbCkKKwkJaHctPm1lZGlhX3R5cGUgPSBvbGRfbWVkaWFfdHlwZTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJldGh0b29sIHN0YXJ0aW5nIGFkYXB0ZXJcbiIpOworCQlhdGwxX3VwKGFkYXB0ZXIpOworCX0gZWxzZSBpZiAoIXJldF92YWwpIHsKKwkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQorCQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJldGh0b29sIHJlc2V0dGluZyBhZGFwdGVyXG4iKTsKKwkJYXRsMV9yZXNldChhZGFwdGVyKTsKKwl9CisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIEFUTFhfRFJJVkVSX05BTUUsIHNpemVvZihkcnZpbmZvLT5kcml2ZXIpKTsKKwlzdHJuY3B5KGRydmluZm8tPnZlcnNpb24sIEFUTFhfRFJJVkVSX1ZFUlNJT04sCisJCXNpemVvZihkcnZpbmZvLT52ZXJzaW9uKSk7CisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgc2l6ZW9mKGRydmluZm8tPmZ3X3ZlcnNpb24pKTsKKwlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwKKwkJc2l6ZW9mKGRydmluZm8tPmJ1c19pbmZvKSk7CisJZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IEFUTDFfRUVEVU1QX0xFTjsKK30KKworc3RhdGljIHZvaWQgYXRsMV9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX1VDQVNUIHwgV0FLRV9NQ0FTVCB8IFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOworCXdvbC0+d29sb3B0cyA9IDA7CisJaWYgKGFkYXB0ZXItPndvbCAmIEFUTFhfV1VGQ19FWCkKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfVUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIEFUTFhfV1VGQ19NQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIEFUTFhfV1VGQ19CQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfQkNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIEFUTFhfV1VGQ19NQUcpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworCXJldHVybjsKK30KKworc3RhdGljIGludCBhdGwxX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAod29sLT53b2xvcHRzICYgKFdBS0VfUEhZIHwgV0FLRV9BUlAgfCBXQUtFX01BR0lDU0VDVVJFKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWFkYXB0ZXItPndvbCA9IDA7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBBVExYX1dVRkNfRVg7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBBVExYX1dVRkNfTUM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfQkNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBBVExYX1dVRkNfQkM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCWFkYXB0ZXItPndvbCB8PSBBVExYX1dVRkNfTUFHOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGF0bDFfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuIGFkYXB0ZXItPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5tc2dfZW5hYmxlID0gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgYXRsMV9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gQVRMMV9SRUdfQ09VTlQgKiBzaXplb2YodTMyKTsKK30KKworc3RhdGljIHZvaWQgYXRsMV9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAorCXZvaWQgKnApCit7CisJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGF0bDFfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXVuc2lnbmVkIGludCBpOworCXUzMiAqcmVnYnVmID0gcDsKKworCWZvciAoaSA9IDA7IGkgPCBBVEwxX1JFR19DT1VOVDsgaSsrKSB7CisJCS8qCisJCSAqIFRoaXMgc3dpdGNoIHN0YXRlbWVudCBhdm9pZHMgcmVzZXJ2ZWQgcmVnaW9ucworCQkgKiBvZiByZWdpc3RlciBzcGFjZS4KKwkJICovCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDYgLi4uIDk6CisJCWNhc2UgMTQ6CisJCWNhc2UgMjkgLi4uIDMxOgorCQljYXNlIDM0IC4uLiA2MzoKKwkJY2FzZSA3NSAuLi4gMTI3OgorCQljYXNlIDEzNiAuLi4gMTAyMzoKKwkJY2FzZSAxMDI3IC4uLiAxMDg3OgorCQljYXNlIDEwOTEgLi4uIDExNTE6CisJCWNhc2UgMTE5NCAuLi4gMTE5NToKKwkJY2FzZSAxMjAwIC4uLiAxMjAxOgorCQljYXNlIDEyMDYgLi4uIDEyMTM6CisJCWNhc2UgMTIxNiAuLi4gMTI3OToKKwkJY2FzZSAxMjkwIC4uLiAxMzExOgorCQljYXNlIDEzMjMgLi4uIDEzNDM6CisJCWNhc2UgMTM1OCAuLi4gMTM1OToKKwkJY2FzZSAxMzY4IC4uLiAxMzc1OgorCQljYXNlIDEzNzggLi4uIDEzODM6CisJCWNhc2UgMTM4OCAuLi4gMTM5MToKKwkJY2FzZSAxMzkzIC4uLiAxMzk1OgorCQljYXNlIDE0MDIgLi4uIDE0MDM6CisJCWNhc2UgMTQxMCAuLi4gMTQ3MToKKwkJY2FzZSAxNTIyIC4uLiAxNTM1OgorCQkJLyogcmVzZXJ2ZWQgcmVnaW9uOyBkb24ndCByZWFkIGl0ICovCisJCQlyZWdidWZbaV0gPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiB1bnJlc2VydmVkIHJlZ2lvbiAqLworCQkJcmVnYnVmW2ldID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyAoaSAqIHNpemVvZih1MzIpKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3sKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMV90cGRfcmluZyAqdHhkciA9ICZhZGFwdGVyLT50cGRfcmluZzsKKwlzdHJ1Y3QgYXRsMV9yZmRfcmluZyAqcnhkciA9ICZhZGFwdGVyLT5yZmRfcmluZzsKKworCXJpbmctPnJ4X21heF9wZW5kaW5nID0gQVRMMV9NQVhfUkZEOworCXJpbmctPnR4X21heF9wZW5kaW5nID0gQVRMMV9NQVhfVFBEOworCXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOworCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9wZW5kaW5nID0gcnhkci0+Y291bnQ7CisJcmluZy0+dHhfcGVuZGluZyA9IHR4ZHItPmNvdW50OworCXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYXRsMV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRyID0gJmFkYXB0ZXItPnRwZF9yaW5nOworCXN0cnVjdCBhdGwxX3JyZF9yaW5nICpycmRyID0gJmFkYXB0ZXItPnJyZF9yaW5nOworCXN0cnVjdCBhdGwxX3JmZF9yaW5nICpyZmRyID0gJmFkYXB0ZXItPnJmZF9yaW5nOworCisJc3RydWN0IGF0bDFfdHBkX3JpbmcgdHBkX29sZCwgdHBkX25ldzsKKwlzdHJ1Y3QgYXRsMV9yZmRfcmluZyByZmRfb2xkLCByZmRfbmV3OworCXN0cnVjdCBhdGwxX3JyZF9yaW5nIHJyZF9vbGQsIHJyZF9uZXc7CisJc3RydWN0IGF0bDFfcmluZ19oZWFkZXIgcmhkcl9vbGQsIHJoZHJfbmV3OworCWludCBlcnI7CisKKwl0cGRfb2xkID0gYWRhcHRlci0+dHBkX3Jpbmc7CisJcmZkX29sZCA9IGFkYXB0ZXItPnJmZF9yaW5nOworCXJyZF9vbGQgPSBhZGFwdGVyLT5ycmRfcmluZzsKKwlyaGRyX29sZCA9IGFkYXB0ZXItPnJpbmdfaGVhZGVyOworCisJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKKwkJYXRsMV9kb3duKGFkYXB0ZXIpOworCisJcmZkci0+Y291bnQgPSAodTE2KSBtYXgocmluZy0+cnhfcGVuZGluZywgKHUzMikgQVRMMV9NSU5fUkZEKTsKKwlyZmRyLT5jb3VudCA9IHJmZHItPmNvdW50ID4gQVRMMV9NQVhfUkZEID8gQVRMMV9NQVhfUkZEIDoKKwkJCXJmZHItPmNvdW50OworCXJmZHItPmNvdW50ID0gKHJmZHItPmNvdW50ICsgMykgJiB+MzsKKwlycmRyLT5jb3VudCA9IHJmZHItPmNvdW50OworCisJdHBkci0+Y291bnQgPSAodTE2KSBtYXgocmluZy0+dHhfcGVuZGluZywgKHUzMikgQVRMMV9NSU5fVFBEKTsKKwl0cGRyLT5jb3VudCA9IHRwZHItPmNvdW50ID4gQVRMMV9NQVhfVFBEID8gQVRMMV9NQVhfVFBEIDoKKwkJCXRwZHItPmNvdW50OworCXRwZHItPmNvdW50ID0gKHRwZHItPmNvdW50ICsgMykgJiB+MzsKKworCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJLyogdHJ5IHRvIGdldCBuZXcgcmVzb3VyY2VzIGJlZm9yZSBkZWxldGluZyBvbGQgKi8KKwkJZXJyID0gYXRsMV9zZXR1cF9yaW5nX3Jlc291cmNlcyhhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3NldHVwX3Jpbmc7CisKKwkJLyoKKwkJICogc2F2ZSB0aGUgbmV3LCByZXN0b3JlIHRoZSBvbGQgaW4gb3JkZXIgdG8gZnJlZSBpdCwKKwkJICogdGhlbiByZXN0b3JlIHRoZSBuZXcgYmFjayBhZ2FpbgorCQkgKi8KKworCQlyZmRfbmV3ID0gYWRhcHRlci0+cmZkX3Jpbmc7CisJCXJyZF9uZXcgPSBhZGFwdGVyLT5ycmRfcmluZzsKKwkJdHBkX25ldyA9IGFkYXB0ZXItPnRwZF9yaW5nOworCQlyaGRyX25ldyA9IGFkYXB0ZXItPnJpbmdfaGVhZGVyOworCQlhZGFwdGVyLT5yZmRfcmluZyA9IHJmZF9vbGQ7CisJCWFkYXB0ZXItPnJyZF9yaW5nID0gcnJkX29sZDsKKwkJYWRhcHRlci0+dHBkX3JpbmcgPSB0cGRfb2xkOworCQlhZGFwdGVyLT5yaW5nX2hlYWRlciA9IHJoZHJfb2xkOworCQlhdGwxX2ZyZWVfcmluZ19yZXNvdXJjZXMoYWRhcHRlcik7CisJCWFkYXB0ZXItPnJmZF9yaW5nID0gcmZkX25ldzsKKwkJYWRhcHRlci0+cnJkX3JpbmcgPSBycmRfbmV3OworCQlhZGFwdGVyLT50cGRfcmluZyA9IHRwZF9uZXc7CisJCWFkYXB0ZXItPnJpbmdfaGVhZGVyID0gcmhkcl9uZXc7CisKKwkJZXJyID0gYXRsMV91cChhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworCitlcnJfc2V0dXBfcmluZzoKKwlhZGFwdGVyLT5yZmRfcmluZyA9IHJmZF9vbGQ7CisJYWRhcHRlci0+cnJkX3JpbmcgPSBycmRfb2xkOworCWFkYXB0ZXItPnRwZF9yaW5nID0gdHBkX29sZDsKKwlhZGFwdGVyLT5yaW5nX2hlYWRlciA9IHJoZHJfb2xkOworCWF0bDFfdXAoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXRsMV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCXN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwYXVzZSkKK3sKKwlzdHJ1Y3QgYXRsMV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRsMV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAoaHctPm1lZGlhX3R5cGUgPT0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUiB8fAorCSAgICBody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFXzEwMDBNX0ZVTEwpIHsKKwkJZXBhdXNlLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJfSBlbHNlIHsKKwkJZXBhdXNlLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCX0KKwllcGF1c2UtPnJ4X3BhdXNlID0gMTsKKwllcGF1c2UtPnR4X3BhdXNlID0gMTsKK30KKworc3RhdGljIGludCBhdGwxX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXBhdXNlKQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBhdGwxX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8CisJICAgIGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfMTAwME1fRlVMTCkgeworCQllcGF1c2UtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwl9IGVsc2UgeworCQllcGF1c2UtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJfQorCisJZXBhdXNlLT5yeF9wYXVzZSA9IDE7CisJZXBhdXNlLT50eF9wYXVzZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogRklYTUU6IGlzIHRoaXMgcmlnaHQ/IC0tIENIUyAqLworc3RhdGljIHUzMiBhdGwxX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGF0bDFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwKKwl1OCAqZGF0YSkKK3sKKwl1OCAqcCA9IGRhdGE7CisJaW50IGk7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdGwxX2dzdHJpbmdzX3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkocCwgYXRsMV9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X3N0cmluZywKKwkJCQlFVEhfR1NUUklOR19MRU4pOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGF0bDFfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBhdGwxX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJdTE2IHBoeV9kYXRhOworCQlhdGwxX2Rvd24oYWRhcHRlcik7CisKKwkJaWYgKGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfQVVUT19TRU5TT1IgfHwKKwkJCWh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfMTAwME1fRlVMTCkgeworCQkJcGh5X2RhdGEgPSBNSUlfQ1JfUkVTRVQgfCBNSUlfQ1JfQVVUT19ORUdfRU47CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGh3LT5tZWRpYV90eXBlKSB7CisJCQljYXNlIE1FRElBX1RZUEVfMTAwTV9GVUxMOgorCQkJCXBoeV9kYXRhID0gTUlJX0NSX0ZVTExfRFVQTEVYIHwKKwkJCQkJTUlJX0NSX1NQRUVEXzEwMCB8IE1JSV9DUl9SRVNFVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTUVESUFfVFlQRV8xMDBNX0hBTEY6CisJCQkJcGh5X2RhdGEgPSBNSUlfQ1JfU1BFRURfMTAwIHwgTUlJX0NSX1JFU0VUOworCQkJCWJyZWFrOworCQkJY2FzZSBNRURJQV9UWVBFXzEwTV9GVUxMOgorCQkJCXBoeV9kYXRhID0gTUlJX0NSX0ZVTExfRFVQTEVYIHwKKwkJCQkJTUlJX0NSX1NQRUVEXzEwIHwgTUlJX0NSX1JFU0VUOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBNRURJQV9UWVBFXzEwTV9IQUxGICovCisJCQkJcGh5X2RhdGEgPSBNSUlfQ1JfU1BFRURfMTAgfCBNSUlfQ1JfUkVTRVQ7CisJCQl9CisJCX0KKwkJYXRsMV93cml0ZV9waHlfcmVnKGh3LCBNSUlfQk1DUiwgcGh5X2RhdGEpOworCQlhdGwxX3VwKGFkYXB0ZXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDFfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkJPSBhdGwxX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGF0bDFfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBhdGwxX2dldF9kcnZpbmZvLAorCS5nZXRfd29sCQk9IGF0bDFfZ2V0X3dvbCwKKwkuc2V0X3dvbAkJPSBhdGwxX3NldF93b2wsCisJLmdldF9tc2dsZXZlbAkJPSBhdGwxX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IGF0bDFfc2V0X21zZ2xldmVsLAorCS5nZXRfcmVnc19sZW4JCT0gYXRsMV9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IGF0bDFfZ2V0X3JlZ3MsCisJLmdldF9yaW5ncGFyYW0JCT0gYXRsMV9nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtCQk9IGF0bDFfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3BhdXNlcGFyYW0JCT0gYXRsMV9nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0JCT0gYXRsMV9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3J4X2NzdW0JCT0gYXRsMV9nZXRfcnhfY3N1bSwKKwkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3N0cmluZ3MJCT0gYXRsMV9nZXRfc3RyaW5ncywKKwkubndheV9yZXNldAkJPSBhdGwxX253YXlfcmVzZXQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gYXRsMV9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3NzZXRfY291bnQJCT0gYXRsMV9nZXRfc3NldF9jb3VudCwKKwkuc2V0X3RzbwkJPSBldGh0b29sX29wX3NldF90c28sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmggYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTg5M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmgKQEAgLTAsMCArMSw3OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDYgQXR0YW5zaWMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNiAtIDIwMDcgQ2hyaXMgU25vb2sgPGNzbm9va0ByZWRoYXQuY29tPgorICogQ29weXJpZ2h0KGMpIDIwMDYgSmF5IENsaWJ1cm4gPGpjbGlidXJuQGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCisgKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBBVEwxX0gKKyNkZWZpbmUgQVRMMV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlICJhdGx4LmgiCisKKyNkZWZpbmUgQVRMWF9EUklWRVJfTkFNRSAiYXRsMSIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdGhlcm9zIEwxIEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyIik7CisKKyNkZWZpbmUgYXRseF9hZGFwdGVyCQlhdGwxX2FkYXB0ZXIKKyNkZWZpbmUgYXRseF9jaGVja19mb3JfbGluawlhdGwxX2NoZWNrX2Zvcl9saW5rCisjZGVmaW5lIGF0bHhfY2hlY2tfbGluawkJYXRsMV9jaGVja19saW5rCisjZGVmaW5lIGF0bHhfaGFzaF9tY19hZGRyCWF0bDFfaGFzaF9tY19hZGRyCisjZGVmaW5lIGF0bHhfaGFzaF9zZXQJCWF0bDFfaGFzaF9zZXQKKyNkZWZpbmUgYXRseF9odwkJCWF0bDFfaHcKKyNkZWZpbmUgYXRseF9taWlfaW9jdGwJCWF0bDFfbWlpX2lvY3RsCisjZGVmaW5lIGF0bHhfcmVhZF9waHlfcmVnCWF0bDFfcmVhZF9waHlfcmVnCisjZGVmaW5lIGF0bHhfc2V0X21hYwkJYXRsMV9zZXRfbWFjCisjZGVmaW5lIGF0bHhfc2V0X21hY19hZGRyCWF0bDFfc2V0X21hY19hZGRyCisKK3N0cnVjdCBhdGwxX2FkYXB0ZXI7CitzdHJ1Y3QgYXRsMV9odzsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBuZWVkZWQgYnkgbXVsdGlwbGUgZmlsZXMgKi8KK3UzMiBhdGwxX2hhc2hfbWNfYWRkcihzdHJ1Y3QgYXRsMV9odyAqaHcsIHU4ICptY19hZGRyKTsKK3ZvaWQgYXRsMV9oYXNoX3NldChzdHJ1Y3QgYXRsMV9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKTsKK3MzMiBhdGwxX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgYXRsMV9odyAqaHcsIHUxNiByZWdfYWRkciwgdTE2ICpwaHlfZGF0YSk7Cit2b2lkIGF0bDFfc2V0X21hY19hZGRyKHN0cnVjdCBhdGwxX2h3ICpodyk7CitzdGF0aWMgaW50IGF0bDFfbWlpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLAorCWludCBjbWQpOworc3RhdGljIHUzMiBhdGwxX2NoZWNrX2xpbmsoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcik7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXRsMV9ldGh0b29sX29wczsKKworLyogaGFyZHdhcmUgZGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gTDEgKi8KKworLyogQmxvY2sgSURMRSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSURMRV9TVEFUVVNfUlhNQUMJCQkweDEKKyNkZWZpbmUgSURMRV9TVEFUVVNfVFhNQUMJCQkweDIKKyNkZWZpbmUgSURMRV9TVEFUVVNfUlhRCQkJCTB4NAorI2RlZmluZSBJRExFX1NUQVRVU19UWFEJCQkJMHg4CisjZGVmaW5lIElETEVfU1RBVFVTX0RNQVIJCQkweDEwCisjZGVmaW5lIElETEVfU1RBVFVTX0RNQVcJCQkweDIwCisjZGVmaW5lIElETEVfU1RBVFVTX1NNQgkJCQkweDQwCisjZGVmaW5lIElETEVfU1RBVFVTX0NNQgkJCQkweDgwCisKKy8qIE1ESU8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNRElPX1dBSVRfVElNRVMJCQkJMzAKKworLyogTUFDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUFDX0NUUkxfVFhfUEFVU0UJCQkweDEwMDAwCisjZGVmaW5lIE1BQ19DVFJMX1NDTlQJCQkJMHgyMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9TUlNUX1RYCQkJMHg0MDAwMAorI2RlZmluZSBNQUNfQ1RSTF9UWF9TSU1VUlNUCQkJMHg4MDAwMAorI2RlZmluZSBNQUNfQ1RSTF9TUEVFRF9TSElGVAkJCTIwCisjZGVmaW5lIE1BQ19DVFJMX1NQRUVEX01BU0sJCQkweDMwMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9TUEVFRF8xMDAwCQkJMHgyCisjZGVmaW5lIE1BQ19DVFJMX1NQRUVEXzEwXzEwMAkJCTB4MQorI2RlZmluZSBNQUNfQ1RSTF9EQkdfVFhfQktQUkVTVVJFCQkweDQwMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9UWF9IVUdFCQkJMHg4MDAwMDAKKyNkZWZpbmUgTUFDX0NUUkxfUlhfQ0hLU1VNX0VOCQkJMHgxMDAwMDAwCisjZGVmaW5lIE1BQ19DVFJMX0RCRwkJCQkweDgwMDAwMDAKKworLyogV2FrZS1Pbi1MYW4gY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBXT0xfQ0xLX1NXSVRDSF9FTgkJCTB4ODAwMAorI2RlZmluZSBXT0xfUFQ1X0VOCQkJCTB4MjAwMDAwCisjZGVmaW5lIFdPTF9QVDZfRU4JCQkJMHg0MDAwMDAKKyNkZWZpbmUgV09MX1BUNV9NQVRDSAkJCQkweDgwMDAwMDAKKyNkZWZpbmUgV09MX1BUNl9NQVRDSAkJCQkweDEwMDAwMDAwCisKKy8qIFdPTCBMZW5ndGggKCAyIERXT1JEICkgKi8KKyNkZWZpbmUgUkVHX1dPTF9QQVRURVJOX0xFTgkJCTB4MTRBNAorI2RlZmluZSBXT0xfUFRfTEVOX01BU0sJCQkJMHg3RgorI2RlZmluZSBXT0xfUFQwX0xFTl9TSElGVAkJCTAKKyNkZWZpbmUgV09MX1BUMV9MRU5fU0hJRlQJCQk4CisjZGVmaW5lIFdPTF9QVDJfTEVOX1NISUZUCQkJMTYKKyNkZWZpbmUgV09MX1BUM19MRU5fU0hJRlQJCQkyNAorI2RlZmluZSBXT0xfUFQ0X0xFTl9TSElGVAkJCTAKKyNkZWZpbmUgV09MX1BUNV9MRU5fU0hJRlQJCQk4CisjZGVmaW5lIFdPTF9QVDZfTEVOX1NISUZUCQkJMTYKKworLyogSW50ZXJuYWwgU1JBTSBQYXJ0aXRpb24gUmVnaXN0ZXJzLCBsb3cgMzIgYml0cyAqLworI2RlZmluZSBSRUdfU1JBTV9SRkRfTEVOCQkJMHgxNTA0CisjZGVmaW5lIFJFR19TUkFNX1JSRF9BRERSCQkJMHgxNTA4CisjZGVmaW5lIFJFR19TUkFNX1JSRF9MRU4JCQkweDE1MEMKKyNkZWZpbmUgUkVHX1NSQU1fVFBEX0FERFIJCQkweDE1MTAKKyNkZWZpbmUgUkVHX1NSQU1fVFBEX0xFTgkJCTB4MTUxNAorI2RlZmluZSBSRUdfU1JBTV9UUkRfQUREUgkJCTB4MTUxOAorI2RlZmluZSBSRUdfU1JBTV9UUkRfTEVOCQkJMHgxNTFDCisjZGVmaW5lIFJFR19TUkFNX1JYRl9BRERSCQkJMHgxNTIwCisjZGVmaW5lIFJFR19TUkFNX1JYRl9MRU4JCQkweDE1MjQKKyNkZWZpbmUgUkVHX1NSQU1fVFhGX0FERFIJCQkweDE1MjgKKyNkZWZpbmUgUkVHX1NSQU1fVFhGX0xFTgkJCTB4MTUyQworI2RlZmluZSBSRUdfU1JBTV9UQ1BIX1BBVEhfQUREUgkJCTB4MTUzMAorI2RlZmluZSBTUkFNX1RDUEhfQUREUl9NQVNLCQkJMHhGRkYKKyNkZWZpbmUgU1JBTV9UQ1BIX0FERFJfU0hJRlQJCQkwCisjZGVmaW5lIFNSQU1fUEFUSF9BRERSX01BU0sJCQkweEZGRgorI2RlZmluZSBTUkFNX1BBVEhfQUREUl9TSElGVAkJCTE2CisKKy8qIExvYWQgUHRyIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MT0FEX1BUUgkJCQkweDE1MzQKKworLyogRGVzY3JpcHRvciBDb250cm9sIHJlZ2lzdGVycywgbG93IDMyIGJpdHMgKi8KKyNkZWZpbmUgUkVHX0RFU0NfUkZEX0FERFJfTE8JCQkweDE1NDQKKyNkZWZpbmUgUkVHX0RFU0NfUlJEX0FERFJfTE8JCQkweDE1NDgKKyNkZWZpbmUgUkVHX0RFU0NfVFBEX0FERFJfTE8JCQkweDE1NEMKKyNkZWZpbmUgUkVHX0RFU0NfQ01CX0FERFJfTE8JCQkweDE1NTAKKyNkZWZpbmUgUkVHX0RFU0NfU01CX0FERFJfTE8JCQkweDE1NTQKKyNkZWZpbmUgUkVHX0RFU0NfUkZEX1JSRF9SSU5HX1NJWkUJCTB4MTU1OAorI2RlZmluZSBERVNDX1JGRF9SSU5HX1NJWkVfTUFTSwkJCTB4N0ZGCisjZGVmaW5lIERFU0NfUkZEX1JJTkdfU0laRV9TSElGVAkJMAorI2RlZmluZSBERVNDX1JSRF9SSU5HX1NJWkVfTUFTSwkJCTB4N0ZGCisjZGVmaW5lIERFU0NfUlJEX1JJTkdfU0laRV9TSElGVAkJMTYKKyNkZWZpbmUgUkVHX0RFU0NfVFBEX1JJTkdfU0laRQkJCTB4MTU1QworI2RlZmluZSBERVNDX1RQRF9SSU5HX1NJWkVfTUFTSwkJCTB4M0ZGCisjZGVmaW5lIERFU0NfVFBEX1JJTkdfU0laRV9TSElGVAkJMAorCisvKiBUWFEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfVFhRX0NUUkwJCQkJMHgxNTgwCisjZGVmaW5lIFRYUV9DVFJMX1RQRF9CVVJTVF9OVU1fU0hJRlQJCTAKKyNkZWZpbmUgVFhRX0NUUkxfVFBEX0JVUlNUX05VTV9NQVNLCQkweDFGCisjZGVmaW5lIFRYUV9DVFJMX0VOCQkJCTB4MjAKKyNkZWZpbmUgVFhRX0NUUkxfRU5IX01PREUJCQkweDQwCisjZGVmaW5lIFRYUV9DVFJMX1RQRF9GRVRDSF9USF9TSElGVAkJOAorI2RlZmluZSBUWFFfQ1RSTF9UUERfRkVUQ0hfVEhfTUFTSwkJMHgzRgorI2RlZmluZSBUWFFfQ1RSTF9UWEZfQlVSU1RfTlVNX1NISUZUCQkxNgorI2RlZmluZSBUWFFfQ1RSTF9UWEZfQlVSU1RfTlVNX01BU0sJCTB4RkZGRgorCisvKiBKdW1ibyBwYWNrZXQgVGhyZXNob2xkIGZvciB0YXNrIG9mZmxvYWQgKi8KKyNkZWZpbmUgUkVHX1RYX0pVTUJPX1RBU0tfVEhfVFBEX0lQRwkJMHgxNTg0CisjZGVmaW5lIFRYX0pVTUJPX1RBU0tfVEhfTUFTSwkJCTB4N0ZGCisjZGVmaW5lIFRYX0pVTUJPX1RBU0tfVEhfU0hJRlQJCQkwCisjZGVmaW5lIFRYX1RQRF9NSU5fSVBHX01BU0sJCQkweDFGCisjZGVmaW5lIFRYX1RQRF9NSU5fSVBHX1NISUZUCQkJMTYKKworLyogUlhRIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1JYUV9DVFJMCQkJCTB4MTVBMAorI2RlZmluZSBSWFFfQ1RSTF9SRkRfQlVSU1RfTlVNX1NISUZUCQkwCisjZGVmaW5lIFJYUV9DVFJMX1JGRF9CVVJTVF9OVU1fTUFTSwkJMHhGRgorI2RlZmluZSBSWFFfQ1RSTF9SUkRfQlVSU1RfVEhSRVNIX1NISUZUCQk4CisjZGVmaW5lIFJYUV9DVFJMX1JSRF9CVVJTVF9USFJFU0hfTUFTSwkJMHhGRgorI2RlZmluZSBSWFFfQ1RSTF9SRkRfUFJFRl9NSU5fSVBHX1NISUZUCQkxNgorI2RlZmluZSBSWFFfQ1RSTF9SRkRfUFJFRl9NSU5fSVBHX01BU0sJCTB4MUYKKyNkZWZpbmUgUlhRX0NUUkxfQ1VUX1RIUlVfRU4JCQkweDQwMDAwMDAwCisjZGVmaW5lIFJYUV9DVFJMX0VOCQkJCTB4ODAwMDAwMDAKKworLyogUngganVtYm8gcGFja2V0IHRocmVzaG9sZCBhbmQgcnJkICByZXRpcmVtZW50IHRpbWVyICovCisjZGVmaW5lIFJFR19SWFFfSk1CT1NaX1JSRFRJTQkJCTB4MTVBNAorI2RlZmluZSBSWFFfSk1CT1NaX1RIX01BU0sJCQkweDdGRgorI2RlZmluZSBSWFFfSk1CT1NaX1RIX1NISUZUCQkJMAorI2RlZmluZSBSWFFfSk1CT19MS0FIX01BU0sJCQkweEYKKyNkZWZpbmUgUlhRX0pNQk9fTEtBSF9TSElGVAkJCTExCisjZGVmaW5lIFJYUV9SUkRfVElNRVJfTUFTSwkJCTB4RkZGRgorI2RlZmluZSBSWFFfUlJEX1RJTUVSX1NISUZUCQkJMTYKKworLyogUkZEIGZsb3cgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSRUdfUlhRX1JYRl9QQVVTRV9USFJFU0gJCTB4MTVBOAorI2RlZmluZSBSWFFfUlhGX1BBVVNFX1RIX0hJX1NISUZUCQkxNgorI2RlZmluZSBSWFFfUlhGX1BBVVNFX1RIX0hJX01BU0sJCTB4RkZGCisjZGVmaW5lIFJYUV9SWEZfUEFVU0VfVEhfTE9fU0hJRlQJCTAKKyNkZWZpbmUgUlhRX1JYRl9QQVVTRV9USF9MT19NQVNLCQkweEZGRgorCisvKiBSUkQgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19SWFFfUlJEX1BBVVNFX1RIUkVTSAkJMHgxNUFDCisjZGVmaW5lIFJYUV9SUkRfUEFVU0VfVEhfSElfU0hJRlQJCTAKKyNkZWZpbmUgUlhRX1JSRF9QQVVTRV9USF9ISV9NQVNLCQkweEZGRgorI2RlZmluZSBSWFFfUlJEX1BBVVNFX1RIX0xPX1NISUZUCQkxNgorI2RlZmluZSBSWFFfUlJEX1BBVVNFX1RIX0xPX01BU0sJCTB4RkZGCisKKy8qIERNQSBFbmdpbmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfRE1BX0NUUkwJCQkJMHgxNUMwCisjZGVmaW5lIERNQV9DVFJMX0RNQVJfSU5fT1JERVIJCQkweDEKKyNkZWZpbmUgRE1BX0NUUkxfRE1BUl9FTkhfT1JERVIJCQkweDIKKyNkZWZpbmUgRE1BX0NUUkxfRE1BUl9PVVRfT1JERVIJCQkweDQKKyNkZWZpbmUgRE1BX0NUUkxfUkNCX1ZBTFVFCQkJMHg4CisjZGVmaW5lIERNQV9DVFJMX0RNQVJfQlVSU1RfTEVOX1NISUZUCQk0CisjZGVmaW5lIERNQV9DVFJMX0RNQVJfQlVSU1RfTEVOX01BU0sJCTcKKyNkZWZpbmUgRE1BX0NUUkxfRE1BV19CVVJTVF9MRU5fU0hJRlQJCTcKKyNkZWZpbmUgRE1BX0NUUkxfRE1BV19CVVJTVF9MRU5fTUFTSwkJNworI2RlZmluZSBETUFfQ1RSTF9ETUFSX0VOCQkJMHg0MDAKKyNkZWZpbmUgRE1BX0NUUkxfRE1BV19FTgkJCTB4ODAwCisKKy8qIENNQi9TTUIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfQ1NNQl9DVFJMCQkJCTB4MTVEMAorI2RlZmluZSBDU01CX0NUUkxfQ01CX05PVwkJCTEKKyNkZWZpbmUgQ1NNQl9DVFJMX1NNQl9OT1cJCQkyCisjZGVmaW5lIENTTUJfQ1RSTF9DTUJfRU4JCQk0CisjZGVmaW5lIENTTUJfQ1RSTF9TTUJfRU4JCQk4CisKKy8qIENNQiBETUEgV3JpdGUgVGhyZXNob2xkIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19DTUJfV1JJVEVfVEgJCQkweDE1RDQKKyNkZWZpbmUgQ01CX1JSRF9USF9TSElGVAkJCTAKKyNkZWZpbmUgQ01CX1JSRF9USF9NQVNLCQkJCTB4N0ZGCisjZGVmaW5lIENNQl9UUERfVEhfU0hJRlQJCQkxNgorI2RlZmluZSBDTUJfVFBEX1RIX01BU0sJCQkJMHg3RkYKKworLyogUlgvVFggY291bnQtZG93biB0aW1lciB0byB0cmlnZ2VyIENNQi13cml0ZS4gMnVzIHJlc29sdXRpb24uICovCisjZGVmaW5lIFJFR19DTUJfV1JJVEVfVElNRVIJCQkweDE1RDgKKyNkZWZpbmUgQ01CX1JYX1RNX1NISUZUCQkJCTAKKyNkZWZpbmUgQ01CX1JYX1RNX01BU0sJCQkJMHhGRkZGCisjZGVmaW5lIENNQl9UWF9UTV9TSElGVAkJCQkxNgorI2RlZmluZSBDTUJfVFhfVE1fTUFTSwkJCQkweEZGRkYKKworLyogTnVtYmVyIG9mIHBhY2tldCByZWNlaXZlZCBzaW5jZSBsYXN0IENNQiB3cml0ZSAqLworI2RlZmluZSBSRUdfQ01CX1JYX1BLVF9DTlQJCQkweDE1REMKKworLyogTnVtYmVyIG9mIHBhY2tldCB0cmFuc21pdHRlZCBzaW5jZSBsYXN0IENNQiB3cml0ZSAqLworI2RlZmluZSBSRUdfQ01CX1RYX1BLVF9DTlQJCQkweDE1RTAKKworLyogU01CIGF1dG8gRE1BIHRpbWVyIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19TTUJfVElNRVIJCQkJMHgxNUU0CisKKy8qIE1haWxib3ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX01BSUxCT1gJCQkJMHgxNUYwCisjZGVmaW5lIE1CX1JGRF9QUk9EX0lORFhfU0hJRlQJCQkwCisjZGVmaW5lIE1CX1JGRF9QUk9EX0lORFhfTUFTSwkJCTB4N0ZGCisjZGVmaW5lIE1CX1JSRF9DT05TX0lORFhfU0hJRlQJCQkxMQorI2RlZmluZSBNQl9SUkRfQ09OU19JTkRYX01BU0sJCQkweDdGRgorI2RlZmluZSBNQl9UUERfUFJPRF9JTkRYX1NISUZUCQkJMjIKKyNkZWZpbmUgTUJfVFBEX1BST0RfSU5EWF9NQVNLCQkJMHgzRkYKKworLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBJU1JfU01CCQkJCQkweDEKKyNkZWZpbmUgSVNSX1RJTUVSCQkJCTB4MgorI2RlZmluZSBJU1JfTUFOVUFMCQkJCTB4NAorI2RlZmluZSBJU1JfUlhGX09WCQkJCTB4OAorI2RlZmluZSBJU1JfUkZEX1VOUlVOCQkJCTB4MTAKKyNkZWZpbmUgSVNSX1JSRF9PVgkJCQkweDIwCisjZGVmaW5lIElTUl9UWEZfVU5SVU4JCQkJMHg0MAorI2RlZmluZSBJU1JfTElOSwkJCQkweDgwCisjZGVmaW5lIElTUl9IT1NUX1JGRF9VTlJVTgkJCTB4MTAwCisjZGVmaW5lIElTUl9IT1NUX1JSRF9PVgkJCQkweDIwMAorI2RlZmluZSBJU1JfRE1BUl9UT19SU1QJCQkJMHg0MDAKKyNkZWZpbmUgSVNSX0RNQVdfVE9fUlNUCQkJCTB4ODAwCisjZGVmaW5lIElTUl9HUEhZCQkJCTB4MTAwMAorI2RlZmluZSBJU1JfUlhfUEtUCQkJCTB4MTAwMDAKKyNkZWZpbmUgSVNSX1RYX1BLVAkJCQkweDIwMDAwCisjZGVmaW5lIElTUl9UWF9ETUEJCQkJMHg0MDAwMAorI2RlZmluZSBJU1JfUlhfRE1BCQkJCTB4ODAwMDAKKyNkZWZpbmUgSVNSX0NNQl9SWAkJCQkweDEwMDAwMAorI2RlZmluZSBJU1JfQ01CX1RYCQkJCTB4MjAwMDAwCisjZGVmaW5lIElTUl9NQUNfUlgJCQkJMHg0MDAwMDAKKyNkZWZpbmUgSVNSX01BQ19UWAkJCQkweDgwMDAwMAorI2RlZmluZSBJU1JfRElTX1NNQgkJCQkweDIwMDAwMDAwCisjZGVmaW5lIElTUl9ESVNfRE1BCQkJCTB4NDAwMDAwMDAKKworLyogTm9ybWFsIEludGVycnVwdCBtYXNrICAqLworI2RlZmluZSBJTVJfTk9STUFMX01BU0sJKFwKKwlJU1JfU01CCQl8XAorCUlTUl9HUEhZCXxcCisJSVNSX1BIWV9MSU5LRE9XTnxcCisJSVNSX0RNQVJfVE9fUlNUCXxcCisJSVNSX0RNQVdfVE9fUlNUCXxcCisJSVNSX0NNQl9UWAl8XAorCUlTUl9DTUJfUlgpCisKKy8qIERlYnVnIEludGVycnVwdCBNYXNrICAoZW5hYmxlIGFsbCBpbnRlcnJ1cHQpICovCisjZGVmaW5lIElNUl9ERUJVR19NQVNLCShcCisJSVNSX1NNQgkJfFwKKwlJU1JfVElNRVIJfFwKKwlJU1JfTUFOVUFMCXxcCisJSVNSX1JYRl9PVgl8XAorCUlTUl9SRkRfVU5SVU4JfFwKKwlJU1JfUlJEX09WCXxcCisJSVNSX1RYRl9VTlJVTgl8XAorCUlTUl9MSU5LCXxcCisJSVNSX0NNQl9UWAl8XAorCUlTUl9DTUJfUlgJfFwKKwlJU1JfUlhfUEtUCXxcCisJSVNSX1RYX1BLVAl8XAorCUlTUl9NQUNfUlgJfFwKKwlJU1JfTUFDX1RYKQorCisjZGVmaW5lIE1FRElBX1RZUEVfMTAwME1fRlVMTAkJCTEKKyNkZWZpbmUgTUVESUFfVFlQRV8xMDBNX0ZVTEwJCQkyCisjZGVmaW5lIE1FRElBX1RZUEVfMTAwTV9IQUxGCQkJMworI2RlZmluZSBNRURJQV9UWVBFXzEwTV9GVUxMCQkJNAorI2RlZmluZSBNRURJQV9UWVBFXzEwTV9IQUxGCQkJNQorCisjZGVmaW5lIEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQJCTB4MDAyRgkvKiBBbGwgYnV0IDEwMDAtSGFsZiAqLworCisjZGVmaW5lIE1BWF9KVU1CT19GUkFNRV9TSVpFCQkJMTAyNDAKKworI2RlZmluZSBBVEwxX0VFRFVNUF9MRU4JCQkJNDgKKworLyogU3RhdGlzdGljcyBjb3VudGVycyBjb2xsZWN0ZWQgYnkgdGhlIE1BQyAqLworc3RydWN0IHN0YXRzX21zZ19ibG9jayB7CisJLyogcnggKi8KKwl1MzIgcnhfb2s7CQkvKiBnb29kIFJYIHBhY2tldHMgKi8KKwl1MzIgcnhfYmNhc3Q7CQkvKiBnb29kIFJYIGJyb2FkY2FzdCBwYWNrZXRzICovCisJdTMyIHJ4X21jYXN0OwkJLyogZ29vZCBSWCBtdWx0aWNhc3QgcGFja2V0cyAqLworCXUzMiByeF9wYXVzZTsJCS8qIFJYIHBhdXNlIGZyYW1lcyAqLworCXUzMiByeF9jdHJsOwkJLyogUlggY29udHJvbCBwYWNrZXRzIG90aGVyIHRoYW4gcGF1c2UgZnJhbWVzICovCisJdTMyIHJ4X2Zjc19lcnI7CQkvKiBSWCBwYWNrZXRzIHdpdGggYmFkIEZDUyAqLworCXUzMiByeF9sZW5fZXJyOwkJLyogUlggcGFja2V0cyB3aXRoIGxlbmd0aCAhPSBhY3R1YWwgc2l6ZSAqLworCXUzMiByeF9ieXRlX2NudDsJLyogZ29vZCBieXRlcyByZWNlaXZlZC4gRkNTIGlzIE5PVCBpbmNsdWRlZCAqLworCXUzMiByeF9ydW50OwkJLyogUlggcGFja2V0cyA8IDY0IGJ5dGVzIHdpdGggZ29vZCBGQ1MgKi8KKwl1MzIgcnhfZnJhZzsJCS8qIFJYIHBhY2tldHMgPCA2NCBieXRlcyB3aXRoIGJhZCBGQ1MgKi8KKwl1MzIgcnhfc3pfNjQ7CQkvKiA2NCBieXRlIFJYIHBhY2tldHMgKi8KKwl1MzIgcnhfc3pfNjVfMTI3OworCXUzMiByeF9zel8xMjhfMjU1OworCXUzMiByeF9zel8yNTZfNTExOworCXUzMiByeF9zel81MTJfMTAyMzsKKwl1MzIgcnhfc3pfMTAyNF8xNTE4OworCXUzMiByeF9zel8xNTE5X21heDsJLyogMTUxOSBieXRlIHRvIE1UVSBSWCBwYWNrZXRzICovCisJdTMyIHJ4X3N6X292OwkJLyogdHJ1bmNhdGVkIFJYIHBhY2tldHMgPiBNVFUgKi8KKwl1MzIgcnhfcnhmX292OwkJLyogZnJhbWVzIGRyb3BwZWQgZHVlIHRvIFJYIEZJRk8gb3ZlcmZsb3cgKi8KKwl1MzIgcnhfcnJkX292OwkJLyogZnJhbWVzIGRyb3BwZWQgZHVlIHRvIFJSRCBvdmVyZmxvdyAqLworCXUzMiByeF9hbGlnbl9lcnI7CS8qIGFsaWdubWVudCBlcnJvcnMgKi8KKwl1MzIgcnhfYmNhc3RfYnl0ZV9jbnQ7CS8qIFJYIGJyb2FkY2FzdCBieXRlcywgZXhjbHVkaW5nIEZDUyAqLworCXUzMiByeF9tY2FzdF9ieXRlX2NudDsJLyogUlggbXVsdGljYXN0IGJ5dGVzLCBleGNsdWRpbmcgRkNTICovCisJdTMyIHJ4X2Vycl9hZGRyOwkvKiBwYWNrZXRzIGRyb3BwZWQgZHVlIHRvIGFkZHJlc3MgZmlsdGVyaW5nICovCisKKwkvKiB0eCAqLworCXUzMiB0eF9vazsJCS8qIGdvb2QgVFggcGFja2V0cyAqLworCXUzMiB0eF9iY2FzdDsJCS8qIGdvb2QgVFggYnJvYWRjYXN0IHBhY2tldHMgKi8KKwl1MzIgdHhfbWNhc3Q7CQkvKiBnb29kIFRYIG11bHRpY2FzdCBwYWNrZXRzICovCisJdTMyIHR4X3BhdXNlOwkJLyogVFggcGF1c2UgZnJhbWVzICovCisJdTMyIHR4X2V4Y19kZWZlcjsJLyogVFggcGFja2V0cyBkZWZlcnJlZCBleGNlc3NpdmVseSAqLworCXUzMiB0eF9jdHJsOwkJLyogVFggY29udHJvbCBmcmFtZXMsIGV4Y2x1ZGluZyBwYXVzZSBmcmFtZXMgKi8KKwl1MzIgdHhfZGVmZXI7CQkvKiBUWCBwYWNrZXRzIGRlZmVycmVkICovCisJdTMyIHR4X2J5dGVfY250OwkvKiBieXRlcyB0cmFuc21pdHRlZCwgRkNTIGlzIE5PVCBpbmNsdWRlZCAqLworCXUzMiB0eF9zel82NDsJCS8qIDY0IGJ5dGUgVFggcGFja2V0cyAqLworCXUzMiB0eF9zel82NV8xMjc7CisJdTMyIHR4X3N6XzEyOF8yNTU7CisJdTMyIHR4X3N6XzI1Nl81MTE7CisJdTMyIHR4X3N6XzUxMl8xMDIzOworCXUzMiB0eF9zel8xMDI0XzE1MTg7CisJdTMyIHR4X3N6XzE1MTlfbWF4OwkvKiAxNTE5IGJ5dGUgdG8gTVRVIFRYIHBhY2tldHMgKi8KKwl1MzIgdHhfMV9jb2w7CQkvKiBwYWNrZXRzIFRYIGFmdGVyIGEgc2luZ2xlIGNvbGxpc2lvbiAqLworCXUzMiB0eF8yX2NvbDsJCS8qIHBhY2tldHMgVFggYWZ0ZXIgbXVsdGlwbGUgY29sbGlzaW9ucyAqLworCXUzMiB0eF9sYXRlX2NvbDsJLyogVFggcGFja2V0cyB3aXRoIGxhdGUgY29sbGlzaW9ucyAqLworCXUzMiB0eF9hYm9ydF9jb2w7CS8qIFRYIHBhY2tldHMgYWJvcnRlZCB3L2V4Y2Vzc2l2ZSBjb2xsaXNpb25zICovCisJdTMyIHR4X3VuZGVycnVuOwkvKiBUWCBwYWNrZXRzIGFib3J0ZWQgZHVlIHRvIFRYIEZJRk8gdW5kZXJydW4KKwkJCQkgKiBvciBUUkQgRklGTyB1bmRlcnJ1biAqLworCXUzMiB0eF9yZF9lb3A7CQkvKiByZWFkcyBiZXlvbmQgdGhlIEVPUCBpbnRvIHRoZSBuZXh0IGZyYW1lCisJCQkJICogd2hlbiBUUkQgd2FzIG5vdCB3cml0dGVuIHRpbWVseSAqLworCXUzMiB0eF9sZW5fZXJyOwkJLyogVFggcGFja2V0cyB3aGVyZSBsZW5ndGggIT0gYWN0dWFsIHNpemUgKi8KKwl1MzIgdHhfdHJ1bmM7CQkvKiBUWCBwYWNrZXRzIHRydW5jYXRlZCBkdWUgdG8gc2l6ZSA+IE1UVSAqLworCXUzMiB0eF9iY2FzdF9ieXRlOwkvKiBicm9hZGNhc3QgYnl0ZXMgdHJhbnNtaXR0ZWQsIGV4Y2x1ZGluZyBGQ1MgKi8KKwl1MzIgdHhfbWNhc3RfYnl0ZTsJLyogbXVsdGljYXN0IGJ5dGVzIHRyYW5zbWl0dGVkLCBleGNsdWRpbmcgRkNTICovCisJdTMyIHNtYl91cGRhdGVkOwkvKiAxOiBTTUIgVXBkYXRlZC4gVGhpcyBpcyB1c2VkIGJ5IHNvZnR3YXJlIHRvCisJCQkJICogaW5kaWNhdGUgdGhlIHN0YXRpc3RpY3MgdXBkYXRlLiBTb2Z0d2FyZQorCQkJCSAqIHNob3VsZCBjbGVhciB0aGlzIGJpdCBhZnRlciByZXRyaWV2aW5nIHRoZQorCQkJCSAqIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24uICovCit9OworCisvKiBDb2FsZXNjaW5nIE1lc3NhZ2UgQmxvY2sgKi8KK3N0cnVjdCBjb2Fsc19tc2dfYmxvY2sgeworCXUzMiBpbnRfc3RhdHM7CQkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCisJdTE2IHJyZF9wcm9kX2lkeDsJLyogVFJEIFByb2R1Y2VyIEluZGV4LiAqLworCXUxNiByZmRfY29uc19pZHg7CS8qIFJGRCBDb25zdW1lciBJbmRleC4gKi8KKwl1MTYgdXBkYXRlOwkJLyogU2VsZW5lIHNldHMgdGhpcyBiaXQgZXZlcnkgdGltZSBpdCBETUFzIHRoZQorCQkJCSAqIENNQiB0byBob3N0IG1lbW9yeS4gU29mdHdhcmUgc2hvdWxkIGNsZWFyCisJCQkJICogdGhpcyBiaXQgd2hlbiBDTUIgaW5mbyBpcyBwcm9jZXNzZWQuICovCisJdTE2IHRwZF9jb25zX2lkeDsJLyogVFBEIENvbnN1bWVyIEluZGV4LiAqLworfTsKKworLyogUlJEIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCByeF9yZXR1cm5fZGVzYyB7CisJdTggbnVtX2J1ZjsJLyogTnVtYmVyIG9mIFJGRCBidWZmZXJzIHVzZWQgYnkgdGhlIHJlY2VpdmVkIHBhY2tldCAqLworCXU4IHJlc3ZlZDsKKwl1MTYgYnVmX2luZHg7CS8qIFJGRCBJbmRleCBvZiB0aGUgZmlyc3QgYnVmZmVyICovCisJdW5pb24geworCQl1MzIgdmFsaWQ7CisJCXN0cnVjdCB7CisJCQl1MTYgcnhfY2hrc3VtOworCQkJdTE2IHBrdF9zaXplOworCQl9IHhzdW1fc3o7CisJfSB4c3o7CisKKwl1MTYgcGt0X2ZsZzsJLyogUGFja2V0IGZsYWdzICovCisJdTE2IGVycl9mbGc7CS8qIEVycm9yIGZsYWdzICovCisJdTE2IHJlc3ZlZDI7CisJdTE2IHZsYW5fdGFnOwkvKiBWTEFOIFRBRyAqLworfTsKKworI2RlZmluZSBQQUNLRVRfRkxBR19FVEhfVFlQRQkweDAwODAKKyNkZWZpbmUgUEFDS0VUX0ZMQUdfVkxBTl9JTlMJMHgwMTAwCisjZGVmaW5lIFBBQ0tFVF9GTEFHX0VSUgkJMHgwMjAwCisjZGVmaW5lIFBBQ0tFVF9GTEFHX0lQVjQJMHgwNDAwCisjZGVmaW5lIFBBQ0tFVF9GTEFHX1VEUAkJMHgwODAwCisjZGVmaW5lIFBBQ0tFVF9GTEFHX1RDUAkJMHgxMDAwCisjZGVmaW5lIFBBQ0tFVF9GTEFHX0JDQVNUCTB4MjAwMAorI2RlZmluZSBQQUNLRVRfRkxBR19NQ0FTVAkweDQwMDAKKyNkZWZpbmUgUEFDS0VUX0ZMQUdfUEFVU0UJMHg4MDAwCisKKyNkZWZpbmUgRVJSX0ZMQUdfQ1JDCQkweDAwMDEKKyNkZWZpbmUgRVJSX0ZMQUdfQ09ERQkJMHgwMDAyCisjZGVmaW5lIEVSUl9GTEFHX0RSSUJCTEUJMHgwMDA0CisjZGVmaW5lIEVSUl9GTEFHX1JVTlQJCTB4MDAwOAorI2RlZmluZSBFUlJfRkxBR19PVgkJMHgwMDEwCisjZGVmaW5lIEVSUl9GTEFHX1RSVU5DCQkweDAwMjAKKyNkZWZpbmUgRVJSX0ZMQUdfSVBfQ0hLU1VNCTB4MDA0MAorI2RlZmluZSBFUlJfRkxBR19MNF9DSEtTVU0JMHgwMDgwCisjZGVmaW5lIEVSUl9GTEFHX0xFTgkJMHgwMTAwCisjZGVmaW5lIEVSUl9GTEFHX0RFU19BRERSCTB4MDIwMAorCisvKiBSRkQgZGVzY3JpcHRvciAqLworc3RydWN0IHJ4X2ZyZWVfZGVzYyB7CisJX19sZTY0IGJ1ZmZlcl9hZGRyOwkvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KKwlfX2xlMTYgYnVmX2xlbjsJCS8qIFNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyIGluIGhvc3QgbWVtb3J5ICovCisJdTE2IGNvYWxlc2U7CQkvKiBVcGRhdGUgY29uc3VtZXIgaW5kZXggdG8gaG9zdCBhZnRlciB0aGUKKwkJCQkgKiByZWNlcHRpb24gb2YgdGhpcyBmcmFtZSAqLworCS8qIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpcyByZXF1aXJlZCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBUaGUgTDEgdHJhbnNtaXQgcGFja2V0IGRlc2NyaXB0b3IgaXMgY29tcHJpc2VkIG9mIGZvdXIgMzItYml0IHdvcmRzLgorICoKKyAqCTMxCQkJCQkwCisgKgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICB8CVdvcmQgMDogQnVmZmVyIGFkZHIgbG8gCQl8CisgKiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgIHwJV29yZCAxOiBCdWZmZXIgYWRkciBoaQkJfAorICogICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICB8CQlXb3JkIDIJCQl8CisgKiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgIHwJCVdvcmQgMwkJCXwKKyAqICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBXb3JkcyAwIGFuZCAxIGNvbWJpbmUgdG8gZm9ybSBhIDY0LWJpdCBidWZmZXIgYWRkcmVzcy4KKyAqCisgKiBXb3JkIDIgaXMgc2VsZiBleHBsYW5hdG9yeSBpbiB0aGUgI2RlZmluZSBibG9jayBiZWxvdy4KKyAqCisgKiBXb3JkIDMgaGFzIHR3byBmb3JtcywgZGVwZW5kaW5nIHVwb24gdGhlIHN0YXRlIG9mIGJpdHMgMyBhbmQgNC4KKyAqIElmIGJpdHMgMyBhbmQgNCBhcmUgYm90aCB6ZXJvLCB0aGVuIGJpdHMgMTQ6MzEgYXJlIHVudXNlZCBieSB0aGUKKyAqIGhhcmR3YXJlLiAgT3RoZXJ3aXNlLCBpZiBlaXRoZXIgYml0IDMgb3IgNCBpcyBzZXQsIHRoZSBkZWZpbml0aW9uCisgKiBvZiBiaXRzIDE0OjMxIHZhcnkgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgZGVwaWN0aW9uLgorICoKKyAqCTAJRW5kIG9mIHBhY2tldAkJCTAJRW5kIG9mIHBhY2tldAorICoJMQlDb2FsZXNjZQkJCTEJQ29hbGVzY2UKKyAqCTIJSW5zZXJ0IFZMQU4gdGFnCQkJMglJbnNlcnQgVkxBTiB0YWcKKyAqCTMJQ3VzdG9tIGNzdW0gZW5hYmxlID0gMAkJMwlDdXN0b20gY3N1bSBlbmFibGUgPSAxCisgKgk0CVNlZ21lbnQgZW5hYmxlID0gMQkJNAlTZWdtZW50IGVuYWJsZSA9IDAKKyAqCTUJR2VuZXJhdGUgSVAgY2hlY2tzdW0JCTUJR2VuZXJhdGUgSVAgY2hlY2tzdW0KKyAqCTYJR2VuZXJhdGUgVENQIGNoZWNrc3VtCQk2CUdlbmVyYXRlIFRDUCBjaGVja3N1bQorICoJNwlHZW5lcmF0ZSBVRFAgY2hlY2tzdW0JCTcJR2VuZXJhdGUgVURQIGNoZWNrc3VtCisgKgk4CVZMQU4gdGFnZ2VkCQkJOAlWTEFOIHRhZ2dlZAorICoJOQlFdGhlcm5ldCBmcmFtZSB0eXBlCQk5CUV0aGVybmV0IGZyYW1lIHR5cGUKKyAqCTEwLSsgCQkJCQkxMC0rCisgKgkxMSB8CUlQIGhkciBsZW5ndGggKDEwOjEzKQkJMTEgfAlJUCBoZHIgbGVuZ3RoICgxMDoxMykKKyAqCTEyIHwJKG51bSAzMi1iaXQgd29yZHMpCQkxMiB8CShudW0gMzItYml0IHdvcmRzKQorICoJMTMtKwkJCQkJMTMtKworICoJMTQtKwkJCQkJMTQJVW51c2VkCisgKgkxNSB8CVRDUCBoZHIgbGVuZ3RoICgxNDoxNykJCTE1CVVudXNlZAorICoJMTYgfAkobnVtIDMyLWJpdCB3b3JkcykJCTE2LSsKKyAqCTE3LSsJCQkJCTE3IHwKKyAqCTE4CUhlYWRlciBUUEQgZmxhZwkJCTE4IHwKKyAqCTE5LSsJCQkJCTE5IHwJUGF5bG9hZCBvZmZzZXQKKyAqCTIwIHwJCQkJCTIwIHwJICAgICgxNjoyMykKKyAqCTIxIHwJCQkJCTIxIHwKKyAqCTIyIHwJCQkJCTIyIHwKKyAqCTIzIHwJCQkJCTIzLSsKKyAqCTI0IHwJCQkJCTI0LSsKKyAqCTI1IHwJTVNTICgxOTozMSkJCQkyNSB8CisgKgkyNiB8CQkJCQkyNiB8CisgKgkyNyB8CQkJCQkyNyB8CUN1c3RvbSBjc3VtIG9mZnNldAorICoJMjggfAkJCQkJMjggfAkgICAgICgyNDozMSkKKyAqCTI5IHwJCQkJCTI5IHwKKyAqCTMwIHwJCQkJCTMwIHwKKyAqCTMxLSsJCQkJCTMxLSsKKyAqLworCisvKiB0cGQgd29yZCAyICovCisjZGVmaW5lIFRQRF9CVUZMRU5fTUFTSwkJMHgzRkZGCisjZGVmaW5lIFRQRF9CVUZMRU5fU0hJRlQJMAorI2RlZmluZSBUUERfRE1BSU5UX01BU0sJCTB4MDAwMQorI2RlZmluZSBUUERfRE1BSU5UX1NISUZUCTE0CisjZGVmaW5lIFRQRF9QS1ROVF9NQVNLCQkweDAwMDEKKyNkZWZpbmUgVFBEX1BLVElOVF9TSElGVAkxNQorI2RlZmluZSBUUERfVkxBTlRBR19NQVNLCTB4RkZGRgorI2RlZmluZSBUUERfVkxBTl9TSElGVAkJMTYKKworLyogdHBkIHdvcmQgMyBiaXRzIDA6MTMgKi8KKyNkZWZpbmUgVFBEX0VPUF9NQVNLCQkweDAwMDEKKyNkZWZpbmUgVFBEX0VPUF9TSElGVAkJMAorI2RlZmluZSBUUERfQ09BTEVTQ0VfTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0NPQUxFU0NFX1NISUZUCTEKKyNkZWZpbmUgVFBEX0lOU19WTF9UQUdfTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0lOU19WTF9UQUdfU0hJRlQJMgorI2RlZmluZSBUUERfQ1VTVF9DU1VNX0VOX01BU0sJMHgwMDAxCisjZGVmaW5lIFRQRF9DVVNUX0NTVU1fRU5fU0hJRlQJMworI2RlZmluZSBUUERfU0VHTUVOVF9FTl9NQVNLCTB4MDAwMQorI2RlZmluZSBUUERfU0VHTUVOVF9FTl9TSElGVAk0CisjZGVmaW5lIFRQRF9JUF9DU1VNX01BU0sJMHgwMDAxCisjZGVmaW5lIFRQRF9JUF9DU1VNX1NISUZUCTUKKyNkZWZpbmUgVFBEX1RDUF9DU1VNX01BU0sJMHgwMDAxCisjZGVmaW5lIFRQRF9UQ1BfQ1NVTV9TSElGVAk2CisjZGVmaW5lIFRQRF9VRFBfQ1NVTV9NQVNLCTB4MDAwMQorI2RlZmluZSBUUERfVURQX0NTVU1fU0hJRlQJNworI2RlZmluZSBUUERfVkxfVEFHR0VEX01BU0sJMHgwMDAxCisjZGVmaW5lIFRQRF9WTF9UQUdHRURfU0hJRlQJOAorI2RlZmluZSBUUERfRVRIVFlQRV9NQVNLCTB4MDAwMQorI2RlZmluZSBUUERfRVRIVFlQRV9TSElGVAk5CisjZGVmaW5lIFRQRF9JUEhMX01BU0sJCTB4MDAwRgorI2RlZmluZSBUUERfSVBITF9TSElGVAkJMTAKKworLyogdHBkIHdvcmQgMyBiaXRzIDE0OjMxIGlmIHNlZ21lbnQgZW5hYmxlZCAqLworI2RlZmluZSBUUERfVENQSERSTEVOX01BU0sJMHgwMDBGCisjZGVmaW5lIFRQRF9UQ1BIRFJMRU5fU0hJRlQJMTQKKyNkZWZpbmUgVFBEX0hEUkZMQUdfTUFTSwkweDAwMDEKKyNkZWZpbmUgVFBEX0hEUkZMQUdfU0hJRlQJMTgKKyNkZWZpbmUgVFBEX01TU19NQVNLCQkweDFGRkYKKyNkZWZpbmUgVFBEX01TU19TSElGVAkJMTkKKworLyogdHBkIHdvcmQgMyBiaXRzIDE2OjMxIGlmIGN1c3RvbSBjc3VtIGVuYWJsZWQgKi8KKyNkZWZpbmUgVFBEX1BMT0FET0ZGU0VUX01BU0sJMHgwMEZGCisjZGVmaW5lIFRQRF9QTE9BRE9GRlNFVF9TSElGVAkxNgorI2RlZmluZSBUUERfQ0NTVU1PRkZTRVRfTUFTSwkweDAwRkYKKyNkZWZpbmUgVFBEX0NDU1VNT0ZGU0VUX1NISUZUCTI0CisKK3N0cnVjdCB0eF9wYWNrZXRfZGVzYyB7CisJX19sZTY0IGJ1ZmZlcl9hZGRyOworCV9fbGUzMiB3b3JkMjsKKwlfX2xlMzIgd29yZDM7Cit9OworCisvKiBETUEgT3JkZXIgU2V0dGluZ3MgKi8KK2VudW0gYXRsMV9kbWFfb3JkZXIgeworCWF0bDFfZG1hX29yZF9pbiA9IDEsCisJYXRsMV9kbWFfb3JkX2VuaCA9IDIsCisJYXRsMV9kbWFfb3JkX291dCA9IDQKK307CisKK2VudW0gYXRsMV9kbWFfcmNiIHsKKwlhdGwxX3JjYl82NCA9IDAsCisJYXRsMV9yY2JfMTI4ID0gMQorfTsKKworZW51bSBhdGwxX2RtYV9yZXFfYmxvY2sgeworCWF0bDFfZG1hX3JlcV8xMjggPSAwLAorCWF0bDFfZG1hX3JlcV8yNTYgPSAxLAorCWF0bDFfZG1hX3JlcV81MTIgPSAyLAorCWF0bDFfZG1hX3JlcV8xMDI0ID0gMywKKwlhdGwxX2RtYV9yZXFfMjA0OCA9IDQsCisJYXRsMV9kbWFfcmVxXzQwOTYgPSA1Cit9OworCisjZGVmaW5lIEFUTDFfTUFYX0lOVFIJCTMKKyNkZWZpbmUgQVRMMV9NQVhfVFhfQlVGX0xFTgkweDMwMDAJLyogMTIyODggYnl0ZXMgKi8KKworI2RlZmluZSBBVEwxX0RFRkFVTFRfVFBECTI1NgorI2RlZmluZSBBVEwxX01BWF9UUEQJCTEwMjQKKyNkZWZpbmUgQVRMMV9NSU5fVFBECQk2NAorI2RlZmluZSBBVEwxX0RFRkFVTFRfUkZECTUxMgorI2RlZmluZSBBVEwxX01JTl9SRkQJCTEyOAorI2RlZmluZSBBVEwxX01BWF9SRkQJCTIwNDgKKyNkZWZpbmUgQVRMMV9SRUdfQ09VTlQJCTE1MzgKKworI2RlZmluZSBBVEwxX0dFVF9ERVNDKFIsIGksIHR5cGUpCSgmKCgodHlwZSAqKSgoUiktPmRlc2MpKVtpXSkpCisjZGVmaW5lIEFUTDFfUkZEX0RFU0MoUiwgaSkJQVRMMV9HRVRfREVTQyhSLCBpLCBzdHJ1Y3QgcnhfZnJlZV9kZXNjKQorI2RlZmluZSBBVEwxX1RQRF9ERVNDKFIsIGkpCUFUTDFfR0VUX0RFU0MoUiwgaSwgc3RydWN0IHR4X3BhY2tldF9kZXNjKQorI2RlZmluZSBBVEwxX1JSRF9ERVNDKFIsIGkpCUFUTDFfR0VUX0RFU0MoUiwgaSwgc3RydWN0IHJ4X3JldHVybl9kZXNjKQorCisvKgorICogYXRsMV9yaW5nX2hlYWRlciByZXByZXNlbnRzIGEgc2luZ2xlLCBjb250aWd1b3VzIGJsb2NrIG9mIERNQSBzcGFjZQorICogbWFwcGVkIGZvciB0aGUgdGhyZWUgZGVzY3JpcHRvciByaW5ncyAodHBkLCByZmQsIHJyZCkgYW5kIHRoZSB0d28KKyAqIG1lc3NhZ2UgYmxvY2tzIChjbWIsIHNtYikgZGVzY3JpYmVkIGJlbG93CisgKi8KK3N0cnVjdCBhdGwxX3JpbmdfaGVhZGVyIHsKKwl2b2lkICpkZXNjOwkJLyogdmlydHVhbCBhZGRyZXNzICovCisJZG1hX2FkZHJfdCBkbWE7CQkvKiBwaHlzaWNhbCBhZGRyZXNzKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsJLyogbGVuZ3RoIGluIGJ5dGVzICovCit9OworCisvKgorICogYXRsMV9idWZmZXIgaXMgd3JhcHBlciBhcm91bmQgYSBwb2ludGVyIHRvIGEgc29ja2V0IGJ1ZmZlcgorICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgc2tiCisgKi8KK3N0cnVjdCBhdGwxX2J1ZmZlciB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJLyogc29ja2V0IGJ1ZmZlciAqLworCXUxNiBsZW5ndGg7CQkvKiByeCBidWZmZXIgbGVuZ3RoICovCisJdTE2IGFsbG9jZWQ7CQkvKiAxIGlmIHNrYiBhbGxvY2F0ZWQgKi8KKwlkbWFfYWRkcl90IGRtYTsKK307CisKKy8qIHRyYW5zbWl0IHBhY2tldCBkZXNjcmlwdG9yICh0cGQpIHJpbmcgKi8KK3N0cnVjdCBhdGwxX3RwZF9yaW5nIHsKKwl2b2lkICpkZXNjOwkJLyogZGVzY3JpcHRvciByaW5nIHZpcnR1YWwgYWRkcmVzcyAqLworCWRtYV9hZGRyX3QgZG1hOwkJLyogZGVzY3JpcHRvciByaW5nIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MTYgc2l6ZTsJCS8qIGRlc2NyaXB0b3IgcmluZyBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1MTYgY291bnQ7CQkvKiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KKwl1MTYgaHdfaWR4OwkJLyogaGFyZHdhcmUgaW5kZXggKi8KKwlhdG9taWNfdCBuZXh0X3RvX2NsZWFuOworCWF0b21pY190IG5leHRfdG9fdXNlOworCXN0cnVjdCBhdGwxX2J1ZmZlciAqYnVmZmVyX2luZm87Cit9OworCisvKiByZWNlaXZlIGZyZWUgZGVzY3JpcHRvciAocmZkKSByaW5nICovCitzdHJ1Y3QgYXRsMV9yZmRfcmluZyB7CisJdm9pZCAqZGVzYzsJCS8qIGRlc2NyaXB0b3IgcmluZyB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlkbWFfYWRkcl90IGRtYTsJCS8qIGRlc2NyaXB0b3IgcmluZyBwaHlzaWNhbCBhZGRyZXNzICovCisJdTE2IHNpemU7CQkvKiBkZXNjcmlwdG9yIHJpbmcgbGVuZ3RoIGluIGJ5dGVzICovCisJdTE2IGNvdW50OwkJLyogbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nICovCisJYXRvbWljX3QgbmV4dF90b191c2U7CisJdTE2IG5leHRfdG9fY2xlYW47CisJc3RydWN0IGF0bDFfYnVmZmVyICpidWZmZXJfaW5mbzsKK307CisKKy8qIHJlY2VpdmUgcmV0dXJuIGRlc2NyaXB0b3IgKHJyZCkgcmluZyAqLworc3RydWN0IGF0bDFfcnJkX3JpbmcgeworCXZvaWQgKmRlc2M7CQkvKiBkZXNjcmlwdG9yIHJpbmcgdmlydHVhbCBhZGRyZXNzICovCisJZG1hX2FkZHJfdCBkbWE7CQkvKiBkZXNjcmlwdG9yIHJpbmcgcGh5c2ljYWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBzaXplOwkvKiBkZXNjcmlwdG9yIHJpbmcgbGVuZ3RoIGluIGJ5dGVzICovCisJdTE2IGNvdW50OwkJLyogbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nICovCisJdTE2IG5leHRfdG9fdXNlOworCWF0b21pY190IG5leHRfdG9fY2xlYW47Cit9OworCisvKiBjb2FsZXNjaW5nIG1lc3NhZ2UgYmxvY2sgKGNtYikgKi8KK3N0cnVjdCBhdGwxX2NtYiB7CisJc3RydWN0IGNvYWxzX21zZ19ibG9jayAqY21iOworCWRtYV9hZGRyX3QgZG1hOworfTsKKworLyogc3RhdGlzdGljcyBtZXNzYWdlIGJsb2NrIChzbWIpICovCitzdHJ1Y3QgYXRsMV9zbWIgeworCXN0cnVjdCBzdGF0c19tc2dfYmxvY2sgKnNtYjsKKwlkbWFfYWRkcl90IGRtYTsKK307CisKKy8qIFN0YXRpc3RpY3MgY291bnRlcnMgKi8KK3N0cnVjdCBhdGwxX3NmdF9zdGF0cyB7CisJdTY0IHJ4X3BhY2tldHM7CisJdTY0IHR4X3BhY2tldHM7CisJdTY0IHJ4X2J5dGVzOworCXU2NCB0eF9ieXRlczsKKwl1NjQgbXVsdGljYXN0OworCXU2NCBjb2xsaXNpb25zOworCXU2NCByeF9lcnJvcnM7CisJdTY0IHJ4X2xlbmd0aF9lcnJvcnM7CisJdTY0IHJ4X2NyY19lcnJvcnM7CisJdTY0IHJ4X2ZyYW1lX2Vycm9yczsKKwl1NjQgcnhfZmlmb19lcnJvcnM7CisJdTY0IHJ4X21pc3NlZF9lcnJvcnM7CisJdTY0IHR4X2Vycm9yczsKKwl1NjQgdHhfZmlmb19lcnJvcnM7CisJdTY0IHR4X2Fib3J0ZWRfZXJyb3JzOworCXU2NCB0eF93aW5kb3dfZXJyb3JzOworCXU2NCB0eF9jYXJyaWVyX2Vycm9yczsKKwl1NjQgdHhfcGF1c2U7CQkvKiBUWCBwYXVzZSBmcmFtZXMgKi8KKwl1NjQgZXhjZWNvbDsJCS8qIFRYIHBhY2tldHMgdy8gZXhjZXNzaXZlIGNvbGxpc2lvbnMgKi8KKwl1NjQgZGVmZmVyOwkJLyogVFggcGFja2V0cyBkZWZlcnJlZCAqLworCXU2NCBzY2M7CQkvKiBwYWNrZXRzIFRYIGFmdGVyIGEgc2luZ2xlIGNvbGxpc2lvbiAqLworCXU2NCBtY2M7CQkvKiBwYWNrZXRzIFRYIGFmdGVyIG11bHRpcGxlIGNvbGxpc2lvbnMgKi8KKwl1NjQgbGF0ZWNvbDsJCS8qIFRYIHBhY2tldHMgdy8gbGF0ZSBjb2xsaXNpb25zICovCisJdTY0IHR4X3VuZGVydW47CQkvKiBUWCBwYWNrZXRzIGFib3J0ZWQgZHVlIHRvIFRYIEZJRk8gdW5kZXJydW4KKwkJCQkgKiBvciBUUkQgRklGTyB1bmRlcnJ1biAqLworCXU2NCB0eF90cnVuYzsJCS8qIFRYIHBhY2tldHMgdHJ1bmNhdGVkIGR1ZSB0byBzaXplID4gTVRVICovCisJdTY0IHJ4X3BhdXNlOwkJLyogbnVtIFBhdXNlIHBhY2tldHMgcmVjZWl2ZWQuICovCisJdTY0IHJ4X3JyZF9vdjsKKwl1NjQgcnhfdHJ1bmM7Cit9OworCisvKiBoYXJkd2FyZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBhdGwxX2h3IHsKKwl1OCBfX2lvbWVtICpod19hZGRyOworCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmJhY2s7CisJZW51bSBhdGwxX2RtYV9vcmRlciBkbWFfb3JkOworCWVudW0gYXRsMV9kbWFfcmNiIHJjYl92YWx1ZTsKKwllbnVtIGF0bDFfZG1hX3JlcV9ibG9jayBkbWFyX2Jsb2NrOworCWVudW0gYXRsMV9kbWFfcmVxX2Jsb2NrIGRtYXdfYmxvY2s7CisJdTggcHJlYW1ibGVfbGVuOworCXU4IG1heF9yZXRyeTsKKwl1OCBqYW1faXBnOwkJLyogSVBHIHRvIHN0YXJ0IEpBTSBmb3IgY29sbGlzaW9uIGJhc2VkIGZsb3cKKwkJCQkgKiBjb250cm9sIGluIGhhbGYtZHVwbGV4IG1vZGUuIEluIHVuaXRzIG9mCisJCQkJICogOC1iaXQgdGltZSAqLworCXU4IGlwZ3Q7CQkvKiBEZXNpcmVkIGJhY2sgdG8gYmFjayBpbnRlci1wYWNrZXQgZ2FwLgorCQkJCSAqIFRoZSBkZWZhdWx0IGlzIDk2LWJpdCB0aW1lICovCisJdTggbWluX2lmZzsJCS8qIE1pbmltdW0gbnVtYmVyIG9mIElGRyB0byBlbmZvcmNlIGluIGJldHdlZW4KKwkJCQkgKiByZWNlaXZlIGZyYW1lcy4gRnJhbWUgZ2FwIGJlbG93IHN1Y2ggSUZQCisJCQkJICogaXMgZHJvcHBlZCAqLworCXU4IGlwZ3IxOwkJLyogNjRiaXQgQ2Fycmllci1TZW5zZSB3aW5kb3cgKi8KKwl1OCBpcGdyMjsJCS8qIDk2LWJpdCBJUEcgd2luZG93ICovCisJdTggdHBkX2J1cnN0OwkJLyogTnVtYmVyIG9mIFRQRCB0byBwcmVmZXRjaCBpbiBjYWNoZS1hbGlnbmVkCisJCQkJICogYnVyc3QuIEVhY2ggVFBEIGlzIDE2IGJ5dGVzIGxvbmcgKi8KKwl1OCByZmRfYnVyc3Q7CQkvKiBOdW1iZXIgb2YgUkZEIHRvIHByZWZldGNoIGluIGNhY2hlLWFsaWduZWQKKwkJCQkgKiBidXJzdC4gRWFjaCBSRkQgaXMgMTIgYnl0ZXMgbG9uZyAqLworCXU4IHJmZF9mZXRjaF9nYXA7CisJdTggcnJkX2J1cnN0OwkJLyogVGhyZXNob2xkIG51bWJlciBvZiBSUkRzIHRoYXQgY2FuIGJlIHJldGlyZWQKKwkJCQkgKiBpbiBhIGJ1cnN0LiBFYWNoIFJSRCBpcyAxNiBieXRlcyBsb25nICovCisJdTggdHBkX2ZldGNoX3RoOworCXU4IHRwZF9mZXRjaF9nYXA7CisJdTE2IHR4X2p1bWJvX3Rhc2tfdGg7CisJdTE2IHR4Zl9idXJzdDsJCS8qIE51bWJlciBvZiBkYXRhIGJ5dGVzIHRvIHJlYWQgaW4gYSBjYWNoZS0KKwkJCQkgKiBhbGlnbmVkIGJ1cnN0LiBFYWNoIFNSQU0gZW50cnkgaXMgOCBieXRlcyAqLworCXUxNiByeF9qdW1ib190aDsJLyogSnVtYm8gcGFja2V0IHNpemUgZm9yIG5vbi1WTEFOIHBhY2tldC4gVkxBTgorCQkJCSAqIHBhY2tldHMgc2hvdWxkIGFkZCA0IGJ5dGVzICovCisJdTE2IHJ4X2p1bWJvX2xrYWg7CisJdTE2IHJyZF9yZXRfdGltZXI7CS8qIFJSRCByZXRpcmVtZW50IHRpbWVyLiBEZWNyZW1lbnQgYnkgMSBhZnRlcgorCQkJCSAqIGV2ZXJ5IDUxMm5zIHBhc3Nlcy4gKi8KKwl1MTYgbGNvbDsJCS8qIENvbGxpc2lvbiBXaW5kb3cgKi8KKworCXUxNiBjbWJfdHBkOworCXUxNiBjbWJfcnJkOworCXUxNiBjbWJfcnhfdGltZXI7CisJdTE2IGNtYl90eF90aW1lcjsKKwl1MzIgc21iX3RpbWVyOworCXUxNiBtZWRpYV90eXBlOworCXUxNiBhdXRvbmVnX2FkdmVydGlzZWQ7CisKKwl1MTYgbWlpX2F1dG9uZWdfYWR2X3JlZzsKKwl1MTYgbWlpXzEwMDB0X2N0cmxfcmVnOworCisJdTMyIG1heF9mcmFtZV9zaXplOworCXUzMiBtaW5fZnJhbWVfc2l6ZTsKKworCXUxNiBkZXZfcmV2OworCisJLyogc3BpIGZsYXNoICovCisJdTggZmxhc2hfdmVuZG9yOworCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IHBlcm1fbWFjX2FkZHJbRVRIX0FMRU5dOworCisJYm9vbCBwaHlfY29uZmlndXJlZDsKK307CisKK3N0cnVjdCBhdGwxX2FkYXB0ZXIgeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOworCXN0cnVjdCBhdGwxX3NmdF9zdGF0cyBzb2Z0X3N0YXRzOworCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKKwl1MzIgcnhfYnVmZmVyX2xlbjsKKwl1MzIgd29sOworCXUxNiBsaW5rX3NwZWVkOworCXUxNiBsaW5rX2R1cGxleDsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua19jaGdfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGNpZV9kbWFfdG9fcnN0X3Rhc2s7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgcGh5X2NvbmZpZ190aW1lcjsKKwlib29sIHBoeV90aW1lcl9wZW5kaW5nOworCisJLyogYWxsIGRlc2NyaXB0b3IgcmluZ3MnIG1lbW9yeSAqLworCXN0cnVjdCBhdGwxX3JpbmdfaGVhZGVyIHJpbmdfaGVhZGVyOworCisJLyogVFggKi8KKwlzdHJ1Y3QgYXRsMV90cGRfcmluZyB0cGRfcmluZzsKKwlzcGlubG9ja190IG1iX2xvY2s7CisKKwkvKiBSWCAqLworCXN0cnVjdCBhdGwxX3JmZF9yaW5nIHJmZF9yaW5nOworCXN0cnVjdCBhdGwxX3JyZF9yaW5nIHJyZF9yaW5nOworCXU2NCBod19jc3VtX2VycjsKKwl1NjQgaHdfY3N1bV9nb29kOworCXUzMiBtc2dfZW5hYmxlOworCXUxNiBpbXQ7CQkvKiBpbnRlcnJ1cHQgbW9kZXJhdG9yIHRpbWVyICgydXMgcmVzb2x1dGlvbikgKi8KKwl1MTYgaWN0OwkJLyogaW50ZXJydXB0IGNsZWFyIHRpbWVyICgydXMgcmVzb2x1dGlvbiAqLworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWk7CS8qIE1JSSBpbnRlcmZhY2UgaW5mbyAqLworCisJdTMyIGJkX251bWJlcjsJCS8qIGJvYXJkIG51bWJlciAqLworCWJvb2wgcGNpX3VzaW5nXzY0OworCXN0cnVjdCBhdGwxX2h3IGh3OworCXN0cnVjdCBhdGwxX3NtYiBzbWI7CisJc3RydWN0IGF0bDFfY21iIGNtYjsKK307CisKKyNlbmRpZiAvKiBBVEwxX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRseC5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGx4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NjMyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRseC5jCkBAIC0wLDAgKzEsNDMzIEBACisvKiBhdGx4LmMgLS0gY29tbW9uIGZ1bmN0aW9ucyBmb3IgQXR0YW5zaWMgbmV0d29yayBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA2IEF0dGFuc2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDYgLSAyMDA3IENocmlzIFNub29rIDxjc25vb2tAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodChjKSAyMDA2IEpheSBDbGlidXJuIDxqY2xpYnVybkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQoYykgMjAwNyBBdGhlcm9zIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERlcml2ZWQgZnJvbSBJbnRlbCBlMTAwMCBkcml2ZXIKKyAqIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKiBJbmNsdWRpbmcgdGhpcyBmaWxlIGxpa2UgYSBoZWFkZXIgaXMgYSB0ZW1wb3JhcnkgaGFjaywgSSBwcm9taXNlLiAtLSBDSFMgKi8KKyNpZm5kZWYgQVRMWF9DCisjZGVmaW5lIEFUTFhfQworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgImF0bHguaCIKKworc3RhdGljIHN0cnVjdCBhdGx4X3NwaV9mbGFzaF9kZXYgZmxhc2hfdGFibGVbXSA9IHsKKy8qCU1GUl9OQU1FICBXUlNSICBSRUFEICBQUkdNICBXUkVOICBXUkRJICBSRFNSICBSRElEICBTRUNfRVJTIENISVBfRVJTICovCisJeyJBdG1lbCIsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MDYsIDB4MDQsIDB4MDUsIDB4MTUsIDB4NTIsICAgMHg2Mn0sCisJeyJTU1QiLCAgIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDYsIDB4MDQsIDB4MDUsIDB4OTAsIDB4MjAsICAgMHg2MH0sCisJeyJTVCIsICAgIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDYsIDB4MDQsIDB4MDUsIDB4QUIsIDB4RDgsICAgMHhDN30sCit9OworCitzdGF0aWMgaW50IGF0bHhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCWNhc2UgU0lPQ0dNSUlSRUc6CisJY2FzZSBTSU9DU01JSVJFRzoKKwkJcmV0dXJuIGF0bHhfbWlpX2lvY3RsKG5ldGRldiwgaWZyLCBjbWQpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKKy8qCisgKiBhdGx4X3NldF9tYWMgLSBDaGFuZ2UgdGhlIEV0aGVybmV0IEFkZHJlc3Mgb2YgdGhlIE5JQworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICogQHA6IHBvaW50ZXIgdG8gYW4gYWRkcmVzcyBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IGF0bHhfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBhdGx4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGFkYXB0ZXItPmh3Lm1hY19hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCWF0bHhfc2V0X21hY19hZGRyKCZhZGFwdGVyLT5odyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bHhfY2hlY2tfZm9yX2xpbmsoc3RydWN0IGF0bHhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUxNiBwaHlfZGF0YSA9IDA7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPmxvY2spOworCWFkYXB0ZXItPnBoeV90aW1lcl9wZW5kaW5nID0gZmFsc2U7CisJYXRseF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKKwlhdGx4X3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5sb2NrKTsKKworCS8qIG5vdGlmeSB1cHBlciBsYXllciBsaW5rIGRvd24gQVNBUCAqLworCWlmICghKHBoeV9kYXRhICYgQk1TUl9MU1RBVFVTKSkgeworCQkvKiBMaW5rIERvd24gKi8KKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJLyogb2xkIGxpbmsgc3RhdGU6IFVwICovCisJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXMgbGluayBpcyBkb3duXG4iLAorCQkJCW5ldGRldi0+bmFtZSk7CisJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gU1BFRURfMDsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCX0KKwl9CisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bGlua19jaGdfdGFzayk7Cit9CisKKy8qCisgKiBhdGx4X3NldF9tdWx0aSAtIE11bHRpY2FzdCBhbmQgUHJvbWlzY3VvdXMgbW9kZSBzZXQKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgc2V0X211bHRpIGVudHJ5IHBvaW50IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgbXVsdGljYXN0IGFkZHJlc3MKKyAqIGxpc3Qgb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZsYWdzIGFyZSB1cGRhdGVkLiAgVGhpcyByb3V0aW5lIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlIGZvciBwcm9wZXIgbXVsdGljYXN0LAorICogcHJvbWlzY3VvdXMgbW9kZSwgYW5kIGFsbC1tdWx0aSBiZWhhdmlvci4KKyAqLworc3RhdGljIHZvaWQgYXRseF9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRseF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYXRseF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7CisJdTMyIHJjdGw7CisJdTMyIGhhc2hfdmFsdWU7CisKKwkvKiBDaGVjayBmb3IgUHJvbWlzY3VvdXMgYW5kIEFsbCBNdWx0aWNhc3QgbW9kZXMgKi8KKwlyY3RsID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfTUFDX0NUUkwpOworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCXJjdGwgfD0gTUFDX0NUUkxfUFJPTUlTX0VOOworCWVsc2UgaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJcmN0bCB8PSBNQUNfQ1RSTF9NQ19BTExfRU47CisJCXJjdGwgJj0gfk1BQ19DVFJMX1BST01JU19FTjsKKwl9IGVsc2UKKwkJcmN0bCAmPSB+KE1BQ19DVFJMX1BST01JU19FTiB8IE1BQ19DVFJMX01DX0FMTF9FTik7CisKKwlpb3dyaXRlMzIocmN0bCwgaHctPmh3X2FkZHIgKyBSRUdfTUFDX0NUUkwpOworCisJLyogY2xlYXIgdGhlIG9sZCBzZXR0aW5ncyBmcm9tIHRoZSBtdWx0aWNhc3QgaGFzaCB0YWJsZSAqLworCWlvd3JpdGUzMigwLCBody0+aHdfYWRkciArIFJFR19SWF9IQVNIX1RBQkxFKTsKKwlpb3dyaXRlMzIoMCwgKGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpICsgKDEgPDwgMikpOworCisJLyogY29tcHV0ZSBtYyBhZGRyZXNzZXMnIGhhc2ggdmFsdWUgLGFuZCBwdXQgaXQgaW50byBoYXNoIHRhYmxlICovCisJZm9yIChtY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jX3B0cjsgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7CisJCWhhc2hfdmFsdWUgPSBhdGx4X2hhc2hfbWNfYWRkcihodywgbWNfcHRyLT5kbWlfYWRkcik7CisJCWF0bHhfaGFzaF9zZXQoaHcsIGhhc2hfdmFsdWUpOworCX0KK30KKworLyoKKyAqIGF0bHhfaXJxX2VuYWJsZSAtIEVuYWJsZSBkZWZhdWx0IGludGVycnVwdCBnZW5lcmF0aW9uIHNldHRpbmdzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgYXRseF9pcnFfZW5hYmxlKHN0cnVjdCBhdGx4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW93cml0ZTMyKElNUl9OT1JNQUxfTUFTSywgYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JTVIpOworCWlvcmVhZDMyKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfSU1SKTsKK30KKworLyoKKyAqIGF0bHhfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgYXRseF9pcnFfZGlzYWJsZShzdHJ1Y3QgYXRseF9hZGFwdGVyICphZGFwdGVyKQoreworCWlvd3JpdGUzMigwLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lNUik7CisJaW9yZWFkMzIoYWRhcHRlci0+aHcuaHdfYWRkciArIFJFR19JTVIpOworCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworfQorCitzdGF0aWMgdm9pZCBhdGx4X2NsZWFyX3BoeV9pbnQoc3RydWN0IGF0bHhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MTYgcGh5X2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CisJYXRseF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCAxOSwgJnBoeV9kYXRhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBhdGx4X2dldF9zdGF0cyAtIEdldCBTeXN0ZW0gTmV0d29yayBTdGF0aXN0aWNzCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLgorICogVGhlIHN0YXRpc3RpY3MgYXJlIGFjdHVhbGx5IHVwZGF0ZWQgZnJvbSB0aGUgdGltZXIgY2FsbGJhY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXRseF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXRseF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gJmFkYXB0ZXItPm5ldF9zdGF0czsKK30KKworLyoKKyAqIGF0bHhfdHhfdGltZW91dCAtIFJlc3BvbmQgdG8gYSBUeCBIYW5nCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGF0bHhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdGx4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKK30KKworLyoKKyAqIGF0bHhfbGlua19jaGdfdGFzayAtIGRlYWwgd2l0aCBsaW5rIGNoYW5nZSBldmVudCBPdXQgb2YgaW50ZXJydXB0IGNvbnRleHQKKyAqLworc3RhdGljIHZvaWQgYXRseF9saW5rX2NoZ190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRseF9hZGFwdGVyICphZGFwdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGx4X2FkYXB0ZXIsIGxpbmtfY2hnX3Rhc2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKKwlhdGx4X2NoZWNrX2xpbmsoYWRhcHRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhdGx4X3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBhdGx4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGN0cmw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworCS8qIGF0bHhfaXJxX2Rpc2FibGUoYWRhcHRlcik7IEZJWE1FOiBjb25maXJtL3JlbW92ZSAqLworCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOworCisJaWYgKGdycCkgeworCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCWN0cmwgPSBpb3JlYWQzMihhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX01BQ19DVFJMKTsKKwkJY3RybCB8PSBNQUNfQ1RSTF9STVZfVkxBTjsKKwkJaW93cml0ZTMyKGN0cmwsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSRUdfTUFDX0NUUkwpOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCWN0cmwgPSBpb3JlYWQzMihhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX01BQ19DVFJMKTsKKwkJY3RybCAmPSB+TUFDX0NUUkxfUk1WX1ZMQU47CisJCWlvd3JpdGUzMihjdHJsLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX01BQ19DVFJMKTsKKwl9CisKKwkvKiBhdGx4X2lycV9lbmFibGUoYWRhcHRlcik7IEZJWE1FICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhdGx4X3Jlc3RvcmVfdmxhbihzdHJ1Y3QgYXRseF9hZGFwdGVyICphZGFwdGVyKQoreworCWF0bHhfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIGFkanVzdCB0aGUKKyAqIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzIHRoYXQgdGhlIGRyaXZlciBjYW4gbWFuYWdlLgorICovCisjZGVmaW5lIEFUTDFfTUFYX05JQyA0CisKKyNkZWZpbmUgT1BUSU9OX1VOU0VUICAgIC0xCisjZGVmaW5lIE9QVElPTl9ESVNBQkxFRCAwCisjZGVmaW5lIE9QVElPTl9FTkFCTEVEICAxCisKKyNkZWZpbmUgQVRMMV9QQVJBTV9JTklUIHsgWzAgLi4uIEFUTDFfTUFYX05JQ10gPSBPUFRJT05fVU5TRVQgfQorCisvKgorICogSW50ZXJydXB0IE1vZGVyYXRlIFRpbWVyIGluIHVuaXRzIG9mIDIgdXMKKyAqCisgKiBWYWxpZCBSYW5nZTogMTAtNjU1MzUKKyAqCisgKiBEZWZhdWx0IFZhbHVlOiAxMDAgKDIwMHVzKQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgaW50X21vZF90aW1lcltBVEwxX01BWF9OSUMrMV0gPSBBVEwxX1BBUkFNX0lOSVQ7CitzdGF0aWMgaW50IG51bV9pbnRfbW9kX3RpbWVyOworbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKGludF9tb2RfdGltZXIsIGludF9tb2RfdGltZXIsIGludCwKKwkmbnVtX2ludF9tb2RfdGltZXIsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kX3RpbWVyLCAiSW50ZXJydXB0IG1vZGVyYXRvciB0aW1lciIpOworCisvKgorICogZmxhc2hfdmVuZG9yCisgKgorICogVmFsaWQgUmFuZ2U6IDAtMgorICoKKyAqIDAgLSBBdG1lbAorICogMSAtIFNTVAorICogMiAtIFNUCisgKgorICogRGVmYXVsdCBWYWx1ZTogMAorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgZmxhc2hfdmVuZG9yW0FUTDFfTUFYX05JQysxXSA9IEFUTDFfUEFSQU1fSU5JVDsKK3N0YXRpYyBpbnQgbnVtX2ZsYXNoX3ZlbmRvcjsKK21vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChmbGFzaF92ZW5kb3IsIGZsYXNoX3ZlbmRvciwgaW50LCAmbnVtX2ZsYXNoX3ZlbmRvciwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZsYXNoX3ZlbmRvciwgIlNQSSBmbGFzaCB2ZW5kb3IiKTsKKworI2RlZmluZSBERUZBVUxUX0lOVF9NT0RfQ05UCTEwMAkvKiAyMDB1cyAqLworI2RlZmluZSBNQVhfSU5UX01PRF9DTlQJCTY1MDAwCisjZGVmaW5lIE1JTl9JTlRfTU9EX0NOVAkJNTAKKworI2RlZmluZSBGTEFTSF9WRU5ET1JfREVGQVVMVAkwCisjZGVmaW5lIEZMQVNIX1ZFTkRPUl9NSU4JMAorI2RlZmluZSBGTEFTSF9WRU5ET1JfTUFYCTIKKworc3RydWN0IGF0bDFfb3B0aW9uIHsKKwllbnVtIHsgZW5hYmxlX29wdGlvbiwgcmFuZ2Vfb3B0aW9uLCBsaXN0X29wdGlvbiB9IHR5cGU7CisJY2hhciAqbmFtZTsKKwljaGFyICplcnI7CisJaW50IGRlZjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CS8qIHJhbmdlX29wdGlvbiBpbmZvICovCisJCQlpbnQgbWluOworCQkJaW50IG1heDsKKwkJfSByOworCQlzdHJ1Y3QgewkvKiBsaXN0X29wdGlvbiBpbmZvICovCisJCQlpbnQgbnI7CisJCQlzdHJ1Y3QgYXRsMV9vcHRfbGlzdCB7CisJCQkJaW50IGk7CisJCQkJY2hhciAqc3RyOworCQkJfSAqcDsKKwkJfSBsOworCX0gYXJnOworfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYXRsMV92YWxpZGF0ZV9vcHRpb24oaW50ICp2YWx1ZSwgc3RydWN0IGF0bDFfb3B0aW9uICpvcHQsCisJc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKCp2YWx1ZSA9PSBPUFRJT05fVU5TRVQpIHsKKwkJKnZhbHVlID0gb3B0LT5kZWY7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAob3B0LT50eXBlKSB7CisJY2FzZSBlbmFibGVfb3B0aW9uOgorCQlzd2l0Y2ggKCp2YWx1ZSkgeworCQljYXNlIE9QVElPTl9FTkFCTEVEOgorCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIGVuYWJsZWRcbiIsIG9wdC0+bmFtZSk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBPUFRJT05fRElTQUJMRUQ6CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgZGlzYWJsZWRcbiIsIG9wdC0+bmFtZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIHJhbmdlX29wdGlvbjoKKwkJaWYgKCp2YWx1ZSA+PSBvcHQtPmFyZy5yLm1pbiAmJiAqdmFsdWUgPD0gb3B0LT5hcmcuci5tYXgpIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyBzZXQgdG8gJWlcbiIsIG9wdC0+bmFtZSwKKwkJCQkqdmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBsaXN0X29wdGlvbjp7CisJCQlpbnQgaTsKKwkJCXN0cnVjdCBhdGwxX29wdF9saXN0ICplbnQ7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBvcHQtPmFyZy5sLm5yOyBpKyspIHsKKwkJCQllbnQgPSAmb3B0LT5hcmcubC5wW2ldOworCQkJCWlmICgqdmFsdWUgPT0gZW50LT5pKSB7CisJCQkJCWlmIChlbnQtPnN0clswXSAhPSAnXDAnKQorCQkJCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzXG4iLAorCQkJCQkJCWVudC0+c3RyKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImludmFsaWQgJXMgc3BlY2lmaWVkICglaSkgJXNcbiIsCisJCW9wdC0+bmFtZSwgKnZhbHVlLCBvcHQtPmVycik7CisJKnZhbHVlID0gb3B0LT5kZWY7CisJcmV0dXJuIC0xOworfQorCisvKgorICogYXRsMV9jaGVja19vcHRpb25zIC0gUmFuZ2UgQ2hlY2tpbmcgZm9yIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIGFsbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyBmb3IgdmFsaWQgdXNlcgorICogaW5wdXQuICBJZiBhbiBpbnZhbGlkIHZhbHVlIGlzIGdpdmVuLCBvciBpZiBubyB1c2VyIHNwZWNpZmllZAorICogdmFsdWUgZXhpc3RzLCBhIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4gIFRoZSBmaW5hbCB2YWx1ZSBpcyBzdG9yZWQKKyAqIGluIGEgdmFyaWFibGUgaW4gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICovCit2b2lkIF9fZGV2aW5pdCBhdGwxX2NoZWNrX29wdGlvbnMoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IGJkID0gYWRhcHRlci0+YmRfbnVtYmVyOworCWlmIChiZCA+PSBBVEwxX01BWF9OSUMpIHsKKwkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAibm8gY29uZmlndXJhdGlvbiBmb3IgYm9hcmQjJWlcbiIsIGJkKTsKKwkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAidXNpbmcgZGVmYXVsdHMgZm9yIGFsbCB2YWx1ZXNcbiIpOworCX0KKwl7CQkJLyogSW50ZXJydXB0IE1vZGVyYXRlIFRpbWVyICovCisJCXN0cnVjdCBhdGwxX29wdGlvbiBvcHQgPSB7CisJCQkudHlwZSA9IHJhbmdlX29wdGlvbiwKKwkJCS5uYW1lID0gIkludGVycnVwdCBNb2RlcmF0b3IgVGltZXIiLAorCQkJLmVyciA9ICJ1c2luZyBkZWZhdWx0IG9mICIKKwkJCQlfX01PRFVMRV9TVFJJTkcoREVGQVVMVF9JTlRfTU9EX0NOVCksCisJCQkuZGVmID0gREVGQVVMVF9JTlRfTU9EX0NOVCwKKwkJCS5hcmcgPSB7LnIgPSB7Lm1pbiA9IE1JTl9JTlRfTU9EX0NOVCwKKwkJCQkJLm1heCA9IE1BWF9JTlRfTU9EX0NOVH0gfQorCQl9OworCQlpbnQgdmFsOworCQlpZiAobnVtX2ludF9tb2RfdGltZXIgPiBiZCkgeworCQkJdmFsID0gaW50X21vZF90aW1lcltiZF07CisJCQlhdGwxX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKKwkJCWFkYXB0ZXItPmltdCA9ICh1MTYpIHZhbDsKKwkJfSBlbHNlCisJCQlhZGFwdGVyLT5pbXQgPSAodTE2KSAob3B0LmRlZik7CisJfQorCisJewkJCS8qIEZsYXNoIFZlbmRvciAqLworCQlzdHJ1Y3QgYXRsMV9vcHRpb24gb3B0ID0geworCQkJLnR5cGUgPSByYW5nZV9vcHRpb24sCisJCQkubmFtZSA9ICJTUEkgRmxhc2ggVmVuZG9yIiwKKwkJCS5lcnIgPSAidXNpbmcgZGVmYXVsdCBvZiAiCisJCQkJX19NT0RVTEVfU1RSSU5HKEZMQVNIX1ZFTkRPUl9ERUZBVUxUKSwKKwkJCS5kZWYgPSBERUZBVUxUX0lOVF9NT0RfQ05ULAorCQkJLmFyZyA9IHsuciA9IHsubWluID0gRkxBU0hfVkVORE9SX01JTiwKKwkJCQkJLm1heCA9IEZMQVNIX1ZFTkRPUl9NQVh9IH0KKwkJfTsKKwkJaW50IHZhbDsKKwkJaWYgKG51bV9mbGFzaF92ZW5kb3IgPiBiZCkgeworCQkJdmFsID0gZmxhc2hfdmVuZG9yW2JkXTsKKwkJCWF0bDFfdmFsaWRhdGVfb3B0aW9uKCZ2YWwsICZvcHQsIHBkZXYpOworCQkJYWRhcHRlci0+aHcuZmxhc2hfdmVuZG9yID0gKHU4KSB2YWw7CisJCX0gZWxzZQorCQkJYWRhcHRlci0+aHcuZmxhc2hfdmVuZG9yID0gKHU4KSAob3B0LmRlZik7CisJfQorfQorCisjZW5kaWYgLyogQVRMWF9DICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bHguaCBiL2RyaXZlcnMvbmV0L2F0bHgvYXRseC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZTdjMDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bHguaApAQCAtMCwwICsxLDUwNiBAQAorLyogYXRseF9ody5oIC0tIGNvbW1vbiBoYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgQXR0YW5zaWMgbmV0d29yayBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA2IEF0dGFuc2ljIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDYgLSAyMDA3IENocmlzIFNub29rIDxjc25vb2tAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodChjKSAyMDA2IEpheSBDbGlidXJuIDxqY2xpYnVybkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQoYykgMjAwNyBBdGhlcm9zIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERlcml2ZWQgZnJvbSBJbnRlbCBlMTAwMCBkcml2ZXIKKyAqIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIEFUTFhfSAorI2RlZmluZSBBVExYX0gKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQVRMWF9EUklWRVJfVkVSU0lPTiAiMi4xLjEiCitNT0RVTEVfQVVUSE9SKCJYaW9uZyBIdWFuZyA8eGlvbmcuaHVhbmdAYXRoZXJvcy5jb20+LCBcCisJQ2hyaXMgU25vb2sgPGNzbm9va0ByZWRoYXQuY29tPiwgSmF5IENsaWJ1cm4gPGpjbGlidXJuQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEFUTFhfRFJJVkVSX1ZFUlNJT04pOworCisjZGVmaW5lIEFUTFhfRVJSX1BIWQkJCTIKKyNkZWZpbmUgQVRMWF9FUlJfUEhZX1NQRUVECQk3CisjZGVmaW5lIEFUTFhfRVJSX1BIWV9SRVMJCTgKKworI2RlZmluZSBTUEVFRF8wCQkJCTB4ZmZmZgorI2RlZmluZSBTUEVFRF8xMAkJCTEwCisjZGVmaW5lIFNQRUVEXzEwMAkJCTEwMAorI2RlZmluZSBTUEVFRF8xMDAwCQkJMTAwMAorI2RlZmluZSBIQUxGX0RVUExFWAkJCTEKKyNkZWZpbmUgRlVMTF9EVVBMRVgJCQkyCisKKyNkZWZpbmUgTUVESUFfVFlQRV9BVVRPX1NFTlNPUgkJMAorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBSRUdfUE1fQ1RSTFNUQVQJCQkweDQ0CisKKyNkZWZpbmUgUkVHX1BDSUVfQ0FQX0xJU1QJCTB4NTgKKworI2RlZmluZSBSRUdfVlBEX0NBUAkJCTB4NkMKKyNkZWZpbmUgVlBEX0NBUF9JRF9NQVNLCQkJMHhGRgorI2RlZmluZSBWUERfQ0FQX0lEX1NISUZUCQkwCisjZGVmaW5lIFZQRF9DQVBfTkVYVF9QVFJfTUFTSwkJMHhGRgorI2RlZmluZSBWUERfQ0FQX05FWFRfUFRSX1NISUZUCQk4CisjZGVmaW5lIFZQRF9DQVBfVlBEX0FERFJfTUFTSwkJMHg3RkZGCisjZGVmaW5lIFZQRF9DQVBfVlBEX0FERFJfU0hJRlQJCTE2CisjZGVmaW5lIFZQRF9DQVBfVlBEX0ZMQUcJCTB4ODAwMDAwMDAKKworI2RlZmluZSBSRUdfVlBEX0RBVEEJCQkweDcwCisKKyNkZWZpbmUgUkVHX1NQSV9GTEFTSF9DVFJMCQkweDIwMAorI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9TVFNfTk9OX1JEWQkweDEKKyNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfU1RTX1dFTgkJMHgyCisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX1NUU19XUEVOCQkweDgwCisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0RFVl9TVFNfTUFTSwkweEZGCisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0RFVl9TVFNfU0hJRlQJMAorI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9JTlNfTUFTSwkJMHg3CisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0lOU19TSElGVAk4CisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX1NUQVJUCQkweDgwMAorI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9FTl9WUEQJCTB4MjAwMAorI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9MRFNUQVJUCQkweDgwMDAKKyNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfQ1NfSElfTUFTSwkweDMKKyNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfQ1NfSElfU0hJRlQJMTYKKyNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfQ1NfSE9MRF9NQVNLCTB4MworI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9DU19IT0xEX1NISUZUCTE4CisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0NMS19MT19NQVNLCTB4MworI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9DTEtfTE9fU0hJRlQJMjAKKyNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfQ0xLX0hJX01BU0sJMHgzCisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX0NMS19ISV9TSElGVAkyMgorI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9DU19TRVRVUF9NQVNLCTB4MworI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9DU19TRVRVUF9TSElGVAkyNAorI2RlZmluZSBTUElfRkxBU0hfQ1RSTF9FUk9NX1BHU1pfTUFTSwkweDMKKyNkZWZpbmUgU1BJX0ZMQVNIX0NUUkxfRVJPTV9QR1NaX1NISUZUCTI2CisjZGVmaW5lIFNQSV9GTEFTSF9DVFJMX1dBSVRfUkVBRFkJMHgxMDAwMDAwMAorCisjZGVmaW5lIFJFR19TUElfQUREUgkJCTB4MjA0CisKKyNkZWZpbmUgUkVHX1NQSV9EQVRBCQkJMHgyMDgKKworI2RlZmluZSBSRUdfU1BJX0ZMQVNIX0NPTkZJRwkJMHgyMEMKKyNkZWZpbmUgU1BJX0ZMQVNIX0NPTkZJR19MRF9BRERSX01BU0sJMHhGRkZGRkYKKyNkZWZpbmUgU1BJX0ZMQVNIX0NPTkZJR19MRF9BRERSX1NISUZUCTAKKyNkZWZpbmUgU1BJX0ZMQVNIX0NPTkZJR19WUERfQUREUl9NQVNLCTB4MworI2RlZmluZSBTUElfRkxBU0hfQ09ORklHX1ZQRF9BRERSX1NISUZUCTI0CisjZGVmaW5lIFNQSV9GTEFTSF9DT05GSUdfTERfRVhJU1QJMHg0MDAwMDAwCisKKyNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9QUk9HUkFNCTB4MjEwCisjZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfU0NfRVJBU0UJMHgyMTEKKyNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9DSElQX0VSQVNFCTB4MjEyCisjZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfUkRJRAkJMHgyMTMKKyNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9XUkVOCQkweDIxNAorI2RlZmluZSBSRUdfU1BJX0ZMQVNIX09QX1JEU1IJCTB4MjE1CisjZGVmaW5lIFJFR19TUElfRkxBU0hfT1BfV1JTUgkJMHgyMTYKKyNkZWZpbmUgUkVHX1NQSV9GTEFTSF9PUF9SRUFECQkweDIxNworCisjZGVmaW5lIFJFR19UV1NJX0NUUkwJCQkweDIxOAorI2RlZmluZSBUV1NJX0NUUkxfTERfT0ZGU0VUX01BU0sJMHhGRgorI2RlZmluZSBUV1NJX0NUUkxfTERfT0ZGU0VUX1NISUZUCTAKKyNkZWZpbmUgVFdTSV9DVFJMX0xEX1NMVl9BRERSX01BU0sJMHg3CisjZGVmaW5lIFRXU0lfQ1RSTF9MRF9TTFZfQUREUl9TSElGVAk4CisjZGVmaW5lIFRXU0lfQ1RSTF9TV19MRFNUQVJUCQkweDgwMAorI2RlZmluZSBUV1NJX0NUUkxfSFdfTERTVEFSVAkJMHgxMDAwCisjZGVmaW5lIFRXU0lfQ1RSTF9TTUJfU0xWX0FERFJfTUFTSwkweDdGCisjZGVmaW5lIFRXU0lfQ1RSTF9TTUJfU0xWX0FERFJfU0hJRlQJMTUKKyNkZWZpbmUgVFdTSV9DVFJMX0xEX0VYSVNUCQkweDQwMDAwMAorI2RlZmluZSBUV1NJX0NUUkxfUkVBRF9GUkVRX1NFTF9NQVNLCTB4MworI2RlZmluZSBUV1NJX0NUUkxfUkVBRF9GUkVRX1NFTF9TSElGVAkyMworI2RlZmluZSBUV1NJX0NUUkxfRlJFUV9TRUxfMTAwSwkJMAorI2RlZmluZSBUV1NJX0NUUkxfRlJFUV9TRUxfMjAwSwkJMQorI2RlZmluZSBUV1NJX0NUUkxfRlJFUV9TRUxfMzAwSwkJMgorI2RlZmluZSBUV1NJX0NUUkxfRlJFUV9TRUxfNDAwSwkJMworI2RlZmluZSBUV1NJX0NUUkxfU01CX1NMVl9BRERSCQkvKiBGSVhNRTogZGVmaW5lIG9yIHJlbW92ZSAqLworI2RlZmluZSBUV1NJX0NUUkxfV1JJVEVfRlJFUV9TRUxfTUFTSwkweDMKKyNkZWZpbmUgVFdTSV9DVFJMX1dSSVRFX0ZSRVFfU0VMX1NISUZUCTI0CisKKyNkZWZpbmUgUkVHX1BDSUVfREVWX01JU0NfQ1RSTAkJCTB4MjFDCisjZGVmaW5lIFBDSUVfREVWX01JU0NfQ1RSTF9FWFRfUElQRQkJMHgyCisjZGVmaW5lIFBDSUVfREVWX01JU0NfQ1RSTF9SRVRSWV9CVUZESVMJCTB4MQorI2RlZmluZSBQQ0lFX0RFVl9NSVNDX0NUUkxfU1BJUk9NX0VYSVNUCQkweDQKKyNkZWZpbmUgUENJRV9ERVZfTUlTQ19DVFJMX1NFUkRFU19FTkRJQU4JMHg4CisjZGVmaW5lIFBDSUVfREVWX01JU0NfQ1RSTF9TRVJERVNfU0VMX0RJTgkweDEwCisKKyNkZWZpbmUgUkVHX1BDSUVfUEhZTUlTQwkJMHgxMDAwCisjZGVmaW5lIFBDSUVfUEhZTUlTQ19GT1JDRV9SQ1ZfREVUCTB4NAorCisjZGVmaW5lIFJFR19QQ0lFX0RMTF9UWF9DVFJMMQkJMHgxMTA0CisjZGVmaW5lIFBDSUVfRExMX1RYX0NUUkwxX1NFTF9OT1JfQ0xLCTB4NDAwCisjZGVmaW5lIFBDSUVfRExMX1RYX0NUUkwxX0RFRgkJMHg1NjgKKworI2RlZmluZSBSRUdfTFRTU01fVEVTVF9NT0RFCQkweDEyRkMKKyNkZWZpbmUgTFRTU01fVEVTVF9NT0RFX0RFRgkJMHg2NTAwCisKKy8qIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19NQVNURVJfQ1RSTAkJCTB4MTQwMAorI2RlZmluZSBNQVNURVJfQ1RSTF9TT0ZUX1JTVAkJMHgxCisjZGVmaW5lIE1BU1RFUl9DVFJMX01USU1FUl9FTgkJMHgyCisjZGVmaW5lIE1BU1RFUl9DVFJMX0lUSU1FUl9FTgkJMHg0CisjZGVmaW5lIE1BU1RFUl9DVFJMX01BTlVBTF9JTlQJCTB4OAorI2RlZmluZSBNQVNURVJfQ1RSTF9SRVZfTlVNX1NISUZUCTE2CisjZGVmaW5lIE1BU1RFUl9DVFJMX1JFVl9OVU1fTUFTSwkweEZGCisjZGVmaW5lIE1BU1RFUl9DVFJMX0RFVl9JRF9TSElGVAkyNAorI2RlZmluZSBNQVNURVJfQ1RSTF9ERVZfSURfTUFTSwkJMHhGRgorCisvKiBUaW1lciBJbml0aWFsIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19NQU5VQUxfVElNRVJfSU5JVAkJMHgxNDA0CisKKy8qIElSUSBNb2RlcmF0b3IgVGltZXIgSW5pdGlhbCBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfSVJRX01PRFVfVElNRVJfSU5JVAkJMHgxNDA4CisKKyNkZWZpbmUgUkVHX1BIWV9FTkFCTEUJCQkweDE0MEMKKworLyogSVJRIEFudGktTG9zdCBUaW1lciBJbml0aWFsIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19DTUJESVNETUFfVElNRVIJCTB4MTQwRQorCisvKiBCbG9jayBJRExFIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfSURMRV9TVEFUVVMJCQkweDE0MTAKKworLyogTURJTyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19NRElPX0NUUkwJCQkweDE0MTQKKyNkZWZpbmUgTURJT19EQVRBX01BU0sJCQkweEZGRkYKKyNkZWZpbmUgTURJT19EQVRBX1NISUZUCQkJMAorI2RlZmluZSBNRElPX1JFR19BRERSX01BU0sJCTB4MUYKKyNkZWZpbmUgTURJT19SRUdfQUREUl9TSElGVAkJMTYKKyNkZWZpbmUgTURJT19SVwkJCQkweDIwMDAwMAorI2RlZmluZSBNRElPX1NVUF9QUkVBTUJMRQkJMHg0MDAwMDAKKyNkZWZpbmUgTURJT19TVEFSVAkJCTB4ODAwMDAwCisjZGVmaW5lIE1ESU9fQ0xLX1NFTF9TSElGVAkJMjQKKyNkZWZpbmUgTURJT19DTEtfMjVfNAkJCTAKKyNkZWZpbmUgTURJT19DTEtfMjVfNgkJCTIKKyNkZWZpbmUgTURJT19DTEtfMjVfOAkJCTMKKyNkZWZpbmUgTURJT19DTEtfMjVfMTAJCQk0CisjZGVmaW5lIE1ESU9fQ0xLXzI1XzE0CQkJNQorI2RlZmluZSBNRElPX0NMS18yNV8yMAkJCTYKKyNkZWZpbmUgTURJT19DTEtfMjVfMjgJCQk3CisjZGVmaW5lIE1ESU9fQlVTWQkJCTB4ODAwMDAwMAorCisvKiBNSUkgUEhZIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfUEhZX1NUQVRVUwkJCTB4MTQxOAorCisvKiBCSVNUIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcjAgKGZvciB0aGUgUGFja2V0IE1lbW9yeSkgKi8KKyNkZWZpbmUgUkVHX0JJU1QwX0NUUkwJCQkweDE0MUMKKyNkZWZpbmUgQklTVDBfTk9XCQkJMHgxCisjZGVmaW5lIEJJU1QwX1NSQU1fRkFJTAkJCTB4MgorI2RlZmluZSBCSVNUMF9GVVNFX0ZMQUcJCQkweDQKKyNkZWZpbmUgUkVHX0JJU1QxX0NUUkwJCQkweDE0MjAKKyNkZWZpbmUgQklTVDFfTk9XCQkJMHgxCisjZGVmaW5lIEJJU1QxX1NSQU1fRkFJTAkJCTB4MgorI2RlZmluZSBCSVNUMV9GVVNFX0ZMQUcJCQkweDQKKworLyogU2VyRGVzIExvY2sgRGV0ZWN0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfU0VSREVTX0xPQ0sJCQkweDE0MjQKKyNkZWZpbmUgU0VSREVTX0xPQ0tfREVURUNUCQkxCisjZGVmaW5lIFNFUkRFU19MT0NLX0RFVEVDVF9FTgkJMgorCisvKiBNQUMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTUFDX0NUUkwJCQkweDE0ODAKKyNkZWZpbmUgTUFDX0NUUkxfVFhfRU4JCQkxCisjZGVmaW5lIE1BQ19DVFJMX1JYX0VOCQkJMgorI2RlZmluZSBNQUNfQ1RSTF9UWF9GTE9XCQk0CisjZGVmaW5lIE1BQ19DVFJMX1JYX0ZMT1cJCTgKKyNkZWZpbmUgTUFDX0NUUkxfTE9PUEJBQ0sJCTB4MTAKKyNkZWZpbmUgTUFDX0NUUkxfRFVQTFgJCQkweDIwCisjZGVmaW5lIE1BQ19DVFJMX0FERF9DUkMJCTB4NDAKKyNkZWZpbmUgTUFDX0NUUkxfUEFECQkJMHg4MAorI2RlZmluZSBNQUNfQ1RSTF9MRU5DSEsJCQkweDEwMAorI2RlZmluZSBNQUNfQ1RSTF9IVUdFX0VOCQkweDIwMAorI2RlZmluZSBNQUNfQ1RSTF9QUk1MRU5fU0hJRlQJCTEwCisjZGVmaW5lIE1BQ19DVFJMX1BSTUxFTl9NQVNLCQkweEYKKyNkZWZpbmUgTUFDX0NUUkxfUk1WX1ZMQU4JCTB4NDAwMAorI2RlZmluZSBNQUNfQ1RSTF9QUk9NSVNfRU4JCTB4ODAwMAorI2RlZmluZSBNQUNfQ1RSTF9NQ19BTExfRU4JCTB4MjAwMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9CQ19FTgkJCTB4NDAwMDAwMAorCisvKiBNQUMgSVBHL0lGRyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19NQUNfSVBHX0lGRwkJCTB4MTQ4NAorI2RlZmluZSBNQUNfSVBHX0lGR19JUEdUX1NISUZUCQkwCisjZGVmaW5lIE1BQ19JUEdfSUZHX0lQR1RfTUFTSwkJMHg3RgorI2RlZmluZSBNQUNfSVBHX0lGR19NSUZHX1NISUZUCQk4CisjZGVmaW5lIE1BQ19JUEdfSUZHX01JRkdfTUFTSwkJMHhGRgorI2RlZmluZSBNQUNfSVBHX0lGR19JUEdSMV9TSElGVAkJMTYKKyNkZWZpbmUgTUFDX0lQR19JRkdfSVBHUjFfTUFTSwkJMHg3RgorI2RlZmluZSBNQUNfSVBHX0lGR19JUEdSMl9TSElGVAkJMjQKKyNkZWZpbmUgTUFDX0lQR19JRkdfSVBHUjJfTUFTSwkJMHg3RgorCisvKiBNQUMgU1RBVElPTiBBRERSRVNTICovCisjZGVmaW5lIFJFR19NQUNfU1RBX0FERFIJCTB4MTQ4OAorCisvKiBIYXNoIHRhYmxlIGZvciBtdWx0aWNhc3QgYWRkcmVzcyAqLworI2RlZmluZSBSRUdfUlhfSEFTSF9UQUJMRQkJMHgxNDkwCisKKy8qIE1BQyBIYWxmLUR1cGxleCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19NQUNfSEFMRl9EVVBMWF9DVFJMCQkJMHgxNDk4CisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfTENPTF9TSElGVAkJMAorI2RlZmluZSBNQUNfSEFMRl9EVVBMWF9DVFJMX0xDT0xfTUFTSwkJMHgzRkYKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9TSElGVAkJMTIKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9SRVRSWV9NQVNLCQkweEYKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9FWENfREVGX0VOCQkweDEwMDAwCisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfTk9fQkFDS19DCQkweDIwMDAwCisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfTk9fQkFDS19QCQkweDQwMDAwCisjZGVmaW5lIE1BQ19IQUxGX0RVUExYX0NUUkxfQUJFQkUJCTB4ODAwMDAKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9BQkVCVF9TSElGVAkJMjAKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9BQkVCVF9NQVNLCQkweEYKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfU0hJRlQJMjQKKyNkZWZpbmUgTUFDX0hBTEZfRFVQTFhfQ1RSTF9KQU1JUEdfTUFTSwkJMHhGCisKKy8qIE1heGltdW0gRnJhbWUgTGVuZ3RoIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX01UVQkJCQkweDE0OUMKKworLyogV2FrZS1Pbi1MYW4gY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSRUdfV09MX0NUUkwJCQkweDE0QTAKKyNkZWZpbmUgV09MX1BBVFRFUk5fRU4JCQkweDEKKyNkZWZpbmUgV09MX1BBVFRFUk5fUE1FX0VOCQkweDIKKyNkZWZpbmUgV09MX01BR0lDX0VOCQkJMHg0CisjZGVmaW5lIFdPTF9NQUdJQ19QTUVfRU4JCTB4OAorI2RlZmluZSBXT0xfTElOS19DSEdfRU4JCQkweDEwCisjZGVmaW5lIFdPTF9MSU5LX0NIR19QTUVfRU4JCTB4MjAKKyNkZWZpbmUgV09MX1BBVFRFUk5fU1QJCQkweDEwMAorI2RlZmluZSBXT0xfTUFHSUNfU1QJCQkweDIwMAorI2RlZmluZSBXT0xfTElOS0NIR19TVAkJCTB4NDAwCisjZGVmaW5lIFdPTF9QVDBfRU4JCQkweDEwMDAwCisjZGVmaW5lIFdPTF9QVDFfRU4JCQkweDIwMDAwCisjZGVmaW5lIFdPTF9QVDJfRU4JCQkweDQwMDAwCisjZGVmaW5lIFdPTF9QVDNfRU4JCQkweDgwMDAwCisjZGVmaW5lIFdPTF9QVDRfRU4JCQkweDEwMDAwMAorI2RlZmluZSBXT0xfUFQwX01BVENICQkJMHgxMDAwMDAwCisjZGVmaW5lIFdPTF9QVDFfTUFUQ0gJCQkweDIwMDAwMDAKKyNkZWZpbmUgV09MX1BUMl9NQVRDSAkJCTB4NDAwMDAwMAorI2RlZmluZSBXT0xfUFQzX01BVENICQkJMHg4MDAwMDAwCisjZGVmaW5lIFdPTF9QVDRfTUFUQ0gJCQkweDEwMDAwMDAwCisKKy8qIEludGVybmFsIFNSQU0gUGFydGl0aW9uIFJlZ2lzdGVyLCBoaWdoIDMyIGJpdHMgKi8KKyNkZWZpbmUgUkVHX1NSQU1fUkZEX0FERFIJCTB4MTUwMAorCisvKiBEZXNjcmlwdG9yIENvbnRyb2wgcmVnaXN0ZXIsIGhpZ2ggMzIgYml0cyAqLworI2RlZmluZSBSRUdfREVTQ19CQVNFX0FERFJfSEkJCTB4MTU0MAorCisvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19JU1IJCQkJMHgxNjAwCisjZGVmaW5lIElTUl9VUl9ERVRFQ1RFRAkJCTB4MTAwMDAwMAorI2RlZmluZSBJU1JfRkVSUl9ERVRFQ1RFRAkJMHgyMDAwMDAwCisjZGVmaW5lIElTUl9ORkVSUl9ERVRFQ1RFRAkJMHg0MDAwMDAwCisjZGVmaW5lIElTUl9DRVJSX0RFVEVDVEVECQkweDgwMDAwMDAKKyNkZWZpbmUgSVNSX1BIWV9MSU5LRE9XTgkJMHgxMDAwMDAwMAorI2RlZmluZSBJU1JfRElTX0lOVAkJCTB4ODAwMDAwMDAKKworLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0lNUgkJCQkweDE2MDQKKworI2RlZmluZSBSRUdfUkZEX1JSRF9JRFgJCQkweDE4MDAKKyNkZWZpbmUgUkVHX1RQRF9JRFgJCQkweDE4MDQKKworLyogTUlJIGRlZmluaXRpb25zICovCisKKy8qIFBIWSBDb21tb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0FUTFhfQ1IJCQkweDA5CisjZGVmaW5lIE1JSV9BVExYX1NSCQkJMHgwQQorI2RlZmluZSBNSUlfQVRMWF9FU1IJCQkweDBGCisjZGVmaW5lIE1JSV9BVExYX1BTQ1IJCQkweDEwCisjZGVmaW5lIE1JSV9BVExYX1BTU1IJCQkweDExCisKKy8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9DUl9TUEVFRF9TRUxFQ1RfTVNCCQkweDAwNDAJLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsCisJCQkJCQkgKiAwMD0xMAorCQkJCQkJICovCisjZGVmaW5lIE1JSV9DUl9DT0xMX1RFU1RfRU5BQkxFCQkweDAwODAJLyogQ29sbGlzaW9uIHRlc3QgZW5hYmxlICovCisjZGVmaW5lIE1JSV9DUl9GVUxMX0RVUExFWAkJMHgwMTAwCS8qIEZEWCA9MSwgaGFsZiBkdXBsZXggPTAgKi8KKyNkZWZpbmUgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUcJCTB4MDIwMAkvKiBSZXN0YXJ0IGF1dG8gbmVnb3RpYXRpb24gKi8KKyNkZWZpbmUgTUlJX0NSX0lTT0xBVEUJCQkweDA0MDAJLyogSXNvbGF0ZSBQSFkgZnJvbSBNSUkgKi8KKyNkZWZpbmUgTUlJX0NSX1BPV0VSX0RPV04JCTB4MDgwMAkvKiBQb3dlciBkb3duICovCisjZGVmaW5lIE1JSV9DUl9BVVRPX05FR19FTgkJMHgxMDAwCS8qIEF1dG8gTmVnIEVuYWJsZSAqLworI2RlZmluZSBNSUlfQ1JfU1BFRURfU0VMRUNUX0xTQgkJMHgyMDAwCS8qIGJpdHMgNiwxMzogMTA9MTAwMCwgMDE9MTAwLAorCQkJCQkJICogMDA9MTAKKwkJCQkJCSAqLworI2RlZmluZSBNSUlfQ1JfTE9PUEJBQ0sJCQkweDQwMDAJLyogMCA9IG5vcm1hbCwgMSA9IGxvb3BiYWNrICovCisjZGVmaW5lIE1JSV9DUl9SRVNFVAkJCTB4ODAwMAkvKiAwID0gbm9ybWFsLCAxID0gUEhZIHJlc2V0ICovCisjZGVmaW5lIE1JSV9DUl9TUEVFRF9NQVNLCQkweDIwNDAKKyNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwMDAJCTB4MDA0MAorI2RlZmluZSBNSUlfQ1JfU1BFRURfMTAwCQkweDIwMDAKKyNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwCQkJMHgwMDAwCisKKy8qIFBIWSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX1NSX0VYVEVOREVEX0NBUFMJCTB4MDAwMQkvKiBFeHQgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIE1JSV9TUl9KQUJCRVJfREVURUNUCQkweDAwMDIJLyogSmFiYmVyIERldGVjdGVkICovCisjZGVmaW5lIE1JSV9TUl9MSU5LX1NUQVRVUwkJMHgwMDA0CS8qIExpbmsgU3RhdHVzIDEgPSBsaW5rICovCisjZGVmaW5lIE1JSV9TUl9BVVRPTkVHX0NBUFMJCTB4MDAwOAkvKiBBdXRvIE5lZyBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9TUl9SRU1PVEVfRkFVTFQJCTB4MDAxMAkvKiBSZW1vdGUgRmF1bHQgRGV0ZWN0ICovCisjZGVmaW5lIE1JSV9TUl9BVVRPTkVHX0NPTVBMRVRFCQkweDAwMjAJLyogQXV0byBOZWcgQ29tcGxldGUgKi8KKyNkZWZpbmUgTUlJX1NSX1BSRUFNQkxFX1NVUFBSRVNTCTB4MDA0MAkvKiBQcmVhbWJsZSBtYXkgYmUgc3VwcHJlc3NlZCAqLworI2RlZmluZSBNSUlfU1JfRVhURU5ERURfU1RBVFVTCQkweDAxMDAJLyogRXh0IHN0YXQgaW5mbyBpbiBSZWcgMHgwRiAqLworI2RlZmluZSBNSUlfU1JfMTAwVDJfSERfQ0FQUwkJMHgwMjAwCS8qIDEwMFQyIEhhbGYgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX1NSXzEwMFQyX0ZEX0NBUFMJCTB4MDQwMAkvKiAxMDBUMiBGdWxsIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9TUl8xMFRfSERfQ0FQUwkJMHgwODAwCS8qIDEwVCAgIEhhbGYgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX1NSXzEwVF9GRF9DQVBTCQkweDEwMDAJLyogMTBUICAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwWF9IRF9DQVBTCQkweDIwMDAJLyogMTAwWCAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwWF9GRF9DQVBTCQkweDQwMDAJLyogMTAwWCAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwVDRfQ0FQUwkJMHg4MDAwCS8qIDEwMFQ0IENhcGFibGUgKi8KKworLyogTGluayBwYXJ0bmVyIGFiaWxpdHkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0xQQV9TTENUCQkJMHgwMDFmCS8qIFNhbWUgYXMgYWR2ZXJ0aXNlIHNlbGVjdG9yICovCisjZGVmaW5lIE1JSV9MUEFfMTBIQUxGCQkJMHgwMDIwCS8qIENhbiBkbyAxMG1icHMgaGFsZi1kdXBsZXggKi8KKyNkZWZpbmUgTUlJX0xQQV8xMEZVTEwJCQkweDAwNDAJLyogQ2FuIGRvIDEwbWJwcyBmdWxsLWR1cGxleCAqLworI2RlZmluZSBNSUlfTFBBXzEwMEhBTEYJCQkweDAwODAJLyogQ2FuIGRvIDEwMG1icHMgaGFsZi1kdXBsZXggKi8KKyNkZWZpbmUgTUlJX0xQQV8xMDBGVUxMCQkJMHgwMTAwCS8qIENhbiBkbyAxMDBtYnBzIGZ1bGwtZHVwbGV4ICovCisjZGVmaW5lIE1JSV9MUEFfMTAwQkFTRTQJCTB4MDIwMAkvKiAxMDBCQVNFLVQ0ICovCisjZGVmaW5lIE1JSV9MUEFfUEFVU0UJCQkweDA0MDAJLyogUEFVU0UgKi8KKyNkZWZpbmUgTUlJX0xQQV9BU1lQQVVTRQkJMHgwODAwCS8qIEFzeW1tZXRyaWNhbCBQQVVTRSAqLworI2RlZmluZSBNSUlfTFBBX1JGQVVMVAkJCTB4MjAwMAkvKiBMaW5rIHBhcnRuZXIgZmF1bHRlZCAqLworI2RlZmluZSBNSUlfTFBBX0xQQUNLCQkJMHg0MDAwCS8qIExpbmsgcGFydG5lciBhY2tlZCB1cyAqLworI2RlZmluZSBNSUlfTFBBX05QQUdFCQkJMHg4MDAwCS8qIE5leHQgcGFnZSBiaXQgKi8KKworLyogQXV0b25lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9BUl9TRUxFQ1RPUl9GSUVMRAkJMHgwMDAxCS8qIElFRUUgODAyLjMgQ1NNQS9DRCAqLworI2RlZmluZSBNSUlfQVJfMTBUX0hEX0NBUFMJCTB4MDAyMAkvKiAxMFQgICBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9BUl8xMFRfRkRfQ0FQUwkJMHgwMDQwCS8qIDEwVCAgIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FSXzEwMFRYX0hEX0NBUFMJCTB4MDA4MAkvKiAxMDBUWCBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9BUl8xMDBUWF9GRF9DQVBTCQkweDAxMDAJLyogMTAwVFggRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfQVJfMTAwVDRfQ0FQUwkJMHgwMjAwCS8qIDEwMFQ0IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FSX1BBVVNFCQkJMHgwNDAwCS8qIFBhdXNlIG9wZXJhdGlvbiBkZXNpcmVkICovCisjZGVmaW5lIE1JSV9BUl9BU01fRElSCQkJMHgwODAwCS8qIEFzeW1tZXRyaWMgUGF1c2UgRGlyIGJpdCAqLworI2RlZmluZSBNSUlfQVJfUkVNT1RFX0ZBVUxUCQkweDIwMDAJLyogUmVtb3RlIEZhdWx0IGRldGVjdGVkICovCisjZGVmaW5lIE1JSV9BUl9ORVhUX1BBR0UJCTB4ODAwMAkvKiBOZXh0IFBhZ2UgYWJpbGl0eSBzdXBwb3J0ICovCisjZGVmaW5lIE1JSV9BUl9TUEVFRF9NQVNLCQkweDAxRTAKKyNkZWZpbmUgTUlJX0FSX0RFRkFVTFRfQ0FQX01BU0sJCTB4MERFMAorCisvKiAxMDAwQkFTRS1UIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0FUTFhfQ1JfMTAwMFRfSERfQ0FQUwkweDAxMDAJLyogQWR2IDEwMDBUIEhEIGNhcCAqLworI2RlZmluZSBNSUlfQVRMWF9DUl8xMDAwVF9GRF9DQVBTCTB4MDIwMAkvKiBBZHYgMTAwMFQgRkQgY2FwICovCisjZGVmaW5lIE1JSV9BVExYX0NSXzEwMDBUX1JFUEVBVEVSX0RURQkweDA0MDAJLyogMT1SZXBlYXRlci9zd2l0Y2ggZGV2aWNlLAorCQkJCQkJICogMD1EVEUgZGV2aWNlICovCisjZGVmaW5lIE1JSV9BVExYX0NSXzEwMDBUX01TX1ZBTFVFCTB4MDgwMAkvKiAxPUNvbmZpZyBQSFkgYXMgTWFzdGVyLAorCQkJCQkJICogMD1Db25maWd1cmUgUEhZIGFzIFNsYXZlICovCisjZGVmaW5lIE1JSV9BVExYX0NSXzEwMDBUX01TX0VOQUJMRQkweDEwMDAJLyogMT1NYW4gTWFzdGVyL1NsYXZlIGNvbmZpZywKKwkJCQkJCSAqIDA9QXV0byBNYXN0ZXIvU2xhdmUgY29uZmlnCisJCQkJCQkgKi8KKyNkZWZpbmUgTUlJX0FUTFhfQ1JfMTAwMFRfVEVTVF9NT0RFX05PUk1BTAkweDAwMDAJLyogTm9ybWFsIE9wZXJhdGlvbiAqLworI2RlZmluZSBNSUlfQVRMWF9DUl8xMDAwVF9URVNUX01PREVfMQkweDIwMDAJLyogVHJhbnNtaXQgV2F2ZWZvcm0gdGVzdCAqLworI2RlZmluZSBNSUlfQVRMWF9DUl8xMDAwVF9URVNUX01PREVfMgkweDQwMDAJLyogTWFzdGVyIFhtaXQgSml0dGVyIHRlc3QgKi8KKyNkZWZpbmUgTUlJX0FUTFhfQ1JfMTAwMFRfVEVTVF9NT0RFXzMJMHg2MDAwCS8qIFNsYXZlIFhtaXQgSml0dGVyIHRlc3QgKi8KKyNkZWZpbmUgTUlJX0FUTFhfQ1JfMTAwMFRfVEVTVF9NT0RFXzQJMHg4MDAwCS8qIFhtaXR0ZXIgRGlzdG9ydGlvbiB0ZXN0ICovCisjZGVmaW5lIE1JSV9BVExYX0NSXzEwMDBUX1NQRUVEX01BU0sJMHgwMzAwCisjZGVmaW5lIE1JSV9BVExYX0NSXzEwMDBUX0RFRkFVTFRfQ0FQX01BU0sJMHgwMzAwCisKKy8qIDEwMDBCQVNFLVQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9BVExYX1NSXzEwMDBUX0xQX0hEX0NBUFMJMHgwNDAwCS8qIExQIGlzIDEwMDBUIEhEIGNhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FUTFhfU1JfMTAwMFRfTFBfRkRfQ0FQUwkweDA4MDAJLyogTFAgaXMgMTAwMFQgRkQgY2FwYWJsZSAqLworI2RlZmluZSBNSUlfQVRMWF9TUl8xMDAwVF9SRU1PVEVfUlhfU1RBVFVTCTB4MTAwMAkvKiBSZW1vdGUgcmVjZWl2ZXIgT0sgKi8KKyNkZWZpbmUgTUlJX0FUTFhfU1JfMTAwMFRfTE9DQUxfUlhfU1RBVFVTCTB4MjAwMAkvKiBMb2NhbCByZWNlaXZlciBPSyAqLworI2RlZmluZSBNSUlfQVRMWF9TUl8xMDAwVF9NU19DT05GSUdfUkVTCQkweDQwMDAJLyogMT1Mb2NhbCBUWCBpcyBNYXN0ZXIKKwkJCQkJCQkgKiAwPVNsYXZlCisJCQkJCQkJICovCisjZGVmaW5lIE1JSV9BVExYX1NSXzEwMDBUX01TX0NPTkZJR19GQVVMVAkweDgwMDAJLyogTWFzdGVyL1NsYXZlIGNvbmZpZworCQkJCQkJCSAqIGZhdWx0ICovCisjZGVmaW5lIE1JSV9BVExYX1NSXzEwMDBUX1JFTU9URV9SWF9TVEFUVVNfU0hJRlQJMTIKKyNkZWZpbmUgTUlJX0FUTFhfU1JfMTAwMFRfTE9DQUxfUlhfU1RBVFVTX1NISUZUCQkxMworCisvKiBFeHRlbmRlZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0FUTFhfRVNSXzEwMDBUX0hEX0NBUFMJMHgxMDAwCS8qIDEwMDBUIEhEIGNhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FUTFhfRVNSXzEwMDBUX0ZEX0NBUFMJMHgyMDAwCS8qIDEwMDBUIEZEIGNhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FUTFhfRVNSXzEwMDBYX0hEX0NBUFMJMHg0MDAwCS8qIDEwMDBYIEhEIGNhcGFibGUgKi8KKyNkZWZpbmUgTUlJX0FUTFhfRVNSXzEwMDBYX0ZEX0NBUFMJMHg4MDAwCS8qIDEwMDBYIEZEIGNhcGFibGUgKi8KKworLyogQVRMWCBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQVRMWF9QU0NSX0pBQkJFUl9ESVNBQkxFCTB4MDAwMQkvKiAxPUphYmJlciBGdW5jIGRpc2FibGVkICovCisjZGVmaW5lIE1JSV9BVExYX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUwJMHgwMDAyCS8qIDE9UG9sYXJpdHkgUmV2ZXJzYWwgZW5ibGQgKi8KKyNkZWZpbmUgTUlJX0FUTFhfUFNDUl9TUUVfVEVTVAkJMHgwMDA0CS8qIDE9U1FFIFRlc3QgZW5hYmxlZCAqLworI2RlZmluZSBNSUlfQVRMWF9QU0NSX01BQ19QT1dFUkRPV04JMHgwMDA4CisjZGVmaW5lIE1JSV9BVExYX1BTQ1JfQ0xLMTI1X0RJU0FCTEUJMHgwMDEwCS8qIDE9Q0xLMTI1IGxvdworCQkJCQkJICogMD1DTEsxMjUgdG9nZ2xpbmcKKwkJCQkJCSAqLworI2RlZmluZSBNSUlfQVRMWF9QU0NSX01ESV9NQU5VQUxfTU9ERQkweDAwMDAJLyogTURJIENyb3Nzb3ZlciBNb2RlIGJpdHMgNjo1LAorCQkJCQkJICogTWFudWFsIE1ESSBjb25maWd1cmF0aW9uCisJCQkJCQkgKi8KKyNkZWZpbmUgTUlJX0FUTFhfUFNDUl9NRElYX01BTlVBTF9NT0RFCTB4MDAyMAkvKiBNYW51YWwgTURJWCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1JSV9BVExYX1BTQ1JfQVVUT19YXzEwMDBUCTB4MDA0MAkvKiAxMDAwQkFTRS1UOiBBdXRvIGNyb3Nzb3ZlcgorCQkJCQkJICogMTAwQkFTRS1UWC8xMEJBU0UtVDogTURJCisJCQkJCQkgKiBNb2RlICovCisjZGVmaW5lIE1JSV9BVExYX1BTQ1JfQVVUT19YX01PREUJMHgwMDYwCS8qIEF1dG8gY3Jvc3NvdmVyIGVuYWJsZWQKKwkJCQkJCSAqIGFsbCBzcGVlZHMuCisJCQkJCQkgKi8KKyNkZWZpbmUgTUlJX0FUTFhfUFNDUl8xMEJUX0VYVF9ESVNUX0VOQUJMRQkweDAwODAJLyogMT1FbmFibGUgRXh0ZW5kZWQKKwkJCQkJCQkgKiAxMEJBU0UtVCBkaXN0YW5jZQorCQkJCQkJCSAqIChMb3dlciAxMEJBU0UtVCBSWAorCQkJCQkJCSAqIFRocmVzaG9sZCkKKwkJCQkJCQkgKiAwPU5vcm1hbCAxMEJBU0UtVCBSWAorCQkJCQkJCSAqIFRocmVzaG9sZAorCQkJCQkJCSAqLworI2RlZmluZSBNSUlfQVRMWF9QU0NSX01JSV81QklUX0VOQUJMRQkweDAxMDAJLyogMT01LUJpdCBpbnRlcmZhY2UgaW4KKwkJCQkJCSAqIDEwMEJBU0UtVFgKKwkJCQkJCSAqIDA9TUlJIGludGVyZmFjZSBpbgorCQkJCQkJICogMTAwQkFTRS1UWAorCQkJCQkJICovCisjZGVmaW5lIE1JSV9BVExYX1BTQ1JfU0NSQU1CTEVSX0RJU0FCTEUJMHgwMjAwCS8qIDE9U2NyYW1ibGVyIGRzYmwgKi8KKyNkZWZpbmUgTUlJX0FUTFhfUFNDUl9GT1JDRV9MSU5LX0dPT0QJMHgwNDAwCS8qIDE9Rm9yY2UgbGluayBnb29kICovCisjZGVmaW5lIE1JSV9BVExYX1BTQ1JfQVNTRVJUX0NSU19PTl9UWAkweDA4MDAJLyogMT1Bc3NlcnQgQ1JTIG9uIFRyYW5zbWl0ICovCisjZGVmaW5lIE1JSV9BVExYX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUxfU0hJRlQJCTEKKyNkZWZpbmUgTUlJX0FUTFhfUFNDUl9BVVRPX1hfTU9ERV9TSElGVAkJCTUKKyNkZWZpbmUgTUlJX0FUTFhfUFNDUl8xMEJUX0VYVF9ESVNUX0VOQUJMRV9TSElGVAk3CisKKy8qIEFUTFggUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQVRMWF9QU1NSX1NQRF9EUExYX1JFU09MVkVECTB4MDgwMAkvKiAxPVNwZWVkICYgRHVwbGV4IHJlc29sdmVkICovCisjZGVmaW5lIE1JSV9BVExYX1BTU1JfRFBMWAkJMHgyMDAwCS8qIDE9RHVwbGV4IDA9SGFsZiBEdXBsZXggKi8KKyNkZWZpbmUgTUlJX0FUTFhfUFNTUl9TUEVFRAkJMHhDMDAwCS8qIFNwZWVkLCBiaXRzIDE0OjE1ICovCisjZGVmaW5lIE1JSV9BVExYX1BTU1JfMTBNQlMJCTB4MDAwMAkvKiAwMD0xME1icyAqLworI2RlZmluZSBNSUlfQVRMWF9QU1NSXzEwME1CUwkJMHg0MDAwCS8qIDAxPTEwME1icyAqLworI2RlZmluZSBNSUlfQVRMWF9QU1NSXzEwMDBNQlMJCTB4ODAwMAkvKiAxMD0xMDAwTWJzICovCisKKy8qIFBDSSBDb21tYW5kIFJlZ2lzdGVyIEJpdCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBQQ0lfUkVHX0NPTU1BTkQJCQkweDA0CS8qIFBDSSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIENNRF9JT19TUEFDRQkJCTB4MDAwMQorI2RlZmluZSBDTURfTUVNT1JZX1NQQUNFCQkweDAwMDIKKyNkZWZpbmUgQ01EX0JVU19NQVNURVIJCQkweDAwMDQKKworLyogV2FrZSBVcCBGaWx0ZXIgQ29udHJvbCAqLworI2RlZmluZSBBVExYX1dVRkNfTE5LQwkweDAwMDAwMDAxCS8qIExpbmsgU3RhdHVzIENoYW5nZSBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEFUTFhfV1VGQ19NQUcJMHgwMDAwMDAwMgkvKiBNYWdpYyBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBBVExYX1dVRkNfRVgJMHgwMDAwMDAwNAkvKiBEaXJlY3RlZCBFeGFjdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEFUTFhfV1VGQ19NQwkweDAwMDAwMDA4CS8qIE11bHRpY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEFUTFhfV1VGQ19CQwkweDAwMDAwMDEwCS8qIEJyb2FkY2FzdCBXYWtldXAgRW5hYmxlICovCisKKyNkZWZpbmUgQURWRVJUSVNFXzEwX0hBTEYJCTB4MDAwMQorI2RlZmluZSBBRFZFUlRJU0VfMTBfRlVMTAkJMHgwMDAyCisjZGVmaW5lIEFEVkVSVElTRV8xMDBfSEFMRgkJMHgwMDA0CisjZGVmaW5lIEFEVkVSVElTRV8xMDBfRlVMTAkJMHgwMDA4CisjZGVmaW5lIEFEVkVSVElTRV8xMDAwX0hBTEYJCTB4MDAxMAorI2RlZmluZSBBRFZFUlRJU0VfMTAwMF9GVUxMCQkweDAwMjAKKyNkZWZpbmUgQVVUT05FR19BRFZFUlRJU0VfMTBfMTAwX0FMTAkweDAwMEYJLyogQWxsIDEwLzEwMCBzcGVlZHMgKi8KKyNkZWZpbmUgQVVUT05FR19BRFZFUlRJU0VfMTBfQUxMCTB4MDAwMwkvKiAxME1icHMgRnVsbCAmIEhhbGYgc3BlZWRzICovCisKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX1RJTUUJCTQ1CS8qIDQuNSBTZWNvbmRzICovCisjZGVmaW5lIFBIWV9GT1JDRV9USU1FCQkJMjAJLyogMi4wIFNlY29uZHMgKi8KKworLyogRm9yIGNoZWNrc3VtbWluZywgdGhlIHN1bSBvZiBhbGwgd29yZHMgaW4gdGhlIEVFUFJPTSBzaG91bGQgZXF1YWwgMHhCQUJBICovCisjZGVmaW5lIEVFUFJPTV9TVU0JCQkweEJBQkEKKyNkZWZpbmUgTk9ERV9BRERSRVNTX1NJWkUJCTYKKworc3RydWN0IGF0bHhfc3BpX2ZsYXNoX2RldiB7CisJY29uc3QgY2hhciAqbWFudV9uYW1lOwkvKiBtYW51ZmFjdHVyZXIgaWQgKi8KKwkvKiBvcC1jb2RlICovCisJdTggY21kX3dyc3I7CisJdTggY21kX3JlYWQ7CisJdTggY21kX3Byb2dyYW07CisJdTggY21kX3dyZW47CisJdTggY21kX3dyZGk7CisJdTggY21kX3Jkc3I7CisJdTggY21kX3JkaWQ7CisJdTggY21kX3NlY3Rvcl9lcmFzZTsKKwl1OCBjbWRfY2hpcF9lcmFzZTsKK307CisKKyNlbmRpZiAvKiBBVExYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0cC5jIGIvZHJpdmVycy9uZXQvYXRwLmMKaW5kZXggNjJmMDllNS4uM2Q0NDMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRwLmMKKysrIGIvZHJpdmVycy9uZXQvYXRwLmMKQEAgLTM3OCw4ICszNzgsOCBAQAogCQlzYV9vZmZzZXQgPSAxNTsKIAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCSgodTE2ICopZGV2LT5kZXZfYWRkcilbaV0gPQotCQkJYmUxNl90b19jcHUoZWVwcm9tX29wKGlvYWRkciwgRUVfUkVBRChzYV9vZmZzZXQgKyBpKSkpOworCQkoKF9fYmUxNiAqKWRldi0+ZGV2X2FkZHIpW2ldID0KKwkJCWNwdV90b19iZTE2KGVlcHJvbV9vcChpb2FkZHIsIEVFX1JFQUQoc2Ffb2Zmc2V0ICsgaSkpKTsKIAogCXdyaXRlX3JlZyhpb2FkZHIsIENNUjIsIENNUjJfTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggNTA0YjdjZS4uMzYzNGI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtNzAxLDcgKzcwMSw3IEBACiAJYXVwLT5taWlfYnVzLndyaXRlID0gbWRpb2J1c193cml0ZTsKIAlhdXAtPm1paV9idXMucmVzZXQgPSBtZGlvYnVzX3Jlc2V0OwogCWF1cC0+bWlpX2J1cy5uYW1lID0gImF1MTAwMF9ldGhfbWlpIjsKLQlhdXAtPm1paV9idXMuaWQgPSBhdXAtPm1hY19pZDsKKwlzbnByaW50ZihhdXAtPm1paV9idXMuaWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgYXVwLT5tYWNfaWQpOwogCWF1cC0+bWlpX2J1cy5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpKlBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CiAJZm9yKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpCiAJCWF1cC0+bWlpX2J1cy5pcnFbaV0gPSBQSFlfUE9MTDsKQEAgLTcwOSwxMSArNzA5LDExIEBACiAJLyogaWYga25vd24sIHNldCBjb3JyZXNwb25kaW5nIFBIWSBJUlFzICovCiAjaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCiAjIGlmIGRlZmluZWQoQVUxWFhYX1BIWTBfSVJRKQotCWlmIChBVTFYWFhfUEhZMF9CVVNJRCA9PSBhdXAtPm1paV9idXMuaWQpCisJaWYgKEFVMVhYWF9QSFkwX0JVU0lEID09IGF1cC0+bWFjX2lkKQogCQlhdXAtPm1paV9idXMuaXJxW0FVMVhYWF9QSFkwX0FERFJdID0gQVUxWFhYX1BIWTBfSVJROwogIyBlbmRpZgogIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX0lSUSkKLQlpZiAoQVUxWFhYX1BIWTFfQlVTSUQgPT0gYXVwLT5taWlfYnVzLmlkKQorCWlmIChBVTFYWFhfUEhZMV9CVVNJRCA9PSBhdXAtPm1hY19pZCkKIAkJYXVwLT5taWlfYnVzLmlycVtBVTFYWFhfUEhZMV9BRERSXSA9IEFVMVhYWF9QSFkxX0lSUTsKICMgZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCBlYTJhMmI1Li41OWRjZTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzZGV2LT5kZXYsIGRtYV9iYXNlLAorCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHNkZXYtPmRtYV9kZXYsIGRtYV9iYXNlLAogCQkJCQkgb2Zmc2V0ICYgZG1hX2Rlc2NfYWxpZ25fbWFzaywKIAkJCQkJIGRtYV9kZXNjX3N5bmNfc2l6ZSwgZGlyKTsKIH0KQEAgLTE1OCw3ICsxNTgsNyBAQAogCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzZGV2LT5kZXYsIGRtYV9iYXNlLAorCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHNkZXYtPmRtYV9kZXYsIGRtYV9iYXNlLAogCQkJCSAgICAgIG9mZnNldCAmIGRtYV9kZXNjX2FsaWduX21hc2ssCiAJCQkJICAgICAgZG1hX2Rlc2Nfc3luY19zaXplLCBkaXIpOwogfQpAQCAtNjEzLDcgKzYxMyw3IEBACiAKIAkJQlVHX09OKHNrYiA9PSBOVUxMKTsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kZXYsCisJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsCiAJCQkJIHJwLT5tYXBwaW5nLAogCQkJCSBza2ItPmxlbiwKIAkJCQkgRE1BX1RPX0RFVklDRSk7CkBAIC02NTMsNyArNjUzLDcgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIHNrYi0+ZGF0YSwKIAkJCQkgUlhfUEtUX0JVRl9TWiwKIAkJCQkgRE1BX0ZST01fREVWSUNFKTsKIApAQCAtNjYzLDE5ICs2NjMsMTkgQEAKIAkJbWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBETUFfMzBCSVRfTUFTSykgewogCQkvKiBTaWdoLi4uICovCiAJCWlmICghZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kZXYsIG1hcHBpbmcsCisJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nLAogCQkJCQlSWF9QS1RfQlVGX1NaLCBETUFfRlJPTV9ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlza2IgPSBfX25ldGRldl9hbGxvY19za2IoYnAtPmRldiwgUlhfUEtUX0JVRl9TWiwgR0ZQX0FUT01JQ3xHRlBfRE1BKTsKIAkJaWYgKHNrYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZShicC0+c2Rldi0+ZGV2LCBza2ItPmRhdGEsCisJCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2Rldiwgc2tiLT5kYXRhLAogCQkJCQkgUlhfUEtUX0JVRl9TWiwKIAkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fAogCQkJbWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBETUFfMzBCSVRfTUFTSykgewogCQkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kZXYsIG1hcHBpbmcsIFJYX1BLVF9CVUZfU1osRE1BX0ZST01fREVWSUNFKTsKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBtYXBwaW5nLCBSWF9QS1RfQlVGX1NaLERNQV9GUk9NX0RFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTc1MCw3ICs3NTAsNyBAQAogCQkJCQkgICAgIGRlc3RfaWR4ICogc2l6ZW9mKGRlc3RfZGVzYyksCiAJCQkJCSAgICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnNkZXYtPmRldiwgbGUzMl90b19jcHUoc3JjX2Rlc2MtPmFkZHIpLAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5zZGV2LT5kbWFfZGV2LCBsZTMyX3RvX2NwdShzcmNfZGVzYy0+YWRkciksCiAJCQkJICAgUlhfUEtUX0JVRl9TWiwKIAkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwogfQpAQCAtNzcyLDcgKzc3Miw3IEBACiAJCXN0cnVjdCByeF9oZWFkZXIgKnJoOwogCQl1MTYgbGVuOwogCi0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGJwLT5zZGV2LT5kZXYsIG1hcCwKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcCwKIAkJCQkJICAgIFJYX1BLVF9CVUZfU1osCiAJCQkJCSAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlyaCA9IChzdHJ1Y3QgcnhfaGVhZGVyICopIHNrYi0+ZGF0YTsKQEAgLTgwNiw3ICs4MDYsNyBAQAogCQkJc2tiX3NpemUgPSBiNDRfYWxsb2Nfcnhfc2tiKGJwLCBjb25zLCBicC0+cnhfcHJvZCk7CiAJCQlpZiAoc2tiX3NpemUgPCAwKQogCQkJCWdvdG8gZHJvcF9pdDsKLQkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRldiwgbWFwLAorCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgbWFwLAogCQkJCQkgc2tiX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCQkvKiBMZWF2ZSBvdXQgcnhfaGVhZGVyICovCiAgICAgICAgICAgICAgICAgCXNrYl9wdXQoc2tiLCBsZW4gKyBSWF9QS1RfT0ZGU0VUKTsKQEAgLTk2NiwyNCArOTY2LDI0IEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRldiwgc2tiLT5kYXRhLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2Rldiwgc2tiLT5kYXRhLCBsZW4sIERNQV9UT19ERVZJQ0UpOwogCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gRE1BXzMwQklUX01BU0spIHsKIAkJc3RydWN0IHNrX2J1ZmYgKmJvdW5jZV9za2I7CiAKIAkJLyogQ2hpcCBjYW4ndCBoYW5kbGUgRE1BIHRvL2Zyb20gPjFHQiwgdXNlIGJvdW5jZSBidWZmZXIgKi8KIAkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkKLQkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRldiwgbWFwcGluZywgbGVuLAorCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgbWFwcGluZywgbGVuLAogCQkJCQlETUFfVE9fREVWSUNFKTsKIAogCQlib3VuY2Vfc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAoIWJvdW5jZV9za2IpCiAJCQlnb3RvIGVycl9vdXQ7CiAKLQkJbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kZXYsIGJvdW5jZV9za2ItPmRhdGEsCisJCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgYm91bmNlX3NrYi0+ZGF0YSwKIAkJCQkJIGxlbiwgRE1BX1RPX0RFVklDRSk7CiAJCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gRE1BXzMwQklUX01BU0spIHsKIAkJCWlmICghZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykpCi0JCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZGV2LCBtYXBwaW5nLAorCQkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIG1hcHBpbmcsCiAJCQkJCSBsZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoYm91bmNlX3NrYik7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCiAJCWlmIChycC0+c2tiID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZGV2LCBycC0+bWFwcGluZywgUlhfUEtUX0JVRl9TWiwKKwkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgcnAtPm1hcHBpbmcsIFJYX1BLVF9CVUZfU1osCiAJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHJwLT5za2IpOwogCQlycC0+c2tiID0gTlVMTDsKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAKIAkJaWYgKHJwLT5za2IgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kZXYsIHJwLT5tYXBwaW5nLCBycC0+c2tiLT5sZW4sCisJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIHJwLT5tYXBwaW5nLCBycC0+c2tiLT5sZW4sCiAJCQkJCURNQV9UT19ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShycC0+c2tiKTsKIAkJcnAtPnNrYiA9IE5VTEw7CkBAIC0xMTE3LDEyICsxMTE3LDEyIEBACiAJbWVtc2V0KGJwLT50eF9yaW5nLCAwLCBCNDRfVFhfUklOR19CWVRFUyk7CiAKIAlpZiAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfUlhfUklOR19IQUNLKQotCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+c2Rldi0+ZGV2LCBicC0+cnhfcmluZ19kbWEsCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5zZGV2LT5kbWFfZGV2LCBicC0+cnhfcmluZ19kbWEsCiAJCQkgICAgICAgICAgICAgICAgICBETUFfVEFCTEVfQllURVMsCiAJCQkgICAgICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CiAKIAlpZiAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfVFhfUklOR19IQUNLKQotCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+c2Rldi0+ZGV2LCBicC0+dHhfcmluZ19kbWEsCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5zZGV2LT5kbWFfZGV2LCBicC0+dHhfcmluZ19kbWEsCiAJCQkgICAgICAgICAgICAgICAgICBETUFfVEFCTEVfQllURVMsCiAJCQkgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIApAQCAtMTE0NCwyNCArMTE0NCwyNCBAQAogCWJwLT50eF9idWZmZXJzID0gTlVMTDsKIAlpZiAoYnAtPnJ4X3JpbmcpIHsKIAkJaWYgKGJwLT5mbGFncyAmIEI0NF9GTEFHX1JYX1JJTkdfSEFDSykgewotCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZGV2LCBicC0+cnhfcmluZ19kbWEsCisJCQlkbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LT5kbWFfZGV2LCBicC0+cnhfcmluZ19kbWEsCiAJCQkJCURNQV9UQUJMRV9CWVRFUywKIAkJCQkJRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJa2ZyZWUoYnAtPnJ4X3JpbmcpOwogCQl9IGVsc2UKLQkJCWRtYV9mcmVlX2NvaGVyZW50KGJwLT5zZGV2LT5kZXYsIERNQV9UQUJMRV9CWVRFUywKKwkJCWRtYV9mcmVlX2NvaGVyZW50KGJwLT5zZGV2LT5kbWFfZGV2LCBETUFfVEFCTEVfQllURVMsCiAJCQkJCSAgICBicC0+cnhfcmluZywgYnAtPnJ4X3JpbmdfZG1hKTsKIAkJYnAtPnJ4X3JpbmcgPSBOVUxMOwogCQlicC0+ZmxhZ3MgJj0gfkI0NF9GTEFHX1JYX1JJTkdfSEFDSzsKIAl9CiAJaWYgKGJwLT50eF9yaW5nKSB7CiAJCWlmIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19UWF9SSU5HX0hBQ0spIHsKLQkJCWRtYV91bm1hcF9zaW5nbGUoYnAtPnNkZXYtPmRldiwgYnAtPnR4X3JpbmdfZG1hLAorCQkJZG1hX3VubWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgYnAtPnR4X3JpbmdfZG1hLAogCQkJCQlETUFfVEFCTEVfQllURVMsCiAJCQkJCURNQV9UT19ERVZJQ0UpOwogCQkJa2ZyZWUoYnAtPnR4X3JpbmcpOwogCQl9IGVsc2UKLQkJCWRtYV9mcmVlX2NvaGVyZW50KGJwLT5zZGV2LT5kZXYsIERNQV9UQUJMRV9CWVRFUywKKwkJCWRtYV9mcmVlX2NvaGVyZW50KGJwLT5zZGV2LT5kbWFfZGV2LCBETUFfVEFCTEVfQllURVMsCiAJCQkJCSAgICBicC0+dHhfcmluZywgYnAtPnR4X3JpbmdfZG1hKTsKIAkJYnAtPnR4X3JpbmcgPSBOVUxMOwogCQlicC0+ZmxhZ3MgJj0gfkI0NF9GTEFHX1RYX1JJTkdfSEFDSzsKQEAgLTExODcsNyArMTE4Nyw3IEBACiAJCWdvdG8gb3V0X2VycjsKIAogCXNpemUgPSBETUFfVEFCTEVfQllURVM7Ci0JYnAtPnJ4X3JpbmcgPSBkbWFfYWxsb2NfY29oZXJlbnQoYnAtPnNkZXYtPmRldiwgc2l6ZSwgJmJwLT5yeF9yaW5nX2RtYSwgZ2ZwKTsKKwlicC0+cnhfcmluZyA9IGRtYV9hbGxvY19jb2hlcmVudChicC0+c2Rldi0+ZG1hX2Rldiwgc2l6ZSwgJmJwLT5yeF9yaW5nX2RtYSwgZ2ZwKTsKIAlpZiAoIWJwLT5yeF9yaW5nKSB7CiAJCS8qIEFsbG9jYXRpb24gbWF5IGhhdmUgZmFpbGVkIGR1ZSB0byBwY2lfYWxsb2NfY29uc2lzdGVudAogCQkgICBpbnNpc3Rpbmcgb24gdXNlIG9mIEdGUF9ETUEsIHdoaWNoIGlzIG1vcmUgcmVzdHJpY3RpdmUKQEAgLTExOTksNyArMTE5OSw3IEBACiAJCWlmICghcnhfcmluZykKIAkJCWdvdG8gb3V0X2VycjsKIAotCQlyeF9yaW5nX2RtYSA9IGRtYV9tYXBfc2luZ2xlKGJwLT5zZGV2LT5kZXYsIHJ4X3JpbmcsCisJCXJ4X3JpbmdfZG1hID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRtYV9kZXYsIHJ4X3JpbmcsCiAJCQkgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKIAkJCSAgICAgICAgICAgICAgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCkBAIC0xMjE0LDcgKzEyMTQsNyBAQAogCQlicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfUlhfUklOR19IQUNLOwogCX0KIAotCWJwLT50eF9yaW5nID0gZG1hX2FsbG9jX2NvaGVyZW50KGJwLT5zZGV2LT5kZXYsIHNpemUsICZicC0+dHhfcmluZ19kbWEsIGdmcCk7CisJYnAtPnR4X3JpbmcgPSBkbWFfYWxsb2NfY29oZXJlbnQoYnAtPnNkZXYtPmRtYV9kZXYsIHNpemUsICZicC0+dHhfcmluZ19kbWEsIGdmcCk7CiAJaWYgKCFicC0+dHhfcmluZykgewogCQkvKiBBbGxvY2F0aW9uIG1heSBoYXZlIGZhaWxlZCBkdWUgdG8gZG1hX2FsbG9jX2NvaGVyZW50CiAJCSAgIGluc2lzdGluZyBvbiB1c2Ugb2YgR0ZQX0RNQSwgd2hpY2ggaXMgbW9yZSByZXN0cmljdGl2ZQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAKIAkJaWYgKCF0eF9yaW5nKQogCQkJZ290byBvdXRfZXJyOwogCi0JCXR4X3JpbmdfZG1hID0gZG1hX21hcF9zaW5nbGUoYnAtPnNkZXYtPmRldiwgdHhfcmluZywKKwkJdHhfcmluZ19kbWEgPSBkbWFfbWFwX3NpbmdsZShicC0+c2Rldi0+ZG1hX2RldiwgdHhfcmluZywKIAkJCSAgICAgICAgICAgICAgICAgICAgRE1BX1RBQkxFX0JZVEVTLAogCQkJICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIApAQCAtMjA4Miw2ICsyMDgyLDExIEBACiAJCWFkZHIgPSBzZGV2LT5idXMtPnNwcm9tLmV0MG1hYzsKIAkJYnAtPnBoeV9hZGRyID0gc2Rldi0+YnVzLT5zcHJvbS5ldDBwaHlhZGRyOwogCX0KKwkvKiBTb21lIFJPTXMgaGF2ZSBidWdneSBQSFkgYWRkcmVzc2VzIHdpdGggdGhlIGhpZ2gKKwkgKiBiaXRzIHNldCAoc2lnbiBleHRlbnNpb24/KS4gVHJ1bmNhdGUgdGhlbSB0byBhCisJICogdmFsaWQgUEhZIGFkZHJlc3MuICovCisJYnAtPnBoeV9hZGRyICY9IDB4MUY7CisKIAltZW1jcHkoYnAtPmRldi0+ZGV2X2FkZHIsIGFkZHIsIDYpOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCZicC0+ZGV2LT5kZXZfYWRkclswXSkpewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKaW5kZXggYzk5M2EzMi4uNzE3ZGNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYworKysgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCkBAIC01NzUsNyArNTc1LDYgQEAKIHN0YXRpYyBpbnQgYmY1MzdtYWNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYmY1MzdtYWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKIAogCWN1cnJlbnRfdHhfcHRyLT5za2IgPSBza2I7CkBAIC02MzQsNyArNjMzLDYgQEAKIHN0YXRpYyB2b2lkIGJmNTM3bWFjX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld19za2I7Ci0Jc3RydWN0IGJmNTM3bWFjX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgc2hvcnQgbGVuOwogCiAJLyogYWxsb2NhdGUgYSBuZXcgc2tiIGZvciBuZXh0IHRpbWUgcmVjZWl2ZSAqLwpAQCAtOTcxLDcgKzk2OSw3IEBACiAJbHAtPm1paV9idXMud3JpdGUgPSBtZGlvYnVzX3dyaXRlOwogCWxwLT5taWlfYnVzLnJlc2V0ID0gbWRpb2J1c19yZXNldDsKIAlscC0+bWlpX2J1cy5uYW1lID0gImJmaW5fbWFjX21kaW8iOwotCWxwLT5taWlfYnVzLmlkID0gMDsKKwlzbnByaW50ZihscC0+bWlpX2J1cy5pZCwgTUlJX0JVU19JRF9TSVpFLCAiMCIpOwogCWxwLT5taWlfYnVzLmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkqUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKIAlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpCiAJCWxwLT5taWlfYnVzLmlycVtpXSA9IFBIWV9QT0xMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDQ3MWM3ZjMuLjE1ODUzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTU2LDggKzU2LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjcuMyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKYW51YXJ5IDI5LCAyMDA4IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNy40IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYnJ1YXJ5IDE4LCAyMDA4IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtMTI3MywxNCArMTI3MywyMCBAQAogCiAJaWYgKChicC0+cGh5X2ZsYWdzICYgQk5YMl9QSFlfRkxBR19TRVJERVMpICYmCiAJICAgIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwNikpIHsKLQkJdTMyIHZhbDsKKwkJdTMyIHZhbCwgYW5fZGJnOwogCiAJCWlmIChicC0+cGh5X2ZsYWdzICYgQk5YMl9QSFlfRkxBR19GT1JDRURfRE9XTikgewogCQkJYm54Ml81NzA2c19mb3JjZV9saW5rX2RuKGJwLCAwKTsKIAkJCWJwLT5waHlfZmxhZ3MgJj0gfkJOWDJfUEhZX0ZMQUdfRk9SQ0VEX0RPV047CiAJCX0KIAkJdmFsID0gUkVHX1JEKGJwLCBCTlgyX0VNQUNfU1RBVFVTKTsKLQkJaWYgKHZhbCAmIEJOWDJfRU1BQ19TVEFUVVNfTElOSykKKworCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JOWDJfTUlTQ19TSEFET1csIE1JU0NfU0hEV19BTl9EQkcpOworCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk5YMl9NSVNDX1NIQURPVywgJmFuX2RiZyk7CisJCWJueDJfcmVhZF9waHkoYnAsIE1JSV9CTlgyX01JU0NfU0hBRE9XLCAmYW5fZGJnKTsKKworCQlpZiAoKHZhbCAmIEJOWDJfRU1BQ19TVEFUVVNfTElOSykgJiYKKwkJICAgICEoYW5fZGJnICYgTUlTQ19TSERXX0FOX0RCR19OT1NZTkMpKQogCQkJYm1zciB8PSBCTVNSX0xTVEFUVVM7CiAJCWVsc2UKIAkJCWJtc3IgJj0gfkJNU1JfTFNUQVRVUzsKQEAgLTUzNTYsMTEgKzUzNjIsMTUgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAorLyogRGV0ZXJtaW5pbmcgbGluayBmb3IgcGFyYWxsZWwgZGV0ZWN0aW9uLiAqLwogc3RhdGljIGludAogYm54Ml81NzA2X3NlcmRlc19oYXNfbGluayhzdHJ1Y3QgYm54MiAqYnApCiB7CiAJdTMyIG1vZGVfY3RsLCBhbl9kYmcsIGV4cDsKIAorCWlmIChicC0+cGh5X2ZsYWdzICYgQk5YMl9QSFlfRkxBR19OT19QQVJBTExFTCkKKwkJcmV0dXJuIDA7CisKIAlibngyX3dyaXRlX3BoeShicCwgTUlJX0JOWDJfTUlTQ19TSEFET1csIE1JU0NfU0hEV19NT0RFX0NUTCk7CiAJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JOWDJfTUlTQ19TSEFET1csICZtb2RlX2N0bCk7CiAKQEAgLTUzOTAsMTMgKzU0MDAsNiBAQAogCWludCBjaGVja19saW5rID0gMTsKIAogCXNwaW5fbG9jaygmYnAtPnBoeV9sb2NrKTsKLQlpZiAoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfRk9SQ0VEX0RPV04pIHsKLQkJYm54Ml81NzA2c19mb3JjZV9saW5rX2RuKGJwLCAwKTsKLQkJYnAtPnBoeV9mbGFncyAmPSB+Qk5YMl9QSFlfRkxBR19GT1JDRURfRE9XTjsKLQkJc3Bpbl91bmxvY2soJmJwLT5waHlfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAoYnAtPnNlcmRlc19hbl9wZW5kaW5nKSB7CiAJCWJwLT5zZXJkZXNfYW5fcGVuZGluZy0tOwogCQljaGVja19saW5rID0gMDsKQEAgLTU0MjAsNyArNTQyMyw2IEBACiAJCSAoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfUEFSQUxMRUxfREVURUNUKSkgewogCQl1MzIgcGh5MjsKIAotCQljaGVja19saW5rID0gMDsKIAkJYm54Ml93cml0ZV9waHkoYnAsIDB4MTcsIDB4MGYwMSk7CiAJCWJueDJfcmVhZF9waHkoYnAsIDB4MTUsICZwaHkyKTsKIAkJaWYgKHBoeTIgJiAweDIwKSB7CkBAIC01NDM1LDE3ICs1NDM3LDIxIEBACiAJfSBlbHNlCiAJCWJwLT5jdXJyZW50X2ludGVydmFsID0gYnAtPnRpbWVyX2ludGVydmFsOwogCi0JaWYgKGJwLT5saW5rX3VwICYmIChicC0+YXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpICYmIGNoZWNrX2xpbmspIHsKKwlpZiAoY2hlY2tfbGluaykgewogCQl1MzIgdmFsOwogCiAJCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk5YMl9NSVNDX1NIQURPVywgTUlTQ19TSERXX0FOX0RCRyk7CiAJCWJueDJfcmVhZF9waHkoYnAsIE1JSV9CTlgyX01JU0NfU0hBRE9XLCAmdmFsKTsKIAkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JOWDJfTUlTQ19TSEFET1csICZ2YWwpOwogCi0JCWlmICh2YWwgJiBNSVNDX1NIRFdfQU5fREJHX05PU1lOQykgewotCQkJYm54Ml81NzA2c19mb3JjZV9saW5rX2RuKGJwLCAxKTsKLQkJCWJwLT5waHlfZmxhZ3MgfD0gQk5YMl9QSFlfRkxBR19GT1JDRURfRE9XTjsKLQkJfQorCQlpZiAoYnAtPmxpbmtfdXAgJiYgKHZhbCAmIE1JU0NfU0hEV19BTl9EQkdfTk9TWU5DKSkgeworCQkJaWYgKCEoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfRk9SQ0VEX0RPV04pKSB7CisJCQkJYm54Ml81NzA2c19mb3JjZV9saW5rX2RuKGJwLCAxKTsKKwkJCQlicC0+cGh5X2ZsYWdzIHw9IEJOWDJfUEhZX0ZMQUdfRk9SQ0VEX0RPV047CisJCQl9IGVsc2UKKwkJCQlibngyX3NldF9saW5rKGJwKTsKKwkJfSBlbHNlIGlmICghYnAtPmxpbmtfdXAgJiYgISh2YWwgJiBNSVNDX1NIRFdfQU5fREJHX05PU1lOQykpCisJCQlibngyX3NldF9saW5rKGJwKTsKIAl9CiAJc3Bpbl91bmxvY2soJmJwLT5waHlfbG9jayk7CiB9CkBAIC03MzI2LDcgKzczMzIsMTUgQEAKIAkJCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfTk9fV09MOwogCQkJYnAtPndvbCA9IDA7CiAJCX0KLQkJaWYgKENISVBfTlVNKGJwKSAhPSBDSElQX05VTV81NzA2KSB7CisJCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwNikgeworCQkJLyogRG9uJ3QgZG8gcGFyYWxsZWwgZGV0ZWN0IG9uIHRoaXMgYm9hcmQgYmVjYXVzZSBvZgorCQkJICogc29tZSBib2FyZCBwcm9ibGVtcy4gIFRoZSBsaW5rIHdpbGwgbm90IGdvIGRvd24KKwkJCSAqIGlmIHdlIGRvIHBhcmFsbGVsIGRldGVjdC4KKwkJCSAqLworCQkJaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9IUCAmJgorCQkJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgzMTBjKQorCQkJCWJwLT5waHlfZmxhZ3MgfD0gQk5YMl9QSFlfRkxBR19OT19QQVJBTExFTDsKKwkJfSBlbHNlIHsKIAkJCWJwLT5waHlfYWRkciA9IDI7CiAJCQlpZiAocmVnICYgQk5YMl9TSEFSRURfSFdfQ0ZHX1BIWV8yXzVHKQogCQkJCWJwLT5waHlfZmxhZ3MgfD0gQk5YMl9QSFlfRkxBR18yXzVHX0NBUEFCTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggM2FhMDM2NC4uMWVhZjViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNjY3Myw2ICs2NjczLDcgQEAKICNkZWZpbmUgQk5YMl9QSFlfRkxBR19ESVNfRUFSTFlfREFDCQkweDAwMDAwNDAwCiAjZGVmaW5lIEJOWDJfUEhZX0ZMQUdfUkVNT1RFX1BIWV9DQVAJCTB4MDAwMDA4MDAKICNkZWZpbmUgQk5YMl9QSFlfRkxBR19GT1JDRURfRE9XTgkJMHgwMDAwMTAwMAorI2RlZmluZSBCTlgyX1BIWV9GTEFHX05PX1BBUkFMTEVMCQkweDAwMDAyMDAwCiAKIAl1MzIJCQltaWlfYm1jcjsKIAl1MzIJCQltaWlfYm1zcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4LmMgYi9kcml2ZXJzL25ldC9ibngyeC5jCmluZGV4IGFmYzdmMzQuLjdiZGI1YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4LmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4LmM6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTAsMTMgKzEwLDEzIEBACiAgKiBCYXNlZCBvbiBjb2RlIGZyb20gTWljaGFlbCBDaGFuJ3MgYm54MiBkcml2ZXIKICAqIFVEUCBDU1VNIGVycmF0YSB3b3JrYXJvdW5kIGJ5IEFyaWsgR2VuZGVsbWFuCiAgKiBTbG93cGF0aCByZXdvcmsgYnkgVmxhZGlzbGF2IFpvbG90YXJvdgotICogU3RhdGlzdGljcyBhbmQgTGluayBtYW5hZ21lbnQgYnkgWWl0Y2hhayBHZXJ0bmVyCisgKiBTdGF0aXN0aWNzIGFuZCBMaW5rIG1hbmFnZW1lbnQgYnkgWWl0Y2hhayBHZXJ0bmVyCiAgKgogICovCiAKIC8qIGRlZmluZSB0aGlzIHRvIG1ha2UgdGhlIGRyaXZlciBmcmVlemUgb24gZXJyb3IKICAqIHRvIGFsbG93IGdldHRpbmcgZGVidWcgaW5mbwotICogKHlvdSB3aWxsIG5lZWQgdG8gcmVib290IGFmdGVyd29yZHMpCisgKiAoeW91IHdpbGwgbmVlZCB0byByZWJvb3QgYWZ0ZXJ3YXJkcykKICAqLwogLyojZGVmaW5lIEJOWDJYX1NUT1BfT05fRVJST1IqLwogCkBAIC02MywyMiArNjMsMjEgQEAKICNpbmNsdWRlICJibngyeC5oIgogI2luY2x1ZGUgImJueDJ4X2luaXQuaCIKIAotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMC40MC4xNSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFICAgICAgIiREYXRlVGltZTogMjAwNy8xMS8xNSAwNzoyODozNyAkIgotI2RlZmluZSBCTlgyWF9CQ19WRVIgICAgCTB4MDQwMDA5CisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjQyLjQiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDA4LzQvOSIKKyNkZWZpbmUgQk5YMlhfQkNfVkVSICAgIAkweDA0MDIwMAogCiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiAjZGVmaW5lIFRYX1RJTUVPVVQgICAgICAJKDUqSFopCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLQkiQnJvYWRjb20gTmV0WHRyZW1lIElJIDU3N3h4IDEwR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgIgorCSJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgNTc3MVggMTBHaWdhYml0IEV0aGVybmV0IERyaXZlciAiCiAJRFJWX01PRFVMRV9OQU1FICIgIiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkVsaWV6ZXIgVGFtaXIgPGVsaWV6ZXJ0QGJyb2FkY29tLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gTmV0WHRyZW1lIElJIEJDTTU3NzEwIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKLU1PRFVMRV9JTkZPKGN2c192ZXJzaW9uLCAiJFJldmlzaW9uOiAjMzU2ICQiKTsKIAogc3RhdGljIGludCB1c2VfaW50YTsKIHN0YXRpYyBpbnQgcG9sbDsKQEAgLTk0LDggKzkzLDggQEAKIE1PRFVMRV9QQVJNX0RFU0ModXNlX2ludGEsICJ1c2UgSU5UI0EgaW5zdGVhZCBvZiBNU0ktWCIpOwogTU9EVUxFX1BBUk1fREVTQyhwb2xsLCAidXNlIHBvbGxpbmcgKGZvciBkZWJ1ZykiKTsKIE1PRFVMRV9QQVJNX0RFU0Mob25lZnVuYywgImVuYWJsZSBvbmx5IGZpcnN0IGZ1bmN0aW9uIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vbWNwLCAiaWdub3JlIG1hbmFnbWVudCBDUFUgKEltcGxpZXMgb25lZnVuYykiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWZ1YWx0IGRlYnVnIG1zZ2xldmVsIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vbWNwLCAiaWdub3JlIG1hbmFnZW1lbnQgQ1BVIChJbXBsaWVzIG9uZWZ1bmMpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVmYXVsdCBkZWJ1ZyBtc2dsZXZlbCIpOwogCiAjaWZkZWYgQk5YMlhfTVVMVEkKIG1vZHVsZV9wYXJhbSh1c2VfbXVsdGksIGludCwgMCk7CkBAIC0yOTgsOCArMjk3LDcgQEAKIAogc3RhdGljIGludCBibngyeF9tY19hc3NlcnQoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpbnQgaSwgajsKLQlpbnQgcmMgPSAwOworCWludCBpLCBqLCByYyA9IDA7CiAJY2hhciBsYXN0X2lkeDsKIAljb25zdCBjaGFyIHN0b3JtW10gPSB7IlhUQ1UifTsKIAljb25zdCB1MzIgaW50bWVtX2Jhc2VbXSA9IHsKQEAgLTMxMyw4ICszMTEsOSBAQAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJbGFzdF9pZHggPSBSRUdfUkQ4KGJwLCBYU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUICsKIAkJCQkgICBpbnRtZW1fYmFzZVtpXSk7Ci0JCUJOWDJYX0VSUigiREFUQSAlY1NUT1JNX0FTU0VSVF9MSVNUX0lOREVYIDB4JXhcbiIsCi0JCQkgIHN0b3JtW2ldLCBsYXN0X2lkeCk7CisJCWlmIChsYXN0X2lkeCkKKwkJCUJOWDJYX0xPRygiREFUQSAlY1NUT1JNX0FTU0VSVF9MSVNUX0lOREVYIDB4JXhcbiIsCisJCQkJICBzdG9ybVtpXSwgbGFzdF9pZHgpOwogCiAJCS8qIHByaW50IHRoZSBhc3NlcnRzICovCiAJCWZvciAoaiA9IDA7IGogPCBTVFJPTV9BU1NFUlRfQVJSQVlfU0laRTsgaisrKSB7CkBAIC0zMzAsNyArMzI5LDcgQEAKIAkJCQkgICAgICBpbnRtZW1fYmFzZVtpXSk7CiAKIAkJCWlmIChyb3cwICE9IENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFKSB7Ci0JCQkJQk5YMlhfRVJSKCJEQVRBICVjU1RPUk1fQVNTRVJUX0lOREVYIDB4JXggPSIKKwkJCQlCTlgyWF9MT0coIkRBVEEgJWNTVE9STV9BU1NFUlRfSU5ERVggMHgleCA9IgogCQkJCQkgICIgMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAogCQkJCQkgIHN0b3JtW2ldLCBqLCByb3czLCByb3cyLCByb3cxLCByb3cwKTsKIAkJCQlyYysrOwpAQCAtMzQxLDYgKzM0MCw3IEBACiAJfQogCXJldHVybiByYzsKIH0KKwogc3RhdGljIHZvaWQgYm54MnhfZndfZHVtcChzdHJ1Y3QgYm54MnggKmJwKQogewogCXUzMiBtYXJrLCBvZmZzZXQ7CkBAIC0zNDgsMjEgKzM0OCwyMiBAQAogCWludCB3b3JkOwogCiAJbWFyayA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKyAweGYxMDQpOwotCXByaW50ayhLRVJOX0VSUiBQRlggImJlZ2luIGZ3IGR1bXAgKG1hcmsgMHgleClcbiIsIG1hcmspOworCW1hcmsgPSAoKG1hcmsgKyAweDMpICYgfjB4Myk7CisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYmVnaW4gZncgZHVtcCAobWFyayAweCV4KVxuIiBLRVJOX0VSUiwgbWFyayk7CiAKIAlmb3IgKG9mZnNldCA9IG1hcmsgLSAweDA4MDAwMDAwOyBvZmZzZXQgPD0gMHhGOTAwOyBvZmZzZXQgKz0gMHg4KjQpIHsKIAkJZm9yICh3b3JkID0gMDsgd29yZCA8IDg7IHdvcmQrKykKIAkJCWRhdGFbd29yZF0gPSBodG9ubChSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9TQ1JBVENIICsKIAkJCQkJCSAgb2Zmc2V0ICsgNCp3b3JkKSk7CiAJCWRhdGFbOF0gPSAweDA7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIiwgKGNoYXIgKilkYXRhKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCAoY2hhciAqKWRhdGEpOwogCX0KIAlmb3IgKG9mZnNldCA9IDB4RjEwODsgb2Zmc2V0IDw9IG1hcmsgLSAweDA4MDAwMDAwOyBvZmZzZXQgKz0gMHg4KjQpIHsKIAkJZm9yICh3b3JkID0gMDsgd29yZCA8IDg7IHdvcmQrKykKIAkJCWRhdGFbd29yZF0gPSBodG9ubChSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9TQ1JBVENIICsKIAkJCQkJCSAgb2Zmc2V0ICsgNCp3b3JkKSk7CiAJCWRhdGFbOF0gPSAweDA7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIiwgKGNoYXIgKilkYXRhKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCAoY2hhciAqKWRhdGEpOwogCX0KIAlwcmludGsoIlxuIiBLRVJOX0VSUiBQRlggImVuZCBvZiBmdyBkdW1wXG4iKTsKIH0KQEAgLTQyNywxMCArNDI4LDEwIEBACiAJCX0KIAl9CiAKLQlCTlgyWF9FUlIoImRlZl9jX2lkeCgldSkgIGRlZl91X2lkeCgldSkgIGRlZl90X2lkeCgldSkiCi0JCSAgIiAgZGVmX3hfaWR4KCV1KSAgZGVmX2F0dF9pZHgoJXUpICBhdHRuX3N0YXRlKCV1KSIKKwlCTlgyWF9FUlIoImRlZl9jX2lkeCgldSkgIGRlZl91X2lkeCgldSkgIGRlZl94X2lkeCgldSkiCisJCSAgIiAgZGVmX3RfaWR4KCV1KSAgZGVmX2F0dF9pZHgoJXUpICBhdHRuX3N0YXRlKCV1KSIKIAkJICAiICBzcHFfcHJvZF9pZHgoJXUpXG4iLAotCQkgIGJwLT5kZWZfY19pZHgsIGJwLT5kZWZfdV9pZHgsIGJwLT5kZWZfdF9pZHgsIGJwLT5kZWZfeF9pZHgsCisJCSAgYnAtPmRlZl9jX2lkeCwgYnAtPmRlZl91X2lkeCwgYnAtPmRlZl94X2lkeCwgYnAtPmRlZl90X2lkeCwKIAkJICBicC0+ZGVmX2F0dF9pZHgsIGJwLT5hdHRuX3N0YXRlLCBicC0+c3BxX3Byb2RfaWR4KTsKIAogCkBAIC00NDEsNyArNDQyLDcgQEAKIAlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0c19zdGF0ZSAtIERJU0FCTEVcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9lbmFibGVfaW50KHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdm9pZCBibngyeF9pbnRfZW5hYmxlKHN0cnVjdCBibngyeCAqYnApCiB7CiAJaW50IHBvcnQgPSBicC0+cG9ydDsKIAl1MzIgYWRkciA9IHBvcnQgPyBIQ19SRUdfQ09ORklHXzEgOiBIQ19SRUdfQ09ORklHXzA7CkBAIC00NTQsMTggKzQ1NSwyNiBAQAogCQkJSENfQ09ORklHXzBfUkVHX0FUVE5fQklUX0VOXzApOwogCX0gZWxzZSB7CiAJCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCB8CisJCQlIQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX0FUVE5fQklUX0VOXzApOworCisJCS8qIEVycmF0YSBBMC4xNTggd29ya2Fyb3VuZCAqLworCQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBNU0ktWCAlZFxuIiwKKwkJICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKworCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisKIAkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzA7CiAJfQogCi0JRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgbXNpICVkXG4iLAorCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgJXggdG8gSEMgJWQgKGFkZHIgMHgleCkgIE1TSS1YICVkXG4iLAogCSAgIHZhbCwgcG9ydCwgYWRkciwgbXNpeCk7CiAKIAlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X2Rpc2FibGVfaW50KHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdm9pZCBibngyeF9pbnRfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gYnAtPnBvcnQ7CiAJdTMyIGFkZHIgPSBwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOwpAQCAtNDg0LDE1ICs0OTMsMTUgQEAKIAkJQk5YMlhfRVJSKCJCVUchIHByb3BlciB2YWwgbm90IHJlYWQgZnJvbSBJR1UhXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfZGlzYWJsZV9pbnRfc3luYyhzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHZvaWQgYm54MnhfaW50X2Rpc2FibGVfc3luYyhzdHJ1Y3QgYm54MnggKmJwKQogewogCiAJaW50IG1zaXggPSAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSA/IDEgOiAwOwogCWludCBpOwogCiAJYXRvbWljX2luYygmYnAtPmludHJfc2VtKTsKLQkvKiBwcmV2ZW50IHRoZSBIVyBmcm9tIHNlbmRpbmcgaW50ZXJydXB0cyovCi0JYm54MnhfZGlzYWJsZV9pbnQoYnApOworCS8qIHByZXZlbnQgdGhlIEhXIGZyb20gc2VuZGluZyBpbnRlcnJ1cHRzICovCisJYm54MnhfaW50X2Rpc2FibGUoYnApOwogCiAJLyogbWFrZSBzdXJlIGFsbCBJU1JzIGFyZSBkb25lICovCiAJaWYgKG1zaXgpIHsKQEAgLTc3NSw2ICs3ODQsNyBAQAogCQltYigpOyAvKiBmb3JjZSBibngyeF93YWl0X3JhbXJvZCB0byBzZWUgdGhlIGNoYW5nZSAqLwogCQlyZXR1cm47CiAJfQorCiAJc3dpdGNoIChjb21tYW5kIHwgYnAtPnN0YXRlKSB7CiAJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCB8IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfUE9SVCk6CiAJCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldHVwIHJhbXJvZFxuIik7CkBAIC03ODcsMjAgKzc5NywyMCBAQAogCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxURUQ7CiAJCWJyZWFrOwogCi0JY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgfCBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0RFTEVURSk6Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgZGVsZXRlIHJhbXJvZFxuIik7Ci0JCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfVU5MT0FEOwotCQlicmVhazsKLQogCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgfCBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQpOgotCQlEUChORVRJRl9NU0dfSUZET1dOLCAiZ290IGRlbGV0ZSByYW1yb2QgZm9yIE1VTFRJWyVkXVxuIiwgY2lkKTsKLQkJYm54MnhfZnAoYnAsIGNpZCwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfREVMRVRFRDsKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImdvdCBkZWxldGUgcmFtcm9kIGZvciBNVUxUSVslZF1cbiIsCisJCSAgIGNpZCk7CisJCWJueDJ4X2ZwKGJwLCBjaWQsIHN0YXRlKSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKIAkJYnJlYWs7CiAKIAljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDIHwgQk5YMlhfU1RBVEVfT1BFTik6CiAJCURQKE5FVElGX01TR19JRlVQLCAiZ290IHNldCBtYWMgcmFtcm9kXG4iKTsKIAkJYnJlYWs7CiAKKwljYXNlIChSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDIHwgQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9IQUxUKToKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJnb3QgKHVuKXNldCBtYWMgcmFtcm9kXG4iKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlCTlgyWF9FUlIoInVuZXhwZWN0ZWQgcmFtcm9kICglZCkgIHN0YXRlIGlzICV4XG4iLAogCQkJICBjb21tYW5kLCBicC0+c3RhdGUpOwpAQCAtMTE3OSwxMiArMTE4OSwxNzUgQEAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgaW50IGJueDJ4X2h3X2xvY2soc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlc291cmNlKQoreworCXUzMiBjbnQ7CisJdTMyIGxvY2tfc3RhdHVzOworCXUzMiByZXNvdXJjZV9iaXQgPSAoMSA8PCByZXNvdXJjZSk7CisJdTggZnVuYyA9IGJwLT5wb3J0OworCisJLyogVmFsaWRhdGluZyB0aGF0IHRoZSByZXNvdXJjZSBpcyB3aXRoaW4gcmFuZ2UgKi8KKwlpZiAocmVzb3VyY2UgPiBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSkgeworCQlEUChORVRJRl9NU0dfSFcsCisJCSAgICJyZXNvdXJjZSgweCV4KSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKDB4JXgpXG4iLAorCQkgICByZXNvdXJjZSwgSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWYWxpZGF0aW5nIHRoYXQgdGhlIHJlc291cmNlIGlzIG5vdCBhbHJlYWR5IHRha2VuICovCisJbG9ja19zdGF0dXMgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEgKyBmdW5jKjgpOworCWlmIChsb2NrX3N0YXR1cyAmIHJlc291cmNlX2JpdCkgeworCQlEUChORVRJRl9NU0dfSFcsICJsb2NrX3N0YXR1cyAweCV4ICByZXNvdXJjZV9iaXQgMHgleFxuIiwKKwkJICAgbG9ja19zdGF0dXMsIHJlc291cmNlX2JpdCk7CisJCXJldHVybiAtRUVYSVNUOworCX0KKworCS8qIFRyeSBmb3IgMSBzZWNvbmQgZXZlcnkgNW1zICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCAyMDA7IGNudCsrKSB7CisJCS8qIFRyeSB0byBhY3F1aXJlIHRoZSBsb2NrICovCisJCVJFR19XUihicCwgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMSArIGZ1bmMqOCArIDQsCisJCSAgICAgICByZXNvdXJjZV9iaXQpOworCQlsb2NrX3N0YXR1cyA9IFJFR19SRChicCwgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMSArIGZ1bmMqOCk7CisJCWlmIChsb2NrX3N0YXR1cyAmIHJlc291cmNlX2JpdCkKKwkJCXJldHVybiAwOworCisJCW1zbGVlcCg1KTsKKwl9CisJRFAoTkVUSUZfTVNHX0hXLCAiVGltZW91dFxuIik7CisJcmV0dXJuIC1FQUdBSU47Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfaHdfdW5sb2NrKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZXNvdXJjZSkKK3sKKwl1MzIgbG9ja19zdGF0dXM7CisJdTMyIHJlc291cmNlX2JpdCA9ICgxIDw8IHJlc291cmNlKTsKKwl1OCBmdW5jID0gYnAtPnBvcnQ7CisKKwkvKiBWYWxpZGF0aW5nIHRoYXQgdGhlIHJlc291cmNlIGlzIHdpdGhpbiByYW5nZSAqLworCWlmIChyZXNvdXJjZSA+IEhXX0xPQ0tfTUFYX1JFU09VUkNFX1ZBTFVFKSB7CisJCURQKE5FVElGX01TR19IVywKKwkJICAgInJlc291cmNlKDB4JXgpID4gSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUoMHgleClcbiIsCisJCSAgIHJlc291cmNlLCBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFZhbGlkYXRpbmcgdGhhdCB0aGUgcmVzb3VyY2UgaXMgY3VycmVudGx5IHRha2VuICovCisJbG9ja19zdGF0dXMgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEgKyBmdW5jKjgpOworCWlmICghKGxvY2tfc3RhdHVzICYgcmVzb3VyY2VfYml0KSkgeworCQlEUChORVRJRl9NU0dfSFcsICJsb2NrX3N0YXR1cyAweCV4ICByZXNvdXJjZV9iaXQgMHgleFxuIiwKKwkJICAgbG9ja19zdGF0dXMsIHJlc291cmNlX2JpdCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCVJFR19XUihicCwgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMSArIGZ1bmMqOCwgcmVzb3VyY2VfYml0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlKQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBicC0+cG9ydDsKKwlpbnQgZ3Bpb19zaGlmdCA9IGdwaW9fbnVtICsKKwkJCShncGlvX3BvcnQgPyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQgOiAwKTsKKwl1MzIgZ3Bpb19tYXNrID0gKDEgPDwgZ3Bpb19zaGlmdCk7CisJdTMyIGdwaW9fcmVnOworCisJaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7CisJCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJueDJ4X2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisJLyogcmVhZCBHUElPIGFuZCBtYXNrIGV4Y2VwdCB0aGUgZmxvYXQgYml0cyAqLworCWdwaW9fcmVnID0gKFJFR19SRChicCwgTUlTQ19SRUdfR1BJTykgJiBNSVNDX1JFR0lTVEVSU19HUElPX0ZMT0FUKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XOgorCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBHUElPICVkIChzaGlmdCAlZCkgLT4gb3V0cHV0IGxvd1xuIiwKKwkJICAgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOworCQkvKiBjbGVhciBGTE9BVCBhbmQgc2V0IENMUiAqLworCQlncGlvX3JlZyAmPSB+KGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0ZMT0FUX1BPUyk7CisJCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fQ0xSX1BPUyk7CisJCWJyZWFrOworCisJY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIOgorCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBHUElPICVkIChzaGlmdCAlZCkgLT4gb3V0cHV0IGhpZ2hcbiIsCisJCSAgIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogY2xlYXIgRkxPQVQgYW5kIHNldCBTRVQgKi8KKwkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MpOworCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX1NFVF9QT1MpOworCQlicmVhazsKKworCWNhc2UgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlBVVF9ISV9aIDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgR1BJTyAlZCAoc2hpZnQgJWQpIC0+IGlucHV0XG4iLAorCQkgICBncGlvX251bSwgZ3Bpb19zaGlmdCk7CisJCS8qIHNldCBGTE9BVCAqLworCQlncGlvX3JlZyB8PSAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0dQSU8sIGdwaW9fcmVnKTsKKwlibngyeF9od191bmxvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfc3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc3Bpb19udW0sIHUzMiBtb2RlKQoreworCXUzMiBzcGlvX21hc2sgPSAoMSA8PCBzcGlvX251bSk7CisJdTMyIHNwaW9fcmVnOworCisJaWYgKChzcGlvX251bSA8IE1JU0NfUkVHSVNURVJTX1NQSU9fNCkgfHwKKwkgICAgKHNwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfU1BJT183KSkgeworCQlCTlgyWF9FUlIoIkludmFsaWQgU1BJTyAlZFxuIiwgc3Bpb19udW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibngyeF9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX1NQSU8pOworCS8qIHJlYWQgU1BJTyBhbmQgbWFzayBleGNlcHQgdGhlIGZsb2F0IGJpdHMgKi8KKwlzcGlvX3JlZyA9IChSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU8pICYgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1JU0NfUkVHSVNURVJTX1NQSU9fT1VUUFVUX0xPVyA6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IFNQSU8gJWQgLT4gb3V0cHV0IGxvd1xuIiwgc3Bpb19udW0pOworCQkvKiBjbGVhciBGTE9BVCBhbmQgc2V0IENMUiAqLworCQlzcGlvX3JlZyAmPSB+KHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUX1BPUyk7CisJCXNwaW9fcmVnIHw9ICAoc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fQ0xSX1BPUyk7CisJCWJyZWFrOworCisJY2FzZSBNSVNDX1JFR0lTVEVSU19TUElPX09VVFBVVF9ISUdIIDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXQgU1BJTyAlZCAtPiBvdXRwdXQgaGlnaFxuIiwgc3Bpb19udW0pOworCQkvKiBjbGVhciBGTE9BVCBhbmQgc2V0IFNFVCAqLworCQlzcGlvX3JlZyAmPSB+KHNwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUX1BPUyk7CisJCXNwaW9fcmVnIHw9ICAoc3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fU0VUX1BPUyk7CisJCWJyZWFrOworCisJY2FzZSBNSVNDX1JFR0lTVEVSU19TUElPX0lOUFVUX0hJX1o6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IFNQSU8gJWQgLT4gaW5wdXRcbiIsIHNwaW9fbnVtKTsKKwkJLyogc2V0IEZMT0FUICovCisJCXNwaW9fcmVnIHw9IChzcGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVF9QT1MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCVJFR19XUihicCwgTUlTQ19SRUdfU1BJTywgc3Bpb19yZWcpOworCWJueDJ4X2h3X3VubG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9TUElPKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJueDJ4X21kaW8yMl93cml0ZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgdmFsKQogewotCWludCByYzsKLQl1MzIgdG1wLCBpOwogCWludCBwb3J0ID0gYnAtPnBvcnQ7CiAJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwl1MzIgdG1wOworCWludCBpLCByYzsKIAogLyogICAgICBEUChORVRJRl9NU0dfSFcsICJwaHlfYWRkciAweCV4ICByZWcgMHgleCAgdmFsIDB4JTA4eFxuIiwKIAkgICBicC0+cGh5X2FkZHIsIHJlZywgdmFsKTsgKi8KQEAgLTEyMzYsOCArMTQwOSw4IEBACiB7CiAJaW50IHBvcnQgPSBicC0+cG9ydDsKIAl1MzIgZW1hY19iYXNlID0gcG9ydCA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOwotCXUzMiB2YWwsIGk7Ci0JaW50IHJjOworCXUzMiB2YWw7CisJaW50IGksIHJjOwogCiAJaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfSU5UX01PREVfQVVUT19QT0xMSU5HX0ZMQUcpIHsKIApAQCAtMTI4Niw1OCArMTQ1OSw1NCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBibngyeF9tZGlvNDVfd3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIGFkZHIsIHUzMiB2YWwpCitzdGF0aWMgaW50IGJueDJ4X21kaW80NV9jdHJsX3dyaXRlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBtZGlvX2N0cmwsCisJCQkJICAgdTMyIHBoeV9hZGRyLCB1MzIgcmVnLCB1MzIgYWRkciwgdTMyIHZhbCkKIHsKLQlpbnQgcmMgPSAwOwotCXUzMiB0bXAsIGk7Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgZW1hY19iYXNlID0gcG9ydCA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOworCXUzMiB0bXA7CisJaW50IGksIHJjID0gMDsKIAotCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX0lOVF9NT0RFX0FVVE9fUE9MTElOR19GTEFHKSB7Ci0KLQkJdG1wID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JCXRtcCAmPSB+RU1BQ19NRElPX01PREVfQVVUT19QT0xMOwotCQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB0bXApOwotCQlSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQkJdWRlbGF5KDQwKTsKLQl9Ci0KLQkvKiBzZXQgY2xhdXNlIDQ1IG1vZGUgKi8KLQl0bXAgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQl0bXAgfD0gRU1BQ19NRElPX01PREVfQ0xBVVNFXzQ1OwotCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NRElPX01PREUsIHRtcCk7CisJLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6CisJICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgorCSAqLworCXRtcCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOworCXRtcCAmPSB+KEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7CisJdG1wIHw9IChFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfAorCQkoNDkgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7CisJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdG1wKTsKKwlSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwl1ZGVsYXkoNDApOwogCiAJLyogYWRkcmVzcyAqLwotCXRtcCA9ICgoYnAtPnBoeV9hZGRyIDw8IDIxKSB8IChyZWcgPDwgMTYpIHwgYWRkciB8CisJdG1wID0gKChwaHlfYWRkciA8PCAyMSkgfCAocmVnIDw8IDE2KSB8IGFkZHIgfAogCSAgICAgICBFTUFDX01ESU9fQ09NTV9DT01NQU5EX0FERFJFU1MgfAogCSAgICAgICBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKTsKLQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB0bXApOworCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIHRtcCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgewogCQl1ZGVsYXkoMTApOwogCi0JCXRtcCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOworCQl0bXAgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKIAkJaWYgKCEodG1wICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKIAkJCXVkZWxheSg1KTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCiAJaWYgKHRtcCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpIHsKIAkJQk5YMlhfRVJSKCJ3cml0ZSBwaHkgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKIAogCQlyYyA9IC1FQlVTWTsKKwogCX0gZWxzZSB7CiAJCS8qIGRhdGEgKi8KLQkJdG1wID0gKChicC0+cGh5X2FkZHIgPDwgMjEpIHwgKHJlZyA8PCAxNikgfCB2YWwgfAorCQl0bXAgPSAoKHBoeV9hZGRyIDw8IDIxKSB8IChyZWcgPDwgMTYpIHwgdmFsIHwKIAkJICAgICAgIEVNQUNfTURJT19DT01NX0NPTU1BTkRfV1JJVEVfNDUgfAogCQkgICAgICAgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSk7Ci0JCUVNQUNfV1IoRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIHRtcCk7CisJCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIHRtcCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKIAkJCXVkZWxheSgxMCk7CiAKLQkJCXRtcCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOworCQkJdG1wID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSk7CiAJCQlpZiAoISh0bXAgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSkgewogCQkJCXVkZWxheSg1KTsKIAkJCQlicmVhazsKQEAgLTEzNTEsNzUgKzE1MjAsNzggQEAKIAkJfQogCX0KIAotCS8qIHVuc2V0IGNsYXVzZSA0NSBtb2RlICovCi0JdG1wID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JdG1wICY9IH5FTUFDX01ESU9fTU9ERV9DTEFVU0VfNDU7Ci0JRU1BQ19XUihFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdG1wKTsKLQotCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX0lOVF9NT0RFX0FVVE9fUE9MTElOR19GTEFHKSB7Ci0KLQkJdG1wID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CisJLyogdW5zZXQgY2xhdXNlIDQ1IG1vZGUsIHNldCB0aGUgTURJTyBjbG9jayB0byBhIGZhc3RlciB2YWx1ZQorCSAqICgweDEzID0+IDYuMjVNaHopIGFuZCByZXN0b3JlIHRoZSBBVVRPIHBvbGwgaWYgbmVlZGVkCisJICovCisJdG1wID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CisJdG1wICY9IH4oRU1BQ19NRElPX01PREVfQ0xBVVNFXzQ1IHwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKTsKKwl0bXAgfD0gKDB4MTMgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKTsKKwlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkdfRkxBRykKIAkJdG1wIHw9IEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTDsKLQkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdG1wKTsKLQl9CisJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdG1wKTsKIAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBibngyeF9tZGlvNDVfcmVhZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgYWRkciwKLQkJCSAgICAgdTMyICpyZXRfdmFsKQorc3RhdGljIGludCBibngyeF9tZGlvNDVfd3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHBoeV9hZGRyLCB1MzIgcmVnLAorCQkJICAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCiB7Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKLQl1MzIgZW1hY19iYXNlID0gcG9ydCA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOwotCXUzMiB2YWwsIGk7Ci0JaW50IHJjID0gMDsKKwl1MzIgZW1hY19iYXNlID0gYnAtPnBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKIAotCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX0lOVF9NT0RFX0FVVE9fUE9MTElOR19GTEFHKSB7CisJcmV0dXJuIGJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBlbWFjX2Jhc2UsIHBoeV9hZGRyLAorCQkJCSAgICAgICByZWcsIGFkZHIsIHZhbCk7Cit9CiAKLQkJdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JCXZhbCAmPSB+RU1BQ19NRElPX01PREVfQVVUT19QT0xMOwotCQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB2YWwpOwotCQlSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQkJdWRlbGF5KDQwKTsKLQl9CitzdGF0aWMgaW50IGJueDJ4X21kaW80NV9jdHJsX3JlYWQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG1kaW9fY3RybCwKKwkJCQkgIHUzMiBwaHlfYWRkciwgdTMyIHJlZywgdTMyIGFkZHIsCisJCQkJICB1MzIgKnJldF92YWwpCit7CisJdTMyIHZhbDsKKwlpbnQgaSwgcmMgPSAwOwogCi0JLyogc2V0IGNsYXVzZSA0NSBtb2RlICovCi0JdmFsID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7Ci0JdmFsIHw9IEVNQUNfTURJT19NT0RFX0NMQVVTRV80NTsKLQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB2YWwpOworCS8qIHNldCBjbGF1c2UgNDUgbW9kZSwgc2xvdyBkb3duIHRoZSBNRElPIGNsb2NrIHRvIDIuNU1IegorCSAqIChhIHZhbHVlIG9mIDQ5PT0weDMxKSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIEFVVE8gcG9sbCBpcyBvZmYKKwkgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwl2YWwgJj0gfihFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEwgfCBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlQpOworCXZhbCB8PSAoRU1BQ19NRElPX01PREVfQ0xBVVNFXzQ1IHwKKwkJKDQ5IDw8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVF9CSVRTSElGVCkpOworCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUsIHZhbCk7CisJUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CisJdWRlbGF5KDQwKTsKIAogCS8qIGFkZHJlc3MgKi8KLQl2YWwgPSAoKGJwLT5waHlfYWRkciA8PCAyMSkgfCAocmVnIDw8IDE2KSB8IGFkZHIgfAorCXZhbCA9ICgocGh5X2FkZHIgPDwgMjEpIHwgKHJlZyA8PCAxNikgfCBhZGRyIHwKIAkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9BRERSRVNTIHwKIAkgICAgICAgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSk7Ci0JRU1BQ19XUihFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgdmFsKTsKKwlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB2YWwpOwogCiAJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKIAkJdWRlbGF5KDEwKTsKIAotCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKKwkJdmFsID0gUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSk7CiAJCWlmICghKHZhbCAmIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpKSB7CiAJCQl1ZGVsYXkoNSk7CiAJCQlicmVhazsKIAkJfQogCX0KLQogCWlmICh2YWwgJiBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZKSB7CiAJCUJOWDJYX0VSUigicmVhZCBwaHkgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKIAogCQkqcmV0X3ZhbCA9IDA7CiAJCXJjID0gLUVCVVNZOworCiAJfSBlbHNlIHsKIAkJLyogZGF0YSAqLwotCQl2YWwgPSAoKGJwLT5waHlfYWRkciA8PCAyMSkgfCAocmVnIDw8IDE2KSB8CisJCXZhbCA9ICgocGh5X2FkZHIgPDwgMjEpIHwgKHJlZyA8PCAxNikgfAogCQkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9SRUFEXzQ1IHwKIAkJICAgICAgIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kpOwotCQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB2YWwpOworCQlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCB2YWwpOwogCiAJCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CiAJCQl1ZGVsYXkoMTApOwogCi0JCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NKTsKKwkJCXZhbCA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0pOwogCQkJaWYgKCEodmFsICYgRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSkpIHsKIAkJCQl2YWwgJj0gRU1BQ19NRElPX0NPTU1fREFUQTsKIAkJCQlicmVhazsKQEAgLTE0MzYsMzEgKzE2MDgsMzkgQEAKIAkJKnJldF92YWwgPSB2YWw7CiAJfQogCi0JLyogdW5zZXQgY2xhdXNlIDQ1IG1vZGUgKi8KLQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKLQl2YWwgJj0gfkVNQUNfTURJT19NT0RFX0NMQVVTRV80NTsKLQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB2YWwpOwotCi0JaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfSU5UX01PREVfQVVUT19QT0xMSU5HX0ZMQUcpIHsKLQotCQl2YWwgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwkvKiB1bnNldCBjbGF1c2UgNDUgbW9kZSwgc2V0IHRoZSBNRElPIGNsb2NrIHRvIGEgZmFzdGVyIHZhbHVlCisJICogKDB4MTMgPT4gNi4yNU1oeikgYW5kIHJlc3RvcmUgdGhlIEFVVE8gcG9sbCBpZiBuZWVkZWQKKwkgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKKwl2YWwgJj0gfihFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfCBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlQpOworCXZhbCB8PSAoMHgxMyA8PCBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlRfQklUU0hJRlQpOworCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX0lOVF9NT0RFX0FVVE9fUE9MTElOR19GTEFHKQogCQl2YWwgfD0gRU1BQ19NRElPX01PREVfQVVUT19QT0xMOwotCQlFTUFDX1dSKEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB2YWwpOwotCX0KKwlSRUdfV1IoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFLCB2YWwpOwogCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGJueDJ4X21kaW80NV92d3JpdGUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIGFkZHIsIHUzMiB2YWwpCitzdGF0aWMgaW50IGJueDJ4X21kaW80NV9yZWFkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBwaHlfYWRkciwgdTMyIHJlZywKKwkJCSAgICAgdTMyIGFkZHIsIHUzMiAqcmV0X3ZhbCkKK3sKKwl1MzIgZW1hY19iYXNlID0gYnAtPnBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKworCXJldHVybiBibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBlbWFjX2Jhc2UsIHBoeV9hZGRyLAorCQkJCSAgICAgIHJlZywgYWRkciwgcmV0X3ZhbCk7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfbWRpbzQ1X3Z3cml0ZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcGh5X2FkZHIsIHUzMiByZWcsCisJCQkgICAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCiB7CiAJaW50IGk7CiAJdTMyIHJkX3ZhbDsKIAogCW1pZ2h0X3NsZWVwKCk7CiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJYm54MnhfbWRpbzQ1X3dyaXRlKGJwLCByZWcsIGFkZHIsIHZhbCk7CisJCWJueDJ4X21kaW80NV93cml0ZShicCwgcGh5X2FkZHIsIHJlZywgYWRkciwgdmFsKTsKIAkJbXNsZWVwKDUpOwotCQlibngyeF9tZGlvNDVfcmVhZChicCwgcmVnLCBhZGRyLCAmcmRfdmFsKTsKKwkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIHBoeV9hZGRyLCByZWcsIGFkZHIsICZyZF92YWwpOwogCQkvKiBpZiB0aGUgcmVhZCB2YWx1ZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHZhbHVlIHdlIHdyb3RlLAogCQkgICB3ZSBzaG91bGQgd3JpdGUgaXQgYWdhaW4gKi8KIAkJaWYgKHJkX3ZhbCA9PSB2YWwpCkBAIC0xNDcxLDE4ICsxNjUxLDgxIEBACiB9CiAKIC8qCi0gKiBsaW5rIG1hbmFnbWVudAorICogbGluayBtYW5hZ2VtZW50CiAgKi8KIAorc3RhdGljIHZvaWQgYm54MnhfcGF1c2VfcmVzb2x2ZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcGF1c2VfcmVzdWx0KQoreworCXN3aXRjaCAocGF1c2VfcmVzdWx0KSB7CQkJLyogQVNZTSBQIEFTWU0gUCAqLworCWNhc2UgMHhiOgkJCQkvKiAgIDEgIDAgICAxICAxICovCisJCWJwLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfVFg7CisJCWJyZWFrOworCisJY2FzZSAweGU6CQkJCS8qICAgMSAgMSAgIDEgIDAgKi8KKwkJYnAtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9SWDsKKwkJYnJlYWs7CisKKwljYXNlIDB4NToJCQkJLyogICAwICAxICAgMCAgMSAqLworCWNhc2UgMHg3OgkJCQkvKiAgIDAgIDEgICAxICAxICovCisJY2FzZSAweGQ6CQkJCS8qICAgMSAgMSAgIDAgIDEgKi8KKwljYXNlIDB4ZjoJCQkJLyogICAxICAxICAgMSAgMSAqLworCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX0JPVEg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdTggYm54MnhfZXh0X3BoeV9yZXNvdmVfZmMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgZXh0X3BoeV9hZGRyOworCXUzMiBsZF9wYXVzZTsJLyogbG9jYWwgKi8KKwl1MzIgbHBfcGF1c2U7CS8qIGxpbmsgcGFydG5lciAqLworCXUzMiBhbl9jb21wbGV0ZTsgLyogQU4gY29tcGxldGUgKi8KKwl1MzIgcGF1c2VfcmVzdWx0OworCXU4IHJldCA9IDA7CisKKwlleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCisJLyogcmVhZCB0d2ljZSAqLworCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkgIEVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCisJCQkgIEVYVF9QSFlfS1JfU1RBVFVTLCAmYW5fY29tcGxldGUpOworCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkgIEVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCisJCQkgIEVYVF9QSFlfS1JfU1RBVFVTLCAmYW5fY29tcGxldGUpOworCisJaWYgKGFuX2NvbXBsZXRlICYgRVhUX1BIWV9LUl9BVVRPX05FR19DT01QTEVURSkgeworCQlyZXQgPSAxOworCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAorCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKKwkJCQkgIEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJULCAmbGRfcGF1c2UpOworCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAorCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKKwkJCQkgIEVYVF9QSFlfS1JfTFBfQVVUT19ORUcsICZscF9wYXVzZSk7CisJCXBhdXNlX3Jlc3VsdCA9IChsZF9wYXVzZSAmCisJCQkJRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlRfUEFVU0VfTUFTSykgPj4gODsKKwkJcGF1c2VfcmVzdWx0IHw9IChscF9wYXVzZSAmCisJCQkJIEVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUX1BBVVNFX01BU0spID4+IDEwOworCQlEUChORVRJRl9NU0dfTElOSywgIkV4dCBQSFkgcGF1c2UgcmVzdWx0IDB4JXggXG4iLAorCQkgICBwYXVzZV9yZXN1bHQpOworCQlibngyeF9wYXVzZV9yZXNvbHZlKGJwLCBwYXVzZV9yZXN1bHQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBibngyeF9mbG93X2N0cmxfcmVzb2x2ZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZ3Bfc3RhdHVzKQogewotCXUzMiBsZF9wYXVzZTsgICAvKiBsb2NhbCBkcml2ZXIgKi8KLQl1MzIgbHBfcGF1c2U7ICAgLyogbGluayBwYXJ0bmVyICovCisJdTMyIGxkX3BhdXNlOwkvKiBsb2NhbCBkcml2ZXIgKi8KKwl1MzIgbHBfcGF1c2U7CS8qIGxpbmsgcGFydG5lciAqLwogCXUzMiBwYXVzZV9yZXN1bHQ7CiAKIAlicC0+Zmxvd19jdHJsID0gMDsKIAotCS8qIHJlb2x2ZSBmcm9tIGdwX3N0YXR1cyBpbiBjYXNlIG9mIEFOIGNvbXBsZXRlIGFuZCBub3Qgc2dtaWkgKi8KKwkvKiByZXNvbHZlIGZyb20gZ3Bfc3RhdHVzIGluIGNhc2Ugb2YgQU4gY29tcGxldGUgYW5kIG5vdCBzZ21paSAqLwogCWlmICgoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19GTE9XX0NUUkwpICYmCiAJICAgIChncF9zdGF0dXMgJiBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUpICYmCiAJICAgICghKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpICYmCkBAIC0xNDk5LDQ1ICsxNzQyLDU3IEBACiAJCXBhdXNlX3Jlc3VsdCB8PSAobHBfcGF1c2UgJgogCQkJCSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9NQVNLKT4+NzsKIAkJRFAoTkVUSUZfTVNHX0xJTkssICJwYXVzZV9yZXN1bHQgMHgleFxuIiwgcGF1c2VfcmVzdWx0KTsKKwkJYm54MnhfcGF1c2VfcmVzb2x2ZShicCwgcGF1c2VfcmVzdWx0KTsKKwl9IGVsc2UgaWYgKCEoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19GTE9XX0NUUkwpIHx8CisJCSAgICEoYm54MnhfZXh0X3BoeV9yZXNvdmVfZmMoYnApKSkgeworCQkvKiBmb3JjZWQgc3BlZWQgKi8KKwkJaWYgKGJwLT5yZXFfYXV0b25lZyAmIEFVVE9ORUdfRkxPV19DVFJMKSB7CisJCQlzd2l0Y2ggKGJwLT5yZXFfZmxvd19jdHJsKSB7CisJCQljYXNlIEZMT1dfQ1RSTF9BVVRPOgorCQkJCWlmIChicC0+ZGV2LT5tdHUgPD0gNDUwMCkKKwkJCQkJYnAtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9CT1RIOworCQkJCWVsc2UKKwkJCQkJYnAtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9UWDsKKwkJCQlicmVhazsKIAotCQlzd2l0Y2ggKHBhdXNlX3Jlc3VsdCkgeyAJCS8qIEFTWU0gUCBBU1lNIFAgKi8KLQkJY2FzZSAweGI6ICAgICAgIAkJCS8qICAgMSAgMCAgIDEgIDEgKi8KLQkJCWJwLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfVFg7Ci0JCQlicmVhazsKLQotCQljYXNlIDB4ZTogICAgICAgCQkJLyogICAxICAxICAgMSAgMCAqLwotCQkJYnAtPmZsb3dfY3RybCA9IEZMT1dfQ1RSTF9SWDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMHg1OiAgICAgICAJCQkvKiAgIDAgIDEgICAwICAxICovCi0JCWNhc2UgMHg3OiAgICAgICAJCQkvKiAgIDAgIDEgICAxICAxICovCi0JCWNhc2UgMHhkOiAgICAgICAJCQkvKiAgIDEgIDEgICAwICAxICovCi0JCWNhc2UgMHhmOiAgICAgICAJCQkvKiAgIDEgIDEgICAxICAxICovCi0JCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX0JPVEg7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCX0gZWxzZSB7IC8qIGZvcmNlZCBtb2RlICovCi0JCXN3aXRjaCAoYnAtPnJlcV9mbG93X2N0cmwpIHsKLQkJY2FzZSBGTE9XX0NUUkxfQVVUTzoKLQkJCWlmIChicC0+ZGV2LT5tdHUgPD0gNDUwMCkKLQkJCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX0JPVEg7Ci0JCQllbHNlCisJCQljYXNlIEZMT1dfQ1RSTF9UWDoKIAkJCQlicC0+Zmxvd19jdHJsID0gRkxPV19DVFJMX1RYOwotCQkJYnJlYWs7CisJCQkJYnJlYWs7CiAKLQkJY2FzZSBGTE9XX0NUUkxfVFg6Ci0JCWNhc2UgRkxPV19DVFJMX1JYOgotCQljYXNlIEZMT1dfQ1RSTF9CT1RIOgotCQkJYnAtPmZsb3dfY3RybCA9IGJwLT5yZXFfZmxvd19jdHJsOwotCQkJYnJlYWs7CisJCQljYXNlIEZMT1dfQ1RSTF9SWDoKKwkJCQlpZiAoYnAtPmRldi0+bXR1IDw9IDQ1MDApCisJCQkJCWJwLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfUlg7CisJCQkJYnJlYWs7CiAKLQkJY2FzZSBGTE9XX0NUUkxfTk9ORToKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCQkJY2FzZSBGTE9XX0NUUkxfQk9USDoKKwkJCQlpZiAoYnAtPmRldi0+bXR1IDw9IDQ1MDApCisJCQkJCWJwLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfQk9USDsKKwkJCQllbHNlCisJCQkJCWJwLT5mbG93X2N0cmwgPSBGTE9XX0NUUkxfVFg7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRkxPV19DVFJMX05PTkU6CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeyAvKiBmb3JjZWQgbW9kZSAqLworCQkJc3dpdGNoIChicC0+cmVxX2Zsb3dfY3RybCkgeworCQkJY2FzZSBGTE9XX0NUUkxfQVVUTzoKKwkJCQlEUChORVRJRl9NU0dfTElOSywgInJlcV9mbG93X2N0cmwgMHgleCB3aGlsZSIKKwkJCQkJCSAgICIgcmVxX2F1dG9uZWcgMHgleFxuIiwKKwkJCQkgICBicC0+cmVxX2Zsb3dfY3RybCwgYnAtPnJlcV9hdXRvbmVnKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBGTE9XX0NUUkxfVFg6CisJCQljYXNlIEZMT1dfQ1RSTF9SWDoKKwkJCWNhc2UgRkxPV19DVFJMX0JPVEg6CisJCQkJYnAtPmZsb3dfY3RybCA9IGJwLT5yZXFfZmxvd19jdHJsOworCQkJCWJyZWFrOworCisJCQljYXNlIEZMT1dfQ1RSTF9OT05FOgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0KIAlEUChORVRJRl9NU0dfTElOSywgImZsb3dfY3RybCAweCV4XG4iLCBicC0+Zmxvd19jdHJsKTsKQEAgLTE1NDgsOSArMTgwMyw5IEBACiAJYnAtPmxpbmtfc3RhdHVzID0gMDsKIAogCWlmIChncF9zdGF0dXMgJiBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9MSU5LX1NUQVRVUykgewotCQlEUChORVRJRl9NU0dfTElOSywgImxpbmsgdXBcbiIpOworCQlEUChORVRJRl9NU0dfTElOSywgInBoeSBsaW5rIHVwXG4iKTsKIAotCQlicC0+bGlua191cCA9IDE7CisJCWJwLT5waHlfbGlua191cCA9IDE7CiAJCWJwLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19MSU5LX1VQOwogCiAJCWlmIChncF9zdGF0dXMgJiBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9EVVBMRVhfU1RBVFVTKQpAQCAtMTY1OSwyMCArMTkxNCwyMCBAQAogCQkgICAgICAgYnAtPmxpbmtfc3RhdHVzIHw9IExJTktfU1RBVFVTX1JYX0ZMT1dfQ09OVFJPTF9FTkFCTEVEOwogCiAJfSBlbHNlIHsgLyogbGlua19kb3duICovCi0JCURQKE5FVElGX01TR19MSU5LLCAibGluayBkb3duXG4iKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJwaHkgbGluayBkb3duXG4iKTsKIAotCQlicC0+bGlua191cCA9IDA7CisJCWJwLT5waHlfbGlua191cCA9IDA7CiAKIAkJYnAtPmxpbmVfc3BlZWQgPSAwOwogCQlicC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCWJwLT5mbG93X2N0cmwgPSAwOwogCX0KIAotCURQKE5FVElGX01TR19MSU5LLCAiZ3Bfc3RhdHVzIDB4JXggIGxpbmtfdXAgJWRcbiIKKwlEUChORVRJRl9NU0dfTElOSywgImdwX3N0YXR1cyAweCV4ICBwaHlfbGlua191cCAlZFxuIgogCSAgIERQX0xFVkVMICIgIGxpbmVfc3BlZWQgJWQgIGR1cGxleCAlZCAgZmxvd19jdHJsIDB4JXgiCiAJCSAgICAiICBsaW5rX3N0YXR1cyAweCV4XG4iLAotCSAgIGdwX3N0YXR1cywgYnAtPmxpbmtfdXAsIGJwLT5saW5lX3NwZWVkLCBicC0+ZHVwbGV4LCBicC0+Zmxvd19jdHJsLAotCSAgIGJwLT5saW5rX3N0YXR1cyk7CisJICAgZ3Bfc3RhdHVzLCBicC0+cGh5X2xpbmtfdXAsIGJwLT5saW5lX3NwZWVkLCBicC0+ZHVwbGV4LAorCSAgIGJwLT5mbG93X2N0cmwsIGJwLT5saW5rX3N0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfaW50X2FjayhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaXNfMTBnKQpAQCAtMTY4MCw0MCArMTkzNSw0MCBAQAogCWludCBwb3J0ID0gYnAtPnBvcnQ7CiAKIAkvKiBmaXJzdCByZXNldCBhbGwgc3RhdHVzCi0JICogd2UgYXN1bWUgb25seSBvbmUgbGluZSB3aWxsIGJlIGNoYW5nZSBhdCBhIHRpbWUgKi8KKwkgKiB3ZSBhc3N1bWUgb25seSBvbmUgbGluZSB3aWxsIGJlIGNoYW5nZSBhdCBhIHRpbWUgKi8KIAlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkgICAgICAgKE5JR19YR1hTMF9MSU5LX1NUQVRVUyB8Ci0JCQlOSUdfU0VSREVTMF9MSU5LX1NUQVRVUyB8Ci0JCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9YR1hTMF9MSU5LMTBHKSk7Ci0JaWYgKGJwLT5saW5rX3VwKSB7CisJCSAgICAgICAoTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIHwKKwkJCU5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgfAorCQkJTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKSk7CisJaWYgKGJwLT5waHlfbGlua191cCkgewogCQlpZiAoaXNfMTBnKSB7CiAJCQkvKiBEaXNhYmxlIHRoZSAxMEcgbGluayBpbnRlcnJ1cHQKIAkJCSAqIGJ5IHdyaXRpbmcgMSB0byB0aGUgc3RhdHVzIHJlZ2lzdGVyCiAJCQkgKi8KLQkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIFhHWFMgbGluayB1cFxuIik7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjEwRyBYR1hTIHBoeSBsaW5rIHVwXG4iKTsKIAkJCWJueDJ4X2JpdHNfZW4oYnAsCiAJCQkJICAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkJCSAgICAgIE5JR19TVEFUVVNfSU5URVJSVVBUX1hHWFMwX0xJTksxMEcpOworCQkJCSAgICAgIE5JR19TVEFUVVNfWEdYUzBfTElOSzEwRyk7CiAKIAkJfSBlbHNlIGlmIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewogCQkJLyogRGlzYWJsZSB0aGUgbGluayBpbnRlcnJ1cHQKIAkJCSAqIGJ5IHdyaXRpbmcgMSB0byB0aGUgcmVsZXZhbnQgbGFuZQogCQkJICogaW4gdGhlIHN0YXR1cyByZWdpc3RlcgogCQkJICovCi0JCQlEUChORVRJRl9NU0dfTElOSywgIjFHIFhHWFMgbGluayB1cFxuIik7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjFHIFhHWFMgcGh5IGxpbmsgdXBcbiIpOwogCQkJYm54MnhfYml0c19lbihicCwKIAkJCQkgICAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCiAJCQkJICAgICAgKCgxIDw8IGJwLT5zZXJfbGFuZSkgPDwKLQkJCQkgICAgICAgTklHX1hHWFMwX0xJTktfU1RBVFVTX1NJWkUpKTsKKwkJCQkgICAgICAgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVU19TSVpFKSk7CiAKIAkJfSBlbHNlIHsgLyogU2VyRGVzICovCi0JCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlcyBsaW5rIHVwXG4iKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIHBoeSBsaW5rIHVwXG4iKTsKIAkJCS8qIERpc2FibGUgdGhlIGxpbmsgaW50ZXJydXB0CiAJCQkgKiBieSB3cml0aW5nIDEgdG8gdGhlIHN0YXR1cyByZWdpc3RlcgogCQkJICovCiAJCQlibngyeF9iaXRzX2VuKGJwLAogCQkJCSAgICAgIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJCQkgICAgICBOSUdfU0VSREVTMF9MSU5LX1NUQVRVUyk7CisJCQkJICAgICAgTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKTsKIAkJfQogCiAJfSBlbHNlIHsgLyogbGlua19kb3duICovCkBAIC0xNzI0LDkxICsxOTc5LDE4MiBAQAogewogCXUzMiBleHRfcGh5X3R5cGU7CiAJdTMyIGV4dF9waHlfYWRkcjsKLQl1MzIgbG9jYWxfcGh5OwotCXUzMiB2YWwgPSAwOworCXUzMiB2YWwxID0gMCwgdmFsMjsKIAl1MzIgcnhfc2QsIHBjc19zdGF0dXM7CiAKIAlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJbG9jYWxfcGh5ID0gYnAtPnBoeV9hZGRyOwogCQlleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCiAJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CiAJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwotCQlicC0+cGh5X2FkZHIgPSAodTgpZXh0X3BoeV9hZGRyOwogCiAJCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwKTsKIAkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgRGlyZWN0XG4iKTsKLQkJCXZhbCA9IDE7CisJCQl2YWwxID0gMTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKIAkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA1XG4iKTsKLQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBFWFRfUEhZX09QVF9XSVNfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IExBU0kgc3RhdHVzIGlzICVkXG4iLCB2YWwpOworCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX09QVF9XSVNfREVWQUQsCisJCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNSBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKIAotCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIEVYVF9QSFlfT1BUX1dJU19ERVZBRCwKLQkJCQkJICBFWFRfUEhZX09QVF9MQVNJX1NUQVRVUywgJnZhbCk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDUgTEFTSSBzdGF0dXMgaXMgJWRcbiIsIHZhbCk7CisJCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgIEVYVF9QSFlfT1BUX1dJU19ERVZBRCwKKwkJCQkJICBFWFRfUEhZX09QVF9MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOwogCi0JCQlibngyeF9tZGlvNDVfcmVhZChicCwgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKKwkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKIAkJCQkJICBFWFRfUEhZX09QVF9QTURfUlhfU0QsICZyeF9zZCk7Ci0JCQl2YWwgPSAocnhfc2QgJiAweDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IHJ4X3NkIDB4JXhcbiIsIHJ4X3NkKTsKKwkJCXZhbDEgPSAocnhfc2QgJiAweDEpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDZcbiIpOwotCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCi0JCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IExBU0kgc3RhdHVzIGlzICVkXG4iLCB2YWwpOworCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkgIEVYVF9QSFlfT1BUX0xBU0lfU1RBVFVTLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYgTEFTSSBzdGF0dXMgMHgleFxuIiwgdmFsMSk7CiAKLQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAotCQkJCQkgIEVYVF9QSFlfT1BUX0xBU0lfU1RBVFVTLCAmdmFsKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiBMQVNJIHN0YXR1cyBpcyAlZFxuIiwgdmFsKTsKKwkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKKwkJCQkJICBFWFRfUEhZX09QVF9MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOwogCi0JCQlibngyeF9tZGlvNDVfcmVhZChicCwgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKKwkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKIAkJCQkJICBFWFRfUEhZX09QVF9QTURfUlhfU0QsICZyeF9zZCk7Ci0JCQlibngyeF9tZGlvNDVfcmVhZChicCwgRVhUX1BIWV9PUFRfUENTX0RFVkFELAotCQkJCQkgRVhUX1BIWV9PUFRfUENTX1NUQVRVUywgJnBjc19zdGF0dXMpOworCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX09QVF9QQ1NfREVWQUQsCisJCQkJCSAgRVhUX1BIWV9PUFRfUENTX1NUQVRVUywgJnBjc19zdGF0dXMpOworCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX0FVVE9fTkVHX0RFVkFELAorCQkJCQkgIEVYVF9QSFlfT1BUX0FOX0xJTktfU1RBVFVTLCAmdmFsMik7CisKIAkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiByeF9zZCAweCV4IgotCQkJICAgIiAgcGNzX3N0YXR1cyAweCV4XG4iLCByeF9zZCwgcGNzX3N0YXR1cyk7Ci0JCQkvKiBsaW5rIGlzIHVwIGlmIGJvdGggYml0IDAgb2YgcG1kX3J4IGFuZAotCQkJICogYml0IDAgb2YgcGNzX3N0YXR1cyBhcmUgc2V0CisJCQkgICAiICBwY3Nfc3RhdHVzIDB4JXggMUdicHMgbGlua19zdGF0dXMgMHgleCAweCV4XG4iLAorCQkJICAgcnhfc2QsIHBjc19zdGF0dXMsIHZhbDIsICh2YWwyICYgKDE8PDEpKSk7CisJCQkvKiBsaW5rIGlzIHVwIGlmIGJvdGggYml0IDAgb2YgcG1kX3J4X3NkIGFuZAorCQkJICogYml0IDAgb2YgcGNzX3N0YXR1cyBhcmUgc2V0LCBvciBpZiB0aGUgYXV0b25lZyBiaXQKKwkJCSAgIDEgaXMgc2V0CiAJCQkgKi8KLQkJCXZhbCA9IChyeF9zZCAmIHBjc19zdGF0dXMpOworCQkJdmFsMSA9ICgocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB8fCAodmFsMiAmICgxPDwxKSkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCisJCQkvKiBjbGVhciB0aGUgaW50ZXJydXB0IExBU0kgc3RhdHVzIHJlZ2lzdGVyICovCisJCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QQ1NfREVWQUQsCisJCQkJCSAgICAgICBFWFRfUEhZX0tSX0xBU0lfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QQ1NfREVWQUQsCisJCQkJCSAgICAgICBFWFRfUEhZX0tSX0xBU0lfU1RBVFVTLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIktSIExBU0kgc3RhdHVzIDB4JXgtPjB4JXhcbiIsCisJCQkgICB2YWwyLCB2YWwxKTsKKwkJCS8qIENoZWNrIHRoZSBMQVNJICovCisJCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAorCQkJCQkgICAgICAgMHg5MDAzLCAmdmFsMik7CisJCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAorCQkJCQkgICAgICAgMHg5MDAzLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIktSIDB4OTAwMyAweCV4LT4weCV4XG4iLAorCQkJICAgdmFsMiwgdmFsMSk7CisJCQkvKiBDaGVjayB0aGUgbGluayBzdGF0dXMgKi8KKwkJCWJueDJ4X21kaW80NV9jdHJsX3JlYWQoYnAsIEdSQ0JBU0VfRU1BQzAsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBFWFRfUEhZX0tSX1BDU19ERVZBRCwKKwkJCQkJICAgICAgIEVYVF9QSFlfS1JfUENTX1NUQVRVUywgJnZhbDIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJLUiBQQ1Mgc3RhdHVzIDB4JXhcbiIsIHZhbDIpOworCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9uIDEuMS4yICovCisJCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkgIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkgIEVYVF9QSFlfS1JfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9tZGlvNDVfY3RybF9yZWFkKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkgIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkgIEVYVF9QSFlfS1JfU1RBVFVTLCAmdmFsMSk7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAgICJLUiBQTUEgc3RhdHVzIDB4JXgtPjB4JXhcbiIsIHZhbDIsIHZhbDEpOworCQkJdmFsMSA9ICgodmFsMSAmIDQpID09IDQpOworCQkJLyogSWYgMUcgd2FzIHJlcXVlc3RlZCBhc3N1bWUgdGhlIGxpbmsgaXMgdXAgKi8KKwkJCWlmICghKGJwLT5yZXFfYXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpICYmCisJCQkgICAgKGJwLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSkKKwkJCQl2YWwxID0gMTsKKwkJCWJueDJ4X2h3X3VubG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkgIEVYVF9QSFlfT1BUX0xBU0lfU1RBVFVTLCAmdmFsMik7CisJCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQkJCSAgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJICAgIjEwRy1iYXNlLVQgTEFTSSBzdGF0dXMgMHgleC0+MHgleFxuIiwgdmFsMiwgdmFsMSk7CisJCQlibngyeF9tZGlvNDVfcmVhZChicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQkJCSAgRVhUX1BIWV9LUl9TVEFUVVMsICZ2YWwyKTsKKwkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKKwkJCQkJICBFWFRfUEhZX0tSX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgICAiMTBHLWJhc2UtVCBQTUEgc3RhdHVzIDB4JXgtPjB4JXhcbiIsIHZhbDIsIHZhbDEpOworCQkJdmFsMSA9ICgodmFsMSAmIDQpID09IDQpOworCQkJLyogaWYgbGluayBpcyB1cAorCQkJICogcHJpbnQgdGhlIEFOIG91dGNvbWUgb2YgdGhlIFNGWDcxMDEgUEhZCisJCQkgKi8KKwkJCWlmICh2YWwxKSB7CisJCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKKwkJCQkJCSAgMHgyMSwgJnZhbDIpOworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAgICJTRlg3MTAxIEFOIHN0YXR1cyAweCV4LT4lc1xuIiwgdmFsMiwKKwkJCQkgICAodmFsMiAmICgxPDwxNCkpID8gIk1hc3RlciIgOiAiU2xhdmUiKTsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCiAJCQkgICBicC0+ZXh0X3BoeV9jb25maWcpOwotCQkJdmFsID0gMDsKKwkJCXZhbDEgPSAwOwogCQkJYnJlYWs7CiAJCX0KLQkJYnAtPnBoeV9hZGRyID0gbG9jYWxfcGh5OwogCiAJfSBlbHNlIHsgLyogU2VyRGVzICovCiAJCWV4dF9waHlfdHlwZSA9IFNFUkRFU19FWFRfUEhZX1RZUEUoYnApOwogCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewogCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfRElSRUNUOgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgRGlyZWN0XG4iKTsKLQkJCXZhbCA9IDE7CisJCQl2YWwxID0gMTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyOgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgNTQ4MlxuIik7Ci0JCQl2YWwgPSAxOworCQkJdmFsMSA9IDE7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgU2VyRGVzIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCiAJCQkgICBicC0+ZXh0X3BoeV9jb25maWcpOwotCQkJdmFsID0gMDsKKwkJCXZhbDEgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlyZXR1cm4gdmFsOworCXJldHVybiB2YWwxOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9ibWFjX2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaXNfbGIpCkBAIC0xODE5LDcgKzIxNjUsNyBAQAogCXUzMiB3Yl93cml0ZVsyXTsKIAl1MzIgdmFsOwogCi0JRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVpbmcgQmlnTUFDXG4iKTsKKwlEUChORVRJRl9NU0dfTElOSywgImVuYWJsaW5nIEJpZ01BQ1xuIik7CiAJLyogcmVzZXQgYW5kIHVucmVzZXQgdGhlIEJpZ01hYyAqLwogCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCiAJICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOwpAQCAtMTkzMyw2ICsyMjc5LDM1IEBACiAJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRU5BQkxFOwogfQogCitzdGF0aWMgdm9pZCBibngyeF9ibWFjX3J4X2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IGJwLT5wb3J0OworCXUzMiBibWFjX2FkZHIgPSBwb3J0ID8gTklHX1JFR19JTkdSRVNTX0JNQUMxX01FTSA6CisJCQkgICAgICAgTklHX1JFR19JTkdSRVNTX0JNQUMwX01FTTsKKwl1MzIgd2Jfd3JpdGVbMl07CisKKwkvKiBPbmx5IGlmIHRoZSBibWFjIGlzIG91dCBvZiByZXNldCAqLworCWlmIChSRUdfUkQoYnAsIE1JU0NfUkVHX1JFU0VUX1JFR18yKSAmCisJCQkoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKSB7CisJCS8qIENsZWFyIFJ4IEVuYWJsZSBiaXQgaW4gQk1BQ19DT05UUk9MIHJlZ2lzdGVyICovCisjaWZkZWYgQk5YMlhfRE1BRV9SRAorCQlibngyeF9yZWFkX2RtYWUoYnAsIGJtYWNfYWRkciArCisJCQkJQklHTUFDX1JFR0lTVEVSX0JNQUNfQ09OVFJPTCwgMik7CisJCXdiX3dyaXRlWzBdID0gKmJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKTsKKwkJd2Jfd3JpdGVbMV0gPSAqYm54Mnhfc3AoYnAsIHdiX2RhdGFbMV0pOworI2Vsc2UKKwkJd2Jfd3JpdGVbMF0gPSBSRUdfUkQoYnAsCisJCQkJYm1hY19hZGRyICsgQklHTUFDX1JFR0lTVEVSX0JNQUNfQ09OVFJPTCk7CisJCXdiX3dyaXRlWzFdID0gUkVHX1JEKGJwLAorCQkJCWJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9CTUFDX0NPTlRST0wgKyA0KTsKKyNlbmRpZgorCQl3Yl93cml0ZVswXSAmPSB+Qk1BQ19DT05UUk9MX1JYX0VOQUJMRTsKKwkJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9CTUFDX0NPTlRST0wsCisJCQkgICAgd2Jfd3JpdGUsIDIpOworCQltc2xlZXAoMSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBibngyeF9lbWFjX2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gYnAtPnBvcnQ7CkBAIC0xOTQwLDcgKzIzMTUsNyBAQAogCXUzMiB2YWw7CiAJaW50IHRpbWVvdXQ7CiAKLQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWluZyBFTUFDXG4iKTsKKwlEUChORVRJRl9NU0dfTElOSywgImVuYWJsaW5nIEVNQUNcbiIpOwogCS8qIHJlc2V0IGFuZCB1bnJlc2V0IHRoZSBlbWFjIGNvcmUgKi8KIAlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAogCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0VNQUMwX0hBUkRfQ09SRSA8PCBwb3J0KSk7CkBAIC0yMDMzLDcgKzI0MDgsNyBAQAogCQkJCSAgICAgIEVNQUNfVFhfTU9ERV9FWFRfUEFVU0VfRU4pOwogCX0KIAotCS8qIEtFRVBfVkxBTl9UQUcsIHByb21pc2NvdXMgKi8KKwkvKiBLRUVQX1ZMQU5fVEFHLCBwcm9taXNjdW91cyAqLwogCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19SWF9NT0RFKTsKIAl2YWwgfD0gRU1BQ19SWF9NT0RFX0tFRVBfVkxBTl9UQUcgfCBFTUFDX1JYX01PREVfUFJPTUlTQ1VPVVM7CiAJRU1BQ19XUihFTUFDX1JFR19FTUFDX1JYX01PREUsIHZhbCk7CkBAIC0yMTYxLDcgKzI1MzYsNiBAQAogCXUzMiBjb3VudCA9IDEwMDA7CiAJdTMyIHBhdXNlID0gMDsKIAotCiAJLyogZGlzYWJsZSBwb3J0ICovCiAJUkVHX1dSKGJwLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMCArIHBvcnQqNCwgMHgxKTsKIApAQCAtMjIzMiw3ICsyNjA2LDcgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9tbmcoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpZiAoIW5vbWNwKQotCQlTSE1FTV9XUihicCwgZHJ2X2Z3X21iW2JwLT5wb3J0XS5saW5rX3N0YXR1cywKKwkJU0hNRU1fV1IoYnAsIHBvcnRfbWJbYnAtPnBvcnRdLmxpbmtfc3RhdHVzLAogCQkJIGJwLT5saW5rX3N0YXR1cyk7CiB9CiAKQEAgLTIyOTQsMjAgKzI2NjgsMjAgQEAKIAkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHNfc3RhdGUgLSBTVE9QXG4iKTsKIAl9CiAKLQkvKiBpbmRpY2F0ZSBsaW5rIGRvd24gKi8KKwkvKiBpbmRpY2F0ZSBubyBtYWMgYWN0aXZlICovCiAJYnAtPnBoeV9mbGFncyAmPSB+KFBIWV9CTUFDX0ZMQUcgfCBQSFlfRU1BQ19GTEFHKTsKIAotCS8qIHJlc2V0IEJpZ01hYyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcG9ydCkpOwotCi0JLyogaWdub3JlIGRyYWluIGZsYWcgaW50ZXJydXB0ICovCi0JLyogYWN0aXZhdGUgbmlnIGRyYWluICovCi0JTklHX1dSKE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcG9ydCo0LCAxKTsKLQogCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCiAJYm54MnhfdXBkYXRlX21uZyhicCk7CiAKKwkvKiBhY3RpdmF0ZSBuaWcgZHJhaW4gKi8KKwlOSUdfV1IoTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKyBwb3J0KjQsIDEpOworCisJLyogcmVzZXQgQmlnTWFjICovCisJYm54MnhfYm1hY19yeF9kaXNhYmxlKGJwKTsKKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAorCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKKwogCS8qIGluZGljYXRlIGxpbmsgZG93biAqLwogCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKIH0KQEAgLTIzMTcsMTQgKzI2OTEsMTUgQEAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JdTMyIGdwX3N0YXR1czsKIAlpbnQgcG9ydCA9IGJwLT5wb3J0OwogCWludCBpOworCXUzMiBncF9zdGF0dXM7CiAJaW50IGxpbmtfMTBnOwogCi0JRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCBpcyB4Z3hzICV4LCBzdGF0X21hc2sgMHgleCwiCisJRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCAlcywgaW50X3N0YXR1cyAweCV4LCIKIAkgICAiIGludF9tYXNrIDB4JXgsIHNhdmVkX21hc2sgMHgleCwgTUlfSU5UICV4LCBTRVJERVNfTElOSyAleCwiCi0JICAgIiAxMEcgJXgsIFhHWFNfTElOSyAleFxuIiwgcG9ydCwgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSwKKwkgICAiIDEwRyAleCwgWEdYU19MSU5LICV4XG4iLCBwb3J0LAorCSAgIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRyk/ICJYR1hTIjoiU2VyRGVzIiwKIAkgICBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCksCiAJICAgUkVHX1JEKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSwgYnAtPm5pZ19tYXNrLAogCSAgIFJFR19SRChicCwgTklHX1JFR19FTUFDMF9TVEFUVVNfTUlTQ19NSV9JTlQgKyBwb3J0KjB4MTgpLApAQCAtMjMzNiw3ICsyNzExLDcgQEAKIAltaWdodF9zbGVlcCgpOwogCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LX0dQX1NUQVRVUyk7CiAJLyogYXZvaWQgZmFzdCB0b2dnbGluZyAqLwotCWZvciAoaSA9IDAgOyBpIDwgMTAgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQltc2xlZXAoMTApOwogCQlibngyeF9tZGlvMjJfcmVhZChicCwgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzEsCiAJCQkJICAmZ3Bfc3RhdHVzKTsKQEAgLTIzNTEsNyArMjcyNiw4IEBACiAJYm54MnhfbGlua19pbnRfYWNrKGJwLCBsaW5rXzEwZyk7CiAKIAkvKiBsaW5rIGlzIHVwIG9ubHkgaWYgYm90aCBsb2NhbCBwaHkgYW5kIGV4dGVybmFsIHBoeSBhcmUgdXAgKi8KLQlpZiAoYnAtPmxpbmtfdXAgJiYgYm54MnhfZXh0X3BoeV9pc19saW5rX3VwKGJwKSkgeworCWJwLT5saW5rX3VwID0gKGJwLT5waHlfbGlua191cCAmJiBibngyeF9leHRfcGh5X2lzX2xpbmtfdXAoYnApKTsKKwlpZiAoYnAtPmxpbmtfdXApIHsKIAkJaWYgKGxpbmtfMTBnKSB7CiAJCQlibngyeF9ibWFjX2VuYWJsZShicCwgMCk7CiAJCQlibngyeF9sZWRzX3NldChicCwgU1BFRURfMTAwMDApOwpAQCAtMjQyNyw3ICsyODAzLDkgQEAKIAkJfQogCX0KIAotCUJOWDJYX0VSUigiQlVHISB1bmljb3JlIGlzIHN0aWxsIGluIHJlc2V0IVxuIik7CisJQk5YMlhfRVJSKCJCVUchICVzICgweCV4KSBpcyBzdGlsbCBpbiByZXNldCFcbiIsCisJCSAgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKT8gIlhHWFMiOiJTZXJEZXMiLAorCQkgIGJwLT5waHlfYWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9zd2FwX2xhbmVzKHN0cnVjdCBibngyeCAqYnApCkBAIC0yNDc1LDEyICsyODUzLDEyIEBACiAJCU1ESU9fU0VUX1JFR19CQU5LKGJwLCBNRElPX1JFR19CQU5LXzEwR19QQVJBTExFTF9ERVRFQ1QpOwogCiAJCWJueDJ4X21kaW8yMl93cml0ZShicCwKLQkJCQkgICBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOSywKKwkJCQlNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOSywKIAkJCSAgICAgICBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfTElOS19DTlQpOwogCiAJCWJueDJ4X21kaW8yMl9yZWFkKGJwLAotCQkJCSBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTCwKLQkJCQkgICZjb250cm9sMik7CisJCQkJTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0wsCisJCQkJJmNvbnRyb2wyKTsKIAogCQlpZiAoYnAtPmF1dG9uZWcgJiBBVVRPTkVHX1BBUkFMTEVMKSB7CiAJCQljb250cm9sMiB8PQpAQCAtMjQ5MCw4ICsyODY4LDE0IEBACiAJCSAgIH5NRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTF9QQVJERVQxMEdfRU47CiAJCX0KIAkJYm54MnhfbWRpbzIyX3dyaXRlKGJwLAotCQkJCSBNRElPXzEwR19QQVJBTExFTF9ERVRFQ1RfUEFSX0RFVF8xMEdfQ09OVFJPTCwKLQkJCQkgICBjb250cm9sMik7CisJCQkJTURJT18xMEdfUEFSQUxMRUxfREVURUNUX1BBUl9ERVRfMTBHX0NPTlRST0wsCisJCQkJY29udHJvbDIpOworCisJCS8qIERpc2FibGUgcGFyYWxsZWwgZGV0ZWN0aW9uIG9mIEhpRyAqLworCQlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMik7CisJCWJueDJ4X21kaW8yMl93cml0ZShicCwgTURJT19YR1hTX0JMT0NLMl9VTklDT1JFX01PREVfMTBHLAorCQkJCU1ESU9fWEdYU19CTE9DSzJfVU5JQ09SRV9NT0RFXzEwR19DWDRfWEdYUyB8CisJCQkJTURJT19YR1hTX0JMT0NLMl9VTklDT1JFX01PREVfMTBHX0hJR0lHX1hHWFMpOwogCX0KIH0KIApAQCAtMjYyNSw3ICszMDA5LDcgQEAKIAlNRElPX1NFVF9SRUdfQkFOSyhicCwgTURJT19SRUdfQkFOS19PVkVSXzFHKTsKIAogCS8qIHNldCBleHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KLQlpZiAoYnAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8yNTAwYmFzZVRfRnVsbCkKKwlpZiAoYnAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCkKIAkJdmFsIHw9IE1ESU9fT1ZFUl8xR19VUDFfMl81RzsKIAlpZiAoYnAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwpCiAJCXZhbCB8PSBNRElPX09WRVJfMUdfVVAxXzEwRzsKQEAgLTI2NDEsMjAgKzMwMjUsOTEgQEAKIAkvKiBmb3IgQU4sIHdlIGFyZSBhbHdheXMgcHVibGlzaGluZyBmdWxsIGR1cGxleCAqLwogCWFuX2FkdiA9IE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX0ZVTExfRFVQTEVYOwogCi0JLyogc2V0IHBhdXNlICovCi0Jc3dpdGNoIChicC0+cGF1c2VfbW9kZSkgewotCWNhc2UgUEFVU0VfU1lNTUVUUklDOgotCQlhbl9hZHYgfD0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfU1lNTUVUUklDOwotCQlicmVhazsKLQljYXNlIFBBVVNFX0FTWU1NRVRSSUM6Ci0JCWFuX2FkdiB8PSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOwotCQlicmVhazsKLQljYXNlIFBBVVNFX0JPVEg6Ci0JCWFuX2FkdiB8PSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOwotCQlicmVhazsKLQljYXNlIFBBVVNFX05PTkU6Ci0JCWFuX2FkdiB8PSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9OT05FOwotCQlicmVhazsKKwkvKiByZXNvbHZlIHBhdXNlIG1vZGUgYW5kIGFkdmVydGlzZW1lbnQKKwkgKiBQbGVhc2UgcmVmZXIgdG8gVGFibGUgMjhCLTMgb2YgdGhlIDgwMi4zYWItMTk5OSBzcGVjICovCisJaWYgKGJwLT5yZXFfYXV0b25lZyAmIEFVVE9ORUdfRkxPV19DVFJMKSB7CisJCXN3aXRjaCAoYnAtPnJlcV9mbG93X2N0cmwpIHsKKwkJY2FzZSBGTE9XX0NUUkxfQVVUTzoKKwkJCWlmIChicC0+ZGV2LT5tdHUgPD0gNDUwMCkgeworCQkJCWFuX2FkdiB8PQorCQkJCSAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDsKKwkJCQlicC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfUGF1c2UgfAorCQkJCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7CisJCQl9IGVsc2UgeworCQkJCWFuX2FkdiB8PQorCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7CisJCQkJYnAtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRkxPV19DVFJMX1RYOgorCQkJYW5fYWR2IHw9CisJCQkgICAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQzsKKwkJCWJwLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisJCQlicmVhazsKKworCQljYXNlIEZMT1dfQ1RSTF9SWDoKKwkJCWlmIChicC0+ZGV2LT5tdHUgPD0gNDUwMCkgeworCQkJCWFuX2FkdiB8PQorCQkJCSAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDsKKwkJCQlicC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfUGF1c2UgfAorCQkJCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7CisJCQl9IGVsc2UgeworCQkJCWFuX2FkdiB8PQorCQkJCSAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfTk9ORTsKKwkJCQlicC0+YWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJCSAgICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRkxPV19DVFJMX0JPVEg6CisJCQlpZiAoYnAtPmRldi0+bXR1IDw9IDQ1MDApIHsKKwkJCQlhbl9hZHYgfD0KKwkJCQkgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg7CisJCQkJYnAtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJCSAgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOworCQkJfSBlbHNlIHsKKwkJCQlhbl9hZHYgfD0KKwkJCSAgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOworCQkJCWJwLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEZMT1dfQ1RSTF9OT05FOgorCQlkZWZhdWx0OgorCQkJYW5fYWR2IHw9IE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX05PTkU7CisJCQlicC0+YWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJICAgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeyAvKiBmb3JjZWQgbW9kZSAqLworCQlzd2l0Y2ggKGJwLT5yZXFfZmxvd19jdHJsKSB7CisJCWNhc2UgRkxPV19DVFJMX0FVVE86CisJCQlEUChORVRJRl9NU0dfTElOSywgInJlcV9mbG93X2N0cmwgMHgleCB3aGlsZSIKKwkJCQkJICAgIiByZXFfYXV0b25lZyAweCV4XG4iLAorCQkJICAgYnAtPnJlcV9mbG93X2N0cmwsIGJwLT5yZXFfYXV0b25lZyk7CisJCQlicmVhazsKKworCQljYXNlIEZMT1dfQ1RSTF9UWDoKKwkJCWFuX2FkdiB8PQorCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0FTWU1NRVRSSUM7CisJCQlicC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOworCQkJYnJlYWs7CisKKwkJY2FzZSBGTE9XX0NUUkxfUlg6CisJCWNhc2UgRkxPV19DVFJMX0JPVEg6CisJCQlhbl9hZHYgfD0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQk9USDsKKwkJCWJwLT5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9QYXVzZSB8CisJCQkJCSAgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGTE9XX0NUUkxfTk9ORToKKwkJZGVmYXVsdDoKKwkJCWFuX2FkdiB8PSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9OT05FOworCQkJYnAtPmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9QYXVzZSB8CisJCQkJCSAgICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCQl9CiAJfQogCiAJTURJT19TRVRfUkVHX0JBTksoYnAsIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTApOwpAQCAtMjc1Miw0NyArMzIwNywxNjIgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfaW50X2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gYnAtPnBvcnQ7CisJdTMyIGV4dF9waHlfdHlwZTsKKwl1MzIgbWFzazsKIAogCS8qIHNldHRpbmcgdGhlIHN0YXR1cyB0byByZXBvcnQgb24gbGluayB1cAogCSAgIGZvciBlaXRoZXIgWEdYUyBvciBTZXJEZXMgKi8KIAlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkgICAgICAgKE5JR19YR1hTMF9MSU5LX1NUQVRVUyB8Ci0JCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9YR1hTMF9MSU5LMTBHIHwKLQkJCU5JR19TRVJERVMwX0xJTktfU1RBVFVTKSk7CisJCSAgICAgICAoTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIHwKKwkJCU5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgfAorCQkJTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTKSk7CiAKIAlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJLyogVEJEIC0KLQkJICogaW4gZm9yY2UgbW9kZSAobm90IEFOKSB3ZSBjYW4gZW5hYmxlIGp1c3QgdGhlIHJlbGV2YW50Ci0JCSAqIGludGVycnVwdAotCQkgKiBFdmVuIGluIEFOIHdlIG1pZ2h0IGVuYWJsZSBvbmx5IG9uZSBhY2NvcmRpbmcgdG8gdGhlIEFOCi0JCSAqIHNwZWVkIG1hc2sKLQkJICovCi0JCWJueDJ4X2JpdHNfZW4oYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCi0JCQkgICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAotCQkJICAgICAgIE5JR19NQVNLX1hHWFMwX0xJTksxMEcpKTsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGUgWEdYUyBpbnRlcnJ1cHRcbiIpOworCQltYXNrID0gKE5JR19NQVNLX1hHWFMwX0xJTksxMEcgfAorCQkJTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMpOworCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgWEdYUyBpbnRlcnJ1cHRcbiIpOworCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicCk7CisJCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRSkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikpIHsKKwkJCW1hc2sgfD0gTklHX01BU0tfTUlfSU5UOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIGV4dGVybmFsIHBoeSBpbnRcbiIpOworCQl9CiAKIAl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KLQkJYm54MnhfYml0c19lbihicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJCSAgICAgIE5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMpOwotCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZSBTZXJEZXMgaW50ZXJydXB0XG4iKTsKKwkJbWFzayA9IE5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVM7CisJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlZCBTZXJEZXMgaW50ZXJydXB0XG4iKTsKKwkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShicCk7CisJCWlmICgoZXh0X3BoeV90eXBlICE9CisJCQkJUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpICYmCisJCSAgICAoZXh0X3BoeV90eXBlICE9CisJCQkJUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikpIHsKKwkJCW1hc2sgfD0gTklHX01BU0tfTUlfSU5UOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIGV4dGVybmFsIHBoeSBpbnRcbiIpOworCQl9CiAJfQorCWJueDJ4X2JpdHNfZW4oYnAsCisJCSAgICAgIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCisJCSAgICAgIG1hc2spOworCURQKE5FVElGX01TR19MSU5LLCAicG9ydCAleCwgJXMsIGludF9zdGF0dXMgMHgleCwiCisJICAgIiBpbnRfbWFzayAweCV4LCBNSV9JTlQgJXgsIFNFUkRFU19MSU5LICV4LCIKKwkgICAiIDEwRyAleCwgWEdYU19MSU5LICV4XG4iLCBwb3J0LAorCSAgIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRyk/ICJYR1hTIjoiU2VyRGVzIiwKKwkgICBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCksCisJICAgUkVHX1JEKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSwKKwkgICBSRUdfUkQoYnAsIE5JR19SRUdfRU1BQzBfU1RBVFVTX01JU0NfTUlfSU5UICsgcG9ydCoweDE4KSwKKwkgICBSRUdfUkQoYnAsIE5JR19SRUdfU0VSREVTMF9TVEFUVVNfTElOS19TVEFUVVMgKyBwb3J0KjB4M2MpLAorCSAgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOSzEwRyArIHBvcnQqMHg2OCksCisJICAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LX1NUQVRVUyArIHBvcnQqMHg2OCkKKwkpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIGV4dF9waHlfYWRkciA9ICgoYnAtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTMyIGZ3X3ZlcjEsIGZ3X3ZlcjI7CisKKwkvKiBOZWVkIHRvIHdhaXQgMjAwbXMgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMjAwKTsKKwkvKiBCb290IHBvcnQgZnJvbSBleHRlcm5hbCBST00KKwkgKiBTZXQgc2VyX2Jvb3RfY3RsIGJpdCBpbiB0aGUgTUlTQ19DVFJMMSByZWdpc3RlcgorCSAqLworCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLCBleHRfcGh5X2FkZHIsCisJCQkJRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELAorCQkJCUVYVF9QSFlfS1JfTUlTQ19DVFJMMSwgMHgwMDAxKTsKKworCS8qIFJlc2V0IGludGVybmFsIG1pY3JvcHJvY2Vzc29yICovCisJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKKwkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsIEVYVF9QSFlfS1JfR0VOX0NUUkwsCisJCQkJRVhUX1BIWV9LUl9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCS8qIHNldCBtaWNybyByZXNldCA9IDAgKi8KKwlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwgZXh0X3BoeV9hZGRyLAorCQkJCUVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwgRVhUX1BIWV9LUl9HRU5fQ1RSTCwKKwkJCQlFWFRfUEhZX0tSX1JPTV9NSUNST19SRVNFVCk7CisJLyogUmVzZXQgaW50ZXJuYWwgbWljcm9wcm9jZXNzb3IgKi8KKwlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwgZXh0X3BoeV9hZGRyLAorCQkJCUVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwgRVhUX1BIWV9LUl9HRU5fQ1RSTCwKKwkJCQlFWFRfUEhZX0tSX1JPTV9SRVNFVF9JTlRFUk5BTF9NUCk7CisJLyogd2FpdCBmb3IgMTAwbXMgZm9yIGNvZGUgZG93bmxvYWQgdmlhIFNQSSBwb3J0ICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBDbGVhciBzZXJfYm9vdF9jdGwgYml0ICovCisJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKKwkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsCisJCQkJRVhUX1BIWV9LUl9NSVNDX0NUUkwxLCAweDAwMDApOworCS8qIFdhaXQgMTAwbXMgKi8KKwltc2xlZXAoMTAwKTsKKworCS8qIFByaW50IHRoZSBQSFkgRlcgdmVyc2lvbiAqLworCWJueDJ4X21kaW80NV9jdHJsX3JlYWQoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsCisJCQkgICAgICAgMHhjYTE5LCAmZndfdmVyMSk7CisJYm54MnhfbWRpbzQ1X2N0cmxfcmVhZChicCwgR1JDQkFTRV9FTUFDMCwgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIEVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwKKwkJCSAgICAgICAweGNhMWEsICZmd192ZXIyKTsKKwlEUChORVRJRl9NU0dfTElOSywKKwkgICAiODA3MiBGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwgZndfdmVyMSwgZndfdmVyMik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzJfZm9yY2VfMTBHKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIGV4dF9waHlfYWRkciA9ICgoYnAtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisKKwkvKiBGb3JjZSBLUiBvciBLWCAqLworCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLCBleHRfcGh5X2FkZHIsCisJCQkJRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELCBFWFRfUEhZX0tSX0NUUkwsCisJCQkJMHgyMDQwKTsKKwlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwgZXh0X3BoeV9hZGRyLAorCQkJCUVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwgRVhUX1BIWV9LUl9DVFJMMiwKKwkJCQkweDAwMGIpOworCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLCBleHRfcGh5X2FkZHIsCisJCQkJRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFELCBFWFRfUEhZX0tSX1BNRF9DVFJMLAorCQkJCTB4MDAwMCk7CisJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsIGV4dF9waHlfYWRkciwKKwkJCQlFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELCBFWFRfUEhZX0tSX0NUUkwsCisJCQkJMHgwMDAwKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfZXh0X3BoeV9pbml0KHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IHBvcnQgPSBicC0+cG9ydDsKIAl1MzIgZXh0X3BoeV90eXBlOwogCXUzMiBleHRfcGh5X2FkZHI7Ci0JdTMyIGxvY2FsX3BoeTsKKwl1MzIgY250OworCXUzMiBjdHJsOworCXUzMiB2YWwgPSAwOwogCiAJaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCWxvY2FsX3BoeSA9IGJwLT5waHlfYWRkcjsKIAkJZXh0X3BoeV9hZGRyID0gKChicC0+ZXh0X3BoeV9jb25maWcgJgogCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgogCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKIAogCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicCk7CisJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb2Z0IHJlc2V0IGlzIG9mZiAoZXhwZWN0IGZvciB0aGUgODA3MjoKKwkJICogZHVlIHRvIHRoZSBsb2NrLCBpdCB3aWxsIGJlIGRvbmUgaW5zaWRlIHRoZSBzcGVjaWZpYworCQkgKiBoYW5kbGluZykKKwkJICovCisJCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRSkgJiYKKwkJICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTikgJiYKKwkJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikpIHsKKwkJCS8qIFdhaXQgZm9yIHNvZnQgcmVzZXQgdG8gZ2V0IGNsZWFyZWQgdXB0byAxIHNlYyAqLworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykgeworCQkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCQkgIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQkJCQkgIEVYVF9QSFlfT1BUX0NOVEwsICZjdHJsKTsKKwkJCQlpZiAoIShjdHJsICYgKDE8PDE1KSkpCisJCQkJCWJyZWFrOworCQkJCW1zbGVlcCgxKTsKKwkJCX0KKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJICAgImNvbnRyb2wgcmVnIDB4JXggKGFmdGVyICVkIG1zKVxuIiwgY3RybCwgY250KTsKKwkJfQorCiAJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIERpcmVjdFxuIik7CkBAIC0yODAwLDQ5ICszMzcwLDIzNSBAQAogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKIAkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA1XG4iKTsKLQkJCWJueDJ4X2JpdHNfZW4oYnAsCi0JCQkJICAgICAgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKLQkJCQkgICAgICBOSUdfTUFTS19NSV9JTlQpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJlbmFibGVkIGV4dGVuYWwgcGh5IGludFxuIik7CiAKLQkJCWJwLT5waHlfYWRkciA9IGV4dF9waHlfdHlwZTsKLQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAogCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1EX01JU0NfQ05UTCwKIAkJCQkJICAgIDB4ODI4OCk7Ci0JCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKIAkJCQkJICAgIEVYVF9QSFlfT1BUX1BIWV9JREVOVElGSUVSLAogCQkJCQkgICAgMHg3ZmJmKTsKLQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAogCQkJCQkgICAgRVhUX1BIWV9PUFRfQ01VX1BMTF9CWVBBU1MsCiAJCQkJCSAgICAweDAxMDApOwotCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgRVhUX1BIWV9PUFRfV0lTX0RFVkFELAorCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgRVhUX1BIWV9PUFRfV0lTX0RFVkFELAogCQkJCQkgICAgRVhUX1BIWV9PUFRfTEFTSV9DTlRMLCAweDEpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDZcbiIpOwotCQkJYm54MnhfYml0c19lbihicCwKLQkJCQkgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkJCSAgICAgIE5JR19NQVNLX01JX0lOVCk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgZXh0ZW5hbCBwaHkgaW50XG4iKTsKIAotCQkJYnAtPnBoeV9hZGRyID0gZXh0X3BoeV90eXBlOwotCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKLQkJCQkJICAgIEVYVF9QSFlfT1BUX1BNRF9ESUdJVEFMX0NOVCwKLQkJCQkJICAgIDB4NDAwKTsKLQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQlpZiAoIShicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKSkgeworCQkJCS8qIEZvcmNlIHNwZWVkICovCisJCQkJaWYgKGJwLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJICAgIlhHWFMgODcwNiBmb3JjZSAxMEdicHNcbiIpOworCQkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCQlFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkJRVhUX1BIWV9PUFRfUE1EX0RJR0lUQUxfQ05ULAorCQkJCQkJMHg0MDApOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEZvcmNlIDFHYnBzICovCisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgICAiWEdYUyA4NzA2IGZvcmNlIDFHYnBzXG4iKTsKKworCQkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCQlFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkJRVhUX1BIWV9PUFRfQ05UTCwKKwkJCQkJCTB4MDA0MCk7CisKKwkJCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkJRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKKwkJCQkJCUVYVF9QSFlfT1BUX0NOVEwyLAorCQkJCQkJMHgwMDBEKTsKKwkJCQl9CisKKwkJCQkvKiBFbmFibGUgTEFTSSAqLworCQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkJICAgIEVYVF9QSFlfT1BUX0xBU0lfQ05UTCwKKwkJCQkJCSAgICAweDEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBBVVRPTkVHICovCisJCQkJLyogQWxsb3cgQ0wzNyB0aHJvdWdoIENMNzMgKi8KKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNiBBdXRvTmVnXG4iKTsKKwkJCQlibngyeF9tZGlvNDVfdndyaXRlKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgRVhUX1BIWV9BVVRPX05FR19ERVZBRCwKKwkJCQkJCSAgICBFWFRfUEhZX09QVF9BTl9DTDM3X0NMNzMsCisJCQkJCQkgICAgMHgwNDBjKTsKKworCQkJCS8qIEVuYWJsZSBGdWxsLUR1cGxleCBhZHZlcnRpc21lbnQgb24gQ0wzNyAqLworCQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICBFWFRfUEhZX0FVVE9fTkVHX0RFVkFELAorCQkJCQkJICAgIEVYVF9QSFlfT1BUX0FOX0NMMzdfRkQsCisJCQkJCQkgICAgMHgwMDIwKTsKKwkJCQkvKiBFbmFibGUgQ0wzNyBBTiAqLworCQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICBFWFRfUEhZX0FVVE9fTkVHX0RFVkFELAorCQkJCQkJICAgIEVYVF9QSFlfT1BUX0FOX0NMMzdfQU4sCisJCQkJCQkgICAgMHgxMDAwKTsKKwkJCQkvKiBBZHZlcnRpc2UgMTBHLzFHIHN1cHBvcnQgKi8KKwkJCQlpZiAoYnAtPmFkdmVydGlzaW5nICYKKwkJCQkgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKKwkJCQkJdmFsID0gKDE8PDUpOworCQkJCWlmIChicC0+YWR2ZXJ0aXNpbmcgJgorCQkJCSAgICBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCkKKwkJCQkJdmFsIHw9ICgxPDw3KTsKKworCQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICBFWFRfUEhZX0FVVE9fTkVHX0RFVkFELAorCQkJCQkJICAgIEVYVF9QSFlfT1BUX0FOX0FEViwgdmFsKTsKKwkJCQkvKiBFbmFibGUgTEFTSSAqLworCQkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAorCQkJCQkJICAgIEVYVF9QSFlfT1BUX0xBU0lfQ05UTCwKKwkJCQkJCSAgICAweDEpOworCisJCQkJLyogRW5hYmxlIGNsYXVzZSA3MyBBTiAqLworCQkJCWJueDJ4X21kaW80NV93cml0ZShicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgRVhUX1BIWV9BVVRPX05FR19ERVZBRCwKKwkJCQkJCSAgIEVYVF9QSFlfT1BUX0NOVEwsCisJCQkJCQkgICAweDEyMDApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCQkJLyogV2FpdCBmb3Igc29mdCByZXNldCB0byBnZXQgY2xlYXJlZCB1cHRvIDEgc2VjICovCisJCQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKSB7CisJCQkJYm54MnhfbWRpbzQ1X2N0cmxfcmVhZChicCwgR1JDQkFTRV9FTUFDMCwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCUVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQkJCQlFWFRfUEhZX09QVF9DTlRMLCAmY3RybCk7CisJCQkJaWYgKCEoY3RybCAmICgxPDwxNSkpKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMSk7CisJCQl9CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAgICI4MDcyIGNvbnRyb2wgcmVnIDB4JXggKGFmdGVyICVkIG1zKVxuIiwKKwkJCSAgIGN0cmwsIGNudCk7CisKKwkJCWJueDJ4X2JjbTgwNzJfZXh0ZXJuYWxfcm9tX2Jvb3QoYnApOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJGaW5zaGVkIGxvYWRpbmcgODA3MiBLUiBST01cbiIpOworCisJCQkvKiBlbmFibGUgTEFTSSAqLworCQkJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsCisJCQkJCQlleHRfcGh5X2FkZHIsCisJCQkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsCisJCQkJCQkweDkwMDAsIDB4MDQwMCk7CisJCQlibngyeF9tZGlvNDVfY3RybF93cml0ZShicCwgR1JDQkFTRV9FTUFDMCwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCUVYVF9QSFlfS1JfUE1BX1BNRF9ERVZBRCwKKwkJCQkJCUVYVF9QSFlfS1JfTEFTSV9DTlRMLCAweDAwMDQpOworCisJCQkvKiBJZiB0aGlzIGlzIGZvcmNlZCBzcGVlZCwgc2V0IHRvIEtSIG9yIEtYCisJCQkgKiAoYWxsIG90aGVyIGFyZSBub3Qgc3VwcG9ydGVkKQorCQkJICovCisJCQlpZiAoIShicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKSkgeworCQkJCWlmIChicC0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMDApIHsKKwkJCQkJYm54MnhfYmNtODA3Ml9mb3JjZV8xMEcoYnApOworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJICAgIkZvcmNlZCBzcGVlZCAxMEcgb24gODA3MlxuIik7CisJCQkJCS8qIHVubG9jayAqLworCQkJCQlibngyeF9od191bmxvY2soYnAsCisJCQkJCQlIV19MT0NLX1JFU09VUkNFXzgwNzJfTURJTyk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZQorCQkJCQl2YWwgPSAoMTw8NSk7CisJCQl9IGVsc2UgeworCisJCQkJLyogQWR2ZXJ0aXNlIDEwRy8xRyBzdXBwb3J0ICovCisJCQkJaWYgKGJwLT5hZHZlcnRpc2luZyAmCisJCQkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQorCQkJCQl2YWwgPSAoMTw8NSk7CisJCQkJaWYgKGJwLT5hZHZlcnRpc2luZyAmCisJCQkJCQlBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCkKKwkJCQkJdmFsIHw9ICgxPDw3KTsKKwkJCX0KKwkJCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQlleHRfcGh5X2FkZHIsCisJCQkJCUVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCisJCQkJCTB4MTEsIHZhbCk7CisJCQkvKiBBZGQgc3VwcG9ydCBmb3IgQ0wzNyAoIHBhc3NpdmUgbW9kZSApIEkgKi8KKwkJCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkJZXh0X3BoeV9hZGRyLAorCQkJCQkJRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKKwkJCQkJCTB4ODM3MCwgMHgwNDBjKTsKKwkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3ICggcGFzc2l2ZSBtb2RlICkgSUkgKi8KKwkJCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQkJZXh0X3BoeV9hZGRyLAorCQkJCQkJRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKKwkJCQkJCTB4ZmZlNCwgMHgyMCk7CisJCQkvKiBBZGQgc3VwcG9ydCBmb3IgQ0wzNyAoIHBhc3NpdmUgbW9kZSApIElJSSAqLworCQkJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsCisJCQkJCQlleHRfcGh5X2FkZHIsCisJCQkJCQlFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAorCQkJCQkJMHhmZmUwLCAweDEwMDApOworCQkJLyogUmVzdGFydCBhdXRvbmVnICovCisJCQltc2xlZXAoNTAwKTsKKwkJCWJueDJ4X21kaW80NV9jdHJsX3dyaXRlKGJwLCBHUkNCQVNFX0VNQUMwLAorCQkJCQlleHRfcGh5X2FkZHIsCisJCQkJCUVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCisJCQkJCUVYVF9QSFlfS1JfQ1RSTCwgMHgxMjAwKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODA3MiBBdXRvbmVnIFJlc3RhcnQ6ICIKKwkJCSAgICIxRyAlc3N1cHBvcnRlZCAgMTBHICVzc3VwcG9ydGVkXG4iLAorCQkJICAgKHZhbCAmICgxPDw1KSkgPyAiIiA6ICJub3QgIiwKKwkJCSAgICh2YWwgJiAoMTw8NykpID8gIiIgOiAibm90ICIpOworCisJCQkvKiB1bmxvY2sgKi8KKwkJCWJueDJ4X2h3X3VubG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgICAiU2V0dGluZyB0aGUgU0ZYNzEwMSBMQVNJIGluZGljYXRpb25cbiIpOworCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKIAkJCQkJICAgIEVYVF9QSFlfT1BUX0xBU0lfQ05UTCwgMHgxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJICAgIlNldHRpbmcgdGhlIFNGWDcxMDEgTEVEIHRvIGJsaW5rIG9uIHRyYWZmaWNcbiIpOworCQkJYm54MnhfbWRpbzQ1X3Z3cml0ZShicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRCwKKwkJCQkJICAgIDB4QzAwNywgKDE8PDMpKTsKKworCQkJLyogcmVhZCBtb2RpZnkgd3JpdGUgcGF1c2UgYWR2ZXJ0aXppbmcgKi8KKwkJCWJueDJ4X21kaW80NV9yZWFkKGJwLCBleHRfcGh5X2FkZHIsCisJCQkJCSAgRVhUX1BIWV9LUl9BVVRPX05FR19ERVZBRCwKKwkJCQkJICBFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVCwgJnZhbCk7CisJCQl2YWwgJj0gfkVYVF9QSFlfS1JfQVVUT19ORUdfQURWRVJUX1BBVVNFX0JPVEg7CisJCQkvKiBQbGVhc2UgcmVmZXIgdG8gVGFibGUgMjhCLTMgb2YgODAyLjNhYi0xOTk5IHNwZWMuICovCisJCQlpZiAoYnAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF9QYXVzZSkKKwkJCQl2YWwgfD0gRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlRfUEFVU0U7CisKKwkJCWlmIChicC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpIHsKKwkJCQl2YWwgfD0KKwkJCQkgRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlRfUEFVU0VfQVNZTU1FVFJJQzsKKwkJCX0KKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZYNzEwMSBBTiBhZHZlcnRpemUgMHgleFxuIiwgdmFsKTsKKwkJCWJueDJ4X21kaW80NV92d3JpdGUoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICAgIEVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCisJCQkJCSAgICBFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVCwgdmFsKTsKKwkJCS8qIFJlc3RhcnQgYXV0b25lZyAqLworCQkJYm54MnhfbWRpbzQ1X3JlYWQoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICBFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFELAorCQkJCQkgIEVYVF9QSFlfS1JfQ1RSTCwgJnZhbCk7CisJCQl2YWwgfD0gMHgyMDA7CisJCQlibngyeF9tZGlvNDVfd3JpdGUoYnAsIGV4dF9waHlfYWRkciwKKwkJCQkJICAgIEVYVF9QSFlfS1JfQVVUT19ORUdfREVWQUQsCisJCQkJCSAgICBFWFRfUEhZX0tSX0NUUkwsIHZhbCk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAotCQkJICAgYnAtPmV4dF9waHlfY29uZmlnKTsKKwkJCUJOWDJYX0VSUigiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKKwkJCQkgIGJwLT5leHRfcGh5X2NvbmZpZyk7CiAJCQlicmVhazsKIAkJfQotCQlicC0+cGh5X2FkZHIgPSBsb2NhbF9waHk7CiAKIAl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KLS8qICAgICAgCWV4dF9waHlfYWRkciA9ICgoYnAtPmV4dF9waHlfY29uZmlnICYKKy8qCQlleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCiAJCQkJIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX0FERFJfTUFTSykgPj4KIAkJCQlQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9BRERSX1NISUZUKTsKICovCkBAIC0yODU0LDEwICszNjEwLDYgQEAKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKIAkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOwotCQkJYm54MnhfYml0c19lbihicCwKLQkJCQkgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAotCQkJCSAgICAgIE5JR19NQVNLX01JX0lOVCk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgImVuYWJsZWQgZXh0ZW5hbCBwaHkgaW50XG4iKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0yODcxLDggKzM2MjMsMjIgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X2V4dF9waHlfcmVzZXQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAl1MzIgZXh0X3BoeV90eXBlOwotCXUzMiBleHRfcGh5X2FkZHI7Ci0JdTMyIGxvY2FsX3BoeTsKKwl1MzIgZXh0X3BoeV9hZGRyID0gKChicC0+ZXh0X3BoeV9jb25maWcgJgorCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgYm9hcmQgPSAoYnAtPmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spOworCisJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sZWQgYnkgR1BJTyAxCisJICogR2l2ZSBpdCAxbXMgb2YgcmVzZXQgcHVsc2UKKwkgKi8KKwlpZiAoKGJvYXJkICE9IFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMkcpICYmCisJICAgIChib2FyZCAhPSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDNHKSkgeworCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVyk7CisJCW1zbGVlcCgxKTsKKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIKTsKKwl9CiAKIAlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKIAkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnApOwpAQCAtMjg4MywxNSArMzY0OSwyNCBAQAogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDUvNlxuIik7Ci0JCQlsb2NhbF9waHkgPSBicC0+cGh5X2FkZHI7Ci0JCQlleHRfcGh5X2FkZHIgPSAoKGJwLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKLQkJCWJwLT5waHlfYWRkciA9ICh1OClleHRfcGh5X2FkZHI7Ci0JCQlibngyeF9tZGlvNDVfd3JpdGUoYnAsIEVYVF9QSFlfT1BUX1BNQV9QTURfREVWQUQsCisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNS84NzA2XG4iKTsKKwkJCWJueDJ4X21kaW80NV93cml0ZShicCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgICBFWFRfUEhZX09QVF9QTUFfUE1EX0RFVkFELAogCQkJCQkgICBFWFRfUEhZX09QVF9DTlRMLCAweGEwNDApOwotCQkJYnAtPnBoeV9hZGRyID0gbG9jYWxfcGh5OworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzJcbiIpOworCQkJYm54MnhfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCQkJYm54MnhfbWRpbzQ1X2N0cmxfd3JpdGUoYnAsIEdSQ0JBU0VfRU1BQzAsCisJCQkJCQlleHRfcGh5X2FkZHIsCisJCQkJCQlFWFRfUEhZX0tSX1BNQV9QTURfREVWQUQsCisJCQkJCQkwLCAxPDwxNSk7CisJCQlibngyeF9od191bmxvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyBTRlg3MTAxXG4iKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0yOTMwLDYgKzM3MDUsNyBAQAogCQkJTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8CiAJCQlOSUdfTUFTS19NSV9JTlQpKTsKIAorCS8qIEFjdGl2YXRlIHRoZSBleHRlcm5hbCBQSFkgKi8KIAlibngyeF9leHRfcGh5X3Jlc2V0KGJwKTsKIAogCWJueDJ4X3NldF9hZXJfbW1kKGJwKTsKQEAgLTI5OTQsMTMgKzM3NzAsMTMgQEAKIAkJCS8qIEFOIGVuYWJsZWQgKi8KIAkJCWJueDJ4X3NldF9icmNtX2NsMzdfYWR2ZXJ0aXNtZW50KGJwKTsKIAotCQkJLyogcHJvZ3JhbSBkdXBsZXggJiBwYXVzZSBhZHZlcnRpc21lbnQgKGZvciBhbmVnKSAqLworCQkJLyogcHJvZ3JhbSBkdXBsZXggJiBwYXVzZSBhZHZlcnRpc2VtZW50IChmb3IgYW5lZykgKi8KIAkJCWJueDJ4X3NldF9pZWVlX2FuZWdfYWR2ZXJ0aXNtZW50KGJwKTsKIAogCQkJLyogZW5hYmxlIGF1dG9uZWcgKi8KIAkJCWJueDJ4X3NldF9hdXRvbmVnKGJwKTsKIAotCQkJLyogZW5hbGJlIGFuZCByZXN0YXJ0IEFOICovCisJCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgQU4gKi8KIAkJCWJueDJ4X3Jlc3RhcnRfYXV0b25lZyhicCk7CiAJCX0KIApAQCAtMzAxMCwxMSArMzc4NiwxMSBAQAogCQlibngyeF9pbml0aWFsaXplX3NnbWlpX3Byb2Nlc3MoYnApOwogCX0KIAotCS8qIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovCi0JYm54MnhfbGlua19pbnRfZW5hYmxlKGJwKTsKLQogCS8qIGluaXQgZXh0IHBoeSBhbmQgZW5hYmxlIGxpbmsgc3RhdGUgaW50ICovCiAJYm54MnhfZXh0X3BoeV9pbml0KGJwKTsKKworCS8qIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisJYm54MnhfbGlua19pbnRfZW5hYmxlKGJwKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfcGh5X2RlYXNzZXJ0KHN0cnVjdCBibngyeCAqYnApCkBAIC0zMDczLDYgKzM4NDksMTEgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgcG9ydCA9IGJwLT5wb3J0OworCXUzMiBib2FyZCA9IChicC0+Ym9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSyk7CisKKwkvKiB1cGRhdGUgc2hhcmVkIG1lbW9yeSAqLworCWJwLT5saW5rX3N0YXR1cyA9IDA7CisJYm54MnhfdXBkYXRlX21uZyhicCk7CiAKIAkvKiBkaXNhYmxlIGF0dGVudGlvbnMgKi8KIAlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKQEAgLTMwODEsMjEgKzM4NjIsNDUgQEAKIAkJCU5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMgfAogCQkJTklHX01BU0tfTUlfSU5UKSk7CiAKLQlibngyeF9leHRfcGh5X3Jlc2V0KGJwKTsKKwkvKiBhY3RpdmF0ZSBuaWcgZHJhaW4gKi8KKwlOSUdfV1IoTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKyBwb3J0KjQsIDEpOworCisJLyogZGlzYWJsZSBuaWcgZWdyZXNzIGludGVyZmFjZSAqLworCU5JR19XUihOSUdfUkVHX0JNQUMwX09VVF9FTiArIHBvcnQqNCwgMCk7CisJTklHX1dSKE5JR19SRUdfRUdSRVNTX0VNQUMwX09VVF9FTiArIHBvcnQqNCwgMCk7CisKKwkvKiBTdG9wIEJpZ01hYyByeCAqLworCWJueDJ4X2JtYWNfcnhfZGlzYWJsZShicCk7CisKKwkvKiBkaXNhYmxlIGVtYWMgKi8KKwlOSUdfV1IoTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDApOworCisJbXNsZWVwKDEwKTsKKworCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGVkIGJ5IEdQSU8gMQorCSAqIEhvbGQgaXQgYXMgb3V0cHV0IGxvdworCSAqLworCWlmICgoYm9hcmQgIT0gU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAyRykgJiYKKwkgICAgKGJvYXJkICE9IFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwM0cpKSB7CisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCisJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJyZXNldCBleHRlcm5hbCBQSFlcbiIpOworCX0KIAogCS8qIHJlc2V0IHRoZSBTZXJEZXMvWEdYUyAqLwogCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfQ0xFQVIsCiAJICAgICAgICgweDFmZiA8PCAocG9ydCoxNikpKTsKIAotCS8qIHJlc2V0IEVNQUMgLyBCTUFDIGFuZCBkaXNhYmxlIE5JRyBpbnRlcmZhY2VzICovCisJLyogcmVzZXQgQmlnTWFjICovCisJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9DTEVBUiwKKwkgICAgICAgKE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1JTVF9CTUFDMCA8PCBwb3J0KSk7CisKKwkvKiBkaXNhYmxlIG5pZyBpbmdyZXNzIGludGVyZmFjZSAqLwogCU5JR19XUihOSUdfUkVHX0JNQUMwX0lOX0VOICsgcG9ydCo0LCAwKTsKLQlOSUdfV1IoTklHX1JFR19CTUFDMF9PVVRfRU4gKyBwb3J0KjQsIDApOwotCi0JTklHX1dSKE5JR19SRUdfTklHX0VNQUMwX0VOICsgcG9ydCo0LCAwKTsKIAlOSUdfV1IoTklHX1JFR19FTUFDMF9JTl9FTiArIHBvcnQqNCwgMCk7Ci0JTklHX1dSKE5JR19SRUdfRUdSRVNTX0VNQUMwX09VVF9FTiArIHBvcnQqNCwgMCk7CiAKLQlOSUdfV1IoTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKyBwb3J0KjQsIDEpOworCS8qIHNldCBsaW5rIGRvd24gKi8KKwlicC0+bGlua191cCA9IDA7CiB9CiAKICNpZmRlZiBCTlgyWF9YR1hTX0xCCkBAIC0zMTU4LDcgKzM5NjMsNyBAQAogCWludCBwb3J0ID0gYnAtPnBvcnQ7CiAKIAlEUChORVRJRl9NU0dfVElNRVIsCi0JICAgInNwZSAoJXg6JXgpICBjb21tYW5kICV4ICBod19jaWQgJXggIGRhdGEgKCV4OiV4KSAgbGVmdCAleFxuIiwKKwkgICAic3BlICgleDoleCkgIGNvbW1hbmQgJWQgIGh3X2NpZCAleCAgZGF0YSAoJXg6JXgpICBsZWZ0ICV4XG4iLAogCSAgICh1MzIpVTY0X0hJKGJwLT5zcHFfbWFwcGluZyksICh1MzIpKFU2NF9MTyhicC0+c3BxX21hcHBpbmcpICsKIAkgICAodm9pZCAqKWJwLT5zcHFfcHJvZF9iZCAtICh2b2lkICopYnAtPnNwcSksIGNvbW1hbmQsCiAJICAgSFdfQ0lEKGJwLCBjaWQpLCBkYXRhX2hpLCBkYXRhX2xvLCBicC0+c3BxX2xlZnQpOwpAQCAtMzE3Niw2ICszOTgxLDcgQEAKIAkJYm54MnhfcGFuaWMoKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CisKIAkvKiBDSUQgbmVlZHMgcG9ydCBudW1iZXIgdG8gYmUgZW5jb2RlZCBpbnQgaXQgKi8KIAlicC0+c3BxX3Byb2RfYmQtPmhkci5jb25uX2FuZF9jbWRfZGF0YSA9CiAJCQljcHVfdG9fbGUzMigoKGNvbW1hbmQgPDwgU1BFX0hEUl9DTURfSURfU0hJRlQpIHwKQEAgLTMyODIsOCArNDA4OCw4IEBACiAJdTMyIGlndV9hZGRyID0gKElHVV9BRERSX0FUVE5fQklUU19TRVQgKyBJR1VfUE9SVF9CQVNFICogcG9ydCkgKiA4OwogCXUzMiBhZXVfYWRkciA9IHBvcnQgPyBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMSA6CiAJCQkgICAgICBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMDsKLQl1MzIgbmlnX21hc2tfYWRkciA9IHBvcnQgPyBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQxIDoKLQkJCQkgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwOworCXUzMiBuaWdfaW50X21hc2tfYWRkciA9IHBvcnQgPyBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQxIDoKKwkJCQkgICAgICAgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMDsKIAogCWlmICh+YnAtPmFldV9tYXNrICYgKGFzc2VydGVkICYgMHhmZikpCiAJCUJOWDJYX0VSUigiSUdVIEVSUk9SXG4iKTsKQEAgLTMzMDEsMTUgKzQxMDcsMTEgQEAKIAogCWlmIChhc3NlcnRlZCAmIEFUVE5fSEFSRF9XSVJFRF9NQVNLKSB7CiAJCWlmIChhc3NlcnRlZCAmIEFUVE5fTklHX0ZPUl9GVU5DKSB7Ci0JCQl1MzIgbmlnX3N0YXR1c19wb3J0OwotCQkJdTMyIG5pZ19pbnRfYWRkciA9IHBvcnQgPwotCQkJCQlOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDEgOgotCQkJCQlOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDA7CiAKLQkJCWJwLT5uaWdfbWFzayA9IFJFR19SRChicCwgbmlnX21hc2tfYWRkcik7Ci0JCQlSRUdfV1IoYnAsIG5pZ19tYXNrX2FkZHIsIDApOworCQkJLyogc2F2ZSBuaWcgaW50ZXJydXB0IG1hc2sgKi8KKwkJCWJwLT5uaWdfbWFzayA9IFJFR19SRChicCwgbmlnX2ludF9tYXNrX2FkZHIpOworCQkJUkVHX1dSKGJwLCBuaWdfaW50X21hc2tfYWRkciwgMCk7CiAKLQkJCW5pZ19zdGF0dXNfcG9ydCA9IFJFR19SRChicCwgbmlnX2ludF9hZGRyKTsKIAkJCWJueDJ4X2xpbmtfdXBkYXRlKGJwKTsKIAogCQkJLyogaGFuZGxlIHVuaWNvcmUgYXR0bj8gKi8KQEAgLTMzNjIsMTUgKzQxNjQsMTMyIEBACiAKIAkvKiBub3cgc2V0IGJhY2sgdGhlIG1hc2sgKi8KIAlpZiAoYXNzZXJ0ZWQgJiBBVFROX05JR19GT1JfRlVOQykKLQkJUkVHX1dSKGJwLCBuaWdfbWFza19hZGRyLCBicC0+bmlnX21hc2spOworCQlSRUdfV1IoYnAsIG5pZ19pbnRfbWFza19hZGRyLCBicC0+bmlnX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDAoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCit7CisJaW50IHBvcnQgPSBicC0+cG9ydDsKKwlpbnQgcmVnX29mZnNldDsKKwl1MzIgdmFsOworCisJaWYgKGF0dG4gJiBBRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNSkgeworCisJCXJlZ19vZmZzZXQgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCA6CisJCQkJICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOworCisJCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7CisJCXZhbCAmPSB+QUVVX0lOUFVUU19BVFROX0JJVFNfU1BJTzU7CisJCVJFR19XUihicCwgcmVnX29mZnNldCwgdmFsKTsKKworCQlCTlgyWF9FUlIoIlNQSU81IGh3IGF0dGVudGlvblxuIik7CisKKwkJc3dpdGNoIChicC0+Ym9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgeworCQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KKworCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sZWQgYnkgR1BJTyAxICovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1cpOworCQkJLyogTG93IHBvd2VyIG1vZGUgaXMgY29udHJvbGVkIGJ5IEdQSU8gMiAqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XKTsKKwkJCS8qIG1hcmsgdGhlIGZhaWx1cmUgKi8KKwkJCWJwLT5leHRfcGh5X2NvbmZpZyAmPQorCQkJCQl+UE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSzsKKwkJCWJwLT5leHRfcGh5X2NvbmZpZyB8PQorCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOworCQkJU0hNRU1fV1IoYnAsCisJCQkJIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLgorCQkJCQkJCWV4dGVybmFsX3BoeV9jb25maWcsCisJCQkJIGJwLT5leHRfcGh5X2NvbmZpZyk7CisJCQkvKiBsb2cgdGhlIGZhaWx1cmUgKi8KKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZhbiBGYWlsdXJlIG9uIE5ldHdvcmsiCisJCQkgICAgICAgIiBDb250cm9sbGVyICVzIGhhcyBjYXVzZWQgdGhlIGRyaXZlciB0byIKKwkJCSAgICAgICAiIHNodXRkb3duIHRoZSBjYXJkIHRvIHByZXZlbnQgcGVybWFuZW50IgorCQkJICAgICAgICIgZGFtYWdlLiAgUGxlYXNlIGNvbnRhY3QgRGVsbCBTdXBwb3J0IGZvciIKKwkJCSAgICAgICAiIGFzc2lzdGFuY2VcbiIsIGJwLT5kZXYtPm5hbWUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDEoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCit7CisJdTMyIHZhbDsKKworCWlmIChhdHRuICYgQk5YMlhfRE9PUlFfQVNTRVJUKSB7CisKKwkJdmFsID0gUkVHX1JEKGJwLCBET1JRX1JFR19ET1JRX0lOVF9TVFNfQ0xSKTsKKwkJQk5YMlhfRVJSKCJEQiBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKKwkJLyogRE9SUSBkaXNjYXJkIGF0dGVudGlvbiAqLworCQlpZiAodmFsICYgMHgyKQorCQkJQk5YMlhfRVJSKCJGQVRBTCBlcnJvciBmcm9tIERPUlFcbiIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQyKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQoreworCXUzMiB2YWw7CisKKwlpZiAoYXR0biAmIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NGQ19IV19JTlRFUlJVUFQpIHsKKworCQl2YWwgPSBSRUdfUkQoYnAsIENGQ19SRUdfQ0ZDX0lOVF9TVFNfQ0xSKTsKKwkJQk5YMlhfRVJSKCJDRkMgaHcgYXR0ZW50aW9uIDB4JXhcbiIsIHZhbCk7CisJCS8qIENGQyBlcnJvciBhdHRlbnRpb24gKi8KKwkJaWYgKHZhbCAmIDB4MikKKwkJCUJOWDJYX0VSUigiRkFUQUwgZXJyb3IgZnJvbSBDRkNcbiIpOworCX0KKworCWlmIChhdHRuICYgQUVVX0lOUFVUU19BVFROX0JJVFNfUFhQX0hXX0lOVEVSUlVQVCkgeworCisJCXZhbCA9IFJFR19SRChicCwgUFhQX1JFR19QWFBfSU5UX1NUU19DTFJfMCk7CisJCUJOWDJYX0VSUigiUFhQIGh3IGF0dGVudGlvbiAweCV4XG4iLCB2YWwpOworCQkvKiBSUV9VU0RNRFBfRklGT19PVkVSRkxPVyAqLworCQlpZiAodmFsICYgMHgxODAwMCkKKwkJCUJOWDJYX0VSUigiRkFUQUwgZXJyb3IgZnJvbSBQWFBcbiIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQzKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQoreworCWlmIChhdHRuICYgRVZFUkVTVF9HRU5fQVRUTl9JTl9VU0VfTUFTSykgeworCisJCWlmIChhdHRuICYgQk5YMlhfTUNfQVNTRVJUX0JJVFMpIHsKKworCQkJQk5YMlhfRVJSKCJNQyBhc3NlcnQhXG4iKTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMCwgMCk7CisJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOSwgMCk7CisJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOCwgMCk7CisJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNywgMCk7CisJCQlibngyeF9wYW5pYygpOworCisJCX0gZWxzZSBpZiAoYXR0biAmIEJOWDJYX01DUF9BU1NFUlQpIHsKKworCQkJQk5YMlhfRVJSKCJNQ1AgYXNzZXJ0IVxuIik7CisJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTEsIDApOworCQkJYm54MnhfbWNfYXNzZXJ0KGJwKTsKKworCQl9IGVsc2UKKwkJCUJOWDJYX0VSUigiVW5rbm93biBIVyBhc3NlcnQhIChhdHRuIDB4JXgpXG4iLCBhdHRuKTsKKwl9CisKKwlpZiAoYXR0biAmIEVWRVJFU1RfTEFUQ0hFRF9BVFROX0lOX1VTRV9NQVNLKSB7CisKKwkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfQ0xSX0xBVENIX1NJR05BTCwgMHg3ZmYpOworCQlCTlgyWF9FUlIoIkxBVENIRUQgYXR0ZW50aW9uIDB4JXggKG1hc2tlZClcbiIsIGF0dG4pOworCX0KIH0KIAogc3RhdGljIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZGVhc3NlcnRlZCkKIHsKLQlpbnQgcG9ydCA9IGJwLT5wb3J0OwotCWludCBpbmRleDsKIAlzdHJ1Y3QgYXR0bl9yb3V0ZSBhdHRuOwogCXN0cnVjdCBhdHRuX3JvdXRlIGdyb3VwX21hc2s7CisJaW50IHBvcnQgPSBicC0+cG9ydDsKKwlpbnQgaW5kZXg7CiAJdTMyIHJlZ19hZGRyOwogCXUzMiB2YWw7CiAKQEAgLTMzOTEsNjQgKzQzMTAsMTQgQEAKIAkJCURQKE5FVElGX01TR19IVywgImdyb3VwWyVkXTogJWxseFxuIiwgaW5kZXgsCiAJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWdyb3VwX21hc2suc2lnWzBdKTsKIAotCQkJaWYgKGF0dG4uc2lnWzNdICYgZ3JvdXBfbWFzay5zaWdbM10gJgotCQkJICAgIEVWRVJFU1RfR0VOX0FUVE5fSU5fVVNFX01BU0spIHsKLQotCQkJCWlmIChhdHRuLnNpZ1szXSAmIEJOWDJYX01DX0FTU0VSVF9CSVRTKSB7Ci0KLQkJCQkJQk5YMlhfRVJSKCJNQyBhc3NlcnQhXG4iKTsKLQkJCQkJYm54MnhfcGFuaWMoKTsKLQotCQkJCX0gZWxzZSBpZiAoYXR0bi5zaWdbM10gJiBCTlgyWF9NQ1BfQVNTRVJUKSB7Ci0KLQkJCQkJQk5YMlhfRVJSKCJNQ1AgYXNzZXJ0IVxuIik7Ci0JCQkJCVJFR19XUihicCwKLQkJCQkJICAgICBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzExLCAwKTsKLQkJCQkJYm54MnhfbWNfYXNzZXJ0KGJwKTsKLQotCQkJCX0gZWxzZSB7Ci0JCQkJCUJOWDJYX0VSUigiVU5LT1dFTiBIVyBBU1NFUlQhXG4iKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2suc2lnWzFdICYKLQkJCSAgICBCTlgyWF9ET09SUV9BU1NFUlQpIHsKLQotCQkJCXZhbCA9IFJFR19SRChicCwgRE9SUV9SRUdfRE9SUV9JTlRfU1RTX0NMUik7Ci0JCQkJQk5YMlhfRVJSKCJEQiBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKLQkJCQkvKiBET1JRIGRpc2NhcmQgYXR0ZW50aW9uICovCi0JCQkJaWYgKHZhbCAmIDB4MikKLQkJCQkJQk5YMlhfRVJSKCJGQVRBTCBlcnJvciBmcm9tIERPUlFcbiIpOwotCQkJfQotCi0JCQlpZiAoYXR0bi5zaWdbMl0gJiBncm91cF9tYXNrLnNpZ1syXSAmCi0JCQkgICAgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0ZDX0hXX0lOVEVSUlVQVCkgewotCi0JCQkJdmFsID0gUkVHX1JEKGJwLCBDRkNfUkVHX0NGQ19JTlRfU1RTX0NMUik7Ci0JCQkJQk5YMlhfRVJSKCJDRkMgaHcgYXR0ZW50aW9uIDB4JXhcbiIsIHZhbCk7Ci0JCQkJLyogQ0ZDIGVycm9yIGF0dGVudGlvbiAqLwotCQkJCWlmICh2YWwgJiAweDIpCi0JCQkJCUJOWDJYX0VSUigiRkFUQUwgZXJyb3IgZnJvbSBDRkNcbiIpOwotCQkJfQotCi0JCQlpZiAoYXR0bi5zaWdbMl0gJiBncm91cF9tYXNrLnNpZ1syXSAmCi0JCQkgICAgQUVVX0lOUFVUU19BVFROX0JJVFNfUFhQX0hXX0lOVEVSUlVQVCkgewotCi0JCQkJdmFsID0gUkVHX1JEKGJwLCBQWFBfUkVHX1BYUF9JTlRfU1RTX0NMUl8wKTsKLQkJCQlCTlgyWF9FUlIoIlBYUCBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKLQkJCQkvKiBSUV9VU0RNRFBfRklGT19PVkVSRkxPVyAqLwotCQkJCWlmICh2YWwgJiAweDE4MDAwKQotCQkJCQlCTlgyWF9FUlIoIkZBVEFMIGVycm9yIGZyb20gUFhQXG4iKTsKLQkJCX0KLQotCQkJaWYgKGF0dG4uc2lnWzNdICYgZ3JvdXBfbWFzay5zaWdbM10gJgotCQkJICAgIEVWRVJFU1RfTEFUQ0hFRF9BVFROX0lOX1VTRV9NQVNLKSB7Ci0KLQkJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9DTFJfTEFUQ0hfU0lHTkFMLAotCQkJCSAgICAgICAweDdmZik7Ci0JCQkJRFAoTkVUSUZfTVNHX0hXLCAiZ290IGxhdGNoZWQgYml0cyAweCV4XG4iLAotCQkJCSAgIGF0dG4uc2lnWzNdKTsKLQkJCX0KKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQzKGJwLAorCQkJCQlhdHRuLnNpZ1szXSAmIGdyb3VwX21hc2suc2lnWzNdKTsKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQxKGJwLAorCQkJCQlhdHRuLnNpZ1sxXSAmIGdyb3VwX21hc2suc2lnWzFdKTsKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQyKGJwLAorCQkJCQlhdHRuLnNpZ1syXSAmIGdyb3VwX21hc2suc2lnWzJdKTsKKwkJCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQwKGJwLAorCQkJCQlhdHRuLnNpZ1swXSAmIGdyb3VwX21hc2suc2lnWzBdKTsKIAogCQkJaWYgKChhdHRuLnNpZ1swXSAmIGdyb3VwX21hc2suc2lnWzBdICYKIAkJCQkJCUhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCkgfHwKQEAgLTM0NTYsNyArNDMyNSwxNSBAQAogCQkJCQkJSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8xKSB8fAogCQkJICAgIChhdHRuLnNpZ1syXSAmIGdyb3VwX21hc2suc2lnWzJdICYKIAkJCQkJCUhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMikpCi0JCQkJQk5YMlhfRVJSKCJGQVRBTCBIVyBibG9jayBhdHRlbnRpb25cbiIpOworCQkJCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIgorCQkJCQkgICIgIHNldDAgMHgleCAgc2V0MSAweCV4IgorCQkJCQkgICIgIHNldDIgMHgleFxuIiwKKwkJCQkJICAoYXR0bi5zaWdbMF0gJiBncm91cF9tYXNrLnNpZ1swXSAmCisJCQkJCSAgIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCksCisJCQkJCSAgKGF0dG4uc2lnWzFdICYgZ3JvdXBfbWFzay5zaWdbMV0gJgorCQkJCQkgICBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzEpLAorCQkJCQkgIChhdHRuLnNpZ1syXSAmIGdyb3VwX21hc2suc2lnWzJdICYKKwkJCQkJICAgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8yKSk7CiAKIAkJCWlmICgoYXR0bi5zaWdbMF0gJiBncm91cF9tYXNrLnNpZ1swXSAmCiAJCQkJCQlIV19QUlRZX0FTU0VSVF9TRVRfMCkgfHwKQEAgLTM0NjQsNyArNDM0MSw3IEBACiAJCQkJCQlIV19QUlRZX0FTU0VSVF9TRVRfMSkgfHwKIAkJCSAgICAoYXR0bi5zaWdbMl0gJiBncm91cF9tYXNrLnNpZ1syXSAmCiAJCQkJCQlIV19QUlRZX0FTU0VSVF9TRVRfMikpCi0JCQkJQk5YMlhfRVJSKCJGQVRBTCBIVyBibG9jayBwYXJpdHkgYXRlbnRpb25cbiIpOworCQkJICAgICAgIEJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgcGFyaXR5IGF0dGVudGlvblxuIik7CiAJCX0KIAl9CiAKQEAgLTM1MjksNyArNDQwNiw3IEBACiAKIAkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKLQkJRFAoTkVUSUZfTVNHX0lOVFIsICJjYWxsZWQgYnV0IGludHJfc2VtIG5vdCAwLCByZXR1cm5pbmdcbiIpOworCQlEUChCTlgyWF9NU0dfU1AsICJjYWxsZWQgYnV0IGludHJfc2VtIG5vdCAwLCByZXR1cm5pbmdcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNTM5LDEyICs0NDE2LDExIEBACiAKIAlEUChORVRJRl9NU0dfSU5UUiwgImdvdCBhIHNsb3dwYXRoIGludGVycnVwdCAodXBkYXRlZCAleClcbiIsIHN0YXR1cyk7CiAKLQlpZiAoc3RhdHVzICYgMHgxKSB7Ci0JCS8qIEhXIGF0dGVudGlvbnMgKi8KKwkvKiBIVyBhdHRlbnRpb25zICovCisJaWYgKHN0YXR1cyAmIDB4MSkKIAkJYm54MnhfYXR0bl9pbnQoYnApOwotCX0KIAotCS8qIENTdG9ybSBldmVudHM6IHF1ZXJ5X3N0YXRzLCBjZmMgZGVsZXRlIHJhbXJvZHMgKi8KKwkvKiBDU3Rvcm0gZXZlbnRzOiBxdWVyeV9zdGF0cywgcG9ydCBkZWxldGUgcmFtcm9kICovCiAJaWYgKHN0YXR1cyAmIDB4MikKIAkJYnAtPnN0YXRfcGVuZGluZyA9IDA7CiAKQEAgLTM1NTgsNiArNDQzNCw3IEBACiAJCSAgICAgSUdVX0lOVF9OT1AsIDEpOwogCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIGxlMTZfdG9fY3B1KGJwLT5kZWZfdF9pZHgpLAogCQkgICAgIElHVV9JTlRfRU5BQkxFLCAxKTsKKwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYm54MnhfbXNpeF9zcF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQpAQCAtMzU2NywxMSArNDQ0NCwxMSBAQAogCiAJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7Ci0JCURQKE5FVElGX01TR19JTlRSLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKKwkJRFAoQk5YMlhfTVNHX1NQLCAiY2FsbGVkIGJ1dCBpbnRyX3NlbSBub3QgMCwgcmV0dXJuaW5nXG4iKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCWJueDJ4X2Fja19zYihicCwgMTYsIFhTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKKwlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgWFNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQpAQCAtMzkwNiw3ICs0NzgzLDcgQEAKIAogCQl3aGlsZSAoYnAtPnN0YXRzX3N0YXRlICE9IFNUQVRTX1NUQVRFX0RJU0FCTEUpIHsKIAkJCWlmICghdGltZW91dCkgewotCQkJCUJOWDJYX0VSUigidGltZW91dCB3YXRpbmcgZm9yIHN0YXRzIHN0b3BcbiIpOworCQkJCUJOWDJYX0VSUigidGltZW91dCB3YWl0aW5nIGZvciBzdGF0cyBzdG9wXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXRpbWVvdXQtLTsKQEAgLTQxNzMsMzkgKzUwNTAsMzcgQEAKIAogCW5zdGF0cy0+cnhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKTsKIAotCW5zdGF0cy0+dHhfYnl0ZXMgPQotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKTsKKwluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7CiAKLQluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBlc3RhdHMtPmNoZWNrc3VtX2Rpc2NhcmQgKwotCQkJCSAgIGVzdGF0cy0+bWFjX2Rpc2NhcmQ7CisJbnN0YXRzLT5yeF9kcm9wcGVkID0gZXN0YXRzLT5jaGVja3N1bV9kaXNjYXJkICsgZXN0YXRzLT5tYWNfZGlzY2FyZDsKIAluc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOwogCiAJbnN0YXRzLT5tdWx0aWNhc3QgPQogCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKIAotCW5zdGF0cy0+Y29sbGlzaW9ucyA9Ci0JCWVzdGF0cy0+c2luZ2xlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXMgKwotCQllc3RhdHMtPm11bHRpcGxlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXMgKwotCQllc3RhdHMtPmxhdGVfY29sbGlzaW9uX2ZyYW1lcyArCi0JCWVzdGF0cy0+ZXhjZXNzaXZlX2NvbGxpc2lvbl9mcmFtZXM7CisJbnN0YXRzLT5jb2xsaXNpb25zID0gZXN0YXRzLT5zaW5nbGVfY29sbGlzaW9uX3RyYW5zbWl0X2ZyYW1lcyArCisJCQkgICAgIGVzdGF0cy0+bXVsdGlwbGVfY29sbGlzaW9uX3RyYW5zbWl0X2ZyYW1lcyArCisJCQkgICAgIGVzdGF0cy0+bGF0ZV9jb2xsaXNpb25fZnJhbWVzICsKKwkJCSAgICAgZXN0YXRzLT5leGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lczsKIAogCW5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IGVzdGF0cy0+cnVudF9wYWNrZXRzX3JlY2VpdmVkICsKIAkJCQkgICBlc3RhdHMtPmphYmJlcl9wYWNrZXRzX3JlY2VpdmVkOwotCW5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZDsKKwluc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gZXN0YXRzLT5icmJfZGlzY2FyZCArCisJCQkJIGVzdGF0cy0+YnJiX3RydW5jYXRlX2Rpc2NhcmQ7CiAJbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0gZXN0YXRzLT5jcmNfcmVjZWl2ZV9lcnJvcnM7CiAJbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPSBlc3RhdHMtPmFsaWdubWVudF9lcnJvcnM7Ci0JbnN0YXRzLT5yeF9maWZvX2Vycm9ycyA9IGVzdGF0cy0+YnJiX2Rpc2NhcmQgKwotCQkJCSAgICAgICBlc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkOworCW5zdGF0cy0+cnhfZmlmb19lcnJvcnMgPSBlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZDsKIAluc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBlc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZDsKIAogCW5zdGF0cy0+cnhfZXJyb3JzID0gbnN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzICsKIAkJCSAgICBuc3RhdHMtPnJ4X292ZXJfZXJyb3JzICsKIAkJCSAgICBuc3RhdHMtPnJ4X2NyY19lcnJvcnMgKwogCQkJICAgIG5zdGF0cy0+cnhfZnJhbWVfZXJyb3JzICsKLQkJCSAgICBuc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzOworCQkJICAgIG5zdGF0cy0+cnhfZmlmb19lcnJvcnMgKworCQkJICAgIG5zdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKIAogCW5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPSBlc3RhdHMtPmxhdGVfY29sbGlzaW9uX2ZyYW1lcyArCi0JCQkJCSAgZXN0YXRzLT5leGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lczsKKwkJCQkgICAgZXN0YXRzLT5leGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lczsKIAluc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzID0gZXN0YXRzLT5mYWxzZV9jYXJyaWVyX2RldGVjdGlvbnM7CiAJbnN0YXRzLT50eF9maWZvX2Vycm9ycyA9IDA7CiAJbnN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzID0gMDsKQEAgLTQzMzQsNyArNTIwOSw3IEBACiAJCXJldHVybjsKIAogCWlmIChhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKQotCQlnb3RvIGJueDJ4X3Jlc3RhcnRfdGltZXI7CisJCWdvdG8gdGltZXJfcmVzdGFydDsKIAogCWlmIChwb2xsKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOwpAQCAtNDM0NCw3ICs1MjE5LDcgQEAKIAkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOwogCX0KIAotCWlmICghbm9tY3AgJiYgKGJwLT5iY192ZXIgPj0gMHgwNDAwMDMpKSB7CisJaWYgKCFub21jcCkgewogCQlpbnQgcG9ydCA9IGJwLT5wb3J0OwogCQl1MzIgZHJ2X3B1bHNlOwogCQl1MzIgbWNwX3B1bHNlOwpAQCAtNDM1Myw5ICs1MjI4LDkgQEAKIAkJYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEgJj0gRFJWX1BVTFNFX1NFUV9NQVNLOwogCQkvKiBUQkQgLSBhZGQgU1lTVEVNX1RJTUUgKi8KIAkJZHJ2X3B1bHNlID0gYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXE7Ci0JCVNITUVNX1dSKGJwLCBkcnZfZndfbWJbcG9ydF0uZHJ2X3B1bHNlX21iLCBkcnZfcHVsc2UpOworCQlTSE1FTV9XUihicCwgZnVuY19tYltwb3J0XS5kcnZfcHVsc2VfbWIsIGRydl9wdWxzZSk7CiAKLQkJbWNwX3B1bHNlID0gKFNITUVNX1JEKGJwLCBkcnZfZndfbWJbcG9ydF0ubWNwX3B1bHNlX21iKSAmCisJCW1jcF9wdWxzZSA9IChTSE1FTV9SRChicCwgZnVuY19tYltwb3J0XS5tY3BfcHVsc2VfbWIpICYKIAkJCSAgICAgTUNQX1BVTFNFX1NFUV9NQVNLKTsKIAkJLyogVGhlIGRlbHRhIGJldHdlZW4gZHJpdmVyIHB1bHNlIGFuZCBtY3AgcmVzcG9uc2UKIAkJICogc2hvdWxkIGJlIDEgKGJlZm9yZSBtY3AgcmVzcG9uc2UpIG9yIDAgKGFmdGVyIG1jcCByZXNwb25zZSkKQEAgLTQzNjksMTEgKzUyNDQsMTEgQEAKIAl9CiAKIAlpZiAoYnAtPnN0YXRzX3N0YXRlID09IFNUQVRTX1NUQVRFX0RJU0FCTEUpCi0JCWdvdG8gYm54MnhfcmVzdGFydF90aW1lcjsKKwkJZ290byB0aW1lcl9yZXN0YXJ0OwogCiAJYm54MnhfdXBkYXRlX3N0YXRzKGJwKTsKIAotYm54MnhfcmVzdGFydF90aW1lcjoKK3RpbWVyX3Jlc3RhcnQ6CiAJbW9kX3RpbWVyKCZicC0+dGltZXIsIGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbCk7CiB9CiAKQEAgLTQ0MzgsNiArNTMxMyw5IEBACiAJCQkJCSAgICBhdHRlbl9zdGF0dXNfYmxvY2spOwogCWRlZl9zYi0+YXR0ZW5fc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwogCisJYnAtPmRlZl9hdHRfaWR4ID0gMDsKKwlicC0+YXR0bl9zdGF0ZSA9IDA7CisKIAlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAgOgogCQkJICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOwogCkBAIC00NDcyLDYgKzUzNTAsOCBAQAogCQkJCQkgICAgdV9kZWZfc3RhdHVzX2Jsb2NrKTsKIAlkZWZfc2ItPnVfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBpZDsKIAorCWJwLT5kZWZfdV9pZHggPSAwOworCiAJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwogCSAgICAgICBVU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQocG9ydCksIFU2NF9MTyhzZWN0aW9uKSk7CiAJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwpAQCAtNDQ4OSw2ICs1MzY5LDggQEAKIAkJCQkJICAgIGNfZGVmX3N0YXR1c19ibG9jayk7CiAJZGVmX3NiLT5jX2RlZl9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gaWQ7CiAKKwlicC0+ZGVmX2NfaWR4ID0gMDsKKwogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKIAkgICAgICAgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQpLCBVNjRfTE8oc2VjdGlvbikpOwogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKQEAgLTQ1MDYsNiArNTM4OCw4IEBACiAJCQkJCSAgICB0X2RlZl9zdGF0dXNfYmxvY2spOwogCWRlZl9zYi0+dF9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IGlkOwogCisJYnAtPmRlZl90X2lkeCA9IDA7CisKIAlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCiAJICAgICAgIFRTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0KSwgVTY0X0xPKHNlY3Rpb24pKTsKIAlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCkBAIC00NTIzLDYgKzU0MDcsOCBAQAogCQkJCQkgICAgeF9kZWZfc3RhdHVzX2Jsb2NrKTsKIAlkZWZfc2ItPnhfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBpZDsKIAorCWJwLT5kZWZfeF9pZHggPSAwOworCiAJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwogCSAgICAgICBYU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQocG9ydCksIFU2NF9MTyhzZWN0aW9uKSk7CiAJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwpAQCAtNDUzNSw2ICs1NDIxLDggQEAKIAkJUkVHX1dSMTYoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCiAJCQkgWFNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBpbmRleCksIDB4MSk7CiAKKwlicC0+c3RhdF9wZW5kaW5nID0gMDsKKwogCWJueDJ4X2Fja19zYihicCwgaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOwogfQogCkBAIC00NjI2LDcgKzU1MTQsNyBAQAogCQlmcC0+cnhfYmRfcHJvZCA9IGZwLT5yeF9jb21wX3Byb2QgPSByaW5nX3Byb2Q7CiAJCWZwLT5yeF9wa3QgPSBmcC0+cnhfY2FsbHMgPSAwOwogCi0JCS8qIFdhcm5pbmchIHRoaXMgd2lsbCBnZW5yYXRlIGFuIGludGVycnVwdCAodG8gdGhlIFRTVE9STSkgKi8KKwkJLyogV2FybmluZyEgdGhpcyB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCAodG8gdGhlIFRTVE9STSkgKi8KIAkJLyogbXVzdCBvbmx5IGJlIGRvbmUgd2hlbiBjaGlwIGlzIGluaXRpYWxpemVkICovCiAJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKIAkJICAgICAgIFRTVE9STV9SQ1FfUFJPRF9PRkZTRVQocG9ydCwgaiksIHJpbmdfcHJvZCk7CkBAIC00Njc4LDcgKzU1NjYsNiBAQAogCiAJYnAtPnNwcV9sZWZ0ID0gTUFYX1NQUV9QRU5ESU5HOwogCWJwLT5zcHFfcHJvZF9pZHggPSAwOwotCWJwLT5kc2Jfc3BfcHJvZF9pZHggPSAwOwogCWJwLT5kc2Jfc3BfcHJvZCA9IEJOWDJYX1NQX0RTQl9JTkRFWDsKIAlicC0+c3BxX3Byb2RfYmQgPSBicC0+c3BxOwogCWJwLT5zcHFfbGFzdF9iZCA9IGJwLT5zcHFfcHJvZF9iZCArIE1BWF9TUF9ERVNDX0NOVDsKQEAgLTQ3NTUsNiArNTY0Miw0MiBAQAogCVJFR19XUihicCwgUFJTX1JFR19BX1BSU1VfMjAsIDB4Zik7CiB9CiAKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9jbGllbnRfY29uZmlnKHN0cnVjdCBibngyeCAqYnApCit7CisjaWZkZWYgQkNNX1ZMQU4KKwlpbnQgbW9kZSA9IGJwLT5yeF9tb2RlOworI2VuZGlmCisJaW50IGksIHBvcnQgPSBicC0+cG9ydDsKKwlzdHJ1Y3QgdHN0b3JtX2V0aF9jbGllbnRfY29uZmlnIHRzdG9ybV9jbGllbnQgPSB7MH07CisKKwl0c3Rvcm1fY2xpZW50Lm10dSA9IGJwLT5kZXYtPm10dTsKKwl0c3Rvcm1fY2xpZW50LnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IDA7CisJdHN0b3JtX2NsaWVudC5jb25maWdfZmxhZ3MgPQorCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRTsKKyNpZmRlZiBCQ01fVkxBTgorCWlmIChtb2RlICYmIGJwLT52bGdycCkgeworCQl0c3Rvcm1fY2xpZW50LmNvbmZpZ19mbGFncyB8PQorCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTU9WQUxfRU5BQkxFOworCQlEUChORVRJRl9NU0dfSUZVUCwgInZsYW4gcmVtb3ZhbCBlbmFibGVkXG4iKTsKKwl9CisjZW5kaWYKKwlpZiAobW9kZSAhPSBCTlgyWF9SWF9NT0RFX1BST01JU0MpCisJCXRzdG9ybV9jbGllbnQuZHJvcF9mbGFncyA9CisJCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfTUFDX0VSUjsKKworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBpKSwKKwkJICAgICAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzBdKTsKKwkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGkpICsgNCwKKwkJICAgICAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzFdKTsKKwl9CisKKy8qCURQKE5FVElGX01TR19JRlVQLCAidHN0b3JtX2NsaWVudDogMHglMDh4IDB4JTA4eFxuIiwKKwkgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVswXSwgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMV0pOyAqLworfQorCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBtb2RlID0gYnAtPnJ4X21vZGU7CkBAIC00Nzk0LDQxICs1NzE3LDkgQEAKIC8qICAgICAgCURQKE5FVElGX01TR19JRlVQLCAidHN0b3JtX21hY19maWx0ZXJbJWRdOiAweCUwOHhcbiIsIGksCiAJCSAgICgodTMyICopJnRzdG9ybV9tYWNfZmlsdGVyKVtpXSk7ICovCiAJfQotfQogCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfY2xpZW50X2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgY2xpZW50X2lkKQotewotI2lmZGVmIEJDTV9WTEFOCi0JaW50IG1vZGUgPSBicC0+cnhfbW9kZTsKLSNlbmRpZgotCWludCBwb3J0ID0gYnAtPnBvcnQ7Ci0Jc3RydWN0IHRzdG9ybV9ldGhfY2xpZW50X2NvbmZpZyB0c3Rvcm1fY2xpZW50ID0gezB9OwotCi0JdHN0b3JtX2NsaWVudC5tdHUgPSBicC0+ZGV2LT5tdHU7Ci0JdHN0b3JtX2NsaWVudC5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPSAwOwotCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzID0KLQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFOwotI2lmZGVmIEJDTV9WTEFOCi0JaWYgKG1vZGUgJiYgYnAtPnZsZ3JwKSB7Ci0JCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzIHw9Ci0JCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEU7Ci0JCURQKE5FVElGX01TR19JRlVQLCAidmxhbiByZW1vdmFsIGVuYWJsZWRcbiIpOwotCX0KLSNlbmRpZgotCXRzdG9ybV9jbGllbnQuZHJvcF9mbGFncyA9IChUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9JUF9DU19FUlIgfAotCQkJCSAgICBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UQ1BfQ1NfRVJSIHwKLQkJCQkgICAgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVURQX0NTX0VSUiB8Ci0JCQkJICAgIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX01BQ19FUlIpOwotCi0JUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCSAgICAgICBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSwKLQkgICAgICAgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMF0pOwotCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGNsaWVudF9pZCkgKyA0LAotCSAgICAgICAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVsxXSk7Ci0KLS8qICAgICAgRFAoTkVUSUZfTVNHX0lGVVAsICJ0c3Rvcm1fY2xpZW50OiAweCUwOHggMHglMDh4XG4iLAotCSAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzBdLCAoKHUzMiAqKSZ0c3Rvcm1fY2xpZW50KVsxXSk7ICovCisJaWYgKG1vZGUgIT0gQk5YMlhfUlhfTU9ERV9OT05FKQorCQlibngyeF9zZXRfY2xpZW50X2NvbmZpZyhicCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWwoc3RydWN0IGJueDJ4ICpicCkKQEAgLTQ4MzYsNyArNTcyNyw2IEBACiAJaW50IHBvcnQgPSBicC0+cG9ydDsKIAlzdHJ1Y3QgdHN0b3JtX2V0aF9mdW5jdGlvbl9jb21tb25fY29uZmlnIHRzdG9ybV9jb25maWcgPSB7MH07CiAJc3RydWN0IHN0YXRzX2luZGljYXRpb25fZmxhZ3Mgc3RhdHNfZmxhZ3MgPSB7MH07Ci0JaW50IGk7CiAKIAlpZiAoaXNfbXVsdGkoYnApKSB7CiAJCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzID0gTVVMVElfRkxBR1M7CkBAIC00ODUwLDEzICs1NzQwLDkgQEAKIC8qICAgICAgRFAoTkVUSUZfTVNHX0lGVVAsICJ0c3Rvcm1fY29uZmlnOiAweCUwOHhcbiIsCiAJICAgKCoodTMyICopJnRzdG9ybV9jb25maWcpKTsgKi8KIAotCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOyAvKiBubyByeCB1bnRpbGwgbGluayBpcyB1cCAqLworCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOyAvKiBubyByeCB1bnRpbCBsaW5rIGlzIHVwICovCiAJYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoYnApOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCi0JCWJueDJ4X3NldF9jbGllbnRfY29uZmlnKGJwLCBpKTsKLQotCiAJc3RhdHNfZmxhZ3MuY29sbGVjdF9ldGggPSBjcHVfdG9fbGUzMigxKTsKIAogCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChwb3J0KSwKQEAgLTQ5MDIsNyArNTc4OCw3IEBACiAJYm54MnhfaW5pdF9pbnRlcm5hbChicCk7CiAJYm54MnhfaW5pdF9zdGF0cyhicCk7CiAJYm54MnhfaW5pdF9pbmRfdGFibGUoYnApOwotCWJueDJ4X2VuYWJsZV9pbnQoYnApOworCWJueDJ4X2ludF9lbmFibGUoYnApOwogCiB9CiAKQEAgLTUyNjUsOCArNjE1MSwxMCBAQAogCWlmIChtb2RlICYgMHgxKSB7ICAgICAgIC8qIGluaXQgY29tbW9uICovCiAJCURQKEJOWDJYX01TR19NQ1AsICJzdGFydGluZyBjb21tb24gaW5pdCAgZnVuYyAlZCAgbW9kZSAleFxuIiwKIAkJICAgZnVuYywgbW9kZSk7Ci0JCVJFR19XUihicCwgTUlTQ19SRUdfUkVTRVRfUkVHXzEsIDB4ZmZmZmZmZmYpOwotCQlSRUdfV1IoYnAsIE1JU0NfUkVHX1JFU0VUX1JFR18yLCAweGZmZmMpOworCQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVCwKKwkJICAgICAgIDB4ZmZmZmZmZmYpOworCQlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1NFVCwKKwkJICAgICAgIDB4ZmZmYyk7CiAJCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQ09NTU9OX1NUQVJULCBNSVNDX0NPTU1PTl9FTkQpOwogCiAJCVJFR19XUihicCwgTUlTQ19SRUdfTENQTExfQ1RSTF9SRUdfMiwgMHgxMDApOwpAQCAtNTM1OSw3ICs2MjQ3LDcgQEAKIAkJUkVHX1JEKGJwLCBVU0VNX1JFR19QQVNTSVZFX0JVRkZFUiArIDgpOwogI2VuZGlmCiAJCWJueDJ4X2luaXRfYmxvY2soYnAsIFFNX0NPTU1PTl9TVEFSVCwgUU1fQ09NTU9OX0VORCk7Ci0JCS8qIHNvZnRyZXN0IHB1bHNlICovCisJCS8qIHNvZnQgcmVzZXQgcHVsc2UgKi8KIAkJUkVHX1dSKGJwLCBRTV9SRUdfU09GVF9SRVNFVCwgMSk7CiAJCVJFR19XUihicCwgUU1fUkVHX1NPRlRfUkVTRVQsIDApOwogCkBAIC01NDEzLDcgKzYzMDEsNyBAQAogCQlSRUdfV1IoYnAsIFNSQ19SRUdfU09GVF9SU1QsIDEpOwogCQlmb3IgKGkgPSBTUkNfUkVHX0tFWVJTUzBfMDsgaSA8PSBTUkNfUkVHX0tFWVJTUzFfOTsgaSArPSA0KSB7CiAJCQlSRUdfV1IoYnAsIGksIDB4YzBjYWMwMWEpOwotCQkJLyogVE9ETzogcmVwbGVhY2Ugd2l0aCBzb21ldGhpbmcgbWVhbmluZ2Z1bGwgKi8KKwkJCS8qIFRPRE86IHJlcGxhY2Ugd2l0aCBzb21ldGhpbmcgbWVhbmluZ2Z1bCAqLwogCQl9CiAJCS8qIFNSQ0ggQ09NTU9OIGNvbWVzIGhlcmUgKi8KIAkJUkVHX1dSKGJwLCBTUkNfUkVHX1NPRlRfUlNULCAwKTsKQEAgLTU0ODYsNiArNjM3NCwyOCBAQAogCQllbmFibGVfYmxvY2tzX2F0dGVudGlvbihicCk7CiAJCS8qIGVuYWJsZV9ibG9ja3NfcGFyaXR5KGJwKTsgKi8KIAorCQlzd2l0Y2ggKGJwLT5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7CisJCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwkJCS8qIEZhbiBmYWlsdXJlIGlzIGluZGljYXRlZCBieSBTUElPIDUgKi8KKwkJCWJueDJ4X3NldF9zcGlvKGJwLCBNSVNDX1JFR0lTVEVSU19TUElPXzUsCisJCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWik7CisKKwkJCS8qIHNldCB0byBhY3RpdmUgbG93IG1vZGUgKi8KKwkJCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfU1BJT19JTlQpOworCQkJdmFsIHw9ICgoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpIDw8CisJCQkJCU1JU0NfUkVHSVNURVJTX1NQSU9fSU5UX09MRF9TRVRfUE9TKTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfU1BJT19JTlQsIHZhbCk7CisKKwkJCS8qIGVuYWJsZSBpbnRlcnJ1cHQgdG8gc2lnbmFsIHRoZSBJR1UgKi8KKwkJCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfU1BJT19FVkVOVF9FTik7CisJCQl2YWwgfD0gKDEgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT181KTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfU1BJT19FVkVOVF9FTiwgdmFsKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCiAJfSAvKiBlbmQgb2YgY29tbW9uIGluaXQgKi8KIAogCS8qIHBlciBwb3J0IGluaXQgKi8KQEAgLTU2NDUsOSArNjU1NSwyMSBAQAogCS8qIFBvcnQgTUNQIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IERNQUUgY29tZXMgaGVyZSAqLwogCisJc3dpdGNoIChicC0+Ym9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgeworCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRzoKKwkJLyogYWRkIFNQSU8gNSB0byBncm91cCAwICovCisJCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKKwkJdmFsIHw9IEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81OworCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCwgdmFsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKIAlibngyeF9saW5rX3Jlc2V0KGJwKTsKIAotCS8qIFJlc2V0IHBjaWV4IGVycm9ycyBmb3IgZGVidWcgKi8KKwkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KIAlSRUdfV1IoYnAsIDB4MjExNCwgMHhmZmZmZmZmZik7CiAJUkVHX1dSKGJwLCAweDIxMjAsIDB4ZmZmZmZmZmYpOwogCVJFR19XUihicCwgMHgyODE0LCAweGZmZmZmZmZmKTsKQEAgLTU2NjksOSArNjU5MSw5IEBACiAJCXBvcnQgPSBicC0+cG9ydDsKIAogCQlicC0+ZndfZHJ2X3B1bHNlX3dyX3NlcSA9Ci0JCQkJKFNITUVNX1JEKGJwLCBkcnZfZndfbWJbcG9ydF0uZHJ2X3B1bHNlX21iKSAmCisJCQkJKFNITUVNX1JEKGJwLCBmdW5jX21iW3BvcnRdLmRydl9wdWxzZV9tYikgJgogCQkJCSBEUlZfUFVMU0VfU0VRX01BU0spOwotCQlicC0+ZndfbWIgPSBTSE1FTV9SRChicCwgZHJ2X2Z3X21iW3BvcnRdLmZ3X21iX3BhcmFtKTsKKwkJYnAtPmZ3X21iID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbcG9ydF0uZndfbWJfcGFyYW0pOwogCQlEUChCTlgyWF9NU0dfTUNQLCAiZHJ2X3B1bHNlIDB4JXggIGZ3X21iIDB4JXhcbiIsCiAJCSAgIGJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxLCBicC0+ZndfbWIpOwogCX0gZWxzZSB7CkBAIC01NjgxLDE2ICs2NjAzLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotLyogc2VuZCB0aGUgTUNQIGEgcmVxdWVzdCwgYmxvY2sgdW50aWxsIHRoZXJlIGlzIGEgcmVwbHkgKi8KKy8qIHNlbmQgdGhlIE1DUCBhIHJlcXVlc3QsIGJsb2NrIHVudGlsIHRoZXJlIGlzIGEgcmVwbHkgKi8KIHN0YXRpYyB1MzIgYm54MnhfZndfY29tbWFuZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgY29tbWFuZCkKIHsKLQl1MzIgcmMgPSAwOwotCXUzMiBzZXEgPSArK2JwLT5md19zZXE7CiAJaW50IHBvcnQgPSBicC0+cG9ydDsKKwl1MzIgc2VxID0gKyticC0+Zndfc2VxOworCXUzMiByYyA9IDA7CiAKLQlTSE1FTV9XUihicCwgZHJ2X2Z3X21iW3BvcnRdLmRydl9tYl9oZWFkZXIsIGNvbW1hbmR8c2VxKTsKLQlEUChCTlgyWF9NU0dfTUNQLCAid3JvdGUgY29tbWFuZCAoJXgpIHRvIEZXIE1CXG4iLCBjb21tYW5kfHNlcSk7CisJU0hNRU1fV1IoYnAsIGZ1bmNfbWJbcG9ydF0uZHJ2X21iX2hlYWRlciwgKGNvbW1hbmQgfCBzZXEpKTsKKwlEUChCTlgyWF9NU0dfTUNQLCAid3JvdGUgY29tbWFuZCAoJXgpIHRvIEZXIE1CXG4iLCAoY29tbWFuZCB8IHNlcSkpOwogCiAJLyogbGV0IHRoZSBGVyBkbyBpdCdzIG1hZ2ljIC4uLiAqLwogCW1zbGVlcCgxMDApOyAvKiBUQkQgKi8KQEAgLTU2OTgsMTkgKzY2MTksMjAgQEAKIAlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCiAJCW1zbGVlcCg5MDApOwogCi0JcmMgPSBTSE1FTV9SRChicCwgZHJ2X2Z3X21iW3BvcnRdLmZ3X21iX2hlYWRlcik7Ci0KKwlyYyA9IFNITUVNX1JEKGJwLCBmdW5jX21iW3BvcnRdLmZ3X21iX2hlYWRlcik7CiAJRFAoQk5YMlhfTVNHX01DUCwgInJlYWQgKCV4KSBzZXEgaXMgKCV4KSBmcm9tIEZXIE1CXG4iLCByYywgc2VxKTsKIAogCS8qIGlzIHRoaXMgYSByZXBseSB0byBvdXIgY29tbWFuZD8gKi8KIAlpZiAoc2VxID09IChyYyAmIEZXX01TR19TRVFfTlVNQkVSX01BU0spKSB7CiAJCXJjICY9IEZXX01TR19DT0RFX01BU0s7CisKIAl9IGVsc2UgewogCQkvKiBGVyBCVUchICovCiAJCUJOWDJYX0VSUigiRlcgZmFpbGVkIHRvIHJlc3BvbmQhXG4iKTsKIAkJYm54MnhfZndfZHVtcChicCk7CiAJCXJjID0gMDsKIAl9CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTU4NjksNyArNjc5MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IDE2KjEwMjQ7IGkgKz0gNjQpCiAJCSogKHU2NCAqKSgoY2hhciAqKWJwLT50MiArIGkgKyA1NikgPSBicC0+dDJfbWFwcGluZyArIGkgKyA2NDsKIAotCS8qIG5vdyBzaXh1cCB0aGUgbGFzdCBsaW5lIGluIHRoZSBibG9jayB0byBwb2ludCB0byB0aGUgbmV4dCBibG9jayAqLworCS8qIG5vdyBmaXh1cCB0aGUgbGFzdCBsaW5lIGluIHRoZSBibG9jayB0byBwb2ludCB0byB0aGUgbmV4dCBibG9jayAqLwogCSoodTY0ICopKChjaGFyICopYnAtPnQyICsgMTAyNCoxNi04KSA9IGJwLT50Ml9tYXBwaW5nOwogCiAJLyogVGltZXIgYmxvY2sgYXJyYXkgKE1BWF9DT05OKjgpIHBoeXMgdW5jYWNoZWQgZm9yIG5vdyAxMDI0IGNvbm5zICovCkBAIC01OTUwLDIyICs2ODcyLDE5IEBACiAJaW50IGk7CiAKIAlmcmVlX2lycShicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsIGJwLT5kZXYpOwotCURQKE5FVElGX01TR19JRkRPV04sICJybGVhc2VkIHNwIGlycSAoJWQpXG4iLAorCURQKE5FVElGX01TR19JRkRPV04sICJyZWxlYXNlZCBzcCBpcnEgKCVkKVxuIiwKIAkgICBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IpOwogCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImFib3V0IHRvIHJsZWFzZSBmcCAjJWQtPiVkIGlycSAgIgorCQlEUChORVRJRl9NU0dfSUZET1dOLCAiYWJvdXQgdG8gcmVsZWFzZSBmcCAjJWQtPiVkIGlycSAgIgogCQkgICAic3RhdGUoJXgpXG4iLCBpLCBicC0+bXNpeF90YWJsZVtpICsgMV0udmVjdG9yLAogCQkgICBibngyeF9mcChicCwgaSwgc3RhdGUpKTsKIAotCQlpZiAoYm54MnhfZnAoYnAsIGksIHN0YXRlKSAhPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQpIHsKKwkJaWYgKGJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgIT0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEKQorCQkJQk5YMlhfRVJSKCJJUlEgb2YgZnAgIyVkIGJlaW5nIGZyZWVkIHdoaWxlICIKKwkJCQkgICJzdGF0ZSAhPSBjbG9zZWRcbiIsIGkpOwogCi0JCQlmcmVlX2lycShicC0+bXNpeF90YWJsZVtpICsgMV0udmVjdG9yLCAmYnAtPmZwW2ldKTsKLQkJCWJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQ7Ci0KLQkJfSBlbHNlCi0JCQlEUChORVRJRl9NU0dfSUZET1dOLCAiaXJxIG5vdCBmcmVlZFxuIik7Ci0KKwkJZnJlZV9pcnEoYnAtPm1zaXhfdGFibGVbaSArIDFdLnZlY3RvciwgJmJwLT5mcFtpXSk7CiAJfQogCiB9CkBAIC01OTk1LDcgKzY5MTQsNyBAQAogCiAJaWYgKHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgJmJwLT5tc2l4X3RhYmxlWzBdLAogCQkJCSAgICAgYnAtPm51bV9xdWV1ZXMgKyAxKSl7Ci0JCUJOWDJYX0VSUigiZmFpbGVkIHRvIGVuYWJsZSBtc2l4XG4iKTsKKwkJQk5YMlhfTE9HKCJmYWlsZWQgdG8gZW5hYmxlIE1TSS1YXG4iKTsKIAkJcmV0dXJuIC0xOwogCiAJfQpAQCAtNjAxMCwxMSArNjkyOSw4IEBACiBzdGF0aWMgaW50IGJueDJ4X3JlcV9tc2l4X2lycXMoc3RydWN0IGJueDJ4ICpicCkKIHsKIAotCiAJaW50IGksIHJjOwogCi0JRFAoTkVUSUZfTVNHX0lGVVAsICJhYm91dCB0byByZXF1ZXN0IHNwIGlycVxuIik7Ci0KIAlyYyA9IHJlcXVlc3RfaXJxKGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwgYm54MnhfbXNpeF9zcF9pbnQsIDAsCiAJCQkgYnAtPmRldi0+bmFtZSwgYnAtPmRldik7CiAKQEAgLTYwMjksNyArNjk0NSw4IEBACiAJCQkJIGJwLT5kZXYtPm5hbWUsICZicC0+ZnBbaV0pOwogCiAJCWlmIChyYykgewotCQkJQk5YMlhfRVJSKCJyZXF1ZXN0IGZwICMlZCBpcnEgZmFpbGVkXG4iLCBpKTsKKwkJCUJOWDJYX0VSUigicmVxdWVzdCBmcCAjJWQgaXJxIGZhaWxlZCAgIgorCQkJCSAgInJjICVkXG4iLCBpLCByYyk7CiAJCQlibngyeF9mcmVlX21zaXhfaXJxcyhicCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CkBAIC02MTA5LDggKzcwMjYsOCBAQAogCS8qIGNhbiB0YWtlIGEgd2hpbGUgaWYgYW55IHBvcnQgaXMgcnVubmluZyAqLwogCWludCB0aW1lb3V0ID0gNTAwOwogCi0JLyogRFAoIndhaXRpbmcgZm9yIHN0YXRlIHRvIGJlY29tZSAlZCBvbiBJRFggWyVkXVxuIiwKLQlzdGF0ZSwgc2JfaWR4KTsgKi8KKwlEUChORVRJRl9NU0dfSUZVUCwgIiVzIGZvciBzdGF0ZSB0byBiZWNvbWUgJXggb24gSURYIFslZF1cbiIsCisJICAgcG9sbCA/ICJwb2xsaW5nIiA6ICJ3YWl0aW5nIiwgc3RhdGUsIGlkeCk7CiAKIAltaWdodF9zbGVlcCgpOwogCkBAIC02MTI4LDcgKzcwNDUsNyBAQAogCiAJCW1iKCk7IC8qIHN0YXRlIGlzIGNoYW5nZWQgYnkgYm54Mnhfc3BfZXZlbnQoKSovCiAKLQkJaWYgKCpzdGF0ZV9wICE9IHN0YXRlKQorCQlpZiAoKnN0YXRlX3AgPT0gc3RhdGUpCiAJCQlyZXR1cm4gMDsKIAogCQl0aW1lb3V0LS07CkBAIC02MTM2LDE3ICs3MDUzLDE3IEBACiAKIAl9CiAKLQogCS8qIHRpbWVvdXQhICovCi0JQk5YMlhfRVJSKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHJhbXJvZCAlZCBvbiAlZFxuIiwgc3RhdGUsIGlkeCk7Ci0JcmV0dXJuIC1FQlVTWTsKKwlCTlgyWF9FUlIoInRpbWVvdXQgJXMgZm9yIHN0YXRlICV4IG9uIElEWCBbJWRdXG4iLAorCQkgIHBvbGwgPyAicG9sbGluZyIgOiAid2FpdGluZyIsIHN0YXRlLCBpZHgpOwogCisJcmV0dXJuIC1FQlVTWTsKIH0KIAogc3RhdGljIGludCBibngyeF9zZXR1cF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCiB7CiAKLQkvKiByZXNldCBJR1Ugc3RhYWUgKi8KKwkvKiByZXNldCBJR1Ugc3RhdGUgKi8KIAlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7CiAKIAkvKiBTRVRVUCByYW1yb2QgKi8KQEAgLTYxNjIsMTIgKzcwNzksMTMgQEAKIAkvKiByZXNldCBJR1Ugc3RhdGUgKi8KIAlibngyeF9hY2tfc2IoYnAsIGluZGV4LCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKIAorCS8qIFNFVFVQIHJhbXJvZCAqLwogCWJwLT5mcFtpbmRleF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9PUEVOSU5HOwogCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCwgaW5kZXgsIDAsIGluZGV4LCAwKTsKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlyZXR1cm4gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX09QRU4sIGluZGV4LAotCQkJCSAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAxKTsKKwkJCQkgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMCk7CiAKIH0KIApAQCAtNjE3Nyw4ICs3MDk1LDggQEAKIAogc3RhdGljIGludCBibngyeF9uaWNfbG9hZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgcmVxX2lycSkKIHsKLQlpbnQgcmM7Ci0JaW50IGkgPSAwOworCXUzMiBsb2FkX2NvZGU7CisJaW50IGk7CiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQ7CiAKQEAgLTYxODgsMjYgKzcxMDYsMjggQEAKIAkgICBpbml0aWFsaXplZCwgb3RoZXJ3aXNlIC0gbm90LgogCSovCiAJaWYgKCFub21jcCkgewotCQlyYyA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9MT0FEX1JFUSk7Ci0JCWlmIChyYyA9PSBGV19NU0dfQ09ERV9EUlZfTE9BRF9SRUZVU0VEKSB7CisJCWxvYWRfY29kZSA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9MT0FEX1JFUSk7CisJCWlmICghbG9hZF9jb2RlKSB7CisJCQlCTlgyWF9FUlIoIk1DUCByZXNwb25zZSBmYWlsdXJlLCB1bmxvYWRpbmdcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlpZiAobG9hZF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9MT0FEX1JFRlVTRUQpIHsKKwkJCUJOWDJYX0VSUigiTUNQIHJlZnVzZWQgbG9hZCByZXF1ZXN0LCB1bmxvYWRpbmdcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsgLyogb3RoZXIgcG9ydCBpbiBkaWFnbm9zdGljIG1vZGUgKi8KIAkJfQogCX0gZWxzZSB7Ci0JCXJjID0gRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OOworCQlsb2FkX2NvZGUgPSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT047CiAJfQogCi0JRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwgYnAtPm51bV9xdWV1ZXMpOwotCiAJLyogaWYgd2UgY2FuJ3QgdXNlIG1zaXggd2Ugb25seSBuZWVkIG9uZSBmcCwKIAkgKiBzbyB0cnkgdG8gZW5hYmxlIG1zaXggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCiAJICogYW5kIGZhbGxiYWNrIHRvIGludGEgd2l0aCBvbmUgZnAKIAkgKi8KIAlpZiAocmVxX2lycSkgewotCiAJCWlmICh1c2VfaW50YSkgewogCQkJYnAtPm51bV9xdWV1ZXMgPSAxOwogCQl9IGVsc2UgewotCQkJaWYgKHVzZV9tdWx0aSA+IDEgJiYgdXNlX211bHRpIDw9IDE2KQorCQkJaWYgKCh1c2VfbXVsdGkgPiAxKSAmJiAodXNlX211bHRpIDw9IDE2KSkKIAkJCQkvKiB1c2VyIHJlcXVlc3RlZCBudW1iZXIgKi8KIAkJCQlicC0+bnVtX3F1ZXVlcyA9IHVzZV9tdWx0aTsKIAkJCWVsc2UgaWYgKHVzZV9tdWx0aSA9PSAxKQpAQCAtNjIxNiwxNSArNzEzNiwxNyBAQAogCQkJCWJwLT5udW1fcXVldWVzID0gMTsKIAogCQkJaWYgKGJueDJ4X2VuYWJsZV9tc2l4KGJwKSkgewotCQkJCS8qIGZhaWxkIHRvIGVuYWJsZSBtc2l4ICovCisJCQkJLyogZmFpbGVkIHRvIGVuYWJsZSBtc2l4ICovCiAJCQkJYnAtPm51bV9xdWV1ZXMgPSAxOwogCQkJCWlmICh1c2VfbXVsdGkpCi0JCQkJCUJOWDJYX0VSUigiTXV0aSByZXF1ZXN0ZWQgYnV0IGZhaWxlZCIKKwkJCQkJQk5YMlhfRVJSKCJNdWx0aSByZXF1ZXN0ZWQgYnV0IGZhaWxlZCIKIAkJCQkJCSAgIiB0byBlbmFibGUgTVNJLVhcbiIpOwogCQkJfQogCQl9CiAJfQogCisJRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwgYnAtPm51bV9xdWV1ZXMpOworCiAJaWYgKGJueDJ4X2FsbG9jX21lbShicCkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02MjMyLDEzICs3MTU0LDEzIEBACiAJCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpIHsKIAkJCWlmIChibngyeF9yZXFfbXNpeF9pcnFzKGJwKSkgewogCQkJCXBjaV9kaXNhYmxlX21zaXgoYnAtPnBkZXYpOwotCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJCWdvdG8gbG9hZF9lcnJvcjsKIAkJCX0KIAogCQl9IGVsc2UgewogCQkJaWYgKGJueDJ4X3JlcV9pcnEoYnApKSB7CiAJCQkJQk5YMlhfRVJSKCJJUlEgcmVxdWVzdCBmYWlsZWQsIGFib3J0aW5nXG4iKTsKLQkJCQlnb3RvIG91dF9lcnJvcjsKKwkJCQlnb3RvIGxvYWRfZXJyb3I7CiAJCQl9CiAJCX0KIAl9CkBAIC02MjQ5LDMxICs3MTcxLDI1IEBACiAKIAogCS8qIEluaXRpYWxpemUgSFcgKi8KLQlpZiAoYm54MnhfZnVuY3Rpb25faW5pdChicCwgKHJjID09IEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTikpKSB7CisJaWYgKGJueDJ4X2Z1bmN0aW9uX2luaXQoYnAsCisJCQkJKGxvYWRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT04pKSkgewogCQlCTlgyWF9FUlIoIkhXIGluaXQgZmFpbGVkLCBhYm9ydGluZ1xuIik7Ci0JCWdvdG8gb3V0X2Vycm9yOworCQlnb3RvIGxvYWRfZXJyb3I7CiAJfQogCiAKIAlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDApOwogCi0JLyogUmVlbmFibGUgU1AgdGFza2xldCAqLwotCS8qaWYgKGJwLT5zcF90YXNrX2VuKSB7IAkgICAgICAgKi8KLQkvKiAgICAgICAgdGFza2xldF9lbmFibGUoJmJwLT5zcF90YXNrKTsqLwotCS8qfSBlbHNlIHsgICAgICAJCSAgICAgICAqLwotCS8qICAgICAgICBicC0+c3BfdGFza19lbiA9IDE7ICAgICAgICAgICovCi0JLyp9ICAgICAJCQkgICAgICAgKi8KIAogCS8qIFNldHVwIE5JQyBpbnRlcm5hbHMgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJYm54MnhfbmljX2luaXQoYnApOwogCiAJLyogU2VuZCBMT0FEX0RPTkUgY29tbWFuZCB0byBNQ1AgKi8KIAlpZiAoIW5vbWNwKSB7Ci0JCXJjID0gYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0xPQURfRE9ORSk7Ci0JCURQKE5FVElGX01TR19JRlVQLCAicmMgPSAweCV4XG4iLCByYyk7Ci0JCWlmICghcmMpIHsKKwkJbG9hZF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0xPQURfRE9ORSk7CisJCWlmICghbG9hZF9jb2RlKSB7CiAJCQlCTlgyWF9FUlIoIk1DUCByZXNwb25zZSBmYWlsdXJlLCB1bmxvYWRpbmdcbiIpOwotCQkJZ290byBpbnRfZGlzYWJsZTsKKwkJCWdvdG8gbG9hZF9pbnRfZGlzYWJsZTsKIAkJfQogCX0KIApAQCAtNjI4NSwxMSArNzIwMSwxMSBAQAogCQluYXBpX2VuYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIAogCWlmIChibngyeF9zZXR1cF9sZWFkaW5nKGJwKSkKLQkJZ290byBzdG9wX25ldGlmOworCQlnb3RvIGxvYWRfc3RvcF9uZXRpZjsKIAogCWZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIGkpCiAJCWlmIChibngyeF9zZXR1cF9tdWx0aShicCwgaSkpCi0JCQlnb3RvIHN0b3BfbmV0aWY7CisJCQlnb3RvIGxvYWRfc3RvcF9uZXRpZjsKIAogCWJueDJ4X3NldF9tYWNfYWRkcihicCk7CiAKQEAgLTYzMTMsNDIgKzcyMjksMjQgQEAKIAogCXJldHVybiAwOwogCi1zdG9wX25ldGlmOgorbG9hZF9zdG9wX25ldGlmOgogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQogCQluYXBpX2Rpc2FibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiAKLWludF9kaXNhYmxlOgotCWJueDJ4X2Rpc2FibGVfaW50X3N5bmMoYnApOworbG9hZF9pbnRfZGlzYWJsZToKKwlibngyeF9pbnRfZGlzYWJsZV9zeW5jKGJwKTsKIAogCWJueDJ4X2ZyZWVfc2ticyhicCk7CiAJYm54MnhfZnJlZV9pcnEoYnApOwogCi1vdXRfZXJyb3I6Citsb2FkX2Vycm9yOgogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKIAogCS8qIFRCRCB3ZSByZWFsbHkgbmVlZCB0byByZXNldCB0aGUgY2hpcAogCSAgIGlmIHdlIHdhbnQgdG8gcmVjb3ZlciBmcm9tIHRoaXMgKi8KLQlyZXR1cm4gcmM7CisJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfbmV0aWZfc3RvcChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBpOwotCi0JYnAtPnJ4X21vZGUgPSBCTlgyWF9SWF9NT0RFX05PTkU7Ci0JYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoYnApOwotCi0JYm54MnhfZGlzYWJsZV9pbnRfc3luYyhicCk7Ci0JYm54MnhfbGlua19yZXNldChicCk7Ci0KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJbmFwaV9kaXNhYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKLQkJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKLQkJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOyAvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KLQl9Ci19CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X2NoaXAoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlc2V0X2NvZGUpCiB7CkBAIC02NDAxLDIwICs3Mjk5LDIwIEBACiAKIAlpbnQgcmM7CiAKLQkvKiBoYWx0IHRoZSBjb25ubmVjdGlvbiAqLworCS8qIGhhbHQgdGhlIGNvbm5lY3Rpb24gKi8KIAlicC0+ZnBbaW5kZXhdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVElORzsKIAlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCBpbmRleCwgMCwgMCwgMCk7CiAKIAogCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRCwgaW5kZXgsCiAJCQkJICAgICAgICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDEpOwotCWlmIChyYykgLyogdGltb3V0ICovCisJaWYgKHJjKSAvKiB0aW1lb3V0ICovCiAJCXJldHVybiByYzsKIAogCS8qIGRlbGV0ZSBjZmMgZW50cnkgKi8KIAlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9DRkNfREVMLCBpbmRleCwgMCwgMCwgMSk7CiAKLQlyZXR1cm4gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0RFTEVURUQsIGluZGV4LAorCXJldHVybiBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfQ0xPU0VELCBpbmRleCwKIAkJCQkgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMSk7CiAKIH0KQEAgLTY0MjIsOCArNzMyMCw4IEBACiAKIHN0YXRpYyB2b2lkIGJueDJ4X3N0b3BfbGVhZGluZyhzdHJ1Y3QgYm54MnggKmJwKQogewotCi0JLyogaWYgdGhlIG90aGVyIHBvcnQgaXMgaGFkbGluZyB0cmFmZmljLAorCXUxNiBkc2Jfc3BfcHJvZF9pZHg7CisJLyogaWYgdGhlIG90aGVyIHBvcnQgaXMgaGFuZGxpbmcgdHJhZmZpYywKIAkgICB0aGlzIGNhbiB0YWtlIGEgbG90IG9mIHRpbWUgKi8KIAlpbnQgdGltZW91dCA9IDUwMDsKIApAQCAtNjQzNyw1MiArNzMzNSw3MSBAQAogCQkJICAgICAgICYoYnAtPmZwWzBdLnN0YXRlKSwgMSkpCiAJCXJldHVybjsKIAotCWJwLT5kc2Jfc3BfcHJvZF9pZHggPSAqYnAtPmRzYl9zcF9wcm9kOworCWRzYl9zcF9wcm9kX2lkeCA9ICpicC0+ZHNiX3NwX3Byb2Q7CiAKLQkvKiBTZW5kIENGQ19ERUxFVEUgcmFtcm9kICovCisJLyogU2VuZCBQT1JUX0RFTEVURSByYW1yb2QgKi8KIAlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX0RFTCwgMCwgMCwgMCwgMSk7CiAKLQkvKgotCSAgIFdhaXQgZm9yIGNvbXBsZXRpb24uCisJLyogV2FpdCBmb3IgY29tcGxldGlvbiB0byBhcnJpdmUgb24gZGVmYXVsdCBzdGF0dXMgYmxvY2sKIAkgICB3ZSBhcmUgZ29pbmcgdG8gcmVzZXQgdGhlIGNoaXAgYW55d2F5CiAJICAgc28gdGhlcmUgaXMgbm90IG11Y2ggdG8gZG8gaWYgdGhpcyB0aW1lcyBvdXQKIAkgKi8KLQl3aGlsZSAoYnAtPmRzYl9zcF9wcm9kX2lkeCA9PSAqYnAtPmRzYl9zcF9wcm9kICYmIHRpbWVvdXQpIHsKLQkJCXRpbWVvdXQtLTsKLQkJCW1zbGVlcCgxKTsKKwl3aGlsZSAoKGRzYl9zcF9wcm9kX2lkeCA9PSAqYnAtPmRzYl9zcF9wcm9kKSAmJiB0aW1lb3V0KSB7CisJCXRpbWVvdXQtLTsKKwkJbXNsZWVwKDEpOwogCX0KLQorCWlmICghdGltZW91dCkgeworCQlEUChORVRJRl9NU0dfSUZET1dOLCAidGltZW91dCBwb2xsaW5nIGZvciBjb21wbGV0aW9uICIKKwkJICAgImRzYl9zcF9wcm9kIDB4JXggIT0gZHNiX3NwX3Byb2RfaWR4IDB4JXhcbiIsCisJCSAgICpicC0+ZHNiX3NwX3Byb2QsIGRzYl9zcF9wcm9kX2lkeCk7CisJfQorCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfVU5MT0FEOworCWJwLT5mcFswXS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKIH0KIAotc3RhdGljIGludCBibngyeF9uaWNfdW5sb2FkKHN0cnVjdCBibngyeCAqYnAsIGludCBmcmVfaXJxKQorCitzdGF0aWMgaW50IGJueDJ4X25pY191bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgaW50IGZyZWVfaXJxKQogewogCXUzMiByZXNldF9jb2RlID0gMDsKLQlpbnQgcmM7Ci0JaW50IGk7CisJaW50IGksIHRpbWVvdXQ7CiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQ7CiAKLQkvKiBDYWxsaW5nIGZsdXNoX3NjaGVkdWxlZF93b3JrKCkgbWF5IGRlYWRsb2NrIGJlY2F1c2UKLQkgKiBsaW5rd2F0Y2hfZXZlbnQoKSBtYXkgYmUgb24gdGhlIHdvcmtxdWV1ZSBhbmQgaXQgd2lsbCB0cnkgdG8gZ2V0Ci0JICogdGhlIHJ0bmxfbG9jayB3aGljaCB3ZSBhcmUgaG9sZGluZy4KLQkgKi8KLQotCXdoaWxlIChicC0+aW5fcmVzZXRfdGFzaykKLQkJbXNsZWVwKDEpOwotCi0JLyogRGVsZXRlIHRoZSB0aW1lcjogZG8gaXQgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzLCBhcyBpdAotCSAgIG1heSBiZSBzdGlsIFNUQVRfUVVFUlkgcmFtcm9kIHBlbmRpbmcgYWZ0ZXIgc3RvcHBpbmcgdGhlIHRpbWVyICovCiAJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CiAKKwlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsKKwlibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShicCk7CisKKwlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgeworCQluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOworCQlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLworCX0KKworCS8qIFdhaXQgdW50aWwgYWxsIGZhc3QgcGF0aCB0YXNrcyBjb21wbGV0ZSAqLworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXRpbWVvdXQgPSAxMDAwOworCQl3aGlsZSAoYm54MnhfaGFzX3dvcmsoZnApICYmICh0aW1lb3V0LS0pKQorCQkJbXNsZWVwKDEpOworCQlpZiAoIXRpbWVvdXQpCisJCQlCTlgyWF9FUlIoInRpbWVvdXQgd2FpdGluZyBmb3IgcXVldWVbJWRdXG4iLCBpKTsKKwl9CisKIAkvKiBXYWl0IHVudGlsIHN0YXQgcmFtcm9kIHJldHVybnMgYW5kIGFsbCBTUCB0YXNrcyBjb21wbGV0ZSAqLwotCXdoaWxlIChicC0+c3RhdF9wZW5kaW5nICYmIChicC0+c3BxX2xlZnQgIT0gTUFYX1NQUV9QRU5ESU5HKSkKKwl0aW1lb3V0ID0gMTAwMDsKKwl3aGlsZSAoKGJwLT5zdGF0X3BlbmRpbmcgfHwgKGJwLT5zcHFfbGVmdCAhPSBNQVhfU1BRX1BFTkRJTkcpKSAmJgorCSAgICAgICAodGltZW91dC0tKSkKIAkJbXNsZWVwKDEpOwogCi0JLyogU3RvcCBmYXN0IHBhdGgsIGRpc2FibGUgTUFDLCBkaXNhYmxlIGludGVycnVwdHMsIGRpc2FibGUgbmFwaSAqLwotCWJueDJ4X25ldGlmX3N0b3AoYnApOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQluYXBpX2Rpc2FibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIFR4IGFuZCBSeCBhcmUgZGlzYWJsZWQgb24gc3RhY2sgbGV2ZWwgKi8KKwlibngyeF9pbnRfZGlzYWJsZV9zeW5jKGJwKTsKIAogCWlmIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykKIAkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9NQ1A7CisKIAllbHNlIGlmIChicC0+d29sKSB7CiAJCXUzMiBlbWFjX2Jhc2UgPSBicC0+cG9ydCA/IEdSQ0JBU0VfRU1BQzAgOiBHUkNCQVNFX0VNQUMxOwogCQl1OCAqbWFjX2FkZHIgPSBicC0+ZGV2LT5kZXZfYWRkcjsKQEAgLTY0OTksMjggKzc0MTYsMzcgQEAKIAkJRU1BQ19XUihFTUFDX1JFR19FTUFDX01BQ19NQVRDSCArIDQsIHZhbCk7CiAKIAkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9FTjsKKwogCX0gZWxzZQogCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKIAorCS8qIENsb3NlIG11bHRpIGFuZCBsZWFkaW5nIGNvbm5lY3Rpb25zICovCiAJZm9yX2VhY2hfbm9uZGVmYXVsdF9xdWV1ZShicCwgaSkKIAkJaWYgKGJueDJ4X3N0b3BfbXVsdGkoYnAsIGkpKQotCQkJZ290byBlcnJvcjsKLQorCQkJZ290byB1bmxvYWRfZXJyb3I7CiAKIAlibngyeF9zdG9wX2xlYWRpbmcoYnApOworCWlmICgoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfVU5MT0FEKSB8fAorCSAgICAoYnAtPmZwWzBdLnN0YXRlICE9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRCkpIHsKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImZhaWxlZCB0byBjbG9zZSBsZWFkaW5nIHByb3Blcmx5ISIKKwkJICAgInN0YXRlIDB4JXggIGZwWzBdLnN0YXRlIDB4JXgiLAorCQkgICBicC0+c3RhdGUsIGJwLT5mcFswXS5zdGF0ZSk7CisJfQogCi1lcnJvcjoKK3VubG9hZF9lcnJvcjoKKwlibngyeF9saW5rX3Jlc2V0KGJwKTsKKwogCWlmICghbm9tY3ApCi0JCXJjID0gYm54MnhfZndfY29tbWFuZChicCwgcmVzZXRfY29kZSk7CisJCXJlc2V0X2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCByZXNldF9jb2RlKTsKIAllbHNlCi0JCXJjID0gRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT047CisJCXJlc2V0X2NvZGUgPSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX0NPTU1PTjsKIAogCS8qIFJlbGVhc2UgSVJRcyAqLwotCWlmIChmcmVfaXJxKQorCWlmIChmcmVlX2lycSkKIAkJYm54MnhfZnJlZV9pcnEoYnApOwogCiAJLyogUmVzZXQgdGhlIGNoaXAgKi8KLQlibngyeF9yZXNldF9jaGlwKGJwLCByYyk7CisJYm54MnhfcmVzZXRfY2hpcChicCwgcmVzZXRfY29kZSk7CiAKIAkvKiBSZXBvcnQgVU5MT0FEX0RPTkUgdG8gTUNQICovCiAJaWYgKCFub21jcCkKQEAgLTY1MzEsOCArNzQ1Nyw3IEBACiAJYm54MnhfZnJlZV9tZW0oYnApOwogCiAJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfQ0xPU0VEOwotCS8qIFNldCBsaW5rIGRvd24gKi8KLQlicC0+bGlua191cCA9IDA7CisKIAluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKIAogCXJldHVybiAwOwpAQCAtNjU2OCw3ICs3NDkzLDcgQEAKIAkJCQkJICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CiAJCQkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAogCQkJCQkgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgU1VQUE9SVEVEXzI1MDBiYXNlVF9GdWxsIHwKKwkJCQkJICBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwgfAogCQkJCQkgIFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9GSUJSRSB8CiAJCQkJCSAgU1VQUE9SVEVEX0F1dG9uZWcgfAogCQkJCQkgIFNVUFBPUlRFRF9QYXVzZSB8CkBAIC02NTgxLDEwICs3NTA2LDEwIEBACiAKIAkJCWJwLT5waHlfZmxhZ3MgfD0gUEhZX1NHTUlJX0ZMQUc7CiAKLQkJCWJwLT5zdXBwb3J0ZWQgfD0gKC8qIFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAotCQkJCQkgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKLQkJCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8Ki8KKwkJCWJwLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CiAJCQkJCSAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKIAkJCQkJICBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfRklCUkUgfAogCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKQEAgLTY2MjAsNyArNzU0NSw3IEBACiAJCQkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAogCQkJCQkgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKIAkJCQkJICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIFNVUFBPUlRFRF8yNTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsIHwKIAkJCQkJICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKIAkJCQkJICBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfRklCUkUgfAogCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKQEAgLTY2MjksOSArNzU1NCw4IEBACiAJCQlicmVhazsKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNS82KVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNSlcbiIsCisJCQkJCWV4dF9waHlfdHlwZSk7CiAKIAkJCWJwLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAogCQkJCQkgIFNVUFBPUlRFRF9GSUJSRSB8CkBAIC02NjM5LDYgKzc1NjMsNDEgQEAKIAkJCQkJICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CiAJCQlicmVhazsKIAorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDYpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4MDcyKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoU0ZYNzEwMSlcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgIFNVUFBPUlRFRF9UUCB8CisJCQkJCSAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCUJOWDJYX0VSUigiTlZSQU0gY29uZmlnIGVycm9yLiAiCiAJCQkJICAiQkFEIFhHWFMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKQEAgLTY2OTEsNyArNzY1MCw3IEBACiAJCQkJICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKTsKIAogCWlmICghKGJwLT5zcGVlZF9jYXBfbWFzayAmIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMl81RykpCi0JCWJwLT5zdXBwb3J0ZWQgJj0gflNVUFBPUlRFRF8yNTAwYmFzZVRfRnVsbDsKKwkJYnAtPnN1cHBvcnRlZCAmPSB+U1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsOwogCiAJaWYgKCEoYnAtPnNwZWVkX2NhcF9tYXNrICYgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMEcpKQogCQlicC0+c3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOwpAQCAtNjcxMSwxMyArNzY3MCw4IEBACiAJCQlicC0+cmVxX2xpbmVfc3BlZWQgPSAwOwogCQkJYnAtPmFkdmVydGlzaW5nID0gYnAtPnN1cHBvcnRlZDsKIAkJfSBlbHNlIHsKLQkJCXUzMiBleHRfcGh5X3R5cGU7Ci0KLQkJCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwKTsKLQkJCWlmICgoZXh0X3BoeV90eXBlID09Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgfHwKLQkJCSAgICAoZXh0X3BoeV90eXBlID09Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNikpIHsKKwkJCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicCkgPT0KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB7CiAJCQkJLyogZm9yY2UgMTBHLCBubyBBTiAqLwogCQkJCWJwLT5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJCWJwLT5hZHZlcnRpc2luZyA9CkBAIC02NzM0LDggKzc2ODgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBNX0ZVTEw6Ci0JCWlmIChicC0+c3BlZWRfY2FwX21hc2sgJgotCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xME1fRlVMTCkgeworCQlpZiAoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpIHsKIAkJCWJwLT5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwOwogCQkJYnAtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKIAkJCQkJICAgQURWRVJUSVNFRF9UUCk7CkBAIC02NzQ5LDggKzc3MDIsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBNX0hBTEY6Ci0JCWlmIChicC0+c3BlZWRfY2FwX21hc2sgJgotCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xME1fSEFMRikgeworCQlpZiAoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYpIHsKIAkJCWJwLT5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwOwogCQkJYnAtPnJlcV9kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CkBAIC02NzY1LDggKzc3MTcsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTAwTV9GVUxMOgotCQlpZiAoYnAtPnNwZWVkX2NhcF9tYXNrICYKLQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9GVUxMKSB7CisJCWlmIChicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpIHsKIAkJCWJwLT5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDsKIAkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAogCQkJCQkgICBBRFZFUlRJU0VEX1RQKTsKQEAgLTY3ODAsOCArNzczMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xMDBNX0hBTEY6Ci0JCWlmIChicC0+c3BlZWRfY2FwX21hc2sgJgotCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMDBNX0hBTEYpIHsKKwkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwYmFzZVRfSGFsZikgewogCQkJYnAtPnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwOwogCQkJYnAtPnJlcV9kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfApAQCAtNjc5Niw4ICs3NzQ2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzFHOgotCQlpZiAoYnAtPnNwZWVkX2NhcF9tYXNrICYKLQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpIHsKKwkJaWYgKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpIHsKIAkJCWJwLT5yZXFfbGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CiAJCQlicC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkJCSAgIEFEVkVSVElTRURfVFApOwpAQCAtNjgxMSwxMCArNzc2MCw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8yXzVHOgotCQlpZiAoYnAtPnNwZWVkX2NhcF9tYXNrICYKLQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMl81RykgeworCQlpZiAoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbCkgewogCQkJYnAtPnJlcV9saW5lX3NwZWVkID0gU1BFRURfMjUwMDsKLQkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzI1MDBiYXNlVF9GdWxsIHwKKwkJCWJwLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzI1MDBiYXNlWF9GdWxsIHwKIAkJCQkJICAgQURWRVJUSVNFRF9UUCk7CiAJCX0gZWxzZSB7CiAJCQlCTlgyWF9FUlIoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgpAQCAtNjgyOCwxNSArNzc3Niw3IEBACiAJY2FzZSBQT1JUX0ZFQVRVUkVfTElOS19TUEVFRF8xMEdfQ1g0OgogCWNhc2UgUE9SVF9GRUFUVVJFX0xJTktfU1BFRURfMTBHX0tYNDoKIAljYXNlIFBPUlRfRkVBVFVSRV9MSU5LX1NQRUVEXzEwR19LUjoKLQkJaWYgKCEoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpKSB7Ci0JCQlCTlgyWF9FUlIoIk5WUkFNIGNvbmZpZyBlcnJvci4gIgotCQkJCSAgIkludmFsaWQgbGlua19jb25maWcgMHgleCIKLQkJCQkgICIgIHBoeV9mbGFncyAweCV4XG4iLAotCQkJCSAgYnAtPmxpbmtfY29uZmlnLCBicC0+cGh5X2ZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoYnAtPnNwZWVkX2NhcF9tYXNrICYKLQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKSB7CisJCWlmIChicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCkgewogCQkJYnAtPnJlcV9saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CiAJCQlicC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAogCQkJCQkgICBBRFZFUlRJU0VEX0ZJQlJFKTsKQEAgLTY4NjMsNDMgKzc4MDMsMTMgQEAKIAogCWJwLT5yZXFfZmxvd19jdHJsID0gKGJwLT5saW5rX2NvbmZpZyAmCiAJCQkgICAgIFBPUlRfRkVBVFVSRV9GTE9XX0NPTlRST0xfTUFTSyk7Ci0JLyogUGxlYXNlIHJlZmVyIHRvIFRhYmxlIDI4Qi0zIG9mIHRoZSA4MDIuM2FiLTE5OTkgc3BlYyAqLwotCXN3aXRjaCAoYnAtPnJlcV9mbG93X2N0cmwpIHsKLQljYXNlIEZMT1dfQ1RSTF9BVVRPOgorCWlmICgoYnAtPnJlcV9mbG93X2N0cmwgPT0gRkxPV19DVFJMX0FVVE8pICYmCisJICAgIChicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKQogCQlicC0+cmVxX2F1dG9uZWcgfD0gQVVUT05FR19GTE9XX0NUUkw7Ci0JCWlmIChicC0+ZGV2LT5tdHUgPD0gNDUwMCkgewotCQkJYnAtPnBhdXNlX21vZGUgPSBQQVVTRV9CT1RIOwotCQkJYnAtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCX0gZWxzZSB7Ci0JCQlicC0+cGF1c2VfbW9kZSA9IFBBVVNFX0FTWU1NRVRSSUM7Ci0JCQlicC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwotCQl9Ci0JCWJyZWFrOwogCi0JY2FzZSBGTE9XX0NUUkxfVFg6Ci0JCWJwLT5wYXVzZV9tb2RlID0gUEFVU0VfQVNZTU1FVFJJQzsKLQkJYnAtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMT1dfQ1RSTF9SWDoKLQljYXNlIEZMT1dfQ1RSTF9CT1RIOgotCQlicC0+cGF1c2VfbW9kZSA9IFBBVVNFX0JPVEg7Ci0JCWJwLT5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9QYXVzZSB8Ci0JCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGTE9XX0NUUkxfTk9ORToKLQlkZWZhdWx0OgotCQlicC0+cGF1c2VfbW9kZSA9IFBBVVNFX05PTkU7Ci0JCWJwLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfUGF1c2UgfAotCQkJCSAgICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKLQkJYnJlYWs7Ci0JfQotCUJOWDJYX0RFVl9JTkZPKCJyZXFfYXV0b25lZyAweCV4ICByZXFfZmxvd19jdHJsIDB4JXhcbiIKLQkgICAgIEtFUk5fSU5GTyAiICBwYXVzZV9tb2RlICVkICBhZHZlcnRpc2luZyAweCV4XG4iLAotCQkgICAgICAgYnAtPnJlcV9hdXRvbmVnLCBicC0+cmVxX2Zsb3dfY3RybCwKLQkJICAgICAgIGJwLT5wYXVzZV9tb2RlLCBicC0+YWR2ZXJ0aXNpbmcpOworCUJOWDJYX0RFVl9JTkZPKCJyZXFfYXV0b25lZyAweCV4ICByZXFfZmxvd19jdHJsIDB4JXgiCisJCSAgICAgICAiICBhZHZlcnRpc2luZyAweCV4XG4iLAorCQkgICAgICAgYnAtPnJlcV9hdXRvbmVnLCBicC0+cmVxX2Zsb3dfY3RybCwgYnAtPmFkdmVydGlzaW5nKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfZ2V0X2h3aW5mbyhzdHJ1Y3QgYm54MnggKmJwKQpAQCAtNjkzMywxNSArNzg0MywxNSBAQAogCXZhbCA9IFNITUVNX1JEKGJwLCB2YWxpZGl0eV9tYXBbcG9ydF0pOwogCWlmICgodmFsICYgKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKIAkJIT0gKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKLQkJQk5YMlhfRVJSKCJNQ1AgdmFsaWRpdHkgc2lnbmF0dXJlIGJhZFxuIik7CisJCUJOWDJYX0VSUigiQkFEIE1DUCB2YWxpZGl0eSBzaWduYXR1cmVcbiIpOwogCi0JYnAtPmZ3X3NlcSA9IChTSE1FTV9SRChicCwgZHJ2X2Z3X21iW3BvcnRdLmRydl9tYl9oZWFkZXIpICYKKwlicC0+Zndfc2VxID0gKFNITUVNX1JEKGJwLCBmdW5jX21iW3BvcnRdLmRydl9tYl9oZWFkZXIpICYKIAkJICAgICAgRFJWX01TR19TRVFfTlVNQkVSX01BU0spOwogCiAJYnAtPmh3X2NvbmZpZyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLmNvbmZpZyk7Ci0KKwlicC0+Ym9hcmQgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5ib2FyZCk7CiAJYnAtPnNlcmRlc19jb25maWcgPQotCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbYnAtPnBvcnRdLnNlcmRlc19jb25maWcpOworCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uc2VyZGVzX2NvbmZpZyk7CiAJYnAtPmxhbmVfY29uZmlnID0KIAkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmxhbmVfY29uZmlnKTsKIAlicC0+ZXh0X3BoeV9jb25maWcgPQpAQCAtNjk1NCwxMyArNzg2NCwxMyBAQAogCWJwLT5saW5rX2NvbmZpZyA9CiAJCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2ZlYXR1cmVfY29uZmlnW3BvcnRdLmxpbmtfY29uZmlnKTsKIAotCUJOWDJYX0RFVl9JTkZPKCJod19jb25maWcgKCUwOHgpICBzZXJkZXNfY29uZmlnICglMDh4KVxuIgorCUJOWDJYX0RFVl9JTkZPKCJod19jb25maWcgKCUwOHgpIGJvYXJkICglMDh4KSAgc2VyZGVzX2NvbmZpZyAoJTA4eClcbiIKIAkgICAgIEtFUk5fSU5GTyAiICBsYW5lX2NvbmZpZyAoJTA4eCkgIGV4dF9waHlfY29uZmlnICglMDh4KVxuIgogCSAgICAgS0VSTl9JTkZPICIgIHNwZWVkX2NhcF9tYXNrICglMDh4KSAgbGlua19jb25maWcgKCUwOHgpIgogCQkgICAgICAgIiAgZndfc2VxICglMDh4KVxuIiwKLQkJICAgICAgIGJwLT5od19jb25maWcsIGJwLT5zZXJkZXNfY29uZmlnLCBicC0+bGFuZV9jb25maWcsCi0JCSAgICAgICBicC0+ZXh0X3BoeV9jb25maWcsIGJwLT5zcGVlZF9jYXBfbWFzaywKLQkJICAgICAgIGJwLT5saW5rX2NvbmZpZywgYnAtPmZ3X3NlcSk7CisJCSAgICAgICBicC0+aHdfY29uZmlnLCBicC0+Ym9hcmQsIGJwLT5zZXJkZXNfY29uZmlnLAorCQkgICAgICAgYnAtPmxhbmVfY29uZmlnLCBicC0+ZXh0X3BoeV9jb25maWcsCisJCSAgICAgICBicC0+c3BlZWRfY2FwX21hc2ssIGJwLT5saW5rX2NvbmZpZywgYnAtPmZ3X3NlcSk7CiAKIAlzd2l0Y2hfY2ZnID0gKGJwLT5saW5rX2NvbmZpZyAmIFBPUlRfRkVBVFVSRV9DT05ORUNURURfU1dJVENIX01BU0spOwogCWJueDJ4X2xpbmtfc2V0dGluZ3Nfc3VwcG9ydGVkKGJwLCBzd2l0Y2hfY2ZnKTsKQEAgLTcwMTQsMTQgKzc5MjQsOCBAQAogCXJldHVybjsKIAogc2V0X21hYzogLyogb25seSBzdXBwb3NlZCB0byBoYXBwZW4gb24gZW11bGF0aW9uL0ZQR0EgKi8KLQlCTlgyWF9FUlIoIndhcm5pbmcgY29uc3RhbnQgTUFDIHdvcmthcm91bmQgYWN0aXZlXG4iKTsKLQlicC0+ZGV2LT5kZXZfYWRkclswXSA9IDA7Ci0JYnAtPmRldi0+ZGV2X2FkZHJbMV0gPSAweDUwOwotCWJwLT5kZXYtPmRldl9hZGRyWzJdID0gMHhjMjsKLQlicC0+ZGV2LT5kZXZfYWRkclszXSA9IDB4MmM7Ci0JYnAtPmRldi0+ZGV2X2FkZHJbNF0gPSAweDcxOwotCWJwLT5kZXYtPmRldl9hZGRyWzVdID0gcG9ydCA/IDB4MGQgOiAweDBlOwotCisJQk5YMlhfRVJSKCJ3YXJuaW5nIHJlbmRvbSBNQUMgd29ya2Fyb3VuZCBhY3RpdmVcbiIpOworCXJhbmRvbV9ldGhlcl9hZGRyKGJwLT5kZXYtPmRldl9hZGRyKTsKIAltZW1jcHkoYnAtPmRldi0+cGVybV9hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwgNik7CiAKIH0KQEAgLTcwNDgsMTkgKzc5NTIsMzQgQEAKIAl9CiAKIAlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKLQl9IGVsc2UgeworCQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnApOworCisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJICAgYnAtPmV4dF9waHlfY29uZmlnKTsKKwkJfQorCX0gZWxzZQogCQljbWQtPnBvcnQgPSBQT1JUX1RQOwotCX0KIAogCWNtZC0+cGh5X2FkZHJlc3MgPSBicC0+cGh5X2FkZHI7CiAJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAKLQlpZiAoYnAtPnJlcV9hdXRvbmVnICYgQVVUT05FR19TUEVFRCkgeworCWlmIChicC0+cmVxX2F1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKQogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQl9IGVsc2UgeworCWVsc2UKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCX0KIAogCWNtZC0+bWF4dHhwa3QgPSAwOwogCWNtZC0+bWF4cnhwa3QgPSAwOwpAQCAtNzA4OSwzNiArODAwOCwxMSBAQAogCSAgIGNtZC0+ZHVwbGV4LCBjbWQtPnBvcnQsIGNtZC0+cGh5X2FkZHJlc3MsIGNtZC0+dHJhbnNjZWl2ZXIsCiAJICAgY21kLT5hdXRvbmVnLCBjbWQtPm1heHR4cGt0LCBjbWQtPm1heHJ4cGt0KTsKIAotCXN3aXRjaCAoY21kLT5wb3J0KSB7Ci0JY2FzZSBQT1JUX1RQOgotCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX1RQKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQkJYm54MnhfbGlua19yZXNldChicCk7Ci0JCQlibngyeF9saW5rX3NldHRpbmdzX3N1cHBvcnRlZChicCwgU1dJVENIX0NGR18xRyk7Ci0JCQlibngyeF9waHlfZGVhc3NlcnQoYnApOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQT1JUX0ZJQlJFOgotCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0ZJQlJFKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghKGJwLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSkgewotCQkJYm54MnhfbGlua19yZXNldChicCk7Ci0JCQlibngyeF9saW5rX3NldHRpbmdzX3N1cHBvcnRlZChicCwgU1dJVENIX0NGR18xMEcpOwotCQkJYm54MnhfcGh5X2RlYXNzZXJ0KGJwKTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKLQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9BdXRvbmVnKSkKKwkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9BdXRvbmVnKSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBb3RvbmVnIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAogCQkvKiBhZHZlcnRpc2UgdGhlIHJlcXVlc3RlZCBzcGVlZCBhbmQgZHVwbGV4IGlmIHN1cHBvcnRlZCAqLwogCQljbWQtPmFkdmVydGlzaW5nICY9IGJwLT5zdXBwb3J0ZWQ7CkBAIC03MTMzLDE0ICs4MDI3LDIyIEBACiAJCXN3aXRjaCAoY21kLT5zcGVlZCkgewogCQljYXNlIFNQRUVEXzEwOgogCQkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpKQorCQkJCWlmICghKGJwLT5zdXBwb3J0ZWQgJgorCQkJCSAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpKSB7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgICAiMTBNIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CiAJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KIAogCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKIAkJCQkJICAgICAgIEFEVkVSVElTRURfVFApOwogCQkJfSBlbHNlIHsKLQkJCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZikpCisJCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmCisJCQkJICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZikpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgICIxME0gaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQogCiAJCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAogCQkJCQkgICAgICAgQURWRVJUSVNFRF9UUCk7CkBAIC03MTUwLDE1ICs4MDUyLDIxIEBACiAJCWNhc2UgU1BFRURfMTAwOgogCQkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CiAJCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmCi0JCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkpCisJCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgICIxMDBNIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CiAJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KIAogCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CiAJCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmCi0JCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfSGFsZikpCisJCQkJCQlTVVBQT1JURURfMTAwYmFzZVRfSGFsZikpIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAgICIxMDBNIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7CiAJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KIAogCQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CiAJCQkJCSAgICAgICBBRFZFUlRJU0VEX1RQKTsKQEAgLTcxNjYsMzkgKzgwNzQsNTQgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1BFRURfMTAwMDoKLQkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKKwkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMUcgaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAotCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkpCisJCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMUcgZnVsbCBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAogCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkJICAgICAgIEFEVkVSVElTRURfVFApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTUEVFRF8yNTAwOgotCQkJaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQorCQkJaWYgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICAgIjIuNUcgaGFsZiBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAotCQkJaWYgKCEoYnAtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8yNTAwYmFzZVRfRnVsbCkpCisJCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAgICIyLjVHIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAKLQkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMjUwMGJhc2VUX0Z1bGwgfAorCQkJYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCB8CiAJCQkJICAgICAgIEFEVkVSVElTRURfVFApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTUEVFRF8xMDAwMDoKLQkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKKwkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIGhhbGYgbm90IHN1cHBvcnRlZFxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAKLQkJCWlmICghKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKSkKKwkJCWlmICghKGJwLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiMTBHIGZ1bGwgbm90IHN1cHBvcnRlZFxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAKIAkJCWFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKIAkJCQkgICAgICAgQURWRVJUSVNFRF9GSUJSRSk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJVbnN1cHBvcnRlZCBzcGVlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC03Mzk4LDggKzgzMjEsNyBAQAogc3RhdGljIGludCBibngyeF9udnJhbV9yZWFkX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIHUzMiAqcmV0X3ZhbCwKIAkJCQkgIHUzMiBjbWRfZmxhZ3MpCiB7Ci0JaW50IHJjOwotCWludCBjb3VudCwgaTsKKwlpbnQgY291bnQsIGksIHJjOwogCXUzMiB2YWw7CiAKIAkvKiBidWlsZCB0aGUgY29tbWFuZCB3b3JkICovCkBAIC03NDUyLDEzICs4Mzc0LDEzIEBACiAKIAlpZiAoKG9mZnNldCAmIDB4MDMpIHx8IChidWZfc2l6ZSAmIDB4MDMpIHx8IChidWZfc2l6ZSA9PSAwKSkgewogCQlEUChORVRJRl9NU0dfTlZNLAotCQkgICAiSW52YWxpZCBwYXJhbXRlcjogb2Zmc2V0IDB4JXggIGJ1Zl9zaXplIDB4JXhcbiIsCisJCSAgICJJbnZhbGlkIHBhcmFtZXRlcjogb2Zmc2V0IDB4JXggIGJ1Zl9zaXplIDB4JXhcbiIsCiAJCSAgIG9mZnNldCwgYnVmX3NpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAob2Zmc2V0ICsgYnVmX3NpemUgPiBicC0+Zmxhc2hfc2l6ZSkgewotCQlEUChORVRJRl9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbXRlcjogb2Zmc2V0ICgweCV4KSArIgorCQlEUChORVRJRl9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAoMHgleCkgKyIKIAkJCQkgICIgYnVmX3NpemUgKDB4JXgpID4gZmxhc2hfc2l6ZSAoMHgleClcbiIsCiAJCSAgIG9mZnNldCwgYnVmX3NpemUsIGJwLT5mbGFzaF9zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTE5LDggKzg0NDEsNyBAQAogc3RhdGljIGludCBibngyeF9udnJhbV93cml0ZV9kd29yZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1MzIgdmFsLAogCQkJCSAgIHUzMiBjbWRfZmxhZ3MpCiB7Ci0JaW50IHJjOwotCWludCBjb3VudCwgaTsKKwlpbnQgY291bnQsIGksIHJjOwogCiAJLyogYnVpbGQgdGhlIGNvbW1hbmQgd29yZCAqLwogCWNtZF9mbGFncyB8PSBNQ1BSX05WTV9DT01NQU5EX0RPSVQgfCBNQ1BSX05WTV9DT01NQU5EX1dSOwpAQCAtNzU1Nyw3ICs4NDc4LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNkZWZpbmUgQllURV9PRkZTRVQob2Zmc2V0KSAgICAgCSg4ICogKG9mZnNldCAmIDB4MDMpKQorI2RlZmluZSBCWVRFX09GRlNFVChvZmZzZXQpCQkoOCAqIChvZmZzZXQgJiAweDAzKSkKIAogc3RhdGljIGludCBibngyeF9udnJhbV93cml0ZTEoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgdTggKmRhdGFfYnVmLAogCQkJICAgICAgaW50IGJ1Zl9zaXplKQpAQCAtNzU2OCw3ICs4NDg5LDcgQEAKIAl1MzIgdmFsOwogCiAJaWYgKG9mZnNldCArIGJ1Zl9zaXplID4gYnAtPmZsYXNoX3NpemUpIHsKLQkJRFAoTkVUSUZfTVNHX05WTSwgIkludmFsaWQgcGFyYW10ZXI6IG9mZnNldCAoMHgleCkgKyIKKwkJRFAoTkVUSUZfTVNHX05WTSwgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgKDB4JXgpICsiCiAJCQkJICAiIGJ1Zl9zaXplICgweCV4KSA+IGZsYXNoX3NpemUgKDB4JXgpXG4iLAogCQkgICBvZmZzZXQsIGJ1Zl9zaXplLCBicC0+Zmxhc2hfc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzYyMSwxMyArODU0MiwxMyBAQAogCiAJaWYgKChvZmZzZXQgJiAweDAzKSB8fCAoYnVmX3NpemUgJiAweDAzKSB8fCAoYnVmX3NpemUgPT0gMCkpIHsKIAkJRFAoTkVUSUZfTVNHX05WTSwKLQkJICAgIkludmFsaWQgcGFyYW10ZXI6IG9mZnNldCAweCV4ICBidWZfc2l6ZSAweCV4XG4iLAorCQkgICAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAweCV4ICBidWZfc2l6ZSAweCV4XG4iLAogCQkgICBvZmZzZXQsIGJ1Zl9zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKG9mZnNldCArIGJ1Zl9zaXplID4gYnAtPmZsYXNoX3NpemUpIHsKLQkJRFAoTkVUSUZfTVNHX05WTSwgIkludmFsaWQgcGFyYW10ZXI6IG9mZnNldCAoMHgleCkgKyIKKwkJRFAoTkVUSUZfTVNHX05WTSwgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgKDB4JXgpICsiCiAJCQkJICAiIGJ1Zl9zaXplICgweCV4KSA+IGZsYXNoX3NpemUgKDB4JXgpXG4iLAogCQkgICBvZmZzZXQsIGJ1Zl9zaXplLCBicC0+Zmxhc2hfc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc4OCw1MiArODcwOSwyOSBAQAogCSAgIERQX0xFVkVMICIgIGF1dG9uZWcgJWQgIHJ4X3BhdXNlICVkICB0eF9wYXVzZSAlZFxuIiwKIAkgICBlcGF1c2UtPmNtZCwgZXBhdXNlLT5hdXRvbmVnLCBlcGF1c2UtPnJ4X3BhdXNlLCBlcGF1c2UtPnR4X3BhdXNlKTsKIAotCWJwLT5yZXFfZmxvd19jdHJsID0gRkxPV19DVFJMX0FVVE87CiAJaWYgKGVwYXVzZS0+YXV0b25lZykgewotCQlicC0+cmVxX2F1dG9uZWcgfD0gQVVUT05FR19GTE9XX0NUUkw7Ci0JCWlmIChicC0+ZGV2LT5tdHUgPD0gNDUwMCkgewotCQkJYnAtPnBhdXNlX21vZGUgPSBQQVVTRV9CT1RIOwotCQkJYnAtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCX0gZWxzZSB7Ci0JCQlicC0+cGF1c2VfbW9kZSA9IFBBVVNFX0FTWU1NRVRSSUM7Ci0JCQlicC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOworCQlpZiAoIShicC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX0F1dG9uZWcpKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIkFvdG9uZWcgbm90IHN1cHBvcnRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JfSBlbHNlIHsKKwkJYnAtPnJlcV9hdXRvbmVnIHw9IEFVVE9ORUdfRkxPV19DVFJMOworCX0gZWxzZQogCQlicC0+cmVxX2F1dG9uZWcgJj0gfkFVVE9ORUdfRkxPV19DVFJMOwogCi0JCWlmIChlcGF1c2UtPnJ4X3BhdXNlKQotCQkJYnAtPnJlcV9mbG93X2N0cmwgfD0gRkxPV19DVFJMX1JYOwotCQlpZiAoZXBhdXNlLT50eF9wYXVzZSkKLQkJCWJwLT5yZXFfZmxvd19jdHJsIHw9IEZMT1dfQ1RSTF9UWDsKKwlicC0+cmVxX2Zsb3dfY3RybCA9IEZMT1dfQ1RSTF9BVVRPOwogCi0JCXN3aXRjaCAoYnAtPnJlcV9mbG93X2N0cmwpIHsKLQkJY2FzZSBGTE9XX0NUUkxfQVVUTzoKLQkJCWJwLT5yZXFfZmxvd19jdHJsID0gRkxPV19DVFJMX05PTkU7Ci0JCQlicC0+cGF1c2VfbW9kZSA9IFBBVVNFX05PTkU7Ci0JCQlicC0+YWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJICAgICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7CisJaWYgKGVwYXVzZS0+cnhfcGF1c2UpCisJCWJwLT5yZXFfZmxvd19jdHJsIHw9IEZMT1dfQ1RSTF9SWDsKKwlpZiAoZXBhdXNlLT50eF9wYXVzZSkKKwkJYnAtPnJlcV9mbG93X2N0cmwgfD0gRkxPV19DVFJMX1RYOwogCi0JCWNhc2UgRkxPV19DVFJMX1RYOgotCQkJYnAtPnBhdXNlX21vZGUgPSBQQVVTRV9BU1lNTUVUUklDOwotCQkJYnAtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKLQkJCWJyZWFrOworCWlmICghKGJwLT5yZXFfYXV0b25lZyAmIEFVVE9ORUdfRkxPV19DVFJMKSAmJgorCSAgICAoYnAtPnJlcV9mbG93X2N0cmwgPT0gRkxPV19DVFJMX0FVVE8pKQorCQlicC0+cmVxX2Zsb3dfY3RybCA9IEZMT1dfQ1RSTF9OT05FOwogCi0JCWNhc2UgRkxPV19DVFJMX1JYOgotCQljYXNlIEZMT1dfQ1RSTF9CT1RIOgotCQkJYnAtPnBhdXNlX21vZGUgPSBQQVVTRV9CT1RIOwotCQkJYnAtPmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJICAgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCURQKE5FVElGX01TR19MSU5LLCAicmVxX2F1dG9uZWcgMHgleCAgcmVxX2Zsb3dfY3RybCAweCV4XG4iCi0JICAgRFBfTEVWRUwgIiAgcGF1c2VfbW9kZSAlZCAgYWR2ZXJ0aXNpbmcgMHgleFxuIiwKLQkgICBicC0+cmVxX2F1dG9uZWcsIGJwLT5yZXFfZmxvd19jdHJsLCBicC0+cGF1c2VfbW9kZSwKLQkgICBicC0+YWR2ZXJ0aXNpbmcpOworCURQKE5FVElGX01TR19MSU5LLCAicmVxX2F1dG9uZWcgMHgleCAgcmVxX2Zsb3dfY3RybCAweCV4XG4iLAorCSAgIGJwLT5yZXFfYXV0b25lZywgYnAtPnJlcV9mbG93X2N0cmwpOwogCiAJYm54Mnhfc3RvcF9zdGF0cyhicCk7CiAJYm54MnhfbGlua19pbml0aWFsaXplKGJwKTsKQEAgLTc5MDYsODEgKzg4MDQsODcgQEAKIHN0YXRpYyBzdHJ1Y3QgewogCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiB9IGJueDJ4X3N0YXRzX3N0cl9hcnJbQk5YMlhfTlVNX1NUQVRTXSA9IHsKLQl7ICJyeF9ieXRlcyJ9LCAgCQkJIC8qICAwICovCi0JeyAicnhfZXJyb3JfYnl0ZXMifSwgICAgCQkgLyogIDEgKi8KLQl7ICJ0eF9ieXRlcyJ9LCAgCQkJIC8qICAyICovCi0JeyAidHhfZXJyb3JfYnl0ZXMifSwgICAgCQkgLyogIDMgKi8KLQl7ICJyeF91Y2FzdF9wYWNrZXRzIn0sICAJCSAvKiAgNCAqLwotCXsgInJ4X21jYXN0X3BhY2tldHMifSwgIAkJIC8qICA1ICovCi0JeyAicnhfYmNhc3RfcGFja2V0cyJ9LCAgCQkgLyogIDYgKi8KLQl7ICJ0eF91Y2FzdF9wYWNrZXRzIn0sICAJCSAvKiAgNyAqLwotCXsgInR4X21jYXN0X3BhY2tldHMifSwgIAkJIC8qICA4ICovCi0JeyAidHhfYmNhc3RfcGFja2V0cyJ9LCAgCQkgLyogIDkgKi8KLQl7ICJ0eF9tYWNfZXJyb3JzIn0sICAgICAJCSAvKiAxMCAqLwotCXsgInR4X2NhcnJpZXJfZXJyb3JzIn0sIAkJIC8qIDExICovCi0JeyAicnhfY3JjX2Vycm9ycyJ9LCAgICAgCQkgLyogMTIgKi8KLQl7ICJyeF9hbGlnbl9lcnJvcnMifSwgICAJCSAvKiAxMyAqLwotCXsgInR4X3NpbmdsZV9jb2xsaXNpb25zIn0sICAgICAgCSAvKiAxNCAqLwotCXsgInR4X211bHRpX2NvbGxpc2lvbnMifSwgICAgICAgCSAvKiAxNSAqLwotCXsgInR4X2RlZmVycmVkIn0sICAgICAgIAkJIC8qIDE2ICovCi0JeyAidHhfZXhjZXNzX2NvbGxpc2lvbnMifSwgICAgICAJIC8qIDE3ICovCi0JeyAidHhfbGF0ZV9jb2xsaXNpb25zIn0sCQkgLyogMTggKi8KLQl7ICJ0eF90b3RhbF9jb2xsaXNpb25zIn0sICAgICAgIAkgLyogMTkgKi8KLQl7ICJyeF9mcmFnbWVudHMifSwgICAgICAJCSAvKiAyMCAqLwotCXsgInJ4X2phYmJlcnMifSwJCQkgLyogMjEgKi8KLQl7ICJyeF91bmRlcnNpemVfcGFja2V0cyJ9LCAgICAgIAkgLyogMjIgKi8KLQl7ICJyeF9vdmVyc2l6ZV9wYWNrZXRzIn0sICAgICAgIAkgLyogMjMgKi8KLQl7ICJyeF94b25fZnJhbWVzIn0sICAgICAJCSAvKiAyNCAqLwotCXsgInJ4X3hvZmZfZnJhbWVzIn0sICAgIAkJIC8qIDI1ICovCi0JeyAidHhfeG9uX2ZyYW1lcyJ9LCAgICAgCQkgLyogMjYgKi8KLQl7ICJ0eF94b2ZmX2ZyYW1lcyJ9LCAgICAJCSAvKiAyNyAqLwotCXsgInJ4X21hY19jdHJsX2ZyYW1lcyJ9LAkJIC8qIDI4ICovCi0JeyAicnhfZmlsdGVyZWRfcGFja2V0cyJ9LCAgICAgICAJIC8qIDI5ICovCi0JeyAicnhfZGlzY2FyZHMifSwgICAgICAgCQkgLyogMzAgKi8KKwl7ICJyeF9ieXRlcyJ9LAorCXsgInJ4X2Vycm9yX2J5dGVzIn0sCisJeyAidHhfYnl0ZXMifSwKKwl7ICJ0eF9lcnJvcl9ieXRlcyJ9LAorCXsgInJ4X3VjYXN0X3BhY2tldHMifSwKKwl7ICJyeF9tY2FzdF9wYWNrZXRzIn0sCisJeyAicnhfYmNhc3RfcGFja2V0cyJ9LAorCXsgInR4X3VjYXN0X3BhY2tldHMifSwKKwl7ICJ0eF9tY2FzdF9wYWNrZXRzIn0sCisJeyAidHhfYmNhc3RfcGFja2V0cyJ9LAorCXsgInR4X21hY19lcnJvcnMifSwJLyogMTAgKi8KKwl7ICJ0eF9jYXJyaWVyX2Vycm9ycyJ9LAorCXsgInJ4X2NyY19lcnJvcnMifSwKKwl7ICJyeF9hbGlnbl9lcnJvcnMifSwKKwl7ICJ0eF9zaW5nbGVfY29sbGlzaW9ucyJ9LAorCXsgInR4X211bHRpX2NvbGxpc2lvbnMifSwKKwl7ICJ0eF9kZWZlcnJlZCJ9LAorCXsgInR4X2V4Y2Vzc19jb2xsaXNpb25zIn0sCisJeyAidHhfbGF0ZV9jb2xsaXNpb25zIn0sCisJeyAidHhfdG90YWxfY29sbGlzaW9ucyJ9LAorCXsgInJ4X2ZyYWdtZW50cyJ9LAkvKiAyMCAqLworCXsgInJ4X2phYmJlcnMifSwKKwl7ICJyeF91bmRlcnNpemVfcGFja2V0cyJ9LAorCXsgInJ4X292ZXJzaXplX3BhY2tldHMifSwKKwl7ICJyeF94b25fZnJhbWVzIn0sCisJeyAicnhfeG9mZl9mcmFtZXMifSwKKwl7ICJ0eF94b25fZnJhbWVzIn0sCisJeyAidHhfeG9mZl9mcmFtZXMifSwKKwl7ICJyeF9tYWNfY3RybF9mcmFtZXMifSwKKwl7ICJyeF9maWx0ZXJlZF9wYWNrZXRzIn0sCisJeyAicnhfZGlzY2FyZHMifSwJLyogMzAgKi8KKwl7ICJicmJfZGlzY2FyZCJ9LAorCXsgImJyYl90cnVuY2F0ZSJ9LAorCXsgInh4b3ZlcmZsb3cifQogfTsKIAogI2RlZmluZSBTVEFUU19PRkZTRVQzMihvZmZzZXRfbmFtZSkgXAogCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzLCBvZmZzZXRfbmFtZSkgLyA0KQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBibngyeF9zdGF0c19vZmZzZXRfYXJyW0JOWDJYX05VTV9TVEFUU10gPSB7Ci0JU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAkJICAgICAvKiAgMCAqLwotCVNUQVRTX09GRlNFVDMyKHN0YXRfSWZIQ0luQmFkT2N0ZXRzX2hpKSwJCSAgICAgLyogIDEgKi8KLQlTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksICAgICAJICAgICAvKiAgMiAqLwotCVNUQVRTX09GRlNFVDMyKHN0YXRfSWZIQ091dEJhZE9jdGV0c19oaSksICAgICAgIAkgICAgIC8qICAzICovCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwgICAgICAgICAgIC8qICA0ICovCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLCAgICAgICAgIC8qICA1ICovCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLCAgICAgICAgIC8qICA2ICovCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwgICAgICAgIC8qICA3ICovCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLCAgICAgIC8qICA4ICovCi0JU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLCAgICAgIC8qICA5ICovCi0JU1RBVFNfT0ZGU0VUMzIoc3RhdF9Eb3Qzc3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzKSwgICAgIC8qIDEwICovCi0JU1RBVFNfT0ZGU0VUMzIoc3RhdF9Eb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMpLCAgICAgICAgICAgIC8qIDExICovCi0JU1RBVFNfT0ZGU0VUMzIoY3JjX3JlY2VpdmVfZXJyb3JzKSwgICAgIAkJICAgICAvKiAxMiAqLwotCVNUQVRTX09GRlNFVDMyKGFsaWdubWVudF9lcnJvcnMpLCAgICAgICAJCSAgICAgLyogMTMgKi8KLQlTVEFUU19PRkZTRVQzMihzaW5nbGVfY29sbGlzaW9uX3RyYW5zbWl0X2ZyYW1lcyksICAgICAgICAgICAgLyogMTQgKi8KLQlTVEFUU19PRkZTRVQzMihtdWx0aXBsZV9jb2xsaXNpb25fdHJhbnNtaXRfZnJhbWVzKSwgICAgICAgICAgLyogMTUgKi8KLQlTVEFUU19PRkZTRVQzMihzdGF0X0RvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyksICAgICAgICAgLyogMTYgKi8KLQlTVEFUU19PRkZTRVQzMihleGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lcyksICAgICAJICAgICAvKiAxNyAqLwotCVNUQVRTX09GRlNFVDMyKGxhdGVfY29sbGlzaW9uX2ZyYW1lcyksICAJCSAgICAgLyogMTggKi8KLQlTVEFUU19PRkZTRVQzMihudW1iZXJfb2ZfYnVnc19mb3VuZF9pbl9zdGF0c19zcGVjKSwgICAgICAgICAgLyogMTkgKi8KLQlTVEFUU19PRkZTRVQzMihydW50X3BhY2tldHNfcmVjZWl2ZWQpLCAgCQkgICAgIC8qIDIwICovCi0JU1RBVFNfT0ZGU0VUMzIoamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQpLAkJICAgICAvKiAyMSAqLwotCVNUQVRTX09GRlNFVDMyKGVycm9yX3J1bnRfcGFja2V0c19yZWNlaXZlZCksICAgIAkgICAgIC8qIDIyICovCi0JU1RBVFNfT0ZGU0VUMzIoZXJyb3JfamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQpLCAgCSAgICAgLyogMjMgKi8KLQlTVEFUU19PRkZTRVQzMihwYXVzZV94b25fZnJhbWVzX3JlY2VpdmVkKSwgICAgICAJICAgICAvKiAyNCAqLwotCVNUQVRTX09GRlNFVDMyKHBhdXNlX3hvZmZfZnJhbWVzX3JlY2VpdmVkKSwgICAgIAkgICAgIC8qIDI1ICovCi0JU1RBVFNfT0ZGU0VUMzIocGF1c2VfeG9uX2ZyYW1lc190cmFuc21pdHRlZCksICAgCSAgICAgLyogMjYgKi8KLQlTVEFUU19PRkZTRVQzMihwYXVzZV94b2ZmX2ZyYW1lc190cmFuc21pdHRlZCksICAJICAgICAvKiAyNyAqLwotCVNUQVRTX09GRlNFVDMyKGNvbnRyb2xfZnJhbWVzX3JlY2VpdmVkKSwJCSAgICAgLyogMjggKi8KLQlTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLCAgICAgCQkgICAgIC8qIDI5ICovCi0JU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkKSwJCQkgICAgIC8qIDMwICovCisJU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCVNUQVRTX09GRlNFVDMyKHN0YXRfSWZIQ0luQmFkT2N0ZXRzX2hpKSwKKwlTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCisJU1RBVFNfT0ZGU0VUMzIoc3RhdF9JZkhDT3V0QmFkT2N0ZXRzX2hpKSwKKwlTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCVNUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwlTVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwlTVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCVNUQVRTX09GRlNFVDMyKHN0YXRfRG90M3N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyksIC8qIDEwICovCisJU1RBVFNfT0ZGU0VUMzIoc3RhdF9Eb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMpLAorCVNUQVRTX09GRlNFVDMyKGNyY19yZWNlaXZlX2Vycm9ycyksCisJU1RBVFNfT0ZGU0VUMzIoYWxpZ25tZW50X2Vycm9ycyksCisJU1RBVFNfT0ZGU0VUMzIoc2luZ2xlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXMpLAorCVNUQVRTX09GRlNFVDMyKG11bHRpcGxlX2NvbGxpc2lvbl90cmFuc21pdF9mcmFtZXMpLAorCVNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zKSwKKwlTVEFUU19PRkZTRVQzMihleGNlc3NpdmVfY29sbGlzaW9uX2ZyYW1lcyksCisJU1RBVFNfT0ZGU0VUMzIobGF0ZV9jb2xsaXNpb25fZnJhbWVzKSwKKwlTVEFUU19PRkZTRVQzMihudW1iZXJfb2ZfYnVnc19mb3VuZF9pbl9zdGF0c19zcGVjKSwKKwlTVEFUU19PRkZTRVQzMihydW50X3BhY2tldHNfcmVjZWl2ZWQpLAkJCS8qIDIwICovCisJU1RBVFNfT0ZGU0VUMzIoamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQpLAorCVNUQVRTX09GRlNFVDMyKGVycm9yX3J1bnRfcGFja2V0c19yZWNlaXZlZCksCisJU1RBVFNfT0ZGU0VUMzIoZXJyb3JfamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQpLAorCVNUQVRTX09GRlNFVDMyKHBhdXNlX3hvbl9mcmFtZXNfcmVjZWl2ZWQpLAorCVNUQVRTX09GRlNFVDMyKHBhdXNlX3hvZmZfZnJhbWVzX3JlY2VpdmVkKSwKKwlTVEFUU19PRkZTRVQzMihwYXVzZV94b25fZnJhbWVzX3RyYW5zbWl0dGVkKSwKKwlTVEFUU19PRkZTRVQzMihwYXVzZV94b2ZmX2ZyYW1lc190cmFuc21pdHRlZCksCisJU1RBVFNfT0ZGU0VUMzIoY29udHJvbF9mcmFtZXNfcmVjZWl2ZWQpLAorCVNUQVRTX09GRlNFVDMyKG1hY19maWx0ZXJfZGlzY2FyZCksCisJU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkKSwJCQkvKiAzMCAqLworCVNUQVRTX09GRlNFVDMyKGJyYl9kaXNjYXJkKSwKKwlTVEFUU19PRkZTRVQzMihicmJfdHJ1bmNhdGVfZGlzY2FyZCksCisJU1RBVFNfT0ZGU0VUMzIoeHhvdmVyZmxvd19kaXNjYXJkKQogfTsKIAogc3RhdGljIHU4IGJueDJ4X3N0YXRzX2xlbl9hcnJbQk5YMlhfTlVNX1NUQVRTXSA9IHsKIAk4LCAwLCA4LCAwLCA4LCA4LCA4LCA4LCA4LCA4LAogCTQsIDAsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCiAJNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKLQk0LAorCTQsIDQsIDQsIDQKIH07CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpidWYpCkBAIC04MTM4LDkgKzkwNDIsNyBAQAogICogbmV0X2RldmljZSBzZXJ2aWNlIGZ1bmN0aW9ucwogICovCiAKLS8qIENhbGxlZCB3aXRoIHJ0bmxfbG9jayBmcm9tIHZsYW4gZnVuY3Rpb25zIGFuZCBhbHNvIG5ldGlmX3R4X2xvY2sKLSAqIGZyb20gc2V0X211bHRpY2FzdC4KLSAqLworLyogY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBmcm9tIHNldF9tdWx0aWNhc3QgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MzE0LDcgKzkyMTYsNyBAQAogCQkJICAgICAgIEVUSF9UWF9CRF9FVEhfQUREUl9UWVBFX1NISUZUKTsKIAl0eF9iZC0+Z2VuZXJhbF9kYXRhIHw9IDE7IC8qIGhlYWRlciBuYmQgKi8KIAotCS8qIHJlbWViZXIgdGhlIGZpcnN0IGJkIG9mIHRoZSBwYWNrZXQgKi8KKwkvKiByZW1lbWJlciB0aGUgZmlyc3QgYmQgb2YgdGhlIHBhY2tldCAqLwogCXR4X2J1Zi0+Zmlyc3RfYmQgPSBiZF9wcm9kOwogCiAJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKQEAgLTgzMzQsNyArOTIzNiw3IEBACiAKIAkJLyogZm9yIG5vdyBOUyBmbGFnIGlzIG5vdCB1c2VkIGluIExpbnV4ICovCiAJCXBiZC0+Z2xvYmFsX2RhdGEgPSAobGVuIHwKLQkJCQkgICAgKChza2ItPnByb3RvY29sID09IEVUSF9QXzgwMjFRKSA8PAorCQkJCSAgICAoKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfODAyMVEpKSA8PAogCQkJCSAgICAgRVRIX1RYX1BBUlNFX0JEX0xMQ19TTkFQX0VOX1NISUZUKSk7CiAJCXBiZC0+aXBfaGxlbiA9IGlwX2hkcmxlbihza2IpIC8gMjsKIAkJcGJkLT50b3RhbF9obGVuID0gY3B1X3RvX2xlMTYobGVuICsgcGJkLT5pcF9obGVuKTsKQEAgLTgzNDMsNyArOTI0NSw3IEBACiAKIAkJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PQogCQkJCQkJRVRIX1RYX0JEX0ZMQUdTX1RDUF9DU1VNOwotCQkJcGJkLT50Y3BfZmxhZ3MgPSBodG9ubCh0Y3BfZmxhZ193b3JkKHNrYikpICYgMHhGRkZGOworCQkJcGJkLT50Y3BfZmxhZ3MgPSBwYmRfdGNwX2ZsYWdzKHNrYik7CiAJCQlwYmQtPnRvdGFsX2hsZW4gKz0gY3B1X3RvX2xlMTYodGNwX2hkcmxlbihza2IpIC8gMik7CiAJCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9IHN3YWIxNih0aC0+Y2hlY2spOwogCkBAIC04Mzg3LDcgKzkyODksNyBAQAogCiAJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgJiYKIAkgICAgKHNrYi0+bGVuID4gKGJwLT5kZXYtPm10dSArIEVUSF9ITEVOKSkpIHsKLQkJaW50IGhsZW4gPSAyICogbGUzMl90b19jcHUocGJkLT50b3RhbF9obGVuKTsKKwkJaW50IGhsZW4gPSAyICogbGUxNl90b19jcHUocGJkLT50b3RhbF9obGVuKTsKIAogCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAogCQkgICAiVFNPIHBhY2tldCBsZW4gJWQgIGhsZW4gJWQgIHRvdGFsIGxlbiAlZCAgdHNvIHNpemUgJWRcbiIsCkBAIC04NDI3LDcgKzkzMjksNyBAQAogCQkJdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7CiAJCQkvKiB0aGlzIG1hcmtzIHRoZSBiZAogCQkJICogYXMgb25lIHRoYXQgaGFzIG5vIGluZGl2aWR1YWwgbWFwcGluZwotCQkJICogdGhlIEZXIGlnbm9ycyB0aGlzIGZsYWcgaW4gYSBiZCBub3QgbWFrZWQgc3RhcnQKKwkJCSAqIHRoZSBGVyBpZ25vcmVzIHRoaXMgZmxhZyBpbiBhIGJkIG5vdCBtYXJrZWQgc3RhcnQKIAkJCSAqLwogCQkJdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkID0gRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTzsKIAkJCURQKE5FVElGX01TR19UWF9RVUVVRUQsCkBAIC04NTA0LDkgKzk0MDYsMTEgQEAKIAogCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJkb29yYmVsbDogbmJkICV1ICBiZCAlZFxuIiwgbmJkLCBiZF9wcm9kKTsKIAotCWZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QgKz0gY3B1X3RvX2xlMTYobmJkKTsKKwlmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kID0KKwkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCkgKyBuYmQpOwogCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCi0JZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgKz0gY3B1X3RvX2xlMzIoMSk7CisJZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgPQorCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCkgKyAxKTsKIAlET09SQkVMTChicCwgZnBfaW5kZXgsIDApOwogCiAJbW1pb3diKCk7CkBAIC04NTI1LDExICs5NDI5LDYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJueDJ4X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmZGV2LT5zdGF0czsKLX0KLQogLyogQ2FsbGVkIHdpdGggcnRubF9sb2NrICovCiBzdGF0aWMgaW50IGJueDJ4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTg1NDMsMTYgKzk0NDIsMTMgQEAKIC8qIENhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwogc3RhdGljIGludCBibngyeF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCByYzsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIFVubG9hZCB0aGUgZHJpdmVyLCByZWxlYXNlIElSUXMgKi8KLQlyYyA9IGJueDJ4X25pY191bmxvYWQoYnAsIDEpOwotCWlmIChyYykgewotCQlCTlgyWF9FUlIoImJueDJ4X25pY191bmxvYWQgZmFpbGVkOiAlZFxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QzaG90KTsKKwlibngyeF9uaWNfdW5sb2FkKGJwLCAxKTsKKworCWlmICghQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwogfQpAQCAtODU4NCw3ICs5NDgwLDcgQEAKIAljYXNlIFNJT0NHTUlJUEhZOgogCQlkYXRhLT5waHlfaWQgPSBicC0+cGh5X2FkZHI7CiAKLQkJLyogZmFsbHRocnUgKi8KKwkJLyogZmFsbHRocm91Z2ggKi8KIAljYXNlIFNJT0NHTUlJUkVHOiB7CiAJCXUzMiBtaWlfcmVndmFsOwogCkBAIC04NjMzLDcgKzk1MjksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRoaXMgZG9lcyBub3QgcmFjZSB3aXRoIHBhY2tldCBhbGxvY2F0aW9uCi0JICogYmVjYXVzZSB0aGUgYWN0dWFsbCBhbGxvYyBzaXplIGlzCisJICogYmVjYXVzZSB0aGUgYWN0dWFsIGFsbG9jIHNpemUgaXMKIAkgKiBvbmx5IHVwZGF0ZWQgYXMgcGFydCBvZiBsb2FkCiAJICovCiAJZGV2LT5tdHUgPSBuZXdfbXR1OwpAQCAtODY2Niw3ICs5NTYyLDcgQEAKIAogCWJwLT52bGdycCA9IHZsZ3JwOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCWJueDJ4X3NldF9yeF9tb2RlKGRldik7CisJCWJueDJ4X3NldF9jbGllbnRfY29uZmlnKGJwKTsKIH0KICNlbmRpZgogCkBAIC04Njk1LDE0ICs5NTkxLDE4IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQogCQlyZXR1cm47CiAKLQlicC0+aW5fcmVzZXRfdGFzayA9IDE7CisJcnRubF9sb2NrKCk7CiAKLQlibngyeF9uZXRpZl9zdG9wKGJwKTsKKwlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pIHsKKwkJRFAoTkVUSUZfTVNHX1RYX0VSUiwgInN0YXRlIGlzICV4LCByZXR1cm5pbmdcbiIsIGJwLT5zdGF0ZSk7CisJCWdvdG8gcmVzZXRfdGFza19leGl0OworCX0KIAogCWJueDJ4X25pY191bmxvYWQoYnAsIDApOwogCWJueDJ4X25pY19sb2FkKGJwLCAwKTsKIAotCWJwLT5pbl9yZXNldF90YXNrID0gMDsKK3Jlc2V0X3Rhc2tfZXhpdDoKKwlydG5sX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtODc4Myw4ICs5NjgzLDYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZicC0+cGh5X2xvY2spOwogCi0JYnAtPmluX3Jlc2V0X3Rhc2sgPSAwOwotCiAJSU5JVF9XT1JLKCZicC0+cmVzZXRfdGFzaywgYm54MnhfcmVzZXRfdGFzayk7CiAJSU5JVF9XT1JLKCZicC0+c3BfdGFzaywgYm54Mnhfc3BfdGFzayk7CiAKQEAgLTg4MTMsNyArOTcxMSw3IEBACiAJYm54MnhfZ2V0X2h3aW5mbyhicCk7CiAKIAlpZiAoQ0hJUF9SRVYoYnApID09IENISVBfUkVWX0ZQR0EpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlBHQSBkZXRhY3RlZC4gTUNQIGRpc2FibGVkLCIKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlBHQSBkZXRlY3RlZC4gTUNQIGRpc2FibGVkLCIKIAkJICAgICAgICIgd2lsbCBvbmx5IGluaXQgZmlyc3QgZGV2aWNlXG4iKTsKIAkJb25lZnVuYyA9IDE7CiAJCW5vbWNwID0gMTsKQEAgLTg4ODIsMTQgKzk3ODAsMzIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2dldF9wY2llX3dpZHRoKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbCA9IFJFR19SRChicCwgUENJQ0ZHX09GRlNFVCArIFBDSUNGR19MSU5LX0NPTlRST0wpOworCisJdmFsID0gKHZhbCAmIFBDSUNGR19MSU5LX1dJRFRIKSA+PiBQQ0lDRkdfTElOS19XSURUSF9TSElGVDsKKwlyZXR1cm4gdmFsOworfQorCisvKiByZXR1cm4gdmFsdWUgb2YgMT0yLjVHSHogMj01R0h6ICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9nZXRfcGNpZV9zcGVlZChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIFBDSUNGR19PRkZTRVQgKyBQQ0lDRkdfTElOS19DT05UUk9MKTsKKworCXZhbCA9ICh2YWwgJiBQQ0lDRkdfTElOS19TUEVFRCkgPj4gUENJQ0ZHX0xJTktfU1BFRURfU0hJRlQ7CisJcmV0dXJuIHZhbDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCB2ZXJzaW9uX3ByaW50ZWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGJueDJ4ICpicDsKLQlpbnQgcmMsIGk7CisJaW50IHJjOwogCWludCBwb3J0ID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWYgKHZlcnNpb25fcHJpbnRlZCsrID09IDApCiAJCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CkBAIC04OTA2LDYgKzk4MjIsNyBAQAogCiAJaWYgKHBvcnQgJiYgb25lZnVuYykgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJzZWNvbmQgZnVuY3Rpb24gZGlzYWJsZWQuIGV4aXRpbmdcbiIpOworCQlmcmVlX25ldGRldihkZXYpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTg5MTgsNyArOTgzNSw2IEBACiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBibngyeF9zdGFydF94bWl0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCi0JZGV2LT5nZXRfc3RhdHMgPSBibngyeF9nZXRfc3RhdHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZibngyeF9ldGh0b29sX29wczsKIAlkZXYtPm9wZW4gPSBibngyeF9vcGVuOwogCWRldi0+c3RvcCA9IGJueDJ4X2Nsb3NlOwpAQCAtODk0NCw3ICs5ODYwLDcgQEAKIAogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2VcbiIpOwogCQlpZiAoYnAtPnJlZ3ZpZXcpCiAJCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKIAkJaWYgKGJwLT5kb29yYmVsbHMpCkBAIC04OTU5LDMyICs5ODc1LDMwIEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlicC0+bmFtZSA9IGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgKCVjJWQpIFBDSSVzICVzICVkTUh6ICIKLQkgICAgICAgImZvdW5kIGF0IG1lbSAlbHgsIElSUSAlZCwgIiwKLQkgICAgICAgZGV2LT5uYW1lLCBicC0+bmFtZSwKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMgKCVjJWQpIFBDSS1FIHglZCAlcyBmb3VuZCBhdCBtZW0gJWx4LCIKKwkgICAgICAgIiBJUlEgJWQsICIsIGRldi0+bmFtZSwgYnAtPm5hbWUsCiAJICAgICAgICgoQ0hJUF9JRChicCkgJiAweGYwMDApID4+IDEyKSArICdBJywKIAkgICAgICAgKChDSElQX0lEKGJwKSAmIDB4MGZmMCkgPj4gNCksCi0JICAgICAgICgoYnAtPmZsYWdzICYgUENJWF9GTEFHKSA/ICItWCIgOiAiIiksCi0JICAgICAgICgoYnAtPmZsYWdzICYgUENJXzMyQklUX0ZMQUcpID8gIjMyLWJpdCIgOiAiNjQtYml0IiksCi0JICAgICAgIGJwLT5idXNfc3BlZWRfbWh6LAotCSAgICAgICBkZXYtPmJhc2VfYWRkciwKLQkgICAgICAgYnAtPnBkZXYtPmlycSk7Ci0KLQlwcmludGsoIm5vZGUgYWRkciAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlwcmludGsoIiUyLjJ4IiwgZGV2LT5kZXZfYWRkcltpXSk7Ci0JcHJpbnRrKCJcbiIpOwotCisJICAgICAgIGJueDJ4X2dldF9wY2llX3dpZHRoKGJwKSwKKwkgICAgICAgKGJueDJ4X2dldF9wY2llX3NwZWVkKGJwKSA9PSAyKSA/ICI1R0h6IChHZW4yKSIgOiAiMi41R0h6IiwKKwkgICAgICAgZGV2LT5iYXNlX2FkZHIsIGJwLT5wZGV2LT5pcnEpOworCXByaW50ayhLRVJOX0NPTlQgIm5vZGUgYWRkciAlc1xuIiwgcHJpbnRfbWFjKG1hYywgZGV2LT5kZXZfYWRkcikpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYm54MnhfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBibngyeCAqYnA7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCS8qdGFza2xldF9raWxsKCZicC0+c3BfdGFzayk7Ki8KKwlpZiAoIWRldikgeworCQkvKiB3ZSBnZXQgaGVyZSBpZiBpbml0X29uZSgpIGZhaWxzICovCisJCXByaW50ayhLRVJOX0VSUiBQRlggIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOworCQlyZXR1cm47CisJfQorCisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCWlmIChicC0+cmVndmlldykKQEAgLTkwMDIsMzQgKzk5MTYsNDMgQEAKIHN0YXRpYyBpbnQgYm54Mnhfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjOworCXN0cnVjdCBibngyeCAqYnA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlyYyA9IGJueDJ4X25pY191bmxvYWQoYnAsIDApOwotCWlmICghcmMpCi0JCXJldHVybiByYzsKKwlicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlibngyeF9uaWNfdW5sb2FkKGJwLCAwKTsKIAogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAorCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWJueDJ4X3NldF9wb3dlcl9zdGF0ZShicCwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJueDJ4ICpicDsKIAlpbnQgcmM7CiAKKwlpZiAoIWRldikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJCQUQgbmV0IGRldmljZSBmcm9tIGJueDJ4X2luaXRfb25lXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJYm54Mnhfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnguaCBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKaW5kZXggNGY3YWU2Zi4uNGYwYzBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnguaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnguaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNCw2ICsyNCw4IEBACiAjZGVmaW5lIEJOWDJYX01TR19TVEFUUyAJCTB4MjAwMDAgLyogd2FzOiBORVRJRl9NU0dfVElNRVIgKi8KICNkZWZpbmUgTkVUSUZfTVNHX05WTSAgIAkJMHg0MDAwMCAvKiB3YXM6IE5FVElGX01TR19IVyAqLwogI2RlZmluZSBORVRJRl9NU0dfRE1BRSAgCQkweDgwMDAwIC8qIHdhczogTkVUSUZfTVNHX0hXICovCisjZGVmaW5lIEJOWDJYX01TR19TUAkJCTB4MTAwMDAwIC8qIHdhczogTkVUSUZfTVNHX0lOVFIgKi8KKyNkZWZpbmUgQk5YMlhfTVNHX0ZQCQkJMHgyMDAwMDAgLyogd2FzOiBORVRJRl9NU0dfSU5UUiAqLwogCiAjZGVmaW5lIERQX0xFVkVMCQkJS0VSTl9OT1RJQ0UgICAgIC8qIHdhczogS0VSTl9ERUJVRyAqLwogCkBAIC00MCw2ICs0MiwxMiBAQAogCQlfX0xJTkVfXywgYnAtPmRldj8oYnAtPmRldi0+bmFtZSk6Ij8iLCAjI19fYXJncyk7IFwKIAl9IHdoaWxlICgwKQogCisvKiBmb3IgbG9nZ2luZyAobmV2ZXIgbWFza2VkKSAqLworI2RlZmluZSBCTlgyWF9MT0coX19mbXQsIF9fYXJncy4uLikgZG8geyBcCisJcHJpbnRrKEtFUk5fTk9USUNFICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fRlVOQ1RJT05fXywgXAorCQlfX0xJTkVfXywgYnAtPmRldj8oYnAtPmRldi0+bmFtZSk6Ij8iLCAjI19fYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCiAvKiBiZWZvcmUgd2UgaGF2ZSBhIGRldi0+bmFtZSB1c2UgZGV2X2luZm8oKSAqLwogI2RlZmluZSBCTlgyWF9ERVZfSU5GTyhfX2ZtdCwgX19hcmdzLi4uKSBkbyB7IFwKIAlpZiAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1BST0JFKSBcCkBAIC00MjMsOCArNDMxLDYgQEAKICNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfT1BFTiAgICAgCTB4YTAwMDAKICNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSEFMVElORyAgCTB4YjAwMDAKICNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfSEFMVEVEICAgCTB4YzAwMDAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfREVMRVRFRCAgCTB4ZDAwMDAKLSNkZWZpbmUgQk5YMlhfRlBfU1RBVEVfQ0xPU0VfSVJRCTB4ZTAwMDAKIAogCWludCAgICAgCQlpbmRleDsKIApAQCAtNTA1LDcgKzUxMSw2IEBACiAJc3RydWN0IGV0aF9zcGUgIAkqc3BxOwogCWRtYV9hZGRyX3QgICAgICAJc3BxX21hcHBpbmc7CiAJdTE2ICAgICAJCXNwcV9wcm9kX2lkeDsKLQl1MTYgICAgIAkJZHNiX3NwX3Byb2RfaWR4OwogCXN0cnVjdCBldGhfc3BlICAJKnNwcV9wcm9kX2JkOwogCXN0cnVjdCBldGhfc3BlICAJKnNwcV9sYXN0X2JkOwogCXUxNiAgICAgCQkqZHNiX3NwX3Byb2Q7CkBAIC01MTcsNyArNTIyLDcgQEAKIAkgKi8KIAl1OCAgICAgIAkJc3RhdF9wZW5kaW5nOwogCi0JLyogRW5kIG9mIGZpbGVkcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZSBjb2RlIHBhdGhzICovCisJLyogRW5kIG9mIGZpZWxkcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZSBjb2RlIHBhdGhzICovCiAKIAlpbnQgICAgIAkJcGFuaWM7CiAJaW50ICAgICAJCW1zZ2xldmVsOwpAQCAtNTQwLDggKzU0NSw2IEBACiAJc3BpbmxvY2tfdCAgICAgIAlwaHlfbG9jazsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIHJlc2V0X3Rhc2s7Ci0JdTE2ICAgICAJCWluX3Jlc2V0X3Rhc2s7Ci0KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBzcF90YXNrOwogCiAJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7CkBAIC01NTUsNyArNTU4LDYgQEAKICNkZWZpbmUgQ0hJUF9JRChicCkgICAgIAkJKCgoYnApLT5jaGlwX2lkKSAmIDB4ZmZmZmZmZjApCiAKICNkZWZpbmUgQ0hJUF9OVU0oYnApICAgIAkJKCgoYnApLT5jaGlwX2lkKSAmIDB4ZmZmZjAwMDApCi0jZGVmaW5lIENISVBfTlVNXzU3MTAgICAJCTB4NTcxMDAwMDAKIAogI2RlZmluZSBDSElQX1JFVihicCkgICAgCQkoKChicCktPmNoaXBfaWQpICYgMHgwMDAwZjAwMCkKICNkZWZpbmUgQ0hJUF9SRVZfQXggICAgIAkJMHgwMDAwMDAwMApAQCAtNTc0LDcgKzU3Niw4IEBACiAJdTMyICAgICAJCWZ3X21iOwogCiAJdTMyICAgICAJCWh3X2NvbmZpZzsKLQl1MzIgICAgIAkJc2VyZGVzX2NvbmZpZzsKKwl1MzIJCQlib2FyZDsKKwl1MzIJCQlzZXJkZXNfY29uZmlnOwogCXUzMiAgICAgCQlsYW5lX2NvbmZpZzsKIAl1MzIgICAgIAkJZXh0X3BoeV9jb25maWc7CiAjZGVmaW5lIFhHWFNfRVhUX1BIWV9UWVBFKGJwKSAgIAkoYnAtPmV4dF9waHlfY29uZmlnICYgXApAQCAtNTk1LDExICs1OTgsMTEgQEAKIAl1OCAgICAgIAkJdHhfbGFuZV9zd2FwOwogCiAJdTggICAgICAJCWxpbmtfdXA7CisJdTgJCQlwaHlfbGlua191cDsKIAogCXUzMiAgICAgCQlzdXBwb3J0ZWQ7CiAvKiBsaW5rIHNldHRpbmdzIC0gbWlzc2luZyBkZWZpbmVzICovCiAjZGVmaW5lIFNVUFBPUlRFRF8yNTAwYmFzZVRfRnVsbAkoMSA8PCAxNSkKLSNkZWZpbmUgU1VQUE9SVEVEX0NYNCAgIAkJKDEgPDwgMTYpCiAKIAl1MzIgICAgIAkJcGh5X2ZsYWdzOwogLyojZGVmaW5lIFBIWV9TRVJERVNfRkxBRyAgICAgICAJCTB4MSovCkBAIC02NDQsMTYgKzY0Nyw5IEBACiAjZGVmaW5lIEZMT1dfQ1RSTF9CT1RIICAJCVBPUlRfRkVBVFVSRV9GTE9XX0NPTlRST0xfQk9USAogI2RlZmluZSBGTE9XX0NUUkxfTk9ORSAgCQlQT1JUX0ZFQVRVUkVfRkxPV19DT05UUk9MX05PTkUKIAotCXUzMiAgICAgCQlwYXVzZV9tb2RlOwotI2RlZmluZSBQQVVTRV9OT05FICAgICAgCQkwCi0jZGVmaW5lIFBBVVNFX1NZTU1FVFJJQyAJCTEKLSNkZWZpbmUgUEFVU0VfQVNZTU1FVFJJQwkJMgotI2RlZmluZSBQQVVTRV9CT1RIICAgICAgCQkzCi0KIAl1MzIgICAgIAkJYWR2ZXJ0aXNpbmc7CiAvKiBsaW5rIHNldHRpbmdzIC0gbWlzc2luZyBkZWZpbmVzICovCiAjZGVmaW5lIEFEVkVSVElTRURfMjUwMGJhc2VUX0Z1bGwgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIEFEVkVSVElTRURfQ1g0ICAJCSgxIDw8IDE2KQogCiAJdTMyICAgICAJCWxpbmtfc3RhdHVzOwogCXUzMiAgICAgCQlsaW5lX3NwZWVkOwpAQCAtNjY3LDYgKzY2Myw4IEBACiAjZGVmaW5lIE5WUkFNX1RJTUVPVVRfQ09VTlQgICAgIAkzMDAwMAogI2RlZmluZSBOVlJBTV9QQUdFX1NJWkUgCQkyNTYKIAorCXU4CQkJd29sOworCiAJaW50ICAgICAJCXJ4X3Jpbmdfc2l6ZTsKIAogCXUxNiAgICAgCQl0eF9xdWlja19jb25zX3RyaXBfaW50OwpAQCAtNzE4LDkgKzcxNiw2IEBACiAjZW5kaWYKIAogCWNoYXIgICAgCQkqbmFtZTsKLQl1MTYgICAgIAkJYnVzX3NwZWVkX21oejsKLQl1OCAgICAgIAkJd29sOwotCXU4ICAgICAgCQlwYWQ7CiAKIAkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHN0YXRzIGNvbGxlY3RpbmcgKi8KIAlpbnQgICAgIAkJc3RhdHNfc3RhdGU7CkBAIC04NTYsOCArODUxLDggQEAKICNkZWZpbmUgTUFYX1NQUV9QRU5ESU5HIAkJOAogCiAKLSNkZWZpbmUgQk5YMlhfTlVNX1NUQVRTIAkJMzEKLSNkZWZpbmUgQk5YMlhfTlVNX1RFU1RTIAkJMgorI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQkzNAorI2RlZmluZSBCTlgyWF9OVU1fVEVTVFMJCQkxCiAKIAogI2RlZmluZSBEUE1fVFJJR0VSX1RZUEUgCQkweDQwCkBAIC04NjcsNiArODYyLDE1IEBACiAJCSAgICAgICBEUE1fVFJJR0VSX1RZUEUpOyBcCiAJfSB3aGlsZSAoMCkKIAorLyogUENJRSBsaW5rIGFuZCBzcGVlZCAqLworI2RlZmluZSBQQ0lDRkdfTElOS19XSURUSAkJMHgxZjAwMDAwCisjZGVmaW5lIFBDSUNGR19MSU5LX1dJRFRIX1NISUZUCQkyMAorI2RlZmluZSBQQ0lDRkdfTElOS19TUEVFRAkJMHhmMDAwMAorI2RlZmluZSBQQ0lDRkdfTElOS19TUEVFRF9TSElGVAkJMTYKKworI2RlZmluZSBCTUFDX0NPTlRST0xfUlhfRU5BQkxFCQkyCisKKyNkZWZpbmUgcGJkX3RjcF9mbGFncyhza2IpICAJKG50b2hsKHRjcF9mbGFnX3dvcmQodGNwX2hkcihza2IpKSk+PjE2ICYgMHhmZikKIAogLyogc3R1ZmYgYWRkZWQgdG8gbWFrZSB0aGUgY29kZSBmaXQgODBDb2wgKi8KIApAQCAtOTM5LDEzICs5NDMsMTMgQEAKICNkZWZpbmUgTElOS18xNkdURkQgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNkdURkQKICNkZWZpbmUgTElOS18xNkdYRkQgICAgIAkJTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNkdYRkQKIAotI2RlZmluZSBOSUdfU1RBVFVTX0lOVEVSUlVQVF9YR1hTMF9MSU5LMTBHIFwKKyNkZWZpbmUgTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIFwKIAkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LMTBHCi0jZGVmaW5lIE5JR19YR1hTMF9MSU5LX1NUQVRVUyBcCisjZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgXAogCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTCi0jZGVmaW5lIE5JR19YR1hTMF9MSU5LX1NUQVRVU19TSVpFIFwKKyNkZWZpbmUgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVU19TSVpFIFwKIAkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVU19TSVpFCi0jZGVmaW5lIE5JR19TRVJERVMwX0xJTktfU1RBVFVTIFwKKyNkZWZpbmUgTklHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTIFwKIAkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19TRVJERVMwX0xJTktfU1RBVFVTCiAjZGVmaW5lIE5JR19NQVNLX01JX0lOVCBcCiAJCU5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19FTUFDMF9NSVNDX01JX0lOVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oIGIvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCmluZGV4IDYyYTZlYjguLjNiOTY4OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9md19kZWZzLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaHNpLmggYi9kcml2ZXJzL25ldC9ibngyeF9oc2kuaAppbmRleCA2ZmQ5NTljLi5iMjEwNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9oc2kuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2hzaS5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTgsMTY5ICs4LDkgQEAKICAqLwogCiAKLSNkZWZpbmUgRlVOQ18wCQkJCTAKLSNkZWZpbmUgRlVOQ18xCQkJCTEKLSNkZWZpbmUgRlVOQ19NQVgJCQkyCi0KLQotLyogVGhpcyB2YWx1ZSAoaW4gbWlsbGlzZWNvbmRzKSBkZXRlcm1pbmVzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGRyaXZlcgotICogaXNzdWluZyB0aGUgUFVMU0UgbWVzc2FnZSBjb2RlLiAgVGhlIGZpcm13YXJlIG1vbml0b3JzIHRoaXMgcGVyaW9kaWMKLSAqIHB1bHNlIHRvIGRldGVybWluZSB3aGVuIHRvIHN3aXRjaCB0byBhbiBPUy1hYnNlbnQgbW9kZS4gKi8KLSNkZWZpbmUgRFJWX1BVTFNFX1BFUklPRF9NUwkJMjUwCi0KLS8qIFRoaXMgdmFsdWUgKGluIG1pbGxpc2Vjb25kcykgZGV0ZXJtaW5lcyBob3cgbG9uZyB0aGUgZHJpdmVyIHNob3VsZAotICogd2FpdCBmb3IgYW4gYWNrbm93bGVkZ2VtZW50IGZyb20gdGhlIGZpcm13YXJlIGJlZm9yZSB0aW1pbmcgb3V0LiAgT25jZQotICogdGhlIGZpcm13YXJlIGhhcyB0aW1lZCBvdXQsIHRoZSBkcml2ZXIgd2lsbCBhc3N1bWUgdGhlcmUgaXMgbm8gZmlybXdhcmUKLSAqIHJ1bm5pbmcgYW5kIHRoZXJlIHdvbid0IGJlIGFueSBmaXJtd2FyZS1kcml2ZXIgc3luY2hyb25pemF0aW9uIGR1cmluZyBhCi0gKiBkcml2ZXIgcmVzZXQuICovCi0jZGVmaW5lIEZXX0FDS19USU1FX09VVF9NUwkJNTAwMAotCi0jZGVmaW5lIEZXX0FDS19QT0xMX1RJTUVfTVMJCTEKLQotI2RlZmluZSBGV19BQ0tfTlVNX09GX1BPTEwJKEZXX0FDS19USU1FX09VVF9NUy9GV19BQ0tfUE9MTF9USU1FX01TKQotCi0vKiBMRUQgQmxpbmsgcmF0ZSB0aGF0IHdpbGwgYWNoaWV2ZSB+MTUuOUh6ICovCi0jZGVmaW5lIExFRF9CTElOS19SQVRFX1ZBTAkJNDgwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEcml2ZXIgPC0+IEZXIE1haWxib3gJCQkJCQkgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZHJ2X2Z3X21iIHsKLQl1MzIgZHJ2X21iX2hlYWRlcjsKLSNkZWZpbmUgRFJWX01TR19DT0RFX01BU0sJCQkweGZmZmYwMDAwCi0jZGVmaW5lIERSVl9NU0dfQ09ERV9MT0FEX1JFUQkJCTB4MTAwMDAwMDAKLSNkZWZpbmUgRFJWX01TR19DT0RFX0xPQURfRE9ORQkJCTB4MTEwMDAwMDAKLSNkZWZpbmUgRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0VOCQkweDIwMDAwMDAwCi0jZGVmaW5lIERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9ESVMgCTB4MjAwMTAwMDAKLSNkZWZpbmUgRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX01DUCAJMHgyMDAyMDAwMAotI2RlZmluZSBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUJCTB4MjEwMDAwMDAKLSNkZWZpbmUgRFJWX01TR19DT0RFX0RJQUdfRU5URVJfUkVRCQkweDUwMDAwMDAwCi0jZGVmaW5lIERSVl9NU0dfQ09ERV9ESUFHX0VYSVRfUkVRCQkweDYwMDAwMDAwCi0jZGVmaW5lIERSVl9NU0dfQ09ERV9WQUxJREFURV9LRVkJCTB4NzAwMDAwMDAKLSNkZWZpbmUgRFJWX01TR19DT0RFX0dFVF9DVVJSX0tFWQkJMHg4MDAwMDAwMAotI2RlZmluZSBEUlZfTVNHX0NPREVfR0VUX1VQR1JBREVfS0VZCQkweDgxMDAwMDAwCi0jZGVmaW5lIERSVl9NU0dfQ09ERV9HRVRfTUFOVUZfS0VZCQkweDgyMDAwMDAwCi0jZGVmaW5lIERSVl9NU0dfQ09ERV9MT0FEX0wyQl9QUkFNCQkweDkwMDAwMDAwCi0KLSNkZWZpbmUgRFJWX01TR19TRVFfTlVNQkVSX01BU0sgCQkweDAwMDBmZmZmCi0KLQl1MzIgZHJ2X21iX3BhcmFtOwotCi0JdTMyIGZ3X21iX2hlYWRlcjsKLSNkZWZpbmUgRldfTVNHX0NPREVfTUFTSwkJCTB4ZmZmZjAwMDAKLSNkZWZpbmUgRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OCQkweDExMDAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX0RSVl9MT0FEX1BPUlQJCTB4MTIwMDAwMDAKLSNkZWZpbmUgRldfTVNHX0NPREVfRFJWX0xPQURfUkVGVVNFRAkJMHgxMzAwMDAwMAotI2RlZmluZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9ET05FCQkweDE0MDAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OCQkweDIxMDAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX0RSVl9VTkxPQURfUE9SVAkJMHgyMjAwMDAwMAotI2RlZmluZSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX0RPTkUJCTB4MjMwMDAwMDAKLSNkZWZpbmUgRldfTVNHX0NPREVfRElBR19FTlRFUl9ET05FCQkweDUwMDAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX0RJQUdfUkVGVVNFIAkJMHg1MTAwMDAwMAotI2RlZmluZSBGV19NU0dfQ09ERV9WQUxJREFURV9LRVlfU1VDQ0VTUwkweDcwMDAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX1ZBTElEQVRFX0tFWV9GQUlMVVJFCTB4NzEwMDAwMDAKLSNkZWZpbmUgRldfTVNHX0NPREVfR0VUX0tFWV9ET05FCQkweDgwMDAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX05PX0tFWQkJCTB4OGYwMDAwMDAKLSNkZWZpbmUgRldfTVNHX0NPREVfTElDX0lORk9fTk9UX1JFQURZCQkweDhmODAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX0wyQl9QUkFNX0xPQURFRAkJMHg5MDAwMDAwMAotI2RlZmluZSBGV19NU0dfQ09ERV9MMkJfUFJBTV9UX0xPQURfRkFJTFVSRQkweDkxMDAwMDAwCi0jZGVmaW5lIEZXX01TR19DT0RFX0wyQl9QUkFNX0NfTE9BRF9GQUlMVVJFCTB4OTIwMDAwMDAKLSNkZWZpbmUgRldfTVNHX0NPREVfTDJCX1BSQU1fWF9MT0FEX0ZBSUxVUkUJMHg5MzAwMDAwMAotI2RlZmluZSBGV19NU0dfQ09ERV9MMkJfUFJBTV9VX0xPQURfRkFJTFVSRQkweDk0MDAwMDAwCi0KLSNkZWZpbmUgRldfTVNHX1NFUV9OVU1CRVJfTUFTSwkJCTB4MDAwMGZmZmYKLQotCXUzMiBmd19tYl9wYXJhbTsKLQotCXUzMiBsaW5rX3N0YXR1czsKLQkvKiBEcml2ZXIgc2hvdWxkIHVwZGF0ZSB0aGlzIGZpZWxkIG9uIGFueSBsaW5rIGNoYW5nZSBldmVudCAqLwotCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfRkxBR19NQVNLCQkweDAwMDAwMDAxCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfVVAJCQkweDAwMDAwMDAxCi0jZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfTUFTSwkweDAwMDAwMDFFCi0jZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfQU5fTk9UX0NPTVBMRVRFCSgwPDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwVEhECQkoMTw8MSkKLSNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMFRGRAkJKDI8PDEpCi0jZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwVFhIRAkJKDM8PDEpCi0jZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwVDQJCSg0PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMFRYRkQJCSg1PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBUSEQJCSg2PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBURkQJCSg3PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwMDBYRkQJCSg3PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBUSEQJCSg4PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBURkQJCSg5PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzI1MDBYRkQJCSg5PDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwR1RGRAkJKDEwPDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwR1hGRAkJKDEwPDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyR1RGRAkJKDExPDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyR1hGRAkJKDExPDwxKQotI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEyXzVHVEZECQkoMTI8PDEpCi0jZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJfNUdYRkQJCSgxMjw8MSkKLSNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xM0dURkQJCSgxMzw8MSkKLSNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xM0dYRkQJCSgxMzw8MSkKLSNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNUdURkQJCSgxNDw8MSkKLSNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNUdYRkQJCSgxNDw8MSkKLSNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNkdURkQJCSgxNTw8MSkKLSNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xNkdYRkQJCSgxNTw8MSkKLQotI2RlZmluZSBMSU5LX1NUQVRVU19BVVRPX05FR09USUFURV9GTEFHX01BU0sJCTB4MDAwMDAwMjAKLSNkZWZpbmUgTElOS19TVEFUVVNfQVVUT19ORUdPVElBVEVfRU5BQkxFRAkJMHgwMDAwMDAyMAotCi0jZGVmaW5lIExJTktfU1RBVFVTX0FVVE9fTkVHT1RJQVRFX0NPTVBMRVRFCQkweDAwMDAwMDQwCi0jZGVmaW5lIExJTktfU1RBVFVTX1BBUkFMTEVMX0RFVEVDVElPTl9GTEFHX01BU0sJMHgwMDAwMDA4MAotI2RlZmluZSBMSU5LX1NUQVRVU19QQVJBTExFTF9ERVRFQ1RJT05fVVNFRAkJMHgwMDAwMDA4MAotCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xMDAwVEZEX0NBUEFCTEUJMHgwMDAwMDIwMAotI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTAwMFRIRF9DQVBBQkxFCTB4MDAwMDA0MDAKLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEwMFQ0X0NBUEFCTEUJCTB4MDAwMDA4MDAKLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEwMFRYRkRfQ0FQQUJMRQkweDAwMDAxMDAwCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xMDBUWEhEX0NBUEFCTEUJMHgwMDAwMjAwMAotI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTBURkRfQ0FQQUJMRQkJMHgwMDAwNDAwMAotI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTBUSERfQ0FQQUJMRQkJMHgwMDAwODAwMAotCi0jZGVmaW5lIExJTktfU1RBVFVTX1RYX0ZMT1dfQ09OVFJPTF9GTEFHX01BU0sJCTB4MDAwMTAwMDAKLSNkZWZpbmUgTElOS19TVEFUVVNfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQJCTB4MDAwMTAwMDAKLQotI2RlZmluZSBMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRkxBR19NQVNLCQkweDAwMDIwMDAwCi0jZGVmaW5lIExJTktfU1RBVFVTX1JYX0ZMT1dfQ09OVFJPTF9FTkFCTEVECQkweDAwMDIwMDAwCi0KLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSX0ZMT1dfQ09OVFJPTF9NQVNLCTB4MDAwQzAwMDAKLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSX05PVF9QQVVTRV9DQVBBQkxFCSgwPDwxOCkKLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSX1NZTU1FVFJJQ19QQVVTRQkoMTw8MTgpCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl9BU1lNTUVUUklDX1BBVVNFCSgyPDwxOCkKLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSX0JPVEhfUEFVU0UJCSgzPDwxOCkKLQotI2RlZmluZSBMSU5LX1NUQVRVU19TRVJERVNfTElOSyAJCQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzI1MDBYRkRfQ0FQQUJMRQkweDAwMjAwMDAwCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8yNTAwWEhEX0NBUEFCTEUJMHgwMDQwMDAwMAotI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTBHWEZEX0NBUEFCTEUgCTB4MDA4MDAwMDAKLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEyR1hGRF9DQVBBQkxFIAkweDAxMDAwMDAwCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xMl81R1hGRF9DQVBBQkxFCTB4MDIwMDAwMDAKLSNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEzR1hGRF9DQVBBQkxFIAkweDA0MDAwMDAwCi0jZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xNUdYRkRfQ0FQQUJMRSAJMHgwODAwMDAwMAotI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTZHWEZEX0NBUEFCTEUgCTB4MTAwMDAwMDAKLQotCXUzMiBkcnZfcHVsc2VfbWI7Ci0jZGVmaW5lIERSVl9QVUxTRV9TRVFfTUFTSwkJCQkweDAwMDA3ZmZmCi0jZGVmaW5lIERSVl9QVUxTRV9TWVNURU1fVElNRV9NQVNLCQkJMHhmZmZmMDAwMAotCS8qIFRoZSBzeXN0ZW0gdGltZSBpcyBpbiB0aGUgZm9ybWF0IG9mCi0JICogKHllYXItMjAwMSkqMTIqMzIgKyBtb250aCozMiArIGRheS4gKi8KLSNkZWZpbmUgRFJWX1BVTFNFX0FMV0FZU19BTElWRQkJCQkweDAwMDA4MDAwCi0JLyogSW5kaWNhdGUgdG8gdGhlIGZpcm13YXJlIG5vdCB0byBnbyBpbnRvIHRoZQotCSAqIE9TLWFic2VudCB3aGVuIGl0IGlzIG5vdCBnZXR0aW5nIGRyaXZlciBwdWxzZS4KLQkgKiBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyBhcyB3ZWxsIGZvciBQWEUoTUJBKS4gKi8KLQotCXUzMiBtY3BfcHVsc2VfbWI7Ci0jZGVmaW5lIE1DUF9QVUxTRV9TRVFfTUFTSwkJCQkweDAwMDA3ZmZmCi0jZGVmaW5lIE1DUF9QVUxTRV9BTFdBWVNfQUxJVkUJCQkJMHgwMDAwODAwMAotCS8qIEluZGljYXRlcyB0byB0aGUgZHJpdmVyIG5vdCB0byBhc3NlcnQgZHVlIHRvIGxhY2sKLQkgKiBvZiBNQ1AgcmVzcG9uc2UgKi8KLSNkZWZpbmUgTUNQX0VWRU5UX01BU0sJCQkJCTB4ZmZmZjAwMDAKLSNkZWZpbmUgTUNQX0VWRU5UX09USEVSX0RSSVZFUl9SRVNFVF9SRVEJCTB4MDAwMTAwMDAKLQotfTsKLQorI2RlZmluZSBQT1JUXzAJCQkJMAorI2RlZmluZSBQT1JUXzEJCQkJMQorI2RlZmluZSBQT1JUX01BWAkJCTIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNoYXJlZCBIVyBjb25maWd1cmF0aW9uCQkJCQkJICAgICoKQEAgLTI0OSw3ICs4OSw3IEBACiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfU01CVVNfVElNSU5HXzEwMEtIWgkgICAgMHgwMDAwMDAwMAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX1NNQlVTX1RJTUlOR180MDBLSFoJICAgIDB4MDAwMDEwMDAKIAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0hJREVfRlVOQzEJCSAgICAweDAwMDAyMDAwCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfSElERV9QT1JUMQkJICAgIDB4MDAwMDIwMDAKIAogCXUzMiBwb3dlcl9kaXNzaXBhdGVkOwkJCQkJLyogMHgxMWMgKi8KICNkZWZpbmUgU0hBUkVEX0hXX0NGR19QT1dFUl9ESVNfQ01OX01BU0sJICAgIDB4ZmYwMDAwMDAKQEAgLTI5MCw2ICsxMzAsOCBAQAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMTVHICAgIDB4MDAwMDAwMDYKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIwRyAgICAweDAwMDAwMDA3CiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwM0cgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjJHICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIxRyAgICAweDAwMDAwMDBhCiAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9WRVJfTUFTSwkJICAgIDB4ZmZmZjAwMDAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9WRVJfU0hJRlQJCSAgICAxNgpAQCAtMzA0LDEzICsxNDYsMTIgQEAKIAogfTsKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUG9ydCBIVyBjb25maWd1cmF0aW9uCQkJCQkJICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHBvcnRfaHdfY2ZnIHsJLyogZnVuY3Rpb24gMDogMHgxMmMtMHgyYmIsIGZ1bmN0aW9uIDE6IDB4MmJjLTB4NDRiICovCitzdHJ1Y3QgcG9ydF9od19jZmcgewkJCSAgICAvKiBwb3J0IDA6IDB4MTJjICBwb3J0IDE6IDB4MmJjICovCiAKLQkvKiBGaWVsZHMgYmVsb3cgYXJlIHBvcnQgc3BlY2lmaWMgKGluIGFudGljaXBhdGlvbiBvZiBkdWFsIHBvcnQKLQkgICBkZXZpY2VzICovCiAJdTMyIHBjaV9pZDsKICNkZWZpbmUgUE9SVF9IV19DRkdfUENJX1ZFTkRPUl9JRF9NQVNLCQkgICAgMHhmZmZmMDAwMAogI2RlZmluZSBQT1JUX0hXX0NGR19QQ0lfREVWSUNFX0lEX01BU0sJCSAgICAweDAwMDBmZmZmCkBAIC00MjAsNiArMjYxLDggQEAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNgkgICAgMHgwMDAwMDUwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004Mjc2CSAgICAweDAwMDAwNjAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEJICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMQkgICAgMHgwMDAwMDgwMAorI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFCSAgICAweDAwMDBmZDAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OCSAgICAweDAwMDBmZjAwCiAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSwkgICAgMHgwMDAwMDBmZgpAQCAtNDYyLDExICszMDUsMTMgQEAKIAogfTsKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU2hhcmVkIEZlYXR1cmUgY29uZmlndXJhdGlvbiAJCQkJCSAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBzaGFyZWRfZmVhdF9jZmcgewkJCQkgLyogTlZSQU0gT2Zmc2V0ICovCi0JdTMyIGJtY19jb21tb247IAkJCQkJLyogMHg0NTAgKi8KKworCXUzMiBjb25maWc7CQkJCQkJLyogMHg0NTAgKi8KICNkZWZpbmUgU0hBUkVEX0ZFQVRVUkVfQk1DX0VDSE9fTU9ERV9FTiAJICAgIDB4MDAwMDAwMDEKIAogfTsKQEAgLTQ3NSw3ICszMjAsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFBvcnQgRmVhdHVyZSBjb25maWd1cmF0aW9uCQkJCQkJICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHBvcnRfZmVhdF9jZmcgewkvKiBmdW5jdGlvbiAwOiAweDQ1NC0weDRjNywgZnVuY3Rpb24gMTogMHg0YzgtMHg1M2IgKi8KK3N0cnVjdCBwb3J0X2ZlYXRfY2ZnIHsJCQkgICAgLyogcG9ydCAwOiAweDQ1NCAgcG9ydCAxOiAweDRjOCAqLworCiAJdTMyIGNvbmZpZzsKICNkZWZpbmUgUE9SVF9GRUFUVVJFX0JBUjFfU0laRV9NQVNLCQkgICAgMHgwMDAwMDAwZgogI2RlZmluZSBQT1JUX0ZFQVRVUkVfQkFSMV9TSVpFX1NISUZUCQkgICAgMApAQCAtNjA5LDggKzQ1NSw3IEBACiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9TTUJVU19BRERSX01BU0sJCSAgICAweDAwMDAwMGZlCiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9TTUJVU19BRERSX1NISUZUCQkgICAgMQogCi0JdTMyIGlzY3NpYl9ib290X2NmZzsKLSNkZWZpbmUgUE9SVF9GRUFUVVJFX0lTQ1NJQl9TS0lQX1RBUkdFVF9CT09UCSAgICAweDAwMDAwMDAxCisJdTMyIHJlc2VydmVkMTsKIAogCXUzMiBsaW5rX2NvbmZpZzsgICAgLyogVXNlZCBhcyBIVyBkZWZhdWx0cyBmb3IgdGhlIGRyaXZlciAqLwogI2RlZmluZSBQT1JUX0ZFQVRVUkVfQ09OTkVDVEVEX1NXSVRDSF9NQVNLCSAgICAweDAzMDAwMDAwCkBAIC02NTcsMjAgKzUwMiwyMDEgQEAKIH07CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXZpY2UgSW5mb3JtYXRpb24JCQkJCQkJICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgZGV2X2luZm8gewkJCQkJCSAgICAgLyogc2l6ZSAqLworCisJdTMyICAgIGJjX3JldjsgLyogOCBiaXRzIGVhY2g6IG1ham9yLCBtaW5vciwgYnVpbGQgKi8JICAgICAgICAvKiA0ICovCisKKwlzdHJ1Y3Qgc2hhcmVkX2h3X2NmZwkgc2hhcmVkX2h3X2NvbmZpZzsJCSAgICAgICAvKiA0MCAqLworCisJc3RydWN0IHBvcnRfaHdfY2ZnCSBwb3J0X2h3X2NvbmZpZ1tQT1JUX01BWF07ICAgICAgLyogNDAwKjI9ODAwICovCisKKwlzdHJ1Y3Qgc2hhcmVkX2ZlYXRfY2ZnCSBzaGFyZWRfZmVhdHVyZV9jb25maWc7IAkgICAgICAgIC8qIDQgKi8KKworCXN0cnVjdCBwb3J0X2ZlYXRfY2ZnCSBwb3J0X2ZlYXR1cmVfY29uZmlnW1BPUlRfTUFYXTsgLyogMTE2KjI9MjMyICovCisKK307CisKKworI2RlZmluZSBGVU5DXzAJCQkJMAorI2RlZmluZSBGVU5DXzEJCQkJMQorI2RlZmluZSBFMV9GVU5DX01BWAkJCTIKKyNkZWZpbmUgRlVOQ19NQVgJCQlFMV9GVU5DX01BWAorCisKKy8qIFRoaXMgdmFsdWUgKGluIG1pbGxpc2Vjb25kcykgZGV0ZXJtaW5lcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBkcml2ZXIKKyAqIGlzc3VpbmcgdGhlIFBVTFNFIG1lc3NhZ2UgY29kZS4gIFRoZSBmaXJtd2FyZSBtb25pdG9ycyB0aGlzIHBlcmlvZGljCisgKiBwdWxzZSB0byBkZXRlcm1pbmUgd2hlbiB0byBzd2l0Y2ggdG8gYW4gT1MtYWJzZW50IG1vZGUuICovCisjZGVmaW5lIERSVl9QVUxTRV9QRVJJT0RfTVMJCTI1MAorCisvKiBUaGlzIHZhbHVlIChpbiBtaWxsaXNlY29uZHMpIGRldGVybWluZXMgaG93IGxvbmcgdGhlIGRyaXZlciBzaG91bGQKKyAqIHdhaXQgZm9yIGFuIGFja25vd2xlZGdlbWVudCBmcm9tIHRoZSBmaXJtd2FyZSBiZWZvcmUgdGltaW5nIG91dC4gIE9uY2UKKyAqIHRoZSBmaXJtd2FyZSBoYXMgdGltZWQgb3V0LCB0aGUgZHJpdmVyIHdpbGwgYXNzdW1lIHRoZXJlIGlzIG5vIGZpcm13YXJlCisgKiBydW5uaW5nIGFuZCB0aGVyZSB3b24ndCBiZSBhbnkgZmlybXdhcmUtZHJpdmVyIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgYQorICogZHJpdmVyIHJlc2V0LiAqLworI2RlZmluZSBGV19BQ0tfVElNRV9PVVRfTVMJCTUwMDAKKworI2RlZmluZSBGV19BQ0tfUE9MTF9USU1FX01TCQkxCisKKyNkZWZpbmUgRldfQUNLX05VTV9PRl9QT0xMCShGV19BQ0tfVElNRV9PVVRfTVMvRldfQUNLX1BPTExfVElNRV9NUykKKworLyogTEVEIEJsaW5rIHJhdGUgdGhhdCB3aWxsIGFjaGlldmUgfjE1LjlIeiAqLworI2RlZmluZSBMRURfQkxJTktfUkFURV9WQUwJCTQ4MAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGV2aWNlIEluZm9ybWF0aW9uCQkJCQkJCSAgICAqCisgKiBEcml2ZXIgPC0+IEZXIE1haWxib3gJCQkJCQkgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZGV2X2luZm8gewkJCQkJCSAgICAvKiBzaXplICovCitzdHJ1Y3QgZHJ2X3BvcnRfbWIgewogCi0JdTMyICAgIGJjX3JldjsgLyogOCBiaXRzIGVhY2g6IG1ham9yLCBtaW5vciwgYnVpbGQgKi8JICAgICAgIC8qIDQgKi8KKwl1MzIgbGlua19zdGF0dXM7CisJLyogRHJpdmVyIHNob3VsZCB1cGRhdGUgdGhpcyBmaWVsZCBvbiBhbnkgbGluayBjaGFuZ2UgZXZlbnQgKi8KIAotCXN0cnVjdCBzaGFyZWRfaHdfY2ZnCSBzaGFyZWRfaHdfY29uZmlnOwkJICAgICAgLyogNDAgKi8KKyNkZWZpbmUgTElOS19TVEFUVVNfTElOS19GTEFHX01BU0sJCQkweDAwMDAwMDAxCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfVVAJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYX01BU0sJCTB4MDAwMDAwMUUKKyNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF9BTl9OT1RfQ09NUExFVEUJKDA8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBUSEQJCSgxPDwxKQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEwVEZECQkoMjw8MSkKKyNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMDBUWEhECQkoMzw8MSkKKyNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMDBUNAkJKDQ8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwVFhGRAkJKDU8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwMFRIRAkJKDY8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwMFRGRAkJKDc8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTAwMFhGRAkJKDc8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMjUwMFRIRAkJKDg8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMjUwMFRGRAkJKDk8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMjUwMFhGRAkJKDk8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBHVEZECQkoMTA8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTBHWEZECQkoMTA8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJHVEZECQkoMTE8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJHWEZECQkoMTE8PDEpCisjZGVmaW5lIExJTktfU1RBVFVTX1NQRUVEX0FORF9EVVBMRVhfMTJfNUdURkQJCSgxMjw8MSkKKyNkZWZpbmUgTElOS19TVEFUVVNfU1BFRURfQU5EX0RVUExFWF8xMl81R1hGRAkJKDEyPDwxKQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEzR1RGRAkJKDEzPDwxKQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzEzR1hGRAkJKDEzPDwxKQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE1R1RGRAkJKDE0PDwxKQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE1R1hGRAkJKDE0PDwxKQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE2R1RGRAkJKDE1PDwxKQorI2RlZmluZSBMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYXzE2R1hGRAkJKDE1PDwxKQogCi0Jc3RydWN0IHBvcnRfaHdfY2ZnCSBwb3J0X2h3X2NvbmZpZ1tGVU5DX01BWF07ICAgICAvKiA0MDAqMj04MDAgKi8KKyNkZWZpbmUgTElOS19TVEFUVVNfQVVUT19ORUdPVElBVEVfRkxBR19NQVNLCQkweDAwMDAwMDIwCisjZGVmaW5lIExJTktfU1RBVFVTX0FVVE9fTkVHT1RJQVRFX0VOQUJMRUQJCTB4MDAwMDAwMjAKIAotCXN0cnVjdCBzaGFyZWRfZmVhdF9jZmcJIHNoYXJlZF9mZWF0dXJlX2NvbmZpZzsgCSAgICAgICAvKiA0ICovCisjZGVmaW5lIExJTktfU1RBVFVTX0FVVE9fTkVHT1RJQVRFX0NPTVBMRVRFCQkweDAwMDAwMDQwCisjZGVmaW5lIExJTktfU1RBVFVTX1BBUkFMTEVMX0RFVEVDVElPTl9GTEFHX01BU0sJMHgwMDAwMDA4MAorI2RlZmluZSBMSU5LX1NUQVRVU19QQVJBTExFTF9ERVRFQ1RJT05fVVNFRAkJMHgwMDAwMDA4MAogCi0Jc3RydWN0IHBvcnRfZmVhdF9jZmcJIHBvcnRfZmVhdHVyZV9jb25maWdbRlVOQ19NQVhdOy8qIDExNioyPTIzMiAqLworI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTAwMFRGRF9DQVBBQkxFCTB4MDAwMDAyMDAKKyNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEwMDBUSERfQ0FQQUJMRQkweDAwMDAwNDAwCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xMDBUNF9DQVBBQkxFCQkweDAwMDAwODAwCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xMDBUWEZEX0NBUEFCTEUJMHgwMDAwMTAwMAorI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTAwVFhIRF9DQVBBQkxFCTB4MDAwMDIwMDAKKyNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEwVEZEX0NBUEFCTEUJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEwVEhEX0NBUEFCTEUJCTB4MDAwMDgwMDAKKworI2RlZmluZSBMSU5LX1NUQVRVU19UWF9GTE9XX0NPTlRST0xfRkxBR19NQVNLCQkweDAwMDEwMDAwCisjZGVmaW5lIExJTktfU1RBVFVTX1RYX0ZMT1dfQ09OVFJPTF9FTkFCTEVECQkweDAwMDEwMDAwCisKKyNkZWZpbmUgTElOS19TVEFUVVNfUlhfRkxPV19DT05UUk9MX0ZMQUdfTUFTSwkJMHgwMDAyMDAwMAorI2RlZmluZSBMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRAkJMHgwMDAyMDAwMAorCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl9GTE9XX0NPTlRST0xfTUFTSwkweDAwMEMwMDAwCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl9OT1RfUEFVU0VfQ0FQQUJMRQkoMDw8MTgpCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl9TWU1NRVRSSUNfUEFVU0UJKDE8PDE4KQorI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfQVNZTU1FVFJJQ19QQVVTRQkoMjw8MTgpCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl9CT1RIX1BBVVNFCQkoMzw8MTgpCisKKyNkZWZpbmUgTElOS19TVEFUVVNfU0VSREVTX0xJTksgCQkJMHgwMDEwMDAwMAorCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8yNTAwWEZEX0NBUEFCTEUJMHgwMDIwMDAwMAorI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMjUwMFhIRF9DQVBBQkxFCTB4MDA0MDAwMDAKKyNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzEwR1hGRF9DQVBBQkxFIAkweDAwODAwMDAwCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xMkdYRkRfQ0FQQUJMRSAJMHgwMTAwMDAwMAorI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTJfNUdYRkRfQ0FQQUJMRQkweDAyMDAwMDAwCisjZGVmaW5lIExJTktfU1RBVFVTX0xJTktfUEFSVE5FUl8xM0dYRkRfQ0FQQUJMRSAJMHgwNDAwMDAwMAorI2RlZmluZSBMSU5LX1NUQVRVU19MSU5LX1BBUlRORVJfMTVHWEZEX0NBUEFCTEUgCTB4MDgwMDAwMDAKKyNkZWZpbmUgTElOS19TVEFUVVNfTElOS19QQVJUTkVSXzE2R1hGRF9DQVBBQkxFIAkweDEwMDAwMDAwCisKKwl1MzIgcmVzZXJ2ZWRbM107CisKK307CisKKworc3RydWN0IGRydl9mdW5jX21iIHsKKworCXUzMiBkcnZfbWJfaGVhZGVyOworI2RlZmluZSBEUlZfTVNHX0NPREVfTUFTSwkJCQkweGZmZmYwMDAwCisjZGVmaW5lIERSVl9NU0dfQ09ERV9MT0FEX1JFUQkJCQkweDEwMDAwMDAwCisjZGVmaW5lIERSVl9NU0dfQ09ERV9MT0FEX0RPTkUJCQkJMHgxMTAwMDAwMAorI2RlZmluZSBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfRU4JCQkweDIwMDAwMDAwCisjZGVmaW5lIERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9ESVMgCQkweDIwMDEwMDAwCisjZGVmaW5lIERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9NQ1AgCQkweDIwMDIwMDAwCisjZGVmaW5lIERSVl9NU0dfQ09ERV9VTkxPQURfRE9ORQkJCTB4MjEwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX0RJQUdfRU5URVJfUkVRCQkJMHg1MDAwMDAwMAorI2RlZmluZSBEUlZfTVNHX0NPREVfRElBR19FWElUX1JFUQkJCTB4NjAwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX1ZBTElEQVRFX0tFWQkJCTB4NzAwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX0dFVF9DVVJSX0tFWQkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX0dFVF9VUEdSQURFX0tFWQkJCTB4ODEwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX0dFVF9NQU5VRl9LRVkJCQkweDgyMDAwMDAwCisjZGVmaW5lIERSVl9NU0dfQ09ERV9MT0FEX0wyQl9QUkFNCQkJMHg5MDAwMDAwMAorCisjZGVmaW5lIERSVl9NU0dfU0VRX05VTUJFUl9NQVNLIAkJCTB4MDAwMGZmZmYKKworCXUzMiBkcnZfbWJfcGFyYW07CisKKwl1MzIgZndfbWJfaGVhZGVyOworI2RlZmluZSBGV19NU0dfQ09ERV9NQVNLCQkJCTB4ZmZmZjAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OCQkJMHgxMDEwMDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9QT1JUCQkJMHgxMDExMDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9GVU5DVElPTgkJCTB4MTAxMjAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRFJWX0xPQURfUkVGVVNFRAkJCTB4MTAyMDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRFJWX0xPQURfRE9ORQkJCTB4MTExMDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9DT01NT04JCQkweDIwMTAwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX0RSVl9VTkxPQURfUE9SVAkJCTB4MjAxMTAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9GVU5DVElPTiAJCTB4MjAxMjAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9ET05FCQkJMHgyMTEwMDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9ESUFHX0VOVEVSX0RPTkUJCQkweDUwMTAwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX0RJQUdfUkVGVVNFIAkJCTB4NTAyMDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRElBR19FWElUX0RPTkUJCQkweDYwMTAwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX1ZBTElEQVRFX0tFWV9TVUNDRVNTCQkweDcwMTAwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX1ZBTElEQVRFX0tFWV9GQUlMVVJFCQkweDcwMjAwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX0dFVF9LRVlfRE9ORQkJCTB4ODAxMDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfTk9fS0VZCQkJCTB4ODBmMDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfTElDX0lORk9fTk9UX1JFQURZCQkJMHg4MGY4MDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9MMkJfUFJBTV9MT0FERUQJCQkweDkwMTAwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX0wyQl9QUkFNX1RfTE9BRF9GQUlMVVJFCQkweDkwMjEwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX0wyQl9QUkFNX0NfTE9BRF9GQUlMVVJFCQkweDkwMjIwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX0wyQl9QUkFNX1hfTE9BRF9GQUlMVVJFCQkweDkwMjMwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX0wyQl9QUkFNX1VfTE9BRF9GQUlMVVJFCQkweDkwMjQwMDAwCisKKyNkZWZpbmUgRldfTVNHX1NFUV9OVU1CRVJfTUFTSwkJCQkweDAwMDBmZmZmCisKKwl1MzIgZndfbWJfcGFyYW07CisKKwl1MzIgZHJ2X3B1bHNlX21iOworI2RlZmluZSBEUlZfUFVMU0VfU0VRX01BU0sJCQkJMHgwMDAwN2ZmZgorI2RlZmluZSBEUlZfUFVMU0VfU1lTVEVNX1RJTUVfTUFTSwkJCTB4ZmZmZjAwMDAKKwkvKiBUaGUgc3lzdGVtIHRpbWUgaXMgaW4gdGhlIGZvcm1hdCBvZgorCSAqICh5ZWFyLTIwMDEpKjEyKjMyICsgbW9udGgqMzIgKyBkYXkuICovCisjZGVmaW5lIERSVl9QVUxTRV9BTFdBWVNfQUxJVkUJCQkJMHgwMDAwODAwMAorCS8qIEluZGljYXRlIHRvIHRoZSBmaXJtd2FyZSBub3QgdG8gZ28gaW50byB0aGUKKwkgKiBPUy1hYnNlbnQgd2hlbiBpdCBpcyBub3QgZ2V0dGluZyBkcml2ZXIgcHVsc2UuCisJICogVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgYXMgd2VsbCBmb3IgUFhFKE1CQSkuICovCisKKwl1MzIgbWNwX3B1bHNlX21iOworI2RlZmluZSBNQ1BfUFVMU0VfU0VRX01BU0sJCQkJMHgwMDAwN2ZmZgorI2RlZmluZSBNQ1BfUFVMU0VfQUxXQVlTX0FMSVZFCQkJCTB4MDAwMDgwMDAKKwkvKiBJbmRpY2F0ZXMgdG8gdGhlIGRyaXZlciBub3QgdG8gYXNzZXJ0IGR1ZSB0byBsYWNrCisJICogb2YgTUNQIHJlc3BvbnNlICovCisjZGVmaW5lIE1DUF9FVkVOVF9NQVNLCQkJCQkweGZmZmYwMDAwCisjZGVmaW5lIE1DUF9FVkVOVF9PVEhFUl9EUklWRVJfUkVTRVRfUkVRCQkweDAwMDEwMDAwCisKKwl1MzIgaXNjc2lfYm9vdF9zaWduYXR1cmU7CisJdTMyIGlzY3NpX2Jvb3RfYmxvY2tfb2Zmc2V0OworCisJdTMyIHJlc2VydmVkWzNdOwogCiB9OwogCkBAIC02NzgsOSArNzA0LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYW5hZ2VtZW50IGZpcm13YXJlIHN0YXRlCQkJCQkJICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQWxsb2NhdGUgMzIwIGJ5dGVzIGZvciBtYW5hZ2VtZW50IGZpcm13YXJlOiBzdGlsbCBub3Qga25vd24gZXhhY3RseQotICogaG93IG11Y2ggSU1EIG5lZWRzLiAqLwotI2RlZmluZSBNR01URldfU1RBVEVfV09SRF9TSVpFCQkJCSAgICA4MAorLyogQWxsb2NhdGUgNDQwIGJ5dGVzIGZvciBtYW5hZ2VtZW50IGZpcm13YXJlICovCisjZGVmaW5lIE1HTVRGV19TVEFURV9XT1JEX1NJWkUJCQkJICAgIDExMAogCiBzdHJ1Y3QgbWdtdGZ3X3N0YXRlIHsKIAl1MzIgb3BhcXVlW01HTVRGV19TVEFURV9XT1JEX1NJWkVdOwpAQCAtNjkxLDMxICs3MTYsNDAgQEAKICAqIFNoYXJlZCBNZW1vcnkgUmVnaW9uIAkJCQkJCSAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBzaG1lbV9yZWdpb24gewkJCSAgICAgICAvKiAgIFNoYXJlZE1lbSBPZmZzZXQgKHNpemUpICovCi0JdTMyCQkgICAgdmFsaWRpdHlfbWFwW0ZVTkNfTUFYXTsgICAgLyogMHgwICg0ICogMiA9IDB4OCkgKi8KLSNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9QQ0lfQ0ZHCQkgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTSFJfTUVNX1ZBTElESVRZX01CCQkJICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9ERVZfSU5GTwkJICAgIDB4MDAwMDAwMDQKKworCXUzMgkJCXZhbGlkaXR5X21hcFtQT1JUX01BWF07ICAvKiAweDAgKDQqMiA9IDB4OCkgKi8KKyNkZWZpbmUgU0hSX01FTV9GT1JNQVRfUkVWX0lECQkJICAgICgnQSc8PDI0KQorI2RlZmluZSBTSFJfTUVNX0ZPUk1BVF9SRVZfTUFTSyAJCSAgICAweGZmMDAwMDAwCisJLyogdmFsaWRpdHkgYml0cyAqLworI2RlZmluZSBTSFJfTUVNX1ZBTElESVRZX1BDSV9DRkcJCSAgICAweDAwMTAwMDAwCisjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfTUIJCQkgICAgMHgwMDIwMDAwMAorI2RlZmluZSBTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPCQkgICAgMHgwMDQwMDAwMAorI2RlZmluZSBTSFJfTUVNX1ZBTElESVRZX1JFU0VSVkVECQkgICAgMHgwMDAwMDAwNwogCS8qIE9uZSBsaWNlbnNpbmcgYml0IHNob3VsZCBiZSBzZXQgKi8KICNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9MSUNfS0VZX0lOX0VGRkVDVF9NQVNLICAgICAweDAwMDAwMDM4CiAjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfTElDX01BTlVGX0tFWV9JTl9FRkZFQ1QgICAgMHgwMDAwMDAwOAogI2RlZmluZSBTSFJfTUVNX1ZBTElESVRZX0xJQ19VUEdSQURFX0tFWV9JTl9FRkZFQ1QgIDB4MDAwMDAwMTAKICNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9MSUNfTk9fS0VZX0lOX0VGRkVDVAkgICAgMHgwMDAwMDAyMAorCS8qIEFjdGl2ZSBNRlcgKi8KKyNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX1VOS05PV04JICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX0lQTUkJICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX1VNUCAJICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX05DU0kJICAgIDB4MDAwMDAwYzAKKyNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX05PTkUJICAgIDB4MDAwMDAxYzAKKyNkZWZpbmUgU0hSX01FTV9WQUxJRElUWV9BQ1RJVkVfTUZXX01BU0sJICAgIDB4MDAwMDAxYzAKIAotCXN0cnVjdCBkcnZfZndfbWIgICAgZHJ2X2Z3X21iW0ZVTkNfTUFYXTsgICAgIC8qIDB4OCAoMjggKiAyID0gMHgzOCkgKi8KKwlzdHJ1Y3QgZGV2X2luZm8gCWRldl9pbmZvOwkJIC8qIDB4OCAgICAgKDB4NDM4KSAqLwogCi0Jc3RydWN0IGRldl9pbmZvICAgICBkZXZfaW5mbzsJCQkgICAgLyogMHg0MCAoMHg0MzgpICovCi0KLSNpZmRlZiBfTElDRU5TRV9ICi0JbGljZW5zZV9rZXlfdAkgICAgZHJ2X2xpY19rZXlbRlVOQ19NQVhdOyAvKiAweDQ3OCAoNTIgKiAyID0gMHg2OCkgKi8KLSNlbHNlIC8qIExpbnV4ISAqLwotCXU4CQkgICAgcmVzZXJ2ZWRbNTIqRlVOQ19NQVhdOwotI2VuZGlmCisJdTgJCQlyZXNlcnZlZFs1MipQT1JUX01BWF07CiAKIAkvKiBGVyBpbmZvcm1hdGlvbiAoZm9yIGludGVybmFsIEZXIHVzZSkgKi8KLQl1MzIJCSAgICBmd19pbmZvX2Zpb19vZmZzZXQ7IAkgICAvKiAweDRlMCAoMHg0KSAgICovCi0Jc3RydWN0IG1nbXRmd19zdGF0ZSBtZ210Zndfc3RhdGU7CQkgICAvKiAweDRlNCAoMHgxNDApICovCisJdTMyCQkJZndfaW5mb19maW9fb2Zmc2V0OyAgICAvKiAweDRhOCAgICAgICAoMHg0KSAqLworCXN0cnVjdCBtZ210Zndfc3RhdGUJbWdtdGZ3X3N0YXRlOwkgICAgICAgLyogMHg0YWMgICAgICgweDFiOCkgKi8KIAotfTsJCQkJCQkJICAgLyogMHg2MjQgKi8KKwlzdHJ1Y3QgZHJ2X3BvcnRfbWIJcG9ydF9tYltQT1JUX01BWF07ICAgICAvKiAweDY2NCAoMTYqMj0weDIwKSAqLworCXN0cnVjdCBkcnZfZnVuY19tYglmdW5jX21iW0ZVTkNfTUFYXTsgICAgIC8qIDB4Njg0ICg0NCoyPTB4NTgpICovCisKK307CQkJCQkJICAgICAgIC8qIDB4NmRjICovCiAKIAogI2RlZmluZSBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OCQkJNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCmluZGV4IDA0ZjkzYmYuLmRjYWVjYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9pbml0Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDA5LDcgKzQwOSw3IEBACiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwKIAkJCSAgICAgYnAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsICh1MTYgKikmdmFsKTsKLQlEUChORVRJRl9NU0dfSFcsICJyZWFkIDB4JXggZnJvbSBkZXZjdGxcbiIsIHZhbCk7CisJRFAoTkVUSUZfTVNHX0hXLCAicmVhZCAweCV4IGZyb20gZGV2Y3RsXG4iLCAodTE2KXZhbCk7CiAJd19vcmRlciA9ICgodmFsICYgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNSk7CiAJcl9vcmRlciA9ICgodmFsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7CiAKQEAgLTQ3MiwxMCArNDcyLDE0IEBACiAJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9CV19XUiwgdmFsKTsKIAogCVJFR19XUihicCwgUFhQMl9SRUdfUlFfV1JfTUJTMCwgd19vcmRlcik7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9XUl9NQlMwICsgOCwgd19vcmRlcik7CisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9XUl9NQlMxLCB3X29yZGVyKTsKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1JEX01CUzAsIHJfb3JkZXIpOwotCVJFR19XUihicCwgUFhQMl9SRUdfUlFfUkRfTUJTMCArIDgsIHJfb3JkZXIpOworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfUkRfTUJTMSwgcl9vcmRlcik7CiAKKwlpZiAocl9vcmRlciA9PSBNQVhfUkRfT1JEKQorCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1BEUl9MSU1JVCwgMHhlMDApOworCisJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNRFBfVEgsICgweDE4IDw8IHdfb3JkZXIpKTsKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0RNQUVfVEgsICgxMjggPDwgd19vcmRlcikvMTYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9yZWcuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oCmluZGV4IDg2MDU1Mjk3Li41YTFhYTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9yZWcuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9yZWcuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X3JlZy5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI0LDYgKzI0LDggQEAKICNkZWZpbmUgQlJCMV9SRUdfQlJCMV9JTlRfU1RTCQkJCQkgMHg2MDExYwogLyogW1JXIDRdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgQlJCMV9SRUdfQlJCMV9QUlRZX01BU0sgCQkJCSAweDYwMTM4CisvKiBbUiA0XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBCUkIxX1JFR19CUkIxX1BSVFlfU1RTCQkJCQkgMHg2MDEyYwogLyogW1JXIDEwXSBBdCBhZGRyZXNzIEJSQjFfSU5EX0ZSRUVfTElTVF9QUlNfQ1JEVCBpbml0aWFsaXplIGZyZWUgaGVhZC4gQXQKICAgIGFkZHJlc3MgQlJCMV9JTkRfRlJFRV9MSVNUX1BSU19DUkRUKzEgaW5pdGlhbGl6ZSBmcmVlIHRhaWwuIEF0IGFkZHJlc3MKICAgIEJSQjFfSU5EX0ZSRUVfTElTVF9QUlNfQ1JEVCsyIGluaXRpYWxpemUgcGFyc2VyIGluaXRpYWwgY3JlZGl0LiAqLwpAQCAtMjgxLDYgKzI4Myw4IEBACiAjZGVmaW5lIENEVV9SRUdfQ0RVX0lOVF9TVFMJCQkJCSAweDEwMTAzMAogLyogW1JXIDVdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgQ0RVX1JFR19DRFVfUFJUWV9NQVNLCQkJCQkgMHgxMDEwNGMKKy8qIFtSIDVdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIENEVV9SRUdfQ0RVX1BSVFlfU1RTCQkJCQkgMHgxMDEwNDAKIC8qIFtSQyAzMl0gbG9nZ2luZyBvZiBlcnJvciBkYXRhIGluIGNhc2Ugb2YgYSBDRFUgbG9hZCBlcnJvcjoKICAgIHtleHBlY3RlZF9jaWRbMTU6MF07IHhwZWN0ZWRfdHlwZVsyOjBdOyB4cGVjdGVkX3JlZ2lvblsyOjBdOyBjdGl2ZV9lcnJvcjsKICAgIHlwZV9lcnJvcjsgY3R1YWxfYWN0aXZlOyBjdHVhbF9jb21wcmVzc2VkX2NvbnRleHR9OyAqLwpAQCAtMzA4LDYgKzMxMiw4IEBACiAjZGVmaW5lIENGQ19SRUdfQ0ZDX0lOVF9TVFNfQ0xSIAkJCQkgMHgxMDQxMDAKIC8qIFtSVyA0XSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIENGQ19SRUdfQ0ZDX1BSVFlfTUFTSwkJCQkJIDB4MTA0MTE4CisvKiBbUiA0XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBDRkNfUkVHX0NGQ19QUlRZX1NUUwkJCQkJIDB4MTA0MTBjCiAvKiBbUlcgMjFdIENJRCBjYW0gYWNjZXNzICgyMToxIC0gRGF0YTsgYWxpZCAtIDApICovCiAjZGVmaW5lIENGQ19SRUdfQ0lEX0NBTSAJCQkJCSAweDEwNDgwMAogI2RlZmluZSBDRkNfUkVHX0NPTlRST0wwCQkJCQkgMHgxMDQwMjgKQEAgLTM1NCw2ICszNjAsOCBAQAogI2RlZmluZSBDU0RNX1JFR19DU0RNX0lOVF9NQVNLXzEJCQkJIDB4YzIyYWMKIC8qIFtSVyAxMV0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBDU0RNX1JFR19DU0RNX1BSVFlfTUFTSyAJCQkJIDB4YzIyYmMKKy8qIFtSIDExXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBDU0RNX1JFR19DU0RNX1BSVFlfU1RTCQkJCQkgMHhjMjJiMAogI2RlZmluZSBDU0RNX1JFR19FTkFCTEVfSU4xCQkJCQkgMHhjMjIzOAogI2RlZmluZSBDU0RNX1JFR19FTkFCTEVfSU4yCQkJCQkgMHhjMjIzYwogI2RlZmluZSBDU0RNX1JFR19FTkFCTEVfT1VUMQkJCQkJIDB4YzIyNDAKQEAgLTQzOCw2ICs0NDYsOSBAQAogLyogW1JXIDMyXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIENTRU1fUkVHX0NTRU1fUFJUWV9NQVNLXzAJCQkJIDB4MjAwMTMwCiAjZGVmaW5lIENTRU1fUkVHX0NTRU1fUFJUWV9NQVNLXzEJCQkJIDB4MjAwMTQwCisvKiBbUiAzMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgQ1NFTV9SRUdfQ1NFTV9QUlRZX1NUU18wCQkJCSAweDIwMDEyNAorI2RlZmluZSBDU0VNX1JFR19DU0VNX1BSVFlfU1RTXzEJCQkJIDB4MjAwMTM0CiAjZGVmaW5lIENTRU1fUkVHX0VOQUJMRV9JTgkJCQkJIDB4MjAwMGE0CiAjZGVmaW5lIENTRU1fUkVHX0VOQUJMRV9PVVQJCQkJCSAweDIwMDBhOAogLyogW1JXIDMyXSBUaGlzIGFkZHJlc3Mgc3BhY2UgY29udGFpbnMgYWxsIHJlZ2lzdGVycyBhbmQgbWVtb3JpZXMgdGhhdCBhcmUKQEAgLTUyNiw2ICs1MzcsOCBAQAogI2RlZmluZSBDU0VNX1JFR19UU185X0FTCQkJCQkgMHgyMDAwNWMKIC8qIFtSVyAxXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIERCR19SRUdfREJHX1BSVFlfTUFTSwkJCQkJIDB4YzBhOAorLyogW1IgMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgREJHX1JFR19EQkdfUFJUWV9TVFMJCQkJCSAweGMwOWMKIC8qIFtSVyAyXSBkZWJ1ZyBvbmx5OiBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBjcmVkaXQgZm9yIFBDSSByZXF1ZXN0IHR5cGUgNAogICAgaW50ZXJmYWNlOyBNVVNUIGJlIGNvbmZpZ3VyZWQgQUZURVIgcGNpX2V4dF9idWZmZXJfc3RydF9hZGRyX2xzYi9tc2IgYXJlCiAgICBjb25maWd1cmVkICovCkBAIC01NDMsNiArNTU2LDggQEAKICNkZWZpbmUgRE1BRV9SRUdfRE1BRV9JTlRfTUFTSwkJCQkJIDB4MTAyMDU0CiAvKiBbUlcgNF0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBETUFFX1JFR19ETUFFX1BSVFlfTUFTSyAJCQkJIDB4MTAyMDY0CisvKiBbUiA0XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBETUFFX1JFR19ETUFFX1BSVFlfU1RTCQkJCQkgMHgxMDIwNTgKIC8qIFtSVyAxXSBDb21tYW5kIDAgZ28uICovCiAjZGVmaW5lIERNQUVfUkVHX0dPX0MwCQkJCQkJIDB4MTAyMDgwCiAvKiBbUlcgMV0gQ29tbWFuZCAxIGdvLiAqLwpAQCAtNjIzLDYgKzYzOCw4IEBACiAjZGVmaW5lIERPUlFfUkVHX0RPUlFfSU5UX1NUU19DTFIJCQkJIDB4MTcwMTc4CiAvKiBbUlcgMl0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBET1JRX1JFR19ET1JRX1BSVFlfTUFTSyAJCQkJIDB4MTcwMTkwCisvKiBbUiAyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBET1JRX1JFR19ET1JRX1BSVFlfU1RTCQkJCQkgMHgxNzAxODQKIC8qIFtSVyA4XSBUaGUgYWRkcmVzcyB0byB3cml0ZSB0aGUgRFBNIENJRCB0byBTVE9STS4gKi8KICNkZWZpbmUgRE9SUV9SRUdfRFBNX0NJRF9BRERSCQkJCQkgMHgxNzAwNDQKIC8qIFtSVyA1XSBUaGUgRFBNIG1vZGUgQ0lEIGV4dHJhY3Rpb24gb2Zmc2V0LiAqLwpAQCAtNjkyLDYgKzcwOSw4IEBACiAjZGVmaW5lIEhDX1JFR19DT05GSUdfMSAJCQkJCSAweDEwODAwNAogLyogW1JXIDNdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgSENfUkVHX0hDX1BSVFlfTUFTSwkJCQkJIDB4MTA4MGEwCisvKiBbUiAzXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBIQ19SRUdfSENfUFJUWV9TVFMJCQkJCSAweDEwODA5NAogLyogW1JXIDE3XSBzdGF0dXMgYmxvY2sgaW50ZXJydXB0IG1hc2s7IG9uZSBpbiBlYWNoIGJpdCBtZWFucyB1bm1hc2s7IHplcm93CiAgICBpbiBlYWNoIGJpdCBtZWFucyBtYXNrOyBiaXQgMCAtIGRlZmF1bHQgU0I7IGJpdCAxIC0gU0JfMDsgYml0IDIgLSBTQl8xLi4uCiAgICBiaXQgMTYtIFNCXzE1OyBhZGRyIDAgLSBwb3J0IDA7IGFkZHIgMSAtIHBvcnQgMSAqLwpAQCAtMTEyNyw2ICsxMTQ2LDcgQEAKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xNwkJCQkgMHhhMDQ0CiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTgJCQkJIDB4YTA0OAogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzE5CQkJCSAweGEwNGMKKyNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMAkJCQkgMHhhMDI4CiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTEJCQkJIDB4YTAyYwogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzIJCQkJIDB4YTAwOAogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzIwCQkJCSAweGEwNTAKQEAgLTExMzUsNiArMTE1NSw5IEBACiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNAkJCQkgMHhhMDEwCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNQkJCQkgMHhhMDE0CiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNgkJCQkgMHhhMDE4CisjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fNwkJCQkgMHhhMDFjCisjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOAkJCQkgMHhhMDIwCisjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fOQkJCQkgMHhhMDI0CiAvKiBbUlcgMzJdIGZpcnN0IDMyYiBmb3IgaW52ZXJ0aW5nIHRoZSBpbnB1dCBmb3IgZnVuY3Rpb24gMDsgZm9yIGVhY2ggYml0OgogICAgMD0gZG8gbm90IGludmVydDsgMT0gaW52ZXJ0OyBtYXBwZWQgYXMgZm9sbG93czogWzBdIE5JRyBhdHRlbnRpb24gZm9yCiAgICBmdW5jdGlvbjA7IFsxXSBOSUcgYXR0ZW50aW9uIGZvciBmdW5jdGlvbjE7IFsyXSBHUElPMSBtY3A7IFszXSBHUElPMiBtY3A7CkBAIC0xMTgzLDYgKzEyMDYsNDAgQEAKICAgIHN0YXJ0cyBhdCAweDAgZm9yIHRoZSBBMCB0YXBlLW91dCBhbmQgaW5jcmVtZW50cyBieSBvbmUgZm9yIGVhY2gKICAgIGFsbC1sYXllciB0YXBlLW91dC4gKi8KICNkZWZpbmUgTUlTQ19SRUdfQ0hJUF9SRVYJCQkJCSAweGE0MGMKKy8qIFtSVyAzMl0gVGhlIGZvbGxvd2luZyBkcml2ZXIgcmVnaXN0ZXJzKDEuLjYpIHJlcHJlc2VudCA2IGRyaXZlcnMgYW5kIDMyCisgICBjbGllbnRzLiBFYWNoIGNsaWVudCBjYW4gYmUgY29udHJvbGxlZCBieSBvbmUgZHJpdmVyIG9ubHkuIE9uZSBpbiBlYWNoCisgICBiaXQgcmVwcmVzZW50IHRoYXQgdGhpcyBkcml2ZXIgY29udHJvbCB0aGUgYXBwcm9wcmlhdGUgY2xpZW50IChFeDogYml0IDUKKyAgIGlzIHNldCBtZWFucyB0aGlzIGRyaXZlciBjb250cm9sIGNsaWVudCBudW1iZXIgNSkuIGFkZHIxID0gc2V0OyBhZGRyMCA9CisgICBjbGVhcjsgcmVhZCBmcm9tIGJvdGggYWRkcmVzc2VzIHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgPSBzdGF0dXMuIHdyaXRlCisgICB0byBhZGRyZXNzIDEgd2lsbCBzZXQgYSByZXF1ZXN0IHRvIGNvbnRyb2wgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIKKyAgIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzIHNldC4gaWYgdGhlIGNsaWVudCBpcyBmcmVlICh0aGUKKyAgIGFwcHJvcHJpYXRlIGJpdCBpbiBhbGwgdGhlIG90aGVyIGRyaXZlcnMgaXMgY2xlYXIpIG9uZSB3aWxsIGJlIHdyaXR0ZW4gdG8KKyAgIHRoYXQgZHJpdmVyIHJlZ2lzdGVyOyBpZiB0aGUgY2xpZW50IGlzbid0IGZyZWUgdGhlIGJpdCB3aWxsIHJlbWFpbiB6ZXJvLgorICAgaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBnYWluIGNvbnRyb2wgb24gYQorICAgY2xpZW50IGl0IGFscmVhZHkgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cKKyAgIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkKS4gd3JpdGUgdG8gYWRkcmVzcyAwIHdpbGwgc2V0IGEgcmVxdWVzdCB0bworICAgZnJlZSBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpciBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcworICAgc2V0LiBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIGNsZWFyICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZnJlZSBhIGNsaWVudAorICAgaXQgZG9lc24ndCBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVyBpbnRlcnJ1cHQgd2lsbAorICAgYmUgYXNzZXJ0ZWQpLiAqLworI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xCQkJCSAweGE1MTAKKy8qIFtSVyAzMl0gR1BJTy4gWzMxLTI4XSBGTE9BVCBwb3J0IDA7IFsyNy0yNF0gRkxPQVQgcG9ydCAwOyBXaGVuIGFueSBvZgorICAgdGhlc2UgYml0cyBpcyB3cml0dGVuIGFzIGEgJzEnOyB0aGUgY29ycmVzcG9uZGluZyBTUElPIGJpdCB3aWxsIHR1cm4gb2ZmCisgICBpdCdzIGRyaXZlcnMgYW5kIGJlY29tZSBhbiBpbnB1dC4gVGhpcyBpcyB0aGUgcmVzZXQgc3RhdGUgb2YgYWxsIEdQSU8KKyAgIHBpbnMuIFRoZSByZWFkIHZhbHVlIG9mIHRoZXNlIGJpdHMgd2lsbCBiZSBhICcxJyBpZiB0aGF0IGxhc3QgY29tbWFuZAorICAgKCNTRVQ7ICNDTFI7IG9yICNGTE9BVCkgZm9yIHRoaXMgYml0IHdhcyBhICNGTE9BVC4gKHJlc2V0IHZhbHVlIDB4ZmYpLgorICAgWzIzLTIwXSBDTFIgcG9ydCAxOyAxOS0xNl0gQ0xSIHBvcnQgMDsgV2hlbiBhbnkgb2YgdGhlc2UgYml0cyBpcyB3cml0dGVuCisgICBhcyBhICcxJzsgdGhlIGNvcnJlc3BvbmRpbmcgR1BJTyBiaXQgd2lsbCBkcml2ZSBsb3cuIFRoZSByZWFkIHZhbHVlIG9mCisgICB0aGVzZSBiaXRzIHdpbGwgYmUgYSAnMScgaWYgdGhhdCBsYXN0IGNvbW1hbmQgKCNTRVQ7ICNDTFI7IG9yICNGTE9BVCkgZm9yCisgICB0aGlzIGJpdCB3YXMgYSAjQ0xSLiAocmVzZXQgdmFsdWUgMCkuIFsxNS0xMl0gU0VUIHBvcnQgMTsgMTEtOF0gcG9ydCAwOworICAgU0VUIFdoZW4gYW55IG9mIHRoZXNlIGJpdHMgaXMgd3JpdHRlbiBhcyBhICcxJzsgdGhlIGNvcnJlc3BvbmRpbmcgR1BJTworICAgYml0IHdpbGwgZHJpdmUgaGlnaCAoaWYgaXQgaGFzIHRoYXQgY2FwYWJpbGl0eSkuIFRoZSByZWFkIHZhbHVlIG9mIHRoZXNlCisgICBiaXRzIHdpbGwgYmUgYSAnMScgaWYgdGhhdCBsYXN0IGNvbW1hbmQgKCNTRVQ7ICNDTFI7IG9yICNGTE9BVCkgZm9yIHRoaXMKKyAgIGJpdCB3YXMgYSAjU0VULiAocmVzZXQgdmFsdWUgMCkuIFs3LTRdIFZBTFVFIHBvcnQgMTsgWzMtMF0gVkFMVUUgcG9ydCAwOworICAgUk87IFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIHJlYWQgdmFsdWUgb2YgZWFjaCBvZiB0aGUgZWlnaHQgR1BJTyBwaW5zLgorICAgVGhpcyBpcyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBwaW47IG5vdCB0aGUgZHJpdmUgdmFsdWUuIFdyaXRpbmcgdGhlc2UKKyAgIGJpdHMgd2lsbCBoYXZlIG5vdCBlZmZlY3QuICovCisjZGVmaW5lIE1JU0NfUkVHX0dQSU8JCQkJCQkgMHhhNDkwCiAvKiBbUlcgMV0gU2V0dGluZyB0aGlzIGJpdCBlbmFibGVzIGEgdGltZXIgaW4gdGhlIEdSQyBibG9jayB0byB0aW1lb3V0IGFueQogICAgYWNjZXNzIHRoYXQgZG9lcyBub3QgZmluaXNoIHdpdGhpbgogICAgfm1pc2NfcmVnaXN0ZXJzX2dyY190aW1vdXRfdmFsLmdyY190aW1lb3V0X3ZhbCBjeWNsZXMuIFdoZW4gdGhpcyBiaXQgaXMKQEAgLTEyMjMsNiArMTI4MCw4IEBACiAjZGVmaW5lIE1JU0NfUkVHX01JU0NfSU5UX01BU0sJCQkJCSAweGEzODgKIC8qIFtSVyAxXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIE1JU0NfUkVHX01JU0NfUFJUWV9NQVNLIAkJCQkgMHhhMzk4CisvKiBbUiAxXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBNSVNDX1JFR19NSVNDX1BSVFlfU1RTCQkJCQkgMHhhMzhjCiAvKiBbUlcgMzJdIDMyIExTQiBvZiBzdG9ybSBQTEwgZmlyc3QgcmVnaXN0ZXI7IHJlc2V0IHZhbCA9IDB4IDA3MWQyOTExLgogICAgaW5zaWRlIG9yZGVyIG9mIHRoZSBiaXRzIGlzOiBbMF0gUDEgZGl2aWRlclswXSAocmVzZXQgdmFsdWUgMSk7IFsxXSBQMQogICAgZGl2aWRlclsxXSAocmVzZXQgdmFsdWUgMCk7IFsyXSBQMSBkaXZpZGVyWzJdIChyZXNldCB2YWx1ZSAwKTsgWzNdIFAxCkBAIC0xMjY0LDYgKzEzMjMsNTUgQEAKIC8qIFtSVyAyMF0gMjAgYml0IEdSQyBhZGRyZXNzIHdoZXJlIHRoZSBzY3JhdGNoLXBhZCBvZiB0aGUgTUNQIHRoYXQgaXMKICAgIHNoYXJlZCB3aXRoIHRoZSBkcml2ZXIgcmVzaWRlcyAqLwogI2RlZmluZSBNSVNDX1JFR19TSEFSRURfTUVNX0FERFIJCQkJIDB4YTJiNAorLyogW1JXIDMyXSBTUElPLiBbMzEtMjRdIEZMT0FUIFdoZW4gYW55IG9mIHRoZXNlIGJpdHMgaXMgd3JpdHRlbiBhcyBhICcxJzsKKyAgIHRoZSBjb3JyZXNwb25kaW5nIFNQSU8gYml0IHdpbGwgdHVybiBvZmYgaXQncyBkcml2ZXJzIGFuZCBiZWNvbWUgYW4KKyAgIGlucHV0LiBUaGlzIGlzIHRoZSByZXNldCBzdGF0ZSBvZiBhbGwgU1BJTyBwaW5zLiBUaGUgcmVhZCB2YWx1ZSBvZiB0aGVzZQorICAgYml0cyB3aWxsIGJlIGEgJzEnIGlmIHRoYXQgbGFzdCBjb21tYW5kICgjU0VUOyAjQ0w7IG9yICNGTE9BVCkgZm9yIHRoaXMKKyAgIGJpdCB3YXMgYSAjRkxPQVQuIChyZXNldCB2YWx1ZSAweGZmKS4gWzIzLTE2XSBDTFIgV2hlbiBhbnkgb2YgdGhlc2UgYml0cworICAgaXMgd3JpdHRlbiBhcyBhICcxJzsgdGhlIGNvcnJlc3BvbmRpbmcgU1BJTyBiaXQgd2lsbCBkcml2ZSBsb3cuIFRoZSByZWFkCisgICB2YWx1ZSBvZiB0aGVzZSBiaXRzIHdpbGwgYmUgYSAnMScgaWYgdGhhdCBsYXN0IGNvbW1hbmQgKCNTRVQ7ICNDTFI7IG9yCisjRkxPQVQpIGZvciB0aGlzIGJpdCB3YXMgYSAjQ0xSLiAocmVzZXQgdmFsdWUgMCkuIFsxNS04XSBTRVQgV2hlbiBhbnkgb2YKKyAgIHRoZXNlIGJpdHMgaXMgd3JpdHRlbiBhcyBhICcxJzsgdGhlIGNvcnJlc3BvbmRpbmcgU1BJTyBiaXQgd2lsbCBkcml2ZQorICAgaGlnaCAoaWYgaXQgaGFzIHRoYXQgY2FwYWJpbGl0eSkuIFRoZSByZWFkIHZhbHVlIG9mIHRoZXNlIGJpdHMgd2lsbCBiZSBhCisgICAnMScgaWYgdGhhdCBsYXN0IGNvbW1hbmQgKCNTRVQ7ICNDTFI7IG9yICNGTE9BVCkgZm9yIHRoaXMgYml0IHdhcyBhICNTRVQuCisgICAocmVzZXQgdmFsdWUgMCkuIFs3LTBdIFZBTFVFIFJPOyBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSByZWFkIHZhbHVlIG9mCisgICBlYWNoIG9mIHRoZSBlaWdodCBTUElPIHBpbnMuIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZSBvZiB0aGUgcGluOyBub3QgdGhlCisgICBkcml2ZSB2YWx1ZS4gV3JpdGluZyB0aGVzZSBiaXRzIHdpbGwgaGF2ZSBub3QgZWZmZWN0LiBFYWNoIDggYml0cyBmaWVsZAorICAgaXMgZGl2aWRlZCBhcyBmb2xsb3dzOiBbMF0gVkFVWCBFbmFibGU7IHdoZW4gcHVsc2VkIGxvdzsgZW5hYmxlcyBzdXBwbHkKKyAgIGZyb20gVkFVWC4gKFRoaXMgaXMgYW4gb3V0cHV0IHBpbiBvbmx5OyB0aGUgRkxPQVQgZmllbGQgaXMgbm90IGFwcGxpY2FibGUKKyAgIGZvciB0aGlzIHBpbik7IFsxXSBWQVVYIERpc2FibGU7IHdoZW4gcHVsc2VkIGxvdzsgZGlzYWJsZXMgc3VwcGx5IGZvcm0KKyAgIFZBVVguIChUaGlzIGlzIGFuIG91dHB1dCBwaW4gb25seTsgRkxPQVQgZmllbGQgaXMgbm90IGFwcGxpY2FibGUgZm9yIHRoaXMKKyAgIHBpbik7IFsyXSBTRUxfVkFVWF9CIC0gQ29udHJvbCB0byBwb3dlciBzd2l0Y2hpbmcgbG9naWMuIERyaXZlIGxvdyB0bworICAgc2VsZWN0IFZBVVggc3VwcGx5LiAoVGhpcyBpcyBhbiBvdXRwdXQgcGluIG9ubHk7IGl0IGlzIG5vdCBjb250cm9sbGVkIGJ5CisgICB0aGUgU0VUIGFuZCBDTFIgZmllbGRzOyBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBNYWluIFBvd2VyIFNNOyB0aGUgRkxPQVQKKyAgIGZpZWxkIGlzIG5vdCBhcHBsaWNhYmxlIGZvciB0aGlzIHBpbjsgb25seSB0aGUgVkFMVUUgZmllbGRzIGlzIHJlbGV2YW50IC0KKyAgIGl0IHJlZmxlY3RzIHRoZSBvdXRwdXQgdmFsdWUpOyBbM10gcmVzZXJ2ZWQ7IFs0XSBzcGlvXzQ7IFs1XSBzcGlvXzU7IFs2XQorICAgQml0IDAgb2YgVU1QIGRldmljZSBJRCBzZWxlY3Q7IHJlYWQgYnkgVU1QIGZpcm13YXJlOyBbN10gQml0IDEgb2YgVU1QCisgICBkZXZpY2UgSUQgc2VsZWN0OyByZWFkIGJ5IFVNUCBmaXJtd2FyZS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfU1BJTwkJCQkJCSAweGE0ZmMKKy8qIFtSVyA4XSBUaGVzZSBiaXRzIGVuYWJsZSB0aGUgU1BJT19JTlRzIHRvIHNpZ25hbHMgZXZlbnQgdG8gdGhlIElHVS9NQy4KKyAgIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIG1hcDogWzM6MF0gcmVzZXJ2ZWQ7IFs0XSBzcGlvXzQgWzVdIHNwaW9fNTsKKyAgIFs3OjBdIHJlc2VydmVkICovCisjZGVmaW5lIE1JU0NfUkVHX1NQSU9fRVZFTlRfRU4JCQkJCSAweGEyYjgKKy8qIFtSVyAzMl0gU1BJTyBJTlQuIFszMS0yNF0gT0xEX0NMUiBXcml0aW5nIGEgJzEnIHRvIHRoZXNlIGJpdCBjbGVhcnMgdGhlCisgICBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgI09MRF9WQUxVRSByZWdpc3Rlci4gVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuCisgICBpbnRlcnJ1cHQgb24gdGhlIGZhbGxpbmcgZWRnZSBvZiBjb3JyZXNwb25kaW5nIFNQSU8gaW5wdXQgKHJlc2V0IHZhbHVlCisgICAwKS4gWzIzLTE2XSBPTERfU0VUIFdyaXRpbmcgYSAnMScgdG8gdGhlc2UgYml0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0CisgICBpbiB0aGUgI09MRF9WQUxVRSByZWdpc3Rlci4gVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuIGludGVycnVwdCBvbiB0aGUKKyAgIHJpc2luZyBlZGdlIG9mIGNvcnJlc3BvbmRpbmcgU1BJTyBpbnB1dCAocmVzZXQgdmFsdWUgMCkuIFsxNS04XSBPTERfVkFMVUUKKyAgIFJPOyBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBvbGQgdmFsdWUgb2YgdGhlIFNQSU8gaW5wdXQgdmFsdWUuIFdoZW4gdGhlCisgICB+SU5UX1NUQVRFIGJpdCBpcyBzZXQ7IHRoaXMgYml0IGluZGljYXRlcyB0aGUgT0xEIHZhbHVlIG9mIHRoZSBwaW4gc3VjaAorICAgdGhhdCBpZiB+SU5UX1NUQVRFIGlzIHNldCBhbmQgdGhpcyBiaXQgaXMgJzAnOyB0aGVuIHRoZSBpbnRlcnJ1cHQgaXMgZHVlCisgICB0byBhIGxvdyB0byBoaWdoIGVkZ2UuIElmIH5JTlRfU1RBVEUgaXMgc2V0IGFuZCB0aGlzIGJpdCBpcyAnMSc7IHRoZW4gdGhlCisgICBpbnRlcnJ1cHQgaXMgZHVlIHRvIGEgaGlnaCB0byBsb3cgZWRnZSAocmVzZXQgdmFsdWUgMCkuIFs3LTBdIElOVF9TVEFURQorICAgUk87IFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIGN1cnJlbnQgU1BJTyBpbnRlcnJ1cHQgc3RhdGUgZm9yIGVhY2ggU1BJTworICAgcGluLiBUaGlzIGJpdCBpcyBjbGVhcmVkIHdoZW4gdGhlIGFwcHJvcHJpYXRlICNPTERfU0VUIG9yICNPTERfQ0xSCisgICBjb21tYW5kIGJpdCBpcyB3cml0dGVuLiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgU1BJTyBpbnB1dCBkb2VzIG5vdAorICAgbWF0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgaW4gI09MRF9WQUxVRSAocmVzZXQgdmFsdWUgMCkuICovCisjZGVmaW5lIE1JU0NfUkVHX1NQSU9fSU5UCQkJCQkgMHhhNTAwCisvKiBbUlcgMV0gU2V0IGJ5IHRoZSBNQ1AgdG8gcmVtZW1iZXIgaWYgb25lIG9yIG1vcmUgb2YgdGhlIGRyaXZlcnMgaXMvYXJlCisgICBsb2FkZWQ7IDAtcHJlcGFyZTsgLXVucHJlcGFyZSAqLworI2RlZmluZSBNSVNDX1JFR19VTlBSRVBBUkVECQkJCQkgMHhhNDI0CiAjZGVmaW5lIE5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19FTUFDMF9NSVNDX01JX0lOVAkgKDB4MTw8MCkKICNkZWZpbmUgTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMJICgweDE8PDkpCiAjZGVmaW5lIE5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19YR1hTMF9MSU5LMTBHIAkgKDB4MTw8MTUpCkBAIC0xMzkyLDYgKzE1MDAsOSBAQAogI2RlZmluZSBOSUdfUkVHX05JR19JTkdSRVNTX0VNQUMwX05PX0NSQwkJCSAweDEwMDQ0CiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBSWCBQQkYgTFAgSUYgKi8KICNkZWZpbmUgTklHX1JFR19QQkZfTEJfSU5fRU4JCQkJCSAweDEwMGI0CisvKiBbUlcgMV0gVmFsdWUgb2YgdGhpcyByZWdpc3RlciB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIHBvcnQgc3dhcCB3aGVuCisgICB+bmlnX3JlZ2lzdGVyc19zdHJhcF9vdmVycmlkZS5zdHJhcF9vdmVycmlkZSA9MSAqLworI2RlZmluZSBOSUdfUkVHX1BPUlRfU1dBUAkJCQkJIDB4MTAzOTQKIC8qIFtSVyAxXSBvdXRwdXQgZW5hYmxlIGZvciBSWCBwYXJzZXIgZGVzY3JpcHRvciBJRiAqLwogI2RlZmluZSBOSUdfUkVHX1BSU19FT1BfT1VUX0VOCQkJCQkgMHgxMDEwNAogLyogW1JXIDFdIElucHV0IGVuYWJsZSBmb3IgUlggcGFyc2VyIHJlcXVlc3QgSUYgKi8KQEAgLTE0MTAsNiArMTUyMSwxMCBAQAogI2RlZmluZSBOSUdfUkVHX1NUQVQyX0JSQl9PQ1RFVCAJCQkJIDB4MTA3ZTAKICNkZWZpbmUgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwCQkJCSAweDEwMzI4CiAjZGVmaW5lIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMQkJCQkgMHgxMDMyYworLyogW1JXIDFdIHBvcnQgc3dhcCBtdXggc2VsZWN0aW9uLiBJZiB0aGlzIHJlZ2lzdGVyIGVxdWFsIHRvIDAgdGhlbiBwb3J0CisgICBzd2FwIGlzIGVxdWFsIHRvIFNQSU8gcGluIHRoYXQgaW5wdXRzIGZyb20gaWZtdXhfc2VyZGVzX3N3YXAuIElmIDEgdGhlbgorICAgb3J0IHN3YXAgaXMgZXF1YWwgdG8gfm5pZ19yZWdpc3RlcnNfcG9ydF9zd2FwLnBvcnRfc3dhcCAqLworI2RlZmluZSBOSUdfUkVHX1NUUkFQX09WRVJSSURFCQkJCQkgMHgxMDM5OAogLyogW1JXIDFdIG91dHB1dCBlbmFibGUgZm9yIFJYX1hDTTAgSUYgKi8KICNkZWZpbmUgTklHX1JFR19YQ00wX09VVF9FTgkJCQkJIDB4MTAwZjAKIC8qIFtSVyAxXSBvdXRwdXQgZW5hYmxlIGZvciBSWF9YQ00xIElGICovCkBAIC0xNDk5LDYgKzE2MTQsOCBAQAogI2RlZmluZSBQQl9SRUdfUEJfSU5UX1NUUwkJCQkJIDB4MWMKIC8qIFtSVyA0XSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFBCX1JFR19QQl9QUlRZX01BU0sJCQkJCSAweDM4CisvKiBbUiA0XSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBQQl9SRUdfUEJfUFJUWV9TVFMJCQkJCSAweDJjCiAjZGVmaW5lIFBSU19SRUdfQV9QUlNVXzIwCQkJCQkgMHg0MDEzNAogLyogW1IgOF0gZGVidWcgb25seTogQ0ZDIGxvYWQgcmVxdWVzdCBjdXJyZW50IGNyZWRpdC4gVHJhbnNhY3Rpb24gYmFzZWQuICovCiAjZGVmaW5lIFBSU19SRUdfQ0ZDX0xEX0NVUlJFTlRfQ1JFRElUCQkJCSAweDQwMTY0CkBAIC0xNTkwLDYgKzE3MDcsOCBAQAogI2RlZmluZSBQUlNfUkVHX1BSU19JTlRfU1RTCQkJCQkgMHg0MDE4OAogLyogW1JXIDhdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgUFJTX1JFR19QUlNfUFJUWV9NQVNLCQkJCQkgMHg0MDFhNAorLyogW1IgOF0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgUFJTX1JFR19QUlNfUFJUWV9TVFMJCQkJCSAweDQwMTk4CiAvKiBbUlcgOF0gQ29udGV4dCByZWdpb24gZm9yIHB1cmUgYWNrbm93bGVkZ2UgcGFja2V0cy4gVXNlZCBpbiBDRkMgbG9hZAogICAgcmVxdWVzdCBtZXNzYWdlICovCiAjZGVmaW5lIFBSU19SRUdfUFVSRV9SRUdJT05TCQkJCQkgMHg0MDAyNApAQCAtMTcxOCw2ICsxODM3LDkgQEAKIC8qIFtSVyAzMl0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBQWFAyX1JFR19QWFAyX1BSVFlfTUFTS18wCQkJCSAweDEyMDU4OAogI2RlZmluZSBQWFAyX1JFR19QWFAyX1BSVFlfTUFTS18xCQkJCSAweDEyMDU5OAorLyogW1IgMzJdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIFBYUDJfUkVHX1BYUDJfUFJUWV9TVFNfMAkJCQkgMHgxMjA1N2MKKyNkZWZpbmUgUFhQMl9SRUdfUFhQMl9QUlRZX1NUU18xCQkJCSAweDEyMDU4YwogLyogW1IgMV0gRGVidWcgb25seTogVGhlICdhbG1vc3QgZnVsbCcgaW5kaWNhdGlvbiBmcm9tIGVhY2ggZmlmbyAoZ2l2ZXMKICAgIGluZGljYXRpb24gYWJvdXQgYmFja3ByZXNzdXJlKSAqLwogI2RlZmluZSBQWFAyX1JFR19SRF9BTE1PU1RfRlVMTF8wCQkJCSAweDEyMDQyNApAQCAtMTkxMSw2ICsyMDMzLDggQEAKICNkZWZpbmUgUFhQMl9SRUdfUlFfSENfRU5ESUFOX00gCQkJCSAweDEyMDFhOAogLyogW1dCIDUzXSBPbmNoaXAgYWRkcmVzcyB0YWJsZSAqLwogI2RlZmluZSBQWFAyX1JFR19SUV9PTkNISVBfQVQJCQkJCSAweDEyMjAwMAorLyogW1JXIDEzXSBQZW5kaW5nIHJlYWQgbGltaXRlciB0aHJlc2hvbGQ7IGluIER3b3JkcyAqLworI2RlZmluZSBQWFAyX1JFR19SUV9QRFJfTElNSVQJCQkJCSAweDEyMDMzYwogLyogW1JXIDJdIEVuZGlhbiBtb2RlIGZvciBxbSAqLwogI2RlZmluZSBQWFAyX1JFR19SUV9RTV9FTkRJQU5fTSAJCQkJIDB4MTIwMTk0CiAvKiBbUlcgM10gcGFnZSBzaXplIGluIEwyUCB0YWJsZSBmb3IgUU0gbW9kdWxlOyAtNGs7IC04azsgLTE2azsgLTMyazsgLTY0azsKQEAgLTE5MjEsNiArMjA0NSw5IEBACiAvKiBbUlcgM10gTWF4IGJ1cnN0IHNpemUgZmlsZWQgZm9yIHJlYWQgcmVxdWVzdHMgcG9ydCAwOyAwMDAgLSAxMjhCOwogICAgMDAxOjI1NkI7IDAxMDogNTEyQjsgMTE6MUs6MTAwOjJLOyAwMTo0SyAqLwogI2RlZmluZSBQWFAyX1JFR19SUV9SRF9NQlMwCQkJCQkgMHgxMjAxNjAKKy8qIFtSVyAzXSBNYXggYnVyc3Qgc2l6ZSBmaWxlZCBmb3IgcmVhZCByZXF1ZXN0cyBwb3J0IDE7IDAwMCAtIDEyOEI7CisgICAwMDE6MjU2QjsgMDEwOiA1MTJCOyAxMToxSzoxMDA6Mks7IDAxOjRLICovCisjZGVmaW5lIFBYUDJfUkVHX1JRX1JEX01CUzEJCQkJCSAweDEyMDE2OAogLyogW1JXIDJdIEVuZGlhbiBtb2RlIGZvciBzcmMgKi8KICNkZWZpbmUgUFhQMl9SRUdfUlFfU1JDX0VORElBTl9NCQkJCSAweDEyMDE5YwogLyogW1JXIDNdIHBhZ2Ugc2l6ZSBpbiBMMlAgdGFibGUgZm9yIFNSQyBtb2R1bGU7IC00azsgLThrOyAtMTZrOyAtMzJrOyAtNjRrOwpAQCAtMjAwMCwxMCArMjEyNywxNyBAQAogLyogW1JXIDNdIE1heCBidXJzdCBzaXplIGZpbGVkIGZvciB3cml0ZSByZXF1ZXN0cyBwb3J0IDA7IDAwMCAtIDEyOEI7CiAgICAwMDE6MjU2QjsgMDEwOiA1MTJCOyAqLwogI2RlZmluZSBQWFAyX1JFR19SUV9XUl9NQlMwCQkJCQkgMHgxMjAxNWMKKy8qIFtSVyAzXSBNYXggYnVyc3Qgc2l6ZSBmaWxlZCBmb3Igd3JpdGUgcmVxdWVzdHMgcG9ydCAxOyAwMDAgLSAxMjhCOworICAgMDAxOjI1NkI7IDAxMDogNTEyQjsgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUlFfV1JfTUJTMQkJCQkJIDB4MTIwMTY0CiAvKiBbUlcgMTBdIGlmIE51bWJlciBvZiBlbnRyaWVzIGluIGRtYWUgZmlmbyB3aWxsIGJlIGhpZ2VyIHRoYW4gdGhpcwogICAgdGhyZXNob2xkIHRoZW4gaGFzX3BheWxvYWQgaW5kaWNhdGlvbiB3aWxsIGJlIGFzc2VydGVkOyB0aGUgZGVmYXVsdCB2YWx1ZQogICAgc2hvdWxkIGJlIGVxdWFsIHRvICZndDsgIHdyaXRlIE1CUyBzaXplISAqLwogI2RlZmluZSBQWFAyX1JFR19XUl9ETUFFX1RICQkJCQkgMHgxMjAzNjgKKy8qIFtSVyAxMF0gaWYgTnVtYmVyIG9mIGVudHJpZXMgaW4gdXNkbWRwIGZpZm8gd2lsbCBiZSBoaWdlciB0aGFuIHRoaXMKKyAgIHRocmVzaG9sZCB0aGVuIGhhc19wYXlsb2FkIGluZGljYXRpb24gd2lsbCBiZSBhc3NlcnRlZDsgdGhlIGRlZmF1bHQgdmFsdWUKKyAgIHNob3VsZCBiZSBlcXVhbCB0byAmZ3Q7ICB3cml0ZSBNQlMgc2l6ZSEgKi8KKyNkZWZpbmUgUFhQMl9SRUdfV1JfVVNETURQX1RICQkJCQkgMHgxMjAzNDgKIC8qIFtSIDFdIGRlYnVnIG9ubHk6IEluZGljYXRpb24gaWYgUFNXSFNUIGFyYml0ZXIgaXMgaWRsZSAqLwogI2RlZmluZSBQWFBfUkVHX0hTVF9BUkJfSVNfSURMRSAJCQkJIDB4MTAzMDA0CiAvKiBbUiA4XSBkZWJ1ZyBvbmx5OiBBIGJpdCBtYXNrIGZvciBhbGwgUFNXSFNUIGFyYml0ZXIgY2xpZW50cy4gJzEnIG1lYW5zCkBAIC0yMDIxLDYgKzIxNTUsOCBAQAogI2RlZmluZSBQWFBfUkVHX1BYUF9JTlRfU1RTX0NMUl8wCQkJCSAweDEwMzA2YwogLyogW1JXIDI2XSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFBYUF9SRUdfUFhQX1BSVFlfTUFTSwkJCQkJIDB4MTAzMDk0CisvKiBbUiAyNl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgUFhQX1JFR19QWFBfUFJUWV9TVFMJCQkJCSAweDEwMzA4OAogLyogW1JXIDRdIFRoZSBhY3Rpdml0eSBjb3VudGVyIGluaXRpYWwgaW5jcmVtZW50IHZhbHVlIHNlbnQgaW4gdGhlIGxvYWQKICAgIHJlcXVlc3QgKi8KICNkZWZpbmUgUU1fUkVHX0FDVENUUklOSVRWQUxfMAkJCQkJIDB4MTY4MDQwCkBAIC0yMTI3LDYgKzIyNjMsOCBAQAogI2RlZmluZSBRTV9SRUdfUU1fSU5UX1NUUwkJCQkJIDB4MTY4NDM4CiAvKiBbUlcgOV0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBRTV9SRUdfUU1fUFJUWV9NQVNLCQkJCQkgMHgxNjg0NTQKKy8qIFtSIDldIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIFFNX1JFR19RTV9QUlRZX1NUUwkJCQkJIDB4MTY4NDQ4CiAvKiBbUiAzMl0gQ3VycmVudCBxdWV1ZXMgaW4gcGlwZWxpbmU6IFF1ZXVlcyBmcm9tIDMyIHRvIDYzICovCiAjZGVmaW5lIFFNX1JFR19RU1RBVFVTX0hJR0gJCQkJCSAweDE2ODAyYwogLyogW1IgMzJdIEN1cnJlbnQgcXVldWVzIGluIHBpcGVsaW5lOiBRdWV1ZXMgZnJvbSAwIHRvIDMxICovCkBAIC0yNDEwLDYgKzI1NDgsOCBAQAogI2RlZmluZSBTUkNfUkVHX1NSQ19JTlRfU1RTCQkJCQkgMHg0MDRhYwogLyogW1JXIDNdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgU1JDX1JFR19TUkNfUFJUWV9NQVNLCQkJCQkgMHg0MDRjOAorLyogW1IgM10gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgU1JDX1JFR19TUkNfUFJUWV9TVFMJCQkJCSAweDQwNGJjCiAvKiBbUiA0XSBVc2VkIHRvIHJlYWQgdGhlIHZhbHVlIG9mIHRoZSBYWCBwcm90ZWN0aW9uIENBTSBvY2N1cGFuY3kgY291bnRlci4gKi8KICNkZWZpbmUgVENNX1JFR19DQU1fT0NDVVAJCQkJCSAweDUwMTdjCiAvKiBbUlcgMV0gQ0RVIEFHIHJlYWQgSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSByZXF1ZXN0IGlucHV0IGlzCkBAIC0yNzMwLDYgKzI4NzAsOCBAQAogI2RlZmluZSBUU0RNX1JFR19UU0RNX0lOVF9NQVNLXzEJCQkJIDB4NDIyYWMKIC8qIFtSVyAxMV0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBUU0RNX1JFR19UU0RNX1BSVFlfTUFTSyAJCQkJIDB4NDIyYmMKKy8qIFtSIDExXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBUU0RNX1JFR19UU0RNX1BSVFlfU1RTCQkJCQkgMHg0MjJiMAogLyogW1JXIDVdIFRoZSBudW1iZXIgb2YgdGltZV9zbG90cyBpbiB0aGUgYXJiaXRyYXRpb24gY3ljbGUgKi8KICNkZWZpbmUgVFNFTV9SRUdfQVJCX0NZQ0xFX1NJWkUgCQkJCSAweDE4MDAzNAogLyogW1JXIDNdIFRoZSBzb3VyY2UgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYXJiaXRyYXRpb24gZWxlbWVudCAwLiBTb3VyY2UKQEAgLTI4NTQsNiArMjk5Niw5IEBACiAvKiBbUlcgMzJdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgVFNFTV9SRUdfVFNFTV9QUlRZX01BU0tfMAkJCQkgMHgxODAxMjAKICNkZWZpbmUgVFNFTV9SRUdfVFNFTV9QUlRZX01BU0tfMQkJCQkgMHgxODAxMzAKKy8qIFtSIDMyXSBQYXJpdHkgcmVnaXN0ZXIgIzAgcmVhZCAqLworI2RlZmluZSBUU0VNX1JFR19UU0VNX1BSVFlfU1RTXzAJCQkJIDB4MTgwMTE0CisjZGVmaW5lIFRTRU1fUkVHX1RTRU1fUFJUWV9TVFNfMQkJCQkgMHgxODAxMjQKIC8qIFtSIDVdIFVzZWQgdG8gcmVhZCB0aGUgWFggcHJvdGVjdGlvbiBDQU0gb2NjdXBhbmN5IGNvdW50ZXIuICovCiAjZGVmaW5lIFVDTV9SRUdfQ0FNX09DQ1VQCQkJCQkgMHhlMDE3MAogLyogW1JXIDFdIENEVSBBRyByZWFkIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgcmVxdWVzdCBpbnB1dCBpcwpAQCAtMzE1NSw2ICszMzAwLDggQEAKICNkZWZpbmUgVVNETV9SRUdfVVNETV9JTlRfTUFTS18xCQkJCSAweGM0MmIwCiAvKiBbUlcgMTFdIFBhcml0eSBtYXNrIHJlZ2lzdGVyICMwIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgVVNETV9SRUdfVVNETV9QUlRZX01BU0sgCQkJCSAweGM0MmMwCisvKiBbUiAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgVVNETV9SRUdfVVNETV9QUlRZX1NUUwkJCQkJIDB4YzQyYjQKIC8qIFtSVyA1XSBUaGUgbnVtYmVyIG9mIHRpbWVfc2xvdHMgaW4gdGhlIGFyYml0cmF0aW9uIGN5Y2xlICovCiAjZGVmaW5lIFVTRU1fUkVHX0FSQl9DWUNMRV9TSVpFIAkJCQkgMHgzMDAwMzQKIC8qIFtSVyAzXSBUaGUgc291cmNlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFyYml0cmF0aW9uIGVsZW1lbnQgMC4gU291cmNlCkBAIC0zMjc5LDYgKzM0MjYsOSBAQAogLyogW1JXIDMyXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCiAjZGVmaW5lIFVTRU1fUkVHX1VTRU1fUFJUWV9NQVNLXzAJCQkJIDB4MzAwMTMwCiAjZGVmaW5lIFVTRU1fUkVHX1VTRU1fUFJUWV9NQVNLXzEJCQkJIDB4MzAwMTQwCisvKiBbUiAzMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgVVNFTV9SRUdfVVNFTV9QUlRZX1NUU18wCQkJCSAweDMwMDEyNAorI2RlZmluZSBVU0VNX1JFR19VU0VNX1BSVFlfU1RTXzEJCQkJIDB4MzAwMTM0CiAvKiBbUlcgMl0gVGhlIHF1ZXVlIGluZGV4IGZvciByZWdpc3RyYXRpb24gb24gQXV4MSBjb3VudGVyIGZsYWcuICovCiAjZGVmaW5lIFhDTV9SRUdfQVVYMV9RCQkJCQkJIDB4MjAxMzQKIC8qIFtSVyAyXSBQZXIgZWFjaCBkZWNpc2lvbiBydWxlIHRoZSBxdWV1ZSBpbmRleCB0byByZWdpc3RlciB0by4gKi8KQEAgLTM2ODQsNiArMzgzNCw4IEBACiAjZGVmaW5lIFhTRE1fUkVHX1hTRE1fSU5UX01BU0tfMQkJCQkgMHgxNjYyYWMKIC8qIFtSVyAxMV0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBYU0RNX1JFR19YU0RNX1BSVFlfTUFTSyAJCQkJIDB4MTY2MmJjCisvKiBbUiAxMV0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KKyNkZWZpbmUgWFNETV9SRUdfWFNETV9QUlRZX1NUUwkJCQkJIDB4MTY2MmIwCiAvKiBbUlcgNV0gVGhlIG51bWJlciBvZiB0aW1lX3Nsb3RzIGluIHRoZSBhcmJpdHJhdGlvbiBjeWNsZSAqLwogI2RlZmluZSBYU0VNX1JFR19BUkJfQ1lDTEVfU0laRSAJCQkJIDB4MjgwMDM0CiAvKiBbUlcgM10gVGhlIHNvdXJjZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhcmJpdHJhdGlvbiBlbGVtZW50IDAuIFNvdXJjZQpAQCAtMzgwOCw2ICszOTYwLDkgQEAKIC8qIFtSVyAzMl0gUGFyaXR5IG1hc2sgcmVnaXN0ZXIgIzAgcmVhZC93cml0ZSAqLwogI2RlZmluZSBYU0VNX1JFR19YU0VNX1BSVFlfTUFTS18wCQkJCSAweDI4MDEzMAogI2RlZmluZSBYU0VNX1JFR19YU0VNX1BSVFlfTUFTS18xCQkJCSAweDI4MDE0MAorLyogW1IgMzJdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCisjZGVmaW5lIFhTRU1fUkVHX1hTRU1fUFJUWV9TVFNfMAkJCQkgMHgyODAxMjQKKyNkZWZpbmUgWFNFTV9SRUdfWFNFTV9QUlRZX1NUU18xCQkJCSAweDI4MDEzNAogI2RlZmluZSBNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX0VOCQkJCSAoMUw8PDApCiAjZGVmaW5lIE1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfV1JfRU4JCQkJICgxTDw8MSkKICNkZWZpbmUgTUNQUl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRQkJCQkgKDB4ZmZmZmZmTDw8MCkKQEAgLTM4NDcsNiArNDAwMiw4IEBACiAjZGVmaW5lIEVNQUNfTURJT19DT01NX1NUQVJUX0JVU1kJCQkJICgxTDw8MjkpCiAjZGVmaW5lIEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTAkJCQkgKDFMPDw0KQogI2RlZmluZSBFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUJCQkJICgxTDw8MzEpCisjZGVmaW5lIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVAkJCQkgKDB4M2ZMPDwxNikKKyNkZWZpbmUgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUCQkJIDE2CiAjZGVmaW5lIEVNQUNfTU9ERV8yNUdfTU9ERQkJCQkJICgxTDw8NSkKICNkZWZpbmUgRU1BQ19NT0RFX0FDUElfUkNWRAkJCQkJICgxTDw8MjApCiAjZGVmaW5lIEVNQUNfTU9ERV9IQUxGX0RVUExFWAkJCQkJICgxTDw8MSkKQEAgLTM4NzQsNiArNDAzMSwxNyBAQAogI2RlZmluZSBFTUFDX1JYX01UVV9TSVpFX0pVTUJPX0VOQQkJCQkgKDFMPDwzMSkKICNkZWZpbmUgRU1BQ19UWF9NT0RFX0VYVF9QQVVTRV9FTgkJCQkgKDFMPDwzKQogI2RlZmluZSBFTUFDX1RYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fMQkJCQkJIDEKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18yCQkJCQkgMgorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPXzMJCQkJCSAzCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fQ0xSX1BPUwkJCQkgMTYKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVAkJCQkgKDB4ZmZMPDwyNCkKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MJCQkJIDI0CisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5QVVRfSElfWgkJCQkgMgorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdIIAkJCSAxCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVwkJCQkgMAorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQJCQkJIDQKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19TRVRfUE9TCQkJCSA4CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX0NMRUFSCQkJIDB4NTg4CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18xX1NFVAkJCQkgMHg1ODQKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIJCQkgMHg1OTgKQEAgLTM4OTEsNiArNDA1OSwyNSBAQAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19NSVNDX05JR19NVVhfWEdYUzBfUlNUQl9IVwkgKDB4MTw8NCkKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfTUlTQ19OSUdfTVVYX1hHWFMwX1RYRF9GSUZPX1JTVEIgKDB4MTw8OCkKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzNfU0VUCQkJCSAweDVhNAorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPXzQJCQkJCSA0CisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fNQkJCQkJIDUKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT183CQkJCQkgNworI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPX0NMUl9QT1MJCQkJIDE2CisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVQJCQkJICgweGZmTDw8MjQpCisjZGVmaW5lIEdSQ19NSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUNwkJCQkgMHg4MDAwMDAwMAorI2RlZmluZSBHUkNfTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVDYJCQkJIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1JDX01JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVQ1CQkJCSAweDIwMDAwMDAwCisjZGVmaW5lIEdSQ19NSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUNAkJCQkgMHgxMDAwMDAwMAorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUX1BPUwkJCQkgMjQKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aCQkJCSAyCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5UX09MRF9TRVRfUE9TCQkJIDE2CisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fT1VUUFVUX0hJR0ggCQkJIDEKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19PVVRQVVRfTE9XCQkJCSAwCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fU0VUX1BPUwkJCQkgOAorI2RlZmluZSBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRQkJCQkgMzEKKyNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8JCQkJIDAKKyNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9HUElPCQkJCQkgMQorI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX1NQSU8JCQkJCSAyCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0JSQl9QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxOCkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0NNX0hXX0lOVEVSUlVQVAkJICAgICAgKDE8PDMxKQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19DRFVfSFdfSU5URVJSVVBUCQkgICAgICAoMTw8OSkKQEAgLTM5MTgsNiArNDEwNSw3IEBACiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1FNX0hXX0lOVEVSUlVQVAkJICAgICAgKDE8PDMpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1FNX1BBUklUWV9FUlJPUgkJICAgICAgKDE8PDIpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NFQVJDSEVSX1BBUklUWV9FUlJPUgkgICAgICAoMTw8MjIpCisjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81CQkJICAgICAgKDE8PDE1KQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19UQ01fSFdfSU5URVJSVVBUCQkgICAgICAoMTw8MjcpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1RJTUVSU19IV19JTlRFUlJVUFQJICAgICAgKDE8PDUpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1RTRE1fSFdfSU5URVJSVVBUCQkgICAgICAoMTw8MjUpCkBAIC00MjA2LDYgKzQzOTQsOSBAQAogI2RlZmluZSBNRElPX1hHWFNfQkxPQ0syX1JYX0xOX1NXQVBfRk9SQ0VfRU5BQkxFCTB4NDAwMAogI2RlZmluZSBNRElPX1hHWFNfQkxPQ0syX1RYX0xOX1NXQVAJCQkweDExCiAjZGVmaW5lIE1ESU9fWEdYU19CTE9DSzJfVFhfTE5fU1dBUF9FTkFCTEUJCTB4ODAwMAorI2RlZmluZSBNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEcJCTB4MTQKKyNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9VTklDT1JFX01PREVfMTBHX0NYNF9YR1hTCTB4MDAwMQorI2RlZmluZSBNRElPX1hHWFNfQkxPQ0syX1VOSUNPUkVfTU9ERV8xMEdfSElHSUdfWEdYUwkweDAwMTAKICNkZWZpbmUgTURJT19YR1hTX0JMT0NLMl9URVNUX01PREVfTEFORSAJCTB4MTUKIAogI2RlZmluZSBNRElPX1JFR19CQU5LX0dQX1NUQVRVUyAJCQkweDgxMjAKQEAgLTQzNjIsMTEgKzQ1NTMsMTMgQEAKICNkZWZpbmUgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19MSU5LX1BBUlRORVJfQUJJTElUWTFfU0dNSUlfTU9ERSAgIDB4MDAwMQogCiAKKyNkZWZpbmUgRVhUX1BIWV9BVVRPX05FR19ERVZBRAkJCQkweDcKICNkZWZpbmUgRVhUX1BIWV9PUFRfUE1BX1BNRF9ERVZBRAkJCTB4MQogI2RlZmluZSBFWFRfUEhZX09QVF9XSVNfREVWQUQJCQkJMHgyCiAjZGVmaW5lIEVYVF9QSFlfT1BUX1BDU19ERVZBRAkJCQkweDMKICNkZWZpbmUgRVhUX1BIWV9PUFRfUEhZX1hTX0RFVkFECQkJMHg0CiAjZGVmaW5lIEVYVF9QSFlfT1BUX0NOVEwJCQkJMHgwCisjZGVmaW5lIEVYVF9QSFlfT1BUX0NOVEwyCQkJCTB4NwogI2RlZmluZSBFWFRfUEhZX09QVF9QTURfUlhfU0QJCQkJMHhhCiAjZGVmaW5lIEVYVF9QSFlfT1BUX1BNRF9NSVNDX0NOVEwJCQkweGNhMGEKICNkZWZpbmUgRVhUX1BIWV9PUFRfUEhZX0lERU5USUZJRVIJCQkweGM4MDAKQEAgLTQzNzgsMTEgKzQ1NzEsMjQgQEAKICNkZWZpbmUgRVhUX1BIWV9PUFRfTEFTSV9TVEFUVVMgCQkJMHg5MDA1CiAjZGVmaW5lIEVYVF9QSFlfT1BUX1BDU19TVEFUVVMJCQkJMHgwMDIwCiAjZGVmaW5lIEVYVF9QSFlfT1BUX1hHWFNfTEFORV9TVEFUVVMJCQkweDAwMTgKKyNkZWZpbmUgRVhUX1BIWV9PUFRfQU5fTElOS19TVEFUVVMJCQkweDgzMDQKKyNkZWZpbmUgRVhUX1BIWV9PUFRfQU5fQ0wzN19DTDczCQkJMHg4MzcwCisjZGVmaW5lIEVYVF9QSFlfT1BUX0FOX0NMMzdfRkQJCQkJMHhmZmU0CisjZGVmaW5lIEVYVF9QSFlfT1BUX0FOX0NMMzdfQU4JCQkJMHhmZmUwCisjZGVmaW5lIEVYVF9QSFlfT1BUX0FOX0FEVgkJCQkweDExCiAKICNkZWZpbmUgRVhUX1BIWV9LUl9QTUFfUE1EX0RFVkFECQkJMHgxCiAjZGVmaW5lIEVYVF9QSFlfS1JfUENTX0RFVkFECQkJCTB4MwogI2RlZmluZSBFWFRfUEhZX0tSX0FVVE9fTkVHX0RFVkFECQkJMHg3CiAjZGVmaW5lIEVYVF9QSFlfS1JfQ1RSTCAJCQkJMHgwMDAwCisjZGVmaW5lIEVYVF9QSFlfS1JfU1RBVFVTCQkJCTB4MDAwMQorI2RlZmluZSBFWFRfUEhZX0tSX0FVVE9fTkVHX0NPTVBMRVRFCQkgICAgCTB4MDAyMAorI2RlZmluZSBFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVAkJCTB4MDAxMAorI2RlZmluZSBFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVF9QQVVTRQkgICAgCTB4MDQwMAorI2RlZmluZSBFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVF9QQVVTRV9BU1lNTUVUUklDIAkweDA4MDAKKyNkZWZpbmUgRVhUX1BIWV9LUl9BVVRPX05FR19BRFZFUlRfUEFVU0VfQk9USAkgICAgCTB4MEMwMAorI2RlZmluZSBFWFRfUEhZX0tSX0FVVE9fTkVHX0FEVkVSVF9QQVVTRV9NQVNLCSAgICAJMHgwQzAwCisjZGVmaW5lIEVYVF9QSFlfS1JfTFBfQVVUT19ORUcJCQkJMHgwMDEzCiAjZGVmaW5lIEVYVF9QSFlfS1JfQ1RSTDIJCQkJMHgwMDA3CiAjZGVmaW5lIEVYVF9QSFlfS1JfUENTX1NUQVRVUwkJCQkweDAwMjAKICNkZWZpbmUgRVhUX1BIWV9LUl9QTURfQ1RSTAkJCQkweDAwOTYKQEAgLTQzOTEsNCArNDU5Nyw4IEBACiAjZGVmaW5lIEVYVF9QSFlfS1JfTUlTQ19DVFJMMQkJCQkweGNhODUKICNkZWZpbmUgRVhUX1BIWV9LUl9HRU5fQ1RSTAkJCQkweGNhMTAKICNkZWZpbmUgRVhUX1BIWV9LUl9ST01fQ09ERQkJCQkweGNhMTkKKyNkZWZpbmUgRVhUX1BIWV9LUl9ST01fUkVTRVRfSU5URVJOQUxfTVAJCTB4MDE4OAorI2RlZmluZSBFWFRfUEhZX0tSX1JPTV9NSUNST19SRVNFVAkJCTB4MDE4YQorCisjZGVmaW5lIEVYVF9QSFlfU0ZYNzEwMV9YR1hTX1RFU1QxCSAgICAweGMwMGEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCmluZGV4IGNiM2M2ZmEuLmViYjUzOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19nZXRfcnhfbWFjaGluZV9sb2NrKHN0cnVjdCBwb3J0ICpwb3J0KQogewotCXNwaW5fbG9jaygmKFNMQVZFX0FEX0lORk8ocG9ydC0+c2xhdmUpLnJ4X21hY2hpbmVfbG9jaykpOworCXNwaW5fbG9ja19iaCgmKFNMQVZFX0FEX0lORk8ocG9ydC0+c2xhdmUpLnJ4X21hY2hpbmVfbG9jaykpOwogfQogCiAvKioKQEAgLTMyMCw3ICszMjAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZWxlYXNlX3J4X21hY2hpbmVfbG9jayhzdHJ1Y3QgcG9ydCAqcG9ydCkKIHsKLQlzcGluX3VubG9jaygmKFNMQVZFX0FEX0lORk8ocG9ydC0+c2xhdmUpLnJ4X21hY2hpbmVfbG9jaykpOworCXNwaW5fdW5sb2NrX2JoKCYoU0xBVkVfQURfSU5GTyhwb3J0LT5zbGF2ZSkucnhfbWFjaGluZV9sb2NrKSk7CiB9CiAKIC8qKgpAQCAtMjQyOSw3ICsyNDI5LDcgQEAKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlID0gTlVMTDsKIAlpbnQgcmV0ID0gTkVUX1JYX0RST1A7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlnb3RvIG91dDsKIAogCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfTUFTVEVSKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCBiNTdiYzk0Li41YTY3MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAlzdHJ1Y3QgYXJwX3BrdCAqYXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiLT5kYXRhOwogCWludCByZXMgPSBORVRfUlhfRFJPUDsKIAotCWlmIChib25kX2Rldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChib25kX2RldikgIT0gJmluaXRfbmV0KQogCQlnb3RvIG91dDsKIAogCWlmICghKGJvbmRfZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQpAQCAtNjc4LDEyICs2NzgsOCBAQAogCQl9CiAKIAkJaWYgKCFsaXN0X2VtcHR5KCZib25kLT52bGFuX2xpc3QpKSB7Ci0JCQl1bnNpZ25lZCBzaG9ydCB2bGFuX2lkOwotCQkJaW50IHJlcyA9IHZsYW5fZ2V0X3RhZyhza2IsICZ2bGFuX2lkKTsKLQkJCWlmICghcmVzKSB7CisJCQlpZiAoIXZsYW5fZ2V0X3RhZyhza2IsICZjbGllbnRfaW5mby0+dmxhbl9pZCkpCiAJCQkJY2xpZW50X2luZm8tPnRhZyA9IDE7Ci0JCQkJY2xpZW50X2luZm8tPnZsYW5faWQgPSB2bGFuX2lkOwotCQkJfQogCQl9CiAKIAkJaWYgKCFjbGllbnRfaW5mby0+YXNzaWduZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDA5NDJkODIuLjZlOTFiNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMzgzLDcgKzM4Myw3IEBACiAgKi8KIGludCBib25kX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KQogewotCXVuc2lnbmVkIHNob3J0IHZsYW5faWQ7CisJdW5zaWduZWQgc2hvcnQgdW5pbml0aWFsaXplZF92YXIodmxhbl9pZCk7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmJvbmQtPnZsYW5fbGlzdCkgJiYKIAkgICAgIShzbGF2ZV9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKSAmJgpAQCAtMjYyOSw3ICsyNjI5LDcgQEAKIAl1bnNpZ25lZCBjaGFyICphcnBfcHRyOwogCV9fYmUzMiBzaXAsIHRpcDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCEoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JPTkRJTkcpIHx8ICEoZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQpAQCAtMjY0NiwxMCArMjY0Niw3IEBACiAJaWYgKCFzbGF2ZSB8fCAhc2xhdmVfZG9fYXJwX3ZhbGlkYXRlKGJvbmQsIHNsYXZlKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JLyogQVJQIGhlYWRlciwgcGx1cyAyIGRldmljZSBhZGRyZXNzZXMsIHBsdXMgMiBJUCBhZGRyZXNzZXMuICAqLwotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIChzaXplb2Yoc3RydWN0IGFycGhkcikgKwotCQkJCSAoMiAqIGRldi0+YWRkcl9sZW4pICsKLQkJCQkgKDIgKiBzaXplb2YodTMyKSkpKSkKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihkZXYpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJYXJwID0gYXJwX2hkcihza2IpOwpAQCAtMzA2OCw4ICszMDY1LDYgQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKLSNkZWZpbmUgU0VRX1NUQVJUX1RPS0VOICgodm9pZCAqKTEpCi0KIHN0YXRpYyB2b2lkICpib25kX2luZm9fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHNlcS0+cHJpdmF0ZTsKQEAgLTM0NzMsNyArMzQ2OCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmV2ZW50X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAotCWlmIChldmVudF9kZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZXZlbnRfZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWRwcmludGsoImV2ZW50X2RldjogJXMsIGV2ZW50OiAlbHhcbiIsCkBAIC0zNTExLDYgKzM1MDYsOSBAQAogCXN0cnVjdCBib25kaW5nICpib25kLCAqYm9uZF9uZXh0OwogCXN0cnVjdCB2bGFuX2VudHJ5ICp2bGFuLCAqdmxhbl9uZXh0OwogCisJaWYgKGRldl9uZXQoaWZhLT5pZmFfZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvbmQsIGJvbmRfbmV4dCwgJmJvbmRfZGV2X2xpc3QsIGJvbmRfbGlzdCkgewogCQlpZiAoYm9uZC0+ZGV2ID09IGV2ZW50X2RldikgewogCQkJc3dpdGNoIChldmVudCkgewpAQCAtNDUyOCw4ICs0NTI2LDcgQEAKIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGJvbmRfZGV2KTsKIAkJLyogUmVsZWFzZSB0aGUgYm9uZGVkIHNsYXZlcyAqLwogCQlib25kX3JlbGVhc2VfYWxsKGJvbmRfZGV2KTsKLQkJYm9uZF9kZWluaXQoYm9uZF9kZXYpOwotCQl1bnJlZ2lzdGVyX25ldGRldmljZShib25kX2Rldik7CisJCWJvbmRfZGVzdHJveShib25kKTsKIAl9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwppbmRleCA5MGExZjMxLi45NzljMmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwpAQCAtMzQxLDYgKzM0MSw3IEBACiAKIAlpZiAoY29tbWFuZFswXSA9PSAnLScpIHsKIAkJZGV2ID0gTlVMTDsKKwkJb3JpZ2luYWxfbXR1ID0gMDsKIAkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkKIAkJCWlmIChzdHJuaWNtcChzbGF2ZS0+ZGV2LT5uYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7CiAJCQkJZGV2ID0gc2xhdmUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggNjdjY2FkNi4uYTNjNzRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJib25kXzNhZC5oIgogI2luY2x1ZGUgImJvbmRfYWxiLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjMuMi40IgotI2RlZmluZSBEUlZfUkVMREFURQkiSmFudWFyeSAyOCwgMjAwOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjMuMi41IgorI2RlZmluZSBEUlZfUkVMREFURQkiTWFyY2ggMjEsIDIwMDgiCiAjZGVmaW5lIERSVl9OQU1FCSJib25kaW5nIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkV0aGVybmV0IENoYW5uZWwgQm9uZGluZyBEcml2ZXIiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCAxNDI5OWY4Li45M2UxMzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC01MzIsOCArNTMyLDcgQEAKIAkvKiBmcmVlIHNwYXJlIGJ1ZmZlcnMgKi8KIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJc3Bpbl9sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7Ci0JbGlzdF9zcGxpY2UoJmNwLT5yeF9zcGFyZV9saXN0LCAmbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNwLT5yeF9zcGFyZV9saXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZjcC0+cnhfc3BhcmVfbGlzdCwgJmxpc3QpOwogCXNwaW5fdW5sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVsZW0sIHRtcCwgJmxpc3QpIHsKIAkJY2FzX3BhZ2VfZnJlZShjcCwgbGlzdF9lbnRyeShlbGVtLCBjYXNfcGFnZV90LCBsaXN0KSk7CkBAIC01NDYsMTMgKzU0NSwxMSBAQAogCSAqIGxvY2sgdGhhbiB1c2VkIGV2ZXJ5d2hlcmUgZWxzZSB0byBtYW5pcHVsYXRlIHRoaXMgbGlzdC4KIAkgKi8KIAlzcGluX2xvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKLQlsaXN0X3NwbGljZSgmY3AtPnJ4X2ludXNlX2xpc3QsICZsaXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmY3AtPnJ4X2ludXNlX2xpc3QpOworCWxpc3Rfc3BsaWNlX2luaXQoJmNwLT5yeF9pbnVzZV9saXN0LCAmbGlzdCk7CiAJc3Bpbl91bmxvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKICNlbHNlCiAJc3Bpbl9sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7Ci0JbGlzdF9zcGxpY2UoJmNwLT5yeF9pbnVzZV9saXN0LCAmbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNwLT5yeF9pbnVzZV9saXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZjcC0+cnhfaW51c2VfbGlzdCwgJmxpc3QpOwogCXNwaW5fdW5sb2NrKCZjcC0+cnhfc3BhcmVfbG9jayk7CiAjZW5kaWYKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZWxlbSwgdG1wLCAmbGlzdCkgewpAQCAtNTczLDggKzU3MCw3IEBACiAJLyogbWFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGxpc3QgKi8KIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJc3Bpbl9sb2NrKCZjcC0+cnhfaW51c2VfbG9jayk7Ci0JbGlzdF9zcGxpY2UoJmNwLT5yeF9pbnVzZV9saXN0LCAmbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNwLT5yeF9pbnVzZV9saXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZjcC0+cnhfaW51c2VfbGlzdCwgJmxpc3QpOwogCXNwaW5fdW5sb2NrKCZjcC0+cnhfaW51c2VfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZWxlbSwgdG1wLCAmbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3BtYWMuYyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKaW5kZXggYzg1MTk0Zi4uOWRhN2ZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3BtYWMuYworKysgYi9kcml2ZXJzL25ldC9jcG1hYy5jCkBAIC05ODcsNyArOTg3LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNwbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJjLCBwaHlfaWQsIGk7Ci0JaW50IG1kaW9fYnVzX2lkID0gY3BtYWNfbWlpLmlkOworCWNoYXIgKm1kaW9fYnVzX2lkID0gIjAiOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtOwogCXN0cnVjdCBjcG1hY19wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMDA4LDggKzEwMDgsNiBAQAogCQlpZiAoZXh0ZXJuYWxfc3dpdGNoIHx8IGR1bWJfc3dpdGNoKSB7CiAJCQlzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBzdGF0dXMgPSB7fTsKIAotCQkJbWRpb19idXNfaWQgPSAwOwotCiAJCQkvKgogCQkJICogRklYTUU6IHRoaXMgc2hvdWxkIGJlIGluIHRoZSBwbGF0Zm9ybSBjb2RlIQogCQkJICogU2luY2UgdGhlcmUgaXMgbm90IHBsYXRmb3JtIGNvZGUgYXQgYWxsICh0aGF0IGlzLApAQCAtMTE0Myw2ICsxMTQxLDcgQEAKIAl9CiAKIAljcG1hY19taWkucGh5X21hc2sgPSB+KG1hc2sgfCAweDgwMDAwMDAwKTsKKwlzbnByaW50ZihjcG1hY19taWkuaWQsIE1JSV9CVVNfSURfU0laRSwgIjAiKTsKIAogCXJlcyA9IG1kaW9idXNfcmVnaXN0ZXIoJmNwbWFjX21paSk7CiAJaWYgKHJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NzODl4MC5jIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKaW5kZXggNTcxNzUwOTcuLjM0ODM3MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCkBAIC0xNzIsMzAgKzE3MiwzMCBAQAogICAgdGhlbSB0byBzeXN0ZW0gSVJRIG51bWJlcnMuIFRoaXMgbWFwcGluZyBpcyBjYXJkIHNwZWNpZmljIGFuZCBpcyBzZXQgdG8KICAgIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBDaXJydXMgRXZhbCBib2FyZCBmb3IgdGhpcyBjaGlwLiAqLwogI2lmZGVmIENPTkZJR19BUkNIX0NMUFM3NTAwCi1zdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX2luaXRkYXRhID0KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9fdXNlZCBfX2luaXRkYXRhID0KICAgIHsgMHg4MDA5MDMwMywgMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjAsIDB4MjAwLCAweDIyMCwgMHgyNDAsIDB4MjYwLCAweDI4MCwgMHgyYTAsIDB4MmMwLCAweDJlMCwgMH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGNzODkwMF9pcnFfbWFwW10gPSB7MTIsMCwwLDB9OwogI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfSElDT1NINCkKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9faW5pdGRhdGEgPQorc3RhdGljIHVuc2lnbmVkIGludCBuZXRjYXJkX3BvcnRsaXN0W10gX191c2VkIF9faW5pdGRhdGEgPQogICAgeyAweDAzMDAsIDB9Owogc3RhdGljIHVuc2lnbmVkIGludCBjczg5MDBfaXJxX21hcFtdID0gezEsMCwwLDB9OwogI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9JWERQMjM1MSkKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9faW5pdGRhdGEgPSB7SVhEUDIzNTFfVklSVF9DUzg5MDBfQkFTRSwgMH07CitzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9IHtJWERQMjM1MV9WSVJUX0NTODkwMF9CQVNFLCAwfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3M4OTAwX2lycV9tYXBbXSA9IHtJUlFfSVhEUDIzNTFfQ1M4OTAwLCAwLCAwLCAwfTsKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lYRFAyWDAxKQogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9faW5pdGRhdGEgPSB7SVhEUDJYMDFfQ1M4OTAwX1ZJUlRfQkFTRSwgMH07CitzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9IHtJWERQMlgwMV9DUzg5MDBfVklSVF9CQVNFLCAwfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3M4OTAwX2lycV9tYXBbXSA9IHtJUlFfSVhEUDJYMDFfQ1M4OTAwLCAwLCAwLCAwfTsKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUE5YMDEwWCkKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2RlZmluZSBDSVJSVVNfREVGQVVMVF9CQVNFCUlPX0FERFJFU1MoRVhUX1NUQVRJQzJfczBfQkFTRSArIDB4MjAwMDAwKQkvKiA9IFBoeXNpY2FsIGFkZHJlc3MgMHg0ODIwMDAwMCAqLwogI2RlZmluZSBDSVJSVVNfREVGQVVMVF9JUlEJVkhfSU5UQ19JTlRfTlVNX0NBU0NBREVEX0lOVEVSUlVQVF8xIC8qIEV2ZW50IGlucHV0cyBiYW5rIDEgLSBJRCAzNS9iaXQgMyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBuZXRjYXJkX3BvcnRsaXN0W10gX19pbml0ZGF0YSA9IHtDSVJSVVNfREVGQVVMVF9CQVNFLCAwfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9fdXNlZCBfX2luaXRkYXRhID0ge0NJUlJVU19ERUZBVUxUX0JBU0UsIDB9Owogc3RhdGljIHVuc2lnbmVkIGludCBjczg5MDBfaXJxX21hcFtdID0ge0NJUlJVU19ERUZBVUxUX0lSUSwgMCwgMCwgMH07CiAjZWxzZQotc3RhdGljIHVuc2lnbmVkIGludCBuZXRjYXJkX3BvcnRsaXN0W10gX19pbml0ZGF0YSA9CitzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9CiAgICB7IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwLCAweDIwMCwgMHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODAsIDB4MmEwLCAweDJjMCwgMHgyZTAsIDB9Owogc3RhdGljIHVuc2lnbmVkIGludCBjczg5MDBfaXJxX21hcFtdID0gezEwLDExLDEyLDV9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggZWIzMDVhMC4uNGZkYjEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSAidDNjZGV2LmgiCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdHJ1Y3Qgdmxhbl9ncm91cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCBmZDJlMDViLi4wNWU1ZjU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtMTAxNCw4ICsxMDE0LDggQEAKIAkJICAgICBhZGFwdGVyLT5wb3J0WzBdLT5tdHUgOiAweGZmZmYpOwogCWluaXRfc210KGFkYXB0ZXIpOwogCi0JLyogTmV2ZXIgbWluZCBpZiB0aGUgbmV4dCBzdGVwIGZhaWxzICovCi0Jc3lzZnNfY3JlYXRlX2dyb3VwKCZ0ZGV2LT5sbGRldi0+ZGV2LmtvYmosICZvZmZsb2FkX2F0dHJfZ3JvdXApOworCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnRkZXYtPmxsZGV2LT5kZXYua29iaiwgJm9mZmxvYWRfYXR0cl9ncm91cCkpCisJCWRldl9kYmcoJmRldi0+ZGV2LCAiY2Fubm90IGNyZWF0ZSBzeXNmcyBncm91cFxuIik7CiAKIAkvKiBDYWxsIGJhY2sgYWxsIHJlZ2lzdGVyZWQgY2xpZW50cyAqLwogCWN4Z2IzX2FkZF9jbGllbnRzKHRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCmluZGV4IDkwMWM4MjQuLmZmOWMwMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKQEAgLTgzMywxMCArODMzLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGF0IHNrYiB3b3VsZCBiZXR0ZXIgaGF2ZSBjb21lIGZyb20gcHJvY2Vzc19yZXNwb25zZXMoKSB3aGVyZSB3ZSBhYnVzZQorICogLT5wcmlvcml0eSBhbmQgLT5jc3VtIHRvIGNhcnJ5IG91ciBkYXRhLiAgTkI6IGlmIHdlIGdldCB0byBwZXItYXJjaAorICogLT5jc3VtLCB0aGUgdGhpbmdzIG1pZ2h0IGdldCByZWFsbHkgaW50ZXJlc3RpbmcgaGVyZS4KKyAqLworCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfaHd0aWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gbnRvaGwoKF9fZm9yY2UgX19iZTMyKXNrYi0+cHJpb3JpdHkpID4+IDggJiAweGZmZmZmOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfb3Bjb2RlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIEdfT1BDT0RFKG50b2hsKChfX2ZvcmNlIF9fYmUzMilza2ItPmNzdW0pKTsKK30KKwogc3RhdGljIGludCBkb190ZXJtKHN0cnVjdCB0M2NkZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1bnNpZ25lZCBpbnQgaHd0aWQgPSBudG9obChza2ItPnByaW9yaXR5KSA+PiA4ICYgMHhmZmZmZjsKLQl1bnNpZ25lZCBpbnQgb3Bjb2RlID0gR19PUENPREUobnRvaGwoc2tiLT5jc3VtKSk7CisJdW5zaWduZWQgaW50IGh3dGlkID0gZ2V0X2h3dGlkKHNrYik7CisJdW5zaWduZWQgaW50IG9wY29kZSA9IGdldF9vcGNvZGUoc2tiKTsKIAlzdHJ1Y3QgdDNjX3RpZF9lbnRyeSAqdDNjX3RpZDsKIAogCXQzY190aWQgPSBsb29rdXBfdGlkKCYoVDNDX0RBVEEoZGV2KSktPnRpZF9tYXBzLCBod3RpZCk7CkBAIC05MTQsNyArOTMwLDcgQEAKIHsKIAl3aGlsZSAobi0tKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSAqc2ticysrOwotCQl1bnNpZ25lZCBpbnQgb3Bjb2RlID0gR19PUENPREUobnRvaGwoc2tiLT5jc3VtKSk7CisJCXVuc2lnbmVkIGludCBvcGNvZGUgPSBnZXRfb3Bjb2RlKHNrYik7CiAJCWludCByZXQgPSBjcGxfaGFuZGxlcnNbb3Bjb2RlXSAoZGV2LCBza2IpOwogCiAjaWYgVkFMSURBVEVfVElECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5jCmluZGV4IDg2NWZhZWUuLmY1MTAxNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5jCkBAIC00MDcsNyArNDA3LDcgQEAKIAkJCX0gZWxzZSBpZiAobmVpZ2gtPm51ZF9zdGF0ZSAmIChOVURfQ09OTkVDVEVEfE5VRF9TVEFMRSkpCiAJCQkJc2V0dXBfbDJlX3NlbmRfcGVuZGluZyhkZXYsIE5VTEwsIGUpOwogCQl9IGVsc2UgewotCQkJZS0+c3RhdGUgPSBuZWlnaF9pc19jb25uZWN0ZWQobmVpZ2gpID8KKwkJCWUtPnN0YXRlID0gbmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9DT05ORUNURUQgPwogCQkJICAgIEwyVF9TVEFURV9WQUxJRCA6IEwyVF9TVEFURV9TVEFMRTsKIAkJCWlmIChtZW1jbXAoZS0+ZG1hYywgbmVpZ2gtPmhhLCA2KSkKIAkJCQlzZXR1cF9sMmVfc2VuZF9wZW5kaW5nKGRldiwgTlVMTCwgZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IDk3OWYzZmMuLjk4YTZiYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC01NTcsOSArNTU3LDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBTR0VfUlhRX1BFUl9TRVQ7ICsraSkKIAkJaWYgKHEtPmZsW2ldLmRlc2MpIHsKLQkJCXNwaW5fbG9jaygmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKKwkJCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CiAJCQl0M19zZ2VfZGlzYWJsZV9mbChhZGFwdGVyLCBxLT5mbFtpXS5jbnR4dF9pZCk7Ci0JCQlzcGluX3VubG9jaygmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKIAkJCWZyZWVfcnhfYnVmcyhwZGV2LCAmcS0+ZmxbaV0pOwogCQkJa2ZyZWUocS0+ZmxbaV0uc2Rlc2MpOwogCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwKQEAgLTU3MCw5ICs1NzAsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IFNHRV9UWFFfUEVSX1NFVDsgKytpKQogCQlpZiAocS0+dHhxW2ldLmRlc2MpIHsKLQkJCXNwaW5fbG9jaygmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKKwkJCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CiAJCQl0M19zZ2VfZW5hYmxlX2VjbnR4dChhZGFwdGVyLCBxLT50eHFbaV0uY250eHRfaWQsIDApOwotCQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CisJCQlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CiAJCQlpZiAocS0+dHhxW2ldLnNkZXNjKSB7CiAJCQkJZnJlZV90eF9kZXNjKGFkYXB0ZXIsICZxLT50eHFbaV0sCiAJCQkJCSAgICAgcS0+dHhxW2ldLmluX3VzZSk7CkBAIC01ODYsOSArNTg2LDkgQEAKIAkJfQogCiAJaWYgKHEtPnJzcHEuZGVzYykgewotCQlzcGluX2xvY2soJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CiAJCXQzX3NnZV9kaXNhYmxlX3JzcGNudHh0KGFkYXB0ZXIsIHEtPnJzcHEuY250eHRfaWQpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZhZGFwdGVyLT5zZ2UucmVnX2xvY2spOwogCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LAogCQkJCSAgcS0+cnNwcS5zaXplICogc2l6ZW9mKHN0cnVjdCByc3BfZGVzYyksCiAJCQkJICBxLT5yc3BxLmRlc2MsIHEtPnJzcHEucGh5c19hZGRyKTsKQEAgLTExMDcsOSArMTEwNywxNSBAQAogCX0KIAogCXEtPmluX3VzZSArPSBuZGVzYzsKLQlpZiAodW5saWtlbHkoY3JlZGl0cyAtIG5kZXNjIDwgcS0+c3RvcF90aHJlcykpCi0JCWlmIChVU0VfR1RTIHx8ICFzaG91bGRfcmVzdGFydF90eChxKSkKLQkJCXQzX3N0b3BfcXVldWUoZGV2LCBxcywgcSk7CisJaWYgKHVubGlrZWx5KGNyZWRpdHMgLSBuZGVzYyA8IHEtPnN0b3BfdGhyZXMpKSB7CisJCXQzX3N0b3BfcXVldWUoZGV2LCBxcywgcSk7CisKKwkJaWYgKHNob3VsZF9yZXN0YXJ0X3R4KHEpICYmCisJCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoVFhRX0VUSCwgJnFzLT50eHFfc3RvcHBlZCkpIHsKKwkJCXEtPnJlc3RhcnRzKys7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCX0KKwl9CiAKIAlnZW4gPSBxLT5nZW47CiAJcS0+dW5hY2tlZCArPSBuZGVzYzsKQEAgLTI2NjEsNyArMjY2Nyw3IEBACiAJCSgxNiAqIDEwMjQpIC0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSA6CiAJCU1BWF9GUkFNRV9TSVpFICsgMiArIHNpemVvZihzdHJ1Y3QgY3BsX3J4X3BrdCk7CiAKLQlzcGluX2xvY2soJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKIAogCS8qIEZMIHRocmVzaG9sZCBjb21wYXJpc29uIHVzZXMgPCAqLwogCXJldCA9IHQzX3NnZV9pbml0X3JzcGNudHh0KGFkYXB0ZXIsIHEtPnJzcHEuY250eHRfaWQsIGlycV92ZWNfaWR4LApAQCAtMjcwNSw3ICsyNzExLDcgQEAKIAkJCWdvdG8gZXJyX3VubG9jazsKIAl9CiAKLQlzcGluX3VubG9jaygmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPnNnZS5yZWdfbG9jayk7CiAKIAlxLT5hZGFwID0gYWRhcHRlcjsKIAlxLT5uZXRkZXYgPSBkZXY7CkBAIC0yNzIyLDcgKzI3MjgsNyBAQAogCXJldHVybiAwOwogCiAgICAgICBlcnJfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5zZ2UucmVnX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKICAgICAgIGVycjoKIAl0M19mcmVlX3FzZXQoYWRhcHRlciwgcSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNjZGV2LmgKaW5kZXggNzdmY2MxYS4uYTE4YzhhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNjZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNjZGV2LmgKQEAgLTM0LDcgKzM0LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlZnh4LmMgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCmluZGV4IGRkYzMwYzQuLmMwNjJhYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlZnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZGVmeHguYwpAQCAtOTcxLDcgKzk3MSw4IEBACiAJaW50IGFsbG9jX3NpemU7CQkJLyogdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkICovCiAJY2hhciAqdG9wX3YsICpjdXJyX3Y7CQkvKiB2aXJ0dWFsIGFkZHJzIGludG8gbWVtb3J5IGJsb2NrICovCiAJZG1hX2FkZHJfdCB0b3BfcCwgY3Vycl9wOwkvKiBwaHlzaWNhbCBhZGRycyBpbnRvIG1lbW9yeSBibG9jayAqLwotCXUzMiBkYXRhLCBsZTMyOwkJCS8qIGhvc3QgZGF0YSByZWdpc3RlciB2YWx1ZSAqLworCXUzMiBkYXRhOwkJCS8qIGhvc3QgZGF0YSByZWdpc3RlciB2YWx1ZSAqLworCV9fbGUzMiBsZTMyOwogCWNoYXIgKmJvYXJkX25hbWUgPSBOVUxMOwogCiAJREJHX3ByaW50aygiSW4gZGZ4X2RyaXZlcl9pbml0Li4uXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggMWZlMzA1Yy4uZDYzY2M5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTc5OCw4ICs3OTgsNiBAQAogCS8qIFNldCBhZGRyZXNzIGZpbHRlciB0YWJsZSAqLwogCWRtOTAwMF9oYXNoX3RhYmxlKGRldik7CiAKLQkvKiBBY3RpdmF0ZSBETTkwMDAgKi8KLQlpb3coZGIsIERNOTAwMF9SQ1IsIFJDUl9ESVNfTE9ORyB8IFJDUl9ESVNfQ1JDIHwgUkNSX1JYRU4pOwogCS8qIEVuYWJsZSBUWC9SWCBpbnRlcnJ1cHQgbWFzayAqLwogCWlvdyhkYiwgRE05MDAwX0lNUiwgSU1SX1BBUiB8IElNUl9QVE0gfCBJTVJfUFJNKTsKIApAQCAtOTcwLDcgKzk2OCw3IEBACiBzdHJ1Y3QgZG05MDAwX3J4aGRyIHsKIAl1OAlSeFBrdFJlYWR5OwogCXU4CVJ4U3RhdHVzOwotCXUxNglSeExlbjsKKwlfX2xlMTYJUnhMZW47CiB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKIAogLyoKQEAgLTExOTcsNiArMTE5NSw3IEBACiAJaW50IGksIG9mdDsKIAl1MzIgaGFzaF92YWw7CiAJdTE2IGhhc2hfdGFibGVbNF07CisJdTggcmNyID0gUkNSX0RJU19MT05HIHwgUkNSX0RJU19DUkMgfCBSQ1JfUlhFTjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZG05MDAwX2RiZyhkYiwgMSwgImVudGVyaW5nICVzXG4iLCBfX2Z1bmNfXyk7CkBAIC0xMjEzLDYgKzEyMTIsMTIgQEAKIAkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwogCWhhc2hfdGFibGVbM10gPSAweDgwMDA7CiAKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQlyY3IgfD0gUkNSX1BSTVNDOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCXJjciB8PSBSQ1JfQUxMOworCiAJLyogdGhlIG11bHRpY2FzdCBhZGRyZXNzIGluIEhhc2ggVGFibGUgOiA2NCBiaXRzICovCiAJZm9yIChpID0gMDsgaSA8IG1jX2NudDsgaSsrLCBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7CiAJCWhhc2hfdmFsID0gZXRoZXJfY3JjX2xlKDYsIG1jcHRyLT5kbWlfYWRkcikgJiAweDNmOwpAQCAtMTIyNSw2ICsxMjMwLDcgQEAKIAkJaW93KGRiLCBvZnQrKywgaGFzaF90YWJsZVtpXSA+PiA4KTsKIAl9CiAKKwlpb3coZGIsIERNOTAwMF9SQ1IsIHJjcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IDM2YmE2ZGMuLjJkMTM5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTk2MCw3ICs5NjAsNyBAQAogCiAJLyogVGVtcGxhdGUgZm9yIGEgZnJlc2hseSBhbGxvY2F0ZWQgUkZEICovCiAJbmljLT5ibGFua19yZmQuY29tbWFuZCA9IDA7Ci0JbmljLT5ibGFua19yZmQucmJkID0gMHhGRkZGRkZGRjsKKwluaWMtPmJsYW5rX3JmZC5yYmQgPSBjcHVfdG9fbGUzMigweEZGRkZGRkZGKTsKIAluaWMtPmJsYW5rX3JmZC5zaXplID0gY3B1X3RvX2xlMTYoVkxBTl9FVEhfRlJBTUVfTEVOKTsKIAogCS8qIE1JSSBzZXR1cCAqLwpAQCAtMjc4MiwxNiArMjc4MiwxMyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBlMTAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQluYXBpX2Rpc2FibGUoJm5pYy0+bmFwaSk7Ci0JZGVsX3RpbWVyX3N5bmMoJm5pYy0+d2F0Y2hkb2cpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5pYy0+bmV0ZGV2KTsKKwkJZTEwMF9kb3duKG5pYyk7CiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CkBAIC0yODA0LDE0ICsyODAxLDEzIEBACiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9CiAKLQlmcmVlX2lycShwZGV2LT5pcnEsIG5ldGRldik7Ci0KIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgZTEwMF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTI4MzIsMjYgKzI4MjgsNyBAQAogCiBzdGF0aWMgdm9pZCBlMTAwX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5pYyAqbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCW5hcGlfZGlzYWJsZSgmbmljLT5uYXBpKTsKLQlkZWxfdGltZXJfc3luYygmbmljLT53YXRjaGRvZyk7Ci0JbmV0aWZfY2Fycmllcl9vZmYobmljLT5uZXRkZXYpOwotCi0JaWYgKChuaWMtPmZsYWdzICYgd29sX21hZ2ljKSB8IGUxMDBfYXNmKG5pYykpIHsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKLQl9IGVsc2UgewotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwotCX0KLQotCWZyZWVfaXJxKHBkZXYtPmlycSwgbmV0ZGV2KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJZTEwMF9zdXNwZW5kKHBkZXYsIFBNU0dfU1VTUEVORCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLSBQQ0kgRXJyb3IgUmVjb3ZlcnkgaW5mcmFzdHJ1Y3R1cmUgIC0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCAzYjg0MDI4Li4zMWZlYWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTE2MSwxMyArMTYxLDEzIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlkbWFfYWRkcl90IGRtYTsKIAl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7Ci0JdWludDE2X3QgbGVuZ3RoOwotCXVpbnQxNl90IG5leHRfdG9fd2F0Y2g7CisJdTE2IGxlbmd0aDsKKwl1MTYgbmV4dF90b193YXRjaDsKIH07CiAKIAogc3RydWN0IGUxMDAwX3BzX3BhZ2UgeyBzdHJ1Y3QgcGFnZSAqcHNfcGFnZVtQU19QQUdFX0JVRkZFUlNdOyB9Owotc3RydWN0IGUxMDAwX3BzX3BhZ2VfZG1hIHsgdWludDY0X3QgcHNfcGFnZV9kbWFbUFNfUEFHRV9CVUZGRVJTXTsgfTsKK3N0cnVjdCBlMTAwMF9wc19wYWdlX2RtYSB7IHU2NCBwc19wYWdlX2RtYVtQU19QQUdFX0JVRkZFUlNdOyB9OwogCiBzdHJ1Y3QgZTEwMDBfdHhfcmluZyB7CiAJLyogcG9pbnRlciB0byB0aGUgZGVzY3JpcHRvciByaW5nIG1lbW9yeSAqLwpAQCAtMTg2LDkgKzE4Niw5IEBACiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CiAKIAlzcGlubG9ja190IHR4X2xvY2s7Ci0JdWludDE2X3QgdGRoOwotCXVpbnQxNl90IHRkdDsKLQlib29sZWFuX3QgbGFzdF90eF90c287CisJdTE2IHRkaDsKKwl1MTYgdGR0OworCWJvb2wgbGFzdF90eF90c287CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcnhfcmluZyB7CkBAIC0yMTMsOCArMjEzLDggQEAKIAkvKiBjcHUgZm9yIHJ4IHF1ZXVlICovCiAJaW50IGNwdTsKIAotCXVpbnQxNl90IHJkaDsKLQl1aW50MTZfdCByZHQ7CisJdTE2IHJkaDsKKwl1MTYgcmR0OwogfTsKIAogI2RlZmluZSBFMTAwMF9ERVNDX1VOVVNFRChSKSBcCkBAIC0yMzcsMzEgKzIzNywzMCBAQAogCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0IHBoeV9pbmZvX3RpbWVyOwogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKLQl1aW50MTZfdCBtbmdfdmxhbl9pZDsKLQl1aW50MzJfdCBiZF9udW1iZXI7Ci0JdWludDMyX3QgcnhfYnVmZmVyX2xlbjsKLQl1aW50MzJfdCB3b2w7Ci0JdWludDMyX3Qgc21hcnRzcGVlZDsKLQl1aW50MzJfdCBlbl9tbmdfcHQ7Ci0JdWludDE2X3QgbGlua19zcGVlZDsKLQl1aW50MTZfdCBsaW5rX2R1cGxleDsKKwl1MTYgbW5nX3ZsYW5faWQ7CisJdTMyIGJkX251bWJlcjsKKwl1MzIgcnhfYnVmZmVyX2xlbjsKKwl1MzIgd29sOworCXUzMiBzbWFydHNwZWVkOworCXUzMiBlbl9tbmdfcHQ7CisJdTE2IGxpbmtfc3BlZWQ7CisJdTE2IGxpbmtfZHVwbGV4OwogCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCXNwaW5sb2NrX3QgdHhfcXVldWVfbG9jazsKICNlbmRpZgotCWF0b21pY190IGlycV9zZW07CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF90eF9wYWNrZXRzOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlczsKIAl1bnNpZ25lZCBpbnQgdG90YWxfcnhfcGFja2V0czsKIAkvKiBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAqLwotCXVpbnQzMl90IGl0cjsKLQl1aW50MzJfdCBpdHJfc2V0dGluZzsKLQl1aW50MTZfdCB0eF9pdHI7Ci0JdWludDE2X3QgcnhfaXRyOworCXUzMiBpdHI7CisJdTMyIGl0cl9zZXR0aW5nOworCXUxNiB0eF9pdHI7CisJdTE2IHJ4X2l0cjsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwotCXVpbnQ4X3QgZmNfYXV0b25lZzsKKwl1OCBmY19hdXRvbmVnOwogCiAJc3RydWN0IHRpbWVyX2xpc3QgYmxpbmtfdGltZXI7CiAJdW5zaWduZWQgbG9uZyBsZWRfc3RhdHVzOwpAQCAtMjcwLDMwICsyNjksMzAgQEAKIAlzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZzsgICAgICAvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLwogCXVuc2lnbmVkIGludCByZXN0YXJ0X3F1ZXVlOwogCXVuc2lnbmVkIGxvbmcgdHhfcXVldWVfbGVuOwotCXVpbnQzMl90IHR4ZF9jbWQ7Ci0JdWludDMyX3QgdHhfaW50X2RlbGF5OwotCXVpbnQzMl90IHR4X2Fic19pbnRfZGVsYXk7Ci0JdWludDMyX3QgZ290Y2w7Ci0JdWludDY0X3QgZ290Y2xfb2xkOwotCXVpbnQ2NF90IHRwdF9vbGQ7Ci0JdWludDY0X3QgY29sY19vbGQ7Ci0JdWludDMyX3QgdHhfdGltZW91dF9jb3VudDsKLQl1aW50MzJfdCB0eF9maWZvX2hlYWQ7Ci0JdWludDMyX3QgdHhfaGVhZF9hZGRyOwotCXVpbnQzMl90IHR4X2ZpZm9fc2l6ZTsKLQl1aW50OF90ICB0eF90aW1lb3V0X2ZhY3RvcjsKKwl1MzIgdHhkX2NtZDsKKwl1MzIgdHhfaW50X2RlbGF5OworCXUzMiB0eF9hYnNfaW50X2RlbGF5OworCXUzMiBnb3RjbDsKKwl1NjQgZ290Y2xfb2xkOworCXU2NCB0cHRfb2xkOworCXU2NCBjb2xjX29sZDsKKwl1MzIgdHhfdGltZW91dF9jb3VudDsKKwl1MzIgdHhfZmlmb19oZWFkOworCXUzMiB0eF9oZWFkX2FkZHI7CisJdTMyIHR4X2ZpZm9fc2l6ZTsKKwl1OCAgdHhfdGltZW91dF9mYWN0b3I7CiAJYXRvbWljX3QgdHhfZmlmb19zdGFsbDsKLQlib29sZWFuX3QgcGNpeF84MjU0NDsKLQlib29sZWFuX3QgZGV0ZWN0X3R4X2h1bmc7CisJYm9vbCBwY2l4XzgyNTQ0OworCWJvb2wgZGV0ZWN0X3R4X2h1bmc7CiAKIAkvKiBSWCAqLwogI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCi0JYm9vbGVhbl90ICgqY2xlYW5fcngpIChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKLQkJCSAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOworCWJvb2wgKCpjbGVhbl9yeCkgKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKKwkJCSAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKICNlbHNlCi0JYm9vbGVhbl90ICgqY2xlYW5fcngpIChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZyk7CisJYm9vbCAoKmNsZWFuX3J4KSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nKTsKICNlbmRpZgogCXZvaWQgKCphbGxvY19yeF9idWYpIChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLApAQCAtMzA2LDE3ICszMDUsMTcgQEAKIAlpbnQgbnVtX3R4X3F1ZXVlczsKIAlpbnQgbnVtX3J4X3F1ZXVlczsKIAotCXVpbnQ2NF90IGh3X2NzdW1fZXJyOwotCXVpbnQ2NF90IGh3X2NzdW1fZ29vZDsKLQl1aW50NjRfdCByeF9oZHJfc3BsaXQ7Ci0JdWludDMyX3QgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7Ci0JdWludDMyX3QgcnhfaW50X2RlbGF5OwotCXVpbnQzMl90IHJ4X2Fic19pbnRfZGVsYXk7Ci0JYm9vbGVhbl90IHJ4X2NzdW07CisJdTY0IGh3X2NzdW1fZXJyOworCXU2NCBod19jc3VtX2dvb2Q7CisJdTY0IHJ4X2hkcl9zcGxpdDsKKwl1MzIgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CisJdTMyIHJ4X2ludF9kZWxheTsKKwl1MzIgcnhfYWJzX2ludF9kZWxheTsKKwlib29sIHJ4X2NzdW07CiAJdW5zaWduZWQgaW50IHJ4X3BzX3BhZ2VzOwotCXVpbnQzMl90IGdvcmNsOwotCXVpbnQ2NF90IGdvcmNsX29sZDsKLQl1aW50MTZfdCByeF9wc19ic2l6ZTA7CisJdTMyIGdvcmNsOworCXU2NCBnb3JjbF9vbGQ7CisJdTE2IHJ4X3BzX2JzaXplMDsKIAogCiAJLyogT1MgZGVmaW5lZCBzdHJ1Y3RzICovCkBAIC0zMzAsMTkgKzMyOSwxOSBAQAogCXN0cnVjdCBlMTAwMF9waHlfaW5mbyBwaHlfaW5mbzsKIAlzdHJ1Y3QgZTEwMDBfcGh5X3N0YXRzIHBoeV9zdGF0czsKIAotCXVpbnQzMl90IHRlc3RfaWNyOworCXUzMiB0ZXN0X2ljcjsKIAlzdHJ1Y3QgZTEwMDBfdHhfcmluZyB0ZXN0X3R4X3Jpbmc7CiAJc3RydWN0IGUxMDAwX3J4X3JpbmcgdGVzdF9yeF9yaW5nOwogCiAJaW50IG1zZ19lbmFibGU7Ci0JYm9vbGVhbl90IGhhdmVfbXNpOworCWJvb2wgaGF2ZV9tc2k7CiAKIAkvKiB0byBub3QgbWVzcyB1cCBjYWNoZSBhbGlnbm1lbnQsIGFsd2F5cyBhZGQgdG8gdGhlIGJvdHRvbSAqLwotCWJvb2xlYW5fdCB0c29fZm9yY2U7Ci0JYm9vbGVhbl90IHNtYXJ0X3Bvd2VyX2Rvd247CS8qIHBoeSBzbWFydCBwb3dlciBkb3duICovCi0JYm9vbGVhbl90IHF1YWRfcG9ydF9hOworCWJvb2wgdHNvX2ZvcmNlOworCWJvb2wgc21hcnRfcG93ZXJfZG93bjsJLyogcGh5IHNtYXJ0IHBvd2VyIGRvd24gKi8KKwlib29sIHF1YWRfcG9ydF9hOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdWludDMyX3QgZWVwcm9tX3dvbDsKKwl1MzIgZWVwcm9tX3dvbDsKIH07CiAKIGVudW0gZTEwMDBfc3RhdGVfdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggZDg3Njc4Ny4uNzAxNTMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMzYsNyArMzYsNyBAQAogZXh0ZXJuIHZvaWQgZTEwMDBfZG93bihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMF9yZWluaXRfbG9ja2VkKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwX3Jlc2V0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiBpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50MTZfdCBzcGRkcGx4KTsKK2V4dGVybiBpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BkZHBseCk7CiBleHRlcm4gaW50IGUxMDAwX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBlMTAwMF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CkBAIC01MCw3ICs1MCw3IEBACiAJaW50IHN0YXRfb2Zmc2V0OwogfTsKIAotI2RlZmluZSBFMTAwMF9TVEFUKG0pIHNpemVvZigoKHN0cnVjdCBlMTAwMF9hZGFwdGVyICopMCktPm0pLCBcCisjZGVmaW5lIEUxMDAwX1NUQVQobSkgRklFTERfU0laRU9GKHN0cnVjdCBlMTAwMF9hZGFwdGVyLCBtKSwgXAogCQkgICAgICBvZmZzZXRvZihzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgbSkKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZTEwMDBfc3RhdHMgZTEwMDBfZ3N0cmluZ3Nfc3RhdHNbXSA9IHsKIAl7ICJyeF9wYWNrZXRzIiwgRTEwMDBfU1RBVChzdGF0cy5ncHJjKSB9LApAQCAtMjg5LDcgKzI4OSw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHVpbnQzMl90CitzdGF0aWMgdTMyCiBlMTAwMF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1lMTAwMF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBkYXRhKQorZTEwMDBfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWFkYXB0ZXItPnJ4X2NzdW0gPSBkYXRhOwpAQCAtMzA5LDE0ICszMDksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVpbnQzMl90CitzdGF0aWMgdTMyCiBlMTAwMF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXJldHVybiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkgIT0gMDsKIH0KIAogc3RhdGljIGludAotZTEwMDBfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK2UxMDAwX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtMzM1LDcgKzMzNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWUxMDAwX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK2UxMDAwX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWlmICgoYWRhcHRlci0+aHcubWFjX3R5cGUgPCBlMTAwMF84MjU0NCkgfHwKQEAgLTM1MywxMSArMzUzLDExIEBACiAJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKIAogCURQUklOVEsoUFJPQkUsIElORk8sICJUU08gaXMgJXNcbiIsIGRhdGEgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKLQlhZGFwdGVyLT50c29fZm9yY2UgPSBUUlVFOworCWFkYXB0ZXItPnRzb19mb3JjZSA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1aW50MzJfdAorc3RhdGljIHUzMgogZTEwMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzY1LDcgKzM2NSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1lMTAwMF9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK2UxMDAwX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJYWRhcHRlci0+bXNnX2VuYWJsZSA9IGRhdGE7CkBAIC0zNzUsNyArMzc1LDcgQEAKIGUxMDAwX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogI2RlZmluZSBFMTAwMF9SRUdTX0xFTiAzMgotCXJldHVybiBFMTAwMF9SRUdTX0xFTiAqIHNpemVvZih1aW50MzJfdCk7CisJcmV0dXJuIEUxMDAwX1JFR1NfTEVOICogc2l6ZW9mKHUzMik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zODQsMTAgKzM4NCwxMCBAQAogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXVpbnQzMl90ICpyZWdzX2J1ZmYgPSBwOwotCXVpbnQxNl90IHBoeV9kYXRhOworCXUzMiAqcmVnc19idWZmID0gcDsKKwl1MTYgcGh5X2RhdGE7CiAKLQltZW1zZXQocCwgMCwgRTEwMDBfUkVHU19MRU4gKiBzaXplb2YodWludDMyX3QpKTsKKwltZW1zZXQocCwgMCwgRTEwMDBfUkVHU19MRU4gKiBzaXplb2YodTMyKSk7CiAKIAlyZWdzLT52ZXJzaW9uID0gKDEgPDwgMjQpIHwgKGh3LT5yZXZpc2lvbl9pZCA8PCAxNikgfCBody0+ZGV2aWNlX2lkOwogCkBAIC00MTIsNDQgKzQxMiw0NCBAQAogCQkJCSAgICBJR1AwMUUxMDAwX1BIWV9BR0NfQSk7CiAJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfQUdDX0EgJgogCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULCAmcGh5X2RhdGEpOwotCQlyZWdzX2J1ZmZbMTNdID0gKHVpbnQzMl90KXBoeV9kYXRhOyAvKiBjYWJsZSBsZW5ndGggKi8KKwkJcmVnc19idWZmWzEzXSA9ICh1MzIpcGh5X2RhdGE7IC8qIGNhYmxlIGxlbmd0aCAqLwogCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKIAkJCQkgICAgSUdQMDFFMTAwMF9QSFlfQUdDX0IpOwogCQllMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX0FHQ19CICYKIAkJCQkgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgJnBoeV9kYXRhKTsKLQkJcmVnc19idWZmWzE0XSA9ICh1aW50MzJfdClwaHlfZGF0YTsgLyogY2FibGUgbGVuZ3RoICovCisJCXJlZ3NfYnVmZlsxNF0gPSAodTMyKXBoeV9kYXRhOyAvKiBjYWJsZSBsZW5ndGggKi8KIAkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJICAgIElHUDAxRTEwMDBfUEhZX0FHQ19DKTsKIAkJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9BR0NfQyAmCiAJCQkJICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsICZwaHlfZGF0YSk7Ci0JCXJlZ3NfYnVmZlsxNV0gPSAodWludDMyX3QpcGh5X2RhdGE7IC8qIGNhYmxlIGxlbmd0aCAqLworCQlyZWdzX2J1ZmZbMTVdID0gKHUzMilwaHlfZGF0YTsgLyogY2FibGUgbGVuZ3RoICovCiAJCWUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCSAgICBJR1AwMUUxMDAwX1BIWV9BR0NfRCk7CiAJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfQUdDX0QgJgogCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULCAmcGh5X2RhdGEpOwotCQlyZWdzX2J1ZmZbMTZdID0gKHVpbnQzMl90KXBoeV9kYXRhOyAvKiBjYWJsZSBsZW5ndGggKi8KKwkJcmVnc19idWZmWzE2XSA9ICh1MzIpcGh5X2RhdGE7IC8qIGNhYmxlIGxlbmd0aCAqLwogCQlyZWdzX2J1ZmZbMTddID0gMDsgLyogZXh0ZW5kZWQgMTBidCBkaXN0YW5jZSAobm90IG5lZWRlZCkgKi8KIAkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsIDB4MCk7CiAJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMgJgogCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULCAmcGh5X2RhdGEpOwotCQlyZWdzX2J1ZmZbMThdID0gKHVpbnQzMl90KXBoeV9kYXRhOyAvKiBjYWJsZSBwb2xhcml0eSAqLworCQlyZWdzX2J1ZmZbMThdID0gKHUzMilwaHlfZGF0YTsgLyogY2FibGUgcG9sYXJpdHkgKi8KIAkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJICAgIElHUDAxRTEwMDBfUEhZX1BDU19JTklUX1JFRyk7CiAJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUENTX0lOSVRfUkVHICYKIAkJCQkgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgJnBoeV9kYXRhKTsKLQkJcmVnc19idWZmWzE5XSA9ICh1aW50MzJfdClwaHlfZGF0YTsgLyogY2FibGUgcG9sYXJpdHkgKi8KKwkJcmVnc19idWZmWzE5XSA9ICh1MzIpcGh5X2RhdGE7IC8qIGNhYmxlIHBvbGFyaXR5ICovCiAJCXJlZ3NfYnVmZlsyMF0gPSAwOyAvKiBwb2xhcml0eSBjb3JyZWN0aW9uIGVuYWJsZWQgKGFsd2F5cykgKi8KIAkJcmVnc19idWZmWzIyXSA9IDA7IC8qIHBoeSByZWNlaXZlIGVycm9ycyAodW5hdmFpbGFibGUpICovCiAJCXJlZ3NfYnVmZlsyM10gPSByZWdzX2J1ZmZbMThdOyAvKiBtZGl4IG1vZGUgKi8KIAkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsIDB4MCk7CiAJfSBlbHNlIHsKIAkJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSk7Ci0JCXJlZ3NfYnVmZlsxM10gPSAodWludDMyX3QpcGh5X2RhdGE7IC8qIGNhYmxlIGxlbmd0aCAqLworCQlyZWdzX2J1ZmZbMTNdID0gKHUzMilwaHlfZGF0YTsgLyogY2FibGUgbGVuZ3RoICovCiAJCXJlZ3NfYnVmZlsxNF0gPSAwOyAgLyogRHVtbXkgKHRvIGFsaWduIHcvIElHUCBwaHkgcmVnIGR1bXApICovCiAJCXJlZ3NfYnVmZlsxNV0gPSAwOyAgLyogRHVtbXkgKHRvIGFsaWduIHcvIElHUCBwaHkgcmVnIGR1bXApICovCiAJCXJlZ3NfYnVmZlsxNl0gPSAwOyAgLyogRHVtbXkgKHRvIGFsaWduIHcvIElHUCBwaHkgcmVnIGR1bXApICovCiAJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgJnBoeV9kYXRhKTsKLQkJcmVnc19idWZmWzE3XSA9ICh1aW50MzJfdClwaHlfZGF0YTsgLyogZXh0ZW5kZWQgMTBidCBkaXN0YW5jZSAqLworCQlyZWdzX2J1ZmZbMTddID0gKHUzMilwaHlfZGF0YTsgLyogZXh0ZW5kZWQgMTBidCBkaXN0YW5jZSAqLwogCQlyZWdzX2J1ZmZbMThdID0gcmVnc19idWZmWzEzXTsgLyogY2FibGUgcG9sYXJpdHkgKi8KIAkJcmVnc19idWZmWzE5XSA9IDA7ICAvKiBEdW1teSAodG8gYWxpZ24gdy8gSUdQIHBoeSByZWcgZHVtcCkgKi8KIAkJcmVnc19idWZmWzIwXSA9IHJlZ3NfYnVmZlsxN107IC8qIHBvbGFyaXR5IGNvcnJlY3Rpb24gKi8KQEAgLTQ1OSw3ICs0NTksNyBAQAogCX0KIAlyZWdzX2J1ZmZbMjFdID0gYWRhcHRlci0+cGh5X3N0YXRzLmlkbGVfZXJyb3JzOyAgLyogcGh5IGlkbGUgZXJyb3JzICovCiAJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLCAmcGh5X2RhdGEpOwotCXJlZ3NfYnVmZlsyNF0gPSAodWludDMyX3QpcGh5X2RhdGE7ICAvKiBwaHkgbG9jYWwgcmVjZWl2ZXIgc3RhdHVzICovCisJcmVnc19idWZmWzI0XSA9ICh1MzIpcGh5X2RhdGE7ICAvKiBwaHkgbG9jYWwgcmVjZWl2ZXIgc3RhdHVzICovCiAJcmVnc19idWZmWzI1XSA9IHJlZ3NfYnVmZlsyNF07ICAvKiBwaHkgcmVtb3RlIHJlY2VpdmVyIHN0YXR1cyAqLwogCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYKIAkgICAgaHctPm1hY190eXBlIDwgZTEwMDBfODI1NzEgJiYKQEAgLTQ3NywxNCArNDc3LDE0IEBACiAKIHN0YXRpYyBpbnQKIGUxMDAwX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdWludDhfdCAqYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpieXRlcykKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MTZfdCAqZWVwcm9tX2J1ZmY7CisJdTE2ICplZXByb21fYnVmZjsKIAlpbnQgZmlyc3Rfd29yZCwgbGFzdF93b3JkOwogCWludCByZXRfdmFsID0gMDsKLQl1aW50MTZfdCBpOworCXUxNiBpOwogCiAJaWYgKGVlcHJvbS0+bGVuID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJZmlyc3Rfd29yZCA9IGVlcHJvbS0+b2Zmc2V0ID4+IDE7CiAJbGFzdF93b3JkID0gKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gLSAxKSA+PiAxOwogCi0JZWVwcm9tX2J1ZmYgPSBrbWFsbG9jKHNpemVvZih1aW50MTZfdCkgKgorCWVlcHJvbV9idWZmID0ga21hbGxvYyhzaXplb2YodTE2KSAqCiAJCQkobGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVlcHJvbV9idWZmKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUxNCw3ICs1MTQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMTsgaSsrKQogCQlsZTE2X3RvX2NwdXMoJmVlcHJvbV9idWZmW2ldKTsKIAotCW1lbWNweShieXRlcywgKHVpbnQ4X3QgKillZXByb21fYnVmZiArIChlZXByb20tPm9mZnNldCAmIDEpLAorCW1lbWNweShieXRlcywgKHU4ICopZWVwcm9tX2J1ZmYgKyAoZWVwcm9tLT5vZmZzZXQgJiAxKSwKIAkJCWVlcHJvbS0+bGVuKTsKIAlrZnJlZShlZXByb21fYnVmZik7CiAKQEAgLTUyMywxNCArNTIzLDE0IEBACiAKIHN0YXRpYyBpbnQKIGUxMDAwX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdWludDhfdCAqYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpieXRlcykKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MTZfdCAqZWVwcm9tX2J1ZmY7CisJdTE2ICplZXByb21fYnVmZjsKIAl2b2lkICpwdHI7CiAJaW50IG1heF9sZW4sIGZpcnN0X3dvcmQsIGxhc3Rfd29yZCwgcmV0X3ZhbCA9IDA7Ci0JdWludDE2X3QgaTsKKwl1MTYgaTsKIAogCWlmIChlZXByb20tPmxlbiA9PSAwKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC01OTAsNyArNTkwLDcgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJY2hhciBmaXJtd2FyZV92ZXJzaW9uWzMyXTsKLQl1aW50MTZfdCBlZXByb21fZGF0YTsKKwl1MTYgZWVwcm9tX2RhdGE7CiAKIAlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgIGUxMDAwX2RyaXZlcl9uYW1lLCAzMik7CiAJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBlMTAwMF9kcml2ZXJfdmVyc2lvbiwgMzIpOwpAQCAtNjc0LDEzICs2NzQsMTMgQEAKIAlhZGFwdGVyLT50eF9yaW5nID0gdHhkcjsKIAlhZGFwdGVyLT5yeF9yaW5nID0gcnhkcjsKIAotCXJ4ZHItPmNvdW50ID0gbWF4KHJpbmctPnJ4X3BlbmRpbmcsKHVpbnQzMl90KUUxMDAwX01JTl9SWEQpOwotCXJ4ZHItPmNvdW50ID0gbWluKHJ4ZHItPmNvdW50LCh1aW50MzJfdCkobWFjX3R5cGUgPCBlMTAwMF84MjU0NCA/CisJcnhkci0+Y291bnQgPSBtYXgocmluZy0+cnhfcGVuZGluZywodTMyKUUxMDAwX01JTl9SWEQpOworCXJ4ZHItPmNvdW50ID0gbWluKHJ4ZHItPmNvdW50LCh1MzIpKG1hY190eXBlIDwgZTEwMDBfODI1NDQgPwogCQlFMTAwMF9NQVhfUlhEIDogRTEwMDBfTUFYXzgyNTQ0X1JYRCkpOwogCXJ4ZHItPmNvdW50ID0gQUxJR04ocnhkci0+Y291bnQsIFJFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTsKIAotCXR4ZHItPmNvdW50ID0gbWF4KHJpbmctPnR4X3BlbmRpbmcsKHVpbnQzMl90KUUxMDAwX01JTl9UWEQpOwotCXR4ZHItPmNvdW50ID0gbWluKHR4ZHItPmNvdW50LCh1aW50MzJfdCkobWFjX3R5cGUgPCBlMTAwMF84MjU0NCA/CisJdHhkci0+Y291bnQgPSBtYXgocmluZy0+dHhfcGVuZGluZywodTMyKUUxMDAwX01JTl9UWEQpOworCXR4ZHItPmNvdW50ID0gbWluKHR4ZHItPmNvdW50LCh1MzIpKG1hY190eXBlIDwgZTEwMDBfODI1NDQgPwogCQlFMTAwMF9NQVhfVFhEIDogRTEwMDBfTUFYXzgyNTQ0X1RYRCkpOwogCXR4ZHItPmNvdW50ID0gQUxJR04odHhkci0+Y291bnQsIFJFUV9UWF9ERVNDUklQVE9SX01VTFRJUExFKTsKIApAQCAtNzI4LDEzICs3MjgsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50NjRfdCAqZGF0YSwKLQkJCSAgICAgaW50IHJlZywgdWludDMyX3QgbWFzaywgdWludDMyX3Qgd3JpdGUpCitzdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsCisJCQkgICAgIGludCByZWcsIHUzMiBtYXNrLCB1MzIgd3JpdGUpCiB7Ci0Jc3RhdGljIGNvbnN0IHVpbnQzMl90IHRlc3RbXSA9CisJc3RhdGljIGNvbnN0IHUzMiB0ZXN0W10gPQogCQl7MHg1QTVBNUE1QSwgMHhBNUE1QTVBNSwgMHgwMDAwMDAwMCwgMHhGRkZGRkZGRn07Ci0JdWludDhfdCBfX2lvbWVtICphZGRyZXNzID0gYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZzsKLQl1aW50MzJfdCByZWFkOworCXU4IF9faW9tZW0gKmFkZHJlc3MgPSBhZGFwdGVyLT5ody5od19hZGRyICsgcmVnOworCXUzMiByZWFkOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVzdCk7IGkrKykgewpAQCAtNzUxLDExICs3NTEsMTEgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIHJlZ19zZXRfYW5kX2NoZWNrKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50NjRfdCAqZGF0YSwKLQkJCSAgICAgIGludCByZWcsIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IHdyaXRlKQorc3RhdGljIGJvb2wgcmVnX3NldF9hbmRfY2hlY2soc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSwKKwkJCSAgICAgIGludCByZWcsIHUzMiBtYXNrLCB1MzIgd3JpdGUpCiB7Ci0JdWludDhfdCBfX2lvbWVtICphZGRyZXNzID0gYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZzsKLQl1aW50MzJfdCByZWFkOworCXU4IF9faW9tZW0gKmFkZHJlc3MgPSBhZGFwdGVyLT5ody5od19hZGRyICsgcmVnOworCXUzMiByZWFkOwogCiAJd3JpdGVsKHdyaXRlICYgbWFzaywgYWRkcmVzcyk7CiAJcmVhZCA9IHJlYWRsKGFkZHJlc3MpOwpAQCAtNzg4LDEwICs3ODgsMTAgQEAKIAl9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50Ci1lMTAwMF9yZWdfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdWludDY0X3QgKmRhdGEpCitlMTAwMF9yZWdfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKQogewotCXVpbnQzMl90IHZhbHVlLCBiZWZvcmUsIGFmdGVyOwotCXVpbnQzMl90IGksIHRvZ2dsZTsKKwl1MzIgdmFsdWUsIGJlZm9yZSwgYWZ0ZXI7CisJdTMyIGksIHRvZ2dsZTsKIAogCS8qIFRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgUmVhZCBPbmx5LCBzbyBhIHdyaXRlIHNob3VsZCBmYWlsLgogCSAqIFNvbWUgYml0cyB0aGF0IGdldCB0b2dnbGVkIGFyZSBpZ25vcmVkLgpAQCAtODg0LDExICs4ODQsMTEgQEAKIH0KIAogc3RhdGljIGludAotZTEwMDBfZWVwcm9tX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVpbnQ2NF90ICpkYXRhKQorZTEwMDBfZWVwcm9tX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKIHsKLQl1aW50MTZfdCB0ZW1wOwotCXVpbnQxNl90IGNoZWNrc3VtID0gMDsKLQl1aW50MTZfdCBpOworCXUxNiB0ZW1wOworCXUxNiBjaGVja3N1bSA9IDA7CisJdTE2IGk7CiAKIAkqZGF0YSA9IDA7CiAJLyogUmVhZCBhbmQgYWRkIHVwIHRoZSBjb250ZW50cyBvZiB0aGUgRUVQUk9NICovCkBAIC05MDEsNyArOTAxLDcgQEAKIAl9CiAKIAkvKiBJZiBDaGVja3N1bSBpcyBub3QgQ29ycmVjdCByZXR1cm4gZXJyb3IgZWxzZSB0ZXN0IHBhc3NlZCAqLwotCWlmICgoY2hlY2tzdW0gIT0gKHVpbnQxNl90KSBFRVBST01fU1VNKSAmJiAhKCpkYXRhKSkKKwlpZiAoKGNoZWNrc3VtICE9ICh1MTYpIEVFUFJPTV9TVU0pICYmICEoKmRhdGEpKQogCQkqZGF0YSA9IDI7CiAKIAlyZXR1cm4gKmRhdGE7CkBAIC05MTksMTEgKzkxOSwxMiBAQAogfQogCiBzdGF0aWMgaW50Ci1lMTAwMF9pbnRyX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVpbnQ2NF90ICpkYXRhKQorZTEwMDBfaW50cl90ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1aW50MzJfdCBtYXNrLCBpPTAsIHNoYXJlZF9pbnQgPSBUUlVFOwotCXVpbnQzMl90IGlycSA9IGFkYXB0ZXItPnBkZXYtPmlycTsKKwl1MzIgbWFzaywgaSA9IDA7CisJYm9vbCBzaGFyZWRfaW50ID0gdHJ1ZTsKKwl1MzIgaXJxID0gYWRhcHRlci0+cGRldi0+aXJxOwogCiAJKmRhdGEgPSAwOwogCkBAIC05MzEsNyArOTMyLDcgQEAKIAkvKiBIb29rIHVwIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIganVzdCBmb3IgdGhpcyB0ZXN0ICovCiAJaWYgKCFyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIElSUUZfUFJPQkVfU0hBUkVELCBuZXRkZXYtPm5hbWUsCiAJICAgICAgICAgICAgICAgICBuZXRkZXYpKQotCQlzaGFyZWRfaW50ID0gRkFMU0U7CisJCXNoYXJlZF9pbnQgPSBmYWxzZTsKIAllbHNlIGlmIChyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIElSUUZfU0hBUkVELAogCSAgICAgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSkgewogCQkqZGF0YSA9IDE7CkBAIC0xMDY5LDcgKzEwNzAsNyBAQAogCXN0cnVjdCBlMTAwMF90eF9yaW5nICp0eGRyID0gJmFkYXB0ZXItPnRlc3RfdHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhkciA9ICZhZGFwdGVyLT50ZXN0X3J4X3Jpbmc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCXVpbnQzMl90IHJjdGw7CisJdTMyIHJjdGw7CiAJaW50IGksIHJldF92YWw7CiAKIAkvKiBTZXR1cCBUeCBkZXNjcmlwdG9yIHJpbmcgYW5kIFR4IGJ1ZmZlcnMgKi8KQEAgLTEwOTUsOCArMTA5Niw4IEBACiAJdHhkci0+bmV4dF90b191c2UgPSB0eGRyLT5uZXh0X3RvX2NsZWFuID0gMDsKIAogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFREQkFMLAotCQkJKCh1aW50NjRfdCkgdHhkci0+ZG1hICYgMHgwMDAwMDAwMEZGRkZGRkZGKSk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERCQUgsICgodWludDY0X3QpIHR4ZHItPmRtYSA+PiAzMikpOworCQkJKCh1NjQpIHR4ZHItPmRtYSAmIDB4MDAwMDAwMDBGRkZGRkZGRikpOworCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFREQkFILCAoKHU2NCkgdHhkci0+ZG1hID4+IDMyKSk7CiAJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERMRU4sCiAJCQl0eGRyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykpOwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFRESCwgMCk7CkBAIC0xMTUyLDggKzExNTMsOCBAQAogCXJjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CiAJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkRCQUwsCi0JCQkoKHVpbnQ2NF90KSByeGRyLT5kbWEgJiAweEZGRkZGRkZGKSk7Ci0JRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkRCQUgsICgodWludDY0X3QpIHJ4ZHItPmRtYSA+PiAzMikpOworCQkJKCh1NjQpIHJ4ZHItPmRtYSAmIDB4RkZGRkZGRkYpKTsKKwlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSREJBSCwgKCh1NjQpIHJ4ZHItPmRtYSA+PiAzMikpOwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJETEVOLCByeGRyLT5zaXplKTsKIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSREgsIDApOwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJEVCwgMCk7CkBAIC0xMjAxLDcgKzEyMDIsNyBAQAogc3RhdGljIHZvaWQKIGUxMDAwX3BoeV9yZXNldF9jbGtfYW5kX2NycyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MTZfdCBwaHlfcmVnOworCXUxNiBwaHlfcmVnOwogCiAJLyogQmVjYXVzZSB3ZSByZXNldCB0aGUgUEhZIGFib3ZlLCB3ZSBuZWVkIHRvIHJlLWZvcmNlIFRYX0NMSyBpbiB0aGUKIAkgKiBFeHRlbmRlZCBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlciB0byAyNU1IeiBjbG9jay4gIFRoaXMKQEAgLTEyMjUsOCArMTIyNiw4IEBACiBzdGF0aWMgaW50CiBlMTAwMF9ub25pbnRlZ3JhdGVkX3BoeV9sb29wYmFjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MzJfdCBjdHJsX3JlZzsKLQl1aW50MTZfdCBwaHlfcmVnOworCXUzMiBjdHJsX3JlZzsKKwl1MTYgcGh5X3JlZzsKIAogCS8qIFNldHVwIHRoZSBEZXZpY2UgQ29udHJvbCBSZWdpc3RlciBmb3IgUEhZIGxvb3BiYWNrIHRlc3QuICovCiAKQEAgLTEyOTIsMTAgKzEyOTMsMTAgQEAKIHN0YXRpYyBpbnQKIGUxMDAwX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewotCXVpbnQzMl90IGN0cmxfcmVnID0gMDsKLQl1aW50MzJfdCBzdGF0X3JlZyA9IDA7CisJdTMyIGN0cmxfcmVnID0gMDsKKwl1MzIgc3RhdF9yZWcgPSAwOwogCi0JYWRhcHRlci0+aHcuYXV0b25lZyA9IEZBTFNFOworCWFkYXB0ZXItPmh3LmF1dG9uZWcgPSBmYWxzZTsKIAogCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CiAJCS8qIEF1dG8tTURJL01ESVggT2ZmICovCkBAIC0xMzYyLDggKzEzNjMsOCBAQAogc3RhdGljIGludAogZTEwMDBfc2V0X3BoeV9sb29wYmFjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MTZfdCBwaHlfcmVnID0gMDsKLQl1aW50MTZfdCBjb3VudCA9IDA7CisJdTE2IHBoeV9yZWcgPSAwOworCXUxNiBjb3VudCA9IDA7CiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU0MzoKQEAgLTE0MTUsNyArMTQxNiw3IEBACiBlMTAwMF9zZXR1cF9sb29wYmFja190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdWludDMyX3QgcmN0bDsKKwl1MzIgcmN0bDsKIAogCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8CiAJICAgIGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CkBAIC0xNDUwLDggKzE0NTEsOCBAQAogZTEwMDBfbG9vcGJhY2tfY2xlYW51cChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXVpbnQzMl90IHJjdGw7Ci0JdWludDE2X3QgcGh5X3JlZzsKKwl1MzIgcmN0bDsKKwl1MTYgcGh5X3JlZzsKIAogCXJjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7CiAJcmN0bCAmPSB+KEUxMDAwX1JDVExfTEJNX1RDVlIgfCBFMTAwMF9SQ1RMX0xCTV9NQUMpOwpAQCAtMTQ3Myw3ICsxNDc0LDcgQEAKIAljYXNlIGUxMDAwXzgyNTQ1X3Jldl8zOgogCWNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CiAJZGVmYXVsdDoKLQkJaHctPmF1dG9uZWcgPSBUUlVFOworCQlody0+YXV0b25lZyA9IHRydWU7CiAJCWlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpCiAJCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LAogCQkJCQkgICAgR0c4MjU2M19QSFlfS01STl9NT0RFX0NUUkwsCkBAIC0xNTc3LDcgKzE1NzgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1lMTAwMF9sb29wYmFja190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50NjRfdCAqZGF0YSkKK2UxMDAwX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKIHsKIAkvKiBQSFkgbG9vcGJhY2sgY2Fubm90IGJlIHBlcmZvcm1lZCBpZiBTb0wvSURFUgogCSAqIHNlc3Npb25zIGFyZSBhY3RpdmUgKi8KQEAgLTE2MDIsMTggKzE2MDMsMTggQEAKIH0KIAogc3RhdGljIGludAotZTEwMDBfbGlua190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50NjRfdCAqZGF0YSkKK2UxMDAwX2xpbmtfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKQogewogCSpkYXRhID0gMDsKIAlpZiAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewogCQlpbnQgaSA9IDA7Ci0JCWFkYXB0ZXItPmh3LnNlcmRlc19saW5rX2Rvd24gPSBUUlVFOworCQlhZGFwdGVyLT5ody5zZXJkZXNfbGlua19kb3duID0gdHJ1ZTsKIAogCQkvKiBPbiBzb21lIGJsYWRlIHNlcnZlciBkZXNpZ25zLCBsaW5rIGVzdGFibGlzaG1lbnQKIAkJICogY291bGQgdGFrZSBhcyBsb25nIGFzIDItMyBtaW51dGVzICovCiAJCWRvIHsKIAkJCWUxMDAwX2NoZWNrX2Zvcl9saW5rKCZhZGFwdGVyLT5odyk7Ci0JCQlpZiAoYWRhcHRlci0+aHcuc2VyZGVzX2xpbmtfZG93biA9PSBGQUxTRSkKKwkJCWlmICghYWRhcHRlci0+aHcuc2VyZGVzX2xpbmtfZG93bikKIAkJCQlyZXR1cm4gKmRhdGE7CiAJCQltc2xlZXAoMjApOwogCQl9IHdoaWxlIChpKysgPCAzNzUwKTsKQEAgLTE2NDYsMTkgKzE2NDcsMTkgQEAKIAogc3RhdGljIHZvaWQKIGUxMDAwX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdWludDY0X3QgKmRhdGEpCisJCSAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWJvb2xlYW5fdCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOworCWJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKIAogCXNldF9iaXQoX19FMTAwMF9URVNUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOwogCWlmIChldGhfdGVzdC0+ZmxhZ3MgPT0gRVRIX1RFU1RfRkxfT0ZGTElORSkgewogCQkvKiBPZmZsaW5lIHRlc3RzICovCiAKIAkJLyogc2F2ZSBzcGVlZCwgZHVwbGV4LCBhdXRvbmVnIHNldHRpbmdzICovCi0JCXVpbnQxNl90IGF1dG9uZWdfYWR2ZXJ0aXNlZCA9IGFkYXB0ZXItPmh3LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKLQkJdWludDhfdCBmb3JjZWRfc3BlZWRfZHVwbGV4ID0gYWRhcHRlci0+aHcuZm9yY2VkX3NwZWVkX2R1cGxleDsKLQkJdWludDhfdCBhdXRvbmVnID0gYWRhcHRlci0+aHcuYXV0b25lZzsKKwkJdTE2IGF1dG9uZWdfYWR2ZXJ0aXNlZCA9IGFkYXB0ZXItPmh3LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKKwkJdTggZm9yY2VkX3NwZWVkX2R1cGxleCA9IGFkYXB0ZXItPmh3LmZvcmNlZF9zcGVlZF9kdXBsZXg7CisJCXU4IGF1dG9uZWcgPSBhZGFwdGVyLT5ody5hdXRvbmVnOwogCiAJCURQUklOVEsoSFcsIElORk8sICJvZmZsaW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCkBAIC0xODc2LDcgKzE4NzcsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1lMTAwMF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IGRhdGEpCitlMTAwMF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtMTkyNiw3ICsxOTI3LDcgQEAKIAogc3RhdGljIHZvaWQKIGUxMDAwX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCXN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdWludDY0X3QgKmRhdGEpCisJCXN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgaTsKQEAgLTE5MzUsMTUgKzE5MzYsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CiAJCWNoYXIgKnAgPSAoY2hhciAqKWFkYXB0ZXIrZTEwMDBfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9vZmZzZXQ7CiAJCWRhdGFbaV0gPSAoZTEwMDBfZ3N0cmluZ3Nfc3RhdHNbaV0uc2l6ZW9mX3N0YXQgPT0KLQkJCXNpemVvZih1aW50NjRfdCkpID8gKih1aW50NjRfdCAqKXAgOiAqKHVpbnQzMl90ICopcDsKKwkJCXNpemVvZih1NjQpKSA/ICoodTY0ICopcCA6ICoodTMyICopcDsKIAl9CiAvKglCVUdfT04oaSAhPSBFMTAwMF9TVEFUU19MRU4pOyAqLwogfQogCiBzdGF0aWMgdm9pZAotZTEwMDBfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3Qgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKQorZTEwMDBfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCiB7Ci0JdWludDhfdCAqcCA9IGRhdGE7CisJdTggKnAgPSBkYXRhOwogCWludCBpOwogCiAJc3dpdGNoIChzdHJpbmdzZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IDdjNjg4OGMuLjlhNGI2Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwpAQCAtMzMsMTA2ICszMywxMDcgQEAKIAogI2luY2x1ZGUgImUxMDAwX2h3LmgiCiAKLXN0YXRpYyBpbnQzMl90IGUxMDAwX3N3Zndfc3luY19hY3F1aXJlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQxNl90IG1hc2spOwotc3RhdGljIHZvaWQgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2Uoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgbWFzayk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MTZfdCAqZGF0YSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF93cml0ZV9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCByZWdfYWRkciwgdWludDE2X3QgZGF0YSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9nZXRfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWFzayk7CitzdGF0aWMgdm9pZCBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWFzayk7CitzdGF0aWMgczMyIGUxMDAwX3JlYWRfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZ19hZGRyLCB1MTYgKmRhdGEpOworc3RhdGljIHMzMiBlMTAwMF93cml0ZV9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnX2FkZHIsIHUxNiBkYXRhKTsKK3N0YXRpYyBzMzIgZTEwMDBfZ2V0X3NvZnR3YXJlX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCi1zdGF0aWMgdWludDhfdCBlMTAwMF9hcmNfc3Vic3lzdGVtX3ZhbGlkKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfY2hlY2tfcG9sYXJpdHkoc3RydWN0IGUxMDAwX2h3ICpodywgZTEwMDBfcmV2X3BvbGFyaXR5ICpwb2xhcml0eSk7CitzdGF0aWMgdTggZTEwMDBfYXJjX3N1YnN5c3RlbV92YWxpZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9jaGVja19wb2xhcml0eShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBlMTAwMF9yZXZfcG9sYXJpdHkgKnBvbGFyaXR5KTsKIHN0YXRpYyB2b2lkIGUxMDAwX2NsZWFyX2h3X2NudHJzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgZTEwMDBfY2xlYXJfdmZ0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2NvbW1pdF9zaGFkb3dfcmFtKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfY29uZmlnX2RzcF9hZnRlcl9saW5rX2NoYW5nZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sZWFuX3QgbGlua191cCk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2RldGVjdF9naWdfcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfZXJhc2VfaWNoOF80a19zZWdtZW50KHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGJhbmspOwotc3RhdGljIGludDMyX3QgZTEwMDBfZ2V0X2F1dG9fcmRfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2dldF9jYWJsZV9sZW5ndGgoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgKm1pbl9sZW5ndGgsIHVpbnQxNl90ICptYXhfbGVuZ3RoKTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2dldF9od19lZXByb21fc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2dldF9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfaWNoOF9jeWNsZV9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfaWNoOF9mbGFzaF9jeWNsZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCB0aW1lb3V0KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2lkX2xlZF9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfaW5pdF9sY2RfZnJvbV9udm1fY29uZmlnX3JlZ2lvbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBjbmZfYmFzZV9hZGRyLCB1aW50MzJfdCBjbmZfc2l6ZSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9pbml0X2xjZF9mcm9tX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfY29tbWl0X3NoYWRvd19yYW0oc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX2NvbmZpZ19kc3BfYWZ0ZXJfbGlua19jaGFuZ2Uoc3RydWN0IGUxMDAwX2h3ICpodywKKwkJCQkJCSAgYm9vbCBsaW5rX3VwKTsKK3N0YXRpYyBzMzIgZTEwMDBfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX2RldGVjdF9naWdfcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9lcmFzZV9pY2g4XzRrX3NlZ21lbnQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGJhbmspOworc3RhdGljIHMzMiBlMTAwMF9nZXRfYXV0b19yZF9kb25lKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9nZXRfY2FibGVfbGVuZ3RoKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiAqbWluX2xlbmd0aCwgdTE2ICptYXhfbGVuZ3RoKTsKK3N0YXRpYyBzMzIgZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX2dldF9waHlfY2ZnX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX2dldF9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9pY2g4X2N5Y2xlX2luaXQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX2ljaDhfZmxhc2hfY3ljbGUoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHRpbWVvdXQpOworc3RhdGljIHMzMiBlMTAwMF9pZF9sZWRfaW5pdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfaW5pdF9sY2RfZnJvbV9udm1fY29uZmlnX3JlZ2lvbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgY25mX2Jhc2VfYWRkciwgdTMyIGNuZl9zaXplKTsKK3N0YXRpYyBzMzIgZTEwMDBfaW5pdF9sY2RfZnJvbV9udm0oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgdm9pZCBlMTAwMF9pbml0X3J4X2FkZHJzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgZTEwMDBfaW5pdGlhbGl6ZV9oYXJkd2FyZV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGJvb2xlYW5fdCBlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9rdW1lcmFuX2xvY2tfbG9zc193b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfbW5nX2VuYWJsZV9ob3N0X2lmKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfbW5nX2hvc3RfaWZfd3JpdGUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDhfdCAqYnVmZmVyLCB1aW50MTZfdCBsZW5ndGgsIHVpbnQxNl90IG9mZnNldCwgdWludDhfdCAqc3VtKTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX21uZ193cml0ZV9jbWRfaGVhZGVyKHN0cnVjdCBlMTAwMF9odyogaHcsIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19jb21tYW5kX2hlYWRlciogaGRyKTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX21uZ193cml0ZV9jb21taXQoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9waHlfaWZlX2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOwotc3RhdGljIGludDMyX3QgZTEwMDBfcGh5X2lncF9nZXRfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeV9pbmZvKTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX3JlYWRfZWVwcm9tX2VlcmQoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3Qgb2Zmc2V0LCB1aW50MTZfdCB3b3JkcywgdWludDE2X3QgKmRhdGEpOwotc3RhdGljIGludDMyX3QgZTEwMDBfd3JpdGVfZWVwcm9tX2Vld3Ioc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3Qgb2Zmc2V0LCB1aW50MTZfdCB3b3JkcywgdWludDE2X3QgKmRhdGEpOwotc3RhdGljIGludDMyX3QgZTEwMDBfcG9sbF9lZXJkX2Vld3JfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBpbnQgZWVyZCk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9waHlfbTg4X2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOworc3RhdGljIGJvb2wgZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9rdW1lcmFuX2xvY2tfbG9zc193b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9tbmdfZW5hYmxlX2hvc3RfaWYoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX21uZ19ob3N0X2lmX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICpidWZmZXIsIHUxNiBsZW5ndGgsIHUxNiBvZmZzZXQsIHU4ICpzdW0pOworc3RhdGljIHMzMiBlMTAwMF9tbmdfd3JpdGVfY21kX2hlYWRlcihzdHJ1Y3QgZTEwMDBfaHcqIGh3LCBzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfY29tbWFuZF9oZWFkZXIqIGhkcik7CitzdGF0aWMgczMyIGUxMDAwX21uZ193cml0ZV9jb21taXQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX3BoeV9pZmVfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbyk7CitzdGF0aWMgczMyIGUxMDAwX3BoeV9pZ3BfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbyk7CitzdGF0aWMgczMyIGUxMDAwX3JlYWRfZWVwcm9tX2VlcmQoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOworc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21fZWV3cihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodywgaW50IGVlcmQpOworc3RhdGljIHMzMiBlMTAwMF9waHlfbTg4X2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOwogc3RhdGljIHZvaWQgZTEwMDBfcHV0X2h3X2VlcHJvbV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9yZWFkX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBpbmRleCwgdWludDhfdCAqZGF0YSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF92ZXJpZnlfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50OF90IGJ5dGUpOwotc3RhdGljIGludDMyX3QgZTEwMDBfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50OF90IGJ5dGUpOwotc3RhdGljIGludDMyX3QgZTEwMDBfcmVhZF9pY2g4X3dvcmQoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsIHVpbnQxNl90ICpkYXRhKTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX3JlYWRfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCBzaXplLCB1aW50MTZfdCAqZGF0YSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF93cml0ZV9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsIHVpbnQzMl90IHNpemUsIHVpbnQxNl90IGRhdGEpOwotc3RhdGljIGludDMyX3QgZTEwMDBfcmVhZF9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IHdvcmRzLCB1aW50MTZfdCAqZGF0YSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF93cml0ZV9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IHdvcmRzLCB1aW50MTZfdCAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3JlYWRfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTggKmRhdGEpOworc3RhdGljIHMzMiBlMTAwMF92ZXJpZnlfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTggYnl0ZSk7CitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHU4IGJ5dGUpOworc3RhdGljIHMzMiBlMTAwMF9yZWFkX2ljaDhfd29yZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3JlYWRfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTMyIHNpemUsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX2ljaDhfZGF0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHUzMiBzaXplLCB1MTYgZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3JlYWRfZWVwcm9tX2ljaDgoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOworc3RhdGljIHMzMiBlMTAwMF93cml0ZV9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CiBzdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX2ZsYWcoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sZWFuX3QgYWN0aXZlKTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX3NldF9kMF9scGx1X3N0YXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2xlYW5fdCBhY3RpdmUpOwotc3RhdGljIGludDMyX3QgZTEwMDBfc2V0X3BjaV9leF9ub19zbm9vcChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBub19zbm9vcCk7CitzdGF0aWMgczMyIGUxMDAwX3NldF9kM19scGx1X3N0YXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKTsKK3N0YXRpYyBzMzIgZTEwMDBfc2V0X2QwX2xwbHVfc3RhdGUoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBhY3RpdmUpOworc3RhdGljIHMzMiBlMTAwMF9zZXRfcGNpX2V4X25vX3Nub29wKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBub19zbm9vcCk7CiBzdGF0aWMgdm9pZCBlMTAwMF9zZXRfcGNpX2V4cHJlc3NfbWFzdGVyX2Rpc2FibGUoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF93YWl0X2F1dG9uZWcoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgdm9pZCBlMTAwMF93cml0ZV9yZWdfaW8oc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9zZXRfcGh5X3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX3dhaXRfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGUxMDAwX3dyaXRlX3JlZ19pbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpOworc3RhdGljIHMzMiBlMTAwMF9zZXRfcGh5X3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgdm9pZCBlMTAwMF9waHlfaW5pdF9zY3JpcHQoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9zZXR1cF9jb3BwZXJfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfYWRqdXN0X3NlcmRlc19hbXBsaXR1ZGUoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfY29uZmlnX21hY190b19waHkoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgdm9pZCBlMTAwMF9yYWlzZV9tZGlfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90ICpjdHJsKTsKLXN0YXRpYyB2b2lkIGUxMDAwX2xvd2VyX21kaV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgKmN0cmwpOwotc3RhdGljIHZvaWQgZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgY291bnQpOwotc3RhdGljIHVpbnQxNl90IGUxMDAwX3NoaWZ0X2luX21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfcGh5X3Jlc2V0X2RzcChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX3dyaXRlX2VlcHJvbV9zcGkoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB3b3JkcywgdWludDE2X3QgKmRhdGEpOwotc3RhdGljIGludDMyX3QgZTEwMDBfd3JpdGVfZWVwcm9tX21pY3Jvd2lyZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IHdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqZGF0YSk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9zcGlfZWVwcm9tX3JlYWR5KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIHZvaWQgZTEwMDBfcmFpc2VfZWVfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90ICplZWNkKTsKLXN0YXRpYyB2b2lkIGUxMDAwX2xvd2VyX2VlX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCAqZWVjZCk7Ci1zdGF0aWMgdm9pZCBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgY291bnQpOwotc3RhdGljIGludDMyX3QgZTEwMDBfd3JpdGVfcGh5X3JlZ19leChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCByZWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgcGh5X2RhdGEpOwotc3RhdGljIGludDMyX3QgZTEwMDBfcmVhZF9waHlfcmVnX2V4KHN0cnVjdCBlMTAwMF9odyAqaHcsdWludDMyX3QgcmVnX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBoeV9kYXRhKTsKLXN0YXRpYyB1aW50MTZfdCBlMTAwMF9zaGlmdF9pbl9lZV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQxNl90IGNvdW50KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2FjcXVpcmVfZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9zZXR1cF9jb3BwZXJfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX2FkanVzdF9zZXJkZXNfYW1wbGl0dWRlKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9jb25maWdfbWFjX3RvX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGUxMDAwX3JhaXNlX21kaV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICpjdHJsKTsKK3N0YXRpYyB2b2lkIGUxMDAwX2xvd2VyX21kaV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICpjdHJsKTsKK3N0YXRpYyB2b2lkIGUxMDAwX3NoaWZ0X291dF9tZGlfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgY291bnQpOworc3RhdGljIHUxNiBlMTAwMF9zaGlmdF9pbl9tZGlfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfcGh5X3Jlc2V0X2RzcChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfd3JpdGVfZWVwcm9tX3NwaShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3dyaXRlX2VlcHJvbV9taWNyb3dpcmUoc3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IG9mZnNldCwgdTE2IHdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOworc3RhdGljIHMzMiBlMTAwMF9zcGlfZWVwcm9tX3JlYWR5KHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHZvaWQgZTEwMDBfcmFpc2VfZWVfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqZWVjZCk7CitzdGF0aWMgdm9pZCBlMTAwMF9sb3dlcl9lZV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICplZWNkKTsKK3N0YXRpYyB2b2lkIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNvdW50KTsKK3N0YXRpYyBzMzIgZTEwMDBfd3JpdGVfcGh5X3JlZ19leChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBwaHlfZGF0YSk7CitzdGF0aWMgczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19leChzdHJ1Y3QgZTEwMDBfaHcgKmh3LHUzMiByZWdfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKnBoeV9kYXRhKTsKK3N0YXRpYyB1MTYgZTEwMDBfc2hpZnRfaW5fZWVfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgY291bnQpOworc3RhdGljIHMzMiBlMTAwMF9hY3F1aXJlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2VfZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHZvaWQgZTEwMDBfc3RhbmRieV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgaW50MzJfdCBlMTAwMF9zZXRfdmNvX3NwZWVkKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotc3RhdGljIGludDMyX3QgZTEwMDBfcG9sYXJpdHlfcmV2ZXJzYWxfd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX3NldF9waHlfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXN0YXRpYyBpbnQzMl90IGUxMDAwX2hvc3RfaWZfcmVhZF9jb29raWUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDhfdCAqYnVmZmVyKTsKLXN0YXRpYyB1aW50OF90IGUxMDAwX2NhbGN1bGF0ZV9tbmdfY2hlY2tzdW0oY2hhciAqYnVmZmVyLCB1aW50MzJfdCBsZW5ndGgpOwotc3RhdGljIGludDMyX3QgZTEwMDBfY29uZmlndXJlX2ttcm5fZm9yXzEwXzEwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBkdXBsZXgpOwotc3RhdGljIGludDMyX3QgZTEwMDBfY29uZmlndXJlX2ttcm5fZm9yXzEwMDAoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX3NldF92Y29fc3BlZWQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX3BvbGFyaXR5X3JldmVyc2FsX3dvcmthcm91bmQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX3NldF9waHlfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfaG9zdF9pZl9yZWFkX2Nvb2tpZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqYnVmZmVyKTsKK3N0YXRpYyB1OCBlMTAwMF9jYWxjdWxhdGVfbW5nX2NoZWNrc3VtKGNoYXIgKmJ1ZmZlciwgdTMyIGxlbmd0aCk7CitzdGF0aWMgczMyIGUxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMF8xMDAoc3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGR1cGxleCk7CitzdGF0aWMgczMyIGUxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMDAwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiAvKiBJR1AgY2FibGUgbGVuZ3RoIHRhYmxlICovCiBzdGF0aWMgY29uc3QKLXVpbnQxNl90IGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfdGFibGVbSUdQMDFFMTAwMF9BR0NfTEVOR1RIX1RBQkxFX1NJWkVdID0KK3UxNiBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoX3RhYmxlW0lHUDAxRTEwMDBfQUdDX0xFTkdUSF9UQUJMRV9TSVpFXSA9CiAgICAgeyA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAogICAgICAgNSwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjUsIDI1LCAyNSwKICAgICAgIDI1LCAyNSwgMjUsIDI1LCAzMCwgMzAsIDMwLCAzMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLApAQCAtMTQzLDcgKzE0NCw3IEBACiAgICAgICAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjB9OwogCiBzdGF0aWMgY29uc3QKLXVpbnQxNl90IGUxMDAwX2lncF8yX2NhYmxlX2xlbmd0aF90YWJsZVtJR1AwMkUxMDAwX0FHQ19MRU5HVEhfVEFCTEVfU0laRV0gPQordTE2IGUxMDAwX2lncF8yX2NhYmxlX2xlbmd0aF90YWJsZVtJR1AwMkUxMDAwX0FHQ19MRU5HVEhfVEFCTEVfU0laRV0gPQogICAgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgNSwgOCwgMTEsIDEzLCAxNiwgMTgsIDIxLAogICAgICAgMCwgMCwgMCwgMywgNiwgMTAsIDEzLCAxNiwgMTksIDIzLCAyNiwgMjksIDMyLCAzNSwgMzgsIDQxLAogICAgICAgNiwgMTAsIDE0LCAxOCwgMjIsIDI2LCAzMCwgMzMsIDM3LCA0MSwgNDQsIDQ4LCA1MSwgNTQsIDU4LCA2MSwKQEAgLTE1OCw3ICsxNTksNyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfc2V0X3BoeV90eXBlKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXRfcGh5X3R5cGUiKTsKQEAgLTIxMiw4ICsyMTMsOCBAQAogc3RhdGljIHZvaWQKIGUxMDAwX3BoeV9pbml0X3NjcmlwdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgcGh5X3NhdmVkX2RhdGE7CisgICAgdTMyIHJldF92YWw7CisgICAgdTE2IHBoeV9zYXZlZF9kYXRhOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9waHlfaW5pdF9zY3JpcHQiKTsKIApAQCAtMjcxLDcgKzI3Miw3IEBACiAgICAgICAgIGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDB4MkY1QiwgcGh5X3NhdmVkX2RhdGEpOwogCiAgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpIHsKLSAgICAgICAgICAgIHVpbnQxNl90IGZ1c2VkLCBmaW5lLCBjb2Fyc2U7CisgICAgICAgICAgICB1MTYgZnVzZWQsIGZpbmUsIGNvYXJzZTsKIAogICAgICAgICAgICAgLyogTW92ZSB0byBhbmFsb2cgcmVnaXN0ZXJzIHBhZ2UgKi8KICAgICAgICAgICAgIGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9BTkFMT0dfU1BBUkVfRlVTRV9TVEFUVVMsICZmdXNlZCk7CkBAIC0zMDUsNyArMzA2LDcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9zZXRfbWFjX3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKIAlERUJVR0ZVTkMoImUxMDAwX3NldF9tYWNfdHlwZSIpOwpAQCAtNDI1LDIyICs0MjYsMjIgQEAKIAogCXN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF9pY2g4bGFuOgotCQlody0+c3dmd2h3X3NlbWFwaG9yZV9wcmVzZW50ID0gVFJVRTsKLQkJaHctPmFzZl9maXJtd2FyZV9wcmVzZW50ID0gVFJVRTsKKwkJaHctPnN3Zndod19zZW1hcGhvcmVfcHJlc2VudCA9IHRydWU7CisJCWh3LT5hc2ZfZmlybXdhcmVfcHJlc2VudCA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODAwMDNlczJsYW46Ci0JCWh3LT5zd2Z3X3N5bmNfcHJlc2VudCA9IFRSVUU7CisJCWh3LT5zd2Z3X3N5bmNfcHJlc2VudCA9IHRydWU7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgZTEwMDBfODI1NzE6CiAJY2FzZSBlMTAwMF84MjU3MjoKIAljYXNlIGUxMDAwXzgyNTczOgotCQlody0+ZWVwcm9tX3NlbWFwaG9yZV9wcmVzZW50ID0gVFJVRTsKKwkJaHctPmVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudCA9IHRydWU7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgZTEwMDBfODI1NDE6CiAJY2FzZSBlMTAwMF84MjU0NzoKIAljYXNlIGUxMDAwXzgyNTQxX3Jldl8yOgogCWNhc2UgZTEwMDBfODI1NDdfcmV2XzI6Ci0JCWh3LT5hc2ZfZmlybXdhcmVfcHJlc2VudCA9IFRSVUU7CisJCWh3LT5hc2ZfZmlybXdhcmVfcHJlc2VudCA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtNDUwLDIwICs0NTEsMjAgQEAKIAkgKiBGRCBtb2RlCiAJICovCiAJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MykKLQkJaHctPmJhZF90eF9jYXJyX3N0YXRzX2ZkID0gVFJVRTsKKwkJaHctPmJhZF90eF9jYXJyX3N0YXRzX2ZkID0gdHJ1ZTsKIAogCS8qIGNhcGFibGUgb2YgcmVjZWl2aW5nIG1hbmFnZW1lbnQgcGFja2V0cyB0byB0aGUgaG9zdCAqLwogCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpCi0JCWh3LT5oYXNfbWFuYzJoID0gVFJVRTsKKwkJaHctPmhhc19tYW5jMmggPSB0cnVlOwogCiAJLyogSW4gcmFyZSBvY2Nhc2lvbnMsIEVTQjIgc3lzdGVtcyB3b3VsZCBlbmQgdXAgc3RhcnRlZCB3aXRob3V0CiAJICogdGhlIFJYIHVuaXQgYmVpbmcgdHVybmVkIG9uLgogCSAqLwogCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pCi0JCWh3LT5yeF9uZWVkc19raWNraW5nID0gVFJVRTsKKwkJaHctPnJ4X25lZWRzX2tpY2tpbmcgPSB0cnVlOwogCiAJaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KQotCQlody0+aGFzX3NtYnVzID0gVFJVRTsKKwkJaHctPmhhc19zbWJ1cyA9IHRydWU7CiAKIAlyZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KQEAgLTQ3NiwxMyArNDc3LDEzIEBACiB2b2lkCiBlMTAwMF9zZXRfbWVkaWFfdHlwZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IHN0YXR1czsKKyAgICB1MzIgc3RhdHVzOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXRfbWVkaWFfdHlwZSIpOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF84MjU0MykgewogICAgICAgICAvKiB0YmlfY29tcGF0aWJpbGl0eSBpcyBvbmx5IHZhbGlkIG9uIDgyNTQzICovCi0gICAgICAgIGh3LT50YmlfY29tcGF0aWJpbGl0eV9lbiA9IEZBTFNFOworICAgICAgICBody0+dGJpX2NvbXBhdGliaWxpdHlfZW4gPSBmYWxzZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKQEAgLTUxMyw3ICs1MTQsNyBAQAogICAgICAgICAgICAgaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19UQklNT0RFKSB7CiAgICAgICAgICAgICAgICAgaHctPm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyOwogICAgICAgICAgICAgICAgIC8qIHRiaV9jb21wYXRpYmlsaXR5IG5vdCB2YWxpZCBvbiBmaWJlciAqLwotICAgICAgICAgICAgICAgIGh3LT50YmlfY29tcGF0aWJpbGl0eV9lbiA9IEZBTFNFOworICAgICAgICAgICAgICAgIGh3LT50YmlfY29tcGF0aWJpbGl0eV9lbiA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBody0+bWVkaWFfdHlwZSA9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyOwogICAgICAgICAgICAgfQpAQCAtNTI3LDE3ICs1MjgsMTcgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9yZXNldF9odyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGN0cmw7Ci0gICAgdWludDMyX3QgY3RybF9leHQ7Ci0gICAgdWludDMyX3QgaWNyOwotICAgIHVpbnQzMl90IG1hbmM7Ci0gICAgdWludDMyX3QgbGVkX2N0cmw7Ci0gICAgdWludDMyX3QgdGltZW91dDsKLSAgICB1aW50MzJfdCBleHRjbmZfY3RybDsKLSAgICBpbnQzMl90IHJldF92YWw7CisgICAgdTMyIGN0cmw7CisgICAgdTMyIGN0cmxfZXh0OworICAgIHUzMiBpY3I7CisgICAgdTMyIG1hbmM7CisgICAgdTMyIGxlZF9jdHJsOworICAgIHUzMiB0aW1lb3V0OworICAgIHUzMiBleHRjbmZfY3RybDsKKyAgICBzMzIgcmV0X3ZhbDsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfcmVzZXRfaHciKTsKIApAQCAtNTY5LDcgKzU3MCw3IEBACiAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOwogCiAgICAgLyogVGhlIHRiaV9jb21wYXRpYmlsaXR5X29uIEZsYWcgbXVzdCBiZSBjbGVhcmVkIHdoZW4gUmN0bCBpcyBjbGVhcmVkLiAqLwotICAgIGh3LT50YmlfY29tcGF0aWJpbGl0eV9vbiA9IEZBTFNFOworICAgIGh3LT50YmlfY29tcGF0aWJpbGl0eV9vbiA9IGZhbHNlOwogCiAgICAgLyogRGVsYXkgdG8gYWxsb3cgYW55IG91dHN0YW5kaW5nIFBDSSB0cmFuc2FjdGlvbnMgdG8gY29tcGxldGUgYmVmb3JlCiAgICAgICogcmVzZXR0aW5nIHRoZSBkZXZpY2UKQEAgLTY4Miw3ICs2ODMsNyBAQAogICAgICAgICAgICAgbXNsZWVwKDIwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGUxMDAwXzgyNTczOgotICAgICAgICAgICAgaWYgKGUxMDAwX2lzX29uYm9hcmRfbnZtX2VlcHJvbShodykgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIGlmICghZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tKGh3KSkgewogICAgICAgICAgICAgICAgIHVkZWxheSgxMCk7CiAgICAgICAgICAgICAgICAgY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTF9FWFQpOwogICAgICAgICAgICAgICAgIGN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX0VFX1JTVDsKQEAgLTcyOSw3ICs3MzAsNyBAQAogICAgIH0KIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewotICAgICAgICB1aW50MzJfdCBrYWIgPSBFMTAwMF9SRUFEX1JFRyhodywgS0FCR1RYRCk7CisgICAgICAgIHUzMiBrYWIgPSBFMTAwMF9SRUFEX1JFRyhodywgS0FCR1RYRCk7CiAgICAgICAgIGthYiB8PSBFMTAwMF9LQUJHVFhEX0JHU1FMQklBUzsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBLQUJHVFhELCBrYWIpOwogICAgIH0KQEAgLTc1MSwxMCArNzUyLDEwIEBACiB7CiAgICAgaWYgKChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpICYmICghaHctPmluaXRpYWxpemVfaHdfYml0c19kaXNhYmxlKSkgewogICAgICAgICAvKiBTZXR0aW5ncyBjb21tb24gdG8gYWxsIFBDSS1leHByZXNzIHNpbGljb24gKi8KLSAgICAgICAgdWludDMyX3QgcmVnX2N0cmwsIHJlZ19jdHJsX2V4dDsKLSAgICAgICAgdWludDMyX3QgcmVnX3RhcmMwLCByZWdfdGFyYzE7Ci0gICAgICAgIHVpbnQzMl90IHJlZ190Y3RsOwotICAgICAgICB1aW50MzJfdCByZWdfdHhkY3RsLCByZWdfdHhkY3RsMTsKKyAgICAgICAgdTMyIHJlZ19jdHJsLCByZWdfY3RybF9leHQ7CisgICAgICAgIHUzMiByZWdfdGFyYzAsIHJlZ190YXJjMTsKKyAgICAgICAgdTMyIHJlZ190Y3RsOworICAgICAgICB1MzIgcmVnX3R4ZGN0bCwgcmVnX3R4ZGN0bDE7CiAKICAgICAgICAgLyogbGluayBhdXRvbmVnb3RpYXRpb24vc3luYyB3b3JrYXJvdW5kcyAqLwogICAgICAgICByZWdfdGFyYzAgPSBFMTAwMF9SRUFEX1JFRyhodywgVEFSQzApOwpAQCAtODY1LDE1ICs4NjYsMTUgQEAKICAqIGNvbmZpZ3VyYXRpb24gYW5kIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gQ2xlYXJzIGFsbCBvbi1jaGlwIGNvdW50ZXJzLiBMZWF2ZXMKICAqIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cyBkaXNhYmxlZCBhbmQgdW5pbml0aWFsaXplZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3MzMgogZTEwMDBfaW5pdF9odyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGN0cmw7Ci0gICAgdWludDMyX3QgaTsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDMyX3QgbXRhX3NpemU7Ci0gICAgdWludDMyX3QgcmVnX2RhdGE7Ci0gICAgdWludDMyX3QgY3RybF9leHQ7CisgICAgdTMyIGN0cmw7CisgICAgdTMyIGk7CisgICAgczMyIHJldF92YWw7CisgICAgdTMyIG10YV9zaXplOworICAgIHUzMiByZWdfZGF0YTsKKyAgICB1MzIgY3RybF9leHQ7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2luaXRfaHciKTsKIApAQCAtMTAxOSw3ICsxMDIwLDcgQEAKIAogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykgewotICAgICAgICB1aW50MzJfdCBnY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgR0NSKTsKKyAgICAgICAgdTMyIGdjciA9IEUxMDAwX1JFQURfUkVHKGh3LCBHQ1IpOwogICAgICAgICBnY3IgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBHQ1IsIGdjcik7CiAgICAgfQpAQCAtMTA1MywxMSArMTA1NCwxMSBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2FkanVzdF9zZXJkZXNfYW1wbGl0dWRlKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDE2X3QgZWVwcm9tX2RhdGE7Ci0gICAgaW50MzJfdCAgcmV0X3ZhbDsKKyAgICB1MTYgZWVwcm9tX2RhdGE7CisgICAgczMyICByZXRfdmFsOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9hZGp1c3Rfc2VyZGVzX2FtcGxpdHVkZSIpOwogCkBAIC0xMDk5LDEyICsxMTAwLDEyIEBACiAgKiBlc3RhYmxpc2hlZC4gQXNzdW1lcyB0aGUgaGFyZHdhcmUgaGFzIHByZXZpb3VzbHkgYmVlbiByZXNldCBhbmQgdGhlCiAgKiB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIgYXJlIG5vdCBlbmFibGVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9zZXR1cF9saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgY3RybF9leHQ7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IGVlcHJvbV9kYXRhOworICAgIHUzMiBjdHJsX2V4dDsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICB1MTYgZWVwcm9tX2RhdGE7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldHVwX2xpbmsiKTsKIApAQCAtMTIzMiwxNSArMTIzMywxNSBAQAogICogbGluay4gQXNzdW1lcyB0aGUgaGFyZHdhcmUgaGFzIGJlZW4gcHJldmlvdXNseSByZXNldCBhbmQgdGhlIHRyYW5zbWl0dGVyCiAgKiBhbmQgcmVjZWl2ZXIgYXJlIG5vdCBlbmFibGVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgY3RybDsKLSAgICB1aW50MzJfdCBzdGF0dXM7Ci0gICAgdWludDMyX3QgdHhjdyA9IDA7Ci0gICAgdWludDMyX3QgaTsKLSAgICB1aW50MzJfdCBzaWduYWwgPSAwOwotICAgIGludDMyX3QgcmV0X3ZhbDsKKyAgICB1MzIgY3RybDsKKyAgICB1MzIgc3RhdHVzOworICAgIHUzMiB0eGN3ID0gMDsKKyAgICB1MzIgaTsKKyAgICB1MzIgc2lnbmFsID0gMDsKKyAgICBzMzIgcmV0X3ZhbDsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmsiKTsKIApAQCAtMTM3OSwxMiArMTM4MCwxMiBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2NvcHBlcl9saW5rX3ByZWNvbmZpZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGN0cmw7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOworICAgIHUzMiBjdHJsOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfcHJlY29uZmlnIik7CiAKQEAgLTE0MjgsNyArMTQyOSw3IEBACiAgICAgaWYgKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0MyB8fAogICAgICAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDEgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3IHx8CiAgICAgICAgIGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MV9yZXZfMiB8fCBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDdfcmV2XzIpCi0gICAgICAgIGh3LT5waHlfcmVzZXRfZGlzYWJsZSA9IEZBTFNFOworICAgICAgICBody0+cGh5X3Jlc2V0X2Rpc2FibGUgPSBmYWxzZTsKIAogICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC0xNDM5LDEyICsxNDQwLDEyIEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfY29wcGVyX2xpbmtfaWdwX3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgbGVkX2N0cmw7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOworICAgIHUzMiBsZWRfY3RybDsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICB1MTYgcGh5X2RhdGE7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvcHBlcl9saW5rX2lncF9zZXR1cCIpOwogCkBAIC0xNDcwLDcgKzE0NzEsNyBAQAogICAgIC8qIFRoZSBOVk0gc2V0dGluZ3Mgd2lsbCBjb25maWd1cmUgTFBMVSBpbiBEMyBmb3IgSUdQMiBhbmQgSUdQMyBQSFlzICovCiAgICAgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwKSB7CiAgICAgICAgIC8qIGRpc2FibGUgbHBsdSBkMyBkdXJpbmcgZHJpdmVyIGluaXQgKi8KLSAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3NldF9kM19scGx1X3N0YXRlKGh3LCBGQUxTRSk7CisgICAgICAgIHJldF92YWwgPSBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZShodywgZmFsc2UpOwogICAgICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICAgICAgREVCVUdPVVQoIkVycm9yIERpc2FibGluZyBMUExVIEQzXG4iKTsKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwpAQCAtMTQ3OCw3ICsxNDc5LDcgQEAKICAgICB9CiAKICAgICAvKiBkaXNhYmxlIGxwbHUgZDAgZHVyaW5nIGRyaXZlciBpbml0ICovCi0gICAgcmV0X3ZhbCA9IGUxMDAwX3NldF9kMF9scGx1X3N0YXRlKGh3LCBGQUxTRSk7CisgICAgcmV0X3ZhbCA9IGUxMDAwX3NldF9kMF9scGx1X3N0YXRlKGh3LCBmYWxzZSk7CiAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgREVCVUdPVVQoIkVycm9yIERpc2FibGluZyBMUExVIEQwXG4iKTsKICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC0xNTg2LDEyICsxNTg3LDEyIEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfY29wcGVyX2xpbmtfZ2dwX3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOwotICAgIHVpbnQzMl90IHJlZ19kYXRhOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKKyAgICB1MzIgcmVnX2RhdGE7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cCIpOwogCkBAIC0xNjkxLDcgKzE2OTIsNyBAQAogICAgICAgICAgKiBmaXJtd2FyZSB3aWxsIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGVtLiAgV2Ugb25seSBpbml0aWFsaXplCiAgICAgICAgICAqIHRoZW0gaWYgdGhlIEhXIGlzIG5vdCBpbiBJQU1UIG1vZGUuCiAgICAgICAgICAqLwotICAgICAgICBpZiAoZTEwMDBfY2hlY2tfbW5nX21vZGUoaHcpID09IEZBTFNFKSB7CisgICAgICAgIGlmICghZTEwMDBfY2hlY2tfbW5nX21vZGUoaHcpKSB7CiAgICAgICAgICAgICAvKiBFbmFibGUgRWxlY3RyaWNhbCBJZGxlIG9uIHRoZSBQSFkgKi8KICAgICAgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfUE1DUl9FTkFCTEVfRUxFQ1RSSUNBTF9JRExFOwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX1BXUl9NR01UX0NUUkwsCkBAIC0xNzM0LDExICsxNzM1LDExIEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfY29wcGVyX2xpbmtfbWdwX3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfbWdwX3NldHVwIik7CiAKQEAgLTE4MzgsMTEgKzE4MzksMTEgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9jb3BwZXJfbGlua19hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfYXV0b25lZyIpOwogCkBAIC0xODkyLDcgKzE4OTMsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaHctPmdldF9saW5rX3N0YXR1cyA9IFRSVUU7CisgICAgaHctPmdldF9saW5rX3N0YXR1cyA9IHRydWU7CiAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KQEAgLTE5MDksMTAgKzE5MTAsMTAgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9jb3BwZXJfbGlua19wb3N0Y29uZmlnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsOworICAgIHMzMiByZXRfdmFsOwogICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfcG9zdGNvbmZpZyIpOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkgewpAQCAtMTkzMiw3ICsxOTMzLDcgQEAKIAogICAgIC8qIENvbmZpZyBEU1AgdG8gaW1wcm92ZSBHaWdhIGxpbmsgcXVhbGl0eSAqLwogICAgIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCkgewotICAgICAgICByZXRfdmFsID0gZTEwMDBfY29uZmlnX2RzcF9hZnRlcl9saW5rX2NoYW5nZShodywgVFJVRSk7CisgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb25maWdfZHNwX2FmdGVyX2xpbmtfY2hhbmdlKGh3LCB0cnVlKTsKICAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBDb25maWd1cmluZyBEU1AgYWZ0ZXIgbGluayB1cFxuIik7CiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKQEAgLTE5NDcsMTMgKzE5NDgsMTMgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9zZXR1cF9jb3BwZXJfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBpOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOwotICAgIHVpbnQxNl90IHJlZ19kYXRhOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBpOworICAgIHUxNiBwaHlfZGF0YTsKKyAgICB1MTYgcmVnX2RhdGE7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldHVwX2NvcHBlcl9saW5rIik7CiAKQEAgLTIwNjEsMTIgKzIwNjIsMTIgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTBfMTAwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQxNl90IGR1cGxleCkKK3N0YXRpYyBzMzIKK2UxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMF8xMDAoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IGR1cGxleCkKIHsKLSAgICBpbnQzMl90IHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOwotICAgIHVpbnQzMl90IHRpcGc7Ci0gICAgdWludDE2X3QgcmVnX2RhdGE7CisgICAgczMyIHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOworICAgIHUzMiB0aXBnOworICAgIHUxNiByZWdfZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY29uZmlndXJlX2ttcm5fZm9yXzEwXzEwMCIpOwogCkBAIC0yMDk3LDEyICsyMDk4LDEyIEBACiAgICAgcmV0dXJuIHJldF92YWw7CiB9CiAKLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7Ci0gICAgdWludDE2X3QgcmVnX2RhdGE7Ci0gICAgdWludDMyX3QgdGlwZzsKKyAgICBzMzIgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7CisgICAgdTE2IHJlZ19kYXRhOworICAgIHUzMiB0aXBnOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMCIpOwogCkBAIC0yMTM0LDEyICsyMTM1LDEyIEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX3BoeV9zZXR1cF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IG1paV9hdXRvbmVnX2Fkdl9yZWc7Ci0gICAgdWludDE2X3QgbWlpXzEwMDB0X2N0cmxfcmVnOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBtaWlfYXV0b25lZ19hZHZfcmVnOworICAgIHUxNiBtaWlfMTAwMHRfY3RybF9yZWc7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3BoeV9zZXR1cF9hdXRvbmVnIik7CiAKQEAgLTIyODMsMTUgKzIyODQsMTUgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgY3RybDsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgbWlpX2N0cmxfcmVnOwotICAgIHVpbnQxNl90IG1paV9zdGF0dXNfcmVnOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOwotICAgIHVpbnQxNl90IGk7CisgICAgdTMyIGN0cmw7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IG1paV9jdHJsX3JlZzsKKyAgICB1MTYgbWlpX3N0YXR1c19yZWc7CisgICAgdTE2IHBoeV9kYXRhOworICAgIHUxNiBpOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4Iik7CiAKQEAgLTI1MzcsNyArMjUzOCw3IEBACiB2b2lkCiBlMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3Qoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCB0Y3RsLCBjb2xsX2Rpc3Q7CisgICAgdTMyIHRjdGwsIGNvbGxfZGlzdDsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0Iik7CiAKQEAgLTI1NjQsMTIgKzI1NjUsMTIgQEAKICogVGhlIGNvbnRlbnRzIG9mIHRoZSBQSFkgcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIG5lZWQgdG8KICogYmUgcGFzc2VkIGluLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgY3RybDsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgcGh5X2RhdGE7CisgICAgdTMyIGN0cmw7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IHBoeV9kYXRhOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9jb25maWdfbWFjX3RvX3BoeSIpOwogCkBAIC0yNjIzLDEwICsyNjI0LDEwIEBACiAgKiBieSB0aGUgUEhZIHJhdGhlciB0aGFuIHRoZSBNQUMuIFNvZnR3YXJlIG11c3QgYWxzbyBjb25maWd1cmUgdGhlc2UKICAqIGJpdHMgd2hlbiBsaW5rIGlzIGZvcmNlZCBvbiBhIGZpYmVyIGNvbm5lY3Rpb24uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX2ZvcmNlX21hY19mYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGN0cmw7CisgICAgdTMyIGN0cmw7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2ZvcmNlX21hY19mYyIpOwogCkBAIC0yNjkwLDE1ICsyNjkxLDE1IEBACiAgKiBiYXNlZCBvbiB0aGUgZmxvdyBjb250cm9sIG5lZ290aWF0ZWQgYnkgdGhlIFBIWS4gSW4gVEJJIG1vZGUsIHRoZSBURkNFCiAgKiBhbmQgUkZDRSBiaXRzIHdpbGwgYmUgYXV0b21hdGljYWx5IHNldCB0byB0aGUgbmVnb3RpYXRlZCBmbG93IGNvbnRyb2wgbW9kZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBtaWlfc3RhdHVzX3JlZzsKLSAgICB1aW50MTZfdCBtaWlfbndheV9hZHZfcmVnOwotICAgIHVpbnQxNl90IG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnOwotICAgIHVpbnQxNl90IHNwZWVkOwotICAgIHVpbnQxNl90IGR1cGxleDsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICB1MTYgbWlpX3N0YXR1c19yZWc7CisgICAgdTE2IG1paV9ud2F5X2Fkdl9yZWc7CisgICAgdTE2IG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnOworICAgIHUxNiBzcGVlZDsKKyAgICB1MTYgZHVwbGV4OwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cCIpOwogCkBAIC0yODk1LDE3ICsyODk2LDE3IEBACiAgKgogICogQ2FsbGVkIGJ5IGFueSBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIGNoZWNrIHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgYWRhcHRlci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3MzMgogZTEwMDBfY2hlY2tfZm9yX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCByeGN3ID0gMDsKLSAgICB1aW50MzJfdCBjdHJsOwotICAgIHVpbnQzMl90IHN0YXR1czsKLSAgICB1aW50MzJfdCByY3RsOwotICAgIHVpbnQzMl90IGljcjsKLSAgICB1aW50MzJfdCBzaWduYWwgPSAwOwotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICB1MzIgcnhjdyA9IDA7CisgICAgdTMyIGN0cmw7CisgICAgdTMyIHN0YXR1czsKKyAgICB1MzIgcmN0bDsKKyAgICB1MzIgaWNyOworICAgIHUzMiBzaWduYWwgPSAwOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY2hlY2tfZm9yX2xpbmsiKTsKIApAQCAtMjkyMyw3ICsyOTI0LDcgQEAKICAgICAgICAgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKICAgICAgICAgICAgIHNpZ25hbCA9IChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0NCkgPyBFMTAwMF9DVFJMX1NXRFBJTjEgOiAwOwogICAgICAgICAgICAgaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkKLSAgICAgICAgICAgICAgICBody0+Z2V0X2xpbmtfc3RhdHVzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgaHctPmdldF9saW5rX3N0YXR1cyA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yOTQ3LDcgKzI5NDgsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgaWYgKHBoeV9kYXRhICYgTUlJX1NSX0xJTktfU1RBVFVTKSB7Ci0gICAgICAgICAgICBody0+Z2V0X2xpbmtfc3RhdHVzID0gRkFMU0U7CisgICAgICAgICAgICBody0+Z2V0X2xpbmtfc3RhdHVzID0gZmFsc2U7CiAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSB3YXMgRG93blNoaWZ0LCBtdXN0IGJlIGNoZWNrZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICAgICAgICAgICAqIGxpbmstdXAgKi8KICAgICAgICAgICAgIGUxMDAwX2NoZWNrX2Rvd25zaGlmdChodyk7CkBAIC0yOTczLDcgKzI5NzQsNyBAQAogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBObyBsaW5rIGRldGVjdGVkICovCi0gICAgICAgICAgICBlMTAwMF9jb25maWdfZHNwX2FmdGVyX2xpbmtfY2hhbmdlKGh3LCBGQUxTRSk7CisgICAgICAgICAgICBlMTAwMF9jb25maWdfZHNwX2FmdGVyX2xpbmtfY2hhbmdlKGh3LCBmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCkBAIC0yOTgzLDcgKzI5ODQsNyBAQAogICAgICAgICBpZiAoIWh3LT5hdXRvbmVnKSByZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CiAKICAgICAgICAgLyogb3B0aW1pemUgdGhlIGRzcCBzZXR0aW5ncyBmb3IgdGhlIGlncCBwaHkgKi8KLSAgICAgICAgZTEwMDBfY29uZmlnX2RzcF9hZnRlcl9saW5rX2NoYW5nZShodywgVFJVRSk7CisgICAgICAgIGUxMDAwX2NvbmZpZ19kc3BfYWZ0ZXJfbGlua19jaGFuZ2UoaHcsIHRydWUpOwogCiAgICAgICAgIC8qIFdlIGhhdmUgYSBNODhFMTAwMCBQSFkgYW5kIEF1dG8tTmVnIGlzIGVuYWJsZWQuICBJZiB3ZQogICAgICAgICAgKiBoYXZlIFNpIG9uIGJvYXJkIHRoYXQgaXMgODI1NDQgb3IgbmV3ZXIsIEF1dG8KQEAgLTMwMjEsNyArMzAyMiw3IEBACiAgICAgICAgICAqIGF0IGdpZ2FiaXQgc3BlZWQsIHdlIHR1cm4gb24gVEJJIGNvbXBhdGliaWxpdHkuCiAgICAgICAgICAqLwogICAgICAgICBpZiAoaHctPnRiaV9jb21wYXRpYmlsaXR5X2VuKSB7Ci0gICAgICAgICAgICB1aW50MTZfdCBzcGVlZCwgZHVwbGV4OworICAgICAgICAgICAgdTE2IHNwZWVkLCBkdXBsZXg7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoaHcsICZzcGVlZCwgJmR1cGxleCk7CiAgICAgICAgICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBnZXR0aW5nIGxpbmsgc3BlZWQgYW5kIGR1cGxleFxuIik7CkBAIC0zMDM2LDcgKzMwMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICByY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOwogICAgICAgICAgICAgICAgICAgICByY3RsICY9IH5FMTAwMF9SQ1RMX1NCUDsKICAgICAgICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKLSAgICAgICAgICAgICAgICAgICAgaHctPnRiaV9jb21wYXRpYmlsaXR5X29uID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIGh3LT50YmlfY29tcGF0aWJpbGl0eV9vbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogSWYgVEJJIGNvbXBhdGliaWxpdHkgaXMgd2FzIHByZXZpb3VzbHkgb2ZmLCB0dXJuIGl0IG9uLiBGb3IKQEAgLTMwNDUsNyArMzA0Niw3IEBACiAgICAgICAgICAgICAgICAgICogd2lsbCBsb29rIGxpa2UgQ1JDIGVycm9ycyB0byB0byB0aGUgaGFyZHdhcmUuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKCFody0+dGJpX2NvbXBhdGliaWxpdHlfb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaHctPnRiaV9jb21wYXRpYmlsaXR5X29uID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgaHctPnRiaV9jb21wYXRpYmlsaXR5X29uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKICAgICAgICAgICAgICAgICAgICAgcmN0bCB8PSBFMTAwMF9SQ1RMX1NCUDsKICAgICAgICAgICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKQEAgLTMwOTgsNyArMzA5OSw3IEBACiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVFhDVywgaHctPnR4Y3cpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLSAgICAgICAgaHctPnNlcmRlc19saW5rX2Rvd24gPSBGQUxTRTsKKyAgICAgICAgaHctPnNlcmRlc19saW5rX2Rvd24gPSBmYWxzZTsKICAgICB9CiAgICAgLyogSWYgd2UgZm9yY2UgbGluayBmb3Igbm9uLWF1dG8tbmVnb3RpYXRpb24gc3dpdGNoLCBjaGVjayBsaW5rIHN0YXR1cwogICAgICAqIGJhc2VkIG9uIE1BQyBzeW5jaHJvbml6YXRpb24gZm9yIGludGVybmFsIHNlcmRlcyBtZWRpYSB0eXBlLgpAQCAtMzEwOSwxMSArMzExMCwxMSBAQAogICAgICAgICB1ZGVsYXkoMTApOwogICAgICAgICBpZiAoRTEwMDBfUlhDV19TWU5DSCAmIEUxMDAwX1JFQURfUkVHKGh3LCBSWENXKSkgewogICAgICAgICAgICAgaWYgKCEocnhjdyAmIEUxMDAwX1JYQ1dfSVYpKSB7Ci0gICAgICAgICAgICAgICAgaHctPnNlcmRlc19saW5rX2Rvd24gPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBody0+c2VyZGVzX2xpbmtfZG93biA9IGZhbHNlOwogICAgICAgICAgICAgICAgIERFQlVHT1VUKCJTRVJERVM6IExpbmsgaXMgdXAuXG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGh3LT5zZXJkZXNfbGlua19kb3duID0gVFJVRTsKKyAgICAgICAgICAgIGh3LT5zZXJkZXNfbGlua19kb3duID0gdHJ1ZTsKICAgICAgICAgICAgIERFQlVHT1VUKCJTRVJERVM6IExpbmsgaXMgZG93bi5cbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEzMSwxNCArMzEzMiwxNCBAQAogICogc3BlZWQgLSBTcGVlZCBvZiB0aGUgY29ubmVjdGlvbgogICogZHVwbGV4IC0gRHVwbGV4IHNldHRpbmcgb2YgdGhlIGNvbm5lY3Rpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3MzMgogZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpkdXBsZXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkdXBsZXgpCiB7Ci0gICAgdWludDMyX3Qgc3RhdHVzOwotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICB1MzIgc3RhdHVzOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgiKTsKIApAQCAtMzIxMywxMiArMzIxNCwxMiBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3dhaXRfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBpOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBpOworICAgIHUxNiBwaHlfZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfd2FpdF9hdXRvbmVnIik7CiAgICAgREVCVUdPVVQoIldhaXRpbmcgZm9yIEF1dG8tTmVnIHRvIGNvbXBsZXRlLlxuIik7CkBAIC0zMjUwLDcgKzMyNTEsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKIGUxMDAwX3JhaXNlX21kaV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmN0cmwpCisgICAgICAgICAgICAgICAgICAgIHUzMiAqY3RybCkKIHsKICAgICAvKiBSYWlzZSB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIE1hbmFnZW1lbnQgRGF0YSBDbG9jayAoYnkgc2V0dGluZyB0aGUgTURDCiAgICAgICogYml0KSwgYW5kIHRoZW4gZGVsYXkgMTAgbWljcm9zZWNvbmRzLgpAQCAtMzI2OCw3ICszMjY5LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCiBlMTAwMF9sb3dlcl9tZGlfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpjdHJsKQorICAgICAgICAgICAgICAgICAgICB1MzIgKmN0cmwpCiB7CiAgICAgLyogTG93ZXIgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKGJ5IGNsZWFyaW5nIHRoZSBNREMKICAgICAgKiBiaXQpLCBhbmQgdGhlbiBkZWxheSAxMCBtaWNyb3NlY29uZHMuCkBAIC0zMjg5LDExICszMjkwLDExIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgY291bnQpCiB7Ci0gICAgdWludDMyX3QgY3RybDsKLSAgICB1aW50MzJfdCBtYXNrOworICAgIHUzMiBjdHJsOworICAgIHUzMiBtYXNrOwogCiAgICAgLyogV2UgbmVlZCB0byBzaGlmdCAiY291bnQiIG51bWJlciBvZiBiaXRzIG91dCB0byB0aGUgUEhZLiBTbywgdGhlIHZhbHVlCiAgICAgICogaW4gdGhlICJkYXRhIiBwYXJhbWV0ZXIgd2lsbCBiZSBzaGlmdGVkIG91dCB0byB0aGUgUEhZIG9uZSBiaXQgYXQgYQpAQCAtMzMzNywxMiArMzMzOCwxMiBAQAogKgogKiBCaXRzIGFyZSBzaGlmdGVkIGluIGluIE1TQiB0byBMU0Igb3JkZXIuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdWludDE2X3QKK3N0YXRpYyB1MTYKIGUxMDAwX3NoaWZ0X2luX21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgY3RybDsKLSAgICB1aW50MTZfdCBkYXRhID0gMDsKLSAgICB1aW50OF90IGk7CisgICAgdTMyIGN0cmw7CisgICAgdTE2IGRhdGEgPSAwOworICAgIHU4IGk7CiAKICAgICAvKiBJbiBvcmRlciB0byByZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgUEhZLCB3ZSBuZWVkIHRvIHNoaWZ0IGluIGEgdG90YWwKICAgICAgKiBvZiAxOCBiaXRzIGZyb20gdGhlIFBIWS4gVGhlIGZpcnN0IHR3byBiaXQgKHR1cm5hcm91bmQpIHRpbWVzIGFyZSB1c2VkCkBAIC0zMzgzLDEzICszMzg0LDEzIEBACiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBtYXNrKQorc3RhdGljIHMzMgorZTEwMDBfc3dmd19zeW5jX2FjcXVpcmUoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1hc2spCiB7Ci0gICAgdWludDMyX3Qgc3dmd19zeW5jID0gMDsKLSAgICB1aW50MzJfdCBzd21hc2sgPSBtYXNrOwotICAgIHVpbnQzMl90IGZ3bWFzayA9IG1hc2sgPDwgMTY7Ci0gICAgaW50MzJfdCB0aW1lb3V0ID0gMjAwOworICAgIHUzMiBzd2Z3X3N5bmMgPSAwOworICAgIHUzMiBzd21hc2sgPSBtYXNrOworICAgIHUzMiBmd21hc2sgPSBtYXNrIDw8IDE2OworICAgIHMzMiB0aW1lb3V0ID0gMjAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZSIpOwogCkBAIC0zNDI4LDEwICszNDI5LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1lMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBtYXNrKQorZTEwMDBfc3dmd19zeW5jX3JlbGVhc2Uoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1hc2spCiB7Ci0gICAgdWludDMyX3Qgc3dmd19zeW5jOwotICAgIHVpbnQzMl90IHN3bWFzayA9IG1hc2s7CisgICAgdTMyIHN3Zndfc3luYzsKKyAgICB1MzIgc3dtYXNrID0gbWFzazsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UiKTsKIApAQCAtMzQ2MywxMyArMzQ2NCwxMyBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiByZWdfYWRkciAtIGFkZHJlc3Mgb2YgdGhlIFBIWSByZWdpc3RlciB0byByZWFkCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlZ19hZGRyLAotICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwaHlfZGF0YSkKKyAgICAgICAgICAgICAgICAgICB1MzIgcmVnX2FkZHIsCisgICAgICAgICAgICAgICAgICAgdTE2ICpwaHlfZGF0YSkKIHsKLSAgICB1aW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHN3Znc7CisgICAgdTMyIHJldF92YWw7CisgICAgdTE2IHN3Znc7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3JlYWRfcGh5X3JlZyIpOwogCkBAIC0zNDg3LDcgKzM0ODgsNyBAQAogICAgICAgICBody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8yKSAmJgogICAgICAgIChyZWdfYWRkciA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2V4KGh3LCBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KXJlZ19hZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUxNilyZWdfYWRkcik7CiAgICAgICAgIGlmIChyZXRfdmFsKSB7CiAgICAgICAgICAgICBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShodywgc3dmdyk7CiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKQEAgLTM0OTgsMTQgKzM0OTksMTQgQEAKICAgICAgICAgICAgIC8qIFNlbGVjdCBDb25maWd1cmF0aW9uIFBhZ2UgKi8KICAgICAgICAgICAgIGlmICgocmVnX2FkZHIgJiBNQVhfUEhZX1JFR19BRERSRVNTKSA8IEdHODI1NjNfTUlOX0FMVF9SRUcpIHsKICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgR0c4MjU2M19QSFlfUEFHRV9TRUxFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoKHVpbnQxNl90KXJlZ19hZGRyID4+IEdHODI1NjNfUEFHRV9TSElGVCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2KSgodTE2KXJlZ19hZGRyID4+IEdHODI1NjNfUEFHRV9TSElGVCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBVc2UgQWx0ZXJuYXRpdmUgUGFnZSBTZWxlY3QgcmVnaXN0ZXIgdG8gYWNjZXNzCiAgICAgICAgICAgICAgICAgICogcmVnaXN0ZXJzIDMwIGFuZCAzMQogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2V4KGh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdHODI1NjNfUEhZX1BBR0VfU0VMRUNUX0FMVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSgodWludDE2X3QpcmVnX2FkZHIgPj4gR0c4MjU2M19QQUdFX1NISUZUKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYpKCh1MTYpcmVnX2FkZHIgPj4gR0c4MjU2M19QQUdFX1NISUZUKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChyZXRfdmFsKSB7CkBAIC0zNTIyLDEzICszNTIzLDEzIEBACiAgICAgcmV0dXJuIHJldF92YWw7CiB9CiAKLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9yZWFkX3BoeV9yZWdfZXgoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgcmVnX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBoeV9kYXRhKQorc3RhdGljIHMzMgorZTEwMDBfcmVhZF9waHlfcmVnX2V4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWdfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICB1MTYgKnBoeV9kYXRhKQogewotICAgIHVpbnQzMl90IGk7Ci0gICAgdWludDMyX3QgbWRpYyA9IDA7Ci0gICAgY29uc3QgdWludDMyX3QgcGh5X2FkZHIgPSAxOworICAgIHUzMiBpOworICAgIHUzMiBtZGljID0gMDsKKyAgICBjb25zdCB1MzIgcGh5X2FkZHIgPSAxOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWFkX3BoeV9yZWdfZXgiKTsKIApAQCAtMzU2Miw3ICszNTYzLDcgQEAKICAgICAgICAgICAgIERFQlVHT1VUKCJNREkgRXJyb3JcbiIpOwogICAgICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogICAgICAgICB9Ci0gICAgICAgICpwaHlfZGF0YSA9ICh1aW50MTZfdCkgbWRpYzsKKyAgICAgICAgKnBoeV9kYXRhID0gKHUxNikgbWRpYzsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBXZSBtdXN0IGZpcnN0IHNlbmQgYSBwcmVhbWJsZSB0aHJvdWdoIHRoZSBNRElPIHBpbiB0byBzaWduYWwgdGhlCiAgICAgICAgICAqIGJlZ2lubmluZyBvZiBhbiBNSUkgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyAzMgpAQCAtMzYwMiwxMiArMzYwMywxMiBAQAogKiByZWdfYWRkciAtIGFkZHJlc3Mgb2YgdGhlIFBIWSByZWdpc3RlciB0byB3cml0ZQogKiBkYXRhIC0gZGF0YSB0byB3cml0ZSB0byB0aGUgUEhZCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90Ci1lMTAwMF93cml0ZV9waHlfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLAotICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwaHlfZGF0YSkKK3MzMgorZTEwMDBfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnX2FkZHIsCisgICAgICAgICAgICAgICAgICAgIHUxNiBwaHlfZGF0YSkKIHsKLSAgICB1aW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHN3Znc7CisgICAgdTMyIHJldF92YWw7CisgICAgdTE2IHN3Znc7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3dyaXRlX3BoeV9yZWciKTsKIApAQCAtMzYyNSw3ICszNjI2LDcgQEAKICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikgJiYKICAgICAgICAocmVnX2FkZHIgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdClyZWdfYWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYpcmVnX2FkZHIpOwogICAgICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICAgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIHN3ZncpOwogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC0zNjM2LDE0ICszNjM3LDE0IEBACiAgICAgICAgICAgICAvKiBTZWxlY3QgQ29uZmlndXJhdGlvbiBQYWdlICovCiAgICAgICAgICAgICBpZiAoKHJlZ19hZGRyICYgTUFYX1BIWV9SRUdfQUREUkVTUykgPCBHRzgyNTYzX01JTl9BTFRfUkVHKSB7CiAgICAgICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWdfZXgoaHcsIEdHODI1NjNfUEhZX1BBR0VfU0VMRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKCh1aW50MTZfdClyZWdfYWRkciA+PiBHRzgyNTYzX1BBR0VfU0hJRlQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHUxNikoKHUxNilyZWdfYWRkciA+PiBHRzgyNTYzX1BBR0VfU0hJRlQpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogVXNlIEFsdGVybmF0aXZlIFBhZ2UgU2VsZWN0IHJlZ2lzdGVyIHRvIGFjY2VzcwogICAgICAgICAgICAgICAgICAqIHJlZ2lzdGVycyAzMCBhbmQgMzEKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRzgyNTYzX1BIWV9QQUdFX1NFTEVDVF9BTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoKHVpbnQxNl90KXJlZ19hZGRyID4+IEdHODI1NjNfUEFHRV9TSElGVCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2KSgodTE2KXJlZ19hZGRyID4+IEdHODI1NjNfUEFHRV9TSElGVCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocmV0X3ZhbCkgewpAQCAtMzY2MCwxMyArMzY2MSwxMyBAQAogICAgIHJldHVybiByZXRfdmFsOwogfQogCi1zdGF0aWMgaW50MzJfdAotZTEwMDBfd3JpdGVfcGh5X3JlZ19leChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCByZWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgcGh5X2RhdGEpCitzdGF0aWMgczMyCitlMTAwMF93cml0ZV9waHlfcmVnX2V4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWdfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgdTE2IHBoeV9kYXRhKQogewotICAgIHVpbnQzMl90IGk7Ci0gICAgdWludDMyX3QgbWRpYyA9IDA7Ci0gICAgY29uc3QgdWludDMyX3QgcGh5X2FkZHIgPSAxOworICAgIHUzMiBpOworICAgIHUzMiBtZGljID0gMDsKKyAgICBjb25zdCB1MzIgcGh5X2FkZHIgPSAxOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF93cml0ZV9waHlfcmVnX2V4Iik7CiAKQEAgLTM2ODAsNyArMzY4MSw3IEBACiAgICAgICAgICAqIGZvciB0aGUgUEhZIHJlZ2lzdGVyIGluIHRoZSBNREkgQ29udHJvbCByZWdpc3Rlci4gIFRoZSBNQUMgd2lsbCB0YWtlCiAgICAgICAgICAqIGNhcmUgb2YgaW50ZXJmYWNpbmcgd2l0aCB0aGUgUEhZIHRvIHNlbmQgdGhlIGRlc2lyZWQgZGF0YS4KICAgICAgICAgICovCi0gICAgICAgIG1kaWMgPSAoKCh1aW50MzJfdCkgcGh5X2RhdGEpIHwKKyAgICAgICAgbWRpYyA9ICgoKHUzMikgcGh5X2RhdGEpIHwKICAgICAgICAgICAgICAgICAocmVnX2FkZHIgPDwgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHwKICAgICAgICAgICAgICAgICAocGh5X2FkZHIgPDwgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKICAgICAgICAgICAgICAgICAoRTEwMDBfTURJQ19PUF9XUklURSkpOwpAQCAtMzcxNCw3ICszNzE1LDcgQEAKICAgICAgICAgbWRpYyA9ICgoUEhZX1RVUk5BUk9VTkQpIHwgKHJlZ19hZGRyIDw8IDIpIHwgKHBoeV9hZGRyIDw8IDcpIHwKICAgICAgICAgICAgICAgICAoUEhZX09QX1dSSVRFIDw8IDEyKSB8IChQSFlfU09GIDw8IDE0KSk7CiAgICAgICAgIG1kaWMgPDw9IDE2OwotICAgICAgICBtZGljIHw9ICh1aW50MzJfdCkgcGh5X2RhdGE7CisgICAgICAgIG1kaWMgfD0gKHUzMikgcGh5X2RhdGE7CiAKICAgICAgICAgZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKGh3LCBtZGljLCAzMik7CiAgICAgfQpAQCAtMzcyMiwxMyArMzcyMywxMyBAQAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfcmVhZF9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmRhdGEpCisgICAgICAgICAgICAgICAgICAgIHUzMiByZWdfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQogewotICAgIHVpbnQzMl90IHJlZ192YWw7Ci0gICAgdWludDE2X3Qgc3dmdzsKKyAgICB1MzIgcmVnX3ZhbDsKKyAgICB1MTYgc3dmdzsKICAgICBERUJVR0ZVTkMoImUxMDAwX3JlYWRfa21ybl9yZWciKTsKIAogICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSAmJgpAQCAtMzc0OSwxOSArMzc1MCwxOSBAQAogCiAgICAgLyogUmVhZCB0aGUgZGF0YSByZXR1cm5lZCAqLwogICAgIHJlZ192YWwgPSBFMTAwMF9SRUFEX1JFRyhodywgS1VNQ1RSTFNUQSk7Ci0gICAgKmRhdGEgPSAodWludDE2X3QpcmVnX3ZhbDsKKyAgICAqZGF0YSA9ICh1MTYpcmVnX3ZhbDsKIAogICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWdfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGRhdGEpCisgICAgICAgICAgICAgICAgICAgICB1MzIgcmVnX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICB1MTYgZGF0YSkKIHsKLSAgICB1aW50MzJfdCByZWdfdmFsOwotICAgIHVpbnQxNl90IHN3Znc7CisgICAgdTMyIHJlZ192YWw7CisgICAgdTE2IHN3Znc7CiAgICAgREVCVUdGVU5DKCJlMTAwMF93cml0ZV9rbXJuX3JlZyIpOwogCiAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmCkBAIC0zNzg3LDEzICszNzg4LDEzIEBACiAqCiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX3BoeV9od19yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGN0cmwsIGN0cmxfZXh0OwotICAgIHVpbnQzMl90IGxlZF9jdHJsOwotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBzd2Z3OworICAgIHUzMiBjdHJsLCBjdHJsX2V4dDsKKyAgICB1MzIgbGVkX2N0cmw7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IHN3Znc7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3BoeV9od19yZXNldCIpOwogCkBAIC0zODgxLDExICszODgyLDExIEBACiAqCiAqIFNldHMgYml0IDE1IG9mIHRoZSBNSUkgQ29udHJvbCByZWdpc3RlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9waHlfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgcGh5X2RhdGE7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IHBoeV9kYXRhOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9waHlfcmVzZXQiKTsKIApAQCAtMzkzNiw5ICszOTM3LDkgQEAKIHZvaWQKIGUxMDAwX3BoeV9wb3dlcmRvd25fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmVnOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOwotICAgIGludDMyX3QgcmV0cnkgPSAwOworICAgIHMzMiByZWc7CisgICAgdTE2IHBoeV9kYXRhOworICAgIHMzMiByZXRyeSA9IDA7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3BoeV9wb3dlcmRvd25fd29ya2Fyb3VuZCIpOwogCkBAIC0zOTg2LDEzICszOTg3LDEzIEBACiAqCiAqIGh3IC0gc3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfa3VtZXJhbl9sb2NrX2xvc3Nfd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICBpbnQzMl90IHJlZzsKLSAgICBpbnQzMl90IGNudDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICBzMzIgcmVnOworICAgIHMzMiBjbnQ7CisgICAgdTE2IHBoeV9kYXRhOwogCiAgICAgaWYgKGh3LT5rbXJuX2xvY2tfbG9zc193b3JrYXJvdW5kX2Rpc2FibGVkKQogICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKQEAgLTQwMzksMTIgKzQwNDAsMTIgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9kZXRlY3RfZ2lnX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcGh5X2luaXRfc3RhdHVzLCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBoeV9pZF9oaWdoLCBwaHlfaWRfbG93OwotICAgIGJvb2xlYW5fdCBtYXRjaCA9IEZBTFNFOworICAgIHMzMiBwaHlfaW5pdF9zdGF0dXMsIHJldF92YWw7CisgICAgdTE2IHBoeV9pZF9oaWdoLCBwaHlfaWRfbG93OworICAgIGJvb2wgbWF0Y2ggPSBmYWxzZTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfZGV0ZWN0X2dpZ19waHkiKTsKIApAQCAtNDA3NSw0NiArNDA3Niw0NiBAQAogICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgIGh3LT5waHlfaWQgPSAodWludDMyX3QpIChwaHlfaWRfaGlnaCA8PCAxNik7CisgICAgaHctPnBoeV9pZCA9ICh1MzIpIChwaHlfaWRfaGlnaCA8PCAxNik7CiAgICAgdWRlbGF5KDIwKTsKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfSUQyLCAmcGh5X2lkX2xvdyk7CiAgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgaHctPnBoeV9pZCB8PSAodWludDMyX3QpIChwaHlfaWRfbG93ICYgUEhZX1JFVklTSU9OX01BU0spOwotICAgIGh3LT5waHlfcmV2aXNpb24gPSAodWludDMyX3QpIHBoeV9pZF9sb3cgJiB+UEhZX1JFVklTSU9OX01BU0s7CisgICAgaHctPnBoeV9pZCB8PSAodTMyKSAocGh5X2lkX2xvdyAmIFBIWV9SRVZJU0lPTl9NQVNLKTsKKyAgICBody0+cGh5X3JldmlzaW9uID0gKHUzMikgcGh5X2lkX2xvdyAmIH5QSFlfUkVWSVNJT05fTUFTSzsKIAogICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAgICAgY2FzZSBlMTAwMF84MjU0MzoKLSAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTEwMDBfRV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTEwMDBfRV9QSFlfSUQpIG1hdGNoID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU0NDoKLSAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTEwMDBfSV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTEwMDBfSV9QSFlfSUQpIG1hdGNoID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU0MDoKICAgICBjYXNlIGUxMDAwXzgyNTQ1OgogICAgIGNhc2UgZTEwMDBfODI1NDVfcmV2XzM6CiAgICAgY2FzZSBlMTAwMF84MjU0NjoKICAgICBjYXNlIGUxMDAwXzgyNTQ2X3Jldl8zOgotICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBNODhFMTAxMV9JX1BIWV9JRCkgbWF0Y2ggPSBUUlVFOworICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBNODhFMTAxMV9JX1BIWV9JRCkgbWF0Y2ggPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgyNTQxOgogICAgIGNhc2UgZTEwMDBfODI1NDFfcmV2XzI6CiAgICAgY2FzZSBlMTAwMF84MjU0NzoKICAgICBjYXNlIGUxMDAwXzgyNTQ3X3Jldl8yOgotICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBJR1AwMUUxMDAwX0lfUEhZX0lEKSBtYXRjaCA9IFRSVUU7CisgICAgICAgIGlmIChody0+cGh5X2lkID09IElHUDAxRTEwMDBfSV9QSFlfSUQpIG1hdGNoID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU3MzoKLSAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTExMTFfSV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTExMTFfSV9QSFlfSUQpIG1hdGNoID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKLSAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gR0c4MjU2M19FX1BIWV9JRCkgbWF0Y2ggPSBUUlVFOworICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBHRzgyNTYzX0VfUEhZX0lEKSBtYXRjaCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgZTEwMDBfaWNoOGxhbjoKLSAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gSUdQMDNFMTAwMF9FX1BIWV9JRCkgbWF0Y2ggPSBUUlVFOwotICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBJRkVfRV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKLSAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gSUZFX1BMVVNfRV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKLSAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gSUZFX0NfRV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gSUdQMDNFMTAwMF9FX1BIWV9JRCkgbWF0Y2ggPSB0cnVlOworICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBJRkVfRV9QSFlfSUQpIG1hdGNoID0gdHJ1ZTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gSUZFX1BMVVNfRV9QSFlfSUQpIG1hdGNoID0gdHJ1ZTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gSUZFX0NfRV9QSFlfSUQpIG1hdGNoID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgREVCVUdPVVQxKCJJbnZhbGlkIE1BQyB0eXBlICVkXG4iLCBody0+bWFjX3R5cGUpOwpAQCAtNDEzNSwxMCArNDEzNiwxMCBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3BoeV9yZXNldF9kc3Aoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICBpbnQzMl90IHJldF92YWw7CisgICAgczMyIHJldF92YWw7CiAgICAgREVCVUdGVU5DKCJlMTAwMF9waHlfcmVzZXRfZHNwIik7CiAKICAgICBkbyB7CkBAIC00MTYyLDEyICs0MTYzLDEyIEBACiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqIHBoeV9pbmZvIC0gUEhZIGluZm9ybWF0aW9uIHN0cnVjdHVyZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3BoeV9pZ3BfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbykKIHsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgcGh5X2RhdGEsIG1pbl9sZW5ndGgsIG1heF9sZW5ndGgsIGF2ZXJhZ2U7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IHBoeV9kYXRhLCBtaW5fbGVuZ3RoLCBtYXhfbGVuZ3RoLCBhdmVyYWdlOwogICAgIGUxMDAwX3Jldl9wb2xhcml0eSBwb2xhcml0eTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfcGh5X2lncF9nZXRfaW5mbyIpOwpAQCAtNDIzOSwxMiArNDI0MCwxMiBAQAogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKiBwaHlfaW5mbyAtIFBIWSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9waHlfaWZlX2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBoeV9kYXRhOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKICAgICBlMTAwMF9yZXZfcG9sYXJpdHkgcG9sYXJpdHk7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3BoeV9pZmVfZ2V0X2luZm8iKTsKQEAgLTQyODksMTIgKzQyOTAsMTIgQEAKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICogcGh5X2luZm8gLSBQSFkgaW5mb3JtYXRpb24gc3RydWN0dXJlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfcGh5X204OF9nZXRfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeV9pbmZvKQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICB1MTYgcGh5X2RhdGE7CiAgICAgZTEwMDBfcmV2X3BvbGFyaXR5IHBvbGFyaXR5OwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9waHlfbTg4X2dldF9pbmZvIik7CkBAIC00MzY4LDEyICs0MzY5LDEyIEBACiAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAqIHBoeV9pbmZvIC0gUEhZIGluZm9ybWF0aW9uIHN0cnVjdHVyZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9waHlfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeV9pbmZvKQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICB1MTYgcGh5X2RhdGE7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3BoeV9nZXRfaW5mbyIpOwogCkBAIC00NDE0LDcgKzQ0MTUsNyBAQAogICAgICAgICByZXR1cm4gZTEwMDBfcGh5X204OF9nZXRfaW5mbyhodywgcGh5X2luZm8pOwogfQogCi1pbnQzMl90CitzMzIKIGUxMDAwX3ZhbGlkYXRlX21kaV9zZXR0aW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgREVCVUdGVU5DKCJlMTAwMF92YWxpZGF0ZV9tZGlfc2V0dGluZ3MiKTsKQEAgLTQ0MzUsMTMgKzQ0MzYsMTMgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9pbml0X2VlcHJvbV9wYXJhbXMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICBzdHJ1Y3QgZTEwMDBfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOwotICAgIHVpbnQzMl90IGVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7Ci0gICAgaW50MzJfdCByZXRfdmFsID0gRTEwMDBfU1VDQ0VTUzsKLSAgICB1aW50MTZfdCBlZXByb21fc2l6ZTsKKyAgICB1MzIgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKyAgICBzMzIgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7CisgICAgdTE2IGVlcHJvbV9zaXplOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9pbml0X2VlcHJvbV9wYXJhbXMiKTsKIApAQCAtNDQ1NSw4ICs0NDU2LDggQEAKICAgICAgICAgZWVwcm9tLT5vcGNvZGVfYml0cyA9IDM7CiAgICAgICAgIGVlcHJvbS0+YWRkcmVzc19iaXRzID0gNjsKICAgICAgICAgZWVwcm9tLT5kZWxheV91c2VjID0gNTA7Ci0gICAgICAgIGVlcHJvbS0+dXNlX2VlcmQgPSBGQUxTRTsKLSAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IEZBTFNFOworICAgICAgICBlZXByb20tPnVzZV9lZXJkID0gZmFsc2U7CisgICAgICAgIGVlcHJvbS0+dXNlX2Vld3IgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU0MDoKICAgICBjYXNlIGUxMDAwXzgyNTQ1OgpAQCAtNDQ3Myw4ICs0NDc0LDggQEAKICAgICAgICAgICAgIGVlcHJvbS0+d29yZF9zaXplID0gNjQ7CiAgICAgICAgICAgICBlZXByb20tPmFkZHJlc3NfYml0cyA9IDY7CiAgICAgICAgIH0KLSAgICAgICAgZWVwcm9tLT51c2VfZWVyZCA9IEZBTFNFOwotICAgICAgICBlZXByb20tPnVzZV9lZXdyID0gRkFMU0U7CisgICAgICAgIGVlcHJvbS0+dXNlX2VlcmQgPSBmYWxzZTsKKyAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgyNTQxOgogICAgIGNhc2UgZTEwMDBfODI1NDFfcmV2XzI6CkBAIC00NTAzLDggKzQ1MDQsOCBAQAogICAgICAgICAgICAgICAgIGVlcHJvbS0+YWRkcmVzc19iaXRzID0gNjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlZXByb20tPnVzZV9lZXJkID0gRkFMU0U7Ci0gICAgICAgIGVlcHJvbS0+dXNlX2Vld3IgPSBGQUxTRTsKKyAgICAgICAgZWVwcm9tLT51c2VfZWVyZCA9IGZhbHNlOworICAgICAgICBlZXByb20tPnVzZV9lZXdyID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgZTEwMDBfODI1NzE6CiAgICAgY2FzZSBlMTAwMF84MjU3MjoKQEAgLTQ1MTgsOCArNDUxOSw4IEBACiAgICAgICAgICAgICBlZXByb20tPnBhZ2Vfc2l6ZSA9IDg7CiAgICAgICAgICAgICBlZXByb20tPmFkZHJlc3NfYml0cyA9IDg7CiAgICAgICAgIH0KLSAgICAgICAgZWVwcm9tLT51c2VfZWVyZCA9IEZBTFNFOwotICAgICAgICBlZXByb20tPnVzZV9lZXdyID0gRkFMU0U7CisgICAgICAgIGVlcHJvbS0+dXNlX2VlcmQgPSBmYWxzZTsKKyAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgyNTczOgogICAgICAgICBlZXByb20tPnR5cGUgPSBlMTAwMF9lZXByb21fc3BpOwpAQCAtNDUzMiw5ICs0NTMzLDkgQEAKICAgICAgICAgICAgIGVlcHJvbS0+cGFnZV9zaXplID0gODsKICAgICAgICAgICAgIGVlcHJvbS0+YWRkcmVzc19iaXRzID0gODsKICAgICAgICAgfQotICAgICAgICBlZXByb20tPnVzZV9lZXJkID0gVFJVRTsKLSAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IFRSVUU7Ci0gICAgICAgIGlmIChlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oaHcpID09IEZBTFNFKSB7CisgICAgICAgIGVlcHJvbS0+dXNlX2VlcmQgPSB0cnVlOworICAgICAgICBlZXByb20tPnVzZV9lZXdyID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oaHcpKSB7CiAgICAgICAgICAgICBlZXByb20tPnR5cGUgPSBlMTAwMF9lZXByb21fZmxhc2g7CiAgICAgICAgICAgICBlZXByb20tPndvcmRfc2l6ZSA9IDIwNDg7CiAKQEAgLTQ1NTUsMjQgKzQ1NTYsMjQgQEAKICAgICAgICAgICAgIGVlcHJvbS0+cGFnZV9zaXplID0gODsKICAgICAgICAgICAgIGVlcHJvbS0+YWRkcmVzc19iaXRzID0gODsKICAgICAgICAgfQotICAgICAgICBlZXByb20tPnVzZV9lZXJkID0gVFJVRTsKLSAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IEZBTFNFOworICAgICAgICBlZXByb20tPnVzZV9lZXJkID0gdHJ1ZTsKKyAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwX2ljaDhsYW46CiAgICAgICAgIHsKLSAgICAgICAgaW50MzJfdCAgaSA9IDA7Ci0gICAgICAgIHVpbnQzMl90IGZsYXNoX3NpemUgPSBFMTAwMF9SRUFEX0lDSF9GTEFTSF9SRUcoaHcsIElDSF9GTEFTSF9HRlBSRUcpOworICAgICAgICBzMzIgIGkgPSAwOworICAgICAgICB1MzIgZmxhc2hfc2l6ZSA9IEUxMDAwX1JFQURfSUNIX0ZMQVNIX1JFRyhodywgSUNIX0ZMQVNIX0dGUFJFRyk7CiAKICAgICAgICAgZWVwcm9tLT50eXBlID0gZTEwMDBfZWVwcm9tX2ljaDg7Ci0gICAgICAgIGVlcHJvbS0+dXNlX2VlcmQgPSBGQUxTRTsKLSAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IEZBTFNFOworICAgICAgICBlZXByb20tPnVzZV9lZXJkID0gZmFsc2U7CisgICAgICAgIGVlcHJvbS0+dXNlX2Vld3IgPSBmYWxzZTsKICAgICAgICAgZWVwcm9tLT53b3JkX3NpemUgPSBFMTAwMF9TSEFET1dfUkFNX1dPUkRTOwogCiAgICAgICAgIC8qIFplcm8gdGhlIHNoYWRvdyBSQU0gc3RydWN0dXJlLiBCdXQgZG9uJ3QgbG9hZCBpdCBmcm9tIE5WTQogICAgICAgICAgKiBzbyBhcyB0byBzYXZlIHRpbWUgZm9yIGRyaXZlciBpbml0ICovCiAgICAgICAgIGlmIChody0+ZWVwcm9tX3NoYWRvd19yYW0gIT0gTlVMTCkgewogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEUxMDAwX1NIQURPV19SQU1fV09SRFM7IGkrKykgewotICAgICAgICAgICAgICAgIGh3LT5lZXByb21fc2hhZG93X3JhbVtpXS5tb2RpZmllZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIGh3LT5lZXByb21fc2hhZG93X3JhbVtpXS5tb2RpZmllZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGh3LT5lZXByb21fc2hhZG93X3JhbVtpXS5lZXByb21fd29yZCA9IDB4RkZGRjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDU4NSw3ICs0NTg2LDcgQEAKIAogICAgICAgICBody0+Zmxhc2hfYmFua19zaXplICo9IElDSF9GTEFTSF9TRUNUT1JfU0laRTsKIAotICAgICAgICBody0+Zmxhc2hfYmFua19zaXplIC89IDIgKiBzaXplb2YodWludDE2X3QpOworICAgICAgICBody0+Zmxhc2hfYmFua19zaXplIC89IDIgKiBzaXplb2YodTE2KTsKIAogICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDYxMCw3ICs0NjExLDcgQEAKICAgICAgICAgICAgIGlmIChlZXByb21fc2l6ZSkKICAgICAgICAgICAgICAgICBlZXByb21fc2l6ZSsrOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZWVwcm9tX3NpemUgPSAodWludDE2X3QpKChlZWNkICYgRTEwMDBfRUVDRF9TSVpFX0VYX01BU0spID4+CisgICAgICAgICAgICBlZXByb21fc2l6ZSA9ICh1MTYpKChlZWNkICYgRTEwMDBfRUVDRF9TSVpFX0VYX01BU0spID4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0VFQ0RfU0laRV9FWF9TSElGVCk7CiAgICAgICAgIH0KIApAQCAtNDYyNyw3ICs0NjI4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCiBlMTAwMF9yYWlzZV9lZV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZWVjZCkKKyAgICAgICAgICAgICAgICAgICB1MzIgKmVlY2QpCiB7CiAgICAgLyogUmFpc2UgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBFRVBST00gKGJ5IHNldHRpbmcgdGhlIFNLIGJpdCksIGFuZCB0aGVuCiAgICAgICogd2FpdCA8ZGVsYXk+IG1pY3Jvc2Vjb25kcy4KQEAgLTQ2NDYsNyArNDY0Nyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogZTEwMDBfbG93ZXJfZWVfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmVlY2QpCisgICAgICAgICAgICAgICAgICAgdTMyICplZWNkKQogewogICAgIC8qIExvd2VyIHRoZSBjbG9jayBpbnB1dCB0byB0aGUgRUVQUk9NIChieSBjbGVhcmluZyB0aGUgU0sgYml0KSwgYW5kIHRoZW4KICAgICAgKiB3YWl0IDUwIG1pY3Jvc2Vjb25kcy4KQEAgLTQ2NjYsMTIgKzQ2NjcsMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCiBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICB1MTYgY291bnQpCiB7CiAgICAgc3RydWN0IGUxMDAwX2VlcHJvbV9pbmZvICplZXByb20gPSAmaHctPmVlcHJvbTsKLSAgICB1aW50MzJfdCBlZWNkOwotICAgIHVpbnQzMl90IG1hc2s7CisgICAgdTMyIGVlY2Q7CisgICAgdTMyIG1hc2s7CiAKICAgICAvKiBXZSBuZWVkIHRvIHNoaWZ0ICJjb3VudCIgYml0cyBvdXQgdG8gdGhlIEVFUFJPTS4gU28sIHZhbHVlIGluIHRoZQogICAgICAqICJkYXRhIiBwYXJhbWV0ZXIgd2lsbCBiZSBzaGlmdGVkIG91dCB0byB0aGUgRUVQUk9NIG9uZSBiaXQgYXQgYSB0aW1lLgpAQCAtNDcxNywxMyArNDcxOCwxMyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdWludDE2X3QKK3N0YXRpYyB1MTYKIGUxMDAwX3NoaWZ0X2luX2VlX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgY291bnQpCisgICAgICAgICAgICAgICAgICAgICAgIHUxNiBjb3VudCkKIHsKLSAgICB1aW50MzJfdCBlZWNkOwotICAgIHVpbnQzMl90IGk7Ci0gICAgdWludDE2X3QgZGF0YTsKKyAgICB1MzIgZWVjZDsKKyAgICB1MzIgaTsKKyAgICB1MTYgZGF0YTsKIAogICAgIC8qIEluIG9yZGVyIHRvIHJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBFRVBST00sIHdlIG5lZWQgdG8gc2hpZnQgJ2NvdW50JwogICAgICAqIGJpdHMgaW4gZnJvbSB0aGUgRUVQUk9NLiBCaXRzIGFyZSAic2hpZnRlZCBpbiIgYnkgcmFpc2luZyB0aGUgY2xvY2sKQEAgLTQ3NjEsMTEgKzQ3NjIsMTEgQEAKICAqIExvd2VycyBFRVBST00gY2xvY2suIENsZWFycyBpbnB1dCBwaW4uIFNldHMgdGhlIGNoaXAgc2VsZWN0IHBpbi4gVGhpcwogICogZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgaXNzdWluZyBhIGNvbW1hbmQgdG8gdGhlIEVFUFJPTS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9hY3F1aXJlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHN0cnVjdCBlMTAwMF9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207Ci0gICAgdWludDMyX3QgZWVjZCwgaT0wOworICAgIHUzMiBlZWNkLCBpPTA7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2FjcXVpcmVfZWVwcm9tIik7CiAKQEAgLTQ4MjQsNyArNDgyNSw3IEBACiBlMTAwMF9zdGFuZGJ5X2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHN0cnVjdCBlMTAwMF9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207Ci0gICAgdWludDMyX3QgZWVjZDsKKyAgICB1MzIgZWVjZDsKIAogICAgIGVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CiAKQEAgLTQ4NzIsNyArNDg3Myw3IEBACiBzdGF0aWMgdm9pZAogZTEwMDBfcmVsZWFzZV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCBlZWNkOworICAgIHUzMiBlZWNkOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWxlYXNlX2VlcHJvbSIpOwogCkBAIC00OTIwLDExICs0OTIxLDExIEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9zcGlfZWVwcm9tX3JlYWR5KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDE2X3QgcmV0cnlfY291bnQgPSAwOwotICAgIHVpbnQ4X3Qgc3BpX3N0YXRfcmVnOworICAgIHUxNiByZXRyeV9jb3VudCA9IDA7CisgICAgdTggc3BpX3N0YXRfcmVnOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zcGlfZWVwcm9tX3JlYWR5Iik7CiAKQEAgLTQ5MzcsNyArNDkzOCw3IEBACiAgICAgZG8gewogICAgICAgICBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgRUVQUk9NX1JEU1JfT1BDT0RFX1NQSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmVlcHJvbS5vcGNvZGVfYml0cyk7Ci0gICAgICAgIHNwaV9zdGF0X3JlZyA9ICh1aW50OF90KWUxMDAwX3NoaWZ0X2luX2VlX2JpdHMoaHcsIDgpOworICAgICAgICBzcGlfc3RhdF9yZWcgPSAodTgpZTEwMDBfc2hpZnRfaW5fZWVfYml0cyhodywgOCk7CiAgICAgICAgIGlmICghKHNwaV9zdGF0X3JlZyAmIEVFUFJPTV9TVEFUVVNfUkRZX1NQSSkpCiAgICAgICAgICAgICBicmVhazsKIApAQCAtNDk2NiwxNCArNDk2NywxNCBAQAogICogZGF0YSAtIHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3MzMgogZTEwMDBfcmVhZF9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHdvcmRzLAotICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmRhdGEpCisgICAgICAgICAgICAgICAgICB1MTYgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgdTE2IHdvcmRzLAorICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQogewogICAgIHN0cnVjdCBlMTAwMF9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207Ci0gICAgdWludDMyX3QgaSA9IDA7CisgICAgdTMyIGkgPSAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWFkX2VlcHJvbSIpOwogCkBAIC00OTk0LDE1ICs0OTk1LDE0IEBACiAgICAgICogZGlyZWN0bHkuIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBhY3F1aXJlIHRoZSBFRVBST00gc28gdGhhdAogICAgICAqIEZXIG9yIG90aGVyIHBvcnQgc29mdHdhcmUgZG9lcyBub3QgaW50ZXJydXB0LgogICAgICAqLwotICAgIGlmIChlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oaHcpID09IFRSVUUgJiYKLSAgICAgICAgaHctPmVlcHJvbS51c2VfZWVyZCA9PSBGQUxTRSkgeworICAgIGlmIChlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oaHcpICYmICFody0+ZWVwcm9tLnVzZV9lZXJkKSB7CiAgICAgICAgIC8qIFByZXBhcmUgdGhlIEVFUFJPTSBmb3IgYml0LWJhbmcgcmVhZGluZyAqLwogICAgICAgICBpZiAoZTEwMDBfYWNxdWlyZV9lZXByb20oaHcpICE9IEUxMDAwX1NVQ0NFU1MpCiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgfQogCiAgICAgLyogRWVyZCByZWdpc3RlciBFRVBST00gYWNjZXNzIHJlcXVpcmVzIG5vIGVlcHJvbSBhcXVpcmUvcmVsZWFzZSAqLwotICAgIGlmIChlZXByb20tPnVzZV9lZXJkID09IFRSVUUpCisgICAgaWYgKGVlcHJvbS0+dXNlX2VlcmQpCiAgICAgICAgIHJldHVybiBlMTAwMF9yZWFkX2VlcHJvbV9lZXJkKGh3LCBvZmZzZXQsIHdvcmRzLCBkYXRhKTsKIAogICAgIC8qIElDSCBFRVBST00gYWNjZXNzIGlzIGRvbmUgdmlhIHRoZSBJQ0ggZmxhc2ggY29udHJvbGxlciAqLwpAQCAtNTAxMiw4ICs1MDEyLDggQEAKICAgICAvKiBTZXQgdXAgdGhlIFNQSSBvciBNaWNyb3dpcmUgRUVQUk9NIGZvciBiaXQtYmFuZyByZWFkaW5nLiAgV2UgaGF2ZQogICAgICAqIGFjcXVpcmVkIHRoZSBFRVBST00gYXQgdGhpcyBwb2ludCwgc28gYW55IHJldHVybnMgc2hvdWxkIHJlbGFzZSBpdCAqLwogICAgIGlmIChlZXByb20tPnR5cGUgPT0gZTEwMDBfZWVwcm9tX3NwaSkgewotICAgICAgICB1aW50MTZfdCB3b3JkX2luOwotICAgICAgICB1aW50OF90IHJlYWRfb3Bjb2RlID0gRUVQUk9NX1JFQURfT1BDT0RFX1NQSTsKKyAgICAgICAgdTE2IHdvcmRfaW47CisgICAgICAgIHU4IHJlYWRfb3Bjb2RlID0gRUVQUk9NX1JFQURfT1BDT0RFX1NQSTsKIAogICAgICAgICBpZiAoZTEwMDBfc3BpX2VlcHJvbV9yZWFkeShodykpIHsKICAgICAgICAgICAgIGUxMDAwX3JlbGVhc2VfZWVwcm9tKGh3KTsKQEAgLTUwMjgsNyArNTAyOCw3IEBACiAKICAgICAgICAgLyogU2VuZCB0aGUgUkVBRCBjb21tYW5kIChvcGNvZGUgKyBhZGRyKSAgKi8KICAgICAgICAgZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsIHJlYWRfb3Bjb2RlLCBlZXByb20tPm9wY29kZV9iaXRzKTsKLSAgICAgICAgZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsICh1aW50MTZfdCkob2Zmc2V0KjIpLCBlZXByb20tPmFkZHJlc3NfYml0cyk7CisgICAgICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCAodTE2KShvZmZzZXQqMiksIGVlcHJvbS0+YWRkcmVzc19iaXRzKTsKIAogICAgICAgICAvKiBSZWFkIHRoZSBkYXRhLiAgVGhlIGFkZHJlc3Mgb2YgdGhlIGVlcHJvbSBpbnRlcm5hbGx5IGluY3JlbWVudHMgd2l0aAogICAgICAgICAgKiBlYWNoIGJ5dGUgKHNwaSkgYmVpbmcgcmVhZCwgc2F2aW5nIG9uIHRoZSBvdmVyaGVhZCBvZiBlZXByb20gc2V0dXAKQEAgLTUwNDQsNyArNTA0NCw3IEBACiAgICAgICAgICAgICAvKiBTZW5kIHRoZSBSRUFEIGNvbW1hbmQgKG9wY29kZSArIGFkZHIpICAqLwogICAgICAgICAgICAgZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsIEVFUFJPTV9SRUFEX09QQ09ERV9NSUNST1dJUkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb20tPm9wY29kZV9iaXRzKTsKLSAgICAgICAgICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCAodWludDE2X3QpKG9mZnNldCArIGkpLAorICAgICAgICAgICAgZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsICh1MTYpKG9mZnNldCArIGkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tLT5hZGRyZXNzX2JpdHMpOwogCiAgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhLiAgRm9yIG1pY3Jvd2lyZSwgZWFjaCB3b3JkIHJlcXVpcmVzIHRoZSBvdmVyaGVhZApAQCAtNTA2OCwxNCArNTA2OCwxNCBAQAogICogZGF0YSAtIHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9yZWFkX2VlcHJvbV9lZXJkKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICB1aW50MTZfdCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICB1aW50MTZfdCB3b3JkcywKLSAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpkYXRhKQorICAgICAgICAgICAgICAgICAgdTE2IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgIHUxNiB3b3JkcywKKyAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSkKIHsKLSAgICB1aW50MzJfdCBpLCBlZXJkID0gMDsKLSAgICBpbnQzMl90IGVycm9yID0gMDsKKyAgICB1MzIgaSwgZWVyZCA9IDA7CisgICAgczMyIGVycm9yID0gMDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKSB7CiAgICAgICAgIGVlcmQgPSAoKG9mZnNldCtpKSA8PCBFMTAwMF9FRVBST01fUldfQUREUl9TSElGVCkgKwpAQCAtNTEwMiwxNSArNTEwMiwxNSBAQAogICogZGF0YSAtIHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF93cml0ZV9lZXByb21fZWV3cihzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB3b3JkcywKLSAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqZGF0YSkKKyAgICAgICAgICAgICAgICAgICB1MTYgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIHUxNiB3b3JkcywKKyAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpCiB7Ci0gICAgdWludDMyX3QgICAgcmVnaXN0ZXJfdmFsdWUgPSAwOwotICAgIHVpbnQzMl90ICAgIGkgICAgICAgICAgICAgID0gMDsKLSAgICBpbnQzMl90ICAgICBlcnJvciAgICAgICAgICA9IDA7CisgICAgdTMyICAgIHJlZ2lzdGVyX3ZhbHVlID0gMDsKKyAgICB1MzIgICAgaSAgICAgICAgICAgICAgPSAwOworICAgIHMzMiAgICAgZXJyb3IgICAgICAgICAgPSAwOwogCiAgICAgaWYgKGUxMDAwX3N3Zndfc3luY19hY3F1aXJlKGh3LCBFMTAwMF9TV0ZXX0VFUF9TTSkpCiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKQEAgLTUxNDMsMTIgKzUxNDMsMTIgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodywgaW50IGVlcmQpCiB7Ci0gICAgdWludDMyX3QgYXR0ZW1wdHMgPSAxMDAwMDA7Ci0gICAgdWludDMyX3QgaSwgcmVnID0gMDsKLSAgICBpbnQzMl90IGRvbmUgPSBFMTAwMF9FUlJfRUVQUk9NOworICAgIHUzMiBhdHRlbXB0cyA9IDEwMDAwMDsKKyAgICB1MzIgaSwgcmVnID0gMDsKKyAgICBzMzIgZG9uZSA9IEUxMDAwX0VSUl9FRVBST007CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgYXR0ZW1wdHM7IGkrKykgewogICAgICAgICBpZiAoZWVyZCA9PSBFMTAwMF9FRVBST01fUE9MTF9SRUFEKQpAQCAtNTE3MSwxNSArNTE3MSwxNSBAQAogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBib29sZWFuX3QKK3N0YXRpYyBib29sCiBlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCBlZWNkID0gMDsKKyAgICB1MzIgZWVjZCA9IDA7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2lzX29uYm9hcmRfbnZtX2VlcHJvbSIpOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKICAgICAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKQEAgLTUxODksMTAgKzUxODksMTAgQEAKIAogICAgICAgICAvKiBJZiBib3RoIGJpdHMgYXJlIHNldCwgZGV2aWNlIGlzIEZsYXNoIHR5cGUgKi8KICAgICAgICAgaWYgKGVlY2QgPT0gMHgwMykgewotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MjA0LDE2ICs1MjA0LDE1IEBACiAgKiBJZiB0aGUgdGhlIHN1bSBvZiB0aGUgNjQgMTYgYml0IHdvcmRzIGlzIDB4QkFCQSwgdGhlIEVFUFJPTSdzIGNoZWNrc3VtIGlzCiAgKiB2YWxpZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3MzMgogZTEwMDBfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDE2X3QgY2hlY2tzdW0gPSAwOwotICAgIHVpbnQxNl90IGksIGVlcHJvbV9kYXRhOworICAgIHUxNiBjaGVja3N1bSA9IDA7CisgICAgdTE2IGksIGVlcHJvbV9kYXRhOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0iKTsKIAotICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczKSAmJgotICAgICAgICAoZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tKGh3KSA9PSBGQUxTRSkpIHsKKyAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykgJiYgIWUxMDAwX2lzX29uYm9hcmRfbnZtX2VlcHJvbShodykpIHsKICAgICAgICAgLyogQ2hlY2sgYml0IDQgb2Ygd29yZCAxMGguICBJZiBpdCBpcyAwLCBmaXJtd2FyZSBpcyBkb25lIHVwZGF0aW5nCiAgICAgICAgICAqIDEwaC0xMmguICBDaGVja3N1bSBtYXkgbmVlZCB0byBiZSBmaXhlZC4gKi8KICAgICAgICAgZTEwMDBfcmVhZF9lZXByb20oaHcsIDB4MTAsIDEsICZlZXByb21fZGF0YSk7CkBAIC01MjUzLDcgKzUyNTIsNyBAQAogICAgICAgICBjaGVja3N1bSArPSBlZXByb21fZGF0YTsKICAgICB9CiAKLSAgICBpZiAoY2hlY2tzdW0gPT0gKHVpbnQxNl90KSBFRVBST01fU1VNKQorICAgIGlmIChjaGVja3N1bSA9PSAodTE2KSBFRVBST01fU1VNKQogICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKICAgICBlbHNlIHsKICAgICAgICAgREVCVUdPVVQoIkVFUFJPTSBDaGVja3N1bSBJbnZhbGlkXG4iKTsKQEAgLTUyNjksMTIgKzUyNjgsMTIgQEAKICAqIFN1bXMgdGhlIGZpcnN0IDYzIDE2IGJpdCB3b3JkcyBvZiB0aGUgRUVQUk9NLiBTdWJ0cmFjdHMgdGhlIHN1bSBmcm9tIDB4QkFCQS4KICAqIFdyaXRlcyB0aGUgZGlmZmVyZW5jZSB0byB3b3JkIG9mZnNldCA2MyBvZiB0aGUgRUVQUk9NLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF91cGRhdGVfZWVwcm9tX2NoZWNrc3VtKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgY3RybF9leHQ7Ci0gICAgdWludDE2X3QgY2hlY2tzdW0gPSAwOwotICAgIHVpbnQxNl90IGksIGVlcHJvbV9kYXRhOworICAgIHUzMiBjdHJsX2V4dDsKKyAgICB1MTYgY2hlY2tzdW0gPSAwOworICAgIHUxNiBpLCBlZXByb21fZGF0YTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfdXBkYXRlX2VlcHJvbV9jaGVja3N1bSIpOwogCkBAIC01Mjg1LDcgKzUyODQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNoZWNrc3VtICs9IGVlcHJvbV9kYXRhOwogICAgIH0KLSAgICBjaGVja3N1bSA9ICh1aW50MTZfdCkgRUVQUk9NX1NVTSAtIGNoZWNrc3VtOworICAgIGNoZWNrc3VtID0gKHUxNikgRUVQUk9NX1NVTSAtIGNoZWNrc3VtOwogICAgIGlmIChlMTAwMF93cml0ZV9lZXByb20oaHcsIEVFUFJPTV9DSEVDS1NVTV9SRUcsIDEsICZjaGVja3N1bSkgPCAwKSB7CiAgICAgICAgIERFQlVHT1VUKCJFRVBST00gV3JpdGUgRXJyb3JcbiIpOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CkBAIC01MzE0LDE0ICs1MzEzLDE0IEBACiAgKiBJZiBlMTAwMF91cGRhdGVfZWVwcm9tX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCiAgKiBFRVBST00gd2lsbCBtb3N0IGxpa2VseSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX3dyaXRlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB3b3JkcywKLSAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqZGF0YSkKKyAgICAgICAgICAgICAgICAgICB1MTYgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIHUxNiB3b3JkcywKKyAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpCiB7CiAgICAgc3RydWN0IGUxMDAwX2VlcHJvbV9pbmZvICplZXByb20gPSAmaHctPmVlcHJvbTsKLSAgICBpbnQzMl90IHN0YXR1cyA9IDA7CisgICAgczMyIHN0YXR1cyA9IDA7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3dyaXRlX2VlcHJvbSIpOwogCkBAIC01MzM5LDcgKzUzMzgsNyBAQAogICAgIH0KIAogICAgIC8qIDgyNTczIHdyaXRlcyBvbmx5IHRocm91Z2ggZWV3ciAqLwotICAgIGlmIChlZXByb20tPnVzZV9lZXdyID09IFRSVUUpCisgICAgaWYgKGVlcHJvbS0+dXNlX2Vld3IpCiAgICAgICAgIHJldHVybiBlMTAwMF93cml0ZV9lZXByb21fZWV3cihodywgb2Zmc2V0LCB3b3JkcywgZGF0YSk7CiAKICAgICBpZiAoZWVwcm9tLT50eXBlID09IGUxMDAwX2VlcHJvbV9pY2g4KQpAQCAtNTM3MSwxOSArNTM3MCwxOSBAQAogICogZGF0YSAtIHBvaW50ZXIgdG8gYXJyYXkgb2YgOCBiaXQgd29yZHMgdG8gYmUgd3JpdHRlbiB0byB0aGUgRUVQUk9NCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3dyaXRlX2VlcHJvbV9zcGkoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCB3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgIHUxNiBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHUxNiB3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKQogewogICAgIHN0cnVjdCBlMTAwMF9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207Ci0gICAgdWludDE2X3Qgd2lkeCA9IDA7CisgICAgdTE2IHdpZHggPSAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF93cml0ZV9lZXByb21fc3BpIik7CiAKICAgICB3aGlsZSAod2lkeCA8IHdvcmRzKSB7Ci0gICAgICAgIHVpbnQ4X3Qgd3JpdGVfb3Bjb2RlID0gRUVQUk9NX1dSSVRFX09QQ09ERV9TUEk7CisgICAgICAgIHU4IHdyaXRlX29wY29kZSA9IEVFUFJPTV9XUklURV9PUENPREVfU1BJOwogCiAgICAgICAgIGlmIChlMTAwMF9zcGlfZWVwcm9tX3JlYWR5KGh3KSkgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOwogCkBAIC01NDAyLDE0ICs1NDAxLDE0IEBACiAgICAgICAgIC8qIFNlbmQgdGhlIFdyaXRlIGNvbW1hbmQgKDgtYml0IG9wY29kZSArIGFkZHIpICovCiAgICAgICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCB3cml0ZV9vcGNvZGUsIGVlcHJvbS0+b3Bjb2RlX2JpdHMpOwogCi0gICAgICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCAodWludDE2X3QpKChvZmZzZXQgKyB3aWR4KSoyKSwKKyAgICAgICAgZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsICh1MTYpKChvZmZzZXQgKyB3aWR4KSoyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tLT5hZGRyZXNzX2JpdHMpOwogCiAgICAgICAgIC8qIFNlbmQgdGhlIGRhdGEgKi8KIAogICAgICAgICAvKiBMb29wIHRvIGFsbG93IGZvciB1cCB0byB3aG9sZSBwYWdlIHdyaXRlICgzMiBieXRlcykgb2YgZWVwcm9tICovCiAgICAgICAgIHdoaWxlICh3aWR4IDwgd29yZHMpIHsKLSAgICAgICAgICAgIHVpbnQxNl90IHdvcmRfb3V0ID0gZGF0YVt3aWR4XTsKKyAgICAgICAgICAgIHUxNiB3b3JkX291dCA9IGRhdGFbd2lkeF07CiAgICAgICAgICAgICB3b3JkX291dCA9ICh3b3JkX291dCA+PiA4KSB8ICh3b3JkX291dCA8PCA4KTsKICAgICAgICAgICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCB3b3JkX291dCwgMTYpOwogICAgICAgICAgICAgd2lkeCsrOwpAQCAtNTQzNywxNiArNTQzNiwxNiBAQAogICogZGF0YSAtIHBvaW50ZXIgdG8gYXJyYXkgb2YgMTYgYml0IHdvcmRzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF93cml0ZV9lZXByb21fbWljcm93aXJlKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgd29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgd29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSkKIHsKICAgICBzdHJ1Y3QgZTEwMDBfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOwotICAgIHVpbnQzMl90IGVlY2Q7Ci0gICAgdWludDE2X3Qgd29yZHNfd3JpdHRlbiA9IDA7Ci0gICAgdWludDE2X3QgaSA9IDA7CisgICAgdTMyIGVlY2Q7CisgICAgdTE2IHdvcmRzX3dyaXR0ZW4gPSAwOworICAgIHUxNiBpID0gMDsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfd3JpdGVfZWVwcm9tX21pY3Jvd2lyZSIpOwogCkBAIC01NDU3LDkgKzU0NTYsOSBAQAogICAgICAqIEVFUFJPTSBpbnRvIHdyaXRlL2VyYXNlIG1vZGUuCiAgICAgICovCiAgICAgZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsIEVFUFJPTV9FV0VOX09QQ09ERV9NSUNST1dJUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KShlZXByb20tPm9wY29kZV9iaXRzICsgMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYpKGVlcHJvbS0+b3Bjb2RlX2JpdHMgKyAyKSk7CiAKLSAgICBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgMCwgKHVpbnQxNl90KShlZXByb20tPmFkZHJlc3NfYml0cyAtIDIpKTsKKyAgICBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgMCwgKHUxNikoZWVwcm9tLT5hZGRyZXNzX2JpdHMgLSAyKSk7CiAKICAgICAvKiBQcmVwYXJlIHRoZSBFRVBST00gKi8KICAgICBlMTAwMF9zdGFuZGJ5X2VlcHJvbShodyk7CkBAIC01NDY5LDcgKzU0NjgsNyBAQAogICAgICAgICBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgRUVQUk9NX1dSSVRFX09QQ09ERV9NSUNST1dJUkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbS0+b3Bjb2RlX2JpdHMpOwogCi0gICAgICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCAodWludDE2X3QpKG9mZnNldCArIHdvcmRzX3dyaXR0ZW4pLAorICAgICAgICBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgKHUxNikob2Zmc2V0ICsgd29yZHNfd3JpdHRlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbS0+YWRkcmVzc19iaXRzKTsKIAogICAgICAgICAvKiBTZW5kIHRoZSBkYXRhICovCkBAIC01NTA3LDkgKzU1MDYsOSBAQAogICAgICAqIEVFUFJPTSBvdXQgb2Ygd3JpdGUvZXJhc2UgbW9kZS4KICAgICAgKi8KICAgICBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgRUVQUk9NX0VXRFNfT1BDT0RFX01JQ1JPV0lSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKGVlcHJvbS0+b3Bjb2RlX2JpdHMgKyAyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUxNikoZWVwcm9tLT5vcGNvZGVfYml0cyArIDIpKTsKIAotICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCAwLCAodWludDE2X3QpKGVlcHJvbS0+YWRkcmVzc19iaXRzIC0gMikpOworICAgIGUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCAwLCAodTE2KShlZXByb20tPmFkZHJlc3NfYml0cyAtIDIpKTsKIAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQpAQCAtNTUyNCwxOSArNTUyMywxOSBAQAogICogZGF0YSAtIHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9jb21taXRfc2hhZG93X3JhbShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGF0dGVtcHRzID0gMTAwMDAwOwotICAgIHVpbnQzMl90IGVlY2QgPSAwOwotICAgIHVpbnQzMl90IGZsb3AgPSAwOwotICAgIHVpbnQzMl90IGkgPSAwOwotICAgIGludDMyX3QgZXJyb3IgPSBFMTAwMF9TVUNDRVNTOwotICAgIHVpbnQzMl90IG9sZF9iYW5rX29mZnNldCA9IDA7Ci0gICAgdWludDMyX3QgbmV3X2Jhbmtfb2Zmc2V0ID0gMDsKLSAgICB1aW50OF90IGxvd19ieXRlID0gMDsKLSAgICB1aW50OF90IGhpZ2hfYnl0ZSA9IDA7Ci0gICAgYm9vbGVhbl90IHNlY3Rvcl93cml0ZV9mYWlsZWQgPSBGQUxTRTsKKyAgICB1MzIgYXR0ZW1wdHMgPSAxMDAwMDA7CisgICAgdTMyIGVlY2QgPSAwOworICAgIHUzMiBmbG9wID0gMDsKKyAgICB1MzIgaSA9IDA7CisgICAgczMyIGVycm9yID0gRTEwMDBfU1VDQ0VTUzsKKyAgICB1MzIgb2xkX2Jhbmtfb2Zmc2V0ID0gMDsKKyAgICB1MzIgbmV3X2Jhbmtfb2Zmc2V0ID0gMDsKKyAgICB1OCBsb3dfYnl0ZSA9IDA7CisgICAgdTggaGlnaF9ieXRlID0gMDsKKyAgICBib29sIHNlY3Rvcl93cml0ZV9mYWlsZWQgPSBmYWxzZTsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKICAgICAgICAgLyogVGhlIGZsb3AgcmVnaXN0ZXIgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBmbGFzaCB0eXBlIGlzIFNUTSAqLwpAQCAtNTU4OCwyNCArNTU4NywyNCBAQAogICAgICAgICAgICAgZTEwMDBfZXJhc2VfaWNoOF80a19zZWdtZW50KGh3LCAwKTsKICAgICAgICAgfQogCi0gICAgICAgIHNlY3Rvcl93cml0ZV9mYWlsZWQgPSBGQUxTRTsKKyAgICAgICAgc2VjdG9yX3dyaXRlX2ZhaWxlZCA9IGZhbHNlOwogICAgICAgICAvKiBMb29wIGZvciBldmVyeSBieXRlIGluIHRoZSBzaGFkb3cgUkFNLAogICAgICAgICAgKiB3aGljaCBpcyBpbiB1bml0cyBvZiB3b3Jkcy4gKi8KICAgICAgICAgZm9yIChpID0gMDsgaSA8IEUxMDAwX1NIQURPV19SQU1fV09SRFM7IGkrKykgewogICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHdoZXRoZXIgdG8gd3JpdGUgdGhlIHZhbHVlIHN0b3JlZAogICAgICAgICAgICAgICogaW4gdGhlIG90aGVyIE5WTSBiYW5rIG9yIGEgbW9kaWZpZWQgdmFsdWUgc3RvcmVkCiAgICAgICAgICAgICAgKiBpbiB0aGUgc2hhZG93IFJBTSAqLwotICAgICAgICAgICAgaWYgKGh3LT5lZXByb21fc2hhZG93X3JhbVtpXS5tb2RpZmllZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgbG93X2J5dGUgPSAodWludDhfdClody0+ZWVwcm9tX3NoYWRvd19yYW1baV0uZWVwcm9tX3dvcmQ7CisgICAgICAgICAgICBpZiAoaHctPmVlcHJvbV9zaGFkb3dfcmFtW2ldLm1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgbG93X2J5dGUgPSAodTgpaHctPmVlcHJvbV9zaGFkb3dfcmFtW2ldLmVlcHJvbV93b3JkOwogICAgICAgICAgICAgICAgIHVkZWxheSgxMDApOwogICAgICAgICAgICAgICAgIGVycm9yID0gZTEwMDBfdmVyaWZ5X3dyaXRlX2ljaDhfYnl0ZShodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA8PCAxKSArIG5ld19iYW5rX29mZnNldCwgbG93X2J5dGUpOwogCiAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEUxMDAwX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rvcl93cml0ZV9mYWlsZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBzZWN0b3Jfd3JpdGVfZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaGlnaF9ieXRlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90KShody0+ZWVwcm9tX3NoYWRvd19yYW1baV0uZWVwcm9tX3dvcmQgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAodTgpKGh3LT5lZXByb21fc2hhZG93X3JhbVtpXS5lZXByb21fd29yZCA+PiA4KTsKICAgICAgICAgICAgICAgICAgICAgdWRlbGF5KDEwMCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTU2MTYsNyArNTYxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPDwgMSkgKyBuZXdfYmFua19vZmZzZXQsIGxvd19ieXRlKTsKIAogICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBFMTAwMF9TVUNDRVNTKQotICAgICAgICAgICAgICAgICAgICBzZWN0b3Jfd3JpdGVfZmFpbGVkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3dyaXRlX2ZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGUxMDAwX3JlYWRfaWNoOF9ieXRlKGh3LCAoaSA8PCAxKSArIG9sZF9iYW5rX29mZnNldCArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaWdoX2J5dGUpOwpAQCAtNTYyNCwxMCArNTYyMywxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLyogSWYgdGhlIHdyaXRlIG9mIHRoZSBsb3cgYnl0ZSB3YXMgc3VjY2Vzc2Z1bCwgZ28gYWhyZWFkIGFuZAorICAgICAgICAgICAgLyogSWYgdGhlIHdyaXRlIG9mIHRoZSBsb3cgYnl0ZSB3YXMgc3VjY2Vzc2Z1bCwgZ28gYWhlYWQgYW5kCiAgICAgICAgICAgICAgKiB3cml0ZSB0aGUgaGlnaCBieXRlIHdoaWxlIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIGl0CiAgICAgICAgICAgICAgKiBpcyB0aGUgc2lnbmF0dXJlIGJ5dGUsIHRoZW4gaXQgaXMgaGFuZGxlZCBwcm9wZXJseSAqLwotICAgICAgICAgICAgaWYgKHNlY3Rvcl93cml0ZV9mYWlsZWQgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIGlmICghc2VjdG9yX3dyaXRlX2ZhaWxlZCkgewogICAgICAgICAgICAgICAgIC8qIElmIHRoZSB3b3JkIGlzIDB4MTMsIHRoZW4gbWFrZSBzdXJlIHRoZSBzaWduYXR1cmUgYml0cwogICAgICAgICAgICAgICAgICAqICgxNToxNCkgYXJlIDExYiB1bnRpbCB0aGUgY29tbWl0IGhhcyBjb21wbGV0ZWQuCiAgICAgICAgICAgICAgICAgICogVGhpcyB3aWxsIGFsbG93IHVzIHRvIHdyaXRlIDEwYiB3aGljaCBpbmRpY2F0ZXMgdGhlCkBAIC01NjQwLDcgKzU2MzksNyBAQAogICAgICAgICAgICAgICAgIGVycm9yID0gZTEwMDBfdmVyaWZ5X3dyaXRlX2ljaDhfYnl0ZShodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA8PCAxKSArIG5ld19iYW5rX29mZnNldCArIDEsIGhpZ2hfYnl0ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEUxMDAwX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rvcl93cml0ZV9mYWlsZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBzZWN0b3Jfd3JpdGVfZmFpbGVkID0gdHJ1ZTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBJZiB0aGUgd3JpdGUgZmFpbGVkIHRoZW4gYnJlYWsgZnJvbSB0aGUgbG9vcCBhbmQKQEAgLTU2NTEsNyArNTY1MCw3IEBACiAKICAgICAgICAgLyogRG9uJ3QgYm90aGVyIHdyaXRpbmcgdGhlIHNlZ21lbnQgdmFsaWQgYml0cyBpZiBzZWN0b3IKICAgICAgICAgICogcHJvZ3JhbW1pbmcgZmFpbGVkLiAqLwotICAgICAgICBpZiAoc2VjdG9yX3dyaXRlX2ZhaWxlZCA9PSBGQUxTRSkgeworICAgICAgICBpZiAoIXNlY3Rvcl93cml0ZV9mYWlsZWQpIHsKICAgICAgICAgICAgIC8qIEZpbmFsbHkgdmFsaWRhdGUgdGhlIG5ldyBzZWdtZW50IGJ5IHNldHRpbmcgYml0IDE1OjE0CiAgICAgICAgICAgICAgKiB0byAxMGIgaW4gd29yZCAweDEzICwgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IGFuCiAgICAgICAgICAgICAgKiBlcmFzZSBhcyB3ZWxsIHNpbmNlIHRoZXNlIGJpdHMgYXJlIDExIHRvIHN0YXJ0IHdpdGgKQEAgLTU2NzMsNyArNTY3Miw3IEBACiAKICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBub3cgbm90IHVzZWQgZW50cnkgaW4gdGhlIGNhY2hlICovCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRTEwMDBfU0hBRE9XX1JBTV9XT1JEUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaHctPmVlcHJvbV9zaGFkb3dfcmFtW2ldLm1vZGlmaWVkID0gRkFMU0U7CisgICAgICAgICAgICAgICAgaHctPmVlcHJvbV9zaGFkb3dfcmFtW2ldLm1vZGlmaWVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaHctPmVlcHJvbV9zaGFkb3dfcmFtW2ldLmVlcHJvbV93b3JkID0gMHhGRkZGOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01Njg4LDExICs1Njg3LDExIEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3MzMgogZTEwMDBfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKiBodykKIHsKLSAgICB1aW50MTZfdCBvZmZzZXQ7Ci0gICAgdWludDE2X3QgZWVwcm9tX2RhdGEsIGk7CisgICAgdTE2IG9mZnNldDsKKyAgICB1MTYgZWVwcm9tX2RhdGEsIGk7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3JlYWRfbWFjX2FkZHIiKTsKIApAQCAtNTcwMiw4ICs1NzAxLDggQEAKICAgICAgICAgICAgIERFQlVHT1VUKCJFRVBST00gUmVhZCBFcnJvclxuIik7CiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgICAgIH0KLSAgICAgICAgaHctPnBlcm1fbWFjX2FkZHJbaV0gPSAodWludDhfdCkgKGVlcHJvbV9kYXRhICYgMHgwMEZGKTsKLSAgICAgICAgaHctPnBlcm1fbWFjX2FkZHJbaSsxXSA9ICh1aW50OF90KSAoZWVwcm9tX2RhdGEgPj4gOCk7CisgICAgICAgIGh3LT5wZXJtX21hY19hZGRyW2ldID0gKHU4KSAoZWVwcm9tX2RhdGEgJiAweDAwRkYpOworICAgICAgICBody0+cGVybV9tYWNfYWRkcltpKzFdID0gKHU4KSAoZWVwcm9tX2RhdGEgPj4gOCk7CiAgICAgfQogCiAgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKQEAgLTU3MzUsOCArNTczNCw4IEBACiBzdGF0aWMgdm9pZAogZTEwMDBfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGk7Ci0gICAgdWludDMyX3QgcmFyX251bTsKKyAgICB1MzIgaTsKKyAgICB1MzIgcmFyX251bTsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfaW5pdF9yeF9hZGRycyIpOwogCkBAIC01NzUwLDcgKzU3NDksNyBAQAogICAgIC8qIFJlc2VydmUgYSBzcG90IGZvciB0aGUgTG9jYWxseSBBZG1pbmlzdGVyZWQgQWRkcmVzcyB0byB3b3JrIGFyb3VuZAogICAgICAqIGFuIDgyNTcxIGlzc3VlIGluIHdoaWNoIGEgcmVzZXQgb24gb25lIHBvcnQgd2lsbCByZWxvYWQgdGhlIE1BQyBvbgogICAgICAqIHRoZSBvdGhlciBwb3J0LiAqLwotICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcxKSAmJiAoaHctPmxhYV9pc19wcmVzZW50ID09IFRSVUUpKQorICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcxKSAmJiAoaHctPmxhYV9pc19wcmVzZW50KSkKICAgICAgICAgcmFyX251bSAtPSAxOwogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikKICAgICAgICAgcmFyX251bSA9IEUxMDAwX1JBUl9FTlRSSUVTX0lDSDhMQU47CkBAIC01NzcxLDExICs1NzcwLDExIEBACiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICogbWNfYWRkciAtIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyB0byBoYXNoCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11aW50MzJfdAordTMyCiBlMTAwMF9oYXNoX21jX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICB1aW50OF90ICptY19hZGRyKQorICAgICAgICAgICAgICAgICAgIHU4ICptY19hZGRyKQogewotICAgIHVpbnQzMl90IGhhc2hfdmFsdWUgPSAwOworICAgIHUzMiBoYXNoX3ZhbHVlID0gMDsKIAogICAgIC8qIFRoZSBwb3J0aW9uIG9mIHRoZSBhZGRyZXNzIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGhhc2ggdGFibGUgaXMKICAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBtY19maWx0ZXJfdHlwZSBzZXR0aW5nLgpAQCAtNTc4OCwzNyArNTc4NywzNyBAQAogICAgIGNhc2UgMDoKICAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7CiAgICAgICAgICAgICAvKiBbNDc6MzhdIGkuZS4gMHgxNTggZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiA2KSB8ICgoKHVpbnQxNl90KSBtY19hZGRyWzVdKSA8PCAyKSk7CisgICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdID4+IDYpIHwgKCgodTE2KSBtY19hZGRyWzVdKSA8PCAyKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBbNDc6MzZdIGkuZS4gMHg1NjMgZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiA0KSB8ICgoKHVpbnQxNl90KSBtY19hZGRyWzVdKSA8PCA0KSk7CisgICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdID4+IDQpIHwgKCgodTE2KSBtY19hZGRyWzVdKSA8PCA0KSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOgogICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgICAgIC8qIFs0NjozN10gaS5lLiAweDJCMSBmb3IgYWJvdmUgZXhhbXBsZSBhZGRyZXNzICovCi0gICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdID4+IDUpIHwgKCgodWludDE2X3QpIG1jX2FkZHJbNV0pIDw8IDMpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gNSkgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDMpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIFs0NjozNV0gaS5lLiAweEFDNiBmb3IgYWJvdmUgZXhhbXBsZSBhZGRyZXNzICovCi0gICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdID4+IDMpIHwgKCgodWludDE2X3QpIG1jX2FkZHJbNV0pIDw8IDUpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gMykgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDUpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICAgICAgLypbNDU6MzZdIGkuZS4gMHgxNjMgZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiA0KSB8ICgoKHVpbnQxNl90KSBtY19hZGRyWzVdKSA8PCA0KSk7CisgICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdID4+IDQpIHwgKCgodTE2KSBtY19hZGRyWzVdKSA8PCA0KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBbNDU6MzRdIGkuZS4gMHg1RDggZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwotICAgICAgICAgICAgaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSA+PiAyKSB8ICgoKHVpbnQxNl90KSBtY19hZGRyWzVdKSA8PCA2KSk7CisgICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdID4+IDIpIHwgKCgodTE2KSBtY19hZGRyWzVdKSA8PCA2KSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAzOgogICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgICAgIC8qIFs0MzozNF0gaS5lLiAweDE4RCBmb3IgYWJvdmUgZXhhbXBsZSBhZGRyZXNzICovCi0gICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdID4+IDIpIHwgKCgodWludDE2X3QpIG1jX2FkZHJbNV0pIDw8IDYpKTsKKyAgICAgICAgICAgIGhhc2hfdmFsdWUgPSAoKG1jX2FkZHJbNF0gPj4gMikgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDYpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIFs0MzozMl0gaS5lLiAweDYzNCBmb3IgYWJvdmUgZXhhbXBsZSBhZGRyZXNzICovCi0gICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdKSB8ICgoKHVpbnQxNl90KSBtY19hZGRyWzVdKSA8PCA4KSk7CisgICAgICAgICAgICBoYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdKSB8ICgoKHUxNikgbWNfYWRkcls1XSkgPDwgOCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4MzgsMTEgKzU4MzcsMTEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQKIGUxMDAwX210YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgdWludDMyX3QgaGFzaF92YWx1ZSkKKyAgICAgICAgICAgICAgdTMyIGhhc2hfdmFsdWUpCiB7Ci0gICAgdWludDMyX3QgaGFzaF9iaXQsIGhhc2hfcmVnOwotICAgIHVpbnQzMl90IG10YTsKLSAgICB1aW50MzJfdCB0ZW1wOworICAgIHUzMiBoYXNoX2JpdCwgaGFzaF9yZWc7CisgICAgdTMyIG10YTsKKyAgICB1MzIgdGVtcDsKIAogICAgIC8qIFRoZSBNVEEgaXMgYSByZWdpc3RlciBhcnJheSBvZiAxMjggMzItYml0IHJlZ2lzdGVycy4KICAgICAgKiBJdCBpcyB0cmVhdGVkIGxpa2UgYW4gYXJyYXkgb2YgNDA5NiBiaXRzLiAgV2Ugd2FudCB0byBzZXQKQEAgLTU4ODcsMTggKzU4ODYsMTggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQKIGUxMDAwX3Jhcl9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgdWludDhfdCAqYWRkciwKLSAgICAgICAgICAgICAgdWludDMyX3QgaW5kZXgpCisgICAgICAgICAgICAgIHU4ICphZGRyLAorICAgICAgICAgICAgICB1MzIgaW5kZXgpCiB7Ci0gICAgdWludDMyX3QgcmFyX2xvdywgcmFyX2hpZ2g7CisgICAgdTMyIHJhcl9sb3csIHJhcl9oaWdoOwogCiAgICAgLyogSFcgZXhwZWN0cyB0aGVzZSBpbiBsaXR0bGUgZW5kaWFuIHNvIHdlIHJldmVyc2UgdGhlIGJ5dGUgb3JkZXIKICAgICAgKiBmcm9tIG5ldHdvcmsgb3JkZXIgKGJpZyBlbmRpYW4pIHRvIGxpdHRsZSBlbmRpYW4KICAgICAgKi8KLSAgICByYXJfbG93ID0gKCh1aW50MzJfdCkgYWRkclswXSB8Ci0gICAgICAgICAgICAgICAoKHVpbnQzMl90KSBhZGRyWzFdIDw8IDgpIHwKLSAgICAgICAgICAgICAgICgodWludDMyX3QpIGFkZHJbMl0gPDwgMTYpIHwgKCh1aW50MzJfdCkgYWRkclszXSA8PCAyNCkpOwotICAgIHJhcl9oaWdoID0gKCh1aW50MzJfdCkgYWRkcls0XSB8ICgodWludDMyX3QpIGFkZHJbNV0gPDwgOCkpOworICAgIHJhcl9sb3cgPSAoKHUzMikgYWRkclswXSB8CisgICAgICAgICAgICAgICAoKHUzMikgYWRkclsxXSA8PCA4KSB8CisgICAgICAgICAgICAgICAoKHUzMikgYWRkclsyXSA8PCAxNikgfCAoKHUzMikgYWRkclszXSA8PCAyNCkpOworICAgIHJhcl9oaWdoID0gKCh1MzIpIGFkZHJbNF0gfCAoKHUzMikgYWRkcls1XSA8PCA4KSk7CiAKICAgICAvKiBEaXNhYmxlIFJ4IGFuZCBmbHVzaCBhbGwgUnggZnJhbWVzIGJlZm9yZSBlbmFibGluZyBSU1MgdG8gYXZvaWQgUngKICAgICAgKiB1bml0IGhhbmcuCkBAIC01OTIyLDcgKzU5MjEsNyBAQAogICAgIGNhc2UgZTEwMDBfODI1NzE6CiAgICAgY2FzZSBlMTAwMF84MjU3MjoKICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgotICAgICAgICBpZiAoaHctPmxlYXZlX2F2X2JpdF9vZmYgPT0gVFJVRSkKKyAgICAgICAgaWYgKGh3LT5sZWF2ZV9hdl9iaXRfb2ZmKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogSW5kaWNhdGUgdG8gaGFyZHdhcmUgdGhlIEFkZHJlc3MgaXMgVmFsaWQuICovCkBAIC01OTQ1LDEwICs1OTQ0LDEwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkCiBlMTAwMF93cml0ZV92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUpCisgICAgICAgICAgICAgICAgIHUzMiBvZmZzZXQsCisgICAgICAgICAgICAgICAgIHUzMiB2YWx1ZSkKIHsKLSAgICB1aW50MzJfdCB0ZW1wOworICAgIHUzMiB0ZW1wOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKQogICAgICAgICByZXR1cm47CkBAIC01OTczLDEwICs1OTcyLDEwIEBACiBzdGF0aWMgdm9pZAogZTEwMDBfY2xlYXJfdmZ0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICB1aW50MzJfdCB2ZnRhX3ZhbHVlID0gMDsKLSAgICB1aW50MzJfdCB2ZnRhX29mZnNldCA9IDA7Ci0gICAgdWludDMyX3QgdmZ0YV9iaXRfaW5fcmVnID0gMDsKKyAgICB1MzIgb2Zmc2V0OworICAgIHUzMiB2ZnRhX3ZhbHVlID0gMDsKKyAgICB1MzIgdmZ0YV9vZmZzZXQgPSAwOworICAgIHUzMiB2ZnRhX2JpdF9pbl9yZWcgPSAwOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKQogICAgICAgICByZXR1cm47CkBAIC02MDA0LDE1ICs2MDAzLDE1IEBACiAgICAgfQogfQogCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfaWRfbGVkX2luaXQoc3RydWN0IGUxMDAwX2h3ICogaHcpCiB7Ci0gICAgdWludDMyX3QgbGVkY3RsOwotICAgIGNvbnN0IHVpbnQzMl90IGxlZGN0bF9tYXNrID0gMHgwMDAwMDBGRjsKLSAgICBjb25zdCB1aW50MzJfdCBsZWRjdGxfb24gPSBFMTAwMF9MRURDVExfTU9ERV9MRURfT047Ci0gICAgY29uc3QgdWludDMyX3QgbGVkY3RsX29mZiA9IEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PRkY7Ci0gICAgdWludDE2X3QgZWVwcm9tX2RhdGEsIGksIHRlbXA7Ci0gICAgY29uc3QgdWludDE2X3QgbGVkX21hc2sgPSAweDBGOworICAgIHUzMiBsZWRjdGw7CisgICAgY29uc3QgdTMyIGxlZGN0bF9tYXNrID0gMHgwMDAwMDBGRjsKKyAgICBjb25zdCB1MzIgbGVkY3RsX29uID0gRTEwMDBfTEVEQ1RMX01PREVfTEVEX09OOworICAgIGNvbnN0IHUzMiBsZWRjdGxfb2ZmID0gRTEwMDBfTEVEQ1RMX01PREVfTEVEX09GRjsKKyAgICB1MTYgZWVwcm9tX2RhdGEsIGksIHRlbXA7CisgICAgY29uc3QgdTE2IGxlZF9tYXNrID0gMHgwRjsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfaWRfbGVkX2luaXQiKTsKIApAQCAtNjA4NywxMSArNjA4NiwxMSBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX3NldHVwX2xlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGxlZGN0bDsKLSAgICBpbnQzMl90IHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOworICAgIHUzMiBsZWRjdGw7CisgICAgczMyIHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXR1cF9sZWQiKTsKIApAQCAtNjExMiw3ICs2MTExLDcgQEAKICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfR01JSV9GSUZPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKGh3LT5waHlfc3BkX2RlZmF1bHQgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2KShody0+cGh5X3NwZF9kZWZhdWx0ICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfklHUDAxRTEwMDBfR01JSV9TUEQpKTsKICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKQEAgLTYxNDYsMTEgKzYxNDUsMTEgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9ibGlua19sZWRfc3RhcnQoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICBpbnQxNl90ICBpOwotICAgIHVpbnQzMl90IGxlZGN0bF9ibGluayA9IDA7CisgICAgczE2ICBpOworICAgIHUzMiBsZWRjdGxfYmxpbmsgPSAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9pZF9sZWRfYmxpbmtfb24iKTsKIApAQCAtNjE4MSwxMCArNjE4MCwxMCBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX2NsZWFudXBfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsID0gRTEwMDBfU1VDQ0VTUzsKKyAgICBzMzIgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NsZWFudXBfbGVkIik7CiAKQEAgLTYyMjMsMTAgKzYyMjIsMTAgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorczMyCiBlMTAwMF9sZWRfb24oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworICAgIHUzMiBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9sZWRfb24iKTsKIApAQCAtNjI3NCwxMCArNjI3MywxMCBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX2xlZF9vZmYoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworICAgIHUzMiBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9sZWRfb2ZmIik7CiAKQEAgLTYzMjgsNyArNjMyNyw3IEBACiBzdGF0aWMgdm9pZAogZTEwMDBfY2xlYXJfaHdfY250cnMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB2b2xhdGlsZSB1aW50MzJfdCB0ZW1wOworICAgIHZvbGF0aWxlIHUzMiB0ZW1wOwogCiAgICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDUkNFUlJTKTsKICAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNZTUVSUlMpOwpAQCAtNjQyNSw3ICs2NDI0LDcgQEAKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICogQ2FsbCB0aGlzIGFmdGVyIGUxMDAwX2luaXRfaHcuIFlvdSBtYXkgb3ZlcnJpZGUgdGhlIElGUyBkZWZhdWx0cyBieSBzZXR0aW5nCi0gKiBody0+aWZzX3BhcmFtc19mb3JjZWQgdG8gVFJVRS4gSG93ZXZlciwgeW91IG11c3QgaW5pdGlhbGl6ZSBody0+CisgKiBody0+aWZzX3BhcmFtc19mb3JjZWQgdG8gdHJ1ZS4gSG93ZXZlciwgeW91IG11c3QgaW5pdGlhbGl6ZSBody0+CiAgKiBjdXJyZW50X2lmc192YWwsIGlmc19taW5fdmFsLCBpZnNfbWF4X3ZhbCwgaWZzX3N0ZXBfc2l6ZSwgYW5kIGlmc19yYXRpbwogICogYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY0NDIsNyArNjQ0MSw3IEBACiAgICAgICAgICAgICBody0+aWZzX3N0ZXBfc2l6ZSA9IElGU19TVEVQOwogICAgICAgICAgICAgaHctPmlmc19yYXRpbyA9IElGU19SQVRJTzsKICAgICAgICAgfQotICAgICAgICBody0+aW5faWZzX21vZGUgPSBGQUxTRTsKKyAgICAgICAgaHctPmluX2lmc19tb2RlID0gZmFsc2U7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQUlULCAwKTsKICAgICB9IGVsc2UgewogICAgICAgICBERUJVR09VVCgiTm90IGluIEFkYXB0aXZlIElGUyBtb2RlIVxuIik7CkBAIC02NDY1LDcgKzY0NjQsNyBAQAogICAgIGlmIChody0+YWRhcHRpdmVfaWZzKSB7CiAgICAgICAgIGlmICgoaHctPmNvbGxpc2lvbl9kZWx0YSAqIGh3LT5pZnNfcmF0aW8pID4gaHctPnR4X3BhY2tldF9kZWx0YSkgewogICAgICAgICAgICAgaWYgKGh3LT50eF9wYWNrZXRfZGVsdGEgPiBNSU5fTlVNX1hNSVRTKSB7Ci0gICAgICAgICAgICAgICAgaHctPmluX2lmc19tb2RlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBody0+aW5faWZzX21vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChody0+Y3VycmVudF9pZnNfdmFsIDwgaHctPmlmc19tYXhfdmFsKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChody0+Y3VycmVudF9pZnNfdmFsID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBody0+Y3VycmVudF9pZnNfdmFsID0gaHctPmlmc19taW5fdmFsOwpAQCAtNjQ3Nyw3ICs2NDc2LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChody0+aW5faWZzX21vZGUgJiYgKGh3LT50eF9wYWNrZXRfZGVsdGEgPD0gTUlOX05VTV9YTUlUUykpIHsKICAgICAgICAgICAgICAgICBody0+Y3VycmVudF9pZnNfdmFsID0gMDsKLSAgICAgICAgICAgICAgICBody0+aW5faWZzX21vZGUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBody0+aW5faWZzX21vZGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEFJVCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY0OTYsMTAgKzY0OTUsMTAgQEAKIHZvaWQKIGUxMDAwX3RiaV9hZGp1c3Rfc3RhdHMoc3RydWN0IGUxMDAwX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX2h3X3N0YXRzICpzdGF0cywKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZnJhbWVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICptYWNfYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgdTMyIGZyYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdTggKm1hY19hZGRyKQogewotICAgIHVpbnQ2NF90IGNhcnJ5X2JpdDsKKyAgICB1NjQgY2FycnlfYml0OwogCiAgICAgLyogRmlyc3QgYWRqdXN0IHRoZSBmcmFtZSBsZW5ndGguICovCiAgICAgZnJhbWVfbGVuLS07CkBAIC02NTI4LDcgKzY1MjcsNyBAQAogICAgICAqIHNpbmNlIHRoZSB0ZXN0IGZvciBhIG11bHRpY2FzdCBmcmFtZSB3aWxsIHRlc3QgcG9zaXRpdmUgb24KICAgICAgKiBhIGJyb2FkY2FzdCBmcmFtZS4KICAgICAgKi8KLSAgICBpZiAoKG1hY19hZGRyWzBdID09ICh1aW50OF90KSAweGZmKSAmJiAobWFjX2FkZHJbMV0gPT0gKHVpbnQ4X3QpIDB4ZmYpKQorICAgIGlmICgobWFjX2FkZHJbMF0gPT0gKHU4KSAweGZmKSAmJiAobWFjX2FkZHJbMV0gPT0gKHU4KSAweGZmKSkKICAgICAgICAgLyogQnJvYWRjYXN0IHBhY2tldCAqLwogICAgICAgICBzdGF0cy0+YnByYysrOwogICAgIGVsc2UgaWYgKCptYWNfYWRkciAmIDB4MDEpCkBAIC02NTc0LDkgKzY1NzMsOSBAQAogdm9pZAogZTEwMDBfZ2V0X2J1c19pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCByZXRfdmFsOwotICAgIHVpbnQxNl90IHBjaV9leF9saW5rX3N0YXR1czsKLSAgICB1aW50MzJfdCBzdGF0dXM7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IHBjaV9leF9saW5rX3N0YXR1czsKKyAgICB1MzIgc3RhdHVzOwogCiAgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKICAgICBjYXNlIGUxMDAwXzgyNTQyX3JldjJfMDoKQEAgLTY2NDgsOCArNjY0Nyw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogZTEwMDBfd3JpdGVfcmVnX2lvKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlKQorICAgICAgICAgICAgICAgICAgIHUzMiBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlKQogewogICAgIHVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IGh3LT5pb19iYXNlOwogICAgIHVuc2lnbmVkIGxvbmcgaW9fZGF0YSA9IGh3LT5pb19iYXNlICsgNDsKQEAgLTY2NzMsMTUgKzY2NzIsMTUgQEAKICAqIHJlZ2lzdGVyIHRvIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHJhbmdlLgogICogRm9yIElHUCBwaHkncywgdGhlIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHJhbmdlIGJ5IHRoZSBBR0MgcmVnaXN0ZXJzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2dldF9jYWJsZV9sZW5ndGgoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKm1pbl9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICptYXhfbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICB1MTYgKm1pbl9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqbWF4X2xlbmd0aCkKIHsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgYWdjX3ZhbHVlID0gMDsKLSAgICB1aW50MTZfdCBpLCBwaHlfZGF0YTsKLSAgICB1aW50MTZfdCBjYWJsZV9sZW5ndGg7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IGFnY192YWx1ZSA9IDA7CisgICAgdTE2IGksIHBoeV9kYXRhOworICAgIHUxNiBjYWJsZV9sZW5ndGg7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2dldF9jYWJsZV9sZW5ndGgiKTsKIApAQCAtNjc1Miw5ICs2NzUxLDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCkgeyAvKiBGb3IgSUdQIFBIWSAqLwotICAgICAgICB1aW50MTZfdCBjdXJfYWdjX3ZhbHVlOwotICAgICAgICB1aW50MTZfdCBtaW5fYWdjX3ZhbHVlID0gSUdQMDFFMTAwMF9BR0NfTEVOR1RIX1RBQkxFX1NJWkU7Ci0gICAgICAgIHVpbnQxNl90IGFnY19yZWdfYXJyYXlbSUdQMDFFMTAwMF9QSFlfQ0hBTk5FTF9OVU1dID0KKyAgICAgICAgdTE2IGN1cl9hZ2NfdmFsdWU7CisgICAgICAgIHUxNiBtaW5fYWdjX3ZhbHVlID0gSUdQMDFFMTAwMF9BR0NfTEVOR1RIX1RBQkxFX1NJWkU7CisgICAgICAgIHUxNiBhZ2NfcmVnX2FycmF5W0lHUDAxRTEwMDBfUEhZX0NIQU5ORUxfTlVNXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7SUdQMDFFMTAwMF9QSFlfQUdDX0EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfQUdDX0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfQUdDX0MsCkBAIC02ODAwLDkgKzY3OTksOSBAQAogICAgICAgICAgICAgICAgICAgICAgIElHUDAxRTEwMDBfQUdDX1JBTkdFOwogICAgIH0gZWxzZSBpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMiB8fAogICAgICAgICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMykgewotICAgICAgICB1aW50MTZfdCBjdXJfYWdjX2luZGV4LCBtYXhfYWdjX2luZGV4ID0gMDsKLSAgICAgICAgdWludDE2X3QgbWluX2FnY19pbmRleCA9IElHUDAyRTEwMDBfQUdDX0xFTkdUSF9UQUJMRV9TSVpFIC0gMTsKLSAgICAgICAgdWludDE2X3QgYWdjX3JlZ19hcnJheVtJR1AwMkUxMDAwX1BIWV9DSEFOTkVMX05VTV0gPQorICAgICAgICB1MTYgY3VyX2FnY19pbmRleCwgbWF4X2FnY19pbmRleCA9IDA7CisgICAgICAgIHUxNiBtaW5fYWdjX2luZGV4ID0gSUdQMDJFMTAwMF9BR0NfTEVOR1RIX1RBQkxFX1NJWkUgLSAxOworICAgICAgICB1MTYgYWdjX3JlZ19hcnJheVtJR1AwMkUxMDAwX1BIWV9DSEFOTkVMX05VTV0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0lHUDAyRTEwMDBfUEhZX0FHQ19BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHUDAyRTEwMDBfUEhZX0FHQ19CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHUDAyRTEwMDBfUEhZX0FHQ19DLApAQCAtNjg2NCwxMiArNjg2MywxMiBAQAogICogcmV0dXJuIDAuICBJZiB0aGUgbGluayBzcGVlZCBpcyAxMDAwIE1icHMgdGhlIHBvbGFyaXR5IHN0YXR1cyBpcyBpbiB0aGUKICAqIElHUDAxRTEwMDBfUEhZX1BDU19JTklUX1JFRy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9jaGVja19wb2xhcml0eShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgZTEwMDBfcmV2X3BvbGFyaXR5ICpwb2xhcml0eSkKIHsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgcGh5X2RhdGE7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IHBoeV9kYXRhOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9jaGVja19wb2xhcml0eSIpOwogCkBAIC02OTQwLDExICs2OTM5LDExIEBACiAgKiBMaW5rIEhlYWx0aCByZWdpc3Rlci4gIEluIElHUCB0aGlzIGJpdCBpcyBsYXRjaGVkIGhpZ2gsIHNvIHRoZSBkcml2ZXIgbXVzdAogICogcmVhZCBpdCBpbW1lZGlhdGVseSBhZnRlciBsaW5rIGlzIGVzdGFibGlzaGVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICB1MTYgcGh5X2RhdGE7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NoZWNrX2Rvd25zaGlmdCIpOwogCkBAIC02OTY4LDcgKzY5NjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE04OEUxMDAwX1BTU1JfRE9XTlNISUZUX1NISUZUOwogICAgIH0gZWxzZSBpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZmUpIHsKICAgICAgICAgLyogZTEwMDBfcGh5X2lmZSBzdXBwb3J0cyAxMC8xMDAgc3BlZWQgb25seSAqLwotICAgICAgICBody0+c3BlZWRfZG93bmdyYWRlZCA9IEZBTFNFOworICAgICAgICBody0+c3BlZWRfZG93bmdyYWRlZCA9IGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwpAQCAtNjk4NiwxOCArNjk4NSwxOCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfY29uZmlnX2RzcF9hZnRlcl9saW5rX2NoYW5nZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuX3QgbGlua191cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsaW5rX3VwKQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YSwgcGh5X3NhdmVkX2RhdGEsIHNwZWVkLCBkdXBsZXgsIGk7Ci0gICAgdWludDE2X3QgZHNwX3JlZ19hcnJheVtJR1AwMUUxMDAwX1BIWV9DSEFOTkVMX05VTV0gPQorICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YSwgcGh5X3NhdmVkX2RhdGEsIHNwZWVkLCBkdXBsZXgsIGk7CisgICAgdTE2IGRzcF9yZWdfYXJyYXlbSUdQMDFFMTAwMF9QSFlfQ0hBTk5FTF9OVU1dID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7SUdQMDFFMTAwMF9QSFlfQUdDX1BBUkFNX0EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfQUdDX1BBUkFNX0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfQUdDX1BBUkFNX0MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfQUdDX1BBUkFNX0R9OwotICAgIHVpbnQxNl90IG1pbl9sZW5ndGgsIG1heF9sZW5ndGg7CisgICAgdTE2IG1pbl9sZW5ndGgsIG1heF9sZW5ndGg7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvbmZpZ19kc3BfYWZ0ZXJfbGlua19jaGFuZ2UiKTsKIApAQCAtNzAzOSw4ICs3MDM4LDggQEAKICAgICAgICAgICAgIGlmICgoaHctPmZmZV9jb25maWdfc3RhdGUgPT0gZTEwMDBfZmZlX2NvbmZpZ19lbmFibGVkKSAmJgogICAgICAgICAgICAgICAgKG1pbl9sZW5ndGggPCBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoXzUwKSkgewogCi0gICAgICAgICAgICAgICAgdWludDE2X3QgZmZlX2lkbGVfZXJyX3RpbWVvdXQgPSBGRkVfSURMRV9FUlJfQ09VTlRfVElNRU9VVF8yMDsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBpZGxlX2VycnMgPSAwOworICAgICAgICAgICAgICAgIHUxNiBmZmVfaWRsZV9lcnJfdGltZW91dCA9IEZGRV9JRExFX0VSUl9DT1VOVF9USU1FT1VUXzIwOworICAgICAgICAgICAgICAgIHUzMiBpZGxlX2VycnMgPSAwOwogCiAgICAgICAgICAgICAgICAgLyogY2xlYXIgcHJldmlvdXMgaWRsZSBlcnJvciBjb3VudHMgKi8KICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLApAQCAtNzE3NCwxMSArNzE3MywxMSBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9zZXRfcGh5X21vZGUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgZWVwcm9tX2RhdGE7CisgICAgczMyIHJldF92YWw7CisgICAgdTE2IGVlcHJvbV9kYXRhOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXRfcGh5X21vZGUiKTsKIApAQCAtNzE5OCw3ICs3MTk3LDcgQEAKICAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgICAgICAgICBody0+cGh5X3Jlc2V0X2Rpc2FibGUgPSBGQUxTRTsKKyAgICAgICAgICAgIGh3LT5waHlfcmVzZXRfZGlzYWJsZSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjE5LDEzICs3MjE4LDEzIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl90IGFjdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWN0aXZlKQogewotICAgIHVpbnQzMl90IHBoeV9jdHJsID0gMDsKLSAgICBpbnQzMl90IHJldF92YWw7Ci0gICAgdWludDE2X3QgcGh5X2RhdGE7CisgICAgdTMyIHBoeV9jdHJsID0gMDsKKyAgICBzMzIgcmV0X3ZhbDsKKyAgICB1MTYgcGh5X2RhdGE7CiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZSIpOwogCiAgICAgaWYgKGh3LT5waHlfdHlwZSAhPSBlMTAwMF9waHlfaWdwICYmIGh3LT5waHlfdHlwZSAhPSBlMTAwMF9waHlfaWdwXzIKQEAgLTczNDksMTMgKzczNDgsMTMgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX3NldF9kMF9scGx1X3N0YXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuX3QgYWN0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3RpdmUpCiB7Ci0gICAgdWludDMyX3QgcGh5X2N0cmwgPSAwOwotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICB1MzIgcGh5X2N0cmwgPSAwOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBwaHlfZGF0YTsKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldF9kMF9scGx1X3N0YXRlIik7CiAKICAgICBpZiAoaHctPm1hY190eXBlIDw9IGUxMDAwXzgyNTQ3X3Jldl8yKQpAQCAtNzQ0MCwxMiArNzQzOSwxMiBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfc2V0X3Zjb19zcGVlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgIHJldF92YWw7Ci0gICAgdWludDE2X3QgZGVmYXVsdF9wYWdlID0gMDsKLSAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICBzMzIgIHJldF92YWw7CisgICAgdTE2IGRlZmF1bHRfcGFnZSA9IDA7CisgICAgdTE2IHBoeV9kYXRhOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXRfdmNvX3NwZWVkIik7CiAKQEAgLTc1MDQsMTggKzc1MDMsMTggQEAKICAqCiAgKiByZXR1cm5zOiAtIEUxMDAwX1NVQ0NFU1MgLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAotZTEwMDBfaG9zdF9pZl9yZWFkX2Nvb2tpZShzdHJ1Y3QgZTEwMDBfaHcgKiBodywgdWludDhfdCAqYnVmZmVyKQorc3RhdGljIHMzMgorZTEwMDBfaG9zdF9pZl9yZWFkX2Nvb2tpZShzdHJ1Y3QgZTEwMDBfaHcgKiBodywgdTggKmJ1ZmZlcikKIHsKLSAgICB1aW50OF90IGk7Ci0gICAgdWludDMyX3Qgb2Zmc2V0ID0gRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX09GRlNFVDsKLSAgICB1aW50OF90IGxlbmd0aCA9IEUxMDAwX01OR19ESENQX0NPT0tJRV9MRU5HVEg7CisgICAgdTggaTsKKyAgICB1MzIgb2Zmc2V0ID0gRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX09GRlNFVDsKKyAgICB1OCBsZW5ndGggPSBFMTAwMF9NTkdfREhDUF9DT09LSUVfTEVOR1RIOwogCiAgICAgbGVuZ3RoID0gKGxlbmd0aCA+PiAyKTsKICAgICBvZmZzZXQgPSAob2Zmc2V0ID4+IDIpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICooKHVpbnQzMl90ICopIGJ1ZmZlciArIGkpID0KKyAgICAgICAgKigodTMyICopIGJ1ZmZlciArIGkpID0KICAgICAgICAgICAgIEUxMDAwX1JFQURfUkVHX0FSUkFZX0RXT1JEKGh3LCBIT1NUX0lGLCBvZmZzZXQgKyBpKTsKICAgICB9CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CkBAIC03NTMxLDExICs3NTMwLDExIEBACiAgKiAgICAgICAgICAgIHRpbWVvdXQKICAqICAgICAgICAgIC0gRTEwMDBfU1VDQ0VTUyBmb3Igc3VjY2Vzcy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX21uZ19lbmFibGVfaG9zdF9pZihzdHJ1Y3QgZTEwMDBfaHcgKiBodykKIHsKLSAgICB1aW50MzJfdCBoaWNyOwotICAgIHVpbnQ4X3QgaTsKKyAgICB1MzIgaGljcjsKKyAgICB1OCBpOwogCiAgICAgLyogQ2hlY2sgdGhhdCB0aGUgaG9zdCBpbnRlcmZhY2UgaXMgZW5hYmxlZC4gKi8KICAgICBoaWNyID0gRTEwMDBfUkVBRF9SRUcoaHcsIEhJQ1IpOwpAQCAtNzU2NSwxNCArNzU2NCwxNCBAQAogICoKICAqIHJldHVybnMgIC0gRTEwMDBfU1VDQ0VTUyBmb3Igc3VjY2Vzcy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKLWUxMDAwX21uZ19ob3N0X2lmX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqIGh3LCB1aW50OF90ICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGgsIHVpbnQxNl90IG9mZnNldCwgdWludDhfdCAqc3VtKQorc3RhdGljIHMzMgorZTEwMDBfbW5nX2hvc3RfaWZfd3JpdGUoc3RydWN0IGUxMDAwX2h3ICogaHcsIHU4ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB1MTYgbGVuZ3RoLCB1MTYgb2Zmc2V0LCB1OCAqc3VtKQogewotICAgIHVpbnQ4X3QgKnRtcDsKLSAgICB1aW50OF90ICpidWZwdHIgPSBidWZmZXI7Ci0gICAgdWludDMyX3QgZGF0YSA9IDA7Ci0gICAgdWludDE2X3QgcmVtYWluaW5nLCBpLCBqLCBwcmV2X2J5dGVzOworICAgIHU4ICp0bXA7CisgICAgdTggKmJ1ZnB0ciA9IGJ1ZmZlcjsKKyAgICB1MzIgZGF0YSA9IDA7CisgICAgdTE2IHJlbWFpbmluZywgaSwgaiwgcHJldl9ieXRlczsKIAogICAgIC8qIHN1bSA9IG9ubHkgc3VtIG9mIHRoZSBkYXRhIGFuZCBpdCBpcyBub3QgY2hlY2tzdW0gKi8KIApAQCAtNzU4MCwxNCArNzU3OSwxNCBAQAogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9QQVJBTTsKICAgICB9CiAKLSAgICB0bXAgPSAodWludDhfdCAqKSZkYXRhOworICAgIHRtcCA9ICh1OCAqKSZkYXRhOwogICAgIHByZXZfYnl0ZXMgPSBvZmZzZXQgJiAweDM7CiAgICAgb2Zmc2V0ICY9IDB4RkZGQzsKICAgICBvZmZzZXQgPj49IDI7CiAKICAgICBpZiAocHJldl9ieXRlcykgewogICAgICAgICBkYXRhID0gRTEwMDBfUkVBRF9SRUdfQVJSQVlfRFdPUkQoaHcsIEhPU1RfSUYsIG9mZnNldCk7Ci0gICAgICAgIGZvciAoaiA9IHByZXZfYnl0ZXM7IGogPCBzaXplb2YodWludDMyX3QpOyBqKyspIHsKKyAgICAgICAgZm9yIChqID0gcHJldl9ieXRlczsgaiA8IHNpemVvZih1MzIpOyBqKyspIHsKICAgICAgICAgICAgICoodG1wICsgaikgPSAqYnVmcHRyKys7CiAgICAgICAgICAgICAqc3VtICs9ICoodG1wICsgaik7CiAgICAgICAgIH0KQEAgLTc2MDUsNyArNzYwNCw3IEBACiAgICAgLyogVGhlIGRldmljZSBkcml2ZXIgd3JpdGVzIHRoZSByZWxldmFudCBjb21tYW5kIGJsb2NrIGludG8gdGhlCiAgICAgICogcmFtIGFyZWEuICovCiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBzaXplb2YodWludDMyX3QpOyBqKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemVvZih1MzIpOyBqKyspIHsKICAgICAgICAgICAgICoodG1wICsgaikgPSAqYnVmcHRyKys7CiAgICAgICAgICAgICAqc3VtICs9ICoodG1wICsgaik7CiAgICAgICAgIH0KQEAgLTc2MTMsNyArNzYxMiw3IEBACiAgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWV9EV09SRChodywgSE9TVF9JRiwgb2Zmc2V0ICsgaSwgZGF0YSk7CiAgICAgfQogICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemVvZih1aW50MzJfdCk7IGorKykgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKHUzMik7IGorKykgewogICAgICAgICAgICAgaWYgKGogPCByZW1haW5pbmcpCiAgICAgICAgICAgICAgICAgKih0bXAgKyBqKSA9ICpidWZwdHIrKzsKICAgICAgICAgICAgIGVsc2UKQEAgLTc2MzMsMjMgKzc2MzIsMjMgQEAKICAqCiAgKiByZXR1cm5zICAtIEUxMDAwX1NVQ0NFU1MgZm9yIHN1Y2Nlc3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9tbmdfd3JpdGVfY21kX2hlYWRlcihzdHJ1Y3QgZTEwMDBfaHcgKiBodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19jb21tYW5kX2hlYWRlciAqIGhkcikKIHsKLSAgICB1aW50MTZfdCBpOwotICAgIHVpbnQ4X3Qgc3VtOwotICAgIHVpbnQ4X3QgKmJ1ZmZlcjsKKyAgICB1MTYgaTsKKyAgICB1OCBzdW07CisgICAgdTggKmJ1ZmZlcjsKIAogICAgIC8qIFdyaXRlIHRoZSB3aG9sZSBjb21tYW5kIGhlYWRlciBzdHJ1Y3R1cmUgd2hpY2ggaW5jbHVkZXMgc3VtIG9mCiAgICAgICogdGhlIGJ1ZmZlciAqLwogCi0gICAgdWludDE2X3QgbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBlMTAwMF9ob3N0X21uZ19jb21tYW5kX2hlYWRlcik7CisgICAgdTE2IGxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfY29tbWFuZF9oZWFkZXIpOwogCiAgICAgc3VtID0gaGRyLT5jaGVja3N1bTsKICAgICBoZHItPmNoZWNrc3VtID0gMDsKIAotICAgIGJ1ZmZlciA9ICh1aW50OF90ICopIGhkcjsKKyAgICBidWZmZXIgPSAodTggKikgaGRyOwogICAgIGkgPSBsZW5ndGg7CiAgICAgd2hpbGUgKGktLSkKICAgICAgICAgc3VtICs9IGJ1ZmZlcltpXTsKQEAgLTc2NTksNyArNzY1OCw3IEBACiAgICAgbGVuZ3RoID4+PSAyOwogICAgIC8qIFRoZSBkZXZpY2UgZHJpdmVyIHdyaXRlcyB0aGUgcmVsZXZhbnQgY29tbWFuZCBibG9jayBpbnRvIHRoZSByYW0gYXJlYS4gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZX0RXT1JEKGh3LCBIT1NUX0lGLCBpLCAqKCh1aW50MzJfdCAqKSBoZHIgKyBpKSk7CisgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWV9EV09SRChodywgSE9TVF9JRiwgaSwgKigodTMyICopIGhkciArIGkpKTsKICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOwogICAgIH0KIApAQCAtNzY3MywxMCArNzY3MiwxMCBAQAogICoKICAqIHJldHVybnMgIC0gRTEwMDBfU1VDQ0VTUyBmb3Igc3VjY2Vzcy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX21uZ193cml0ZV9jb21taXQoc3RydWN0IGUxMDAwX2h3ICogaHcpCiB7Ci0gICAgdWludDMyX3QgaGljcjsKKyAgICB1MzIgaGljcjsKIAogICAgIGhpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSElDUik7CiAgICAgLyogU2V0dGluZyB0aGlzIGJpdCB0ZWxscyB0aGUgQVJDIHRoYXQgYSBuZXcgY29tbWFuZCBpcyBwZW5kaW5nLiAqLwpAQCAtNzY4OSwzNSArNzY4OCwzNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgbW9kZSBvZiB0aGUgZmlybXdhcmUuCiAgKgotICogcmV0dXJucyAgLSBUUlVFIHdoZW4gdGhlIG1vZGUgaXMgSUFNVCBvciBGQUxTRS4KKyAqIHJldHVybnMgIC0gdHJ1ZSB3aGVuIHRoZSBtb2RlIGlzIElBTVQgb3IgZmFsc2UuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWJvb2xlYW5fdAorYm9vbAogZTEwMDBfY2hlY2tfbW5nX21vZGUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCBmd3NtOworICAgIHUzMiBmd3NtOwogCiAgICAgZndzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBGV1NNKTsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICBpZiAoKGZ3c20gJiBFMTAwMF9GV1NNX01PREVfTUFTSykgPT0KICAgICAgICAgICAgIChFMTAwMF9NTkdfSUNIX0lBTVRfTU9ERSA8PCBFMTAwMF9GV1NNX01PREVfU0hJRlQpKQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKChmd3NtICYgRTEwMDBfRldTTV9NT0RFX01BU0spID09CiAgICAgICAgICAgICAgICAoRTEwMDBfTU5HX0lBTVRfTU9ERSA8PCBFMTAwMF9GV1NNX01PREVfU0hJRlQpKQotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGRoY3AgaW5mbyAuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKLWUxMDAwX21uZ193cml0ZV9kaGNwX2luZm8oc3RydWN0IGUxMDAwX2h3ICogaHcsIHVpbnQ4X3QgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbGVuZ3RoKQorczMyCitlMTAwMF9tbmdfd3JpdGVfZGhjcF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqIGh3LCB1OCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgbGVuZ3RoKQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKKyAgICBzMzIgcmV0X3ZhbDsKICAgICBzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfY29tbWFuZF9oZWFkZXIgaGRyOwogCiAgICAgaGRyLmNvbW1hbmRfaWQgPSBFMTAwMF9NTkdfREhDUF9UWF9QQVlMT0FEX0NNRDsKQEAgLTc3NDUsMTEgKzc3NDQsMTEgQEAKICAqCiAgKiByZXR1cm5zICAtIGNoZWNrc3VtIG9mIGJ1ZmZlciBjb250ZW50cy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHVpbnQ4X3QKLWUxMDAwX2NhbGN1bGF0ZV9tbmdfY2hlY2tzdW0oY2hhciAqYnVmZmVyLCB1aW50MzJfdCBsZW5ndGgpCitzdGF0aWMgdTgKK2UxMDAwX2NhbGN1bGF0ZV9tbmdfY2hlY2tzdW0oY2hhciAqYnVmZmVyLCB1MzIgbGVuZ3RoKQogewotICAgIHVpbnQ4X3Qgc3VtID0gMDsKLSAgICB1aW50MzJfdCBpOworICAgIHU4IHN1bSA9IDA7CisgICAgdTMyIGk7CiAKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CkBAIC03NzU3LDIzICs3NzU2LDIzIEBACiAgICAgZm9yIChpPTA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgc3VtICs9IGJ1ZmZlcltpXTsKIAotICAgIHJldHVybiAodWludDhfdCkgKDAgLSBzdW0pOworICAgIHJldHVybiAodTgpICgwIC0gc3VtKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHR4IHBrdCBmaWx0ZXJpbmcgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBub3QuCiAgKgotICogcmV0dXJucyAgLSBUUlVFIGZvciBwYWNrZXQgZmlsdGVyaW5nIG9yIEZBTFNFLgorICogcmV0dXJucyAgLSB0cnVlIGZvciBwYWNrZXQgZmlsdGVyaW5nIG9yIGZhbHNlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1ib29sZWFuX3QKK2Jvb2wKIGUxMDAwX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgLyogY2FsbGVkIGluIGluaXQgYXMgd2VsbCBhcyB3YXRjaGRvZyB0aW1lciBmdW5jdGlvbnMgKi8KIAotICAgIGludDMyX3QgcmV0X3ZhbCwgY2hlY2tzdW07Ci0gICAgYm9vbGVhbl90IHR4X2ZpbHRlciA9IEZBTFNFOworICAgIHMzMiByZXRfdmFsLCBjaGVja3N1bTsKKyAgICBib29sIHR4X2ZpbHRlciA9IGZhbHNlOwogICAgIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19kaGNwX2Nvb2tpZSAqaGRyID0gJihody0+bW5nX2Nvb2tpZSk7Ci0gICAgdWludDhfdCAqYnVmZmVyID0gKHVpbnQ4X3QgKikgJihody0+bW5nX2Nvb2tpZSk7CisgICAgdTggKmJ1ZmZlciA9ICh1OCAqKSAmKGh3LT5tbmdfY29va2llKTsKIAogICAgIGlmIChlMTAwMF9jaGVja19tbmdfbW9kZShodykpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX21uZ19lbmFibGVfaG9zdF9pZihodyk7CkBAIC03Nzg3LDExICs3Nzg2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX01OR19ESENQX0NPT0tJRV9MRU5HVEgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoZHItPnN0YXR1cyAmCiAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1BBUlNJTkdfU1VQUE9SVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHR4X2ZpbHRlciA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICB0eF9maWx0ZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0eF9maWx0ZXIgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICB0eF9maWx0ZXIgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdHhfZmlsdGVyID0gVFJVRTsKKyAgICAgICAgICAgICAgICB0eF9maWx0ZXIgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC03ODA0LDQxICs3ODAzLDQxIEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqCi0gKiByZXR1cm5zOiAtIFRSVUUvRkFMU0UKKyAqIHJldHVybnM6IC0gdHJ1ZS9mYWxzZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXVpbnQzMl90Cit1MzIKIGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgbWFuYzsKLSAgICB1aW50MzJfdCBmd3NtLCBmYWN0cHM7CisgICAgdTMyIG1hbmM7CisgICAgdTMyIGZ3c20sIGZhY3RwczsKIAogICAgIGlmIChody0+YXNmX2Zpcm13YXJlX3ByZXNlbnQpIHsKICAgICAgICAgbWFuYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBNQU5DKTsKIAogICAgICAgICBpZiAoIShtYW5jICYgRTEwMDBfTUFOQ19SQ1ZfVENPX0VOKSB8fAogICAgICAgICAgICAgIShtYW5jICYgRTEwMDBfTUFOQ19FTl9NQUNfQUREUl9GSUxURVIpKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICBpZiAoZTEwMDBfYXJjX3N1YnN5c3RlbV92YWxpZChodykgPT0gVFJVRSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZTEwMDBfYXJjX3N1YnN5c3RlbV92YWxpZChodykpIHsKICAgICAgICAgICAgIGZ3c20gPSBFMTAwMF9SRUFEX1JFRyhodywgRldTTSk7CiAgICAgICAgICAgICBmYWN0cHMgPSBFMTAwMF9SRUFEX1JFRyhodywgRkFDVFBTKTsKIAogICAgICAgICAgICAgaWYgKCgoKGZ3c20gJiBFMTAwMF9GV1NNX01PREVfTUFTSykgPj4gRTEwMDBfRldTTV9NT0RFX1NISUZUKSA9PQogICAgICAgICAgICAgICAgICAgIGUxMDAwX21uZ19tb2RlX3B0KSAmJiAhKGZhY3RwcyAmIEUxMDAwX0ZBQ1RQU19NTkdDRykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaWYgKChtYW5jICYgRTEwMDBfTUFOQ19TTUJVU19FTikgJiYgIShtYW5jICYgRTEwMDBfTUFOQ19BU0ZfRU4pKQotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfcG9sYXJpdHlfcmV2ZXJzYWxfd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgcmV0X3ZhbDsKLSAgICB1aW50MTZfdCBtaWlfc3RhdHVzX3JlZzsKLSAgICB1aW50MTZfdCBpOworICAgIHMzMiByZXRfdmFsOworICAgIHUxNiBtaWlfc3RhdHVzX3JlZzsKKyAgICB1MTYgaTsKIAogICAgIC8qIFBvbGFyaXR5IHJldmVyc2FsIHdvcmthcm91bmQgZm9yIGZvcmNlZCAxMEYvMTBIIGxpbmtzLiAqLwogCkBAIC03OTMwLDcgKzc5MjksNyBAQAogc3RhdGljIHZvaWQKIGUxMDAwX3NldF9wY2lfZXhwcmVzc19tYXN0ZXJfZGlzYWJsZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGN0cmw7CisgICAgdTMyIGN0cmw7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldF9wY2lfZXhwcmVzc19tYXN0ZXJfZGlzYWJsZSIpOwogCkBAIC03OTUzLDEwICs3OTUyLDEwIEBACiAgKiAgICAgICAgICAgIEUxMDAwX1NVQ0NFU1MgbWFzdGVyIHJlcXVlc3RzIGRpc2FibGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzMzIKIGUxMDAwX2Rpc2FibGVfcGNpZXhfbWFzdGVyKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCB0aW1lb3V0ID0gTUFTVEVSX0RJU0FCTEVfVElNRU9VVDsgICAvKiA4MG1zICovCisgICAgczMyIHRpbWVvdXQgPSBNQVNURVJfRElTQUJMRV9USU1FT1VUOyAgIC8qIDgwbXMgKi8KIAogICAgIERFQlVHRlVOQygiZTEwMDBfZGlzYWJsZV9wY2lleF9tYXN0ZXIiKTsKIApAQCAtNzk5MSwxMCArNzk5MCwxMCBAQAogICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTIGF0IGFueSBvdGhlciBjYXNlLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfZ2V0X2F1dG9fcmRfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgdGltZW91dCA9IEFVVE9fUkVBRF9ET05FX1RJTUVPVVQ7CisgICAgczMyIHRpbWVvdXQgPSBBVVRPX1JFQURfRE9ORV9USU1FT1VUOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9nZXRfYXV0b19yZF9kb25lIik7CiAKQEAgLTgwMzksMTEgKzgwMzgsMTEgQEAKICAqICAgICAgICAgICAgRTEwMDBfU1VDQ0VTUyBhdCBhbnkgb3RoZXIgY2FzZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2dldF9waHlfY2ZnX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICBpbnQzMl90IHRpbWVvdXQgPSBQSFlfQ0ZHX1RJTUVPVVQ7Ci0gICAgdWludDMyX3QgY2ZnX21hc2sgPSBFMTAwMF9FRVBST01fQ0ZHX0RPTkU7CisgICAgczMyIHRpbWVvdXQgPSBQSFlfQ0ZHX1RJTUVPVVQ7CisgICAgdTMyIGNmZ19tYXNrID0gRTEwMDBfRUVQUk9NX0NGR19ET05FOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9nZXRfcGh5X2NmZ19kb25lIik7CiAKQEAgLTgwODYsMTEgKzgwODUsMTEgQEAKICAqICAgICAgICAgICAgRTEwMDBfU1VDQ0VTUyBhdCBhbnkgb3RoZXIgY2FzZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2dldF9od19lZXByb21fc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCB0aW1lb3V0OwotICAgIHVpbnQzMl90IHN3c207CisgICAgczMyIHRpbWVvdXQ7CisgICAgdTMyIHN3c207CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2dldF9od19lZXByb21fc2VtYXBob3JlIik7CiAKQEAgLTgxMzksNyArODEzOCw3IEBACiBzdGF0aWMgdm9pZAogZTEwMDBfcHV0X2h3X2VlcHJvbV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLSAgICB1aW50MzJfdCBzd3NtOworICAgIHUzMiBzd3NtOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9wdXRfaHdfZWVwcm9tX3NlbWFwaG9yZSIpOwogCkBAIC04MTY1LDExICs4MTY0LDExIEBACiAgKiAgICAgICAgICAgIEUxMDAwX1NVQ0NFU1MgYXQgYW55IG90aGVyIGNhc2UuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9nZXRfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgaW50MzJfdCB0aW1lb3V0ID0gaHctPmVlcHJvbS53b3JkX3NpemUgKyAxOwotICAgIHVpbnQzMl90IHN3c207CisgICAgczMyIHRpbWVvdXQgPSBody0+ZWVwcm9tLndvcmRfc2l6ZSArIDE7CisgICAgdTMyIHN3c207CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2dldF9zb2Z0d2FyZV9zZW1hcGhvcmUiKTsKIApAQCAtODIwNCw3ICs4MjAzLDcgQEAKIHN0YXRpYyB2b2lkCiBlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IHN3c207CisgICAgdTMyIHN3c207CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfc2VtYXBob3JlIik7CiAKQEAgLTgyMjksMTEgKzgyMjgsMTEgQEAKICAqICAgICAgICAgICAgRTEwMDBfU1VDQ0VTUwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3MzMgogZTEwMDBfY2hlY2tfcGh5X3Jlc2V0X2Jsb2NrKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgbWFuYyA9IDA7Ci0gICAgdWludDMyX3QgZndzbSA9IDA7CisgICAgdTMyIG1hbmMgPSAwOworICAgIHUzMiBmd3NtID0gMDsKIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgewogICAgICAgICBmd3NtID0gRTEwMDBfUkVBRF9SRUcoaHcsIEZXU00pOwpAQCAtODI0NywxMCArODI0NiwxMCBAQAogICAgICAgICBFMTAwMF9CTEtfUEhZX1JFU0VUIDogRTEwMDBfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHVpbnQ4X3QKK3N0YXRpYyB1OAogZTEwMDBfYXJjX3N1YnN5c3RlbV92YWxpZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIHVpbnQzMl90IGZ3c207CisgICAgdTMyIGZ3c207CiAKICAgICAvKiBPbiA4MjU3eCBzaWxpY29uLCByZWdpc3RlcnMgaW4gdGhlIHJhbmdlIG9mIDB4ODgwMCAtIDB4OEZGQwogICAgICAqIG1heSBub3QgYmUgcHJvdmlkZWQgYSBETUEgY2xvY2sgd2hlbiBubyBtYW5hZ2VhYmlsaXR5IGZlYXR1cmVzIGFyZQpAQCAtODI2NCwxNCArODI2MywxNCBAQAogICAgIGNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAgICAgICAgIGZ3c20gPSBFMTAwMF9SRUFEX1JFRyhodywgRldTTSk7CiAgICAgICAgIGlmICgoZndzbSAmIEUxMDAwX0ZXU01fTU9ERV9NQVNLKSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF9pY2g4bGFuOgotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIApAQCAtODI4NCwxMCArODI4MywxMCBAQAogICogcmV0dXJuczogRTEwMDBfU1VDQ0VTUwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9zZXRfcGNpX2V4X25vX3Nub29wKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IG5vX3Nub29wKQorc3RhdGljIHMzMgorZTEwMDBfc2V0X3BjaV9leF9ub19zbm9vcChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgbm9fc25vb3ApCiB7Ci0gICAgdWludDMyX3QgZ2NyX3JlZyA9IDA7CisgICAgdTMyIGdjcl9yZWcgPSAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXRfcGNpX2V4X25vX3Nub29wIik7CiAKQEAgLTgzMDQsNyArODMwMyw3IEBACiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgR0NSLCBnY3JfcmVnKTsKICAgICB9CiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7Ci0gICAgICAgIHVpbnQzMl90IGN0cmxfZXh0OworICAgICAgICB1MzIgY3RybF9leHQ7CiAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBHQ1IsIFBDSV9FWF84MjU2Nl9TTk9PUF9BTEwpOwogCkBAIC04MzI1LDExICs4MzI0LDExIEBACiAgKiBodzogU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9nZXRfc29mdHdhcmVfZmxhZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIGludDMyX3QgdGltZW91dCA9IFBIWV9DRkdfVElNRU9VVDsKLSAgICB1aW50MzJfdCBleHRjbmZfY3RybDsKKyAgICBzMzIgdGltZW91dCA9IFBIWV9DRkdfVElNRU9VVDsKKyAgICB1MzIgZXh0Y25mX2N0cmw7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2dldF9zb2Z0d2FyZV9mbGFnIik7CiAKQEAgLTgzNjcsNyArODM2Niw3IEBACiBzdGF0aWMgdm9pZAogZTEwMDBfcmVsZWFzZV9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgZXh0Y25mX2N0cmw7CisgICAgdTMyIGV4dGNuZl9jdHJsOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX2ZsYWciKTsKIApAQCAtODM4OSwxNiArODM4OCwxNiBAQAogICogZGF0YSAtIHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqIHdvcmRzIC0gbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9yZWFkX2VlcHJvbV9pY2g4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQxNl90IG9mZnNldCwgdWludDE2X3Qgd29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpkYXRhKQorc3RhdGljIHMzMgorZTEwMDBfcmVhZF9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSkKIHsKLSAgICBpbnQzMl90ICBlcnJvciA9IEUxMDAwX1NVQ0NFU1M7Ci0gICAgdWludDMyX3QgZmxhc2hfYmFuayA9IDA7Ci0gICAgdWludDMyX3QgYWN0X29mZnNldCA9IDA7Ci0gICAgdWludDMyX3QgYmFua19vZmZzZXQgPSAwOwotICAgIHVpbnQxNl90IHdvcmQgPSAwOwotICAgIHVpbnQxNl90IGkgPSAwOworICAgIHMzMiAgZXJyb3IgPSBFMTAwMF9TVUNDRVNTOworICAgIHUzMiBmbGFzaF9iYW5rID0gMDsKKyAgICB1MzIgYWN0X29mZnNldCA9IDA7CisgICAgdTMyIGJhbmtfb2Zmc2V0ID0gMDsKKyAgICB1MTYgd29yZCA9IDA7CisgICAgdTE2IGkgPSAwOwogCiAgICAgLyogV2UgbmVlZCB0byBrbm93IHdoaWNoIGlzIHRoZSB2YWxpZCBmbGFzaCBiYW5rLiAgSW4gdGhlIGV2ZW50CiAgICAgICogdGhhdCB3ZSBkaWRuJ3QgYWxsb2NhdGUgZWVwcm9tX3NoYWRvd19yYW0sIHdlIG1heSBub3QgYmUKQEAgLTg0MTcsNyArODQxNiw3IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgewogICAgICAgICBpZiAoaHctPmVlcHJvbV9zaGFkb3dfcmFtICE9IE5VTEwgJiYKLSAgICAgICAgICAgIGh3LT5lZXByb21fc2hhZG93X3JhbVtvZmZzZXQraV0ubW9kaWZpZWQgPT0gVFJVRSkgeworICAgICAgICAgICAgaHctPmVlcHJvbV9zaGFkb3dfcmFtW29mZnNldCtpXS5tb2RpZmllZCkgewogICAgICAgICAgICAgZGF0YVtpXSA9IGh3LT5lZXByb21fc2hhZG93X3JhbVtvZmZzZXQraV0uZWVwcm9tX3dvcmQ7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBUaGUgTlZNIHBhcnQgbmVlZHMgYSBieXRlIG9mZnNldCwgaGVuY2UgKiAyICovCkBAIC04NDQ1LDEyICs4NDQ0LDEyIEBACiAgKiB3b3JkcyAtIG51bWJlciBvZiB3b3JkcyB0byB3cml0ZQogICogZGF0YSAtIHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBFRVBST00KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF93cml0ZV9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IHdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmRhdGEpCitzdGF0aWMgczMyCitlMTAwMF93cml0ZV9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpCiB7Ci0gICAgdWludDMyX3QgaSA9IDA7Ci0gICAgaW50MzJfdCBlcnJvciA9IEUxMDAwX1NVQ0NFU1M7CisgICAgdTMyIGkgPSAwOworICAgIHMzMiBlcnJvciA9IEUxMDAwX1NVQ0NFU1M7CiAKICAgICBlcnJvciA9IGUxMDAwX2dldF9zb2Z0d2FyZV9mbGFnKGh3KTsKICAgICBpZiAoZXJyb3IgIT0gRTEwMDBfU1VDQ0VTUykKQEAgLTg0NjYsNyArODQ2NSw3IEBACiAgICAgaWYgKGh3LT5lZXByb21fc2hhZG93X3JhbSAhPSBOVUxMKSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoKG9mZnNldCArIGkpIDwgRTEwMDBfU0hBRE9XX1JBTV9XT1JEUykgewotICAgICAgICAgICAgICAgIGh3LT5lZXByb21fc2hhZG93X3JhbVtvZmZzZXQraV0ubW9kaWZpZWQgPSBUUlVFOworICAgICAgICAgICAgICAgIGh3LT5lZXByb21fc2hhZG93X3JhbVtvZmZzZXQraV0ubW9kaWZpZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGh3LT5lZXByb21fc2hhZG93X3JhbVtvZmZzZXQraV0uZWVwcm9tX3dvcmQgPSBkYXRhW2ldOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBlcnJvciA9IC1FMTAwMF9FUlJfRUVQUk9NOwpAQCAtODQ5MiwxMiArODQ5MSwxMiBAQAogICoKICAqIGh3IC0gVGhlIHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdHVyZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAorc3RhdGljIHMzMgogZTEwMDBfaWNoOF9jeWNsZV9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdW5pb24gaWNoOF9od3NfZmxhc2hfc3RhdHVzIGhzZnN0czsKLSAgICBpbnQzMl90IGVycm9yID0gRTEwMDBfRVJSX0VFUFJPTTsKLSAgICBpbnQzMl90IGkgICAgID0gMDsKKyAgICBzMzIgZXJyb3IgPSBFMTAwMF9FUlJfRUVQUk9NOworICAgIHMzMiBpICAgICA9IDA7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2ljaDhfY3ljbGVfaW5pdCIpOwogCkBAIC04NTU5LDEzICs4NTU4LDEzIEBACiAgKgogICogaHcgLSBUaGUgcG9pbnRlciB0byB0aGUgaHcgc3RydWN0dXJlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9pY2g4X2ZsYXNoX2N5Y2xlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHRpbWVvdXQpCitzdGF0aWMgczMyCitlMTAwMF9pY2g4X2ZsYXNoX2N5Y2xlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiB0aW1lb3V0KQogewogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX2N0cmwgaHNmbGN0bDsKICAgICB1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgaHNmc3RzOwotICAgIGludDMyX3QgZXJyb3IgPSBFMTAwMF9FUlJfRUVQUk9NOwotICAgIHVpbnQzMl90IGkgPSAwOworICAgIHMzMiBlcnJvciA9IEUxMDAwX0VSUl9FRVBST007CisgICAgdTMyIGkgPSAwOwogCiAgICAgLyogU3RhcnQgYSBjeWNsZSBieSB3cml0aW5nIDEgaW4gRmxhc2ggQ3ljbGUgR28gaW4gSHcgRmxhc2ggQ29udHJvbCAqLwogICAgIGhzZmxjdGwucmVndmFsID0gRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZDVEwpOwpAQCAtODU5NCwxNiArODU5MywxNiBAQAogICogc2l6ZSAtIFNpemUgb2YgZGF0YSB0byByZWFkLCAxPWJ5dGUgMj13b3JkCiAgKiBkYXRhIC0gUG9pbnRlciB0byB0aGUgd29yZCB0byBzdG9yZSB0aGUgdmFsdWUgcmVhZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9yZWFkX2ljaDhfZGF0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsIHVpbnQxNl90KiBkYXRhKQorc3RhdGljIHMzMgorZTEwMDBfcmVhZF9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgdTMyIHNpemUsIHUxNiogZGF0YSkKIHsKICAgICB1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgaHNmc3RzOwogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX2N0cmwgaHNmbGN0bDsKLSAgICB1aW50MzJfdCBmbGFzaF9saW5lYXJfYWRkcmVzczsKLSAgICB1aW50MzJfdCBmbGFzaF9kYXRhID0gMDsKLSAgICBpbnQzMl90IGVycm9yID0gLUUxMDAwX0VSUl9FRVBST007Ci0gICAgaW50MzJfdCBjb3VudCA9IDA7CisgICAgdTMyIGZsYXNoX2xpbmVhcl9hZGRyZXNzOworICAgIHUzMiBmbGFzaF9kYXRhID0gMDsKKyAgICBzMzIgZXJyb3IgPSAtRTEwMDBfRVJSX0VFUFJPTTsKKyAgICBzMzIgY291bnQgPSAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWFkX2ljaDhfZGF0YSIpOwogCkBAIC04NjQxLDkgKzg2NDAsOSBAQAogICAgICAgICBpZiAoZXJyb3IgPT0gRTEwMDBfU1VDQ0VTUykgewogICAgICAgICAgICAgZmxhc2hfZGF0YSA9IEUxMDAwX1JFQURfSUNIX0ZMQVNIX1JFRyhodywgSUNIX0ZMQVNIX0ZEQVRBMCk7CiAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgKmRhdGEgPSAodWludDhfdCkoZmxhc2hfZGF0YSAmIDB4MDAwMDAwRkYpOworICAgICAgICAgICAgICAgICpkYXRhID0gKHU4KShmbGFzaF9kYXRhICYgMHgwMDAwMDBGRik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT0gMikgewotICAgICAgICAgICAgICAgICpkYXRhID0gKHVpbnQxNl90KShmbGFzaF9kYXRhICYgMHgwMDAwRkZGRik7CisgICAgICAgICAgICAgICAgKmRhdGEgPSAodTE2KShmbGFzaF9kYXRhICYgMHgwMDAwRkZGRik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg2NzMsMTYgKzg2NzIsMTYgQEAKICAqIHNpemUgLSBTaXplIG9mIGRhdGEgdG8gcmVhZCwgMT1ieXRlIDI9d29yZAogICogZGF0YSAtIFRoZSBieXRlKHMpIHRvIHdyaXRlIHRvIHRoZSBOVk0uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAotZTEwMDBfd3JpdGVfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGRhdGEpCitzdGF0aWMgczMyCitlMTAwMF93cml0ZV9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1MzIgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICB1MTYgZGF0YSkKIHsKICAgICB1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgaHNmc3RzOwogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX2N0cmwgaHNmbGN0bDsKLSAgICB1aW50MzJfdCBmbGFzaF9saW5lYXJfYWRkcmVzczsKLSAgICB1aW50MzJfdCBmbGFzaF9kYXRhID0gMDsKLSAgICBpbnQzMl90IGVycm9yID0gLUUxMDAwX0VSUl9FRVBST007Ci0gICAgaW50MzJfdCBjb3VudCA9IDA7CisgICAgdTMyIGZsYXNoX2xpbmVhcl9hZGRyZXNzOworICAgIHUzMiBmbGFzaF9kYXRhID0gMDsKKyAgICBzMzIgZXJyb3IgPSAtRTEwMDBfRVJSX0VFUFJPTTsKKyAgICBzMzIgY291bnQgPSAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF93cml0ZV9pY2g4X2RhdGEiKTsKIApAQCAtODcxMSw5ICs4NzEwLDkgQEAKICAgICAgICAgRTEwMDBfV1JJVEVfSUNIX0ZMQVNIX1JFRyhodywgSUNIX0ZMQVNIX0ZBRERSLCBmbGFzaF9saW5lYXJfYWRkcmVzcyk7CiAKICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgIGZsYXNoX2RhdGEgPSAodWludDMyX3QpZGF0YSAmIDB4MDBGRjsKKyAgICAgICAgICAgIGZsYXNoX2RhdGEgPSAodTMyKWRhdGEgJiAweDAwRkY7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZsYXNoX2RhdGEgPSAodWludDMyX3QpZGF0YTsKKyAgICAgICAgICAgIGZsYXNoX2RhdGEgPSAodTMyKWRhdGE7CiAKICAgICAgICAgRTEwMDBfV1JJVEVfSUNIX0ZMQVNIX1JFRyhodywgSUNIX0ZMQVNIX0ZEQVRBMCwgZmxhc2hfZGF0YSk7CiAKQEAgLTg3NDgsMTUgKzg3NDcsMTUgQEAKICAqIGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBieXRlIHRvIHJlYWQuCiAgKiBkYXRhIC0gUG9pbnRlciB0byBhIGJ5dGUgdG8gc3RvcmUgdGhlIHZhbHVlIHJlYWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAotZTEwMDBfcmVhZF9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsIHVpbnQ4X3QqIGRhdGEpCitzdGF0aWMgczMyCitlMTAwMF9yZWFkX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaW5kZXgsIHU4KiBkYXRhKQogewotICAgIGludDMyX3Qgc3RhdHVzID0gRTEwMDBfU1VDQ0VTUzsKLSAgICB1aW50MTZfdCB3b3JkID0gMDsKKyAgICBzMzIgc3RhdHVzID0gRTEwMDBfU1VDQ0VTUzsKKyAgICB1MTYgd29yZCA9IDA7CiAKICAgICBzdGF0dXMgPSBlMTAwMF9yZWFkX2ljaDhfZGF0YShodywgaW5kZXgsIDEsICZ3b3JkKTsKICAgICBpZiAoc3RhdHVzID09IEUxMDAwX1NVQ0NFU1MpIHsKLSAgICAgICAgKmRhdGEgPSAodWludDhfdCl3b3JkOworICAgICAgICAqZGF0YSA9ICh1OCl3b3JkOwogICAgIH0KIAogICAgIHJldHVybiBzdGF0dXM7CkBAIC04NzcxLDExICs4NzcwLDExIEBACiAgKiBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYnl0ZSB0byB3cml0ZS4KICAqIGJ5dGUgLSBUaGUgYnl0ZSB0byB3cml0ZSB0byB0aGUgTlZNLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKLWUxMDAwX3ZlcmlmeV93cml0ZV9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsIHVpbnQ4X3QgYnl0ZSkKK3N0YXRpYyBzMzIKK2UxMDAwX3ZlcmlmeV93cml0ZV9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1OCBieXRlKQogewotICAgIGludDMyX3QgZXJyb3IgPSBFMTAwMF9TVUNDRVNTOwotICAgIGludDMyX3QgcHJvZ3JhbV9yZXRyaWVzID0gMDsKKyAgICBzMzIgZXJyb3IgPSBFMTAwMF9TVUNDRVNTOworICAgIHMzMiBwcm9ncmFtX3JldHJpZXMgPSAwOwogCiAgICAgREVCVUdPVVQyKCJCeXRlIDo9ICUyLjJYIE9mZnNldCA6PSAlZFxuIiwgYnl0ZSwgaW5kZXgpOwogCkBAIC04ODA0LDExICs4ODAzLDExIEBACiAgKiBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgYnl0ZSB0byByZWFkLgogICogZGF0YSAtIFRoZSBieXRlIHRvIHdyaXRlIHRvIHRoZSBOVk0uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50MzJfdAotZTEwMDBfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50OF90IGRhdGEpCitzdGF0aWMgczMyCitlMTAwMF93cml0ZV9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGluZGV4LCB1OCBkYXRhKQogewotICAgIGludDMyX3Qgc3RhdHVzID0gRTEwMDBfU1VDQ0VTUzsKLSAgICB1aW50MTZfdCB3b3JkID0gKHVpbnQxNl90KWRhdGE7CisgICAgczMyIHN0YXR1cyA9IEUxMDAwX1NVQ0NFU1M7CisgICAgdTE2IHdvcmQgPSAodTE2KWRhdGE7CiAKICAgICBzdGF0dXMgPSBlMTAwMF93cml0ZV9pY2g4X2RhdGEoaHcsIGluZGV4LCAxLCB3b3JkKTsKIApAQCAtODgyMiwxMCArODgyMSwxMCBAQAogICogaW5kZXggLSBUaGUgc3RhcnRpbmcgYnl0ZSBpbmRleCBvZiB0aGUgd29yZCB0byByZWFkLgogICogZGF0YSAtIFBvaW50ZXIgdG8gYSB3b3JkIHRvIHN0b3JlIHRoZSB2YWx1ZSByZWFkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKLWUxMDAwX3JlYWRfaWNoOF93b3JkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50MTZfdCAqZGF0YSkKK3N0YXRpYyBzMzIKK2UxMDAwX3JlYWRfaWNoOF93b3JkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpbmRleCwgdTE2ICpkYXRhKQogewotICAgIGludDMyX3Qgc3RhdHVzID0gRTEwMDBfU1VDQ0VTUzsKKyAgICBzMzIgc3RhdHVzID0gRTEwMDBfU1VDQ0VTUzsKICAgICBzdGF0dXMgPSBlMTAwMF9yZWFkX2ljaDhfZGF0YShodywgaW5kZXgsIDIsIGRhdGEpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC04ODQxLDE5ICs4ODQwLDE5IEBACiAgKiBhbW91bnQgb2YgTlZNIHVzZWQgaW4gZWFjaCBiYW5rIGlzIGEgKm1pbmltdW0qIG9mIDQgS0J5dGVzLCBidXQgaW4gZmFjdCB0aGUKICAqIGJhbmsgc2l6ZSBtYXkgYmUgNCwgOCBvciA2NCBLQnl0ZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQzMl90Ci1lMTAwMF9lcmFzZV9pY2g4XzRrX3NlZ21lbnQoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgYmFuaykKK3N0YXRpYyBzMzIKK2UxMDAwX2VyYXNlX2ljaDhfNGtfc2VnbWVudChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgYmFuaykKIHsKICAgICB1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgaHNmc3RzOwogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX2N0cmwgaHNmbGN0bDsKLSAgICB1aW50MzJfdCBmbGFzaF9saW5lYXJfYWRkcmVzczsKLSAgICBpbnQzMl90ICBjb3VudCA9IDA7Ci0gICAgaW50MzJfdCAgZXJyb3IgPSBFMTAwMF9FUlJfRUVQUk9NOwotICAgIGludDMyX3QgIGl0ZXJhdGlvbjsKLSAgICBpbnQzMl90ICBzdWJfc2VjdG9yX3NpemUgPSAwOwotICAgIGludDMyX3QgIGJhbmtfc2l6ZTsKLSAgICBpbnQzMl90ICBqID0gMDsKLSAgICBpbnQzMl90ICBlcnJvcl9mbGFnID0gMDsKKyAgICB1MzIgZmxhc2hfbGluZWFyX2FkZHJlc3M7CisgICAgczMyICBjb3VudCA9IDA7CisgICAgczMyICBlcnJvciA9IEUxMDAwX0VSUl9FRVBST007CisgICAgczMyICBpdGVyYXRpb247CisgICAgczMyICBzdWJfc2VjdG9yX3NpemUgPSAwOworICAgIHMzMiAgYmFua19zaXplOworICAgIHMzMiAgaiA9IDA7CisgICAgczMyICBlcnJvcl9mbGFnID0gMDsKIAogICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSF9GTEFTSF9SRUcxNihodywgSUNIX0ZMQVNIX0hTRlNUUyk7CiAKQEAgLTg5MzEsMTYgKzg5MzAsMTYgQEAKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQzMl90CitzdGF0aWMgczMyCiBlMTAwMF9pbml0X2xjZF9mcm9tX252bV9jb25maWdfcmVnaW9uKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNuZl9iYXNlX2FkZHIsIHVpbnQzMl90IGNuZl9zaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgY25mX2Jhc2VfYWRkciwgdTMyIGNuZl9zaXplKQogewotICAgIHVpbnQzMl90IHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOwotICAgIHVpbnQxNl90IHdvcmRfYWRkciwgcmVnX2RhdGEsIHJlZ19hZGRyOwotICAgIHVpbnQxNl90IGk7CisgICAgdTMyIHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOworICAgIHUxNiB3b3JkX2FkZHIsIHJlZ19kYXRhLCByZWdfYWRkcjsKKyAgICB1MTYgaTsKIAogICAgIC8qIGNuZl9iYXNlX2FkZHIgaXMgaW4gRFdPUkQgKi8KLSAgICB3b3JkX2FkZHIgPSAodWludDE2X3QpKGNuZl9iYXNlX2FkZHIgPDwgMSk7CisgICAgd29yZF9hZGRyID0gKHUxNikoY25mX2Jhc2VfYWRkciA8PCAxKTsKIAogICAgIC8qIGNuZl9zaXplIGlzIHJldHVybmVkIGluIHNpemUgb2YgZHdvcmRzICovCiAgICAgZm9yIChpID0gMDsgaSA8IGNuZl9zaXplOyBpKyspIHsKQEAgLTg5NTYsNyArODk1NSw3IEBACiAgICAgICAgIGlmIChyZXRfdmFsICE9IEUxMDAwX1NVQ0NFU1MpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgKHVpbnQzMl90KXJlZ19hZGRyLCByZWdfZGF0YSk7CisgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2V4KGh3LCAodTMyKXJlZ19hZGRyLCByZWdfZGF0YSk7CiAKICAgICAgICAgZTEwMDBfcmVsZWFzZV9zb2Z0d2FyZV9mbGFnKGh3KTsKICAgICB9CkBAIC04OTczLDEwICs4OTcyLDEwIEBACiAgKgogICogaHc6IFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludDMyX3QKK3N0YXRpYyBzMzIKIGUxMDAwX2luaXRfbGNkX2Zyb21fbnZtKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0gICAgdWludDMyX3QgcmVnX2RhdGEsIGNuZl9iYXNlX2FkZHIsIGNuZl9zaXplLCByZXRfdmFsLCBsb29wOworICAgIHUzMiByZWdfZGF0YSwgY25mX2Jhc2VfYWRkciwgY25mX3NpemUsIHJldF92YWwsIGxvb3A7CiAKICAgICBpZiAoaHctPnBoeV90eXBlICE9IGUxMDAwX3BoeV9pZ3BfMykKICAgICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IGE2YzNjMzQuLjk5ZmNlMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaApAQCAtMTAwLDggKzEwMCw4IEBACiB9IGUxMDAwX2ZjX3R5cGU7CiAKIHN0cnVjdCBlMTAwMF9zaGFkb3dfcmFtIHsKLSAgICB1aW50MTZfdCAgICBlZXByb21fd29yZDsKLSAgICBib29sZWFuX3QgICBtb2RpZmllZDsKKyAgICB1MTYgZWVwcm9tX3dvcmQ7CisgICAgYm9vbCBtb2RpZmllZDsKIH07CiAKIC8qIFBDSSBidXMgdHlwZXMgKi8KQEAgLTI2MywxOSArMjYzLDE5IEBACiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X3N0YXRzIHsKLSAgICB1aW50MzJfdCBpZGxlX2Vycm9yczsKLSAgICB1aW50MzJfdCByZWNlaXZlX2Vycm9yczsKKyAgICB1MzIgaWRsZV9lcnJvcnM7CisgICAgdTMyIHJlY2VpdmVfZXJyb3JzOwogfTsKIAogc3RydWN0IGUxMDAwX2VlcHJvbV9pbmZvIHsKICAgICBlMTAwMF9lZXByb21fdHlwZSB0eXBlOwotICAgIHVpbnQxNl90IHdvcmRfc2l6ZTsKLSAgICB1aW50MTZfdCBvcGNvZGVfYml0czsKLSAgICB1aW50MTZfdCBhZGRyZXNzX2JpdHM7Ci0gICAgdWludDE2X3QgZGVsYXlfdXNlYzsKLSAgICB1aW50MTZfdCBwYWdlX3NpemU7Ci0gICAgYm9vbGVhbl90IHVzZV9lZXJkOwotICAgIGJvb2xlYW5fdCB1c2VfZWV3cjsKKyAgICB1MTYgd29yZF9zaXplOworICAgIHUxNiBvcGNvZGVfYml0czsKKyAgICB1MTYgYWRkcmVzc19iaXRzOworICAgIHUxNiBkZWxheV91c2VjOworICAgIHUxNiBwYWdlX3NpemU7CisgICAgYm9vbCB1c2VfZWVyZDsKKyAgICBib29sIHVzZV9lZXdyOwogfTsKIAogLyogRmxleCBBU0YgSW5mb3JtYXRpb24gKi8KQEAgLTMwOCwzNCArMzA4LDM0IEBACiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIC8qIEluaXRpYWxpemF0aW9uICovCi1pbnQzMl90IGUxMDAwX3Jlc2V0X2h3KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotaW50MzJfdCBlMTAwMF9pbml0X2h3KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotaW50MzJfdCBlMTAwMF9zZXRfbWFjX3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgZTEwMDBfcmVzZXRfaHcoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgZTEwMDBfaW5pdF9odyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiBlMTAwMF9zZXRfbWFjX3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGUxMDAwX3NldF9tZWRpYV90eXBlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiAvKiBMaW5rIENvbmZpZ3VyYXRpb24gKi8KLWludDMyX3QgZTEwMDBfc2V0dXBfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfcGh5X3NldHVwX2F1dG9uZWcoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgZTEwMDBfc2V0dXBfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiBlMTAwMF9waHlfc2V0dXBfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwotaW50MzJfdCBlMTAwMF9jaGVja19mb3JfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgKnNwZWVkLCB1aW50MTZfdCAqZHVwbGV4KTsKLWludDMyX3QgZTEwMDBfZm9yY2VfbWFjX2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyIGUxMDAwX2NoZWNrX2Zvcl9saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyIGUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiAqc3BlZWQsIHUxNiAqZHVwbGV4KTsKK3MzMiBlMTAwMF9mb3JjZV9tYWNfZmMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKIC8qIFBIWSAqLwotaW50MzJfdCBlMTAwMF9yZWFkX3BoeV9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgcmVnX2FkZHIsIHVpbnQxNl90ICpwaHlfZGF0YSk7Ci1pbnQzMl90IGUxMDAwX3dyaXRlX3BoeV9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgcmVnX2FkZHIsIHVpbnQxNl90IGRhdGEpOwotaW50MzJfdCBlMTAwMF9waHlfaHdfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1pbnQzMl90IGUxMDAwX3BoeV9yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfcGh5X2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOwotaW50MzJfdCBlMTAwMF92YWxpZGF0ZV9tZGlfc2V0dGluZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiBlMTAwMF9yZWFkX3BoeV9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZ19hZGRyLCB1MTYgKnBoeV9kYXRhKTsKK3MzMiBlMTAwMF93cml0ZV9waHlfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWdfYWRkciwgdTE2IGRhdGEpOworczMyIGUxMDAwX3BoeV9od19yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiBlMTAwMF9waHlfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgZTEwMDBfcGh5X2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOworczMyIGUxMDAwX3ZhbGlkYXRlX21kaV9zZXR0aW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiB2b2lkIGUxMDAwX3BoeV9wb3dlcmRvd25fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogLyogRUVQUk9NIEZ1bmN0aW9ucyAqLwotaW50MzJfdCBlMTAwMF9pbml0X2VlcHJvbV9wYXJhbXMoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiAvKiBNTkcgSE9TVCBJRiBmdW5jdGlvbnMgKi8KLXVpbnQzMl90IGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1KHN0cnVjdCBlMTAwMF9odyAqaHcpOwordTMyIGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiAjZGVmaW5lIEUxMDAwX01OR19ESENQX1RYX1BBWUxPQURfQ01EICAgNjQKICNkZWZpbmUgRTEwMDBfSElfTUFYX01OR19EQVRBX0xFTkdUSCAgICAweDZGOCAgIC8qIEhvc3QgSW50ZXJmYWNlIGRhdGEgbGVuZ3RoICovCkBAIC0zNTQsODAgKzM1NCw4MCBAQAogI2RlZmluZSBFMTAwMF9WRlRBX0VOVFJZX0JJVF9TSElGVF9NQVNLICAgICAgICAgICAgICAweDFGCiAKIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19jb21tYW5kX2hlYWRlciB7Ci0gICAgdWludDhfdCBjb21tYW5kX2lkOwotICAgIHVpbnQ4X3QgY2hlY2tzdW07Ci0gICAgdWludDE2X3QgcmVzZXJ2ZWQxOwotICAgIHVpbnQxNl90IHJlc2VydmVkMjsKLSAgICB1aW50MTZfdCBjb21tYW5kX2xlbmd0aDsKKyAgICB1OCBjb21tYW5kX2lkOworICAgIHU4IGNoZWNrc3VtOworICAgIHUxNiByZXNlcnZlZDE7CisgICAgdTE2IHJlc2VydmVkMjsKKyAgICB1MTYgY29tbWFuZF9sZW5ndGg7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfY29tbWFuZF9pbmZvIHsKICAgICBzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfY29tbWFuZF9oZWFkZXIgY29tbWFuZF9oZWFkZXI7ICAvKiBDb21tYW5kIEhlYWQvQ29tbWFuZCBSZXN1bHQgSGVhZCBoYXMgNCBieXRlcyAqLwotICAgIHVpbnQ4X3QgY29tbWFuZF9kYXRhW0UxMDAwX0hJX01BWF9NTkdfREFUQV9MRU5HVEhdOyAgIC8qIENvbW1hbmQgZGF0YSBjYW4gbGVuZ3RoIDAuLjB4NjU4Ki8KKyAgICB1OCBjb21tYW5kX2RhdGFbRTEwMDBfSElfTUFYX01OR19EQVRBX0xFTkdUSF07ICAgLyogQ29tbWFuZCBkYXRhIGNhbiBsZW5ndGggMC4uMHg2NTgqLwogfTsKICNpZmRlZiBfX0JJR19FTkRJQU4KIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19kaGNwX2Nvb2tpZXsKLSAgICB1aW50MzJfdCBzaWduYXR1cmU7Ci0gICAgdWludDE2X3Qgdmxhbl9pZDsKLSAgICB1aW50OF90IHJlc2VydmVkMDsKLSAgICB1aW50OF90IHN0YXR1czsKLSAgICB1aW50MzJfdCByZXNlcnZlZDE7Ci0gICAgdWludDhfdCBjaGVja3N1bTsKLSAgICB1aW50OF90IHJlc2VydmVkMzsKLSAgICB1aW50MTZfdCByZXNlcnZlZDI7CisgICAgdTMyIHNpZ25hdHVyZTsKKyAgICB1MTYgdmxhbl9pZDsKKyAgICB1OCByZXNlcnZlZDA7CisgICAgdTggc3RhdHVzOworICAgIHUzMiByZXNlcnZlZDE7CisgICAgdTggY2hlY2tzdW07CisgICAgdTggcmVzZXJ2ZWQzOworICAgIHUxNiByZXNlcnZlZDI7CiB9OwogI2Vsc2UKIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19kaGNwX2Nvb2tpZXsKLSAgICB1aW50MzJfdCBzaWduYXR1cmU7Ci0gICAgdWludDhfdCBzdGF0dXM7Ci0gICAgdWludDhfdCByZXNlcnZlZDA7Ci0gICAgdWludDE2X3Qgdmxhbl9pZDsKLSAgICB1aW50MzJfdCByZXNlcnZlZDE7Ci0gICAgdWludDE2X3QgcmVzZXJ2ZWQyOwotICAgIHVpbnQ4X3QgcmVzZXJ2ZWQzOwotICAgIHVpbnQ4X3QgY2hlY2tzdW07CisgICAgdTMyIHNpZ25hdHVyZTsKKyAgICB1OCBzdGF0dXM7CisgICAgdTggcmVzZXJ2ZWQwOworICAgIHUxNiB2bGFuX2lkOworICAgIHUzMiByZXNlcnZlZDE7CisgICAgdTE2IHJlc2VydmVkMjsKKyAgICB1OCByZXNlcnZlZDM7CisgICAgdTggY2hlY2tzdW07CiB9OwogI2VuZGlmCiAKLWludDMyX3QgZTEwMDBfbW5nX3dyaXRlX2RoY3BfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50OF90ICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbGVuZ3RoKTsKLWJvb2xlYW5fdCBlMTAwMF9jaGVja19tbmdfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWJvb2xlYW5fdCBlMTAwMF9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfcmVhZF9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgcmVnLCB1aW50MTZfdCB3b3JkcywgdWludDE2X3QgKmRhdGEpOwotaW50MzJfdCBlMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1pbnQzMl90IGUxMDAwX3VwZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1pbnQzMl90IGUxMDAwX3dyaXRlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCByZWcsIHVpbnQxNl90IHdvcmRzLCB1aW50MTZfdCAqZGF0YSk7Ci1pbnQzMl90IGUxMDAwX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICogaHcpOworczMyIGUxMDAwX21uZ193cml0ZV9kaGNwX2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgdTggKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgbGVuZ3RoKTsKK2Jvb2wgZTEwMDBfY2hlY2tfbW5nX21vZGUoc3RydWN0IGUxMDAwX2h3ICpodyk7Citib29sIGUxMDAwX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyIGUxMDAwX3JlYWRfZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiByZWcsIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKK3MzMiBlMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgZTEwMDBfdXBkYXRlX2VlcHJvbV9jaGVja3N1bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiBlMTAwMF93cml0ZV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHJlZywgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOworczMyIGUxMDAwX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICogaHcpOwogCiAvKiBGaWx0ZXJzIChtdWx0aWNhc3QsIHZsYW4sIHJlY2VpdmUpICovCi11aW50MzJfdCBlMTAwMF9oYXNoX21jX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDhfdCAqIG1jX2FkZHIpOwotdm9pZCBlMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGhhc2hfdmFsdWUpOwotdm9pZCBlMTAwMF9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQ4X3QgKiBtY19hZGRyLCB1aW50MzJfdCByYXJfaW5kZXgpOwotdm9pZCBlMTAwMF93cml0ZV92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUpOwordTMyIGUxMDAwX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqIG1jX2FkZHIpOwordm9pZCBlMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKTsKK3ZvaWQgZTEwMDBfcmFyX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqIG1jX2FkZHIsIHUzMiByYXJfaW5kZXgpOwordm9pZCBlMTAwMF93cml0ZV92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSk7CiAKIC8qIExFRCBmdW5jdGlvbnMgKi8KLWludDMyX3QgZTEwMDBfc2V0dXBfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotaW50MzJfdCBlMTAwMF9jbGVhbnVwX2xlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfbGVkX29uKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotaW50MzJfdCBlMTAwMF9sZWRfb2ZmKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotaW50MzJfdCBlMTAwMF9ibGlua19sZWRfc3RhcnQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgZTEwMDBfc2V0dXBfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyIGUxMDAwX2NsZWFudXBfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyIGUxMDAwX2xlZF9vbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiBlMTAwMF9sZWRfb2ZmKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyIGUxMDAwX2JsaW5rX2xlZF9zdGFydChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogLyogQWRhcHRpdmUgSUZTIEZ1bmN0aW9ucyAqLwogCiAvKiBFdmVyeXRoaW5nIGVsc2UgKi8KIHZvaWQgZTEwMDBfcmVzZXRfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGUxMDAwX3VwZGF0ZV9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXZvaWQgZTEwMDBfdGJpX2FkanVzdF9zdGF0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBzdHJ1Y3QgZTEwMDBfaHdfc3RhdHMgKnN0YXRzLCB1aW50MzJfdCBmcmFtZV9sZW4sIHVpbnQ4X3QgKiBtYWNfYWRkcik7Cit2b2lkIGUxMDAwX3RiaV9hZGp1c3Rfc3RhdHMoc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX2h3X3N0YXRzICpzdGF0cywgdTMyIGZyYW1lX2xlbiwgdTggKiBtYWNfYWRkcik7CiB2b2lkIGUxMDAwX2dldF9idXNfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgZTEwMDBfcGNpX3NldF9td2koc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGUxMDAwX3BjaV9jbGVhcl9td2koc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1pbnQzMl90IGUxMDAwX3JlYWRfcGNpZV9jYXBfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZywgdWludDE2X3QgKnZhbHVlKTsKK3MzMiBlMTAwMF9yZWFkX3BjaWVfY2FwX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLCB1MTYgKnZhbHVlKTsKIHZvaWQgZTEwMDBfcGNpeF9zZXRfbW1yYmMoc3RydWN0IGUxMDAwX2h3ICpodywgaW50IG1tcmJjKTsKIGludCBlMTAwMF9wY2l4X2dldF9tbXJiYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIC8qIFBvcnQgSS9PIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDgyNTQ0IGFuZCBuZXdlciAqLwotdm9pZCBlMTAwMF9pb193cml0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBvcnQsIHVpbnQzMl90IHZhbHVlKTsKLWludDMyX3QgZTEwMDBfZGlzYWJsZV9wY2lleF9tYXN0ZXIoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1pbnQzMl90IGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3ZvaWQgZTEwMDBfaW9fd3JpdGUoc3RydWN0IGUxMDAwX2h3ICpodywgdW5zaWduZWQgbG9uZyBwb3J0LCB1MzIgdmFsdWUpOworczMyIGUxMDAwX2Rpc2FibGVfcGNpZXhfbWFzdGVyKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyIGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogCiAjZGVmaW5lIEUxMDAwX1JFQURfUkVHX0lPKGEsIHJlZykgXApAQCAtNTk2LDggKzU5Niw4IEBACiAgICAgX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KICAgICBfX2xlMTYgbGVuZ3RoOyAgICAgLyogTGVuZ3RoIG9mIGRhdGEgRE1BZWQgaW50byBkYXRhIGJ1ZmZlciAqLwogICAgIF9fbGUxNiBjc3VtOyAgICAgICAvKiBQYWNrZXQgY2hlY2tzdW0gKi8KLSAgICB1aW50OF90IHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotICAgIHVpbnQ4X3QgZXJyb3JzOyAgICAgIC8qIERlc2NyaXB0b3IgRXJyb3JzICovCisgICAgdTggc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCisgICAgdTggZXJyb3JzOyAgICAgIC8qIERlc2NyaXB0b3IgRXJyb3JzICovCiAgICAgX19sZTE2IHNwZWNpYWw7CiB9OwogCkBAIC03MTgsMTUgKzcxOCwxNSBAQAogICAgICAgICBfX2xlMzIgZGF0YTsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIF9fbGUxNiBsZW5ndGg7ICAgIC8qIERhdGEgYnVmZmVyIGxlbmd0aCAqLwotICAgICAgICAgICAgdWludDhfdCBjc287ICAgICAgICAvKiBDaGVja3N1bSBvZmZzZXQgKi8KLSAgICAgICAgICAgIHVpbnQ4X3QgY21kOyAgICAgICAgLyogRGVzY3JpcHRvciBjb250cm9sICovCisgICAgICAgICAgICB1OCBjc287ICAgICAgICAvKiBDaGVja3N1bSBvZmZzZXQgKi8KKyAgICAgICAgICAgIHU4IGNtZDsgICAgICAgIC8qIERlc2NyaXB0b3IgY29udHJvbCAqLwogICAgICAgICB9IGZsYWdzOwogICAgIH0gbG93ZXI7CiAgICAgdW5pb24gewogICAgICAgICBfX2xlMzIgZGF0YTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQ4X3Qgc3RhdHVzOyAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KLSAgICAgICAgICAgIHVpbnQ4X3QgY3NzOyAgICAgICAgLyogQ2hlY2tzdW0gc3RhcnQgKi8KKyAgICAgICAgICAgIHU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCisgICAgICAgICAgICB1OCBjc3M7ICAgICAgICAvKiBDaGVja3N1bSBzdGFydCAqLwogICAgICAgICAgICAgX19sZTE2IHNwZWNpYWw7CiAgICAgICAgIH0gZmllbGRzOwogICAgIH0gdXBwZXI7CkBAIC03NTksMTYgKzc1OSwxNiBAQAogICAgIHVuaW9uIHsKICAgICAgICAgX19sZTMyIGlwX2NvbmZpZzsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQ4X3QgaXBjc3M7ICAgICAgLyogSVAgY2hlY2tzdW0gc3RhcnQgKi8KLSAgICAgICAgICAgIHVpbnQ4X3QgaXBjc287ICAgICAgLyogSVAgY2hlY2tzdW0gb2Zmc2V0ICovCisgICAgICAgICAgICB1OCBpcGNzczsgICAgICAvKiBJUCBjaGVja3N1bSBzdGFydCAqLworICAgICAgICAgICAgdTggaXBjc287ICAgICAgLyogSVAgY2hlY2tzdW0gb2Zmc2V0ICovCiAgICAgICAgICAgICBfX2xlMTYgaXBjc2U7ICAgICAvKiBJUCBjaGVja3N1bSBlbmQgKi8KICAgICAgICAgfSBpcF9maWVsZHM7CiAgICAgfSBsb3dlcl9zZXR1cDsKICAgICB1bmlvbiB7CiAgICAgICAgIF9fbGUzMiB0Y3BfY29uZmlnOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDhfdCB0dWNzczsgICAgICAvKiBUQ1AgY2hlY2tzdW0gc3RhcnQgKi8KLSAgICAgICAgICAgIHVpbnQ4X3QgdHVjc287ICAgICAgLyogVENQIGNoZWNrc3VtIG9mZnNldCAqLworICAgICAgICAgICAgdTggdHVjc3M7ICAgICAgLyogVENQIGNoZWNrc3VtIHN0YXJ0ICovCisgICAgICAgICAgICB1OCB0dWNzbzsgICAgICAvKiBUQ1AgY2hlY2tzdW0gb2Zmc2V0ICovCiAgICAgICAgICAgICBfX2xlMTYgdHVjc2U7ICAgICAvKiBUQ1AgY2hlY2tzdW0gZW5kICovCiAgICAgICAgIH0gdGNwX2ZpZWxkczsKICAgICB9IHVwcGVyX3NldHVwOwpAQCAtNzc2LDggKzc3Niw4IEBACiAgICAgdW5pb24gewogICAgICAgICBfX2xlMzIgZGF0YTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQ4X3Qgc3RhdHVzOyAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KLSAgICAgICAgICAgIHVpbnQ4X3QgaGRyX2xlbjsgICAgLyogSGVhZGVyIGxlbmd0aCAqLworICAgICAgICAgICAgdTggc3RhdHVzOyAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KKyAgICAgICAgICAgIHU4IGhkcl9sZW47ICAgIC8qIEhlYWRlciBsZW5ndGggKi8KICAgICAgICAgICAgIF9fbGUxNiBtc3M7ICAgICAgIC8qIE1heGltdW0gc2VnbWVudCBzaXplICovCiAgICAgICAgIH0gZmllbGRzOwogICAgIH0gdGNwX3NlZ19zZXR1cDsKQEAgLTc5MCwxNSArNzkwLDE1IEBACiAgICAgICAgIF9fbGUzMiBkYXRhOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgX19sZTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCi0gICAgICAgICAgICB1aW50OF90IHR5cF9sZW5fZXh0OyAgICAgICAgLyogKi8KLSAgICAgICAgICAgIHVpbnQ4X3QgY21kOyAgICAgICAgLyogKi8KKyAgICAgICAgICAgIHU4IHR5cF9sZW5fZXh0OyAgICAgICAgLyogKi8KKyAgICAgICAgICAgIHU4IGNtZDsgICAgICAgIC8qICovCiAgICAgICAgIH0gZmxhZ3M7CiAgICAgfSBsb3dlcjsKICAgICB1bmlvbiB7CiAgICAgICAgIF9fbGUzMiBkYXRhOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDhfdCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotICAgICAgICAgICAgdWludDhfdCBwb3B0czsgICAgICAvKiBQYWNrZXQgT3B0aW9ucyAqLworICAgICAgICAgICAgdTggc3RhdHVzOyAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KKyAgICAgICAgICAgIHU4IHBvcHRzOyAgICAgIC8qIFBhY2tldCBPcHRpb25zICovCiAgICAgICAgICAgICBfX2xlMTYgc3BlY2lhbDsgICAvKiAqLwogICAgICAgICB9IGZpZWxkczsKICAgICB9IHVwcGVyOwpAQCAtODI1LDggKzgyNSw4IEBACiAKIC8qIElQdjQgQWRkcmVzcyBUYWJsZSBFbnRyeSAqLwogc3RydWN0IGUxMDAwX2lwdjRfYXRfZW50cnkgewotICAgIHZvbGF0aWxlIHVpbnQzMl90IGlwdjRfYWRkcjsgICAgICAgIC8qIElQIEFkZHJlc3MgKFJXKSAqLwotICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkOworICAgIHZvbGF0aWxlIHUzMiBpcHY0X2FkZHI7ICAgICAgICAvKiBJUCBBZGRyZXNzIChSVykgKi8KKyAgICB2b2xhdGlsZSB1MzIgcmVzZXJ2ZWQ7CiB9OwogCiAvKiBGb3VyIHdha2V1cCBJUCBhZGRyZXNzZXMgYXJlIHN1cHBvcnRlZCAqLwpAQCAtODM3LDI1ICs4MzcsMjUgQEAKIAogLyogSVB2NiBBZGRyZXNzIFRhYmxlIEVudHJ5ICovCiBzdHJ1Y3QgZTEwMDBfaXB2Nl9hdF9lbnRyeSB7Ci0gICAgdm9sYXRpbGUgdWludDhfdCBpcHY2X2FkZHJbMTZdOworICAgIHZvbGF0aWxlIHU4IGlwdjZfYWRkclsxNl07CiB9OwogCiAvKiBGbGV4aWJsZSBGaWx0ZXIgTGVuZ3RoIFRhYmxlIEVudHJ5ICovCiBzdHJ1Y3QgZTEwMDBfZmZsdF9lbnRyeSB7Ci0gICAgdm9sYXRpbGUgdWludDMyX3QgbGVuZ3RoOyAgIC8qIEZsZXhpYmxlIEZpbHRlciBMZW5ndGggKFJXKSAqLwotICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkOworICAgIHZvbGF0aWxlIHUzMiBsZW5ndGg7ICAgLyogRmxleGlibGUgRmlsdGVyIExlbmd0aCAoUlcpICovCisgICAgdm9sYXRpbGUgdTMyIHJlc2VydmVkOwogfTsKIAogLyogRmxleGlibGUgRmlsdGVyIE1hc2sgVGFibGUgRW50cnkgKi8KIHN0cnVjdCBlMTAwMF9mZm10X2VudHJ5IHsKLSAgICB2b2xhdGlsZSB1aW50MzJfdCBtYXNrOyAgICAgLyogRmxleGlibGUgRmlsdGVyIE1hc2sgKFJXKSAqLwotICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkOworICAgIHZvbGF0aWxlIHUzMiBtYXNrOyAgICAgLyogRmxleGlibGUgRmlsdGVyIE1hc2sgKFJXKSAqLworICAgIHZvbGF0aWxlIHUzMiByZXNlcnZlZDsKIH07CiAKIC8qIEZsZXhpYmxlIEZpbHRlciBWYWx1ZSBUYWJsZSBFbnRyeSAqLwogc3RydWN0IGUxMDAwX2ZmdnRfZW50cnkgewotICAgIHZvbGF0aWxlIHVpbnQzMl90IHZhbHVlOyAgICAvKiBGbGV4aWJsZSBGaWx0ZXIgVmFsdWUgKFJXKSAqLwotICAgIHZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkOworICAgIHZvbGF0aWxlIHUzMiB2YWx1ZTsgICAgLyogRmxleGlibGUgRmlsdGVyIFZhbHVlIChSVykgKi8KKyAgICB2b2xhdGlsZSB1MzIgcmVzZXJ2ZWQ7CiB9OwogCiAvKiBGb3VyIEZsZXhpYmxlIEZpbHRlcnMgYXJlIHN1cHBvcnRlZCAqLwpAQCAtMTMwOSw4OSArMTMwOSw4OSBAQAogCiAvKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbGxlY3RlZCBieSB0aGUgTUFDICovCiBzdHJ1Y3QgZTEwMDBfaHdfc3RhdHMgewotCXVpbnQ2NF90CQljcmNlcnJzOwotCXVpbnQ2NF90CQlhbGduZXJyYzsKLQl1aW50NjRfdAkJc3ltZXJyczsKLQl1aW50NjRfdAkJcnhlcnJjOwotCXVpbnQ2NF90CQl0eGVycmM7Ci0JdWludDY0X3QJCW1wYzsKLQl1aW50NjRfdAkJc2NjOwotCXVpbnQ2NF90CQllY29sOwotCXVpbnQ2NF90CQltY2M7Ci0JdWludDY0X3QJCWxhdGVjb2w7Ci0JdWludDY0X3QJCWNvbGM7Ci0JdWludDY0X3QJCWRjOwotCXVpbnQ2NF90CQl0bmNyczsKLQl1aW50NjRfdAkJc2VjOwotCXVpbnQ2NF90CQljZXh0ZXJyOwotCXVpbnQ2NF90CQlybGVjOwotCXVpbnQ2NF90CQl4b25yeGM7Ci0JdWludDY0X3QJCXhvbnR4YzsKLQl1aW50NjRfdAkJeG9mZnJ4YzsKLQl1aW50NjRfdAkJeG9mZnR4YzsKLQl1aW50NjRfdAkJZmNydWM7Ci0JdWludDY0X3QJCXByYzY0OwotCXVpbnQ2NF90CQlwcmMxMjc7Ci0JdWludDY0X3QJCXByYzI1NTsKLQl1aW50NjRfdAkJcHJjNTExOwotCXVpbnQ2NF90CQlwcmMxMDIzOwotCXVpbnQ2NF90CQlwcmMxNTIyOwotCXVpbnQ2NF90CQlncHJjOwotCXVpbnQ2NF90CQlicHJjOwotCXVpbnQ2NF90CQltcHJjOwotCXVpbnQ2NF90CQlncHRjOwotCXVpbnQ2NF90CQlnb3JjbDsKLQl1aW50NjRfdAkJZ29yY2g7Ci0JdWludDY0X3QJCWdvdGNsOwotCXVpbnQ2NF90CQlnb3RjaDsKLQl1aW50NjRfdAkJcm5iYzsKLQl1aW50NjRfdAkJcnVjOwotCXVpbnQ2NF90CQlyZmM7Ci0JdWludDY0X3QJCXJvYzsKLQl1aW50NjRfdAkJcmxlcnJjOwotCXVpbnQ2NF90CQlyamM7Ci0JdWludDY0X3QJCW1ncHJjOwotCXVpbnQ2NF90CQltZ3BkYzsKLQl1aW50NjRfdAkJbWdwdGM7Ci0JdWludDY0X3QJCXRvcmw7Ci0JdWludDY0X3QJCXRvcmg7Ci0JdWludDY0X3QJCXRvdGw7Ci0JdWludDY0X3QJCXRvdGg7Ci0JdWludDY0X3QJCXRwcjsKLQl1aW50NjRfdAkJdHB0OwotCXVpbnQ2NF90CQlwdGM2NDsKLQl1aW50NjRfdAkJcHRjMTI3OwotCXVpbnQ2NF90CQlwdGMyNTU7Ci0JdWludDY0X3QJCXB0YzUxMTsKLQl1aW50NjRfdAkJcHRjMTAyMzsKLQl1aW50NjRfdAkJcHRjMTUyMjsKLQl1aW50NjRfdAkJbXB0YzsKLQl1aW50NjRfdAkJYnB0YzsKLQl1aW50NjRfdAkJdHNjdGM7Ci0JdWludDY0X3QJCXRzY3RmYzsKLQl1aW50NjRfdAkJaWFjOwotCXVpbnQ2NF90CQlpY3J4cHRjOwotCXVpbnQ2NF90CQlpY3J4YXRjOwotCXVpbnQ2NF90CQlpY3R4cHRjOwotCXVpbnQ2NF90CQlpY3R4YXRjOwotCXVpbnQ2NF90CQlpY3R4cWVjOwotCXVpbnQ2NF90CQlpY3R4cW10YzsKLQl1aW50NjRfdAkJaWNyeGRtdGM7Ci0JdWludDY0X3QJCWljcnhvYzsKKwl1NjQJCWNyY2VycnM7CisJdTY0CQlhbGduZXJyYzsKKwl1NjQJCXN5bWVycnM7CisJdTY0CQlyeGVycmM7CisJdTY0CQl0eGVycmM7CisJdTY0CQltcGM7CisJdTY0CQlzY2M7CisJdTY0CQllY29sOworCXU2NAkJbWNjOworCXU2NAkJbGF0ZWNvbDsKKwl1NjQJCWNvbGM7CisJdTY0CQlkYzsKKwl1NjQJCXRuY3JzOworCXU2NAkJc2VjOworCXU2NAkJY2V4dGVycjsKKwl1NjQJCXJsZWM7CisJdTY0CQl4b25yeGM7CisJdTY0CQl4b250eGM7CisJdTY0CQl4b2ZmcnhjOworCXU2NAkJeG9mZnR4YzsKKwl1NjQJCWZjcnVjOworCXU2NAkJcHJjNjQ7CisJdTY0CQlwcmMxMjc7CisJdTY0CQlwcmMyNTU7CisJdTY0CQlwcmM1MTE7CisJdTY0CQlwcmMxMDIzOworCXU2NAkJcHJjMTUyMjsKKwl1NjQJCWdwcmM7CisJdTY0CQlicHJjOworCXU2NAkJbXByYzsKKwl1NjQJCWdwdGM7CisJdTY0CQlnb3JjbDsKKwl1NjQJCWdvcmNoOworCXU2NAkJZ290Y2w7CisJdTY0CQlnb3RjaDsKKwl1NjQJCXJuYmM7CisJdTY0CQlydWM7CisJdTY0CQlyZmM7CisJdTY0CQlyb2M7CisJdTY0CQlybGVycmM7CisJdTY0CQlyamM7CisJdTY0CQltZ3ByYzsKKwl1NjQJCW1ncGRjOworCXU2NAkJbWdwdGM7CisJdTY0CQl0b3JsOworCXU2NAkJdG9yaDsKKwl1NjQJCXRvdGw7CisJdTY0CQl0b3RoOworCXU2NAkJdHByOworCXU2NAkJdHB0OworCXU2NAkJcHRjNjQ7CisJdTY0CQlwdGMxMjc7CisJdTY0CQlwdGMyNTU7CisJdTY0CQlwdGM1MTE7CisJdTY0CQlwdGMxMDIzOworCXU2NAkJcHRjMTUyMjsKKwl1NjQJCW1wdGM7CisJdTY0CQlicHRjOworCXU2NAkJdHNjdGM7CisJdTY0CQl0c2N0ZmM7CisJdTY0CQlpYWM7CisJdTY0CQlpY3J4cHRjOworCXU2NAkJaWNyeGF0YzsKKwl1NjQJCWljdHhwdGM7CisJdTY0CQlpY3R4YXRjOworCXU2NAkJaWN0eHFlYzsKKwl1NjQJCWljdHhxbXRjOworCXU2NAkJaWNyeGRtdGM7CisJdTY0CQlpY3J4b2M7CiB9OwogCiAvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyB2YXJpYWJsZXMgdXNlZCBieSB0aGUgc2hhcmVkIGNvZGUgKGUxMDAwX2h3LmMpICovCiBzdHJ1Y3QgZTEwMDBfaHcgewotCXVpbnQ4X3QgX19pb21lbQkJKmh3X2FkZHI7Ci0JdWludDhfdCBfX2lvbWVtCQkqZmxhc2hfYWRkcmVzczsKKwl1OCBfX2lvbWVtCQkqaHdfYWRkcjsKKwl1OCBfX2lvbWVtCQkqZmxhc2hfYWRkcmVzczsKIAllMTAwMF9tYWNfdHlwZQkJbWFjX3R5cGU7CiAJZTEwMDBfcGh5X3R5cGUJCXBoeV90eXBlOwotCXVpbnQzMl90CQlwaHlfaW5pdF9zY3JpcHQ7CisJdTMyCQlwaHlfaW5pdF9zY3JpcHQ7CiAJZTEwMDBfbWVkaWFfdHlwZQltZWRpYV90eXBlOwogCXZvaWQJCQkqYmFjazsKIAlzdHJ1Y3QgZTEwMDBfc2hhZG93X3JhbQkqZWVwcm9tX3NoYWRvd19yYW07Ci0JdWludDMyX3QJCWZsYXNoX2Jhbmtfc2l6ZTsKLQl1aW50MzJfdAkJZmxhc2hfYmFzZV9hZGRyOworCXUzMgkJZmxhc2hfYmFua19zaXplOworCXUzMgkJZmxhc2hfYmFzZV9hZGRyOwogCWUxMDAwX2ZjX3R5cGUJCWZjOwogCWUxMDAwX2J1c19zcGVlZAkJYnVzX3NwZWVkOwogCWUxMDAwX2J1c193aWR0aAkJYnVzX3dpZHRoOwpAQCAtMTQwMCw3NSArMTQwMCw3NSBAQAogCWUxMDAwX21zX3R5cGUJCW1hc3Rlcl9zbGF2ZTsKIAllMTAwMF9tc190eXBlCQlvcmlnaW5hbF9tYXN0ZXJfc2xhdmU7CiAJZTEwMDBfZmZlX2NvbmZpZwlmZmVfY29uZmlnX3N0YXRlOwotCXVpbnQzMl90CQlhc2ZfZmlybXdhcmVfcHJlc2VudDsKLQl1aW50MzJfdAkJZWVwcm9tX3NlbWFwaG9yZV9wcmVzZW50OwotCXVpbnQzMl90CQlzd2Z3X3N5bmNfcHJlc2VudDsKLQl1aW50MzJfdAkJc3dmd2h3X3NlbWFwaG9yZV9wcmVzZW50OworCXUzMgkJYXNmX2Zpcm13YXJlX3ByZXNlbnQ7CisJdTMyCQllZXByb21fc2VtYXBob3JlX3ByZXNlbnQ7CisJdTMyCQlzd2Z3X3N5bmNfcHJlc2VudDsKKwl1MzIJCXN3Zndod19zZW1hcGhvcmVfcHJlc2VudDsKIAl1bnNpZ25lZCBsb25nCQlpb19iYXNlOwotCXVpbnQzMl90CQlwaHlfaWQ7Ci0JdWludDMyX3QJCXBoeV9yZXZpc2lvbjsKLQl1aW50MzJfdAkJcGh5X2FkZHI7Ci0JdWludDMyX3QJCW9yaWdpbmFsX2ZjOwotCXVpbnQzMl90CQl0eGN3OwotCXVpbnQzMl90CQlhdXRvbmVnX2ZhaWxlZDsKLQl1aW50MzJfdAkJbWF4X2ZyYW1lX3NpemU7Ci0JdWludDMyX3QJCW1pbl9mcmFtZV9zaXplOwotCXVpbnQzMl90CQltY19maWx0ZXJfdHlwZTsKLQl1aW50MzJfdAkJbnVtX21jX2FkZHJzOwotCXVpbnQzMl90CQljb2xsaXNpb25fZGVsdGE7Ci0JdWludDMyX3QJCXR4X3BhY2tldF9kZWx0YTsKLQl1aW50MzJfdAkJbGVkY3RsX2RlZmF1bHQ7Ci0JdWludDMyX3QJCWxlZGN0bF9tb2RlMTsKLQl1aW50MzJfdAkJbGVkY3RsX21vZGUyOwotCWJvb2xlYW5fdAkJdHhfcGt0X2ZpbHRlcmluZzsKKwl1MzIJCXBoeV9pZDsKKwl1MzIJCXBoeV9yZXZpc2lvbjsKKwl1MzIJCXBoeV9hZGRyOworCXUzMgkJb3JpZ2luYWxfZmM7CisJdTMyCQl0eGN3OworCXUzMgkJYXV0b25lZ19mYWlsZWQ7CisJdTMyCQltYXhfZnJhbWVfc2l6ZTsKKwl1MzIJCW1pbl9mcmFtZV9zaXplOworCXUzMgkJbWNfZmlsdGVyX3R5cGU7CisJdTMyCQludW1fbWNfYWRkcnM7CisJdTMyCQljb2xsaXNpb25fZGVsdGE7CisJdTMyCQl0eF9wYWNrZXRfZGVsdGE7CisJdTMyCQlsZWRjdGxfZGVmYXVsdDsKKwl1MzIJCWxlZGN0bF9tb2RlMTsKKwl1MzIJCWxlZGN0bF9tb2RlMjsKKwlib29sCQkJdHhfcGt0X2ZpbHRlcmluZzsKIAlzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfZGhjcF9jb29raWUgbW5nX2Nvb2tpZTsKLQl1aW50MTZfdAkJcGh5X3NwZF9kZWZhdWx0OwotCXVpbnQxNl90CQlhdXRvbmVnX2FkdmVydGlzZWQ7Ci0JdWludDE2X3QJCXBjaV9jbWRfd29yZDsKLQl1aW50MTZfdAkJZmNfaGlnaF93YXRlcjsKLQl1aW50MTZfdAkJZmNfbG93X3dhdGVyOwotCXVpbnQxNl90CQlmY19wYXVzZV90aW1lOwotCXVpbnQxNl90CQljdXJyZW50X2lmc192YWw7Ci0JdWludDE2X3QJCWlmc19taW5fdmFsOwotCXVpbnQxNl90CQlpZnNfbWF4X3ZhbDsKLQl1aW50MTZfdAkJaWZzX3N0ZXBfc2l6ZTsKLQl1aW50MTZfdAkJaWZzX3JhdGlvOwotCXVpbnQxNl90CQlkZXZpY2VfaWQ7Ci0JdWludDE2X3QJCXZlbmRvcl9pZDsKLQl1aW50MTZfdAkJc3Vic3lzdGVtX2lkOwotCXVpbnQxNl90CQlzdWJzeXN0ZW1fdmVuZG9yX2lkOwotCXVpbnQ4X3QJCQlyZXZpc2lvbl9pZDsKLQl1aW50OF90CQkJYXV0b25lZzsKLQl1aW50OF90CQkJbWRpeDsKLQl1aW50OF90CQkJZm9yY2VkX3NwZWVkX2R1cGxleDsKLQl1aW50OF90CQkJd2FpdF9hdXRvbmVnX2NvbXBsZXRlOwotCXVpbnQ4X3QJCQlkbWFfZmFpcm5lc3M7Ci0JdWludDhfdAkJCW1hY19hZGRyW05PREVfQUREUkVTU19TSVpFXTsKLQl1aW50OF90CQkJcGVybV9tYWNfYWRkcltOT0RFX0FERFJFU1NfU0laRV07Ci0JYm9vbGVhbl90CQlkaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb247Ci0JYm9vbGVhbl90CQlzcGVlZF9kb3duZ3JhZGVkOworCXUxNgkJcGh5X3NwZF9kZWZhdWx0OworCXUxNgkJYXV0b25lZ19hZHZlcnRpc2VkOworCXUxNgkJcGNpX2NtZF93b3JkOworCXUxNgkJZmNfaGlnaF93YXRlcjsKKwl1MTYJCWZjX2xvd193YXRlcjsKKwl1MTYJCWZjX3BhdXNlX3RpbWU7CisJdTE2CQljdXJyZW50X2lmc192YWw7CisJdTE2CQlpZnNfbWluX3ZhbDsKKwl1MTYJCWlmc19tYXhfdmFsOworCXUxNgkJaWZzX3N0ZXBfc2l6ZTsKKwl1MTYJCWlmc19yYXRpbzsKKwl1MTYJCWRldmljZV9pZDsKKwl1MTYJCXZlbmRvcl9pZDsKKwl1MTYJCXN1YnN5c3RlbV9pZDsKKwl1MTYJCXN1YnN5c3RlbV92ZW5kb3JfaWQ7CisJdTgJCQlyZXZpc2lvbl9pZDsKKwl1OAkJCWF1dG9uZWc7CisJdTgJCQltZGl4OworCXU4CQkJZm9yY2VkX3NwZWVkX2R1cGxleDsKKwl1OAkJCXdhaXRfYXV0b25lZ19jb21wbGV0ZTsKKwl1OAkJCWRtYV9mYWlybmVzczsKKwl1OAkJCW1hY19hZGRyW05PREVfQUREUkVTU19TSVpFXTsKKwl1OAkJCXBlcm1fbWFjX2FkZHJbTk9ERV9BRERSRVNTX1NJWkVdOworCWJvb2wJCQlkaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb247CisJYm9vbAkJCXNwZWVkX2Rvd25ncmFkZWQ7CiAJZTEwMDBfc21hcnRfc3BlZWQJc21hcnRfc3BlZWQ7CiAJZTEwMDBfZHNwX2NvbmZpZwlkc3BfY29uZmlnX3N0YXRlOwotCWJvb2xlYW5fdAkJZ2V0X2xpbmtfc3RhdHVzOwotCWJvb2xlYW5fdAkJc2VyZGVzX2xpbmtfZG93bjsKLQlib29sZWFuX3QJCXRiaV9jb21wYXRpYmlsaXR5X2VuOwotCWJvb2xlYW5fdAkJdGJpX2NvbXBhdGliaWxpdHlfb247Ci0JYm9vbGVhbl90CQlsYWFfaXNfcHJlc2VudDsKLQlib29sZWFuX3QJCXBoeV9yZXNldF9kaXNhYmxlOwotCWJvb2xlYW5fdAkJaW5pdGlhbGl6ZV9od19iaXRzX2Rpc2FibGU7Ci0JYm9vbGVhbl90CQlmY19zZW5kX3hvbjsKLQlib29sZWFuX3QJCWZjX3N0cmljdF9pZWVlOwotCWJvb2xlYW5fdAkJcmVwb3J0X3R4X2Vhcmx5OwotCWJvb2xlYW5fdAkJYWRhcHRpdmVfaWZzOwotCWJvb2xlYW5fdAkJaWZzX3BhcmFtc19mb3JjZWQ7Ci0JYm9vbGVhbl90CQlpbl9pZnNfbW9kZTsKLQlib29sZWFuX3QJCW1uZ19yZWdfYWNjZXNzX2Rpc2FibGVkOwotCWJvb2xlYW5fdAkJbGVhdmVfYXZfYml0X29mZjsKLQlib29sZWFuX3QJCWttcm5fbG9ja19sb3NzX3dvcmthcm91bmRfZGlzYWJsZWQ7Ci0JYm9vbGVhbl90CQliYWRfdHhfY2Fycl9zdGF0c19mZDsKLQlib29sZWFuX3QJCWhhc19tYW5jMmg7Ci0JYm9vbGVhbl90CQlyeF9uZWVkc19raWNraW5nOwotCWJvb2xlYW5fdAkJaGFzX3NtYnVzOworCWJvb2wJCQlnZXRfbGlua19zdGF0dXM7CisJYm9vbAkJCXNlcmRlc19saW5rX2Rvd247CisJYm9vbAkJCXRiaV9jb21wYXRpYmlsaXR5X2VuOworCWJvb2wJCQl0YmlfY29tcGF0aWJpbGl0eV9vbjsKKwlib29sCQkJbGFhX2lzX3ByZXNlbnQ7CisJYm9vbAkJCXBoeV9yZXNldF9kaXNhYmxlOworCWJvb2wJCQlpbml0aWFsaXplX2h3X2JpdHNfZGlzYWJsZTsKKwlib29sCQkJZmNfc2VuZF94b247CisJYm9vbAkJCWZjX3N0cmljdF9pZWVlOworCWJvb2wJCQlyZXBvcnRfdHhfZWFybHk7CisJYm9vbAkJCWFkYXB0aXZlX2lmczsKKwlib29sCQkJaWZzX3BhcmFtc19mb3JjZWQ7CisJYm9vbAkJCWluX2lmc19tb2RlOworCWJvb2wJCQltbmdfcmVnX2FjY2Vzc19kaXNhYmxlZDsKKwlib29sCQkJbGVhdmVfYXZfYml0X29mZjsKKwlib29sCQkJa21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9kaXNhYmxlZDsKKwlib29sCQkJYmFkX3R4X2NhcnJfc3RhdHNfZmQ7CisJYm9vbAkJCWhhc19tYW5jMmg7CisJYm9vbAkJCXJ4X25lZWRzX2tpY2tpbmc7CisJYm9vbAkJCWhhc19zbWJ1czsKIH07CiAKIApAQCAtMjE2NSwxNCArMjE2NSwxNCBAQAogI2RlZmluZSBFMTAwMF9ISV9DT01NQU5EX1RJTUVPVVQgICAgICAgICA1MDAgLyogVGltZSBpbiBtcyB0byBwcm9jZXNzIEhJIGNvbW1hbmQgKi8KIAogc3RydWN0IGUxMDAwX2hvc3RfY29tbWFuZF9oZWFkZXIgewotICAgIHVpbnQ4X3QgY29tbWFuZF9pZDsKLSAgICB1aW50OF90IGNvbW1hbmRfbGVuZ3RoOwotICAgIHVpbnQ4X3QgY29tbWFuZF9vcHRpb25zOyAgIC8qIEkvRiBiaXRzIGZvciBjb21tYW5kLCBzdGF0dXMgZm9yIHJldHVybiAqLwotICAgIHVpbnQ4X3QgY2hlY2tzdW07CisgICAgdTggY29tbWFuZF9pZDsKKyAgICB1OCBjb21tYW5kX2xlbmd0aDsKKyAgICB1OCBjb21tYW5kX29wdGlvbnM7ICAgLyogSS9GIGJpdHMgZm9yIGNvbW1hbmQsIHN0YXR1cyBmb3IgcmV0dXJuICovCisgICAgdTggY2hlY2tzdW07CiB9Owogc3RydWN0IGUxMDAwX2hvc3RfY29tbWFuZF9pbmZvIHsKICAgICBzdHJ1Y3QgZTEwMDBfaG9zdF9jb21tYW5kX2hlYWRlciBjb21tYW5kX2hlYWRlcjsgIC8qIENvbW1hbmQgSGVhZC9Db21tYW5kIFJlc3VsdCBIZWFkIGhhcyA0IGJ5dGVzICovCi0gICAgdWludDhfdCBjb21tYW5kX2RhdGFbRTEwMDBfSElfTUFYX0RBVEFfTEVOR1RIXTsgICAvKiBDb21tYW5kIGRhdGEgY2FuIGxlbmd0aCAwLi4yNTIgKi8KKyAgICB1OCBjb21tYW5kX2RhdGFbRTEwMDBfSElfTUFYX0RBVEFfTEVOR1RIXTsgICAvKiBDb21tYW5kIGRhdGEgY2FuIGxlbmd0aCAwLi4yNTIgKi8KIH07CiAKIC8qIEhvc3QgU01CIHJlZ2lzdGVyICMwICovCkBAIC0yNDk1LDcgKzI0OTUsNyBAQAogLyogTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB3ZSB3YWl0IGZvciBQSFkgY29uZmlndXJhdGlvbiBkb25lIGFmdGVyIE1BQyByZXNldCAqLwogI2RlZmluZSBQSFlfQ0ZHX1RJTUVPVVQgICAgICAgICAgICAgMTAwCiAKLSNkZWZpbmUgRTEwMDBfVFhfQlVGRkVSX1NJWkUgKCh1aW50MzJfdCkxNTE0KQorI2RlZmluZSBFMTAwMF9UWF9CVUZGRVJfU0laRSAoKHUzMikxNTE0KQogCiAvKiBUaGUgY2FycmllciBleHRlbnNpb24gc3ltYm9sLCBhcyByZWNlaXZlZCBieSB0aGUgTklDLiAqLwogI2RlZmluZSBDQVJSSUVSX0VYVEVOU0lPTiAgIDB4MEYKQEAgLTI1MTgsMTEgKzI1MTgsMTEgQEAKICAqIFR5cGljYWwgdXNlOgogICogIC4uLgogICogIGlmIChUQklfQUNDRVBUKSB7Ci0gKiAgICAgIGFjY2VwdF9mcmFtZSA9IFRSVUU7CisgKiAgICAgIGFjY2VwdF9mcmFtZSA9IHRydWU7CiAgKiAgICAgIGUxMDAwX3RiaV9hZGp1c3Rfc3RhdHMoYWRhcHRlciwgTWFjQWRkcmVzcyk7CiAgKiAgICAgIGZyYW1lX2xlbmd0aC0tOwogICogIH0gZWxzZSB7Ci0gKiAgICAgIGFjY2VwdF9mcmFtZSA9IEZBTFNFOworICogICAgICBhY2NlcHRfZnJhbWUgPSBmYWxzZTsKICAqICB9CiAgKiAgLi4uCiAgKi8KQEAgLTMzMTIsNjggKzMzMTIsNjggQEAKIC8qIE9mZnNldCAwNGggSFNGU1RTICovCiB1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgewogICAgIHN0cnVjdCBpY2g4X2hzZnN0cyB7Ci0jaWZkZWYgRTEwMDBfQklHX0VORElBTgotICAgICAgICB1aW50MTZfdCByZXNlcnZlZDIgICAgICA6NjsKLSAgICAgICAgdWludDE2X3QgZmxkZXN2YWxpZCAgICAgOjE7Ci0gICAgICAgIHVpbnQxNl90IGZsb2NrZG4gICAgICAgIDoxOwotICAgICAgICB1aW50MTZfdCBmbGNkb25lICAgICAgICA6MTsKLSAgICAgICAgdWludDE2X3QgZmxjZXJyICAgICAgICAgOjE7Ci0gICAgICAgIHVpbnQxNl90IGRhZWwgICAgICAgICAgIDoxOwotICAgICAgICB1aW50MTZfdCBiZXJhc2VzeiAgICAgICA6MjsKLSAgICAgICAgdWludDE2X3QgZmxjaW5wcm9nICAgICAgOjE7Ci0gICAgICAgIHVpbnQxNl90IHJlc2VydmVkMSAgICAgIDoyOworI2lmZGVmIF9fQklHX0VORElBTgorICAgICAgICB1MTYgcmVzZXJ2ZWQyICAgICAgOjY7CisgICAgICAgIHUxNiBmbGRlc3ZhbGlkICAgICA6MTsKKyAgICAgICAgdTE2IGZsb2NrZG4gICAgICAgIDoxOworICAgICAgICB1MTYgZmxjZG9uZSAgICAgICAgOjE7CisgICAgICAgIHUxNiBmbGNlcnIgICAgICAgICA6MTsKKyAgICAgICAgdTE2IGRhZWwgICAgICAgICAgIDoxOworICAgICAgICB1MTYgYmVyYXNlc3ogICAgICAgOjI7CisgICAgICAgIHUxNiBmbGNpbnByb2cgICAgICA6MTsKKyAgICAgICAgdTE2IHJlc2VydmVkMSAgICAgIDoyOwogI2Vsc2UKLSAgICAgICAgdWludDE2X3QgZmxjZG9uZSAgICAgICAgOjE7ICAgLyogYml0IDAgRmxhc2ggQ3ljbGUgRG9uZSAqLwotICAgICAgICB1aW50MTZfdCBmbGNlcnIgICAgICAgICA6MTsgICAvKiBiaXQgMSBGbGFzaCBDeWNsZSBFcnJvciAqLwotICAgICAgICB1aW50MTZfdCBkYWVsICAgICAgICAgICA6MTsgICAvKiBiaXQgMiBEaXJlY3QgQWNjZXNzIGVycm9yIExvZyAqLwotICAgICAgICB1aW50MTZfdCBiZXJhc2VzeiAgICAgICA6MjsgICAvKiBiaXQgNDozIEJsb2NrL1NlY3RvciBFcmFzZSBTaXplICovCi0gICAgICAgIHVpbnQxNl90IGZsY2lucHJvZyAgICAgIDoxOyAgIC8qIGJpdCA1IGZsYXNoIFNQSSBjeWNsZSBpbiBQcm9ncmVzcyAqLwotICAgICAgICB1aW50MTZfdCByZXNlcnZlZDEgICAgICA6MjsgICAvKiBiaXQgMTM6NiBSZXNlcnZlZCAqLwotICAgICAgICB1aW50MTZfdCByZXNlcnZlZDIgICAgICA6NjsgICAvKiBiaXQgMTM6NiBSZXNlcnZlZCAqLwotICAgICAgICB1aW50MTZfdCBmbGRlc3ZhbGlkICAgICA6MTsgICAvKiBiaXQgMTQgRmxhc2ggRGVzY3JpcHRvciBWYWxpZCAqLwotICAgICAgICB1aW50MTZfdCBmbG9ja2RuICAgICAgICA6MTsgICAvKiBiaXQgMTUgRmxhc2ggQ29uZmlndXJhdGlvbiBMb2NrLURvd24gKi8KKyAgICAgICAgdTE2IGZsY2RvbmUgICAgICAgIDoxOyAgIC8qIGJpdCAwIEZsYXNoIEN5Y2xlIERvbmUgKi8KKyAgICAgICAgdTE2IGZsY2VyciAgICAgICAgIDoxOyAgIC8qIGJpdCAxIEZsYXNoIEN5Y2xlIEVycm9yICovCisgICAgICAgIHUxNiBkYWVsICAgICAgICAgICA6MTsgICAvKiBiaXQgMiBEaXJlY3QgQWNjZXNzIGVycm9yIExvZyAqLworICAgICAgICB1MTYgYmVyYXNlc3ogICAgICAgOjI7ICAgLyogYml0IDQ6MyBCbG9jay9TZWN0b3IgRXJhc2UgU2l6ZSAqLworICAgICAgICB1MTYgZmxjaW5wcm9nICAgICAgOjE7ICAgLyogYml0IDUgZmxhc2ggU1BJIGN5Y2xlIGluIFByb2dyZXNzICovCisgICAgICAgIHUxNiByZXNlcnZlZDEgICAgICA6MjsgICAvKiBiaXQgMTM6NiBSZXNlcnZlZCAqLworICAgICAgICB1MTYgcmVzZXJ2ZWQyICAgICAgOjY7ICAgLyogYml0IDEzOjYgUmVzZXJ2ZWQgKi8KKyAgICAgICAgdTE2IGZsZGVzdmFsaWQgICAgIDoxOyAgIC8qIGJpdCAxNCBGbGFzaCBEZXNjcmlwdG9yIFZhbGlkICovCisgICAgICAgIHUxNiBmbG9ja2RuICAgICAgICA6MTsgICAvKiBiaXQgMTUgRmxhc2ggQ29uZmlndXJhdGlvbiBMb2NrLURvd24gKi8KICNlbmRpZgogICAgIH0gaHNmX3N0YXR1czsKLSAgICB1aW50MTZfdCByZWd2YWw7CisgICAgdTE2IHJlZ3ZhbDsKIH07CiAKIC8qIElDSDggR2JFIEZsYXNoIEhhcmR3YXJlIFNlcXVlbmNpbmcgRmxhc2ggY29udHJvbCBSZWdpc3RlciBiaXQgYnJlYWtkb3duICovCiAvKiBPZmZzZXQgMDZoIEZMQ1RMICovCiB1bmlvbiBpY2g4X2h3c19mbGFzaF9jdHJsIHsKICAgICBzdHJ1Y3QgaWNoOF9oc2ZsY3RsIHsKLSNpZmRlZiBFMTAwMF9CSUdfRU5ESUFOCi0gICAgICAgIHVpbnQxNl90IGZsZGJjb3VudCAgICAgIDoyOwotICAgICAgICB1aW50MTZfdCBmbG9ja2RuICAgICAgICA6NjsKLSAgICAgICAgdWludDE2X3QgZmxjZ28gICAgICAgICAgOjE7Ci0gICAgICAgIHVpbnQxNl90IGZsY3ljbGUgICAgICAgIDoyOwotICAgICAgICB1aW50MTZfdCByZXNlcnZlZCAgICAgICA6NTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyAgICAgICAgdTE2IGZsZGJjb3VudCAgICAgIDoyOworICAgICAgICB1MTYgZmxvY2tkbiAgICAgICAgOjY7CisgICAgICAgIHUxNiBmbGNnbyAgICAgICAgICA6MTsKKyAgICAgICAgdTE2IGZsY3ljbGUgICAgICAgIDoyOworICAgICAgICB1MTYgcmVzZXJ2ZWQgICAgICAgOjU7CiAjZWxzZQotICAgICAgICB1aW50MTZfdCBmbGNnbyAgICAgICAgICA6MTsgICAvKiAwIEZsYXNoIEN5Y2xlIEdvICovCi0gICAgICAgIHVpbnQxNl90IGZsY3ljbGUgICAgICAgIDoyOyAgIC8qIDI6MSBGbGFzaCBDeWNsZSAqLwotICAgICAgICB1aW50MTZfdCByZXNlcnZlZCAgICAgICA6NTsgICAvKiA3OjMgUmVzZXJ2ZWQgICovCi0gICAgICAgIHVpbnQxNl90IGZsZGJjb3VudCAgICAgIDoyOyAgIC8qIDk6OCBGbGFzaCBEYXRhIEJ5dGUgQ291bnQgKi8KLSAgICAgICAgdWludDE2X3QgZmxvY2tkbiAgICAgICAgOjY7ICAgLyogMTU6MTAgUmVzZXJ2ZWQgKi8KKyAgICAgICAgdTE2IGZsY2dvICAgICAgICAgIDoxOyAgIC8qIDAgRmxhc2ggQ3ljbGUgR28gKi8KKyAgICAgICAgdTE2IGZsY3ljbGUgICAgICAgIDoyOyAgIC8qIDI6MSBGbGFzaCBDeWNsZSAqLworICAgICAgICB1MTYgcmVzZXJ2ZWQgICAgICAgOjU7ICAgLyogNzozIFJlc2VydmVkICAqLworICAgICAgICB1MTYgZmxkYmNvdW50ICAgICAgOjI7ICAgLyogOTo4IEZsYXNoIERhdGEgQnl0ZSBDb3VudCAqLworICAgICAgICB1MTYgZmxvY2tkbiAgICAgICAgOjY7ICAgLyogMTU6MTAgUmVzZXJ2ZWQgKi8KICNlbmRpZgogICAgIH0gaHNmX2N0cmw7Ci0gICAgdWludDE2X3QgcmVndmFsOworICAgIHUxNiByZWd2YWw7CiB9OwogCiAvKiBJQ0g4IEZsYXNoIFJlZ2lvbiBBY2Nlc3MgUGVybWlzc2lvbnMgKi8KIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3JlZ2FjYyB7CiAgICAgc3RydWN0IGljaDhfZmxyYWNjIHsKLSNpZmRlZiBFMTAwMF9CSUdfRU5ESUFOCi0gICAgICAgIHVpbnQzMl90IGdtd2FnICAgICAgICAgIDo4OwotICAgICAgICB1aW50MzJfdCBnbXJhZyAgICAgICAgICA6ODsKLSAgICAgICAgdWludDMyX3QgZ3J3YSAgICAgICAgICAgOjg7Ci0gICAgICAgIHVpbnQzMl90IGdycmEgICAgICAgICAgIDo4OworI2lmZGVmIF9fQklHX0VORElBTgorICAgICAgICB1MzIgZ213YWcgICAgICAgICAgOjg7CisgICAgICAgIHUzMiBnbXJhZyAgICAgICAgICA6ODsKKyAgICAgICAgdTMyIGdyd2EgICAgICAgICAgIDo4OworICAgICAgICB1MzIgZ3JyYSAgICAgICAgICAgOjg7CiAjZWxzZQotICAgICAgICB1aW50MzJfdCBncnJhICAgICAgICAgICA6ODsgICAvKiAwOjcgR2JFIHJlZ2lvbiBSZWFkIEFjY2VzcyAqLwotICAgICAgICB1aW50MzJfdCBncndhICAgICAgICAgICA6ODsgICAvKiA4OjE1IEdiRSByZWdpb24gV3JpdGUgQWNjZXNzICovCi0gICAgICAgIHVpbnQzMl90IGdtcmFnICAgICAgICAgIDo4OyAgIC8qIDIzOjE2IEdiRSBNYXN0ZXIgUmVhZCBBY2Nlc3MgR3JhbnQgICovCi0gICAgICAgIHVpbnQzMl90IGdtd2FnICAgICAgICAgIDo4OyAgIC8qIDMxOjI0IEdiRSBNYXN0ZXIgV3JpdGUgQWNjZXNzIEdyYW50ICovCisgICAgICAgIHUzMiBncnJhICAgICAgICAgICA6ODsgICAvKiAwOjcgR2JFIHJlZ2lvbiBSZWFkIEFjY2VzcyAqLworICAgICAgICB1MzIgZ3J3YSAgICAgICAgICAgOjg7ICAgLyogODoxNSBHYkUgcmVnaW9uIFdyaXRlIEFjY2VzcyAqLworICAgICAgICB1MzIgZ21yYWcgICAgICAgICAgOjg7ICAgLyogMjM6MTYgR2JFIE1hc3RlciBSZWFkIEFjY2VzcyBHcmFudCAgKi8KKyAgICAgICAgdTMyIGdtd2FnICAgICAgICAgIDo4OyAgIC8qIDMxOjI0IEdiRSBNYXN0ZXIgV3JpdGUgQWNjZXNzIEdyYW50ICovCiAjZW5kaWYKICAgICB9IGhzZl9mbHJlZ2FjYzsKLSAgICB1aW50MTZfdCByZWd2YWw7CisgICAgdTE2IHJlZ3ZhbDsKIH07CiAKIC8qIE1pc2NlbGxhbmVvdXMgUEhZIGJpdCBkZWZpbml0aW9ucy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCBkNGVlOGVjLi41OTU3OWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIHZvaWQgZTEwMDBfZG93bihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGUxMDAwX3JlaW5pdF9sb2NrZWQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBlMTAwMF9yZXNldChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50MTZfdCBzcGRkcGx4KTsKK2ludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGRkcGx4KTsKIGludCBlMTAwMF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGludCBlMTAwMF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgZTEwMDBfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTE2OSwyMSArMTY5LDIxIEBACiBzdGF0aWMgaW50IGUxMDAwX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaShpbnQgaXJxLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBib29sZWFuX3QgZTEwMDBfY2xlYW5fdHhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcpOworc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fdHhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nKTsKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogc3RhdGljIGludCBlMTAwMF9jbGVhbihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwotc3RhdGljIGJvb2xlYW5fdCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbyk7Ci1zdGF0aWMgYm9vbGVhbl90IGUxMDAwX2NsZWFuX3J4X2lycV9wcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKK3N0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKKwkJCSAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOworc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCisJCQkJICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOwogI2Vsc2UKLXN0YXRpYyBib29sZWFuX3QgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpOwotc3RhdGljIGJvb2xlYW5fdCBlMTAwMF9jbGVhbl9yeF9pcnFfcHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZyk7CitzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpOworc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpOwogI2VuZGlmCiBzdGF0aWMgdm9pZCBlMTAwMF9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKQEAgLTIwMyw4ICsyMDMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCk7Ci1zdGF0aWMgdm9pZCBlMTAwMF92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKTsKLXN0YXRpYyB2b2lkIGUxMDAwX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKTsKK3N0YXRpYyB2b2lkIGUxMDAwX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKTsKK3N0YXRpYyB2b2lkIGUxMDAwX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCk7CiBzdGF0aWMgdm9pZCBlMTAwMF9yZXN0b3JlX3ZsYW4oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBzdGF0aWMgaW50IGUxMDAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CkBAIC0zNDcsNyArMzQ3LDYgQEAKIHN0YXRpYyB2b2lkCiBlMTAwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIH4wKTsKIAlFMTAwMF9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOwpAQCAtMzYxLDE4ICszNjAsMTYgQEAKIHN0YXRpYyB2b2lkCiBlMTAwMF9pcnFfZW5hYmxlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewotCWlmIChsaWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgmYWRhcHRlci0+aXJxX3NlbSkpKSB7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNUywgSU1TX0VOQUJMRV9NQVNLKTsKLQkJRTEwMDBfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKLQl9CisJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1TLCBJTVNfRU5BQkxFX01BU0spOworCUUxMDAwX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBlMTAwMF91cGRhdGVfbW5nX3ZsYW4oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1aW50MTZfdCB2aWQgPSBhZGFwdGVyLT5ody5tbmdfY29va2llLnZsYW5faWQ7Ci0JdWludDE2X3Qgb2xkX3ZpZCA9IGFkYXB0ZXItPm1uZ192bGFuX2lkOworCXUxNiB2aWQgPSBhZGFwdGVyLT5ody5tbmdfY29va2llLnZsYW5faWQ7CisJdTE2IG9sZF92aWQgPSBhZGFwdGVyLT5tbmdfdmxhbl9pZDsKIAlpZiAoYWRhcHRlci0+dmxncnApIHsKIAkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpIHsKIAkJCWlmIChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCkBAIC0zODIsNyArMzc5LDcgQEAKIAkJCX0gZWxzZQogCQkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gRTEwMDBfTU5HX1ZMQU5fTk9ORTsKIAotCQkJaWYgKChvbGRfdmlkICE9ICh1aW50MTZfdClFMTAwMF9NTkdfVkxBTl9OT05FKSAmJgorCQkJaWYgKChvbGRfdmlkICE9ICh1MTYpRTEwMDBfTU5HX1ZMQU5fTk9ORSkgJiYKIAkJCQkJKHZpZCAhPSBvbGRfdmlkKSAmJgogCQkJICAgICF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIG9sZF92aWQpKQogCQkJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBvbGRfdmlkKTsKQEAgLTQwNSw4ICs0MDIsOCBAQAogc3RhdGljIHZvaWQKIGUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MzJfdCBjdHJsX2V4dDsKLQl1aW50MzJfdCBzd3NtOworCXUzMiBjdHJsX2V4dDsKKwl1MzIgc3dzbTsKIAogCS8qIExldCBmaXJtd2FyZSB0YWtlbiBvdmVyIGNvbnRyb2wgb2YgaC93ICovCiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewpAQCAtNDQyLDggKzQzOSw4IEBACiBzdGF0aWMgdm9pZAogZTEwMDBfZ2V0X2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdWludDMyX3QgY3RybF9leHQ7Ci0JdWludDMyX3Qgc3dzbTsKKwl1MzIgY3RybF9leHQ7CisJdTMyIHN3c207CiAKIAkvKiBMZXQgZmlybXdhcmUga25vdyB0aGUgZHJpdmVyIGhhcyB0YWtlbiBvdmVyICovCiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewpAQCAtNDY5LDcgKzQ2Niw3IEBACiBlMTAwMF9pbml0X21hbmFnZWFiaWxpdHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKGFkYXB0ZXItPmVuX21uZ19wdCkgewotCQl1aW50MzJfdCBtYW5jID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DKTsKKwkJdTMyIG1hbmMgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1BTkMpOwogCiAJCS8qIGRpc2FibGUgaGFyZHdhcmUgaW50ZXJjZXB0aW9uIG9mIEFSUCAqLwogCQltYW5jICY9IH4oRTEwMDBfTUFOQ19BUlBfRU4pOwpAQCAtNDc4LDcgKzQ3NSw3IEBACiAJCS8qIHRoaXMgd2lsbCBwcm9iYWJseSBnZW5lcmF0ZSBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBtZXNzYWdlcwogCQkgKiBmcm9tIHRoZSBob3N0IE9TLCBidXQgdGhlIHBhY2tldHMgd2lsbCBiZSBoYW5kbGVkIG9uIFNNQlVTICovCiAJCWlmIChhZGFwdGVyLT5ody5oYXNfbWFuYzJoKSB7Ci0JCQl1aW50MzJfdCBtYW5jMmggPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1BTkMySCk7CisJCQl1MzIgbWFuYzJoID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DMkgpOwogCiAJCQltYW5jIHw9IEUxMDAwX01BTkNfRU5fTU5HMkhPU1Q7CiAjZGVmaW5lIEUxMDAwX01ORzJIT1NUX1BPUlRfNjIzICgxIDw8IDUpCkBAIC00OTYsNyArNDkzLDcgQEAKIGUxMDAwX3JlbGVhc2VfbWFuYWdlYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoYWRhcHRlci0+ZW5fbW5nX3B0KSB7Ci0JCXVpbnQzMl90IG1hbmMgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1BTkMpOworCQl1MzIgbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7CiAKIAkJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVyY2VwdGlvbiBvZiBBUlAgKi8KIAkJbWFuYyB8PSBFMTAwMF9NQU5DX0FSUF9FTjsKQEAgLTU2OSw3ICs1NjYsNyBAQAogCiB2b2lkIGUxMDAwX3Bvd2VyX3VwX3BoeShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MTZfdCBtaWlfcmVnID0gMDsKKwl1MTYgbWlpX3JlZyA9IDA7CiAKIAkvKiBKdXN0IGNsZWFyIHRoZSBwb3dlciBkb3duIGJpdCB0byB3YWtlIHRoZSBwaHkgYmFjayB1cCAqLwogCWlmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CkBAIC01ODQsMTMgKzU4MSwxMyBAQAogc3RhdGljIHZvaWQgZTEwMDBfcG93ZXJfZG93bl9waHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJLyogUG93ZXIgZG93biB0aGUgUEhZIHNvIG5vIGxpbmsgaXMgaW1wbGllZCB3aGVuIGludGVyZmFjZSBpcyBkb3duICoKLQkgKiBUaGUgUEhZIGNhbm5vdCBiZSBwb3dlcmVkIGRvd24gaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgaXMgVFJVRSAqCisJICogVGhlIFBIWSBjYW5ub3QgYmUgcG93ZXJlZCBkb3duIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWUgKgogCSAqIChhKSBXb0wgaXMgZW5hYmxlZAogCSAqIChiKSBBTVQgaXMgYWN0aXZlCiAJICogKGMpIFNvTC9JREVSIHNlc3Npb24gaXMgYWN0aXZlICovCiAJaWYgKCFhZGFwdGVyLT53b2wgJiYgYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYKIAkgICBhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7Ci0JCXVpbnQxNl90IG1paV9yZWcgPSAwOworCQl1MTYgbWlpX3JlZyA9IDA7CiAKIAkJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewogCQljYXNlIGUxMDAwXzgyNTQwOgpAQCAtNjM4LDcgKzYzNSw2IEBACiAKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0JYXRvbWljX3NldCgmYWRhcHRlci0+aXJxX3NlbSwgMCk7CiAjZW5kaWYKIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtNjcxLDkgKzY2Nyw5IEBACiB2b2lkCiBlMTAwMF9yZXNldChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MzJfdCBwYmEgPSAwLCB0eF9zcGFjZSwgbWluX3R4X3NwYWNlLCBtaW5fcnhfc3BhY2U7Ci0JdWludDE2X3QgZmNfaGlnaF93YXRlcl9tYXJrID0gRTEwMDBfRkNfSElHSF9ESUZGOwotCWJvb2xlYW5fdCBsZWdhY3lfcGJhX2FkanVzdCA9IEZBTFNFOworCXUzMiBwYmEgPSAwLCB0eF9zcGFjZSwgbWluX3R4X3NwYWNlLCBtaW5fcnhfc3BhY2U7CisJdTE2IGZjX2hpZ2hfd2F0ZXJfbWFyayA9IEUxMDAwX0ZDX0hJR0hfRElGRjsKKwlib29sIGxlZ2FjeV9wYmFfYWRqdXN0ID0gZmFsc2U7CiAKIAkvKiBSZXBhcnRpdGlvbiBQYmEgZm9yIGdyZWF0ZXIgdGhhbiA5ayBtdHUKIAkgKiBUbyB0YWtlIGVmZmVjdCBDVFJMLlJTVCBpcyByZXF1aXJlZC4KQEAgLTY4Nyw3ICs2ODMsNyBAQAogCWNhc2UgZTEwMDBfODI1NDA6CiAJY2FzZSBlMTAwMF84MjU0MToKIAljYXNlIGUxMDAwXzgyNTQxX3Jldl8yOgotCQlsZWdhY3lfcGJhX2FkanVzdCA9IFRSVUU7CisJCWxlZ2FjeV9wYmFfYWRqdXN0ID0gdHJ1ZTsKIAkJcGJhID0gRTEwMDBfUEJBXzQ4SzsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU0NToKQEAgLTY5OCw3ICs2OTQsNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTQ3OgogCWNhc2UgZTEwMDBfODI1NDdfcmV2XzI6Ci0JCWxlZ2FjeV9wYmFfYWRqdXN0ID0gVFJVRTsKKwkJbGVnYWN5X3BiYV9hZGp1c3QgPSB0cnVlOwogCQlwYmEgPSBFMTAwMF9QQkFfMzBLOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTcxOgpAQCAtNzE2LDcgKzcxMiw3IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChsZWdhY3lfcGJhX2FkanVzdCA9PSBUUlVFKSB7CisJaWYgKGxlZ2FjeV9wYmFfYWRqdXN0KSB7CiAJCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEUxMDAwX1JYQlVGRkVSXzgxOTIpCiAJCQlwYmEgLT0gODsgLyogYWxsb2NhdGUgbW9yZSBGSUZPIGZvciBUeCAqLwogCkBAIC04MTksNyArODE1LDcgQEAKIAkgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIgJiYKIAkgICAgYWRhcHRlci0+aHcuYXV0b25lZyA9PSAxICYmCiAJICAgIGFkYXB0ZXItPmh3LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7Ci0JCXVpbnQzMl90IGN0cmwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIENUUkwpOworCQl1MzIgY3RybCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTCk7CiAJCS8qIGNsZWFyIHBoeSBwb3dlciBtYW5hZ2VtZW50IGJpdCBpZiB3ZSBhcmUgaW4gZ2lnIG9ubHkgbW9kZSwKIAkJICogd2hpY2ggaWYgZW5hYmxlZCB3aWxsIGF0dGVtcHQgbmVnb3RpYXRpb24gdG8gMTAwTWIsIHdoaWNoCiAJCSAqIGNhbiBjYXVzZSBhIGxvc3Mgb2YgbGluayBhdCBwb3dlciBvZmYgb3IgZHJpdmVyIHVubG9hZCAqLwpAQCAtODM2LDcgKzgzMiw3IEBACiAJaWYgKCFhZGFwdGVyLT5zbWFydF9wb3dlcl9kb3duICYmCiAJICAgIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSB8fAogCSAgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzIpKSB7Ci0JCXVpbnQxNl90IHBoeV9kYXRhID0gMDsKKwkJdTE2IHBoeV9kYXRhID0gMDsKIAkJLyogc3BlZWQgdXAgdGltZSB0byBsaW5rIGJ5IGRpc2FibGluZyBzbWFydCBwb3dlciBkb3duLCBpZ25vcmUKIAkJICogdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgdGhlcmUgaXMgbm90aGluZwogCQkgKiBkaWZmZXJlbnQgd2Ugd291bGQgZG8gaWYgaXQgZmFpbGVkICovCkBAIC05MzAsOCArOTI2LDggQEAKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kID0gMDsKIAlzdGF0aWMgaW50IGdsb2JhbF9xdWFkX3BvcnRfYSA9IDA7IC8qIGdsb2JhbCBrc3AzIHBvcnQgYSBpbmRpY2F0aW9uICovCiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKLQl1aW50MTZfdCBlZXByb21fZGF0YSA9IDA7Ci0JdWludDE2X3QgZWVwcm9tX2FwbWVfbWFzayA9IEUxMDAwX0VFUFJPTV9BUE1FOworCXUxNiBlZXByb21fZGF0YSA9IDA7CisJdTE2IGVlcHJvbV9hcG1lX21hc2sgPSBFMTAwMF9FRVBST01fQVBNRTsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKQpAQCAtMTE5NSw2ICsxMTkxLDE0IEBACiAKIAlwcmludGsoIiVzXG4iLCBwcmludF9tYWMobWFjLCBuZXRkZXYtPmRldl9hZGRyKSk7CiAKKwlpZiAoYWRhcHRlci0+aHcuYnVzX3R5cGUgPT0gZTEwMDBfYnVzX3R5cGVfcGNpX2V4cHJlc3MpIHsKKwkJRFBSSU5USyhQUk9CRSwgV0FSTklORywgIlRoaXMgZGV2aWNlIChpZCAlMDR4OiUwNHgpIHdpbGwgbm8gIgorCQkJImxvbmdlciBiZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgaW4gdGhlIGZ1dHVyZS5cbiIsCisJCQlwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CisJCURQUklOVEsoUFJPQkUsIFdBUk5JTkcsICJwbGVhc2UgdXNlIHRoZSBcImUxMDAwZVwiICIKKwkJCSJkcml2ZXIgaW5zdGVhZC5cbiIpOworCX0KKwogCS8qIHJlc2V0IHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MgKi8KIAllMTAwMF9yZXNldChhZGFwdGVyKTsKIApAQCAtMTM1OCwxNSArMTM2MiwxNSBAQAogCiAJZTEwMDBfc2V0X21lZGlhX3R5cGUoaHcpOwogCi0JaHctPndhaXRfYXV0b25lZ19jb21wbGV0ZSA9IEZBTFNFOwotCWh3LT50YmlfY29tcGF0aWJpbGl0eV9lbiA9IFRSVUU7Ci0JaHctPmFkYXB0aXZlX2lmcyA9IFRSVUU7CisJaHctPndhaXRfYXV0b25lZ19jb21wbGV0ZSA9IGZhbHNlOworCWh3LT50YmlfY29tcGF0aWJpbGl0eV9lbiA9IHRydWU7CisJaHctPmFkYXB0aXZlX2lmcyA9IHRydWU7CiAKIAkvKiBDb3BwZXIgb3B0aW9ucyAqLwogCiAJaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCWh3LT5tZGl4ID0gQVVUT19BTExfTU9ERVM7Ci0JCWh3LT5kaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPSBGQUxTRTsKKwkJaHctPmRpc2FibGVfcG9sYXJpdHlfY29ycmVjdGlvbiA9IGZhbHNlOwogCQlody0+bWFzdGVyX3NsYXZlID0gRTEwMDBfTUFTVEVSX1NMQVZFOwogCX0KIApAQCAtMTM4OCw3ICsxMzkyLDYgQEAKICNlbmRpZgogCiAJLyogRXhwbGljaXRseSBkaXNhYmxlIElSUSBzaW5jZSB0aGUgTklDIGNhbiBiZSBpbiBhbnkgc3RhdGUuICovCi0JYXRvbWljX3NldCgmYWRhcHRlci0+aXJxX3NlbSwgMCk7CiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c3RhdHNfbG9jayk7CkBAIC0xNTY4LDcgKzE1NzEsNyBAQAogICogQHN0YXJ0OiBhZGRyZXNzIG9mIGJlZ2lubmluZyBvZiBtZW1vcnkKICAqIEBsZW46IGxlbmd0aCBvZiBtZW1vcnkKICAqKi8KLXN0YXRpYyBib29sZWFuX3QKK3N0YXRpYyBib29sCiBlMTAwMF9jaGVja182NGtfYm91bmQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCSAgICAgIHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbikKIHsKQEAgLTE1NzksMTAgKzE1ODIsMTAgQEAKIAkgKiB3cml0ZSBsb2NhdGlvbiB0byBjcm9zcyA2NGsgYm91bmRhcnkgZHVlIHRvIGVycmF0YSAyMyAqLwogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NSB8fAogCSAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NikgewotCQlyZXR1cm4gKChiZWdpbiBeIChlbmQgLSAxKSkgPj4gMTYpICE9IDAgPyBGQUxTRSA6IFRSVUU7CisJCXJldHVybiAoKGJlZ2luIF4gKGVuZCAtIDEpKSA+PiAxNikgIT0gMCA/IGZhbHNlIDogdHJ1ZTsKIAl9CiAKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCkBAIC0xNjk5LDEwICsxNzAyLDEwIEBACiBzdGF0aWMgdm9pZAogZTEwMDBfY29uZmlndXJlX3R4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewotCXVpbnQ2NF90IHRkYmE7CisJdTY0IHRkYmE7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MzJfdCB0ZGxlbiwgdGN0bCwgdGlwZywgdGFyYzsKLQl1aW50MzJfdCBpcGdyMSwgaXBncjI7CisJdTMyIHRkbGVuLCB0Y3RsLCB0aXBnLCB0YXJjOworCXUzMiBpcGdyMSwgaXBncjI7CiAKIAkvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovCiAKQEAgLTE5NDQsMTAgKzE5NDcsMTAgQEAKIHN0YXRpYyB2b2lkCiBlMTAwMF9zZXR1cF9yY3RsKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewotCXVpbnQzMl90IHJjdGwsIHJmY3RsOwotCXVpbnQzMl90IHBzcmN0bCA9IDA7CisJdTMyIHJjdGwsIHJmY3RsOworCXUzMiBwc3JjdGwgPSAwOwogI2lmbmRlZiBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQKLQl1aW50MzJfdCBwYWdlcyA9IDA7CisJdTMyIHBhZ2VzID0gMDsKICNlbmRpZgogCiAJcmN0bCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkNUTCk7CkBAIC0yMDYyLDkgKzIwNjUsOSBAQAogc3RhdGljIHZvaWQKIGUxMDAwX2NvbmZpZ3VyZV9yeChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50NjRfdCByZGJhOworCXU2NCByZGJhOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdWludDMyX3QgcmRsZW4sIHJjdGwsIHJ4Y3N1bSwgY3RybF9leHQ7CisJdTMyIHJkbGVuLCByY3RsLCByeGNzdW0sIGN0cmxfZXh0OwogCiAJaWYgKGFkYXB0ZXItPnJ4X3BzX3BhZ2VzKSB7CiAJCS8qIHRoaXMgaXMgYSAzMiBieXRlIGRlc2NyaXB0b3IgKi8KQEAgLTIxMjUsNyArMjEyOCw3IEBACiAJLyogRW5hYmxlIDgyNTQzIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KIAlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSB7CiAJCXJ4Y3N1bSA9IEUxMDAwX1JFQURfUkVHKGh3LCBSWENTVU0pOwotCQlpZiAoYWRhcHRlci0+cnhfY3N1bSA9PSBUUlVFKSB7CisJCWlmIChhZGFwdGVyLT5yeF9jc3VtKSB7CiAJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1RVT0ZMOwogCiAJCQkvKiBFbmFibGUgODI1NzEgSVB2NCBwYXlsb2FkIGNoZWNrc3VtIGZvciBVRFAgZnJhZ21lbnRzCkBAIC0yMzg0LDcgKzIzODcsNyBAQAogZTEwMDBfZW50ZXJfODI1NDJfcnN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdWludDMyX3QgcmN0bDsKKwl1MzIgcmN0bDsKIAogCWUxMDAwX3BjaV9jbGVhcl9td2koJmFkYXB0ZXItPmh3KTsKIApAQCAtMjQwMiw3ICsyNDA1LDcgQEAKIGUxMDAwX2xlYXZlXzgyNTQyX3JzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXVpbnQzMl90IHJjdGw7CisJdTMyIHJjdGw7CiAKIAlyY3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMKTsKIAlyY3RsICY9IH5FMTAwMF9SQ1RMX1JTVDsKQEAgLTI0ODcsOCArMjQ5MCw4IEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqdWNfcHRyOwogCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19wdHI7Ci0JdWludDMyX3QgcmN0bDsKLQl1aW50MzJfdCBoYXNoX3ZhbHVlOworCXUzMiByY3RsOworCXUzMiBoYXNoX3ZhbHVlOwogCWludCBpLCByYXJfZW50cmllcyA9IEUxMDAwX1JBUl9FTlRSSUVTOwogCWludCBtdGFfcmVnX2NvdW50ID0gKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSA/CiAJCQkJRTEwMDBfTlVNX01UQV9SRUdJU1RFUlNfSUNIOExBTiA6CkBAIC0yNTkyLDcgKzI1OTUsNyBAQAogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBlMTAwMF9hZGFwdGVyICopIGRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQl1aW50MzJfdCB0Y3RsOworCXUzMiB0Y3RsOwogCiAJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT50eF9maWZvX3N0YWxsKSkgewogCQlpZiAoKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgVERUKSA9PQpAQCAtMjYzNCw4ICsyNjM3LDggQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKSBkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4ZHIgPSBhZGFwdGVyLT50eF9yaW5nOwotCXVpbnQzMl90IGxpbmssIHRjdGw7Ci0JaW50MzJfdCByZXRfdmFsOworCXUzMiBsaW5rLCB0Y3RsOworCXMzMiByZXRfdmFsOwogCiAJcmV0X3ZhbCA9IGUxMDAwX2NoZWNrX2Zvcl9saW5rKCZhZGFwdGVyLT5odyk7CiAJaWYgKChyZXRfdmFsID09IEUxMDAwX0VSUl9QSFkpICYmCkBAIC0yNjYwLDggKzI2NjMsOCBAQAogCiAJaWYgKGxpbmspIHsKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJCXVpbnQzMl90IGN0cmw7Ci0JCQlib29sZWFuX3QgdHhiMmIgPSAxOworCQkJdTMyIGN0cmw7CisJCQlib29sIHR4YjJiID0gdHJ1ZTsKIAkJCWUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4KCZhZGFwdGVyLT5odywKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGFwdGVyLT5saW5rX3NwZWVkLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfZHVwbGV4KTsKQEAgLTI2ODMsMTIgKzI2ODYsMTIgQEAKIAkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTsKIAkJCXN3aXRjaCAoYWRhcHRlci0+bGlua19zcGVlZCkgewogCQkJY2FzZSBTUEVFRF8xMDoKLQkJCQl0eGIyYiA9IDA7CisJCQkJdHhiMmIgPSBmYWxzZTsKIAkJCQluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwOwogCQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gODsKIAkJCQlicmVhazsKIAkJCWNhc2UgU1BFRURfMTAwOgotCQkJCXR4YjJiID0gMDsKKwkJCQl0eGIyYiA9IGZhbHNlOwogCQkJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gMTAwOwogCQkJCS8qIG1heWJlIGFkZCBzb21lIHRpbWVvdXQgZmFjdG9yID8gKi8KIAkJCQlicmVhazsKQEAgLTI2OTYsOCArMjY5OSw4IEBACiAKIAkJCWlmICgoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzEgfHwKIAkJCSAgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzIpICYmCi0JCQkgICAgdHhiMmIgPT0gMCkgewotCQkJCXVpbnQzMl90IHRhcmMwOworCQkJICAgICF0eGIyYikgeworCQkJCXUzMiB0YXJjMDsKIAkJCQl0YXJjMCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgVEFSQzApOwogCQkJCXRhcmMwICY9IH4oMSA8PCAyMSk7CiAJCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVEFSQzAsIHRhcmMwKTsKQEAgLTI3MzksNyArMjc0Miw3IEBACiAJCQkvKiBtYWtlIHN1cmUgdGhlIHJlY2VpdmUgdW5pdCBpcyBzdGFydGVkICovCiAJCQlpZiAoYWRhcHRlci0+aHcucnhfbmVlZHNfa2lja2luZykgewogCQkJCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JCQkJdWludDMyX3QgcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKwkJCQl1MzIgcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKIAkJCQlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwgfCBFMTAwMF9SQ1RMX0VOKTsKIAkJCX0KIAkJfQpAQCAtMjc5NCw3ICsyNzk3LDcgQEAKIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJQ1MsIEUxMDAwX0lDU19SWERNVDApOwogCiAJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciBldmVyeSB3YXRjaGRvZyBwZXJpb2QgKi8KLQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IFRSVUU7CisJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOwogCiAJLyogV2l0aCA4MjU3MSBjb250cm9sbGVycywgTEFBIG1heSBiZSBvdmVyd3JpdHRlbiBkdWUgdG8gY29udHJvbGxlcgogCSAqIHJlc2V0IGZyb20gdGhlIG90aGVyIHBvcnQuIFNldCB0aGUgYXBwcm9wcmlhdGUgTEFBIGluIFJBUlswXSAqLwpAQCAtMjgyOSw3ICsyODMyLDcgQEAKICAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyBkdXJpbmcgdGhpcyBtZWFzdXJlbWVudCBpbnRlcnZhbAogICoqLwogc3RhdGljIHVuc2lnbmVkIGludCBlMTAwMF91cGRhdGVfaXRyKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBpdHJfc2V0dGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGl0cl9zZXR0aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFja2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzKQogewpAQCAtMjg4MSw4ICsyODg0LDggQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3NldF9pdHIoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MTZfdCBjdXJyZW50X2l0cjsKLQl1aW50MzJfdCBuZXdfaXRyID0gYWRhcHRlci0+aXRyOworCXUxNiBjdXJyZW50X2l0cjsKKwl1MzIgbmV3X2l0ciA9IGFkYXB0ZXItPml0cjsKIAogCWlmICh1bmxpa2VseShody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MCkpCiAJCXJldHVybjsKQEAgLTI5NTYsOSArMjk1OSw5IEBACiAJc3RydWN0IGUxMDAwX2NvbnRleHRfZGVzYyAqY29udGV4dF9kZXNjOwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpOwotCXVpbnQzMl90IGNtZF9sZW5ndGggPSAwOwotCXVpbnQxNl90IGlwY3NlID0gMCwgdHVjc2UsIG1zczsKLQl1aW50OF90IGlwY3NzLCBpcGNzbywgdHVjc3MsIHR1Y3NvLCBoZHJfbGVuOworCXUzMiBjbWRfbGVuZ3RoID0gMDsKKwl1MTYgaXBjc2UgPSAwLCB0dWNzZSwgbXNzOworCXU4IGlwY3NzLCBpcGNzbywgdHVjc3MsIHR1Y3NvLCBoZHJfbGVuOwogCWludCBlcnI7CiAKIAlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CkBAIC0zMDE3LDE5ICszMDIwLDE5IEBACiAJCWlmICgrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOwogCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CiAKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCX0KLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbGVhbl90CitzdGF0aWMgYm9vbAogZTEwMDBfdHhfY3N1bShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcsCiAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGUxMDAwX2NvbnRleHRfZGVzYyAqY29udGV4dF9kZXNjOwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpOwotCXVpbnQ4X3QgY3NzOworCXU4IGNzczsKIAogCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKIAkJY3NzID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKQEAgLTMwNTIsMTAgKzMwNTUsMTAgQEAKIAkJaWYgKHVubGlrZWx5KCsraSA9PSB0eF9yaW5nLT5jb3VudCkpIGkgPSAwOwogCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CiAKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCX0KIAotCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKICNkZWZpbmUgRTEwMDBfTUFYX1RYRF9QV1IJMTIKQEAgLTMxNzQsNyArMzE3Nyw3IEBACiB7CiAJc3RydWN0IGUxMDAwX3R4X2Rlc2MgKnR4X2Rlc2MgPSBOVUxMOwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCXVpbnQzMl90IHR4ZF91cHBlciA9IDAsIHR4ZF9sb3dlciA9IEUxMDAwX1RYRF9DTURfSUZDUzsKKwl1MzIgdHhkX3VwcGVyID0gMCwgdHhkX2xvd2VyID0gRTEwMDBfVFhEX0NNRF9JRkNTOwogCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKGxpa2VseSh0eF9mbGFncyAmIEUxMDAwX1RYX0ZMQUdTX1RTTykpIHsKQEAgLTMyMzgsOCArMzI0MSw4IEBACiBzdGF0aWMgaW50CiBlMTAwMF84MjU0N19maWZvX3dvcmthcm91bmQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdWludDMyX3QgZmlmb19zcGFjZSA9IGFkYXB0ZXItPnR4X2ZpZm9fc2l6ZSAtIGFkYXB0ZXItPnR4X2ZpZm9faGVhZDsKLQl1aW50MzJfdCBza2JfZmlmb19sZW4gPSBza2ItPmxlbiArIEUxMDAwX0ZJRk9fSERSOworCXUzMiBmaWZvX3NwYWNlID0gYWRhcHRlci0+dHhfZmlmb19zaXplIC0gYWRhcHRlci0+dHhfZmlmb19oZWFkOworCXUzMiBza2JfZmlmb19sZW4gPSBza2ItPmxlbiArIEUxMDAwX0ZJRk9fSERSOwogCiAJc2tiX2ZpZm9fbGVuID0gQUxJR04oc2tiX2ZpZm9fbGVuLCBFMTAwMF9GSUZPX0hEUik7CiAKQEAgLTMyNjYsNyArMzI2OSw3IEBACiBlMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICAmYWRhcHRlci0+aHc7Ci0JdWludDE2X3QgbGVuZ3RoLCBvZmZzZXQ7CisJdTE2IGxlbmd0aCwgb2Zmc2V0OwogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJaWYgKCEoKHZsYW5fdHhfdGFnX2dldChza2IpID09IGFkYXB0ZXItPmh3Lm1uZ19jb29raWUudmxhbl9pZCkgJiYKIAkJCSggYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgpAQCAtMzI3NywxNyArMzI4MCwxNyBAQAogCQlzdHJ1Y3QgZXRoaGRyICpldGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItPmRhdGE7CiAJCWlmICgoaHRvbnMoRVRIX1BfSVApID09IGV0aC0+aF9wcm90bykpIHsKIAkJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXAgPQotCQkJCShzdHJ1Y3QgaXBoZHIgKikoKHVpbnQ4X3QgKilza2ItPmRhdGErMTQpOworCQkJCShzdHJ1Y3QgaXBoZHIgKikoKHU4ICopc2tiLT5kYXRhKzE0KTsKIAkJCWlmIChJUFBST1RPX1VEUCA9PSBpcC0+cHJvdG9jb2wpIHsKIAkJCQlzdHJ1Y3QgdWRwaGRyICp1ZHAgPQotCQkJCQkoc3RydWN0IHVkcGhkciAqKSgodWludDhfdCAqKWlwICsKKwkJCQkJKHN0cnVjdCB1ZHBoZHIgKikoKHU4ICopaXAgKwogCQkJCQkJKGlwLT5paGwgPDwgMikpOwogCQkJCWlmIChudG9ocyh1ZHAtPmRlc3QpID09IDY3KSB7Ci0JCQkJCW9mZnNldCA9ICh1aW50OF90ICopdWRwICsgOCAtIHNrYi0+ZGF0YTsKKwkJCQkJb2Zmc2V0ID0gKHU4ICopdWRwICsgOCAtIHNrYi0+ZGF0YTsKIAkJCQkJbGVuZ3RoID0gc2tiLT5sZW4gLSBvZmZzZXQ7CiAKIAkJCQkJcmV0dXJuIGUxMDAwX21uZ193cml0ZV9kaGNwX2luZm8oaHcsCi0JCQkJCQkJKHVpbnQ4X3QgKil1ZHAgKyA4LAorCQkJCQkJCSh1OCAqKXVkcCArIDgsCiAJCQkJCQkJbGVuZ3RoKTsKIAkJCQl9CiAJCQl9CkBAIC0zMzY3LDcgKzMzNzAsNyBAQAogCSAqIG92ZXJydW4gdGhlIEZJRk8sIGFkanVzdCB0aGUgbWF4IGJ1ZmZlciBsZW4gaWYgbXNzCiAJICogZHJvcHMuICovCiAJaWYgKG1zcykgewotCQl1aW50OF90IGhkcl9sZW47CisJCXU4IGhkcl9sZW47CiAJCW1heF9wZXJfdHhkID0gbWluKG1zcyA8PCAyLCBtYXhfcGVyX3R4ZCk7CiAJCW1heF90eGRfcHdyID0gZmxzKG1heF9wZXJfdHhkKSAtIDE7CiAKQEAgLTM1NTQsNyArMzU1Nyw3IEBACiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBtYXhfZnJhbWUgPSBuZXdfbXR1ICsgRU5FVF9IRUFERVJfU0laRSArIEVUSEVSTkVUX0ZDU19TSVpFOwotCXVpbnQxNl90IGVlcHJvbV9kYXRhID0gMDsKKwl1MTYgZWVwcm9tX2RhdGEgPSAwOwogCiAJaWYgKChtYXhfZnJhbWUgPCBNSU5JTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHx8CiAJICAgIChtYXhfZnJhbWUgPiBNQVhfSlVNQk9fRlJBTUVfU0laRSkpIHsKQEAgLTM2NDksNyArMzY1Miw3IEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1aW50MTZfdCBwaHlfdG1wOworCXUxNiBwaHlfdG1wOwogCiAjZGVmaW5lIFBIWV9JRExFX0VSUk9SX0NPVU5UX01BU0sgMHgwMEZGCiAKQEAgLTM4MjYsMTMgKzM4MjksMTAgQEAKICNpZm5kZWYgQ09ORklHX0UxMDAwX05BUEkKIAlpbnQgaTsKICNlbmRpZgotCXVpbnQzMl90IGljciA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1IpOworCXUzMiBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKIAotI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCi0JLyogcmVhZCBJQ1IgZGlzYWJsZXMgaW50ZXJydXB0cyB1c2luZyBJQU0sIHNvIGtlZXAgdXAgd2l0aCBvdXIKLQkgKiBlbmFibGUvZGlzYWJsZSBhY2NvdW50aW5nICovCi0JYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7Ci0jZW5kaWYKKwkvKiBpbiBOQVBJIG1vZGUgcmVhZCBJQ1IgZGlzYWJsZXMgaW50ZXJydXB0cyB1c2luZyBJQU0gKi8KKwogCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpIHsKIAkJaHctPmdldF9saW5rX3N0YXR1cyA9IDE7CiAJCS8qIDgwMDAzRVMyTEFOIHdvcmthcm91bmQtLSBGb3IgcGFja2V0IGJ1ZmZlciB3b3JrLWFyb3VuZCBvbgpAQCAtMzg0MSw3ICszODQxLDcgQEAKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgogCQkgICAgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSkgewogCQkJLyogZGlzYWJsZSByZWNlaXZlcyAqLwotCQkJdWludDMyX3QgcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKwkJCXUzMiByY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOwogCQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsICYgfkUxMDAwX1JDVExfRU4pOwogCQl9CiAJCS8qIGd1YXJkIGFnYWluc3QgaW50ZXJydXB0IHdoZW4gd2UncmUgZ29pbmcgZG93biAqLwpAQCAtMzg4OCw3ICszODg4LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MzJfdCByY3RsLCBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKKwl1MzIgcmN0bCwgaWNyID0gRTEwMDBfUkVBRF9SRUcoaHcsIElDUik7CiAjaWZuZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJaW50IGk7CiAjZW5kaWYKQEAgLTM5MDIsMTIgKzM5MDIsOCBAQAogCSAgICAgICAgICAgICAhKGljciAmIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQpKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JLyogSW50ZXJydXB0IEF1dG8tTWFzay4uLnVwb24gcmVhZGluZyBJQ1IsCi0JICogaW50ZXJydXB0cyBhcmUgbWFza2VkLiAgTm8gbmVlZCBmb3IgdGhlCi0JICogSU1DIHdyaXRlLCBidXQgaXQgZG9lcyBtZWFuIHdlIHNob3VsZAotCSAqIGFjY291bnQgZm9yIGl0IEFTQVAuICovCi0JaWYgKGxpa2VseShody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpKQotCQlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKKwkvKiBJbnRlcnJ1cHQgQXV0by1NYXNrLi4udXBvbiByZWFkaW5nIElDUiwgaW50ZXJydXB0cyBhcmUgbWFza2VkLiAgTm8KKwkgKiBuZWVkIGZvciB0aGUgSU1DIHdyaXRlICovCiAjZW5kaWYKIAogCWlmICh1bmxpa2VseShpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpKSB7CkBAIC0zOTMxLDcgKzM5MjcsNiBAQAogI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxKSkgewogCQkvKiBkaXNhYmxlIGludGVycnVwdHMsIHdpdGhvdXQgdGhlIHN5bmNocm9uaXplX2lycSBiaXQgKi8KLQkJYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7CiAJCUUxMDAwX1dSSVRFX1JFRyhodywgSU1DLCB+MCk7CiAJCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKIAl9CkBAIC0zOTU2LDEwICszOTUxLDggQEAKIAkgKiBpbiBkZWFkIGxvY2suIFdyaXRpbmcgSU1DIGZvcmNlcyA4MjU0NyBpbnRvCiAJICogZGUtYXNzZXJ0aW9uIHN0YXRlLgogCSAqLwotCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKSB7Ci0JCWF0b21pY19pbmMoJmFkYXB0ZXItPmlycV9zZW0pOworCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKQogCQlFMTAwMF9XUklURV9SRUcoaHcsIElNQywgfjApOwotCX0KIAogCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKIAlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CkBAIC00MDMwLDcgKzQwMjMsNyBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCiAKLXN0YXRpYyBib29sZWFuX3QKK3N0YXRpYyBib29sCiBlMTAwMF9jbGVhbl90eF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcpCiB7CkBAIC00MDQxLDcgKzQwMzQsNyBAQAogI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKICNlbmRpZgotCWJvb2xlYW5fdCBjbGVhbmVkID0gRkFMU0U7CisJYm9vbCBjbGVhbmVkID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzPTAsIHRvdGFsX3R4X3BhY2tldHM9MDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwpAQCAtNDA0OSw3ICs0MDQyLDcgQEAKIAllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGVvcCk7CiAKIAl3aGlsZSAoZW9wX2Rlc2MtPnVwcGVyLmRhdGEgJiBjcHVfdG9fbGUzMihFMTAwMF9UWERfU1RBVF9ERCkpIHsKLQkJZm9yIChjbGVhbmVkID0gRkFMU0U7ICFjbGVhbmVkOyApIHsKKwkJZm9yIChjbGVhbmVkID0gZmFsc2U7ICFjbGVhbmVkOyApIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CkBAIC00MDk3LDcgKzQwOTAsNyBAQAogCWlmIChhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgewogCQkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KLQkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBGQUxTRTsKKwkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKIAkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCiAJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArCiAJCSAgICAgICAgICAgICAgIChhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciAqIEhaKSkKQEAgLTQxNDYsMTEgKzQxMzksMTEgQEAKIAogc3RhdGljIHZvaWQKIGUxMDAwX3J4X2NoZWNrc3VtKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotCQkgIHVpbnQzMl90IHN0YXR1c19lcnIsIHVpbnQzMl90IGNzdW0sCisJCSAgdTMyIHN0YXR1c19lcnIsIHUzMiBjc3VtLAogCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdWludDE2X3Qgc3RhdHVzID0gKHVpbnQxNl90KXN0YXR1c19lcnI7Ci0JdWludDhfdCBlcnJvcnMgPSAodWludDhfdCkoc3RhdHVzX2VyciA+PiAyNCk7CisJdTE2IHN0YXR1cyA9ICh1MTYpc3RhdHVzX2VycjsKKwl1OCBlcnJvcnMgPSAodTgpKHN0YXR1c19lcnIgPj4gMjQpOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCS8qIDgyNTQzIG9yIG5ld2VyIG9ubHkgKi8KQEAgLTQxOTIsNyArNDE4NSw3IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KIAotc3RhdGljIGJvb2xlYW5fdAorc3RhdGljIGJvb2wKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLApAQCAtNDIwNywxMSArNDIwMCwxMSBAQAogCXN0cnVjdCBlMTAwMF9yeF9kZXNjICpyeF9kZXNjLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50OF90IGxhc3RfYnl0ZTsKKwl1MzIgbGVuZ3RoOworCXU4IGxhc3RfYnl0ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7Ci0JYm9vbGVhbl90IGNsZWFuZWQgPSBGQUxTRTsKKwlib29sIGNsZWFuZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgdG90YWxfcnhfYnl0ZXM9MCwgdG90YWxfcnhfcGFja2V0cz0wOwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fY2xlYW47CkBAIC00MjM5LDcgKzQyMzIsNyBAQAogCiAJCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCi0JCWNsZWFuZWQgPSBUUlVFOworCQljbGVhbmVkID0gdHJ1ZTsKIAkJY2xlYW5lZF9jb3VudCsrOwogCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsCiAJCSAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPmRtYSwKQEAgLTQzMDgsOCArNDMwMSw4IEBACiAKIAkJLyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovCiAJCWUxMDAwX3J4X2NoZWNrc3VtKGFkYXB0ZXIsCi0JCQkJICAodWludDMyX3QpKHN0YXR1cykgfAotCQkJCSAgKCh1aW50MzJfdCkocnhfZGVzYy0+ZXJyb3JzKSA8PCAyNCksCisJCQkJICAodTMyKShzdGF0dXMpIHwKKwkJCQkgICgodTMyKShyeF9kZXNjLT5lcnJvcnMpIDw8IDI0KSwKIAkJCQkgIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPmNzdW0pLCBza2IpOwogCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CkBAIC00MzY1LDcgKzQzNTgsNyBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCiAKLXN0YXRpYyBib29sZWFuX3QKK3N0YXRpYyBib29sCiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIGUxMDAwX2NsZWFuX3J4X2lycV9wcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKQEAgLTQzODMsOSArNDM3Niw5IEBACiAJc3RydWN0IGUxMDAwX3BzX3BhZ2VfZG1hICpwc19wYWdlX2RtYTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBpLCBqOwotCXVpbnQzMl90IGxlbmd0aCwgc3RhdGVycjsKKwl1MzIgbGVuZ3RoLCBzdGF0ZXJyOwogCWludCBjbGVhbmVkX2NvdW50ID0gMDsKLQlib29sZWFuX3QgY2xlYW5lZCA9IEZBTFNFOworCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlcz0wLCB0b3RhbF9yeF9wYWNrZXRzPTA7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKQEAgLTQ0MTIsNyArNDQwNSw3IEBACiAKIAkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CiAKLQkJY2xlYW5lZCA9IFRSVUU7CisJCWNsZWFuZWQgPSB0cnVlOwogCQljbGVhbmVkX2NvdW50Kys7CiAJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKIAkJCQkgYnVmZmVyX2luZm8tPmxlbmd0aCwKQEAgLTQ3NjYsOCArNDc1OSw4IEBACiBzdGF0aWMgdm9pZAogZTEwMDBfc21hcnRzcGVlZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MTZfdCBwaHlfc3RhdHVzOwotCXVpbnQxNl90IHBoeV9jdHJsOworCXUxNiBwaHlfc3RhdHVzOworCXUxNiBwaHlfY3RybDsKIAogCWlmICgoYWRhcHRlci0+aHcucGh5X3R5cGUgIT0gZTEwMDBfcGh5X2lncCkgfHwgIWFkYXB0ZXItPmh3LmF1dG9uZWcgfHwKIAkgICAhKGFkYXB0ZXItPmh3LmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDAwX0ZVTEwpKQpAQCAtNDg0Niw4ICs0ODM5LDggQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlmcik7CiAJaW50IHJldHZhbDsKLQl1aW50MTZfdCBtaWlfcmVnOwotCXVpbnQxNl90IHNwZGRwbHg7CisJdTE2IG1paV9yZWc7CisJdTE2IHNwZGRwbHg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQpAQCAtNDk2NiwxMSArNDk1OSwxMSBAQAogCXBjaXhfc2V0X21tcmJjKGFkYXB0ZXItPnBkZXYsIG1tcmJjKTsKIH0KIAotaW50MzJfdAotZTEwMDBfcmVhZF9wY2llX2NhcF9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgcmVnLCB1aW50MTZfdCAqdmFsdWUpCitzMzIKK2UxMDAwX3JlYWRfcGNpZV9jYXBfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWcsIHUxNiAqdmFsdWUpCiB7CiAgICAgc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKLSAgICB1aW50MTZfdCBjYXBfb2Zmc2V0OworICAgIHUxNiBjYXBfb2Zmc2V0OwogCiAgICAgY2FwX29mZnNldCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYWRhcHRlci0+cGRldiwgUENJX0NBUF9JRF9FWFApOwogICAgIGlmICghY2FwX29mZnNldCkKQEAgLTQ5ODIsNyArNDk3NSw3IEBACiB9CiAKIHZvaWQKLWUxMDAwX2lvX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVuc2lnbmVkIGxvbmcgcG9ydCwgdWludDMyX3QgdmFsdWUpCitlMTAwMF9pb193cml0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBvcnQsIHUzMiB2YWx1ZSkKIHsKIAlvdXRsKHZhbHVlLCBwb3J0KTsKIH0KQEAgLTQ5OTEsOSArNDk4NCwxMCBAQAogZTEwMDBfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1aW50MzJfdCBjdHJsLCByY3RsOworCXUzMiBjdHJsLCByY3RsOwogCi0JZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncykpCisJCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOwogCiAJaWYgKGdycCkgewpAQCAtNTAyMiw3ICs1MDE2LDcgQEAKIAkJCXJjdGwgJj0gfkUxMDAwX1JDVExfVkZFOwogCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CiAJCQlpZiAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0KLQkJCSAgICAodWludDE2X3QpRTEwMDBfTU5HX1ZMQU5fTk9ORSkgeworCQkJICAgICh1MTYpRTEwMDBfTU5HX1ZMQU5fTk9ORSkgewogCQkJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LAogCQkJCSAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bW5nX3ZsYW5faWQpOwogCQkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gRTEwMDBfTU5HX1ZMQU5fTk9ORTsKQEAgLTUwMzAsMTQgKzUwMjQsMTUgQEAKIAkJfQogCX0KIAotCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncykpCisJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyB2b2lkCi1lMTAwMF92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKQorZTEwMDBfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXVpbnQzMl90IHZmdGEsIGluZGV4OworCXUzMiB2ZnRhLCBpbmRleDsKIAogCWlmICgoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgogCSAgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOX1NVUFBPUlQpICYmCkBAIC01MDUxLDE0ICs1MDQ2LDE2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1lMTAwMF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCkKK2UxMDAwX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdWludDMyX3QgdmZ0YSwgaW5kZXg7CisJdTMyIHZmdGEsIGluZGV4OwogCi0JZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5mbGFncykpCisJCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkLCBOVUxMKTsKLQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCiAJaWYgKChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCiAJICAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU5fU1VQUE9SVCkgJiYKQEAgLTUwODEsNyArNTA3OCw3IEBACiAJZTEwMDBfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsKIAogCWlmIChhZGFwdGVyLT52bGdycCkgewotCQl1aW50MTZfdCB2aWQ7CisJCXUxNiB2aWQ7CiAJCWZvciAodmlkID0gMDsgdmlkIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IHZpZCsrKSB7CiAJCQlpZiAoIXZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkKSkKIAkJCQljb250aW51ZTsKQEAgLTUwOTEsNyArNTA4OCw3IEBACiB9CiAKIGludAotZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50MTZfdCBzcGRkcGx4KQorZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BkZHBseCkKIHsKIAlhZGFwdGVyLT5ody5hdXRvbmVnID0gMDsKIApAQCAtNTEzMiw4ICs1MTI5LDggQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1aW50MzJfdCBjdHJsLCBjdHJsX2V4dCwgcmN0bCwgc3RhdHVzOwotCXVpbnQzMl90IHd1ZmMgPSBhZGFwdGVyLT53b2w7CisJdTMyIGN0cmwsIGN0cmxfZXh0LCByY3RsLCBzdGF0dXM7CisJdTMyIHd1ZmMgPSBhZGFwdGVyLT53b2w7CiAjaWZkZWYgQ09ORklHX1BNCiAJaW50IHJldHZhbCA9IDA7CiAjZW5kaWYKQEAgLTUyMzAsNyArNTIyNyw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdWludDMyX3QgZXJyOworCXUzMiBlcnI7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAppbmRleCAxMGFmNzQyLi4zNjU2MjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKQEAgLTQxLDEzICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotdHlwZWRlZiBlbnVtIHsKLSN1bmRlZiBGQUxTRQotICAgIEZBTFNFID0gMCwKLSN1bmRlZiBUUlVFCi0gICAgVFJVRSA9IDEKLX0gYm9vbGVhbl90OwotCiAjaWZkZWYgREJHCiAjZGVmaW5lIERFQlVHT1VUKFMpCQlwcmludGsoS0VSTl9ERUJVRyBTICJcbiIpCiAjZGVmaW5lIERFQlVHT1VUMShTLCBBLi4uKQlwcmludGsoS0VSTl9ERUJVRyBTICJcbiIsIEEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCmluZGV4IDNiZWFjZTUuLjAxYzg4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTI5LDYgKzI5LDkgQEAKIC8qCiAgKiA4MjU3MUVCIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlcgogICogODI1NzFFQiBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIgKEZpYmVyKQorICogODI1NzFFQiBEdWFsIFBvcnQgR2lnYWJpdCBNZXp6YW5pbmUgQWRhcHRlcgorICogODI1NzFFQiBRdWFkIFBvcnQgR2lnYWJpdCBNZXp6YW5pbmUgQWRhcHRlcgorICogODI1NzFQVCBHaWdhYml0IFBUIFF1YWQgUG9ydCBTZXJ2ZXIgRXhwcmVzc01vZHVsZQogICogODI1NzJFSSBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIgKENvcHBlcikKICAqIDgyNTcyRUkgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIChGaWJlcikKICAqIDgyNTcyRUkgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyCkBAIC03Miw3ICs3NSw3IEBACiAJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKIAlzMzIgcmV0X3ZhbDsKIAotCWlmIChody0+bWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJcGh5LT50eXBlID0gZTEwMDBfcGh5X25vbmU7CiAJCXJldHVybiAwOwogCX0KQEAgLTE1MCw3ICsxNTMsOCBAQAogCQlpZiAoKChlZWNkID4+IDE1KSAmIDB4MykgPT0gMHgzKSB7CiAJCQludm0tPnR5cGUgPSBlMTAwMF9udm1fZmxhc2hfaHc7CiAJCQludm0tPndvcmRfc2l6ZSA9IDIwNDg7Ci0JCQkvKiBBdXRvbm9tb3VzIEZsYXNoIHVwZGF0ZSBiaXQgbXVzdCBiZSBjbGVhcmVkIGR1ZQorCQkJLyoKKwkJCSAqIEF1dG9ub21vdXMgRmxhc2ggdXBkYXRlIGJpdCBtdXN0IGJlIGNsZWFyZWQgZHVlCiAJCQkgKiB0byBGbGFzaCB1cGRhdGUgaXNzdWUuCiAJCQkgKi8KIAkJCWVlY2QgJj0gfkUxMDAwX0VFQ0RfQVVQREVOOwpAQCAtMTU5LDEzICsxNjMsMTggQEAKIAkJfQogCQkvKiBGYWxsIFRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQludm0tPnR5cGUJPSBlMTAwMF9udm1fZWVwcm9tX3NwaTsKKwkJbnZtLT50eXBlID0gZTEwMDBfbnZtX2VlcHJvbV9zcGk7CiAJCXNpemUgPSAodTE2KSgoZWVjZCAmIEUxMDAwX0VFQ0RfU0laRV9FWF9NQVNLKSA+PgogCQkJCSAgRTEwMDBfRUVDRF9TSVpFX0VYX1NISUZUKTsKLQkJLyogQWRkZWQgdG8gYSBjb25zdGFudCwgInNpemUiIGJlY29tZXMgdGhlIGxlZnQtc2hpZnQgdmFsdWUKKwkJLyoKKwkJICogQWRkZWQgdG8gYSBjb25zdGFudCwgInNpemUiIGJlY29tZXMgdGhlIGxlZnQtc2hpZnQgdmFsdWUKIAkJICogZm9yIHNldHRpbmcgd29yZF9zaXplLgogCQkgKi8KIAkJc2l6ZSArPSBOVk1fV09SRF9TSVpFX0JBU0VfU0hJRlQ7CisKKwkJLyogRUVQUk9NIGFjY2VzcyBhYm92ZSAxNmsgaXMgdW5zdXBwb3J0ZWQgKi8KKwkJaWYgKHNpemUgPiAxNCkKKwkJCXNpemUgPSAxNDsKIAkJbnZtLT53b3JkX3NpemUJPSAxIDw8IHNpemU7CiAJCWJyZWFrOwogCX0KQEAgLTE5MCwxNiArMTk5LDE2IEBACiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3MkVJX0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9GSUJFUjoKLQkJaHctPm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyOworCQlody0+cGh5Lm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyOwogCQlicmVhazsKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFUzoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3MkVJX1NFUkRFUzoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFU19EVUFMOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfU0VSREVTX1FVQUQ6Ci0JCWh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXM7CisJCWh3LT5waHkubWVkaWFfdHlwZSA9IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlody0+bWVkaWFfdHlwZSA9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyOworCQlody0+cGh5Lm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcjsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMDgsMjUgKzIxNywyOCBAQAogCS8qIFNldCByYXIgZW50cnkgY291bnQgKi8KIAltYWMtPnJhcl9lbnRyeV9jb3VudCA9IEUxMDAwX1JBUl9FTlRSSUVTOwogCS8qIFNldCBpZiBtYW5hZ2VhYmlsaXR5IGZlYXR1cmVzIGFyZSBlbmFibGVkLiAqLwotCW1hYy0+YXJjX3N1YnN5c3RlbV92YWxpZCA9Ci0JCShlcjMyKEZXU00pICYgRTEwMDBfRldTTV9NT0RFX01BU0spID8gMSA6IDA7CisJbWFjLT5hcmNfc3Vic3lzdGVtX3ZhbGlkID0gKGVyMzIoRldTTSkgJiBFMTAwMF9GV1NNX01PREVfTUFTSykgPyAxIDogMDsKIAogCS8qIGNoZWNrIGZvciBsaW5rICovCi0Jc3dpdGNoIChody0+bWVkaWFfdHlwZSkgeworCXN3aXRjaCAoaHctPnBoeS5tZWRpYV90eXBlKSB7CiAJY2FzZSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcjoKIAkJZnVuYy0+c2V0dXBfcGh5c2ljYWxfaW50ZXJmYWNlID0gZTEwMDBfc2V0dXBfY29wcGVyX2xpbmtfODI1NzE7CiAJCWZ1bmMtPmNoZWNrX2Zvcl9saW5rID0gZTEwMDBlX2NoZWNrX2Zvcl9jb3BwZXJfbGluazsKIAkJZnVuYy0+Z2V0X2xpbmtfdXBfaW5mbyA9IGUxMDAwZV9nZXRfc3BlZWRfYW5kX2R1cGxleF9jb3BwZXI7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9maWJlcjoKLQkJZnVuYy0+c2V0dXBfcGh5c2ljYWxfaW50ZXJmYWNlID0gZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzE7CisJCWZ1bmMtPnNldHVwX3BoeXNpY2FsX2ludGVyZmFjZSA9CisJCQllMTAwMF9zZXR1cF9maWJlcl9zZXJkZXNfbGlua184MjU3MTsKIAkJZnVuYy0+Y2hlY2tfZm9yX2xpbmsgPSBlMTAwMGVfY2hlY2tfZm9yX2ZpYmVyX2xpbms7Ci0JCWZ1bmMtPmdldF9saW5rX3VwX2luZm8gPSBlMTAwMGVfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfZmliZXJfc2VyZGVzOworCQlmdW5jLT5nZXRfbGlua191cF9pbmZvID0KKwkJCWUxMDAwZV9nZXRfc3BlZWRfYW5kX2R1cGxleF9maWJlcl9zZXJkZXM7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXM6Ci0JCWZ1bmMtPnNldHVwX3BoeXNpY2FsX2ludGVyZmFjZSA9IGUxMDAwX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rXzgyNTcxOworCQlmdW5jLT5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UgPQorCQkJZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzE7CiAJCWZ1bmMtPmNoZWNrX2Zvcl9saW5rID0gZTEwMDBlX2NoZWNrX2Zvcl9zZXJkZXNfbGluazsKLQkJZnVuYy0+Z2V0X2xpbmtfdXBfaW5mbyA9IGUxMDAwZV9nZXRfc3BlZWRfYW5kX2R1cGxleF9maWJlcl9zZXJkZXM7CisJCWZ1bmMtPmdldF9saW5rX3VwX2luZm8gPQorCQkJZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2ZpYmVyX3NlcmRlczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FMTAwMF9FUlJfQ09ORklHOwpAQCAtMjM2LDcgKzI0OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzMzIgZTEwMDBfZ2V0X2ludmFyaWFudHNfODI1NzEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgczMyIGUxMDAwX2dldF92YXJpYW50c184MjU3MShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0YXRpYyBpbnQgZ2xvYmFsX3F1YWRfcG9ydF9hOyAvKiBnbG9iYWwgcG9ydCBhIGluZGljYXRpb24gKi8KQEAgLTMyMiwxMCArMzM0LDEyIEBACiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTcxOgogCWNhc2UgZTEwMDBfODI1NzI6Ci0JCS8qIFRoZSA4MjU3MSBmaXJtd2FyZSBtYXkgc3RpbGwgYmUgY29uZmlndXJpbmcgdGhlIFBIWS4KKwkJLyoKKwkJICogVGhlIDgyNTcxIGZpcm13YXJlIG1heSBzdGlsbCBiZSBjb25maWd1cmluZyB0aGUgUEhZLgogCQkgKiBJbiB0aGlzIGNhc2UsIHdlIGNhbm5vdCBhY2Nlc3MgdGhlIFBIWSB1bnRpbCB0aGUKIAkJICogY29uZmlndXJhdGlvbiBpcyBkb25lLiAgU28gd2UgZXhwbGljaXRseSBzZXQgdGhlCi0JCSAqIFBIWSBJRC4gKi8KKwkJICogUEhZIElELgorCQkgKi8KIAkJcGh5LT5pZCA9IElHUDAxRTEwMDBfSV9QSFlfSUQ7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzM6CkBAIC00MzgsNyArNDUyLDcgQEAKICAqICBGb3Igbm9uLTgyNTczIHNpbGljb24sIHdyaXRlIGRhdGEgdG8gRUVQUk9NIGF0IG9mZnNldCB1c2luZyBTUEkgaW50ZXJmYWNlLgogICoKICAqICBJZiBlMTAwMGVfdXBkYXRlX252bV9jaGVja3N1bSBpcyBub3QgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24sIHRoZQotICogIEVFUFJPTSB3aWxsIG1vc3QgbGlrbGV5IGNvbnRhaW4gYW4gaW52YWxpZCBjaGVja3N1bS4KKyAqICBFRVBST00gd2lsbCBtb3N0IGxpa2VseSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX3dyaXRlX252bV84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCiAJCQkJIHUxNiAqZGF0YSkKQEAgLTQ3OSw4ICs0OTMsMTAgQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQkvKiBJZiBvdXIgbnZtIGlzIGFuIEVFUFJPTSwgdGhlbiB3ZSdyZSBkb25lCi0JICogb3RoZXJ3aXNlLCBjb21taXQgdGhlIGNoZWNrc3VtIHRvIHRoZSBmbGFzaCBOVk0uICovCisJLyoKKwkgKiBJZiBvdXIgbnZtIGlzIGFuIEVFUFJPTSwgdGhlbiB3ZSdyZSBkb25lCisJICogb3RoZXJ3aXNlLCBjb21taXQgdGhlIGNoZWNrc3VtIHRvIHRoZSBmbGFzaCBOVk0uCisJICovCiAJaWYgKGh3LT5udm0udHlwZSAhPSBlMTAwMF9udm1fZmxhc2hfaHcpCiAJCXJldHVybiByZXRfdmFsOwogCkBAIC00OTYsNyArNTEyLDggQEAKIAogCS8qIFJlc2V0IHRoZSBmaXJtd2FyZSBpZiB1c2luZyBTVE0gb3Bjb2RlLiAqLwogCWlmICgoZXIzMihGTE9QKSAmIDB4RkYwMCkgPT0gRTEwMDBfU1RNX09QQ09ERSkgewotCQkvKiBUaGUgZW5hYmxpbmcgb2YgYW5kIHRoZSBhY3R1YWwgcmVzZXQgbXVzdCBiZSBkb25lCisJCS8qCisJCSAqIFRoZSBlbmFibGluZyBvZiBhbmQgdGhlIGFjdHVhbCByZXNldCBtdXN0IGJlIGRvbmUKIAkJICogaW4gdHdvIHdyaXRlIGN5Y2xlcy4KIAkJICovCiAJCWV3MzIoSElDUiwgRTEwMDBfSElDUl9GV19SRVNFVF9FTkFCTEUpOwpAQCAtNTQ3LDcgKzU2NCw3IEBACiAgKiAgcG9sbCBmb3IgY29tcGxldGlvbi4KICAqCiAgKiAgSWYgZTEwMDBlX3VwZGF0ZV9udm1fY2hlY2tzdW0gaXMgbm90IGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLCB0aGUKLSAqICBFRVBST00gd2lsbCBtb3N0IGxpa2xleSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCisgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgogICoqLwogc3RhdGljIHMzMiBlMTAwMF93cml0ZV9udm1fZWV3cl84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LAogCQkJCSAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQpAQCAtNTU3LDggKzU3NCwxMCBAQAogCXUzMiBlZXdyID0gMDsKIAlzMzIgcmV0X3ZhbCA9IDA7CiAKLQkvKiBBIGNoZWNrIGZvciBpbnZhbGlkIHZhbHVlczogIG9mZnNldCB0b28gbGFyZ2UsIHRvbyBtYW55IHdvcmRzLAotCSAqIGFuZCBub3QgZW5vdWdoIHdvcmRzLiAqLworCS8qCisJICogQSBjaGVjayBmb3IgaW52YWxpZCB2YWx1ZXM6ICBvZmZzZXQgdG9vIGxhcmdlLCB0b28gbWFueSB3b3JkcywKKwkgKiBhbmQgbm90IGVub3VnaCB3b3Jkcy4KKwkgKi8KIAlpZiAoKG9mZnNldCA+PSBudm0tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gKG52bS0+d29yZF9zaXplIC0gb2Zmc2V0KSkgfHwKIAkgICAgKHdvcmRzID09IDApKSB7CiAJCWh3X2RiZyhodywgIm52bSBwYXJhbWV0ZXIocykgb3V0IG9mIGJvdW5kc1xuIik7CkBAIC02NDUsMzAgKzY2NCwzMiBAQAogCX0gZWxzZSB7CiAJCWRhdGEgJj0gfklHUDAyRTEwMDBfUE1fRDBfTFBMVTsKIAkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCBkYXRhKTsKLQkJLyogTFBMVSBhbmQgU21hcnRTcGVlZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgTFBMVSBpcyB1c2VkCisJCS8qCisJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIExQTFUgaXMgdXNlZAogCQkgKiBkdXJpbmcgRHggc3RhdGVzIHdoZXJlIHRoZSBwb3dlciBjb25zZXJ2YXRpb24gaXMgbW9zdAogCQkgKiBpbXBvcnRhbnQuICBEdXJpbmcgZHJpdmVyIGFjdGl2aXR5IHdlIHNob3VsZCBlbmFibGUKLQkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4gKi8KKwkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4KKwkJICovCiAJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29uKSB7CiAJCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICAmZGF0YSk7CisJCQkJCSAgICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCiAJCQlkYXRhIHw9IElHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7CiAJCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICBkYXRhKTsKKwkJCQkJICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJfSBlbHNlIGlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29mZikgewogCQkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKLQkJCQkJCSAgICAgJmRhdGEpOworCQkJCQkgICAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlyZXR1cm4gcmV0X3ZhbDsKIAogCQkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKIAkJCXJldF92YWwgPSBlMWVfd3BoeShodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCQkgICAgIGRhdGEpOworCQkJCQkgICBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCQl9CkBAIC02OTMsNyArNzE0LDggQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgaSA9IDA7CiAKLQkvKiBQcmV2ZW50IHRoZSBQQ0ktRSBidXMgZnJvbSBzdGlja2luZyBpZiB0aGVyZSBpcyBubyBUTFAgY29ubmVjdGlvbgorCS8qCisJICogUHJldmVudCB0aGUgUENJLUUgYnVzIGZyb20gc3RpY2tpbmcgaWYgdGhlcmUgaXMgbm8gVExQIGNvbm5lY3Rpb24KIAkgKiBvbiB0aGUgbGFzdCBUTFAgcmVhZC93cml0ZSB0cmFuc2FjdGlvbiB3aGVuIE1BQyBpcyByZXNldC4KIAkgKi8KIAlyZXRfdmFsID0gZTEwMDBlX2Rpc2FibGVfcGNpZV9tYXN0ZXIoaHcpOwpAQCAtNzA5LDggKzczMSwxMCBAQAogCiAJbXNsZWVwKDEwKTsKIAotCS8qIE11c3QgYWNxdWlyZSB0aGUgTURJTyBvd25lcnNoaXAgYmVmb3JlIE1BQyByZXNldC4KLQkgKiBPd25lcnNoaXAgZGVmYXVsdHMgdG8gZmlybXdhcmUgYWZ0ZXIgYSByZXNldC4gKi8KKwkvKgorCSAqIE11c3QgYWNxdWlyZSB0aGUgTURJTyBvd25lcnNoaXAgYmVmb3JlIE1BQyByZXNldC4KKwkgKiBPd25lcnNoaXAgZGVmYXVsdHMgdG8gZmlybXdhcmUgYWZ0ZXIgYSByZXNldC4KKwkgKi8KIAlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczKSB7CiAJCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CiAJCWV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQOwpAQCAtNzQ3LDcgKzc3MSw4IEBACiAJCS8qIFdlIGRvbid0IHdhbnQgdG8gY29udGludWUgYWNjZXNzaW5nIE1BQyByZWdpc3RlcnMuICovCiAJCXJldHVybiByZXRfdmFsOwogCi0JLyogUGh5IGNvbmZpZ3VyYXRpb24gZnJvbSBOVk0ganVzdCBzdGFydHMgYWZ0ZXIgRUVDRF9BVVRPX1JEIGlzIHNldC4KKwkvKgorCSAqIFBoeSBjb25maWd1cmF0aW9uIGZyb20gTlZNIGp1c3Qgc3RhcnRzIGFmdGVyIEVFQ0RfQVVUT19SRCBpcyBzZXQuCiAJICogTmVlZCB0byB3YWl0IGZvciBQaHkgY29uZmlndXJhdGlvbiBjb21wbGV0aW9uIGJlZm9yZSBhY2Nlc3NpbmcKIAkgKiBOVk0gYW5kIFBoeS4KIAkgKi8KQEAgLTc5Myw3ICs4MTgsOCBAQAogCWUxMDAwZV9jbGVhcl92ZnRhKGh3KTsKIAogCS8qIFNldHVwIHRoZSByZWNlaXZlIGFkZHJlc3MuICovCi0JLyogSWYsIGhvd2V2ZXIsIGEgbG9jYWxseSBhZG1pbmlzdGVyZWQgYWRkcmVzcyB3YXMgYXNzaWduZWQgdG8gdGhlCisJLyoKKwkgKiBJZiwgaG93ZXZlciwgYSBsb2NhbGx5IGFkbWluaXN0ZXJlZCBhZGRyZXNzIHdhcyBhc3NpZ25lZCB0byB0aGUKIAkgKiA4MjU3MSwgd2UgbXVzdCByZXNlcnZlIGEgUkFSIGZvciBpdCB0byB3b3JrIGFyb3VuZCBhbiBpc3N1ZSB3aGVyZQogCSAqIHJlc2V0dGluZyBvbmUgcG9ydCB3aWxsIHJlbG9hZCB0aGUgTUFDIG9uIHRoZSBvdGhlciBwb3J0LgogCSAqLwpAQCAtODEwLDE5ICs4MzYsMTkgQEAKIAlyZXRfdmFsID0gZTEwMDBfc2V0dXBfbGlua184MjU3MShodyk7CiAKIAkvKiBTZXQgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3Igd3JpdGUtYmFjayBwb2xpY3kgKi8KLQlyZWdfZGF0YSA9IGVyMzIoVFhEQ1RMKTsKKwlyZWdfZGF0YSA9IGVyMzIoVFhEQ1RMKDApKTsKIAlyZWdfZGF0YSA9IChyZWdfZGF0YSAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfAogCQkgICBFMTAwMF9UWERDVExfRlVMTF9UWF9ERVNDX1dCIHwKIAkJICAgRTEwMDBfVFhEQ1RMX0NPVU5UX0RFU0M7Ci0JZXczMihUWERDVEwsIHJlZ19kYXRhKTsKKwlldzMyKFRYRENUTCgwKSwgcmVnX2RhdGEpOwogCiAJLyogLi4uZm9yIGJvdGggcXVldWVzLiAqLwogCWlmIChtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzMpIHsKLQkJcmVnX2RhdGEgPSBlcjMyKFRYRENUTDEpOworCQlyZWdfZGF0YSA9IGVyMzIoVFhEQ1RMKDEpKTsKIAkJcmVnX2RhdGEgPSAocmVnX2RhdGEgJiB+RTEwMDBfVFhEQ1RMX1dUSFJFU0gpIHwKIAkJCSAgIEUxMDAwX1RYRENUTF9GVUxMX1RYX0RFU0NfV0IgfAogCQkJICAgRTEwMDBfVFhEQ1RMX0NPVU5UX0RFU0M7Ci0JCWV3MzIoVFhEQ1RMMSwgcmVnX2RhdGEpOworCQlldzMyKFRYRENUTCgxKSwgcmVnX2RhdGEpOwogCX0gZWxzZSB7CiAJCWUxMDAwZV9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZyhodyk7CiAJCXJlZ19kYXRhID0gZXIzMihHQ1IpOwpAQCAtODMwLDcgKzg1Niw4IEBACiAJCWV3MzIoR0NSLCByZWdfZGF0YSk7CiAJfQogCi0JLyogQ2xlYXIgYWxsIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyAoY2xlYXIgb24gcmVhZCkuICBJdCBpcworCS8qCisJICogQ2xlYXIgYWxsIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyAoY2xlYXIgb24gcmVhZCkuICBJdCBpcwogCSAqIGltcG9ydGFudCB0aGF0IHdlIGRvIHRoaXMgYWZ0ZXIgd2UgaGF2ZSB0cmllZCB0byBlc3RhYmxpc2ggbGluawogCSAqIGJlY2F1c2UgdGhlIHN5bWJvbCBlcnJvciBjb3VudCB3aWxsIGluY3JlbWVudCB3aWxkbHkgaWYgdGhlcmUKIAkgKiBpcyBubyBsaW5rLgpAQCAtODUxLDE3ICs4NzgsMTcgQEAKIAl1MzIgcmVnOwogCiAJLyogVHJhbnNtaXQgRGVzY3JpcHRvciBDb250cm9sIDAgKi8KLQlyZWcgPSBlcjMyKFRYRENUTCk7CisJcmVnID0gZXIzMihUWERDVEwoMCkpOwogCXJlZyB8PSAoMSA8PCAyMik7Ci0JZXczMihUWERDVEwsIHJlZyk7CisJZXczMihUWERDVEwoMCksIHJlZyk7CiAKIAkvKiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbnRyb2wgMSAqLwotCXJlZyA9IGVyMzIoVFhEQ1RMMSk7CisJcmVnID0gZXIzMihUWERDVEwoMSkpOwogCXJlZyB8PSAoMSA8PCAyMik7Ci0JZXczMihUWERDVEwxLCByZWcpOworCWV3MzIoVFhEQ1RMKDEpLCByZWcpOwogCiAJLyogVHJhbnNtaXQgQXJiaXRyYXRpb24gQ29udHJvbCAwICovCi0JcmVnID0gZXIzMihUQVJDMCk7CisJcmVnID0gZXIzMihUQVJDKDApKTsKIAlyZWcgJj0gfigweEYgPDwgMjcpOyAvKiAzMDoyNyAqLwogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MToKQEAgLTg3MSwxMCArODk4LDEwIEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCWV3MzIoVEFSQzAsIHJlZyk7CisJZXczMihUQVJDKDApLCByZWcpOwogCiAJLyogVHJhbnNtaXQgQXJiaXRyYXRpb24gQ29udHJvbCAxICovCi0JcmVnID0gZXIzMihUQVJDMSk7CisJcmVnID0gZXIzMihUQVJDKDEpKTsKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzE6CiAJY2FzZSBlMTAwMF84MjU3MjoKQEAgLTg4NCw3ICs5MTEsNyBAQAogCQkJcmVnICY9IH4oMSA8PCAyOCk7CiAJCWVsc2UKIAkJCXJlZyB8PSAoMSA8PCAyOCk7Ci0JCWV3MzIoVEFSQzEsIHJlZyk7CisJCWV3MzIoVEFSQygxKSwgcmVnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC05MjIsNyArOTQ5LDggQEAKIAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzMpIHsKIAkJaWYgKGh3LT5tbmdfY29va2llLnZsYW5faWQgIT0gMCkgewotCQkJLyogVGhlIFZGVEEgaXMgYSA0MDk2YiBiaXQtZmllbGQsIGVhY2ggaWRlbnRpZnlpbmcKKwkJCS8qCisJCQkgKiBUaGUgVkZUQSBpcyBhIDQwOTZiIGJpdC1maWVsZCwgZWFjaCBpZGVudGlmeWluZwogCQkJICogYSBzaW5nbGUgVkxBTiBJRC4gIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucwogCQkJICogZGV0ZXJtaW5lIHdoaWNoIDMyYiBlbnRyeSAoaS5lLiBvZmZzZXQpIGludG8gdGhlCiAJCQkgKiBhcnJheSB3ZSB3YW50IHRvIHNldCB0aGUgVkxBTiBJRCAoaS5lLiBiaXQpIG9mCkBAIC05MzYsNyArOTY0LDggQEAKIAkJfQogCX0KIAlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEUxMDAwX1ZMQU5fRklMVEVSX1RCTF9TSVpFOyBvZmZzZXQrKykgewotCQkvKiBJZiB0aGUgb2Zmc2V0IHdlIHdhbnQgdG8gY2xlYXIgaXMgdGhlIHNhbWUgb2Zmc2V0IG9mIHRoZQorCQkvKgorCQkgKiBJZiB0aGUgb2Zmc2V0IHdlIHdhbnQgdG8gY2xlYXIgaXMgdGhlIHNhbWUgb2Zmc2V0IG9mIHRoZQogCQkgKiBtYW5hZ2VhYmlsaXR5IFZMQU4gSUQsIHRoZW4gY2xlYXIgYWxsIGJpdHMgZXhjZXB0IHRoYXQgb2YKIAkJICogdGhlIG1hbmFnZWFiaWxpdHkgdW5pdC4KIAkJICovCkBAIC05NDcsNyArOTc2LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfbWNfYWRkcl9saXN0X3VwZGF0ZV84MjU3MSAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCisgKiAgZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3MSAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KICAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQpAQCAtOTU5LDcgKzk4OCw3IEBACiAgKiAgVGhlIHBhcmFtZXRlciByYXJfY291bnQgd2lsbCB1c3VhbGx5IGJlIGh3LT5tYWMucmFyX2VudHJ5X2NvdW50CiAgKiAgdW5sZXNzIHRoZXJlIGFyZSB3b3JrYXJvdW5kcyB0aGF0IGNoYW5nZSB0aGlzLgogICoqLwotc3RhdGljIHZvaWQgZTEwMDBfbWNfYWRkcl9saXN0X3VwZGF0ZV84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorc3RhdGljIHZvaWQgZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAogCQkJCQkgICAgdTggKm1jX2FkZHJfbGlzdCwKIAkJCQkJICAgIHUzMiBtY19hZGRyX2NvdW50LAogCQkJCQkgICAgdTMyIHJhcl91c2VkX2NvdW50LApAQCAtOTY4LDggKzk5Nyw4IEBACiAJaWYgKGUxMDAwZV9nZXRfbGFhX3N0YXRlXzgyNTcxKGh3KSkKIAkJcmFyX2NvdW50LS07CiAKLQllMTAwMGVfbWNfYWRkcl9saXN0X3VwZGF0ZV9nZW5lcmljKGh3LCBtY19hZGRyX2xpc3QsIG1jX2FkZHJfY291bnQsCi0JCQkJCSAgcmFyX3VzZWRfY291bnQsIHJhcl9jb3VudCk7CisJZTEwMDBlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYyhodywgbWNfYWRkcl9saXN0LCBtY19hZGRyX2NvdW50LAorCQkJCQkgICByYXJfdXNlZF9jb3VudCwgcmFyX2NvdW50KTsKIH0KIAogLyoqCkBAIC05ODQsMTIgKzEwMTMsMTMgQEAKICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCS8qIDgyNTczIGRvZXMgbm90IGhhdmUgYSB3b3JkIGluIHRoZSBOVk0gdG8gZGV0ZXJtaW5lCisJLyoKKwkgKiA4MjU3MyBkb2VzIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgTlZNIHRvIGRldGVybWluZQogCSAqIHRoZSBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5CiAJICogc2V0IGl0IHRvIGZ1bGwuCiAJICovCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MykKLQkJaHctPm1hYy5mYyA9IGUxMDAwX2ZjX2Z1bGw7CisJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKIAogCXJldHVybiBlMTAwMGVfc2V0dXBfbGluayhodyk7CiB9CkBAIC0xMDUwLDE0ICsxMDgwLDE0IEBACiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTcxOgogCWNhc2UgZTEwMDBfODI1NzI6Ci0JCS8qIElmIFNlckRlcyBsb29wYmFjayBtb2RlIGlzIGVudGVyZWQsIHRoZXJlIGlzIG5vIGZvcm0KKwkJLyoKKwkJICogSWYgU2VyRGVzIGxvb3BiYWNrIG1vZGUgaXMgZW50ZXJlZCwgdGhlcmUgaXMgbm8gZm9ybQogCQkgKiBvZiByZXNldCB0byB0YWtlIHRoZSBhZGFwdGVyIG91dCBvZiB0aGF0IG1vZGUuICBTbyB3ZQogCQkgKiBoYXZlIHRvIGV4cGxpY2l0bHkgdGFrZSB0aGUgYWRhcHRlciBvdXQgb2YgbG9vcGJhY2sKLQkJICogbW9kZS4gIFRoaXMgcHJldmVudHMgZHJpdmVycyBmcm9tIHR3aWRsaW5nIHRoZWlyIHRodW1icworCQkgKiBtb2RlLiAgVGhpcyBwcmV2ZW50cyBkcml2ZXJzIGZyb20gdHdpZGRsaW5nIHRoZWlyIHRodW1icwogCQkgKiBpZiBhbm90aGVyIHRvb2wgZmFpbGVkIHRvIHRha2UgaXQgb3V0IG9mIGxvb3BiYWNrIG1vZGUuCiAJCSAqLwotCQlldzMyKFNDVEwsCi0JCQkJRTEwMDBfU0NUTF9ESVNBQkxFX1NFUkRFU19MT09QQkFDSyk7CisJCWV3MzIoU0NUTCwgRTEwMDBfU0NUTF9ESVNBQkxFX1NFUkRFU19MT09QQkFDSyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTA5OCw3ICsxMTI4LDcgQEAKICAqICBlMTAwMGVfZ2V0X2xhYV9zdGF0ZV84MjU3MSAtIEdldCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBhZGRyZXNzIHN0YXRlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCi0gKiAgUmV0cmlldmUgYW5kIHJldHVybiB0aGUgY3VycmVudCBsb2NhbGx5IGFkbWluaXN0ZWQgYWRkcmVzcyBzdGF0ZS4KKyAqICBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IGxvY2FsbHkgYWRtaW5pc3RlcmVkIGFkZHJlc3Mgc3RhdGUuCiAgKiovCiBib29sIGUxMDAwZV9nZXRfbGFhX3N0YXRlXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CkBAIC0xMTEzLDcgKzExNDMsNyBAQAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQHN0YXRlOiBlbmFibGUvZGlzYWJsZSBsb2NhbGx5IGFkbWluaXN0ZXJlZCBhZGRyZXNzCiAgKgotICogIEVuYWJsZS9EaXNhYmxlIHRoZSBjdXJyZW50IGxvY2FsbHkgYWRtaW5pc3RlZCBhZGRyZXNzIHN0YXRlLgorICogIEVuYWJsZS9EaXNhYmxlIHRoZSBjdXJyZW50IGxvY2FsbHkgYWRtaW5pc3RlcnMgYWRkcmVzcyBzdGF0ZS4KICAqKi8KIHZvaWQgZTEwMDBlX3NldF9sYWFfc3RhdGVfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBzdGF0ZSkKIHsKQEAgLTExMjQsNyArMTE1NCw4IEBACiAKIAkvKiBJZiB3b3JrYXJvdW5kIGlzIGFjdGl2YXRlZC4uLiAqLwogCWlmIChzdGF0ZSkKLQkJLyogSG9sZCBhIGNvcHkgb2YgdGhlIExBQSBpbiBSQVJbMTRdIFRoaXMgaXMgZG9uZSBzbyB0aGF0CisJCS8qCisJCSAqIEhvbGQgYSBjb3B5IG9mIHRoZSBMQUEgaW4gUkFSWzE0XSBUaGlzIGlzIGRvbmUgc28gdGhhdAogCQkgKiBiZXR3ZWVuIHRoZSB0aW1lIFJBUlswXSBnZXRzIGNsb2JiZXJlZCBhbmQgdGhlIHRpbWUgaXQKIAkJICogZ2V0cyBmaXhlZCwgdGhlIGFjdHVhbCBMQUEgaXMgaW4gb25lIG9mIHRoZSBSQVJzIGFuZCBubwogCQkgKiBpbmNvbWluZyBwYWNrZXRzIGRpcmVjdGVkIHRvIHRoaXMgcG9ydCBhcmUgZHJvcHBlZC4KQEAgLTExNTIsNyArMTE4Myw4IEBACiAJaWYgKG52bS0+dHlwZSAhPSBlMTAwMF9udm1fZmxhc2hfaHcpCiAJCXJldHVybiAwOwogCi0JLyogQ2hlY2sgYml0IDQgb2Ygd29yZCAxMGguICBJZiBpdCBpcyAwLCBmaXJtd2FyZSBpcyBkb25lIHVwZGF0aW5nCisJLyoKKwkgKiBDaGVjayBiaXQgNCBvZiB3b3JkIDEwaC4gIElmIGl0IGlzIDAsIGZpcm13YXJlIGlzIGRvbmUgdXBkYXRpbmcKIAkgKiAxMGgtMTJoLiAgQ2hlY2tzdW0gbWF5IG5lZWQgdG8gYmUgZml4ZWQuCiAJICovCiAJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCAweDEwLCAxLCAmZGF0YSk7CkBAIC0xMTYwLDcgKzExOTIsOCBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAogCWlmICghKGRhdGEgJiAweDEwKSkgewotCQkvKiBSZWFkIDB4MjMgYW5kIGNoZWNrIGJpdCAxNS4gIFRoaXMgYml0IGlzIGEgMQorCQkvKgorCQkgKiBSZWFkIDB4MjMgYW5kIGNoZWNrIGJpdCAxNS4gIFRoaXMgYml0IGlzIGEgMQogCQkgKiB3aGVuIHRoZSBjaGVja3N1bSBoYXMgYWxyZWFkeSBiZWVuIGZpeGVkLiAgSWYKIAkJICogdGhlIGNoZWNrc3VtIGlzIHN0aWxsIHdyb25nIGFuZCB0aGlzIGJpdCBpcyBhCiAJCSAqIDEsIHdlIG5lZWQgdG8gcmV0dXJuIGJhZCBjaGVja3N1bS4gIE90aGVyd2lzZSwKQEAgLTEyNDAsNyArMTI3Myw3IEBACiAJLyogLmdldF9saW5rX3VwX2luZm86IG1lZGlhIHR5cGUgZGVwZW5kZW50ICovCiAJLmxlZF9vbgkJCT0gZTEwMDBlX2xlZF9vbl9nZW5lcmljLAogCS5sZWRfb2ZmCQk9IGUxMDAwZV9sZWRfb2ZmX2dlbmVyaWMsCi0JLm1jX2FkZHJfbGlzdF91cGRhdGUJPSBlMTAwMF9tY19hZGRyX2xpc3RfdXBkYXRlXzgyNTcxLAorCS51cGRhdGVfbWNfYWRkcl9saXN0CT0gZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3MSwKIAkucmVzZXRfaHcJCT0gZTEwMDBfcmVzZXRfaHdfODI1NzEsCiAJLmluaXRfaHcJCT0gZTEwMDBfaW5pdF9od184MjU3MSwKIAkuc2V0dXBfbGluawkJPSBlMTAwMF9zZXR1cF9saW5rXzgyNTcxLApAQCAtMTI4MSwxNiArMTMxNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbnZtX29wZXJhdGlvbnMgZTgyNTcxX252bV9vcHMgPSB7CiAJLmFjcXVpcmVfbnZtCQk9IGUxMDAwX2FjcXVpcmVfbnZtXzgyNTcxLAotCS5yZWFkX252bQkJPSBlMTAwMGVfcmVhZF9udm1fc3BpLAotCS5yZWxlYXNlX252bQkJPSBlMTAwMF9yZWxlYXNlX252bV84MjU3MSwKLQkudXBkYXRlX252bQkJPSBlMTAwMF91cGRhdGVfbnZtX2NoZWNrc3VtXzgyNTcxLAotCS52YWxpZF9sZWRfZGVmYXVsdAk9IGUxMDAwX3ZhbGlkX2xlZF9kZWZhdWx0XzgyNTcxLAotCS52YWxpZGF0ZV9udm0JCT0gZTEwMDBfdmFsaWRhdGVfbnZtX2NoZWNrc3VtXzgyNTcxLAotCS53cml0ZV9udm0JCT0gZTEwMDBfd3JpdGVfbnZtXzgyNTcxLAotfTsKLQotc3RhdGljIHN0cnVjdCBlMTAwMF9udm1fb3BlcmF0aW9ucyBlODI1NzNfbnZtX29wcyA9IHsKLQkuYWNxdWlyZV9udm0JCT0gZTEwMDBfYWNxdWlyZV9udm1fODI1NzEsCiAJLnJlYWRfbnZtCQk9IGUxMDAwZV9yZWFkX252bV9lZXJkLAogCS5yZWxlYXNlX252bQkJPSBlMTAwMF9yZWxlYXNlX252bV84MjU3MSwKIAkudXBkYXRlX252bQkJPSBlMTAwMF91cGRhdGVfbnZtX2NoZWNrc3VtXzgyNTcxLApAQCAtMTMxNCw3ICsxMzM3LDcgQEAKIAkJCQkgIHwgRkxBR19UQVJDX1NQRUVEX01PREVfQklUIC8qIGVycmF0YSAqLwogCQkJCSAgfCBGTEFHX0FQTUVfQ0hFQ0tfUE9SVF9CLAogCS5wYmEJCQk9IDM4LAotCS5nZXRfaW52YXJpYW50cwkJPSBlMTAwMF9nZXRfaW52YXJpYW50c184MjU3MSwKKwkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKIAkubWFjX29wcwkJPSAmZTgyNTcxX21hY19vcHMsCiAJLnBoeV9vcHMJCT0gJmU4Ml9waHlfb3BzX2lncCwKIAkubnZtX29wcwkJPSAmZTgyNTcxX252bV9vcHMsCkBAIC0xMzMyLDcgKzEzNTUsNyBAQAogCQkJCSAgfCBGTEFHX0hBU19TVEFUU19JQ1JfSUNUCiAJCQkJICB8IEZMQUdfVEFSQ19TUEVFRF9NT0RFX0JJVCwgLyogZXJyYXRhICovCiAJLnBiYQkJCT0gMzgsCi0JLmdldF9pbnZhcmlhbnRzCQk9IGUxMDAwX2dldF9pbnZhcmlhbnRzXzgyNTcxLAorCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzXzgyNTcxLAogCS5tYWNfb3BzCQk9ICZlODI1NzFfbWFjX29wcywKIAkucGh5X29wcwkJPSAmZTgyX3BoeV9vcHNfaWdwLAogCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKQEAgLTEzNTIsOSArMTM3NSw5IEBACiAJCQkJICB8IEZMQUdfSEFTX0VSVAogCQkJCSAgfCBGTEFHX0hBU19TV1NNX09OX0xPQUQsCiAJLnBiYQkJCT0gMjAsCi0JLmdldF9pbnZhcmlhbnRzCQk9IGUxMDAwX2dldF9pbnZhcmlhbnRzXzgyNTcxLAorCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzXzgyNTcxLAogCS5tYWNfb3BzCQk9ICZlODI1NzFfbWFjX29wcywKIAkucGh5X29wcwkJPSAmZTgyX3BoeV9vcHNfbTg4LAotCS5udm1fb3BzCQk9ICZlODI1NzNfbnZtX29wcywKKwkubnZtX29wcwkJPSAmZTgyNTcxX252bV9vcHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9lMTAwMGUvTWFrZWZpbGUKaW5kZXggNjUwZjg2Ni4uMzYwYzkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCiAjIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisjIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IDYyMzJjM2UuLjU3MmNmZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwMDAgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC02Niw3ICs2Niw3IEBACiAjZGVmaW5lIEUxMDAwX1dVRkNfQVJQICAweDAwMDAwMDIwIC8qIEFSUCBSZXF1ZXN0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCiAKIC8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDdfREFUQSAweDAwMDAwMDgwIC8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDcgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBIDB4MDAwMDAwODAgLyogVmFsdWUgb2YgU1cgRGVmaW5hYmxlIFBpbiA3ICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0VFX1JTVCAgICAweDAwMDAyMDAwIC8qIFJlaW5pdGlhbGl6ZSBmcm9tIEVFUFJPTSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9ST19ESVMgICAgMHgwMDAyMDAwMCAvKiBSZWxheGVkIE9yZGVyaW5nIGRpc2FibGUgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0sgMHgwMEMwMDAwMApAQCAtNzUsMTIgKzc1LDEyIEBACiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0lBTUUgICAgICAgICAgIDB4MDgwMDAwMDAgLyogSW50ZXJydXB0IGFja25vd2xlZGdlIEF1dG8tbWFzayAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9JTlRfVElNRVJfQ0xSICAweDIwMDAwMDAwIC8qIENsZWFyIEludGVycnVwdCB0aW1lcnMgYWZ0ZXIgSU1TIGNsZWFyICovCiAKLS8qIFJlY2VpdmUgRGVjcmlwdG9yIGJpdCBkZWZpbml0aW9ucyAqLworLyogUmVjZWl2ZSBEZXNjcmlwdG9yIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBFMTAwMF9SWERfU1RBVF9ERCAgICAgICAweDAxICAgIC8qIERlc2NyaXB0b3IgRG9uZSAqLwogI2RlZmluZSBFMTAwMF9SWERfU1RBVF9FT1AgICAgICAweDAyICAgIC8qIEVuZCBvZiBQYWNrZXQgKi8KICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfSVhTTSAgICAgMHgwNCAgICAvKiBJZ25vcmUgY2hlY2tzdW0gKi8KICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVlAgICAgICAgMHgwOCAgICAvKiBJRUVFIFZMQU4gUGFja2V0ICovCi0jZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1VEUENTICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FjdWxhdGVkICovCisjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1VEUENTICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBFMTAwMF9SWERfU1RBVF9UQ1BDUyAgICAweDIwICAgIC8qIFRDUCB4c3VtIGNhbGN1bGF0ZWQgKi8KICNkZWZpbmUgRTEwMDBfUlhEX0VSUl9DRSAgICAgICAgMHgwMSAgICAvKiBDUkMgRXJyb3IgKi8KICNkZWZpbmUgRTEwMDBfUlhEX0VSUl9TRSAgICAgICAgMHgwMiAgICAvKiBTeW1ib2wgRXJyb3IgKi8KQEAgLTEyMCwxMCArMTIwLDEwIEBACiAjZGVmaW5lIEUxMDAwX01BTkNfQVJQX0VOICAgICAgICAweDAwMDAyMDAwIC8qIEVuYWJsZSBBUlAgUmVxdWVzdCBGaWx0ZXJpbmcgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19SQ1ZfVENPX0VOICAgIDB4MDAwMjAwMDAgLyogUmVjZWl2ZSBUQ08gUGFja2V0cyBFbmFibGVkICovCiAjZGVmaW5lIEUxMDAwX01BTkNfQkxLX1BIWV9SU1RfT05fSURFICAgMHgwMDA0MDAwMCAvKiBCbG9jayBwaHkgcmVzZXRzICovCi0jZGVmaW5lIEUxMDAwX01BTkNfRU5fTUFDX0FERFJfRklMVEVSICAgMHgwMDEwMDAwMCAvKiBFbmFibGUgTUFDIGFkZHJlc3MKLQkJCQkJCSAgICAqIGZpbHRlcmluZyAqLwotI2RlZmluZSBFMTAwMF9NQU5DX0VOX01ORzJIT1NUICAgMHgwMDIwMDAwMCAvKiBFbmFibGUgTU5HIHBhY2tldHMgdG8gaG9zdAotCQkJCQkgICAgICogbWVtb3J5ICovCisvKiBFbmFibGUgTUFDIGFkZHJlc3MgZmlsdGVyaW5nICovCisjZGVmaW5lIEUxMDAwX01BTkNfRU5fTUFDX0FERFJfRklMVEVSICAgMHgwMDEwMDAwMAorLyogRW5hYmxlIE1ORyBwYWNrZXRzIHRvIGhvc3QgbWVtb3J5ICovCisjZGVmaW5lIEUxMDAwX01BTkNfRU5fTU5HMkhPU1QgICAweDAwMjAwMDAwCiAKIC8qIFJlY2VpdmUgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0VOICAgICAgICAgICAgIDB4MDAwMDAwMDIgICAgLyogZW5hYmxlICovCkBAIC0xMzUsMjUgKzEzNSwyNiBAQAogI2RlZmluZSBFMTAwMF9SQ1RMX0xCTV9NQUMgICAgICAgIDB4MDAwMDAwNDAgICAgLyogTUFDIGxvb3BiYWNrIG1vZGUgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9MQk1fVENWUiAgICAgICAweDAwMDAwMEMwICAgIC8qIHRjdnIgbG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0RUWVBfUFMgICAgICAgIDB4MDAwMDA0MDAgICAgLyogUGFja2V0IFNwbGl0IGRlc2NyaXB0b3IgKi8KLSNkZWZpbmUgRTEwMDBfUkNUTF9SRE1UU19IQUxGICAgICAweDAwMDAwMDAwICAgIC8qIHJ4IGRlc2MgbWluIHRocmVzaG9sZCBzaXplICovCisjZGVmaW5lIEUxMDAwX1JDVExfUkRNVFNfSEFMRiAgICAgMHgwMDAwMDAwMCAgICAvKiBSeCBkZXNjIG1pbiB0aHJlc2hvbGQgc2l6ZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX01PX1NISUZUICAgICAgIDEyICAgICAgICAgICAgLyogbXVsdGljYXN0IG9mZnNldCBzaGlmdCAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0JBTSAgICAgICAgICAgIDB4MDAwMDgwMDAgICAgLyogYnJvYWRjYXN0IGVuYWJsZSAqLwogLyogdGhlc2UgYnVmZmVyIHNpemVzIGFyZSB2YWxpZCBpZiBFMTAwMF9SQ1RMX0JTRVggaXMgMCAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzIwNDggICAgICAgIDB4MDAwMDAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMjA0OCAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzEwMjQgICAgICAgIDB4MDAwMTAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMTAyNCAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzUxMiAgICAgICAgIDB4MDAwMjAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgNTEyICovCi0jZGVmaW5lIEUxMDAwX1JDVExfU1pfMjU2ICAgICAgICAgMHgwMDAzMDAwMCAgICAvKiByeCBidWZmZXIgc2l6ZSAyNTYgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl8yMDQ4ICAgICAgICAweDAwMDAwMDAwICAgIC8qIFJ4IGJ1ZmZlciBzaXplIDIwNDggKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl8xMDI0ICAgICAgICAweDAwMDEwMDAwICAgIC8qIFJ4IGJ1ZmZlciBzaXplIDEwMjQgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl81MTIgICAgICAgICAweDAwMDIwMDAwICAgIC8qIFJ4IGJ1ZmZlciBzaXplIDUxMiAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzI1NiAgICAgICAgIDB4MDAwMzAwMDAgICAgLyogUnggYnVmZmVyIHNpemUgMjU2ICovCiAvKiB0aGVzZSBidWZmZXIgc2l6ZXMgYXJlIHZhbGlkIGlmIEUxMDAwX1JDVExfQlNFWCBpcyAxICovCi0jZGVmaW5lIEUxMDAwX1JDVExfU1pfMTYzODQgICAgICAgMHgwMDAxMDAwMCAgICAvKiByeCBidWZmZXIgc2l6ZSAxNjM4NCAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzgxOTIgICAgICAgIDB4MDAwMjAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgODE5MiAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzQwOTYgICAgICAgIDB4MDAwMzAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgNDA5NiAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzE2Mzg0ICAgICAgIDB4MDAwMTAwMDAgICAgLyogUnggYnVmZmVyIHNpemUgMTYzODQgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl84MTkyICAgICAgICAweDAwMDIwMDAwICAgIC8qIFJ4IGJ1ZmZlciBzaXplIDgxOTIgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl80MDk2ICAgICAgICAweDAwMDMwMDAwICAgIC8qIFJ4IGJ1ZmZlciBzaXplIDQwOTYgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9WRkUgICAgICAgICAgICAweDAwMDQwMDAwICAgIC8qIHZsYW4gZmlsdGVyIGVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0NGSUVOICAgICAgICAgIDB4MDAwODAwMDAgICAgLyogY2Fub25pY2FsIGZvcm0gZW5hYmxlICovCiAjZGVmaW5lIEUxMDAwX1JDVExfQ0ZJICAgICAgICAgICAgMHgwMDEwMDAwMCAgICAvKiBjYW5vbmljYWwgZm9ybSBpbmRpY2F0b3IgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9CU0VYICAgICAgICAgICAweDAyMDAwMDAwICAgIC8qIEJ1ZmZlciBzaXplIGV4dGVuc2lvbiAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX1NFQ1JDICAgICAgICAgIDB4MDQwMDAwMDAgICAgLyogU3RyaXAgRXRoZXJuZXQgQ1JDICovCiAKLS8qIFVzZSBieXRlIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBzaGlmdCBwYXJhbWV0ZXJzCisvKgorICogVXNlIGJ5dGUgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIHNoaWZ0IHBhcmFtZXRlcnMKICAqIFVzYWdlOgogICogICAgIHBzcmN0bCB8PSAoKChST1VORFVQKHZhbHVlMCwgMTI4KSA+PiBFMTAwMF9QU1JDVExfQlNJWkUwX1NISUZUKSAmCiAgKiAgICAgICAgICAgICAgICAgIEUxMDAwX1BTUkNUTF9CU0laRTBfTUFTSykgfApAQCAtMjA2LDcgKzIwNyw4IEBACiAjZGVmaW5lIEUxMDAwX0NUUkxfVk1FICAgICAgMHg0MDAwMDAwMCAgLyogSUVFRSBWTEFOIG1vZGUgZW5hYmxlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfUEhZX1JTVCAgMHg4MDAwMDAwMCAgLyogUEhZIFJlc2V0ICovCiAKLS8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIE1hbmFnZW1lbnQgRGF0YSBJTyAoTURJTykgYW5kIE1hbmFnZW1lbnQgRGF0YQorLyoKKyAqIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIE1hbmFnZW1lbnQgRGF0YSBJTyAoTURJTykgYW5kIE1hbmFnZW1lbnQgRGF0YQogICogQ2xvY2sgKE1EQykgcGlucyBpbiB0aGUgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIuCiAgKi8KIApAQCAtMjIzLDcgKzIyNSw3IEBACiAjZGVmaW5lIEUxMDAwX1NUQVRVU19MQU5fSU5JVF9ET05FIDB4MDAwMDAyMDAgICAvKiBMYW4gSW5pdCBDb21wbGV0aW9uIGJ5IE5WTSAqLwogI2RlZmluZSBFMTAwMF9TVEFUVVNfR0lPX01BU1RFUl9FTkFCTEUgMHgwMDA4MDAwMCAvKiBTdGF0dXMgb2YgTWFzdGVyIHJlcXVlc3RzLiAqLwogCi0vKiBDb25zdGFudHMgdXNlZCB0byBpbnRyZXByZXQgdGhlIG1hc2tlZCBQQ0ktWCBidXMgc3BlZWQuICovCisvKiBDb25zdGFudHMgdXNlZCB0byBpbnRlcnByZXQgdGhlIG1hc2tlZCBQQ0ktWCBidXMgc3BlZWQuICovCiAKICNkZWZpbmUgSEFMRl9EVVBMRVggMQogI2RlZmluZSBGVUxMX0RVUExFWCAyCkBAIC0yNzksNyArMjgxLDcgQEAKICNkZWZpbmUgRTEwMDBfVFhEX1NUQVRfVEMgICAgMHgwMDAwMDAwNCAvKiBUeCBVbmRlcnJ1biAqLwogCiAvKiBUcmFuc21pdCBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX1RDVExfRU4gICAgIDB4MDAwMDAwMDIgICAgLyogZW5hYmxlIHR4ICovCisjZGVmaW5lIEUxMDAwX1RDVExfRU4gICAgIDB4MDAwMDAwMDIgICAgLyogZW5hYmxlIFR4ICovCiAjZGVmaW5lIEUxMDAwX1RDVExfUFNQICAgIDB4MDAwMDAwMDggICAgLyogcGFkIHNob3J0IHBhY2tldHMgKi8KICNkZWZpbmUgRTEwMDBfVENUTF9DVCAgICAgMHgwMDAwMGZmMCAgICAvKiBjb2xsaXNpb24gdGhyZXNob2xkICovCiAjZGVmaW5lIEUxMDAwX1RDVExfQ09MRCAgIDB4MDAzZmYwMDAgICAgLyogY29sbGlzaW9uIGRpc3RhbmNlICovCkBAIC0zMzcsOCArMzM5LDggQEAKICNkZWZpbmUgRTEwMDBfS0FCR1RYRF9CR1NRTEJJQVMgICAgICAgICAgIDB4MDAwNTAwMDAKIAogLyogUEJBIGNvbnN0YW50cyAqLwotI2RlZmluZSBFMTAwMF9QQkFfOEsgIDB4MDAwOCAgICAvKiA4S0IsIGRlZmF1bHQgUnggYWxsb2NhdGlvbiAqLwotI2RlZmluZSBFMTAwMF9QQkFfMTZLIDB4MDAxMCAgICAvKiAxNktCLCBkZWZhdWx0IFRYIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgRTEwMDBfUEJBXzhLICAweDAwMDggICAgLyogOEtCICovCisjZGVmaW5lIEUxMDAwX1BCQV8xNksgMHgwMDEwICAgIC8qIDE2S0IgKi8KIAogI2RlZmluZSBFMTAwMF9QQlNfMTZLIEUxMDAwX1BCQV8xNksKIApAQCAtMzU2LDEyICszNTgsMTMgQEAKIC8qIEludGVycnVwdCBDYXVzZSBSZWFkICovCiAjZGVmaW5lIEUxMDAwX0lDUl9UWERXICAgICAgICAgIDB4MDAwMDAwMDEgLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KICNkZWZpbmUgRTEwMDBfSUNSX0xTQyAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYU0VRICAgICAgICAgMHgwMDAwMDAwOCAvKiByeCBzZXF1ZW5jZSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JQ1JfUlhETVQwICAgICAgICAweDAwMDAwMDEwIC8qIHJ4IGRlc2MgbWluLiB0aHJlc2hvbGQgKDApICovCi0jZGVmaW5lIEUxMDAwX0lDUl9SWFQwICAgICAgICAgIDB4MDAwMDAwODAgLyogcnggdGltZXIgaW50ciAocmluZyAwKSAqLworI2RlZmluZSBFMTAwMF9JQ1JfUlhTRVEgICAgICAgICAweDAwMDAwMDA4IC8qIFJ4IHNlcXVlbmNlIGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lDUl9SWERNVDAgICAgICAgIDB4MDAwMDAwMTAgLyogUnggZGVzYyBtaW4uIHRocmVzaG9sZCAoMCkgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1JYVDAgICAgICAgICAgMHgwMDAwMDA4MCAvKiBSeCB0aW1lciBpbnRyIChyaW5nIDApICovCiAjZGVmaW5lIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQgIDB4ODAwMDAwMDAgLyogSWYgdGhpcyBiaXQgYXNzZXJ0ZWQsIHRoZSBkcml2ZXIgc2hvdWxkIGNsYWltIHRoZSBpbnRlcnJ1cHQgKi8KIAotLyogVGhpcyBkZWZpbmVzIHRoZSBiaXRzIHRoYXQgYXJlIHNldCBpbiB0aGUgSW50ZXJydXB0IE1hc2sKKy8qCisgKiBUaGlzIGRlZmluZXMgdGhlIGJpdHMgdGhhdCBhcmUgc2V0IGluIHRoZSBJbnRlcnJ1cHQgTWFzawogICogU2V0L1JlYWQgUmVnaXN0ZXIuICBFYWNoIGJpdCBpcyBkb2N1bWVudGVkIGJlbG93OgogICogICBvIFJYVDAgICA9IFJlY2VpdmVyIFRpbWVyIEludGVycnVwdCAocmluZyAwKQogICogICBvIFRYRFcgICA9IFRyYW5zbWl0IERlc2NyaXB0b3IgV3JpdHRlbiBCYWNrCkBAIC0zNzksMjEgKzM4MiwyMiBAQAogLyogSW50ZXJydXB0IE1hc2sgU2V0ICovCiAjZGVmaW5lIEUxMDAwX0lNU19UWERXICAgICAgRTEwMDBfSUNSX1RYRFcgICAgICAvKiBUcmFuc21pdCBkZXNjIHdyaXR0ZW4gYmFjayAqLwogI2RlZmluZSBFMTAwMF9JTVNfTFNDICAgICAgIEUxMDAwX0lDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCi0jZGVmaW5lIEUxMDAwX0lNU19SWFNFUSAgICAgRTEwMDBfSUNSX1JYU0VRICAgICAvKiByeCBzZXF1ZW5jZSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JTVNfUlhETVQwICAgIEUxMDAwX0lDUl9SWERNVDAgICAgLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAqLwotI2RlZmluZSBFMTAwMF9JTVNfUlhUMCAgICAgIEUxMDAwX0lDUl9SWFQwICAgICAgLyogcnggdGltZXIgaW50ciAqLworI2RlZmluZSBFMTAwMF9JTVNfUlhTRVEgICAgIEUxMDAwX0lDUl9SWFNFUSAgICAgLyogUnggc2VxdWVuY2UgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1JYRE1UMCAgICBFMTAwMF9JQ1JfUlhETVQwICAgIC8qIFJ4IGRlc2MgbWluLiB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1JYVDAgICAgICBFMTAwMF9JQ1JfUlhUMCAgICAgIC8qIFJ4IHRpbWVyIGludHIgKi8KIAogLyogSW50ZXJydXB0IENhdXNlIFNldCAqLwogI2RlZmluZSBFMTAwMF9JQ1NfTFNDICAgICAgIEUxMDAwX0lDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIEUxMDAwX0lDU19SWERNVDAgICAgRTEwMDBfSUNSX1JYRE1UMCAgICAvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICovCisjZGVmaW5lIEUxMDAwX0lDU19SWERNVDAgICAgRTEwMDBfSUNSX1JYRE1UMCAgICAvKiBSeCBkZXNjIG1pbi4gdGhyZXNob2xkICovCiAKIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9UWERDVExfUFRIUkVTSCAweDAwMDAwMDNGIC8qIFRYRENUTCBQcmVmZXRjaCBUaHJlc2hvbGQgKi8KICNkZWZpbmUgRTEwMDBfVFhEQ1RMX1dUSFJFU0ggMHgwMDNGMDAwMCAvKiBUWERDVEwgV3JpdGViYWNrIFRocmVzaG9sZCAqLwogI2RlZmluZSBFMTAwMF9UWERDVExfRlVMTF9UWF9ERVNDX1dCIDB4MDEwMTAwMDAgLyogR1JBTj0xLCBXVEhSRVNIPTEgKi8KICNkZWZpbmUgRTEwMDBfVFhEQ1RMX01BWF9UWF9ERVNDX1BSRUZFVENIIDB4MDEwMDAwMUYgLyogR1JBTj0xLCBQVEhSRVNIPTMxICovCi0jZGVmaW5lIEUxMDAwX1RYRENUTF9DT1VOVF9ERVNDIDB4MDA0MDAwMDAgLyogRW5hYmxlIHRoZSBjb3VudGluZyBvZiBkZXNjLgotCQkJCQkgICAgICBzdGlsbCB0byBiZSBwcm9jZXNzZWQuICovCisvKiBFbmFibGUgdGhlIGNvdW50aW5nIG9mIGRlc2MuIHN0aWxsIHRvIGJlIHByb2Nlc3NlZC4gKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMX0NPVU5UX0RFU0MgMHgwMDQwMDAwMAogCiAvKiBGbG93IENvbnRyb2wgQ29uc3RhbnRzICovCiAjZGVmaW5lIEZMT1dfQ09OVFJPTF9BRERSRVNTX0xPVyAgMHgwMEMyODAwMQpAQCAtNDA0LDcgKzQwOCw4IEBACiAjZGVmaW5lIEUxMDAwX1ZMQU5fRklMVEVSX1RCTF9TSVpFIDEyOCAgLyogVkxBTiBGaWx0ZXIgVGFibGUgKDQwOTYgYml0cykgKi8KIAogLyogUmVjZWl2ZSBBZGRyZXNzICovCi0vKiBOdW1iZXIgb2YgaGlnaC9sb3cgcmVnaXN0ZXIgcGFpcnMgaW4gdGhlIFJBUi4gVGhlIFJBUiAoUmVjZWl2ZSBBZGRyZXNzCisvKgorICogTnVtYmVyIG9mIGhpZ2gvbG93IHJlZ2lzdGVyIHBhaXJzIGluIHRoZSBSQVIuIFRoZSBSQVIgKFJlY2VpdmUgQWRkcmVzcwogICogUmVnaXN0ZXJzKSBob2xkcyB0aGUgZGlyZWN0ZWQgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgdGhhdCB3ZSBtb25pdG9yLgogICogVGVjaG5pY2FsbHksIHdlIGhhdmUgMTYgc3BvdHMuICBIb3dldmVyLCB3ZSByZXNlcnZlIG9uZSBvZiB0aGVzZSBzcG90cwogICogKFJBUlsxNV0pIGZvciBvdXIgZGlyZWN0ZWQgYWRkcmVzcyB1c2VkIGJ5IGNvbnRyb2xsZXJzIHdpdGgKQEAgLTUxNyw3ICs1MjIsNyBAQAogLyogUEhZIDEwMDAgTUlJIFJlZ2lzdGVyL0JpdCBEZWZpbml0aW9ucyAqLwogLyogUEhZIFJlZ2lzdGVycyBkZWZpbmVkIGJ5IElFRUUgKi8KICNkZWZpbmUgUEhZX0NPTlRST0wgICAgICAweDAwIC8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX1NUQVRVUyAgICAgICAweDAxIC8qIFN0YXR1cyBSZWdpc2VyICovCisjZGVmaW5lIFBIWV9TVEFUVVMgICAgICAgMHgwMSAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUEhZX0lEMSAgICAgICAgICAweDAyIC8qIFBoeSBJZCBSZWcgKHdvcmQgMSkgKi8KICNkZWZpbmUgUEhZX0lEMiAgICAgICAgICAweDAzIC8qIFBoeSBJZCBSZWcgKHdvcmQgMikgKi8KICNkZWZpbmUgUEhZX0FVVE9ORUdfQURWICAweDA0IC8qIEF1dG9uZWcgQWR2ZXJ0aXNlbWVudCAqLwpAQCAtNTMzLDggKzUzOCw4IEBACiAjZGVmaW5lIEUxMDAwX0VFQ0RfUkVRICAgICAgIDB4MDAwMDAwNDAgLyogTlZNIEFjY2VzcyBSZXF1ZXN0ICovCiAjZGVmaW5lIEUxMDAwX0VFQ0RfR05UICAgICAgIDB4MDAwMDAwODAgLyogTlZNIEFjY2VzcyBHcmFudCAqLwogI2RlZmluZSBFMTAwMF9FRUNEX1NJWkUgICAgICAweDAwMDAwMjAwIC8qIE5WTSBTaXplICgwPTY0IHdvcmQgMT0yNTYgd29yZCkgKi8KLSNkZWZpbmUgRTEwMDBfRUVDRF9BRERSX0JJVFMgMHgwMDAwMDQwMCAvKiBOVk0gQWRkcmVzc2luZyBiaXRzIGJhc2VkIG9uIHR5cGUKLQkJCQkJICogKDAtc21hbGwsIDEtbGFyZ2UpICovCisvKiBOVk0gQWRkcmVzc2luZyBiaXRzIGJhc2VkIG9uIHR5cGUgKDAtc21hbGwsIDEtbGFyZ2UpICovCisjZGVmaW5lIEUxMDAwX0VFQ0RfQUREUl9CSVRTIDB4MDAwMDA0MDAKICNkZWZpbmUgRTEwMDBfTlZNX0dSQU5UX0FUVEVNUFRTICAgMTAwMCAvKiBOVk0gIyBhdHRlbXB0cyB0byBnYWluIGdyYW50ICovCiAjZGVmaW5lIEUxMDAwX0VFQ0RfQVVUT19SRCAgICAgICAgICAweDAwMDAwMjAwICAvKiBOVk0gQXV0byBSZWFkIGRvbmUgKi8KICNkZWZpbmUgRTEwMDBfRUVDRF9TSVpFX0VYX01BU0sgICAgIDB4MDAwMDc4MDAgIC8qIE5WTSBTaXplICovCkBAIC02MjYsNyArNjMxLDggQEAKICNkZWZpbmUgTUFYX1BIWV9NVUxUSV9QQUdFX1JFRyAweEYKIAogLyogQml0IGRlZmluaXRpb25zIGZvciB2YWxpZCBQSFkgSURzLiAqLwotLyogSSA9IEludGVncmF0ZWQKKy8qCisgKiBJID0gSW50ZWdyYXRlZAogICogRSA9IEV4dGVybmFsCiAgKi8KICNkZWZpbmUgTTg4RTEwMDBfRV9QSFlfSUQgICAgMHgwMTQxMEM1MApAQCAtNjUzLDM3ICs2NTksMzcgQEAKICNkZWZpbmUgTTg4RTEwMDBfUFNDUl9NRElfTUFOVUFMX01PREUgIDB4MDAwMCAgLyogTURJIENyb3Nzb3ZlciBNb2RlIGJpdHMgNjo1ICovCiAJCQkJCSAgICAgICAvKiBNYW51YWwgTURJIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgTTg4RTEwMDBfUFNDUl9NRElYX01BTlVBTF9NT0RFIDB4MDAyMCAgLyogTWFudWFsIE1ESVggY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNODhFMTAwMF9QU0NSX0FVVE9fWF8xMDAwVCAgICAgMHgwMDQwICAvKiAxMDAwQkFTRS1UOiBBdXRvIGNyb3Nzb3ZlciwKLQkJCQkJCSogIDEwMEJBU0UtVFgvMTBCQVNFLVQ6Ci0JCQkJCQkqICBNREkgTW9kZQotCQkJCQkJKi8KLSNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BVVRPX1hfTU9ERSAgICAgIDB4MDA2MCAgLyogQXV0byBjcm9zc292ZXIgZW5hYmxlZAotCQkJCQkJKiBhbGwgc3BlZWRzLgotCQkJCQkJKi8KLQkJCQkJLyogMT1FbmFibGUgRXh0ZW5kZWQgMTBCQVNFLVQgZGlzdGFuY2UKLQkJCQkJICogKExvd2VyIDEwQkFTRS1UIFJYIFRocmVzaG9sZCkKLQkJCQkJICogMD1Ob3JtYWwgMTBCQVNFLVQgUlggVGhyZXNob2xkICovCi0JCQkJCS8qIDE9NS1CaXQgaW50ZXJmYWNlIGluIDEwMEJBU0UtVFgKLQkJCQkJICogMD1NSUkgaW50ZXJmYWNlIGluIDEwMEJBU0UtVFggKi8KLSNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BU1NFUlRfQ1JTX09OX1RYICAgICAweDA4MDAgLyogMT1Bc3NlcnQgQ1JTIG9uIFRyYW5zbWl0ICovCisvKiAxMDAwQkFTRS1UOiBBdXRvIGNyb3Nzb3ZlciwgMTAwQkFTRS1UWC8xMEJBU0UtVDogTURJIE1vZGUgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BVVRPX1hfMTAwMFQgICAgIDB4MDA0MAorLyogQXV0byBjcm9zc292ZXIgZW5hYmxlZCBhbGwgc3BlZWRzICovCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfQVVUT19YX01PREUgICAgICAweDAwNjAKKy8qCisgKiAxPUVuYWJsZSBFeHRlbmRlZCAxMEJBU0UtVCBkaXN0YW5jZSAoTG93ZXIgMTBCQVNFLVQgUnggVGhyZXNob2xkKQorICogMD1Ob3JtYWwgMTBCQVNFLVQgUnggVGhyZXNob2xkCisgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BU1NFUlRfQ1JTX09OX1RYIDB4MDgwMCAvKiAxPUFzc2VydCBDUlMgb24gVHJhbnNtaXQgKi8KIAogLyogTTg4RTEwMDAgUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBNODhFMTAwMF9QU1NSX1JFVl9QT0xBUklUWSAgICAgICAweDAwMDIgLyogMT1Qb2xhcml0eSByZXZlcnNlZCAqLwogI2RlZmluZSBNODhFMTAwMF9QU1NSX0RPV05TSElGVCAgICAgICAgICAweDAwMjAgLyogMT1Eb3duc2hpZnRlZCAqLwogI2RlZmluZSBNODhFMTAwMF9QU1NSX01ESVggICAgICAgICAgICAgICAweDAwNDAgLyogMT1NRElYOyAwPU1ESSAqLwotI2RlZmluZSBNODhFMTAwMF9QU1NSX0NBQkxFX0xFTkdUSCAgICAgICAweDAzODAgLyogMD08NTBNOzE9NTAtODBNOzI9ODAtMTEwTTsKLQkJCQkJICAgICogMz0xMTAtMTQwTTs0PT4xNDBNICovCisvKiAwPTw1ME07IDE9NTAtODBNOyAyPTgwLTExME07IDM9MTEwLTE0ME07IDQ9PjE0ME0gKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNTUl9DQUJMRV9MRU5HVEggICAgICAgMHgwMzgwCiAjZGVmaW5lIE04OEUxMDAwX1BTU1JfU1BFRUQgICAgICAgICAgICAgIDB4QzAwMCAvKiBTcGVlZCwgYml0cyAxNDoxNSAqLwogI2RlZmluZSBNODhFMTAwMF9QU1NSXzEwMDBNQlMgICAgICAgICAgICAweDgwMDAgLyogMTA9MTAwME1icyAqLwogCiAjZGVmaW5lIE04OEUxMDAwX1BTU1JfQ0FCTEVfTEVOR1RIX1NISUZUIDcKIAotLyogTnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgYXR0ZW1wdCB0byBhdXRvbmVnb3RpYXRlIGJlZm9yZSBkb3duc2hpZnRpbmcgaWYgd2UKLSAqIGFyZSB0aGUgbWFzdGVyICovCisvKgorICogTnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgYXR0ZW1wdCB0byBhdXRvbmVnb3RpYXRlIGJlZm9yZSBkb3duc2hpZnRpbmcgaWYgd2UKKyAqIGFyZSB0aGUgbWFzdGVyCisgKi8KICNkZWZpbmUgTTg4RTEwMDBfRVBTQ1JfTUFTVEVSX0RPV05TSElGVF9NQVNLIDB4MEMwMAogI2RlZmluZSBNODhFMTAwMF9FUFNDUl9NQVNURVJfRE9XTlNISUZUXzFYICAgMHgwMDAwCi0vKiBOdW1iZXIgb2YgdGltZXMgd2Ugd2lsbCBhdHRlbXB0IHRvIGF1dG9uZWdvdGlhdGUgYmVmb3JlIGRvd25zaGlmdGluZyBpZiB3ZQotICogYXJlIHRoZSBzbGF2ZSAqLworLyoKKyAqIE51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIGF0dGVtcHQgdG8gYXV0b25lZ290aWF0ZSBiZWZvcmUgZG93bnNoaWZ0aW5nIGlmIHdlCisgKiBhcmUgdGhlIHNsYXZlCisgKi8KICNkZWZpbmUgTTg4RTEwMDBfRVBTQ1JfU0xBVkVfRE9XTlNISUZUX01BU0sgIDB4MDMwMAogI2RlZmluZSBNODhFMTAwMF9FUFNDUl9TTEFWRV9ET1dOU0hJRlRfMVggICAgMHgwMTAwCiAjZGVmaW5lIE04OEUxMDAwX0VQU0NSX1RYX0NMS18yNSAgICAgIDB4MDA3MCAvKiAyNSAgTUh6IFRYX0NMSyAqLwpAQCAtNjkyLDcgKzY5OCw4IEBACiAjZGVmaW5lIE04OEVDMDE4X0VQU0NSX0RPV05TSElGVF9DT1VOVEVSX01BU0sgIDB4MEUwMAogI2RlZmluZSBNODhFQzAxOF9FUFNDUl9ET1dOU0hJRlRfQ09VTlRFUl81WCAgICAweDA4MDAKIAotLyogQml0cy4uLgorLyoKKyAqIEJpdHMuLi4KICAqIDE1LTU6IHBhZ2UKICAqIDQtMDogcmVnaXN0ZXIgb2Zmc2V0CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKaW5kZXggOGI4OGMyMi4uNWE4OWRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNDIsOCArNDIsNyBAQAogc3RydWN0IGUxMDAwX2luZm87CiAKICNkZWZpbmUgbmRldl9wcmludGsobGV2ZWwsIG5ldGRldiwgZm9ybWF0LCBhcmcuLi4pIFwKLQlwcmludGsobGV2ZWwgIiVzOiAlczogIiBmb3JtYXQsIChuZXRkZXYpLT5kZXYucGFyZW50LT5idXNfaWQsIFwKLQkgICAgICAgKG5ldGRldiktPm5hbWUsICMjIGFyZykKKwlwcmludGsobGV2ZWwgIiVzOiAiIGZvcm1hdCwgKG5ldGRldiktPm5hbWUsICMjIGFyZykKIAogI2lmZGVmIERFQlVHCiAjZGVmaW5lIG5kZXZfZGJnKG5ldGRldiwgZm9ybWF0LCBhcmcuLi4pIFwKQEAgLTYyLDcgKzYxLDcgQEAKIAluZGV2X3ByaW50ayhLRVJOX05PVElDRSAsIG5ldGRldiwgZm9ybWF0LCAjIyBhcmcpCiAKIAotLyogVFgvUlggZGVzY3JpcHRvciBkZWZpbmVzICovCisvKiBUeC9SeCBkZXNjcmlwdG9yIGRlZmluZXMgKi8KICNkZWZpbmUgRTEwMDBfREVGQVVMVF9UWEQJCTI1NgogI2RlZmluZSBFMTAwMF9NQVhfVFhECQkJNDA5NgogI2RlZmluZSBFMTAwMF9NSU5fVFhECQkJODAKQEAgLTExNSwxMyArMTE0LDEzIEBACiAJZG1hX2FkZHJfdCBkbWE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bmlvbiB7Ci0JCS8qIFRYICovCisJCS8qIFR4ICovCiAJCXN0cnVjdCB7CiAJCQl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7CiAJCQl1MTYgbGVuZ3RoOwogCQkJdTE2IG5leHRfdG9fd2F0Y2g7CiAJCX07Ci0JCS8qIFJYICovCisJCS8qIFJ4ICovCiAJCS8qIGFycmF5cyBvZiBwYWdlIGluZm9ybWF0aW9uIGZvciBwYWNrZXQgc3BsaXQgKi8KIAkJc3RydWN0IGUxMDAwX3BzX3BhZ2UgKnBzX3BhZ2VzOwogCX07CkBAIC0xNjgsOSArMTY3LDYgQEAKIAogCXNwaW5sb2NrX3QgdHhfcXVldWVfbG9jazsgLyogcHJldmVudCBjb25jdXJyZW50IHRhaWwgdXBkYXRlcyAqLwogCi0JLyogdGhpcyBpcyBzdGlsbCBuZWVkZWQgZm9yIDgyNTcxIGFuZCBhYm92ZSAqLwotCWF0b21pY190IGlycV9zZW07Ci0KIAkvKiB0cmFjayBkZXZpY2UgdXAvZG93bi90ZXN0aW5nIHN0YXRlICovCiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIApAQCAtMTgxLDcgKzE3Nyw3IEBACiAJdTE2IHJ4X2l0cjsKIAogCS8qCi0JICogVFgKKwkgKiBUeAogCSAqLwogCXN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nIC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCiAJCQkJCQlfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwpAQCAtMjAzLDcgKzE5OSw3IEBACiAJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9wYWNrZXRzOwogCi0JLyogVFggc3RhdHMgKi8KKwkvKiBUeCBzdGF0cyAqLwogCXU2NCB0cHRfb2xkOwogCXU2NCBjb2xjX29sZDsKIAl1NjQgZ290Y2xfb2xkOwpAQCAtMjE1LDcgKzIxMSw3IEBACiAJdTMyIHR4X2RtYV9mYWlsZWQ7CiAKIAkvKgotCSAqIFJYCisJICogUngKIAkgKi8KIAlib29sICgqY2xlYW5fcngpIChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQpAQCAtMjI3LDcgKzIyMyw3IEBACiAJdTMyIHJ4X2ludF9kZWxheTsKIAl1MzIgcnhfYWJzX2ludF9kZWxheTsKIAotCS8qIFJYIHN0YXRzICovCisJLyogUnggc3RhdHMgKi8KIAl1NjQgaHdfY3N1bV9lcnI7CiAJdTY0IGh3X2NzdW1fZ29vZDsKIAl1NjQgcnhfaGRyX3NwbGl0OwpAQCAtMjM4LDYgKzIzNCw4IEBACiAKIAl1bnNpZ25lZCBpbnQgcnhfcHNfcGFnZXM7CiAJdTE2IHJ4X3BzX2JzaXplMDsKKwl1MzIgbWF4X2ZyYW1lX3NpemU7CisJdTMyIG1pbl9mcmFtZV9zaXplOwogCiAJLyogT1MgZGVmaW5lZCBzdHJ1Y3RzICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKQEAgLTI2Miw3ICsyNjAsNyBAQAogCXUzMiB3b2w7CiAJdTMyIHBiYTsKIAotCXU4IGZjX2F1dG9uZWc7CisJYm9vbCBmY19hdXRvbmVnOwogCiAJdW5zaWduZWQgbG9uZyBsZWRfc3RhdHVzOwogCkBAIC0yNzMsNyArMjcxLDcgQEAKIAllbnVtIGUxMDAwX21hY190eXBlCW1hYzsKIAl1bnNpZ25lZCBpbnQJCWZsYWdzOwogCXUzMgkJCXBiYTsKLQlzMzIJCQkoKmdldF9pbnZhcmlhbnRzKShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKTsKKwlzMzIJCQkoKmdldF92YXJpYW50cykoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKik7CiAJc3RydWN0IGUxMDAwX21hY19vcGVyYXRpb25zICptYWNfb3BzOwogCXN0cnVjdCBlMTAwMF9waHlfb3BlcmF0aW9ucyAqcGh5X29wczsKIAlzdHJ1Y3QgZTEwMDBfbnZtX29wZXJhdGlvbnMgKm52bV9vcHM7CkBAIC0zMDksNiArMzA3LDcgQEAKICNkZWZpbmUgRkxBR19NU0lfRU5BQkxFRCAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQogI2RlZmluZSBGTEFHX1JYX0NTVU1fRU5BQkxFRCAgICAgICAgICAgICAgKDEgPDwgMjgpCiAjZGVmaW5lIEZMQUdfVFNPX0ZPUkNFICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgRkxBR19SWF9SRVNUQVJUX05PVyAgICAgICAgICAgICAgICgxIDw8IDMwKQogCiAjZGVmaW5lIEUxMDAwX1JYX0RFU0NfUFMoUiwgaSkJICAgIFwKIAkoJigoKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0ICopKChSKS5kZXNjKSlbaV0pKQpAQCAtMzU4LDcgKzM1Nyw3IEBACiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoOV9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2VzMl9pbmZvOwogCi1leHRlcm4gczMyIGUxMDAwZV9yZWFkX3BhcnRfbnVtKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqcGFydF9udW0pOworZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9wYmFfbnVtKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqcGJhX251bSk7CiAKIGV4dGVybiBzMzIgIGUxMDAwZV9jb21taXRfcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCkBAIC0zOTEsOSArMzkwLDExIEBACiBleHRlcm4gczMyIGUxMDAwZV9zZXR1cF9saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX2NsZWFyX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgcmFyX2NvdW50KTsKLWV4dGVybiB2b2lkIGUxMDAwZV9tY19hZGRyX2xpc3RfdXBkYXRlX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodywKLQkJCQkgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCi0JCQkJICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCk7CitleHRlcm4gdm9pZCBlMTAwMGVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcsCisJCQkJCSAgICAgICB1OCAqbWNfYWRkcl9saXN0LAorCQkJCQkgICAgICAgdTMyIG1jX2FkZHJfY291bnQsCisJCQkJCSAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsCisJCQkJCSAgICAgICB1MzIgcmFyX2NvdW50KTsKIGV4dGVybiB2b2lkIGUxMDAwZV9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICphZGRyLCB1MzIgaW5kZXgpOwogZXh0ZXJuIHMzMiBlMTAwMGVfc2V0X2ZjX3dhdGVybWFya3Moc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfc2V0X3BjaWVfbm9fc25vb3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG5vX3Nub29wKTsKQEAgLTQ2Myw3ICs0NjQsNiBAQAogZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfbnZtX3NwaShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwZV91cGRhdGVfbnZtX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9wb2xsX2VlcmRfZWV3cl9kb25lKHN0cnVjdCBlMTAwMF9odyAqaHcsIGludCBlZV9yZWcpOwotZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9udm1fc3BpKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKIGV4dGVybiBzMzIgZTEwMDBlX3JlYWRfbnZtX2VlcmQoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMGVfdmFsaWRhdGVfbnZtX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfcmVsZWFzZV9udm0oc3RydWN0IGUxMDAwX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKaW5kZXggODg2NTdhZC4uZDU5YTk5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwMDAgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC05Miw3ICs5Miw4IEBACiAvKiBJbi1CYW5kIENvbnRyb2wgUmVnaXN0ZXIgKFBhZ2UgMTk0LCBSZWdpc3RlciAxOCkgKi8KICNkZWZpbmUgR0c4MjU2M19JQ1JfRElTX1BBRERJTkcJCQkgMHgwMDEwIC8qIERpc2FibGUgUGFkZGluZyAqLwogCi0vKiBBIHRhYmxlIGZvciB0aGUgR0c4MjU2MyBjYWJsZSBsZW5ndGggd2hlcmUgdGhlIHJhbmdlIGlzIGRlZmluZWQKKy8qCisgKiBBIHRhYmxlIGZvciB0aGUgR0c4MjU2MyBjYWJsZSBsZW5ndGggd2hlcmUgdGhlIHJhbmdlIGlzIGRlZmluZWQKICAqIHdpdGggYSBsb3dlciBib3VuZCBhdCAiaW5kZXgiIGFuZCB0aGUgdXBwZXIgYm91bmQgYXQKICAqICJpbmRleCArIDUiLgogICovCkBAIC0xMTgsNyArMTE5LDcgQEAKIAlzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeSA9ICZody0+cGh5OwogCXMzMiByZXRfdmFsOwogCi0JaWYgKGh3LT5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlwaHktPnR5cGUJPSBlMTAwMF9waHlfbm9uZTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTY3LDE1ICsxNjgsMjAgQEAKIAkJYnJlYWs7CiAJfQogCi0JbnZtLT50eXBlCSAgICAgICA9IGUxMDAwX252bV9lZXByb21fc3BpOworCW52bS0+dHlwZSA9IGUxMDAwX252bV9lZXByb21fc3BpOwogCiAJc2l6ZSA9ICh1MTYpKChlZWNkICYgRTEwMDBfRUVDRF9TSVpFX0VYX01BU0spID4+CiAJCQkgIEUxMDAwX0VFQ0RfU0laRV9FWF9TSElGVCk7CiAKLQkvKiBBZGRlZCB0byBhIGNvbnN0YW50LCAic2l6ZSIgYmVjb21lcyB0aGUgbGVmdC1zaGlmdCB2YWx1ZQorCS8qCisJICogQWRkZWQgdG8gYSBjb25zdGFudCwgInNpemUiIGJlY29tZXMgdGhlIGxlZnQtc2hpZnQgdmFsdWUKIAkgKiBmb3Igc2V0dGluZyB3b3JkX3NpemUuCiAJICovCiAJc2l6ZSArPSBOVk1fV09SRF9TSVpFX0JBU0VfU0hJRlQ7CisKKwkvKiBFRVBST00gYWNjZXNzIGFib3ZlIDE2ayBpcyB1bnN1cHBvcnRlZCAqLworCWlmIChzaXplID4gMTQpCisJCXNpemUgPSAxNDsKIAludm0tPndvcmRfc2l6ZQk9IDEgPDwgc2l6ZTsKIAogCXJldHVybiAwOwpAQCAtMTk2LDEwICsyMDIsMTAgQEAKIAkvKiBTZXQgbWVkaWEgdHlwZSAqLwogCXN3aXRjaCAoYWRhcHRlci0+cGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fU0VSREVTX0RQVDoKLQkJaHctPm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlczsKKwkJaHctPnBoeS5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI7CisJCWh3LT5waHkubWVkaWFfdHlwZSA9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyOwogCQlicmVhazsKIAl9CiAKQEAgLTIwOCwxMSArMjE0LDEwIEBACiAJLyogU2V0IHJhciBlbnRyeSBjb3VudCAqLwogCW1hYy0+cmFyX2VudHJ5X2NvdW50ID0gRTEwMDBfUkFSX0VOVFJJRVM7CiAJLyogU2V0IGlmIG1hbmFnZWFiaWxpdHkgZmVhdHVyZXMgYXJlIGVuYWJsZWQuICovCi0JbWFjLT5hcmNfc3Vic3lzdGVtX3ZhbGlkID0KLQkJKGVyMzIoRldTTSkgJiBFMTAwMF9GV1NNX01PREVfTUFTSykgPyAxIDogMDsKKwltYWMtPmFyY19zdWJzeXN0ZW1fdmFsaWQgPSAoZXIzMihGV1NNKSAmIEUxMDAwX0ZXU01fTU9ERV9NQVNLKSA/IDEgOiAwOwogCiAJLyogY2hlY2sgZm9yIGxpbmsgKi8KLQlzd2l0Y2ggKGh3LT5tZWRpYV90eXBlKSB7CisJc3dpdGNoIChody0+cGh5Lm1lZGlhX3R5cGUpIHsKIAljYXNlIGUxMDAwX21lZGlhX3R5cGVfY29wcGVyOgogCQlmdW5jLT5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UgPSBlMTAwMF9zZXR1cF9jb3BwZXJfbGlua184MDAwM2VzMmxhbjsKIAkJZnVuYy0+Y2hlY2tfZm9yX2xpbmsgPSBlMTAwMGVfY2hlY2tfZm9yX2NvcHBlcl9saW5rOwpAQCAtMjMzLDcgKzIzOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzMzIgZTEwMDBfZ2V0X2ludmFyaWFudHNfODAwMDNlczJsYW4oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgczMyIGUxMDAwX2dldF92YXJpYW50c184MDAwM2VzMmxhbihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXMzMiByYzsKQEAgLTM0NCw4ICszNDksMTAgQEAKIAkJaWYgKCEoc3dmd19zeW5jICYgKGZ3bWFzayB8IHN3bWFzaykpKQogCQkJYnJlYWs7CiAKLQkJLyogRmlybXdhcmUgY3VycmVudGx5IHVzaW5nIHJlc291cmNlIChmd21hc2spCi0JCSAqIG9yIG90aGVyIHNvZnR3YXJlIHRocmVhZCB1c2luZyByZXNvdXJjZSAoc3dtYXNrKSAqLworCQkvKgorCQkgKiBGaXJtd2FyZSBjdXJyZW50bHkgdXNpbmcgcmVzb3VyY2UgKGZ3bWFzaykKKwkJICogb3Igb3RoZXIgc29mdHdhcmUgdGhyZWFkIHVzaW5nIHJlc291cmNlIChzd21hc2spCisJCSAqLwogCQllMTAwMGVfcHV0X2h3X3NlbWFwaG9yZShodyk7CiAJCW1kZWxheSg1KTsKIAkJaSsrOwpAQCAtNDA3LDcgKzQxNCw4IEBACiAJaWYgKChvZmZzZXQgJiBNQVhfUEhZX1JFR19BRERSRVNTKSA8IEdHODI1NjNfTUlOX0FMVF9SRUcpCiAJCXBhZ2Vfc2VsZWN0ID0gR0c4MjU2M19QSFlfUEFHRV9TRUxFQ1Q7CiAJZWxzZQotCQkvKiBVc2UgQWx0ZXJuYXRpdmUgUGFnZSBTZWxlY3QgcmVnaXN0ZXIgdG8gYWNjZXNzCisJCS8qCisJCSAqIFVzZSBBbHRlcm5hdGl2ZSBQYWdlIFNlbGVjdCByZWdpc3RlciB0byBhY2Nlc3MKIAkJICogcmVnaXN0ZXJzIDMwIGFuZCAzMQogCQkgKi8KIAkJcGFnZV9zZWxlY3QgPSBHRzgyNTYzX1BIWV9QQUdFX1NFTEVDVF9BTFQ7CkBAIC00MTcsNyArNDI1LDggQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQkvKiBUaGUgInJlYWR5IiBiaXQgaW4gdGhlIE1ESUMgcmVnaXN0ZXIgbWF5IGJlIGluY29ycmVjdGx5IHNldAorCS8qCisJICogVGhlICJyZWFkeSIgYml0IGluIHRoZSBNRElDIHJlZ2lzdGVyIG1heSBiZSBpbmNvcnJlY3RseSBzZXQKIAkgKiBiZWZvcmUgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSAiUGFnZSBTZWxlY3QiIE1ESQogCSAqIHRyYW5zYWN0aW9uLiAgU28gd2Ugd2FpdCAyMDB1cyBhZnRlciBlYWNoIE1ESSBjb21tYW5kLi4uCiAJICovCkBAIC00NjIsNyArNDcxLDggQEAKIAlpZiAoKG9mZnNldCAmIE1BWF9QSFlfUkVHX0FERFJFU1MpIDwgR0c4MjU2M19NSU5fQUxUX1JFRykKIAkJcGFnZV9zZWxlY3QgPSBHRzgyNTYzX1BIWV9QQUdFX1NFTEVDVDsKIAllbHNlCi0JCS8qIFVzZSBBbHRlcm5hdGl2ZSBQYWdlIFNlbGVjdCByZWdpc3RlciB0byBhY2Nlc3MKKwkJLyoKKwkJICogVXNlIEFsdGVybmF0aXZlIFBhZ2UgU2VsZWN0IHJlZ2lzdGVyIHRvIGFjY2VzcwogCQkgKiByZWdpc3RlcnMgMzAgYW5kIDMxCiAJCSAqLwogCQlwYWdlX3NlbGVjdCA9IEdHODI1NjNfUEhZX1BBR0VfU0VMRUNUX0FMVDsKQEAgLTQ3Myw3ICs0ODMsOCBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAogCi0JLyogVGhlICJyZWFkeSIgYml0IGluIHRoZSBNRElDIHJlZ2lzdGVyIG1heSBiZSBpbmNvcnJlY3RseSBzZXQKKwkvKgorCSAqIFRoZSAicmVhZHkiIGJpdCBpbiB0aGUgTURJQyByZWdpc3RlciBtYXkgYmUgaW5jb3JyZWN0bHkgc2V0CiAJICogYmVmb3JlIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgIlBhZ2UgU2VsZWN0IiBNREkKIAkgKiB0cmFuc2FjdGlvbi4gIFNvIHdlIHdhaXQgMjAwdXMgYWZ0ZXIgZWFjaCBNREkgY29tbWFuZC4uLgogCSAqLwpAQCAtNTU0LDcgKzU2NSw4IEBACiAJdTE2IHBoeV9kYXRhOwogCWJvb2wgbGluazsKIAotCS8qIENsZWFyIEF1dG8tQ3Jvc3NvdmVyIHRvIGZvcmNlIE1ESSBtYW51YWxseS4gIE04OEUxMDAwIHJlcXVpcmVzIE1ESQorCS8qCisJICogQ2xlYXIgQXV0by1Dcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiAgTTg4RTEwMDAgcmVxdWlyZXMgTURJCiAJICogZm9yY2VkIHdoZW5ldmVyIHNwZWVkIGFuZCBkdXBsZXggYXJlIGZvcmNlZC4KIAkgKi8KIAlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CkBAIC01ODMsNyArNTk1LDcgQEAKIAogCXVkZWxheSgxKTsKIAotCWlmIChody0+cGh5LndhaXRfZm9yX2xpbmspIHsKKwlpZiAoaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKIAkJaHdfZGJnKGh3LCAiV2FpdGluZyBmb3IgZm9yY2VkIHNwZWVkL2R1cGxleCBsaW5rICIKIAkJCSAib24gR0c4MjU2MyBwaHkuXG4iKTsKIApAQCAtNTkzLDcgKzYwNSw4IEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAogCQlpZiAoIWxpbmspIHsKLQkJCS8qIFdlIGRpZG4ndCBnZXQgbGluay4KKwkJCS8qCisJCQkgKiBXZSBkaWRuJ3QgZ2V0IGxpbmsuCiAJCQkgKiBSZXNldCB0aGUgRFNQIGFuZCBjcm9zcyBvdXIgZmluZ2Vycy4KIAkJCSAqLwogCQkJcmV0X3ZhbCA9IGUxMDAwZV9waHlfcmVzZXRfZHNwKGh3KTsKQEAgLTYxMiw3ICs2MjUsOCBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCS8qIFJlc2V0dGluZyB0aGUgcGh5IG1lYW5zIHdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBUWF9DTEsgY29ycmVzcG9uZHMKKwkvKgorCSAqIFJlc2V0dGluZyB0aGUgcGh5IG1lYW5zIHdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBUWF9DTEsgY29ycmVzcG9uZHMKIAkgKiB0byB0aGUgbGluayBzcGVlZC4gIDEwTWJwcyAtPiAyLjVNSHosIGVsc2UgMjVNSHouCiAJICovCiAJcGh5X2RhdGEgJj0gfkdHODI1NjNfTVNDUl9UWF9DTEtfTUFTSzsKQEAgLTYyMSw3ICs2MzUsOCBAQAogCWVsc2UKIAkJcGh5X2RhdGEgfD0gR0c4MjU2M19NU0NSX1RYX0NMS18xMDBNQlBTXzI1OwogCi0JLyogSW4gYWRkaXRpb24sIHdlIG11c3QgcmUtZW5hYmxlIENSUyBvbiBUeCBmb3IgYm90aCBoYWxmIGFuZCBmdWxsCisJLyoKKwkgKiBJbiBhZGRpdGlvbiwgd2UgbXVzdCByZS1lbmFibGUgQ1JTIG9uIFR4IGZvciBib3RoIGhhbGYgYW5kIGZ1bGwKIAkgKiBkdXBsZXguCiAJICovCiAJcGh5X2RhdGEgfD0gR0c4MjU2M19NU0NSX0FTU0VSVF9DUlNfT05fVFg7CkBAIC02NzEsNyArNjg2LDcgQEAKIHsKIAlzMzIgcmV0X3ZhbDsKIAotCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJcmV0X3ZhbCA9IGUxMDAwZV9nZXRfc3BlZWRfYW5kX2R1cGxleF9jb3BwZXIoaHcsCiAJCQkJCQkJCSAgICBzcGVlZCwKIAkJCQkJCQkJICAgIGR1cGxleCk7CkBAIC03MDQsNyArNzE5LDggQEAKIAl1MzIgaWNyOwogCXMzMiByZXRfdmFsOwogCi0JLyogUHJldmVudCB0aGUgUENJLUUgYnVzIGZyb20gc3RpY2tpbmcgaWYgdGhlcmUgaXMgbm8gVExQIGNvbm5lY3Rpb24KKwkvKgorCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIHN0aWNraW5nIGlmIHRoZXJlIGlzIG5vIFRMUCBjb25uZWN0aW9uCiAJICogb24gdGhlIGxhc3QgVExQIHJlYWQvd3JpdGUgdHJhbnNhY3Rpb24gd2hlbiBNQUMgaXMgcmVzZXQuCiAJICovCiAJcmV0X3ZhbCA9IGUxMDAwZV9kaXNhYmxlX3BjaWVfbWFzdGVyKGh3KTsKQEAgLTc3NiwxNiArNzkyLDE2IEBACiAJcmV0X3ZhbCA9IGUxMDAwZV9zZXR1cF9saW5rKGh3KTsKIAogCS8qIFNldCB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciB3cml0ZS1iYWNrIHBvbGljeSAqLwotCXJlZ19kYXRhID0gZXIzMihUWERDVEwpOworCXJlZ19kYXRhID0gZXIzMihUWERDVEwoMCkpOwogCXJlZ19kYXRhID0gKHJlZ19kYXRhICYgfkUxMDAwX1RYRENUTF9XVEhSRVNIKSB8CiAJCSAgIEUxMDAwX1RYRENUTF9GVUxMX1RYX0RFU0NfV0IgfCBFMTAwMF9UWERDVExfQ09VTlRfREVTQzsKLQlldzMyKFRYRENUTCwgcmVnX2RhdGEpOworCWV3MzIoVFhEQ1RMKDApLCByZWdfZGF0YSk7CiAKIAkvKiAuLi5mb3IgYm90aCBxdWV1ZXMuICovCi0JcmVnX2RhdGEgPSBlcjMyKFRYRENUTDEpOworCXJlZ19kYXRhID0gZXIzMihUWERDVEwoMSkpOwogCXJlZ19kYXRhID0gKHJlZ19kYXRhICYgfkUxMDAwX1RYRENUTF9XVEhSRVNIKSB8CiAJCSAgIEUxMDAwX1RYRENUTF9GVUxMX1RYX0RFU0NfV0IgfCBFMTAwMF9UWERDVExfQ09VTlRfREVTQzsKLQlldzMyKFRYRENUTDEsIHJlZ19kYXRhKTsKKwlldzMyKFRYRENUTCgxKSwgcmVnX2RhdGEpOwogCiAJLyogRW5hYmxlIHJldHJhbnNtaXQgb24gbGF0ZSBjb2xsaXNpb25zICovCiAJcmVnX2RhdGEgPSBlcjMyKFRDVEwpOwpAQCAtODA4LDcgKzgyNCw4IEBACiAJcmVnX2RhdGEgJj0gfjB4MDAxMDAwMDA7CiAJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9GRkxULCAweDAwMDEsIHJlZ19kYXRhKTsKIAotCS8qIENsZWFyIGFsbCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgKGNsZWFyIG9uIHJlYWQpLiAgSXQgaXMKKwkvKgorCSAqIENsZWFyIGFsbCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgKGNsZWFyIG9uIHJlYWQpLiAgSXQgaXMKIAkgKiBpbXBvcnRhbnQgdGhhdCB3ZSBkbyB0aGlzIGFmdGVyIHdlIGhhdmUgdHJpZWQgdG8gZXN0YWJsaXNoIGxpbmsKIAkgKiBiZWNhdXNlIHRoZSBzeW1ib2wgZXJyb3IgY291bnQgd2lsbCBpbmNyZW1lbnQgd2lsZGx5IGlmIHRoZXJlCiAJICogaXMgbm8gbGluay4KQEAgLTgyOSwyOSArODQ2LDI5IEBACiAJdTMyIHJlZzsKIAogCS8qIFRyYW5zbWl0IERlc2NyaXB0b3IgQ29udHJvbCAwICovCi0JcmVnID0gZXIzMihUWERDVEwpOworCXJlZyA9IGVyMzIoVFhEQ1RMKDApKTsKIAlyZWcgfD0gKDEgPDwgMjIpOwotCWV3MzIoVFhEQ1RMLCByZWcpOworCWV3MzIoVFhEQ1RMKDApLCByZWcpOwogCiAJLyogVHJhbnNtaXQgRGVzY3JpcHRvciBDb250cm9sIDEgKi8KLQlyZWcgPSBlcjMyKFRYRENUTDEpOworCXJlZyA9IGVyMzIoVFhEQ1RMKDEpKTsKIAlyZWcgfD0gKDEgPDwgMjIpOwotCWV3MzIoVFhEQ1RMMSwgcmVnKTsKKwlldzMyKFRYRENUTCgxKSwgcmVnKTsKIAogCS8qIFRyYW5zbWl0IEFyYml0cmF0aW9uIENvbnRyb2wgMCAqLwotCXJlZyA9IGVyMzIoVEFSQzApOworCXJlZyA9IGVyMzIoVEFSQygwKSk7CiAJcmVnICY9IH4oMHhGIDw8IDI3KTsgLyogMzA6MjcgKi8KLQlpZiAoaHctPm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKIAkJcmVnICY9IH4oMSA8PCAyMCk7Ci0JZXczMihUQVJDMCwgcmVnKTsKKwlldzMyKFRBUkMoMCksIHJlZyk7CiAKIAkvKiBUcmFuc21pdCBBcmJpdHJhdGlvbiBDb250cm9sIDEgKi8KLQlyZWcgPSBlcjMyKFRBUkMxKTsKKwlyZWcgPSBlcjMyKFRBUkMoMSkpOwogCWlmIChlcjMyKFRDVEwpICYgRTEwMDBfVENUTF9NVUxSKQogCQlyZWcgJj0gfigxIDw8IDI4KTsKIAllbHNlCiAJCXJlZyB8PSAoMSA8PCAyOCk7Ci0JZXczMihUQVJDMSwgcmVnKTsKKwlldzMyKFRBUkMoMSksIHJlZyk7CiB9CiAKIC8qKgpAQCAtODgxLDcgKzg5OCw4IEBACiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOwogCi0JLyogT3B0aW9uczoKKwkvKgorCSAqIE9wdGlvbnM6CiAJICogICBNREkvTURJLVggPSAwIChkZWZhdWx0KQogCSAqICAgMCAtIEF1dG8gZm9yIGFsbCBzcGVlZHMKIAkgKiAgIDEgLSBNREkgbW9kZQpAQCAtOTA3LDcgKzkyNSw4IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIE9wdGlvbnM6CisJLyoKKwkgKiBPcHRpb25zOgogCSAqICAgZGlzYWJsZV9wb2xhcml0eV9jb3JyZWN0aW9uID0gMCAoZGVmYXVsdCkKIAkgKiAgICAgICBBdXRvbWF0aWMgQ29ycmVjdGlvbiBmb3IgUmV2ZXJzZWQgQ2FibGUgUG9sYXJpdHkKIAkgKiAgIDAgLSBEaXNhYmxlZApAQCAtOTI4LDEwICs5NDcsOSBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQkvKiBCeXBhc3MgUlggYW5kIFRYIEZJRk8ncyAqLwotCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfa21ybl9yZWcoaHcsCi0JCQkJRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX0ZJRk9fQ1RSTCwKLQkJCQlFMTAwMF9LTVJOQ1RSTFNUQV9GSUZPX0NUUkxfUlhfQllQQVNTIHwKKwkvKiBCeXBhc3MgUnggYW5kIFR4IEZJRk8ncyAqLworCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfa21ybl9yZWcoaHcsIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVF9GSUZPX0NUUkwsCisJCQkJCUUxMDAwX0tNUk5DVFJMU1RBX0ZJRk9fQ1RSTF9SWF9CWVBBU1MgfAogCQkJCQlFMTAwMF9LTVJOQ1RSTFNUQV9GSUZPX0NUUkxfVFhfQllQQVNTKTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CkBAIC05NTMsNyArOTcxLDggQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQkvKiBEbyBub3QgaW5pdCB0aGVzZSByZWdpc3RlcnMgd2hlbiB0aGUgSFcgaXMgaW4gSUFNVCBtb2RlLCBzaW5jZSB0aGUKKwkvKgorCSAqIERvIG5vdCBpbml0IHRoZXNlIHJlZ2lzdGVycyB3aGVuIHRoZSBIVyBpcyBpbiBJQU1UIG1vZGUsIHNpbmNlIHRoZQogCSAqIGZpcm13YXJlIHdpbGwgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoZW0uICBXZSBvbmx5IGluaXRpYWxpemUKIAkgKiB0aGVtIGlmIHRoZSBIVyBpcyBub3QgaW4gSUFNVCBtb2RlLgogCSAqLwpAQCAtOTc0LDcgKzk5Myw4IEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQkvKiBXb3JrYXJvdW5kOiBEaXNhYmxlIHBhZGRpbmcgaW4gS3VtZXJhbiBpbnRlcmZhY2UgaW4gdGhlIE1BQworCS8qCisJICogV29ya2Fyb3VuZDogRGlzYWJsZSBwYWRkaW5nIGluIEt1bWVyYW4gaW50ZXJmYWNlIGluIHRoZSBNQUMKIAkgKiBhbmQgaW4gdGhlIFBIWSB0byBhdm9pZCBDUkMgZXJyb3JzLgogCSAqLwogCXJldF92YWwgPSBlMWVfcnBoeShodywgR0c4MjU2M19QSFlfSU5CQU5EX0NUUkwsICZkYXRhKTsKQEAgLTEwMDcsOSArMTAyNywxMSBAQAogCWN0cmwgJj0gfihFMTAwMF9DVFJMX0ZSQ1NQRCB8IEUxMDAwX0NUUkxfRlJDRFBYKTsKIAlldzMyKENUUkwsIGN0cmwpOwogCi0JLyogU2V0IHRoZSBtYWMgdG8gd2FpdCB0aGUgbWF4aW11bSB0aW1lIGJldHdlZW4gZWFjaAorCS8qCisJICogU2V0IHRoZSBtYWMgdG8gd2FpdCB0aGUgbWF4aW11bSB0aW1lIGJldHdlZW4gZWFjaAogCSAqIGl0ZXJhdGlvbiBhbmQgaW5jcmVhc2UgdGhlIG1heCBpdGVyYXRpb25zIHdoZW4KLQkgKiBwb2xsaW5nIHRoZSBwaHk7IHRoaXMgZml4ZXMgZXJyb25lb3VzIHRpbWVvdXRzIGF0IDEwTWJwcy4gKi8KKwkgKiBwb2xsaW5nIHRoZSBwaHk7IHRoaXMgZml4ZXMgZXJyb25lb3VzIHRpbWVvdXRzIGF0IDEwTWJwcy4KKwkgKi8KIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnKGh3LCBHRzgyNTYzX1JFRygweDM0LCA0KSwgMHhGRkZGKTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CkBAIC0xMDI2LDkgKzEwNDgsOCBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAlyZWdfZGF0YSB8PSBFMTAwMF9LTVJOQ1RSTFNUQV9JTkJfQ1RSTF9ESVNfUEFERElORzsKLQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnKGh3LAotCQkJCSAgICAgICBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVRfSU5CX0NUUkwsCi0JCQkJICAgICAgIHJlZ19kYXRhKTsKKwlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnKGh3LCBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVRfSU5CX0NUUkwsCisJCQkJCXJlZ19kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKQEAgLTEwNTYsOSArMTA3Nyw4IEBACiAJdTE2IHJlZ19kYXRhOwogCiAJcmVnX2RhdGEgPSBFMTAwMF9LTVJOQ1RSTFNUQV9IRF9DVFJMXzEwXzEwMF9ERUZBVUxUOwotCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfa21ybl9yZWcoaHcsCi0JCQkJICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVF9IRF9DVFJMLAotCQkJCSAgICAgICByZWdfZGF0YSk7CisJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9rbXJuX3JlZyhodywgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX0hEX0NUUkwsCisJCQkJCXJlZ19kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKQEAgLTEwOTYsOSArMTExNiw4IEBACiAJdTMyIHRpcGc7CiAKIAlyZWdfZGF0YSA9IEUxMDAwX0tNUk5DVFJMU1RBX0hEX0NUUkxfMTAwMF9ERUZBVUxUOwotCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfa21ybl9yZWcoaHcsCi0JCQkJICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVF9IRF9DVFJMLAotCQkJCSAgICAgICByZWdfZGF0YSk7CisJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9rbXJuX3JlZyhodywgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX0hEX0NUUkwsCisJCQkJCXJlZ19kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKQEAgLTExNzUsNyArMTE5NCw3IEBACiAJLmdldF9saW5rX3VwX2luZm8JPSBlMTAwMF9nZXRfbGlua191cF9pbmZvXzgwMDAzZXMybGFuLAogCS5sZWRfb24JCQk9IGUxMDAwZV9sZWRfb25fZ2VuZXJpYywKIAkubGVkX29mZgkJPSBlMTAwMGVfbGVkX29mZl9nZW5lcmljLAotCS5tY19hZGRyX2xpc3RfdXBkYXRlCT0gZTEwMDBlX21jX2FkZHJfbGlzdF91cGRhdGVfZ2VuZXJpYywKKwkudXBkYXRlX21jX2FkZHJfbGlzdAk9IGUxMDAwZV91cGRhdGVfbWNfYWRkcl9saXN0X2dlbmVyaWMsCiAJLnJlc2V0X2h3CQk9IGUxMDAwX3Jlc2V0X2h3XzgwMDAzZXMybGFuLAogCS5pbml0X2h3CQk9IGUxMDAwX2luaXRfaHdfODAwMDNlczJsYW4sCiAJLnNldHVwX2xpbmsJCT0gZTEwMDBlX3NldHVwX2xpbmssCkBAIC0xMjI0LDcgKzEyNDMsNyBAQAogCQkJCSAgfCBGTEFHX0RJU0FCTEVfRkNfUEFVU0VfVElNRSAvKiBlcnJhdGEgKi8KIAkJCQkgIHwgRkxBR19USVBHX01FRElVTV9GT1JfODAwMDNFU0xBTiwKIAkucGJhCQkJPSAzOCwKLQkuZ2V0X2ludmFyaWFudHMJCT0gZTEwMDBfZ2V0X2ludmFyaWFudHNfODAwMDNlczJsYW4sCisJLmdldF92YXJpYW50cwkJPSBlMTAwMF9nZXRfdmFyaWFudHNfODAwMDNlczJsYW4sCiAJLm1hY19vcHMJCT0gJmVzMl9tYWNfb3BzLAogCS5waHlfb3BzCQk9ICZlczJfcGh5X29wcywKIAkubnZtX29wcwkJPSAmZXMyX252bV9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCBmNzdhNzQyLi42ZDFiMjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMTAyLDcgKzEwMiw3IEBACiAJIkludGVycnVwdCB0ZXN0IChvZmZsaW5lKSIsICJMb29wYmFjayB0ZXN0ICAob2ZmbGluZSkiLAogCSJMaW5rIHRlc3QgICAob24vb2ZmbGluZSkiCiB9OwotI2RlZmluZSBFMTAwMF9URVNUX0xFTglBUlJBWV9TSVpFKGUxMDAwX2dzdHJpbmdzX3Rlc3QpCisjZGVmaW5lIEUxMDAwX1RFU1RfTEVOIEFSUkFZX1NJWkUoZTEwMDBfZ3N0cmluZ3NfdGVzdCkKIAogc3RhdGljIGludCBlMTAwMF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKQEAgLTExMSw3ICsxMTEsNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHN0YXR1czsKIAotCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAogCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CiAJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCi0JZWNtZC0+YXV0b25lZyA9ICgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKKwllY21kLT5hdXRvbmVnID0gKChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKIAkJCSBody0+bWFjLmF1dG9uZWcpID8gQVVUT05FR19FTkFCTEUgOiBBVVRPTkVHX0RJU0FCTEU7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODcsNyArMTg3LDcgQEAKIAltYWMtPmF1dG9uZWcgPSAwOwogCiAJLyogRmliZXIgTklDcyBvbmx5IGFsbG93IDEwMDAgZ2JwcyBGdWxsIGR1cGxleCAqLwotCWlmICgoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJgorCWlmICgoYWRhcHRlci0+aHcucGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgJiYKIAkJc3BkZHBseCAhPSAoU1BFRURfMTAwMCArIERVUExFWF9GVUxMKSkgewogCQluZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsICJVbnN1cHBvcnRlZCBTcGVlZC9EdXBsZXggIgogCQkJICJjb25maWd1cmF0aW9uXG4iKTsKQEAgLTIyNiw4ICsyMjYsMTAgQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCS8qIFdoZW4gU29ML0lERVIgc2Vzc2lvbnMgYXJlIGFjdGl2ZSwgYXV0b25lZy9zcGVlZC9kdXBsZXgKLQkgKiBjYW5ub3QgYmUgY2hhbmdlZCAqLworCS8qCisJICogV2hlbiBTb0wvSURFUiBzZXNzaW9ucyBhcmUgYWN0aXZlLCBhdXRvbmVnL3NwZWVkL2R1cGxleAorCSAqIGNhbm5vdCBiZSBjaGFuZ2VkCisJICovCiAJaWYgKGUxMDAwX2NoZWNrX3Jlc2V0X2Jsb2NrKGh3KSkgewogCQluZGV2X2VycihuZXRkZXYsICJDYW5ub3QgY2hhbmdlIGxpbmsgIgogCQkJICJjaGFyYWN0ZXJpc3RpY3Mgd2hlbiBTb0wvSURFUiBpcyBhY3RpdmUuXG4iKTsKQEAgLTIzOSw3ICsyNDEsNyBAQAogCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJaHctPm1hYy5hdXRvbmVnID0gMTsKLQkJaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpCisJCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikKIAkJCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkJCQkgICAgIEFEVkVSVElTRURfRklCUkUgfAogCQkJCQkJICAgICBBRFZFUlRJU0VEX0F1dG9uZWc7CkBAIC0yNDgsNiArMjUwLDggQEAKIAkJCQkJCSAgICAgQURWRVJUSVNFRF9UUCB8CiAJCQkJCQkgICAgIEFEVkVSVElTRURfQXV0b25lZzsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKKwkJaWYgKGFkYXB0ZXItPmZjX2F1dG9uZWcpCisJCQlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CiAJfSBlbHNlIHsKIAkJaWYgKGUxMDAwX3NldF9zcGRfZHBseChhZGFwdGVyLCBlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCkpIHsKIAkJCWNsZWFyX2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKQEAgLTI3NywxMSArMjgxLDExIEBACiAJcGF1c2UtPmF1dG9uZWcgPQogCQkoYWRhcHRlci0+ZmNfYXV0b25lZyA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFKTsKIAotCWlmIChody0+bWFjLmZjID09IGUxMDAwX2ZjX3J4X3BhdXNlKSB7CisJaWYgKGh3LT5mYy50eXBlID09IGUxMDAwX2ZjX3J4X3BhdXNlKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7Ci0JfSBlbHNlIGlmIChody0+bWFjLmZjID09IGUxMDAwX2ZjX3R4X3BhdXNlKSB7CisJfSBlbHNlIGlmIChody0+ZmMudHlwZSA9PSBlMTAwMF9mY190eF9wYXVzZSkgewogCQlwYXVzZS0+dHhfcGF1c2UgPSAxOwotCX0gZWxzZSBpZiAoaHctPm1hYy5mYyA9PSBlMTAwMF9mY19mdWxsKSB7CisJfSBlbHNlIGlmIChody0+ZmMudHlwZSA9PSBlMTAwMF9mY19mdWxsKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CiAJCXBhdXNlLT50eF9wYXVzZSA9IDE7CiAJfQpAQCAtMzAwLDE4ICszMDQsMTggQEAKIAkJbXNsZWVwKDEpOwogCiAJaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5tYWMuZmMgPSBlMTAwMF9mY19mdWxsOworCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2Z1bGw7CiAJZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5tYWMuZmMgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKIAllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKLQkJaHctPm1hYy5mYyA9IGUxMDAwX2ZjX3R4X3BhdXNlOworCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3R4X3BhdXNlOwogCWVsc2UgaWYgKCFwYXVzZS0+cnhfcGF1c2UgJiYgIXBhdXNlLT50eF9wYXVzZSkKLQkJaHctPm1hYy5mYyA9IGUxMDAwX2ZjX25vbmU7CisJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsKIAotCWh3LT5tYWMub3JpZ2luYWxfZmMgPSBody0+bWFjLmZjOworCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7CiAKIAlpZiAoYWRhcHRlci0+ZmNfYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewotCQlody0+bWFjLmZjID0gZTEwMDBfZmNfZGVmYXVsdDsKKwkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19kZWZhdWx0OwogCQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCQllMTAwMGVfZG93bihhZGFwdGVyKTsKIAkJCWUxMDAwZV91cChhZGFwdGVyKTsKQEAgLTMxOSw3ICszMjMsNyBAQAogCQkJZTEwMDBlX3Jlc2V0KGFkYXB0ZXIpOwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0dmFsID0gKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSA/CisJCXJldHZhbCA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpID8KIAkJCSAgaHctPm1hYy5vcHMuc2V0dXBfbGluayhodykgOiBlMTAwMGVfZm9yY2VfbWFjX2ZjKGh3KSk7CiAJfQogCkBAIC01NTgsOCArNTYyLDEwIEBACiAJcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX252bShodywgZmlyc3Rfd29yZCwKIAkJCQkgIGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxLCBlZXByb21fYnVmZik7CiAKLQkvKiBVcGRhdGUgdGhlIGNoZWNrc3VtIG92ZXIgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIEVFUFJPTSBpZiBuZWVkZWQKLQkgKiBhbmQgZmx1c2ggc2hhZG93IFJBTSBmb3IgODI1NzMgY29udHJvbGxlcnMgKi8KKwkvKgorCSAqIFVwZGF0ZSB0aGUgY2hlY2tzdW0gb3ZlciB0aGUgZmlyc3QgcGFydCBvZiB0aGUgRUVQUk9NIGlmIG5lZWRlZAorCSAqIGFuZCBmbHVzaCBzaGFkb3cgUkFNIGZvciA4MjU3MyBjb250cm9sbGVycworCSAqLwogCWlmICgocmV0X3ZhbCA9PSAwKSAmJiAoKGZpcnN0X3dvcmQgPD0gTlZNX0NIRUNLU1VNX1JFRykgfHwKIAkJCSAgICAgICAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczKSkpCiAJCWUxMDAwZV91cGRhdGVfbnZtX2NoZWNrc3VtKGh3KTsKQEAgLTU3OCw4ICs1ODQsMTAgQEAKIAlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgIGUxMDAwZV9kcml2ZXJfbmFtZSwgMzIpOwogCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgZTEwMDBlX2RyaXZlcl92ZXJzaW9uLCAzMik7CiAKLQkvKiBFRVBST00gaW1hZ2UgdmVyc2lvbiAjIGlzIHJlcG9ydGVkIGFzIGZpcm13YXJlIHZlcnNpb24gIyBmb3IKLQkgKiBQQ0ktRSBjb250cm9sbGVycyAqLworCS8qCisJICogRUVQUk9NIGltYWdlIHZlcnNpb24gIyBpcyByZXBvcnRlZCBhcyBmaXJtd2FyZSB2ZXJzaW9uICMgZm9yCisJICogUENJLUUgY29udHJvbGxlcnMKKwkgKi8KIAllMTAwMF9yZWFkX252bSgmYWRhcHRlci0+aHcsIDUsIDEsICZlZXByb21fZGF0YSk7CiAJc3ByaW50ZihmaXJtd2FyZV92ZXJzaW9uLCAiJWQuJWQtJWQiLAogCQkoZWVwcm9tX2RhdGEgJiAweEYwMDApID4+IDEyLApAQCAtNjMzLDEwICs2NDEsMTcgQEAKIAl0eF9yaW5nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGUxMDAwX3JpbmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXR4X3JpbmcpCiAJCWdvdG8gZXJyX2FsbG9jX3R4OworCS8qCisJICogdXNlIGEgbWVtY3B5IHRvIHNhdmUgYW55IHByZXZpb3VzbHkgY29uZmlndXJlZAorCSAqIGl0ZW1zIGxpa2UgbmFwaSBzdHJ1Y3RzIGZyb20gaGF2aW5nIHRvIGJlCisJICogcmVpbml0aWFsaXplZAorCSAqLworCW1lbWNweSh0eF9yaW5nLCB0eF9vbGQsIHNpemVvZihzdHJ1Y3QgZTEwMDBfcmluZykpOwogCiAJcnhfcmluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlMTAwMF9yaW5nKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyeF9yaW5nKQogCQlnb3RvIGVycl9hbGxvY19yeDsKKwltZW1jcHkocnhfcmluZywgcnhfb2xkLCBzaXplb2Yoc3RydWN0IGUxMDAwX3JpbmcpKTsKIAogCWFkYXB0ZXItPnR4X3JpbmcgPSB0eF9yaW5nOwogCWFkYXB0ZXItPnJ4X3JpbmcgPSByeF9yaW5nOwpAQCAtNjU4LDggKzY3MywxMCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfc2V0dXBfdHg7CiAKLQkJLyogc2F2ZSB0aGUgbmV3LCByZXN0b3JlIHRoZSBvbGQgaW4gb3JkZXIgdG8gZnJlZSBpdCwKLQkJICogdGhlbiByZXN0b3JlIHRoZSBuZXcgYmFjayBhZ2FpbiAqLworCQkvKgorCQkgKiByZXN0b3JlIHRoZSBvbGQgaW4gb3JkZXIgdG8gZnJlZSBpdCwKKwkJICogdGhlbiBhZGQgaW4gdGhlIG5ldworCQkgKi8KIAkJYWRhcHRlci0+cnhfcmluZyA9IHJ4X29sZDsKIAkJYWRhcHRlci0+dHhfcmluZyA9IHR4X29sZDsKIAkJZTEwMDBlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOwpAQCAtNjkwLDYxICs3MDcsNTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0X2FycmF5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsCi0JCQkJICAgaW50IHJlZywgaW50IG9mZnNldCwgdTMyIG1hc2ssIHUzMiB3cml0ZSkKK3N0YXRpYyBib29sIHJlZ19wYXR0ZXJuX3Rlc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSwKKwkJCSAgICAgaW50IHJlZywgaW50IG9mZnNldCwgdTMyIG1hc2ssIHUzMiB3cml0ZSkKIHsKLQlpbnQgaTsKLQl1MzIgcmVhZDsKKwl1MzIgcGF0LCB2YWw7CiAJc3RhdGljIGNvbnN0IHUzMiB0ZXN0W10gPQogCQl7MHg1QTVBNUE1QSwgMHhBNUE1QTVBNSwgMHgwMDAwMDAwMCwgMHhGRkZGRkZGRn07Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVzdCk7IGkrKykgeworCWZvciAocGF0ID0gMDsgcGF0IDwgQVJSQVlfU0laRSh0ZXN0KTsgcGF0KyspIHsKIAkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKCZhZGFwdGVyLT5odywgcmVnLCBvZmZzZXQsCi0JCQkJICAgICAgKHRlc3RbaV0gJiB3cml0ZSkpOwotCQlyZWFkID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoJmFkYXB0ZXItPmh3LCByZWcsIG9mZnNldCk7Ci0JCWlmIChyZWFkICE9ICh0ZXN0W2ldICYgd3JpdGUgJiBtYXNrKSkgeworCQkJCSAgICAgICh0ZXN0W3BhdF0gJiB3cml0ZSkpOworCQl2YWwgPSBFMTAwMF9SRUFEX1JFR19BUlJBWSgmYWRhcHRlci0+aHcsIHJlZywgb2Zmc2V0KTsKKwkJaWYgKHZhbCAhPSAodGVzdFtwYXRdICYgd3JpdGUgJiBtYXNrKSkgewogCQkJbmRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LCAicGF0dGVybiB0ZXN0IHJlZyAlMDRYICIKIAkJCQkgImZhaWxlZDogZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsCiAJCQkJIHJlZyArIG9mZnNldCwKLQkJCQkgcmVhZCwgKHRlc3RbaV0gJiB3cml0ZSAmIG1hc2spKTsKKwkJCQkgdmFsLCAodGVzdFtwYXRdICYgd3JpdGUgJiBtYXNrKSk7CiAJCQkqZGF0YSA9IHJlZzsKLQkJCXJldHVybiB0cnVlOworCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgYm9vbCByZWdfc2V0X2FuZF9jaGVjayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLAogCQkJICAgICAgaW50IHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZSkKIHsKLQl1MzIgcmVhZDsKKwl1MzIgdmFsOwogCV9fZXczMigmYWRhcHRlci0+aHcsIHJlZywgd3JpdGUgJiBtYXNrKTsKLQlyZWFkID0gX19lcjMyKCZhZGFwdGVyLT5odywgcmVnKTsKLQlpZiAoKHdyaXRlICYgbWFzaykgIT0gKHJlYWQgJiBtYXNrKSkgeworCXZhbCA9IF9fZXIzMigmYWRhcHRlci0+aHcsIHJlZyk7CisJaWYgKCh3cml0ZSAmIG1hc2spICE9ICh2YWwgJiBtYXNrKSkgewogCQluZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsICJzZXQvY2hlY2sgcmVnICUwNFggdGVzdCBmYWlsZWQ6ICIKLQkJCSAiZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsIHJlZywgKHJlYWQgJiBtYXNrKSwKKwkJCSAiZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsIHJlZywgKHZhbCAmIG1hc2spLAogCQkJICh3cml0ZSAmIG1hc2spKTsKIAkJKmRhdGEgPSByZWc7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQotCi0jZGVmaW5lIFJFR19QQVRURVJOX1RFU1QoUiwgTSwgVykgXAotCWRvIHsgXAotCQlpZiAocmVnX3BhdHRlcm5fdGVzdF9hcnJheShhZGFwdGVyLCBkYXRhLCBSLCAwLCBNLCBXKSkgXAotCQkJcmV0dXJuIDE7IFwKKyNkZWZpbmUgUkVHX1BBVFRFUk5fVEVTVF9BUlJBWShyZWcsIG9mZnNldCwgbWFzaywgd3JpdGUpICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChyZWdfcGF0dGVybl90ZXN0KGFkYXB0ZXIsIGRhdGEsIHJlZywgb2Zmc2V0LCBtYXNrLCB3cml0ZSkpIFwKKwkJCXJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVHX1BBVFRFUk5fVEVTVChyZWcsIG1hc2ssIHdyaXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJUkVHX1BBVFRFUk5fVEVTVF9BUlJBWShyZWcsIDAsIG1hc2ssIHdyaXRlKQogCi0jZGVmaW5lIFJFR19QQVRURVJOX1RFU1RfQVJSQVkoUiwgb2Zmc2V0LCBNLCBXKSBcCi0JZG8geyBcCi0JCWlmIChyZWdfcGF0dGVybl90ZXN0X2FycmF5KGFkYXB0ZXIsIGRhdGEsIFIsIG9mZnNldCwgTSwgVykpIFwKLQkJCXJldHVybiAxOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRUdfU0VUX0FORF9DSEVDSyhSLCBNLCBXKSBcCi0JZG8geyBcCi0JCWlmIChyZWdfc2V0X2FuZF9jaGVjayhhZGFwdGVyLCBkYXRhLCBSLCBNLCBXKSkgXAotCQkJcmV0dXJuIDE7IFwKKyNkZWZpbmUgUkVHX1NFVF9BTkRfQ0hFQ0socmVnLCBtYXNrLCB3cml0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChyZWdfc2V0X2FuZF9jaGVjayhhZGFwdGVyLCBkYXRhLCByZWcsIG1hc2ssIHdyaXRlKSkgICAgICAgIFwKKwkJCXJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSB3aGlsZSAoMCkKIAogc3RhdGljIGludCBlMTAwMF9yZWdfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKQpAQCAtNzU4LDcgKzc2OSw4IEBACiAJdTMyIGk7CiAJdTMyIHRvZ2dsZTsKIAotCS8qIFRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgUmVhZCBPbmx5LCBzbyBhIHdyaXRlIHNob3VsZCBmYWlsLgorCS8qCisJICogVGhlIHN0YXR1cyByZWdpc3RlciBpcyBSZWFkIE9ubHksIHNvIGEgd3JpdGUgc2hvdWxkIGZhaWwuCiAJICogU29tZSBiaXRzIHRoYXQgZ2V0IHRvZ2dsZWQgYXJlIGlnbm9yZWQuCiAJICovCiAJc3dpdGNoIChtYWMtPnR5cGUpIHsKQEAgLTkwOCw3ICs5MjAsOCBAQAogCQltYXNrID0gMSA8PCBpOwogCiAJCWlmICghc2hhcmVkX2ludCkgewotCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGJlIHJlcG9ydGVkIGluCisJCQkvKgorCQkJICogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGJlIHJlcG9ydGVkIGluCiAJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIHNhbWUKIAkJCSAqIGludGVycnVwdCBhbmQgc2VlIGlmIG9uZSBnZXRzIHBvc3RlZC4gIElmCiAJCQkgKiBhbiBpbnRlcnJ1cHQgd2FzIHBvc3RlZCB0byB0aGUgYnVzLCB0aGUKQEAgLTkyNSw3ICs5MzgsOCBAQAogCQkJfQogCQl9CiAKLQkJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgdG8gYmUgcmVwb3J0ZWQgaW4KKwkJLyoKKwkJICogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgdG8gYmUgcmVwb3J0ZWQgaW4KIAkJICogdGhlIGNhdXNlIHJlZ2lzdGVyIGFuZCB0aGVuIGZvcmNlIHRoZSBzYW1lCiAJCSAqIGludGVycnVwdCBhbmQgc2VlIGlmIG9uZSBnZXRzIHBvc3RlZC4gIElmCiAJCSAqIGFuIGludGVycnVwdCB3YXMgbm90IHBvc3RlZCB0byB0aGUgYnVzLCB0aGUKQEAgLTk0Miw3ICs5NTYsOCBAQAogCQl9CiAKIAkJaWYgKCFzaGFyZWRfaW50KSB7Ci0JCQkvKiBEaXNhYmxlIHRoZSBvdGhlciBpbnRlcnJ1cHRzIHRvIGJlIHJlcG9ydGVkIGluCisJCQkvKgorCQkJICogRGlzYWJsZSB0aGUgb3RoZXIgaW50ZXJydXB0cyB0byBiZSByZXBvcnRlZCBpbgogCQkJICogdGhlIGNhdXNlIHJlZ2lzdGVyIGFuZCB0aGVuIGZvcmNlIHRoZSBvdGhlcgogCQkJICogaW50ZXJydXB0cyBhbmQgc2VlIGlmIGFueSBnZXQgcG9zdGVkLiAgSWYKIAkJCSAqIGFuIGludGVycnVwdCB3YXMgcG9zdGVkIHRvIHRoZSBidXMsIHRoZQpAQCAtMTAyNCw3ICsxMDM5LDYgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcmN0bDsKLQlpbnQgc2l6ZTsKIAlpbnQgaTsKIAlpbnQgcmV0X3ZhbDsKIApAQCAtMTAzMywxMyArMTA0NywxMyBAQAogCWlmICghdHhfcmluZy0+Y291bnQpCiAJCXR4X3JpbmctPmNvdW50ID0gRTEwMDBfREVGQVVMVF9UWEQ7CiAKLQlzaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX2J1ZmZlcik7Ci0JdHhfcmluZy0+YnVmZmVyX2luZm8gPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghdHhfcmluZy0+YnVmZmVyX2luZm8pIHsKKwl0eF9yaW5nLT5idWZmZXJfaW5mbyA9IGtjYWxsb2ModHhfcmluZy0+Y291bnQsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZTEwMDBfYnVmZmVyKSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCEodHhfcmluZy0+YnVmZmVyX2luZm8pKSB7CiAJCXJldF92YWwgPSAxOwogCQlnb3RvIGVycl9ub21lbTsKIAl9Ci0JbWVtc2V0KHR4X3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAogCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYyk7CiAJdHhfcmluZy0+c2l6ZSA9IEFMSUdOKHR4X3JpbmctPnNpemUsIDQwOTYpOwpAQCAtMTA0OSwyMSArMTA2MywxNyBAQAogCQlyZXRfdmFsID0gMjsKIAkJZ290byBlcnJfbm9tZW07CiAJfQotCW1lbXNldCh0eF9yaW5nLT5kZXNjLCAwLCB0eF9yaW5nLT5zaXplKTsKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAKLQlldzMyKFREQkFMLAotCQkJKCh1NjQpIHR4X3JpbmctPmRtYSAmIDB4MDAwMDAwMDBGRkZGRkZGRikpOworCWV3MzIoVERCQUwsICgodTY0KSB0eF9yaW5nLT5kbWEgJiAweDAwMDAwMDAwRkZGRkZGRkYpKTsKIAlldzMyKFREQkFILCAoKHU2NCkgdHhfcmluZy0+ZG1hID4+IDMyKSk7Ci0JZXczMihURExFTiwKLQkJCXR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKSk7CisJZXczMihURExFTiwgdHhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpKTsKIAlldzMyKFRESCwgMCk7CiAJZXczMihURFQsIDApOwotCWV3MzIoVENUTCwKLQkJCUUxMDAwX1RDVExfUFNQIHwgRTEwMDBfVENUTF9FTiB8Ci0JCQlFMTAwMF9DT0xMSVNJT05fVEhSRVNIT0xEIDw8IEUxMDAwX0NUX1NISUZUIHwKLQkJCUUxMDAwX0NPTExJU0lPTl9ESVNUQU5DRSA8PCBFMTAwMF9DT0xEX1NISUZUKTsKKwlldzMyKFRDVEwsIEUxMDAwX1RDVExfUFNQIHwgRTEwMDBfVENUTF9FTiB8IEUxMDAwX1RDVExfTVVMUiB8CisJICAgICBFMTAwMF9DT0xMSVNJT05fVEhSRVNIT0xEIDw8IEUxMDAwX0NUX1NISUZUIHwKKwkgICAgIEUxMDAwX0NPTExJU0lPTl9ESVNUQU5DRSA8PCBFMTAwMF9DT0xEX1NISUZUKTsKIAogCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBlMTAwMF90eF9kZXNjICp0eF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgaSk7CkBAIC0xMDg1LDEyICsxMDk1LDExIEBACiAJCQlyZXRfdmFsID0gNDsKIAkJCWdvdG8gZXJyX25vbWVtOwogCQl9Ci0JCXR4X2Rlc2MtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoCi0JCQkJCSB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEpOworCQl0eF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLmRtYSk7CiAJCXR4X2Rlc2MtPmxvd2VyLmRhdGEgPSBjcHVfdG9fbGUzMihza2ItPmxlbik7CiAJCXR4X2Rlc2MtPmxvd2VyLmRhdGEgfD0gY3B1X3RvX2xlMzIoRTEwMDBfVFhEX0NNRF9FT1AgfAogCQkJCQkJICAgRTEwMDBfVFhEX0NNRF9JRkNTIHwKLQkJCQkJCSAgIEUxMDAwX1RYRF9DTURfUlBTKTsKKwkJCQkJCSAgIEUxMDAwX1RYRF9DTURfUlMpOwogCQl0eF9kZXNjLT51cHBlci5kYXRhID0gMDsKIAl9CiAKQEAgLTEwOTksMTMgKzExMDgsMTMgQEAKIAlpZiAoIXJ4X3JpbmctPmNvdW50KQogCQlyeF9yaW5nLT5jb3VudCA9IEUxMDAwX0RFRkFVTFRfUlhEOwogCi0Jc2l6ZSA9IHJ4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpOwotCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJ4X3JpbmctPmJ1ZmZlcl9pbmZvKSB7CisJcnhfcmluZy0+YnVmZmVyX2luZm8gPSBrY2FsbG9jKHJ4X3JpbmctPmNvdW50LAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGUxMDAwX2J1ZmZlciksCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghKHJ4X3JpbmctPmJ1ZmZlcl9pbmZvKSkgewogCQlyZXRfdmFsID0gNTsKIAkJZ290byBlcnJfbm9tZW07CiAJfQotCW1lbXNldChyeF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3J4X2Rlc2MpOwogCXJ4X3JpbmctPmRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgcnhfcmluZy0+c2l6ZSwKQEAgLTExMTQsNyArMTEyMyw2IEBACiAJCXJldF92YWwgPSA2OwogCQlnb3RvIGVycl9ub21lbTsKIAl9Ci0JbWVtc2V0KHJ4X3JpbmctPmRlc2MsIDAsIHJ4X3JpbmctPnNpemUpOwogCXJ4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKIAlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKIApAQCAtMTEyNiw2ICsxMTM0LDggQEAKIAlldzMyKFJESCwgMCk7CiAJZXczMihSRFQsIDApOwogCXJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgRTEwMDBfUkNUTF9CQU0gfCBFMTAwMF9SQ1RMX1NaXzIwNDggfAorCQlFMTAwMF9SQ1RMX1VQRSB8IEUxMDAwX1JDVExfTVBFIHwgRTEwMDBfUkNUTF9MUEUgfAorCQlFMTAwMF9SQ1RMX1NCUCB8IEUxMDAwX1JDVExfU0VDUkMgfAogCQlFMTAwMF9SQ1RMX0xCTV9OTyB8IEUxMDAwX1JDVExfUkRNVFNfSEFMRiB8CiAJCShhZGFwdGVyLT5ody5tYWMubWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7CiAJZXczMihSQ1RMLCByY3RsKTsKQEAgLTExNzUsMjEgKzExODUsMjIgQEAKIAl1MzIgY3RybF9yZWcgPSAwOwogCXUzMiBzdGF0X3JlZyA9IDA7CiAKLQlhZGFwdGVyLT5ody5tYWMuYXV0b25lZyA9IDA7CisJaHctPm1hYy5hdXRvbmVnID0gMDsKIAotCWlmIChhZGFwdGVyLT5ody5waHkudHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CisJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CiAJCS8qIEF1dG8tTURJL01ESVggT2ZmICovCiAJCWUxZV93cGh5KGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAweDA4MDgpOwogCQkvKiByZXNldCB0byB1cGRhdGUgQXV0by1NREkvTURJWCAqLwogCQllMWVfd3BoeShodywgUEhZX0NPTlRST0wsIDB4OTE0MCk7CiAJCS8qIGF1dG9uZWcgb2ZmICovCiAJCWUxZV93cGh5KGh3LCBQSFlfQ09OVFJPTCwgMHg4MTQwKTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3LnBoeS50eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKQorCX0gZWxzZSBpZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKQogCQllMWVfd3BoeShodywgR0c4MjU2M19QSFlfS01STl9NT0RFX0NUUkwsIDB4MUNDKTsKIAogCWN0cmxfcmVnID0gZXIzMihDVFJMKTsKIAotCWlmIChhZGFwdGVyLT5ody5waHkudHlwZSA9PSBlMTAwMF9waHlfaWZlKSB7CisJc3dpdGNoIChody0+cGh5LnR5cGUpIHsKKwljYXNlIGUxMDAwX3BoeV9pZmU6CiAJCS8qIGZvcmNlIDEwMCwgc2V0IGxvb3BiYWNrICovCiAJCWUxZV93cGh5KGh3LCBQSFlfQ09OVFJPTCwgMHg2MTAwKTsKIApAQCAtMTE5OSw5ICsxMjEwLDExIEBACiAJCQkgICAgIEUxMDAwX0NUUkxfRlJDRFBYIHwgLyogU2V0IHRoZSBGb3JjZSBEdXBsZXggQml0ICovCiAJCQkgICAgIEUxMDAwX0NUUkxfU1BEXzEwMCB8LyogRm9yY2UgU3BlZWQgdG8gMTAwICovCiAJCQkgICAgIEUxMDAwX0NUUkxfRkQpOwkgLyogRm9yY2UgRHVwbGV4IHRvIEZVTEwgKi8KLQl9IGVsc2UgeworCQlicmVhazsKKwlkZWZhdWx0OgogCQkvKiBmb3JjZSAxMDAwLCBzZXQgbG9vcGJhY2sgKi8KIAkJZTFlX3dwaHkoaHcsIFBIWV9DT05UUk9MLCAweDQxNDApOworCQltZGVsYXkoMjUwKTsKIAogCQkvKiBOb3cgc2V0IHVwIHRoZSBNQUMgdG8gdGhlIHNhbWUgc3BlZWQvZHVwbGV4IGFzIHRoZSBQSFkuICovCiAJCWN0cmxfcmVnID0gZXIzMihDVFJMKTsKQEAgLTEyMTAsMTQgKzEyMjMsMjAgQEAKIAkJCSAgICAgRTEwMDBfQ1RSTF9GUkNEUFggfCAvKiBTZXQgdGhlIEZvcmNlIER1cGxleCBCaXQgKi8KIAkJCSAgICAgRTEwMDBfQ1RSTF9TUERfMTAwMCB8LyogRm9yY2UgU3BlZWQgdG8gMTAwMCAqLwogCQkJICAgICBFMTAwMF9DVFJMX0ZEKTsJIC8qIEZvcmNlIER1cGxleCB0byBGVUxMICovCisKKwkJaWYgKChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB8fAorCQkgICAgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGUxMDAwX2ljaDlsYW4pKQorCQkJY3RybF9yZWcgfD0gRTEwMDBfQ1RSTF9TTFU7CS8qIFNldCBMaW5rIFVwICovCiAJfQogCi0JaWYgKGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIgJiYKLQkgICBhZGFwdGVyLT5ody5waHkudHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlciAmJgorCSAgICBody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X204OCkgewogCQljdHJsX3JlZyB8PSBFMTAwMF9DVFJMX0lMT1M7IC8qIEludmVydCBMb3NzIG9mIFNpZ25hbCAqLwogCX0gZWxzZSB7Ci0JCS8qIFNldCB0aGUgSUxPUyBiaXQgb24gdGhlIGZpYmVyIE5pYyBpZiBoYWxmIGR1cGxleCBsaW5rIGlzCi0JCSAqIGRldGVjdGVkLiAqLworCQkvKgorCQkgKiBTZXQgdGhlIElMT1MgYml0IG9uIHRoZSBmaWJlciBOaWMgaWYgaGFsZiBkdXBsZXggbGluayBpcworCQkgKiBkZXRlY3RlZC4KKwkJICovCiAJCXN0YXRfcmVnID0gZXIzMihTVEFUVVMpOwogCQlpZiAoKHN0YXRfcmVnICYgRTEwMDBfU1RBVFVTX0ZEKSA9PSAwKQogCQkJY3RybF9yZWcgfD0gKEUxMDAwX0NUUkxfSUxPUyB8IEUxMDAwX0NUUkxfU0xVKTsKQEAgLTEyMjUsMTAgKzEyNDQsMTEgQEAKIAogCWV3MzIoQ1RSTCwgY3RybF9yZWcpOwogCi0JLyogRGlzYWJsZSB0aGUgcmVjZWl2ZXIgb24gdGhlIFBIWSBzbyB3aGVuIGEgY2FibGUgaXMgcGx1Z2dlZCBpbiwgdGhlCisJLyoKKwkgKiBEaXNhYmxlIHRoZSByZWNlaXZlciBvbiB0aGUgUEhZIHNvIHdoZW4gYSBjYWJsZSBpcyBwbHVnZ2VkIGluLCB0aGUKIAkgKiBQSFkgZG9lcyBub3QgYmVnaW4gdG8gYXV0b25lZyB3aGVuIGEgY2FibGUgaXMgcmVjb25uZWN0ZWQgdG8gdGhlIE5JQy4KIAkgKi8KLQlpZiAoYWRhcHRlci0+aHcucGh5LnR5cGUgPT0gZTEwMDBfcGh5X204OCkKKwlpZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9tODgpCiAJCWUxMDAwX3BoeV9kaXNhYmxlX3JlY2VpdmVyKGFkYXB0ZXIpOwogCiAJdWRlbGF5KDUwMCk7CkBAIC0xMjQ0LDggKzEyNjQsMTAgQEAKIAogCS8qIHNwZWNpYWwgcmVxdWlyZW1lbnRzIGZvciA4MjU3MS84MjU3MiBmaWJlciBhZGFwdGVycyAqLwogCi0JLyoganVtcCB0aHJvdWdoIGhvb3BzIHRvIG1ha2Ugc3VyZSBsaW5rIGlzIHVwIGJlY2F1c2Ugc2VyZGVzCi0JICogbGluayBpcyBoYXJkd2lyZWQgdXAgKi8KKwkvKgorCSAqIGp1bXAgdGhyb3VnaCBob29wcyB0byBtYWtlIHN1cmUgbGluayBpcyB1cCBiZWNhdXNlIHNlcmRlcworCSAqIGxpbmsgaXMgaGFyZHdpcmVkIHVwCisJICovCiAJY3RybCB8PSBFMTAwMF9DVFJMX1NMVTsKIAlldzMyKENUUkwsIGN0cmwpOwogCkBAIC0xMjYzLDggKzEyODUsMTAgQEAKIAkJZXczMihDVFJMLCBjdHJsKTsKIAl9CiAKLQkvKiBzcGVjaWFsIHdyaXRlIHRvIHNlcmRlcyBjb250cm9sIHJlZ2lzdGVyIHRvIGVuYWJsZSBTZXJEZXMgYW5hbG9nCi0JICogbG9vcGJhY2sgKi8KKwkvKgorCSAqIHNwZWNpYWwgd3JpdGUgdG8gc2VyZGVzIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZW5hYmxlIFNlckRlcyBhbmFsb2cKKwkgKiBsb29wYmFjaworCSAqLwogI2RlZmluZSBFMTAwMF9TRVJERVNfTEJfT04gMHg0MTAKIAlldzMyKFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PTik7CiAJbXNsZWVwKDEwKTsKQEAgLTEyNzksOCArMTMwMywxMCBAQAogCXUzMiBjdHJsZXh0ID0gZXIzMihDVFJMX0VYVCk7CiAJdTMyIGN0cmwgPSBlcjMyKENUUkwpOwogCi0JLyogc2F2ZSBDVFJMX0VYVCB0byByZXN0b3JlIGxhdGVyLCByZXVzZSBhbiBlbXB0eSB2YXJpYWJsZSAodW51c2VkCi0JICAgb24gbWFjX3R5cGUgODAwMDNlczJsYW4pICovCisJLyoKKwkgKiBzYXZlIENUUkxfRVhUIHRvIHJlc3RvcmUgbGF0ZXIsIHJldXNlIGFuIGVtcHR5IHZhcmlhYmxlICh1bnVzZWQKKwkgKiBvbiBtYWNfdHlwZSA4MDAwM2VzMmxhbikKKwkgKi8KIAlhZGFwdGVyLT50eF9maWZvX2hlYWQgPSBjdHJsZXh0OwogCiAJLyogY2xlYXIgdGhlIHNlcmRlcyBtb2RlIGJpdHMsIHB1dHRpbmcgdGhlIGRldmljZSBpbnRvIG1hYyBsb29wYmFjayAqLwpAQCAtMTMwMiw3ICsxMzI4LDcgQEAKICNkZWZpbmUgS01STkNUUkxTVEFfT1BNT0RFICgweDFGIDw8IDE2KQogI2RlZmluZSBLTVJOQ1RSTFNUQV9PUE1PREVfMUdCX0ZEX0dNSUkgMHgwNTgyCiAJZXczMihLTVJOQ1RSTFNUQSwKLQkJKEtNUk5DVFJMU1RBX09QTU9ERSB8IEtNUk5DVFJMU1RBX09QTU9ERV8xR0JfRkRfR01JSSkpOworCSAgICAgKEtNUk5DVFJMU1RBX09QTU9ERSB8IEtNUk5DVFJMU1RBX09QTU9ERV8xR0JfRkRfR01JSSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzEyLDggKzEzMzgsOCBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJjdGw7CiAKLQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAotCSAgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgeworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAorCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKIAkJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAkJY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKIAkJCXJldHVybiBlMTAwMF9zZXRfZXMybGFuX21hY19sb29wYmFjayhhZGFwdGVyKTsKQEAgLTEzMjgsNyArMTM1NCw3IEBACiAJCQlldzMyKFJDVEwsIHJjdGwpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQl9IGVsc2UgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJfSBlbHNlIGlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJcmV0dXJuIGUxMDAwX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKGFkYXB0ZXIpOwogCX0KIApAQCAtMTM0NywxOCArMTM3MywxNyBAQAogCiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgotCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAotCQkgICAgaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKKwkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8CisJCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKIAkJCS8qIHJlc3RvcmUgQ1RSTF9FWFQsIHN0ZWFsaW5nIHNwYWNlIGZyb20gdHhfZmlmb19oZWFkICovCi0JCQlldzMyKENUUkxfRVhULAotCQkJCQlhZGFwdGVyLT50eF9maWZvX2hlYWQpOworCQkJZXczMihDVFJMX0VYVCwgYWRhcHRlci0+dHhfZmlmb19oZWFkKTsKIAkJCWFkYXB0ZXItPnR4X2ZpZm9faGVhZCA9IDA7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgotCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAotCQkgICAgaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKKwkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8CisJCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKICNkZWZpbmUgRTEwMDBfU0VSREVTX0xCX09GRiAweDQwMAogCQkJZXczMihTQ1RMLCBFMTAwMF9TRVJERVNfTEJfT0ZGKTsKIAkJCW1zbGVlcCgxMCk7CkBAIC0xNDE0LDcgKzE0MzksOCBAQAogCiAJZXczMihSRFQsIHJ4X3JpbmctPmNvdW50IC0gMSk7CiAKLQkvKiBDYWxjdWxhdGUgdGhlIGxvb3AgY291bnQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZGVzY3JpcHRvciByaW5nCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGxvb3AgY291bnQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZGVzY3JpcHRvciByaW5nCiAJICogVGhlIGlkZWEgaXMgdG8gd3JhcCB0aGUgbGFyZ2VzdCByaW5nIGEgbnVtYmVyIG9mIHRpbWVzIHVzaW5nIDY0CiAJICogc2VuZC9yZWNlaXZlIHBhaXJzIGR1cmluZyBlYWNoIGxvb3AKIAkgKi8KQEAgLTE0MjgsOCArMTQ1NCw4IEBACiAJbCA9IDA7CiAJZm9yIChqID0gMDsgaiA8PSBsYzsgaisrKSB7IC8qIGxvb3AgY291bnQgbG9vcCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeyAvKiBzZW5kIHRoZSBwYWNrZXRzICovCi0JCQllMTAwMF9jcmVhdGVfbGJ0ZXN0X2ZyYW1lKAotCQkJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiwgMTAyNCk7CisJCQllMTAwMF9jcmVhdGVfbGJ0ZXN0X2ZyYW1lKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2tdLnNrYiwKKwkJCQkJCSAgMTAyNCk7CiAJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocGRldiwKIAkJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9ba10uZG1hLAogCQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1trXS5sZW5ndGgsCkBAIC0xNDU0LDcgKzE0ODAsOCBAQAogCQkJbCsrOwogCQkJaWYgKGwgPT0gcnhfcmluZy0+Y291bnQpCiAJCQkJbCA9IDA7Ci0JCQkvKiB0aW1lICsgMjAgbXNlY3MgKDIwMCBtc2VjcyBvbiAyLjQpIGlzIG1vcmUgdGhhbgorCQkJLyoKKwkJCSAqIHRpbWUgKyAyMCBtc2VjcyAoMjAwIG1zZWNzIG9uIDIuNCkgaXMgbW9yZSB0aGFuCiAJCQkgKiBlbm91Z2ggdGltZSB0byBjb21wbGV0ZSB0aGUgcmVjZWl2ZXMsIGlmIGl0J3MKIAkJCSAqIGV4Y2VlZGVkLCBicmVhayBhbmQgZXJyb3Igb2ZmCiAJCQkgKi8KQEAgLTE0NjMsNyArMTQ5MCw3IEBACiAJCQlyZXRfdmFsID0gMTM7IC8qIHJldF92YWwgaXMgdGhlIHNhbWUgYXMgbWlzLWNvbXBhcmUgKi8KIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChqaWZmaWVzID49ICh0aW1lICsgMikpIHsKKwkJaWYgKGppZmZpZXMgPj0gKHRpbWUgKyAyMCkpIHsKIAkJCXJldF92YWwgPSAxNDsgLyogZXJyb3IgY29kZSBmb3IgdGltZSBvdXQgZXJyb3IgKi8KIAkJCWJyZWFrOwogCQl9CkBAIC0xNDczLDggKzE1MDAsMTAgQEAKIAogc3RhdGljIGludCBlMTAwMF9sb29wYmFja190ZXN0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7Ci0JLyogUEhZIGxvb3BiYWNrIGNhbm5vdCBiZSBwZXJmb3JtZWQgaWYgU29ML0lERVIKLQkgKiBzZXNzaW9ucyBhcmUgYWN0aXZlICovCisJLyoKKwkgKiBQSFkgbG9vcGJhY2sgY2Fubm90IGJlIHBlcmZvcm1lZCBpZiBTb0wvSURFUgorCSAqIHNlc3Npb25zIGFyZSBhY3RpdmUKKwkgKi8KIAlpZiAoZTEwMDBfY2hlY2tfcmVzZXRfYmxvY2soJmFkYXB0ZXItPmh3KSkgewogCQluZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsICJDYW5ub3QgZG8gUEhZIGxvb3BiYWNrIHRlc3QgIgogCQkJICJ3aGVuIFNvTC9JREVSIGlzIGFjdGl2ZS5cbiIpOwpAQCAtMTUwNCwxMiArMTUzMywxNCBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAkqZGF0YSA9IDA7Ci0JaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewogCQlpbnQgaSA9IDA7CiAJCWh3LT5tYWMuc2VyZGVzX2hhc19saW5rID0gMDsKIAotCQkvKiBPbiBzb21lIGJsYWRlIHNlcnZlciBkZXNpZ25zLCBsaW5rIGVzdGFibGlzaG1lbnQKLQkJICogY291bGQgdGFrZSBhcyBsb25nIGFzIDItMyBtaW51dGVzICovCisJCS8qCisJCSAqIE9uIHNvbWUgYmxhZGUgc2VydmVyIGRlc2lnbnMsIGxpbmsgZXN0YWJsaXNobWVudAorCQkgKiBjb3VsZCB0YWtlIGFzIGxvbmcgYXMgMi0zIG1pbnV0ZXMKKwkJICovCiAJCWRvIHsKIAkJCWh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKIAkJCWlmIChody0+bWFjLnNlcmRlc19oYXNfbGluaykKQEAgLTE1NjIsOCArMTU5MywxMCBAQAogCiAJCW5kZXZfaW5mbyhuZXRkZXYsICJvZmZsaW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCi0JCS8qIExpbmsgdGVzdCBwZXJmb3JtZWQgYmVmb3JlIGhhcmR3YXJlIHJlc2V0IHNvIGF1dG9uZWcgZG9lc24ndAotCQkgKiBpbnRlcmZlcmUgd2l0aCB0ZXN0IHJlc3VsdCAqLworCQkvKgorCQkgKiBMaW5rIHRlc3QgcGVyZm9ybWVkIGJlZm9yZSBoYXJkd2FyZSByZXNldCBzbyBhdXRvbmVnIGRvZXNuJ3QKKwkJICogaW50ZXJmZXJlIHdpdGggdGVzdCByZXN1bHQKKwkJICovCiAJCWlmIChlMTAwMF9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbNF0pKQogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIApAQCAtMTU5Niw5ICsxNjI5LDkgQEAKIAkJYWRhcHRlci0+aHcubWFjLmF1dG9uZWcgPSBhdXRvbmVnOwogCiAJCS8qIGZvcmNlIHRoaXMgcm91dGluZSB0byB3YWl0IHVudGlsIGF1dG9uZWcgY29tcGxldGUvdGltZW91dCAqLwotCQlhZGFwdGVyLT5ody5waHkud2FpdF9mb3JfbGluayA9IDE7CisJCWFkYXB0ZXItPmh3LnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUgPSAxOwogCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7Ci0JCWFkYXB0ZXItPmh3LnBoeS53YWl0X2Zvcl9saW5rID0gMDsKKwkJYWRhcHRlci0+aHcucGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IDA7CiAKIAkJY2xlYXJfYml0KF9fRTEwMDBfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAkJaWYgKGlmX3J1bm5pbmcpCkBAIC0xNzY4LDggKzE4MDEsNyBAQAogCiAJc3dpdGNoIChzdHJpbmdzZXQpIHsKIAljYXNlIEVUSF9TU19URVNUOgotCQltZW1jcHkoZGF0YSwgKmUxMDAwX2dzdHJpbmdzX3Rlc3QsCi0JCQlzaXplb2YoZTEwMDBfZ3N0cmluZ3NfdGVzdCkpOworCQltZW1jcHkoZGF0YSwgKmUxMDAwX2dzdHJpbmdzX3Rlc3QsIHNpemVvZihlMTAwMF9nc3RyaW5nc190ZXN0KSk7CiAJCWJyZWFrOwogCWNhc2UgRVRIX1NTX1NUQVRTOgogCQlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCmluZGV4IDNjNTg2MmYuLjUzZjFhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTY2LDE0ICs2NiwxNCBAQAogCUUxMDAwX0lNUyAgICAgID0gMHgwMDBEMCwgLyogSW50ZXJydXB0IE1hc2sgU2V0IC0gUlcgKi8KIAlFMTAwMF9JTUMgICAgICA9IDB4MDAwRDgsIC8qIEludGVycnVwdCBNYXNrIENsZWFyIC0gV08gKi8KIAlFMTAwMF9JQU0gICAgICA9IDB4MDAwRTAsIC8qIEludGVycnVwdCBBY2tub3dsZWRnZSBBdXRvIE1hc2sgKi8KLQlFMTAwMF9SQ1RMICAgICA9IDB4MDAxMDAsIC8qIFJYIENvbnRyb2wgLSBSVyAqLworCUUxMDAwX1JDVEwgICAgID0gMHgwMDEwMCwgLyogUnggQ29udHJvbCAtIFJXICovCiAJRTEwMDBfRkNUVFYgICAgPSAweDAwMTcwLCAvKiBGbG93IENvbnRyb2wgVHJhbnNtaXQgVGltZXIgVmFsdWUgLSBSVyAqLwotCUUxMDAwX1RYQ1cgICAgID0gMHgwMDE3OCwgLyogVFggQ29uZmlndXJhdGlvbiBXb3JkIC0gUlcgKi8KLQlFMTAwMF9SWENXICAgICA9IDB4MDAxODAsIC8qIFJYIENvbmZpZ3VyYXRpb24gV29yZCAtIFJPICovCi0JRTEwMDBfVENUTCAgICAgPSAweDAwNDAwLCAvKiBUWCBDb250cm9sIC0gUlcgKi8KLQlFMTAwMF9UQ1RMX0VYVCA9IDB4MDA0MDQsIC8qIEV4dGVuZGVkIFRYIENvbnRyb2wgLSBSVyAqLwotCUUxMDAwX1RJUEcgICAgID0gMHgwMDQxMCwgLyogVFggSW50ZXItcGFja2V0IGdhcCAtUlcgKi8KLQlFMTAwMF9BSVQgICAgICA9IDB4MDA0NTgsIC8qIEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZyBUaHJvdHRsZSAtIFJXICovCisJRTEwMDBfVFhDVyAgICAgPSAweDAwMTc4LCAvKiBUeCBDb25maWd1cmF0aW9uIFdvcmQgLSBSVyAqLworCUUxMDAwX1JYQ1cgICAgID0gMHgwMDE4MCwgLyogUnggQ29uZmlndXJhdGlvbiBXb3JkIC0gUk8gKi8KKwlFMTAwMF9UQ1RMICAgICA9IDB4MDA0MDAsIC8qIFR4IENvbnRyb2wgLSBSVyAqLworCUUxMDAwX1RDVExfRVhUID0gMHgwMDQwNCwgLyogRXh0ZW5kZWQgVHggQ29udHJvbCAtIFJXICovCisJRTEwMDBfVElQRyAgICAgPSAweDAwNDEwLCAvKiBUeCBJbnRlci1wYWNrZXQgZ2FwIC1SVyAqLworCUUxMDAwX0FJVCAgICAgID0gMHgwMDQ1OCwgLyogQWRhcHRpdmUgSW50ZXJmcmFtZSBTcGFjaW5nIFRocm90dGxlIC1SVyAqLwogCUUxMDAwX0xFRENUTCAgID0gMHgwMEUwMCwgLyogTEVEIENvbnRyb2wgLSBSVyAqLwogCUUxMDAwX0VYVENORl9DVFJMICA9IDB4MDBGMDAsIC8qIEV4dGVuZGVkIENvbmZpZ3VyYXRpb24gQ29udHJvbCAqLwogCUUxMDAwX0VYVENORl9TSVpFICA9IDB4MDBGMDgsIC8qIEV4dGVuZGVkIENvbmZpZ3VyYXRpb24gU2l6ZSAqLwpAQCAtODcsMTIgKzg3LDE0IEBACiAJRTEwMDBfRkNSVEwgICAgPSAweDAyMTYwLCAvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgTG93IC0gUlcgKi8KIAlFMTAwMF9GQ1JUSCAgICA9IDB4MDIxNjgsIC8qIEZsb3cgQ29udHJvbCBSZWNlaXZlIFRocmVzaG9sZCBIaWdoIC0gUlcgKi8KIAlFMTAwMF9QU1JDVEwgICA9IDB4MDIxNzAsIC8qIFBhY2tldCBTcGxpdCBSZWNlaXZlIENvbnRyb2wgLSBSVyAqLwotCUUxMDAwX1JEQkFMICAgID0gMHgwMjgwMCwgLyogUlggRGVzY3JpcHRvciBCYXNlIEFkZHJlc3MgTG93IC0gUlcgKi8KLQlFMTAwMF9SREJBSCAgICA9IDB4MDI4MDQsIC8qIFJYIERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIEhpZ2ggLSBSVyAqLwotCUUxMDAwX1JETEVOICAgID0gMHgwMjgwOCwgLyogUlggRGVzY3JpcHRvciBMZW5ndGggLSBSVyAqLwotCUUxMDAwX1JESCAgICAgID0gMHgwMjgxMCwgLyogUlggRGVzY3JpcHRvciBIZWFkIC0gUlcgKi8KLQlFMTAwMF9SRFQgICAgICA9IDB4MDI4MTgsIC8qIFJYIERlc2NyaXB0b3IgVGFpbCAtIFJXICovCi0JRTEwMDBfUkRUUiAgICAgPSAweDAyODIwLCAvKiBSWCBEZWxheSBUaW1lciAtIFJXICovCisJRTEwMDBfUkRCQUwgICAgPSAweDAyODAwLCAvKiBSeCBEZXNjcmlwdG9yIEJhc2UgQWRkcmVzcyBMb3cgLSBSVyAqLworCUUxMDAwX1JEQkFIICAgID0gMHgwMjgwNCwgLyogUnggRGVzY3JpcHRvciBCYXNlIEFkZHJlc3MgSGlnaCAtIFJXICovCisJRTEwMDBfUkRMRU4gICAgPSAweDAyODA4LCAvKiBSeCBEZXNjcmlwdG9yIExlbmd0aCAtIFJXICovCisJRTEwMDBfUkRIICAgICAgPSAweDAyODEwLCAvKiBSeCBEZXNjcmlwdG9yIEhlYWQgLSBSVyAqLworCUUxMDAwX1JEVCAgICAgID0gMHgwMjgxOCwgLyogUnggRGVzY3JpcHRvciBUYWlsIC0gUlcgKi8KKwlFMTAwMF9SRFRSICAgICA9IDB4MDI4MjAsIC8qIFJ4IERlbGF5IFRpbWVyIC0gUlcgKi8KKwlFMTAwMF9SWERDVExfQkFTRSA9IDB4MDI4MjgsIC8qIFJ4IERlc2NyaXB0b3IgQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1JYRENUTChfbikgICAoRTEwMDBfUlhEQ1RMX0JBU0UgKyAoX24gPDwgOCkpCiAJRTEwMDBfUkFEViAgICAgPSAweDAyODJDLCAvKiBSWCBJbnRlcnJ1cHQgQWJzb2x1dGUgRGVsYXkgVGltZXIgLSBSVyAqLwogCiAvKiBDb252ZW5pZW5jZSBtYWNyb3MKQEAgLTEwNSwxNyArMTA3LDE3IEBACiAgKi8KICNkZWZpbmUgRTEwMDBfUkRCQUxfUkVHKF9uKSAgIChFMTAwMF9SREJBTCArIChfbiA8PCA4KSkKIAlFMTAwMF9LQUJHVFhEICA9IDB4MDMwMDQsIC8qIEFGRSBCYW5kIEdhcCBUcmFuc21pdCBSZWYgRGF0YSAqLwotCUUxMDAwX1REQkFMICAgID0gMHgwMzgwMCwgLyogVFggRGVzY3JpcHRvciBCYXNlIEFkZHJlc3MgTG93IC0gUlcgKi8KLQlFMTAwMF9UREJBSCAgICA9IDB4MDM4MDQsIC8qIFRYIERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIEhpZ2ggLSBSVyAqLwotCUUxMDAwX1RETEVOICAgID0gMHgwMzgwOCwgLyogVFggRGVzY3JpcHRvciBMZW5ndGggLSBSVyAqLwotCUUxMDAwX1RESCAgICAgID0gMHgwMzgxMCwgLyogVFggRGVzY3JpcHRvciBIZWFkIC0gUlcgKi8KLQlFMTAwMF9URFQgICAgICA9IDB4MDM4MTgsIC8qIFRYIERlc2NyaXB0b3IgVGFpbCAtIFJXICovCi0JRTEwMDBfVElEViAgICAgPSAweDAzODIwLCAvKiBUWCBJbnRlcnJ1cHQgRGVsYXkgVmFsdWUgLSBSVyAqLwotCUUxMDAwX1RYRENUTCAgID0gMHgwMzgyOCwgLyogVFggRGVzY3JpcHRvciBDb250cm9sIC0gUlcgKi8KLQlFMTAwMF9UQURWICAgICA9IDB4MDM4MkMsIC8qIFRYIEludGVycnVwdCBBYnNvbHV0ZSBEZWxheSBWYWwgLSBSVyAqLwotCUUxMDAwX1RBUkMwICAgID0gMHgwMzg0MCwgLyogVFggQXJiaXRyYXRpb24gQ291bnQgKDApICovCi0JRTEwMDBfVFhEQ1RMMSAgPSAweDAzOTI4LCAvKiBUWCBEZXNjcmlwdG9yIENvbnRyb2wgKDEpIC0gUlcgKi8KLQlFMTAwMF9UQVJDMSAgICA9IDB4MDM5NDAsIC8qIFRYIEFyYml0cmF0aW9uIENvdW50ICgxKSAqLworCUUxMDAwX1REQkFMICAgID0gMHgwMzgwMCwgLyogVHggRGVzY3JpcHRvciBCYXNlIEFkZHJlc3MgTG93IC0gUlcgKi8KKwlFMTAwMF9UREJBSCAgICA9IDB4MDM4MDQsIC8qIFR4IERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIEhpZ2ggLSBSVyAqLworCUUxMDAwX1RETEVOICAgID0gMHgwMzgwOCwgLyogVHggRGVzY3JpcHRvciBMZW5ndGggLSBSVyAqLworCUUxMDAwX1RESCAgICAgID0gMHgwMzgxMCwgLyogVHggRGVzY3JpcHRvciBIZWFkIC0gUlcgKi8KKwlFMTAwMF9URFQgICAgICA9IDB4MDM4MTgsIC8qIFR4IERlc2NyaXB0b3IgVGFpbCAtIFJXICovCisJRTEwMDBfVElEViAgICAgPSAweDAzODIwLCAvKiBUeCBJbnRlcnJ1cHQgRGVsYXkgVmFsdWUgLSBSVyAqLworCUUxMDAwX1RYRENUTF9CQVNFID0gMHgwMzgyOCwgLyogVHggRGVzY3JpcHRvciBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMKF9uKSAgIChFMTAwMF9UWERDVExfQkFTRSArIChfbiA8PCA4KSkKKwlFMTAwMF9UQURWICAgICA9IDB4MDM4MkMsIC8qIFR4IEludGVycnVwdCBBYnNvbHV0ZSBEZWxheSBWYWwgLSBSVyAqLworCUUxMDAwX1RBUkNfQkFTRSA9IDB4MDM4NDAsIC8qIFR4IEFyYml0cmF0aW9uIENvdW50ICgwKSAqLworI2RlZmluZSBFMTAwMF9UQVJDKF9uKSAgIChFMTAwMF9UQVJDX0JBU0UgKyAoX24gPDwgOCkpCiAJRTEwMDBfQ1JDRVJSUyAgPSAweDA0MDAwLCAvKiBDUkMgRXJyb3IgQ291bnQgLSBSL2NsciAqLwogCUUxMDAwX0FMR05FUlJDID0gMHgwNDAwNCwgLyogQWxpZ25tZW50IEVycm9yIENvdW50IC0gUi9jbHIgKi8KIAlFMTAwMF9TWU1FUlJTICA9IDB4MDQwMDgsIC8qIFN5bWJvbCBFcnJvciBDb3VudCAtIFIvY2xyICovCkBAIC0xMjcsNTMgKzEyOSw1MyBAQAogCUUxMDAwX0xBVEVDT0wgID0gMHgwNDAyMCwgLyogTGF0ZSBDb2xsaXNpb24gQ291bnQgLSBSL2NsciAqLwogCUUxMDAwX0NPTEMgICAgID0gMHgwNDAyOCwgLyogQ29sbGlzaW9uIENvdW50IC0gUi9jbHIgKi8KIAlFMTAwMF9EQyAgICAgICA9IDB4MDQwMzAsIC8qIERlZmVyIENvdW50IC0gUi9jbHIgKi8KLQlFMTAwMF9UTkNSUyAgICA9IDB4MDQwMzQsIC8qIFRYLU5vIENSUyAtIFIvY2xyICovCisJRTEwMDBfVE5DUlMgICAgPSAweDA0MDM0LCAvKiBUeC1ObyBDUlMgLSBSL2NsciAqLwogCUUxMDAwX1NFQyAgICAgID0gMHgwNDAzOCwgLyogU2VxdWVuY2UgRXJyb3IgQ291bnQgLSBSL2NsciAqLwogCUUxMDAwX0NFWFRFUlIgID0gMHgwNDAzQywgLyogQ2FycmllciBFeHRlbnNpb24gRXJyb3IgQ291bnQgLSBSL2NsciAqLwogCUUxMDAwX1JMRUMgICAgID0gMHgwNDA0MCwgLyogUmVjZWl2ZSBMZW5ndGggRXJyb3IgQ291bnQgLSBSL2NsciAqLwotCUUxMDAwX1hPTlJYQyAgID0gMHgwNDA0OCwgLyogWE9OIFJYIENvdW50IC0gUi9jbHIgKi8KLQlFMTAwMF9YT05UWEMgICA9IDB4MDQwNEMsIC8qIFhPTiBUWCBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfWE9GRlJYQyAgPSAweDA0MDUwLCAvKiBYT0ZGIFJYIENvdW50IC0gUi9jbHIgKi8KLQlFMTAwMF9YT0ZGVFhDICA9IDB4MDQwNTQsIC8qIFhPRkYgVFggQ291bnQgLSBSL2NsciAqLwotCUUxMDAwX0ZDUlVDICAgID0gMHgwNDA1OCwgLyogRmxvdyBDb250cm9sIFJYIFVuc3VwcG9ydGVkIENvdW50LSBSL2NsciAqLwotCUUxMDAwX1BSQzY0ICAgID0gMHgwNDA1QywgLyogUGFja2V0cyBSWCAoNjQgYnl0ZXMpIC0gUi9jbHIgKi8KLQlFMTAwMF9QUkMxMjcgICA9IDB4MDQwNjAsIC8qIFBhY2tldHMgUlggKDY1LTEyNyBieXRlcykgLSBSL2NsciAqLwotCUUxMDAwX1BSQzI1NSAgID0gMHgwNDA2NCwgLyogUGFja2V0cyBSWCAoMTI4LTI1NSBieXRlcykgLSBSL2NsciAqLwotCUUxMDAwX1BSQzUxMSAgID0gMHgwNDA2OCwgLyogUGFja2V0cyBSWCAoMjU1LTUxMSBieXRlcykgLSBSL2NsciAqLwotCUUxMDAwX1BSQzEwMjMgID0gMHgwNDA2QywgLyogUGFja2V0cyBSWCAoNTEyLTEwMjMgYnl0ZXMpIC0gUi9jbHIgKi8KLQlFMTAwMF9QUkMxNTIyICA9IDB4MDQwNzAsIC8qIFBhY2tldHMgUlggKDEwMjQtMTUyMiBieXRlcykgLSBSL2NsciAqLwotCUUxMDAwX0dQUkMgICAgID0gMHgwNDA3NCwgLyogR29vZCBQYWNrZXRzIFJYIENvdW50IC0gUi9jbHIgKi8KLQlFMTAwMF9CUFJDICAgICA9IDB4MDQwNzgsIC8qIEJyb2FkY2FzdCBQYWNrZXRzIFJYIENvdW50IC0gUi9jbHIgKi8KLQlFMTAwMF9NUFJDICAgICA9IDB4MDQwN0MsIC8qIE11bHRpY2FzdCBQYWNrZXRzIFJYIENvdW50IC0gUi9jbHIgKi8KLQlFMTAwMF9HUFRDICAgICA9IDB4MDQwODAsIC8qIEdvb2QgUGFja2V0cyBUWCBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfR09SQ0wgICAgPSAweDA0MDg4LCAvKiBHb29kIE9jdGV0cyBSWCBDb3VudCBMb3cgLSBSL2NsciAqLwotCUUxMDAwX0dPUkNIICAgID0gMHgwNDA4QywgLyogR29vZCBPY3RldHMgUlggQ291bnQgSGlnaCAtIFIvY2xyICovCi0JRTEwMDBfR09UQ0wgICAgPSAweDA0MDkwLCAvKiBHb29kIE9jdGV0cyBUWCBDb3VudCBMb3cgLSBSL2NsciAqLwotCUUxMDAwX0dPVENIICAgID0gMHgwNDA5NCwgLyogR29vZCBPY3RldHMgVFggQ291bnQgSGlnaCAtIFIvY2xyICovCi0JRTEwMDBfUk5CQyAgICAgPSAweDA0MEEwLCAvKiBSWCBObyBCdWZmZXJzIENvdW50IC0gUi9jbHIgKi8KLQlFMTAwMF9SVUMgICAgICA9IDB4MDQwQTQsIC8qIFJYIFVuZGVyc2l6ZSBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfUkZDICAgICAgPSAweDA0MEE4LCAvKiBSWCBGcmFnbWVudCBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfUk9DICAgICAgPSAweDA0MEFDLCAvKiBSWCBPdmVyc2l6ZSBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfUkpDICAgICAgPSAweDA0MEIwLCAvKiBSWCBKYWJiZXIgQ291bnQgLSBSL2NsciAqLwotCUUxMDAwX01HVFBSQyAgID0gMHgwNDBCNCwgLyogTWFuYWdlbWVudCBQYWNrZXRzIFJYIENvdW50IC0gUi9jbHIgKi8KKwlFMTAwMF9YT05SWEMgICA9IDB4MDQwNDgsIC8qIFhPTiBSeCBDb3VudCAtIFIvY2xyICovCisJRTEwMDBfWE9OVFhDICAgPSAweDA0MDRDLCAvKiBYT04gVHggQ291bnQgLSBSL2NsciAqLworCUUxMDAwX1hPRkZSWEMgID0gMHgwNDA1MCwgLyogWE9GRiBSeCBDb3VudCAtIFIvY2xyICovCisJRTEwMDBfWE9GRlRYQyAgPSAweDA0MDU0LCAvKiBYT0ZGIFR4IENvdW50IC0gUi9jbHIgKi8KKwlFMTAwMF9GQ1JVQyAgICA9IDB4MDQwNTgsIC8qIEZsb3cgQ29udHJvbCBSeCBVbnN1cHBvcnRlZCBDb3VudC0gUi9jbHIgKi8KKwlFMTAwMF9QUkM2NCAgICA9IDB4MDQwNUMsIC8qIFBhY2tldHMgUnggKDY0IGJ5dGVzKSAtIFIvY2xyICovCisJRTEwMDBfUFJDMTI3ICAgPSAweDA0MDYwLCAvKiBQYWNrZXRzIFJ4ICg2NS0xMjcgYnl0ZXMpIC0gUi9jbHIgKi8KKwlFMTAwMF9QUkMyNTUgICA9IDB4MDQwNjQsIC8qIFBhY2tldHMgUnggKDEyOC0yNTUgYnl0ZXMpIC0gUi9jbHIgKi8KKwlFMTAwMF9QUkM1MTEgICA9IDB4MDQwNjgsIC8qIFBhY2tldHMgUnggKDI1NS01MTEgYnl0ZXMpIC0gUi9jbHIgKi8KKwlFMTAwMF9QUkMxMDIzICA9IDB4MDQwNkMsIC8qIFBhY2tldHMgUnggKDUxMi0xMDIzIGJ5dGVzKSAtIFIvY2xyICovCisJRTEwMDBfUFJDMTUyMiAgPSAweDA0MDcwLCAvKiBQYWNrZXRzIFJ4ICgxMDI0LTE1MjIgYnl0ZXMpIC0gUi9jbHIgKi8KKwlFMTAwMF9HUFJDICAgICA9IDB4MDQwNzQsIC8qIEdvb2QgUGFja2V0cyBSeCBDb3VudCAtIFIvY2xyICovCisJRTEwMDBfQlBSQyAgICAgPSAweDA0MDc4LCAvKiBCcm9hZGNhc3QgUGFja2V0cyBSeCBDb3VudCAtIFIvY2xyICovCisJRTEwMDBfTVBSQyAgICAgPSAweDA0MDdDLCAvKiBNdWx0aWNhc3QgUGFja2V0cyBSeCBDb3VudCAtIFIvY2xyICovCisJRTEwMDBfR1BUQyAgICAgPSAweDA0MDgwLCAvKiBHb29kIFBhY2tldHMgVHggQ291bnQgLSBSL2NsciAqLworCUUxMDAwX0dPUkNMICAgID0gMHgwNDA4OCwgLyogR29vZCBPY3RldHMgUnggQ291bnQgTG93IC0gUi9jbHIgKi8KKwlFMTAwMF9HT1JDSCAgICA9IDB4MDQwOEMsIC8qIEdvb2QgT2N0ZXRzIFJ4IENvdW50IEhpZ2ggLSBSL2NsciAqLworCUUxMDAwX0dPVENMICAgID0gMHgwNDA5MCwgLyogR29vZCBPY3RldHMgVHggQ291bnQgTG93IC0gUi9jbHIgKi8KKwlFMTAwMF9HT1RDSCAgICA9IDB4MDQwOTQsIC8qIEdvb2QgT2N0ZXRzIFR4IENvdW50IEhpZ2ggLSBSL2NsciAqLworCUUxMDAwX1JOQkMgICAgID0gMHgwNDBBMCwgLyogUnggTm8gQnVmZmVycyBDb3VudCAtIFIvY2xyICovCisJRTEwMDBfUlVDICAgICAgPSAweDA0MEE0LCAvKiBSeCBVbmRlcnNpemUgQ291bnQgLSBSL2NsciAqLworCUUxMDAwX1JGQyAgICAgID0gMHgwNDBBOCwgLyogUnggRnJhZ21lbnQgQ291bnQgLSBSL2NsciAqLworCUUxMDAwX1JPQyAgICAgID0gMHgwNDBBQywgLyogUnggT3ZlcnNpemUgQ291bnQgLSBSL2NsciAqLworCUUxMDAwX1JKQyAgICAgID0gMHgwNDBCMCwgLyogUnggSmFiYmVyIENvdW50IC0gUi9jbHIgKi8KKwlFMTAwMF9NR1RQUkMgICA9IDB4MDQwQjQsIC8qIE1hbmFnZW1lbnQgUGFja2V0cyBSeCBDb3VudCAtIFIvY2xyICovCiAJRTEwMDBfTUdUUERDICAgPSAweDA0MEI4LCAvKiBNYW5hZ2VtZW50IFBhY2tldHMgRHJvcHBlZCBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfTUdUUFRDICAgPSAweDA0MEJDLCAvKiBNYW5hZ2VtZW50IFBhY2tldHMgVFggQ291bnQgLSBSL2NsciAqLwotCUUxMDAwX1RPUkwgICAgID0gMHgwNDBDMCwgLyogVG90YWwgT2N0ZXRzIFJYIExvdyAtIFIvY2xyICovCi0JRTEwMDBfVE9SSCAgICAgPSAweDA0MEM0LCAvKiBUb3RhbCBPY3RldHMgUlggSGlnaCAtIFIvY2xyICovCi0JRTEwMDBfVE9UTCAgICAgPSAweDA0MEM4LCAvKiBUb3RhbCBPY3RldHMgVFggTG93IC0gUi9jbHIgKi8KLQlFMTAwMF9UT1RIICAgICA9IDB4MDQwQ0MsIC8qIFRvdGFsIE9jdGV0cyBUWCBIaWdoIC0gUi9jbHIgKi8KLQlFMTAwMF9UUFIgICAgICA9IDB4MDQwRDAsIC8qIFRvdGFsIFBhY2tldHMgUlggLSBSL2NsciAqLwotCUUxMDAwX1RQVCAgICAgID0gMHgwNDBENCwgLyogVG90YWwgUGFja2V0cyBUWCAtIFIvY2xyICovCi0JRTEwMDBfUFRDNjQgICAgPSAweDA0MEQ4LCAvKiBQYWNrZXRzIFRYICg2NCBieXRlcykgLSBSL2NsciAqLwotCUUxMDAwX1BUQzEyNyAgID0gMHgwNDBEQywgLyogUGFja2V0cyBUWCAoNjUtMTI3IGJ5dGVzKSAtIFIvY2xyICovCi0JRTEwMDBfUFRDMjU1ICAgPSAweDA0MEUwLCAvKiBQYWNrZXRzIFRYICgxMjgtMjU1IGJ5dGVzKSAtIFIvY2xyICovCi0JRTEwMDBfUFRDNTExICAgPSAweDA0MEU0LCAvKiBQYWNrZXRzIFRYICgyNTYtNTExIGJ5dGVzKSAtIFIvY2xyICovCi0JRTEwMDBfUFRDMTAyMyAgPSAweDA0MEU4LCAvKiBQYWNrZXRzIFRYICg1MTItMTAyMyBieXRlcykgLSBSL2NsciAqLwotCUUxMDAwX1BUQzE1MjIgID0gMHgwNDBFQywgLyogUGFja2V0cyBUWCAoMTAyNC0xNTIyIEJ5dGVzKSAtIFIvY2xyICovCi0JRTEwMDBfTVBUQyAgICAgPSAweDA0MEYwLCAvKiBNdWx0aWNhc3QgUGFja2V0cyBUWCBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfQlBUQyAgICAgPSAweDA0MEY0LCAvKiBCcm9hZGNhc3QgUGFja2V0cyBUWCBDb3VudCAtIFIvY2xyICovCi0JRTEwMDBfVFNDVEMgICAgPSAweDA0MEY4LCAvKiBUQ1AgU2VnbWVudGF0aW9uIENvbnRleHQgVFggLSBSL2NsciAqLwotCUUxMDAwX1RTQ1RGQyAgID0gMHgwNDBGQywgLyogVENQIFNlZ21lbnRhdGlvbiBDb250ZXh0IFRYIEZhaWwgLSBSL2NsciAqLworCUUxMDAwX01HVFBUQyAgID0gMHgwNDBCQywgLyogTWFuYWdlbWVudCBQYWNrZXRzIFR4IENvdW50IC0gUi9jbHIgKi8KKwlFMTAwMF9UT1JMICAgICA9IDB4MDQwQzAsIC8qIFRvdGFsIE9jdGV0cyBSeCBMb3cgLSBSL2NsciAqLworCUUxMDAwX1RPUkggICAgID0gMHgwNDBDNCwgLyogVG90YWwgT2N0ZXRzIFJ4IEhpZ2ggLSBSL2NsciAqLworCUUxMDAwX1RPVEwgICAgID0gMHgwNDBDOCwgLyogVG90YWwgT2N0ZXRzIFR4IExvdyAtIFIvY2xyICovCisJRTEwMDBfVE9USCAgICAgPSAweDA0MENDLCAvKiBUb3RhbCBPY3RldHMgVHggSGlnaCAtIFIvY2xyICovCisJRTEwMDBfVFBSICAgICAgPSAweDA0MEQwLCAvKiBUb3RhbCBQYWNrZXRzIFJ4IC0gUi9jbHIgKi8KKwlFMTAwMF9UUFQgICAgICA9IDB4MDQwRDQsIC8qIFRvdGFsIFBhY2tldHMgVHggLSBSL2NsciAqLworCUUxMDAwX1BUQzY0ICAgID0gMHgwNDBEOCwgLyogUGFja2V0cyBUeCAoNjQgYnl0ZXMpIC0gUi9jbHIgKi8KKwlFMTAwMF9QVEMxMjcgICA9IDB4MDQwREMsIC8qIFBhY2tldHMgVHggKDY1LTEyNyBieXRlcykgLSBSL2NsciAqLworCUUxMDAwX1BUQzI1NSAgID0gMHgwNDBFMCwgLyogUGFja2V0cyBUeCAoMTI4LTI1NSBieXRlcykgLSBSL2NsciAqLworCUUxMDAwX1BUQzUxMSAgID0gMHgwNDBFNCwgLyogUGFja2V0cyBUeCAoMjU2LTUxMSBieXRlcykgLSBSL2NsciAqLworCUUxMDAwX1BUQzEwMjMgID0gMHgwNDBFOCwgLyogUGFja2V0cyBUeCAoNTEyLTEwMjMgYnl0ZXMpIC0gUi9jbHIgKi8KKwlFMTAwMF9QVEMxNTIyICA9IDB4MDQwRUMsIC8qIFBhY2tldHMgVHggKDEwMjQtMTUyMiBCeXRlcykgLSBSL2NsciAqLworCUUxMDAwX01QVEMgICAgID0gMHgwNDBGMCwgLyogTXVsdGljYXN0IFBhY2tldHMgVHggQ291bnQgLSBSL2NsciAqLworCUUxMDAwX0JQVEMgICAgID0gMHgwNDBGNCwgLyogQnJvYWRjYXN0IFBhY2tldHMgVHggQ291bnQgLSBSL2NsciAqLworCUUxMDAwX1RTQ1RDICAgID0gMHgwNDBGOCwgLyogVENQIFNlZ21lbnRhdGlvbiBDb250ZXh0IFR4IC0gUi9jbHIgKi8KKwlFMTAwMF9UU0NURkMgICA9IDB4MDQwRkMsIC8qIFRDUCBTZWdtZW50YXRpb24gQ29udGV4dCBUeCBGYWlsIC0gUi9jbHIgKi8KIAlFMTAwMF9JQUMgICAgICA9IDB4MDQxMDAsIC8qIEludGVycnVwdCBBc3NlcnRpb24gQ291bnQgKi8KIAlFMTAwMF9JQ1JYUFRDICA9IDB4MDQxMDQsIC8qIElycSBDYXVzZSBSeCBQYWNrZXQgVGltZXIgRXhwaXJlIENvdW50ICovCiAJRTEwMDBfSUNSWEFUQyAgPSAweDA0MTA4LCAvKiBJcnEgQ2F1c2UgUnggQWJzIFRpbWVyIEV4cGlyZSBDb3VudCAqLwpAQCAtMTgzLDggKzE4NSw4IEBACiAJRTEwMDBfSUNUWFFNVEMgPSAweDA0MTFDLCAvKiBJcnEgQ2F1c2UgVHggUXVldWUgTWluVGhyZXNob2xkIENvdW50ICovCiAJRTEwMDBfSUNSWERNVEMgPSAweDA0MTIwLCAvKiBJcnEgQ2F1c2UgUnggRGVzYyBNaW5UaHJlc2hvbGQgQ291bnQgKi8KIAlFMTAwMF9JQ1JYT0MgICA9IDB4MDQxMjQsIC8qIElycSBDYXVzZSBSZWNlaXZlciBPdmVycnVuIENvdW50ICovCi0JRTEwMDBfUlhDU1VNICAgPSAweDA1MDAwLCAvKiBSWCBDaGVja3N1bSBDb250cm9sIC0gUlcgKi8KLQlFMTAwMF9SRkNUTCAgICA9IDB4MDUwMDgsIC8qIFJlY2VpdmUgRmlsdGVyIENvbnRyb2wqLworCUUxMDAwX1JYQ1NVTSAgID0gMHgwNTAwMCwgLyogUnggQ2hlY2tzdW0gQ29udHJvbCAtIFJXICovCisJRTEwMDBfUkZDVEwgICAgPSAweDA1MDA4LCAvKiBSZWNlaXZlIEZpbHRlciBDb250cm9sICovCiAJRTEwMDBfTVRBICAgICAgPSAweDA1MjAwLCAvKiBNdWx0aWNhc3QgVGFibGUgQXJyYXkgLSBSVyBBcnJheSAqLwogCUUxMDAwX1JBICAgICAgID0gMHgwNTQwMCwgLyogUmVjZWl2ZSBBZGRyZXNzIC0gUlcgQXJyYXkgKi8KIAlFMTAwMF9WRlRBICAgICA9IDB4MDU2MDAsIC8qIFZMQU4gRmlsdGVyIFRhYmxlIEFycmF5IC0gUlcgQXJyYXkgKi8KQEAgLTIwMiw3ICsyMDQsNyBAQAogCUUxMDAwX0ZBQ1RQUyAgICA9IDB4MDVCMzAsIC8qIEZ1bmN0aW9uIEFjdGl2ZSBhbmQgUG93ZXIgU3RhdGUgdG8gTU5HICovCiAJRTEwMDBfU1dTTSAgICAgID0gMHgwNUI1MCwgLyogU1cgU2VtYXBob3JlICovCiAJRTEwMDBfRldTTSAgICAgID0gMHgwNUI1NCwgLyogRlcgU2VtYXBob3JlICovCi0JRTEwMDBfSElDUiAgICAgID0gMHgwOEYwMCwgLyogSG9zdCBJbnRlZmFjZSBDb250cm9sICovCisJRTEwMDBfSElDUiAgICAgID0gMHgwOEYwMCwgLyogSG9zdCBJbnRlcmZhY2UgQ29udHJvbCAqLwogfTsKIAogLyogUlNTIHJlZ2lzdGVycyAqLwpAQCAtMjUwLDggKzI1Miw4IEBACiAjZGVmaW5lIEUxMDAwX1ZGVEFfRU5UUllfQklUX1NISUZUX01BU0sJMHgxRgogCiAjZGVmaW5lIEUxMDAwX0hJQ1JfRU4JCQkweDAxICAvKiBFbmFibGUgYml0IC0gUk8gKi8KLSNkZWZpbmUgRTEwMDBfSElDUl9DCQkJMHgwMiAgLyogRHJpdmVyIHNldHMgdGhpcyBiaXQgd2hlbiBkb25lCi0JCQkJCSAgICAgICAqIHRvIHB1dCBjb21tYW5kIGluIFJBTSAqLworLyogRHJpdmVyIHNldHMgdGhpcyBiaXQgd2hlbiBkb25lIHRvIHB1dCBjb21tYW5kIGluIFJBTSAqLworI2RlZmluZSBFMTAwMF9ISUNSX0MJCQkweDAyCiAjZGVmaW5lIEUxMDAwX0hJQ1JfRldfUkVTRVRfRU5BQkxFCTB4NDAKICNkZWZpbmUgRTEwMDBfSElDUl9GV19SRVNFVAkJMHg4MAogCkBAIC00MDAsNyArNDAyLDcgQEAKIAllMTAwMF9yZXZfcG9sYXJpdHlfdW5kZWZpbmVkID0gMHhGRgogfTsKIAotZW51bSBlMTAwMF9mY19tb2RlIHsKK2VudW0gZTEwMDBfZmNfdHlwZSB7CiAJZTEwMDBfZmNfbm9uZSA9IDAsCiAJZTEwMDBfZmNfcnhfcGF1c2UsCiAJZTEwMDBfZmNfdHhfcGF1c2UsCkBAIC02ODUsOCArNjg3LDcgQEAKIAlzMzIgICgqZ2V0X2xpbmtfdXBfaW5mbykoc3RydWN0IGUxMDAwX2h3ICosIHUxNiAqLCB1MTYgKik7CiAJczMyICAoKmxlZF9vbikoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpsZWRfb2ZmKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0Jdm9pZCAoKm1jX2FkZHJfbGlzdF91cGRhdGUpKHN0cnVjdCBlMTAwMF9odyAqLCB1OCAqLCB1MzIsIHUzMiwKLQkJCQkJIHUzMik7CisJdm9pZCAoKnVwZGF0ZV9tY19hZGRyX2xpc3QpKHN0cnVjdCBlMTAwMF9odyAqLCB1OCAqLCB1MzIsIHUzMiwgdTMyKTsKIAlzMzIgICgqcmVzZXRfaHcpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqaW5pdF9odykoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpzZXR1cF9saW5rKShzdHJ1Y3QgZTEwMDBfaHcgKik7CkBAIC03MjgsMTYgKzcyOSwxMiBAQAogCXU4IHBlcm1fYWRkcls2XTsKIAogCWVudW0gZTEwMDBfbWFjX3R5cGUgdHlwZTsKLQllbnVtIGUxMDAwX2ZjX21vZGUgIGZjOwotCWVudW0gZTEwMDBfZmNfbW9kZSAgb3JpZ2luYWxfZmM7CiAKIAl1MzIgY29sbGlzaW9uX2RlbHRhOwogCXUzMiBsZWRjdGxfZGVmYXVsdDsKIAl1MzIgbGVkY3RsX21vZGUxOwogCXUzMiBsZWRjdGxfbW9kZTI7Ci0JdTMyIG1heF9mcmFtZV9zaXplOwogCXUzMiBtY19maWx0ZXJfdHlwZTsKLQl1MzIgbWluX2ZyYW1lX3NpemU7CiAJdTMyIHR4X3BhY2tldF9kZWx0YTsKIAl1MzIgdHhjdzsKIApAQCAtNzQ4LDkgKzc0NSw2IEBACiAJdTE2IGlmc19zdGVwX3NpemU7CiAJdTE2IG10YV9yZWdfY291bnQ7CiAJdTE2IHJhcl9lbnRyeV9jb3VudDsKLQl1MTYgZmNfaGlnaF93YXRlcjsKLQl1MTYgZmNfbG93X3dhdGVyOwotCXUxNiBmY19wYXVzZV90aW1lOwogCiAJdTggIGZvcmNlZF9zcGVlZF9kdXBsZXg7CiAKQEAgLTc4MCw2ICs3NzQsOCBAQAogCXUzMiByZXNldF9kZWxheV91czsgLyogaW4gdXNlYyAqLwogCXUzMiByZXZpc2lvbjsKIAorCWVudW0gZTEwMDBfbWVkaWFfdHlwZSBtZWRpYV90eXBlOworCiAJdTE2IGF1dG9uZWdfYWR2ZXJ0aXNlZDsKIAl1MTYgYXV0b25lZ19tYXNrOwogCXUxNiBjYWJsZV9sZW5ndGg7CkBAIC03OTIsNyArNzg4LDcgQEAKIAlib29sIGlzX21kaXg7CiAJYm9vbCBwb2xhcml0eV9jb3JyZWN0aW9uOwogCWJvb2wgc3BlZWRfZG93bmdyYWRlZDsKLQlib29sIHdhaXRfZm9yX2xpbms7CisJYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gewpAQCAtODE3LDYgKzgxMywxNiBAQAogCXUxNiBmdW5jOwogfTsKIAorc3RydWN0IGUxMDAwX2ZjX2luZm8geworCXUzMiBoaWdoX3dhdGVyOyAgICAgICAgICAvKiBGbG93IGNvbnRyb2wgaGlnaC13YXRlciBtYXJrICovCisJdTMyIGxvd193YXRlcjsgICAgICAgICAgIC8qIEZsb3cgY29udHJvbCBsb3ctd2F0ZXIgbWFyayAqLworCXUxNiBwYXVzZV90aW1lOyAgICAgICAgICAvKiBGbG93IGNvbnRyb2wgcGF1c2UgdGltZXIgKi8KKwlib29sIHNlbmRfeG9uOyAgICAgICAgICAgLyogRmxvdyBjb250cm9sIHNlbmQgWE9OICovCisJYm9vbCBzdHJpY3RfaWVlZTsgICAgICAgIC8qIFN0cmljdCBJRUVFIG1vZGUgKi8KKwllbnVtIGUxMDAwX2ZjX3R5cGUgdHlwZTsgLyogVHlwZSBvZiBmbG93IGNvbnRyb2wgKi8KKwllbnVtIGUxMDAwX2ZjX3R5cGUgb3JpZ2luYWxfdHlwZTsKK307CisKIHN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3MSB7CiAJYm9vbCBsYWFfaXNfcHJlc2VudDsKIAlib29sIGFsdF9tYWNfYWRkcl9pc19wcmVzZW50OwpAQCAtODQxLDYgKzg0Nyw3IEBACiAJdTggX19pb21lbSAqZmxhc2hfYWRkcmVzczsKIAogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAgbWFjOworCXN0cnVjdCBlMTAwMF9mY19pbmZvICAgZmM7CiAJc3RydWN0IGUxMDAwX3BoeV9pbmZvICBwaHk7CiAJc3RydWN0IGUxMDAwX252bV9pbmZvICBudm07CiAJc3RydWN0IGUxMDAwX2J1c19pbmZvICBidXM7CkBAIC04NTAsOCArODU3LDYgQEAKIAkJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTcxCWU4MjU3MTsKIAkJc3RydWN0IGUxMDAwX2Rldl9zcGVjX2ljaDhsYW4JaWNoOGxhbjsKIAl9IGRldl9zcGVjOwotCi0JZW51bSBlMTAwMF9tZWRpYV90eXBlIG1lZGlhX3R5cGU7CiB9OwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCmluZGV4IDhmODEzOWQuLjc2ODQ4NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgUFJPLzEwMDAgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0yNDMsOCArMjQzLDcgQEAKIAl1MzIgc2VjdG9yX2VuZF9hZGRyOwogCXUxNiBpOwogCi0JLyogQ2FuJ3QgcmVhZCBmbGFzaCByZWdpc3RlcnMgaWYgdGhlIHJlZ2lzdGVyIHNldCBpc24ndCBtYXBwZWQuCi0JICovCisJLyogQ2FuJ3QgcmVhZCBmbGFzaCByZWdpc3RlcnMgaWYgdGhlIHJlZ2lzdGVyIHNldCBpc24ndCBtYXBwZWQuICovCiAJaWYgKCFody0+Zmxhc2hfYWRkcmVzcykgewogCQlod19kYmcoaHcsICJFUlJPUjogRmxhc2ggcmVnaXN0ZXJzIG5vdCBtYXBwZWRcbiIpOwogCQlyZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CkBAIC0yNTQsMTcgKzI1MywyMSBAQAogCiAJZ2ZwcmVnID0gZXIzMmZsYXNoKElDSF9GTEFTSF9HRlBSRUcpOwogCi0JLyogc2VjdG9yX1hfYWRkciBpcyBhICJzZWN0b3IiLWFsaWduZWQgYWRkcmVzcyAoNDA5NiBieXRlcykKKwkvKgorCSAqIHNlY3Rvcl9YX2FkZHIgaXMgYSAic2VjdG9yIi1hbGlnbmVkIGFkZHJlc3MgKDQwOTYgYnl0ZXMpCiAJICogQWRkIDEgdG8gc2VjdG9yX2VuZF9hZGRyIHNpbmNlIHRoaXMgc2VjdG9yIGlzIGluY2x1ZGVkIGluCi0JICogdGhlIG92ZXJhbGwgc2l6ZS4gKi8KKwkgKiB0aGUgb3ZlcmFsbCBzaXplLgorCSAqLwogCXNlY3Rvcl9iYXNlX2FkZHIgPSBnZnByZWcgJiBGTEFTSF9HRlBSRUdfQkFTRV9NQVNLOwogCXNlY3Rvcl9lbmRfYWRkciA9ICgoZ2ZwcmVnID4+IDE2KSAmIEZMQVNIX0dGUFJFR19CQVNFX01BU0spICsgMTsKIAogCS8qIGZsYXNoX2Jhc2VfYWRkciBpcyBieXRlLWFsaWduZWQgKi8KIAludm0tPmZsYXNoX2Jhc2VfYWRkciA9IHNlY3Rvcl9iYXNlX2FkZHIgPDwgRkxBU0hfU0VDVE9SX0FERFJfU0hJRlQ7CiAKLQkvKiBmaW5kIHRvdGFsIHNpemUgb2YgdGhlIE5WTSwgdGhlbiBjdXQgaW4gaGFsZiBzaW5jZSB0aGUgdG90YWwKLQkgKiBzaXplIHJlcHJlc2VudHMgdHdvIHNlcGFyYXRlIE5WTSBiYW5rcy4gKi8KKwkvKgorCSAqIGZpbmQgdG90YWwgc2l6ZSBvZiB0aGUgTlZNLCB0aGVuIGN1dCBpbiBoYWxmIHNpbmNlIHRoZSB0b3RhbAorCSAqIHNpemUgcmVwcmVzZW50cyB0d28gc2VwYXJhdGUgTlZNIGJhbmtzLgorCSAqLwogCW52bS0+Zmxhc2hfYmFua19zaXplID0gKHNlY3Rvcl9lbmRfYWRkciAtIHNlY3Rvcl9iYXNlX2FkZHIpCiAJCQkJPDwgRkxBU0hfU0VDVE9SX0FERFJfU0hJRlQ7CiAJbnZtLT5mbGFzaF9iYW5rX3NpemUgLz0gMjsKQEAgLTI5NSw3ICsyOTgsNyBAQAogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAKIAkvKiBTZXQgbWVkaWEgdHlwZSBmdW5jdGlvbiBwb2ludGVyICovCi0JaHctPm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcjsKKwlody0+cGh5Lm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcjsKIAogCS8qIFNldCBtdGEgcmVnaXN0ZXIgY291bnQgKi8KIAltYWMtPm10YV9yZWdfY291bnQgPSAzMjsKQEAgLTMxMyw3ICszMTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgczMyIGUxMDAwX2dldF9pbnZhcmlhbnRzX2ljaDhsYW4oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgczMyIGUxMDAwX2dldF92YXJpYW50c19pY2g4bGFuKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJczMyIHJjOwpAQCAtNDUwLDcgKzQ1Myw3IEBACiAKIAl1ZGVsYXkoMSk7CiAKLQlpZiAocGh5LT53YWl0X2Zvcl9saW5rKSB7CisJaWYgKHBoeS0+YXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CiAJCWh3X2RiZyhodywgIldhaXRpbmcgZm9yIGZvcmNlZCBzcGVlZC9kdXBsZXggbGluayBvbiBJRkUgcGh5LlxuIik7CiAKIAkJcmV0X3ZhbCA9IGUxMDAwZV9waHlfaGFzX2xpbmtfZ2VuZXJpYyhodywKQEAgLTQ5Niw3ICs0OTksOCBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCS8qIEluaXRpYWxpemUgdGhlIFBIWSBmcm9tIHRoZSBOVk0gb24gSUNIIHBsYXRmb3Jtcy4gIFRoaXMKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIFBIWSBmcm9tIHRoZSBOVk0gb24gSUNIIHBsYXRmb3Jtcy4gIFRoaXMKIAkgKiBpcyBuZWVkZWQgZHVlIHRvIGFuIGlzc3VlIHdoZXJlIHRoZSBOVk0gY29uZmlndXJhdGlvbiBpcwogCSAqIG5vdCBwcm9wZXJseSBhdXRvbG9hZGVkIGFmdGVyIHBvd2VyIHRyYW5zaXRpb25zLgogCSAqIFRoZXJlZm9yZSwgYWZ0ZXIgZWFjaCBQSFkgcmVzZXQsIHdlIHdpbGwgbG9hZCB0aGUKQEAgLTUyMyw3ICs1MjcsOCBAQAogCQkJdWRlbGF5KDEwMCk7CiAJCX0gd2hpbGUgKCghZGF0YSkgJiYgLS1sb29wKTsKIAotCQkvKiBJZiBiYXNpYyBjb25maWd1cmF0aW9uIGlzIGluY29tcGxldGUgYmVmb3JlIHRoZSBhYm92ZSBsb29wCisJCS8qCisJCSAqIElmIGJhc2ljIGNvbmZpZ3VyYXRpb24gaXMgaW5jb21wbGV0ZSBiZWZvcmUgdGhlIGFib3ZlIGxvb3AKIAkJICogY291bnQgcmVhY2hlcyAwLCBsb2FkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZyb20gTlZNIHdpbGwKIAkJICogbGVhdmUgdGhlIFBIWSBpbiBhIGJhZCBzdGF0ZSBwb3NzaWJseSByZXN1bHRpbmcgaW4gbm8gbGluay4KIAkJICovCkBAIC01MzYsOCArNTQxLDEwIEBACiAJCWRhdGEgJj0gfkUxMDAwX1NUQVRVU19MQU5fSU5JVF9ET05FOwogCQlldzMyKFNUQVRVUywgZGF0YSk7CiAKLQkJLyogTWFrZSBzdXJlIEhXIGRvZXMgbm90IGNvbmZpZ3VyZSBMQ0QgZnJvbSBQSFkKLQkJICogZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBiZWZvcmUgU1cgY29uZmlndXJhdGlvbiAqLworCQkvKgorCQkgKiBNYWtlIHN1cmUgSFcgZG9lcyBub3QgY29uZmlndXJlIExDRCBmcm9tIFBIWQorCQkgKiBleHRlbmRlZCBjb25maWd1cmF0aW9uIGJlZm9yZSBTVyBjb25maWd1cmF0aW9uCisJCSAqLwogCQlkYXRhID0gZXIzMihFWFRDTkZfQ1RSTCk7CiAJCWlmIChkYXRhICYgRTEwMDBfRVhUQ05GX0NUUkxfTENEX1dSSVRFX0VOQUJMRSkKIAkJCXJldHVybiAwOwpAQCAtNTUxLDggKzU1OCw3IEBACiAJCWNuZl9iYXNlX2FkZHIgPSBkYXRhICYgRTEwMDBfRVhUQ05GX0NUUkxfRVhUX0NORl9QT0lOVEVSX01BU0s7CiAJCWNuZl9iYXNlX2FkZHIgPj49IEUxMDAwX0VYVENORl9DVFJMX0VYVF9DTkZfUE9JTlRFUl9TSElGVDsKIAotCQkvKiBDb25maWd1cmUgTENEIGZyb20gZXh0ZW5kZWQgY29uZmlndXJhdGlvbgotCQkgKiByZWdpb24uICovCisJCS8qIENvbmZpZ3VyZSBMQ0QgZnJvbSBleHRlbmRlZCBjb25maWd1cmF0aW9uIHJlZ2lvbi4gKi8KIAogCQkvKiBjbmZfYmFzZV9hZGRyIGlzIGluIERXT1JEICovCiAJCXdvcmRfYWRkciA9ICh1MTYpKGNuZl9iYXNlX2FkZHIgPDwgMSk7CkBAIC02NzEsNyArNjc3LDcgQEAKICAqICBlMTAwMF9jaGVja19wb2xhcml0eV9pZmVfaWNoOGxhbiAtIENoZWNrIGNhYmxlIHBvbGFyaXR5IGZvciBJRkUgUEhZCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCi0gKiAgUG9sYXJpdHkgaXMgZGV0ZXJtaW5lZCBvbiB0aGUgcG9sYXJpdHkgcmV2ZXJhbCBmZWF0dXJlIGJlaW5nIGVuYWJsZWQuCisgKiAgUG9sYXJpdHkgaXMgZGV0ZXJtaW5lZCBvbiB0aGUgcG9sYXJpdHkgcmV2ZXJzYWwgZmVhdHVyZSBiZWluZyBlbmFibGVkLgogICogIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgYnkgb3RoZXIgZmFtaWx5LXNwZWNpZmljCiAgKiAgcm91dGluZXMuCiAgKiovCkBAIC02ODEsOCArNjg3LDggQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2RhdGEsIG9mZnNldCwgbWFzazsKIAotCS8qIFBvbGFyaXR5IGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIHJldmVyc2FsIGZlYXR1cmUKLQkgKiBiZWluZyBlbmFibGVkLgorCS8qCisJICogUG9sYXJpdHkgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgcmV2ZXJzYWwgZmVhdHVyZSBiZWluZyBlbmFibGVkLgogCSAqLwogCWlmIChwaHktPnBvbGFyaXR5X2NvcnJlY3Rpb24pIHsKIAkJb2Zmc2V0CT0gSUZFX1BIWV9FWFRFTkRFRF9TVEFUVVNfQ09OVFJPTDsKQEAgLTczMSw4ICs3MzcsMTAgQEAKIAkJcGh5X2N0cmwgfD0gRTEwMDBfUEhZX0NUUkxfRDBBX0xQTFU7CiAJCWV3MzIoUEhZX0NUUkwsIHBoeV9jdHJsKTsKIAotCQkvKiBDYWxsIGdpZyBzcGVlZCBkcm9wIHdvcmthcm91bmQgb24gTFBMVSBiZWZvcmUgYWNjZXNzaW5nCi0JCSAqIGFueSBQSFkgcmVnaXN0ZXJzICovCisJCS8qCisJCSAqIENhbGwgZ2lnIHNwZWVkIGRyb3Agd29ya2Fyb3VuZCBvbiBMUExVIGJlZm9yZSBhY2Nlc3NpbmcKKwkJICogYW55IFBIWSByZWdpc3RlcnMKKwkJICovCiAJCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwX2ljaDhsYW4pICYmCiAJCSAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9pZ3BfMykpCiAJCQllMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oaHcpOwpAQCAtNzQ3LDMwICs3NTUsMzIgQEAKIAkJcGh5X2N0cmwgJj0gfkUxMDAwX1BIWV9DVFJMX0QwQV9MUExVOwogCQlldzMyKFBIWV9DVFJMLCBwaHlfY3RybCk7CiAKLQkJLyogTFBMVSBhbmQgU21hcnRTcGVlZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgTFBMVSBpcyB1c2VkCisJCS8qCisJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIExQTFUgaXMgdXNlZAogCQkgKiBkdXJpbmcgRHggc3RhdGVzIHdoZXJlIHRoZSBwb3dlciBjb25zZXJ2YXRpb24gaXMgbW9zdAogCQkgKiBpbXBvcnRhbnQuICBEdXJpbmcgZHJpdmVyIGFjdGl2aXR5IHdlIHNob3VsZCBlbmFibGUKLQkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4gKi8KKwkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4KKwkJICovCiAJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29uKSB7CiAJCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICZkYXRhKTsKKwkJCQkJICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJcmV0dXJuIHJldF92YWw7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKIAkJCXJldF92YWwgPSBlMWVfd3BoeShodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCQkgICAgIGRhdGEpOworCQkJCQkgICBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCQl9IGVsc2UgaWYgKHBoeS0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb2ZmKSB7CiAJCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICZkYXRhKTsKKwkJCQkJICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJcmV0dXJuIHJldF92YWw7CiAKIAkJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7CiAJCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICBkYXRhKTsKKwkJCQkJICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJfQpAQCAtODA0LDM0ICs4MTQsMzIgQEAKIAlpZiAoIWFjdGl2ZSkgewogCQlwaHlfY3RybCAmPSB+RTEwMDBfUEhZX0NUUkxfTk9ORDBBX0xQTFU7CiAJCWV3MzIoUEhZX0NUUkwsIHBoeV9jdHJsKTsKLQkJLyogTFBMVSBhbmQgU21hcnRTcGVlZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgTFBMVSBpcyB1c2VkCisJCS8qCisJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIExQTFUgaXMgdXNlZAogCQkgKiBkdXJpbmcgRHggc3RhdGVzIHdoZXJlIHRoZSBwb3dlciBjb25zZXJ2YXRpb24gaXMgbW9zdAogCQkgKiBpbXBvcnRhbnQuICBEdXJpbmcgZHJpdmVyIGFjdGl2aXR5IHdlIHNob3VsZCBlbmFibGUKLQkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4gKi8KKwkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4KKwkJICovCiAJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29uKSB7Ci0JCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsCi0JCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCQkgICAgJmRhdGEpOworCQkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKwkJCQkJICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJcmV0dXJuIHJldF92YWw7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBlMWVfd3BoeShodywKLQkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCQkgICAgIGRhdGEpOworCQkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKwkJCQkJICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJfSBlbHNlIGlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29mZikgewotCQkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LAotCQkJCQkJICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICZkYXRhKTsKKwkJCXJldF92YWwgPSBlMWVfcnBoeShodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCQkJCSAgICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LAotCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKLQkJCQkJCSAgICAgZGF0YSk7CisJCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQkJCQkgICBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCQl9CkBAIC04NDEsMjMgKzg0OSwyMSBAQAogCQlwaHlfY3RybCB8PSBFMTAwMF9QSFlfQ1RSTF9OT05EMEFfTFBMVTsKIAkJZXczMihQSFlfQ1RSTCwgcGh5X2N0cmwpOwogCi0JCS8qIENhbGwgZ2lnIHNwZWVkIGRyb3Agd29ya2Fyb3VuZCBvbiBMUExVIGJlZm9yZSBhY2Nlc3NpbmcKLQkJICogYW55IFBIWSByZWdpc3RlcnMgKi8KKwkJLyoKKwkJICogQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIExQTFUgYmVmb3JlIGFjY2Vzc2luZworCQkgKiBhbnkgUEhZIHJlZ2lzdGVycworCQkgKi8KIAkJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfaWNoOGxhbikgJiYKIAkJICAgIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lncF8zKSkKIAkJCWUxMDAwZV9naWdfZG93bnNoaWZ0X3dvcmthcm91bmRfaWNoOGxhbihodyk7CiAKIAkJLyogV2hlbiBMUExVIGlzIGVuYWJsZWQsIHdlIHNob3VsZCBkaXNhYmxlIFNtYXJ0U3BlZWQgKi8KLQkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LAotCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCSAgICAmZGF0YSk7CisJCXJldF92YWwgPSBlMWVfcnBoeShodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAogCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsCi0JCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCSAgICAgZGF0YSk7CisJCXJldF92YWwgPSBlMWVfd3BoeShodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIGRhdGEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTQ0LDI0ICs5NTAsMjkgQEAKIAogCWV3MTZmbGFzaChJQ0hfRkxBU0hfSFNGU1RTLCBoc2ZzdHMucmVndmFsKTsKIAotCS8qIEVpdGhlciB3ZSBzaG91bGQgaGF2ZSBhIGhhcmR3YXJlIFNQSSBjeWNsZSBpbiBwcm9ncmVzcworCS8qCisJICogRWl0aGVyIHdlIHNob3VsZCBoYXZlIGEgaGFyZHdhcmUgU1BJIGN5Y2xlIGluIHByb2dyZXNzCiAJICogYml0IHRvIGNoZWNrIGFnYWluc3QsIGluIG9yZGVyIHRvIHN0YXJ0IGEgbmV3IGN5Y2xlIG9yCiAJICogRkRPTkUgYml0IHNob3VsZCBiZSBjaGFuZ2VkIGluIHRoZSBoYXJkd2FyZSBzbyB0aGF0IGl0Ci0JICogaXMgMSBhZnRlciBoYXJ3YXJlIHJlc2V0LCB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIGFzIGFuCisJICogaXMgMSBhZnRlciBoYXJkd2FyZSByZXNldCwgd2hpY2ggY2FuIHRoZW4gYmUgdXNlZCBhcyBhbgogCSAqIGluZGljYXRpb24gd2hldGhlciBhIGN5Y2xlIGlzIGluIHByb2dyZXNzIG9yIGhhcyBiZWVuCiAJICogY29tcGxldGVkLgogCSAqLwogCiAJaWYgKGhzZnN0cy5oc2Zfc3RhdHVzLmZsY2lucHJvZyA9PSAwKSB7Ci0JCS8qIFRoZXJlIGlzIG5vIGN5Y2xlIHJ1bm5pbmcgYXQgcHJlc2VudCwKLQkJICogc28gd2UgY2FuIHN0YXJ0IGEgY3ljbGUgKi8KLQkJLyogQmVnaW4gYnkgc2V0dGluZyBGbGFzaCBDeWNsZSBEb25lLiAqLworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBjeWNsZSBydW5uaW5nIGF0IHByZXNlbnQsCisJCSAqIHNvIHdlIGNhbiBzdGFydCBhIGN5Y2xlCisJCSAqIEJlZ2luIGJ5IHNldHRpbmcgRmxhc2ggQ3ljbGUgRG9uZS4KKwkJICovCiAJCWhzZnN0cy5oc2Zfc3RhdHVzLmZsY2RvbmUgPSAxOwogCQlldzE2Zmxhc2goSUNIX0ZMQVNIX0hTRlNUUywgaHNmc3RzLnJlZ3ZhbCk7CiAJCXJldF92YWwgPSAwOwogCX0gZWxzZSB7Ci0JCS8qIG90aGVyd2lzZSBwb2xsIGZvciBzb21ldGltZSBzbyB0aGUgY3VycmVudAotCQkgKiBjeWNsZSBoYXMgYSBjaGFuY2UgdG8gZW5kIGJlZm9yZSBnaXZpbmcgdXAuICovCisJCS8qCisJCSAqIG90aGVyd2lzZSBwb2xsIGZvciBzb21ldGltZSBzbyB0aGUgY3VycmVudAorCQkgKiBjeWNsZSBoYXMgYSBjaGFuY2UgdG8gZW5kIGJlZm9yZSBnaXZpbmcgdXAuCisJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgSUNIX0ZMQVNIX1JFQURfQ09NTUFORF9USU1FT1VUOyBpKyspIHsKIAkJCWhzZnN0cy5yZWd2YWwgPSBfX2VyMTZmbGFzaChodywgSUNIX0ZMQVNIX0hTRlNUUyk7CiAJCQlpZiAoaHNmc3RzLmhzZl9zdGF0dXMuZmxjaW5wcm9nID09IDApIHsKQEAgLTk3MSw4ICs5ODIsMTAgQEAKIAkJCXVkZWxheSgxKTsKIAkJfQogCQlpZiAocmV0X3ZhbCA9PSAwKSB7Ci0JCQkvKiBTdWNjZXNzZnVsIGluIHdhaXRpbmcgZm9yIHByZXZpb3VzIGN5Y2xlIHRvIHRpbWVvdXQsCi0JCQkgKiBub3cgc2V0IHRoZSBGbGFzaCBDeWNsZSBEb25lLiAqLworCQkJLyoKKwkJCSAqIFN1Y2Nlc3NmdWwgaW4gd2FpdGluZyBmb3IgcHJldmlvdXMgY3ljbGUgdG8gdGltZW91dCwKKwkJCSAqIG5vdyBzZXQgdGhlIEZsYXNoIEN5Y2xlIERvbmUuCisJCQkgKi8KIAkJCWhzZnN0cy5oc2Zfc3RhdHVzLmZsY2RvbmUgPSAxOwogCQkJZXcxNmZsYXNoKElDSF9GTEFTSF9IU0ZTVFMsIGhzZnN0cy5yZWd2YWwpOwogCQl9IGVsc2UgewpAQCAtMTA3NywxMCArMTA5MCwxMiBAQAogCQlyZXRfdmFsID0gZTEwMDBfZmxhc2hfY3ljbGVfaWNoOGxhbihodywKIAkJCQkJCUlDSF9GTEFTSF9SRUFEX0NPTU1BTkRfVElNRU9VVCk7CiAKLQkJLyogQ2hlY2sgaWYgRkNFUlIgaXMgc2V0IHRvIDEsIGlmIHNldCB0byAxLCBjbGVhciBpdAorCQkvKgorCQkgKiBDaGVjayBpZiBGQ0VSUiBpcyBzZXQgdG8gMSwgaWYgc2V0IHRvIDEsIGNsZWFyIGl0CiAJCSAqIGFuZCB0cnkgdGhlIHdob2xlIHNlcXVlbmNlIGEgZmV3IG1vcmUgdGltZXMsIGVsc2UKIAkJICogcmVhZCBpbiAoc2hpZnQgaW4pIHRoZSBGbGFzaCBEYXRhMCwgdGhlIG9yZGVyIGlzCi0JCSAqIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgbXNiIHRvIGxzYiAqLworCQkgKiBsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0IG1zYiB0byBsc2IKKwkJICovCiAJCWlmIChyZXRfdmFsID09IDApIHsKIAkJCWZsYXNoX2RhdGEgPSBlcjMyZmxhc2goSUNIX0ZMQVNIX0ZEQVRBMCk7CiAJCQlpZiAoc2l6ZSA9PSAxKSB7CkBAIC0xMDkwLDcgKzExMDUsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQkvKiBJZiB3ZSd2ZSBnb3R0ZW4gaGVyZSwgdGhlbiB0aGluZ3MgYXJlIHByb2JhYmx5CisJCQkvKgorCQkJICogSWYgd2UndmUgZ290dGVuIGhlcmUsIHRoZW4gdGhpbmdzIGFyZSBwcm9iYWJseQogCQkJICogY29tcGxldGVseSBob3NlZCwgYnV0IGlmIHRoZSBlcnJvciBjb25kaXRpb24gaXMKIAkJCSAqIGRldGVjdGVkLCBpdCB3b24ndCBodXJ0IHRvIGdpdmUgaXQgYW5vdGhlciB0cnkuLi4KIAkJCSAqIElDSF9GTEFTSF9DWUNMRV9SRVBFQVRfQ09VTlQgdGltZXMuCkBAIC0xMTU1LDcgKzExNzEsNyBAQAogICogIHdoaWNoIHdyaXRlcyB0aGUgY2hlY2tzdW0gdG8gdGhlIHNoYWRvdyByYW0uICBUaGUgY2hhbmdlcyBpbiB0aGUgc2hhZG93CiAgKiAgcmFtIGFyZSB0aGVuIGNvbW1pdHRlZCB0byB0aGUgRUVQUk9NIGJ5IHByb2Nlc3NpbmcgZWFjaCBiYW5rIGF0IGEgdGltZQogICogIGNoZWNraW5nIGZvciB0aGUgbW9kaWZpZWQgYml0IGFuZCB3cml0aW5nIG9ubHkgdGhlIHBlbmRpbmcgY2hhbmdlcy4KLSAqICBBZnRlciBhIHN1Y2Nlc2Z1bCBjb21taXQsIHRoZSBzaGFkb3cgcmFtIGlzIGNsZWFyZWQgYW5kIGlzIHJlYWR5IGZvcgorICogIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjb21taXQsIHRoZSBzaGFkb3cgcmFtIGlzIGNsZWFyZWQgYW5kIGlzIHJlYWR5IGZvcgogICogIGZ1dHVyZSB3cml0ZXMuCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX3VwZGF0ZV9udm1fY2hlY2tzdW1faWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQpAQCAtMTE2OCwxOCArMTE4NCwyMCBAQAogCiAJcmV0X3ZhbCA9IGUxMDAwZV91cGRhdGVfbnZtX2NoZWNrc3VtX2dlbmVyaWMoaHcpOwogCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDs7CisJCXJldHVybiByZXRfdmFsOwogCiAJaWYgKG52bS0+dHlwZSAhPSBlMTAwMF9udm1fZmxhc2hfc3cpCi0JCXJldHVybiByZXRfdmFsOzsKKwkJcmV0dXJuIHJldF92YWw7CiAKIAlyZXRfdmFsID0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihodyk7CiAJaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOzsKKwkJcmV0dXJuIHJldF92YWw7CiAKLQkvKiBXZSdyZSB3cml0aW5nIHRvIHRoZSBvcHBvc2l0ZSBiYW5rIHNvIGlmIHdlJ3JlIG9uIGJhbmsgMSwKKwkvKgorCSAqIFdlJ3JlIHdyaXRpbmcgdG8gdGhlIG9wcG9zaXRlIGJhbmsgc28gaWYgd2UncmUgb24gYmFuayAxLAogCSAqIHdyaXRlIHRvIGJhbmsgMCBldGMuICBXZSBhbHNvIG5lZWQgdG8gZXJhc2UgdGhlIHNlZ21lbnQgdGhhdAotCSAqIGlzIGdvaW5nIHRvIGJlIHdyaXR0ZW4gKi8KKwkgKiBpcyBnb2luZyB0byBiZSB3cml0dGVuCisJICovCiAJaWYgKCEoZXIzMihFRUNEKSAmIEUxMDAwX0VFQ0RfU0VDMVZBTCkpIHsKIAkJbmV3X2Jhbmtfb2Zmc2V0ID0gbnZtLT5mbGFzaF9iYW5rX3NpemU7CiAJCW9sZF9iYW5rX29mZnNldCA9IDA7CkBAIC0xMTkxLDkgKzEyMDksMTEgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfSUNIOF9TSEFET1dfUkFNX1dPUkRTOyBpKyspIHsKLQkJLyogRGV0ZXJtaW5lIHdoZXRoZXIgdG8gd3JpdGUgdGhlIHZhbHVlIHN0b3JlZAorCQkvKgorCQkgKiBEZXRlcm1pbmUgd2hldGhlciB0byB3cml0ZSB0aGUgdmFsdWUgc3RvcmVkCiAJCSAqIGluIHRoZSBvdGhlciBOVk0gYmFuayBvciBhIG1vZGlmaWVkIHZhbHVlIHN0b3JlZAotCQkgKiBpbiB0aGUgc2hhZG93IFJBTSAqLworCQkgKiBpbiB0aGUgc2hhZG93IFJBTQorCQkgKi8KIAkJaWYgKGRldl9zcGVjLT5zaGFkb3dfcmFtW2ldLm1vZGlmaWVkKSB7CiAJCQlkYXRhID0gZGV2X3NwZWMtPnNoYWRvd19yYW1baV0udmFsdWU7CiAJCX0gZWxzZSB7CkBAIC0xMjAyLDEyICsxMjIyLDE0IEBACiAJCQkJCQkgICAgICAmZGF0YSk7CiAJCX0KIAotCQkvKiBJZiB0aGUgd29yZCBpcyAweDEzLCB0aGVuIG1ha2Ugc3VyZSB0aGUgc2lnbmF0dXJlIGJpdHMKKwkJLyoKKwkJICogSWYgdGhlIHdvcmQgaXMgMHgxMywgdGhlbiBtYWtlIHN1cmUgdGhlIHNpZ25hdHVyZSBiaXRzCiAJCSAqICgxNToxNCkgYXJlIDExYiB1bnRpbCB0aGUgY29tbWl0IGhhcyBjb21wbGV0ZWQuCiAJCSAqIFRoaXMgd2lsbCBhbGxvdyB1cyB0byB3cml0ZSAxMGIgd2hpY2ggaW5kaWNhdGVzIHRoZQogCQkgKiBzaWduYXR1cmUgaXMgdmFsaWQuICBXZSB3YW50IHRvIGRvIHRoaXMgYWZ0ZXIgdGhlIHdyaXRlCiAJCSAqIGhhcyBjb21wbGV0ZWQgc28gdGhhdCB3ZSBkb24ndCBtYXJrIHRoZSBzZWdtZW50IHZhbGlkCi0JCSAqIHdoaWxlIHRoZSB3cml0ZSBpcyBzdGlsbCBpbiBwcm9ncmVzcyAqLworCQkgKiB3aGlsZSB0aGUgd3JpdGUgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MKKwkJICovCiAJCWlmIChpID09IEUxMDAwX0lDSF9OVk1fU0lHX1dPUkQpCiAJCQlkYXRhIHw9IEUxMDAwX0lDSF9OVk1fU0lHX01BU0s7CiAKQEAgLTEyMzAsMTggKzEyNTIsMjIgQEAKIAkJCWJyZWFrOwogCX0KIAotCS8qIERvbid0IGJvdGhlciB3cml0aW5nIHRoZSBzZWdtZW50IHZhbGlkIGJpdHMgaWYgc2VjdG9yCi0JICogcHJvZ3JhbW1pbmcgZmFpbGVkLiAqLworCS8qCisJICogRG9uJ3QgYm90aGVyIHdyaXRpbmcgdGhlIHNlZ21lbnQgdmFsaWQgYml0cyBpZiBzZWN0b3IKKwkgKiBwcm9ncmFtbWluZyBmYWlsZWQuCisJICovCiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKGh3LCAiRmxhc2ggY29tbWl0IGZhaWxlZC5cbiIpOwogCQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKIAkJcmV0dXJuIHJldF92YWw7CiAJfQogCi0JLyogRmluYWxseSB2YWxpZGF0ZSB0aGUgbmV3IHNlZ21lbnQgYnkgc2V0dGluZyBiaXQgMTU6MTQKKwkvKgorCSAqIEZpbmFsbHkgdmFsaWRhdGUgdGhlIG5ldyBzZWdtZW50IGJ5IHNldHRpbmcgYml0IDE1OjE0CiAJICogdG8gMTBiIGluIHdvcmQgMHgxMyAsIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBhbgogCSAqIGVyYXNlIGFzIHdlbGwgc2luY2UgdGhlc2UgYml0cyBhcmUgMTEgdG8gc3RhcnQgd2l0aAotCSAqIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSBiaXQgMTQgdG8gMGIgKi8KKwkgKiBhbmQgd2UgbmVlZCB0byBjaGFuZ2UgYml0IDE0IHRvIDBiCisJICovCiAJYWN0X29mZnNldCA9IG5ld19iYW5rX29mZnNldCArIEUxMDAwX0lDSF9OVk1fU0lHX1dPUkQ7CiAJZTEwMDBfcmVhZF9mbGFzaF93b3JkX2ljaDhsYW4oaHcsIGFjdF9vZmZzZXQsICZkYXRhKTsKIAlkYXRhICY9IDB4QkZGRjsKQEAgLTEyNTMsMTAgKzEyNzksMTIgQEAKIAkJcmV0dXJuIHJldF92YWw7CiAJfQogCi0JLyogQW5kIGludmFsaWRhdGUgdGhlIHByZXZpb3VzbHkgdmFsaWQgc2VnbWVudCBieSBzZXR0aW5nCisJLyoKKwkgKiBBbmQgaW52YWxpZGF0ZSB0aGUgcHJldmlvdXNseSB2YWxpZCBzZWdtZW50IGJ5IHNldHRpbmcKIAkgKiBpdHMgc2lnbmF0dXJlIHdvcmQgKDB4MTMpIGhpZ2hfYnl0ZSB0byAwYi4gVGhpcyBjYW4gYmUKIAkgKiBkb25lIHdpdGhvdXQgYW4gZXJhc2UgYmVjYXVzZSBmbGFzaCBlcmFzZSBzZXRzIGFsbCBiaXRzCi0JICogdG8gMSdzLiBXZSBjYW4gd3JpdGUgMSdzIHRvIDAncyB3aXRob3V0IGFuIGVyYXNlICovCisJICogdG8gMSdzLiBXZSBjYW4gd3JpdGUgMSdzIHRvIDAncyB3aXRob3V0IGFuIGVyYXNlCisJICovCiAJYWN0X29mZnNldCA9IChvbGRfYmFua19vZmZzZXQgKyBFMTAwMF9JQ0hfTlZNX1NJR19XT1JEKSAqIDIgKyAxOwogCXJldF92YWwgPSBlMTAwMF9yZXRyeV93cml0ZV9mbGFzaF9ieXRlX2ljaDhsYW4oaHcsIGFjdF9vZmZzZXQsIDApOwogCWlmIChyZXRfdmFsKSB7CkBAIC0xMjcyLDcgKzEzMDAsOCBAQAogCiAJZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CiAKLQkvKiBSZWxvYWQgdGhlIEVFUFJPTSwgb3IgZWxzZSBtb2RpZmljYXRpb25zIHdpbGwgbm90IGFwcGVhcgorCS8qCisJICogUmVsb2FkIHRoZSBFRVBST00sIG9yIGVsc2UgbW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBhcHBlYXIKIAkgKiB1bnRpbCBhZnRlciB0aGUgbmV4dCBhZGFwdGVyIHJlc2V0LgogCSAqLwogCWUxMDAwZV9yZWxvYWRfbnZtKGh3KTsKQEAgLTEyOTQsNyArMTMyMyw4IEBACiAJczMyIHJldF92YWw7CiAJdTE2IGRhdGE7CiAKLQkvKiBSZWFkIDB4MTkgYW5kIGNoZWNrIGJpdCA2LiAgSWYgdGhpcyBiaXQgaXMgMCwgdGhlIGNoZWNrc3VtCisJLyoKKwkgKiBSZWFkIDB4MTkgYW5kIGNoZWNrIGJpdCA2LiAgSWYgdGhpcyBiaXQgaXMgMCwgdGhlIGNoZWNrc3VtCiAJICogbmVlZHMgdG8gYmUgZml4ZWQuICBUaGlzIGJpdCBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIE5WTQogCSAqIHdhcyBwcmVwYXJlZCBieSBPRU0gc29mdHdhcmUgYW5kIGRpZCBub3QgY2FsY3VsYXRlIHRoZQogCSAqIGNoZWNrc3VtLi4uYSBsaWtlbHkgc2NlbmFyaW8uCkBAIC0xMzY0LDE0ICsxMzk0LDE3IEBACiAKIAkJZXczMmZsYXNoKElDSF9GTEFTSF9GREFUQTAsIGZsYXNoX2RhdGEpOwogCi0JCS8qIGNoZWNrIGlmIEZDRVJSIGlzIHNldCB0byAxICwgaWYgc2V0IHRvIDEsIGNsZWFyIGl0Ci0JCSAqIGFuZCB0cnkgdGhlIHdob2xlIHNlcXVlbmNlIGEgZmV3IG1vcmUgdGltZXMgZWxzZSBkb25lICovCisJCS8qCisJCSAqIGNoZWNrIGlmIEZDRVJSIGlzIHNldCB0byAxICwgaWYgc2V0IHRvIDEsIGNsZWFyIGl0CisJCSAqIGFuZCB0cnkgdGhlIHdob2xlIHNlcXVlbmNlIGEgZmV3IG1vcmUgdGltZXMgZWxzZSBkb25lCisJCSAqLwogCQlyZXRfdmFsID0gZTEwMDBfZmxhc2hfY3ljbGVfaWNoOGxhbihodywKIAkJCQkJICAgICAgIElDSF9GTEFTSF9XUklURV9DT01NQU5EX1RJTUVPVVQpOwogCQlpZiAoIXJldF92YWwpCiAJCQlicmVhazsKIAotCQkvKiBJZiB3ZSdyZSBoZXJlLCB0aGVuIHRoaW5ncyBhcmUgbW9zdCBsaWtlbHkKKwkJLyoKKwkJICogSWYgd2UncmUgaGVyZSwgdGhlbiB0aGluZ3MgYXJlIG1vc3QgbGlrZWx5CiAJCSAqIGNvbXBsZXRlbHkgaG9zZWQsIGJ1dCBpZiB0aGUgZXJyb3IgY29uZGl0aW9uCiAJCSAqIGlzIGRldGVjdGVkLCBpdCB3b24ndCBodXJ0IHRvIGdpdmUgaXQgYW5vdGhlcgogCQkgKiB0cnkuLi5JQ0hfRkxBU0hfQ1lDTEVfUkVQRUFUX0NPVU5UIHRpbWVzLgpAQCAtMTQ2Miw5ICsxNDk1LDEwIEBACiAKIAloc2ZzdHMucmVndmFsID0gZXIxNmZsYXNoKElDSF9GTEFTSF9IU0ZTVFMpOwogCi0JLyogRGV0ZXJtaW5lIEhXIFNlY3RvciBzaXplOiBSZWFkIEJFUkFTRSBiaXRzIG9mIGh3IGZsYXNoIHN0YXR1cwotCSAqIHJlZ2lzdGVyICovCi0JLyogMDA6IFRoZSBIdyBzZWN0b3IgaXMgMjU2IGJ5dGVzLCBoZW5jZSB3ZSBuZWVkIHRvIGVyYXNlIDE2CisJLyoKKwkgKiBEZXRlcm1pbmUgSFcgU2VjdG9yIHNpemU6IFJlYWQgQkVSQVNFIGJpdHMgb2YgaHcgZmxhc2ggc3RhdHVzCisJICogcmVnaXN0ZXIKKwkgKiAwMDogVGhlIEh3IHNlY3RvciBpcyAyNTYgYnl0ZXMsIGhlbmNlIHdlIG5lZWQgdG8gZXJhc2UgMTYKIAkgKiAgICAgY29uc2VjdXRpdmUgc2VjdG9ycy4gIFRoZSBzdGFydCBpbmRleCBmb3IgdGhlIG50aCBIdyBzZWN0b3IKIAkgKiAgICAgY2FuIGJlIGNhbGN1bGF0ZWQgYXMgPSBiYW5rICogNDA5NiArIG4gKiAyNTYKIAkgKiAwMTogVGhlIEh3IHNlY3RvciBpcyA0SyBieXRlcywgaGVuY2Ugd2UgbmVlZCB0byBlcmFzZSAxIHNlY3Rvci4KQEAgLTE1MTEsMTMgKzE1NDUsMTYgQEAKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCi0JCQkvKiBXcml0ZSBhIHZhbHVlIDExIChibG9jayBFcmFzZSkgaW4gRmxhc2gKLQkJCSAqIEN5Y2xlIGZpZWxkIGluIGh3IGZsYXNoIGNvbnRyb2wgKi8KKwkJCS8qCisJCQkgKiBXcml0ZSBhIHZhbHVlIDExIChibG9jayBFcmFzZSkgaW4gRmxhc2gKKwkJCSAqIEN5Y2xlIGZpZWxkIGluIGh3IGZsYXNoIGNvbnRyb2wKKwkJCSAqLwogCQkJaHNmbGN0bC5yZWd2YWwgPSBlcjE2Zmxhc2goSUNIX0ZMQVNIX0hTRkNUTCk7CiAJCQloc2ZsY3RsLmhzZl9jdHJsLmZsY3ljbGUgPSBJQ0hfQ1lDTEVfRVJBU0U7CiAJCQlldzE2Zmxhc2goSUNIX0ZMQVNIX0hTRkNUTCwgaHNmbGN0bC5yZWd2YWwpOwogCi0JCQkvKiBXcml0ZSB0aGUgbGFzdCAyNCBiaXRzIG9mIGFuIGluZGV4IHdpdGhpbiB0aGUKKwkJCS8qCisJCQkgKiBXcml0ZSB0aGUgbGFzdCAyNCBiaXRzIG9mIGFuIGluZGV4IHdpdGhpbiB0aGUKIAkJCSAqIGJsb2NrIGludG8gRmxhc2ggTGluZWFyIGFkZHJlc3MgZmllbGQgaW4gRmxhc2gKIAkJCSAqIEFkZHJlc3MuCiAJCQkgKi8KQEAgLTE1MjksMTMgKzE1NjYsMTQgQEAKIAkJCWlmIChyZXRfdmFsID09IDApCiAJCQkJYnJlYWs7CiAKLQkJCS8qIENoZWNrIGlmIEZDRVJSIGlzIHNldCB0byAxLiAgSWYgMSwKKwkJCS8qCisJCQkgKiBDaGVjayBpZiBGQ0VSUiBpcyBzZXQgdG8gMS4gIElmIDEsCiAJCQkgKiBjbGVhciBpdCBhbmQgdHJ5IHRoZSB3aG9sZSBzZXF1ZW5jZQotCQkJICogYSBmZXcgbW9yZSB0aW1lcyBlbHNlIERvbmUgKi8KKwkJCSAqIGEgZmV3IG1vcmUgdGltZXMgZWxzZSBEb25lCisJCQkgKi8KIAkJCWhzZnN0cy5yZWd2YWwgPSBlcjE2Zmxhc2goSUNIX0ZMQVNIX0hTRlNUUyk7CiAJCQlpZiAoaHNmc3RzLmhzZl9zdGF0dXMuZmxjZXJyID09IDEpCi0JCQkJLyogcmVwZWF0IGZvciBzb21lIHRpbWUgYmVmb3JlCi0JCQkJICogZ2l2aW5nIHVwICovCisJCQkJLyogcmVwZWF0IGZvciBzb21lIHRpbWUgYmVmb3JlIGdpdmluZyB1cCAqLwogCQkJCWNvbnRpbnVlOwogCQkJZWxzZSBpZiAoaHNmc3RzLmhzZl9zdGF0dXMuZmxjZG9uZSA9PSAwKQogCQkJCXJldHVybiByZXRfdmFsOwpAQCAtMTU4NSw3ICsxNjIzLDggQEAKIAogCXJldF92YWwgPSBlMTAwMGVfZ2V0X2J1c19pbmZvX3BjaWUoaHcpOwogCi0JLyogSUNIIGRldmljZXMgYXJlICJQQ0kgRXhwcmVzcyItaXNoLiAgVGhleSBoYXZlCisJLyoKKwkgKiBJQ0ggZGV2aWNlcyBhcmUgIlBDSSBFeHByZXNzIi1pc2guICBUaGV5IGhhdmUKIAkgKiBhIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGJ1dCBkbyBub3QgY29udGFpbgogCSAqIFBDSSBFeHByZXNzIENhcGFiaWxpdHkgcmVnaXN0ZXJzLCBzbyBidXMgd2lkdGgKIAkgKiBtdXN0IGJlIGhhcmRjb2RlZC4KQEAgLTE2MDgsNyArMTY0Nyw4IEBACiAJdTMyIGN0cmwsIGljciwga2FiOwogCXMzMiByZXRfdmFsOwogCi0JLyogUHJldmVudCB0aGUgUENJLUUgYnVzIGZyb20gc3RpY2tpbmcgaWYgdGhlcmUgaXMgbm8gVExQIGNvbm5lY3Rpb24KKwkvKgorCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIHN0aWNraW5nIGlmIHRoZXJlIGlzIG5vIFRMUCBjb25uZWN0aW9uCiAJICogb24gdGhlIGxhc3QgVExQIHJlYWQvd3JpdGUgdHJhbnNhY3Rpb24gd2hlbiBNQUMgaXMgcmVzZXQuCiAJICovCiAJcmV0X3ZhbCA9IGUxMDAwZV9kaXNhYmxlX3BjaWVfbWFzdGVyKGh3KTsKQEAgLTE2MTksNyArMTY1OSw4IEBACiAJaHdfZGJnKGh3LCAiTWFza2luZyBvZmYgYWxsIGludGVycnVwdHNcbiIpOwogCWV3MzIoSU1DLCAweGZmZmZmZmZmKTsKIAotCS8qIERpc2FibGUgdGhlIFRyYW5zbWl0IGFuZCBSZWNlaXZlIHVuaXRzLiAgVGhlbiBkZWxheSB0byBhbGxvdworCS8qCisJICogRGlzYWJsZSB0aGUgVHJhbnNtaXQgYW5kIFJlY2VpdmUgdW5pdHMuICBUaGVuIGRlbGF5IHRvIGFsbG93CiAJICogYW55IHBlbmRpbmcgdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSB3ZSBoaXQgdGhlIE1BQwogCSAqIHdpdGggdGhlIGdsb2JhbCByZXNldC4KIAkgKi8KQEAgLTE2NDAsNyArMTY4MSw4IEBACiAJY3RybCA9IGVyMzIoQ1RSTCk7CiAKIAlpZiAoIWUxMDAwX2NoZWNrX3Jlc2V0X2Jsb2NrKGh3KSkgewotCQkvKiBQSFkgSFcgcmVzZXQgcmVxdWlyZXMgTUFDIENPUkUgcmVzZXQgYXQgdGhlIHNhbWUKKwkJLyoKKwkJICogUEhZIEhXIHJlc2V0IHJlcXVpcmVzIE1BQyBDT1JFIHJlc2V0IGF0IHRoZSBzYW1lCiAJCSAqIHRpbWUgdG8gbWFrZSBzdXJlIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBNQUMgYW5kIHRoZQogCQkgKiBleHRlcm5hbCBQSFkgaXMgcmVzZXQuCiAJCSAqLwpAQCAtMTY4MCw3ICsxNzIyLDcgQEAKICAqICAgLSBpbml0aWFsaXplIExFRCBpZGVudGlmaWNhdGlvbgogICogICAtIHNldHVwIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMKICAqICAgLSBzZXR1cCBmbG93IGNvbnRyb2wKLSAqICAgLSBzZXR1cCB0cmFuc21pdCBkaXNjcmlwdG9ycworICogICAtIHNldHVwIHRyYW5zbWl0IGRlc2NyaXB0b3JzCiAgKiAgIC0gY2xlYXIgc3RhdGlzdGljcwogICoqLwogc3RhdGljIHMzMiBlMTAwMF9pbml0X2h3X2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKQEAgLTE3MTEsMjEgKzE3NTMsMjMgQEAKIAlyZXRfdmFsID0gZTEwMDBfc2V0dXBfbGlua19pY2g4bGFuKGh3KTsKIAogCS8qIFNldCB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciB3cml0ZS1iYWNrIHBvbGljeSBmb3IgYm90aCBxdWV1ZXMgKi8KLQl0eGRjdGwgPSBlcjMyKFRYRENUTCk7CisJdHhkY3RsID0gZXIzMihUWERDVEwoMCkpOwogCXR4ZGN0bCA9ICh0eGRjdGwgJiB+RTEwMDBfVFhEQ1RMX1dUSFJFU0gpIHwKIAkJIEUxMDAwX1RYRENUTF9GVUxMX1RYX0RFU0NfV0I7CiAJdHhkY3RsID0gKHR4ZGN0bCAmIH5FMTAwMF9UWERDVExfUFRIUkVTSCkgfAogCQkgRTEwMDBfVFhEQ1RMX01BWF9UWF9ERVNDX1BSRUZFVENIOwotCWV3MzIoVFhEQ1RMLCB0eGRjdGwpOwotCXR4ZGN0bCA9IGVyMzIoVFhEQ1RMMSk7CisJZXczMihUWERDVEwoMCksIHR4ZGN0bCk7CisJdHhkY3RsID0gZXIzMihUWERDVEwoMSkpOwogCXR4ZGN0bCA9ICh0eGRjdGwgJiB+RTEwMDBfVFhEQ1RMX1dUSFJFU0gpIHwKIAkJIEUxMDAwX1RYRENUTF9GVUxMX1RYX0RFU0NfV0I7CiAJdHhkY3RsID0gKHR4ZGN0bCAmIH5FMTAwMF9UWERDVExfUFRIUkVTSCkgfAogCQkgRTEwMDBfVFhEQ1RMX01BWF9UWF9ERVNDX1BSRUZFVENIOwotCWV3MzIoVFhEQ1RMMSwgdHhkY3RsKTsKKwlldzMyKFRYRENUTCgxKSwgdHhkY3RsKTsKIAotCS8qIElDSDggaGFzIG9wcG9zaXRlIHBvbGFyaXR5IG9mIG5vX3Nub29wIGJpdHMuCi0JICogQnkgZGVmYXVsdCwgd2Ugc2hvdWxkIHVzZSBzbm9vcCBiZWhhdmlvci4gKi8KKwkvKgorCSAqIElDSDggaGFzIG9wcG9zaXRlIHBvbGFyaXR5IG9mIG5vX3Nub29wIGJpdHMuCisJICogQnkgZGVmYXVsdCwgd2Ugc2hvdWxkIHVzZSBzbm9vcCBiZWhhdmlvci4KKwkgKi8KIAlpZiAobWFjLT50eXBlID09IGUxMDAwX2ljaDhsYW4pCiAJCXNub29wID0gUENJRV9JQ0g4X1NOT09QX0FMTDsKIAllbHNlCkBAIC0xNzM2LDcgKzE3ODAsOCBAQAogCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX1JPX0RJUzsKIAlldzMyKENUUkxfRVhULCBjdHJsX2V4dCk7CiAKLQkvKiBDbGVhciBhbGwgb2YgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIChjbGVhciBvbiByZWFkKS4gIEl0IGlzCisJLyoKKwkgKiBDbGVhciBhbGwgb2YgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIChjbGVhciBvbiByZWFkKS4gIEl0IGlzCiAJICogaW1wb3J0YW50IHRoYXQgd2UgZG8gdGhpcyBhZnRlciB3ZSBoYXZlIHRyaWVkIHRvIGVzdGFibGlzaCBsaW5rCiAJICogYmVjYXVzZSB0aGUgc3ltYm9sIGVycm9yIGNvdW50IHdpbGwgaW5jcmVtZW50IHdpbGRseSBpZiB0aGVyZQogCSAqIGlzIG5vIGxpbmsuCkBAIC0xNzYyLDMwICsxODA3LDMwIEBACiAJZXczMihDVFJMX0VYVCwgcmVnKTsKIAogCS8qIFRyYW5zbWl0IERlc2NyaXB0b3IgQ29udHJvbCAwICovCi0JcmVnID0gZXIzMihUWERDVEwpOworCXJlZyA9IGVyMzIoVFhEQ1RMKDApKTsKIAlyZWcgfD0gKDEgPDwgMjIpOwotCWV3MzIoVFhEQ1RMLCByZWcpOworCWV3MzIoVFhEQ1RMKDApLCByZWcpOwogCiAJLyogVHJhbnNtaXQgRGVzY3JpcHRvciBDb250cm9sIDEgKi8KLQlyZWcgPSBlcjMyKFRYRENUTDEpOworCXJlZyA9IGVyMzIoVFhEQ1RMKDEpKTsKIAlyZWcgfD0gKDEgPDwgMjIpOwotCWV3MzIoVFhEQ1RMMSwgcmVnKTsKKwlldzMyKFRYRENUTCgxKSwgcmVnKTsKIAogCS8qIFRyYW5zbWl0IEFyYml0cmF0aW9uIENvbnRyb2wgMCAqLwotCXJlZyA9IGVyMzIoVEFSQzApOworCXJlZyA9IGVyMzIoVEFSQygwKSk7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pY2g4bGFuKQogCQlyZWcgfD0gKDEgPDwgMjgpIHwgKDEgPDwgMjkpOwogCXJlZyB8PSAoMSA8PCAyMykgfCAoMSA8PCAyNCkgfCAoMSA8PCAyNikgfCAoMSA8PCAyNyk7Ci0JZXczMihUQVJDMCwgcmVnKTsKKwlldzMyKFRBUkMoMCksIHJlZyk7CiAKIAkvKiBUcmFuc21pdCBBcmJpdHJhdGlvbiBDb250cm9sIDEgKi8KLQlyZWcgPSBlcjMyKFRBUkMxKTsKKwlyZWcgPSBlcjMyKFRBUkMoMSkpOwogCWlmIChlcjMyKFRDVEwpICYgRTEwMDBfVENUTF9NVUxSKQogCQlyZWcgJj0gfigxIDw8IDI4KTsKIAllbHNlCiAJCXJlZyB8PSAoMSA8PCAyOCk7CiAJcmVnIHw9ICgxIDw8IDI0KSB8ICgxIDw8IDI2KSB8ICgxIDw8IDMwKTsKLQlldzMyKFRBUkMxLCByZWcpOworCWV3MzIoVEFSQygxKSwgcmVnKTsKIAogCS8qIERldmljZSBTdGF0dXMgKi8KIAlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKQEAgLTE4MDcsMjkgKzE4NTIsMjkgQEAKICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfbGlua19pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0Jc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzMzIgcmV0X3ZhbDsKIAogCWlmIChlMTAwMF9jaGVja19yZXNldF9ibG9jayhodykpCiAJCXJldHVybiAwOwogCi0JLyogSUNIIHBhcnRzIGRvIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgTlZNIHRvIGRldGVybWluZQorCS8qCisJICogSUNIIHBhcnRzIGRvIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgTlZNIHRvIGRldGVybWluZQogCSAqIHRoZSBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5CiAJICogc2V0IGl0IHRvIGZ1bGwuCiAJICovCi0JaWYgKG1hYy0+ZmMgPT0gZTEwMDBfZmNfZGVmYXVsdCkKLQkJbWFjLT5mYyA9IGUxMDAwX2ZjX2Z1bGw7CisJaWYgKGh3LT5mYy50eXBlID09IGUxMDAwX2ZjX2RlZmF1bHQpCisJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKIAotCW1hYy0+b3JpZ2luYWxfZmMgPSBtYWMtPmZjOworCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7CiAKLQlod19kYmcoaHcsICJBZnRlciBmaXgtdXBzIEZsb3dDb250cm9sIGlzIG5vdyA9ICV4XG4iLCBtYWMtPmZjKTsKKwlod19kYmcoaHcsICJBZnRlciBmaXgtdXBzIEZsb3dDb250cm9sIGlzIG5vdyA9ICV4XG4iLCBody0+ZmMudHlwZSk7CiAKIAkvKiBDb250aW51ZSB0byBjb25maWd1cmUgdGhlIGNvcHBlciBsaW5rLiAqLwogCXJldF92YWwgPSBlMTAwMF9zZXR1cF9jb3BwZXJfbGlua19pY2g4bGFuKGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQlldzMyKEZDVFRWLCBtYWMtPmZjX3BhdXNlX3RpbWUpOworCWV3MzIoRkNUVFYsIGh3LT5mYy5wYXVzZV90aW1lKTsKIAogCXJldHVybiBlMTAwMGVfc2V0X2ZjX3dhdGVybWFya3MoaHcpOwogfQpAQCAtMTg1Myw5ICsxODk4LDExIEBACiAJY3RybCAmPSB+KEUxMDAwX0NUUkxfRlJDU1BEIHwgRTEwMDBfQ1RSTF9GUkNEUFgpOwogCWV3MzIoQ1RSTCwgY3RybCk7CiAKLQkvKiBTZXQgdGhlIG1hYyB0byB3YWl0IHRoZSBtYXhpbXVtIHRpbWUgYmV0d2VlbiBlYWNoIGl0ZXJhdGlvbgorCS8qCisJICogU2V0IHRoZSBtYWMgdG8gd2FpdCB0aGUgbWF4aW11bSB0aW1lIGJldHdlZW4gZWFjaCBpdGVyYXRpb24KIAkgKiBhbmQgaW5jcmVhc2UgdGhlIG1heCBpdGVyYXRpb25zIHdoZW4gcG9sbGluZyB0aGUgcGh5OwotCSAqIHRoaXMgZml4ZXMgZXJyb25lb3VzIHRpbWVvdXRzIGF0IDEwTWJwcy4gKi8KKwkgKiB0aGlzIGZpeGVzIGVycm9uZW91cyB0aW1lb3V0cyBhdCAxME1icHMuCisJICovCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9rbXJuX3JlZyhodywgR0c4MjU2M19SRUcoMHgzNCwgNCksIDB4RkZGRik7CiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOwpAQCAtMTg4Miw3ICsxOTI5LDcgQEAKICAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gc3RvcmUgY3VycmVudCBsaW5rIHNwZWVkCiAgKiAgQGR1cGxleDogcG9pbnRlciB0byBzdG9yZSB0aGUgY3VycmVudCBsaW5rIGR1cGxleAogICoKLSAqICBDYWxscyB0aGUgZ2VuZXJpYyBnZXRfc3BlZWRfYW5kX2R1cGxleCB0byByZXRyZWl2ZSB0aGUgY3VycmVudCBsaW5rCisgKiAgQ2FsbHMgdGhlIGdlbmVyaWMgZ2V0X3NwZWVkX2FuZF9kdXBsZXggdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgbGluawogICogIGluZm9ybWF0aW9uIGFuZCB0aGVuIGNhbGxzIHRoZSBLdW1lcmFuIGxvY2sgbG9zcyB3b3JrYXJvdW5kIGZvciBsaW5rcyBhdAogICogIGdpZ2FiaXQgc3BlZWRzLgogICoqLwpAQCAtMTkzMCw5ICsxOTc3LDExIEBACiAJaWYgKCFkZXZfc3BlYy0+a21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9lbmFibGVkKQogCQlyZXR1cm4gMDsKIAotCS8qIE1ha2Ugc3VyZSBsaW5rIGlzIHVwIGJlZm9yZSBwcm9jZWVkaW5nLiAgSWYgbm90IGp1c3QgcmV0dXJuLgorCS8qCisJICogTWFrZSBzdXJlIGxpbmsgaXMgdXAgYmVmb3JlIHByb2NlZWRpbmcuICBJZiBub3QganVzdCByZXR1cm4uCiAJICogQXR0ZW1wdGluZyB0aGlzIHdoaWxlIGxpbmsgaXMgbmVnb3RpYXRpbmcgZm91bGVkIHVwIGxpbmsKLQkgKiBzdGFiaWxpdHkgKi8KKwkgKiBzdGFiaWxpdHkKKwkgKi8KIAlyZXRfdmFsID0gZTEwMDBlX3BoeV9oYXNfbGlua19nZW5lcmljKGh3LCAxLCAwLCAmbGluayk7CiAJaWYgKCFsaW5rKQogCQlyZXR1cm4gMDsKQEAgLTE5NjEsOCArMjAxMCwxMCBAQAogCQkgICAgIEUxMDAwX1BIWV9DVFJMX05PTkQwQV9HQkVfRElTQUJMRSk7CiAJZXczMihQSFlfQ1RSTCwgcGh5X2N0cmwpOwogCi0JLyogQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIEdpZ2EgZGlzYWJsZSBiZWZvcmUgYWNjZXNzaW5nCi0JICogYW55IFBIWSByZWdpc3RlcnMgKi8KKwkvKgorCSAqIENhbGwgZ2lnIHNwZWVkIGRyb3Agd29ya2Fyb3VuZCBvbiBHaWcgZGlzYWJsZSBiZWZvcmUgYWNjZXNzaW5nCisJICogYW55IFBIWSByZWdpc3RlcnMKKwkgKi8KIAllMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oaHcpOwogCiAJLyogdW5hYmxlIHRvIGFjcXVpcmUgUENTIGxvY2sgKi8KQEAgLTE5NzAsOSArMjAyMSw5IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3NldF9rbXJuX2xvY2tfbG9zc193b3JrYW91bmRfaWNoOGxhbiAtIFNldCBLdW1lcmFuIHdvcmthcm91bmQgc3RhdGUKKyAqICBlMTAwMF9zZXRfa21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9pY2g4bGFuIC0gU2V0IEt1bWVyYW4gd29ya2Fyb3VuZCBzdGF0ZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKiAgQHN0YXRlOiBib29sZWFuIHZhbHVlIHVzZWQgdG8gc2V0IHRoZSBjdXJyZW50IEt1bWFyYW4gd29ya2Fyb3VuZCBzdGF0ZQorICogIEBzdGF0ZTogYm9vbGVhbiB2YWx1ZSB1c2VkIHRvIHNldCB0aGUgY3VycmVudCBLdW1lcmFuIHdvcmthcm91bmQgc3RhdGUKICAqCiAgKiAgSWYgSUNIOCwgc2V0IHRoZSBjdXJyZW50IEt1bWVyYW4gd29ya2Fyb3VuZCBzdGF0ZSAoZW5hYmxlZCAtIFRSVUUKICAqICAvZGlzYWJsZWQgLSBGQUxTRSkuCkBAIC0yMDE3LDggKzIwNjgsMTAgQEAKIAkJCUUxMDAwX1BIWV9DVFJMX05PTkQwQV9HQkVfRElTQUJMRSk7CiAJCWV3MzIoUEhZX0NUUkwsIHJlZyk7CiAKLQkJLyogQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIEdpZ2EgZGlzYWJsZSBiZWZvcmUKLQkJICogYWNjZXNzaW5nIGFueSBQSFkgcmVnaXN0ZXJzICovCisJCS8qCisJCSAqIENhbGwgZ2lnIHNwZWVkIGRyb3Agd29ya2Fyb3VuZCBvbiBHaWcgZGlzYWJsZSBiZWZvcmUKKwkJICogYWNjZXNzaW5nIGFueSBQSFkgcmVnaXN0ZXJzCisJCSAqLwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2ljaDhsYW4pCiAJCQllMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oaHcpOwogCkBAIC0yMDQ1LDcgKzIwOTgsNyBAQAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFN0ZXBzIHRvIHRha2Ugd2hlbiBkcm9wcGluZyBmcm9tIDFHYi9zIChlZy4gbGluayBjYWJsZSByZW1vdmFsIChMU0MpLAotICogIExQTFUsIEdpZ2EgZGlzYWJsZSwgTURJQyBQSFkgcmVzZXQpOgorICogIExQTFUsIEdpZyBkaXNhYmxlLCBNRElDIFBIWSByZXNldCk6CiAgKiAgICAxKSBTZXQgS3VtZXJhbiBOZWFyLWVuZCBsb29wYmFjawogICogICAgMikgQ2xlYXIgS3VtZXJhbiBOZWFyLWVuZCBsb29wYmFjawogICogIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgSUNIOFttXSBkZXZpY2VzIHdpdGggSUdQXzMgUGh5LgpAQCAtMjA4OSwxMCArMjE0MiwxMCBAQAogfQogCiAvKioKLSAqICBlMTAwMF9sZWRfb25faWNoOGxhbiAtIFR1cm4gTEVEJ3Mgb24KKyAqICBlMTAwMF9sZWRfb25faWNoOGxhbiAtIFR1cm4gTEVEcyBvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgotICogIFR1cm4gb24gdGhlIExFRCdzLgorICogIFR1cm4gb24gdGhlIExFRHMuCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX2xlZF9vbl9pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CkBAIC0yMTA1LDEwICsyMTU4LDEwIEBACiB9CiAKIC8qKgotICogIGUxMDAwX2xlZF9vZmZfaWNoOGxhbiAtIFR1cm4gTEVEJ3Mgb2ZmCisgKiAgZTEwMDBfbGVkX29mZl9pY2g4bGFuIC0gVHVybiBMRURzIG9mZgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgotICogIFR1cm4gb2ZmIHRoZSBMRUQncy4KKyAqICBUdXJuIG9mZiB0aGUgTEVEcy4KICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfbGVkX29mZl9pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CkBAIC0yMTU4LDcgKzIyMTEsNyBAQAogCS5nZXRfbGlua191cF9pbmZvCT0gZTEwMDBfZ2V0X2xpbmtfdXBfaW5mb19pY2g4bGFuLAogCS5sZWRfb24JCQk9IGUxMDAwX2xlZF9vbl9pY2g4bGFuLAogCS5sZWRfb2ZmCQk9IGUxMDAwX2xlZF9vZmZfaWNoOGxhbiwKLQkubWNfYWRkcl9saXN0X3VwZGF0ZQk9IGUxMDAwZV9tY19hZGRyX2xpc3RfdXBkYXRlX2dlbmVyaWMsCisJLnVwZGF0ZV9tY19hZGRyX2xpc3QJPSBlMTAwMGVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLAogCS5yZXNldF9odwkJPSBlMTAwMF9yZXNldF9od19pY2g4bGFuLAogCS5pbml0X2h3CQk9IGUxMDAwX2luaXRfaHdfaWNoOGxhbiwKIAkuc2V0dXBfbGluawkJPSBlMTAwMF9zZXR1cF9saW5rX2ljaDhsYW4sCkBAIC0yMjAwLDcgKzIyNTMsNyBAQAogCQkJCSAgfCBGTEFHX0hBU19GTEFTSAogCQkJCSAgfCBGTEFHX0FQTUVfSU5fV1VDLAogCS5wYmEJCQk9IDgsCi0JLmdldF9pbnZhcmlhbnRzCQk9IGUxMDAwX2dldF9pbnZhcmlhbnRzX2ljaDhsYW4sCisJLmdldF92YXJpYW50cwkJPSBlMTAwMF9nZXRfdmFyaWFudHNfaWNoOGxhbiwKIAkubWFjX29wcwkJPSAmaWNoOF9tYWNfb3BzLAogCS5waHlfb3BzCQk9ICZpY2g4X3BoeV9vcHMsCiAJLm52bV9vcHMJCT0gJmljaDhfbnZtX29wcywKQEAgLTIyMTcsNyArMjI3MCw3IEBACiAJCQkJICB8IEZMQUdfSEFTX0ZMQVNICiAJCQkJICB8IEZMQUdfQVBNRV9JTl9XVUMsCiAJLnBiYQkJCT0gMTAsCi0JLmdldF9pbnZhcmlhbnRzCQk9IGUxMDAwX2dldF9pbnZhcmlhbnRzX2ljaDhsYW4sCisJLmdldF92YXJpYW50cwkJPSBlMTAwMF9nZXRfdmFyaWFudHNfaWNoOGxhbiwKIAkubWFjX29wcwkJPSAmaWNoOF9tYWNfb3BzLAogCS5waHlfb3BzCQk9ICZpY2g4X3BoeV9vcHMsCiAJLm52bV9vcHMJCT0gJmljaDhfbnZtX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwppbmRleCAxNmYzNWZhLi5mMWY0ZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQzLDggKzQzLDggQEAKIAogI2RlZmluZSBFMTAwMF9GQUNUUFNfTU5HQ0cJCTB4MjAwMDAwMDAKIAotI2RlZmluZSBFMTAwMF9JQU1UX1NJR05BVFVSRQkJMHg1NDRENDE0OSAvKiBJbnRlbChSKSBBY3RpdmUgTWFuYWdlbWVudAotCQkJCQkJICAgICogVGVjaG5vbG9neSBzaWduYXR1cmUgKi8KKy8qIEludGVsKFIpIEFjdGl2ZSBNYW5hZ2VtZW50IFRlY2hub2xvZ3kgc2lnbmF0dXJlICovCisjZGVmaW5lIEUxMDAwX0lBTVRfU0lHTkFUVVJFCQkweDU0NEQ0MTQ5CiAKIC8qKgogICogIGUxMDAwZV9nZXRfYnVzX2luZm9fcGNpZSAtIEdldCBQQ0llIGJ1cyBpbmZvcm1hdGlvbgpAQCAtMTQyLDcgKzE0Miw4IEBACiB7CiAJdTMyIHJhcl9sb3csIHJhcl9oaWdoOwogCi0JLyogSFcgZXhwZWN0cyB0aGVzZSBpbiBsaXR0bGUgZW5kaWFuIHNvIHdlIHJldmVyc2UgdGhlIGJ5dGUgb3JkZXIKKwkvKgorCSAqIEhXIGV4cGVjdHMgdGhlc2UgaW4gbGl0dGxlIGVuZGlhbiBzbyB3ZSByZXZlcnNlIHRoZSBieXRlIG9yZGVyCiAJICogZnJvbSBuZXR3b3JrIG9yZGVyIChiaWcgZW5kaWFuKSB0byBsaXR0bGUgZW5kaWFuCiAJICovCiAJcmFyX2xvdyA9ICgodTMyKSBhZGRyWzBdIHwKQEAgLTE3MSw3ICsxNzIsOCBAQAogewogCXUzMiBoYXNoX2JpdCwgaGFzaF9yZWcsIG10YTsKIAotCS8qIFRoZSBNVEEgaXMgYSByZWdpc3RlciBhcnJheSBvZiAzMi1iaXQgcmVnaXN0ZXJzLiBJdCBpcworCS8qCisJICogVGhlIE1UQSBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuIEl0IGlzCiAJICogdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mICgzMiptdGFfcmVnX2NvdW50KSBiaXRzLiAgV2Ugd2FudCB0bwogCSAqIHNldCBiaXQgQml0QXJyYXlbaGFzaF92YWx1ZV0uIFNvIHdlIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcgogCSAqIHRoZSBiaXQgaXMgaW4sIHJlYWQgaXQsIE9SIGluIHRoZSBuZXcgYml0LCB0aGVuIHdyaXRlCkBAIC0yMDgsMTIgKzIxMCwxNSBAQAogCS8qIFJlZ2lzdGVyIGNvdW50IG11bHRpcGxpZWQgYnkgYml0cyBwZXIgcmVnaXN0ZXIgKi8KIAloYXNoX21hc2sgPSAoaHctPm1hYy5tdGFfcmVnX2NvdW50ICogMzIpIC0gMTsKIAotCS8qIEZvciBhIG1jX2ZpbHRlcl90eXBlIG9mIDAsIGJpdF9zaGlmdCBpcyB0aGUgbnVtYmVyIG9mIGxlZnQtc2hpZnRzCi0JICogd2hlcmUgMHhGRiB3b3VsZCBzdGlsbCBmYWxsIHdpdGhpbiB0aGUgaGFzaCBtYXNrLiAqLworCS8qCisJICogRm9yIGEgbWNfZmlsdGVyX3R5cGUgb2YgMCwgYml0X3NoaWZ0IGlzIHRoZSBudW1iZXIgb2YgbGVmdC1zaGlmdHMKKwkgKiB3aGVyZSAweEZGIHdvdWxkIHN0aWxsIGZhbGwgd2l0aGluIHRoZSBoYXNoIG1hc2suCisJICovCiAJd2hpbGUgKGhhc2hfbWFzayA+PiBiaXRfc2hpZnQgIT0gMHhGRikKIAkJYml0X3NoaWZ0Kys7CiAKLQkvKiBUaGUgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcyB0aGF0IGlzIHVzZWQgZm9yIHRoZSBoYXNoIHRhYmxlCisJLyoKKwkgKiBUaGUgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcyB0aGF0IGlzIHVzZWQgZm9yIHRoZSBoYXNoIHRhYmxlCiAJICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgbWNfZmlsdGVyX3R5cGUgc2V0dGluZy4KIAkgKiBUaGUgYWxnb3JpdGhtIGlzIHN1Y2ggdGhhdCB0aGVyZSBpcyBhIHRvdGFsIG9mIDggYml0cyBvZiBzaGlmdGluZy4KIAkgKiBUaGUgYml0X3NoaWZ0IGZvciBhIG1jX2ZpbHRlcl90eXBlIG9mIDAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mCkBAIC0yMjQsOCArMjI5LDggQEAKIAkgKiBjYXNlcyBhcmUgYSB2YXJpYXRpb24gb2YgdGhpcyBhbGdvcml0aG0uLi5lc3NlbnRpYWxseSByYWlzaW5nIHRoZQogCSAqIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IG1jX2FkZHJbNV0gbGVmdCwgd2hpbGUgc3RpbGwga2VlcGluZyB0aGUKIAkgKiA4LWJpdCBzaGlmdGluZyB0b3RhbC4KLQkgKi8KLQkvKiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBEZXN0aW5hdGlvbiBNQUMgQWRkcmVzcyBhbmQgYW4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIERlc3RpbmF0aW9uIE1BQyBBZGRyZXNzIGFuZCBhbgogCSAqIG10YSByZWdpc3RlciBjb3VudCBvZiAxMjggKHRodXMgYSA0MDk2LWJpdCB2ZWN0b3IgYW5kIDB4RkZGIG1hc2spLAogCSAqIHdlIGNhbiBzZWUgdGhhdCB0aGUgYml0X3NoaWZ0IGZvciBjYXNlIDAgaXMgNC4gIFRoZXNlIGFyZSB0aGUgaGFzaAogCSAqIHZhbHVlcyByZXN1bHRpbmcgZnJvbSBlYWNoIG1jX2ZpbHRlcl90eXBlLi4uCkBAIC0yNjAsNyArMjY1LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBlX21jX2FkZHJfbGlzdF91cGRhdGVfZ2VuZXJpYyAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCisgKiAgZTEwMDBlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYyAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KICAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQpAQCAtMjcyLDE0ICsyNzcsMTUgQEAKICAqICBUaGUgcGFyYW1ldGVyIHJhcl9jb3VudCB3aWxsIHVzdWFsbHkgYmUgaHctPm1hYy5yYXJfZW50cnlfY291bnQKICAqICB1bmxlc3MgdGhlcmUgYXJlIHdvcmthcm91bmRzIHRoYXQgY2hhbmdlIHRoaXMuCiAgKiovCi12b2lkIGUxMDAwZV9tY19hZGRyX2xpc3RfdXBkYXRlX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodywKLQkJCQkgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCi0JCQkJICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKK3ZvaWQgZTEwMDBlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorCQkJCQl1OCAqbWNfYWRkcl9saXN0LCB1MzIgbWNfYWRkcl9jb3VudCwKKwkJCQkJdTMyIHJhcl91c2VkX2NvdW50LCB1MzIgcmFyX2NvdW50KQogewogCXUzMiBoYXNoX3ZhbHVlOwogCXUzMiBpOwogCi0JLyogTG9hZCB0aGUgZmlyc3Qgc2V0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgZXhhY3QKKwkvKgorCSAqIExvYWQgdGhlIGZpcnN0IHNldCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGV4YWN0CiAJICogZmlsdGVycyAoUkFSKS4gIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHRvIGZpbGwgdGhlIFJBUgogCSAqIGFycmF5LCBjbGVhciB0aGUgZmlsdGVycy4KIAkgKi8KQEAgLTM3NSw3ICszODEsOCBAQAogCXMzMiByZXRfdmFsOwogCWJvb2wgbGluazsKIAotCS8qIFdlIG9ubHkgd2FudCB0byBnbyBvdXQgdG8gdGhlIFBIWSByZWdpc3RlcnMgdG8gc2VlIGlmIEF1dG8tTmVnCisJLyoKKwkgKiBXZSBvbmx5IHdhbnQgdG8gZ28gb3V0IHRvIHRoZSBQSFkgcmVnaXN0ZXJzIHRvIHNlZSBpZiBBdXRvLU5lZwogCSAqIGhhcyBjb21wbGV0ZWQgYW5kL29yIGlmIG91ciBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZC4gIFRoZQogCSAqIGdldF9saW5rX3N0YXR1cyBmbGFnIGlzIHNldCB1cG9uIHJlY2VpdmluZyBhIExpbmsgU3RhdHVzCiAJICogQ2hhbmdlIG9yIFJ4IFNlcXVlbmNlIEVycm9yIGludGVycnVwdC4KQEAgLTM4Myw3ICszOTAsOCBAQAogCWlmICghbWFjLT5nZXRfbGlua19zdGF0dXMpCiAJCXJldHVybiAwOwogCi0JLyogRmlyc3Qgd2Ugd2FudCB0byBzZWUgaWYgdGhlIE1JSSBTdGF0dXMgUmVnaXN0ZXIgcmVwb3J0cworCS8qCisJICogRmlyc3Qgd2Ugd2FudCB0byBzZWUgaWYgdGhlIE1JSSBTdGF0dXMgUmVnaXN0ZXIgcmVwb3J0cwogCSAqIGxpbmsuICBJZiBzbywgdGhlbiB3ZSB3YW50IHRvIGdldCB0aGUgY3VycmVudCBzcGVlZC9kdXBsZXgKIAkgKiBvZiB0aGUgUEhZLgogCSAqLwpAQCAtMzk2LDExICs0MDQsMTQgQEAKIAogCW1hYy0+Z2V0X2xpbmtfc3RhdHVzID0gMDsKIAotCS8qIENoZWNrIGlmIHRoZXJlIHdhcyBEb3duU2hpZnQsIG11c3QgYmUgY2hlY2tlZAotCSAqIGltbWVkaWF0ZWx5IGFmdGVyIGxpbmstdXAgKi8KKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIHdhcyBEb3duU2hpZnQsIG11c3QgYmUgY2hlY2tlZAorCSAqIGltbWVkaWF0ZWx5IGFmdGVyIGxpbmstdXAKKwkgKi8KIAllMTAwMGVfY2hlY2tfZG93bnNoaWZ0KGh3KTsKIAotCS8qIElmIHdlIGFyZSBmb3JjaW5nIHNwZWVkL2R1cGxleCwgdGhlbiB3ZSBzaW1wbHkgcmV0dXJuIHNpbmNlCisJLyoKKwkgKiBJZiB3ZSBhcmUgZm9yY2luZyBzcGVlZC9kdXBsZXgsIHRoZW4gd2Ugc2ltcGx5IHJldHVybiBzaW5jZQogCSAqIHdlIGhhdmUgYWxyZWFkeSBkZXRlcm1pbmVkIHdoZXRoZXIgd2UgaGF2ZSBsaW5rIG9yIG5vdC4KIAkgKi8KIAlpZiAoIW1hYy0+YXV0b25lZykgewpAQCAtNDA4LDEzICs0MTksMTUgQEAKIAkJcmV0dXJuIHJldF92YWw7CiAJfQogCi0JLyogQXV0by1OZWcgaXMgZW5hYmxlZC4gIEF1dG8gU3BlZWQgRGV0ZWN0aW9uIHRha2VzIGNhcmUKKwkvKgorCSAqIEF1dG8tTmVnIGlzIGVuYWJsZWQuICBBdXRvIFNwZWVkIERldGVjdGlvbiB0YWtlcyBjYXJlCiAJICogb2YgTUFDIHNwZWVkL2R1cGxleCBjb25maWd1cmF0aW9uLiAgU28gd2Ugb25seSBuZWVkIHRvCiAJICogY29uZmlndXJlIENvbGxpc2lvbiBEaXN0YW5jZSBpbiB0aGUgTUFDLgogCSAqLwogCWUxMDAwZV9jb25maWdfY29sbGlzaW9uX2Rpc3QoaHcpOwogCi0JLyogQ29uZmlndXJlIEZsb3cgQ29udHJvbCBub3cgdGhhdCBBdXRvLU5lZyBoYXMgY29tcGxldGVkLgorCS8qCisJICogQ29uZmlndXJlIEZsb3cgQ29udHJvbCBub3cgdGhhdCBBdXRvLU5lZyBoYXMgY29tcGxldGVkLgogCSAqIEZpcnN0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIGRlc2lyZWQgZmxvdyBjb250cm9sCiAJICogc2V0dGluZ3MgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBoYWQgdG8gcmUtYXV0b25lZyB3aXRoIGEKIAkgKiBkaWZmZXJlbnQgbGluayBwYXJ0bmVyLgpAQCAtNDQ2LDcgKzQ1OSw4IEBACiAJc3RhdHVzID0gZXIzMihTVEFUVVMpOwogCXJ4Y3cgPSBlcjMyKFJYQ1cpOwogCi0JLyogSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rIChhdXRvLW5lZ290aWF0aW9uIGZhaWxlZCBvciBsaW5rIHBhcnRuZXIKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgbGluayAoYXV0by1uZWdvdGlhdGlvbiBmYWlsZWQgb3IgbGluayBwYXJ0bmVyCiAJICogY2Fubm90IGF1dG8tbmVnb3RpYXRlKSwgdGhlIGNhYmxlIGlzIHBsdWdnZWQgaW4gKHdlIGhhdmUgc2lnbmFsKSwKIAkgKiBhbmQgb3VyIGxpbmsgcGFydG5lciBpcyBub3QgdHJ5aW5nIHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggdXMgKHdlCiAJICogYXJlIHJlY2VpdmluZyBpZGxlcyBvciBkYXRhKSwgd2UgbmVlZCB0byBmb3JjZSBsaW5rIHVwLiBXZSBhbHNvCkBAIC00NzcsNyArNDkxLDggQEAKIAkJCXJldHVybiByZXRfdmFsOwogCQl9CiAJfSBlbHNlIGlmICgoY3RybCAmIEUxMDAwX0NUUkxfU0xVKSAmJiAocnhjdyAmIEUxMDAwX1JYQ1dfQykpIHsKLQkJLyogSWYgd2UgYXJlIGZvcmNpbmcgbGluayBhbmQgd2UgYXJlIHJlY2VpdmluZyAvQy8gb3JkZXJlZAorCQkvKgorCQkgKiBJZiB3ZSBhcmUgZm9yY2luZyBsaW5rIGFuZCB3ZSBhcmUgcmVjZWl2aW5nIC9DLyBvcmRlcmVkCiAJCSAqIHNldHMsIHJlLWVuYWJsZSBhdXRvLW5lZ290aWF0aW9uIGluIHRoZSBUWENXIHJlZ2lzdGVyCiAJCSAqIGFuZCBkaXNhYmxlIGZvcmNlZCBsaW5rIGluIHRoZSBEZXZpY2UgQ29udHJvbCByZWdpc3RlcgogCQkgKiBpbiBhbiBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggb3VyIGxpbmsgcGFydG5lci4KQEAgLTUxMSw3ICs1MjYsOCBAQAogCXN0YXR1cyA9IGVyMzIoU1RBVFVTKTsKIAlyeGN3ID0gZXIzMihSWENXKTsKIAotCS8qIElmIHdlIGRvbid0IGhhdmUgbGluayAoYXV0by1uZWdvdGlhdGlvbiBmYWlsZWQgb3IgbGluayBwYXJ0bmVyCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBoYXZlIGxpbmsgKGF1dG8tbmVnb3RpYXRpb24gZmFpbGVkIG9yIGxpbmsgcGFydG5lcgogCSAqIGNhbm5vdCBhdXRvLW5lZ290aWF0ZSksIGFuZCBvdXIgbGluayBwYXJ0bmVyIGlzIG5vdCB0cnlpbmcgdG8KIAkgKiBhdXRvLW5lZ290aWF0ZSB3aXRoIHVzICh3ZSBhcmUgcmVjZWl2aW5nIGlkbGVzIG9yIGRhdGEpLAogCSAqIHdlIG5lZWQgdG8gZm9yY2UgbGluayB1cC4gV2UgYWxzbyBuZWVkIHRvIGdpdmUgYXV0by1uZWdvdGlhdGlvbgpAQCAtNTQwLDcgKzU1Niw4IEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJfQogCX0gZWxzZSBpZiAoKGN0cmwgJiBFMTAwMF9DVFJMX1NMVSkgJiYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpKSB7Ci0JCS8qIElmIHdlIGFyZSBmb3JjaW5nIGxpbmsgYW5kIHdlIGFyZSByZWNlaXZpbmcgL0MvIG9yZGVyZWQKKwkJLyoKKwkJICogSWYgd2UgYXJlIGZvcmNpbmcgbGluayBhbmQgd2UgYXJlIHJlY2VpdmluZyAvQy8gb3JkZXJlZAogCQkgKiBzZXRzLCByZS1lbmFibGUgYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlcgogCQkgKiBhbmQgZGlzYWJsZSBmb3JjZWQgbGluayBpbiB0aGUgRGV2aWNlIENvbnRyb2wgcmVnaXN0ZXIKIAkJICogaW4gYW4gYXR0ZW1wdCB0byBhdXRvLW5lZ290aWF0ZSB3aXRoIG91ciBsaW5rIHBhcnRuZXIuCkBAIC01NTEsNyArNTY4LDggQEAKIAogCQltYWMtPnNlcmRlc19oYXNfbGluayA9IDE7CiAJfSBlbHNlIGlmICghKEUxMDAwX1RYQ1dfQU5FICYgZXIzMihUWENXKSkpIHsKLQkJLyogSWYgd2UgZm9yY2UgbGluayBmb3Igbm9uLWF1dG8tbmVnb3RpYXRpb24gc3dpdGNoLCBjaGVjaworCQkvKgorCQkgKiBJZiB3ZSBmb3JjZSBsaW5rIGZvciBub24tYXV0by1uZWdvdGlhdGlvbiBzd2l0Y2gsIGNoZWNrCiAJCSAqIGxpbmsgc3RhdHVzIGJhc2VkIG9uIE1BQyBzeW5jaHJvbml6YXRpb24gZm9yIGludGVybmFsCiAJCSAqIHNlcmRlcyBtZWRpYSB0eXBlLgogCQkgKi8KQEAgLTU4NSwxNCArNjAzLDExIEBACiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX3NldF9kZWZhdWx0X2ZjX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCXMzMiByZXRfdmFsOwogCXUxNiBudm1fZGF0YTsKIAotCWlmIChtYWMtPmZjICE9IGUxMDAwX2ZjX2RlZmF1bHQpCi0JCXJldHVybiAwOwotCi0JLyogUmVhZCBhbmQgc3RvcmUgd29yZCAweDBGIG9mIHRoZSBFRVBST00uIFRoaXMgd29yZCBjb250YWlucyBiaXRzCisJLyoKKwkgKiBSZWFkIGFuZCBzdG9yZSB3b3JkIDB4MEYgb2YgdGhlIEVFUFJPTS4gVGhpcyB3b3JkIGNvbnRhaW5zIGJpdHMKIAkgKiB0aGF0IGRldGVybWluZSB0aGUgaGFyZHdhcmUncyBkZWZhdWx0IFBBVVNFIChmbG93IGNvbnRyb2wpIG1vZGUsCiAJICogYSBiaXQgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIEhXIGRlZmF1bHRzIHRvIGVuYWJsaW5nIG9yCiAJICogZGlzYWJsaW5nIGF1dG8tbmVnb3RpYXRpb24sIGFuZCB0aGUgZGlyZWN0aW9uIG9mIHRoZQpAQCAtNjA4LDEyICs2MjMsMTIgQEAKIAl9CiAKIAlpZiAoKG52bV9kYXRhICYgTlZNX1dPUkQwRl9QQVVTRV9NQVNLKSA9PSAwKQotCQltYWMtPmZjID0gZTEwMDBfZmNfbm9uZTsKKwkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19ub25lOwogCWVsc2UgaWYgKChudm1fZGF0YSAmIE5WTV9XT1JEMEZfUEFVU0VfTUFTSykgPT0KIAkJIE5WTV9XT1JEMEZfQVNNX0RJUikKLQkJbWFjLT5mYyA9IGUxMDAwX2ZjX3R4X3BhdXNlOworCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3R4X3BhdXNlOwogCWVsc2UKLQkJbWFjLT5mYyA9IGUxMDAwX2ZjX2Z1bGw7CisJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKIAogCXJldHVybiAwOwogfQpAQCAtNjMzLDcgKzY0OCw4IEBACiAJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzMzIgcmV0X3ZhbDsKIAotCS8qIEluIHRoZSBjYXNlIG9mIHRoZSBwaHkgcmVzZXQgYmVpbmcgYmxvY2tlZCwgd2UgYWxyZWFkeSBoYXZlIGEgbGluay4KKwkvKgorCSAqIEluIHRoZSBjYXNlIG9mIHRoZSBwaHkgcmVzZXQgYmVpbmcgYmxvY2tlZCwgd2UgYWxyZWFkeSBoYXZlIGEgbGluay4KIAkgKiBXZSBkbyBub3QgbmVlZCB0byBzZXQgaXQgdXAgYWdhaW4uCiAJICovCiAJaWYgKGUxMDAwX2NoZWNrX3Jlc2V0X2Jsb2NrKGh3KSkKQEAgLTY0MywyNiArNjU5LDI4IEBACiAJICogSWYgZmxvdyBjb250cm9sIGlzIHNldCB0byBkZWZhdWx0LCBzZXQgZmxvdyBjb250cm9sIGJhc2VkIG9uCiAJICogdGhlIEVFUFJPTSBmbG93IGNvbnRyb2wgc2V0dGluZ3MuCiAJICovCi0JaWYgKG1hYy0+ZmMgPT0gZTEwMDBfZmNfZGVmYXVsdCkgeworCWlmIChody0+ZmMudHlwZSA9PSBlMTAwMF9mY19kZWZhdWx0KSB7CiAJCXJldF92YWwgPSBlMTAwMF9zZXRfZGVmYXVsdF9mY19nZW5lcmljKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQkvKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0CisJLyoKKwkgKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0CiAJICogaW4gY2FzZSB3ZSBnZXQgZGlzY29ubmVjdGVkIGFuZCB0aGVuIHJlY29ubmVjdGVkIGludG8gYSBkaWZmZXJlbnQKIAkgKiBodWIgb3Igc3dpdGNoIHdpdGggZGlmZmVyZW50IEZsb3cgQ29udHJvbCBjYXBhYmlsaXRpZXMuCiAJICovCi0JbWFjLT5vcmlnaW5hbF9mYyA9IG1hYy0+ZmM7CisJaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKIAotCWh3X2RiZyhodywgIkFmdGVyIGZpeC11cHMgRmxvd0NvbnRyb2wgaXMgbm93ID0gJXhcbiIsIG1hYy0+ZmMpOworCWh3X2RiZyhodywgIkFmdGVyIGZpeC11cHMgRmxvd0NvbnRyb2wgaXMgbm93ID0gJXhcbiIsIGh3LT5mYy50eXBlKTsKIAogCS8qIENhbGwgdGhlIG5lY2Vzc2FyeSBtZWRpYV90eXBlIHN1YnJvdXRpbmUgdG8gY29uZmlndXJlIHRoZSBsaW5rLiAqLwogCXJldF92YWwgPSBtYWMtPm9wcy5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UoaHcpOwogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCS8qIEluaXRpYWxpemUgdGhlIGZsb3cgY29udHJvbCBhZGRyZXNzLCB0eXBlLCBhbmQgUEFVU0UgdGltZXIKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGZsb3cgY29udHJvbCBhZGRyZXNzLCB0eXBlLCBhbmQgUEFVU0UgdGltZXIKIAkgKiByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuICBUaGlzIGlzIGRvbmUgZXZlbiBpZiBmbG93CiAJICogY29udHJvbCBpcyBkaXNhYmxlZCwgYmVjYXVzZSBpdCBkb2VzIG5vdCBodXJ0IGFueXRoaW5nIHRvCiAJICogaW5pdGlhbGl6ZSB0aGVzZSByZWdpc3RlcnMuCkBAIC02NzIsNyArNjkwLDcgQEAKIAlldzMyKEZDQUgsIEZMT1dfQ09OVFJPTF9BRERSRVNTX0hJR0gpOwogCWV3MzIoRkNBTCwgRkxPV19DT05UUk9MX0FERFJFU1NfTE9XKTsKIAotCWV3MzIoRkNUVFYsIG1hYy0+ZmNfcGF1c2VfdGltZSk7CisJZXczMihGQ1RUViwgaHctPmZjLnBhdXNlX3RpbWUpOwogCiAJcmV0dXJuIGUxMDAwZV9zZXRfZmNfd2F0ZXJtYXJrcyhodyk7CiB9CkBAIC02ODksNyArNzA3LDggQEAKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCXUzMiB0eGN3OwogCi0JLyogQ2hlY2sgZm9yIGEgc29mdHdhcmUgb3ZlcnJpZGUgb2YgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncywgYW5kCisJLyoKKwkgKiBDaGVjayBmb3IgYSBzb2Z0d2FyZSBvdmVycmlkZSBvZiB0aGUgZmxvdyBjb250cm9sIHNldHRpbmdzLCBhbmQKIAkgKiBzZXR1cCB0aGUgZGV2aWNlIGFjY29yZGluZ2x5LiAgSWYgYXV0by1uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB0aGVuCiAJICogc29mdHdhcmUgd2lsbCBoYXZlIHRvIHNldCB0aGUgIlBBVVNFIiBiaXRzIHRvIHRoZSBjb3JyZWN0IHZhbHVlIGluCiAJICogdGhlIFRyYW5zbWl0IENvbmZpZyBXb3JkIFJlZ2lzdGVyIChUWENXKSBhbmQgcmUtc3RhcnQgYXV0by0KQEAgLTcwMywzMSArNzIyLDM0IEBACiAJICoJICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KIAkgKiAgICAgIDI6ICBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dCB3ZQogCSAqCSAgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCi0JICogICAgICAzOiAgQm90aCBSeCBhbmQgVFggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqICAgICAgMzogIEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KIAkgKi8KLQlzd2l0Y2ggKG1hYy0+ZmMpIHsKKwlzd2l0Y2ggKGh3LT5mYy50eXBlKSB7CiAJY2FzZSBlMTAwMF9mY19ub25lOgogCQkvKiBGbG93IGNvbnRyb2wgY29tcGxldGVseSBkaXNhYmxlZCBieSBhIHNvZnR3YXJlIG92ZXItcmlkZS4gKi8KIAkJdHhjdyA9IChFMTAwMF9UWENXX0FORSB8IEUxMDAwX1RYQ1dfRkQpOwogCQlicmVhazsKIAljYXNlIGUxMDAwX2ZjX3J4X3BhdXNlOgotCQkvKiBSWCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgVFggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkCisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMgZGlzYWJsZWQKIAkJICogYnkgYSBzb2Z0d2FyZSBvdmVyLXJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseSBpc24ndCBhIHdheSB0bwotCQkgKiBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWCBQYXVzZSBPTkxZLCB3ZSB3aWxsCi0JCSAqIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aCBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUlgKKwkJICogYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUnggUGF1c2UgT05MWSwgd2Ugd2lsbAorCQkgKiBhZHZlcnRpc2UgdGhhdCB3ZSBzdXBwb3J0IGJvdGggc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJ4CiAJCSAqIFBBVVNFLiAgTGF0ZXIsIHdlIHdpbGwgZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZAogCQkgKiBQQVVTRSBmcmFtZXMuCiAJCSAqLwogCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCB8IEUxMDAwX1RYQ1dfUEFVU0VfTUFTSyk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfZmNfdHhfcGF1c2U6Ci0JCS8qIFRYIEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgUlggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLAorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcyBkaXNhYmxlZCwKIAkJICogYnkgYSBzb2Z0d2FyZSBvdmVyLXJpZGUuCiAJCSAqLwogCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCB8IEUxMDAwX1RYQ1dfQVNNX0RJUik7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfZmNfZnVsbDoKLQkJLyogRmxvdyBjb250cm9sIChib3RoIFJYIGFuZCBUWCkgaXMgZW5hYmxlZCBieSBhIHNvZnR3YXJlCisJCS8qCisJCSAqIEZsb3cgY29udHJvbCAoYm90aCBSeCBhbmQgVHgpIGlzIGVuYWJsZWQgYnkgYSBzb2Z0d2FyZQogCQkgKiBvdmVyLXJpZGUuCiAJCSAqLwogCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCB8IEUxMDAwX1RYQ1dfUEFVU0VfTUFTSyk7CkBAIC03NTcsNyArNzc5LDggQEAKIAl1MzIgaSwgc3RhdHVzOwogCXMzMiByZXRfdmFsOwogCi0JLyogSWYgd2UgaGF2ZSBhIHNpZ25hbCAodGhlIGNhYmxlIGlzIHBsdWdnZWQgaW4sIG9yIGFzc3VtZWQgdHJ1ZSBmb3IKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBzaWduYWwgKHRoZSBjYWJsZSBpcyBwbHVnZ2VkIGluLCBvciBhc3N1bWVkIHRydWUgZm9yCiAJICogc2VyZGVzIG1lZGlhKSB0aGVuIHBvbGwgZm9yIGEgIkxpbmstVXAiIGluZGljYXRpb24gaW4gdGhlIERldmljZQogCSAqIFN0YXR1cyBSZWdpc3Rlci4gIFRpbWUtb3V0IGlmIGEgbGluayBpc24ndCBzZWVuIGluIDUwMCBtaWxsaXNlY29uZHMKIAkgKiBzZWNvbmRzIChBdXRvLW5lZ290aWF0aW9uIHNob3VsZCBjb21wbGV0ZSBpbiBsZXNzIHRoYW4gNTAwCkBAIC03NzIsNyArNzk1LDggQEAKIAlpZiAoaSA9PSBGSUJFUl9MSU5LX1VQX0xJTUlUKSB7CiAJCWh3X2RiZyhodywgIk5ldmVyIGdvdCBhIHZhbGlkIGxpbmsgZnJvbSBhdXRvLW5lZyEhIVxuIik7CiAJCW1hYy0+YXV0b25lZ19mYWlsZWQgPSAxOwotCQkvKiBBdXRvTmVnIGZhaWxlZCB0byBhY2hpZXZlIGEgbGluaywgc28gd2UnbGwgY2FsbAorCQkvKgorCQkgKiBBdXRvTmVnIGZhaWxlZCB0byBhY2hpZXZlIGEgbGluaywgc28gd2UnbGwgY2FsbAogCQkgKiBtYWMtPmNoZWNrX2Zvcl9saW5rLiBUaGlzIHJvdXRpbmUgd2lsbCBmb3JjZSB0aGUKIAkJICogbGluayB1cCBpZiB3ZSBkZXRlY3QgYSBzaWduYWwuIFRoaXMgd2lsbCBhbGxvdyB1cyB0bwogCQkgKiBjb21tdW5pY2F0ZSB3aXRoIG5vbi1hdXRvbmVnb3RpYXRpbmcgbGluayBwYXJ0bmVycy4KQEAgLTgxNCw3ICs4MzgsOCBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCS8qIFNpbmNlIGF1dG8tbmVnb3RpYXRpb24gaXMgZW5hYmxlZCwgdGFrZSB0aGUgbGluayBvdXQgb2YgcmVzZXQgKHRoZQorCS8qCisJICogU2luY2UgYXV0by1uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB0YWtlIHRoZSBsaW5rIG91dCBvZiByZXNldCAodGhlCiAJICogbGluayB3aWxsIGJlIGluIHJlc2V0LCBiZWNhdXNlIHdlIHByZXZpb3VzbHkgcmVzZXQgdGhlIGNoaXApLiBUaGlzCiAJICogd2lsbCByZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24uICBJZiBhdXRvLW5lZ290aWF0aW9uIGlzIHN1Y2Nlc3NmdWwKIAkgKiB0aGVuIHRoZSBsaW5rLXVwIHN0YXR1cyBiaXQgd2lsbCBiZSBzZXQgYW5kIHRoZSBmbG93IGNvbnRyb2wgZW5hYmxlCkBAIC04MjYsMTEgKzg1MSwxMiBAQAogCWUxZV9mbHVzaCgpOwogCW1zbGVlcCgxKTsKIAotCS8qIEZvciB0aGVzZSBhZGFwdGVycywgdGhlIFNXIGRlZmluZWFibGUgcGluIDEgaXMgc2V0IHdoZW4gdGhlIG9wdGljcworCS8qCisJICogRm9yIHRoZXNlIGFkYXB0ZXJzLCB0aGUgU1cgZGVmaW5hYmxlIHBpbiAxIGlzIHNldCB3aGVuIHRoZSBvcHRpY3MKIAkgKiBkZXRlY3QgYSBzaWduYWwuICBJZiB3ZSBoYXZlIGEgc2lnbmFsLCB0aGVuIHBvbGwgZm9yIGEgIkxpbmstVXAiCiAJICogaW5kaWNhdGlvbi4KIAkgKi8KLQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMgfHwKKwlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzIHx8CiAJICAgIChlcjMyKENUUkwpICYgRTEwMDBfQ1RSTF9TV0RQSU4xKSkgewogCQlyZXRfdmFsID0gZTEwMDBfcG9sbF9maWJlcl9zZXJkZXNfbGlua19nZW5lcmljKGh3KTsKIAl9IGVsc2UgewpAQCAtODY3LDI3ICs4OTMsMjggQEAKICAqCiAgKiAgU2V0cyB0aGUgZmxvdyBjb250cm9sIGhpZ2gvbG93IHRocmVzaG9sZCAod2F0ZXJtYXJrKSByZWdpc3RlcnMuICBJZgogICogIGZsb3cgY29udHJvbCBYT04gZnJhbWUgdHJhbnNtaXNzaW9uIGlzIGVuYWJsZWQsIHRoZW4gc2V0IFhPTiBmcmFtZQotICogIHRhbnNtaXNzaW9uIGFzIHdlbGwuCisgKiAgdHJhbnNtaXNzaW9uIGFzIHdlbGwuCiAgKiovCiBzMzIgZTEwMDBlX3NldF9mY193YXRlcm1hcmtzKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0Jc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAl1MzIgZmNydGwgPSAwLCBmY3J0aCA9IDA7CiAKLQkvKiBTZXQgdGhlIGZsb3cgY29udHJvbCByZWNlaXZlIHRocmVzaG9sZCByZWdpc3RlcnMuICBOb3JtYWxseSwKKwkvKgorCSAqIFNldCB0aGUgZmxvdyBjb250cm9sIHJlY2VpdmUgdGhyZXNob2xkIHJlZ2lzdGVycy4gIE5vcm1hbGx5LAogCSAqIHRoZXNlIHJlZ2lzdGVycyB3aWxsIGJlIHNldCB0byBhIGRlZmF1bHQgdGhyZXNob2xkIHRoYXQgbWF5IGJlCiAJICogYWRqdXN0ZWQgbGF0ZXIgYnkgdGhlIGRyaXZlcidzIHJ1bnRpbWUgY29kZS4gIEhvd2V2ZXIsIGlmIHRoZQogCSAqIGFiaWxpdHkgdG8gdHJhbnNtaXQgcGF1c2UgZnJhbWVzIGlzIG5vdCBlbmFibGVkLCB0aGVuIHRoZXNlCiAJICogcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IHRvIDAuCiAJICovCi0JaWYgKG1hYy0+ZmMgJiBlMTAwMF9mY190eF9wYXVzZSkgewotCQkvKiBXZSBuZWVkIHRvIHNldCB1cCB0aGUgUmVjZWl2ZSBUaHJlc2hvbGQgaGlnaCBhbmQgbG93IHdhdGVyCisJaWYgKGh3LT5mYy50eXBlICYgZTEwMDBfZmNfdHhfcGF1c2UpIHsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBzZXQgdXAgdGhlIFJlY2VpdmUgVGhyZXNob2xkIGhpZ2ggYW5kIGxvdyB3YXRlcgogCQkgKiBtYXJrcyBhcyB3ZWxsIGFzIChvcHRpb25hbGx5KSBlbmFibGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mCiAJCSAqIFhPTiBmcmFtZXMuCiAJCSAqLwotCQlmY3J0bCA9IG1hYy0+ZmNfbG93X3dhdGVyOworCQlmY3J0bCA9IGh3LT5mYy5sb3dfd2F0ZXI7CiAJCWZjcnRsIHw9IEUxMDAwX0ZDUlRMX1hPTkU7Ci0JCWZjcnRoID0gbWFjLT5mY19oaWdoX3dhdGVyOworCQlmY3J0aCA9IGh3LT5mYy5oaWdoX3dhdGVyOwogCX0KIAlldzMyKEZDUlRMLCBmY3J0bCk7CiAJZXczMihGQ1JUSCwgZmNydGgpOwpAQCAtOTA3LDE4ICs5MzQsMTggQEAKICAqKi8KIHMzMiBlMTAwMGVfZm9yY2VfbWFjX2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0Jc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAl1MzIgY3RybDsKIAogCWN0cmwgPSBlcjMyKENUUkwpOwogCi0JLyogQmVjYXVzZSB3ZSBkaWRuJ3QgZ2V0IGxpbmsgdmlhIHRoZSBpbnRlcm5hbCBhdXRvLW5lZ290aWF0aW9uCisJLyoKKwkgKiBCZWNhdXNlIHdlIGRpZG4ndCBnZXQgbGluayB2aWEgdGhlIGludGVybmFsIGF1dG8tbmVnb3RpYXRpb24KIAkgKiBtZWNoYW5pc20gKHdlIGVpdGhlciBmb3JjZWQgbGluayBvciB3ZSBnb3QgbGluayB2aWEgUEhZCiAJICogYXV0by1uZWcpLCB3ZSBoYXZlIHRvIG1hbnVhbGx5IGVuYWJsZS9kaXNhYmxlIHRyYW5zbWl0IGFuCiAJICogcmVjZWl2ZSBmbG93IGNvbnRyb2wuCiAJICoKIAkgKiBUaGUgIkNhc2UiIHN0YXRlbWVudCBiZWxvdyBlbmFibGVzL2Rpc2FibGUgZmxvdyBjb250cm9sCi0JICogYWNjb3JkaW5nIHRvIHRoZSAibWFjLT5mYyIgcGFyYW1ldGVyLgorCSAqIGFjY29yZGluZyB0byB0aGUgImh3LT5mYy50eXBlIiBwYXJhbWV0ZXIuCiAJICoKIAkgKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSAiZmMiIHBhcmFtZXRlciBhcmU6CiAJICogICAgICAwOiAgRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKQEAgLTkyNiwxMiArOTUzLDEyIEBACiAJICoJICBmcmFtZXMgYnV0IG5vdCBzZW5kIHBhdXNlIGZyYW1lcykuCiAJICogICAgICAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcwogCSAqCSAgZnJhbWVzIGJ1dCB3ZSBkbyBub3QgcmVjZWl2ZSBwYXVzZSBmcmFtZXMpLgotCSAqICAgICAgMzogIEJvdGggUnggYW5kIFRYIGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBpcyBlbmFibGVkLgorCSAqICAgICAgMzogIEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBpcyBlbmFibGVkLgogCSAqICBvdGhlcjogIE5vIG90aGVyIHZhbHVlcyBzaG91bGQgYmUgcG9zc2libGUgYXQgdGhpcyBwb2ludC4KIAkgKi8KLQlod19kYmcoaHcsICJtYWMtPmZjID0gJXVcbiIsIG1hYy0+ZmMpOworCWh3X2RiZyhodywgImh3LT5mYy50eXBlID0gJXVcbiIsIGh3LT5mYy50eXBlKTsKIAotCXN3aXRjaCAobWFjLT5mYykgeworCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKIAljYXNlIGUxMDAwX2ZjX25vbmU6CiAJCWN0cmwgJj0gKH4oRTEwMDBfQ1RSTF9URkNFIHwgRTEwMDBfQ1RSTF9SRkNFKSk7CiAJCWJyZWFrOwpAQCAtOTczLDE2ICsxMDAwLDE3IEBACiAJdTE2IG1paV9zdGF0dXNfcmVnLCBtaWlfbndheV9hZHZfcmVnLCBtaWlfbndheV9scF9hYmlsaXR5X3JlZzsKIAl1MTYgc3BlZWQsIGR1cGxleDsKIAotCS8qIENoZWNrIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGZpYmVyIG1lZGlhIGFuZCBhdXRvLW5lZyBmYWlsZWQKKwkvKgorCSAqIENoZWNrIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGZpYmVyIG1lZGlhIGFuZCBhdXRvLW5lZyBmYWlsZWQKIAkgKiBzbyB3ZSBoYWQgdG8gZm9yY2UgbGluay4gIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBmb3JjZSB0aGUKIAkgKiBjb25maWd1cmF0aW9uIG9mIHRoZSBNQUMgdG8gbWF0Y2ggdGhlICJmYyIgcGFyYW1ldGVyLgogCSAqLwogCWlmIChtYWMtPmF1dG9uZWdfZmFpbGVkKSB7Ci0JCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8Ci0JCSAgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8CisJCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpCiAJCQlyZXRfdmFsID0gZTEwMDBlX2ZvcmNlX21hY19mYyhodyk7CiAJfSBlbHNlIHsKLQkJaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQorCQlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQogCQkJcmV0X3ZhbCA9IGUxMDAwZV9mb3JjZV9tYWNfZmMoaHcpOwogCX0KIApAQCAtOTkxLDEzICsxMDE5LDE1IEBACiAJCXJldHVybiByZXRfdmFsOwogCX0KIAotCS8qIENoZWNrIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGNvcHBlciBtZWRpYSBhbmQgYXV0by1uZWcgaXMKKwkvKgorCSAqIENoZWNrIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGNvcHBlciBtZWRpYSBhbmQgYXV0by1uZWcgaXMKIAkgKiBlbmFibGVkLiAgSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIGFuZCBzZWUgaWYgQXV0by1OZWcKIAkgKiBoYXMgY29tcGxldGVkLCBhbmQgaWYgc28sIGhvdyB0aGUgUEhZIGFuZCBsaW5rIHBhcnRuZXIgaGFzCiAJICogZmxvdyBjb250cm9sIGNvbmZpZ3VyZWQuCiAJICovCi0JaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgJiYgbWFjLT5hdXRvbmVnKSB7Ci0JCS8qIFJlYWQgdGhlIE1JSSBTdGF0dXMgUmVnaXN0ZXIgYW5kIGNoZWNrIHRvIHNlZSBpZiBBdXRvTmVnCisJaWYgKChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpICYmIG1hYy0+YXV0b25lZykgeworCQkvKgorCQkgKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFuZCBjaGVjayB0byBzZWUgaWYgQXV0b05lZwogCQkgKiBoYXMgY29tcGxldGVkLiAgV2UgcmVhZCB0aGlzIHR3aWNlIGJlY2F1c2UgdGhpcyByZWcgaGFzCiAJCSAqIHNvbWUgInN0aWNreSIgKGxhdGNoZWQpIGJpdHMuCiAJCSAqLwpAQCAtMTAxNCw3ICsxMDQ0LDggQEAKIAkJCXJldHVybiByZXRfdmFsOwogCQl9CiAKLQkJLyogVGhlIEF1dG9OZWcgcHJvY2VzcyBoYXMgY29tcGxldGVkLCBzbyB3ZSBub3cgbmVlZCB0bworCQkvKgorCQkgKiBUaGUgQXV0b05lZyBwcm9jZXNzIGhhcyBjb21wbGV0ZWQsIHNvIHdlIG5vdyBuZWVkIHRvCiAJCSAqIHJlYWQgYm90aCB0aGUgQXV0byBOZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50CiAJCSAqIFJlZ2lzdGVyIChBZGRyZXNzIDQpIGFuZCB0aGUgQXV0b19OZWdvdGlhdGlvbiBCYXNlCiAJCSAqIFBhZ2UgQWJpbGl0eSBSZWdpc3RlciAoQWRkcmVzcyA1KSB0byBkZXRlcm1pbmUgaG93CkBAIC0xMDI3LDcgKzEwNTgsOCBAQAogCQlpZiAocmV0X3ZhbCkKIAkJCXJldHVybiByZXRfdmFsOwogCi0JCS8qIFR3byBiaXRzIGluIHRoZSBBdXRvIE5lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIKKwkJLyoKKwkJICogVHdvIGJpdHMgaW4gdGhlIEF1dG8gTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCBSZWdpc3RlcgogCQkgKiAoQWRkcmVzcyA0KSBhbmQgdHdvIGJpdHMgaW4gdGhlIEF1dG8gTmVnb3RpYXRpb24gQmFzZQogCQkgKiBQYWdlIEFiaWxpdHkgUmVnaXN0ZXIgKEFkZHJlc3MgNSkgZGV0ZXJtaW5lIGZsb3cgY29udHJvbAogCQkgKiBmb3IgYm90aCB0aGUgUEhZIGFuZCB0aGUgbGluayBwYXJ0bmVyLiAgVGhlIGZvbGxvd2luZwpAQCAtMTA0OCw4ICsxMDgwLDggQEAKIAkJICogICAxICAgfCAgICAxICAgIHwgICAwICAgfCAgICAwICAgIHwgZTEwMDBfZmNfbm9uZQogCQkgKiAgIDEgICB8ICAgIDEgICAgfCAgIDAgICB8ICAgIDEgICAgfCBlMTAwMF9mY19yeF9wYXVzZQogCQkgKgotCQkgKi8KLQkJLyogQXJlIGJvdGggUEFVU0UgYml0cyBzZXQgdG8gMT8gIElmIHNvLCB0aGlzIGltcGxpZXMKKwkJICoKKwkJICogQXJlIGJvdGggUEFVU0UgYml0cyBzZXQgdG8gMT8gIElmIHNvLCB0aGlzIGltcGxpZXMKIAkJICogU3ltbWV0cmljIEZsb3cgQ29udHJvbCBpcyBlbmFibGVkIGF0IGJvdGggZW5kcy4gIFRoZQogCQkgKiBBU01fRElSIGJpdHMgYXJlIGlycmVsZXZhbnQgcGVyIHRoZSBzcGVjLgogCQkgKgpAQCAtMTA2MywyMiArMTA5NSwyNCBAQAogCQkgKi8KIAkJaWYgKChtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9QQVVTRSkgJiYKIAkJICAgIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9QQVVTRSkpIHsKLQkJCS8qIE5vdyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSB1c2VyIHNlbGVjdGVkIFJYIE9OTFkKKwkJCS8qCisJCQkgKiBOb3cgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdXNlciBzZWxlY3RlZCBSeCBPTkxZCiAJCQkgKiBvZiBwYXVzZSBmcmFtZXMuICBJbiB0aGlzIGNhc2UsIHdlIGhhZCB0byBhZHZlcnRpc2UKLQkJCSAqIEZVTEwgZmxvdyBjb250cm9sIGJlY2F1c2Ugd2UgY291bGQgbm90IGFkdmVydGlzZSBSWAorCQkJICogRlVMTCBmbG93IGNvbnRyb2wgYmVjYXVzZSB3ZSBjb3VsZCBub3QgYWR2ZXJ0aXNlIFJ4CiAJCQkgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KIAkJCSAqIHR1cm4gT0ZGICB0aGUgVFJBTlNNSVNTSU9OIG9mIFBBVVNFIGZyYW1lcy4KIAkJCSAqLwotCQkJaWYgKG1hYy0+b3JpZ2luYWxfZmMgPT0gZTEwMDBfZmNfZnVsbCkgewotCQkJCW1hYy0+ZmMgPSBlMTAwMF9mY19mdWxsOworCQkJaWYgKGh3LT5mYy5vcmlnaW5hbF90eXBlID09IGUxMDAwX2ZjX2Z1bGwpIHsKKwkJCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2Z1bGw7CiAJCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gRlVMTC5cclxuIik7CiAJCQl9IGVsc2UgewotCQkJCW1hYy0+ZmMgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOwogCQkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9ICIKIAkJCQkJICJSWCBQQVVTRSBmcmFtZXMgb25seS5cclxuIik7CiAJCQl9CiAJCX0KLQkJLyogRm9yIHJlY2VpdmluZyBQQVVTRSBmcmFtZXMgT05MWS4KKwkJLyoKKwkJICogRm9yIHJlY2VpdmluZyBQQVVTRSBmcmFtZXMgT05MWS4KIAkJICoKIAkJICogICBMT0NBTCBERVZJQ0UgIHwgICBMSU5LIFBBUlRORVIKIAkJICogUEFVU0UgfCBBU01fRElSIHwgUEFVU0UgfCBBU01fRElSIHwgUmVzdWx0CkBAIC0xMDkwLDEwICsxMTI0LDExIEBACiAJCQkgIChtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9BU01fRElSKSAmJgogCQkJICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfUEFVU0UpICYmCiAJCQkgIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkgewotCQkJbWFjLT5mYyA9IGUxMDAwX2ZjX3R4X3BhdXNlOwotCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY190eF9wYXVzZTsKKwkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFR4IFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKIAkJfQotCQkvKiBGb3IgdHJhbnNtaXR0aW5nIFBBVVNFIGZyYW1lcyBPTkxZLgorCQkvKgorCQkgKiBGb3IgdHJhbnNtaXR0aW5nIFBBVVNFIGZyYW1lcyBPTkxZLgogCQkgKgogCQkgKiAgIExPQ0FMIERFVklDRSAgfCAgIExJTksgUEFSVE5FUgogCQkgKiBQQVVTRSB8IEFTTV9ESVIgfCBQQVVTRSB8IEFTTV9ESVIgfCBSZXN1bHQKQEAgLTExMDUsMzkgKzExNDAsMTkgQEAKIAkJCSAobWlpX253YXlfYWR2X3JlZyAmIE5XQVlfQVJfQVNNX0RJUikgJiYKIAkJCSAhKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogCQkJIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkgewotCQkJbWFjLT5mYyA9IGUxMDAwX2ZjX3J4X3BhdXNlOwotCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOwotCQl9Ci0JCS8qIFBlciB0aGUgSUVFRSBzcGVjLCBhdCB0aGlzIHBvaW50IGZsb3cgY29udHJvbCBzaG91bGQgYmUKLQkJICogZGlzYWJsZWQuICBIb3dldmVyLCB3ZSB3YW50IHRvIGNvbnNpZGVyIHRoYXQgd2UgY291bGQKLQkJICogYmUgY29ubmVjdGVkIHRvIGEgbGVnYWN5IHN3aXRjaCB0aGF0IGRvZXNuJ3QgYWR2ZXJ0aXNlCi0JCSAqIGRlc2lyZWQgZmxvdyBjb250cm9sLCBidXQgY2FuIGJlIGZvcmNlZCBvbiB0aGUgbGluawotCQkgKiBwYXJ0bmVyLiAgU28gaWYgd2UgYWR2ZXJ0aXNlZCBubyBmbG93IGNvbnRyb2wsIHRoYXQgaXMKLQkJICogd2hhdCB3ZSB3aWxsIHJlc29sdmUgdG8uICBJZiB3ZSBhZHZlcnRpc2VkIHNvbWUga2luZCBvZgotCQkgKiByZWNlaXZlIGNhcGFiaWxpdHkgKFJ4IFBhdXNlIE9ubHkgb3IgRnVsbCBGbG93IENvbnRyb2wpCi0JCSAqIGFuZCB0aGUgbGluayBwYXJ0bmVyIGFkdmVydGlzZWQgbm9uZSwgd2Ugd2lsbCBjb25maWd1cmUKLQkJICogb3Vyc2VsdmVzIHRvIGVuYWJsZSBSeCBGbG93IENvbnRyb2wgb25seS4gIFdlIGNhbiBkbwotCQkgKiB0aGlzIHNhZmVseSBmb3IgdHdvIHJlYXNvbnM6ICBJZiB0aGUgbGluayBwYXJ0bmVyIHJlYWxseQotCQkgKiBkaWRuJ3Qgd2FudCBmbG93IGNvbnRyb2wgZW5hYmxlZCwgYW5kIHdlIGVuYWJsZSBSeCwgbm8KLQkJICogaGFybSBkb25lIHNpbmNlIHdlIHdvbid0IGJlIHJlY2VpdmluZyBhbnkgUEFVU0UgZnJhbWVzCi0JCSAqIGFueXdheS4gIElmIHRoZSBpbnRlbnQgb24gdGhlIGxpbmsgcGFydG5lciB3YXMgdG8gaGF2ZQotCQkgKiBmbG93IGNvbnRyb2wgZW5hYmxlZCwgdGhlbiBieSB1cyBlbmFibGluZyBSWCBvbmx5LCB3ZQotCQkgKiBjYW4gYXQgbGVhc3QgcmVjZWl2ZSBwYXVzZSBmcmFtZXMgYW5kIHByb2Nlc3MgdGhlbS4KLQkJICogVGhpcyBpcyBhIGdvb2QgaWRlYSBiZWNhdXNlIGluIG1vc3QgY2FzZXMsIHNpbmNlIHdlIGFyZQotCQkgKiBwcmVkb21pbmFudGx5IGEgc2VydmVyIE5JQywgbW9yZSB0aW1lcyB0aGFuIG5vdCB3ZSB3aWxsCi0JCSAqIGJlIGFza2VkIHRvIGRlbGF5IHRyYW5zbWlzc2lvbiBvZiBwYWNrZXRzIHRoYW4gYXNraW5nCi0JCSAqIG91ciBsaW5rIHBhcnRuZXIgdG8gcGF1c2UgdHJhbnNtaXNzaW9uIG9mIGZyYW1lcy4KLQkJICovCi0JCWVsc2UgaWYgKChtYWMtPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX25vbmUpIHx8Ci0JCQkgKG1hYy0+b3JpZ2luYWxfZmMgPT0gZTEwMDBfZmNfdHhfcGF1c2UpKSB7Ci0JCQltYWMtPmZjID0gZTEwMDBfZmNfbm9uZTsKLQkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IE5PTkUuXHJcbiIpOworCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFJ4IFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKIAkJfSBlbHNlIHsKLQkJCW1hYy0+ZmMgPSBlMTAwMF9mY19yeF9wYXVzZTsKLQkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKwkJCS8qCisJCQkgKiBQZXIgdGhlIElFRUUgc3BlYywgYXQgdGhpcyBwb2ludCBmbG93IGNvbnRyb2wKKwkJCSAqIHNob3VsZCBiZSBkaXNhYmxlZC4KKwkJCSAqLworCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19ub25lOworCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gTk9ORS5cclxuIik7CiAJCX0KIAotCQkvKiBOb3cgd2UgbmVlZCB0byBkbyBvbmUgbGFzdCBjaGVjay4uLiAgSWYgd2UgYXV0by0KKwkJLyoKKwkJICogTm93IHdlIG5lZWQgdG8gZG8gb25lIGxhc3QgY2hlY2suLi4gIElmIHdlIGF1dG8tCiAJCSAqIG5lZ290aWF0ZWQgdG8gSEFMRiBEVVBMRVgsIGZsb3cgY29udHJvbCBzaG91bGQgbm90IGJlCiAJCSAqIGVuYWJsZWQgcGVyIElFRUUgODAyLjMgc3BlYy4KIAkJICovCkBAIC0xMTQ4LDkgKzExNjMsMTAgQEAKIAkJfQogCiAJCWlmIChkdXBsZXggPT0gSEFMRl9EVVBMRVgpCi0JCQltYWMtPmZjID0gZTEwMDBfZmNfbm9uZTsKKwkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsKIAotCQkvKiBOb3cgd2UgY2FsbCBhIHN1YnJvdXRpbmUgdG8gYWN0dWFsbHkgZm9yY2UgdGhlIE1BQworCQkvKgorCQkgKiBOb3cgd2UgY2FsbCBhIHN1YnJvdXRpbmUgdG8gYWN0dWFsbHkgZm9yY2UgdGhlIE1BQwogCQkgKiBjb250cm9sbGVyIHRvIHVzZSB0aGUgY29ycmVjdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuCiAJCSAqLwogCQlyZXRfdmFsID0gZTEwMDBlX2ZvcmNlX21hY19mYyhodyk7CkBAIC0xMTY0LDcgKzExODAsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMGVfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmVpdmUgY3VycmVudCBzcGVlZC9kdXBsZXgKKyAqICBlMTAwMGVfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmlldmUgY3VycmVudCBzcGVlZC9kdXBsZXgKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBzcGVlZDogc3RvcmVzIHRoZSBjdXJyZW50IHNwZWVkCiAgKiAgQGR1cGxleDogc3RvcmVzIHRoZSBjdXJyZW50IGR1cGxleApAQCAtMTIwMCw3ICsxMjE2LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2ZpYmVyX3NlcmRlcyAtIFJldHJlaXZlIGN1cnJlbnQgc3BlZWQvZHVwbGV4CisgKiAgZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2ZpYmVyX3NlcmRlcyAtIFJldHJpZXZlIGN1cnJlbnQgc3BlZWQvZHVwbGV4CiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAc3BlZWQ6IHN0b3JlcyB0aGUgY3VycmVudCBzcGVlZAogICogIEBkdXBsZXg6IHN0b3JlcyB0aGUgY3VycmVudCBkdXBsZXgKQEAgLTE0MTAsMjAgKzE0MjYsMjIgQEAKICAqICBlMTAwMGVfYmxpbmtfbGVkIC0gQmxpbmsgTEVECiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCi0gKiAgQmxpbmsgdGhlIGxlZCdzIHdoaWNoIGFyZSBzZXQgdG8gYmUgb24uCisgKiAgQmxpbmsgdGhlIExFRHMgd2hpY2ggYXJlIHNldCB0byBiZSBvbi4KICAqKi8KIHMzMiBlMTAwMGVfYmxpbmtfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAJdTMyIGxlZGN0bF9ibGluayA9IDA7CiAJdTMyIGk7CiAKLQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgeworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgewogCQkvKiBhbHdheXMgYmxpbmsgTEVEMCBmb3IgUENJLUUgZmliZXIgKi8KIAkJbGVkY3RsX2JsaW5rID0gRTEwMDBfTEVEQ1RMX0xFRDBfQkxJTksgfAogCQkgICAgIChFMTAwMF9MRURDVExfTU9ERV9MRURfT04gPDwgRTEwMDBfTEVEQ1RMX0xFRDBfTU9ERV9TSElGVCk7CiAJfSBlbHNlIHsKLQkJLyogc2V0IHRoZSBibGluayBiaXQgZm9yIGVhY2ggTEVEIHRoYXQncyAib24iICgweDBFKQotCQkgKiBpbiBsZWRjdGxfbW9kZTIgKi8KKwkJLyoKKwkJICogc2V0IHRoZSBibGluayBiaXQgZm9yIGVhY2ggTEVEIHRoYXQncyAib24iICgweDBFKQorCQkgKiBpbiBsZWRjdGxfbW9kZTIKKwkJICovCiAJCWxlZGN0bF9ibGluayA9IGh3LT5tYWMubGVkY3RsX21vZGUyOwogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQkJaWYgKCgoaHctPm1hYy5sZWRjdGxfbW9kZTIgPj4gKGkgKiA4KSkgJiAweEZGKSA9PQpAQCAtMTQ0Nyw3ICsxNDY1LDcgQEAKIHsKIAl1MzIgY3RybDsKIAotCXN3aXRjaCAoaHctPm1lZGlhX3R5cGUpIHsKKwlzd2l0Y2ggKGh3LT5waHkubWVkaWFfdHlwZSkgewogCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9maWJlcjoKIAkJY3RybCA9IGVyMzIoQ1RSTCk7CiAJCWN0cmwgJj0gfkUxMDAwX0NUUkxfU1dEUElOMDsKQEAgLTE0NzQsNyArMTQ5Miw3IEBACiB7CiAJdTMyIGN0cmw7CiAKLQlzd2l0Y2ggKGh3LT5tZWRpYV90eXBlKSB7CisJc3dpdGNoIChody0+cGh5Lm1lZGlhX3R5cGUpIHsKIAljYXNlIGUxMDAwX21lZGlhX3R5cGVfZmliZXI6CiAJCWN0cmwgPSBlcjMyKENUUkwpOwogCQljdHJsIHw9IEUxMDAwX0NUUkxfU1dEUElOMDsKQEAgLTE1MTUsNyArMTUzMyw3IEBACiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgcmV0dXJucyAtMTAKLSAqICAoLUUxMDAwX0VSUl9NQVNURVJfUkVRVUVTVFNfUEVORElORykgaWYgbWFzdGVyIGRpc2FibGUgYml0IGhhcyBub3QgY2FzdWVkCisgKiAgKC1FMTAwMF9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJTkcpIGlmIG1hc3RlciBkaXNhYmxlIGJpdCBoYXMgbm90IGNhdXNlZAogICogIHRoZSBtYXN0ZXIgcmVxdWVzdHMgdG8gYmUgZGlzYWJsZWQuCiAgKgogICogIERpc2FibGVzIFBDSS1FeHByZXNzIG1hc3RlciBhY2Nlc3MgYW5kIHZlcmlmaWVzIHRoZXJlIGFyZSBubyBwZW5kaW5nCkBAIC0xNTg2LDggKzE2MDQsNyBAQAogCQkJCWVsc2UKIAkJCQkJbWFjLT5jdXJyZW50X2lmc192YWwgKz0KIAkJCQkJCW1hYy0+aWZzX3N0ZXBfc2l6ZTsKLQkJCQlldzMyKEFJVCwKLQkJCQkJCW1hYy0+Y3VycmVudF9pZnNfdmFsKTsKKwkJCQlldzMyKEFJVCwgbWFjLT5jdXJyZW50X2lmc192YWwpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTE4NTAsMTAgKzE4NjcsMTIgQEAKIAkJdWRlbGF5KDEpOwogCQl0aW1lb3V0ID0gTlZNX01BWF9SRVRSWV9TUEk7CiAKLQkJLyogUmVhZCAiU3RhdHVzIFJlZ2lzdGVyIiByZXBlYXRlZGx5IHVudGlsIHRoZSBMU0IgaXMgY2xlYXJlZC4KKwkJLyoKKwkJICogUmVhZCAiU3RhdHVzIFJlZ2lzdGVyIiByZXBlYXRlZGx5IHVudGlsIHRoZSBMU0IgaXMgY2xlYXJlZC4KIAkJICogVGhlIEVFUFJPTSB3aWxsIHNpZ25hbCB0aGF0IHRoZSBjb21tYW5kIGhhcyBiZWVuIGNvbXBsZXRlZAogCQkgKiBieSBjbGVhcmluZyBiaXQgMCBvZiB0aGUgaW50ZXJuYWwgc3RhdHVzIHJlZ2lzdGVyLiAgSWYgaXQncwotCQkgKiBub3QgY2xlYXJlZCB3aXRoaW4gJ3RpbWVvdXQnLCB0aGVuIGVycm9yIG91dC4gKi8KKwkJICogbm90IGNsZWFyZWQgd2l0aGluICd0aW1lb3V0JywgdGhlbiBlcnJvciBvdXQuCisJCSAqLwogCQl3aGlsZSAodGltZW91dCkgewogCQkJZTEwMDBfc2hpZnRfb3V0X2VlY19iaXRzKGh3LCBOVk1fUkRTUl9PUENPREVfU1BJLAogCQkJCQkJIGh3LT5udm0ub3Bjb2RlX2JpdHMpOwpAQCAtMTg3Niw2MiArMTg5NSw2IEBACiB9CiAKIC8qKgotICogIGUxMDAwZV9yZWFkX252bV9zcGkgLSBSZWFkIEVFUFJPTSdzIHVzaW5nIFNQSQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKiAgQG9mZnNldDogb2Zmc2V0IG9mIHdvcmQgaW4gdGhlIEVFUFJPTSB0byByZWFkCi0gKiAgQHdvcmRzOiBudW1iZXIgb2Ygd29yZHMgdG8gcmVhZAotICogIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgRUVQUk9NCi0gKgotICogIFJlYWRzIGEgMTYgYml0IHdvcmQgZnJvbSB0aGUgRUVQUk9NLgotICoqLwotczMyIGUxMDAwZV9yZWFkX252bV9zcGkoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCi17Ci0Jc3RydWN0IGUxMDAwX252bV9pbmZvICpudm0gPSAmaHctPm52bTsKLQl1MzIgaSA9IDA7Ci0JczMyIHJldF92YWw7Ci0JdTE2IHdvcmRfaW47Ci0JdTggcmVhZF9vcGNvZGUgPSBOVk1fUkVBRF9PUENPREVfU1BJOwotCi0JLyogQSBjaGVjayBmb3IgaW52YWxpZCB2YWx1ZXM6ICBvZmZzZXQgdG9vIGxhcmdlLCB0b28gbWFueSB3b3JkcywKLQkgKiBhbmQgbm90IGVub3VnaCB3b3Jkcy4gKi8KLQlpZiAoKG9mZnNldCA+PSBudm0tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gKG52bS0+d29yZF9zaXplIC0gb2Zmc2V0KSkgfHwKLQkgICAgKHdvcmRzID09IDApKSB7Ci0JCWh3X2RiZyhodywgIm52bSBwYXJhbWV0ZXIocykgb3V0IG9mIGJvdW5kc1xuIik7Ci0JCXJldHVybiAtRTEwMDBfRVJSX05WTTsKLQl9Ci0KLQlyZXRfdmFsID0gbnZtLT5vcHMuYWNxdWlyZV9udm0oaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQotCXJldF92YWwgPSBlMTAwMF9yZWFkeV9udm1fZWVwcm9tKGh3KTsKLQlpZiAocmV0X3ZhbCkgewotCQludm0tPm9wcy5yZWxlYXNlX252bShodyk7Ci0JCXJldHVybiByZXRfdmFsOwotCX0KLQotCWUxMDAwX3N0YW5kYnlfbnZtKGh3KTsKLQotCWlmICgobnZtLT5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQotCQlyZWFkX29wY29kZSB8PSBOVk1fQThfT1BDT0RFX1NQSTsKLQotCS8qIFNlbmQgdGhlIFJFQUQgY29tbWFuZCAob3Bjb2RlICsgYWRkcikgKi8KLQllMTAwMF9zaGlmdF9vdXRfZWVjX2JpdHMoaHcsIHJlYWRfb3Bjb2RlLCBudm0tPm9wY29kZV9iaXRzKTsKLQllMTAwMF9zaGlmdF9vdXRfZWVjX2JpdHMoaHcsICh1MTYpKG9mZnNldCoyKSwgbnZtLT5hZGRyZXNzX2JpdHMpOwotCi0JLyogUmVhZCB0aGUgZGF0YS4gIFNQSSBOVk1zIGluY3JlbWVudCB0aGUgYWRkcmVzcyB3aXRoIGVhY2ggYnl0ZQotCSAqIHJlYWQgYW5kIHdpbGwgcm9sbCBvdmVyIGlmIHJlYWRpbmcgYmV5b25kIHRoZSBlbmQuICBUaGlzIGFsbG93cwotCSAqIHVzIHRvIHJlYWQgdGhlIHdob2xlIE5WTSBmcm9tIGFueSBvZmZzZXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgewotCQl3b3JkX2luID0gZTEwMDBfc2hpZnRfaW5fZWVjX2JpdHMoaHcsIDE2KTsKLQkJZGF0YVtpXSA9ICh3b3JkX2luID4+IDgpIHwgKHdvcmRfaW4gPDwgOCk7Ci0JfQotCi0JbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwotCXJldHVybiAwOwotfQotCi0vKioKICAqICBlMTAwMGVfcmVhZF9udm1fZWVyZCAtIFJlYWRzIEVFUFJPTSB1c2luZyBFRVJEIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiBvZmZzZXQgb2Ygd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKQEAgLTE5NDYsOCArMTkwOSwxMCBAQAogCXUzMiBpLCBlZXJkID0gMDsKIAlzMzIgcmV0X3ZhbCA9IDA7CiAKLQkvKiBBIGNoZWNrIGZvciBpbnZhbGlkIHZhbHVlczogIG9mZnNldCB0b28gbGFyZ2UsIHRvbyBtYW55IHdvcmRzLAotCSAqIGFuZCBub3QgZW5vdWdoIHdvcmRzLiAqLworCS8qCisJICogQSBjaGVjayBmb3IgaW52YWxpZCB2YWx1ZXM6ICBvZmZzZXQgdG9vIGxhcmdlLCB0b28gbWFueSB3b3JkcywKKwkgKiB0b28gbWFueSB3b3JkcyBmb3IgdGhlIG9mZnNldCwgYW5kIG5vdCBlbm91Z2ggd29yZHMuCisJICovCiAJaWYgKChvZmZzZXQgPj0gbnZtLT53b3JkX3NpemUpIHx8ICh3b3JkcyA+IChudm0tPndvcmRfc2l6ZSAtIG9mZnNldCkpIHx8CiAJICAgICh3b3JkcyA9PSAwKSkgewogCQlod19kYmcoaHcsICJudm0gcGFyYW1ldGVyKHMpIG91dCBvZiBib3VuZHNcbiIpOwpAQCAtMTk2Myw4ICsxOTI4LDcgQEAKIAkJaWYgKHJldF92YWwpCiAJCQlicmVhazsKIAotCQlkYXRhW2ldID0gKGVyMzIoRUVSRCkgPj4KLQkJCSAgIEUxMDAwX05WTV9SV19SRUdfREFUQSk7CisJCWRhdGFbaV0gPSAoZXIzMihFRVJEKSA+PiBFMTAwMF9OVk1fUldfUkVHX0RBVEEpOwogCX0KIAogCXJldHVybiByZXRfdmFsOwpAQCAtMTk4MCw3ICsxOTQ0LDcgQEAKICAqICBXcml0ZXMgZGF0YSB0byBFRVBST00gYXQgb2Zmc2V0IHVzaW5nIFNQSSBpbnRlcmZhY2UuCiAgKgogICogIElmIGUxMDAwZV91cGRhdGVfbnZtX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiAsIHRoZQotICogIEVFUFJPTSB3aWxsIG1vc3QgbGlrbGV5IGNvbnRhaW4gYW4gaW52YWxpZCBjaGVja3N1bS4KKyAqICBFRVBST00gd2lsbCBtb3N0IGxpa2VseSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCiAgKiovCiBzMzIgZTEwMDBlX3dyaXRlX252bV9zcGkoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCiB7CkBAIC0xOTg4LDggKzE5NTIsMTAgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgd2lkeCA9IDA7CiAKLQkvKiBBIGNoZWNrIGZvciBpbnZhbGlkIHZhbHVlczogIG9mZnNldCB0b28gbGFyZ2UsIHRvbyBtYW55IHdvcmRzLAotCSAqIGFuZCBub3QgZW5vdWdoIHdvcmRzLiAqLworCS8qCisJICogQSBjaGVjayBmb3IgaW52YWxpZCB2YWx1ZXM6ICBvZmZzZXQgdG9vIGxhcmdlLCB0b28gbWFueSB3b3JkcywKKwkgKiBhbmQgbm90IGVub3VnaCB3b3Jkcy4KKwkgKi8KIAlpZiAoKG9mZnNldCA+PSBudm0tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gKG52bS0+d29yZF9zaXplIC0gb2Zmc2V0KSkgfHwKIAkgICAgKHdvcmRzID09IDApKSB7CiAJCWh3X2RiZyhodywgIm52bSBwYXJhbWV0ZXIocykgb3V0IG9mIGJvdW5kc1xuIik7CkBAIC0yMDE5LDggKzE5ODUsMTAgQEAKIAogCQllMTAwMF9zdGFuZGJ5X252bShodyk7CiAKLQkJLyogU29tZSBTUEkgZWVwcm9tcyB1c2UgdGhlIDh0aCBhZGRyZXNzIGJpdCBlbWJlZGRlZCBpbiB0aGUKLQkJICogb3Bjb2RlICovCisJCS8qCisJCSAqIFNvbWUgU1BJIGVlcHJvbXMgdXNlIHRoZSA4dGggYWRkcmVzcyBiaXQgZW1iZWRkZWQgaW4gdGhlCisJCSAqIG9wY29kZQorCQkgKi8KIAkJaWYgKChudm0tPmFkZHJlc3NfYml0cyA9PSA4KSAmJiAob2Zmc2V0ID49IDEyOCkpCiAJCQl3cml0ZV9vcGNvZGUgfD0gTlZNX0E4X09QQ09ERV9TUEk7CiAKQEAgLTIwNjUsOSArMjAzMyw5IEBACiAJCS8qIENoZWNrIGZvciBhbiBhbHRlcm5hdGUgTUFDIGFkZHJlc3MuICBBbiBhbHRlcm5hdGUgTUFDCiAJCSAqIGFkZHJlc3MgY2FuIGJlIHNldHVwIGJ5IHByZS1ib290IHNvZnR3YXJlIGFuZCBtdXN0IGJlCiAJCSAqIHRyZWF0ZWQgbGlrZSBhIHBlcm1hbmVudCBhZGRyZXNzIGFuZCBtdXN0IG92ZXJyaWRlIHRoZQotCQkgKiBhY3R1YWwgcGVybWFuZW50IE1BQyBhZGRyZXNzLiAqLworCQkgKiBhY3R1YWwgcGVybWFuZW50IE1BQyBhZGRyZXNzLiovCiAJCXJldF92YWwgPSBlMTAwMF9yZWFkX252bShodywgTlZNX0FMVF9NQUNfQUREUl9QVFIsIDEsCi0JCQkJCQkmbWFjX2FkZHJfb2Zmc2V0KTsKKwkJCQkJICZtYWNfYWRkcl9vZmZzZXQpOwogCQlpZiAocmV0X3ZhbCkgewogCQkJaHdfZGJnKGh3LCAiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQkJcmV0dXJuIHJldF92YWw7CkBAIC0yMDgwLDcgKzIwNDgsNyBAQAogCQkJCW1hY19hZGRyX29mZnNldCArPSBFVEhfQUxFTi9zaXplb2YodTE2KTsKIAogCQkJLyogbWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBtYWMgYWRkcmVzcyBoZXJlCi0JCQkgKiBiZWZvcmUgdXNpbmcgaXQgKi8KKwkJCSogYmVmb3JlIHVzaW5nIGl0ICovCiAJCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIG1hY19hZGRyX29mZnNldCwgMSwKIAkJCQkJCSAmbnZtX2RhdGEpOwogCQkJaWYgKHJldF92YWwpIHsKQEAgLTIwOTIsNyArMjA2MCw3IEBACiAJCX0KIAogCQlpZiAobWFjX2FkZHJfb2Zmc2V0KQotCQkJaHctPmRldl9zcGVjLmU4MjU3MS5hbHRfbWFjX2FkZHJfaXNfcHJlc2VudCA9IDE7CisJCWh3LT5kZXZfc3BlYy5lODI1NzEuYWx0X21hY19hZGRyX2lzX3ByZXNlbnQgPSAxOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSArPSAyKSB7CkBAIC0yMjIyLDcgKzIxOTAsNyBAQAogICoKICAqICBSZXR1cm5zIEUxMDAwX3N1Y2Nlc3MgdXBvbiBzdWNjZXNzLCBlbHNlIEUxMDAwX0VSUl9IT1NUX0lOVEVSRkFDRV9DT01NQU5ECiAgKgotICogIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlIEhPU1QgSUYgaXMgZW5hYmxlZCBmb3IgY29tbWFuZCBvcGVyYXRvbgorICogIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlIEhPU1QgSUYgaXMgZW5hYmxlZCBmb3IgY29tbWFuZCBvcGVyYXRpb24KICAqICBhbmQgYWxzbyBjaGVja3Mgd2hldGhlciB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBjb21wbGV0ZWQuICBJdCBidXN5IHdhaXRzCiAgKiAgaW4gY2FzZSBvZiBwcmV2aW91cyBjb21tYW5kIGlzIG5vdCBjb21wbGV0ZWQuCiAgKiovCkBAIC0yMjU0LDcgKzIyMjIsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMGVfY2hlY2tfbW5nX21vZGUgLSBjaGVjayBtYW5hZ2FtZW50IG1vZGUKKyAqICBlMTAwMGVfY2hlY2tfbW5nX21vZGUgLSBjaGVjayBtYW5hZ2VtZW50IG1vZGUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBSZWFkcyB0aGUgZmlybXdhcmUgc2VtYXBob3JlIHJlZ2lzdGVyIGFuZCByZXR1cm5zIHRydWUgKD4wKSBpZgpAQCAtMjI2OCw3ICsyMjM2LDcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBlX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nIC0gRW5hYmxlIHBhY2tldCBmaWx0ZXJpbmcgb24gVFgKKyAqICBlMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcgLSBFbmFibGUgcGFja2V0IGZpbHRlcmluZyBvbiBUeAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIEVuYWJsZXMgcGFja2V0IGZpbHRlcmluZyBvbiB0cmFuc21pdCBwYWNrZXRzIGlmIG1hbmFnZWFiaWxpdHkgaXMgZW5hYmxlZApAQCAtMjI4OCw3ICsyMjU2LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogSWYgd2UgY2FuJ3QgcmVhZCBmcm9tIHRoZSBob3N0IGludGVyZmFjZSBmb3Igd2hhdGV2ZXIKKwkvKgorCSAqIElmIHdlIGNhbid0IHJlYWQgZnJvbSB0aGUgaG9zdCBpbnRlcmZhY2UgZm9yIHdoYXRldmVyCiAJICogcmVhc29uLCBkaXNhYmxlIGZpbHRlcmluZy4KIAkgKi8KIAlyZXRfdmFsID0gZTEwMDBfbW5nX2VuYWJsZV9ob3N0X2lmKGh3KTsKQEAgLTIzMDYsNyArMjI3NSw4IEBACiAJaGRyLT5jaGVja3N1bSA9IDA7CiAJY3N1bSA9IGUxMDAwX2NhbGN1bGF0ZV9jaGVja3N1bSgodTggKiloZHIsCiAJCQkJCUUxMDAwX01OR19ESENQX0NPT0tJRV9MRU5HVEgpOwotCS8qIElmIGVpdGhlciB0aGUgY2hlY2tzdW1zIG9yIHNpZ25hdHVyZSBkb24ndCBtYXRjaCwgdGhlbgorCS8qCisJICogSWYgZWl0aGVyIHRoZSBjaGVja3N1bXMgb3Igc2lnbmF0dXJlIGRvbid0IG1hdGNoLCB0aGVuCiAJICogdGhlIGNvb2tpZSBhcmVhIGlzbid0IGNvbnNpZGVyZWQgdmFsaWQsIGluIHdoaWNoIGNhc2Ugd2UKIAkgKiB0YWtlIHRoZSBzYWZlIHJvdXRlIG9mIGFzc3VtaW5nIFR4IGZpbHRlcmluZyBpcyBlbmFibGVkLgogCSAqLwpAQCAtMjM5OCw4ICsyMzY4LDEwIEBACiAJLyogQ2FsY3VsYXRlIGxlbmd0aCBpbiBEV09SRHMgKi8KIAlsZW5ndGggPj49IDI7CiAKLQkvKiBUaGUgZGV2aWNlIGRyaXZlciB3cml0ZXMgdGhlIHJlbGV2YW50IGNvbW1hbmQgYmxvY2sgaW50byB0aGUKLQkgKiByYW0gYXJlYS4gKi8KKwkvKgorCSAqIFRoZSBkZXZpY2UgZHJpdmVyIHdyaXRlcyB0aGUgcmVsZXZhbnQgY29tbWFuZCBibG9jayBpbnRvIHRoZQorCSAqIHJhbSBhcmVhLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKHUzMik7IGorKykgewogCQkJKih0bXAgKyBqKSA9ICpidWZwdHIrKzsKQEAgLTI1MDUsNyArMjQ3Nyw3IEBACiAJcmV0dXJuIHJldF92YWw7CiB9CiAKLXMzMiBlMTAwMGVfcmVhZF9wYXJ0X251bShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKnBhcnRfbnVtKQorczMyIGUxMDAwZV9yZWFkX3BiYV9udW0oc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICpwYmFfbnVtKQogewogCXMzMiByZXRfdmFsOwogCXUxNiBudm1fZGF0YTsKQEAgLTI1MTUsMTQgKzI0ODcsMTQgQEAKIAkJaHdfZGJnKGh3LCAiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9Ci0JKnBhcnRfbnVtID0gKHUzMikobnZtX2RhdGEgPDwgMTYpOworCSpwYmFfbnVtID0gKHUzMikobnZtX2RhdGEgPDwgMTYpOwogCiAJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBOVk1fUEJBX09GRlNFVF8xLCAxLCAmbnZtX2RhdGEpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZyhodywgIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJcmV0dXJuIHJldF92YWw7CiAJfQotCSpwYXJ0X251bSB8PSBudm1fZGF0YTsKKwkqcGJhX251bSB8PSBudm1fZGF0YTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IGY1OGYwMTcuLmM4ZGM0N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtODIsNyArODIsNyBAQAogfQogCiAvKioKLSAqIGUxMDAwX3JlY2VpdmVfc2tiIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSByeCBpbmRpY2F0aW9ucworICogZTEwMDBfcmVjZWl2ZV9za2IgLSBoZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIFJ4IGluZGljYXRpb25zCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqIEBzdGF0dXM6IGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkIGFzIHdyaXR0ZW4gYnkgaGFyZHdhcmUKICAqIEB2bGFuOiBkZXNjcmlwdG9yIHZsYW4gZmllbGQgYXMgd3JpdHRlbiBieSBoYXJkd2FyZSAobm8gbGUvYmUgY29udmVyc2lvbikKQEAgLTEzOCw4ICsxMzgsOSBAQAogCQkvKiBUQ1AgY2hlY2tzdW0gaXMgZ29vZCAqLwogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0gZWxzZSB7Ci0JCS8qIElQIGZyYWdtZW50IHdpdGggVURQIHBheWxvYWQgKi8KLQkJLyogSGFyZHdhcmUgY29tcGxlbWVudHMgdGhlIHBheWxvYWQgY2hlY2tzdW0sIHNvIHdlIHVuZG8gaXQKKwkJLyoKKwkJICogSVAgZnJhZ21lbnQgd2l0aCBVRFAgcGF5bG9hZAorCQkgKiBIYXJkd2FyZSBjb21wbGVtZW50cyB0aGUgcGF5bG9hZCBjaGVja3N1bSwgc28gd2UgdW5kbyBpdAogCQkgKiBhbmQgdGhlbiBwdXQgdGhlIHZhbHVlIGluIGhvc3Qgb3JkZXIgZm9yIGZ1cnRoZXIgc3RhY2sgdXNlLgogCQkgKi8KIAkJX19zdW0xNiBzdW0gPSAoX19mb3JjZSBfX3N1bTE2KWh0b25zKGNzdW0pOwpAQCAtMTgyLDcgKzE4Myw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCS8qIE1ha2UgYnVmZmVyIGFsaWdubWVudCAyIGJleW9uZCBhIDE2IGJ5dGUgYm91bmRhcnkKKwkJLyoKKwkJICogTWFrZSBidWZmZXIgYWxpZ25tZW50IDIgYmV5b25kIGEgMTYgYnl0ZSBib3VuZGFyeQogCQkgKiB0aGlzIHdpbGwgcmVzdWx0IGluIGEgMTYgYnl0ZSBhbGlnbmVkIElQIGhlYWRlciBhZnRlcgogCQkgKiB0aGUgMTQgYnl0ZSBNQUMgaGVhZGVyIGlzIHJlbW92ZWQKIAkJICovCkBAIC0yMTMsMTAgKzIxNSwxMiBAQAogCQlpZiAoaS0tID09IDApCiAJCQlpID0gKHJ4X3JpbmctPmNvdW50IC0gMSk7CiAKLQkJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkJLyoKKwkJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKIAkJICoga25vdyB0aGVyZSBhcmUgbmV3IGRlc2NyaXB0b3JzIHRvIGZldGNoLiAgKE9ubHkKIAkJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKLQkJICogc3VjaCBhcyBJQS02NCkuICovCisJCSAqIHN1Y2ggYXMgSUEtNjQpLgorCQkgKi8KIAkJd21iKCk7CiAJCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CiAJfQpAQCAtMjg1LDcgKzI4OSw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCS8qIE1ha2UgYnVmZmVyIGFsaWdubWVudCAyIGJleW9uZCBhIDE2IGJ5dGUgYm91bmRhcnkKKwkJLyoKKwkJICogTWFrZSBidWZmZXIgYWxpZ25tZW50IDIgYmV5b25kIGEgMTYgYnl0ZSBib3VuZGFyeQogCQkgKiB0aGlzIHdpbGwgcmVzdWx0IGluIGEgMTYgYnl0ZSBhbGlnbmVkIElQIGhlYWRlciBhZnRlcgogCQkgKiB0aGUgMTQgYnl0ZSBNQUMgaGVhZGVyIGlzIHJlbW92ZWQKIAkJICovCkBAIC0zMTksMTIgKzMyNCwxNSBAQAogCQlpZiAoIShpLS0pKQogCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOwogCi0JCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93CisJCS8qCisJCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93CiAJCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CiAJCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCi0JCSAqIHN1Y2ggYXMgSUEtNjQpLiAqLworCQkgKiBzdWNoIGFzIElBLTY0KS4KKwkJICovCiAJCXdtYigpOwotCQkvKiBIYXJkd2FyZSBpbmNyZW1lbnRzIGJ5IDE2IGJ5dGVzLCBidXQgcGFja2V0IHNwbGl0CisJCS8qCisJCSAqIEhhcmR3YXJlIGluY3JlbWVudHMgYnkgMTYgYnl0ZXMsIGJ1dCBwYWNrZXQgc3BsaXQKIAkJICogZGVzY3JpcHRvcnMgYXJlIDMyIGJ5dGVzLi4uc28gd2UgaW5jcmVtZW50IHRhaWwKIAkJICogdHdpY2UgYXMgbXVjaC4KIAkJICovCkBAIC00MDksOSArNDE3LDExIEBACiAJCXRvdGFsX3J4X2J5dGVzICs9IGxlbmd0aDsKIAkJdG90YWxfcnhfcGFja2V0cysrOwogCi0JCS8qIGNvZGUgYWRkZWQgZm9yIGNvcHlicmVhaywgdGhpcyBzaG91bGQgaW1wcm92ZQorCQkvKgorCQkgKiBjb2RlIGFkZGVkIGZvciBjb3B5YnJlYWssIHRoaXMgc2hvdWxkIGltcHJvdmUKIAkJICogcGVyZm9ybWFuY2UgZm9yIHNtYWxsIHBhY2tldHMgd2l0aCBsYXJnZSBhbW91bnRzCi0JCSAqIG9mIHJlYXNzZW1ibHkgYmVpbmcgZG9uZSBpbiB0aGUgc3RhY2sgKi8KKwkJICogb2YgcmVhc3NlbWJseSBiZWluZyBkb25lIGluIHRoZSBzdGFjaworCQkgKi8KIAkJaWYgKGxlbmd0aCA8IGNvcHlicmVhaykgewogCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPQogCQkJICAgIG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBsZW5ndGggKyBORVRfSVBfQUxJR04pOwpAQCAtNTgxLDE0ICs1OTEsMTUgQEAKIAl9CiAKIAlpZiAoYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcpIHsKLQkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQotCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCisJCS8qCisJCSAqIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKKwkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaQorCQkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSAwOwogCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS5kbWEgJiYKIAkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wCiAJCQkgICAgICAgKyAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCi0JCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmCi0JCQkgRTEwMDBfU1RBVFVTX1RYT0ZGKSkgeworCQkgICAgJiYgIShlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfVFhPRkYpKSB7CiAJCQllMTAwMF9wcmludF90eF9oYW5nKGFkYXB0ZXIpOwogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQl9CkBAIC02NzcsMjEgKzY4OCwyOCBAQAogCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAogCQl7Ci0JCS8qIHRoaXMgbG9va3MgdWdseSwgYnV0IGl0IHNlZW1zIGNvbXBpbGVyIGlzc3VlcyBtYWtlIGl0Ci0JCSAgIG1vcmUgZWZmaWNpZW50IHRoYW4gcmV1c2luZyBqICovCisJCS8qCisJCSAqIHRoaXMgbG9va3MgdWdseSwgYnV0IGl0IHNlZW1zIGNvbXBpbGVyIGlzc3VlcyBtYWtlIGl0CisJCSAqIG1vcmUgZWZmaWNpZW50IHRoYW4gcmV1c2luZyBqCisJCSAqLwogCQlpbnQgbDEgPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGhbMF0pOwogCi0JCS8qIHBhZ2UgYWxsb2MvcHV0IHRha2VzIHRvbyBsb25nIGFuZCBlZmZlY3RzIHNtYWxsIHBhY2tldAotCQkgKiB0aHJvdWdocHV0LCBzbyB1bnNwbGl0IHNtYWxsIHBhY2tldHMgYW5kIHNhdmUgdGhlIGFsbG9jL3B1dCovCisJCS8qCisJCSAqIHBhZ2UgYWxsb2MvcHV0IHRha2VzIHRvbyBsb25nIGFuZCBlZmZlY3RzIHNtYWxsIHBhY2tldAorCQkgKiB0aHJvdWdocHV0LCBzbyB1bnNwbGl0IHNtYWxsIHBhY2tldHMgYW5kIHNhdmUgdGhlIGFsbG9jL3B1dAorCQkgKiBvbmx5IHZhbGlkIGluIHNvZnRpcnEgKG5hcGkpIGNvbnRleHQgdG8gY2FsbCBrbWFwXyoKKwkJICovCiAJCWlmIChsMSAmJiAobDEgPD0gY29weWJyZWFrKSAmJgogCQkgICAgKChsZW5ndGggKyBsMSkgPD0gYWRhcHRlci0+cnhfcHNfYnNpemUwKSkgewogCQkJdTggKnZhZGRyOwogCiAJCQlwc19wYWdlID0gJmJ1ZmZlcl9pbmZvLT5wc19wYWdlc1swXTsKIAotCQkJLyogdGhlcmUgaXMgbm8gZG9jdW1lbnRhdGlvbiBhYm91dCBob3cgdG8gY2FsbAorCQkJLyoKKwkJCSAqIHRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gYWJvdXQgaG93IHRvIGNhbGwKIAkJCSAqIGttYXBfYXRvbWljLCBzbyB3ZSBjYW4ndCBob2xkIHRoZSBtYXBwaW5nCi0JCQkgKiB2ZXJ5IGxvbmcgKi8KKwkJCSAqIHZlcnkgbG9uZworCQkJICovCiAJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocGRldiwgcHNfcGFnZS0+ZG1hLAogCQkJCVBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXZhZGRyID0ga21hcF9hdG9taWMocHNfcGFnZS0+cGFnZSwgS01fU0tCX0RBVEFfU09GVElSUSk7CkBAIC04MzYsMjYgKzg1NCwzMSBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGljciA9IGVyMzIoSUNSKTsKIAotCS8qIHJlYWQgSUNSIGRpc2FibGVzIGludGVycnVwdHMgdXNpbmcgSUFNLCBzbyBrZWVwIHVwIHdpdGggb3VyCi0JICogZW5hYmxlL2Rpc2FibGUgYWNjb3VudGluZyAqLwotCWF0b21pY19pbmMoJmFkYXB0ZXItPmlycV9zZW0pOworCS8qCisJICogcmVhZCBJQ1IgZGlzYWJsZXMgaW50ZXJydXB0cyB1c2luZyBJQU0KKwkgKi8KIAogCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwotCQkvKiBJQ0g4IHdvcmthcm91bmQtLSBDYWxsIGdpZyBzcGVlZCBkcm9wIHdvcmthcm91bmQgb24gY2FibGUKLQkJICogZGlzY29ubmVjdCAoTFNDKSBiZWZvcmUgYWNjZXNzaW5nIGFueSBQSFkgcmVnaXN0ZXJzICovCisJCS8qCisJCSAqIElDSDggd29ya2Fyb3VuZC0tIENhbGwgZ2lnIHNwZWVkIGRyb3Agd29ya2Fyb3VuZCBvbiBjYWJsZQorCQkgKiBkaXNjb25uZWN0IChMU0MpIGJlZm9yZSBhY2Nlc3NpbmcgYW55IFBIWSByZWdpc3RlcnMKKwkJICovCiAJCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0xTQ19HSUdfU1BFRURfRFJPUCkgJiYKIAkJICAgICghKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSkpKQogCQkJZTEwMDBlX2dpZ19kb3duc2hpZnRfd29ya2Fyb3VuZF9pY2g4bGFuKGh3KTsKIAotCQkvKiA4MDAwM0VTMkxBTiB3b3JrYXJvdW5kLS0gRm9yIHBhY2tldCBidWZmZXIgd29yay1hcm91bmQgb24KKwkJLyoKKwkJICogODAwMDNFUzJMQU4gd29ya2Fyb3VuZC0tIEZvciBwYWNrZXQgYnVmZmVyIHdvcmstYXJvdW5kIG9uCiAJCSAqIGxpbmsgZG93biBldmVudDsgZGlzYWJsZSByZWNlaXZlcyBoZXJlIGluIHRoZSBJU1IgYW5kIHJlc2V0Ci0JCSAqIGFkYXB0ZXIgaW4gd2F0Y2hkb2cgKi8KKwkJICogYWRhcHRlciBpbiB3YXRjaGRvZworCQkgKi8KIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgogCQkgICAgYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1JYX05FRURTX1JFU1RBUlQpIHsKIAkJCS8qIGRpc2FibGUgcmVjZWl2ZXMgKi8KIAkJCXUzMiByY3RsID0gZXIzMihSQ1RMKTsKIAkJCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfUlhfUkVTVEFSVF9OT1c7CiAJCX0KIAkJLyogZ3VhcmQgYWdhaW5zdCBpbnRlcnJ1cHQgd2hlbiB3ZSdyZSBnb2luZyBkb3duICovCiAJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQpAQCAtODY4LDggKzg5MSw2IEBACiAJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7CiAJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSk7Ci0JfSBlbHNlIHsKLQkJYXRvbWljX2RlYygmYWRhcHRlci0+aXJxX3NlbSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtODkwLDI2ICs5MTEsMzEgQEAKIAlpZiAoIWljcikKIAkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KIAotCS8qIElNUyB3aWxsIG5vdCBhdXRvLW1hc2sgaWYgSU5UX0FTU0VSVEVEIGlzIG5vdCBzZXQsIGFuZCBpZiBpdCBpcwotCSAqIG5vdCBzZXQsIHRoZW4gdGhlIGFkYXB0ZXIgZGlkbid0IHNlbmQgYW4gaW50ZXJydXB0ICovCisJLyoKKwkgKiBJTVMgd2lsbCBub3QgYXV0by1tYXNrIGlmIElOVF9BU1NFUlRFRCBpcyBub3Qgc2V0LCBhbmQgaWYgaXQgaXMKKwkgKiBub3Qgc2V0LCB0aGVuIHRoZSBhZGFwdGVyIGRpZG4ndCBzZW5kIGFuIGludGVycnVwdAorCSAqLwogCWlmICghKGljciAmIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQkvKiBJbnRlcnJ1cHQgQXV0by1NYXNrLi4udXBvbiByZWFkaW5nIElDUiwKKwkvKgorCSAqIEludGVycnVwdCBBdXRvLU1hc2suLi51cG9uIHJlYWRpbmcgSUNSLAogCSAqIGludGVycnVwdHMgYXJlIG1hc2tlZC4gIE5vIG5lZWQgZm9yIHRoZQotCSAqIElNQyB3cml0ZSwgYnV0IGl0IGRvZXMgbWVhbiB3ZSBzaG91bGQKLQkgKiBhY2NvdW50IGZvciBpdCBBU0FQLiAqLwotCWF0b21pY19pbmMoJmFkYXB0ZXItPmlycV9zZW0pOworCSAqIElNQyB3cml0ZQorCSAqLwogCiAJaWYgKGljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgewogCQlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7Ci0JCS8qIElDSDggd29ya2Fyb3VuZC0tIENhbGwgZ2lnIHNwZWVkIGRyb3Agd29ya2Fyb3VuZCBvbiBjYWJsZQotCQkgKiBkaXNjb25uZWN0IChMU0MpIGJlZm9yZSBhY2Nlc3NpbmcgYW55IFBIWSByZWdpc3RlcnMgKi8KKwkJLyoKKwkJICogSUNIOCB3b3JrYXJvdW5kLS0gQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIGNhYmxlCisJCSAqIGRpc2Nvbm5lY3QgKExTQykgYmVmb3JlIGFjY2Vzc2luZyBhbnkgUEhZIHJlZ2lzdGVycworCQkgKi8KIAkJaWYgKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfTFNDX0dJR19TUEVFRF9EUk9QKSAmJgogCQkgICAgKCEoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKSkpCiAJCQllMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oaHcpOwogCi0JCS8qIDgwMDAzRVMyTEFOIHdvcmthcm91bmQtLQorCQkvKgorCQkgKiA4MDAwM0VTMkxBTiB3b3JrYXJvdW5kLS0KIAkJICogRm9yIHBhY2tldCBidWZmZXIgd29yay1hcm91bmQgb24gbGluayBkb3duIGV2ZW50OwogCQkgKiBkaXNhYmxlIHJlY2VpdmVzIGhlcmUgaW4gdGhlIElTUiBhbmQKIAkJICogcmVzZXQgYWRhcHRlciBpbiB3YXRjaGRvZwpAQCAtOTE5LDYgKzk0NSw3IEBACiAJCQkvKiBkaXNhYmxlIHJlY2VpdmVzICovCiAJCQlyY3RsID0gZXIzMihSQ1RMKTsKIAkJCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfUlhfUkVTVEFSVF9OT1c7CiAJCX0KIAkJLyogZ3VhcmQgYWdhaW5zdCBpbnRlcnJ1cHQgd2hlbiB3ZSdyZSBnb2luZyBkb3duICovCiAJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQpAQCAtOTMxLDggKzk1OCw2IEBACiAJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7CiAJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSk7Ci0JfSBlbHNlIHsKLQkJYXRvbWljX2RlYygmYWRhcHRlci0+aXJxX3NlbSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtOTgzLDcgKzEwMDgsNiBAQAogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKIAlldzMyKElNQywgfjApOwogCWUxZV9mbHVzaCgpOwogCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOwpAQCAtOTk2LDE3ICsxMDIwLDE1IEBACiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhZGFwdGVyLT5pcnFfc2VtKSkgewotCQlldzMyKElNUywgSU1TX0VOQUJMRV9NQVNLKTsKLQkJZTFlX2ZsdXNoKCk7Ci0JfQorCWV3MzIoSU1TLCBJTVNfRU5BQkxFX01BU0spOworCWUxZV9mbHVzaCgpOwogfQogCiAvKioKICAqIGUxMDAwX2dldF9od19jb250cm9sIC0gZ2V0IGNvbnRyb2wgb2YgdGhlIGgvdyBmcm9tIGYvdwogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCi0gKiBlMTAwMF9nZXRfaHdfY29udHJvbCBzZXRzIHtDVFJMX0VYVHxGV1NNfTpEUlZfTE9BRCBiaXQuCisgKiBlMTAwMF9nZXRfaHdfY29udHJvbCBzZXRzIHtDVFJMX0VYVHxTV1NNfTpEUlZfTE9BRCBiaXQuCiAgKiBGb3IgQVNGIGFuZCBQYXNzIFRocm91Z2ggdmVyc2lvbnMgb2YgZi93IHRoaXMgbWVhbnMgdGhhdAogICogdGhlIGRyaXZlciBpcyBsb2FkZWQuIEZvciBBTVQgdmVyc2lvbiAob25seSB3aXRoIDgyNTczKQogICogb2YgdGhlIGYvdyB0aGlzIG1lYW5zIHRoYXQgdGhlIG5ldHdvcmsgaS9mIGlzIG9wZW4uCkBAIC0xMDIzLDggKzEwNDUsNyBAQAogCQlldzMyKFNXU00sIHN3c20gfCBFMTAwMF9TV1NNX0RSVl9MT0FEKTsKIAl9IGVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQ1RSTEVYVF9PTl9MT0FEKSB7CiAJCWN0cmxfZXh0ID0gZXIzMihDVFJMX0VYVCk7Ci0JCWV3MzIoQ1RSTF9FWFQsCi0JCQkJY3RybF9leHQgfCBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRCk7CisJCWV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0IHwgRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQpOwogCX0KIH0KIApAQCAtMTAzMiw3ICsxMDUzLDcgQEAKICAqIGUxMDAwX3JlbGVhc2VfaHdfY29udHJvbCAtIHJlbGVhc2UgY29udHJvbCBvZiB0aGUgaC93IHRvIGYvdwogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCi0gKiBlMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2wgcmVzZXRzIHtDVFJMX0VYVHxGV1NNfTpEUlZfTE9BRCBiaXQuCisgKiBlMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2wgcmVzZXRzIHtDVFJMX0VYVHxTV1NNfTpEUlZfTE9BRCBiaXQuCiAgKiBGb3IgQVNGIGFuZCBQYXNzIFRocm91Z2ggdmVyc2lvbnMgb2YgZi93IHRoaXMgbWVhbnMgdGhhdCB0aGUKICAqIGRyaXZlciBpcyBubyBsb25nZXIgbG9hZGVkLiBGb3IgQU1UIHZlcnNpb24gKG9ubHkgd2l0aCA4MjU3MykgaQogICogb2YgdGhlIGYvdyB0aGlzIG1lYW5zIHRoYXQgdGhlIG5ldHdvcmsgaS9mIGlzIGNsb3NlZC4KQEAgLTEwNTAsMjUgKzEwNzEsNyBAQAogCQlldzMyKFNXU00sIHN3c20gJiB+RTEwMDBfU1dTTV9EUlZfTE9BRCk7CiAJfSBlbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCkgewogCQljdHJsX2V4dCA9IGVyMzIoQ1RSTF9FWFQpOwotCQlldzMyKENUUkxfRVhULAotCQkJCWN0cmxfZXh0ICYgfkUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2VfbWFuYWdlYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX01OR19QVF9FTkFCTEVEKSB7Ci0JCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0KLQkJdTMyIG1hbmMgPSBlcjMyKE1BTkMpOwotCi0JCS8qIHJlLWVuYWJsZSBoYXJkd2FyZSBpbnRlcmNlcHRpb24gb2YgQVJQICovCi0JCW1hbmMgfD0gRTEwMDBfTUFOQ19BUlBfRU47Ci0JCW1hbmMgJj0gfkUxMDAwX01BTkNfRU5fTU5HMkhPU1Q7Ci0KLQkJLyogZG9uJ3QgZXhwbGljaXRseSBoYXZlIHRvIG1lc3Mgd2l0aCBNQU5DMkggc2luY2UKLQkJICogTUFOQyBoYXMgYW4gZW5hYmxlIGRpc2FibGUgdGhhdCBnYXRlcyBNQU5DMkggKi8KLQkJZXczMihNQU5DLCBtYW5jKTsKKwkJZXczMihDVFJMX0VYVCwgY3RybF9leHQgJiB+RTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQpOwogCX0KIH0KIApAQCAtMTI1OCw2ICsxMjYxLDExIEBACiAKIC8qKgogICogZTEwMDBfdXBkYXRlX2l0ciAtIHVwZGF0ZSB0aGUgZHluYW1pYyBJVFIgdmFsdWUgYmFzZWQgb24gc3RhdGlzdGljcworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlcgorICogQGl0cl9zZXR0aW5nOiBjdXJyZW50IGFkYXB0ZXItPml0cgorICogQHBhY2tldHM6IHRoZSBudW1iZXIgb2YgcGFja2V0cyBkdXJpbmcgdGhpcyBtZWFzdXJlbWVudCBpbnRlcnZhbAorICogQGJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGR1cmluZyB0aGlzIG1lYXN1cmVtZW50IGludGVydmFsCisgKgogICogICAgICBTdG9yZXMgYSBuZXcgSVRSIHZhbHVlIGJhc2VkIG9uIHBhY2tldHMgYW5kIGJ5dGUKICAqICAgICAgY291bnRzIGR1cmluZyB0aGUgbGFzdCBpbnRlcnJ1cHQuICBUaGUgYWR2YW50YWdlIG9mIHBlciBpbnRlcnJ1cHQKICAqICAgICAgY29tcHV0YXRpb24gaXMgZmFzdGVyIHVwZGF0ZXMgYW5kIG1vcmUgYWNjdXJhdGUgSVRSIGZvciB0aGUgY3VycmVudApAQCAtMTI2NywxMCArMTI3NSw2IEBACiAgKiAgICAgIHdoaWxlIGluY3JlYXNpbmcgYnVsayB0aHJvdWdocHV0LgogICogICAgICB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIG1vZHVsZQogICogICAgICBwYXJhbWV0ZXIgKHNlZSBlMTAwMF9wYXJhbS5jKQotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlcgotICogQGl0cl9zZXR0aW5nOiBjdXJyZW50IGFkYXB0ZXItPml0cgotICogQHBhY2tldHM6IHRoZSBudW1iZXIgb2YgcGFja2V0cyBkdXJpbmcgdGhpcyBtZWFzdXJlbWVudCBpbnRlcnZhbAotICogQGJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGR1cmluZyB0aGlzIG1lYXN1cmVtZW50IGludGVydmFsCiAgKiovCiBzdGF0aWMgdW5zaWduZWQgaW50IGUxMDAwX3VwZGF0ZV9pdHIoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJICAgICB1MTYgaXRyX3NldHRpbmcsIGludCBwYWNrZXRzLApAQCAtMTM2OSw5ICsxMzczLDExIEBACiAKIHNldF9pdHJfbm93OgogCWlmIChuZXdfaXRyICE9IGFkYXB0ZXItPml0cikgewotCQkvKiB0aGlzIGF0dGVtcHRzIHRvIGJpYXMgdGhlIGludGVycnVwdCByYXRlIHRvd2FyZHMgQnVsaworCQkvKgorCQkgKiB0aGlzIGF0dGVtcHRzIHRvIGJpYXMgdGhlIGludGVycnVwdCByYXRlIHRvd2FyZHMgQnVsawogCQkgKiBieSBhZGRpbmcgaW50ZXJtZWRpYXRlIHN0ZXBzIHdoZW4gaW50ZXJydXB0IHJhdGUgaXMKLQkJICogaW5jcmVhc2luZyAqLworCQkgKiBpbmNyZWFzaW5nCisJCSAqLwogCQluZXdfaXRyID0gbmV3X2l0ciA+IGFkYXB0ZXItPml0ciA/CiAJCQkgICAgIG1pbihhZGFwdGVyLT5pdHIgKyAobmV3X2l0ciA+PiAyKSwgbmV3X2l0cikgOgogCQkJICAgICBuZXdfaXRyOwpAQCAtMTM4Miw3ICsxMzg4LDggQEAKIAogLyoqCiAgKiBlMTAwMF9jbGVhbiAtIE5BUEkgUnggcG9sbGluZyBjYWxsYmFjawotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAbmFwaTogc3RydWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvbGxpbmcgY2FsbGJhY2sKKyAqIEBidWRnZXQ6IGFtb3VudCBvZiBwYWNrZXRzIGRyaXZlciBpcyBhbGxvd2VkIHRvIHByb2Nlc3MgdGhpcyBwb2xsCiAgKiovCiBzdGF0aWMgaW50IGUxMDAwX2NsZWFuKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKQEAgLTEzOTMsMTAgKzE0MDAsMTIgQEAKIAkvKiBNdXN0IE5PVCB1c2UgbmV0ZGV2X3ByaXYgbWFjcm8gaGVyZS4gKi8KIAlhZGFwdGVyID0gcG9sbF9kZXYtPnByaXY7CiAKLQkvKiBlMTAwMF9jbGVhbiBpcyBjYWxsZWQgcGVyLWNwdS4gIFRoaXMgbG9jayBwcm90ZWN0cworCS8qCisJICogZTEwMDBfY2xlYW4gaXMgY2FsbGVkIHBlci1jcHUuICBUaGlzIGxvY2sgcHJvdGVjdHMKIAkgKiB0eF9yaW5nIGZyb20gYmVpbmcgY2xlYW5lZCBieSBtdWx0aXBsZSBjcHVzCiAJICogc2ltdWx0YW5lb3VzbHkuICBBIGZhaWx1cmUgb2J0YWluaW5nIHRoZSBsb2NrIG1lYW5zCi0JICogdHhfcmluZyBpcyBjdXJyZW50bHkgYmVpbmcgY2xlYW5lZCBhbnl3YXkuICovCisJICogdHhfcmluZyBpcyBjdXJyZW50bHkgYmVpbmcgY2xlYW5lZCBhbnl3YXkuCisJICovCiAJaWYgKHNwaW5fdHJ5bG9jaygmYWRhcHRlci0+dHhfcXVldWVfbG9jaykpIHsKIAkJdHhfY2xlYW5lZCA9IGUxMDAwX2NsZWFuX3R4X2lycShhZGFwdGVyKTsKIAkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwpAQCAtMTQ0Miw5ICsxNDUxLDEyIEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgdmZ0YSwgaW5kZXg7CiAKLQllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOwotCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisKKwlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAogCWlmICgoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgogCSAgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKSAmJgpAQCAtMTQ5NSw3ICsxNTA3LDggQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBjdHJsLCByY3RsOwogCi0JZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOwogCiAJaWYgKGdycCkgewpAQCAtMTUzMiw3ICsxNTQ1LDggQEAKIAkJfQogCX0KIAotCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKQEAgLTE1NjEsMTIgKzE1NzUsMTEgQEAKIAogCW1hbmMgPSBlcjMyKE1BTkMpOwogCi0JLyogZGlzYWJsZSBoYXJkd2FyZSBpbnRlcmNlcHRpb24gb2YgQVJQICovCi0JbWFuYyAmPSB+KEUxMDAwX01BTkNfQVJQX0VOKTsKLQotCS8qIGVuYWJsZSByZWNlaXZpbmcgbWFuYWdlbWVudCBwYWNrZXRzIHRvIHRoZSBob3N0LiB0aGlzIHdpbGwgcHJvYmFibHkKKwkvKgorCSAqIGVuYWJsZSByZWNlaXZpbmcgbWFuYWdlbWVudCBwYWNrZXRzIHRvIHRoZSBob3N0LiB0aGlzIHdpbGwgcHJvYmFibHkKIAkgKiBnZW5lcmF0ZSBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBtZXNzYWdlcyBmcm9tIHRoZSBob3N0IE9TLCBidXQKLQkgKiB0aGUgcGFja2V0cyB3aWxsIGJlIGhhbmRsZWQgb24gU01CVVMgKi8KKwkgKiB0aGUgcGFja2V0cyB3aWxsIGJlIGhhbmRsZWQgb24gU01CVVMKKwkgKi8KIAltYW5jIHw9IEUxMDAwX01BTkNfRU5fTU5HMkhPU1Q7CiAJbWFuYzJoID0gZXIzMihNQU5DMkgpOwogI2RlZmluZSBFMTAwMF9NTkcySE9TVF9QT1JUXzYyMyAoMSA8PCA1KQpAQCAtMTYxNiw3ICsxNjI5LDcgQEAKIAogCS8qIFNldCB0aGUgVHggSW50ZXJydXB0IERlbGF5IHJlZ2lzdGVyICovCiAJZXczMihUSURWLCBhZGFwdGVyLT50eF9pbnRfZGVsYXkpOwotCS8qIHR4IGlycSBtb2RlcmF0aW9uICovCisJLyogVHggaXJxIG1vZGVyYXRpb24gKi8KIAlldzMyKFRBRFYsIGFkYXB0ZXItPnR4X2Fic19pbnRfZGVsYXkpOwogCiAJLyogUHJvZ3JhbSB0aGUgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtMTYyNiwyMiArMTYzOSwyNCBAQAogCQkoRTEwMDBfQ09MTElTSU9OX1RIUkVTSE9MRCA8PCBFMTAwMF9DVF9TSElGVCk7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1RBUkNfU1BFRURfTU9ERV9CSVQpIHsKLQkJdGFyYyA9IGVyMzIoVEFSQzApOwotCQkvKiBzZXQgdGhlIHNwZWVkIG1vZGUgYml0LCB3ZSdsbCBjbGVhciBpdCBpZiB3ZSdyZSBub3QgYXQKLQkJICogZ2lnYWJpdCBsaW5rIGxhdGVyICovCisJCXRhcmMgPSBlcjMyKFRBUkMoMCkpOworCQkvKgorCQkgKiBzZXQgdGhlIHNwZWVkIG1vZGUgYml0LCB3ZSdsbCBjbGVhciBpdCBpZiB3ZSdyZSBub3QgYXQKKwkJICogZ2lnYWJpdCBsaW5rIGxhdGVyCisJCSAqLwogI2RlZmluZSBTUEVFRF9NT0RFX0JJVCAoMSA8PCAyMSkKIAkJdGFyYyB8PSBTUEVFRF9NT0RFX0JJVDsKLQkJZXczMihUQVJDMCwgdGFyYyk7CisJCWV3MzIoVEFSQygwKSwgdGFyYyk7CiAJfQogCiAJLyogZXJyYXRhOiBwcm9ncmFtIGJvdGggcXVldWVzIHRvIHVud2VpZ2h0ZWQgUlIgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1RBUkNfU0VUX0JJVF9aRVJPKSB7Ci0JCXRhcmMgPSBlcjMyKFRBUkMwKTsKKwkJdGFyYyA9IGVyMzIoVEFSQygwKSk7CiAJCXRhcmMgfD0gMTsKLQkJZXczMihUQVJDMCwgdGFyYyk7Ci0JCXRhcmMgPSBlcjMyKFRBUkMxKTsKKwkJZXczMihUQVJDKDApLCB0YXJjKTsKKwkJdGFyYyA9IGVyMzIoVEFSQygxKSk7CiAJCXRhcmMgfD0gMTsKLQkJZXczMihUQVJDMSwgdGFyYyk7CisJCWV3MzIoVEFSQygxKSwgdGFyYyk7CiAJfQogCiAJZTEwMDBlX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CkBAIC0xNjkwLDYgKzE3MDUsOSBAQAogCWVsc2UKIAkJcmN0bCB8PSBFMTAwMF9SQ1RMX0xQRTsKIAorCS8qIEVuYWJsZSBoYXJkd2FyZSBDUkMgZnJhbWUgc3RyaXBwaW5nICovCisJcmN0bCB8PSBFMTAwMF9SQ1RMX1NFQ1JDOworCiAJLyogU2V0dXAgYnVmZmVyIHNpemVzICovCiAJcmN0bCAmPSB+RTEwMDBfUkNUTF9TWl80MDk2OwogCXJjdGwgfD0gRTEwMDBfUkNUTF9CU0VYOwpAQCAtMTc0Niw4ICsxNzY0LDEwIEBACiAJCS8qIENvbmZpZ3VyZSBleHRyYSBwYWNrZXQtc3BsaXQgcmVnaXN0ZXJzICovCiAJCXJmY3RsID0gZXIzMihSRkNUTCk7CiAJCXJmY3RsIHw9IEUxMDAwX1JGQ1RMX0VYVEVOOwotCQkvKiBkaXNhYmxlIHBhY2tldCBzcGxpdCBzdXBwb3J0IGZvciBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLAotCQkgKiBiZWNhdXNlIHNvbWUgbWFsZm9ybWVkIElQdjYgaGVhZGVycyBjYW4gaGFuZyB0aGUgUlggKi8KKwkJLyoKKwkJICogZGlzYWJsZSBwYWNrZXQgc3BsaXQgc3VwcG9ydCBmb3IgSVB2NiBleHRlbnNpb24gaGVhZGVycywKKwkJICogYmVjYXVzZSBzb21lIG1hbGZvcm1lZCBJUHY2IGhlYWRlcnMgY2FuIGhhbmcgdGhlIFJ4CisJCSAqLwogCQlyZmN0bCB8PSAoRTEwMDBfUkZDVExfSVBWNl9FWF9ESVMgfAogCQkJICBFMTAwMF9SRkNUTF9ORVdfSVBWNl9FWFRfRElTKTsKIApAQCAtMTc1NSw5ICsxNzc1LDYgQEAKIAogCQkvKiBFbmFibGUgUGFja2V0IHNwbGl0IGRlc2NyaXB0b3JzICovCiAJCXJjdGwgfD0gRTEwMDBfUkNUTF9EVFlQX1BTOwotCQkKLQkJLyogRW5hYmxlIGhhcmR3YXJlIENSQyBmcmFtZSBzdHJpcHBpbmcgKi8KLQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NFQ1JDOwogCiAJCXBzcmN0bCB8PSBhZGFwdGVyLT5yeF9wc19ic2l6ZTAgPj4KIAkJCUUxMDAwX1BTUkNUTF9CU0laRTBfU0hJRlQ7CkBAIC0xNzc5LDYgKzE3OTYsOCBAQAogCX0KIAogCWV3MzIoUkNUTCwgcmN0bCk7CisJLyoganVzdCBzdGFydGVkIHRoZSByZWNlaXZlIHVuaXQsIG5vIG5lZWQgdG8gcmVzdGFydCAqLworCWFkYXB0ZXItPmZsYWdzICY9IH5GTEFHX1JYX1JFU1RBUlRfTk9XOwogfQogCiAvKioKQEAgLTE4MTksOCArMTgzOCw3IEBACiAJLyogaXJxIG1vZGVyYXRpb24gKi8KIAlldzMyKFJBRFYsIGFkYXB0ZXItPnJ4X2Fic19pbnRfZGVsYXkpOwogCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAhPSAwKQotCQlldzMyKElUUiwKLQkJCTEwMDAwMDAwMDAgLyAoYWRhcHRlci0+aXRyICogMjU2KSk7CisJCWV3MzIoSVRSLCAxMDAwMDAwMDAwIC8gKGFkYXB0ZXItPml0ciAqIDI1NikpOwogCiAJY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKIAkvKiBSZXNldCBkZWxheSB0aW1lcnMgYWZ0ZXIgZXZlcnkgaW50ZXJydXB0ICovCkBAIC0xODMxLDggKzE4NDksMTAgQEAKIAlldzMyKENUUkxfRVhULCBjdHJsX2V4dCk7CiAJZTFlX2ZsdXNoKCk7CiAKLQkvKiBTZXR1cCB0aGUgSFcgUnggSGVhZCBhbmQgVGFpbCBEZXNjcmlwdG9yIFBvaW50ZXJzIGFuZAotCSAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZyAqLworCS8qCisJICogU2V0dXAgdGhlIEhXIFJ4IEhlYWQgYW5kIFRhaWwgRGVzY3JpcHRvciBQb2ludGVycyBhbmQKKwkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcKKwkgKi8KIAlyZGJhID0gcnhfcmluZy0+ZG1hOwogCWV3MzIoUkRCQUwsIChyZGJhICYgRE1BXzMyQklUX01BU0spKTsKIAlldzMyKFJEQkFILCAocmRiYSA+PiAzMikpOwpAQCAtMTg0Nyw4ICsxODY3LDEwIEBACiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19SWF9DU1VNX0VOQUJMRUQpIHsKIAkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9UVU9GTDsKIAotCQkvKiBJUHY0IHBheWxvYWQgY2hlY2tzdW0gZm9yIFVEUCBmcmFnbWVudHMgbXVzdCBiZQotCQkgKiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggcGFja2V0LXNwbGl0LiAqLworCQkvKgorCQkgKiBJUHY0IHBheWxvYWQgY2hlY2tzdW0gZm9yIFVEUCBmcmFnbWVudHMgbXVzdCBiZQorCQkgKiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggcGFja2V0LXNwbGl0LgorCQkgKi8KIAkJaWYgKGFkYXB0ZXItPnJ4X3BzX3BhZ2VzKQogCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9JUFBDU0U7CiAJfSBlbHNlIHsKQEAgLTE4NTcsOSArMTg3OSwxMSBAQAogCX0KIAlldzMyKFJYQ1NVTSwgcnhjc3VtKTsKIAotCS8qIEVuYWJsZSBlYXJseSByZWNlaXZlcyBvbiBzdXBwb3J0ZWQgZGV2aWNlcywgb25seSB0YWtlcyBlZmZlY3Qgd2hlbgorCS8qCisJICogRW5hYmxlIGVhcmx5IHJlY2VpdmVzIG9uIHN1cHBvcnRlZCBkZXZpY2VzLCBvbmx5IHRha2VzIGVmZmVjdCB3aGVuCiAJICogcGFja2V0IHNpemUgaXMgZXF1YWwgb3IgbGFyZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCB2YWx1ZSAoaW4gOCBieXRlCi0JICogdW5pdHMpLCBlLmcuIHVzaW5nIGp1bWJvIGZyYW1lcyB3aGVuIHNldHRpbmcgdG8gRTEwMDBfRVJUXzIwNDggKi8KKwkgKiB1bml0cyksIGUuZy4gdXNpbmcganVtYm8gZnJhbWVzIHdoZW4gc2V0dGluZyB0byBFMTAwMF9FUlRfMjA0OAorCSAqLwogCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19FUlQpICYmCiAJICAgIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikpCiAJCWV3MzIoRVJULCBFMTAwMF9FUlRfMjA0OCk7CkBAIC0xODY5LDcgKzE4OTMsNyBAQAogfQogCiAvKioKLSAqICBlMTAwMF9tY19hZGRyX2xpc3RfdXBkYXRlIC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKKyAqICBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0IC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQogICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCkBAIC0xODgzLDExICsxOTA3LDExIEBACiAgKiAgZXhpc3RzIGFuZCBhbGwgaW1wbGVtZW50YXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBnZW5lcmljIHZlcnNpb24gb2YgdGhpcwogICogIGZ1bmN0aW9uLgogICoqLwotc3RhdGljIHZvaWQgZTEwMDBfbWNfYWRkcl9saXN0X3VwZGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqbWNfYWRkcl9saXN0LAotCQkJICAgICAgIHUzMiBtY19hZGRyX2NvdW50LCB1MzIgcmFyX3VzZWRfY291bnQsCi0JCQkgICAgICAgdTMyIHJhcl9jb3VudCkKK3N0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKm1jX2FkZHJfbGlzdCwKKwkJCQkgICAgICB1MzIgbWNfYWRkcl9jb3VudCwgdTMyIHJhcl91c2VkX2NvdW50LAorCQkJCSAgICAgIHUzMiByYXJfY291bnQpCiB7Ci0JaHctPm1hYy5vcHMubWNfYWRkcl9saXN0X3VwZGF0ZShodywgbWNfYWRkcl9saXN0LCBtY19hZGRyX2NvdW50LAorCWh3LT5tYWMub3BzLnVwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG1jX2FkZHJfbGlzdCwgbWNfYWRkcl9jb3VudCwKIAkJCQkgICAgICAgIHJhcl91c2VkX2NvdW50LCByYXJfY291bnQpOwogfQogCkBAIC0xOTQxLDcgKzE5NjUsNyBAQAogCQkJbWNfcHRyID0gbWNfcHRyLT5uZXh0OwogCQl9CiAKLQkJZTEwMDBfbWNfYWRkcl9saXN0X3VwZGF0ZShodywgbXRhX2xpc3QsIGksIDEsCisJCWUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG10YV9saXN0LCBpLCAxLAogCQkJCQkgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKIAkJa2ZyZWUobXRhX2xpc3QpOwogCX0gZWxzZSB7CkBAIC0xOTQ5LDEzICsxOTczLDEyIEBACiAJCSAqIGlmIHdlJ3JlIGNhbGxlZCBmcm9tIHByb2JlLCB3ZSBtaWdodCBub3QgaGF2ZQogCQkgKiBhbnl0aGluZyB0byBkbyBoZXJlLCBzbyBjbGVhciBvdXQgdGhlIGxpc3QKIAkJICovCi0JCWUxMDAwX21jX2FkZHJfbGlzdF91cGRhdGUoaHcsIE5VTEwsIDAsIDEsCi0JCQkJCSAgbWFjLT5yYXJfZW50cnlfY291bnQpOworCQllMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBOVUxMLCAwLCAxLCBtYWMtPnJhcl9lbnRyeV9jb3VudCk7CiAJfQogfQogCiAvKioKLSAqIGUxMDAwX2NvbmZpZ3VyZSAtIGNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUgZm9yIFJYIGFuZCBUWAorICogZTEwMDBfY29uZmlndXJlIC0gY29uZmlndXJlIHRoZSBoYXJkd2FyZSBmb3IgUnggYW5kIFR4CiAgKiBAYWRhcHRlcjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmUKICAqKi8KIHN0YXRpYyB2b2lkIGUxMDAwX2NvbmZpZ3VyZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKQEAgLTE5NjgsOCArMTk5MSw3IEBACiAJZTEwMDBfY29uZmlndXJlX3R4KGFkYXB0ZXIpOwogCWUxMDAwX3NldHVwX3JjdGwoYWRhcHRlcik7CiAJZTEwMDBfY29uZmlndXJlX3J4KGFkYXB0ZXIpOwotCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZihhZGFwdGVyLAotCQkJICAgICAgZTEwMDBfZGVzY191bnVzZWQoYWRhcHRlci0+cnhfcmluZykpOworCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZihhZGFwdGVyLCBlMTAwMF9kZXNjX3VudXNlZChhZGFwdGVyLT5yeF9yaW5nKSk7CiB9CiAKIC8qKgpAQCAtMTk4NSw5ICsyMDA3LDExIEBACiAJdTE2IG1paV9yZWcgPSAwOwogCiAJLyogSnVzdCBjbGVhciB0aGUgcG93ZXIgZG93biBiaXQgdG8gd2FrZSB0aGUgcGh5IGJhY2sgdXAgKi8KLQlpZiAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewotCQkvKiBhY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCwgdGhlIHBoeSB3aWxsIHJldGFpbiBpdHMKLQkJICogc2V0dGluZ3MgYWNyb3NzIGEgcG93ZXItZG93bi91cCBjeWNsZSAqLworCWlmIChhZGFwdGVyLT5ody5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCQkvKgorCQkgKiBBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbCwgdGhlIHBoeSB3aWxsIHJldGFpbiBpdHMKKwkJICogc2V0dGluZ3MgYWNyb3NzIGEgcG93ZXItZG93bi91cCBjeWNsZQorCQkgKi8KIAkJZTFlX3JwaHkoJmFkYXB0ZXItPmh3LCBQSFlfQ09OVFJPTCwgJm1paV9yZWcpOwogCQltaWlfcmVnICY9IH5NSUlfQ1JfUE9XRVJfRE9XTjsKIAkJZTFlX3dwaHkoJmFkYXB0ZXItPmh3LCBQSFlfQ09OVFJPTCwgbWlpX3JlZyk7CkBAIC0yMDA4LDE5ICsyMDMyLDE4IEBACiAJdTE2IG1paV9yZWc7CiAKIAkvKiBXb0wgaXMgZW5hYmxlZCAqLwotCWlmICghYWRhcHRlci0+d29sKQorCWlmIChhZGFwdGVyLT53b2wpCiAJCXJldHVybjsKIAogCS8qIG5vbi1jb3BwZXIgUEhZPyAqLwotCWlmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQorCWlmIChhZGFwdGVyLT5ody5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKIAkJcmV0dXJuOwogCiAJLyogcmVzZXQgaXMgYmxvY2tlZCBiZWNhdXNlIG9mIGEgU29ML0lERVIgc2Vzc2lvbiAqLwotCWlmIChlMTAwMGVfY2hlY2tfbW5nX21vZGUoaHcpIHx8Ci0JICAgIGUxMDAwX2NoZWNrX3Jlc2V0X2Jsb2NrKGh3KSkKKwlpZiAoZTEwMDBlX2NoZWNrX21uZ19tb2RlKGh3KSB8fCBlMTAwMF9jaGVja19yZXNldF9ibG9jayhodykpCiAJCXJldHVybjsKIAotCS8qIG1hbmFnZWJpbGl0eSAoQU1UKSBpcyBlbmFibGVkICovCisJLyogbWFuYWdlYWJpbGl0eSAoQU1UKSBpcyBlbmFibGVkICovCiAJaWYgKGVyMzIoTUFOQykgJiBFMTAwMF9NQU5DX1NNQlVTX0VOKQogCQlyZXR1cm47CiAKQEAgLTIwMzcsNTEgKzIwNjAsNjEgQEAKICAqIFRoaXMgZnVuY3Rpb24gYm9vdHMgdGhlIGhhcmR3YXJlIGFuZCBlbmFibGVzIHNvbWUgc2V0dGluZ3MgdGhhdAogICogcmVxdWlyZSBhIGNvbmZpZ3VyYXRpb24gY3ljbGUgb2YgdGhlIGhhcmR3YXJlIC0gdGhvc2UgY2Fubm90IGJlCiAgKiBzZXQvY2hhbmdlZCBkdXJpbmcgcnVudGltZS4gQWZ0ZXIgcmVzZXQgdGhlIGRldmljZSBuZWVkcyB0byBiZQotICogcHJvcGVybHkgY29uZmlndXJlZCBmb3IgcngsIHR4IGV0Yy4KKyAqIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIFJ4LCBUeCBldGMuCiAgKi8KIHZvaWQgZTEwMDBlX3Jlc2V0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmFkYXB0ZXItPmh3Lm1hYzsKKwlzdHJ1Y3QgZTEwMDBfZmNfaW5mbyAqZmMgPSAmYWRhcHRlci0+aHcuZmM7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgdHhfc3BhY2UsIG1pbl90eF9zcGFjZSwgbWluX3J4X3NwYWNlOwotCXUzMiBwYmE7CisJdTMyIHBiYSA9IGFkYXB0ZXItPnBiYTsKIAl1MTYgaHdtOwogCi0JZXczMihQQkEsIGFkYXB0ZXItPnBiYSk7CisJLyogcmVzZXQgUGFja2V0IEJ1ZmZlciBBbGxvY2F0aW9uIHRvIGRlZmF1bHQgKi8KKwlldzMyKFBCQSwgcGJhKTsKIAotCWlmIChtYWMtPm1heF9mcmFtZV9zaXplID4gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOICkgewotCQkvKiBUbyBtYWludGFpbiB3aXJlIHNwZWVkIHRyYW5zbWl0cywgdGhlIFR4IEZJRk8gc2hvdWxkIGJlCisJaWYgKGFkYXB0ZXItPm1heF9mcmFtZV9zaXplID4gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSB7CisJCS8qCisJCSAqIFRvIG1haW50YWluIHdpcmUgc3BlZWQgdHJhbnNtaXRzLCB0aGUgVHggRklGTyBzaG91bGQgYmUKIAkJICogbGFyZ2UgZW5vdWdoIHRvIGFjY29tbW9kYXRlIHR3byBmdWxsIHRyYW5zbWl0IHBhY2tldHMsCiAJCSAqIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgMUtCIGFuZCBleHByZXNzZWQgaW4gS0IuICBMaWtld2lzZSwKIAkJICogdGhlIFJ4IEZJRk8gc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBhY2NvbW1vZGF0ZSBhdCBsZWFzdAogCQkgKiBvbmUgZnVsbCByZWNlaXZlIHBhY2tldCBhbmQgaXMgc2ltaWxhcmx5IHJvdW5kZWQgdXAgYW5kCi0JCSAqIGV4cHJlc3NlZCBpbiBLQi4gKi8KKwkJICogZXhwcmVzc2VkIGluIEtCLgorCQkgKi8KIAkJcGJhID0gZXIzMihQQkEpOwogCQkvKiB1cHBlciAxNiBiaXRzIGhhcyBUeCBwYWNrZXQgYnVmZmVyIGFsbG9jYXRpb24gc2l6ZSBpbiBLQiAqLwogCQl0eF9zcGFjZSA9IHBiYSA+PiAxNjsKIAkJLyogbG93ZXIgMTYgYml0cyBoYXMgUnggcGFja2V0IGJ1ZmZlciBhbGxvY2F0aW9uIHNpemUgaW4gS0IgKi8KIAkJcGJhICY9IDB4ZmZmZjsKLQkJLyogdGhlIHR4IGZpZm8gYWxzbyBzdG9yZXMgMTYgYnl0ZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR4Ci0JCSAqIGJ1dCBkb24ndCBpbmNsdWRlIGV0aGVybmV0IEZDUyBiZWNhdXNlIGhhcmR3YXJlIGFwcGVuZHMgaXQgKi8KLQkJbWluX3R4X3NwYWNlID0gKG1hYy0+bWF4X2ZyYW1lX3NpemUgKworCQkvKgorCQkgKiB0aGUgVHggZmlmbyBhbHNvIHN0b3JlcyAxNiBieXRlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHgKKwkJICogYnV0IGRvbid0IGluY2x1ZGUgZXRoZXJuZXQgRkNTIGJlY2F1c2UgaGFyZHdhcmUgYXBwZW5kcyBpdAorCQkgKi8KKwkJbWluX3R4X3NwYWNlID0gKGFkYXB0ZXItPm1heF9mcmFtZV9zaXplICsKIAkJCQlzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpIC0KIAkJCQlFVEhfRkNTX0xFTikgKiAyOwogCQltaW5fdHhfc3BhY2UgPSBBTElHTihtaW5fdHhfc3BhY2UsIDEwMjQpOwogCQltaW5fdHhfc3BhY2UgPj49IDEwOwogCQkvKiBzb2Z0d2FyZSBzdHJpcHMgcmVjZWl2ZSBDUkMsIHNvIGxlYXZlIHJvb20gZm9yIGl0ICovCi0JCW1pbl9yeF9zcGFjZSA9IG1hYy0+bWF4X2ZyYW1lX3NpemU7CisJCW1pbl9yeF9zcGFjZSA9IGFkYXB0ZXItPm1heF9mcmFtZV9zaXplOwogCQltaW5fcnhfc3BhY2UgPSBBTElHTihtaW5fcnhfc3BhY2UsIDEwMjQpOwogCQltaW5fcnhfc3BhY2UgPj49IDEwOwogCi0JCS8qIElmIGN1cnJlbnQgVHggYWxsb2NhdGlvbiBpcyBsZXNzIHRoYW4gdGhlIG1pbiBUeCBGSUZPIHNpemUsCisJCS8qCisJCSAqIElmIGN1cnJlbnQgVHggYWxsb2NhdGlvbiBpcyBsZXNzIHRoYW4gdGhlIG1pbiBUeCBGSUZPIHNpemUsCiAJCSAqIGFuZCB0aGUgbWluIFR4IEZJRk8gc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgUnggRklGTwotCQkgKiBhbGxvY2F0aW9uLCB0YWtlIHNwYWNlIGF3YXkgZnJvbSBjdXJyZW50IFJ4IGFsbG9jYXRpb24gKi8KKwkJICogYWxsb2NhdGlvbiwgdGFrZSBzcGFjZSBhd2F5IGZyb20gY3VycmVudCBSeCBhbGxvY2F0aW9uCisJCSAqLwogCQlpZiAoKHR4X3NwYWNlIDwgbWluX3R4X3NwYWNlKSAmJgogCQkgICAgKChtaW5fdHhfc3BhY2UgLSB0eF9zcGFjZSkgPCBwYmEpKSB7CiAJCQlwYmEgLT0gbWluX3R4X3NwYWNlIC0gdHhfc3BhY2U7CiAKLQkJCS8qIGlmIHNob3J0IG9uIHJ4IHNwYWNlLCByeCB3aW5zIGFuZCBtdXN0IHRydW1wIHR4Ci0JCQkgKiBhZGp1c3RtZW50IG9yIHVzZSBFYXJseSBSZWNlaXZlIGlmIGF2YWlsYWJsZSAqLworCQkJLyoKKwkJCSAqIGlmIHNob3J0IG9uIFJ4IHNwYWNlLCBSeCB3aW5zIGFuZCBtdXN0IHRydW1wIHR4CisJCQkgKiBhZGp1c3RtZW50IG9yIHVzZSBFYXJseSBSZWNlaXZlIGlmIGF2YWlsYWJsZQorCQkJICovCiAJCQlpZiAoKHBiYSA8IG1pbl9yeF9zcGFjZSkgJiYKIAkJCSAgICAoIShhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkpKQogCQkJCS8qIEVSVCBlbmFibGVkIGluIGUxMDAwX2NvbmZpZ3VyZV9yeCAqLwpAQCAtMjA5MiwyOSArMjEyNSwzMyBAQAogCX0KIAogCi0JLyogZmxvdyBjb250cm9sIHNldHRpbmdzICovCi0JLyogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IG9uZSBmdWxsIGZyYW1lCisJLyoKKwkgKiBmbG93IGNvbnRyb2wgc2V0dGluZ3MKKwkgKgorCSAqIFRoZSBoaWdoIHdhdGVyIG1hcmsgbXVzdCBiZSBsb3cgZW5vdWdoIHRvIGZpdCBvbmUgZnVsbCBmcmFtZQogCSAqIChvciB0aGUgc2l6ZSB1c2VkIGZvciBlYXJseSByZWNlaXZlKSBhYm92ZSBpdCBpbiB0aGUgUnggRklGTy4KIAkgKiBTZXQgaXQgdG8gdGhlIGxvd2VyIG9mOgogCSAqIC0gOTAlIG9mIHRoZSBSeCBGSUZPIHNpemUsIGFuZAogCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIHRoZSBlYXJseSByZWNlaXZlIHNpemUgKGZvciBwYXJ0cwogCSAqICAgd2l0aCBFUlQgc3VwcG9ydCBhc3N1bWluZyBFUlQgc2V0IHRvIEUxMDAwX0VSVF8yMDQ4KSwgb3IKLQkgKiAtIHRoZSBmdWxsIFJ4IEZJRk8gc2l6ZSBtaW51cyBvbmUgZnVsbCBmcmFtZSAqLworCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIG9uZSBmdWxsIGZyYW1lCisJICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfRVJUKQotCQlod20gPSBtaW4oKChhZGFwdGVyLT5wYmEgPDwgMTApICogOSAvIDEwKSwKLQkJCSAgKChhZGFwdGVyLT5wYmEgPDwgMTApIC0gKEUxMDAwX0VSVF8yMDQ4IDw8IDMpKSk7CisJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJICAoKHBiYSA8PCAxMCkgLSAoRTEwMDBfRVJUXzIwNDggPDwgMykpKTsKIAllbHNlCi0JCWh3bSA9IG1pbigoKGFkYXB0ZXItPnBiYSA8PCAxMCkgKiA5IC8gMTApLAotCQkJICAoKGFkYXB0ZXItPnBiYSA8PCAxMCkgLSBtYWMtPm1heF9mcmFtZV9zaXplKSk7CisJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJICAoKHBiYSA8PCAxMCkgLSBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOwogCi0JbWFjLT5mY19oaWdoX3dhdGVyID0gaHdtICYgMHhGRkY4OyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KLQltYWMtPmZjX2xvd193YXRlciA9IG1hYy0+ZmNfaGlnaF93YXRlciAtIDg7CisJZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiAweEZGRjg7IC8qIDgtYnl0ZSBncmFudWxhcml0eSAqLworCWZjLT5sb3dfd2F0ZXIgPSBmYy0+aGlnaF93YXRlciAtIDg7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0RJU0FCTEVfRkNfUEFVU0VfVElNRSkKLQkJbWFjLT5mY19wYXVzZV90aW1lID0gMHhGRkZGOworCQlmYy0+cGF1c2VfdGltZSA9IDB4RkZGRjsKIAllbHNlCi0JCW1hYy0+ZmNfcGF1c2VfdGltZSA9IEUxMDAwX0ZDX1BBVVNFX1RJTUU7Ci0JbWFjLT5mYyA9IG1hYy0+b3JpZ2luYWxfZmM7CisJCWZjLT5wYXVzZV90aW1lID0gRTEwMDBfRkNfUEFVU0VfVElNRTsKKwlmYy0+c2VuZF94b24gPSAxOworCWZjLT50eXBlID0gZmMtPm9yaWdpbmFsX3R5cGU7CiAKIAkvKiBBbGxvdyB0aW1lIGZvciBwZW5kaW5nIG1hc3RlciByZXF1ZXN0cyB0byBydW4gKi8KIAltYWMtPm9wcy5yZXNldF9odyhodyk7CkBAIC0yMTMzLDE1ICsyMTcwLDE1IEBACiAKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIEZMQUdfU01BUlRfUE9XRVJfRE9XTikpIHsKIAkJdTE2IHBoeV9kYXRhID0gMDsKLQkJLyogc3BlZWQgdXAgdGltZSB0byBsaW5rIGJ5IGRpc2FibGluZyBzbWFydCBwb3dlciBkb3duLCBpZ25vcmUKKwkJLyoKKwkJICogc3BlZWQgdXAgdGltZSB0byBsaW5rIGJ5IGRpc2FibGluZyBzbWFydCBwb3dlciBkb3duLCBpZ25vcmUKIAkJICogdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgdGhlcmUgaXMgbm90aGluZwotCQkgKiBkaWZmZXJlbnQgd2Ugd291bGQgZG8gaWYgaXQgZmFpbGVkICovCisJCSAqIGRpZmZlcmVudCB3ZSB3b3VsZCBkbyBpZiBpdCBmYWlsZWQKKwkJICovCiAJCWUxZV9ycGh5KGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmcGh5X2RhdGEpOwogCQlwaHlfZGF0YSAmPSB+SUdQMDJFMTAwMF9QTV9TUEQ7CiAJCWUxZV93cGh5KGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCBwaHlfZGF0YSk7CiAJfQotCi0JZTEwMDBfcmVsZWFzZV9tYW5hZ2VhYmlsaXR5KGFkYXB0ZXIpOwogfQogCiBpbnQgZTEwMDBlX3VwKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjE2Nyw4ICsyMjA0LDEwIEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgdGN0bCwgcmN0bDsKIAotCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGRvd24gc28gdGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90Ci0JICogcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGltZXIgKi8KKwkvKgorCSAqIHNpZ25hbCB0aGF0IHdlJ3JlIGRvd24gc28gdGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90CisJICogcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGltZXIKKwkgKi8KIAlzZXRfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAogCS8qIGRpc2FibGUgcmVjZWl2ZXMgaW4gdGhlIGhhcmR3YXJlICovCkBAIC0yMTg3LDcgKzIyMjYsNiBAQAogCW1zbGVlcCgxMCk7CiAKIAluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOwotCWF0b21pY19zZXQoJmFkYXB0ZXItPmlycV9zZW0sIDApOwogCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKQEAgLTIyMjgsMTMgKzIyNjYsMTIgQEAKICAqKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IGUxMDAwX3N3X2luaXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEVUSF9GUkFNRV9MRU4gKyBWTEFOX0hMRU4gKyBFVEhfRkNTX0xFTjsKIAlhZGFwdGVyLT5yeF9wc19ic2l6ZTAgPSAxMjg7Ci0JaHctPm1hYy5tYXhfZnJhbWVfc2l6ZSA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKLQlody0+bWFjLm1pbl9mcmFtZV9zaXplID0gRVRIX1pMRU4gKyBFVEhfRkNTX0xFTjsKKwlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKKwlhZGFwdGVyLT5taW5fZnJhbWVfc2l6ZSA9IEVUSF9aTEVOICsgRVRIX0ZDU19MRU47CiAKIAlhZGFwdGVyLT50eF9yaW5nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGUxMDAwX3JpbmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXItPnR4X3JpbmcpCkBAIC0yMjQ3LDcgKzIyODQsNiBAQAogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKTsKIAogCS8qIEV4cGxpY2l0bHkgZGlzYWJsZSBJUlEgc2luY2UgdGhlIE5JQyBjYW4gYmUgaW4gYW55IHN0YXRlLiAqLwotCWF0b21pY19zZXQoJmFkYXB0ZXItPmlycV9zZW0sIDApOwogCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnN0YXRzX2xvY2spOwpAQCAtMjMwMSwxNiArMjMzNywyMCBAQAogCSAgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKSkKIAkJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwogCi0JLyogSWYgQU1UIGlzIGVuYWJsZWQsIGxldCB0aGUgZmlybXdhcmUga25vdyB0aGF0IHRoZSBuZXR3b3JrCi0JICogaW50ZXJmYWNlIGlzIG5vdyBvcGVuICovCisJLyoKKwkgKiBJZiBBTVQgaXMgZW5hYmxlZCwgbGV0IHRoZSBmaXJtd2FyZSBrbm93IHRoYXQgdGhlIG5ldHdvcmsKKwkgKiBpbnRlcmZhY2UgaXMgbm93IG9wZW4KKwkgKi8KIAlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQU1UKSAmJgogCSAgICBlMTAwMGVfY2hlY2tfbW5nX21vZGUoJmFkYXB0ZXItPmh3KSkKIAkJZTEwMDBfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiAKLQkvKiBiZWZvcmUgd2UgYWxsb2NhdGUgYW4gaW50ZXJydXB0LCB3ZSBtdXN0IGJlIHJlYWR5IHRvIGhhbmRsZSBpdC4KKwkvKgorCSAqIGJlZm9yZSB3ZSBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQsIHdlIG11c3QgYmUgcmVhZHkgdG8gaGFuZGxlIGl0LgogCSAqIFNldHRpbmcgREVCVUdfU0hJUlEgaW4gdGhlIGtlcm5lbCBtYWtlcyBpdCBmaXJlIGFuIGludGVycnVwdAogCSAqIGFzIHNvb24gYXMgd2UgY2FsbCBwY2lfcmVxdWVzdF9pcnEsIHNvIHdlIGhhdmUgdG8gc2V0dXAgb3VyCi0JICogY2xlYW5fcnggaGFuZGxlciBiZWZvcmUgd2UgZG8gc28uICAqLworCSAqIGNsZWFuX3J4IGhhbmRsZXIgYmVmb3JlIHdlIGRvIHNvLgorCSAqLwogCWUxMDAwX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAogCWVyciA9IGUxMDAwX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwpAQCAtMjM2NCwxNiArMjQwNCwyMCBAQAogCWUxMDAwZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKIAllMTAwMGVfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CiAKLQkvKiBraWxsIG1hbmFnZWFiaWxpdHkgdmxhbiBJRCBpZiBzdXBwb3J0ZWQsIGJ1dCBub3QgaWYgYSB2bGFuIHdpdGgKLQkgKiB0aGUgc2FtZSBJRCBpcyByZWdpc3RlcmVkIG9uIHRoZSBob3N0IE9TIChsZXQgODAyMXEga2lsbCBpdCkgKi8KKwkvKgorCSAqIGtpbGwgbWFuYWdlYWJpbGl0eSB2bGFuIElEIGlmIHN1cHBvcnRlZCwgYnV0IG5vdCBpZiBhIHZsYW4gd2l0aAorCSAqIHRoZSBzYW1lIElEIGlzIHJlZ2lzdGVyZWQgb24gdGhlIGhvc3QgT1MgKGxldCA4MDIxcSBraWxsIGl0KQorCSAqLwogCWlmICgoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgogCQkJICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pICYmCiAJICAgICAhKGFkYXB0ZXItPnZsZ3JwICYmCiAJICAgICAgIHZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgYWRhcHRlci0+bW5nX3ZsYW5faWQpKSkKIAkJZTEwMDBfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsIGFkYXB0ZXItPm1uZ192bGFuX2lkKTsKIAotCS8qIElmIEFNVCBpcyBlbmFibGVkLCBsZXQgdGhlIGZpcm13YXJlIGtub3cgdGhhdCB0aGUgbmV0d29yawotCSAqIGludGVyZmFjZSBpcyBub3cgY2xvc2VkICovCisJLyoKKwkgKiBJZiBBTVQgaXMgZW5hYmxlZCwgbGV0IHRoZSBmaXJtd2FyZSBrbm93IHRoYXQgdGhlIG5ldHdvcmsKKwkgKiBpbnRlcmZhY2UgaXMgbm93IGNsb3NlZAorCSAqLwogCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19BTVQpICYmCiAJICAgIGUxMDAwZV9jaGVja19tbmdfbW9kZSgmYWRhcHRlci0+aHcpKQogCQllMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CkBAIC0yNDA0LDEyICsyNDQ4LDE0IEBACiAJCS8qIGFjdGl2YXRlIHRoZSB3b3JrIGFyb3VuZCAqLwogCQllMTAwMGVfc2V0X2xhYV9zdGF0ZV84MjU3MSgmYWRhcHRlci0+aHcsIDEpOwogCi0JCS8qIEhvbGQgYSBjb3B5IG9mIHRoZSBMQUEgaW4gUkFSWzE0XSBUaGlzIGlzIGRvbmUgc28gdGhhdAorCQkvKgorCQkgKiBIb2xkIGEgY29weSBvZiB0aGUgTEFBIGluIFJBUlsxNF0gVGhpcyBpcyBkb25lIHNvIHRoYXQKIAkJICogYmV0d2VlbiB0aGUgdGltZSBSQVJbMF0gZ2V0cyBjbG9iYmVyZWQgIGFuZCB0aGUgdGltZSBpdAogCQkgKiBnZXRzIGZpeGVkIChpbiBlMTAwMF93YXRjaGRvZyksIHRoZSBhY3R1YWwgTEFBIGlzIGluIG9uZQogCQkgKiBvZiB0aGUgUkFScyBhbmQgbm8gaW5jb21pbmcgcGFja2V0cyBkaXJlY3RlZCB0byB0aGlzIHBvcnQKIAkJICogYXJlIGRyb3BwZWQuIEV2ZW50dWFsbHkgdGhlIExBQSB3aWxsIGJlIGluIFJBUlswXSBhbmQKLQkJICogUkFSWzE0XSAqLworCQkgKiBSQVJbMTRdCisJCSAqLwogCQllMTAwMGVfcmFyX3NldCgmYWRhcHRlci0+aHcsCiAJCQkgICAgICBhZGFwdGVyLT5ody5tYWMuYWRkciwKIAkJCSAgICAgIGFkYXB0ZXItPmh3Lm1hYy5yYXJfZW50cnlfY291bnQgLSAxKTsKQEAgLTI0MTgsOCArMjQ2NCwxMCBAQAogCXJldHVybiAwOwogfQogCi0vKiBOZWVkIHRvIHdhaXQgYSBmZXcgc2Vjb25kcyBhZnRlciBsaW5rIHVwIHRvIGdldCBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZyb20KLSAqIHRoZSBwaHkgKi8KKy8qCisgKiBOZWVkIHRvIHdhaXQgYSBmZXcgc2Vjb25kcyBhZnRlciBsaW5rIHVwIHRvIGdldCBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZyb20KKyAqIHRoZSBwaHkKKyAqLwogc3RhdGljIHZvaWQgZTEwMDBfdXBkYXRlX3BoeV9pbmZvKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKSBkYXRhOwpAQCAtMjQ1MCw3ICsyNDk4LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBpcnFfZmxhZ3MpOwogCi0JLyogdGhlc2UgY291bnRlcnMgYXJlIG1vZGlmaWVkIGZyb20gZTEwMDBfYWRqdXN0X3RiaV9zdGF0cywKKwkvKgorCSAqIHRoZXNlIGNvdW50ZXJzIGFyZSBtb2RpZmllZCBmcm9tIGUxMDAwX2FkanVzdF90Ymlfc3RhdHMsCiAJICogY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0LCBzbyB0aGV5IG11c3Qgb25seQogCSAqIGJlIHdyaXR0ZW4gd2hpbGUgaG9sZGluZyBhZGFwdGVyLT5zdGF0c19sb2NrCiAJICovCkBAIC0yNTQ0LDggKzI1OTMsMTAgQEAKIAogCS8qIFJ4IEVycm9ycyAqLwogCi0JLyogUkxFQyBvbiBzb21lIG5ld2VyIGhhcmR3YXJlIGNhbiBiZSBpbmNvcnJlY3Qgc28gYnVpbGQKLQkqIG91ciBvd24gdmVyc2lvbiBiYXNlZCBvbiBSVUMgYW5kIFJPQyAqLworCS8qCisJICogUkxFQyBvbiBzb21lIG5ld2VyIGhhcmR3YXJlIGNhbiBiZSBpbmNvcnJlY3Qgc28gYnVpbGQKKwkgKiBvdXIgb3duIHZlcnNpb24gYmFzZWQgb24gUlVDIGFuZCBST0MKKwkgKi8KIAlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMucnhlcnJjICsKIAkJYWRhcHRlci0+c3RhdHMuY3JjZXJycyArIGFkYXB0ZXItPnN0YXRzLmFsZ25lcnJjICsKIAkJYWRhcHRlci0+c3RhdHMucnVjICsgYWRhcHRlci0+c3RhdHMucm9jICsKQEAgLTI1NjYsNyArMjYxNyw3IEBACiAJLyogVHggRHJvcHBlZCBuZWVkcyB0byBiZSBtYWludGFpbmVkIGVsc2V3aGVyZSAqLwogCiAJLyogUGh5IFN0YXRzICovCi0JaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlpZiAoKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCkgJiYKIAkJICAgKCFlMWVfcnBoeShodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV90bXApKSkgewogCQkJcGh5X3RtcCAmPSBQSFlfSURMRV9FUlJPUl9DT1VOVF9NQVNLOwpAQCAtMjU4NCw4ICsyNjM1LDggQEAKIAogc3RhdGljIHZvaWQgZTEwMDBfcHJpbnRfbGlua19pbmZvKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXUzMiBjdHJsID0gZXIzMihDVFJMKTsKIAogCW5kZXZfaW5mbyhuZXRkZXYsCkBAIC0yNTk5LDYgKzI2NTAsNjIgQEAKIAkJKChjdHJsICYgRTEwMDBfQ1RSTF9URkNFKSA/ICJUWCIgOiAiTm9uZSIgKSkpOwogfQogCitzdGF0aWMgYm9vbCBlMTAwMF9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWJvb2wgbGlua19hY3RpdmUgPSAwOworCXMzMiByZXRfdmFsID0gMDsKKworCS8qCisJICogZ2V0X2xpbmtfc3RhdHVzIGlzIHNldCBvbiBMU0MgKGxpbmsgc3RhdHVzKSBpbnRlcnJ1cHQgb3IKKwkgKiBSeCBzZXF1ZW5jZSBlcnJvciBpbnRlcnJ1cHQuICBnZXRfbGlua19zdGF0dXMgd2lsbCBzdGF5CisJICogZmFsc2UgdW50aWwgdGhlIGNoZWNrX2Zvcl9saW5rIGVzdGFibGlzaGVzIGxpbmsKKwkgKiBmb3IgY29wcGVyIGFkYXB0ZXJzIE9OTFkKKwkgKi8KKwlzd2l0Y2ggKGh3LT5waHkubWVkaWFfdHlwZSkgeworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI6CisJCWlmIChody0+bWFjLmdldF9saW5rX3N0YXR1cykgeworCQkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJCWxpbmtfYWN0aXZlID0gIWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzOworCQl9IGVsc2UgeworCQkJbGlua19hY3RpdmUgPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9maWJlcjoKKwkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJbGlua19hY3RpdmUgPSAhIShlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpOworCQlicmVhazsKKwljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgorCQlyZXRfdmFsID0gaHctPm1hYy5vcHMuY2hlY2tfZm9yX2xpbmsoaHcpOworCQlsaW5rX2FjdGl2ZSA9IGFkYXB0ZXItPmh3Lm1hYy5zZXJkZXNfaGFzX2xpbms7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBlMTAwMF9tZWRpYV90eXBlX3Vua25vd246CisJCWJyZWFrOworCX0KKworCWlmICgocmV0X3ZhbCA9PSBFMTAwMF9FUlJfUEhZKSAmJiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9pZ3BfMykgJiYKKwkgICAgKGVyMzIoQ1RSTCkgJiBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRSkpIHsKKwkJLyogU2VlIGUxMDAwX2ttcm5fbG9ja19sb3NzX3dvcmthcm91bmRfaWNoOGxhbigpICovCisJCW5kZXZfaW5mbyhhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJHaWdhYml0IGhhcyBiZWVuIGRpc2FibGVkLCBkb3duZ3JhZGluZyBzcGVlZFxuIik7CisJfQorCisJcmV0dXJuIGxpbmtfYWN0aXZlOworfQorCitzdGF0aWMgdm9pZCBlMTAwMGVfZW5hYmxlX3JlY2VpdmVzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQoreworCS8qIG1ha2Ugc3VyZSB0aGUgcmVjZWl2ZSB1bml0IGlzIHN0YXJ0ZWQgKi8KKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19SWF9ORUVEU19SRVNUQVJUKSAmJgorCSAgICAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1JYX1JFU1RBUlRfTk9XKSkgeworCQlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCQl1MzIgcmN0bCA9IGVyMzIoUkNUTCk7CisJCWV3MzIoUkNUTCwgcmN0bCB8IEUxMDAwX1JDVExfRU4pOworCQlhZGFwdGVyLT5mbGFncyAmPSB+RkxBR19SWF9SRVNUQVJUX05PVzsKKwl9Cit9CisKIC8qKgogICogZTEwMDBfd2F0Y2hkb2cgLSBUaW1lciBDYWxsLWJhY2sKICAqIEBkYXRhOiBwb2ludGVyIHRvIGFkYXB0ZXIgY2FzdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcKQEAgLTI2MTcsNDggKzI3MjQsMzUgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgd2F0Y2hkb2dfdGFzayk7Ci0KIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmFkYXB0ZXItPmh3Lm1hYzsKIAlzdHJ1Y3QgZTEwMDBfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgbGluaywgdGN0bDsKLQlzMzIgcmV0X3ZhbDsKIAlpbnQgdHhfcGVuZGluZyA9IDA7CiAKLQlpZiAoKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgJiYKLQkgICAgKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSkpCisJbGluayA9IGUxMDAwX2hhc19saW5rKGFkYXB0ZXIpOworCWlmICgobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSAmJiBsaW5rKSB7CisJCWUxMDAwZV9lbmFibGVfcmVjZWl2ZXMoYWRhcHRlcik7CiAJCWdvdG8gbGlua191cDsKLQotCXJldF92YWwgPSBtYWMtPm9wcy5jaGVja19mb3JfbGluayhodyk7Ci0JaWYgKChyZXRfdmFsID09IEUxMDAwX0VSUl9QSFkpICYmCi0JICAgIChhZGFwdGVyLT5ody5waHkudHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpICYmCi0JICAgIChlcjMyKENUUkwpICYKLQkgICAgIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFKSkgewotCQkvKiBTZWUgZTEwMDBfa21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9pY2g4bGFuKCkgKi8KLQkJbmRldl9pbmZvKG5ldGRldiwKLQkJCSJHaWdhYml0IGhhcyBiZWVuIGRpc2FibGVkLCBkb3duZ3JhZGluZyBzcGVlZFxuIik7CiAJfQogCiAJaWYgKChlMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpKSAmJgogCSAgICAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0gYWRhcHRlci0+aHcubW5nX2Nvb2tpZS52bGFuX2lkKSkKIAkJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwogCi0JaWYgKChhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJgotCSAgICEoZXIzMihUWENXKSAmIEUxMDAwX1RYQ1dfQU5FKSkKLQkJbGluayA9IGFkYXB0ZXItPmh3Lm1hYy5zZXJkZXNfaGFzX2xpbms7Ci0JZWxzZQotCQlsaW5rID0gZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVOwotCiAJaWYgKGxpbmspIHsKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCWJvb2wgdHhiMmIgPSAxOworCQkJLyogdXBkYXRlIHNuYXBzaG90IG9mIFBIWSByZWdpc3RlcnMgb24gTFNDICovCiAJCQltYWMtPm9wcy5nZXRfbGlua191cF9pbmZvKCZhZGFwdGVyLT5odywKIAkJCQkJCSAgICZhZGFwdGVyLT5saW5rX3NwZWVkLAogCQkJCQkJICAgJmFkYXB0ZXItPmxpbmtfZHVwbGV4KTsKIAkJCWUxMDAwX3ByaW50X2xpbmtfaW5mbyhhZGFwdGVyKTsKLQkJCS8qIHR3ZWFrIHR4X3F1ZXVlX2xlbiBhY2NvcmRpbmcgdG8gc3BlZWQvZHVwbGV4Ci0JCQkgKiBhbmQgYWRqdXN0IHRoZSB0aW1lb3V0IGZhY3RvciAqLworCQkJLyoKKwkJCSAqIHR3ZWFrIHR4X3F1ZXVlX2xlbiBhY2NvcmRpbmcgdG8gc3BlZWQvZHVwbGV4CisJCQkgKiBhbmQgYWRqdXN0IHRoZSB0aW1lb3V0IGZhY3RvcgorCQkJICovCiAJCQluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IGFkYXB0ZXItPnR4X3F1ZXVlX2xlbjsKIAkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTsKIAkJCXN3aXRjaCAoYWRhcHRlci0+bGlua19zcGVlZCkgewpAQCAtMjY3NCwxOCArMjc2OCwyMiBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQkvKiB3b3JrYXJvdW5kOiByZS1wcm9ncmFtIHNwZWVkIG1vZGUgYml0IGFmdGVyCi0JCQkgKiBsaW5rLXVwIGV2ZW50ICovCisJCQkvKgorCQkJICogd29ya2Fyb3VuZDogcmUtcHJvZ3JhbSBzcGVlZCBtb2RlIGJpdCBhZnRlcgorCQkJICogbGluay11cCBldmVudAorCQkJICovCiAJCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19UQVJDX1NQRUVEX01PREVfQklUKSAmJgogCQkJICAgICF0eGIyYikgewogCQkJCXUzMiB0YXJjMDsKLQkJCQl0YXJjMCA9IGVyMzIoVEFSQzApOworCQkJCXRhcmMwID0gZXIzMihUQVJDKDApKTsKIAkJCQl0YXJjMCAmPSB+U1BFRURfTU9ERV9CSVQ7Ci0JCQkJZXczMihUQVJDMCwgdGFyYzApOworCQkJCWV3MzIoVEFSQygwKSwgdGFyYzApOwogCQkJfQogCi0JCQkvKiBkaXNhYmxlIFRTTyBmb3IgcGNpZSBhbmQgMTAvMTAwIHNwZWVkcywgdG8gYXZvaWQKLQkJCSAqIHNvbWUgaGFyZHdhcmUgaXNzdWVzICovCisJCQkvKgorCQkJICogZGlzYWJsZSBUU08gZm9yIHBjaWUgYW5kIDEwLzEwMCBzcGVlZHMsIHRvIGF2b2lkCisJCQkgKiBzb21lIGhhcmR3YXJlIGlzc3VlcworCQkJICovCiAJCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIEZMQUdfVFNPX0ZPUkNFKSkgewogCQkJCXN3aXRjaCAoYWRhcHRlci0+bGlua19zcGVlZCkgewogCQkJCWNhc2UgU1BFRURfMTA6CkBAIC0yNzA1LDggKzI4MDMsMTAgQEAKIAkJCQl9CiAJCQl9CiAKLQkJCS8qIGVuYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlLCBuZWVkIHRvIGRvIHRoaXMKLQkJCSAqIGFmdGVyIHNldHRpbmcgVEFSQzAgKi8KKwkJCS8qCisJCQkgKiBlbmFibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSwgbmVlZCB0byBkbyB0aGlzCisJCQkgKiBhZnRlciBzZXR0aW5nIFRBUkMoMCkKKwkJCSAqLwogCQkJdGN0bCA9IGVyMzIoVENUTCk7CiAJCQl0Y3RsIHw9IEUxMDAwX1RDVExfRU47CiAJCQlldzMyKFRDVEwsIHRjdGwpOwpAQCAtMjcxNywxMyArMjgxNyw2IEBACiAJCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCQltb2RfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLAogCQkJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOwotCQl9IGVsc2UgewotCQkJLyogbWFrZSBzdXJlIHRoZSByZWNlaXZlIHVuaXQgaXMgc3RhcnRlZCAqLwotCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19SWF9ORUVEU19SRVNUQVJUKSB7Ci0JCQkJdTMyIHJjdGwgPSBlcjMyKFJDVEwpOwotCQkJCWV3MzIoUkNUTCwgcmN0bCB8Ci0JCQkJCQlFMTAwMF9SQ1RMX0VOKTsKLQkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKQEAgLTI3NjAsMjMgKzI4NTMsMjcgQEAKIAkJdHhfcGVuZGluZyA9IChlMTAwMF9kZXNjX3VudXNlZCh0eF9yaW5nKSArIDEgPAogCQkJICAgICAgIHR4X3JpbmctPmNvdW50KTsKIAkJaWYgKHR4X3BlbmRpbmcpIHsKLQkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAorCQkJLyoKKwkJCSAqIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAogCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKIAkJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgotCQkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4gKi8KKwkJCSAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuCisJCQkgKi8KIAkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQrKzsKIAkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwogCQl9CiAJfQogCi0JLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5nIGlzIGNsZWFuZWQgKi8KKwkvKiBDYXVzZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgdG8gZW5zdXJlIFJ4IHJpbmcgaXMgY2xlYW5lZCAqLwogCWV3MzIoSUNTLCBFMTAwMF9JQ1NfUlhETVQwKTsKIAogCS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgZXZlcnkgd2F0Y2hkb2cgcGVyaW9kICovCiAJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSAxOwogCi0JLyogV2l0aCA4MjU3MSBjb250cm9sbGVycywgTEFBIG1heSBiZSBvdmVyd3JpdHRlbiBkdWUgdG8gY29udHJvbGxlcgotCSAqIHJlc2V0IGZyb20gdGhlIG90aGVyIHBvcnQuIFNldCB0aGUgYXBwcm9wcmlhdGUgTEFBIGluIFJBUlswXSAqLworCS8qCisJICogV2l0aCA4MjU3MSBjb250cm9sbGVycywgTEFBIG1heSBiZSBvdmVyd3JpdHRlbiBkdWUgdG8gY29udHJvbGxlcgorCSAqIHJlc2V0IGZyb20gdGhlIG90aGVyIHBvcnQuIFNldCB0aGUgYXBwcm9wcmlhdGUgTEFBIGluIFJBUlswXQorCSAqLwogCWlmIChlMTAwMGVfZ2V0X2xhYV9zdGF0ZV84MjU3MShodykpCiAJCWUxMDAwZV9yYXJfc2V0KGh3LCBhZGFwdGVyLT5ody5tYWMuYWRkciwgMCk7CiAKQEAgLTMwNTIsMTYgKzMxNDksMjAgQEAKIAogCXR4X2Rlc2MtPmxvd2VyLmRhdGEgfD0gY3B1X3RvX2xlMzIoYWRhcHRlci0+dHhkX2NtZCk7CiAKLQkvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdworCS8qCisJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKIAkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQogCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCi0JICogc3VjaCBhcyBJQS02NCkuICovCisJICogc3VjaCBhcyBJQS02NCkuCisJICovCiAJd21iKCk7CiAKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CiAJd3JpdGVsKGksIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKLQkvKiB3ZSBuZWVkIHRoaXMgaWYgbW9yZSB0aGFuIG9uZSBwcm9jZXNzb3IgY2FuIHdyaXRlIHRvIG91ciB0YWlsCi0JICogYXQgYSB0aW1lLCBpdCBzeW5jaHJvbml6ZXMgSU8gb24gSUE2NC9BbHRpeCBzeXN0ZW1zICovCisJLyoKKwkgKiB3ZSBuZWVkIHRoaXMgaWYgbW9yZSB0aGFuIG9uZSBwcm9jZXNzb3IgY2FuIHdyaXRlIHRvIG91ciB0YWlsCisJICogYXQgYSB0aW1lLCBpdCBzeW5jaHJvbml6ZXMgSU8gb24gSUE2NC9BbHRpeCBzeXN0ZW1zCisJICovCiAJbW1pb3diKCk7CiB9CiAKQEAgLTMxMDksMTMgKzMyMTAsMTcgQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JLyogSGVyYmVydCdzIG9yaWdpbmFsIHBhdGNoIGhhZDoKKwkvKgorCSAqIEhlcmJlcnQncyBvcmlnaW5hbCBwYXRjaCBoYWQ6CiAJICogIHNtcF9tYl9fYWZ0ZXJfbmV0aWZfc3RvcF9xdWV1ZSgpOwotCSAqIGJ1dCBzaW5jZSB0aGF0IGRvZXNuJ3QgZXhpc3QgeWV0LCBqdXN0IG9wZW4gY29kZSBpdC4gKi8KKwkgKiBidXQgc2luY2UgdGhhdCBkb2Vzbid0IGV4aXN0IHlldCwganVzdCBvcGVuIGNvZGUgaXQuCisJICovCiAJc21wX21iKCk7CiAKLQkvKiBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGluIGEgY2FzZSBhbm90aGVyIENQVSBoYXMganVzdAotCSAqIG1hZGUgcm9vbSBhdmFpbGFibGUuICovCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGluIGEgY2FzZSBhbm90aGVyIENQVSBoYXMganVzdAorCSAqIG1hZGUgcm9vbSBhdmFpbGFibGUuCisJICovCiAJaWYgKGUxMDAwX2Rlc2NfdW51c2VkKGFkYXB0ZXItPnR4X3JpbmcpIDwgc2l6ZSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMzE2MiwyMSArMzI2NywyOSBAQAogCX0KIAogCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7Ci0JLyogVGhlIGNvbnRyb2xsZXIgZG9lcyBhIHNpbXBsZSBjYWxjdWxhdGlvbiB0bworCS8qCisJICogVGhlIGNvbnRyb2xsZXIgZG9lcyBhIHNpbXBsZSBjYWxjdWxhdGlvbiB0bwogCSAqIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiB0aGUgRklGTyBiZWZvcmUKIAkgKiBpbml0aWF0aW5nIHRoZSBETUEgZm9yIGVhY2ggYnVmZmVyLiAgVGhlIGNhbGMgaXM6CiAJICogNCA9IGNlaWwoYnVmZmVyIGxlbi9tc3MpLiAgVG8gbWFrZSBzdXJlIHdlIGRvbid0CiAJICogb3ZlcnJ1biB0aGUgRklGTywgYWRqdXN0IHRoZSBtYXggYnVmZmVyIGxlbiBpZiBtc3MKLQkgKiBkcm9wcy4gKi8KKwkgKiBkcm9wcy4KKwkgKi8KIAlpZiAobXNzKSB7CiAJCXU4IGhkcl9sZW47CiAJCW1heF9wZXJfdHhkID0gbWluKG1zcyA8PCAyLCBtYXhfcGVyX3R4ZCk7CiAJCW1heF90eGRfcHdyID0gZmxzKG1heF9wZXJfdHhkKSAtIDE7CiAKLQkJLyogVFNPIFdvcmthcm91bmQgZm9yIDgyNTcxLzIvMyBDb250cm9sbGVycyAtLSBpZiBza2ItPmRhdGEKLQkJKiBwb2ludHMgdG8ganVzdCBoZWFkZXIsIHB1bGwgYSBmZXcgYnl0ZXMgb2YgcGF5bG9hZCBmcm9tCi0JCSogZnJhZ3MgaW50byBza2ItPmRhdGEgKi8KKwkJLyoKKwkJICogVFNPIFdvcmthcm91bmQgZm9yIDgyNTcxLzIvMyBDb250cm9sbGVycyAtLSBpZiBza2ItPmRhdGEKKwkJICogcG9pbnRzIHRvIGp1c3QgaGVhZGVyLCBwdWxsIGEgZmV3IGJ5dGVzIG9mIHBheWxvYWQgZnJvbQorCQkgKiBmcmFncyBpbnRvIHNrYi0+ZGF0YQorCQkgKi8KIAkJaGRyX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYik7CisJCS8qCisJCSAqIHdlIGRvIHRoaXMgd29ya2Fyb3VuZCBmb3IgRVMyTEFOLCBidXQgaXQgaXMgdW4tbmVjZXNzYXJ5LAorCQkgKiBhdm9pZGluZyBpdCBjb3VsZCBzYXZlIGEgbG90IG9mIGN5Y2xlcworCQkgKi8KIAkJaWYgKHNrYi0+ZGF0YV9sZW4gJiYgKGhkcl9sZW4gPT0gbGVuKSkgewogCQkJdW5zaWduZWQgaW50IHB1bGxfc2l6ZTsKIApAQCAtMzIxMCw4ICszMzIzLDEwIEBACiAJCS8qIENvbGxpc2lvbiAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLwogCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKIAotCS8qIG5lZWQ6IGNvdW50ICsgMiBkZXNjIGdhcCB0byBrZWVwIHRhaWwgZnJvbSB0b3VjaGluZwotCSAqIGhlYWQsIG90aGVyd2lzZSB0cnkgbmV4dCB0aW1lICovCisJLyoKKwkgKiBuZWVkOiBjb3VudCArIDIgZGVzYyBnYXAgdG8ga2VlcCB0YWlsIGZyb20gdG91Y2hpbmcKKwkgKiBoZWFkLCBvdGhlcndpc2UgdHJ5IG5leHQgdGltZQorCSAqLwogCWlmIChlMTAwMF9tYXliZV9zdG9wX3R4KG5ldGRldiwgY291bnQgKyAyKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CkBAIC0zMjM2LDkgKzMzNTEsMTEgQEAKIAllbHNlIGlmIChlMTAwMF90eF9jc3VtKGFkYXB0ZXIsIHNrYikpCiAJCXR4X2ZsYWdzIHw9IEUxMDAwX1RYX0ZMQUdTX0NTVU07CiAKLQkvKiBPbGQgbWV0aG9kIHdhcyB0byBhc3N1bWUgSVB2NCBwYWNrZXQgYnkgZGVmYXVsdCBpZiBUU08gd2FzIGVuYWJsZWQuCisJLyoKKwkgKiBPbGQgbWV0aG9kIHdhcyB0byBhc3N1bWUgSVB2NCBwYWNrZXQgYnkgZGVmYXVsdCBpZiBUU08gd2FzIGVuYWJsZWQuCiAJICogODI1NzEgaGFyZHdhcmUgc3VwcG9ydHMgVFNPIGNhcGFiaWxpdGllcyBmb3IgSVB2NiBhcyB3ZWxsLi4uCi0JICogbm8gbG9uZ2VyIGFzc3VtZSwgd2UgbXVzdC4gKi8KKwkgKiBubyBsb25nZXIgYXNzdW1lLCB3ZSBtdXN0LgorCSAqLwogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIApAQCAtMzMzNiwxNCArMzQ1MywxNiBAQAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7CiAJLyogZTEwMDBlX2Rvd24gaGFzIGEgZGVwZW5kZW5jeSBvbiBtYXhfZnJhbWVfc2l6ZSAqLwotCWFkYXB0ZXItPmh3Lm1hYy5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKKwlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQllMTAwMGVfZG93bihhZGFwdGVyKTsKIAotCS8qIE5PVEU6IG5ldGRldl9hbGxvY19za2IgcmVzZXJ2ZXMgMTYgYnl0ZXMsIGFuZCB0eXBpY2FsbHkgTkVUX0lQX0FMSUdOCisJLyoKKwkgKiBOT1RFOiBuZXRkZXZfYWxsb2Nfc2tiIHJlc2VydmVzIDE2IGJ5dGVzLCBhbmQgdHlwaWNhbGx5IE5FVF9JUF9BTElHTgogCSAqIG1lYW5zIHdlIHJlc2VydmUgMiBtb3JlLCB0aGlzIHB1c2hlcyB1cyB0byBhbGxvY2F0ZSBmcm9tIHRoZSBuZXh0CiAJICogbGFyZ2VyIHNsYWIgc2l6ZS4KLQkgKiBpLmUuIFJYQlVGRkVSXzIwNDggLS0+IHNpemUtNDA5NiBzbGFiICovCisJICogaS5lLiBSWEJVRkZFUl8yMDQ4IC0tPiBzaXplLTQwOTYgc2xhYgorCSAqLwogCiAJaWYgKG1heF9mcmFtZSA8PSAyNTYpCiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSAyNTY7CkBAIC0zMzYwLDcgKzM0NzksNyBAQAogCWlmICgobWF4X2ZyYW1lID09IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikgfHwKIAkgICAgIChtYXhfZnJhbWUgPT0gRVRIX0ZSQU1FX0xFTiArIFZMQU5fSExFTiArIEVUSF9GQ1NfTEVOKSkKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEVUSF9GUkFNRV9MRU4gKyBWTEFOX0hMRU4KLQkJCQkJICsgRVRIX0ZDU19MRU4gOworCQkJCQkgKyBFVEhfRkNTX0xFTjsKIAogCW5kZXZfaW5mbyhuZXRkZXYsICJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwKIAkJbmV0ZGV2LT5tdHUsIG5ld19tdHUpOwpAQCAtMzM4Myw3ICszNTAyLDcgQEAKIAlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAotCWlmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQorCWlmIChhZGFwdGVyLT5ody5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTM0NjUsOCArMzU4NCw5IEBACiAJCQlFMTAwMF9DVFJMX0VOX1BIWV9QV1JfTUdNVDsKIAkJZXczMihDVFJMLCBjdHJsKTsKIAotCQlpZiAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8Ci0JCSAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKKwkJaWYgKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKKwkJICAgIGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09CisJCSAgICBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewogCQkJLyoga2VlcCB0aGUgbGFzZXIgcnVubmluZyBpbiBEMyAqLwogCQkJY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKIAkJCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX1NEUDdfREFUQTsKQEAgLTM0ODcsOCArMzYwNyw2IEBACiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9CiAKLQllMTAwMF9yZWxlYXNlX21hbmFnZWFiaWxpdHkoYWRhcHRlcik7Ci0KIAkvKiBtYWtlIHN1cmUgYWRhcHRlciBpc24ndCBhc2xlZXAgaWYgbWFuYWdlYWJpbGl0eSBpcyBlbmFibGVkICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19NTkdfUFRfRU5BQkxFRCkgewogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKQEAgLTM0OTgsOCArMzYxNiwxMCBAQAogCWlmIChhZGFwdGVyLT5ody5waHkudHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpCiAJCWUxMDAwZV9pZ3AzX3BoeV9wb3dlcmRvd25fd29ya2Fyb3VuZF9pY2g4bGFuKCZhZGFwdGVyLT5odyk7CiAKLQkvKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwotCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LiAqLworCS8qCisJICogUmVsZWFzZSBjb250cm9sIG9mIGgvdyB0byBmL3cuICBJZiBmL3cgaXMgQU1UIGVuYWJsZWQsIHRoaXMKKwkgKiB3b3VsZCBoYXZlIGFscmVhZHkgaGFwcGVuZWQgaW4gY2xvc2UgYW5kIGlzIHJlZHVuZGFudC4KKwkgKi8KIAllMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0zNTEyLDcgKzM2MzIsNiBAQAogc3RhdGljIHZvaWQgZTEwMDBlX2Rpc2FibGVfbDFhc3BtKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCWludCBwb3M7Ci0JdTMyIGNhcDsKIAl1MTYgdmFsOwogCiAJLyoKQEAgLTM1MjcsNyArMzY0Niw2IEBACiAJICogYWN0aXZlLgogCSAqLwogCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NBUCwgJmNhcCk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX0VYUF9MTktDVEwsICZ2YWwpOwogCWlmICh2YWwgJiAweDIpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkRpc2FibGluZyBMMSBBU1BNXG4iKTsKQEAgLTM1NzYsOSArMzY5NCwxMSBAQAogCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCi0JLyogSWYgdGhlIGNvbnRyb2xsZXIgaGFzIEFNVCwgZG8gbm90IHNldCBEUlZfTE9BRCB1bnRpbCB0aGUgaW50ZXJmYWNlCisJLyoKKwkgKiBJZiB0aGUgY29udHJvbGxlciBoYXMgQU1ULCBkbyBub3Qgc2V0IERSVl9MT0FEIHVudGlsIHRoZSBpbnRlcmZhY2UKIAkgKiBpcyB1cC4gIEZvciBhbGwgb3RoZXIgY2FzZXMsIGxldCB0aGUgZi93IGtub3cgdGhhdCB0aGUgaC93IGlzIG5vdwotCSAqIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBkcml2ZXIuICovCisJICogdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIGRyaXZlci4KKwkgKi8KIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0FNVCkgfHwgIWUxMDAwZV9jaGVja19tbmdfbW9kZSgmYWRhcHRlci0+aHcpKQogCQllMTAwMF9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIApAQCAtMzY4OSw5ICszODA5LDExIEBACiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAKLQkvKiBJZiB0aGUgY29udHJvbGxlciBoYXMgQU1ULCBkbyBub3Qgc2V0IERSVl9MT0FEIHVudGlsIHRoZSBpbnRlcmZhY2UKKwkvKgorCSAqIElmIHRoZSBjb250cm9sbGVyIGhhcyBBTVQsIGRvIG5vdCBzZXQgRFJWX0xPQUQgdW50aWwgdGhlIGludGVyZmFjZQogCSAqIGlzIHVwLiAgRm9yIGFsbCBvdGhlciBjYXNlcywgbGV0IHRoZSBmL3cga25vdyB0aGF0IHRoZSBoL3cgaXMgbm93Ci0JICogdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIGRyaXZlci4gKi8KKwkgKiB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgZHJpdmVyLgorCSAqLwogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfQU1UKSB8fAogCSAgICAhZTEwMDBlX2NoZWNrX21uZ19tb2RlKCZhZGFwdGVyLT5odykpCiAJCWUxMDAwX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwpAQCAtMzcwMiw3ICszODI0LDcgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTMyIHBhcnRfbnVtOworCXUzMiBwYmFfbnVtOwogCiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwogCW5kZXZfaW5mbyhuZXRkZXYsICIoUENJIEV4cHJlc3M6Mi41R0IvczolcykgIgpAQCAtMzcxNywxMCArMzgzOSwxMCBAQAogCW5kZXZfaW5mbyhuZXRkZXYsICJJbnRlbChSKSBQUk8vJXMgTmV0d29yayBDb25uZWN0aW9uXG4iLAogCQkgIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lmZSkKIAkJICAgPyAiMTAvMTAwIiA6ICIxMDAwIik7Ci0JZTEwMDBlX3JlYWRfcGFydF9udW0oaHcsICZwYXJ0X251bSk7CisJZTEwMDBlX3JlYWRfcGJhX251bShodywgJnBiYV9udW0pOwogCW5kZXZfaW5mbyhuZXRkZXYsICJNQUM6ICVkLCBQSFk6ICVkLCBQQkEgTm86ICUwNngtJTAzeFxuIiwKIAkJICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwKLQkJICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKKwkJICAocGJhX251bSA+PiA4KSwgKHBiYV9udW0gJiAweGZmKSk7CiB9CiAKIC8qKgpAQCAtMzg1MiwxNiArMzk3NCwxNiBAQAogCW1lbWNweSgmaHctPm52bS5vcHMsIGVpLT5udm1fb3BzLCBzaXplb2YoaHctPm52bS5vcHMpKTsKIAltZW1jcHkoJmh3LT5waHkub3BzLCBlaS0+cGh5X29wcywgc2l6ZW9mKGh3LT5waHkub3BzKSk7CiAKLQllcnIgPSBlaS0+Z2V0X2ludmFyaWFudHMoYWRhcHRlcik7CisJZXJyID0gZWktPmdldF92YXJpYW50cyhhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9od19pbml0OwogCiAJaHctPm1hYy5vcHMuZ2V0X2J1c19pbmZvKCZhZGFwdGVyLT5odyk7CiAKLQlhZGFwdGVyLT5ody5waHkud2FpdF9mb3JfbGluayA9IDA7CisJYWRhcHRlci0+aHcucGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IDA7CiAKIAkvKiBDb3BwZXIgb3B0aW9ucyAqLwotCWlmIChhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJaWYgKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCWFkYXB0ZXItPmh3LnBoeS5tZGl4ID0gQVVUT19BTExfTU9ERVM7CiAJCWFkYXB0ZXItPmh3LnBoeS5kaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPSAwOwogCQlhZGFwdGVyLT5ody5waHkubXNfdHlwZSA9IGUxMDAwX21zX2h3X2RlZmF1bHQ7CkBAIC0zODg1LDE1ICs0MDA3LDE5IEBACiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0JLyogV2Ugc2hvdWxkIG5vdCBiZSB1c2luZyBMTFRYIGFueW1vcmUsIGJ1dCB3ZSBhcmUgc3RpbGwgVFggZmFzdGVyIHdpdGgKLQkgKiBpdC4gKi8KKwkvKgorCSAqIFdlIHNob3VsZCBub3QgYmUgdXNpbmcgTExUWCBhbnltb3JlLCBidXQgd2UgYXJlIHN0aWxsIFR4IGZhc3RlciB3aXRoCisJICogaXQuCisJICovCiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CiAKIAlpZiAoZTEwMDBlX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odykpCiAJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfTU5HX1BUX0VOQUJMRUQ7CiAKLQkvKiBiZWZvcmUgcmVhZGluZyB0aGUgTlZNLCByZXNldCB0aGUgY29udHJvbGxlciB0bwotCSAqIHB1dCB0aGUgZGV2aWNlIGluIGEga25vd24gZ29vZCBzdGFydGluZyBzdGF0ZSAqLworCS8qCisJICogYmVmb3JlIHJlYWRpbmcgdGhlIE5WTSwgcmVzZXQgdGhlIGNvbnRyb2xsZXIgdG8KKwkgKiBwdXQgdGhlIGRldmljZSBpbiBhIGtub3duIGdvb2Qgc3RhcnRpbmcgc3RhdGUKKwkgKi8KIAlhZGFwdGVyLT5ody5tYWMub3BzLnJlc2V0X2h3KCZhZGFwdGVyLT5odyk7CiAKIAkvKgpAQCAtMzk0Myw4ICs0MDY5LDggQEAKIAkvKiBJbml0aWFsaXplIGxpbmsgcGFyYW1ldGVycy4gVXNlciBjYW4gY2hhbmdlIHRoZW0gd2l0aCBldGh0b29sICovCiAJYWRhcHRlci0+aHcubWFjLmF1dG9uZWcgPSAxOwogCWFkYXB0ZXItPmZjX2F1dG9uZWcgPSAxOwotCWFkYXB0ZXItPmh3Lm1hYy5vcmlnaW5hbF9mYyA9IGUxMDAwX2ZjX2RlZmF1bHQ7Ci0JYWRhcHRlci0+aHcubWFjLmZjID0gZTEwMDBfZmNfZGVmYXVsdDsKKwlhZGFwdGVyLT5ody5mYy5vcmlnaW5hbF90eXBlID0gZTEwMDBfZmNfZGVmYXVsdDsKKwlhZGFwdGVyLT5ody5mYy50eXBlID0gZTEwMDBfZmNfZGVmYXVsdDsKIAlhZGFwdGVyLT5ody5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gMHgyZjsKIAogCS8qIHJpbmcgc2l6ZSBkZWZhdWx0cyAqLwpAQCAtMzk4Nyw5ICs0MTEzLDExIEBACiAJLyogcmVzZXQgdGhlIGhhcmR3YXJlIHdpdGggdGhlIG5ldyBzZXR0aW5ncyAqLwogCWUxMDAwZV9yZXNldChhZGFwdGVyKTsKIAotCS8qIElmIHRoZSBjb250cm9sbGVyIGhhcyBBTVQsIGRvIG5vdCBzZXQgRFJWX0xPQUQgdW50aWwgdGhlIGludGVyZmFjZQorCS8qCisJICogSWYgdGhlIGNvbnRyb2xsZXIgaGFzIEFNVCwgZG8gbm90IHNldCBEUlZfTE9BRCB1bnRpbCB0aGUgaW50ZXJmYWNlCiAJICogaXMgdXAuICBGb3IgYWxsIG90aGVyIGNhc2VzLCBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgvdyBpcyBub3cKLQkgKiB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgZHJpdmVyLiAqLworCSAqIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBkcml2ZXIuCisJICovCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19BTVQpIHx8CiAJICAgICFlMTAwMGVfY2hlY2tfbW5nX21vZGUoJmFkYXB0ZXItPmh3KSkKIAkJZTEwMDBfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CkBAIC00MDQ2LDE4ICs0MTc0LDIwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQkvKiBmbHVzaF9zY2hlZHVsZWQgd29yayBtYXkgcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGFzaywgc28KLQkgKiBleHBsaWNpdGx5IGRpc2FibGUgd2F0Y2hkb2cgdGFza3MgZnJvbSBiZWluZyByZXNjaGVkdWxlZCAgKi8KKwkvKgorCSAqIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbworCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkCisJICovCiAJc2V0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+cGh5X2luZm9fdGltZXIpOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCWUxMDAwX3JlbGVhc2VfbWFuYWdlYWJpbGl0eShhZGFwdGVyKTsKLQotCS8qIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCi0JICogd291bGQgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGluIGNsb3NlIGFuZCBpcyByZWR1bmRhbnQuICovCisJLyoKKwkgKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcworCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LgorCSAqLwogCWUxMDAwX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CkBAIC00MDk1LDEzICs0MjI1LDE2IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTcxRUJfU0VSREVTX0RVQUwpLCBib2FyZF84MjU3MSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFU19RVUFEKSwgYm9hcmRfODI1NzEgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzFQVF9RVUFEX0NPUFBFUiksIGJvYXJkXzgyNTcxIH0sCisKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzJFSSksIGJvYXJkXzgyNTcyIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTcyRUlfQ09QUEVSKSwgYm9hcmRfODI1NzIgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzJFSV9GSUJFUiksIGJvYXJkXzgyNTcyIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTcyRUlfU0VSREVTKSwgYm9hcmRfODI1NzIgfSwKKwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3M0UpLCBib2FyZF84MjU3MyB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3M0VfSUFNVCksIGJvYXJkXzgyNTczIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTczTCksIGJvYXJkXzgyNTczIH0sCisKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVCksCiAJICBib2FyZF84MDAwM2VzMmxhbiB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9DT1BQRVJfU1BUKSwKQEAgLTQxMTAsNiArNDI0Myw3IEBACiAJICBib2FyZF84MDAwM2VzMmxhbiB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfU1BUKSwKIAkgIGJvYXJkXzgwMDAzZXMybGFuIH0sCisKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfSUNIOF9JRkUpLCBib2FyZF9pY2g4bGFuIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEX0lDSDhfSUZFX0cpLCBib2FyZF9pY2g4bGFuIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEX0lDSDhfSUZFX0dUKSwgYm9hcmRfaWNoOGxhbiB9LApAQCAtNDExNyw2ICs0MjUxLDcgQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfSUNIOF9JR1BfQyksIGJvYXJkX2ljaDhsYW4gfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTSksIGJvYXJkX2ljaDhsYW4gfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTV9BTVQpLCBib2FyZF9pY2g4bGFuIH0sCisKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfSUNIOV9JRkUpLCBib2FyZF9pY2g5bGFuIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEX0lDSDlfSUZFX0cpLCBib2FyZF9pY2g5bGFuIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEX0lDSDlfSUZFX0dUKSwgYm9hcmRfaWNoOWxhbiB9LApAQCAtNDEzNCw3ICs0MjY5LDcgQEAKIAkucHJvYmUgICAgPSBlMTAwMF9wcm9iZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChlMTAwMF9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQotCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLworCS8qIFBvd2VyIE1hbmFnZW1lbnQgSG9va3MgKi8KIAkuc3VzcGVuZCAgPSBlMTAwMF9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGUxMDAwX3Jlc3VtZSwKICNlbmRpZgpAQCAtNDE1Myw3ICs0Mjg4LDcgQEAKIAlpbnQgcmV0OwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlbChSKSBQUk8vMTAwMCBOZXR3b3JrIERyaXZlciAtICVzXG4iLAogCSAgICAgICBlMTAwMGVfZHJpdmVyX25hbWUsIGUxMDAwZV9kcml2ZXJfdmVyc2lvbik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvcHlyaWdodCAoYykgMTk5OS0yMDA3IEludGVsIENvcnBvcmF0aW9uLlxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggSW50ZWwgQ29ycG9yYXRpb24uXG4iLAogCSAgICAgICBlMTAwMGVfZHJpdmVyX25hbWUpOwogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmUxMDAwX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9wYXJhbS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BhcmFtLmMKaW5kZXggZGYyNjZjMy4uYTY2YjkyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BhcmFtLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIFBSTy8xMDAwIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzAsNyArMzAsOCBAQAogCiAjaW5jbHVkZSAiZTEwMDAuaCIKIAotLyogVGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gYWRqdXN0IHRoZQorLyoKKyAqIFRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIGFkanVzdCB0aGUKICAqIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzIHRoYXQgdGhlIGRyaXZlciBjYW4gbWFuYWdlLgogICovCiAKQEAgLTQ2LDcgKzQ3LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoY29weWJyZWFrLAogCSJNYXhpbXVtIHNpemUgb2YgcGFja2V0IHRoYXQgaXMgY29waWVkIHRvIGEgbmV3IGJ1ZmZlciBvbiByZWNlaXZlIik7CiAKLS8qIEFsbCBwYXJhbWV0ZXJzIGFyZSB0cmVhdGVkIHRoZSBzYW1lLCBhcyBhbiBpbnRlZ2VyIGFycmF5IG9mIHZhbHVlcy4KKy8qCisgKiBBbGwgcGFyYW1ldGVycyBhcmUgdHJlYXRlZCB0aGUgc2FtZSwgYXMgYW4gaW50ZWdlciBhcnJheSBvZiB2YWx1ZXMuCiAgKiBUaGlzIG1hY3JvIGp1c3QgcmVkdWNlcyB0aGUgbmVlZCB0byByZXBlYXQgdGhlIHNhbWUgZGVjbGFyYXRpb24gY29kZQogICogb3ZlciBhbmQgb3ZlciAocGx1cyB0aGlzIGhlbHBzIHRvIGF2b2lkIHR5cG8gYnVncykuCiAgKi8KQEAgLTYwLDggKzYyLDkgQEAKIAlNT0RVTEVfUEFSTV9ERVNDKFgsIGRlc2MpOwogCiAKLS8qIFRyYW5zbWl0IEludGVycnVwdCBEZWxheSBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMKLSAqICBUeCBpbnRlcnJ1cHQgZGVsYXkgbmVlZHMgdG8gdHlwaWNhbGx5IGJlIHNldCB0byBzb21ldGhpbmcgbm9uIHplcm8KKy8qCisgKiBUcmFuc21pdCBJbnRlcnJ1cHQgRGVsYXkgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzCisgKiBUeCBpbnRlcnJ1cHQgZGVsYXkgbmVlZHMgdG8gdHlwaWNhbGx5IGJlIHNldCB0byBzb21ldGhpbmcgbm9uIHplcm8KICAqCiAgKiBWYWxpZCBSYW5nZTogMC02NTUzNQogICovCkBAIC03MCw3ICs3Myw4IEBACiAjZGVmaW5lIE1BWF9UWERFTEFZIDB4RkZGRgogI2RlZmluZSBNSU5fVFhERUxBWSAwCiAKLS8qIFRyYW5zbWl0IEFic29sdXRlIEludGVycnVwdCBEZWxheSBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMKKy8qCisgKiBUcmFuc21pdCBBYnNvbHV0ZSBJbnRlcnJ1cHQgRGVsYXkgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzCiAgKgogICogVmFsaWQgUmFuZ2U6IDAtNjU1MzUKICAqLwpAQCAtNzksOCArODMsOSBAQAogI2RlZmluZSBNQVhfVFhBQlNERUxBWSAweEZGRkYKICNkZWZpbmUgTUlOX1RYQUJTREVMQVkgMAogCi0vKiBSZWNlaXZlIEludGVycnVwdCBEZWxheSBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMKLSAqICAgaGFyZHdhcmUgd2lsbCBsaWtlbHkgaGFuZyBpZiB5b3Ugc2V0IHRoaXMgdG8gYW55dGhpbmcgYnV0IHplcm8uCisvKgorICogUmVjZWl2ZSBJbnRlcnJ1cHQgRGVsYXkgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzCisgKiBoYXJkd2FyZSB3aWxsIGxpa2VseSBoYW5nIGlmIHlvdSBzZXQgdGhpcyB0byBhbnl0aGluZyBidXQgemVyby4KICAqCiAgKiBWYWxpZCBSYW5nZTogMC02NTUzNQogICovCkBAIC04OSw3ICs5NCw4IEBACiAjZGVmaW5lIE1BWF9SWERFTEFZIDB4RkZGRgogI2RlZmluZSBNSU5fUlhERUxBWSAwCiAKLS8qIFJlY2VpdmUgQWJzb2x1dGUgSW50ZXJydXB0IERlbGF5IGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcworLyoKKyAqIFJlY2VpdmUgQWJzb2x1dGUgSW50ZXJydXB0IERlbGF5IGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcwogICoKICAqIFZhbGlkIFJhbmdlOiAwLTY1NTM1CiAgKi8KQEAgLTk4LDcgKzEwNCw4IEBACiAjZGVmaW5lIE1BWF9SWEFCU0RFTEFZIDB4RkZGRgogI2RlZmluZSBNSU5fUlhBQlNERUxBWSAwCiAKLS8qIEludGVycnVwdCBUaHJvdHRsZSBSYXRlIChpbnRlcnJ1cHRzL3NlYykKKy8qCisgKiBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAoaW50ZXJydXB0cy9zZWMpCiAgKgogICogVmFsaWQgUmFuZ2U6IDEwMC0xMDAwMDAgKDA9b2ZmLCAxPWR5bmFtaWMsIDM9ZHluYW1pYyBjb25zZXJ2YXRpdmUpCiAgKi8KQEAgLTEwNyw3ICsxMTQsOCBAQAogI2RlZmluZSBNQVhfSVRSIDEwMDAwMAogI2RlZmluZSBNSU5fSVRSIDEwMAogCi0vKiBFbmFibGUgU21hcnQgUG93ZXIgRG93biBvZiB0aGUgUEhZCisvKgorICogRW5hYmxlIFNtYXJ0IFBvd2VyIERvd24gb2YgdGhlIFBIWQogICoKICAqIFZhbGlkIFJhbmdlOiAwLCAxCiAgKgpAQCAtMTE1LDcgKzEyMyw4IEBACiAgKi8KIEUxMDAwX1BBUkFNKFNtYXJ0UG93ZXJEb3duRW5hYmxlLCAiRW5hYmxlIFBIWSBzbWFydCBwb3dlciBkb3duIik7CiAKLS8qIEVuYWJsZSBLdW1lcmFuIExvY2sgTG9zcyB3b3JrYXJvdW5kCisvKgorICogRW5hYmxlIEt1bWVyYW4gTG9jayBMb3NzIHdvcmthcm91bmQKICAqCiAgKiBWYWxpZCBSYW5nZTogMCwgMQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwppbmRleCBmYzZmZWUxLi4zYTQ1NzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCBQUk8vMTAwMCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTEyMSw3ICsxMjEsNyBAQAogICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCiAgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHJlYWQgZGF0YQogICoKLSAqICBSZWFkcyB0aGUgTURJIGNvbnRyb2wgcmVnc2l0ZXIgaW4gdGhlIFBIWSBhdCBvZmZzZXQgYW5kIHN0b3JlcyB0aGUKKyAqICBSZWFkcyB0aGUgTURJIGNvbnRyb2wgcmVnaXN0ZXIgaW4gdGhlIFBIWSBhdCBvZmZzZXQgYW5kIHN0b3JlcyB0aGUKICAqICBpbmZvcm1hdGlvbiByZWFkIHRvIGRhdGEuCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19tZGljKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKQEAgLTEzNCw3ICsxMzQsOCBAQAogCQlyZXR1cm4gLUUxMDAwX0VSUl9QQVJBTTsKIAl9CiAKLQkvKiBTZXQgdXAgT3AtY29kZSwgUGh5IEFkZHJlc3MsIGFuZCByZWdpc3RlciBvZmZzZXQgaW4gdGhlIE1ESQorCS8qCisJICogU2V0IHVwIE9wLWNvZGUsIFBoeSBBZGRyZXNzLCBhbmQgcmVnaXN0ZXIgb2Zmc2V0IGluIHRoZSBNREkKIAkgKiBDb250cm9sIHJlZ2lzdGVyLiAgVGhlIE1BQyB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZQogCSAqIFBIWSB0byByZXRyaWV2ZSB0aGUgZGVzaXJlZCBkYXRhLgogCSAqLwpAQCAtMTQ0LDcgKzE0NSwxMSBAQAogCiAJZXczMihNRElDLCBtZGljKTsKIAotCS8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkIGNvbXBsZXRlZCAqLworCS8qCisJICogUG9sbCB0aGUgcmVhZHkgYml0IHRvIHNlZSBpZiB0aGUgTURJIHJlYWQgY29tcGxldGVkCisJICogSW5jcmVhc2luZyB0aGUgdGltZSBvdXQgYXMgdGVzdGluZyBzaG93ZWQgZmFpbHVyZXMgd2l0aAorCSAqIHRoZSBsb3dlciB0aW1lIG91dAorCSAqLwogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAJCXVkZWxheSg1MCk7CiAJCW1kaWMgPSBlcjMyKE1ESUMpOwpAQCAtMTgyLDcgKzE4Nyw4IEBACiAJCXJldHVybiAtRTEwMDBfRVJSX1BBUkFNOwogCX0KIAotCS8qIFNldCB1cCBPcC1jb2RlLCBQaHkgQWRkcmVzcywgYW5kIHJlZ2lzdGVyIG9mZnNldCBpbiB0aGUgTURJCisJLyoKKwkgKiBTZXQgdXAgT3AtY29kZSwgUGh5IEFkZHJlc3MsIGFuZCByZWdpc3RlciBvZmZzZXQgaW4gdGhlIE1ESQogCSAqIENvbnRyb2wgcmVnaXN0ZXIuICBUaGUgTUFDIHdpbGwgdGFrZSBjYXJlIG9mIGludGVyZmFjaW5nIHdpdGggdGhlCiAJICogUEhZIHRvIHJldHJpZXZlIHRoZSBkZXNpcmVkIGRhdGEuCiAJICovCkBAIC00MDksMTQgKzQxNSwxNSBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfZGF0YTsKIAotCS8qIEVuYWJsZSBDUlMgb24gVFguIFRoaXMgbXVzdCBiZSBzZXQgZm9yIGhhbGYtZHVwbGV4IG9wZXJhdGlvbi4gKi8KKwkvKiBFbmFibGUgQ1JTIG9uIFR4LiBUaGlzIG11c3QgYmUgc2V0IGZvciBoYWxmLWR1cGxleCBvcGVyYXRpb24uICovCiAJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAogCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfQVNTRVJUX0NSU19PTl9UWDsKIAotCS8qIE9wdGlvbnM6CisJLyoKKwkgKiBPcHRpb25zOgogCSAqICAgTURJL01ESS1YID0gMCAoZGVmYXVsdCkKIAkgKiAgIDAgLSBBdXRvIGZvciBhbGwgc3BlZWRzCiAJICogICAxIC0gTURJIG1vZGUKQEAgLTQ0MSw3ICs0NDgsOCBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBPcHRpb25zOgorCS8qCisJICogT3B0aW9uczoKIAkgKiAgIGRpc2FibGVfcG9sYXJpdHlfY29ycmVjdGlvbiA9IDAgKGRlZmF1bHQpCiAJICogICAgICAgQXV0b21hdGljIENvcnJlY3Rpb24gZm9yIFJldmVyc2VkIENhYmxlIFBvbGFyaXR5CiAJICogICAwIC0gRGlzYWJsZWQKQEAgLTQ1Niw3ICs0NjQsOCBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAogCWlmIChwaHktPnJldmlzaW9uIDwgNCkgewotCQkvKiBGb3JjZSBUWF9DTEsgaW4gdGhlIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyCisJCS8qCisJCSAqIEZvcmNlIFRYX0NMSyBpbiB0aGUgRXh0ZW5kZWQgUEhZIFNwZWNpZmljIENvbnRyb2wgUmVnaXN0ZXIKIAkJICogdG8gMjVNSHogY2xvY2suCiAJCSAqLwogCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwpAQCAtNTQzLDE5ICs1NTIsMjEgQEAKIAogCS8qIHNldCBhdXRvLW1hc3RlciBzbGF2ZSByZXNvbHV0aW9uIHNldHRpbmdzICovCiAJaWYgKGh3LT5tYWMuYXV0b25lZykgewotCQkvKiB3aGVuIGF1dG9uZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50IGlzIG9ubHkgMTAwME1icHMgdGhlbiB3ZQorCQkvKgorCQkgKiB3aGVuIGF1dG9uZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50IGlzIG9ubHkgMTAwME1icHMgdGhlbiB3ZQogCQkgKiBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkIGFuZCBlbmFibGUgQXV0byBNYXN0ZXJTbGF2ZQotCQkgKiByZXNvbHV0aW9uIGFzIGhhcmR3YXJlIGRlZmF1bHQuICovCisJCSAqIHJlc29sdXRpb24gYXMgaGFyZHdhcmUgZGVmYXVsdC4KKwkJICovCiAJCWlmIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7CiAJCQkvKiBEaXNhYmxlIFNtYXJ0U3BlZWQgKi8KIAkJCXJldF92YWwgPSBlMWVfcnBoeShodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCQkgICAgICZkYXRhKTsKKwkJCQkJICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJcmV0dXJuIHJldF92YWw7CiAKIAkJCWRhdGEgJj0gfklHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7CiAJCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICBkYXRhKTsKKwkJCQkJICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlyZXR1cm4gcmV0X3ZhbDsKIApAQCAtNjMwLDE0ICs2NDEsMTYgQEAKIAkJCXJldHVybiByZXRfdmFsOwogCX0KIAotCS8qIE5lZWQgdG8gcGFyc2UgYm90aCBhdXRvbmVnX2FkdmVydGlzZWQgYW5kIGZjIGFuZCBzZXQgdXAKKwkvKgorCSAqIE5lZWQgdG8gcGFyc2UgYm90aCBhdXRvbmVnX2FkdmVydGlzZWQgYW5kIGZjIGFuZCBzZXQgdXAKIAkgKiB0aGUgYXBwcm9wcmlhdGUgUEhZIHJlZ2lzdGVycy4gIEZpcnN0IHdlIHdpbGwgcGFyc2UgZm9yCiAJICogYXV0b25lZ19hZHZlcnRpc2VkIHNvZnR3YXJlIG92ZXJyaWRlLiAgU2luY2Ugd2UgY2FuIGFkdmVydGlzZQogCSAqIGEgcGxldGhvcmEgb2YgY29tYmluYXRpb25zLCB3ZSBuZWVkIHRvIGNoZWNrIGVhY2ggYml0CiAJICogaW5kaXZpZHVhbGx5LgogCSAqLwogCi0JLyogRmlyc3Qgd2UgY2xlYXIgYWxsIHRoZSAxMC8xMDAgbWIgc3BlZWQgYml0cyBpbiB0aGUgQXV0by1OZWcKKwkvKgorCSAqIEZpcnN0IHdlIGNsZWFyIGFsbCB0aGUgMTAvMTAwIG1iIHNwZWVkIGJpdHMgaW4gdGhlIEF1dG8tTmVnCiAJICogQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAoQWRkcmVzcyA0KSBhbmQgdGhlIDEwMDAgbWIgc3BlZWQgYml0cyBpbgogCSAqIHRoZSAgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLgogCSAqLwpAQCAtNjgzLDcgKzY5Niw4IEBACiAJCW1paV8xMDAwdF9jdHJsX3JlZyB8PSBDUl8xMDAwVF9GRF9DQVBTOwogCX0KIAotCS8qIENoZWNrIGZvciBhIHNvZnR3YXJlIG92ZXJyaWRlIG9mIHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MsIGFuZAorCS8qCisJICogQ2hlY2sgZm9yIGEgc29mdHdhcmUgb3ZlcnJpZGUgb2YgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncywgYW5kCiAJICogc2V0dXAgdGhlIFBIWSBhZHZlcnRpc2VtZW50IHJlZ2lzdGVycyBhY2NvcmRpbmdseS4gIElmCiAJICogYXV0by1uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB0aGVuIHNvZnR3YXJlIHdpbGwgaGF2ZSB0byBzZXQgdGhlCiAJICogIlBBVVNFIiBiaXRzIHRvIHRoZSBjb3JyZWN0IHZhbHVlIGluIHRoZSBBdXRvLU5lZ290aWF0aW9uCkBAIC02OTYsMzggKzcxMCw0MiBAQAogCSAqCSAgYnV0IG5vdCBzZW5kIHBhdXNlIGZyYW1lcykuCiAJICogICAgICAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcwogCSAqCSAgYnV0IHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgotCSAqICAgICAgMzogIEJvdGggUnggYW5kIFRYIGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiAgICAgIDM6ICBCb3RoIFJ4IGFuZCBUeCBmbG93IGNvbnRyb2wgKHN5bW1ldHJpYykgYXJlIGVuYWJsZWQuCiAJICogIG90aGVyOiAgTm8gc29mdHdhcmUgb3ZlcnJpZGUuICBUaGUgZmxvdyBjb250cm9sIGNvbmZpZ3VyYXRpb24KIAkgKgkgIGluIHRoZSBFRVBST00gaXMgdXNlZC4KIAkgKi8KLQlzd2l0Y2ggKGh3LT5tYWMuZmMpIHsKKwlzd2l0Y2ggKGh3LT5mYy50eXBlKSB7CiAJY2FzZSBlMTAwMF9mY19ub25lOgotCQkvKiBGbG93IGNvbnRyb2wgKFJYICYgVFgpIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgYQorCQkvKgorCQkgKiBGbG93IGNvbnRyb2wgKFJ4ICYgVHgpIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgYQogCQkgKiBzb2Z0d2FyZSBvdmVyLXJpZGUuCiAJCSAqLwogCQltaWlfYXV0b25lZ19hZHZfcmVnICY9IH4oTldBWV9BUl9BU01fRElSIHwgTldBWV9BUl9QQVVTRSk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfZmNfcnhfcGF1c2U6Ci0JCS8qIFJYIEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgVFggRmxvdyBjb250cm9sIGlzCisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgVHggRmxvdyBjb250cm9sIGlzCiAJCSAqIGRpc2FibGVkLCBieSBhIHNvZnR3YXJlIG92ZXItcmlkZS4KLQkJICovCi0JCS8qIFNpbmNlIHRoZXJlIHJlYWxseSBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUKLQkJICogY2FwYWJsZSBvZiBSWCBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlCi0JCSAqIHN1cHBvcnQgYm90aCBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUlggUEFVU0UuICBMYXRlcgorCQkgKgorCQkgKiBTaW5jZSB0aGVyZSByZWFsbHkgaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlCisJCSAqIGNhcGFibGUgb2YgUnggUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZQorCQkgKiBzdXBwb3J0IGJvdGggc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJ4IFBBVVNFLiAgTGF0ZXIKIAkJICogKGluIGUxMDAwZV9jb25maWdfZmNfYWZ0ZXJfbGlua191cCkgd2Ugd2lsbCBkaXNhYmxlIHRoZQogCQkgKiBodydzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCiAJCSAqLwogCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IChOV0FZX0FSX0FTTV9ESVIgfCBOV0FZX0FSX1BBVVNFKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF9mY190eF9wYXVzZToKLQkJLyogVFggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSWCBGbG93IGNvbnRyb2wgaXMKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKIAkJICogZGlzYWJsZWQsIGJ5IGEgc29mdHdhcmUgb3Zlci1yaWRlLgogCQkgKi8KIAkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSX0FTTV9ESVI7CiAJCW1paV9hdXRvbmVnX2Fkdl9yZWcgJj0gfk5XQVlfQVJfUEFVU0U7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfZmNfZnVsbDoKLQkJLyogRmxvdyBjb250cm9sIChib3RoIFJYIGFuZCBUWCkgaXMgZW5hYmxlZCBieSBhIHNvZnR3YXJlCisJCS8qCisJCSAqIEZsb3cgY29udHJvbCAoYm90aCBSeCBhbmQgVHgpIGlzIGVuYWJsZWQgYnkgYSBzb2Z0d2FyZQogCQkgKiBvdmVyLXJpZGUuCiAJCSAqLwogCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IChOV0FZX0FSX0FTTV9ESVIgfCBOV0FZX0FSX1BBVVNFKTsKQEAgLTc1OCw3ICs3NzYsNyBAQAogICogIFBlcmZvcm1zIGluaXRpYWwgYm91bmRzIGNoZWNraW5nIG9uIGF1dG9uZWcgYWR2ZXJ0aXNlbWVudCBwYXJhbWV0ZXIsIHRoZW4KICAqICBjb25maWd1cmUgdG8gYWR2ZXJ0aXNlIHRoZSBmdWxsIGNhcGFiaWxpdHkuICBTZXR1cCB0aGUgUEhZIHRvIGF1dG9uZWcKICAqICBhbmQgcmVzdGFydCB0aGUgbmVnb3RpYXRpb24gcHJvY2VzcyBiZXR3ZWVuIHRoZSBsaW5rIHBhcnRuZXIuICBJZgotICogIHdhaXRfZm9yX2xpbmssIHRoZW4gd2FpdCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBiZWZvcmUgZXhpdGluZy4KKyAqICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUsIHRoZW4gd2FpdCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBiZWZvcmUgZXhpdGluZy4KICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfY29wcGVyX2xpbmtfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewpAQCAtNzY2LDEyICs3ODQsMTQgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2N0cmw7CiAKLQkvKiBQZXJmb3JtIHNvbWUgYm91bmRzIGNoZWNraW5nIG9uIHRoZSBhdXRvbmVnIGFkdmVydGlzZW1lbnQKKwkvKgorCSAqIFBlcmZvcm0gc29tZSBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGF1dG9uZWcgYWR2ZXJ0aXNlbWVudAogCSAqIHBhcmFtZXRlci4KIAkgKi8KIAlwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmPSBwaHktPmF1dG9uZWdfbWFzazsKIAotCS8qIElmIGF1dG9uZWdfYWR2ZXJ0aXNlZCBpcyB6ZXJvLCB3ZSBhc3N1bWUgaXQgd2FzIG5vdCBkZWZhdWx0ZWQKKwkvKgorCSAqIElmIGF1dG9uZWdfYWR2ZXJ0aXNlZCBpcyB6ZXJvLCB3ZSBhc3N1bWUgaXQgd2FzIG5vdCBkZWZhdWx0ZWQKIAkgKiBieSB0aGUgY2FsbGluZyBjb2RlIHNvIHdlIHNldCB0byBhZHZlcnRpc2UgZnVsbCBjYXBhYmlsaXR5LgogCSAqLwogCWlmIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSAwKQpAQCAtNzg1LDcgKzgwNSw4IEBACiAJfQogCWh3X2RiZyhodywgIlJlc3RhcnRpbmcgQXV0by1OZWdcbiIpOwogCi0JLyogUmVzdGFydCBhdXRvLW5lZ290aWF0aW9uIGJ5IHNldHRpbmcgdGhlIEF1dG8gTmVnIEVuYWJsZSBiaXQgYW5kCisJLyoKKwkgKiBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gYnkgc2V0dGluZyB0aGUgQXV0byBOZWcgRW5hYmxlIGJpdCBhbmQKIAkgKiB0aGUgQXV0byBOZWcgUmVzdGFydCBiaXQgaW4gdGhlIFBIWSBjb250cm9sIHJlZ2lzdGVyLgogCSAqLwogCXJldF92YWwgPSBlMWVfcnBoeShodywgUEhZX0NPTlRST0wsICZwaHlfY3RybCk7CkBAIC03OTcsMTAgKzgxOCwxMSBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCS8qIERvZXMgdGhlIHVzZXIgd2FudCB0byB3YWl0IGZvciBBdXRvLU5lZyB0byBjb21wbGV0ZSBoZXJlLCBvcgorCS8qCisJICogRG9lcyB0aGUgdXNlciB3YW50IHRvIHdhaXQgZm9yIEF1dG8tTmVnIHRvIGNvbXBsZXRlIGhlcmUsIG9yCiAJICogY2hlY2sgYXQgYSBsYXRlciB0aW1lIChmb3IgZXhhbXBsZSwgY2FsbGJhY2sgcm91dGluZSkuCiAJICovCi0JaWYgKHBoeS0+d2FpdF9mb3JfbGluaykgeworCWlmIChwaHktPmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewogCQlyZXRfdmFsID0gZTEwMDBfd2FpdF9hdXRvbmVnKGh3KTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZyhodywgIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yICIKQEAgLTgyOSwxNCArODUxLDE4IEBACiAJYm9vbCBsaW5rOwogCiAJaWYgKGh3LT5tYWMuYXV0b25lZykgewotCQkvKiBTZXR1cCBhdXRvbmVnIGFuZCBmbG93IGNvbnRyb2wgYWR2ZXJ0aXNlbWVudCBhbmQgcGVyZm9ybQotCQkgKiBhdXRvbmVnb3RpYXRpb24uICovCisJCS8qCisJCSAqIFNldHVwIGF1dG9uZWcgYW5kIGZsb3cgY29udHJvbCBhZHZlcnRpc2VtZW50IGFuZCBwZXJmb3JtCisJCSAqIGF1dG9uZWdvdGlhdGlvbi4KKwkJICovCiAJCXJldF92YWwgPSBlMTAwMF9jb3BwZXJfbGlua19hdXRvbmVnKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAl9IGVsc2UgewotCQkvKiBQSFkgd2lsbCBiZSBzZXQgdG8gMTBILCAxMEYsIDEwMEggb3IgMTAwRgotCQkgKiBkZXBlbmRpbmcgb24gdXNlciBzZXR0aW5ncy4gKi8KKwkJLyoKKwkJICogUEhZIHdpbGwgYmUgc2V0IHRvIDEwSCwgMTBGLCAxMDBIIG9yIDEwMEYKKwkJICogZGVwZW5kaW5nIG9uIHVzZXIgc2V0dGluZ3MuCisJCSAqLwogCQlod19kYmcoaHcsICJGb3JjaW5nIFNwZWVkIGFuZCBEdXBsZXhcbiIpOwogCQlyZXRfdmFsID0gZTEwMDBfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleChodyk7CiAJCWlmIChyZXRfdmFsKSB7CkBAIC04NDUsNyArODcxLDggQEAKIAkJfQogCX0KIAotCS8qIENoZWNrIGxpbmsgc3RhdHVzLiBXYWl0IHVwIHRvIDEwMCBtaWNyb3NlY29uZHMgZm9yIGxpbmsgdG8gYmVjb21lCisJLyoKKwkgKiBDaGVjayBsaW5rIHN0YXR1cy4gV2FpdCB1cCB0byAxMDAgbWljcm9zZWNvbmRzIGZvciBsaW5rIHRvIGJlY29tZQogCSAqIHZhbGlkLgogCSAqLwogCXJldF92YWwgPSBlMTAwMGVfcGh5X2hhc19saW5rX2dlbmVyaWMoaHcsCkBAIC04OTEsNyArOTE4LDggQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQkvKiBDbGVhciBBdXRvLUNyb3Nzb3ZlciB0byBmb3JjZSBNREkgbWFudWFsbHkuICBJR1AgcmVxdWlyZXMgTURJCisJLyoKKwkgKiBDbGVhciBBdXRvLUNyb3Nzb3ZlciB0byBmb3JjZSBNREkgbWFudWFsbHkuICBJR1AgcmVxdWlyZXMgTURJCiAJICogZm9yY2VkIHdoZW5ldmVyIHNwZWVkIGFuZCBkdXBsZXggYXJlIGZvcmNlZC4KIAkgKi8KIAlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgJnBoeV9kYXRhKTsKQEAgLTkwOSw3ICs5MzcsNyBAQAogCiAJdWRlbGF5KDEpOwogCi0JaWYgKHBoeS0+d2FpdF9mb3JfbGluaykgeworCWlmIChwaHktPmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewogCQlod19kYmcoaHcsICJXYWl0aW5nIGZvciBmb3JjZWQgc3BlZWQvZHVwbGV4IGxpbmsgb24gSUdQIHBoeS5cbiIpOwogCiAJCXJldF92YWwgPSBlMTAwMGVfcGh5X2hhc19saW5rX2dlbmVyaWMoaHcsCkBAIC05NDEsNyArOTY5LDcgQEAKICAqICBDYWxscyB0aGUgUEhZIHNldHVwIGZ1bmN0aW9uIHRvIGZvcmNlIHNwZWVkIGFuZCBkdXBsZXguICBDbGVhcnMgdGhlCiAgKiAgYXV0by1jcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiAgUmVzZXRzIHRoZSBQSFkgdG8gY29tbWl0IHRoZQogICogIGNoYW5nZXMuICBJZiB0aW1lIGV4cGlyZXMgd2hpbGUgd2FpdGluZyBmb3IgbGluayB1cCwgd2UgcmVzZXQgdGhlIERTUC4KLSAqICBBZnRlciByZXNldCwgVFhfQ0xLIGFuZCBDUlMgb24gVFggbXVzdCBiZSBzZXQuICBSZXR1cm4gc3VjY2Vzc2Z1bCB1cG9uCisgKiAgQWZ0ZXIgcmVzZXQsIFRYX0NMSyBhbmQgQ1JTIG9uIFR4IG11c3QgYmUgc2V0LiAgUmV0dXJuIHN1Y2Nlc3NmdWwgdXBvbgogICogIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgZWxzZSByZXR1cm4gY29ycmVzcG9uZGluZyBlcnJvciBjb2RlLgogICoqLwogczMyIGUxMDAwZV9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204OChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQpAQCAtOTUxLDcgKzk3OSw4IEBACiAJdTE2IHBoeV9kYXRhOwogCWJvb2wgbGluazsKIAotCS8qIENsZWFyIEF1dG8tQ3Jvc3NvdmVyIHRvIGZvcmNlIE1ESSBtYW51YWxseS4gIE04OEUxMDAwIHJlcXVpcmVzIE1ESQorCS8qCisJICogQ2xlYXIgQXV0by1Dcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiAgTTg4RTEwMDAgcmVxdWlyZXMgTURJCiAJICogZm9yY2VkIHdoZW5ldmVyIHNwZWVkIGFuZCBkdXBsZXggYXJlIGZvcmNlZC4KIAkgKi8KIAlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CkBAIC05ODAsNyArMTAwOSw3IEBACiAKIAl1ZGVsYXkoMSk7CiAKLQlpZiAocGh5LT53YWl0X2Zvcl9saW5rKSB7CisJaWYgKHBoeS0+YXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CiAJCWh3X2RiZyhodywgIldhaXRpbmcgZm9yIGZvcmNlZCBzcGVlZC9kdXBsZXggbGluayBvbiBNODggcGh5LlxuIik7CiAKIAkJcmV0X3ZhbCA9IGUxMDAwZV9waHlfaGFzX2xpbmtfZ2VuZXJpYyhodywgUEhZX0ZPUkNFX0xJTUlULApAQCAtOTg5LDEwICsxMDE4LDEyIEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAogCQlpZiAoIWxpbmspIHsKLQkJCS8qIFdlIGRpZG4ndCBnZXQgbGluay4KKwkJCS8qCisJCQkgKiBXZSBkaWRuJ3QgZ2V0IGxpbmsuCiAJCQkgKiBSZXNldCB0aGUgRFNQIGFuZCBjcm9zcyBvdXIgZmluZ2Vycy4KIAkJCSAqLwotCQkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBNODhFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsIDB4MDAxZCk7CisJCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIE04OEUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKKwkJCQkJICAgMHgwMDFkKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCQkJcmV0X3ZhbCA9IGUxMDAwZV9waHlfcmVzZXRfZHNwKGh3KTsKQEAgLTEwMTEsNyArMTA0Miw4IEBACiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOwogCi0JLyogUmVzZXR0aW5nIHRoZSBwaHkgbWVhbnMgd2UgbmVlZCB0byByZS1mb3JjZSBUWF9DTEsgaW4gdGhlCisJLyoKKwkgKiBSZXNldHRpbmcgdGhlIHBoeSBtZWFucyB3ZSBuZWVkIHRvIHJlLWZvcmNlIFRYX0NMSyBpbiB0aGUKIAkgKiBFeHRlbmRlZCBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlciB0byAyNU1IeiBjbG9jayBmcm9tCiAJICogdGhlIHJlc2V0IHZhbHVlIG9mIDIuNU1Iei4KIAkgKi8KQEAgLTEwMjAsNyArMTA1Miw4IEBACiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOwogCi0JLyogSW4gYWRkaXRpb24sIHdlIG11c3QgcmUtZW5hYmxlIENSUyBvbiBUeCBmb3IgYm90aCBoYWxmIGFuZCBmdWxsCisJLyoKKwkgKiBJbiBhZGRpdGlvbiwgd2UgbXVzdCByZS1lbmFibGUgQ1JTIG9uIFR4IGZvciBib3RoIGhhbGYgYW5kIGZ1bGwKIAkgKiBkdXBsZXguCiAJICovCiAJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwpAQCAtMTA1MSw3ICsxMDg0LDcgQEAKIAl1MzIgY3RybDsKIAogCS8qIFR1cm4gb2ZmIGZsb3cgY29udHJvbCB3aGVuIGZvcmNpbmcgc3BlZWQvZHVwbGV4ICovCi0JbWFjLT5mYyA9IGUxMDAwX2ZjX25vbmU7CisJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19ub25lOwogCiAJLyogRm9yY2Ugc3BlZWQvZHVwbGV4IG9uIHRoZSBtYWMgKi8KIAljdHJsID0gZXIzMihDVFJMKTsKQEAgLTExMjQsMzAgKzExNTcsMzIgQEAKIAkJCQkJICAgICBkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKLQkJLyogTFBMVSBhbmQgU21hcnRTcGVlZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgTFBMVSBpcyB1c2VkCisJCS8qCisJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIExQTFUgaXMgdXNlZAogCQkgKiBkdXJpbmcgRHggc3RhdGVzIHdoZXJlIHRoZSBwb3dlciBjb25zZXJ2YXRpb24gaXMgbW9zdAogCQkgKiBpbXBvcnRhbnQuICBEdXJpbmcgZHJpdmVyIGFjdGl2aXR5IHdlIHNob3VsZCBlbmFibGUKLQkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4gKi8KKwkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4KKwkJICovCiAJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29uKSB7CiAJCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICZkYXRhKTsKKwkJCQkJICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJcmV0dXJuIHJldF92YWw7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKIAkJCXJldF92YWwgPSBlMWVfd3BoeShodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCi0JCQkJCQkgICAgIGRhdGEpOworCQkJCQkgICBkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCQl9IGVsc2UgaWYgKHBoeS0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb2ZmKSB7CiAJCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAotCQkJCQkJICAgICAmZGF0YSk7CisJCQkJCSAgICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCXJldHVybiByZXRfdmFsOwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwogCQkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKLQkJCQkJCSAgICAgZGF0YSk7CisJCQkJCSAgIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJcmV0dXJuIHJldF92YWw7CiAJCX0KQEAgLTExNzIsNyArMTIwNyw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwZV9jaGVja19kb3duc2hpZnQgLSBDaGVja3Mgd2hldGhlciBhIGRvd25zaGlmdCBpbiBzcGVlZCBvY2N1cmVkCisgKiAgZTEwMDBlX2NoZWNrX2Rvd25zaGlmdCAtIENoZWNrcyB3aGV0aGVyIGEgZG93bnNoaWZ0IGluIHNwZWVkIG9jY3VycmVkCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgU3VjY2VzcyByZXR1cm5zIDAsIEZhaWx1cmUgcmV0dXJucyAxCkBAIC0xMjQ5LDggKzEyODQsMTAgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgZGF0YSwgb2Zmc2V0LCBtYXNrOwogCi0JLyogUG9sYXJpdHkgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgc3BlZWQgb2YKLQkgKiBvdXIgY29ubmVjdGlvbi4gKi8KKwkvKgorCSAqIFBvbGFyaXR5IGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIHNwZWVkIG9mCisJICogb3VyIGNvbm5lY3Rpb24uCisJICovCiAJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywgJmRhdGEpOwogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKQEAgLTEyNjAsNyArMTI5Nyw4IEBACiAJCW9mZnNldAk9IElHUDAxRTEwMDBfUEhZX1BDU19JTklUX1JFRzsKIAkJbWFzawk9IElHUDAxRTEwMDBfUEhZX1BPTEFSSVRZX01BU0s7CiAJfSBlbHNlIHsKLQkJLyogVGhpcyByZWFsbHkgb25seSBhcHBsaWVzIHRvIDEwTWJwcyBzaW5jZQorCQkvKgorCQkgKiBUaGlzIHJlYWxseSBvbmx5IGFwcGxpZXMgdG8gMTBNYnBzIHNpbmNlCiAJCSAqIHRoZXJlIGlzIG5vIHBvbGFyaXR5IGZvciAxMDBNYnBzIChhbHdheXMgMCkuCiAJCSAqLwogCQlvZmZzZXQJPSBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUzsKQEAgLTEyNzgsNyArMTMxNiw3IEBACiB9CiAKIC8qKgotICogIGUxMDAwX3dhaXRfYXV0b25lZyAtIFdhaXQgZm9yIGF1dG8tbmVnIGNvbXBlbGV0aW9uCisgKiAgZTEwMDBfd2FpdF9hdXRvbmVnIC0gV2FpdCBmb3IgYXV0by1uZWcgY29tcGxldGlvbgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgogICogIFdhaXRzIGZvciBhdXRvLW5lZ290aWF0aW9uIHRvIGNvbXBsZXRlIG9yIGZvciB0aGUgYXV0by1uZWdvdGlhdGlvbiB0aW1lCkBAIC0xMzAyLDcgKzEzNDAsOCBAQAogCQltc2xlZXAoMTAwKTsKIAl9CiAKLQkvKiBQSFlfQVVUT19ORUdfVElNRSBleHBpcmF0aW9uIGRvZXNuJ3QgZ3VhcmFudGVlIGF1dG8tbmVnb3RpYXRpb24KKwkvKgorCSAqIFBIWV9BVVRPX05FR19USU1FIGV4cGlyYXRpb24gZG9lc24ndCBndWFyYW50ZWUgYXV0by1uZWdvdGlhdGlvbgogCSAqIGhhcyBjb21wbGV0ZWQuCiAJICovCiAJcmV0dXJuIHJldF92YWw7CkBAIC0xMzI0LDcgKzEzNjMsOCBAQAogCXUxNiBpLCBwaHlfc3RhdHVzOwogCiAJZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgewotCQkvKiBTb21lIFBIWXMgcmVxdWlyZSB0aGUgUEhZX1NUQVRVUyByZWdpc3RlciB0byBiZSByZWFkCisJCS8qCisJCSAqIFNvbWUgUEhZcyByZXF1aXJlIHRoZSBQSFlfU1RBVFVTIHJlZ2lzdGVyIHRvIGJlIHJlYWQKIAkJICogdHdpY2UgZHVlIHRvIHRoZSBsaW5rIGJpdCBiZWluZyBzdGlja3kuICBObyBoYXJtIGRvaW5nCiAJCSAqIGl0IGFjcm9zcyB0aGUgYm9hcmQuCiAJCSAqLwpAQCAtMTM4OCw4ICsxNDI4LDggQEAKICAqCiAgKiAgVGhlIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgKGFnYykgbm9ybWFsaXplcyB0aGUgYW1wbGl0dWRlIG9mIHRoZQogICogIHJlY2VpdmVkIHNpZ25hbCwgYWRqdXN0aW5nIGZvciB0aGUgYXR0ZW51YXRpb24gcHJvZHVjZWQgYnkgdGhlCi0gKiAgY2FibGUuICBCeSByZWFkaW5nIHRoZSBBR0MgcmVnaXN0ZXJzLCB3aGljaCByZXBlcmVzZW50IHRoZQotICogIGNvYmluYXRpb24gb2YgY291cnNlIGFuZCBmaW5lIGdhaW4gdmFsdWUsIHRoZSB2YWx1ZSBjYW4gYmUgcHV0CisgKiAgY2FibGUuICBCeSByZWFkaW5nIHRoZSBBR0MgcmVnaXN0ZXJzLCB3aGljaCByZXByZXNlbnQgdGhlCisgKiAgY29tYmluYXRpb24gb2YgY291cnNlIGFuZCBmaW5lIGdhaW4gdmFsdWUsIHRoZSB2YWx1ZSBjYW4gYmUgcHV0CiAgKiAgaW50byBhIGxvb2t1cCB0YWJsZSB0byBvYnRhaW4gdGhlIGFwcHJveGltYXRlIGNhYmxlIGxlbmd0aAogICogIGZvciBlYWNoIGNoYW5uZWwuCiAgKiovCkBAIC0xNDEyLDEwICsxNDUyLDEyIEBACiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CiAKLQkJLyogR2V0dGluZyBiaXRzIDE1OjksIHdoaWNoIHJlcHJlc2VudCB0aGUgY29tYmluYXRpb24gb2YKKwkJLyoKKwkJICogR2V0dGluZyBiaXRzIDE1OjksIHdoaWNoIHJlcHJlc2VudCB0aGUgY29tYmluYXRpb24gb2YKIAkJICogY291cnNlIGFuZCBmaW5lIGdhaW4gdmFsdWVzLiAgVGhlIHJlc3VsdCBpcyBhIG51bWJlcgogCQkgKiB0aGF0IGNhbiBiZSBwdXQgaW50byB0aGUgbG9va3VwIHRhYmxlIHRvIG9idGFpbiB0aGUKLQkJICogYXBwcm94aW1hdGUgY2FibGUgbGVuZ3RoLiAqLworCQkgKiBhcHByb3hpbWF0ZSBjYWJsZSBsZW5ndGguCisJCSAqLwogCQljdXJfYWdjX2luZGV4ID0gKHBoeV9kYXRhID4+IElHUDAyRTEwMDBfQUdDX0xFTkdUSF9TSElGVCkgJgogCQkJCUlHUDAyRTEwMDBfQUdDX0xFTkdUSF9NQVNLOwogCkBAIC0xNDY2LDcgKzE1MDgsNyBAQAogCXUxNiBwaHlfZGF0YTsKIAlib29sIGxpbms7CiAKLQlpZiAoaHctPm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwlpZiAoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCWh3X2RiZyhodywgIlBoeSBpbmZvIGlzIG9ubHkgdmFsaWQgZm9yIGNvcHBlciBtZWRpYVxuIik7CiAJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKIAl9CkBAIC0xNjE5LDcgKzE2NjEsNyBAQAogICogIFZlcmlmeSB0aGUgcmVzZXQgYmxvY2sgaXMgbm90IGJsb2NraW5nIHVzIGZyb20gcmVzZXR0aW5nLiAgQWNxdWlyZQogICogIHNlbWFwaG9yZSAoaWYgbmVjZXNzYXJ5KSBhbmQgcmVhZC9zZXQvd3JpdGUgdGhlIGRldmljZSBjb250cm9sIHJlc2V0CiAgKiAgYml0IGluIHRoZSBQSFkuICBXYWl0IHRoZSBhcHByb3ByaWF0ZSBkZWxheSB0aW1lIGZvciB0aGUgZGV2aWNlIHRvCi0gKiAgcmVzZXQgYW5kIHJlbGFzZSB0aGUgc2VtYXBob3JlIChpZiBuZWNlc3NhcnkpLgorICogIHJlc2V0IGFuZCByZWxlYXNlIHRoZSBzZW1hcGhvcmUgKGlmIG5lY2Vzc2FyeSkuCiAgKiovCiBzMzIgZTEwMDBlX3BoeV9od19yZXNldF9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCmluZGV4IDg4ZmI1M2UuLmY1ZGFjY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJImVoZWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwODMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwOTAiCiAKIC8qIGVIRUEgY2FwYWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBETFBBUl9QT1JUX0FERF9SRU0gMQpAQCAtMzcxLDYgKzM3MSw3IEBACiAJc3RydWN0IGVoZWFfcV9za2JfYXJyIHJxMl9za2JhOwogCXN0cnVjdCBlaGVhX3Ffc2tiX2FyciBycTNfc2tiYTsKIAlzdHJ1Y3QgZWhlYV9xX3NrYl9hcnIgc3Ffc2tiYTsKKwlpbnQgc3Ffc2tiYV9zaXplOwogCXNwaW5sb2NrX3QgbmV0aWZfcXVldWU7CiAJaW50IHF1ZXVlX3N0b3BwZWQ7CiAJaW50IHN3cWVfcmVmaWxsX3RoOwpAQCAtMzg2LDYgKzM4NywxMyBAQAogCiAKICNkZWZpbmUgRUhFQV9NQVhfUE9SVFMgMTYKKworI2RlZmluZSBFSEVBX05VTV9QT1JUUkVTX0ZXX0hBTkRMRVMgICAgNiAgLyogUVAgaGFuZGxlLCBTZW5kQ1EgaGFuZGxlLAorCQkJCQkgICAgIFJlY3ZDUSBoYW5kbGUsIEVRIGhhbmRsZSwKKwkJCQkJICAgICBTZW5kTVIgaGFuZGxlLCBSZWN2TVIgaGFuZGxlICovCisjZGVmaW5lIEVIRUFfTlVNX1BPUlRfRldfSEFORExFUyAgICAgICAxICAvKiBFUSBoYW5kbGUgKi8KKyNkZWZpbmUgRUhFQV9OVU1fQURBUFRFUl9GV19IQU5ETEVTICAgIDIgIC8qIE1SIGhhbmRsZSwgTkVRIGhhbmRsZSAqLworCiBzdHJ1Y3QgZWhlYV9hZGFwdGVyIHsKIAl1NjQgaGFuZGxlOwogCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OwpAQCAtNDA1LDYgKzQxMywzMSBAQAogCXU2NCBtYWNhZGRyOwogfTsKIAorLyoga2R1bXAgc3VwcG9ydCAqLworc3RydWN0IGVoZWFfZndfaGFuZGxlX2VudHJ5IHsKKwl1NjQgYWRoOyAgICAgICAgICAgICAgIC8qIEFkYXB0ZXIgSGFuZGxlICovCisJdTY0IGZ3aDsgICAgICAgICAgICAgICAvKiBGaXJtd2FyZSBIYW5kbGUgKi8KK307CisKK3N0cnVjdCBlaGVhX2Z3X2hhbmRsZV9hcnJheSB7CisJc3RydWN0IGVoZWFfZndfaGFuZGxlX2VudHJ5ICphcnI7CisJaW50IG51bV9lbnRyaWVzOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3RydWN0IGVoZWFfYmNtY19yZWdfZW50cnkgeworCXU2NCBhZGg7ICAgICAgICAgICAgICAgLyogQWRhcHRlciBIYW5kbGUgKi8KKwl1MzIgcG9ydF9pZDsgICAgICAgICAgIC8qIExvZ2ljYWwgUG9ydCBJZCAqLworCXU4IHJlZ190eXBlOyAgICAgICAgICAgLyogUmVnaXN0cmF0aW9uIFR5cGUgKi8KKwl1NjQgbWFjYWRkcjsKK307CisKK3N0cnVjdCBlaGVhX2JjbWNfcmVnX2FycmF5IHsKKwlzdHJ1Y3QgZWhlYV9iY21jX3JlZ19lbnRyeSAqYXJyOworCWludCBudW1fZW50cmllczsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKICNkZWZpbmUgRUhFQV9QT1JUX1VQIDEKICNkZWZpbmUgRUhFQV9QT1JUX0RPV04gMAogI2RlZmluZSBFSEVBX1BIWV9MSU5LX1VQIDEKQEAgLTQyMCw3ICs0NTMsNyBAQAogCXN0cnVjdCB2bGFuX2dyb3VwICp2Z3JwOwogCXN0cnVjdCBlaGVhX2VxICpxcF9lcTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHBvcnRfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggcG9ydF9sb2NrOwogCWNoYXIgaW50X2FmZl9uYW1lW0VIRUFfSVJRX05BTUVfU0laRV07CiAJaW50IGFsbG11bHRpOwkJCSAvKiBJbmRpY2F0ZXMgSUZGX0FMTE1VTFRJIHN0YXRlICovCiAJaW50IHByb21pc2M7CQkgCSAvKiBJbmRpY2F0ZXMgSUZGX1BST01JU0Mgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCmluZGV4IGMwNTFjN2UuLjlmZjc1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20va2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAKQEAgLTk4LDggKzEwMCwxMCBAQAogc3RhdGljIExJU1RfSEVBRChhZGFwdGVyX2xpc3QpOwogdTY0IGVoZWFfZHJpdmVyX2ZsYWdzOwogc3RydWN0IHdvcmtfc3RydWN0IGVoZWFfcmVyZWdfbXJfdGFzazsKK3N0YXRpYyBERUZJTkVfTVVURVgoZGxwYXJfbWVtX2xvY2spOworc3RydWN0IGVoZWFfZndfaGFuZGxlX2FycmF5IGVoZWFfZndfaGFuZGxlczsKK3N0cnVjdCBlaGVhX2JjbWNfcmVnX2FycmF5IGVoZWFfYmNtY19yZWdzOwogCi1zdHJ1Y3Qgc2VtYXBob3JlIGRscGFyX21lbV9sb2NrOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlaGVhX3Byb2JlX2FkYXB0ZXIoc3RydWN0IG9mX2RldmljZSAqZGV2LAogCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZCk7CkBAIC0xMzIsNiArMTM2LDE2MCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcyh2b2lkKQoreworCXN0cnVjdCBlaGVhX2Z3X2hhbmRsZV9lbnRyeSAqYXJyID0gTlVMTDsKKwlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyOworCWludCBudW1fYWRhcHRlcnMgPSAwOworCWludCBudW1fcG9ydHMgPSAwOworCWludCBudW1fcG9ydHJlcyA9IDA7CisJaW50IGkgPSAwOworCWludCBudW1fZndfaGFuZGxlcywgaywgbDsKKworCS8qIERldGVybWluZSBudW1iZXIgb2YgaGFuZGxlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcHRlciwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkgeworCQludW1fYWRhcHRlcnMrKzsKKworCQlmb3IgKGsgPSAwOyBrIDwgRUhFQV9NQVhfUE9SVFM7IGsrKykgeworCQkJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IGFkYXB0ZXItPnBvcnRba107CisKKwkJCWlmICghcG9ydCB8fCAocG9ydC0+c3RhdGUgIT0gRUhFQV9QT1JUX1VQKSkKKwkJCQljb250aW51ZTsKKworCQkJbnVtX3BvcnRzKys7CisJCQludW1fcG9ydHJlcyArPSBwb3J0LT5udW1fZGVmX3FwcyArIHBvcnQtPm51bV9hZGRfdHhfcXBzOworCQl9CisJfQorCisJbnVtX2Z3X2hhbmRsZXMgPSBudW1fYWRhcHRlcnMgKiBFSEVBX05VTV9BREFQVEVSX0ZXX0hBTkRMRVMgKworCQkJIG51bV9wb3J0cyAqIEVIRUFfTlVNX1BPUlRfRldfSEFORExFUyArCisJCQkgbnVtX3BvcnRyZXMgKiBFSEVBX05VTV9QT1JUUkVTX0ZXX0hBTkRMRVM7CisKKwlpZiAobnVtX2Z3X2hhbmRsZXMpIHsKKwkJYXJyID0ga3phbGxvYyhudW1fZndfaGFuZGxlcyAqIHNpemVvZigqYXJyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYXJyKQorCQkJcmV0dXJuOyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KKwl9IGVsc2UKKwkJZ290byBvdXRfdXBkYXRlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KSB7CisJCWZvciAoayA9IDA7IGsgPCBFSEVBX01BWF9QT1JUUzsgaysrKSB7CisJCQlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gYWRhcHRlci0+cG9ydFtrXTsKKworCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApKQorCQkJCWNvbnRpbnVlOworCisJCQlmb3IgKGwgPSAwOworCQkJICAgICBsIDwgcG9ydC0+bnVtX2RlZl9xcHMgKyBwb3J0LT5udW1fYWRkX3R4X3FwczsKKwkJCSAgICAgbCsrKSB7CisJCQkJc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByID0gJnBvcnQtPnBvcnRfcmVzW2xdOworCisJCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKKwkJCQlhcnJbaSsrXS5md2ggPSBwci0+cXAtPmZ3X2hhbmRsZTsKKwkJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOworCQkJCWFycltpKytdLmZ3aCA9IHByLT5zZW5kX2NxLT5md19oYW5kbGU7CisJCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKKwkJCQlhcnJbaSsrXS5md2ggPSBwci0+cmVjdl9jcS0+ZndfaGFuZGxlOworCQkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CisJCQkJYXJyW2krK10uZndoID0gcHItPmVxLT5md19oYW5kbGU7CisJCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKKwkJCQlhcnJbaSsrXS5md2ggPSBwci0+c2VuZF9tci5oYW5kbGU7CisJCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKKwkJCQlhcnJbaSsrXS5md2ggPSBwci0+cmVjdl9tci5oYW5kbGU7CisJCQl9CisJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOworCQkJYXJyW2krK10uZndoID0gcG9ydC0+cXBfZXEtPmZ3X2hhbmRsZTsKKwkJfQorCisJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CisJCWFycltpKytdLmZ3aCA9IGFkYXB0ZXItPm5lcS0+ZndfaGFuZGxlOworCisJCWlmIChhZGFwdGVyLT5tci5oYW5kbGUpIHsKKwkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CisJCQlhcnJbaSsrXS5md2ggPSBhZGFwdGVyLT5tci5oYW5kbGU7CisJCX0KKwl9CisKK291dF91cGRhdGU6CisJa2ZyZWUoZWhlYV9md19oYW5kbGVzLmFycik7CisJZWhlYV9md19oYW5kbGVzLmFyciA9IGFycjsKKwllaGVhX2Z3X2hhbmRsZXMubnVtX2VudHJpZXMgPSBpOworfQorCitzdGF0aWMgdm9pZCBlaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnModm9pZCkKK3sKKwlzdHJ1Y3QgZWhlYV9iY21jX3JlZ19lbnRyeSAqYXJyID0gTlVMTDsKKwlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBlaGVhX21jX2xpc3QgKm1jX2VudHJ5OworCWludCBudW1fcmVnaXN0cmF0aW9ucyA9IDA7CisJaW50IGkgPSAwOworCWludCBrOworCisJLyogRGV0ZXJtaW5lIG51bWJlciBvZiByZWdpc3RyYXRpb25zICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KQorCQlmb3IgKGsgPSAwOyBrIDwgRUhFQV9NQVhfUE9SVFM7IGsrKykgeworCQkJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IGFkYXB0ZXItPnBvcnRba107CisKKwkJCWlmICghcG9ydCB8fCAocG9ydC0+c3RhdGUgIT0gRUhFQV9QT1JUX1VQKSkKKwkJCQljb250aW51ZTsKKworCQkJbnVtX3JlZ2lzdHJhdGlvbnMgKz0gMjsJLyogQnJvYWRjYXN0IHJlZ2lzdHJhdGlvbnMgKi8KKworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtY19lbnRyeSwgJnBvcnQtPm1jX2xpc3QtPmxpc3QsbGlzdCkKKwkJCQludW1fcmVnaXN0cmF0aW9ucyArPSAyOworCQl9CisKKwlpZiAobnVtX3JlZ2lzdHJhdGlvbnMpIHsKKwkJYXJyID0ga3phbGxvYyhudW1fcmVnaXN0cmF0aW9ucyAqIHNpemVvZigqYXJyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYXJyKQorCQkJcmV0dXJuOyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KKwl9IGVsc2UKKwkJZ290byBvdXRfdXBkYXRlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KSB7CisJCWZvciAoayA9IDA7IGsgPCBFSEVBX01BWF9QT1JUUzsgaysrKSB7CisJCQlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gYWRhcHRlci0+cG9ydFtrXTsKKworCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApKQorCQkJCWNvbnRpbnVlOworCisJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOworCQkJYXJyW2ldLnBvcnRfaWQgPSBwb3J0LT5sb2dpY2FsX3BvcnRfaWQ7CisJCQlhcnJbaV0ucmVnX3R5cGUgPSBFSEVBX0JDTUNfQlJPQURDQVNUIHwKKwkJCQkJICBFSEVBX0JDTUNfVU5UQUdHRUQ7CisJCQlhcnJbaSsrXS5tYWNhZGRyID0gcG9ydC0+bWFjX2FkZHI7CisKKwkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CisJCQlhcnJbaV0ucG9ydF9pZCA9IHBvcnQtPmxvZ2ljYWxfcG9ydF9pZDsKKwkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19CUk9BRENBU1QgfAorCQkJCQkgIEVIRUFfQkNNQ19WTEFOSURfQUxMOworCQkJYXJyW2krK10ubWFjYWRkciA9IHBvcnQtPm1hY19hZGRyOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jX2VudHJ5LAorCQkJCQkgICAgJnBvcnQtPm1jX2xpc3QtPmxpc3QsIGxpc3QpIHsKKwkJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOworCQkJCWFycltpXS5wb3J0X2lkID0gcG9ydC0+bG9naWNhbF9wb3J0X2lkOworCQkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19TQ09QRV9BTEwgfAorCQkJCQkJICBFSEVBX0JDTUNfTVVMVElDQVNUIHwKKwkJCQkJCSAgRUhFQV9CQ01DX1VOVEFHR0VEOworCQkJCWFycltpKytdLm1hY2FkZHIgPSBtY19lbnRyeS0+bWFjYWRkcjsKKworCQkJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CisJCQkJYXJyW2ldLnBvcnRfaWQgPSBwb3J0LT5sb2dpY2FsX3BvcnRfaWQ7CisJCQkJYXJyW2ldLnJlZ190eXBlID0gRUhFQV9CQ01DX1NDT1BFX0FMTCB8CisJCQkJCQkgIEVIRUFfQkNNQ19NVUxUSUNBU1QgfAorCQkJCQkJICBFSEVBX0JDTUNfVkxBTklEX0FMTDsKKwkJCQlhcnJbaSsrXS5tYWNhZGRyID0gbWNfZW50cnktPm1hY2FkZHI7CisJCQl9CisJCX0KKwl9CisKK291dF91cGRhdGU6CisJa2ZyZWUoZWhlYV9iY21jX3JlZ3MuYXJyKTsKKwllaGVhX2JjbWNfcmVncy5hcnIgPSBhcnI7CisJZWhlYV9iY21jX3JlZ3MubnVtX2VudHJpZXMgPSBpOworfQorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVoZWFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xOTIsNyArMzUwLDggQEAKIAlwci0+cnExX3NrYmEub3Nfc2ticyA9IDA7CiAKIAlpZiAodW5saWtlbHkodGVzdF9iaXQoX19FSEVBX1NUT1BfWEZFUiwgJmVoZWFfZHJpdmVyX2ZsYWdzKSkpIHsKLQkJcHItPnJxMV9za2JhLmluZGV4ID0gaW5kZXg7CisJCWlmIChucl9vZl93cWVzID4gMCkKKwkJCXByLT5ycTFfc2tiYS5pbmRleCA9IGluZGV4OwogCQlwci0+cnExX3NrYmEub3Nfc2ticyA9IGZpbGxfd3FlczsKIAkJcmV0dXJuOwogCX0KQEAgLTEzMDcsNyArMTQ2Niw5IEBACiAJCQkgIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiwKIAkJCSAgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzKTsKIAotCXJldCA9IGVoZWFfaW5pdF9xX3NrYmEoJnByLT5zcV9za2JhLCBpbml0X2F0dHItPmFjdF9ucl9zZW5kX3dxZXMgKyAxKTsKKwlwci0+c3Ffc2tiYV9zaXplID0gaW5pdF9hdHRyLT5hY3RfbnJfc2VuZF93cWVzICsgMTsKKworCXJldCA9IGVoZWFfaW5pdF9xX3NrYmEoJnByLT5zcV9za2JhLCBwci0+c3Ffc2tiYV9zaXplKTsKIAlyZXQgfD0gZWhlYV9pbml0X3Ffc2tiYSgmcHItPnJxMV9za2JhLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTEgKyAxKTsKIAlyZXQgfD0gZWhlYV9pbml0X3Ffc2tiYSgmcHItPnJxMl9za2JhLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTIgKyAxKTsKIAlyZXQgfD0gZWhlYV9pbml0X3Ffc2tiYSgmcHItPnJxM19za2JhLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgKyAxKTsKQEAgLTE2MDEsMTkgKzE3NjIsMjUgQEAKIAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKKwltdXRleF9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKKwogCS8qIERlcmVnaXN0ZXIgb2xkIE1BQyBpbiBwSFlQICovCiAJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX0RFUkVHX0JDTUMpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3VwcmVnczsKIAogCXBvcnQtPm1hY19hZGRyID0gY2IwLT5wb3J0X21hY19hZGRyIDw8IDE2OwogCiAJLyogUmVnaXN0ZXIgbmV3IE1BQyBpbiBwSFlQICovCiAJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX1JFR19CQ01DKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF91cHJlZ3M7CiAKIAlyZXQgPSAwOworCitvdXRfdXByZWdzOgorCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOworCW11dGV4X3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CiBvdXRfZnJlZToKIAlrZnJlZShjYjApOwogb3V0OgpAQCAtMTc3NSw5ICsxOTQyLDExIEBACiAJfQogCWVoZWFfcHJvbWlzY3VvdXMoZGV2LCAwKTsKIAorCW11dGV4X2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOworCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJZWhlYV9hbGxtdWx0aShkZXYsIDEpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAllaGVhX2FsbG11bHRpKGRldiwgMCk7CiAKQEAgLTE4MDMsNiArMTk3Miw4IEBACiAKIAl9CiBvdXQ6CisJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7CisJbXV0ZXhfdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIAlyZXR1cm47CiB9CiAKQEAgLTIyODUsNiArMjQ1Niw4IEBACiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkKIAkJcmV0dXJuIDA7CiAKKwltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CisKIAlyZXQgPSBlaGVhX3BvcnRfcmVzX3NldHVwKHBvcnQsIHBvcnQtPm51bV9kZWZfcXBzLAogCQkJCSAgcG9ydC0+bnVtX2FkZF90eF9xcHMpOwogCWlmIChyZXQpIHsKQEAgLTIzMjEsOCArMjQ5NCwxNyBAQAogCQl9CiAJfQogCi0JcmV0ID0gMDsKKwltdXRleF9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKKworCXJldCA9IGVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9SRUdfQkNNQyk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9mcmVlX2lycXM7CisJfQorCiAJcG9ydC0+c3RhdGUgPSBFSEVBX1BPUlRfVVA7CisKKwlyZXQgPSAwOwogCWdvdG8gb3V0OwogCiBvdXRfZnJlZV9pcnFzOgpAQCAtMjMzNCw2ICsyNTE2LDEyIEBACiAJaWYgKHJldCkKIAkJZWhlYV9pbmZvKCJGYWlsZWQgc3RhcnRpbmcgJXMuIHJldD0laSIsIGRldi0+bmFtZSwgcmV0KTsKIAorCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOworCW11dGV4X3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CisKKwllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7CisJbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzU4LDcgKzI1NDYsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkb3duKCZwb3J0LT5wb3J0X2xvY2spOworCW11dGV4X2xvY2soJnBvcnQtPnBvcnRfbG9jayk7CiAKIAlpZiAobmV0aWZfbXNnX2lmdXAocG9ydCkpCiAJCWVoZWFfaW5mbygiZW5hYmxpbmcgcG9ydCAlcyIsIGRldi0+bmFtZSk7CkBAIC0yMzY5LDcgKzI1NTcsNyBAQAogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCX0KIAotCXVwKCZwb3J0LT5wb3J0X2xvY2spOworCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMzgyLDE2ICsyNTcwLDI3IEBACiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9ET1dOKQogCQlyZXR1cm4gMDsKIAorCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKworCW11dGV4X2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCWVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOworCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKKwogCWVoZWFfZnJlZV9pbnRlcnJ1cHRzKGRldik7CiAKIAlwb3J0LT5zdGF0ZSA9IEVIRUFfUE9SVF9ET1dOOwogCisJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7CisJbXV0ZXhfdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKKwogCXJldCA9IGVoZWFfY2xlYW5fYWxsX3BvcnRyZXMocG9ydCk7CiAJaWYgKHJldCkKIAkJZWhlYV9pbmZvKCJGYWlsZWQgZnJlZWluZyByZXNvdXJjZXMgZm9yICVzLiByZXQ9JWkiLAogCQkJICBkZXYtPm5hbWUsIHJldCk7CiAKKwllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7CisJbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDA0LDExICsyNjAzLDExIEBACiAJCWVoZWFfaW5mbygiZGlzYWJsaW5nIHBvcnQgJXMiLCBkZXYtPm5hbWUpOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQlkb3duKCZwb3J0LT5wb3J0X2xvY2spOworCW11dGV4X2xvY2soJnBvcnQtPnBvcnRfbG9jayk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXBvcnRfbmFwaV9kaXNhYmxlKHBvcnQpOwogCXJldCA9IGVoZWFfZG93bihkZXYpOwotCXVwKCZwb3J0LT5wb3J0X2xvY2spOworCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDI2LDYgKzI2MjUsMjIgQEAKIAl9CiB9CiAKK3ZvaWQgZWhlYV9mbHVzaF9zcShzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9kZWZfcXBzICsgcG9ydC0+bnVtX2FkZF90eF9xcHM7IGkrKykgeworCQlzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIgPSAmcG9ydC0+cG9ydF9yZXNbaV07CisJCWludCBzd3FlX21heCA9IHByLT5zcV9za2JhX3NpemUgLSAyIC0gcHItPnN3cWVfbGxfY291bnQ7CisJCWludCBrID0gMDsKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZwci0+c3dxZV9hdmFpbCkgPCBzd3FlX21heCkgeworCQkJbXNsZWVwKDUpOworCQkJaWYgKCsrayA9PSAyMCkKKwkJCQlicmVhazsKKwkJfQorCX0KK30KKwogaW50IGVoZWFfc3RvcF9xcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI2MDYsNyArMjgyMSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnQtPm5ldGRldjsKIAogCXBvcnQtPnJlc2V0cysrOwotCWRvd24oJnBvcnQtPnBvcnRfbG9jayk7CisJbXV0ZXhfbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlwb3J0X25hcGlfZGlzYWJsZShwb3J0KTsKQEAgLTI2MjYsNyArMjg0MSw3IEBACiAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiBvdXQ6Ci0JdXAoJnBvcnQtPnBvcnRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwogCXJldHVybjsKIH0KIApAQCAtMjYzNSw3ICsyODUwLDcgQEAKIAlpbnQgcmV0LCBpOwogCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXI7CiAKLQlkb3duKCZkbHBhcl9tZW1fbG9jayk7CisJbXV0ZXhfbG9jaygmZGxwYXJfbWVtX2xvY2spOwogCWVoZWFfaW5mbygiTFBBUiBtZW1vcnkgZW5sYXJnZWQgLSByZS1pbml0aWFsaXppbmcgZHJpdmVyIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXB0ZXIsICZhZGFwdGVyX2xpc3QsIGxpc3QpCkBAIC0yNjQzLDIxICsyODU4LDI0IEBACiAJCQkvKiBTaHV0ZG93biBhbGwgcG9ydHMgKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBFSEVBX01BWF9QT1JUUzsgaSsrKSB7CiAJCQkJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IGFkYXB0ZXItPnBvcnRbaV07CisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCQkJCWlmIChwb3J0KSB7Ci0JCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LT5uZXRkZXY7CisJCQkJaWYgKCFwb3J0KQorCQkJCQljb250aW51ZTsKIAotCQkJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgewotCQkJCQkJZG93bigmcG9ydC0+cG9ydF9sb2NrKTsKLQkJCQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCQkJCXJldCA9IGVoZWFfc3RvcF9xcHMoZGV2KTsKLQkJCQkJCWlmIChyZXQpIHsKLQkJCQkJCQl1cCgmcG9ydC0+cG9ydF9sb2NrKTsKLQkJCQkJCQlnb3RvIG91dDsKLQkJCQkJCX0KLQkJCQkJCXBvcnRfbmFwaV9kaXNhYmxlKHBvcnQpOwotCQkJCQkJdXAoJnBvcnQtPnBvcnRfbG9jayk7CisJCQkJZGV2ID0gcG9ydC0+bmV0ZGV2OworCisJCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJCQkJbXV0ZXhfbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJCQllaGVhX2ZsdXNoX3NxKHBvcnQpOworCQkJCQlyZXQgPSBlaGVhX3N0b3BfcXBzKGRldik7CisJCQkJCWlmIChyZXQpIHsKKwkJCQkJCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJCQkJCWdvdG8gb3V0OwogCQkJCQl9CisJCQkJCXBvcnRfbmFwaV9kaXNhYmxlKHBvcnQpOworCQkJCQltdXRleF91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7CiAJCQkJfQogCQkJfQogCkBAIC0yNjk3LDE3ICsyOTE1LDE3IEBACiAJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LT5uZXRkZXY7CiAKIAkJCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCQkJCWRvd24oJnBvcnQtPnBvcnRfbG9jayk7CisJCQkJCQltdXRleF9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwogCQkJCQkJcG9ydF9uYXBpX2VuYWJsZShwb3J0KTsKIAkJCQkJCXJldCA9IGVoZWFfcmVzdGFydF9xcHMoZGV2KTsKIAkJCQkJCWlmICghcmV0KQogCQkJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQkJCXVwKCZwb3J0LT5wb3J0X2xvY2spOworCQkJCQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwogCQkJCQl9CiAJCQkJfQogCQkJfQogCQl9Ci0gICAgICAgdXAoJmRscGFyX21lbV9sb2NrKTsKKyAgICAgICBtdXRleF91bmxvY2soJmRscGFyX21lbV9sb2NrKTsKICAgICAgICBlaGVhX2luZm8oInJlLWluaXRpYWxpemluZyBkcml2ZXIgY29tcGxldGUiKTsKIG91dDoKIAlyZXR1cm47CkBAIC0yODY4LDcgKzMwODYsNyBAQAogCiAJcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlzZW1hX2luaXQoJnBvcnQtPnBvcnRfbG9jaywgMSk7CisJbXV0ZXhfaW5pdCgmcG9ydC0+cG9ydF9sb2NrKTsKIAlwb3J0LT5zdGF0ZSA9IEVIRUFfUE9SVF9ET1dOOwogCXBvcnQtPnNpZ19jb21wX2l2ID0gc3FfZW50cmllcyAvIDEwOwogCkBAIC0yOTEzLDI2ICszMTMxLDE5IEBACiAJZGV2LT52bGFuX3J4X2FkZF92aWQgPSBlaGVhX3ZsYW5fcnhfYWRkX3ZpZDsKIAlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBlaGVhX3ZsYW5fcnhfa2lsbF92aWQ7CiAJZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9UU08KLQkJICAgICAgfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX0hXX1ZMQU5fVFgKKwkJICAgICAgfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hXX1ZMQU5fVFgKIAkJICAgICAgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSCiAJCSAgICAgIHwgTkVUSUZfRl9MTFRYOwogCWRldi0+dHhfdGltZW91dCA9ICZlaGVhX3R4X3dhdGNoZG9nOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFSEVBX1dBVENIX0RPR19USU1FT1VUOwogCiAJSU5JVF9XT1JLKCZwb3J0LT5yZXNldF90YXNrLCBlaGVhX3Jlc2V0X3BvcnQpOwotCi0JcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX1JFR19CQ01DKTsKLQlpZiAocmV0KSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X3VucmVnX3BvcnQ7Ci0JfQotCiAJZWhlYV9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKIAkJZWhlYV9lcnJvcigicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZC4gcmV0PSVkIiwgcmV0KTsKLQkJZ290byBvdXRfZGVyZWdfYmM7CisJCWdvdG8gb3V0X3VucmVnX3BvcnQ7CiAJfQogCiAJcG9ydC0+bHJvX21heF9hZ2dyID0gbHJvX21heF9hZ2dyOwpAQCAtMjk0OSw5ICszMTYwLDYgQEAKIAogCXJldHVybiBwb3J0OwogCi1vdXRfZGVyZWdfYmM6Ci0JZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX0RFUkVHX0JDTUMpOwotCiBvdXRfdW5yZWdfcG9ydDoKIAllaGVhX3VucmVnaXN0ZXJfcG9ydChwb3J0KTsKIApAQCAtMjk3MSw3ICszMTc5LDYgQEAKIHsKIAl1bnJlZ2lzdGVyX25ldGRldihwb3J0LT5uZXRkZXYpOwogCWVoZWFfdW5yZWdpc3Rlcl9wb3J0KHBvcnQpOwotCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKIAlrZnJlZShwb3J0LT5tY19saXN0KTsKIAlmcmVlX25ldGRldihwb3J0LT5uZXRkZXYpOwogCXBvcnQtPmFkYXB0ZXItPmFjdGl2ZV9wb3J0cy0tOwpAQCAtMzAxNCw3ICszMjIxLDYgQEAKIAogCQlpKys7CiAJfTsKLQogCXJldHVybiAwOwogfQogCkBAIC0zMTU5LDYgKzMzNjUsNyBAQAogCQllaGVhX2Vycm9yKCJJbnZhbGlkIGlibWVidXMgZGV2aWNlIHByb2JlZCIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJbXV0ZXhfbG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJYWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKCphZGFwdGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhZGFwdGVyKSB7CkBAIC0zMjM5LDcgKzM0NDYsMTAgQEAKIAogb3V0X2ZyZWVfYWQ6CiAJa2ZyZWUoYWRhcHRlcik7CisKIG91dDoKKwllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7CisJbXV0ZXhfdW5sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzI1OCwxOCArMzQ2OCw0MSBAQAogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAorCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKwogCWlibWVidXNfZnJlZV9pcnEoYWRhcHRlci0+bmVxLT5hdHRyLmlzdDEsIGFkYXB0ZXIpOwogCXRhc2tsZXRfa2lsbCgmYWRhcHRlci0+bmVxX3Rhc2tsZXQpOwogCiAJZWhlYV9kZXN0cm95X2VxKGFkYXB0ZXItPm5lcSk7CiAJZWhlYV9yZW1vdmVfYWRhcHRlcl9tcihhZGFwdGVyKTsKIAlsaXN0X2RlbCgmYWRhcHRlci0+bGlzdCk7Ci0KIAlrZnJlZShhZGFwdGVyKTsKIAorCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKKwltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKwogCXJldHVybiAwOwogfQogCit2b2lkIGVoZWFfY3Jhc2hfaGFuZGxlcih2b2lkKQoreworCWludCBpOworCisJaWYgKGVoZWFfZndfaGFuZGxlcy5hcnIpCisJCWZvciAoaSA9IDA7IGkgPCBlaGVhX2Z3X2hhbmRsZXMubnVtX2VudHJpZXM7IGkrKykKKwkJCWVoZWFfaF9mcmVlX3Jlc291cmNlKGVoZWFfZndfaGFuZGxlcy5hcnJbaV0uYWRoLAorCQkJCQkgICAgIGVoZWFfZndfaGFuZGxlcy5hcnJbaV0uZndoLAorCQkJCQkgICAgIEZPUkNFX0ZSRUUpOworCisJaWYgKGVoZWFfYmNtY19yZWdzLmFycikKKwkJZm9yIChpID0gMDsgaSA8IGVoZWFfYmNtY19yZWdzLm51bV9lbnRyaWVzOyBpKyspCisJCQllaGVhX2hfcmVnX2RlcmVnX2JjbWMoZWhlYV9iY21jX3JlZ3MuYXJyW2ldLmFkaCwKKwkJCQkJICAgICAgZWhlYV9iY21jX3JlZ3MuYXJyW2ldLnBvcnRfaWQsCisJCQkJCSAgICAgIGVoZWFfYmNtY19yZWdzLmFycltpXS5yZWdfdHlwZSwKKwkJCQkJICAgICAgZWhlYV9iY21jX3JlZ3MuYXJyW2ldLm1hY2FkZHIsCisJCQkJCSAgICAgIDAsIEhfREVSRUdfQkNNQyk7Cit9CisKIHN0YXRpYyBpbnQgZWhlYV9yZWJvb3Rfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqdW51c2VkKQogewpAQCAtMzMzMCw3ICszNTYzLDExIEBACiAKIAogCUlOSVRfV09SSygmZWhlYV9yZXJlZ19tcl90YXNrLCBlaGVhX3JlcmVnX21ycyk7Ci0Jc2VtYV9pbml0KCZkbHBhcl9tZW1fbG9jaywgMSk7CisJbWVtc2V0KCZlaGVhX2Z3X2hhbmRsZXMsIDAsIHNpemVvZihlaGVhX2Z3X2hhbmRsZXMpKTsKKwltZW1zZXQoJmVoZWFfYmNtY19yZWdzLCAwLCBzaXplb2YoZWhlYV9iY21jX3JlZ3MpKTsKKworCW11dGV4X2luaXQoJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKwltdXRleF9pbml0KCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIAogCXJldCA9IGNoZWNrX21vZHVsZV9wYXJtKCk7CiAJaWYgKHJldCkKQEAgLTMzNDAsMTIgKzM1NzcsMTggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZWhlYV9yZWJvb3RfbmIpOworCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZWhlYV9yZWJvb3RfbmIpOworCWlmIChyZXQpCisJCWVoZWFfaW5mbygiZmFpbGVkIHJlZ2lzdGVyaW5nIHJlYm9vdCBub3RpZmllciIpOworCisJcmV0ID0gY3Jhc2hfc2h1dGRvd25fcmVnaXN0ZXIoJmVoZWFfY3Jhc2hfaGFuZGxlcik7CisJaWYgKHJldCkKKwkJZWhlYV9pbmZvKCJmYWlsZWQgcmVnaXN0ZXJpbmcgY3Jhc2ggaGFuZGxlciIpOwogCiAJcmV0ID0gaWJtZWJ1c19yZWdpc3Rlcl9kcml2ZXIoJmVoZWFfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCWVoZWFfZXJyb3IoImZhaWxlZCByZWdpc3RlcmluZyBlSEVBIGRldmljZSBkcml2ZXIgb24gZWJ1cyIpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXQyOwogCX0KIAogCXJldCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmZWhlYV9kcml2ZXIuZHJpdmVyLApAQCAtMzM1MywyMSArMzU5NiwzMyBAQAogCWlmIChyZXQpIHsKIAkJZWhlYV9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhdHRyaWJ1dGUsIHJldD0lZCIsCiAJCQkgICByZXQpOwotCQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZWhlYV9yZWJvb3RfbmIpOwotCQlpYm1lYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlaGVhX2RyaXZlcik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dDM7CiAJfQogCisJcmV0dXJuIHJldDsKKworb3V0MzoKKwlpYm1lYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlaGVhX2RyaXZlcik7CitvdXQyOgorCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlaGVhX3JlYm9vdF9uYik7CisJY3Jhc2hfc2h1dGRvd25fdW5yZWdpc3RlcigmZWhlYV9jcmFzaF9oYW5kbGVyKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZWhlYV9tb2R1bGVfZXhpdCh2b2lkKQogeworCWludCByZXQ7CisKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCWRyaXZlcl9yZW1vdmVfZmlsZSgmZWhlYV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfY2FwYWJpbGl0aWVzKTsKIAlpYm1lYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlaGVhX2RyaXZlcik7CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVoZWFfcmVib290X25iKTsKKwlyZXQgPSBjcmFzaF9zaHV0ZG93bl91bnJlZ2lzdGVyKCZlaGVhX2NyYXNoX2hhbmRsZXIpOworCWlmIChyZXQpCisJCWVoZWFfaW5mbygiZmFpbGVkIHVucmVnaXN0ZXJpbmcgY3Jhc2ggaGFuZGxlciIpOworCWtmcmVlKGVoZWFfZndfaGFuZGxlcy5hcnIpOworCWtmcmVlKGVoZWFfYmNtY19yZWdzLmFycik7CiAJZWhlYV9kZXN0cm95X2J1c21hcCgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwppbmRleCAwODA5YTZhLi40NmE5MGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKQEAgLTkwMCw3ICs5MDAsNyBAQAogCQlpZiAoUlNWX0dFVEJJVChyeHN0YXQsIFJTVl9MRU5DSEVDS0VSUikpCiAJCQluZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAl9IGVsc2UgewotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CisJCXNrYiA9IGRldl9hbGxvY19za2IobGVuICsgTkVUX0lQX0FMSUdOKTsKIAkJaWYgKCFza2IpIHsKIAkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHByaXYpKQogCQkJCWRldl9lcnIoJm5kZXYtPmRldiwKQEAgLTkwOCw2ICs5MDgsNyBAQAogCQkJbmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9IGVsc2UgewogCQkJc2tiLT5kZXYgPSBuZGV2OworCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwogCQkJLyogY29weSB0aGUgcGFja2V0IGZyb20gdGhlIHJlY2VpdmUgYnVmZmVyICovCiAJCQllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBwcml2LT5uZXh0X3BrX3B0ciArIHNpemVvZihyc3YpLAogCQkJCQlsZW4sIHNrYl9wdXQoc2tiLCBsZW4pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwppbmRleCAwYjM2NWI4Li43NjExOGRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMTMxLDggKzEzMSw4IEBACiAKIElWYi4gUmVmZXJlbmNlcwogCi1odHRwOi8vd3d3LnNtc2MuY29tL21haW4vZGF0YXNoZWV0cy84M2MxNzEucGRmCi1odHRwOi8vd3d3LnNtc2MuY29tL21haW4vZGF0YXNoZWV0cy84M2MxNzUucGRmCitodHRwOi8vd3d3LnNtc2MuY29tL21haW4vdG9vbHMvZGlzY29udGludWVkLzgzYzE3MS5wZGYKK2h0dHA6Ly93d3cuc21zYy5jb20vbWFpbi90b29scy9kaXNjb250aW51ZWQvODNjMTc1LnBkZgogaHR0cDovL3NjeWxkLmNvbS9leHBlcnQvTldheS5odG1sCiBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9EUC9EUDgzODQwQS5odG1sCiAKQEAgLTIyNyw3ICsyMjcsMTIgQEAKIAkwLCAweDBDMDAsIDB4MEMwMCwgMHgyMDAwLCAgMHgwMTAwLCAweDIxMDAsIDAsIDAsCiAJMCwgMCwgMCwgMCwgIDAsIDAsIDAsIDAgfTsKIAotLyogVGhlIEVQSUMxMDAgUnggYW5kIFR4IGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KKy8qCisgKiBUaGUgRVBJQzEwMCBSeCBhbmQgVHggYnVmZmVyIGRlc2NyaXB0b3JzLiAgTm90ZSB0aGF0IHRoZXNlCisgKiByZWFsbHkgQVJFIGhvc3QtZW5kaWFuOyBpdCdzIG5vdCBhIG1pc2Fubm90YXRpb24uICBXZSB0ZWxsCisgKiB0aGUgY2FyZCB0byBieXRlc3dhcCB0aGVtIGludGVybmFsbHkgb24gYmlnLWVuZGlhbiBob3N0cyAtCisgKiBsb29rIGZvciAjaWZkZWYgQ09ORklHX0JJR19FTkRJQU4gaW4gZXBpY19vcGVuKCkuCisgKi8KIAogc3RydWN0IGVwaWNfdHhfZGVzYyB7CiAJdTMyIHR4c3RhdHVzOwpAQCAtNDE4LDcgKzQyMyw3IEBACiAKIAkvKiBOb3RlOiB0aGUgJzE3NSBkb2VzIG5vdCBoYXZlIGEgc2VyaWFsIEVFUFJPTS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQkoKHUxNiAqKWRldi0+ZGV2X2FkZHIpW2ldID0gbGUxNl90b19jcHUoaW53KGlvYWRkciArIExBTjAgKyBpKjQpKTsKKwkJKChfX2xlMTYgKilkZXYtPmRldl9hZGRyKVtpXSA9IGNwdV90b19sZTE2KGludyhpb2FkZHIgKyBMQU4wICsgaSo0KSk7CiAKIAlpZiAoZGVidWcgPiAyKSB7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgIkVFUFJPTSBjb250ZW50czpcbiIpOwpAQCAtNjgyLDcgKzY4Nyw4IEBACiAJaWYgKGVwLT5jaGlwX2ZsYWdzICYgTUlJX1BXUkRXTikKIAkJb3V0bCgoaW5sKGlvYWRkciArIE5WQ1RMKSAmIH4weDAwM0MpIHwgMHg0ODAwLCBpb2FkZHIgKyBOVkNUTCk7CiAKLSNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykJCS8qIEJpZyBlbmRpYW4gKi8KKwkvKiBUZWxsIHRoZSBjaGlwIHRvIGJ5dGVzd2FwIGRlc2NyaXB0b3JzIG9uIGJpZy1lbmRpYW4gaG9zdHMgKi8KKyNpZmRlZiBDT05GSUdfQklHX0VORElBTgogCW91dGwoMHg0NDMyIHwgKFJYX0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKIAlpbmwoaW9hZGRyICsgR0VOQ1RMKTsKIAlvdXRsKDB4MDQzMiB8IChSWF9GSUZPX1RIUkVTSDw8OCksIGlvYWRkciArIEdFTkNUTCk7CkBAIC02OTUsNyArNzAxLDcgQEAKIAl1ZGVsYXkoMjApOyAvKiBMb29rcyBsaWtlIEVQSUkgbmVlZHMgdGhhdCBpZiB5b3Ugd2FudCByZWxpYWJsZSBSWCBpbml0LiBGSVhNRTogcGNpIHBvc3RpbmcgYnVnPyAqLwogCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJb3V0bChjcHVfdG9fbGUxNigoKHUxNiopZGV2LT5kZXZfYWRkcilbaV0pLCBpb2FkZHIgKyBMQU4wICsgaSo0KTsKKwkJb3V0bChsZTE2X3RvX2NwdSgoKF9fbGUxNiopZGV2LT5kZXZfYWRkcilbaV0pLCBpb2FkZHIgKyBMQU4wICsgaSo0KTsKIAogCWVwLT50eF90aHJlc2hvbGQgPSBUWF9GSUZPX1RIUkVTSDsKIAlvdXRsKGVwLT50eF90aHJlc2hvbGQsIGlvYWRkciArIFR4VGhyZXNoKTsKQEAgLTc5OCw3ICs4MDQsNyBAQAogCWZvciAoaSA9IDE2OyBpID4gMDsgaS0tKQogCQlvdXRsKDB4MDAwOCwgaW9hZGRyICsgVEVTVDEpOwogCi0jaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pCQkvKiBCaWcgZW5kaWFuICovCisjaWZkZWYgQ09ORklHX0JJR19FTkRJQU4KIAlvdXRsKDB4MDQzMiB8IChSWF9GSUZPX1RIUkVTSDw8OCksIGlvYWRkciArIEdFTkNUTCk7CiAjZWxzZQogCW91dGwoMHgwNDEyIHwgKFJYX0ZJRk9fVEhSRVNIPDw4KSwgaW9hZGRyICsgR0VOQ1RMKTsKQEAgLTgwOCw3ICs4MTQsNyBAQAogCQlvdXRsKChpbmwoaW9hZGRyICsgTlZDVEwpICYgfjB4MDAzQykgfCAweDQ4MDAsIGlvYWRkciArIE5WQ1RMKTsKIAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCW91dGwoY3B1X3RvX2xlMTYoKCh1MTYqKWRldi0+ZGV2X2FkZHIpW2ldKSwgaW9hZGRyICsgTEFOMCArIGkqNCk7CisJCW91dGwobGUxNl90b19jcHUoKChfX2xlMTYqKWRldi0+ZGV2X2FkZHIpW2ldKSwgaW9hZGRyICsgTEFOMCArIGkqNCk7CiAKIAllcC0+dHhfdGhyZXNob2xkID0gVFhfRklGT19USFJFU0g7CiAJb3V0bChlcC0+dHhfdGhyZXNob2xkLCBpb2FkZHIgKyBUeFRocmVzaCk7CkBAIC05MTksNyArOTI1LDcgQEAKIAkvKiBJbml0aWFsaXplIGFsbCBSeCBkZXNjcmlwdG9ycy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKIAkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSAwOwotCQllcC0+cnhfcmluZ1tpXS5idWZsZW5ndGggPSBjcHVfdG9fbGUzMihlcC0+cnhfYnVmX3N6KTsKKwkJZXAtPnJ4X3JpbmdbaV0uYnVmbGVuZ3RoID0gZXAtPnJ4X2J1Zl9zejsKIAkJZXAtPnJ4X3JpbmdbaV0ubmV4dCA9IGVwLT5yeF9yaW5nX2RtYSArCiAJCQkJICAgICAgKGkrMSkqc2l6ZW9mKHN0cnVjdCBlcGljX3J4X2Rlc2MpOwogCQllcC0+cnhfc2tidWZmW2ldID0gTlVMTDsKQEAgLTkzNiw3ICs5NDIsNyBAQAogCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduIHRoZSBJUCBoZWFkZXIuICovCiAJCWVwLT5yeF9yaW5nW2ldLmJ1ZmFkZHIgPSBwY2lfbWFwX3NpbmdsZShlcC0+cGNpX2RldiwKIAkJCXNrYi0+ZGF0YSwgZXAtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSBjcHVfdG9fbGUzMihEZXNjT3duKTsKKwkJZXAtPnJ4X3JpbmdbaV0ucnhzdGF0dXMgPSBEZXNjT3duOwogCX0KIAllcC0+ZGlydHlfcnggPSAodW5zaWduZWQgaW50KShpIC0gUlhfUklOR19TSVpFKTsKIApAQCAtOTc0LDIwICs5ODAsMjAgQEAKIAllcC0+dHhfcmluZ1tlbnRyeV0uYnVmYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCBza2ItPmRhdGEsCiAJCSAJCQkgICAgICAgICAgICBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKGZyZWVfY291bnQgPCBUWF9RVUVVRV9MRU4vMikgey8qIFR5cGljYWwgcGF0aCAqLwotCQljdHJsX3dvcmQgPSBjcHVfdG9fbGUzMigweDEwMDAwMCk7IC8qIE5vIGludGVycnVwdCAqLworCQljdHJsX3dvcmQgPSAweDEwMDAwMDsgLyogTm8gaW50ZXJydXB0ICovCiAJfSBlbHNlIGlmIChmcmVlX2NvdW50ID09IFRYX1FVRVVFX0xFTi8yKSB7Ci0JCWN0cmxfd29yZCA9IGNwdV90b19sZTMyKDB4MTQwMDAwKTsgLyogVHgtZG9uZSBpbnRyLiAqLworCQljdHJsX3dvcmQgPSAweDE0MDAwMDsgLyogVHgtZG9uZSBpbnRyLiAqLwogCX0gZWxzZSBpZiAoZnJlZV9jb3VudCA8IFRYX1FVRVVFX0xFTiAtIDEpIHsKLQkJY3RybF93b3JkID0gY3B1X3RvX2xlMzIoMHgxMDAwMDApOyAvKiBObyBUeC1kb25lIGludHIuICovCisJCWN0cmxfd29yZCA9IDB4MTAwMDAwOyAvKiBObyBUeC1kb25lIGludHIuICovCiAJfSBlbHNlIHsKIAkJLyogTGVhdmUgcm9vbSBmb3IgYW4gYWRkaXRpb25hbCBlbnRyeS4gKi8KLQkJY3RybF93b3JkID0gY3B1X3RvX2xlMzIoMHgxNDAwMDApOyAvKiBUeC1kb25lIGludHIuICovCisJCWN0cmxfd29yZCA9IDB4MTQwMDAwOyAvKiBUeC1kb25lIGludHIuICovCiAJCWVwLT50eF9mdWxsID0gMTsKIAl9Ci0JZXAtPnR4X3JpbmdbZW50cnldLmJ1Zmxlbmd0aCA9IGN0cmxfd29yZCB8IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwllcC0+dHhfcmluZ1tlbnRyeV0uYnVmbGVuZ3RoID0gY3RybF93b3JkIHwgc2tiLT5sZW47CiAJZXAtPnR4X3JpbmdbZW50cnldLnR4c3RhdHVzID0KIAkJKChza2ItPmxlbiA+PSBFVEhfWkxFTiA/IHNrYi0+bGVuIDogRVRIX1pMRU4pIDw8IDE2KQotCQl8IGNwdV90b19sZTMyKERlc2NPd24pOworCQkJICAgIHwgRGVzY093bjsKIAogCWVwLT5jdXJfdHgrKzsKIAlpZiAoZXAtPnR4X2Z1bGwpCkBAIC0xMDQxLDcgKzEwNDcsNyBAQAogCWZvciAoZGlydHlfdHggPSBlcC0+ZGlydHlfdHg7IGN1cl90eCAtIGRpcnR5X3R4ID4gMDsgZGlydHlfdHgrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlpbnQgZW50cnkgPSBkaXJ0eV90eCAlIFRYX1JJTkdfU0laRTsKLQkJaW50IHR4c3RhdHVzID0gbGUzMl90b19jcHUoZXAtPnR4X3JpbmdbZW50cnldLnR4c3RhdHVzKTsKKwkJaW50IHR4c3RhdHVzID0gZXAtPnR4X3JpbmdbZW50cnldLnR4c3RhdHVzOwogCiAJCWlmICh0eHN0YXR1cyAmIERlc2NPd24pCiAJCQlicmVhazsJLyogSXQgc3RpbGwgaGFzbid0IGJlZW4gVHhlZCAqLwpAQCAtMTE2Myw4ICsxMTY5LDggQEAKIAkJcnhfd29ya19saW1pdCA9IGJ1ZGdldDsKIAogCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCi0Jd2hpbGUgKChlcC0+cnhfcmluZ1tlbnRyeV0ucnhzdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duKSkgPT0gMCkgewotCQlpbnQgc3RhdHVzID0gbGUzMl90b19jcHUoZXAtPnJ4X3JpbmdbZW50cnldLnJ4c3RhdHVzKTsKKwl3aGlsZSAoKGVwLT5yeF9yaW5nW2VudHJ5XS5yeHN0YXR1cyAmIERlc2NPd24pID09IDApIHsKKwkJaW50IHN0YXR1cyA9IGVwLT5yeF9yaW5nW2VudHJ5XS5yeHN0YXR1czsKIAogCQlpZiAoZGVidWcgPiA0KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgZXBpY19yeCgpIHN0YXR1cyB3YXMgJTguOHguXG4iLCBzdGF0dXMpOwpAQCAtMTIzOCw3ICsxMjQ0LDggQEAKIAkJCQlza2ItPmRhdGEsIGVwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQl3b3JrX2RvbmUrKzsKIAkJfQotCQllcC0+cnhfcmluZ1tlbnRyeV0ucnhzdGF0dXMgPSBjcHVfdG9fbGUzMihEZXNjT3duKTsKKwkJLyogQVY6IHNob3VsZG4ndCB3ZSBhZGQgYSBiYXJyaWVyIGhlcmU/ICovCisJCWVwLT5yeF9yaW5nW2VudHJ5XS5yeHN0YXR1cyA9IERlc2NPd247CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuYyBiL2RyaXZlcnMvbmV0L2ZlYy5jCmluZGV4IDBmYmYxYmIuLmQ3YTNlYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5jCkBAIC0xMjUzLDcgKzEyNTMsNyBAQAogCiAJLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwogCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGlkcC0+aXJxLCBpZHAtPmhhbmRsZXIsIDAsIGlkcC0+bmFtZSwgZGV2KSAhPSAwKQorCQlpZiAocmVxdWVzdF9pcnEoaWRwLT5pcnEsIGlkcC0+aGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLCBkZXYpICE9IDApCiAJCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLCBpZHAtPm5hbWUsIGlkcC0+aXJxKTsKIAl9CiAKQEAgLTEzODIsNyArMTM4Miw3IEBACiAKIAkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCiAJZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCAwLCBpZHAtPm5hbWUsIGRldikgIT0gMCkKKwkJaWYgKHJlcXVlc3RfaXJxKGIraWRwLT5pcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLCBkZXYpICE9IDApCiAJCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLCBpZHAtPm5hbWUsIGIraWRwLT5pcnEpOwogCX0KIApAQCAtMTU1Myw3ICsxNTUzLDcgQEAKIAogCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVycy4gKi8KIAlmb3IgKGlkcCA9IGlkOyBpZHAtPm5hbWU7IGlkcCsrKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShiK2lkcC0+aXJxLGZlY19lbmV0X2ludGVycnVwdCwwLGlkcC0+bmFtZSxkZXYpIT0wKQorCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsZGV2KSAhPSAwKQogCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKIAl9CiAKQEAgLTE2ODAsNyArMTY4MCw3IEBACiAKIAkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCiAJZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSxmZWNfZW5ldF9pbnRlcnJ1cHQsMCxpZHAtPm5hbWUsZGV2KSE9MCkKKwkJaWYgKHJlcXVlc3RfaXJxKGIraWRwLT5pcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLGRldikgIT0gMCkKIAkJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgSVJRKCVkKSFcbiIsCiAJCQkJaWRwLT5uYW1lLCBiK2lkcC0+aXJxKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwppbmRleCA1OGI3MWU2Li5lNWU2MzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJY2hhciBwaHlfaWRbQlVTX0lEX1NJWkVdOwogCi0Jc25wcmludGYocGh5X2lkLCBCVVNfSURfU0laRSwgUEhZX0lEX0ZNVCwKKwlzbnByaW50ZihwaHlfaWQsIEJVU19JRF9TSVpFLCAiJXg6JTAyeCIsCiAJCQkodW5zaWduZWQgaW50KWRldi0+YmFzZV9hZGRyLCBwcml2LT5waHlfYWRkcik7CiAKIAlwcml2LT5saW5rID0gUEhZX0RPV047CkBAIC0xMDU3LDYgKzEwNTcsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfZmVjX21hdGNoW10gPSB7CisJeyAudHlwZSA9ICJuZXR3b3JrIiwgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsIH0sCiAJeyAudHlwZSA9ICJuZXR3b3JrIiwgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIiwgfSwKIAl7IC50eXBlID0gIm5ldHdvcmsiLCAuY29tcGF0aWJsZSA9ICJtcGM1MjAwLWZlYyIsIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCmluZGV4IDE4Mzc1ODRjLi5mNTYzNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYwpAQCAtMTA5LDcgKzEwOSw4IEBACiAJCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7CiAJCWlmIChpcnEgIT0gTk9fSVJRKSB7CiAJCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7Ci0JCQlidXMtPmlycVsqaWRdID0gaXJxOworCQkJaWYgKGlkKQorCQkJCWJ1cy0+aXJxWyppZF0gPSBpcnE7CiAJCX0KIAl9CiAKQEAgLTEyMyw3ICsxMjQsNyBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWJ1cy0+aWQgPSByZXMuc3RhcnQ7CisJc25wcmludGYoYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCByZXMuc3RhcnQpOwogCWJ1cy0+cHJpdiA9IHByaXY7CiAKIAlidXMtPmRldiA9IGRldjsKQEAgLTE3OCw2ICsxNzksNyBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X2ZlY19tZGlvX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tZGlvIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDBiLWZlYy1waHkiLCB9LAogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCA4MDFiNGQ5Li44YzQyMTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtMjksOTAgKzI5LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKgotICogQ2hhbmdlbG9nOgotICogCTAuMDE6IDA1IE9jdCAyMDAzOiBGaXJzdCByZWxlYXNlIHRoYXQgY29tcGlsZXMgd2l0aG91dCB3YXJuaW5ncy4KLSAqIAkwLjAyOiAwNSBPY3QgMjAwMzogRml4IGJ1ZyBmb3IgbnZfZHJhaW5fdHg6IGRvIG5vdCB0cnkgdG8gZnJlZSBOVUxMIHNrYnMuCi0gKiAJCQkgICBDaGVjayBhbGwgUENJIEJBUnMgZm9yIHRoZSByZWdpc3RlciB3aW5kb3cuCi0gKiAJCQkgICB1ZGVsYXkgYWRkZWQgdG8gbWlpX3J3LgotICogCTAuMDM6IDA2IE9jdCAyMDAzOiBJbml0aWFsaXplIGRldi0+aXJxLgotICogCTAuMDQ6IDA3IE9jdCAyMDAzOiBJbml0aWFsaXplIG5wLT5sb2NrLCByZWR1Y2UgaGFuZGxlZCBpcnFzLCBhZGQgcHJpbnRrcy4KLSAqIAkwLjA1OiAwOSBPY3QgMjAwMzogcHJpbnRrIHJlbW92ZWQgYWdhaW4sIGlycSBzdGF0dXMgcHJpbnQgdHhfdGltZW91dC4KLSAqIAkwLjA2OiAxMCBPY3QgMjAwMzogTUFDIEFkZHJlc3MgcmVhZCB1cGRhdGVkLCBwZmYgZmxhZyBnZW5lcmF0aW9uIHVwZGF0ZWQsCi0gKiAJCQkgICBpcnEgbWFzayB1cGRhdGVkCi0gKiAJMC4wNzogMTQgT2N0IDIwMDM6IEZ1cnRoZXIgaXJxIG1hc2sgdXBkYXRlcy4KLSAqIAkwLjA4OiAyMCBPY3QgMjAwMzogcnhfZGVzYy5MZW5ndGggaW5pdGlhbGl6YXRpb24gYWRkZWQsIG52X2FsbG9jX3J4IHJlZmlsbAotICogCQkJICAgYWRkZWQgaW50byBpcnEgaGFuZGxlciwgTlVMTCBjaGVjayBmb3IgZHJhaW5fcmluZy4KLSAqIAkwLjA5OiAyMCBPY3QgMjAwMzogQmFzaWMgbGluayBzcGVlZCBpcnEgaW1wbGVtZW50YXRpb24uIE9ubHkgaGFuZGxlIHRoZQotICogCQkJICAgcmVxdWVzdGVkIGludGVycnVwdCBzb3VyY2VzLgotICogCTAuMTA6IDIwIE9jdCAyMDAzOiBGaXJzdCBjbGVhbnVwIGZvciByZWxlYXNlLgotICogCTAuMTE6IDIxIE9jdCAyMDAzOiBoZXhkdW1wIGZvciB0eCBhZGRlZCwgcnggYnVmZmVyIHNpemVzIGluY3JlYXNlZC4KLSAqIAkJCSAgIE1BQyBBZGRyZXNzIGluaXQgZml4LCBzZXRfbXVsdGljYXN0IGNsZWFudXAuCi0gKiAJMC4xMjogMjMgT2N0IDIwMDM6IENsZWFudXBzIGZvciByZWxlYXNlLgotICogCTAuMTM6IDI1IE9jdCAyMDAzOiBMaW1pdCBmb3IgY29uY3VycmVudCB0eCBwYWNrZXRzIGluY3JlYXNlZCB0byAxMC4KLSAqIAkJCSAgIFNldCBsaW5rIHNwZWVkIGNvcnJlY3RseS4gc3RhcnQgcnggYmVmb3JlIHN0YXJ0aW5nCi0gKiAJCQkgICB0eCAobnZfc3RhcnRfcnggc2V0cyB0aGUgbGluayBzcGVlZCkuCi0gKiAJMC4xNDogMjUgT2N0IDIwMDM6IE5pYyBkZXBlbmRhbnQgaXJxIG1hc2suCi0gKiAJMC4xNTogMDggTm92IDIwMDM6IGZpeCBzbXAgZGVhZGxvY2sgd2l0aCBzZXRfbXVsdGljYXN0X2xpc3QgZHVyaW5nCi0gKiAJCQkgICBvcGVuLgotICogCTAuMTY6IDE1IE5vdiAyMDAzOiBpbmNsdWRlIGZpbGUgY2xlYW51cCBmb3IgcHBjNjQsIHJ4IGJ1ZmZlciBzaXplCi0gKiAJCQkgICBpbmNyZWFzZWQgdG8gMTYyOCBieXRlcy4KLSAqIAkwLjE3OiAxNiBOb3YgMjAwMzogdW5kbyByeCBidWZmZXIgc2l6ZSBpbmNyZWFzZS4gU3Vic3RyYWN0IDEgZnJvbQotICogCQkJICAgdGhlIHR4IGxlbmd0aC4KLSAqIAkwLjE4OiAxNyBOb3YgMjAwMzogZml4IG9vcHMgZHVlIHRvIGxhdGUgaW5pdGlhbGl6YXRpb24gb2YgZGV2X3N0YXRzCi0gKiAJMC4xOTogMjkgTm92IDIwMDM6IEhhbmRsZSBSeE5vQnVmLCBkZXRlY3QgJiBoYW5kbGUgaW52YWxpZCBtYWMKLSAqIAkJCSAgIGFkZHJlc3NlcywgcmVhbGx5IHN0b3AgcnggaWYgYWxyZWFkeSBydW5uaW5nCi0gKiAJCQkgICBpbiBudl9zdGFydF9yeCwgY2xlYW4gdXAgYSBiaXQuCi0gKiAJMC4yMDogMDcgRGVjIDIwMDM6IGFsbG9jIGZpeGVzCi0gKiAJMC4yMTogMTIgSmFuIDIwMDQ6IGFkZGl0aW9uYWwgYWxsb2MgZml4LCBuaWMgcG9sbGluZyBmaXguCi0gKgkwLjIyOiAxOSBKYW4gMjAwNDogcmVwcm9ncmFtIHRpbWVyIHRvIGEgc2FuZSByYXRlLCBhdm9pZCBsb2NrdXAKLSAqCQkJICAgb24gY2xvc2UuCi0gKgkwLjIzOiAyNiBKYW4gMjAwNDogdmFyaW91cyBzbWFsbCBjbGVhbnVwcwotICoJMC4yNDogMjcgRmViIDIwMDQ6IG1ha2UgZHJpdmVyIGV2ZW4gbGVzcyBhbm9ueW1vdXMgaW4gYmFja3RyYWNlcwotICoJMC4yNTogMDkgTWFyIDIwMDQ6IHdvbCBzdXBwb3J0Ci0gKgkwLjI2OiAwMyBKdW4gMjAwNDogbmV0ZHJpdmVyIHNwZWNpZmljIGFubm90YXRpb24sIHNwYXJzZS1yZWxhdGVkIGZpeGVzCi0gKgkwLjI3OiAxOSBKdW4gMjAwNDogR2lnYWJpdCBzdXBwb3J0LCBuZXcgZGVzY3JpcHRvciByaW5ncywKLSAqCQkJICAgYWRkZWQgQ0s4MDQvTUNQMDQgZGV2aWNlIElEcywgY29kZSBmaXhlcwotICoJCQkgICBmb3IgcmVnaXN0ZXJzLCBsaW5rIHN0YXR1cyBhbmQgb3RoZXIgbWlub3IgZml4ZXMuCi0gKgkwLjI4OiAyMSBKdW4gMjAwNDogQmlnIGNsZWFudXAsIG1ha2luZyBkcml2ZXIgbW9zdGx5IGVuZGlhbiBzYWZlCi0gKgkwLjI5OiAzMSBBdWcgMjAwNDogQWRkIGJhY2t1cCB0aW1lciBmb3IgbGluayBjaGFuZ2Ugbm90aWZpY2F0aW9uLgotICoJMC4zMDogMjUgU2VwIDIwMDQ6IHJ4IGNoZWNrc3VtIHN1cHBvcnQgZm9yIG5mIDI1MCBHYi4gQWRkIHJ4IHJlc2V0Ci0gKgkJCSAgIGludG8gbnZfY2xvc2UsIG90aGVyd2lzZSByZWVuYWJsaW5nIGZvciB3b2wgY2FuCi0gKgkJCSAgIGNhdXNlIERNQSB0byBrZnJlZSdkIG1lbW9yeS4KLSAqCTAuMzE6IDE0IE5vdiAyMDA0OiBldGh0b29sIHN1cHBvcnQgZm9yIGdldHRpbmcvc2V0dGluZyBsaW5rCi0gKgkJCSAgIGNhcGFiaWxpdGllcy4KLSAqCTAuMzI6IDE2IEFwciAyMDA1OiBSWF9FUlJPUjQgaGFuZGxpbmcgYWRkZWQuCi0gKgkwLjMzOiAxNiBNYXkgMjAwNTogU3VwcG9ydCBmb3IgTUNQNTEgYWRkZWQuCi0gKgkwLjM0OiAxOCBKdW4gMjAwNTogQWRkIERFVl9ORUVEX0xJTktUSU1FUiB0byBhbGwgbkZvcmNlIG5pY3MuCi0gKgkwLjM1OiAyNiBKdW4gMjAwNTogU3VwcG9ydCBmb3IgTUNQNTUgYWRkZWQuCi0gKgkwLjM2OiAyOCBKdW4gMjAwNTogQWRkIGp1bWJvIGZyYW1lIHN1cHBvcnQuCi0gKgkwLjM3OiAxMCBKdWwgMjAwNTogQWRkaXRpb25hbCBldGh0b29sIHN1cHBvcnQsIGNsZWFudXAgb2YgcGNpIGlkIGxpc3QKLSAqCTAuMzg6IDE2IEp1bCAyMDA1OiB0eCBpcnEgcmV3cml0ZTogVXNlIGdsb2JhbCBmbGFncyBpbnN0ZWFkIG9mCi0gKgkJCSAgIHBlci1wYWNrZXQgZmxhZ3MuCi0gKgkwLjM5OiAxOCBKdWwgMjAwNTogQWRkIDY0Yml0IGRlc2NyaXB0b3Igc3VwcG9ydC4KLSAqCTAuNDA6IDE5IEp1bCAyMDA1OiBBZGQgc3VwcG9ydCBmb3IgbWFjIGFkZHJlc3MgY2hhbmdlLgotICoJMC40MTogMzAgSnVsIDIwMDU6IFdyaXRlIGJhY2sgb3JpZ2luYWwgTUFDIGluIG52X2Nsb3NlIGluc3RlYWQKLSAqCQkJICAgb2YgbnZfcmVtb3ZlCi0gKgkwLjQyOiAwNiBBdWcgMjAwNTogRml4IGxhY2sgb2YgbGluayBzcGVlZCBpbml0aWFsaXphdGlvbgotICoJCQkgICBpbiB0aGUgc2Vjb25kIChhbmQgbGF0ZXIpIG52X29wZW4gY2FsbAotICoJMC40MzogMTAgQXVnIDIwMDU6IEFkZCBzdXBwb3J0IGZvciB0eCBjaGVja3N1bS4KLSAqCTAuNDQ6IDIwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3Igc2NhdHRlciBnYXRoZXIgYW5kIHNlZ21lbnRhdGlvbi4KLSAqCTAuNDU6IDE4IFNlcCAyMDA1OiBSZW1vdmUgbnZfc3RvcC9zdGFydF9yeCBmcm9tIGV2ZXJ5IGxpbmsgY2hlY2sKLSAqCTAuNDY6IDIwIE9jdCAyMDA1OiBBZGQgaXJxIG9wdGltaXphdGlvbiBtb2Rlcy4KLSAqCTAuNDc6IDI2IE9jdCAyMDA1OiBBZGQgcGh5YWRkciAwIGluIHBoeSBzY2FuLgotICoJMC40ODogMjQgRGVjIDIwMDU6IERpc2FibGUgVFNPLCBidWdmaXggZm9yIHBjaV9tYXBfc2luZ2xlCi0gKgkwLjQ5OiAxMCBEZWMgMjAwNTogRml4IHRzbyBmb3IgbGFyZ2UgYnVmZmVycy4KLSAqCTAuNTA6IDIwIEphbiAyMDA2OiBBZGQgODAyMXBxIHRhZ2dpbmcgc3VwcG9ydC4KLSAqCTAuNTE6IDIwIEphbiAyMDA2OiBBZGQgNjRiaXQgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgcmluZ3MuCi0gKgkwLjUyOiAyMCBKYW4gMjAwNjogQWRkIE1TSS9NU0lYIHN1cHBvcnQuCi0gKgkwLjUzOiAxOSBNYXIgMjAwNjogRml4IGluaXQgZnJvbSBsb3cgcG93ZXIgbW9kZSBhbmQgYWRkIGh3IHJlc2V0LgotICoJMC41NDogMjEgTWFyIDIwMDY6IEZpeCBzcGluIGxvY2tzIGZvciBtdWx0aSBpcnFzIGFuZCBjbGVhbnVwLgotICoJMC41NTogMjIgTWFyIDIwMDY6IEFkZCBmbG93IGNvbnRyb2wgKHBhdXNlIGZyYW1lKS4KLSAqCTAuNTY6IDIyIE1hciAyMDA2OiBBZGRpdGlvbmFsIGV0aHRvb2wgY29uZmlnIGFuZCBtb2R1bGVwYXJhbSBzdXBwb3J0LgotICoJMC41NzogMTQgTWF5IDIwMDY6IE1hYyBhZGRyZXNzIHNldCBpbiBwcm9iZS9yZW1vdmUgYW5kIG9yZGVyIGNvcnJlY3Rpb25zLgotICoJMC41ODogMzAgT2N0IDIwMDY6IEFkZGVkIHN1cHBvcnQgZm9yIHNpZGViYW5kIG1hbmFnZW1lbnQgdW5pdC4KLSAqCTAuNTk6IDMwIE9jdCAyMDA2OiBBZGRlZCBzdXBwb3J0IGZvciByZWNvdmVyYWJsZSBlcnJvci4KLSAqCTAuNjA6IDIwIEphbiAyMDA3OiBDb2RlIG9wdGltaXphdGlvbnMgZm9yIHJpbmdzLCByeCAmIHR4IGRhdGEgcGF0aHMsIGFuZCBzdGF0cy4KLSAqCiAgKiBLbm93biBidWdzOgogICogV2Ugc3VzcGVjdCB0aGF0IG9uIHNvbWUgaGFyZHdhcmUgbm8gVFggZG9uZSBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCiAgKiBUaGlzIG1lYW5zIHJlY292ZXJ5IGZyb20gbmV0aWZfc3RvcF9xdWV1ZSBvbmx5IGhhcHBlbnMgaWYgdGhlIGh3IHRpbWVyCkBAIC0xMjMsMTEgKzM5LDYgQEAKICAqIERFVl9ORUVEX1RJTUVSSVJRIHdpbGwgbm90IGhhcm0geW91IG9uIHNhbmUgaGFyZHdhcmUsIG9ubHkgZ2VuZXJhdGluZyBhIGZldwogICogc3VwZXJmbHVvdXMgdGltZXIgaW50ZXJydXB0cyBmcm9tIHRoZSBuaWMuCiAgKi8KLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLSNkZWZpbmUgRFJJVkVSTkFQSSAiLU5BUEkiCi0jZWxzZQotI2RlZmluZSBEUklWRVJOQVBJCi0jZW5kaWYKICNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjYxIgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKQEAgLTE4NCw2ICs5NSw3IEBACiAjZGVmaW5lIERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMSAgIDB4MDgwMDAgIC8qIGRldmljZSBzdXBwb3J0cyB0eCBwYXVzZSBmcmFtZXMgdmVyc2lvbiAxICovCiAjZGVmaW5lIERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMiAgIDB4MTAwMDAgIC8qIGRldmljZSBzdXBwb3J0cyB0eCBwYXVzZSBmcmFtZXMgdmVyc2lvbiAyICovCiAjZGVmaW5lIERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMyAgIDB4MjAwMDAgIC8qIGRldmljZSBzdXBwb3J0cyB0eCBwYXVzZSBmcmFtZXMgdmVyc2lvbiAzICovCisjZGVmaW5lIERFVl9ORUVEX1RYX0xJTUlUICAgICAgICAgIDB4NDAwMDAgIC8qIGRldmljZSBuZWVkcyB0byBsaW1pdCB0eCAqLwogCiBlbnVtIHsKIAlOdlJlZ0lycVN0YXR1cyA9IDB4MDAwLApAQCAtNjM1LDYgKzU0Nyw4IEBACiAjZGVmaW5lIE5WX1JFU1RBUlRfVFggICAgICAgICAweDEKICNkZWZpbmUgTlZfUkVTVEFSVF9SWCAgICAgICAgIDB4MgogCisjZGVmaW5lIE5WX1RYX0xJTUlUX0NPVU5UICAgICAxNgorCiAvKiBzdGF0aXN0aWNzICovCiBzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgewogCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOwpAQCAtNzQzLDYgKzY1Nyw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlkbWFfYWRkcl90IGRtYTsKIAl1bnNpZ25lZCBpbnQgZG1hX2xlbjsKKwlzdHJ1Y3QgcmluZ19kZXNjX2V4ICpmaXJzdF90eF9kZXNjOworCXN0cnVjdCBudl9za2JfbWFwICpuZXh0X3R4X2N0eDsKIH07CiAKIC8qCkBAIC04MjcsNiArNzQzLDEwIEBACiAJdW5pb24gcmluZ190eXBlIHR4X3Jpbmc7CiAJdTMyIHR4X2ZsYWdzOwogCWludCB0eF9yaW5nX3NpemU7CisJaW50IHR4X2xpbWl0OworCXUzMiB0eF9wa3RzX2luX3Byb2dyZXNzOworCXN0cnVjdCBudl9za2JfbWFwICp0eF9jaGFuZ2Vfb3duZXI7CisJc3RydWN0IG52X3NrYl9tYXAgKnR4X2VuZF9mbGlwOwogCWludCB0eF9zdG9wOwogCiAJLyogdmxhbiBmaWVsZHMgKi8KQEAgLTkyMSw2ICs4NDEsMTMgQEAKIAlyZXR1cm4gbGUzMl90b19jcHUocHJkLT5mbGFnbGVuKSAmIExFTl9NQVNLX1YyOwogfQogCitzdGF0aWMgYm9vbCBudl9vcHRpbWl6ZWQoc3RydWN0IGZlX3ByaXYgKm5wKQoreworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgaW50IHJlZ19kZWxheShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHRhcmdldCwKIAkJCQlpbnQgZGVsYXksIGludCBkZWxheW1heCwgY29uc3QgY2hhciAqbXNnKQogewpAQCAtOTU3LDcgKzg4NCw3IEBACiAJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAKLQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwlpZiAoIW52X29wdGltaXplZChucCkpIHsKIAkJaWYgKHJ4dHhfZmxhZ3MgJiBOVl9TRVRVUF9SWF9SSU5HKSB7CiAJCQl3cml0ZWwoZG1hX2xvdyhucC0+cmluZ19hZGRyKSwgYmFzZSArIE52UmVnUnhSaW5nUGh5c0FkZHIpOwogCQl9CkBAIC05ODAsNyArOTA3LDcgQEAKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAKLQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwlpZiAoIW52X29wdGltaXplZChucCkpIHsKIAkJaWYgKG5wLT5yeF9yaW5nLm9yaWcpCiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAobnAtPnJ4X3Jpbmdfc2l6ZSArIG5wLT50eF9yaW5nX3NpemUpLAogCQkJCQkgICAgbnAtPnJ4X3Jpbmcub3JpZywgbnAtPnJpbmdfYWRkcik7CkBAIC0xNDI2LDYgKzEzNTMsMTggQEAKIAkJICAgICAgIGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCk7CiB9CiAKK3N0YXRpYyB2b2lkIG52X3N0YXJ0X3J4dHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwludl9zdGFydF9yeChkZXYpOworCW52X3N0YXJ0X3R4KGRldik7Cit9CisKK3N0YXRpYyB2b2lkIG52X3N0b3Bfcnh0eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW52X3N0b3BfcngoZGV2KTsKKwludl9zdG9wX3R4KGRldik7Cit9CisKIHN0YXRpYyB2b2lkIG52X3R4cnhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTY0OCw3ICsxNTg3LDcgQEAKIAl9IGVsc2UgewogCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOwogCX0KLQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisJaWYgKCFudl9vcHRpbWl6ZWQobnApKQogCQlyZXRjb2RlID0gbnZfYWxsb2NfcngoZGV2KTsKIAllbHNlCiAJCXJldGNvZGUgPSBudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KTsKQEAgLTE2NzMsOCArMTYxMiwxMCBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGk7CisKIAlucC0+Z2V0X3J4ID0gbnAtPnB1dF9yeCA9IG5wLT5maXJzdF9yeCA9IG5wLT5yeF9yaW5nOwotCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKKworCWlmICghbnZfb3B0aW1pemVkKG5wKSkKIAkJbnAtPmxhc3Rfcngub3JpZyA9ICZucC0+cnhfcmluZy5vcmlnW25wLT5yeF9yaW5nX3NpemUtMV07CiAJZWxzZQogCQlucC0+bGFzdF9yeC5leCA9ICZucC0+cnhfcmluZy5leFtucC0+cnhfcmluZ19zaXplLTFdOwpAQCAtMTY4Miw3ICsxNjIzLDcgQEAKIAlucC0+bGFzdF9yeF9jdHggPSAmbnAtPnJ4X3NrYltucC0+cnhfcmluZ19zaXplLTFdOwogCiAJZm9yIChpID0gMDsgaSA8IG5wLT5yeF9yaW5nX3NpemU7IGkrKykgewotCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwkJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CiAJCQlucC0+cnhfcmluZy5vcmlnW2ldLmZsYWdsZW4gPSAwOwogCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5idWYgPSAwOwogCQl9IGVsc2UgewpAQCAtMTcwMCwxNiArMTY0MSwyMSBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGk7CisKIAlucC0+Z2V0X3R4ID0gbnAtPnB1dF90eCA9IG5wLT5maXJzdF90eCA9IG5wLT50eF9yaW5nOwotCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKKworCWlmICghbnZfb3B0aW1pemVkKG5wKSkKIAkJbnAtPmxhc3RfdHgub3JpZyA9ICZucC0+dHhfcmluZy5vcmlnW25wLT50eF9yaW5nX3NpemUtMV07CiAJZWxzZQogCQlucC0+bGFzdF90eC5leCA9ICZucC0+dHhfcmluZy5leFtucC0+dHhfcmluZ19zaXplLTFdOwogCW5wLT5nZXRfdHhfY3R4ID0gbnAtPnB1dF90eF9jdHggPSBucC0+Zmlyc3RfdHhfY3R4ID0gbnAtPnR4X3NrYjsKIAlucC0+bGFzdF90eF9jdHggPSAmbnAtPnR4X3NrYltucC0+dHhfcmluZ19zaXplLTFdOworCW5wLT50eF9wa3RzX2luX3Byb2dyZXNzID0gMDsKKwlucC0+dHhfY2hhbmdlX293bmVyID0gTlVMTDsKKwlucC0+dHhfZW5kX2ZsaXAgPSBOVUxMOwogCiAJZm9yIChpID0gMDsgaSA8IG5wLT50eF9yaW5nX3NpemU7IGkrKykgewotCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwkJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CiAJCQlucC0+dHhfcmluZy5vcmlnW2ldLmZsYWdsZW4gPSAwOwogCQkJbnAtPnR4X3Jpbmcub3JpZ1tpXS5idWYgPSAwOwogCQl9IGVsc2UgewpAQCAtMTcyMCw2ICsxNjY2LDkgQEAKIAkJfQogCQlucC0+dHhfc2tiW2ldLnNrYiA9IE5VTEw7CiAJCW5wLT50eF9za2JbaV0uZG1hID0gMDsKKwkJbnAtPnR4X3NrYltpXS5kbWFfbGVuID0gMDsKKwkJbnAtPnR4X3NrYltpXS5maXJzdF90eF9kZXNjID0gTlVMTDsKKwkJbnAtPnR4X3NrYltpXS5uZXh0X3R4X2N0eCA9IE5VTEw7CiAJfQogfQogCkBAIC0xNzI5LDcgKzE2NzgsOCBAQAogCiAJbnZfaW5pdF90eChkZXYpOwogCW52X2luaXRfcngoZGV2KTsKLQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisKKwlpZiAoIW52X29wdGltaXplZChucCkpCiAJCXJldHVybiBudl9hbGxvY19yeChkZXYpOwogCWVsc2UKIAkJcmV0dXJuIG52X2FsbG9jX3J4X29wdGltaXplZChkZXYpOwpAQCAtMTc2MCw3ICsxNzEwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucC0+dHhfcmluZ19zaXplOyBpKyspIHsKLQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJCWlmICghbnZfb3B0aW1pemVkKG5wKSkgewogCQkJbnAtPnR4X3Jpbmcub3JpZ1tpXS5mbGFnbGVuID0gMDsKIAkJCW5wLT50eF9yaW5nLm9yaWdbaV0uYnVmID0gMDsKIAkJfSBlbHNlIHsKQEAgLTE3NzEsNyArMTcyMSwxNCBAQAogCQl9CiAJCWlmIChudl9yZWxlYXNlX3R4c2tiKGRldiwgJm5wLT50eF9za2JbaV0pKQogCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCW5wLT50eF9za2JbaV0uZG1hID0gMDsKKwkJbnAtPnR4X3NrYltpXS5kbWFfbGVuID0gMDsKKwkJbnAtPnR4X3NrYltpXS5maXJzdF90eF9kZXNjID0gTlVMTDsKKwkJbnAtPnR4X3NrYltpXS5uZXh0X3R4X2N0eCA9IE5VTEw7CiAJfQorCW5wLT50eF9wa3RzX2luX3Byb2dyZXNzID0gMDsKKwlucC0+dHhfY2hhbmdlX293bmVyID0gTlVMTDsKKwlucC0+dHhfZW5kX2ZsaXAgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBudl9kcmFpbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTc4MCw3ICsxNzM3LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucC0+cnhfcmluZ19zaXplOyBpKyspIHsKLQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJCWlmICghbnZfb3B0aW1pemVkKG5wKSkgewogCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5mbGFnbGVuID0gMDsKIAkJCW5wLT5yeF9yaW5nLm9yaWdbaV0uYnVmID0gMDsKIAkJfSBlbHNlIHsKQEAgLTE4MDEsNyArMTc1OCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBkcmFpbl9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBudl9kcmFpbl9yeHR4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbnZfZHJhaW5fdHgoZGV2KTsKIAludl9kcmFpbl9yeChkZXYpOwpAQCAtMTgzMiw2ICsxNzg5LDcgQEAKIAlzdHJ1Y3QgcmluZ19kZXNjKiBzdGFydF90eDsKIAlzdHJ1Y3QgcmluZ19kZXNjKiBwcmV2X3R4OwogCXN0cnVjdCBudl9za2JfbWFwKiBwcmV2X3R4X2N0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogYWRkIGZyYWdtZW50cyB0byBlbnRyaWVzIGNvdW50ICovCiAJZm9yIChpID0gMDsgaSA8IGZyYWdtZW50czsgaSsrKSB7CkBAIC0xODQxLDEwICsxNzk5LDEwIEBACiAKIAllbXB0eV9zbG90cyA9IG52X2dldF9lbXB0eV90eF9zbG90cyhucCk7CiAJaWYgKHVubGlrZWx5KGVtcHR5X3Nsb3RzIDw9IGVudHJpZXMpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJbnAtPnR4X3N0b3AgPSAxOwotCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIApAQCAtMTkwNywxMyArMTg2NSwxMyBAQAogCQl0eF9mbGFnc19leHRyYSA9IHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgPwogCQkJIE5WX1RYMl9DSEVDS1NVTV9MMyB8IE5WX1RYMl9DSEVDS1NVTV9MNCA6IDA7CiAKLQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBzZXQgdHggZmxhZ3MgKi8KIAlzdGFydF90eC0+ZmxhZ2xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKIAlucC0+cHV0X3R4Lm9yaWcgPSBwdXRfdHg7CiAKLQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfeG1pdDogZW50cmllcyAlZCBxdWV1ZWQgZm9yIHRyYW5zbWlzc2lvbi4gdHhfZmxhZ3NfZXh0cmE6ICV4XG4iLAogCQlkZXYtPm5hbWUsIGVudHJpZXMsIHR4X2ZsYWdzX2V4dHJhKTsKQEAgLTE5NDgsNiArMTkwNiw4IEBACiAJc3RydWN0IHJpbmdfZGVzY19leCogc3RhcnRfdHg7CiAJc3RydWN0IHJpbmdfZGVzY19leCogcHJldl90eDsKIAlzdHJ1Y3QgbnZfc2tiX21hcCogcHJldl90eF9jdHg7CisJc3RydWN0IG52X3NrYl9tYXAqIHN0YXJ0X3R4X2N0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogYWRkIGZyYWdtZW50cyB0byBlbnRyaWVzIGNvdW50ICovCiAJZm9yIChpID0gMDsgaSA8IGZyYWdtZW50czsgaSsrKSB7CkBAIC0xOTU3LDE0ICsxOTE3LDE1IEBACiAKIAllbXB0eV9zbG90cyA9IG52X2dldF9lbXB0eV90eF9zbG90cyhucCk7CiAJaWYgKHVubGlrZWx5KGVtcHR5X3Nsb3RzIDw9IGVudHJpZXMpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJbnAtPnR4X3N0b3AgPSAxOwotCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAogCXN0YXJ0X3R4ID0gcHV0X3R4ID0gbnAtPnB1dF90eC5leDsKKwlzdGFydF90eF9jdHggPSBucC0+cHV0X3R4X2N0eDsKIAogCS8qIHNldHVwIHRoZSBoZWFkZXIgYnVmZmVyICovCiAJZG8gewpAQCAtMjAzNSwxMyArMTk5NiwzMyBAQAogCQkJc3RhcnRfdHgtPnR4dmxhbiA9IDA7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOworCisJaWYgKG5wLT50eF9saW1pdCkgeworCQkvKiBMaW1pdCB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHR4LiBTZXR1cCBhbGwgZnJhZ21lbnRzLCBidXQKKwkJICogZG8gbm90IHNldCB0aGUgVkFMSUQgYml0IG9uIHRoZSBmaXJzdCBkZXNjcmlwdG9yLiBTYXZlIGEgcG9pbnRlcgorCQkgKiB0byB0aGF0IGRlc2NyaXB0b3IgYW5kIGFsc28gZm9yIG5leHQgc2tiX21hcCBlbGVtZW50LgorCQkgKi8KKworCQlpZiAobnAtPnR4X3BrdHNfaW5fcHJvZ3Jlc3MgPT0gTlZfVFhfTElNSVRfQ09VTlQpIHsKKwkJCWlmICghbnAtPnR4X2NoYW5nZV9vd25lcikKKwkJCQlucC0+dHhfY2hhbmdlX293bmVyID0gc3RhcnRfdHhfY3R4OworCisJCQkvKiByZW1vdmUgVkFMSUQgYml0ICovCisJCQl0eF9mbGFncyAmPSB+TlZfVFgyX1ZBTElEOworCQkJc3RhcnRfdHhfY3R4LT5maXJzdF90eF9kZXNjID0gc3RhcnRfdHg7CisJCQlzdGFydF90eF9jdHgtPm5leHRfdHhfY3R4ID0gbnAtPnB1dF90eF9jdHg7CisJCQlucC0+dHhfZW5kX2ZsaXAgPSBucC0+cHV0X3R4X2N0eDsKKwkJfSBlbHNlIHsKKwkJCW5wLT50eF9wa3RzX2luX3Byb2dyZXNzKys7CisJCX0KKwl9CiAKIAkvKiBzZXQgdHggZmxhZ3MgKi8KIAlzdGFydF90eC0+ZmxhZ2xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKIAlucC0+cHV0X3R4LmV4ID0gcHV0X3R4OwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0X3htaXRfb3B0aW1pemVkOiBlbnRyaWVzICVkIHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLiB0eF9mbGFnc19leHRyYTogJXhcbiIsCiAJCWRldi0+bmFtZSwgZW50cmllcywgdHhfZmxhZ3NfZXh0cmEpOwpAQCAtMjA2MCw2ICsyMDQxLDI0IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG52X3R4X2ZsaXBfb3duZXJzaGlwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5wLT50eF9wa3RzX2luX3Byb2dyZXNzLS07CisJaWYgKG5wLT50eF9jaGFuZ2Vfb3duZXIpIHsKKwkJbnAtPnR4X2NoYW5nZV9vd25lci0+Zmlyc3RfdHhfZGVzYy0+ZmxhZ2xlbiB8PQorCQkJY3B1X3RvX2xlMzIoTlZfVFgyX1ZBTElEKTsKKwkJbnAtPnR4X3BrdHNfaW5fcHJvZ3Jlc3MrKzsKKworCQlucC0+dHhfY2hhbmdlX293bmVyID0gbnAtPnR4X2NoYW5nZV9vd25lci0+bmV4dF90eF9jdHg7CisJCWlmIChucC0+dHhfY2hhbmdlX293bmVyID09IG5wLT50eF9lbmRfZmxpcCkKKwkJCW5wLT50eF9jaGFuZ2Vfb3duZXIgPSBOVUxMOworCisJCXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJfQorfQorCiAvKgogICogbnZfdHhfZG9uZTogY2hlY2sgZm9yIGNvbXBsZXRlZCBwYWNrZXRzLCByZWxlYXNlIHRoZSBza2JzLgogICoKQEAgLTIxNDcsNiArMjE0NiwxMCBAQAogCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKworCQkJaWYgKG5wLT50eF9saW1pdCkgeworCQkJCW52X3R4X2ZsaXBfb3duZXJzaGlwKGRldik7CisJCQl9CiAJCX0KIAkJaWYgKHVubGlrZWx5KG5wLT5nZXRfdHguZXgrKyA9PSBucC0+bGFzdF90eC5leCkpCiAJCQlucC0+Z2V0X3R4LmV4ID0gbnAtPmZpcnN0X3R4LmV4OwpAQCAtMjE5Miw3ICsyMTk1LDcgQEAKIAkJfQogCQlwcmludGsoS0VSTl9JTkZPICIlczogRHVtcGluZyB0eCByaW5nXG4iLCBkZXYtPm5hbWUpOwogCQlmb3IgKGk9MDtpPG5wLT50eF9yaW5nX3NpemU7aSs9IDQpIHsKLQkJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQkJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJTAzeDogJTA4eCAlMDh4IC8vICUwOHggJTA4eCAvLyAlMDh4ICUwOHggLy8gJTA4eCAlMDh4XG4iLAogCQkJCSAgICAgICBpLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLmJ1ZiksCkBAIC0yMjI4LDcgKzIyMzEsNyBAQAogCW52X3N0b3BfdHgoZGV2KTsKIAogCS8qIDIpIGNoZWNrIHRoYXQgdGhlIHBhY2tldHMgd2VyZSBub3Qgc2VudCBhbHJlYWR5OiAqLwotCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKKwlpZiAoIW52X29wdGltaXplZChucCkpCiAJCW52X3R4X2RvbmUoZGV2KTsKIAllbHNlCiAJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CkBAIC0yNTk1LDEyICsyNTk4LDEwIEBACiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCS8qIHN0b3AgZW5naW5lcyAqLwotCQludl9zdG9wX3J4KGRldik7Ci0JCW52X3N0b3BfdHgoZGV2KTsKKwkJbnZfc3RvcF9yeHR4KGRldik7CiAJCW52X3R4cnhfcmVzZXQoZGV2KTsKIAkJLyogZHJhaW4gcnggcXVldWUgKi8KLQkJbnZfZHJhaW5fcngoZGV2KTsKLQkJbnZfZHJhaW5fdHgoZGV2KTsKKwkJbnZfZHJhaW5fcnh0eChkZXYpOwogCQkvKiByZWluaXQgZHJpdmVyIHZpZXcgb2YgdGhlIHJ4IHF1ZXVlICovCiAJCXNldF9idWZzaXplKGRldik7CiAJCWlmIChudl9pbml0X3JpbmcoZGV2KSkgewpAQCAtMjYxNyw4ICsyNjE4LDcgQEAKIAkJcGNpX3B1c2goYmFzZSk7CiAKIAkJLyogcmVzdGFydCByeCBlbmdpbmUgKi8KLQkJbnZfc3RhcnRfcngoZGV2KTsKLQkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJbnZfc3RhcnRfcnh0eChkZXYpOwogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAkJbnZfZW5hYmxlX2lycShkZXYpOwpAQCAtMzMyNSw3ICszMzI1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwa3RzLCByZXRjb2RlOwogCi0JaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CiAJCXBrdHMgPSBudl9yeF9wcm9jZXNzKGRldiwgYnVkZ2V0KTsKIAkJcmV0Y29kZSA9IG52X2FsbG9jX3J4KGRldik7CiAJfSBlbHNlIHsKQEAgLTM1NjYsNyArMzU2Niw3IEBACiAJaWYgKGludHJfdGVzdCkgewogCQloYW5kbGVyID0gbnZfbmljX2lycV90ZXN0OwogCX0gZWxzZSB7Ci0JCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMykKKwkJaWYgKG52X29wdGltaXplZChucCkpCiAJCQloYW5kbGVyID0gbnZfbmljX2lycV9vcHRpbWl6ZWQ7CiAJCWVsc2UKIAkJCWhhbmRsZXIgPSBudl9uaWNfaXJxOwpAQCAtMzcxOSwxMiArMzcxOSwxMCBAQAogCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkvKiBzdG9wIGVuZ2luZXMgKi8KLQkJCW52X3N0b3BfcngoZGV2KTsKLQkJCW52X3N0b3BfdHgoZGV2KTsKKwkJCW52X3N0b3Bfcnh0eChkZXYpOwogCQkJbnZfdHhyeF9yZXNldChkZXYpOwogCQkJLyogZHJhaW4gcnggcXVldWUgKi8KLQkJCW52X2RyYWluX3J4KGRldik7Ci0JCQludl9kcmFpbl90eChkZXYpOworCQkJbnZfZHJhaW5fcnh0eChkZXYpOwogCQkJLyogcmVpbml0IGRyaXZlciB2aWV3IG9mIHRoZSByeCBxdWV1ZSAqLwogCQkJc2V0X2J1ZnNpemUoZGV2KTsKIAkJCWlmIChudl9pbml0X3JpbmcoZGV2KSkgewpAQCAtMzc0MSw4ICszNzM5LDcgQEAKIAkJCXBjaV9wdXNoKGJhc2UpOwogCiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwotCQkJbnZfc3RhcnRfcngoZGV2KTsKLQkJCW52X3N0YXJ0X3R4KGRldik7CisJCQludl9zdGFydF9yeHR4KGRldik7CiAJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCX0KQEAgLTM3NTMsNyArMzc1MCw3IEBACiAJcGNpX3B1c2goYmFzZSk7CiAKIAlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgewotCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzMpCisJCWlmIChudl9vcHRpbWl6ZWQobnApKQogCQkJbnZfbmljX2lycV9vcHRpbWl6ZWQoMCwgZGV2KTsKIAkJZWxzZQogCQkJbnZfbmljX2lycSgwLCBkZXYpOwpAQCAtMzc5Miw3ICszNzg5LDggQEAKIAludl9nZXRfaHdfc3RhdHMoZGV2KTsKIAogCWlmICghbnAtPmluX3NodXRkb3duKQotCQltb2RfdGltZXIoJm5wLT5zdGF0c19wb2xsLCBqaWZmaWVzICsgU1RBVFNfSU5URVJWQUwpOworCQltb2RfdGltZXIoJm5wLT5zdGF0c19wb2xsLAorCQkJcm91bmRfamlmZmllcyhqaWZmaWVzICsgU1RBVFNfSU5URVJWQUwpKTsKIH0KIAogc3RhdGljIHZvaWQgbnZfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKQEAgLTM5NTAsOCArMzk0OCw3IEBACiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCS8qIHN0b3AgZW5naW5lcyAqLwotCQludl9zdG9wX3J4KGRldik7Ci0JCW52X3N0b3BfdHgoZGV2KTsKKwkJbnZfc3RvcF9yeHR4KGRldik7CiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCX0KQEAgLTQwNTcsOCArNDA1NCw3IEBACiAJfQogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQludl9zdGFydF9yeChkZXYpOwotCQludl9zdGFydF90eChkZXYpOworCQludl9zdGFydF9yeHR4KGRldik7CiAJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAl9CiAKQEAgLTQxMDEsOCArNDA5Nyw3IEBACiAJCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCS8qIHN0b3AgZW5naW5lcyAqLwotCQkJbnZfc3RvcF9yeChkZXYpOwotCQkJbnZfc3RvcF90eChkZXYpOworCQkJbnZfc3RvcF9yeHR4KGRldik7CiAJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBkb3duLlxuIiwgZGV2LT5uYW1lKTsKQEAgLTQxMjIsOCArNDExNyw3IEBACiAJCX0KIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCQludl9zdGFydF9yeChkZXYpOwotCQkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAkJCW52X2VuYWJsZV9pcnEoZGV2KTsKIAkJfQogCQlyZXQgPSAwOwpAQCAtNDE4MCw3ICs0MTc0LDcgQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBuZXcgcmluZ3MgKi8KLQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwlpZiAoIW52X29wdGltaXplZChucCkpIHsKIAkJcnh0eF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAocmluZy0+cnhfcGVuZGluZyArIHJpbmctPnR4X3BlbmRpbmcpLAogCQkJCQkgICAgJnJpbmdfYWRkcik7CkBAIC00MTkzLDcgKzQxODcsNyBAQAogCXR4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudl9za2JfbWFwKSAqIHJpbmctPnR4X3BlbmRpbmcsIEdGUF9LRVJORUwpOwogCWlmICghcnh0eF9yaW5nIHx8ICFyeF9za2J1ZmYgfHwgIXR4X3NrYnVmZikgewogCQkvKiBmYWxsIGJhY2sgdG8gb2xkIHJpbmdzICovCi0JCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQlpZiAoIW52X29wdGltaXplZChucCkpIHsKIAkJCWlmIChyeHR4X3JpbmcpCiAJCQkJcGNpX2ZyZWVfY29uc2lzdGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpICogKHJpbmctPnJ4X3BlbmRpbmcgKyByaW5nLT50eF9wZW5kaW5nKSwKIAkJCQkJCSAgICByeHR4X3JpbmcsIHJpbmdfYWRkcik7CkBAIC00MjE0LDEyICs0MjA4LDEwIEBACiAJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCS8qIHN0b3AgZW5naW5lcyAqLwotCQludl9zdG9wX3J4KGRldik7Ci0JCW52X3N0b3BfdHgoZGV2KTsKKwkJbnZfc3RvcF9yeHR4KGRldik7CiAJCW52X3R4cnhfcmVzZXQoZGV2KTsKIAkJLyogZHJhaW4gcXVldWVzICovCi0JCW52X2RyYWluX3J4KGRldik7Ci0JCW52X2RyYWluX3R4KGRldik7CisJCW52X2RyYWluX3J4dHgoZGV2KTsKIAkJLyogZGVsZXRlIHF1ZXVlcyAqLwogCQlmcmVlX3JpbmdzKGRldik7CiAJfQpAQCAtNDIyNyw3ICs0MjE5LDggQEAKIAkvKiBzZXQgbmV3IHZhbHVlcyAqLwogCW5wLT5yeF9yaW5nX3NpemUgPSByaW5nLT5yeF9wZW5kaW5nOwogCW5wLT50eF9yaW5nX3NpemUgPSByaW5nLT50eF9wZW5kaW5nOwotCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCisJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CiAJCW5wLT5yeF9yaW5nLm9yaWcgPSAoc3RydWN0IHJpbmdfZGVzYyopcnh0eF9yaW5nOwogCQlucC0+dHhfcmluZy5vcmlnID0gJm5wLT5yeF9yaW5nLm9yaWdbbnAtPnJ4X3Jpbmdfc2l6ZV07CiAJfSBlbHNlIHsKQEAgLTQyNTksOCArNDI1Miw3IEBACiAJCXBjaV9wdXNoKGJhc2UpOwogCiAJCS8qIHJlc3RhcnQgZW5naW5lcyAqLwotCQludl9zdGFydF9yeChkZXYpOwotCQludl9zdGFydF90eChkZXYpOworCQludl9zdGFydF9yeHR4KGRldik7CiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCQludl9lbmFibGVfaXJxKGRldik7CkBAIC00MzAxLDggKzQyOTMsNyBAQAogCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkvKiBzdG9wIGVuZ2luZXMgKi8KLQkJbnZfc3RvcF9yeChkZXYpOwotCQludl9zdG9wX3R4KGRldik7CisJCW52X3N0b3Bfcnh0eChkZXYpOwogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAl9CkBAIC00MzQzLDggKzQzMzQsNyBAQAogCX0KIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJbnZfc3RhcnRfcngoZGV2KTsKLQkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJbnZfc3RhcnRfcnh0eChkZXYpOwogCQludl9lbmFibGVfaXJxKGRldik7CiAJfQogCXJldHVybiAwOwpAQCAtNDU4MCw4ICs0NTcwLDcgQEAKIAlwY2lfcHVzaChiYXNlKTsKIAogCS8qIHJlc3RhcnQgcnggZW5naW5lICovCi0JbnZfc3RhcnRfcngoZGV2KTsKLQludl9zdGFydF90eChkZXYpOworCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAogCS8qIHNldHVwIHBhY2tldCBmb3IgdHggKi8KIAlwa3RfbGVuID0gRVRIX0RBVEFfTEVOOwpAQCAtNDU5OSw3ICs0NTg4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcGt0X2xlbjsgaSsrKQogCQlwa3RfZGF0YVtpXSA9ICh1OCkoaSAmIDB4ZmYpOwogCi0JaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CiAJCW5wLT50eF9yaW5nLm9yaWdbMF0uYnVmID0gY3B1X3RvX2xlMzIodGVzdF9kbWFfYWRkcik7CiAJCW5wLT50eF9yaW5nLm9yaWdbMF0uZmxhZ2xlbiA9IGNwdV90b19sZTMyKChwa3RfbGVuLTEpIHwgbnAtPnR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOwogCX0gZWxzZSB7CkBAIC00NjEzLDcgKzQ2MDIsNyBAQAogCW1zbGVlcCg1MDApOwogCiAJLyogY2hlY2sgZm9yIHJ4IG9mIHRoZSBwYWNrZXQgKi8KLQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwlpZiAoIW52X29wdGltaXplZChucCkpIHsKIAkJZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5vcmlnWzBdLmZsYWdsZW4pOwogCQlsZW4gPSBudl9kZXNjcl9nZXRsZW5ndGgoJm5wLT5yeF9yaW5nLm9yaWdbMF0sIG5wLT5kZXNjX3Zlcik7CiAKQEAgLTQ2NTksMTIgKzQ2NDgsMTAgQEAKIAlkZXZfa2ZyZWVfc2tiX2FueSh0eF9za2IpOwogIG91dDoKIAkvKiBzdG9wIGVuZ2luZXMgKi8KLQludl9zdG9wX3J4KGRldik7Ci0JbnZfc3RvcF90eChkZXYpOworCW52X3N0b3Bfcnh0eChkZXYpOwogCW52X3R4cnhfcmVzZXQoZGV2KTsKIAkvKiBkcmFpbiByeCBxdWV1ZSAqLwotCW52X2RyYWluX3J4KGRldik7Ci0JbnZfZHJhaW5fdHgoZGV2KTsKKwludl9kcmFpbl9yeHR4KGRldik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXdyaXRlbChtaXNjMV9mbGFncywgYmFzZSArIE52UmVnTWlzYzEpOwpAQCAtNDcwMiwxMiArNDY4OSwxMCBAQAogCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwogCQkJfQogCQkJLyogc3RvcCBlbmdpbmVzICovCi0JCQludl9zdG9wX3J4KGRldik7Ci0JCQludl9zdG9wX3R4KGRldik7CisJCQludl9zdG9wX3J4dHgoZGV2KTsKIAkJCW52X3R4cnhfcmVzZXQoZGV2KTsKIAkJCS8qIGRyYWluIHJ4IHF1ZXVlICovCi0JCQludl9kcmFpbl9yeChkZXYpOwotCQkJbnZfZHJhaW5fdHgoZGV2KTsKKwkJCW52X2RyYWluX3J4dHgoZGV2KTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCX0KQEAgLTQ3NDgsOCArNDczMyw3IEBACiAJCQl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOwogCQkJcGNpX3B1c2goYmFzZSk7CiAJCQkvKiByZXN0YXJ0IHJ4IGVuZ2luZSAqLwotCQkJbnZfc3RhcnRfcngoZGV2KTsKLQkJCW52X3N0YXJ0X3R4KGRldik7CisJCQludl9zdGFydF9yeHR4KGRldik7CiAJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQogCQkJbmFwaV9lbmFibGUoJm5wLT5uYXBpKTsKQEAgLTQ5NzgsOCArNDk2Miw3IEBACiAJICogdG8gaW5pdCBodyAqLwogCW5wLT5saW5rc3BlZWQgPSAwOwogCXJldCA9IG52X3VwZGF0ZV9saW5rc3BlZWQoZGV2KTsKLQludl9zdGFydF9yeChkZXYpOwotCW52X3N0YXJ0X3R4KGRldik7CisJbnZfc3RhcnRfcnh0eChkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCiAJbmFwaV9lbmFibGUoJm5wLT5uYXBpKTsKQEAgLTQ5OTYsMTMgKzQ5NzksMTQgQEAKIAogCS8qIHN0YXJ0IHN0YXRpc3RpY3MgdGltZXIgKi8KIAlpZiAobnAtPmRyaXZlcl9kYXRhICYgKERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjIpKQotCQltb2RfdGltZXIoJm5wLT5zdGF0c19wb2xsLCBqaWZmaWVzICsgU1RBVFNfSU5URVJWQUwpOworCQltb2RfdGltZXIoJm5wLT5zdGF0c19wb2xsLAorCQkJcm91bmRfamlmZmllcyhqaWZmaWVzICsgU1RBVFNfSU5URVJWQUwpKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCiAJcmV0dXJuIDA7CiBvdXRfZHJhaW46Ci0JZHJhaW5fcmluZyhkZXYpOworCW52X2RyYWluX3J4dHgoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MDI1LDggKzUwMDksNyBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKLQludl9zdG9wX3R4KGRldik7Ci0JbnZfc3RvcF9yeChkZXYpOworCW52X3N0b3Bfcnh0eChkZXYpOwogCW52X3R4cnhfcmVzZXQoZGV2KTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljIG9yIHdlIHdpbGwgbG9jayB1cCAqLwpAQCAtNTAzOSw3ICs1MDIyLDcgQEAKIAogCW52X2ZyZWVfaXJxKGRldik7CiAKLQlkcmFpbl9yaW5nKGRldik7CisJbnZfZHJhaW5fcnh0eChkZXYpOwogCiAJaWYgKG5wLT53b2xlbmFibGVkKSB7CiAJCXdyaXRlbChOVlJFR19QRkZfQUxXQVlTfE5WUkVHX1BGRl9NWUFERFIsIGJhc2UgKyBOdlJlZ1BhY2tldEZpbHRlckZsYWdzKTsKQEAgLTUxOTksNyArNTE4Miw3IEBACiAJbnAtPnJ4X3Jpbmdfc2l6ZSA9IFJYX1JJTkdfREVGQVVMVDsKIAlucC0+dHhfcmluZ19zaXplID0gVFhfUklOR19ERUZBVUxUOwogCi0JaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CiAJCW5wLT5yeF9yaW5nLm9yaWcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LAogCQkJCQlzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAobnAtPnJ4X3Jpbmdfc2l6ZSArIG5wLT50eF9yaW5nX3NpemUpLAogCQkJCQkmbnAtPnJpbmdfYWRkcik7CkBAIC01MjIxLDcgKzUyMDQsOCBAQAogCiAJZGV2LT5vcGVuID0gbnZfb3BlbjsKIAlkZXYtPnN0b3AgPSBudl9jbG9zZTsKLQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisKKwlpZiAoIW52X29wdGltaXplZChucCkpCiAJCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnZfc3RhcnRfeG1pdDsKIAllbHNlCiAJCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnZfc3RhcnRfeG1pdF9vcHRpbWl6ZWQ7CkBAIC01MjQ4LDggKzUyMzIsNyBAQAogCiAJLyogY2hlY2sgdGhlIHdvcmthcm91bmQgYml0IGZvciBjb3JyZWN0IG1hYyBhZGRyZXNzIG9yZGVyICovCiAJdHhyZWcgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpOwotCWlmICgodHhyZWcgJiBOVlJFR19UUkFOU01JVFBPTExfTUFDX0FERFJfUkVWKSB8fAotCSAgICAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DT1JSRUNUX01BQ0FERFIpKSB7CisJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ09SUkVDVF9NQUNBRERSKSB7CiAJCS8qIG1hYyBhZGRyZXNzIGlzIGFscmVhZHkgaW4gY29ycmVjdCBvcmRlciAqLwogCQlkZXYtPmRldl9hZGRyWzBdID0gKG5wLT5vcmlnX21hY1swXSA+PiAgMCkgJiAweGZmOwogCQlkZXYtPmRldl9hZGRyWzFdID0gKG5wLT5vcmlnX21hY1swXSA+PiAgOCkgJiAweGZmOwpAQCAtNTI1Nyw2ICs1MjQwLDIyIEBACiAJCWRldi0+ZGV2X2FkZHJbM10gPSAobnAtPm9yaWdfbWFjWzBdID4+IDI0KSAmIDB4ZmY7CiAJCWRldi0+ZGV2X2FkZHJbNF0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICAwKSAmIDB4ZmY7CiAJCWRldi0+ZGV2X2FkZHJbNV0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICA4KSAmIDB4ZmY7CisJfSBlbHNlIGlmICh0eHJlZyAmIE5WUkVHX1RSQU5TTUlUUE9MTF9NQUNfQUREUl9SRVYpIHsKKwkJLyogbWFjIGFkZHJlc3MgaXMgYWxyZWFkeSBpbiBjb3JyZWN0IG9yZGVyICovCisJCWRldi0+ZGV2X2FkZHJbMF0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICAwKSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbMV0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICA4KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbMl0gPSAobnAtPm9yaWdfbWFjWzBdID4+IDE2KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbM10gPSAobnAtPm9yaWdfbWFjWzBdID4+IDI0KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbNF0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICAwKSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbNV0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICA4KSAmIDB4ZmY7CisJCS8qCisJCSAqIFNldCBvcmlnIG1hYyBhZGRyZXNzIGJhY2sgdG8gdGhlIHJldmVyc2VkIHZlcnNpb24uCisJCSAqIFRoaXMgZmxhZyB3aWxsIGJlIGNsZWFyZWQgZHVyaW5nIGxvdyBwb3dlciB0cmFuc2l0aW9uLgorCQkgKiBUaGVyZWZvcmUsIHdlIHNob3VsZCBhbHdheXMgcHV0IGJhY2sgdGhlIHJldmVyc2VkIGFkZHJlc3MuCisJCSAqLworCQlucC0+b3JpZ19tYWNbMF0gPSAoZGV2LT5kZXZfYWRkcls1XSA8PCAwKSArIChkZXYtPmRldl9hZGRyWzRdIDw8IDgpICsKKwkJCShkZXYtPmRldl9hZGRyWzNdIDw8IDE2KSArIChkZXYtPmRldl9hZGRyWzJdIDw8IDI0KTsKKwkJbnAtPm9yaWdfbWFjWzFdID0gKGRldi0+ZGV2X2FkZHJbMV0gPDwgMCkgKyAoZGV2LT5kZXZfYWRkclswXSA8PCA4KTsKIAl9IGVsc2UgewogCQkvKiBuZWVkIHRvIHJldmVyc2UgbWFjIGFkZHJlc3MgdG8gY29ycmVjdCBvcmRlciAqLwogCQlkZXYtPmRldl9hZGRyWzBdID0gKG5wLT5vcmlnX21hY1sxXSA+PiAgOCkgJiAweGZmOwpAQCAtNTMzMyw2ICs1MzMyLDIxIEBACiAJCW5wLT5uZWVkX2xpbmt0aW1lciA9IDA7CiAJfQogCisJLyogTGltaXQgdGhlIG51bWJlciBvZiB0eCdzIG91dHN0YW5kaW5nIGZvciBodyBidWcgKi8KKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX05FRURfVFhfTElNSVQpIHsKKwkJbnAtPnR4X2xpbWl0ID0gMTsKKwkJaWYgKChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMiB8fAorCQkgICAgIGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzIHx8CisJCSAgICAgaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQgfHwKKwkJICAgICBpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNSB8fAorCQkgICAgIGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2IHx8CisJCSAgICAgaWQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcgfHwKKwkJICAgICBpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOCB8fAorCQkgICAgIGlkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM5KSAmJgorCQkgICAgcGNpX2Rldi0+cmV2aXNpb24gPj0gMHhBMikKKwkJCW5wLT50eF9saW1pdCA9IDA7CisJfQorCiAJLyogY2xlYXIgcGh5IHN0YXRlIGFuZCB0ZW1wb3JhcmlseSBoYWx0IHBoeSBpbnRlcnJ1cHRzICovCiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01JSU1hc2spOwogCXBoeXN0YXRlID0gcmVhZGwoYmFzZSArIE52UmVnQWRhcHRlckNvbnRyb2wpOwpAQCAtNTUxMiw3ICs1NTI2LDkgQEAKIHN0YXRpYyBpbnQgbnZfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgcmMgPSAwOworCXUzMiB0eHJlZzsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlnb3RvIG91dDsKQEAgLTU1MjMsNiArNTUzOSwxMSBAQAogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOwogCisJLyogcmVzdG9yZSBtYWMgYWRkcmVzcyByZXZlcnNlIGZsYWcgKi8KKwl0eHJlZyA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCk7CisJdHhyZWcgfD0gTlZSRUdfVFJBTlNNSVRQT0xMX01BQ19BRERSX1JFVjsKKwl3cml0ZWwodHhyZWcsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCk7CisKIAlyYyA9IG52X29wZW4oZGV2KTsKIG91dDoKIAlyZXR1cm4gcmM7CkBAIC01NTYzLDE5ICs1NTg0LDE5IEBACiAJfSwKIAl7CS8qIENLODA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIENLODA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzkpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1AwNCBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTIpLApAQCAtNTU4NywxMSArNTYwOCwxMSBAQAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiksCkBAIC01NjExLDE5ICs1NjMyLDE5IEBACiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjQpLApAQCAtNTY1OSwzNSArNTY4MCwzNSBAQAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVgsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXswLH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggNDJkOTRlZC4uNjdiNGIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC04MzUsNyArODM1LDggQEAKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCW5hcGlfZGlzYWJsZSgmZmVwLT5uYXBpKTsKKwlpZiAoZmVwLT5mcGktPnVzZV9uYXBpKQorCQluYXBpX2Rpc2FibGUoJmZlcC0+bmFwaSk7CiAJcGh5X3N0b3AoZmVwLT5waHlkZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZlcC0+bG9jaywgZmxhZ3MpOwpAQCAtOTQ2LDE2ICs5NDcsMTEgQEAKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpID0gKHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqKSZycS0+aWZyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVwLT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBwaHlfbWlpX2lvY3RsKGZlcC0+cGh5ZGV2LCBtaWksIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVwLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJjOworCXJldHVybiBwaHlfbWlpX2lvY3RsKGZlcC0+cGh5ZGV2LCBtaWksIGNtZCk7CiB9CiAKIGV4dGVybiBpbnQgZnNfbWlpX2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMTgyLDcgKzExNzgsNyBAQAogCiAJZGF0YSAgPSBvZl9nZXRfcHJvcGVydHkobnAsICJmaXhlZC1saW5rIiwgTlVMTCk7CiAJaWYgKGRhdGEpIHsKLQkJc25wcmludGYoZnBpLT5idXNfaWQsIDE2LCBQSFlfSURfRk1ULCAwLCAqZGF0YSk7CisJCXNucHJpbnRmKGZwaS0+YnVzX2lkLCAxNiwgIiV4OiUwMngiLCAwLCAqZGF0YSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTIwNiw3ICsxMjAyLDcgQEAKIAlpZiAoIWRhdGEgfHwgbGVuICE9IDQpCiAJCWdvdG8gb3V0X3B1dF9tZGlvOwogCi0Jc25wcmludGYoZnBpLT5idXNfaWQsIDE2LCBQSFlfSURfRk1ULCByZXMuc3RhcnQsICpkYXRhKTsKKwlzbnByaW50ZihmcGktPmJ1c19pZCwgMTYsICIleDolMDJ4IiwgcmVzLnN0YXJ0LCAqZGF0YSk7CiAKIG91dF9wdXRfbWRpbzoKIAlvZl9ub2RlX3B1dChtZGlvbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMKaW5kZXggYjhlNGE3My4uMTYyMDAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJICogd2UgZ2V0IGlzIGFuIGludCwgYW5kIHRoZSBvZGRzIG9mIG11bHRpcGxlIGJpdGJhbmcgbWRpbyBidXNlcwogCSAqIGlzIGxvdyBlbm91Z2ggdGhhdCBpdCdzIG5vdCB3b3J0aCBnb2luZyB0b28gY3JhenkuCiAJICovCi0JYnVzLT5pZCA9IHJlcy5zdGFydDsKKwlzbnByaW50ZihidXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHJlcy5zdGFydCk7CiAKIAlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZnNsLG1kaW8tcGluIiwgJmxlbik7CiAJaWYgKCFkYXRhIHx8IGxlbiAhPSA0KQpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJbmV3X2J1cy0+bmFtZSA9ICJCQiBNSUkgQnVzIiwKLQluZXdfYnVzLT5pZCA9IHBkZXYtPmlkOworCXNucHJpbnRmKG5ld19idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHBkZXYtPmlkKTsKIAogCW5ld19idXMtPnBoeV9tYXNrID0gfjB4OTsKIAlwZGF0YSA9IChzdHJ1Y3QgZnNfbWlpX2JiX3BsYXRmb3JtX2luZm8gKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKaW5kZXggYTg5Y2YxNS4uYmE3NWVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQluZXdfYnVzLT5pZCA9IHJlcy5zdGFydDsKKwlzbnByaW50ZihuZXdfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCByZXMuc3RhcnQpOwogCiAJZmVjLT5mZWNwID0gaW9yZW1hcChyZXMuc3RhcnQsIHJlcy5lbmQgLSByZXMuc3RhcnQgKyAxKTsKIAlpZiAoIWZlYy0+ZmVjcCkKQEAgLTMwOSw3ICszMDksNyBAQAogCW5ld19idXMtPnJlYWQgPSAmZnNfZW5ldF9mZWNfbWlpX3JlYWQsCiAJbmV3X2J1cy0+d3JpdGUgPSAmZnNfZW5ldF9mZWNfbWlpX3dyaXRlLAogCW5ld19idXMtPnJlc2V0ID0gJmZzX2VuZXRfZmVjX21paV9yZXNldCwKLQluZXdfYnVzLT5pZCA9IHBkZXYtPmlkOworCXNucHJpbnRmKG5ld19idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHBkZXYtPmlkKTsKIAogCXBkYXRhID0gKHN0cnVjdCBmc19taWlfZmVjX3BsYXRmb3JtX2luZm8gKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDA0MzFlOWUuLmM4YzNkZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTEzMCw4ICsxMzAsOCBAQAogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX3NldF9oYXNoX2Zvcl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICphZGRyKTsKIHN0YXRpYyB2b2lkIGdmYXJfY29uZmlndXJlX3NlcmRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBnZmFyX21paSAqcmVncywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWV4dGVybiBpbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKK2V4dGVybiBpbnQgZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOworZXh0ZXJuIGludCBnZmFyX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7CiAjaWZkZWYgQ09ORklHX0dGQVJfTkFQSQogc3RhdGljIGludCBnZmFyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKICNlbmRpZgpAQCAtNjA1LDcgKzYwNSw3IEBACiAKIAlmcmVlX3NrYl9yZXNvdXJjZXMocHJpdik7CiAKLQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLAorCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwKIAkJCXNpemVvZihzdHJ1Y3QgdHhiZDgpKnByaXYtPnR4X3Jpbmdfc2l6ZQogCQkJKyBzaXplb2Yoc3RydWN0IHJ4YmQ4KSpwcml2LT5yeF9yaW5nX3NpemUsCiAJCQlwcml2LT50eF9iZF9iYXNlLApAQCAtNjI2LDcgKzYyNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IHByaXYtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAKIAkJaWYgKHByaXYtPnR4X3NrYnVmZltpXSkgewotCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0eGJkcC0+YnVmUHRyLAorCQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCiAJCQkJCXR4YmRwLT5sZW5ndGgsCiAJCQkJCURNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+dHhfc2tidWZmW2ldKTsKQEAgLTY0Myw3ICs2NDMsNyBAQAogCWlmKHByaXYtPnJ4X3NrYnVmZiAhPSBOVUxMKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX3NpemU7IGkrKykgewogCQkJaWYgKHByaXYtPnJ4X3NrYnVmZltpXSkgewotCQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgcnhiZHAtPmJ1ZlB0ciwKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5kZXYtPmRldiwgcnhiZHAtPmJ1ZlB0ciwKIAkJCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLAogCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIApAQCAtNzA4LDcgKzcwOCw3IEBACiAJZ2Zhcl93cml0ZSgmcmVncy0+aW1hc2ssIElNQVNLX0lOSVRfQ0xFQVIpOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0JdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsCisJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPmRldiwKIAkJCXNpemVvZiAoc3RydWN0IHR4YmQ4KSAqIHByaXYtPnR4X3Jpbmdfc2l6ZSArCiAJCQlzaXplb2YgKHN0cnVjdCByeGJkOCkgKiBwcml2LT5yeF9yaW5nX3NpemUsCiAJCQkmYWRkciwgR0ZQX0tFUk5FTCk7CkBAIC05MTksNyArOTE5LDcgQEAKIHJ4X3NrYl9mYWlsOgogCWZyZWVfc2tiX3Jlc291cmNlcyhwcml2KTsKIHR4X3NrYl9mYWlsOgotCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsCisJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+ZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCB0eGJkOCkqcHJpdi0+dHhfcmluZ19zaXplCiAJCQkrIHNpemVvZihzdHJ1Y3QgcnhiZDgpKnByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCXByaXYtPnR4X2JkX2Jhc2UsCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogCiAJLyogU2V0IGJ1ZmZlciBsZW5ndGggYW5kIHBvaW50ZXIgKi8KIAl0eGJkcC0+bGVuZ3RoID0gc2tiLT5sZW47Ci0JdHhiZHAtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHNrYi0+ZGF0YSwKKwl0eGJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsCiAJCQlza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAKIAkvKiBTYXZlIHRoZSBza2IgcG9pbnRlciBzbyB3ZSBjYW4gZnJlZSBpdCBsYXRlciAqLwpAQCAtMTE4NSw3ICsxMTg1LDcgQEAKIAlpbnQgZnJhbWVfc2l6ZSA9IG5ld19tdHUgKyBFVEhfSExFTjsKIAogCWlmIChwcml2LT52bGFuX2VuYWJsZSkKLQkJZnJhbWVfc2l6ZSArPSBWTEFOX0VUSF9ITEVOOworCQlmcmFtZV9zaXplICs9IFZMQU5fSExFTjsKIAogCWlmIChnZmFyX3VzZXNfZmNiKHByaXYpKQogCQlmcmFtZV9zaXplICs9IEdNQUNfRkNCX0xFTjsKQEAgLTEyNTAsMTcgKzEyNTAsMTIgQEAKIH0KIAogLyogSW50ZXJydXB0IEhhbmRsZXIgZm9yIFRyYW5zbWl0IGNvbXBsZXRlICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl90cmFuc21pdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitpbnQgZ2Zhcl9jbGVhbl90eF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHR4YmQ4ICpiZHA7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGhvd21hbnkgPSAwOwogCi0JLyogQ2xlYXIgSUVWRU5UICovCi0JZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfVFhfTUFTSyk7Ci0KLQkvKiBMb2NrIHByaXYgKi8KLQlzcGluX2xvY2soJnByaXYtPnR4bG9jayk7CiAJYmRwID0gcHJpdi0+ZGlydHlfdHg7CiAJd2hpbGUgKChiZHAtPnN0YXR1cyAmIFRYQkRfUkVBRFkpID09IDApIHsKIAkJLyogSWYgZGlydHlfdHggYW5kIGN1cl90eCBhcmUgdGhlIHNhbWUsIHRoZW4gZWl0aGVyIHRoZSAqLwpAQCAtMTI2OSw3ICsxMjY0LDcgQEAKIAkJaWYgKChiZHAgPT0gcHJpdi0+Y3VyX3R4KSAmJiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpID09IDApKQogCQkJYnJlYWs7CiAKLQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWhvd21hbnkrKzsKIAogCQkvKiBEZWZlcnJlZCBtZWFucyBzb21lIGNvbGxpc2lvbnMgb2NjdXJyZWQgZHVyaW5nIHRyYW5zbWl0LCAqLwogCQkvKiBidXQgd2UgZXZlbnR1YWxseSBzZW50IHRoZSBwYWNrZXQuICovCkBAIC0xMjc4LDExICsxMjczLDE1IEBACiAKIAkJLyogRnJlZSB0aGUgc2sgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFR4QkQgKi8KIAkJZGV2X2tmcmVlX3NrYl9pcnEocHJpdi0+dHhfc2tidWZmW3ByaXYtPnNrYl9kaXJ0eXR4XSk7CisKIAkJcHJpdi0+dHhfc2tidWZmW3ByaXYtPnNrYl9kaXJ0eXR4XSA9IE5VTEw7CiAJCXByaXYtPnNrYl9kaXJ0eXR4ID0KIAkJICAgIChwcml2LT5za2JfZGlydHl0eCArCiAJCSAgICAgMSkgJiBUWF9SSU5HX01PRF9NQVNLKHByaXYtPnR4X3Jpbmdfc2l6ZSk7CiAKKwkJLyogQ2xlYW4gQkQgbGVuZ3RoIGZvciBlbXB0eSBkZXRlY3Rpb24gKi8KKwkJYmRwLT5sZW5ndGggPSAwOworCiAJCS8qIHVwZGF0ZSBiZHAgdG8gcG9pbnQgYXQgbmV4dCBiZCBpbiB0aGUgcmluZyAod3JhcHBpbmcgaWYgbmVjZXNzYXJ5KSAqLwogCQlpZiAoYmRwLT5zdGF0dXMgJiBUWEJEX1dSQVApCiAJCQliZHAgPSBwcml2LT50eF9iZF9iYXNlOwpAQCAtMTI5NywxMyArMTI5NiwzMiBAQAogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0gLyogd2hpbGUgKChiZHAtPnN0YXR1cyAmIFRYQkRfUkVBRFkpID09IDApICovCiAKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMgKz0gaG93bWFueTsKKworCXJldHVybiBob3dtYW55OworfQorCisvKiBJbnRlcnJ1cHQgSGFuZGxlciBmb3IgVHJhbnNtaXQgY29tcGxldGUgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX3RyYW5zbWl0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIENsZWFyIElFVkVOVCAqLworCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmlldmVudCwgSUVWRU5UX1RYX01BU0spOworCisJLyogTG9jayBwcml2ICovCisJc3Bpbl9sb2NrKCZwcml2LT50eGxvY2spOworCisJZ2Zhcl9jbGVhbl90eF9yaW5nKGRldik7CisKIAkvKiBJZiB3ZSBhcmUgY29hbGVzY2luZyB0aGUgaW50ZXJydXB0cywgcmVzZXQgdGhlIHRpbWVyICovCiAJLyogT3RoZXJ3aXNlLCBjbGVhciBpdCAqLwotCWlmIChwcml2LT50eGNvYWxlc2NpbmcpCisJaWYgKGxpa2VseShwcml2LT50eGNvYWxlc2NpbmcpKSB7CisJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnR4aWMsIDApOwogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT50eGljLAogCQkJICAgbWtfaWNfdmFsdWUocHJpdi0+dHhjb3VudCwgcHJpdi0+dHh0aW1lKSk7Ci0JZWxzZQotCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT50eGljLCAwKTsKKwl9CiAKIAlzcGluX3VubG9jaygmcHJpdi0+dHhsb2NrKTsKIApAQCAtMTMzMiw3ICsxMzUwLDcgQEAKIAkgKi8KIAlza2JfcmVzZXJ2ZShza2IsIGFsaWduYW1vdW50KTsKIAotCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLAorCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsCiAJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAogCWJkcC0+bGVuZ3RoID0gMDsKQEAgLTEzOTIsMTUgKzE0MTAsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2VuZGlmCiAKLQkvKiBDbGVhciBJRVZFTlQsIHNvIHJ4IGludGVycnVwdCBpc24ndCBjYWxsZWQgYWdhaW4KLQkgKiBiZWNhdXNlIG9mIHRoaXMgaW50ZXJydXB0ICovCi0JZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfUlhfTUFTSyk7Ci0KIAkvKiBzdXBwb3J0IE5BUEkgKi8KICNpZmRlZiBDT05GSUdfR0ZBUl9OQVBJCisJLyogQ2xlYXIgSUVWRU5ULCBzbyBpbnRlcnJ1cHRzIGFyZW4ndCBjYWxsZWQgYWdhaW4KKwkgKiBiZWNhdXNlIG9mIHRoZSBwYWNrZXRzIHRoYXQgaGF2ZSBhbHJlYWR5IGFycml2ZWQgKi8KKwlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5pZXZlbnQsIElFVkVOVF9SVFhfTUFTSyk7CisKIAlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYsICZwcml2LT5uYXBpKSkgewogCQl0ZW1wdmFsID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5pbWFzayk7Ci0JCXRlbXB2YWwgJj0gSU1BU0tfUlhfRElTQUJMRUQ7CisJCXRlbXB2YWwgJj0gSU1BU0tfUlRYX0RJU0FCTEVEOwogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5pbWFzaywgdGVtcHZhbCk7CiAKIAkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYsICZwcml2LT5uYXBpKTsKQEAgLTE0MTEsMTcgKzE0MjksMjAgQEAKIAkJCQlnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPmltYXNrKSk7CiAJfQogI2Vsc2UKKwkvKiBDbGVhciBJRVZFTlQsIHNvIHJ4IGludGVycnVwdCBpc24ndCBjYWxsZWQgYWdhaW4KKwkgKiBiZWNhdXNlIG9mIHRoaXMgaW50ZXJydXB0ICovCisJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+aWV2ZW50LCBJRVZFTlRfUlhfTUFTSyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7CiAJZ2Zhcl9jbGVhbl9yeF9yaW5nKGRldiwgcHJpdi0+cnhfcmluZ19zaXplKTsKIAogCS8qIElmIHdlIGFyZSBjb2FsZXNjaW5nIGludGVycnVwdHMsIHVwZGF0ZSB0aGUgdGltZXIgKi8KIAkvKiBPdGhlcndpc2UsIGNsZWFyIGl0ICovCi0JaWYgKHByaXYtPnJ4Y29hbGVzY2luZykKKwlpZiAobGlrZWx5KHByaXYtPnJ4Y29hbGVzY2luZykpIHsKKwkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+cnhpYywgMCk7CiAJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsCiAJCQkgICBta19pY192YWx1ZShwcml2LT5yeGNvdW50LCBwcml2LT5yeHRpbWUpKTsKLQllbHNlCi0JCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsIDApOworCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogI2VuZGlmCkBAIC0xNTI2LDkgKzE1NDcsNyBAQAogCQlybWIoKTsKIAkJc2tiID0gcHJpdi0+cnhfc2tidWZmW3ByaXYtPnNrYl9jdXJyeF07CiAKLQkJaWYgKCEoYmRwLT5zdGF0dXMgJgotCQkgICAgICAoUlhCRF9MQVJHRSB8IFJYQkRfU0hPUlQgfCBSWEJEX05PTk9DVEVUCi0JCSAgICAgICB8IFJYQkRfQ1JDRVJSIHwgUlhCRF9PVkVSUlVOIHwgUlhCRF9UUlVOQ0FURUQpKSkgeworCQlpZiAoKGJkcC0+c3RhdHVzICYgUlhCRF9MQVNUKSAmJiAhKGJkcC0+c3RhdHVzICYgUlhCRF9FUlIpKSB7CiAJCQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBwYWNrZXRzICovCiAJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCWhvd21hbnkrKzsKQEAgLTE1ODIsNiArMTYwMSwxMyBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGdmYXJfcHJpdmF0ZSwgbmFwaSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKIAlpbnQgaG93bWFueTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSWYgd2UgZmFpbCB0byBnZXQgdGhlIGxvY2ssIGRvbid0IGJvdGhlciB3aXRoIHRoZSBUWCBCRHMgKi8KKwlpZiAoc3Bpbl90cnlsb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpKSB7CisJCWdmYXJfY2xlYW5fdHhfcmluZyhkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKKwl9CiAKIAlob3dtYW55ID0gZ2Zhcl9jbGVhbl9yeF9yaW5nKGRldiwgYnVkZ2V0KTsKIApAQCAtMTU5NSwxMSArMTYyMSwxMSBAQAogCiAJCS8qIElmIHdlIGFyZSBjb2FsZXNjaW5nIGludGVycnVwdHMsIHVwZGF0ZSB0aGUgdGltZXIgKi8KIAkJLyogT3RoZXJ3aXNlLCBjbGVhciBpdCAqLwotCQlpZiAocHJpdi0+cnhjb2FsZXNjaW5nKQorCQlpZiAobGlrZWx5KHByaXYtPnJ4Y29hbGVzY2luZykpIHsKKwkJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJ4aWMsIDApOwogCQkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+cnhpYywKIAkJCQkgICBta19pY192YWx1ZShwcml2LT5yeGNvdW50LCBwcml2LT5yeHRpbWUpKTsKLQkJZWxzZQotCQkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+cnhpYywgMCk7CisJCX0KIAl9CiAKIAlyZXR1cm4gaG93bWFueTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCA0NmNkNzczLi4wZDA4ODM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC0xMDIsNyArMTAyLDcgQEAKICNkZWZpbmUgREVGQVVMVF9GSUZPX1RYX1NUQVJWRSAweDQwCiAjZGVmaW5lIERFRkFVTFRfRklGT19UWF9TVEFSVkVfT0ZGIDB4ODAKICNkZWZpbmUgREVGQVVMVF9CRF9TVEFTSCAxCi0jZGVmaW5lIERFRkFVTFRfU1RBU0hfTEVOR1RICTY0CisjZGVmaW5lIERFRkFVTFRfU1RBU0hfTEVOR1RICTk2CiAjZGVmaW5lIERFRkFVTFRfU1RBU0hfSU5ERVgJMAogCiAvKiBUaGUgbnVtYmVyIG9mIEV4YWN0IE1hdGNoIHJlZ2lzdGVycyAqLwpAQCAtMTI0LDExICsxMjQsMTggQEAKIAogI2RlZmluZSBERUZBVUxUX1RYX0NPQUxFU0NFIDEKICNkZWZpbmUgREVGQVVMVF9UWENPVU5UCTE2Ci0jZGVmaW5lIERFRkFVTFRfVFhUSU1FCTQKKyNkZWZpbmUgREVGQVVMVF9UWFRJTUUJMjEKIAorI2RlZmluZSBERUZBVUxUX1JYVElNRQkyMQorCisvKiBOb24gTkFQSSBDYXNlICovCisjaWZuZGVmIENPTkZJR19HRkFSX05BUEkKICNkZWZpbmUgREVGQVVMVF9SWF9DT0FMRVNDRSAxCiAjZGVmaW5lIERFRkFVTFRfUlhDT1VOVAkxNgotI2RlZmluZSBERUZBVUxUX1JYVElNRQk0CisjZWxzZQorI2RlZmluZSBERUZBVUxUX1JYX0NPQUxFU0NFIDAKKyNkZWZpbmUgREVGQVVMVF9SWENPVU5UCTAKKyNlbmRpZiAvKiBDT05GSUdfR0ZBUl9OQVBJICovCiAKICNkZWZpbmUgVEJJUEFfVkFMVUUJCTB4MWYKICNkZWZpbmUgTUlJTUNGR19JTklUX1ZBTFVFCTB4MDAwMDAwMDcKQEAgLTI0Miw2ICsyNDksNyBAQAogI2RlZmluZSBJRVZFTlRfUEVSUgkJMHgwMDAwMDAwMQogI2RlZmluZSBJRVZFTlRfUlhfTUFTSyAgICAgICAgICAoSUVWRU5UX1JYQjAgfCBJRVZFTlRfUlhGMCkKICNkZWZpbmUgSUVWRU5UX1RYX01BU0sgICAgICAgICAgKElFVkVOVF9UWEIgfCBJRVZFTlRfVFhGKQorI2RlZmluZSBJRVZFTlRfUlRYX01BU0sgICAgICAgICAoSUVWRU5UX1JYX01BU0sgfCBJRVZFTlRfVFhfTUFTSykKICNkZWZpbmUgSUVWRU5UX0VSUl9NQVNLICAgICAgICAgXAogKElFVkVOVF9SWEMgfCBJRVZFTlRfQlNZIHwgSUVWRU5UX0VCRVJSIHwgSUVWRU5UX01TUk8gfCBcCiAgSUVWRU5UX0JBQlQgfCBJRVZFTlRfVFhDIHwgSUVWRU5UX1RYRSB8IElFVkVOVF9MQyBcCkBAIC0yNjksMTEgKzI3NywxMiBAQAogI2RlZmluZSBJTUFTS19GSVEJCTB4MDAwMDAwMDQKICNkZWZpbmUgSU1BU0tfRFBFCQkweDAwMDAwMDAyCiAjZGVmaW5lIElNQVNLX1BFUlIJCTB4MDAwMDAwMDEKLSNkZWZpbmUgSU1BU0tfUlhfRElTQUJMRUQgfihJTUFTS19SWEZFTjAgfCBJTUFTS19CU1kpCiAjZGVmaW5lIElNQVNLX0RFRkFVTFQgIChJTUFTS19UWEVFTiB8IElNQVNLX1RYRkVOIHwgSU1BU0tfVFhCRU4gfCBcCiAJCUlNQVNLX1JYRkVOMCB8IElNQVNLX0JTWSB8IElNQVNLX0VCRVJSIHwgSU1BU0tfQkFCUiB8IFwKIAkJSU1BU0tfWEZVTiB8IElNQVNLX1JYQyB8IElNQVNLX0JBQlQgfCBJTUFTS19EUEUgXAogCQl8IElNQVNLX1BFUlIpCisjZGVmaW5lIElNQVNLX1JUWF9ESVNBQkxFRCAoKH4oSU1BU0tfUlhGRU4wIHwgSU1BU0tfVFhGRU4gfCBJTUFTS19CU1kpKSBcCisJCQkgICAmIElNQVNLX0RFRkFVTFQpCiAKIC8qIEZpZm8gbWFuYWdlbWVudCAqLwogI2RlZmluZSBGSUZPX1RYX1RIUl9NQVNLCTB4MDFmZgpAQCAtMzQwLDYgKzM0OSw5IEBACiAjZGVmaW5lIFJYQkRfT1ZFUlJVTgkJMHgwMDAyCiAjZGVmaW5lIFJYQkRfVFJVTkNBVEVECQkweDAwMDEKICNkZWZpbmUgUlhCRF9TVEFUUwkJMHgwMWZmCisjZGVmaW5lIFJYQkRfRVJSCQkoUlhCRF9MQVJHRSB8IFJYQkRfU0hPUlQgfCBSWEJEX05PTk9DVEVUIAlcCisJCQkJfCBSWEJEX0NSQ0VSUiB8IFJYQkRfT1ZFUlJVTgkJCVwKKwkJCQl8IFJYQkRfVFJVTkNBVEVEKQogCiAvKiBSeCBGQ0Igc3RhdHVzIGZpZWxkIGJpdHMgKi8KICNkZWZpbmUgUlhGQ0JfVkxOCQkweDgwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCmluZGV4IDZhNjQ3ZDkuLmI4ODk4OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwpAQCAtNTEsNyArNTEsNyBAQAogICogdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBzeXN0ZW0gbWRpbyBidXMsIHVzZWQgZm9yCiAgKiBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGV4YW1wbGUuCiAgKi8KLWludCBnZmFyX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGdmYXJfbWlpICpyZWdzLCBpbnQgbWlpX2lkLAoraW50IGdmYXJfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKIAkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKQogewogCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gd3JpdGUgKi8KQEAgLTc3LDcgKzc3LDcgQEAKICAqIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8gdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUKICAqIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGVnLgogICovCi1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoraW50IGdmYXJfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQogCiB7CiAJdTE2IHZhbHVlOwpAQCAtMTczLDcgKzE3Myw3IEBACiAJbmV3X2J1cy0+cmVhZCA9ICZnZmFyX21kaW9fcmVhZCwKIAluZXdfYnVzLT53cml0ZSA9ICZnZmFyX21kaW9fd3JpdGUsCiAJbmV3X2J1cy0+cmVzZXQgPSAmZ2Zhcl9tZGlvX3Jlc2V0LAotCW5ld19idXMtPmlkID0gcGRldi0+aWQ7CisJc25wcmludGYobmV3X2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcGRldi0+aWQpOwogCiAJcGRhdGEgPSAoc3RydWN0IGdpYW5mYXJfbWRpb19kYXRhICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDBhOWI3NTEuLjFkYTU1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNkZWZpbmUgU0lYUEFDS19WRVJTSU9OICAgICJSZXZpc2lvbjogMC4zLjAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCA1ZGRmOGIwLi41ZjRiNGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAlzdHJ1Y3QgYnBxZGV2ICpicHE7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlnb3RvIGRyb3A7CiAKIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQpAQCAtNTUzLDcgKzU1Myw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmICghZGV2X2lzX2V0aGRldihkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKaW5kZXggY2ZjZDE1YS4uMzBjOWIzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtMjg5LDcgKzI4OSw2IEBACiAJCQkqYXgtPnJidWZmICY9IH4weDIwOwogCQl9CiAgCX0KLQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogCiAJY291bnQgPSBheC0+cmNvdW50OwogCkBAIC0yOTcsMTcgKzI5NiwxNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIm1raXNzOiAlczogbWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCiAJCSAgICAgICBheC0+ZGV2LT5uYW1lKTsKIAkJYXgtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fbG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogCW1lbWNweShza2JfcHV0KHNrYixjb3VudCksIGF4LT5yYnVmZiwgY291bnQpOwotCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CiAJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIGF4LT5kZXYpOwogCW5ldGlmX3J4KHNrYik7CiAJYXgtPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJYXgtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlheC0+c3RhdHMucnhfYnl0ZXMgKz0gY291bnQ7CisJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIH0KIAogc3RhdGljIHZvaWQga2lzc191bmVzYyhzdHJ1Y3QgbWtpc3MgKmF4LCB1bnNpZ25lZCBjaGFyIHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggZTZjNjlmNy4uMzc4YTIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMTQzLDYgKzE0MywxMCBAQAogI2RlZmluZSBTVE9QX1RJTUVPVVRfMTAwMAkxMwogI2RlZmluZSBTVE9QX1RJTUVPVVRfMTAwMF9KVU1CTwk3MwogCitzdGF0aWMgdW5zaWduZWQgY2hhciBkZWZhdWx0X21jYXN0X2FkZHJbXSA9IHsKKwkweDAxLCAweDgwLCAweEMyLCAweDAwLCAweDAwLCAweDAxCit9OworCiAvKiBQbGVhc2UsIGtlZXAgaW4gc3luYyB3aXRoIHN0cnVjdCBpYm1fZW1hY19zdGF0cy9pYm1fZW1hY19lcnJvcl9zdGF0cyAqLwogc3RhdGljIGNvbnN0IGNoYXIgZW1hY19zdGF0c19rZXlzW0VNQUNfRVRIVE9PTF9TVEFUU19DT1VOVF1bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAkicnhfcGFja2V0cyIsICJyeF9ieXRlcyIsICJ0eF9wYWNrZXRzIiwgInR4X2J5dGVzIiwgInJ4X3BhY2tldHNfY3N1bSIsCkBAIC02MTgsNiArNjIyLDkgQEAKIAlpZiAoZW1hY19waHlfZ3BjcyhkZXYtPnBoeS5tb2RlKSkKIAkJZW1hY19taWlfcmVzZXRfcGh5KCZkZXYtPnBoeSk7CiAKKwkvKiBSZXF1aXJlZCBmb3IgUGF1c2UgcGFja2V0IHN1cHBvcnQgaW4gRU1BQyAqLworCWRldl9tY19hZGQobmRldiwgZGVmYXVsdF9tY2FzdF9hZGRyLCBzaXplb2YoZGVmYXVsdF9tY2FzdF9hZGRyKSwgMSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIzNSw4ICsxMjQyLDggQEAKIHN0YXRpYyBpbmxpbmUgdTE2IGVtYWNfdHhfY3N1bShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKGVtYWNfaGFzX2ZlYXR1cmUoZGV2LCBFTUFDX0ZUUl9IQVNfVEFIICYmCi0JCQkgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7CisJaWYgKGVtYWNfaGFzX2ZlYXR1cmUoZGV2LCBFTUFDX0ZUUl9IQVNfVEFIKSAmJgorCQkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKIAkJKytkZXYtPnN0YXRzLnR4X3BhY2tldHNfY3N1bTsKIAkJcmV0dXJuIEVNQUNfVFhfQ1RSTF9UQUhfQ1NVTTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9yZ21paS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcmdtaWkuYwppbmRleCA5YmMxMTMyLi41NzU3Nzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9yZ21paS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL3JnbWlpLmMKQEAgLTMwMiw3ICszMDIsNiBAQAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcmdtaWlfbWF0Y2hbXSA9CiB7CiAJewotCQkudHlwZQkJPSAicmdtaWktaW50ZXJmYWNlIiwKIAkJLmNvbXBhdGlibGUJPSAiaWJtLHJnbWlpIiwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL3RhaC5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKaW5kZXggOTY0MTdhZC4uYjAyM2QxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKQEAgLTE1NSw2ICsxNTUsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRhaF9tYXRjaFtdID0KIHsKIAl7CisJCS5jb21wYXRpYmxlCT0gImlibSx0YWgiLAorCX0sCisJLyogRm9yIGJhY2t3YXJkIGNvbXBhdCB3aXRoIG9sZCBEVCAqLworCXsKIAkJLnR5cGUJCT0gInRhaCIsCiAJfSwKIAl7fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCA1Nzc3MmJlLi5jZTRmYzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3Zpby5oPgpAQCAtMTI1OSwyNiArMTI1OCw3IEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoSUJNVkVUSF9QUk9DX0RJUiwgaW5pdF9uZXQucHJvY19uZXQpOwogfQogCi1zdGF0aWMgdm9pZCAqaWJtdmV0aF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCWlmICgqcG9zID09IDApIHsKLQkJcmV0dXJuICh2b2lkICopMTsKLQl9IGVsc2UgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkICppYm12ZXRoX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQkrKypwb3M7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGlibXZldGhfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci19Ci0KLXN0YXRpYyBpbnQgaWJtdmV0aF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3N0YXRpYyBpbnQgaWJtdmV0aF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZXEtPnByaXZhdGU7CiAJY2hhciAqY3VycmVudF9tYWMgPSAoKGNoYXIqKSAmYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkcik7CkBAIC0xMzAyLDI3ICsxMjgyLDEwIEBACiAKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaWJtdmV0aF9zZXFfb3BzID0gewotCS5zdGFydCA9IGlibXZldGhfc2VxX3N0YXJ0LAotCS5uZXh0ICA9IGlibXZldGhfc2VxX25leHQsCi0JLnN0b3AgID0gaWJtdmV0aF9zZXFfc3RvcCwKLQkuc2hvdyAgPSBpYm12ZXRoX3NlcV9zaG93LAotfTsKIAogc3RhdGljIGludCBpYm12ZXRoX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7Ci0JaW50IHJjOwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmaWJtdmV0aF9zZXFfb3BzKTsKLQlpZiAoIXJjKSB7Ci0JCS8qIHJlY292ZXIgdGhlIHBvaW50ZXIgYnVyaWVkIGluIHByb2NfZGlyX2VudHJ5IGRhdGEgKi8KLQkJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlwcm9jID0gUERFKGlub2RlKTsKLQkJc2VxLT5wcml2YXRlID0gcHJvYy0+ZGF0YTsKLQl9Ci0JcmV0dXJuIHJjOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpYm12ZXRoX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpYm12ZXRoX3Byb2NfZm9wcyA9IHsKQEAgLTEzMzAsNyArMTI5Myw3IEBACiAJLm9wZW4gICAgPSBpYm12ZXRoX3Byb2Nfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyB2b2lkIGlibXZldGhfcHJvY19yZWdpc3Rlcl9hZGFwdGVyKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZmIuYyBiL2RyaXZlcnMvbmV0L2lmYi5jCmluZGV4IDE1OTQ5ZDMuLmFmMjMzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lmYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lmYi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAKICNkZWZpbmUgVFhfVElNRU9VVCAgKDIqSFopCiAKQEAgLTIyNyw2ICsyMjgsMTYgQEAKIG1vZHVsZV9wYXJhbShudW1pZmJzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhudW1pZmJzLCAiTnVtYmVyIG9mIGlmYiBkZXZpY2VzIik7CiAKKy8qCisgKiBkZXZfaWZiLT5xdWV1ZV9sb2NrIGlzIHVzdWFsbHkgdGFrZW4gYWZ0ZXIgZGV2LT5pbmdyZXNzX2xvY2ssCisgKiByZXZlcnNlbHkgdG8gZS5nLiBxZGlzY19sb2NrX3RyZWUoKS4gSXQgc2hvdWxkIGJlIHNhZmUgdW50aWwKKyAqIGlmYiBkb2Vzbid0IHRha2UgZGV2LT5xdWV1ZV9sb2NrIHdpdGggZGV2X2lmYi0+aW5ncmVzc19sb2NrLgorICogQnV0IGxvY2tkZXAgc2hvdWxkIGtub3cgdGhhdCBpZmIgaGFzIGRpZmZlcmVudCBsb2NrcyBmcm9tIGRldi4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpZmJfcXVldWVfbG9ja19rZXk7CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlmYl9pbmdyZXNzX2xvY2tfa2V5OworCisKIHN0YXRpYyBpbnQgX19pbml0IGlmYl9pbml0X29uZShpbnQgaW5kZXgpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9pZmI7CkBAIC0yNDYsNiArMjU3LDEwIEBACiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldl9pZmIpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjsKKworCWxvY2tkZXBfc2V0X2NsYXNzKCZkZXZfaWZiLT5xdWV1ZV9sb2NrLCAmaWZiX3F1ZXVlX2xvY2tfa2V5KTsKKwlsb2NrZGVwX3NldF9jbGFzcygmZGV2X2lmYi0+aW5ncmVzc19sb2NrLCAmaWZiX2luZ3Jlc3NfbG9ja19rZXkpOworCiAJcmV0dXJuIDA7CiAKIGVycjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKaW5kZXggNjYwNGQ5Ni4uNzZlYTg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTYxLDI4ICs2MSwyOCBAQAogLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gQWR2YW5jZWQgKi8KIHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjIHsKIAlzdHJ1Y3QgewotCQl1NjQgcGt0X2FkZHI7ICAgICAgICAgICAgIC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqLwotCQl1NjQgaGRyX2FkZHI7ICAgICAgICAgICAgIC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqLworCQlfX2xlNjQgcGt0X2FkZHI7ICAgICAgICAgICAgIC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqLworCQlfX2xlNjQgaGRyX2FkZHI7ICAgICAgICAgICAgIC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqLwogCX0gcmVhZDsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgewogCQkJc3RydWN0IHsKLQkJCQl1MTYgcGt0X2luZm87ICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovCi0JCQkJdTE2IGhkcl9pbmZvOyAgIC8qIFNwbGl0IEhlYWRlciwKLQkJCQkJCSAqIGhlYWRlciBidWZmZXIgbGVuZ3RoICovCisJCQkJX19sZTE2IHBrdF9pbmZvOyAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqLworCQkJCV9fbGUxNiBoZHJfaW5mbzsgICAvKiBTcGxpdCBIZWFkZXIsCisJCQkJCQkgICAgKiBoZWFkZXIgYnVmZmVyIGxlbmd0aCAqLwogCQkJfSBsb19kd29yZDsKIAkJCXVuaW9uIHsKLQkJCQl1MzIgcnNzOyAgICAgICAgICAvKiBSU1MgSGFzaCAqLworCQkJCV9fbGUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovCiAJCQkJc3RydWN0IHsKLQkJCQkJdTE2IGlwX2lkOyAgICAvKiBJUCBpZCAqLwotCQkJCQl1MTYgY3N1bTsgICAgIC8qIFBhY2tldCBDaGVja3N1bSAqLworCQkJCQlfX2xlMTYgaXBfaWQ7ICAgIC8qIElQIGlkICovCisJCQkJCV9fbGUxNiBjc3VtOyAgICAgLyogUGFja2V0IENoZWNrc3VtICovCiAJCQkJfSBjc3VtX2lwOwogCQkJfSBoaV9kd29yZDsKIAkJfSBsb3dlcjsKIAkJc3RydWN0IHsKLQkJCXUzMiBzdGF0dXNfZXJyb3I7ICAgICAvKiBleHQgc3RhdHVzL2Vycm9yICovCi0JCQl1MTYgbGVuZ3RoOyAgICAgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLwotCQkJdTE2IHZsYW47ICAgICAgICAgICAgIC8qIFZMQU4gdGFnICovCisJCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLworCQkJX19sZTE2IGxlbmd0aDsgICAgICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KKwkJCV9fbGUxNiB2bGFuOyAgICAgICAgICAgICAvKiBWTEFOIHRhZyAqLwogCQl9IHVwcGVyOwogCX0gd2I7ICAvKiB3cml0ZWJhY2sgKi8KIH07CkBAIC05NywxNCArOTcsMTQgQEAKIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwogdW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgewogCXN0cnVjdCB7Ci0JCXU2NCBidWZmZXJfYWRkcjsgICAgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJ3MgZGF0YSBidWYgKi8KLQkJdTMyIGNtZF90eXBlX2xlbjsKLQkJdTMyIG9saW5mb19zdGF0dXM7CisJCV9fbGU2NCBidWZmZXJfYWRkcjsgICAgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJ3MgZGF0YSBidWYgKi8KKwkJX19sZTMyIGNtZF90eXBlX2xlbjsKKwkJX19sZTMyIG9saW5mb19zdGF0dXM7CiAJfSByZWFkOwogCXN0cnVjdCB7Ci0JCXU2NCByc3ZkOyAgICAgICAvKiBSZXNlcnZlZCAqLwotCQl1MzIgbnh0c2VxX3NlZWQ7Ci0JCXUzMiBzdGF0dXM7CisJCV9fbGU2NCByc3ZkOyAgICAgICAvKiBSZXNlcnZlZCAqLworCQlfX2xlMzIgbnh0c2VxX3NlZWQ7CisJCV9fbGUzMiBzdGF0dXM7CiAJfSB3YjsKIH07CiAKQEAgLTExOSwxMCArMTE5LDEwIEBACiAKIC8qIENvbnRleHQgZGVzY3JpcHRvcnMgKi8KIHN0cnVjdCBlMTAwMF9hZHZfdHhfY29udGV4dF9kZXNjIHsKLQl1MzIgdmxhbl9tYWNpcF9sZW5zOwotCXUzMiBzZXFudW1fc2VlZDsKLQl1MzIgdHlwZV90dWNtZF9tbGhsOwotCXUzMiBtc3NfbDRsZW5faWR4OworCV9fbGUzMiB2bGFuX21hY2lwX2xlbnM7CisJX19sZTMyIHNlcW51bV9zZWVkOworCV9fbGUzMiB0eXBlX3R1Y21kX21saGw7CisJX19sZTMyIG1zc19sNGxlbl9pZHg7CiB9OwogCiAjZGVmaW5lIEUxMDAwX0FEVlRYRF9NQUNMRU5fU0hJRlQgICAgOSAgLyogQWR2IGN0eHQgZGVzYyBtYWMgbGVuIHNoaWZ0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCmluZGV4IDE2MWZiNjguLjdiMmM3MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCkBAIC0xNDMsMzUgKzE0MywzNSBAQAogCiAvKiBSZWNlaXZlIERlc2NyaXB0b3IgKi8KIHN0cnVjdCBlMTAwMF9yeF9kZXNjIHsKLQl1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqLwotCXUxNiBsZW5ndGg7ICAgICAgLyogTGVuZ3RoIG9mIGRhdGEgRE1BZWQgaW50byBkYXRhIGJ1ZmZlciAqLwotCXUxNiBjc3VtOyAgICAgICAgLyogUGFja2V0IGNoZWNrc3VtICovCisJX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KKwlfX2xlMTYgbGVuZ3RoOyAgICAgIC8qIExlbmd0aCBvZiBkYXRhIERNQWVkIGludG8gZGF0YSBidWZmZXIgKi8KKwlfX2xlMTYgY3N1bTsgICAgICAgIC8qIFBhY2tldCBjaGVja3N1bSAqLwogCXU4ICBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KIAl1OCAgZXJyb3JzOyAgICAgIC8qIERlc2NyaXB0b3IgRXJyb3JzICovCi0JdTE2IHNwZWNpYWw7CisJX19sZTE2IHNwZWNpYWw7CiB9OwogCiAvKiBSZWNlaXZlIERlc2NyaXB0b3IgLSBFeHRlbmRlZCAqLwogdW5pb24gZTEwMDBfcnhfZGVzY19leHRlbmRlZCB7CiAJc3RydWN0IHsKLQkJdTY0IGJ1ZmZlcl9hZGRyOwotCQl1NjQgcmVzZXJ2ZWQ7CisJCV9fbGU2NCBidWZmZXJfYWRkcjsKKwkJX19sZTY0IHJlc2VydmVkOwogCX0gcmVhZDsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgewotCQkJdTMyIG1ycTsgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFJ4IFF1ZXVlcyAqLworCQkJX19sZTMyIG1ycTsgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFJ4IFF1ZXVlcyAqLwogCQkJdW5pb24gewotCQkJCXUzMiByc3M7ICAgICAgICAgICAgLyogUlNTIEhhc2ggKi8KKwkJCQlfX2xlMzIgcnNzOyAgICAgICAgICAgIC8qIFJTUyBIYXNoICovCiAJCQkJc3RydWN0IHsKLQkJCQkJdTE2IGlwX2lkOyAgLyogSVAgaWQgKi8KLQkJCQkJdTE2IGNzdW07ICAgLyogUGFja2V0IENoZWNrc3VtICovCisJCQkJCV9fbGUxNiBpcF9pZDsgIC8qIElQIGlkICovCisJCQkJCV9fbGUxNiBjc3VtOyAgIC8qIFBhY2tldCBDaGVja3N1bSAqLwogCQkJCX0gY3N1bV9pcDsKIAkJCX0gaGlfZHdvcmQ7CiAJCX0gbG93ZXI7CiAJCXN0cnVjdCB7Ci0JCQl1MzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLwotCQkJdTE2IGxlbmd0aDsKLQkJCXUxNiB2bGFuOyAgICAgICAgICAgICAvKiBWTEFOIHRhZyAqLworCQkJX19sZTMyIHN0YXR1c19lcnJvcjsgICAgIC8qIGV4dCBzdGF0dXMvZXJyb3IgKi8KKwkJCV9fbGUxNiBsZW5ndGg7CisJCQlfX2xlMTYgdmxhbjsgICAgICAgICAgICAgLyogVkxBTiB0YWcgKi8KIAkJfSB1cHBlcjsKIAl9IHdiOyAgLyogd3JpdGViYWNrICovCiB9OwpAQCAtMTgxLDQ5ICsxODEsNDkgQEAKIHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0IHsKIAlzdHJ1Y3QgewogCQkvKiBvbmUgYnVmZmVyIGZvciBwcm90b2NvbCBoZWFkZXIocyksIHRocmVlIGRhdGEgYnVmZmVycyAqLwotCQl1NjQgYnVmZmVyX2FkZHJbTUFYX1BTX0JVRkZFUlNdOworCQlfX2xlNjQgYnVmZmVyX2FkZHJbTUFYX1BTX0JVRkZFUlNdOwogCX0gcmVhZDsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgewotCQkJdTMyIG1ycTsgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFJ4IFF1ZXVlcyAqLworCQkJX19sZTMyIG1ycTsgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFJ4IFF1ZXVlcyAqLwogCQkJdW5pb24gewotCQkJCXUzMiByc3M7ICAgICAgICAgICAgICAvKiBSU1MgSGFzaCAqLworCQkJCV9fbGUzMiByc3M7ICAgICAgICAgICAgICAvKiBSU1MgSGFzaCAqLwogCQkJCXN0cnVjdCB7Ci0JCQkJCXUxNiBpcF9pZDsgICAgLyogSVAgaWQgKi8KLQkJCQkJdTE2IGNzdW07ICAgICAvKiBQYWNrZXQgQ2hlY2tzdW0gKi8KKwkJCQkJX19sZTE2IGlwX2lkOyAgICAvKiBJUCBpZCAqLworCQkJCQlfX2xlMTYgY3N1bTsgICAgIC8qIFBhY2tldCBDaGVja3N1bSAqLwogCQkJCX0gY3N1bV9pcDsKIAkJCX0gaGlfZHdvcmQ7CiAJCX0gbG93ZXI7CiAJCXN0cnVjdCB7Ci0JCQl1MzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLwotCQkJdTE2IGxlbmd0aDA7ICAgICAgICAgIC8qIGxlbmd0aCBvZiBidWZmZXIgMCAqLwotCQkJdTE2IHZsYW47ICAgICAgICAgICAgIC8qIFZMQU4gdGFnICovCisJCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLworCQkJX19sZTE2IGxlbmd0aDA7ICAgICAgICAgIC8qIGxlbmd0aCBvZiBidWZmZXIgMCAqLworCQkJX19sZTE2IHZsYW47ICAgICAgICAgICAgIC8qIFZMQU4gdGFnICovCiAJCX0gbWlkZGxlOwogCQlzdHJ1Y3QgewotCQkJdTE2IGhlYWRlcl9zdGF0dXM7Ci0JCQl1MTYgbGVuZ3RoWzNdOyAgICAgICAgLyogbGVuZ3RoIG9mIGJ1ZmZlcnMgMS0zICovCisJCQlfX2xlMTYgaGVhZGVyX3N0YXR1czsKKwkJCV9fbGUxNiBsZW5ndGhbM107ICAgICAgICAvKiBsZW5ndGggb2YgYnVmZmVycyAxLTMgKi8KIAkJfSB1cHBlcjsKLQkJdTY0IHJlc2VydmVkOworCQlfX2xlNjQgcmVzZXJ2ZWQ7CiAJfSB3YjsgLyogd3JpdGViYWNrICovCiB9OwogCiAvKiBUcmFuc21pdCBEZXNjcmlwdG9yICovCiBzdHJ1Y3QgZTEwMDBfdHhfZGVzYyB7Ci0JdTY0IGJ1ZmZlcl9hZGRyOyAgICAgIC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqLworCV9fbGU2NCBidWZmZXJfYWRkcjsgICAgICAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KIAl1bmlvbiB7Ci0JCXUzMiBkYXRhOworCQlfX2xlMzIgZGF0YTsKIAkJc3RydWN0IHsKLQkJCXUxNiBsZW5ndGg7ICAgIC8qIERhdGEgYnVmZmVyIGxlbmd0aCAqLworCQkJX19sZTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCiAJCQl1OCBjc287ICAgICAgICAvKiBDaGVja3N1bSBvZmZzZXQgKi8KIAkJCXU4IGNtZDsgICAgICAgIC8qIERlc2NyaXB0b3IgY29udHJvbCAqLwogCQl9IGZsYWdzOwogCX0gbG93ZXI7CiAJdW5pb24gewotCQl1MzIgZGF0YTsKKwkJX19sZTMyIGRhdGE7CiAJCXN0cnVjdCB7CiAJCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwogCQkJdTggY3NzOyAgICAgICAgLyogQ2hlY2tzdW0gc3RhcnQgKi8KLQkJCXUxNiBzcGVjaWFsOworCQkJX19sZTE2IHNwZWNpYWw7CiAJCX0gZmllbGRzOwogCX0gdXBwZXI7CiB9OwpAQCAtMjMxLDQ5ICsyMzEsNDkgQEAKIC8qIE9mZmxvYWQgQ29udGV4dCBEZXNjcmlwdG9yICovCiBzdHJ1Y3QgZTEwMDBfY29udGV4dF9kZXNjIHsKIAl1bmlvbiB7Ci0JCXUzMiBpcF9jb25maWc7CisJCV9fbGUzMiBpcF9jb25maWc7CiAJCXN0cnVjdCB7CiAJCQl1OCBpcGNzczsgICAgICAvKiBJUCBjaGVja3N1bSBzdGFydCAqLwogCQkJdTggaXBjc287ICAgICAgLyogSVAgY2hlY2tzdW0gb2Zmc2V0ICovCi0JCQl1MTYgaXBjc2U7ICAgICAvKiBJUCBjaGVja3N1bSBlbmQgKi8KKwkJCV9fbGUxNiBpcGNzZTsgICAgIC8qIElQIGNoZWNrc3VtIGVuZCAqLwogCQl9IGlwX2ZpZWxkczsKIAl9IGxvd2VyX3NldHVwOwogCXVuaW9uIHsKLQkJdTMyIHRjcF9jb25maWc7CisJCV9fbGUzMiB0Y3BfY29uZmlnOwogCQlzdHJ1Y3QgewogCQkJdTggdHVjc3M7ICAgICAgLyogVENQIGNoZWNrc3VtIHN0YXJ0ICovCiAJCQl1OCB0dWNzbzsgICAgICAvKiBUQ1AgY2hlY2tzdW0gb2Zmc2V0ICovCi0JCQl1MTYgdHVjc2U7ICAgICAvKiBUQ1AgY2hlY2tzdW0gZW5kICovCisJCQlfX2xlMTYgdHVjc2U7ICAgICAvKiBUQ1AgY2hlY2tzdW0gZW5kICovCiAJCX0gdGNwX2ZpZWxkczsKIAl9IHVwcGVyX3NldHVwOwotCXUzMiBjbWRfYW5kX2xlbmd0aDsKKwlfX2xlMzIgY21kX2FuZF9sZW5ndGg7CiAJdW5pb24gewotCQl1MzIgZGF0YTsKKwkJX19sZTMyIGRhdGE7CiAJCXN0cnVjdCB7CiAJCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwogCQkJdTggaGRyX2xlbjsgICAgLyogSGVhZGVyIGxlbmd0aCAqLwotCQkJdTE2IG1zczsgICAgICAgLyogTWF4aW11bSBzZWdtZW50IHNpemUgKi8KKwkJCV9fbGUxNiBtc3M7ICAgICAgIC8qIE1heGltdW0gc2VnbWVudCBzaXplICovCiAJCX0gZmllbGRzOwogCX0gdGNwX3NlZ19zZXR1cDsKIH07CiAKIC8qIE9mZmxvYWQgZGF0YSBkZXNjcmlwdG9yICovCiBzdHJ1Y3QgZTEwMDBfZGF0YV9kZXNjIHsKLQl1NjQgYnVmZmVyX2FkZHI7ICAgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGJ1ZmZlciBhZGRyZXNzICovCisJX19sZTY0IGJ1ZmZlcl9hZGRyOyAgIC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBidWZmZXIgYWRkcmVzcyAqLwogCXVuaW9uIHsKLQkJdTMyIGRhdGE7CisJCV9fbGUzMiBkYXRhOwogCQlzdHJ1Y3QgewotCQkJdTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCisJCQlfX2xlMTYgbGVuZ3RoOyAgICAvKiBEYXRhIGJ1ZmZlciBsZW5ndGggKi8KIAkJCXU4IHR5cF9sZW5fZXh0OwogCQkJdTggY21kOwogCQl9IGZsYWdzOwogCX0gbG93ZXI7CiAJdW5pb24gewotCQl1MzIgZGF0YTsKKwkJX19sZTMyIGRhdGE7CiAJCXN0cnVjdCB7CiAJCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwogCQkJdTggcG9wdHM7ICAgICAgLyogUGFja2V0IE9wdGlvbnMgKi8KLQkJCXUxNiBzcGVjaWFsOworCQkJX19sZTE2IHNwZWNpYWw7CiAJCX0gZmllbGRzOwogCX0gdXBwZXI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBmNjk3MjFlLi4wNDQ3ZjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtNDMsNyArNDMsNyBAQAogCWludCBzdGF0X29mZnNldDsKIH07CiAKLSNkZWZpbmUgSUdCX1NUQVQobSkgc2l6ZW9mKCgoc3RydWN0IGlnYl9hZGFwdGVyICopMCktPm0pLCBcCisjZGVmaW5lIElHQl9TVEFUKG0pIEZJRUxEX1NJWkVPRihzdHJ1Y3QgaWdiX2FkYXB0ZXIsIG0pLCBcCiAJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBpZ2JfYWRhcHRlciwgbSkKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWdiX3N0YXRzIGlnYl9nc3RyaW5nc19zdGF0c1tdID0gewogCXsgInJ4X3BhY2tldHMiLCBJR0JfU1RBVChzdGF0cy5ncHJjKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBkNGViOGUyLi5hYWVlMDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KQEAgLTQzOSw3ICs0MzgsNyBAQAogCQllcnIgPSBpZ2JfcmVxdWVzdF9tc2l4KGFkYXB0ZXIpOwogCQlpZiAoIWVycikgewogCQkJLyogZW5hYmxlIElBTSwgYXV0by1tYXNrLAotCQkJICogRE8gTk9UIFVTRSBFSUFNRSBvciBJQU1FIGluIGxlZ2FjeSBtb2RlICovCisJCQkgKiBETyBOT1QgVVNFIEVJQU0gb3IgSUFNIGluIGxlZ2FjeSBtb2RlICovCiAJCQl3cjMyKEUxMDAwX0lBTSwgSU1TX0VOQUJMRV9NQVNLKTsKIAkJCWdvdG8gcmVxdWVzdF9kb25lOwogCQl9CkBAIC00NjUsMTQgKzQ2NCw5IEBACiAJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmaWdiX2ludHIsIElSUUZfU0hBUkVELAogCQkJICBuZXRkZXYtPm5hbWUsIG5ldGRldik7CiAKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiRXJyb3IgJWQgZ2V0dGluZyBpbnRlcnJ1cHRcbiIsCiAJCQllcnIpOwotCQlnb3RvIHJlcXVlc3RfZG9uZTsKLQl9Ci0KLQkvKiBlbmFibGUgSUFNLCBhdXRvLW1hc2sgKi8KLQl3cjMyKEUxMDAwX0lBTSwgSU1TX0VOQUJMRV9NQVNLKTsKIAogcmVxdWVzdF9kb25lOgogCXJldHVybiBlcnI7CkBAIC02MDYsOSArNjAwLDYgQEAKIAkJdTMyIG1hbmMyaCA9IHJkMzIoRTEwMDBfTUFOQzJIKTsKIAkJdTMyIG1hbmMgPSByZDMyKEUxMDAwX01BTkMpOwogCi0JCS8qIGRpc2FibGUgaGFyZHdhcmUgaW50ZXJjZXB0aW9uIG9mIEFSUCAqLwotCQltYW5jICY9IH4oRTEwMDBfTUFOQ19BUlBfRU4pOwotCiAJCS8qIGVuYWJsZSByZWNlaXZpbmcgbWFuYWdlbWVudCBwYWNrZXRzIHRvIHRoZSBob3N0ICovCiAJCS8qIHRoaXMgd2lsbCBwcm9iYWJseSBnZW5lcmF0ZSBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBtZXNzYWdlcwogCQkgKiBmcm9tIHRoZSBob3N0IE9TLCBidXQgdGhlIHBhY2tldHMgd2lsbCBiZSBoYW5kbGVkIG9uIFNNQlVTICovCkBAIC02MjMsMjUgKzYxNCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpZ2JfcmVsZWFzZV9tYW5hZ2VhYmlsaXR5KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCi0JaWYgKGFkYXB0ZXItPmVuX21uZ19wdCkgewotCQl1MzIgbWFuYyA9IHJkMzIoRTEwMDBfTUFOQyk7Ci0KLQkJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVyY2VwdGlvbiBvZiBBUlAgKi8KLQkJbWFuYyB8PSBFMTAwMF9NQU5DX0FSUF9FTjsKLQkJbWFuYyAmPSB+RTEwMDBfTUFOQ19FTl9NTkcySE9TVDsKLQotCQkvKiBkb24ndCBleHBsaWNpdGx5IGhhdmUgdG8gbWVzcyB3aXRoIE1BTkMySCBzaW5jZQotCQkgKiBNQU5DIGhhcyBhbiBlbmFibGUgZGlzYWJsZSB0aGF0IGdhdGVzIE1BTkMySCAqLwotCi0JCS8qIFhYWCBzdG9wIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyA/ICovCi0JCXdyMzIoRTEwMDBfTUFOQywgbWFuYyk7Ci0JfQotfQotCiAvKioKICAqIGlnYl9jb25maWd1cmUgLSBjb25maWd1cmUgdGhlIGhhcmR3YXJlIGZvciBSWCBhbmQgVFgKICAqIEBhZGFwdGVyOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZQpAQCAtODQzLDggKzgxNSw4IEBACiAJd3IzMihFMTAwMF9WRVQsIEVUSEVSTkVUX0lFRUVfVkxBTl9UWVBFKTsKIAogCWlnYl9yZXNldF9hZGFwdGl2ZSgmYWRhcHRlci0+aHcpOwotCWFkYXB0ZXItPmh3LnBoeS5vcHMuZ2V0X3BoeV9pbmZvKCZhZGFwdGVyLT5odyk7Ci0JaWdiX3JlbGVhc2VfbWFuYWdlYWJpbGl0eShhZGFwdGVyKTsKKwlpZiAoYWRhcHRlci0+aHcucGh5Lm9wcy5nZXRfcGh5X2luZm8pCisJCWFkYXB0ZXItPmh3LnBoeS5vcHMuZ2V0X3BoeV9pbmZvKCZhZGFwdGVyLT5odyk7CiB9CiAKIC8qKgpAQCAtMTE3OCw5ICsxMTUwLDYgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQotCWlnYl9yZWxlYXNlX21hbmFnZWFiaWxpdHkoYWRhcHRlcik7Ci0KIAkvKiBSZWxlYXNlIGNvbnRyb2wgb2YgaC93IHRvIGYvdy4gIElmIGYvdyBpcyBBTVQgZW5hYmxlZCwgdGhpcwogCSAqIHdvdWxkIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBpbiBjbG9zZSBhbmQgaXMgcmVkdW5kYW50LiAqLwogCWlnYl9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CkBAIC0yMDgzLDcgKzIwNTIsOCBAQAogc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpZ2JfYWRhcHRlciAqKSBkYXRhOwotCWFkYXB0ZXItPmh3LnBoeS5vcHMuZ2V0X3BoeV9pbmZvKCZhZGFwdGVyLT5odyk7CisJaWYgKGFkYXB0ZXItPmh3LnBoeS5vcHMuZ2V0X3BoeV9pbmZvKQorCQlhZGFwdGVyLT5ody5waHkub3BzLmdldF9waHlfaW5mbygmYWRhcHRlci0+aHcpOwogfQogCiAvKioKQEAgLTI1MTMsMTAgKzI0ODMsMjQgQEAKIAkJdHVfY21kIHw9IChFMTAwMF9UWERfQ01EX0RFWFQgfCBFMTAwMF9BRFZUWERfRFRZUF9DVFhUKTsKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgogCQkJCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfSVBWNDsKLQkJCWlmIChza2ItPnNrICYmIChza2ItPnNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkpCi0JCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfTDRUX1RDUDsKKwkJCQlicmVhazsKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJCQkvKiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KKwkJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKKwkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAodW5saWtlbHkobmV0X3JhdGVsaW1pdCgpKSkKKwkJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJICAgICJwYXJ0aWFsIGNoZWNrc3VtIGJ1dCBwcm90bz0leCFcbiIsCisJCQkJCSAgICBza2ItPnByb3RvY29sKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJCWNvbnRleHRfZGVzYy0+dHlwZV90dWNtZF9tbGhsID0gY3B1X3RvX2xlMzIodHVfY21kKTsKQEAgLTMyNzAsNiArMzI1NCwxMyBAQAogCiAJcmV0dXJuIDE7CiB9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGdldF9oZWFkKHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKK3sKKwl2b2lkICplbmQgPSAoc3RydWN0IGUxMDAwX3R4X2Rlc2MgKil0eF9yaW5nLT5kZXNjICsgdHhfcmluZy0+Y291bnQ7CisJcmV0dXJuIGxlMzJfdG9fY3B1KCoodm9sYXRpbGUgX19sZTMyICopZW5kKTsKK30KKwogLyoqCiAgKiBpZ2JfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTMyOTEsOSArMzI4Miw3IEBACiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CiAKIAlybWIoKTsKLQloZWFkID0gKih2b2xhdGlsZSB1MzIgKikoKHN0cnVjdCBlMTAwMF90eF9kZXNjICopdHhfcmluZy0+ZGVzYwotCQkJCSArIHR4X3JpbmctPmNvdW50KTsKLQloZWFkID0gbGUzMl90b19jcHUoaGVhZCk7CisJaGVhZCA9IGdldF9oZWFkKHR4X3JpbmcpOwogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCXdoaWxlICgxKSB7CiAJCXdoaWxlIChpICE9IGhlYWQpIHsKQEAgLTMzMjgsOSArMzMxNyw3IEBACiAJCX0KIAkJb2xkaGVhZCA9IGhlYWQ7CiAJCXJtYigpOwotCQloZWFkID0gKih2b2xhdGlsZSB1MzIgKikoKHN0cnVjdCBlMTAwMF90eF9kZXNjICopdHhfcmluZy0+ZGVzYwotCQkJCQkgKyB0eF9yaW5nLT5jb3VudCk7Ci0JCWhlYWQgPSBsZTMyX3RvX2NwdShoZWFkKTsKKwkJaGVhZCA9IGdldF9oZWFkKHR4X3JpbmcpOwogCQlpZiAoaGVhZCA9PSBvbGRoZWFkKQogCQkJZ290byBkb25lX2NsZWFuaW5nOwogCX0gIC8qIHdoaWxlICgxKSAqLwpAQCAtMzQwNCw3ICszMzkxLDcgQEAKICAqIEB2bGFuOiBkZXNjcmlwdG9yIHZsYW4gZmllbGQgYXMgd3JpdHRlbiBieSBoYXJkd2FyZSAobm8gbGUvYmUgY29udmVyc2lvbikKICAqIEBza2I6IHBvaW50ZXIgdG8gc2tfYnVmZiB0byBiZSBpbmRpY2F0ZWQgdG8gc3RhY2sKICAqKi8KLXN0YXRpYyB2b2lkIGlnYl9yZWNlaXZlX3NrYihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHN0YXR1cywgdTE2IHZsYW4sCitzdGF0aWMgdm9pZCBpZ2JfcmVjZWl2ZV9za2Ioc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1OCBzdGF0dXMsIF9fbGUxNiB2bGFuLAogCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpCkBAIC0zNDY4LDggKzM0NTUsOCBAQAogCQkgKiB0aGF0IGNhc2UsIGl0IGZpbGxzIHRoZSBoZWFkZXIgYnVmZmVyIGFuZCBzcGlsbHMgdGhlIHJlc3QKIAkJICogaW50byB0aGUgcGFnZS4KIAkJICovCi0JCWhsZW4gPSBsZTE2X3RvX2NwdSgocnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaGRyX2luZm8gJgotCQkgIEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fTUFTSykgPj4gRTEwMDBfUlhEQURWX0hEUkJVRkxFTl9TSElGVCk7CisJCWhsZW4gPSAobGUxNl90b19jcHUocnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaGRyX2luZm8pICYKKwkJICBFMTAwMF9SWERBRFZfSERSQlVGTEVOX01BU0spID4+IEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQ7CiAJCWlmIChobGVuID4gYWRhcHRlci0+cnhfcHNfaGRyX3NpemUpCiAJCQlobGVuID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7CiAKQEAgLTM5NTUsOCArMzk0Miw2IEBACiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9CiAKLQlpZ2JfcmVsZWFzZV9tYW5hZ2VhYmlsaXR5KGFkYXB0ZXIpOwotCiAJLyogbWFrZSBzdXJlIGFkYXB0ZXIgaXNuJ3QgYXNsZWVwIGlmIG1hbmFnZWFiaWxpdHkgaXMgZW5hYmxlZCAqLwogCWlmIChhZGFwdGVyLT5lbl9tbmdfcHQpIHsKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwppbmRleCAzNzNmNzJjLi4xZjI1MjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKQEAgLTEyMjEsNyArMTIyMSw4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBpb2MzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQgaW9jM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXVuc2lnbmVkIGludCBzd19waHlzaWQxLCBzd19waHlzaWQyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBnLmMgYi9kcml2ZXJzL25ldC9pcGcuYwppbmRleCA1ZTVkOWI1Li45YjM1OGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcGcuYworKysgYi9kcml2ZXJzL25ldC9pcGcuYwpAQCAtNDcyLDcgKzQ3Miw2IEBACiAJdW5zaWduZWQgaW50IHR4Zmxvd2NvbnRyb2w7CiAJdW5zaWduZWQgaW50IHJ4Zmxvd2NvbnRyb2w7CiAJdW5zaWduZWQgaW50IGZ1bGxkdXBsZXg7Ci0JdW5zaWduZWQgaW50IGdpZzsKIAl1MzIgbWFjX2N0cmxfdmFsOwogCXUzMiBhc2ljY3RybDsKIAl1OCBwaHljdHJsOwpAQCAtNDg5LDcgKzQ4OCw2IEBACiAJZnVsbGR1cGxleCA9IDA7CiAJdHhmbG93Y29udHJvbCA9IDA7CiAJcnhmbG93Y29udHJvbCA9IDA7Ci0JZ2lnID0gMDsKIAogCS8qIFRvIGFjY29tb2RhdGUgYSBwcm9ibGVtIGluIDEwTWJwcyBvcGVyYXRpb24sCiAJICogc2V0IGEgZ2xvYmFsIGZsYWcgaWYgUEhZIHJ1bm5pbmcgaW4gMTBNYnBzIG1vZGUuCkBAIC01MTEsNyArNTA5LDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBJUEdfUENfTElOS19TUEVFRF8xMDAwTUJQUzoKIAkJcHJpbnRrKCIxMDAwTWJwcy5cbiIpOwotCQlnaWcgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoInVuZGVmaW5lZCFcbiIpOwpAQCAtMTkwMCw4ICsxODk3LDEzIEBACiAKIAkvKiBTcGVjaWZ5IHRoZSBURkMgZmllbGQgd2l0aGluIHRoZSBURkQuICovCiAJdHhmZC0+dGZjIHw9IGNwdV90b19sZTY0KElQR19URkNfV09SREFMSUdORElTQUJMRUQgfAotCQkoSVBHX1RGQ19GUkFNRUlEICYgY3B1X3RvX2xlNjQoc3AtPnR4X2N1cnJlbnQpKSB8CisJCShJUEdfVEZDX0ZSQU1FSUQgJiBzcC0+dHhfY3VycmVudCkgfAogCQkoSVBHX1RGQ19GUkFHQ09VTlQgJiAoMSA8PCAyNCkpKTsKKwkvKgorCSAqIDE2LS0xNyAoV29yZEFsaWduKSA8LSAzIChkaXNhYmxlKSwKKwkgKiAwLS0xNSAoRnJhbWVJZCkgPC0gc3AtPnR4X2N1cnJlbnQsCisJICogMjQtLTI3IChGcmFnQ291bnQpIDwtIDEKKwkgKi8KIAogCS8qIFJlcXVlc3QgVHhDb21wbGV0ZSBpbnRlcnJ1cHRzIGF0IGFuIGludGVydmFsIGRlZmluZWQKIAkgKiBieSB0aGUgY29uc3RhbnQgSVBHX0ZSQU1FU0JFVFdFRU5UWENPTVBMRVRFUy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKaW5kZXggOGMwOTM0NC4uOGRiNzFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcmRhLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogCiAjaWZkZWYgQ09ORklHX01BQ0hfTUFJTlNUT05FCiAjaW5jbHVkZSA8YXNtL2FyY2gvbWFpbnN0b25lLmg+CkBAIC04MzEsNiArODMyLDExIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfbWVtXzU7CiAKKwlpZiAoc2ktPnBkYXRhLT5zdGFydHVwKQorCQllcnIgPSBzaS0+cGRhdGEtPnN0YXJ0dXAoc2ktPmRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfc3RhcnR1cDsKKwogCWRldi0+aGFyZF9zdGFydF94bWl0CT0gcHhhX2lyZGFfaGFyZF94bWl0OwogCWRldi0+b3BlbgkJPSBweGFfaXJkYV9zdGFydDsKIAlkZXYtPnN0b3AJCT0gcHhhX2lyZGFfc3RvcDsKQEAgLTg1Niw2ICs4NjIsOSBAQAogCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGV2KTsKIAogCWlmIChlcnIpIHsKKwkJaWYgKHNpLT5wZGF0YS0+c2h1dGRvd24pCisJCQlzaS0+cGRhdGEtPnNodXRkb3duKHNpLT5kZXYpOworZXJyX3N0YXJ0dXA6CiAJCWtmcmVlKHNpLT50eF9idWZmLmhlYWQpOwogZXJyX21lbV81OgogCQlrZnJlZShzaS0+cnhfYnVmZi5oZWFkKTsKQEAgLTg4MSw2ICs4OTAsOCBAQAogCWlmIChkZXYpIHsKIAkJc3RydWN0IHB4YV9pcmRhICpzaSA9IG5ldGRldl9wcml2KGRldik7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWlmIChzaS0+cGRhdGEtPnNodXRkb3duKQorCQkJc2ktPnBkYXRhLT5zaHV0ZG93bihzaS0+ZGV2KTsKIAkJa2ZyZWUoc2ktPnR4X2J1ZmYuaGVhZCk7CiAJCWtmcmVlKHNpLT5yeF9idWZmLmhlYWQpOwogCQljbGtfcHV0KHNpLT5maXJfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jIGIvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKaW5kZXggNThkM2JiNi4uYjhkMDYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKQEAgLTMwOCw3ICszMDgsOCBAQAogCiBzdGF0aWMgaW50IHZldGhfYWxsb2NhdGVfZXZlbnRzKEh2THBJbmRleCBybHAsIGludCBudW1iZXIpCiB7Ci0Jc3RydWN0IHZldGhfYWxsb2NhdGlvbiB2YyA9IHsgQ09NUExFVElPTl9JTklUSUFMSVpFUih2Yy5jKSwgMCB9OworCXN0cnVjdCB2ZXRoX2FsbG9jYXRpb24gdmMgPQorCQl7IENPTVBMRVRJT05fSU5JVElBTElaRVJfT05TVEFDSyh2Yy5jKSwgMCB9OwogCiAJbWZfYWxsb2NhdGVfbHBfZXZlbnRzKHJscCwgSHZMcEV2ZW50X1R5cGVfVmlydHVhbExhbiwKIAkJCSAgICBzaXplb2Yoc3RydWN0IHZldGhfbHBldmVudCksIG51bWJlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKaW5kZXggM2QyZTcyMS4uMTZmOWM3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCkBAIC0xMTcsOCArMTE3LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWRtYV9hZGRyX3QgZG1hOwogCXVuc2lnbmVkIGxvbmcgdGltZV9zdGFtcDsKLQl1aW50MTZfdCBsZW5ndGg7Ci0JdWludDE2X3QgbmV4dF90b193YXRjaDsKKwl1MTYgbGVuZ3RoOworCXUxNiBuZXh0X3RvX3dhdGNoOwogfTsKIAogc3RydWN0IGl4Z2JfZGVzY19yaW5nIHsKQEAgLTE1MiwxMyArMTUyLDEyIEBACiBzdHJ1Y3QgaXhnYl9hZGFwdGVyIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7Ci0JdWludDMyX3QgYmRfbnVtYmVyOwotCXVpbnQzMl90IHJ4X2J1ZmZlcl9sZW47Ci0JdWludDMyX3QgcGFydF9udW07Ci0JdWludDE2X3QgbGlua19zcGVlZDsKLQl1aW50MTZfdCBsaW5rX2R1cGxleDsKKwl1MzIgYmRfbnVtYmVyOworCXUzMiByeF9idWZmZXJfbGVuOworCXUzMiBwYXJ0X251bTsKKwl1MTYgbGlua19zcGVlZDsKKwl1MTYgbGlua19kdXBsZXg7CiAJc3BpbmxvY2tfdCB0eF9sb2NrOwotCWF0b21pY190IGlycV9zZW07CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKIAogCXN0cnVjdCB0aW1lcl9saXN0IGJsaW5rX3RpbWVyOwpAQCAtMTY4LDIwICsxNjcsMjAgQEAKIAlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgdHhfcmluZyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCXVuc2lnbmVkIGludCByZXN0YXJ0X3F1ZXVlOwogCXVuc2lnbmVkIGxvbmcgdGltZW9fc3RhcnQ7Ci0JdWludDMyX3QgdHhfY21kX3R5cGU7Ci0JdWludDY0X3QgaHdfY3N1bV90eF9nb29kOwotCXVpbnQ2NF90IGh3X2NzdW1fdHhfZXJyb3I7Ci0JdWludDMyX3QgdHhfaW50X2RlbGF5OwotCXVpbnQzMl90IHR4X3RpbWVvdXRfY291bnQ7Ci0JYm9vbGVhbl90IHR4X2ludF9kZWxheV9lbmFibGU7Ci0JYm9vbGVhbl90IGRldGVjdF90eF9odW5nOworCXUzMiB0eF9jbWRfdHlwZTsKKwl1NjQgaHdfY3N1bV90eF9nb29kOworCXU2NCBod19jc3VtX3R4X2Vycm9yOworCXUzMiB0eF9pbnRfZGVsYXk7CisJdTMyIHR4X3RpbWVvdXRfY291bnQ7CisJYm9vbCB0eF9pbnRfZGVsYXlfZW5hYmxlOworCWJvb2wgZGV0ZWN0X3R4X2h1bmc7CiAKIAkvKiBSWCAqLwogCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyByeF9yaW5nOwotCXVpbnQ2NF90IGh3X2NzdW1fcnhfZXJyb3I7Ci0JdWludDY0X3QgaHdfY3N1bV9yeF9nb29kOwotCXVpbnQzMl90IHJ4X2ludF9kZWxheTsKLQlib29sZWFuX3QgcnhfY3N1bTsKKwl1NjQgaHdfY3N1bV9yeF9lcnJvcjsKKwl1NjQgaHdfY3N1bV9yeF9nb29kOworCXUzMiByeF9pbnRfZGVsYXk7CisJYm9vbCByeF9jc3VtOwogCiAJLyogT1MgZGVmaW5lZCBzdHJ1Y3RzICovCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CkBAIC0xOTMsOCArMTkyLDE3IEBACiAJc3RydWN0IGl4Z2JfaHcgaHc7CiAJdTE2IG1zZ19lbmFibGU7CiAJc3RydWN0IGl4Z2JfaHdfc3RhdHMgc3RhdHM7Ci0JdWludDMyX3QgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7Ci0JYm9vbGVhbl90IGhhdmVfbXNpOworCXUzMiBhbGxvY19yeF9idWZmX2ZhaWxlZDsKKwlib29sIGhhdmVfbXNpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OworCitlbnVtIGl4Z2Jfc3RhdGVfdCB7CisJLyogVEJECisJX19JWEdCX1RFU1RJTkcsCisJX19JWEdCX1JFU0VUVElORywKKwkqLworCV9fSVhHQl9ET1dOCiB9OwogCiAvKiBFeHBvcnRlZCBmcm9tIG90aGVyIG1vZHVsZXMgKi8KQEAgLTIwMyw0ICsyMTEsMTQgQEAKIGV4dGVybiBjaGFyIGl4Z2JfZHJpdmVyX25hbWVbXTsKIGV4dGVybiBjb25zdCBjaGFyIGl4Z2JfZHJpdmVyX3ZlcnNpb25bXTsKIAorZXh0ZXJuIGludCBpeGdiX3VwKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgaXhnYl9kb3duKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wga2lsbF93YXRjaGRvZyk7CitleHRlcm4gdm9pZCBpeGdiX3Jlc2V0KHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBpeGdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiBpbnQgaXhnYl9zZXR1cF90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiX2ZyZWVfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgaXhnYl9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JfdXBkYXRlX3N0YXRzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOworCisKICNlbmRpZiAvKiBfSVhHQl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYwppbmRleCBlOGViMGZkLi4yZjdlZDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYwpAQCAtMjksMTQgKzI5LDE0IEBACiAjaW5jbHVkZSAiaXhnYl9ody5oIgogI2luY2x1ZGUgIml4Z2JfZWUuaCIKIC8qIExvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB1aW50MTZfdCBpeGdiX3NoaWZ0X2luX2JpdHMoc3RydWN0IGl4Z2JfaHcgKmh3KTsKK3N0YXRpYyB1MTYgaXhnYl9zaGlmdF9pbl9iaXRzKHN0cnVjdCBpeGdiX2h3ICpodyk7CiAKIHN0YXRpYyB2b2lkIGl4Z2Jfc2hpZnRfb3V0X2JpdHMoc3RydWN0IGl4Z2JfaHcgKmh3LAotCQkJCXVpbnQxNl90IGRhdGEsCi0JCQkJdWludDE2X3QgY291bnQpOworCQkJCXUxNiBkYXRhLAorCQkJCXUxNiBjb3VudCk7CiBzdGF0aWMgdm9pZCBpeGdiX3N0YW5kYnlfZWVwcm9tKHN0cnVjdCBpeGdiX2h3ICpodyk7CiAKLXN0YXRpYyBib29sZWFuX3QgaXhnYl93YWl0X2VlcHJvbV9jb21tYW5kKHN0cnVjdCBpeGdiX2h3ICpodyk7CitzdGF0aWMgYm9vbCBpeGdiX3dhaXRfZWVwcm9tX2NvbW1hbmQoc3RydWN0IGl4Z2JfaHcgKmh3KTsKIAogc3RhdGljIHZvaWQgaXhnYl9jbGVhbnVwX2VlcHJvbShzdHJ1Y3QgaXhnYl9odyAqaHcpOwogCkBAIC00OCw3ICs0OCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogaXhnYl9yYWlzZV9jbG9jayhzdHJ1Y3QgaXhnYl9odyAqaHcsCi0JCSAgdWludDMyX3QgKmVlY2RfcmVnKQorCQkgIHUzMiAqZWVjZF9yZWcpCiB7CiAJLyogUmFpc2UgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBFRVBST00gKGJ5IHNldHRpbmcgdGhlIFNLIGJpdCksIGFuZCB0aGVuCiAJICogIHdhaXQgNTAgbWljcm9zZWNvbmRzLgpAQCAtNjcsNyArNjcsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKIGl4Z2JfbG93ZXJfY2xvY2soc3RydWN0IGl4Z2JfaHcgKmh3LAotCQkgIHVpbnQzMl90ICplZWNkX3JlZykKKwkJICB1MzIgKmVlY2RfcmVnKQogewogCS8qIExvd2VyIHRoZSBjbG9jayBpbnB1dCB0byB0aGUgRUVQUk9NIChieSBjbGVhcmluZyB0aGUgU0sgYml0KSwgYW5kIHRoZW4KIAkgKiB3YWl0IDUwIG1pY3Jvc2Vjb25kcy4KQEAgLTg3LDExICs4NywxMSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKIGl4Z2Jfc2hpZnRfb3V0X2JpdHMoc3RydWN0IGl4Z2JfaHcgKmh3LAotCQkJCQkgdWludDE2X3QgZGF0YSwKLQkJCQkJIHVpbnQxNl90IGNvdW50KQorCQkJCQkgdTE2IGRhdGEsCisJCQkJCSB1MTYgY291bnQpCiB7Ci0JdWludDMyX3QgZWVjZF9yZWc7Ci0JdWludDMyX3QgbWFzazsKKwl1MzIgZWVjZF9yZWc7CisJdTMyIG1hc2s7CiAKIAkvKiBXZSBuZWVkIHRvIHNoaWZ0ICJjb3VudCIgYml0cyBvdXQgdG8gdGhlIEVFUFJPTS4gU28sIHZhbHVlIGluIHRoZQogCSAqICJkYXRhIiBwYXJhbWV0ZXIgd2lsbCBiZSBzaGlmdGVkIG91dCB0byB0aGUgRUVQUk9NIG9uZSBiaXQgYXQgYSB0aW1lLgpAQCAtMTMzLDEyICsxMzMsMTIgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHVpbnQxNl90CitzdGF0aWMgdTE2CiBpeGdiX3NoaWZ0X2luX2JpdHMoc3RydWN0IGl4Z2JfaHcgKmh3KQogewotCXVpbnQzMl90IGVlY2RfcmVnOwotCXVpbnQzMl90IGk7Ci0JdWludDE2X3QgZGF0YTsKKwl1MzIgZWVjZF9yZWc7CisJdTMyIGk7CisJdTE2IGRhdGE7CiAKIAkvKiBJbiBvcmRlciB0byByZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgRUVQUk9NLCB3ZSBuZWVkIHRvIHNoaWZ0IDE2IGJpdHMKIAkgKiBpbiBmcm9tIHRoZSBFRVBST00uIEJpdHMgYXJlICJzaGlmdGVkIGluIiBieSByYWlzaW5nIHRoZSBjbG9jayBpbnB1dCB0bwpAQCAtMTc5LDcgKzE3OSw3IEBACiBzdGF0aWMgdm9pZAogaXhnYl9zZXR1cF9lZXByb20oc3RydWN0IGl4Z2JfaHcgKmh3KQogewotCXVpbnQzMl90IGVlY2RfcmVnOworCXUzMiBlZWNkX3JlZzsKIAogCWVlY2RfcmVnID0gSVhHQl9SRUFEX1JFRyhodywgRUVDRCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQAogc3RhdGljIHZvaWQKIGl4Z2Jfc3RhbmRieV9lZXByb20oc3RydWN0IGl4Z2JfaHcgKmh3KQogewotCXVpbnQzMl90IGVlY2RfcmVnOworCXUzMiBlZWNkX3JlZzsKIAogCWVlY2RfcmVnID0gSVhHQl9SRUFEX1JFRyhodywgRUVDRCk7CiAKQEAgLTIzNSw3ICsyMzUsNyBAQAogc3RhdGljIHZvaWQKIGl4Z2JfY2xvY2tfZWVwcm9tKHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQl1aW50MzJfdCBlZWNkX3JlZzsKKwl1MzIgZWVjZF9yZWc7CiAKIAllZWNkX3JlZyA9IElYR0JfUkVBRF9SRUcoaHcsIEVFQ0QpOwogCkBAIC0yNTksNyArMjU5LDcgQEAKIHN0YXRpYyB2b2lkCiBpeGdiX2NsZWFudXBfZWVwcm9tKHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQl1aW50MzJfdCBlZWNkX3JlZzsKKwl1MzIgZWVjZF9yZWc7CiAKIAllZWNkX3JlZyA9IElYR0JfUkVBRF9SRUcoaHcsIEVFQ0QpOwogCkBAIC0yNzksMTQgKzI3OSwxNCBAQAogICogVGhlIGNvbW1hbmQgaXMgZG9uZSB3aGVuIHRoZSBFRVBST00ncyBkYXRhIG91dCBwaW4gZ29lcyBoaWdoLgogICoKICAqIFJldHVybnM6Ci0gKiAgICAgIFRSVUU6IEVFUFJPTSBkYXRhIHBpbiBpcyBoaWdoIGJlZm9yZSB0aW1lb3V0LgotICogICAgICBGQUxTRTogIFRpbWUgZXhwaXJlZC4KKyAqICAgICAgdHJ1ZTogRUVQUk9NIGRhdGEgcGluIGlzIGhpZ2ggYmVmb3JlIHRpbWVvdXQuCisgKiAgICAgIGZhbHNlOiAgVGltZSBleHBpcmVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGJvb2xlYW5fdAorc3RhdGljIGJvb2wKIGl4Z2Jfd2FpdF9lZXByb21fY29tbWFuZChzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3QgZWVjZF9yZWc7Ci0JdWludDMyX3QgaTsKKwl1MzIgZWVjZF9yZWc7CisJdTMyIGk7CiAKIAkvKiBUb2dnbGUgdGhlIENTIGxpbmUuICBUaGlzIGluIGVmZmVjdCB0ZWxscyB0byBFRVBST00gdG8gYWN0dWFsbHkgZXhlY3V0ZQogCSAqIHRoZSBjb21tYW5kIGluIHF1ZXN0aW9uLgpAQCAtMzAxLDEyICszMDEsMTIgQEAKIAkJZWVjZF9yZWcgPSBJWEdCX1JFQURfUkVHKGh3LCBFRUNEKTsKIAogCQlpZihlZWNkX3JlZyAmIElYR0JfRUVDRF9ETykKLQkJCXJldHVybiAoVFJVRSk7CisJCQlyZXR1cm4gKHRydWUpOwogCiAJCXVkZWxheSg1MCk7CiAJfQogCUFTU0VSVCgwKTsKLQlyZXR1cm4gKEZBTFNFKTsKKwlyZXR1cm4gKGZhbHNlKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzE5LDIyICszMTksMjIgQEAKICAqIHZhbGlkLgogICoKICAqIFJldHVybnM6Ci0gKiAgVFJVRTogQ2hlY2tzdW0gaXMgdmFsaWQKLSAqICBGQUxTRTogQ2hlY2tzdW0gaXMgbm90IHZhbGlkLgorICogIHRydWU6IENoZWNrc3VtIGlzIHZhbGlkCisgKiAgZmFsc2U6IENoZWNrc3VtIGlzIG5vdCB2YWxpZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWJvb2xlYW5fdAorYm9vbAogaXhnYl92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGl4Z2JfaHcgKmh3KQogewotCXVpbnQxNl90IGNoZWNrc3VtID0gMDsKLQl1aW50MTZfdCBpOworCXUxNiBjaGVja3N1bSA9IDA7CisJdTE2IGk7CiAKIAlmb3IoaSA9IDA7IGkgPCAoRUVQUk9NX0NIRUNLU1VNX1JFRyArIDEpOyBpKyspCiAJCWNoZWNrc3VtICs9IGl4Z2JfcmVhZF9lZXByb20oaHcsIGkpOwogCi0JaWYoY2hlY2tzdW0gPT0gKHVpbnQxNl90KSBFRVBST01fU1VNKQotCQlyZXR1cm4gKFRSVUUpOworCWlmKGNoZWNrc3VtID09ICh1MTYpIEVFUFJPTV9TVU0pCisJCXJldHVybiAodHJ1ZSk7CiAJZWxzZQotCQlyZXR1cm4gKEZBTFNFKTsKKwkJcmV0dXJuIChmYWxzZSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM0OCwxMyArMzQ4LDEzIEBACiB2b2lkCiBpeGdiX3VwZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGl4Z2JfaHcgKmh3KQogewotCXVpbnQxNl90IGNoZWNrc3VtID0gMDsKLQl1aW50MTZfdCBpOworCXUxNiBjaGVja3N1bSA9IDA7CisJdTE2IGk7CiAKIAlmb3IoaSA9IDA7IGkgPCBFRVBST01fQ0hFQ0tTVU1fUkVHOyBpKyspCiAJCWNoZWNrc3VtICs9IGl4Z2JfcmVhZF9lZXByb20oaHcsIGkpOwogCi0JY2hlY2tzdW0gPSAodWludDE2X3QpIEVFUFJPTV9TVU0gLSBjaGVja3N1bTsKKwljaGVja3N1bSA9ICh1MTYpIEVFUFJPTV9TVU0gLSBjaGVja3N1bTsKIAogCWl4Z2Jfd3JpdGVfZWVwcm9tKGh3LCBFRVBST01fQ0hFQ0tTVU1fUkVHLCBjaGVja3N1bSk7CiAJcmV0dXJuOwpAQCAtMzcyLDcgKzM3Miw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZAotaXhnYl93cml0ZV9lZXByb20oc3RydWN0IGl4Z2JfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IGRhdGEpCitpeGdiX3dyaXRlX2VlcHJvbShzdHJ1Y3QgaXhnYl9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQogewogCXN0cnVjdCBpeGdiX2VlX21hcF90eXBlICplZV9tYXAgPSAoc3RydWN0IGl4Z2JfZWVfbWFwX3R5cGUgKilody0+ZWVwcm9tOwogCkBAIC00MjUsMTEgKzQyNSwxMSBAQAogICogUmV0dXJuczoKICAqICBUaGUgMTYtYml0IHZhbHVlIHJlYWQgZnJvbSB0aGUgZWVwcm9tCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11aW50MTZfdAordTE2CiBpeGdiX3JlYWRfZWVwcm9tKHN0cnVjdCBpeGdiX2h3ICpodywKLQkJICB1aW50MTZfdCBvZmZzZXQpCisJCSAgdTE2IG9mZnNldCkKIHsKLQl1aW50MTZfdCBkYXRhOworCXUxNiBkYXRhOwogCiAJLyogIFByZXBhcmUgdGhlIEVFUFJPTSBmb3IgcmVhZGluZyAgKi8KIAlpeGdiX3NldHVwX2VlcHJvbShodyk7CkBAIC00NTcsMTQgKzQ1NywxNCBAQAogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqCiAgKiBSZXR1cm5zOgotICogICAgICBUUlVFOiBpZiBlZXByb20gcmVhZCBpcyBzdWNjZXNzZnVsCi0gKiAgICAgIEZBTFNFOiBvdGhlcndpc2UuCisgKiAgICAgIHRydWU6IGlmIGVlcHJvbSByZWFkIGlzIHN1Y2Nlc3NmdWwKKyAqICAgICAgZmFsc2U6IG90aGVyd2lzZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWJvb2xlYW5fdAorYm9vbAogaXhnYl9nZXRfZWVwcm9tX2RhdGEoc3RydWN0IGl4Z2JfaHcgKmh3KQogewotCXVpbnQxNl90IGk7Ci0JdWludDE2X3QgY2hlY2tzdW0gPSAwOworCXUxNiBpOworCXUxNiBjaGVja3N1bSA9IDA7CiAJc3RydWN0IGl4Z2JfZWVfbWFwX3R5cGUgKmVlX21hcDsKIAogCURFQlVHRlVOQygiaXhnYl9nZXRfZWVwcm9tX2RhdGEiKTsKQEAgLTQ3MywyNyArNDczLDI3IEBACiAKIAlERUJVR09VVCgiaXhnYl9lZTogUmVhZGluZyBlZXByb20gZGF0YVxuIik7CiAJZm9yKGkgPSAwOyBpIDwgSVhHQl9FRVBST01fU0laRSA7IGkrKykgewotCQl1aW50MTZfdCBlZV9kYXRhOworCQl1MTYgZWVfZGF0YTsKIAkJZWVfZGF0YSA9IGl4Z2JfcmVhZF9lZXByb20oaHcsIGkpOwogCQljaGVja3N1bSArPSBlZV9kYXRhOwogCQlody0+ZWVwcm9tW2ldID0gY3B1X3RvX2xlMTYoZWVfZGF0YSk7CiAJfQogCi0JaWYgKGNoZWNrc3VtICE9ICh1aW50MTZfdCkgRUVQUk9NX1NVTSkgeworCWlmIChjaGVja3N1bSAhPSAodTE2KSBFRVBST01fU1VNKSB7CiAJCURFQlVHT1VUKCJpeGdiX2VlOiBDaGVja3N1bSBpbnZhbGlkLlxuIik7CiAJCS8qIGNsZWFyIHRoZSBpbml0X2N0cmxfcmVnXzEgdG8gc2lnbmlmeSB0aGF0IHRoZSBjYWNoZSBpcwogCQkgKiBpbnZhbGlkYXRlZCAqLwogCQllZV9tYXAtPmluaXRfY3RybF9yZWdfMSA9IGNwdV90b19sZTE2KEVFUFJPTV9JQ1cxX1NJR05BVFVSRV9DTEVBUik7Ci0JCXJldHVybiAoRkFMU0UpOworCQlyZXR1cm4gKGZhbHNlKTsKIAl9CiAKIAlpZiAoKGVlX21hcC0+aW5pdF9jdHJsX3JlZ18xICYgY3B1X3RvX2xlMTYoRUVQUk9NX0lDVzFfU0lHTkFUVVJFX01BU0spKQogCQkgIT0gY3B1X3RvX2xlMTYoRUVQUk9NX0lDVzFfU0lHTkFUVVJFX1ZBTElEKSkgewogCQlERUJVR09VVCgiaXhnYl9lZTogU2lnbmF0dXJlIGludmFsaWQuXG4iKTsKLQkJcmV0dXJuKEZBTFNFKTsKKwkJcmV0dXJuKGZhbHNlKTsKIAl9CiAKLQlyZXR1cm4oVFJVRSk7CisJcmV0dXJuKHRydWUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01MDMsMTcgKzUwMywxNyBAQAogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqCiAgKiBSZXR1cm5zOgotICogICAgICBUUlVFOiBlZXByb20gc2lnbmF0dXJlIHdhcyBnb29kIGFuZCB0aGUgZWVwcm9tIHJlYWQgd2FzIHN1Y2Nlc3NmdWwKLSAqICAgICAgRkFMU0U6IG90aGVyd2lzZS4KKyAqICAgICAgdHJ1ZTogZWVwcm9tIHNpZ25hdHVyZSB3YXMgZ29vZCBhbmQgdGhlIGVlcHJvbSByZWFkIHdhcyBzdWNjZXNzZnVsCisgKiAgICAgIGZhbHNlOiBvdGhlcndpc2UuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGJvb2xlYW5fdAorc3RhdGljIGJvb2wKIGl4Z2JfY2hlY2tfYW5kX2dldF9lZXByb21fZGF0YSAoc3RydWN0IGl4Z2JfaHcqIGh3KQogewogCXN0cnVjdCBpeGdiX2VlX21hcF90eXBlICplZV9tYXAgPSAoc3RydWN0IGl4Z2JfZWVfbWFwX3R5cGUgKilody0+ZWVwcm9tOwogCiAJaWYgKChlZV9tYXAtPmluaXRfY3RybF9yZWdfMSAmIGNwdV90b19sZTE2KEVFUFJPTV9JQ1cxX1NJR05BVFVSRV9NQVNLKSkKIAkgICAgPT0gY3B1X3RvX2xlMTYoRUVQUk9NX0lDVzFfU0lHTkFUVVJFX1ZBTElEKSkgewotCQlyZXR1cm4gKFRSVUUpOworCQlyZXR1cm4gKHRydWUpOwogCX0gZWxzZSB7CiAJCXJldHVybiBpeGdiX2dldF9lZXByb21fZGF0YShodyk7CiAJfQpAQCAtNTI5LDExICs1MjksMTEgQEAKICAqICAgICAgICAgIFdvcmQgYXQgaW5kZXhlZCBvZmZzZXQgaW4gZWVwcm9tLCBpZiB2YWxpZCwgMCBvdGhlcndpc2UuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogX19sZTE2Ci1peGdiX2dldF9lZXByb21fd29yZChzdHJ1Y3QgaXhnYl9odyAqaHcsIHVpbnQxNl90IGluZGV4KQoraXhnYl9nZXRfZWVwcm9tX3dvcmQoc3RydWN0IGl4Z2JfaHcgKmh3LCB1MTYgaW5kZXgpCiB7CiAKIAlpZiAoKGluZGV4IDwgSVhHQl9FRVBST01fU0laRSkgJiYKLQkJKGl4Z2JfY2hlY2tfYW5kX2dldF9lZXByb21fZGF0YShodykgPT0gVFJVRSkpIHsKKwkJKGl4Z2JfY2hlY2tfYW5kX2dldF9lZXByb21fZGF0YShodykgPT0gdHJ1ZSkpIHsKIAkgICByZXR1cm4oaHctPmVlcHJvbVtpbmRleF0pOwogCX0KIApAQCAtNTUwLDE0ICs1NTAsMTQgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkCiBpeGdiX2dldF9lZV9tYWNfYWRkcihzdHJ1Y3QgaXhnYl9odyAqaHcsCi0JCQl1aW50OF90ICptYWNfYWRkcikKKwkJCXU4ICptYWNfYWRkcikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgaXhnYl9lZV9tYXBfdHlwZSAqZWVfbWFwID0gKHN0cnVjdCBpeGdiX2VlX21hcF90eXBlICopaHctPmVlcHJvbTsKIAogCURFQlVHRlVOQygiaXhnYl9nZXRfZWVfbWFjX2FkZHIiKTsKIAotCWlmIChpeGdiX2NoZWNrX2FuZF9nZXRfZWVwcm9tX2RhdGEoaHcpID09IFRSVUUpIHsKKwlpZiAoaXhnYl9jaGVja19hbmRfZ2V0X2VlcHJvbV9kYXRhKGh3KSA9PSB0cnVlKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBJWEdCX0VUSF9MRU5HVEhfT0ZfQUREUkVTUzsgaSsrKSB7CiAJCQltYWNfYWRkcltpXSA9IGVlX21hcC0+bWFjX2FkZHJbaV07CiAJCQlERUJVR09VVDIoIm1hYyglZCkgPSAlLjJYXG4iLCBpLCBtYWNfYWRkcltpXSk7CkBAIC01NzQsMTAgKzU3NCwxMCBAQAogICogUmV0dXJuczoKICAqICAgICAgICAgIFBCQSBudW1iZXIgaWYgRUVQUk9NIGNvbnRlbnRzIGFyZSB2YWxpZCwgMCBvdGhlcndpc2UKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11aW50MzJfdAordTMyCiBpeGdiX2dldF9lZV9wYmFfbnVtYmVyKHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQlpZihpeGdiX2NoZWNrX2FuZF9nZXRfZWVwcm9tX2RhdGEoaHcpID09IFRSVUUpCisJaWYgKGl4Z2JfY2hlY2tfYW5kX2dldF9lZXByb21fZGF0YShodykgPT0gdHJ1ZSkKIAkJcmV0dXJuIChsZTE2X3RvX2NwdShody0+ZWVwcm9tW0VFUFJPTV9QQkFfMV8yX1JFR10pCiAJCQl8IChsZTE2X3RvX2NwdShody0+ZWVwcm9tW0VFUFJPTV9QQkFfM180X1JFR10pPDwxNikpOwogCkBAIC01OTMsMTIgKzU5MywxMiBAQAogICogUmV0dXJuczoKICAqICAgICAgICAgIERldmljZSBJZCBpZiBFRVBST00gY29udGVudHMgYXJlIHZhbGlkLCAwIG90aGVyd2lzZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXVpbnQxNl90Cit1MTYKIGl4Z2JfZ2V0X2VlX2RldmljZV9pZChzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7CiAJc3RydWN0IGl4Z2JfZWVfbWFwX3R5cGUgKmVlX21hcCA9IChzdHJ1Y3QgaXhnYl9lZV9tYXBfdHlwZSAqKWh3LT5lZXByb207CiAKLQlpZihpeGdiX2NoZWNrX2FuZF9nZXRfZWVwcm9tX2RhdGEoaHcpID09IFRSVUUpCisJaWYgKGl4Z2JfY2hlY2tfYW5kX2dldF9lZXByb21fZGF0YShodykgPT0gdHJ1ZSkKIAkJcmV0dXJuIChsZTE2X3RvX2NwdShlZV9tYXAtPmRldmljZV9pZCkpOwogCiAJcmV0dXJuICgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9lZS5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmgKaW5kZXggNzkwOGJmMy4uNGI3YmQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmgKQEAgLTc1LDcgKzc1LDcgQEAKIAogLyogRUVQUk9NIHN0cnVjdHVyZSAqLwogc3RydWN0IGl4Z2JfZWVfbWFwX3R5cGUgewotCXVpbnQ4X3QgbWFjX2FkZHJbSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1NdOworCXU4IG1hY19hZGRyW0lYR0JfRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKIAlfX2xlMTYgY29tcGF0aWJpbGl0eTsKIAlfX2xlMTYgcmVzZXJ2ZWQxWzRdOwogCV9fbGUzMiBwYmFfbnVtYmVyOwpAQCAtODgsMTkgKzg4LDE5IEBACiAJX19sZTE2IG9lbV9yZXNlcnZlZFsxNl07CiAJX19sZTE2IHN3ZHBpbnNfcmVnOwogCV9fbGUxNiBjaXJjdWl0X2N0cmxfcmVnOwotCXVpbnQ4X3QgZDNfcG93ZXI7Ci0JdWludDhfdCBkMF9wb3dlcjsKKwl1OCBkM19wb3dlcjsKKwl1OCBkMF9wb3dlcjsKIAlfX2xlMTYgcmVzZXJ2ZWQyWzI4XTsKIAlfX2xlMTYgY2hlY2tzdW07CiB9OwogCiAvKiBFRVBST00gRnVuY3Rpb25zICovCi11aW50MTZfdCBpeGdiX3JlYWRfZWVwcm9tKHN0cnVjdCBpeGdiX2h3ICpodywgdWludDE2X3QgcmVnKTsKK3UxNiBpeGdiX3JlYWRfZWVwcm9tKHN0cnVjdCBpeGdiX2h3ICpodywgdTE2IHJlZyk7CiAKLWJvb2xlYW5fdCBpeGdiX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bShzdHJ1Y3QgaXhnYl9odyAqaHcpOworYm9vbCBpeGdiX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bShzdHJ1Y3QgaXhnYl9odyAqaHcpOwogCiB2b2lkIGl4Z2JfdXBkYXRlX2VlcHJvbV9jaGVja3N1bShzdHJ1Y3QgaXhnYl9odyAqaHcpOwogCi12b2lkIGl4Z2Jfd3JpdGVfZWVwcm9tKHN0cnVjdCBpeGdiX2h3ICpodywgdWludDE2X3QgcmVnLCB1aW50MTZfdCBkYXRhKTsKK3ZvaWQgaXhnYl93cml0ZV9lZXByb20oc3RydWN0IGl4Z2JfaHcgKmh3LCB1MTYgcmVnLCB1MTYgZGF0YSk7CiAKICNlbmRpZgkJCQkvKiBJWEdCX0VFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCmluZGV4IGEyNjdkZDguLjg0NjRkOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYwpAQCAtMzIsMTUgKzMyLDYgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLWV4dGVybiBpbnQgaXhnYl91cChzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB2b2lkIGl4Z2JfZG93bihzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBib29sZWFuX3Qga2lsbF93YXRjaGRvZyk7Ci1leHRlcm4gdm9pZCBpeGdiX3Jlc2V0KHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIGludCBpeGdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiBpbnQgaXhnYl9zZXR1cF90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gdm9pZCBpeGdiX2ZyZWVfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIHZvaWQgaXhnYl9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB2b2lkIGl4Z2JfdXBkYXRlX3N0YXRzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwotCiAjZGVmaW5lIElYR0JfQUxMX1JBUl9FTlRSSUVTIDE2CiAKIHN0cnVjdCBpeGdiX3N0YXRzIHsKQEAgLTQ5LDcgKzQwLDcgQEAKIAlpbnQgc3RhdF9vZmZzZXQ7CiB9OwogCi0jZGVmaW5lIElYR0JfU1RBVChtKSBzaXplb2YoKChzdHJ1Y3QgaXhnYl9hZGFwdGVyICopMCktPm0pLCBcCisjZGVmaW5lIElYR0JfU1RBVChtKSBGSUVMRF9TSVpFT0Yoc3RydWN0IGl4Z2JfYWRhcHRlciwgbSksIFwKIAkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGl4Z2JfYWRhcHRlciwgbSkKIHN0YXRpYyBzdHJ1Y3QgaXhnYl9zdGF0cyBpeGdiX2dzdHJpbmdzX3N0YXRzW10gPSB7CiAJeyJyeF9wYWNrZXRzIiwgSVhHQl9TVEFUKG5ldF9zdGF0cy5yeF9wYWNrZXRzKX0sCkBAIC02Nyw2ICs1OCw3IEBACiAJeyJyeF9vdmVyX2Vycm9ycyIsIElYR0JfU1RBVChuZXRfc3RhdHMucnhfb3Zlcl9lcnJvcnMpfSwKIAl7InJ4X2NyY19lcnJvcnMiLCBJWEdCX1NUQVQobmV0X3N0YXRzLnJ4X2NyY19lcnJvcnMpfSwKIAl7InJ4X2ZyYW1lX2Vycm9ycyIsIElYR0JfU1RBVChuZXRfc3RhdHMucnhfZnJhbWVfZXJyb3JzKX0sCisJeyJyeF9ub19idWZmZXJfY291bnQiLCBJWEdCX1NUQVQoc3RhdHMucm5iYyl9LAogCXsicnhfZmlmb19lcnJvcnMiLCBJWEdCX1NUQVQobmV0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzKX0sCiAJeyJyeF9taXNzZWRfZXJyb3JzIiwgSVhHQl9TVEFUKG5ldF9zdGF0cy5yeF9taXNzZWRfZXJyb3JzKX0sCiAJeyJ0eF9hYm9ydGVkX2Vycm9ycyIsIElYR0JfU1RBVChuZXRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMpfSwKQEAgLTEzNSw3ICsxMjcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAkKIAlpZihuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKLQkJaXhnYl9kb3duKGFkYXB0ZXIsIFRSVUUpOworCQlpeGdiX2Rvd24oYWRhcHRlciwgdHJ1ZSk7CiAJCWl4Z2JfcmVzZXQoYWRhcHRlcik7CiAJCWl4Z2JfdXAoYWRhcHRlcik7CiAJCWl4Z2Jfc2V0X3NwZWVkX2R1cGxleChuZXRkZXYpOwpAQCAtMTg0LDcgKzE3Niw3IEBACiAJCWh3LT5mYy50eXBlID0gaXhnYl9mY19ub25lOwogCiAJaWYobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7Ci0JCWl4Z2JfZG93bihhZGFwdGVyLCBUUlVFKTsKKwkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwogCQlpeGdiX3NldF9zcGVlZF9kdXBsZXgobmV0ZGV2KTsKIAl9IGVsc2UKQEAgLTE5Myw3ICsxODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdWludDMyX3QKK3N0YXRpYyB1MzIKIGl4Z2JfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTIwMiwxNCArMTk0LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLWl4Z2Jfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK2l4Z2Jfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlhZGFwdGVyLT5yeF9jc3VtID0gZGF0YTsKIAogCWlmKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlpeGdiX2Rvd24oYWRhcHRlcixUUlVFKTsKKwkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwogCQlpeGdiX3NldF9zcGVlZF9kdXBsZXgobmV0ZGV2KTsKIAl9IGVsc2UKQEAgLTIxNywxNCArMjA5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAJCi1zdGF0aWMgdWludDMyX3QKK3N0YXRpYyB1MzIKIGl4Z2JfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7CiB9CiAKIHN0YXRpYyBpbnQKLWl4Z2Jfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK2l4Z2Jfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCiB7CiAJaWYgKGRhdGEpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwpAQCAtMjM1LDcgKzIyNyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWl4Z2Jfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBkYXRhKQoraXhnYl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCWlmKGRhdGEpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CkBAIC0yNDQsNyArMjM2LDcgQEAKIAlyZXR1cm4gMDsKIH0gCiAKLXN0YXRpYyB1aW50MzJfdAorc3RhdGljIHUzMgogaXhnYl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTI1Miw3ICsyNDQsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotaXhnYl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK2l4Z2Jfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBkYXRhOwpAQCAtMjYyLDcgKzI1NCw3IEBACiBzdGF0aWMgaW50IAogaXhnYl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLSNkZWZpbmUgSVhHQl9SRUdfRFVNUF9MRU4gIDEzNipzaXplb2YodWludDMyX3QpCisjZGVmaW5lIElYR0JfUkVHX0RVTVBfTEVOICAxMzYqc2l6ZW9mKHUzMikKIAlyZXR1cm4gSVhHQl9SRUdfRFVNUF9MRU47CiB9CiAKQEAgLTI3Miw5ICsyNjQsOSBAQAogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MzJfdCAqcmVnID0gcDsKLQl1aW50MzJfdCAqcmVnX3N0YXJ0ID0gcmVnOwotCXVpbnQ4X3QgaTsKKwl1MzIgKnJlZyA9IHA7CisJdTMyICpyZWdfc3RhcnQgPSByZWc7CisJdTggaTsKIAogCS8qIHRoZSAxIChvbmUpIGJlbG93IGluZGljYXRlcyBhbiBhdHRlbXB0IGF0IHZlcnNpb25pbmcsIGlmIHRoZQogCSAqIGludGVyZmFjZSBpbiBldGh0b29sIG9yIHRoZSBkcml2ZXIgY2hhbmdlcywgdGhpcyAxIHNob3VsZCBiZQpAQCAtNDAzLDcgKzM5NSw3IEBACiAJKnJlZysrID0gSVhHQl9HRVRfU1RBVChhZGFwdGVyLCB4b2ZmdHhjKTsJLyogMTM0ICovCiAJKnJlZysrID0gSVhHQl9HRVRfU1RBVChhZGFwdGVyLCByamMpOwkvKiAxMzUgKi8KIAotCXJlZ3MtPmxlbiA9IChyZWcgLSByZWdfc3RhcnQpICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWdzLT5sZW4gPSAocmVnIC0gcmVnX3N0YXJ0KSAqIHNpemVvZih1MzIpOwogfQogCiBzdGF0aWMgaW50CkBAIC00MTUsNyArNDA3LDcgQEAKIAogc3RhdGljIGludAogaXhnYl9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCSAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHVpbnQ4X3QgKmJ5dGVzKQorCQkgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtNDUzLDcgKzQ0NSw3IEBACiAJCWVlcHJvbV9idWZmW2ldID0gaXhnYl9nZXRfZWVwcm9tX3dvcmQoaHcsIChmaXJzdF93b3JkICsgaSkpOwogCX0KIAotCW1lbWNweShieXRlcywgKHVpbnQ4X3QgKillZXByb21fYnVmZiArIChlZXByb20tPm9mZnNldCAmIDEpLAorCW1lbWNweShieXRlcywgKHU4ICopZWVwcm9tX2J1ZmYgKyAoZWVwcm9tLT5vZmZzZXQgJiAxKSwKIAkJCWVlcHJvbS0+bGVuKTsKIAlrZnJlZShlZXByb21fYnVmZik7CiAKQEAgLTQ2MywxNCArNDU1LDE0IEBACiAKIHN0YXRpYyBpbnQKIGl4Z2Jfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1aW50OF90ICpieXRlcykKKwkJICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ5dGVzKQogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MTZfdCAqZWVwcm9tX2J1ZmY7CisJdTE2ICplZXByb21fYnVmZjsKIAl2b2lkICpwdHI7CiAJaW50IG1heF9sZW4sIGZpcnN0X3dvcmQsIGxhc3Rfd29yZDsKLQl1aW50MTZfdCBpOworCXUxNiBpOwogCiAJaWYoZWVwcm9tLT5sZW4gPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NjksMTQgKzU2MSwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKLQkJaXhnYl9kb3duKGFkYXB0ZXIsVFJVRSk7CisJCWl4Z2JfZG93bihhZGFwdGVyLCB0cnVlKTsKIAotCXJ4ZHItPmNvdW50ID0gbWF4KHJpbmctPnJ4X3BlbmRpbmcsKHVpbnQzMl90KU1JTl9SWEQpOwotCXJ4ZHItPmNvdW50ID0gbWluKHJ4ZHItPmNvdW50LCh1aW50MzJfdClNQVhfUlhEKTsKKwlyeGRyLT5jb3VudCA9IG1heChyaW5nLT5yeF9wZW5kaW5nLCh1MzIpTUlOX1JYRCk7CisJcnhkci0+Y291bnQgPSBtaW4ocnhkci0+Y291bnQsKHUzMilNQVhfUlhEKTsKIAlyeGRyLT5jb3VudCA9IEFMSUdOKHJ4ZHItPmNvdW50LCBJWEdCX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTsKIAotCXR4ZHItPmNvdW50ID0gbWF4KHJpbmctPnR4X3BlbmRpbmcsKHVpbnQzMl90KU1JTl9UWEQpOwotCXR4ZHItPmNvdW50ID0gbWluKHR4ZHItPmNvdW50LCh1aW50MzJfdClNQVhfVFhEKTsKKwl0eGRyLT5jb3VudCA9IG1heChyaW5nLT50eF9wZW5kaW5nLCh1MzIpTUlOX1RYRCk7CisJdHhkci0+Y291bnQgPSBtaW4odHhkci0+Y291bnQsKHUzMilNQVhfVFhEKTsKIAl0eGRyLT5jb3VudCA9IEFMSUdOKHR4ZHItPmNvdW50LCBJWEdCX1JFUV9UWF9ERVNDUklQVE9SX01VTFRJUExFKTsKIAogCWlmKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewpAQCAtNjMyLDcgKzYyNCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWl4Z2JfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBkYXRhKQoraXhnYl9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCkBAIC02NjgsNyArNjYwLDcgQEAKIAogc3RhdGljIHZvaWQgCiBpeGdiX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIAotCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHVpbnQ2NF90ICpkYXRhKQorCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgaTsKQEAgLTY3NywxMiArNjY5LDEyIEBACiAJZm9yKGkgPSAwOyBpIDwgSVhHQl9TVEFUU19MRU47IGkrKykgewogCQljaGFyICpwID0gKGNoYXIgKilhZGFwdGVyK2l4Z2JfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9vZmZzZXQ7CQogCQlkYXRhW2ldID0gKGl4Z2JfZ3N0cmluZ3Nfc3RhdHNbaV0uc2l6ZW9mX3N0YXQgPT0gCi0JCQlzaXplb2YodWludDY0X3QpKSA/ICoodWludDY0X3QgKilwIDogKih1aW50MzJfdCAqKXA7CisJCQlzaXplb2YodTY0KSkgPyAqKHU2NCAqKXAgOiAqKHUzMiAqKXA7CiAJfQogfQogCiBzdGF0aWMgdm9pZCAKLWl4Z2JfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3Qgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKQoraXhnYl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKIHsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwppbmRleCA4MGE4Yjk4Li4wNGQyMDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwpAQCAtMzUsMTMgKzM1LDEzIEBACiAKIC8qICBMb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCiAKLXN0YXRpYyB1aW50MzJfdCBpeGdiX2hhc2hfbWNfYWRkcihzdHJ1Y3QgaXhnYl9odyAqaHcsIHVpbnQ4X3QgKiBtY19hZGRyKTsKK3N0YXRpYyB1MzIgaXhnYl9oYXNoX21jX2FkZHIoc3RydWN0IGl4Z2JfaHcgKmh3LCB1OCAqIG1jX2FkZHIpOwogCi1zdGF0aWMgdm9pZCBpeGdiX210YV9zZXQoc3RydWN0IGl4Z2JfaHcgKmh3LCB1aW50MzJfdCBoYXNoX3ZhbHVlKTsKK3N0YXRpYyB2b2lkIGl4Z2JfbXRhX3NldChzdHJ1Y3QgaXhnYl9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKTsKIAogc3RhdGljIHZvaWQgaXhnYl9nZXRfYnVzX2luZm8oc3RydWN0IGl4Z2JfaHcgKmh3KTsKIAotc3RhdGljIGJvb2xlYW5fdCBpeGdiX2xpbmtfcmVzZXQoc3RydWN0IGl4Z2JfaHcgKmh3KTsKK3N0YXRpYyBib29sIGl4Z2JfbGlua19yZXNldChzdHJ1Y3QgaXhnYl9odyAqaHcpOwogCiBzdGF0aWMgdm9pZCBpeGdiX29wdGljc19yZXNldChzdHJ1Y3QgaXhnYl9odyAqaHcpOwogCkBAIC01NSwxOCArNTUsMTggQEAKIAogc3RhdGljIHZvaWQgaXhnYl9pbml0X3J4X2FkZHJzKHN0cnVjdCBpeGdiX2h3ICpodyk7CiAKLXN0YXRpYyB1aW50MTZfdCBpeGdiX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgaXhnYl9odyAqaHcsCi0JCQkJICB1aW50MzJfdCByZWdfYWRkcmVzcywKLQkJCQkgIHVpbnQzMl90IHBoeV9hZGRyZXNzLAotCQkJCSAgdWludDMyX3QgZGV2aWNlX3R5cGUpOworc3RhdGljIHUxNiBpeGdiX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgaXhnYl9odyAqaHcsCisJCQkJICB1MzIgcmVnX2FkZHJlc3MsCisJCQkJICB1MzIgcGh5X2FkZHJlc3MsCisJCQkJICB1MzIgZGV2aWNlX3R5cGUpOwogCi1zdGF0aWMgYm9vbGVhbl90IGl4Z2Jfc2V0dXBfZmMoc3RydWN0IGl4Z2JfaHcgKmh3KTsKK3N0YXRpYyBib29sIGl4Z2Jfc2V0dXBfZmMoc3RydWN0IGl4Z2JfaHcgKmh3KTsKIAotc3RhdGljIGJvb2xlYW5fdCBtYWNfYWRkcl92YWxpZCh1aW50OF90ICptYWNfYWRkcik7CitzdGF0aWMgYm9vbCBtYWNfYWRkcl92YWxpZCh1OCAqbWFjX2FkZHIpOwogCi1zdGF0aWMgdWludDMyX3QgaXhnYl9tYWNfcmVzZXQoc3RydWN0IGl4Z2JfaHcgKmh3KQorc3RhdGljIHUzMiBpeGdiX21hY19yZXNldChzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3QgY3RybF9yZWc7CisJdTMyIGN0cmxfcmVnOwogCiAJY3RybF9yZWcgPSAgSVhHQl9DVFJMMF9SU1QgfAogCQkJCUlYR0JfQ1RSTDBfU0RQM19ESVIgfCAgIC8qIEFsbCBwaW5zIGFyZSBPdXRwdXQ9MSAqLwpAQCAtMTE0LDExICsxMTQsMTEgQEAKICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYm9vbGVhbl90Citib29sCiBpeGdiX2FkYXB0ZXJfc3RvcChzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3QgY3RybF9yZWc7Ci0JdWludDMyX3QgaWNyX3JlZzsKKwl1MzIgY3RybF9yZWc7CisJdTMyIGljcl9yZWc7CiAKIAlERUJVR0ZVTkMoIml4Z2JfYWRhcHRlcl9zdG9wIik7CiAKQEAgLTEyNywxMyArMTI3LDEzIEBACiAJICovCiAJaWYoaHctPmFkYXB0ZXJfc3RvcHBlZCkgewogCQlERUJVR09VVCgiRXhpdGluZyBiZWNhdXNlIHRoZSBhZGFwdGVyIGlzIGFscmVhZHkgc3RvcHBlZCEhIVxuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFNldCB0aGUgQWRhcHRlciBTdG9wcGVkIGZsYWcgc28gb3RoZXIgZHJpdmVyIGZ1bmN0aW9ucyBzdG9wCiAJICogdG91Y2hpbmcgdGhlIEhhcmR3YXJlLgogCSAqLwotCWh3LT5hZGFwdGVyX3N0b3BwZWQgPSBUUlVFOworCWh3LT5hZGFwdGVyX3N0b3BwZWQgPSB0cnVlOwogCiAJLyogQ2xlYXIgaW50ZXJydXB0IG1hc2sgdG8gc3RvcCBib2FyZCBmcm9tIGdlbmVyYXRpbmcgaW50ZXJydXB0cyAqLwogCURFQlVHT1VUKCJNYXNraW5nIG9mZiBhbGwgaW50ZXJydXB0c1xuIik7CkBAIC0xNzksOCArMTc5LDggQEAKIHN0YXRpYyBpeGdiX3hwYWtfdmVuZG9yCiBpeGdiX2lkZW50aWZ5X3hwYWtfdmVuZG9yKHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQl1aW50MzJfdCBpOwotCXVpbnQxNl90IHZlbmRvcl9uYW1lWzVdOworCXUzMiBpOworCXUxNiB2ZW5kb3JfbmFtZVs1XTsKIAlpeGdiX3hwYWtfdmVuZG9yIHhwYWtfdmVuZG9yOwogCiAJREVCVUdGVU5DKCJpeGdiX2lkZW50aWZ5X3hwYWtfdmVuZG9yIik7CkBAIC0yODYsMTUgKzI4NiwxNSBAQAogICogTGVhdmVzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cyBkaXNhYmxlZCBhbmQgdW5pbml0aWFsaXplZC4KICAqCiAgKiBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIHN1Y2Nlc3NmdWwsCi0gKiAgICAgIEZBTFNFIGlmIHVucmVjb3ZlcmFibGUgcHJvYmxlbXMgd2VyZSBlbmNvdW50ZXJlZC4KKyAqICAgICAgdHJ1ZSBpZiBzdWNjZXNzZnVsLAorICogICAgICBmYWxzZSBpZiB1bnJlY292ZXJhYmxlIHByb2JsZW1zIHdlcmUgZW5jb3VudGVyZWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1ib29sZWFuX3QKK2Jvb2wKIGl4Z2JfaW5pdF9odyhzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3QgaTsKLQl1aW50MzJfdCBjdHJsX3JlZzsKLQlib29sZWFuX3Qgc3RhdHVzOworCXUzMiBpOworCXUzMiBjdHJsX3JlZzsKKwlib29sIHN0YXR1czsKIAogCURFQlVHRlVOQygiaXhnYl9pbml0X2h3Iik7CiAKQEAgLTMxOCw5ICszMTgsOCBAQAogCS8qIERlbGF5IGEgZmV3IG1zIGp1c3QgdG8gYWxsb3cgdGhlIHJlc2V0IHRvIGNvbXBsZXRlICovCiAJbXNsZWVwKElYR0JfREVMQVlfQUZURVJfRUVfUkVTRVQpOwogCi0JaWYgKGl4Z2JfZ2V0X2VlcHJvbV9kYXRhKGh3KSA9PSBGQUxTRSkgewotCQlyZXR1cm4oRkFMU0UpOwotCX0KKwlpZiAoIWl4Z2JfZ2V0X2VlcHJvbV9kYXRhKGh3KSkKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogVXNlIHRoZSBkZXZpY2UgaWQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHBoeS90cmFuc2NlaXZlci4gKi8KIAlody0+ZGV2aWNlX2lkID0gaXhnYl9nZXRfZWVfZGV2aWNlX2lkKGh3KTsKQEAgLTMzNywxMSArMzM2LDExIEBACiAJICovCiAJaWYgKCFtYWNfYWRkcl92YWxpZChody0+Y3Vycl9tYWNfYWRkcikpIHsKIAkJREVCVUdPVVQoIk1BQyBhZGRyZXNzIGludmFsaWQgYWZ0ZXIgaXhnYl9pbml0X3J4X2FkZHJzXG4iKTsKLQkJcmV0dXJuKEZBTFNFKTsKKwkJcmV0dXJuKGZhbHNlKTsKIAl9CiAKIAkvKiB0ZWxsIHRoZSByb3V0aW5lcyBpbiB0aGlzIGZpbGUgdGhleSBjYW4gYWNjZXNzIGhhcmR3YXJlIGFnYWluICovCi0JaHctPmFkYXB0ZXJfc3RvcHBlZCA9IEZBTFNFOworCWh3LT5hZGFwdGVyX3N0b3BwZWQgPSBmYWxzZTsKIAogCS8qIEZpbGwgaW4gdGhlIGJ1c19pbmZvIHN0cnVjdHVyZSAqLwogCWl4Z2JfZ2V0X2J1c19pbmZvKGh3KTsKQEAgLTM3OCw3ICszNzcsNyBAQAogc3RhdGljIHZvaWQKIGl4Z2JfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3QgaTsKKwl1MzIgaTsKIAogCURFQlVHRlVOQygiaXhnYl9pbml0X3J4X2FkZHJzIik7CiAKQEAgLTQzOCwxMyArNDM3LDEzIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkCiBpeGdiX21jX2FkZHJfbGlzdF91cGRhdGUoc3RydWN0IGl4Z2JfaHcgKmh3LAotCQkJICB1aW50OF90ICptY19hZGRyX2xpc3QsCi0JCQkgIHVpbnQzMl90IG1jX2FkZHJfY291bnQsCi0JCQkgIHVpbnQzMl90IHBhZCkKKwkJCSAgdTggKm1jX2FkZHJfbGlzdCwKKwkJCSAgdTMyIG1jX2FkZHJfY291bnQsCisJCQkgIHUzMiBwYWQpCiB7Ci0JdWludDMyX3QgaGFzaF92YWx1ZTsKLQl1aW50MzJfdCBpOwotCXVpbnQzMl90IHJhcl91c2VkX2NvdW50ID0gMTsJCS8qIFJBUlswXSBpcyB1c2VkIGZvciBvdXIgTUFDIGFkZHJlc3MgKi8KKwl1MzIgaGFzaF92YWx1ZTsKKwl1MzIgaTsKKwl1MzIgcmFyX3VzZWRfY291bnQgPSAxOwkJLyogUkFSWzBdIGlzIHVzZWQgZm9yIG91ciBNQUMgYWRkcmVzcyAqLwogCiAJREVCVUdGVU5DKCJpeGdiX21jX2FkZHJfbGlzdF91cGRhdGUiKTsKIApAQCAtNTE2LDExICs1MTUsMTEgQEAKICAqIFJldHVybnM6CiAgKiAgICAgIFRoZSBoYXNoIHZhbHVlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdWludDMyX3QKK3N0YXRpYyB1MzIKIGl4Z2JfaGFzaF9tY19hZGRyKHN0cnVjdCBpeGdiX2h3ICpodywKLQkJICAgdWludDhfdCAqbWNfYWRkcikKKwkJICAgdTggKm1jX2FkZHIpCiB7Ci0JdWludDMyX3QgaGFzaF92YWx1ZSA9IDA7CisJdTMyIGhhc2hfdmFsdWUgPSAwOwogCiAJREVCVUdGVU5DKCJpeGdiX2hhc2hfbWNfYWRkciIpOwogCkBAIC01MzQsMTggKzUzMywxOCBAQAogCWNhc2UgMDoKIAkJLyogWzQ3OjM2XSBpLmUuIDB4NTYzIGZvciBhYm92ZSBleGFtcGxlIGFkZHJlc3MgKi8KIAkJaGFzaF92YWx1ZSA9Ci0JCSAgICAoKG1jX2FkZHJbNF0gPj4gNCkgfCAoKCh1aW50MTZfdCkgbWNfYWRkcls1XSkgPDwgNCkpOworCQkgICAgKChtY19hZGRyWzRdID4+IDQpIHwgKCgodTE2KSBtY19hZGRyWzVdKSA8PCA0KSk7CiAJCWJyZWFrOwogCWNhc2UgMToJCS8qIFs0NjozNV0gaS5lLiAweEFDNiBmb3IgYWJvdmUgZXhhbXBsZSBhZGRyZXNzICovCiAJCWhhc2hfdmFsdWUgPQotCQkgICAgKChtY19hZGRyWzRdID4+IDMpIHwgKCgodWludDE2X3QpIG1jX2FkZHJbNV0pIDw8IDUpKTsKKwkJICAgICgobWNfYWRkcls0XSA+PiAzKSB8ICgoKHUxNikgbWNfYWRkcls1XSkgPDwgNSkpOwogCQlicmVhazsKIAljYXNlIDI6CQkvKiBbNDU6MzRdIGkuZS4gMHg1RDggZm9yIGFib3ZlIGV4YW1wbGUgYWRkcmVzcyAqLwogCQloYXNoX3ZhbHVlID0KLQkJICAgICgobWNfYWRkcls0XSA+PiAyKSB8ICgoKHVpbnQxNl90KSBtY19hZGRyWzVdKSA8PCA2KSk7CisJCSAgICAoKG1jX2FkZHJbNF0gPj4gMikgfCAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IDYpKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgkJLyogWzQzOjMyXSBpLmUuIDB4NjM0IGZvciBhYm92ZSBleGFtcGxlIGFkZHJlc3MgKi8KLQkJaGFzaF92YWx1ZSA9ICgobWNfYWRkcls0XSkgfCAoKCh1aW50MTZfdCkgbWNfYWRkcls1XSkgPDwgOCkpOworCQloYXNoX3ZhbHVlID0gKChtY19hZGRyWzRdKSB8ICgoKHUxNikgbWNfYWRkcls1XSkgPDwgOCkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBJbnZhbGlkIG1jX2ZpbHRlcl90eXBlLCB3aGF0IHNob3VsZCB3ZSBkbz8gKi8KQEAgLTU2NiwxMCArNTY1LDEwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogaXhnYl9tdGFfc2V0KHN0cnVjdCBpeGdiX2h3ICpodywKLQkJICB1aW50MzJfdCBoYXNoX3ZhbHVlKQorCQkgIHUzMiBoYXNoX3ZhbHVlKQogewotCXVpbnQzMl90IGhhc2hfYml0LCBoYXNoX3JlZzsKLQl1aW50MzJfdCBtdGFfcmVnOworCXUzMiBoYXNoX2JpdCwgaGFzaF9yZWc7CisJdTMyIG10YV9yZWc7CiAKIAkvKiBUaGUgTVRBIGlzIGEgcmVnaXN0ZXIgYXJyYXkgb2YgMTI4IDMyLWJpdCByZWdpc3RlcnMuCiAJICogSXQgaXMgdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mIDQwOTYgYml0cy4gIFdlIHdhbnQgdG8gc2V0CkBAIC02MDAsMjMgKzU5OSwyMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZAogaXhnYl9yYXJfc2V0KHN0cnVjdCBpeGdiX2h3ICpodywKLQkJICB1aW50OF90ICphZGRyLAotCQkgIHVpbnQzMl90IGluZGV4KQorCQkgIHU4ICphZGRyLAorCQkgIHUzMiBpbmRleCkKIHsKLQl1aW50MzJfdCByYXJfbG93LCByYXJfaGlnaDsKKwl1MzIgcmFyX2xvdywgcmFyX2hpZ2g7CiAKIAlERUJVR0ZVTkMoIml4Z2JfcmFyX3NldCIpOwogCiAJLyogSFcgZXhwZWN0cyB0aGVzZSBpbiBsaXR0bGUgZW5kaWFuIHNvIHdlIHJldmVyc2UgdGhlIGJ5dGUgb3JkZXIKIAkgKiBmcm9tIG5ldHdvcmsgb3JkZXIgKGJpZyBlbmRpYW4pIHRvIGxpdHRsZSBlbmRpYW4KIAkgKi8KLQlyYXJfbG93ID0gKCh1aW50MzJfdCkgYWRkclswXSB8Ci0JCSAgICgodWludDMyX3QpYWRkclsxXSA8PCA4KSB8Ci0JCSAgICgodWludDMyX3QpYWRkclsyXSA8PCAxNikgfAotCQkgICAoKHVpbnQzMl90KWFkZHJbM10gPDwgMjQpKTsKKwlyYXJfbG93ID0gKCh1MzIpIGFkZHJbMF0gfAorCQkgICAoKHUzMilhZGRyWzFdIDw8IDgpIHwKKwkJICAgKCh1MzIpYWRkclsyXSA8PCAxNikgfAorCQkgICAoKHUzMilhZGRyWzNdIDw8IDI0KSk7CiAKLQlyYXJfaGlnaCA9ICgodWludDMyX3QpIGFkZHJbNF0gfAotCQkJKCh1aW50MzJfdClhZGRyWzVdIDw8IDgpIHwKKwlyYXJfaGlnaCA9ICgodTMyKSBhZGRyWzRdIHwKKwkJCSgodTMyKWFkZHJbNV0gPDwgOCkgfAogCQkJSVhHQl9SQUhfQVYpOwogCiAJSVhHQl9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoaW5kZXggPDwgMSksIHJhcl9sb3cpOwpAQCAtNjMzLDggKzYzMiw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkCiBpeGdiX3dyaXRlX3ZmdGEoc3RydWN0IGl4Z2JfaHcgKmh3LAotCQkgdWludDMyX3Qgb2Zmc2V0LAotCQkgdWludDMyX3QgdmFsdWUpCisJCSB1MzIgb2Zmc2V0LAorCQkgdTMyIHZhbHVlKQogewogCUlYR0JfV1JJVEVfUkVHX0FSUkFZKGh3LCBWRlRBLCBvZmZzZXQsIHZhbHVlKTsKIAlyZXR1cm47CkBAIC02NDgsNyArNjQ3LDcgQEAKIHN0YXRpYyB2b2lkCiBpeGdiX2NsZWFyX3ZmdGEoc3RydWN0IGl4Z2JfaHcgKmh3KQogewotCXVpbnQzMl90IG9mZnNldDsKKwl1MzIgb2Zmc2V0OwogCiAJZm9yKG9mZnNldCA9IDA7IG9mZnNldCA8IElYR0JfVkxBTl9GSUxURVJfVEJMX1NJWkU7IG9mZnNldCsrKQogCQlJWEdCX1dSSVRFX1JFR19BUlJBWShodywgVkZUQSwgb2Zmc2V0LCAwKTsKQEAgLTY2MSwxMiArNjYwLDEyIEBACiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgYm9vbGVhbl90CitzdGF0aWMgYm9vbAogaXhnYl9zZXR1cF9mYyhzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3QgY3RybF9yZWc7Ci0JdWludDMyX3QgcGFwX3JlZyA9IDA7ICAgLyogYnkgZGVmYXVsdCwgYXNzdW1lIG5vIHBhdXNlIHRpbWUgKi8KLQlib29sZWFuX3Qgc3RhdHVzID0gVFJVRTsKKwl1MzIgY3RybF9yZWc7CisJdTMyIHBhcF9yZWcgPSAwOyAgIC8qIGJ5IGRlZmF1bHQsIGFzc3VtZSBubyBwYXVzZSB0aW1lICovCisJYm9vbCBzdGF0dXMgPSB0cnVlOwogCiAJREVCVUdGVU5DKCJpeGdiX3NldHVwX2ZjIik7CiAKQEAgLTc2MywxNSArNzYyLDE1IEBACiAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgZmlyc3QgYW4gYWRkcmVzcyBjeWNsZSBjb21tYW5kIGlzIHNlbnQsIGZvbGxvd2VkIGJ5IGEKICAqIHJlYWQgY29tbWFuZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB1aW50MTZfdAorc3RhdGljIHUxNgogaXhnYl9yZWFkX3BoeV9yZWcoc3RydWN0IGl4Z2JfaHcgKmh3LAotCQl1aW50MzJfdCByZWdfYWRkcmVzcywKLQkJdWludDMyX3QgcGh5X2FkZHJlc3MsCi0JCXVpbnQzMl90IGRldmljZV90eXBlKQorCQl1MzIgcmVnX2FkZHJlc3MsCisJCXUzMiBwaHlfYWRkcmVzcywKKwkJdTMyIGRldmljZV90eXBlKQogewotCXVpbnQzMl90IGk7Ci0JdWludDMyX3QgZGF0YTsKLQl1aW50MzJfdCBjb21tYW5kID0gMDsKKwl1MzIgaTsKKwl1MzIgZGF0YTsKKwl1MzIgY29tbWFuZCA9IDA7CiAKIAlBU1NFUlQocmVnX2FkZHJlc3MgPD0gSVhHQl9NQVhfUEhZX1JFR19BRERSRVNTKTsKIAlBU1NFUlQocGh5X2FkZHJlc3MgPD0gSVhHQl9NQVhfUEhZX0FERFJFU1MpOwpAQCAtODM2LDcgKzgzNSw3IEBACiAJICovCiAJZGF0YSA9IElYR0JfUkVBRF9SRUcoaHcsIE1TUldEKTsKIAlkYXRhID4+PSBJWEdCX01TUldEX1JFQURfREFUQV9TSElGVDsKLQlyZXR1cm4oKHVpbnQxNl90KSBkYXRhKTsKKwlyZXR1cm4oKHUxNikgZGF0YSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTg1OCwyMCArODU3LDIwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogaXhnYl93cml0ZV9waHlfcmVnKHN0cnVjdCBpeGdiX2h3ICpodywKLQkJCXVpbnQzMl90IHJlZ19hZGRyZXNzLAotCQkJdWludDMyX3QgcGh5X2FkZHJlc3MsCi0JCQl1aW50MzJfdCBkZXZpY2VfdHlwZSwKLQkJCXVpbnQxNl90IGRhdGEpCisJCQl1MzIgcmVnX2FkZHJlc3MsCisJCQl1MzIgcGh5X2FkZHJlc3MsCisJCQl1MzIgZGV2aWNlX3R5cGUsCisJCQl1MTYgZGF0YSkKIHsKLQl1aW50MzJfdCBpOwotCXVpbnQzMl90IGNvbW1hbmQgPSAwOworCXUzMiBpOworCXUzMiBjb21tYW5kID0gMDsKIAogCUFTU0VSVChyZWdfYWRkcmVzcyA8PSBJWEdCX01BWF9QSFlfUkVHX0FERFJFU1MpOwogCUFTU0VSVChwaHlfYWRkcmVzcyA8PSBJWEdCX01BWF9QSFlfQUREUkVTUyk7CiAJQVNTRVJUKGRldmljZV90eXBlIDw9IElYR0JfTUFYX1BIWV9ERVZfVFlQRSk7CiAKIAkvKiBQdXQgdGhlIGRhdGEgaW4gdGhlIE1ESU8gUmVhZC9Xcml0ZSBEYXRhIHJlZ2lzdGVyICovCi0JSVhHQl9XUklURV9SRUcoaHcsIE1TUldELCAodWludDMyX3QpZGF0YSk7CisJSVhHQl9XUklURV9SRUcoaHcsIE1TUldELCAodTMyKWRhdGEpOwogCiAJLyogU2V0dXAgYW5kIHdyaXRlIHRoZSBhZGRyZXNzIGN5Y2xlIGNvbW1hbmQgKi8KIAljb21tYW5kID0gKChyZWdfYWRkcmVzcyA8PCBJWEdCX01TQ0FfTlBfQUREUl9TSElGVCkgIHwKQEAgLTk0MCw4ICs5MzksOCBAQAogdm9pZAogaXhnYl9jaGVja19mb3JfbGluayhzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3Qgc3RhdHVzX3JlZzsKLQl1aW50MzJfdCB4cGNzc19yZWc7CisJdTMyIHN0YXR1c19yZWc7CisJdTMyIHhwY3NzX3JlZzsKIAogCURFQlVHRlVOQygiaXhnYl9jaGVja19mb3JfbGluayIpOwogCkBAIC05NTAsNyArOTQ5LDcgQEAKIAogCWlmICgoeHBjc3NfcmVnICYgSVhHQl9YUENTU19BTElHTl9TVEFUVVMpICYmCiAJICAgIChzdGF0dXNfcmVnICYgSVhHQl9TVEFUVVNfTFUpKSB7Ci0JCWh3LT5saW5rX3VwID0gVFJVRTsKKwkJaHctPmxpbmtfdXAgPSB0cnVlOwogCX0gZWxzZSBpZiAoISh4cGNzc19yZWcgJiBJWEdCX1hQQ1NTX0FMSUdOX1NUQVRVUykgJiYKIAkJICAgKHN0YXR1c19yZWcgJiBJWEdCX1NUQVRVU19MVSkpIHsKIAkJREVCVUdPVVQoIlhQQ1NTIE5vdCBBbGlnbmVkIHdoaWxlIFN0YXR1czpMVSBpcyBzZXQuXG4iKTsKQEAgLTk3NCwxMCArOTczLDEwIEBACiAgKgogICogQ2FsbGVkIGJ5IGFueSBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIGNoZWNrIHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgYWRhcHRlci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWJvb2xlYW5fdCBpeGdiX2NoZWNrX2Zvcl9iYWRfbGluayhzdHJ1Y3QgaXhnYl9odyAqaHcpCitib29sIGl4Z2JfY2hlY2tfZm9yX2JhZF9saW5rKHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQl1aW50MzJfdCBuZXdMRkMsIG5ld1JGQzsKLQlib29sZWFuX3QgYmFkX2xpbmtfcmV0dXJuY29kZSA9IEZBTFNFOworCXUzMiBuZXdMRkMsIG5ld1JGQzsKKwlib29sIGJhZF9saW5rX3JldHVybmNvZGUgPSBmYWxzZTsKIAogCWlmIChody0+cGh5X3R5cGUgPT0gaXhnYl9waHlfdHlwZV90eG4xNzQwMSkgewogCQluZXdMRkMgPSBJWEdCX1JFQURfUkVHKGh3LCBMRkMpOwpAQCAtOTg2LDcgKzk4NSw3IEBACiAJCSAgICB8fCAoaHctPmxhc3RSRkMgKyAyNTAgPCBuZXdSRkMpKSB7CiAJCQlERUJVR09VVAogCQkJICAgICgiQkFEIExJTkshIHRvbyBtYW55IExGQy9SRkMgc2luY2UgbGFzdCBjaGVja1xuIik7Ci0JCQliYWRfbGlua19yZXR1cm5jb2RlID0gVFJVRTsKKwkJCWJhZF9saW5rX3JldHVybmNvZGUgPSB0cnVlOwogCQl9CiAJCWh3LT5sYXN0TEZDID0gbmV3TEZDOwogCQlody0+bGFzdFJGQyA9IG5ld1JGQzsKQEAgLTEwMDMsNyArMTAwMiw3IEBACiBzdGF0aWMgdm9pZAogaXhnYl9jbGVhcl9od19jbnRycyhzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0Jdm9sYXRpbGUgdWludDMyX3QgdGVtcF9yZWc7CisJdm9sYXRpbGUgdTMyIHRlbXBfcmVnOwogCiAJREVCVUdGVU5DKCJpeGdiX2NsZWFyX2h3X2NudHJzIik7CiAKQEAgLTEwODQsNyArMTA4Myw3IEBACiB2b2lkCiBpeGdiX2xlZF9vbihzdHJ1Y3QgaXhnYl9odyAqaHcpCiB7Ci0JdWludDMyX3QgY3RybDBfcmVnID0gSVhHQl9SRUFEX1JFRyhodywgQ1RSTDApOworCXUzMiBjdHJsMF9yZWcgPSBJWEdCX1JFQURfUkVHKGh3LCBDVFJMMCk7CiAKIAkvKiBUbyB0dXJuIG9uIHRoZSBMRUQsIGNsZWFyIHNvZnR3YXJlLWRlZmluYWJsZSBwaW4gMCAoU0RQMCkuICovCiAJY3RybDBfcmVnICY9IH5JWEdCX0NUUkwwX1NEUDA7CkBAIC0xMTAwLDcgKzEwOTksNyBAQAogdm9pZAogaXhnYl9sZWRfb2ZmKHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQl1aW50MzJfdCBjdHJsMF9yZWcgPSBJWEdCX1JFQURfUkVHKGh3LCBDVFJMMCk7CisJdTMyIGN0cmwwX3JlZyA9IElYR0JfUkVBRF9SRUcoaHcsIENUUkwwKTsKIAogCS8qIFRvIHR1cm4gb2ZmIHRoZSBMRUQsIHNldCBzb2Z0d2FyZS1kZWZpbmFibGUgcGluIDAgKFNEUDApLiAqLwogCWN0cmwwX3JlZyB8PSBJWEdCX0NUUkwwX1NEUDA7CkBAIC0xMTE2LDcgKzExMTUsNyBAQAogc3RhdGljIHZvaWQKIGl4Z2JfZ2V0X2J1c19pbmZvKHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQl1aW50MzJfdCBzdGF0dXNfcmVnOworCXUzMiBzdGF0dXNfcmVnOwogCiAJc3RhdHVzX3JlZyA9IElYR0JfUkVBRF9SRUcoaHcsIFNUQVRVUyk7CiAKQEAgLTExNTUsMjEgKzExNTQsMjEgQEAKICAqIG1hY19hZGRyIC0gcG9pbnRlciB0byBNQUMgYWRkcmVzcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgYm9vbGVhbl90Ci1tYWNfYWRkcl92YWxpZCh1aW50OF90ICptYWNfYWRkcikKK3N0YXRpYyBib29sCittYWNfYWRkcl92YWxpZCh1OCAqbWFjX2FkZHIpCiB7Ci0JYm9vbGVhbl90IGlzX3ZhbGlkID0gVFJVRTsKKwlib29sIGlzX3ZhbGlkID0gdHJ1ZTsKIAlERUJVR0ZVTkMoIm1hY19hZGRyX3ZhbGlkIik7CiAKIAkvKiBNYWtlIHN1cmUgaXQgaXMgbm90IGEgbXVsdGljYXN0IGFkZHJlc3MgKi8KIAlpZiAoSVNfTVVMVElDQVNUKG1hY19hZGRyKSkgewogCQlERUJVR09VVCgiTUFDIGFkZHJlc3MgaXMgbXVsdGljYXN0XG4iKTsKLQkJaXNfdmFsaWQgPSBGQUxTRTsKKwkJaXNfdmFsaWQgPSBmYWxzZTsKIAl9CiAJLyogTm90IGEgYnJvYWRjYXN0IGFkZHJlc3MgKi8KIAllbHNlIGlmIChJU19CUk9BRENBU1QobWFjX2FkZHIpKSB7CiAJCURFQlVHT1VUKCJNQUMgYWRkcmVzcyBpcyBicm9hZGNhc3RcbiIpOwotCQlpc192YWxpZCA9IEZBTFNFOworCQlpc192YWxpZCA9IGZhbHNlOwogCX0KIAkvKiBSZWplY3QgdGhlIHplcm8gYWRkcmVzcyAqLwogCWVsc2UgaWYgKG1hY19hZGRyWzBdID09IDAgJiYKQEAgLTExNzksNyArMTE3OCw3IEBACiAJCQkgbWFjX2FkZHJbNF0gPT0gMCAmJgogCQkJIG1hY19hZGRyWzVdID09IDApIHsKIAkJREVCVUdPVVQoIk1BQyBhZGRyZXNzIGlzIGFsbCB6ZXJvc1xuIik7Ci0JCWlzX3ZhbGlkID0gRkFMU0U7CisJCWlzX3ZhbGlkID0gZmFsc2U7CiAJfQogCXJldHVybiAoaXNfdmFsaWQpOwogfQpAQCAtMTE5MCwxMiArMTE4OSwxMiBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgYm9vbGVhbl90CitzdGF0aWMgYm9vbAogaXhnYl9saW5rX3Jlc2V0KHN0cnVjdCBpeGdiX2h3ICpodykKIHsKLQlib29sZWFuX3QgbGlua19zdGF0dXMgPSBGQUxTRTsKLQl1aW50OF90IHdhaXRfcmV0cmllcyA9IE1BWF9SRVNFVF9JVEVSQVRJT05TOwotCXVpbnQ4X3QgbHJzdF9yZXRyaWVzID0gTUFYX1JFU0VUX0lURVJBVElPTlM7CisJYm9vbCBsaW5rX3N0YXR1cyA9IGZhbHNlOworCXU4IHdhaXRfcmV0cmllcyA9IE1BWF9SRVNFVF9JVEVSQVRJT05TOworCXU4IGxyc3RfcmV0cmllcyA9IE1BWF9SRVNFVF9JVEVSQVRJT05TOwogCiAJZG8gewogCQkvKiBSZXNldCB0aGUgbGluayAqLwpAQCAtMTIwOCw3ICsxMjA3LDcgQEAKIAkJCWxpbmtfc3RhdHVzID0KIAkJCSAgICAoKElYR0JfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBJWEdCX1NUQVRVU19MVSkKIAkJCSAgICAgJiYgKElYR0JfUkVBRF9SRUcoaHcsIFhQQ1NTKSAmCi0JCQkJIElYR0JfWFBDU1NfQUxJR05fU1RBVFVTKSkgPyBUUlVFIDogRkFMU0U7CisJCQkJIElYR0JfWFBDU1NfQUxJR05fU1RBVFVTKSkgPyB0cnVlIDogZmFsc2U7CiAJCX0gd2hpbGUgKCFsaW5rX3N0YXR1cyAmJiAtLXdhaXRfcmV0cmllcyk7CiAKIAl9IHdoaWxlICghbGlua19zdGF0dXMgJiYgLS1scnN0X3JldHJpZXMpOwpAQCAtMTIyNSw3ICsxMjI0LDcgQEAKIGl4Z2Jfb3B0aWNzX3Jlc2V0KHN0cnVjdCBpeGdiX2h3ICpodykKIHsKIAlpZiAoaHctPnBoeV90eXBlID09IGl4Z2JfcGh5X3R5cGVfdHhuMTc0MDEpIHsKLQkJdWludDE2X3QgbWRpb19yZWc7CisJCXUxNiBtZGlvX3JlZzsKIAogCQlpeGdiX3dyaXRlX3BoeV9yZWcoaHcsCiAJCQkJCU1ESU9fUE1BX1BNRF9DUjEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5oCmluZGV4IDRmMTc2ZmYuLjM5Y2ZhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5oCkBAIC01MzgsOCArNTM4LDggQEAKIAlfX2xlNjQgYnVmZl9hZGRyOwogCV9fbGUxNiBsZW5ndGg7CiAJX19sZTE2IHJlc2VydmVkOwotCXVpbnQ4X3Qgc3RhdHVzOwotCXVpbnQ4X3QgZXJyb3JzOworCXU4IHN0YXR1czsKKwl1OCBlcnJvcnM7CiAJX19sZTE2IHNwZWNpYWw7CiB9OwogCkBAIC01NzAsOCArNTcwLDggQEAKIHN0cnVjdCBpeGdiX3R4X2Rlc2MgewogCV9fbGU2NCBidWZmX2FkZHI7CiAJX19sZTMyIGNtZF90eXBlX2xlbjsKLQl1aW50OF90IHN0YXR1czsKLQl1aW50OF90IHBvcHRzOworCXU4IHN0YXR1czsKKwl1OCBwb3B0czsKIAlfX2xlMTYgdmxhbjsKIH07CiAKQEAgLTU5NSwxNSArNTk1LDE1IEBACiAjZGVmaW5lIElYR0JfVFhfREVTQ19TUEVDSUFMX1BSSV9TSElGVCAgSVhHQl9SWF9ERVNDX1NQRUNJQUxfUFJJX1NISUZUCS8qIFByaW9yaXR5IGlzIGluIHVwcGVyIDMgb2YgMTYgKi8KIAogc3RydWN0IGl4Z2JfY29udGV4dF9kZXNjIHsKLQl1aW50OF90IGlwY3NzOwotCXVpbnQ4X3QgaXBjc287CisJdTggaXBjc3M7CisJdTggaXBjc287CiAJX19sZTE2IGlwY3NlOwotCXVpbnQ4X3QgdHVjc3M7Ci0JdWludDhfdCB0dWNzbzsKKwl1OCB0dWNzczsKKwl1OCB0dWNzbzsKIAlfX2xlMTYgdHVjc2U7CiAJX19sZTMyIGNtZF90eXBlX2xlbjsKLQl1aW50OF90IHN0YXR1czsKLQl1aW50OF90IGhkcl9sZW47CisJdTggc3RhdHVzOworCXU4IGhkcl9sZW47CiAJX19sZTE2IG1zczsKIH07CiAKQEAgLTYzNywzMyArNjM3LDMzIEBACiAKIC8qIFRoaXMgc3RydWN0dXJlIHRha2VzIGEgNjRrIGZsYXNoIGFuZCBtYXBzIGl0IGZvciBpZGVudGlmaWNhdGlvbiBjb21tYW5kcyAqLwogc3RydWN0IGl4Z2JfZmxhc2hfYnVmZmVyIHsKLQl1aW50OF90IG1hbnVmYWN0dXJlcl9pZDsKLQl1aW50OF90IGRldmljZV9pZDsKLQl1aW50OF90IGZpbGxlcjFbMHgyQUE4XTsKLQl1aW50OF90IGNtZDI7Ci0JdWludDhfdCBmaWxsZXIyWzB4MkFBQV07Ci0JdWludDhfdCBjbWQxOwotCXVpbnQ4X3QgZmlsbGVyM1sweEFBQUFdOworCXU4IG1hbnVmYWN0dXJlcl9pZDsKKwl1OCBkZXZpY2VfaWQ7CisJdTggZmlsbGVyMVsweDJBQThdOworCXU4IGNtZDI7CisJdTggZmlsbGVyMlsweDJBQUFdOworCXU4IGNtZDE7CisJdTggZmlsbGVyM1sweEFBQUFdOwogfTsKIAogLyoKICAqIFRoaXMgaXMgYSBsaXR0bGUtZW5kaWFuIHNwZWNpZmljIGNoZWNrLgogICovCiAjZGVmaW5lIElTX01VTFRJQ0FTVChBZGRyZXNzKSBcCi0gICAgKGJvb2xlYW5fdCkoKCh1aW50OF90ICopKEFkZHJlc3MpKVswXSAmICgodWludDhfdCkweDAxKSkKKyAgICAoYm9vbCkoKCh1OCAqKShBZGRyZXNzKSlbMF0gJiAoKHU4KTB4MDEpKQogCiAvKgogICogQ2hlY2sgd2hldGhlciBhbiBhZGRyZXNzIGlzIGJyb2FkY2FzdC4KICAqLwogI2RlZmluZSBJU19CUk9BRENBU1QoQWRkcmVzcykgICAgICAgICAgICAgICBcCi0gICAgKCgoKHVpbnQ4X3QgKikoQWRkcmVzcykpWzBdID09ICgodWludDhfdCkweGZmKSkgJiYgKCgodWludDhfdCAqKShBZGRyZXNzKSlbMV0gPT0gKCh1aW50OF90KTB4ZmYpKSkKKyAgICAoKCgodTggKikoQWRkcmVzcykpWzBdID09ICgodTgpMHhmZikpICYmICgoKHU4ICopKEFkZHJlc3MpKVsxXSA9PSAoKHU4KTB4ZmYpKSkKIAogLyogRmxvdyBjb250cm9sIHBhcmFtZXRlcnMgKi8KIHN0cnVjdCBpeGdiX2ZjIHsKLQl1aW50MzJfdCBoaWdoX3dhdGVyOwkvKiBGbG93IENvbnRyb2wgSGlnaC13YXRlciAgICAgICAgICAqLwotCXVpbnQzMl90IGxvd193YXRlcjsJLyogRmxvdyBDb250cm9sIExvdy13YXRlciAgICAgICAgICAgKi8KLQl1aW50MTZfdCBwYXVzZV90aW1lOwkvKiBGbG93IENvbnRyb2wgUGF1c2UgdGltZXIgICAgICAgICAqLwotCWJvb2xlYW5fdCBzZW5kX3hvbjsJLyogRmxvdyBjb250cm9sIHNlbmQgWE9OICAgICAgICAgICAgKi8KKwl1MzIgaGlnaF93YXRlcjsJLyogRmxvdyBDb250cm9sIEhpZ2gtd2F0ZXIgICAgICAgICAgKi8KKwl1MzIgbG93X3dhdGVyOwkvKiBGbG93IENvbnRyb2wgTG93LXdhdGVyICAgICAgICAgICAqLworCXUxNiBwYXVzZV90aW1lOwkvKiBGbG93IENvbnRyb2wgUGF1c2UgdGltZXIgICAgICAgICAqLworCWJvb2wgc2VuZF94b247CQkvKiBGbG93IGNvbnRyb2wgc2VuZCBYT04gICAgICAgICAgICAqLwogCWl4Z2JfZmNfdHlwZSB0eXBlOwkvKiBUeXBlIG9mIGZsb3cgY29udHJvbCAgICAgICAgICAgICAqLwogfTsKIApAQCAtNjg1LDEzOSArNjg1LDEzOSBAQAogfTsKIAogc3RydWN0IGl4Z2JfaHcgewotCXVpbnQ4X3QgX19pb21lbSAqaHdfYWRkcjsvKiBCYXNlIEFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlICAgICAqLworCXU4IF9faW9tZW0gKmh3X2FkZHI7LyogQmFzZSBBZGRyZXNzIG9mIHRoZSBoYXJkd2FyZSAgICAgKi8KIAl2b2lkICpiYWNrOwkJLyogUG9pbnRlciB0byBPUy1kZXBlbmRlbnQgc3RydWN0ICAgKi8KIAlzdHJ1Y3QgaXhnYl9mYyBmYzsJLyogRmxvdyBjb250cm9sIHBhcmFtZXRlcnMgICAgICAgICAgKi8KIAlzdHJ1Y3QgaXhnYl9idXMgYnVzOwkvKiBCdXMgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAqLwotCXVpbnQzMl90IHBoeV9pZDsJLyogUGh5IElkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgKi8KLQl1aW50MzJfdCBwaHlfYWRkcjsJLyogWEdNSUkgYWRkcmVzcyBvZiBQaHkgICAgICAgICAgICAgKi8KKwl1MzIgcGh5X2lkOwkvKiBQaHkgSWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAqLworCXUzMiBwaHlfYWRkcjsJLyogWEdNSUkgYWRkcmVzcyBvZiBQaHkgICAgICAgICAgICAgKi8KIAlpeGdiX21hY190eXBlIG1hY190eXBlOwkvKiBJZGVudGlmaWVyIGZvciBNQUMgY29udHJvbGxlciAgICAqLwogCWl4Z2JfcGh5X3R5cGUgcGh5X3R5cGU7CS8qIFRyYW5zY2VpdmVyL3BoeSBpZGVudGlmaWVyICAgICAgICovCi0JdWludDMyX3QgbWF4X2ZyYW1lX3NpemU7CS8qIE1heGltdW0gZnJhbWUgc2l6ZSBzdXBwb3J0ZWQgICAgICovCi0JdWludDMyX3QgbWNfZmlsdGVyX3R5cGU7CS8qIE11bHRpY2FzdCBmaWx0ZXIgaGFzaCB0eXBlICAgICAgICovCi0JdWludDMyX3QgbnVtX21jX2FkZHJzOwkvKiBOdW1iZXIgb2YgY3VycmVudCBNdWx0aWNhc3QgYWRkcnMgKi8KLQl1aW50OF90IGN1cnJfbWFjX2FkZHJbSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1NdOwkvKiBJbmRpdmlkdWFsIGFkZHJlc3MgY3VycmVudGx5IHByb2dyYW1tZWQgaW4gTUFDICovCi0JdWludDMyX3QgbnVtX3R4X2Rlc2M7CS8qIE51bWJlciBvZiBUcmFuc21pdCBkZXNjcmlwdG9ycyAgICovCi0JdWludDMyX3QgbnVtX3J4X2Rlc2M7CS8qIE51bWJlciBvZiBSZWNlaXZlIGRlc2NyaXB0b3JzICAgICovCi0JdWludDMyX3QgcnhfYnVmZmVyX3NpemU7CS8qIFNpemUgb2YgUmVjZWl2ZSBidWZmZXIgICAgICAgICAgICovCi0JYm9vbGVhbl90IGxpbmtfdXA7CS8qIFRSVUUgaWYgbGluayBpcyB2YWxpZCAgICAgICAgICAgICovCi0JYm9vbGVhbl90IGFkYXB0ZXJfc3RvcHBlZDsJLyogU3RhdGUgb2YgYWRhcHRlciAgICAgICAgICAgICAgICAgKi8KLQl1aW50MTZfdCBkZXZpY2VfaWQ7CS8qIGRldmljZSBpZCBmcm9tIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCi0JdWludDE2X3QgdmVuZG9yX2lkOwkvKiB2ZW5kb3IgaWQgZnJvbSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLwotCXVpbnQ4X3QgcmV2aXNpb25faWQ7CS8qIHJldmlzaW9uIGlkIGZyb20gUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KLQl1aW50MTZfdCBzdWJzeXN0ZW1fdmVuZG9yX2lkOwkvKiBzdWJzeXN0ZW0gdmVuZG9yIGlkIGZyb20gUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KLQl1aW50MTZfdCBzdWJzeXN0ZW1faWQ7CS8qIHN1YnN5c3RlbSBpZCBmcm9tIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCi0JdWludDMyX3QgYmFyMDsJCS8qIEJhc2UgQWRkcmVzcyByZWdpc3RlcnMgICAgICAgICAgICovCi0JdWludDMyX3QgYmFyMTsKLQl1aW50MzJfdCBiYXIyOwotCXVpbnQzMl90IGJhcjM7Ci0JdWludDE2X3QgcGNpX2NtZF93b3JkOwkvKiBQQ0kgY29tbWFuZCByZWdpc3RlciBpZCBmcm9tIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCisJdTMyIG1heF9mcmFtZV9zaXplOwkvKiBNYXhpbXVtIGZyYW1lIHNpemUgc3VwcG9ydGVkICAgICAqLworCXUzMiBtY19maWx0ZXJfdHlwZTsJLyogTXVsdGljYXN0IGZpbHRlciBoYXNoIHR5cGUgICAgICAgKi8KKwl1MzIgbnVtX21jX2FkZHJzOwkvKiBOdW1iZXIgb2YgY3VycmVudCBNdWx0aWNhc3QgYWRkcnMgKi8KKwl1OCBjdXJyX21hY19hZGRyW0lYR0JfRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsJLyogSW5kaXZpZHVhbCBhZGRyZXNzIGN1cnJlbnRseSBwcm9ncmFtbWVkIGluIE1BQyAqLworCXUzMiBudW1fdHhfZGVzYzsJLyogTnVtYmVyIG9mIFRyYW5zbWl0IGRlc2NyaXB0b3JzICAgKi8KKwl1MzIgbnVtX3J4X2Rlc2M7CS8qIE51bWJlciBvZiBSZWNlaXZlIGRlc2NyaXB0b3JzICAgICovCisJdTMyIHJ4X2J1ZmZlcl9zaXplOwkvKiBTaXplIG9mIFJlY2VpdmUgYnVmZmVyICAgICAgICAgICAqLworCWJvb2wgbGlua191cDsJCS8qIHRydWUgaWYgbGluayBpcyB2YWxpZCAgICAgICAgICAgICovCisJYm9vbCBhZGFwdGVyX3N0b3BwZWQ7CS8qIFN0YXRlIG9mIGFkYXB0ZXIgICAgICAgICAgICAgICAgICovCisJdTE2IGRldmljZV9pZDsJLyogZGV2aWNlIGlkIGZyb20gUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KKwl1MTYgdmVuZG9yX2lkOwkvKiB2ZW5kb3IgaWQgZnJvbSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLworCXU4IHJldmlzaW9uX2lkOwkvKiByZXZpc2lvbiBpZCBmcm9tIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCisJdTE2IHN1YnN5c3RlbV92ZW5kb3JfaWQ7CS8qIHN1YnN5c3RlbSB2ZW5kb3IgaWQgZnJvbSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLworCXUxNiBzdWJzeXN0ZW1faWQ7CS8qIHN1YnN5c3RlbSBpZCBmcm9tIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCisJdTMyIGJhcjA7CQkvKiBCYXNlIEFkZHJlc3MgcmVnaXN0ZXJzICAgICAgICAgICAqLworCXUzMiBiYXIxOworCXUzMiBiYXIyOworCXUzMiBiYXIzOworCXUxNiBwY2lfY21kX3dvcmQ7CS8qIFBDSSBjb21tYW5kIHJlZ2lzdGVyIGlkIGZyb20gUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KIAlfX2xlMTYgZWVwcm9tW0lYR0JfRUVQUk9NX1NJWkVdOwkvKiBFRVBST00gY29udGVudHMgcmVhZCBhdCBpbml0IHRpbWUgICovCiAJdW5zaWduZWQgbG9uZyBpb19iYXNlOwkvKiBPdXIgSS9PIG1hcHBlZCBsb2NhdGlvbiAqLwotCXVpbnQzMl90IGxhc3RMRkM7Ci0JdWludDMyX3QgbGFzdFJGQzsKKwl1MzIgbGFzdExGQzsKKwl1MzIgbGFzdFJGQzsKIH07CiAKIC8qIFN0YXRpc3RpY3MgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlICovCiBzdHJ1Y3QgaXhnYl9od19zdGF0cyB7Ci0JdWludDY0X3QgdHBybDsKLQl1aW50NjRfdCB0cHJoOwotCXVpbnQ2NF90IGdwcmNsOwotCXVpbnQ2NF90IGdwcmNoOwotCXVpbnQ2NF90IGJwcmNsOwotCXVpbnQ2NF90IGJwcmNoOwotCXVpbnQ2NF90IG1wcmNsOwotCXVpbnQ2NF90IG1wcmNoOwotCXVpbnQ2NF90IHVwcmNsOwotCXVpbnQ2NF90IHVwcmNoOwotCXVpbnQ2NF90IHZwcmNsOwotCXVpbnQ2NF90IHZwcmNoOwotCXVpbnQ2NF90IGpwcmNsOwotCXVpbnQ2NF90IGpwcmNoOwotCXVpbnQ2NF90IGdvcmNsOwotCXVpbnQ2NF90IGdvcmNoOwotCXVpbnQ2NF90IHRvcmw7Ci0JdWludDY0X3QgdG9yaDsKLQl1aW50NjRfdCBybmJjOwotCXVpbnQ2NF90IHJ1YzsKLQl1aW50NjRfdCByb2M7Ci0JdWludDY0X3QgcmxlYzsKLQl1aW50NjRfdCBjcmNlcnJzOwotCXVpbnQ2NF90IGljYmM7Ci0JdWludDY0X3QgZWNiYzsKLQl1aW50NjRfdCBtcGM7Ci0JdWludDY0X3QgdHB0bDsKLQl1aW50NjRfdCB0cHRoOwotCXVpbnQ2NF90IGdwdGNsOwotCXVpbnQ2NF90IGdwdGNoOwotCXVpbnQ2NF90IGJwdGNsOwotCXVpbnQ2NF90IGJwdGNoOwotCXVpbnQ2NF90IG1wdGNsOwotCXVpbnQ2NF90IG1wdGNoOwotCXVpbnQ2NF90IHVwdGNsOwotCXVpbnQ2NF90IHVwdGNoOwotCXVpbnQ2NF90IHZwdGNsOwotCXVpbnQ2NF90IHZwdGNoOwotCXVpbnQ2NF90IGpwdGNsOwotCXVpbnQ2NF90IGpwdGNoOwotCXVpbnQ2NF90IGdvdGNsOwotCXVpbnQ2NF90IGdvdGNoOwotCXVpbnQ2NF90IHRvdGw7Ci0JdWludDY0X3QgdG90aDsKLQl1aW50NjRfdCBkYzsKLQl1aW50NjRfdCBwbHQ2NGM7Ci0JdWludDY0X3QgdHNjdGM7Ci0JdWludDY0X3QgdHNjdGZjOwotCXVpbnQ2NF90IGliaWM7Ci0JdWludDY0X3QgcmZjOwotCXVpbnQ2NF90IGxmYzsKLQl1aW50NjRfdCBwZnJjOwotCXVpbnQ2NF90IHBmdGM7Ci0JdWludDY0X3QgbWNmcmM7Ci0JdWludDY0X3QgbWNmdGM7Ci0JdWludDY0X3QgeG9ucnhjOwotCXVpbnQ2NF90IHhvbnR4YzsKLQl1aW50NjRfdCB4b2ZmcnhjOwotCXVpbnQ2NF90IHhvZmZ0eGM7Ci0JdWludDY0X3QgcmpjOworCXU2NCB0cHJsOworCXU2NCB0cHJoOworCXU2NCBncHJjbDsKKwl1NjQgZ3ByY2g7CisJdTY0IGJwcmNsOworCXU2NCBicHJjaDsKKwl1NjQgbXByY2w7CisJdTY0IG1wcmNoOworCXU2NCB1cHJjbDsKKwl1NjQgdXByY2g7CisJdTY0IHZwcmNsOworCXU2NCB2cHJjaDsKKwl1NjQganByY2w7CisJdTY0IGpwcmNoOworCXU2NCBnb3JjbDsKKwl1NjQgZ29yY2g7CisJdTY0IHRvcmw7CisJdTY0IHRvcmg7CisJdTY0IHJuYmM7CisJdTY0IHJ1YzsKKwl1NjQgcm9jOworCXU2NCBybGVjOworCXU2NCBjcmNlcnJzOworCXU2NCBpY2JjOworCXU2NCBlY2JjOworCXU2NCBtcGM7CisJdTY0IHRwdGw7CisJdTY0IHRwdGg7CisJdTY0IGdwdGNsOworCXU2NCBncHRjaDsKKwl1NjQgYnB0Y2w7CisJdTY0IGJwdGNoOworCXU2NCBtcHRjbDsKKwl1NjQgbXB0Y2g7CisJdTY0IHVwdGNsOworCXU2NCB1cHRjaDsKKwl1NjQgdnB0Y2w7CisJdTY0IHZwdGNoOworCXU2NCBqcHRjbDsKKwl1NjQganB0Y2g7CisJdTY0IGdvdGNsOworCXU2NCBnb3RjaDsKKwl1NjQgdG90bDsKKwl1NjQgdG90aDsKKwl1NjQgZGM7CisJdTY0IHBsdDY0YzsKKwl1NjQgdHNjdGM7CisJdTY0IHRzY3RmYzsKKwl1NjQgaWJpYzsKKwl1NjQgcmZjOworCXU2NCBsZmM7CisJdTY0IHBmcmM7CisJdTY0IHBmdGM7CisJdTY0IG1jZnJjOworCXU2NCBtY2Z0YzsKKwl1NjQgeG9ucnhjOworCXU2NCB4b250eGM7CisJdTY0IHhvZmZyeGM7CisJdTY0IHhvZmZ0eGM7CisJdTY0IHJqYzsKIH07CiAKIC8qIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KLWV4dGVybiBib29sZWFuX3QgaXhnYl9hZGFwdGVyX3N0b3Aoc3RydWN0IGl4Z2JfaHcgKmh3KTsKLWV4dGVybiBib29sZWFuX3QgaXhnYl9pbml0X2h3KHN0cnVjdCBpeGdiX2h3ICpodyk7Ci1leHRlcm4gYm9vbGVhbl90IGl4Z2JfYWRhcHRlcl9zdGFydChzdHJ1Y3QgaXhnYl9odyAqaHcpOworZXh0ZXJuIGJvb2wgaXhnYl9hZGFwdGVyX3N0b3Aoc3RydWN0IGl4Z2JfaHcgKmh3KTsKK2V4dGVybiBib29sIGl4Z2JfaW5pdF9odyhzdHJ1Y3QgaXhnYl9odyAqaHcpOworZXh0ZXJuIGJvb2wgaXhnYl9hZGFwdGVyX3N0YXJ0KHN0cnVjdCBpeGdiX2h3ICpodyk7CiBleHRlcm4gdm9pZCBpeGdiX2NoZWNrX2Zvcl9saW5rKHN0cnVjdCBpeGdiX2h3ICpodyk7Ci1leHRlcm4gYm9vbGVhbl90IGl4Z2JfY2hlY2tfZm9yX2JhZF9saW5rKHN0cnVjdCBpeGdiX2h3ICpodyk7CitleHRlcm4gYm9vbCBpeGdiX2NoZWNrX2Zvcl9iYWRfbGluayhzdHJ1Y3QgaXhnYl9odyAqaHcpOwogCiBleHRlcm4gdm9pZCBpeGdiX3Jhcl9zZXQoc3RydWN0IGl4Z2JfaHcgKmh3LAotCQkJCXVpbnQ4X3QgKmFkZHIsCi0JCQkJdWludDMyX3QgaW5kZXgpOworCQkJCXU4ICphZGRyLAorCQkJCXUzMiBpbmRleCk7CiAKIAogLyogRmlsdGVycyAobXVsdGljYXN0LCB2bGFuLCByZWNlaXZlKSAqLwogZXh0ZXJuIHZvaWQgaXhnYl9tY19hZGRyX2xpc3RfdXBkYXRlKHN0cnVjdCBpeGdiX2h3ICpodywKLQkJCQkgICB1aW50OF90ICptY19hZGRyX2xpc3QsCi0JCQkJICAgdWludDMyX3QgbWNfYWRkcl9jb3VudCwKLQkJCQkgICB1aW50MzJfdCBwYWQpOworCQkJCSAgIHU4ICptY19hZGRyX2xpc3QsCisJCQkJICAgdTMyIG1jX2FkZHJfY291bnQsCisJCQkJICAgdTMyIHBhZCk7CiAKIC8qIFZmdGEgZnVuY3Rpb25zICovCiBleHRlcm4gdm9pZCBpeGdiX3dyaXRlX3ZmdGEoc3RydWN0IGl4Z2JfaHcgKmh3LAotCQkJCSB1aW50MzJfdCBvZmZzZXQsCi0JCQkJIHVpbnQzMl90IHZhbHVlKTsKKwkJCQkgdTMyIG9mZnNldCwKKwkJCQkgdTMyIHZhbHVlKTsKIAogLyogQWNjZXNzIGZ1bmN0aW9ucyB0byBlZXByb20gZGF0YSAqLwotdm9pZCBpeGdiX2dldF9lZV9tYWNfYWRkcihzdHJ1Y3QgaXhnYl9odyAqaHcsIHVpbnQ4X3QgKm1hY19hZGRyKTsKLXVpbnQzMl90IGl4Z2JfZ2V0X2VlX3BiYV9udW1iZXIoc3RydWN0IGl4Z2JfaHcgKmh3KTsKLXVpbnQxNl90IGl4Z2JfZ2V0X2VlX2RldmljZV9pZChzdHJ1Y3QgaXhnYl9odyAqaHcpOwotYm9vbGVhbl90IGl4Z2JfZ2V0X2VlcHJvbV9kYXRhKHN0cnVjdCBpeGdiX2h3ICpodyk7Ci1fX2xlMTYgaXhnYl9nZXRfZWVwcm9tX3dvcmQoc3RydWN0IGl4Z2JfaHcgKmh3LCB1aW50MTZfdCBpbmRleCk7Cit2b2lkIGl4Z2JfZ2V0X2VlX21hY19hZGRyKHN0cnVjdCBpeGdiX2h3ICpodywgdTggKm1hY19hZGRyKTsKK3UzMiBpeGdiX2dldF9lZV9wYmFfbnVtYmVyKHN0cnVjdCBpeGdiX2h3ICpodyk7Cit1MTYgaXhnYl9nZXRfZWVfZGV2aWNlX2lkKHN0cnVjdCBpeGdiX2h3ICpodyk7Citib29sIGl4Z2JfZ2V0X2VlcHJvbV9kYXRhKHN0cnVjdCBpeGdiX2h3ICpodyk7CitfX2xlMTYgaXhnYl9nZXRfZWVwcm9tX3dvcmQoc3RydWN0IGl4Z2JfaHcgKmh3LCB1MTYgaW5kZXgpOwogCiAvKiBFdmVyeXRoaW5nIGVsc2UgKi8KIHZvaWQgaXhnYl9sZWRfb24oc3RydWN0IGl4Z2JfaHcgKmh3KTsKIHZvaWQgaXhnYl9sZWRfb2ZmKHN0cnVjdCBpeGdiX2h3ICpodyk7CiB2b2lkIGl4Z2Jfd3JpdGVfcGNpX2NmZyhzdHJ1Y3QgaXhnYl9odyAqaHcsCi0JCQkgdWludDMyX3QgcmVnLAotCQkJIHVpbnQxNl90ICogdmFsdWUpOworCQkJIHUzMiByZWcsCisJCQkgdTE2ICogdmFsdWUpOwogCiAKICNlbmRpZiAvKiBfSVhHQl9IV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggMjY5ZTZmOC4uY2I4ZGFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC02Nyw3ICs2Nyw3IEBACiAvKiBMb2NhbCBGdW5jdGlvbiBQcm90b3R5cGVzICovCiAKIGludCBpeGdiX3VwKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBpeGdiX2Rvd24oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwgYm9vbGVhbl90IGtpbGxfd2F0Y2hkb2cpOwordm9pZCBpeGdiX2Rvd24oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBraWxsX3dhdGNoZG9nKTsKIHZvaWQgaXhnYl9yZXNldChzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBpeGdiX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBpeGdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTk0LDIyICs5NCwyMiBAQAogc3RhdGljIGludCBpeGdiX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIGludCBpeGdiX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOwotc3RhdGljIGJvb2xlYW5fdCBpeGdiX2NsZWFuX3R4X2lycShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBib29sIGl4Z2JfY2xlYW5fdHhfaXJxKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiAjaWZkZWYgQ09ORklHX0lYR0JfTkFQSQogc3RhdGljIGludCBpeGdiX2NsZWFuKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7Ci1zdGF0aWMgYm9vbGVhbl90IGl4Z2JfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKK3N0YXRpYyBib29sIGl4Z2JfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOwogI2Vsc2UKLXN0YXRpYyBib29sZWFuX3QgaXhnYl9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgYm9vbCBpeGdiX2NsZWFuX3J4X2lycShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKICNlbmRpZgogc3RhdGljIHZvaWQgaXhnYl9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIHZvaWQgaXhnYl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXhnYl90eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIGl4Z2Jfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSAgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCk7Ci1zdGF0aWMgdm9pZCBpeGdiX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MTZfdCB2aWQpOwotc3RhdGljIHZvaWQgaXhnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCk7CitzdGF0aWMgdm9pZCBpeGdiX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKTsKK3N0YXRpYyB2b2lkIGl4Z2Jfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKTsKIHN0YXRpYyB2b2lkIGl4Z2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTE5Nyw3ICsxOTcsNiBAQAogc3RhdGljIHZvaWQKIGl4Z2JfaXJxX2Rpc2FibGUoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKIAlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgfjApOwogCUlYR0JfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIAlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKQEAgLTIxMSwxNCArMjEwLDEyIEBACiBzdGF0aWMgdm9pZAogaXhnYl9pcnFfZW5hYmxlKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaWYoYXRvbWljX2RlY19hbmRfdGVzdCgmYWRhcHRlci0+aXJxX3NlbSkpIHsKLQkJdTMyIHZhbCA9IElYR0JfSU5UX1JYVDAgfCBJWEdCX0lOVF9SWERNVDAgfAotCQkJICBJWEdCX0lOVF9UWERXIHwgSVhHQl9JTlRfTFNDOwotCQlpZiAoYWRhcHRlci0+aHcuc3Vic3lzdGVtX3ZlbmRvcl9pZCA9PSBTVU5fU1VCVkVORE9SX0lEKQotCQkJdmFsIHw9IElYR0JfSU5UX0dQSTA7Ci0JCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1TLCB2YWwpOwotCQlJWEdCX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7Ci0JfQorCXUzMiB2YWwgPSBJWEdCX0lOVF9SWFQwIHwgSVhHQl9JTlRfUlhETVQwIHwKKwkJICBJWEdCX0lOVF9UWERXIHwgSVhHQl9JTlRfTFNDOworCWlmIChhZGFwdGVyLT5ody5zdWJzeXN0ZW1fdmVuZG9yX2lkID09IFNVTl9TVUJWRU5ET1JfSUQpCisJCXZhbCB8PSBJWEdCX0lOVF9HUEkwOworCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1TLCB2YWwpOworCUlYR0JfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIH0KIAogaW50CkBAIC0yNzQsNyArMjcxLDcgQEAKIAogCQlpZihody0+bWF4X2ZyYW1lX3NpemUgPgogCQkgICBJWEdCX01BWF9FTkVUX0ZSQU1FX1NJWkVfV0lUSE9VVF9GQ1MgKyBFTkVUX0ZDU19MRU5HVEgpIHsKLQkJCXVpbnQzMl90IGN0cmwwID0gSVhHQl9SRUFEX1JFRyhodywgQ1RSTDApOworCQkJdTMyIGN0cmwwID0gSVhHQl9SRUFEX1JFRyhodywgQ1RSTDApOwogCiAJCQlpZighKGN0cmwwICYgSVhHQl9DVFJMMF9KRkUpKSB7CiAJCQkJY3RybDAgfD0gSVhHQl9DVFJMMF9KRkU7CkBAIC0yODMsMjYgKzI4MCwzMCBAQAogCQl9CiAJfQogCi0JbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJY2xlYXJfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOwogCiAjaWZkZWYgQ09ORklHX0lYR0JfTkFQSQogCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKICNlbmRpZgogCWl4Z2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAorCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOworCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQKLWl4Z2JfZG93bihzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBib29sZWFuX3Qga2lsbF93YXRjaGRvZykKK2l4Z2JfZG93bihzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBib29sIGtpbGxfd2F0Y2hkb2cpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAorCS8qIHByZXZlbnQgdGhlIGludGVycnVwdCBoYW5kbGVyIGZyb20gcmVzdGFydGluZyB3YXRjaGRvZyAqLworCXNldF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CisKICNpZmRlZiBDT05GSUdfSVhHQl9OQVBJCiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQlhdG9taWNfc2V0KCZhZGFwdGVyLT5pcnFfc2VtLCAwKTsKICNlbmRpZgotCisJLyogd2FpdGluZyBmb3IgTkFQSSB0byBjb21wbGV0ZSBjYW4gcmUtZW5hYmxlIGludGVycnVwdHMgKi8KIAlpeGdiX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCWZyZWVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgbmV0ZGV2KTsKIApAQCAtNTg5LDkgKzU5MCw5IEBACiAJLyogZW5hYmxlIGZsb3cgY29udHJvbCB0byBiZSBwcm9ncmFtbWVkICovCiAJaHctPmZjLnNlbmRfeG9uID0gMTsKIAotCWF0b21pY19zZXQoJmFkYXB0ZXItPmlycV9zZW0sIDEpOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9sb2NrKTsKIAorCXNldF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1Niw3ICs2NTcsNyBAQAogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaXhnYl9kb3duKGFkYXB0ZXIsIFRSVUUpOworCWl4Z2JfZG93bihhZGFwdGVyLCB0cnVlKTsKIAogCWl4Z2JfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlcik7CiAJaXhnYl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKQEAgLTcxNyw5ICs3MTgsOSBAQAogc3RhdGljIHZvaWQKIGl4Z2JfY29uZmlndXJlX3R4KHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdWludDY0X3QgdGRiYSA9IGFkYXB0ZXItPnR4X3JpbmcuZG1hOwotCXVpbnQzMl90IHRkbGVuID0gYWRhcHRlci0+dHhfcmluZy5jb3VudCAqIHNpemVvZihzdHJ1Y3QgaXhnYl90eF9kZXNjKTsKLQl1aW50MzJfdCB0Y3RsOworCXU2NCB0ZGJhID0gYWRhcHRlci0+dHhfcmluZy5kbWE7CisJdTMyIHRkbGVuID0gYWRhcHRlci0+dHhfcmluZy5jb3VudCAqIHNpemVvZihzdHJ1Y3QgaXhnYl90eF9kZXNjKTsKKwl1MzIgdGN0bDsKIAlzdHJ1Y3QgaXhnYl9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAkvKiBTZXR1cCB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBUeCBEZXNjcmlwdG9yIFJpbmcgCkBAIC04MDUsNyArODA2LDcgQEAKIHN0YXRpYyB2b2lkCiBpeGdiX3NldHVwX3JjdGwoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MzJfdCByY3RsOworCXUzMiByY3RsOwogCiAJcmN0bCA9IElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMKTsKIApAQCAtODQwLDEyICs4NDEsMTIgQEAKIHN0YXRpYyB2b2lkCiBpeGdiX2NvbmZpZ3VyZV9yeChzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKQogewotCXVpbnQ2NF90IHJkYmEgPSBhZGFwdGVyLT5yeF9yaW5nLmRtYTsKLQl1aW50MzJfdCByZGxlbiA9IGFkYXB0ZXItPnJ4X3JpbmcuY291bnQgKiBzaXplb2Yoc3RydWN0IGl4Z2JfcnhfZGVzYyk7CisJdTY0IHJkYmEgPSBhZGFwdGVyLT5yeF9yaW5nLmRtYTsKKwl1MzIgcmRsZW4gPSBhZGFwdGVyLT5yeF9yaW5nLmNvdW50ICogc2l6ZW9mKHN0cnVjdCBpeGdiX3J4X2Rlc2MpOwogCXN0cnVjdCBpeGdiX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MzJfdCByY3RsOwotCXVpbnQzMl90IHJ4Y3N1bTsKLQl1aW50MzJfdCByeGRjdGw7CisJdTMyIHJjdGw7CisJdTMyIHJ4Y3N1bTsKKwl1MzIgcnhkY3RsOwogCiAJLyogbWFrZSBzdXJlIHJlY2VpdmVzIGFyZSBkaXNhYmxlZCB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCkBAIC04ODEsNyArODgyLDcgQEAKIAlJWEdCX1dSSVRFX1JFRyhodywgUlhEQ1RMLCByeGRjdGwpOwogCiAJLyogRW5hYmxlIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KLQlpZihhZGFwdGVyLT5yeF9jc3VtID09IFRSVUUpIHsKKwlpZiAoYWRhcHRlci0+cnhfY3N1bSkgewogCQlyeGNzdW0gPSBJWEdCX1JFQURfUkVHKGh3LCBSWENTVU0pOwogCQlyeGNzdW0gfD0gSVhHQl9SWENTVU1fVFVPRkw7CiAJCUlYR0JfV1JJVEVfUkVHKGh3LCBSWENTVU0sIHJ4Y3N1bSk7CkBAIC0xMDc4LDcgKzEwNzksNyBAQAogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKLQl1aW50MzJfdCByY3RsOworCXUzMiByY3RsOwogCWludCBpOwogCiAJLyogQ2hlY2sgZm9yIFByb21pc2N1b3VzIGFuZCBBbGwgTXVsdGljYXN0IG1vZGVzICovCkBAIC0xMDk4LDcgKzEwOTksNyBAQAogCQlyY3RsIHw9IElYR0JfUkNUTF9NUEU7CiAJCUlYR0JfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKIAl9IGVsc2UgewotCQl1aW50OF90IG10YVtJWEdCX01BWF9OVU1fTVVMVElDQVNUX0FERFJFU1NFUyAqCisJCXU4IG10YVtJWEdCX01BWF9OVU1fTVVMVElDQVNUX0FERFJFU1NFUyAqCiAJCQkgICAgSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1NdOwogCiAJCUlYR0JfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKQEAgLTExNjQsNyArMTE2NSw3IEBACiAJfQogCiAJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciBldmVyeSB3YXRjaGRvZyBwZXJpb2QgKi8KLQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IFRSVUU7CisJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOwogCiAJLyogZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIGZvcmNlIGNsZWFuIHVwIG9mIGFueSBzdHJhZ2dsZXJzICovCiAJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJQ1MsIElYR0JfSU5UX1RYRFcpOwpAQCAtMTE4Miw4ICsxMTgzLDggQEAKIHsKIAlzdHJ1Y3QgaXhnYl9jb250ZXh0X2Rlc2MgKmNvbnRleHRfZGVzYzsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1aW50OF90IGlwY3NzLCBpcGNzbywgdHVjc3MsIHR1Y3NvLCBoZHJfbGVuOwotCXVpbnQxNl90IGlwY3NlLCB0dWNzZSwgbXNzOworCXU4IGlwY3NzLCBpcGNzbywgdHVjc3MsIHR1Y3NvLCBoZHJfbGVuOworCXUxNiBpcGNzZSwgdHVjc2UsIG1zczsKIAlpbnQgZXJyOwogCiAJaWYgKGxpa2VseShza2JfaXNfZ3NvKHNrYikpKSB7CkBAIC0xMjQzLDEyICsxMjQ0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sZWFuX3QKK3N0YXRpYyBib29sCiBpeGdiX3R4X2NzdW0oc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXhnYl9jb250ZXh0X2Rlc2MgKmNvbnRleHRfZGVzYzsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1aW50OF90IGNzcywgY3NvOworCXU4IGNzcywgY3NvOwogCiAJaWYobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7CiAJCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87CkBAIC0xMjY0LDcgKzEyNjUsNyBAQAogCQljb250ZXh0X2Rlc2MtPnR1Y3NvID0gY3NvOwogCQljb250ZXh0X2Rlc2MtPnR1Y3NlID0gMDsKIAkJLyogemVybyBvdXQgYW55IHByZXZpb3VzbHkgZXhpc3RpbmcgZGF0YSBpbiBvbmUgaW5zdHJ1Y3Rpb24gKi8KLQkJKih1aW50MzJfdCAqKSYoY29udGV4dF9kZXNjLT5pcGNzcykgPSAwOworCQkqKHUzMiAqKSYoY29udGV4dF9kZXNjLT5pcGNzcykgPSAwOwogCQljb250ZXh0X2Rlc2MtPnN0YXR1cyA9IDA7CiAJCWNvbnRleHRfZGVzYy0+aGRyX2xlbiA9IDA7CiAJCWNvbnRleHRfZGVzYy0+bXNzID0gMDsKQEAgLTEyNzUsMTAgKzEyNzYsMTAgQEAKIAkJaWYoKytpID09IGFkYXB0ZXItPnR4X3JpbmcuY291bnQpIGkgPSAwOwogCQlhZGFwdGVyLT50eF9yaW5nLm5leHRfdG9fdXNlID0gaTsKIAotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIHRydWU7CiAJfQogCi0JcmV0dXJuIEZBTFNFOworCXJldHVybiBmYWxzZTsKIH0KIAogI2RlZmluZSBJWEdCX01BWF9UWERfUFdSCTE0CkBAIC0xMzcxLDkgKzEzNzIsOSBAQAogCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOwogCXN0cnVjdCBpeGdiX3R4X2Rlc2MgKnR4X2Rlc2MgPSBOVUxMOwogCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87Ci0JdWludDMyX3QgY21kX3R5cGVfbGVuID0gYWRhcHRlci0+dHhfY21kX3R5cGU7Ci0JdWludDhfdCBzdGF0dXMgPSAwOwotCXVpbnQ4X3QgcG9wdHMgPSAwOworCXUzMiBjbWRfdHlwZV9sZW4gPSBhZGFwdGVyLT50eF9jbWRfdHlwZTsKKwl1OCBzdGF0dXMgPSAwOworCXU4IHBvcHRzID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWlmKHR4X2ZsYWdzICYgSVhHQl9UWF9GTEFHU19UU08pIHsKQEAgLTE0NjQsMTQgKzE0NjUsMTggQEAKIAlpbnQgdmxhbl9pZCA9IDA7CiAJaW50IHRzbzsKIAorCWlmICh0ZXN0X2JpdChfX0lYR0JfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCiAJaWYoc2tiLT5sZW4gPD0gMCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKICNpZmRlZiBORVRJRl9GX0xMVFgKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKCFzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X2xvY2spKSB7CisJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpKSB7CiAJCS8qIENvbGxpc2lvbiAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwpAQCAtMTU0OCw3ICsxNTUzLDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpeGdiX2FkYXB0ZXIsIHR4X3RpbWVvdXRfdGFzayk7CiAKIAlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7Ci0JaXhnYl9kb3duKGFkYXB0ZXIsIFRSVUUpOworCWl4Z2JfZG93bihhZGFwdGVyLCB0cnVlKTsKIAlpeGdiX3VwKGFkYXB0ZXIpOwogfQogCkBAIC0xNTk1LDcgKzE2MDAsNyBAQAogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIAogCWlmICgob2xkX21heF9mcmFtZSAhPSBtYXhfZnJhbWUpICYmIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlpeGdiX2Rvd24oYWRhcHRlciwgVFJVRSk7CisJCWl4Z2JfZG93bihhZGFwdGVyLCB0cnVlKTsKIAkJaXhnYl91cChhZGFwdGVyKTsKIAl9CiAKQEAgLTE3NDUsNyArMTc1MCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRhdGE7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXVpbnQzMl90IGljciA9IElYR0JfUkVBRF9SRUcoaHcsIElDUik7CisJdTMyIGljciA9IElYR0JfUkVBRF9SRUcoaHcsIElDUik7CiAjaWZuZGVmIENPTkZJR19JWEdCX05BUEkKIAl1bnNpZ25lZCBpbnQgaTsKICNlbmRpZgpAQCAtMTc1Myw5ICsxNzU4LDkgQEAKIAlpZih1bmxpa2VseSghaWNyKSkKIAkJcmV0dXJuIElSUV9OT05FOyAgLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KIAotCWlmKHVubGlrZWx5KGljciAmIChJWEdCX0lOVF9SWFNFUSB8IElYR0JfSU5UX0xTQykpKSB7Ci0JCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOwotCX0KKwlpZiAodW5saWtlbHkoaWNyICYgKElYR0JfSU5UX1JYU0VRIHwgSVhHQl9JTlRfTFNDKSkpCisJCWlmICghdGVzdF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncykpCisJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKIAogI2lmZGVmIENPTkZJR19JWEdCX05BUEkKIAlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZXRkZXYsICZhZGFwdGVyLT5uYXBpKSkgewpAQCAtMTc2NCw3ICsxNzY5LDYgQEAKIAkJICBvZiB0aGUgcG9zdGVkIHdyaXRlIGlzIGludGVudGlvbmFsbHkgbGVmdCBvdXQuCiAJCSovCiAKLQkJYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7CiAJCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1DLCB+MCk7CiAJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSk7CiAJfQpAQCAtMTgxMiw3ICsxODE2LDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgYm9vbGVhbl90CitzdGF0aWMgYm9vbAogaXhnYl9jbGVhbl90eF9pcnEoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKQEAgLTE4MjAsNyArMTgyNCw3IEBACiAJc3RydWN0IGl4Z2JfdHhfZGVzYyAqdHhfZGVzYywgKmVvcF9kZXNjOwogCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJdW5zaWduZWQgaW50IGksIGVvcDsKLQlib29sZWFuX3QgY2xlYW5lZCA9IEZBTFNFOworCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKQEAgLTE4MjgsNyArMTgzMiw3IEBACiAKIAl3aGlsZShlb3BfZGVzYy0+c3RhdHVzICYgSVhHQl9UWF9ERVNDX1NUQVRVU19ERCkgewogCi0JCWZvcihjbGVhbmVkID0gRkFMU0U7ICFjbGVhbmVkOyApIHsKKwkJZm9yIChjbGVhbmVkID0gZmFsc2U7ICFjbGVhbmVkOyApIHsKIAkJCXR4X2Rlc2MgPSBJWEdCX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAKQEAgLTE4MzksNyArMTg0Myw3IEBACiAKIAkJCWl4Z2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgYnVmZmVyX2luZm8pOwogCi0JCQkqKHVpbnQzMl90ICopJih0eF9kZXNjLT5zdGF0dXMpID0gMDsKKwkJCSoodTMyICopJih0eF9kZXNjLT5zdGF0dXMpID0gMDsKIAogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CiAJCQlpZigrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOwpAQCAtMTg2Miw3ICsxODY2LDcgQEAKIAlpZihhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgewogCQkvKiBkZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KLQkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBGQUxTRTsKKwkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKIAkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCiAJCSAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopCiAJCSAgICYmICEoSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUykgJgpAQCAtMTkzMiw3ICsxOTM2LDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgYm9vbGVhbl90CitzdGF0aWMgYm9vbAogI2lmZGVmIENPTkZJR19JWEdCX05BUEkKIGl4Z2JfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbykKICNlbHNlCkBAIC0xOTQ0LDkgKzE5NDgsOSBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlzdHJ1Y3QgaXhnYl9yeF9kZXNjICpyeF9kZXNjLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbywgKm5leHRfYnVmZmVyLCAqbmV4dDJfYnVmZmVyOwotCXVpbnQzMl90IGxlbmd0aDsKKwl1MzIgbGVuZ3RoOwogCXVuc2lnbmVkIGludCBpLCBqOwotCWJvb2xlYW5fdCBjbGVhbmVkID0gRkFMU0U7CisJYm9vbCBjbGVhbmVkID0gZmFsc2U7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKIAlyeF9kZXNjID0gSVhHQl9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKQEAgLTE5ODAsNyArMTk4NCw3IEBACiAJCW5leHRfc2tiID0gbmV4dF9idWZmZXItPnNrYjsKIAkJcHJlZmV0Y2gobmV4dF9za2IpOwogCi0JCWNsZWFuZWQgPSBUUlVFOworCQljbGVhbmVkID0gdHJ1ZTsKIAogCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsCiAJCQkJIGJ1ZmZlcl9pbmZvLT5kbWEsCkBAIC0yMDg4LDE0ICsyMDkyLDEyIEBACiAJc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBpOwotCWludCBudW1fZ3JvdXBfdGFpbF93cml0ZXM7CiAJbG9uZyBjbGVhbmNvdW50OwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fdXNlOwogCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCWNsZWFuY291bnQgPSBJWEdCX0RFU0NfVU5VU0VEKHJ4X3JpbmcpOwogCi0JbnVtX2dyb3VwX3RhaWxfd3JpdGVzID0gSVhHQl9SWF9CVUZGRVJfV1JJVEU7CiAKIAkvKiBsZWF2ZSB0aHJlZSBkZXNjcmlwdG9ycyB1bnVzZWQgKi8KIAl3aGlsZSgtLWNsZWFuY291bnQgPiAyKSB7CkBAIC0yMTY0LDcgKzIxNjYsNyBAQAogaXhnYl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdWludDMyX3QgY3RybCwgcmN0bDsKKwl1MzIgY3RybCwgcmN0bDsKIAogCWl4Z2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAJYWRhcHRlci0+dmxncnAgPSBncnA7CkBAIC0yMTk1LDE0ICsyMTk3LDE2IEBACiAJCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CiAJfQogCi0JaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCS8qIGRvbid0IGVuYWJsZSBpbnRlcnJ1cHRzIHVubGVzcyB3ZSBhcmUgVVAgKi8KKwlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgdm9pZAotaXhnYl92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKQoraXhnYl92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1aW50MzJfdCB2ZnRhLCBpbmRleDsKKwl1MzIgdmZ0YSwgaW5kZXg7CiAKIAkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLwogCkBAIC0yMjEzLDE4ICsyMjE3LDIwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1peGdiX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKQoraXhnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdWludDMyX3QgdmZ0YSwgaW5kZXg7CisJdTMyIHZmdGEsIGluZGV4OwogCiAJaXhnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIAogCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkLCBOVUxMKTsKIAotCWl4Z2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkvKiBkb24ndCBlbmFibGUgaW50ZXJydXB0cyB1bmxlc3Mgd2UgYXJlIFVQICovCisJaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCWl4Z2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAotCS8qIHJlbW92ZSBWSUQgZnJvbSBmaWx0ZXIgdGFibGUqLworCS8qIHJlbW92ZSBWSUQgZnJvbSBmaWx0ZXIgdGFibGUgKi8KIAogCWluZGV4ID0gKHZpZCA+PiA1KSAmIDB4N0Y7CiAJdmZ0YSA9IElYR0JfUkVBRF9SRUdfQVJSQVkoJmFkYXB0ZXItPmh3LCBWRlRBLCBpbmRleCk7CkBAIC0yMjM4LDcgKzIyNDQsNyBAQAogCWl4Z2Jfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsKIAogCWlmKGFkYXB0ZXItPnZsZ3JwKSB7Ci0JCXVpbnQxNl90IHZpZDsKKwkJdTE2IHZpZDsKIAkJZm9yKHZpZCA9IDA7IHZpZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgewogCQkJaWYoIXZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkKSkKIAkJCQljb250aW51ZTsKQEAgLTIyNzksNyArMjI4NSw3IEBACiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlpZihuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCWl4Z2JfZG93bihhZGFwdGVyLCBUUlVFKTsKKwkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOwogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2Jfb3NkZXAuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCmluZGV4IDllMDRhNmIuLjRiZTFiMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCkBAIC0zOSwxMyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLXR5cGVkZWYgZW51bSB7Ci0jdW5kZWYgRkFMU0UKLQlGQUxTRSA9IDAsCi0jdW5kZWYgVFJVRQotCVRSVUUgPSAxCi19IGJvb2xlYW5fdDsKLQogI3VuZGVmIEFTU0VSVAogI2RlZmluZSBBU1NFUlQoeCkJaWYoISh4KSkgQlVHKCkKICNkZWZpbmUgTVNHT1VUKFMsIEEsIEIpCXByaW50ayhLRVJOX0RFQlVHIFMgIlxuIiwgQSwgQikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IGQwYmYyMDYuLmQ5ODExMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKICNpbmNsdWRlICJpeGdiZV9jb21tb24uaCIKIAorI2lmZGVmIENPTkZJR19EQ0EKKyNpbmNsdWRlIDxsaW51eC9kY2EuaD4KKyNlbmRpZgogCiAjZGVmaW5lIElYR0JFX0VSUihhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIml4Z2JlOiAiIGFyZ3MpCiAKQEAgLTEyMCw3ICsxMjMsNiBAQAogfTsKIAogc3RydWN0IGl4Z2JlX3JpbmcgewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyOwkvKiBiYWNrbGluayAqLwogCXZvaWQgKmRlc2M7CQkJLyogZGVzY3JpcHRvciByaW5nIG1lbW9yeSAqLwogCWRtYV9hZGRyX3QgZG1hOwkJCS8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJdW5zaWduZWQgaW50IHNpemU7CQkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KQEAgLTEyOCw2ICsxMzAsNyBAQAogCXVuc2lnbmVkIGludCBuZXh0X3RvX3VzZTsKIAl1bnNpZ25lZCBpbnQgbmV4dF90b19jbGVhbjsKIAorCWludCBxdWV1ZV9pbmRleDsgLyogbmVlZGVkIGZvciBtdWx0aXF1ZXVlIHF1ZXVlIG1hbmFnZW1lbnQgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKQEAgLTEzNiw4ICsxMzksMjEgQEAKIAl1MTYgaGVhZDsKIAl1MTYgdGFpbDsKIAorCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsKKwl1bnNpZ25lZCBpbnQgdG90YWxfcGFja2V0czsKIAorCXUxNiByZWdfaWR4OyAvKiBob2xkcyB0aGUgc3BlY2lhbCB2YWx1ZSB0aGF0IGdldHMgdGhlIGhhcmR3YXJlIHJlZ2lzdGVyCisJCSAgICAgICogb2Zmc2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJpbmcsIHdoaWNoIGlzIGRpZmZlcmVudAorCQkgICAgICAqIGZvciBEQ0UgYW5kIFJTUyBtb2RlcyAqLworCisjaWZkZWYgQ09ORklHX0RDQQorCS8qIGNwdSBmb3IgdHggcXVldWUgKi8KKwlpbnQgY3B1OworI2VuZGlmCiAJc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzIHN0YXRzOworCXU4IHZfaWR4OyAvKiBtYXBzIGRpcmVjdGx5IHRvIHRoZSBpbmRleCBmb3IgdGhpcyByaW5nIGluIHRoZSBoYXJkd2FyZQorCQkgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKKwkJICAgKiBhbmQgZnJpZW5kcyB0aGF0IHJlcHJlc2VudHMgdGhlIHZlY3RvciBmb3IgdGhpcyByaW5nICovCiAKIAl1MzIgZWltc192YWx1ZTsKIAl1MTYgaXRyX3JlZ2lzdGVyOwpAQCAtMTQ2LDYgKzE2MiwzMyBAQAogCXUxNiB3b3JrX2xpbWl0OyAgICAgICAgICAgICAgICAvKiBtYXggd29yayBwZXIgaW50ZXJydXB0ICovCiB9OwogCisjZGVmaW5lIFJJTkdfRl9WTURRIDEKKyNkZWZpbmUgUklOR19GX1JTUyAgMgorI2RlZmluZSBJWEdCRV9NQVhfUlNTX0lORElDRVMgIDE2CisjZGVmaW5lIElYR0JFX01BWF9WTURRX0lORElDRVMgMTYKK3N0cnVjdCBpeGdiZV9yaW5nX2ZlYXR1cmUgeworCWludCBpbmRpY2VzOworCWludCBtYXNrOworfTsKKworI2RlZmluZSBNQVhfUlhfUVVFVUVTIDY0CisjZGVmaW5lIE1BWF9UWF9RVUVVRVMgMzIKKworLyogTUFYX01TSVhfUV9WRUNUT1JTIG9mIHRoZXNlIGFyZSBhbGxvY2F0ZWQsCisgKiBidXQgd2Ugb25seSB1c2Ugb25lIHBlciBxdWV1ZS1zcGVjaWZpYyB2ZWN0b3IuCisgKi8KK3N0cnVjdCBpeGdiZV9xX3ZlY3RvciB7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJREVDTEFSRV9CSVRNQVAocnhyX2lkeCwgTUFYX1JYX1FVRVVFUyk7IC8qIFJ4IHJpbmcgaW5kaWNlcyAqLworCURFQ0xBUkVfQklUTUFQKHR4cl9pZHgsIE1BWF9UWF9RVUVVRVMpOyAvKiBUeCByaW5nIGluZGljZXMgKi8KKwl1OCByeHJfY291bnQ7ICAgICAvKiBSeCByaW5nIGNvdW50IGFzc2lnbmVkIHRvIHRoaXMgdmVjdG9yICovCisJdTggdHhyX2NvdW50OyAgICAgLyogVHggcmluZyBjb3VudCBhc3NpZ25lZCB0byB0aGlzIHZlY3RvciAqLworCXU4IHR4X2VpdHI7CisJdTggcnhfZWl0cjsKKwl1MzIgZWl0cjsKK307CisKIC8qIEhlbHBlciBtYWNyb3MgdG8gc3dpdGNoIGJldHdlZW4gaW50cy9zZWMgYW5kIHdoYXQgdGhlIHJlZ2lzdGVyIHVzZXMuCiAgKiBBbmQgeWVzLCBpdCdzIHRoZSBzYW1lIG1hdGggZ29pbmcgYm90aCB3YXlzLgogICovCkBAIC0xNjYsNiArMjA5LDE0IEBACiAKICNkZWZpbmUgSVhHQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUgICAgICAgIDE2MTI4CiAKKyNkZWZpbmUgT1RIRVJfVkVDVE9SIDEKKyNkZWZpbmUgTk9OX1FfVkVDVE9SUyAoT1RIRVJfVkVDVE9SKQorCisjZGVmaW5lIE1BWF9NU0lYX1FfVkVDVE9SUyAxNgorI2RlZmluZSBNSU5fTVNJWF9RX1ZFQ1RPUlMgMgorI2RlZmluZSBNQVhfTVNJWF9DT1VOVCAoTUFYX01TSVhfUV9WRUNUT1JTICsgTk9OX1FfVkVDVE9SUykKKyNkZWZpbmUgTUlOX01TSVhfQ09VTlQgKE1JTl9NU0lYX1FfVkVDVE9SUyArIE5PTl9RX1ZFQ1RPUlMpCisKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBpeGdiZV9hZGFwdGVyIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKQEAgLTE3MywxMCArMjI0LDE2IEBACiAJdTE2IGJkX251bWJlcjsKIAl1MTYgcnhfYnVmX2xlbjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKKwlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgcV92ZWN0b3JbTUFYX01TSVhfUV9WRUNUT1JTXTsKKwljaGFyIG5hbWVbTUFYX01TSVhfQ09VTlRdW0lGTkFNU0laICsgNV07CisKKwkvKiBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAqLworCXUzMiBpdHJfc2V0dGluZzsKKwl1MTYgZWl0cl9sb3c7CisJdTE2IGVpdHJfaGlnaDsKIAogCS8qIFRYICovCiAJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3Jpbmc7CS8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCi0Jc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJdTY0IHJlc3RhcnRfcXVldWU7CiAJdTY0IGxzY19pbnQ7CiAJdTY0IGh3X3Rzb19jdHh0OwpAQCAtMTkyLDIyICsyNDksMjcgQEAKIAl1NjQgbm9uX2VvcF9kZXNjczsKIAlpbnQgbnVtX3R4X3F1ZXVlczsKIAlpbnQgbnVtX3J4X3F1ZXVlczsKKwlpbnQgbnVtX21zaXhfdmVjdG9yczsKKwlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlIHJpbmdfZmVhdHVyZVszXTsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzOwogCiAJdTY0IHJ4X2hkcl9zcGxpdDsKIAl1MzIgYWxsb2NfcnhfcGFnZV9mYWlsZWQ7CiAJdTMyIGFsbG9jX3J4X2J1ZmZfZmFpbGVkOwogCisJLyogU29tZSBmZWF0dXJlcyBuZWVkIHRyaS1zdGF0ZSBjYXBhYmlsaXR5LAorCSAqIHRodXMgdGhlIGFkZGl0aW9uYWwgKl9DQVBBQkxFIGZsYWdzLgorCSAqLwogCXUzMiBmbGFnczsKLSNkZWZpbmUgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQgICAgICAgICAgICAgICh1MzIpKDEpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlhfQ1NVTV9FTkFCTEVEICAgICAgICAgICAgICAodTMyKSgxIDw8IDApCiAjZGVmaW5lIElYR0JFX0ZMQUdfTVNJX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEpCi0jZGVmaW5lIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVECQkJKHUzMikoMSA8PCAyKQotI2RlZmluZSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQJCSh1MzIpKDEgPDwgMykKLSNkZWZpbmUgSVhHQkVfRkxBR19JTl9ORVRQT0xMCQkJKHUzMikoMSA8PCA0KQotCi0JLyogSW50ZXJydXB0IFRocm90dGxlIFJhdGUgKi8KLQl1MzIgcnhfZWl0cjsKLQl1MzIgdHhfZWl0cjsKKyNkZWZpbmUgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMikKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMykKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9ORVRQT0xMICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTUlSX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNSkKKyNkZWZpbmUgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNikKKyNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNykKKyNkZWZpbmUgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgOCkKIAogCS8qIE9TIGRlZmluZWQgc3RydWN0cyAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CkBAIC0yMTgsNyArMjgwLDEwIEBACiAJc3RydWN0IGl4Z2JlX2h3IGh3OwogCXUxNiBtc2dfZW5hYmxlOwogCXN0cnVjdCBpeGdiZV9od19zdGF0cyBzdGF0czsKLQljaGFyIGxzY19uYW1lW0lGTkFNU0laICsgNV07CisKKwkvKiBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAqLworCXUzMiByeF9laXRyOworCXUzMiB0eF9laXRyOwogCiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIAl1NjQgdHhfYnVzeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwppbmRleCBhMTE5Y2JkLi40ZTQ2Mzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCkBAIC0yNDYsMTMgKzI0NiwyNiBAQAogCiBzdGF0aWMgaW50IGl4Z2JlX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCiB7Ci0KIAlpZiAoZGF0YSkgewogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAl9IGVsc2UgeworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwkJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQlpbnQgaTsKKyNlbmRpZgorCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZXRkZXYsIGkpOworI2VuZGlmCiAJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7CisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJbmV0aWZfc3RhcnRfc3VicXVldWUobmV0ZGV2LCBpKTsKKyNlbmRpZgorCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTg3MywxMyArODg2LDEzIEBACiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYgKGFkYXB0ZXItPnJ4X2VpdHIgPT0gMCkKLQkJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gMDsKKwlpZiAoYWRhcHRlci0+cnhfZWl0ciA8IElYR0JFX01JTl9JVFJfVVNFQ1MpCisJCWVjLT5yeF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPnJ4X2VpdHI7CiAJZWxzZQogCQllYy0+cnhfY29hbGVzY2VfdXNlY3MgPSAxMDAwMDAwIC8gYWRhcHRlci0+cnhfZWl0cjsKIAotCWlmIChhZGFwdGVyLT50eF9laXRyID09IDApCi0JCWVjLT50eF9jb2FsZXNjZV91c2VjcyA9IDA7CisJaWYgKGFkYXB0ZXItPnR4X2VpdHIgPCBJWEdCRV9NSU5fSVRSX1VTRUNTKQorCQllYy0+dHhfY29hbGVzY2VfdXNlY3MgPSBhZGFwdGVyLT50eF9laXRyOwogCWVsc2UKIAkJZWMtPnR4X2NvYWxlc2NlX3VzZWNzID0gMTAwMDAwMCAvIGFkYXB0ZXItPnR4X2VpdHI7CiAKQEAgLTg5MywyMiArOTA2LDI2IEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJaWYgKChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPiBJWEdCRV9NQVhfSVRSX1VTRUNTKSB8fAotCSAgICAoKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA+IDApICYmCisJICAgICgoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzICE9IDApICYmCisJICAgICAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzICE9IDEpICYmCisJICAgICAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzICE9IDMpICYmCiAJICAgICAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzIDwgSVhHQkVfTUlOX0lUUl9VU0VDUykpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoKGVjLT50eF9jb2FsZXNjZV91c2VjcyA+IElYR0JFX01BWF9JVFJfVVNFQ1MpIHx8Ci0JICAgICgoZWMtPnR4X2NvYWxlc2NlX3VzZWNzID4gMCkgJiYKKwkgICAgKChlYy0+dHhfY29hbGVzY2VfdXNlY3MgIT0gMCkgJiYKKwkgICAgIChlYy0+dHhfY29hbGVzY2VfdXNlY3MgIT0gMSkgJiYKKwkgICAgIChlYy0+dHhfY29hbGVzY2VfdXNlY3MgIT0gMykgJiYKIAkgICAgIChlYy0+dHhfY29hbGVzY2VfdXNlY3MgPCBJWEdCRV9NSU5fSVRSX1VTRUNTKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogY29udmVydCB0byByYXRlIG9mIGlycSdzIHBlciBzZWNvbmQgKi8KLQlpZiAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID09IDApCi0JCWFkYXB0ZXItPnJ4X2VpdHIgPSAwOworCWlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPCBJWEdCRV9NSU5fSVRSX1VTRUNTKQorCQlhZGFwdGVyLT5yeF9laXRyID0gZWMtPnJ4X2NvYWxlc2NlX3VzZWNzOwogCWVsc2UKIAkJYWRhcHRlci0+cnhfZWl0ciA9ICgxMDAwMDAwIC8gZWMtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKIAotCWlmIChlYy0+dHhfY29hbGVzY2VfdXNlY3MgPT0gMCkKLQkJYWRhcHRlci0+dHhfZWl0ciA9IDA7CisJaWYgKGVjLT50eF9jb2FsZXNjZV91c2VjcyA8IElYR0JFX01JTl9JVFJfVVNFQ1MpCisJCWFkYXB0ZXItPnR4X2VpdHIgPSBlYy0+cnhfY29hbGVzY2VfdXNlY3M7CiAJZWxzZQogCQlhZGFwdGVyLT50eF9laXRyID0gKDEwMDAwMDAgLyBlYy0+dHhfY29hbGVzY2VfdXNlY3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggZWFkNDllNS4uY2IzNzFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNDgsNyArNDgsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KIAkiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMS4xOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMy4xOC1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPQogCSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIjsKQEAgLTgwLDYgKzgwLDE2IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGl4Z2JlX3BjaV90YmwpOwogCisjaWZkZWYgQ09ORklHX0RDQQorc3RhdGljIGludCBpeGdiZV9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgIHZvaWQgKnApOworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkY2Ffbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpeGdiZV9ub3RpZnlfZGNhLAorCS5uZXh0ICAgICAgICAgID0gTlVMTCwKKwkucHJpb3JpdHkgICAgICA9IDAKK307CisjZW5kaWYKKwogTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24sIDxsaW51eC5uaWNzQGludGVsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMjIwLDcgKzIzMCw2IEBACiAJCQl0eF9yaW5nLT5zdGF0cy5ieXRlcyArPSB0eF9idWZmZXJfaW5mby0+bGVuZ3RoOwogCQkJaWYgKGNsZWFuZWQpIHsKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhfYnVmZmVyX2luZm8tPnNrYjsKLSNpZmRlZiBORVRJRl9GX1RTTwogCQkJCXVuc2lnbmVkIGludCBzZWdzLCBieXRlY291bnQ7CiAJCQkJc2VncyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPzogMTsKIAkJCQkvKiBtdWx0aXBseSBkYXRhIGNodW5rcyBieSBzaXplIG9mIGhlYWRlcnMgKi8KQEAgLTIyOCwxMCArMjM3LDYgQEAKIAkJCQkJICAgIHNrYi0+bGVuOwogCQkJCXRvdGFsX3R4X3BhY2tldHMgKz0gc2VnczsKIAkJCQl0b3RhbF90eF9ieXRlcyArPSBieXRlY291bnQ7Ci0jZWxzZQotCQkJCXRvdGFsX3R4X3BhY2tldHMrKzsKLQkJCQl0b3RhbF90eF9ieXRlcyArPSBza2ItPmxlbjsKLSNlbmRpZgogCQkJfQogCQkJaXhnYmVfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwKIAkJCQkJCQkgdHhfYnVmZmVyX2luZm8pOwpAQCAtMjYxLDI2ICsyNjYsMTI1IEBACiAJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgogCQkgKi8KIAkJc21wX21iKCk7CisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCQlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpICYmCisJCSAgICAhdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCQluZXRpZl93YWtlX3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCQkJYWRhcHRlci0+cmVzdGFydF9xdWV1ZSsrOworCQl9CisjZWxzZQogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICYmCiAJCSAgICAhdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CiAJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CiAJCQlhZGFwdGVyLT5yZXN0YXJ0X3F1ZXVlKys7CiAJCX0KKyNlbmRpZgogCX0KIAogCWlmIChhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykKIAkJaWYgKGl4Z2JlX2NoZWNrX3R4X2hhbmcoYWRhcHRlciwgdHhfcmluZywgZW9wLCBlb3BfZGVzYykpCisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKyNlbHNlCiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisjZW5kaWYKIAogCWlmICh0b3RhbF90eF9wYWNrZXRzID49IHR4X3JpbmctPndvcmtfbGltaXQpCiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJQ1MsIHR4X3JpbmctPmVpbXNfdmFsdWUpOwogCisJdHhfcmluZy0+dG90YWxfYnl0ZXMgKz0gdG90YWxfdHhfYnl0ZXM7CisJdHhfcmluZy0+dG90YWxfcGFja2V0cyArPSB0b3RhbF90eF9wYWNrZXRzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF90eF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF90eF9wYWNrZXRzOwogCWNsZWFuZWQgPSB0b3RhbF90eF9wYWNrZXRzID8gdHJ1ZSA6IGZhbHNlOwogCXJldHVybiBjbGVhbmVkOwogfQogCisjaWZkZWYgQ09ORklHX0RDQQorc3RhdGljIHZvaWQgaXhnYmVfdXBkYXRlX3J4X2RjYShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhyKQoreworCXUzMiByeGN0cmw7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlpbnQgcSA9IHJ4ciAtIGFkYXB0ZXItPnJ4X3Jpbmc7CisKKwlpZiAocnhyLT5jcHUgIT0gY3B1KSB7CisJCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSk7CisJCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLOworCQlyeGN0cmwgfD0gZGNhX2dldF90YWcoY3B1KTsKKwkJcnhjdHJsIHw9IElYR0JFX0RDQV9SWENUUkxfREVTQ19EQ0FfRU47CisJCXJ4Y3RybCB8PSBJWEdCRV9EQ0FfUlhDVFJMX0hFQURfRENBX0VOOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfUlhDVFJMKHEpLCByeGN0cmwpOworCQlyeHItPmNwdSA9IGNwdTsKKwl9CisJcHV0X2NwdSgpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZV91cGRhdGVfdHhfZGNhKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBpeGdiZV9yaW5nICp0eHIpCit7CisJdTMyIHR4Y3RybDsKKwlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCWludCBxID0gdHhyIC0gYWRhcHRlci0+dHhfcmluZzsKKworCWlmICh0eHItPmNwdSAhPSBjcHUpIHsKKwkJdHhjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpKTsKKwkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7CisJCXR4Y3RybCB8PSBkY2FfZ2V0X3RhZyhjcHUpOworCQl0eGN0cmwgfD0gSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSwgdHhjdHJsKTsKKwkJdHhyLT5jcHUgPSBjcHU7CisJfQorCXB1dF9jcHUoKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmVfc2V0dXBfZGNhKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNwdSA9IC0xOworCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNwdSA9IC0xOworCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19peGdiZV9ub3RpZnlfZGNhKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZXZlbnQgPSAqKHVuc2lnbmVkIGxvbmcgKilkYXRhOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRENBX1BST1ZJREVSX0FERDoKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19EQ0FfRU5BQkxFRDsKKwkJLyogQWx3YXlzIHVzZSBDQjIgbW9kZSwgZGlmZmVyZW5jZSBpcyBtYXNrZWQKKwkJICogaW4gdGhlIENCIGRyaXZlci4gKi8KKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX0NUUkwsIDIpOworCQlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoZGV2KSA9PSAwKSB7CisJCQlpeGdiZV9zZXR1cF9kY2EoYWRhcHRlcik7CisJCQlicmVhazsKKwkJfQorCQkvKiBGYWxsIFRocm91Z2ggc2luY2UgRENBIGlzIGRpc2FibGVkLiAqLworCWNhc2UgRENBX1BST1ZJREVSX1JFTU9WRToKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgeworCQkJZGNhX3JlbW92ZV9yZXF1ZXN0ZXIoZGV2KTsKKwkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0RDQV9FTkFCTEVEOworCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX0NUUkwsIDEpOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0RDQSAqLwogLyoqCiAgKiBpeGdiZV9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC01NjEsMTAgKzY2NSwxNSBAQAogCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9ieXRlcyArPSB0b3RhbF9yeF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMucnhfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOwogCisJcnhfcmluZy0+dG90YWxfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOworCXJ4X3JpbmctPnRvdGFsX2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9ieXRlcyArPSB0b3RhbF9yeF9ieXRlczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMucnhfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOworCiAJcmV0dXJuIGNsZWFuZWQ7CiB9CiAKLSNkZWZpbmUgSVhHQkVfTUFYX0lOVFIgMTAKK3N0YXRpYyBpbnQgaXhnYmVfY2xlYW5fcnhvbmx5KHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogLyoqCiAgKiBpeGdiZV9jb25maWd1cmVfbXNpeCAtIENvbmZpZ3VyZSBNU0ktWCBoYXJkd2FyZQogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC01NzQsMjggKzY4MywxOTUgQEAKICAqKi8KIHN0YXRpYyB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9tc2l4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBpLCB2ZWN0b3IgPSAwOworCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3I7CisJaW50IGksIGosIHFfdmVjdG9ycywgdl9pZHgsIHJfaWR4OworCXUzMiBtYXNrOwogCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCBJWEdCRV9JVkFSX1RYX1FVRVVFKGkpLAotCQkJICAgICAgIElYR0JFX01TSVhfVkVDVE9SKHZlY3RvcikpOwotCQl3cml0ZWwoRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGFkYXB0ZXItPnR4X2VpdHIpLAotCQkgICAgICAgYWRhcHRlci0+aHcuaHdfYWRkciArIGFkYXB0ZXItPnR4X3JpbmdbaV0uaXRyX3JlZ2lzdGVyKTsKLQkJdmVjdG9yKys7CisJcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisKKwkvKiBQb3B1bGF0ZSB0aGUgSVZBUiB0YWJsZSBhbmQgc2V0IHRoZSBJVFIgdmFsdWVzIHRvIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIuCisJICovCisJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CisJCXFfdmVjdG9yID0gJmFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKKwkJLyogWFhYIGZvcl9lYWNoX2JpdCguLi4pICovCisJCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCisJCQkJICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CisKKwkJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdLnJlZ19pZHg7CisJCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCBJWEdCRV9JVkFSX1JYX1FVRVVFKGopLCB2X2lkeCk7CisJCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCisJCQkJCSAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJCX0KKwkJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKKwkJCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisKKwkJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdLnJlZ19pZHg7CisJCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCBJWEdCRV9JVkFSX1RYX1FVRVVFKGopLCB2X2lkeCk7CisJCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsCisJCQkJCSAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJCX0KKworCQkvKiBpZiB0aGlzIGlzIGEgdHggb25seSB2ZWN0b3IgdXNlIGhhbGYgdGhlIGlycSAodHgpIHJhdGUgKi8KKwkJaWYgKHFfdmVjdG9yLT50eHJfY291bnQgJiYgIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPnR4X2VpdHI7CisJCWVsc2UKKwkJCS8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi8KKwkJCXFfdmVjdG9yLT5laXRyID0gYWRhcHRlci0+cnhfZWl0cjsKKworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwKKwkJCQlFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcocV92ZWN0b3ItPmVpdHIpKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoaSksCi0JCQkgICAgICAgSVhHQkVfTVNJWF9WRUNUT1IodmVjdG9yKSk7Ci0JCXdyaXRlbChFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoYWRhcHRlci0+cnhfZWl0ciksCi0JCSAgICAgICBhZGFwdGVyLT5ody5od19hZGRyICsgYWRhcHRlci0+cnhfcmluZ1tpXS5pdHJfcmVnaXN0ZXIpOwotCQl2ZWN0b3IrKzsKKwlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCBJWEdCRV9JVkFSX09USEVSX0NBVVNFU19JTkRFWCwgdl9pZHgpOworCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFIodl9pZHgpLCAxOTUwKTsKKworCS8qIHNldCB1cCB0byBhdXRvY2xlYXIgdGltZXIsIGxzYywgYW5kIHRoZSB2ZWN0b3JzICovCisJbWFzayA9IElYR0JFX0VJTVNfRU5BQkxFX01BU0s7CisJbWFzayAmPSB+SVhHQkVfRUlNU19PVEhFUjsKKwlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUFDLCBtYXNrKTsKK30KKworZW51bSBsYXRlbmN5X3JhbmdlIHsKKwlsb3dlc3RfbGF0ZW5jeSA9IDAsCisJbG93X2xhdGVuY3kgPSAxLAorCWJ1bGtfbGF0ZW5jeSA9IDIsCisJbGF0ZW5jeV9pbnZhbGlkID0gMjU1Cit9OworCisvKioKKyAqIGl4Z2JlX3VwZGF0ZV9pdHIgLSB1cGRhdGUgdGhlIGR5bmFtaWMgSVRSIHZhbHVlIGJhc2VkIG9uIHN0YXRpc3RpY3MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIKKyAqIEBlaXRyOiBlaXRyIHNldHRpbmcgKGludHMgcGVyIHNlYykgdG8gZ2l2ZSBsYXN0IHRpbWVzbGljZQorICogQGl0cl9zZXR0aW5nOiBjdXJyZW50IHRocm90dGxlIHJhdGUgaW4gaW50cy9zZWNvbmQKKyAqIEBwYWNrZXRzOiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgZHVyaW5nIHRoaXMgbWVhc3VyZW1lbnQgaW50ZXJ2YWwKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyBkdXJpbmcgdGhpcyBtZWFzdXJlbWVudCBpbnRlcnZhbAorICoKKyAqICAgICAgU3RvcmVzIGEgbmV3IElUUiB2YWx1ZSBiYXNlZCBvbiBwYWNrZXRzIGFuZCBieXRlCisgKiAgICAgIGNvdW50cyBkdXJpbmcgdGhlIGxhc3QgaW50ZXJydXB0LiAgVGhlIGFkdmFudGFnZSBvZiBwZXIgaW50ZXJydXB0CisgKiAgICAgIGNvbXB1dGF0aW9uIGlzIGZhc3RlciB1cGRhdGVzIGFuZCBtb3JlIGFjY3VyYXRlIElUUiBmb3IgdGhlIGN1cnJlbnQKKyAqICAgICAgdHJhZmZpYyBwYXR0ZXJuLiAgQ29uc3RhbnRzIGluIHRoaXMgZnVuY3Rpb24gd2VyZSBjb21wdXRlZAorICogICAgICBiYXNlZCBvbiB0aGVvcmV0aWNhbCBtYXhpbXVtIHdpcmUgc3BlZWQgYW5kIHRocmVzaG9sZHMgd2VyZSBzZXQgYmFzZWQKKyAqICAgICAgb24gdGVzdGluZyBkYXRhIGFzIHdlbGwgYXMgYXR0ZW1wdGluZyB0byBtaW5pbWl6ZSByZXNwb25zZSB0aW1lCisgKiAgICAgIHdoaWxlIGluY3JlYXNpbmcgYnVsayB0aHJvdWdocHV0LgorICogICAgICB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIG1vZHVsZQorICogICAgICBwYXJhbWV0ZXIgKHNlZSBpeGdiZV9wYXJhbS5jKQorICoqLworc3RhdGljIHU4IGl4Z2JlX3VwZGF0ZV9pdHIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICB1MzIgZWl0ciwgdTggaXRyX3NldHRpbmcsCisJCQkgICBpbnQgcGFja2V0cywgaW50IGJ5dGVzKQoreworCXVuc2lnbmVkIGludCByZXR2YWwgPSBpdHJfc2V0dGluZzsKKwl1MzIgdGltZXBhc3NlZF91czsKKwl1NjQgYnl0ZXNfcGVyaW50OworCisJaWYgKHBhY2tldHMgPT0gMCkKKwkJZ290byB1cGRhdGVfaXRyX2RvbmU7CisKKworCS8qIHNpbXBsZSB0aHJvdHRsZXJhdGUgbWFuYWdlbWVudAorCSAqICAgIDAtMjBNQi9zIGxvd2VzdCAoMTAwMDAwIGludHMvcykKKwkgKiAgIDIwLTEwME1CL3MgbG93ICAgKDIwMDAwIGludHMvcykKKwkgKiAgMTAwLTEyNDlNQi9zIGJ1bGsgKDgwMDAgaW50cy9zKQorCSAqLworCS8qIHdoYXQgd2FzIGxhc3QgaW50ZXJydXB0IHRpbWVzbGljZT8gKi8KKwl0aW1lcGFzc2VkX3VzID0gMTAwMDAwMC9laXRyOworCWJ5dGVzX3BlcmludCA9IGJ5dGVzIC8gdGltZXBhc3NlZF91czsgLyogYnl0ZXMvdXNlYyAqLworCisJc3dpdGNoIChpdHJfc2V0dGluZykgeworCWNhc2UgbG93ZXN0X2xhdGVuY3k6CisJCWlmIChieXRlc19wZXJpbnQgPiBhZGFwdGVyLT5laXRyX2xvdykKKwkJCXJldHZhbCA9IGxvd19sYXRlbmN5OworCQlicmVhazsKKwljYXNlIGxvd19sYXRlbmN5OgorCQlpZiAoYnl0ZXNfcGVyaW50ID4gYWRhcHRlci0+ZWl0cl9oaWdoKQorCQkJcmV0dmFsID0gYnVsa19sYXRlbmN5OworCQllbHNlIGlmIChieXRlc19wZXJpbnQgPD0gYWRhcHRlci0+ZWl0cl9sb3cpCisJCQlyZXR2YWwgPSBsb3dlc3RfbGF0ZW5jeTsKKwkJYnJlYWs7CisJY2FzZSBidWxrX2xhdGVuY3k6CisJCWlmIChieXRlc19wZXJpbnQgPD0gYWRhcHRlci0+ZWl0cl9oaWdoKQorCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CisJCWJyZWFrOwogCX0KIAotCXZlY3RvciA9IGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fcnhfcXVldWVzOwotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfT1RIRVJfQ0FVU0VTX0lOREVYLAotCQkgICAgICAgSVhHQkVfTVNJWF9WRUNUT1IodmVjdG9yKSk7Ci0JSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlUUih2ZWN0b3IpLCAxOTUwKTsKK3VwZGF0ZV9pdHJfZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyX21zaXgoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcikKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIG5ld19pdHI7CisJdTggY3VycmVudF9pdHIsIHJldF9pdHI7CisJaW50IGksIHJfaWR4LCB2X2lkeCA9ICgodm9pZCAqKXFfdmVjdG9yIC0gKHZvaWQgKikoYWRhcHRlci0+cV92ZWN0b3IpKSAvCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3FfdmVjdG9yKTsKKwlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywgKnR4X3Jpbmc7CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CisJCXR4X3JpbmcgPSAmKGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdKTsKKwkJcmV0X2l0ciA9IGl4Z2JlX3VwZGF0ZV9pdHIoYWRhcHRlciwgcV92ZWN0b3ItPmVpdHIsCisJCQkJCSAgIHFfdmVjdG9yLT50eF9laXRyLAorCQkJCQkgICB0eF9yaW5nLT50b3RhbF9wYWNrZXRzLAorCQkJCQkgICB0eF9yaW5nLT50b3RhbF9ieXRlcyk7CisJCS8qIGlmIHRoZSByZXN1bHQgZm9yIHRoaXMgcXVldWUgd291bGQgZGVjcmVhc2UgaW50ZXJydXB0CisJCSAqIHJhdGUgZm9yIHRoaXMgdmVjdG9yIHRoZW4gdXNlIHRoYXQgcmVzdWx0ICovCisJCXFfdmVjdG9yLT50eF9laXRyID0gKChxX3ZlY3Rvci0+dHhfZWl0ciA+IHJldF9pdHIpID8KKwkJCQkgICAgcV92ZWN0b3ItPnR4X2VpdHIgLSAxIDogcmV0X2l0cik7CisJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJCQkgICAgICByX2lkeCArIDEpOworCX0KKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyZXRfaXRyID0gaXhnYmVfdXBkYXRlX2l0cihhZGFwdGVyLCBxX3ZlY3Rvci0+ZWl0ciwKKwkJCQkJICAgcV92ZWN0b3ItPnJ4X2VpdHIsCisJCQkJCSAgIHJ4X3JpbmctPnRvdGFsX3BhY2tldHMsCisJCQkJCSAgIHJ4X3JpbmctPnRvdGFsX2J5dGVzKTsKKwkJLyogaWYgdGhlIHJlc3VsdCBmb3IgdGhpcyBxdWV1ZSB3b3VsZCBkZWNyZWFzZSBpbnRlcnJ1cHQKKwkJICogcmF0ZSBmb3IgdGhpcyB2ZWN0b3IgdGhlbiB1c2UgdGhhdCByZXN1bHQgKi8KKwkJcV92ZWN0b3ItPnJ4X2VpdHIgPSAoKHFfdmVjdG9yLT5yeF9laXRyID4gcmV0X2l0cikgPworCQkJCSAgICBxX3ZlY3Rvci0+cnhfZWl0ciAtIDEgOiByZXRfaXRyKTsKKwkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAorCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJfQorCisJY3VycmVudF9pdHIgPSBtYXgocV92ZWN0b3ItPnJ4X2VpdHIsIHFfdmVjdG9yLT50eF9laXRyKTsKKworCXN3aXRjaCAoY3VycmVudF9pdHIpIHsKKwkvKiBjb3VudHMgYW5kIHBhY2tldHMgaW4gdXBkYXRlX2l0ciBhcmUgZGVwZW5kZW50IG9uIHRoZXNlIG51bWJlcnMgKi8KKwljYXNlIGxvd2VzdF9sYXRlbmN5OgorCQluZXdfaXRyID0gMTAwMDAwOworCQlicmVhazsKKwljYXNlIGxvd19sYXRlbmN5OgorCQluZXdfaXRyID0gMjAwMDA7IC8qIGFrYSBod2l0ciA9IH4yMDAgKi8KKwkJYnJlYWs7CisJY2FzZSBidWxrX2xhdGVuY3k6CisJZGVmYXVsdDoKKwkJbmV3X2l0ciA9IDgwMDA7CisJCWJyZWFrOworCX0KKworCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CisJCXUzMiBpdHJfcmVnOworCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KKwkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOworCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CisJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7CisJCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLworCQlEUFJJTlRLKFRYX0VSUiwgREVCVUcsICJ3cml0aW5nIGVpdHIoJWQpOiAlMDhYXG4iLCB2X2lkeCwKKwkJCWl0cl9yZWcpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIodl9pZHgpLCBpdHJfcmVnIHwgKGl0cl9yZWcpPDwxNik7CisJfQorCisJcmV0dXJuOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYmVfbXNpeF9sc2MoaW50IGlycSwgdm9pZCAqZGF0YSkKQEAgLTYxOSwxNTMgKzg5NSwzMDIgQEAKIAogc3RhdGljIGlycXJldHVybl90IGl4Z2JlX21zaXhfY2xlYW5fdHgoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhyID0gZGF0YTsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHR4ci0+YWRhcHRlcjsKKwlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gZGF0YTsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgaXhnYmVfcmluZyAgICAgKnR4cjsKKwlpbnQgaSwgcl9pZHg7CiAKLQlpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgdHhyKTsKKwlpZiAoIXFfdmVjdG9yLT50eHJfY291bnQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKKwkJdHhyID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisjaWZkZWYgQ09ORklHX0RDQQorCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQorCQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCB0eHIpOworI2VuZGlmCisJCXR4ci0+dG90YWxfYnl0ZXMgPSAwOworCQl0eHItPnRvdGFsX3BhY2tldHMgPSAwOworCQlpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgdHhyKTsKKwkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAorCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCisvKioKKyAqIGl4Z2JlX21zaXhfY2xlYW5fcnggLSBzaW5nbGUgdW5zaGFyZWQgdmVjdG9yIHJ4IGNsZWFuIChhbGwgcXVldWVzKQorICogQGlycTogdW51c2VkCisgKiBAZGF0YTogcG9pbnRlciB0byBvdXIgcV92ZWN0b3Igc3RydWN0IGZvciB0aGlzIGludGVycnVwdCB2ZWN0b3IKKyAqKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBpeGdiZV9tc2l4X2NsZWFuX3J4KGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGl4Z2JlX3JpbmcgKnJ4ciA9IGRhdGE7Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeHItPmFkYXB0ZXI7CisJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGRhdGE7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJc3RydWN0IGl4Z2JlX3JpbmcgICpyeHI7CisJaW50IHJfaWR4OwogCi0JSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgcnhyLT5laW1zX3ZhbHVlKTsKLQluZXRpZl9yeF9zY2hlZHVsZShhZGFwdGVyLT5uZXRkZXYsICZhZGFwdGVyLT5uYXBpKTsKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlpZiAoIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCXJ4ciA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGlzIHZlY3RvciBvbmx5ICovCisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgcnhyLT52X2lkeCk7CisJcnhyLT50b3RhbF9ieXRlcyA9IDA7CisJcnhyLT50b3RhbF9wYWNrZXRzID0gMDsKKwluZXRpZl9yeF9zY2hlZHVsZShhZGFwdGVyLT5uZXRkZXYsICZxX3ZlY3Rvci0+bmFwaSk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBpeGdiZV9tc2l4X2NsZWFuX21hbnkoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlpeGdiZV9tc2l4X2NsZWFuX3J4KGlycSwgZGF0YSk7CisJaXhnYmVfbXNpeF9jbGVhbl90eChpcnEsIGRhdGEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIGl4Z2JlX2NsZWFuX3J4b25seSAtIG1zaXggKGFrYSBvbmUgc2hvdCkgcnggY2xlYW4gcm91dGluZQorICogQG5hcGk6IG5hcGkgc3RydWN0IHdpdGggb3VyIGRldmljZXMgaW5mbyBpbiBpdAorICogQGJ1ZGdldDogYW1vdW50IG9mIHdvcmsgZHJpdmVyIGlzIGFsbG93ZWQgdG8gZG8gdGhpcyBwYXNzLCBpbiBwYWNrZXRzCisgKgorICoqLwogc3RhdGljIGludCBpeGdiZV9jbGVhbl9yeG9ubHkoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKG5hcGksCi0JCQkJCXN0cnVjdCBpeGdiZV9hZGFwdGVyLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPQorCQkJICAgICAgIGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IsIG5hcGkpOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4cjsKIAlpbnQgd29ya19kb25lID0gMDsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhyID0gYWRhcHRlci0+cnhfcmluZzsKKwlsb25nIHJfaWR4OwogCi0JLyogS2VlcCBsaW5rIHN0YXRlIGluZm9ybWF0aW9uIHdpdGggb3JpZ2luYWwgbmV0ZGV2ICovCi0JaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCi0JCWdvdG8gcXVpdF9wb2xsaW5nOworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCXJ4ciA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworI2lmZGVmIENPTkZJR19EQ0EKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQorCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsIHJ4cik7CisjZW5kaWYKIAogCWl4Z2JlX2NsZWFuX3J4X2lycShhZGFwdGVyLCByeHIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQkvKiBJZiBubyBUeCBhbmQgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwotCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSB8fCAhbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci1xdWl0X3BvbGxpbmc6Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5ldGRldiwgbmFwaSk7CisJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQluZXRpZl9yeF9jb21wbGV0ZShhZGFwdGVyLT5uZXRkZXYsIG5hcGkpOworCQlpZiAoYWRhcHRlci0+cnhfZWl0ciA8IElYR0JFX01JTl9JVFJfVVNFQ1MpCisJCQlpeGdiZV9zZXRfaXRyX21zaXgocV92ZWN0b3IpOwogCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsCi0JCQkJCXJ4ci0+ZWltc192YWx1ZSk7CisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCByeHItPnZfaWR4KTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwogfQogCi0vKioKLSAqIGl4Z2JlX3NldHVwX21zaXggLSBJbml0aWFsaXplIE1TSS1YIGludGVycnVwdHMKLSAqCi0gKiBpeGdiZV9zZXR1cF9tc2l4IGFsbG9jYXRlcyBNU0ktWCB2ZWN0b3JzIGFuZCByZXF1ZXN0cwotICogaW50ZXJydXRwcyBmcm9tIHRoZSBrZXJuZWwuCi0gKiovCi1zdGF0aWMgaW50IGl4Z2JlX3NldHVwX21zaXgoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwX3ZlY3Rvcl90b19yeHEoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmEsIGludCB2X2lkeCwKKwkJCQkgICAgIGludCByX2lkeCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWludCBpLCBpbnRfdmVjdG9yID0gMCwgZXJyID0gMDsKLQlpbnQgbWF4X21zaXhfY291bnQ7CisJYS0+cV92ZWN0b3Jbdl9pZHhdLmFkYXB0ZXIgPSBhOworCXNldF9iaXQocl9pZHgsIGEtPnFfdmVjdG9yW3ZfaWR4XS5yeHJfaWR4KTsKKwlhLT5xX3ZlY3Rvclt2X2lkeF0ucnhyX2NvdW50Kys7CisJYS0+cnhfcmluZ1tyX2lkeF0udl9pZHggPSAxIDw8IHZfaWR4OworfQogCi0JLyogKzEgZm9yIHRoZSBMU0MgaW50ZXJydXB0ICovCi0JbWF4X21zaXhfY291bnQgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyArIDE7Ci0JYWRhcHRlci0+bXNpeF9lbnRyaWVzID0ga2NhbGxvYyhtYXhfbXNpeF9jb3VudCwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT5tc2l4X2VudHJpZXMpCi0JCXJldHVybiAtRU5PTUVNOworc3RhdGljIGlubGluZSB2b2lkIG1hcF92ZWN0b3JfdG9fdHhxKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphLCBpbnQgdl9pZHgsCisJCQkJICAgICBpbnQgcl9pZHgpCit7CisJYS0+cV92ZWN0b3Jbdl9pZHhdLmFkYXB0ZXIgPSBhOworCXNldF9iaXQocl9pZHgsIGEtPnFfdmVjdG9yW3ZfaWR4XS50eHJfaWR4KTsKKwlhLT5xX3ZlY3Rvclt2X2lkeF0udHhyX2NvdW50Kys7CisJYS0+dHhfcmluZ1tyX2lkeF0udl9pZHggPSAxIDw8IHZfaWR4OworfQogCi0JZm9yIChpID0gMDsgaSA8IG1heF9tc2l4X2NvdW50OyBpKyspCi0JCWFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CisvKioKKyAqIGl4Z2JlX21hcF9yaW5nc190b192ZWN0b3JzIC0gTWFwcyBkZXNjcmlwdG9yIHJpbmdzIHRvIHZlY3RvcnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKiBAdmVjdG9yczogYWxsb3R0ZWQgdmVjdG9yIGNvdW50IGZvciBkZXNjcmlwdG9yIHJpbmdzCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXBzIGRlc2NyaXB0b3IgcmluZ3MgdG8gdGhlIHF1ZXVlLXNwZWNpZmljIHZlY3RvcnMKKyAqIHdlIHdlcmUgYWxsb3R0ZWQgdGhyb3VnaCB0aGUgTVNJLVggZW5hYmxpbmcgY29kZS4gIElkZWFsbHksIHdlJ2QgaGF2ZQorICogb25lIHZlY3RvciBwZXIgcmluZy9xdWV1ZSwgYnV0IG9uIGEgY29uc3RyYWluZWQgdmVjdG9yIGJ1ZGdldCwgd2UKKyAqIGdyb3VwIHRoZSByaW5ncyBhcyAiZWZmaWNpZW50bHkiIGFzIHBvc3NpYmxlLiAgWW91IHdvdWxkIGFkZCBuZXcKKyAqIG1hcHBpbmcgY29uZmlndXJhdGlvbnMgaW4gaGVyZS4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmVfbWFwX3JpbmdzX3RvX3ZlY3RvcnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgaW50IHZlY3RvcnMpCit7CisJaW50IHZfc3RhcnQgPSAwOworCWludCByeHJfaWR4ID0gMCwgdHhyX2lkeCA9IDA7CisJaW50IHJ4cl9yZW1haW5pbmcgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWludCB0eHJfcmVtYWluaW5nID0gYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKKwlpbnQgaSwgajsKKwlpbnQgcnFwdiwgdHFwdjsKKwlpbnQgZXJyID0gMDsKIAotCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCi0JCQkgICAgICBtYXhfbXNpeF9jb3VudCk7Ci0JaWYgKGVycikKKwkvKiBObyBtYXBwaW5nIHJlcXVpcmVkIGlmIE1TSS1YIGlzIGRpc2FibGVkLiAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpKQogCQlnb3RvIG91dDsKIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJc3ByaW50ZihhZGFwdGVyLT50eF9yaW5nW2ldLm5hbWUsICIlcy10eCVkIiwgbmV0ZGV2LT5uYW1lLCBpKTsKLQkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ludF92ZWN0b3JdLnZlY3RvciwKLQkJCQkgICZpeGdiZV9tc2l4X2NsZWFuX3R4LAotCQkJCSAgMCwKLQkJCQkgIGFkYXB0ZXItPnR4X3JpbmdbaV0ubmFtZSwKLQkJCQkgICYoYWRhcHRlci0+dHhfcmluZ1tpXSkpOwotCQlpZiAoZXJyKSB7Ci0JCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCQkJInJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgTVNJWCBpbnRlcnJ1cHQgIgotCQkJCSJFcnJvcjogJWRcbiIsIGVycik7Ci0JCQlnb3RvIHJlbGVhc2VfaXJxczsKKwkvKgorCSAqIFRoZSBpZGVhbCBjb25maWd1cmF0aW9uLi4uCisJICogV2UgaGF2ZSBlbm91Z2ggdmVjdG9ycyB0byBtYXAgb25lIHBlciBxdWV1ZS4KKwkgKi8KKwlpZiAodmVjdG9ycyA9PSBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcykgeworCQlmb3IgKDsgcnhyX2lkeCA8IHJ4cl9yZW1haW5pbmc7IHZfc3RhcnQrKywgcnhyX2lkeCsrKQorCQkJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgdl9zdGFydCwgcnhyX2lkeCk7CisKKwkJZm9yICg7IHR4cl9pZHggPCB0eHJfcmVtYWluaW5nOyB2X3N0YXJ0KyssIHR4cl9pZHgrKykKKwkJCW1hcF92ZWN0b3JfdG9fdHhxKGFkYXB0ZXIsIHZfc3RhcnQsIHR4cl9pZHgpOworCisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggdmVjdG9ycyBmb3IgYSAxLXRvLTEKKwkgKiBtYXBwaW5nLCB3ZSdsbCBoYXZlIHRvIGdyb3VwIHRoZW0gc28gdGhlcmUgYXJlCisJICogbXVsdGlwbGUgcXVldWVzIHBlciB2ZWN0b3IuCisJICovCisJLyogUmUtYWRqdXN0aW5nICpxcHYgdGFrZXMgY2FyZSBvZiB0aGUgcmVtYWluZGVyLiAqLworCWZvciAoaSA9IHZfc3RhcnQ7IGkgPCB2ZWN0b3JzOyBpKyspIHsKKwkJcnFwdiA9IERJVl9ST1VORF9VUChyeHJfcmVtYWluaW5nLCB2ZWN0b3JzIC0gaSk7CisJCWZvciAoaiA9IDA7IGogPCBycXB2OyBqKyspIHsKKwkJCW1hcF92ZWN0b3JfdG9fcnhxKGFkYXB0ZXIsIGksIHJ4cl9pZHgpOworCQkJcnhyX2lkeCsrOworCQkJcnhyX3JlbWFpbmluZy0tOwogCQl9Ci0JCWFkYXB0ZXItPnR4X3JpbmdbaV0uZWltc192YWx1ZSA9Ci0JCSAgICAoMSA8PCBJWEdCRV9NU0lYX1ZFQ1RPUihpbnRfdmVjdG9yKSk7Ci0JCWFkYXB0ZXItPnR4X3JpbmdbaV0uaXRyX3JlZ2lzdGVyID0gSVhHQkVfRUlUUihpbnRfdmVjdG9yKTsKLQkJaW50X3ZlY3RvcisrOwogCX0KLQotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJaWYgKHN0cmxlbihuZXRkZXYtPm5hbWUpIDwgKElGTkFNU0laIC0gNSkpCi0JCQlzcHJpbnRmKGFkYXB0ZXItPnJ4X3JpbmdbaV0ubmFtZSwKLQkJCQkiJXMtcnglZCIsIG5ldGRldi0+bmFtZSwgaSk7Ci0JCWVsc2UKLQkJCW1lbWNweShhZGFwdGVyLT5yeF9yaW5nW2ldLm5hbWUsCi0JCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBJRk5BTVNJWik7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpbnRfdmVjdG9yXS52ZWN0b3IsCi0JCQkJICAmaXhnYmVfbXNpeF9jbGVhbl9yeCwgMCwKLQkJCQkgIGFkYXB0ZXItPnJ4X3JpbmdbaV0ubmFtZSwKLQkJCQkgICYoYWRhcHRlci0+cnhfcmluZ1tpXSkpOwotCQlpZiAoZXJyKSB7Ci0JCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCQkJInJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgTVNJWCBpbnRlcnJ1cHQgIgotCQkJCSJFcnJvcjogJWRcbiIsIGVycik7Ci0JCQlnb3RvIHJlbGVhc2VfaXJxczsKKwlmb3IgKGkgPSB2X3N0YXJ0OyBpIDwgdmVjdG9yczsgaSsrKSB7CisJCXRxcHYgPSBESVZfUk9VTkRfVVAodHhyX3JlbWFpbmluZywgdmVjdG9ycyAtIGkpOworCQlmb3IgKGogPSAwOyBqIDwgdHFwdjsgaisrKSB7CisJCQltYXBfdmVjdG9yX3RvX3R4cShhZGFwdGVyLCBpLCB0eHJfaWR4KTsKKwkJCXR4cl9pZHgrKzsKKwkJCXR4cl9yZW1haW5pbmctLTsKIAkJfQotCi0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0uZWltc192YWx1ZSA9Ci0JCSAgICAoMSA8PCBJWEdCRV9NU0lYX1ZFQ1RPUihpbnRfdmVjdG9yKSk7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0uaXRyX3JlZ2lzdGVyID0gSVhHQkVfRUlUUihpbnRfdmVjdG9yKTsKLQkJaW50X3ZlY3RvcisrOwogCX0KIAotCXNwcmludGYoYWRhcHRlci0+bHNjX25hbWUsICIlcy1sc2MiLCBuZXRkZXYtPm5hbWUpOwotCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpbnRfdmVjdG9yXS52ZWN0b3IsCi0JCQkgICZpeGdiZV9tc2l4X2xzYywgMCwgYWRhcHRlci0+bHNjX25hbWUsIG5ldGRldik7Ci0JaWYgKGVycikgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCQkicmVxdWVzdF9pcnEgZm9yIG1zaXhfbHNjIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCWdvdG8gcmVsZWFzZV9pcnFzOwotCX0KLQotCS8qIEZJWE1FOiBpbXBsZW1lbnQgbmV0aWZfbmFwaV9yZW1vdmUoKSBpbnN0ZWFkICovCi0JYWRhcHRlci0+bmFwaS5wb2xsID0gaXhnYmVfY2xlYW5fcnhvbmx5OwotCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEOwotCXJldHVybiAwOwotCi1yZWxlYXNlX2lycXM6Ci0JaW50X3ZlY3Rvci0tOwotCWZvciAoOyBpbnRfdmVjdG9yID49IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGludF92ZWN0b3ItLSkKLQkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ludF92ZWN0b3JdLnZlY3RvciwKLQkJCSAmKGFkYXB0ZXItPnJ4X3JpbmdbaW50X3ZlY3RvciAtCi0JCQkJCSAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzXSkpOwotCi0JZm9yICg7IGludF92ZWN0b3IgPj0gMDsgaW50X3ZlY3Rvci0tKQotCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaW50X3ZlY3Rvcl0udmVjdG9yLAotCQkJICYoYWRhcHRlci0+dHhfcmluZ1tpbnRfdmVjdG9yXSkpOwogb3V0OgotCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7Ci0JYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKLQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19NU0lYX0VOQUJMRUQ7CiAJcmV0dXJuIGVycjsKIH0KIAogLyoqCi0gKiBpeGdiZV9pbnRyIC0gSW50ZXJydXB0IEhhbmRsZXIKKyAqIGl4Z2JlX3JlcXVlc3RfbXNpeF9pcnFzIC0gSW5pdGlhbGl6ZSBNU0ktWCBpbnRlcnJ1cHRzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBpeGdiZV9yZXF1ZXN0X21zaXhfaXJxcyBhbGxvY2F0ZXMgTVNJLVggdmVjdG9ycyBhbmQgcmVxdWVzdHMKKyAqIGludGVycnVwdHMgZnJvbSB0aGUga2VybmVsLgorICoqLworc3RhdGljIGludCBpeGdiZV9yZXF1ZXN0X21zaXhfaXJxcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICopOworCWludCBpLCB2ZWN0b3IsIHFfdmVjdG9ycywgZXJyOworCisJLyogRGVjcmVtZW50IGZvciBPdGhlciBhbmQgVENQIFRpbWVyIHZlY3RvcnMgKi8KKwlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworCS8qIE1hcCB0aGUgVHgvUnggcmluZ3MgdG8gdGhlIHZlY3RvcnMgd2Ugd2VyZSBhbGxvdHRlZC4gKi8KKwllcnIgPSBpeGdiZV9tYXBfcmluZ3NfdG9fdmVjdG9ycyhhZGFwdGVyLCBxX3ZlY3RvcnMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisjZGVmaW5lIFNFVF9IQU5ETEVSKF92KSAoKCEoX3YpLT5yeHJfY291bnQpID8gJml4Z2JlX21zaXhfY2xlYW5fdHggOiBcCisJCQkgKCEoX3YpLT50eHJfY291bnQpID8gJml4Z2JlX21zaXhfY2xlYW5fcnggOiBcCisJCQkgJml4Z2JlX21zaXhfY2xlYW5fbWFueSkKKwlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IHFfdmVjdG9yczsgdmVjdG9yKyspIHsKKwkJaGFuZGxlciA9IFNFVF9IQU5ETEVSKCZhZGFwdGVyLT5xX3ZlY3Rvclt2ZWN0b3JdKTsKKwkJc3ByaW50ZihhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sICIlczp2JWQtJXMiLAorCQkJbmV0ZGV2LT5uYW1lLCB2ZWN0b3IsCisJCQkoaGFuZGxlciA9PSAmaXhnYmVfbXNpeF9jbGVhbl9yeCkgPyAiUngiIDoKKwkJCSAoKGhhbmRsZXIgPT0gJml4Z2JlX21zaXhfY2xlYW5fdHgpID8gIlR4IiA6ICJUeFJ4IikpOworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS52ZWN0b3IsCisJCQkJICBoYW5kbGVyLCAwLCBhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sCisJCQkJICAmKGFkYXB0ZXItPnFfdmVjdG9yW3ZlY3Rvcl0pKTsKKwkJaWYgKGVycikgeworCQkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkJCSJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIE1TSVggaW50ZXJydXB0ICIKKwkJCQkiRXJyb3I6ICVkXG4iLCBlcnIpOworCQkJZ290byBmcmVlX3F1ZXVlX2lycXM7CisJCX0KKwl9CisKKwlzcHJpbnRmKGFkYXB0ZXItPm5hbWVbdmVjdG9yXSwgIiVzOmxzYyIsIG5ldGRldi0+bmFtZSk7CisJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAorCQkJICAmaXhnYmVfbXNpeF9sc2MsIDAsIGFkYXB0ZXItPm5hbWVbdmVjdG9yXSwgbmV0ZGV2KTsKKwlpZiAoZXJyKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwKKwkJCSJyZXF1ZXN0X2lycSBmb3IgbXNpeF9sc2MgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBmcmVlX3F1ZXVlX2lycXM7CisJfQorCisJcmV0dXJuIDA7CisKK2ZyZWVfcXVldWVfaXJxczoKKwlmb3IgKGkgPSB2ZWN0b3IgLSAxOyBpID49IDA7IGktLSkKKwkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzWy0tdmVjdG9yXS52ZWN0b3IsCisJCQkgJihhZGFwdGVyLT5xX3ZlY3RvcltpXSkpOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX01TSVhfRU5BQkxFRDsKKwlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOworCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7CisJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yOworCXU4IGN1cnJlbnRfaXRyOworCXUzMiBuZXdfaXRyID0gcV92ZWN0b3ItPmVpdHI7CisJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1swXTsKKwlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nWzBdOworCisJcV92ZWN0b3ItPnR4X2VpdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIG5ld19pdHIsCisJCQkJCSAgICAgcV92ZWN0b3ItPnR4X2VpdHIsCisJCQkJCSAgICAgdHhfcmluZy0+dG90YWxfcGFja2V0cywKKwkJCQkJICAgICB0eF9yaW5nLT50b3RhbF9ieXRlcyk7CisJcV92ZWN0b3ItPnJ4X2VpdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIG5ld19pdHIsCisJCQkJCSAgICAgcV92ZWN0b3ItPnJ4X2VpdHIsCisJCQkJCSAgICAgcnhfcmluZy0+dG90YWxfcGFja2V0cywKKwkJCQkJICAgICByeF9yaW5nLT50b3RhbF9ieXRlcyk7CisKKwljdXJyZW50X2l0ciA9IG1heChxX3ZlY3Rvci0+cnhfZWl0ciwgcV92ZWN0b3ItPnR4X2VpdHIpOworCisJc3dpdGNoIChjdXJyZW50X2l0cikgeworCS8qIGNvdW50cyBhbmQgcGFja2V0cyBpbiB1cGRhdGVfaXRyIGFyZSBkZXBlbmRlbnQgb24gdGhlc2UgbnVtYmVycyAqLworCWNhc2UgbG93ZXN0X2xhdGVuY3k6CisJCW5ld19pdHIgPSAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgbG93X2xhdGVuY3k6CisJCW5ld19pdHIgPSAyMDAwMDsgLyogYWthIGh3aXRyID0gfjIwMCAqLworCQlicmVhazsKKwljYXNlIGJ1bGtfbGF0ZW5jeToKKwkJbmV3X2l0ciA9IDgwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CisJCXUzMiBpdHJfcmVnOworCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KKwkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOworCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CisJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7CisJCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoMCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZW5hYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKKworLyoqCisgKiBpeGdiZV9pbnRyIC0gbGVnYWN5IG1vZGUgSW50ZXJydXB0IEhhbmRsZXIKICAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKICAqIEBkYXRhOiBwb2ludGVyIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQogICogQHB0X3JlZ3M6IENQVSByZWdpc3RlcnMgc3RydWN0dXJlCkBAIC03NzcsOCArMTIwMiwxMCBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGVpY3I7CiAKLQllaWNyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VJQ1IpOwogCisJLyogZm9yIE5BUEksIHVzaW5nIEVJQU0gdG8gYXV0by1tYXNrIHR4L3J4IGludGVycnVwdCBiaXRzIG9uIHJlYWQKKwkgKiB0aGVyZWZvcmUgbm8gZXhwbGljdCBpbnRlcnJ1cHQgZGlzYWJsZSBpcyBuZWNlc3NhcnkgKi8KKwllaWNyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VJQ1IpOwogCWlmICghZWljcikKIAkJcmV0dXJuIElSUV9OT05FOwkvKiBOb3Qgb3VyIGludGVycnVwdCAqLwogCkBAIC03ODcsMTYgKzEyMTQsMzMgQEAKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKIAl9Ci0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSkpIHsKLQkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWdpc3RlciBmb3IgcG9sbC4gVGhlIGZsdXNoIG9mIHRoZQotCQkgKiBwb3N0ZWQgd3JpdGUgaXMgaW50ZW50aW9uYWxseSBsZWZ0IG91dC4gKi8KLQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgfjApOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5ldGRldiwgJmFkYXB0ZXItPm5hcGkpOworCisKKwlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZXRkZXYsICZhZGFwdGVyLT5xX3ZlY3RvclswXS5uYXBpKSkgeworCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX3BhY2tldHMgPSAwOworCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX2J5dGVzID0gMDsKKwkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9wYWNrZXRzID0gMDsKKwkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9ieXRlcyA9IDA7CisJCS8qIHdvdWxkIGRpc2FibGUgaW50ZXJydXB0cyBoZXJlIGJ1dCBFSUFNIGRpc2FibGVkIGl0ICovCisJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2LCAmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcmVzZXRfcV92ZWN0b3JzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3RvcnM7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gJmFkYXB0ZXItPnFfdmVjdG9yW2ldOworCQliaXRtYXBfemVybyhxX3ZlY3Rvci0+cnhyX2lkeCwgTUFYX1JYX1FVRVVFUyk7CisJCWJpdG1hcF96ZXJvKHFfdmVjdG9yLT50eHJfaWR4LCBNQVhfVFhfUVVFVUVTKTsKKwkJcV92ZWN0b3ItPnJ4cl9jb3VudCA9IDA7CisJCXFfdmVjdG9yLT50eHJfY291bnQgPSAwOworCX0KK30KKwogLyoqCiAgKiBpeGdiZV9yZXF1ZXN0X2lycSAtIGluaXRpYWxpemUgaW50ZXJydXB0cwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC04MDQsNDAgKzEyNDgsMjQgQEAKICAqIEF0dGVtcHRzIHRvIGNvbmZpZ3VyZSBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBiZXN0IGF2YWlsYWJsZQogICogY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSBhbmQga2VybmVsLgogICoqLwotc3RhdGljIGludCBpeGdiZV9yZXF1ZXN0X2lycShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyICpudW1fcnhfcXVldWVzKQorc3RhdGljIGludCBpeGdiZV9yZXF1ZXN0X2lycShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWludCBmbGFncywgZXJyOwotCWlycV9oYW5kbGVyX3QgaGFuZGxlciA9IGl4Z2JlX2ludHI7CisJaW50IGVycjsKIAotCWZsYWdzID0gSVJRRl9TSEFSRUQ7Ci0KLQllcnIgPSBpeGdiZV9zZXR1cF9tc2l4KGFkYXB0ZXIpOwotCWlmICghZXJyKQotCQlnb3RvIHJlcXVlc3RfZG9uZTsKLQotCS8qCi0JICogaWYgd2UgY2FuJ3QgZG8gTVNJLVgsIGZhbGwgdGhyb3VnaCBhbmQgdHJ5IE1TSQotCSAqIE5vIG5lZWQgdG8gcmVhbGxvY2F0ZSBtZW1vcnkgc2luY2Ugd2UncmUgZGVjcmVhc2luZyB0aGUgbnVtYmVyIG9mCi0JICogcXVldWVzLiBXZSBqdXN0IHdvbid0IHVzZSB0aGUgb3RoZXIgb25lcywgYWxzbyBpdCBpcyBmcmVlZCBjb3JyZWN0bHkKLQkgKiBvbiBpeGdiZV9yZW1vdmUuCi0JICovCi0JKm51bV9yeF9xdWV1ZXMgPSAxOwotCi0JLyogZG8gTVNJICovCi0JZXJyID0gcGNpX2VuYWJsZV9tc2koYWRhcHRlci0+cGRldik7Ci0JaWYgKCFlcnIpIHsKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19NU0lfRU5BQkxFRDsKLQkJZmxhZ3MgJj0gfklSUUZfU0hBUkVEOwotCQloYW5kbGVyID0gJml4Z2JlX2ludHI7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKKwkJZXJyID0gaXhnYmVfcmVxdWVzdF9tc2l4X2lycXMoYWRhcHRlcik7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJX0VOQUJMRUQpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmaXhnYmVfaW50ciwgMCwKKwkJCQkgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKKwl9IGVsc2UgeworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsICZpeGdiZV9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCQkgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKIAl9CiAKLQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIGhhbmRsZXIsIGZsYWdzLAotCQkJICBuZXRkZXYtPm5hbWUsIG5ldGRldik7CiAJaWYgKGVycikKIAkJRFBSSU5USyhQUk9CRSwgRVJSLCAicmVxdWVzdF9pcnEgZmFpbGVkLCBFcnJvciAlZFxuIiwgZXJyKTsKIAotcmVxdWVzdF9kb25lOgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg0NiwyOCArMTI3NCwyMiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewotCQlpbnQgaTsKKwkJaW50IGksIHFfdmVjdG9yczsKIAotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvciwKLQkJCQkgJihhZGFwdGVyLT50eF9yaW5nW2ldKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaSArCi0JCQkJCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzXS52ZWN0b3IsCi0JCQkJJihhZGFwdGVyLT5yeF9yaW5nW2ldKSk7Ci0JCWkgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKKwkJcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsKKworCQlpID0gcV92ZWN0b3JzIC0gMTsKIAkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvciwgbmV0ZGV2KTsKLQkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKLQkJa2ZyZWUoYWRhcHRlci0+bXNpeF9lbnRyaWVzKTsKLQkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKLQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEOwotCQlyZXR1cm47Ci0JfQogCi0JZnJlZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBuZXRkZXYpOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJX0VOQUJMRUQpIHsKLQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19NU0lfRU5BQkxFRDsKKwkJaS0tOworCQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKwkJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkJICYoYWRhcHRlci0+cV92ZWN0b3JbaV0pKTsKKwkJfQorCisJCWl4Z2JlX3Jlc2V0X3FfdmVjdG9ycyhhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlmcmVlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7CiAJfQogfQogCkBAIC04NzksNyArMTMwMSwxMyBAQAogewogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIH4wKTsKIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwotCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworCX0gZWxzZSB7CisJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCX0KIH0KIAogLyoqCkBAIC04ODgsMTIgKzEzMTYsOSBAQAogICoqLwogc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2lycV9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpCi0JCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJQUMsCi0JCQkJKElYR0JFX0VJTVNfRU5BQkxFX01BU0sgJgotCQkJCSB+KElYR0JFX0VJTVNfT1RIRVIgfCBJWEdCRV9FSU1TX0xTQykpKTsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLAotCQkJSVhHQkVfRUlNU19FTkFCTEVfTUFTSyk7CisJdTMyIG1hc2s7CisJbWFzayA9IElYR0JFX0VJTVNfRU5BQkxFX01BU0s7CisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgbWFzayk7CiAJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIH0KIApAQCAtOTAzLDIwICsxMzI4LDE4IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9jb25maWd1cmVfbXNpX2FuZF9sZWdhY3koc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaW50IGk7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCWlmIChhZGFwdGVyLT5yeF9laXRyKQotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoMCksCi0JCQkJRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGFkYXB0ZXItPnJ4X2VpdHIpKTsKLQotCS8qIGZvciByZS10cmlnZ2VyaW5nIHRoZSBpbnRlcnJ1cHQgaW4gbm9uLU5BUEkgbW9kZSAqLwotCWFkYXB0ZXItPnJ4X3JpbmdbMF0uZWltc192YWx1ZSA9ICgxIDw8IElYR0JFX01TSVhfVkVDVE9SKDApKTsKLQlhZGFwdGVyLT50eF9yaW5nWzBdLmVpbXNfdmFsdWUgPSAoMSA8PCBJWEdCRV9NU0lYX1ZFQ1RPUigwKSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKDApLAorCQkJRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGFkYXB0ZXItPnJ4X2VpdHIpKTsKIAogCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoMCksIDApOwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoaSksIGkpOworCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoMCksIDApOworCisJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgMCwgMCk7CisJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgMCwgMCk7CisKKwlEUFJJTlRLKEhXLCBJTkZPLCAiTGVnYWN5IGludGVycnVwdCBJVkFSIHNldHVwIGRvbmVcbiIpOwogfQogCiAvKioKQEAgLTkyOSwyMyArMTM1MiwyOSBAQAogewogCXU2NCB0ZGJhOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIGksIHRkbGVuOworCXUzMiBpLCBqLCB0ZGxlbiwgdHhjdHJsOwogCiAJLyogU2V0dXAgdGhlIEhXIFR4IEhlYWQgYW5kIFRhaWwgZGVzY3JpcHRvciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKIAkJdGRiYSA9IGFkYXB0ZXItPnR4X3JpbmdbaV0uZG1hOwogCQl0ZGxlbiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgKgotCQkgICAgc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREJBTChpKSwgKHRkYmEgJiBETUFfMzJCSVRfTUFTSykpOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REQkFIKGkpLCAodGRiYSA+PiAzMikpOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RETEVOKGkpLCB0ZGxlbik7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERIKGkpLCAwKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQoaSksIDApOwotCQlhZGFwdGVyLT50eF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9UREgoaSk7Ci0JCWFkYXB0ZXItPnR4X3JpbmdbaV0udGFpbCA9IElYR0JFX1REVChpKTsKKwkJCXNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERCQUwoaiksCisJCQkJKHRkYmEgJiBETUFfMzJCSVRfTUFTSykpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REQkFIKGopLCAodGRiYSA+PiAzMikpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RETEVOKGopLCB0ZGxlbik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERIKGopLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQoaiksIDApOworCQlhZGFwdGVyLT50eF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9UREgoaik7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0udGFpbCA9IElYR0JFX1REVChqKTsKKwkJLyogRGlzYWJsZSBUeCBIZWFkIFdyaXRlYmFjayBSTyBiaXQsIHNpbmNlIHRoaXMgaG9zZXMKKwkJICogYm9va2tlZXBpbmcgaWYgdGhpbmdzIGFyZW4ndCBkZWxpdmVyZWQgaW4gb3JkZXIuCisJCSAqLworCQl0eGN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChpKSk7CisJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKGkpLCB0eGN0cmwpOwogCX0KLQotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVElQRywgSVhHQkVfVElQR19GSUJFUl9ERUZBVUxUKTsKIH0KIAogI2RlZmluZSBQQUdFX1VTRV9DT1VOVChTKSAoKChTKSA+PiBQQUdFX1NISUZUKSArIFwKQEAgLTk2NCwxMyArMTM5MywxMiBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlpbnQgbWF4X2ZyYW1lID0gbmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOOworCWludCBpLCBqOwogCXUzMiByZGxlbiwgcnhjdHJsLCByeGNzdW07CiAJdTMyIHJhbmRvbVsxMF07Ci0JdTMyIHJldGEsIG1ycWM7Ci0JaW50IGk7CiAJdTMyIGZjdHJsLCBobHJlZzA7Ci0JdTMyIHNycmN0bDsKIAl1MzIgcGFnZXM7CisJdTMyIHJldGEgPSAwLCBtcnFjLCBzcnJjdGw7CiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgcGFja2V0IHNwbGl0IG1vZGUgb3Igbm90ICovCiAJaWYgKG5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKQpAQCAtOTkwLDYgKzE0MTgsNyBAQAogCiAJZmN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0ZDVFJMKTsKIAlmY3RybCB8PSBJWEdCRV9GQ1RSTF9CQU07CisJZmN0cmwgfD0gSVhHQkVfRkNUUkxfRFBGOyAvKiBkaXNjYXJkIHBhdXNlIGZyYW1lcyB3aGVuIEZDIGVuYWJsZWQgKi8KIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOwogCiAJaGxyZWcwID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0hMUkVHMCk7CkBAIC0xMDQxLDM3ICsxNDcwLDIzIEBACiAJCWFkYXB0ZXItPnJ4X3JpbmdbaV0udGFpbCA9IElYR0JFX1JEVChpKTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA+IDEpIHsKLQkJLyogUmFuZG9tIDQwYnl0ZXMgdXNlZCBhcyByYW5kb20ga2V5IGluIFJTUyBoYXNoIGZ1bmN0aW9uICovCi0JCWdldF9yYW5kb21fYnl0ZXMoJnJhbmRvbVswXSwgNDApOwotCi0JCXN3aXRjaCAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcykgewotCQljYXNlIDg6Ci0JCWNhc2UgNDoKLQkJCS8qIEJpdHMgWzM6MF0gaW4gZWFjaCBieXRlIHJlZmVycyB0aGUgUnggcXVldWUgbm8gKi8KLQkJCXJldGEgPSAweDAwMDEwMjAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXJldGEgPSAweDAwMDEwMDAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXRhID0gMHgwMDAwMDAwMDsKLQkJCWJyZWFrOwotCQl9Ci0KKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CiAJCS8qIEZpbGwgb3V0IHJlZGlyZWN0aW9uIHRhYmxlICovCi0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQlJWEdCRV9XUklURV9SRUdfQVJSQVkoaHcsIElYR0JFX1JFVEEoMCksIGksIHJldGEpOwotCQkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiA0KSB7Ci0JCQkJaSsrOwotCQkJCUlYR0JFX1dSSVRFX1JFR19BUlJBWShodywgSVhHQkVfUkVUQSgwKSwgaSwKLQkJCQkJCSAgICAgIDB4MDQwNTA2MDcpOwotCQkJfQorCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDEyODsgaSsrLCBqKyspIHsKKwkJCWlmIChqID09IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzKQorCQkJCWogPSAwOworCQkJLyogcmV0YSA9IDQtYnl0ZSBzbGlkaW5nIHdpbmRvdyBvZgorCQkJICogMHgwMC4uKGluZGljZXMtMSkoaW5kaWNlcy0xKTAwLi5ldGMuICovCisJCQlyZXRhID0gKHJldGEgPDwgOCkgfCAoaiAqIDB4MTEpOworCQkJaWYgKChpICYgMykgPT0gMykKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JFVEEoaSA+PiAyKSwgcmV0YSk7CiAJCX0KIAogCQkvKiBGaWxsIG91dCBoYXNoIGZ1bmN0aW9uIHNlZWRzICovCisJCS8qIFhYWCB1c2UgYSByYW5kb20gY29uc3RhbnQgaGVyZSB0byBnbHVlIGNlcnRhaW4gZmxvd3MgKi8KKwkJZ2V0X3JhbmRvbV9ieXRlcygmcmFuZG9tWzBdLCA0MCk7CiAJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQkJSVhHQkVfV1JJVEVfUkVHX0FSUkFZKGh3LCBJWEdCRV9SU1NSSygwKSwgaSwgcmFuZG9tW2ldKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlNTUksoaSksIHJhbmRvbVtpXSk7CiAKIAkJbXJxYyA9IElYR0JFX01SUUNfUlNTRU4KIAkJICAgIC8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi8KQEAgLTEwODUsMjYgKzE1MDAsMjMgQEAKIAkJICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9VRFAKIAkJICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9FWF9VRFA7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVJRQywgbXJxYyk7Ci0KLQkJLyogTXVsdGlxdWV1ZSBhbmQgcGFja2V0IGNoZWNrc3VtbWluZyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLwotCQlyeGNzdW0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDU1VNKTsKLQkJcnhjc3VtIHw9IElYR0JFX1JYQ1NVTV9QQ1NEOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1NVTSwgcnhjc3VtKTsKLQl9IGVsc2UgewotCQkvKiBFbmFibGUgUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkIGZvciBUQ1AgYW5kIFVEUCAqLwotCQlyeGNzdW0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDU1VNKTsKLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQpIHsKLQkJCS8qIEVuYWJsZSBJUHY0IHBheWxvYWQgY2hlY2tzdW0gZm9yIFVEUCBmcmFnbWVudHMKLQkJCSAqIE11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHBhY2tldC1zcGxpdC4gKi8KLQkJCXJ4Y3N1bSB8PSBJWEdCRV9SWENTVU1fSVBQQ1NFOwotCQl9IGVsc2UgewotCQkJLyogZG9uJ3QgbmVlZCB0byBjbGVhciBJUFBDU0UgYXMgaXQgZGVmYXVsdHMgdG8gMCAqLwotCQl9Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDU1VNLCByeGNzdW0pOwogCX0KLQkvKiBFbmFibGUgUmVjZWl2ZXMgKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1RSTCwgcnhjdHJsKTsKLQlyeGN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKKworCXJ4Y3N1bSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENTVU0pOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8fAorCSAgICBhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfQ1NVTV9FTkFCTEVEKSB7CisJCS8qIERpc2FibGUgaW5kaWNhdGluZyBjaGVja3N1bSBpbiBkZXNjcmlwdG9yLCBlbmFibGVzCisJCSAqIFJTUyBoYXNoICovCisJCXJ4Y3N1bSB8PSBJWEdCRV9SWENTVU1fUENTRDsKKwl9CisJaWYgKCEocnhjc3VtICYgSVhHQkVfUlhDU1VNX1BDU0QpKSB7CisJCS8qIEVuYWJsZSBJUHY0IHBheWxvYWQgY2hlY2tzdW0gZm9yIFVEUCBmcmFnbWVudHMKKwkJICogaWYgUENTRCBpcyBub3Qgc2V0ICovCisJCXJ4Y3N1bSB8PSBJWEdCRV9SWENTVU1fSVBQQ1NFOworCX0KKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDU1VNLCByeGNzdW0pOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCkBAIC0xMjI0LDYgKzE2MzYsNDIgQEAKIAogfQogCitzdGF0aWMgdm9pZCBpeGdiZV9uYXBpX2VuYWJsZV9hbGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfaWR4OworCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3I7CisJaW50IHFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJLyogbGVnYWN5IGFuZCBNU0kgb25seSB1c2Ugb25lIHZlY3RvciAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpKQorCQlxX3ZlY3RvcnMgPSAxOworCisJZm9yIChxX2lkeCA9IDA7IHFfaWR4IDwgcV92ZWN0b3JzOyBxX2lkeCsrKSB7CisJCXFfdmVjdG9yID0gJmFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XTsKKwkJaWYgKCFxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJY29udGludWU7CisJCW5hcGlfZW5hYmxlKCZxX3ZlY3Rvci0+bmFwaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZV9uYXBpX2Rpc2FibGVfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBxX2lkeDsKKwlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yOworCWludCBxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworCS8qIGxlZ2FjeSBhbmQgTVNJIG9ubHkgdXNlIG9uZSB2ZWN0b3IgKi8KKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSkKKwkJcV92ZWN0b3JzID0gMTsKKworCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IHFfdmVjdG9yczsgcV9pZHgrKykgeworCQlxX3ZlY3RvciA9ICZhZGFwdGVyLT5xX3ZlY3RvcltxX2lkeF07CisJCWlmICghcV92ZWN0b3ItPnJ4cl9jb3VudCkKKwkJCWNvbnRpbnVlOworCQluYXBpX2Rpc2FibGUoJnFfdmVjdG9yLT5uYXBpKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGl4Z2JlX2NvbmZpZ3VyZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwpAQCAtMTI0MywzMCArMTY5MSwzNSBAQAogc3RhdGljIGludCBpeGdiZV91cF9jb21wbGV0ZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWludCBpOwotCXUzMiBncGllID0gMDsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiB0eGRjdGwsIHJ4ZGN0bCwgbWhhZGQ7CisJaW50IGksIGogPSAwOwogCWludCBtYXhfZnJhbWUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CisJdTMyIHR4ZGN0bCwgcnhkY3RsLCBtaGFkZDsKKwl1MzIgZ3BpZTsKIAogCWl4Z2JlX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwogCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEIHwKLQkJCSAgICAgIElYR0JFX0ZMQUdfTVNJX0VOQUJMRUQpKSB7CisJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB8fAorCSAgICAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSV9FTkFCTEVEKSkgewogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewogCQkJZ3BpZSA9IChJWEdCRV9HUElFX01TSVhfTU9ERSB8IElYR0JFX0dQSUVfRUlBTUUgfAogCQkJCUlYR0JFX0dQSUVfUEJBX1NVUFBPUlQgfCBJWEdCRV9HUElFX09DRCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBNU0kgb25seSAqLwotCQkJZ3BpZSA9IChJWEdCRV9HUElFX0VJQU1FIHwKLQkJCQlJWEdCRV9HUElFX1BCQV9TVVBQT1JUKTsKKwkJCWdwaWUgPSAwOwogCQl9Ci0JCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0dQSUUsIGdwaWUpOwotCQlncGllID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9HUElFKTsKKwkJLyogWFhYOiB0byBpbnRlcnJ1cHQgaW1tZWRpYXRlbHkgZm9yIEVJQ1Mgd3JpdGVzLCBlbmFibGUgdGhpcyAqLworCQkvKiBncGllIHw9IElYR0JFX0dQSUVfRUlNRU47ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CisJfQorCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkpIHsKKwkJLyogbGVnYWN5IGludGVycnVwdHMsIHVzZSBFSUFNIHRvIGF1dG8tbWFzayB3aGVuIHJlYWRpbmcgRUlDUiwKKwkJICogc3BlY2lmaWNhbGx5IG9ubHkgYXV0byBtYXNrIHR4IGFuZCByeCBpbnRlcnJ1cHRzICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlBTSwgSVhHQkVfRUlDU19SVFhfUVVFVUUpOwogCX0KIAogCW1oYWRkID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01IQUREKTsKLQogCWlmIChtYXhfZnJhbWUgIT0gKG1oYWRkID4+IElYR0JFX01IQUREX01GU19TSElGVCkpIHsKIAkJbWhhZGQgJj0gfklYR0JFX01IQUREX01GU19NQVNLOwogCQltaGFkZCB8PSBtYXhfZnJhbWUgPDwgSVhHQkVfTUhBRERfTUZTX1NISUZUOwpAQCAtMTI3NSwxNSArMTcyOCwyMSBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9UWERDVEwoaSkpOworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJdHhkY3RsIHw9IElYR0JFX1RYRENUTF9FTkFCTEU7Ci0JCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1RYRENUTChpKSwgdHhkY3RsKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwoaiksIHR4ZGN0bCk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChpKSk7CisJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwoaikpOworCQkvKiBlbmFibGUgUFRIUkVTSD0zMiBkZXNjcmlwdG9ycyAoaGFsZiB0aGUgaW50ZXJuYWwgY2FjaGUpCisJCSAqIGFuZCBIVEhSRVNIPTAgZGVzY3JpcHRvcnMgKHRvIG1pbmltaXplIGxhdGVuY3kgb24gZmV0Y2gpLAorCQkgKiB0aGlzIGFsc28gcmVtb3ZlcyBhIHBlc2t5IHJ4X25vX2J1ZmZlcl9jb3VudCBpbmNyZW1lbnQgKi8KKwkJcnhkY3RsIHw9IDB4MDAyMDsKIAkJcnhkY3RsIHw9IElYR0JFX1JYRENUTF9FTkFCTEU7Ci0JCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChpKSwgcnhkY3RsKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwoaiksIHJ4ZGN0bCk7CiAJfQogCS8qIGVuYWJsZSBhbGwgcmVjZWl2ZXMgKi8KIAlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKQEAgLTEyOTYsNyArMTc1NSwxMSBAQAogCQlpeGdiZV9jb25maWd1cmVfbXNpX2FuZF9sZWdhY3koYWRhcHRlcik7CiAKIAljbGVhcl9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwotCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKKwlpeGdiZV9uYXBpX2VuYWJsZV9hbGwoYWRhcHRlcik7CisKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLCBtYXkgYXV0byBtYXNrICovCisJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VJQ1IpOworCiAJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAogCS8qIGJyaW5nIHRoZSBsaW5rIHVwIGluIHRoZSB3YXRjaGRvZywgdGhpcyBjb3VsZCByYWNlIHdpdGggb3VyIGZpcnN0CkBAIC0xMzM4LDcgKzE4MDEsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXUzMiBlcnIsIG51bV9yeF9xdWV1ZXMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCXUzMiBlcnI7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CkBAIC0xMzU0LDcgKzE4MTcsNyBAQAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJZXJyID0gaXhnYmVfcmVxdWVzdF9pcnEoYWRhcHRlciwgJm51bV9yeF9xdWV1ZXMpOworCQllcnIgPSBpeGdiZV9yZXF1ZXN0X2lycShhZGFwdGVyKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTQ1NCwxOCArMTkxNyw2IEBACiB9CiAKIC8qKgotICogaXhnYmVfY2xlYW5fYWxsX3R4X3JpbmdzIC0gRnJlZSBUeCBCdWZmZXJzIGZvciBhbGwgcXVldWVzCi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2NsZWFuX3R4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwotfQotCi0vKioKICAqIGl4Z2JlX2NsZWFuX2FsbF9yeF9yaW5ncyAtIEZyZWUgUnggQnVmZmVycyBmb3IgYWxsIHF1ZXVlcwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCkBAIC0xNDc3LDYgKzE5MjgsMTggQEAKIAkJaXhnYmVfY2xlYW5fcnhfcmluZyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKKy8qKgorICogaXhnYmVfY2xlYW5fYWxsX3R4X3JpbmdzIC0gRnJlZSBUeCBCdWZmZXJzIGZvciBhbGwgcXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCWl4Z2JlX2NsZWFuX3R4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworfQorCiB2b2lkIGl4Z2JlX2Rvd24oc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKQEAgLTE0OTgsMTAgKzE5NjEsOSBAQAogCUlYR0JFX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CiAJbXNsZWVwKDEwKTsKIAotCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0KIAlpeGdiZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfZGlzYWJsZV9hbGwoYWRhcHRlcik7CiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CkBAIC0xNTUyLDI3ICsyMDE0LDM3IEBACiB9CiAKIC8qKgotICogaXhnYmVfY2xlYW4gLSBOQVBJIFJ4IHBvbGxpbmcgY2FsbGJhY2sKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogaXhnYmVfcG9sbCAtIE5BUEkgUnggcG9sbGluZyBjYWxsYmFjaworICogQG5hcGk6IHN0cnVjdHVyZSBmb3IgcmVwcmVzZW50aW5nIHRoaXMgcG9sbGluZyBkZXZpY2UKKyAqIEBidWRnZXQ6IGhvdyBtYW55IHBhY2tldHMgZHJpdmVyIGlzIGFsbG93ZWQgdG8gY2xlYW4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGxlZ2FjeSBhbmQgTVNJLCBOQVBJIG1vZGUKICAqKi8KLXN0YXRpYyBpbnQgaXhnYmVfY2xlYW4oc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQorc3RhdGljIGludCBpeGdiZV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihuYXBpLAotCQkJCQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciwgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gY29udGFpbmVyX29mKG5hcGksCisJCQkJCSAgc3RydWN0IGl4Z2JlX3FfdmVjdG9yLCBuYXBpKTsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwogCWludCB0eF9jbGVhbmVkID0gMCwgd29ya19kb25lID0gMDsKIAotCS8qIEluIG5vbi1NU0lYIGNhc2UsIHRoZXJlIGlzIG5vIG11bHRpLVR4L1J4IHF1ZXVlICovCisjaWZkZWYgQ09ORklHX0RDQQorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKKwkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKKwkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nKTsKKwl9CisjZW5kaWYKKwogCXR4X2NsZWFuZWQgPSBpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7Ci0JaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nWzBdLCAmd29ya19kb25lLAotCQkJICAgYnVkZ2V0KTsKKwlpeGdiZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAogCWlmICh0eF9jbGVhbmVkKQogCQl3b3JrX2RvbmUgPSBidWRnZXQ7CiAKIAkvKiBJZiBidWRnZXQgbm90IGZ1bGx5IGNvbnN1bWVkLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5ldGRldiwgbmFwaSk7CisJCW5ldGlmX3J4X2NvbXBsZXRlKGFkYXB0ZXItPm5ldGRldiwgbmFwaSk7CisJCWlmIChhZGFwdGVyLT5yeF9laXRyIDwgSVhHQkVfTUlOX0lUUl9VU0VDUykKKwkJCWl4Z2JlX3NldF9pdHIoYWRhcHRlcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CkBAIC0xNjAyLDYgKzIwNzQsMTM2IEBACiAJaXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKIH0KIAorc3RhdGljIHZvaWQgaXhnYmVfYWNxdWlyZV9tc2l4X3ZlY3RvcnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgIGludCB2ZWN0b3JzKQoreworCWludCBlcnIsIHZlY3Rvcl90aHJlc2hvbGQ7CisKKwkvKiBXZSdsbCB3YW50IGF0IGxlYXN0IDMgKHZlY3Rvcl90aHJlc2hvbGQpOgorCSAqIDEpIFR4UVswXSBDbGVhbnVwCisJICogMikgUnhRWzBdIENsZWFudXAKKwkgKiAzKSBPdGhlciAoTGluayBTdGF0dXMgQ2hhbmdlLCBldGMuKQorCSAqIDQpIFRDUCBUaW1lciAob3B0aW9uYWwpCisJICovCisJdmVjdG9yX3RocmVzaG9sZCA9IE1JTl9NU0lYX0NPVU5UOworCisJLyogVGhlIG1vcmUgd2UgZ2V0LCB0aGUgbW9yZSB3ZSB3aWxsIGFzc2lnbiB0byBUeC9SeCBDbGVhbnVwCisJICogZm9yIHRoZSBzZXBhcmF0ZSBxdWV1ZXMuLi53aGVyZSBSeCBDbGVhbnVwID49IFR4IENsZWFudXAuCisJICogUmlnaHQgbm93LCB3ZSBzaW1wbHkgY2FyZSBhYm91dCBob3cgbWFueSB3ZSdsbCBnZXQ7IHdlJ2xsCisJICogc2V0IHRoZW0gdXAgbGF0ZXIgd2hpbGUgcmVxdWVzdGluZyBpcnEncy4KKwkgKi8KKwl3aGlsZSAodmVjdG9ycyA+PSB2ZWN0b3JfdGhyZXNob2xkKSB7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCisJCQkJICAgICAgdmVjdG9ycyk7CisJCWlmICghZXJyKSAvKiBTdWNjZXNzIGluIGFjcXVpcmluZyBhbGwgcmVxdWVzdGVkIHZlY3RvcnMuICovCisJCQlicmVhazsKKwkJZWxzZSBpZiAoZXJyIDwgMCkKKwkJCXZlY3RvcnMgPSAwOyAvKiBOYXN0eSBmYWlsdXJlLCBxdWl0IG5vdyAqLworCQllbHNlIC8qIGVyciA9PSBudW1iZXIgb2YgdmVjdG9ycyB3ZSBzaG91bGQgdHJ5IGFnYWluIHdpdGggKi8KKwkJCXZlY3RvcnMgPSBlcnI7CisJfQorCisJaWYgKHZlY3RvcnMgPCB2ZWN0b3JfdGhyZXNob2xkKSB7CisJCS8qIENhbid0IGFsbG9jYXRlIGVub3VnaCBNU0ktWCBpbnRlcnJ1cHRzPyAgT2ggd2VsbC4KKwkJICogVGhpcyBqdXN0IG1lYW5zIHdlJ2xsIGdvIHdpdGggZWl0aGVyIGEgc2luZ2xlIE1TSQorCQkgKiB2ZWN0b3Igb3IgZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHRzLgorCQkgKi8KKwkJRFBSSU5USyhIVywgREVCVUcsICJVbmFibGUgdG8gYWxsb2NhdGUgTVNJLVggaW50ZXJydXB0c1xuIik7CisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX01TSVhfRU5BQkxFRDsKKwkJa2ZyZWUoYWRhcHRlci0+bXNpeF9lbnRyaWVzKTsKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CisJCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSAxOworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRDsgLyogV29vdCEgKi8KKwkJYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyA9IHZlY3RvcnM7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaXhnYmVfc2V0X251bV9xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IG5ycSwgbnRxOworCWludCBmZWF0dXJlX21hc2sgPSAwLCByc3NfaSwgcnNzX207CisKKwkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyAqLworCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OEVCOgorCQlyc3NfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOworCQlyc3NfbSA9IDA7CisJCWZlYXR1cmVfbWFzayB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOworCisJCXN3aXRjaCAoYWRhcHRlci0+ZmxhZ3MgJiBmZWF0dXJlX21hc2spIHsKKwkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCk6CisJCQlyc3NfbSA9IDB4RjsKKwkJCW5ycSA9IHJzc19pOworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwkJCW50cSA9IHJzc19pOworI2Vsc2UKKwkJCW50cSA9IDE7CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCWRlZmF1bHQ6CisJCQlyc3NfaSA9IDA7CisJCQlyc3NfbSA9IDA7CisJCQlucnEgPSAxOworCQkJbnRxID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmluZGljZXMgPSByc3NfaTsKKwkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2sgPSByc3NfbTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbnJxID0gMTsKKwkJbnRxID0gMTsKKwkJYnJlYWs7CisJfQorCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG5ycTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbnRxOworfQorCisvKioKKyAqIGl4Z2JlX2NhY2hlX3JpbmdfcmVnaXN0ZXIgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBPbmNlIHdlIGtub3cgdGhlIGZlYXR1cmUtc2V0IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UsIHdlJ2xsIGNhY2hlCisgKiB0aGUgcmVnaXN0ZXIgb2Zmc2V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgaXMgYXNzaWduZWQgdG8uCisgKiovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKiBUT0RPOiBSZW1vdmUgYWxsIHVzZXMgb2YgdGhlIGluZGljZXMgaW4gdGhlIGNhc2VzIHdoZXJlIG11bHRpcGxlCisJICogICAgICAgZmVhdHVyZXMgYXJlIE9SJ2QgdG9nZXRoZXIsIGlmIHRoZSBmZWF0dXJlIHNldCBtYWtlcyBzZW5zZS4KKwkgKi8KKwlpbnQgZmVhdHVyZV9tYXNrID0gMCwgcnNzX2k7CisJaW50IGksIHR4cl9pZHgsIHJ4cl9pZHg7CisKKwkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyAqLworCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OEVCOgorCQlyc3NfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOworCQl0eHJfaWR4ID0gMDsKKwkJcnhyX2lkeCA9IDA7CisJCWZlYXR1cmVfbWFzayB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOworCQlzd2l0Y2ggKGFkYXB0ZXItPmZsYWdzICYgZmVhdHVyZV9tYXNrKSB7CisJCWNhc2UgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpOgorCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwogLyoqCiAgKiBpeGdiZV9hbGxvY19xdWV1ZXMgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbCByaW5ncwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKQEAgLTE2MTcsMjUgKzIyMTksMTY3IEBACiAJYWRhcHRlci0+dHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKIAkJCQkgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXItPnR4X3JpbmcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJYWRhcHRlci0+dHhfcmluZ1tpXS5jb3VudCA9IElYR0JFX0RFRkFVTFRfVFhEOworCQlnb3RvIGVycl90eF9yaW5nX2FsbG9jYXRpb247CiAKIAlhZGFwdGVyLT5yeF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICghYWRhcHRlci0+cnhfcmluZykgewotCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFhZGFwdGVyLT5yeF9yaW5nKQorCQlnb3RvIGVycl9yeF9yaW5nX2FsbG9jYXRpb247CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgPSBJWEdCRV9ERUZBVUxUX1RYRDsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS5xdWV1ZV9pbmRleCA9IGk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCA9IElYR0JFX0RFRkFVTFRfUlhEOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnF1ZXVlX2luZGV4ID0gaTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0uYWRhcHRlciA9IGFkYXB0ZXI7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0uaXRyX3JlZ2lzdGVyID0gSVhHQkVfRUlUUihpKTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCA9IElYR0JFX0RFRkFVTFRfUlhEOwotCX0KKwlpeGdiZV9jYWNoZV9yaW5nX3JlZ2lzdGVyKGFkYXB0ZXIpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9yeF9yaW5nX2FsbG9jYXRpb246CisJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7CitlcnJfdHhfcmluZ19hbGxvY2F0aW9uOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIGl4Z2JlX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eSAtIHNldCBNU0ktWCBvciBNU0kgaWYgc3VwcG9ydGVkCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIEF0dGVtcHQgdG8gY29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBiZXN0IGF2YWlsYWJsZQorICogY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSBhbmQgdGhlIGtlcm5lbC4KKyAqKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGl4Z2JlX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgaXhnYmVfYWRhcHRlcgorCQkJCQkJICAgICphZGFwdGVyKQoreworCWludCBlcnIgPSAwOworCWludCB2ZWN0b3IsIHZfYnVkZ2V0OworCisJLyoKKwkgKiBJdCdzIGVhc3kgdG8gYmUgZ3JlZWR5IGZvciBNU0ktWCB2ZWN0b3JzLCBidXQgaXQgcmVhbGx5CisJICogZG9lc24ndCBkbyB1cyBtdWNoIGdvb2QgaWYgd2UgaGF2ZSBhIGxvdCBtb3JlIHZlY3RvcnMKKwkgKiB0aGFuIENQVSdzLiAgU28gbGV0J3MgYmUgY29uc2VydmF0aXZlIGFuZCBvbmx5IGFzayBmb3IKKwkgKiAocm91Z2hseSkgdHdpY2UgdGhlIG51bWJlciBvZiB2ZWN0b3JzIGFzIHRoZXJlIGFyZSBDUFUncy4KKwkgKi8KKwl2X2J1ZGdldCA9IG1pbihhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJICAgICAgIChpbnQpKG51bV9vbmxpbmVfY3B1cygpICogMikpICsgTk9OX1FfVkVDVE9SUzsKKworCS8qCisJICogQXQgdGhlIHNhbWUgdGltZSwgaGFyZHdhcmUgY2FuIG9ubHkgc3VwcG9ydCBhIG1heGltdW0gb2YKKwkgKiBNQVhfTVNJWF9DT1VOVCB2ZWN0b3JzLiAgV2l0aCBmZWF0dXJlcyBzdWNoIGFzIFJTUyBhbmQgVk1EcSwKKwkgKiB3ZSBjYW4gZWFzaWx5IHJlYWNoIHVwd2FyZHMgb2YgNjQgUnggZGVzY3JpcHRvciBxdWV1ZXMgYW5kCisJICogMzIgVHggcXVldWVzLiAgVGh1cywgd2UgY2FwIGl0IG9mZiBpbiB0aG9zZSByYXJlIGNhc2VzIHdoZXJlCisJICogdGhlIGNwdSBjb3VudCBhbHNvIGV4Y2VlZHMgb3VyIHZlY3RvciBsaW1pdC4KKwkgKi8KKwl2X2J1ZGdldCA9IG1pbih2X2J1ZGdldCwgTUFYX01TSVhfQ09VTlQpOworCisJLyogQSBmYWlsdXJlIGluIE1TSS1YIGVudHJ5IGFsbG9jYXRpb24gaXNuJ3QgZmF0YWwsIGJ1dCBpdCBkb2VzCisJICogbWVhbiB3ZSBkaXNhYmxlIE1TSS1YIGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlci4gKi8KKwlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKHZfYnVkZ2V0LAorCQkJCQlzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKKwkJaXhnYmVfc2V0X251bV9xdWV1ZXMoYWRhcHRlcik7CisJCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKKwkJZXJyID0gaXhnYmVfYWxsb2NfcXVldWVzKGFkYXB0ZXIpOworCQlpZiAoZXJyKSB7CisJCQlEUFJJTlRLKFBST0JFLCBFUlIsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5ICIKKwkJCQkJICAgICJmb3IgcXVldWVzXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZ290byB0cnlfbXNpOworCX0KKworCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgdl9idWRnZXQ7IHZlY3RvcisrKQorCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS5lbnRyeSA9IHZlY3RvcjsKKworCWl4Z2JlX2FjcXVpcmVfbXNpeF92ZWN0b3JzKGFkYXB0ZXIsIHZfYnVkZ2V0KTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKQorCQlnb3RvIG91dDsKKwordHJ5X21zaToKKwllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKKwlpZiAoIWVycikgeworCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX01TSV9FTkFCTEVEOworCX0gZWxzZSB7CisJCURQUklOVEsoSFcsIERFQlVHLCAiVW5hYmxlIHRvIGFsbG9jYXRlIE1TSSBpbnRlcnJ1cHQsICIKKwkJCQkgICAiZmFsbGluZyBiYWNrIHRvIGxlZ2FjeS4gIEVycm9yOiAlZFxuIiwgZXJyKTsKKwkJLyogcmVzZXQgZXJyICovCisJCWVyciA9IDA7CisJfQorCitvdXQ6CisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCS8qIE5vdGlmeSB0aGUgc3RhY2sgb2YgdGhlIChwb3NzaWJseSkgcmVkdWNlZCBUeCBRdWV1ZSBjb3VudC4gKi8KKwlhZGFwdGVyLT5uZXRkZXYtPmVncmVzc19zdWJxdWV1ZV9jb3VudCA9IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7CisjZW5kaWYKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX01TSVhfRU5BQkxFRDsKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwkJa2ZyZWUoYWRhcHRlci0+bXNpeF9lbnRyaWVzKTsKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19NU0lfRU5BQkxFRDsKKwkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCX0KKwlyZXR1cm47Cit9CisKKy8qKgorICogaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lIC0gRGV0ZXJtaW5lIHByb3BlciBpbnRlcnJ1cHQgc2NoZW1lCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFdlIGRldGVybWluZSB3aGljaCBpbnRlcnJ1cHQgc2NoZW1lIHRvIHVzZSBiYXNlZCBvbi4uLgorICogLSBLZXJuZWwgc3VwcG9ydCAoTVNJLCBNU0ktWCkKKyAqICAgLSB3aGljaCBjYW4gYmUgdXNlci1kZWZpbmVkICh2aWEgTU9EVUxFX1BBUkFNKQorICogLSBIYXJkd2FyZSBxdWV1ZSBjb3VudCAobnVtXypfcXVldWVzKQorICogICAtIGRlZmluZWQgYnkgbWlzY2VsbGFuZW91cyBoYXJkd2FyZSBzdXBwb3J0L2ZlYXR1cmVzIChSU1MsIGV0Yy4pCisgKiovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKworCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzICovCisJaXhnYmVfc2V0X251bV9xdWV1ZXMoYWRhcHRlcik7CisKKwllcnIgPSBpeGdiZV9hbGxvY19xdWV1ZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZXNcbiIpOworCQlnb3RvIGVycl9hbGxvY19xdWV1ZXM7CisJfQorCisJZXJyID0gaXhnYmVfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiVW5hYmxlIHRvIHNldHVwIGludGVycnVwdCBjYXBhYmlsaXRpZXNcbiIpOworCQlnb3RvIGVycl9zZXRfaW50ZXJydXB0OworCX0KKworCURQUklOVEsoRFJWLCBJTkZPLCAiTXVsdGlxdWV1ZSAlczogUnggUXVldWUgY291bnQgPSAldSwgIgorCQkJICAgIlR4IFF1ZXVlIGNvdW50ID0gJXVcbiIsCisJCShhZGFwdGVyLT5udW1fcnhfcXVldWVzID4gMSkgPyAiRW5hYmxlZCIgOgorCQkiRGlzYWJsZWQiLCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKworCXNldF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOworCisJcmV0dXJuIDA7CisKK2Vycl9zZXRfaW50ZXJydXB0OgorCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworZXJyX2FsbG9jX3F1ZXVlczoKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTE2NTAsMTEgKzIzOTQsMjIgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bnNpZ25lZCBpbnQgcnNzOworCisJLyogU2V0IGNhcGFiaWxpdHkgZmxhZ3MgKi8KKwlyc3MgPSBtaW4oSVhHQkVfTUFYX1JTU19JTkRJQ0VTLCAoaW50KW51bV9vbmxpbmVfY3B1cygpKTsKKwlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlcyA9IHJzczsKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOworCisJLyogRW5hYmxlIER5bmFtaWMgaW50ZXJydXB0IHRocm90dGxpbmcgYnkgZGVmYXVsdCAqLworCWFkYXB0ZXItPnJ4X2VpdHIgPSAxOworCWFkYXB0ZXItPnR4X2VpdHIgPSAxOwogCiAJLyogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KIAlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGl4Z2JlX2ZjX2Z1bGw7CiAJaHctPmZjLnR5cGUgPSBpeGdiZV9mY19mdWxsOwogCisJLyogc2VsZWN0IDEwRyBsaW5rIGJ5IGRlZmF1bHQgKi8KIAlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU47CiAJaWYgKGh3LT5tYWMub3BzLnJlc2V0KGh3KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJIVyBJbml0IGZhaWxlZFxuIik7CkBAIC0xNjcyLDE2ICsyNDI3LDkgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyogU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyAqLwotCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBJWEdCRV9ERUZBVUxUX1JYUTsKLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKKwkvKiBlbmFibGUgcnggY3N1bSBieSBkZWZhdWx0ICovCiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQ7CiAKLQlpZiAoaXhnYmVfYWxsb2NfcXVldWVzKGFkYXB0ZXIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQogCXNldF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCiAJcmV0dXJuIDA7CkBAIC0xNzIxLDcgKzI0NjksNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl0eGRyLT5hZGFwdGVyID0gYWRhcHRlcjsKIAl0eGRyLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhkci0+bmV4dF90b19jbGVhbiA9IDA7CiAJdHhkci0+d29ya19saW1pdCA9IHR4ZHItPmNvdW50OwpAQCAtMTc0MCw3ICsyNDg3LDcgQEAKIAkJCSAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4ZHIpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCWludCBzaXplLCBkZXNjX2xlbjsKKwlpbnQgc2l6ZTsKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3J4X2J1ZmZlcikgKiByeGRyLT5jb3VudDsKIAlyeGRyLT5yeF9idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CkBAIC0xNzUxLDEwICsyNDk4LDggQEAKIAl9CiAJbWVtc2V0KHJ4ZHItPnJ4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAotCWRlc2NfbGVuID0gc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjKTsKLQogCS8qIFJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KLQlyeGRyLT5zaXplID0gcnhkci0+Y291bnQgKiBkZXNjX2xlbjsKKwlyeGRyLT5zaXplID0gcnhkci0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MpOwogCXJ4ZHItPnNpemUgPSBBTElHTihyeGRyLT5zaXplLCA0MDk2KTsKIAogCXJ4ZHItPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCByeGRyLT5zaXplLCAmcnhkci0+ZG1hKTsKQEAgLTE3NjgsNyArMjUxMyw2IEBACiAKIAlyeGRyLT5uZXh0X3RvX2NsZWFuID0gMDsKIAlyeGRyLT5uZXh0X3RvX3VzZSA9IDA7Ci0Jcnhkci0+YWRhcHRlciA9IGFkYXB0ZXI7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NDYsOCArMjU5MCw3IEBACiB9CiAKIC8qKgotICogaXhnYmVfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyAtIHdyYXBwZXIgdG8gYWxsb2NhdGUgVHggcmVzb3VyY2VzCi0gKgkJCQkgIChEZXNjcmlwdG9ycykgZm9yIGFsbCBxdWV1ZXMKKyAqIGl4Z2JlX3NldHVwX2FsbF90eF9yZXNvdXJjZXMgLSBhbGxvY2F0ZSBhbGwgcXVldWVzIFR4IHJlc291cmNlcwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKgogICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpdGggYW4gZXJyb3IsIHRoZW4gaXQncyBwb3NzaWJsZSBvbmUgb3IKQEAgLTE4NzMsOCArMjYxNiw3IEBACiB9CiAKIC8qKgotICogaXhnYmVfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyAtIHdyYXBwZXIgdG8gYWxsb2NhdGUgUnggcmVzb3VyY2VzCi0gKgkJCQkgIChEZXNjcmlwdG9ycykgZm9yIGFsbCBxdWV1ZXMKKyAqIGl4Z2JlX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMgLSBhbGxvY2F0ZSBhbGwgcXVldWVzIFJ4IHJlc291cmNlcwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKgogICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpdGggYW4gZXJyb3IsIHRoZW4gaXQncyBwb3NzaWJsZSBvbmUgb3IKQEAgLTE5MTYsNiArMjY1OCw5IEBACiAJICAgIChtYXhfZnJhbWUgPiBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJRFBSSU5USyhQUk9CRSwgSU5GTywgImNoYW5naW5nIE1UVSBmcm9tICVkIHRvICVkXG4iLAorCQluZXRkZXYtPm10dSwgbmV3X210dSk7CisJLyogbXVzdCBzZXQgbmV3IE1UVSBiZWZvcmUgY2FsbGluZyBkb3duIG9yIHVwICovCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKQEAgLTE5NDAsMTkgKzI2ODUsMTYgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVycjsKLQl1MzIgbnVtX3J4X3F1ZXVlcyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CiAKLXRyeV9pbnRyX3JlaW5pdDoKKwkvKiBkaXNhbGxvdyBvcGVuIGR1cmluZyB0ZXN0ICovCisJaWYgKHRlc3RfYml0KF9fSVhHQkVfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwogCS8qIGFsbG9jYXRlIHRyYW5zbWl0IGRlc2NyaXB0b3JzICovCiAJZXJyID0gaXhnYmVfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zZXR1cF90eDsKIAotCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpKSB7Ci0JCW51bV9yeF9xdWV1ZXMgPSAxOwotCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gbnVtX3J4X3F1ZXVlczsKLQl9Ci0KIAkvKiBhbGxvY2F0ZSByZWNlaXZlIGRlc2NyaXB0b3JzICovCiAJZXJyID0gaXhnYmVfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKIAlpZiAoZXJyKQpAQCAtMTk2MCwzMSArMjcwMiwxMCBAQAogCiAJaXhnYmVfY29uZmlndXJlKGFkYXB0ZXIpOwogCi0JZXJyID0gaXhnYmVfcmVxdWVzdF9pcnEoYWRhcHRlciwgJm51bV9yeF9xdWV1ZXMpOworCWVyciA9IGl4Z2JlX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlcV9pcnE7CiAKLQkvKiBpeGdiZV9yZXF1ZXN0IG1pZ2h0IGhhdmUgcmVkdWNlZCBudW1fcnhfcXVldWVzICovCi0JaWYgKG51bV9yeF9xdWV1ZXMgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKSB7Ci0JCS8qIFdlIGRpZG4ndCBnZXQgTVNJLVgsIHNvIHdlIG5lZWQgdG8gcmVsZWFzZSBldmVyeXRoaW5nLAotCQkgKiBzZXQgb3VyIFJ4IHF1ZXVlIGNvdW50IHRvIG51bV9yeF9xdWV1ZXMsIGFuZCByZWRvIHRoZQotCQkgKiB3aG9sZSBpbml0IHByb2Nlc3MuCi0JCSAqLwotCQlpeGdiZV9mcmVlX2lycShhZGFwdGVyKTsKLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lfRU5BQkxFRCkgewotCQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfTVNJX0VOQUJMRUQ7Ci0JCX0KLQkJaXhnYmVfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpeGdiZV9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7Ci0JCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBudW1fcnhfcXVldWVzOwotCi0JCS8qIFJlc2V0IHRoZSBoYXJkd2FyZSwgYW5kIHN0YXJ0IG92ZXIuICovCi0JCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwotCi0JCWdvdG8gdHJ5X2ludHJfcmVpbml0OwotCX0KLQogCWVyciA9IGl4Z2JlX3VwX2NvbXBsZXRlKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3VwOwpAQCAtMjEyMCw2ICsyODQxLDkgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCWJvb2wgbGlua191cDsKIAl1MzIgbGlua19zcGVlZCA9IDA7CisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCWludCBpOworI2VuZGlmCiAKIAlhZGFwdGVyLT5ody5tYWMub3BzLmNoZWNrX2xpbmsoJmFkYXB0ZXItPmh3LCAmKGxpbmtfc3BlZWQpLCAmbGlua191cCk7CiAKQEAgLTIxMzQsMTMgKzI4NTgsMTcgQEAKIAkJCQkobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCA/CiAJCQkJICIxMCBHYnBzIiA6CiAJCQkJIChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgPwotCQkJCSAgIjEgR3BicyIgOiAidW5rbm93biBzcGVlZCIpKSwKKwkJCQkgICIxIEdicHMiIDogInVua25vd24gc3BlZWQiKSksCiAJCQkJKChGTE9XX1JYICYmIEZMT1dfVFgpID8gIlJYL1RYIiA6CiAJCQkJIChGTE9XX1JYID8gIlJYIiA6CiAJCQkJIChGTE9XX1RYID8gIlRYIiA6ICJOb25lIikpKSk7CiAKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKyNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCisJCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJCW5ldGlmX3dha2Vfc3VicXVldWUobmV0ZGV2LCBpKTsKKyNlbmRpZgogCQl9IGVsc2UgewogCQkJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwogCQkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOwpAQCAtMjE1NSwxMCArMjg4MywyMyBAQAogCiAJaXhnYmVfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwogCi0JLyogUmVzZXQgdGhlIHRpbWVyICovCi0JaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5ncyBhcmUgY2xlYW5lZCAqLworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgeworCQkJdTMyIGVpY3MgPQorCQkJICgxIDw8IChhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUykpIC0gMTsKKwkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJQ1MsIGVpY3MpOworCQl9IGVsc2UgeworCQkJLyogZm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueSBiaXRzIHRoYXQKKwkJCSAqIGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMgb3BlcmF0aW9uIHdvdWxkCisJCQkgKiBzZXQgKmJvdGgqIEVJTVMgYW5kIEVJQ1MgZm9yIGFueSBiaXQgaW4gRUlBTSAqLworCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlDUywKKwkJCQkgICAgIChJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKKwkJfQorCQkvKiBSZXNldCB0aGUgdGltZXIgKi8KIAkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwKIAkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CisJfQogfQogCiBzdGF0aWMgaW50IGl4Z2JlX3RzbyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTIxNzEsNyArMjkxMiw2IEBACiAJc3RydWN0IGl4Z2JlX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CiAJdTMyIHZsYW5fbWFjaXBfbGVucyA9IDAsIHR5cGVfdHVjbWRfbWxobCA9IDA7CiAJdTMyIG1zc19sNGxlbl9pZHggPSAwLCBsNGxlbjsKLQkqaGRyX2xlbiA9IDA7CiAKIAlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CiAJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7CkBAIC0yMjc4LDExICszMDE4LDI5IEBACiAJCQkJICAgIElYR0JFX0FEVlRYRF9EVFlQX0NUWFQpOwogCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CiAJCQkJdHlwZV90dWNtZF9tbGhsIHw9IElYR0JFX0FEVlRYRF9UVUNNRF9JUFY0OworCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQorCQkJCQkJSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CisJCQkJYnJlYWs7CiAKLQkJCWlmIChza2ItPnNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKLQkJCQl0eXBlX3R1Y21kX21saGwgfD0gSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CisJCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJCQkJLyogWFhYIHdoYXQgYWJvdXQgb3RoZXIgVjYgaGVhZGVycz8/ICovCisJCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCisJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQorCQkJCQkJSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHVubGlrZWx5KG5ldF9yYXRlbGltaXQoKSkpIHsKKwkJCQkJRFBSSU5USyhQUk9CRSwgV0FSTklORywKKwkJCQkJICJwYXJ0aWFsIGNoZWNrc3VtIGJ1dCBwcm90bz0leCFcbiIsCisJCQkJCSBza2ItPnByb3RvY29sKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQljb250ZXh0X2Rlc2MtPnR5cGVfdHVjbWRfbWxobCA9IGNwdV90b19sZTMyKHR5cGVfdHVjbWRfbWxobCk7CkBAIC0yNDM3LDcgKzMxOTUsMTEgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKKyNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCisJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKyNlbHNlCiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworI2VuZGlmCiAJLyogSGVyYmVydCdzIG9yaWdpbmFsIHBhdGNoIGhhZDoKIAkgKiAgc21wX21iX19hZnRlcl9uZXRpZl9zdG9wX3F1ZXVlKCk7CiAJICogYnV0IHNpbmNlIHRoYXQgZG9lc24ndCBleGlzdCB5ZXQsIGp1c3Qgb3BlbiBjb2RlIGl0LiAqLwpAQCAtMjQ0OSw3ICszMjExLDExIEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBBIHJlcHJpZXZlISAtIHVzZSBzdGFydF9xdWV1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgY2FsbCBzY2hlZHVsZSAqLworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwluZXRpZl93YWtlX3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworI2Vsc2UKIAluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisjZW5kaWYKIAkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDcwLDE1ICszMjM2LDE4IEBACiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwogCXVuc2lnbmVkIGludCBmaXJzdDsKIAl1bnNpZ25lZCBpbnQgdHhfZmxhZ3MgPSAwOwotCXU4IGhkcl9sZW47Ci0JaW50IHRzbzsKKwl1OCBoZHJfbGVuID0gMDsKKwlpbnQgcl9pZHggPSAwLCB0c287CiAJdW5zaWduZWQgaW50IG1zcyA9IDA7CiAJaW50IGNvdW50ID0gMDsKIAl1bnNpZ25lZCBpbnQgZjsKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCWxlbiAtPSBza2ItPmRhdGFfbGVuOworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwlyX2lkeCA9IChhZGFwdGVyLT5udW1fdHhfcXVldWVzIC0gMSkgJiBza2ItPnF1ZXVlX21hcHBpbmc7CisjZW5kaWYKKwl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdOwogCi0JdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAKIAlpZiAoc2tiLT5sZW4gPD0gMCkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0yNTg3LDYgKzMzNTYsMzEgQEAKICNlbmRpZgogCiAvKioKKyAqIGl4Z2JlX25hcGlfYWRkX2FsbCAtIHByZXAgbmFwaSBzdHJ1Y3RzIGZvciB1c2UKKyAqIEBhZGFwdGVyOiBwcml2YXRlIHN0cnVjdAorICogaGVscGVyIGZ1bmN0aW9uIHRvIG5hcGlfYWRkIGVhY2ggcG9zc2libGUgcV92ZWN0b3ItPm5hcGkKKyAqLworc3RhdGljIHZvaWQgaXhnYmVfbmFwaV9hZGRfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKwlpbnQgKCpwb2xsKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCXBvbGwgPSAmaXhnYmVfY2xlYW5fcnhvbmx5OworCX0gZWxzZSB7CisJCXBvbGwgPSAmaXhnYmVfcG9sbDsKKwkJLyogb25seSBvbmUgcV92ZWN0b3IgZm9yIGxlZ2FjeSBtb2RlcyAqLworCQlxX3ZlY3RvcnMgPSAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3RvcnM7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gJmFkYXB0ZXItPnFfdmVjdG9yW2ldOworCQluZXRpZl9uYXBpX2FkZChhZGFwdGVyLT5uZXRkZXYsICZxX3ZlY3Rvci0+bmFwaSwKKwkJCSAgICAgICAoKnBvbGwpLCA2NCk7CisJfQorfQorCisvKioKICAqIGl4Z2JlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKICAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAogICogQGVudDogZW50cnkgaW4gaXhnYmVfcGNpX3RibApAQCAtMjYzOCw3ICszNDMyLDExIEBACiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAorI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IGl4Z2JlX2FkYXB0ZXIpLCBNQVhfVFhfUVVFVUVTKTsKKyNlbHNlCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpeGdiZV9hZGFwdGVyKSk7CisjZW5kaWYKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvY19ldGhlcmRldjsKQEAgLTI2NzksNyArMzQ3Nyw2IEBACiAJaXhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LT50eF90aW1lb3V0ID0gJml4Z2JlX3R4X3RpbWVvdXQ7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKLQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZhZGFwdGVyLT5uYXBpLCBpeGdiZV9jbGVhbiwgNjQpOwogCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGl4Z2JlX3ZsYW5fcnhfcmVnaXN0ZXI7CiAJbmV0ZGV2LT52bGFuX3J4X2FkZF92aWQgPSBpeGdiZV92bGFuX3J4X2FkZF92aWQ7CiAJbmV0ZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gaXhnYmVfdmxhbl9yeF9raWxsX3ZpZDsKQEAgLTI3MDIsNiArMzQ5OSw3IEBACiAKIAkvKiBTZXR1cCBodyBhcGkgKi8KIAltZW1jcHkoJmh3LT5tYWMub3BzLCBpaS0+bWFjX29wcywgc2l6ZW9mKGh3LT5tYWMub3BzKSk7CisJaHctPm1hYy50eXBlICA9IGlpLT5tYWM7CiAKIAllcnIgPSBpaS0+Z2V0X2ludmFyaWFudHMoaHcpOwogCWlmIChlcnIpCkBAIC0yNzI0LDYgKzM1MjIsOSBAQAogCWlmIChwY2lfdXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAorI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTVVMVElfUVVFVUU7CisjZW5kaWYKIAogCS8qIG1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KIAlpZiAoaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKGh3LCBOVUxMKSA8IDApIHsKQEAgLTI3NTMsOSArMzU1NCw5IEBACiAJaHctPmZjLmxvd193YXRlciA9IElYR0JFX0RFRkFVTFRfRkNSVEw7CiAJaHctPmZjLnBhdXNlX3RpbWUgPSBJWEdCRV9ERUZBVUxUX0ZDUEFVU0U7CiAKLQkvKiBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAqLwotCWFkYXB0ZXItPnJ4X2VpdHIgPSAoMTAwMDAwMCAvIElYR0JFX0RFRkFVTFRfSVRSX1JYX1VTRUNTKTsKLQlhZGFwdGVyLT50eF9laXRyID0gKDEwMDAwMDAgLyBJWEdCRV9ERUZBVUxUX0lUUl9UWF9VU0VDUyk7CisJZXJyID0gaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3N3X2luaXQ7CiAKIAkvKiBwcmludCBidXMgdHlwZS9zcGVlZC93aWR0aCBpbmZvICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSVhHQkVfUENJX0xJTktfU1RBVFVTLCAmbGlua19zdGF0dXMpOwpAQCAtMjc3OCwxNyArMzU3OSw0MCBAQAogCQkgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsCiAJCSAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKIAorCWlmIChsaW5rX3dpZHRoIDw9IElYR0JFX1BDSV9MSU5LX1dJRFRIXzQpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlBDSS1FeHByZXNzIGJhbmR3aWR0aCBhdmFpbGFibGUgZm9yICIKKwkJCSAidGhpcyBjYXJkIGlzIG5vdCBzdWZmaWNpZW50IGZvciBvcHRpbWFsICIKKwkJCSAicGVyZm9ybWFuY2UuXG4iKTsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGEgeDggIgorCQkJICJQQ0ktRXhwcmVzcyBzbG90IGlzIHJlcXVpcmVkLlxuIik7CisJfQorCiAJLyogcmVzZXQgdGhlIGhhcmR3YXJlIHdpdGggdGhlIG5ldyBzZXR0aW5ncyAqLwogCWl4Z2JlX3N0YXJ0X2h3KGh3KTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgaSk7CisjZW5kaWYKKworCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKIAogCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCisjaWZkZWYgQ09ORklHX0RDQQorCWlmIChkY2FfYWRkX3JlcXVlc3RlcigmcGRldi0+ZGV2KSA9PSAwKSB7CisJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CisJCS8qIGFsd2F5cyB1c2UgQ0IyIG1vZGUsIGRpZmZlcmVuY2UgaXMgbWFza2VkCisJCSAqIGluIHRoZSBDQiBkcml2ZXIgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfQ1RSTCwgMik7CisJCWl4Z2JlX3NldHVwX2RjYShhZGFwdGVyKTsKKwl9CisjZW5kaWYKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJbnRlbChSKSAxMCBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvblxuIik7CiAJY2FyZHNfZm91bmQrKzsKQEAgLTI3OTgsNiArMzYyMiw3IEBACiAJaXhnYmVfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOwogZXJyX2h3X2luaXQ6CiBlcnJfc3dfaW5pdDoKKwlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKIGVycl9lZXByb206CiAJaW91bm1hcChody0+aHdfYWRkcik7CiBlcnJfaW9yZW1hcDoKQEAgLTI4MjksMTYgKzM2NTQsMjcgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKKyNpZmRlZiBDT05GSUdfRENBCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19EQ0FfRU5BQkxFRDsKKwkJZGNhX3JlbW92ZV9yZXF1ZXN0ZXIoJnBkZXYtPmRldik7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9DVFJMLCAxKTsKKwl9CisKKyNlbmRpZgogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKKwlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKwogCWl4Z2JlX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKIAotCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOwotCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwotCiAJaW91bm1hcChhZGFwdGVyLT5ody5od19hZGRyKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCisJRFBSSU5USyhQUk9CRSwgSU5GTywgImNvbXBsZXRlXG4iKTsKKwlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKKwlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKKwogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0yOTUwLDYgKzM3ODYsMTAgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgaXhnYmVfZHJpdmVyX25hbWUsIGl4Z2JlX2NvcHlyaWdodCk7CiAKKyNpZmRlZiBDT05GSUdfRENBCisJZGNhX3JlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKKworI2VuZGlmCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXhnYmVfZHJpdmVyKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjk2Myw4ICszODAzLDI1IEBACiAgKiovCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhnYmVfZXhpdF9tb2R1bGUodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfRENBCisJZGNhX3VucmVnaXN0ZXJfbm90aWZ5KCZkY2Ffbm90aWZpZXIpOworI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpeGdiZV9kcml2ZXIpOwogfQorCisjaWZkZWYgQ09ORklHX0RDQQorc3RhdGljIGludCBpeGdiZV9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkgICAgdm9pZCAqcCkKK3sKKwlpbnQgcmV0X3ZhbDsKKworCXJldF92YWwgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCZpeGdiZV9kcml2ZXIuZHJpdmVyLCBOVUxMLCAmZXZlbnQsCisJCQkJCSBfX2l4Z2JlX25vdGlmeV9kY2EpOworCisJcmV0dXJuIHJldF92YWwgPyBOT1RJRllfQkFEIDogTk9USUZZX0RPTkU7Cit9CisjZW5kaWYgLyogQ09ORklHX0RDQSAqLworCiBtb2R1bGVfZXhpdChpeGdiZV9leGl0X21vZHVsZSk7CiAKIC8qIGl4Z2JlX21haW4uYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva29yaW5hLmMgYi9kcml2ZXJzL25ldC9rb3JpbmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI0YTczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQva29yaW5hLmMKQEAgLTAsMCArMSwxMjMzIEBACisvKgorICogIERyaXZlciBmb3IgdGhlIElEVCBSQzMyNDM0IChLb3JpbmEpIG9uLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlci4KKyAqCisgKiAgQ29weXJpZ2h0IDIwMDQgSURUIEluYy4gKHJpc2NoZWxwQGlkdC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDYgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgorICogIENvcHlyaWdodCAyMDA4IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICBXcml0aW5nIHRvIGEgRE1BIHN0YXR1cyByZWdpc3RlcjoKKyAqCisgKiAgV2hlbiB3cml0aW5nIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHlvdSBzaG91bGQgbWFzayB0aGUgYml0IHlvdSBoYXZlCisgKiAgYmVlbiB0ZXN0aW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgd2l0aC4gQm90aCBUeCBhbmQgUnggRE1BIHJlZ2lzdGVycworICogIHNob3VsZCBzdGljayB0byB0aGlzIHByb2NlZHVyZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L3JiLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9yYzMyNDM0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9ldGguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1yYzMyNDM0L2RtYV92Lmg+CisKKyNkZWZpbmUgRFJWX05BTUUgICAgICAgICJrb3JpbmEiCisjZGVmaW5lIERSVl9WRVJTSU9OICAgICAiMC4xMCIKKyNkZWZpbmUgRFJWX1JFTERBVEUgICAgICIwNE1hcjIwMDgiCisKKyNkZWZpbmUgU1RBVElPTl9BRERSRVNTX0hJR0goZGV2KSAoKChkZXYpLT5kZXZfYWRkclswXSA8PCA4KSB8IFwKKwkJCQkgICAoKGRldiktPmRldl9hZGRyWzFdKSkKKyNkZWZpbmUgU1RBVElPTl9BRERSRVNTX0xPVyhkZXYpICAoKChkZXYpLT5kZXZfYWRkclsyXSA8PCAyNCkgfCBcCisJCQkJICAgKChkZXYpLT5kZXZfYWRkclszXSA8PCAxNikgfCBcCisJCQkJICAgKChkZXYpLT5kZXZfYWRkcls0XSA8PCA4KSAgfCBcCisJCQkJICAgKChkZXYpLT5kZXZfYWRkcls1XSkpCisKKyNkZWZpbmUgTUlJX0NMT0NLIDEyNTAwMDAgCS8qIG5vIG1vcmUgdGhhbiAyLjVNSHogKi8KKworLyogdGhlIGZvbGxvd2luZyBtdXN0IGJlIHBvd2VycyBvZiB0d28gKi8KKyNkZWZpbmUgS09SSU5BX05VTV9SRFMJNjQgIC8qIG51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIEtPUklOQV9OVU1fVERTCTY0ICAvKiBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgKi8KKworI2RlZmluZSBLT1JJTkFfUkJTSVpFCTUzNiAvKiBzaXplIG9mIG9uZSByZXNvdXJjZSBidWZmZXIgPSBFdGhlciBNVFUgKi8KKyNkZWZpbmUgS09SSU5BX1JEU19NQVNLCShLT1JJTkFfTlVNX1JEUyAtIDEpCisjZGVmaW5lIEtPUklOQV9URFNfTUFTSwkoS09SSU5BX05VTV9URFMgLSAxKQorI2RlZmluZSBSRF9SSU5HX1NJWkUgCShLT1JJTkFfTlVNX1JEUyAqIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpKQorI2RlZmluZSBURF9SSU5HX1NJWkUJKEtPUklOQV9OVU1fVERTICogc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpCisKKyNkZWZpbmUgVFhfVElNRU9VVCAJKDYwMDAgKiBIWiAvIDEwMDApCisKK2VudW0gY2hhaW5fc3RhdHVzIHsgZGVzY19maWxsZWQsIGRlc2NfZW1wdHkgfTsKKyNkZWZpbmUgSVNfRE1BX0ZJTklTSEVEKFgpICAgKCgoWCkgJiAoRE1BX0RFU0NfRklOSSkpICE9IDApCisjZGVmaW5lIElTX0RNQV9ET05FKFgpICAgKCgoWCkgJiAoRE1BX0RFU0NfRE9ORSkpICE9IDApCisjZGVmaW5lIFJDVlBLVF9MRU5HVEgoWCkgICAgICgoKFgpICYgRVRIX1JYX0xFTikgPj4gRVRIX1JYX0xFTl9CSVQpCisKKy8qIEluZm9ybWF0aW9uIHRoYXQgbmVlZCB0byBiZSBrZXB0IGZvciBlYWNoIGJvYXJkLiAqLworc3RydWN0IGtvcmluYV9wcml2YXRlIHsKKwlzdHJ1Y3QgZXRoX3JlZ3MgKmV0aF9yZWdzOworCXN0cnVjdCBkbWFfcmVnICpyeF9kbWFfcmVnczsKKwlzdHJ1Y3QgZG1hX3JlZyAqdHhfZG1hX3JlZ3M7CisJc3RydWN0IGRtYV9kZXNjICp0ZF9yaW5nOyAvKiB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcgKi8KKwlzdHJ1Y3QgZG1hX2Rlc2MgKnJkX3Jpbmc7IC8qIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nICAqLworCisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYltLT1JJTkFfTlVNX1REU107CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYltLT1JJTkFfTlVNX1JEU107CisKKwlpbnQgcnhfbmV4dF9kb25lOworCWludCByeF9jaGFpbl9oZWFkOworCWludCByeF9jaGFpbl90YWlsOworCWVudW0gY2hhaW5fc3RhdHVzIHJ4X2NoYWluX3N0YXR1czsKKworCWludCB0eF9uZXh0X2RvbmU7CisJaW50IHR4X2NoYWluX2hlYWQ7CisJaW50IHR4X2NoYWluX3RhaWw7CisJZW51bSBjaGFpbl9zdGF0dXMgdHhfY2hhaW5fc3RhdHVzOworCWludCB0eF9jb3VudDsKKwlpbnQgdHhfZnVsbDsKKworCWludCByeF9pcnE7CisJaW50IHR4X2lycTsKKwlpbnQgb3ZyX2lycTsKKwlpbnQgdW5kX2lycTsKKworCXNwaW5sb2NrX3QgbG9jazsgICAgICAgIC8qIE5JQyB4bWl0IGxvY2sgKi8KKworCWludCBkbWFfaGFsdF9jbnQ7CisJaW50IGRtYV9ydW5fY250OworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaWY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgcGh5X2FkZHI7Cit9OworCitleHRlcm4gdW5zaWduZWQgaW50IGlkdF9jcHVfZnJlcTsKKworc3RhdGljIGlubGluZSB2b2lkIGtvcmluYV9zdGFydF9kbWEoc3RydWN0IGRtYV9yZWcgKmNoLCB1MzIgZG1hX2FkZHIpCit7CisJd3JpdGVsKDAsICZjaC0+ZG1hbmRwdHIpOworCXdyaXRlbChkbWFfYWRkciwgJmNoLT5kbWFkcHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGtvcmluYV9hYm9ydF9kbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRtYV9yZWcgKmNoKQoreworICAgICAgIGlmIChyZWFkbCgmY2gtPmRtYWMpICYgRE1BX0NIQU5fUlVOX0JJVCkgeworCSAgICAgICB3cml0ZWwoMHgxMCwgJmNoLT5kbWFjKTsKKworCSAgICAgICB3aGlsZSAoIShyZWFkbCgmY2gtPmRtYXMpICYgRE1BX1NUQVRfSEFMVCkpCisJCSAgICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCSAgICAgICB3cml0ZWwoMCwgJmNoLT5kbWFzKTsKKyAgICAgICB9CisKKyAgICAgICB3cml0ZWwoMCwgJmNoLT5kbWFkcHRyKTsKKyAgICAgICB3cml0ZWwoMCwgJmNoLT5kbWFuZHB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrb3JpbmFfY2hhaW5fZG1hKHN0cnVjdCBkbWFfcmVnICpjaCwgdTMyIGRtYV9hZGRyKQoreworCXdyaXRlbChkbWFfYWRkciwgJmNoLT5kbWFuZHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIGtvcmluYV9hYm9ydF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJa29yaW5hX2Fib3J0X2RtYShkZXYsIGxwLT50eF9kbWFfcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIGtvcmluYV9hYm9ydF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJa29yaW5hX2Fib3J0X2RtYShkZXYsIGxwLT5yeF9kbWFfcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIGtvcmluYV9zdGFydF9yeChzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwLAorCQkJCQlzdHJ1Y3QgZG1hX2Rlc2MgKnJkKQoreworCWtvcmluYV9zdGFydF9kbWEobHAtPnJ4X2RtYV9yZWdzLCBDUEhZU0FERFIocmQpKTsKK30KKworc3RhdGljIHZvaWQga29yaW5hX2NoYWluX3J4KHN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAsCisJCQkJCXN0cnVjdCBkbWFfZGVzYyAqcmQpCit7CisJa29yaW5hX2NoYWluX2RtYShscC0+cnhfZG1hX3JlZ3MsIENQSFlTQUREUihyZCkpOworfQorCisvKiB0cmFuc21pdCBwYWNrZXQgKi8KK3N0YXRpYyBpbnQga29yaW5hX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbGVuZ3RoOworCXUzMiBjaGFpbl9pbmRleDsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnRkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwl0ZCA9ICZscC0+dGRfcmluZ1tscC0+dHhfY2hhaW5fdGFpbF07CisKKwkvKiBzdG9wIHF1ZXVlIHdoZW4gZnVsbCwgZHJvcCBwa3RzIGlmIHF1ZXVlIGFscmVhZHkgZnVsbCAqLworCWlmIChscC0+dHhfY291bnQgPj0gKEtPUklOQV9OVU1fVERTIC0gMikpIHsKKwkJbHAtPnR4X2Z1bGwgPSAxOworCisJCWlmIChscC0+dHhfY291bnQgPT0gKEtPUklOQV9OVU1fVERTIC0gMikpCisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWVsc2UgeworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKworCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQl9CisJfQorCisJbHAtPnR4X2NvdW50Kys7CisKKwlscC0+dHhfc2tiW2xwLT50eF9jaGFpbl90YWlsXSA9IHNrYjsKKworCWxlbmd0aCA9IHNrYi0+bGVuOworCWRtYV9jYWNoZV93YmFjaygodTMyKXNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJLyogU2V0dXAgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IuICovCisJZG1hX2NhY2hlX2ludigodTMyKSB0ZCwgc2l6ZW9mKCp0ZCkpOworCXRkLT5jYSA9IENQSFlTQUREUihza2ItPmRhdGEpOworCWNoYWluX2luZGV4ID0gKGxwLT50eF9jaGFpbl90YWlsIC0gMSkgJgorCQkJS09SSU5BX1REU19NQVNLOworCisJaWYgKHJlYWRsKCYobHAtPnR4X2RtYV9yZWdzLT5kbWFuZHB0cikpID09IDApIHsKKwkJaWYgKGxwLT50eF9jaGFpbl9zdGF0dXMgPT0gZGVzY19lbXB0eSkgeworCQkJLyogVXBkYXRlIHRhaWwgKi8KKwkJCXRkLT5jb250cm9sID0gRE1BX0NPVU5UKGxlbmd0aCkgfAorCQkJCQlETUFfREVTQ19DT0YgfCBETUFfREVTQ19JT0Y7CisJCQkvKiBNb3ZlIHRhaWwgKi8KKwkJCWxwLT50eF9jaGFpbl90YWlsID0gY2hhaW5faW5kZXg7CisJCQkvKiBXcml0ZSB0byBORFBUUiAqLworCQkJd3JpdGVsKENQSFlTQUREUigmbHAtPnRkX3JpbmdbbHAtPnR4X2NoYWluX2hlYWRdKSwKKwkJCQkJJmxwLT50eF9kbWFfcmVncy0+ZG1hbmRwdHIpOworCQkJLyogTW92ZSBoZWFkIHRvIHRhaWwgKi8KKwkJCWxwLT50eF9jaGFpbl9oZWFkID0gbHAtPnR4X2NoYWluX3RhaWw7CisJCX0gZWxzZSB7CisJCQkvKiBVcGRhdGUgdGFpbCAqLworCQkJdGQtPmNvbnRyb2wgPSBETUFfQ09VTlQobGVuZ3RoKSB8CisJCQkJCURNQV9ERVNDX0NPRiB8IERNQV9ERVNDX0lPRjsKKwkJCS8qIExpbmsgdG8gcHJldiAqLworCQkJbHAtPnRkX3JpbmdbY2hhaW5faW5kZXhdLmNvbnRyb2wgJj0KKwkJCQkJfkRNQV9ERVNDX0NPRjsKKwkJCS8qIExpbmsgdG8gcHJldiAqLworCQkJbHAtPnRkX3JpbmdbY2hhaW5faW5kZXhdLmxpbmsgPSAgQ1BIWVNBRERSKHRkKTsKKwkJCS8qIE1vdmUgdGFpbCAqLworCQkJbHAtPnR4X2NoYWluX3RhaWwgPSBjaGFpbl9pbmRleDsKKwkJCS8qIFdyaXRlIHRvIE5EUFRSICovCisJCQl3cml0ZWwoQ1BIWVNBRERSKCZscC0+dGRfcmluZ1tscC0+dHhfY2hhaW5faGVhZF0pLAorCQkJCQkmKGxwLT50eF9kbWFfcmVncy0+ZG1hbmRwdHIpKTsKKwkJCS8qIE1vdmUgaGVhZCB0byB0YWlsICovCisJCQlscC0+dHhfY2hhaW5faGVhZCA9IGxwLT50eF9jaGFpbl90YWlsOworCQkJbHAtPnR4X2NoYWluX3N0YXR1cyA9IGRlc2NfZW1wdHk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobHAtPnR4X2NoYWluX3N0YXR1cyA9PSBkZXNjX2VtcHR5KSB7CisJCQkvKiBVcGRhdGUgdGFpbCAqLworCQkJdGQtPmNvbnRyb2wgPSBETUFfQ09VTlQobGVuZ3RoKSB8CisJCQkJCURNQV9ERVNDX0NPRiB8IERNQV9ERVNDX0lPRjsKKwkJCS8qIE1vdmUgdGFpbCAqLworCQkJbHAtPnR4X2NoYWluX3RhaWwgPSBjaGFpbl9pbmRleDsKKwkJCWxwLT50eF9jaGFpbl9zdGF0dXMgPSBkZXNjX2ZpbGxlZDsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJfSBlbHNlIHsKKwkJCS8qIFVwZGF0ZSB0YWlsICovCisJCQl0ZC0+Y29udHJvbCA9IERNQV9DT1VOVChsZW5ndGgpIHwKKwkJCQkJRE1BX0RFU0NfQ09GIHwgRE1BX0RFU0NfSU9GOworCQkJbHAtPnRkX3JpbmdbY2hhaW5faW5kZXhdLmNvbnRyb2wgJj0KKwkJCQkJfkRNQV9ERVNDX0NPRjsKKwkJCWxwLT50ZF9yaW5nW2NoYWluX2luZGV4XS5saW5rID0gIENQSFlTQUREUih0ZCk7CisJCQlscC0+dHhfY2hhaW5fdGFpbCA9IGNoYWluX2luZGV4OworCQl9CisJfQorCWRtYV9jYWNoZV93YmFjaygodTMyKSB0ZCwgc2l6ZW9mKCp0ZCkpOworCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtaWlfaWQsIGludCByZWcpCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKworCW1paV9pZCA9ICgobHAtPnJ4X2lycSA9PSAweDJjID8gMSA6IDApIDw8IDgpOworCisJd3JpdGVsKDAsICZscC0+ZXRoX3JlZ3MtPm1paW1jZmcpOworCXdyaXRlbCgwLCAmbHAtPmV0aF9yZWdzLT5taWltY21kKTsKKwl3cml0ZWwobWlpX2lkIHwgcmVnLCAmbHAtPmV0aF9yZWdzLT5taWltYWRkcik7CisJd3JpdGVsKEVUSF9NSUlfQ01EX1NDTiwgJmxwLT5ldGhfcmVncy0+bWlpbWNtZCk7CisKKwlyZXQgPSAoaW50KShyZWFkbCgmbHAtPmV0aF9yZWdzLT5taWltcmRkKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbWlpX2lkLCBpbnQgcmVnLCBpbnQgdmFsKQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbWlpX2lkID0gKChscC0+cnhfaXJxID09IDB4MmMgPyAxIDogMCkgPDwgOCk7CisKKwl3cml0ZWwoMCwgJmxwLT5ldGhfcmVncy0+bWlpbWNmZyk7CisJd3JpdGVsKDEsICZscC0+ZXRoX3JlZ3MtPm1paW1jbWQpOworCXdyaXRlbChtaWlfaWQgfCByZWcsICZscC0+ZXRoX3JlZ3MtPm1paW1hZGRyKTsKKwl3cml0ZWwoRVRIX01JSV9DTURfU0NOLCAmbHAtPmV0aF9yZWdzLT5taWltY21kKTsKKwl3cml0ZWwodmFsLCAmbHAtPmV0aF9yZWdzLT5taWltd3RkKTsKK30KKworLyogRXRoZXJuZXQgUnggRE1BIGludGVycnVwdCAqLworc3RhdGljIGlycXJldHVybl90IGtvcmluYV9yeF9kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBkbWFzLCBkbWFzbTsKKwlpcnFyZXR1cm5fdCByZXR2YWw7CisKKwlkbWFzID0gcmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hcyk7CisJaWYgKGRtYXMgJiAoRE1BX1NUQVRfRE9ORSB8IERNQV9TVEFUX0hBTFQgfCBETUFfU1RBVF9FUlIpKSB7CisJCW5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2LCAmbHAtPm5hcGkpOworCisJCWRtYXNtID0gcmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pOworCQl3cml0ZWwoZG1hc20gfCAoRE1BX1NUQVRfRE9ORSB8CisJCQkJRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiksCisJCQkJJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pOworCisJCWlmIChkbWFzICYgRE1BX1NUQVRfRVJSKQorCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogRE1BIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCisJCXJldHZhbCA9IElSUV9IQU5ETEVEOworCX0gZWxzZQorCQlyZXR2YWwgPSBJUlFfTk9ORTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQga29yaW5hX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnJkID0gJmxwLT5yZF9yaW5nW2xwLT5yeF9uZXh0X2RvbmVdOworCXN0cnVjdCBza19idWZmICpza2IsICpza2JfbmV3OworCXU4ICpwa3RfYnVmOworCXUzMiBkZXZjcywgcGt0X2xlbiwgZG1hcywgcnhfZnJlZV9kZXNjOworCWludCBjb3VudDsKKworCWRtYV9jYWNoZV9pbnYoKHUzMilyZCwgc2l6ZW9mKCpyZCkpOworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbGltaXQ7IGNvdW50KyspIHsKKworCQlkZXZjcyA9IHJkLT5kZXZjczsKKworCQkvKiBVcGRhdGUgc3RhdGlzdGljcyBjb3VudGVycyAqLworCQlpZiAoZGV2Y3MgJiBFVEhfUlhfQ1JDKQorCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCWlmIChkZXZjcyAmIEVUSF9SWF9MT1IpCisJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKGRldmNzICYgRVRIX1JYX0xFKQorCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWlmIChkZXZjcyAmIEVUSF9SWF9PVlIpCisJCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCWlmIChkZXZjcyAmIEVUSF9SWF9DVikKKwkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCWlmIChkZXZjcyAmIEVUSF9SWF9DRVMpCisJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKGRldmNzICYgRVRIX1JYX01QKQorCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKKworCQlpZiAoKGRldmNzICYgRVRIX1JYX0xEKSAhPSBFVEhfUlhfTEQpIHsKKwkJCS8qIGNoZWNrIHRoYXQgdGhpcyBpcyBhIHdob2xlIHBhY2tldAorCQkJICogV0FSTklORzogRE1BX0ZEIGJpdCBpbmNvcnJlY3RseSBzZXQKKwkJCSAqIGluIFJjMzI0MzQgKGVycmF0YSByZWYgIzA3NykgKi8KKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJfQorCisJCXdoaWxlICgocnhfZnJlZV9kZXNjID0gS09SSU5BX1JCU0laRSAtICh1MzIpRE1BX0NPVU5UKHJkLT5jb250cm9sKSkgIT0gMCkgeworCQkJLyogaW5pdCB0aGUgdmFyLiB1c2VkIGZvciB0aGUgbGF0ZXIKKwkJCSAqIG9wZXJhdGlvbnMgd2l0aGluIHRoZSB3aGlsZSBsb29wICovCisJCQlza2JfbmV3ID0gTlVMTDsKKwkJCXBrdF9sZW4gPSBSQ1ZQS1RfTEVOR1RIKGRldmNzKTsKKwkJCXNrYiA9IGxwLT5yeF9za2JbbHAtPnJ4X25leHRfZG9uZV07CisKKwkJCWlmICgoZGV2Y3MgJiBFVEhfUlhfUk9LKSkgeworCQkJCS8qIG11c3QgYmUgdGhlIChmaXJzdCBhbmQpIGxhc3QKKwkJCQkgKiBkZXNjcmlwdG9yIHRoZW4gKi8KKwkJCQlwa3RfYnVmID0gKHU4ICopbHAtPnJ4X3NrYltscC0+cnhfbmV4dF9kb25lXS0+ZGF0YTsKKworCQkJCS8qIGludmFsaWRhdGUgdGhlIGNhY2hlICovCisJCQkJZG1hX2NhY2hlX2ludigodW5zaWduZWQgbG9uZylwa3RfYnVmLCBwa3RfbGVuIC0gNCk7CisKKwkJCQkvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlci4gKi8KKwkJCQlza2JfbmV3ID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIEtPUklOQV9SQlNJWkUgKyAyKTsKKworCQkJCWlmICghc2tiX25ldykKKwkJCQkJYnJlYWs7CisJCQkJLyogRG8gbm90IGNvdW50IHRoZSBDUkMgKi8KKwkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbiAtIDQpOworCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisKKwkJCQkvKiBQYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKworCQkJCS8qIFVwZGF0ZSB0aGUgbWNhc3Qgc3RhdHMgKi8KKwkJCQlpZiAoZGV2Y3MgJiBFVEhfUlhfTVApCisJCQkJCWRldi0+c3RhdHMubXVsdGljYXN0Kys7CisKKwkJCQlscC0+cnhfc2tiW2xwLT5yeF9uZXh0X2RvbmVdID0gc2tiX25ldzsKKwkJCX0KKworCQkJcmQtPmRldmNzID0gMDsKKworCQkJLyogUmVzdG9yZSBkZXNjcmlwdG9yJ3MgY3Vycl9hZGRyICovCisJCQlpZiAoc2tiX25ldykKKwkJCQlyZC0+Y2EgPSBDUEhZU0FERFIoc2tiX25ldy0+ZGF0YSk7CisJCQllbHNlCisJCQkJcmQtPmNhID0gQ1BIWVNBRERSKHNrYi0+ZGF0YSk7CisKKwkJCXJkLT5jb250cm9sID0gRE1BX0NPVU5UKEtPUklOQV9SQlNJWkUpIHwKKwkJCQlETUFfREVTQ19DT0QgfCBETUFfREVTQ19JT0Q7CisJCQlscC0+cmRfcmluZ1sobHAtPnJ4X25leHRfZG9uZSAtIDEpICYKKwkJCQlLT1JJTkFfUkRTX01BU0tdLmNvbnRyb2wgJj0KKwkJCQl+RE1BX0RFU0NfQ09EOworCisJCQlscC0+cnhfbmV4dF9kb25lID0gKGxwLT5yeF9uZXh0X2RvbmUgKyAxKSAmIEtPUklOQV9SRFNfTUFTSzsKKwkJCWRtYV9jYWNoZV93YmFjaygodTMyKXJkLCBzaXplb2YoKnJkKSk7CisJCQlyZCA9ICZscC0+cmRfcmluZ1tscC0+cnhfbmV4dF9kb25lXTsKKwkJCXdyaXRlbCh+RE1BX1NUQVRfRE9ORSwgJmxwLT5yeF9kbWFfcmVncy0+ZG1hcyk7CisJCX0KKwl9CisKKwlkbWFzID0gcmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hcyk7CisKKwlpZiAoZG1hcyAmIERNQV9TVEFUX0hBTFQpIHsKKwkJd3JpdGVsKH4oRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiksCisJCQkJJmxwLT5yeF9kbWFfcmVncy0+ZG1hcyk7CisKKwkJbHAtPmRtYV9oYWx0X2NudCsrOworCQlyZC0+ZGV2Y3MgPSAwOworCQlza2IgPSBscC0+cnhfc2tiW2xwLT5yeF9uZXh0X2RvbmVdOworCQlyZC0+Y2EgPSBDUEhZU0FERFIoc2tiLT5kYXRhKTsKKwkJZG1hX2NhY2hlX3diYWNrKCh1MzIpcmQsIHNpemVvZigqcmQpKTsKKwkJa29yaW5hX2NoYWluX3J4KGxwLCByZCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGtvcmluYV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBrb3JpbmFfcHJpdmF0ZSwgbmFwaSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxwLT5kZXY7CisJaW50IHdvcmtfZG9uZTsKKworCXdvcmtfZG9uZSA9IGtvcmluYV9yeChkZXYsIGJ1ZGdldCk7CisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQluZXRpZl9yeF9jb21wbGV0ZShkZXYsIG5hcGkpOworCisJCXdyaXRlbChyZWFkbCgmbHAtPnJ4X2RtYV9yZWdzLT5kbWFzbSkgJgorCQkJfihETUFfU1RBVF9ET05FIHwgRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiksCisJCQkmbHAtPnJ4X2RtYV9yZWdzLT5kbWFzbSk7CisJfQorCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKy8qCisgKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvci4KKyAqLworc3RhdGljIHZvaWQga29yaW5hX211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwl1MzIgcmVjb2duaXNlID0gRVRIX0FSQ19BQjsJLyogYWx3YXlzIGFjY2VwdCBicm9hZGNhc3RzICovCisJaW50IGk7CisKKwkvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAqLworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCXJlY29nbmlzZSB8PSBFVEhfQVJDX1BSTzsKKworCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDQpKQorCQkvKiBBbGwgbXVsdGljYXN0IGFuZCBicm9hZGNhc3QgKi8KKwkJcmVjb2duaXNlIHw9IEVUSF9BUkNfQU07CisKKwkvKiBCdWlsZCB0aGUgaGFzaCB0YWJsZSAqLworCWlmIChkZXYtPm1jX2NvdW50ID4gNCkgeworCQl1MTYgaGFzaF90YWJsZVs0XTsKKwkJdTMyIGNyYzsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJaGFzaF90YWJsZVtpXSA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJY2hhciAqYWRkcnMgPSBkbWktPmRtaV9hZGRyOworCisJCQlkbWkgPSBkbWktPm5leHQ7CisKKwkJCWlmICghKCphZGRycyAmIDEpKQorCQkJCWNvbnRpbnVlOworCisJCQljcmMgPSBldGhlcl9jcmNfbGUoNiwgYWRkcnMpOworCQkJY3JjID4+PSAyNjsKKwkJCWhhc2hfdGFibGVbY3JjID4+IDRdIHw9IDEgPDwgKDE1IC0gKGNyYyAmIDB4ZikpOworCQl9CisJCS8qIEFjY2VwdCBmaWx0ZXJlZCBtdWx0aWNhc3QgKi8KKwkJcmVjb2duaXNlIHw9IEVUSF9BUkNfQUZNOworCisJCS8qIEZpbGwgdGhlIE1BQyBoYXNoIHRhYmxlcyB3aXRoIHRoZWlyIHZhbHVlcyAqLworCQl3cml0ZWwoKHUzMikoaGFzaF90YWJsZVsxXSA8PCAxNiB8IGhhc2hfdGFibGVbMF0pLAorCQkJCQkmbHAtPmV0aF9yZWdzLT5ldGhoYXNoMCk7CisJCXdyaXRlbCgodTMyKShoYXNoX3RhYmxlWzNdIDw8IDE2IHwgaGFzaF90YWJsZVsyXSksCisJCQkJCSZscC0+ZXRoX3JlZ3MtPmV0aGhhc2gxKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwl3cml0ZWwocmVjb2duaXNlLCAmbHAtPmV0aF9yZWdzLT5ldGhhcmMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGtvcmluYV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkbWFfZGVzYyAqdGQgPSAmbHAtPnRkX3JpbmdbbHAtPnR4X25leHRfZG9uZV07CisJdTMyIGRldmNzOworCXUzMiBkbWFzOworCisJc3Bpbl9sb2NrKCZscC0+bG9jayk7CisKKwkvKiBQcm9jZXNzIGFsbCBkZXNjIHRoYXQgYXJlIGRvbmUgKi8KKwl3aGlsZSAoSVNfRE1BX0ZJTklTSEVEKHRkLT5jb250cm9sKSkgeworCQlpZiAobHAtPnR4X2Z1bGwgPT0gMSkgeworCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkJbHAtPnR4X2Z1bGwgPSAwOworCQl9CisKKwkJZGV2Y3MgPSBscC0+dGRfcmluZ1tscC0+dHhfbmV4dF9kb25lXS5kZXZjczsKKwkJaWYgKChkZXZjcyAmIChFVEhfVFhfRkQgfCBFVEhfVFhfTEQpKSAhPQorCQkJCShFVEhfVFhfRkQgfCBFVEhfVFhfTEQpKSB7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisKKwkJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IHNwbGl0IHR4IGlnbm9yZWRcbiIsCisJCQkJCQkJZGV2LT5uYW1lKTsKKwkJfSBlbHNlIGlmIChkZXZjcyAmIEVUSF9UWF9UT0spIHsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPQorCQkJCQlscC0+dHhfc2tiW2xwLT50eF9uZXh0X2RvbmVdLT5sZW47CisJCX0gZWxzZSB7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisKKwkJCS8qIFVuZGVyZmxvdyAqLworCQkJaWYgKGRldmNzICYgRVRIX1RYX1VORCkKKwkJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisKKwkJCS8qIE92ZXJzaXplZCBmcmFtZSAqLworCQkJaWYgKGRldmNzICYgRVRIX1RYX09GKQorCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKworCQkJLyogRXhjZXNzaXZlIGRlZmVycmFscyAqLworCQkJaWYgKGRldmNzICYgRVRIX1RYX0VEKQorCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKworCQkJLyogQ29sbGlzaW9uczogbWVkaXVtIGJ1c3kgKi8KKwkJCWlmIChkZXZjcyAmIEVUSF9UWF9FQykKKwkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKworCQkJLyogTGF0ZSBjb2xsaXNpb24gKi8KKwkJCWlmIChkZXZjcyAmIEVUSF9UWF9MQykKKwkJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKwkJfQorCisJCS8qIFdlIG11c3QgYWx3YXlzIGZyZWUgdGhlIG9yaWdpbmFsIHNrYiAqLworCQlpZiAobHAtPnR4X3NrYltscC0+dHhfbmV4dF9kb25lXSkgeworCQkJZGV2X2tmcmVlX3NrYl9hbnkobHAtPnR4X3NrYltscC0+dHhfbmV4dF9kb25lXSk7CisJCQlscC0+dHhfc2tiW2xwLT50eF9uZXh0X2RvbmVdID0gTlVMTDsKKwkJfQorCisJCWxwLT50ZF9yaW5nW2xwLT50eF9uZXh0X2RvbmVdLmNvbnRyb2wgPSBETUFfREVTQ19JT0Y7CisJCWxwLT50ZF9yaW5nW2xwLT50eF9uZXh0X2RvbmVdLmRldmNzID0gRVRIX1RYX0ZEIHwgRVRIX1RYX0xEOworCQlscC0+dGRfcmluZ1tscC0+dHhfbmV4dF9kb25lXS5saW5rID0gMDsKKwkJbHAtPnRkX3JpbmdbbHAtPnR4X25leHRfZG9uZV0uY2EgPSAwOworCQlscC0+dHhfY291bnQtLTsKKworCQkvKiBHbyBvbiB0byBuZXh0IHRyYW5zbWlzc2lvbiAqLworCQlscC0+dHhfbmV4dF9kb25lID0gKGxwLT50eF9uZXh0X2RvbmUgKyAxKSAmIEtPUklOQV9URFNfTUFTSzsKKwkJdGQgPSAmbHAtPnRkX3JpbmdbbHAtPnR4X25leHRfZG9uZV07CisKKwl9CisKKwkvKiBDbGVhciB0aGUgRE1BIHN0YXR1cyByZWdpc3RlciAqLworCWRtYXMgPSByZWFkbCgmbHAtPnR4X2RtYV9yZWdzLT5kbWFzKTsKKwl3cml0ZWwofmRtYXMsICZscC0+dHhfZG1hX3JlZ3MtPmRtYXMpOworCisJd3JpdGVsKHJlYWRsKCZscC0+dHhfZG1hX3JlZ3MtPmRtYXNtKSAmCisJCQl+KERNQV9TVEFUX0ZJTkkgfCBETUFfU1RBVF9FUlIpLAorCQkJJmxwLT50eF9kbWFfcmVncy0+ZG1hc20pOworCisJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKK30KKworc3RhdGljIGlycXJldHVybl90Citrb3JpbmFfdHhfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgZG1hcywgZG1hc207CisJaXJxcmV0dXJuX3QgcmV0dmFsOworCisJZG1hcyA9IHJlYWRsKCZscC0+dHhfZG1hX3JlZ3MtPmRtYXMpOworCisJaWYgKGRtYXMgJiAoRE1BX1NUQVRfRklOSSB8IERNQV9TVEFUX0VSUikpIHsKKwkJa29yaW5hX3R4KGRldik7CisKKwkJZG1hc20gPSByZWFkbCgmbHAtPnR4X2RtYV9yZWdzLT5kbWFzbSk7CisJCXdyaXRlbChkbWFzbSB8IChETUFfU1RBVF9GSU5JIHwgRE1BX1NUQVRfRVJSKSwKKwkJCQkmbHAtPnR4X2RtYV9yZWdzLT5kbWFzbSk7CisKKwkJaWYgKGxwLT50eF9jaGFpbl9zdGF0dXMgPT0gZGVzY19maWxsZWQgJiYKKwkJCShyZWFkbCgmKGxwLT50eF9kbWFfcmVncy0+ZG1hbmRwdHIpKSA9PSAwKSkgeworCQkJd3JpdGVsKENQSFlTQUREUigmbHAtPnRkX3JpbmdbbHAtPnR4X2NoYWluX2hlYWRdKSwKKwkJCQkmKGxwLT50eF9kbWFfcmVncy0+ZG1hbmRwdHIpKTsKKwkJCWxwLT50eF9jaGFpbl9zdGF0dXMgPSBkZXNjX2VtcHR5OworCQkJbHAtPnR4X2NoYWluX2hlYWQgPSBscC0+dHhfY2hhaW5fdGFpbDsKKwkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQl9CisJCWlmIChkbWFzICYgRE1BX1NUQVRfRVJSKQorCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogRE1BIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCisJCXJldHZhbCA9IElSUV9IQU5ETEVEOworCX0gZWxzZQorCQlyZXR2YWwgPSBJUlFfTk9ORTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQga29yaW5hX2NoZWNrX21lZGlhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpbml0X21lZGlhKQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbWlpX2NoZWNrX21lZGlhKCZscC0+bWlpX2lmLCAwLCBpbml0X21lZGlhKTsKKworCWlmIChscC0+bWlpX2lmLmZ1bGxfZHVwbGV4KQorCQl3cml0ZWwocmVhZGwoJmxwLT5ldGhfcmVncy0+ZXRobWFjMikgfCBFVEhfTUFDMl9GRCwKKwkJCQkJCSZscC0+ZXRoX3JlZ3MtPmV0aG1hYzIpOworCWVsc2UKKwkJd3JpdGVsKHJlYWRsKCZscC0+ZXRoX3JlZ3MtPmV0aG1hYzIpICYgfkVUSF9NQUMyX0ZELAorCQkJCQkJJmxwLT5ldGhfcmVncy0+ZXRobWFjMik7Cit9CisKK3N0YXRpYyB2b2lkIGtvcmluYV9zZXRfY2FycmllcihzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSkKK3sKKwlpZiAobWlpLT5mb3JjZV9tZWRpYSkgeworCQkvKiBhdXRvbmVnIGlzIG9mZjogTGluayBpcyBhbHdheXMgYXNzdW1lZCB0byBiZSB1cCAqLworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobWlpLT5kZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vbihtaWktPmRldik7CisJfSBlbHNlICAvKiBMZXQgTU1JIGxpYnJhcnkgdXBkYXRlIGNhcnJpZXIgc3RhdHVzICovCisJCWtvcmluYV9jaGVja19tZWRpYShtaWktPmRldiwgMCk7Cit9CisKK3N0YXRpYyBpbnQga29yaW5hX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKHJxKTsKKwlpbnQgcmM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOworCXJjID0gZ2VuZXJpY19taWlfaW9jdGwoJmxwLT5taWlfaWYsIGRhdGEsIGNtZCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CisJa29yaW5hX3NldF9jYXJyaWVyKCZscC0+bWlpX2lmKTsKKworCXJldHVybiByYzsKK30KKworLyogZXRodG9vbCBoZWxwZXJzICovCitzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGxwLT5kZXYtPm5hbWUpOworfQorCitzdGF0aWMgaW50IG5ldGRldl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOworCXJjID0gbWlpX2V0aHRvb2xfZ3NldCgmbHAtPm1paV9pZiwgY21kKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBuZXRkZXZfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYzsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwlyYyA9IG1paV9ldGh0b29sX3NzZXQoJmxwLT5taWlfaWYsIGNtZCk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CisJa29yaW5hX3NldF9jYXJyaWVyKCZscC0+bWlpX2lmKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHUzMiBuZXRkZXZfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBtaWlfbGlua19vaygmbHAtPm1paV9pZik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gbmV0ZGV2X2dldF9kcnZpbmZvLAorCS5nZXRfc2V0dGluZ3MgICAgICAgICAgID0gbmV0ZGV2X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzICAgICAgICAgICA9IG5ldGRldl9zZXRfc2V0dGluZ3MsCisJLmdldF9saW5rICAgICAgICAgICAgICAgPSBuZXRkZXZfZ2V0X2xpbmssCit9OworCitzdGF0aWMgdm9pZCBrb3JpbmFfYWxsb2NfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgS09SSU5BX05VTV9URFM7IGkrKykgeworCQlscC0+dGRfcmluZ1tpXS5jb250cm9sID0gRE1BX0RFU0NfSU9GOworCQlscC0+dGRfcmluZ1tpXS5kZXZjcyA9IEVUSF9UWF9GRCB8IEVUSF9UWF9MRDsKKwkJbHAtPnRkX3JpbmdbaV0uY2EgPSAwOworCQlscC0+dGRfcmluZ1tpXS5saW5rID0gMDsKKwl9CisJbHAtPnR4X25leHRfZG9uZSA9IGxwLT50eF9jaGFpbl9oZWFkID0gbHAtPnR4X2NoYWluX3RhaWwgPQorCQkJbHAtPnR4X2Z1bGwgPSBscC0+dHhfY291bnQgPSAwOworCWxwLT50eF9jaGFpbl9zdGF0dXMgPSBkZXNjX2VtcHR5OworCisJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9ycyAqLworCWZvciAoaSA9IDA7IGkgPCBLT1JJTkFfTlVNX1JEUzsgaSsrKSB7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBscC0+cnhfc2tiW2ldOworCisJCXNrYiA9IGRldl9hbGxvY19za2IoS09SSU5BX1JCU0laRSArIDIpOworCQlpZiAoIXNrYikKKwkJCWJyZWFrOworCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQlscC0+cnhfc2tiW2ldID0gc2tiOworCQlscC0+cmRfcmluZ1tpXS5jb250cm9sID0gRE1BX0RFU0NfSU9EIHwKKwkJCQlETUFfQ09VTlQoS09SSU5BX1JCU0laRSk7CisJCWxwLT5yZF9yaW5nW2ldLmRldmNzID0gMDsKKwkJbHAtPnJkX3JpbmdbaV0uY2EgPSBDUEhZU0FERFIoc2tiLT5kYXRhKTsKKwkJbHAtPnJkX3JpbmdbaV0ubGluayA9IENQSFlTQUREUigmbHAtPnJkX3JpbmdbaSsxXSk7CisJfQorCisJLyogbG9vcCBiYWNrICovCisJbHAtPnJkX3JpbmdbaV0ubGluayA9IENQSFlTQUREUigmbHAtPnJkX3JpbmdbMF0pOworCWxwLT5yeF9uZXh0X2RvbmUgID0gMDsKKworCWxwLT5yZF9yaW5nW2ldLmNvbnRyb2wgfD0gRE1BX0RFU0NfQ09EOworCWxwLT5yeF9jaGFpbl9oZWFkID0gMDsKKwlscC0+cnhfY2hhaW5fdGFpbCA9IDA7CisJbHAtPnJ4X2NoYWluX3N0YXR1cyA9IGRlc2NfZW1wdHk7Cit9CisKK3N0YXRpYyB2b2lkIGtvcmluYV9mcmVlX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBLT1JJTkFfTlVNX1JEUzsgaSsrKSB7CisJCWxwLT5yZF9yaW5nW2ldLmNvbnRyb2wgPSAwOworCQlpZiAobHAtPnJ4X3NrYltpXSkKKwkJCWRldl9rZnJlZV9za2JfYW55KGxwLT5yeF9za2JbaV0pOworCQlscC0+cnhfc2tiW2ldID0gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgS09SSU5BX05VTV9URFM7IGkrKykgeworCQlscC0+dGRfcmluZ1tpXS5jb250cm9sID0gMDsKKwkJaWYgKGxwLT50eF9za2JbaV0pCisJCQlkZXZfa2ZyZWVfc2tiX2FueShscC0+dHhfc2tiW2ldKTsKKwkJbHAtPnR4X3NrYltpXSA9IE5VTEw7CisJfQorfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgUkMzMjQzNCBldGhlcm5ldCBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW50IGtvcmluYV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBEaXNhYmxlIERNQSAqLworCWtvcmluYV9hYm9ydF90eChkZXYpOworCWtvcmluYV9hYm9ydF9yeChkZXYpOworCisJLyogcmVzZXQgZXRoZXJuZXQgbG9naWMgKi8KKwl3cml0ZWwoMCwgJmxwLT5ldGhfcmVncy0+ZXRoaW50ZmMpOworCXdoaWxlICgocmVhZGwoJmxwLT5ldGhfcmVncy0+ZXRoaW50ZmMpICYgRVRIX0lOVF9GQ19SSVApKQorCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCS8qIEVuYWJsZSBFdGhlcm5ldCBJbnRlcmZhY2UgKi8KKwl3cml0ZWwoRVRIX0lOVF9GQ19FTiwgJmxwLT5ldGhfcmVncy0+ZXRoaW50ZmMpOworCisJLyogQWxsb2NhdGUgcmluZ3MgKi8KKwlrb3JpbmFfYWxsb2NfcmluZyhkZXYpOworCisJd3JpdGVsKDAsICZscC0+cnhfZG1hX3JlZ3MtPmRtYXMpOworCS8qIFN0YXJ0IFJ4IERNQSAqLworCWtvcmluYV9zdGFydF9yeChscCwgJmxwLT5yZF9yaW5nWzBdKTsKKworCXdyaXRlbChyZWFkbCgmbHAtPnR4X2RtYV9yZWdzLT5kbWFzbSkgJgorCQkJfihETUFfU1RBVF9GSU5JIHwgRE1BX1NUQVRfRVJSKSwKKwkJCSZscC0+dHhfZG1hX3JlZ3MtPmRtYXNtKTsKKwl3cml0ZWwocmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pICYKKwkJCX4oRE1BX1NUQVRfRE9ORSB8IERNQV9TVEFUX0hBTFQgfCBETUFfU1RBVF9FUlIpLAorCQkJJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pOworCisJLyogQWNjZXB0IG9ubHkgcGFja2V0cyBkZXN0aW5lZCBmb3IgdGhpcyBFdGhlcm5ldCBkZXZpY2UgYWRkcmVzcyAqLworCXdyaXRlbChFVEhfQVJDX0FCLCAmbHAtPmV0aF9yZWdzLT5ldGhhcmMpOworCisJLyogU2V0IGFsbCBFdGhlciBzdGF0aW9uIGFkZHJlc3MgcmVnaXN0ZXJzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzICovCisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19MT1coZGV2KSwgJmxwLT5ldGhfcmVncy0+ZXRoc2FsMCk7CisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19ISUdIKGRldiksICZscC0+ZXRoX3JlZ3MtPmV0aHNhaDApOworCisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19MT1coZGV2KSwgJmxwLT5ldGhfcmVncy0+ZXRoc2FsMSk7CisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19ISUdIKGRldiksICZscC0+ZXRoX3JlZ3MtPmV0aHNhaDEpOworCisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19MT1coZGV2KSwgJmxwLT5ldGhfcmVncy0+ZXRoc2FsMik7CisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19ISUdIKGRldiksICZscC0+ZXRoX3JlZ3MtPmV0aHNhaDIpOworCisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19MT1coZGV2KSwgJmxwLT5ldGhfcmVncy0+ZXRoc2FsMyk7CisJd3JpdGVsKFNUQVRJT05fQUREUkVTU19ISUdIKGRldiksICZscC0+ZXRoX3JlZ3MtPmV0aHNhaDMpOworCisKKwkvKiBGcmFtZSBMZW5ndGggQ2hlY2tpbmcsIFBhZCBFbmFibGUsIENSQyBFbmFibGUsIEZ1bGwgRHVwbGV4IHNldCAqLworCXdyaXRlbChFVEhfTUFDMl9QRSB8IEVUSF9NQUMyX0NFTiB8IEVUSF9NQUMyX0ZELAorCQkJJmxwLT5ldGhfcmVncy0+ZXRobWFjMik7CisKKwkvKiBCYWNrIHRvIGJhY2sgaW50ZXItcGFja2V0LWdhcCAqLworCXdyaXRlbCgweDE1LCAmbHAtPmV0aF9yZWdzLT5ldGhpcGd0KTsKKwkvKiBOb24gLSBCYWNrIHRvIGJhY2sgaW50ZXItcGFja2V0LWdhcCAqLworCXdyaXRlbCgweDEyLCAmbHAtPmV0aF9yZWdzLT5ldGhpcGdyKTsKKworCS8qIE1hbmFnZW1lbnQgQ2xvY2sgUHJlc2NhbGVyIERpdmlzb3IKKwkgKiBDbG9jayBpbmRlcGVuZGVudCBzZXR0aW5nICovCisJd3JpdGVsKCgoaWR0X2NwdV9mcmVxKSAvIE1JSV9DTE9DSyArIDEpICYgfjEsCisJCSAgICAgICAmbHAtPmV0aF9yZWdzLT5ldGhtY3ApOworCisJLyogZG9uJ3QgdHJhbnNtaXQgdW50aWwgZmlmbyBjb250YWlucyA0OGIgKi8KKwl3cml0ZWwoNDgsICZscC0+ZXRoX3JlZ3MtPmV0aGZpZm90dCk7CisKKwl3cml0ZWwoRVRIX01BQzFfUkUsICZscC0+ZXRoX3JlZ3MtPmV0aG1hYzEpOworCisJbmFwaV9lbmFibGUoJmxwLT5uYXBpKTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXN0YXJ0IHRoZSBSQzMyNDM0IGV0aGVybmV0IGNvbnRyb2xsZXIuCisgKiBGSVhNRTogY2hlY2sgdGhlIHJldHVybiBzdGF0dXMgd2hlcmUgd2UgY2FsbCBpdAorICovCitzdGF0aWMgaW50IGtvcmluYV9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0cworCSAqLworCWRpc2FibGVfaXJxKGxwLT5yeF9pcnEpOworCWRpc2FibGVfaXJxKGxwLT50eF9pcnEpOworCWRpc2FibGVfaXJxKGxwLT5vdnJfaXJxKTsKKwlkaXNhYmxlX2lycShscC0+dW5kX2lycSk7CisKKwl3cml0ZWwocmVhZGwoJmxwLT50eF9kbWFfcmVncy0+ZG1hc20pIHwKKwkJCQlETUFfU1RBVF9GSU5JIHwgRE1BX1NUQVRfRVJSLAorCQkJCSZscC0+dHhfZG1hX3JlZ3MtPmRtYXNtKTsKKwl3cml0ZWwocmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pIHwKKwkJCQlETUFfU1RBVF9ET05FIHwgRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiwKKwkJCQkmbHAtPnJ4X2RtYV9yZWdzLT5kbWFzbSk7CisKKwlrb3JpbmFfZnJlZV9yaW5nKGRldik7CisKKwlyZXQgPSBrb3JpbmFfaW5pdChkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IGNhbm5vdCByZXN0YXJ0IGRldmljZVxuIiwKKwkJCQkJCQkJZGV2LT5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJa29yaW5hX211bHRpY2FzdF9saXN0KGRldik7CisKKwllbmFibGVfaXJxKGxwLT51bmRfaXJxKTsKKwllbmFibGVfaXJxKGxwLT5vdnJfaXJxKTsKKwllbmFibGVfaXJxKGxwLT50eF9pcnEpOworCWVuYWJsZV9pcnEobHAtPnJ4X2lycSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBrb3JpbmFfY2xlYXJfYW5kX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXdyaXRlbCh2YWx1ZSwgJmxwLT5ldGhfcmVncy0+ZXRoaW50ZmMpOworCWtvcmluYV9yZXN0YXJ0KGRldik7Cit9CisKKy8qIEV0aGVybmV0IFR4IFVuZGVyZmxvdyBpbnRlcnJ1cHQgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBrb3JpbmFfdW5kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdW5kOworCisJc3Bpbl9sb2NrKCZscC0+bG9jayk7CisKKwl1bmQgPSByZWFkbCgmbHAtPmV0aF9yZWdzLT5ldGhpbnRmYyk7CisKKwlpZiAodW5kICYgRVRIX0lOVF9GQ19VTkQpCisJCWtvcmluYV9jbGVhcl9hbmRfcmVzdGFydChkZXYsIHVuZCAmIH5FVEhfSU5UX0ZDX1VORCk7CisKKwlzcGluX3VubG9jaygmbHAtPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBrb3JpbmFfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlrb3JpbmFfcmVzdGFydChkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIEV0aGVybmV0IFJ4IE92ZXJmbG93IGludGVycnVwdCAqLworc3RhdGljIGlycXJldHVybl90Citrb3JpbmFfb3ZyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgb3ZyOworCisJc3Bpbl9sb2NrKCZscC0+bG9jayk7CisJb3ZyID0gcmVhZGwoJmxwLT5ldGhfcmVncy0+ZXRoaW50ZmMpOworCisJaWYgKG92ciAmIEVUSF9JTlRfRkNfT1ZSKQorCQlrb3JpbmFfY2xlYXJfYW5kX3Jlc3RhcnQoZGV2LCBvdnIgJiB+RVRIX0lOVF9GQ19PVlIpOworCisJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBrb3JpbmFfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCWtvcmluYV90eF9kbWFfaW50ZXJydXB0KGRldi0+aXJxLCBkZXYpOworCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQga29yaW5hX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEluaXRpYWxpemUgKi8KKwlyZXQgPSBrb3JpbmFfaW5pdChkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IGNhbm5vdCBvcGVuIGRldmljZVxuIiwgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSW5zdGFsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKwkgKiB0aGF0IGhhbmRsZXMgdGhlIERvbmUgRmluaXNoZWQKKwkgKiBPdnIgYW5kIFVuZCBFdmVudHMgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShscC0+cnhfaXJxLCAma29yaW5hX3J4X2RtYV9pbnRlcnJ1cHQsCisJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgIktvcmluYSBldGhlcm5ldCBSeCIsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogdW5hYmxlIHRvIGdldCBSeCBETUEgSVJRICVkXG4iLAorCQkgICAgZGV2LT5uYW1lLCBscC0+cnhfaXJxKTsKKwkJZ290byBlcnJfcmVsZWFzZTsKKwl9CisJcmV0ID0gcmVxdWVzdF9pcnEobHAtPnR4X2lycSwgJmtvcmluYV90eF9kbWFfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJLb3JpbmEgZXRoZXJuZXQgVHgiLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IHVuYWJsZSB0byBnZXQgVHggRE1BIElSUSAlZFxuIiwKKwkJICAgIGRldi0+bmFtZSwgbHAtPnR4X2lycSk7CisJCWdvdG8gZXJyX2ZyZWVfcnhfaXJxOworCX0KKworCS8qIEluc3RhbGwgaGFuZGxlciBmb3Igb3ZlcnJ1biBlcnJvci4gKi8KKwlyZXQgPSByZXF1ZXN0X2lycShscC0+b3ZyX2lycSwgJmtvcmluYV9vdnJfaW50ZXJydXB0LAorCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAiRXRoZXJuZXQgT3ZlcmZsb3ciLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSIlczogdW5hYmxlIHRvIGdldCBPVlIgSVJRICVkXG4iLAorCQkgICAgZGV2LT5uYW1lLCBscC0+b3ZyX2lycSk7CisJCWdvdG8gZXJyX2ZyZWVfdHhfaXJxOworCX0KKworCS8qIEluc3RhbGwgaGFuZGxlciBmb3IgdW5kZXJmbG93IGVycm9yLiAqLworCXJldCA9IHJlcXVlc3RfaXJxKGxwLT51bmRfaXJxLCAma29yaW5hX3VuZF9pbnRlcnJ1cHQsCisJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJFdGhlcm5ldCBVbmRlcmZsb3ciLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IHVuYWJsZSB0byBnZXQgVU5EIElSUSAlZFxuIiwKKwkJICAgIGRldi0+bmFtZSwgbHAtPnVuZF9pcnEpOworCQlnb3RvIGVycl9mcmVlX292cl9pcnE7CisJfQorCitlcnJfZnJlZV9vdnJfaXJxOgorCWZyZWVfaXJxKGxwLT5vdnJfaXJxLCBkZXYpOworZXJyX2ZyZWVfdHhfaXJxOgorCWZyZWVfaXJxKGxwLT50eF9pcnEsIGRldik7CitlcnJfZnJlZV9yeF9pcnE6CisJZnJlZV9pcnEobHAtPnJ4X2lycSwgZGV2KTsKK2Vycl9yZWxlYXNlOgorCWtvcmluYV9mcmVlX3JpbmcoZGV2KTsKKwlnb3RvIG91dDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGtvcmluYV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrb3JpbmFfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB0bXA7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlkaXNhYmxlX2lycShscC0+cnhfaXJxKTsKKwlkaXNhYmxlX2lycShscC0+dHhfaXJxKTsKKwlkaXNhYmxlX2lycShscC0+b3ZyX2lycSk7CisJZGlzYWJsZV9pcnEobHAtPnVuZF9pcnEpOworCisJa29yaW5hX2Fib3J0X3R4KGRldik7CisJdG1wID0gcmVhZGwoJmxwLT50eF9kbWFfcmVncy0+ZG1hc20pOworCXRtcCA9IHRtcCB8IERNQV9TVEFUX0ZJTkkgfCBETUFfU1RBVF9FUlI7CisJd3JpdGVsKHRtcCwgJmxwLT50eF9kbWFfcmVncy0+ZG1hc20pOworCisJa29yaW5hX2Fib3J0X3J4KGRldik7CisJdG1wID0gcmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pOworCXRtcCA9IHRtcCB8IERNQV9TVEFUX0RPTkUgfCBETUFfU1RBVF9IQUxUIHwgRE1BX1NUQVRfRVJSOworCXdyaXRlbCh0bXAsICZscC0+cnhfZG1hX3JlZ3MtPmRtYXNtKTsKKworCWtvcmluYV9mcmVlX3JpbmcoZGV2KTsKKworCWZyZWVfaXJxKGxwLT5yeF9pcnEsIGRldik7CisJZnJlZV9pcnEobHAtPnR4X2lycSwgZGV2KTsKKwlmcmVlX2lycShscC0+b3ZyX2lycSwgZGV2KTsKKwlmcmVlX2lycShscC0+dW5kX2lycSwgZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtvcmluYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBrb3JpbmFfZGV2aWNlICpiaWYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCByZXR2YWwsIGVycjsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qga29yaW5hX3ByaXZhdGUpKTsKKwlpZiAoIWRldikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlscCA9IG5ldGRldl9wcml2KGRldik7CisKKwliaWYtPmRldiA9IGRldjsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYmlmLT5tYWMsIDYpOworCisJbHAtPnJ4X2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJrb3JpbmFfcngiKTsKKwlscC0+dHhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImtvcmluYV90eCIpOworCWxwLT5vdnJfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImtvcmluYV9vdnIiKTsKKwlscC0+dW5kX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJrb3JpbmFfdW5kIik7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImtvcmluYV9yZWdzIik7CisJZGV2LT5iYXNlX2FkZHIgPSByLT5zdGFydDsKKwlscC0+ZXRoX3JlZ3MgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKKwlpZiAoIWxwLT5ldGhfcmVncykgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgImNhbm5vdCByZW1hcCByZWdpc3RlcnNcbiIpOworCQlyZXR2YWwgPSAtRU5YSU87CisJCWdvdG8gcHJvYmVfZXJyX291dDsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImtvcmluYV9kbWFfcngiKTsKKwlscC0+cnhfZG1hX3JlZ3MgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKKwlpZiAoIWxwLT5yeF9kbWFfcmVncykgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgImNhbm5vdCByZW1hcCBSeCBETUEgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dmFsID0gLUVOWElPOworCQlnb3RvIHByb2JlX2Vycl9kbWFfcng7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJrb3JpbmFfZG1hX3R4Iik7CisJbHAtPnR4X2RtYV9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CisJaWYgKCFscC0+dHhfZG1hX3JlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJjYW5ub3QgcmVtYXAgVHggRE1BIHJlZ2lzdGVyc1xuIik7CisJCXJldHZhbCA9IC1FTlhJTzsKKwkJZ290byBwcm9iZV9lcnJfZG1hX3R4OworCX0KKworCWxwLT50ZF9yaW5nID0ga21hbGxvYyhURF9SSU5HX1NJWkUgKyBSRF9SSU5HX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbHAtPnRkX3JpbmcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJjYW5ub3QgYWxsb2NhdGUgZGVzY3JpcHRvcnNcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIHByb2JlX2Vycl90ZF9yaW5nOworCX0KKworCWRtYV9jYWNoZV9pbnYoKHVuc2lnbmVkIGxvbmcpKGxwLT50ZF9yaW5nKSwKKwkJCVREX1JJTkdfU0laRSArIFJEX1JJTkdfU0laRSk7CisKKwkvKiBub3cgY29udmVydCBURF9SSU5HIHBvaW50ZXIgdG8gS1NFRzEgKi8KKwlscC0+dGRfcmluZyA9IChzdHJ1Y3QgZG1hX2Rlc2MgKilLU0VHMUFERFIobHAtPnRkX3JpbmcpOworCWxwLT5yZF9yaW5nID0gJmxwLT50ZF9yaW5nW0tPUklOQV9OVU1fVERTXTsKKworCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CisJLyoganVzdCB1c2UgdGhlIHJ4IGRtYSBpcnEgKi8KKwlkZXYtPmlycSA9IGxwLT5yeF9pcnE7CisJbHAtPmRldiA9IGRldjsKKworCWRldi0+b3BlbiA9IGtvcmluYV9vcGVuOworCWRldi0+c3RvcCA9IGtvcmluYV9jbG9zZTsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGtvcmluYV9zZW5kX3BhY2tldDsKKwlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZrb3JpbmFfbXVsdGljYXN0X2xpc3Q7CisJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CisJZGV2LT50eF90aW1lb3V0ID0ga29yaW5hX3R4X3RpbWVvdXQ7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CisJZGV2LT5kb19pb2N0bCA9ICZrb3JpbmFfaW9jdGw7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwlkZXYtPnBvbGxfY29udHJvbGxlciA9IGtvcmluYV9wb2xsX2NvbnRyb2xsZXI7CisjZW5kaWYKKwluZXRpZl9uYXBpX2FkZChkZXYsICZscC0+bmFwaSwga29yaW5hX3BvbGwsIDY0KTsKKworCWxwLT5waHlfYWRkciA9ICgoKGxwLT5yeF9pcnEgPT0gMHgyYz8gMTowKSA8PCA4KSB8IDB4MDUpOworCWxwLT5taWlfaWYuZGV2ID0gZGV2OworCWxwLT5taWlfaWYubWRpb19yZWFkID0gbWRpb19yZWFkOworCWxwLT5taWlfaWYubWRpb193cml0ZSA9IG1kaW9fd3JpdGU7CisJbHAtPm1paV9pZi5waHlfaWQgPSBscC0+cGh5X2FkZHI7CisJbHAtPm1paV9pZi5waHlfaWRfbWFzayA9IDB4MWY7CisJbHAtPm1paV9pZi5yZWdfbnVtX21hc2sgPSAweDFmOworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSI6IGNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlICVkXG4iLCBlcnIpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIHByb2JlX2Vycl9yZWdpc3RlcjsKKwl9CisJcmV0dXJuIDA7CisKK3Byb2JlX2Vycl9yZWdpc3RlcjoKKwlrZnJlZShscC0+dGRfcmluZyk7Citwcm9iZV9lcnJfdGRfcmluZzoKKwlpb3VubWFwKGxwLT50eF9kbWFfcmVncyk7Citwcm9iZV9lcnJfZG1hX3R4OgorCWlvdW5tYXAobHAtPnJ4X2RtYV9yZWdzKTsKK3Byb2JlX2Vycl9kbWFfcng6CisJaW91bm1hcChscC0+ZXRoX3JlZ3MpOworcHJvYmVfZXJyX291dDoKKwlmcmVlX25ldGRldihkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQga29yaW5hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBrb3JpbmFfZGV2aWNlICpiaWYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoYmlmLT5kZXYpOworCisJaWYgKGxwLT5ldGhfcmVncykKKwkJaW91bm1hcChscC0+ZXRoX3JlZ3MpOworCWlmIChscC0+cnhfZG1hX3JlZ3MpCisJCWlvdW5tYXAobHAtPnJ4X2RtYV9yZWdzKTsKKwlpZiAobHAtPnR4X2RtYV9yZWdzKQorCQlpb3VubWFwKGxwLT50eF9kbWFfcmVncyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl1bnJlZ2lzdGVyX25ldGRldihiaWYtPmRldik7CisJZnJlZV9uZXRkZXYoYmlmLT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGtvcmluYV9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lID0gImtvcmluYSIsCisJLnByb2JlID0ga29yaW5hX3Byb2JlLAorCS5yZW1vdmUgPSBrb3JpbmFfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQga29yaW5hX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigma29yaW5hX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGtvcmluYV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigma29yaW5hX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGtvcmluYV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChrb3JpbmFfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJQaGlsaXAgUmlzY2hlbCA8cmlzY2hlbHBAaWR0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIkZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklEVCBSQzMyNDM0IChLb3JpbmEpIEV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKaW5kZXggZjJhNmU3MS4uNDFiNzc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYworKysgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAlpZiAoIWRldikKIAkJZ290byBvdXQ7CiAKLQlkZXYtPm5kX25ldCA9IG5ldDsKKwlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV9uZXRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNiLmMgYi9kcml2ZXJzL25ldC9tYWNiLmMKaW5kZXggODFiZjAwNS4uZDUxM2JiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjYi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY2IuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIAkJCWlmIChwaHlkZXYtPmR1cGxleCkKIAkJCQlyZWcgfD0gTUFDQl9CSVQoRkQpOwotCQkJaWYgKHBoeWRldi0+c3BlZWQpCisJCQlpZiAocGh5ZGV2LT5zcGVlZCA9PSBTUEVFRF8xMDApCiAJCQkJcmVnIHw9IE1BQ0JfQklUKFNQRCk7CiAKIAkJCW1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgcmVnKTsKQEAgLTI0MiwxMiArMjQyLDEyIEBACiAJLyogRW5hYmxlIG1hbmFnbWVudCBwb3J0ICovCiAJbWFjYl93cml0ZWwoYnAsIE5DUiwgTUFDQl9CSVQoTVBFKSk7CiAKLQlicC0+bWlpX2J1cy5uYW1lID0gIk1BQ0JfbWlpX2J1cyIsCi0JYnAtPm1paV9idXMucmVhZCA9ICZtYWNiX21kaW9fcmVhZCwKLQlicC0+bWlpX2J1cy53cml0ZSA9ICZtYWNiX21kaW9fd3JpdGUsCi0JYnAtPm1paV9idXMucmVzZXQgPSAmbWFjYl9tZGlvX3Jlc2V0LAotCWJwLT5taWlfYnVzLmlkID0gYnAtPnBkZXYtPmlkLAotCWJwLT5taWlfYnVzLnByaXYgPSBicCwKKwlicC0+bWlpX2J1cy5uYW1lID0gIk1BQ0JfbWlpX2J1cyI7CisJYnAtPm1paV9idXMucmVhZCA9ICZtYWNiX21kaW9fcmVhZDsKKwlicC0+bWlpX2J1cy53cml0ZSA9ICZtYWNiX21kaW9fd3JpdGU7CisJYnAtPm1paV9idXMucmVzZXQgPSAmbWFjYl9tZGlvX3Jlc2V0OworCXNucHJpbnRmKGJwLT5taWlfYnVzLmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIGJwLT5wZGV2LT5pZCk7CisJYnAtPm1paV9idXMucHJpdiA9IGJwOwogCWJwLT5taWlfYnVzLmRldiA9ICZicC0+ZGV2LT5kZXY7CiAJcGRhdGEgPSBicC0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKQEAgLTEyNTcsNiArMTI1Nyw4IEBACiAKIAlpZiAoZGV2KSB7CiAJCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaWYgKGJwLT5waHlfZGV2KQorCQkJcGh5X2Rpc2Nvbm5lY3QoYnAtPnBoeV9kZXYpOwogCQltZGlvYnVzX3VucmVnaXN0ZXIoJmJwLT5taWlfYnVzKTsKIAkJa2ZyZWUoYnAtPm1paV9idXMuaXJxKTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCBmNjUxYTgxLi4yMDU2Y2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAlpZiAoIXRiW0lGTEFfTElOS10pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbG93ZXJkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoZGV2LT5uZF9uZXQsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTsKKwlsb3dlcmRldiA9IF9fZGV2X2dldF9ieV9pbmRleChkZXZfbmV0KGRldiksIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTsKIAlpZiAobG93ZXJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYyBiL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYwppbmRleCA2YjMyZWM5Li5hYTk1Mjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCkBAIC02OSw3ICs2OSw3IEBACiAJaWYgKHJlYWRsKHByaXYtPmNhdGFzX2Vyci5tYXApKSB7CiAJCWR1bXBfZXJyX2J1ZihkZXYpOwogCi0JCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBNTFg0X0VWRU5UX1RZUEVfTE9DQUxfQ0FUQVNfRVJST1IsIDAsIDApOworCQltbHg0X2Rpc3BhdGNoX2V2ZW50KGRldiwgTUxYNF9ERVZfRVZFTlRfQ0FUQVNUUk9QSElDX0VSUk9SLCAwKTsKIAogCQlpZiAoaW50ZXJuYWxfZXJyX3Jlc2V0KSB7CiAJCQlzcGluX2xvY2soJmNhdGFzX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jbWQuYyBiL2RyaXZlcnMvbmV0L21seDQvY21kLmMKaW5kZXggZGI0OTA1MS4uNzBkZmY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9jbWQuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2NtZC5jCkBAIC0xMDYsNyArMTA2LDggQEAKIAl1MTYJCQl0b2tlbjsKIH07CiAKLXN0YXRpYyBpbnQgbWx4NF9zdGF0dXNfdG9fZXJybm8odTggc3RhdHVzKSB7CitzdGF0aWMgaW50IG1seDRfc3RhdHVzX3RvX2Vycm5vKHU4IHN0YXR1cykKK3sKIAlzdGF0aWMgY29uc3QgaW50IHRyYW5zX3RhYmxlW10gPSB7CiAJCVtDTURfU1RBVF9JTlRFUk5BTF9FUlJdCSAgPSAtRUlPLAogCQlbQ01EX1NUQVRfQkFEX09QXQkgID0gLUVQRVJNLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jcS5jIGIvZHJpdmVycy9uZXQvbWx4NC9jcS5jCmluZGV4IGQ0NDQxZmUuLmNhYTViY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvY3EuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2NxLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvY3EuaD4KIAogI2luY2x1ZGUgIm1seDQuaCIKICNpbmNsdWRlICJpY20uaCIKQEAgLTQ3LDIxICs0OCwxOSBAQAogCXUxNgkJCXJlc2VydmVkMVszXTsKIAlfX2JlMTYJCQlwYWdlX29mZnNldDsKIAlfX2JlMzIJCQlsb2dzaXplX3VzcnBhZ2U7Ci0JdTgJCQlyZXNlcnZlZDI7Ci0JdTgJCQljcV9wZXJpb2Q7Ci0JdTgJCQlyZXNlcnZlZDM7Ci0JdTgJCQljcV9tYXhfY291bnQ7Ci0JdTgJCQlyZXNlcnZlZDRbM107CisJX19iZTE2CQkJY3FfcGVyaW9kOworCV9fYmUxNgkJCWNxX21heF9jb3VudDsKKwl1OAkJCXJlc2VydmVkMlszXTsKIAl1OAkJCWNvbXBfZXFuOwogCXU4CQkJbG9nX3BhZ2Vfc2l6ZTsKLQl1OAkJCXJlc2VydmVkNVsyXTsKKwl1OAkJCXJlc2VydmVkM1syXTsKIAl1OAkJCW10dF9iYXNlX2FkZHJfaDsKIAlfX2JlMzIJCQltdHRfYmFzZV9hZGRyX2w7CiAJX19iZTMyCQkJbGFzdF9ub3RpZmllZF9pbmRleDsKIAlfX2JlMzIJCQlzb2xpY2l0X3Byb2R1Y2VyX2luZGV4OwogCV9fYmUzMgkJCWNvbnN1bWVyX2luZGV4OwogCV9fYmUzMgkJCXByb2R1Y2VyX2luZGV4OwotCXUzMgkJCXJlc2VydmVkNlsyXTsKKwl1MzIJCQlyZXNlcnZlZDRbMl07CiAJX19iZTY0CQkJZGJfcmVjX2FkZHI7CiB9OwogCkBAIC0xMjEsNiArMTIwLDEzIEBACiAJCQlNTFg0X0NNRF9USU1FX0NMQVNTX0EpOwogfQogCitzdGF0aWMgaW50IG1seDRfTU9ESUZZX0NRKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveCwKKwkJCSBpbnQgY3FfbnVtLCB1MzIgb3Btb2QpCit7CisJcmV0dXJuIG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCBjcV9udW0sIG9wbW9kLCBNTFg0X0NNRF9NT0RJRllfQ1EsCisJCQlNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworfQorCiBzdGF0aWMgaW50IG1seDRfSFcyU1dfQ1Eoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94LAogCQkJIGludCBjcV9udW0pCiB7CkBAIC0xMjksNiArMTM1LDU4IEBACiAJCQkgICAgTUxYNF9DTURfVElNRV9DTEFTU19BKTsKIH0KIAoraW50IG1seDRfY3FfbW9kaWZ5KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9jcSAqY3EsCisJCSAgIHUxNiBjb3VudCwgdTE2IHBlcmlvZCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlzdHJ1Y3QgbWx4NF9jcV9jb250ZXh0ICpjcV9jb250ZXh0OworCWludCBlcnI7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCisJY3FfY29udGV4dCA9IG1haWxib3gtPmJ1ZjsKKwltZW1zZXQoY3FfY29udGV4dCwgMCwgc2l6ZW9mICpjcV9jb250ZXh0KTsKKworCWNxX2NvbnRleHQtPmNxX21heF9jb3VudCA9IGNwdV90b19iZTE2KGNvdW50KTsKKwljcV9jb250ZXh0LT5jcV9wZXJpb2QgICAgPSBjcHVfdG9fYmUxNihwZXJpb2QpOworCisJZXJyID0gbWx4NF9NT0RJRllfQ1EoZGV2LCBtYWlsYm94LCBjcS0+Y3FuLCAxKTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X2NxX21vZGlmeSk7CisKK2ludCBtbHg0X2NxX3Jlc2l6ZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY3EgKmNxLAorCQkgICBpbnQgZW50cmllcywgc3RydWN0IG1seDRfbXR0ICptdHQpCit7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisJc3RydWN0IG1seDRfY3FfY29udGV4dCAqY3FfY29udGV4dDsKKwl1NjQgbXR0X2FkZHI7CisJaW50IGVycjsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisKKwljcV9jb250ZXh0ID0gbWFpbGJveC0+YnVmOworCW1lbXNldChjcV9jb250ZXh0LCAwLCBzaXplb2YgKmNxX2NvbnRleHQpOworCisJY3FfY29udGV4dC0+bG9nc2l6ZV91c3JwYWdlID0gY3B1X3RvX2JlMzIoaWxvZzIoZW50cmllcykgPDwgMjQpOworCWNxX2NvbnRleHQtPmxvZ19wYWdlX3NpemUgICA9IG10dC0+cGFnZV9zaGlmdCAtIDEyOworCW10dF9hZGRyID0gbWx4NF9tdHRfYWRkcihkZXYsIG10dCk7CisJY3FfY29udGV4dC0+bXR0X2Jhc2VfYWRkcl9oID0gbXR0X2FkZHIgPj4gMzI7CisJY3FfY29udGV4dC0+bXR0X2Jhc2VfYWRkcl9sID0gY3B1X3RvX2JlMzIobXR0X2FkZHIgJiAweGZmZmZmZmZmKTsKKworCWVyciA9IG1seDRfTU9ESUZZX0NRKGRldiwgbWFpbGJveCwgY3EtPmNxbiwgMSk7CisKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9jcV9yZXNpemUpOworCiBpbnQgbWx4NF9jcV9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IG5lbnQsIHN0cnVjdCBtbHg0X210dCAqbXR0LAogCQkgIHN0cnVjdCBtbHg0X3VhciAqdWFyLCB1NjQgZGJfcmVjLCBzdHJ1Y3QgbWx4NF9jcSAqY3EpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKaW5kZXggOWMzNmMyMC4uZTE0MWExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lcS5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZXEuYwpAQCAtMjAyLDcgKzIwMiwxMCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfUE9SVF9DSEFOR0U6Ci0JCQltbHg0X2Rpc3BhdGNoX2V2ZW50KGRldiwgZXFlLT50eXBlLCBlcWUtPnN1YnR5cGUsCisJCQltbHg0X2Rpc3BhdGNoX2V2ZW50KGRldiwKKwkJCQkJICAgIGVxZS0+c3VidHlwZSA9PSBNTFg0X1BPUlRfQ0hBTkdFX1NVQlRZUEVfQUNUSVZFID8KKwkJCQkJICAgIE1MWDRfREVWX0VWRU5UX1BPUlRfVVAgOgorCQkJCQkgICAgTUxYNF9ERVZfRVZFTlRfUE9SVF9ET1dOLAogCQkJCQkgICAgYmUzMl90b19jcHUoZXFlLT5ldmVudC5wb3J0X2NoYW5nZS5wb3J0KSA+PiAyOCk7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9mdy5jIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCmluZGV4IDYxZGM0OTUuLmQ4MmYyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZncuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9BVl9PRkZTRVQJCTB4MjcKICNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfUkVRX1FQX09GRlNFVAkJMHgyOQogI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9SRVNfUVBfT0ZGU0VUCQkweDJiCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX0dTT19PRkZTRVQJCTB4MmQKICNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfUkRNQV9PRkZTRVQJCTB4MmYKICNkZWZpbmUgUVVFUllfREVWX0NBUF9SU1pfU1JRX09GRlNFVAkJMHgzMwogI2RlZmluZSBRVUVSWV9ERVZfQ0FQX0FDS19ERUxBWV9PRkZTRVQJCTB4MzUKQEAgLTIxNSw2ICsyMTYsMTMgQEAKIAlkZXZfY2FwLT5tYXhfcmVxdWVzdGVyX3Blcl9xcCA9IDEgPDwgKGZpZWxkICYgMHgzZik7CiAJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfUkVTX1FQX09GRlNFVCk7CiAJZGV2X2NhcC0+bWF4X3Jlc3BvbmRlcl9wZXJfcXAgPSAxIDw8IChmaWVsZCAmIDB4M2YpOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX0dTT19PRkZTRVQpOworCWZpZWxkICY9IDB4MWY7CisJaWYgKCFmaWVsZCkKKwkJZGV2X2NhcC0+bWF4X2dzb19zeiA9IDA7CisJZWxzZQorCQlkZXZfY2FwLT5tYXhfZ3NvX3N6ID0gMSA8PCBmaWVsZDsKKwogCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX1JETUFfT0ZGU0VUKTsKIAlkZXZfY2FwLT5tYXhfcmRtYV9nbG9iYWwgPSAxIDw8IChmaWVsZCAmIDB4M2YpOwogCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfQUNLX0RFTEFZX09GRlNFVCk7CkBAIC0zNzcsNiArMzg1LDcgQEAKIAkJIGRldl9jYXAtPm1heF9zcV9kZXNjX3N6LCBkZXZfY2FwLT5tYXhfc3Ffc2cpOwogCW1seDRfZGJnKGRldiwgIk1heCBSUSBkZXNjIHNpemU6ICVkLCBtYXggUlEgUy9HOiAlZFxuIiwKIAkJIGRldl9jYXAtPm1heF9ycV9kZXNjX3N6LCBkZXZfY2FwLT5tYXhfcnFfc2cpOworCW1seDRfZGJnKGRldiwgIk1heCBHU08gc2l6ZTogJWRcbiIsIGRldl9jYXAtPm1heF9nc29fc3opOwogCiAJZHVtcF9kZXZfY2FwX2ZsYWdzKGRldiwgZGV2X2NhcC0+ZmxhZ3MpOwogCkBAIC02OTYsNiArNzA1LDEwIEBACiAJLyogQ2hlY2sgcG9ydCBmb3IgVUQgYWRkcmVzcyB2ZWN0b3I6ICovCiAJKihpbmJveCArIElOSVRfSENBX0ZMQUdTX09GRlNFVCAvIDQpIHw9IGNwdV90b19iZTMyKDEpOwogCisJLyogRW5hYmxlIElQb0lCIGNoZWNrc3VtbWluZyBpZiB3ZSBjYW46ICovCisJaWYgKGRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX0lQT0lCX0NTVU0pCisJCSooaW5ib3ggKyBJTklUX0hDQV9GTEFHU19PRkZTRVQgLyA0KSB8PSBjcHVfdG9fYmUzMigxIDw8IDMpOworCiAJLyogUVBDL0VFQy9DUUMvRVFDL1JETUFSQyBhdHRyaWJ1dGVzICovCiAKIAlNTFg0X1BVVChpbmJveCwgcGFyYW0tPnFwY19iYXNlLCAgICAgIElOSVRfSENBX1FQQ19CQVNFX09GRlNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2Z3LmggYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmgKaW5kZXggZTE2ZGVjOC4uMzA2Y2I5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9mdy5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZncuaApAQCAtOTYsNiArOTYsNyBAQAogCXU4ICBibW1lX2ZsYWdzOwogCXUzMiByZXNlcnZlZF9sa2V5OwogCXU2NCBtYXhfaWNtX3N6OworCWludCBtYXhfZ3NvX3N6OwogfTsKIAogc3RydWN0IG1seDRfYWRhcHRlciB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2ludGYuYyBiL2RyaXZlcnMvbmV0L21seDQvaW50Zi5jCmluZGV4IGJlNWQ5ZTkuLjRhNmM0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvaW50Zi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvaW50Zi5jCkBAIC0zMCw4ICszMCw2IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbWx4NC9kcml2ZXIuaD4KLQogI2luY2x1ZGUgIm1seDQuaCIKIAogc3RydWN0IG1seDRfZGV2aWNlX2NvbnRleHQgewpAQCAtMTEzLDggKzExMSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3VucmVnaXN0ZXJfaW50ZXJmYWNlKTsKIAotdm9pZCBtbHg0X2Rpc3BhdGNoX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBlbnVtIG1seDRfZXZlbnQgdHlwZSwKLQkJCSBpbnQgc3VidHlwZSwgaW50IHBvcnQpCit2b2lkIG1seDRfZGlzcGF0Y2hfZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIGVudW0gbWx4NF9kZXZfZXZlbnQgdHlwZSwgaW50IHBvcnQpCiB7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwogCXN0cnVjdCBtbHg0X2RldmljZV9jb250ZXh0ICpkZXZfY3R4OwpAQCAtMTI0LDggKzEyMSw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldl9jdHgsICZwcml2LT5jdHhfbGlzdCwgbGlzdCkKIAkJaWYgKGRldl9jdHgtPmludGYtPmV2ZW50KQotCQkJZGV2X2N0eC0+aW50Zi0+ZXZlbnQoZGV2LCBkZXZfY3R4LT5jb250ZXh0LCB0eXBlLAotCQkJCQkgICAgIHN1YnR5cGUsIHBvcnQpOworCQkJZGV2X2N0eC0+aW50Zi0+ZXZlbnQoZGV2LCBkZXZfY3R4LT5jb250ZXh0LCB0eXBlLCBwb3J0KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmN0eF9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDA4YmZjMTMuLjQ5YTRhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC03Niw3ICs3Niw3IEBACiAJRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKIAogc3RhdGljIHN0cnVjdCBtbHg0X3Byb2ZpbGUgZGVmYXVsdF9wcm9maWxlID0gewotCS5udW1fcXAJCT0gMSA8PCAxNiwKKwkubnVtX3FwCQk9IDEgPDwgMTcsCiAJLm51bV9zcnEJPSAxIDw8IDE2LAogCS5yZG1hcmNfcGVyX3FwCT0gMSA8PCA0LAogCS5udW1fY3EJCT0gMSA8PCAxNiwKQEAgLTE1OSw2ICsxNTksNyBAQAogCWRldi0+Y2Fwcy5wYWdlX3NpemVfY2FwCSAgICAgPSB+KHUzMikgKGRldl9jYXAtPm1pbl9wYWdlX3N6IC0gMSk7CiAJZGV2LT5jYXBzLmZsYWdzCQkgICAgID0gZGV2X2NhcC0+ZmxhZ3M7CiAJZGV2LT5jYXBzLnN0YXRfcmF0ZV9zdXBwb3J0ICA9IGRldl9jYXAtPnN0YXRfcmF0ZV9zdXBwb3J0OworCWRldi0+Y2Fwcy5tYXhfZ3NvX3N6CSAgICAgPSBkZXZfY2FwLT5tYXhfZ3NvX3N6OwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MzUsOCArNzM2LDcgQEAKIAl9CiAKIAkvKgotCSAqIENoZWNrIGZvciBCQVJzLiAgV2UgZXhwZWN0IDA6IDFNQiwgMjogOE1CLCA0OiBERFIgKG1heSBub3QKLQkgKiBiZSBwcmVzZW50KQorCSAqIENoZWNrIGZvciBCQVJzLiAgV2UgZXhwZWN0IDA6IDFNQgogCSAqLwogCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSB8fAogCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApICE9IDEgPDwgMjApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWNnLmMgYi9kcml2ZXJzL25ldC9tbHg0L21jZy5jCmluZGV4IGE5OWU3NzIuLjU3ZjdmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWNnLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tY2cuYwpAQCAtMTkwLDEwICsxOTAsNiBAQAogCQl9CiAJCWluZGV4ICs9IGRldi0+Y2Fwcy5udW1fbWdtczsKIAotCQllcnIgPSBtbHg0X1JFQURfTUNHKGRldiwgaW5kZXgsIG1haWxib3gpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KIAkJbWVtc2V0KG1nbSwgMCwgc2l6ZW9mICptZ20pOwogCQltZW1jcHkobWdtLT5naWQsIGdpZCwgMTYpOwogCX0KQEAgLTMwMSwxMiArMjk3LDEwIEBACiAJbWdtLT5xcFtsb2NdICAgICAgID0gbWdtLT5xcFtpIC0gMV07CiAJbWdtLT5xcFtpIC0gMV0gICAgID0gMDsKIAotCWVyciA9IG1seDRfV1JJVEVfTUNHKGRldiwgaW5kZXgsIG1haWxib3gpOwotCWlmIChlcnIpCisJaWYgKGkgIT0gMSkgeworCQllcnIgPSBtbHg0X1dSSVRFX01DRyhkZXYsIGluZGV4LCBtYWlsYm94KTsKIAkJZ290byBvdXQ7Ci0KLQlpZiAoaSAhPSAxKQotCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAocHJldiA9PSAtMSkgewogCQkvKiBSZW1vdmUgZW50cnkgZnJvbSBNR00gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKaW5kZXggNTNhMWNkZC4uNzMzMzY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAjaW5jbHVkZSA8bGludXgvbWx4NC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L21seDQvZG9vcmJlbGwuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkibWx4NF9jb3JlIgpAQCAtMzEzLDggKzMxNCw3IEBACiBpbnQgbWx4NF9yZXN0YXJ0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgbWx4NF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogdm9pZCBtbHg0X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKLXZvaWQgbWx4NF9kaXNwYXRjaF9ldmVudChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgZW51bSBtbHg0X2V2ZW50IHR5cGUsCi0JCQkgaW50IHN1YnR5cGUsIGludCBwb3J0KTsKK3ZvaWQgbWx4NF9kaXNwYXRjaF9ldmVudChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgZW51bSBtbHg0X2Rldl9ldmVudCB0eXBlLCBpbnQgcG9ydCk7CiAKIHN0cnVjdCBtbHg0X2Rldl9jYXA7CiBzdHJ1Y3QgbWx4NF9pbml0X2hjYV9wYXJhbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IGI1MjhjZTcuLjYwMWZmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMyw3ICszLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwMiBNYXR0aGV3IERoYXJtIDxtZGhhcm1AbW9tZW5jby5jb20+CiAgKgogICogQmFzZWQgb24gdGhlIDY0MzYwIGRyaXZlciBmcm9tOgotICogQ29weXJpZ2h0IChDKSAyMDAyIHJhYmVlaEBnYWxpbGVvLmNvLmlsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmFiZWVoIEtob3VyeSA8cmFiZWVoQGdhbGlsZW8uY28uaWw+CisgKgkJICAgICAgUmFiZWVoIEtob3VyeSA8cmFiZWVoQG1hcnZlbGwuY29tPgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMyBQTUMtU2llcnJhLCBJbmMuLAogICoJd3JpdHRlbiBieSBNYW5pc2ggTGFjaHdhbmkKQEAgLTE2LDYgKzE3LDkgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCBTdGV2ZW4gSi4gSGlsbCA8c2poaWxsMUByb2Nrd2VsbGNvbGxpbnMuY29tPgogICoJCQkJICAgICA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbT4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqCQkJICAgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCkBAIC02MywyMCArNjcsNiBAQAogI2RlZmluZSBNVjY0M1hYX1RYX0ZBU1RfUkVGSUxMCiAjdW5kZWYJTVY2NDNYWF9DT0FMCiAKLS8qCi0gKiBOdW1iZXIgb2YgUlggLyBUWCBkZXNjcmlwdG9ycyBvbiBSWCAvIFRYIHJpbmdzLgotICogTm90ZSB0aGF0IGFsbG9jYXRpbmcgUlggZGVzY3JpcHRvcnMgaXMgZG9uZSBieSBhbGxvY2F0aW5nIHRoZSBSWAotICogcmluZyBBTkQgYSBwcmVhbGxvY2F0ZWQgUlggYnVmZmVycyAoc2tiJ3MpIGZvciBlYWNoIGRlc2NyaXB0b3IuCi0gKiBUaGUgVFggZGVzY3JpcHRvcnMgb25seSBhbGxvY2F0ZXMgdGhlIFRYIGRlc2NyaXB0b3JzIHJpbmcsCi0gKiB3aXRoIG5vIHByZSBhbGxvY2F0ZWQgVFggYnVmZmVycyAoc2tiJ3MgYXJlIGFsbG9jYXRlZCBieSBoaWdoZXIgbGF5ZXJzLgotICovCi0KLS8qIERlZmF1bHQgVFggcmluZyBzaXplIGlzIDEwMDAgZGVzY3JpcHRvcnMgKi8KLSNkZWZpbmUgTVY2NDNYWF9ERUZBVUxUX1RYX1FVRVVFX1NJWkUgMTAwMAotCi0vKiBEZWZhdWx0IFJYIHJpbmcgc2l6ZSBpcyA0MDAgZGVzY3JpcHRvcnMgKi8KLSNkZWZpbmUgTVY2NDNYWF9ERUZBVUxUX1JYX1FVRVVFX1NJWkUgNDAwCi0KICNkZWZpbmUgTVY2NDNYWF9UWF9DT0FMIDEwMAogI2lmZGVmIE1WNjQzWFhfQ09BTAogI2RlZmluZSBNVjY0M1hYX1JYX0NPQUwgMTAwCkBAIC00MzQsMTQgKzQyNCw2IEBACiAJRVRIX1FVRVVFX0xBU1RfUkVTT1VSQ0UJLyogUmluZyByZXNvdXJjZXMgYWJvdXQgdG8gZXhoYXVzdC4JKi8KIH0gRVRIX0ZVTkNfUkVUX1NUQVRVUzsKIAotdHlwZWRlZiBlbnVtIF9ldGhfdGFyZ2V0IHsKLQlFVEhfVEFSR0VUX0RSQU0sCi0JRVRIX1RBUkdFVF9ERVZJQ0UsCi0JRVRIX1RBUkdFVF9DQlMsCi0JRVRIX1RBUkdFVF9QQ0kwLAotCUVUSF9UQVJHRVRfUENJMQotfSBFVEhfVEFSR0VUOwotCiAvKiBUaGVzZSBhcmUgZm9yIGJpZy1lbmRpYW4gbWFjaGluZXMuICBMaXR0bGUgZW5kaWFuIG5lZWRzIGRpZmZlcmVudAogICogZGVmaW5pdGlvbnMuCiAgKi8KQEAgLTU4Niw0MyArNTY4LDQ0IEBACiAKIC8qIFN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyB2b2lkIGV0aF9wb3J0X2luaXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwotc3RhdGljIHZvaWQgZXRoX3BvcnRfcmVzZXQodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSk7CitzdGF0aWMgdm9pZCBldGhfcG9ydF9yZXNldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCk7CiBzdGF0aWMgdm9pZCBldGhfcG9ydF9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotc3RhdGljIHZvaWQgZXRoZXJuZXRfcGh5X3Jlc2V0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOworc3RhdGljIHZvaWQgZXRoZXJuZXRfcGh5X3Jlc2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKTsKIAotc3RhdGljIHZvaWQgZXRoX3BvcnRfd3JpdGVfc21pX3JlZyh1bnNpZ25lZCBpbnQgZXRoX3BvcnRfbnVtLAorc3RhdGljIHZvaWQgZXRoX3BvcnRfd3JpdGVfc21pX3JlZyhzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKIAkJCQkgICB1bnNpZ25lZCBpbnQgcGh5X3JlZywgdW5zaWduZWQgaW50IHZhbHVlKTsKIAotc3RhdGljIHZvaWQgZXRoX3BvcnRfcmVhZF9zbWlfcmVnKHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0sCitzdGF0aWMgdm9pZCBldGhfcG9ydF9yZWFkX3NtaV9yZWcoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCiAJCQkJICB1bnNpZ25lZCBpbnQgcGh5X3JlZywgdW5zaWduZWQgaW50ICp2YWx1ZSk7CiAKLXN0YXRpYyB2b2lkIGV0aF9jbGVhcl9taWJfY291bnRlcnModW5zaWduZWQgaW50IGV0aF9wb3J0X251bSk7CitzdGF0aWMgdm9pZCBldGhfY2xlYXJfbWliX2NvdW50ZXJzKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKTsKIAogc3RhdGljIEVUSF9GVU5DX1JFVF9TVEFUVVMgZXRoX3BvcnRfcmVjZWl2ZShzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKIAkJCQkJICAgIHN0cnVjdCBwa3RfaW5mbyAqcF9wa3RfaW5mbyk7CiBzdGF0aWMgRVRIX0ZVTkNfUkVUX1NUQVRVUyBldGhfcnhfcmV0dXJuX2J1ZmYoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCiAJCQkJCSAgICAgIHN0cnVjdCBwa3RfaW5mbyAqcF9wa3RfaW5mbyk7CiAKLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3VjX2FkZHJfZ2V0KHVuc2lnbmVkIGludCBwb3J0X251bSwgdW5zaWduZWQgY2hhciAqcF9hZGRyKTsKLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3VjX2FkZHJfc2V0KHVuc2lnbmVkIGludCBwb3J0X251bSwgdW5zaWduZWQgY2hhciAqcF9hZGRyKTsKK3N0YXRpYyB2b2lkIGV0aF9wb3J0X3VjX2FkZHJfZ2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAorCQkJCSB1bnNpZ25lZCBjaGFyICpwX2FkZHIpOworc3RhdGljIHZvaWQgZXRoX3BvcnRfdWNfYWRkcl9zZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCisJCQkJIHVuc2lnbmVkIGNoYXIgKnBfYWRkcik7CiBzdGF0aWMgdm9pZCBldGhfcG9ydF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eCh1bnNpZ25lZCBpbnQgcG9ydF9udW0sCitzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKIAkJCQkJCXVuc2lnbmVkIGludCBxdWV1ZXMpOwotc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfcngodW5zaWduZWQgaW50IHBvcnRfbnVtLAorc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfcngoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCiAJCQkJCQl1bnNpZ25lZCBpbnQgcXVldWVzKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3R4KHVuc2lnbmVkIGludCBwb3J0X251bSk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV9yeCh1bnNpZ25lZCBpbnQgcG9ydF9udW0pOworc3RhdGljIHVuc2lnbmVkIGludCBtdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOworc3RhdGljIHVuc2lnbmVkIGludCBtdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfcngoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7Ci1zdGF0aWMgdm9pZCBldGhfcG9ydF9pbml0X21hY190YWJsZXModW5zaWduZWQgaW50IGV0aF9wb3J0X251bSk7CitzdGF0aWMgdm9pZCBldGhfcG9ydF9pbml0X21hY190YWJsZXMoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwogI2lmZGVmIE1WNjQzWFhfTkFQSQogc3RhdGljIGludCBtdjY0M3h4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKICNlbmRpZgotc3RhdGljIGludCBldGhlcm5ldF9waHlfZ2V0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOwotc3RhdGljIHZvaWQgZXRoZXJuZXRfcGh5X3NldCh1bnNpZ25lZCBpbnQgZXRoX3BvcnRfbnVtLCBpbnQgcGh5X2FkZHIpOwotc3RhdGljIGludCBldGhlcm5ldF9waHlfZGV0ZWN0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOworc3RhdGljIGludCBldGhlcm5ldF9waHlfZ2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKTsKK3N0YXRpYyB2b2lkIGV0aGVybmV0X3BoeV9zZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsIGludCBwaHlfYWRkcik7CitzdGF0aWMgaW50IGV0aGVybmV0X3BoeV9kZXRlY3Qoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOwogc3RhdGljIGludCBtdjY0M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIHZvaWQgbXY2NDN4eF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbCk7CiBzdGF0aWMgaW50IG12NjQzeHhfZXRoX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKQEAgLTYzNiwxMiArNjE5LDEyIEBACiAvKiB1c2VkIHRvIHByb3RlY3QgU01JX1JFRywgd2hpY2ggaXMgc2hhcmVkIGFjcm9zcyBwb3J0cyAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhtdjY0M3h4X2V0aF9waHlfbG9jayk7CiAKLXN0YXRpYyBpbmxpbmUgdTMyIG12X3JlYWQoaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdTMyIHJkbChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwgaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gcmVhZGwobXY2NDN4eF9ldGhfYmFzZSArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtdl93cml0ZShpbnQgb2Zmc2V0LCB1MzIgZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cmwoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsIGludCBvZmZzZXQsIHUzMiBkYXRhKQogewogCXdyaXRlbChkYXRhLCBtdjY0M3h4X2V0aF9iYXNlICsgb2Zmc2V0KTsKIH0KQEAgLTY1OSwxOCArNjQyLDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGV2LT5tdHUgPSBuZXdfbXR1OworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gMDsKKwogCS8qCi0JICogU3RvcCB0aGVuIHJlLW9wZW4gdGhlIGludGVyZmFjZS4gVGhpcyB3aWxsIGFsbG9jYXRlIFJYIHNrYidzIHdpdGgKLQkgKiB0aGUgbmV3IE1UVS4KLQkgKiBUaGVyZSBpcyBhIHBvc3NpYmxlIGRhbmdlciB0aGF0IHRoZSBvcGVuIHdpbGwgbm90IHN1Y2Nlc3NlZCwgZHVlCi0JICogdG8gbWVtb3J5IGlzIGZ1bGwsIHdoaWNoIG1pZ2h0IGZhaWwgdGhlIG9wZW4gZnVuY3Rpb24uCisJICogU3RvcCBhbmQgdGhlbiByZS1vcGVuIHRoZSBpbnRlcmZhY2UuIFRoaXMgd2lsbCBhbGxvY2F0ZSBSWAorCSAqIHNrYnMgb2YgdGhlIG5ldyBNVFUuCisJICogVGhlcmUgaXMgYSBwb3NzaWJsZSBkYW5nZXIgdGhhdCB0aGUgb3BlbiB3aWxsIG5vdCBzdWNjZWVkLAorCSAqIGR1ZSB0byBtZW1vcnkgYmVpbmcgZnVsbCwgd2hpY2ggbWlnaHQgZmFpbCB0aGUgb3BlbiBmdW5jdGlvbi4KIAkgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCW12NjQzeHhfZXRoX3N0b3AoZGV2KTsKLQkJaWYgKG12NjQzeHhfZXRoX29wZW4oZGV2KSkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSIlczogRmF0YWwgZXJyb3Igb24gb3BlbmluZyBkZXZpY2VcbiIsCi0JCQkJZGV2LT5uYW1lKTsKKwltdjY0M3h4X2V0aF9zdG9wKGRldik7CisJaWYgKG12NjQzeHhfZXRoX29wZW4oZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYXRhbCBlcnJvciBvbiBvcGVuaW5nIGRldmljZVxuIiwKKwkJCWRldi0+bmFtZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NDgsMTAgKzczMiw5IEBACiBzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF91cGRhdGVfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwogCi0JZXRoX3BvcnRfaW5pdF9tYWNfdGFibGVzKHBvcnRfbnVtKTsKLQlldGhfcG9ydF91Y19hZGRyX3NldChwb3J0X251bSwgZGV2LT5kZXZfYWRkcik7CisJZXRoX3BvcnRfaW5pdF9tYWNfdGFibGVzKG1wKTsKKwlldGhfcG9ydF91Y19hZGRyX3NldChtcCwgZGV2LT5kZXZfYWRkcik7CiB9CiAKIC8qCkBAIC03NjcsMTIgKzc1MCwxMiBAQAogCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgY29uZmlnX3JlZzsKIAotCWNvbmZpZ19yZWcgPSBtdl9yZWFkKFBPUlRfQ09ORklHX1JFRyhtcC0+cG9ydF9udW0pKTsKKwljb25maWdfcmVnID0gcmRsKG1wLCBQT1JUX0NPTkZJR19SRUcobXAtPnBvcnRfbnVtKSk7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJY29uZmlnX3JlZyB8PSAodTMyKSBVTklDQVNUX1BST01JU0NVT1VTX01PREU7CiAJZWxzZQogCQljb25maWdfcmVnICY9IH4odTMyKSBVTklDQVNUX1BST01JU0NVT1VTX01PREU7Ci0JbXZfd3JpdGUoUE9SVF9DT05GSUdfUkVHKG1wLT5wb3J0X251bSksIGNvbmZpZ19yZWcpOworCXdybChtcCwgUE9SVF9DT05GSUdfUkVHKG1wLT5wb3J0X251bSksIGNvbmZpZ19yZWcpOwogCiAJZXRoX3BvcnRfc2V0X211bHRpY2FzdF9saXN0KGRldik7CiB9CkBAIC04MjYsMTQgKzgwOSwxNCBAQAogewogCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gY29udGFpbmVyX29mKHVnbHksIHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUsCiAJCQkJCQkgIHR4X3RpbWVvdXRfdGFzayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1wLT5taWkuZGV2OyAvKiB5dWNrICovCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1wLT5kZXY7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JZXRoX3BvcnRfcmVzZXQobXAtPnBvcnRfbnVtKTsKKwlldGhfcG9ydF9yZXNldChtcCk7CiAJZXRoX3BvcnRfc3RhcnQoZGV2KTsKIAogCWlmIChtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X2Rlc2NfY291bnQgPj0gTUFYX0RFU0NTX1BFUl9TS0IpCkBAIC04NDUsNyArODI4LDcgQEAKICAqCiAgKiBJZiBmb3JjZSBpcyBub24temVybywgZnJlZXMgdW5jb21wbGV0ZWQgZGVzY3JpcHRvcnMgYXMgd2VsbAogICovCi1pbnQgbXY2NDN4eF9ldGhfZnJlZV90eF9kZXNjcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2UpCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX2ZyZWVfdHhfZGVzY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlKQogewogCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZXRoX3R4X2Rlc2MgKmRlc2M7CkBAIC0xMDA4LDcgKzk5MSw3IEBACiAJdTMyIG9fcHNjciwgbl9wc2NyOwogCXVuc2lnbmVkIGludCBxdWV1ZXM7CiAKLQlvX3BzY3IgPSBtdl9yZWFkKFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSk7CisJb19wc2NyID0gcmRsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSkpOwogCW5fcHNjciA9IG9fcHNjcjsKIAogCS8qIGNsZWFyIHNwZWVkLCBkdXBsZXggYW5kIHJ4IGJ1ZmZlciBzaXplIGZpZWxkcyAqLwpAQCAtMTAzMSwxNiArMTAxNCwxNiBAQAogCiAJaWYgKG5fcHNjciAhPSBvX3BzY3IpIHsKIAkJaWYgKChvX3BzY3IgJiBTRVJJQUxfUE9SVF9FTkFCTEUpID09IDApCi0JCQltdl93cml0ZShQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIG5fcHNjcik7CisJCQl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgbl9wc2NyKTsKIAkJZWxzZSB7Ci0JCQlxdWV1ZXMgPSBtdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgocG9ydF9udW0pOworCQkJcXVldWVzID0gbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3R4KG1wKTsKIAogCQkJb19wc2NyICY9IH5TRVJJQUxfUE9SVF9FTkFCTEU7Ci0JCQltdl93cml0ZShQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIG9fcHNjcik7Ci0JCQltdl93cml0ZShQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIG5fcHNjcik7Ci0JCQltdl93cml0ZShQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIG5fcHNjcik7CisJCQl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgb19wc2NyKTsKKwkJCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBuX3BzY3IpOworCQkJd3JsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIG5fcHNjcik7CiAJCQlpZiAocXVldWVzKQotCQkJCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KHBvcnRfbnVtLCBxdWV1ZXMpOworCQkJCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KG1wLCBxdWV1ZXMpOwogCQl9CiAJfQogfQpAQCAtMTA2NCwxMyArMTA0NywxMyBAQAogCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAogCS8qIFJlYWQgaW50ZXJydXB0IGNhdXNlIHJlZ2lzdGVycyAqLwotCWV0aF9pbnRfY2F1c2UgPSBtdl9yZWFkKElOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pKSAmCisJZXRoX2ludF9jYXVzZSA9IHJkbChtcCwgSU5URVJSVVBUX0NBVVNFX1JFRyhwb3J0X251bSkpICYKIAkJCQkJCUVUSF9JTlRfVU5NQVNLX0FMTDsKIAlpZiAoZXRoX2ludF9jYXVzZSAmIEVUSF9JTlRfQ0FVU0VfRVhUKSB7Ci0JCWV0aF9pbnRfY2F1c2VfZXh0ID0gbXZfcmVhZCgKKwkJZXRoX2ludF9jYXVzZV9leHQgPSByZGwobXAsCiAJCQlJTlRFUlJVUFRfQ0FVU0VfRVhURU5EX1JFRyhwb3J0X251bSkpICYKIAkJCQkJCUVUSF9JTlRfVU5NQVNLX0FMTF9FWFQ7Ci0JCW12X3dyaXRlKElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSwKKwkJd3JsKG1wLCBJTlRFUlJVUFRfQ0FVU0VfRVhURU5EX1JFRyhwb3J0X251bSksCiAJCQkJCQkJfmV0aF9pbnRfY2F1c2VfZXh0KTsKIAl9CiAKQEAgLTEwODEsOCArMTA2NCw3IEBACiAJCWlmIChtaWlfbGlua19vaygmbXAtPm1paSkpIHsKIAkJCW1paV9ldGh0b29sX2dzZXQoJm1wLT5taWksICZjbWQpOwogCQkJbXY2NDN4eF9ldGhfdXBkYXRlX3BzY3IoZGV2LCAmY21kKTsKLQkJCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KHBvcnRfbnVtLAotCQkJCQkJICAgRVRIX1RYX1FVRVVFU19FTkFCTEVEKTsKKwkJCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KG1wLCBFVEhfVFhfUVVFVUVTX0VOQUJMRUQpOwogCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCQkJaWYgKG1wLT50eF9yaW5nX3NpemUgLSBtcC0+dHhfZGVzY19jb3VudCA+PQpAQCAtMTA5OCwxMCArMTA4MCwxMCBAQAogI2lmZGVmIE1WNjQzWFhfTkFQSQogCWlmIChldGhfaW50X2NhdXNlICYgRVRIX0lOVF9DQVVTRV9SWCkgewogCQkvKiBzY2hlZHVsZSB0aGUgTkFQSSBwb2xsIHJvdXRpbmUgdG8gbWFpbnRhaW4gcG9ydCAqLwotCQltdl93cml0ZShJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX01BU0tfQUxMKTsKKwkJd3JsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX01BU0tfQUxMKTsKIAogCQkvKiB3YWl0IGZvciBwcmV2aW91cyB3cml0ZSB0byBjb21wbGV0ZSAqLwotCQltdl9yZWFkKElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSkpOworCQlyZGwobXAsIElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSkpOwogCiAJCW5ldGlmX3J4X3NjaGVkdWxlKGRldiwgJm1wLT5uYXBpKTsKIAl9CkBAIC0xMTM2LDcgKzExMTgsNyBAQAogICoJLCBhbmQgdGhlIHJlcXVpcmVkIGRlbGF5IG9mIHRoZSBpbnRlcnJ1cHQgaW4gdXNlYy4KICAqCiAgKiBJTlBVVDoKLSAqCXVuc2lnbmVkIGludCBldGhfcG9ydF9udW0JRXRoZXJuZXQgcG9ydCBudW1iZXIKKyAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IHBvcnQKICAqCXVuc2lnbmVkIGludCB0X2NsawkJdF9jbGsgb2YgdGhlIE1WLTY0M3h4IGNoaXAgaW4gSFogdW5pdHMKICAqCXVuc2lnbmVkIGludCBkZWxheQkJRGVsYXkgaW4gdXNlYwogICoKQEAgLTExNDcsMTUgKzExMjksMTYgQEAKICAqCVRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyB2YWx1ZSBzZXQgaW4gdGhlIGdpZ0UgcG9ydC4KICAqCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXRoX3BvcnRfc2V0X3J4X2NvYWwodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXRoX3BvcnRfc2V0X3J4X2NvYWwoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCiAJCQkJCXVuc2lnbmVkIGludCB0X2NsaywgdW5zaWduZWQgaW50IGRlbGF5KQogeworCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAl1bnNpZ25lZCBpbnQgY29hbCA9ICgodF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OwogCiAJLyogU2V0IFJYIENvYWxlc2NpbmcgbWVjaGFuaXNtICovCi0JbXZfd3JpdGUoU0RNQV9DT05GSUdfUkVHKGV0aF9wb3J0X251bSksCisJd3JsKG1wLCBTRE1BX0NPTkZJR19SRUcocG9ydF9udW0pLAogCQkoKGNvYWwgJiAweDNmZmYpIDw8IDgpIHwKLQkJKG12X3JlYWQoU0RNQV9DT05GSUdfUkVHKGV0aF9wb3J0X251bSkpCisJCShyZGwobXAsIFNETUFfQ09ORklHX1JFRyhwb3J0X251bSkpCiAJCQkmIDB4ZmZjMDAwZmYpKTsKIAogCXJldHVybiBjb2FsOwpAQCAtMTE3NCw3ICsxMTU3LDcgQEAKICAqCU1WLTY0M3h4IGNoaXAgYW5kIHRoZSByZXF1aXJlZCBkZWxheSBpbiB0aGUgaW50ZXJydXB0IGluIHVTZWMKICAqCiAgKiBJTlBVVDoKLSAqCXVuc2lnbmVkIGludCBldGhfcG9ydF9udW0JRXRoZXJuZXQgcG9ydCBudW1iZXIKKyAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IHBvcnQKICAqCXVuc2lnbmVkIGludCB0X2NsawkJdF9jbGsgb2YgdGhlIE1WLTY0M3h4IGNoaXAgaW4gSFogdW5pdHMKICAqCXVuc2lnbmVkIGludCBkZWxheQkJRGVsYXkgaW4gdVNlY29uZHMKICAqCkBAIC0xMTg1LDEzICsxMTY4LDE0IEBACiAgKglUaGUgaW50ZXJydXB0IGNvYWxlc2NpbmcgdmFsdWUgc2V0IGluIHRoZSBnaWdFIHBvcnQuCiAgKgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGV0aF9wb3J0X3NldF90eF9jb2FsKHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0sCitzdGF0aWMgdW5zaWduZWQgaW50IGV0aF9wb3J0X3NldF90eF9jb2FsKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAogCQkJCQl1bnNpZ25lZCBpbnQgdF9jbGssIHVuc2lnbmVkIGludCBkZWxheSkKIHsKLQl1bnNpZ25lZCBpbnQgY29hbDsKLQljb2FsID0gKCh0X2NsayAvIDEwMDAwMDApICogZGVsYXkpIC8gNjQ7CisJdW5zaWduZWQgaW50IGNvYWwgPSAoKHRfY2xrIC8gMTAwMDAwMCkgKiBkZWxheSkgLyA2NDsKKwogCS8qIFNldCBUWCBDb2FsZXNjaW5nIG1lY2hhbmlzbSAqLwotCW12X3dyaXRlKFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRF9SRUcoZXRoX3BvcnRfbnVtKSwgY29hbCA8PCA0KTsKKwl3cmwobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRF9SRUcobXAtPnBvcnRfbnVtKSwgY29hbCA8PCA0KTsKKwogCXJldHVybiBjb2FsOwogfQogCkBAIC0xMzI3LDE2ICsxMzExLDE1IEBACiAJaW50IGVycjsKIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIGV0aGVybmV0IHBvcnQgaW50ZXJydXB0cyAqLwotCW12X3dyaXRlKElOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pLCAwKTsKLQltdl93cml0ZShJTlRFUlJVUFRfQ0FVU0VfRVhURU5EX1JFRyhwb3J0X251bSksIDApOworCXdybChtcCwgSU5URVJSVVBUX0NBVVNFX1JFRyhwb3J0X251bSksIDApOworCXdybChtcCwgSU5URVJSVVBUX0NBVVNFX0VYVEVORF9SRUcocG9ydF9udW0pLCAwKTsKIAkvKiB3YWl0IGZvciBwcmV2aW91cyB3cml0ZSB0byBjb21wbGV0ZSAqLwotCW12X3JlYWQgKElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSk7CisJcmRsKG1wLCBJTlRFUlJVUFRfQ0FVU0VfRVhURU5EX1JFRyhwb3J0X251bSkpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG12NjQzeHhfZXRoX2ludF9oYW5kbGVyLAogCQkJSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FuIG5vdCBhc3NpZ24gSVJRIG51bWJlciB0byBNVjY0M1hYX2V0aCVkXG4iLAotCQkJCQkJCQlwb3J0X251bSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbiBub3QgYXNzaWduIElSUVxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC0xNDMwLDE3ICsxNDEzLDE3IEBACiAKICNpZmRlZiBNVjY0M1hYX0NPQUwKIAltcC0+cnhfaW50X2NvYWwgPQotCQlldGhfcG9ydF9zZXRfcnhfY29hbChwb3J0X251bSwgMTMzMDAwMDAwLCBNVjY0M1hYX1JYX0NPQUwpOworCQlldGhfcG9ydF9zZXRfcnhfY29hbChtcCwgMTMzMDAwMDAwLCBNVjY0M1hYX1JYX0NPQUwpOwogI2VuZGlmCiAKIAltcC0+dHhfaW50X2NvYWwgPQotCQlldGhfcG9ydF9zZXRfdHhfY29hbChwb3J0X251bSwgMTMzMDAwMDAwLCBNVjY0M1hYX1RYX0NPQUwpOworCQlldGhfcG9ydF9zZXRfdHhfY29hbChtcCwgMTMzMDAwMDAwLCBNVjY0M1hYX1RYX0NPQUwpOwogCiAJLyogVW5tYXNrIHBoeSBhbmQgbGluayBzdGF0dXMgY2hhbmdlcyBpbnRlcnJ1cHRzICovCi0JbXZfd3JpdGUoSU5URVJSVVBUX0VYVEVORF9NQVNLX1JFRyhwb3J0X251bSksIEVUSF9JTlRfVU5NQVNLX0FMTF9FWFQpOworCXdybChtcCwgSU5URVJSVVBUX0VYVEVORF9NQVNLX1JFRyhwb3J0X251bSksIEVUSF9JTlRfVU5NQVNLX0FMTF9FWFQpOwogCiAJLyogVW5tYXNrIFJYIGJ1ZmZlciBhbmQgVFggZW5kIGludGVycnVwdCAqLwotCW12X3dyaXRlKElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIEVUSF9JTlRfVU5NQVNLX0FMTCk7CisJd3JsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX1VOTUFTS19BTEwpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE0NTksNyArMTQ0Miw3IEBACiAJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogU3RvcCBUeCBRdWV1ZXMgKi8KLQltdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgobXAtPnBvcnRfbnVtKTsKKwltdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgobXApOwogCiAJLyogRnJlZSBvdXRzdGFuZGluZyBza2IncyBvbiBUWCByaW5nICovCiAJbXY2NDN4eF9ldGhfZnJlZV9hbGxfdHhfZGVzY3MoZGV2KTsKQEAgLTE0NzcsMTEgKzE0NjAsMTAgQEAKIHN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2ZyZWVfcnhfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwogCWludCBjdXJyOwogCiAJLyogU3RvcCBSWCBRdWV1ZXMgKi8KLQltdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfcngocG9ydF9udW0pOworCW12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV9yeChtcCk7CiAKIAkvKiBGcmVlIHByZWFsbG9jYXRlZCBza2IncyBvbiBSWCByaW5ncyAqLwogCWZvciAoY3VyciA9IDA7IG1wLT5yeF9kZXNjX2NvdW50ICYmIGN1cnIgPCBtcC0+cnhfcmluZ19zaXplOyBjdXJyKyspIHsKQEAgLTE1MjAsOSArMTUwMiw5IEBACiAJdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwogCiAJLyogTWFzayBhbGwgaW50ZXJydXB0cyBvbiBldGhlcm5ldCBwb3J0ICovCi0JbXZfd3JpdGUoSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9NQVNLX0FMTCk7CisJd3JsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX01BU0tfQUxMKTsKIAkvKiB3YWl0IGZvciBwcmV2aW91cyB3cml0ZSB0byBjb21wbGV0ZSAqLwotCW12X3JlYWQoSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSk7CisJcmRsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pKTsKIAogI2lmZGVmIE1WNjQzWFhfTkFQSQogCW5hcGlfZGlzYWJsZSgmbXAtPm5hcGkpOwpAQCAtMTUzMCw3ICsxNTEyLDcgQEAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCWV0aF9wb3J0X3Jlc2V0KG1wLT5wb3J0X251bSk7CisJZXRoX3BvcnRfcmVzZXQobXApOwogCiAJbXY2NDN4eF9ldGhfZnJlZV90eF9yaW5ncyhkZXYpOwogCW12NjQzeHhfZXRoX2ZyZWVfcnhfcmluZ3MoZGV2KTsKQEAgLTE1NjEsMTUgKzE1NDMsMTUgQEAKICNlbmRpZgogCiAJd29ya19kb25lID0gMDsKLQlpZiAoKG12X3JlYWQoUlhfQ1VSUkVOVF9RVUVVRV9ERVNDX1BUUl8wKHBvcnRfbnVtKSkpCisJaWYgKChyZGwobXAsIFJYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfMChwb3J0X251bSkpKQogCSAgICAhPSAodTMyKSBtcC0+cnhfdXNlZF9kZXNjX3EpCiAJCXdvcmtfZG9uZSA9IG12NjQzeHhfZXRoX3JlY2VpdmVfcXVldWUoZGV2LCBidWRnZXQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQluZXRpZl9yeF9jb21wbGV0ZShkZXYsIG5hcGkpOwotCQltdl93cml0ZShJTlRFUlJVUFRfQ0FVU0VfUkVHKHBvcnRfbnVtKSwgMCk7Ci0JCW12X3dyaXRlKElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSwgMCk7Ci0JCW12X3dyaXRlKElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIEVUSF9JTlRfVU5NQVNLX0FMTCk7CisJCXdybChtcCwgSU5URVJSVVBUX0NBVVNFX1JFRyhwb3J0X251bSksIDApOworCQl3cmwobXAsIElOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSwgMCk7CisJCXdybChtcCwgSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9VTk1BU0tfQUxMKTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMTcyMyw3ICsxNzA1LDcgQEAKIAogCS8qIGVuc3VyZSBhbGwgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4gYmVmb3JlIHBva2luZyBoYXJkd2FyZSAqLwogCXdtYigpOwotCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KG1wLT5wb3J0X251bSwgRVRIX1RYX1FVRVVFU19FTkFCTEVEKTsKKwltdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eChtcCwgRVRIX1RYX1FVRVVFU19FTkFCTEVEKTsKIAogCW1wLT50eF9kZXNjX2NvdW50ICs9IG5yX2ZyYWdzICsgMTsKIH0KQEAgLTE3MzksMjUgKzE3MjEsMjMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSk7Ci0JQlVHX09OKHNrYiA9PSBOVUxMKTsKKworCWlmIChoYXNfdGlueV91bmFsaWduZWRfZnJhZ3Moc2tiKSAmJiBfX3NrYl9saW5lYXJpemUoc2tiKSkgeworCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBsaW5lYXJpemUgdGlueSAiCisJCQkJInVuYWxpZ25lZCBmcmFnbWVudFxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG1wLT50eF9yaW5nX3NpemUgLSBtcC0+dHhfZGVzY19jb3VudCA8IE1BWF9ERVNDU19QRVJfU0tCKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyYW5zbWl0IHdpdGggcXVldWUgZnVsbFxuIiwgZGV2LT5uYW1lKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAotCWlmIChoYXNfdGlueV91bmFsaWduZWRfZnJhZ3Moc2tiKSkgewotCQlpZiAoX19za2JfbGluZWFyaXplKHNrYikpIHsKLQkJCXN0YXRzLT50eF9kcm9wcGVkKys7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBsaW5lYXJpemUgdGlueSAiCi0JCQkJCSJ1bmFsaWduZWQgZnJhZ21lbnRcbiIsIGRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOwotCiAJZXRoX3R4X3N1Ym1pdF9kZXNjc19mb3Jfc2tiKG1wLCBza2IpOwogCXN0YXRzLT50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlzdGF0cy0+dHhfcGFja2V0cysrOwpAQCAtMTc2OCw3ICsxNzQ4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsJCS8qIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTE3NzcsMTMgKzE3NTcsMTMgQEAKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwogCi0JbXZfd3JpdGUoSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9NQVNLX0FMTCk7CisJd3JsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX01BU0tfQUxMKTsKIAkvKiB3YWl0IGZvciBwcmV2aW91cyB3cml0ZSB0byBjb21wbGV0ZSAqLwotCW12X3JlYWQoSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSk7CisJcmRsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pKTsKIAogCW12NjQzeHhfZXRoX2ludF9oYW5kbGVyKG5ldGRldi0+aXJxLCBuZXRkZXYpOwogCi0JbXZfd3JpdGUoSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9VTk1BU0tfQUxMKTsKKwl3cmwobXAsIElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIEVUSF9JTlRfVU5NQVNLX0FMTCk7CiB9CiAjZW5kaWYKIApAQCAtMTkwMCw3ICsxODgwLDcgQEAKIAlwb3J0X251bSA9IG1wLT5wb3J0X251bSA9IHBkLT5wb3J0X251bWJlcjsKIAogCS8qIHNldCBkZWZhdWx0IGNvbmZpZyB2YWx1ZXMgKi8KLQlldGhfcG9ydF91Y19hZGRyX2dldChwb3J0X251bSwgZGV2LT5kZXZfYWRkcik7CisJZXRoX3BvcnRfdWNfYWRkcl9nZXQobXAsIGRldi0+ZGV2X2FkZHIpOwogCW1wLT5yeF9yaW5nX3NpemUgPSBQT1JUX0RFRkFVTFRfUkVDRUlWRV9RVUVVRV9TSVpFOwogCW1wLT50eF9yaW5nX3NpemUgPSBQT1JUX0RFRkFVTFRfVFJBTlNNSVRfUVVFVUVfU0laRTsKIApAQCAtMTkwOCw3ICsxODg4LDcgQEAKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBkLT5tYWNfYWRkciwgNik7CiAKIAlpZiAocGQtPnBoeV9hZGRyIHx8IHBkLT5mb3JjZV9waHlfYWRkcikKLQkJZXRoZXJuZXRfcGh5X3NldChwb3J0X251bSwgcGQtPnBoeV9hZGRyKTsKKwkJZXRoZXJuZXRfcGh5X3NldChtcCwgcGQtPnBoeV9hZGRyKTsKIAogCWlmIChwZC0+cnhfcXVldWVfc2l6ZSkKIAkJbXAtPnJ4X3Jpbmdfc2l6ZSA9IHBkLT5yeF9xdWV1ZV9zaXplOwpAQCAtMTkzMywxOSArMTkxMywxOCBAQAogCW1wLT5taWkuZGV2ID0gZGV2OwogCW1wLT5taWkubWRpb19yZWFkID0gbXY2NDN4eF9tZGlvX3JlYWQ7CiAJbXAtPm1paS5tZGlvX3dyaXRlID0gbXY2NDN4eF9tZGlvX3dyaXRlOwotCW1wLT5taWkucGh5X2lkID0gZXRoZXJuZXRfcGh5X2dldChwb3J0X251bSk7CisJbXAtPm1paS5waHlfaWQgPSBldGhlcm5ldF9waHlfZ2V0KG1wKTsKIAltcC0+bWlpLnBoeV9pZF9tYXNrID0gMHgzZjsKIAltcC0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CiAKLQllcnIgPSBldGhlcm5ldF9waHlfZGV0ZWN0KHBvcnRfbnVtKTsKKwllcnIgPSBldGhlcm5ldF9waHlfZGV0ZWN0KG1wKTsKIAlpZiAoZXJyKSB7Ci0JCXByX2RlYnVnKCJNVjY0M3h4IGV0aGVybmV0IHBvcnQgJWQ6ICIKLQkJCQkJIk5vIFBIWSBkZXRlY3RlZCBhdCBhZGRyICVkXG4iLAotCQkJCQlwb3J0X251bSwgZXRoZXJuZXRfcGh5X2dldChwb3J0X251bSkpOworCQlwcl9kZWJ1ZygiJXM6IE5vIFBIWSBkZXRlY3RlZCBhdCBhZGRyICVkXG4iLAorCQkJCWRldi0+bmFtZSwgZXRoZXJuZXRfcGh5X2dldChtcCkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlldGhlcm5ldF9waHlfcmVzZXQocG9ydF9udW0pOworCWV0aGVybmV0X3BoeV9yZXNldChtcCk7CiAJbXAtPm1paS5zdXBwb3J0c19nbWlpID0gbWlpX2NoZWNrX2dtaWlfc3VwcG9ydCgmbXAtPm1paSk7CiAJbXY2NDN4eF9pbml0X2V0aHRvb2xfY21kKGRldiwgbXAtPm1paS5waHlfaWQsIHNwZWVkLCBkdXBsZXgsICZjbWQpOwogCW12NjQzeHhfZXRoX3VwZGF0ZV9wc2NyKGRldiwgJmNtZCk7CkBAIC0yMDA2LDkgKzE5ODUsMTEgQEAKIAogc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdGF0aWMgaW50IG12NjQzeHhfdmVyc2lvbl9wcmludGVkID0gMDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAotCXByaW50ayhLRVJOX05PVElDRSAiTVYtNjQzeHggMTAvMTAwLzEwMDAgRXRoZXJuZXQgRHJpdmVyXG4iKTsKKwlpZiAoIW12NjQzeHhfdmVyc2lvbl9wcmludGVkKyspCisJCXByaW50ayhLRVJOX05PVElDRSAiTVYtNjQzeHggMTAvMTAwLzEwMDAgRXRoZXJuZXQgRHJpdmVyXG4iKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKQpAQCAtMjAzNywxMCArMjAxOCwxMCBAQAogCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAogCS8qIE1hc2sgYWxsIGludGVycnVwdHMgb24gZXRoZXJuZXQgcG9ydCAqLwotCW12X3dyaXRlKElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIDApOwotCW12X3JlYWQgKElOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSkpOworCXdybChtcCwgSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgMCk7CisJcmRsKG1wLCBJTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pKTsKIAotCWV0aF9wb3J0X3Jlc2V0KHBvcnRfbnVtKTsKKwlldGhfcG9ydF9yZXNldChtcCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjQzeHhfZXRoX2RyaXZlciA9IHsKQEAgLTIxMDQsNiArMjA4NSw3IEBACiBNT0RVTEVfQVVUSE9SKAkiUmFiZWVoIEtob3VyeSwgQXNzYWYgSG9mZm1hbiwgTWF0dGhldyBEaGFybSwgTWFuaXNoIExhY2h3YW5pIgogCQkiIGFuZCBEYWxlIEZhcm5zd29ydGgiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRXRoZXJuZXQgZHJpdmVyIGZvciBNYXJ2ZWxsIE1WNjQzWFgiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bXY2NDN4eF9ldGgiKTsKIAogLyoKICAqIFRoZSBzZWNvbmQgcGFydCBpcyB0aGUgbG93IGxldmVsIGRyaXZlciBvZiB0aGUgZ2lnRSBldGhlcm5ldCBwb3J0cy4KQEAgLTIyMjgsMTIgKzIyMTAsOSBAQAogICoJCXJldHVybl9pbmZvCVR4L1J4IHVzZXIgcmVzb3VyY2UgcmV0dXJuIGluZm9ybWF0aW9uLgogICovCiAKLS8qIFBIWSByb3V0aW5lcyAqLwotc3RhdGljIGludCBldGhlcm5ldF9waHlfZ2V0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOwotc3RhdGljIHZvaWQgZXRoZXJuZXRfcGh5X3NldCh1bnNpZ25lZCBpbnQgZXRoX3BvcnRfbnVtLCBpbnQgcGh5X2FkZHIpOwotCiAvKiBFdGhlcm5ldCBQb3J0IHJvdXRpbmVzICovCi1zdGF0aWMgdm9pZCBldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KGludCB0YWJsZSwgdW5zaWduZWQgY2hhciBlbnRyeSk7CitzdGF0aWMgdm9pZCBldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAorCQkJCQkgICAgaW50IHRhYmxlLCB1bnNpZ25lZCBjaGFyIGVudHJ5KTsKIAogLyoKICAqIGV0aF9wb3J0X2luaXQgLSBJbml0aWFsaXplIHRoZSBFdGhlcm5ldCBwb3J0IGRyaXZlcgpAQCAtMjI2Myw5ICsyMjQyLDkgQEAKIHsKIAltcC0+cnhfcmVzb3VyY2VfZXJyID0gMDsKIAotCWV0aF9wb3J0X3Jlc2V0KG1wLT5wb3J0X251bSk7CisJZXRoX3BvcnRfcmVzZXQobXApOwogCi0JZXRoX3BvcnRfaW5pdF9tYWNfdGFibGVzKG1wLT5wb3J0X251bSk7CisJZXRoX3BvcnRfaW5pdF9tYWNfdGFibGVzKG1wKTsKIH0KIAogLyoKQEAgLTIzMDUsMjggKzIyODQsMjggQEAKIAogCS8qIEFzc2lnbm1lbnQgb2YgVHggQ1RSUCBvZiBnaXZlbiBxdWV1ZSAqLwogCXR4X2N1cnJfZGVzYyA9IG1wLT50eF9jdXJyX2Rlc2NfcTsKLQltdl93cml0ZShUWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzAocG9ydF9udW0pLAorCXdybChtcCwgVFhfQ1VSUkVOVF9RVUVVRV9ERVNDX1BUUl8wKHBvcnRfbnVtKSwKIAkJKHUzMikoKHN0cnVjdCBldGhfdHhfZGVzYyAqKW1wLT50eF9kZXNjX2RtYSArIHR4X2N1cnJfZGVzYykpOwogCiAJLyogQXNzaWdubWVudCBvZiBSeCBDUkRQIG9mIGdpdmVuIHF1ZXVlICovCiAJcnhfY3Vycl9kZXNjID0gbXAtPnJ4X2N1cnJfZGVzY19xOwotCW12X3dyaXRlKFJYX0NVUlJFTlRfUVVFVUVfREVTQ19QVFJfMChwb3J0X251bSksCisJd3JsKG1wLCBSWF9DVVJSRU5UX1FVRVVFX0RFU0NfUFRSXzAocG9ydF9udW0pLAogCQkodTMyKSgoc3RydWN0IGV0aF9yeF9kZXNjICopbXAtPnJ4X2Rlc2NfZG1hICsgcnhfY3Vycl9kZXNjKSk7CiAKIAkvKiBBZGQgdGhlIGFzc2lnbmVkIEV0aGVybmV0IGFkZHJlc3MgdG8gdGhlIHBvcnQncyBhZGRyZXNzIHRhYmxlICovCi0JZXRoX3BvcnRfdWNfYWRkcl9zZXQocG9ydF9udW0sIGRldi0+ZGV2X2FkZHIpOworCWV0aF9wb3J0X3VjX2FkZHJfc2V0KG1wLCBkZXYtPmRldl9hZGRyKTsKIAogCS8qIEFzc2lnbiBwb3J0IGNvbmZpZ3VyYXRpb24gYW5kIGNvbW1hbmQuICovCi0JbXZfd3JpdGUoUE9SVF9DT05GSUdfUkVHKHBvcnRfbnVtKSwKKwl3cmwobXAsIFBPUlRfQ09ORklHX1JFRyhwb3J0X251bSksCiAJCQkgIFBPUlRfQ09ORklHX0RFRkFVTFRfVkFMVUUpOwogCi0JbXZfd3JpdGUoUE9SVF9DT05GSUdfRVhURU5EX1JFRyhwb3J0X251bSksCisJd3JsKG1wLCBQT1JUX0NPTkZJR19FWFRFTkRfUkVHKHBvcnRfbnVtKSwKIAkJCSAgUE9SVF9DT05GSUdfRVhURU5EX0RFRkFVTFRfVkFMVUUpOwogCi0JcHNjciA9IG12X3JlYWQoUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pKTsKKwlwc2NyID0gcmRsKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSkpOwogCiAJcHNjciAmPSB+KFNFUklBTF9QT1JUX0VOQUJMRSB8IEZPUkNFX0xJTktfUEFTUyk7Ci0JbXZfd3JpdGUoUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBwc2NyKTsKKwl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgcHNjcik7CiAKIAlwc2NyIHw9IERJU0FCTEVfQVVUT19ORUdfRk9SX0ZMT1dfQ1RSTCB8CiAJCURJU0FCTEVfQVVUT19ORUdfU1BFRURfR01JSSAgICB8CkBAIC0yMzM0LDMyICsyMzEzLDM0IEBACiAJCURPX05PVF9GT1JDRV9MSU5LX0ZBSUwJICAgfAogCQlTRVJJQUxfUE9SVF9DT05UUk9MX1JFU0VSVkVEOwogCi0JbXZfd3JpdGUoUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBwc2NyKTsKKwl3cmwobXAsIFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgcHNjcik7CiAKIAlwc2NyIHw9IFNFUklBTF9QT1JUX0VOQUJMRTsKLQltdl93cml0ZShQT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIHBzY3IpOworCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBwc2NyKTsKIAogCS8qIEFzc2lnbiBwb3J0IFNETUEgY29uZmlndXJhdGlvbiAqLwotCW12X3dyaXRlKFNETUFfQ09ORklHX1JFRyhwb3J0X251bSksCisJd3JsKG1wLCBTRE1BX0NPTkZJR19SRUcocG9ydF9udW0pLAogCQkJICBQT1JUX1NETUFfQ09ORklHX0RFRkFVTFRfVkFMVUUpOwogCiAJLyogRW5hYmxlIHBvcnQgUnguICovCi0JbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfcngocG9ydF9udW0sIEVUSF9SWF9RVUVVRVNfRU5BQkxFRCk7CisJbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfcngobXAsIEVUSF9SWF9RVUVVRVNfRU5BQkxFRCk7CiAKIAkvKiBEaXNhYmxlIHBvcnQgYmFuZHdpZHRoIGxpbWl0cyBieSBjbGVhcmluZyBNVFUgcmVnaXN0ZXIgKi8KLQltdl93cml0ZShNQVhJTVVNX1RSQU5TTUlUX1VOSVQocG9ydF9udW0pLCAwKTsKKwl3cmwobXAsIE1BWElNVU1fVFJBTlNNSVRfVU5JVChwb3J0X251bSksIDApOwogCiAJLyogc2F2ZSBwaHkgc2V0dGluZ3MgYWNyb3NzIHJlc2V0ICovCiAJbXY2NDN4eF9nZXRfc2V0dGluZ3MoZGV2LCAmZXRodG9vbF9jbWQpOwotCWV0aGVybmV0X3BoeV9yZXNldChtcC0+cG9ydF9udW0pOworCWV0aGVybmV0X3BoeV9yZXNldChtcCk7CiAJbXY2NDN4eF9zZXRfc2V0dGluZ3MoZGV2LCAmZXRodG9vbF9jbWQpOwogfQogCiAvKgogICogZXRoX3BvcnRfdWNfYWRkcl9zZXQgLSBXcml0ZSBhIE1BQyBhZGRyZXNzIGludG8gdGhlIHBvcnQncyBodyByZWdpc3RlcnMKICAqLwotc3RhdGljIHZvaWQgZXRoX3BvcnRfdWNfYWRkcl9zZXQodW5zaWduZWQgaW50IHBvcnRfbnVtLCB1bnNpZ25lZCBjaGFyICpwX2FkZHIpCitzdGF0aWMgdm9pZCBldGhfcG9ydF91Y19hZGRyX3NldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKKwkJCQkgdW5zaWduZWQgY2hhciAqcF9hZGRyKQogeworCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAl1bnNpZ25lZCBpbnQgbWFjX2g7CiAJdW5zaWduZWQgaW50IG1hY19sOwogCWludCB0YWJsZTsKQEAgLTIzNjgsMjQgKzIzNDksMjYgQEAKIAltYWNfaCA9IChwX2FkZHJbMF0gPDwgMjQpIHwgKHBfYWRkclsxXSA8PCAxNikgfCAocF9hZGRyWzJdIDw8IDgpIHwKIAkJCQkJCQkocF9hZGRyWzNdIDw8IDApOwogCi0JbXZfd3JpdGUoTUFDX0FERFJfTE9XKHBvcnRfbnVtKSwgbWFjX2wpOwotCW12X3dyaXRlKE1BQ19BRERSX0hJR0gocG9ydF9udW0pLCBtYWNfaCk7CisJd3JsKG1wLCBNQUNfQUREUl9MT1cocG9ydF9udW0pLCBtYWNfbCk7CisJd3JsKG1wLCBNQUNfQUREUl9ISUdIKHBvcnRfbnVtKSwgbWFjX2gpOwogCiAJLyogQWNjZXB0IGZyYW1lcyB3aXRoIHRoaXMgYWRkcmVzcyAqLwogCXRhYmxlID0gREFfRklMVEVSX1VOSUNBU1RfVEFCTEVfQkFTRShwb3J0X251bSk7Ci0JZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeSh0YWJsZSwgcF9hZGRyWzVdICYgMHgwZik7CisJZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeShtcCwgdGFibGUsIHBfYWRkcls1XSAmIDB4MGYpOwogfQogCiAvKgogICogZXRoX3BvcnRfdWNfYWRkcl9nZXQgLSBSZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBwb3J0J3MgaHcgcmVnaXN0ZXJzCiAgKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3VjX2FkZHJfZ2V0KHVuc2lnbmVkIGludCBwb3J0X251bSwgdW5zaWduZWQgY2hhciAqcF9hZGRyKQorc3RhdGljIHZvaWQgZXRoX3BvcnRfdWNfYWRkcl9nZXQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCisJCQkJIHVuc2lnbmVkIGNoYXIgKnBfYWRkcikKIHsKKwl1bnNpZ25lZCBpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07CiAJdW5zaWduZWQgaW50IG1hY19oOwogCXVuc2lnbmVkIGludCBtYWNfbDsKIAotCW1hY19oID0gbXZfcmVhZChNQUNfQUREUl9ISUdIKHBvcnRfbnVtKSk7Ci0JbWFjX2wgPSBtdl9yZWFkKE1BQ19BRERSX0xPVyhwb3J0X251bSkpOworCW1hY19oID0gcmRsKG1wLCBNQUNfQUREUl9ISUdIKHBvcnRfbnVtKSk7CisJbWFjX2wgPSByZGwobXAsIE1BQ19BRERSX0xPVyhwb3J0X251bSkpOwogCiAJcF9hZGRyWzBdID0gKG1hY19oID4+IDI0KSAmIDB4ZmY7CiAJcF9hZGRyWzFdID0gKG1hY19oID4+IDE2KSAmIDB4ZmY7CkBAIC0yNDA0LDcgKzIzODcsOCBAQAogICoJMy0xCVF1ZXVlCQkJKEVUSF9RMD0wKQogICoJNy00CVJlc2VydmVkID0gMDsKICAqLwotc3RhdGljIHZvaWQgZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeShpbnQgdGFibGUsIHVuc2lnbmVkIGNoYXIgZW50cnkpCitzdGF0aWMgdm9pZCBldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAorCQkJCQkgICAgaW50IHRhYmxlLCB1bnNpZ25lZCBjaGFyIGVudHJ5KQogewogCXVuc2lnbmVkIGludCB0YWJsZV9yZWc7CiAJdW5zaWduZWQgaW50IHRibF9vZmZzZXQ7CkBAIC0yNDE0LDkgKzIzOTgsOSBAQAogCXJlZ19vZmZzZXQgPSBlbnRyeSAlIDQ7CQkvKiBFbnRyeSBvZmZzZXQgd2l0aGluIHRoZSByZWdpc3RlciAqLwogCiAJLyogU2V0ICJhY2NlcHRzIGZyYW1lIGJpdCIgYXQgc3BlY2lmaWVkIHRhYmxlIGVudHJ5ICovCi0JdGFibGVfcmVnID0gbXZfcmVhZCh0YWJsZSArIHRibF9vZmZzZXQpOworCXRhYmxlX3JlZyA9IHJkbChtcCwgdGFibGUgKyB0Ymxfb2Zmc2V0KTsKIAl0YWJsZV9yZWcgfD0gMHgwMSA8PCAoOCAqIHJlZ19vZmZzZXQpOwotCW12X3dyaXRlKHRhYmxlICsgdGJsX29mZnNldCwgdGFibGVfcmVnKTsKKwl3cmwobXAsIHRhYmxlICsgdGJsX29mZnNldCwgdGFibGVfcmVnKTsKIH0KIAogLyoKQEAgLTI0MzMsOCArMjQxNyw5IEBACiAgKiBJbiBlaXRoZXIgY2FzZSwgZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeSgpIGlzIHRoZW4gY2FsbGVkCiAgKiB0byBzZXQgdG8gc2V0IHRoZSBhY3R1YWwgdGFibGUgZW50cnkuCiAgKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X21jX2FkZHIodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSwgdW5zaWduZWQgY2hhciAqcF9hZGRyKQorc3RhdGljIHZvaWQgZXRoX3BvcnRfbWNfYWRkcihzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwgdW5zaWduZWQgY2hhciAqcF9hZGRyKQogeworCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAl1bnNpZ25lZCBpbnQgbWFjX2g7CiAJdW5zaWduZWQgaW50IG1hY19sOwogCXVuc2lnbmVkIGNoYXIgY3JjX3Jlc3VsdCA9IDA7CkBAIC0yNDQ1LDkgKzI0MzAsOCBAQAogCiAJaWYgKChwX2FkZHJbMF0gPT0gMHgwMSkgJiYgKHBfYWRkclsxXSA9PSAweDAwKSAmJgogCSAgICAocF9hZGRyWzJdID09IDB4NUUpICYmIChwX2FkZHJbM10gPT0gMHgwMCkgJiYgKHBfYWRkcls0XSA9PSAweDAwKSkgewotCQl0YWJsZSA9IERBX0ZJTFRFUl9TUEVDSUFMX01VTFRJQ0FTVF9UQUJMRV9CQVNFCi0JCQkJCShldGhfcG9ydF9udW0pOwotCQlldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KHRhYmxlLCBwX2FkZHJbNV0pOworCQl0YWJsZSA9IERBX0ZJTFRFUl9TUEVDSUFMX01VTFRJQ0FTVF9UQUJMRV9CQVNFKHBvcnRfbnVtKTsKKwkJZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeShtcCwgdGFibGUsIHBfYWRkcls1XSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI1MTksOCArMjUwMyw4IEBACiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJY3JjX3Jlc3VsdCA9IGNyY19yZXN1bHQgfCAoY3JjW2ldIDw8IGkpOwogCi0JdGFibGUgPSBEQV9GSUxURVJfT1RIRVJfTVVMVElDQVNUX1RBQkxFX0JBU0UoZXRoX3BvcnRfbnVtKTsKLQlldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KHRhYmxlLCBjcmNfcmVzdWx0KTsKKwl0YWJsZSA9IERBX0ZJTFRFUl9PVEhFUl9NVUxUSUNBU1RfVEFCTEVfQkFTRShwb3J0X251bSk7CisJZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeShtcCwgdGFibGUsIGNyY19yZXN1bHQpOwogfQogCiAvKgpAQCAtMjU0OSw3ICsyNTMzLDcgQEAKIAkJCSAqIDMtMSAgUXVldWUJIEVUSF9RMD0wCiAJCQkgKiA3LTQgIFJlc2VydmVkID0gMDsKIAkJCSAqLwotCQkJbXZfd3JpdGUoREFfRklMVEVSX1NQRUNJQUxfTVVMVElDQVNUX1RBQkxFX0JBU0UoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4LCAweDAxMDEwMTAxKTsKKwkJCXdybChtcCwgREFfRklMVEVSX1NQRUNJQUxfTVVMVElDQVNUX1RBQkxFX0JBU0UoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4LCAweDAxMDEwMTAxKTsKIAogCQkJLyogU2V0IGFsbCBlbnRyaWVzIGluIERBIGZpbHRlciBvdGhlciBtdWx0aWNhc3QKIAkJCSAqIHRhYmxlIChFeF9kRk9NVCkKQEAgLTI1NTksNyArMjU0Myw3IEBACiAJCQkgKiAzLTEgIFF1ZXVlCSBFVEhfUTA9MAogCQkJICogNy00ICBSZXNlcnZlZCA9IDA7CiAJCQkgKi8KLQkJCW12X3dyaXRlKERBX0ZJTFRFUl9PVEhFUl9NVUxUSUNBU1RfVEFCTEVfQkFTRShldGhfcG9ydF9udW0pICsgdGFibGVfaW5kZXgsIDB4MDEwMTAxMDEpOworCQkJd3JsKG1wLCBEQV9GSUxURVJfT1RIRVJfTVVMVElDQVNUX1RBQkxFX0JBU0UoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4LCAweDAxMDEwMTAxKTsKIAkJfQogCQlyZXR1cm47CiAJfQpAQCAtMjU2OSwxMSArMjU1MywxMSBAQAogCSAqLwogCWZvciAodGFibGVfaW5kZXggPSAwOyB0YWJsZV9pbmRleCA8PSAweEZDOyB0YWJsZV9pbmRleCArPSA0KSB7CiAJCS8qIENsZWFyIERBIGZpbHRlciBzcGVjaWFsIG11bHRpY2FzdCB0YWJsZSAoRXhfZEZTTVQpICovCi0JCW12X3dyaXRlKERBX0ZJTFRFUl9TUEVDSUFMX01VTFRJQ0FTVF9UQUJMRV9CQVNFCisJCXdybChtcCwgREFfRklMVEVSX1NQRUNJQUxfTVVMVElDQVNUX1RBQkxFX0JBU0UKIAkJCQkoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4LCAwKTsKIAogCQkvKiBDbGVhciBEQSBmaWx0ZXIgb3RoZXIgbXVsdGljYXN0IHRhYmxlIChFeF9kRk9NVCkgKi8KLQkJbXZfd3JpdGUoREFfRklMVEVSX09USEVSX01VTFRJQ0FTVF9UQUJMRV9CQVNFCisJCXdybChtcCwgREFfRklMVEVSX09USEVSX01VTFRJQ0FTVF9UQUJMRV9CQVNFCiAJCQkJKGV0aF9wb3J0X251bSkgKyB0YWJsZV9pbmRleCwgMCk7CiAJfQogCkBAIC0yNTgyLDcgKzI1NjYsNyBAQAogCQkJKGkgPCAyNTYpICYmIChtY19saXN0ICE9IE5VTEwpICYmIChpIDwgZGV2LT5tY19jb3VudCk7CiAJCQlpKyssIG1jX2xpc3QgPSBtY19saXN0LT5uZXh0KQogCQlpZiAobWNfbGlzdC0+ZG1pX2FkZHJsZW4gPT0gNikKLQkJCWV0aF9wb3J0X21jX2FkZHIoZXRoX3BvcnRfbnVtLCBtY19saXN0LT5kbWlfYWRkcik7CisJCQlldGhfcG9ydF9tY19hZGRyKG1wLCBtY19saXN0LT5kbWlfYWRkcik7CiB9CiAKIC8qCkBAIC0yNTkzLDcgKzI1NzcsNyBAQAogICoJT3RoZXIgTXVsdGljYXN0KSBhbmQgc2V0IGVhY2ggZW50cnkgdG8gMC4KICAqCiAgKiBJTlBVVDoKLSAqCXVuc2lnbmVkIGludAlldGhfcG9ydF9udW0JRXRoZXJuZXQgUG9ydCBudW1iZXIuCisgKglzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcAlFdGhlcm5ldCBQb3J0LgogICoKICAqIE9VVFBVVDoKICAqCU11bHRpY2FzdCBhbmQgVW5pY2FzdCBwYWNrZXRzIGFyZSByZWplY3RlZC4KQEAgLTI2MDEsMjIgKzI1ODUsMjMgQEAKICAqIFJFVFVSTjoKICAqCU5vbmUuCiAgKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X2luaXRfbWFjX3RhYmxlcyh1bnNpZ25lZCBpbnQgZXRoX3BvcnRfbnVtKQorc3RhdGljIHZvaWQgZXRoX3BvcnRfaW5pdF9tYWNfdGFibGVzKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQogeworCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAlpbnQgdGFibGVfaW5kZXg7CiAKIAkvKiBDbGVhciBEQSBmaWx0ZXIgdW5pY2FzdCB0YWJsZSAoRXhfZEZVVCkgKi8KIAlmb3IgKHRhYmxlX2luZGV4ID0gMDsgdGFibGVfaW5kZXggPD0gMHhDOyB0YWJsZV9pbmRleCArPSA0KQotCQltdl93cml0ZShEQV9GSUxURVJfVU5JQ0FTVF9UQUJMRV9CQVNFCi0JCQkJCShldGhfcG9ydF9udW0pICsgdGFibGVfaW5kZXgsIDApOworCQl3cmwobXAsIERBX0ZJTFRFUl9VTklDQVNUX1RBQkxFX0JBU0UocG9ydF9udW0pICsKKwkJCQkJdGFibGVfaW5kZXgsIDApOwogCiAJZm9yICh0YWJsZV9pbmRleCA9IDA7IHRhYmxlX2luZGV4IDw9IDB4RkM7IHRhYmxlX2luZGV4ICs9IDQpIHsKIAkJLyogQ2xlYXIgREEgZmlsdGVyIHNwZWNpYWwgbXVsdGljYXN0IHRhYmxlIChFeF9kRlNNVCkgKi8KLQkJbXZfd3JpdGUoREFfRklMVEVSX1NQRUNJQUxfTVVMVElDQVNUX1RBQkxFX0JBU0UKLQkJCQkJKGV0aF9wb3J0X251bSkgKyB0YWJsZV9pbmRleCwgMCk7CisJCXdybChtcCwgREFfRklMVEVSX1NQRUNJQUxfTVVMVElDQVNUX1RBQkxFX0JBU0UocG9ydF9udW0pICsKKwkJCQkJdGFibGVfaW5kZXgsIDApOwogCQkvKiBDbGVhciBEQSBmaWx0ZXIgb3RoZXIgbXVsdGljYXN0IHRhYmxlIChFeF9kRk9NVCkgKi8KLQkJbXZfd3JpdGUoREFfRklMVEVSX09USEVSX01VTFRJQ0FTVF9UQUJMRV9CQVNFCi0JCQkJCShldGhfcG9ydF9udW0pICsgdGFibGVfaW5kZXgsIDApOworCQl3cmwobXAsIERBX0ZJTFRFUl9PVEhFUl9NVUxUSUNBU1RfVEFCTEVfQkFTRShwb3J0X251bSkgKworCQkJCQl0YWJsZV9pbmRleCwgMCk7CiAJfQogfQogCkBAIC0yNjI4LDcgKzI2MTMsNyBAQAogICoJQSByZWFkIGZyb20gdGhlIE1JQiBjb3VudGVyIHdpbGwgcmVzZXQgdGhlIGNvdW50ZXIuCiAgKgogICogSU5QVVQ6Ci0gKgl1bnNpZ25lZCBpbnQJZXRoX3BvcnRfbnVtCUV0aGVybmV0IFBvcnQgbnVtYmVyLgorICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KICAqCiAgKiBPVVRQVVQ6CiAgKglBZnRlciByZWFkaW5nIGFsbCBNSUIgY291bnRlcnMsIHRoZSBjb3VudGVycyByZXNldHMuCkBAIC0yNjM3LDE5ICsyNjIyLDIwIEBACiAgKglNSUIgY291bnRlciB2YWx1ZS4KICAqCiAgKi8KLXN0YXRpYyB2b2lkIGV0aF9jbGVhcl9taWJfY291bnRlcnModW5zaWduZWQgaW50IGV0aF9wb3J0X251bSkKK3N0YXRpYyB2b2lkIGV0aF9jbGVhcl9taWJfY291bnRlcnMoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCiB7CisJdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwogCWludCBpOwogCiAJLyogUGVyZm9ybSBkdW1teSByZWFkcyBmcm9tIE1JQiBjb3VudGVycyAqLwogCWZvciAoaSA9IEVUSF9NSUJfR09PRF9PQ1RFVFNfUkVDRUlWRURfTE9XOyBpIDwgRVRIX01JQl9MQVRFX0NPTExJU0lPTjsKIAkJCQkJCQkJCWkgKz0gNCkKLQkJbXZfcmVhZChNSUJfQ09VTlRFUlNfQkFTRShldGhfcG9ydF9udW0pICsgaSk7CisJCXJkbChtcCwgTUlCX0NPVU5URVJTX0JBU0UocG9ydF9udW0pICsgaSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHJlYWRfbWliKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLCBpbnQgb2Zmc2V0KQogewotCXJldHVybiBtdl9yZWFkKE1JQl9DT1VOVEVSU19CQVNFKG1wLT5wb3J0X251bSkgKyBvZmZzZXQpOworCXJldHVybiByZGwobXAsIE1JQl9DT1VOVEVSU19CQVNFKG1wLT5wb3J0X251bSkgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgdm9pZCBldGhfdXBkYXRlX21pYl9jb3VudGVycyhzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCkKQEAgLTI2ODUsNyArMjY3MSw3IEBACiAgKgl0aGUgc3BlY2lmaWVkIHBvcnQuCiAgKgogICogSU5QVVQ6Ci0gKgl1bnNpZ25lZCBpbnQJZXRoX3BvcnRfbnVtCUV0aGVybmV0IFBvcnQgbnVtYmVyLgorICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KICAqCiAgKiBPVVRQVVQ6CiAgKglOb25lCkBAIC0yNjk1LDIyICsyNjgxLDIyIEBACiAgKgktRU5PREVWIG9uIGZhaWx1cmUKICAqCiAgKi8KLXN0YXRpYyBpbnQgZXRoZXJuZXRfcGh5X2RldGVjdCh1bnNpZ25lZCBpbnQgcG9ydF9udW0pCitzdGF0aWMgaW50IGV0aGVybmV0X3BoeV9kZXRlY3Qoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCiB7CiAJdW5zaWduZWQgaW50IHBoeV9yZWdfZGF0YTA7CiAJaW50IGF1dG9fbmVnOwogCi0JZXRoX3BvcnRfcmVhZF9zbWlfcmVnKHBvcnRfbnVtLCAwLCAmcGh5X3JlZ19kYXRhMCk7CisJZXRoX3BvcnRfcmVhZF9zbWlfcmVnKG1wLCAwLCAmcGh5X3JlZ19kYXRhMCk7CiAJYXV0b19uZWcgPSBwaHlfcmVnX2RhdGEwICYgMHgxMDAwOwogCXBoeV9yZWdfZGF0YTAgXj0gMHgxMDAwOwkvKiBpbnZlcnQgYXV0b19uZWcgKi8KLQlldGhfcG9ydF93cml0ZV9zbWlfcmVnKHBvcnRfbnVtLCAwLCBwaHlfcmVnX2RhdGEwKTsKKwlldGhfcG9ydF93cml0ZV9zbWlfcmVnKG1wLCAwLCBwaHlfcmVnX2RhdGEwKTsKIAotCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhwb3J0X251bSwgMCwgJnBoeV9yZWdfZGF0YTApOworCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhtcCwgMCwgJnBoeV9yZWdfZGF0YTApOwogCWlmICgocGh5X3JlZ19kYXRhMCAmIDB4MTAwMCkgPT0gYXV0b19uZWcpCiAJCXJldHVybiAtRU5PREVWOwkJCQkvKiBjaGFuZ2UgZGlkbid0IHRha2UgKi8KIAogCXBoeV9yZWdfZGF0YTAgXj0gMHgxMDAwOwotCWV0aF9wb3J0X3dyaXRlX3NtaV9yZWcocG9ydF9udW0sIDAsIHBoeV9yZWdfZGF0YTApOworCWV0aF9wb3J0X3dyaXRlX3NtaV9yZWcobXAsIDAsIHBoeV9yZWdfZGF0YTApOwogCXJldHVybiAwOwogfQogCkBAIC0yNzIxLDcgKzI3MDcsNyBAQAogICoJVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGdpdmVuIGV0aGVybmV0IHBvcnQgUEhZIGFkZHJlc3MuCiAgKgogICogSU5QVVQ6Ci0gKgl1bnNpZ25lZCBpbnQJZXRoX3BvcnRfbnVtCUV0aGVybmV0IFBvcnQgbnVtYmVyLgorICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KICAqCiAgKiBPVVRQVVQ6CiAgKglOb25lLgpAQCAtMjczMCwxMyArMjcxNiwxMyBAQAogICoJUEhZIGFkZHJlc3MuCiAgKgogICovCi1zdGF0aWMgaW50IGV0aGVybmV0X3BoeV9nZXQodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSkKK3N0YXRpYyBpbnQgZXRoZXJuZXRfcGh5X2dldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVnX2RhdGE7CiAKLQlyZWdfZGF0YSA9IG12X3JlYWQoUEhZX0FERFJfUkVHKTsKKwlyZWdfZGF0YSA9IHJkbChtcCwgUEhZX0FERFJfUkVHKTsKIAotCXJldHVybiAoKHJlZ19kYXRhID4+ICg1ICogZXRoX3BvcnRfbnVtKSkgJiAweDFmKTsKKwlyZXR1cm4gKChyZWdfZGF0YSA+PiAoNSAqIG1wLT5wb3J0X251bSkpICYgMHgxZik7CiB9CiAKIC8qCkBAIC0yNzQ2LDcgKzI3MzIsNyBAQAogICoJVGhpcyByb3V0aW5lIHNldHMgdGhlIGdpdmVuIGV0aGVybmV0IHBvcnQgUEhZIGFkZHJlc3MuCiAgKgogICogSU5QVVQ6Ci0gKgl1bnNpZ25lZCBpbnQJZXRoX3BvcnRfbnVtCUV0aGVybmV0IFBvcnQgbnVtYmVyLgorICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgUG9ydC4KICAqCWludAkJcGh5X2FkZHIJUEhZIGFkZHJlc3MuCiAgKgogICogT1VUUFVUOgpAQCAtMjc1NiwxNSArMjc0MiwxNSBAQAogICoJTm9uZS4KICAqCiAgKi8KLXN0YXRpYyB2b2lkIGV0aGVybmV0X3BoeV9zZXQodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSwgaW50IHBoeV9hZGRyKQorc3RhdGljIHZvaWQgZXRoZXJuZXRfcGh5X3NldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwgaW50IHBoeV9hZGRyKQogewogCXUzMiByZWdfZGF0YTsKLQlpbnQgYWRkcl9zaGlmdCA9IDUgKiBldGhfcG9ydF9udW07CisJaW50IGFkZHJfc2hpZnQgPSA1ICogbXAtPnBvcnRfbnVtOwogCi0JcmVnX2RhdGEgPSBtdl9yZWFkKFBIWV9BRERSX1JFRyk7CisJcmVnX2RhdGEgPSByZGwobXAsIFBIWV9BRERSX1JFRyk7CiAJcmVnX2RhdGEgJj0gfigweDFmIDw8IGFkZHJfc2hpZnQpOwogCXJlZ19kYXRhIHw9IChwaHlfYWRkciAmIDB4MWYpIDw8IGFkZHJfc2hpZnQ7Ci0JbXZfd3JpdGUoUEhZX0FERFJfUkVHLCByZWdfZGF0YSk7CisJd3JsKG1wLCBQSFlfQUREUl9SRUcsIHJlZ19kYXRhKTsKIH0KIAogLyoKQEAgLTI3NzQsNyArMjc2MCw3IEBACiAgKglUaGlzIHJvdXRpbmUgdXRpbGl6ZXMgdGhlIFNNSSBpbnRlcmZhY2UgdG8gcmVzZXQgdGhlIGV0aGVybmV0IHBvcnQgUEhZLgogICoKICAqIElOUFVUOgotICoJdW5zaWduZWQgaW50CWV0aF9wb3J0X251bQlFdGhlcm5ldCBQb3J0IG51bWJlci4KKyAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IFBvcnQuCiAgKgogICogT1VUUFVUOgogICoJVGhlIFBIWSBpcyByZXNldC4KQEAgLTI3ODMsNTEgKzI3NjksNTIgQEAKICAqCU5vbmUuCiAgKgogICovCi1zdGF0aWMgdm9pZCBldGhlcm5ldF9waHlfcmVzZXQodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSkKK3N0YXRpYyB2b2lkIGV0aGVybmV0X3BoeV9yZXNldChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCkKIHsKIAl1bnNpZ25lZCBpbnQgcGh5X3JlZ19kYXRhOwogCiAJLyogUmVzZXQgdGhlIFBIWSAqLwotCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhldGhfcG9ydF9udW0sIDAsICZwaHlfcmVnX2RhdGEpOworCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhtcCwgMCwgJnBoeV9yZWdfZGF0YSk7CiAJcGh5X3JlZ19kYXRhIHw9IDB4ODAwMDsJLyogU2V0IGJpdCAxNSB0byByZXNldCB0aGUgUEhZICovCi0JZXRoX3BvcnRfd3JpdGVfc21pX3JlZyhldGhfcG9ydF9udW0sIDAsIHBoeV9yZWdfZGF0YSk7CisJZXRoX3BvcnRfd3JpdGVfc21pX3JlZyhtcCwgMCwgcGh5X3JlZ19kYXRhKTsKIAogCS8qIHdhaXQgZm9yIFBIWSB0byBjb21lIG91dCBvZiByZXNldCAqLwogCWRvIHsKIAkJdWRlbGF5KDEpOwotCQlldGhfcG9ydF9yZWFkX3NtaV9yZWcoZXRoX3BvcnRfbnVtLCAwLCAmcGh5X3JlZ19kYXRhKTsKKwkJZXRoX3BvcnRfcmVhZF9zbWlfcmVnKG1wLCAwLCAmcGh5X3JlZ19kYXRhKTsKIAl9IHdoaWxlIChwaHlfcmVnX2RhdGEgJiAweDgwMDApOwogfQogCi1zdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eCh1bnNpZ25lZCBpbnQgcG9ydF9udW0sCitzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKIAkJCQkJdW5zaWduZWQgaW50IHF1ZXVlcykKIHsKLQltdl93cml0ZShUUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksIHF1ZXVlcyk7CisJd3JsKG1wLCBUUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhtcC0+cG9ydF9udW0pLCBxdWV1ZXMpOwogfQogCi1zdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV9yeCh1bnNpZ25lZCBpbnQgcG9ydF9udW0sCitzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV9yeChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKIAkJCQkJdW5zaWduZWQgaW50IHF1ZXVlcykKIHsKLQltdl93cml0ZShSRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSwgcXVldWVzKTsKKwl3cmwobXAsIFJFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcobXAtPnBvcnRfbnVtKSwgcXVldWVzKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBtdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgodW5zaWduZWQgaW50IHBvcnRfbnVtKQorc3RhdGljIHVuc2lnbmVkIGludCBtdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCiB7CisJdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwogCXUzMiBxdWV1ZXM7CiAKIAkvKiBTdG9wIFR4IHBvcnQgYWN0aXZpdHkuIENoZWNrIHBvcnQgVHggYWN0aXZpdHkuICovCi0JcXVldWVzID0gbXZfcmVhZChUUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSkpICYgMHhGRjsKKwlxdWV1ZXMgPSByZGwobXAsIFRSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkgJiAweEZGOwogCWlmIChxdWV1ZXMpIHsKIAkJLyogSXNzdWUgc3RvcCBjb21tYW5kIGZvciBhY3RpdmUgcXVldWVzIG9ubHkgKi8KLQkJbXZfd3JpdGUoVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcocG9ydF9udW0pLCAocXVldWVzIDw8IDgpKTsKKwkJd3JsKG1wLCBUUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksIChxdWV1ZXMgPDwgOCkpOwogCiAJCS8qIFdhaXQgZm9yIGFsbCBUeCBhY3Rpdml0eSB0byB0ZXJtaW5hdGUuICovCiAJCS8qIENoZWNrIHBvcnQgY2F1c2UgcmVnaXN0ZXIgdGhhdCBhbGwgVHggcXVldWVzIGFyZSBzdG9wcGVkICovCi0JCXdoaWxlIChtdl9yZWFkKFRSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkgJiAweEZGKQorCQl3aGlsZSAocmRsKG1wLCBUUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSkpICYgMHhGRikKIAkJCXVkZWxheShQSFlfV0FJVF9NSUNST19TRUNPTkRTKTsKIAogCQkvKiBXYWl0IGZvciBUeCBGSUZPIHRvIGVtcHR5ICovCi0JCXdoaWxlIChtdl9yZWFkKFBPUlRfU1RBVFVTX1JFRyhwb3J0X251bSkpICYKKwkJd2hpbGUgKHJkbChtcCwgUE9SVF9TVEFUVVNfUkVHKHBvcnRfbnVtKSkgJgogCQkJCQkJCUVUSF9QT1JUX1RYX0ZJRk9fRU1QVFkpCiAJCQl1ZGVsYXkoUEhZX1dBSVRfTUlDUk9fU0VDT05EUyk7CiAJfQpAQCAtMjgzNSwxOSArMjgyMiwyMCBAQAogCXJldHVybiBxdWV1ZXM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3J4KHVuc2lnbmVkIGludCBwb3J0X251bSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3J4KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQogeworCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAl1MzIgcXVldWVzOwogCiAJLyogU3RvcCBSeCBwb3J0IGFjdGl2aXR5LiBDaGVjayBwb3J0IFJ4IGFjdGl2aXR5LiAqLwotCXF1ZXVlcyA9IG12X3JlYWQoUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSkpICYgMHhGRjsKKwlxdWV1ZXMgPSByZGwobXAsIFJFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcocG9ydF9udW0pKSAmIDB4RkY7CiAJaWYgKHF1ZXVlcykgewogCQkvKiBJc3N1ZSBzdG9wIGNvbW1hbmQgZm9yIGFjdGl2ZSBxdWV1ZXMgb25seSAqLwotCQltdl93cml0ZShSRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSwgKHF1ZXVlcyA8PCA4KSk7CisJCXdybChtcCwgUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksIChxdWV1ZXMgPDwgOCkpOwogCiAJCS8qIFdhaXQgZm9yIGFsbCBSeCBhY3Rpdml0eSB0byB0ZXJtaW5hdGUuICovCiAJCS8qIENoZWNrIHBvcnQgY2F1c2UgcmVnaXN0ZXIgdGhhdCBhbGwgUnggcXVldWVzIGFyZSBzdG9wcGVkICovCi0JCXdoaWxlIChtdl9yZWFkKFJFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcocG9ydF9udW0pKSAmIDB4RkYpCisJCXdoaWxlIChyZGwobXAsIFJFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcocG9ydF9udW0pKSAmIDB4RkYpCiAJCQl1ZGVsYXkoUEhZX1dBSVRfTUlDUk9fU0VDT05EUyk7CiAJfQogCkBAIC0yODYzLDcgKzI4NTEsNyBAQAogICoJaWRsZSBzdGF0ZSBhZnRlciB0aGlzIGNvbW1hbmQgaXMgcGVyZm9ybWVkIGFuZCB0aGUgcG9ydCBpcyBkaXNhYmxlZC4KICAqCiAgKiBJTlBVVDoKLSAqCXVuc2lnbmVkIGludAlldGhfcG9ydF9udW0JRXRoZXJuZXQgUG9ydCBudW1iZXIuCisgKglzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcAlFdGhlcm5ldCBQb3J0LgogICoKICAqIE9VVFBVVDoKICAqCUNoYW5uZWwgYWN0aXZpdHkgaXMgaGFsdGVkLgpAQCAtMjg3MiwyMiArMjg2MCwyMyBAQAogICoJTm9uZS4KICAqCiAgKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3Jlc2V0KHVuc2lnbmVkIGludCBwb3J0X251bSkKK3N0YXRpYyB2b2lkIGV0aF9wb3J0X3Jlc2V0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKQogeworCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAl1bnNpZ25lZCBpbnQgcmVnX2RhdGE7CiAKLQltdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfdHgocG9ydF9udW0pOwotCW12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV9yeChwb3J0X251bSk7CisJbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3R4KG1wKTsKKwltdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfcngobXApOwogCiAJLyogQ2xlYXIgYWxsIE1JQiBjb3VudGVycyAqLwotCWV0aF9jbGVhcl9taWJfY291bnRlcnMocG9ydF9udW0pOworCWV0aF9jbGVhcl9taWJfY291bnRlcnMobXApOwogCiAJLyogUmVzZXQgdGhlIEVuYWJsZSBiaXQgaW4gdGhlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLQlyZWdfZGF0YSA9IG12X3JlYWQoUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pKTsKKwlyZWdfZGF0YSA9IHJkbChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pKTsKIAlyZWdfZGF0YSAmPSB+KFNFUklBTF9QT1JUX0VOQUJMRQkJfAogCQkJRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAl8CiAJCQlGT1JDRV9MSU5LX1BBU1MpOwotCW12X3dyaXRlKFBPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgcmVnX2RhdGEpOworCXdybChtcCwgUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCByZWdfZGF0YSk7CiB9CiAKIApAQCAtMjg5OSw3ICsyODg4LDcgQEAKICAqCW9yZGVyIHRvIHBlcmZvcm0gUEhZIHJlZ2lzdGVyIHJlYWQuCiAgKgogICogSU5QVVQ6Ci0gKgl1bnNpZ25lZCBpbnQJcG9ydF9udW0JRXRoZXJuZXQgUG9ydCBudW1iZXIuCisgKglzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcAlFdGhlcm5ldCBQb3J0LgogICoJdW5zaWduZWQgaW50CXBoeV9yZWcJCVBIWSByZWdpc3RlciBhZGRyZXNzIG9mZnNldC4KICAqCXVuc2lnbmVkIGludAkqdmFsdWUJCVJlZ2lzdGVyIHZhbHVlIGJ1ZmZlci4KICAqCkBAIC0yOTExLDEwICsyOTAwLDEwIEBACiAgKgl0cnVlIG90aGVyd2lzZS4KICAqCiAgKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3JlYWRfc21pX3JlZyh1bnNpZ25lZCBpbnQgcG9ydF9udW0sCitzdGF0aWMgdm9pZCBldGhfcG9ydF9yZWFkX3NtaV9yZWcoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCiAJCQkJdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCAqdmFsdWUpCiB7Ci0JaW50IHBoeV9hZGRyID0gZXRoZXJuZXRfcGh5X2dldChwb3J0X251bSk7CisJaW50IHBoeV9hZGRyID0gZXRoZXJuZXRfcGh5X2dldChtcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIApAQCAtMjkyMiwyNyArMjkxMSwyNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0M3h4X2V0aF9waHlfbG9jaywgZmxhZ3MpOwogCiAJLyogd2FpdCBmb3IgdGhlIFNNSSByZWdpc3RlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCi0JZm9yIChpID0gMDsgbXZfcmVhZChTTUlfUkVHKSAmIEVUSF9TTUlfQlVTWTsgaSsrKSB7CisJZm9yIChpID0gMDsgcmRsKG1wLCBTTUlfUkVHKSAmIEVUSF9TTUlfQlVTWTsgaSsrKSB7CiAJCWlmIChpID09IFBIWV9XQUlUX0lURVJBVElPTlMpIHsKLQkJCXByaW50aygibXY2NDN4eCBQSFkgYnVzeSB0aW1lb3V0LCBwb3J0ICVkXG4iLCBwb3J0X251bSk7CisJCQlwcmludGsoIiVzOiBQSFkgYnVzeSB0aW1lb3V0XG4iLCBtcC0+ZGV2LT5uYW1lKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXVkZWxheShQSFlfV0FJVF9NSUNST19TRUNPTkRTKTsKIAl9CiAKLQltdl93cml0ZShTTUlfUkVHLAorCXdybChtcCwgU01JX1JFRywKIAkJKHBoeV9hZGRyIDw8IDE2KSB8IChwaHlfcmVnIDw8IDIxKSB8IEVUSF9TTUlfT1BDT0RFX1JFQUQpOwogCiAJLyogbm93IHdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHZhbGlkICovCi0JZm9yIChpID0gMDsgIShtdl9yZWFkKFNNSV9SRUcpICYgRVRIX1NNSV9SRUFEX1ZBTElEKTsgaSsrKSB7CisJZm9yIChpID0gMDsgIShyZGwobXAsIFNNSV9SRUcpICYgRVRIX1NNSV9SRUFEX1ZBTElEKTsgaSsrKSB7CiAJCWlmIChpID09IFBIWV9XQUlUX0lURVJBVElPTlMpIHsKLQkJCXByaW50aygibXY2NDN4eCBQSFkgcmVhZCB0aW1lb3V0LCBwb3J0ICVkXG4iLCBwb3J0X251bSk7CisJCQlwcmludGsoIiVzOiBQSFkgcmVhZCB0aW1lb3V0XG4iLCBtcC0+ZGV2LT5uYW1lKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXVkZWxheShQSFlfV0FJVF9NSUNST19TRUNPTkRTKTsKIAl9CiAKLQkqdmFsdWUgPSBtdl9yZWFkKFNNSV9SRUcpICYgMHhmZmZmOworCSp2YWx1ZSA9IHJkbChtcCwgU01JX1JFRykgJiAweGZmZmY7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXY2NDN4eF9ldGhfcGh5X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTI5NTUsNyArMjk0NCw3IEBACiAgKglvcmRlciB0byBwZXJmb3JtIHdyaXRlcyB0byBQSFkgcmVnaXN0ZXJzLgogICoKICAqIElOUFVUOgotICoJdW5zaWduZWQgaW50CWV0aF9wb3J0X251bQlFdGhlcm5ldCBQb3J0IG51bWJlci4KKyAqCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wCUV0aGVybmV0IFBvcnQuCiAgKgl1bnNpZ25lZCBpbnQJcGh5X3JlZwkJUEhZIHJlZ2lzdGVyIGFkZHJlc3Mgb2Zmc2V0LgogICoJdW5zaWduZWQgaW50CXZhbHVlCQlSZWdpc3RlciB2YWx1ZS4KICAqCkBAIC0yOTY3LDI5ICsyOTU2LDI4IEBACiAgKgl0cnVlIG90aGVyd2lzZS4KICAqCiAgKi8KLXN0YXRpYyB2b2lkIGV0aF9wb3J0X3dyaXRlX3NtaV9yZWcodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSwKK3N0YXRpYyB2b2lkIGV0aF9wb3J0X3dyaXRlX3NtaV9yZWcoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCiAJCQkJICAgdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlpbnQgcGh5X2FkZHI7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBoeV9hZGRyID0gZXRoZXJuZXRfcGh5X2dldChldGhfcG9ydF9udW0pOworCXBoeV9hZGRyID0gZXRoZXJuZXRfcGh5X2dldChtcCk7CiAKIAkvKiB0aGUgU01JIHJlZ2lzdGVyIGlzIGEgc2hhcmVkIHJlc291cmNlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjQzeHhfZXRoX3BoeV9sb2NrLCBmbGFncyk7CiAKIAkvKiB3YWl0IGZvciB0aGUgU01JIHJlZ2lzdGVyIHRvIGJlY29tZSBhdmFpbGFibGUgKi8KLQlmb3IgKGkgPSAwOyBtdl9yZWFkKFNNSV9SRUcpICYgRVRIX1NNSV9CVVNZOyBpKyspIHsKKwlmb3IgKGkgPSAwOyByZGwobXAsIFNNSV9SRUcpICYgRVRIX1NNSV9CVVNZOyBpKyspIHsKIAkJaWYgKGkgPT0gUEhZX1dBSVRfSVRFUkFUSU9OUykgewotCQkJcHJpbnRrKCJtdjY0M3h4IFBIWSBidXN5IHRpbWVvdXQsIHBvcnQgJWRcbiIsCi0JCQkJCQkJCWV0aF9wb3J0X251bSk7CisJCQlwcmludGsoIiVzOiBQSFkgYnVzeSB0aW1lb3V0XG4iLCBtcC0+ZGV2LT5uYW1lKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXVkZWxheShQSFlfV0FJVF9NSUNST19TRUNPTkRTKTsKIAl9CiAKLQltdl93cml0ZShTTUlfUkVHLCAocGh5X2FkZHIgPDwgMTYpIHwgKHBoeV9yZWcgPDwgMjEpIHwKKwl3cmwobXAsIFNNSV9SRUcsIChwaHlfYWRkciA8PCAxNikgfCAocGh5X3JlZyA8PCAyMSkgfAogCQkJCUVUSF9TTUlfT1BDT0RFX1dSSVRFIHwgKHZhbHVlICYgMHhmZmZmKSk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXY2NDN4eF9ldGhfcGh5X2xvY2ssIGZsYWdzKTsKQEAgLTMwMDAsMTcgKzI5ODgsMTcgQEAKICAqLwogc3RhdGljIGludCBtdjY0M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCiB7Ci0JaW50IHZhbDsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbDsKIAotCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhtcC0+cG9ydF9udW0sIGxvY2F0aW9uLCAmdmFsKTsKKwlldGhfcG9ydF9yZWFkX3NtaV9yZWcobXAsIGxvY2F0aW9uLCAmdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCiBzdGF0aWMgdm9pZCBtdjY0M3h4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsKQogewogCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlldGhfcG9ydF93cml0ZV9zbWlfcmVnKG1wLT5wb3J0X251bSwgbG9jYXRpb24sIHZhbCk7CisJZXRoX3BvcnRfd3JpdGVfc21pX3JlZyhtcCwgbG9jYXRpb24sIHZhbCk7CiB9CiAKIC8qCkBAIC0zMTU1LDcgKzMxNDMsNyBAQAogCWludCBzdGF0X29mZnNldDsKIH07CiAKLSNkZWZpbmUgTVY2NDNYWF9TVEFUKG0pIHNpemVvZigoKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKikwKS0+bSksIFwKKyNkZWZpbmUgTVY2NDNYWF9TVEFUKG0pIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlLCBtKSwgXAogCQkJCQlvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlLCBtKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG12NjQzeHhfc3RhdHMgbXY2NDN4eF9nc3RyaW5nc19zdGF0c1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IDM4NWY2OWMuLjQ2MTE5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTUxMSwxMCArNTExLDEwIEBACiAvKiBOb3RlIHRoYXQgdXNpbmcgb25seSAzMiBiaXQgZmllbGRzIHNpbXBsaWZpZXMgY29udmVyc2lvbiB0byBiaWctZW5kaWFuCiAgICBhcmNoaXRlY3R1cmVzLiAqLwogc3RydWN0IG5ldGRldl9kZXNjIHsKLQl1MzIgbmV4dF9kZXNjOwotCXMzMiBjbWRfc3RhdHVzOwotCXUzMiBhZGRyOwotCXUzMiBzb2Z0d2FyZV91c2U7CisJX19sZTMyIG5leHRfZGVzYzsKKwlfX2xlMzIgY21kX3N0YXR1czsKKwlfX2xlMzIgYWRkcjsKKwlfX2xlMzIgc29mdHdhcmVfdXNlOwogfTsKIAogLyogQml0cyBpbiBuZXR3b3JrX2Rlc2Muc3RhdHVzICovCkBAIC03ODYsNyArNzg2LDggQEAKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wOwogCWludCBpLCBvcHRpb24sIGlycSwgY2hpcF9pZHggPSBlbnQtPmRyaXZlcl9kYXRhOwogCXN0YXRpYyBpbnQgZmluZF9jbnQgPSAtMTsKLQl1bnNpZ25lZCBsb25nIGlvc3RhcnQsIGlvc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgaW9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGlvc2l6ZTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAljb25zdCBpbnQgcGNpYmFyID0gMTsgLyogUENJIGJhc2UgYWRkcmVzcyByZWdpc3RlciAqLwogCWludCBwcmV2X2VlZGF0YTsKQEAgLTk0NiwxMCArOTQ3LDExIEBACiAJCWdvdG8gZXJyX2NyZWF0ZV9maWxlOwogCiAJaWYgKG5ldGlmX21zZ19kcnYobnApKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIm5hdHNlbWkgJXM6ICVzIGF0ICUjMDhseCAiCisJCXByaW50ayhLRVJOX0lORk8gIm5hdHNlbWkgJXM6ICVzIGF0ICUjMDhsbHggIgogCQkgICAgICAgIiglcyksICVzLCBJUlEgJWQiLAotCQkgICAgICAgZGV2LT5uYW1lLCBuYXRzZW1pX3BjaV9pbmZvW2NoaXBfaWR4XS5uYW1lLCBpb3N0YXJ0LAotCQkgICAgICAgcGNpX25hbWUobnAtPnBjaV9kZXYpLCBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSwgaXJxKTsKKwkJICAgICAgIGRldi0+bmFtZSwgbmF0c2VtaV9wY2lfaW5mb1tjaGlwX2lkeF0ubmFtZSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW9zdGFydCwgcGNpX25hbWUobnAtPnBjaV9kZXYpLAorCQkgICAgICAgcHJpbnRfbWFjKG1hYywgZGV2LT5kZXZfYWRkciksIGlycSk7CiAJCWlmIChkZXYtPmlmX3BvcnQgPT0gUE9SVF9UUCkKIAkJCXByaW50aygiLCBwb3J0IFRQLlxuIik7CiAJCWVsc2UgaWYgKG5wLT5pZ25vcmVfcGh5KQpAQCAtMjAxOCw3ICsyMDIwLDcgQEAKIAkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgUnggcXVldWUuICovCiAJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7CiAJCW5wLT5yeF9yaW5nW2ldLmNtZF9zdGF0dXMgPSAwOwotCQlucC0+cnhfcmluZ1tpXS5hZGRyID0gMHhCQURGMDBEMDsgLyogQW4gaW52YWxpZCBhZGRyZXNzLiAqLworCQlucC0+cnhfcmluZ1tpXS5hZGRyID0gY3B1X3RvX2xlMzIoMHhCQURGMDBEMCk7IC8qIEFuIGludmFsaWQgYWRkcmVzcy4gKi8KIAkJaWYgKG5wLT5yeF9za2J1ZmZbaV0pIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBjaV9kZXYsCiAJCQkJbnAtPnJ4X2RtYVtpXSwgYnVmbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKaW5kZXggYjU2OWM5MC4uZGUwZGU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUyay1wY2kuYworKysgYi9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCkBAIC01MzUsOSArNTM1LDkgQEAKIAkJaWYgKGNvdW50ICYgMykgewogCQkJYnVmICs9IGNvdW50ICYgfjM7CiAJCQlpZiAoY291bnQgJiAyKSB7Ci0JCQkJdTE2ICpiID0gKHUxNiAqKWJ1ZjsKKwkJCQlfX2xlMTYgKmIgPSAoX19sZTE2ICopYnVmOwogCi0JCQkJKmIrKyA9IGxlMTZfdG9fY3B1KGludyhORV9CQVNFICsgTkVfREFUQVBPUlQpKTsKKwkJCQkqYisrID0gY3B1X3RvX2xlMTYoaW53KE5FX0JBU0UgKyBORV9EQVRBUE9SVCkpOwogCQkJCWJ1ZiA9IChjaGFyICopYjsKIAkJCX0KIAkJCWlmIChjb3VudCAmIDEpCkBAIC02MDAsOSArNjAwLDkgQEAKIAkJaWYgKGNvdW50ICYgMykgewogCQkJYnVmICs9IGNvdW50ICYgfjM7CiAJCQlpZiAoY291bnQgJiAyKSB7Ci0JCQkJdTE2ICpiID0gKHUxNiAqKWJ1ZjsKKwkJCQlfX2xlMTYgKmIgPSAoX19sZTE2ICopYnVmOwogCi0JCQkJb3V0dyhjcHVfdG9fbGUxNigqYisrKSwgTkVfQkFTRSArIE5FX0RBVEFQT1JUKTsKKwkJCQlvdXR3KGxlMTZfdG9fY3B1KCpiKyspLCBORV9CQVNFICsgTkVfREFUQVBPUlQpOwogCQkJCWJ1ZiA9IChjaGFyICopYjsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDUwMWU0NTEuLjY2NTM0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTczMCw3ICs3MzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHsKIAkubmFtZQk9ICJuZXRjb24iLAotCS5mbGFncwk9IENPTl9FTkFCTEVEIHwgQ09OX1BSSU5UQlVGRkVSLAorCS5mbGFncwk9IENPTl9FTkFCTEVELAogCS53cml0ZQk9IHdyaXRlX21zZywKIH07CiAKQEAgLTc0OSw2ICs3NDksOSBAQAogCQkJCWVyciA9IFBUUl9FUlIobnQpOwogCQkJCWdvdG8gZmFpbDsKIAkJCX0KKwkJCS8qIER1bXAgZXhpc3RpbmcgcHJpbnRrcyB3aGVuIHdlIHJlZ2lzdGVyICovCisJCQluZXRjb25zb2xlLmZsYWdzIHw9IENPTl9QUklOVEJVRkZFUjsKKwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkKCZudC0+bGlzdCwgJnRhcmdldF9saXN0KTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IDJiYzVlYWEuLjhjYjI5ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtODUsNyArODUsNyBAQAogCShzaXplb2Yoc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyKSAqIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KQogI2RlZmluZSBSQ1ZfQlVGRlNJWkUJXAogCShzaXplb2Yoc3RydWN0IG5ldHhlbl9yeF9idWZmZXIpICogcmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50KQotI2RlZmluZSBmaW5kX2RpZmZfYW1vbmcoYSxiLHJhbmdlKSAoKGEpPD0oYik/KChiKS0oYSkpOigoYikrKHJhbmdlKS0oYSkpKQorI2RlZmluZSBmaW5kX2RpZmZfYW1vbmcoYSxiLHJhbmdlKSAoKGEpPChiKT8oKGIpLShhKSk6KChiKSsocmFuZ2UpLShhKSkpCiAKICNkZWZpbmUgTkVUWEVOX05FVERFVl9TVEFUVVMJCTB4MQogI2RlZmluZSBORVRYRU5fUkNWX1BST0RVQ0VSX09GRlNFVAkwCkBAIC05NSwyMyArOTUsNiBAQAogCiAjZGVmaW5lIEFERFJfSU5fV0lORE9XMShvZmYpCVwKIAkoKG9mZiA+IE5FVFhFTl9DUkJfUENJWF9IT1NUMikgJiYgKG9mZiA8IE5FVFhFTl9DUkJfTUFYKSkgPyAxIDogMAotLyoKLSAqIEluIG5ldHhlbl9uaWNfZG93bigpLCB3ZSBtdXN0IHdhaXQgZm9yIGFueSBwZW5kaW5nIGNhbGxiYWNrIHJlcXVlc3RzIGludG8KLSAqIG5ldHhlbl93YXRjaGRvZ190YXNrKCkgdG8gY29tcGxldGU7IGVnIG90aGVyd2lzZSB0aGUgd2F0Y2hkb2dfdGltZXIgY291bGQgYmUKLSAqIHJlZW5hYmxlZCByaWdodCBhZnRlciBpdCBpcyBkZWxldGVkIGluIG5ldHhlbl9uaWNfZG93bigpLiBGTFVTSF9TQ0hFRFVMRURfV09SSygpCi0gKiBkb2VzIHRoaXMgc3luY2hyb25pemF0aW9uLgotICoKLSAqIE5vcm1hbGx5LCBzY2hlZHVsZV93b3JrKCkvZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSBjb3VsZCBoYXZlIHdvcmtlZCwgYnV0Ci0gKiBuZXR4ZW5fbmljX2Nsb3NlKCkgaXMgaW52b2tlZCB3aXRoIGtlcm5lbCBydG5sIGxvY2sgaGVsZC4gbmV0aWZfY2Fycmllcl9vZmYoKQotICogY2FsbCBpbiBuZXR4ZW5fbmljX2Nsb3NlKCkgdHJpZ2dlcnMgYSBzY2hlZHVsZV93b3JrKCZsaW5rd2F0Y2hfd29yayksIGFuZCBhCi0gKiBzdWJzZXF1ZW50IGNhbGwgdG8gZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSBpbiBuZXR4ZW5fbmljX2Rvd24oKSB3b3VsZCBjYXVzZQotICogbGlua3dhdGNoX2V2ZW50KCkgdG8gYmUgZXhlY3V0ZWQgd2hpY2ggYWxzbyBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBydG5sCi0gKiBsb2NrIHRodXMgY2F1c2luZyBhIGRlYWRsb2NrLgotICovCi0KLSNkZWZpbmUgU0NIRURVTEVfV09SSyh0cCkJcXVldWVfd29yayhuZXR4ZW5fd29ya3EsIHRwKQotI2RlZmluZSBGTFVTSF9TQ0hFRFVMRURfV09SSygpCWZsdXNoX3dvcmtxdWV1ZShuZXR4ZW5fd29ya3EpCi1leHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5ldHhlbl93b3JrcTsKIAogLyoKICAqIG5vcm1hbGl6ZSBhIDY0TUIgY3JiIGFkZHJlc3MgdG8gMzJNQiBQQ0kgd2luZG93CkBAIC0yMDQsNyArMTg3LDcgQEAKIAkJCT8gUkNWX0RFU0NfTFJPIDoJXAogCQkJKFJDVl9ERVNDX05PUk1BTCkpKQogCi0jZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlMJCTEwMjQKKyNkZWZpbmUgTUFYX0NNRF9ERVNDUklQVE9SUwkJNDA5NgogI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTCQkxNjM4NAogI2RlZmluZSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1QJKE1BWF9DTURfREVTQ1JJUFRPUlMgLyA0KQogI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHCQkoTUFYX1JDVl9ERVNDUklQVE9SUyAvIDQpCkBAIC04MTgsMTUgKzgwMSw4IEBACiAJdTY0ICBiYWRza2JsZW47CiAJdTY0ICBub2NtZGRlc2NyaXB0b3I7CiAJdTY0ICBwb2xsZWQ7Ci0JdTY0ICB1cGhhcHB5OwotCXU2NCAgdXBkcm9wcGVkOwotCXU2NCAgdXBsY29uZzsKLQl1NjQgIHVwaGNvbmc7Ci0JdTY0ICB1cG1jb25nOwotCXU2NCAgdXBkdW5ubzsKLQl1NjQgIHNrYmZyZWVkOworCXU2NCAgcnhkcm9wcGVkOwogCXU2NCAgdHhkcm9wcGVkOwotCXU2NCAgdHhudWxsc2tiOwogCXU2NCAgY3N1bW1lZDsKIAl1NjQgIG5vX3JjdjsKIAl1NjQgIHJ4Ynl0ZXM7CkBAIC04NDIsNyArODE4LDYgQEAKIAl1MzIgZmxhZ3M7CiAJdTMyIHByb2R1Y2VyOwogCXUzMiByY3ZfcGVuZGluZzsJLyogTnVtIG9mIGJ1ZnMgcG9zdGVkIGluIHBoYW50b20gKi8KLQl1MzIgcmN2X2ZyZWU7CQkvKiBOdW0gb2YgYnVmcyBpbiBmcmVlIGxpc3QgKi8KIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGh5c19wZGV2OwogCXN0cnVjdCByY3ZfZGVzYyAqZGVzY19oZWFkOwkvKiBhZGRyZXNzIG9mIHJ4IHJpbmcgaW4gUGhhbnRvbSAqLwpAQCAtODg5LDggKzg2NCw2IEBACiAJaW50IG10dTsKIAlpbnQgcG9ydG51bTsKIAotCXNwaW5sb2NrX3QgdHhfbG9jazsKLQlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CiAJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0ICB0eF90aW1lb3V0X3Rhc2s7CkBAIC04OTksMTYgKzg3MiwxMiBAQAogCiAJdTMyIGNtZF9wcm9kdWNlcjsKIAlfX2xlMzIgKmNtZF9jb25zdW1lcjsKLQogCXUzMiBsYXN0X2NtZF9jb25zdW1lcjsKKwogCXUzMiBtYXhfdHhfZGVzY19jb3VudDsKIAl1MzIgbWF4X3J4X2Rlc2NfY291bnQ7CiAJdTMyIG1heF9qdW1ib19yeF9kZXNjX2NvdW50OwogCXUzMiBtYXhfbHJvX3J4X2Rlc2NfY291bnQ7Ci0JLyogTnVtIG9mIGluc3RhbmNlcyBhY3RpdmUgb24gY21kIGJ1ZmZlciByaW5nICovCi0JdTMyIHByb2NfY21kX2J1Zl9jb3VudGVyOwotCi0JdTMyIG51bV90aHJlYWRzLCB0b3RhbF90aHJlYWRzOwkvKlVzZSB0byBrZWVwIHRyYWNrIG9mIHhtaXQgdGhyZWFkcyAqLwogCiAJdTMyIGZsYWdzOwogCXUzMiBpcnE7CkBAIC05NDIsNiArOTExLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqY3R4X2Rlc2NfcGRldjsKIAlkbWFfYWRkcl90IGN0eF9kZXNjX3BoeXNfYWRkcjsKIAlpbnQgaW50cl9zY2hlbWU7CisJaW50IG1zaV9tb2RlOwogCWludCAoKmVuYWJsZV9waHlfaW50ZXJydXB0cykgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKTsKIAlpbnQgKCpkaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopOwogCXZvaWQgKCpoYW5kbGVfcGh5X2ludHIpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKik7CkBAIC0xMDYzLDcgKzEwMzMsNiBAQAogaW50IG5ldHhlbl9yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcik7CiAKIC8qIEZ1bmN0aW9ucyBmcm9tIG5ldHhlbl9uaWNfaXNyLmMgKi8KLWludCBuZXR4ZW5fbmljX2xpbmtfb2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9zdyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX2h3KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkICpuZXR4ZW5fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzeiwgZG1hX2FkZHJfdCAqIHB0ciwKQEAgLTEwNzUsMTIgKzEwNDQsMTAgQEAKIAkJICAgICAgc3RydWN0IGNtZF9kZXNjX3R5cGUwICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBuZXR4ZW5fbmljX2h3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5fbmljX2NsZWFyX3N0YXRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgbmV0eGVuX25pY19yeF9oYXNfd29yayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IG5ldHhlbl9uaWNfdHhfaGFzX3dvcmsoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjdHgsCiAJCQkgICAgdTMyIHJpbmdpZCk7Ci1pbnQgbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcodW5zaWduZWQgbG9uZyBkYXRhKTsKK2ludCBuZXR4ZW5fcHJvY2Vzc19jbWRfcmluZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdTMyIG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGN0eCwgaW50IG1heCk7CiB2b2lkIG5ldHhlbl9uaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogaW50IG5ldHhlbl9uaWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggN2E4NzZmNC4uNmU5OGQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtNjQsMTUgKzY0LDcgQEAKIAl7ImJhZF9za2JfbGVuIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLmJhZHNrYmxlbil9LAogCXsibm9fY21kX2Rlc2MiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMubm9jbWRkZXNjcmlwdG9yKX0sCiAJeyJwb2xsZWQiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMucG9sbGVkKX0sCi0JeyJ1cGhhcHB5IiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnVwaGFwcHkpfSwKLQl7InVwZHJvcHBlZCIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy51cGRyb3BwZWQpfSwKLQl7InVwbGNvbmciLCBORVRYRU5fTklDX1NUQVQoc3RhdHMudXBsY29uZyl9LAotCXsidXBoY29uZyIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy51cGhjb25nKX0sCi0JeyJ1cG1jb25nIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnVwbWNvbmcpfSwKLQl7InVwZHVubm8iLCBORVRYRU5fTklDX1NUQVQoc3RhdHMudXBkdW5ubyl9LAotCXsic2tiX2ZyZWVkIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnNrYmZyZWVkKX0sCiAJeyJ0eF9kcm9wcGVkIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnR4ZHJvcHBlZCl9LAotCXsidHhfbnVsbF9za2IiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMudHhudWxsc2tiKX0sCiAJeyJjc3VtbWVkIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLmNzdW1tZWQpfSwKIAl7Im5vX3JjdiIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5ub19yY3YpfSwKIAl7InJ4X2J5dGVzIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnJ4Ynl0ZXMpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKaW5kZXggZDcyZjhmOC4uMjRkMDI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNDU2LDYgKzQ1NSwxMiBAQAogI2RlZmluZSBJU1JfSU5UX01BU0tfU0xPVwkoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfSU5UX01BU0spKQogI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVMJKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVMpKQogI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLCShORVRYRU5fUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTSykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMSAgIChORVRYRU5fUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0YxKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GMSAgICAgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0YxKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YyICAgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjIpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0YyICAgICAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjIpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjMgICAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GMykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjMgICAgIChORVRYRU5fUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GMykpCiAKICNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFCTEyOAogI2RlZmluZSBORVRYRU5fUENJX0REUl9ORVQJKDB4MDAwMDAwMDBVTCkKQEAgLTY2Miw2ICs2NjcsMTIgQEAKIAogI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVMJKDB4MTAxMTgpCiAjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0sJKDB4MTAxMjgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GMSAoMHgxMDE2MCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfTUFTS19GMSAgICgweDEwMTcwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjIgKDB4MTAxNjQpCisjZGVmaW5lIFBDSVhfVEFSR0VUX01BU0tfRjIgICAoMHgxMDE3NCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0YzICgweDEwMTY4KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YzICAgKDB4MTAxNzgpCiAKICNkZWZpbmUgUENJWF9NU0lfRjAJCSgweDEzMDAwKQogI2RlZmluZSBQQ0lYX01TSV9GMQkJKDB4MTMwMDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCAwMTM1NTcwLi4wNTc0OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTM5OCw2ICszOTgsOCBAQAogCQlORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfTklDX0NBUEFCSUxJVElFU19GVykpOwogCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEZXIGNhcGFiaWxpdGllczoweCV4XG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAogCQkJYWRhcHRlci0+aW50cl9zY2hlbWUpOworCWFkYXB0ZXItPm1zaV9tb2RlID0gcmVhZGwoCisJCU5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9OSUNfTVNJX01PREVfRlcpKTsKIAlEUFJJTlRLKElORk8sICJSZWNlaXZlIFBlZyByZWFkeSB0b28uIHN0YXJ0aW5nIHN0dWZmXG4iKTsKIAogCWFkZHIgPSBuZXR4ZW5fYWxsb2MoYWRhcHRlci0+YWh3LnBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggOWUzOGJjYi4uNDVmYTMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtMTQ1LDYgKzE0NSw4IEBACiAJLyogV2luZG93IDEgY2FsbCAqLwogCXdyaXRlbChJTlRSX1NDSEVNRV9QRVJQT1JULAogCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfTklDX0NBUEFCSUxJVElFU19IT1NUKSk7CisJd3JpdGVsKE1TSV9NT0RFX01VTFRJRlVOQywKKwkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX05JQ19NU0lfTU9ERV9IT1NUKSk7CiAJd3JpdGVsKE1QT1JUX01VTFRJX0ZVTkNUSU9OX01PREUsCiAJICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9NUE9SVF9NT0RFKSk7CiAJd3JpdGVsKFBIQU5fSU5JVElBTElaRV9BQ0ssCkBAIC0xODMsNyArMTg1LDYgQEAKIAkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKSB7CiAJCQlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqcnhfYnVmOwogCQkJcmN2X2Rlc2MgPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4aWRdLnJjdl9kZXNjW3JpbmddOwotCQkJcmN2X2Rlc2MtPnJjdl9mcmVlID0gcmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50OwogCQkJcmN2X2Rlc2MtPmJlZ2luX2FsbG9jID0gMDsKIAkJCXJ4X2J1ZiA9IHJjdl9kZXNjLT5yeF9idWZfYXJyOwogCQkJbnVtX3J4X2J1ZnMgPSByY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQ7CkBAIC05NzQsMjggKzk3NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBuZXR4ZW5fbmljX3J4X2hhc193b3JrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgY3R4OwotCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0KLQkJICAgICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4XSk7Ci0JCXUzMiBjb25zdW1lcjsKLQkJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjX2hlYWQ7Ci0JCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYzsKLQotCQljb25zdW1lciA9IHJlY3ZfY3R4LT5zdGF0dXNfcnhfY29uc3VtZXI7Ci0JCWRlc2NfaGVhZCA9IHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKLQkJZGVzYyA9ICZkZXNjX2hlYWRbY29uc3VtZXJdOwotCi0JCWlmIChuZXR4ZW5fZ2V0X3N0c19vd25lcihkZXNjKSAmIFNUQVRVU19PV05FUl9IT1NUKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbmV0eGVuX25pY19jaGVja190ZW1wKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwpAQCAtMTAzOCw3ICsxMDE3LDYgQEAKIAogdm9pZCBuZXR4ZW5fd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHhlbl9hZGFwdGVyLCB3YXRjaGRvZ190YXNrKTsKIApAQCAtMTA0OCwyMCArMTAyNiw2IEBACiAJaWYgKGFkYXB0ZXItPmhhbmRsZV9waHlfaW50cikKIAkJYWRhcHRlci0+aGFuZGxlX3BoeV9pbnRyKGFkYXB0ZXIpOwogCi0JbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWlmICgobmV0aWZfcnVubmluZyhuZXRkZXYpKSAmJiAhbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpICYmCi0JCQluZXR4ZW5fbmljX2xpbmtfb2soYWRhcHRlcikgKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzICVzIChwb3J0ICVkKSwgTGluayBpcyB1cFxuIiwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnBvcnRudW0pOwotCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKLQl9IGVsc2UgaWYoIShuZXRpZl9ydW5uaW5nKG5ldGRldikpICYmIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIExpbmsgaXMgRG93blxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOwotCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JfQotCiAJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDIgKiBIWik7CiB9CiAKQEAgLTExMjUsNyArMTA4OSw3IEBACiAJc2tiID0gKHN0cnVjdCBza19idWZmICopYnVmZmVyLT5za2I7CiAKIAlpZiAobGlrZWx5KGFkYXB0ZXItPnJ4X2NzdW0gJiYKLQkJCQluZXR4ZW5fZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEpID09IFNUQVRVU19DS1NVTV9PSykpIHsKKwkJCW5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YSkgPT0gU1RBVFVTX0NLU1VNX09LKSkgewogCQlhZGFwdGVyLT5zdGF0cy5jc3VtbWVkKys7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlCkBAIC0xMTQyLDQwICsxMTA2LDggQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCiAJcmV0ID0gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQotCS8qCi0JICogUkg6IERvIHdlIG5lZWQgdGhlc2Ugc3RhdHMgb24gYSByZWd1bGFyIGJhc2lzLiBDYW4gd2UgZ2V0IGl0IGZyb20KLQkgKiBMaW51eCBzdGF0cy4KLQkgKi8KLQlzd2l0Y2ggKHJldCkgewotCWNhc2UgTkVUX1JYX1NVQ0NFU1M6Ci0JCWFkYXB0ZXItPnN0YXRzLnVwaGFwcHkrKzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5FVF9SWF9DTl9MT1c6Ci0JCWFkYXB0ZXItPnN0YXRzLnVwbGNvbmcrKzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5FVF9SWF9DTl9NT0Q6Ci0JCWFkYXB0ZXItPnN0YXRzLnVwbWNvbmcrKzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5FVF9SWF9DTl9ISUdIOgotCQlhZGFwdGVyLT5zdGF0cy51cGhjb25nKys7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRfUlhfRFJPUDoKLQkJYWRhcHRlci0+c3RhdHMudXBkcm9wcGVkKys7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYWRhcHRlci0+c3RhdHMudXBkdW5ubysrOwotCQlicmVhazsKLQl9Ci0KIAluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCi0JcmN2X2Rlc2MtPnJjdl9mcmVlKys7CiAJcmN2X2Rlc2MtPnJjdl9wZW5kaW5nLS07CiAKIAkvKgpAQCAtMTIwMCwxMyArMTEzMiw2IEBACiAJdTMyIHByb2R1Y2VyID0gMDsKIAlpbnQgY291bnQgPSAwLCByaW5nOwogCi0JRFBSSU5USyhJTkZPLCAicHJvY2VzaW5nIHJlY2VpdmVcbiIpOwotCS8qCi0JICogd2UgYXNzdW1lIGluIHRoaXMgY2FzZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHBvcnQgYW5kIHRoYXQgaXMKLQkgKiBwb3J0ICMxLi4uY2hhbmdlcyBuZWVkIHRvIGJlIGRvbmUgaW4gZmlybXdhcmUgdG8gaW5kaWNhdGUgcG9ydAotCSAqIG51bWJlciBhcyBwYXJ0IG9mIHRoZSBkZXNjcmlwdG9yLiBUaGlzIHdheSB3ZSB3aWxsIGJlIGFibGUgdG8gZ2V0Ci0JICogdGhlIG5ldGRldiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBkZXZpY2UuCi0JICovCiAJd2hpbGUgKGNvdW50IDwgbWF4KSB7CiAJCWRlc2MgPSAmZGVzY19oZWFkW2NvbnN1bWVyXTsKIAkJaWYgKCEobmV0eGVuX2dldF9zdHNfb3duZXIoZGVzYykgJiBTVEFUVVNfT1dORVJfSE9TVCkpIHsKQEAgLTEyMTksMTEgKzExNDQsOCBAQAogCQljb25zdW1lciA9IChjb25zdW1lciArIDEpICYgKGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50IC0gMSk7CiAJCWNvdW50Kys7CiAJfQotCWlmIChjb3VudCkgewotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgTlVNX1JDVl9ERVNDX1JJTkdTOyByaW5nKyspIHsKLQkJCW5ldHhlbl9wb3N0X3J4X2J1ZmZlcnNfbm9kYihhZGFwdGVyLCBjdHhpZCwgcmluZyk7Ci0JCX0KLQl9CisJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKQorCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzX25vZGIoYWRhcHRlciwgY3R4aWQsIHJpbmcpOwogCiAJLyogdXBkYXRlIHRoZSBjb25zdW1lciBpbmRleCBpbiBwaGFudG9tICovCiAJaWYgKGNvdW50KSB7CkBAIC0xMjMzLDEwOCArMTE1NSw2MCBAQAogCQkvKiBXaW5kb3cgPSAxICovCiAJCXdyaXRlbChjb25zdW1lciwKIAkJICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsCi0JCQkJCSAgICByZWN2X2NyYl9yZWdpc3RlcnNbYWRhcHRlci0+cG9ydG51bV0uCisJCQkJICAgIHJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS4KIAkJCQkJICAgIGNyYl9yY3Zfc3RhdHVzX2NvbnN1bWVyKSk7Ci0JCXdtYigpOwogCX0KIAogCXJldHVybiBjb3VudDsKIH0KIAogLyogUHJvY2VzcyBDb21tYW5kIHN0YXR1cyByaW5nICovCi1pbnQgbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcodW5zaWduZWQgbG9uZyBkYXRhKQoraW50IG5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1MzIgbGFzdF9jb25zdW1lcjsKLQl1MzIgY29uc3VtZXI7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKWRhdGE7Ci0JaW50IGNvdW50MSA9IDA7Ci0JaW50IGNvdW50MiA9IDA7CisJdTMyIGxhc3RfY29uc3VtZXIsIGNvbnN1bWVyOworCWludCBjb3VudCA9IDAsIGk7CiAJc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqZnJhZzsKLQl1MzIgaTsKLQlpbnQgZG9uZTsKKwlpbnQgZG9uZSA9IDA7CiAKLQlzcGluX2xvY2soJmFkYXB0ZXItPnR4X2xvY2spOwogCWxhc3RfY29uc3VtZXIgPSBhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcjsKLQlEUFJJTlRLKElORk8sICJwcm9jZXNpbmcgeG1pdCBjb21wbGV0ZVxuIik7Ci0JLyogd2UgYXNzdW1lIGluIHRoaXMgY2FzZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHBvcnQgYW5kIHRoYXQgaXMKLQkgKiBwb3J0ICMxLi4uY2hhbmdlcyBuZWVkIHRvIGJlIGRvbmUgaW4gZmlybXdhcmUgdG8gaW5kaWNhdGUgcG9ydAotCSAqIG51bWJlciBhcyBwYXJ0IG9mIHRoZSBkZXNjcmlwdG9yLiBUaGlzIHdheSB3ZSB3aWxsIGJlIGFibGUgdG8gZ2V0Ci0JICogdGhlIG5ldGRldiB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBkZXZpY2UuCi0JICovCi0KIAljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7Ci0JaWYgKGxhc3RfY29uc3VtZXIgPT0gY29uc3VtZXIpIHsJLyogUmluZyBpcyBlbXB0eSAgICAqLwotCQlEUFJJTlRLKElORk8sICJsYXN0X2NvbnN1bWVyICVkID09IGNvbnN1bWVyICVkXG4iLAotCQkJbGFzdF9jb25zdW1lciwgY29uc3VtZXIpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfbG9jayk7Ci0JCXJldHVybiAxOwotCX0KIAotCWFkYXB0ZXItPnByb2NfY21kX2J1Zl9jb3VudGVyKys7Ci0JLyoKLQkgKiBOb3QgbmVlZGVkIC0gZG9lcyBub3Qgc2VlbSB0byBiZSB1c2VkIGFueXdoZXJlLgotCSAqIGFkYXB0ZXItPmNtZF9jb25zdW1lciA9IGNvbnN1bWVyOwotCSAqLwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKLQotCXdoaWxlICgobGFzdF9jb25zdW1lciAhPSBjb25zdW1lcikgJiYgKGNvdW50MSA8IE1BWF9TVEFUVVNfSEFORExFKSkgeworCXdoaWxlIChsYXN0X2NvbnN1bWVyICE9IGNvbnN1bWVyKSB7CiAJCWJ1ZmZlciA9ICZhZGFwdGVyLT5jbWRfYnVmX2FycltsYXN0X2NvbnN1bWVyXTsKLQkJcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJCWlmIChidWZmZXItPnNrYikgewogCQkJZnJhZyA9ICZidWZmZXItPmZyYWdfYXJyYXlbMF07CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGZyYWctPmRtYSwgZnJhZy0+bGVuZ3RoLAogCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlmcmFnLT5kbWEgPSAwVUxMOwogCQkJZm9yIChpID0gMTsgaSA8IGJ1ZmZlci0+ZnJhZ19jb3VudDsgaSsrKSB7Ci0JCQkJRFBSSU5USyhJTkZPLCAiZ2V0dGluZyBmcmFnbWVudCBubyAlZFxuIiwgaSk7CiAJCQkJZnJhZysrOwkvKiBHZXQgdGhlIG5leHQgZnJhZyAqLwogCQkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGZyYWctPmRtYSwgZnJhZy0+bGVuZ3RoLAogCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAJCQkJZnJhZy0+ZG1hID0gMFVMTDsKIAkJCX0KIAotCQkJYWRhcHRlci0+c3RhdHMuc2tiZnJlZWQrKzsKKwkJCWFkYXB0ZXItPnN0YXRzLnhtaXRmaW5pc2hlZCsrOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyLT5za2IpOwogCQkJYnVmZmVyLT5za2IgPSBOVUxMOwotCQl9IGVsc2UgaWYgKGFkYXB0ZXItPnByb2NfY21kX2J1Zl9jb3VudGVyID09IDEpIHsKLQkJCWFkYXB0ZXItPnN0YXRzLnR4bnVsbHNrYisrOwotCQl9Ci0JCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKGFkYXB0ZXItPm5ldGRldikKLQkJCSAgICAgJiYgbmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKQotCQkgICAgJiYgKChqaWZmaWVzIC0gYWRhcHRlci0+bmV0ZGV2LT50cmFuc19zdGFydCkgPgotCQkJYWRhcHRlci0+bmV0ZGV2LT53YXRjaGRvZ190aW1lbykpIHsKLQkJCVNDSEVEVUxFX1dPUksoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7CiAJCX0KIAogCQlsYXN0X2NvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgobGFzdF9jb25zdW1lciwKIAkJCQkJICAgICAgIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKLQkJY291bnQxKys7CisJCWlmICgrK2NvdW50ID49IE1BWF9TVEFUVVNfSEFORExFKQorCQkJYnJlYWs7CiAJfQogCi0JY291bnQyID0gMDsKLQlzcGluX2xvY2soJmFkYXB0ZXItPnR4X2xvY2spOwotCWlmICgoLS1hZGFwdGVyLT5wcm9jX2NtZF9idWZfY291bnRlcikgPT0gMCkgeworCWlmIChjb3VudCkgewogCQlhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lciA9IGxhc3RfY29uc3VtZXI7Ci0JCXdoaWxlICgoYWRhcHRlci0+bGFzdF9jbWRfY29uc3VtZXIgIT0gY29uc3VtZXIpCi0JCSAgICAgICAmJiAoY291bnQyIDwgTUFYX1NUQVRVU19IQU5ETEUpKSB7Ci0JCQlidWZmZXIgPQotCQkJICAgICZhZGFwdGVyLT5jbWRfYnVmX2FyclthZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcl07Ci0JCQljb3VudDIrKzsKLQkJCWlmIChidWZmZXItPnNrYikKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQlhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lciA9Ci0JCQkJICAgIGdldF9uZXh0X2luZGV4KGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyLAotCQkJCQkJICAgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOwotCQl9Ci0JfQotCWlmIChjb3VudDEgfHwgY291bnQyKSB7Ci0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGFkYXB0ZXItPm5ldGRldikKLQkJICAgICYmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9ORVRERVZfU1RBVFVTKSkgewotCQkJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwotCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfk5FVFhFTl9ORVRERVZfU1RBVFVTOworCQlzbXBfbWIoKTsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJiBuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJCW5ldGlmX3R4X2xvY2sobmV0ZGV2KTsKKwkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJCXNtcF9tYigpOworCQkJbmV0aWZfdHhfdW5sb2NrKG5ldGRldik7CiAJCX0KIAl9CiAJLyoKQEAgLTEzNTAsMTYgKzEyMjQsOSBAQAogCSAqIFRoZXJlIGlzIHN0aWxsIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gYW5kIHRoZSBob3N0IGNvdWxkIG1pc3MgYW4KIAkgKiBpbnRlcnJ1cHQuIFRoZSBjYXJkIGhhcyB0byB0YWtlIGNhcmUgb2YgdGhpcy4KIAkgKi8KLQlpZiAoYWRhcHRlci0+bGFzdF9jbWRfY29uc3VtZXIgPT0gY29uc3VtZXIgJiYKLQkgICAgKCgoYWRhcHRlci0+Y21kX3Byb2R1Y2VyICsgMSkgJQotCSAgICAgIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KSA9PSBhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcikpIHsKLQkJY29uc3VtZXIgPSBsZTMyX3RvX2NwdSgqKGFkYXB0ZXItPmNtZF9jb25zdW1lcikpOwotCX0KLQlkb25lID0gKGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyID09IGNvbnN1bWVyKTsKKwljb25zdW1lciA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+Y21kX2NvbnN1bWVyKSk7CisJZG9uZSA9IChsYXN0X2NvbnN1bWVyID09IGNvbnN1bWVyKTsKIAotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKLQlEUFJJTlRLKElORk8sICJsYXN0IGNvbnN1bWVyIGlzICVkIGluICVzXG4iLCBsYXN0X2NvbnN1bWVyLAotCQlfX0ZVTkNUSU9OX18pOwogCXJldHVybiAoZG9uZSk7CiB9CiAKQEAgLTE0MzMsOCArMTMwMCw2IEBACiAJCXJjdl9kZXNjLT5iZWdpbl9hbGxvYyA9IGluZGV4OwogCQlyY3ZfZGVzYy0+cmN2X3BlbmRpbmcgKz0gY291bnQ7CiAJCXJjdl9kZXNjLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQlpZiAocmN2X2Rlc2MtPnJjdl9mcmVlID49IDMyKSB7Ci0JCQlyY3ZfZGVzYy0+cmN2X2ZyZWUgPSAwOwogCQkJLyogV2luZG93ID0gMSAqLwogCQkJd3JpdGVsKChwcm9kdWNlciAtIDEpICYKIAkJCSAgICAgICAocmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50IC0gMSksCkBAIC0xNDU4LDggKzEzMjMsNiBAQAogCQkJd3JpdGVsKG1zZywKIAkJCSAgICAgICBEQl9OT1JNQUxJWkUoYWRhcHRlciwKIAkJCQkJICAgIE5FVFhFTl9SQ1ZfUFJPRFVDRVJfT0ZGU0VUKSk7Ci0JCQl3bWIoKTsKLQkJfQogCX0KIH0KIApAQCAtMTUyMyw4ICsxMzg2LDYgQEAKIAkJcmN2X2Rlc2MtPmJlZ2luX2FsbG9jID0gaW5kZXg7CiAJCXJjdl9kZXNjLT5yY3ZfcGVuZGluZyArPSBjb3VudDsKIAkJcmN2X2Rlc2MtPnByb2R1Y2VyID0gcHJvZHVjZXI7Ci0JCWlmIChyY3ZfZGVzYy0+cmN2X2ZyZWUgPj0gMzIpIHsKLQkJCXJjdl9kZXNjLT5yY3ZfZnJlZSA9IDA7CiAJCQkvKiBXaW5kb3cgPSAxICovCiAJCQl3cml0ZWwoKHByb2R1Y2VyIC0gMSkgJgogCQkJICAgICAgIChyY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQgLSAxKSwKQEAgLTE1MzQsMjEgKzEzOTUsOSBAQAogCQkJCQkJICAgIHJjdl9kZXNjX2NyYltyaW5naWRdLgogCQkJCQkJICAgIGNyYl9yY3ZfcHJvZHVjZXJfb2Zmc2V0KSk7CiAJCQl3bWIoKTsKLQkJfQogCX0KIH0KIAotaW50IG5ldHhlbl9uaWNfdHhfaGFzX3dvcmsoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWlmIChmaW5kX2RpZmZfYW1vbmcoYWRhcHRlci0+bGFzdF9jbWRfY29uc3VtZXIsCi0JCQkgICAgYWRhcHRlci0+Y21kX3Byb2R1Y2VyLAotCQkJICAgIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KSA+IDApCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogdm9pZCBuZXR4ZW5fbmljX2NsZWFyX3N0YXRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAltZW1zZXQoJmFkYXB0ZXItPnN0YXRzLCAwLCBzaXplb2YoYWRhcHRlci0+c3RhdHMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2lzci5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaXNyLmMKaW5kZXggNDhhNDA0YS4uZjQ4NzYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaXNyLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaXNyLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAkvKiBwYWNrZXQgdHJhbnNtaXQgcHJvYmxlbXMgKi8KIAlzdGF0cy0+dHhfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMubm9jbWRkZXNjcmlwdG9yOwogCS8qIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMgICAgKi8KLQlzdGF0cy0+cnhfZHJvcHBlZCA9IGFkYXB0ZXItPnN0YXRzLnVwZHJvcHBlZDsKKwlzdGF0cy0+cnhfZHJvcHBlZCA9IGFkYXB0ZXItPnN0YXRzLnJ4ZHJvcHBlZDsKIAkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXggICovCiAJc3RhdHMtPnR4X2Ryb3BwZWQgPSBhZGFwdGVyLT5zdGF0cy50eGRyb3BwZWQ7CiAKQEAgLTE3Miw2ICsxNzIsNyBAQAogCW5ldHhlbl9uaWNfaXNyX290aGVyKGFkYXB0ZXIpOwogfQogCisjaWYgMAogaW50IG5ldHhlbl9uaWNfbGlua19vayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgewpAQCAtMTg5LDE4ICsxOTAsMTkgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogdm9pZCBuZXR4ZW5fbmljX3hnYmVfaGFuZGxlX3BoeV9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXUzMiB2YWwsIHZhbDE7CisJdTMyIHZhbDsKIAogCS8qIFdJTkRPVyA9IDEgKi8KIAl2YWwgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpKTsKIAl2YWwgPj49IChwaHlzaWNhbF9wb3J0W2FkYXB0ZXItPnBvcnRudW1dICogOCk7Ci0JdmFsMSA9IHZhbCAmIDB4ZmY7CisJdmFsICY9IDB4ZmY7CiAKLQlpZiAoYWRhcHRlci0+YWh3LnhnX2xpbmt1cCA9PSAxICYmIHZhbDEgIT0gWEdfTElOS19VUCkgeworCWlmIChhZGFwdGVyLT5haHcueGdfbGlua3VwID09IDEgJiYgdmFsICE9IFhHX0xJTktfVVApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIE5JQyBMaW5rIGlzIGRvd25cbiIsCiAJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOwogCQlhZGFwdGVyLT5haHcueGdfbGlua3VwID0gMDsKQEAgLTIwOCwxNiArMjEwLDcgQEAKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCX0KLQkJLyogcmVhZCB0d2ljZSB0byBjbGVhciBzdGlja3kgYml0cyAqLwotCQkvKiBXSU5ET1cgPSAwICovCi0JCW5ldHhlbl9uaWNfcmVhZF93MChhZGFwdGVyLCBORVRYRU5fTklVX1hHX1NUQVRVUywgJnZhbDEpOwotCQluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwgTkVUWEVOX05JVV9YR19TVEFUVVMsICZ2YWwxKTsKLQotCQlpZiAoKHZhbCAmIDB4ZmZiKSAhPSAweGZmYikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgSVNSOiBTeW5jL0FsaWduIEJBRDogMHglMDh4XG4iLAotCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHZhbDEpOwotCQl9Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcueGdfbGlua3VwID09IDAgJiYgdmFsMSA9PSBYR19MSU5LX1VQKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcueGdfbGlua3VwID09IDAgJiYgdmFsID09IFhHX0xJTktfVVApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIE5JQyBMaW5rIGlzIHVwXG4iLAogCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lKTsKIAkJYWRhcHRlci0+YWh3LnhnX2xpbmt1cCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggOTczN2VhZS4uNzE0NGMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtNjMsMTIgKzYzLDEyIEBACiBzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyB2b2lkIG5ldHhlbl90eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIG5ldHhlbl93YXRjaGRvZyh1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyBpbnQgbmV0eGVuX2hhbmRsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBuZXR4ZW5fbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgbmV0eGVuX25pY19wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAjZW5kaWYKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR4ZW5faW50cihpbnQgaXJxLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBuZXR4ZW5fbXNpX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CiAKIGludCBwaHlzaWNhbF9wb3J0W10gPSB7MCwgMSwgMiwgM307CiAKQEAgLTg2LDcgKzg2LDI0IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZXR4ZW5fcGNpX3RibCk7CiAKLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR4ZW5fd29ya3E7CisvKgorICogSW4gbmV0eGVuX25pY19kb3duKCksIHdlIG11c3Qgd2FpdCBmb3IgYW55IHBlbmRpbmcgY2FsbGJhY2sgcmVxdWVzdHMgaW50bworICogbmV0eGVuX3dhdGNoZG9nX3Rhc2soKSB0byBjb21wbGV0ZTsgZWcgb3RoZXJ3aXNlIHRoZSB3YXRjaGRvZ190aW1lciBjb3VsZCBiZQorICogcmVlbmFibGVkIHJpZ2h0IGFmdGVyIGl0IGlzIGRlbGV0ZWQgaW4gbmV0eGVuX25pY19kb3duKCkuCisgKiBGTFVTSF9TQ0hFRFVMRURfV09SSygpICBkb2VzIHRoaXMgc3luY2hyb25pemF0aW9uLgorICoKKyAqIE5vcm1hbGx5LCBzY2hlZHVsZV93b3JrKCkvZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSBjb3VsZCBoYXZlIHdvcmtlZCwgYnV0CisgKiBuZXR4ZW5fbmljX2Nsb3NlKCkgaXMgaW52b2tlZCB3aXRoIGtlcm5lbCBydG5sIGxvY2sgaGVsZC4gbmV0aWZfY2Fycmllcl9vZmYoKQorICogY2FsbCBpbiBuZXR4ZW5fbmljX2Nsb3NlKCkgdHJpZ2dlcnMgYSBzY2hlZHVsZV93b3JrKCZsaW5rd2F0Y2hfd29yayksIGFuZCBhCisgKiBzdWJzZXF1ZW50IGNhbGwgdG8gZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSBpbiBuZXR4ZW5fbmljX2Rvd24oKSB3b3VsZCBjYXVzZQorICogbGlua3dhdGNoX2V2ZW50KCkgdG8gYmUgZXhlY3V0ZWQgd2hpY2ggYWxzbyBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBydG5sCisgKiBsb2NrIHRodXMgY2F1c2luZyBhIGRlYWRsb2NrLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0eGVuX3dvcmtxOworI2RlZmluZSBTQ0hFRFVMRV9XT1JLKHRwKQlxdWV1ZV93b3JrKG5ldHhlbl93b3JrcSwgdHApCisjZGVmaW5lIEZMVVNIX1NDSEVEVUxFRF9XT1JLKCkJZmx1c2hfd29ya3F1ZXVlKG5ldHhlbl93b3JrcSkKKwogc3RhdGljIHZvaWQgbmV0eGVuX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcpOwogCiBzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLApAQCAtMTQ5LDMzICsxNjYsMzAgQEAKIAogI2RlZmluZQlBREFQVEVSX0xJU1RfU0laRSAxMgogCitzdGF0aWMgdWludDMyX3QgbXNpX3RndF9zdGF0dXNbNF0gPSB7CisJSVNSX0lOVF9UQVJHRVRfU1RBVFVTLCBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjEsCisJSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YyLCBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjMKK307CisKK3N0YXRpYyB1aW50MzJfdCBzd19pbnRfbWFza1s0XSA9IHsKKwlDUkJfU1dfSU5UX01BU0tfMCwgQ1JCX1NXX0lOVF9NQVNLXzEsCisJQ1JCX1NXX0lOVF9NQVNLXzIsIENSQl9TV19JTlRfTUFTS18zCit9OworCiBzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX2Rpc2FibGVfaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50MzJfdAltYXNrID0gMHg3ZmY7CisJdTMyIG1hc2sgPSAweDdmZjsKIAlpbnQgcmV0cmllcyA9IDMyOworCWludCBwb3J0ID0gYWRhcHRlci0+cG9ydG51bTsKKwlpbnQgcGNpX2ZuID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwogCi0JRFBSSU5USygxLCBJTkZPLCAiRW50ZXJlZCBJU1IgRGlzYWJsZSBcbiIpOwotCi0Jc3dpdGNoIChhZGFwdGVyLT5wb3J0bnVtKSB7Ci0JY2FzZSAwOgotCQl3cml0ZWwoMHgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfU1dfSU5UX01BU0tfMCkpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXdyaXRlbCgweDAsIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9TV19JTlRfTUFTS18xKSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJd3JpdGVsKDB4MCwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX1NXX0lOVF9NQVNLXzIpKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQl3cml0ZWwoMHgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfU1dfSU5UX01BU0tfMykpOwotCQlicmVhazsKLQl9CisJaWYgKGFkYXB0ZXItPm1zaV9tb2RlICE9IE1TSV9NT0RFX01VTFRJRlVOQykKKwkJd3JpdGVsKDB4MCwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgc3dfaW50X21hc2tbcG9ydF0pKTsKIAogCWlmIChhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSAtMSAmJgogCSAgICBhZGFwdGVyLT5pbnRyX3NjaGVtZSAhPSBJTlRSX1NDSEVNRV9QRVJQT1JUKQogCQl3cml0ZWwobWFzayxQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLCBJU1JfSU5UX01BU0spKTsKIAotCS8qIFdpbmRvdyA9IDAgb3IgMSAqLwogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkpIHsKIAkJZG8gewogCQkJd3JpdGVsKDB4ZmZmZmZmZmYsCkBAIC0xOTAsMTQgKzIwNCwxOCBAQAogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogRmFpbGVkIHRvIGRpc2FibGUgaW50ZXJydXB0IGNvbXBsZXRlbHlcbiIsCiAJCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwogCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPm1zaV9tb2RlID09IE1TSV9NT0RFX01VTFRJRlVOQykgeworCQkJd3JpdGVsKDB4ZmZmZmZmZmYsIFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCisJCQkJCQltc2lfdGd0X3N0YXR1c1twY2lfZm5dKSk7CisJCX0KIAl9Ci0KLQlEUFJJTlRLKDEsIElORk8sICJEb25lIHdpdGggRGlzYWJsZSBJbnRcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX2VuYWJsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBtYXNrOworCWludCBwb3J0ID0gYWRhcHRlci0+cG9ydG51bTsKIAogCURQUklOVEsoMSwgSU5GTywgIkVudGVyZWQgSVNSIEVuYWJsZSBcbiIpOwogCkBAIC0yMTgsMjAgKzIzNiw3IEBACiAJCXdyaXRlbChtYXNrLCBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLCBJU1JfSU5UX01BU0spKTsKIAl9CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPnBvcnRudW0pIHsKLQljYXNlIDA6Ci0JCXdyaXRlbCgweDEsIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9TV19JTlRfTUFTS18wKSk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJd3JpdGVsKDB4MSwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX1NXX0lOVF9NQVNLXzEpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQl3cml0ZWwoMHgxLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfU1dfSU5UX01BU0tfMikpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXdyaXRlbCgweDEsIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9TV19JTlRfTUFTS18zKSk7Ci0JCWJyZWFrOwotCX0KKwl3cml0ZWwoMHgxLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBzd19pbnRfbWFza1twb3J0XSkpOwogCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKSkgewogCQltYXNrID0gMHhiZmY7CkBAIC0zMjgsNyArMzMzLDYgQEAKIAogCWFkYXB0ZXItPmFody5wZGV2ID0gcGRldjsKIAlhZGFwdGVyLT5haHcucGNpX2Z1bmMgID0gcGNpX2Z1bmNfaWQ7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X2xvY2spOwogCiAJLyogcmVtYXAgcGh5cyBhZGRyZXNzICovCiAJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CS8qIDAgaXMgZm9yIEJBUiAwICovCkBAIC00MDEsNiArNDA1LDcgQEAKIAogCS8qIHRoaXMgd2lsbCBiZSByZWFkIGZyb20gRlcgbGF0ZXIgKi8KIAlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IC0xOworCWFkYXB0ZXItPm1zaV9tb2RlID0gLTE7CiAKIAkvKiBUaGlzIHdpbGwgYmUgcmVzZXQgZm9yIG1lenogY2FyZHMgICovCiAJYWRhcHRlci0+cG9ydG51bSA9IHBjaV9mdW5jX2lkOwpAQCAtNDE1LDcgKzQyMCw3IEBACiAJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSBuZXR4ZW5fbmljX3NldF9tYWM7CiAJbmV0ZGV2LT5jaGFuZ2VfbXR1CSAgID0gbmV0eGVuX25pY19jaGFuZ2VfbXR1OwogCW5ldGRldi0+dHhfdGltZW91dAkgICA9IG5ldHhlbl90eF90aW1lb3V0OwotCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gICAgID0gSFo7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyAgICAgPSAyKkhaOwogCiAJbmV0eGVuX25pY19jaGFuZ2VfbXR1KG5ldGRldiwgbmV0ZGV2LT5tdHUpOwogCkBAIC01NDMsNyArNTQ4LDYgQEAKIAlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKIAlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIG5ldHhlbl93YXRjaGRvZ190YXNrKTsKIAlhZGFwdGVyLT5haHcucGRldiA9IHBkZXY7Ci0JYWRhcHRlci0+cHJvY19jbWRfYnVmX2NvdW50ZXIgPSAwOwogCWFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA9IHBkZXYtPnJldmlzaW9uOwogCiAJLyogbWFrZSBzdXJlIFdpbmRvdyA9PSAxICovCkBAIC04MzMsNiArODM3LDggQEAKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopbmV0ZGV2LT5wcml2OwogCWludCBlcnIgPSAwOwogCWludCBjdHgsIHJpbmc7CisJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CiAKIAlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpIHsKIAkJZXJyID0gbmV0eGVuX2luaXRfZmlybXdhcmUoYWRhcHRlcik7CkBAIC04NTYsOSArODYyLDE0IEBACiAJCQkJbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhhZGFwdGVyLCBjdHgsIHJpbmcpOwogCQl9CiAJCWFkYXB0ZXItPmlycSA9IGFkYXB0ZXItPmFody5wZGV2LT5pcnE7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPmFody5wZGV2LT5pcnEsIG5ldHhlbl9pbnRyLAotCQkJCSAgSVJRRl9TSEFSRUR8SVJRRl9TQU1QTEVfUkFORE9NLCBuZXRkZXYtPm5hbWUsCi0JCQkJICBhZGFwdGVyKTsKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKKwkJCWhhbmRsZXIgPSBuZXR4ZW5fbXNpX2ludHI7CisJCWVsc2UgeworCQkJZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJCQloYW5kbGVyID0gbmV0eGVuX2ludHI7CisJCX0KKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBoYW5kbGVyLAorCQkJCSAgZmxhZ3MsIG5ldGRldi0+bmFtZSwgYWRhcHRlcik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAicmVxdWVzdF9pcnEgZmFpbGVkIHdpdGg6ICVkXG4iLCBlcnIpOwogCQkJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwpAQCAtODY3LDIxICs4NzgsMTIgQEAKIAogCQlhZGFwdGVyLT5pc191cCA9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDOwogCX0KLQlpZiAoIWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCkKLQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7Ci0KLQluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0KLQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7Ci0KIAkvKiBEb25lIGhlcmUgYWdhaW4gc28gdGhhdCBldmVuIGlmIHBoYW50b20gc3cgb3Zlcndyb3RlIGl0LAogCSAqIHdlIHNldCBpdCAqLwogCWlmIChhZGFwdGVyLT5pbml0X3BvcnQKIAkgICAgJiYgYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRudW0pICE9IDApIHsKLQkgICAgZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKIAkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5wb3J0bnVtKTsKLQkJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmIChhZGFwdGVyLT5tYWNhZGRyX3NldCkKQEAgLTg5NCw2ICs4OTYsMTIgQEAKIAkJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBuZXRkZXYtPm10dSk7CiAKIAlpZiAoIWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCkKKwkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisKKwluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOworCisJaWYgKCFhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2gpCiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTk1OCw0MSArOTY2LDE3IEBACiAJc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqYnVmZnJhZzsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXUzMiBwcm9kdWNlciA9IDA7CisJdTMyIHByb2R1Y2VyLCBjb25zdW1lcjsKIAl1MzIgc2F2ZWRfcHJvZHVjZXIgPSAwOwogCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjOwogCWludCBrOwogCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqcGJ1ZiA9IE5VTEw7Ci0Jc3RhdGljIGludCBkcm9wcGVkX3BhY2tldCA9IDA7CiAJaW50IGZyYWdfY291bnQ7Ci0JdTMyIGxvY2FsX3Byb2R1Y2VyID0gMDsKLQl1MzIgbWF4X3R4X2Rlc2NfY291bnQgPSAwOwotCXUzMiBsYXN0X2NtZF9jb25zdW1lciA9IDA7CiAJaW50IG5vX29mX2Rlc2M7CisJdTMyIG51bV90eGQgPSBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudDsKIAotCWFkYXB0ZXItPnN0YXRzLnhtaXRjYWxsZWQrKzsKIAlmcmFnX2NvdW50ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7CiAKLQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPD0gMCkpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJYWRhcHRlci0+c3RhdHMuYmFkc2tibGVuKys7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQotCi0JaWYgKGZyYWdfY291bnQgPiBNQVhfQlVGRkVSU19QRVJfQ01EKSB7Ci0JCXByaW50aygiJXM6ICVzIG5ldHhlbl9uaWNfeG1pdF9mcmFtZTogZnJhZ19jb3VudCAoJWQpICIKLQkJICAgICAgICJ0b28gbGFyZ2UsIGNhbiBoYW5kbGUgb25seSAlZCBmcmFnc1xuIiwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSwKLQkJICAgICAgIGZyYWdfY291bnQsIE1BWF9CVUZGRVJTX1BFUl9DTUQpOwotCQlhZGFwdGVyLT5zdGF0cy50eGRyb3BwZWQrKzsKLQkJaWYgKCgrK2Ryb3BwZWRfcGFja2V0ICYgMHhmZikgPT0gMHhmZikKLQkJCXByaW50aygiJXM6ICVzIGRyb3BwcGVkIHBhY2tldHMgPSAlZFxuIiwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUsCi0JCQkgICAgICAgZHJvcHBlZF9wYWNrZXQpOwotCi0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQotCiAJLyogVGhlcmUgNCBmcmFnbWVudHMgcGVyIGRlc2NyaXB0b3IgKi8KIAlub19vZl9kZXNjID0gKGZyYWdfY291bnQgKyAzKSA+PiAyOwogCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pIHsKQEAgLTEwMDcsMjcgKzk5MSwxNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT50eF9sb2NrKTsKLQlpZiAoYWRhcHRlci0+dG90YWxfdGhyZWFkcyA+PSBNQVhfWE1JVF9QUk9EVUNFUlMpIHsKLQkJZ290byBvdXRfcmVxdWV1ZTsKKwlwcm9kdWNlciA9IGFkYXB0ZXItPmNtZF9wcm9kdWNlcjsKKwlzbXBfbWIoKTsKKwljb25zdW1lciA9IGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyOworCWlmICgobm9fb2ZfZGVzYysyKSA+IGZpbmRfZGlmZl9hbW9uZyhwcm9kdWNlciwgY29uc3VtZXIsIG51bV90eGQpKSB7CisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJc21wX21iKCk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9Ci0JbG9jYWxfcHJvZHVjZXIgPSBhZGFwdGVyLT5jbWRfcHJvZHVjZXI7Ci0JayA9IGFkYXB0ZXItPmNtZF9wcm9kdWNlcjsKLQltYXhfdHhfZGVzY19jb3VudCA9IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OwotCWxhc3RfY21kX2NvbnN1bWVyID0gYWRhcHRlci0+bGFzdF9jbWRfY29uc3VtZXI7Ci0JaWYgKChrICsgbm9fb2ZfZGVzYykgPj0KLQkgICAgKChsYXN0X2NtZF9jb25zdW1lciA8PSBrKSA/IGxhc3RfY21kX2NvbnN1bWVyICsgbWF4X3R4X2Rlc2NfY291bnQgOgotCSAgICAgbGFzdF9jbWRfY29uc3VtZXIpKSB7Ci0JCWdvdG8gb3V0X3JlcXVldWU7Ci0JfQotCWsgPSBnZXRfaW5kZXhfcmFuZ2UoaywgbWF4X3R4X2Rlc2NfY291bnQsIG5vX29mX2Rlc2MpOwotCWFkYXB0ZXItPmNtZF9wcm9kdWNlciA9IGs7Ci0JYWRhcHRlci0+dG90YWxfdGhyZWFkcysrOwotCWFkYXB0ZXItPm51bV90aHJlYWRzKys7CiAKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+dHhfbG9jayk7CiAJLyogQ29weSB0aGUgZGVzY3JpcHRvcnMgaW50byB0aGUgaGFyZHdhcmUgICAgKi8KLQlwcm9kdWNlciA9IGxvY2FsX3Byb2R1Y2VyOwogCXNhdmVkX3Byb2R1Y2VyID0gcHJvZHVjZXI7CiAJaHdkZXNjID0gJmh3LT5jbWRfZGVzY19oZWFkW3Byb2R1Y2VyXTsKIAltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CkBAIC0xMDY3LDggKzEwNDAsNyBAQAogCQkvKiBtb3ZlIHRvIG5leHQgZGVzYy4gaWYgdGhlcmUgaXMgYSBuZWVkICovCiAJCWlmICgoaSAmIDB4MykgPT0gMCkgewogCQkJayA9IDA7Ci0JCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLAotCQkJCQkJICBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisJCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBudW1fdHhkKTsKIAkJCWh3ZGVzYyA9ICZody0+Y21kX2Rlc2NfaGVhZFtwcm9kdWNlcl07CiAJCQltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CiAJCQlwYnVmID0gJmFkYXB0ZXItPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKQEAgLTEwODYsNyArMTA1OCw2IEBACiAJCWJ1ZmZyYWctPmRtYSA9IHRlbXBfZG1hOwogCQlidWZmcmFnLT5sZW5ndGggPSB0ZW1wX2xlbjsKIAotCQlEUFJJTlRLKElORk8sICJmb3IgbG9vcC4gaT0lZCBrPSVkXG4iLCBpLCBrKTsKIAkJc3dpdGNoIChrKSB7CiAJCWNhc2UgMDoKIAkJCWh3ZGVzYy0+YnVmZmVyMV9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CkBAIC0xMTA3LDcgKzEwNzgsNyBAQAogCQl9CiAJCWZyYWcrKzsKIAl9Ci0JcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpOworCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG51bV90eGQpOwogCiAJLyogbWlnaHQgY2hhbmdlIG9wY29kZSB0byBUWF9UQ1BfTFNPICovCiAJbmV0eGVuX3Rzb19jaGVjayhhZGFwdGVyLCAmaHctPmNtZF9kZXNjX2hlYWRbc2F2ZWRfcHJvZHVjZXJdLCBza2IpOwpAQCAtMTEzNCw3ICsxMTA1LDcgQEAKIAkJLyogY29weSB0aGUgZmlyc3QgNjQgYnl0ZXMgKi8KIAkJbWVtY3B5KCgodm9pZCAqKWh3ZGVzYykgKyAyLAogCQkgICAgICAgKHZvaWQgKikoc2tiLT5kYXRhKSwgZmlyc3RfaGRyX2xlbik7Ci0JCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG1heF90eF9kZXNjX2NvdW50KTsKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CiAKIAkJaWYgKG1vcmVfaGRyKSB7CiAJCQlod2Rlc2MgPSAmaHctPmNtZF9kZXNjX2hlYWRbcHJvZHVjZXJdOwpAQCAtMTE0NywzNSArMTExOCwxOSBAQAogCQkJCQkJCSBod2Rlc2MsCiAJCQkJCQkJIChoZHJfbGVuIC0KIAkJCQkJCQkgIGZpcnN0X2hkcl9sZW4pKTsKLQkJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG1heF90eF9kZXNjX2NvdW50KTsKKwkJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG51bV90eGQpOwogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT50eF9sb2NrKTsKKwlhZGFwdGVyLT5jbWRfcHJvZHVjZXIgPSBwcm9kdWNlcjsKIAlhZGFwdGVyLT5zdGF0cy50eGJ5dGVzICs9IHNrYi0+bGVuOwogCi0JLyogQ29kZSB0byB1cGRhdGUgdGhlIGFkYXB0ZXIgY29uc2lkZXJpbmcgaG93IG1hbnkgcHJvZHVjZXIgdGhyZWFkcwotCSAgIGFyZSBjdXJyZW50bHkgd29ya2luZyAqLwotCWlmICgoLS1hZGFwdGVyLT5udW1fdGhyZWFkcykgPT0gMCkgewotCQkvKiBUaGlzIGlzIHRoZSBsYXN0IHRocmVhZCAqLwotCQl1MzIgY3JiX3Byb2R1Y2VyID0gYWRhcHRlci0+Y21kX3Byb2R1Y2VyOwotCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgY3JiX3Byb2R1Y2VyKTsKLQkJd21iKCk7Ci0JCWFkYXB0ZXItPnRvdGFsX3RocmVhZHMgPSAwOwotCX0KKwluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgYWRhcHRlci0+Y21kX3Byb2R1Y2VyKTsKIAotCWFkYXB0ZXItPnN0YXRzLnhtaXRmaW5pc2hlZCsrOworCWFkYXB0ZXItPnN0YXRzLnhtaXRjYWxsZWQrKzsKIAluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT50eF9sb2NrKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwotCi1vdXRfcmVxdWV1ZToKLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05FVERFVl9TVEFUVVM7Ci0KLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+dHhfbG9jayk7Ci0JcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCiBzdGF0aWMgdm9pZCBuZXR4ZW5fd2F0Y2hkb2codW5zaWduZWQgbG9uZyB2KQpAQCAtMTIwMCw4NyArMTE1NSw2MCBAQAogCXByaW50ayhLRVJOX0VSUiAiJXMgJXM6IHRyYW5zbWl0IHRpbWVvdXQsIHJlc2V0dGluZy5cbiIsCiAJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CiAKLQluZXR4ZW5fbmljX2Nsb3NlKGFkYXB0ZXItPm5ldGRldik7Ci0JbmV0eGVuX25pY19vcGVuKGFkYXB0ZXItPm5ldGRldik7CisJbmV0eGVuX25pY19kaXNhYmxlX2ludChhZGFwdGVyKTsKKwluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOworCiAJYWRhcHRlci0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOwogCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIH0KIAotc3RhdGljIGludAotbmV0eGVuX2hhbmRsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGlubGluZSB2b2lkCituZXR4ZW5faGFuZGxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdTMyIHJldCA9IDA7Ci0KLQlEUFJJTlRLKElORk8sICJFbnRlcmVkIGhhbmRsZSBJU1JcbiIpOwotCWFkYXB0ZXItPnN0YXRzLmludHMrKzsKLQogCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoYWRhcHRlcik7Ci0KLQlpZiAobmV0eGVuX25pY19yeF9oYXNfd29yayhhZGFwdGVyKSB8fCBuZXR4ZW5fbmljX3R4X2hhc193b3JrKGFkYXB0ZXIpKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5ldGRldiwgJmFkYXB0ZXItPm5hcGkpKSB7Ci0JCQkvKgotCQkJICogSW50ZXJydXB0cyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4KLQkJCSAqLwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZShuZXRkZXYsICZhZGFwdGVyLT5uYXBpKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50Y291bnQgPSAwOwotCQkJaWYgKCgrK2ludGNvdW50ICYgMHhmZmYpID09IDB4ZmZmKQotCQkJCURQUklOVEsoS0VSTl9FUlIKLQkJCQkgICAgICAgIiVzOiAlcyBpbnRlcnJ1cHQgJWQgd2hpbGUgaW4gcG9sbFxuIiwKLQkJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lLAotCQkJCSAgICAgICBpbnRjb3VudCk7Ci0JCX0KLQkJcmV0ID0gMTsKLQl9Ci0KLQlpZiAocmV0ID09IDApIHsKLQkJbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOwotCX0KLQotCXJldHVybiByZXQ7CisJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiB9CiAKLS8qCi0gKiBuZXR4ZW5faW50ciAtIEludGVycnVwdCBIYW5kbGVyCi0gKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCi0gKiBkYXRhIHBvaW50cyB0byBhZGFwdGVyIHN0dWN0dXJlICh3aGljaCBtYXkgYmUgaGFuZGxpbmcgbW9yZSB0aGFuIDEgcG9ydAotICovCiBpcnFyZXR1cm5fdCBuZXR4ZW5faW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAl1MzIgb3VyX2ludCA9IDA7CiAKLQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpKSB7Ci0JCW91cl9pbnQgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfSU5UX1ZFQ1RPUikpOwotCQkvKiBub3Qgb3VyIGludGVycnVwdCAqLwotCQlpZiAoKG91cl9pbnQgJiAoMHg4MCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkgPT0gMCkKLQkJCXJldHVybiBJUlFfTk9ORTsKLQl9CisJb3VyX2ludCA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9JTlRfVkVDVE9SKSk7CisJLyogbm90IG91ciBpbnRlcnJ1cHQgKi8KKwlpZiAoKG91cl9pbnQgJiAoMHg4MCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKGFkYXB0ZXItPmludHJfc2NoZW1lID09IElOVFJfU0NIRU1FX1BFUlBPUlQpIHsKIAkJLyogY2xhaW0gaW50ZXJydXB0ICovCi0JCWlmICghKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkpIHsKLQkJCXdyaXRlbChvdXJfaW50ICYgfigodTMyKSgweDgwIDw8IGFkYXB0ZXItPnBvcnRudW0pKSwKKwkJd3JpdGVsKG91cl9pbnQgJiB+KCh1MzIpKDB4ODAgPDwgYWRhcHRlci0+cG9ydG51bSkpLAogCQkJTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0lOVF9WRUNUT1IpKTsKLQkJfQogCX0KIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCW5ldHhlbl9oYW5kbGVfaW50KGFkYXB0ZXIsIG5ldGRldik7CisJbmV0eGVuX2hhbmRsZV9pbnQoYWRhcHRlcik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK2lycXJldHVybl90IG5ldHhlbl9tc2lfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7CisKKwluZXR4ZW5faGFuZGxlX2ludChhZGFwdGVyKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBpbnQgbmV0eGVuX25pY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG5ldHhlbl9hZGFwdGVyLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCWludCBkb25lID0gMTsKKwlpbnQgdHhfY29tcGxldGU7CiAJaW50IGN0eDsKIAlpbnQgd29ya19kb25lOwogCi0JRFBSSU5USyhJTkZPLCAicG9sbGluZyBmb3IgJWQgZGVzY3JpcHRvcnNcbiIsICpidWRnZXQpOworCXR4X2NvbXBsZXRlID0gbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcoYWRhcHRlcik7CiAKIAl3b3JrX2RvbmUgPSAwOwogCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7CkBAIC0xMzAwLDE2ICsxMjI4LDggQEAKIAkJCQkJCSAgICAgYnVkZ2V0IC8gTUFYX1JDVl9DVFgpOwogCX0KIAotCWlmICh3b3JrX2RvbmUgPj0gYnVkZ2V0KQotCQlkb25lID0gMDsKLQotCWlmIChuZXR4ZW5fcHJvY2Vzc19jbWRfcmluZygodW5zaWduZWQgbG9uZylhZGFwdGVyKSA9PSAwKQotCQlkb25lID0gMDsKLQotCURQUklOVEsoSU5GTywgIm5ldyB3b3JrX2RvbmU6ICVkIHdvcmtfdG9fZG86ICVkXG4iLAotCQl3b3JrX2RvbmUsIHdvcmtfdG9fZG8pOwotCWlmIChkb25lKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5ldGRldiwgbmFwaSk7CisJaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmIHR4X2NvbXBsZXRlKSB7CisJCW5ldGlmX3J4X2NvbXBsZXRlKGFkYXB0ZXItPm5ldGRldiwgJmFkYXB0ZXItPm5hcGkpOwogCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAppbmRleCBmZmEzYjcyLi5hNTY2YjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKQEAgLTEyNiw4ICsxMjYsMTEgQEAKICAqLwogI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19IT1NUCU5FVFhFTl9OSUNfUkVHKDB4MWE4KQogI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19GVwkgIAlORVRYRU5fTklDX1JFRygweDFkYykKKyNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9IT1NUCQlORVRYRU5fTklDX1JFRygweDI3MCkKKyNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9GVwkgIAkJTkVUWEVOX05JQ19SRUcoMHgyNzQpCiAKICNkZWZpbmUgSU5UUl9TQ0hFTUVfUEVSUE9SVAkgICAgICAJMHgxCisjZGVmaW5lIE1TSV9NT0RFX01VTFRJRlVOQwkgICAgICAJMHgxCiAKIC8qIHVzZWQgZm9yIGV0aHRvb2wgdGVzdHMgKi8KICNkZWZpbmUgQ1JCX1NDUkFUQ0hQQURfVEVTVAkgICAgTkVUWEVOX05JQ19SRUcoMHgyODApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUyLmMgYi9kcml2ZXJzL25ldC9uaTUyLmMKaW5kZXggMjZhYThmZS4uYTMxNmRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1Mi5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTIuYwpAQCAtMTM0LDEwICsxMzQsMTAgQEAKICNkZWZpbmUgbmlfZGlzaW50KCkgICB7IG91dGIoMCwgZGV2LT5iYXNlX2FkZHIgKyBOSTUyX0lOVERJUyk7IH0KICNkZWZpbmUgbmlfZW5haW50KCkgICB7IG91dGIoMCwgZGV2LT5iYXNlX2FkZHIgKyBOSTUyX0lOVEVOQSk7IH0KIAotI2RlZmluZSBtYWtlMzIocHRyMTYpIChwLT5tZW10b3AgKyAoc2hvcnQpIChwdHIxNikpCi0jZGVmaW5lIG1ha2UyNChwdHIzMikgKCh1bnNpZ25lZCBsb25nKShwdHIzMikpIC0gcC0+YmFzZQotI2RlZmluZSBtYWtlMTYocHRyMzIpICgodW5zaWduZWQgc2hvcnQpICgodW5zaWduZWQgbG9uZykocHRyMzIpXAotCQkJCQktICh1bnNpZ25lZCBsb25nKSBwLT5tZW10b3ApKQorI2RlZmluZSBtYWtlMzIocHRyMTYpICgodm9pZCBfX2lvbWVtICopKHAtPm1lbXRvcCArIChzaG9ydCkgKHB0cjE2KSkpCisjZGVmaW5lIG1ha2UyNChwdHIzMikgKChjaGFyIF9faW9tZW0gKikocHRyMzIpKSAtIHAtPmJhc2UKKyNkZWZpbmUgbWFrZTE2KHB0cjMyKSAoKHVuc2lnbmVkIHNob3J0KSAoKGNoYXIgX19pb21lbSAqKShwdHIzMilcCisJCQkJCS0gcC0+bWVtdG9wKSkKIAogLyoqKioqKioqKioqKioqKioqKiogaG93IHRvIGNhbGN1bGF0ZSB0aGUgYnVmZmVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCkBAIC0xNzksMzQgKzE3OSwzNSBAQAogCiAvKiBoZWxwZXItZnVuY3Rpb25zICovCiBzdGF0aWMgaW50ICAgICBpbml0NTg2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgICAgY2hlY2s1ODYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqd2hlcmUsIHVuc2lnbmVkIHNpemUpOworc3RhdGljIGludCAgICAgY2hlY2s1ODYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2l6ZSk7CiBzdGF0aWMgdm9pZCAgICBhbGxvYzU4NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkICAgIHN0YXJ0cmVjdjU4NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkICAgKmFsbG9jX3JmYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpOworc3RhdGljIHZvaWQgICBfX2lvbWVtICphbGxvY19yZmEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICpwdHIpOwogc3RhdGljIHZvaWQgICAgbmk1Ml9yY3ZfaW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgICAgbmk1Ml94bXRfaW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgICAgbmk1Ml9ybnJfaW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdHJ1Y3QgcHJpdiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOwotCWNoYXIgKm1lbXRvcDsKKwljaGFyIF9faW9tZW0gKmJhc2U7CisJY2hhciBfX2lvbWVtICptYXBwZWQ7CisJY2hhciBfX2lvbWVtICptZW10b3A7CiAJc3BpbmxvY2tfdCBzcGlubG9jazsKIAlpbnQgcmVzZXQ7Ci0Jc3RydWN0IHJmZF9zdHJ1Y3QgKnJmZF9sYXN0LCAqcmZkX3RvcCwgKnJmZF9maXJzdDsKLQlzdHJ1Y3Qgc2NwX3N0cnVjdCAqc2NwOwotCXN0cnVjdCBpc2NwX3N0cnVjdCAqaXNjcDsKLQlzdHJ1Y3Qgc2NiX3N0cnVjdCAqc2NiOwotCXN0cnVjdCB0YmRfc3RydWN0ICp4bWl0X2J1ZmZzW05VTV9YTUlUX0JVRkZTXTsKKwlzdHJ1Y3QgcmZkX3N0cnVjdCBfX2lvbWVtICpyZmRfbGFzdCwgKnJmZF90b3AsICpyZmRfZmlyc3Q7CisJc3RydWN0IHNjcF9zdHJ1Y3QgX19pb21lbSAqc2NwOworCXN0cnVjdCBpc2NwX3N0cnVjdCBfX2lvbWVtICppc2NwOworCXN0cnVjdCBzY2Jfc3RydWN0IF9faW9tZW0gKnNjYjsKKwlzdHJ1Y3QgdGJkX3N0cnVjdCBfX2lvbWVtICp4bWl0X2J1ZmZzW05VTV9YTUlUX0JVRkZTXTsKICNpZiAoTlVNX1hNSVRfQlVGRlMgPT0gMSkKLQlzdHJ1Y3QgdHJhbnNtaXRfY21kX3N0cnVjdCAqeG1pdF9jbWRzWzJdOwotCXN0cnVjdCBub3BfY21kX3N0cnVjdCAqbm9wX2NtZHNbMl07CisJc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QgX19pb21lbSAqeG1pdF9jbWRzWzJdOworCXN0cnVjdCBub3BfY21kX3N0cnVjdCBfX2lvbWVtICpub3BfY21kc1syXTsKICNlbHNlCi0Jc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QgKnhtaXRfY21kc1tOVU1fWE1JVF9CVUZGU107Ci0Jc3RydWN0IG5vcF9jbWRfc3RydWN0ICpub3BfY21kc1tOVU1fWE1JVF9CVUZGU107CisJc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QgX19pb21lbSAqeG1pdF9jbWRzW05VTV9YTUlUX0JVRkZTXTsKKwlzdHJ1Y3Qgbm9wX2NtZF9zdHJ1Y3QgX19pb21lbSAqbm9wX2NtZHNbTlVNX1hNSVRfQlVGRlNdOwogI2VuZGlmCiAJaW50IG5vcF9wb2ludCwgbnVtX3JlY3ZfYnVmZnM7Ci0JY2hhciAqeG1pdF9jYnVmZnNbTlVNX1hNSVRfQlVGRlNdOworCWNoYXIgX19pb21lbSAqeG1pdF9jYnVmZnNbTlVNX1hNSVRfQlVGRlNdOwogCWludCB4bWl0X2NvdW50LCB4bWl0X2xhc3Q7CiB9OwogCkBAIC0yNDAsNyArMjQxLDggQEAKIAkJdWRlbGF5KDQpOwogCQlpZiAoaSA9PSAxNjM4MykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogc2NiX2NtZCAocnVjKSB0aW1lZCBvdXQ6ICUwNHgsJTA0eCAuLiBkaXNhYmxpbmcgaTgyNTg2ISFcbiIsCi0JCQkJZGV2LT5uYW1lLCBwLT5zY2ItPmNtZF9ydWMsIHAtPnNjYi0+cnVzKTsKKwkJCQlkZXYtPm5hbWUsIHJlYWRiKCZwLT5zY2ItPmNtZF9ydWMpLAorCQkJCXJlYWRiKCZwLT5zY2ItPnJ1cykpOwogCQkJaWYgKCFwLT5yZXNldCkgewogCQkJCXAtPnJlc2V0ID0gMTsKIAkJCQluaV9yZXNldDU4NigpOwpAQCAtMjQ5LDkgKzI1MSw5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB3YWl0X2Zvcl9zdGF0X2NvbXBsKHZvaWQgKnApCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9zdGF0X2NvbXBsKHZvaWQgX19pb21lbSAqcCkKIHsKLQlzdHJ1Y3Qgbm9wX2NtZF9zdHJ1Y3QgKmFkZHIgPSBwOworCXN0cnVjdCBub3BfY21kX3N0cnVjdCBfX2lvbWVtICphZGRyID0gcDsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgMzI3Njc7IGkrKykgewogCQlpZiAocmVhZHcoJigoYWRkciktPmNtZF9zdGF0dXMpKSAmIFNUQVRfQ09NUEwpCkBAIC0yOTMsNDcgKzI5NSw1OCBAQAogCXJldHVybiAwOyAvKiBtb3N0IGRvbmUgYnkgaW5pdCAqLwogfQogCitzdGF0aWMgaW50IGNoZWNrX2lzY3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXN0cnVjdCBpc2NwX3N0cnVjdCBfX2lvbWVtICppc2NwID0gYWRkcjsKKwlzdHJ1Y3QgcHJpdiAqcCA9IGRldi0+cHJpdjsKKwltZW1zZXRfaW8oaXNjcCwgMCwgc2l6ZW9mKHN0cnVjdCBpc2NwX3N0cnVjdCkpOworCisJd3JpdGVsKG1ha2UyNChpc2NwKSwgJnAtPnNjcC0+aXNjcCk7CisJd3JpdGViKDEsICZpc2NwLT5idXN5KTsKKworCW5pX3Jlc2V0NTg2KCk7CisJbmlfYXR0bjU4NigpOworCW1kZWxheSgzMik7CS8qIHdhaXQgYSB3aGlsZS4uLiAqLworCS8qIGk4MjU4NiBjbGVhcnMgJ2J1c3knIGFmdGVyIHN1Y2Nlc3NmdWwgaW5pdCAqLworCWlmIChyZWFkYigmaXNjcC0+YnVzeSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gODI1ODYgb3V0IHRoZXJlLgogICovCi1zdGF0aWMgaW50IGNoZWNrNTg2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKndoZXJlLCB1bnNpZ25lZCBzaXplKQorc3RhdGljIGludCBjaGVjazU4NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaXplKQogewotCXN0cnVjdCBwcml2IHBiOwotCXN0cnVjdCBwcml2ICpwID0gLyogKHN0cnVjdCBwcml2ICopIGRldi0+cHJpdiovICZwYjsKLQljaGFyICppc2NwX2FkZHJzWzJdOworCXN0cnVjdCBwcml2ICpwID0gZGV2LT5wcml2OwogCWludCBpOwogCi0JcC0+YmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpc2FfYnVzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpd2hlcmUpCi0JCQkJCQkJKyBzaXplIC0gMHgwMTAwMDAwMDsKLQlwLT5tZW10b3AgPSBpc2FfYnVzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpd2hlcmUpICsgc2l6ZTsKLQlwLT5zY3AgPSAoc3RydWN0IHNjcF9zdHJ1Y3QgKikocC0+YmFzZSArIFNDUF9ERUZBVUxUX0FERFJFU1MpOwotCW1lbXNldF9pbygoY2hhciAqKXAtPnNjcCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3Bfc3RydWN0KSk7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3Qgc2NwX3N0cnVjdCk7IGkrKykKLQkJLyogbWVtb3J5IHdhcyB3cml0ZWFibGU/ICovCi0JCWlmIChyZWFkYigoY2hhciAqKXAtPnNjcCArIGkpKQotCQkJcmV0dXJuIDA7Ci0Jd3JpdGViKFNZU0JVU1ZBTCwgJnAtPnNjcC0+c3lzYnVzKTsJLyogMSA9IDhCaXQtQnVzLCAwID0gMTYgQml0ICovCi0JaWYgKHJlYWRiKCZwLT5zY3AtPnN5c2J1cykgIT0gU1lTQlVTVkFMKQorCXAtPm1hcHBlZCA9IGlvcmVtYXAoZGV2LT5tZW1fc3RhcnQsIHNpemUpOworCWlmICghcC0+bWFwcGVkKQogCQlyZXR1cm4gMDsKIAotCWlzY3BfYWRkcnNbMF0gPSBpc2FfYnVzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpd2hlcmUpOwotCWlzY3BfYWRkcnNbMV0gPSAoY2hhciAqKSBwLT5zY3AgLSBzaXplb2Yoc3RydWN0IGlzY3Bfc3RydWN0KTsKKwlwLT5iYXNlID0gcC0+bWFwcGVkICsgc2l6ZSAtIDB4MDEwMDAwMDA7CisJcC0+bWVtdG9wID0gcC0+bWFwcGVkICsgc2l6ZTsKKwlwLT5zY3AgPSAoc3RydWN0IHNjcF9zdHJ1Y3QgX19pb21lbSAqKShwLT5iYXNlICsgU0NQX0RFRkFVTFRfQUREUkVTUyk7CisJcC0+c2NiCT0gKHN0cnVjdCBzY2Jfc3RydWN0IF9faW9tZW0gKikJcC0+bWFwcGVkOworCXAtPmlzY3AgPSAoc3RydWN0IGlzY3Bfc3RydWN0IF9faW9tZW0gKilwLT5zY3AgLSAxOworCW1lbXNldF9pbyhwLT5zY3AsIDAsIHNpemVvZihzdHJ1Y3Qgc2NwX3N0cnVjdCkpOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHNjcF9zdHJ1Y3QpOyBpKyspCisJCS8qIG1lbW9yeSB3YXMgd3JpdGVhYmxlPyAqLworCQlpZiAocmVhZGIoKGNoYXIgX19pb21lbSAqKXAtPnNjcCArIGkpKQorCQkJZ290byBFbm9kZXY7CisJd3JpdGViKFNZU0JVU1ZBTCwgJnAtPnNjcC0+c3lzYnVzKTsJLyogMSA9IDhCaXQtQnVzLCAwID0gMTYgQml0ICovCisJaWYgKHJlYWRiKCZwLT5zY3AtPnN5c2J1cykgIT0gU1lTQlVTVkFMKQorCQlnb3RvIEVub2RldjsKIAotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJcC0+aXNjcCA9IChzdHJ1Y3QgaXNjcF9zdHJ1Y3QgKikgaXNjcF9hZGRyc1tpXTsKLQkJbWVtc2V0X2lvKChjaGFyICopcC0+aXNjcCwgMCwgc2l6ZW9mKHN0cnVjdCBpc2NwX3N0cnVjdCkpOwotCi0JCXdyaXRlbChtYWtlMjQocC0+aXNjcCksICZwLT5zY3AtPmlzY3ApOwotCQl3cml0ZWIoMSwgJnAtPmlzY3AtPmJ1c3kpOwotCi0JCW5pX3Jlc2V0NTg2KCk7Ci0JCW5pX2F0dG41ODYoKTsKLQkJbWRlbGF5KDMyKTsJLyogd2FpdCBhIHdoaWxlLi4uICovCi0JCS8qIGk4MjU4NiBjbGVhcnMgJ2J1c3knIGFmdGVyIHN1Y2Nlc3NmdWwgaW5pdCAqLwotCQlpZiAocmVhZGIoJnAtPmlzY3AtPmJ1c3kpKQotCQkJcmV0dXJuIDA7Ci0JfQorCWlmICghY2hlY2tfaXNjcChkZXYsIHAtPm1hcHBlZCkpCisJCWdvdG8gRW5vZGV2OworCWlmICghY2hlY2tfaXNjcChkZXYsIHAtPmlzY3ApKQorCQlnb3RvIEVub2RldjsKIAlyZXR1cm4gMTsKK0Vub2RldjoKKwlpb3VubWFwKHAtPm1hcHBlZCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM0NiwxMyArMzU5LDYgQEAKIAluaV9yZXNldDU4NigpOwogCW1kZWxheSgzMik7CiAKLQlzcGluX2xvY2tfaW5pdCgmcC0+c3BpbmxvY2spOwotCi0JcC0+c2NwCT0gKHN0cnVjdCBzY3Bfc3RydWN0ICopCShwLT5iYXNlICsgU0NQX0RFRkFVTFRfQUREUkVTUyk7Ci0JcC0+c2NiCT0gKHN0cnVjdCBzY2Jfc3RydWN0ICopCWlzYV9idXNfdG9fdmlydChkZXYtPm1lbV9zdGFydCk7Ci0JcC0+aXNjcCA9IChzdHJ1Y3QgaXNjcF9zdHJ1Y3QgKikKLQkJCSgoY2hhciAqKXAtPnNjcCAtIHNpemVvZihzdHJ1Y3QgaXNjcF9zdHJ1Y3QpKTsKLQogCW1lbXNldF9pbyhwLT5pc2NwLCAwLCBzaXplb2Yoc3RydWN0IGlzY3Bfc3RydWN0KSk7CiAJbWVtc2V0X2lvKHAtPnNjcCAsIDAsIHNpemVvZihzdHJ1Y3Qgc2NwX3N0cnVjdCkpOwogCkBAIC0zNzEsNyArMzc3LDcgQEAKIAogCXAtPnJlc2V0ID0gMDsKIAotCW1lbXNldF9pbygoY2hhciAqKXAtPnNjYiwgMCwgc2l6ZW9mKHN0cnVjdCBzY2Jfc3RydWN0KSk7CisJbWVtc2V0X2lvKHAtPnNjYiwgMCwgc2l6ZW9mKHN0cnVjdCBzY2Jfc3RydWN0KSk7CiB9CiAKIC8qIHNldDogaW8saXJxLG1lbXN0YXJ0LG1lbWVuZCBvciBzZXQgaXQgd2hlbiBjYWxsaW5nIGluc21vZCAqLwpAQCAtMzg3LDEyICszOTMsMTUgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBwcml2KSk7CiAJc3RhdGljIGludCBwb3J0c1tdID0gezB4MzAwLCAweDI4MCwgMHgzNjAgLCAweDMyMCAsIDB4MzQwLCAwfTsKKwlzdHJ1Y3QgcHJpdiAqcDsKIAlpbnQgKnBvcnQ7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIWRldikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKKwlwID0gZGV2LT5wcml2OworCiAJaWYgKHVuaXQgPj0gMCkgewogCQlzcHJpbnRmKGRldi0+bmFtZSwgImV0aCVkIiwgdW5pdCk7CiAJCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CkBAIC00MjcsNiArNDM2LDcgQEAKIAkJZ290byBvdXQxOwogCXJldHVybiBkZXY7CiBvdXQxOgorCWlvdW5tYXAocC0+bWFwcGVkKTsKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTkk1Ml9UT1RBTF9TSVpFKTsKIG91dDoKIAlmcmVlX25ldGRldihkZXYpOwpAQCAtNDM2LDEyICs0NDYsMTUgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5pNTJfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJaW50IGksIHNpemUsIHJldHZhbDsKKwlzdHJ1Y3QgcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAogCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOwogCWRldi0+aXJxID0gaXJxOwogCWRldi0+bWVtX3N0YXJ0ID0gbWVtc3RhcnQ7CiAJZGV2LT5tZW1fZW5kID0gbWVtZW5kOwogCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnNwaW5sb2NrKTsKKwogCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBOSTUyX1RPVEFMX1NJWkUsIERSVl9OQU1FKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtNDc0LDcgKzQ4Nyw3IEBACiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoIWNoZWNrNTg2KGRldiwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCwgc2l6ZSkpIHsKKwlpZiAoIWNoZWNrNTg2KGRldiwgc2l6ZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICI/bWVtY2hlY2ssIENhbid0IGZpbmQgbWVtb3J5IGF0IDB4JWx4IHdpdGggc2l6ZSAlZCFcbiIsIGRldi0+bWVtX3N0YXJ0LCBzaXplKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CkBAIC00ODMsOSArNDk2LDkgQEAKIAlpZiAoZGV2LT5tZW1fc3RhcnQgIT0gMCkgewogCQkvKiBubyBhdXRvLW1lbS1wcm9iZSAqLwogCQlzaXplID0gMHg0MDAwOyAvKiBjaGVjayBmb3IgMTZLIG1lbSAqLwotCQlpZiAoIWNoZWNrNTg2KGRldiwgKGNoYXIgKikgZGV2LT5tZW1fc3RhcnQsIHNpemUpKSB7CisJCWlmICghY2hlY2s1ODYoZGV2LCBzaXplKSkgewogCQkJc2l6ZSA9IDB4MjAwMDsgLyogY2hlY2sgZm9yIDhLIG1lbSAqLwotCQkJaWYgKCFjaGVjazU4NihkZXYsIChjaGFyICopZGV2LT5tZW1fc3RhcnQsIHNpemUpKSB7CisJCQlpZiAoIWNoZWNrNTg2KGRldiwgc2l6ZSkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIj9tZW1wcm9iZSwgQ2FuJ3QgZmluZCBtZW1vcnkgYXQgMHglbHghXG4iLCBkZXYtPm1lbV9zdGFydCk7CiAJCQkJcmV0dmFsID0gLUVOT0RFVjsKIAkJCQlnb3RvIG91dDsKQEAgLTUwNCwxMSArNTE3LDExIEBACiAJCQl9CiAJCQlkZXYtPm1lbV9zdGFydCA9IG1lbWFkZHJzW2ldOwogCQkJc2l6ZSA9IDB4MjAwMDsgLyogY2hlY2sgZm9yIDhLIG1lbSAqLwotCQkJaWYgKGNoZWNrNTg2KGRldiwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCwgc2l6ZSkpCisJCQlpZiAoY2hlY2s1ODYoZGV2LCBzaXplKSkKIAkJCQkvKiA4Sy1jaGVjayAqLwogCQkJCWJyZWFrOwogCQkJc2l6ZSA9IDB4NDAwMDsgLyogY2hlY2sgZm9yIDE2SyBtZW0gKi8KLQkJCWlmIChjaGVjazU4NihkZXYsIChjaGFyICopZGV2LT5tZW1fc3RhcnQsIHNpemUpKQorCQkJaWYgKGNoZWNrNTg2KGRldiwgc2l6ZSkpCiAJCQkJLyogMTZLLWNoZWNrICovCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTUxNywxOSArNTMwLDEzIEBACiAJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyBzaXplOwogI2VuZGlmCiAKLQltZW1zZXQoKGNoYXIgKilkZXYtPnByaXYsIDAsIHNpemVvZihzdHJ1Y3QgcHJpdikpOwotCi0JKChzdHJ1Y3QgcHJpdiAqKShkZXYtPnByaXYpKS0+bWVtdG9wID0KLQkJCQlpc2FfYnVzX3RvX3ZpcnQoZGV2LT5tZW1fc3RhcnQpICsgc2l6ZTsKLQkoKHN0cnVjdCBwcml2ICopKGRldi0+cHJpdikpLT5iYXNlID0gICh1bnNpZ25lZCBsb25nKQotCQkJaXNhX2J1c190b192aXJ0KGRldi0+bWVtX3N0YXJ0KSArIHNpemUgLSAweDAxMDAwMDAwOwogCWFsbG9jNTg2KGRldik7CiAKIAkvKiBzZXQgbnVtYmVyIG9mIHJlY2VpdmUtYnVmZnMgYWNjb3JkaW5nIHRvIG1lbXNpemUgKi8KIAlpZiAoc2l6ZSA9PSAweDIwMDApCi0JCSgoc3RydWN0IHByaXYgKikgZGV2LT5wcml2KS0+bnVtX3JlY3ZfYnVmZnMgPSBOVU1fUkVDVl9CVUZGU184OworCQlwcml2LT5udW1fcmVjdl9idWZmcyA9IE5VTV9SRUNWX0JVRkZTXzg7CiAJZWxzZQotCQkoKHN0cnVjdCBwcml2ICopIGRldi0+cHJpdiktPm51bV9yZWN2X2J1ZmZzID0gTlVNX1JFQ1ZfQlVGRlNfMTY7CisJCXByaXYtPm51bV9yZWN2X2J1ZmZzID0gTlVNX1JFQ1ZfQlVGRlNfMTY7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiTWVtYWRkcjogMHglbHgsIE1lbXNpemU6ICVkLCAiLAogCQkJCWRldi0+bWVtX3N0YXJ0LCBzaXplKTsKQEAgLTU0Niw2ICs1NTMsNyBAQAogCQlpZiAoIWRldi0+aXJxKSB7CiAJCQlwcmludGsoIj9hdXRvaXJxLCBGYWlsZWQgdG8gZGV0ZWN0IElSUSBsaW5lIVxuIik7CiAJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJaW91bm1hcChwcml2LT5tYXBwZWQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJcHJpbnRrKCJJUlEgJWQgKGF1dG9kZXRlY3RlZCkuXG4iLCBkZXYtPmlycSk7CkBAIC01NzgsMTkgKzU4NiwxOSBAQAogCiBzdGF0aWMgaW50IGluaXQ1ODYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl2b2lkICpwdHI7CisJdm9pZCBfX2lvbWVtICpwdHI7CiAJaW50IGksIHJlc3VsdCA9IDA7CiAJc3RydWN0IHByaXYgKnAgPSAoc3RydWN0IHByaXYgKilkZXYtPnByaXY7Ci0Jc3RydWN0IGNvbmZpZ3VyZV9jbWRfc3RydWN0ICpjZmdfY21kOwotCXN0cnVjdCBpYXNldHVwX2NtZF9zdHJ1Y3QgKmlhc19jbWQ7Ci0Jc3RydWN0IHRkcl9jbWRfc3RydWN0ICp0ZHJfY21kOwotCXN0cnVjdCBtY3NldHVwX2NtZF9zdHJ1Y3QgKm1jX2NtZDsKKwlzdHJ1Y3QgY29uZmlndXJlX2NtZF9zdHJ1Y3QgX19pb21lbSAqY2ZnX2NtZDsKKwlzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0IF9faW9tZW0gKmlhc19jbWQ7CisJc3RydWN0IHRkcl9jbWRfc3RydWN0IF9faW9tZW0gKnRkcl9jbWQ7CisJc3RydWN0IG1jc2V0dXBfY21kX3N0cnVjdCBfX2lvbWVtICptY19jbWQ7CiAJc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CiAJaW50IG51bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CiAKLQlwdHIgPSAodm9pZCAqKSAoKGNoYXIgKilwLT5zY2IgKyBzaXplb2Yoc3RydWN0IHNjYl9zdHJ1Y3QpKTsKKwlwdHIgPSBwLT5zY2IgKyAxOwogCi0JY2ZnX2NtZCA9IChzdHJ1Y3QgY29uZmlndXJlX2NtZF9zdHJ1Y3QgKilwdHI7IC8qIGNvbmZpZ3VyZS1jb21tYW5kICovCisJY2ZnX2NtZCA9IHB0cjsgLyogY29uZmlndXJlLWNvbW1hbmQgKi8KIAl3cml0ZXcoMCwgJmNmZ19jbWQtPmNtZF9zdGF0dXMpOwogCXdyaXRldyhDTURfQ09ORklHVVJFIHwgQ01EX0xBU1QsICZjZmdfY21kLT5jbWRfY21kKTsKIAl3cml0ZXcoMHhGRkZGLCAmY2ZnX2NtZC0+Y21kX2xpbmspOwpAQCAtNjA5LDcgKzYxNyw3IEBACiAJd3JpdGViKDB4ZjIsICZjZmdfY21kLT50aW1lX2hpZ2gpOwogCXdyaXRlYigweDAwLCAmY2ZnX2NtZC0+cHJvbWlzYyk7OwogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCWludCBsZW4gPSAoKGNoYXIgKikgcC0+aXNjcCAtIChjaGFyICopIHB0ciAtIDgpIC8gNjsKKwkJaW50IGxlbiA9ICgoY2hhciBfX2lvbWVtICopcC0+aXNjcCAtIChjaGFyIF9faW9tZW0gKilwdHIgLSA4KSAvIDY7CiAJCWlmIChudW1fYWRkcnMgPiBsZW4pIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN3aXRjaGluZyB0byBwcm9taXNjLiBtb2RlXG4iLAogCQkJCWRldi0+bmFtZSk7CkBAIC02MjAsNyArNjI4LDcgQEAKIAkJd3JpdGViKDB4MDEsICZjZmdfY21kLT5wcm9taXNjKTsKIAl3cml0ZWIoMHgwMCwgJmNmZ19jbWQtPmNhcnJfY29sbCk7CiAJd3JpdGV3KG1ha2UxNihjZmdfY21kKSwgJnAtPnNjYi0+Y2JsX29mZnNldCk7Ci0Jd3JpdGV3KDAsICZwLT5zY2ItPmNtZF9ydWMpOworCXdyaXRlYigwLCAmcC0+c2NiLT5jbWRfcnVjKTsKIAogCXdyaXRlYihDVUNfU1RBUlQsICZwLT5zY2ItPmNtZF9jdWMpOyAvKiBjbWQuLXVuaXQgc3RhcnQgKi8KIAluaV9hdHRuNTg2KCk7CkBAIC02MzgsMTMgKzY0NiwxMyBAQAogCSAqIGluZGl2aWR1YWwgYWRkcmVzcyBzZXR1cAogCSAqLwogCi0JaWFzX2NtZCA9IChzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0ICopcHRyOworCWlhc19jbWQgPSBwdHI7CiAKIAl3cml0ZXcoMCwgJmlhc19jbWQtPmNtZF9zdGF0dXMpOwogCXdyaXRldyhDTURfSUFTRVRVUCB8IENNRF9MQVNULCAmaWFzX2NtZC0+Y21kX2NtZCk7CiAJd3JpdGV3KDB4ZmZmZiwgJmlhc19jbWQtPmNtZF9saW5rKTsKIAotCW1lbWNweV90b2lvKChjaGFyICopJmlhc19jbWQtPmlhZGRyLCAoY2hhciAqKWRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHlfdG9pbygmaWFzX2NtZC0+aWFkZHIsIChjaGFyICopZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCiAJd3JpdGV3KG1ha2UxNihpYXNfY21kKSwgJnAtPnNjYi0+Y2JsX29mZnNldCk7CiAKQEAgLTY2Myw3ICs2NzEsNyBAQAogCSAqIFREUiwgd2lyZSBjaGVjayAuLiBlLmcuIG5vIHJlc2lzdG9yIGUudC5jCiAJICovCiAKLQl0ZHJfY21kID0gKHN0cnVjdCB0ZHJfY21kX3N0cnVjdCAqKXB0cjsKKwl0ZHJfY21kID0gcHRyOwogCiAJd3JpdGV3KDAsICZ0ZHJfY21kLT5jbWRfc3RhdHVzKTsKIAl3cml0ZXcoQ01EX1REUiB8IENNRF9MQVNULCAmdGRyX2NtZC0+Y21kX2NtZCk7CkBAIC03MDcsMTQgKzcxNSwxNCBAQAogCSAqIE11bHRpY2FzdCBzZXR1cAogCSAqLwogCWlmIChudW1fYWRkcnMgJiYgIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7Ci0JCW1jX2NtZCA9IChzdHJ1Y3QgbWNzZXR1cF9jbWRfc3RydWN0ICopIHB0cjsKKwkJbWNfY21kID0gcHRyOwogCQl3cml0ZXcoMCwgJm1jX2NtZC0+Y21kX3N0YXR1cyk7CiAJCXdyaXRldyhDTURfTUNTRVRVUCB8IENNRF9MQVNULCAmbWNfY21kLT5jbWRfY21kKTsKIAkJd3JpdGV3KDB4ZmZmZiwgJm1jX2NtZC0+Y21kX2xpbmspOwogCQl3cml0ZXcobnVtX2FkZHJzICogNiwgJm1jX2NtZC0+bWNfY250KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FkZHJzOyBpKyssIGRtaSA9IGRtaS0+bmV4dCkKLQkJCW1lbWNweV90b2lvKChjaGFyICopIG1jX2NtZC0+bWNfbGlzdFtpXSwKKwkJCW1lbWNweV90b2lvKG1jX2NtZC0+bWNfbGlzdFtpXSwKIAkJCQkJCQlkbWktPmRtaV9hZGRyLCA2KTsKIAogCQl3cml0ZXcobWFrZTE2KG1jX2NtZCksICZwLT5zY2ItPmNibF9vZmZzZXQpOwpAQCAtNzMzLDQzICs3NDEsNDMgQEAKIAkgKi8KICNpZiAoTlVNX1hNSVRfQlVGRlMgPT0gMSkKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCXAtPm5vcF9jbWRzW2ldID0gKHN0cnVjdCBub3BfY21kX3N0cnVjdCAqKXB0cjsKKwkJcC0+bm9wX2NtZHNbaV0gPSBwdHI7CiAJCXdyaXRldyhDTURfTk9QLCAmcC0+bm9wX2NtZHNbaV0tPmNtZF9jbWQpOwogCQl3cml0ZXcoMCwgJnAtPm5vcF9jbWRzW2ldLT5jbWRfc3RhdHVzKTsKIAkJd3JpdGV3KG1ha2UxNihwLT5ub3BfY21kc1tpXSksICZwLT5ub3BfY21kc1tpXS0+Y21kX2xpbmspOwotCQlwdHIgPSAoY2hhciAqKSBwdHIgKyBzaXplb2Yoc3RydWN0IG5vcF9jbWRfc3RydWN0KTsKKwkJcHRyID0gcHRyICsgc2l6ZW9mKHN0cnVjdCBub3BfY21kX3N0cnVjdCk7CiAJfQogI2Vsc2UKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1hNSVRfQlVGRlM7IGkrKykgewotCQlwLT5ub3BfY21kc1tpXSA9IChzdHJ1Y3Qgbm9wX2NtZF9zdHJ1Y3QgKilwdHI7CisJCXAtPm5vcF9jbWRzW2ldID0gcHRyOwogCQl3cml0ZXcoQ01EX05PUCwgJnAtPm5vcF9jbWRzW2ldLT5jbWRfY21kKTsKIAkJd3JpdGV3KDAsICZwLT5ub3BfY21kc1tpXS0+Y21kX3N0YXR1cyk7CiAJCXdyaXRldyhtYWtlMTYocC0+bm9wX2NtZHNbaV0pLCAmcC0+bm9wX2NtZHNbaV0tPmNtZF9saW5rKTsKLQkJcHRyID0gKGNoYXIgKikgcHRyICsgc2l6ZW9mKHN0cnVjdCBub3BfY21kX3N0cnVjdCk7CisJCXB0ciA9IHB0ciArIHNpemVvZihzdHJ1Y3Qgbm9wX2NtZF9zdHJ1Y3QpOwogCX0KICNlbmRpZgogCi0JcHRyID0gYWxsb2NfcmZhKGRldiwgKHZvaWQgKilwdHIpOyAvKiBpbml0IHJlY2VpdmUtZnJhbWUtYXJlYSAqLworCXB0ciA9IGFsbG9jX3JmYShkZXYsIHB0cik7IC8qIGluaXQgcmVjZWl2ZS1mcmFtZS1hcmVhICovCiAKIAkvKgogCSAqIGFsbG9jIHhtaXQtYnVmZnMgLyBpbml0IHhtaXRfY21kcwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fWE1JVF9CVUZGUzsgaSsrKSB7CiAJCS8qIFRyYW5zbWl0IGNtZC9idWZmIDAgKi8KLQkJcC0+eG1pdF9jbWRzW2ldID0gKHN0cnVjdCB0cmFuc21pdF9jbWRfc3RydWN0ICopcHRyOwotCQlwdHIgPSAoY2hhciAqKSBwdHIgKyBzaXplb2Yoc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QpOwotCQlwLT54bWl0X2NidWZmc1tpXSA9IChjaGFyICopcHRyOyAvKiBjaGFyLWJ1ZmZzICovCi0JCXB0ciA9IChjaGFyICopIHB0ciArIFhNSVRfQlVGRl9TSVpFOwotCQlwLT54bWl0X2J1ZmZzW2ldID0gKHN0cnVjdCB0YmRfc3RydWN0ICopcHRyOyAvKiBUQkQgKi8KLQkJcHRyID0gKGNoYXIgKikgcHRyICsgc2l6ZW9mKHN0cnVjdCB0YmRfc3RydWN0KTsKLQkJaWYgKCh2b2lkICopcHRyID4gKHZvaWQgKilwLT5pc2NwKSB7CisJCXAtPnhtaXRfY21kc1tpXSA9IHB0cjsKKwkJcHRyID0gcHRyICsgc2l6ZW9mKHN0cnVjdCB0cmFuc21pdF9jbWRfc3RydWN0KTsKKwkJcC0+eG1pdF9jYnVmZnNbaV0gPSBwdHI7IC8qIGNoYXItYnVmZnMgKi8KKwkJcHRyID0gcHRyICsgWE1JVF9CVUZGX1NJWkU7CisJCXAtPnhtaXRfYnVmZnNbaV0gPSBwdHI7IC8qIFRCRCAqLworCQlwdHIgPSBwdHIgKyBzaXplb2Yoc3RydWN0IHRiZF9zdHJ1Y3QpOworCQlpZiAoKHZvaWQgX19pb21lbSAqKXB0ciA+ICh2b2lkIF9faW9tZW0gKilwLT5pc2NwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgZW5vdWdoIHNoYXJlZC1tZW0gZm9yIHlvdXIgY29uZmlndXJhdGlvbiFcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JCW1lbXNldF9pbygoY2hhciAqKShwLT54bWl0X2NtZHNbaV0pLCAwLAorCQltZW1zZXRfaW8ocC0+eG1pdF9jbWRzW2ldLCAwLAogCQkJCQlzaXplb2Yoc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QpKTsKLQkJbWVtc2V0X2lvKChjaGFyICopKHAtPnhtaXRfYnVmZnNbaV0pLCAwLAorCQltZW1zZXRfaW8ocC0+eG1pdF9idWZmc1tpXSwgMCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCB0YmRfc3RydWN0KSk7CiAJCXdyaXRldyhtYWtlMTYocC0+bm9wX2NtZHNbKGkrMSklTlVNX1hNSVRfQlVGRlNdKSwKIAkJCQkJJnAtPnhtaXRfY21kc1tpXS0+Y21kX2xpbmspOwpAQCAtODE2LDE0ICs4MjQsMTQgQEAKICAqIEl0IHNldHMgdXAgdGhlIFJlY2VpdmUgRnJhbWUgQXJlYSAoUkZBKS4KICAqLwogCi1zdGF0aWMgdm9pZCAqYWxsb2NfcmZhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cikKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmFsbG9jX3JmYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKnB0cikKIHsKLQlzdHJ1Y3QgcmZkX3N0cnVjdCAqcmZkID0gKHN0cnVjdCByZmRfc3RydWN0ICopcHRyOwotCXN0cnVjdCByYmRfc3RydWN0ICpyYmQ7CisJc3RydWN0IHJmZF9zdHJ1Y3QgX19pb21lbSAqcmZkID0gcHRyOworCXN0cnVjdCByYmRfc3RydWN0IF9faW9tZW0gKnJiZDsKIAlpbnQgaTsKIAlzdHJ1Y3QgcHJpdiAqcCA9IChzdHJ1Y3QgcHJpdiAqKSBkZXYtPnByaXY7CiAKLQltZW1zZXRfaW8oKGNoYXIgKikgcmZkLCAwLAorCW1lbXNldF9pbyhyZmQsIDAsCiAJCXNpemVvZihzdHJ1Y3QgcmZkX3N0cnVjdCkgKiAocC0+bnVtX3JlY3ZfYnVmZnMgKyByZmRhZGQpKTsKIAlwLT5yZmRfZmlyc3QgPSByZmQ7CiAKQEAgLTgzNSwyMCArODQzLDE5IEBACiAJLyogUlUgc3VzcGVuZCAqLwogCXdyaXRlYihSRkRfU1VTUCwgJnJmZFtwLT5udW1fcmVjdl9idWZmcy0xK3JmZGFkZF0ubGFzdCk7CiAKLQlwdHIgPSAodm9pZCAqKSAocmZkICsgKHAtPm51bV9yZWN2X2J1ZmZzICsgcmZkYWRkKSk7CisJcHRyID0gcmZkICsgKHAtPm51bV9yZWN2X2J1ZmZzICsgcmZkYWRkKTsKIAotCXJiZCA9IChzdHJ1Y3QgcmJkX3N0cnVjdCAqKSBwdHI7Ci0JcHRyID0gKHZvaWQgKikgKHJiZCArIHAtPm51bV9yZWN2X2J1ZmZzKTsKKwlyYmQgPSBwdHI7CisJcHRyID0gcmJkICsgcC0+bnVtX3JlY3ZfYnVmZnM7CiAKIAkgLyogY2xyIGRlc2NyaXB0b3JzICovCi0JbWVtc2V0X2lvKChjaGFyICopcmJkLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCByYmRfc3RydWN0KSAqIChwLT5udW1fcmVjdl9idWZmcykpOworCW1lbXNldF9pbyhyYmQsIDAsIHNpemVvZihzdHJ1Y3QgcmJkX3N0cnVjdCkgKiAocC0+bnVtX3JlY3ZfYnVmZnMpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fcmVjdl9idWZmczsgaSsrKSB7CiAJCXdyaXRldyhtYWtlMTYocmJkICsgKGkrMSkgJSBwLT5udW1fcmVjdl9idWZmcyksICZyYmRbaV0ubmV4dCk7CiAJCXdyaXRldyhSRUNWX0JVRkZfU0laRSwgJnJiZFtpXS5zaXplKTsKIAkJd3JpdGVsKG1ha2UyNChwdHIpLCAmcmJkW2ldLmJ1ZmZlcik7Ci0JCXB0ciA9IChjaGFyICopIHB0ciArIFJFQ1ZfQlVGRl9TSVpFOworCQlwdHIgPSBwdHIgKyBSRUNWX0JVRkZfU0laRTsKIAl9CiAJcC0+cmZkX3RvcAk9IHAtPnJmZF9maXJzdDsKIAlwLT5yZmRfbGFzdCA9IHAtPnJmZF9maXJzdCArIChwLT5udW1fcmVjdl9idWZmcyAtIDEgKyByZmRhZGQpOwpAQCAtODkyLDcgKzg5OSw3IEBACiAJCQlpZiAocmVhZGIoJnAtPnNjYi0+cnVzKSAmIFJVX1NVU1BFTkQpIHsKIAkJCQkvKiBzcGVjaWFsIGNhc2U6IFJVX1NVU1BFTkQgKi8KIAkJCQl3YWl0X2Zvcl9zY2JfY21kKGRldik7Ci0JCQkJcC0+c2NiLT5jbWRfcnVjID0gUlVDX1JFU1VNRTsKKwkJCQl3cml0ZWIoUlVDX1JFU1VNRSwgJnAtPnNjYi0+Y21kX3J1Yyk7CiAJCQkJbmlfYXR0bjU4NigpOwogCQkJCXdhaXRfZm9yX3NjYl9jbWRfcnVjKGRldik7CiAJCQl9IGVsc2UgewpAQCAtOTE5LDcgKzkyNiw3IEBACiAKIAkJLyogV2FpdCBmb3IgYWNrLiAobmk1Ml94bXRfaW50IGNhbiBiZSBmYXN0ZXIgdGhhbiBhY2shISkgKi8KIAkJd2FpdF9mb3Jfc2NiX2NtZChkZXYpOwotCQlpZiAocC0+c2NiLT5jbWRfY3VjKSB7CSAvKiB0aW1lZCBvdXQ/ICovCisJCWlmIChyZWFkYigmcC0+c2NiLT5jbWRfY3VjKSkgewkgLyogdGltZWQgb3V0PyAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQWNrbm93bGVkZ2UgdGltZWQgb3V0LlxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJbmlfZGlzaW50KCk7CkBAIC05NDIsMTQgKzk0OSwxNCBAQAogCWludCBzdGF0dXMsIGNudCA9IDA7CiAJdW5zaWduZWQgc2hvcnQgdG90bGVuOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHJiZF9zdHJ1Y3QgKnJiZDsKKwlzdHJ1Y3QgcmJkX3N0cnVjdCBfX2lvbWVtICpyYmQ7CiAJc3RydWN0IHByaXYgKnAgPSAoc3RydWN0IHByaXYgKilkZXYtPnByaXY7CiAKIAlpZiAoZGVidWdsZXZlbCA+IDApCiAJCXByaW50aygiUiIpOwogCiAJZm9yICg7IChzdGF0dXMgPSByZWFkYigmcC0+cmZkX3RvcC0+c3RhdF9oaWdoKSkgJiBSRkRfQ09NUEw7KSB7Ci0JCXJiZCA9IChzdHJ1Y3QgcmJkX3N0cnVjdCAqKSBtYWtlMzIocC0+cmZkX3RvcC0+cmJkX29mZnNldCk7CisJCXJiZCA9IG1ha2UzMihyZWFkdygmcC0+cmZkX3RvcC0+cmJkX29mZnNldCkpOwogCQlpZiAoc3RhdHVzICYgUkZEX09LKSB7IC8qIGZyYW1lIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3I/ICovCiAJCQl0b3RsZW4gPSByZWFkdygmcmJkLT5zdGF0dXMpOwogCQkJaWYgKHRvdGxlbiAmIFJCRF9MQVNUKSB7CkBAIC05NjAsNyArOTY3LDcgQEAKIAkJCQlpZiAoc2tiICE9IE5VTEwpIHsKIAkJCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAkJCQkJc2tiX3B1dChza2IsIHRvdGxlbik7Ci0JCQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgKGNoYXIgKilwLT5iYXNlICsgKHVuc2lnbmVkIGxvbmcpIHJiZC0+YnVmZmVyLCB0b3RsZW4pOworCQkJCQltZW1jcHlfZnJvbWlvKHNrYi0+ZGF0YSwgcC0+YmFzZSArIHJlYWRsKCZyYmQtPmJ1ZmZlciksIHRvdGxlbik7CiAJCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJCW5ldGlmX3J4KHNrYik7CiAJCQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CkBAIC05NzksNyArOTg2LDcgQEAKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJCXdyaXRldygwLCAmcmJkLT5zdGF0dXMpOwotCQkJCQlyYmQgPSAoc3RydWN0IHJiZF9zdHJ1Y3QgKikgbWFrZTMyKHJlYWRsKCZyYmQtPm5leHQpKTsKKwkJCQkJcmJkID0gbWFrZTMyKHJlYWR3KCZyYmQtPm5leHQpKTsKIAkJCQl9CiAJCQkJdG90bGVuICs9IHJzdGF0ICYgUkJEX01BU0s7CiAJCQkJd3JpdGV3KDAsICZyYmQtPnN0YXR1cyk7CkBAIC05OTcsNyArMTAwNCw3IEBACiAJCXdyaXRldygweGZmZmYsICZwLT5yZmRfdG9wLT5yYmRfb2Zmc2V0KTsKIAkJd3JpdGViKDAsICZwLT5yZmRfbGFzdC0+bGFzdCk7CS8qIGRlbGV0ZSBSRkRfU1VTUAkqLwogCQlwLT5yZmRfbGFzdCA9IHAtPnJmZF90b3A7Ci0JCXAtPnJmZF90b3AgPSAoc3RydWN0IHJmZF9zdHJ1Y3QgKikgbWFrZTMyKHAtPnJmZF90b3AtPm5leHQpOyAvKiBzdGVwIHRvIG5leHQgUkZEICovCisJCXAtPnJmZF90b3AgPSBtYWtlMzIocmVhZHcoJnAtPnJmZF90b3AtPm5leHQpKTsgLyogc3RlcCB0byBuZXh0IFJGRCAqLwogCQl3cml0ZXcobWFrZTE2KHAtPnJmZF90b3ApLCAmcC0+c2NiLT5yZmFfb2Zmc2V0KTsKIAogCQlpZiAoZGVidWdsZXZlbCA+IDApCkBAIC0xMDQyLDExICsxMDQ5LDEyIEBACiAJbmlfYXR0bjU4NigpOwogCXdhaXRfZm9yX3NjYl9jbWRfcnVjKGRldik7CQkvKiB3YWl0IGZvciBhY2NlcHQgY21kLiAqLwogCi0JYWxsb2NfcmZhKGRldiwgKGNoYXIgKilwLT5yZmRfZmlyc3QpOworCWFsbG9jX3JmYShkZXYsIHAtPnJmZF9maXJzdCk7CiAJLyogbWF5YmUgYWRkIGEgY2hlY2sgaGVyZSwgYmVmb3JlIHJlc3RhcnRpbmcgdGhlIFJVICovCiAJc3RhcnRyZWN2NTg2KGRldik7IC8qIHJlc3RhcnQgUlUgKi8KIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IFJlY2VpdmUtVW5pdCByZXN0YXJ0ZWQuIFN0YXR1czogJTA0eFxuIiwgZGV2LT5uYW1lLCBwLT5zY2ItPnJ1cyk7CisJcHJpbnRrKEtFUk5fRVJSICIlczogUmVjZWl2ZS1Vbml0IHJlc3RhcnRlZC4gU3RhdHVzOiAlMDR4XG4iLAorCQlkZXYtPm5hbWUsIHJlYWRiKCZwLT5zY2ItPnJ1cykpOwogCiB9CiAKQEAgLTExNzgsMTIgKzExODYsMTEgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAoY2hhciAqKXAtPnhtaXRfY2J1ZmZzW3AtPnhtaXRfY291bnRdLAotCQkJCQkJCXNrYi0+bGVuKTsKKwltZW1jcHlfdG9pbyhwLT54bWl0X2NidWZmc1twLT54bWl0X2NvdW50XSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJbGVuID0gc2tiLT5sZW47CiAJaWYgKGxlbiA8IEVUSF9aTEVOKSB7CiAJCWxlbiA9IEVUSF9aTEVOOwotCQltZW1zZXQoKGNoYXIgKilwLT54bWl0X2NidWZmc1twLT54bWl0X2NvdW50XStza2ItPmxlbiwgMCwKKwkJbWVtc2V0X2lvKHAtPnhtaXRfY2J1ZmZzW3AtPnhtaXRfY291bnRdK3NrYi0+bGVuLCAwLAogCQkJCQkJCWxlbiAtIHNrYi0+bGVuKTsKIAl9CiAKQEAgLTExOTEsMTQgKzExOTgsMTQgQEAKICMJaWZkZWYgTk9fTk9QQ09NTUFORFMKIAogI2lmZGVmIERFQlVHCi0JaWYgKHAtPnNjYi0+Y3VzICYgQ1VfQUNUSVZFKSB7CisJaWYgKHJlYWRiKCZwLT5zY2ItPmN1cykgJiBDVV9BQ1RJVkUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSG1tbSAuLiBDVSBpcyBzdGlsbCBydW5uaW5nIGFuZCB3ZSB3YW5uYSBzZW5kIGEgbmV3IHBhY2tldC5cbiIsIGRldi0+bmFtZSk7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN0YXQ6ICUwNHggJTA0eFxuIiwKIAkJCQlkZXYtPm5hbWUsIHJlYWRiKCZwLT5zY2ItPmN1cyksCiAJCQkJcmVhZHcoJnAtPnhtaXRfY21kc1swXS0+Y21kX3N0YXR1cykpOwogCX0KICNlbmRpZgotCXdyaXRldyhUQkRfTEFTVCB8IGxlbiwgJnAtPnhtaXRfYnVmZnNbMF0tPnNpemUpOzsKKwl3cml0ZXcoVEJEX0xBU1QgfCBsZW4sICZwLT54bWl0X2J1ZmZzWzBdLT5zaXplKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQl3cml0ZXcoMCwgJnAtPnhtaXRfY21kc1swXS0+Y21kX3N0YXR1cyk7CiAJCXdhaXRfZm9yX3NjYl9jbWQoZGV2KTsKQEAgLTEzMzAsNyArMTMzNyw5IEBACiAKIHZvaWQgX19leGl0IGNsZWFudXBfbW9kdWxlKHZvaWQpCiB7CisJc3RydWN0IHByaXYgKnAgPSBkZXZfbmk1Mi0+cHJpdjsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXZfbmk1Mik7CisJaW91bm1hcChwLT5tYXBwZWQpOwogCXJlbGVhc2VfcmVnaW9uKGRldl9uaTUyLT5iYXNlX2FkZHIsIE5JNTJfVE9UQUxfU0laRSk7CiAJZnJlZV9uZXRkZXYoZGV2X25pNTIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk1Mi5oIGIvZHJpdmVycy9uZXQvbmk1Mi5oCmluZGV4IDFmMjhhNGQuLjBhMDNiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNTIuaAorKysgYi9kcml2ZXJzL25ldC9uaTUyLmgKQEAgLTM5LDggKzM5LDggQEAKIAl1MTYgemVyb19kdW0wOwkvKiBoYXMgdG8gYmUgemVybyAqLwogCXU4IHN5c2J1czsJLyogMD0xNkJpdCwxPThCaXQgKi8KIAl1OCB6ZXJvX2R1bTE7CS8qIGhhcyB0byBiZSB6ZXJvIGZvciA1ODYgKi8KLQl1OCB6ZXJvX2R1bTI7Ci0JdTggemVyb19kdW0zOworCXUxNiB6ZXJvX2R1bTI7CisJdTE2IHplcm9fZHVtMzsKIAl1MzIgaXNjcDsJCS8qIHBvaW50ZXIgdG8gdGhlIGlzY3AtYmxvY2sgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggMmZlMTRiMC4uNzU2NWMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTMzLDggKzMzLDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJuaXUiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjAuNiIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKYW51YXJ5IDUsIDIwMDgiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC43IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYnJ1YXJ5IDE4LCAyMDA4IgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJRFJWX01PRFVMRV9OQU1FICIuYzp2IiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CkBAIC0xMTMsNiArMTEzLDggQEAKICNkZWZpbmUgbml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKSBcCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPnBhcmVudC0+bG9jaywgZmxhZ3MpCiAKK3N0YXRpYyBpbnQgc2VyZGVzX2luaXRfMTBnX3NlcmRlcyhzdHJ1Y3Qgbml1ICpucCk7CisKIHN0YXRpYyBpbnQgX19uaXVfd2FpdF9iaXRzX2NsZWFyX21hYyhzdHJ1Y3Qgbml1ICpucCwgdW5zaWduZWQgbG9uZyByZWcsCiAJCQkJICAgICB1NjQgYml0cywgaW50IGxpbWl0LCBpbnQgZGVsYXkpCiB7CkBAIC03MDYsNiArNzA4LDI1MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNlcmRlc19pbml0XzFnX3NlcmRlcyhzdHJ1Y3Qgbml1ICpucCkKK3sKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZywgdGVzdF9jZmdfcmVnLCBwbGxfY2ZnLCBpOworCXU2NCBjdHJsX3ZhbCwgdGVzdF9jZmdfdmFsLCBzaWcsIG1hc2ssIHZhbDsKKwlpbnQgZXJyOworCXU2NCByZXNldF92YWwsIHZhbF9yZDsKKworCXZhbCA9IEVORVRfU0VSREVTX1BMTF9IUkFURTAgfCBFTkVUX1NFUkRFU19QTExfSFJBVEUxIHwKKwkJRU5FVF9TRVJERVNfUExMX0hSQVRFMiB8IEVORVRfU0VSREVTX1BMTF9IUkFURTMgfAorCQlFTkVUX1NFUkRFU19QTExfRkJESVYwOworCXN3aXRjaCAobnAtPnBvcnQpIHsKKwljYXNlIDA6CisJCXJlc2V0X3ZhbCA9ICBFTkVUX1NFUkRFU19SRVNFVF8wOworCQljdHJsX3JlZyA9IEVORVRfU0VSREVTXzBfQ1RSTF9DRkc7CisJCXRlc3RfY2ZnX3JlZyA9IEVORVRfU0VSREVTXzBfVEVTVF9DRkc7CisJCXBsbF9jZmcgPSBFTkVUX1NFUkRFU18wX1BMTF9DRkc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmVzZXRfdmFsID0gIEVORVRfU0VSREVTX1JFU0VUXzE7CisJCWN0cmxfcmVnID0gRU5FVF9TRVJERVNfMV9DVFJMX0NGRzsKKwkJdGVzdF9jZmdfcmVnID0gRU5FVF9TRVJERVNfMV9URVNUX0NGRzsKKwkJcGxsX2NmZyA9IEVORVRfU0VSREVTXzFfUExMX0NGRzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3RybF92YWwgPSAoRU5FVF9TRVJERVNfQ1RSTF9TREVUXzAgfAorCQkgICAgRU5FVF9TRVJERVNfQ1RSTF9TREVUXzEgfAorCQkgICAgRU5FVF9TRVJERVNfQ1RSTF9TREVUXzIgfAorCQkgICAgRU5FVF9TRVJERVNfQ1RSTF9TREVUXzMgfAorCQkgICAgKDB4NSA8PCBFTkVUX1NFUkRFU19DVFJMX0VNUEhfMF9TSElGVCkgfAorCQkgICAgKDB4NSA8PCBFTkVUX1NFUkRFU19DVFJMX0VNUEhfMV9TSElGVCkgfAorCQkgICAgKDB4NSA8PCBFTkVUX1NFUkRFU19DVFJMX0VNUEhfMl9TSElGVCkgfAorCQkgICAgKDB4NSA8PCBFTkVUX1NFUkRFU19DVFJMX0VNUEhfM19TSElGVCkgfAorCQkgICAgKDB4MSA8PCBFTkVUX1NFUkRFU19DVFJMX0xBREpfMF9TSElGVCkgfAorCQkgICAgKDB4MSA8PCBFTkVUX1NFUkRFU19DVFJMX0xBREpfMV9TSElGVCkgfAorCQkgICAgKDB4MSA8PCBFTkVUX1NFUkRFU19DVFJMX0xBREpfMl9TSElGVCkgfAorCQkgICAgKDB4MSA8PCBFTkVUX1NFUkRFU19DVFJMX0xBREpfM19TSElGVCkpOworCXRlc3RfY2ZnX3ZhbCA9IDA7CisKKwlpZiAobHAtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfUEhZKSB7CisJCXRlc3RfY2ZnX3ZhbCB8PSAoKEVORVRfVEVTVF9NRF9QQURfTE9PUEJBQ0sgPDwKKwkJCQkgIEVORVRfU0VSREVTX1RFU1RfTURfMF9TSElGVCkgfAorCQkJCSAoRU5FVF9URVNUX01EX1BBRF9MT09QQkFDSyA8PAorCQkJCSAgRU5FVF9TRVJERVNfVEVTVF9NRF8xX1NISUZUKSB8CisJCQkJIChFTkVUX1RFU1RfTURfUEFEX0xPT1BCQUNLIDw8CisJCQkJICBFTkVUX1NFUkRFU19URVNUX01EXzJfU0hJRlQpIHwKKwkJCQkgKEVORVRfVEVTVF9NRF9QQURfTE9PUEJBQ0sgPDwKKwkJCQkgIEVORVRfU0VSREVTX1RFU1RfTURfM19TSElGVCkpOworCX0KKworCW53NjQoRU5FVF9TRVJERVNfUkVTRVQsIHJlc2V0X3ZhbCk7CisJbWRlbGF5KDIwKTsKKwl2YWxfcmQgPSBucjY0KEVORVRfU0VSREVTX1JFU0VUKTsKKwl2YWxfcmQgJj0gfnJlc2V0X3ZhbDsKKwludzY0KHBsbF9jZmcsIHZhbCk7CisJbnc2NChjdHJsX3JlZywgY3RybF92YWwpOworCW53NjQodGVzdF9jZmdfcmVnLCB0ZXN0X2NmZ192YWwpOworCW53NjQoRU5FVF9TRVJERVNfUkVTRVQsIHZhbF9yZCk7CisJbWRlbGF5KDIwMDApOworCisJLyogSW5pdGlhbGl6ZSBhbGwgNCBsYW5lcyBvZiB0aGUgU0VSREVTLiAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXUzMiByeHR4X2N0cmwsIGdsdWUwOworCisJCWVyciA9IGVzcl9yZWFkX3J4dHhfY3RybChucCwgaSwgJnJ4dHhfY3RybCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBlc3JfcmVhZF9nbHVlMChucCwgaSwgJmdsdWUwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcnh0eF9jdHJsICY9IH4oRVNSX1JYVFhfQ1RSTF9WTVVYTE8pOworCQlyeHR4X2N0cmwgfD0gKEVTUl9SWFRYX0NUUkxfRU5TVFJFVENIIHwKKwkJCSAgICAgICgyIDw8IEVTUl9SWFRYX0NUUkxfVk1VWExPX1NISUZUKSk7CisKKwkJZ2x1ZTAgJj0gfihFU1JfR0xVRV9DVFJMMF9TUkFURSB8CisJCQkgICBFU1JfR0xVRV9DVFJMMF9USENOVCB8CisJCQkgICBFU1JfR0xVRV9DVFJMMF9CTFRJTUUpOworCQlnbHVlMCB8PSAoRVNSX0dMVUVfQ1RSTDBfUlhMT1NFTkFCIHwKKwkJCSAgKDB4ZiA8PCBFU1JfR0xVRV9DVFJMMF9TUkFURV9TSElGVCkgfAorCQkJICAoMHhmZiA8PCBFU1JfR0xVRV9DVFJMMF9USENOVF9TSElGVCkgfAorCQkJICAoQkxUSU1FXzMwMF9DWUNMRVMgPDwKKwkJCSAgIEVTUl9HTFVFX0NUUkwwX0JMVElNRV9TSElGVCkpOworCisJCWVyciA9IGVzcl93cml0ZV9yeHR4X2N0cmwobnAsIGksIHJ4dHhfY3RybCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBlc3Jfd3JpdGVfZ2x1ZTAobnAsIGksIGdsdWUwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisKKwlzaWcgPSBucjY0KEVTUl9JTlRfU0lHTkFMUyk7CisJc3dpdGNoIChucC0+cG9ydCkgeworCWNhc2UgMDoKKwkJdmFsID0gKEVTUl9JTlRfU1JEWTBfUDAgfCBFU1JfSU5UX0RFVDBfUDApOworCQltYXNrID0gdmFsOworCQlicmVhazsKKworCWNhc2UgMToKKwkJdmFsID0gKEVTUl9JTlRfU1JEWTBfUDEgfCBFU1JfSU5UX0RFVDBfUDEpOworCQltYXNrID0gdmFsOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoc2lnICYgbWFzaykgIT0gdmFsKSB7CisJCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IHNpZ25hbCBiaXRzIFslMDh4XSBhcmUgbm90ICIKKwkJCSJbJTA4eF1cbiIsIG5wLT5wb3J0LCAoaW50KSAoc2lnICYgbWFzayksIChpbnQpIHZhbCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnX3NlcmRlcyhzdHJ1Y3Qgbml1ICpucCwgaW50ICpsaW5rX3VwX3ApCit7CisJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOworCWludCBsaW5rX3VwOworCXU2NCB2YWw7CisJdTE2IGN1cnJlbnRfc3BlZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBjdXJyZW50X2R1cGxleDsKKworCWxpbmtfdXAgPSAwOworCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF9JTlZBTElEOworCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IG5yNjRfcGNzKFBDU19NSUlfU1RBVCk7CisKKwlpZiAodmFsICYgUENTX01JSV9TVEFUX0xJTktfU1RBVFVTKSB7CisJCWxpbmtfdXAgPSAxOworCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTAwMDsKKwkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9CisKKwlscC0+YWN0aXZlX3NwZWVkID0gY3VycmVudF9zcGVlZDsKKwlscC0+YWN0aXZlX2R1cGxleCA9IGN1cnJlbnRfZHVwbGV4OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwkqbGlua191cF9wID0gbGlua191cDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzEwZ19zZXJkZXMoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOworCWludCBsaW5rX3VwID0gMDsKKwlpbnQgbGlua19vayA9IDE7CisJdTY0IHZhbCwgdmFsMjsKKwl1MTYgY3VycmVudF9zcGVlZDsKKwl1OCBjdXJyZW50X2R1cGxleDsKKworCWlmICghKG5wLT5mbGFncyAmIE5JVV9GTEFHU18xMEcpKQorCQlyZXR1cm4gbGlua19zdGF0dXNfMWdfc2VyZGVzKG5wLCBsaW5rX3VwX3ApOworCisJY3VycmVudF9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IG5yNjRfeHBjcyhYUENTX1NUQVRVUygwKSk7CisJdmFsMiA9IG5yNjRfbWFjKFhNQUNfSU5URVIyKTsKKwlpZiAodmFsMiAmIDB4MDEwMDAwMDApCisJCWxpbmtfb2sgPSAwOworCisJaWYgKCh2YWwgJiAweDEwMDBVTEwpICYmIGxpbmtfb2spIHsKKwkJbGlua191cCA9IDE7CisJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9CisJbHAtPmFjdGl2ZV9zcGVlZCA9IGN1cnJlbnRfc3BlZWQ7CisJbHAtPmFjdGl2ZV9kdXBsZXggPSBjdXJyZW50X2R1cGxleDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCSpsaW5rX3VwX3AgPSBsaW5rX3VwOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgbGlua19zdGF0dXNfMWdfcmdtaWkoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQoreworCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKKwl1MTYgY3VycmVudF9zcGVlZCwgYm1zcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGN1cnJlbnRfZHVwbGV4OworCWludCBlcnIsIGxpbmtfdXA7CisKKwlsaW5rX3VwID0gMDsKKwljdXJyZW50X3NwZWVkID0gU1BFRURfSU5WQUxJRDsKKwljdXJyZW50X2R1cGxleCA9IERVUExFWF9JTlZBTElEOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwllcnIgPSAtRUlOVkFMOworCisJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWJtc3IgPSBlcnI7CisJaWYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpIHsKKwkJdTE2IGFkdiwgbHBhLCBjb21tb24sIGVzdGF0OworCisJCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCQlhZHYgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0xQQSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJCWxwYSA9IGVycjsKKworCQljb21tb24gPSBhZHYgJiBscGE7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0VTVEFUVVMpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCQllc3RhdCA9IGVycjsKKwkJbGlua191cCA9IDE7CisJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDAwOworCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOworCisJfQorCWxwLT5hY3RpdmVfc3BlZWQgPSBjdXJyZW50X3NwZWVkOworCWxwLT5hY3RpdmVfZHVwbGV4ID0gY3VycmVudF9kdXBsZXg7CisJZXJyID0gMDsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwkqbGlua191cF9wID0gbGlua191cDsKKwlyZXR1cm4gZXJyOworfQorCisKIHN0YXRpYyBpbnQgYmNtODcwNF9yZXNldChzdHJ1Y3Qgbml1ICpucCkKIHsKIAlpbnQgZXJyLCBsaW1pdDsKQEAgLTEwMjIsNiArMTI2OSw2OSBAQAogCXJldHVybiAwOwogfQogCisKKworc3RhdGljIGludCB4Y3ZyX2luaXRfMWdfcmdtaWkoc3RydWN0IG5pdSAqbnApCit7CisJaW50IGVycjsKKwl1NjQgdmFsOworCXUxNiBibWNyLCBibXNyLCBlc3RhdDsKKworCXZhbCA9IG5yNjQoTUlGX0NPTkZJRyk7CisJdmFsICY9IH5NSUZfQ09ORklHX0lORElSRUNUX01PREU7CisJbnc2NChNSUZfQ09ORklHLCB2YWwpOworCisJZXJyID0gbWlpX3Jlc2V0KG5wKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWJtc3IgPSBlcnI7CisKKwllc3RhdCA9IDA7CisJaWYgKGJtc3IgJiBCTVNSX0VTVEFURU4pIHsKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0VTVEFUVVMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVzdGF0ID0gZXJyOworCX0KKworCWJtY3IgPSAwOworCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChibXNyICYgQk1TUl9FU1RBVEVOKSB7CisJCXUxNiBjdHJsMTAwMCA9IDA7CisKKwkJaWYgKGVzdGF0ICYgRVNUQVRVU18xMDAwX1RGVUxMKQorCQkJY3RybDEwMDAgfD0gQURWRVJUSVNFXzEwMDBGVUxMOworCQllcnIgPSBtaWlfd3JpdGUobnAsIG5wLT5waHlfYWRkciwgTUlJX0NUUkwxMDAwLCBjdHJsMTAwMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWJtY3IgPSAoQk1DUl9TUEVFRDEwMDAgfCBCTUNSX0ZVTExEUExYKTsKKworCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlibWNyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNQ1IpOworCisJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludCBtaWlfaW5pdF9jb21tb24oc3RydWN0IG5pdSAqbnApCiB7CiAJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOwpAQCAtMTQyOSw2ICsxNzM5LDE2IEBACiAJYWRkX3RpbWVyKCZucC0+dGltZXIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5pdV9waHlfb3BzIHBoeV9vcHNfMTBnX3NlcmRlcyA9IHsKKwkuc2VyZGVzX2luaXQJCT0gc2VyZGVzX2luaXRfMTBnX3NlcmRlcywKKwkubGlua19zdGF0dXMJCT0gbGlua19zdGF0dXNfMTBnX3NlcmRlcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgbml1X3BoeV9vcHMgcGh5X29wc18xZ19yZ21paSA9IHsKKwkueGN2cl9pbml0CQk9IHhjdnJfaW5pdF8xZ19yZ21paSwKKwkubGlua19zdGF0dXMJCT0gbGlua19zdGF0dXNfMWdfcmdtaWksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5pdV9waHlfb3BzIHBoeV9vcHNfMTBnX2ZpYmVyX25pdSA9IHsKIAkuc2VyZGVzX2luaXQJCT0gc2VyZGVzX2luaXRfbml1LAogCS54Y3ZyX2luaXQJCT0geGN2cl9pbml0XzEwZywKQEAgLTE0ODcsNiArMTgwNywxNTIgQEAKIAkucGh5X2FkZHJfYmFzZQk9IDAsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5pdV9waHlfdGVtcGxhdGUgcGh5X3RlbXBsYXRlXzFnX3JnbWlpID0geworCS5vcHMJCT0gJnBoeV9vcHNfMWdfcmdtaWksCisJLnBoeV9hZGRyX2Jhc2UJPSAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaXVfcGh5X3RlbXBsYXRlIHBoeV90ZW1wbGF0ZV8xMGdfc2VyZGVzID0geworCS5vcHMJCT0gJnBoeV9vcHNfMTBnX3NlcmRlcywKKwkucGh5X2FkZHJfYmFzZQk9IDAsCit9OworCitzdGF0aWMgaW50IG5pdV9hdGNhX3BvcnRfbnVtWzRdID0geworCTAsIDAsICAxMSwgMTAKK307CisKK3N0YXRpYyBpbnQgc2VyZGVzX2luaXRfMTBnX3NlcmRlcyhzdHJ1Y3Qgbml1ICpucCkKK3sKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZywgdGVzdF9jZmdfcmVnLCBwbGxfY2ZnLCBpOworCXU2NCBjdHJsX3ZhbCwgdGVzdF9jZmdfdmFsLCBzaWcsIG1hc2ssIHZhbDsKKwlpbnQgZXJyOworCXU2NCByZXNldF92YWw7CisKKwlzd2l0Y2ggKG5wLT5wb3J0KSB7CisJY2FzZSAwOgorCQlyZXNldF92YWwgPSAgRU5FVF9TRVJERVNfUkVTRVRfMDsKKwkJY3RybF9yZWcgPSBFTkVUX1NFUkRFU18wX0NUUkxfQ0ZHOworCQl0ZXN0X2NmZ19yZWcgPSBFTkVUX1NFUkRFU18wX1RFU1RfQ0ZHOworCQlwbGxfY2ZnID0gRU5FVF9TRVJERVNfMF9QTExfQ0ZHOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlc2V0X3ZhbCA9ICBFTkVUX1NFUkRFU19SRVNFVF8xOworCQljdHJsX3JlZyA9IEVORVRfU0VSREVTXzFfQ1RSTF9DRkc7CisJCXRlc3RfY2ZnX3JlZyA9IEVORVRfU0VSREVTXzFfVEVTVF9DRkc7CisJCXBsbF9jZmcgPSBFTkVUX1NFUkRFU18xX1BMTF9DRkc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWN0cmxfdmFsID0gKEVORVRfU0VSREVTX0NUUkxfU0RFVF8wIHwKKwkJICAgIEVORVRfU0VSREVTX0NUUkxfU0RFVF8xIHwKKwkJICAgIEVORVRfU0VSREVTX0NUUkxfU0RFVF8yIHwKKwkJICAgIEVORVRfU0VSREVTX0NUUkxfU0RFVF8zIHwKKwkJICAgICgweDUgPDwgRU5FVF9TRVJERVNfQ1RSTF9FTVBIXzBfU0hJRlQpIHwKKwkJICAgICgweDUgPDwgRU5FVF9TRVJERVNfQ1RSTF9FTVBIXzFfU0hJRlQpIHwKKwkJICAgICgweDUgPDwgRU5FVF9TRVJERVNfQ1RSTF9FTVBIXzJfU0hJRlQpIHwKKwkJICAgICgweDUgPDwgRU5FVF9TRVJERVNfQ1RSTF9FTVBIXzNfU0hJRlQpIHwKKwkJICAgICgweDEgPDwgRU5FVF9TRVJERVNfQ1RSTF9MQURKXzBfU0hJRlQpIHwKKwkJICAgICgweDEgPDwgRU5FVF9TRVJERVNfQ1RSTF9MQURKXzFfU0hJRlQpIHwKKwkJICAgICgweDEgPDwgRU5FVF9TRVJERVNfQ1RSTF9MQURKXzJfU0hJRlQpIHwKKwkJICAgICgweDEgPDwgRU5FVF9TRVJERVNfQ1RSTF9MQURKXzNfU0hJRlQpKTsKKwl0ZXN0X2NmZ192YWwgPSAwOworCisJaWYgKGxwLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1BIWSkgeworCQl0ZXN0X2NmZ192YWwgfD0gKChFTkVUX1RFU1RfTURfUEFEX0xPT1BCQUNLIDw8CisJCQkJICBFTkVUX1NFUkRFU19URVNUX01EXzBfU0hJRlQpIHwKKwkJCQkgKEVORVRfVEVTVF9NRF9QQURfTE9PUEJBQ0sgPDwKKwkJCQkgIEVORVRfU0VSREVTX1RFU1RfTURfMV9TSElGVCkgfAorCQkJCSAoRU5FVF9URVNUX01EX1BBRF9MT09QQkFDSyA8PAorCQkJCSAgRU5FVF9TRVJERVNfVEVTVF9NRF8yX1NISUZUKSB8CisJCQkJIChFTkVUX1RFU1RfTURfUEFEX0xPT1BCQUNLIDw8CisJCQkJICBFTkVUX1NFUkRFU19URVNUX01EXzNfU0hJRlQpKTsKKwl9CisKKwllc3JfcmVzZXQobnApOworCW53NjQocGxsX2NmZywgRU5FVF9TRVJERVNfUExMX0ZCRElWMik7CisJbnc2NChjdHJsX3JlZywgY3RybF92YWwpOworCW53NjQodGVzdF9jZmdfcmVnLCB0ZXN0X2NmZ192YWwpOworCisJLyogSW5pdGlhbGl6ZSBhbGwgNCBsYW5lcyBvZiB0aGUgU0VSREVTLiAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXUzMiByeHR4X2N0cmwsIGdsdWUwOworCisJCWVyciA9IGVzcl9yZWFkX3J4dHhfY3RybChucCwgaSwgJnJ4dHhfY3RybCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBlc3JfcmVhZF9nbHVlMChucCwgaSwgJmdsdWUwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcnh0eF9jdHJsICY9IH4oRVNSX1JYVFhfQ1RSTF9WTVVYTE8pOworCQlyeHR4X2N0cmwgfD0gKEVTUl9SWFRYX0NUUkxfRU5TVFJFVENIIHwKKwkJCSAgICAgICgyIDw8IEVTUl9SWFRYX0NUUkxfVk1VWExPX1NISUZUKSk7CisKKwkJZ2x1ZTAgJj0gfihFU1JfR0xVRV9DVFJMMF9TUkFURSB8CisJCQkgICBFU1JfR0xVRV9DVFJMMF9USENOVCB8CisJCQkgICBFU1JfR0xVRV9DVFJMMF9CTFRJTUUpOworCQlnbHVlMCB8PSAoRVNSX0dMVUVfQ1RSTDBfUlhMT1NFTkFCIHwKKwkJCSAgKDB4ZiA8PCBFU1JfR0xVRV9DVFJMMF9TUkFURV9TSElGVCkgfAorCQkJICAoMHhmZiA8PCBFU1JfR0xVRV9DVFJMMF9USENOVF9TSElGVCkgfAorCQkJICAoQkxUSU1FXzMwMF9DWUNMRVMgPDwKKwkJCSAgIEVTUl9HTFVFX0NUUkwwX0JMVElNRV9TSElGVCkpOworCisJCWVyciA9IGVzcl93cml0ZV9yeHR4X2N0cmwobnAsIGksIHJ4dHhfY3RybCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBlc3Jfd3JpdGVfZ2x1ZTAobnAsIGksIGdsdWUwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisKKwlzaWcgPSBucjY0KEVTUl9JTlRfU0lHTkFMUyk7CisJc3dpdGNoIChucC0+cG9ydCkgeworCWNhc2UgMDoKKwkJbWFzayA9IEVTUl9JTlRfU0lHTkFMU19QMF9CSVRTOworCQl2YWwgPSAoRVNSX0lOVF9TUkRZMF9QMCB8CisJCSAgICAgICBFU1JfSU5UX0RFVDBfUDAgfAorCQkgICAgICAgRVNSX0lOVF9YU1JEWV9QMCB8CisJCSAgICAgICBFU1JfSU5UX1hEUF9QMF9DSDMgfAorCQkgICAgICAgRVNSX0lOVF9YRFBfUDBfQ0gyIHwKKwkJICAgICAgIEVTUl9JTlRfWERQX1AwX0NIMSB8CisJCSAgICAgICBFU1JfSU5UX1hEUF9QMF9DSDApOworCQlicmVhazsKKworCWNhc2UgMToKKwkJbWFzayA9IEVTUl9JTlRfU0lHTkFMU19QMV9CSVRTOworCQl2YWwgPSAoRVNSX0lOVF9TUkRZMF9QMSB8CisJCSAgICAgICBFU1JfSU5UX0RFVDBfUDEgfAorCQkgICAgICAgRVNSX0lOVF9YU1JEWV9QMSB8CisJCSAgICAgICBFU1JfSU5UX1hEUF9QMV9DSDMgfAorCQkgICAgICAgRVNSX0lOVF9YRFBfUDFfQ0gyIHwKKwkJICAgICAgIEVTUl9JTlRfWERQX1AxX0NIMSB8CisJCSAgICAgICBFU1JfSU5UX1hEUF9QMV9DSDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoc2lnICYgbWFzaykgIT0gdmFsKSB7CisJCWludCBlcnI7CisJCWVyciA9IHNlcmRlc19pbml0XzFnX3NlcmRlcyhucCk7CisJCWlmICghZXJyKSB7CisJCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU18xMEc7CisJCQlucC0+bWFjX3hjdnIgPSBNQUNfWENWUl9QQ1M7CisJCX0gIGVsc2UgeworCQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlBvcnQgJXUgMTBHLzFHIFNFUkRFUyBMaW5rIEZhaWxlZCBcbiIsCisJCQkgbnAtPnBvcnQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBuaXVfZGV0ZXJtaW5lX3BoeV9kaXNwb3NpdGlvbihzdHJ1Y3Qgbml1ICpucCkKIHsKIAlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKQEAgLTE0OTgsNyArMTk2NCwxMCBAQAogCQl0cCA9ICZwaHlfdGVtcGxhdGVfbml1OwogCQlwaHlfYWRkcl9vZmYgKz0gbnAtPnBvcnQ7CiAJfSBlbHNlIHsKLQkJc3dpdGNoIChucC0+ZmxhZ3MgJiAoTklVX0ZMQUdTXzEwRyB8IE5JVV9GTEFHU19GSUJFUikpIHsKKwkJc3dpdGNoIChucC0+ZmxhZ3MgJgorCQkJKE5JVV9GTEFHU18xMEcgfAorCQkJIE5JVV9GTEFHU19GSUJFUiB8CisJCQkgTklVX0ZMQUdTX1hDVlJfU0VSREVTKSkgewogCQljYXNlIDA6CiAJCQkvKiAxRyBjb3BwZXIgKi8KIAkJCXRwID0gJnBoeV90ZW1wbGF0ZV8xZ19jb3BwZXI7CkBAIC0xNTI5LDYgKzE5OTgsMjUgQEAKIAkJCXBoeV9hZGRyX29mZiArPSBucC0+cG9ydDsKIAkJCWJyZWFrOwogCisJCWNhc2UgTklVX0ZMQUdTXzEwRyB8IE5JVV9GTEFHU19YQ1ZSX1NFUkRFUzoKKwkJY2FzZSBOSVVfRkxBR1NfWENWUl9TRVJERVMgfCBOSVVfRkxBR1NfRklCRVI6CisJCWNhc2UgTklVX0ZMQUdTX1hDVlJfU0VSREVTOgorCQkJc3dpdGNoKG5wLT5wb3J0KSB7CisJCQljYXNlIDA6CisJCQljYXNlIDE6CisJCQkJdHAgPSAmcGh5X3RlbXBsYXRlXzEwZ19zZXJkZXM7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQljYXNlIDM6CisJCQkJdHAgPSAmcGh5X3RlbXBsYXRlXzFnX3JnbWlpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBoeV9hZGRyX29mZiA9IG5pdV9hdGNhX3BvcnRfbnVtW25wLT5wb3J0XTsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTYxNiwxMiArMjEwNCwxMyBAQAogCWlmIChpbmRleCA+PSBuaXVfbnVtX2FsdF9hZGRyKG5wKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobnAtPmZsYWdzICYgTklVX0ZMQUdTX1hNQUMpCisJaWYgKG5wLT5mbGFncyAmIE5JVV9GTEFHU19YTUFDKSB7CiAJCXJlZyA9IFhNQUNfQUREUl9DTVBFTjsKLQllbHNlCisJCW1hc2sgPSAxIDw8IGluZGV4OworCX0gZWxzZSB7CiAJCXJlZyA9IEJNQUNfQUREUl9DTVBFTjsKLQotCW1hc2sgPSAxIDw8IGluZGV4OworCQltYXNrID0gMSA8PCAoaW5kZXggKyAxKTsKKwl9CiAKIAl2YWwgPSBucjY0X21hYyhyZWcpOwogCWlmIChvbikKQEAgLTQxMzgsNiArNDYyNywxMiBAQAogCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKIAl1NjQgdmFsOwogCisJaWYgKG5wLT5mbGFncyAmIE5JVV9GTEFHU19YQ1ZSX1NFUkRFUykgeworCQl2YWwgPSBucjY0KE1JRl9DT05GSUcpOworCQl2YWwgfD0gTUlGX0NPTkZJR19BVENBX0dFOworCQludzY0KE1JRl9DT05GSUcsIHZhbCk7CisJfQorCiAJdmFsID0gbnI2NF9tYWMoWE1BQ19DT05GSUcpOwogCXZhbCAmPSB+WE1BQ19DT05GSUdfU0VMX1BPUl9DTEtfU1JDOwogCkBAIC00MTU0LDcgKzQ2NDksOCBAQAogCQl2YWwgJj0gflhNQUNfQ09ORklHX0xGU19ESVNBQkxFOwogCX0gZWxzZSB7CiAJCXZhbCB8PSBYTUFDX0NPTkZJR19MRlNfRElTQUJMRTsKLQkJaWYgKCEobnAtPmZsYWdzICYgTklVX0ZMQUdTX0ZJQkVSKSkKKwkJaWYgKCEobnAtPmZsYWdzICYgTklVX0ZMQUdTX0ZJQkVSKSAmJgorCQkgICAgIShucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfWENWUl9TRVJERVMpKQogCQkJdmFsIHw9IFhNQUNfQ09ORklHXzFHX1BDU19CWVBBU1M7CiAJCWVsc2UKIAkJCXZhbCAmPSB+WE1BQ19DT05GSUdfMUdfUENTX0JZUEFTUzsKQEAgLTQyMjMsMTYgKzQ3MTksMjYgQEAKIAogc3RhdGljIHZvaWQgbml1X3Bjc19taWlfcmVzZXQoc3RydWN0IG5pdSAqbnApCiB7CisJaW50IGxpbWl0ID0gMTAwMDsKIAl1NjQgdmFsID0gbnI2NF9wY3MoUENTX01JSV9DVEwpOwogCXZhbCB8PSBQQ1NfTUlJX0NUTF9SU1Q7CiAJbnc2NF9wY3MoUENTX01JSV9DVEwsIHZhbCk7CisJd2hpbGUgKCgtLWxpbWl0ID49IDApICYmICh2YWwgJiBQQ1NfTUlJX0NUTF9SU1QpKSB7CisJCXVkZWxheSgxMDApOworCQl2YWwgPSBucjY0X3BjcyhQQ1NfTUlJX0NUTCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBuaXVfeHBjc19yZXNldChzdHJ1Y3Qgbml1ICpucCkKIHsKKwlpbnQgbGltaXQgPSAxMDAwOwogCXU2NCB2YWwgPSBucjY0X3hwY3MoWFBDU19DT05UUk9MMSk7CiAJdmFsIHw9IFhQQ1NfQ09OVFJPTDFfUkVTRVQ7CiAJbnc2NF94cGNzKFhQQ1NfQ09OVFJPTDEsIHZhbCk7CisJd2hpbGUgKCgtLWxpbWl0ID49IDApICYmICh2YWwgJiBYUENTX0NPTlRST0wxX1JFU0VUKSkgeworCQl1ZGVsYXkoMTAwKTsKKwkJdmFsID0gbnI2NF94cGNzKFhQQ1NfQ09OVFJPTDEpOworCX0KIH0KIAogc3RhdGljIGludCBuaXVfaW5pdF9wY3Moc3RydWN0IG5pdSAqbnApCkBAIC00MjQwLDcgKzQ3NDYsOSBAQAogCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKIAl1NjQgdmFsOwogCi0Jc3dpdGNoIChucC0+ZmxhZ3MgJiAoTklVX0ZMQUdTXzEwRyB8IE5JVV9GTEFHU19GSUJFUikpIHsKKwlzd2l0Y2ggKG5wLT5mbGFncyAmIChOSVVfRkxBR1NfMTBHIHwKKwkJCSAgICAgTklVX0ZMQUdTX0ZJQkVSIHwKKwkJCSAgICAgTklVX0ZMQUdTX1hDVlJfU0VSREVTKSkgewogCWNhc2UgTklVX0ZMQUdTX0ZJQkVSOgogCQkvKiAxRyBmaWJlciAqLwogCQludzY0X3BjcyhQQ1NfQ09ORiwgUENTX0NPTkZfTUFTSyB8IFBDU19DT05GX0VOQUJMRSk7CkBAIC00MjUwLDYgKzQ3NTgsOCBAQAogCiAJY2FzZSBOSVVfRkxBR1NfMTBHOgogCWNhc2UgTklVX0ZMQUdTXzEwRyB8IE5JVV9GTEFHU19GSUJFUjoKKwljYXNlIE5JVV9GTEFHU18xMEcgfCBOSVVfRkxBR1NfWENWUl9TRVJERVM6CisJCS8qIDEwRyBTRVJERVMgKi8KIAkJaWYgKCEobnAtPmZsYWdzICYgTklVX0ZMQUdTX1hNQUMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTQyNzIsOCArNDc4MiwxOCBAQAogCQkodm9pZCkgbnI2NF94cGNzKFhQQ1NfU1lNRVJSX0NOVDIzKTsKIAkJYnJlYWs7CiAKKworCWNhc2UgTklVX0ZMQUdTX1hDVlJfU0VSREVTOgorCQkvKiAxRyBTRVJERVMgKi8KKwkJbml1X3Bjc19taWlfcmVzZXQobnApOworCQludzY0X3BjcyhQQ1NfQ09ORiwgUENTX0NPTkZfTUFTSyB8IFBDU19DT05GX0VOQUJMRSk7CisJCW53NjRfcGNzKFBDU19EUEFUSF9NT0RFLCAwKTsKKwkJYnJlYWs7CisKIAljYXNlIDA6CiAJCS8qIDFHIGNvcHBlciAqLworCWNhc2UgTklVX0ZMQUdTX1hDVlJfU0VSREVTIHwgTklVX0ZMQUdTX0ZJQkVSOgorCQkvKiAxRyBSR01JSSBGSUJFUiAqLwogCQludzY0X3BjcyhQQ1NfRFBBVEhfTU9ERSwgUENTX0RQQVRIX01PREVfTUlJKTsKIAkJbml1X3Bjc19taWlfcmVzZXQobnApOwogCQlicmVhazsKQEAgLTUxNDcsNyArNTY2NywxMiBAQAogCQkJaW5kZXgrKzsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBuaXVfbnVtX2FsdF9hZGRyKG5wKTsgaSsrKSB7CisJCWludCBhbHRfc3RhcnQ7CisJCWlmIChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfWE1BQykKKwkJCWFsdF9zdGFydCA9IDA7CisJCWVsc2UKKwkJCWFsdF9zdGFydCA9IDE7CisJCWZvciAoaSA9IGFsdF9zdGFydDsgaSA8IG5pdV9udW1fYWx0X2FkZHIobnApOyBpKyspIHsKIAkJCWVyciA9IG5pdV9lbmFibGVfYWx0X21hYyhucCwgaSwgMCk7CiAJCQlpZiAoZXJyKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogRXJyb3IgJWQgIgpAQCAtNjI2Miw3ICs2Nzg3LDE5IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAobml1X3BoeV90eXBlX3Byb3BfZGVjb2RlKG5wLCBucC0+dnBkLnBoeV90eXBlKSkgeworCWlmICghc3RyY21wKG5wLT52cGQubW9kZWwsICJTVU5XLENQMzIyMCIpIHx8CisJICAgICFzdHJjbXAobnAtPnZwZC5tb2RlbCwgIlNVTlcsQ1AzMjYwIikpIHsKKwkJbnAtPmZsYWdzIHw9IE5JVV9GTEFHU18xMEc7CisJCW5wLT5mbGFncyAmPSB+TklVX0ZMQUdTX0ZJQkVSOworCQlucC0+ZmxhZ3MgfD0gTklVX0ZMQUdTX1hDVlJfU0VSREVTOworCQlucC0+bWFjX3hjdnIgPSBNQUNfWENWUl9QQ1M7CisJCWlmIChucC0+cG9ydCA+IDEpIHsKKwkJCW5wLT5mbGFncyB8PSBOSVVfRkxBR1NfRklCRVI7CisJCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU18xMEc7CisJCX0KKwkJaWYgKG5wLT5mbGFncyAmIE5JVV9GTEFHU18xMEcpCisJCQkgbnAtPm1hY194Y3ZyID0gTUFDX1hDVlJfWFBDUzsKKwl9IGVsc2UgaWYgKG5pdV9waHlfdHlwZV9wcm9wX2RlY29kZShucCwgbnAtPnZwZC5waHlfdHlwZSkpIHsKIAkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIklsbGVnYWwgcGh5IHN0cmluZyBbJXNdLlxuIiwKIAkJCW5wLT52cGQucGh5X3R5cGUpOwogCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiRmFsbGluZyBiYWNrIHRvIFNQUk9NLlxuIik7CkBAIC02NzI1LDgwICs3MjYyLDkzIEBACiAJdTMyIHZhbDsKIAlpbnQgZXJyOwogCi0JZXJyID0gZmlsbF9waHlfcHJvYmVfaW5mbyhucCwgcGFyZW50LCBpbmZvKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwogCi0JbnVtXzEwZyA9IGNvdW50XzEwZ19wb3J0cyhpbmZvLCAmbG93ZXN0XzEwZyk7Ci0JbnVtXzFnID0gY291bnRfMWdfcG9ydHMoaW5mbywgJmxvd2VzdF8xZyk7Ci0KLQlzd2l0Y2ggKChudW1fMTBnIDw8IDQpIHwgbnVtXzFnKSB7Ci0JY2FzZSAweDI0OgotCQlpZiAobG93ZXN0XzFnID09IDEwKQotCQkJcGFyZW50LT5wbGF0X3R5cGUgPSBQTEFUX1RZUEVfVkZfUDA7Ci0JCWVsc2UgaWYgKGxvd2VzdF8xZyA9PSAyNikKLQkJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX1ZGX1AxOwotCQllbHNlCi0JCQlnb3RvIHVua25vd25fdmdfMWdfcG9ydDsKLQotCQkvKiBmYWxsdGhydSAqLwotCWNhc2UgMHgyMjoKLQkJdmFsID0gKHBoeV9lbmNvZGUoUE9SVF9UWVBFXzEwRywgMCkgfAotCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMTBHLCAxKSB8Ci0JCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMikgfAotCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDMpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4MjA6Ci0JCXZhbCA9IChwaHlfZW5jb2RlKFBPUlRfVFlQRV8xMEcsIDApIHwKLQkJICAgICAgIHBoeV9lbmNvZGUoUE9SVF9UWVBFXzEwRywgMSkpOwotCQlicmVhazsKLQotCWNhc2UgMHgxMDoKLQkJdmFsID0gcGh5X2VuY29kZShQT1JUX1RZUEVfMTBHLCBucC0+cG9ydCk7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDE0OgotCQlpZiAobG93ZXN0XzFnID09IDEwKQotCQkJcGFyZW50LT5wbGF0X3R5cGUgPSBQTEFUX1RZUEVfVkZfUDA7Ci0JCWVsc2UgaWYgKGxvd2VzdF8xZyA9PSAyNikKLQkJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX1ZGX1AxOwotCQllbHNlCi0JCQlnb3RvIHVua25vd25fdmdfMWdfcG9ydDsKLQotCQkvKiBmYWxsdGhydSAqLwotCWNhc2UgMHgxMzoKLQkJaWYgKChsb3dlc3RfMTBnICYgMHg3KSA9PSAwKQotCQkJdmFsID0gKHBoeV9lbmNvZGUoUE9SVF9UWVBFXzEwRywgMCkgfAotCQkJICAgICAgIHBoeV9lbmNvZGUoUE9SVF9UWVBFXzFHLCAxKSB8Ci0JCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDIpIHwKLQkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMykpOwotCQllbHNlCi0JCQl2YWwgPSAocGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDApIHwKLQkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xMEcsIDEpIHwKLQkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMikgfAotCQkJICAgICAgIHBoeV9lbmNvZGUoUE9SVF9UWVBFXzFHLCAzKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSAweDA0OgotCQlpZiAobG93ZXN0XzFnID09IDEwKQotCQkJcGFyZW50LT5wbGF0X3R5cGUgPSBQTEFUX1RZUEVfVkZfUDA7Ci0JCWVsc2UgaWYgKGxvd2VzdF8xZyA9PSAyNikKLQkJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX1ZGX1AxOwotCQllbHNlCi0JCQlnb3RvIHVua25vd25fdmdfMWdfcG9ydDsKLQorCWlmICghc3RyY21wKG5wLT52cGQubW9kZWwsICJTVU5XLENQMzIyMCIpIHx8CisJICAgICFzdHJjbXAobnAtPnZwZC5tb2RlbCwgIlNVTlcsQ1AzMjYwIikpIHsKKwkJbnVtXzEwZyA9IDA7CisJCW51bV8xZyA9IDI7CisJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX0FUQ0FfQ1AzMjIwOworCQlwYXJlbnQtPm51bV9wb3J0cyA9IDQ7CiAJCXZhbCA9IChwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMCkgfAogCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDEpIHwKIAkJICAgICAgIHBoeV9lbmNvZGUoUE9SVF9UWVBFXzFHLCAyKSB8CiAJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMykpOwotCQlicmVhazsKKwl9IGVsc2UgeworCQllcnIgPSBmaWxsX3BoeV9wcm9iZV9pbmZvKG5wLCBwYXJlbnQsIGluZm8pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlVuc3VwcG9ydGVkIHBvcnQgY29uZmlnICIKLQkJICAgICAgICIxMEdbJWRdIDFHWyVkXVxuIiwKLQkJICAgICAgIG51bV8xMGcsIG51bV8xZyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQludW1fMTBnID0gY291bnRfMTBnX3BvcnRzKGluZm8sICZsb3dlc3RfMTBnKTsKKwkJbnVtXzFnID0gY291bnRfMWdfcG9ydHMoaW5mbywgJmxvd2VzdF8xZyk7CisKKwkJc3dpdGNoICgobnVtXzEwZyA8PCA0KSB8IG51bV8xZykgeworCQljYXNlIDB4MjQ6CisJCQlpZiAobG93ZXN0XzFnID09IDEwKQorCQkJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX1ZGX1AwOworCQkJZWxzZSBpZiAobG93ZXN0XzFnID09IDI2KQorCQkJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX1ZGX1AxOworCQkJZWxzZQorCQkJCWdvdG8gdW5rbm93bl92Z18xZ19wb3J0OworCisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIDB4MjI6CisJCQl2YWwgPSAocGh5X2VuY29kZShQT1JUX1RZUEVfMTBHLCAwKSB8CisJCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMTBHLCAxKSB8CisJCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDIpIHwKKwkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMykpOworCQkJYnJlYWs7CisKKwkJY2FzZSAweDIwOgorCQkJdmFsID0gKHBoeV9lbmNvZGUoUE9SVF9UWVBFXzEwRywgMCkgfAorCQkJICAgICAgIHBoeV9lbmNvZGUoUE9SVF9UWVBFXzEwRywgMSkpOworCQkJYnJlYWs7CisKKwkJY2FzZSAweDEwOgorCQkJdmFsID0gcGh5X2VuY29kZShQT1JUX1RZUEVfMTBHLCBucC0+cG9ydCk7CisJCQlicmVhazsKKworCQljYXNlIDB4MTQ6CisJCQlpZiAobG93ZXN0XzFnID09IDEwKQorCQkJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX1ZGX1AwOworCQkJZWxzZSBpZiAobG93ZXN0XzFnID09IDI2KQorCQkJCXBhcmVudC0+cGxhdF90eXBlID0gUExBVF9UWVBFX1ZGX1AxOworCQkJZWxzZQorCQkJCWdvdG8gdW5rbm93bl92Z18xZ19wb3J0OworCisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIDB4MTM6CisJCQlpZiAoKGxvd2VzdF8xMGcgJiAweDcpID09IDApCisJCQkJdmFsID0gKHBoeV9lbmNvZGUoUE9SVF9UWVBFXzEwRywgMCkgfAorCQkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMSkgfAorCQkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMikgfAorCQkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMykpOworCQkJZWxzZQorCQkJCXZhbCA9IChwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMCkgfAorCQkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xMEcsIDEpIHwKKwkJCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDIpIHwKKwkJCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDMpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgwNDoKKwkJCWlmIChsb3dlc3RfMWcgPT0gMTApCisJCQkJcGFyZW50LT5wbGF0X3R5cGUgPSBQTEFUX1RZUEVfVkZfUDA7CisJCQllbHNlIGlmIChsb3dlc3RfMWcgPT0gMjYpCisJCQkJcGFyZW50LT5wbGF0X3R5cGUgPSBQTEFUX1RZUEVfVkZfUDE7CisJCQllbHNlCisJCQkJZ290byB1bmtub3duX3ZnXzFnX3BvcnQ7CisKKwkJCXZhbCA9IChwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMCkgfAorCQkJICAgICAgIHBoeV9lbmNvZGUoUE9SVF9UWVBFXzFHLCAxKSB8CisJCQkgICAgICAgcGh5X2VuY29kZShQT1JUX1RZUEVfMUcsIDIpIHwKKwkJCSAgICAgICBwaHlfZW5jb2RlKFBPUlRfVFlQRV8xRywgMykpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuc3VwcG9ydGVkIHBvcnQgY29uZmlnICIKKwkJCSAgICAgICAiMTBHWyVkXSAxR1slZF1cbiIsCisJCQkgICAgICAgbnVtXzEwZywgbnVtXzFnKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCiAJcGFyZW50LT5wb3J0X3BoeSA9IHZhbDsKQEAgLTc1OTMsMTQgKzgxNDMsMjUgQEAKIAlwcl9pbmZvKCIlczogTklVIEV0aGVybmV0ICVzXG4iLAogCQlkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGRldi0+ZGV2X2FkZHIpKTsKIAotCXByX2luZm8oIiVzOiBQb3J0IHR5cGVbJXNdIG1vZGVbJXM6JXNdIFhDVlJbJXNdIHBoeVslc11cbiIsCi0JCWRldi0+bmFtZSwKLQkJKG5wLT5mbGFncyAmIE5JVV9GTEFHU19YTUFDID8gIlhNQUMiIDogIkJNQUMiKSwKLQkJKG5wLT5mbGFncyAmIE5JVV9GTEFHU18xMEcgPyAiMTBHIiA6ICIxRyIpLAotCQkobnAtPmZsYWdzICYgTklVX0ZMQUdTX0ZJQkVSID8gIkZJQkVSIiA6ICJDT1BQRVIiKSwKLQkJKG5wLT5tYWNfeGN2ciA9PSBNQUNfWENWUl9NSUkgPyAiTUlJIiA6Ci0JCSAobnAtPm1hY194Y3ZyID09IE1BQ19YQ1ZSX1BDUyA/ICJQQ1MiIDogIlhQQ1MiKSksCi0JCW5wLT52cGQucGh5X3R5cGUpOworCWlmIChucC0+cGFyZW50LT5wbGF0X3R5cGUgPT0gUExBVF9UWVBFX0FUQ0FfQ1AzMjIwKSB7CisJCXByX2luZm8oIiVzOiBQb3J0IHR5cGVbJXNdIG1vZGVbJXM6JXNdIFhDVlJbJXNdIHBoeVslc11cbiIsCisJCQkJZGV2LT5uYW1lLAorCQkJCShucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfWE1BQyA/ICJYTUFDIiA6ICJCTUFDIiksCisJCQkJKG5wLT5mbGFncyAmIE5JVV9GTEFHU18xMEcgPyAiMTBHIiA6ICIxRyIpLAorCQkJCShucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfRklCRVIgPyAiUkdNSUkgRklCRVIiIDogIlNFUkRFUyIpLAorCQkJCShucC0+bWFjX3hjdnIgPT0gTUFDX1hDVlJfTUlJID8gIk1JSSIgOgorCQkJCSAobnAtPm1hY194Y3ZyID09IE1BQ19YQ1ZSX1BDUyA/ICJQQ1MiIDogIlhQQ1MiKSksCisJCQkJbnAtPnZwZC5waHlfdHlwZSk7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiJXM6IFBvcnQgdHlwZVslc10gbW9kZVslczolc10gWENWUlslc10gcGh5WyVzXVxuIiwKKwkJCQlkZXYtPm5hbWUsCisJCQkJKG5wLT5mbGFncyAmIE5JVV9GTEFHU19YTUFDID8gIlhNQUMiIDogIkJNQUMiKSwKKwkJCQkobnAtPmZsYWdzICYgTklVX0ZMQUdTXzEwRyA/ICIxMEciIDogIjFHIiksCisJCQkJKG5wLT5mbGFncyAmIE5JVV9GTEFHU19GSUJFUiA/ICJGSUJFUiIgOiAiQ09QUEVSIiksCisJCQkJKG5wLT5tYWNfeGN2ciA9PSBNQUNfWENWUl9NSUkgPyAiTUlJIiA6CisJCQkJIChucC0+bWFjX3hjdnIgPT0gTUFDX1hDVlJfUENTID8gIlBDUyIgOiAiWFBDUyIpKSwKKwkJCQlucC0+dnBkLnBoeV90eXBlKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG5pdV9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuaCBiL2RyaXZlcnMvbmV0L25pdS5oCmluZGV4IDBlODYyNmEuLjMzNmFlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5oCisrKyBiL2RyaXZlcnMvbmV0L25pdS5oCkBAIC00OTksNyArNDk5LDcgQEAKICNkZWZpbmUgQk1BQ19BRERSMgkJCTB4MDAxMTBVTAogI2RlZmluZSAgQk1BQ19BRERSMl9BRERSMgkJMHgwMDAwMDAwMDAwMDBmZmZmVUxMCiAKLSNkZWZpbmUgQk1BQ19OVU1fQUxUX0FERFIJCTcKKyNkZWZpbmUgQk1BQ19OVU1fQUxUX0FERFIJCTYKIAogI2RlZmluZSBCTUFDX0FMVF9BRERSMChOVU0pCQkoMHgwMDExOFVMICsgKE5VTSkqMHgxOFVMKQogI2RlZmluZSAgQk1BQ19BTFRfQUREUjBfQUREUjAJCTB4MDAwMDAwMDAwMDAwZmZmZlVMTApAQCAtMzA2MSw2ICszMDYxLDcgQEAKICNkZWZpbmUgUExBVF9UWVBFX05JVQkJMHgwMgogI2RlZmluZSBQTEFUX1RZUEVfVkZfUDAJCTB4MDMKICNkZWZpbmUgUExBVF9UWVBFX1ZGX1AxCQkweDA0CisjZGVmaW5lIFBMQVRfVFlQRV9BVENBX0NQMzIyMAkweDA4CiAKIAl1OAkJCW51bV9wb3J0czsKIApAQCAtMzE5OCwxMCArMzE5OSwxMSBAQAogCXN0cnVjdCBuaXVfcGFyZW50CQkqcGFyZW50OwogCiAJdTMyCQkJCWZsYWdzOworI2RlZmluZSBOSVVfRkxBR1NfVlBEX1ZBTElECQkweDAwODAwMDAwIC8qIFZQRCBoYXMgdmFsaWQgdmVyc2lvbiAqLwogI2RlZmluZSBOSVVfRkxBR1NfTVNJWAkJCTB4MDA0MDAwMDAgLyogTVNJLVggaW4gdXNlICovCiAjZGVmaW5lIE5JVV9GTEFHU19NQ0FTVAkJCTB4MDAyMDAwMDAgLyogbXVsdGljYXN0IGZpbHRlciBlbmFibGVkICovCiAjZGVmaW5lIE5JVV9GTEFHU19QUk9NSVNDCQkweDAwMTAwMDAwIC8qIFBST01JU0MgZW5hYmxlZCAqLwotI2RlZmluZSBOSVVfRkxBR1NfVlBEX1ZBTElECQkweDAwMDgwMDAwIC8qIFZQRCBoYXMgdmFsaWQgdmVyc2lvbiAqLworI2RlZmluZSBOSVVfRkxBR1NfWENWUl9TRVJERVMJCTB4MDAwODAwMDAgLyogMD1QSFkgMT1TRVJERVMgKi8KICNkZWZpbmUgTklVX0ZMQUdTXzEwRwkJCTB4MDAwNDAwMDAgLyogMD0xRyAxPTEwRyAqLwogI2RlZmluZSBOSVVfRkxBR1NfRklCRVIJCQkweDAwMDIwMDAwIC8qIDA9Q09QUEVSIDE9RklCRVIgKi8KICNkZWZpbmUgTklVX0ZMQUdTX1hNQUMJCQkweDAwMDEwMDAwIC8qIDA9Qk1BQyAxPVhNQUMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYyBiL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYwppbmRleCAyZTM5ZTAyOC4uM2IyYTZjNTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCkBAIC01NSwxNSArNTUsMTAgQEAKICAqIC0gTXVsdGlxdWV1ZSBSWC9UWAogICovCiAKLQotLyogTXVzdCBiZSBhIHBvd2VyIG9mIHR3byAqLwotI2RlZmluZSBSWF9SSU5HX1NJWkUgMjA0OAotI2RlZmluZSBUWF9SSU5HX1NJWkUgNDA5NgotCiAjZGVmaW5lIExST19NQVhfQUdHUiA2NAogCiAjZGVmaW5lIFBFX01JTl9NVFUJNjQKLSNkZWZpbmUgUEVfTUFYX01UVQkxNTAwCisjZGVmaW5lIFBFX01BWF9NVFUJOTAwMAogI2RlZmluZSBQRV9ERUZfTVRVCUVUSF9EQVRBX0xFTgogCiAjZGVmaW5lIERFRkFVTFRfTVNHX0VOQUJMRQkgIFwKQEAgLTc2LDE2ICs3MSw2IEBACiAJIE5FVElGX01TR19SWF9FUlIJfCBcCiAJIE5FVElGX01TR19UWF9FUlIpCiAKLSNkZWZpbmUgVFhfREVTQyh0eCwgbnVtKQkoKHR4KS0+Y2hhbi5yaW5nX3ZpcnRbKG51bSkgJiAoVFhfUklOR19TSVpFLTEpXSkKLSNkZWZpbmUgVFhfREVTQ19JTkZPKHR4LCBudW0pCSgodHgpLT5yaW5nX2luZm9bKG51bSkgJiAoVFhfUklOR19TSVpFLTEpXSkKLSNkZWZpbmUgUlhfREVTQyhyeCwgbnVtKQkoKHJ4KS0+Y2hhbi5yaW5nX3ZpcnRbKG51bSkgJiAoUlhfUklOR19TSVpFLTEpXSkKLSNkZWZpbmUgUlhfREVTQ19JTkZPKHJ4LCBudW0pCSgocngpLT5yaW5nX2luZm9bKG51bSkgJiAoUlhfUklOR19TSVpFLTEpXSkKLSNkZWZpbmUgUlhfQlVGRihyeCwgbnVtKQkoKHJ4KS0+YnVmZmVyc1sobnVtKSAmIChSWF9SSU5HX1NJWkUtMSldKQotCi0jZGVmaW5lIFJJTkdfVVNFRChyaW5nKQkJKCgocmluZyktPm5leHRfdG9fZmlsbCAtIChyaW5nKS0+bmV4dF90b19jbGVhbikgXAotCQkJCSAmICgocmluZyktPnNpemUgLSAxKSkKLSNkZWZpbmUgUklOR19BVkFJTChyaW5nKQkoKHJpbmctPnNpemUpIC0gUklOR19VU0VEKHJpbmcpKQotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SICgiT2xvZiBKb2hhbnNzb24gPG9sb2ZAbGl4b20ubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQSBTZW1pIFBXUmZpY2llbnQgRXRoZXJuZXQgZHJpdmVyIik7CkBAIC05NCw2ICs3OSw4IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiUEEgU2VtaSBNQUMgYml0bWFwcGVkIGRlYnVnZ2luZyBtZXNzYWdlIGVuYWJsZSB2YWx1ZSIpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHBhc2VtaV9tYWNfZXRodG9vbF9vcHM7CisKIHN0YXRpYyBpbnQgdHJhbnNsYXRpb25fZW5hYmxlZCh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QQVNFTUlfSU9NTVVfRE1BX0ZPUkNFKQpAQCAtMzIyLDYgKzMwOSwxMDQgQEAKIAlyZXR1cm4gKG5mcmFncyArIDMpICYgfjE7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGFzZW1pX21hY19jc3JpbmcgKnBhc2VtaV9tYWNfc2V0dXBfY3NyaW5nKHN0cnVjdCBwYXNlbWlfbWFjICptYWMpCit7CisJc3RydWN0IHBhc2VtaV9tYWNfY3NyaW5nICpyaW5nOworCXUzMiB2YWw7CisJdW5zaWduZWQgaW50IGNmZzsKKwlpbnQgY2hubzsKKworCXJpbmcgPSBwYXNlbWlfZG1hX2FsbG9jX2NoYW4oVFhDSEFOLCBzaXplb2Yoc3RydWN0IHBhc2VtaV9tYWNfY3NyaW5nKSwKKwkJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHBhc2VtaV9tYWNfY3NyaW5nLCBjaGFuKSk7CisKKwlpZiAoIXJpbmcpIHsKKwkJZGV2X2VycigmbWFjLT5wZGV2LT5kZXYsICJDYW4ndCBhbGxvY2F0ZSBjaGVja3N1bSBjaGFubmVsXG4iKTsKKwkJZ290byBvdXRfY2hhbjsKKwl9CisKKwljaG5vID0gcmluZy0+Y2hhbi5jaG5vOworCisJcmluZy0+c2l6ZSA9IENTX1JJTkdfU0laRTsKKwlyaW5nLT5uZXh0X3RvX2ZpbGwgPSAwOworCisJLyogQWxsb2NhdGUgZGVzY3JpcHRvcnMgKi8KKwlpZiAocGFzZW1pX2RtYV9hbGxvY19yaW5nKCZyaW5nLT5jaGFuLCBDU19SSU5HX1NJWkUpKQorCQlnb3RvIG91dF9yaW5nX2Rlc2M7CisKKwl3cml0ZV9kbWFfcmVnKFBBU19ETUFfVFhDSEFOX0JBU0VMKGNobm8pLAorCQkgICAgICBQQVNfRE1BX1RYQ0hBTl9CQVNFTF9CUkJMKHJpbmctPmNoYW4ucmluZ19kbWEpKTsKKwl2YWwgPSBQQVNfRE1BX1RYQ0hBTl9CQVNFVV9CUkJIKHJpbmctPmNoYW4ucmluZ19kbWEgPj4gMzIpOworCXZhbCB8PSBQQVNfRE1BX1RYQ0hBTl9CQVNFVV9TSVooQ1NfUklOR19TSVpFID4+IDMpOworCisJd3JpdGVfZG1hX3JlZyhQQVNfRE1BX1RYQ0hBTl9CQVNFVShjaG5vKSwgdmFsKTsKKworCXJpbmctPmV2ZW50c1swXSA9IHBhc2VtaV9kbWFfYWxsb2NfZmxhZygpOworCXJpbmctPmV2ZW50c1sxXSA9IHBhc2VtaV9kbWFfYWxsb2NfZmxhZygpOworCWlmIChyaW5nLT5ldmVudHNbMF0gPCAwIHx8IHJpbmctPmV2ZW50c1sxXSA8IDApCisJCWdvdG8gb3V0X2ZsYWdzOworCisJcGFzZW1pX2RtYV9jbGVhcl9mbGFnKHJpbmctPmV2ZW50c1swXSk7CisJcGFzZW1pX2RtYV9jbGVhcl9mbGFnKHJpbmctPmV2ZW50c1sxXSk7CisKKwlyaW5nLT5mdW4gPSBwYXNlbWlfZG1hX2FsbG9jX2Z1bigpOworCWlmIChyaW5nLT5mdW4gPCAwKQorCQlnb3RvIG91dF9mdW47CisKKwljZmcgPSBQQVNfRE1BX1RYQ0hBTl9DRkdfVFlfRlVOQyB8IFBBU19ETUFfVFhDSEFOX0NGR19VUCB8CisJICAgICAgUEFTX0RNQV9UWENIQU5fQ0ZHX1RBVFRSKHJpbmctPmZ1bikgfAorCSAgICAgIFBBU19ETUFfVFhDSEFOX0NGR19MUFNRIHwgUEFTX0RNQV9UWENIQU5fQ0ZHX0xQRFE7CisKKwlpZiAodHJhbnNsYXRpb25fZW5hYmxlZCgpKQorCQljZmcgfD0gUEFTX0RNQV9UWENIQU5fQ0ZHX1RSRCB8IFBBU19ETUFfVFhDSEFOX0NGR19UUlI7CisKKwl3cml0ZV9kbWFfcmVnKFBBU19ETUFfVFhDSEFOX0NGRyhjaG5vKSwgY2ZnKTsKKworCS8qIGVuYWJsZSBjaGFubmVsICovCisJcGFzZW1pX2RtYV9zdGFydF9jaGFuKCZyaW5nLT5jaGFuLCBQQVNfRE1BX1RYQ0hBTl9UQ01EU1RBX1NaIHwKKwkJCQkJICAgUEFTX0RNQV9UWENIQU5fVENNRFNUQV9EQiB8CisJCQkJCSAgIFBBU19ETUFfVFhDSEFOX1RDTURTVEFfREUgfAorCQkJCQkgICBQQVNfRE1BX1RYQ0hBTl9UQ01EU1RBX0RBKTsKKworCXJldHVybiByaW5nOworCitvdXRfZnVuOgorb3V0X2ZsYWdzOgorCWlmIChyaW5nLT5ldmVudHNbMF0gPj0gMCkKKwkJcGFzZW1pX2RtYV9mcmVlX2ZsYWcocmluZy0+ZXZlbnRzWzBdKTsKKwlpZiAocmluZy0+ZXZlbnRzWzFdID49IDApCisJCXBhc2VtaV9kbWFfZnJlZV9mbGFnKHJpbmctPmV2ZW50c1sxXSk7CisJcGFzZW1pX2RtYV9mcmVlX3JpbmcoJnJpbmctPmNoYW4pOworb3V0X3JpbmdfZGVzYzoKKwlwYXNlbWlfZG1hX2ZyZWVfY2hhbigmcmluZy0+Y2hhbik7CitvdXRfY2hhbjoKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwYXNlbWlfbWFjX3NldHVwX2NzcmluZ3Moc3RydWN0IHBhc2VtaV9tYWMgKm1hYykKK3sKKwlpbnQgaTsKKwltYWMtPmNzWzBdID0gcGFzZW1pX21hY19zZXR1cF9jc3JpbmcobWFjKTsKKwlpZiAobWFjLT50eXBlID09IE1BQ19UWVBFX1hBVUkpCisJCW1hYy0+Y3NbMV0gPSBwYXNlbWlfbWFjX3NldHVwX2NzcmluZyhtYWMpOworCWVsc2UKKwkJbWFjLT5jc1sxXSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NTOyBpKyspCisJCWlmIChtYWMtPmNzW2ldKQorCQkJbWFjLT5udW1fY3MrKzsKK30KKworc3RhdGljIHZvaWQgcGFzZW1pX21hY19mcmVlX2NzcmluZyhzdHJ1Y3QgcGFzZW1pX21hY19jc3JpbmcgKmNzcmluZykKK3sKKwlwYXNlbWlfZG1hX3N0b3BfY2hhbigmY3NyaW5nLT5jaGFuKTsKKwlwYXNlbWlfZG1hX2ZyZWVfZmxhZyhjc3JpbmctPmV2ZW50c1swXSk7CisJcGFzZW1pX2RtYV9mcmVlX2ZsYWcoY3NyaW5nLT5ldmVudHNbMV0pOworCXBhc2VtaV9kbWFfZnJlZV9yaW5nKCZjc3JpbmctPmNoYW4pOworCXBhc2VtaV9kbWFfZnJlZV9jaGFuKCZjc3JpbmctPmNoYW4pOworCXBhc2VtaV9kbWFfZnJlZV9mdW4oY3NyaW5nLT5mdW4pOworfQorCiBzdGF0aWMgaW50IHBhc2VtaV9tYWNfc2V0dXBfcnhfcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBhc2VtaV9tYWNfcnhyaW5nICpyaW5nOwpAQCAtNDQ1LDcgKzUzMCw3IEBACiAJY2ZnID0gUEFTX0RNQV9UWENIQU5fQ0ZHX1RZX0lGQUNFIHwKIAkgICAgICBQQVNfRE1BX1RYQ0hBTl9DRkdfVEFUVFIobWFjLT5kbWFfaWYpIHwKIAkgICAgICBQQVNfRE1BX1RYQ0hBTl9DRkdfVVAgfAotCSAgICAgIFBBU19ETUFfVFhDSEFOX0NGR19XVCgyKTsKKwkgICAgICBQQVNfRE1BX1RYQ0hBTl9DRkdfV1QoNCk7CiAKIAlpZiAodHJhbnNsYXRpb25fZW5hYmxlZCgpKQogCQljZmcgfD0gUEFTX0RNQV9UWENIQU5fQ0ZHX1RSRCB8IFBBU19ETUFfVFhDSEFOX0NGR19UUlI7CkBAIC04MTAsMTMgKzg5NSwyMSBAQAogCQl1NjQgbWFjdHggPSBUWF9ERVNDKHR4cmluZywgaSk7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJc2tiID0gVFhfREVTQ19JTkZPKHR4cmluZywgaSsxKS5za2I7Ci0JCW5yX2ZyYWdzID0gVFhfREVTQ19JTkZPKHR4cmluZywgaSkuZG1hOwotCiAJCWlmICgobWFjdHggICYgWENUX01BQ1RYX0UpIHx8CiAJCSAgICAoKmNoYW4tPnN0YXR1cyAmIFBBU19TVEFUVVNfRVJST1IpKQogCQkJcGFzZW1pX21hY190eF9lcnJvcihtYWMsIG1hY3R4KTsKIAorCQkvKiBTa2lwIG92ZXIgY29udHJvbCBkZXNjcmlwdG9ycyAqLworCQlpZiAoIShtYWN0eCAmIFhDVF9NQUNUWF9MTEVOX00pKSB7CisJCQlUWF9ERVNDKHR4cmluZywgaSkgPSAwOworCQkJVFhfREVTQyh0eHJpbmcsIGkrMSkgPSAwOworCQkJYnVmX2NvdW50ID0gMjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc2tiID0gVFhfREVTQ19JTkZPKHR4cmluZywgaSsxKS5za2I7CisJCW5yX2ZyYWdzID0gVFhfREVTQ19JTkZPKHR4cmluZywgaSkuZG1hOworCiAJCWlmICh1bmxpa2VseShtYWN0eCAmIFhDVF9NQUNUWF9PKSkKIAkJCS8qIE5vdCB5ZXQgdHJhbnNtaXR0ZWQgKi8KIAkJCWJyZWFrOwpAQCAtMTAxMiw3ICsxMTA1LDcgQEAKIAkJZ290byBlcnI7CiAKIAlwaHlfaWQgPSAqcHJvcDsKLQlzbnByaW50ZihtYWMtPnBoeV9pZCwgQlVTX0lEX1NJWkUsIFBIWV9JRF9GTVQsIChpbnQpci5zdGFydCwgcGh5X2lkKTsKKwlzbnByaW50ZihtYWMtPnBoeV9pZCwgQlVTX0lEX1NJWkUsICIleDolMDJ4IiwgKGludClyLnN0YXJ0LCBwaHlfaWQpOwogCiAJb2Zfbm9kZV9wdXQocGh5X2RuKTsKIApAQCAtMTA0MSwxMyArMTEzNCw3IEBACiB7CiAJc3RydWN0IHBhc2VtaV9tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGZsYWdzOwotCWludCByZXQ7Ci0KLQkvKiBlbmFibGUgcnggc2VjdGlvbiAqLwotCXdyaXRlX2RtYV9yZWcoUEFTX0RNQV9DT01fUlhDTUQsIFBBU19ETUFfQ09NX1JYQ01EX0VOKTsKLQotCS8qIGVuYWJsZSB0eCBzZWN0aW9uICovCi0Jd3JpdGVfZG1hX3JlZyhQQVNfRE1BX0NPTV9UWENNRCwgUEFTX0RNQV9DT01fVFhDTURfRU4pOworCWludCBpLCByZXQ7CiAKIAlmbGFncyA9IFBBU19NQUNfQ0ZHX1RYUF9GQ0UgfCBQQVNfTUFDX0NGR19UWFBfRlBDKDMpIHwKIAkJUEFTX01BQ19DRkdfVFhQX1NMKDMpIHwgUEFTX01BQ19DRkdfVFhQX0NPQigweGYpIHwKQEAgLTEwNjQsNiArMTE1MSwxOSBAQAogCWlmICghbWFjLT50eCkKIAkJZ290byBvdXRfdHhfcmluZzsKIAorCS8qIFdlIG1pZ2h0IGFscmVhZHkgaGF2ZSBhbGxvY2F0ZWQgcmluZ3MgaW4gY2FzZSBtdHUgd2FzIGNoYW5nZWQKKwkgKiBiZWZvcmUgaW50ZXJmYWNlIHdhcyBicm91Z2h0IHVwLgorCSAqLworCWlmIChkZXYtPm10dSA+IDE1MDAgJiYgIW1hYy0+bnVtX2NzKSB7CisJCXBhc2VtaV9tYWNfc2V0dXBfY3NyaW5ncyhtYWMpOworCQlpZiAoIW1hYy0+bnVtX2NzKQorCQkJZ290byBvdXRfdHhfcmluZzsKKwl9CisKKwkvKiBaZXJvIG91dCBybW9uIGNvdW50ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCXdyaXRlX21hY19yZWcobWFjLCBQQVNfTUFDX1JNT04oaSksIDApOworCiAJLyogMHgzZmYgd2l0aCAzM01IeiBjbG9jayBpcyBhYm91dCAzMXVzICovCiAJd3JpdGVfaW9iX3JlZyhQQVNfSU9CX0RNQV9DT01fVElNRU9VVENGRywKIAkJICAgICAgUEFTX0lPQl9ETUFfQ09NX1RJTUVPVVRDRkdfVENOVCgweDNmZikpOwpAQCAtMTI0Nyw3ICsxMzQ3LDcgQEAKIHsKIAlzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RhOwotCWludCByeGNoLCB0eGNoOworCWludCByeGNoLCB0eGNoLCBpOwogCiAJcnhjaCA9IHJ4X3JpbmcobWFjKS0+Y2hhbi5jaG5vOwogCXR4Y2ggPSB0eF9yaW5nKG1hYyktPmNoYW4uY2hubzsKQEAgLTEyOTIsNiArMTM5MiwxMyBAQAogCWZyZWVfaXJxKG1hYy0+dHgtPmNoYW4uaXJxLCBtYWMtPnR4KTsKIAlmcmVlX2lycShtYWMtPnJ4LT5jaGFuLmlycSwgbWFjLT5yeCk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgbWFjLT5udW1fY3M7IGkrKykgeworCQlwYXNlbWlfbWFjX2ZyZWVfY3NyaW5nKG1hYy0+Y3NbaV0pOworCQltYWMtPmNzW2ldID0gTlVMTDsKKwl9CisKKwltYWMtPm51bV9jcyA9IDA7CisKIAkvKiBGcmVlIHJlc291cmNlcyAqLwogCXBhc2VtaV9tYWNfZnJlZV9yeF9yZXNvdXJjZXMobWFjKTsKIAlwYXNlbWlfbWFjX2ZyZWVfdHhfcmVzb3VyY2VzKG1hYyk7CkBAIC0xMjk5LDM2ICsxNDA2LDExNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwYXNlbWlfbWFjX3F1ZXVlX2NzZGVzYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBjb25zdCBkbWFfYWRkcl90ICptYXAsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGludCAqbWFwX3NpemUsCisJCQkJICAgIHN0cnVjdCBwYXNlbWlfbWFjX3R4cmluZyAqdHhyaW5nLAorCQkJCSAgICBzdHJ1Y3QgcGFzZW1pX21hY19jc3JpbmcgKmNzcmluZykKK3sKKwl1NjQgZnVuZDsKKwlkbWFfYWRkcl90IGNzX2Rlc3Q7CisJY29uc3QgaW50IG5oX29mZiA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOworCWNvbnN0IGludCBuaF9sZW4gPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CisJY29uc3QgaW50IG5mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJaW50IGNzX3NpemUsIGksIGZpbGwsIGhkciwgY3B5aGRyLCBldnQ7CisJZG1hX2FkZHJfdCBjc2RtYTsKKworCWZ1bmQgPSBYQ1RfRlVOX1NUIHwgWENUX0ZVTl9SUl84QlJFUyB8CisJICAgICAgIFhDVF9GVU5fTyB8IFhDVF9GVU5fRlVOKGNzcmluZy0+ZnVuKSB8CisJICAgICAgIFhDVF9GVU5fQ1JNX1NJRyB8IFhDVF9GVU5fTExFTihza2ItPmxlbiAtIG5oX29mZikgfAorCSAgICAgICBYQ1RfRlVOX1NITChuaF9sZW4gPj4gMikgfCBYQ1RfRlVOX1NFOworCisJc3dpdGNoIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wpIHsKKwljYXNlIElQUFJPVE9fVENQOgorCQlmdW5kIHw9IFhDVF9GVU5fU0lHX1RDUDQ7CisJCS8qIFRDUCBjaGVja3N1bSBpcyAxNiBieXRlcyBpbnRvIHRoZSBoZWFkZXIgKi8KKwkJY3NfZGVzdCA9IG1hcFswXSArIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyAxNjsKKwkJYnJlYWs7CisJY2FzZSBJUFBST1RPX1VEUDoKKwkJZnVuZCB8PSBYQ1RfRlVOX1NJR19VRFA0OworCQkvKiBVRFAgY2hlY2tzdW0gaXMgNiBieXRlcyBpbnRvIHRoZSBoZWFkZXIgKi8KKwkJY3NfZGVzdCA9IG1hcFswXSArIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyA2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwkvKiBEbyB0aGUgY2hlY2tzdW0gb2ZmbG9hZGVkICovCisJZmlsbCA9IGNzcmluZy0+bmV4dF90b19maWxsOworCWhkciA9IGZpbGw7CisKKwlDU19ERVNDKGNzcmluZywgZmlsbCsrKSA9IGZ1bmQ7CisJLyogUm9vbSBmb3IgOEJSRVMuIENoZWNrc3VtIHJlc3VsdCBpcyByZWFsbHkgMiBieXRlcyBpbnRvIGl0ICovCisJY3NkbWEgPSBjc3JpbmctPmNoYW4ucmluZ19kbWEgKyAoZmlsbCAmIChDU19SSU5HX1NJWkUtMSkpICogOCArIDI7CisJQ1NfREVTQyhjc3JpbmcsIGZpbGwrKykgPSAwOworCisJQ1NfREVTQyhjc3JpbmcsIGZpbGwpID0gWENUX1BUUl9MRU4obWFwX3NpemVbMF0tbmhfb2ZmKSB8IFhDVF9QVFJfQUREUihtYXBbMF0rbmhfb2ZmKTsKKwlmb3IgKGkgPSAxOyBpIDw9IG5mcmFnczsgaSsrKQorCQlDU19ERVNDKGNzcmluZywgZmlsbCtpKSA9IFhDVF9QVFJfTEVOKG1hcF9zaXplW2ldKSB8IFhDVF9QVFJfQUREUihtYXBbaV0pOworCisJZmlsbCArPSBpOworCWlmIChmaWxsICYgMSkKKwkJZmlsbCsrOworCisJLyogQ29weSB0aGUgcmVzdWx0IGludG8gdGhlIFRDUCBwYWNrZXQgKi8KKwljcHloZHIgPSBmaWxsOworCUNTX0RFU0MoY3NyaW5nLCBmaWxsKyspID0gWENUX0ZVTl9PIHwgWENUX0ZVTl9GVU4oY3NyaW5nLT5mdW4pIHwKKwkJCQkgIFhDVF9GVU5fTExFTigyKSB8IFhDVF9GVU5fU0U7CisJQ1NfREVTQyhjc3JpbmcsIGZpbGwrKykgPSBYQ1RfUFRSX0xFTigyKSB8IFhDVF9QVFJfQUREUihjc19kZXN0KSB8IFhDVF9QVFJfVDsKKwlDU19ERVNDKGNzcmluZywgZmlsbCsrKSA9IFhDVF9QVFJfTEVOKDIpIHwgWENUX1BUUl9BRERSKGNzZG1hKTsKKwlmaWxsKys7CisKKwlldnQgPSAhY3NyaW5nLT5sYXN0X2V2ZW50OworCWNzcmluZy0+bGFzdF9ldmVudCA9IGV2dDsKKworCS8qIEV2ZW50IGhhbmRzaGFraW5nIHdpdGggTUFDIFRYICovCisJQ1NfREVTQyhjc3JpbmcsIGZpbGwrKykgPSBDVFJMX0NNRF9UIHwgQ1RSTF9DTURfTUVUQV9FVlQgfCBDVFJMX0NNRF9PIHwKKwkJCQkgIENUUkxfQ01EX0VUWVBFX1NFVCB8IENUUkxfQ01EX1JFRyhjc3JpbmctPmV2ZW50c1tldnRdKTsKKwlDU19ERVNDKGNzcmluZywgZmlsbCsrKSA9IDA7CisJQ1NfREVTQyhjc3JpbmcsIGZpbGwrKykgPSBDVFJMX0NNRF9UIHwgQ1RSTF9DTURfTUVUQV9FVlQgfCBDVFJMX0NNRF9PIHwKKwkJCQkgIENUUkxfQ01EX0VUWVBFX1dDTFIgfCBDVFJMX0NNRF9SRUcoY3NyaW5nLT5ldmVudHNbIWV2dF0pOworCUNTX0RFU0MoY3NyaW5nLCBmaWxsKyspID0gMDsKKwljc3JpbmctPm5leHRfdG9fZmlsbCA9IGZpbGwgJiAoQ1NfUklOR19TSVpFLTEpOworCisJY3Nfc2l6ZSA9IGZpbGwgLSBoZHI7CisJd3JpdGVfZG1hX3JlZyhQQVNfRE1BX1RYQ0hBTl9JTkNSKGNzcmluZy0+Y2hhbi5jaG5vKSwgKGNzX3NpemUpID4+IDEpOworCisJLyogVFgtc2lkZSBldmVudCBoYW5kc2hha2luZyAqLworCWZpbGwgPSB0eHJpbmctPm5leHRfdG9fZmlsbDsKKwlUWF9ERVNDKHR4cmluZywgZmlsbCsrKSA9IENUUkxfQ01EX1QgfCBDVFJMX0NNRF9NRVRBX0VWVCB8IENUUkxfQ01EX08gfAorCQkJCSAgQ1RSTF9DTURfRVRZUEVfV1NFVCB8IENUUkxfQ01EX1JFRyhjc3JpbmctPmV2ZW50c1tldnRdKTsKKwlUWF9ERVNDKHR4cmluZywgZmlsbCsrKSA9IDA7CisJVFhfREVTQyh0eHJpbmcsIGZpbGwrKykgPSBDVFJMX0NNRF9UIHwgQ1RSTF9DTURfTUVUQV9FVlQgfCBDVFJMX0NNRF9PIHwKKwkJCQkgIENUUkxfQ01EX0VUWVBFX0NMUiB8IENUUkxfQ01EX1JFRyhjc3JpbmctPmV2ZW50c1shZXZ0XSk7CisJVFhfREVTQyh0eHJpbmcsIGZpbGwrKykgPSAwOworCXR4cmluZy0+bmV4dF90b19maWxsID0gZmlsbDsKKworCXdyaXRlX2RtYV9yZWcoUEFTX0RNQV9UWENIQU5fSU5DUih0eHJpbmctPmNoYW4uY2hubyksIDIpOworCisJcmV0dXJuOworfQorCiBzdGF0aWMgaW50IHBhc2VtaV9tYWNfc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGFzZW1pX21hY190eHJpbmcgKnR4cmluZzsKLQl1NjQgZGZsYWdzLCBtYWN0eDsKKwlzdHJ1Y3QgcGFzZW1pX21hYyAqIGNvbnN0IG1hYyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBhc2VtaV9tYWNfdHhyaW5nICogY29uc3QgdHhyaW5nID0gdHhfcmluZyhtYWMpOworCXN0cnVjdCBwYXNlbWlfbWFjX2NzcmluZyAqY3NyaW5nOworCXU2NCBkZmxhZ3MgPSAwOworCXU2NCBtYWN0eDsKIAlkbWFfYWRkcl90IG1hcFtNQVhfU0tCX0ZSQUdTKzFdOwogCXVuc2lnbmVkIGludCBtYXBfc2l6ZVtNQVhfU0tCX0ZSQUdTKzFdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIG5mcmFnczsKIAlpbnQgZmlsbDsKKwljb25zdCBpbnQgbmhfb2ZmID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CisJY29uc3QgaW50IG5oX2xlbiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKKworCXByZWZldGNoKCZ0eHJpbmctPnJpbmdfaW5mbyk7CiAKIAlkZmxhZ3MgPSBYQ1RfTUFDVFhfTyB8IFhDVF9NQUNUWF9TVCB8IFhDVF9NQUNUWF9DUkNfUEFEOwogCi0JaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmggPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKLQotCQlzd2l0Y2ggKGlwX2hkcihza2IpLT5wcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJZGZsYWdzIHw9IFhDVF9NQUNUWF9DU1VNX1RDUDsKLQkJCWRmbGFncyB8PSBYQ1RfTUFDVFhfSVBIKHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSA+PiAyKTsKLQkJCWRmbGFncyB8PSBYQ1RfTUFDVFhfSVBPKG5oIC0gc2tiLT5kYXRhKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJZGZsYWdzIHw9IFhDVF9NQUNUWF9DU1VNX1VEUDsKLQkJCWRmbGFncyB8PSBYQ1RfTUFDVFhfSVBIKHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSA+PiAyKTsKLQkJCWRmbGFncyB8PSBYQ1RfTUFDVFhfSVBPKG5oIC0gc2tiLT5kYXRhKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCiAJbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAogCW1hcFswXSA9IHBjaV9tYXBfc2luZ2xlKG1hYy0+ZG1hX3BkZXYsIHNrYi0+ZGF0YSwgc2tiX2hlYWRsZW4oc2tiKSwKQEAgLTEzNTAsMjQgKzE1MzUsNDYgQEAKIAkJfQogCX0KIAorCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICYmIHNrYi0+bGVuIDw9IDE1NDApIHsKKwkJc3dpdGNoIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wpIHsKKwkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCWRmbGFncyB8PSBYQ1RfTUFDVFhfQ1NVTV9UQ1A7CisJCQlkZmxhZ3MgfD0gWENUX01BQ1RYX0lQSChuaF9sZW4gPj4gMik7CisJCQlkZmxhZ3MgfD0gWENUX01BQ1RYX0lQTyhuaF9vZmYpOworCQkJYnJlYWs7CisJCWNhc2UgSVBQUk9UT19VRFA6CisJCQlkZmxhZ3MgfD0gWENUX01BQ1RYX0NTVU1fVURQOworCQkJZGZsYWdzIHw9IFhDVF9NQUNUWF9JUEgobmhfbGVuID4+IDIpOworCQkJZGZsYWdzIHw9IFhDVF9NQUNUWF9JUE8obmhfb2ZmKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0FSTl9PTigxKTsKKwkJfQorCX0KKwogCW1hY3R4ID0gZGZsYWdzIHwgWENUX01BQ1RYX0xMRU4oc2tiLT5sZW4pOwogCi0JdHhyaW5nID0gdHhfcmluZyhtYWMpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnR4cmluZy0+bG9jaywgZmxhZ3MpOwogCi0JZmlsbCA9IHR4cmluZy0+bmV4dF90b19maWxsOwotCiAJLyogQXZvaWQgc3RlcHBpbmcgb24gdGhlIHNhbWUgY2FjaGUgbGluZSB0aGF0IHRoZSBETUEgY29udHJvbGxlcgogCSAqIGlzIGN1cnJlbnRseSBhYm91dCB0byBzZW5kLCBzbyBsZWF2ZSBhdCBsZWFzdCA4IHdvcmRzIGF2YWlsYWJsZS4KIAkgKiBUb3RhbCBmcmVlIHNwYWNlIG5lZWRlZCBpcyBtYWN0eCArIGZyYWdtZW50cyArIDgKIAkgKi8KLQlpZiAoUklOR19BVkFJTCh0eHJpbmcpIDwgbmZyYWdzICsgMTApIHsKKwlpZiAoUklOR19BVkFJTCh0eHJpbmcpIDwgbmZyYWdzICsgMTQpIHsKIAkJLyogbm8gcm9vbSAtLSBzdG9wIHRoZSBxdWV1ZSBhbmQgd2FpdCBmb3IgdHggaW50ciAqLwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKKwkvKiBRdWV1ZSB1cCBjaGVja3N1bSArIGV2ZW50IGRlc2NyaXB0b3JzLCBpZiBuZWVkZWQgKi8KKwlpZiAobWFjLT5udW1fY3MgJiYgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCAmJiBza2ItPmxlbiA+IDE1NDApIHsKKwkJY3NyaW5nID0gbWFjLT5jc1ttYWMtPmxhc3RfY3NdOworCQltYWMtPmxhc3RfY3MgPSAobWFjLT5sYXN0X2NzICsgMSkgJSBtYWMtPm51bV9jczsKKworCQlwYXNlbWlfbWFjX3F1ZXVlX2NzZGVzYyhza2IsIG1hcCwgbWFwX3NpemUsIHR4cmluZywgY3NyaW5nKTsKKwl9CisKKwlmaWxsID0gdHhyaW5nLT5uZXh0X3RvX2ZpbGw7CiAJVFhfREVTQyh0eHJpbmcsIGZpbGwpID0gbWFjdHg7CiAJVFhfREVTQ19JTkZPKHR4cmluZywgZmlsbCkuZG1hID0gbmZyYWdzOwogCWZpbGwrKzsKQEAgLTE0NDEsMTIgKzE2NDgsMzMgQEAKIAlyZXR1cm4gcGt0czsKIH0KIAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisvKgorICogUG9sbGluZyAnaW50ZXJydXB0JyAtIHVzZWQgYnkgdGhpbmdzIGxpa2UgbmV0Y29uc29sZSB0byBzZW5kIHNrYnMKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzLiBJdCdzIG5vdCBjYWxsZWQgd2hpbGUKKyAqIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBpcyBleGVjdXRpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHBhc2VtaV9tYWNfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGlzYWJsZV9pcnEobWFjLT50eC0+Y2hhbi5pcnEpOworCXBhc2VtaV9tYWNfdHhfaW50cihtYWMtPnR4LT5jaGFuLmlycSwgbWFjLT50eCk7CisJZW5hYmxlX2lycShtYWMtPnR4LT5jaGFuLmlycSk7CisKKwlkaXNhYmxlX2lycShtYWMtPnJ4LT5jaGFuLmlycSk7CisJcGFzZW1pX21hY19yeF9pbnRyKG1hYy0+cngtPmNoYW4uaXJxLCBtYWMtPnJ4KTsKKwllbmFibGVfaXJxKG1hYy0+cngtPmNoYW4uaXJxKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHBhc2VtaV9tYWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgcmVnOwotCXVuc2lnbmVkIGludCByY21kc3RhOworCXVuc2lnbmVkIGludCByY21kc3RhID0gMDsKIAlpbnQgcnVubmluZzsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChuZXdfbXR1IDwgUEVfTUlOX01UVSB8fCBuZXdfbXR1ID4gUEVfTUFYX01UVSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDY4LDYgKzE2OTYsMTYgQEAKIAkJcGFzZW1pX21hY19wYXVzZV9yeGludChtYWMpOwogCQlwYXNlbWlfbWFjX2NsZWFuX3J4KHJ4X3JpbmcobWFjKSwgUlhfUklOR19TSVpFKTsKIAkJcGFzZW1pX21hY19mcmVlX3J4X2J1ZmZlcnMobWFjKTsKKworCX0KKworCS8qIFNldHVwIGNoZWNrc3VtIGNoYW5uZWxzIGlmIGxhcmdlIE1UVSBhbmQgbm9uZSBhbHJlYWR5IGFsbG9jYXRlZCAqLworCWlmIChuZXdfbXR1ID4gMTUwMCAmJiAhbWFjLT5udW1fY3MpIHsKKwkJcGFzZW1pX21hY19zZXR1cF9jc3JpbmdzKG1hYyk7CisJCWlmICghbWFjLT5udW1fY3MpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQogCX0KIAogCS8qIENoYW5nZSBtYXhmLCBpLmUuIHdoYXQgc2l6ZSBmcmFtZXMgYXJlIGFjY2VwdGVkLgpAQCAtMTQ4Miw2ICsxNzIwLDcgQEAKIAkvKiBNVFUgKyBFVEhfSExFTiArIFZMQU5fSExFTiArIDIgNjRCIGNhY2hlbGluZXMgKi8KIAltYWMtPmJ1ZnN6ID0gbmV3X210dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBMT0NBTF9TS0JfQUxJR04gKyAxMjg7CiAKK291dDoKIAlpZiAocnVubmluZykgewogCQl3cml0ZV9kbWFfcmVnKFBBU19ETUFfUlhJTlRfUkNNRFNUQShtYWMtPmRtYV9pZiksCiAJCQkgICAgICByY21kc3RhIHwgUEFTX0RNQV9SWElOVF9SQ01EU1RBX0VOKTsKQEAgLTE0OTQsNyArMTczMyw3IEBACiAJCXBhc2VtaV9tYWNfaW50Zl9lbmFibGUobWFjKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtMTUyOCw3ICsxNzY3LDcgQEAKIAluZXRpZl9uYXBpX2FkZChkZXYsICZtYWMtPm5hcGksIHBhc2VtaV9tYWNfcG9sbCwgNjQpOwogCiAJZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfTExUWCB8IE5FVElGX0ZfU0cgfAotCQkJTkVUSUZfRl9ISUdIRE1BOworCQkJTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9HU087CiAKIAltYWMtPmxyb19tZ3IubWF4X2FnZ3IgPSBMUk9fTUFYX0FHR1I7CiAJbWFjLT5scm9fbWdyLm1heF9kZXNjID0gTUFYX0xST19ERVNDUklQVE9SUzsKQEAgLTE1ODgsOCArMTgyNywxMiBAQAogCWRldi0+bXR1ID0gUEVfREVGX01UVTsKIAkvKiAxNTAwIE1UVSArIEVUSF9ITEVOICsgVkxBTl9ITEVOICsgMiA2NEIgY2FjaGVsaW5lcyAqLwogCW1hYy0+YnVmc3ogPSBkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBMT0NBTF9TS0JfQUxJR04gKyAxMjg7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwlkZXYtPnBvbGxfY29udHJvbGxlciA9IHBhc2VtaV9tYWNfbmV0cG9sbDsKKyNlbmRpZgogCiAJZGV2LT5jaGFuZ2VfbXR1ID0gcGFzZW1pX21hY19jaGFuZ2VfbXR1OworCWRldi0+ZXRodG9vbF9vcHMgPSAmcGFzZW1pX21hY19ldGh0b29sX29wczsKIAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5oIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5oCmluZGV4IDk5ZTdiOTMuLjFhMTE1ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuaAorKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmgKQEAgLTI2LDcgKzI2LDE0IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KIAorLyogTXVzdCBiZSBhIHBvd2VyIG9mIHR3byAqLworI2RlZmluZSBSWF9SSU5HX1NJWkUgMjA0OAorI2RlZmluZSBUWF9SSU5HX1NJWkUgNDA5NgorI2RlZmluZSBDU19SSU5HX1NJWkUgKFRYX1JJTkdfU0laRSoyKQorCisKICNkZWZpbmUgTUFYX0xST19ERVNDUklQVE9SUyA4CisjZGVmaW5lIE1BWF9DUwkyCiAKIHN0cnVjdCBwYXNlbWlfbWFjX3R4cmluZyB7CiAJc3RydWN0IHBhc2VtaV9kbWFjaGFuIGNoYW47IC8qIE11c3QgYmUgZmlyc3QgKi8KQEAgLTUxLDYgKzU4LDE1IEBACiAJc3RydWN0IHBhc2VtaV9tYWMgKm1hYzsJLyogTmVlZGVkIGluIGludHIgaGFuZGxlciAqLwogfTsKIAorc3RydWN0IHBhc2VtaV9tYWNfY3NyaW5nIHsKKwlzdHJ1Y3QgcGFzZW1pX2RtYWNoYW4gY2hhbjsKKwl1bnNpZ25lZCBpbnQJc2l6ZTsKKwl1bnNpZ25lZCBpbnQJbmV4dF90b19maWxsOworCWludAkJZXZlbnRzWzJdOworCWludAkJbGFzdF9ldmVudDsKKwlpbnQJCWZ1bjsKK307CisKIHN0cnVjdCBwYXNlbWlfbWFjIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtNjAsMTAgKzc2LDEyIEBACiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAKIAlpbnQJCWJ1ZnN6OyAvKiBSWCByaW5nIGJ1ZmZlciBzaXplICovCisJaW50CQlsYXN0X2NzOworCWludAkJbnVtX2NzOworCXUzMgkJZG1hX2lmOwogCXU4CQl0eXBlOwogI2RlZmluZSBNQUNfVFlQRV9HTUFDCTEKICNkZWZpbmUgTUFDX1RZUEVfWEFVSQkyCi0JdTMyCWRtYV9pZjsKIAogCXU4CQltYWNfYWRkcls2XTsKIApAQCAtNzQsNiArOTIsNyBAQAogCiAJc3RydWN0IHBhc2VtaV9tYWNfdHhyaW5nICp0eDsKIAlzdHJ1Y3QgcGFzZW1pX21hY19yeHJpbmcgKnJ4OworCXN0cnVjdCBwYXNlbWlfbWFjX2NzcmluZyAqY3NbTUFYX0NTXTsKIAljaGFyCQl0eF9pcnFfbmFtZVsxMF07CQkvKiAiZXRoJWQgdHgiICovCiAJY2hhcgkJcnhfaXJxX25hbWVbMTBdOwkJLyogImV0aCVkIHJ4IiAqLwogCWludAlsaW5rOwpAQCAtOTAsNiArMTA5LDE2IEBACiAJZG1hX2FkZHJfdAlkbWE7CiB9OwogCisjZGVmaW5lIFRYX0RFU0ModHgsIG51bSkJKCh0eCktPmNoYW4ucmluZ192aXJ0WyhudW0pICYgKFRYX1JJTkdfU0laRS0xKV0pCisjZGVmaW5lIFRYX0RFU0NfSU5GTyh0eCwgbnVtKQkoKHR4KS0+cmluZ19pbmZvWyhudW0pICYgKFRYX1JJTkdfU0laRS0xKV0pCisjZGVmaW5lIFJYX0RFU0MocngsIG51bSkJKChyeCktPmNoYW4ucmluZ192aXJ0WyhudW0pICYgKFJYX1JJTkdfU0laRS0xKV0pCisjZGVmaW5lIFJYX0RFU0NfSU5GTyhyeCwgbnVtKQkoKHJ4KS0+cmluZ19pbmZvWyhudW0pICYgKFJYX1JJTkdfU0laRS0xKV0pCisjZGVmaW5lIFJYX0JVRkYocngsIG51bSkJKChyeCktPmJ1ZmZlcnNbKG51bSkgJiAoUlhfUklOR19TSVpFLTEpXSkKKyNkZWZpbmUgQ1NfREVTQyhjcywgbnVtKQkoKGNzKS0+Y2hhbi5yaW5nX3ZpcnRbKG51bSkgJiAoQ1NfUklOR19TSVpFLTEpXSkKKworI2RlZmluZSBSSU5HX1VTRUQocmluZykJKCgocmluZyktPm5leHRfdG9fZmlsbCAtIChyaW5nKS0+bmV4dF90b19jbGVhbikgXAorCQkJCSYgKChyaW5nKS0+c2l6ZSAtIDEpKQorI2RlZmluZSBSSU5HX0FWQUlMKHJpbmcpCSgocmluZy0+c2l6ZSkgLSBSSU5HX1VTRUQocmluZykpCiAKIC8qIFBDSSByZWdpc3RlciBvZmZzZXRzIGFuZCBmb3JtYXRzICovCiAKQEAgLTEwMSw2ICsxMzAsNyBAQAogCVBBU19NQUNfQ0ZHX0FEUjAgPSAweDhjLAogCVBBU19NQUNfQ0ZHX0FEUjEgPSAweDkwLAogCVBBU19NQUNfQ0ZHX1RYUCA9IDB4OTgsCisJUEFTX01BQ19DRkdfUk1PTiA9IDB4MTAwLAogCVBBU19NQUNfSVBDX0NITkwgPSAweDIwOCwKIH07CiAKQEAgLTE3Miw2ICsyMDIsOCBAQAogI2RlZmluZSBQQVNfTUFDX0NGR19UWFBfVElGRyh4KQkJKCgoeCkgPDwgUEFTX01BQ19DRkdfVFhQX1RJRkdfUykgJiBcCiAJCQkJCSBQQVNfTUFDX0NGR19UWFBfVElGR19NKQogCisjZGVmaW5lIFBBU19NQUNfUk1PTihyKQkJCSgweDEwMCsocikqNCkKKwogI2RlZmluZSBQQVNfTUFDX0lQQ19DSE5MX0RDSE5PX00JMHgwMDNmMDAwMAogI2RlZmluZSBQQVNfTUFDX0lQQ19DSE5MX0RDSE5PX1MJMTYKICNkZWZpbmUgUEFTX01BQ19JUENfQ0hOTF9EQ0hOTyh4KQkoKCh4KSA8PCBQQVNfTUFDX0lQQ19DSE5MX0RDSE5PX1MpICYgXApAQCAtMTgxLDQgKzIxMyw1IEBACiAjZGVmaW5lIFBBU19NQUNfSVBDX0NITkxfQkNIKHgpCQkoKCh4KSA8PCBQQVNfTUFDX0lQQ19DSE5MX0JDSF9TKSAmIFwKIAkJCQkJIFBBU19NQUNfSVBDX0NITkxfQkNIX00pCiAKKwogI2VuZGlmIC8qIFBBU0VNSV9NQUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZThkZjNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hY19ldGh0b29sLmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBQQSBTZW1pLCBJbmMKKyAqCisgKiBFdGh0b29sIGhvb2tzIGZvciB0aGUgUEEgU2VtaSBQV1JmaWNpZW50IG9uY2hpcCAxRy8xMEcgRXRoZXJuZXQgTUFDcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgorCisjaW5jbHVkZSA8YXNtL3Bhc2VtaV9kbWEuaD4KKyNpbmNsdWRlICJwYXNlbWlfbWFjLmgiCisKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgc3RyW0VUSF9HU1RSSU5HX0xFTl07Cit9IGV0aHRvb2xfc3RhdHNfa2V5c1tdID0geworCXsgInJ4LWRyb3BzIiB9LAorCXsgInJ4LWJ5dGVzIiB9LAorCXsgInJ4LXBhY2tldHMiIH0sCisJeyAicngtYnJvYWRjYXN0LXBhY2tldHMiIH0sCisJeyAicngtbXVsdGljYXN0LXBhY2tldHMiIH0sCisJeyAicngtY3JjLWVycm9ycyIgfSwKKwl7ICJyeC11bmRlcnNpemUtZXJyb3JzIiB9LAorCXsgInJ4LW92ZXJzaXplLWVycm9ycyIgfSwKKwl7ICJyeC1zaG9ydC1mcmFnbWVudC1lcnJvcnMiIH0sCisJeyAicngtamFiYmVyLWVycm9ycyIgfSwKKwl7ICJyeC02NC1ieXRlLXBhY2tldHMiIH0sCisJeyAicngtNjUtMTI3LWJ5dGUtcGFja2V0cyIgfSwKKwl7ICJyeC0xMjgtMjU1LWJ5dGUtcGFja2V0cyIgfSwKKwl7ICJyeC0yNTYtNTExLWJ5dGUtcGFja2V0cyIgfSwKKwl7ICJyeC01MTItMTAyMy1ieXRlLXBhY2tldHMiIH0sCisJeyAicngtMTAyNC0xNTE4LWJ5dGUtcGFja2V0cyIgfSwKKwl7ICJyeC1wYXVzZS1mcmFtZXMiIH0sCisJeyAidHgtYnl0ZXMiIH0sCisJeyAidHgtcGFja2V0cyIgfSwKKwl7ICJ0eC1icm9hZGNhc3QtcGFja2V0cyIgfSwKKwl7ICJ0eC1tdWx0aWNhc3QtcGFja2V0cyIgfSwKKwl7ICJ0eC1jb2xsaXNpb25zIiB9LAorCXsgInR4LWxhdGUtY29sbGlzaW9ucyIgfSwKKwl7ICJ0eC1leGNlc3NpdmUtY29sbGlzaW9ucyIgfSwKKwl7ICJ0eC1jcmMtZXJyb3JzIiB9LAorCXsgInR4LXVuZGVyc2l6ZS1lcnJvcnMiIH0sCisJeyAidHgtb3ZlcnNpemUtZXJyb3JzIiB9LAorCXsgInR4LTY0LWJ5dGUtcGFja2V0cyIgfSwKKwl7ICJ0eC02NS0xMjctYnl0ZS1wYWNrZXRzIiB9LAorCXsgInR4LTEyOC0yNTUtYnl0ZS1wYWNrZXRzIiB9LAorCXsgInR4LTI1Ni01MTEtYnl0ZS1wYWNrZXRzIiB9LAorCXsgInR4LTUxMi0xMDIzLWJ5dGUtcGFja2V0cyIgfSwKKwl7ICJ0eC0xMDI0LTE1MTgtYnl0ZS1wYWNrZXRzIiB9LAorfTsKKworc3RhdGljIGludAorcGFzZW1pX21hY19ldGh0b29sX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBtYWMtPnBoeWRldjsKKworCXJldHVybiBwaHlfZXRodG9vbF9nc2V0KHBoeWRldiwgY21kKTsKK30KKworc3RhdGljIHZvaWQKK3Bhc2VtaV9tYWNfZXRodG9vbF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RydWN0IHBhc2VtaV9tYWMgKm1hYzsKKwltYWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogY2xlYXIgYW5kIGZpbGwgb3V0IGluZm8gKi8KKwltZW1zZXQoZHJ2aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBldGh0b29sX2RydmluZm8pKTsKKwlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgInBhc2VtaV9tYWMiLCAxMik7CisJc3RyY3B5KGRydmluZm8tPnZlcnNpb24sICJOL0EiKTsKKwlzdHJjcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIk4vQSIpOworCXN0cm5jcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKG1hYy0+cGRldiksIDMyKTsKK30KKworc3RhdGljIHUzMgorcGFzZW1pX21hY19ldGh0b29sX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBtYWMtPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkCitwYXNlbWlfbWFjX2V0aHRvb2xfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJdTMyIGxldmVsKQoreworCXN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCW1hYy0+bXNnX2VuYWJsZSA9IGxldmVsOworfQorCisKK3N0YXRpYyB2b2lkCitwYXNlbWlfbWFjX2V0aHRvb2xfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQoreworCXN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXYtPnByaXY7CisKKwllcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBUWF9SSU5HX1NJWkUvMjsKKwllcmluZy0+dHhfcGVuZGluZyA9IFJJTkdfVVNFRChtYWMtPnR4KS8yOworCWVyaW5nLT5yeF9tYXhfcGVuZGluZyA9IFJYX1JJTkdfU0laRS80OworCWVyaW5nLT5yeF9wZW5kaW5nID0gUklOR19VU0VEKG1hYy0+cngpLzQ7Cit9CisKK3N0YXRpYyBpbnQgcGFzZW1pX21hY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKK3sKKwlzd2l0Y2ggKHNzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIEFSUkFZX1NJWkUoZXRodG9vbF9zdGF0c19rZXlzKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXNlbWlfbWFjX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCXN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKQoreworCXN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXYtPnByaXY7CisJaW50IGk7CisKKwlkYXRhWzBdID0gcGFzZW1pX3JlYWRfZG1hX3JlZyhQQVNfRE1BX1JYSU5UX1JDTURTVEEobWFjLT5kbWFfaWYpKQorCQkJPj4gUEFTX0RNQV9SWElOVF9SQ01EU1RBX0RST1BTX1M7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCWRhdGFbMStpXSA9IHBhc2VtaV9yZWFkX21hY19yZWcobWFjLT5kbWFfaWYsIFBBU19NQUNfUk1PTihpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhc2VtaV9tYWNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwKKwkJCQkgICB1OCAqZGF0YSkKK3sKKwltZW1jcHkoZGF0YSwgZXRodG9vbF9zdGF0c19rZXlzLCBzaXplb2YoZXRodG9vbF9zdGF0c19rZXlzKSk7Cit9CisKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBwYXNlbWlfbWFjX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MJCT0gcGFzZW1pX21hY19ldGh0b29sX2dldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8JCT0gcGFzZW1pX21hY19ldGh0b29sX2dldF9kcnZpbmZvLAorCS5nZXRfbXNnbGV2ZWwJCT0gcGFzZW1pX21hY19ldGh0b29sX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IHBhc2VtaV9tYWNfZXRodG9vbF9zZXRfbXNnbGV2ZWwsCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yaW5ncGFyYW0gICAgICAgICAgPSBwYXNlbWlfbWFjX2V0aHRvb2xfZ2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3N0cmluZ3MJCT0gcGFzZW1pX21hY19nZXRfc3RyaW5ncywKKwkuZ2V0X3NzZXRfY291bnQJCT0gcGFzZW1pX21hY19nZXRfc3NldF9jb3VudCwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBwYXNlbWlfbWFjX2dldF9ldGh0b29sX3N0YXRzLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCBlOGE2M2U0Li5jZTk1YzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMTI2OCw3ICsxMjY4LDcgQEAKIAkJfQogCX0KICAgICAKLQlpZiAoaW50ZXJydXB0cyAmJiBlaV9kZWJ1ZykgCisJaWYgKGludGVycnVwdHMgJiYgZWlfZGVidWcgPiAzKSAKIAl7CiAJCWhhbmRsZWQgPSAxOwogCQlpZiAobnJfc2VydmljZWQgPj0gTUFYX1NFUlZJQ0UpIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCA2MzIzOTg4Li5mZDgxNThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtNTkwLDYgKzU5MCwxMyBAQAogCWRldi0+aWZfcG9ydCA9IDA7CiAgICAgfQogCisgICAgaWYgKChsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPT0gMHgwM2MwKQorCSYmIChsaW5rLT5tYW5mX2lkID09IDB4MTQ5KSAmJiAobGluay0+Y2FyZF9pZCA9IDB4YzFhYikpIHsKKwlwcmludGsoS0VSTl9JTkZPICJwY25ldF9jczogdGhpcyBpcyBhbiBBWDg4MTkwIGNhcmQhXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJwY25ldF9jczogdXNlIGF4bmV0X2NzIGluc3RlYWQuXG4iKTsKKwlnb3RvIGZhaWxlZDsKKyAgICB9CisKICAgICBsb2NhbF9od19pbmZvID0gZ2V0X2h3aW5mbyhsaW5rKTsKICAgICBpZiAobG9jYWxfaHdfaW5mbyA9PSBOVUxMKQogCWxvY2FsX2h3X2luZm8gPSBnZXRfcHJvbShsaW5rKTsKQEAgLTE1NjcsMTIgKzE1NzQsMTEgQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMDQsIDB4MDE0NSksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTQ5LCAweDAyMzApLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE0OSwgMHg0NTMwKSwKLS8qCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE0OSwgMHhjMWFiKSwgY29uZmxpY3Qgd2l0aCBheG5ldF9jcyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE0OSwgMHhjMWFiKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxODYsIDB4MDExMCksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMWJmLCAweDIzMjgpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFiZiwgMHg4MDQxKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyMTMsIDB4MjQ1MiksCi0vKglQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyMWIsIDB4MDIwMiksIGNvbmZsaWN0IHdpdGggYXhuZXRfY3MgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNmYsIDB4MDMwMCksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjZmLCAweDAzMDcpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI2ZiwgMHgwMzBhKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKaW5kZXggZjE4ZWNhOS4uMjUwZWIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKQEAgLTU1OSw4ICs1NTksMTYgQEAKIAogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHRoZSBDSVMuICBJdCBpcyBzdG9yZWQgYXMgdGhlIGxhc3QKICAgICAgICAoZm91cnRoKSBzdHJpbmcgaW4gdGhlIFZlcnNpb24gMSBWZXJzaW9uL0lEIHR1cGxlLiAqLwotICAgIGlmIChsaW5rLT5wcm9kX2lkWzNdKSB7Ci0Jc3RhdGlvbl9hZGRyID0gbGluay0+cHJvZF9pZFszXTsKKyAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKKyAgICBpZiAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSBDU19TVUNDRVNTKSB7CisJcmMgPSAtMTsKKwlnb3RvIGZyZWVfY2ZnX21lbTsKKyAgICB9CisgICAgLyogVWdoIC0tIHRoZSBFTTExNDQgY2FyZCBoYXMgdHdvIFZFUlNfMSB0dXBsZXMhPyEgKi8KKyAgICBpZiAobmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpCisJZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKKyAgICBpZiAocGFyc2UtPnZlcnNpb25fMS5ucyA+IDMpIHsKKwlzdGF0aW9uX2FkZHIgPSBwYXJzZS0+dmVyc2lvbl8xLnN0ciArIHBhcnNlLT52ZXJzaW9uXzEub2ZzWzNdOwogCWlmIChjdnRfYXNjaWlfYWRkcmVzcyhkZXYsIHN0YXRpb25fYWRkcikgPT0gMCkgewogCQlyYyA9IDA7CiAJCWdvdG8gZnJlZV9jZmdfbWVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBmNGNhMDU5Li4zYWM4NTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNjcsNiArNjcsNyBAQAogCiBjb25maWcgRklYRURfUEhZCiAJYm9vbCAiRHJpdmVyIGZvciBNRElPIEJ1cy9QSFkgZW11bGF0aW9uIHdpdGggZml4ZWQgc3BlZWQvbGluayBQSFlzIgorCWRlcGVuZHMgb24gUEhZTElCPXkKIAktLS1oZWxwLS0tCiAJICBBZGRzIHRoZSBwbGF0Zm9ybSAiZml4ZWQiIE1ESU8gQnVzIHRvIGNvdmVyIHRoZSBib2FyZHMgdGhhdCB1c2UKIAkgIFBIWXMgdGhhdCBhcmUgbm90IGNvbm5lY3RlZCB0byB0aGUgcmVhbCBNRElPIGJ1cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKaW5kZXggNWI4MDM1OC4uNjBjNWNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKQEAgLTk5LDYgKzk5LDQxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBiY201NDgxX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJldDsKKworCS8qIEFuZWcgZmlyc2x5LiAqLworCXJldCA9IGdlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYpOworCisJLyogVGhlbiB3ZSBjYW4gc2V0IHVwIHRoZSBkZWxheS4gKi8KKwlpZiAocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQpIHsKKwkJdTE2IHJlZzsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBCQ001NDgxIHNwZWNpZmljYXRpb24gYXZhaWxhYmxlLCBzbyBkb3duCisJCSAqIGhlcmUgaXMgZXZlcnl0aGluZyB3ZSBrbm93IGFib3V0ICJyZWdpc3RlciAweDE4Ii4gVGhpcworCQkgKiBhdCBsZWFzdCBoZWxwcyBCQ001NDgxIHRvIHN1Y2Nlc3NmdWx5IHJlY2VpdmUgcGFja2V0cworCQkgKiBvbiBNUEM4MzYwRS1SREsgYm9hcmQuIFBldGVyIEJhcmFkYSA8cGV0ZXJiQGxvZ2ljcGQuY29tPgorCQkgKiBzYXlzOiAiVGhpcyBzZXRzIGRlbGF5IGJldHdlZW4gdGhlIFJYRCBhbmQgUlhDIHNpZ25hbHMKKwkJICogaW5zdGVhZCBvZiB1c2luZyB0cmFjZSBsZW5ndGhzIHRvIGFjaGlldmUgdGltaW5nIi4KKwkJICovCisKKwkJLyogU2V0IFJEWCBjbGsgZGVsYXkuICovCisJCXJlZyA9IDB4NyB8ICgweDcgPDwgMTIpOworCQlwaHlfd3JpdGUocGh5ZGV2LCAweDE4LCByZWcpOworCisJCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgMHgxOCk7CisJCS8qIFNldCBSRFgtUlhDIHNrZXcuICovCisJCXJlZyB8PSAoMSA8PCA4KTsKKwkJLyogV3JpdGUgYml0cyAxNDowLiAqLworCQlyZWcgfD0gKDEgPDwgMTUpOworCQlwaHlfd3JpdGUocGh5ZGV2LCAweDE4LCByZWcpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDExX2RyaXZlciA9IHsKIAkucGh5X2lkCQk9IDB4MDAyMDYwNzAsCiAJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKQEAgLTE0MSw4ICsxNzYsMzYgQEAKIAkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDY0X2RyaXZlciA9IHsKKwkucGh5X2lkCQk9IDB4MDAyMDYwYjAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiQnJvYWRjb20gQkNNNTQ2NCIsCisJLmZlYXR1cmVzCT0gUEhZX0dCSVRfRkVBVFVSRVMsCisJLmZsYWdzCQk9IFBIWV9IQVNfTUFHSUNBTkVHIHwgUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19pbml0CT0gYmNtNTR4eF9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCisJLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTQ4MV9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSAweDAxNDNiY2EwLAorCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCisJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0ODEiLAorCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTLAorCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdAk9IGJjbTU0eHhfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gYmNtNTQ4MV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmFja19pbnRlcnJ1cHQJPSBiY201NHh4X2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyCT0gYmNtNTR4eF9jb25maWdfaW50ciwKKwkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDgyX2RyaXZlciA9IHsKLSAgICAucGh5X2lkCQk9IDB4MDE0M2JjYjAsCisJLnBoeV9pZAkJPSAweDAxNDNiY2IwLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0ODIiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTLApAQCAtMTY4LDEyICsyMzEsMjIgQEAKIAlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201NDYxX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfNTQ2MTsKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201NDY0X2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfNTQ2NDsKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201NDgxX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfNTQ4MTsKIAlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201NDgyX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfNTQ4MjsKIAlyZXR1cm4gcmV0OwogCiBvdXRfNTQ4MjoKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0ODFfZHJpdmVyKTsKK291dF81NDgxOgorCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTQ2NF9kcml2ZXIpOworb3V0XzU0NjQ6CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201NDYxX2RyaXZlcik7CiBvdXRfNTQ2MToKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0MjFfZHJpdmVyKTsKQEAgLTE4Niw2ICsyNTksOCBAQAogc3RhdGljIHZvaWQgX19leGl0IGJyb2FkY29tX2V4aXQodm9pZCkKIHsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0ODJfZHJpdmVyKTsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0ODFfZHJpdmVyKTsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0NjRfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0NjFfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0MjFfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0MTFfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMgYi9kcml2ZXJzL25ldC9waHkvZGF2aWNvbS5jCmluZGV4IDdlZDYzMmQuLmQ5MjYxNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIE1JSV9ETTkxNjFfU0NSCQkweDEwCiAjZGVmaW5lIE1JSV9ETTkxNjFfU0NSX0lOSVQJMHgwNjEwCisjZGVmaW5lIE1JSV9ETTkxNjFfU0NSX1JNSUkJMHgwMTAwCiAKIC8qIERNOTE2MSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX0RNOTE2MV9JTlRSCTB4MTUKQEAgLTEwMyw3ICsxMDQsNyBAQAogCiBzdGF0aWMgaW50IGRtOTE2MV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWludCBlcnI7CisJaW50IGVyciwgdGVtcDsKIAogCS8qIElzb2xhdGUgdGhlIFBIWSAqLwogCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOwpAQCAtMTExLDkgKzExMiwxOSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRG8gbm90IGJ5cGFzcyB0aGUgc2NyYW1ibGVyL2Rlc2NyYW1ibGVyICovCi0JZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0RNOTE2MV9TQ1IsIE1JSV9ETTkxNjFfU0NSX0lOSVQpOworCXN3aXRjaCAocGh5ZGV2LT5pbnRlcmZhY2UpIHsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk6CisJCXRlbXAgPSBNSUlfRE05MTYxX1NDUl9JTklUOworCQlicmVhazsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOgorCQl0ZW1wID0gIE1JSV9ETTkxNjFfU0NSX0lOSVQgfCBNSUlfRE05MTYxX1NDUl9STUlJOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKKwkvKiBEbyBub3QgYnlwYXNzIHRoZSBzY3JhbWJsZXIvZGVzY3JhbWJsZXIgKi8KKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfRE05MTYxX1NDUiwgdGVtcCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jIGIvZHJpdmVycy9uZXQvcGh5L2ZpeGVkLmMKaW5kZXggY2E5YjA0MC4uNGUwNzk1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2ZpeGVkLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2ZpeGVkLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQlnb3RvIGVycl9wZGV2OwogCX0KIAotCWZtYi0+bWlpX2J1cy5pZCA9IDA7CisJc25wcmludGYoZm1iLT5taWlfYnVzLmlkLCBNSUlfQlVTX0lEX1NJWkUsICIwIik7CiAJZm1iLT5taWlfYnVzLm5hbWUgPSAiRml4ZWQgTURJTyBCdXMiOwogCWZtYi0+bWlpX2J1cy5kZXYgPSAmcGRldi0+ZGV2OwogCWZtYi0+bWlpX2J1cy5yZWFkID0gJmZpeGVkX21kaW9fcmVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCmluZGV4IGYwNTc0MDcuLjMyYTg1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYwpAQCAtNTgsOSArNTgsMjUgQEAKICNkZWZpbmUgTUlJX00xMTExX1JYX0RFTEFZCQkweDgwCiAjZGVmaW5lIE1JSV9NMTExMV9UWF9ERUxBWQkJMHgyCiAjZGVmaW5lIE1JSV9NMTExMV9QSFlfRVhUX1NSCQkweDFiCi0jZGVmaW5lIE1JSV9NMTExMV9IV0NGR19NT0RFX01BU0sJMHhmCi0jZGVmaW5lIE1JSV9NMTExMV9IV0NGR19NT0RFX1JHTUlJCTB4YgorCisjZGVmaW5lIE1JSV9NMTExMV9IV0NGR19NT0RFX01BU0sJCTB4ZgorI2RlZmluZSBNSUlfTTExMTFfSFdDRkdfTU9ERV9DT1BQRVJfUkdNSUkJMHhiCisjZGVmaW5lIE1JSV9NMTExMV9IV0NGR19NT0RFX0ZJQkVSX1JHTUlJCTB4MwogI2RlZmluZSBNSUlfTTExMTFfSFdDRkdfTU9ERV9TR01JSV9OT19DTEsJMHg0CisjZGVmaW5lIE1JSV9NMTExMV9IV0NGR19GSUJFUl9DT1BQRVJfQVVUTwkweDgwMDAKKyNkZWZpbmUgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9SRVMJMHgyMDAwCisKKyNkZWZpbmUgTUlJX00xMTExX0NPUFBFUgkJMAorI2RlZmluZSBNSUlfTTExMTFfRklCRVIJCQkxCisKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TVEFUVVMJCTB4MTEKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TVEFUVVNfMTAwMAkweDgwMDAKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TVEFUVVNfMTAwCTB4NDAwMAorI2RlZmluZSBNSUlfTTEwMTFfUEhZX1NUQVRVU19TUERfTUFTSwkweGMwMDAKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TVEFUVVNfRlVMTERVUExFWAkweDIwMDAKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TVEFUVVNfUkVTT0xWRUQJMHgwODAwCisjZGVmaW5lIE1JSV9NMTAxMV9QSFlfU1RBVFVTX0xJTksJMHgwNDAwCisKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIFBIWSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkFuZHkgRmxlbWluZyIpOwpAQCAtMTQxLDEyICsxNTcsMjIgQEAKIHN0YXRpYyBpbnQgbTg4ZTExMTFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlpbnQgZXJyOworCWludCB0ZW1wOworCWludCBtb2RlOworCisJLyogRW5hYmxlIEZpYmVyL0NvcHBlciBhdXRvIHNlbGVjdGlvbiAqLworCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9NMTExMV9QSFlfRVhUX1NSKTsKKwl0ZW1wIHw9IE1JSV9NMTExMV9IV0NGR19GSUJFUl9DT1BQRVJfQVVUTzsKKwlwaHlfd3JpdGUocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9TUiwgdGVtcCk7CisKKwl0ZW1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CisJdGVtcCB8PSBCTUNSX1JFU0VUOworCXBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCB0ZW1wKTsKIAogCWlmICgocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJKSB8fAogCSAgICAocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEKSB8fAogCSAgICAocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQpIHx8CiAJICAgIChwaHlkZXYtPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRCkpIHsKLQkJaW50IHRlbXA7CiAKIAkJdGVtcCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX00xMTExX1BIWV9FWFRfQ1IpOwogCQlpZiAodGVtcCA8IDApCkBAIC0xNzEsNyArMTk3LDEzIEBACiAJCQlyZXR1cm4gdGVtcDsKIAogCQl0ZW1wICY9IH4oTUlJX00xMTExX0hXQ0ZHX01PREVfTUFTSyk7Ci0JCXRlbXAgfD0gTUlJX00xMTExX0hXQ0ZHX01PREVfUkdNSUk7CisKKwkJbW9kZSA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX00xMTExX1BIWV9FWFRfQ1IpOworCisJCWlmIChtb2RlICYgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9SRVMpCisJCQl0ZW1wIHw9IE1JSV9NMTExMV9IV0NGR19NT0RFX0ZJQkVSX1JHTUlJOworCQllbHNlCisJCQl0ZW1wIHw9IE1JSV9NMTExMV9IV0NGR19NT0RFX0NPUFBFUl9SR01JSTsKIAogCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9TUiwgdGVtcCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTc5LDggKzIxMSw2IEBACiAJfQogCiAJaWYgKHBoeWRldi0+aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkgewotCQlpbnQgdGVtcDsKLQogCQl0ZW1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9TUik7CiAJCWlmICh0ZW1wIDwgMCkKIAkJCXJldHVybiB0ZW1wOwpAQCAtMjYyLDYgKzI5Miw5MyBAQAogCXJldHVybiAwOwogfQogCisvKiBtYXJ2ZWxsX3JlYWRfc3RhdHVzCisgKgorICogR2VuZXJpYyBzdGF0dXMgY29kZSBkb2VzIG5vdCBkZXRlY3QgRmliZXIgY29ycmVjdGx5IQorICogRGVzY3JpcHRpb246CisgKiAgIENoZWNrIHRoZSBsaW5rLCB0aGVuIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgc3RhdGUKKyAqICAgYnkgY29tcGFyaW5nIHdoYXQgd2UgYWR2ZXJ0aXNlIHdpdGggd2hhdCB0aGUgbGluayBwYXJ0bmVyCisgKiAgIGFkdmVydGlzZXMuICBTdGFydCBieSBjaGVja2luZyB0aGUgZ2lnYWJpdCBwb3NzaWJpbGl0aWVzLAorICogICB0aGVuIG1vdmUgb24gdG8gMTAvMTAwLgorICovCitzdGF0aWMgaW50IG1hcnZlbGxfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgYWR2OworCWludCBlcnI7CisJaW50IGxwYTsKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qIFVwZGF0ZSB0aGUgbGluaywgYnV0IHJldHVybiBpZiB0aGVyZQorCSAqIHdhcyBhbiBlcnJvciAqLworCWVyciA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoQVVUT05FR19FTkFCTEUgPT0gcGh5ZGV2LT5hdXRvbmVnKSB7CisJCXN0YXR1cyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX00xMDExX1BIWV9TVEFUVVMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJbHBhID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTFBBKTsKKwkJaWYgKGxwYSA8IDApCisJCQlyZXR1cm4gbHBhOworCisJCWFkdiA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0FEVkVSVElTRSk7CisJCWlmIChhZHYgPCAwKQorCQkJcmV0dXJuIGFkdjsKKworCQlscGEgJj0gYWR2OworCisJCWlmIChzdGF0dXMgJiBNSUlfTTEwMTFfUEhZX1NUQVRVU19GVUxMRFVQTEVYKQorCQkJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJZWxzZQorCQkJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQlzdGF0dXMgPSBzdGF0dXMgJiBNSUlfTTEwMTFfUEhZX1NUQVRVU19TUERfTUFTSzsKKwkJcGh5ZGV2LT5wYXVzZSA9IHBoeWRldi0+YXN5bV9wYXVzZSA9IDA7CisKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJY2FzZSBNSUlfTTEwMTFfUEhZX1NUQVRVU18xMDAwOgorCQkJcGh5ZGV2LT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQlicmVhazsKKworCQljYXNlIE1JSV9NMTAxMV9QSFlfU1RBVFVTXzEwMDoKKwkJCXBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcGh5ZGV2LT5zcGVlZCA9IFNQRUVEXzEwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocGh5ZGV2LT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKwkJCXBoeWRldi0+cGF1c2UgPSBscGEgJiBMUEFfUEFVU0VfQ0FQID8gMSA6IDA7CisJCQlwaHlkZXYtPmFzeW1fcGF1c2UgPSBscGEgJiBMUEFfUEFVU0VfQVNZTSA/IDEgOiAwOworCQl9CisJfSBlbHNlIHsKKwkJaW50IGJtY3IgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKKworCQlpZiAoYm1jciA8IDApCisJCQlyZXR1cm4gYm1jcjsKKworCQlpZiAoYm1jciAmIEJNQ1JfRlVMTERQTFgpCisJCQlwaHlkZXYtPmR1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQlwaHlkZXYtPmR1cGxleCA9IERVUExFWF9IQUxGOworCisJCWlmIChibWNyICYgQk1DUl9TUEVFRDEwMDApCisJCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJZWxzZSBpZiAoYm1jciAmIEJNQ1JfU1BFRUQxMDApCisJCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfMTAwOworCQllbHNlCisJCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfMTA7CisKKwkJcGh5ZGV2LT5wYXVzZSA9IHBoeWRldi0+YXN5bV9wYXVzZSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtYXJ2ZWxsX2RyaXZlcnNbXSA9IHsKIAl7CiAJCS5waHlfaWQgPSAweDAxNDEwYzYwLApAQCAtMjk2LDcgKzQxMyw3IEBACiAJCS5mbGFncyA9IFBIWV9IQVNfSU5URVJSVVBULAogCQkuY29uZmlnX2luaXQgPSAmbTg4ZTExMTFfY29uZmlnX2luaXQsCiAJCS5jb25maWdfYW5lZyA9ICZtYXJ2ZWxsX2NvbmZpZ19hbmVnLAotCQkucmVhZF9zdGF0dXMgPSAmZ2VucGh5X3JlYWRfc3RhdHVzLAorCQkucmVhZF9zdGF0dXMgPSAmbWFydmVsbF9yZWFkX3N0YXR1cywKIAkJLmFja19pbnRlcnJ1cHQgPSAmbWFydmVsbF9hY2tfaW50ZXJydXB0LAogCQkuY29uZmlnX2ludHIgPSAmbWFydmVsbF9jb25maWdfaW50ciwKIAkJLmRyaXZlciA9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKaW5kZXggNmU5ZjYxOS4uOTYzNjMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKQEAgLTQ5LDEzICs0OSwxMyBAQAogCWludCBpOwogCWludCBlcnIgPSAwOwogCi0JbXV0ZXhfaW5pdCgmYnVzLT5tZGlvX2xvY2spOwotCiAJaWYgKE5VTEwgPT0gYnVzIHx8IE5VTEwgPT0gYnVzLT5uYW1lIHx8CiAJCQlOVUxMID09IGJ1cy0+cmVhZCB8fAogCQkJTlVMTCA9PSBidXMtPndyaXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2luaXQoJmJ1cy0+bWRpb19sb2NrKTsKKwogCWlmIChidXMtPnJlc2V0KQogCQlidXMtPnJlc2V0KGJ1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IGY0YzRmZDguLjhiMTEyMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtODYsNiArODYsMzkgQEAKIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9jcmVhdGUpOwogCiAvKioKKyAqIGdldF9waHlfaWQgLSByZWFkcyB0aGUgc3BlY2lmaWVkIGFkZHIgZm9yIGl0cyBJRC4KKyAqIEBidXM6IHRoZSB0YXJnZXQgTUlJIGJ1cworICogQGFkZHI6IFBIWSBhZGRyZXNzIG9uIHRoZSBNSUkgYnVzCisgKiBAcGh5X2lkOiB3aGVyZSB0byBzdG9yZSB0aGUgSUQgcmV0cmlldmVkLgorICoKKyAqIERlc2NyaXB0aW9uOiBSZWFkcyB0aGUgSUQgcmVnaXN0ZXJzIG9mIHRoZSBQSFkgYXQgQGFkZHIgb24gdGhlCisgKiAgIEBidXMsIHN0b3JlcyBpdCBpbiBAcGh5X2lkIGFuZCByZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqLworaW50IGdldF9waHlfaWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiAqcGh5X2lkKQoreworCWludCBwaHlfcmVnOworCisJLyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMSwgYW5kIHB1dCB0aGVtCisJICogaW4gdGhlIHVwcGVyIGhhbGYgKi8KKwlwaHlfcmVnID0gYnVzLT5yZWFkKGJ1cywgYWRkciwgTUlJX1BIWVNJRDEpOworCisJaWYgKHBoeV9yZWcgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCSpwaHlfaWQgPSAocGh5X3JlZyAmIDB4ZmZmZikgPDwgMTY7CisKKwkvKiBHcmFiIHRoZSBiaXRzIGZyb20gUEhZSVIyLCBhbmQgcHV0IHRoZW0gaW4gdGhlIGxvd2VyIGhhbGYgKi8KKwlwaHlfcmVnID0gYnVzLT5yZWFkKGJ1cywgYWRkciwgTUlJX1BIWVNJRDIpOworCisJaWYgKHBoeV9yZWcgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCSpwaHlfaWQgfD0gKHBoeV9yZWcgJiAweGZmZmYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogZ2V0X3BoeV9kZXZpY2UgLSByZWFkcyB0aGUgc3BlY2lmaWVkIFBIWSBkZXZpY2UgYW5kIHJldHVybnMgaXRzIEBwaHlfZGV2aWNlIHN0cnVjdAogICogQGJ1czogdGhlIHRhcmdldCBNSUkgYnVzCiAgKiBAYWRkcjogUEhZIGFkZHJlc3Mgb24gdGhlIE1JSSBidXMKQEAgLTk1LDI2ICsxMjgsMTMgQEAKICAqLwogc3RydWN0IHBoeV9kZXZpY2UgKiBnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIHsKLQlpbnQgcGh5X3JlZzsKLQl1MzIgcGh5X2lkOwogCXN0cnVjdCBwaHlfZGV2aWNlICpkZXYgPSBOVUxMOworCXUzMiBwaHlfaWQ7CisJaW50IHI7CiAKLQkvKiBHcmFiIHRoZSBiaXRzIGZyb20gUEhZSVIxLCBhbmQgcHV0IHRoZW0KLQkgKiBpbiB0aGUgdXBwZXIgaGFsZiAqLwotCXBoeV9yZWcgPSBidXMtPnJlYWQoYnVzLCBhZGRyLCBNSUlfUEhZU0lEMSk7Ci0KLQlpZiAocGh5X3JlZyA8IDApCi0JCXJldHVybiBFUlJfUFRSKHBoeV9yZWcpOwotCi0JcGh5X2lkID0gKHBoeV9yZWcgJiAweGZmZmYpIDw8IDE2OwotCi0JLyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMiwgYW5kIHB1dCB0aGVtIGluIHRoZSBsb3dlciBoYWxmICovCi0JcGh5X3JlZyA9IGJ1cy0+cmVhZChidXMsIGFkZHIsIE1JSV9QSFlTSUQyKTsKLQotCWlmIChwaHlfcmVnIDwgMCkKLQkJcmV0dXJuIEVSUl9QVFIocGh5X3JlZyk7Ci0KLQlwaHlfaWQgfD0gKHBoeV9yZWcgJiAweGZmZmYpOworCXIgPSBnZXRfcGh5X2lkKGJ1cywgYWRkciwgJnBoeV9pZCk7CisJaWYgKHIpCisJCXJldHVybiBFUlJfUFRSKHIpOwogCiAJLyogSWYgdGhlIHBoeV9pZCBpcyBhbGwgRnMsIHRoZXJlIGlzIG5vIGRldmljZSB0aGVyZSAqLwogCWlmICgweGZmZmZmZmZmID09IHBoeV9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BsaXAuYyBiL2RyaXZlcnMvbmV0L3BsaXAuYwppbmRleCBmZWUzZDdiLi4xZTk2NTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvcGxpcC5jCkBAIC05MDMsMTcgKzkwMywxOCBAQAogCXN0cnVjdCBuZXRfbG9jYWwgKm5sOwogCXN0cnVjdCBwbGlwX2xvY2FsICpyY3Y7CiAJdW5zaWduZWQgY2hhciBjMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbmwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJjdiA9ICZubC0+cmN2X2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxICgmbmwtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlICgmbmwtPmxvY2ssIGZsYWdzKTsKIAogCWMwID0gcmVhZF9zdGF0dXMoZGV2KTsKIAlpZiAoKGMwICYgMHhmOCkgIT0gMHhjMCkgewogCQlpZiAoKGRldi0+aXJxICE9IC0xKSAmJiAobmV0X2RlYnVnID4gMSkpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNwdXJpb3VzIGludGVycnVwdFxuIiwgZGV2LT5uYW1lKTsKLQkJc3Bpbl91bmxvY2tfaXJxICgmbmwtPmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmbmwtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTQyLDcgKzk0Myw3IEBACiAJCWJyZWFrOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycSgmbmwtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5sLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHBvZS5jCmluZGV4IGFjMGFjOTguLjRmYWQ0ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9lLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2UuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAkvKiBPbmx5IGxvb2sgYXQgc29ja2V0cyB0aGF0IGFyZSB1c2luZyB0aGlzIHNwZWNpZmljIGRldmljZS4gKi8KQEAgLTM5Miw3ICszOTIsNyBAQAogCWlmICghKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlnb3RvIGRyb3A7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKQpAQCAtNDI0LDcgKzQyNCw3IEBACiAJc3RydWN0IHBwcG9lX2hkciAqcGg7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJZ290byBhYm9ydDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvbDJ0cC5jIGIvZHJpdmVycy9uZXQvcHBwb2wydHAuYwppbmRleCBlMGIwNzJkLi4zZDEwY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvbDJ0cC5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMKQEAgLTMwMiwxNCArMzAyLDE0IEBACiAJc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGhsaXN0X25vZGUgKndhbGs7CiAKLQlyZWFkX2xvY2soJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlc3Npb24sIHdhbGssIHNlc3Npb25fbGlzdCwgaGxpc3QpIHsKIAkJaWYgKHNlc3Npb24tPnR1bm5lbF9hZGRyLnNfc2Vzc2lvbiA9PSBzZXNzaW9uX2lkKSB7Ci0JCQlyZWFkX3VubG9jaygmdHVubmVsLT5obGlzdF9sb2NrKTsKKwkJCXJlYWRfdW5sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOwogCQkJcmV0dXJuIHNlc3Npb247CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2soJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTMyMCwxNCArMzIwLDE0IEBACiB7CiAJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDsKIAotCXJlYWRfbG9jaygmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1bm5lbCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0LCBsaXN0KSB7CiAJCWlmICh0dW5uZWwtPnN0YXRzLnR1bm5lbF9pZCA9PSB0dW5uZWxfaWQpIHsKLQkJCXJlYWRfdW5sb2NrKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwkJCXJlYWRfdW5sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAkJCXJldHVybiB0dW5uZWw7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2soJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtMzQyLDEwICszNDIsMTEgQEAKIHN0YXRpYyB2b2lkIHBwcG9sMnRwX3JlY3ZfcXVldWVfc2tiKHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBza19idWZmICpza2JwOworCXN0cnVjdCBza19idWZmICp0bXA7CiAJdTE2IG5zID0gUFBQT0wyVFBfU0tCX0NCKHNrYiktPm5zOwogCi0Jc3Bpbl9sb2NrKCZzZXNzaW9uLT5yZW9yZGVyX3EubG9jayk7Ci0Jc2tiX3F1ZXVlX3dhbGsoJnNlc3Npb24tPnJlb3JkZXJfcSwgc2ticCkgeworCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+cmVvcmRlcl9xLmxvY2spOworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnNlc3Npb24tPnJlb3JkZXJfcSwgc2ticCwgdG1wKSB7CiAJCWlmIChQUFBPTDJUUF9TS0JfQ0Ioc2ticCktPm5zID4gbnMpIHsKIAkJCV9fc2tiX2luc2VydChza2IsIHNrYnAtPnByZXYsIHNrYnAsICZzZXNzaW9uLT5yZW9yZGVyX3EpOwogCQkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfU0VRLCBLRVJOX0RFQlVHLApAQCAtMzYwLDcgKzM2MSw3IEBACiAJX19za2JfcXVldWVfdGFpbCgmc2Vzc2lvbi0+cmVvcmRlcl9xLCBza2IpOwogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJnNlc3Npb24tPnJlb3JkZXJfcS5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+cmVvcmRlcl9xLmxvY2spOwogfQogCiAvKiBEZXF1ZXVlIGEgc2luZ2xlIHNrYi4KQEAgLTM3MSwxMCArMzcyLDkgQEAKIAlpbnQgbGVuZ3RoID0gUFBQT0wyVFBfU0tCX0NCKHNrYiktPmxlbmd0aDsKIAlzdHJ1Y3Qgc29jayAqc2Vzc2lvbl9zb2NrID0gTlVMTDsKIAotCS8qIFdlJ3JlIGFib3V0IHRvIHJlcXVldWUgdGhlIHNrYiwgc28gdW5saW5rIGl0IGFuZCByZXR1cm4gcmVzb3VyY2VzCisJLyogV2UncmUgYWJvdXQgdG8gcmVxdWV1ZSB0aGUgc2tiLCBzbyByZXR1cm4gcmVzb3VyY2VzCiAJICogdG8gaXRzIGN1cnJlbnQgb3duZXIgKGEgc29ja2V0IHJlY2VpdmUgYnVmZmVyKS4KIAkgKi8KLQlza2JfdW5saW5rKHNrYiwgJnNlc3Npb24tPnJlb3JkZXJfcSk7CiAJc2tiX29ycGhhbihza2IpOwogCiAJdHVubmVsLT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC00NDIsNyArNDQyLDcgQEAKIAkgKiBleHBlY3QgdG8gc2VuZCB1cCBuZXh0LCBkZXF1ZXVlIGl0IGFuZCBhbnkgb3RoZXIKIAkgKiBpbi1zZXF1ZW5jZSBwYWNrZXRzIGJlaGluZCBpdC4KIAkgKi8KLQlzcGluX2xvY2soJnNlc3Npb24tPnJlb3JkZXJfcS5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnNlc3Npb24tPnJlb3JkZXJfcS5sb2NrKTsKIAlza2JfcXVldWVfd2Fsa19zYWZlKCZzZXNzaW9uLT5yZW9yZGVyX3EsIHNrYiwgdG1wKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIFBQUE9MMlRQX1NLQl9DQihza2IpLT5leHBpcmVzKSkgewogCQkJc2Vzc2lvbi0+c3RhdHMucnhfc2VxX2Rpc2NhcmRzKys7CkBAIC00NTUsNiArNDU1LDcgQEAKIAkJCSAgICAgICBza2JfcXVldWVfbGVuKCZzZXNzaW9uLT5yZW9yZGVyX3EpKTsKIAkJCV9fc2tiX3VubGluayhza2IsICZzZXNzaW9uLT5yZW9yZGVyX3EpOwogCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlzb2NrX3B1dChzZXNzaW9uLT5zb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTQ2OSwxMyArNDcwLDE4IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2soJnNlc3Npb24tPnJlb3JkZXJfcS5sb2NrKTsKKwkJX19za2JfdW5saW5rKHNrYiwgJnNlc3Npb24tPnJlb3JkZXJfcSk7CisKKwkJLyogUHJvY2VzcyB0aGUgc2tiLiBXZSByZWxlYXNlIHRoZSBxdWV1ZSBsb2NrIHdoaWxlIHdlCisJCSAqIGRvIHNvIHRvIGxldCBvdGhlciBjb250ZXh0cyBwcm9jZXNzIHRoZSBxdWV1ZS4KKwkJICovCisJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5yZW9yZGVyX3EubG9jayk7CiAJCXBwcG9sMnRwX3JlY3ZfZGVxdWV1ZV9za2Ioc2Vzc2lvbiwgc2tiKTsKLQkJc3Bpbl9sb2NrKCZzZXNzaW9uLT5yZW9yZGVyX3EubG9jayk7CisJCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+cmVvcmRlcl9xLmxvY2spOwogCX0KIAogb3V0OgotCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5yZW9yZGVyX3EubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPnJlb3JkZXJfcS5sb2NrKTsKIH0KIAogLyogSW50ZXJuYWwgcmVjZWl2ZSBmcmFtZS4gRG8gdGhlIHJlYWwgd29yayBvZiByZWNlaXZpbmcgYW4gTDJUUCBkYXRhIGZyYW1lCkBAIC0xMDU4LDcgKzEwNjQsNyBAQAogCiAJLyogR2V0IHJvdXRpbmcgaW5mbyBmcm9tIHRoZSB0dW5uZWwgc29ja2V0ICovCiAJZHN0X3JlbGVhc2Uoc2tiLT5kc3QpOwotCXNrYi0+ZHN0ID0gc2tfZHN0X2dldChza190dW4pOworCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKF9fc2tfZHN0X2dldChza190dW4pKTsKIAlza2Jfb3JwaGFuKHNrYik7CiAJc2tiLT5zayA9IHNrX3R1bjsKIApAQCAtMTEwNiwxMCArMTExMiwxMiBAQAogCVBSSU5USyh0dW5uZWwtPmRlYnVnLCBQUFBPTDJUUF9NU0dfQ09OVFJPTCwgS0VSTl9JTkZPLAogCSAgICAgICAiJXM6IGNsb3NpbmcgYWxsIHNlc3Npb25zLi4uXG4iLCB0dW5uZWwtPm5hbWUpOwogCi0Jd3JpdGVfbG9jaygmdHVubmVsLT5obGlzdF9sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOwogCWZvciAoaGFzaCA9IDA7IGhhc2ggPCBQUFBPTDJUUF9IQVNIX1NJWkU7IGhhc2grKykgewogYWdhaW46CiAJCWhsaXN0X2Zvcl9lYWNoX3NhZmUod2FsaywgdG1wLCAmdHVubmVsLT5zZXNzaW9uX2hsaXN0W2hhc2hdKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCiAJCQlzZXNzaW9uID0gaGxpc3RfZW50cnkod2Fsaywgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24sIGhsaXN0KTsKIAogCQkJc2sgPSBzZXNzaW9uLT5zb2NrOwpAQCAtMTEyNiw3ICsxMTM0LDcgQEAKIAkJCSAqIGRpc2FwcGVhciBhcyB3ZSdyZSBqdW1waW5nIGJldHdlZW4gbG9ja3MuCiAJCQkgKi8KIAkJCXNvY2tfaG9sZChzayk7Ci0JCQl3cml0ZV91bmxvY2soJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJCQl3cml0ZV91bmxvY2tfYmgoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAJCQlsb2NrX3NvY2soc2spOwogCiAJCQlpZiAoc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgewpAQCAtMTEzOCw3ICsxMTQ2LDEwIEBACiAJCQkvKiBQdXJnZSBhbnkgcXVldWVkIGRhdGEgKi8KIAkJCXNrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOwogCQkJc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfd3JpdGVfcXVldWUpOwotCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5yZW9yZGVyX3EpOworCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2Vzc2lvbi0+cmVvcmRlcl9xKSkpIHsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQlzb2NrX3B1dChzayk7CisJCQl9CiAKIAkJCXJlbGVhc2Vfc29jayhzayk7CiAJCQlzb2NrX3B1dChzayk7CkBAIC0xMTQ4LDExICsxMTU5LDExIEBACiAJCQkgKiBsaXN0IHNvIHdlIGFyZSBndWFyYW50ZWVkIHRvIG1ha2UgZm9yd2FyZAogCQkJICogcHJvZ3Jlc3MuCiAJCQkgKi8KLQkJCXdyaXRlX2xvY2soJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJCQl3cml0ZV9sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOwogCQkJZ290byBhZ2FpbjsKIAkJfQogCX0KLQl3cml0ZV91bmxvY2soJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOwogfQogCiAvKiBSZWFsbHkga2lsbCB0aGUgdHVubmVsLgpAQCAtMTE2MSw5ICsxMTcyLDkgQEAKIHN0YXRpYyB2b2lkIHBwcG9sMnRwX3R1bm5lbF9mcmVlKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbCkKIHsKIAkvKiBSZW1vdmUgZnJvbSBzb2NrZXQgbGlzdCAqLwotCXdyaXRlX2xvY2soJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOwogCWxpc3RfZGVsX2luaXQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOwogCiAJYXRvbWljX2RlYygmcHBwb2wydHBfdHVubmVsX2NvdW50KTsKIAlrZnJlZSh0dW5uZWwpOwpAQCAtMTIzOSw5ICsxMjUwLDkgQEAKIAkJCQkvKiBEZWxldGUgdGhlIHNlc3Npb24gc29ja2V0IGZyb20gdGhlCiAJCQkJICogaGFzaAogCQkJCSAqLwotCQkJCXdyaXRlX2xvY2soJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJCQkJd3JpdGVfbG9ja19iaCgmdHVubmVsLT5obGlzdF9sb2NrKTsKIAkJCQlobGlzdF9kZWxfaW5pdCgmc2Vzc2lvbi0+aGxpc3QpOwotCQkJCXdyaXRlX3VubG9jaygmdHVubmVsLT5obGlzdF9sb2NrKTsKKwkJCQl3cml0ZV91bmxvY2tfYmgoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAKIAkJCQlhdG9taWNfZGVjKCZwcHBvbDJ0cF9zZXNzaW9uX2NvdW50KTsKIAkJCX0KQEAgLTEzODYsOSArMTM5Nyw5IEBACiAKIAkvKiBBZGQgdHVubmVsIHRvIG91ciBsaXN0ICovCiAJSU5JVF9MSVNUX0hFQUQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfbG9jaygmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAJbGlzdF9hZGQoJnR1bm5lbC0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLQl3cml0ZV91bmxvY2soJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAJYXRvbWljX2luYygmcHBwb2wydHBfdHVubmVsX2NvdW50KTsKIAogCS8qIEJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudC4gVGhlIHR1bm5lbCBjb250ZXh0IGlzIGRlbGV0ZWQKQEAgLTE1OTMsMTEgKzE2MDQsMTEgQEAKIAlzay0+c2tfdXNlcl9kYXRhID0gc2Vzc2lvbjsKIAogCS8qIEFkZCBzZXNzaW9uIHRvIHRoZSB0dW5uZWwncyBoYXNoIGxpc3QgKi8KLQl3cml0ZV9sb2NrKCZ0dW5uZWwtPmhsaXN0X2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAJaGxpc3RfYWRkX2hlYWQoJnNlc3Npb24tPmhsaXN0LAogCQkgICAgICAgcHBwb2wydHBfc2Vzc2lvbl9pZF9oYXNoKHR1bm5lbCwKIAkJCQkJCXNlc3Npb24tPnR1bm5lbF9hZGRyLnNfc2Vzc2lvbikpOwotCXdyaXRlX3VubG9jaygmdHVubmVsLT5obGlzdF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAKIAlhdG9taWNfaW5jKCZwcHBvbDJ0cF9zZXNzaW9uX2NvdW50KTsKIApAQCAtMjE5OSw3ICsyMjEwLDcgQEAKIAlpbnQgbmV4dCA9IDA7CiAJaW50IGk7CiAKLQlyZWFkX2xvY2soJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBQUFBPTDJUUF9IQVNIX1NJWkU7IGkrKykgewogCQlobGlzdF9mb3JfZWFjaF9lbnRyeShzZXNzaW9uLCB3YWxrLCAmdHVubmVsLT5zZXNzaW9uX2hsaXN0W2ldLCBobGlzdCkgewogCQkJaWYgKGN1cnIgPT0gTlVMTCkgewpAQCAtMjIxNyw3ICsyMjI4LDcgQEAKIAkJfQogCX0KIG91dDoKLQlyZWFkX3VubG9jaygmdHVubmVsLT5obGlzdF9sb2NrKTsKKwlyZWFkX3VubG9ja19iaCgmdHVubmVsLT5obGlzdF9sb2NrKTsKIAlpZiAoIWZvdW5kKQogCQlzZXNzaW9uID0gTlVMTDsKIApAQCAtMjIyOCwxMyArMjIzOSwxMyBAQAogewogCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbCA9IE5VTEw7CiAKLQlyZWFkX2xvY2soJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAJaWYgKGxpc3RfaXNfbGFzdCgmY3Vyci0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkgewogCQlnb3RvIG91dDsKIAl9CiAJdHVubmVsID0gbGlzdF9lbnRyeShjdXJyLT5saXN0Lm5leHQsIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwsIGxpc3QpOwogb3V0OgotCXJlYWRfdW5sb2NrKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwlyZWFkX3VubG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gdHVubmVsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCmluZGV4IDdlYjZlN2UuLmUzNjVlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKQEAgLTEyNjYsNiArMTI2Niw4NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBnZWxpY19uZXRfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCWlmICgwIDw9IHBzM19jb21wYXJlX2Zpcm13YXJlX3ZlcnNpb24oMiwgMiwgMCkpCisJCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQzsKKwllbHNlCisJCXdvbC0+c3VwcG9ydGVkID0gMDsKKworCXdvbC0+d29sb3B0cyA9IHBzM19zeXNfbWFuYWdlcl9nZXRfd29sKCkgPyB3b2wtPnN1cHBvcnRlZCA6IDA7CisJbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7Cit9CitzdGF0aWMgaW50IGdlbGljX25ldF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBnZWxpY19jYXJkICpjYXJkOworCXU2NCB2MSwgdjI7CisKKwlpZiAocHMzX2NvbXBhcmVfZmlybXdhcmVfdmVyc2lvbigyLCAyLCAwKSA8IDAgfHwKKwkgICAgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FyZCA9IG5ldGRldl9jYXJkKG5ldGRldik7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpIHsKKwkJc3RhdHVzID0gbHYxX25ldF9jb250cm9sKGJ1c19pZChjYXJkKSwgZGV2X2lkKGNhcmQpLAorCQkJCQkgR0VMSUNfTFYxX1NFVF9XT0wsCisJCQkJCSBHRUxJQ19MVjFfV09MX01BR0lDX1BBQ0tFVCwKKwkJCQkJIDAsIEdFTElDX0xWMV9XT0xfTVBfRU5BQkxFLAorCQkJCQkgJnYxLCAmdjIpOworCQlpZiAoc3RhdHVzKSB7CisJCQlwcl9pbmZvKCIlczogZW5hYmxpbmcgV09MIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sCisJCQkJc3RhdHVzKTsKKwkJCXN0YXR1cyA9IC1FSU87CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJc3RhdHVzID0gbHYxX25ldF9jb250cm9sKGJ1c19pZChjYXJkKSwgZGV2X2lkKGNhcmQpLAorCQkJCQkgR0VMSUNfTFYxX1NFVF9XT0wsCisJCQkJCSBHRUxJQ19MVjFfV09MX0FERF9NQVRDSF9BRERSLAorCQkJCQkgMCwgR0VMSUNfTFYxX1dPTF9NQVRDSF9BTEwsCisJCQkJCSAmdjEsICZ2Mik7CisJCWlmICghc3RhdHVzKQorCQkJcHMzX3N5c19tYW5hZ2VyX3NldF93b2woMSk7CisJCWVsc2UgeworCQkJcHJfaW5mbygiJXM6IGVuYWJsaW5nIFdPTCBmaWx0ZXIgZmFpbGVkICVkXG4iLAorCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQkJc3RhdHVzID0gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IGx2MV9uZXRfY29udHJvbChidXNfaWQoY2FyZCksIGRldl9pZChjYXJkKSwKKwkJCQkJIEdFTElDX0xWMV9TRVRfV09MLAorCQkJCQkgR0VMSUNfTFYxX1dPTF9NQUdJQ19QQUNLRVQsCisJCQkJCSAwLCBHRUxJQ19MVjFfV09MX01QX0RJU0FCTEUsCisJCQkJCSAmdjEsICZ2Mik7CisJCWlmIChzdGF0dXMpIHsKKwkJCXByX2luZm8oIiVzOiBkaXNhYmxpbmcgV09MIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sCisJCQkJc3RhdHVzKTsKKwkJCXN0YXR1cyA9IC1FSU87CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJc3RhdHVzID0gbHYxX25ldF9jb250cm9sKGJ1c19pZChjYXJkKSwgZGV2X2lkKGNhcmQpLAorCQkJCQkgR0VMSUNfTFYxX1NFVF9XT0wsCisJCQkJCSBHRUxJQ19MVjFfV09MX0RFTEVURV9NQVRDSF9BRERSLAorCQkJCQkgMCwgR0VMSUNfTFYxX1dPTF9NQVRDSF9BTEwsCisJCQkJCSAmdjEsICZ2Mik7CisJCWlmICghc3RhdHVzKQorCQkJcHMzX3N5c19tYW5hZ2VyX3NldF93b2woMCk7CisJCWVsc2UgeworCQkJcHJfaW5mbygiJXM6IHJlbW92aW5nIFdPTCBmaWx0ZXIgZmFpbGVkICVkXG4iLAorCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQkJc3RhdHVzID0gLUVJTzsKKwkJfQorCX0KK2RvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBnZWxpY19ldGhlcl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwk9IGdlbGljX2V0aGVyX2dldF9zZXR0aW5ncywKQEAgLTEyNzQsNiArMTM1Myw4IEBACiAJLnNldF90eF9jc3VtCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKIAkuZ2V0X3J4X2NzdW0JPSBnZWxpY19uZXRfZ2V0X3J4X2NzdW0sCiAJLnNldF9yeF9jc3VtCT0gZ2VsaWNfbmV0X3NldF9yeF9jc3VtLAorCS5nZXRfd29sCT0gZ2VsaWNfbmV0X2dldF93b2wsCisJLnNldF93b2wJPSBnZWxpY19uZXRfc2V0X3dvbCwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oCmluZGV4IDFkMzlkMDYuLjUyMGYxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuaAorKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmgKQEAgLTE4MiwxMiArMTgyLDMyIEBACiAJR0VMSUNfTFYxX0dFVF9FVEhfUE9SVF9TVEFUVVMJPSAyLAogCUdFTElDX0xWMV9TRVRfTkVHT1RJQVRJT05fTU9ERQk9IDMsCiAJR0VMSUNfTFYxX0dFVF9WTEFOX0lECQk9IDQsCisJR0VMSUNfTFYxX1NFVF9XT0wJCT0gNSwKIAlHRUxJQ19MVjFfR0VUX0NIQU5ORUwgICAgICAgICAgID0gNiwKIAlHRUxJQ19MVjFfUE9TVF9XTEFOX0NNRAkJPSA5LAogCUdFTElDX0xWMV9HRVRfV0xBTl9DTURfUkVTVUxUCT0gMTAsCiAJR0VMSUNfTFYxX0dFVF9XTEFOX0VWRU5UCT0gMTEKIH07CiAKKy8qIGZvciBHRUxJQ19MVjFfU0VUX1dPTCAqLworZW51bSBnZWxpY19sdjFfd29sX2NvbW1hbmQgeworCUdFTElDX0xWMV9XT0xfTUFHSUNfUEFDS0VUCT0gMSwKKwlHRUxJQ19MVjFfV09MX0FERF9NQVRDSF9BRERSCT0gNiwKKwlHRUxJQ19MVjFfV09MX0RFTEVURV9NQVRDSF9BRERSCT0gNywKK307CisKKy8qIGZvciBHRUxJQ19MVjFfV09MX01BR0lDX1BBQ0tFVCAqLworZW51bSBnZWxpY19sdjFfd29sX21wX2FyZyB7CisJR0VMSUNfTFYxX1dPTF9NUF9ESVNBQkxFCT0gMCwKKwlHRUxJQ19MVjFfV09MX01QX0VOQUJMRQkJPSAxLAorfTsKKworLyogZm9yIEdFTElDX0xWMV9XT0xfe0FERCxERUxFVEV9X01BVENIX0FERFIgKi8KK2VudW0gZ2VsaWNfbHYxX3dvbF9tYXRjaF9hcmcgeworCUdFTElDX0xWMV9XT0xfTUFUQ0hfSU5ESVZJRFVBTAk9IDAsCisJR0VMSUNfTFYxX1dPTF9NQVRDSF9BTEwJCT0gMSwKK307CisKIC8qIHN0YXR1cyByZXR1cmVuZWQgZnJvbSBHRVRfRVRIX1BPUlRfU1RBVFVTICovCiBlbnVtIGdlbGljX2x2MV9ldGhlcl9wb3J0X3N0YXR1cyB7CiAJR0VMSUNfTFYxX0VUSEVSX0xJTktfVVAJCT0gMHgwMDAwMDAwMDAwMDAwMDAxTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKaW5kZXggNzUwZDJhOS4uMGQzMjEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcHJlY2lzZV9pZSh2b2lkKQogewotCXJldHVybiAwOyAvKiBGSVhNRSAqLworCXJldHVybiAoMCA8PSBwczNfY29tcGFyZV9maXJtd2FyZV92ZXJzaW9uKDIsIDIsIDApKTsKIH0KIC8qCiAgKiBwb3N0X2V1cnVzX2NtZCBoZWxwZXJzCkBAIC01MTIsMTMgKzUxMiwxOCBAQAogCQkgZGF0YSwgbGVuKTsKIAltZW1zZXQoaWVfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpZV9pbmZvKSk7CiAKLQl3aGlsZSAoMCA8IGRhdGFfbGVmdCkgeworCXdoaWxlICgyIDw9IGRhdGFfbGVmdCkgewogCQlpdGVtX2lkID0gKnBvcysrOwogCQlpdGVtX2xlbiA9ICpwb3MrKzsKKwkJZGF0YV9sZWZ0IC09IDI7CisKKwkJaWYgKGRhdGFfbGVmdCA8IGl0ZW1fbGVuKQorCQkJYnJlYWs7CiAKIAkJc3dpdGNoIChpdGVtX2lkKSB7CiAJCWNhc2UgTUZJRV9UWVBFX0dFTkVSSUM6Ci0JCQlpZiAoIW1lbWNtcChwb3MsIHdwYV9vdWksIE9VSV9MRU4pICYmCisJCQlpZiAoKE9VSV9MRU4gKyAxIDw9IGl0ZW1fbGVuKSAmJgorCQkJICAgICFtZW1jbXAocG9zLCB3cGFfb3VpLCBPVUlfTEVOKSAmJgogCQkJICAgIHBvc1tPVUlfTEVOXSA9PSAweDAxKSB7CiAJCQkJaWVfaW5mby0+d3BhLmRhdGEgPSBwb3MgLSAyOwogCQkJCWllX2luZm8tPndwYS5sZW4gPSBpdGVtX2xlbiArIDI7CkBAIC01MzUsNyArNTQwLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXBvcyArPSBpdGVtX2xlbjsKLQkJZGF0YV9sZWZ0IC09IGl0ZW1fbGVuICsgMjsKKwkJZGF0YV9sZWZ0IC09IGl0ZW1fbGVuOwogCX0KIAlwcl9kZWJ1ZygiJXM6IHdwYT0lcCwlZCB3cGEyPSVwLCVkXG4iLCBfX2Z1bmNfXywKIAkJIGllX2luZm8tPndwYS5kYXRhLCBpZV9pbmZvLT53cGEubGVuLApAQCAtMTY0NCwxMyArMTY0OSwyNCBAQAogCX0KIAogCS8qIHB1dCB0aGVtIGluIHRoZSBuZXd0b3JrX2xpc3QgKi8KLQlzY2FuX2luZm8gPSB3bC0+YnVmOwotCXNjYW5faW5mb19zaXplID0gMDsKLQlpID0gMDsKLQl3aGlsZSAoc2Nhbl9pbmZvX3NpemUgPCBkYXRhX2xlbikgeworCWZvciAoaSA9IDAsIHNjYW5faW5mb19zaXplID0gMCwgc2Nhbl9pbmZvID0gd2wtPmJ1ZjsKKwkgICAgIHNjYW5faW5mb19zaXplIDwgZGF0YV9sZW47CisJICAgICBpKyssIHNjYW5faW5mb19zaXplICs9IGJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSksCisJICAgICBzY2FuX2luZm8gPSAodm9pZCAqKXNjYW5faW5mbyArIGJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSkpIHsKIAkJcHJfZGVidWcoIiVzOnNpemU9JWQgYnNzaWQ9JXMgc2Nhbl9pbmZvPSVwXG4iLCBfX2Z1bmNfXywKIAkJCSBiZTE2X3RvX2NwdShzY2FuX2luZm8tPnNpemUpLAogCQkJIHByaW50X21hYyhtYWMsICZzY2FuX2luZm8tPmJzc2lkWzJdKSwgc2Nhbl9pbmZvKTsKKworCQkvKgorCQkgKiBUaGUgd2lyZWxlc3MgZmlybXdhcmUgbWF5IHJldHVybiBpbnZhbGlkIGNoYW5uZWwgMCBhbmQvb3IKKwkJICogaW52YWxpZCByYXRlIGlmIHRoZSBBUCBlbWl0cyB6ZXJvIGxlbmd0aCBTU0lEIGllLiBBcyB0aGlzCisJCSAqIHNjYW4gaW5mb3JtYXRpb24gaXMgdXNlbGVzcywgaWdub3JlIGl0CisJCSAqLworCQlpZiAoIWJlMTZfdG9fY3B1KHNjYW5faW5mby0+Y2hhbm5lbCkgfHwgIXNjYW5faW5mby0+cmF0ZVswXSkgeworCQkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIHNjYW4gaW5mb1xuIiwgX19mdW5jX18pOworCQkJY29udGludWU7CisJCX0KKwogCQlmb3VuZCA9IDA7CiAJCW9sZGVzdCA9IE5VTEw7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodGFyZ2V0LCAmd2wtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewpAQCAtMTY4NywxMCArMTcwMyw2IEBACiAJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0YXJnZXQtPmh3aW5mbykgewogCQkJcHJfaW5mbygiJXM6IGt6YWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCQlpKys7Ci0JCQlzY2FuX2luZm9fc2l6ZSArPSBiZTE2X3RvX2NwdShzY2FuX2luZm8tPnNpemUpOwotCQkJc2Nhbl9pbmZvID0gKHZvaWQgKilzY2FuX2luZm8gKwotCQkJCWJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBjb3B5IGh3IHNjYW4gaW5mbyAqLwpAQCAtMTcwOSwxMCArMTcyMSw2IEBACiAJCQlpZiAoc2Nhbl9pbmZvLT5leHRfcmF0ZVtyXSkKIAkJCQl0YXJnZXQtPnJhdGVfZXh0X2xlbisrOwogCQlsaXN0X21vdmVfdGFpbCgmdGFyZ2V0LT5saXN0LCAmd2wtPm5ldHdvcmtfbGlzdCk7Ci0JCS8qIGJ1bXAgcG9pbnRlciAqLwotCQlpKys7Ci0JCXNjYW5faW5mb19zaXplICs9IGJlMTZfdG9fY3B1KHNjYW5faW5mby0+c2l6ZSk7Ci0JCXNjYW5faW5mbyA9ICh2b2lkICopc2Nhbl9pbmZvICsgYmUxNl90b19jcHUoc2Nhbl9pbmZvLT5zaXplKTsKIAl9CiAJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQocG9ydF90b19uZXRkZXYod2xfcG9ydCh3bCkpLCBTSU9DR0lXU0NBTiwgJmRhdGEsCkBAIC0yMzg5LDYgKzIzOTcsOCBAQAogCWlmICghbmV0ZGV2KQogCQlyZXR1cm4gTlVMTDsKIAorCXN0cmNweShuZXRkZXYtPm5hbWUsICJ3bGFuJWQiKTsKKwogCXBvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXBvcnQtPm5ldGRldiA9IG5ldGRldjsKIAlwb3J0LT5jYXJkID0gY2FyZDsKQEAgLTI2OTAsNiArMjcwMCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogc2V0dXAgbmV0X2RldmljZSBzdHJ1Y3R1cmUgKi8KKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZjYXJkLT5kZXYtPmNvcmUpOwogCWdlbGljX3dsX3NldHVwX25ldGRldl9vcHMobmV0ZGV2KTsKIAogCS8qIHNldHVwIHNvbWUgb2YgbmV0X2RldmljZSBhbmQgcmVnaXN0ZXIgaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwppbmRleCBhNmFlYjlkLi5iN2Y3YjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCkBAIC0yNDcyLDggKzI0NzIsNyBAQAogCiAJaWYgKHNlZ19jbnQgPT0gMSkgewogCQkvKiBUZXJtaW5hdGUgdGhlIGxhc3Qgc2VnbWVudC4gKi8KLQkJb2FsX2VudHJ5LT5sZW4gPQotCQkgICAgY3B1X3RvX2xlMzIobGUzMl90b19jcHUob2FsX2VudHJ5LT5sZW4pIHwgT0FMX0xBU1RfRU5UUlkpOworCQlvYWxfZW50cnktPmxlbiB8PSBjcHVfdG9fbGUzMihPQUxfTEFTVF9FTlRSWSk7CiAJfSBlbHNlIHsKIAkJb2FsID0gdHhfY2ItPm9hbDsKIAkJZm9yIChjb21wbGV0ZWRfc2Vncz0wOyBjb21wbGV0ZWRfc2VnczxmcmFnX2NudDsgY29tcGxldGVkX3NlZ3MrKyxzZWcrKykgewpAQCAtMjUzMCw4ICsyNTI5LDcgQEAKIAkJCQkJICBmcmFnLT5zaXplKTsKIAkJfQogCQkvKiBUZXJtaW5hdGUgdGhlIGxhc3Qgc2VnbWVudC4gKi8KLQkJb2FsX2VudHJ5LT5sZW4gPQotCQkgICAgY3B1X3RvX2xlMzIobGUzMl90b19jcHUob2FsX2VudHJ5LT5sZW4pIHwgT0FMX0xBU1RfRU5UUlkpOworCQlvYWxfZW50cnktPmxlbiB8PSBjcHVfdG9fbGUzMihPQUxfTEFTVF9FTlRSWSk7CiAJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I2MDQwLmMgYi9kcml2ZXJzL25ldC9yNjA0MC5jCmluZGV4IDE5MTg0ZTQuLjE2OWVkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtMjM5LDcgKzIzOSw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfRENOVDsgaSsrKSB7CiAJCWlmIChscC0+dHhfaW5zZXJ0X3B0ci0+c2tiX3B0cikgewotCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGRldiwgbHAtPnR4X2luc2VydF9wdHItPmJ1ZiwKKwkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBkZXYsCisJCQkJbGUzMl90b19jcHUobHAtPnR4X2luc2VydF9wdHItPmJ1ZiksCiAJCQkJTUFYX0JVRl9TSVpFLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2IobHAtPnR4X2luc2VydF9wdHItPnNrYl9wdHIpOwogCQkJbHAtPnJ4X2luc2VydF9wdHItPnNrYl9wdHIgPSBOVUxMOwpAQCAtMjU1LDcgKzI1Niw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgUlhfRENOVDsgaSsrKSB7CiAJCWlmIChscC0+cnhfaW5zZXJ0X3B0ci0+c2tiX3B0cikgewotCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGRldiwgbHAtPnJ4X2luc2VydF9wdHItPmJ1ZiwKKwkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBkZXYsCisJCQkJbGUzMl90b19jcHUobHAtPnJ4X2luc2VydF9wdHItPmJ1ZiksCiAJCQkJTUFYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihscC0+cnhfaW5zZXJ0X3B0ci0+c2tiX3B0cik7CiAJCQlscC0+cnhfaW5zZXJ0X3B0ci0+c2tiX3B0ciA9IE5VTEw7CkBAIC01NDIsNyArNTQ0LDcgQEAKIAkJCXNrYl9wdHItPmRldiA9IHByaXYtPmRldjsKIAkJCS8qIERvIG5vdCBjb3VudCB0aGUgQ1JDICovCiAJCQlza2JfcHV0KHNrYl9wdHIsIGRlc2NwdHItPmxlbiAtIDQpOwotCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkZXNjcHRyLT5idWYsCisJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGxlMzJfdG9fY3B1KGRlc2NwdHItPmJ1ZiksCiAJCQkJTUFYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJc2tiX3B0ci0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2JfcHRyLCBwcml2LT5kZXYpOwogCQkJLyogU2VuZCB0byB1cHBlciBsYXllciAqLwpAQCAtNTg1LDcgKzU4Nyw3IEBACiAJCWlmIChkZXNjcHRyLT5zdGF0dXMgJiAweDgwMDApCiAJCQlicmVhazsgLyogTm90IGNvbXBsZXRlICovCiAJCXNrYl9wdHIgPSBkZXNjcHRyLT5za2JfcHRyOwotCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRlc2NwdHItPmJ1ZiwKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBsZTMyX3RvX2NwdShkZXNjcHRyLT5idWYpLAogCQkJc2tiX3B0ci0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJLyogRnJlZSBidWZmZXIgKi8KIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiX3B0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggNjE3OWEwYS4uZGNiZTAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtNTAsNiArNTAsOCBAQAogICogICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlcyAnMScgZm9yIGVuYWJsZSAsICcwJyBmb3IgZGlzYWJsZS4KICAqICAgICAgICAgICAgICAgICBEZWZhdWx0IGlzICcyJyAtIHdoaWNoIG1lYW5zIGRpc2FibGUgaW4gcHJvbWlzYyBtb2RlCiAgKiAgICAgICAgICAgICAgICAgYW5kIGVuYWJsZSBpbiBub24tcHJvbWlzY3VvdXMgbW9kZS4KKyAqIG11bHRpcTogVGhpcyBwYXJhbWV0ZXIgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBNVUxUSVFVRVVFIHN1cHBvcnQuCisgKiAgICAgIFBvc3NpYmxlIHZhbHVlcyAnMScgZm9yIGVuYWJsZSBhbmQgJzAnIGZvciBkaXNhYmxlLiBEZWZhdWx0IGlzICcwJwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODQsNyArODYsNyBAQAogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjI2LjE1LTIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMjYuMjAiCiAKIC8qIFMyaW8gRHJpdmVyIG5hbWUgJiB2ZXJzaW9uLiAqLwogc3RhdGljIGNoYXIgczJpb19kcml2ZXJfbmFtZVtdID0gIk5ldGVyaW9uIjsKQEAgLTM4Niw2ICszODgsMjYgQEAKIC8qIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgJ1JYX1BBX0NGR19TVFJJUF9WTEFOX1RBRycgYml0IGlzIHNldCBvciBub3QgKi8KIHN0YXRpYyBpbnQgdmxhbl9zdHJpcF9mbGFnOwogCisvKiBVbnJlZ2lzdGVyIHRoZSB2bGFuICovCitzdGF0aWMgdm9pZCBzMmlvX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyB2aWQpCit7CisJaW50IGk7CisJc3RydWN0IHMyaW9fbmljICpuaWMgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnc1tNQVhfVFhfRklGT1NdOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2ssIGZsYWdzW2ldKTsKKworCWlmIChuaWMtPnZsZ3JwKQorCQl2bGFuX2dyb3VwX3NldF9kZXZpY2UobmljLT52bGdycCwgdmlkLCBOVUxMKTsKKworCWZvciAoaSA9IGNvbmZpZy0+dHhfZmlmb19udW0gLSAxOyBpID49IDA7IGktLSkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2ssCisJCQlmbGFnc1tpXSk7Cit9CisKIC8qCiAgKiBDb25zdGFudHMgdG8gYmUgcHJvZ3JhbW1lZCBpbnRvIHRoZSBYZW5hJ3MgcmVnaXN0ZXJzLCB0byBjb25maWd1cmUKICAqIHRoZSBYQVVJLgpAQCAtNDU2LDEwICs0NzgsOSBAQAogCiAKIC8qIE1vZHVsZSBMb2FkYWJsZSBwYXJhbWV0ZXJzLiAqLwotUzJJT19QQVJNX0lOVCh0eF9maWZvX251bSwgMSk7CitTMklPX1BBUk1fSU5UKHR4X2ZpZm9fbnVtLCBGSUZPX0RFRkFVTFRfTlVNKTsKIFMySU9fUEFSTV9JTlQocnhfcmluZ19udW0sIDEpOwotCi0KK1MySU9fUEFSTV9JTlQobXVsdGlxLCAwKTsKIFMySU9fUEFSTV9JTlQocnhfcmluZ19tb2RlLCAxKTsKIFMySU9fUEFSTV9JTlQodXNlX2NvbnRpbnVvdXNfdHhfaW50cnMsIDEpOwogUzJJT19QQVJNX0lOVChybWFjX3BhdXNlX3RpbWUsIDB4MTAwKTsKQEAgLTQ2OSw2ICs0OTAsOCBAQAogUzJJT19QQVJNX0lOVCh0bWFjX3V0aWxfcGVyaW9kLCA1KTsKIFMySU9fUEFSTV9JTlQocm1hY191dGlsX3BlcmlvZCwgNSk7CiBTMklPX1BBUk1fSU5UKGwzbDRoZHJfc2l6ZSwgMTI4KTsKKy8qIDAgaXMgbm8gc3RlZXJpbmcsIDEgaXMgUHJpb3JpdHkgc3RlZXJpbmcsIDIgaXMgRGVmYXVsdCBzdGVlcmluZyAqLworUzJJT19QQVJNX0lOVCh0eF9zdGVlcmluZ190eXBlLCBUWF9ERUZBVUxUX1NURUVSSU5HKTsKIC8qIEZyZXF1ZW5jeSBvZiBSeCBkZXNjIHN5bmNzIGV4cHJlc3NlZCBhcyBwb3dlciBvZiAyICovCiBTMklPX1BBUk1fSU5UKHJ4c3luY19mcmVxdWVuY3ksIDMpOwogLyogSW50ZXJydXB0IHR5cGUuIFZhbHVlcyBjYW4gYmUgMChJTlRBKSwgMihNU0lfWCkgKi8KQEAgLTUzMyw2ICs1NTYsMTAxIEBACiAvKiBBIHNpbXBsaWZpZXIgbWFjcm8gdXNlZCBib3RoIGJ5IGluaXQgYW5kIGZyZWUgc2hhcmVkX21lbSBGbnMoKS4gKi8KICNkZWZpbmUgVFhEX01FTV9QQUdFX0NOVChsZW4sIHBlcl9lYWNoKSAoKGxlbitwZXJfZWFjaCAtIDEpIC8gcGVyX2VhY2gpCiAKKy8qIG5ldHF1ZXVlIG1hbmlwdWxhdGlvbiBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgczJpb19zdG9wX2FsbF90eF9xdWV1ZShzdHJ1Y3QgczJpb19uaWMgKnNwKQoreworCWludCBpOworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwlpZiAoc3AtPmNvbmZpZy5tdWx0aXEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNwLT5jb25maWcudHhfZmlmb19udW07IGkrKykKKwkJCW5ldGlmX3N0b3Bfc3VicXVldWUoc3AtPmRldiwgaSk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspCisJCQlzcC0+bWFjX2NvbnRyb2wuZmlmb3NbaV0ucXVldWVfc3RhdGUgPSBGSUZPX1FVRVVFX1NUT1A7CisJCW5ldGlmX3N0b3BfcXVldWUoc3AtPmRldik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczJpb19zdG9wX3R4X3F1ZXVlKHN0cnVjdCBzMmlvX25pYyAqc3AsIGludCBmaWZvX25vKQoreworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwlpZiAoc3AtPmNvbmZpZy5tdWx0aXEpCisJCW5ldGlmX3N0b3Bfc3VicXVldWUoc3AtPmRldiwgZmlmb19ubyk7CisJZWxzZQorI2VuZGlmCisJeworCQlzcC0+bWFjX2NvbnRyb2wuZmlmb3NbZmlmb19ub10ucXVldWVfc3RhdGUgPQorCQkJRklGT19RVUVVRV9TVE9QOworCQluZXRpZl9zdG9wX3F1ZXVlKHNwLT5kZXYpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHMyaW9fc3RhcnRfYWxsX3R4X3F1ZXVlKHN0cnVjdCBzMmlvX25pYyAqc3ApCit7CisJaW50IGk7CisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCWlmIChzcC0+Y29uZmlnLm11bHRpcSkgeworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQorCQkJbmV0aWZfc3RhcnRfc3VicXVldWUoc3AtPmRldiwgaSk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspCisJCQlzcC0+bWFjX2NvbnRyb2wuZmlmb3NbaV0ucXVldWVfc3RhdGUgPSBGSUZPX1FVRVVFX1NUQVJUOworCQluZXRpZl9zdGFydF9xdWV1ZShzcC0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzMmlvX3N0YXJ0X3R4X3F1ZXVlKHN0cnVjdCBzMmlvX25pYyAqc3AsIGludCBmaWZvX25vKQoreworI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwlpZiAoc3AtPmNvbmZpZy5tdWx0aXEpCisJCW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKHNwLT5kZXYsIGZpZm9fbm8pOworCWVsc2UKKyNlbmRpZgorCXsKKwkJc3AtPm1hY19jb250cm9sLmZpZm9zW2ZpZm9fbm9dLnF1ZXVlX3N0YXRlID0KKwkJCUZJRk9fUVVFVUVfU1RBUlQ7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKHNwLT5kZXYpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHMyaW9fd2FrZV9hbGxfdHhfcXVldWUoc3RydWN0IHMyaW9fbmljICpzcCkKK3sKKwlpbnQgaTsKKyNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCisJaWYgKHNwLT5jb25maWcubXVsdGlxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspCisJCQluZXRpZl93YWtlX3N1YnF1ZXVlKHNwLT5kZXYsIGkpOworCX0gZWxzZQorI2VuZGlmCisJeworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQorCQkJc3AtPm1hY19jb250cm9sLmZpZm9zW2ldLnF1ZXVlX3N0YXRlID0gRklGT19RVUVVRV9TVEFSVDsKKwkJbmV0aWZfd2FrZV9xdWV1ZShzcC0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzMmlvX3dha2VfdHhfcXVldWUoCisJc3RydWN0IGZpZm9faW5mbyAqZmlmbywgaW50IGNudCwgdTggbXVsdGlxKQoreworCisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCWlmIChtdWx0aXEpIHsKKwkJaWYgKGNudCAmJiBfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoZmlmby0+ZGV2LCBmaWZvLT5maWZvX25vKSkKKwkJCW5ldGlmX3dha2Vfc3VicXVldWUoZmlmby0+ZGV2LCBmaWZvLT5maWZvX25vKTsKKwl9IGVsc2UKKyNlbmRpZgorCWlmIChjbnQgJiYgKGZpZm8tPnF1ZXVlX3N0YXRlID09IEZJRk9fUVVFVUVfU1RPUCkpIHsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZmlmby0+ZGV2KSkgeworCQkJZmlmby0+cXVldWVfc3RhdGUgPSBGSUZPX1FVRVVFX1NUQVJUOworCQkJbmV0aWZfd2FrZV9xdWV1ZShmaWZvLT5kZXYpOworCQl9CisJfQorfQorCiAvKioKICAqIGluaXRfc2hhcmVkX21lbSAtIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uIG9mIE1lbW9yeQogICogQG5pYzogRGV2aWNlIHByaXZhdGUgdmFyaWFibGUuCkBAIC02MTQsNiArNzMyLDcgQEAKIAkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmZpZm9fbm8gPSBpOwogCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubmljID0gbmljOwogCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubWF4X3R4ZHMgPSBNQVhfU0tCX0ZSQUdTICsgMjsKKwkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmRldiA9IGRldjsKIAogCQlmb3IgKGogPSAwOyBqIDwgcGFnZV9udW07IGorKykgewogCQkJaW50IGsgPSAwOwpAQCAtMTA4OCw3ICsxMjA3LDcgQEAKICAqICAnLTEnIG9uIGZhaWx1cmUKICAqLwogCi1pbnQgaW5pdF90dGkoc3RydWN0IHMyaW9fbmljICpuaWMsIGludCBsaW5rKQorc3RhdGljIGludCBpbml0X3R0aShzdHJ1Y3QgczJpb19uaWMgKm5pYywgaW50IGxpbmspCiB7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXJlZ2lzdGVyIHU2NCB2YWw2NCA9IDA7CkBAIC0yOTQ4LDcgKzMwNjcsNyBAQAogCQkJc3RydWN0IGxybyAqbHJvID0gJm5pYy0+bHJvMF9uW2ldOwogCQkJaWYgKGxyby0+aW5fdXNlKSB7CiAJCQkJdXBkYXRlX0wzTDRfaGVhZGVyKG5pYywgbHJvKTsKLQkJCQlxdWV1ZV9yeF9mcmFtZShscm8tPnBhcmVudCk7CisJCQkJcXVldWVfcnhfZnJhbWUobHJvLT5wYXJlbnQsIGxyby0+dmxhbl90YWcpOwogCQkJCWNsZWFyX2xyb19zZXNzaW9uKGxybyk7CiAJCQl9CiAJCX0KQEAgLTI5NzIsMTAgKzMwOTEsMTAgQEAKIHN0YXRpYyB2b2lkIHR4X2ludHJfaGFuZGxlcihzdHJ1Y3QgZmlmb19pbmZvICpmaWZvX2RhdGEpCiB7CiAJc3RydWN0IHMyaW9fbmljICpuaWMgPSBmaWZvX2RhdGEtPm5pYzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIG5pYy0+ZGV2OwogCXN0cnVjdCB0eF9jdXJyX2dldF9pbmZvIGdldF9pbmZvLCBwdXRfaW5mbzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCBUeEQgKnR4ZGxwOworCWludCBwa3RfY250ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAl1OCBlcnJfbWFzazsKIApAQCAtMzAzNiw2ICszMTU1LDcgQEAKIAkJCURCR19QUklOVChFUlJfREJHLCAiaW4gVHggRnJlZSBJbnRyXG4iKTsKIAkJCXJldHVybjsKIAkJfQorCQlwa3RfY250Kys7CiAKIAkJLyogVXBkYXRpbmcgdGhlIHN0YXRpc3RpY3MgYmxvY2sgKi8KIAkJbmljLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTMwNTEsOCArMzE3MSw3IEBACiAJCSAgICBnZXRfaW5mby5vZmZzZXQ7CiAJfQogCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCXMyaW9fd2FrZV90eF9xdWV1ZShmaWZvX2RhdGEsIHBrdF9jbnQsIG5pYy0+Y29uZmlnLm11bHRpcSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvX2RhdGEtPnR4X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTM5MzMsOCArNDA1Miw3IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gaHdfaW5pdF9mYWlsZWQ7CiAJfQotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwlzMmlvX3N0YXJ0X2FsbF90eF9xdWV1ZShzcCk7CiAJcmV0dXJuIDA7CiAKIGh3X2luaXRfZmFpbGVkOgpAQCAtMzk3OSw4ICs0MDk3LDcgQEAKIAlpZiAoIWlzX3MyaW9fY2FyZF91cChzcCkpCiAJCXJldHVybiAwOwogCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCisJczJpb19zdG9wX2FsbF90eF9xdWV1ZShzcCk7CiAJLyogZGVsZXRlIGFsbCBwb3B1bGF0ZWQgbWFjIGVudHJpZXMgKi8KIAlmb3IgKG9mZnNldCA9IDE7IG9mZnNldCA8IGNvbmZpZy0+bWF4X21jX2FkZHI7IG9mZnNldCsrKSB7CiAJCXRtcDY0ID0gZG9fczJpb19yZWFkX3VuaWNhc3RfbWMoc3AsIG9mZnNldCk7CkBAIC00MDE2LDExICs0MTMzLDEyIEBACiAJc3RydWN0IFR4RklGT19lbGVtZW50IF9faW9tZW0gKnR4X2ZpZm87CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJdTE2IHZsYW5fdGFnID0gMDsKLQlpbnQgdmxhbl9wcmlvcml0eSA9IDA7CiAJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9IE5VTEw7CiAJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CisJaW50IGRvX3NwaW5fbG9jayA9IDE7CiAJaW50IG9mZmxvYWRfdHlwZTsKKwlpbnQgZW5hYmxlX3Blcl9saXN0X2ludGVycnVwdCA9IDA7CiAJc3RydWN0IHN3U3RhdCAqc3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKIAltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CkBAIC00MDQyLDE1ICs0MTYwLDY3IEBACiAJfQogCiAJcXVldWUgPSAwOwotCS8qIEdldCBGaWZvIG51bWJlciB0byBUcmFuc21pdCBiYXNlZCBvbiB2bGFuIHByaW9yaXR5ICovCi0JaWYgKHNwLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc3AtPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKIAkJdmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKLQkJdmxhbl9wcmlvcml0eSA9IHZsYW5fdGFnID4+IDEzOwotCQlxdWV1ZSA9IGNvbmZpZy0+Zmlmb19tYXBwaW5nW3ZsYW5fcHJpb3JpdHldOworCWlmIChzcC0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfREVGQVVMVF9TVEVFUklORykgeworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwkJCXN0cnVjdCBpcGhkciAqaXA7CisJCQlzdHJ1Y3QgdGNwaGRyICp0aDsKKwkJCWlwID0gaXBfaGRyKHNrYik7CisKKwkJCWlmICgoaXAtPmZyYWdfb2ZmICYgaHRvbnMoSVBfT0ZGU0VUfElQX01GKSkgPT0gMCkgeworCQkJCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoKCh1bnNpZ25lZCBjaGFyICopaXApICsKKwkJCQkJCWlwLT5paGwqNCk7CisKKwkJCQlpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7CisJCQkJCXF1ZXVlX2xlbiA9IHNwLT50b3RhbF90Y3BfZmlmb3M7CisJCQkJCXF1ZXVlID0gKG50b2hzKHRoLT5zb3VyY2UpICsKKwkJCQkJCQludG9ocyh0aC0+ZGVzdCkpICYKKwkJCQkJICAgIHNwLT5maWZvX3NlbGVjdG9yW3F1ZXVlX2xlbiAtIDFdOworCQkJCQlpZiAocXVldWUgPj0gcXVldWVfbGVuKQorCQkJCQkJcXVldWUgPSBxdWV1ZV9sZW4gLSAxOworCQkJCX0gZWxzZSBpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7CisJCQkJCXF1ZXVlX2xlbiA9IHNwLT50b3RhbF91ZHBfZmlmb3M7CisJCQkJCXF1ZXVlID0gKG50b2hzKHRoLT5zb3VyY2UpICsKKwkJCQkJCQludG9ocyh0aC0+ZGVzdCkpICYKKwkJCQkJICAgIHNwLT5maWZvX3NlbGVjdG9yW3F1ZXVlX2xlbiAtIDFdOworCQkJCQlpZiAocXVldWUgPj0gcXVldWVfbGVuKQorCQkJCQkJcXVldWUgPSBxdWV1ZV9sZW4gLSAxOworCQkJCQlxdWV1ZSArPSBzcC0+dWRwX2ZpZm9faWR4OworCQkJCQlpZiAoc2tiLT5sZW4gPiAxMDI0KQorCQkJCQkJZW5hYmxlX3Blcl9saXN0X2ludGVycnVwdCA9IDE7CisJCQkJCWRvX3NwaW5fbG9jayA9IDA7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChzcC0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfUFJJT1JJVFlfU1RFRVJJTkcpCisJCS8qIGdldCBmaWZvIG51bWJlciBiYXNlZCBvbiBza2ItPnByaW9yaXR5IHZhbHVlICovCisJCXF1ZXVlID0gY29uZmlnLT5maWZvX21hcHBpbmcKKwkJCQkJW3NrYi0+cHJpb3JpdHkgJiAoTUFYX1RYX0ZJRk9TIC0gMSldOworCWZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW3F1ZXVlXTsKKworCWlmIChkb19zcGluX2xvY2spCisJCXNwaW5fbG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJZWxzZSB7CisJCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKSkpCisJCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKIAl9CiAKLQlmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1txdWV1ZV07Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKyNpZmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCisJaWYgKHNwLT5jb25maWcubXVsdGlxKSB7CisJCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoZGV2LCBmaWZvLT5maWZvX25vKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQl9CisJfSBlbHNlCisjZW5kaWYKKwlpZiAodW5saWtlbHkoZmlmby0+cXVldWVfc3RhdGUgPT0gRklGT19RVUVVRV9TVE9QKSkgeworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KKwl9CisKIAlwdXRfb2ZmID0gKHUxNikgZmlmby0+dHhfY3Vycl9wdXRfaW5mby5vZmZzZXQ7CiAJZ2V0X29mZiA9ICh1MTYpIGZpZm8tPnR4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0OwogCXR4ZHAgPSAoc3RydWN0IFR4RCAqKSBmaWZvLT5saXN0X2luZm9bcHV0X29mZl0ubGlzdF92aXJ0X2FkZHI7CkBAIC00MDYwLDcgKzQyMzAsNyBAQAogCWlmICh0eGRwLT5Ib3N0X0NvbnRyb2wgfHwKIAkJICAgKChwdXRfb2ZmKzEpID09IHF1ZXVlX2xlbiA/IDAgOiAocHV0X29mZisxKSkgPT0gZ2V0X29mZikgewogCQlEQkdfUFJJTlQoVFhfREJHLCAiRXJyb3IgaW4geG1pdCwgTm8gZnJlZSBUWERzLlxuIik7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJczJpb19zdG9wX3R4X3F1ZXVlKHNwLCBmaWZvLT5maWZvX25vKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwpAQCAtNDA3OSw4ICs0MjQ5LDEwIEBACiAJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9HQVRIRVJfQ09ERV9GSVJTVDsKIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0xJU1RfT1dOX1hFTkE7CiAJdHhkcC0+Q29udHJvbF8yIHw9IFRYRF9JTlRfTlVNQkVSKGZpZm8tPmZpZm9fbm8pOwotCi0JaWYgKHNwLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoZW5hYmxlX3Blcl9saXN0X2ludGVycnVwdCkKKwkJaWYgKHB1dF9vZmYgJiAocXVldWVfbGVuID4+IDUpKQorCQkJdHhkcC0+Q29udHJvbF8yIHw9IFRYRF9JTlRfVFlQRV9QRVJfTElTVDsKKwlpZiAodmxhbl90YWcpIHsKIAkJdHhkcC0+Q29udHJvbF8yIHw9IFRYRF9WTEFOX0VOQUJMRTsKIAkJdHhkcC0+Q29udHJvbF8yIHw9IFRYRF9WTEFOX1RBRyh2bGFuX3RhZyk7CiAJfQpAQCAtNDA5NSwxMSArNDI2NywxMiBAQAogCQl0eGRwLT5Db250cm9sXzEgfD0gVFhEX1VGT19NU1ModWZvX3NpemUpOwogCQl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0JVRkZFUjBfU0laRSg4KTsKICNpZmRlZiBfX0JJR19FTkRJQU4KKwkJLyogYm90aCB2YXJpYW50cyBkbyBjcHVfdG9fYmU2NChiZTMyX3RvX2NwdSguLi4pKSAqLwogCQlmaWZvLT51Zm9faW5fYmFuZF92W3B1dF9vZmZdID0KLQkJCQkodTY0KXNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQ7CisJCQkJKF9fZm9yY2UgdTY0KXNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQ7CiAjZWxzZQogCQlmaWZvLT51Zm9faW5fYmFuZF92W3B1dF9vZmZdID0KLQkJCQkodTY0KXNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQgPDwgMzI7CisJCQkJKF9fZm9yY2UgdTY0KXNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQgPDwgMzI7CiAjZW5kaWYKIAkJdHhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpZmlmby0+dWZvX2luX2JhbmRfdjsKIAkJdHhkcC0+QnVmZmVyX1BvaW50ZXIgPSBwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwKQEAgLTQxNjYsMTYgKzQzMzksMTkgQEAKIAkJREJHX1BSSU5UKFRYX0RCRywKIAkJCSAgIk5vIGZyZWUgVHhEcyBmb3IgeG1pdCwgUHV0OiAweCV4IEdldDoweCV4XG4iLAogCQkJICBwdXRfb2ZmLCBnZXRfb2ZmKTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlzMmlvX3N0b3BfdHhfcXVldWUoc3AsIGZpZm8tPmZpZm9fbm8pOwogCX0KIAltYWNfY29udHJvbC0+c3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkICs9IHNrYi0+dHJ1ZXNpemU7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOwogCisJaWYgKHNwLT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKQorCQl0eF9pbnRyX2hhbmRsZXIoZmlmbyk7CisKIAlyZXR1cm4gMDsKIHBjaV9tYXBfZmFpbGVkOgogCXN0YXRzLT5wY2lfbWFwX2ZhaWxfY250Kys7Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXMyaW9fc3RvcF90eF9xdWV1ZShzcCwgZmlmby0+Zmlmb19ubyk7CiAJc3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CkBAIC00NTg3LDcgKzQ3NjMsNyBAQAogCXJldHVybjsKIAogcmVzZXQ6Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXMyaW9fc3RvcF9hbGxfdHhfcXVldWUoc3ApOwogCXNjaGVkdWxlX3dvcmsoJnNwLT5yc3RfdGltZXJfdGFzayk7CiAJc3dfc3RhdC0+c29mdF9yZXNldF9jbnQrKzsKIAlyZXR1cm47CkBAIC02NTc0LDE2ICs2NzUwLDE1IEBACiAKIAlkZXYtPm10dSA9IG5ld19tdHU7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlzMmlvX3N0b3BfYWxsX3R4X3F1ZXVlKHNwKTsKIAkJczJpb19jYXJkX2Rvd24oc3ApOwotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXJldCA9IHMyaW9fY2FyZF91cChzcCk7CiAJCWlmIChyZXQpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IERldmljZSBicmluZyB1cCBmYWlsZWRcbiIsCiAJCQkJICBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQlzMmlvX3dha2VfYWxsX3R4X3F1ZXVlKHNwKTsKIAl9IGVsc2UgeyAvKiBEZXZpY2UgaXMgZG93biAqLwogCQlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAkJdTY0IHZhbDY0ID0gbmV3X210dTsKQEAgLTY2OTEsNyArNjg2Niw3IEBACiAJCQl9IGVsc2UgewogCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVycm9yOiAiLCBkZXYtPm5hbWUpOwogCQkJCURCR19QUklOVChFUlJfREJHLCAiZGV2aWNlIGlzIG5vdCBRdWllc2NlbnRcbiIpOwotCQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCQlzMmlvX3N0b3BfYWxsX3R4X3F1ZXVlKG5pYyk7CiAJCQl9CiAJCX0KIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKQEAgLTY5MTgsMTEgKzcwOTMsMTEgQEAKIAkJCQlpZighKHNwLT5tc2l4X2luZm9baV0uYWRkciAmJgogCQkJCQlzcC0+bXNpeF9pbmZvW2ldLmRhdGEpKSB7CiAJCQkJCURCR19QUklOVChFUlJfREJHLCAiJXMgQCBBZGRyOjB4JWxseCAiCi0JCQkJCQkiRGF0YToweCVseFxuIixzcC0+ZGVzY1tpXSwKKwkJCQkJCSJEYXRhOjB4JWxseFxuIixzcC0+ZGVzY1tpXSwKIAkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkJCQlzcC0+bXNpeF9pbmZvW2ldLmFkZHIsCi0JCQkJCQkodW5zaWduZWQgbG9uZykKLQkJCQkJCW50b2hsKHNwLT5tc2l4X2luZm9baV0uZGF0YSkpOworCQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJCXNwLT5tc2l4X2luZm9baV0uZGF0YSk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJbXNpeF90eF9jbnQrKzsKIAkJCQl9CkBAIC02OTM2LDExICs3MTExLDExIEBACiAJCQkJaWYoIShzcC0+bXNpeF9pbmZvW2ldLmFkZHIgJiYKIAkJCQkJc3AtPm1zaXhfaW5mb1tpXS5kYXRhKSkgewogCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzIEAgQWRkcjoweCVsbHggIgotCQkJCQkJIkRhdGE6MHglbHhcbiIsc3AtPmRlc2NbaV0sCisJCQkJCQkiRGF0YToweCVsbHhcbiIsc3AtPmRlc2NbaV0sCiAJCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKQogCQkJCQkJc3AtPm1zaXhfaW5mb1tpXS5hZGRyLAotCQkJCQkJKHVuc2lnbmVkIGxvbmcpCi0JCQkJCQludG9obChzcC0+bXNpeF9pbmZvW2ldLmRhdGEpKTsKKwkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCQlzcC0+bXNpeF9pbmZvW2ldLmRhdGEpOwogCQkJCX0gZWxzZSB7CiAJCQkJCW1zaXhfcnhfY250Kys7CiAJCQkJfQpAQCAtNzE4MSw3ICs3MzU2LDcgQEAKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGJyaW5nIHVwIGZhaWxlZFxuIiwKIAkJCSAgZGV2LT5uYW1lKTsKIAl9Ci0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCXMyaW9fd2FrZV9hbGxfdHhfcXVldWUoc3ApOwogCURCR19QUklOVChFUlJfREJHLCAiJXM6IHdhcyByZXNldCBieSBUeCB3YXRjaGRvZyB0aW1lclxuIiwKIAkJICBkZXYtPm5hbWUpOwogb3V0X3VubG9jazoKQEAgLTczNzEsNyArNzU0Niw4IEBACiAJCQkJCXsKIAkJCQkJCWxyb19hcHBlbmRfcGt0KHNwLCBscm8sCiAJCQkJCQkJc2tiLCB0Y3BfbGVuKTsKLQkJCQkJCXF1ZXVlX3J4X2ZyYW1lKGxyby0+cGFyZW50KTsKKwkJCQkJCXF1ZXVlX3J4X2ZyYW1lKGxyby0+cGFyZW50LAorCQkJCQkJCWxyby0+dmxhbl90YWcpOwogCQkJCQkJY2xlYXJfbHJvX3Nlc3Npb24obHJvKTsKIAkJCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT4KIAkJCQkJCSAgICBzd19zdGF0LmZsdXNoX21heF9wa3RzKys7CkBAIC03MzgyLDcgKzc1NTgsOCBAQAogCQkJCQkJCWxyby0+ZnJhZ3NfbGVuOwogCQkJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPgogCQkJCQkJICAgICBzd19zdGF0LnNlbmRpbmdfYm90aCsrOwotCQkJCQkJcXVldWVfcnhfZnJhbWUobHJvLT5wYXJlbnQpOworCQkJCQkJcXVldWVfcnhfZnJhbWUobHJvLT5wYXJlbnQsCisJCQkJCQkJbHJvLT52bGFuX3RhZyk7CiAJCQkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOwogCQkJCQkJZ290byBzZW5kX3VwOwogCQkJCQljYXNlIDA6IC8qIHNlc3Npb25zIGV4Y2VlZGVkICovCkBAIC03NDA4LDMxICs3NTg1LDEyIEBACiAJCQkgKi8KIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQl9CisKIAlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKLQlpZiAoIXNwLT5scm8pIHsKLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJaWYgKChzcC0+dmxncnAgJiYgUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpICYmCi0JCQl2bGFuX3N0cmlwX2ZsYWcpKSB7Ci0JCQkvKiBRdWV1ZWluZyB0aGUgdmxhbiBmcmFtZSB0byB0aGUgdXBwZXIgbGF5ZXIgKi8KLQkJCWlmIChuYXBpKQotCQkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHNwLT52bGdycCwKLQkJCQkJUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpKTsKLQkJCWVsc2UKLQkJCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBzcC0+dmxncnAsCi0JCQkJCVJYRF9HRVRfVkxBTl9UQUcocnhkcC0+Q29udHJvbF8yKSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobmFwaSkKLQkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCQkJZWxzZQotCQkJCW5ldGlmX3J4KHNrYik7Ci0JCX0KLQl9IGVsc2Ugewogc2VuZF91cDoKLQkJcXVldWVfcnhfZnJhbWUoc2tiKTsKLQl9CisJcXVldWVfcnhfZnJhbWUoc2tiLCBSWERfR0VUX1ZMQU5fVEFHKHJ4ZHAtPkNvbnRyb2xfMikpOwogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiBhZ2dyZWdhdGU6CiAJYXRvbWljX2RlYygmc3AtPnJ4X2J1ZnNfbGVmdFtyaW5nX25vXSk7CkBAIC03NDYwLDYgKzc2MTgsNyBAQAogCQlpbml0X3R0aShzcCwgbGluayk7CiAJCWlmIChsaW5rID09IExJTktfRE9XTikgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTGluayBkb3duXG4iLCBkZXYtPm5hbWUpOworCQkJczJpb19zdG9wX2FsbF90eF9xdWV1ZShzcCk7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQkJaWYoc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua191cF9jbnQpCiAJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX3RpbWUgPQpAQCAtNzQ3Miw2ICs3NjMxLDcgQEAKIAkJCQlqaWZmaWVzIC0gc3AtPnN0YXJ0X3RpbWU7CiAJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudCsrOwogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCQkJczJpb193YWtlX2FsbF90eF9xdWV1ZShzcCk7CiAJCX0KIAl9CiAJc3AtPmxhc3RfbGlua19zdGF0ZSA9IGxpbms7CkBAIC03NTA4LDIwICs3NjY4LDQ4IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoc3AtPnBkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CiB9CiAKLXN0YXRpYyBpbnQgczJpb192ZXJpZnlfcGFybShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggKmRldl9pbnRyX3R5cGUpCitzdGF0aWMgaW50IHMyaW9fdmVyaWZ5X3Bhcm0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4ICpkZXZfaW50cl90eXBlLAorCXU4ICpkZXZfbXVsdGlxKQogewogCWlmICgodHhfZmlmb19udW0gPiBNQVhfVFhfRklGT1MpIHx8Ci0JCSh0eF9maWZvX251bSA8IEZJRk9fREVGQVVMVF9OVU0pKSB7CisJCSh0eF9maWZvX251bSA8IDEpKSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIG51bWJlciBvZiB0eCBmaWZvcyAiCiAJCQkiKCVkKSBub3Qgc3VwcG9ydGVkXG4iLCB0eF9maWZvX251bSk7Ci0JCXR4X2ZpZm9fbnVtID0KLQkJCSgodHhfZmlmb19udW0gPiBNQVhfVFhfRklGT1MpPyBNQVhfVFhfRklGT1MgOgotCQkJKCh0eF9maWZvX251bSA8IEZJRk9fREVGQVVMVF9OVU0pID8gRklGT19ERUZBVUxUX05VTSA6Ci0JCQl0eF9maWZvX251bSkpOworCisJCWlmICh0eF9maWZvX251bSA8IDEpCisJCQl0eF9maWZvX251bSA9IDE7CisJCWVsc2UKKwkJCXR4X2ZpZm9fbnVtID0gTUFYX1RYX0ZJRk9TOworCiAJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogRGVmYXVsdCB0byAlZCAiLCB0eF9maWZvX251bSk7CiAJCURCR19QUklOVChFUlJfREJHLCAidHggZmlmb3NcbiIpOwogCX0KIAorI2lmbmRlZiBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFCisJaWYgKG11bHRpcSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IE11bHRpcXVldWUgc3VwcG9ydCBub3QgZW5hYmxlZFxuIik7CisJCW11bHRpcSA9IDA7CisJfQorI2VuZGlmCisJaWYgKG11bHRpcSkKKwkJKmRldl9tdWx0aXEgPSBtdWx0aXE7CisKKwlpZiAodHhfc3RlZXJpbmdfdHlwZSAmJiAoMSA9PSB0eF9maWZvX251bSkpIHsKKwkJaWYgKHR4X3N0ZWVyaW5nX3R5cGUgIT0gVFhfREVGQVVMVF9TVEVFUklORykKKwkJCURCR19QUklOVChFUlJfREJHLAorCQkJCSJzMmlvOiBUeCBzdGVlcmluZyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggIgorCQkJCSJvbmUgZmlmby4gRGlzYWJsaW5nIFR4IHN0ZWVyaW5nLlxuIik7CisJCXR4X3N0ZWVyaW5nX3R5cGUgPSBOT19TVEVFUklORzsKKwl9CisKKwlpZiAoKHR4X3N0ZWVyaW5nX3R5cGUgPCBOT19TVEVFUklORykgfHwKKwkJKHR4X3N0ZWVyaW5nX3R5cGUgPiBUWF9ERUZBVUxUX1NURUVSSU5HKSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCB0cmFuc21pdCBzdGVlcmluZyBub3QgIgorCQkJICJzdXBwb3J0ZWRcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERpc2FibGluZyB0cmFuc21pdCBzdGVlcmluZ1xuIik7CisJCXR4X3N0ZWVyaW5nX3R5cGUgPSBOT19TVEVFUklORzsKKwl9CisKIAlpZiAoIHJ4X3JpbmdfbnVtID4gOCkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCBudW1iZXIgb2YgUnggcmluZ3Mgbm90ICIKIAkJCSAic3VwcG9ydGVkXG4iKTsKQEAgLTc2MTMsOSArNzgwMSwxMSBAQAogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKIAlpbnQgbW9kZTsKIAl1OCBkZXZfaW50cl90eXBlID0gaW50cl90eXBlOworCXU4IGRldl9tdWx0aXEgPSAwOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0JaWYgKChyZXQgPSBzMmlvX3ZlcmlmeV9wYXJtKHBkZXYsICZkZXZfaW50cl90eXBlKSkpCisJcmV0ID0gczJpb192ZXJpZnlfcGFybShwZGV2LCAmZGV2X2ludHJfdHlwZSwgJmRldl9tdWx0aXEpOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgewpAQCAtNzY0Niw3ICs3ODM2LDExIEBACiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCisjaWZkZWYgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRQorCWlmIChkZXZfbXVsdGlxKQorCQlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IHMyaW9fbmljKSwgdHhfZmlmb19udW0pOworCWVsc2UKKyNlbmRpZgogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgczJpb19uaWMpKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICJEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwpAQCAtNzY5NSwxNyArNzg4OSw0NSBAQAogCWNvbmZpZyA9ICZzcC0+Y29uZmlnOwogCiAJY29uZmlnLT5uYXBpID0gbmFwaTsKKwljb25maWctPnR4X3N0ZWVyaW5nX3R5cGUgPSB0eF9zdGVlcmluZ190eXBlOwogCiAJLyogVHggc2lkZSBwYXJhbWV0ZXJzLiAqLwotCWNvbmZpZy0+dHhfZmlmb19udW0gPSB0eF9maWZvX251bTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX0ZJRk9TOyBpKyspIHsKKwlpZiAoY29uZmlnLT50eF9zdGVlcmluZ190eXBlID09IFRYX1BSSU9SSVRZX1NURUVSSU5HKQorCQljb25maWctPnR4X2ZpZm9fbnVtID0gTUFYX1RYX0ZJRk9TOworCWVsc2UKKwkJY29uZmlnLT50eF9maWZvX251bSA9IHR4X2ZpZm9fbnVtOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZmlmb3MgdXNlZCBmb3IgdHggc3RlZXJpbmcgKi8KKwlpZiAoY29uZmlnLT50eF9maWZvX251bSA8IDUpIHsKKwkJCWlmIChjb25maWctPnR4X2ZpZm9fbnVtICA9PSAxKQorCQkJCXNwLT50b3RhbF90Y3BfZmlmb3MgPSAxOworCQkJZWxzZQorCQkJCXNwLT50b3RhbF90Y3BfZmlmb3MgPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsKKwkJCXNwLT51ZHBfZmlmb19pZHggPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsKKwkJCXNwLT50b3RhbF91ZHBfZmlmb3MgPSAxOworCQkJc3AtPm90aGVyX2ZpZm9faWR4ID0gc3AtPnRvdGFsX3RjcF9maWZvcyAtIDE7CisJfSBlbHNlIHsKKwkJc3AtPnRvdGFsX3RjcF9maWZvcyA9ICh0eF9maWZvX251bSAtIEZJRk9fVURQX01BWF9OVU0gLQorCQkJCQkJRklGT19PVEhFUl9NQVhfTlVNKTsKKwkJc3AtPnVkcF9maWZvX2lkeCA9IHNwLT50b3RhbF90Y3BfZmlmb3M7CisJCXNwLT50b3RhbF91ZHBfZmlmb3MgPSBGSUZPX1VEUF9NQVhfTlVNOworCQlzcC0+b3RoZXJfZmlmb19pZHggPSBzcC0+dWRwX2ZpZm9faWR4ICsgRklGT19VRFBfTUFYX05VTTsKKwl9CisKKwljb25maWctPm11bHRpcSA9IGRldl9tdWx0aXE7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewogCQljb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiA9IHR4X2ZpZm9fbGVuW2ldOwogCQljb25maWctPnR4X2NmZ1tpXS5maWZvX3ByaW9yaXR5ID0gaTsKIAl9CiAKIAkvKiBtYXBwaW5nIHRoZSBRb1MgcHJpb3JpdHkgdG8gdGhlIGNvbmZpZ3VyZWQgZmlmb3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX0ZJRk9TOyBpKyspCi0JCWNvbmZpZy0+Zmlmb19tYXBwaW5nW2ldID0gZmlmb19tYXBbY29uZmlnLT50eF9maWZvX251bV1baV07CisJCWNvbmZpZy0+Zmlmb19tYXBwaW5nW2ldID0gZmlmb19tYXBbY29uZmlnLT50eF9maWZvX251bSAtIDFdW2ldOworCisJLyogbWFwIHRoZSBoYXNoaW5nIHNlbGVjdG9yIHRhYmxlIHRvIHRoZSBjb25maWd1cmVkIGZpZm9zICovCisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykKKwkJc3AtPmZpZm9fc2VsZWN0b3JbaV0gPSBmaWZvX3NlbGVjdG9yW2ldOworCiAKIAljb25maWctPnR4X2ludHJfdHlwZSA9IFRYRF9JTlRfVFlQRV9VVElMWjsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7CkBAIC03NzkwLDYgKzgwMTIsNyBAQAogCVNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHMyaW9fdmxhbl9yeF9yZWdpc3RlcjsKKwlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSAodm9pZCAqKXMyaW9fdmxhbl9yeF9raWxsX3ZpZDsKIAogCS8qCiAJICogd2lsbCB1c2UgZXRoX21hY19hZGRyKCkgZm9yICBkZXYtPnNldF9tYWNfYWRkcmVzcwpAQCAtNzgxMCw3ICs4MDMzLDEwIEBACiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwogCX0KLQorI2lmZGVmIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUKKwlpZiAoY29uZmlnLT5tdWx0aXEpCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9NVUxUSV9RVUVVRTsKKyNlbmRpZgogCWRldi0+dHhfdGltZW91dCA9ICZzMmlvX3R4X3dhdGNoZG9nOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBXQVRDSF9ET0dfVElNRU9VVDsKIAlJTklUX1dPUksoJnNwLT5yc3RfdGltZXJfdGFzaywgczJpb19yZXN0YXJ0X25pYyk7CkBAIC03OTU5LDYgKzgxODUsMTAgQEAKIAogCWlmIChuYXBpKQogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBOQVBJIGVuYWJsZWRcbiIsIGRldi0+bmFtZSk7CisKKwlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBVc2luZyAlZCBUeCBmaWZvKHMpXG4iLCBkZXYtPm5hbWUsCisJCXNwLT5jb25maWcudHhfZmlmb19udW0pOworCiAJc3dpdGNoKHNwLT5jb25maWcuaW50cl90eXBlKSB7CiAJCWNhc2UgSU5UQToKIAkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IEludGVycnVwdCB0eXBlIElOVEFcbiIsIGRldi0+bmFtZSk7CkBAIC03OTY3LDYgKzgxOTcsMjkgQEAKIAkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IEludGVycnVwdCB0eXBlIE1TSS1YXG4iLCBkZXYtPm5hbWUpOwogCQkgICAgYnJlYWs7CiAJfQorCWlmIChzcC0+Y29uZmlnLm11bHRpcSkgeworCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspCisJCW1hY19jb250cm9sLT5maWZvc1tpXS5tdWx0aXEgPSBjb25maWctPm11bHRpcTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTXVsdGlxdWV1ZSBzdXBwb3J0IGVuYWJsZWRcbiIsCisJCQlkZXYtPm5hbWUpOworCX0gZWxzZQorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNdWx0aXF1ZXVlIHN1cHBvcnQgZGlzYWJsZWRcbiIsCisJCQlkZXYtPm5hbWUpOworCisJc3dpdGNoIChzcC0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUpIHsKKwljYXNlIE5PX1NURUVSSU5HOgorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBObyBzdGVlcmluZyBlbmFibGVkIGZvciIKKwkJCSIgdHJhbnNtaXRcbiIsIGRldi0+bmFtZSk7CisJCQlicmVhazsKKwljYXNlIFRYX1BSSU9SSVRZX1NURUVSSU5HOgorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBQcmlvcml0eSBzdGVlcmluZyBlbmFibGVkIGZvciIKKwkJCSIgdHJhbnNtaXRcbiIsIGRldi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgVFhfREVGQVVMVF9TVEVFUklORzoKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGVmYXVsdCBzdGVlcmluZyBlbmFibGVkIGZvciIKKwkJCSIgdHJhbnNtaXRcbiIsIGRldi0+bmFtZSk7CisJfQorCiAJaWYgKHNwLT5scm8pCiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IExhcmdlIHJlY2VpdmUgb2ZmbG9hZCBlbmFibGVkXG4iLAogCQkJICBkZXYtPm5hbWUpOwpAQCAtODA2MSw3ICs4MzE0LDggQEAKIG1vZHVsZV9leGl0KHMyaW9fY2xvc2VyKTsKIAogc3RhdGljIGludCBjaGVja19MMl9scm9fY2FwYWJsZSh1OCAqYnVmZmVyLCBzdHJ1Y3QgaXBoZHIgKippcCwKLQkJc3RydWN0IHRjcGhkciAqKnRjcCwgc3RydWN0IFJ4RF90ICpyeGRwKQorCQlzdHJ1Y3QgdGNwaGRyICoqdGNwLCBzdHJ1Y3QgUnhEX3QgKnJ4ZHAsCisJCXN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJaW50IGlwX29mZjsKIAl1OCBsMl90eXBlID0gKHU4KSgocnhkcC0+Q29udHJvbF8xID4+IDM3KSAmIDB4NyksIGlwX2xlbjsKQEAgLTgwNzIsMTkgKzgzMjYsMjAgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCS8qIFRPRE86Ci0JICogQnkgZGVmYXVsdCB0aGUgVkxBTiBmaWVsZCBpbiB0aGUgTUFDIGlzIHN0cmlwcGVkIGJ5IHRoZSBjYXJkLCBpZiB0aGlzCi0JICogZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIGluIHJ4X3BhX2NmZyByZWdpc3RlciwgdGhlbiB0aGUgaXBfb2ZmIGZpZWxkCi0JICogaGFzIHRvIGJlIHNoaWZ0ZWQgYnkgYSBmdXJ0aGVyIDIgYnl0ZXMKLQkgKi8KLQlzd2l0Y2ggKGwyX3R5cGUpIHsKLQkJY2FzZSAwOiAvKiBESVggdHlwZSAqLwotCQljYXNlIDQ6IC8qIERJWCB0eXBlIHdpdGggVkxBTiAqLwotCQkJaXBfb2ZmID0gSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX1NJWkU7Ci0JCQlicmVhazsKKwkvKiBDaGVja2luZyBmb3IgRElYIHR5cGUgb3IgRElYIHR5cGUgd2l0aCBWTEFOICovCisJaWYgKChsMl90eXBlID09IDApCisJCXx8IChsMl90eXBlID09IDQpKSB7CisJCWlwX29mZiA9IEhFQURFUl9FVEhFUk5FVF9JSV84MDJfM19TSVpFOworCQkvKgorCQkgKiBJZiB2bGFuIHN0cmlwcGluZyBpcyBkaXNhYmxlZCBhbmQgdGhlIGZyYW1lIGlzIFZMQU4gdGFnZ2VkLAorCQkgKiBzaGlmdCB0aGUgb2Zmc2V0IGJ5IHRoZSBWTEFOIGhlYWRlciBzaXplIGJ5dGVzLgorCQkgKi8KKwkJaWYgKCghdmxhbl9zdHJpcF9mbGFnKSAmJgorCQkJKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9GUkFNRV9WTEFOX1RBRykpCisJCQlpcF9vZmYgKz0gSEVBREVSX1ZMQU5fU0laRTsKKwl9IGVsc2UgewogCQkvKiBMTEMsIFNOQVAgZXRjIGFyZSBjb25zaWRlcmVkIG5vbi1tZXJnZWFibGUgKi8KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtMTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCSppcCA9IChzdHJ1Y3QgaXBoZHIgKikoKHU4ICopYnVmZmVyICsgaXBfb2ZmKTsKQEAgLTgxMTEsNyArODM2Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYXRlX25ld19zZXNzaW9uKHN0cnVjdCBscm8gKmxybywgdTggKmwyaCwKLQkJICAgICBzdHJ1Y3QgaXBoZHIgKmlwLCBzdHJ1Y3QgdGNwaGRyICp0Y3AsIHUzMiB0Y3BfcHlsZF9sZW4pCisJc3RydWN0IGlwaGRyICppcCwgc3RydWN0IHRjcGhkciAqdGNwLCB1MzIgdGNwX3B5bGRfbGVuLCB1MTYgdmxhbl90YWcpCiB7CiAJREJHX1BSSU5UKElORk9fREJHLCIlczogQmVlbiBoZXJlLi4uXG4iLCBfX0ZVTkNUSU9OX18pOwogCWxyby0+bDJoID0gbDJoOwpAQCAtODEyMiw2ICs4Mzc3LDcgQEAKIAlscm8tPnNnX251bSA9IDE7CiAJbHJvLT50b3RhbF9sZW4gPSBudG9ocyhpcC0+dG90X2xlbik7CiAJbHJvLT5mcmFnc19sZW4gPSAwOworCWxyby0+dmxhbl90YWcgPSB2bGFuX3RhZzsKIAkvKgogCSAqIGNoZWNrIGlmIHdlIHNhdyBUQ1AgdGltZXN0YW1wLiBPdGhlciBjb25zaXN0ZW5jeSBjaGVja3MgaGF2ZQogCSAqIGFscmVhZHkgYmVlbiBkb25lLgpAQCAtODI1MywxNSArODUwOSwxNiBAQAogCXN0cnVjdCBpcGhkciAqaXA7CiAJc3RydWN0IHRjcGhkciAqdGNwaDsKIAlpbnQgcmV0ID0gMCwgaTsKKwl1MTYgdmxhbl90YWcgPSAwOwogCiAJaWYgKCEocmV0ID0gY2hlY2tfTDJfbHJvX2NhcGFibGUoYnVmZmVyLCAmaXAsIChzdHJ1Y3QgdGNwaGRyICoqKXRjcCwKLQkJCQkJIHJ4ZHApKSkgeworCQkJCQkgcnhkcCwgc3ApKSkgewogCQlEQkdfUFJJTlQoSU5GT19EQkcsIklQIFNhZGRyOiAleCBEYWRkcjogJXhcbiIsCiAJCQkgIGlwLT5zYWRkciwgaXAtPmRhZGRyKTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlyZXR1cm4gcmV0OwotCX0KIAorCXZsYW5fdGFnID0gUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpOwogCXRjcGggPSAoc3RydWN0IHRjcGhkciAqKSp0Y3A7CiAJKnRjcF9sZW4gPSBnZXRfbDRfcHlsZF9sZW5ndGgoaXAsIHRjcGgpOwogCWZvciAoaT0wOyBpPE1BWF9MUk9fU0VTU0lPTlM7IGkrKykgewpAQCAtODMyMSw3ICs4NTc4LDggQEAKIAogCXN3aXRjaCAocmV0KSB7CiAJCWNhc2UgMzoKLQkJCWluaXRpYXRlX25ld19zZXNzaW9uKCpscm8sIGJ1ZmZlciwgaXAsIHRjcGgsICp0Y3BfbGVuKTsKKwkJCWluaXRpYXRlX25ld19zZXNzaW9uKCpscm8sIGJ1ZmZlciwgaXAsIHRjcGgsICp0Y3BfbGVuLAorCQkJCQkJCQl2bGFuX3RhZyk7CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJdXBkYXRlX0wzTDRfaGVhZGVyKHNwLCAqbHJvKTsKQEAgLTgzNDksMTUgKzg2MDcsMjUgQEAKIAltZW1zZXQobHJvLCAwLCBscm9fc3RydWN0X3NpemUpOwogfQogCi1zdGF0aWMgdm9pZCBxdWV1ZV9yeF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgcXVldWVfcnhfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW5fdGFnKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKKwlzdHJ1Y3QgczJpb19uaWMgKnNwID0gZGV2LT5wcml2OwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQlpZiAobmFwaSkKLQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQllbHNlCi0JCW5ldGlmX3J4KHNrYik7CisJaWYgKHNwLT52bGdycCAmJiB2bGFuX3RhZworCQkmJiAodmxhbl9zdHJpcF9mbGFnKSkgeworCQkvKiBRdWV1ZWluZyB0aGUgdmxhbiBmcmFtZSB0byB0aGUgdXBwZXIgbGF5ZXIgKi8KKwkJaWYgKHNwLT5jb25maWcubmFwaSkKKwkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHNwLT52bGdycCwgdmxhbl90YWcpOworCQllbHNlCisJCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBzcC0+dmxncnAsIHZsYW5fdGFnKTsKKwl9IGVsc2UgeworCQlpZiAoc3AtPmNvbmZpZy5uYXBpKQorCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJZWxzZQorCQkJbmV0aWZfcngoc2tiKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGxyb19hcHBlbmRfcGt0KHN0cnVjdCBzMmlvX25pYyAqc3AsIHN0cnVjdCBscm8gKmxybywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uaCBiL2RyaXZlcnMvbmV0L3MyaW8uaAppbmRleCA2NGI4OGViLi5lNjhmZGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby5oCkBAIC0zNjAsNyArMzYwLDEwIEBACiAjZGVmaW5lIE1BWF9UWF9GSUZPUyA4CiAjZGVmaW5lIE1BWF9SWF9SSU5HUyA4CiAKLSNkZWZpbmUgRklGT19ERUZBVUxUX05VTQkxCisjZGVmaW5lIEZJRk9fREVGQVVMVF9OVU0JNQorI2RlZmluZSBGSUZPX1VEUF9NQVhfTlVNCQkJMiAvKiAwIC0gZXZlbiwgMSAtb2RkIHBvcnRzICovCisjZGVmaW5lIEZJRk9fT1RIRVJfTUFYX05VTQkJCTEKKwogCiAjZGVmaW5lIE1BWF9SWF9ERVNDXzEgIChNQVhfUlhfUklOR1MgKiBNQVhfUlhfQkxPQ0tTX1BFUl9SSU5HICogMTI3ICkKICNkZWZpbmUgTUFYX1JYX0RFU0NfMiAgKE1BWF9SWF9SSU5HUyAqIE1BWF9SWF9CTE9DS1NfUEVSX1JJTkcgKiA4NSApCkBAIC0zNzksNiArMzgyLDggQEAKIAl7MCwgMSwgMiwgMywgNCwgNSwgNiwgN30sCiB9OwogCitzdGF0aWMgdTE2IGZpZm9fc2VsZWN0b3JbTUFYX1RYX0ZJRk9TXSA9IHswLCAxLCAzLCAzLCA3LCA3LCA3LCA3fTsKKwogLyogTWFpbnRhaW5zIFBlciBGSUZPIHJlbGF0ZWQgaW5mb3JtYXRpb24uICovCiBzdHJ1Y3QgdHhfZmlmb19jb25maWcgewogI2RlZmluZQlNQVhfQVZBSUxBQkxFX1RYRFMJODE5MgpAQCAtNDMxLDYgKzQzNiwxMiBAQAogLyogVHggU2lkZSAqLwogCXUzMiB0eF9maWZvX251bTsJLypOdW1iZXIgb2YgVHggRklGT3MgKi8KIAorCS8qIDAtTm8gc3RlZXJpbmcsIDEtUHJpb3JpdHkgc3RlZXJpbmcsIDItRGVmYXVsdCBmaWZvIG1hcCAqLworI2RlZmluZQlOT19TVEVFUklORwkJCQkwCisjZGVmaW5lCVRYX1BSSU9SSVRZX1NURUVSSU5HCQkJMHgxCisjZGVmaW5lIFRYX0RFRkFVTFRfU1RFRVJJTkcgCQkJMHgyCisJdTggdHhfc3RlZXJpbmdfdHlwZTsKKwogCXU4IGZpZm9fbWFwcGluZ1tNQVhfVFhfRklGT1NdOwogCXN0cnVjdCB0eF9maWZvX2NvbmZpZyB0eF9jZmdbTUFYX1RYX0ZJRk9TXTsJLypQZXItVHggRklGTyBjb25maWcgKi8KIAl1MzIgbWF4X3R4ZHM7CQkvKk1heCBuby4gb2YgVHggYnVmZmVyIGRlc2NyaXB0b3IgcGVyIFR4REwgKi8KQEAgLTQ2NCw2ICs0NzUsNyBAQAogCWludCBtYXhfbWNfYWRkcjsJLyogeGVuYT02NCBoZXJjPTI1NiAqLwogCWludCBtYXhfbWFjX2FkZHI7CS8qIHhlbmE9MTYgaGVyYz02NCAqLwogCWludCBtY19zdGFydF9vZmZzZXQ7CS8qIHhlbmE9MTYgaGVyYz02NCAqLworCXU4IG11bHRpcTsKIH07CiAKIC8qIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgTUFDIEFkZHJzICovCkBAIC01MzQsNiArNTQ2LDcgQEAKICNkZWZpbmUgUlhEX09XTl9YRU5BICAgICAgICAgICAgczJCSVQoNykKICNkZWZpbmUgUlhEX1RfQ09ERSAgICAgICAgICAgICAgKHMyQklUKDEyKXxzMkJJVCgxMyl8czJCSVQoMTQpfHMyQklUKDE1KSkKICNkZWZpbmUgUlhEX0ZSQU1FX1BST1RPICAgICAgICAgdkJJVCgweEZGRkYsMjQsOCkKKyNkZWZpbmUgUlhEX0ZSQU1FX1ZMQU5fVEFHICAgICAgczJCSVQoMjQpCiAjZGVmaW5lIFJYRF9GUkFNRV9QUk9UT19JUFY0ICAgIHMyQklUKDI3KQogI2RlZmluZSBSWERfRlJBTUVfUFJPVE9fSVBWNiAgICBzMkJJVCgyOCkKICNkZWZpbmUgUlhEX0ZSQU1FX0lQX0ZSQUcJczJCSVQoMjkpCkBAIC03MjAsNiArNzMzLDE1IEBACiAJICogdGhlIGJ1ZmZlcnMKIAkgKi8KIAlzdHJ1Y3QgdHhfY3Vycl9nZXRfaW5mbyB0eF9jdXJyX2dldF9pbmZvOworI2RlZmluZSBGSUZPX1FVRVVFX1NUQVJUIDAKKyNkZWZpbmUgRklGT19RVUVVRV9TVE9QIDEKKwlpbnQgcXVldWVfc3RhdGU7CisKKwkvKiBjb3B5IG9mIHNwLT5kZXYgcG9pbnRlciAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwkvKiBjb3B5IG9mIG11bHRpcSBzdGF0dXMgKi8KKwl1OCBtdWx0aXE7CiAKIAkvKiBQZXIgZmlmbyBsb2NrICovCiAJc3BpbmxvY2tfdCB0eF9sb2NrOwpAQCAtODA4LDEwICs4MzAsMTEgQEAKIAlpbnQJCXNnX251bTsKIAlpbnQJCWluX3VzZTsKIAlfX2JlMTYJCXdpbmRvdzsKKwl1MTYgICAgICAgICAgICAgdmxhbl90YWc7CiAJdTMyCQljdXJfdHN2YWw7CiAJX19iZTMyCQljdXJfdHNlY3I7CiAJdTgJCXNhd190czsKLX07Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogVGhlc2UgZmxhZ3MgcmVwcmVzZW50IHRoZSBkZXZpY2VzIHRlbXBvcmFyeSBzdGF0ZSAqLwogZW51bSBzMmlvX2RldmljZV9zdGF0ZV90CkBAIC04ODUsNiArOTA4LDI3IEBACiAJICovCiAJaW50IHJ4X2NzdW07CiAKKwkvKiBCZWxvdyB2YXJpYWJsZXMgYXJlIHVzZWQgZm9yIGZpZm8gc2VsZWN0aW9uIHRvIHRyYW5zbWl0IGEgcGFja2V0ICovCisJdTE2IGZpZm9fc2VsZWN0b3JbTUFYX1RYX0ZJRk9TXTsKKworCS8qIFRvdGFsIGZpZm9zIGZvciB0Y3AgcGFja2V0cyAqLworCXU4IHRvdGFsX3RjcF9maWZvczsKKworCS8qCisJKiBCZWdpbm5pbmcgaW5kZXggb2YgdWRwIGZvciB1ZHAgcGFja2V0cworCSogVmFsdWUgd2lsbCBiZSBlcXVhbCB0bworCSogKHR4X2ZpZm9fbnVtIC0gRklGT19VRFBfTUFYX05VTSAtIEZJRk9fT1RIRVJfTUFYX05VTSkKKwkqLworCXU4IHVkcF9maWZvX2lkeDsKKworCXU4IHRvdGFsX3VkcF9maWZvczsKKworCS8qCisJICogQmVnaW5uaW5nIGluZGV4IG9mIGZpZm8gZm9yIGFsbCBvdGhlciBwYWNrZXRzCisJICogVmFsdWUgd2lsbCBiZSBlcXVhbCB0byAodHhfZmlmb19udW0gLSBGSUZPX09USEVSX01BWF9OVU0pCisJKi8KKwl1OCBvdGhlcl9maWZvX2lkeDsKKwogCS8qICBhZnRlciBibGluaywgdGhlIGFkYXB0ZXIgbXVzdCBiZSByZXN0b3JlZCB3aXRoIG9yaWdpbmFsCiAJICogIHZhbHVlcy4KIAkgKi8KQEAgLTEwODcsNyArMTEzMSw3IEBACiBzMmlvX2NsdWJfdGNwX3Nlc3Npb24odTggKmJ1ZmZlciwgdTggKip0Y3AsIHUzMiAqdGNwX2xlbiwgc3RydWN0IGxybyAqKmxybywKIAkJICAgICAgc3RydWN0IFJ4RF90ICpyeGRwLCBzdHJ1Y3QgczJpb19uaWMgKnNwKTsKIHN0YXRpYyB2b2lkIGNsZWFyX2xyb19zZXNzaW9uKHN0cnVjdCBscm8gKmxybyk7Ci1zdGF0aWMgdm9pZCBxdWV1ZV9yeF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIHF1ZXVlX3J4X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuX3RhZyk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfTDNMNF9oZWFkZXIoc3RydWN0IHMyaW9fbmljICpzcCwgc3RydWN0IGxybyAqbHJvKTsKIHN0YXRpYyB2b2lkIGxyb19hcHBlbmRfcGt0KHN0cnVjdCBzMmlvX25pYyAqc3AsIHN0cnVjdCBscm8gKmxybywKIAkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0Y3BfbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKaW5kZXggNDg3ZjlkMi4uNTk4NmNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKQEAgLTg4LDMxICs4OCwzMSBAQAogCiAKIC8qIFNCMTAwMCBoYXJkd2FyZSByb3V0aW5lcyB0byBiZSB1c2VkIGR1cmluZyBvcGVuL2NvbmZpZ3VyYXRpb24gcGhhc2VzICovCi1zdGF0aWMgaW5saW5lIGludCBjYXJkX3dhaXRfZm9yX2J1c3lfY2xlYXIoY29uc3QgaW50IGlvYWRkcltdLAorc3RhdGljIGludCBjYXJkX3dhaXRfZm9yX2J1c3lfY2xlYXIoY29uc3QgaW50IGlvYWRkcltdLAogCWNvbnN0IGNoYXIqIG5hbWUpOwotc3RhdGljIGlubGluZSBpbnQgY2FyZF93YWl0X2Zvcl9yZWFkeShjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUsCitzdGF0aWMgaW50IGNhcmRfd2FpdF9mb3JfcmVhZHkoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lLAogCXVuc2lnbmVkIGNoYXIgaW5bXSk7CiBzdGF0aWMgaW50IGNhcmRfc2VuZF9jb21tYW5kKGNvbnN0IGludCBpb2FkZHJbXSwgY29uc3QgY2hhciogbmFtZSwKIAljb25zdCB1bnNpZ25lZCBjaGFyIG91dFtdLCB1bnNpZ25lZCBjaGFyIGluW10pOwogCiAvKiBTQjEwMDAgaGFyZHdhcmUgcm91dGluZXMgdG8gYmUgdXNlZCBkdXJpbmcgZnJhbWUgcnggaW50ZXJydXB0ICovCi1zdGF0aWMgaW5saW5lIGludCBzYjEwMDBfd2FpdF9mb3JfcmVhZHkoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lKTsKLXN0YXRpYyBpbmxpbmUgaW50IHNiMTAwMF93YWl0X2Zvcl9yZWFkeV9jbGVhcihjb25zdCBpbnQgaW9hZGRyW10sCitzdGF0aWMgaW50IHNiMTAwMF93YWl0X2Zvcl9yZWFkeShjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpOworc3RhdGljIGludCBzYjEwMDBfd2FpdF9mb3JfcmVhZHlfY2xlYXIoY29uc3QgaW50IGlvYWRkcltdLAogCWNvbnN0IGNoYXIqIG5hbWUpOwotc3RhdGljIGlubGluZSB2b2lkIHNiMTAwMF9zZW5kX2NvbW1hbmQoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lLAorc3RhdGljIHZvaWQgc2IxMDAwX3NlbmRfY29tbWFuZChjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUsCiAJY29uc3QgdW5zaWduZWQgY2hhciBvdXRbXSk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2IxMDAwX3JlYWRfc3RhdHVzKGNvbnN0IGludCBpb2FkZHJbXSwgdW5zaWduZWQgY2hhciBpbltdKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzYjEwMDBfaXNzdWVfcmVhZF9jb21tYW5kKGNvbnN0IGludCBpb2FkZHJbXSwKK3N0YXRpYyB2b2lkIHNiMTAwMF9yZWFkX3N0YXR1cyhjb25zdCBpbnQgaW9hZGRyW10sIHVuc2lnbmVkIGNoYXIgaW5bXSk7CitzdGF0aWMgdm9pZCBzYjEwMDBfaXNzdWVfcmVhZF9jb21tYW5kKGNvbnN0IGludCBpb2FkZHJbXSwKIAljb25zdCBjaGFyKiBuYW1lKTsKIAogLyogU0IxMDAwIGNvbW1hbmRzIGZvciBvcGVuL2NvbmZpZ3VyYXRpb24gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNiMTAwMF9yZXNldChjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpOwotc3RhdGljIGlubGluZSBpbnQgc2IxMDAwX2NoZWNrX0NSQyhjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpOworc3RhdGljIGludCBzYjEwMDBfcmVzZXQoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lKTsKK3N0YXRpYyBpbnQgc2IxMDAwX2NoZWNrX0NSQyhjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpOwogc3RhdGljIGlubGluZSBpbnQgc2IxMDAwX3N0YXJ0X2dldF9zZXRfY29tbWFuZChjb25zdCBpbnQgaW9hZGRyW10sCiAJY29uc3QgY2hhciogbmFtZSk7Ci1zdGF0aWMgaW5saW5lIGludCBzYjEwMDBfZW5kX2dldF9zZXRfY29tbWFuZChjb25zdCBpbnQgaW9hZGRyW10sCitzdGF0aWMgaW50IHNiMTAwMF9lbmRfZ2V0X3NldF9jb21tYW5kKGNvbnN0IGludCBpb2FkZHJbXSwKIAljb25zdCBjaGFyKiBuYW1lKTsKLXN0YXRpYyBpbmxpbmUgaW50IHNiMTAwMF9hY3RpdmF0ZShjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpOworc3RhdGljIGludCBzYjEwMDBfYWN0aXZhdGUoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lKTsKIHN0YXRpYyBpbnQgc2IxMDAwX2dldF9maXJtd2FyZV92ZXJzaW9uKGNvbnN0IGludCBpb2FkZHJbXSwKIAljb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBjaGFyIHZlcnNpb25bXSwgaW50IGRvX2VuZCk7CiBzdGF0aWMgaW50IHNiMTAwMF9nZXRfZnJlcXVlbmN5KGNvbnN0IGludCBpb2FkZHJbXSwgY29uc3QgY2hhciogbmFtZSwKQEAgLTEyNSw4ICsxMjUsOCBAQAogCWNvbnN0IHNob3J0IFBJRFtdKTsKIAogLyogU0IxMDAwIGNvbW1hbmRzIGZvciBmcmFtZSByeCBpbnRlcnJ1cHQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNiMTAwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzYjEwMDBfZXJyb3JfZHBjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzYjEwMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzYjEwMDBfZXJyb3JfZHBjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc2IxMDAwX3BucF9pZHNbXSA9IHsKIAl7ICJHSUMxMDAwIiwgMCB9LApAQCAtMjUwLDcgKzI1MCw3IEBACiBzdGF0aWMgY29uc3QgaW50IFRpbWVPdXRKaWZmaWVzID0gKDg3NSAqIEhaKSAvIDEwMDsKIAogLyogQ2FyZCBXYWl0IEZvciBCdXN5IENsZWFyIChjYW5ub3QgYmUgdXNlZCBkdXJpbmcgYW4gaW50ZXJydXB0KSAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIGNhcmRfd2FpdF9mb3JfYnVzeV9jbGVhcihjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAJdW5zaWduZWQgY2hhciBhOwpAQCAtMjc0LDcgKzI3NCw3IEBACiB9CiAKIC8qIENhcmQgV2FpdCBGb3IgUmVhZHkgKGNhbm5vdCBiZSB1c2VkIGR1cmluZyBhbiBpbnRlcnJ1cHQpICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogY2FyZF93YWl0X2Zvcl9yZWFkeShjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIGNoYXIgaW5bXSkKIHsKIAl1bnNpZ25lZCBjaGFyIGE7CkBAIC0zNTQsNyArMzU0LDcgQEAKIHN0YXRpYyBjb25zdCBpbnQgU2IxMDAwVGltZU91dEppZmZpZXMgPSA3ICogSFo7CiAKIC8qIENhcmQgV2FpdCBGb3IgUmVhZHkgKHRvIGJlIHVzZWQgZHVyaW5nIGZyYW1lIHJ4KSAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIHNiMTAwMF93YWl0X2Zvcl9yZWFkeShjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwpAQCAtMzgwLDcgKzM4MCw3IEBACiB9CiAKIC8qIENhcmQgV2FpdCBGb3IgUmVhZHkgQ2xlYXIgKHRvIGJlIHVzZWQgZHVyaW5nIGZyYW1lIHJ4KSAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIHNiMTAwMF93YWl0X2Zvcl9yZWFkeV9jbGVhcihjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwpAQCAtNDA1LDcgKzQwNSw3IEBACiB9CiAKIC8qIENhcmQgU2VuZCBDb21tYW5kICh0byBiZSB1c2VkIGR1cmluZyBmcmFtZSByeCkgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIHNiMTAwMF9zZW5kX2NvbW1hbmQoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lLAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgb3V0W10pCiB7CkBAIC00MjIsNyArNDIyLDcgQEAKIH0KIAogLyogQ2FyZCBSZWFkIFN0YXR1cyAodG8gYmUgdXNlZCBkdXJpbmcgZnJhbWUgcngpICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBzYjEwMDBfcmVhZF9zdGF0dXMoY29uc3QgaW50IGlvYWRkcltdLCB1bnNpZ25lZCBjaGFyIGluW10pCiB7CiAJaW5bMV0gPSBpbmIoaW9hZGRyWzBdICsgMSk7CkBAIC00MzQsMTAgKzQzNCwxMCBAQAogfQogCiAvKiBJc3N1ZSBSZWFkIENvbW1hbmQgKHRvIGJlIHVzZWQgZHVyaW5nIGZyYW1lIHJ4KSAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogc2IxMDAwX2lzc3VlX3JlYWRfY29tbWFuZChjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMFs2XSA9IHsweDIwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwfTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMFs2XSA9IHsweDIwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwfTsKIAogCXNiMTAwMF93YWl0X2Zvcl9yZWFkeV9jbGVhcihpb2FkZHIsIG5hbWUpOwogCW91dGIoMHhhMCwgaW9hZGRyWzBdICsgNik7CkBAIC00NTAsMTIgKzQ1MCwxMyBAQAogICogU0IxMDAwIGNvbW1hbmRzIGZvciBvcGVuL2NvbmZpZ3VyYXRpb24KICAqLwogLyogcmVzZXQgU0IxMDAwIGNhcmQgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBzYjEwMDBfcmVzZXQoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lKQogeworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQwWzZdID0gezB4ODAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCiAJdW5zaWduZWQgY2hhciBzdFs3XTsKIAlpbnQgcG9ydCwgc3RhdHVzOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CiAKIAlwb3J0ID0gaW9hZGRyWzFdICsgNjsKIAlvdXRiKDB4NCwgcG9ydCk7CkBAIC00NzksMTIgKzQ4MCwxMyBAQAogfQogCiAvKiBjaGVjayBTQjEwMDAgZmlybXdhcmUgQ1JDICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogc2IxMDAwX2NoZWNrX0NSQyhjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKIAl1bnNpZ25lZCBjaGFyIHN0WzddOwogCWludCBjcmMsIHN0YXR1czsKLQljb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQwWzZdID0gezB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwogCiAJLyogY2hlY2sgQ1JDICovCiAJaWYgKChzdGF0dXMgPSBjYXJkX3NlbmRfY29tbWFuZChpb2FkZHIsIG5hbWUsIENvbW1hbmQwLCBzdCkpKQpAQCAtNDk4LDMyICs1MDAsMzUgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBzYjEwMDBfc3RhcnRfZ2V0X3NldF9jb21tYW5kKGNvbnN0IGludCBpb2FkZHJbXSwgY29uc3QgY2hhciogbmFtZSkKIHsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMFs2XSA9IHsweDgwLCAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKwogCXVuc2lnbmVkIGNoYXIgc3RbN107Ci0JY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMFs2XSA9IHsweDgwLCAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAogCXJldHVybiBjYXJkX3NlbmRfY29tbWFuZChpb2FkZHIsIG5hbWUsIENvbW1hbmQwLCBzdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBzYjEwMDBfZW5kX2dldF9zZXRfY29tbWFuZChjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUpCiB7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHgxYiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDFbNl0gPSB7MHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKIAl1bnNpZ25lZCBjaGFyIHN0WzddOwogCWludCBzdGF0dXM7Ci0JY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMFs2XSA9IHsweDgwLCAweDFiLCAweDAyLCAweDAwLCAweDAwLCAweDAwfTsKLQljb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQxWzZdID0gezB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwogCiAJaWYgKChzdGF0dXMgPSBjYXJkX3NlbmRfY29tbWFuZChpb2FkZHIsIG5hbWUsIENvbW1hbmQwLCBzdCkpKQogCQlyZXR1cm4gc3RhdHVzOwogCXJldHVybiBjYXJkX3NlbmRfY29tbWFuZChpb2FkZHIsIG5hbWUsIENvbW1hbmQxLCBzdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBzYjEwMDBfYWN0aXZhdGUoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lKQogeworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQwWzZdID0gezB4ODAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQxWzZdID0gezB4ODAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCiAJdW5zaWduZWQgY2hhciBzdFs3XTsKIAlpbnQgc3RhdHVzOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Ci0JY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMVs2XSA9IHsweDgwLCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAogCXNzbGVlcCgxKTsKIAlpZiAoKHN0YXR1cyA9IGNhcmRfc2VuZF9jb21tYW5kKGlvYWRkciwgbmFtZSwgQ29tbWFuZDAsIHN0KSkpCkBAIC01NDQsOSArNTQ5LDEwIEBACiBzYjEwMDBfZ2V0X2Zpcm13YXJlX3ZlcnNpb24oY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lLAogCXVuc2lnbmVkIGNoYXIgdmVyc2lvbltdLCBpbnQgZG9fZW5kKQogeworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQwWzZdID0gezB4ODAsIDB4MjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCiAJdW5zaWduZWQgY2hhciBzdFs3XTsKIAlpbnQgc3RhdHVzOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CiAKIAlpZiAoKHN0YXR1cyA9IHNiMTAwMF9zdGFydF9nZXRfc2V0X2NvbW1hbmQoaW9hZGRyLCBuYW1lKSkpCiAJCXJldHVybiBzdGF0dXM7CkBAIC01NjYsOSArNTcyLDEwIEBACiBzdGF0aWMgaW50CiBzYjEwMDBfZ2V0X2ZyZXF1ZW5jeShjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUsIGludCogZnJlcXVlbmN5KQogeworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQwWzZdID0gezB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCiAJdW5zaWduZWQgY2hhciBzdFs3XTsKIAlpbnQgc3RhdHVzOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CiAKIAl1ZGVsYXkoMTAwMCk7CiAJaWYgKChzdGF0dXMgPSBzYjEwMDBfc3RhcnRfZ2V0X3NldF9jb21tYW5kKGlvYWRkciwgbmFtZSkpKQpAQCAtNjEzLDEyICs2MjAsMTMgQEAKIHN0YXRpYyBpbnQKIHNiMTAwMF9nZXRfUElEcyhjb25zdCBpbnQgaW9hZGRyW10sIGNvbnN0IGNoYXIqIG5hbWUsIHNob3J0IFBJRFtdKQogeworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQwWzZdID0gezB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQxWzZdID0gezB4ODAsIDB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQyWzZdID0gezB4ODAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQzWzZdID0gezB4ODAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCiAJdW5zaWduZWQgY2hhciBzdFs3XTsKIAlpbnQgc3RhdHVzOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Ci0JY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMVs2XSA9IHsweDgwLCAweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLQljb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQyWzZdID0gezB4ODAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDNbNl0gPSB7MHg4MCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CiAKIAl1ZGVsYXkoMTAwMCk7CiAJaWYgKChzdGF0dXMgPSBzYjEwMDBfc3RhcnRfZ2V0X3NldF9jb21tYW5kKGlvYWRkciwgbmFtZSkpKQpAQCAtNjQ3LDYgKzY1NSw4IEBACiBzdGF0aWMgaW50CiBzYjEwMDBfc2V0X1BJRHMoY29uc3QgaW50IGlvYWRkcltdLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBzaG9ydCBQSURbXSkKIHsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kNFs2XSA9IHsweDgwLCAweDJlLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKwogCXVuc2lnbmVkIGNoYXIgc3RbN107CiAJc2hvcnQgcDsKIAlpbnQgc3RhdHVzOwpAQCAtNjU0LDcgKzY2NCw2IEBACiAJdW5zaWduZWQgY2hhciBDb21tYW5kMVs2XSA9IHsweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAl1bnNpZ25lZCBjaGFyIENvbW1hbmQyWzZdID0gezB4ODAsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwogCXVuc2lnbmVkIGNoYXIgQ29tbWFuZDNbNl0gPSB7MHg4MCwgMHgzNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Ci0JY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kNFs2XSA9IHsweDgwLCAweDJlLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKIAogCXVkZWxheSgxMDAwKTsKIAlpZiAoKHN0YXR1cyA9IHNiMTAwMF9zdGFydF9nZXRfc2V0X2NvbW1hbmQoaW9hZGRyLCBuYW1lKSkpCkBAIC02OTQsNyArNzAzLDcgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBzYjEwMDBfcHJpbnRfc3RhdHVzX2J1ZmZlcihjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBjaGFyIHN0W10sCiAJdW5zaWduZWQgY2hhciBidWZmZXJbXSwgaW50IHNpemUpCiB7CkBAIC03MjUsNyArNzM0LDcgQEAKIC8qIHJlY2VpdmUgYSBzaW5nbGUgZnJhbWUgYW5kIGFzc2VtYmxlIGRhdGFncmFtCiAgKiAodGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGludGVycnVwdCByb3V0aW5lKQogICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogc2IxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAKQEAgLTg4OCwxNCArODk3LDE1IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBzYjEwMDBfZXJyb3JfZHBjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHgyNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGNoYXIgc3RbNV07CiAJaW50IGlvYWRkclsyXTsKIAlzdHJ1Y3Qgc2IxMDAwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQwWzZdID0gezB4ODAsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwogCWNvbnN0IGludCBFcnJvckRwY0NvdW50ZXJJbml0aWFsaXplID0gMjAwOwogCiAJaW9hZGRyWzBdID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0xMDc3LDE0ICsxMDg3LDE1IEBACiAvKiBTQjEwMDAgaW50ZXJydXB0IGhhbmRsZXIuICovCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2IxMDAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDBbNl0gPSB7MHg4MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ29tbWFuZDFbNl0gPSB7MHg4MCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGNoYXIgc3Q7CiAJaW50IGlvYWRkclsyXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwogCXN0cnVjdCBzYjEwMDBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JY29uc3QgdW5zaWduZWQgY2hhciBDb21tYW5kMFs2XSA9IHsweDgwLCAweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLQljb25zdCB1bnNpZ25lZCBjaGFyIENvbW1hbmQxWzZdID0gezB4ODAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwogCWNvbnN0IGludCBNYXhSeEVycm9yQ291bnQgPSA2OwogCiAJaW9hZGRyWzBdID0gZGV2LT5iYXNlX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKaW5kZXggN2I1M2Q2NS4uODg4YjdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwpAQCAtMjM3NCw3ICsyMzc0LDcgQEAKIAkgICAgICAgZGV2LT5uYW1lLCBiYXNlLCBwcmludF9tYWMobWFjLCBlYWRkcikpOwogCiAJc2MtPm1paV9idXMubmFtZSA9IHNibWFjX21kaW9fc3RyaW5nOwotCXNjLT5taWlfYnVzLmlkID0gaWR4OworCXNucHJpbnRmKHNjLT5taWlfYnVzLmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIGlkeCk7CiAJc2MtPm1paV9idXMucHJpdiA9IHNjOwogCXNjLT5taWlfYnVzLnJlYWQgPSBzYm1hY19taWlfcmVhZDsKIAlzYy0+bWlpX2J1cy53cml0ZSA9IHNibWFjX21paV93cml0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYyBiL2RyaXZlcnMvbmV0L3NjOTIwMzEuYwppbmRleCAzN2I0MjM5Li5mNjRhODYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYzkyMDMxLmMKKysrIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCkBAIC0zMTEsNyArMzExLDYgQEAKIAogCS8qIGZvciBkZXYtPmdldF9zdGF0cyAqLwogCWxvbmcJCQlyeF92YWx1ZTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIH07CiAKIC8qIEkgZG9uJ3Qga25vdyB3aGljaCByZWdpc3RlcnMgY2FuIGJlIHNhZmVseSByZWFkOyBob3dldmVyLCBJIGNhbiBndWVzcwpAQCAtNDIxLDcgKzQyMCw3IEBACiAKIAl3aGlsZSAocHJpdi0+dHhfaGVhZCAtIHByaXYtPnR4X3RhaWwgPiAwKSB7CiAJCXByaXYtPnR4X3RhaWwrKzsKLQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAl9CiAJcHJpdi0+dHhfaGVhZCA9IHByaXYtPnR4X3RhaWwgPSAwOwogfQpAQCAtNjc2LDI3ICs2NzUsMjcgQEAKIAkJcHJpdi0+dHhfdGFpbCsrOwogCiAJCWlmICh0eF9zdGF0dXMgJiBUeFN0YXRPSykgewotCQkJcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gdHhfc3RhdHVzICYgMHgxZmZmOwotCQkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSB0eF9zdGF0dXMgJiAweDFmZmY7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCS8qIE5vdGU6IFR4Q2Fycmllckxvc3QgaXMgYWx3YXlzIGFzc2VydGVkIGF0IDEwMG1icHMuICovCi0JCQlwcml2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgPj4gMjIpICYgMHhmOworCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgPj4gMjIpICYgMHhmOwogCQl9CiAKIAkJaWYgKHR4X3N0YXR1cyAmIChUeE91dE9mV2luZG93IHwgVHhBYm9ydGVkKSkgewotCQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJCQlpZiAodHhfc3RhdHVzICYgVHhBYm9ydGVkKQotCQkJCXByaXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCiAJCQlpZiAodHhfc3RhdHVzICYgVHhDYXJyaWVyTG9zdCkKLQkJCQlwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAogCQkJaWYgKHR4X3N0YXR1cyAmIFR4T3V0T2ZXaW5kb3cpCi0JCQkJcHJpdi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogCQl9CiAKIAkJaWYgKHR4X3N0YXR1cyAmIFR4VW5kZXJydW4pCi0JCQlwcml2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCX0KIAogCWlmIChwcml2LT50eF90YWlsICE9IG9sZF90eF90YWlsKQpAQCAtNzA0LDI3ICs3MDMsMjkgQEAKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgX3NjOTIwMzFfcnhfdGFza2xldF9lcnJvcih1MzIgcnhfc3RhdHVzLAotCQlzdHJ1Y3Qgc2M5MjAzMV9wcml2ICpwcml2LCB1bnNpZ25lZCByeF9zaXplKQorc3RhdGljIHZvaWQgX3NjOTIwMzFfcnhfdGFza2xldF9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgIHUzMiByeF9zdGF0dXMsIHVuc2lnbmVkIHJ4X3NpemUpCiB7CiAJaWYocnhfc2l6ZSA+IChNQVhfRVRIX0ZSQU1FX1NJWkUgKyA0KSB8fCByeF9zaXplIDwgMTYpIHsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJfQogCiAJaWYgKCEocnhfc3RhdHVzICYgUnhTdGF0ZXNPSykpIHsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAKIAkJaWYgKHJ4X3N0YXR1cyAmIChSeEh1Z2VGcmFtZSB8IFJ4U21hbGxGcmFtZSkpCi0JCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAogCQlpZiAocnhfc3RhdHVzICYgUnhCYWRBbGlnbikKLQkJCXByaXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAogCQlpZiAoIShyeF9zdGF0dXMgJiBSeENSQ09LKSkKLQkJCXByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQl9IGVsc2UKKwkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCX0gZWxzZSB7CisJCXN0cnVjdCBzYzkyMDMxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCQlwcml2LT5yeF9sb3NzKys7CisJfQogfQogCiBzdGF0aWMgdm9pZCBfc2M5MjAzMV9yeF90YXNrbGV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC03ODMsNyArNzg0LDcgQEAKIAkJCQl8fCByeF9zaXplID4gKE1BWF9FVEhfRlJBTUVfU0laRSArIDQpCiAJCQkJfHwgcnhfc2l6ZSA8IDE2CiAJCQkJfHwgIShyeF9zdGF0dXMgJiBSeFN0YXRlc09LKSkpIHsKLQkJCV9zYzkyMDMxX3J4X3Rhc2tsZXRfZXJyb3Iocnhfc3RhdHVzLCBwcml2LCByeF9zaXplKTsKKwkJCV9zYzkyMDMxX3J4X3Rhc2tsZXRfZXJyb3IoZGV2LCByeF9zdGF0dXMsIHJ4X3NpemUpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNzk1LDcgKzc5Niw3IEBACiAKIAkJcnhfbGVuIC09IHJ4X3NpemVfYWxpZ24gKyA0OwogCi0JCXNrYiA9IGRldl9hbGxvY19za2IocGt0X3NpemUgKyBORVRfSVBfQUxJR04pOworCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcGt0X3NpemUgKyBORVRfSVBfQUxJR04pOwogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGRuJ3QgYWxsb2NhdGUgYSBza2JfYnVmZiBmb3IgYSBwYWNrZXQgb2Ygc2l6ZSAldVxuIiwKQEAgLTgxOCwxMSArODE5LDExIEBACiAJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCW5ldGlmX3J4KHNrYik7CiAKLQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X3NpemU7Ci0JCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3Rfc2l6ZTsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAkJaWYgKHJ4X3N0YXR1cyAmIFJ4X011bHRpY2FzdCkKLQkJCXByaXYtPnN0YXRzLm11bHRpY2FzdCsrOworCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAogCW5leHQ6CiAJCXJ4X3Jpbmdfb2Zmc2V0ID0gKHJ4X3Jpbmdfb2Zmc2V0ICsgcnhfc2l6ZV9hbGlnbikgJSBSWF9CVUZfTEVOOwpAQCAtODM1LDEzICs4MzYsMTEgQEAKIAogc3RhdGljIHZvaWQgX3NjOTIwMzFfbGlua190YXNrbGV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNjOTIwMzFfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KIAlpZiAoX3NjOTIwMzFfY2hlY2tfbWVkaWEoZGV2KSkKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCWVsc2UgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAl9CiB9CiAKQEAgLTg2NiwxMSArODY1LDExIEBACiAJCV9zYzkyMDMxX3J4X3Rhc2tsZXQoZGV2KTsKIAogCWlmIChpbnRyX3N0YXR1cyAmIFJ4T3ZlcmZsb3cpCi0JCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJaWYgKGludHJfc3RhdHVzICYgVGltZU91dCkgewotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAl9CiAKIAlpZiAoaW50cl9zdGF0dXMgJiAoTGlua0ZhaWwgfCBMaW5rT0spKQpAQCAtOTM2LDM4ICs5MzUsMzYgQEAKIAogCQlpZiAodGVtcCA9PSAweGZmZmYpIHsKIAkJCXByaXYtPnJ4X3ZhbHVlICs9IHRlbXA7Ci0JCQlwcml2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IHByaXYtPnJ4X3ZhbHVlOwotCQl9IGVsc2UgewotCQkJcHJpdi0+c3RhdHMucnhfZmlmb19lcnJvcnMgPSB0ZW1wICsgcHJpdi0+cnhfdmFsdWU7Ci0JCX0KKwkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMgPSBwcml2LT5yeF92YWx1ZTsKKwkJfSBlbHNlCisJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gdGVtcCArIHByaXYtPnJ4X3ZhbHVlOwogCiAJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5sb2NrKTsKIAl9CiAKLQlyZXR1cm4gJnByaXYtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogc3RhdGljIGludCBzYzkyMDMxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc2M5MjAzMV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKnBvcnRfYmFzZSA9IHByaXYtPnBvcnRfYmFzZTsKLQogCXVuc2lnbmVkIGxlbjsKIAl1bnNpZ25lZCBlbnRyeTsKIAl1MzIgdHhfc3RhdHVzOwogCisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IFRYX0JVRl9TSVpFKSkgewotCQllcnIgPSAtRU1TR1NJWkU7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWdvdG8gb3V0OwogCX0KIAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAlpZiAodW5saWtlbHkoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkpIHsKLQkJZXJyID0gLUVOT0xJTks7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTk3OCwxMSArOTc1LDYgQEAKIAlza2JfY29weV9hbmRfY3N1bV9kZXYoc2tiLCBwcml2LT50eF9idWZzICsgZW50cnkgKiBUWF9CVUZfU0laRSk7CiAKIAlsZW4gPSBza2ItPmxlbjsKLQlpZiAodW5saWtlbHkobGVuIDwgRVRIX1pMRU4pKSB7Ci0JCW1lbXNldChwcml2LT50eF9idWZzICsgZW50cnkgKiBUWF9CVUZfU0laRSArIGxlbiwKLQkJCQkwLCBFVEhfWkxFTiAtIGxlbik7Ci0JCWxlbiA9IEVUSF9aTEVOOwotCX0KIAogCXdtYigpOwogCkBAIC0xMDA5LDcgKzEwMDEsNyBAQAogb3V0OgogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiBlcnI7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBzYzkyMDMxX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE0NDYsNiArMTQzOCw3IEBACiAJfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogI2lmIFNDOTIwMzFfVVNFX0JBUiA9PSAwCiAJZGV2LT5tZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgU0M5MjAzMV9VU0VfQkFSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczE5MC5jIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKaW5kZXggMjAyZmRmMy4uMjA3NDVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzMTkwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKQEAgLTE2MzMsMTMgKzE2MzMsMTggQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNpczE5MF9nZXRfbWFjX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIAogCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1OCBmcm9tOworCWludCByYzsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NzMsICZmcm9tKTsKKwlyYyA9IHNpczE5MF9nZXRfbWFjX2FkZHJfZnJvbV9lZXByb20ocGRldiwgZGV2KTsKKwlpZiAocmMgPCAwKSB7CisJCXU4IHJlZzsKIAotCXJldHVybiAoZnJvbSAmIDB4MDAwMDAwMDEpID8KLQkJc2lzMTkwX2dldF9tYWNfYWRkcl9mcm9tX2FwYyhwZGV2LCBkZXYpIDoKLQkJc2lzMTkwX2dldF9tYWNfYWRkcl9mcm9tX2VlcHJvbShwZGV2LCBkZXYpOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDczLCAmcmVnKTsKKworCQlpZiAocmVnICYgMHgwMDAwMDAwMSkKKwkJCXJjID0gc2lzMTkwX2dldF9tYWNfYWRkcl9mcm9tX2FwYyhwZGV2LCBkZXYpOworCX0KKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIHNpczE5MF9zZXRfc3BlZWRfYXV0byhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3NrOThsaW4vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZDkwMGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBTeXNLb25uZWN0IFNLLTk4eHggZGV2aWNlIGRyaXZlci4KLSMKLQotCi0jCi0jIFN0YW5kYWxvbmUgZHJpdmVyIHBhcmFtcwotIyBTS1BBUkFNICs9IC1EU0tfS0VSTkVMXzI0Ci0jIFNLUEFSQU0gKz0gLURTS19LRVJORUxfMjRfMjYKLSMgU0tQQVJBTSArPSAtRFNLX0tFUk5FTF8yNgotIyBTS1BBUkFNICs9IC1EU0tfS0VSTkVMXzIyXzI0Ci0KLW9iai0kKENPTkZJR19TSzk4TElOKSArPSBzazk4bGluLm8KLXNrOThsaW4tb2JqcyAgICA6PQlcCi0JCXNrZ2UubwkJXAotCQlza2V0aHRvb2wubwlcCi0JCXNrZGltLm8JCVwKLQkJc2thZGRyLm8JXAotCQlza2dlaHd0Lm8JXAotCQlza2dlaW5pdC5vCVwKLQkJc2tnZXBubWkubwlcCi0JCXNrZ2VzaXJxLm8JXAotCQlza2kyYy5vCQlcCi0JCXNrbG04MC5vCVwKLQkJc2txdWV1ZS5vCVwKLQkJc2tybG10Lm8JXAotCQlza3RpbWVyLm8JXAotCQlza3ZwZC5vCQlcCi0JCXNreG1hYzIubwotCi0jIERCR0RFRiA9ICBcCi0jIC1EREVCVUcKLQotaWZkZWYgREVCVUcKLURCR0RFRiArPSAgXAotLURTS19ERUJVR19DSEtNT0Q9MHgwMDAwMDAwMEwgXAotLURTS19ERUJVR19DSEtDQVQ9MHgwMDAwMDAwMEwKLWVuZGlmCi0KLQotIyAqKioqIHBvc3NpYmxlIGRlYnVnIG1vZHVsZXMgZm9yIFNLX0RFQlVHX0NIS01PRCAqKioqKioqKioqKioqKioqKgotIyBTS19EQkdNT0RfTUVSUiAgICAgICAgMHgwMDAwMDAwMUwgICAgIC8qIGdlbmVyYWwgbW9kdWxlIGVycm9yIGluZGljYXRpb24gKi8KLSMgU0tfREJHTU9EX0hXTSAgICAgICAgIDB4MDAwMDAwMDJMICAgICAvKiBIYXJkd2FyZSBpbml0IG1vZHVsZSAqLwotIyBTS19EQkdNT0RfUkxNVCAgICAgICAgMHgwMDAwMDAwNEwgICAgIC8qIFJMTVQgbW9kdWxlICovCi0jIFNLX0RCR01PRF9WUEQgICAgICAgICAweDAwMDAwMDA4TCAgICAgLyogVlBEIG1vZHVsZSAqLwotIyBTS19EQkdNT0RfSTJDICAgICAgICAgMHgwMDAwMDAxMEwgICAgIC8qIEkyQyBtb2R1bGUgKi8KLSMgU0tfREJHTU9EX1BOTUkgICAgICAgIDB4MDAwMDAwMjBMICAgICAvKiBQTk1JIG1vZHVsZSAqLwotIyBTS19EQkdNT0RfQ1NVTSAgICAgICAgMHgwMDAwMDA0MEwgICAgIC8qIENTVU0gbW9kdWxlICovCi0jIFNLX0RCR01PRF9BRERSICAgICAgICAweDAwMDAwMDgwTCAgICAgLyogQUREUiBtb2R1bGUgKi8KLSMgU0tfREJHTU9EX0RSViAgICAgICAgIDB4MDAwMTAwMDBMICAgICAvKiBEUlYgbW9kdWxlICovCi0KLSMgKioqKiBwb3NzaWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGZvciBTS19ERUJVR19DSEtDQVQgKioqKioqKioqKioqKioKLSMgKioqIGNvbW1vbiBtb2R1bGVzICoqKgotIyBTS19EQkdDQVRfSU5JVCAgICAgICAgMHgwMDAwMDAwMUwgICAgIG1vZHVsZS9kcml2ZXIgaW5pdGlhbGl6YXRpb24KLSMgU0tfREJHQ0FUX0NUUkwgICAgICAgIDB4MDAwMDAwMDJMICAgICBjb250cm9sbGluZzogYWRkL3JtdiBNQ0EvTUFDIGFuZCBvdGhlciBjb250cm9scyAoSU9DVEwpCi0jIFNLX0RCR0NBVF9FUlIgICAgICAgICAweDAwMDAwMDA0TCAgICAgZXJyb3IgaGFuZGxpbmcgcGF0aHMKLSMgU0tfREJHQ0FUX1RYICAgICAgICAgIDB4MDAwMDAwMDhMICAgICB0cmFuc21pdCBwYXRoCi0jIFNLX0RCR0NBVF9SWCAgICAgICAgICAweDAwMDAwMDEwTCAgICAgcmVjZWl2ZSBwYXRoCi0jIFNLX0RCR0NBVF9JUlEgICAgICAgICAweDAwMDAwMDIwTCAgICAgZ2VuZXJhbCBJUlEgaGFuZGxpbmcKLSMgU0tfREJHQ0FUX1FVRVVFICAgICAgIDB4MDAwMDAwNDBMICAgICBhbnkgcXVldWUgbWFuYWdlbWVudAotIyBTS19EQkdDQVRfRFVNUCAgICAgICAgMHgwMDAwMDA4MEwgICAgIGxhcmdlIGRhdGEgb3V0cHV0IGUuZy4gaGV4IGR1bXAKLSMgU0tfREJHQ0FUX0ZBVEFMICAgICAgIDB4MDAwMDAxMDBMICAgICBsYXJnZSBkYXRhIG91dHB1dCBlLmcuIGhleCBkdW1wCi0KLSMgKioqIGRyaXZlciAoZmlsZSBza2dlLmMpICoqKgotIyBTS19EQkdDQVRfRFJWX0VOVFJZICAgICAgICAgICAweDAwMDEwMDAwICAgICAgZW50cnkgcG9pbnRzCi0jIFNLX0RCR0NBVF9EUlZfPz8/ICAgICAgICAgICAgIDB4MDAwMjAwMDAgICAgICBub3QgdXNlZAotIyBTS19EQkdDQVRfRFJWX01DQSAgICAgICAgICAgICAweDAwMDQwMDAwICAgICAgbXVsdGljYXN0Ci0jIFNLX0RCR0NBVF9EUlZfVFhfUFJPR1JFU1MgICAgIDB4MDAwODAwMDAgICAgICB0eCBwYXRoCi0jIFNLX0RCR0NBVF9EUlZfUlhfUFJPR1JFU1MgICAgIDB4MDAxMDAwMDAgICAgICByeCBwYXRoCi0jIFNLX0RCR0NBVF9EUlZfUFJPR1JFU1MgICAgICAgIDB4MDAyMDAwMDAgICAgICBnZW5lcmFsIHJ1bnRpbWUKLSMgU0tfREJHQ0FUX0RSVl8/Pz8gICAgICAgICAgICAgMHgwMDQwMDAwMCAgICAgIG5vdCB1c2VkCi0jIFNLX0RCR0NBVF9EUlZfUFJPTSAgICAgICAgICAgIDB4MDA4MDAwMDAgICAgICBwcm9taXNjdW91cyBtb2RlCi0jIFNLX0RCR0NBVF9EUlZfVFhfRlJBTUUgICAgICAgIDB4MDEwMDAwMDAgICAgICBkaXNwbGF5IHR4IGZyYW1lcwotIyBTS19EQkdDQVRfRFJWX0VSUk9SICAgICAgICAgICAweDAyMDAwMDAwICAgICAgZXJyb3IgY29uZGl0aW9ucwotIyBTS19EQkdDQVRfRFJWX0lOVF9TUkMgICAgICAgICAweDA0MDAwMDAwICAgICAgaW50ZXJydXB0cyBzb3VyY2VzCi0jIFNLX0RCR0NBVF9EUlZfRVZFTlQgICAgICAgICAgIDB4MDgwMDAwMDAgICAgICBkcml2ZXIgZXZlbnRzCi0KLUVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbmV0L3NrOThsaW4gLURTS19ESUFHX1NVUFBPUlQgLURHRU5FU0lTIC1EWVVLT04gJChEQkdERUYpICQoU0tQQVJBTSkKLQotY2xlYW46Ci0Jcm0gLWYgY29yZSAqLm8gKi5hICoucwotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL2xtODAuaCBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9sbTgwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMmRiYmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL2xtODAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJbG04MC5oCQotICogUHJvamVjdDoJR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVycywgQ29tbW9uIE1vZHVsZXMKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS42ICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzA1LzEzIDE3OjI2OjUyICQKLSAqIFB1cnBvc2U6CUNvbnRhaW5zIGFsbCBkZWZpbmVzIGZvciB0aGUgTE04MCBDaGlwCi0gKgkJKE5hdGlvbmFsIFNlbWljb25kdWN0b3IpLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QuCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fSU5DX0xNODBfSAotI2RlZmluZSBfX0lOQ19MTTgwX0gKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgkvKiBfX2NwbHVzcGx1cyAqLwotCi0vKiBkZWZpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTE04MCByZWdpc3RlciBkZWZpbml0aW9uCi0gKgotICogQWxsIHJlZ2lzdGVycyBhcmUgOCBiaXQgd2lkZQotICovCi0jZGVmaW5lIExNODBfQ0ZHCQkJMHgwMAkvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lIExNODBfSVNSQ18xCQkJMHgwMQkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgTE04MF9JU1JDXzIJCQkweDAyCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBMTTgwX0lNU0tfMQkJCTB4MDMJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgMSAqLwotI2RlZmluZSBMTTgwX0lNU0tfMgkJCTB4MDQJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBMTTgwX0ZBTl9DVFJMCQkweDA1CS8qIEZhbiBEZXZpc29yL1JTVCMvT1MjIFJlZ2lzdGVyICovCi0jZGVmaW5lIExNODBfVEVNUF9DVFJMCQkweDA2CS8qIE9TIyBDb25maWcsIFRlbXAgUmVzLiBSZWcgKi8KLQkvKiAweDA3IC0gMHgxZiByZXNlcnZlZAkqLwotCS8qIGN1cnJlbnQgdmFsdWVzICovCi0jZGVmaW5lIExNODBfVlQwX0lOCQkJMHgyMAkvKiBjdXJyZW50IFZvbHRhZ2UgMCB2YWx1ZSAqLwotI2RlZmluZSBMTTgwX1ZUMV9JTgkJCTB4MjEJLyogY3VycmVudCBWb2x0YWdlIDEgdmFsdWUgKi8KLSNkZWZpbmUgTE04MF9WVDJfSU4JCQkweDIyCS8qIGN1cnJlbnQgVm9sdGFnZSAyIHZhbHVlICovCi0jZGVmaW5lIExNODBfVlQzX0lOCQkJMHgyMwkvKiBjdXJyZW50IFZvbHRhZ2UgMyB2YWx1ZSAqLwotI2RlZmluZSBMTTgwX1ZUNF9JTgkJCTB4MjQJLyogY3VycmVudCBWb2x0YWdlIDQgdmFsdWUgKi8KLSNkZWZpbmUgTE04MF9WVDVfSU4JCQkweDI1CS8qIGN1cnJlbnQgVm9sdGFnZSA1IHZhbHVlICovCi0jZGVmaW5lIExNODBfVlQ2X0lOCQkJMHgyNgkvKiBjdXJyZW50IFZvbHRhZ2UgNiB2YWx1ZSAqLwotI2RlZmluZSBMTTgwX1RFTVBfSU4JCTB4MjcJLyogY3VycmVudCBUZW1wZXJhdHVyZSB2YWx1ZSAqLwotI2RlZmluZSBMTTgwX0ZBTjFfSU4JCTB4MjgJLyogY3VycmVudCBGYW4gMSBjb3VudCAqLwotI2RlZmluZSBMTTgwX0ZBTjJfSU4JCTB4MjkJLyogY3VycmVudCBGYW4gMiBjb3VudCAqLwotCS8qIGxpbWl0IHZhbHVlcyAqLwotI2RlZmluZSBMTTgwX1ZUMF9ISUdIX0xJTQkweDJhCS8qIGhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDAgKi8KLSNkZWZpbmUgTE04MF9WVDBfTE9XX0xJTQkweDJiCS8qIGxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgMCAqLwotI2RlZmluZSBMTTgwX1ZUMV9ISUdIX0xJTQkweDJjCS8qIGhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDEgKi8KLSNkZWZpbmUgTE04MF9WVDFfTE9XX0xJTQkweDJkCS8qIGxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgMSAqLwotI2RlZmluZSBMTTgwX1ZUMl9ISUdIX0xJTQkweDJlCS8qIGhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDIgKi8KLSNkZWZpbmUgTE04MF9WVDJfTE9XX0xJTQkweDJmCS8qIGxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgMiAqLwotI2RlZmluZSBMTTgwX1ZUM19ISUdIX0xJTQkweDMwCS8qIGhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDMgKi8KLSNkZWZpbmUgTE04MF9WVDNfTE9XX0xJTQkweDMxCS8qIGxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgMyAqLwotI2RlZmluZSBMTTgwX1ZUNF9ISUdIX0xJTQkweDMyCS8qIGhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDQgKi8KLSNkZWZpbmUgTE04MF9WVDRfTE9XX0xJTQkweDMzCS8qIGxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgNCAqLwotI2RlZmluZSBMTTgwX1ZUNV9ISUdIX0xJTQkweDM0CS8qIGhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDUgKi8KLSNkZWZpbmUgTE04MF9WVDVfTE9XX0xJTQkweDM1CS8qIGxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgNSAqLwotI2RlZmluZSBMTTgwX1ZUNl9ISUdIX0xJTQkweDM2CS8qIGhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDYgKi8KLSNkZWZpbmUgTE04MF9WVDZfTE9XX0xJTQkweDM3CS8qIGxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgNiAqLwotI2RlZmluZSBMTTgwX1RIT1RfTElNX1VQCTB4MzgJLyogaG90IHRlbXBlcmF0dXJlIGxpbWl0IChoaWdoKSAqLwotI2RlZmluZSBMTTgwX1RIT1RfTElNX0xPCTB4MzkJLyogaG90IHRlbXBlcmF0dXJlIGxpbWl0IChsb3cpICovCi0jZGVmaW5lIExNODBfVE9TX0xJTV9VUAkJMHgzYQkvKiBPUyB0ZW1wZXJhdHVyZSBsaW1pdCAoaGlnaCkgKi8KLSNkZWZpbmUgTE04MF9UT1NfTElNX0xPCQkweDNiCS8qIE9TIHRlbXBlcmF0dXJlIGxpbWl0IChsb3cpICovCi0jZGVmaW5lIExNODBfRkFOMV9DT1VOVF9MSU0JMHgzYwkvKiBGYW4gMSBjb3VudCBsaW1pdCAoaGlnaCkgKi8KLSNkZWZpbmUgTE04MF9GQU4yX0NPVU5UX0xJTQkweDNkCS8qIEZhbiAyIGNvdW50IGxpbWl0IChsb3cpICovCi0JLyogMHgzZSAtIDB4M2YgcmVzZXJ2ZWQJKi8KLQotLyoKLSAqIExNODAgYml0IGRlZmluaXRpb25zCi0gKi8KLQotLyoJTE04MF9DRkcJCUNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTE04MF9DRkdfU1RBUlQJCSgxPDwwKQkvKiBzdGFydCBtb25pdG9yaW5nIG9wZXJhdGlvbiAqLwotI2RlZmluZSBMTTgwX0NGR19JTlRfRU5BCSgxPDwxKQkvKiBlbmFibGVzIHRoZSBJTlQjIEludGVycnVwdCBvdXRwdXQgKi8KLSNkZWZpbmUgTE04MF9DRkdfSU5UX1BPTAkoMTw8MikJLyogSU5UIyBwb2w6IDAgYWN0IGxvdywgMSBhY3QgaGlnaCAqLwotI2RlZmluZSBMTTgwX0NGR19JTlRfQ0xSCSgxPDwzKQkvKiBkaXNhYmxlcyBJTlQjL1JTVF9PVVQjL09TIyBvdXRwdXRzICovCi0jZGVmaW5lIExNODBfQ0ZHX1JFU0VUCQkoMTw8NCkJLyogc2lnbmFscyBhIHJlc2V0ICovCi0jZGVmaW5lIExNODBfQ0ZHX0NIQVNTX0NMUgkoMTw8NSkJLyogY2xlYXJzIENoYXNzaXMgSW50cnVzaW9uIChDSSkgcGluICovCi0jZGVmaW5lIExNODBfQ0ZHX0dQTwkJKDE8PDYpCS8qIGRyaXZlcyB0aGUgR1BPIyBwaW4gKi8KLSNkZWZpbmUgTE04MF9DRkdfSU5JVAkJKDE8PDcpCS8qIHJlc3RvcmUgcG93ZXIgb24gZGVmYXVsdHMgKi8KLQotLyoJTE04MF9JU1JDXzEJCUludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMSAqLwotLyoJTE04MF9JTVNLXzEJCUludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgTE04MF9JU19WVDAJCQkoMTw8MCkJLyogbGltaXQgZXhjZWVkZWQgZm9yIFZvbHRhZ2UgMCAqLwotI2RlZmluZSBMTTgwX0lTX1ZUMQkJCSgxPDwxKQkvKiBsaW1pdCBleGNlZWRlZCBmb3IgVm9sdGFnZSAxICovCi0jZGVmaW5lIExNODBfSVNfVlQyCQkJKDE8PDIpCS8qIGxpbWl0IGV4Y2VlZGVkIGZvciBWb2x0YWdlIDIgKi8KLSNkZWZpbmUgTE04MF9JU19WVDMJCQkoMTw8MykJLyogbGltaXQgZXhjZWVkZWQgZm9yIFZvbHRhZ2UgMyAqLwotI2RlZmluZSBMTTgwX0lTX1ZUNAkJCSgxPDw0KQkvKiBsaW1pdCBleGNlZWRlZCBmb3IgVm9sdGFnZSA0ICovCi0jZGVmaW5lIExNODBfSVNfVlQ1CQkJKDE8PDUpCS8qIGxpbWl0IGV4Y2VlZGVkIGZvciBWb2x0YWdlIDUgKi8KLSNkZWZpbmUgTE04MF9JU19WVDYJCQkoMTw8NikJLyogbGltaXQgZXhjZWVkZWQgZm9yIFZvbHRhZ2UgNiAqLwotI2RlZmluZSBMTTgwX0lTX0lOVF9JTgkJKDE8PDcpCS8qIHN0YXRlIG9mIElOVF9JTiMgKi8KLQotLyoJTE04MF9JU1JDXzIJCUludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMiAqLwotLyoJTE04MF9JTVNLXzIJCUludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgTE04MF9JU19URU1QCQkoMTw8MCkJLyogSE9UIHRlbXBlcmF0dXJlIGxpbWl0IGV4Y2VlZGVkICovCi0jZGVmaW5lIExNODBfSVNfQlRJCQkJKDE8PDEpCS8qIHN0YXRlIG9mIEJUSSMgcGluICovCi0jZGVmaW5lIExNODBfSVNfRkFOMQkJKDE8PDIpCS8qIGNvdW50IGxpbWl0IGV4Y2VlZGVkIGZvciBGYW4gMSAqLwotI2RlZmluZSBMTTgwX0lTX0ZBTjIJCSgxPDwzKQkvKiBjb3VudCBsaW1pdCBleGNlZWRlZCBmb3IgRmFuIDIgKi8KLSNkZWZpbmUgTE04MF9JU19DSQkJCSgxPDw0KQkvKiBDaGFzc2lzIEludHJ1c2lvbiBvY2N1cmVkICovCi0jZGVmaW5lIExNODBfSVNfT1MJCQkoMTw8NSkJLyogT1MgdGVtcGVyYXR1cmUgbGltaXQgZXhjZWVkZWQgKi8KLQkvKiBiaXQgNiBhbmQgNyBhcmUgcmVzZXJ2ZWQgaW4gTE04MF9JU1JDXzIgKi8KLSNkZWZpbmUgTE04MF9JU19IVF9JUlFfTUQJKDE8PDYpCS8qIEhvdCB0ZW1wZXJhdHVyZSBpbnRlcnJ1cHQgbW9kZSAqLwotI2RlZmluZSBMTTgwX0lTX09UX0lSUV9NRAkoMTw8NykJLyogT1MgdGVtcGVyYXR1cmUgaW50ZXJydXB0IG1vZGUgKi8KLQotLyoJTE04MF9GQU5fQ1RSTAkJRmFuIERldmlzb3IvUlNUIy9PUyMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTE04MF9GQU4xX01EX1NFTAkoMTw8MCkJLyogRmFuIDEgbW9kZSBzZWxlY3QgKi8KLSNkZWZpbmUgTE04MF9GQU4yX01EX1NFTAkoMTw8MSkJLyogRmFuIDIgbW9kZSBzZWxlY3QgKi8KLSNkZWZpbmUgTE04MF9GQU4xX1BSTV9DVEwJKDM8PDIpCS8qIEZhbiAxIHNwZWVkIGNvbnRyb2wgKi8KLSNkZWZpbmUgTE04MF9GQU4yX1BSTV9DVEwJKDM8PDQpCS8qIEZhbiAyIHNwZWVkIGNvbnRyb2wgKi8KLSNkZWZpbmUgTE04MF9GQU5fT1NfRU5BCQkoMTw8NikJLyogZW5hYmxlIE9TIG1vZGUgb24gUlNUX09VVCMvT1MjIHBpbnMqLwotI2RlZmluZSBMTTgwX0ZBTl9SU1RfRU5BCSgxPDw3KQkvKiBzZXRzIFJTVF9PVVQjL09TIyBwaW5zIGluIFJTVCBtb2RlICovCi0KLS8qCUxNODBfVEVNUF9DVFJMCQlPUyMgQ29uZmlnLCBUZW1wIFJlcy4gUmVnICovCi0jZGVmaW5lIExNODBfVEVNUF9PU19TVEFUCSgxPDwwKQkvKiBtaXJyb3JzIHRoZSBzdGF0ZSBvZiBSU1RfT1VUIy9PUyMgKi8KLSNkZWZpbmUgTE04MF9URU1QX09TX1BPTAkoMTw8MSkJLyogc2VsZWN0IE9TIyBwb2xhcml0eSAqLwotI2RlZmluZSBMTTgwX1RFTVBfT1NfTU9ERQkoMTw8MikJLyogc2VsZWN0cyBJbnRlcnJ1cHQgbW9kZSAqLwotI2RlZmluZSBMTTgwX1RFTVBfUkVTCQkoMTw8MykJLyogc2VsZWN0cyA5IG9yIDExIGJpdCB0ZW1wIHJlc3VsdXRpb24qLwotI2RlZmluZSBMTTgwX1RFTVBfTFNCCQkoMHhmPDw0KS8qIDQgTFNCcyBvZiAxMSBiaXQgdGVtcCBkYXRhICovCi0jZGVmaW5lIExNODBfVEVNUF9MU0JfOQkJKDE8PDcpCS8qIExTQiBvZiA5IGJpdCB0ZW1wZXJhdHVyZSBkYXRhICovCi0KLQkvKiAweDA3IC0gMHgxZiByZXNlcnZlZAkqLwotLyoJTE04MF9WVDBfSU4JCWN1cnJlbnQgVm9sdGFnZSAwIHZhbHVlICovCi0vKglMTTgwX1ZUMV9JTgkJY3VycmVudCBWb2x0YWdlIDEgdmFsdWUgKi8KLS8qCUxNODBfVlQyX0lOCQljdXJyZW50IFZvbHRhZ2UgMiB2YWx1ZSAqLwotLyoJTE04MF9WVDNfSU4JCWN1cnJlbnQgVm9sdGFnZSAzIHZhbHVlICovCi0vKglMTTgwX1ZUNF9JTgkJY3VycmVudCBWb2x0YWdlIDQgdmFsdWUgKi8KLS8qCUxNODBfVlQ1X0lOCQljdXJyZW50IFZvbHRhZ2UgNSB2YWx1ZSAqLwotLyoJTE04MF9WVDZfSU4JCWN1cnJlbnQgVm9sdGFnZSA2IHZhbHVlICovCi0vKglMTTgwX1RFTVBfSU4JCWN1cnJlbnQgdGVtcGVyYXR1cmUgdmFsdWUgKi8KLS8qCUxNODBfRkFOMV9JTgkJY3VycmVudCBGYW4gMSBjb3VudCAqLwotLyoJTE04MF9GQU4yX0lOCQljdXJyZW50IEZhbiAyIGNvdW50ICovCi0vKglMTTgwX1ZUMF9ISUdIX0xJTQloaWdoIGxpbWl0IHZhbCBmb3IgVm9sdGFnZSAwICovCi0vKglMTTgwX1ZUMF9MT1dfTElNCWxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgMCAqLwotLyoJTE04MF9WVDFfSElHSF9MSU0JaGlnaCBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgMSAqLwotLyoJTE04MF9WVDFfTE9XX0xJTQlsb3cgbGltaXQgdmFsIGZvciBWb2x0YWdlIDEgKi8KLS8qCUxNODBfVlQyX0hJR0hfTElNCWhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDIgKi8KLS8qCUxNODBfVlQyX0xPV19MSU0JbG93IGxpbWl0IHZhbCBmb3IgVm9sdGFnZSAyICovCi0vKglMTTgwX1ZUM19ISUdIX0xJTQloaWdoIGxpbWl0IHZhbCBmb3IgVm9sdGFnZSAzICovCi0vKglMTTgwX1ZUM19MT1dfTElNCWxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgMyAqLwotLyoJTE04MF9WVDRfSElHSF9MSU0JaGlnaCBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgNCAqLwotLyoJTE04MF9WVDRfTE9XX0xJTQlsb3cgbGltaXQgdmFsIGZvciBWb2x0YWdlIDQgKi8KLS8qCUxNODBfVlQ1X0hJR0hfTElNCWhpZ2ggbGltaXQgdmFsIGZvciBWb2x0YWdlIDUgKi8KLS8qCUxNODBfVlQ1X0xPV19MSU0JbG93IGxpbWl0IHZhbCBmb3IgVm9sdGFnZSA1ICovCi0vKglMTTgwX1ZUNl9ISUdIX0xJTQloaWdoIGxpbWl0IHZhbCBmb3IgVm9sdGFnZSA2ICovCi0vKglMTTgwX1ZUNl9MT1dfTElNCWxvdyBsaW1pdCB2YWwgZm9yIFZvbHRhZ2UgNiAqLwotLyoJTE04MF9USE9UX0xJTV9VUAlob3QgdGVtcGVyYXR1cmUgbGltaXQgKGhpZ2gpICovCi0vKglMTTgwX1RIT1RfTElNX0xPCWhvdCB0ZW1wZXJhdHVyZSBsaW1pdCAobG93KSAqLwotLyoJTE04MF9UT1NfTElNX1VQCQlPUyB0ZW1wZXJhdHVyZSBsaW1pdCAoaGlnaCkgKi8KLS8qCUxNODBfVE9TX0xJTV9MTwkJT1MgdGVtcGVyYXR1cmUgbGltaXQgKGxvdykgKi8KLS8qCUxNODBfRkFOMV9DT1VOVF9MSU0JRmFuIDEgY291bnQgbGltaXQgKGhpZ2gpICovCi0vKglMTTgwX0ZBTjJfQ09VTlRfTElNCUZhbiAyIGNvdW50IGxpbWl0IChsb3cpICovCi0JLyogMHgzZSAtIDB4M2YgcmVzZXJ2ZWQJKi8KLQotI2RlZmluZSBMTTgwX0FERFIJCTB4MjgJLyogTE04MCBkZWZhdWx0IGFkZHIgKi8KLQotLyogdHlwZWRlZnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKiBmdW5jdGlvbiBwcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgkvKiBfX2NwbHVzcGx1cyAqLwotCi0jZW5kaWYJLyogX19JTkNfTE04MF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2thZGRyLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2thZGRyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyM2FkMDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrYWRkci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2FkZHIuaAotICogUHJvamVjdDoJR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVycywgQUREUi1Nb2R1bAotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjI5ICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzA1LzEzIDE2OjU3OjI0ICQKLSAqIFB1cnBvc2U6CUhlYWRlciBmaWxlIGZvciBBZGRyZXNzIE1hbmFnZW1lbnQgKE1DLCBVQywgUHJvbSkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdCBHbWJILgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFRoaXMgbW9kdWxlIGlzIGludGVuZGVkIHRvIG1hbmFnZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGFuZCBwcm9taXNjdW91cyBtb2RlCi0gKiBvbiBHRW5lc2lzIGFkYXB0ZXJzLgotICoKLSAqIEluY2x1ZGUgRmlsZSBIaWVyYXJjaHk6Ci0gKgotICoJInNrZHJ2MXN0LmgiCi0gKgkuLi4KLSAqCSJza3R5cGVzLmgiCi0gKgkic2txdWV1ZS5oIgotICoJInNrYWRkci5oIgotICoJLi4uCi0gKgkic2tkcnYybmQuaCIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fSU5DX1NLQUREUl9ICi0jZGVmaW5lIF9fSU5DX1NLQUREUl9ICi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYJLyogY3BsdXNwbHVzICovCi0KLS8qIGRlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgU0tfTUFDX0FERFJfTEVOCQkJCTYJLyogTGVuZ3RoIG9mIE1BQyBhZGRyZXNzLiAqLwotI2RlZmluZQlTS19NQVhfQUREUlMJCQkJMTQJLyogI0FkZHJzIGZvciBleGFjdCBtYXRjaC4gKi8KLQotLyogLS0tLS0gQ29tbW9uIHJldHVybiB2YWx1ZXMgLS0tLS0gKi8KLQotI2RlZmluZSBTS19BRERSX1NVQ0NFU1MJCQkJMAkvKiBGdW5jdGlvbiByZXR1cm5lZCBzdWNjZXNzZnVsbHkuICovCi0jZGVmaW5lIFNLX0FERFJfSUxMRUdBTF9QT1JUCQkJMTAwCS8qIFBvcnQgbnVtYmVyIHRvbyBoaWdoLiAqLwotI2RlZmluZSBTS19BRERSX1RPT19FQVJMWQkJCTEwMQkvKiBGdW5jdGlvbiBjYWxsZWQgdG9vIGVhcmx5LiAqLwotCi0vKiAtLS0tLSBDbGVhci9BZGQgZmxhZyBiaXRzIC0tLS0tICovCi0KLSNkZWZpbmUgU0tfQUREUl9QRVJNQU5FTlQJCQkxCS8qIFJMTVQgQWRkcmVzcyAqLwotCi0vKiAtLS0tLSBBZGRpdGlvbmFsIENsZWFyIGZsYWcgYml0cyAtLS0tLSAqLwotCi0jZGVmaW5lIFNLX01DX1NXX09OTFkJCQkJMgkvKiBEbyBub3QgdXBkYXRlIEhXIHdoZW4gY2xlYXJpbmcuICovCi0KLS8qIC0tLS0tIE92ZXJyaWRlIGZsYWcgYml0cyAtLS0tLSAqLwotCi0jZGVmaW5lIFNLX0FERFJfTE9HSUNBTF9BRERSRVNTCQkwCi0jZGVmaW5lIFNLX0FERFJfVklSVFVBTF9BRERSRVNTCQkoU0tfQUREUl9MT0dJQ0FMX0FERFJFU1MpCS8qIG9sZCAqLwotI2RlZmluZSBTS19BRERSX1BIWVNJQ0FMX0FERFJFU1MJMQotI2RlZmluZSBTS19BRERSX0NMRUFSX0xPR0lDQUwJCTIKLSNkZWZpbmUgU0tfQUREUl9TRVRfTE9HSUNBTAkJCTQKLQotLyogLS0tLS0gT3ZlcnJpZGUgcmV0dXJuIHZhbHVlcyAtLS0tLSAqLwotCi0jZGVmaW5lIFNLX0FERFJfT1ZFUlJJREVfU1VDQ0VTUwkoU0tfQUREUl9TVUNDRVNTKQotI2RlZmluZSBTS19BRERSX0RVUExJQ0FURV9BRERSRVNTCTEKLSNkZWZpbmUgU0tfQUREUl9NVUxUSUNBU1RfQUREUkVTUwkyCi0KLS8qIC0tLS0tIFBhcnRpdGlvbmluZyBvZiBleGNhY3QgbWF0Y2ggdGFibGUgLS0tLS0gKi8KLQotI2RlZmluZSBTS19BRERSX0VYQUNUX01BVENIRVMJCTE2CS8qICNFeGFjdCBtYXRjaCBlbnRyaWVzLiAqLwotCi0jZGVmaW5lIFNLX0FERFJfRklSU1RfTUFUQ0hfUkxNVAkxCi0jZGVmaW5lIFNLX0FERFJfTEFTVF9NQVRDSF9STE1UCQkyCi0jZGVmaW5lIFNLX0FERFJfRklSU1RfTUFUQ0hfRFJWCQkzCi0jZGVmaW5lIFNLX0FERFJfTEFTVF9NQVRDSF9EUlYJCShTS19BRERSX0VYQUNUX01BVENIRVMgLSAxKQotCi0vKiAtLS0tLSBTa0FkZHJNY0FkZC9Ta0FkZHJNY1VwZGF0ZSByZXR1cm4gdmFsdWVzIC0tLS0tICovCi0KLSNkZWZpbmUgU0tfTUNfRklMVEVSSU5HX0VYQUNUCQkwCS8qIEV4YWN0IGZpbHRlcmluZy4gKi8KLSNkZWZpbmUgU0tfTUNfRklMVEVSSU5HX0lORVhBQ1QJCTEJLyogSW5leGFjdCBmaWx0ZXJpbmcuICovCi0KLS8qIC0tLS0tIEFkZGl0aW9uYWwgU2tBZGRyTWNBZGQgcmV0dXJuIHZhbHVlcyAtLS0tLSAqLwotCi0jZGVmaW5lIFNLX01DX0lMTEVHQUxfQUREUkVTUwkJMgkvKiBJbGxlZ2FsIGFkZHJlc3MuICovCi0jZGVmaW5lIFNLX01DX0lMTEVHQUxfUE9SVAkJCTMJLyogSWxsZWdhbCBwb3J0IChub3QgdGhlIGFjdGl2ZSBvbmUpLiAqLwotI2RlZmluZSBTS19NQ19STE1UX09WRVJGTE9XCQkJNAkvKiBUb28gbWFueSBSTE1UIG1jIGFkZHJlc3Nlcy4gKi8KLQotLyogUHJvbWlzY3VvdXMgbW9kZSBiaXRzIC0tLS0tICovCi0KLSNkZWZpbmUgU0tfUFJPTV9NT0RFX05PTkUJCQkwCS8qIE5vcm1hbCByZWNlaXZlLiAqLwotI2RlZmluZSBTS19QUk9NX01PREVfTExDCQkJMQkvKiBSZWNlaXZlIGFsbCBMTEMgZnJhbWVzLiAqLwotI2RlZmluZSBTS19QUk9NX01PREVfQUxMX01DCQkJMgkvKiBSZWNlaXZlIGFsbCBtdWx0aWNhc3QgZnJhbWVzLiAqLwotLyogI2RlZmluZSBTS19QUk9NX01PREVfTk9OX0xMQwkJNCAqLwkvKiBSZWNlaXZlIGFsbCBub24tTExDIGZyYW1lcy4gKi8KLQotLyogTWFjcm9zICovCi0KLSNpZmRlZiBPTERfU1RVRkYKLSNpZm5kZWYgU0tfQUREUl9FUVVBTAotLyoKLSAqICImIiBpbnN0ZWFkIG9mICImJiIgYWxsb3dzIGJldHRlciBvcHRpbWl6YXRpb24gb24gSUEtNjQuCi0gKiBUaGUgcmVwbGFjZW1lbnQgaXMgc2FmZSBoZXJlLCBhcyBhbGwgYnl0ZXMgZXhpc3QuCi0gKi8KLSNpZm5kZWYgU0tfQUREUl9EV09SRF9DT01QQVJFCi0jZGVmaW5lIFNLX0FERFJfRVFVQUwoQTEsQTIpCSggXAotCSgoKFNLX1U4ICopKEExKSlbNV0gPT0gKChTS19VOCAqKShBMikpWzVdKSAmIFwKLQkoKChTS19VOCAqKShBMSkpWzRdID09ICgoU0tfVTggKikoQTIpKVs0XSkgJiBcCi0JKCgoU0tfVTggKikoQTEpKVszXSA9PSAoKFNLX1U4ICopKEEyKSlbM10pICYgXAotCSgoKFNLX1U4ICopKEExKSlbMl0gPT0gKChTS19VOCAqKShBMikpWzJdKSAmIFwKLQkoKChTS19VOCAqKShBMSkpWzFdID09ICgoU0tfVTggKikoQTIpKVsxXSkgJiBcCi0JKCgoU0tfVTggKikoQTEpKVswXSA9PSAoKFNLX1U4ICopKEEyKSlbMF0pKQotI2Vsc2UJLyogU0tfQUREUl9EV09SRF9DT01QQVJFICovCi0jZGVmaW5lIFNLX0FERFJfRVFVQUwoQTEsQTIpCSggXAotCSgqKFNLX1UzMiAqKSYoKChTS19VOCAqKShBMSkpWzJdKSA9PSAqKFNLX1UzMiAqKSYoKChTS19VOCAqKShBMikpWzJdKSkgJiBcCi0JKCooU0tfVTMyICopJigoKFNLX1U4ICopKEExKSlbMF0pID09ICooU0tfVTMyICopJigoKFNLX1U4ICopKEEyKSlbMF0pKSkKLSNlbmRpZgkvKiBTS19BRERSX0RXT1JEX0NPTVBBUkUgKi8KLSNlbmRpZgkvKiBTS19BRERSX0VRVUFMICovCi0jZW5kaWYgLyogMCAqLwotCi0jaWZuZGVmIFNLX0FERFJfRVFVQUwKLSNpZm5kZWYgU0tfQUREUl9EV09SRF9DT01QQVJFCi0jZGVmaW5lIFNLX0FERFJfRVFVQUwoQTEsQTIpCSggXAotCSgoKFNLX1U4IFNLX0ZBUiAqKShBMSkpWzVdID09ICgoU0tfVTggU0tfRkFSICopKEEyKSlbNV0pICYgXAotCSgoKFNLX1U4IFNLX0ZBUiAqKShBMSkpWzRdID09ICgoU0tfVTggU0tfRkFSICopKEEyKSlbNF0pICYgXAotCSgoKFNLX1U4IFNLX0ZBUiAqKShBMSkpWzNdID09ICgoU0tfVTggU0tfRkFSICopKEEyKSlbM10pICYgXAotCSgoKFNLX1U4IFNLX0ZBUiAqKShBMSkpWzJdID09ICgoU0tfVTggU0tfRkFSICopKEEyKSlbMl0pICYgXAotCSgoKFNLX1U4IFNLX0ZBUiAqKShBMSkpWzFdID09ICgoU0tfVTggU0tfRkFSICopKEEyKSlbMV0pICYgXAotCSgoKFNLX1U4IFNLX0ZBUiAqKShBMSkpWzBdID09ICgoU0tfVTggU0tfRkFSICopKEEyKSlbMF0pKQotI2Vsc2UJLyogU0tfQUREUl9EV09SRF9DT01QQVJFICovCi0jZGVmaW5lIFNLX0FERFJfRVFVQUwoQTEsQTIpCSggXAotCSgqKFNLX1UxNiBTS19GQVIgKikmKCgoU0tfVTggU0tfRkFSICopKEExKSlbNF0pID09IFwKLQkqKFNLX1UxNiBTS19GQVIgKikmKCgoU0tfVTggU0tfRkFSICopKEEyKSlbNF0pKSAmJiBcCi0JKCooU0tfVTMyIFNLX0ZBUiAqKSYoKChTS19VOCBTS19GQVIgKikoQTEpKVswXSkgPT0gXAotCSooU0tfVTMyIFNLX0ZBUiAqKSYoKChTS19VOCBTS19GQVIgKikoQTIpKVswXSkpKQotI2VuZGlmCS8qIFNLX0FERFJfRFdPUkRfQ09NUEFSRSAqLwotI2VuZGlmCS8qIFNLX0FERFJfRVFVQUwgKi8KLQotLyogdHlwZWRlZnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc19NYWNBZGRyIHsKLQlTS19VOAlhW1NLX01BQ19BRERSX0xFTl07Ci19IFNLX01BQ19BRERSOwotCi0KLS8qIFNLX0ZJTFRFUiBpcyB1c2VkIHRvIGVuc3VyZSBhbGlnbm1lbnQgb2YgdGhlIGZpbHRlci4gKi8KLXR5cGVkZWYgdW5pb24gc19JbmV4YWN0RmlsdGVyIHsKLQlTS19VOAlCeXRlc1s4XTsKLQlTS19VNjQJVmFsOwkvKiBEdW1teSBlbnRyeSBmb3IgYWxpZ25tZW50IG9ubHkuICovCi19IFNLX0ZJTFRFUjY0OwotCi0KLXR5cGVkZWYgc3RydWN0IHNfQWRkck5ldCBTS19BRERSX05FVDsKLQotCi10eXBlZGVmIHN0cnVjdCBzX0FkZHJQb3J0IHsKLQotLyogLS0tLS0gUHVibGljIHBhcnQgKHJlYWQtb25seSkgLS0tLS0gKi8KLQotCVNLX01BQ19BRERSCUN1cnJlbnRNYWNBZGRyZXNzOwkvKiBDdXJyZW50IHBoeXNpY2FsIE1BQyBBZGRyZXNzLiAqLwotCVNLX01BQ19BRERSCVBlcm1hbmVudE1hY0FkZHJlc3M7CS8qIFBlcm1hbmVudCBwaHlzaWNhbCBNQUMgQWRkcmVzcy4gKi8KLQlpbnQJCVByb21Nb2RlOwkJLyogUHJvbWlzY3VvdXMgTW9kZS4gKi8KLQotLyogLS0tLS0gUHJpdmF0ZSBwYXJ0IC0tLS0tICovCi0KLQlTS19NQUNfQUREUglQcmV2aW91c01hY0FkZHJlc3M7CS8qIFByZXYuIHBoeXMuIE1BQyBBZGRyZXNzLiAqLwotCVNLX0JPT0wJCUN1cnJlbnRNYWNBZGRyZXNzU2V0OwkvKiBDdXJyZW50TWFjQWRkcmVzcyBpcyBzZXQuICovCi0JU0tfVTgJCUFsaWduMDE7Ci0KLQlTS19VMzIJCUZpcnN0RXhhY3RNYXRjaFJsbXQ7Ci0JU0tfVTMyCQlOZXh0RXhhY3RNYXRjaFJsbXQ7Ci0JU0tfVTMyCQlGaXJzdEV4YWN0TWF0Y2hEcnY7Ci0JU0tfVTMyCQlOZXh0RXhhY3RNYXRjaERydjsKLQlTS19NQUNfQUREUglFeGFjdFtTS19BRERSX0VYQUNUX01BVENIRVNdOwotCVNLX0ZJTFRFUjY0CUluZXhhY3RGaWx0ZXI7CQkJLyogRm9yIDY0LWJpdCBoYXNoIHJlZ2lzdGVyLiAqLwotCVNLX0ZJTFRFUjY0CUluZXhhY3RSbG10RmlsdGVyOwkJLyogRm9yIDY0LWJpdCBoYXNoIHJlZ2lzdGVyLiAqLwotCVNLX0ZJTFRFUjY0CUluZXhhY3REcnZGaWx0ZXI7CQkvKiBGb3IgNjQtYml0IGhhc2ggcmVnaXN0ZXIuICovCi19IFNLX0FERFJfUE9SVDsKLQotCi1zdHJ1Y3Qgc19BZGRyTmV0IHsKLS8qIC0tLS0tIFB1YmxpYyBwYXJ0IChyZWFkLW9ubHkpIC0tLS0tICovCi0KLQlTS19NQUNfQUREUgkJQ3VycmVudE1hY0FkZHJlc3M7CS8qIExvZ2ljYWwgTUFDIEFkZHJlc3MuICovCi0JU0tfTUFDX0FERFIJCVBlcm1hbmVudE1hY0FkZHJlc3M7CS8qIExvZ2ljYWwgTUFDIEFkZHJlc3MuICovCi0KLS8qIC0tLS0tIFByaXZhdGUgcGFydCAtLS0tLSAqLwotCi0JU0tfVTMyCQkJQWN0aXZlUG9ydDsJCS8qIFZpZXcgb2YgbW9kdWxlIEFERFIuICovCi0JU0tfQk9PTAkJCUN1cnJlbnRNYWNBZGRyZXNzU2V0OwkvKiBDdXJyZW50TWFjQWRkcmVzcyBpcyBzZXQuICovCi0JU0tfVTgJCQlBbGlnbjAxOwotCVNLX1UxNgkJCUFsaWduMDI7Ci19OwotCi0KLXR5cGVkZWYgc3RydWN0IHNfQWRkciB7Ci0KLS8qIC0tLS0tIFB1YmxpYyBwYXJ0IChyZWFkLW9ubHkpIC0tLS0tICovCi0KLQlTS19BRERSX05FVAkJTmV0W1NLX01BWF9ORVRTXTsKLQlTS19BRERSX1BPUlQJUG9ydFtTS19NQVhfTUFDU107Ci0KLS8qIC0tLS0tIFByaXZhdGUgcGFydCAtLS0tLSAqLwotfSBTS19BRERSOwotCi0vKiBmdW5jdGlvbiBwcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIFNLX0tSX1BST1RPCi0KLS8qIEZ1bmN0aW9ucyBwcm92aWRlZCBieSBTa0FkZHIgKi8KLQotLyogQU5TSS9DKysgY29tcGxpYW50IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLQotZXh0ZXJuCWludAlTa0FkZHJJbml0KAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJTGV2ZWwpOwotCi1leHRlcm4JaW50CVNrQWRkck1jQ2xlYXIoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCVNLX1UzMglQb3J0TnVtYmVyLAotCWludAlGbGFncyk7Ci0KLWV4dGVybglpbnQJU2tBZGRyTWNBZGQoCi0JU0tfQUMJCSpwQUMsCi0JU0tfSU9DCQlJb0MsCi0JU0tfVTMyCQlQb3J0TnVtYmVyLAotCVNLX01BQ19BRERSCSpwTWMsCi0JaW50CQlGbGFncyk7Ci0KLWV4dGVybglpbnQJU2tBZGRyTWNVcGRhdGUoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCVNLX1UzMglQb3J0TnVtYmVyKTsKLQotZXh0ZXJuCWludAlTa0FkZHJPdmVycmlkZSgKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQywKLQlTS19VMzIJCVBvcnROdW1iZXIsCi0JU0tfTUFDX0FERFIJU0tfRkFSICpwTmV3QWRkciwKLQlpbnQJCUZsYWdzKTsKLQotZXh0ZXJuCWludAlTa0FkZHJQcm9taXNjdW91c0NoYW5nZSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JU0tfVTMyCVBvcnROdW1iZXIsCi0JaW50CU5ld1Byb21Nb2RlKTsKLQotI2lmbmRlZiBTS19TTElNCi1leHRlcm4JaW50CVNrQWRkclN3YXAoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCVNLX1UzMglGcm9tUG9ydE51bWJlciwKLQlTS19VMzIJVG9Qb3J0TnVtYmVyKTsKLSNlbmRpZgotCi0jZWxzZQkvKiBkZWZpbmVkKFNLX0tSX1BST1RPKSkgKi8KLQotLyogTm9uLUFOU0kvQysrIGNvbXBsaWFudCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi0KLSNlcnJvciBLUi1zdHlsZSBwcm90b3R5cGVzIGFyZSBub3QgeWV0IHByb3ZpZGVkLgotCi0jZW5kaWYJLyogZGVmaW5lZChTS19LUl9QUk9UTykpICovCi0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYJLyogX19jcGx1c3BsdXMgKi8KLQotI2VuZGlmCS8qIF9fSU5DX1NLQUREUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tjc3VtLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tjc3VtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMjU2YmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrY3N1bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2NzdW0uaAotICogUHJvamVjdDoJR0VuZXNpcyAtIFN5c0tvbm5lY3QgU0stTkVUIEdpZ2FiaXQgRXRoZXJuZXQgKFNLLTk4eHgpCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMTAgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDgvMjAgMTM6NTk6NTcgJAotICogUHVycG9zZToJU3RvcmUvdmVyaWZ5IEludGVybmV0IGNoZWNrc3VtIGluIHNlbmQvcmVjZWl2ZSBwYWNrZXRzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAxIFN5c0tvbm5lY3QgR21iSC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBQdWJsaWMgaGVhZGVyIGZpbGUgZm9yIHRoZSAiR0VuZXNpcyIgY29tbW9uIG1vZHVsZSAiQ1NVTSIuCi0gKgotICogIkdFbmVzaXMiIGlzIGFuIGFiYnJldmlhdGlvbiBvZiAiR2lnYWJpdCBFdGhlcm5ldCBOZXR3b3JrIFN5c3RlbSBpbiBTaWxpY29uIgotICogYW5kIGlzIHRoZSBjb2RlIG5hbWUgb2YgdGhpcyBTeXNLb25uZWN0IHByb2plY3QuCi0gKgotICogQ29tcGlsYXRpb24gT3B0aW9uczoKLSAqCi0gKglTS19VU0VfQ1NVTSAtIERlZmluZSBpZiBDU1VNIGlzIHRvIGJlIHVzZWQuIE90aGVyd2lzZSwgQ1NVTSB3aWxsIGJlIGFuCi0gKgllbXB0eSBtb2R1bGUuCi0gKgotICoJU0tDU19PVkVSV1JJVEVfUFJPVE8gLSBEZWZpbmUgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHByb3RvY29sIGlkCi0gKglkZWZpbml0aW9ucy4gSW4gdGhpcyBjYXNlLCBhbGwgU0tDU19QUk9UT194eHggZGVmaW5pdGlvbnMgbXVzdCBiZSBtYWRlCi0gKglleHRlcm5hbC4KLSAqCi0gKglTS0NTX09WRVJXUklURV9TVEFUVVMgLSBEZWZpbmUgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHJldHVybiBzdGF0dXMKLSAqCWRlZmluaXRpb25zLiBJbiB0aGlzIGNhc2UsIGFsbCBTS0NTX1NUQVRVU194eHggZGVmaW5pdGlvbnMgbXVzdCBiZSBtYWRlCi0gKglleHRlcm5hbC4KLSAqCi0gKiBJbmNsdWRlIEZpbGUgSGllcmFyY2h5OgotICoKLSAqCSJoL3NrY3N1bS5oIgotICoJICJoL3NrdHlwZXMuaCIKLSAqCSAiaC9za3F1ZXVlLmgiCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0lOQ19TS0NTVU1fSAotI2RlZmluZSBfX0lOQ19TS0NTVU1fSAotCi0jaW5jbHVkZSAiaC9za3R5cGVzLmgiCi0jaW5jbHVkZSAiaC9za3F1ZXVlLmgiCi0KLS8qIGRlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBEZWZpbmUgdGhlIGRlZmF1bHQgYml0IGZsYWdzIGZvciAnU0tDU19QQUNLRVRfSU5GTy5Qcm90b2NvbEZsYWdzJyAgaWYgbm8gdXNlcgotICogb3ZlcndyaXRlLgotICovCi0jaWZuZGVmIFNLQ1NfT1ZFUldSSVRFX1BST1RPCS8qIFVzZXIgb3ZlcndyaXRlPyAqLwotI2RlZmluZSBTS0NTX1BST1RPX0lQCTB4MQkvKiBJUCAoSW50ZXJuZXQgUHJvdG9jb2wgdmVyc2lvbiA0KSAqLwotI2RlZmluZSBTS0NTX1BST1RPX1RDUAkweDIJLyogVENQIChUcmFuc21pc3Npb24gQ29udHJvbCBQcm90b2NvbCkgKi8KLSNkZWZpbmUgU0tDU19QUk9UT19VRFAJMHg0CS8qIFVEUCAoVXNlciBEYXRhZ3JhbSBQcm90b2NvbCkgKi8KLQotLyogSW5kaWNlcyBmb3IgcHJvdG9jb2wgc3RhdGlzdGljcy4gKi8KLSNkZWZpbmUgU0tDU19QUk9UT19TVEFUU19JUAkwCi0jZGVmaW5lIFNLQ1NfUFJPVE9fU1RBVFNfVURQCTEKLSNkZWZpbmUgU0tDU19QUk9UT19TVEFUU19UQ1AJMgotI2RlZmluZSBTS0NTX05VTV9QUk9UT0NPTFMJMwkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHByb3RvY29scy4gKi8KLSNlbmRpZgkvKiAhU0tDU19PVkVSV1JJVEVfUFJPVE8gKi8KLQotLyoKLSAqIERlZmluZSB0aGUgZGVmYXVsdCBTS0NTX1NUQVRVUyB0eXBlIGFuZCB2YWx1ZXMgaWYgbm8gdXNlciBvdmVyd3JpdGUuCi0gKgotICoJU0tDU19TVEFUVVNfVU5LTk9XTl9JUF9WRVJTSU9OIC0gTm90IGFuIElQIHY0IGZyYW1lLgotICoJU0tDU19TVEFUVVNfSVBfQ1NVTV9FUlJPUiAtIElQIGNoZWNrc3VtIGVycm9yLgotICoJU0tDU19TVEFUVVNfSVBfQ1NVTV9FUlJPUl9UQ1AgLSBJUCBjaGVja3N1bSBlcnJvciBpbiBUQ1AgZnJhbWUuCi0gKglTS0NTX1NUQVRVU19JUF9DU1VNX0VSUk9SX1VEUCAtIElQIGNoZWNrc3VtIGVycm9yIGluIFVEUCBmcmFtZQotICoJU0tDU19TVEFUVVNfSVBfRlJBR01FTlQgLSBJUCBmcmFnbWVudCAoSVAgY2hlY2tzdW0gb2spLgotICoJU0tDU19TVEFUVVNfSVBfQ1NVTV9PSyAtIElQIGNoZWNrc3VtIG9rIChub3QgYSBUQ1Agb3IgVURQIGZyYW1lKS4KLSAqCVNLQ1NfU1RBVFVTX1RDUF9DU1VNX0VSUk9SIC0gVENQIGNoZWNrc3VtIGVycm9yIChJUCBjaGVja3N1bSBvaykuCi0gKglTS0NTX1NUQVRVU19VRFBfQ1NVTV9FUlJPUiAtIFVEUCBjaGVja3N1bSBlcnJvciAoSVAgY2hlY2tzdW0gb2spLgotICoJU0tDU19TVEFUVVNfVENQX0NTVU1fT0sgLSBJUCBhbmQgVENQIGNoZWNrc3VtIG9rLgotICoJU0tDU19TVEFUVVNfVURQX0NTVU1fT0sgLSBJUCBhbmQgVURQIGNoZWNrc3VtIG9rLgotICoJU0tDU19TVEFUVVNfSVBfQ1NVTV9PS19OT19VRFAgLSBJUCBjaGVja3N1bSBPSyBhbmQgbm8gVURQIGNoZWNrc3VtLiAKLSAqLwotI2lmbmRlZiBTS0NTX09WRVJXUklURV9TVEFUVVMJLyogVXNlciBvdmVyd3JpdGU/ICovCi0jZGVmaW5lIFNLQ1NfU1RBVFVTCWludAkvKiBEZWZpbmUgc3RhdHVzIHR5cGUuICovCi0KLSNkZWZpbmUgU0tDU19TVEFUVVNfVU5LTk9XTl9JUF9WRVJTSU9OCTEKLSNkZWZpbmUgU0tDU19TVEFUVVNfSVBfQ1NVTV9FUlJPUgkJMgotI2RlZmluZSBTS0NTX1NUQVRVU19JUF9GUkFHTUVOVAkJCTMKLSNkZWZpbmUgU0tDU19TVEFUVVNfSVBfQ1NVTV9PSwkJCTQKLSNkZWZpbmUgU0tDU19TVEFUVVNfVENQX0NTVU1fRVJST1IJCTUKLSNkZWZpbmUgU0tDU19TVEFUVVNfVURQX0NTVU1fRVJST1IJCTYKLSNkZWZpbmUgU0tDU19TVEFUVVNfVENQX0NTVU1fT0sJCQk3Ci0jZGVmaW5lIFNLQ1NfU1RBVFVTX1VEUF9DU1VNX09LCQkJOAotLyogbmVlZGVkIGZvciBNaWNyb3NvZnQgKi8KLSNkZWZpbmUgU0tDU19TVEFUVVNfSVBfQ1NVTV9FUlJPUl9VRFAJOQotI2RlZmluZSBTS0NTX1NUQVRVU19JUF9DU1VNX0VSUk9SX1RDUAkxMAotLyogVURQIGNoZWNrc3VtIG1heSBiZSBvbWl0dGVkICovCi0jZGVmaW5lIFNLQ1NfU1RBVFVTX0lQX0NTVU1fT0tfTk9fVURQCTExCi0jZW5kaWYJLyogIVNLQ1NfT1ZFUldSSVRFX1NUQVRVUyAqLwotCi0vKiBDbGVhciBwcm90b2NvbCBzdGF0aXN0aWNzIGV2ZW50LiAqLwotI2RlZmluZSBTS19DU1VNX0VWRU5UX0NMRUFSX1BST1RPX1NUQVRTCTEKLQotLyoKLSAqIEFkZCB0d28gdmFsdWVzIGluIG9uZSdzIGNvbXBsZW1lbnQuCi0gKgotICogTm90ZTogT25lIG9mIHRoZSB0d28gaW5wdXQgdmFsdWVzIG1heSBiZSAibG9uZ2VyIiB0aGFuIDE2LWJpdCwgYnV0IHRoZW4gdGhlCi0gKiByZXN1bHRpbmcgc3VtIG1heSBiZSAxNyBiaXRzIGxvbmcuIEluIHRoaXMgY2FzZSwgYWRkIHplcm8gdG8gdGhlIHJlc3VsdCB1c2luZwotICogU0tDU19PQ19BREQoKSBhZ2Fpbi4KLSAqCi0gKglSZXN1bHQgPSBWYWx1ZTEgKyBWYWx1ZTIKLSAqLwotI2RlZmluZSBTS0NTX09DX0FERChSZXN1bHQsIFZhbHVlMSwgVmFsdWUyKSB7CQkJCVwKLQl1bnNpZ25lZCBsb25nIFN1bTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JU3VtID0gKHVuc2lnbmVkIGxvbmcpIChWYWx1ZTEpICsgKHVuc2lnbmVkIGxvbmcpIChWYWx1ZTIpOwlcCi0JLyogQWRkLWluIGFueSBjYXJyeS4gKi8JCQkJCQlcCi0JKFJlc3VsdCkgPSAoU3VtICYgMHhmZmZmKSArIChTdW0gPj4gMTYpOwkJCVwKLX0KLQotLyoKLSAqIFN1YnRyYWN0IHR3byB2YWx1ZXMgaW4gb25lJ3MgY29tcGxlbWVudC4KLSAqCi0gKglSZXN1bHQgPSBWYWx1ZTEgLSBWYWx1ZTIKLSAqLwotI2RlZmluZSBTS0NTX09DX1NVQihSZXN1bHQsIFZhbHVlMSwgVmFsdWUyKQlcCi0JU0tDU19PQ19BREQoKFJlc3VsdCksIChWYWx1ZTEpLCB+KFZhbHVlMikgJiAweGZmZmYpCi0KLS8qIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTS0NTX1BST1RPX1NUQVRTIC0gVGhlIENTVU0gcHJvdG9jb2wgc3RhdGlzdGljcyBzdHJ1Y3R1cmUuCi0gKgotICogVGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIGZvciBlYWNoIHByb3RvY29sIHN1cHBvcnRlZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qgc19Dc1Byb3RvY29sU3RhdGlzdGljcyB7Ci0JU0tfVTY0IFJ4T2tDdHM7CQkvKiBSZWNlaXZlIGNoZWNrc3VtIG9rLiAqLwotCVNLX1U2NCBSeFVuYWJsZUN0czsJLyogVW5hYmxlIHRvIHZlcmlmeSByZWNlaXZlIGNoZWNrc3VtLiAqLwotCVNLX1U2NCBSeEVyckN0czsJLyogUmVjZWl2ZSBjaGVja3N1bSBlcnJvci4gKi8KLQlTS19VNjQgVHhPa0N0czsJCS8qIFRyYW5zbWl0IGNoZWNrc3VtIG9rLiAqLwotCVNLX1U2NCBUeFVuYWJsZUN0czsJLyogVW5hYmxlIHRvIGNhbGN1bGF0ZSBjaGVja3N1bSBpbiBody4gKi8KLX0gU0tDU19QUk9UT19TVEFUUzsKLQotLyoKLSAqIHNfQ3N1bSAtIFRoZSBDU1VNIG1vZHVsZSBjb250ZXh0IHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qgc19Dc3VtIHsKLQkvKiBFbmFibGVkIHJlY2VpdmUgU0tfUFJPVE9fWFhYIGJpdCBmbGFncy4gKi8KLQl1bnNpZ25lZCBSZWNlaXZlRmxhZ3NbU0tfTUFYX05FVFNdOwotI2lmZGVmIFRYX0NTVU0KLQl1bnNpZ25lZCBUcmFuc21pdEZsYWdzW1NLX01BWF9ORVRTXTsKLSNlbmRpZiAvKiBUWF9DU1VNICovCi0KLQkvKiBUaGUgcHJvdG9jb2wgc3RhdGlzdGljcyBzdHJ1Y3R1cmU7IG9uZSBwZXIgc3VwcG9ydGVkIHByb3RvY29sLiAqLwotCVNLQ1NfUFJPVE9fU1RBVFMgUHJvdG9TdGF0c1tTS19NQVhfTkVUU11bU0tDU19OVU1fUFJPVE9DT0xTXTsKLX0gU0tfQ1NVTTsKLQotLyoKLSAqIFNLQ1NfUEFDS0VUX0lORk8gLSBUaGUgcGFja2V0IGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qgc19Dc1BhY2tldEluZm8gewotCS8qIEJpdCBmaWVsZCBzcGVjaWZpeWluZyB0aGUgZGVzaXJlZC9mb3VuZCBwcm90b2NvbHMuICovCi0JdW5zaWduZWQgUHJvdG9jb2xGbGFnczsKLQotCS8qIExlbmd0aCBvZiBjb21wbGV0ZSBJUCBoZWFkZXIsIGluY2x1ZGluZyBhbnkgb3B0aW9uIGZpZWxkcy4gKi8KLQl1bnNpZ25lZCBJcEhlYWRlckxlbmd0aDsKLQotCS8qIElQIGhlYWRlciBjaGVja3N1bS4gKi8KLQl1bnNpZ25lZCBJcEhlYWRlckNoZWNrc3VtOwotCi0JLyogVENQL1VEUCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLiAqLwotCXVuc2lnbmVkIFBzZXVkb0hlYWRlckNoZWNrc3VtOwotfSBTS0NTX1BBQ0tFVF9JTkZPOwotCi0vKiBmdW5jdGlvbiBwcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIFNLX0NTX0NBTENVTEFURV9DSEVDS1NVTQotZXh0ZXJuIHVuc2lnbmVkIFNrQ3NDYWxjdWxhdGVDaGVja3N1bSgKLQl2b2lkCQkqcERhdGEsCi0JdW5zaWduZWQJTGVuZ3RoKTsKLSNlbmRpZiAvKiBTS19DU19DQUxDVUxBVEVfQ0hFQ0tTVU0gKi8KLQotZXh0ZXJuIGludCBTa0NzRXZlbnQoCi0JU0tfQUMJCSpwQWMsCi0JU0tfSU9DCQlJb2MsCi0JU0tfVTMyCQlFdmVudCwKLQlTS19FVlBBUkEJUGFyYW0pOwotCi1leHRlcm4gU0tDU19TVEFUVVMgU2tDc0dldFJlY2VpdmVJbmZvKAotCVNLX0FDCQkqcEFjLAotCXZvaWQJCSpwSXBIZWFkZXIsCi0JdW5zaWduZWQJQ2hlY2tzdW0xLAotCXVuc2lnbmVkCUNoZWNrc3VtMiwKLQlpbnQJCQlOZXROdW1iZXIpOwotCi1leHRlcm4gdm9pZCBTa0NzU2V0UmVjZWl2ZUZsYWdzKAotCVNLX0FDCQkqcEFjLAotCXVuc2lnbmVkCVJlY2VpdmVGbGFncywKLQl1bnNpZ25lZAkqcENoZWNrc3VtMU9mZnNldCwKLQl1bnNpZ25lZAkqcENoZWNrc3VtMk9mZnNldCwKLQlpbnQJCQlOZXROdW1iZXIpOwotCi0jZW5kaWYJLyogX19JTkNfU0tDU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2RlYnVnLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tkZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2JhMTcxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tkZWJ1Zy5oCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBDb21tb24gTW9kdWxlcwotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjE0ICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzA1LzEzIDE3OjI2OjAwICQKLSAqIFB1cnBvc2U6CVNLIHNwZWNpZmljIERFQlVHIHN1cHBvcnQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0LgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0lOQ19TS0RFQlVHX0gKLSNkZWZpbmUgX19JTkNfU0tERUJVR19ICi0KLSNpZmRlZglERUJVRwotI2lmbmRlZiBTS19EQkdfTVNHCi0jZGVmaW5lIFNLX0RCR19NU0cocEFDLGNvbXAsY2F0LGFyZykgXAotCQlpZiAoICgoY29tcCkgJiBTS19EQkdfQ0hLTU9EKHBBQykpICYmIAlcCi0JCSAgICAgICgoY2F0KSAmIFNLX0RCR19DSEtDQVQocEFDKSkgKSB7IAlcCi0JCQlTS19EQkdfUFJJTlRGIGFyZyA7CQlcCi0JCX0KLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgU0tfREJHX01TRyhwQUMsY29tcCxsZXYsYXJnKQotI2VuZGlmCi0KLS8qIFBMUyBOT1RFOgotICogPT09PT09PT09Ci0gKiBEdWUgdG8gYW55IHJlc3RyaWN0aW9ucyBvZiBrZXJuZWwgcHJpbnRmIHJvdXRpbmVzIGRvIG5vdCB1c2Ugb3RoZXIKLSAqIGZvcm1hdCBpZGVudGlmaWVycyBhczogJXggJWQgJWMgJXMgLgotICogTmV2ZXIgdXNlIGFueSBjb21iaW5lZCBmb3JtYXQgaWRlbnRpZmllcnMgc3VjaCBhczogJWx4ICVsZCBpbiB5b3VyCi0gKiBwcmludGYgLSBhcmd1bWVudCAoYXJnKSBiZWNhdXNlIHNvbWUgT1Mgc3BlY2lmaWMga2VybmVsIHByaW50ZnMgbWF5Ci0gKiBvbmx5IHN1cHBvcnQgc29tZSBiYXNpYyBpZGVudGlmaWVycy4KLSAqLwotCi0vKiBEZWJ1ZyBtb2R1bGVzICovCi0KLSNkZWZpbmUgU0tfREJHTU9EX01FUlIJMHgwMDAwMDAwMUwJLyogZ2VuZXJhbCBtb2R1bGUgZXJyb3IgaW5kaWNhdGlvbiAqLwotI2RlZmluZSBTS19EQkdNT0RfSFdNCTB4MDAwMDAwMDJMCS8qIEhhcmR3YXJlIGluaXQgbW9kdWxlICovCi0jZGVmaW5lIFNLX0RCR01PRF9STE1UCTB4MDAwMDAwMDRMCS8qIFJMTVQgbW9kdWxlICovCi0jZGVmaW5lIFNLX0RCR01PRF9WUEQJMHgwMDAwMDAwOEwJLyogVlBEIG1vZHVsZSAqLwotI2RlZmluZSBTS19EQkdNT0RfSTJDCTB4MDAwMDAwMTBMCS8qIEkyQyBtb2R1bGUgKi8KLSNkZWZpbmUgU0tfREJHTU9EX1BOTUkJMHgwMDAwMDAyMEwJLyogUE5NSSBtb2R1bGUgKi8KLSNkZWZpbmUgU0tfREJHTU9EX0NTVU0JMHgwMDAwMDA0MEwJLyogQ1NVTSBtb2R1bGUgKi8KLSNkZWZpbmUgU0tfREJHTU9EX0FERFIJMHgwMDAwMDA4MEwJLyogQUREUiBtb2R1bGUgKi8KLSNkZWZpbmUgU0tfREJHTU9EX1BFQ1AJMHgwMDAwMDEwMEwJLyogUEVDUCBtb2R1bGUgKi8KLSNkZWZpbmUgU0tfREJHTU9EX1BPV00JMHgwMDAwMDIwMEwJLyogUG93ZXIgTWFuYWdlbWVudCBtb2R1bGUgKi8KLQotLyogRGVidWcgZXZlbnRzICovCi0KLSNkZWZpbmUgU0tfREJHQ0FUX0lOSVQJMHgwMDAwMDAwMUwJLyogbW9kdWxlL2RyaXZlciBpbml0aWFsaXphdGlvbiAqLwotI2RlZmluZSBTS19EQkdDQVRfQ1RSTAkweDAwMDAwMDAyTAkvKiBjb250cm9sbGluZyBkZXZpY2VzICovCi0jZGVmaW5lIFNLX0RCR0NBVF9FUlIJMHgwMDAwMDAwNEwJLyogZXJyb3IgaGFuZGxpbmcgcGF0aHMgKi8KLSNkZWZpbmUgU0tfREJHQ0FUX1RYCTB4MDAwMDAwMDhMCS8qIHRyYW5zbWl0IHBhdGggKi8KLSNkZWZpbmUgU0tfREJHQ0FUX1JYCTB4MDAwMDAwMTBMCS8qIHJlY2VpdmUgcGF0aCAqLwotI2RlZmluZSBTS19EQkdDQVRfSVJRCTB4MDAwMDAwMjBMCS8qIGdlbmVyYWwgSVJRIGhhbmRsaW5nICovCi0jZGVmaW5lIFNLX0RCR0NBVF9RVUVVRQkweDAwMDAwMDQwTAkvKiBhbnkgcXVldWUgbWFuYWdlbWVudCAqLwotI2RlZmluZSBTS19EQkdDQVRfRFVNUAkweDAwMDAwMDgwTAkvKiBsYXJnZSBkYXRhIG91dHB1dCBlLmcuIGhleCBkdW1wICovCi0jZGVmaW5lIFNLX0RCR0NBVF9GQVRBTAkweDAwMDAwMTAwTAkvKiBmYXRhbCBlcnJvciAqLwotCi0jZW5kaWYJLyogX19JTkNfU0tERUJVR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tkcnYxc3QuaCBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2RydjFzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWI4ZDRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2RydjFzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2RydjFzdC5oCi0gKiBQcm9qZWN0OglHRW5lc2lzLCBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuNCAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8xMS8xMiAxNDoyODoxNCAkCi0gKiBQdXJwb3NlOglGaXJzdCBoZWFkZXIgZmlsZSBmb3IgZHJpdmVyIGFuZCBhbGwgb3RoZXIgbW9kdWxlcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QgR21iSC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBUaGlzIGlzIHRoZSBmaXJzdCBpbmNsdWRlIGZpbGUgb2YgdGhlIGRyaXZlciwgd2hpY2ggaW5jbHVkZXMgYWxsCi0gKiBuZWNjZXNzYXJ5IHN5c3RlbSBoZWFkZXIgZmlsZXMgYW5kIHNvbWUgb2YgdGhlIEdFbmVzaXMgaGVhZGVyIGZpbGVzLgotICogSXQgYWxzbyBkZWZpbmVzIHNvbWUgYmFzaWMgaXRlbXMuCi0gKgotICogSW5jbHVkZSBGaWxlIEhpZXJhcmNoeToKLSAqCi0gKglzZWUgc2tnZS5jCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0lOQ19TS0RSVjFTVF9ICi0jZGVmaW5lIF9fSU5DX1NLRFJWMVNUX0gKLQotdHlwZWRlZiBzdHJ1Y3Qgc19BQwlTS19BQzsKLQotLyogU2V0IGNhcmQgdmVyc2lvbnMgKi8KLSNkZWZpbmUgU0tfRkFSCi0KLS8qIG92ZXJyaWRlIHNvbWUgZGVmYXVsdCBmdW5jdGlvbnMgd2l0aCBvcHRpbWl6ZWQgbGludXggZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgU0tfUE5NSV9TVE9SRV9VMTYocCx2KQkJbWVtY3B5KChjaGFyKikocCksKGNoYXIqKSYodiksMikKLSNkZWZpbmUgU0tfUE5NSV9TVE9SRV9VMzIocCx2KQkJbWVtY3B5KChjaGFyKikocCksKGNoYXIqKSYodiksNCkKLSNkZWZpbmUgU0tfUE5NSV9TVE9SRV9VNjQocCx2KQkJbWVtY3B5KChjaGFyKikocCksKGNoYXIqKSYodiksOCkKLSNkZWZpbmUgU0tfUE5NSV9SRUFEX1UxNihwLHYpCQltZW1jcHkoKGNoYXIqKSYodiksKGNoYXIqKShwKSwyKQotI2RlZmluZSBTS19QTk1JX1JFQURfVTMyKHAsdikJCW1lbWNweSgoY2hhciopJih2KSwoY2hhciopKHApLDQpCi0jZGVmaW5lIFNLX1BOTUlfUkVBRF9VNjQocCx2KQkJbWVtY3B5KChjaGFyKikmKHYpLChjaGFyKikocCksOCkKLQotI2RlZmluZSBTS19BRERSX0VRVUFMKGExLGEyKQkJKCFtZW1jbXAoYTEsYTIsNikpCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotCi0jZGVmaW5lIFNLX0NTX0NBTENVTEFURV9DSEVDS1NVTQotI2lmbmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIFNrQ3NDYWxjdWxhdGVDaGVja3N1bShwLGwpCSgofmlwX2NvbXB1dGVfY3N1bShwLCBsKSkgJiAweGZmZmYpCi0jZWxzZQotI2RlZmluZSBTa0NzQ2FsY3VsYXRlQ2hlY2tzdW0ocCxsKQkoKH5pcF9mYXN0X2NzdW0ocCwgbCkpICYgMHhmZmZmKQotI2VuZGlmCi0KLSNpbmNsdWRlCSJoL3NrdHlwZXMuaCIKLSNpbmNsdWRlCSJoL3NrZXJyb3IuaCIKLSNpbmNsdWRlCSJoL3NrZGVidWcuaCIKLSNpbmNsdWRlCSJoL2xtODAuaCIKLSNpbmNsdWRlCSJoL3htYWNfaWkuaCIKLQotI2lmZGVmIF9fTElUVExFX0VORElBTgotI2RlZmluZSBTS19MSVRUTEVfRU5ESUFOCi0jZWxzZQotI2RlZmluZSBTS19CSUdfRU5ESUFOCi0jZW5kaWYKLQotI2RlZmluZSBTS19ORVRfREVWSUNFCW5ldF9kZXZpY2UKLQotCi0vKiB3ZSB1c2UgZ2V0aHJ0aW1lKCksIHJldHVybiB1bml0OiBuYW5vc2Vjb25kcyAqLwotI2RlZmluZSBTS19USUNLU19QRVJfU0VDCTEwMAotCi0jZGVmaW5lCVNLX01FTV9NQVBQRURfSU8KLQotLy8gI2RlZmluZSBTS19STE1UX1NMT1dfTE9PS0FIRUFECi0KLSNkZWZpbmUgU0tfTUFYX01BQ1MJCTIKLSNkZWZpbmUgU0tfTUFYX05FVFMJCTIKLQotI2RlZmluZSBTS19JT0MJCQljaGFyIF9faW9tZW0gKgotCi10eXBlZGVmIHN0cnVjdCBzX0RydlJsbXRNYnVmIFNLX01CVUY7Ci0KLSNkZWZpbmUJU0tfQ09OU1Q2NAlJTlQ2NF9DCi0jZGVmaW5lCVNLX0NPTlNUVTY0CVVJTlQ2NF9DCi0KLSNkZWZpbmUgU0tfTUVNQ1BZKGRlc3Qsc3JjLHNpemUpCW1lbWNweShkZXN0LHNyYyxzaXplKQotI2RlZmluZSBTS19NRU1DTVAoczEsczIsc2l6ZSkJCW1lbWNtcChzMSxzMixzaXplKQotI2RlZmluZSBTS19NRU1TRVQoZGVzdCx2YWwsc2l6ZSkJbWVtc2V0KGRlc3QsdmFsLHNpemUpCi0jZGVmaW5lIFNLX1NUUkxFTihwU3RyKQkJCXN0cmxlbigoY2hhciopKHBTdHIpKQotI2RlZmluZSBTS19TVFJOQ1BZKHBEZXN0LHBTcmMsc2l6ZSkJc3RybmNweSgoY2hhciopKHBEZXN0KSwoY2hhciopKHBTcmMpLHNpemUpCi0jZGVmaW5lIFNLX1NUUkNNUChwU3RyMSxwU3RyMikJCXN0cmNtcCgoY2hhciopKHBTdHIxKSwoY2hhciopKHBTdHIyKSkKLQotLyogbWFjcm9zIHRvIGFjY2VzcyB0aGUgYWRhcHRlciAqLwotI2RlZmluZSBTS19PVVQ4KGIsYSx2KQkJd3JpdGViKCh2KSwgKChiKSsoYSkpKQkKLSNkZWZpbmUgU0tfT1VUMTYoYixhLHYpCQl3cml0ZXcoKHYpLCAoKGIpKyhhKSkpCQotI2RlZmluZSBTS19PVVQzMihiLGEsdikJCXdyaXRlbCgodiksICgoYikrKGEpKSkJCi0jZGVmaW5lIFNLX0lOOChiLGEscHYpCQkoKihwdikgPSByZWFkYigoYikrKGEpKSkKLSNkZWZpbmUgU0tfSU4xNihiLGEscHYpCQkoKihwdikgPSByZWFkdygoYikrKGEpKSkKLSNkZWZpbmUgU0tfSU4zMihiLGEscHYpCQkoKihwdikgPSByZWFkbCgoYikrKGEpKSkKLQotI2RlZmluZSBpbnQ4X3QJCWNoYXIKLSNkZWZpbmUgaW50MTZfdAkJc2hvcnQKLSNkZWZpbmUgaW50MzJfdAkJbG9uZwotI2RlZmluZSBpbnQ2NF90CQlsb25nIGxvbmcKLSNkZWZpbmUgdWludDhfdAkJdV9jaGFyCi0jZGVmaW5lIHVpbnQxNl90CXVfc2hvcnQKLSNkZWZpbmUgdWludDMyX3QJdV9sb25nCi0jZGVmaW5lIHVpbnQ2NF90CXVuc2lnbmVkIGxvbmcgbG9uZwotI2RlZmluZSB0X3NjYWxhcl90CWludAotI2RlZmluZSB0X3VzY2FsYXJfdAl1bnNpZ25lZCBpbnQKLSNkZWZpbmUgdWludHB0cl90CXVuc2lnbmVkIGxvbmcKLQotI2RlZmluZSBfX0NPTkNBVF9fKEEsQikgQSMjQgotCi0jZGVmaW5lIElOVDMyX0MoYSkJCV9fQ09OQ0FUX18oYSxMKQotI2RlZmluZSBJTlQ2NF9DKGEpCQlfX0NPTkNBVF9fKGEsTEwpCi0jZGVmaW5lIFVJTlQzMl9DKGEpCQlfX0NPTkNBVF9fKGEsVUwpCi0jZGVmaW5lIFVJTlQ2NF9DKGEpCQlfX0NPTkNBVF9fKGEsVUxMKQotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgU0tfREJHX1BSSU5URgkJcHJpbnRrCi0jaWZuZGVmIFNLX0RFQlVHX0NIS01PRAotI2RlZmluZSBTS19ERUJVR19DSEtNT0QJCTAKLSNlbmRpZgotI2lmbmRlZiBTS19ERUJVR19DSEtDQVQKLSNkZWZpbmUgU0tfREVCVUdfQ0hLQ0FUCQkwCi0jZW5kaWYKLS8qIHRob3NlIGNvbWUgZnJvbSB0aGUgbWFrZWZpbGUgKi8KLSNkZWZpbmUgU0tfREJHX0NIS01PRChwQUMpCShTS19ERUJVR19DSEtNT0QpCi0jZGVmaW5lIFNLX0RCR19DSEtDQVQocEFDKQkoU0tfREVCVUdfQ0hLQ0FUKQotCi1leHRlcm4gdm9pZCBTa0RiZ1ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsLi4uKTsKLQotI2RlZmluZSBTS19EQkdNT0RfRFJWCQkJMHgwMDAxMDAwMAotCi0vKioqKiBwb3NzaWJsZSBkcml2ZXIgZGVidWcgY2F0ZWdvcmllcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0tfREJHQ0FUX0RSVl9FTlRSWQkJMHgwMDAxMDAwMAotI2RlZmluZSBTS19EQkdDQVRfRFJWX1NBUAkJMHgwMDAyMDAwMAotI2RlZmluZSBTS19EQkdDQVRfRFJWX01DQQkJMHgwMDA0MDAwMAotI2RlZmluZSBTS19EQkdDQVRfRFJWX1RYX1BST0dSRVNTCTB4MDAwODAwMDAKLSNkZWZpbmUgU0tfREJHQ0FUX0RSVl9SWF9QUk9HUkVTUwkweDAwMTAwMDAwCi0jZGVmaW5lIFNLX0RCR0NBVF9EUlZfUFJPR1JFU1MJCTB4MDAyMDAwMDAKLSNkZWZpbmUgU0tfREJHQ0FUX0RSVl9NU0cJCTB4MDA0MDAwMDAKLSNkZWZpbmUgU0tfREJHQ0FUX0RSVl9QUk9NCQkweDAwODAwMDAwCi0jZGVmaW5lIFNLX0RCR0NBVF9EUlZfVFhfRlJBTUUJCTB4MDEwMDAwMDAKLSNkZWZpbmUgU0tfREJHQ0FUX0RSVl9FUlJPUgkJMHgwMjAwMDAwMAotI2RlZmluZSBTS19EQkdDQVRfRFJWX0lOVF9TUkMJCTB4MDQwMDAwMDAKLSNkZWZpbmUgU0tfREJHQ0FUX0RSVl9FVkVOVAkJMHgwODAwMDAwMAotCi0jZW5kaWYKLQotI2RlZmluZSBTS19FUlJfTE9HCQlTa0Vycm9yTG9nCi0KLWV4dGVybiB2b2lkIFNrRXJyb3JMb2coU0tfQUMqLCBpbnQsIGludCwgY2hhciopOwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2Mm5kLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tkcnYybmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhNjcxNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tkcnYybmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tkcnYybmQuaAotICogUHJvamVjdDoJR0VuZXNpcywgUENJIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjEwICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzEyLzExIDE2OjA0OjQ1ICQKLSAqIFB1cnBvc2U6CVNlY29uZCBoZWFkZXIgZmlsZSBmb3IgZHJpdmVyIGFuZCBhbGwgb3RoZXIgbW9kdWxlcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QgR21iSC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBUaGlzIGlzIHRoZSBzZWNvbmQgaW5jbHVkZSBmaWxlIG9mIHRoZSBkcml2ZXIsIHdoaWNoIGluY2x1ZGVzIGFsbCBvdGhlcgotICogbmVjY2Vzc2FyeSBmaWxlcyBhbmQgZGVmaW5lcyBhbGwgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIHVzZWQgYnkgdGhlCi0gKiBkcml2ZXIgYW5kIHRoZSBjb21tb24gbW9kdWxlcy4KLSAqCi0gKiBJbmNsdWRlIEZpbGUgSGllcmFyY2h5OgotICoKLSAqCXNlZSBza2dlLmMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fSU5DX1NLRFJWMk5EX0gKLSNkZWZpbmUgX19JTkNfU0tEUlYyTkRfSAotCi0jaW5jbHVkZSAiaC9za3F1ZXVlLmgiCi0jaW5jbHVkZSAiaC9za2dlaHd0LmgiCi0jaW5jbHVkZSAiaC9za3RpbWVyLmgiCi0jaW5jbHVkZSAiaC9za2kyYy5oIgotI2luY2x1ZGUgImgvc2tnZXBubWkuaCIKLSNpbmNsdWRlICJoL3NrdnBkLmgiCi0jaW5jbHVkZSAiaC9za2dlaHcuaCIKLSNpbmNsdWRlICJoL3NrZ2Vpbml0LmgiCi0jaW5jbHVkZSAiaC9za2FkZHIuaCIKLSNpbmNsdWRlICJoL3NrZ2VzaXJxLmgiCi0jaW5jbHVkZSAiaC9za2NzdW0uaCIKLSNpbmNsdWRlICJoL3NrcmxtdC5oIgotI2luY2x1ZGUgImgvc2tnZWRydi5oIgotCi0KLWV4dGVybiBTS19NQlVGCQkqU2tEcnZBbGxvY1JsbXRNYnVmKFNLX0FDKiwgU0tfSU9DLCB1bnNpZ25lZCk7Ci1leHRlcm4gdm9pZAkJU2tEcnZGcmVlUmxtdE1idWYoU0tfQUMqLCBTS19JT0MsIFNLX01CVUYqKTsKLWV4dGVybiBTS19VNjQJCVNrT3NHZXRUaW1lKFNLX0FDKik7Ci1leHRlcm4gaW50CQlTa1BjaVJlYWRDZmdEV29yZChTS19BQyosIGludCwgU0tfVTMyKik7Ci1leHRlcm4gaW50CQlTa1BjaVJlYWRDZmdXb3JkKFNLX0FDKiwgaW50LCBTS19VMTYqKTsKLWV4dGVybiBpbnQJCVNrUGNpUmVhZENmZ0J5dGUoU0tfQUMqLCBpbnQsIFNLX1U4Kik7Ci1leHRlcm4gaW50CQlTa1BjaVdyaXRlQ2ZnV29yZChTS19BQyosIGludCwgU0tfVTE2KTsKLWV4dGVybiBpbnQJCVNrUGNpV3JpdGVDZmdCeXRlKFNLX0FDKiwgaW50LCBTS19VOCk7Ci1leHRlcm4gaW50CQlTa0RydkV2ZW50KFNLX0FDKiwgU0tfSU9DIElvQywgU0tfVTMyLCBTS19FVlBBUkEpOwotCi0jaWZkZWYgU0tfRElBR19TVVBQT1JUCi1leHRlcm4gaW50CQlTa0RydkVudGVyRGlhZ01vZGUoU0tfQUMgKnBBYyk7Ci1leHRlcm4gaW50CQlTa0RydkxlYXZlRGlhZ01vZGUoU0tfQUMgKnBBYyk7Ci0jZW5kaWYKLQotc3RydWN0IHNfRHJ2UmxtdE1idWYgewotCVNLX01CVUYJCSpwTmV4dDsJCS8qIFBvaW50ZXIgdG8gbmV4dCBSTE1UIE1idWYuICovCi0JU0tfVTgJCSpwRGF0YTsJCS8qIERhdGEgYnVmZmVyICh2aXJ0dWFsbHkgY29udGlnLikuICovCi0JdW5zaWduZWQJU2l6ZTsJCS8qIERhdGEgYnVmZmVyIHNpemUuICovCi0JdW5zaWduZWQJTGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHBhY2tldCAoPD0gU2l6ZSkuICovCi0JU0tfVTMyCQlQb3J0SWR4OwkvKiBSZWNlaXZpbmcvdHJhbnNtaXR0aW5nIHBvcnQuICovCi0jaWZkZWYgU0tfUkxNVF9NQlVGX1BSSVZBVEUKLQlTS19STE1UX01CVUYJUmxtdDsJCS8qIFByaXZhdGUgcGFydCBmb3IgUkxNVC4gKi8KLSNlbmRpZiAgLyogU0tfUkxNVF9NQlVGX1BSSVZBVEUgKi8KLQlzdHJ1Y3Qgc2tfYnVmZgkqcE9zOwkJLyogUG9pbnRlciB0byBtZXNzYWdlIGJsb2NrICovCi19OwotCi0KLS8qCi0gKiBUaW1lIG1hY3JvcwotICovCi0jaWYgU0tfVElDS1NfUEVSX1NFQyA9PSAxMDAKLSNkZWZpbmUgU0tfUE5NSV9IVU5EUkVEU19TRUModCkJKHQpCi0jZWxzZQotI2RlZmluZSBTS19QTk1JX0hVTkRSRURTX1NFQyh0KQkoKCgodW5zaWduZWQgbG9uZyl0KSAqIDEwMCkgLyBcCi0JCQkJCQkJCQkJKFNLX1RJQ0tTX1BFUl9TRUMpKQotI2VuZGlmCi0KLS8qCi0gKiBOZXcgU2tPc0dldFRpbWUKLSAqLwotI2RlZmluZSBTa09zR2V0VGltZUN1cnJlbnQocEFDLCBwVXNlYykge1wKLQlzdHJ1Y3QgdGltZXZhbCB0O1wKLQlkb19nZXR0aW1lb2ZkYXkoJnQpO1wKLQkqcFVzZWMgPSAoKCgodC50dl9zZWMpICogMTAwMDAwMEwpK3QudHZfdXNlYykvMTAwMDApO1wKLX0KLQotCi0vKgotICogaW9jdGwgZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZQkJU0tfSU9DVExfQkFTRQkJKFNJT0NERVZQUklWQVRFKQotI2RlZmluZQkJU0tfSU9DVExfR0VUTUlCCQkoU0tfSU9DVExfQkFTRSArIDApCi0jZGVmaW5lCQlTS19JT0NUTF9TRVRNSUIJCShTS19JT0NUTF9CQVNFICsgMSkKLSNkZWZpbmUJCVNLX0lPQ1RMX1BSRVNFVE1JQgkoU0tfSU9DVExfQkFTRSArIDIpCi0jZGVmaW5lCQlTS19JT0NUTF9HRU4JCShTS19JT0NUTF9CQVNFICsgMykKLSNkZWZpbmUJCVNLX0lPQ1RMX0RJQUcJCShTS19JT0NUTF9CQVNFICsgNCkKLQotdHlwZWRlZiBzdHJ1Y3Qgc19JT0NUTAlTS19HRV9JT0NUTDsKLQotc3RydWN0IHNfSU9DVEwgewotCWNoYXIgX191c2VyICoJcERhdGE7Ci0JdW5zaWduZWQgaW50CUxlbjsKLX07Ci0KLQotLyoKLSAqIGRlZmluZSBzaXplcyBvZiBkZXNjcmlwdG9yIHJpbmdzIGluIGJ5dGVzCi0gKi8KLQotI2RlZmluZQkJVFhfUklOR19TSVpFCSg4KjEwMjQpCi0jZGVmaW5lCQlSWF9SSU5HX1NJWkUJKDI0KjEwMjQpCi0KLS8qCi0gKiBCdWZmZXIgc2l6ZSBmb3IgZXRoZXJuZXQgcGFja2V0cwotICovCi0jZGVmaW5lCUVUSF9CVUZfU0laRQkxNTQwCi0jZGVmaW5lCUVUSF9NQVhfTVRVCTE1MTQKLSNkZWZpbmUgRVRIX01JTl9NVFUJNjAKLSNkZWZpbmUgRVRIX01VTFRJQ0FTVF9CSVQJMHgwMQotI2RlZmluZSBTS19KVU1CT19NVFUJOTAwMAotCi0vKgotICogdHJhbnNtaXQgcHJpb3JpdHkgc2VsZWN0cyB0aGUgcXVldWU6IExPVz1hc3luY2hyb24sIEhJR0g9c3luY2hyb24KLSAqLwotI2RlZmluZSBUWF9QUklPX0xPVwkwCi0jZGVmaW5lIFRYX1BSSU9fSElHSAkxCi0KLS8qCi0gKiBhbGlnbm1lbnQgb2YgcngvdHggZGVzY3JpcHRvcnMKLSAqLwotI2RlZmluZSBERVNDUl9BTElHTgk2NAotCi0vKgotICogZGVmaW5pdGlvbnMgZm9yIHBubWkuIFRPRE8KLSAqLwotI2RlZmluZSBTS19EUklWRVJfUkVTRVQocEFDLCBJb0MpCTAKLSNkZWZpbmUgU0tfRFJJVkVSX1NFTkRFVkVOVChwQUMsIElvQykJMAotI2RlZmluZSBTS19EUklWRVJfU0VMRlRFU1QocEFDLCBJb0MpCTAKLS8qIEZvciBnZXQgbXR1IHlvdSBtdXN0IGFkZCBhbiBvd24gZnVuY3Rpb24gKi8KLSNkZWZpbmUgU0tfRFJJVkVSX0dFVF9NVFUocEFjLElvQyxpKQkwCi0jZGVmaW5lIFNLX0RSSVZFUl9TRVRfTVRVKHBBYyxJb0MsaSx2KQkwCi0jZGVmaW5lIFNLX0RSSVZFUl9QUkVTRVRfTVRVKHBBYyxJb0MsaSx2KQkwCi0KLS8qCi0qKiBJbnRlcmltIGRlZmluaXRpb24gb2YgU0tfRFJWX1RJTUVSIHBsYWNlZCBpbiB0aGlzIGZpbGUgdW50aWwgCi0qKiBjb21tb24gbW9kdWxlcyBoYXZlIGJlZW4gZmluYWxpemVkCi0qLwotI2RlZmluZSBTS19EUlZfVElNRVIJCQkxMSAKLSNkZWZpbmUJU0tfRFJWX01PREVSQVRJT05fVElNRVIJCTEKLSNkZWZpbmUgU0tfRFJWX01PREVSQVRJT05fVElNRVJfTEVOR1RIICAxMDAwMDAwICAvKiAxIHNlY29uZCAqLwotI2RlZmluZSBTS19EUlZfUlhfQ0xFQU5VUF9USU1FUgkJMgotI2RlZmluZSBTS19EUlZfUlhfQ0xFQU5VUF9USU1FUl9MRU5HVEgJMTAwMDAwMAkgLyogMTAwIG1pbGxpc2VjcyAqLwotCi0vKgotKiogRGVmaW5pdGlvbnMgcmVnYXJkaW5nIHRyYW5zbWl0dGluZyBmcmFtZXMgCi0qKiBhbnkgY2FsY3VsYXRpbmcgYW55IGNoZWNrc3VtLgotKi8KLSNkZWZpbmUgQ19MRU5fRVRIRVJNQUNfSEVBREVSX0RFU1RfQUREUiA2Ci0jZGVmaW5lIENfTEVOX0VUSEVSTUFDX0hFQURFUl9TUkNfQUREUiAgNgotI2RlZmluZSBDX0xFTl9FVEhFUk1BQ19IRUFERVJfTEVOVFlQRSAgIDIKLSNkZWZpbmUgQ19MRU5fRVRIRVJNQUNfSEVBREVSICAgICAgICAgICAoIChDX0xFTl9FVEhFUk1BQ19IRUFERVJfREVTVF9BRERSKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDX0xFTl9FVEhFUk1BQ19IRUFERVJfU1JDX0FERFIpICArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDX0xFTl9FVEhFUk1BQ19IRUFERVJfTEVOVFlQRSkgKQotCi0jZGVmaW5lIENfTEVOX0VUSEVSTVRVX01JTlNJWkUgICAgICAgICAgNDYKLSNkZWZpbmUgQ19MRU5fRVRIRVJNVFVfTUFYU0laRV9TVEQgICAgICAxNTAwCi0jZGVmaW5lIENfTEVOX0VUSEVSTVRVX01BWFNJWkVfSlVNQk8gICAgOTAwMAotCi0jZGVmaW5lIENfTEVOX0VUSEVSTkVUX01JTlNJWkUgICAgICAgICAgKCAoQ19MRU5fRVRIRVJNQUNfSEVBREVSKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDX0xFTl9FVEhFUk1UVV9NSU5TSVpFKSApCi0KLSNkZWZpbmUgQ19PRkZTRVRfSVBIRUFERVIgICAgICAgICAgICAgICBDX0xFTl9FVEhFUk1BQ19IRUFERVIKLSNkZWZpbmUgQ19PRkZTRVRfSVBIRUFERVJfSVBQUk9UTyAgICAgICA5Ci0jZGVmaW5lIENfT0ZGU0VUX1RDUEhFQURFUl9UQ1BDUyAgICAgICAgMTYKLSNkZWZpbmUgQ19PRkZTRVRfVURQSEVBREVSX1VEUENTICAgICAgICA2Ci0KLSNkZWZpbmUgQ19PRkZTRVRfSVBQUk9UTyAgICAgICAgICAgICAgICAoIChDX0xFTl9FVEhFUk1BQ19IRUFERVIpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENfT0ZGU0VUX0lQSEVBREVSX0lQUFJPVE8pICkKLQotI2RlZmluZSBDX1BST1RPX0lEX1VEUCAgICAgICAgICAgICAgICAgIDE3ICAgICAgIC8qIHJlZmVyIHRvIFJGQyA3OTAgb3IgU3RldmVucycgICAqLwotI2RlZmluZSBDX1BST1RPX0lEX1RDUCAgICAgICAgICAgICAgICAgIDYgICAgICAgIC8qIFRDUC9JUCBpbGx1c3RyYXRlZCBmb3IgZGV0YWlscyAqLwotCi0vKiBUWCBhbmQgUlggZGVzY3JpcHRvcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgc3RydWN0IHNfUnhEIFJYRDsgLyogdGhlIHJlY2VpdmUgZGVzY3JpcHRvciAqLwotCi1zdHJ1Y3Qgc19SeEQgewotCXZvbGF0aWxlIFNLX1UzMglSQkNvbnRyb2w7CS8qIFJlY2VpdmUgQnVmZmVyIENvbnRyb2wgKi8KLQlTS19VMzIJCVZOZXh0UnhkOwkvKiBOZXh0IHJlY2VpdmUgZGVzY3JpcHRvcixsb3cgZHdvcmQgKi8KLQlTS19VMzIJCVZEYXRhTG93OwkvKiBSZWNlaXZlIGJ1ZmZlciBBZGRyLCBsb3cgZHdvcmQgKi8KLQlTS19VMzIJCVZEYXRhSGlnaDsJLyogUmVjZWl2ZSBidWZmZXIgQWRkciwgaGlnaCBkd29yZCAqLwotCVNLX1UzMgkJRnJhbWVTdGF0OwkvKiBSZWNlaXZlIEZyYW1lIFN0YXR1cyB3b3JkICovCi0JU0tfVTMyCQlUaW1lU3RhbXA7CS8qIFRpbWUgc3RhbXAgZnJvbSBYTUFDICovCi0JU0tfVTMyCQlUY3BTdW1zOwkvKiBUQ1AgU3VtIDIgLyBUQ1AgU3VtIDEgKi8KLQlTS19VMzIJCVRjcFN1bVN0YXJ0czsJLyogVENQIFN1bSBTdGFydCAyIC8gVENQIFN1bSBTdGFydCAxICovCi0JUlhECQkqcE5leHRSeGQ7CS8qIFBvaW50ZXIgdG8gbmV4dCBSeGQgKi8KLQlzdHJ1Y3Qgc2tfYnVmZgkqcE1CdWY7CQkvKiBQb2ludGVyIHRvIExpbnV4JyBzb2NrZXQgYnVmZmVyICovCi19OwotCi10eXBlZGVmIHN0cnVjdCBzX1R4RCBUWEQ7IC8qIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yICovCi0KLXN0cnVjdCBzX1R4RCB7Ci0Jdm9sYXRpbGUgU0tfVTMyCVRCQ29udHJvbDsJLyogVHJhbnNtaXQgQnVmZmVyIENvbnRyb2wgKi8KLQlTS19VMzIJCVZOZXh0VHhkOwkvKiBOZXh0IHRyYW5zbWl0IGRlc2NyaXB0b3IsbG93IGR3b3JkICovCi0JU0tfVTMyCQlWRGF0YUxvdzsJLyogVHJhbnNtaXQgQnVmZmVyIEFkZHIsIGxvdyBkd29yZCAqLwotCVNLX1UzMgkJVkRhdGFIaWdoOwkvKiBUcmFuc21pdCBCdWZmZXIgQWRkciwgaGlnaCBkd29yZCAqLwotCVNLX1UzMgkJRnJhbWVTdGF0OwkvKiBUcmFuc21pdCBGcmFtZSBTdGF0dXMgV29yZCAqLwotCVNLX1UzMgkJVGNwU3VtT2ZzOwkvKiBSZXNlcnZlZCAvIFRDUCBTdW0gT2Zmc2V0ICovCi0JU0tfVTE2CQlUY3BTdW1TdDsJLyogVENQIFN1bSBTdGFydCAqLwotCVNLX1UxNgkJVGNwU3VtV3I7CS8qIFRDUCBTdW0gV3JpdGUgKi8KLQlTS19VMzIJCVRjcFJlc2VydmVkOwkvKiBub3QgdXNlZCAqLwotCVRYRAkJKnBOZXh0VHhkOwkvKiBQb2ludGVyIHRvIG5leHQgVHhkICovCi0Jc3RydWN0IHNrX2J1ZmYJKnBNQnVmOwkJLyogUG9pbnRlciB0byBMaW51eCcgc29ja2V0IGJ1ZmZlciAqLwotfTsKLQotLyogVXNlZCBpbnRlcnJ1cHQgYml0cyBpbiB0aGUgaW50ZXJydXB0cyBzb3VyY2UgcmVnaXN0ZXIgKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIERSSVZFUl9JUlFTCSgoSVNfSVJRX1NXKSAgIHwgXAotCQkJKElTX1IxX0YpICAgICAgfChJU19SMl9GKSAgfCBcCi0JCQkoSVNfWFMxX0YpICAgICB8KElTX1hBMV9GKSB8IFwKLQkJCShJU19YUzJfRikgICAgIHwoSVNfWEEyX0YpKQotCi0jZGVmaW5lIFNQRUNJQUxfSVJRUwkoKElTX0hXX0VSUikgICB8KElTX0kyQ19SRUFEWSkgIHwgXAotCQkJKElTX0VYVF9SRUcpICAgfChJU19USU1JTlQpICAgICB8IFwKLQkJCShJU19QQV9UT19SWDEpIHwoSVNfUEFfVE9fUlgyKSAgfCBcCi0JCQkoSVNfUEFfVE9fVFgxKSB8KElTX1BBX1RPX1RYMikgIHwgXAotCQkJKElTX01BQzEpICAgICAgfChJU19MTktfU1lOQ19NMSl8IFwKLQkJCShJU19NQUMyKSAgICAgIHwoSVNfTE5LX1NZTkNfTTIpfCBcCi0JCQkoSVNfUjFfQykgICAgICB8KElTX1IyX0MpICAgICAgIHwgXAotCQkJKElTX1hTMV9DKSAgICAgfChJU19YQTFfQykgICAgICB8IFwKLQkJCShJU19YUzJfQykgICAgIHwoSVNfWEEyX0MpKQotCi0jZGVmaW5lIElSUV9NQVNLCSgoSVNfSVJRX1NXKSAgIHwgXAotCQkJKElTX1IxX0IpICAgICAgfChJU19SMV9GKSAgICAgfChJU19SMl9CKSB8KElTX1IyX0YpIHwgXAotCQkJKElTX1hTMV9CKSAgICAgfChJU19YUzFfRikgICAgfChJU19YQTFfQil8KElTX1hBMV9GKXwgXAotCQkJKElTX1hTMl9CKSAgICAgfChJU19YUzJfRikgICAgfChJU19YQTJfQil8KElTX1hBMl9GKXwgXAotCQkJKElTX0hXX0VSUikgICAgfChJU19JMkNfUkVBRFkpfCBcCi0JCQkoSVNfRVhUX1JFRykgICB8KElTX1RJTUlOVCkgICB8IFwKLQkJCShJU19QQV9UT19SWDEpIHwoSVNfUEFfVE9fUlgyKXwgXAotCQkJKElTX1BBX1RPX1RYMSkgfChJU19QQV9UT19UWDIpfCBcCi0JCQkoSVNfTUFDMSkgICAgICB8KElTX01BQzIpICAgICB8IFwKLQkJCShJU19SMV9DKSAgICAgIHwoSVNfUjJfQykgICAgIHwgXAotCQkJKElTX1hTMV9DKSAgICAgfChJU19YQTFfQykgICAgfCBcCi0JCQkoSVNfWFMyX0MpICAgICB8KElTX1hBMl9DKSkKLQotI2RlZmluZSBJUlFfSFdFX01BU0sJKElTX0VSUl9NU0spIC8qIGVuYWJsZSBhbGwgSFcgaXJxcyAqLwotCi10eXBlZGVmIHN0cnVjdCBzX0Rldk5ldCBERVZfTkVUOwotCi1zdHJ1Y3Qgc19EZXZOZXQgewotCWludCAgICAgICAgICAgICBQb3J0TnI7Ci0JaW50ICAgICAgICAgICAgIE5ldE5yOwotCVNLX0FDICAgKnBBQzsKLX07ICAKLQotdHlwZWRlZiBzdHJ1Y3Qgc19UeFBvcnQJCVRYX1BPUlQ7Ci0KLXN0cnVjdCBzX1R4UG9ydCB7Ci0JLyogdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZ3MgKi8KLQljYWRkcl90CQlwVHhEZXNjclJpbmc7CS8qIGRlc2NyaXB0b3IgYXJlYSBtZW1vcnkgKi8KLQlTS19VNjQJCVZUeERlc2NyUmluZzsJLyogZGVzY3IuIGFyZWEgYnVzIHZpcnQuIGFkZHIuICovCi0JVFhECQkqcFR4ZFJpbmdIZWFkOwkvKiBIZWFkIG9mIFR4IHJpbmdzICovCi0JVFhECQkqcFR4ZFJpbmdUYWlsOwkvKiBUYWlsIG9mIFR4IHJpbmdzICovCi0JVFhECQkqcFR4ZFJpbmdQcmV2OwkvKiBkZXNjcmlwdG9yIHNlbnQgcHJldmlvdXNseSAqLwotCWludAkJVHhkUmluZ0ZyZWU7CS8qICMgb2YgZnJlZSBlbnRyeXMgKi8KLQlzcGlubG9ja190CVR4RGVzUmluZ0xvY2s7CS8qIHNlcmlhbGl6ZSBkZXNjcmlwdG9yIGFjY2Vzc2VzICovCi0JU0tfSU9DCQlId0FkZHI7CQkvKiBibXUgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KLQlpbnQJCVBvcnRJbmRleDsJLyogaW5kZXggbnVtYmVyIG9mIHBvcnQgKDAgb3IgMSkgKi8KLX07Ci0KLXR5cGVkZWYgc3RydWN0IHNfUnhQb3J0CQlSWF9QT1JUOwotCi1zdHJ1Y3Qgc19SeFBvcnQgewotCS8qIHRoZSByZWNlaXZlIGRlc2NyaXB0b3IgcmluZ3MgKi8KLQljYWRkcl90CQlwUnhEZXNjclJpbmc7CS8qIGRlc2NyaXB0b3IgYXJlYSBtZW1vcnkgKi8KLQlTS19VNjQJCVZSeERlc2NyUmluZzsgICAvKiBkZXNjci4gYXJlYSBidXMgdmlydC4gYWRkci4gKi8KLQlSWEQJCSpwUnhkUmluZ0hlYWQ7CS8qIEhlYWQgb2YgUnggcmluZ3MgKi8KLQlSWEQJCSpwUnhkUmluZ1RhaWw7CS8qIFRhaWwgb2YgUnggcmluZ3MgKi8KLQlSWEQJCSpwUnhkUmluZ1ByZXY7CS8qIGRlc2NyaXB0b3IgZ2l2ZW4gdG8gQk1VIHByZXZpb3VzbHkgKi8KLQlpbnQJCVJ4ZFJpbmdGcmVlOwkvKiAjIG9mIGZyZWUgZW50cnlzICovCi0JaW50CQlSeENzdW07CQkvKiB1c2UgcmVjZWl2ZSBjaGVja3N1bSBoYXJkd2FyZSAqLwotCXNwaW5sb2NrX3QJUnhEZXNSaW5nTG9jazsJLyogc2VyaWFsaXplIGRlc2NyaXB0b3IgYWNjZXNzZXMgKi8KLQlpbnQJCVJ4RmlsbExpbWl0OwkvKiBsaW1pdCBmb3IgYnVmZmVycyBpbiByaW5nICovCi0JU0tfSU9DCQlId0FkZHI7CQkvKiBibXUgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KLQlpbnQJCVBvcnRJbmRleDsJLyogaW5kZXggbnVtYmVyIG9mIHBvcnQgKDAgb3IgMSkgKi8KLX07Ci0KLS8qIERlZmluaXRpb25zIG5lZWRlZCBmb3IgaW50ZXJydXB0IG1vZGVyYXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBJUlFfRU9GX0FTX1RYICAgICAoKElTX1hBMV9GKSAgICAgfCAoSVNfWEEyX0YpKQotI2RlZmluZSBJUlFfRU9GX1NZX1RYICAgICAoKElTX1hTMV9GKSAgICAgfCAoSVNfWFMyX0YpKQotI2RlZmluZSBJUlFfTUFTS19UWF9PTkxZICAoKElSUV9FT0ZfQVNfVFgpfCAoSVJRX0VPRl9TWV9UWCkpCi0jZGVmaW5lIElSUV9NQVNLX1JYX09OTFkgICgoSVNfUjFfRikgICAgICB8IChJU19SMl9GKSkKLSNkZWZpbmUgSVJRX01BU0tfU1BfT05MWSAgKFNQRUNJQUxfSVJRUykKLSNkZWZpbmUgSVJRX01BU0tfVFhfUlggICAgKChJUlFfTUFTS19UWF9PTkxZKXwgKElSUV9NQVNLX1JYX09OTFkpKQotI2RlZmluZSBJUlFfTUFTS19TUF9SWCAgICAoKFNQRUNJQUxfSVJRUykgICAgfCAoSVJRX01BU0tfUlhfT05MWSkpCi0jZGVmaW5lIElSUV9NQVNLX1NQX1RYICAgICgoU1BFQ0lBTF9JUlFTKSAgICB8IChJUlFfTUFTS19UWF9PTkxZKSkKLSNkZWZpbmUgSVJRX01BU0tfUlhfVFhfU1AgKChTUEVDSUFMX0lSUVMpICAgIHwgKElSUV9NQVNLX1RYX1JYKSkKLQotI2RlZmluZSBDX0lOVF9NT0RfTk9ORSAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBDX0lOVF9NT0RfU1RBVElDICAgICAgICAgICAgICAgMgotI2RlZmluZSBDX0lOVF9NT0RfRFlOQU1JQyAgICAgICAgICAgICAgNAotCi0jZGVmaW5lIENfQ0xLX0ZSRVFfR0VORVNJUyAgICAgIDUzMjE1MDAwIC8qIHNob3J0ZXI6IDUzLjEyNSBNSHogICovCi0jZGVmaW5lIENfQ0xLX0ZSRVFfWVVLT04gICAgICAgIDc4MjE1MDAwIC8qIHNob3J0ZXI6IDc4LjEyNSBNSHogICovCi0KLSNkZWZpbmUgQ19JTlRTX1BFUl9TRUNfREVGQVVMVCAgICAgIDIwMDAgCi0jZGVmaW5lIENfSU5UX01PRF9FTkFCTEVfUEVSQ0VOVEFHRSAgIDUwIC8qIGlmIGhpZ2hlciA1MCUgZW5hYmxlICovCi0jZGVmaW5lIENfSU5UX01PRF9ESVNBQkxFX1BFUkNFTlRBR0UgIDUwIC8qIGlmIGxvd2VyIDUwJSBkaXNhYmxlICovCi0jZGVmaW5lIENfSU5UX01PRF9JUFNfTE9XRVJfUkFOR0UgICAgIDMwCi0jZGVmaW5lIENfSU5UX01PRF9JUFNfVVBQRVJfUkFOR0UgICAgIDQwMDAwCi0KLQotdHlwZWRlZiBzdHJ1Y3Qgc19EeW5JcnFNb2RJbmZvICBESU1fSU5GTzsKLXN0cnVjdCBzX0R5bklycU1vZEluZm8gewotCXVuc2lnbmVkIGxvbmcgICBQcmV2VGltZVZhbDsKLQl1bnNpZ25lZCBpbnQgICAgUHJldlN5c0xvYWQ7Ci0JdW5zaWduZWQgaW50ICAgIFByZXZVc2VkVGltZTsKLQl1bnNpZ25lZCBpbnQgICAgUHJldlRvdGFsVGltZTsKLQlpbnQgICAgICAgICAgICAgUHJldlVzZWREZXNjclJhdGlvOwotCWludCAgICAgICAgICAgICBOYnJQcm9jZXNzZWREZXNjcjsKLSAgICAgICAgU0tfVTY0ICAgICAgICAgIFByZXZQb3J0MFJ4SW50ckN0czsKLSAgICAgICAgU0tfVTY0ICAgICAgICAgIFByZXZQb3J0MVJ4SW50ckN0czsKLSAgICAgICAgU0tfVTY0ICAgICAgICAgIFByZXZQb3J0MFR4SW50ckN0czsKLSAgICAgICAgU0tfVTY0ICAgICAgICAgIFByZXZQb3J0MVR4SW50ckN0czsKLQlTS19CT09MICAgICAgICAgTW9kSnVzdEVuYWJsZWQ7ICAgICAvKiBNb2RlcmF0aW9uIGp1c3QgZW5hYmxlZCB5ZXMvbm8gKi8KLQotCWludCAgICAgICAgICAgICBNYXhNb2RJbnRzUGVyU2VjOyAgICAgICAgICAgIC8qIE1vZGVyYXRpb24gVGhyZXNob2xkICovCi0JaW50ICAgICAgICAgICAgIE1heE1vZEludHNQZXJTZWNVcHBlckxpbWl0OyAgLyogVXBwZXIgbGltaXQgZm9yIERJTSAgKi8KLQlpbnQgICAgICAgICAgICAgTWF4TW9kSW50c1BlclNlY0xvd2VyTGltaXQ7ICAvKiBMb3dlciBsaW1pdCBmb3IgRElNICAqLwotCi0JbG9uZyAgICAgICAgICAgIE1hc2tJcnFNb2RlcmF0aW9uOyAgIC8qIE1vZElycVR5cGUgKGVnLiAnVHhSeCcpICAgICAgKi8KLQlTS19CT09MICAgICAgICAgRGlzcGxheVN0YXRzOyAgICAgICAgLyogU3RhdHMgeWVzL25vICAgICAgICAgICAgICAgICAqLwotCVNLX0JPT0wgICAgICAgICBBdXRvU2l6aW5nOyAgICAgICAgICAvKiBSZXNpemUgRElNLXRpbWVyIG9uL29mZiAgICAgICovCi0JaW50ICAgICAgICAgICAgIEludE1vZFR5cGVTZWxlY3Q7ICAgIC8qIEVuYWJsZUludE1vZCAoZWcuICdkeW5hbWljJykgKi8KLQotCVNLX1RJTUVSICAgICAgICBNb2RUaW1lcjsgLyoganVzdCBzb21lIHRpbWVyICovCi19OwotCi10eXBlZGVmIHN0cnVjdCBzX1BlclN0cm0JUEVSX1NUUk07Ci0KLSNkZWZpbmUgU0tfQUxMT0NfSVJRCTB4MDAwMDAwMDEKLQotI2lmZGVmIFNLX0RJQUdfU1VQUE9SVAotI2RlZmluZQlESUFHX0FDVElWRQkJMQotI2RlZmluZQlESUFHX05PVEFDVElWRQkJMAotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQZXIgYm9hcmQgc3RydWN0dXJlIC8gQWRhcHRlciBDb250ZXh0IHN0cnVjdHVyZToKLSAqCUFsbG9jYXRlZCB3aXRoaW4gYXR0YWNoKDllKSBhbmQgZnJlZWQgd2l0aGluIGRldGFjaCg5ZSkuCi0gKglDb250YWlucyBhbGwgJ3BlciBkZXZpY2UnIG5lY2Vzc2FyeSBoYW5kbGVzLCBmbGFncywgbG9ja3MgZXRjLjoKLSAqLwotc3RydWN0IHNfQUMgIHsKLQlTS19HRUlOSVQJR0luaTsJCS8qIEdFIGluaXQgc3RydWN0ICovCi0JU0tfUE5NSQkJUG5taTsJCS8qIFBOTUkgZGF0YSBzdHJ1Y3QgKi8KLQlTS19WUEQJCXZwZDsJCS8qIHZwZCBkYXRhIHN0cnVjdCAqLwotCVNLX1FVRVVFCUV2ZW50OwkJLyogRXZlbnQgcXVldWUgKi8KLQlTS19IV1QJCUh3dDsJCS8qIEhhcmR3YXJlIFRpbWVyIGNvbnRyb2wgc3RydWN0ICovCi0JU0tfVElNQ1RSTAlUaW07CQkvKiBTb2Z0d2FyZSBUaW1lciBjb250cm9sIHN0cnVjdCAqLwotCVNLX0kyQwkJSTJjOwkJLyogSTJDIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlICovCi0JU0tfQUREUgkJQWRkcjsJCS8qIGZvciBBZGRyZXNzIG1vZHVsZSAqLwotCVNLX0NTVU0JCUNzdW07CQkvKiBmb3IgY2hlY2tzdW0gbW9kdWxlICovCi0JU0tfUkxNVAkJUmxtdDsJCS8qIGZvciBybG10IG1vZHVsZSAqLwotCXNwaW5sb2NrX3QJU2xvd1BhdGhMb2NrOwkvKiBOb3JtYWwgSVJRIGxvY2sgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCBCbGlua1RpbWVyOwkvKiBmb3IgTEVEIGJsaW5raW5nICovCi0JaW50CQlMZWRzT247Ci0JU0tfUE5NSV9TVFJVQ1RfREFUQSBQbm1pU3RydWN0OwkvKiBzdHJ1Y3R1cmUgdG8gZ2V0IGFsbCBQbm1pLURhdGEgKi8KLQlpbnQJCQlSbG10TW9kZTsJLyogbGluayBjaGVjayBtb2RlIHRvIHNldCAqLwotCWludAkJCVJsbXROZXRzOwkvKiBOdW1iZXIgb2YgbmV0cyAqLwotCQotCVNLX0lPQwkJSW9CYXNlOwkJLyogcmVnaXN0ZXIgc2V0IG9mIGFkYXB0ZXIgKi8KLQlpbnQJCUJvYXJkTGV2ZWw7CS8qIGxldmVsIG9mIGFjdGl2ZSBodyBpbml0ICgwLTIpICovCi0KLQlTS19VMzIJCUFsbG9jRmxhZzsJLyogZmxhZyBhbGxvY2F0aW9uIG9mIHJlc291cmNlcyAqLwotCXN0cnVjdCBwY2lfZGV2CSpQY2lEZXY7CS8qIGZvciBhY2Nlc3MgdG8gcGNpIGNvbmZpZyBzcGFjZSAqLwotCXN0cnVjdCBTS19ORVRfREVWSUNFCSpkZXZbMl07CS8qIHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdCAqLwotCi0JaW50CQlSeEJ1ZlNpemU7CS8qIGxlbmd0aCBvZiByZWNlaXZlIGJ1ZmZlcnMgKi8KLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CS8qIGxpbnV4ICduZXRzdGF0IC1pJyBzdGF0aXN0aWNzICovCi0JaW50CQlJbmRleDsJCS8qIGludGVybmFsIGJvYXJkIGluZGV4IG51bWJlciAqLwotCi0JLyogYWRhcHRlciBSQU0gc2l6ZXMgZm9yIHF1ZXVlcyBvZiBhY3RpdmUgcG9ydCAqLwotCWludAkJUnhRdWV1ZVNpemU7CS8qIG1lbW9yeSB1c2VkIGZvciByZWNlaXZlIHF1ZXVlICovCi0JaW50CQlUeFNRdWV1ZVNpemU7CS8qIG1lbW9yeSB1c2VkIGZvciBzeW5jLiB0eCBxdWV1ZSAqLwotCWludAkJVHhBUXVldWVTaXplOwkvKiBtZW1vcnkgdXNlZCBmb3IgYXN5bmMuIHR4IHF1ZXVlICovCi0KLQlpbnQJCVByb21pc2NDb3VudDsJLyogcHJvbWlzY3VvdXMgbW9kZSBjb3VudGVyICAqLwotCWludAkJQWxsTXVsdGlDb3VudDsgIC8qIGFsbG11bHRpY2FzdCBtb2RlIGNvdW50ZXIgKi8KLQlpbnQJCU11bHRpY0NvdW50OwkvKiBudW1iZXIgb2YgZGlmZmVyZW50IE1DICAgICovCi0JCQkJCS8qICBhZGRyZXNzZXMgZm9yIHRoaXMgYm9hcmQgKi8KLQkJCQkJLyogIChtYXkgYmUgbW9yZSB0aGFuIEhXIGNhbikqLwotCi0JaW50CQlIV1JldmlzaW9uOwkvKiBIYXJkd2FyZSByZXZpc2lvbiAqLwotCWludAkJQWN0aXZlUG9ydDsJLyogdGhlIGFjdGl2ZSBYTUFDIHBvcnQgKi8KLQlpbnQJCU1heFBvcnRzOwkJLyogbnVtYmVyIG9mIGFjdGl2YXRlZCBwb3J0cyAqLwotCWludAkJVHhEZXNjclBlclJpbmc7CS8qICMgb2YgZGVzY3JpcHRvcnMgcGVyIHR4IHJpbmcgKi8KLQlpbnQJCVJ4RGVzY3JQZXJSaW5nOwkvKiAjIG9mIGRlc2NyaXB0b3JzIHBlciByeCByaW5nICovCi0KLQljYWRkcl90CQlwRGVzY3JNZW07CS8qIFBvaW50ZXIgdG8gdGhlIGRlc2NyaXB0b3IgYXJlYSAqLwotCWRtYV9hZGRyX3QJcERlc2NyTWVtRE1BOwkvKiBQQ0kgRE1BIGFkZHJlc3Mgb2YgYXJlYSAqLwotCi0JLyogdGhlIHBvcnQgc3RydWN0dXJlcyB3aXRoIGRlc2NyaXB0b3IgcmluZ3MgKi8KLQlUWF9QT1JUCQlUeFBvcnRbU0tfTUFYX01BQ1NdWzJdOwotCVJYX1BPUlQJCVJ4UG9ydFtTS19NQVhfTUFDU107Ci0KLQlTS19CT09MCQlDaGVja1F1ZXVlOwkvKiBjaGVjayBldmVudCBxdWV1ZSBzb29uICovCi0JU0tfVElNRVIgICAgICAgIERydkNsZWFudXBUaW1lcjsvKiB0byBjaGVjayBmb3IgcGVuZGluZyBkZXNjcmlwdG9ycyAqLwotCURJTV9JTkZPICAgICAgICBEeW5JcnFNb2RJbmZvOyAgLyogYWxsIGRhdGEgcmVsYXRlZCB0byBESU0gKi8KLQotCS8qIE9ubHkgZm9yIHRlc3RzICovCi0JaW50CQlQb3J0RG93bjsKLQlpbnQJCUNoaXBzZXRUeXBlOwkvKiAgQ2hpcHNldCBmYW1pbHkgdHlwZSAKLQkJCQkJICogIDAgPT0gR2VuZXNpcyBmYW1pbHkgc3VwcG9ydAotCQkJCQkgKiAgMSA9PSBZdWtvbiBmYW1pbHkgc3VwcG9ydAotCQkJCQkgKi8KLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLQlTS19VMzIJCURpYWdNb2RlQWN0aXZlOwkJLyogaXMgZGlhZyBhY3RpdmU/CSovCi0JU0tfQk9PTAkJRGlhZ0Zsb3dDdHJsOwkJLyogZm9yIGNvbnRyb2wgcHVycG9zZXMJKi8KLQlTS19QTk1JX1NUUlVDVF9EQVRBIFBubWlCYWNrdXA7CQkvKiBiYWNrdXAgc3RydWN0dXJlIGZvciBhbGwgUG5taS1EYXRhICovCi0JU0tfQk9PTCAgICAgICAgIFdhc0lmVXBbU0tfTUFYX01BQ1NdOyAgIC8qIGZvciBPcGVuQ2xvc2Ugd2hpbGUgCi0JCQkJCQkgKiBESUFHIGlzIGJ1c3kgd2l0aCBOSUMgCi0JCQkJCQkgKi8KLSNlbmRpZgotCi19OwotCi0KLSNlbmRpZiAvKiBfX0lOQ19TS0RSVjJORF9IICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2Vycm9yLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tlcnJvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTA2MmY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2Vycm9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tlcnJvci5oCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBDb21tb24gTW9kdWxlcwotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjcgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDUvMTMgMTc6MjU6MTMgJAotICogUHVycG9zZToJU0sgc3BlY2lmaWMgRXJyb3IgbG9nIHN1cHBvcnQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0LgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfSU5DX1NLRVJST1JfSF8KLSNkZWZpbmUgX0lOQ19TS0VSUk9SX0hfCi0KLS8qCi0gKiBEZWZpbmUgRXJyb3IgQ2xhc3NlcwotICovCi0jZGVmaW5lCVNLX0VSUkNMX09USEVSCQkoMCkJCS8qIE90aGVyIGVycm9yICovCi0jZGVmaW5lCVNLX0VSUkNMX0NPTkZJRwkJKDFMPDwwKQkvKiBDb25maWd1cmF0aW9uIGVycm9yICovCi0jZGVmaW5lCVNLX0VSUkNMX0lOSVQJCSgxTDw8MSkJLyogSW5pdGlhbGl6YXRpb24gZXJyb3IgKi8KLSNkZWZpbmUJU0tfRVJSQ0xfTk9SRVMJCSgxTDw8MikJLyogT3V0IG9mIFJlc291cmNlcyBlcnJvciAqLwotI2RlZmluZQlTS19FUlJDTF9TVwkJCSgxTDw8MykJLyogSW50ZXJuYWwgU29mdHdhcmUgZXJyb3IgKi8KLSNkZWZpbmUJU0tfRVJSQ0xfSFcJCQkoMUw8PDQpCS8qIEhhcmR3YXJlIEZhaWx1cmUgKi8KLSNkZWZpbmUJU0tfRVJSQ0xfQ09NTQkJKDFMPDw1KQkvKiBDb21tdW5pY2F0aW9uIGVycm9yICovCi0KLQotLyoKLSAqIERlZmluZSBFcnJvciBDb2RlIEJhc2VzCi0gKi8KLSNkZWZpbmUJU0tfRVJSQkFTRV9STE1UCQkgMTAwCS8qIEJhc2UgRXJyb3IgbnVtYmVyIGZvciBSTE1UICovCi0jZGVmaW5lCVNLX0VSUkJBU0VfSFdJTklUCSAyMDAJLyogQmFzZSBFcnJvciBudW1iZXIgZm9yIEhXSW5pdCAqLwotI2RlZmluZQlTS19FUlJCQVNFX1ZQRAkJIDMwMAkvKiBCYXNlIEVycm9yIG51bWJlciBmb3IgVlBEICovCi0jZGVmaW5lCVNLX0VSUkJBU0VfUE5NSQkJIDQwMAkvKiBCYXNlIEVycm9yIG51bWJlciBmb3IgUE5NSSAqLwotI2RlZmluZQlTS19FUlJCQVNFX0NTVU0JCSA1MDAJLyogQmFzZSBFcnJvciBudW1iZXIgZm9yIENoZWNrc3VtICovCi0jZGVmaW5lCVNLX0VSUkJBU0VfU0lSUQkJIDYwMAkvKiBCYXNlIEVycm9yIG51bWJlciBmb3IgU3BlY2lhbCBJUlEgKi8KLSNkZWZpbmUJU0tfRVJSQkFTRV9JMkMJCSA3MDAJLyogQmFzZSBFcnJvciBudW1iZXIgZm9yIEkyQyBtb2R1bGUgKi8KLSNkZWZpbmUJU0tfRVJSQkFTRV9RVUVVRQkgODAwCS8qIEJhc2UgRXJyb3IgbnVtYmVyIGZvciBTY2hlZHVsZXIgKi8KLSNkZWZpbmUJU0tfRVJSQkFTRV9BRERSCQkgOTAwCS8qIEJhc2UgRXJyb3IgbnVtYmVyIGZvciBBZGRyZXNzIG1vZHVsZSAqLwotI2RlZmluZSBTS19FUlJCQVNFX1BFQ1AJCTEwMDAgICAgLyogQmFzZSBFcnJvciBudW1iZXIgZm9yIFBFQ1AgKi8KLSNkZWZpbmUJU0tfRVJSQkFTRV9EUlYJCTExMDAJLyogQmFzZSBFcnJvciBudW1iZXIgZm9yIERyaXZlciAqLwotCi0jZW5kaWYJLyogX0lOQ19TS0VSUk9SX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZWRydi5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2VkcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRmZDRjMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZWRydi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrZ2VkcnYuaAotICogUHJvamVjdDoJR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVycywgQ29tbW9uIE1vZHVsZXMKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS4xMCAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8wNy8wNCAxMjoyNTowMSAkCi0gKiBQdXJwb3NlOglJbnRlcmZhY2Ugd2l0aCB0aGUgZHJpdmVyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19JTkNfU0tHRURSVl9IXwotI2RlZmluZSBfX0lOQ19TS0dFRFJWX0hfCi0KLS8qIGRlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBEZWZpbmUgdGhlIGRyaXZlciBldmVudHMuCi0gKiBVc3VhbGx5IHRoZSBldmVudHMgYXJlIGRlZmluZWQgYnkgdGhlIGRlc3RpbmF0aW9uIG1vZHVsZS4KLSAqIEluIGNhc2Ugb2YgdGhlIGRyaXZlciB3ZSBwdXQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGV2ZW50cyBoZXJlLgotICovCi0jZGVmaW5lIFNLX0RSVl9QT1JUX1JFU0VUCQkgMQkvKiBUaGUgcG9ydCBuZWVkcyB0byBiZSByZXNldCAqLwotI2RlZmluZSBTS19EUlZfTkVUX1VQICAgCQkgMgkvKiBUaGUgbmV0IGlzIG9wZXJhdGlvbmFsICovCi0jZGVmaW5lIFNLX0RSVl9ORVRfRE9XTgkJCSAzCS8qIFRoZSBuZXQgaXMgZG93biAqLwotI2RlZmluZSBTS19EUlZfU1dJVENIX1NPRlQJCSA0CS8qIFBvcnRzIHN3aXRjaCB3aXRoIGJvdGggbGlua3MgY29ubmVjdGVkICovCi0jZGVmaW5lIFNLX0RSVl9TV0lUQ0hfSEFSRAkJIDUJLyogUG9ydCBzd2l0Y2ggZHVlIHRvIGxpbmsgZmFpbHVyZSAqLwotI2RlZmluZSBTS19EUlZfUkxNVF9TRU5ECQkgNgkvKiBTZW5kIGEgUkxNVCBwYWNrZXQgKi8KLSNkZWZpbmUgU0tfRFJWX0FEQVBfRkFJTAkJIDcJLyogVGhlIHdob2xlIGFkYXB0ZXIgZmFpbHMgKi8KLSNkZWZpbmUgU0tfRFJWX1BPUlRfRkFJTAkJIDgJLyogT25lIHBvcnQgZmFpbHMgKi8KLSNkZWZpbmUgU0tfRFJWX1NXSVRDSF9JTlRFUk4JIDkJLyogUG9ydCBzd2l0Y2ggYnkgdGhlIGRyaXZlciBpdHNlbGYgKi8KLSNkZWZpbmUgU0tfRFJWX1BPV0VSX0RPV04JCTEwCS8qIFBvd2VyIGRvd24gbW9kZSAqLwotI2RlZmluZSBTS19EUlZfVElNRVIJCQkxMQkvKiBUaW1lciBmb3IgZnJlZSB1c2UgKi8KLSNpZmRlZiBTS19OT19STE1UCi0jZGVmaW5lIFNLX0RSVl9MSU5LX1VQICAJCTEyCS8qIExpbmsgVXAgZXZlbnQgZm9yIGRyaXZlciAqLwotI2RlZmluZSBTS19EUlZfTElOS19ET1dOCQkxMwkvKiBMaW5rIERvd24gZXZlbnQgZm9yIGRyaXZlciAqLwotI2VuZGlmCi0jZGVmaW5lIFNLX0RSVl9ET1dOU0hJRlRfREVUCTE0CS8qIERvd25zaGlmdCA0LVBhaXIgLyAyLVBhaXIgKFlVS09OIG9ubHkpICovCi0jZW5kaWYgLyogX19JTkNfU0tHRURSVl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vody5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vody5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjI4MmI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlaHcuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrZ2Vody5oCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBDb21tb24gTW9kdWxlcwotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjU2ICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzA5LzIzIDA5OjAxOjAwICQKLSAqIFB1cnBvc2U6CURlZmluZXMgYW5kIE1hY3JvcyBmb3IgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlciBQcm9kdWN0IEZhbWlseQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QuCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fSU5DX1NLR0VIV19ICi0jZGVmaW5lIF9fSU5DX1NLR0VIV19ICi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYJLyogX19jcGx1c3BsdXMgKi8KLQotLyogZGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBCSVRfMzEJCSgxVUwgPDwgMzEpCi0jZGVmaW5lIEJJVF8zMAkJKDFMIDw8IDMwKQotI2RlZmluZSBCSVRfMjkJCSgxTCA8PCAyOSkKLSNkZWZpbmUgQklUXzI4CQkoMUwgPDwgMjgpCi0jZGVmaW5lIEJJVF8yNwkJKDFMIDw8IDI3KQotI2RlZmluZSBCSVRfMjYJCSgxTCA8PCAyNikKLSNkZWZpbmUgQklUXzI1CQkoMUwgPDwgMjUpCi0jZGVmaW5lIEJJVF8yNAkJKDFMIDw8IDI0KQotI2RlZmluZSBCSVRfMjMJCSgxTCA8PCAyMykKLSNkZWZpbmUgQklUXzIyCQkoMUwgPDwgMjIpCi0jZGVmaW5lIEJJVF8yMQkJKDFMIDw8IDIxKQotI2RlZmluZSBCSVRfMjAJCSgxTCA8PCAyMCkKLSNkZWZpbmUgQklUXzE5CQkoMUwgPDwgMTkpCi0jZGVmaW5lIEJJVF8xOAkJKDFMIDw8IDE4KQotI2RlZmluZSBCSVRfMTcJCSgxTCA8PCAxNykKLSNkZWZpbmUgQklUXzE2CQkoMUwgPDwgMTYpCi0jZGVmaW5lIEJJVF8xNQkJKDFMIDw8IDE1KQotI2RlZmluZSBCSVRfMTQJCSgxTCA8PCAxNCkKLSNkZWZpbmUgQklUXzEzCQkoMUwgPDwgMTMpCi0jZGVmaW5lIEJJVF8xMgkJKDFMIDw8IDEyKQotI2RlZmluZSBCSVRfMTEJCSgxTCA8PCAxMSkKLSNkZWZpbmUgQklUXzEwCQkoMUwgPDwgMTApCi0jZGVmaW5lIEJJVF85CQkoMUwgPDwgOSkKLSNkZWZpbmUgQklUXzgJCSgxTCA8PCA4KQotI2RlZmluZSBCSVRfNwkJKDFMIDw8IDcpCi0jZGVmaW5lIEJJVF82CQkoMUwgPDwgNikKLSNkZWZpbmUgQklUXzUJCSgxTCA8PCA1KQotI2RlZmluZSBCSVRfNAkJKDFMIDw8IDQpCi0jZGVmaW5lIEJJVF8zCQkoMUwgPDwgMykKLSNkZWZpbmUgQklUXzIJCSgxTCA8PCAyKQotI2RlZmluZSBCSVRfMQkJKDFMIDw8IDEpCi0jZGVmaW5lIEJJVF8wCQkxTAotCi0jZGVmaW5lIEJJVF8xNVMJCSgxVSA8PCAxNSkKLSNkZWZpbmUgQklUXzE0UwkJKDEgPDwgMTQpCi0jZGVmaW5lIEJJVF8xM1MJCSgxIDw8IDEzKQotI2RlZmluZSBCSVRfMTJTCQkoMSA8PCAxMikKLSNkZWZpbmUgQklUXzExUwkJKDEgPDwgMTEpCi0jZGVmaW5lIEJJVF8xMFMJCSgxIDw8IDEwKQotI2RlZmluZSBCSVRfOVMJCSgxIDw8IDkpCi0jZGVmaW5lIEJJVF84UwkJKDEgPDwgOCkKLSNkZWZpbmUgQklUXzdTIAkJKDEgPDwgNykKLSNkZWZpbmUgQklUXzZTCQkoMSA8PCA2KQotI2RlZmluZSBCSVRfNVMJCSgxIDw8IDUpCi0jZGVmaW5lIEJJVF80UwkJKDEgPDwgNCkKLSNkZWZpbmUgQklUXzNTCQkoMSA8PCAzKQotI2RlZmluZSBCSVRfMlMJCSgxIDw8IDIpCi0jZGVmaW5lIEJJVF8xUwkJKDEgPDwgMSkKLSNkZWZpbmUgQklUXzBTCQkxCi0KLSNkZWZpbmUgU0hJRlQzMSh4KQkoKHgpIDw8IDMxKQotI2RlZmluZSBTSElGVDMwKHgpCSgoeCkgPDwgMzApCi0jZGVmaW5lIFNISUZUMjkoeCkJKCh4KSA8PCAyOSkKLSNkZWZpbmUgU0hJRlQyOCh4KQkoKHgpIDw8IDI4KQotI2RlZmluZSBTSElGVDI3KHgpCSgoeCkgPDwgMjcpCi0jZGVmaW5lIFNISUZUMjYoeCkJKCh4KSA8PCAyNikKLSNkZWZpbmUgU0hJRlQyNSh4KQkoKHgpIDw8IDI1KQotI2RlZmluZSBTSElGVDI0KHgpCSgoeCkgPDwgMjQpCi0jZGVmaW5lIFNISUZUMjMoeCkJKCh4KSA8PCAyMykKLSNkZWZpbmUgU0hJRlQyMih4KQkoKHgpIDw8IDIyKQotI2RlZmluZSBTSElGVDIxKHgpCSgoeCkgPDwgMjEpCi0jZGVmaW5lIFNISUZUMjAoeCkJKCh4KSA8PCAyMCkKLSNkZWZpbmUgU0hJRlQxOSh4KQkoKHgpIDw8IDE5KQotI2RlZmluZSBTSElGVDE4KHgpCSgoeCkgPDwgMTgpCi0jZGVmaW5lIFNISUZUMTcoeCkJKCh4KSA8PCAxNykKLSNkZWZpbmUgU0hJRlQxNih4KQkoKHgpIDw8IDE2KQotI2RlZmluZSBTSElGVDE1KHgpCSgoeCkgPDwgMTUpCi0jZGVmaW5lIFNISUZUMTQoeCkJKCh4KSA8PCAxNCkKLSNkZWZpbmUgU0hJRlQxMyh4KQkoKHgpIDw8IDEzKQotI2RlZmluZSBTSElGVDEyKHgpCSgoeCkgPDwgMTIpCi0jZGVmaW5lIFNISUZUMTEoeCkJKCh4KSA8PCAxMSkKLSNkZWZpbmUgU0hJRlQxMCh4KQkoKHgpIDw8IDEwKQotI2RlZmluZSBTSElGVDkoeCkJKCh4KSA8PCA5KQotI2RlZmluZSBTSElGVDgoeCkJKCh4KSA8PCA4KQotI2RlZmluZSBTSElGVDcoeCkJKCh4KSA8PCA3KQotI2RlZmluZSBTSElGVDYoeCkJKCh4KSA8PCA2KQotI2RlZmluZSBTSElGVDUoeCkJKCh4KSA8PCA1KQotI2RlZmluZSBTSElGVDQoeCkJKCh4KSA8PCA0KQotI2RlZmluZSBTSElGVDMoeCkJKCh4KSA8PCAzKQotI2RlZmluZSBTSElGVDIoeCkJKCh4KSA8PCAyKQotI2RlZmluZSBTSElGVDEoeCkJKCh4KSA8PCAxKQotI2RlZmluZSBTSElGVDAoeCkJKCh4KSA8PCAwKQotCi0vKgotICogQ29uZmlndXJhdGlvbiBTcGFjZSBoZWFkZXIKLSAqIFNpbmNlIHRoaXMgbW9kdWxlIGlzIHVzZWQgZm9yIGRpZmZlcmVudCBPUycsIHRob3NlIG1heSBiZQotICogZHVwbGljYXRlIG9uIHNvbWUgb2YgdGhlbSAoZS5nLiBMaW51eCkuIEJ1dCB0byBrZWVwIHRoZQotICogY29tbW9uIHNvdXJjZSwgd2UgaGF2ZSB0byBsaXZlIHdpdGggdGhpcy4uLgotICovCi0jZGVmaW5lIFBDSV9WRU5ET1JfSUQJMHgwMAkvKiAxNiBiaXQJVmVuZG9yIElEICovCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSUQJMHgwMgkvKiAxNiBiaXQJRGV2aWNlIElEICovCi0jZGVmaW5lIFBDSV9DT01NQU5ECQkweDA0CS8qIDE2IGJpdAlDb21tYW5kICovCi0jZGVmaW5lIFBDSV9TVEFUVVMJCTB4MDYJLyogMTYgYml0CVN0YXR1cyAqLwotI2RlZmluZSBQQ0lfUkVWX0lECQkweDA4CS8qICA4IGJpdAlSZXZpc2lvbiBJRCAqLwotI2RlZmluZSBQQ0lfQ0xBU1NfQ09ERQkweDA5CS8qIDI0IGJpdAlDbGFzcyBDb2RlICovCi0jZGVmaW5lIFBDSV9DQUNIRV9MU1oJMHgwYwkvKiAgOCBiaXQJQ2FjaGUgTGluZSBTaXplICovCi0jZGVmaW5lIFBDSV9MQVRfVElNCQkweDBkCS8qICA4IGJpdAlMYXRlbmN5IFRpbWVyICovCi0jZGVmaW5lIFBDSV9IRUFERVJfVAkweDBlCS8qICA4IGJpdAlIZWFkZXIgVHlwZSAqLwotI2RlZmluZSBQQ0lfQklTVAkJMHgwZgkvKiAgOCBiaXQJQnVpbHQtaW4gc2VsZnRlc3QgKi8KLSNkZWZpbmUgUENJX0JBU0VfMVNUCTB4MTAJLyogMzIgYml0CTFzdCBCYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgUENJX0JBU0VfMk5ECTB4MTQJLyogMzIgYml0CTJuZCBCYXNlIGFkZHJlc3MgKi8KLQkvKiBCeXRlIDB4MTguLjB4MmI6CXJlc2VydmVkICovCi0jZGVmaW5lIFBDSV9TVUJfVklECQkweDJjCS8qIDE2IGJpdAlTdWJzeXN0ZW0gVmVuZG9yIElEICovCi0jZGVmaW5lIFBDSV9TVUJfSUQJCTB4MmUJLyogMTYgYml0CVN1YnN5c3RlbSBJRCAqLwotI2RlZmluZSBQQ0lfQkFTRV9ST00JMHgzMAkvKiAzMiBiaXQJRXhwYW5zaW9uIFJPTSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgUENJX0NBUF9QVFIJCTB4MzQJLyogIDggYml0IAlDYXBhYmlsaXRpZXMgUHRyICovCi0JLyogQnl0ZSAweDM1Li4weDNiOglyZXNlcnZlZCAqLwotI2RlZmluZSBQQ0lfSVJRX0xJTkUJMHgzYwkvKiAgOCBiaXQJSW50ZXJydXB0IExpbmUgKi8KLSNkZWZpbmUgUENJX0lSUV9QSU4JCTB4M2QJLyogIDggYml0CUludGVycnVwdCBQaW4gKi8KLSNkZWZpbmUgUENJX01JTl9HTlQJCTB4M2UJLyogIDggYml0CU1pbl9HbnQgKi8KLSNkZWZpbmUgUENJX01BWF9MQVQJCTB4M2YJLyogIDggYml0CU1heF9MYXQgKi8KLQkvKiBEZXZpY2UgRGVwZW5kZW50IFJlZ2lvbiAqLwotI2RlZmluZSBQQ0lfT1VSX1JFR18xCTB4NDAJLyogMzIgYml0IAlPdXIgUmVnaXN0ZXIgMSAqLwotI2RlZmluZSBQQ0lfT1VSX1JFR18yCTB4NDQJLyogMzIgYml0IAlPdXIgUmVnaXN0ZXIgMiAqLwotCS8qIFBvd2VyIE1hbmFnZW1lbnQgUmVnaW9uICovCi0jZGVmaW5lIFBDSV9QTV9DQVBfSUQJMHg0OAkvKiAgOCBiaXQgCVBvd2VyIE1hbmFnZW1lbnQgQ2FwLiBJRCAqLwotI2RlZmluZSBQQ0lfUE1fTklURU0JMHg0OQkvKiAgOCBiaXQgCU5leHQgSXRlbSBQdHIgKi8KLSNkZWZpbmUgUENJX1BNX0NBUF9SRUcJMHg0YQkvKiAxNiBiaXQgCVBvd2VyIE1hbmFnZW1lbnQgQ2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIFBDSV9QTV9DVExfU1RTCTB4NGMJLyogMTYgYml0IAlQb3dlciBNYW5hZy4gQ29udHJvbC9TdGF0dXMgKi8KLQkvKiBCeXRlIDB4NGU6CXJlc2VydmVkICovCi0jZGVmaW5lIFBDSV9QTV9EQVRfUkVHCTB4NGYJLyogIDggYml0IAlQb3dlciBNYW5hZy4gRGF0YSBSZWdpc3RlciAqLwotCS8qIFZQRCBSZWdpb24gKi8KLSNkZWZpbmUgUENJX1ZQRF9DQVBfSUQJMHg1MAkvKiAgOCBiaXQgCVZQRCBDYXAuIElEICovCi0jZGVmaW5lIFBDSV9WUERfTklURU0JMHg1MQkvKiAgOCBiaXQgCU5leHQgSXRlbSBQdHIgKi8KLSNkZWZpbmUgUENJX1ZQRF9BRFJfUkVHCTB4NTIJLyogMTYgYml0IAlWUEQgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZSBQQ0lfVlBEX0RBVF9SRUcJMHg1NAkvKiAzMiBiaXQgCVZQRCBEYXRhIFJlZ2lzdGVyICovCi0JLyogQnl0ZSAweDU4Li4weDU5OglyZXNlcnZlZCAqLwotI2RlZmluZSBQQ0lfU0VSX0xEX0NUUkwJMHg1YQkvKiAxNiBiaXQgCVNFRVBST00gTG9hZGVyIEN0cmwgKFlVS09OIG9ubHkpICovCi0JLyogQnl0ZSAweDVjLi4weGZmOglyZXNlcnZlZCAqLwotCi0vKgotICogSTJDIEFkZHJlc3MgKFBDSSBDb25maWcpCi0gKgotICogTm90ZTogVGhlIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvcnMgYXJlIHJlbG9jYXRlZCBvbiBhIGRpZmZlcmVudAotICoJIEkyQyBidXMuCi0gKi8KLSNkZWZpbmUgSTJDX0FERFJfVlBECTB4YTAJLyogSTJDIGFkZHJlc3MgZm9yIHRoZSBWUEQgRUVQUk9NICovCi0KLS8qCi0gKiBEZWZpbmUgQml0cyBhbmQgVmFsdWVzIG9mIHRoZSByZWdpc3RlcnMKLSAqLwotLyoJUENJX0NPTU1BTkQJMTYgYml0CUNvbW1hbmQgKi8KLQkJCQkJCQkJLyogQml0IDE1Li4xMToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUENJX0lOVF9ESVMJCUJJVF8xMFMJCS8qIEludGVycnVwdCBJTlR4IyBkaXNhYmxlIChQQ0kgMi4zKSAqLwotI2RlZmluZSBQQ0lfRkJURU4JCUJJVF85UwkJLyogRmFzdCBCYWNrLVRvLUJhY2sgZW5hYmxlICovCi0jZGVmaW5lIFBDSV9TRVJSRU4JCUJJVF84UwkJLyogU0VSUiBlbmFibGUgKi8KLSNkZWZpbmUgUENJX0FEU1RFUAkJQklUXzdTCQkvKiBBZGRyZXNzIFN0ZXBwaW5nICovCi0jZGVmaW5lIFBDSV9QRVJSRU4JCUJJVF82UwkJLyogUGFyaXR5IFJlcG9ydCBSZXNwb25zZSBlbmFibGUgKi8KLSNkZWZpbmUgUENJX1ZHQV9TTk9PUAlCSVRfNVMJCS8qIFZHQSBwYWxldHRlIHNub29wICovCi0jZGVmaW5lIFBDSV9NV0lFTgkJQklUXzRTCQkvKiBNZW1vcnkgd3JpdGUgYW4gaW52IGN5Y2wgZW5hICovCi0jZGVmaW5lIFBDSV9TQ1lDRU4JCUJJVF8zUwkJLyogU3BlY2lhbCBDeWNsZSBlbmFibGUgKi8KLSNkZWZpbmUgUENJX0JNRU4JCUJJVF8yUwkJLyogQnVzIE1hc3RlciBlbmFibGUgKi8KLSNkZWZpbmUgUENJX01FTUVOCQlCSVRfMVMJCS8qIE1lbW9yeSBTcGFjZSBBY2Nlc3MgZW5hYmxlICovCi0jZGVmaW5lIFBDSV9JT0VOCQlCSVRfMFMJCS8qIEkvTyBTcGFjZSBBY2Nlc3MgZW5hYmxlICovCi0KLSNkZWZpbmUgUENJX0NPTU1BTkRfVkFMCShQQ0lfRkJURU4gfCBQQ0lfU0VSUkVOIHwgUENJX1BFUlJFTiB8IFBDSV9NV0lFTiB8XAotCQkJCQkJIFBDSV9CTUVOIHwgUENJX01FTUVOIHwgUENJX0lPRU4pCi0KLS8qCVBDSV9TVEFUVVMJMTYgYml0CVN0YXR1cyAqLwotI2RlZmluZSBQQ0lfUEVSUgkJQklUXzE1UwkJLyogUGFyaXR5IEVycm9yICovCi0jZGVmaW5lIFBDSV9TRVJSCQlCSVRfMTRTCQkvKiBTaWduYWxlZCBTRVJSICovCi0jZGVmaW5lIFBDSV9STUFCT1JUCQlCSVRfMTNTCQkvKiBSZWNlaXZlZCBNYXN0ZXIgQWJvcnQgKi8KLSNkZWZpbmUgUENJX1JUQUJPUlQJCUJJVF8xMlMJCS8qIFJlY2VpdmVkIFRhcmdldCBBYm9ydCAqLwotCQkJCQkJCQkvKiBCaXQgMTE6CXJlc2VydmVkICovCi0jZGVmaW5lIFBDSV9ERVZTRUwJCSgzPDw5KQkJLyogQml0IDEwLi4gOToJREVWU0VMIFRpbWluZyAqLwotI2RlZmluZSBQQ0lfREVWX0ZBU1QJKDA8PDkpCQkvKgkJZmFzdCAqLwotI2RlZmluZSBQQ0lfREVWX01FRElVTQkoMTw8OSkJCS8qCQltZWRpdW0gKi8KLSNkZWZpbmUgUENJX0RFVl9TTE9XCSgyPDw5KQkJLyoJCXNsb3cgKi8KLSNkZWZpbmUgUENJX0RBVEFQRVJSCUJJVF84UwkJLyogREFUQSBQYXJpdHkgZXJyb3IgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgUENJX0ZCMkJDQVAJCUJJVF83UwkJLyogRmFzdCBCYWNrLXRvLUJhY2sgQ2FwYWJpbGl0eSAqLwotI2RlZmluZSBQQ0lfVURGCQkJQklUXzZTCQkvKiBVc2VyIERlZmluZWQgRmVhdHVyZXMgKi8KLSNkZWZpbmUgUENJXzY2TUhaQ0FQCUJJVF81UwkJLyogNjYgTUh6IFBDSSBidXMgY2xvY2sgY2FwYWJsZSAqLwotI2RlZmluZSBQQ0lfTkVXQ0FQCQlCSVRfNFMJCS8qIE5ldyBjYXAuIGxpc3QgaW1wbGVtZW50ZWQgKi8KLSNkZWZpbmUgUENJX0lOVF9TVEFUCUJJVF8zUwkJLyogSW50ZXJydXB0IElOVHgjIFN0YXR1cyAoUENJIDIuMykgKi8KLQkJCQkJCQkJLyogQml0ICAyLi4gMDoJcmVzZXJ2ZWQgKi8KLQotI2RlZmluZSBQQ0lfRVJSQklUUwkoUENJX1BFUlIgfCBQQ0lfU0VSUiB8IFBDSV9STUFCT1JUIHwgUENJX1JUQUJPUlQgfFwKLQkJCVBDSV9EQVRBUEVSUikKLQotLyoJUENJX0NMQVNTX0NPREUJMjQgYml0CUNsYXNzIENvZGUgKi8KLS8qCUJ5dGUgMjoJCUJhc2UgQ2xhc3MJCSgwMikgKi8KLS8qCUJ5dGUgMToJCVN1YkNsYXNzCQkoMDApICovCi0vKglCeXRlIDA6CQlQcm9ncmFtbWluZyBJbnRlcmZhY2UJKDAwKSAqLwotCi0vKglQQ0lfQ0FDSEVfTFNaCTggYml0CUNhY2hlIExpbmUgU2l6ZSAqLwotLyoJUG9zc2libGUgdmFsdWVzOiAwLDIsNCw4LDE2LDMyLDY0LDEyOAkqLwotCi0vKglQQ0lfSEVBREVSX1QJOCBiaXQJSGVhZGVyIFR5cGUgKi8KLSNkZWZpbmUgUENJX0hEX01GX0RFVglCSVRfN1MJLyogMD0gc2luZ2xlLCAxPSBtdWx0aS1mdW5jIGRldiAqLwotI2RlZmluZSBQQ0lfSERfVFlQRQkJMHg3ZgkvKiBCaXQgNi4uMDoJSGVhZGVyIExheW91dCAwPSBub3JtYWwgKi8KLQotLyoJUENJX0JJU1QJOCBiaXQJQnVpbHQtaW4gc2VsZnRlc3QgKi8KLS8qCUJ1aWx0LWluIFNlbGYgdGVzdCBub3Qgc3VwcG9ydGVkIChvcHRpb25hbCkgKi8KLQotLyoJUENJX0JBU0VfMVNUCTMyIGJpdAkxc3QgQmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFBDSV9NRU1TSVpFCQkweDQwMDBMCQkvKiB1c2UgMTYga0IgTWVtb3J5IEJhc2UgKi8KLSNkZWZpbmUgUENJX01FTUJBU0VfTVNLIDB4ZmZmZmMwMDBMCS8qIEJpdCAzMS4uMTQ6CU1lbW9yeSBCYXNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgUENJX01FTVNJWkVfTVNLIDB4MDAwMDNmZjBMCS8qIEJpdCAxMy4uIDQ6CU1lbW9yeSBTaXplIFJlcS4gKi8KLSNkZWZpbmUgUENJX1BSRUZFTgkJQklUXzMJCS8qIFByZWZldGNoYWJsZSAqLwotI2RlZmluZSBQQ0lfTUVNX1RZUAkJKDNMPDwyKQkJLyogQml0CTIuLiAxOglNZW1vcnkgVHlwZSAqLwotI2RlZmluZSBQQ0lfTUVNMzJCSVQJKDBMPDwxKQkJLyogQmFzZSBhZGRyIGFueXdoZXJlIGluIDMyIEJpdCByYW5nZSAqLwotI2RlZmluZSBQQ0lfTUVNMU0JCSgxTDw8MSkJCS8qIEJhc2UgYWRkciBiZWxvdyAxIE1lZ2FCeXRlICovCi0jZGVmaW5lIFBDSV9NRU02NEJJVAkoMkw8PDEpCQkvKiBCYXNlIGFkZHIgYW55d2hlcmUgaW4gNjQgQml0IHJhbmdlICovCi0jZGVmaW5lIFBDSV9NRU1TUEFDRQlCSVRfMAkJLyogTWVtb3J5IFNwYWNlIEluZGljYXRvciAqLwotCi0vKglQQ0lfQkFTRV8yTkQJMzIgYml0CTJuZCBCYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgUENJX0lPQkFTRQkJMHhmZmZmZmYwMEwJLyogQml0IDMxLi4gODoJSS9PIEJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBQQ0lfSU9TSVpFCQkweDAwMDAwMGZjTAkvKiBCaXQJNy4uIDI6CUkvTyBTaXplIFJlcXVpcmVtZW50cyAqLwotCQkJCQkJCQkJLyogQml0CTE6CXJlc2VydmVkICovCi0jZGVmaW5lIFBDSV9JT1NQQUNFCQlCSVRfMAkJLyogSS9PIFNwYWNlIEluZGljYXRvciAqLwotCi0vKglQQ0lfQkFTRV9ST00JMzIgYml0CUV4cGFuc2lvbiBST00gQmFzZSBBZGRyZXNzICovCi0jZGVmaW5lIFBDSV9ST01CQVNFX01TSwkweGZmZmUwMDAwTAkvKiBCaXQgMzEuLjE3OglST00gQmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFBDSV9ST01CQVNFX1NJWgkoMHgxY0w8PDE0KQkvKiBCaXQgMTYuLjE0OglUcmVhdCBhcyBCYXNlIG9yIFNpemUgKi8KLSNkZWZpbmUgUENJX1JPTVNJWkUJCSgweDM4TDw8MTEpCS8qIEJpdCAxMy4uMTE6CVJPTSBTaXplIFJlcXVpcmVtZW50cyAqLwotCQkJCQkJCQkJLyogQml0IDEwLi4gMToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUENJX1JPTUVOCQlCSVRfMAkJLyogQWRkcmVzcyBEZWNvZGUgZW5hYmxlICovCi0KLS8qIERldmljZSBEZXBlbmRlbnQgUmVnaW9uICovCi0vKglQQ0lfT1VSX1JFR18xCQkzMiBiaXQJT3VyIFJlZ2lzdGVyIDEgKi8KLQkJCQkJCQkJCS8qIEJpdCAzMS4uMjk6CXJlc2VydmVkICovCi0jZGVmaW5lIFBDSV9QSFlfQ09NQQlCSVRfMjgJCS8qIFNldCBQSFkgdG8gQ29tYSBNb2RlIChZVUtPTiBvbmx5KSAqLwotI2RlZmluZSBQQ0lfVEVTVF9DQUwJQklUXzI3CQkvKiBUZXN0IFBDSSBidWZmZXIgY2FsaWIuIChZVUtPTiBvbmx5KSAqLwotI2RlZmluZSBQQ0lfRU5fQ0FMCQlCSVRfMjYJCS8qIEVuYWJsZSBQQ0kgYnVmZmVyIGNhbGliLiAoWVVLT04gb25seSkgKi8KLSNkZWZpbmUgUENJX1ZJTwkJCUJJVF8yNQkJLyogUENJIEkvTyBWb2x0YWdlLCAwID0gMy4zViwgMSA9IDVWICovCi0jZGVmaW5lIFBDSV9ESVNfQk9PVAlCSVRfMjQJCS8qIERpc2FibGUgQk9PVCB2aWEgUk9NICovCi0jZGVmaW5lIFBDSV9FTl9JTwkJQklUXzIzCQkvKiBNYXBwaW5nIHRvIEkvTyBzcGFjZSAqLwotI2RlZmluZSBQQ0lfRU5fRlBST00JQklUXzIyCQkvKiBFbmFibGUgRkxBU0ggbWFwcGluZyB0byBtZW1vcnkgKi8KLQkJCQkJCQkJCS8qCQkxID0gTWFwIEZsYXNoIHRvIG1lbW9yeSAqLwotCQkJCQkJCQkJLyoJCTAgPSBEaXNhYmxlIGFkZHIuIGRlYyAqLwotI2RlZmluZSBQQ0lfUEFHRVNJWkUJKDNMPDwyMCkJLyogQml0IDIxLi4yMDoJRkxBU0ggUGFnZSBTaXplCSovCi0jZGVmaW5lIFBDSV9QQUdFXzE2CQkoMEw8PDIwKQkvKgkJMTYgayBwYWdlcwkqLwotI2RlZmluZSBQQ0lfUEFHRV8zMksJKDFMPDwyMCkJLyoJCTMyIGsgcGFnZXMJKi8KLSNkZWZpbmUgUENJX1BBR0VfNjRLCSgyTDw8MjApCS8qCQk2NCBrIHBhZ2VzCSovCi0jZGVmaW5lIFBDSV9QQUdFXzEyOEsJKDNMPDwyMCkJLyoJCTEyOCBrIHBhZ2VzCSovCi0JCQkJCQkJCQkvKiBCaXQgMTk6CXJlc2VydmVkCSovCi0jZGVmaW5lIFBDSV9QQUdFUkVHCQkoN0w8PDE2KQkvKiBCaXQgMTguLjE2OglQYWdlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFBDSV9OT1RBUgkJQklUXzE1CQkvKiBObyB0dXJuYXJvdW5kIGN5Y2xlICovCi0jZGVmaW5lIFBDSV9GT1JDRV9CRQlCSVRfMTQJCS8qIEFzc2VydCBhbGwgQkVzIG9uIE1SICovCi0jZGVmaW5lIFBDSV9ESVNfTVJMCQlCSVRfMTMJCS8qIERpc2FibGUgTWVtIFJlYWQgTGluZSAqLwotI2RlZmluZSBQQ0lfRElTX01STQkJQklUXzEyCQkvKiBEaXNhYmxlIE1lbSBSZWFkIE11bHRpcGxlICovCi0jZGVmaW5lIFBDSV9ESVNfTVdJCQlCSVRfMTEJCS8qIERpc2FibGUgTWVtIFdyaXRlICYgSW52YWxpZGF0ZSAqLwotI2RlZmluZSBQQ0lfRElTQ19DTFMJQklUXzEwCQkvKiBEaXNjOiBjYWNoZUxzeiBib3VuZCAqLwotI2RlZmluZSBQQ0lfQlVSU1RfRElTCUJJVF85CQkvKiBCdXJzdCBEaXNhYmxlICovCi0jZGVmaW5lIFBDSV9ESVNfUENJX0NMSwlCSVRfOAkJLyogRGlzYWJsZSBQQ0kgY2xvY2sgZHJpdmluZyAqLwotI2RlZmluZSBQQ0lfU0tFV19EQVMJKDB4Zkw8PDQpCS8qIEJpdAk3Li4gNDoJU2tldyBDdHJsLCBEQVMgRXh0ICovCi0jZGVmaW5lIFBDSV9TS0VXX0JBU0UJMHhmTAkJLyogQml0CTMuLiAwOglTa2V3IEN0cmwsIEJhc2UJKi8KLQotCi0vKglQQ0lfT1VSX1JFR18yCQkzMiBiaXQJT3VyIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgUENJX1ZQRF9XUl9USFIJKDB4ZmZMPDwyNCkJLyogQml0IDMxLi4yNDoJVlBEIFdyaXRlIFRocmVzaG9sZCAqLwotI2RlZmluZSBQQ0lfREVWX1NFTAkJKDB4N2ZMPDwxNykJLyogQml0IDIzLi4xNzoJRUVQUk9NIERldmljZSBTZWxlY3QgKi8KLSNkZWZpbmUgUENJX1ZQRF9ST01fU1oJKDdMPDwxNCkJLyogQml0IDE2Li4xNDoJVlBEIFJPTSBTaXplCSovCi0JCQkJCQkJCQkvKiBCaXQgMTMuLjEyOglyZXNlcnZlZAkqLwotI2RlZmluZSBQQ0lfUEFUQ0hfRElSCSgweGZMPDw4KQkvKiBCaXQgMTEuLiA4OglFeHQgUGF0Y2hlcyBkaXIgMy4uMCAqLwotI2RlZmluZSBQQ0lfUEFUQ0hfRElSXzMJQklUXzExCi0jZGVmaW5lIFBDSV9QQVRDSF9ESVJfMglCSVRfMTAKLSNkZWZpbmUgUENJX1BBVENIX0RJUl8xCUJJVF85Ci0jZGVmaW5lIFBDSV9QQVRDSF9ESVJfMAlCSVRfOAotI2RlZmluZSBQQ0lfRVhUX1BBVENIUwkoMHhmTDw8NCkJLyogQml0CTcuLiA0OglFeHRlbmRlZCBQYXRjaGVzIDMuLjAgKi8KLSNkZWZpbmUgUENJX0VYVF9QQVRDSF8zCUJJVF83Ci0jZGVmaW5lIFBDSV9FWFRfUEFUQ0hfMglCSVRfNgotI2RlZmluZSBQQ0lfRVhUX1BBVENIXzEJQklUXzUKLSNkZWZpbmUgUENJX0VYVF9QQVRDSF8wCUJJVF80Ci0jZGVmaW5lIFBDSV9FTl9EVU1NWV9SRAlCSVRfMwkJLyogRW5hYmxlIER1bW15IFJlYWQgKi8KLSNkZWZpbmUgUENJX1JFVl9ERVNDCUJJVF8yCQkvKiBSZXZlcnNlIERlc2MuIEJ5dGVzICovCi0JCQkJCQkJCQkvKiBCaXQJMToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUENJX1VTRURBVEE2NAlCSVRfMAkJLyogVXNlIDY0Qml0IERhdGEgYnVzIGV4dCAqLwotCi0KLS8qIFBvd2VyIE1hbmFnZW1lbnQgUmVnaW9uICovCi0vKglQQ0lfUE1fQ0FQX1JFRwkJMTYgYml0CVBvd2VyIE1hbmFnZW1lbnQgQ2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIFBDSV9QTUVfU1VQX01TSwkoMHgxZjw8MTEpCS8qIEJpdCAxNS4uMTE6CVBNIEV2ZW50IFN1cHBvcnQgTWFzayAqLwotI2RlZmluZSBQQ0lfUE1FX0QzQ19TVVAJQklUXzE1UwkJLyogUE1FIGZyb20gRDNjb2xkIFN1cHBvcnQgKGlmIFZhdXgpICovCi0jZGVmaW5lIFBDSV9QTUVfRDNIX1NVUAlCSVRfMTRTCQkvKiBQTUUgZnJvbSBEM2hvdCBTdXBwb3J0ICovCi0jZGVmaW5lIFBDSV9QTUVfRDJfU1VQCUJJVF8xM1MJCS8qIFBNRSBmcm9tIEQyIFN1cHBvcnQgKi8KLSNkZWZpbmUgUENJX1BNRV9EMV9TVVAJQklUXzEyUwkJLyogUE1FIGZyb20gRDEgU3VwcG9ydCAqLwotI2RlZmluZSBQQ0lfUE1FX0QwX1NVUAlCSVRfMTFTCQkvKiBQTUUgZnJvbSBEMCBTdXBwb3J0ICovCi0jZGVmaW5lIFBDSV9QTV9EMl9TVVAJQklUXzEwUwkJLyogRDIgU3VwcG9ydCBpbiAzMyBNSHogbW9kZSAqLwotI2RlZmluZSBQQ0lfUE1fRDFfU1VQCUJJVF85UwkJLyogRDEgU3VwcG9ydCAqLwotCQkJCQkJCQkJLyogQml0CTguLiA2OglyZXNlcnZlZCAqLwotI2RlZmluZSBQQ0lfUE1fRFNJCQlCSVRfNVMJCS8qIERldmljZSBTcGVjaWZpYyBJbml0aWFsaXphdGlvbiAqLwotI2RlZmluZSBQQ0lfUE1fQVBTCQlCSVRfNFMJCS8qIEF1eGlhbGlhcnkgUG93ZXIgU291cmNlICovCi0jZGVmaW5lIFBDSV9QTUVfQ0xPQ0sJQklUXzNTCQkvKiBQTSBFdmVudCBDbG9jayAqLwotI2RlZmluZSBQQ0lfUE1fVkVSX01TSwkJNwkJLyogQml0CTIuLiAwOglQTSBQQ0kgU3BlYy4gdmVyc2lvbiAqLwotCi0vKglQQ0lfUE1fQ1RMX1NUUwkJMTYgYml0CVBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbC9TdGF0dXMgKi8KLSNkZWZpbmUgUENJX1BNRV9TVEFUVVMJQklUXzE1UwkJLyogUE1FIFN0YXR1cyAoWVVLT04gb25seSkgKi8KLSNkZWZpbmUgUENJX1BNX0RBVF9TQ0wJKDM8PDEzKQkJLyogQml0IDE0Li4xMzoJRGF0YSBSZWcuIHNjYWxpbmcgZmFjdG9yICovCi0jZGVmaW5lIFBDSV9QTV9EQVRfU0VMCSgweGY8PDkpCS8qIEJpdCAxMi4uIDk6CVBNIGRhdGEgc2VsZWN0b3IgZmllbGQgKi8KLSNkZWZpbmUgUENJX1BNRV9FTgkJQklUXzhTCQkvKiBFbmFibGUgUE1FIyBnZW5lcmF0aW9uIChZVUtPTiBvbmx5KSAqLwotCQkJCQkJCQkJLyogQml0CTcuLiAyOglyZXNlcnZlZCAqLwotI2RlZmluZSBQQ0lfUE1fU1RBVEVfTVNLCTMJCS8qIEJpdAkxLi4gMDoJUG93ZXIgTWFuYWdlbWVudCBTdGF0ZSAqLwotCi0jZGVmaW5lIFBDSV9QTV9TVEFURV9EMAkJMAkJLyogRDA6CU9wZXJhdGlvbmFsIChkZWZhdWx0KSAqLwotI2RlZmluZSBQQ0lfUE1fU1RBVEVfRDEJCTEJCS8qIEQxOgkoWVVLT04gb25seSkgKi8KLSNkZWZpbmUgUENJX1BNX1NUQVRFX0QyCQkyCQkvKiBEMjoJKFlVS09OIG9ubHkpICovCi0jZGVmaW5lIFBDSV9QTV9TVEFURV9EMyAJMwkJLyogRDM6CUhPVCwgUG93ZXIgRG93biBhbmQgUmVzZXQgKi8KLQotLyogVlBEIFJlZ2lvbiAqLwotLyoJUENJX1ZQRF9BRFJfUkVHCQkxNiBiaXQJVlBEIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUENJX1ZQRF9GTEFHCUJJVF8xNVMJCS8qIHN0YXJ0cyBWUEQgcmQvd3IgY3ljbGUgKi8KLSNkZWZpbmUgUENJX1ZQRF9BRFJfTVNLCTB4N2ZmZkwJCS8qIEJpdCAxNC4uIDA6CVZQRCBhZGRyZXNzIG1hc2sgKi8KLQotLyoJQ29udHJvbCBSZWdpc3RlciBGaWxlIChBZGRyZXNzIE1hcCkgKi8KLQotLyoKLSAqCUJhbmsgMAotICovCi0jZGVmaW5lIEIwX1JBUAkJCTB4MDAwMAkvKiAgOCBiaXQJUmVnaXN0ZXIgQWRkcmVzcyBQb3J0ICovCi0JLyogMHgwMDAxIC0gMHgwMDAzOglyZXNlcnZlZCAqLwotI2RlZmluZSBCMF9DVFNUCQkJMHgwMDA0CS8qIDE2IGJpdAlDb250cm9sL1N0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBCMF9MRUQJCQkweDAwMDYJLyogIDggQml0CUxFRCByZWdpc3RlciAqLwotI2RlZmluZSBCMF9QT1dFUl9DVFJMCTB4MDAwNwkvKiAgOCBCaXQJUG93ZXIgQ29udHJvbCByZWcgKFlVS09OIG9ubHkpICovCi0jZGVmaW5lIEIwX0lTUkMJCQkweDAwMDgJLyogMzIgYml0CUludGVycnVwdCBTb3VyY2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQjBfSU1TSwkJCTB4MDAwYwkvKiAzMiBiaXQJSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQjBfSFdFX0lTUkMJCTB4MDAxMAkvKiAzMiBiaXQJSFcgRXJyb3IgSW50ZXJydXB0IFNyYyBSZWcgKi8KLSNkZWZpbmUgQjBfSFdFX0lNU0sJCTB4MDAxNAkvKiAzMiBiaXQJSFcgRXJyb3IgSW50ZXJydXB0IE1hc2sgUmVnICovCi0jZGVmaW5lIEIwX1NQX0lTUkMJCTB4MDAxOAkvKiAzMiBiaXQJU3BlY2lhbCBJbnRlcnJ1cHQgU291cmNlIFJlZyAqLwotCS8qIDB4MDAxYzoJCXJlc2VydmVkICovCi0KLS8qIEIwIFhNQUMgMSByZWdpc3RlcnMgKEdFTkVTSVMgb25seSkgKi8KLSNkZWZpbmUgQjBfWE0xX0lNU0sJCTB4MDAyMAkvKiAxNiBiaXQgci93CVhNQUMgMSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciovCi0JLyogMHgwMDIyIC0gMHgwMDI3OglyZXNlcnZlZCAqLwotI2RlZmluZSBCMF9YTTFfSVNSQwkJMHgwMDI4CS8qIDE2IGJpdCBybwlYTUFDIDEgSW50ZXJydXB0IFN0YXR1cyBSZWcgKi8KLQkvKiAweDAwMmEgLSAweDAwMmY6CXJlc2VydmVkICovCi0jZGVmaW5lIEIwX1hNMV9QSFlfQUREUiAweDAwMzAJLyogMTYgYml0IHIvdwlYTUFDIDEgUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQkvKiAweDAwMzIgLSAweDAwMzM6CXJlc2VydmVkICovCi0jZGVmaW5lIEIwX1hNMV9QSFlfREFUQSAweDAwMzQJLyogMTYgYml0IHIvdwlYTUFDIDEgUEhZIERhdGEgUmVnaXN0ZXIgKi8KLQkvKiAweDAwMzYgLSAweDAwM2Y6CXJlc2VydmVkICovCi0KLS8qIEIwIFhNQUMgMiByZWdpc3RlcnMgKEdFTkVTSVMgb25seSkgKi8KLSNkZWZpbmUgQjBfWE0yX0lNU0sJCTB4MDA0MAkvKiAxNiBiaXQgci93CVhNQUMgMiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciovCi0JLyogMHgwMDQyIC0gMHgwMDQ3OglyZXNlcnZlZCAqLwotI2RlZmluZSBCMF9YTTJfSVNSQwkJMHgwMDQ4CS8qIDE2IGJpdCBybwlYTUFDIDIgSW50ZXJydXB0IFN0YXR1cyBSZWcgKi8KLQkvKiAweDAwNGEgLSAweDAwNGY6CXJlc2VydmVkICovCi0jZGVmaW5lIEIwX1hNMl9QSFlfQUREUiAweDAwNTAJLyogMTYgYml0IHIvdwlYTUFDIDIgUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQkvKiAweDAwNTIgLSAweDAwNTM6CXJlc2VydmVkICovCi0jZGVmaW5lIEIwX1hNMl9QSFlfREFUQSAweDAwNTQJLyogMTYgYml0IHIvdwlYTUFDIDIgUEhZIERhdGEgUmVnaXN0ZXIgKi8KLQkvKiAweDAwNTYgLSAweDAwNWY6CXJlc2VydmVkICovCi0KLS8qIEJNVSBDb250cm9sIFN0YXR1cyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgQjBfUjFfQ1NSCQkweDAwNjAJLyogMzIgYml0CUJNVSBDdHJsL1N0YXQgUnggUXVldWUgMSAqLwotI2RlZmluZSBCMF9SMl9DU1IJCTB4MDA2NAkvKiAzMiBiaXQJQk1VIEN0cmwvU3RhdCBSeCBRdWV1ZSAyICovCi0jZGVmaW5lIEIwX1hTMV9DU1IJCTB4MDA2OAkvKiAzMiBiaXQJQk1VIEN0cmwvU3RhdCBTeW5jIFR4IFF1ZXVlIDEgKi8KLSNkZWZpbmUgQjBfWEExX0NTUgkJMHgwMDZjCS8qIDMyIGJpdAlCTVUgQ3RybC9TdGF0IEFzeW5jIFR4IFF1ZXVlIDEqLwotI2RlZmluZSBCMF9YUzJfQ1NSCQkweDAwNzAJLyogMzIgYml0CUJNVSBDdHJsL1N0YXQgU3luYyBUeCBRdWV1ZSAyICovCi0jZGVmaW5lIEIwX1hBMl9DU1IJCTB4MDA3NAkvKiAzMiBiaXQJQk1VIEN0cmwvU3RhdCBBc3luYyBUeCBRdWV1ZSAyKi8KLQkvKiAweDAwNzggLSAweDAwN2Y6CXJlc2VydmVkICovCi0KLS8qCi0gKglCYW5rIDEKLSAqCS0gY29tcGxldGVseSBlbXB0eSAodGhpcyBpcyB0aGUgUkFQIEJsb2NrIHdpbmRvdykKLSAqCU5vdGU6IGlmIFJBUCA9IDEgdGhpcyBwYWdlIGlzIHJlc2VydmVkCi0gKi8KLQotLyoKLSAqCUJhbmsgMgotICovCi0vKiBOQSByZWcgPSA0OCBiaXQgTmV0d29yayBBZGRyZXNzIFJlZ2lzdGVyLCAzeDE2IG9yIDh4OCBiaXQgcmVhZGFibGUgKi8KLSNkZWZpbmUgQjJfTUFDXzEJCTB4MDEwMAkvKiBOQSByZWcJIE1BQyBBZGRyZXNzIDEgKi8KLQkvKiAweDAxMDYgLSAweDAxMDc6CXJlc2VydmVkICovCi0jZGVmaW5lIEIyX01BQ18yCQkweDAxMDgJLyogTkEgcmVnCSBNQUMgQWRkcmVzcyAyICovCi0JLyogMHgwMTBlIC0gMHgwMTBmOglyZXNlcnZlZCAqLwotI2RlZmluZSBCMl9NQUNfMwkJMHgwMTEwCS8qIE5BIHJlZwkgTUFDIEFkZHJlc3MgMyAqLwotCS8qIDB4MDExNiAtIDB4MDExNzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgQjJfQ09OTl9UWVAJCTB4MDExOAkvKiAgOCBiaXQJQ29ubmVjdG9yIHR5cGUgKi8KLSNkZWZpbmUgQjJfUE1EX1RZUAkJMHgwMTE5CS8qICA4IGJpdAlQTUQgdHlwZSAqLwotI2RlZmluZSBCMl9NQUNfQ0ZHCQkweDAxMWEJLyogIDggYml0CU1BQyBDb25maWd1cmF0aW9uIC8gQ2hpcCBSZXZpc2lvbiAqLwotI2RlZmluZSBCMl9DSElQX0lECQkweDAxMWIJLyogIDggYml0IAlDaGlwIElkZW50aWZpY2F0aW9uIE51bWJlciAqLwotCS8qIEVwcm9tIHJlZ2lzdGVycyBhcmUgY3VycmVudGx5IG9mIG5vIHVzZSAqLwotI2RlZmluZSBCMl9FXzAJCQkweDAxMWMJLyogIDggYml0CUVQUk9NIEJ5dGUgMCAoZXh0LiBTUkFNIHNpemUgKi8KLSNkZWZpbmUgQjJfRV8xCQkJMHgwMTFkCS8qICA4IGJpdAlFUFJPTSBCeXRlIDEgKFBIWSB0eXBlKSAqLwotI2RlZmluZSBCMl9FXzIJCQkweDAxMWUJLyogIDggYml0CUVQUk9NIEJ5dGUgMiAqLwotI2RlZmluZSBCMl9FXzMJCQkweDAxMWYJLyogIDggYml0CUVQUk9NIEJ5dGUgMyAqLwotI2RlZmluZSBCMl9GQVIJCQkweDAxMjAJLyogMzIgYml0CUZsYXNoLVByb20gQWRkciBSZWcvQ250ICovCi0jZGVmaW5lIEIyX0ZEUAkJCTB4MDEyNAkvKiAgOCBiaXQJRmxhc2gtUHJvbSBEYXRhIFBvcnQgKi8KLQkvKiAweDAxMjUgLSAweDAxMjc6CXJlc2VydmVkICovCi0jZGVmaW5lIEIyX0xEX0NUUkwJCTB4MDEyOAkvKiAgOCBiaXQJRVBST00gbG9hZGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQjJfTERfVEVTVAkJMHgwMTI5CS8qICA4IGJpdAlFUFJPTSBsb2FkZXIgdGVzdCByZWdpc3RlciAqLwotCS8qIDB4MDEyYSAtIDB4MDEyZjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgQjJfVElfSU5JCQkweDAxMzAJLyogMzIgYml0CVRpbWVyIEluaXQgVmFsdWUgKi8KLSNkZWZpbmUgQjJfVElfVkFMCQkweDAxMzQJLyogMzIgYml0CVRpbWVyIFZhbHVlICovCi0jZGVmaW5lIEIyX1RJX0NUUkwJCTB4MDEzOAkvKiAgOCBiaXQJVGltZXIgQ29udHJvbCAqLwotI2RlZmluZSBCMl9USV9URVNUCQkweDAxMzkJLyogIDggQml0CVRpbWVyIFRlc3QgKi8KLQkvKiAweDAxM2EgLSAweDAxM2Y6CXJlc2VydmVkICovCi0jZGVmaW5lIEIyX0lSUU1fSU5JCQkweDAxNDAJLyogMzIgYml0CUlSUSBNb2RlcmF0aW9uIFRpbWVyIEluaXQgUmVnLiovCi0jZGVmaW5lIEIyX0lSUU1fVkFMCQkweDAxNDQJLyogMzIgYml0CUlSUSBNb2RlcmF0aW9uIFRpbWVyIFZhbHVlICovCi0jZGVmaW5lIEIyX0lSUU1fQ1RSTAkweDAxNDgJLyogIDggYml0CUlSUSBNb2RlcmF0aW9uIFRpbWVyIENvbnRyb2wgKi8KLSNkZWZpbmUgQjJfSVJRTV9URVNUCTB4MDE0OQkvKiAgOCBiaXQJSVJRIE1vZGVyYXRpb24gVGltZXIgVGVzdCAqLwotI2RlZmluZSBCMl9JUlFNX01TSyAJMHgwMTRjCS8qIDMyIGJpdAlJUlEgTW9kZXJhdGlvbiBNYXNrICovCi0jZGVmaW5lIEIyX0lSUU1fSFdFX01TSyAweDAxNTAJLyogMzIgYml0CUlSUSBNb2RlcmF0aW9uIEhXIEVycm9yIE1hc2sgKi8KLQkvKiAweDAxNTQgLSAweDAxNTc6CXJlc2VydmVkICovCi0jZGVmaW5lIEIyX1RTVF9DVFJMMQkweDAxNTgJLyogIDggYml0CVRlc3QgQ29udHJvbCBSZWdpc3RlciAxICovCi0jZGVmaW5lIEIyX1RTVF9DVFJMMgkweDAxNTkJLyogIDggYml0CVRlc3QgQ29udHJvbCBSZWdpc3RlciAyICovCi0JLyogMHgwMTVhIC0gMHgwMTViOglyZXNlcnZlZCAqLwotI2RlZmluZSBCMl9HUF9JTwkJMHgwMTVjCS8qIDMyIGJpdAlHZW5lcmFsIFB1cnBvc2UgSS9PIFJlZ2lzdGVyICovCi0jZGVmaW5lIEIyX0kyQ19DVFJMCQkweDAxNjAJLyogMzIgYml0CUkyQyBIVyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIEIyX0kyQ19EQVRBCQkweDAxNjQJLyogMzIgYml0CUkyQyBIVyBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lIEIyX0kyQ19JUlEJCTB4MDE2OAkvKiAzMiBiaXQJSTJDIEhXIElSUSBSZWdpc3RlciAqLwotI2RlZmluZSBCMl9JMkNfU1cJCTB4MDE2YwkvKiAzMiBiaXQJSTJDIFNXIFBvcnQgUmVnaXN0ZXIgKi8KLQotLyogQmxpbmsgU291cmNlIENvdW50ZXIgKEdFTkVTSVMgb25seSkgKi8KLSNkZWZpbmUgQjJfQlNDX0lOSQkJMHgwMTcwCS8qIDMyIGJpdAlCbGluayBTb3VyY2UgQ291bnRlciBJbml0IFZhbCAqLwotI2RlZmluZSBCMl9CU0NfVkFMCQkweDAxNzQJLyogMzIgYml0CUJsaW5rIFNvdXJjZSBDb3VudGVyIFZhbHVlICovCi0jZGVmaW5lIEIyX0JTQ19DVFJMCQkweDAxNzgJLyogIDggYml0CUJsaW5rIFNvdXJjZSBDb3VudGVyIENvbnRyb2wgKi8KLSNkZWZpbmUgQjJfQlNDX1NUQVQJCTB4MDE3OQkvKiAgOCBiaXQJQmxpbmsgU291cmNlIENvdW50ZXIgU3RhdHVzICovCi0jZGVmaW5lIEIyX0JTQ19UU1QJCTB4MDE3YQkvKiAxNiBiaXQJQmxpbmsgU291cmNlIENvdW50ZXIgVGVzdCBSZWcgKi8KLQkvKiAweDAxN2MgLSAweDAxN2Y6CXJlc2VydmVkICovCi0KLS8qCi0gKglCYW5rIDMKLSAqLwotLyogUkFNIFJhbmRvbSBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgQjNfUkFNX0FERFIJCTB4MDE4MAkvKiAzMiBiaXQJUkFNIEFkZHJlc3MsIHRvIHJlYWQgb3Igd3JpdGUgKi8KLSNkZWZpbmUgQjNfUkFNX0RBVEFfTE8JMHgwMTg0CS8qIDMyIGJpdAlSQU0gRGF0YSBXb3JkIChsb3cgZFdvcmQpICovCi0jZGVmaW5lIEIzX1JBTV9EQVRBX0hJCTB4MDE4OAkvKiAzMiBiaXQJUkFNIERhdGEgV29yZCAoaGlnaCBkV29yZCkgKi8KLQkvKiAweDAxOGMgLSAweDAxOGY6CXJlc2VydmVkICovCi0KLS8qIFJBTSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCi0vKgotICogVGhlIEhXLVNwZWMuIGNhbGxzIHRoaXMgcmVnaXN0ZXJzIFRpbWVvdXQgVmFsdWUgMC4uMTEuIEJ1dCB0aGlzIG5hbWVzIGFyZQotICogbm90IHVzYWJsZSBpbiBTVy4gUGxlYXNlIG5vdGljZSB0aGVzZSBhcmUgTk9UIHJlYWwgdGltZW91dHMsIHRoZXNlIGFyZQotICogdGhlIG51bWJlciBvZiBxV29yZHMgdHJhbnNmZXJyZWQgY29udGludW91c2x5LgotICovCi0jZGVmaW5lIEIzX1JJX1dUT19SMQkweDAxOTAJLyogIDggYml0CVdSIFRpbWVvdXQgUXVldWUgUjEJCShUTzApICovCi0jZGVmaW5lIEIzX1JJX1dUT19YQTEJMHgwMTkxCS8qICA4IGJpdAlXUiBUaW1lb3V0IFF1ZXVlIFhBMQkoVE8xKSAqLwotI2RlZmluZSBCM19SSV9XVE9fWFMxCTB4MDE5MgkvKiAgOCBiaXQJV1IgVGltZW91dCBRdWV1ZSBYUzEJKFRPMikgKi8KLSNkZWZpbmUgQjNfUklfUlRPX1IxCTB4MDE5MwkvKiAgOCBiaXQJUkQgVGltZW91dCBRdWV1ZSBSMQkJKFRPMykgKi8KLSNkZWZpbmUgQjNfUklfUlRPX1hBMQkweDAxOTQJLyogIDggYml0CVJEIFRpbWVvdXQgUXVldWUgWEExCShUTzQpICovCi0jZGVmaW5lIEIzX1JJX1JUT19YUzEJMHgwMTk1CS8qICA4IGJpdAlSRCBUaW1lb3V0IFF1ZXVlIFhTMQkoVE81KSAqLwotI2RlZmluZSBCM19SSV9XVE9fUjIJMHgwMTk2CS8qICA4IGJpdAlXUiBUaW1lb3V0IFF1ZXVlIFIyCQkoVE82KSAqLwotI2RlZmluZSBCM19SSV9XVE9fWEEyCTB4MDE5NwkvKiAgOCBiaXQJV1IgVGltZW91dCBRdWV1ZSBYQTIJKFRPNykgKi8KLSNkZWZpbmUgQjNfUklfV1RPX1hTMgkweDAxOTgJLyogIDggYml0CVdSIFRpbWVvdXQgUXVldWUgWFMyCShUTzgpICovCi0jZGVmaW5lIEIzX1JJX1JUT19SMgkweDAxOTkJLyogIDggYml0CVJEIFRpbWVvdXQgUXVldWUgUjIJCShUTzkpICovCi0jZGVmaW5lIEIzX1JJX1JUT19YQTIJMHgwMTlhCS8qICA4IGJpdAlSRCBUaW1lb3V0IFF1ZXVlIFhBMgkoVE8xMCkqLwotI2RlZmluZSBCM19SSV9SVE9fWFMyCTB4MDE5YgkvKiAgOCBiaXQJUkQgVGltZW91dCBRdWV1ZSBYUzIJKFRPMTEpKi8KLSNkZWZpbmUgQjNfUklfVE9fVkFMCTB4MDE5YwkvKiAgOCBiaXQJQ3VycmVudCBUaW1lb3V0IENvdW50IFZhbCAqLwotCS8qIDB4MDE5ZCAtIDB4MDE5ZjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgQjNfUklfQ1RSTAkJMHgwMWEwCS8qIDE2IGJpdAlSQU0gSW50ZXJmYWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQjNfUklfVEVTVAkJMHgwMWEyCS8qICA4IGJpdAlSQU0gSW50ZXJmYWNlIFRlc3QgUmVnaXN0ZXIgKi8KLQkvKiAweDAxYTMgLSAweDAxYWY6CXJlc2VydmVkICovCi0KLS8qIE1BQyBBcmJpdGVyIFJlZ2lzdGVycyAoR0VORVNJUyBvbmx5KSAqLwotLyogdGhlc2UgYXJlIHRoZSBuby4gb2YgcVdvcmQgdHJhbnNmZXJyZWQgY29udGludW91c2x5IGFuZCBOT1QgcmVhbCB0aW1lb3V0cyAqLwotI2RlZmluZSBCM19NQV9UT0lOSV9SWDEJMHgwMWIwCS8qICA4IGJpdAlUaW1lb3V0IEluaXQgVmFsIFJ4IFBhdGggTUFDIDEgKi8KLSNkZWZpbmUgQjNfTUFfVE9JTklfUlgyCTB4MDFiMQkvKiAgOCBiaXQJVGltZW91dCBJbml0IFZhbCBSeCBQYXRoIE1BQyAyICovCi0jZGVmaW5lIEIzX01BX1RPSU5JX1RYMQkweDAxYjIJLyogIDggYml0CVRpbWVvdXQgSW5pdCBWYWwgVHggUGF0aCBNQUMgMSAqLwotI2RlZmluZSBCM19NQV9UT0lOSV9UWDIJMHgwMWIzCS8qICA4IGJpdAlUaW1lb3V0IEluaXQgVmFsIFR4IFBhdGggTUFDIDIgKi8KLSNkZWZpbmUgQjNfTUFfVE9WQUxfUlgxCTB4MDFiNAkvKiAgOCBiaXQJVGltZW91dCBWYWx1ZSBSeCBQYXRoIE1BQyAxICovCi0jZGVmaW5lIEIzX01BX1RPVkFMX1JYMgkweDAxYjUJLyogIDggYml0CVRpbWVvdXQgVmFsdWUgUnggUGF0aCBNQUMgMSAqLwotI2RlZmluZSBCM19NQV9UT1ZBTF9UWDEJMHgwMWI2CS8qICA4IGJpdAlUaW1lb3V0IFZhbHVlIFR4IFBhdGggTUFDIDIgKi8KLSNkZWZpbmUgQjNfTUFfVE9WQUxfVFgyCTB4MDFiNwkvKiAgOCBiaXQJVGltZW91dCBWYWx1ZSBUeCBQYXRoIE1BQyAyICovCi0jZGVmaW5lIEIzX01BX1RPX0NUUkwJMHgwMWI4CS8qIDE2IGJpdAlNQUMgQXJiaXRlciBUaW1lb3V0IEN0cmwgUmVnICovCi0jZGVmaW5lIEIzX01BX1RPX1RFU1QJMHgwMWJhCS8qIDE2IGJpdAlNQUMgQXJiaXRlciBUaW1lb3V0IFRlc3QgUmVnICovCi0JLyogMHgwMWJjIC0gMHgwMWJmOglyZXNlcnZlZCAqLwotI2RlZmluZSBCM19NQV9SQ0lOSV9SWDEJMHgwMWMwCS8qICA4IGJpdAlSZWNvdmVyeSBJbml0IFZhbCBSeCBQYXRoIE1BQyAxICovCi0jZGVmaW5lIEIzX01BX1JDSU5JX1JYMgkweDAxYzEJLyogIDggYml0CVJlY292ZXJ5IEluaXQgVmFsIFJ4IFBhdGggTUFDIDIgKi8KLSNkZWZpbmUgQjNfTUFfUkNJTklfVFgxCTB4MDFjMgkvKiAgOCBiaXQJUmVjb3ZlcnkgSW5pdCBWYWwgVHggUGF0aCBNQUMgMSAqLwotI2RlZmluZSBCM19NQV9SQ0lOSV9UWDIJMHgwMWMzCS8qICA4IGJpdAlSZWNvdmVyeSBJbml0IFZhbCBUeCBQYXRoIE1BQyAyICovCi0jZGVmaW5lIEIzX01BX1JDVkFMX1JYMQkweDAxYzQJLyogIDggYml0CVJlY292ZXJ5IFZhbHVlIFJ4IFBhdGggTUFDIDEgKi8KLSNkZWZpbmUgQjNfTUFfUkNWQUxfUlgyCTB4MDFjNQkvKiAgOCBiaXQJUmVjb3ZlcnkgVmFsdWUgUnggUGF0aCBNQUMgMSAqLwotI2RlZmluZSBCM19NQV9SQ1ZBTF9UWDEJMHgwMWM2CS8qICA4IGJpdAlSZWNvdmVyeSBWYWx1ZSBUeCBQYXRoIE1BQyAyICovCi0jZGVmaW5lIEIzX01BX1JDVkFMX1RYMgkweDAxYzcJLyogIDggYml0CVJlY292ZXJ5IFZhbHVlIFR4IFBhdGggTUFDIDIgKi8KLSNkZWZpbmUgQjNfTUFfUkNfQ1RSTAkweDAxYzgJLyogMTYgYml0CU1BQyBBcmJpdGVyIFJlY292ZXJ5IEN0cmwgUmVnICovCi0jZGVmaW5lIEIzX01BX1JDX1RFU1QJMHgwMWNhCS8qIDE2IGJpdAlNQUMgQXJiaXRlciBSZWNvdmVyeSBUZXN0IFJlZyAqLwotCS8qIDB4MDFjYyAtIDB4MDFjZjoJcmVzZXJ2ZWQgKi8KLQotLyogUGFja2V0IEFyYml0ZXIgUmVnaXN0ZXJzIChHRU5FU0lTIG9ubHkpICovCi0vKiB0aGVzZSBhcmUgcmVhbCB0aW1lb3V0cyAqLwotI2RlZmluZSBCM19QQV9UT0lOSV9SWDEJMHgwMWQwCS8qIDE2IGJpdAlUaW1lb3V0IEluaXQgVmFsIFJ4IFBhdGggTUFDIDEgKi8KLQkvKiAweDAxZDIgLSAweDAxZDM6CXJlc2VydmVkICovCi0jZGVmaW5lIEIzX1BBX1RPSU5JX1JYMgkweDAxZDQJLyogMTYgYml0CVRpbWVvdXQgSW5pdCBWYWwgUnggUGF0aCBNQUMgMiAqLwotCS8qIDB4MDFkNiAtIDB4MDFkNzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgQjNfUEFfVE9JTklfVFgxCTB4MDFkOAkvKiAxNiBiaXQJVGltZW91dCBJbml0IFZhbCBUeCBQYXRoIE1BQyAxICovCi0JLyogMHgwMWRhIC0gMHgwMWRiOglyZXNlcnZlZCAqLwotI2RlZmluZSBCM19QQV9UT0lOSV9UWDIJMHgwMWRjCS8qIDE2IGJpdAlUaW1lb3V0IEluaXQgVmFsIFR4IFBhdGggTUFDIDIgKi8KLQkvKiAweDAxZGUgLSAweDAxZGY6CXJlc2VydmVkICovCi0jZGVmaW5lIEIzX1BBX1RPVkFMX1JYMQkweDAxZTAJLyogMTYgYml0CVRpbWVvdXQgVmFsIFJ4IFBhdGggTUFDIDEgKi8KLQkvKiAweDAxZTIgLSAweDAxZTM6CXJlc2VydmVkICovCi0jZGVmaW5lIEIzX1BBX1RPVkFMX1JYMgkweDAxZTQJLyogMTYgYml0CVRpbWVvdXQgVmFsIFJ4IFBhdGggTUFDIDIgKi8KLQkvKiAweDAxZTYgLSAweDAxZTc6CXJlc2VydmVkICovCi0jZGVmaW5lIEIzX1BBX1RPVkFMX1RYMQkweDAxZTgJLyogMTYgYml0CVRpbWVvdXQgVmFsIFR4IFBhdGggTUFDIDEgKi8KLQkvKiAweDAxZWEgLSAweDAxZWI6CXJlc2VydmVkICovCi0jZGVmaW5lIEIzX1BBX1RPVkFMX1RYMgkweDAxZWMJLyogMTYgYml0CVRpbWVvdXQgVmFsIFR4IFBhdGggTUFDIDIgKi8KLQkvKiAweDAxZWUgLSAweDAxZWY6CXJlc2VydmVkICovCi0jZGVmaW5lIEIzX1BBX0NUUkwJMHgwMWYwCS8qIDE2IGJpdAlQYWNrZXQgQXJiaXRlciBDdHJsIFJlZ2lzdGVyICovCi0jZGVmaW5lIEIzX1BBX1RFU1QJMHgwMWYyCS8qIDE2IGJpdAlQYWNrZXQgQXJiaXRlciBUZXN0IFJlZ2lzdGVyICovCi0JLyogMHgwMWY0IC0gMHgwMWZmOglyZXNlcnZlZCAqLwotCi0vKgotICoJQmFuayA0IC0gNQotICovCi0vKiBUcmFuc21pdCBBcmJpdGVyIFJlZ2lzdGVycyBNQUMgMSBhbmQgMiwgdXNlIE1SX0FERFIoKSB0byBhY2Nlc3MgKi8KLSNkZWZpbmUgVFhBX0lUSV9JTkkJCTB4MDIwMAkvKiAzMiBiaXQJVHggQXJiIEludGVydmFsIFRpbWVyIEluaXQgVmFsKi8KLSNkZWZpbmUgVFhBX0lUSV9WQUwJCTB4MDIwNAkvKiAzMiBiaXQJVHggQXJiIEludGVydmFsIFRpbWVyIFZhbHVlICovCi0jZGVmaW5lIFRYQV9MSU1fSU5JCQkweDAyMDgJLyogMzIgYml0CVR4IEFyYiBMaW1pdCBDb3VudGVyIEluaXQgVmFsICovCi0jZGVmaW5lIFRYQV9MSU1fVkFMCQkweDAyMGMJLyogMzIgYml0CVR4IEFyYiBMaW1pdCBDb3VudGVyIFZhbHVlICovCi0jZGVmaW5lIFRYQV9DVFJMCQkweDAyMTAJLyogIDggYml0CVR4IEFyYml0ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBUWEFfVEVTVAkJMHgwMjExCS8qICA4IGJpdAlUeCBBcmJpdGVyIFRlc3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVFhBX1NUQVQJCTB4MDIxMgkvKiAgOCBiaXQJVHggQXJiaXRlciBTdGF0dXMgUmVnaXN0ZXIgKi8KLQkvKiAweDAyMTMgLSAweDAyN2Y6CXJlc2VydmVkICovCi0JLyogMHgwMjgwIC0gMHgwMjkyOglNQUMgMiAqLwotCS8qIDB4MDIxMyAtIDB4MDI3ZjoJcmVzZXJ2ZWQgKi8KLQotLyoKLSAqCUJhbmsgNgotICovCi0vKiBFeHRlcm5hbCByZWdpc3RlcnMgKEdFTkVTSVMgb25seSkgKi8KLSNkZWZpbmUgQjZfRVhUX1JFRwkJMHgwMzAwCi0KLS8qCi0gKglCYW5rIDcKLSAqLwotLyogVGhpcyBpcyBhIGNvcHkgb2YgdGhlIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZmlsZSAobG93ZXIgaGFsZikgKi8KLSNkZWZpbmUgQjdfQ0ZHX1NQQwkJMHgwMzgwCi0KLS8qCi0gKglCYW5rIDggLSAxNQotICovCi0vKiBSZWNlaXZlIGFuZCBUcmFuc21pdCBRdWV1ZSBSZWdpc3RlcnMsIHVzZSBRX0FERFIoKSB0byBhY2Nlc3MgKi8KLSNkZWZpbmUgQjhfUV9SRUdTCQkweDA0MDAKLQotLyogUXVldWUgUmVnaXN0ZXIgT2Zmc2V0cywgdXNlIFFfQUREUigpIHRvIGFjY2VzcyAqLwotI2RlZmluZSBRX0QJCTB4MDAJLyogOCozMgliaXQJQ3VycmVudCBEZXNjcmlwdG9yICovCi0jZGVmaW5lIFFfREFfTAkweDIwCS8qIDMyIGJpdAlDdXJyZW50IERlc2NyaXB0b3IgQWRkcmVzcyBMb3cgZFdvcmQgKi8KLSNkZWZpbmUgUV9EQV9ICTB4MjQJLyogMzIgYml0CUN1cnJlbnQgRGVzY3JpcHRvciBBZGRyZXNzIEhpZ2ggZFdvcmQgKi8KLSNkZWZpbmUgUV9BQ19MCTB4MjgJLyogMzIgYml0CUN1cnJlbnQgQWRkcmVzcyBDb3VudGVyIExvdyBkV29yZCAqLwotI2RlZmluZSBRX0FDX0gJMHgyYwkvKiAzMiBiaXQJQ3VycmVudCBBZGRyZXNzIENvdW50ZXIgSGlnaCBkV29yZCAqLwotI2RlZmluZSBRX0JDCTB4MzAJLyogMzIgYml0CUN1cnJlbnQgQnl0ZSBDb3VudGVyICovCi0jZGVmaW5lIFFfQ1NSCTB4MzQJLyogMzIgYml0CUJNVSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBRX0YJCTB4MzgJLyogMzIgYml0CUZsYWcgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUV9UMQkweDNjCS8qIDMyIGJpdAlUZXN0IFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgUV9UMV9UUgkweDNjCS8qICA4IGJpdAlUZXN0IFJlZ2lzdGVyIDEgVHJhbnNmZXIgU00gKi8KLSNkZWZpbmUgUV9UMV9XUgkweDNkCS8qICA4IGJpdAlUZXN0IFJlZ2lzdGVyIDEgV3JpdGUgRGVzY3JpcHRvciBTTSAqLwotI2RlZmluZSBRX1QxX1JECTB4M2UJLyogIDggYml0CVRlc3QgUmVnaXN0ZXIgMSBSZWFkIERlc2NyaXB0b3IgU00gKi8KLSNkZWZpbmUgUV9UMV9TVgkweDNmCS8qICA4IGJpdAlUZXN0IFJlZ2lzdGVyIDEgU3VwZXJ2aXNvciBTTSAqLwotI2RlZmluZSBRX1QyCTB4NDAJLyogMzIgYml0CVRlc3QgUmVnaXN0ZXIgMgkqLwotI2RlZmluZSBRX1QzCTB4NDQJLyogMzIgYml0CVRlc3QgUmVnaXN0ZXIgMwkqLwotCS8qIDB4NDggLSAweDdmOglyZXNlcnZlZCAqLwotCi0vKgotICoJQmFuayAxNiAtIDIzCi0gKi8KLS8qIFJBTSBCdWZmZXIgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEIxNl9SQU1fUkVHUwkweDA4MDAKLQotLyogUkFNIEJ1ZmZlciBSZWdpc3RlciBPZmZzZXRzLCB1c2UgUkJfQUREUigpIHRvIGFjY2VzcyAqLwotI2RlZmluZSBSQl9TVEFSVAkJMHgwMAkvKiAzMiBiaXQJUkFNIEJ1ZmZlciBTdGFydCBBZGRyZXNzICovCi0jZGVmaW5lIFJCX0VORAkJCTB4MDQJLyogMzIgYml0CVJBTSBCdWZmZXIgRW5kIEFkZHJlc3MgKi8KLSNkZWZpbmUgUkJfV1AJCQkweDA4CS8qIDMyIGJpdAlSQU0gQnVmZmVyIFdyaXRlIFBvaW50ZXIgKi8KLSNkZWZpbmUgUkJfUlAJCQkweDBjCS8qIDMyIGJpdAlSQU0gQnVmZmVyIFJlYWQgUG9pbnRlciAqLwotI2RlZmluZSBSQl9SWF9VVFBQCQkweDEwCS8qIDMyIGJpdAlSeCBVcHBlciBUaHJlc2hvbGQsIFBhdXNlIFBhY2sgKi8KLSNkZWZpbmUgUkJfUlhfTFRQUAkJMHgxNAkvKiAzMiBiaXQJUnggTG93ZXIgVGhyZXNob2xkLCBQYXVzZSBQYWNrICovCi0jZGVmaW5lIFJCX1JYX1VUSFAJCTB4MTgJLyogMzIgYml0CVJ4IFVwcGVyIFRocmVzaG9sZCwgSGlnaCBQcmlvICovCi0jZGVmaW5lIFJCX1JYX0xUSFAJCTB4MWMJLyogMzIgYml0CVJ4IExvd2VyIFRocmVzaG9sZCwgSGlnaCBQcmlvICovCi0JLyogMHgxMCAtIDB4MWY6CXJlc2VydmVkIGF0IFR4IFJBTSBCdWZmZXIgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFJCX1BDCQkJMHgyMAkvKiAzMiBiaXQJUkFNIEJ1ZmZlciBQYWNrZXQgQ291bnRlciAqLwotI2RlZmluZSBSQl9MRVYJCQkweDI0CS8qIDMyIGJpdAlSQU0gQnVmZmVyIExldmVsIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJCX0NUUkwJCQkweDI4CS8qICA4IGJpdAlSQU0gQnVmZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUkJfVFNUMQkJCTB4MjkJLyogIDggYml0CVJBTSBCdWZmZXIgVGVzdCBSZWdpc3RlciAxICovCi0jZGVmaW5lIFJCX1RTVDIJCQkweDJBCS8qICA4IGJpdAlSQU0gQnVmZmVyIFRlc3QgUmVnaXN0ZXIgMiAqLwotCS8qIDB4MmMgLSAweDdmOglyZXNlcnZlZCAqLwotCi0vKgotICoJQmFuayAyNAotICovCi0vKgotICogUmVjZWl2ZSBNQUMgRklGTywgUmVjZWl2ZSBMRUQsIGFuZCBMaW5rX1N5bmMgcmVncyAoR0VORVNJUyBvbmx5KQotICogdXNlIE1SX0FERFIoKSB0byBhY2Nlc3MKLSAqLwotI2RlZmluZSBSWF9NRkZfRUEJCTB4MGMwMAkvKiAzMiBiaXQJUmVjZWl2ZSBNQUMgRklGTyBFbmQgQWRkcmVzcyAqLwotI2RlZmluZSBSWF9NRkZfV1AJCTB4MGMwNAkvKiAzMiBiaXQgCVJlY2VpdmUgTUFDIEZJRk8gV3JpdGUgUG9pbnRlciAqLwotCS8qIDB4MGMwOCAtIDB4MGMwYjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUlhfTUZGX1JQCQkweDBjMGMJLyogMzIgYml0CVJlY2VpdmUgTUFDIEZJRk8gUmVhZCBQb2ludGVyICovCi0jZGVmaW5lIFJYX01GRl9QQwkJMHgwYzEwCS8qIDMyIGJpdAlSZWNlaXZlIE1BQyBGSUZPIFBhY2tldCBDbnQgKi8KLSNkZWZpbmUgUlhfTUZGX0xFVgkJMHgwYzE0CS8qIDMyIGJpdAlSZWNlaXZlIE1BQyBGSUZPIExldmVsICovCi0jZGVmaW5lIFJYX01GRl9DVFJMMQkweDBjMTgJLyogMTYgYml0CVJlY2VpdmUgTUFDIEZJRk8gQ29udHJvbCBSZWcgMSovCi0jZGVmaW5lIFJYX01GRl9TVEFUX1RPCTB4MGMxYQkvKiAgOCBiaXQJUmVjZWl2ZSBNQUMgU3RhdHVzIFRpbWVvdXQgKi8KLSNkZWZpbmUgUlhfTUZGX1RJU1RfVE8JMHgwYzFiCS8qICA4IGJpdAlSZWNlaXZlIE1BQyBUaW1lIFN0YW1wIFRpbWVvdXQgKi8KLSNkZWZpbmUgUlhfTUZGX0NUUkwyCTB4MGMxYwkvKiAgOCBiaXQJUmVjZWl2ZSBNQUMgRklGTyBDb250cm9sIFJlZyAyKi8KLSNkZWZpbmUgUlhfTUZGX1RTVDEJCTB4MGMxZAkvKiAgOCBiaXQJUmVjZWl2ZSBNQUMgRklGTyBUZXN0IFJlZyAxICovCi0jZGVmaW5lIFJYX01GRl9UU1QyCQkweDBjMWUJLyogIDggYml0CVJlY2VpdmUgTUFDIEZJRk8gVGVzdCBSZWcgMiAqLwotCS8qIDB4MGMxZjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUlhfTEVEX0lOSQkJMHgwYzIwCS8qIDMyIGJpdAlSZWNlaXZlIExFRCBDbnQgSW5pdCBWYWx1ZSAqLwotI2RlZmluZSBSWF9MRURfVkFMCQkweDBjMjQJLyogMzIgYml0CVJlY2VpdmUgTEVEIENudCBDdXJyZW50IFZhbHVlICovCi0jZGVmaW5lIFJYX0xFRF9DVFJMCQkweDBjMjgJLyogIDggYml0CVJlY2VpdmUgTEVEIENudCBDb250cm9sIFJlZyAqLwotI2RlZmluZSBSWF9MRURfVFNUCQkweDBjMjkJLyogIDggYml0CVJlY2VpdmUgTEVEIENudCBUZXN0IFJlZ2lzdGVyICovCi0JLyogMHgwYzJhIC0gMHgwYzJmOglyZXNlcnZlZCAqLwotI2RlZmluZSBMTktfU1lOQ19JTkkJMHgwYzMwCS8qIDMyIGJpdAlMaW5rIFN5bmMgQ250IEluaXQgVmFsdWUgKi8KLSNkZWZpbmUgTE5LX1NZTkNfVkFMCTB4MGMzNAkvKiAzMiBiaXQJTGluayBTeW5jIENudCBDdXJyZW50IFZhbHVlICovCi0jZGVmaW5lIExOS19TWU5DX0NUUkwJMHgwYzM4CS8qICA4IGJpdAlMaW5rIFN5bmMgQ250IENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTE5LX1NZTkNfVFNUCTB4MGMzOQkvKiAgOCBiaXQJTGluayBTeW5jIENudCBUZXN0IFJlZ2lzdGVyICovCi0JLyogMHgwYzNhIC0gMHgwYzNiOglyZXNlcnZlZCAqLwotI2RlZmluZSBMTktfTEVEX1JFRwkJMHgwYzNjCS8qICA4IGJpdAlMaW5rIExFRCBSZWdpc3RlciAqLwotCS8qIDB4MGMzZCAtIDB4MGMzZjoJcmVzZXJ2ZWQgKi8KLQotLyogUmVjZWl2ZSBHTUFDIEZJRk8gKFlVS09OIG9ubHkpLCB1c2UgTVJfQUREUigpIHRvIGFjY2VzcyAqLwotI2RlZmluZSBSWF9HTUZfRUEJCTB4MGM0MAkvKiAzMiBiaXQJUnggR01BQyBGSUZPIEVuZCBBZGRyZXNzICovCi0jZGVmaW5lIFJYX0dNRl9BRl9USFIJMHgwYzQ0CS8qIDMyIGJpdAlSeCBHTUFDIEZJRk8gQWxtb3N0IEZ1bGwgVGhyZXNoLiAqLwotI2RlZmluZSBSWF9HTUZfQ1RSTF9UCTB4MGM0OAkvKiAzMiBiaXQJUnggR01BQyBGSUZPIENvbnRyb2wvVGVzdCAqLwotI2RlZmluZSBSWF9HTUZfRkxfTVNLCTB4MGM0YwkvKiAzMiBiaXQJUnggR01BQyBGSUZPIEZsdXNoIE1hc2sgKi8KLSNkZWZpbmUgUlhfR01GX0ZMX1RIUgkweDBjNTAJLyogMzIgYml0CVJ4IEdNQUMgRklGTyBGbHVzaCBUaHJlc2hvbGQgKi8KLQkvKiAweDBjNTQgLSAweDBjNWY6CXJlc2VydmVkICovCi0jZGVmaW5lIFJYX0dNRl9XUAkJMHgwYzYwCS8qIDMyIGJpdCAJUnggR01BQyBGSUZPIFdyaXRlIFBvaW50ZXIgKi8KLQkvKiAweDBjNjQgLSAweDBjNjc6CXJlc2VydmVkICovCi0jZGVmaW5lIFJYX0dNRl9XTEVWCQkweDBjNjgJLyogMzIgYml0IAlSeCBHTUFDIEZJRk8gV3JpdGUgTGV2ZWwgKi8KLQkvKiAweDBjNmMgLSAweDBjNmY6CXJlc2VydmVkICovCi0jZGVmaW5lIFJYX0dNRl9SUAkJMHgwYzcwCS8qIDMyIGJpdCAJUnggR01BQyBGSUZPIFJlYWQgUG9pbnRlciAqLwotCS8qIDB4MGM3NCAtIDB4MGM3NzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUlhfR01GX1JMRVYJCTB4MGM3OAkvKiAzMiBiaXQgCVJ4IEdNQUMgRklGTyBSZWFkIExldmVsICovCi0JLyogMHgwYzdjIC0gMHgwYzdmOglyZXNlcnZlZCAqLwotCi0vKgotICoJQmFuayAyNQotICovCi0JLyogMHgwYzgwIC0gMHgwY2JmOglNQUMgMiAqLwotCS8qIDB4MGNjMCAtIDB4MGNmZjoJcmVzZXJ2ZWQgKi8KLQotLyoKLSAqCUJhbmsgMjYKLSAqLwotLyoKLSAqIFRyYW5zbWl0IE1BQyBGSUZPIGFuZCBUcmFuc21pdCBMRUQgUmVnaXN0ZXJzIChHRU5FU0lTIG9ubHkpLAotICogdXNlIE1SX0FERFIoKSB0byBhY2Nlc3MKLSAqLwotI2RlZmluZSBUWF9NRkZfRUEJCTB4MGQwMAkvKiAzMiBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gRW5kIEFkZHJlc3MgKi8KLSNkZWZpbmUgVFhfTUZGX1dQCQkweDBkMDQJLyogMzIgYml0IAlUcmFuc21pdCBNQUMgRklGTyBXUiBQb2ludGVyICovCi0jZGVmaW5lIFRYX01GRl9XU1AJCTB4MGQwOAkvKiAzMiBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gV1IgU2hhZG93IFB0ciAqLwotI2RlZmluZSBUWF9NRkZfUlAJCTB4MGQwYwkvKiAzMiBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gUkQgUG9pbnRlciAqLwotI2RlZmluZSBUWF9NRkZfUEMJCTB4MGQxMAkvKiAzMiBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gUGFja2V0IENudCAqLwotI2RlZmluZSBUWF9NRkZfTEVWCQkweDBkMTQJLyogMzIgYml0CVRyYW5zbWl0IE1BQyBGSUZPIExldmVsICovCi0jZGVmaW5lIFRYX01GRl9DVFJMMQkweDBkMTgJLyogMTYgYml0CVRyYW5zbWl0IE1BQyBGSUZPIEN0cmwgUmVnIDEgKi8KLSNkZWZpbmUgVFhfTUZGX1dBRgkJMHgwZDFhCS8qICA4IGJpdAlUcmFuc21pdCBNQUMgV2FpdCBhZnRlciBmbHVzaCAqLwotCS8qIDB4MGMxYjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgVFhfTUZGX0NUUkwyCTB4MGQxYwkvKiAgOCBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gQ3RybCBSZWcgMiAqLwotI2RlZmluZSBUWF9NRkZfVFNUMQkJMHgwZDFkCS8qICA4IGJpdAlUcmFuc21pdCBNQUMgRklGTyBUZXN0IFJlZyAxICovCi0jZGVmaW5lIFRYX01GRl9UU1QyCQkweDBkMWUJLyogIDggYml0CVRyYW5zbWl0IE1BQyBGSUZPIFRlc3QgUmVnIDIgKi8KLQkvKiAweDBkMWY6CXJlc2VydmVkICovCi0jZGVmaW5lIFRYX0xFRF9JTkkJCTB4MGQyMAkvKiAzMiBiaXQJVHJhbnNtaXQgTEVEIENudCBJbml0IFZhbHVlICovCi0jZGVmaW5lIFRYX0xFRF9WQUwJCTB4MGQyNAkvKiAzMiBiaXQJVHJhbnNtaXQgTEVEIENudCBDdXJyZW50IFZhbCAqLwotI2RlZmluZSBUWF9MRURfQ1RSTAkJMHgwZDI4CS8qICA4IGJpdAlUcmFuc21pdCBMRUQgQ250IENvbnRyb2wgUmVnICovCi0jZGVmaW5lIFRYX0xFRF9UU1QJCTB4MGQyOQkvKiAgOCBiaXQJVHJhbnNtaXQgTEVEIENudCBUZXN0IFJlZyAqLwotCS8qIDB4MGQyYSAtIDB4MGQzZjoJcmVzZXJ2ZWQgKi8KLQotLyogVHJhbnNtaXQgR01BQyBGSUZPIChZVUtPTiBvbmx5KSwgdXNlIE1SX0FERFIoKSB0byBhY2Nlc3MgKi8KLSNkZWZpbmUgVFhfR01GX0VBCQkweDBkNDAJLyogMzIgYml0CVR4IEdNQUMgRklGTyBFbmQgQWRkcmVzcyAqLwotI2RlZmluZSBUWF9HTUZfQUVfVEhSCTB4MGQ0NAkvKiAzMiBiaXQJVHggR01BQyBGSUZPIEFsbW9zdCBFbXB0eSBUaHJlc2guKi8KLSNkZWZpbmUgVFhfR01GX0NUUkxfVAkweDBkNDgJLyogMzIgYml0CVR4IEdNQUMgRklGTyBDb250cm9sL1Rlc3QgKi8KLQkvKiAweDBkNGMgLSAweDBkNWY6CXJlc2VydmVkICovCi0jZGVmaW5lIFRYX0dNRl9XUAkJMHgwZDYwCS8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFdyaXRlIFBvaW50ZXIgKi8KLSNkZWZpbmUgVFhfR01GX1dTUAkJMHgwZDY0CS8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFdyaXRlIFNoYWRvdyBQdHIuICovCi0jZGVmaW5lIFRYX0dNRl9XTEVWCQkweDBkNjgJLyogMzIgYml0IAlUeCBHTUFDIEZJRk8gV3JpdGUgTGV2ZWwgKi8KLQkvKiAweDBkNmMgLSAweDBkNmY6CXJlc2VydmVkICovCi0jZGVmaW5lIFRYX0dNRl9SUAkJMHgwZDcwCS8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFJlYWQgUG9pbnRlciAqLwotI2RlZmluZSBUWF9HTUZfUlNUUAkJMHgwZDc0CS8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFJlc3RhcnQgUG9pbnRlciAqLwotI2RlZmluZSBUWF9HTUZfUkxFVgkJMHgwZDc4CS8qIDMyIGJpdCAJVHggR01BQyBGSUZPIFJlYWQgTGV2ZWwgKi8KLQkvKiAweDBkN2MgLSAweDBkN2Y6CXJlc2VydmVkICovCi0KLS8qCi0gKglCYW5rIDI3Ci0gKi8KLQkvKiAweDBkODAgLSAweDBkYmY6CU1BQyAyICovCi0JLyogMHgwZGFhIC0gMHgwZGZmOglyZXNlcnZlZCAqLwotCi0vKgotICoJQmFuayAyOAotICovCi0vKiBEZXNjcmlwdG9yIFBvbGwgVGltZXIgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEIyOF9EUFRfSU5JCQkweDBlMDAJLyogMjQgYml0CURlc2NyaXB0b3IgUG9sbCBUaW1lciBJbml0IFZhbCAqLwotI2RlZmluZSBCMjhfRFBUX1ZBTAkJMHgwZTA0CS8qIDI0IGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgQ3VyciBWYWwgKi8KLSNkZWZpbmUgQjI4X0RQVF9DVFJMCTB4MGUwOAkvKiAgOCBiaXQJRGVzY3JpcHRvciBQb2xsIFRpbWVyIEN0cmwgUmVnICovCi0JLyogMHgwZTA5OglyZXNlcnZlZCAqLwotI2RlZmluZSBCMjhfRFBUX1RTVAkJMHgwZTBhCS8qICA4IGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgVGVzdCBSZWcgKi8KLQkvKiAweDBlMGI6CXJlc2VydmVkICovCi0KLS8qIFRpbWUgU3RhbXAgVGltZXIgUmVnaXN0ZXJzIChZVUtPTiBvbmx5KSAqLwotCS8qIDB4MGUxMDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR01BQ19USV9TVF9WQUwJMHgwZTE0CS8qIDMyIGJpdAlUaW1lIFN0YW1wIFRpbWVyIEN1cnIgVmFsICovCi0jZGVmaW5lIEdNQUNfVElfU1RfQ1RSTAkweDBlMTgJLyogIDggYml0CVRpbWUgU3RhbXAgVGltZXIgQ3RybCBSZWcgKi8KLQkvKiAweDBlMTk6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNQUNfVElfU1RfVFNUCTB4MGUxYQkvKiAgOCBiaXQJVGltZSBTdGFtcCBUaW1lciBUZXN0IFJlZyAqLwotCS8qIDB4MGUxYiAtIDB4MGU3ZjoJcmVzZXJ2ZWQgKi8KLQotLyoKLSAqCUJhbmsgMjkKLSAqLwotCS8qIDB4MGU4MCAtIDB4MGVmYzoJcmVzZXJ2ZWQgKi8KLQotLyoKLSAqCUJhbmsgMzAKLSAqLwotLyogR01BQyBhbmQgR1BIWSBDb250cm9sIFJlZ2lzdGVycyAoWVVLT04gb25seSkgKi8KLSNkZWZpbmUgR01BQ19DVFJMCQkweDBmMDAJLyogMzIgYml0CUdNQUMgQ29udHJvbCBSZWcgKi8KLSNkZWZpbmUgR1BIWV9DVFJMCQkweDBmMDQJLyogMzIgYml0CUdQSFkgQ29udHJvbCBSZWcgKi8KLSNkZWZpbmUgR01BQ19JUlFfU1JDCTB4MGYwOAkvKiAgOCBiaXQJR01BQyBJbnRlcnJ1cHQgU291cmNlIFJlZyAqLwotCS8qIDB4MGYwOSAtIDB4MGYwYjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR01BQ19JUlFfTVNLCTB4MGYwYwkvKiAgOCBiaXQJR01BQyBJbnRlcnJ1cHQgTWFzayBSZWcgKi8KLQkvKiAweDBmMGQgLSAweDBmMGY6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNQUNfTElOS19DVFJMCTB4MGYxMAkvKiAxNiBiaXQJTGluayBDb250cm9sIFJlZyAqLwotCS8qIDB4MGYxNCAtIDB4MGYxZjoJcmVzZXJ2ZWQgKi8KLQotLyogV2FrZS11cCBGcmFtZSBQYXR0ZXJuIE1hdGNoIENvbnRyb2wgUmVnaXN0ZXJzIChZVUtPTiBvbmx5KSAqLwotCi0jZGVmaW5lIFdPTF9SRUdfT0ZGUwkweDIwCS8qIEhXLUJ1ZzogQWRkcmVzcyBpcyArIDB4MjAgYWdhaW5zdCBzcGVjLiAqLwotCi0jZGVmaW5lIFdPTF9DVFJMX1NUQVQJMHgwZjIwCS8qIDE2IGJpdAlXT0wgQ29udHJvbC9TdGF0dXMgUmVnICovCi0jZGVmaW5lIFdPTF9NQVRDSF9DVEwJMHgwZjIyCS8qICA4IGJpdAlXT0wgTWF0Y2ggQ29udHJvbCBSZWcgKi8KLSNkZWZpbmUgV09MX01BVENIX1JFUwkweDBmMjMJLyogIDggYml0CVdPTCBNYXRjaCBSZXN1bHQgUmVnICovCi0jZGVmaW5lIFdPTF9NQUNfQUREUl9MTwkweDBmMjQJLyogMzIgYml0CVdPTCBNQUMgQWRkcmVzcyBMb3cgKi8KLSNkZWZpbmUgV09MX01BQ19BRERSX0hJCTB4MGYyOAkvKiAxNiBiaXQJV09MIE1BQyBBZGRyZXNzIEhpZ2ggKi8KLSNkZWZpbmUgV09MX1BBVFRfUlBUUgkweDBmMmMJLyogIDggYml0CVdPTCBQYXR0ZXJuIFJlYWQgUHRyICovCi0KLS8qIHVzZSB0aGlzIG1hY3JvIHRvIGFjY2VzcyBhYm92ZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgV09MX1JFRyhSZWcpCSgoUmVnKSArIChwQUMtPkdJbmkuR0lXb2xPZmZzKSkKLQotCi0vKiBXT0wgUGF0dGVybiBMZW5ndGggUmVnaXN0ZXJzIChZVUtPTiBvbmx5KSAqLwotCi0jZGVmaW5lIFdPTF9QQVRUX0xFTl9MTwkweDBmMzAJCS8qIDMyIGJpdAlXT0wgUGF0dGVybiBMZW5ndGggMy4uMCAqLwotI2RlZmluZSBXT0xfUEFUVF9MRU5fSEkJMHgwZjM0CQkvKiAyNCBiaXQJV09MIFBhdHRlcm4gTGVuZ3RoIDYuLjQgKi8KLQotLyogV09MIFBhdHRlcm4gQ291bnRlciBSZWdpc3RlcnMgKFlVS09OIG9ubHkpICovCi0KLSNkZWZpbmUgV09MX1BBVFRfQ05UXzAJMHgwZjM4CQkvKiAzMiBiaXQJV09MIFBhdHRlcm4gQ291bnRlciAzLi4wICovCi0jZGVmaW5lIFdPTF9QQVRUX0NOVF80CTB4MGYzYwkJLyogMjQgYml0CVdPTCBQYXR0ZXJuIENvdW50ZXIgNi4uNCAqLwotCS8qIDB4MGY0MCAtIDB4MGY3ZjoJcmVzZXJ2ZWQgKi8KLQotLyoKLSAqCUJhbmsgMzEKLSAqLwotLyogMHgwZjgwIC0gMHgwZmZmOglyZXNlcnZlZCAqLwotCi0vKgotICoJQmFuayAzMgktIDMzCi0gKi8KLSNkZWZpbmUgV09MX1BBVFRfUkFNXzEJMHgxMDAwCS8qICBXT0wgUGF0dGVybiBSQU0gTGluayAxICovCi0KLS8qCi0gKglCYW5rIDB4MjIgLSAweDNmCi0gKi8KLS8qIDB4MTEwMCAtIDB4MWZmZjoJcmVzZXJ2ZWQgKi8KLQotLyoKLSAqCUJhbmsgMHg0MCAtIDB4NGYKLSAqLwotI2RlZmluZSBCQVNFX1hNQUNfMQkJMHgyMDAwCS8qIFhNQUMgMSByZWdpc3RlcnMgKi8KLQotLyoKLSAqCUJhbmsgMHg1MCAtIDB4NWYKLSAqLwotCi0jZGVmaW5lIEJBU0VfR01BQ18xCQkweDI4MDAJLyogR01BQyAxIHJlZ2lzdGVycyAqLwotCi0vKgotICoJQmFuayAweDYwIC0gMHg2ZgotICovCi0jZGVmaW5lIEJBU0VfWE1BQ18yCQkweDMwMDAJLyogWE1BQyAyIHJlZ2lzdGVycyAqLwotCi0vKgotICoJQmFuayAweDcwIC0gMHg3ZgotICovCi0jZGVmaW5lIEJBU0VfR01BQ18yCQkweDM4MDAJLyogR01BQyAyIHJlZ2lzdGVycyAqLwotCi0vKgotICoJQ29udHJvbCBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnM6Ci0gKi8KLS8qCUIwX1JBUAkJOCBiaXQJUmVnaXN0ZXIgQWRkcmVzcyBQb3J0ICovCi0JCQkJCQkJCS8qIEJpdCA3OglyZXNlcnZlZCAqLwotI2RlZmluZSBSQVBfUkFQCQkJMHgzZgkvKiBCaXQgNi4uMDoJMCA9IGJsb2NrIDAsLi4sNmYgPSBibG9jayA2ZiAqLwotCi0vKglCMF9DVFNUCQkJMTYgYml0CUNvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyICovCi0JCQkJCQkJCS8qIEJpdCAxNS4uMTQ6CXJlc2VydmVkICovCi0jZGVmaW5lIENTX0NMS19SVU5fSE9UCUJJVF8xM1MJCS8qIENMS19SVU4gaG90IG0uIChZVUtPTi1MaXRlIG9ubHkpICovCi0jZGVmaW5lIENTX0NMS19SVU5fUlNUCUJJVF8xMlMJCS8qIENMS19SVU4gcmVzZXQgIChZVUtPTi1MaXRlIG9ubHkpICovCi0jZGVmaW5lIENTX0NMS19SVU5fRU5BCUJJVF8xMVMJCS8qIENMS19SVU4gZW5hYmxlIChZVUtPTi1MaXRlIG9ubHkpICovCi0jZGVmaW5lIENTX1ZBVVhfQVZBSUwJQklUXzEwUwkJLyogVkFVWCBhdmFpbGFibGUgKFlVS09OIG9ubHkpICovCi0jZGVmaW5lIENTX0JVU19DTE9DSwlCSVRfOVMJCS8qIEJ1cyBDbG9jayAwLzEgPSAzMy82NiBNSHogKi8KLSNkZWZpbmUgQ1NfQlVTX1NMT1RfU1oJQklUXzhTCQkvKiBTbG90IFNpemUgMC8xID0gMzIvNjQgYml0IHNsb3QgKi8KLSNkZWZpbmUgQ1NfU1RfU1dfSVJRCUJJVF83UwkJLyogU2V0IElSUSBTVyBSZXF1ZXN0ICovCi0jZGVmaW5lIENTX0NMX1NXX0lSUQlCSVRfNlMJCS8qIENsZWFyIElSUSBTVyBSZXF1ZXN0ICovCi0jZGVmaW5lIENTX1NUT1BfRE9ORQlCSVRfNVMJCS8qIFN0b3AgTWFzdGVyIGlzIGZpbmlzaGVkICovCi0jZGVmaW5lIENTX1NUT1BfTUFTVAlCSVRfNFMJCS8qIENvbW1hbmQgQml0IHRvIHN0b3AgdGhlIG1hc3RlciAqLwotI2RlZmluZSBDU19NUlNUX0NMUgkJQklUXzNTCQkvKiBDbGVhciBNYXN0ZXIgcmVzZXQJKi8KLSNkZWZpbmUgQ1NfTVJTVF9TRVQJCUJJVF8yUwkJLyogU2V0IE1hc3RlciByZXNldAkqLwotI2RlZmluZSBDU19SU1RfQ0xSCQlCSVRfMVMJCS8qIENsZWFyIFNvZnR3YXJlIHJlc2V0CSovCi0jZGVmaW5lIENTX1JTVF9TRVQJCUJJVF8wUwkJLyogU2V0ICAgU29mdHdhcmUgcmVzZXQJKi8KLQotLyoJQjBfTEVECQkJIDggQml0CUxFRCByZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgIDcuLiAyOglyZXNlcnZlZCAqLwotI2RlZmluZSBMRURfU1RBVF9PTgkJQklUXzFTCQkvKiBTdGF0dXMgTEVEIG9uCSovCi0jZGVmaW5lIExFRF9TVEFUX09GRglCSVRfMFMJCS8qIFN0YXR1cyBMRUQgb2ZmCSovCi0KLS8qCUIwX1BPV0VSX0NUUkwJIDggQml0CVBvd2VyIENvbnRyb2wgcmVnIChZVUtPTiBvbmx5KSAqLwotI2RlZmluZSBQQ19WQVVYX0VOQQkJQklUXzcJCS8qIFN3aXRjaCBWQVVYIEVuYWJsZSAgKi8KLSNkZWZpbmUgUENfVkFVWF9ESVMJCUJJVF82ICAgICAgIC8qIFN3aXRjaCBWQVVYIERpc2FibGUgKi8KLSNkZWZpbmUgUENfVkNDX0VOQQkJQklUXzUgICAgICAgLyogU3dpdGNoIFZDQyBFbmFibGUgICovCi0jZGVmaW5lIFBDX1ZDQ19ESVMJCUJJVF80ICAgICAgIC8qIFN3aXRjaCBWQ0MgRGlzYWJsZSAqLwotI2RlZmluZSBQQ19WQVVYX09OCQlCSVRfMyAgICAgICAvKiBTd2l0Y2ggVkFVWCBPbiAgKi8KLSNkZWZpbmUgUENfVkFVWF9PRkYJCUJJVF8yICAgICAgIC8qIFN3aXRjaCBWQVVYIE9mZiAqLwotI2RlZmluZSBQQ19WQ0NfT04JCUJJVF8xICAgICAgIC8qIFN3aXRjaCBWQ0MgT24gICovCi0jZGVmaW5lIFBDX1ZDQ19PRkYJCUJJVF8wICAgICAgIC8qIFN3aXRjaCBWQ0MgT2ZmICovCi0KLS8qCUIwX0lTUkMJCQkzMiBiaXQJSW50ZXJydXB0IFNvdXJjZSBSZWdpc3RlciAqLwotLyoJQjBfSU1TSwkJCTMyIGJpdAlJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotLyoJQjBfU1BfSVNSQwkJMzIgYml0CVNwZWNpYWwgSW50ZXJydXB0IFNvdXJjZSBSZWcgKi8KLS8qCUIyX0lSUU1fTVNLIAkzMiBiaXQJSVJRIE1vZGVyYXRpb24gTWFzayAqLwotI2RlZmluZSBJU19BTExfTVNLCQkweGJmZmZmZmZmVUwJLyogQWxsIEludGVycnVwdCBiaXRzICovCi0jZGVmaW5lIElTX0hXX0VSUgkJQklUXzMxCQkvKiBJbnRlcnJ1cHQgSFcgRXJyb3IgKi8KLQkJCQkJCQkJLyogQml0IDMwOglyZXNlcnZlZCAqLwotI2RlZmluZSBJU19QQV9UT19SWDEJQklUXzI5CQkvKiBQYWNrZXQgQXJiIFRpbWVvdXQgUngxICovCi0jZGVmaW5lIElTX1BBX1RPX1JYMglCSVRfMjgJCS8qIFBhY2tldCBBcmIgVGltZW91dCBSeDIgKi8KLSNkZWZpbmUgSVNfUEFfVE9fVFgxCUJJVF8yNwkJLyogUGFja2V0IEFyYiBUaW1lb3V0IFR4MSAqLwotI2RlZmluZSBJU19QQV9UT19UWDIJQklUXzI2CQkvKiBQYWNrZXQgQXJiIFRpbWVvdXQgVHgyICovCi0jZGVmaW5lIElTX0kyQ19SRUFEWQlCSVRfMjUJCS8qIElSUSBvbiBlbmQgb2YgSTJDIFR4ICovCi0jZGVmaW5lIElTX0lSUV9TVwkJQklUXzI0CQkvKiBTVyBmb3JjZWQgSVJRCSovCi0jZGVmaW5lIElTX0VYVF9SRUcJCUJJVF8yMwkJLyogSVJRIGZyb20gTE04MCBvciBQSFkgKEdFTkVTSVMgb25seSkgKi8KLQkJCQkJCQkJCS8qIElSUSBmcm9tIFBIWSAoWVVLT04gb25seSkgKi8KLSNkZWZpbmUgSVNfVElNSU5UCQlCSVRfMjIJCS8qIElSUSBmcm9tIFRpbWVyCSovCi0jZGVmaW5lIElTX01BQzEJCQlCSVRfMjEJCS8qIElSUSBmcm9tIE1BQyAxCSovCi0jZGVmaW5lIElTX0xOS19TWU5DX00xCUJJVF8yMAkJLyogTGluayBTeW5jIENudCB3cmFwIE1BQyAxICovCi0jZGVmaW5lIElTX01BQzIJCQlCSVRfMTkJCS8qIElSUSBmcm9tIE1BQyAyCSovCi0jZGVmaW5lIElTX0xOS19TWU5DX00yCUJJVF8xOAkJLyogTGluayBTeW5jIENudCB3cmFwIE1BQyAyICovCi0vKiBSZWNlaXZlIFF1ZXVlIDEgKi8KLSNkZWZpbmUgSVNfUjFfQgkJCUJJVF8xNwkJLyogUV9SMSBFbmQgb2YgQnVmZmVyICovCi0jZGVmaW5lIElTX1IxX0YJCQlCSVRfMTYJCS8qIFFfUjEgRW5kIG9mIEZyYW1lICovCi0jZGVmaW5lIElTX1IxX0MJCQlCSVRfMTUJCS8qIFFfUjEgRW5jb2RpbmcgRXJyb3IgKi8KLS8qIFJlY2VpdmUgUXVldWUgMiAqLwotI2RlZmluZSBJU19SMl9CCQkJQklUXzE0CQkvKiBRX1IyIEVuZCBvZiBCdWZmZXIgKi8KLSNkZWZpbmUgSVNfUjJfRgkJCUJJVF8xMwkJLyogUV9SMiBFbmQgb2YgRnJhbWUgKi8KLSNkZWZpbmUgSVNfUjJfQwkJCUJJVF8xMgkJLyogUV9SMiBFbmNvZGluZyBFcnJvciAqLwotLyogU3luY2hyb25vdXMgVHJhbnNtaXQgUXVldWUgMSAqLwotI2RlZmluZSBJU19YUzFfQgkJQklUXzExCQkvKiBRX1hTMSBFbmQgb2YgQnVmZmVyICovCi0jZGVmaW5lIElTX1hTMV9GCQlCSVRfMTAJCS8qIFFfWFMxIEVuZCBvZiBGcmFtZSAqLwotI2RlZmluZSBJU19YUzFfQwkJQklUXzkJCS8qIFFfWFMxIEVuY29kaW5nIEVycm9yICovCi0vKiBBc3luY2hyb25vdXMgVHJhbnNtaXQgUXVldWUgMSAqLwotI2RlZmluZSBJU19YQTFfQgkJQklUXzgJCS8qIFFfWEExIEVuZCBvZiBCdWZmZXIgKi8KLSNkZWZpbmUgSVNfWEExX0YJCUJJVF83CQkvKiBRX1hBMSBFbmQgb2YgRnJhbWUgKi8KLSNkZWZpbmUgSVNfWEExX0MJCUJJVF82CQkvKiBRX1hBMSBFbmNvZGluZyBFcnJvciAqLwotLyogU3luY2hyb25vdXMgVHJhbnNtaXQgUXVldWUgMiAqLwotI2RlZmluZSBJU19YUzJfQgkJQklUXzUJCS8qIFFfWFMyIEVuZCBvZiBCdWZmZXIgKi8KLSNkZWZpbmUgSVNfWFMyX0YJCUJJVF80CQkvKiBRX1hTMiBFbmQgb2YgRnJhbWUgKi8KLSNkZWZpbmUgSVNfWFMyX0MJCUJJVF8zCQkvKiBRX1hTMiBFbmNvZGluZyBFcnJvciAqLwotLyogQXN5bmNocm9ub3VzIFRyYW5zbWl0IFF1ZXVlIDIgKi8KLSNkZWZpbmUgSVNfWEEyX0IJCUJJVF8yCQkvKiBRX1hBMiBFbmQgb2YgQnVmZmVyICovCi0jZGVmaW5lIElTX1hBMl9GCQlCSVRfMQkJLyogUV9YQTIgRW5kIG9mIEZyYW1lICovCi0jZGVmaW5lIElTX1hBMl9DCQlCSVRfMAkJLyogUV9YQTIgRW5jb2RpbmcgRXJyb3IgKi8KLQotCi0vKglCMF9IV0VfSVNSQwkJMzIgYml0CUhXIEVycm9yIEludGVycnVwdCBTcmMgUmVnICovCi0vKglCMF9IV0VfSU1TSwkJMzIgYml0CUhXIEVycm9yIEludGVycnVwdCBNYXNrIFJlZyAqLwotLyoJQjJfSVJRTV9IV0VfTVNLCTMyIGJpdAlJUlEgTW9kZXJhdGlvbiBIVyBFcnJvciBNYXNrICovCi0jZGVmaW5lIElTX0VSUl9NU0sJCTB4MDAwMDBmZmZMCS8qIAkJQWxsIEVycm9yIGJpdHMgKi8KLQkJCQkJCQkJLyogQml0IDMxLi4xNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgSVNfSVJRX1RJU1RfT1YJQklUXzEzCS8qIFRpbWUgU3RhbXAgVGltZXIgT3ZlcmZsb3cgKFlVS09OIG9ubHkpICovCi0jZGVmaW5lIElTX0lSUV9TRU5TT1IJQklUXzEyCS8qIElSUSBmcm9tIFNlbnNvciAoWVVLT04gb25seSkgKi8KLSNkZWZpbmUgSVNfSVJRX01TVF9FUlIJQklUXzExCS8qIElSUSBtYXN0ZXIgZXJyb3IgZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgSVNfSVJRX1NUQVQJCUJJVF8xMAkvKiBJUlEgc3RhdHVzIGV4Y2VwdGlvbiAqLwotI2RlZmluZSBJU19OT19TVEFUX00xCUJJVF85CS8qIE5vIFJ4IFN0YXR1cyBmcm9tIE1BQyAxICovCi0jZGVmaW5lIElTX05PX1NUQVRfTTIJQklUXzgJLyogTm8gUnggU3RhdHVzIGZyb20gTUFDIDIgKi8KLSNkZWZpbmUgSVNfTk9fVElTVF9NMQlCSVRfNwkvKiBObyBUaW1lIFN0YW1wIGZyb20gTUFDIDEgKi8KLSNkZWZpbmUgSVNfTk9fVElTVF9NMglCSVRfNgkvKiBObyBUaW1lIFN0YW1wIGZyb20gTUFDIDIgKi8KLSNkZWZpbmUgSVNfUkFNX1JEX1BBUglCSVRfNQkvKiBSQU0gUmVhZCAgUGFyaXR5IEVycm9yICovCi0jZGVmaW5lIElTX1JBTV9XUl9QQVIJQklUXzQJLyogUkFNIFdyaXRlIFBhcml0eSBFcnJvciAqLwotI2RlZmluZSBJU19NMV9QQVJfRVJSCUJJVF8zCS8qIE1BQyAxIFBhcml0eSBFcnJvciAqLwotI2RlZmluZSBJU19NMl9QQVJfRVJSCUJJVF8yCS8qIE1BQyAyIFBhcml0eSBFcnJvciAqLwotI2RlZmluZSBJU19SMV9QQVJfRVJSCUJJVF8xCS8qIFF1ZXVlIFIxIFBhcml0eSBFcnJvciAqLwotI2RlZmluZSBJU19SMl9QQVJfRVJSCUJJVF8wCS8qIFF1ZXVlIFIyIFBhcml0eSBFcnJvciAqLwotCi0vKglCMl9DT05OX1RZUAkJIDggYml0CUNvbm5lY3RvciB0eXBlICovCi0vKglCMl9QTURfVFlQCQkgOCBiaXQJUE1EIHR5cGUgKi8KLS8qCVZhbHVlcyBvZiBjb25uZWN0b3IgYW5kIFBNRCB0eXBlIGNvbXBseSB0byBTeXNLb25uZWN0IGludGVybmFsIHN0ZCAqLwotCi0vKglCMl9NQUNfQ0ZHCQkgOCBiaXQJTUFDIENvbmZpZ3VyYXRpb24gLyBDaGlwIFJldmlzaW9uICovCi0jZGVmaW5lIENGR19DSElQX1JfTVNLCSgweGY8PDQpCS8qIEJpdCA3Li4gNDogQ2hpcCBSZXZpc2lvbiAqLwotCQkJCQkJCQkJLyogQml0IDMuLiAyOglyZXNlcnZlZCAqLwotI2RlZmluZSBDRkdfRElTX00yX0NMSwlCSVRfMVMJCS8qIERpc2FibGUgQ2xvY2sgZm9yIDJuZCBNQUMgKi8KLSNkZWZpbmUgQ0ZHX1NOR19NQUMJCUJJVF8wUwkJLyogTUFDIENvbmZpZzogMD0yIE1BQ3MgLyAxPTEgTUFDKi8KLQotLyoJQjJfQ0hJUF9JRAkJIDggYml0IAlDaGlwIElkZW50aWZpY2F0aW9uIE51bWJlciAqLwotI2RlZmluZSBDSElQX0lEX0dFTkVTSVMJCTB4MGEJLyogQ2hpcCBJRCBmb3IgR0VORVNJUyAqLwotI2RlZmluZSBDSElQX0lEX1lVS09OCQkweGIwCS8qIENoaXAgSUQgZm9yIFlVS09OICovCi0jZGVmaW5lIENISVBfSURfWVVLT05fTElURQkweGIxCS8qIENoaXAgSUQgZm9yIFlVS09OLUxpdGUgKFJldi4gQTEtQTMpICovCi0jZGVmaW5lIENISVBfSURfWVVLT05fTFAJMHhiMgkvKiBDaGlwIElEIGZvciBZVUtPTi1MUCAqLwotCi0jZGVmaW5lIENISVBfUkVWX1lVX0xJVEVfQTEJMwkJLyogQ2hpcCBSZXYuIGZvciBZVUtPTi1MaXRlIEExLEEyICovCi0jZGVmaW5lIENISVBfUkVWX1lVX0xJVEVfQTMJNwkJLyogQ2hpcCBSZXYuIGZvciBZVUtPTi1MaXRlIEEzICovCi0KLS8qCUIyX0ZBUgkJCTMyIGJpdAlGbGFzaC1Qcm9tIEFkZHIgUmVnL0NudCAqLwotI2RlZmluZSBGQVJfQUREUgkJMHgxZmZmZkwJLyogQml0IDE2Li4gMDoJRlBST00gQWRkcmVzcyBtYXNrICovCi0KLS8qCUIyX0xEX0NUUkwJCSA4IGJpdAlFUFJPTSBsb2FkZXIgY29udHJvbCByZWdpc3RlciAqLwotLyoJQml0cyBhcmUgY3VycmVudGx5IHJlc2VydmVkICovCi0KLS8qCUIyX0xEX1RFU1QJCSA4IGJpdAlFUFJPTSBsb2FkZXIgdGVzdCByZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgNy4uIDQ6CXJlc2VydmVkICovCi0jZGVmaW5lIExEX1RfT04JCQlCSVRfM1MJLyogTG9hZGVyIFRlc3QgbW9kZSBvbiAqLwotI2RlZmluZSBMRF9UX09GRgkJQklUXzJTCS8qIExvYWRlciBUZXN0IG1vZGUgb2ZmICovCi0jZGVmaW5lIExEX1RfU1RFUAkJQklUXzFTCS8qIERlY3JlbWVudCBGUFJPTSBhZGRyLiBDb3VudGVyICovCi0jZGVmaW5lIExEX1NUQVJUCQlCSVRfMFMJLyogU3RhcnQgbG9hZGluZyBGUFJPTSAqLwotCi0vKgotICoJVGltZXIgU2VjdGlvbgotICovCi0vKglCMl9USV9DVFJMCQkgOCBiaXQJVGltZXIgY29udHJvbCAqLwotLyoJQjJfSVJRTV9DVFJMCSA4IGJpdAlJUlEgTW9kZXJhdGlvbiBUaW1lciBDb250cm9sICovCi0JCQkJCQkJCS8qIEJpdCA3Li4gMzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgVElNX1NUQVJUCQlCSVRfMlMJLyogU3RhcnQgVGltZXIgKi8KLSNkZWZpbmUgVElNX1NUT1AJCUJJVF8xUwkvKiBTdG9wICBUaW1lciAqLwotI2RlZmluZSBUSU1fQ0xSX0lSUQkJQklUXzBTCS8qIENsZWFyIFRpbWVyIElSUSAoIUlSUU0pICovCi0KLS8qCUIyX1RJX1RFU1QJCSA4IEJpdAlUaW1lciBUZXN0ICovCi0vKglCMl9JUlFNX1RFU1QJIDggYml0CUlSUSBNb2RlcmF0aW9uIFRpbWVyIFRlc3QgKi8KLS8qCUIyOF9EUFRfVFNUCQkgOCBiaXQJRGVzY3JpcHRvciBQb2xsIFRpbWVyIFRlc3QgUmVnICovCi0JCQkJCQkJCS8qIEJpdCA3Li4gMzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgVElNX1RfT04JCUJJVF8yUwkvKiBUZXN0IG1vZGUgb24gKi8KLSNkZWZpbmUgVElNX1RfT0ZGCQlCSVRfMVMJLyogVGVzdCBtb2RlIG9mZiAqLwotI2RlZmluZSBUSU1fVF9TVEVQCQlCSVRfMFMJLyogVGVzdCBzdGVwICovCi0KLS8qCUIyOF9EUFRfSU5JCTMyIGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgSW5pdCBWYWwgKi8KLS8qCUIyOF9EUFRfVkFMCTMyIGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgQ3VyciBWYWwgKi8KLQkJCQkJCQkJLyogQml0IDMxLi4yNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgRFBUX01TSwkJMHgwMGZmZmZmZkwJLyogQml0IDIzLi4gMDoJRGVzYyBQb2xsIFRpbWVyIEJpdHMgKi8KLQotLyoJQjI4X0RQVF9DVFJMCSA4IGJpdAlEZXNjcmlwdG9yIFBvbGwgVGltZXIgQ3RybCBSZWcgKi8KLQkJCQkJCQkJLyogQml0ICA3Li4gMjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgRFBUX1NUQVJUCQlCSVRfMVMJLyogU3RhcnQgRGVzY3JpcHRvciBQb2xsIFRpbWVyICovCi0jZGVmaW5lIERQVF9TVE9QCQlCSVRfMFMJLyogU3RvcCAgRGVzY3JpcHRvciBQb2xsIFRpbWVyICovCi0KLS8qCUIyX0VfMwkJCSA4IGJpdCAJbG93ZXIgNCBiaXRzIHVzZWQgZm9yIEhXIHNlbGYgdGVzdCByZXN1bHQgKi8KLSNkZWZpbmUgQjJfRTNfUkVTX01BU0sJMHgwZgotCi0vKglCMl9UU1RfQ1RSTDEJIDggYml0CVRlc3QgQ29udHJvbCBSZWdpc3RlciAxICovCi0jZGVmaW5lIFRTVF9GUkNfRFBFUlJfTVIJQklUXzdTCS8qIGZvcmNlIERBVEFQRVJSIG9uIE1TVCBSRCAqLwotI2RlZmluZSBUU1RfRlJDX0RQRVJSX01XCUJJVF82UwkvKiBmb3JjZSBEQVRBUEVSUiBvbiBNU1QgV1IgKi8KLSNkZWZpbmUgVFNUX0ZSQ19EUEVSUl9UUglCSVRfNVMJLyogZm9yY2UgREFUQVBFUlIgb24gVFJHIFJEICovCi0jZGVmaW5lIFRTVF9GUkNfRFBFUlJfVFcJQklUXzRTCS8qIGZvcmNlIERBVEFQRVJSIG9uIFRSRyBXUiAqLwotI2RlZmluZSBUU1RfRlJDX0FQRVJSX00JCUJJVF8zUwkvKiBmb3JjZSBBRERSUEVSUiBvbiBNU1QgKi8KLSNkZWZpbmUgVFNUX0ZSQ19BUEVSUl9UCQlCSVRfMlMJLyogZm9yY2UgQUREUlBFUlIgb24gVFJHICovCi0jZGVmaW5lIFRTVF9DRkdfV1JJVEVfT04JQklUXzFTCS8qIEVuYWJsZSAgQ29uZmlnIFJlZyBXUiAqLwotI2RlZmluZSBUU1RfQ0ZHX1dSSVRFX09GRglCSVRfMFMJLyogRGlzYWJsZSBDb25maWcgUmVnIFdSICovCi0KLS8qCUIyX1RTVF9DVFJMMgkgOCBiaXQJVGVzdCBDb250cm9sIFJlZ2lzdGVyIDIgKi8KLQkJCQkJCQkJCS8qIEJpdCA3Li4gNDoJcmVzZXJ2ZWQgKi8KLQkJCS8qIGZvcmNlIHRoZSBmb2xsb3dpbmcgZXJyb3Igb24gdGhlIG5leHQgbWFzdGVyIHJlYWQvd3JpdGUJKi8KLSNkZWZpbmUgVFNUX0ZSQ19EUEVSUl9NUjY0CUJJVF8zUwkvKiBEYXRhUEVSUiBSRCA2NAkqLwotI2RlZmluZSBUU1RfRlJDX0RQRVJSX01XNjQJQklUXzJTCS8qIERhdGFQRVJSIFdSIDY0CSovCi0jZGVmaW5lIFRTVF9GUkNfQVBFUlJfMU02NAlCSVRfMVMJLyogQWRkclBFUlIgb24gMS4gcGhhc2UgKi8KLSNkZWZpbmUgVFNUX0ZSQ19BUEVSUl8yTTY0CUJJVF8wUwkvKiBBZGRyUEVSUiBvbiAyLiBwaGFzZSAqLwotCi0vKglCMl9HUF9JTwkJMzIgYml0CUdlbmVyYWwgUHVycG9zZSBJL08gUmVnaXN0ZXIgKi8KLQkJCQkJCQkvKiBCaXQgMzEuLjI2OglyZXNlcnZlZCAqLwotI2RlZmluZSBHUF9ESVJfOQlCSVRfMjUJLyogSU9fOSBkaXJlY3QsIDA9SW4vMT1PdXQgKi8KLSNkZWZpbmUgR1BfRElSXzgJQklUXzI0CS8qIElPXzggZGlyZWN0LCAwPUluLzE9T3V0ICovCi0jZGVmaW5lIEdQX0RJUl83CUJJVF8yMwkvKiBJT183IGRpcmVjdCwgMD1Jbi8xPU91dCAqLwotI2RlZmluZSBHUF9ESVJfNglCSVRfMjIJLyogSU9fNiBkaXJlY3QsIDA9SW4vMT1PdXQgKi8KLSNkZWZpbmUgR1BfRElSXzUJQklUXzIxCS8qIElPXzUgZGlyZWN0LCAwPUluLzE9T3V0ICovCi0jZGVmaW5lIEdQX0RJUl80CUJJVF8yMAkvKiBJT180IGRpcmVjdCwgMD1Jbi8xPU91dCAqLwotI2RlZmluZSBHUF9ESVJfMwlCSVRfMTkJLyogSU9fMyBkaXJlY3QsIDA9SW4vMT1PdXQgKi8KLSNkZWZpbmUgR1BfRElSXzIJQklUXzE4CS8qIElPXzIgZGlyZWN0LCAwPUluLzE9T3V0ICovCi0jZGVmaW5lIEdQX0RJUl8xCUJJVF8xNwkvKiBJT18xIGRpcmVjdCwgMD1Jbi8xPU91dCAqLwotI2RlZmluZSBHUF9ESVJfMAlCSVRfMTYJLyogSU9fMCBkaXJlY3QsIDA9SW4vMT1PdXQgKi8KLQkJCQkJCS8qIEJpdCAxNS4uMTA6CXJlc2VydmVkICovCi0jZGVmaW5lIEdQX0lPXzkJCUJJVF85CS8qIElPXzkgcGluICovCi0jZGVmaW5lIEdQX0lPXzgJCUJJVF84CS8qIElPXzggcGluICovCi0jZGVmaW5lIEdQX0lPXzcJCUJJVF83CS8qIElPXzcgcGluICovCi0jZGVmaW5lIEdQX0lPXzYJCUJJVF82CS8qIElPXzYgcGluICovCi0jZGVmaW5lIEdQX0lPXzUJCUJJVF81CS8qIElPXzUgcGluICovCi0jZGVmaW5lIEdQX0lPXzQJCUJJVF80CS8qIElPXzQgcGluICovCi0jZGVmaW5lIEdQX0lPXzMJCUJJVF8zCS8qIElPXzMgcGluICovCi0jZGVmaW5lIEdQX0lPXzIJCUJJVF8yCS8qIElPXzIgcGluICovCi0jZGVmaW5lIEdQX0lPXzEJCUJJVF8xCS8qIElPXzEgcGluICovCi0jZGVmaW5lIEdQX0lPXzAJCUJJVF8wCS8qIElPXzAgcGluICovCi0KLS8qCUIyX0kyQ19DVFJMCQkzMiBiaXQJSTJDIEhXIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgSTJDX0ZMQUcJCUJJVF8zMQkJLyogU3RhcnQgcmVhZC93cml0ZSBpZiBXUiAqLwotI2RlZmluZSBJMkNfQUREUgkJKDB4N2ZmZkw8PDE2KQkvKiBCaXQgMzAuLjE2OglBZGRyIHRvIGJlIFJEL1dSICovCi0jZGVmaW5lIEkyQ19ERVZfU0VMCQkoMHg3Zkw8PDkpCQkvKiBCaXQgMTUuLiA5OglJMkMgRGV2aWNlIFNlbGVjdCAqLwotCQkJCQkJCQkvKiBCaXQJOC4uIDU6CXJlc2VydmVkCSovCi0jZGVmaW5lIEkyQ19CVVJTVF9MRU4JQklUXzQJCS8qIEJ1cnN0IExlbiwgMS80IGJ5dGVzICovCi0jZGVmaW5lIEkyQ19ERVZfU0laRQkoNzw8MSkJCS8qIEJpdAkzLi4gMToJSTJDIERldmljZSBTaXplCSovCi0jZGVmaW5lIEkyQ18wMjVLX0RFVgkoMDw8MSkJCS8qCQkwOiAyNTYgQnl0ZXMgb3Igc21hbC4gKi8KLSNkZWZpbmUgSTJDXzA1S19ERVYJCSgxPDwxKQkJLyogCQkxOiA1MTIJQnl0ZXMJKi8KLSNkZWZpbmUgSTJDXzFLX0RFVgkJKDI8PDEpCQkvKgkJMjogMTAyNCBCeXRlcwkqLwotI2RlZmluZSBJMkNfMktfREVWCQkoMzw8MSkJCS8qCQkzOiAyMDQ4CUJ5dGVzCSovCi0jZGVmaW5lIEkyQ180S19ERVYJCSg0PDwxKQkJLyoJCTQ6IDQwOTYgQnl0ZXMJKi8KLSNkZWZpbmUgSTJDXzhLX0RFVgkJKDU8PDEpCQkvKgkJNTogODE5MiBCeXRlcwkqLwotI2RlZmluZSBJMkNfMTZLX0RFVgkJKDY8PDEpCQkvKgkJNjogMTYzODQgQnl0ZXMJKi8KLSNkZWZpbmUgSTJDXzMyS19ERVYJCSg3PDwxKQkJLyoJCTc6IDMyNzY4IEJ5dGVzCSovCi0jZGVmaW5lIEkyQ19TVE9QCQlCSVRfMAkJLyogSW50ZXJydXB0IEkyQyB0cmFuc2ZlciAqLwotCi0vKglCMl9JMkNfSVJRCQkzMiBiaXQJSTJDIEhXIElSUSBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgMzEuLiAxCXJlc2VydmVkICovCi0jZGVmaW5lIEkyQ19DTFJfSVJRCQlCSVRfMAkvKiBDbGVhciBJMkMgSVJRICovCi0KLS8qCUIyX0kyQ19TVwkJMzIgYml0ICg4IGJpdCBhY2Nlc3MpCUkyQyBIVyBTVyBQb3J0IFJlZ2lzdGVyICovCi0JCQkJCQkJCS8qIEJpdCAgNy4uIDM6CXJlc2VydmVkICovCi0jZGVmaW5lIEkyQ19EQVRBX0RJUglCSVRfMlMJCS8qIGRpcmVjdGlvbiBvZiBJMkNfREFUQSAqLwotI2RlZmluZSBJMkNfREFUQQkJQklUXzFTCQkvKiBJMkMgRGF0YSBQb3J0CSovCi0jZGVmaW5lIEkyQ19DTEsJCQlCSVRfMFMJCS8qIEkyQyBDbG9jayBQb3J0CSovCi0KLS8qCi0gKiBJMkMgQWRkcmVzcwotICovCi0jZGVmaW5lIEkyQ19TRU5TX0FERFIJTE04MF9BRERSCS8qIEkyQyBTZW5zb3IgQWRkcmVzcywgKFZvbHQgYW5kIFRlbXApKi8KLQotCi0vKglCMl9CU0NfQ1RSTAkJIDggYml0CUJsaW5rIFNvdXJjZSBDb3VudGVyIENvbnRyb2wgKi8KLQkJCQkJCQkvKiBCaXQgIDcuLiAyOglyZXNlcnZlZCAqLwotI2RlZmluZSBCU0NfU1RBUlQJQklUXzFTCQkvKiBTdGFydCBCbGluayBTb3VyY2UgQ291bnRlciAqLwotI2RlZmluZSBCU0NfU1RPUAlCSVRfMFMJCS8qIFN0b3AgIEJsaW5rIFNvdXJjZSBDb3VudGVyICovCi0KLS8qCUIyX0JTQ19TVEFUCQkgOCBiaXQJQmxpbmsgU291cmNlIENvdW50ZXIgU3RhdHVzICovCi0JCQkJCQkJLyogQml0ICA3Li4gMToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgQlNDX1NSQwkJQklUXzBTCQkvKiBCbGluayBTb3VyY2UsIDA9T2ZmIC8gMT1PbiAqLwotCi0vKglCMl9CU0NfVFNUCQkxNiBiaXQJQmxpbmsgU291cmNlIENvdW50ZXIgVGVzdCBSZWcgKi8KLSNkZWZpbmUgQlNDX1RfT04JQklUXzJTCQkvKiBUZXN0IG1vZGUgb24gKi8KLSNkZWZpbmUgQlNDX1RfT0ZGCUJJVF8xUwkJLyogVGVzdCBtb2RlIG9mZiAqLwotI2RlZmluZSBCU0NfVF9TVEVQCUJJVF8wUwkJLyogVGVzdCBzdGVwICovCi0KLQotLyoJQjNfUkFNX0FERFIJCTMyIGJpdAlSQU0gQWRkcmVzcywgdG8gcmVhZCBvciB3cml0ZSAqLwotCQkJCQkvKiBCaXQgMzEuLjE5OglyZXNlcnZlZCAqLwotI2RlZmluZSBSQU1fQURSX1JBTgkweDAwMDdmZmZmTAkvKiBCaXQgMTguLiAwOglSQU0gQWRkcmVzcyBSYW5nZSAqLwotCi0vKiBSQU0gSW50ZXJmYWNlIFJlZ2lzdGVycyAqLwotLyoJQjNfUklfQ1RSTAkJMTYgYml0CVJBTSBJZmFjZSBDb250cm9sIFJlZ2lzdGVyICovCi0JCQkJCQkJCS8qIEJpdCAxNS4uMTA6CXJlc2VydmVkICovCi0jZGVmaW5lIFJJX0NMUl9SRF9QRVJSCUJJVF85UwkvKiBDbGVhciBJUlEgUkFNIFJlYWQgUGFyaXR5IEVyciAqLwotI2RlZmluZSBSSV9DTFJfV1JfUEVSUglCSVRfOFMJLyogQ2xlYXIgSVJRIFJBTSBXcml0ZSBQYXJpdHkgRXJyKi8KLQkJCQkJCQkJLyogQml0CTcuLiAyOglyZXNlcnZlZCAqLwotI2RlZmluZSBSSV9SU1RfQ0xSCQlCSVRfMVMJLyogQ2xlYXIgUkFNIEludGVyZmFjZSBSZXNldCAqLwotI2RlZmluZSBSSV9SU1RfU0VUCQlCSVRfMFMJLyogU2V0ICAgUkFNIEludGVyZmFjZSBSZXNldCAqLwotCi0vKglCM19SSV9URVNUCQkgOCBiaXQJUkFNIElmYWNlIFRlc3QgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJLyogQml0IDE1Li4gNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUklfVF9FVgkJCUJJVF8zUwkvKiBUaW1lb3V0IEV2ZW50IG9jY3VyZWQgKi8KLSNkZWZpbmUgUklfVF9PTgkJCUJJVF8yUwkvKiBUaW1lb3V0IFRpbWVyIFRlc3QgT24gKi8KLSNkZWZpbmUgUklfVF9PRkYJCUJJVF8xUwkvKiBUaW1lb3V0IFRpbWVyIFRlc3QgT2ZmICovCi0jZGVmaW5lIFJJX1RfU1RFUAkJQklUXzBTCS8qIFRpbWVvdXQgVGltZXIgU3RlcCAqLwotCi0vKiBNQUMgQXJiaXRlciBSZWdpc3RlcnMgKi8KLS8qCUIzX01BX1RPX0NUUkwJMTYgYml0CU1BQyBBcmJpdGVyIFRpbWVvdXQgQ3RybCBSZWcgKi8KLQkJCQkJCQkJLyogQml0IDE1Li4gNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTUFfRk9FX09OCQlCSVRfM1MJLyogWE1BQyBGYXN0IE91dHB1dCBFbmFibGUgT04gKi8KLSNkZWZpbmUgTUFfRk9FX09GRgkJQklUXzJTCS8qIFhNQUMgRmFzdCBPdXRwdXQgRW5hYmxlIE9GRiAqLwotI2RlZmluZSBNQV9SU1RfQ0xSCQlCSVRfMVMJLyogQ2xlYXIgTUFDIEFyYml0ZXIgUmVzZXQgKi8KLSNkZWZpbmUgTUFfUlNUX1NFVAkJQklUXzBTCS8qIFNldCAgIE1BQyBBcmJpdGVyIFJlc2V0ICovCi0KLS8qCUIzX01BX1JDX0NUUkwJMTYgYml0CU1BQyBBcmJpdGVyIFJlY292ZXJ5IEN0cmwgUmVnICovCi0JCQkJCQkJCS8qIEJpdCAxNS4uIDg6CXJlc2VydmVkICovCi0jZGVmaW5lIE1BX0VOQV9SRUNfVFgyCUJJVF83UwkvKiBFbmFibGUgIFJlY292ZXJ5IFRpbWVyIFRYMiAqLwotI2RlZmluZSBNQV9ESVNfUkVDX1RYMglCSVRfNlMJLyogRGlzYWJsZSBSZWNvdmVyeSBUaW1lciBUWDIgKi8KLSNkZWZpbmUgTUFfRU5BX1JFQ19UWDEJQklUXzVTCS8qIEVuYWJsZSAgUmVjb3ZlcnkgVGltZXIgVFgxICovCi0jZGVmaW5lIE1BX0RJU19SRUNfVFgxCUJJVF80UwkvKiBEaXNhYmxlIFJlY292ZXJ5IFRpbWVyIFRYMSAqLwotI2RlZmluZSBNQV9FTkFfUkVDX1JYMglCSVRfM1MJLyogRW5hYmxlICBSZWNvdmVyeSBUaW1lciBSWDIgKi8KLSNkZWZpbmUgTUFfRElTX1JFQ19SWDIJQklUXzJTCS8qIERpc2FibGUgUmVjb3ZlcnkgVGltZXIgUlgyICovCi0jZGVmaW5lIE1BX0VOQV9SRUNfUlgxCUJJVF8xUwkvKiBFbmFibGUgIFJlY292ZXJ5IFRpbWVyIFJYMSAqLwotI2RlZmluZSBNQV9ESVNfUkVDX1JYMQlCSVRfMFMJLyogRGlzYWJsZSBSZWNvdmVyeSBUaW1lciBSWDEgKi8KLQotLyogUGFja2V0IEFyYml0ZXIgUmVnaXN0ZXJzICovCi0vKglCM19QQV9DVFJMCQkxNiBiaXQJUGFja2V0IEFyYml0ZXIgQ3RybCBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgMTUuLjE0OglyZXNlcnZlZCAqLwotI2RlZmluZSBQQV9DTFJfVE9fVFgyCUJJVF8xM1MJLyogQ2xlYXIgSVJRIFBhY2tldCBUaW1lb3V0IFRYMiAqLwotI2RlZmluZSBQQV9DTFJfVE9fVFgxCUJJVF8xMlMJLyogQ2xlYXIgSVJRIFBhY2tldCBUaW1lb3V0IFRYMSAqLwotI2RlZmluZSBQQV9DTFJfVE9fUlgyCUJJVF8xMVMJLyogQ2xlYXIgSVJRIFBhY2tldCBUaW1lb3V0IFJYMiAqLwotI2RlZmluZSBQQV9DTFJfVE9fUlgxCUJJVF8xMFMJLyogQ2xlYXIgSVJRIFBhY2tldCBUaW1lb3V0IFJYMSAqLwotI2RlZmluZSBQQV9FTkFfVE9fVFgyCUJJVF85UwkvKiBFbmFibGUgIFRpbWVvdXQgVGltZXIgVFgyICovCi0jZGVmaW5lIFBBX0RJU19UT19UWDIJQklUXzhTCS8qIERpc2FibGUgVGltZW91dCBUaW1lciBUWDIgKi8KLSNkZWZpbmUgUEFfRU5BX1RPX1RYMQlCSVRfN1MJLyogRW5hYmxlICBUaW1lb3V0IFRpbWVyIFRYMSAqLwotI2RlZmluZSBQQV9ESVNfVE9fVFgxCUJJVF82UwkvKiBEaXNhYmxlIFRpbWVvdXQgVGltZXIgVFgxICovCi0jZGVmaW5lIFBBX0VOQV9UT19SWDIJQklUXzVTCS8qIEVuYWJsZSAgVGltZW91dCBUaW1lciBSWDIgKi8KLSNkZWZpbmUgUEFfRElTX1RPX1JYMglCSVRfNFMJLyogRGlzYWJsZSBUaW1lb3V0IFRpbWVyIFJYMiAqLwotI2RlZmluZSBQQV9FTkFfVE9fUlgxCUJJVF8zUwkvKiBFbmFibGUgIFRpbWVvdXQgVGltZXIgUlgxICovCi0jZGVmaW5lIFBBX0RJU19UT19SWDEJQklUXzJTCS8qIERpc2FibGUgVGltZW91dCBUaW1lciBSWDEgKi8KLSNkZWZpbmUgUEFfUlNUX0NMUgkJQklUXzFTCS8qIENsZWFyIE1BQyBBcmJpdGVyIFJlc2V0ICovCi0jZGVmaW5lIFBBX1JTVF9TRVQJCUJJVF8wUwkvKiBTZXQgICBNQUMgQXJiaXRlciBSZXNldCAqLwotCi0jZGVmaW5lIFBBX0VOQV9UT19BTEwJKFBBX0VOQV9UT19SWDEgfCBQQV9FTkFfVE9fUlgyIHxcCi0JCQkJCQlQQV9FTkFfVE9fVFgxIHwgUEFfRU5BX1RPX1RYMikKLQotLyogUngvVHggUGF0aCByZWxhdGVkIEFyYml0ZXIgVGVzdCBSZWdpc3RlcnMgKi8KLS8qCUIzX01BX1RPX1RFU1QJMTYgYml0CU1BQyBBcmJpdGVyIFRpbWVvdXQgVGVzdCBSZWcgKi8KLS8qCUIzX01BX1JDX1RFU1QJMTYgYml0CU1BQyBBcmJpdGVyIFJlY292ZXJ5IFRlc3QgUmVnICovCi0vKglCM19QQV9URVNUCQkxNiBiaXQJUGFja2V0IEFyYml0ZXIgVGVzdCBSZWdpc3RlciAqLwotLyoJCQlCaXQgMTUsIDExLCA3LCBhbmQgMyBhcmUgcmVzZXJ2ZWQgaW4gQjNfUEFfVEVTVCAqLwotI2RlZmluZSBUWDJfVF9FVglCSVRfMTVTCQkvKiBUWDIgVGltZW91dC9SZWN2IEV2ZW50IG9jY3VyZWQgKi8KLSNkZWZpbmUgVFgyX1RfT04JQklUXzE0UwkJLyogVFgyIFRpbWVvdXQvUmVjdiBUaW1lciBUZXN0IE9uICovCi0jZGVmaW5lIFRYMl9UX09GRglCSVRfMTNTCQkvKiBUWDIgVGltZW91dC9SZWN2IFRpbWVyIFRzdCBPZmYgKi8KLSNkZWZpbmUgVFgyX1RfU1RFUAlCSVRfMTJTCQkvKiBUWDIgVGltZW91dC9SZWN2IFRpbWVyIFN0ZXAgKi8KLSNkZWZpbmUgVFgxX1RfRVYJQklUXzExUwkJLyogVFgxIFRpbWVvdXQvUmVjdiBFdmVudCBvY2N1cmVkICovCi0jZGVmaW5lIFRYMV9UX09OCUJJVF8xMFMJCS8qIFRYMSBUaW1lb3V0L1JlY3YgVGltZXIgVGVzdCBPbiAqLwotI2RlZmluZSBUWDFfVF9PRkYJQklUXzlTCQkvKiBUWDEgVGltZW91dC9SZWN2IFRpbWVyIFRzdCBPZmYgKi8KLSNkZWZpbmUgVFgxX1RfU1RFUAlCSVRfOFMJCS8qIFRYMSBUaW1lb3V0L1JlY3YgVGltZXIgU3RlcCAqLwotI2RlZmluZSBSWDJfVF9FVglCSVRfN1MJCS8qIFJYMiBUaW1lb3V0L1JlY3YgRXZlbnQgb2NjdXJlZCAqLwotI2RlZmluZSBSWDJfVF9PTglCSVRfNlMJCS8qIFJYMiBUaW1lb3V0L1JlY3YgVGltZXIgVGVzdCBPbiAqLwotI2RlZmluZSBSWDJfVF9PRkYJQklUXzVTCQkvKiBSWDIgVGltZW91dC9SZWN2IFRpbWVyIFRzdCBPZmYgKi8KLSNkZWZpbmUgUlgyX1RfU1RFUAlCSVRfNFMJCS8qIFJYMiBUaW1lb3V0L1JlY3YgVGltZXIgU3RlcCAqLwotI2RlZmluZSBSWDFfVF9FVglCSVRfM1MJCS8qIFJYMSBUaW1lb3V0L1JlY3YgRXZlbnQgb2NjdXJlZCAqLwotI2RlZmluZSBSWDFfVF9PTglCSVRfMlMJCS8qIFJYMSBUaW1lb3V0L1JlY3YgVGltZXIgVGVzdCBPbiAqLwotI2RlZmluZSBSWDFfVF9PRkYJQklUXzFTCQkvKiBSWDEgVGltZW91dC9SZWN2IFRpbWVyIFRzdCBPZmYgKi8KLSNkZWZpbmUgUlgxX1RfU1RFUAlCSVRfMFMJCS8qIFJYMSBUaW1lb3V0L1JlY3YgVGltZXIgU3RlcCAqLwotCi0KLS8qIFRyYW5zbWl0IEFyYml0ZXIgUmVnaXN0ZXJzIE1BQyAxIGFuZCAyLCB1c2UgTVJfQUREUigpIHRvIGFjY2VzcyAqLwotLyoJVFhBX0lUSV9JTkkJCTMyIGJpdAlUeCBBcmIgSW50ZXJ2YWwgVGltZXIgSW5pdCBWYWwgKi8KLS8qCVRYQV9JVElfVkFMCQkzMiBiaXQJVHggQXJiIEludGVydmFsIFRpbWVyIFZhbHVlICovCi0vKglUWEFfTElNX0lOSQkJMzIgYml0CVR4IEFyYiBMaW1pdCBDb3VudGVyIEluaXQgVmFsICovCi0vKglUWEFfTElNX1ZBTAkJMzIgYml0CVR4IEFyYiBMaW1pdCBDb3VudGVyIFZhbHVlICovCi0JCQkJCQkJCS8qIEJpdCAzMS4uMjQ6CXJlc2VydmVkICovCi0jZGVmaW5lIFRYQV9NQVhfVkFMCTB4MDBmZmZmZmZVTC8qIEJpdCAyMy4uIDA6CU1heCBUWEEgVGltZXIvQ250IFZhbCAqLwotCi0vKglUWEFfQ1RSTAkJIDggYml0CVR4IEFyYml0ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBUWEFfRU5BX0ZTWU5DCUJJVF83UwkvKiBFbmFibGUgIGZvcmNlIG9mIHN5bmMgVHggcXVldWUgKi8KLSNkZWZpbmUgVFhBX0RJU19GU1lOQwlCSVRfNlMJLyogRGlzYWJsZSBmb3JjZSBvZiBzeW5jIFR4IHF1ZXVlICovCi0jZGVmaW5lIFRYQV9FTkFfQUxMT0MJQklUXzVTCS8qIEVuYWJsZSAgYWxsb2Mgb2YgZnJlZSBiYW5kd2lkdGggKi8KLSNkZWZpbmUgVFhBX0RJU19BTExPQwlCSVRfNFMJLyogRGlzYWJsZSBhbGxvYyBvZiBmcmVlIGJhbmR3aWR0aCAqLwotI2RlZmluZSBUWEFfU1RBUlRfUkMJQklUXzNTCS8qIFN0YXJ0IHN5bmMgUmF0ZSBDb250cm9sICovCi0jZGVmaW5lIFRYQV9TVE9QX1JDCQlCSVRfMlMJLyogU3RvcCAgc3luYyBSYXRlIENvbnRyb2wgKi8KLSNkZWZpbmUgVFhBX0VOQV9BUkIJCUJJVF8xUwkvKiBFbmFibGUgIFR4IEFyYml0ZXIgKi8KLSNkZWZpbmUgVFhBX0RJU19BUkIJCUJJVF8wUwkvKiBEaXNhYmxlIFR4IEFyYml0ZXIgKi8KLQotLyoJVFhBX1RFU1QJCSA4IGJpdAlUeCBBcmJpdGVyIFRlc3QgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJLyogQml0IDcuLiA2OglyZXNlcnZlZCAqLwotI2RlZmluZSBUWEFfSU5UX1RfT04JQklUXzVTCS8qIFR4IEFyYiBJbnRlcnZhbCBUaW1lciBUZXN0IE9uICovCi0jZGVmaW5lIFRYQV9JTlRfVF9PRkYJQklUXzRTCS8qIFR4IEFyYiBJbnRlcnZhbCBUaW1lciBUZXN0IE9mZiAqLwotI2RlZmluZSBUWEFfSU5UX1RfU1RFUAlCSVRfM1MJLyogVHggQXJiIEludGVydmFsIFRpbWVyIFN0ZXAgKi8KLSNkZWZpbmUgVFhBX0xJTV9UX09OCUJJVF8yUwkvKiBUeCBBcmIgTGltaXQgVGltZXIgVGVzdCBPbiAqLwotI2RlZmluZSBUWEFfTElNX1RfT0ZGCUJJVF8xUwkvKiBUeCBBcmIgTGltaXQgVGltZXIgVGVzdCBPZmYgKi8KLSNkZWZpbmUgVFhBX0xJTV9UX1NURVAJQklUXzBTCS8qIFR4IEFyYiBMaW1pdCBUaW1lciBTdGVwICovCi0KLS8qCVRYQV9TVEFUCQkgOCBiaXQJVHggQXJiaXRlciBTdGF0dXMgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJLyogQml0IDcuLiAxOglyZXNlcnZlZCAqLwotI2RlZmluZSBUWEFfUFJJT19YUwkJQklUXzBTCS8qIHN5bmMgcXVldWUgaGFzIHByaW8gdG8gc2VuZCAqLwotCi0vKglRX0JDCQkJMzIgYml0CUN1cnJlbnQgQnl0ZSBDb3VudGVyICovCi0JCQkJCQkJCS8qIEJpdCAzMS4uMTY6CXJlc2VydmVkICovCi0jZGVmaW5lIEJDX01BWAkJCTB4ZmZmZgkvKiBCaXQgMTUuLiAwOglCeXRlIGNvdW50ZXIgKi8KLQotLyogQk1VIENvbnRyb2wgU3RhdHVzIFJlZ2lzdGVycyAqLwotLyoJQjBfUjFfQ1NSCQkzMiBiaXQJQk1VIEN0cmwvU3RhdCBSeCBRdWV1ZSAxICovCi0vKglCMF9SMl9DU1IJCTMyIGJpdAlCTVUgQ3RybC9TdGF0IFJ4IFF1ZXVlIDIgKi8KLS8qCUIwX1hBMV9DU1IJCTMyIGJpdAlCTVUgQ3RybC9TdGF0IFN5bmMgVHggUXVldWUgMSAqLwotLyoJQjBfWFMxX0NTUgkJMzIgYml0CUJNVSBDdHJsL1N0YXQgQXN5bmMgVHggUXVldWUgMSAqLwotLyoJQjBfWEEyX0NTUgkJMzIgYml0CUJNVSBDdHJsL1N0YXQgU3luYyBUeCBRdWV1ZSAyICovCi0vKglCMF9YUzJfQ1NSCQkzMiBiaXQJQk1VIEN0cmwvU3RhdCBBc3luYyBUeCBRdWV1ZSAyICovCi0vKglRX0NTUgkJCTMyIGJpdAlCTVUgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJLyogQml0IDMxLi4yNToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgQ1NSX1NWX0lETEUJCUJJVF8yNAkJLyogQk1VIFNNIElkbGUgKi8KLQkJCQkJCQkJLyogQml0IDIzLi4yMjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgQ1NSX0RFU0NfQ0xSCUJJVF8yMQkJLyogQ2xlYXIgUmVzZXQgZm9yIERlc2NyICovCi0jZGVmaW5lIENTUl9ERVNDX1NFVAlCSVRfMjAJCS8qIFNldCAgIFJlc2V0IGZvciBEZXNjciAqLwotI2RlZmluZSBDU1JfRklGT19DTFIJQklUXzE5CQkvKiBDbGVhciBSZXNldCBmb3IgRklGTyAqLwotI2RlZmluZSBDU1JfRklGT19TRVQJQklUXzE4CQkvKiBTZXQgICBSZXNldCBmb3IgRklGTyAqLwotI2RlZmluZSBDU1JfSFBJX1JVTgkJQklUXzE3CQkvKiBSZWxlYXNlIEhQSSBTTSAqLwotI2RlZmluZSBDU1JfSFBJX1JTVAkJQklUXzE2CQkvKiBSZXNldCAgIEhQSSBTTSB0byBJZGxlICovCi0jZGVmaW5lIENTUl9TVl9SVU4JCUJJVF8xNQkJLyogUmVsZWFzZSBTdXBlcnZpc29yIFNNICovCi0jZGVmaW5lIENTUl9TVl9SU1QJCUJJVF8xNAkJLyogUmVzZXQgICBTdXBlcnZpc29yIFNNICovCi0jZGVmaW5lIENTUl9EUkVBRF9SVU4JQklUXzEzCQkvKiBSZWxlYXNlIERlc2NyIFJlYWQgU00gKi8KLSNkZWZpbmUgQ1NSX0RSRUFEX1JTVAlCSVRfMTIJCS8qIFJlc2V0ICAgRGVzY3IgUmVhZCBTTSAqLwotI2RlZmluZSBDU1JfRFdSSVRFX1JVTglCSVRfMTEJCS8qIFJlbGVhc2UgRGVzY3IgV3JpdGUgU00gKi8KLSNkZWZpbmUgQ1NSX0RXUklURV9SU1QJQklUXzEwCQkvKiBSZXNldCAgIERlc2NyIFdyaXRlIFNNICovCi0jZGVmaW5lIENTUl9UUkFOU19SVU4JQklUXzkJCS8qIFJlbGVhc2UgVHJhbnNmZXIgU00gKi8KLSNkZWZpbmUgQ1NSX1RSQU5TX1JTVAlCSVRfOAkJLyogUmVzZXQgICBUcmFuc2ZlciBTTSAqLwotI2RlZmluZSBDU1JfRU5BX1BPTAkJQklUXzcJCS8qIEVuYWJsZSAgRGVzY3IgUG9sbGluZyAqLwotI2RlZmluZSBDU1JfRElTX1BPTAkJQklUXzYJCS8qIERpc2FibGUgRGVzY3IgUG9sbGluZyAqLwotI2RlZmluZSBDU1JfU1RPUAkJQklUXzUJCS8qIFN0b3AgIFJ4L1R4IFF1ZXVlICovCi0jZGVmaW5lIENTUl9TVEFSVAkJQklUXzQJCS8qIFN0YXJ0IFJ4L1R4IFF1ZXVlICovCi0jZGVmaW5lIENTUl9JUlFfQ0xfUAlCSVRfMwkJLyogKFJ4KQlDbGVhciBQYXJpdHkgSVJRICovCi0jZGVmaW5lIENTUl9JUlFfQ0xfQglCSVRfMgkJLyogQ2xlYXIgRU9CIElSUSAqLwotI2RlZmluZSBDU1JfSVJRX0NMX0YJQklUXzEJCS8qIENsZWFyIEVPRiBJUlEgKi8KLSNkZWZpbmUgQ1NSX0lSUV9DTF9DCUJJVF8wCQkvKiBDbGVhciBFUlIgSVJRICovCi0KLSNkZWZpbmUgQ1NSX1NFVF9SRVNFVAkoQ1NSX0RFU0NfU0VUIHwgQ1NSX0ZJRk9fU0VUIHwgQ1NSX0hQSV9SU1QgfFwKLQkJCQkJCUNTUl9TVl9SU1QgfCBDU1JfRFJFQURfUlNUIHwgQ1NSX0RXUklURV9SU1QgfFwKLQkJCQkJCUNTUl9UUkFOU19SU1QpCi0jZGVmaW5lIENTUl9DTFJfUkVTRVQJKENTUl9ERVNDX0NMUiB8IENTUl9GSUZPX0NMUiB8IENTUl9IUElfUlVOIHxcCi0JCQkJCQlDU1JfU1ZfUlVOIHwgQ1NSX0RSRUFEX1JVTiB8IENTUl9EV1JJVEVfUlVOIHxcCi0JCQkJCQlDU1JfVFJBTlNfUlVOKQotCi0vKglRX0YJCQkJMzIgYml0CUZsYWcgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJCS8qIEJpdCAzMS4uMjg6CXJlc2VydmVkICovCi0jZGVmaW5lIEZfQUxNX0ZVTEwJCUJJVF8yNwkJLyogUnggRklGTzogYWxtb3N0IGZ1bGwgKi8KLSNkZWZpbmUgRl9FTVBUWQkJCUJJVF8yNwkJLyogVHggRklGTzogZW1wdHkgZmxhZyAqLwotI2RlZmluZSBGX0ZJRk9fRU9GCQlCSVRfMjYJCS8qIFRhZyAoRU9GIEZsYWcpIGJpdCBpbiBGSUZPICovCi0jZGVmaW5lIEZfV01fUkVBQ0hFRAlCSVRfMjUJCS8qIFdhdGVybWFyayByZWFjaGVkICovCi0JCQkJCQkJCQkvKiByZXNlcnZlZCAqLwotI2RlZmluZSBGX0ZJRk9fTEVWRUwJKDB4MWZMPDwxNikJLyogQml0IDIzLi4xNjoJIyBvZiBRd29yZHMgaW4gRklGTyAqLwotCQkJCQkJCQkJLyogQml0IDE1Li4xMTogCXJlc2VydmVkICovCi0jZGVmaW5lIEZfV0FURVJfTUFSSwkweDAwMDdmZkwJLyogQml0IDEwLi4gMDoJV2F0ZXJtYXJrICovCi0KLS8qCVFfVDEJCQkzMiBiaXQJVGVzdCBSZWdpc3RlciAxICovCi0vKgkJSG9sZHMgZm91ciBTdGF0ZSBNYWNoaW5lIGNvbnRyb2wgQnl0ZXMgKi8KLSNkZWZpbmUgU01fQ1RSTF9TVl9NU0sJKDB4ZmZMPDwyNCkJLyogQml0IDMxLi4yNDoJQ29udHJvbCBTdXBlcnZpc29yIFNNICovCi0jZGVmaW5lIFNNX0NUUkxfUkRfTVNLCSgweGZmTDw8MTYpCS8qIEJpdCAyMy4uMTY6CUNvbnRyb2wgUmVhZCBEZXNjIFNNICovCi0jZGVmaW5lIFNNX0NUUkxfV1JfTVNLCSgweGZmTDw8OCkJLyogQml0IDE1Li4gODoJQ29udHJvbCBXcml0ZSBEZXNjIFNNICovCi0jZGVmaW5lIFNNX0NUUkxfVFJfTVNLCTB4ZmZMCQkvKiBCaXQJNy4uIDA6CUNvbnRyb2wgVHJhbnNmZXIgU00gKi8KLQotLyoJUV9UMV9UUgkJCSA4IGJpdAlUZXN0IFJlZ2lzdGVyIDEgVHJhbnNmZXIgU00gKi8KLS8qCVFfVDFfV1IJCQkgOCBiaXQJVGVzdCBSZWdpc3RlciAxIFdyaXRlIERlc2NyaXB0b3IgU00gKi8KLS8qCVFfVDFfUkQJCQkgOCBiaXQJVGVzdCBSZWdpc3RlciAxIFJlYWQgRGVzY3JpcHRvciBTTSAqLwotLyoJUV9UMV9TVgkJCSA4IGJpdAlUZXN0IFJlZ2lzdGVyIDEgU3VwZXJ2aXNvciBTTSAqLwotCi0vKiBUaGUgY29udHJvbCBzdGF0dXMgYnl0ZSBvZiBlYWNoIG1hY2hpbmUgbG9va3MgbGlrZSAuLi4gKi8KLSNkZWZpbmUgU01fU1RBVEUJCTB4ZjAJLyogQml0IDcuLiA0OglTdGF0ZSB3aGljaCBzaGFsbCBiZSBsb2FkZWQgKi8KLSNkZWZpbmUgU01fTE9BRAkJCUJJVF8zUwkvKiBMb2FkIHRoZSBTTSB3aXRoIFNNX1NUQVRFICovCi0jZGVmaW5lIFNNX1RFU1RfT04JCUJJVF8yUwkvKiBTd2l0Y2ggb24gU00gVGVzdCBNb2RlICovCi0jZGVmaW5lIFNNX1RFU1RfT0ZGCQlCSVRfMVMJLyogR28gb2ZmIHRoZSBUZXN0IE1vZGUgKi8KLSNkZWZpbmUgU01fU1RFUAkJCUJJVF8wUwkvKiBTdGVwIHRoZSBTdGF0ZSBNYWNoaW5lICovCi0vKiBUaGUgZW5jb2Rpbmcgb2YgdGhlIHN0YXRlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEaWFnbm9zdGljcyBUb29sICovCi0KLS8qCVFfVDIJCQkzMiBiaXQJVGVzdCBSZWdpc3RlciAyCSovCi0JCQkJCQkJCS8qIEJpdCAzMS4uIDg6CXJlc2VydmVkICovCi0jZGVmaW5lIFQyX0FDX1RfT04JCUJJVF83CS8qIEFkZHJlc3MgQ291bnRlciBUZXN0IE1vZGUgb24gKi8KLSNkZWZpbmUgVDJfQUNfVF9PRkYJCUJJVF82CS8qIEFkZHJlc3MgQ291bnRlciBUZXN0IE1vZGUgb2ZmICovCi0jZGVmaW5lIFQyX0JDX1RfT04JCUJJVF81CS8qIEJ5dGUgQ291bnRlciBUZXN0IE1vZGUgb24gKi8KLSNkZWZpbmUgVDJfQkNfVF9PRkYJCUJJVF80CS8qIEJ5dGUgQ291bnRlciBUZXN0IE1vZGUgb2ZmICovCi0jZGVmaW5lIFQyX1NURVAwNAkJQklUXzMJLyogSW5jIEFDL0RlYyBCQyBieSA0ICovCi0jZGVmaW5lIFQyX1NURVAwMwkJQklUXzIJLyogSW5jIEFDL0RlYyBCQyBieSAzICovCi0jZGVmaW5lIFQyX1NURVAwMgkJQklUXzEJLyogSW5jIEFDL0RlYyBCQyBieSAyICovCi0jZGVmaW5lIFQyX1NURVAwMQkJQklUXzAJLyogSW5jIEFDL0RlYyBCQyBieSAxICovCi0KLS8qCVFfVDMJCQkzMiBiaXQJVGVzdCBSZWdpc3RlciAzCSovCi0JCQkJCQkJCS8qIEJpdCAzMS4uIDc6CXJlc2VydmVkICovCi0jZGVmaW5lIFQzX01VWF9NU0sJCSg3PDw0KQkvKiBCaXQgIDYuLiA0OglNdXggUG9zaXRpb24gKi8KLQkJCQkJCQkJLyogQml0ICAzOglyZXNlcnZlZCAqLwotI2RlZmluZSBUM19WUkFNX01TSwkJNwkJLyogQml0ICAyLi4gMDoJVmlydHVhbCBSQU0gQnVmZmVyIEFkZHJlc3MgKi8KLQotLyogUkFNIEJ1ZmZlciBSZWdpc3RlciBPZmZzZXRzLCB1c2UgUkJfQUREUihRdWV1ZSwgT2ZmcykgdG8gYWNjZXNzICovCi0vKglSQl9TVEFSVAkJMzIgYml0CVJBTSBCdWZmZXIgU3RhcnQgQWRkcmVzcyAqLwotLyoJUkJfRU5ECQkJMzIgYml0CVJBTSBCdWZmZXIgRW5kIEFkZHJlc3MgKi8KLS8qCVJCX1dQCQkJMzIgYml0CVJBTSBCdWZmZXIgV3JpdGUgUG9pbnRlciAqLwotLyoJUkJfUlAJCQkzMiBiaXQJUkFNIEJ1ZmZlciBSZWFkIFBvaW50ZXIgKi8KLS8qCVJCX1JYX1VUUFAJCTMyIGJpdAlSeCBVcHBlciBUaHJlc2hvbGQsIFBhdXNlIFBhY2sgKi8KLS8qCVJCX1JYX0xUUFAJCTMyIGJpdAlSeCBMb3dlciBUaHJlc2hvbGQsIFBhdXNlIFBhY2sgKi8KLS8qCVJCX1JYX1VUSFAJCTMyIGJpdAlSeCBVcHBlciBUaHJlc2hvbGQsIEhpZ2ggUHJpbyAqLwotLyoJUkJfUlhfTFRIUAkJMzIgYml0CVJ4IExvd2VyIFRocmVzaG9sZCwgSGlnaCBQcmlvICovCi0vKglSQl9QQwkJCTMyIGJpdAlSQU0gQnVmZmVyIFBhY2tldCBDb3VudGVyICovCi0vKglSQl9MRVYJCQkzMiBiaXQJUkFNIEJ1ZmZlciBMZXZlbCBSZWdpc3RlciAqLwotCQkJCS8qIEJpdCAzMS4uMTk6CXJlc2VydmVkICovCi0jZGVmaW5lIFJCX01TSwkweDAwMDdmZmZmCS8qIEJpdCAxOC4uIDA6CVJBTSBCdWZmZXIgUG9pbnRlciBCaXRzICovCi0KLS8qCVJCX1RTVDIJCQkgOCBiaXQJUkFNIEJ1ZmZlciBUZXN0IFJlZ2lzdGVyIDIgKi8KLQkJCQkJCQkJLyogQml0IDcuLiA0OglyZXNlcnZlZCAqLwotI2RlZmluZSBSQl9QQ19ERUMJCUJJVF8zUwkvKiBQYWNrZXQgQ291bnRlciBEZWNyZW0gKi8KLSNkZWZpbmUgUkJfUENfVF9PTgkJQklUXzJTCS8qIFBhY2tldCBDb3VudGVyIFRlc3QgT24gKi8KLSNkZWZpbmUgUkJfUENfVF9PRkYJCUJJVF8xUwkvKiBQYWNrZXQgQ291bnRlciBUc3QgT2ZmICovCi0jZGVmaW5lIFJCX1BDX0lOQwkJQklUXzBTCS8qIFBhY2tldCBDb3VudGVyIEluY3JlbSAqLwotCi0vKglSQl9UU1QxCQkJIDggYml0CVJBTSBCdWZmZXIgVGVzdCBSZWdpc3RlciAxICovCi0JCQkJCQkJLyogQml0IDc6CXJlc2VydmVkICovCi0jZGVmaW5lIFJCX1dQX1RfT04JCUJJVF82UwkvKiBXcml0ZSBQb2ludGVyIFRlc3QgT24gKi8KLSNkZWZpbmUgUkJfV1BfVF9PRkYJCUJJVF81UwkvKiBXcml0ZSBQb2ludGVyIFRlc3QgT2ZmICovCi0jZGVmaW5lIFJCX1dQX0lOQwkJQklUXzRTCS8qIFdyaXRlIFBvaW50ZXIgSW5jcmVtICovCi0JCQkJCQkJCS8qIEJpdCAzOglyZXNlcnZlZCAqLwotI2RlZmluZSBSQl9SUF9UX09OCQlCSVRfMlMJLyogUmVhZCBQb2ludGVyIFRlc3QgT24gKi8KLSNkZWZpbmUgUkJfUlBfVF9PRkYJCUJJVF8xUwkvKiBSZWFkIFBvaW50ZXIgVGVzdCBPZmYgKi8KLSNkZWZpbmUgUkJfUlBfREVDCQlCSVRfMFMJLyogUmVhZCBQb2ludGVyIERlY3JlbWVudCAqLwotCi0vKglSQl9DVFJMCQkJIDggYml0CVJBTSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgNy4uIDY6CXJlc2VydmVkICovCi0jZGVmaW5lIFJCX0VOQV9TVEZXRAlCSVRfNVMJLyogRW5hYmxlICBTdG9yZSAmIEZvcndhcmQgKi8KLSNkZWZpbmUgUkJfRElTX1NURldECUJJVF80UwkvKiBEaXNhYmxlIFN0b3JlICYgRm9yd2FyZCAqLwotI2RlZmluZSBSQl9FTkFfT1BfTUQJQklUXzNTCS8qIEVuYWJsZSAgT3BlcmF0aW9uIE1vZGUgKi8KLSNkZWZpbmUgUkJfRElTX09QX01ECUJJVF8yUwkvKiBEaXNhYmxlIE9wZXJhdGlvbiBNb2RlICovCi0jZGVmaW5lIFJCX1JTVF9DTFIJCUJJVF8xUwkvKiBDbGVhciBSQU0gQnVmIFNUTSBSZXNldCAqLwotI2RlZmluZSBSQl9SU1RfU0VUCQlCSVRfMFMJLyogU2V0ICAgUkFNIEJ1ZiBTVE0gUmVzZXQgKi8KLQotCi0vKiBSZWNlaXZlIGFuZCBUcmFuc21pdCBNQUMgRklGTyBSZWdpc3RlcnMgKEdFTkVTSVMgb25seSkgKi8KLQotLyoJUlhfTUZGX0VBCQkzMiBiaXQJUmVjZWl2ZSBNQUMgRklGTyBFbmQgQWRkcmVzcyAqLwotLyoJUlhfTUZGX1dQCQkzMiBiaXQgCVJlY2VpdmUgTUFDIEZJRk8gV3JpdGUgUG9pbnRlciAqLwotLyoJUlhfTUZGX1JQCQkzMiBiaXQJUmVjZWl2ZSBNQUMgRklGTyBSZWFkIFBvaW50ZXIgKi8KLS8qCVJYX01GRl9QQwkJMzIgYml0CVJlY2VpdmUgTUFDIEZJRk8gUGFja2V0IENvdW50ZXIgKi8KLS8qCVJYX01GRl9MRVYJCTMyIGJpdAlSZWNlaXZlIE1BQyBGSUZPIExldmVsICovCi0vKglUWF9NRkZfRUEJCTMyIGJpdAlUcmFuc21pdCBNQUMgRklGTyBFbmQgQWRkcmVzcyAqLwotLyoJVFhfTUZGX1dQCQkzMiBiaXQgCVRyYW5zbWl0IE1BQyBGSUZPIFdyaXRlIFBvaW50ZXIgKi8KLS8qCVRYX01GRl9XU1AJCTMyIGJpdAlUcmFuc21pdCBNQUMgRklGTyBXUiBTaGFkb3cgUG9pbnRlciAqLwotLyoJVFhfTUZGX1JQCQkzMiBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gUmVhZCBQb2ludGVyICovCi0vKglUWF9NRkZfUEMJCTMyIGJpdAlUcmFuc21pdCBNQUMgRklGTyBQYWNrZXQgQ250ICovCi0vKglUWF9NRkZfTEVWCQkzMiBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gTGV2ZWwgKi8KLQkJCQkJCQkJLyogQml0IDMxLi4gNjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTUZGX01TSwkJCTB4MDA3ZkwJLyogQml0CTUuLiAwOglNQUMgRklGTyBBZGRyZXNzL1B0ciBCaXRzICovCi0KLS8qCVJYX01GRl9DVFJMMQkxNiBiaXQJUmVjZWl2ZSBNQUMgRklGTyBDb250cm9sIFJlZyAxICovCi0JCQkJCQkJCS8qIEJpdCAxNS4uMTQ6CXJlc2VydmVkICovCi0jZGVmaW5lIE1GRl9FTkFfUkRZX1BBVAlCSVRfMTNTCQkvKiBFbmFibGUgIFJlYWR5IFBhdGNoICovCi0jZGVmaW5lIE1GRl9ESVNfUkRZX1BBVAlCSVRfMTJTCQkvKiBEaXNhYmxlIFJlYWR5IFBhdGNoICovCi0jZGVmaW5lIE1GRl9FTkFfVElNX1BBVAlCSVRfMTFTCQkvKiBFbmFibGUgIFRpbWluZyBQYXRjaCAqLwotI2RlZmluZSBNRkZfRElTX1RJTV9QQVQJQklUXzEwUwkJLyogRGlzYWJsZSBUaW1pbmcgUGF0Y2ggKi8KLSNkZWZpbmUgTUZGX0VOQV9BTE1fRlVMCUJJVF85UwkJLyogRW5hYmxlICBBbG1vc3RGdWxsIFNpZ24gKi8KLSNkZWZpbmUgTUZGX0RJU19BTE1fRlVMCUJJVF84UwkJLyogRGlzYWJsZSBBbG1vc3RGdWxsIFNpZ24gKi8KLSNkZWZpbmUgTUZGX0VOQV9QQVVTRQlCSVRfN1MJCS8qIEVuYWJsZSAgUGF1c2UgU2lnbmFsaW5nICovCi0jZGVmaW5lIE1GRl9ESVNfUEFVU0UJQklUXzZTCQkvKiBEaXNhYmxlIFBhdXNlIFNpZ25hbGluZyAqLwotI2RlZmluZSBNRkZfRU5BX0ZMVVNICUJJVF81UwkJLyogRW5hYmxlICBGcmFtZSBGbHVzaGluZyAqLwotI2RlZmluZSBNRkZfRElTX0ZMVVNICUJJVF80UwkJLyogRGlzYWJsZSBGcmFtZSBGbHVzaGluZyAqLwotI2RlZmluZSBNRkZfRU5BX1RJU1QJQklUXzNTCQkvKiBFbmFibGUgIFRpbWUgU3RhbXAgR2VuZXIgKi8KLSNkZWZpbmUgTUZGX0RJU19USVNUCUJJVF8yUwkJLyogRGlzYWJsZSBUaW1lIFN0YW1wIEdlbmVyICovCi0jZGVmaW5lIE1GRl9DTFJfSU5USVNUCUJJVF8xUwkJLyogQ2xlYXIgSVJRIE5vIFRpbWUgU3RhbXAgKi8KLSNkZWZpbmUgTUZGX0NMUl9JTlNUQVQJQklUXzBTCQkvKiBDbGVhciBJUlEgTm8gU3RhdHVzICovCi0KLSNkZWZpbmUgTUZGX1JYX0NUUkxfREVGIE1GRl9FTkFfVElNX1BBVAotCi0vKglUWF9NRkZfQ1RSTDEJMTYgYml0CVRyYW5zbWl0IE1BQyBGSUZPIENvbnRyb2wgUmVnIDEgKi8KLSNkZWZpbmUgTUZGX0NMUl9QRVJSCUJJVF8xNVMJCS8qIENsZWFyIFBhcml0eSBFcnJvciBJUlEgKi8KLQkJCQkJCQkJLyogQml0IDE0OglyZXNlcnZlZCAqLwotI2RlZmluZSBNRkZfRU5BX1BLVF9SRUMJQklUXzEzUwkJLyogRW5hYmxlICBQYWNrZXQgUmVjb3ZlcnkgKi8KLSNkZWZpbmUgTUZGX0RJU19QS1RfUkVDIEJJVF8xMlMJCS8qIERpc2FibGUgUGFja2V0IFJlY292ZXJ5ICovCi0vKglNRkZfRU5BX1RJTV9QQVQJIChzZWUgUlhfTUZGX0NUUkwxKSBCaXQgMTE6CUVuYWJsZSAgVGltaW5nIFBhdGNoICovCi0vKglNRkZfRElTX1RJTV9QQVQJIChzZWUgUlhfTUZGX0NUUkwxKSBCaXQgMTA6CURpc2FibGUgVGltaW5nIFBhdGNoICovCi0vKglNRkZfRU5BX0FMTV9GVUwJIChzZWUgUlhfTUZGX0NUUkwxKSBCaXQJIDk6CUVuYWJsZSAgQWxtb3N0IEZ1bGwgU2lnbiAqLwotLyoJTUZGX0RJU19BTE1fRlVMCSAoc2VlIFJYX01GRl9DVFJMMSkgQml0CSA4OglEaXNhYmxlIEFsbW9zdCBGdWxsIFNpZ24gKi8KLSNkZWZpbmUgTUZGX0VOQV9XNEUJCUJJVF83UwkJLyogRW5hYmxlICBXYWl0IGZvciBFbXB0eSAqLwotI2RlZmluZSBNRkZfRElTX1c0RQkJQklUXzZTCQkvKiBEaXNhYmxlIFdhaXQgZm9yIEVtcHR5ICovCi0vKglNRkZfRU5BX0ZMVVNICSAoc2VlIFJYX01GRl9DVFJMMSkgQml0CSA1OglFbmFibGUgIEZyYW1lIEZsdXNoaW5nICovCi0vKglNRkZfRElTX0ZMVVNICSAoc2VlIFJYX01GRl9DVFJMMSkgQml0CSA0OglEaXNhYmxlIEZyYW1lIEZsdXNoaW5nICovCi0jZGVmaW5lIE1GRl9FTkFfTE9PUEIJQklUXzNTCQkvKiBFbmFibGUgIExvb3BiYWNrICovCi0jZGVmaW5lIE1GRl9ESVNfTE9PUEIJQklUXzJTCQkvKiBEaXNhYmxlIExvb3BiYWNrICovCi0jZGVmaW5lIE1GRl9DTFJfTUFDX1JTVAlCSVRfMVMJCS8qIENsZWFyIFhNQUMgUmVzZXQgKi8KLSNkZWZpbmUgTUZGX1NFVF9NQUNfUlNUCUJJVF8wUwkJLyogU2V0ICAgWE1BQyBSZXNldCAqLwotCi0jZGVmaW5lIE1GRl9UWF9DVFJMX0RFRgkoTUZGX0VOQV9QS1RfUkVDIHwgTUZGX0VOQV9USU1fUEFUIHwgTUZGX0VOQV9GTFVTSCkKLQotLyoJUlhfTUZGX1RTVDIJIAkgOCBiaXQJUmVjZWl2ZSBNQUMgRklGTyBUZXN0IFJlZ2lzdGVyIDIgKi8KLS8qCVRYX01GRl9UU1QyCSAJIDggYml0CVRyYW5zbWl0IE1BQyBGSUZPIFRlc3QgUmVnaXN0ZXIgMiAqLwotCQkJCQkJCQkvKiBCaXQgNzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTUZGX1dTUF9UX09OCUJJVF82UwkvKiBUeDogV3JpdGUgU2hhZG93IFB0ciBUZXN0T24gKi8KLSNkZWZpbmUgTUZGX1dTUF9UX09GRglCSVRfNVMJLyogVHg6IFdyaXRlIFNoYWRvdyBQdHIgVHN0T2ZmICovCi0jZGVmaW5lIE1GRl9XU1BfSU5DCQlCSVRfNFMJLyogVHg6IFdyaXRlIFNoYWRvdyBQdHIgSW5jcmVtZW50ICovCi0jZGVmaW5lIE1GRl9QQ19ERUMJCUJJVF8zUwkvKiBQYWNrZXQgQ291bnRlciBEZWNyZW1lbnQgKi8KLSNkZWZpbmUgTUZGX1BDX1RfT04JCUJJVF8yUwkvKiBQYWNrZXQgQ291bnRlciBUZXN0IE9uICovCi0jZGVmaW5lIE1GRl9QQ19UX09GRglCSVRfMVMJLyogUGFja2V0IENvdW50ZXIgVGVzdCBPZmYgKi8KLSNkZWZpbmUgTUZGX1BDX0lOQwkJQklUXzBTCS8qIFBhY2tldCBDb3VudGVyIEluY3JlbWVudCAqLwotCi0vKglSWF9NRkZfVFNUMQkgCSA4IGJpdAlSZWNlaXZlIE1BQyBGSUZPIFRlc3QgUmVnaXN0ZXIgMSAqLwotLyoJVFhfTUZGX1RTVDEJIAkgOCBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gVGVzdCBSZWdpc3RlciAxICovCi0JCQkJCS8qIEJpdCA3OglyZXNlcnZlZCAqLwotI2RlZmluZSBNRkZfV1BfVF9PTgkJQklUXzZTCS8qIFdyaXRlIFBvaW50ZXIgVGVzdCBPbiAqLwotI2RlZmluZSBNRkZfV1BfVF9PRkYJQklUXzVTCS8qIFdyaXRlIFBvaW50ZXIgVGVzdCBPZmYgKi8KLSNkZWZpbmUgTUZGX1dQX0lOQwkJQklUXzRTCS8qIFdyaXRlIFBvaW50ZXIgSW5jcmVtICovCi0JCQkJCQkJLyogQml0IDM6CXJlc2VydmVkICovCi0jZGVmaW5lIE1GRl9SUF9UX09OCQlCSVRfMlMJLyogUmVhZCBQb2ludGVyIFRlc3QgT24gKi8KLSNkZWZpbmUgTUZGX1JQX1RfT0ZGCUJJVF8xUwkvKiBSZWFkIFBvaW50ZXIgVGVzdCBPZmYgKi8KLSNkZWZpbmUgTUZGX1JQX0RFQwkJQklUXzBTCS8qIFJlYWQgUG9pbnRlciBEZWNyZW1lbnQgKi8KLQotLyoJUlhfTUZGX0NUUkwyCSA4IGJpdAlSZWNlaXZlIE1BQyBGSUZPIENvbnRyb2wgUmVnIDIgKi8KLS8qCVRYX01GRl9DVFJMMgkgOCBiaXQJVHJhbnNtaXQgTUFDIEZJRk8gQ29udHJvbCBSZWcgMiAqLwotCQkJCQkJCQkvKiBCaXQgNy4uNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTUZGX0VOQV9PUF9NRAlCSVRfM1MJLyogRW5hYmxlICBPcGVyYXRpb24gTW9kZSAqLwotI2RlZmluZSBNRkZfRElTX09QX01ECUJJVF8yUwkvKiBEaXNhYmxlIE9wZXJhdGlvbiBNb2RlICovCi0jZGVmaW5lIE1GRl9SU1RfQ0xSCQlCSVRfMVMJLyogQ2xlYXIgTUFDIEZJRk8gUmVzZXQgKi8KLSNkZWZpbmUgTUZGX1JTVF9TRVQJCUJJVF8wUwkvKiBTZXQgICBNQUMgRklGTyBSZXNldCAqLwotCi0KLS8qCUxpbmsgTEVEIENvdW50ZXIgUmVnaXN0ZXJzIChHRU5FU0lTIG9ubHkpICovCi0KLS8qCVJYX0xFRF9DVFJMCQkgOCBiaXQJUmVjZWl2ZSBMRUQgQ250IENvbnRyb2wgUmVnICovCi0vKglUWF9MRURfQ1RSTAkJIDggYml0CVRyYW5zbWl0IExFRCBDbnQgQ29udHJvbCBSZWcgKi8KLS8qCUxOS19TWU5DX0NUUkwJIDggYml0CUxpbmsgU3luYyBDbnQgQ29udHJvbCBSZWdpc3RlciAqLwotCQkJCQkJCS8qIEJpdCA3Li4gMzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTEVEX1NUQVJUCQlCSVRfMlMJLyogU3RhcnQgVGltZXIgKi8KLSNkZWZpbmUgTEVEX1NUT1AJCUJJVF8xUwkvKiBTdG9wIFRpbWVyICovCi0jZGVmaW5lIExFRF9TVEFURQkJQklUXzBTCS8qIFJ4L1R4OiBMRUQgU3RhdGUsIDE9TEVEIG9uICovCi0jZGVmaW5lIExFRF9DTFJfSVJRCQlCSVRfMFMJLyogTG5rOiAJQ2xlYXIgTGluayBJUlEgKi8KLQotLyoJUlhfTEVEX1RTVAkJIDggYml0CVJlY2VpdmUgTEVEIENudCBUZXN0IFJlZ2lzdGVyICovCi0vKglUWF9MRURfVFNUCQkgOCBiaXQJVHJhbnNtaXQgTEVEIENudCBUZXN0IFJlZ2lzdGVyICovCi0vKglMTktfU1lOQ19UU1QJIDggYml0CUxpbmsgU3luYyBDbnQgVGVzdCBSZWdpc3RlciAqLwotCQkJCQkJCS8qIEJpdCA3Li4gMzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTEVEX1RfT04JCUJJVF8yUwkvKiBMRUQgQ291bnRlciBUZXN0IG1vZGUgT24gKi8KLSNkZWZpbmUgTEVEX1RfT0ZGCQlCSVRfMVMJLyogTEVEIENvdW50ZXIgVGVzdCBtb2RlIE9mZiAqLwotI2RlZmluZSBMRURfVF9TVEVQCQlCSVRfMFMJLyogTEVEIENvdW50ZXIgU3RlcCAqLwotCi0vKglMTktfTEVEX1JFRwkgCSA4IGJpdAlMaW5rIExFRCBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgNy4uIDY6CXJlc2VydmVkICovCi0jZGVmaW5lIExFRF9CTEtfT04JCUJJVF81UwkvKiBMaW5rIExFRCBCbGlua2luZyBPbiAqLwotI2RlZmluZSBMRURfQkxLX09GRgkJQklUXzRTCS8qIExpbmsgTEVEIEJsaW5raW5nIE9mZiAqLwotI2RlZmluZSBMRURfU1lOQ19PTgkJQklUXzNTCS8qIFVzZSBTeW5jIFdpcmUgdG8gc3dpdGNoIExFRCAqLwotI2RlZmluZSBMRURfU1lOQ19PRkYJQklUXzJTCS8qIERpc2FibGUgU3luYyBXaXJlIElucHV0ICovCi0jZGVmaW5lIExFRF9PTgkJCUJJVF8xUwkvKiBzd2l0Y2ggTEVEIG9uICovCi0jZGVmaW5lIExFRF9PRkYJCQlCSVRfMFMJLyogc3dpdGNoIExFRCBvZmYgKi8KLQotLyoJUmVjZWl2ZSBhbmQgVHJhbnNtaXQgR01BQyBGSUZPIFJlZ2lzdGVycyAoWVVLT04gb25seSkgKi8KLQotLyoJUlhfR01GX0VBCQkzMiBiaXQJUnggR01BQyBGSUZPIEVuZCBBZGRyZXNzICovCi0vKglSWF9HTUZfQUZfVEhSCTMyIGJpdAlSeCBHTUFDIEZJRk8gQWxtb3N0IEZ1bGwgVGhyZXNoLiAqLwotLyoJUlhfR01GX1dQCQkzMiBiaXQgCVJ4IEdNQUMgRklGTyBXcml0ZSBQb2ludGVyICovCi0vKglSWF9HTUZfV0xFVgkJMzIgYml0IAlSeCBHTUFDIEZJRk8gV3JpdGUgTGV2ZWwgKi8KLS8qCVJYX0dNRl9SUAkJMzIgYml0IAlSeCBHTUFDIEZJRk8gUmVhZCBQb2ludGVyICovCi0vKglSWF9HTUZfUkxFVgkJMzIgYml0IAlSeCBHTUFDIEZJRk8gUmVhZCBMZXZlbCAqLwotLyoJVFhfR01GX0VBCQkzMiBiaXQJVHggR01BQyBGSUZPIEVuZCBBZGRyZXNzICovCi0vKglUWF9HTUZfQUVfVEhSCTMyIGJpdAlUeCBHTUFDIEZJRk8gQWxtb3N0IEVtcHR5IFRocmVzaC4qLwotLyoJVFhfR01GX1dQCQkzMiBiaXQgCVR4IEdNQUMgRklGTyBXcml0ZSBQb2ludGVyICovCi0vKglUWF9HTUZfV1NQCQkzMiBiaXQgCVR4IEdNQUMgRklGTyBXcml0ZSBTaGFkb3cgUHRyLiAqLwotLyoJVFhfR01GX1dMRVYJCTMyIGJpdCAJVHggR01BQyBGSUZPIFdyaXRlIExldmVsICovCi0vKglUWF9HTUZfUlAJCTMyIGJpdCAJVHggR01BQyBGSUZPIFJlYWQgUG9pbnRlciAqLwotLyoJVFhfR01GX1JTVFAJCTMyIGJpdCAJVHggR01BQyBGSUZPIFJlc3RhcnQgUG9pbnRlciAqLwotLyoJVFhfR01GX1JMRVYJCTMyIGJpdCAJVHggR01BQyBGSUZPIFJlYWQgTGV2ZWwgKi8KLQotLyoJUlhfR01GX0NUUkxfVAkzMiBiaXQJUnggR01BQyBGSUZPIENvbnRyb2wvVGVzdCAqLwotCQkJCQkJLyogQml0cyAzMS4uMTU6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNRl9XUF9UU1RfT04JQklUXzE0CQkvKiBXcml0ZSBQb2ludGVyIFRlc3QgT24gKi8KLSNkZWZpbmUgR01GX1dQX1RTVF9PRkYJQklUXzEzCQkvKiBXcml0ZSBQb2ludGVyIFRlc3QgT2ZmICovCi0jZGVmaW5lIEdNRl9XUF9TVEVQCQlCSVRfMTIJCS8qIFdyaXRlIFBvaW50ZXIgU3RlcC9JbmNyZW1lbnQgKi8KLQkJCQkJCS8qIEJpdCAxMToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR01GX1JQX1RTVF9PTglCSVRfMTAJCS8qIFJlYWQgUG9pbnRlciBUZXN0IE9uICovCi0jZGVmaW5lIEdNRl9SUF9UU1RfT0ZGCUJJVF85CQkvKiBSZWFkIFBvaW50ZXIgVGVzdCBPZmYgKi8KLSNkZWZpbmUgR01GX1JQX1NURVAJCUJJVF84CQkvKiBSZWFkIFBvaW50ZXIgU3RlcC9JbmNyZW1lbnQgKi8KLSNkZWZpbmUgR01GX1JYX0ZfRkxfT04JQklUXzcJCS8qIFJ4IEZJRk8gRmx1c2ggTW9kZSBPbiAqLwotI2RlZmluZSBHTUZfUlhfRl9GTF9PRkYJQklUXzYJCS8qIFJ4IEZJRk8gRmx1c2ggTW9kZSBPZmYgKi8KLSNkZWZpbmUgR01GX0NMSV9SWF9GTwlCSVRfNQkJLyogQ2xlYXIgSVJRIFJ4IEZJRk8gT3ZlcnJ1biAqLwotI2RlZmluZSBHTUZfQ0xJX1JYX0ZDCUJJVF80CQkvKiBDbGVhciBJUlEgUnggRnJhbWUgQ29tcGxldGUgKi8KLSNkZWZpbmUgR01GX09QRVJfT04JCUJJVF8zCQkvKiBPcGVyYXRpb25hbCBNb2RlIE9uICovCi0jZGVmaW5lIEdNRl9PUEVSX09GRglCSVRfMgkJLyogT3BlcmF0aW9uYWwgTW9kZSBPZmYgKi8KLSNkZWZpbmUgR01GX1JTVF9DTFIJCUJJVF8xCQkvKiBDbGVhciBHTUFDIEZJRk8gUmVzZXQgKi8KLSNkZWZpbmUgR01GX1JTVF9TRVQJCUJJVF8wCQkvKiBTZXQgICBHTUFDIEZJRk8gUmVzZXQgKi8KLQotLyoJVFhfR01GX0NUUkxfVAkzMiBiaXQJVHggR01BQyBGSUZPIENvbnRyb2wvVGVzdCAqLwotCQkJCQkJLyogQml0cyAzMS4uMTk6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNRl9XU1BfVFNUX09OCUJJVF8xOAkJLyogV3JpdGUgU2hhZG93IFBvaW50ZXIgVGVzdCBPbiAqLwotI2RlZmluZSBHTUZfV1NQX1RTVF9PRkYJQklUXzE3CQkvKiBXcml0ZSBTaGFkb3cgUG9pbnRlciBUZXN0IE9mZiAqLwotI2RlZmluZSBHTUZfV1NQX1NURVAJQklUXzE2CQkvKiBXcml0ZSBTaGFkb3cgUG9pbnRlciBTdGVwL0luY3JlbWVudCAqLwotCQkJCQkJLyogQml0cyAxNS4uNzogc2FtZSBhcyBmb3IgUlhfR01GX0NUUkxfVCAqLwotI2RlZmluZSBHTUZfQ0xJX1RYX0ZVCUJJVF82CQkvKiBDbGVhciBJUlEgVHggRklGTyBVbmRlcnJ1biAqLwotI2RlZmluZSBHTUZfQ0xJX1RYX0ZDCUJJVF81CQkvKiBDbGVhciBJUlEgVHggRnJhbWUgQ29tcGxldGUgKi8KLSNkZWZpbmUgR01GX0NMSV9UWF9QRQlCSVRfNAkJLyogQ2xlYXIgSVJRIFR4IFBhcml0eSBFcnJvciAqLwotCQkJCQkJLyogQml0cyAzLi4wOiBzYW1lIGFzIGZvciBSWF9HTUZfQ1RSTF9UICovCi0KLSNkZWZpbmUgR01GX1JYX0NUUkxfREVGCQkoR01GX09QRVJfT04gfCBHTUZfUlhfRl9GTF9PTikKLSNkZWZpbmUgR01GX1RYX0NUUkxfREVGCQlHTUZfT1BFUl9PTgotCi0jZGVmaW5lIFJYX0dNRl9GTF9USFJfREVGCTB4MGEJLyogUnggR01BQyBGSUZPIEZsdXNoIFRocmVzaG9sZCBkZWZhdWx0ICovCi0KLS8qCUdNQUNfVElfU1RfQ1RSTAkgOCBiaXQJVGltZSBTdGFtcCBUaW1lciBDdHJsIFJlZyAoWVVLT04gb25seSkgKi8KLQkJCQkJCQkJLyogQml0IDcuLiAzOglyZXNlcnZlZCAqLwotI2RlZmluZSBHTVRfU1RfU1RBUlQJQklUXzJTCQkvKiBTdGFydCBUaW1lIFN0YW1wIFRpbWVyICovCi0jZGVmaW5lIEdNVF9TVF9TVE9QCQlCSVRfMVMJCS8qIFN0b3AgIFRpbWUgU3RhbXAgVGltZXIgKi8KLSNkZWZpbmUgR01UX1NUX0NMUl9JUlEJQklUXzBTCQkvKiBDbGVhciBUaW1lIFN0YW1wIFRpbWVyIElSUSAqLwotCi0vKglHTUFDX0NUUkwJCTMyIGJpdAlHTUFDIENvbnRyb2wgUmVnIChZVUtPTiBvbmx5KSAqLwotCQkJCQkJLyogQml0cyAzMS4uIDg6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNQ19IX0JVUlNUX09OCUJJVF83CQkvKiBIYWxmIER1cGxleCBCdXJzdCBNb2RlIE9uICovCi0jZGVmaW5lIEdNQ19IX0JVUlNUX09GRglCSVRfNgkJLyogSGFsZiBEdXBsZXggQnVyc3QgTW9kZSBPZmYgKi8KLSNkZWZpbmUgR01DX0ZfTE9PUEJfT04JQklUXzUJCS8qIEZJRk8gTG9vcGJhY2sgT24gKi8KLSNkZWZpbmUgR01DX0ZfTE9PUEJfT0ZGCUJJVF80CQkvKiBGSUZPIExvb3BiYWNrIE9mZiAqLwotI2RlZmluZSBHTUNfUEFVU0VfT04JQklUXzMJCS8qIFBhdXNlIE9uICovCi0jZGVmaW5lIEdNQ19QQVVTRV9PRkYJQklUXzIJCS8qIFBhdXNlIE9mZiAqLwotI2RlZmluZSBHTUNfUlNUX0NMUgkJQklUXzEJCS8qIENsZWFyIEdNQUMgUmVzZXQgKi8KLSNkZWZpbmUgR01DX1JTVF9TRVQJCUJJVF8wCQkvKiBTZXQgICBHTUFDIFJlc2V0ICovCi0KLS8qCUdQSFlfQ1RSTAkJMzIgYml0CUdQSFkgQ29udHJvbCBSZWcgKFlVS09OIG9ubHkpICovCi0JCQkJCQkvKiBCaXRzIDMxLi4yOToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR1BDX1NFTF9CRFQJCUJJVF8yOAkvKiBTZWxlY3QgQmktRGlyLiBUcmFuc2ZlciBmb3IgTURDL01ESU8gKi8KLSNkZWZpbmUgR1BDX0lOVF9QT0xfSEkJQklUXzI3CS8qIElSUSBQb2xhcml0eSBpcyBBY3RpdmUgSElHSCAqLwotI2RlZmluZSBHUENfNzVfT0hNCQlCSVRfMjYJLyogVXNlIDc1IE9obSBUZXJtaW5hdGlvbiBpbnN0ZWFkIG9mIDUwICovCi0jZGVmaW5lIEdQQ19ESVNfRkMJCUJJVF8yNQkvKiBEaXNhYmxlIEF1dG9tYXRpYyBGaWJlci9Db3BwZXIgRGV0ZWN0aW9uICovCi0jZGVmaW5lIEdQQ19ESVNfU0xFRVAJQklUXzI0CS8qIERpc2FibGUgRW5lcmd5IERldGVjdCAqLwotI2RlZmluZSBHUENfSFdDRkdfTV8zCUJJVF8yMwkvKiBIV0NGR19NT0RFWzNdICovCi0jZGVmaW5lIEdQQ19IV0NGR19NXzIJQklUXzIyCS8qIEhXQ0ZHX01PREVbMl0gKi8KLSNkZWZpbmUgR1BDX0hXQ0ZHX01fMQlCSVRfMjEJLyogSFdDRkdfTU9ERVsxXSAqLwotI2RlZmluZSBHUENfSFdDRkdfTV8wCUJJVF8yMAkvKiBIV0NGR19NT0RFWzBdICovCi0jZGVmaW5lIEdQQ19BTkVHXzAJCUJJVF8xOQkvKiBBTkVHWzBdICovCi0jZGVmaW5lIEdQQ19FTkFfWEMJCUJJVF8xOAkvKiBFbmFibGUgTURJIGNyb3Nzb3ZlciAqLwotI2RlZmluZSBHUENfRElTXzEyNQkJQklUXzE3CS8qIERpc2FibGUgMTI1IE1IeiBjbG9jayAqLwotI2RlZmluZSBHUENfQU5FR18zCQlCSVRfMTYJLyogQU5FR1szXSAqLwotI2RlZmluZSBHUENfQU5FR18yCQlCSVRfMTUJLyogQU5FR1syXSAqLwotI2RlZmluZSBHUENfQU5FR18xCQlCSVRfMTQJLyogQU5FR1sxXSAqLwotI2RlZmluZSBHUENfRU5BX1BBVVNFCUJJVF8xMwkvKiBFbmFibGUgUGF1c2UgKFNZTV9PUl9SRU0pICovCi0jZGVmaW5lIEdQQ19QSFlBRERSXzQJQklUXzEyCS8qIEJpdCA0IG9mIFBoeSBBZGRyICovCi0jZGVmaW5lIEdQQ19QSFlBRERSXzMJQklUXzExCS8qIEJpdCAzIG9mIFBoeSBBZGRyICovCi0jZGVmaW5lIEdQQ19QSFlBRERSXzIJQklUXzEwCS8qIEJpdCAyIG9mIFBoeSBBZGRyICovCi0jZGVmaW5lIEdQQ19QSFlBRERSXzEJQklUXzkJLyogQml0IDEgb2YgUGh5IEFkZHIgKi8KLSNkZWZpbmUgR1BDX1BIWUFERFJfMAlCSVRfOAkvKiBCaXQgMCBvZiBQaHkgQWRkciAqLwotCQkJCQkJLyogQml0cyAgNy4uMjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR1BDX1JTVF9DTFIJCUJJVF8xCS8qIENsZWFyIEdQSFkgUmVzZXQgKi8KLSNkZWZpbmUgR1BDX1JTVF9TRVQJCUJJVF8wCS8qIFNldCAgIEdQSFkgUmVzZXQgKi8KLQotI2RlZmluZSBHUENfSFdDRkdfR01JSV9DT1AJKEdQQ19IV0NGR19NXzMgfCBHUENfSFdDRkdfTV8yIHwgXAotCQkJCQkJCSBHUENfSFdDRkdfTV8xIHwgR1BDX0hXQ0ZHX01fMCkKLQotI2RlZmluZSBHUENfSFdDRkdfR01JSV9GSUIJKAkJCQkgR1BDX0hXQ0ZHX01fMiB8IFwKLQkJCQkJCQkgR1BDX0hXQ0ZHX01fMSB8IEdQQ19IV0NGR19NXzApCi0KLSNkZWZpbmUgR1BDX0FORUdfQURWX0FMTF9NCShHUENfQU5FR18zIHwgR1BDX0FORUdfMiB8IFwKLQkJCQkJCQkgR1BDX0FORUdfMSB8IEdQQ19BTkVHXzApCi0KLS8qIGZvcmNlZCBzcGVlZCBhbmQgZHVwbGV4IG1vZGUgKGRvbid0IG1peCB3aXRoIG90aGVyIEFORUcgYml0cykgKi8KLSNkZWZpbmUgR1BDX0ZSQzEwTUJJVF9IQUxGCTAKLSNkZWZpbmUgR1BDX0ZSQzEwTUJJVF9GVUxMCUdQQ19BTkVHXzAKLSNkZWZpbmUgR1BDX0ZSQzEwME1CSVRfSEFMRglHUENfQU5FR18xCi0jZGVmaW5lIEdQQ19GUkMxMDBNQklUX0ZVTEwJKEdQQ19BTkVHXzAgfCBHUENfQU5FR18xKQotCi0vKiBhdXRvLW5lZ290aWF0aW9uIHdpdGggbGltaXRlZCBhZHZlcnRpc2VkIHNwZWVkcyAqLwotLyogbWl4IG9ubHkgd2l0aCBtYXN0ZXIvc2xhdmUgc2V0dGluZ3MgKGZvciBjb3BwZXIpICovCi0jZGVmaW5lIEdQQ19BRFZfMTAwMF9IQUxGCUdQQ19BTkVHXzIKLSNkZWZpbmUgR1BDX0FEVl8xMDAwX0ZVTEwJR1BDX0FORUdfMwotI2RlZmluZSBHUENfQURWX0FMTAkJCShHUENfQU5FR18yIHwgR1BDX0FORUdfMykKLQotLyogbWFzdGVyL3NsYXZlIHNldHRpbmdzICovCi0vKiBvbmx5IGZvciBjb3BwZXIgd2l0aCAxMDAwIE1icHMgKi8KLSNkZWZpbmUgR1BDX0ZPUkNFX01BU1RFUgkwCi0jZGVmaW5lIEdQQ19GT1JDRV9TTEFWRQkJR1BDX0FORUdfMAotI2RlZmluZSBHUENfUFJFRl9NQVNURVIJCUdQQ19BTkVHXzEKLSNkZWZpbmUgR1BDX1BSRUZfU0xBVkUJCShHUENfQU5FR18xIHwgR1BDX0FORUdfMCkKLQotLyoJR01BQ19JUlFfU1JDCSA4IGJpdAlHTUFDIEludGVycnVwdCBTb3VyY2UgUmVnIChZVUtPTiBvbmx5KSAqLwotLyoJR01BQ19JUlFfTVNLCSA4IGJpdAlHTUFDIEludGVycnVwdCBNYXNrICAgUmVnIChZVUtPTiBvbmx5KSAqLwotI2RlZmluZSBHTV9JU19UWF9DT19PVglCSVRfNQkJLyogVHJhbnNtaXQgQ291bnRlciBPdmVyZmxvdyBJUlEgKi8KLSNkZWZpbmUgR01fSVNfUlhfQ09fT1YJQklUXzQJCS8qIFJlY2VpdmUgQ291bnRlciBPdmVyZmxvdyBJUlEgKi8KLSNkZWZpbmUgR01fSVNfVFhfRkZfVVIJQklUXzMJCS8qIFRyYW5zbWl0IEZJRk8gVW5kZXJydW4gKi8KLSNkZWZpbmUgR01fSVNfVFhfQ09NUEwJQklUXzIJCS8qIEZyYW1lIFRyYW5zbWlzc2lvbiBDb21wbGV0ZSAqLwotI2RlZmluZSBHTV9JU19SWF9GRl9PUglCSVRfMQkJLyogUmVjZWl2ZSBGSUZPIE92ZXJydW4gKi8KLSNkZWZpbmUgR01fSVNfUlhfQ09NUEwJQklUXzAJCS8qIEZyYW1lIFJlY2VwdGlvbiBDb21wbGV0ZSAqLwotCi0jZGVmaW5lIEdNQUNfREVGX01TSwkoR01fSVNfVFhfQ09fT1YgfCBHTV9JU19SWF9DT19PViB8IFwKLQkJCQkJCUdNX0lTX1RYX0ZGX1VSKQotCi0vKglHTUFDX0xJTktfQ1RSTAkxNiBiaXQJR01BQyBMaW5rIENvbnRyb2wgUmVnIChZVUtPTiBvbmx5KSAqLwotCQkJCQkJLyogQml0cyAxNS4uIDI6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNTENfUlNUX0NMUglCSVRfMVMJCS8qIENsZWFyIEdNQUMgTGluayBSZXNldCAqLwotI2RlZmluZSBHTUxDX1JTVF9TRVQJQklUXzBTCQkvKiBTZXQgICBHTUFDIExpbmsgUmVzZXQgKi8KLQotCi0vKglXT0xfQ1RSTF9TVEFUCTE2IGJpdAlXT0wgQ29udHJvbC9TdGF0dXMgUmVnICovCi0jZGVmaW5lIFdPTF9DVExfTElOS19DSEdfT0NDCQkJQklUXzE1UwotI2RlZmluZSBXT0xfQ1RMX01BR0lDX1BLVF9PQ0MJCQlCSVRfMTRTCi0jZGVmaW5lIFdPTF9DVExfUEFUVEVSTl9PQ0MJCQkJQklUXzEzUwotCi0jZGVmaW5lIFdPTF9DVExfQ0xFQVJfUkVTVUxUCQkJQklUXzEyUwotCi0jZGVmaW5lIFdPTF9DVExfRU5BX1BNRV9PTl9MSU5LX0NIRwkJQklUXzExUwotI2RlZmluZSBXT0xfQ1RMX0RJU19QTUVfT05fTElOS19DSEcJCUJJVF8xMFMKLSNkZWZpbmUgV09MX0NUTF9FTkFfUE1FX09OX01BR0lDX1BLVAlCSVRfOVMKLSNkZWZpbmUgV09MX0NUTF9ESVNfUE1FX09OX01BR0lDX1BLVAlCSVRfOFMKLSNkZWZpbmUgV09MX0NUTF9FTkFfUE1FX09OX1BBVFRFUk4JCUJJVF83UwotI2RlZmluZSBXT0xfQ1RMX0RJU19QTUVfT05fUEFUVEVSTgkJQklUXzZTCi0KLSNkZWZpbmUgV09MX0NUTF9FTkFfTElOS19DSEdfVU5JVAkJQklUXzVTCi0jZGVmaW5lIFdPTF9DVExfRElTX0xJTktfQ0hHX1VOSVQJCUJJVF80UwotI2RlZmluZSBXT0xfQ1RMX0VOQV9NQUdJQ19QS1RfVU5JVAkJQklUXzNTCi0jZGVmaW5lIFdPTF9DVExfRElTX01BR0lDX1BLVF9VTklUCQlCSVRfMlMKLSNkZWZpbmUgV09MX0NUTF9FTkFfUEFUVEVSTl9VTklUCQlCSVRfMVMKLSNkZWZpbmUgV09MX0NUTF9ESVNfUEFUVEVSTl9VTklUCQlCSVRfMFMKLQotI2RlZmluZSBXT0xfQ1RMX0RFRkFVTFQJCQkJXAotCShXT0xfQ1RMX0RJU19QTUVfT05fTElOS19DSEcgfAlcCi0JV09MX0NUTF9ESVNfUE1FX09OX1BBVFRFUk4gfAlcCi0JV09MX0NUTF9ESVNfUE1FX09OX01BR0lDX1BLVCB8CVwKLQlXT0xfQ1RMX0RJU19MSU5LX0NIR19VTklUIHwJCVwKLQlXT0xfQ1RMX0RJU19QQVRURVJOX1VOSVQgfAkJXAotCVdPTF9DVExfRElTX01BR0lDX1BLVF9VTklUKQotCi0vKglXT0xfTUFUQ0hfQ1RMCSA4IGJpdAlXT0wgTWF0Y2ggQ29udHJvbCBSZWcgKi8KLSNkZWZpbmUgV09MX0NUTF9QQVRUX0VOQSh4KQkJCQkoQklUXzAgPDwgKHgpKQotCi0jZGVmaW5lIFNLX05VTV9XT0xfUEFUVEVSTgkJNwotI2RlZmluZSBTS19QQVRURVJOX1BFUl9XT1JECQk0Ci0jZGVmaW5lIFNLX0JJVE1BU0tfUEFUVEVSTgkJNwotI2RlZmluZSBTS19QT1dfUEFUVEVSTl9MRU5HVEgJMTI4Ci0KLSNkZWZpbmUgV09MX0xFTkdUSF9NU0sJCTB4N2YKLSNkZWZpbmUgV09MX0xFTkdUSF9TSElGVAk4Ci0KLQotLyogUmVjZWl2ZSBhbmQgVHJhbnNtaXQgRGVzY3JpcHRvcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUcmFuc21pdCBEZXNjcmlwdG9yIHN0cnVjdCAqLwotdHlwZWRlZglzdHJ1Y3Qgc19Id1R4ZCB7Ci0JU0tfVTMyIHZvbGF0aWxlCVR4Q3RybDsJLyogVHJhbnNtaXQgQnVmZmVyIENvbnRyb2wgRmllbGQgKi8KLQlTS19VMzIJVHhOZXh0OwkJCS8qIFBoeXNpY2FsIEFkZHJlc3MgUG9pbnRlciB0byB0aGUgbmV4dCBUeEQgKi8KLQlTS19VMzIJVHhBZHJMbzsJCS8qIFBoeXNpY2FsIFR4IEJ1ZmZlciBBZGRyZXNzIGxvd2VyIGR3b3JkICovCi0JU0tfVTMyCVR4QWRySGk7CQkvKiBQaHlzaWNhbCBUeCBCdWZmZXIgQWRkcmVzcyB1cHBlciBkd29yZCAqLwotCVNLX1UzMglUeFN0YXQ7CQkJLyogVHJhbnNtaXQgRnJhbWUgU3RhdHVzIFdvcmQgKi8KLSNpZm5kZWYJU0tfVVNFX1JFVl9ERVNDCi0JU0tfVTE2CVR4VGNwT2ZmczsJCS8qIFRDUCBDaGVja3N1bSBDYWxjdWxhdGlvbiBTdGFydCBWYWx1ZSAqLwotCVNLX1UxNglUeFJlczE7CQkJLyogMTYgYml0IHJlc2VydmVkIGZpZWxkICovCi0JU0tfVTE2CVR4VGNwV3A7CQkvKiBUQ1AgQ2hlY2tzdW0gV3JpdGUgUG9zaXRpb24gKi8KLQlTS19VMTYJVHhUY3BTcDsJCS8qIFRDUCBDaGVja3N1bSBDYWxjdWxhdGlvbiBTdGFydCBQb3NpdGlvbiAqLwotI2Vsc2UJLyogU0tfVVNFX1JFVl9ERVNDICovCi0JU0tfVTE2CVR4UmVzMTsJCQkvKiAxNiBiaXQgcmVzZXJ2ZWQgZmllbGQgKi8KLQlTS19VMTYJVHhUY3BPZmZzOwkJLyogVENQIENoZWNrc3VtIENhbGN1bGF0aW9uIFN0YXJ0IFZhbHVlICovCi0JU0tfVTE2CVR4VGNwU3A7CQkvKiBUQ1AgQ2hlY2tzdW0gQ2FsY3VsYXRpb24gU3RhcnQgUG9zaXRpb24gKi8KLQlTS19VMTYJVHhUY3BXcDsJCS8qIFRDUCBDaGVja3N1bSBXcml0ZSBQb3NpdGlvbiAqLwotI2VuZGlmCS8qIFNLX1VTRV9SRVZfREVTQyAqLwotCVNLX1UzMiAgVHhSZXMyOwkJCS8qIDMyIGJpdCByZXNlcnZlZCBmaWVsZCAqLwotfSBTS19IV1RYRDsKLQotLyogUmVjZWl2ZSBEZXNjcmlwdG9yIHN0cnVjdCAqLwotdHlwZWRlZglzdHJ1Y3Qgc19Id1J4ZCB7Ci0JU0tfVTMyIHZvbGF0aWxlIFJ4Q3RybDsJLyogUmVjZWl2ZSBCdWZmZXIgQ29udHJvbCBGaWVsZCAqLwotCVNLX1UzMglSeE5leHQ7CQkJLyogUGh5c2ljYWwgQWRkcmVzcyBQb2ludGVyIHRvIHRoZSBuZXh0IFJ4RCAqLwotCVNLX1UzMglSeEFkckxvOwkJLyogUGh5c2ljYWwgUnggQnVmZmVyIEFkZHJlc3MgbG93ZXIgZHdvcmQgKi8KLQlTS19VMzIJUnhBZHJIaTsJCS8qIFBoeXNpY2FsIFJ4IEJ1ZmZlciBBZGRyZXNzIHVwcGVyIGR3b3JkICovCi0JU0tfVTMyCVJ4U3RhdDsJCQkvKiBSZWNlaXZlIEZyYW1lIFN0YXR1cyBXb3JkICovCi0JU0tfVTMyCVJ4VGlTdDsJCQkvKiBSZWNlaXZlIFRpbWUgU3RhbXAgKGZyb20gWE1BQyBvbiBHRU5FU0lTKSAqLwotI2lmbmRlZglTS19VU0VfUkVWX0RFU0MKLQlTS19VMTYJUnhUY3BTdW0xOwkJLyogVENQIENoZWNrc3VtIDEgKi8KLQlTS19VMTYJUnhUY3BTdW0yOwkJLyogVENQIENoZWNrc3VtIDIgKi8KLQlTS19VMTYJUnhUY3BTcDE7CQkvKiBUQ1AgQ2hlY2tzdW0gQ2FsY3VsYXRpb24gU3RhcnQgUG9zaXRpb24gMSAqLwotCVNLX1UxNglSeFRjcFNwMjsJCS8qIFRDUCBDaGVja3N1bSBDYWxjdWxhdGlvbiBTdGFydCBQb3NpdGlvbiAyICovCi0jZWxzZQkvKiBTS19VU0VfUkVWX0RFU0MgKi8KLQlTS19VMTYJUnhUY3BTdW0yOwkJLyogVENQIENoZWNrc3VtIDIgKi8KLQlTS19VMTYJUnhUY3BTdW0xOwkJLyogVENQIENoZWNrc3VtIDEgKi8KLQlTS19VMTYJUnhUY3BTcDI7CQkvKiBUQ1AgQ2hlY2tzdW0gQ2FsY3VsYXRpb24gU3RhcnQgUG9zaXRpb24gMiAqLwotCVNLX1UxNglSeFRjcFNwMTsJCS8qIFRDUCBDaGVja3N1bSBDYWxjdWxhdGlvbiBTdGFydCBQb3NpdGlvbiAxICovCi0jZW5kaWYJLyogU0tfVVNFX1JFVl9ERVNDICovCi19IFNLX0hXUlhEOwotCi0vKgotICogRHJpdmVycyB3aGljaCB1c2UgdGhlIHJldmVyc2UgZGVzY3JpcHRvciBmZWF0dXJlIChQQ0lfT1VSX1JFR18yKQotICogc2hvdWxkIHNldCB0aGUgZGVmaW5lIFNLX1VTRV9SRVZfREVTQy4KLSAqIFN0cnVjdHVyZXMgYXJlICdub3JtYWx5JyBub3QgZW5kaWFuZXNzIGRlcGVuZGVudC4gQnV0IGluCi0gKiB0aGlzIGNhc2UgdGhlIFNLX1UxNiBmaWVsZHMgYXJlIGJvdW5kIHRvIGJpdCBwb3NpdGlvbnMgaW5zaWRlIHRoZQotICogZGVzY3JpcHRvci4gUnhUY3BTdW0xIGUuZy4gbXVzdCBzdGFydCBhdCBiaXQgMCB3aXRoaW4gdGhlIDYudGggRFdvcmQuCi0gKiBUaGUgYml0IHBvc2l0aW9ucyBpbnNpZGUgYSBEV29yZCBhcmUgb2YgY291cnNlIGVuZGlhbmVzcyBkZXBlbmRlbnQgYW5kCi0gKiBzd2FwcyBpZiB0aGUgRFdvcmQgaXMgc3dhcHBlZCBieSB0aGUgaGFyZHdhcmUuCi0gKi8KLQotCi0vKiBEZXNjcmlwdG9yIEJpdCBEZWZpbml0aW9uICovCi0vKglUeEN0cmwJCVRyYW5zbWl0IEJ1ZmZlciBDb250cm9sIEZpZWxkICovCi0vKglSeEN0cmwJCVJlY2VpdmUgIEJ1ZmZlciBDb250cm9sIEZpZWxkICovCi0jZGVmaW5lIEJNVV9PV04JCQlCSVRfMzEJLyogT1dOIGJpdDogMD1ob3N0LzE9Qk1VICovCi0jZGVmaW5lIEJNVV9TVEYJCQlCSVRfMzAJLyogU3RhcnQgb2YgRnJhbWUgKi8KLSNkZWZpbmUgQk1VX0VPRgkJCUJJVF8yOQkvKiBFbmQgb2YgRnJhbWUgKi8KLSNkZWZpbmUgQk1VX0lSUV9FT0IJCUJJVF8yOAkvKiBSZXEgIkVuZCBvZiBCdWZmZXIiIElSUSAqLwotI2RlZmluZSBCTVVfSVJRX0VPRgkJQklUXzI3CS8qIFJlcSAiRW5kIG9mIEZyYW1lIiBJUlEgKi8KLS8qIFR4Q3RybCBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIEJNVV9TVEZXRAkJQklUXzI2CS8qIChUeCkJU3RvcmUgJiBGb3J3YXJkIEZyYW1lICovCi0jZGVmaW5lIEJNVV9OT19GQ1MJCUJJVF8yNQkvKiAoVHgpIERpc2FibGUgTUFDIEZDUyAoQ1JDKSBnZW5lcmF0aW9uICovCi0jZGVmaW5lIEJNVV9TVwkJCUJJVF8yNAkvKiAoVHgpCTEgYml0IHJlcy4gZm9yIFNXIHVzZSAqLwotLyogUnhDdHJsIHNwZWNpZmljIGJpdHMgKi8KLSNkZWZpbmUgQk1VX0RFVl8wCQlCSVRfMjYJLyogKFJ4KQlUcmFuc2ZlciBkYXRhIHRvIERldjAgKi8KLSNkZWZpbmUgQk1VX1NUQVRfVkFMCUJJVF8yNQkvKiAoUngpCVJ4IFN0YXR1cyBWYWxpZCAqLwotI2RlZmluZSBCTVVfVElTVF9WQUwJQklUXzI0CS8qIChSeCkJUnggVGltZVN0YW1wIFZhbGlkICovCi0JCQkJCQkJCS8qIEJpdCAyMy4uMTY6CUJNVSBDaGVjayBPcGNvZGVzICovCi0jZGVmaW5lIEJNVV9DSEVDSwkJKDB4NTVMPDwxNikJLyogRGVmYXVsdCBCTVUgY2hlY2sgKi8KLSNkZWZpbmUgQk1VX1RDUF9DSEVDSwkoMHg1Nkw8PDE2KQkvKiBEZXNjciB3aXRoIFRDUCBleHQgKi8KLSNkZWZpbmUgQk1VX1VEUF9DSEVDSwkoMHg1N0w8PDE2KQkvKiBEZXNjciB3aXRoIFVEUCBleHQgKFlVS09OIG9ubHkpICovCi0jZGVmaW5lIEJNVV9CQkMJCQkweGZmZmZMCS8qIEJpdCAxNS4uIDA6CUJ1ZmZlciBCeXRlIENvdW50ZXIgKi8KLQotLyoJVHhTdGF0CQlUcmFuc21pdCBGcmFtZSBTdGF0dXMgV29yZCAqLwotLyoJUnhTdGF0CQlSZWNlaXZlIEZyYW1lIFN0YXR1cyBXb3JkICovCi0vKgotICpOb3RlOiBUeFN0YXQgaXMgcmVzZXJ2ZWQgZm9yIEFTSUMgbG9vcGJhY2sgbW9kZSBvbmx5Ci0gKgotICoJVGhlIEJpdHMgb2YgdGhlIFN0YXR1cyB3b3JkcyBhcmUgZGVmaW5lZCBpbiB4bWFjX2lpLmgKLSAqCShzZWUgWE1SX0ZTIGJpdHMpCi0gKi8KLQotLyogbWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBSZWNlaXZlIGFuZCBUcmFuc21pdCBRdWV1ZXMgKi8KLSNkZWZpbmUgUV9SMQkweDAwMDAJCS8qIFJlY2VpdmUgUXVldWUgMSAqLwotI2RlZmluZSBRX1IyCTB4MDA4MAkJLyogUmVjZWl2ZSBRdWV1ZSAyICovCi0jZGVmaW5lIFFfWFMxCTB4MDIwMAkJLyogU3luY2hyb25vdXMgVHJhbnNtaXQgUXVldWUgMSAqLwotI2RlZmluZSBRX1hBMQkweDAyODAJCS8qIEFzeW5jaHJvbm91cyBUcmFuc21pdCBRdWV1ZSAxICovCi0jZGVmaW5lIFFfWFMyCTB4MDMwMAkJLyogU3luY2hyb25vdXMgVHJhbnNtaXQgUXVldWUgMiAqLwotI2RlZmluZSBRX1hBMgkweDAzODAJCS8qIEFzeW5jaHJvbm91cyBUcmFuc21pdCBRdWV1ZSAyICovCi0KLS8qCi0gKglNYWNybyBRX0FERFIoKQotICoKLSAqCVVzZSB0aGlzIG1hY3JvIHRvIGFjY2VzcyB0aGUgUmVjZWl2ZSBhbmQgVHJhbnNtaXQgUXVldWUgUmVnaXN0ZXJzLgotICoKLSAqIHBhcmE6Ci0gKglRdWV1ZQlRdWV1ZSB0byBhY2Nlc3MuCi0gKgkJCQlWYWx1ZXM6IFFfUjEsIFFfUjIsIFFfWFMxLCBRX1hBMSwgUV9YUzIsIGFuZCBRX1hBMgotICoJT2ZmcwlRdWV1ZSByZWdpc3RlciBvZmZzZXQuCi0gKgkJCQlWYWx1ZXM6IFFfRCwgUV9EQV9MIC4uLiBRX1QyLCBRX1QzCi0gKgotICogdXNhZ2UJU0tfSU4zMihwQUMsIFFfQUREUihRX1IyLCBRX0JDKSwgcFZhbCkKLSAqLwotI2RlZmluZSBRX0FERFIoUXVldWUsIE9mZnMpCShCOF9RX1JFR1MgKyAoUXVldWUpICsgKE9mZnMpKQotCi0vKgotICoJTWFjcm8gUkJfQUREUigpCi0gKgotICoJVXNlIHRoaXMgbWFjcm8gdG8gYWNjZXNzIHRoZSBSQU0gQnVmZmVyIFJlZ2lzdGVycy4KLSAqCi0gKiBwYXJhOgotICoJUXVldWUJUXVldWUgdG8gYWNjZXNzLgotICoJCQkJVmFsdWVzOiBRX1IxLCBRX1IyLCBRX1hTMSwgUV9YQTEsIFFfWFMyLCBhbmQgUV9YQTIKLSAqCU9mZnMJUXVldWUgcmVnaXN0ZXIgb2Zmc2V0LgotICoJCQkJVmFsdWVzOiBSQl9TVEFSVCwgUkJfRU5EIC4uLiBSQl9MRVYsIFJCX0NUUkwKLSAqCi0gKiB1c2FnZQlTS19JTjMyKHBBQywgUkJfQUREUihRX1IyLCBSQl9SUCksIHBWYWwpCi0gKi8KLSNkZWZpbmUgUkJfQUREUihRdWV1ZSwgT2ZmcykJKEIxNl9SQU1fUkVHUyArIChRdWV1ZSkgKyAoT2ZmcykpCi0KLQotLyogTUFDIFJlbGF0ZWQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIE1BQ18xCQkwCS8qIGJlbG9uZ3MgdG8gdGhlIHBvcnQgbmVhciB0aGUgc2xvdCAqLwotI2RlZmluZSBNQUNfMgkJMQkvKiBiZWxvbmdzIHRvIHRoZSBwb3J0IGZhciBhd2F5IGZyb20gdGhlIHNsb3QgKi8KLQotLyoKLSAqCU1hY3JvIE1SX0FERFIoKQotICoKLSAqCVVzZSB0aGlzIG1hY3JvIHRvIGFjY2VzcyBhIE1BQyBSZWxhdGVkIFJlZ2lzdGVycyBpbnNpZGUgdGhlIEFTSUMuCi0gKgotICogcGFyYToKLSAqCU1hYwkJTUFDIHRvIGFjY2Vzcy4KLSAqCQkJCVZhbHVlczogTUFDXzEsIE1BQ18yCi0gKglPZmZzCU1BQyByZWdpc3RlciBvZmZzZXQuCi0gKgkJCQlWYWx1ZXM6IFJYX01GRl9FQSwgUlhfTUZGX1dQIC4uLiBMTktfTEVEX1JFRywKLSAqCQkJCQkJVFhfTUZGX0VBLCBUWF9NRkZfV1AgLi4uIFRYX0xFRF9UU1QKLSAqCi0gKiB1c2FnZQlTS19JTjMyKHBBQywgTVJfQUREUihNQUNfMSwgVFhfTUZGX0VBKSwgcFZhbCkKLSAqLwotI2RlZmluZSBNUl9BRERSKE1hYywgT2ZmcykJKCgoTWFjKSA8PCA3KSArIChPZmZzKSkKLQotI2lmZGVmCVNLX0xJVFRMRV9FTkRJQU4KLSNkZWZpbmUgWE1fV09SRF9MTwkwCi0jZGVmaW5lIFhNX1dPUkRfSEkJMQotI2Vsc2UJLyogIVNLX0xJVFRMRV9FTkRJQU4gKi8KLSNkZWZpbmUgWE1fV09SRF9MTwkxCi0jZGVmaW5lIFhNX1dPUkRfSEkJMAotI2VuZGlmCS8qICFTS19MSVRUTEVfRU5ESUFOICovCi0KLQotLyoKLSAqIG1hY3JvcyB0byBhY2Nlc3MgdGhlIFhNQUMgKEdFTkVTSVMgb25seSkKLSAqCi0gKiBYTV9JTjE2KCksCQl0byByZWFkIGEgMTYgYml0IHJlZ2lzdGVyIChlLmcuIFhNX01NVV9DTUQpCi0gKiBYTV9PVVQxNigpLAkJdG8gd3JpdGUgYSAxNiBiaXQgcmVnaXN0ZXIgKGUuZy4gWE1fTU1VX0NNRCkKLSAqIFhNX0lOMzIoKSwJCXRvIHJlYWQgYSAzMiBiaXQgcmVnaXN0ZXIgKGUuZy4gWE1fVFhfRVZfQ05UKQotICogWE1fT1VUMzIoKSwJCXRvIHdyaXRlIGEgMzIgYml0IHJlZ2lzdGVyIChlLmcuIFhNX1RYX0VWX0NOVCkKLSAqIFhNX0lOQUREUigpLAkJdG8gcmVhZCBhIG5ldHdvcmsgYWRkcmVzcyByZWdpc3RlciAoZS5nLiBYTV9TUkNfQ0hLKQotICogWE1fT1VUQUREUigpLAl0byB3cml0ZSBhIG5ldHdvcmsgYWRkcmVzcyByZWdpc3RlciAoZS5nLiBYTV9TUkNfQ0hLKQotICogWE1fSU5IQVNIKCksCQl0byByZWFkIHRoZSBYTV9IU01fQ0hLIHJlZ2lzdGVyCi0gKiBYTV9PVVRIQVNIKCkJCXRvIHdyaXRlIHRoZSBYTV9IU01fQ0hLIHJlZ2lzdGVyCi0gKgotICogcGFyYToKLSAqCU1hYwkJWE1BQyB0byBhY2Nlc3MJCXZhbHVlczogTUFDXzEgb3IgTUFDXzIKLSAqCUlvQwkJSS9PIGNvbnRleHQgbmVlZGVkIGZvciBTSyBJL08gbWFjcm9zCi0gKglSZWcJCVhNQUMgUmVnaXN0ZXIgdG8gcmVhZCBvciB3cml0ZQotICoJKHApVmFsCVZhbHVlIG9yIHBvaW50ZXIgdG8gdGhlIHZhbHVlIHdoaWNoIHNob3VsZCBiZSByZWFkIG9yIHdyaXR0ZW4KLSAqCi0gKiB1c2FnZToJWE1fT1VUMTYoSW9DLCBNQUNfMSwgWE1fTU1VX0NNRCwgVmFsdWUpOwotICovCi0KLSNkZWZpbmUgWE1BKE1hYywgUmVnKQkJCQkJCQkJCVwKLQkoKEJBU0VfWE1BQ18xICsgKE1hYykgKiAoQkFTRV9YTUFDXzIgLSBCQVNFX1hNQUNfMSkpIHwgKChSZWcpIDw8IDEpKQotCi0jZGVmaW5lIFhNX0lOMTYoSW9DLCBNYWMsIFJlZywgcFZhbCkJCQkJCVwKLQlTS19JTjE2KChJb0MpLCBYTUEoKE1hYyksIChSZWcpKSwgKHBWYWwpKQotCi0jZGVmaW5lIFhNX09VVDE2KElvQywgTWFjLCBSZWcsIFZhbCkJCQkJCVwKLQlTS19PVVQxNigoSW9DKSwgWE1BKChNYWMpLCAoUmVnKSksIChWYWwpKQotCi0jZGVmaW5lIFhNX0lOMzIoSW9DLCBNYWMsIFJlZywgcFZhbCkgewkJCQkJXAotCVNLX0lOMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZykpLAkJCQkJXAotCQkoU0tfVTE2IFNLX0ZBUiopJigoU0tfVTE2IFNLX0ZBUiopKHBWYWwpKVtYTV9XT1JEX0xPXSk7CQlcCi0JU0tfSU4xNigoSW9DKSwgWE1BKChNYWMpLCAoUmVnKzIpKSwJCQkJCVwKLQkJKFNLX1UxNiBTS19GQVIqKSYoKFNLX1UxNiBTS19GQVIqKShwVmFsKSlbWE1fV09SRF9ISV0pOwkJXAotfQotCi0jZGVmaW5lIFhNX09VVDMyKElvQywgTWFjLCBSZWcsIFZhbCkgewkJCQkJCQkJCQlcCi0JU0tfT1VUMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZykpLCAoU0tfVTE2KSgoVmFsKSAmIDB4ZmZmZkwpKTsJCQlcCi0JU0tfT1VUMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZysyKSksIChTS19VMTYpKCgoVmFsKSA+PiAxNikgJiAweGZmZmZMKSk7XAotfQotCi0vKiBSZW1lbWJlcjogd2UgYXJlIGFsd2F5cyB3cml0aW5nIHRvIC8gcmVhZGluZyBmcm9tIExJVFRMRSBFTkRJQU4gbWVtb3J5ICovCi0KLSNkZWZpbmUgWE1fSU5BRERSKElvQywgTWFjLCBSZWcsIHBWYWwpIHsJCQkJXAotCVNLX1UxNglXb3JkOwkJCQkJCQkJCQlcCi0JU0tfVTgJKnBCeXRlOwkJCQkJCQkJCQlcCi0JcEJ5dGUgPSAoU0tfVTggKikmKChTS19VOCAqKShwVmFsKSlbMF07CQkJCVwKLQlTS19JTjE2KChJb0MpLCBYTUEoKE1hYyksIChSZWcpKSwgJldvcmQpOwkJCVwKLQlwQnl0ZVswXSA9IChTS19VOCkoV29yZCAgJiAweDAwZmYpOwkJCQkJXAotCXBCeXRlWzFdID0gKFNLX1U4KSgoV29yZCA+PiA4KSAmIDB4MDBmZik7CQkJXAotCVNLX0lOMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZysyKSksICZXb3JkKTsJCQlcCi0JcEJ5dGVbMl0gPSAoU0tfVTgpKFdvcmQgICYgMHgwMGZmKTsJCQkJCVwKLQlwQnl0ZVszXSA9IChTS19VOCkoKFdvcmQgPj4gOCkgJiAweDAwZmYpOwkJCVwKLQlTS19JTjE2KChJb0MpLCBYTUEoKE1hYyksIChSZWcrNCkpLCAmV29yZCk7CQkJXAotCXBCeXRlWzRdID0gKFNLX1U4KShXb3JkICAmIDB4MDBmZik7CQkJCQlcCi0JcEJ5dGVbNV0gPSAoU0tfVTgpKChXb3JkID4+IDgpICYgMHgwMGZmKTsJCQlcCi19Ci0KLSNkZWZpbmUgWE1fT1VUQUREUihJb0MsIE1hYywgUmVnLCBwVmFsKSB7CQkJCVwKLQlTS19VOAlTS19GQVIgKnBCeXRlOwkJCQkJCQkJXAotCXBCeXRlID0gKFNLX1U4IFNLX0ZBUiAqKSYoKFNLX1U4IFNLX0ZBUiAqKShwVmFsKSlbMF07CVwKLQlTS19PVVQxNigoSW9DKSwgWE1BKChNYWMpLCAoUmVnKSksIChTS19VMTYpCQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzBdKSAmIDB4MDBmZikgfAkJCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbMV0pIDw8IDgpICYgMHhmZjAwKSkpOwkJCVwKLQlTS19PVVQxNigoSW9DKSwgWE1BKChNYWMpLCAoUmVnKzIpKSwgKFNLX1UxNikJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVsyXSkgJiAweDAwZmYpIHwJCQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzNdKSA8PCA4KSAmIDB4ZmYwMCkpKTsJCQlcCi0JU0tfT1VUMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZys0KSksIChTS19VMTYpCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbNF0pICYgMHgwMGZmKSB8CQkJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVs1XSkgPDwgOCkgJiAweGZmMDApKSk7CQkJXAotfQotCi0jZGVmaW5lIFhNX0lOSEFTSChJb0MsIE1hYywgUmVnLCBwVmFsKSB7CQkJCVwKLQlTS19VMTYJV29yZDsJCQkJCQkJCQkJXAotCVNLX1U4CVNLX0ZBUiAqcEJ5dGU7CQkJCQkJCQlcCi0JcEJ5dGUgPSAoU0tfVTggU0tfRkFSICopJigoU0tfVTggU0tfRkFSICopKHBWYWwpKVswXTsJXAotCVNLX0lOMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZykpLCAmV29yZCk7CQkJXAotCXBCeXRlWzBdID0gKFNLX1U4KShXb3JkICAmIDB4MDBmZik7CQkJCQlcCi0JcEJ5dGVbMV0gPSAoU0tfVTgpKChXb3JkID4+IDgpICYgMHgwMGZmKTsJCQlcCi0JU0tfSU4xNigoSW9DKSwgWE1BKChNYWMpLCAoUmVnKzIpKSwgJldvcmQpOwkJCVwKLQlwQnl0ZVsyXSA9IChTS19VOCkoV29yZCAgJiAweDAwZmYpOwkJCQkJXAotCXBCeXRlWzNdID0gKFNLX1U4KSgoV29yZCA+PiA4KSAmIDB4MDBmZik7CQkJXAotCVNLX0lOMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZys0KSksICZXb3JkKTsJCQlcCi0JcEJ5dGVbNF0gPSAoU0tfVTgpKFdvcmQgICYgMHgwMGZmKTsJCQkJCVwKLQlwQnl0ZVs1XSA9IChTS19VOCkoKFdvcmQgPj4gOCkgJiAweDAwZmYpOwkJCVwKLQlTS19JTjE2KChJb0MpLCBYTUEoKE1hYyksIChSZWcrNikpLCAmV29yZCk7CQkJXAotCXBCeXRlWzZdID0gKFNLX1U4KShXb3JkICAmIDB4MDBmZik7CQkJCQlcCi0JcEJ5dGVbN10gPSAoU0tfVTgpKChXb3JkID4+IDgpICYgMHgwMGZmKTsJCQlcCi19Ci0KLSNkZWZpbmUgWE1fT1VUSEFTSChJb0MsIE1hYywgUmVnLCBwVmFsKSB7CQkJCVwKLQlTS19VOAlTS19GQVIgKnBCeXRlOwkJCQkJCQkJXAotCXBCeXRlID0gKFNLX1U4IFNLX0ZBUiAqKSYoKFNLX1U4IFNLX0ZBUiAqKShwVmFsKSlbMF07CVwKLQlTS19PVVQxNigoSW9DKSwgWE1BKChNYWMpLCAoUmVnKSksIChTS19VMTYpCQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzBdKSAmIDB4MDBmZil8CQkJCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbMV0pIDw8IDgpICYgMHhmZjAwKSkpOwkJCVwKLQlTS19PVVQxNigoSW9DKSwgWE1BKChNYWMpLCAoUmVnKzIpKSwgKFNLX1UxNikJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVsyXSkgJiAweDAwZmYpfAkJCQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzNdKSA8PCA4KSAmIDB4ZmYwMCkpKTsJCQlcCi0JU0tfT1VUMTYoKElvQyksIFhNQSgoTWFjKSwgKFJlZys0KSksIChTS19VMTYpCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbNF0pICYgMHgwMGZmKXwJCQkJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVs1XSkgPDwgOCkgJiAweGZmMDApKSk7CQkJXAotCVNLX09VVDE2KChJb0MpLCBYTUEoKE1hYyksIChSZWcrNikpLCAoU0tfVTE2KQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzZdKSAmIDB4MDBmZil8CQkJCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbN10pIDw8IDgpICYgMHhmZjAwKSkpOwkJCVwKLX0KLQotLyoKLSAqIG1hY3JvcyB0byBhY2Nlc3MgdGhlIEdNQUMgKFlVS09OIG9ubHkpCi0gKgotICogR01fSU4xNigpLAkJdG8gcmVhZCAgYSAxNiBiaXQgcmVnaXN0ZXIgKGUuZy4gR01fR1BfU1RBVCkKLSAqIEdNX09VVDE2KCksCQl0byB3cml0ZSBhIDE2IGJpdCByZWdpc3RlciAoZS5nLiBHTV9HUF9DVFJMKQotICogR01fSU4zMigpLAkJdG8gcmVhZCAgYSAzMiBiaXQgcmVnaXN0ZXIgKGUuZy4gR01fKQotICogR01fT1VUMzIoKSwJCXRvIHdyaXRlIGEgMzIgYml0IHJlZ2lzdGVyIChlLmcuIEdNXykKLSAqIEdNX0lOQUREUigpLAkJdG8gcmVhZCAgYSBuZXR3b3JrIGFkZHJlc3MgcmVnaXN0ZXIgKGUuZy4gR01fU1JDX0FERFJfMUwpCi0gKiBHTV9PVVRBRERSKCksCXRvIHdyaXRlIGEgbmV0d29yayBhZGRyZXNzIHJlZ2lzdGVyIChlLmcuIEdNX1NSQ19BRERSXzJMKQotICogR01fSU5IQVNIKCksCQl0byByZWFkICB0aGUgR01fTUNfQUREUl9IMSByZWdpc3RlcgotICogR01fT1VUSEFTSCgpCQl0byB3cml0ZSB0aGUgR01fTUNfQUREUl9IMSByZWdpc3RlcgotICoKLSAqIHBhcmE6Ci0gKglNYWMJCUdNQUMgdG8gYWNjZXNzCQl2YWx1ZXM6IE1BQ18xIG9yIE1BQ18yCi0gKglJb0MJCUkvTyBjb250ZXh0IG5lZWRlZCBmb3IgU0sgSS9PIG1hY3JvcwotICoJUmVnCQlHTUFDIFJlZ2lzdGVyIHRvIHJlYWQgb3Igd3JpdGUKLSAqCShwKVZhbAlWYWx1ZSBvciBwb2ludGVyIHRvIHRoZSB2YWx1ZSB3aGljaCBzaG91bGQgYmUgcmVhZCBvciB3cml0dGVuCi0gKgotICogdXNhZ2U6CUdNX09VVDE2KElvQywgTUFDXzEsIEdNX0dQX0NUUkwsIFZhbHVlKTsKLSAqLwotCi0jZGVmaW5lIEdNQShNYWMsIFJlZykJCQkJCQkJCQlcCi0JKChCQVNFX0dNQUNfMSArIChNYWMpICogKEJBU0VfR01BQ18yIC0gQkFTRV9HTUFDXzEpKSB8IChSZWcpKQotCi0jZGVmaW5lIEdNX0lOMTYoSW9DLCBNYWMsIFJlZywgcFZhbCkJCQkJCVwKLQlTS19JTjE2KChJb0MpLCBHTUEoKE1hYyksIChSZWcpKSwgKHBWYWwpKQotCi0jZGVmaW5lIEdNX09VVDE2KElvQywgTWFjLCBSZWcsIFZhbCkJCQkJCVwKLQlTS19PVVQxNigoSW9DKSwgR01BKChNYWMpLCAoUmVnKSksIChWYWwpKQotCi0jZGVmaW5lIEdNX0lOMzIoSW9DLCBNYWMsIFJlZywgcFZhbCkgewkJCQkJXAotCVNLX0lOMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZykpLAkJCQkJXAotCQkoU0tfVTE2IFNLX0ZBUiopJigoU0tfVTE2IFNLX0ZBUiopKHBWYWwpKVtYTV9XT1JEX0xPXSk7CQlcCi0JU0tfSU4xNigoSW9DKSwgR01BKChNYWMpLCAoUmVnKzQpKSwJCQkJCVwKLQkJKFNLX1UxNiBTS19GQVIqKSYoKFNLX1UxNiBTS19GQVIqKShwVmFsKSlbWE1fV09SRF9ISV0pOwkJXAotfQotCi0jZGVmaW5lIEdNX09VVDMyKElvQywgTWFjLCBSZWcsIFZhbCkgewkJCQkJCQkJCQlcCi0JU0tfT1VUMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZykpLCAoU0tfVTE2KSgoVmFsKSAmIDB4ZmZmZkwpKTsJCQlcCi0JU0tfT1VUMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZys0KSksIChTS19VMTYpKCgoVmFsKSA+PiAxNikgJiAweGZmZmZMKSk7XAotfQotCi0jZGVmaW5lIEdNX0lOQUREUihJb0MsIE1hYywgUmVnLCBwVmFsKSB7CQkJCVwKLQlTS19VMTYJV29yZDsJCQkJCQkJCQkJXAotCVNLX1U4CSpwQnl0ZTsJCQkJCQkJCQkJXAotCXBCeXRlID0gKFNLX1U4ICopJigoU0tfVTggKikocFZhbCkpWzBdOwkJCQlcCi0JU0tfSU4xNigoSW9DKSwgR01BKChNYWMpLCAoUmVnKSksICZXb3JkKTsJCQlcCi0JcEJ5dGVbMF0gPSAoU0tfVTgpKFdvcmQgICYgMHgwMGZmKTsJCQkJCVwKLQlwQnl0ZVsxXSA9IChTS19VOCkoKFdvcmQgPj4gOCkgJiAweDAwZmYpOwkJCVwKLQlTS19JTjE2KChJb0MpLCBHTUEoKE1hYyksIChSZWcrNCkpLCAmV29yZCk7CQkJXAotCXBCeXRlWzJdID0gKFNLX1U4KShXb3JkICAmIDB4MDBmZik7CQkJCQlcCi0JcEJ5dGVbM10gPSAoU0tfVTgpKChXb3JkID4+IDgpICYgMHgwMGZmKTsJCQlcCi0JU0tfSU4xNigoSW9DKSwgR01BKChNYWMpLCAoUmVnKzgpKSwgJldvcmQpOwkJCVwKLQlwQnl0ZVs0XSA9IChTS19VOCkoV29yZCAgJiAweDAwZmYpOwkJCQkJXAotCXBCeXRlWzVdID0gKFNLX1U4KSgoV29yZCA+PiA4KSAmIDB4MDBmZik7CQkJXAotfQotCi0jZGVmaW5lIEdNX09VVEFERFIoSW9DLCBNYWMsIFJlZywgcFZhbCkgewkJCQlcCi0JU0tfVTgJU0tfRkFSICpwQnl0ZTsJCQkJCQkJCVwKLQlwQnl0ZSA9IChTS19VOCBTS19GQVIgKikmKChTS19VOCBTS19GQVIgKikocFZhbCkpWzBdOwlcCi0JU0tfT1VUMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZykpLCAoU0tfVTE2KQkJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVswXSkgJiAweDAwZmYpIHwJCQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzFdKSA8PCA4KSAmIDB4ZmYwMCkpKTsJCQlcCi0JU0tfT1VUMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZys0KSksIChTS19VMTYpCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbMl0pICYgMHgwMGZmKSB8CQkJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVszXSkgPDwgOCkgJiAweGZmMDApKSk7CQkJXAotCVNLX09VVDE2KChJb0MpLCBHTUEoKE1hYyksIChSZWcrOCkpLCAoU0tfVTE2KQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzRdKSAmIDB4MDBmZikgfAkJCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbNV0pIDw8IDgpICYgMHhmZjAwKSkpOwkJCVwKLX0KLQotI2RlZmluZSBHTV9JTkhBU0goSW9DLCBNYWMsIFJlZywgcFZhbCkgewkJCQlcCi0JU0tfVTE2CVdvcmQ7CQkJCQkJCQkJCVwKLQlTS19VOAkqcEJ5dGU7CQkJCQkJCQkJCVwKLQlwQnl0ZSA9IChTS19VOCAqKSYoKFNLX1U4ICopKHBWYWwpKVswXTsJCQkJXAotCVNLX0lOMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZykpLCAmV29yZCk7CQkJXAotCXBCeXRlWzBdID0gKFNLX1U4KShXb3JkICAmIDB4MDBmZik7CQkJCQlcCi0JcEJ5dGVbMV0gPSAoU0tfVTgpKChXb3JkID4+IDgpICYgMHgwMGZmKTsJCQlcCi0JU0tfSU4xNigoSW9DKSwgR01BKChNYWMpLCAoUmVnKzQpKSwgJldvcmQpOwkJCVwKLQlwQnl0ZVsyXSA9IChTS19VOCkoV29yZCAgJiAweDAwZmYpOwkJCQkJXAotCXBCeXRlWzNdID0gKFNLX1U4KSgoV29yZCA+PiA4KSAmIDB4MDBmZik7CQkJXAotCVNLX0lOMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZys4KSksICZXb3JkKTsJCQlcCi0JcEJ5dGVbNF0gPSAoU0tfVTgpKFdvcmQgICYgMHgwMGZmKTsJCQkJCVwKLQlwQnl0ZVs1XSA9IChTS19VOCkoKFdvcmQgPj4gOCkgJiAweDAwZmYpOwkJCVwKLQlTS19JTjE2KChJb0MpLCBHTUEoKE1hYyksIChSZWcrMTIpKSwgJldvcmQpOwkJXAotCXBCeXRlWzZdID0gKFNLX1U4KShXb3JkICAmIDB4MDBmZik7CQkJCQlcCi0JcEJ5dGVbN10gPSAoU0tfVTgpKChXb3JkID4+IDgpICYgMHgwMGZmKTsJCQlcCi19Ci0KLSNkZWZpbmUgR01fT1VUSEFTSChJb0MsIE1hYywgUmVnLCBwVmFsKSB7CQkJCVwKLQlTS19VOAkqcEJ5dGU7CQkJCQkJCQkJCVwKLQlwQnl0ZSA9IChTS19VOCAqKSYoKFNLX1U4ICopKHBWYWwpKVswXTsJCQkJXAotCVNLX09VVDE2KChJb0MpLCBHTUEoKE1hYyksIChSZWcpKSwgKFNLX1UxNikJCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbMF0pICYgMHgwMGZmKXwJCQkJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVsxXSkgPDwgOCkgJiAweGZmMDApKSk7CQkJXAotCVNLX09VVDE2KChJb0MpLCBHTUEoKE1hYyksIChSZWcrNCkpLCAoU0tfVTE2KQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzJdKSAmIDB4MDBmZil8CQkJCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbM10pIDw8IDgpICYgMHhmZjAwKSkpOwkJCVwKLQlTS19PVVQxNigoSW9DKSwgR01BKChNYWMpLCAoUmVnKzgpKSwgKFNLX1UxNikJCVwKLQkJKCgoU0tfVTE2KShwQnl0ZVs0XSkgJiAweDAwZmYpfAkJCQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzVdKSA8PCA4KSAmIDB4ZmYwMCkpKTsJCQlcCi0JU0tfT1VUMTYoKElvQyksIEdNQSgoTWFjKSwgKFJlZysxMikpLCAoU0tfVTE2KQkJXAotCQkoKChTS19VMTYpKHBCeXRlWzZdKSAmIDB4MDBmZil8CQkJCQlcCi0JCSgoKFNLX1UxNikocEJ5dGVbN10pIDw8IDgpICYgMHhmZjAwKSkpOwkJCVwKLX0KLQotLyoKLSAqIERpZmZlcmVudCBNQUMgVHlwZXMKLSAqLwotI2RlZmluZSBTS19NQUNfWE1BQwkJMAkvKiBYYXF0aSBYTUFDIElJICovCi0jZGVmaW5lIFNLX01BQ19HTUFDCQkxCS8qIE1hcnZlbGwgR01BQyAqLwotCi0vKgotICogRGlmZmVyZW50IFBIWSBUeXBlcwotICovCi0jZGVmaW5lIFNLX1BIWV9YTUFDCQkJMAkvKiBpbnRlZ3JhdGVkIGluIFhNQUMgSUkgKi8KLSNkZWZpbmUgU0tfUEhZX0JDT00JCQkxCS8qIEJyb2FkY29tIEJDTTU0MDAgKi8KLSNkZWZpbmUgU0tfUEhZX0xPTkUJCQkyCS8qIExldmVsIE9uZSBMWFQxMDAwICovCi0jZGVmaW5lIFNLX1BIWV9OQVQJCQkzCS8qIE5hdGlvbmFsIERQODM4OTEgKi8KLSNkZWZpbmUgU0tfUEhZX01BUlZfQ09QUEVSCTQJLyogTWFydmVsbCA4OEUxMDExUyAqLwotI2RlZmluZSBTS19QSFlfTUFSVl9GSUJFUgk1CS8qIE1hcnZlbGwgODhFMTAxMVMgd29ya2luZyBvbiBmaWJlciAqLwotCi0vKgotICogUEhZIGFkZHJlc3NlcyAoYml0cyAxMi4uOCBvZiBQSFkgYWRkcmVzcyByZWcpCi0gKi8KLSNkZWZpbmUgUEhZX0FERFJfWE1BQwkoMDw8OCkKLSNkZWZpbmUgUEhZX0FERFJfQkNPTQkoMTw8OCkKLSNkZWZpbmUgUEhZX0FERFJfTE9ORQkoMzw8OCkKLSNkZWZpbmUgUEhZX0FERFJfTkFUCSgwPDw4KQotCi0vKiBHUEhZIGFkZHJlc3MgKGJpdHMgMTUuLjExIG9mIFNNSSBjb250cm9sIHJlZykgKi8KLSNkZWZpbmUgUEhZX0FERFJfTUFSVgkwCi0KLS8qCi0gKiBtYWNyb3MgdG8gYWNjZXNzIHRoZSBQSFkKLSAqCi0gKiBQSFlfUkVBRCgpCQlyZWFkIGEgMTYgYml0IHZhbHVlIGZyb20gdGhlIFBIWQotICogUEhZX1dSSVRFKCkJCXdyaXRlIGEgMTYgYml0IHZhbHVlIHRvIHRoZSBQSFkKLSAqCi0gKiBwYXJhOgotICogCUlvQwkJSS9PIGNvbnRleHQgbmVlZGVkIGZvciBTSyBJL08gbWFjcm9zCi0gKiAJcFBvcnQJUG9pbnRlciB0byBwb3J0IHN0cnVjdCBmb3IgUGh5QWRkcgotICogCU1hYwkJWE1BQyB0byBhY2Nlc3MJCXZhbHVlczogTUFDXzEgb3IgTUFDXzIKLSAqIAlQaHlSZWcJUEhZIFJlZ2lzdGVyIHRvIHJlYWQgb3Igd3JpdGUKLSAqIAkocClWYWwJVmFsdWUgb3IgcG9pbnRlciB0byB0aGUgdmFsdWUgd2hpY2ggc2hvdWxkIGJlIHJlYWQgb3IKLSAqCQkJd3JpdHRlbi4KLSAqCi0gKiB1c2FnZToJUEhZX1JFQUQoSW9DLCBwUG9ydCwgTUFDXzEsIFBIWV9DVFJMLCBWYWx1ZSk7Ci0gKiBXYXJuaW5nOiBhIFBIWV9SRUFEIG9uIGFuIHVuaW5pdGlhbGl6ZWQgUEhZIChQSFkgc3RpbGwgaW4gcmVzZXQpIG5ldmVyCi0gKiAgICAgICAgICBjb21lcyBiYWNrLiBUaGlzIGlzIGNoZWNrZWQgaW4gREVCVUcgbW9kZS4KLSAqLwotI2lmbmRlZiBERUJVRwotI2RlZmluZSBQSFlfUkVBRChJb0MsIHBQb3J0LCBNYWMsIFBoeVJlZywgcFZhbCkgewkJCQkJCVwKLQlTS19VMTYgTW11OyAgCQkJCQkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCQkJCQkJCQlcCi0JWE1fT1VUMTYoKElvQyksIChNYWMpLCBYTV9QSFlfQUREUiwgKFBoeVJlZykgfCAocFBvcnQpLT5QaHlBZGRyKTsJXAotCVhNX0lOMTYoKElvQyksIChNYWMpLCBYTV9QSFlfREFUQSwgKHBWYWwpKTsJCQkJCQkJXAotCWlmICgocFBvcnQpLT5QaHlUeXBlICE9IFNLX1BIWV9YTUFDKSB7CQkJCQkJCQlcCi0JCWRvIHsgIAkJCQkJCQkJCQkJCQkJCVwKLQkJCVhNX0lOMTYoKElvQyksIChNYWMpLCBYTV9NTVVfQ01ELCAmTW11KTsJCQkJCVwKLQkJfSB3aGlsZSAoKE1tdSAmIFhNX01NVV9QSFlfUkRZKSA9PSAwKTsJCQkJCQkJXAotCQlYTV9JTjE2KChJb0MpLCAoTWFjKSwgWE1fUEhZX0RBVEEsIChwVmFsKSk7CQkJCQkJXAotCX0gIAkJCQkJCQkJCQkJCQkJCQkJXAotfQotI2Vsc2UKLSNkZWZpbmUgUEhZX1JFQUQoSW9DLCBwUG9ydCwgTWFjLCBQaHlSZWcsIHBWYWwpIHsJCQkJCQlcCi0JU0tfVTE2IE1tdTsgIAkJCQkJCQkJCQkJCQkJXAotCWludCBfX2kgPSAwOwkJCQkJCQkJCQkJCQkJXAotCQkJCQkJCQkJCQkJCQkJCQkJXAotCVhNX09VVDE2KChJb0MpLCAoTWFjKSwgWE1fUEhZX0FERFIsIChQaHlSZWcpIHwgKHBQb3J0KS0+UGh5QWRkcik7CVwKLQlYTV9JTjE2KChJb0MpLCAoTWFjKSwgWE1fUEhZX0RBVEEsIChwVmFsKSk7CQkJCQkJCVwKLQlpZiAoKHBQb3J0KS0+UGh5VHlwZSAhPSBTS19QSFlfWE1BQykgewkJCQkJCQkJXAotCQlkbyB7ICAJCQkJCQkJCQkJCQkJCQlcCi0JCQlYTV9JTjE2KChJb0MpLCAoTWFjKSwgWE1fTU1VX0NNRCwgJk1tdSk7CQkJCQlcCi0JCQlfX2krKzsJCQkJCQkJCQkJCQkJCVwKLQkJCWlmIChfX2kgPiAxMDAwMDApIHsJCQkJCQkJCQkJCVwKLQkJCQlTS19EQkdfUFJJTlRGKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CQlcCi0JCQkJU0tfREJHX1BSSU5URigiUEhZX1JFQUQgb24gdW5pbml0aWFsaXplZCBQSFlcbiIpOwkJXAotCQkJCVNLX0RCR19QUklOVEYoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsJCVwKLQkJCQlicmVhazsJCQkJCQkJCQkJCQkJXAotCQkJfQkJCQkJCQkJCQkJCQkJCVwKLQkJfSB3aGlsZSAoKE1tdSAmIFhNX01NVV9QSFlfUkRZKSA9PSAwKTsJCQkJCQkJXAotCQlYTV9JTjE2KChJb0MpLCAoTWFjKSwgWE1fUEhZX0RBVEEsIChwVmFsKSk7CQkJCQkJXAotCX0gIAkJCQkJCQkJCQkJCQkJCQkJXAotfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNkZWZpbmUgUEhZX1dSSVRFKElvQywgcFBvcnQsIE1hYywgUGh5UmVnLCBWYWwpIHsJCQkJCQlcCi0JU0tfVTE2IE1tdTsJCQkJCQkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCQkJCQkJCQlcCi0JaWYgKChwUG9ydCktPlBoeVR5cGUgIT0gU0tfUEhZX1hNQUMpIHsJCQkJCQkJCVwKLQkJZG8geyAgCQkJCQkJCQkJCQkJCQkJXAotCQkJWE1fSU4xNigoSW9DKSwgKE1hYyksIFhNX01NVV9DTUQsICZNbXUpOwkJCQkJXAotCQl9IHdoaWxlICgoTW11ICYgWE1fTU1VX1BIWV9CVVNZKSAhPSAwKTsJCQkJCQkJXAotCX0gIAkJCQkJCQkJCQkJCQkJCQkJXAotCVhNX09VVDE2KChJb0MpLCAoTWFjKSwgWE1fUEhZX0FERFIsIChQaHlSZWcpIHwgKHBQb3J0KS0+UGh5QWRkcik7CVwKLQlYTV9PVVQxNigoSW9DKSwgKE1hYyksIFhNX1BIWV9EQVRBLCAoVmFsKSk7CQkJCQkJCVwKLQlpZiAoKHBQb3J0KS0+UGh5VHlwZSAhPSBTS19QSFlfWE1BQykgewkJCQkJCQkJXAotCQlkbyB7ICAJCQkJCQkJCQkJCQkJCQlcCi0JCQlYTV9JTjE2KChJb0MpLCAoTWFjKSwgWE1fTU1VX0NNRCwgJk1tdSk7CQkJCQlcCi0JCX0gd2hpbGUgKChNbXUgJiBYTV9NTVVfUEhZX0JVU1kpICE9IDApOwkJCQkJCQlcCi0JfSAgCQkJCQkJCQkJCQkJCQkJCQlcCi19Ci0KLS8qCi0gKglNYWNybyBQQ0lfQygpCi0gKgotICoJVXNlIHRoaXMgbWFjcm8gdG8gYWNjZXNzIFBDSSBjb25maWcgcmVnaXN0ZXIgZnJvbSB0aGUgSS9PIHNwYWNlLgotICoKLSAqIHBhcmE6Ci0gKglBZGRyCVBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHRvIGFjY2Vzcy4KLSAqCQkJVmFsdWVzOglQQ0lfVkVORE9SX0lEIC4uLiBQQ0lfVlBEX0FEUl9SRUcsCi0gKgotICogdXNhZ2UJU0tfSU4xNihwQUMsIFBDSV9DKFBDSV9WRU5ET1JfSUQpLCBwVmFsKTsKLSAqLwotI2RlZmluZSBQQ0lfQyhBZGRyKQkoQjdfQ0ZHX1NQQyArIChBZGRyKSkJLyogUENJIENvbmZpZyBTcGFjZSAqLwotCi0vKgotICoJTWFjcm8gU0tfSFdfQUREUihCYXNlLCBBZGRyKQotICoKLSAqCUNhbGN1bGF0ZXMgdGhlIGVmZmVjdGl2ZSBIVyBhZGRyZXNzCi0gKgotICogcGFyYToKLSAqCUJhc2UJSS9PIG9yIG1lbW9yeSBiYXNlIGFkZHJlc3MKLSAqCUFkZHIJQWRkcmVzcyBvZmZzZXQKLSAqCi0gKiB1c2FnZToJTWF5IGJlIHVzZWQgaW4gU0tfSU54eCBhbmQgU0tfT1VUeHggbWFjcm9zCi0gKgkJI2RlZmluZSBTS19JTjgocEFDLCBBZGRyLCBwVmFsKSAuLi5cCi0gKgkJCSpwVmFsID0gKFNLX1U4KWlucChTS19IV19BRERSKHBBQy0+SHcuSW9wLCBBZGRyKSkpCi0gKi8KLSNpZmRlZiBTS19NRU1fTUFQUEVEX0lPCi0jZGVmaW5lIFNLX0hXX0FERFIoQmFzZSwgQWRkcikJKChCYXNlKSArIChBZGRyKSkKLSNlbHNlICAvKiBTS19NRU1fTUFQUEVEX0lPICovCi0jZGVmaW5lIFNLX0hXX0FERFIoQmFzZSwgQWRkcikJXAotCQkJKChCYXNlKSArICgoKEFkZHIpICYgMHg3ZikgfCAoKChBZGRyKSA+PiA3ID4gMCkgPyAweDgwIDogMCkpKQotI2VuZGlmIC8qIFNLX01FTV9NQVBQRURfSU8gKi8KLQotI2RlZmluZSBTWl9MT05HCShzaXplb2YoU0tfVTMyKSkKLQotLyoKLSAqCU1hY3JvIFNLX0hXQUNfTElOS19MRUQoKQotICoKLSAqCVVzZSB0aGlzIG1hY3JvIHRvIHNldCB0aGUgbGluayBMRUQgbW9kZS4KLSAqIHBhcmE6Ci0gKglwQUMJCVBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0IHN0cnVjdAotICoJSW9DCQlJL08gY29udGV4dCBuZWVkZWQgZm9yIFNLIEkvTyBtYWNyb3MKLSAqICBQb3J0CVBvcnQgbnVtYmVyCi0gKglNb2RlCU1vZGUgdG8gc2V0IGZvciB0aGlzIExFRAotICovCi0jZGVmaW5lIFNLX0hXQUNfTElOS19MRUQocEFDLCBJb0MsIFBvcnQsIE1vZGUpIFwKLQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBMTktfTEVEX1JFRyksIE1vZGUpOwotCi0KLS8qIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYJLyogX19jcGx1c3BsdXMgKi8KLQotI2VuZGlmCS8qIF9fSU5DX1NLR0VIV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZWh3dC5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vod3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiMDAxNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZWh3dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNraHd0LmgKLSAqIFByb2plY3Q6CUdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMsIEV2ZW50IFNjaGVkdWxlciBNb2R1bGUKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS43ICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzA5LzE2IDEyOjU1OjA4ICQKLSAqIFB1cnBvc2U6CURlZmluZXMgZm9yIHRoZSBoYXJkd2FyZSB0aW1lciBmdW5jdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU0tHRUhXVC5ICWNvbnRhaW5zIGFsbCBkZWZpbmVzIGFuZCB0eXBlcyBmb3IgdGhlIHRpbWVyIGZ1bmN0aW9ucwotICovCi0KLSNpZm5kZWYJX1NLR0VIV1RfSF8KLSNkZWZpbmUgX1NLR0VIV1RfSF8KLQotLyoKLSAqIFNLIEhhcmR3YXJlIFRpbWVyCi0gKiAtIG5lZWRlZCB3aGVyZXZlciB0aGUgSFdUIG1vZHVsZSBpcyB1c2VkCi0gKiAtIHVzZSBpbiBBZGFwdGVycyBjb250ZXh0IG5hbWUgcEFDLT5Id3QKLSAqLwotdHlwZWRlZglzdHJ1Y3Qgc19Id3QgewotCVNLX1UzMgkJVFN0YXJ0OwkvKiBIV1Qgc3RhcnQgKi8KLQlTS19VMzIJCVRTdG9wOwkvKiBIV1Qgc3RvcCAqLwotCWludAkJVEFjdGl2ZTsJLyogSFdUOiBmbGFnIDogYWN0aXZlL2luYWN0aXZlICovCi19IFNLX0hXVDsKLQotZXh0ZXJuIHZvaWQgU2tId3RJbml0KFNLX0FDICpwQUMsIFNLX0lPQyBJb2MpOwotZXh0ZXJuIHZvaWQgU2tId3RTdGFydChTS19BQyAqcEFDLCBTS19JT0MgSW9jLCBTS19VMzIgVGltZSk7Ci1leHRlcm4gdm9pZCBTa0h3dFN0b3AoU0tfQUMgKnBBQywgU0tfSU9DIElvYyk7Ci1leHRlcm4gU0tfVTMyIFNrSHd0UmVhZChTS19BQyAqcEFDLCBTS19JT0MgSW9jKTsKLWV4dGVybiB2b2lkIFNrSHd0SXNyKFNLX0FDICpwQUMsIFNLX0lPQyBJb2MpOwotI2VuZGlmCS8qIF9TS0dFSFdUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZWkyYy5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2VpMmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDliNmY2ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZWkyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2dlaTJjLmgKLSAqIFByb2plY3Q6CUdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMsIFRXU0ktTW9kdWxlCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMjUgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMTAvMjAgMDk6MDY6MDUgJAotICogUHVycG9zZToJU3BlY2lhbCBkZWZpbmVzIGZvciBUV1NJCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTS0dFSTJDLkgJY29udGFpbnMgYWxsIFNLLTk4eHggc3BlY2lmaWMgZGVmaW5lcyBmb3IgdGhlIFRXU0kgaGFuZGxpbmcKLSAqLwotCi0jaWZuZGVmIF9JTkNfU0tHRUkyQ19IXwotI2RlZmluZSBfSU5DX1NLR0VJMkNfSF8KLQotLyoKLSAqIE1hY3JvcyB0byBhY2Nlc3MgdGhlIEIyX0kyQ19DVFJMCi0gKi8KLSNkZWZpbmUgU0tfSTJDX0NUTChJb0MsIGZsYWcsIGRldiwgZGV2X3NpemUsIHJlZywgYnVyc3QpIFwKLQlTS19PVVQzMihJb0MsIEIyX0kyQ19DVFJMLFwKLQkJKGZsYWcgPyAweDgwMDAwMDAwVUwgOiAweDBMKSB8IFwKLQkJKCgoU0tfVTMyKXJlZyA8PCAxNikgJiBJMkNfQUREUikgfCBcCi0JCSgoKFNLX1UzMilkZXYgPDwgOSkgJiBJMkNfREVWX1NFTCkgfCBcCi0JCShkZXZfc2l6ZSAmIEkyQ19ERVZfU0laRSkgfCBcCi0JCSgoYnVyc3QgPDwgNCkgJiBJMkNfQlVSU1RfTEVOKSkKLQotI2RlZmluZSBTS19JMkNfU1RPUChJb0MpIHsJCQkJXAotCVNLX1UzMglJMmNDdHJsOwkJCQlcCi0JU0tfSU4zMihJb0MsIEIyX0kyQ19DVFJMLCAmSTJjQ3RybCk7CQlcCi0JU0tfT1VUMzIoSW9DLCBCMl9JMkNfQ1RSTCwgSTJjQ3RybCB8IEkyQ19TVE9QKTsJXAotfQotCi0jZGVmaW5lIFNLX0kyQ19HRVRfQ1RMKElvQywgcEkyY0N0cmwpCVNLX0lOMzIoSW9DLCBCMl9JMkNfQ1RSTCwgcEkyY0N0cmwpCi0KLS8qCi0gKiBNYWNyb3MgdG8gYWNjZXNzIHRoZSBUV1NJIFNXIFJlZ2lzdGVycwotICovCi0jZGVmaW5lIFNLX0kyQ19TRVRfQklUKElvQywgU2V0Qml0cykgewkJCVwKLQlTS19VOAlPcmdCaXRzOwkJCQlcCi0JU0tfSU44KElvQywgQjJfSTJDX1NXLCAmT3JnQml0cyk7CQlcCi0JU0tfT1VUOChJb0MsIEIyX0kyQ19TVywgT3JnQml0cyB8IChTS19VOCkoU2V0Qml0cykpOwlcCi19Ci0KLSNkZWZpbmUgU0tfSTJDX0NMUl9CSVQoSW9DLCBDbHJCaXRzKSB7CQkJXAotCVNLX1U4CU9yZ0JpdHM7CQkJCVwKLQlTS19JTjgoSW9DLCBCMl9JMkNfU1csICZPcmdCaXRzKTsJCVwKLQlTS19PVVQ4KElvQywgQjJfSTJDX1NXLCBPcmdCaXRzICYgfigoU0tfVTgpKENsckJpdHMpKSk7CVwKLX0KLQotI2RlZmluZSBTS19JMkNfR0VUX1NXKElvQywgcEkyY1N3KQlTS19JTjgoSW9DLCBCMl9JMkNfU1csIHBJMmNTdykKLQotLyoKLSAqIGRlZmluZSB0aGUgcG9zc2libGUgc2Vuc29yIHN0YXRlcwotICovCi0jZGVmaW5lCVNLX1NFTl9JRExFCQkwCS8qIElkbGU6IHNlbnNvciBub3QgcmVhZCAqLwotI2RlZmluZQlTS19TRU5fVkFMVUUJMQkvKiBWYWx1ZSBSZWFkIGN5Y2xlICovCi0jZGVmaW5lCVNLX1NFTl9WQUxFWFQJMgkvKiBFeHRlbmRlZCBWYWx1ZSBSZWFkIGN5Y2xlICovCi0KLS8qCi0gKiBDb252ZXJzaW9uIGZhY3RvciB0byBjb252ZXJ0IHJlYWQgVm9sdGFnZSBzZW5zb3IgdG8gbWlsbGkgVm9sdAotICogQ29udmVyc2lvbiBmYWN0b3IgdG8gY29udmVydCByZWFkIFRlbXBlcmF0dXJlIHNlbnNvciB0byAxMHRoIGRlZ3JlZSBDZWxzaXVzCi0gKi8KLSNkZWZpbmUJU0tfTE04MF9WVF9MU0IJCTIyCS8qIDIybVYgTFNCIHJlc29sdXRpb24gKi8KLSNkZWZpbmUJU0tfTE04MF9URU1QX0xTQgkxMAkvKiAxIGRlZ3JlZSBMU0IgcmVzb2x1dGlvbiAqLwotI2RlZmluZQlTS19MTTgwX1RFTVBFWFRfTFNCCSA1CS8qIDAuNSBkZWdyZWUgTFNCIHJlc29sdXRpb24gZm9yIGV4dC4gdmFsLiAqLwotCi0vKgotICogZm9ybXVsYTogY291bnRlciA9ICgyMjUwMCo2MCkvKHJwbSAqIGRpdmlzb3IgKiBwdWxzZXMvMikKLSAqIGFzc3VtaW5nOiA2NTAwcnBtLCA0IHB1bHNlcywgZGl2aXNvciAxCi0gKi8KLSNkZWZpbmUgU0tfTE04MF9GQU5fRkFLVE9SCSgoMjI1MDBMKjYwKS8oMSoyKSkKLQotLyoKLSAqIERlZmluZSBzZW5zb3IgbWFuYWdlbWVudCBkYXRhCi0gKiBNYXhpbXVtIGlzIHJlYWNoZWQgb24gR2VuZXNpcyBjb3BwZXIgZHVhbCBwb3J0IGFuZCBZdWtvbi02NAotICogQm9hcmQgc3BlY2lmaWMgbWF4aW11bSBpcyBpbiBwQUMtPkkyYy5NYXhTZW5zCi0gKi8KLSNkZWZpbmUJU0tfTUFYX1NFTlNPUlMJOAkvKiBtYXhpbWFsIG5vLiBvZiBpbnN0YWxsZWQgc2Vuc29ycyAqLwotI2RlZmluZQlTS19NSU5fU0VOU09SUwk1CS8qIG1pbmltYWwgbm8uIG9mIGluc3RhbGxlZCBzZW5zb3JzICovCi0KLS8qCi0gKiBUbyB3YXRjaCB0aGUgc3RhdGUgbWFjaGluZSAoU00pIHVzZSB0aGUgdGltZXIgaW4gdHdvIHdheXMKLSAqIGluc3RlYWQgb2Ygb25lIGFzIGhpdGhlcnRvCi0gKi8KLSNkZWZpbmUJU0tfVElNRVJfV0FUQ0hfU00JCTAJLyogV2F0Y2ggdGhlIFNNIHRvIGZpbmlzaCBpbiBhIHNwZWMuIHRpbWUgKi8KLSNkZWZpbmUJU0tfVElNRVJfTkVXX0dBVUdJTkcJMQkvKiBTdGFydCBhIG5ldyBnYXVnaW5nIHdoZW4gdGltZXIgZXhwaXJlcyAqLwotCi0vKgotICogRGVmaW5lcyBmb3IgdGhlIGluZGl2aWR1YWwgdGhyZXNob2xkcwotICovCi0KLS8qIFRlbXBlcmF0dXJlIHNlbnNvciAqLwotI2RlZmluZQlTS19TRU5fVEVNUF9ISUdIX0VSUgk4MDAJLyogVGVtcGVyYXR1cmUgSGlnaCBFcnIgIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fVEVNUF9ISUdIX1dBUk4JNzAwCS8qIFRlbXBlcmF0dXJlIEhpZ2ggV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1RFTVBfTE9XX1dBUk4JMTAwCS8qIFRlbXBlcmF0dXJlIExvdyAgV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1RFTVBfTE9XX0VSUgkJICAwCS8qIFRlbXBlcmF0dXJlIExvdyAgRXJyICBUaHJlc2hvbGQgKi8KLQotLyogVkNDIHdoaWNoIHNob3VsZCBiZSA1IFYgKi8KLSNkZWZpbmUJU0tfU0VOX1BDSV81Vl9ISUdIX0VSUgkJNTU4OAkvKiBWb2x0YWdlIFBDSSBIaWdoIEVyciAgVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9QQ0lfNVZfSElHSF9XQVJOCQk1MzQ2CS8qIFZvbHRhZ2UgUENJIEhpZ2ggV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1BDSV81Vl9MT1dfV0FSTgkJNDY2NAkvKiBWb2x0YWdlIFBDSSBMb3cgIFdhcm4gVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9QQ0lfNVZfTE9XX0VSUgkJNDQyMgkvKiBWb2x0YWdlIFBDSSBMb3cgIEVyciAgVGhyZXNob2xkICovCi0KLS8qCi0gKiBWSU8gbWF5IGJlIDUgViBvciAzLjMgVi4gSW5pdGlhbGl6YXRpb24gdGFrZXMgdHdvIHBhcnRzOgotICogMS4gSW5pdGlhbGl6ZSBsb3dlc3QgbG93ZXIgbGltaXQgYW5kIGhpZ2hlc3QgaGlnaGVyIGxpbWl0LgotICogMi4gQWZ0ZXIgdGhlIGZpcnN0IHZhbHVlIGlzIHJlYWQgY29ycmVjdCB0aGUgdXBwZXIgb3IgdGhlIGxvd2VyIGxpbWl0IHRvCi0gKiAgICB0aGUgYXBwcm9wcmlhdGUgQyBjb25zdGFudC4KLSAqCi0gKiBXYXJuaW5nIGxpbWl0cyBhcmUgKy01JSBvZiB0aGUgZXhlcGVjdGVkIHZvbHRhZ2UuCi0gKiBFcnJvciBsaW1pdHMgYXJlICstMTAlIG9mIHRoZSBleHBlY3RlZCB2b2x0YWdlLgotICovCi0KLS8qIEJ1ZyBmaXggQUY6IDE2LkF1Zy4yMDAxOiBDb3JyZWN0IHRoZSBpbml0IGJhc2Ugb2YgTE04MCBzZW5zb3IgKi8KLQotI2RlZmluZQlTS19TRU5fUENJX0lPXzVWX0hJR0hfRVJSCTU1NjYJLyogKyAxMCUgViBQQ0ktSU8gSGlnaCBFcnIgVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9QQ0lfSU9fNVZfSElHSF9XQVJOCTUzMjQJLyogKyAgNSUgViBQQ0ktSU8gSGlnaCBXYXJuIFRocmVzaG9sZCAqLwotCQkJCQkvKgkJNTAwMAltVm9sdCAqLwotI2RlZmluZQlTS19TRU5fUENJX0lPXzVWX0xPV19XQVJOCTQ2ODYJLyogLSAgNSUgViBQQ0ktSU8gTG93IFdhcm4gVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9QQ0lfSU9fNVZfTE9XX0VSUgk0NDQ0CS8qIC0gMTAlIFYgUENJLUlPIExvdyBFcnIgVGhyZXNob2xkICovCi0KLSNkZWZpbmUJU0tfU0VOX1BDSV9JT19SQU5HRV9MSU1JVEVSCTQwMDAJLyogNDAwMCBtViByYW5nZSBkZWxpbWl0ZXIgKi8KLQotLyogY29ycmVjdGlvbiB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgcGFzcyAqLwotI2RlZmluZQlTS19TRU5fUENJX0lPXzNWM19ISUdIX0VSUgkzODUwCS8qICsgMTUlIFYgUENJLUlPIEhpZ2ggRXJyIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fUENJX0lPXzNWM19ISUdIX1dBUk4JMzY3NAkvKiArIDEwJSBWIFBDSS1JTyBIaWdoIFdhcm4gVGhyZXNob2xkICovCi0JCQkJCS8qCQkzMzAwCW1Wb2x0ICovCi0jZGVmaW5lCVNLX1NFTl9QQ0lfSU9fM1YzX0xPV19XQVJOCTI5MjYJLyogLSAxMCUgViBQQ0ktSU8gTG93IFdhcm4gVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9QQ0lfSU9fM1YzX0xPV19FUlIJMjc3MgkvKiAtIDE1JSBWIFBDSS1JTyBMb3cgRXJyICBUaHJlc2hvbGQgKi8KLQotLyoKLSAqIFZERCB2b2x0YWdlCi0gKi8KLSNkZWZpbmUJU0tfU0VOX1ZERF9ISUdIX0VSUgkJMzYzMAkvKiBWb2x0YWdlIEFTSUMgSGlnaCBFcnIgIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fVkREX0hJR0hfV0FSTgkzNDc2CS8qIFZvbHRhZ2UgQVNJQyBIaWdoIFdhcm4gVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9WRERfTE9XX1dBUk4JCTMxNDYJLyogVm9sdGFnZSBBU0lDIExvdyAgV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1ZERF9MT1dfRVJSCQkyOTcwCS8qIFZvbHRhZ2UgQVNJQyBMb3cgIEVyciAgVGhyZXNob2xkICovCi0KLS8qCi0gKiBQSFkgUExMIDNWMyB2b2x0YWdlCi0gKi8KLSNkZWZpbmUJU0tfU0VOX1BMTF8zVjNfSElHSF9FUlIJCTM2MzAJLyogVm9sdGFnZSBQTUEgSGlnaCBFcnIgIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fUExMXzNWM19ISUdIX1dBUk4JMzQ3NgkvKiBWb2x0YWdlIFBNQSBIaWdoIFdhcm4gVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9QTExfM1YzX0xPV19XQVJOCQkzMTQ2CS8qIFZvbHRhZ2UgUE1BIExvdyAgV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1BMTF8zVjNfTE9XX0VSUgkJMjk3MAkvKiBWb2x0YWdlIFBNQSBMb3cgIEVyciAgVGhyZXNob2xkICovCi0KLS8qCi0gKiBWQVVYIChZVUtPTiBvbmx5KQotICovCi0jZGVmaW5lCVNLX1NFTl9WQVVYXzNWM19ISUdIX0VSUgkzNjMwCS8qIFZvbHRhZ2UgVkFVWCBIaWdoIEVyciBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1ZBVVhfM1YzX0hJR0hfV0FSTgkzNDc2CS8qIFZvbHRhZ2UgVkFVWCBIaWdoIFdhcm4gVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9WQVVYXzNWM19MT1dfV0FSTgkzMTQ2CS8qIFZvbHRhZ2UgVkFVWCBMb3cgV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1ZBVVhfM1YzX0xPV19FUlIJCTI5NzAJLyogVm9sdGFnZSBWQVVYIExvdyBFcnIgVGhyZXNob2xkICovCi0jZGVmaW5lCVNLX1NFTl9WQVVYXzBWX1dBUk5fRVJSCQkgICAwCS8qIGlmIFZBVVggbm90IHByZXNlbnQgKi8KLSNkZWZpbmUJU0tfU0VOX1ZBVVhfUkFOR0VfTElNSVRFUgkxMDAwCS8qIDEwMDAgbVYgcmFuZ2UgZGVsaW1pdGVyICovCi0KLS8qCi0gKiBQSFkgMlY1IHZvbHRhZ2UKLSAqLwotI2RlZmluZQlTS19TRU5fUEhZXzJWNV9ISUdIX0VSUgkJMjc1MAkvKiBWb2x0YWdlIFBIWSBIaWdoIEVyciBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1BIWV8yVjVfSElHSF9XQVJOCTI2NDAJLyogVm9sdGFnZSBQSFkgSGlnaCBXYXJuIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fUEhZXzJWNV9MT1dfV0FSTgkJMjM3NgkvKiBWb2x0YWdlIFBIWSBMb3cgV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX1BIWV8yVjVfTE9XX0VSUgkJMjIyMgkvKiBWb2x0YWdlIFBIWSBMb3cgRXJyIFRocmVzaG9sZCAqLwotCi0vKgotICogQVNJQyBDb3JlIDFWNSB2b2x0YWdlIChZVUtPTiBvbmx5KQotICovCi0jZGVmaW5lCVNLX1NFTl9DT1JFXzFWNV9ISUdIX0VSUgkxNjUwCS8qIFZvbHRhZ2UgQVNJQyBDb3JlIEhpZ2ggRXJyIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fQ09SRV8xVjVfSElHSF9XQVJOCTE1NzUJLyogVm9sdGFnZSBBU0lDIENvcmUgSGlnaCBXYXJuIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fQ09SRV8xVjVfTE9XX1dBUk4JMTQyNQkvKiBWb2x0YWdlIEFTSUMgQ29yZSBMb3cgV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX0NPUkVfMVY1X0xPV19FUlIgCTEzNTAJLyogVm9sdGFnZSBBU0lDIENvcmUgTG93IEVyciBUaHJlc2hvbGQgKi8KLQotLyoKLSAqIEZBTiAxIHNwZWVkCi0gKi8KLS8qIGFzc3VtaW5nOiA2NTAwcnBtICstMTUlLCA0IHB1bHNlcywKLSAqIHdhcm5pbmcgYXQ6CTgwICUKLSAqIGVycm9yIGF0Ogk3MCAlCi0gKiBubyB1cHBlciBsaW1pdAotICovCi0jZGVmaW5lCVNLX1NFTl9GQU5fSElHSF9FUlIJCTIwMDAwCS8qIEZBTiBTcGVlZCBIaWdoIEVyciBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX0ZBTl9ISUdIX1dBUk4JMjAwMDAJLyogRkFOIFNwZWVkIEhpZ2ggV2FybiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUJU0tfU0VOX0ZBTl9MT1dfV0FSTgkJIDUyMDAJLyogRkFOIFNwZWVkIExvdyBXYXJuIFRocmVzaG9sZCAqLwotI2RlZmluZQlTS19TRU5fRkFOX0xPV19FUlIJCSA0NTUwCS8qIEZBTiBTcGVlZCBMb3cgRXJyIFRocmVzaG9sZCAqLwotCi0vKgotICogU29tZSBWb2x0YWdlcyBuZWVkIGR5bmFtaWMgdGhyZXNob2xkcwotICovCi0jZGVmaW5lCVNLX1NFTl9EWU5fSU5JVF9OT05FCQkgMCAgLyogTm8gZHluYW1pYyBpbml0IG9mIHRocmVzaG9sZHMgKi8KLSNkZWZpbmUJU0tfU0VOX0RZTl9JTklUX1BDSV9JTwkJMTAgIC8qIEluaXQgUENJLUlPIHdpdGggbmV3IHRocmVzaG9sZHMgKi8KLSNkZWZpbmUJU0tfU0VOX0RZTl9JTklUX1ZBVVgJCTExICAvKiBJbml0IFZBVVggd2l0aCBuZXcgdGhyZXNob2xkcyAqLwotCi1leHRlcm4JaW50IFNrTG04MFJlYWRTZW5zb3IoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfU0VOU09SICpwU2VuKTsKLSNlbmRpZgkvKiBuX0lOQ19TS0dFSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlaW5pdC5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vpbml0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0M2U2MzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vpbml0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrZ2Vpbml0LmgKLSAqIFByb2plY3Q6CUdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMsIENvbW1vbiBNb2R1bGVzCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuODMgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDkvMTYgMTQ6MDc6MzcgJAotICogUHVycG9zZToJU3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEdFIEluaXQgTW9kdWxlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19JTkNfU0tHRUlOSVRfSF8KLSNkZWZpbmUgX19JTkNfU0tHRUlOSVRfSF8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgkvKiBfX2NwbHVzcGx1cyAqLwotCi0vKiBkZWZpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFNLX1RFU1RfVkFMCQkweDExMzM1NTc3VUwKLQotLyogbW9kaWZ5aW5nIExpbmsgTEVEIGJlaGF2aW91ciAodXNlZCB3aXRoIFNrR2VMaW5rTEVEKCkpICovCi0jZGVmaW5lIFNLX0xOS19PRkYJCUxFRF9PRkYKLSNkZWZpbmUgU0tfTE5LX09OCQkoTEVEX09OIHwgTEVEX0JMS19PRkYgfCBMRURfU1lOQ19PRkYpCi0jZGVmaW5lIFNLX0xOS19CTElOSwkoTEVEX09OIHwgTEVEX0JMS19PTiAgfCBMRURfU1lOQ19PTikKLSNkZWZpbmUgU0tfTE5LX1BFUk0JCShMRURfT04gfCBMRURfQkxLX09GRiB8IExFRF9TWU5DX09OKQotI2RlZmluZSBTS19MTktfVFNUCQkoTEVEX09OIHwgTEVEX0JMS19PTiAgfCBMRURfU1lOQ19PRkYpCi0KLS8qIHBhcmFtZXRlciAnTW9kZScgd2hlbiBjYWxsaW5nIFNLX0hXQUNfTElOS19MRUQoKSAqLwotI2RlZmluZSBTS19MRURfT0ZGCQlMRURfT0ZGCi0jZGVmaW5lIFNLX0xFRF9BQ1RJVkUJKExFRF9PTiB8IExFRF9CTEtfT0ZGIHwgTEVEX1NZTkNfT0ZGKQotI2RlZmluZSBTS19MRURfU1RBTkRCWQkoTEVEX09OIHwgTEVEX0JMS19PTiAgfCBMRURfU1lOQ19PRkYpCi0KLS8qIGFkZHJlc3NpbmcgTEVEIFJlZ2lzdGVycyBpbiBTa0dlWG1pdExFRCgpICovCi0jZGVmaW5lIFhNSVRfTEVEX0lOSQkwCi0jZGVmaW5lIFhNSVRfTEVEX0NOVAkoUlhfTEVEX1ZBTCAtIFJYX0xFRF9JTkkpCi0jZGVmaW5lIFhNSVRfTEVEX0NUUkwJKFJYX0xFRF9DVFJMLSBSWF9MRURfSU5JKQotI2RlZmluZSBYTUlUX0xFRF9UU1QJKFJYX0xFRF9UU1QgLSBSWF9MRURfSU5JKQotCi0vKiBwYXJhbWV0ZXIgJ01vZGUnIHdoZW4gY2FsbGluZyBTa0dlWG1pdExFRCgpICovCi0jZGVmaW5lIFNLX0xFRF9ESVMJMAotI2RlZmluZSBTS19MRURfRU5BCTEKLSNkZWZpbmUgU0tfTEVEX1RTVAkyCi0KLS8qIENvdW50ZXIgYW5kIFRpbWVyIGNvbnN0YW50cywgZm9yIGEgaG9zdCBjbG9jayBvZiA2Mi41IE1IeiAqLwotI2RlZmluZSBTS19YTUlUX0RVUgkJMHgwMDJmYWYwOFVMCS8qICA1MCBtcyAqLwotI2RlZmluZSBTS19CTEtfRFVSCQkweDAxZGNkNjUwVUwJLyogNTAwIG1zICovCi0KLSNkZWZpbmUgU0tfRFBPTExfREVGCTB4MDBlZTZiMjhVTAkvKiAyNTAgbXMgYXQgNjIuNSBNSHogKi8KLQotI2RlZmluZSBTS19EUE9MTF9NQVgJMHgwMGZmZmZmZlVMCS8qIDI2OCBtcyBhdCA2Mi41IE1IeiAqLwotCQkJCQkJCQkJCS8qIDIxNSBtcyBhdCA3OC4xMiBNSHogKi8KLQotI2RlZmluZSBTS19GQUNUXzYyCQkxMDAJCQkvKiBpcyBnaXZlbiBpbiBwZXJjZW50ICovCi0jZGVmaW5lIFNLX0ZBQ1RfNTMJCSA4NSAgICAgICAgIC8qIG9uIEdFTkVTSVM6CTUzLjEyIE1IeiAqLwotI2RlZmluZSBTS19GQUNUXzc4CQkxMjUJCQkvKiBvbiBZVUtPTjoJNzguMTIgTUh6ICovCi0KLS8qIFRpbWVvdXQgdmFsdWVzICovCi0jZGVmaW5lIFNLX01BQ19UT181Mwk3MgkJCS8qIE1BQyBhcmJpdGVyIHRpbWVvdXQgKi8KLSNkZWZpbmUgU0tfUEtUX1RPXzUzCTB4MjAwMAkJLyogUGFja2V0IGFyYml0ZXIgdGltZW91dCAqLwotI2RlZmluZSBTS19QS1RfVE9fTUFYCTB4ZmZmZgkJLyogTWF4aW11bSB2YWx1ZSAqLwotI2RlZmluZSBTS19SSV9UT181MwkJMzYJCQkvKiBSQU0gaW50ZXJmYWNlIHRpbWVvdXQgKi8KLQotI2RlZmluZSBTS19QSFlfQUNDX1RPCTYwMDAwMAkJLyogUEhZIGFjY2VzcyB0aW1lb3V0ICovCi0KLS8qIFJBTSBCdWZmZXIgSGlnaCBQYXVzZSBUaHJlc2hvbGQgdmFsdWVzICovCi0jZGVmaW5lIFNLX1JCX1VMUFAJCSggOCAqIDEwMjQpCS8qIFVwcGVyIExldmVsIGluIGtCLzggKi8KLSNkZWZpbmUgU0tfUkJfTExQUF9TCSgxMCAqIDEwMjQpCS8qIExvd2VyIExldmVsIGZvciBzbWFsbCBRdWV1ZXMgKi8KLSNkZWZpbmUgU0tfUkJfTExQUF9CCSgxNiAqIDEwMjQpCS8qIExvd2VyIExldmVsIGZvciBiaWcgUXVldWVzICovCi0KLSNpZm5kZWYgU0tfQk1VX1JYX1dNCi0jZGVmaW5lIFNLX0JNVV9SWF9XTQkweDYwMAkJLyogQk1VIFJ4IFdhdGVybWFyayAqLwotI2VuZGlmCi0jaWZuZGVmIFNLX0JNVV9UWF9XTQotI2RlZmluZSBTS19CTVVfVFhfV00JMHg2MDAJCS8qIEJNVSBUeCBXYXRlcm1hcmsgKi8KLSNlbmRpZgotCi0vKiBYTUFDIElJIFJ4IEhpZ2ggV2F0ZXJtYXJrICovCi0jZGVmaW5lIFNLX1hNX1JYX0hJX1dNCTB4MDVhYQkJLyogMTQ1MCAqLwotCi0vKiBYTUFDIElJIFR4IFRocmVzaG9sZCAqLwotI2RlZmluZSBTS19YTV9USFJfUkVETAkweDAxZmIJCS8qIC4uIGZvciByZWR1bmRhbnQgbGluayB1c2FnZSAqLwotI2RlZmluZSBTS19YTV9USFJfU0wJMHgwMWZiCQkvKiAuLiBmb3Igc2luZ2xlIGxpbmsgYWRhcHRlcnMgKi8KLSNkZWZpbmUgU0tfWE1fVEhSX01VTEwJMHgwMWZiCQkvKiAuLiBmb3IgbXVsdGlwbGUgbGluayB1c2FnZSAqLwotI2RlZmluZSBTS19YTV9USFJfSlVNQk8JMHgwM2ZjCQkvKiAuLiBmb3IganVtYm8gZnJhbWUgdXNhZ2UgKi8KLQotLyogdmFsdWVzIGZvciBHSVBvcnRVc2FnZSAqLwotI2RlZmluZSBTS19SRURfTElOSwkJMQkJLyogcmVkdW5kYW50IGxpbmsgdXNhZ2UgKi8KLSNkZWZpbmUgU0tfTVVMX0xJTksJCTIJCS8qIG11bHRpcGxlIGxpbmsgdXNhZ2UgKi8KLSNkZWZpbmUgU0tfSlVNQk9fTElOSwkzCQkvKiBkcml2ZXIgdXNlcyBqdW1ibyBmcmFtZXMgKi8KLQotLyogTWluaW11bSBSQU0gQnVmZmVyIFJ4IFF1ZXVlIFNpemUgKi8KLSNkZWZpbmUgU0tfTUlOX1JYUV9TSVpFCTE2CQkvKiAxNiBrQiAqLwotCi0vKiBNaW5pbXVtIFJBTSBCdWZmZXIgVHggUXVldWUgU2l6ZSAqLwotI2RlZmluZSBTS19NSU5fVFhRX1NJWkUJMTYJCS8qIDE2IGtCICovCi0KLS8qIFF1ZXVlIFNpemUgdW5pdHMgKi8KLSNkZWZpbmUgUVpfVU5JVFMJCTB4NwotI2RlZmluZSBRWl9TVEVQCQkJOAotCi0vKiBQZXJjZW50YWdlIG9mIHF1ZXVlIHNpemUgZnJvbSB3aG9sZSBtZW1vcnkgKi8KLS8qIDgwICUgZm9yIHJlY2VpdmUgKi8KLSNkZWZpbmUgUkFNX1FVT1RBX1JYCTgwTAotLyogMCUgZm9yIHN5bmMgdHJhbnNmZXIgKi8KLSNkZWZpbmUJUkFNX1FVT1RBX1NZTkMJMEwKLS8qIHRoZSByZXN0ICgyMCUpIGlzIHRha2VuIGZvciBhc3luYyB0cmFuc2ZlciAqLwotCi0vKiBHZXQgdGhlIHJvdW5kZWQgcXVldWUgc2l6ZSBpbiBCeXRlcyBpbiA4ayBzdGVwcyAqLwotI2RlZmluZSBST1VORF9RVUVVRV9TSVpFKFNpemVJbkJ5dGVzKQkJCQkJXAotCSgoKCh1bnNpZ25lZCBsb25nKSAoU2l6ZUluQnl0ZXMpICsgKFFaX1NURVAqMTAyNEwpLTEpIC8gMTAyNCkgJglcCi0JfihRWl9TVEVQLTEpKQotCi0vKiBHZXQgdGhlIHJvdW5kZWQgcXVldWUgc2l6ZSBpbiBLQnl0ZXMgaW4gOGsgc3RlcHMgKi8KLSNkZWZpbmUgUk9VTkRfUVVFVUVfU0laRV9LQihLaWxvYnl0ZXMpIFwKLQlST1VORF9RVUVVRV9TSVpFKChLaWxvYnl0ZXMpICogMTAyNEwpCi0KLS8qIFR5cGVzIG9mIFJBTSBCdWZmZXIgUXVldWVzICovCi0jZGVmaW5lIFNLX1JYX1NSQU1fUQkxCS8qIHNtYWxsIHJlY2VpdmUgcXVldWUgKi8KLSNkZWZpbmUgU0tfUlhfQlJBTV9RCTIJLyogYmlnIHJlY2VpdmUgcXVldWUgKi8KLSNkZWZpbmUgU0tfVFhfUkFNX1EJCTMJLyogc21hbGwgb3IgYmlnIHRyYW5zbWl0IHF1ZXVlICovCi0KLS8qIHBhcmFtZXRlciAnRGlyJyB3aGVuIGNhbGxpbmcgU2tHZVN0b3BQb3J0KCkgKi8KLSNkZWZpbmUgU0tfU1RPUF9UWAkxCS8qIFN0b3BzIHRoZSB0cmFuc21pdCBwYXRoLCByZXNldHMgdGhlIFhNQUMgKi8KLSNkZWZpbmUgU0tfU1RPUF9SWAkyCS8qIFN0b3BzIHRoZSByZWNlaXZlIHBhdGggKi8KLSNkZWZpbmUgU0tfU1RPUF9BTEwJMwkvKiBTdG9wcyBSeCBhbmQgVHggcGF0aCwgcmVzZXRzIHRoZSBYTUFDICovCi0KLS8qIHBhcmFtZXRlciAnUnN0TW9kZScgd2hlbiBjYWxsaW5nIFNrR2VTdG9wUG9ydCgpICovCi0jZGVmaW5lIFNLX1NPRlRfUlNUCTEJLyogcGVyZm9ybSBhIHNvZnR3YXJlIHJlc2V0ICovCi0jZGVmaW5lIFNLX0hBUkRfUlNUCTIJLyogcGVyZm9ybSBhIGhhcmR3YXJlIHJlc2V0ICovCi0KLS8qIEluaXQgTGV2ZWxzICovCi0jZGVmaW5lIFNLX0lOSVRfREFUQQkwCS8qIEluaXQgbGV2ZWwgMDogaW5pdCBkYXRhIHN0cnVjdHVyZXMgKi8KLSNkZWZpbmUgU0tfSU5JVF9JTwkJMQkvKiBJbml0IGxldmVsIDE6IGluaXQgd2l0aCBJT3MgKi8KLSNkZWZpbmUgU0tfSU5JVF9SVU4JCTIJLyogSW5pdCBsZXZlbCAyOiBpbml0IGZvciBydW4gdGltZSAqLwotCi0vKiBMaW5rIE1vZGUgUGFyYW1ldGVyICovCi0jZGVmaW5lIFNLX0xNT0RFX0hBTEYJCTEJLyogSGFsZiBEdXBsZXggTW9kZSAqLwotI2RlZmluZSBTS19MTU9ERV9GVUxMCQkyCS8qIEZ1bGwgRHVwbGV4IE1vZGUgKi8KLSNkZWZpbmUgU0tfTE1PREVfQVVUT0hBTEYJMwkvKiBBdXRvSGFsZiBEdXBsZXggTW9kZSAqLwotI2RlZmluZSBTS19MTU9ERV9BVVRPRlVMTAk0CS8qIEF1dG9GdWxsIER1cGxleCBNb2RlICovCi0jZGVmaW5lIFNLX0xNT0RFX0FVVE9CT1RICTUJLyogQXV0b0JvdGggRHVwbGV4IE1vZGUgKi8KLSNkZWZpbmUgU0tfTE1PREVfQVVUT1NFTlNFCTYJLyogY29uZmlndXJlZCBtb2RlIGF1dG8gc2Vuc2luZyAqLwotI2RlZmluZSBTS19MTU9ERV9JTkRFVEVSTUlOQVRFRAk3CS8qIGluZGV0ZXJtaW5hdGVkICovCi0KLS8qIEF1dG8tbmVnb3RpYXRpb24gdGltZW91dCBpbiAxMDBtcyBncmFudWxhcml0eSAqLwotI2RlZmluZSBTS19BTkRfTUFYX1RPCQk2CS8qIFdhaXQgNjAwIG1zZWMgYmVmb3JlIGxpbmsgY29tZXMgdXAgKi8KLQotLyogQXV0by1uZWdvdGlhdGlvbiBlcnJvciBjb2RlcyAqLwotI2RlZmluZSBTS19BTkRfT0sJCQkwCS8qIG5vIGVycm9yICovCi0jZGVmaW5lIFNLX0FORF9PVEhFUgkJMQkvKiBvdGhlciBlcnJvciB0aGFuIGJlbG93ICovCi0jZGVmaW5lIFNLX0FORF9EVVBfQ0FQCQkyCS8qIER1cGxleCBjYXBhYmlsaXRpZXMgZXJyb3IgKi8KLQotCi0vKiBMaW5rIFNwZWVkIENhcGFiaWxpdGllcyAqLwotI2RlZmluZSBTS19MU1BFRURfQ0FQX0FVVE8JCQkoMTw8MCkJLyogQXV0b21hdGljIHJlc29sdXRpb24gKi8KLSNkZWZpbmUgU0tfTFNQRUVEX0NBUF8xME1CUFMJCSgxPDwxKQkvKiAxMCBNYnBzICovCi0jZGVmaW5lIFNLX0xTUEVFRF9DQVBfMTAwTUJQUwkJKDE8PDIpCS8qIDEwMCBNYnBzICovCi0jZGVmaW5lIFNLX0xTUEVFRF9DQVBfMTAwME1CUFMJCSgxPDwzKQkvKiAxMDAwIE1icHMgKi8KLSNkZWZpbmUgU0tfTFNQRUVEX0NBUF9JTkRFVEVSTUlOQVRFRCAoMTw8NCkgLyogaW5kZXRlcm1pbmF0ZWQgKi8KLQotLyogTGluayBTcGVlZCBQYXJhbWV0ZXIgKi8KLSNkZWZpbmUgU0tfTFNQRUVEX0FVVE8JCQkJMQkvKiBBdXRvbWF0aWMgcmVzb2x1dGlvbiAqLwotI2RlZmluZSBTS19MU1BFRURfMTBNQlBTCQkJMgkvKiAxMCBNYnBzICovCi0jZGVmaW5lIFNLX0xTUEVFRF8xMDBNQlBTCQkJMwkvKiAxMDAgTWJwcyAqLwotI2RlZmluZSBTS19MU1BFRURfMTAwME1CUFMJCQk0CS8qIDEwMDAgTWJwcyAqLwotI2RlZmluZSBTS19MU1BFRURfSU5ERVRFUk1JTkFURUQJNQkvKiBpbmRldGVybWluYXRlZCAqLwotCi0vKiBMaW5rIFNwZWVkIEN1cnJlbnQgU3RhdGUgKi8KLSNkZWZpbmUgU0tfTFNQRUVEX1NUQVRfVU5LTk9XTgkJMQotI2RlZmluZSBTS19MU1BFRURfU1RBVF8xME1CUFMJCTIKLSNkZWZpbmUgU0tfTFNQRUVEX1NUQVRfMTAwTUJQUyAJCTMKLSNkZWZpbmUgU0tfTFNQRUVEX1NUQVRfMTAwME1CUFMJCTQKLSNkZWZpbmUgU0tfTFNQRUVEX1NUQVRfSU5ERVRFUk1JTkFURUQgNQotCi0KLS8qIExpbmsgQ2FwYWJpbGl0eSBQYXJhbWV0ZXIgKi8KLSNkZWZpbmUgU0tfTE1PREVfQ0FQX0hBTEYJCSgxPDwwKQkvKiBIYWxmIER1cGxleCBNb2RlICovCi0jZGVmaW5lIFNLX0xNT0RFX0NBUF9GVUxMCQkoMTw8MSkJLyogRnVsbCBEdXBsZXggTW9kZSAqLwotI2RlZmluZSBTS19MTU9ERV9DQVBfQVVUT0hBTEYJKDE8PDIpCS8qIEF1dG9IYWxmIER1cGxleCBNb2RlICovCi0jZGVmaW5lIFNLX0xNT0RFX0NBUF9BVVRPRlVMTAkoMTw8MykJLyogQXV0b0Z1bGwgRHVwbGV4IE1vZGUgKi8KLSNkZWZpbmUgU0tfTE1PREVfQ0FQX0lOREVURVJNSU5BVEVEICgxPDw0KSAvKiBpbmRldGVybWluYXRlZCAqLwotCi0vKiBMaW5rIE1vZGUgQ3VycmVudCBTdGF0ZSAqLwotI2RlZmluZSBTS19MTU9ERV9TVEFUX1VOS05PV04JMQkvKiBVbmtub3duIER1cGxleCBNb2RlICovCi0jZGVmaW5lIFNLX0xNT0RFX1NUQVRfSEFMRgkJMgkvKiBIYWxmIER1cGxleCBNb2RlICovCi0jZGVmaW5lIFNLX0xNT0RFX1NUQVRfRlVMTAkJMwkvKiBGdWxsIER1cGxleCBNb2RlICovCi0jZGVmaW5lIFNLX0xNT0RFX1NUQVRfQVVUT0hBTEYJNAkvKiBIYWxmIER1cGxleCBNb2RlIG9idGFpbmVkIGJ5IEF1dG8tTmVnICovCi0jZGVmaW5lIFNLX0xNT0RFX1NUQVRfQVVUT0ZVTEwJNQkvKiBGdWxsIER1cGxleCBNb2RlIG9idGFpbmVkIGJ5IEF1dG8tTmVnICovCi0jZGVmaW5lIFNLX0xNT0RFX1NUQVRfSU5ERVRFUk1JTkFURUQgNgkvKiBpbmRldGVybWluYXRlZCAqLwotCi0vKiBGbG93IENvbnRyb2wgTW9kZSBQYXJhbWV0ZXIgKGFuZCBjYXBhYmlsaXRpZXMpICovCi0jZGVmaW5lIFNLX0ZMT1dfTU9ERV9OT05FCQkxCS8qIE5vIEZsb3ctQ29udHJvbCAqLwotI2RlZmluZSBTS19GTE9XX01PREVfTE9DX1NFTkQJMgkvKiBMb2NhbCBzdGF0aW9uIHNlbmRzIFBBVVNFICovCi0jZGVmaW5lIFNLX0ZMT1dfTU9ERV9TWU1NRVRSSUMJMwkvKiBCb3RoIHN0YXRpb25zIG1heSBzZW5kIFBBVVNFICovCi0jZGVmaW5lIFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNCTQJLyogQm90aCBzdGF0aW9ucyBtYXkgc2VuZCBQQVVTRSBvcgotCQkJCQkgKiBqdXN0IHRoZSByZW1vdGUgc3RhdGlvbiBtYXkgc2VuZCBQQVVTRQotCQkJCQkgKi8KLSNkZWZpbmUgU0tfRkxPV19NT0RFX0lOREVURVJNSU5BVEVEIDUJLyogaW5kZXRlcm1pbmF0ZWQgKi8KLQotLyogRmxvdyBDb250cm9sIFN0YXR1cyBQYXJhbWV0ZXIgKi8KLSNkZWZpbmUgU0tfRkxPV19TVEFUX05PTkUJCTEJLyogTm8gRmxvdyBDb250cm9sICovCi0jZGVmaW5lIFNLX0ZMT1dfU1RBVF9SRU1fU0VORAkyCS8qIFJlbW90ZSBTdGF0aW9uIHNlbmRzIFBBVVNFICovCi0jZGVmaW5lIFNLX0ZMT1dfU1RBVF9MT0NfU0VORAkzCS8qIExvY2FsIHN0YXRpb24gc2VuZHMgUEFVU0UgKi8KLSNkZWZpbmUgU0tfRkxPV19TVEFUX1NZTU1FVFJJQwk0CS8qIEJvdGggc3RhdGlvbiBtYXkgc2VuZCBQQVVTRSAqLwotI2RlZmluZSBTS19GTE9XX1NUQVRfSU5ERVRFUk1JTkFURUQgNQkvKiBpbmRldGVybWluYXRlZCAqLwotCi0vKiBNYXN0ZXIvU2xhdmUgTW9kZSBDYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgU0tfTVNfQ0FQX0FVVE8JCSgxPDwwKQkvKiBBdXRvbWF0aWMgcmVzb2x1dGlvbiAqLwotI2RlZmluZSBTS19NU19DQVBfTUFTVEVSCSgxPDwxKQkvKiBUaGlzIHN0YXRpb24gaXMgbWFzdGVyICovCi0jZGVmaW5lIFNLX01TX0NBUF9TTEFWRQkJKDE8PDIpCS8qIFRoaXMgc3RhdGlvbiBpcyBzbGF2ZSAqLwotI2RlZmluZSBTS19NU19DQVBfSU5ERVRFUk1JTkFURUQgKDE8PDMpCS8qIGluZGV0ZXJtaW5hdGVkICovCi0KLS8qIFNldCBNYXN0ZXIvU2xhdmUgTW9kZSBQYXJhbWV0ZXIgKGFuZCBjYXBhYmlsaXRpZXMpICovCi0jZGVmaW5lIFNLX01TX01PREVfQVVUTwkJMQkvKiBBdXRvbWF0aWMgcmVzb2x1dGlvbiAqLwotI2RlZmluZSBTS19NU19NT0RFX01BU1RFUgkyCS8qIFRoaXMgc3RhdGlvbiBpcyBtYXN0ZXIgKi8KLSNkZWZpbmUgU0tfTVNfTU9ERV9TTEFWRQkzCS8qIFRoaXMgc3RhdGlvbiBpcyBzbGF2ZSAqLwotI2RlZmluZSBTS19NU19NT0RFX0lOREVURVJNSU5BVEVEIDQJLyogaW5kZXRlcm1pbmF0ZWQgKi8KLQotLyogTWFzdGVyL1NsYXZlIFN0YXR1cyBQYXJhbWV0ZXIgKi8KLSNkZWZpbmUgU0tfTVNfU1RBVF9VTlNFVAkxCS8qIFRoZSBNL1Mgc3RhdHVzIGlzIG5vdCBzZXQgKi8KLSNkZWZpbmUgU0tfTVNfU1RBVF9NQVNURVIJMgkvKiBUaGlzIHN0YXRpb24gaXMgbWFzdGVyICovCi0jZGVmaW5lIFNLX01TX1NUQVRfU0xBVkUJMwkvKiBUaGlzIHN0YXRpb24gaXMgc2xhdmUgKi8KLSNkZWZpbmUgU0tfTVNfU1RBVF9GQVVMVAk0CS8qIE0vUyByZXNvbHV0aW9uIGZhaWxlZCAqLwotI2RlZmluZSBTS19NU19TVEFUX0lOREVURVJNSU5BVEVEIDUJLyogaW5kZXRlcm1pbmF0ZWQgKi8KLQotLyogcGFyYW1ldGVyICdNb2RlJyB3aGVuIGNhbGxpbmcgU2tYbVNldFJ4Q21kKCkgKi8KLSNkZWZpbmUgU0tfU1RSSVBfRkNTX09OCQkoMTw8MCkJLyogRW5hYmxlICBGQ1Mgc3RyaXBwaW5nIG9mIFJ4IGZyYW1lcyAqLwotI2RlZmluZSBTS19TVFJJUF9GQ1NfT0ZGCSgxPDwxKQkvKiBEaXNhYmxlIEZDUyBzdHJpcHBpbmcgb2YgUnggZnJhbWVzICovCi0jZGVmaW5lIFNLX1NUUklQX1BBRF9PTgkJKDE8PDIpCS8qIEVuYWJsZSAgcGFkIGJ5dGUgc3RyaXBwaW5nIG9mIFJ4IGZyICovCi0jZGVmaW5lIFNLX1NUUklQX1BBRF9PRkYJKDE8PDMpCS8qIERpc2FibGUgcGFkIGJ5dGUgc3RyaXBwaW5nIG9mIFJ4IGZyICovCi0jZGVmaW5lIFNLX0xFTkVSUl9PS19PTgkJKDE8PDQpCS8qIERvbid0IGNoayBmciBmb3IgaW4gcmFuZ2UgbGVuIGVycm9yICovCi0jZGVmaW5lIFNLX0xFTkVSUl9PS19PRkYJKDE8PDUpCS8qIENoZWNrIGZyYW1lcyBmb3IgaW4gcmFuZ2UgbGVuIGVycm9yICovCi0jZGVmaW5lIFNLX0JJR19QS19PS19PTgkJKDE8PDYpCS8qIERvbid0IHNldCBSeCBFcnJvciBiaXQgZm9yIGJpZyBmcmFtZXMgKi8KLSNkZWZpbmUgU0tfQklHX1BLX09LX09GRgkoMTw8NykJLyogU2V0IFJ4IEVycm9yIGJpdCBmb3IgYmlnIGZyYW1lcyAqLwotI2RlZmluZSBTS19TRUxGX1JYX09OCQkoMTw8OCkJLyogRW5hYmxlICBSeCBvZiBvd24gcGFja2V0cyAqLwotI2RlZmluZSBTS19TRUxGX1JYX09GRgkJKDE8PDkpCS8qIERpc2FibGUgUnggb2Ygb3duIHBhY2tldHMgKi8KLQotLyogcGFyYW1ldGVyICdQYXJhJyB3aGVuIGNhbGxpbmcgU2tNYWNTZXRSeFR4RW4oKSAqLwotI2RlZmluZSBTS19NQUNfTE9PUEJfT04JCSgxPDwwKQkvKiBFbmFibGUgIE1BQyBMb29wYmFjayBNb2RlICovCi0jZGVmaW5lIFNLX01BQ19MT09QQl9PRkYJKDE8PDEpCS8qIERpc2FibGUgTUFDIExvb3BiYWNrIE1vZGUgKi8KLSNkZWZpbmUgU0tfUEhZX0xPT1BCX09OCQkoMTw8MikJLyogRW5hYmxlICBQSFkgTG9vcGJhY2sgTW9kZSAqLwotI2RlZmluZSBTS19QSFlfTE9PUEJfT0ZGCSgxPDwzKQkvKiBEaXNhYmxlIFBIWSBMb29wYmFjayBNb2RlICovCi0jZGVmaW5lIFNLX1BIWV9GVUxMRF9PTgkJKDE8PDQpCS8qIEVuYWJsZSAgR01JSSBGdWxsIER1cGxleCAqLwotI2RlZmluZSBTS19QSFlfRlVMTERfT0ZGCSgxPDw1KQkvKiBEaXNhYmxlIEdNSUkgRnVsbCBEdXBsZXggKi8KLQotLyogU3RhdGVzIG9mIFBTdGF0ZSAqLwotI2RlZmluZSBTS19QUlRfUkVTRVQJMAkvKiB0aGUgcG9ydCBpcyByZXNldCAqLwotI2RlZmluZSBTS19QUlRfU1RPUAkJMQkvKiB0aGUgcG9ydCBpcyBzdG9wcGVkIChzaW1pbGFyIHRvIFNXIHJlc2V0KSAqLwotI2RlZmluZSBTS19QUlRfSU5JVAkJMgkvKiB0aGUgcG9ydCBpcyBpbml0aWFsaXplZCAqLwotI2RlZmluZSBTS19QUlRfUlVOCQkzCS8qIHRoZSBwb3J0IGhhcyBhbiBhY3RpdmUgbGluayAqLwotCi0vKiBQSFkgcG93ZXIgZG93biBtb2RlcyAqLwotI2RlZmluZSBQSFlfUE1fT1BFUkFUSU9OQUxfTU9ERQkJMAkvKiBQSFkgb3BlcmF0aW9uYWwgbW9kZSAqLwotI2RlZmluZSBQSFlfUE1fREVFUF9TTEVFUAkJCTEJLyogY29tYSBtb2RlIC0tPiBtaW5pbWFsIHBvd2VyICovCi0jZGVmaW5lIFBIWV9QTV9JRUVFX1BPV0VSX0RPV04JCTIJLyogSUVFRSAyMi4yLjQuMS41IGNvbXBsLiBwb3dlciBkb3duICovCi0jZGVmaW5lIFBIWV9QTV9FTkVSR1lfREVURUNUCQkzCS8qIGVuZXJneSBkZXRlY3QgKi8KLSNkZWZpbmUgUEhZX1BNX0VORVJHWV9ERVRFQ1RfUExVUwk0CS8qIGVuZXJneSBkZXRlY3QgcGx1cyAqLwotCi0vKiBEZWZhdWx0IHJlY2VpdmUgZnJhbWUgbGltaXQgZm9yIFdvcmthcm91bmQgb2YgWE1BQyBFcnJhdGEgKi8KLSNkZWZpbmUgU0tfREVGX1JYX1dBX0xJTQlTS19DT05TVFU2NCgxMDApCi0KLS8qIHZhbHVlcyBmb3IgR0lMZWRCbGlua0N0cmwgKExFRCBCbGluayBDb250cm9sKSAqLwotI2RlZmluZSBTS19BQ1RfTEVEX0JMSU5LCSgxPDwwKQkvKiBBY3RpdmUgTEVEIGJsaW5raW5nICovCi0jZGVmaW5lIFNLX0RVUF9MRURfTk9STUFMCSgxPDwxKQkvKiBEdXBsZXggTEVEIG5vcm1hbCAqLwotI2RlZmluZSBTS19MRURfTElOSzEwMF9PTgkoMTw8MikJLyogTGluayAxMDBNIExFRCBvbiAqLwotCi0vKiBMaW5rIFBhcnRuZXIgU3RhdHVzICovCi0jZGVmaW5lIFNLX0xJUEFfVU5LTk9XTgkwCS8qIExpbmsgcGFydG5lciBpcyBpbiB1bmtub3duIHN0YXRlICovCi0jZGVmaW5lIFNLX0xJUEFfTUFOVUFMCTEJLyogTGluayBwYXJ0bmVyIGlzIGluIGRldGVjdGVkIG1hbnVhbCBzdGF0ZSAqLwotI2RlZmluZSBTS19MSVBBX0FVVE8JMgkvKiBMaW5rIHBhcnRuZXIgaXMgaW4gYXV0by1uZWdvdGlhdGlvbiBzdGF0ZSAqLwotCi0vKiBNYXhpbXVtIFJlc3RhcnRzIGJlZm9yZSByZXN0YXJ0IGlzIGlnbm9yZWQgKDNDb20gV0EpICovCi0jZGVmaW5lIFNLX01BWF9MUkVTVEFSVAkzCS8qIE1heC4gMyB0aW1lcyB0aGUgbGluayBpcyByZXN0YXJ0ZWQgKi8KLQotLyogTWF4LiBBdXRvLW5lZy4gdGltZW91dHMgYmVmb3JlIGxpbmsgZGV0ZWN0aW9uIGluIHNlbnNlIG1vZGUgaXMgcmVzZXQgKi8KLSNkZWZpbmUgU0tfTUFYX0FORUdfVE8JMTAJLyogTWF4LiAxMCB0aW1lcyB0aGUgc2Vuc2UgbW9kZSBpcyByZXNldCAqLwotCi0vKiBzdHJ1Y3R1cmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTUFDIHNwZWNpZmljIGZ1bmN0aW9ucwotICovCi10eXBlZGVmIHN0cnVjdCBzX0dlTWFjRnVuYyB7Ci0JaW50ICAoKnBGbk1hY1VwZGF0ZVN0YXRzKShTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB1bnNpZ25lZCBpbnQgUG9ydCk7Ci0JaW50ICAoKnBGbk1hY1N0YXRpc3RpYykoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgdW5zaWduZWQgaW50IFBvcnQsCi0JCQkJCQkJU0tfVTE2IFN0YXRBZGRyLCBTS19VMzIgU0tfRkFSICpwVmFsKTsKLQlpbnQgICgqcEZuTWFjUmVzZXRDb3VudGVyKShTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB1bnNpZ25lZCBpbnQgUG9ydCk7Ci0JaW50ICAoKnBGbk1hY092ZXJmbG93KShTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB1bnNpZ25lZCBpbnQgUG9ydCwKLQkJCQkJCSAgIFNLX1UxNiBJU3RhdHVzLCBTS19VNjQgU0tfRkFSICpwVmFsKTsKLX0gU0tfR0VNQUNGVU5DOwotCi0vKgotICogUG9ydCBTdHJ1Y3R1cmUKLSAqLwotdHlwZWRlZglzdHJ1Y3Qgc19HZVBvcnQgewotI2lmbmRlZiBTS19ESUFHCi0JU0tfVElNRVIJUFdhVGltZXI7CS8qIFdvcmthcm91bmQgVGltZXIgKi8KLQlTS19USU1FUglIYWxmRHVwQ2hrVGltZXI7Ci0jZW5kaWYgLyogU0tfRElBRyAqLwotCVNLX1UzMglQUHJldlNob3J0czsJLyogUHJldmlvdXMgU2hvcnQgQ291bnRlciBjaGVja2luZyAqLwotCVNLX1UzMglQUHJldkZjczsJCS8qIFByZXZpb3VzIEZDUyBFcnJvciBDb3VudGVyIGNoZWNraW5nICovCi0JU0tfVTY0CVBQcmV2Ung7CQkvKiBQcmV2aW91cyBSeE9rIENvdW50ZXIgY2hlY2tpbmcgKi8KLQlTS19VNjQJUFJ4TGltOwkJCS8qIFByZXZpb3VzIFJ4T2sgQ291bnRlciBjaGVja2luZyAqLwotCVNLX1U2NAlMYXN0T2N0ZXRzOwkJLyogRm9yIGhhbGYgZHVwbGV4IGhhbmcgY2hlY2sgKi8KLQlpbnQJCVBMaW5rUmVzQ3Q7CQkvKiBMaW5rIFJlc3RhcnQgQ291bnRlciAqLwotCWludAkJUEF1dG9OZWdUaW1lT3V0Oy8qIEF1dG8tbmVnb3RpYXRpb24gdGltZW91dCBjdXJyZW50IHZhbHVlICovCi0JaW50CQlQQXV0b05lZ1RPQ3Q7CS8qIEF1dG8tbmVnb3RpYXRpb24gVGltZW91dCBDb3VudGVyICovCi0JaW50CQlQUnhRU2l6ZTsJCS8qIFBvcnQgUnggUXVldWUgU2l6ZSBpbiBrQiAqLwotCWludAkJUFhTUVNpemU7CQkvKiBQb3J0IFN5bmNocm9ub3VzICBUcmFuc21pdCBRdWV1ZSBTaXplIGluIGtCICovCi0JaW50CQlQWEFRU2l6ZTsJCS8qIFBvcnQgQXN5bmNocm9ub3VzIFRyYW5zbWl0IFF1ZXVlIFNpemUgaW4ga0IgKi8KLQlTS19VMzIJUFJ4UVJhbVN0YXJ0OwkvKiBSZWNlaXZlIFF1ZXVlIFJBTSBCdWZmZXIgU3RhcnQgQWRkcmVzcyAqLwotCVNLX1UzMglQUnhRUmFtRW5kOwkJLyogUmVjZWl2ZSBRdWV1ZSBSQU0gQnVmZmVyIEVuZCBBZGRyZXNzICovCi0JU0tfVTMyCVBYc1FSYW1TdGFydDsJLyogU3luYyBUeCBRdWV1ZSBSQU0gQnVmZmVyIFN0YXJ0IEFkZHJlc3MgKi8KLQlTS19VMzIJUFhzUVJhbUVuZDsJCS8qIFN5bmMgVHggUXVldWUgUkFNIEJ1ZmZlciBFbmQgQWRkcmVzcyAqLwotCVNLX1UzMglQWGFRUmFtU3RhcnQ7CS8qIEFzeW5jIFR4IFF1ZXVlIFJBTSBCdWZmZXIgU3RhcnQgQWRkcmVzcyAqLwotCVNLX1UzMglQWGFRUmFtRW5kOwkJLyogQXN5bmMgVHggUXVldWUgUkFNIEJ1ZmZlciBFbmQgQWRkcmVzcyAqLwotCVNLX1UzMglQUnhPdmVyQ250OwkJLyogUmVjZWl2ZSBPdmVyZmxvdyBDb3VudGVyICovCi0JaW50CQlQUnhRT2ZmOwkJLyogUnggUXVldWUgQWRkcmVzcyBPZmZzZXQgKi8KLQlpbnQJCVBYc1FPZmY7CQkvKiBTeW5jaHJvbm91cyBUeCBRdWV1ZSBBZGRyZXNzIE9mZnNldCAqLwotCWludAkJUFhhUU9mZjsJCS8qIEFzeW5jaHJvbm91cyBUeCBRdWV1ZSBBZGRyZXNzIE9mZnNldCAqLwotCWludAkJUGh5VHlwZTsJCS8qIFBIWSB1c2VkIG9uIHRoaXMgcG9ydCAqLwotCWludAkJUFN0YXRlOwkJCS8qIFBvcnQgc3RhdHVzIChyZXNldCwgc3RvcCwgaW5pdCwgcnVuKSAqLwotCVNLX1UxNglQaHlJZDE7CQkJLyogUEhZIElkMSBvbiB0aGlzIHBvcnQgKi8KLQlTS19VMTYJUGh5QWRkcjsJCS8qIE1ESU8vTURDIFBIWSBhZGRyZXNzICovCi0JU0tfVTE2CVBJc2F2ZTsJCQkvKiBTYXZlZCBJbnRlcnJ1cHQgc3RhdHVzIHdvcmQgKi8KLQlTS19VMTYJUFNzYXZlOwkJCS8qIFNhdmVkIFBIWSBzdGF0dXMgd29yZCAqLwotCVNLX1UxNglQR21BTmVnQWR2OwkJLyogU2F2ZWQgR1BoeSBBdXRvTmVnQWR2ZXJ0aXNtZW50IHJlZ2lzdGVyICovCi0JU0tfQk9PTAlQSFdMaW5rVXA7CQkvKiBUaGUgaGFyZHdhcmUgTGluayBpcyB1cCAod2lyaW5nKSAqLwotCVNLX0JPT0wJUExpbmtCcm9rZW47CS8qIElzIExpbmsgYnJva2VuID8gKi8KLQlTS19CT09MCVBDaGVja1BhcjsJCS8qIERvIHdlIGNoZWNrIGZvciBwYXJpdHkgZXJyb3JzID8gKi8KLQlTS19CT09MCUhhbGZEdXBUaW1lckFjdGl2ZTsKLQlTS19VOAlQTGlua0NhcDsJCS8qIExpbmsgQ2FwYWJpbGl0aWVzICovCi0JU0tfVTgJUExpbmtNb2RlQ29uZjsJLyogTGluayBNb2RlIGNvbmZpZ3VyZWQgKi8KLQlTS19VOAlQTGlua01vZGU7CQkvKiBMaW5rIE1vZGUgY3VycmVudGx5IHVzZWQgKi8KLQlTS19VOAlQTGlua01vZGVTdGF0dXM7LyogTGluayBNb2RlIFN0YXR1cyAqLwotCVNLX1U4CVBMaW5rU3BlZWRDYXA7CS8qIExpbmsgU3BlZWQgQ2FwYWJpbGl0aWVzKDEwLzEwMC8xMDAwIE1icHMpICovCi0JU0tfVTgJUExpbmtTcGVlZDsJCS8qIGNvbmZpZ3VyZWQgTGluayBTcGVlZCAoMTAvMTAwLzEwMDAgTWJwcykgKi8KLQlTS19VOAlQTGlua1NwZWVkVXNlZDsJLyogY3VycmVudCBMaW5rIFNwZWVkICgxMC8xMDAvMTAwMCBNYnBzKSAqLwotCVNLX1U4CVBGbG93Q3RybENhcDsJLyogRmxvdyBDb250cm9sIENhcGFiaWxpdGllcyAqLwotCVNLX1U4CVBGbG93Q3RybE1vZGU7CS8qIEZsb3cgQ29udHJvbCBNb2RlICovCi0JU0tfVTgJUEZsb3dDdHJsU3RhdHVzOy8qIEZsb3cgQ29udHJvbCBTdGF0dXMgKi8KLQlTS19VOAlQTVNDYXA7CQkJLyogTWFzdGVyL1NsYXZlIENhcGFiaWxpdGllcyAqLwotCVNLX1U4CVBNU01vZGU7CQkvKiBNYXN0ZXIvU2xhdmUgTW9kZSAqLwotCVNLX1U4CVBNU1N0YXR1czsJCS8qIE1hc3Rlci9TbGF2ZSBTdGF0dXMgKi8KLQlTS19CT09MCVBBdXRvTmVnRmFpbDsJLyogQXV0by1uZWdvdGlhdGlvbiBmYWlsIGZsYWcgKi8KLQlTS19VOAlQTGlwYUF1dG9OZWc7CS8qIEF1dG8tbmVnb3RpYXRpb24gcG9zc2libGUgd2l0aCBMaW5rIFBhcnRuZXIgKi8KLQlTS19VOAlQQ2FibGVMZW47CQkvKiBDYWJsZSBMZW5ndGggKi8KLQlTS19VOAlQTWRpUGFpckxlbls0XTsJLyogTURJWzAuLjNdIFBhaXIgTGVuZ3RoICovCi0JU0tfVTgJUE1kaVBhaXJTdHNbNF07CS8qIE1ESVswLi4zXSBQYWlyIERpYWdub3N0aWMgU3RhdHVzICovCi0JU0tfVTgJUFBoeVBvd2VyU3RhdGU7CS8qIFBIWSBjdXJyZW50IHBvd2VyIHN0YXRlICovCi0JaW50CQlQTWFjQ29sVGhyZXM7CS8qIE1BQyBDb2xsaXNpb24gVGhyZXNob2xkICovCi0JaW50CQlQTWFjSmFtTGVuOwkJLyogTUFDIEphbSBsZW5ndGggKi8KLQlpbnQJCVBNYWNKYW1JcGdWYWw7CS8qIE1BQyBKYW0gSVBHICovCi0JaW50CQlQTWFjSmFtSXBnRGF0YTsJLyogTUFDIElQRyBKYW0gdG8gRGF0YSAqLwotCWludAkJUE1hY0lwZ0RhdGE7CS8qIE1BQyBEYXRhIElQRyAqLwotCVNLX0JPT0wgUE1hY0xpbWl0NDsJCS8qIHJlc2V0IGNvbGxpc2lvbiBjb3VudGVyIGFuZCBiYWNrb2ZmIGFsZ29yaXRobSAqLwotfSBTS19HRVBPUlQ7Ci0KLS8qCi0gKiBHaWdhYml0IEV0aGVybmV0IEluaXRpYWxpemF0aW9uIFN0cnVjdAotICogKGhhcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYWRhcHRlciBjb250ZXh0KQotICovCi10eXBlZGVmCXN0cnVjdCBzX0dlSW5pdCB7Ci0JaW50CQkJR0lDaGlwSWQ7CQkvKiBDaGlwIElkZW50aWZpY2F0aW9uIE51bWJlciAqLwotCWludAkJCUdJQ2hpcFJldjsJCS8qIENoaXAgUmV2aXNpb24gTnVtYmVyICovCi0JU0tfVTgJCUdJUGNpSHdSZXY7CQkvKiBQQ0kgSFcgUmV2aXNpb24gTnVtYmVyICovCi0JU0tfQk9PTAkJR0lHZW5lc2lzOwkJLyogR2VuZXNpcyBhZGFwdGVyID8gKi8KLQlTS19CT09MCQlHSVl1a29uOwkJLyogWVVLT04tQTEvQnggY2hpcCAqLwotCVNLX0JPT0wJCUdJWXVrb25MaXRlOwkvKiBZVUtPTi1MaXRlIGNoaXAgKi8KLQlTS19CT09MCQlHSUNvcHBlclR5cGU7CS8qIENvcHBlciBUeXBlIGFkYXB0ZXIgPyAqLwotCVNLX0JPT0wJCUdJUGNpU2xvdDY0OwkvKiA2NC1iaXQgUENJIFNsb3QgKi8KLQlTS19CT09MCQlHSVBjaUNsb2NrNjY7CS8qIDY2IE1IeiBQQ0kgQ2xvY2sgKi8KLQlTS19CT09MCQlHSVZhdXhBdmFpbDsJLyogVkFVWCBhdmFpbGFibGUgKFlVS09OKSAqLwotCVNLX0JPT0wJCUdJWXVrb24zMkJpdDsJLyogMzItQml0IFlVS09OIGFkYXB0ZXIgKi8KLQlTS19VMTYJCUdJTGVkQmxpbmtDdHJsOwkvKiBMRUQgQmxpbmsgQ29udHJvbCAqLwotCWludAkJCUdJTWFjc0ZvdW5kOwkvKiBOdW1iZXIgb2YgTUFDcyBmb3VuZCBvbiB0aGlzIGFkYXB0ZXIgKi8KLQlpbnQJCQlHSU1hY1R5cGU7CQkvKiBNQUMgVHlwZSB1c2VkIG9uIHRoaXMgYWRhcHRlciAqLwotCWludAkJCUdJSHN0Q2xrRmFjdDsJLyogSG9zdCBDbG9jayBGYWN0b3IgKDYyLjUgLyBIc3RDbGsgKiAxMDApICovCi0JaW50CQkJR0lQb3J0VXNhZ2U7CS8qIERyaXZlciBQb3J0IFVzYWdlICovCi0JaW50CQkJR0lMZXZlbDsJCS8qIEluaXRpYWxpemF0aW9uIExldmVsIGNvbXBsZXRlZCAqLwotCWludAkJCUdJUmFtU2l6ZTsJCS8qIFRoZSBSQU0gc2l6ZSBvZiB0aGUgYWRhcHRlciBpbiBrQiAqLwotCWludAkJCUdJV29sT2ZmczsJCS8qIFdPTCBSZWdpc3RlciBPZmZzZXQgKEhXLUJ1ZyBpbiBSZXYuIEEpICovCi0JU0tfVTMyCQlHSVJhbU9mZnM7CQkvKiBSQU0gQWRkcmVzcyBPZmZzZXQgZm9yIGFkZHIgY2FsY3VsYXRpb24gKi8KLQlTS19VMzIJCUdJUG9sbFRpbWVyVmFsOwkvKiBEZXNjci4gUG9sbCBUaW1lciBJbml0IFZhbCAoSHN0Q2xrIHRpY2tzKSAqLwotCVNLX1UzMgkJR0lWYWxJcnFNYXNrOwkvKiBWYWx1ZSBmb3IgSW50ZXJydXB0IE1hc2sgKi8KLQlTS19VMzIJCUdJVGltZVN0YW1wQ250OwkvKiBUaW1lIFN0YW1wIEhpZ2ggQ291bnRlciAoWVVLT04gb25seSkgKi8KLQlTS19HRVBPUlQJR1BbU0tfTUFYX01BQ1NdOy8qIFBvcnQgRGVwZW5kZW50IEluZm9ybWF0aW9uICovCi0JU0tfR0VNQUNGVU5DIEdJRnVuYzsJCS8qIE1BQyBkZXBlZGVudCBmdW5jdGlvbnMgKi8KLX0gU0tfR0VJTklUOwotCi0vKgotICogRXJyb3IgbnVtYmVycyBhbmQgbWVzc2FnZXMgZm9yIHNreG1hYzIuYyBhbmQgc2tnZWluaXQuYwotICovCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDAxCQkoU0tfRVJSQkFTRV9IV0lOSVQpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDAxTVNHCSJTa1htQ2xyRXhhY3RBZGRyKCkgaGFzIGdvdCBpbGxlZ2FsIHBhcmFtZXRlcnMiCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDAyCQkoU0tFUlJfSFdJX0UwMDErMSkKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMDJNU0cJIlNrR2VJbml0KCk6IExldmVsIDEgY2FsbCBtaXNzaW5nIgotI2RlZmluZSBTS0VSUl9IV0lfRTAwMwkJKFNLRVJSX0hXSV9FMDAyKzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDAzTVNHCSJTa0dlSW5pdCgpIGNhbGxlZCB3aXRoIGlsbGVnYWwgaW5pdCBMZXZlbCIKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMDQJCShTS0VSUl9IV0lfRTAwMysxKQotI2RlZmluZSBTS0VSUl9IV0lfRTAwNE1TRwkiU2tHZUluaXRQb3J0KCk6IFF1ZXVlIFNpemUgaWxsZWdhbCBjb25maWd1cmVkIgotI2RlZmluZSBTS0VSUl9IV0lfRTAwNQkJKFNLRVJSX0hXSV9FMDA0KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDA1TVNHCSJTa0dlSW5pdFBvcnQoKTogY2Fubm90IGluaXQgcnVubmluZyBwb3J0cyIKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMDYJCShTS0VSUl9IV0lfRTAwNSsxKQotI2RlZmluZSBTS0VSUl9IV0lfRTAwNk1TRwkiU2tHZU1hY0luaXQoKTogUFN0YXRlIGRvZXMgbm90IG1hdGNoIEhXIHN0YXRlIgotI2RlZmluZSBTS0VSUl9IV0lfRTAwNwkJKFNLRVJSX0hXSV9FMDA2KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDA3TVNHCSJTa1htSW5pdER1cE1kKCkgY2FsbGVkIHdpdGggaW52YWxpZCBEdXAgTW9kZSIKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMDgJCShTS0VSUl9IV0lfRTAwNysxKQotI2RlZmluZSBTS0VSUl9IV0lfRTAwOE1TRwkiU2tYbVNldFJ4Q21kKCkgY2FsbGVkIHdpdGggaW52YWxpZCBNb2RlIgotI2RlZmluZSBTS0VSUl9IV0lfRTAwOQkJKFNLRVJSX0hXSV9FMDA4KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDA5TVNHCSJTa0dlQ2ZnU3luYygpIGNhbGxlZCBhbHRob3VnaCBQWFNRU2l6ZSB6ZXJvIgotI2RlZmluZSBTS0VSUl9IV0lfRTAxMAkJKFNLRVJSX0hXSV9FMDA5KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDEwTVNHCSJTa0dlQ2ZnU3luYygpIGNhbGxlZCB3aXRoIGludmFsaWQgcGFyYW1ldGVycyIKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMTEJCShTS0VSUl9IV0lfRTAxMCsxKQotI2RlZmluZSBTS0VSUl9IV0lfRTAxMU1TRwkiU2tHZUluaXRQb3J0KCk6IFJlY2VpdmUgUXVldWUgU2l6ZSB0b28gc21hbGwiCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDEyCQkoU0tFUlJfSFdJX0UwMTErMSkKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMTJNU0cJIlNrR2VJbml0UG9ydCgpOiBpbnZhbGlkIFF1ZXVlIFNpemUgc3BlY2lmaWVkIgotI2RlZmluZSBTS0VSUl9IV0lfRTAxMwkJKFNLRVJSX0hXSV9FMDEyKzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDEzTVNHCSJTa0dlSW5pdFBvcnQoKTogY2ZnIGNoYW5nZWQgZm9yIHJ1bm5pbmcgcXVldWUiCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDE0CQkoU0tFUlJfSFdJX0UwMTMrMSkKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMTRNU0cJIlNrR2VJbml0UG9ydCgpOiB1bmtub3duIEdJUG9ydFVzYWdlIHNwZWNpZmllZCIKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMTUJCShTS0VSUl9IV0lfRTAxNCsxKQotI2RlZmluZSBTS0VSUl9IV0lfRTAxNU1TRwkiSWxsZWdhbCBMaW5rIG1vZGUgcGFyYW1ldGVyIgotI2RlZmluZSBTS0VSUl9IV0lfRTAxNgkJKFNLRVJSX0hXSV9FMDE1KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDE2TVNHCSJJbGxlZ2FsIEZsb3cgY29udHJvbCBtb2RlIHBhcmFtZXRlciIKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMTcJCShTS0VSUl9IV0lfRTAxNisxKQotI2RlZmluZSBTS0VSUl9IV0lfRTAxN01TRwkiSWxsZWdhbCB2YWx1ZSBzcGVjaWZpZWQgZm9yIEdJUG9sbFRpbWVyVmFsIgotI2RlZmluZSBTS0VSUl9IV0lfRTAxOAkJKFNLRVJSX0hXSV9FMDE3KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDE4TVNHCSJGQVRBTDogU2tHZVN0b3BQb3J0KCkgZG9lcyBub3QgdGVybWluYXRlIChUeCkiCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDE5CQkoU0tFUlJfSFdJX0UwMTgrMSkKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMTlNU0cJIklsbGVnYWwgU3BlZWQgcGFyYW1ldGVyIgotI2RlZmluZSBTS0VSUl9IV0lfRTAyMAkJKFNLRVJSX0hXSV9FMDE5KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDIwTVNHCSJJbGxlZ2FsIE1hc3Rlci9TbGF2ZSBwYXJhbWV0ZXIiCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDIxCQkoU0tFUlJfSFdJX0UwMjArMSkKLSNkZWZpbmUJU0tFUlJfSFdJX0UwMjFNU0cJIk1hY1VwZGF0ZVN0YXRzKCk6IGNhbm5vdCB1cGRhdGUgc3RhdGlzdGljIGNvdW50ZXIiCi0jZGVmaW5lCVNLRVJSX0hXSV9FMDIyCQkoU0tFUlJfSFdJX0UwMjErMSkKLSNkZWZpbmUJU0tFUlJfSFdJX0UwMjJNU0cJIk1hY1N0YXRpc3RpYygpOiBpbGxlZ2FsIHN0YXRpc3RpYyBiYXNlIGFkZHJlc3MiCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDIzCQkoU0tFUlJfSFdJX0UwMjIrMSkKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMjNNU0cJIlNrR2VJbml0UG9ydCgpOiBUcmFuc21pdCBRdWV1ZSBTaXplIHRvbyBzbWFsbCIKLSNkZWZpbmUgU0tFUlJfSFdJX0UwMjQJCShTS0VSUl9IV0lfRTAyMysxKQotI2RlZmluZSBTS0VSUl9IV0lfRTAyNE1TRwkiRkFUQUw6IFNrR2VTdG9wUG9ydCgpIGRvZXMgbm90IHRlcm1pbmF0ZSAoUngpIgotI2RlZmluZSBTS0VSUl9IV0lfRTAyNQkJKFNLRVJSX0hXSV9FMDI0KzEpCi0jZGVmaW5lIFNLRVJSX0hXSV9FMDI1TVNHCSIiCi0KLS8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYJU0tfS1JfUFJPVE8KLQotLyoKLSAqIHB1YmxpYyBmdW5jdGlvbnMgaW4gc2tnZWluaXQuYwotICovCi1leHRlcm4gdm9pZAlTa0dlUG9sbFR4RCgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCVNLX0JPT0wgUG9sbFR4RCk7Ci0KLWV4dGVybiB2b2lkCVNrR2VZZWxsb3dMRUQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJU3RhdGUpOwotCi1leHRlcm4gaW50CVNrR2VDZmdTeW5jKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQsCi0JU0tfVTMyCUludFRpbWUsCi0JU0tfVTMyCUxpbUNvdW50LAotCWludAkJU3luY01vZGUpOwotCi1leHRlcm4gdm9pZAlTa0dlTG9hZExua1N5bmNDbnQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlTS19VMzIJQ250VmFsKTsKLQotZXh0ZXJuIHZvaWQJU2tHZVN0b3BQb3J0KAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQsCi0JaW50CQlEaXIsCi0JaW50CQlSc3RNb2RlKTsKLQotZXh0ZXJuIGludAlTa0dlSW5pdCgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlMZXZlbCk7Ci0KLWV4dGVybiB2b2lkCVNrR2VEZUluaXQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DKTsKLQotZXh0ZXJuIGludAlTa0dlSW5pdFBvcnQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCk7Ci0KLWV4dGVybiB2b2lkCVNrR2VYbWl0TEVEKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCUxlZCwKLQlpbnQJCU1vZGUpOwotCi1leHRlcm4gaW50CVNrR2VJbml0QXNzaWduUmFtVG9RdWV1ZXMoCi0JU0tfQUMJKnBBQywKLQlpbnQJCUFjdGl2ZVBvcnQsCi0JU0tfQk9PTAlEdWFsTmV0KTsKLQotLyoKLSAqIHB1YmxpYyBmdW5jdGlvbnMgaW4gc2t4bWFjMi5jCi0gKi8KLWV4dGVybiB2b2lkIFNrTWFjUnhUeERpc2FibGUoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCk7Ci0KLWV4dGVybiB2b2lkCVNrTWFjU29mdFJzdCgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0KTsKLQotZXh0ZXJuIHZvaWQJU2tNYWNIYXJkUnN0KAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQpOwotCi1leHRlcm4gdm9pZAlTa1htSW5pdE1hYygKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0KTsKLQotZXh0ZXJuIHZvaWQJU2tHbUluaXRNYWMoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCk7Ci0KLWV4dGVybiB2b2lkIFNrTWFjSW5pdFBoeSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCVNLX0JPT0wJRG9Mb29wKTsKLQotZXh0ZXJuIHZvaWQgU2tNYWNJcnFEaXNhYmxlKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQpOwotCi1leHRlcm4gdm9pZAlTa01hY0ZsdXNoVHhGaWZvKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQpOwotCi1leHRlcm4gdm9pZAlTa01hY0lycSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0KTsKLQotZXh0ZXJuIGludAlTa01hY0F1dG9OZWdEb25lKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQpOwotCi1leHRlcm4gdm9pZAlTa01hY0F1dG9OZWdMaXBhUGh5KAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQsCi0JU0tfVTE2CUlTdGF0dXMpOwotCi1leHRlcm4gaW50ICBTa01hY1J4VHhFbmFibGUoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCk7Ci0KLWV4dGVybiB2b2lkCVNrTWFjUHJvbWlzY01vZGUoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlTS19CT09MCUVuYWJsZSk7Ci0KLWV4dGVybiB2b2lkCVNrTWFjSGFzaGluZygKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCVNLX0JPT0wJRW5hYmxlKTsKLQotZXh0ZXJuIHZvaWQJU2tYbVBoeVJlYWQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlpbnQJCUFkZHIsCi0JU0tfVTE2CVNLX0ZBUiAqcFZhbCk7Ci0KLWV4dGVybiB2b2lkCVNrWG1QaHlXcml0ZSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCWludAkJQWRkciwKLQlTS19VMTYJVmFsKTsKLQotZXh0ZXJuIHZvaWQJU2tHbVBoeVJlYWQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlpbnQJCUFkZHIsCi0JU0tfVTE2CVNLX0ZBUiAqcFZhbCk7Ci0KLWV4dGVybiB2b2lkCVNrR21QaHlXcml0ZSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCWludAkJQWRkciwKLQlTS19VMTYJVmFsKTsKLQotZXh0ZXJuIHZvaWQJU2tYbUNsckV4YWN0QWRkcigKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCWludAkJU3RhcnROdW0sCi0JaW50CQlTdG9wTnVtKTsKLQotZXh0ZXJuIHZvaWQJU2tYbUF1dG9OZWdMaXBhWG1hYygKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCVNLX1UxNglJU3RhdHVzKTsKLQotZXh0ZXJuIGludCBTa1htVXBkYXRlU3RhdHMoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCXVuc2lnbmVkIGludCBQb3J0KTsKLQotZXh0ZXJuIGludCBTa0dtVXBkYXRlU3RhdHMoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCXVuc2lnbmVkIGludCBQb3J0KTsKLQotZXh0ZXJuIGludCBTa1htTWFjU3RhdGlzdGljKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQl1bnNpZ25lZCBpbnQgUG9ydCwKLQlTS19VMTYJU3RhdEFkZHIsCi0JU0tfVTMyCVNLX0ZBUiAqcFZhbCk7Ci0KLWV4dGVybiBpbnQgU2tHbU1hY1N0YXRpc3RpYygKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JdW5zaWduZWQgaW50IFBvcnQsCi0JU0tfVTE2CVN0YXRBZGRyLAotCVNLX1UzMglTS19GQVIgKnBWYWwpOwotCi1leHRlcm4gaW50IFNrWG1SZXNldENvdW50ZXIoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCXVuc2lnbmVkIGludCBQb3J0KTsKLQotZXh0ZXJuIGludCBTa0dtUmVzZXRDb3VudGVyKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQl1bnNpZ25lZCBpbnQgUG9ydCk7Ci0KLWV4dGVybiBpbnQgU2tYbU92ZXJmbG93U3RhdHVzKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQl1bnNpZ25lZCBpbnQgUG9ydCwKLQlTS19VMTYgIElTdGF0dXMsCi0JU0tfVTY0CVNLX0ZBUiAqcFN0YXR1cyk7Ci0KLWV4dGVybiBpbnQgU2tHbU92ZXJmbG93U3RhdHVzKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQl1bnNpZ25lZCBpbnQgUG9ydCwKLQlTS19VMTYJTWFjU3RhdHVzLAotCVNLX1U2NAlTS19GQVIgKnBTdGF0dXMpOwotCi1leHRlcm4gaW50IFNrR21DYWJsZURpYWdTdGF0dXMoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlTS19CT09MCVN0YXJ0VGVzdCk7Ci0KLSNpZmRlZiBTS19ESUFHCi1leHRlcm4gdm9pZAlTa0dlUGh5UmVhZCgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCWludAkJQWRkciwKLQlTS19VMTYJKnBWYWwpOwotCi1leHRlcm4gdm9pZAlTa0dlUGh5V3JpdGUoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlpbnQJCUFkZHIsCi0JU0tfVTE2CVZhbCk7Ci0KLWV4dGVybiB2b2lkCVNrTWFjU2V0UnhDbWQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlpbnQJCU1vZGUpOwotZXh0ZXJuIHZvaWQJU2tNYWNDcmNHZW5lcigKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0LAotCVNLX0JPT0wJRW5hYmxlKTsKLWV4dGVybiB2b2lkCVNrTWFjVGltZVN0YW1wKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQsCi0JU0tfQk9PTAlFbmFibGUpOwotZXh0ZXJuIHZvaWQJU2tYbVNlbmRDb250KAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQsCi0JU0tfQk9PTAlFbmFibGUpOwotI2VuZGlmIC8qIFNLX0RJQUcgKi8KLQotI2Vsc2UJLyogU0tfS1JfUFJPVE8gKi8KLQotLyoKLSAqIHB1YmxpYyBmdW5jdGlvbnMgaW4gc2tnZWluaXQuYwotICovCi1leHRlcm4gdm9pZAlTa0dlUG9sbFR4RCgpOwotZXh0ZXJuIHZvaWQJU2tHZVllbGxvd0xFRCgpOwotZXh0ZXJuIGludAlTa0dlQ2ZnU3luYygpOwotZXh0ZXJuIHZvaWQJU2tHZUxvYWRMbmtTeW5jQ250KCk7Ci1leHRlcm4gdm9pZAlTa0dlU3RvcFBvcnQoKTsKLWV4dGVybiBpbnQJU2tHZUluaXQoKTsKLWV4dGVybiB2b2lkCVNrR2VEZUluaXQoKTsKLWV4dGVybiBpbnQJU2tHZUluaXRQb3J0KCk7Ci1leHRlcm4gdm9pZAlTa0dlWG1pdExFRCgpOwotZXh0ZXJuIGludAlTa0dlSW5pdEFzc2lnblJhbVRvUXVldWVzKCk7Ci0KLS8qCi0gKiBwdWJsaWMgZnVuY3Rpb25zIGluIHNreG1hYzIuYwotICovCi1leHRlcm4gdm9pZCBTa01hY1J4VHhEaXNhYmxlKCk7Ci1leHRlcm4gdm9pZAlTa01hY1NvZnRSc3QoKTsKLWV4dGVybiB2b2lkCVNrTWFjSGFyZFJzdCgpOwotZXh0ZXJuIHZvaWQgU2tNYWNJbml0UGh5KCk7Ci1leHRlcm4gaW50ICBTa01hY1J4VHhFbmFibGUoKTsKLWV4dGVybiB2b2lkIFNrTWFjUHJvbWlzY01vZGUoKTsKLWV4dGVybiB2b2lkIFNrTWFjSGFzaGluZygpOwotZXh0ZXJuIHZvaWQgU2tNYWNJcnFEaXNhYmxlKCk7Ci1leHRlcm4gdm9pZAlTa01hY0ZsdXNoVHhGaWZvKCk7Ci1leHRlcm4gdm9pZAlTa01hY0lycSgpOwotZXh0ZXJuIGludAlTa01hY0F1dG9OZWdEb25lKCk7Ci1leHRlcm4gdm9pZAlTa01hY0F1dG9OZWdMaXBhUGh5KCk7Ci1leHRlcm4gdm9pZAlTa1htSW5pdE1hYygpOwotZXh0ZXJuIHZvaWQJU2tYbVBoeVJlYWQoKTsKLWV4dGVybiB2b2lkCVNrWG1QaHlXcml0ZSgpOwotZXh0ZXJuIHZvaWQJU2tHbUluaXRNYWMoKTsKLWV4dGVybiB2b2lkCVNrR21QaHlSZWFkKCk7Ci1leHRlcm4gdm9pZAlTa0dtUGh5V3JpdGUoKTsKLWV4dGVybiB2b2lkCVNrWG1DbHJFeGFjdEFkZHIoKTsKLWV4dGVybiB2b2lkCVNrWG1BdXRvTmVnTGlwYVhtYWMoKTsKLWV4dGVybiBpbnQJU2tYbVVwZGF0ZVN0YXRzKCk7Ci1leHRlcm4gaW50CVNrR21VcGRhdGVTdGF0cygpOwotZXh0ZXJuIGludAlTa1htTWFjU3RhdGlzdGljKCk7Ci1leHRlcm4gaW50CVNrR21NYWNTdGF0aXN0aWMoKTsKLWV4dGVybiBpbnQJU2tYbVJlc2V0Q291bnRlcigpOwotZXh0ZXJuIGludAlTa0dtUmVzZXRDb3VudGVyKCk7Ci1leHRlcm4gaW50CVNrWG1PdmVyZmxvd1N0YXR1cygpOwotZXh0ZXJuIGludAlTa0dtT3ZlcmZsb3dTdGF0dXMoKTsKLWV4dGVybiBpbnQJU2tHbUNhYmxlRGlhZ1N0YXR1cygpOwotCi0jaWZkZWYgU0tfRElBRwotZXh0ZXJuIHZvaWQJU2tHZVBoeVJlYWQoKTsKLWV4dGVybiB2b2lkCVNrR2VQaHlXcml0ZSgpOwotZXh0ZXJuIHZvaWQJU2tNYWNTZXRSeENtZCgpOwotZXh0ZXJuIHZvaWQJU2tNYWNDcmNHZW5lcigpOwotZXh0ZXJuIHZvaWQJU2tNYWNUaW1lU3RhbXAoKTsKLWV4dGVybiB2b2lkCVNrWG1TZW5kQ29udCgpOwotI2VuZGlmIC8qIFNLX0RJQUcgKi8KLQotI2VuZGlmCS8qIFNLX0tSX1BST1RPICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCS8qIF9fY3BsdXNwbHVzICovCi0KLSNlbmRpZgkvKiBfX0lOQ19TS0dFSU5JVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vwbm0yLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXBubTIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkMzA0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXBubTIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2dlcG5tMi5oCi0gKiBQcm9qZWN0OglHRW5lc2lzLCBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMzYgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDUvMjMgMTI6NDU6MTMgJAotICogUHVycG9zZToJRGVmaW5lcyBmb3IgUHJpdmF0ZSBOZXR3b3JrIE1hbmFnZW1lbnQgSW50ZXJmYWNlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QgR21iSC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX1NLR0VQTk0yX0hfCi0jZGVmaW5lIF9TS0dFUE5NMl9IXwotCi0vKgotICogR2VuZXJhbCBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFNLX1BOTUlfQ0hJUFNFVF9YTUFDCTEJLyogWE1BQzExODAwRlAgKi8KLSNkZWZpbmUgU0tfUE5NSV9DSElQU0VUX1lVS09OCTIJLyogWVVLT04gKi8KLQotI2RlZmluZQlTS19QTk1JX0JVU19QQ0kJCTEJLyogUENJIGJ1cyovCi0KLS8qCi0gKiBBY3Rpb25zCi0gKi8KLSNkZWZpbmUgU0tfUE5NSV9BQ1RfSURMRQkJMQotI2RlZmluZSBTS19QTk1JX0FDVF9SRVNFVAkJMgotI2RlZmluZSBTS19QTk1JX0FDVF9TRUxGVEVTVAkzCi0jZGVmaW5lIFNLX1BOTUlfQUNUX1JFU0VUQ05UCTQKLQotLyoKLSAqIFZQRCByZWxlYXRlZCBkZWZpbmVzCi0gKi8KLQotI2RlZmluZSBTS19QTk1JX1ZQRF9SVwkJMQotI2RlZmluZSBTS19QTk1JX1ZQRF9STwkJMgotCi0jZGVmaW5lIFNLX1BOTUlfVlBEX09LCQkJMAotI2RlZmluZSBTS19QTk1JX1ZQRF9OT1RGT1VORAkxCi0jZGVmaW5lIFNLX1BOTUlfVlBEX0NVVAkJCTIKLSNkZWZpbmUgU0tfUE5NSV9WUERfVElNRU9VVAkJMwotI2RlZmluZSBTS19QTk1JX1ZQRF9GVUxMCQk0Ci0jZGVmaW5lIFNLX1BOTUlfVlBEX05PV1JJVEUJCTUKLSNkZWZpbmUgU0tfUE5NSV9WUERfRkFUQUwJCTYKLQotI2RlZmluZSBTS19QTk1JX1ZQRF9JR05PUkUJMAotI2RlZmluZSBTS19QTk1JX1ZQRF9DUkVBVEUJMQotI2RlZmluZSBTS19QTk1JX1ZQRF9ERUxFVEUJMgotCi0KLS8qCi0gKiBSTE1UIHJlbGF0ZWQgZGVmaW5lcwotICovCi0jZGVmaW5lIFNLX1BOTUlfREVGX1JMTVRfQ0hHX1RIUkVTCTI0MAkvKiA0IGNoYW5nZXMgcGVyIG1pbnV0ZSAqLwotCi0KLS8qCi0gKiBWQ1QgaW50ZXJuYWwgc3RhdHVzIHZhbHVlcwotICovCi0jZGVmaW5lIFNLX1BOTUlfVkNUX1BFTkRJTkcJMzIKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfVEVTVF9ET05FCTY0Ci0jZGVmaW5lIFNLX1BOTUlfVkNUX0xJTksJMTI4Ci0KLS8qCi0gKiBJbnRlcm5hbCB0YWJsZSBkZWZpbml0aW9ucwotICovCi0jZGVmaW5lIFNLX1BOTUlfR0VUCQkwCi0jZGVmaW5lIFNLX1BOTUlfUFJFU0VUCTEKLSNkZWZpbmUgU0tfUE5NSV9TRVQJCTIKLQotI2RlZmluZSBTS19QTk1JX1JPCQkwCi0jZGVmaW5lIFNLX1BOTUlfUlcJCTEKLSNkZWZpbmUgU0tfUE5NSV9XTwkJMgotCi10eXBlZGVmIHN0cnVjdCBzX09pZFRhYkVudHJ5IHsKLQlTS19VMzIJCQlJZDsKLQlTS19VMzIJCQlJbnN0YW5jZU5vOwotCXVuc2lnbmVkIGludAlTdHJ1Y3RTaXplOwotCXVuc2lnbmVkIGludAlPZmZzZXQ7Ci0JaW50CQkJCUFjY2VzczsKLQlpbnQJCQkJKCogRnVuYykoU0tfQUMgKnBBYywgU0tfSU9DIHBJbywgaW50IGFjdGlvbiwKLQkJCQkJCQkgU0tfVTMyIElkLCBjaGFyKiBwQnVmLCB1bnNpZ25lZCBpbnQqIHBMZW4sCi0JCQkJCQkJIFNLX1UzMiBJbnN0YW5jZSwgdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsCi0JCQkJCQkJIFNLX1UzMiBOZXROdW1iZXIpOwotCVNLX1UxNgkJCVBhcmFtOwotfSBTS19QTk1JX1RBQl9FTlRSWTsKLQotCi0vKgotICogVHJhcCBsZW5ndGhzCi0gKi8KLSNkZWZpbmUgU0tfUE5NSV9UUkFQX1NJTVBMRV9MRU4JCQkxNwotI2RlZmluZSBTS19QTk1JX1RSQVBfU0VOU09SX0xFTl9CQVNFCTQ2Ci0jZGVmaW5lIFNLX1BOTUlfVFJBUF9STE1UX0NIQU5HRV9MRU4JMjMKLSNkZWZpbmUgU0tfUE5NSV9UUkFQX1JMTVRfUE9SVF9MRU4JCTIzCi0KLS8qCi0gKiBOdW1iZXIgb2YgTUFDIHR5cGVzIHN1cHBvcnRlZAotICovCi0jZGVmaW5lIFNLX1BOTUlfTUFDX1RZUEVTCShTS19NQUNfR01BQyArIDEpCi0KLS8qCi0gKiBNQUMgc3RhdGlzdGljIGRhdGEgbGlzdCAob3ZlcmFsbCBzZXQgZm9yIE1BQyB0eXBlcyB1c2VkKQotICovCi1lbnVtIFNLX01BQ1NUQVRTIHsKLQlTS19QTk1JX0hUWAkJCQk9IDAsCi0JU0tfUE5NSV9IVFhfT0NURVQsCi0JU0tfUE5NSV9IVFhfT0NURVRISUdIIAk9IFNLX1BOTUlfSFRYX09DVEVULAotCVNLX1BOTUlfSFRYX09DVEVUTE9XLAotCVNLX1BOTUlfSFRYX0JST0FEQ0FTVCwKLQlTS19QTk1JX0hUWF9NVUxUSUNBU1QsCi0JU0tfUE5NSV9IVFhfVU5JQ0FTVCwKLQlTS19QTk1JX0hUWF9CVVJTVCwKLQlTS19QTk1JX0hUWF9QTUFDQywKLQlTS19QTk1JX0hUWF9NQUNDLAotCVNLX1BOTUlfSFRYX0NPTCwKLQlTS19QTk1JX0hUWF9TSU5HTEVfQ09MLAotCVNLX1BOTUlfSFRYX01VTFRJX0NPTCwKLQlTS19QTk1JX0hUWF9FWENFU1NfQ09MLAotCVNLX1BOTUlfSFRYX0xBVEVfQ09MLAotCVNLX1BOTUlfSFRYX0RFRkZFUkFMLAotCVNLX1BOTUlfSFRYX0VYQ0VTU19ERUYsCi0JU0tfUE5NSV9IVFhfVU5ERVJSVU4sCi0JU0tfUE5NSV9IVFhfQ0FSUklFUiwKLQlTS19QTk1JX0hUWF9VVElMVU5ERVIsCi0JU0tfUE5NSV9IVFhfVVRJTE9WRVIsCi0JU0tfUE5NSV9IVFhfNjQsCi0JU0tfUE5NSV9IVFhfMTI3LAotCVNLX1BOTUlfSFRYXzI1NSwKLQlTS19QTk1JX0hUWF81MTEsCi0JU0tfUE5NSV9IVFhfMTAyMywKLQlTS19QTk1JX0hUWF9NQVgsCi0JU0tfUE5NSV9IVFhfTE9OR0ZSQU1FUywKLQlTS19QTk1JX0hUWF9TWU5DLAotCVNLX1BOTUlfSFRYX1NZTkNfT0NURVQsCi0JU0tfUE5NSV9IVFhfUkVTRVJWRUQsCi0JCi0JU0tfUE5NSV9IUlgsCi0JU0tfUE5NSV9IUlhfT0NURVQsCi0JU0tfUE5NSV9IUlhfT0NURVRISUdICT0gU0tfUE5NSV9IUlhfT0NURVQsCi0JU0tfUE5NSV9IUlhfT0NURVRMT1csCi0JU0tfUE5NSV9IUlhfQkFET0NURVQsCi0JU0tfUE5NSV9IUlhfQkFET0NURVRISUdIID0gU0tfUE5NSV9IUlhfQkFET0NURVQsCi0JU0tfUE5NSV9IUlhfQkFET0NURVRMT1csCi0JU0tfUE5NSV9IUlhfQlJPQURDQVNULAotCVNLX1BOTUlfSFJYX01VTFRJQ0FTVCwKLQlTS19QTk1JX0hSWF9VTklDQVNULAotCVNLX1BOTUlfSFJYX1BNQUNDLAotCVNLX1BOTUlfSFJYX01BQ0MsCi0JU0tfUE5NSV9IUlhfUE1BQ0NfRVJSLAotCVNLX1BOTUlfSFJYX01BQ0NfVU5LV04sCi0JU0tfUE5NSV9IUlhfQlVSU1QsCi0JU0tfUE5NSV9IUlhfTUlTU0VELAotCVNLX1BOTUlfSFJYX0ZSQU1JTkcsCi0JU0tfUE5NSV9IUlhfVU5ERVJTSVpFLAotCVNLX1BOTUlfSFJYX09WRVJGTE9XLAotCVNLX1BOTUlfSFJYX0pBQkJFUiwKLQlTS19QTk1JX0hSWF9DQVJSSUVSLAotCVNLX1BOTUlfSFJYX0lSTEVOR1RILAotCVNLX1BOTUlfSFJYX1NZTUJPTCwKLQlTS19QTk1JX0hSWF9TSE9SVFMsCi0JU0tfUE5NSV9IUlhfUlVOVCwKLQlTS19QTk1JX0hSWF9UT09fTE9ORywKLQlTS19QTk1JX0hSWF9GQ1MsCi0JU0tfUE5NSV9IUlhfQ0VYVCwKLQlTS19QTk1JX0hSWF9VVElMVU5ERVIsCi0JU0tfUE5NSV9IUlhfVVRJTE9WRVIsCi0JU0tfUE5NSV9IUlhfNjQsCi0JU0tfUE5NSV9IUlhfMTI3LAotCVNLX1BOTUlfSFJYXzI1NSwKLQlTS19QTk1JX0hSWF81MTEsCi0JU0tfUE5NSV9IUlhfMTAyMywKLQlTS19QTk1JX0hSWF9NQVgsCi0JU0tfUE5NSV9IUlhfTE9OR0ZSQU1FUywKLQkKLQlTS19QTk1JX0hSWF9SRVNFUlZFRCwKLQkKLQlTS19QTk1JX01BWF9JRFgJCS8qIE5PVEU6IEVuc3VyZSBTS19QTk1JX0NOVF9OTyBpcyBzZXQgdG8gdGhpcyB2YWx1ZSAqLwotfTsKLQotLyoKLSAqIE1BQyBzcGVjaWZpYyBkYXRhCi0gKi8KLXR5cGVkZWYgc3RydWN0IHNfUG5taVN0YXRBZGRyIHsKLQlTS19VMTYJCVJlZzsJCS8qIE1BQyByZWdpc3RlciBjb250YWluaW5nIHRoZSB2YWx1ZSAqLwotCVNLX0JPT0wJCUdldE9mZnNldDsJLyogVFJVRTogT2Zmc2V0IG1hbmFnZWQgYnkgUE5NSSAoY2FsbCBHZXRTdGF0VmFsKCkpKi8KLX0gU0tfUE5NSV9TVEFUQUREUjsKLQotCi0vKgotICogU0tfUE5NSV9TVFJVQ1RfREFUQSBjb3B5IG9mZnNldCBldmFsdWF0aW9uIG1hY3JvcwotICovCi0jZGVmaW5lIFNLX1BOTUlfT0ZGKGUpCQkoKFNLX1UzMikoU0tfVVBUUikmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5lKSkKLSNkZWZpbmUgU0tfUE5NSV9NQUlfT0ZGKGUpCSgoU0tfVTMyKShTS19VUFRSKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPmUpKQotI2RlZmluZSBTS19QTk1JX1ZQRF9PRkYoZSkJKChTS19VMzIpKFNLX1VQVFIpJigoKFNLX1BOTUlfVlBEICopMCktPmUpKQotI2RlZmluZSBTS19QTk1JX1NFTl9PRkYoZSkJKChTS19VMzIpKFNLX1VQVFIpJigoKFNLX1BOTUlfU0VOU09SICopMCktPmUpKQotI2RlZmluZSBTS19QTk1JX0NIS19PRkYoZSkJKChTS19VMzIpKFNLX1VQVFIpJigoKFNLX1BOTUlfQ0hFQ0tTVU0gKikwKS0+ZSkpCi0jZGVmaW5lIFNLX1BOTUlfU1RBX09GRihlKQkoKFNLX1UzMikoU0tfVVBUUikmKCgoU0tfUE5NSV9TVEFUICopMCktPmUpKQotI2RlZmluZSBTS19QTk1JX0NORl9PRkYoZSkJKChTS19VMzIpKFNLX1VQVFIpJigoKFNLX1BOTUlfQ09ORiAqKTApLT5lKSkKLSNkZWZpbmUgU0tfUE5NSV9STE1fT0ZGKGUpCSgoU0tfVTMyKShTS19VUFRSKSYoKChTS19QTk1JX1JMTVQgKikwKS0+ZSkpCi0jZGVmaW5lIFNLX1BOTUlfTU9OX09GRihlKQkoKFNLX1UzMikoU0tfVVBUUikmKCgoU0tfUE5NSV9STE1UX01PTklUT1IgKikwKS0+ZSkpCi0jZGVmaW5lIFNLX1BOTUlfVFJQX09GRihlKQkoKFNLX1UzMikoU0tfVVBUUikmKCgoU0tfUE5NSV9UUkFQICopMCktPmUpKQotCi0jZGVmaW5lIFNLX1BOTUlfU0VUX1NUQVQoYixzLG8pCXtTS19VMzIJVmFsMzI7IGNoYXIgKnBWYWw7IFwKLQkJCQkJVmFsMzIgPSAocyk7IFwKLQkJCQkJcFZhbCA9IChjaGFyICopKGIpICsgKChTS19VMzIpKFNLX1VQVFIpIFwKLQkJCQkJCSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBcCi0JCQkJCQlSZXR1cm5TdGF0dXMuRXJyb3JTdGF0dXMpKTsgXAotCQkJCQlTS19QTk1JX1NUT1JFX1UzMihwVmFsLCBWYWwzMik7IFwKLQkJCQkJVmFsMzIgPSAobyk7IFwKLQkJCQkJcFZhbCA9IChjaGFyICopKGIpICsgKChTS19VMzIpKFNLX1VQVFIpIFwKLQkJCQkJCSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBcCi0JCQkJCQlSZXR1cm5TdGF0dXMuRXJyb3JPZmZzZXQpKTsgXAotCQkJCQlTS19QTk1JX1NUT1JFX1UzMihwVmFsLCBWYWwzMik7fQotCi0vKgotICogVGltZSBtYWNyb3MKLSAqLwotI2lmbmRlZiBTS19QTk1JX0hVTkRSRURTX1NFQwotI2lmIFNLX1RJQ0tTX1BFUl9TRUMgPT0gMTAwCi0jZGVmaW5lIFNLX1BOTUlfSFVORFJFRFNfU0VDKHQpCSh0KQotI2Vsc2UKLSNkZWZpbmUgU0tfUE5NSV9IVU5EUkVEU19TRUModCkJKCgodCkgKiAxMDApIC8gKFNLX1RJQ0tTX1BFUl9TRUMpKQotI2VuZGlmIC8qICFTS19USUNLU19QRVJfU0VDICovCi0jZW5kaWYgLyogIVNLX1BOTUlfSFVORFJFRFNfU0VDICovCi0KLS8qCi0gKiBNYWNyb3MgdG8gd29yayBhcm91bmQgYWxpZ25tZW50IHByb2JsZW1zCi0gKi8KLSNpZm5kZWYgU0tfUE5NSV9TVE9SRV9VMTYKLSNkZWZpbmUgU0tfUE5NSV9TVE9SRV9VMTYocCx2KQl7KihjaGFyICopKHApID0gKigoY2hhciAqKSYodikpOyBcCi0JCQkJCSooKGNoYXIgKikocCkgKyAxKSA9IFwKLQkJCQkJCSooKChjaGFyICopJih2KSkgKyAxKTt9Ci0jZW5kaWYKLQotI2lmbmRlZiBTS19QTk1JX1NUT1JFX1UzMgotI2RlZmluZSBTS19QTk1JX1NUT1JFX1UzMihwLHYpCXsqKGNoYXIgKikocCkgPSAqKChjaGFyICopJih2KSk7IFwKLQkJCQkJKigoY2hhciAqKShwKSArIDEpID0gXAotCQkJCQkJKigoKGNoYXIgKikmKHYpKSArIDEpOyBcCi0JCQkJCSooKGNoYXIgKikocCkgKyAyKSA9IFwKLQkJCQkJCSooKChjaGFyICopJih2KSkgKyAyKTsgXAotCQkJCQkqKChjaGFyICopKHApICsgMykgPSBcCi0JCQkJCQkqKCgoY2hhciAqKSYodikpICsgMyk7fQotI2VuZGlmCi0KLSNpZm5kZWYgU0tfUE5NSV9TVE9SRV9VNjQKLSNkZWZpbmUgU0tfUE5NSV9TVE9SRV9VNjQocCx2KQl7KihjaGFyICopKHApID0gKigoY2hhciAqKSYodikpOyBcCi0JCQkJCSooKGNoYXIgKikocCkgKyAxKSA9IFwKLQkJCQkJCSooKChjaGFyICopJih2KSkgKyAxKTsgXAotCQkJCQkqKChjaGFyICopKHApICsgMikgPSBcCi0JCQkJCQkqKCgoY2hhciAqKSYodikpICsgMik7IFwKLQkJCQkJKigoY2hhciAqKShwKSArIDMpID0gXAotCQkJCQkJKigoKGNoYXIgKikmKHYpKSArIDMpOyBcCi0JCQkJCSooKGNoYXIgKikocCkgKyA0KSA9IFwKLQkJCQkJCSooKChjaGFyICopJih2KSkgKyA0KTsgXAotCQkJCQkqKChjaGFyICopKHApICsgNSkgPSBcCi0JCQkJCQkqKCgoY2hhciAqKSYodikpICsgNSk7IFwKLQkJCQkJKigoY2hhciAqKShwKSArIDYpID0gXAotCQkJCQkJKigoKGNoYXIgKikmKHYpKSArIDYpOyBcCi0JCQkJCSooKGNoYXIgKikocCkgKyA3KSA9IFwKLQkJCQkJCSooKChjaGFyICopJih2KSkgKyA3KTt9Ci0jZW5kaWYKLQotI2lmbmRlZiBTS19QTk1JX1JFQURfVTE2Ci0jZGVmaW5lIFNLX1BOTUlfUkVBRF9VMTYocCx2KQl7KigoY2hhciAqKSYodikpID0gKihjaGFyICopKHApOyBcCi0JCQkJCSooKChjaGFyICopJih2KSkgKyAxKSA9IFwKLQkJCQkJCSooKGNoYXIgKikocCkgKyAxKTt9Ci0jZW5kaWYKLQotI2lmbmRlZiBTS19QTk1JX1JFQURfVTMyCi0jZGVmaW5lIFNLX1BOTUlfUkVBRF9VMzIocCx2KQl7KigoY2hhciAqKSYodikpID0gKihjaGFyICopKHApOyBcCi0JCQkJCSooKChjaGFyICopJih2KSkgKyAxKSA9IFwKLQkJCQkJCSooKGNoYXIgKikocCkgKyAxKTsgXAotCQkJCQkqKCgoY2hhciAqKSYodikpICsgMikgPSBcCi0JCQkJCQkqKChjaGFyICopKHApICsgMik7IFwKLQkJCQkJKigoKGNoYXIgKikmKHYpKSArIDMpID0gXAotCQkJCQkJKigoY2hhciAqKShwKSArIDMpO30KLSNlbmRpZgotCi0jaWZuZGVmIFNLX1BOTUlfUkVBRF9VNjQKLSNkZWZpbmUgU0tfUE5NSV9SRUFEX1U2NChwLHYpCXsqKChjaGFyICopJih2KSkgPSAqKGNoYXIgKikocCk7IFwKLQkJCQkJKigoKGNoYXIgKikmKHYpKSArIDEpID0gXAotCQkJCQkJKigoY2hhciAqKShwKSArIDEpOyBcCi0JCQkJCSooKChjaGFyICopJih2KSkgKyAyKSA9IFwKLQkJCQkJCSooKGNoYXIgKikocCkgKyAyKTsgXAotCQkJCQkqKCgoY2hhciAqKSYodikpICsgMykgPSBcCi0JCQkJCQkqKChjaGFyICopKHApICsgMyk7IFwKLQkJCQkJKigoKGNoYXIgKikmKHYpKSArIDQpID0gXAotCQkJCQkJKigoY2hhciAqKShwKSArIDQpOyBcCi0JCQkJCSooKChjaGFyICopJih2KSkgKyA1KSA9IFwKLQkJCQkJCSooKGNoYXIgKikocCkgKyA1KTsgXAotCQkJCQkqKCgoY2hhciAqKSYodikpICsgNikgPSBcCi0JCQkJCQkqKChjaGFyICopKHApICsgNik7IFwKLQkJCQkJKigoKGNoYXIgKikmKHYpKSArIDcpID0gXAotCQkJCQkJKigoY2hhciAqKShwKSArIDcpO30KLSNlbmRpZgotCi0vKgotICogTWFjcm9zIGZvciBEZWJ1ZwotICovCi0jaWZkZWYgREVCVUcKLQotI2RlZmluZSBTS19QTk1JX0NIRUNLRkxBR1ModlN0KQl7aWYgKHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyA+IDAgfHwgXAotCQkJCQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnID4gMCB8fCBcCi0JCQkJCXBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgPiAwKSB7IFwKLQkJCQkJCVNLX0RCR19NU0cocEFDLCBcCi0JCQkJCQlTS19EQkdNT0RfUE5NSSwgXAotCQkJCQkJU0tfREJHQ0FUX0NUUkwsCVwKLQkJCQkJCSgiUE5NSTogRVJSOiAlcyBNYWNVRmxhZz0lZCwgUmxtdFVGbGFnPSVkLCBTaXJxVUZsYWc9JWRcbiIsIFwKLQkJCQkJCXZTdCwgXAotCQkJCQkJcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnLCBcCi0JCQkJCQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnLCBcCi0JCQkJCQlwQUMtPlBubWkuU2lycVVwZGF0ZWRGbGFnKSl9fQotCi0jZWxzZQkvKiAhREVCVUcgKi8KLQotI2RlZmluZSBTS19QTk1JX0NIRUNLRkxBR1ModlN0KQkvKiBOb3RoaW5nICovCi0KLSNlbmRpZgkvKiAhREVCVUcgKi8KLQotI2VuZGlmCS8qIF9TS0dFUE5NMl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vwbm1pLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXBubWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkMjE0Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXBubWkuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2dlcG5taS5oCi0gKiBQcm9qZWN0OglHRW5lc2lzLCBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuNjIgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDgvMTUgMTI6MzE6NTIgJAotICogUHVycG9zZToJRGVmaW5lcyBmb3IgUHJpdmF0ZSBOZXR3b3JrIE1hbmFnZW1lbnQgSW50ZXJmYWNlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QgR21iSC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX1NLR0VQTk1JX0hfCi0jZGVmaW5lIF9TS0dFUE5NSV9IXwotCi0vKgotICogSW5jbHVkZSBkZXBlbmRlbmNpZXMKLSAqLwotI2luY2x1ZGUgImgvc2t0eXBlcy5oIgotI2luY2x1ZGUgImgvc2tlcnJvci5oIgotI2luY2x1ZGUgImgvc2t0aW1lci5oIgotI2luY2x1ZGUgImgvc2tpMmMuaCIKLSNpbmNsdWRlICJoL3NrYWRkci5oIgotI2luY2x1ZGUgImgvc2tybG10LmgiCi0jaW5jbHVkZSAiaC9za3ZwZC5oIgotCi0vKgotICogTWFuYWdlbWVudCBEYXRhYmFzZSBWZXJzaW9uCi0gKi8KLSNkZWZpbmUgU0tfUE5NSV9NREJfVkVSU0lPTgkJMHgwMDAzMDAwMQkvKiAzLjEgKi8KLQotCi0vKgotICogRXZlbnQgZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9TSVJRX09WRVJGTE9XCQkxCS8qIENvdW50ZXIgb3ZlcmZsb3cgKi8KLSNkZWZpbmUgU0tfUE5NSV9FVlRfU0VOX1dBUl9MT1cJCQkyCS8qIExvd2VyIHdhciB0aHJlcyBleGNlZWRlZCAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9TRU5fV0FSX1VQUAkJCTMJLyogVXBwZXIgd2FyIHRocmVzIGV4Y2VlZGVkICovCi0jZGVmaW5lIFNLX1BOTUlfRVZUX1NFTl9FUlJfTE9XCQkJNAkvKiBMb3dlciBlcnIgdGhyZXMgZXhjZWVkZWQgKi8KLSNkZWZpbmUgU0tfUE5NSV9FVlRfU0VOX0VSUl9VUFAJCQk1CS8qIFVwcGVyIGVyciB0aHJlcyBleGNlZWRlZCAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9DSEdfRVNUX1RJTUVSCQk2CS8qIFRpbWVyIGV2ZW50IGZvciBSTE1UIENoZyAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9VVElMSVpBVElPTl9USU1FUgk3CS8qIFRpbWVyIGV2ZW50IGZvciBVdGlsaXphLiAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9DTEVBUl9DT1VOVEVSCQk4CS8qIENsZWFyIHN0YXRpc3RpYyBjb3VudGVycyAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9YTUFDX1JFU0VUCQkJOQkvKiBYTUFDIHdpbGwgYmUgcmVzZXQgKi8KLQotI2RlZmluZSBTS19QTk1JX0VWVF9STE1UX1BPUlRfVVAJCTEwCS8qIFBvcnQgY2FtZSBsb2dpY2FsbHkgdXAgKi8KLSNkZWZpbmUgU0tfUE5NSV9FVlRfUkxNVF9QT1JUX0RPV04JCTExCS8qIFBvcnQgd2VudCBsb2dpY2FsbHkgZG93biAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9STE1UX1NFR01FTlRBVElPTgkxMwkvKiBUd28gU1Agcm9vdCBicmlkZ2VzIGZvdW5kICovCi0jZGVmaW5lIFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX0RPV04JMTQJLyogUG9ydCB3ZW50IGxvZ2ljYWxseSBkb3duICovCi0jZGVmaW5lIFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX1VQCQkxNQkvKiBQb3J0IGNhbWUgbG9naWNhbGx5IHVwICovCi0jZGVmaW5lIFNLX1BOTUlfRVZUX1JMTVRfU0VUX05FVFMJCTE2CS8qIDEuIFBhcmFtZXRlciBpcyBudW1iZXIgb2YgbmV0cwotCQkJCQkJCQkJCQkJMSA9IHNpbmdsZSBuZXQ7IDIgPSBkdWFsIG5ldCAqLwotI2RlZmluZSBTS19QTk1JX0VWVF9WQ1RfUkVTRVQJCTE3CS8qIFZDVCBwb3J0IHJlc2V0IHRpbWVyIGV2ZW50IHN0YXJ0ZWQgd2l0aCBTRVQuICovCi0KLQotLyoKLSAqIFJldHVybiB2YWx1ZXMKLSAqLwotI2RlZmluZSBTS19QTk1JX0VSUl9PSwkJCQkwCi0jZGVmaW5lIFNLX1BOTUlfRVJSX0dFTkVSQUwJCQkxCi0jZGVmaW5lIFNLX1BOTUlfRVJSX1RPT19TSE9SVAkJMgotI2RlZmluZSBTS19QTk1JX0VSUl9CQURfVkFMVUUJCTMKLSNkZWZpbmUgU0tfUE5NSV9FUlJfUkVBRF9PTkxZCQk0Ci0jZGVmaW5lIFNLX1BOTUlfRVJSX1VOS05PV05fT0lECQk1Ci0jZGVmaW5lIFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVAk2Ci0jZGVmaW5lIFNLX1BOTUlfRVJSX1VOS05PV05fTkVUIAk3Ci0jZGVmaW5lIFNLX1BOTUlfRVJSX05PVF9TVVBQT1JURUQJMTAKLQotCi0vKgotICogUmV0dXJuIHZhbHVlcyBvZiBkcml2ZXIgcmVzZXQgZnVuY3Rpb24gU0tfRFJJVkVSX1JFU0VUKCkgYW5kCi0gKiBkcml2ZXIgZXZlbnQgZnVuY3Rpb24gU0tfRFJJVkVSX0VWRU5UKCkKLSAqLwotI2RlZmluZSBTS19QTk1JX0VSUl9PSwkJCTAKLSNkZWZpbmUgU0tfUE5NSV9FUlJfRkFJTAkJMQotCi0KLS8qCi0gKiBSZXR1cm4gdmFsdWVzIG9mIGRyaXZlciB0ZXN0IGZ1bmN0aW9uIFNLX0RSSVZFUl9TRUxGVEVTVCgpCi0gKi8KLSNkZWZpbmUgU0tfUE5NSV9UU1RfVU5LTk9XTgkJKDEgPDwgMCkKLSNkZWZpbmUgU0tfUE5NSV9UU1RfVFJBTkNFSVZFUgkJKDEgPDwgMSkKLSNkZWZpbmUgU0tfUE5NSV9UU1RfQVNJQwkJKDEgPDwgMikKLSNkZWZpbmUgU0tfUE5NSV9UU1RfU0VOU09SCQkoMSA8PCAzKQotI2RlZmluZSBTS19QTk1JX1RTVF9QT1dFUk1HTVQJCSgxIDw8IDQpCi0jZGVmaW5lIFNLX1BOTUlfVFNUX1BDSQkJCSgxIDw8IDUpCi0jZGVmaW5lIFNLX1BOTUlfVFNUX01BQwkJCSgxIDw8IDYpCi0KLQotLyoKLSAqIFJMTVQgc3BlY2lmaWMgZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBTS19QTk1JX1JMTVRfU1RBVFVTX1NUQU5EQlkJMQotI2RlZmluZSBTS19QTk1JX1JMTVRfU1RBVFVTX0FDVElWRQkyCi0jZGVmaW5lIFNLX1BOTUlfUkxNVF9TVEFUVVNfRVJST1IJMwotCi0jZGVmaW5lIFNLX1BOTUlfUkxNVF9MU1RBVF9QSFlfRE9XTgkxCi0jZGVmaW5lIFNLX1BOTUlfUkxNVF9MU1RBVF9BVVRPTkVHCTIKLSNkZWZpbmUgU0tfUE5NSV9STE1UX0xTVEFUX0xPR19ET1dOCTMKLSNkZWZpbmUgU0tfUE5NSV9STE1UX0xTVEFUX0xPR19VUAk0Ci0jZGVmaW5lIFNLX1BOTUlfUkxNVF9MU1RBVF9JTkRFVEVSTUlOQVRFRCA1Ci0KLSNkZWZpbmUgU0tfUE5NSV9STE1UX01PREVfQ0hLX0xJTksJKFNLX1JMTVRfQ0hFQ0tfTElOSykKLSNkZWZpbmUgU0tfUE5NSV9STE1UX01PREVfQ0hLX1JYCShTS19STE1UX0NIRUNLX0xPQ19MSU5LKQotI2RlZmluZSBTS19QTk1JX1JMTVRfTU9ERV9DSEtfU1BUCShTS19STE1UX0NIRUNLX1NFRykKLS8qICNkZWZpbmUgU0tfUE5NSV9STE1UX01PREVfQ0hLX0VYICovCi0KLS8qCi0gKiBPSUQgZGVmaW5pdGlvbgotICovCi0jaWZuZGVmIF9ORElTXwkvKiBDaGVjaywgd2hldGhlciBORElTIGFscmVhZHkgaW5jbHVkZWQgT0lEcyAqLwotCi0jZGVmaW5lIE9JRF9HRU5fWE1JVF9PSwkJCQkJMHgwMDAyMDEwMQotI2RlZmluZSBPSURfR0VOX1JDVl9PSwkJCQkJMHgwMDAyMDEwMgotI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IJCQkJMHgwMDAyMDEwMwotI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUgkJCQkweDAwMDIwMTA0Ci0jZGVmaW5lIE9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCTB4MDAwMjAxMDUKLQotLyogI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQJMHgwMDAyMDIwMSAqLwotI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlUCTB4MDAwMjAyMDIKLS8qICNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVAkweDAwMDIwMjAzICovCi0jZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlUCTB4MDAwMjAyMDQKLS8qICNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfQllURVNfWE1JVAkweDAwMDIwMjA1ICovCi0jZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUCTB4MDAwMjAyMDYKLS8qICNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YJMHgwMDAyMDIwNyAqLwotI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YJCTB4MDAwMjAyMDgKLS8qICNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWCTB4MDAwMjAyMDkgKi8KLSNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDVgkweDAwMDIwMjBBCi0vKiAjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDVgkweDAwMDIwMjBCICovCi0jZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YJMHgwMDAyMDIwQwotI2RlZmluZSBPSURfR0VOX1JDVl9DUkNfRVJST1IJCQkweDAwMDIwMjBECi0jZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RICTB4MDAwMjAyMEUKLQotI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJCTB4MDEwMTAxMDEKLSNkZWZpbmUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUwkJMHgwMTAxMDEwMgotLyogI2RlZmluZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1QJCTB4MDEwMTAxMDMgKi8KLS8qICNkZWZpbmUgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFCTB4MDEwMTAxMDQgKi8KLS8qICNkZWZpbmUgT0lEXzgwMl8zX01BQ19PUFRJT05TCQkweDAxMDEwMTA1ICovCi0JCQkKLSNkZWZpbmUgT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlQJMHgwMTAyMDEwMQotI2RlZmluZSBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OCTB4MDEwMjAxMDIKLSNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TCTB4MDEwMjAxMDMKLSNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQJCQkweDAxMDIwMjAxCi0jZGVmaW5lIE9JRF84MDJfM19YTUlUX01BWF9DT0xMSVNJT05TCTB4MDEwMjAyMDIKLSNkZWZpbmUgT0lEXzgwMl8zX1JDVl9PVkVSUlVOCQkJMHgwMTAyMDIwMwotI2RlZmluZSBPSURfODAyXzNfWE1JVF9VTkRFUlJVTgkJCTB4MDEwMjAyMDQKLSNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfVElNRVNfQ1JTX0xPU1QJMHgwMTAyMDIwNgotI2RlZmluZSBPSURfODAyXzNfWE1JVF9MQVRFX0NPTExJU0lPTlMJMHgwMTAyMDIwNwotCi0vKgotICogUG5QIGFuZCBQTSBPSURzCi0gKi8KLSNpZmRlZiBTS19QT1dFUl9NR01UCi0jZGVmaW5lIE9JRF9QTlBfQ0FQQUJJTElUSUVTCQkJMHhGRDAxMDEwMAotI2RlZmluZSBPSURfUE5QX1NFVF9QT1dFUgkJCQkweEZEMDEwMTAxCi0jZGVmaW5lIE9JRF9QTlBfUVVFUllfUE9XRVIJCQkJMHhGRDAxMDEwMgotI2RlZmluZSBPSURfUE5QX0FERF9XQUtFX1VQX1BBVFRFUk4JCTB4RkQwMTAxMDMKLSNkZWZpbmUgT0lEX1BOUF9SRU1PVkVfV0FLRV9VUF9QQVRURVJOCTB4RkQwMTAxMDQKLSNkZWZpbmUgT0lEX1BOUF9FTkFCTEVfV0FLRV9VUAkJCTB4RkQwMTAxMDYKLSNlbmRpZiAvKiBTS19QT1dFUl9NR01UICovCi0KLSNlbmRpZiAvKiBfTkRJU18gKi8KLQotI2RlZmluZSBPSURfU0tHRV9NREJfVkVSU0lPTgkJCTB4RkYwMTAxMDAKLSNkZWZpbmUgT0lEX1NLR0VfU1VQUE9SVEVEX0xJU1QJCQkweEZGMDEwMTAxCi0jZGVmaW5lIE9JRF9TS0dFX1ZQRF9GUkVFX0JZVEVTCQkJMHhGRjAxMDEwMgotI2RlZmluZSBPSURfU0tHRV9WUERfRU5UUklFU19MSVNUCQkweEZGMDEwMTAzCi0jZGVmaW5lIE9JRF9TS0dFX1ZQRF9FTlRSSUVTX05VTUJFUgkJMHhGRjAxMDEwNAotI2RlZmluZSBPSURfU0tHRV9WUERfS0VZCQkJCTB4RkYwMTAxMDUKLSNkZWZpbmUgT0lEX1NLR0VfVlBEX1ZBTFVFCQkJCTB4RkYwMTAxMDYKLSNkZWZpbmUgT0lEX1NLR0VfVlBEX0FDQ0VTUwkJCQkweEZGMDEwMTA3Ci0jZGVmaW5lIE9JRF9TS0dFX1ZQRF9BQ1RJT04JCQkJMHhGRjAxMDEwOAotCQkJCi0jZGVmaW5lIE9JRF9TS0dFX1BPUlRfTlVNQkVSCQkJMHhGRjAxMDExMAotI2RlZmluZSBPSURfU0tHRV9ERVZJQ0VfVFlQRQkJCTB4RkYwMTAxMTEKLSNkZWZpbmUgT0lEX1NLR0VfRFJJVkVSX0RFU0NSCQkJMHhGRjAxMDExMgotI2RlZmluZSBPSURfU0tHRV9EUklWRVJfVkVSU0lPTgkJCTB4RkYwMTAxMTMKLSNkZWZpbmUgT0lEX1NLR0VfSFdfREVTQ1IJCQkJMHhGRjAxMDExNAotI2RlZmluZSBPSURfU0tHRV9IV19WRVJTSU9OCQkJCTB4RkYwMTAxMTUKLSNkZWZpbmUgT0lEX1NLR0VfQ0hJUFNFVAkJCQkweEZGMDEwMTE2Ci0jZGVmaW5lIE9JRF9TS0dFX0FDVElPTgkJCQkJMHhGRjAxMDExNwotI2RlZmluZSBPSURfU0tHRV9SRVNVTFQJCQkJCTB4RkYwMTAxMTgKLSNkZWZpbmUgT0lEX1NLR0VfQlVTX1RZUEUJCQkJMHhGRjAxMDExOQotI2RlZmluZSBPSURfU0tHRV9CVVNfU1BFRUQJCQkJMHhGRjAxMDExQQotI2RlZmluZSBPSURfU0tHRV9CVVNfV0lEVEgJCQkJMHhGRjAxMDExQgotLyogMHhGRjAxMDExQyB1bnVzZWQgKi8KLSNkZWZpbmUgT0lEX1NLR0VfRElBR19BQ1RJT04JCQkweEZGMDEwMTFECi0jZGVmaW5lIE9JRF9TS0dFX0RJQUdfUkVTVUxUCQkJMHhGRjAxMDExRQotI2RlZmluZSBPSURfU0tHRV9NVFUJCQkJCTB4RkYwMTAxMUYKLSNkZWZpbmUgT0lEX1NLR0VfUEhZU19DVVJfQUREUgkJCTB4RkYwMTAxMjAKLSNkZWZpbmUgT0lEX1NLR0VfUEhZU19GQUNfQUREUgkJCTB4RkYwMTAxMjEKLSNkZWZpbmUgT0lEX1NLR0VfUE1ECQkJCQkweEZGMDEwMTIyCi0jZGVmaW5lIE9JRF9TS0dFX0NPTk5FQ1RPUgkJCQkweEZGMDEwMTIzCi0jZGVmaW5lIE9JRF9TS0dFX0xJTktfQ0FQCQkJCTB4RkYwMTAxMjQKLSNkZWZpbmUgT0lEX1NLR0VfTElOS19NT0RFCQkJCTB4RkYwMTAxMjUKLSNkZWZpbmUgT0lEX1NLR0VfTElOS19NT0RFX1NUQVRVUwkJMHhGRjAxMDEyNgotI2RlZmluZSBPSURfU0tHRV9MSU5LX1NUQVRVUwkJCTB4RkYwMTAxMjcKLSNkZWZpbmUgT0lEX1NLR0VfRkxPV0NUUkxfQ0FQCQkJMHhGRjAxMDEyOAotI2RlZmluZSBPSURfU0tHRV9GTE9XQ1RSTF9NT0RFCQkJMHhGRjAxMDEyOQotI2RlZmluZSBPSURfU0tHRV9GTE9XQ1RSTF9TVEFUVVMJCTB4RkYwMTAxMkEKLSNkZWZpbmUgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9DQVAJCTB4RkYwMTAxMkIKLSNkZWZpbmUgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9NT0RFCQkweEZGMDEwMTJDCi0jZGVmaW5lIE9JRF9TS0dFX1BIWV9PUEVSQVRJT05fU1RBVFVTCTB4RkYwMTAxMkQKLSNkZWZpbmUgT0lEX1NLR0VfTVVMVElDQVNUX0xJU1QJCQkweEZGMDEwMTJFCi0jZGVmaW5lIE9JRF9TS0dFX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUgkweEZGMDEwMTJGCi0KLSNkZWZpbmUgT0lEX1NLR0VfVFJBUAkJCQkJMHhGRjAxMDEzMAotI2RlZmluZSBPSURfU0tHRV9UUkFQX05VTUJFUgkJCTB4RkYwMTAxMzEKLQotI2RlZmluZSBPSURfU0tHRV9STE1UX01PREUJCQkJMHhGRjAxMDE0MAotI2RlZmluZSBPSURfU0tHRV9STE1UX1BPUlRfTlVNQkVSCQkweEZGMDEwMTQxCi0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfUE9SVF9BQ1RJVkUJCTB4RkYwMTAxNDIKLSNkZWZpbmUgT0lEX1NLR0VfUkxNVF9QT1JUX1BSRUZFUlJFRAkweEZGMDEwMTQzCi0jZGVmaW5lIE9JRF9TS0dFX0lOVEVSTUVESUFURV9TVVBQT1JUCTB4RkYwMTAxNjAKLQotI2RlZmluZSBPSURfU0tHRV9TUEVFRF9DQVAJCQkJMHhGRjAxMDE3MAotI2RlZmluZSBPSURfU0tHRV9TUEVFRF9NT0RFCQkJCTB4RkYwMTAxNzEKLSNkZWZpbmUgT0lEX1NLR0VfU1BFRURfU1RBVFVTCQkJMHhGRjAxMDE3MgotCi0jZGVmaW5lIE9JRF9TS0dFX0JPQVJETEVWRUwJCQkJMHhGRjAxMDE4MAotCi0jZGVmaW5lIE9JRF9TS0dFX1NFTlNPUl9OVU1CRVIJCQkweEZGMDIwMTAwCQkJCi0jZGVmaW5lIE9JRF9TS0dFX1NFTlNPUl9JTkRFWAkJCTB4RkYwMjAxMDEKLSNkZWZpbmUgT0lEX1NLR0VfU0VOU09SX0RFU0NSCQkJMHhGRjAyMDEwMgotI2RlZmluZSBPSURfU0tHRV9TRU5TT1JfVFlQRQkJCTB4RkYwMjAxMDMKLSNkZWZpbmUgT0lEX1NLR0VfU0VOU09SX1ZBTFVFCQkJMHhGRjAyMDEwNAotI2RlZmluZSBPSURfU0tHRV9TRU5TT1JfV0FSX1RIUkVTX0xPVwkweEZGMDIwMTA1Ci0jZGVmaW5lIE9JRF9TS0dFX1NFTlNPUl9XQVJfVEhSRVNfVVBQCTB4RkYwMjAxMDYKLSNkZWZpbmUgT0lEX1NLR0VfU0VOU09SX0VSUl9USFJFU19MT1cJMHhGRjAyMDEwNwotI2RlZmluZSBPSURfU0tHRV9TRU5TT1JfRVJSX1RIUkVTX1VQUAkweEZGMDIwMTA4Ci0jZGVmaW5lIE9JRF9TS0dFX1NFTlNPUl9TVEFUVVMJCQkweEZGMDIwMTA5Ci0jZGVmaW5lIE9JRF9TS0dFX1NFTlNPUl9XQVJfQ1RTCQkJMHhGRjAyMDEwQQotI2RlZmluZSBPSURfU0tHRV9TRU5TT1JfRVJSX0NUUwkJCTB4RkYwMjAxMEIKLSNkZWZpbmUgT0lEX1NLR0VfU0VOU09SX1dBUl9USU1FCQkweEZGMDIwMTBDCi0jZGVmaW5lIE9JRF9TS0dFX1NFTlNPUl9FUlJfVElNRQkJMHhGRjAyMDEwRAotCi0jZGVmaW5lIE9JRF9TS0dFX0NIS1NNX05VTUJFUgkJCTB4RkYwMjAxMTAKLSNkZWZpbmUgT0lEX1NLR0VfQ0hLU01fUlhfT0tfQ1RTCQkweEZGMDIwMTExCi0jZGVmaW5lIE9JRF9TS0dFX0NIS1NNX1JYX1VOQUJMRV9DVFMJMHhGRjAyMDExMgotI2RlZmluZSBPSURfU0tHRV9DSEtTTV9SWF9FUlJfQ1RTCQkweEZGMDIwMTEzCi0jZGVmaW5lIE9JRF9TS0dFX0NIS1NNX1RYX09LX0NUUwkJMHhGRjAyMDExNAotI2RlZmluZSBPSURfU0tHRV9DSEtTTV9UWF9VTkFCTEVfQ1RTCTB4RkYwMjAxMTUKLQotI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYCQkJCTB4RkYwMjAxMjAKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF9PQ1RFVFMJCQkweEZGMDIwMTIxCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfQlJPQURDQVNUCQkweEZGMDIwMTIyCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfTVVMVElDQVNUCQkweEZGMDIwMTIzCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfVU5JQ0FTVAkJMHhGRjAyMDEyNAotI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYX0xPTkdGUkFNRVMJCTB4RkYwMjAxMjUKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF9CVVJTVAkJCTB4RkYwMjAxMjYKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF9QRkxPV0MJCQkweEZGMDIwMTI3Ci0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfRkxPV0MJCQkweEZGMDIwMTI4Ci0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfU0lOR0xFX0NPTAkJMHhGRjAyMDEyOQotI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYX01VTFRJX0NPTAkJMHhGRjAyMDEyQQotI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYX0VYQ0VTU19DT0wJCTB4RkYwMjAxMkIKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF9MQVRFX0NPTAkJMHhGRjAyMDEyQwotI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYX0RFRkZFUkFMCQkweEZGMDIwMTJECi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfRVhDRVNTX0RFRgkJMHhGRjAyMDEyRQotI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYX1VOREVSUlVOCQkweEZGMDIwMTJGCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfQ0FSUklFUgkJMHhGRjAyMDEzMAotLyogI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYX1VUSUwJCTB4RkYwMjAxMzEgKi8KLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF82NAkJCQkweEZGMDIwMTMyCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfMTI3CQkJMHhGRjAyMDEzMwotI2RlZmluZSBPSURfU0tHRV9TVEFUX1RYXzI1NQkJCTB4RkYwMjAxMzQKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF81MTEJCQkweEZGMDIwMTM1Ci0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfMTAyMwkJCTB4RkYwMjAxMzYKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF9NQVgJCQkweEZGMDIwMTM3Ci0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfVFhfU1lOQwkJCTB4RkYwMjAxMzgKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9UWF9TWU5DX09DVEVUUwkweEZGMDIwMTM5Ci0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlgJCQkJMHhGRjAyMDEzQQotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX09DVEVUUwkJCTB4RkYwMjAxM0IKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9CUk9BRENBU1QJCTB4RkYwMjAxM0MKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9NVUxUSUNBU1QJCTB4RkYwMjAxM0QKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9VTklDQVNUCQkweEZGMDIwMTNFCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfUEZMT1dDCQkJMHhGRjAyMDEzRgotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX0ZMT1dDCQkJMHhGRjAyMDE0MAotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX1BGTE9XQ19FUlIJCTB4RkYwMjAxNDEKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9GTE9XQ19VTktXTgkweEZGMDIwMTQyCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfQlVSU1QJCQkweEZGMDIwMTQzCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfTUlTU0VECQkJMHhGRjAyMDE0NAotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX0ZSQU1JTkcJCTB4RkYwMjAxNDUKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9PVkVSRkxPVwkJMHhGRjAyMDE0NgotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX0pBQkJFUgkJCTB4RkYwMjAxNDcKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9DQVJSSUVSCQkweEZGMDIwMTQ4Ci0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfSVJfTEVOR1RICQkweEZGMDIwMTQ5Ci0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfU1lNQk9MCQkJMHhGRjAyMDE0QQotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX1NIT1JUUwkJCTB4RkYwMjAxNEIKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9SVU5UCQkJMHhGRjAyMDE0QwotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX0NFWFQJCQkweEZGMDIwMTRECi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfVE9PX0xPTkcJCTB4RkYwMjAxNEUKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9GQ1MJCQkweEZGMDIwMTRGCi0vKiAjZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfVVRJTAkJMHhGRjAyMDE1MCAqLwotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYXzY0CQkJCTB4RkYwMjAxNTEKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF8xMjcJCQkweEZGMDIwMTUyCi0jZGVmaW5lIE9JRF9TS0dFX1NUQVRfUlhfMjU1CQkJMHhGRjAyMDE1MwotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYXzUxMQkJCTB4RkYwMjAxNTQKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF8xMDIzCQkJMHhGRjAyMDE1NQotI2RlZmluZSBPSURfU0tHRV9TVEFUX1JYX01BWAkJCTB4RkYwMjAxNTYKLSNkZWZpbmUgT0lEX1NLR0VfU1RBVF9SWF9MT05HRlJBTUVTCQkweEZGMDIwMTU3Ci0KLSNkZWZpbmUgT0lEX1NLR0VfUkxNVF9DSEFOR0VfQ1RTCQkweEZGMDIwMTYwCi0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfQ0hBTkdFX1RJTUUJCTB4RkYwMjAxNjEKLSNkZWZpbmUgT0lEX1NLR0VfUkxNVF9DSEFOR0VfRVNUSU0JCTB4RkYwMjAxNjIKLSNkZWZpbmUgT0lEX1NLR0VfUkxNVF9DSEFOR0VfVEhSRVMJCTB4RkYwMjAxNjMKLQotI2RlZmluZSBPSURfU0tHRV9STE1UX1BPUlRfSU5ERVgJCTB4RkYwMjAxNjQKLSNkZWZpbmUgT0lEX1NLR0VfUkxNVF9TVEFUVVMJCQkweEZGMDIwMTY1Ci0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfVFhfSEVMTE9fQ1RTCQkweEZGMDIwMTY2Ci0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfUlhfSEVMTE9fQ1RTCQkweEZGMDIwMTY3Ci0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfVFhfU1BfUkVRX0NUUwkJMHhGRjAyMDE2OAotI2RlZmluZSBPSURfU0tHRV9STE1UX1JYX1NQX0NUUwkJCTB4RkYwMjAxNjkKLQotI2RlZmluZSBPSURfU0tHRV9STE1UX01PTklUT1JfTlVNQkVSCTB4RkYwMTAxNTAKLSNkZWZpbmUgT0lEX1NLR0VfUkxNVF9NT05JVE9SX0lOREVYCQkweEZGMDEwMTUxCi0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfTU9OSVRPUl9BRERSCQkweEZGMDEwMTUyCi0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfTU9OSVRPUl9FUlJTCQkweEZGMDEwMTUzCi0jZGVmaW5lIE9JRF9TS0dFX1JMTVRfTU9OSVRPUl9USU1FU1RBTVAJMHhGRjAxMDE1NAotI2RlZmluZSBPSURfU0tHRV9STE1UX01PTklUT1JfQURNSU4JCTB4RkYwMTAxNTUKLQotI2RlZmluZSBPSURfU0tHRV9UWF9TV19RVUVVRV9MRU4JCTB4RkYwMjAxNzAKLSNkZWZpbmUgT0lEX1NLR0VfVFhfU1dfUVVFVUVfTUFYCQkweEZGMDIwMTcxCi0jZGVmaW5lIE9JRF9TS0dFX1RYX1JFVFJZCQkJCTB4RkYwMjAxNzIKLSNkZWZpbmUgT0lEX1NLR0VfUlhfSU5UUl9DVFMJCQkweEZGMDIwMTczCi0jZGVmaW5lIE9JRF9TS0dFX1RYX0lOVFJfQ1RTCQkJMHhGRjAyMDE3NAotI2RlZmluZSBPSURfU0tHRV9SWF9OT19CVUZfQ1RTCQkJMHhGRjAyMDE3NQotI2RlZmluZSBPSURfU0tHRV9UWF9OT19CVUZfQ1RTCQkJMHhGRjAyMDE3NgotI2RlZmluZSBPSURfU0tHRV9UWF9VU0VEX0RFU0NSX05PCQkweEZGMDIwMTc3Ci0jZGVmaW5lIE9JRF9TS0dFX1JYX0RFTElWRVJFRF9DVFMJCTB4RkYwMjAxNzgKLSNkZWZpbmUgT0lEX1NLR0VfUlhfT0NURVRTX0RFTElWX0NUUwkweEZGMDIwMTc5Ci0jZGVmaW5lIE9JRF9TS0dFX1JYX0hXX0VSUk9SX0NUUwkJMHhGRjAyMDE3QQotI2RlZmluZSBPSURfU0tHRV9UWF9IV19FUlJPUl9DVFMJCTB4RkYwMjAxN0IKLSNkZWZpbmUgT0lEX1NLR0VfSU5fRVJST1JTX0NUUwkJCTB4RkYwMjAxN0MKLSNkZWZpbmUgT0lEX1NLR0VfT1VUX0VSUk9SX0NUUwkJCTB4RkYwMjAxN0QKLSNkZWZpbmUgT0lEX1NLR0VfRVJSX1JFQ09WRVJZX0NUUwkJMHhGRjAyMDE3RQotI2RlZmluZSBPSURfU0tHRV9TWVNVUFRJTUUJCQkJMHhGRjAyMDE3RgotCi0jZGVmaW5lIE9JRF9TS0dFX0FMTF9EQVRBCQkJCTB4RkYwMjAxOTAKLQotLyogRGVmaW5lcyBmb3IgVkNULiAqLwotI2RlZmluZSBPSURfU0tHRV9WQ1RfR0VUCQkJCTB4RkYwMjAyMDAKLSNkZWZpbmUgT0lEX1NLR0VfVkNUX1NFVAkJCQkweEZGMDIwMjAxCi0jZGVmaW5lIE9JRF9TS0dFX1ZDVF9TVEFUVVMJCQkJMHhGRjAyMDIwMgotCi0jaWZkZWYgU0tfRElBR19TVVBQT1JUCi0vKiBEZWZpbmVzIGZvciBkcml2ZXIgRElBRyBtb2RlLiAqLwotI2RlZmluZSBPSURfU0tHRV9ESUFHX01PREUJCQkJMHhGRjAyMDIwNAotI2VuZGlmIC8qIFNLX0RJQUdfU1VQUE9SVCAqLwotCi0vKiBOZXcgT0lEcyAqLwotI2RlZmluZSBPSURfU0tHRV9EUklWRVJfUkVMREFURQkJCTB4RkYwMjAyMTAKLSNkZWZpbmUgT0lEX1NLR0VfRFJJVkVSX0ZJTEVOQU1FCQkweEZGMDIwMjExCi0jZGVmaW5lIE9JRF9TS0dFX0NISVBJRAkJCQkJMHhGRjAyMDIxMgotI2RlZmluZSBPSURfU0tHRV9SQU1TSVpFCQkJCTB4RkYwMjAyMTMKLSNkZWZpbmUgT0lEX1NLR0VfVkFVWEFWQUlMCQkJCTB4RkYwMjAyMTQKLSNkZWZpbmUgT0lEX1NLR0VfUEhZX1RZUEUJCQkJMHhGRjAyMDIxNQotI2RlZmluZSBPSURfU0tHRV9QSFlfTFBfTU9ERQkJCTB4RkYwMjAyMTYKLQotLyogVkNUIHN0cnVjdCB0byBzdG9yZSBhIGJhY2t1cCBjb3B5IG9mIFZDVCBkYXRhIGFmdGVyIGEgcG9ydCByZXNldC4gKi8KLXR5cGVkZWYgc3RydWN0IHNfUG5taVZjdCB7Ci0JU0tfVTgJCQlWY3RTdGF0dXM7Ci0JU0tfVTgJCQlQQ2FibGVMZW47Ci0JU0tfVTMyCQkJUE1kaVBhaXJMZW5bNF07Ci0JU0tfVTgJCQlQTWRpUGFpclN0c1s0XTsKLX0gU0tfUE5NSV9WQ1Q7Ci0KLQotLyogVkNUIHN0YXR1cyB2YWx1ZXMgKHRvIGJlIGdpdmVuIHRvIENQQSB2aWEgT0lEX1NLR0VfVkNUX1NUQVRVUykuICovCi0jZGVmaW5lIFNLX1BOTUlfVkNUX05PTkUJCTAKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfT0xEX1ZDVF9EQVRBCTEKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfTkVXX1ZDVF9EQVRBCTIKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfT0xEX0RTUF9EQVRBCTQKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfTkVXX0RTUF9EQVRBCTgKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfUlVOTklORwkJMTYKLQotCi0vKiBWQ1QgY2FibGUgdGVzdCBzdGF0dXMuICovCi0jZGVmaW5lIFNLX1BOTUlfVkNUX05PUk1BTF9DQUJMRQkJMAotI2RlZmluZSBTS19QTk1JX1ZDVF9TSE9SVF9DQUJMRQkJCTEKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfT1BFTl9DQUJMRQkJCTIKLSNkZWZpbmUgU0tfUE5NSV9WQ1RfVEVTVF9GQUlMCQkJMwotI2RlZmluZSBTS19QTk1JX1ZDVF9JTVBFREFOQ0VfTUlTTUFUQ0gJCTQKLQotI2RlZmluZQlPSURfU0tHRV9UUkFQX1NFTl9XQVJfTE9XCQk1MDAKLSNkZWZpbmUgT0lEX1NLR0VfVFJBUF9TRU5fV0FSX1VQUAkJNTAxCi0jZGVmaW5lCU9JRF9TS0dFX1RSQVBfU0VOX0VSUl9MT1cJCTUwMgotI2RlZmluZSBPSURfU0tHRV9UUkFQX1NFTl9FUlJfVVBQCQk1MDMKLSNkZWZpbmUgT0lEX1NLR0VfVFJBUF9STE1UX0NIQU5HRV9USFJFUwk1MjAKLSNkZWZpbmUgT0lEX1NLR0VfVFJBUF9STE1UX0NIQU5HRV9QT1JUCTUyMQotI2RlZmluZSBPSURfU0tHRV9UUkFQX1JMTVRfUE9SVF9ET1dOCTUyMgotI2RlZmluZSBPSURfU0tHRV9UUkFQX1JMTVRfUE9SVF9VUAkJNTIzCi0jZGVmaW5lIE9JRF9TS0dFX1RSQVBfUkxNVF9TRUdNRU5UQVRJT04JNTI0Ci0KLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLS8qIERlZmluZXMgZm9yIGRyaXZlciBESUFHIG1vZGUuICovCi0jZGVmaW5lIFNLX0RJQUdfQVRUQUNIRUQJMgotI2RlZmluZSBTS19ESUFHX1JVTk5JTkcJCTEKLSNkZWZpbmUgU0tfRElBR19JRExFCQkwCi0jZW5kaWYgLyogU0tfRElBR19TVVBQT1JUICovCi0KLS8qCi0gKiBHZW5lcmljIFBOTUkgSU9DVEwgc3ViY29tbWFuZCBkZWZpbml0aW9ucy4KLSAqLwotI2RlZmluZQlTS19HRVRfU0lOR0xFX1ZBUgkJMQotI2RlZmluZQlTS19TRVRfU0lOR0xFX1ZBUgkJMgotI2RlZmluZQlTS19QUkVTRVRfU0lOR0xFX1ZBUgkzCi0jZGVmaW5lCVNLX0dFVF9GVUxMX01JQgkJCTQKLSNkZWZpbmUJU0tfU0VUX0ZVTExfTUlCCQkJNQotI2RlZmluZQlTS19QUkVTRVRfRlVMTF9NSUIJCTYKLQotCi0vKgotICogRGVmaW5lIGVycm9yIG51bWJlcnMgYW5kIG1lc3NhZ2VzIGZvciBzeXNsb2cKLSAqLwotI2RlZmluZSBTS19QTk1JX0VSUjAwMQkJKFNLX0VSUkJBU0VfUE5NSSArIDEpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDAxTVNHCSJTa1BubWlHZXRTdHJ1Y3Q6IFVua25vd24gT0lEIgotI2RlZmluZSBTS19QTk1JX0VSUjAwMgkJKFNLX0VSUkJBU0VfUE5NSSArIDIpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDAyTVNHCSJTa1BubWlHZXRTdHJ1Y3Q6IENhbm5vdCByZWFkIFZQRCBrZXlzIgotI2RlZmluZSBTS19QTk1JX0VSUjAwMwkJKFNLX0VSUkJBU0VfUE5NSSArIDMpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDAzTVNHCSJPaWRTdHJ1Y3Q6IENhbGxlZCB3aXRoIHdyb25nIE9JRCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMDQJCShTS19FUlJCQVNFX1BOTUkgKyA0KQotI2RlZmluZSBTS19QTk1JX0VSUjAwNE1TRwkiT2lkU3RydWN0OiBDYWxsZWQgd2l0aCB3cm9uZyBhY3Rpb24iCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDA1CQkoU0tfRVJSQkFTRV9QTk1JICsgNSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMDVNU0cJIlBlcmZvcm06IENhbm5vdCByZXNldCBkcml2ZXIiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDA2CQkoU0tfRVJSQkFTRV9QTk1JICsgNikKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMDZNU0cJIlBlcmZvcm06IFVua25vd24gT0lEIGFjdGlvbiBjb21tYW5kIgotI2RlZmluZSBTS19QTk1JX0VSUjAwNwkJKFNLX0VSUkJBU0VfUE5NSSArIDcpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDA3TVNHCSJHZW5lcmFsOiBEcml2ZXIgZGVzY3JpcHRpb24gbm90IGluaXRpYWxpemVkIgotI2RlZmluZSBTS19QTk1JX0VSUjAwOAkJKFNLX0VSUkJBU0VfUE5NSSArIDgpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDA4TVNHCSJBZGRyOiBUcmllZCB0byBnZXQgdW5rbm93biBPSUQiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDA5CQkoU0tfRVJSQkFTRV9QTk1JICsgOSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMDlNU0cJIkFkZHI6IFVua25vd24gT0lEIgotI2RlZmluZSBTS19QTk1JX0VSUjAxMAkJKFNLX0VSUkJBU0VfUE5NSSArIDEwKQotI2RlZmluZSBTS19QTk1JX0VSUjAxME1TRwkiQ3N1bVN0YXQ6IFVua25vd24gT0lEIgotI2RlZmluZSBTS19QTk1JX0VSUjAxMQkJKFNLX0VSUkJBU0VfUE5NSSArIDExKQotI2RlZmluZSBTS19QTk1JX0VSUjAxMU1TRwkiU2Vuc29yU3RhdDogU2Vuc29yIGRlc2NyIHN0cmluZyB0b28gbG9uZyIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMTIJCShTS19FUlJCQVNFX1BOTUkgKyAxMikKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMTJNU0cJIlNlbnNvclN0YXQ6IFVua25vd24gT0lEIgotI2RlZmluZSBTS19QTk1JX0VSUjAxMwkJKFNLX0VSUkJBU0VfUE5NSSArIDEzKQotI2RlZmluZSBTS19QTk1JX0VSUjAxM01TRwkiIgotI2RlZmluZSBTS19QTk1JX0VSUjAxNAkJKFNLX0VSUkJBU0VfUE5NSSArIDE0KQotI2RlZmluZSBTS19QTk1JX0VSUjAxNE1TRwkiVnBkOiBDYW5ub3QgcmVhZCBWUEQga2V5cyIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMTUJCShTS19FUlJCQVNFX1BOTUkgKyAxNSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMTVNU0cJIlZwZDogSW50ZXJuYWwgYXJyYXkgZm9yIFZQRCBrZXlzIHRvIHNtYWxsIgotI2RlZmluZSBTS19QTk1JX0VSUjAxNgkJKFNLX0VSUkJBU0VfUE5NSSArIDE2KQotI2RlZmluZSBTS19QTk1JX0VSUjAxNk1TRwkiVnBkOiBLZXkgc3RyaW5nIHRvbyBsb25nIgotI2RlZmluZSBTS19QTk1JX0VSUjAxNwkJKFNLX0VSUkJBU0VfUE5NSSArIDE3KQotI2RlZmluZSBTS19QTk1JX0VSUjAxN01TRwkiVnBkOiBJbnZhbGlkIFZQRCBzdGF0dXMgcG9pbnRlciIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMTgJCShTS19FUlJCQVNFX1BOTUkgKyAxOCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMThNU0cJIlZwZDogVlBEIGRhdGEgbm90IHZhbGlkIgotI2RlZmluZSBTS19QTk1JX0VSUjAxOQkJKFNLX0VSUkJBU0VfUE5NSSArIDE5KQotI2RlZmluZSBTS19QTk1JX0VSUjAxOU1TRwkiVnBkOiBWUEQgZW50cmllcyBsaXN0IHN0cmluZyB0b28gbG9uZyIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMjEJCShTS19FUlJCQVNFX1BOTUkgKyAyMSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMjFNU0cJIlZwZDogVlBEIGRhdGEgc3RyaW5nIHRvbyBsb25nIgotI2RlZmluZSBTS19QTk1JX0VSUjAyMgkJKFNLX0VSUkJBU0VfUE5NSSArIDIyKQotI2RlZmluZSBTS19QTk1JX0VSUjAyMk1TRwkiVnBkOiBWUEQgZGF0YSBzdHJpbmcgdG9vIGxvbmcgc2hvdWxkIGJlIGVycm9yZWQgYmVmb3JlIgotI2RlZmluZSBTS19QTk1JX0VSUjAyMwkJKFNLX0VSUkJBU0VfUE5NSSArIDIzKQotI2RlZmluZSBTS19QTk1JX0VSUjAyM01TRwkiVnBkOiBVbmtub3duIE9JRCBpbiBnZXQgYWN0aW9uIgotI2RlZmluZSBTS19QTk1JX0VSUjAyNAkJKFNLX0VSUkJBU0VfUE5NSSArIDI0KQotI2RlZmluZSBTS19QTk1JX0VSUjAyNE1TRwkiVnBkOiBVbmtub3duIE9JRCBpbiBwcmVzZXQvc2V0IGFjdGlvbiIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMjUJCShTS19FUlJCQVNFX1BOTUkgKyAyNSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMjVNU0cJIlZwZDogQ2Fubm90IHdyaXRlIFZQRCBhZnRlciBtb2RpZnkgZW50cnkiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDI2CQkoU0tfRVJSQkFTRV9QTk1JICsgMjYpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDI2TVNHCSJWcGQ6IENhbm5vdCB1cGRhdGUgVlBEIgotI2RlZmluZSBTS19QTk1JX0VSUjAyNwkJKFNLX0VSUkJBU0VfUE5NSSArIDI3KQotI2RlZmluZSBTS19QTk1JX0VSUjAyN01TRwkiVnBkOiBDYW5ub3QgZGVsZXRlIFZQRCBlbnRyeSIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMjgJCShTS19FUlJCQVNFX1BOTUkgKyAyOCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMjhNU0cJIlZwZDogQ2Fubm90IHVwZGF0ZSBWUEQgYWZ0ZXIgZGVsZXRlIGVudHJ5IgotI2RlZmluZSBTS19QTk1JX0VSUjAyOQkJKFNLX0VSUkJBU0VfUE5NSSArIDI5KQotI2RlZmluZSBTS19QTk1JX0VSUjAyOU1TRwkiR2VuZXJhbDogRHJpdmVyIGRlc2NyaXB0aW9uIHN0cmluZyB0b28gbG9uZyIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzAJCShTS19FUlJCQVNFX1BOTUkgKyAzMCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzBNU0cJIkdlbmVyYWw6IERyaXZlciB2ZXJzaW9uIG5vdCBpbml0aWFsaXplZCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzEJCShTS19FUlJCQVNFX1BOTUkgKyAzMSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzFNU0cJIkdlbmVyYWw6IERyaXZlciB2ZXJzaW9uIHN0cmluZyB0b28gbG9uZyIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzIJCShTS19FUlJCQVNFX1BOTUkgKyAzMikKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzJNU0cJIkdlbmVyYWw6IENhbm5vdCByZWFkIFZQRCBOYW1lIGZvciBIVyBkZXNjciIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzMJCShTS19FUlJCQVNFX1BOTUkgKyAzMykKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzNNU0cJIkdlbmVyYWw6IEhXIGRlc2NyaXB0aW9uIHN0cmluZyB0b28gbG9uZyIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzQJCShTS19FUlJCQVNFX1BOTUkgKyAzNCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzRNU0cJIkdlbmVyYWw6IFVua25vd24gT0lEIgotI2RlZmluZSBTS19QTk1JX0VSUjAzNQkJKFNLX0VSUkJBU0VfUE5NSSArIDM1KQotI2RlZmluZSBTS19QTk1JX0VSUjAzNU1TRwkiUmxtdDogVW5rbm93biBPSUQiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDM2CQkoU0tfRVJSQkFTRV9QTk1JICsgMzYpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDM2TVNHCSIiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDM3CQkoU0tfRVJSQkFTRV9QTk1JICsgMzcpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDM3TVNHCSJSbG10OiBTS19STE1UX01PREVfQ0hBTkdFIGV2ZW50IHJldHVybiBub3QgMCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzgJCShTS19FUlJCQVNFX1BOTUkgKyAzOCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzhNU0cJIlJsbXQ6IFNLX1JMTVRfUFJFRlBPUlRfQ0hBTkdFIGV2ZW50IHJldHVybiBub3QgMCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzkJCShTS19FUlJCQVNFX1BOTUkgKyAzOSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwMzlNU0cJIlJsbXRTdGF0OiBVbmtub3duIE9JRCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDAJCShTS19FUlJCQVNFX1BOTUkgKyA0MCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDBNU0cJIlBvd2VyTWFuYWdlbWVudDogVW5rbm93biBPSUQiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDQxCQkoU0tfRVJSQkFTRV9QTk1JICsgNDEpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDQxTVNHCSJNYWNQcml2YXRlQ29uZjogVW5rbm93biBPSUQiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDQyCQkoU0tfRVJSQkFTRV9QTk1JICsgNDIpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDQyTVNHCSJNYWNQcml2YXRlQ29uZjogU0tfSFdFVl9TRVRfUk9MRSByZXR1cm5lZCBub3QgMCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDMJCShTS19FUlJCQVNFX1BOTUkgKyA0MykKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDNNU0cJIk1hY1ByaXZhdGVDb25mOiBTS19IV0VWX1NFVF9MTU9ERSByZXR1cm5lZCBub3QgMCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDQJCShTS19FUlJCQVNFX1BOTUkgKyA0NCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDRNU0cJIk1hY1ByaXZhdGVDb25mOiBTS19IV0VWX1NFVF9GTE9XTU9ERSByZXR1cm5lZCBub3QgMCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDUJCShTS19FUlJCQVNFX1BOTUkgKyA0NSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDVNU0cJIk1hY1ByaXZhdGVDb25mOiBTS19IV0VWX1NFVF9TUEVFRCByZXR1cm5lZCBub3QgMCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDYJCShTS19FUlJCQVNFX1BOTUkgKyA0NikKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDZNU0cJIk1vbml0b3I6IFVua25vd24gT0lEIgotI2RlZmluZSBTS19QTk1JX0VSUjA0NwkJKFNLX0VSUkJBU0VfUE5NSSArIDQ3KQotI2RlZmluZSBTS19QTk1JX0VSUjA0N01TRwkiU2lycVVwZGF0ZTogRXZlbnQgZnVuY3Rpb24gcmV0dXJucyBub3QgMCIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDgJCShTS19FUlJCQVNFX1BOTUkgKyA0OCkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNDhNU0cJIlJsbXRVcGRhdGU6IEV2ZW50IGZ1bmN0aW9uIHJldHVybnMgbm90IDAiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDQ5CQkoU0tfRVJSQkFTRV9QTk1JICsgNDkpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDQ5TVNHCSJTa1BubWlJbml0OiBJbnZhbGlkIHNpemUgb2YgJ0NvdW50ZXJPZmZzZXQnIHN0cnVjdCEhIgotI2RlZmluZSBTS19QTk1JX0VSUjA1MAkJKFNLX0VSUkJBU0VfUE5NSSArIDUwKQotI2RlZmluZSBTS19QTk1JX0VSUjA1ME1TRwkiU2tQbm1pSW5pdDogSW52YWxpZCBzaXplIG9mICdTdGF0QWRkcicgdGFibGUhISIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNTEJCShTS19FUlJCQVNFX1BOTUkgKyA1MSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNTFNU0cJIlNrUG5taUV2ZW50OiBQb3J0IHN3aXRjaCBzdXNwaWNpb3VzIgotI2RlZmluZSBTS19QTk1JX0VSUjA1MgkJKFNLX0VSUkJBU0VfUE5NSSArIDUyKQotI2RlZmluZSBTS19QTk1JX0VSUjA1Mk1TRwkiIgotI2RlZmluZSBTS19QTk1JX0VSUjA1MwkJKFNLX0VSUkJBU0VfUE5NSSArIDUzKQotI2RlZmluZSBTS19QTk1JX0VSUjA1M01TRwkiR2VuZXJhbDogRHJpdmVyIHJlbGVhc2UgZGF0ZSBub3QgaW5pdGlhbGl6ZWQiCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDU0CQkoU0tfRVJSQkFTRV9QTk1JICsgNTQpCi0jZGVmaW5lIFNLX1BOTUlfRVJSMDU0TVNHCSJHZW5lcmFsOiBEcml2ZXIgcmVsZWFzZSBkYXRlIHN0cmluZyB0b28gbG9uZyIKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNTUJCShTS19FUlJCQVNFX1BOTUkgKyA1NSkKLSNkZWZpbmUgU0tfUE5NSV9FUlIwNTVNU0cJIkdlbmVyYWw6IERyaXZlciBmaWxlIG5hbWUgbm90IGluaXRpYWxpemVkIgotI2RlZmluZSBTS19QTk1JX0VSUjA1NgkJKFNLX0VSUkJBU0VfUE5NSSArIDU2KQotI2RlZmluZSBTS19QTk1JX0VSUjA1Nk1TRwkiR2VuZXJhbDogRHJpdmVyIGZpbGUgbmFtZSBzdHJpbmcgdG9vIGxvbmciCi0KLS8qCi0gKiBNYW5hZ2VtZW50IGNvdW50ZXIgbWFjcm9zIGNhbGxlZCBieSB0aGUgZHJpdmVyCi0gKi8KLSNkZWZpbmUgU0tfUE5NSV9TRVRfRFJJVkVSX0RFU0NSKHBBQyx2KQkoKHBBQyktPlBubWkucERyaXZlckRlc2NyaXB0aW9uID0gXAotCShjaGFyICopKHYpKQotCi0jZGVmaW5lIFNLX1BOTUlfU0VUX0RSSVZFUl9WRVIocEFDLHYpCSgocEFDKS0+UG5taS5wRHJpdmVyVmVyc2lvbiA9IFwKLQkoY2hhciAqKSh2KSkKLQotI2RlZmluZSBTS19QTk1JX1NFVF9EUklWRVJfUkVMREFURShwQUMsdikJKChwQUMpLT5Qbm1pLnBEcml2ZXJSZWxlYXNlRGF0ZSA9IFwKLQkoY2hhciAqKSh2KSkKLQotI2RlZmluZSBTS19QTk1JX1NFVF9EUklWRVJfRklMRU5BTUUocEFDLHYpCSgocEFDKS0+UG5taS5wRHJpdmVyRmlsZU5hbWUgPSBcCi0JKGNoYXIgKikodikpCi0KLSNkZWZpbmUgU0tfUE5NSV9DTlRfVFhfUVVFVUVfTEVOKHBBQyx2LHApIFwKLQl7IFwKLQkJKHBBQyktPlBubWkuUG9ydFtwXS5UeFN3UXVldWVMZW4gPSAoU0tfVTY0KSh2KTsgXAotCQlpZiAoKHBBQyktPlBubWkuUG9ydFtwXS5UeFN3UXVldWVMZW4gPiAocEFDKS0+UG5taS5Qb3J0W3BdLlR4U3dRdWV1ZU1heCkgeyBcCi0JCQkocEFDKS0+UG5taS5Qb3J0W3BdLlR4U3dRdWV1ZU1heCA9IChwQUMpLT5Qbm1pLlBvcnRbcF0uVHhTd1F1ZXVlTGVuOyBcCi0JCX0gXAotCX0KLSNkZWZpbmUgU0tfUE5NSV9DTlRfVFhfUkVUUlkocEFDLHApCSgoKHBBQyktPlBubWkuUG9ydFtwXS5UeFJldHJ5Q3RzKSsrKQotI2RlZmluZSBTS19QTk1JX0NOVF9SWF9JTlRSKHBBQyxwKQkoKChwQUMpLT5Qbm1pLlBvcnRbcF0uUnhJbnRyQ3RzKSsrKQotI2RlZmluZSBTS19QTk1JX0NOVF9UWF9JTlRSKHBBQyxwKQkoKChwQUMpLT5Qbm1pLlBvcnRbcF0uVHhJbnRyQ3RzKSsrKQotI2RlZmluZSBTS19QTk1JX0NOVF9OT19SWF9CVUYocEFDLHApCSgoKHBBQyktPlBubWkuUG9ydFtwXS5SeE5vQnVmQ3RzKSsrKQotI2RlZmluZSBTS19QTk1JX0NOVF9OT19UWF9CVUYocEFDLHApCSgoKHBBQyktPlBubWkuUG9ydFtwXS5UeE5vQnVmQ3RzKSsrKQotI2RlZmluZSBTS19QTk1JX0NOVF9VU0VEX1RYX0RFU0NSKHBBQyx2LHApIFwKLQkoKHBBQyktPlBubWkuUG9ydFtwXS5UeFVzZWREZXNjck5vPShTS19VNjQpKHYpKTsKLSNkZWZpbmUgU0tfUE5NSV9DTlRfUlhfT0NURVRTX0RFTElWRVJFRChwQUMsdixwKSBcCi0JeyBcCi0JCSgocEFDKS0+UG5taS5Qb3J0W3BdLlJ4RGVsaXZlcmVkQ3RzKSsrOyBcCi0JCShwQUMpLT5Qbm1pLlBvcnRbcF0uUnhPY3RldHNEZWxpdmVyZWRDdHMgKz0gKFNLX1U2NCkodik7IFwKLQl9Ci0jZGVmaW5lIFNLX1BOTUlfQ05UX0VSUl9SRUNPVkVSWShwQUMscCkJKCgocEFDKS0+UG5taS5Qb3J0W3BdLkVyclJlY292ZXJ5Q3RzKSsrKTsKLQotI2RlZmluZSBTS19QTk1JX0NOVF9TWU5DX09DVEVUUyhwQUMscCx2KSBcCi0JeyBcCi0JCWlmICgocCkgPCBTS19NQVhfTUFDUykgeyBcCi0JCQkoKHBBQyktPlBubWkuUG9ydFtwXS5TdGF0U3luY0N0cykrKzsgXAotCQkJKHBBQyktPlBubWkuUG9ydFtwXS5TdGF0U3luY09jdGV0c0N0cyArPSAoU0tfVTY0KSh2KTsgXAotCQl9IFwKLQl9Ci0KLSNkZWZpbmUgU0tfUE5NSV9DTlRfUlhfTE9OR0ZSQU1FUyhwQUMscCkgXAotCXsgXAotCQlpZiAoKHApIDwgU0tfTUFYX01BQ1MpIHsgXAotCQkJKChwQUMpLT5Qbm1pLlBvcnRbcF0uU3RhdFJ4TG9uZ0ZyYW1lQ3RzKyspOyBcCi0JCX0gXAotCX0KLQotI2RlZmluZSBTS19QTk1JX0NOVF9SWF9GUkFNRVRPT0xPTkcocEFDLHApIFwKLQl7IFwKLQkJaWYgKChwKSA8IFNLX01BWF9NQUNTKSB7IFwKLQkJCSgocEFDKS0+UG5taS5Qb3J0W3BdLlN0YXRSeEZyYW1lVG9vTG9uZ0N0cysrKTsgXAotCQl9IFwKLQl9Ci0KLSNkZWZpbmUgU0tfUE5NSV9DTlRfUlhfUE1BQ0NfRVJSKHBBQyxwKSBcCi0JeyBcCi0JCWlmICgocCkgPCBTS19NQVhfTUFDUykgeyBcCi0JCQkoKHBBQyktPlBubWkuUG9ydFtwXS5TdGF0UnhQTWFjY0VycisrKTsgXAotCQl9IFwKLQl9Ci0KLS8qCi0gKiBDb252ZXJzaW9uIE1hY3JvcwotICovCi0jZGVmaW5lIFNLX1BOTUlfUE9SVF9JTlNUMkxPRyhpKQkoKHVuc2lnbmVkIGludCkoaSkgLSAxKQotI2RlZmluZSBTS19QTk1JX1BPUlRfTE9HMklOU1QobCkJKCh1bnNpZ25lZCBpbnQpKGwpICsgMSkKLSNkZWZpbmUgU0tfUE5NSV9QT1JUX1BIWVMyTE9HKHApCSgodW5zaWduZWQgaW50KShwKSArIDEpCi0jZGVmaW5lIFNLX1BOTUlfUE9SVF9MT0cyUEhZUyhwQUMsbCkJKCh1bnNpZ25lZCBpbnQpKGwpIC0gMSkKLSNkZWZpbmUgU0tfUE5NSV9QT1JUX1BIWVMySU5TVChwQUMscCkJXAotCShwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPyAyIDogKCh1bnNpZ25lZCBpbnQpKHApICsgMikpCi0jZGVmaW5lIFNLX1BOTUlfUE9SVF9JTlNUMlBIWVMocEFDLGkpCSgodW5zaWduZWQgaW50KShpKSAtIDIpCi0KLS8qCi0gKiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmb3IgU2tQbm1pR2V0U3RydWN0IGFuZCBTa1BubWlTZXRTdHJ1Y3QKLSAqLwotI2RlZmluZSBTS19QTk1JX1ZQRF9LRVlfU0laRQk1Ci0jZGVmaW5lIFNLX1BOTUlfVlBEX0JVRlNJWkUJCShWUERfU0laRSkKLSNkZWZpbmUgU0tfUE5NSV9WUERfRU5UUklFUwkJKFZQRF9TSVpFIC8gNCkKLSNkZWZpbmUgU0tfUE5NSV9WUERfREFUQUxFTgkJMTI4IC8qICBOdW1iZXIgb2YgZGF0YSBieXRlcyAqLwotCi0jZGVmaW5lIFNLX1BOTUlfTVVMVElDQVNUX0xJU1RMRU4JNjQKLSNkZWZpbmUgU0tfUE5NSV9TRU5TT1JfRU5UUklFUwkJKFNLX01BWF9TRU5TT1JTKQotI2RlZmluZSBTS19QTk1JX0NIRUNLU1VNX0VOVFJJRVMJMwotI2RlZmluZSBTS19QTk1JX01BQ19FTlRSSUVTCQkJKFNLX01BWF9NQUNTICsgMSkKLSNkZWZpbmUgU0tfUE5NSV9NT05JVE9SX0VOVFJJRVMJCTIwCi0jZGVmaW5lIFNLX1BOTUlfVFJBUF9FTlRSSUVTCQkxMAotI2RlZmluZSBTS19QTk1JX1RSQVBMRU4JCQkJMTI4Ci0jZGVmaW5lIFNLX1BOTUlfU1RSSU5HTEVOMQkJCTgwCi0jZGVmaW5lIFNLX1BOTUlfU1RSSU5HTEVOMgkJCTI1Ci0jZGVmaW5lIFNLX1BOTUlfVFJBUF9RVUVVRV9MRU4JCTUxMgotCi10eXBlZGVmIHN0cnVjdCBzX1BubWlWcGQgewotCWNoYXIJCQlWcGRLZXlbU0tfUE5NSV9WUERfS0VZX1NJWkVdOwotCWNoYXIJCQlWcGRWYWx1ZVtTS19QTk1JX1ZQRF9EQVRBTEVOXTsKLQlTS19VOAkJCVZwZEFjY2VzczsKLQlTS19VOAkJCVZwZEFjdGlvbjsKLX0gU0tfUE5NSV9WUEQ7Ci0KLXR5cGVkZWYgc3RydWN0IHNfUG5taVNlbnNvciB7Ci0JU0tfVTgJCQlTZW5zb3JJbmRleDsKLQljaGFyCQkJU2Vuc29yRGVzY3JbU0tfUE5NSV9TVFJJTkdMRU4yXTsKLQlTS19VOAkJCVNlbnNvclR5cGU7Ci0JU0tfVTMyCQkJU2Vuc29yVmFsdWU7Ci0JU0tfVTMyCQkJU2Vuc29yV2FybmluZ1RocmVzaG9sZExvdzsKLQlTS19VMzIJCQlTZW5zb3JXYXJuaW5nVGhyZXNob2xkSGlnaDsKLQlTS19VMzIJCQlTZW5zb3JFcnJvclRocmVzaG9sZExvdzsKLQlTS19VMzIJCQlTZW5zb3JFcnJvclRocmVzaG9sZEhpZ2g7Ci0JU0tfVTgJCQlTZW5zb3JTdGF0dXM7Ci0JU0tfVTY0CQkJU2Vuc29yV2FybmluZ0N0czsKLQlTS19VNjQJCQlTZW5zb3JFcnJvckN0czsKLQlTS19VNjQJCQlTZW5zb3JXYXJuaW5nVGltZXN0YW1wOwotCVNLX1U2NAkJCVNlbnNvckVycm9yVGltZXN0YW1wOwotfSBTS19QTk1JX1NFTlNPUjsKLQotdHlwZWRlZiBzdHJ1Y3Qgc19Qbm1pQ2hlY2tzdW0gewotCVNLX1U2NAkJCUNoZWNrc3VtUnhPa0N0czsKLQlTS19VNjQJCQlDaGVja3N1bVJ4VW5hYmxlQ3RzOwotCVNLX1U2NAkJCUNoZWNrc3VtUnhFcnJDdHM7Ci0JU0tfVTY0CQkJQ2hlY2tzdW1UeE9rQ3RzOwotCVNLX1U2NAkJCUNoZWNrc3VtVHhVbmFibGVDdHM7Ci19IFNLX1BOTUlfQ0hFQ0tTVU07Ci0KLXR5cGVkZWYgc3RydWN0IHNfUG5taVN0YXQgewotCVNLX1U2NAkJCVN0YXRUeE9rQ3RzOwotCVNLX1U2NAkJCVN0YXRUeE9jdGV0c09rQ3RzOwotCVNLX1U2NAkJCVN0YXRUeEJyb2FkY2FzdE9rQ3RzOwotCVNLX1U2NAkJCVN0YXRUeE11bHRpY2FzdE9rQ3RzOwotCVNLX1U2NAkJCVN0YXRUeFVuaWNhc3RPa0N0czsKLQlTS19VNjQJCQlTdGF0VHhMb25nRnJhbWVzQ3RzOwotCVNLX1U2NAkJCVN0YXRUeEJ1cnN0Q3RzOwotCVNLX1U2NAkJCVN0YXRUeFBhdXNlTWFjQ3RybEN0czsKLQlTS19VNjQJCQlTdGF0VHhNYWNDdHJsQ3RzOwotCVNLX1U2NAkJCVN0YXRUeFNpbmdsZUNvbGxpc2lvbkN0czsKLQlTS19VNjQJCQlTdGF0VHhNdWx0aXBsZUNvbGxpc2lvbkN0czsKLQlTS19VNjQJCQlTdGF0VHhFeGNlc3NpdmVDb2xsaXNpb25DdHM7Ci0JU0tfVTY0CQkJU3RhdFR4TGF0ZUNvbGxpc2lvbkN0czsKLQlTS19VNjQJCQlTdGF0VHhEZWZlcnJhbEN0czsKLQlTS19VNjQJCQlTdGF0VHhFeGNlc3NpdmVEZWZlcnJhbEN0czsKLQlTS19VNjQJCQlTdGF0VHhGaWZvVW5kZXJydW5DdHM7Ci0JU0tfVTY0CQkJU3RhdFR4Q2FycmllckN0czsKLQlTS19VNjQJCQlEdW1teTE7IC8qIFN0YXRUeFV0aWxpemF0aW9uICovCi0JU0tfVTY0CQkJU3RhdFR4NjRDdHM7Ci0JU0tfVTY0CQkJU3RhdFR4MTI3Q3RzOwotCVNLX1U2NAkJCVN0YXRUeDI1NUN0czsKLQlTS19VNjQJCQlTdGF0VHg1MTFDdHM7Ci0JU0tfVTY0CQkJU3RhdFR4MTAyM0N0czsKLQlTS19VNjQJCQlTdGF0VHhNYXhDdHM7Ci0JU0tfVTY0CQkJU3RhdFR4U3luY0N0czsKLQlTS19VNjQJCQlTdGF0VHhTeW5jT2N0ZXRzQ3RzOwotCVNLX1U2NAkJCVN0YXRSeE9rQ3RzOwotCVNLX1U2NAkJCVN0YXRSeE9jdGV0c09rQ3RzOwotCVNLX1U2NAkJCVN0YXRSeEJyb2FkY2FzdE9rQ3RzOwotCVNLX1U2NAkJCVN0YXRSeE11bHRpY2FzdE9rQ3RzOwotCVNLX1U2NAkJCVN0YXRSeFVuaWNhc3RPa0N0czsKLQlTS19VNjQJCQlTdGF0UnhMb25nRnJhbWVzQ3RzOwotCVNLX1U2NAkJCVN0YXRSeFBhdXNlTWFjQ3RybEN0czsKLQlTS19VNjQJCQlTdGF0UnhNYWNDdHJsQ3RzOwotCVNLX1U2NAkJCVN0YXRSeFBhdXNlTWFjQ3RybEVycm9yQ3RzOwotCVNLX1U2NAkJCVN0YXRSeE1hY0N0cmxVbmtub3duQ3RzOwotCVNLX1U2NAkJCVN0YXRSeEJ1cnN0Q3RzOwotCVNLX1U2NAkJCVN0YXRSeE1pc3NlZEN0czsKLQlTS19VNjQJCQlTdGF0UnhGcmFtaW5nQ3RzOwotCVNLX1U2NAkJCVN0YXRSeEZpZm9PdmVyZmxvd0N0czsKLQlTS19VNjQJCQlTdGF0UnhKYWJiZXJDdHM7Ci0JU0tfVTY0CQkJU3RhdFJ4Q2FycmllckN0czsKLQlTS19VNjQJCQlTdGF0UnhJUkxlbmd0aEN0czsKLQlTS19VNjQJCQlTdGF0UnhTeW1ib2xDdHM7Ci0JU0tfVTY0CQkJU3RhdFJ4U2hvcnRzQ3RzOwotCVNLX1U2NAkJCVN0YXRSeFJ1bnRDdHM7Ci0JU0tfVTY0CQkJU3RhdFJ4Q2V4dEN0czsKLQlTS19VNjQJCQlTdGF0UnhUb29Mb25nQ3RzOwotCVNLX1U2NAkJCVN0YXRSeEZjc0N0czsKLQlTS19VNjQJCQlEdW1teTI7IC8qIFN0YXRSeFV0aWxpemF0aW9uICovCi0JU0tfVTY0CQkJU3RhdFJ4NjRDdHM7Ci0JU0tfVTY0CQkJU3RhdFJ4MTI3Q3RzOwotCVNLX1U2NAkJCVN0YXRSeDI1NUN0czsKLQlTS19VNjQJCQlTdGF0Ung1MTFDdHM7Ci0JU0tfVTY0CQkJU3RhdFJ4MTAyM0N0czsKLQlTS19VNjQJCQlTdGF0UnhNYXhDdHM7Ci19IFNLX1BOTUlfU1RBVDsKLQotdHlwZWRlZiBzdHJ1Y3Qgc19Qbm1pQ29uZiB7Ci0JY2hhcgkJCUNvbmZNYWNDdXJyZW50QWRkcls2XTsKLQljaGFyCQkJQ29uZk1hY0ZhY3RvcnlBZGRyWzZdOwotCVNLX1U4CQkJQ29uZlBNRDsKLQlTS19VOAkJCUNvbmZDb25uZWN0b3I7Ci0JU0tfVTMyCQkJQ29uZlBoeVR5cGU7Ci0JU0tfVTMyCQkJQ29uZlBoeU1vZGU7Ci0JU0tfVTgJCQlDb25mTGlua0NhcGFiaWxpdHk7Ci0JU0tfVTgJCQlDb25mTGlua01vZGU7Ci0JU0tfVTgJCQlDb25mTGlua01vZGVTdGF0dXM7Ci0JU0tfVTgJCQlDb25mTGlua1N0YXR1czsKLQlTS19VOAkJCUNvbmZGbG93Q3RybENhcGFiaWxpdHk7Ci0JU0tfVTgJCQlDb25mRmxvd0N0cmxNb2RlOwotCVNLX1U4CQkJQ29uZkZsb3dDdHJsU3RhdHVzOwotCVNLX1U4CQkJQ29uZlBoeU9wZXJhdGlvbkNhcGFiaWxpdHk7Ci0JU0tfVTgJCQlDb25mUGh5T3BlcmF0aW9uTW9kZTsKLQlTS19VOAkJCUNvbmZQaHlPcGVyYXRpb25TdGF0dXM7Ci0JU0tfVTgJCQlDb25mU3BlZWRDYXBhYmlsaXR5OwotCVNLX1U4CQkJQ29uZlNwZWVkTW9kZTsKLQlTS19VOAkJCUNvbmZTcGVlZFN0YXR1czsKLX0gU0tfUE5NSV9DT05GOwotCi10eXBlZGVmIHN0cnVjdCBzX1BubWlSbG10IHsKLQlTS19VMzIJCQlSbG10SW5kZXg7Ci0JU0tfVTMyCQkJUmxtdFN0YXR1czsKLQlTS19VNjQJCQlSbG10VHhIZWxsb0N0czsKLQlTS19VNjQJCQlSbG10UnhIZWxsb0N0czsKLQlTS19VNjQJCQlSbG10VHhTcEhlbGxvUmVxQ3RzOwotCVNLX1U2NAkJCVJsbXRSeFNwSGVsbG9DdHM7Ci19IFNLX1BOTUlfUkxNVDsKLQotdHlwZWRlZiBzdHJ1Y3Qgc19Qbm1pUmxtdE1vbml0b3IgewotCVNLX1UzMgkJCVJsbXRNb25pdG9ySW5kZXg7Ci0JY2hhcgkJCVJsbXRNb25pdG9yQWRkcls2XTsKLQlTS19VNjQJCQlSbG10TW9uaXRvckVycm9yQ3RzOwotCVNLX1U2NAkJCVJsbXRNb25pdG9yVGltZXN0YW1wOwotCVNLX1U4CQkJUmxtdE1vbml0b3JBZG1pbjsKLX0gU0tfUE5NSV9STE1UX01PTklUT1I7Ci0KLXR5cGVkZWYgc3RydWN0IHNfUG5taVJlcXVlc3RTdGF0dXMgewotCVNLX1UzMgkJCUVycm9yU3RhdHVzOwotCVNLX1UzMgkJCUVycm9yT2Zmc2V0OwotfSBTS19QTk1JX1JFUVVFU1RfU1RBVFVTOwotCi10eXBlZGVmIHN0cnVjdCBzX1BubWlTdHJ1Y0RhdGEgewotCVNLX1UzMgkJCU1nbXREQlZlcnNpb247Ci0JU0tfUE5NSV9SRVFVRVNUX1NUQVRVUwlSZXR1cm5TdGF0dXM7Ci0JU0tfVTMyCQkJVnBkRnJlZUJ5dGVzOwotCWNoYXIJCQlWcGRFbnRyaWVzTGlzdFtTS19QTk1JX1ZQRF9FTlRSSUVTICogU0tfUE5NSV9WUERfS0VZX1NJWkVdOwotCVNLX1UzMgkJCVZwZEVudHJpZXNOdW1iZXI7Ci0JU0tfUE5NSV9WUEQJCVZwZFtTS19QTk1JX1ZQRF9FTlRSSUVTXTsKLQlTS19VMzIJCQlQb3J0TnVtYmVyOwotCVNLX1UzMgkJCURldmljZVR5cGU7Ci0JY2hhcgkJCURyaXZlckRlc2NyW1NLX1BOTUlfU1RSSU5HTEVOMV07Ci0JY2hhcgkJCURyaXZlclZlcnNpb25bU0tfUE5NSV9TVFJJTkdMRU4yXTsKLQljaGFyCQkJRHJpdmVyUmVsZWFzZURhdGVbU0tfUE5NSV9TVFJJTkdMRU4xXTsKLQljaGFyCQkJRHJpdmVyRmlsZU5hbWVbU0tfUE5NSV9TVFJJTkdMRU4xXTsKLQljaGFyCQkJSHdEZXNjcltTS19QTk1JX1NUUklOR0xFTjFdOwotCWNoYXIJCQlId1ZlcnNpb25bU0tfUE5NSV9TVFJJTkdMRU4yXTsKLQlTS19VMTYJCQlDaGlwc2V0OwotCVNLX1UzMgkJCUNoaXBJZDsKLQlTS19VOAkJCVZhdXhBdmFpbDsKLQlTS19VMzIJCQlSYW1TaXplOwotCVNLX1UzMgkJCU10dVNpemU7Ci0JU0tfVTMyCQkJQWN0aW9uOwotCVNLX1UzMgkJCVRlc3RSZXN1bHQ7Ci0JU0tfVTgJCQlCdXNUeXBlOwotCVNLX1U4CQkJQnVzU3BlZWQ7Ci0JU0tfVTgJCQlCdXNXaWR0aDsKLQlTS19VOAkJCVNlbnNvck51bWJlcjsKLQlTS19QTk1JX1NFTlNPUglTZW5zb3JbU0tfUE5NSV9TRU5TT1JfRU5UUklFU107Ci0JU0tfVTgJCQlDaGVja3N1bU51bWJlcjsKLQlTS19QTk1JX0NIRUNLU1VNCUNoZWNrc3VtW1NLX1BOTUlfQ0hFQ0tTVU1fRU5UUklFU107Ci0JU0tfUE5NSV9TVEFUCVN0YXRbU0tfUE5NSV9NQUNfRU5UUklFU107Ci0JU0tfUE5NSV9DT05GCUNvbmZbU0tfUE5NSV9NQUNfRU5UUklFU107Ci0JU0tfVTgJCQlSbG10TW9kZTsKLQlTS19VMzIJCQlSbG10UG9ydE51bWJlcjsKLQlTS19VOAkJCVJsbXRQb3J0QWN0aXZlOwotCVNLX1U4CQkJUmxtdFBvcnRQcmVmZXJyZWQ7Ci0JU0tfVTY0CQkJUmxtdENoYW5nZUN0czsKLQlTS19VNjQJCQlSbG10Q2hhbmdlVGltZTsKLQlTS19VNjQJCQlSbG10Q2hhbmdlRXN0aW1hdGU7Ci0JU0tfVTY0CQkJUmxtdENoYW5nZVRocmVzaG9sZDsKLQlTS19QTk1JX1JMTVQJUmxtdFtTS19NQVhfTUFDU107Ci0JU0tfVTMyCQkJUmxtdE1vbml0b3JOdW1iZXI7Ci0JU0tfUE5NSV9STE1UX01PTklUT1IJUmxtdE1vbml0b3JbU0tfUE5NSV9NT05JVE9SX0VOVFJJRVNdOwotCVNLX1UzMgkJCVRyYXBOdW1iZXI7Ci0JU0tfVTgJCQlUcmFwW1NLX1BOTUlfVFJBUF9RVUVVRV9MRU5dOwotCVNLX1U2NAkJCVR4U3dRdWV1ZUxlbjsKLQlTS19VNjQJCQlUeFN3UXVldWVNYXg7Ci0JU0tfVTY0CQkJVHhSZXRyeUN0czsKLQlTS19VNjQJCQlSeEludHJDdHM7Ci0JU0tfVTY0CQkJVHhJbnRyQ3RzOwotCVNLX1U2NAkJCVJ4Tm9CdWZDdHM7Ci0JU0tfVTY0CQkJVHhOb0J1ZkN0czsKLQlTS19VNjQJCQlUeFVzZWREZXNjck5vOwotCVNLX1U2NAkJCVJ4RGVsaXZlcmVkQ3RzOwotCVNLX1U2NAkJCVJ4T2N0ZXRzRGVsaXZlcmVkQ3RzOwotCVNLX1U2NAkJCVJ4SHdFcnJvcnNDdHM7Ci0JU0tfVTY0CQkJVHhId0Vycm9yc0N0czsKLQlTS19VNjQJCQlJbkVycm9yc0N0czsKLQlTS19VNjQJCQlPdXRFcnJvcnNDdHM7Ci0JU0tfVTY0CQkJRXJyUmVjb3ZlcnlDdHM7Ci0JU0tfVTY0CQkJU3lzVXBUaW1lOwotfSBTS19QTk1JX1NUUlVDVF9EQVRBOwotCi0jZGVmaW5lIFNLX1BOTUlfU1RSVUNUX1NJWkUJKHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSkKLSNkZWZpbmUgU0tfUE5NSV9NSU5fU1RSVUNUX1NJWkUJKCh1bnNpZ25lZCBpbnQpKFNLX1VQVFIpXAotCQkJCSAmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5WcGRGcmVlQnl0ZXMpKQotCQkJCQkJCQkJCQkJCQkvKgotCQkJCQkJCQkJCQkJCQkgKiBSZXR1cm5TdGF0dXMgZmllbGQKLQkJCQkJCQkJCQkJCQkJICogbXVzdCBiZSBsb2NhdGVkCi0JCQkJCQkJCQkJCQkJCSAqIGJlZm9yZSBWcGRGcmVlQnl0ZXMKLQkJCQkJCQkJCQkJCQkJICovCi0KLS8qCi0gKiBWYXJpb3VzIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgU0tfUE5NSV9NQVhfUFJPVE9TCQkzCi0KLSNkZWZpbmUgU0tfUE5NSV9DTlRfTk8JCQk2NgkvKiBNdXN0IGhhdmUgdGhlIHZhbHVlIG9mIHRoZSBlbnVtCi0JCQkJCQkJCQkgKiBTS19QTk1JX01BWF9JRFguIERlZmluZSBTS19QTk1JX0NIRUNLCi0JCQkJCQkJCQkgKiBmb3IgY2hlY2sgd2hpbGUgaW5pdCBwaGFzZSAxCi0JCQkJCQkJCQkgKi8KLQotLyoKLSAqIEVzdGltYXRlIGRhdGEgc3RydWN0dXJlCi0gKi8KLXR5cGVkZWYgc3RydWN0IHNfUG5taUVzdGltYXRlIHsKLQl1bnNpZ25lZCBpbnQJRXN0VmFsdWVJbmRleDsKLQlTS19VNjQJCQlFc3RWYWx1ZVs3XTsKLQlTS19VNjQJCQlFc3RpbWF0ZTsKLQlTS19USU1FUgkJRXN0VGltZXI7Ci19IFNLX1BOTUlfRVNUSU1BVEU7Ci0KLQotLyoKLSAqIFZDVCB0aW1lciBkYXRhIHN0cnVjdHVyZQotICovCi10eXBlZGVmIHN0cnVjdCBzX1ZjdFRpbWVyIHsKLQlTS19USU1FUgkJVmN0VGltZXI7Ci19IFNLX1BOTUlfVkNUX1RJTUVSOwotCi0KLS8qCi0gKiBQTk1JIHNwZWNpZmljIGFkYXB0ZXIgY29udGV4dCBzdHJ1Y3R1cmUKLSAqLwotdHlwZWRlZiBzdHJ1Y3Qgc19Qbm1pUG9ydCB7Ci0JU0tfVTY0CQkJU3RhdFN5bmNDdHM7Ci0JU0tfVTY0CQkJU3RhdFN5bmNPY3RldHNDdHM7Ci0JU0tfVTY0CQkJU3RhdFJ4TG9uZ0ZyYW1lQ3RzOwotCVNLX1U2NAkJCVN0YXRSeEZyYW1lVG9vTG9uZ0N0czsKLQlTS19VNjQJCQlTdGF0UnhQTWFjY0VycjsKLQlTS19VNjQJCQlUeFN3UXVldWVMZW47Ci0JU0tfVTY0CQkJVHhTd1F1ZXVlTWF4OwotCVNLX1U2NAkJCVR4UmV0cnlDdHM7Ci0JU0tfVTY0CQkJUnhJbnRyQ3RzOwotCVNLX1U2NAkJCVR4SW50ckN0czsKLQlTS19VNjQJCQlSeE5vQnVmQ3RzOwotCVNLX1U2NAkJCVR4Tm9CdWZDdHM7Ci0JU0tfVTY0CQkJVHhVc2VkRGVzY3JObzsKLQlTS19VNjQJCQlSeERlbGl2ZXJlZEN0czsKLQlTS19VNjQJCQlSeE9jdGV0c0RlbGl2ZXJlZEN0czsKLQlTS19VNjQJCQlSeEh3RXJyb3JzQ3RzOwotCVNLX1U2NAkJCVR4SHdFcnJvcnNDdHM7Ci0JU0tfVTY0CQkJSW5FcnJvcnNDdHM7Ci0JU0tfVTY0CQkJT3V0RXJyb3JzQ3RzOwotCVNLX1U2NAkJCUVyclJlY292ZXJ5Q3RzOwotCVNLX1U2NAkJCVJ4U2hvcnRaZXJvTWFyazsKLQlTS19VNjQJCQlDb3VudGVyT2Zmc2V0W1NLX1BOTUlfQ05UX05PXTsKLQlTS19VMzIJCQlDb3VudGVySGlnaFtTS19QTk1JX0NOVF9OT107Ci0JU0tfQk9PTAkJCUFjdGl2ZUZsYWc7Ci0JU0tfVTgJCQlBbGlnblszXTsKLX0gU0tfUE5NSV9QT1JUOwotCi0KLXR5cGVkZWYgc3RydWN0IHNfUG5taURhdGEgewotCVNLX1BOTUlfUE9SVAlQb3J0CVtTS19NQVhfTUFDU107Ci0JU0tfUE5NSV9QT1JUCUJ1ZlBvcnQJW1NLX01BWF9NQUNTXTsgLyogMjAwMi0wOS0xMyBwd2ViZXIgICovCi0JU0tfVTY0CQkJVmlydHVhbENvdW50ZXJPZmZzZXRbU0tfUE5NSV9DTlRfTk9dOwotCVNLX1UzMgkJCVRlc3RSZXN1bHQ7Ci0JY2hhcgkJCUh3VmVyc2lvblsxMF07Ci0JU0tfVTE2CQkJQWxpZ24wMTsKLQotCWNoYXIJCQkqcERyaXZlckRlc2NyaXB0aW9uOwotCWNoYXIJCQkqcERyaXZlclZlcnNpb247Ci0JY2hhcgkJCSpwRHJpdmVyUmVsZWFzZURhdGU7Ci0JY2hhcgkJCSpwRHJpdmVyRmlsZU5hbWU7Ci0KLQlpbnQJCQkJTWFjVXBkYXRlZEZsYWc7Ci0JaW50CQkJCVJsbXRVcGRhdGVkRmxhZzsKLQlpbnQJCQkJU2lycVVwZGF0ZWRGbGFnOwotCi0JU0tfVTY0CQkJUmxtdENoYW5nZUN0czsKLQlTS19VNjQJCQlSbG10Q2hhbmdlVGltZTsKLQlTS19QTk1JX0VTVElNQVRFCVJsbXRDaGFuZ2VFc3RpbWF0ZTsKLQlTS19VNjQJCQlSbG10Q2hhbmdlVGhyZXNob2xkOwotCi0JU0tfVTY0CQkJU3RhcnRVcFRpbWU7Ci0JU0tfVTMyCQkJRGV2aWNlVHlwZTsKLQljaGFyCQkJUGNpQnVzU3BlZWQ7Ci0JY2hhcgkJCVBjaUJ1c1dpZHRoOwotCWNoYXIJCQlDaGlwc2V0OwotCWNoYXIJCQlQTUQ7Ci0JY2hhcgkJCUNvbm5lY3RvcjsKLQlTS19CT09MCQkJRHVhbE5ldEFjdGl2ZUZsYWc7Ci0JU0tfVTE2CQkJQWxpZ24wMjsKLQotCWNoYXIJCQlUcmFwQnVmW1NLX1BOTUlfVFJBUF9RVUVVRV9MRU5dOwotCXVuc2lnbmVkIGludAlUcmFwQnVmRnJlZTsKLQl1bnNpZ25lZCBpbnQJVHJhcFF1ZXVlQmVnOwotCXVuc2lnbmVkIGludAlUcmFwUXVldWVFbmQ7Ci0JdW5zaWduZWQgaW50CVRyYXBCdWZQYWQ7Ci0JdW5zaWduZWQgaW50CVRyYXBVbmlxdWU7Ci0JU0tfVTgJCVZjdFN0YXR1c1tTS19NQVhfTUFDU107Ci0JU0tfUE5NSV9WQ1QJVmN0QmFja3VwW1NLX01BWF9NQUNTXTsKLQlTS19QTk1JX1ZDVF9USU1FUiBWY3RUaW1lb3V0W1NLX01BWF9NQUNTXTsKLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLQlTS19VMzIJCQlEaWFnQXR0YWNoZWQ7Ci0jZW5kaWYgLyogU0tfRElBR19TVVBQT1JUICovCi19IFNLX1BOTUk7Ci0KLQotLyoKLSAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotZXh0ZXJuIGludCBTa1BubWlJbml0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIGludCBMZXZlbCk7Ci1leHRlcm4gaW50IFNrUG5taVNldFZhcihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgSWQsIHZvaWQqIHBCdWYsCi0JdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsIFNLX1UzMiBOZXRJbmRleCk7Ci1leHRlcm4gaW50IFNrUG5taUdldFN0cnVjdChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB2b2lkKiBwQnVmLAotCXVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIE5ldEluZGV4KTsKLWV4dGVybiBpbnQgU2tQbm1pUHJlU2V0U3RydWN0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIHZvaWQqIHBCdWYsCi0JdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgTmV0SW5kZXgpOwotZXh0ZXJuIGludCBTa1BubWlTZXRTdHJ1Y3QoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgdm9pZCogcEJ1ZiwKLQl1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBOZXRJbmRleCk7Ci1leHRlcm4gaW50IFNrUG5taUV2ZW50KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBFdmVudCwKLQlTS19FVlBBUkEgUGFyYW0pOwotZXh0ZXJuIGludCBTa1BubWlHZW5Jb2N0bChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB2b2lkICogcEJ1ZiwKLQl1bnNpZ25lZCBpbnQgKiBwTGVuLCBTS19VMzIgTmV0SW5kZXgpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlc2lycS5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2VzaXJxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZWM2MjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2VzaXJxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrZ2VzaXJxLmgKLSAqIFByb2plY3Q6CUdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMsIENvbW1vbiBNb2R1bGVzCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMzAgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDcvMDQgMTI6MzQ6MTMgJAotICogUHVycG9zZToJU0sgc3BlY2lmaWMgR2lnYWJpdCBFdGhlcm5ldCBzcGVjaWFsIElSUSBmdW5jdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0LgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfSU5DX1NLR0VTSVJRX0hfCi0jZGVmaW5lIF9JTkNfU0tHRVNJUlFfSF8KLQotLyogRGVmaW5lIHJldHVybiBjb2RlcyBvZiBTa0dlUG9ydENoZWNrVXAgYW5kIENoZWNrU2hvcnQgKi8KLSNkZWZpbmUJU0tfSFdfUFNfTk9ORQkJMAkvKiBObyBhY3Rpb24gbmVlZGVkICovCi0jZGVmaW5lCVNLX0hXX1BTX1JFU1RBUlQJMQkvKiBSZXN0YXJ0IG5lZWRlZCAqLwotI2RlZmluZQlTS19IV19QU19MSU5LCQkyCS8qIExpbmsgVXAgYWN0aW9ucyBuZWVkZWQgKi8KLQotLyoKLSAqIERlZmluZSB0aGUgRXZlbnQgdGhlIHNwZWNpYWwgSVJRL0lOSSBtb2R1bGUgY2FuIGhhbmRsZQotICovCi0jZGVmaW5lIFNLX0hXRVZfV0FUSU0JCQkxCS8qIFRpbWVvdXQgZm9yIFdBIEVycmF0YSAjMiBYTUFDICovCi0jZGVmaW5lIFNLX0hXRVZfUE9SVF9TVEFSVAkJMgkvKiBQb3J0IFN0YXJ0IEV2ZW50IGJ5IFJMTVQgKi8KLSNkZWZpbmUgU0tfSFdFVl9QT1JUX1NUT1AJCTMJLyogUG9ydCBTdG9wIEV2ZW50IGJ5IFJMTVQgKi8KLSNkZWZpbmUgU0tfSFdFVl9DTEVBUl9TVEFUCQk0CS8qIENsZWFyIFN0YXRpc3RpY3MgYnkgUE5NSSAqLwotI2RlZmluZSBTS19IV0VWX1VQREFURV9TVEFUCQk1CS8qIFVwZGF0ZSBTdGF0aXN0aWNzIGJ5IFBOTUkgKi8KLSNkZWZpbmUgU0tfSFdFVl9TRVRfTE1PREUJCTYJLyogU2V0IExpbmsgTW9kZSBieSBQTk1JICovCi0jZGVmaW5lIFNLX0hXRVZfU0VUX0ZMT1dNT0RFCTcJLyogU2V0IEZsb3cgQ29udHJvbCBNb2RlIGJ5IFBOTUkgKi8KLSNkZWZpbmUgU0tfSFdFVl9TRVRfUk9MRQkJOAkvKiBTZXQgTWFzdGVyL1NsYXZlIChSb2xlKSBieSBQTk1JICovCi0jZGVmaW5lIFNLX0hXRVZfU0VUX1NQRUVECQk5CS8qIFNldCBMaW5rIFNwZWVkIGJ5IFBOTUkgKi8KLSNkZWZpbmUgU0tfSFdFVl9IQUxGRFVQX0NISwkJMTAJLyogSGFsZiBEdXBsZXggSGFuZ3VwIFdvcmthcm91bmQgKi8KLQotI2RlZmluZSBTS19XQV9BQ1RfVElNRQkJKDUwMDAwMDBVTCkJLyogNSBzZWMgKi8KLSNkZWZpbmUgU0tfV0FfSU5BX1RJTUUJCSgxMDAwMDBVTCkJLyogMTAwIG1zZWMgKi8KLQotI2RlZmluZSBTS19IQUxGRFVQX0NIS19USU1FCSgxMDAwMFVMKQkvKiAxMCBtc2VjICovCi0KLS8qCi0gKiBEZWZpbmUgdGhlIGVycm9yIG51bWJlcnMgYW5kIG1lc3NhZ2VzCi0gKi8KLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDAxCQkoU0tfRVJSQkFTRV9TSVJRKzApCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAwMU1TRwkiVW5rbm93biBldmVudCIKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDAyCQkoU0tFUlJfU0lSUV9FMDAxKzEpCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAwMk1TRwkiUGFja2V0IHRpbWVvdXQgUlgxIgotI2RlZmluZSBTS0VSUl9TSVJRX0UwMDMJCShTS0VSUl9TSVJRX0UwMDIrMSkKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDAzTVNHCSJQYWNrZXQgdGltZW91dCBSWDIiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAwNAkJKFNLRVJSX1NJUlFfRTAwMysxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMDRNU0cJIk1BQyAxIG5vdCBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAwNQkJKFNLRVJSX1NJUlFfRTAwNCsxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMDVNU0cJIk1BQyAyIG5vdCBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAwNgkJKFNLRVJSX1NJUlFfRTAwNSsxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMDZNU0cJIkNIRUNLIGZhaWx1cmUgUjEiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAwNwkJKFNLRVJSX1NJUlFfRTAwNisxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMDdNU0cJIkNIRUNLIGZhaWx1cmUgUjIiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAwOAkJKFNLRVJSX1NJUlFfRTAwNysxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMDhNU0cJIkNIRUNLIGZhaWx1cmUgWFMxIgotI2RlZmluZSBTS0VSUl9TSVJRX0UwMDkJCShTS0VSUl9TSVJRX0UwMDgrMSkKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDA5TVNHCSJDSEVDSyBmYWlsdXJlIFhBMSIKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDEwCQkoU0tFUlJfU0lSUV9FMDA5KzEpCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAxME1TRwkiQ0hFQ0sgZmFpbHVyZSBYUzIiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAxMQkJKFNLRVJSX1NJUlFfRTAxMCsxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMTFNU0cJIkNIRUNLIGZhaWx1cmUgWEEyIgotI2RlZmluZSBTS0VSUl9TSVJRX0UwMTIJCShTS0VSUl9TSVJRX0UwMTErMSkKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDEyTVNHCSJ1bmV4cGVjdGVkIElSUSBNYXN0ZXIgZXJyb3IiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAxMwkJKFNLRVJSX1NJUlFfRTAxMisxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMTNNU0cJInVuZXhwZWN0ZWQgSVJRIFN0YXR1cyBlcnJvciIKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDE0CQkoU0tFUlJfU0lSUV9FMDEzKzEpCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAxNE1TRwkiUGFyaXR5IGVycm9yIG9uIFJBTSAocmVhZCkiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAxNQkJKFNLRVJSX1NJUlFfRTAxNCsxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMTVNU0cJIlBhcml0eSBlcnJvciBvbiBSQU0gKHdyaXRlKSIKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDE2CQkoU0tFUlJfU0lSUV9FMDE1KzEpCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAxNk1TRwkiUGFyaXR5IGVycm9yIE1BQyAxIgotI2RlZmluZSBTS0VSUl9TSVJRX0UwMTcJCShTS0VSUl9TSVJRX0UwMTYrMSkKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDE3TVNHCSJQYXJpdHkgZXJyb3IgTUFDIDIiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAxOAkJKFNLRVJSX1NJUlFfRTAxNysxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMThNU0cJIlBhcml0eSBlcnJvciBSWCAxIgotI2RlZmluZSBTS0VSUl9TSVJRX0UwMTkJCShTS0VSUl9TSVJRX0UwMTgrMSkKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDE5TVNHCSJQYXJpdHkgZXJyb3IgUlggMiIKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDIwCQkoU0tFUlJfU0lSUV9FMDE5KzEpCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAyME1TRwkiTUFDIHRyYW5zbWl0IEZJRk8gdW5kZXJydW4iCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAyMQkJKFNLRVJSX1NJUlFfRTAyMCsxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMjFNU0cJIlNwdXJpb3VzIFRXU0kgaW50ZXJydXB0IgotI2RlZmluZSBTS0VSUl9TSVJRX0UwMjIJCShTS0VSUl9TSVJRX0UwMjErMSkKLSNkZWZpbmUgU0tFUlJfU0lSUV9FMDIyTVNHCSJDYWJsZSBwYWlyIHN3YXAgZXJyb3IiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAyMwkJKFNLRVJSX1NJUlFfRTAyMisxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMjNNU0cJIkF1dG8tbmVnb3RpYXRpb24gZXJyb3IiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAyNAkJKFNLRVJSX1NJUlFfRTAyMysxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMjRNU0cJIkZJRk8gb3ZlcmZsb3cgZXJyb3IiCi0jZGVmaW5lIFNLRVJSX1NJUlFfRTAyNQkJKFNLRVJSX1NJUlFfRTAyNCsxKQotI2RlZmluZSBTS0VSUl9TSVJRX0UwMjVNU0cJIjIgUGFpciBEb3duc2hpZnQgZGV0ZWN0ZWQiCi0KLWV4dGVybiB2b2lkIFNrR2VTaXJxSXNyKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBJc3RhdHVzKTsKLWV4dGVybiBpbnQgIFNrR2VTaXJxRXZlbnQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIEV2ZW50LCBTS19FVlBBUkEgUGFyYSk7Ci1leHRlcm4gdm9pZCBTa0hXTGlua0Rvd24oU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IFBvcnQpOwotCi0jZW5kaWYJLyogX0lOQ19TS0dFU0lSUV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NraTJjLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tpMmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2M2Y0YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tpMmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tpMmMuaAotICogUHJvamVjdDoJR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVycywgVFdTSS1Nb2R1bGUKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS4zNSAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8xMC8yMCAwOTowNjozMCAkCi0gKiBQdXJwb3NlOglEZWZpbmVzIHRvIGFjY2VzcyBWb2x0YWdlIGFuZCBUZW1wZXJhdHVyZSBTZW5zb3IKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0LgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNLSTJDLkgJY29udGFpbnMgYWxsIEkyQyBzcGVjaWZpYyBkZWZpbmVzCi0gKi8KLQotI2lmbmRlZiBfU0tJMkNfSF8KLSNkZWZpbmUgX1NLSTJDX0hfCi0KLXR5cGVkZWYgc3RydWN0ICBzX1NlbnNvciBTS19TRU5TT1I7Ci0KLSNpbmNsdWRlICJoL3NrZ2VpMmMuaCIKLQotLyoKLSAqIERlZmluZSB0aGUgSTJDIGV2ZW50cy4KLSAqLwotI2RlZmluZSBTS19JMkNFVl9JUlEJMQkvKiBJUlEgaGFwcGVuZWQgRXZlbnQgKi8KLSNkZWZpbmUgU0tfSTJDRVZfVElNCTIJLyogVGltZW91dCBldmVudCAqLwotI2RlZmluZSBTS19JMkNFVl9DTEVBUgkzCS8qIENsZWFyIE1JQiBWYWx1ZXMgKi8KLQotLyoKLSAqIERlZmluZSBSRUFEIGFuZCBXUklURSBDb25zdGFudHMuCi0gKi8KLSNkZWZpbmUgSTJDX1JFQUQJMAotI2RlZmluZSBJMkNfV1JJVEUJMQotI2RlZmluZSBJMkNfQlVSU1QJMQotI2RlZmluZSBJMkNfU0lOR0xFCTAKLQotI2RlZmluZSBTS0VSUl9JMkNfRTAwMQkJKFNLX0VSUkJBU0VfSTJDKzApCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDAxTVNHCSJTZW5zb3IgaW5kZXggdW5rbm93biIKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMDIJCShTS0VSUl9JMkNfRTAwMSsxKQotI2RlZmluZSBTS0VSUl9JMkNfRTAwMk1TRwkiVFdTSTogdHJhbnNmZXIgZG9lcyBub3QgY29tcGxldGUiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDAzCQkoU0tFUlJfSTJDX0UwMDIrMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMDNNU0cJIkxNODA6IE5BSyBvbiBkZXZpY2Ugc2VuZCIKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMDQJCShTS0VSUl9JMkNfRTAwMysxKQotI2RlZmluZSBTS0VSUl9JMkNfRTAwNE1TRwkiTE04MDogTkFLIG9uIHJlZ2lzdGVyIHNlbmQiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDA1CQkoU0tFUlJfSTJDX0UwMDQrMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMDVNU0cJIkxNODA6IE5BSyBvbiBkZXZpY2UgKDIpIHNlbmQiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDA2CQkoU0tFUlJfSTJDX0UwMDUrMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMDZNU0cJIlVua25vd24gZXZlbnQiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDA3CQkoU0tFUlJfSTJDX0UwMDYrMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMDdNU0cJIkxNODAgcmVhZCBvdXQgb2Ygc3RhdGUiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDA4CQkoU0tFUlJfSTJDX0UwMDcrMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMDhNU0cJIlVuZXhwZWN0ZWQgc2Vuc29yIHJlYWQgY29tcGxldGVkIgotI2RlZmluZSBTS0VSUl9JMkNfRTAwOQkJKFNLRVJSX0kyQ19FMDA4KzEpCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDA5TVNHCSJXQVJOSU5HOiB0ZW1wZXJhdHVyZSBzZW5zb3Igb3V0IG9mIHJhbmdlIgotI2RlZmluZSBTS0VSUl9JMkNfRTAxMAkJKFNLRVJSX0kyQ19FMDA5KzEpCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDEwTVNHCSJXQVJOSU5HOiB2b2x0YWdlIHNlbnNvciBvdXQgb2YgcmFuZ2UiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDExCQkoU0tFUlJfSTJDX0UwMTArMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMTFNU0cJIkVSUk9SOiB0ZW1wZXJhdHVyZSBzZW5zb3Igb3V0IG9mIHJhbmdlIgotI2RlZmluZSBTS0VSUl9JMkNfRTAxMgkJKFNLRVJSX0kyQ19FMDExKzEpCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDEyTVNHCSJFUlJPUjogdm9sdGFnZSBzZW5zb3Igb3V0IG9mIHJhbmdlIgotI2RlZmluZSBTS0VSUl9JMkNfRTAxMwkJKFNLRVJSX0kyQ19FMDEyKzEpCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDEzTVNHCSJFUlJPUjogY291bGRuJ3QgaW5pdCBzZW5zb3IiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDE0CQkoU0tFUlJfSTJDX0UwMTMrMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMTRNU0cJIldBUk5JTkc6IGZhbiBzZW5zb3Igb3V0IG9mIHJhbmdlIgotI2RlZmluZSBTS0VSUl9JMkNfRTAxNQkJKFNLRVJSX0kyQ19FMDE0KzEpCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDE1TVNHCSJFUlJPUjogZmFuIHNlbnNvciBvdXQgb2YgcmFuZ2UiCi0jZGVmaW5lIFNLRVJSX0kyQ19FMDE2CQkoU0tFUlJfSTJDX0UwMTUrMSkKLSNkZWZpbmUgU0tFUlJfSTJDX0UwMTZNU0cJIlRXU0k6IGFjdGl2ZSB0cmFuc2ZlciBkb2VzIG5vdCBjb21wbGV0ZSIKLQotLyoKLSAqIERlZmluZSBUaW1lb3V0IHZhbHVlcwotICovCi0jZGVmaW5lIFNLX0kyQ19USU1fTE9ORwkJMjAwMDAwMEwJLyogMiBzZWNvbmRzICovCi0jZGVmaW5lIFNLX0kyQ19USU1fU0hPUlQJIDEwMDAwMEwJLyogMTAwIG1pbGxpc2Vjb25kcyAqLwotI2RlZmluZSBTS19JMkNfVElNX1dBVENICTEwMDAwMDBMCS8qIDEgc2Vjb25kICovCi0KLS8qCi0gKiBEZWZpbmUgdHJhcCBhbmQgZXJyb3IgbG9nIGhvbGQgdGltZXMKLSAqLwotI2lmbmRlZglTS19TRU5fRVJSX1RSX0hPTEQKLSNkZWZpbmUgU0tfU0VOX0VSUl9UUl9IT0xECQkoNCpTS19USUNLU19QRVJfU0VDKQotI2VuZGlmCi0jaWZuZGVmCVNLX1NFTl9FUlJfTE9HX0hPTEQKLSNkZWZpbmUgU0tfU0VOX0VSUl9MT0dfSE9MRAkJKDYwKlNLX1RJQ0tTX1BFUl9TRUMpCi0jZW5kaWYKLSNpZm5kZWYJU0tfU0VOX1dBUk5fVFJfSE9MRAotI2RlZmluZSBTS19TRU5fV0FSTl9UUl9IT0xECQkoMTUqU0tfVElDS1NfUEVSX1NFQykKLSNlbmRpZgotI2lmbmRlZglTS19TRU5fV0FSTl9MT0dfSE9MRAotI2RlZmluZSBTS19TRU5fV0FSTl9MT0dfSE9MRAkoMTUqNjAqU0tfVElDS1NfUEVSX1NFQykKLSNlbmRpZgotCi0vKgotICogRGVmaW5lcyBmb3IgU2VuVHlwZQotICovCi0jZGVmaW5lIFNLX1NFTl9VTktOT1dOCTAKLSNkZWZpbmUgU0tfU0VOX1RFTVAJCTEKLSNkZWZpbmUgU0tfU0VOX1ZPTFQJCTIKLSNkZWZpbmUgU0tfU0VOX0ZBTgkJMwotCi0vKgotICogRGVmaW5lIGZvciB0aGUgU2VuRXJyb3JGbGFnCi0gKi8KLSNkZWZpbmUgU0tfU0VOX0VSUl9OT1RfUFJFU0VOVAkwCS8qIEVycm9yIEZsYWc6IFNlbnNvciBub3QgcHJlc2VudCAqLwotI2RlZmluZSBTS19TRU5fRVJSX09LCQkJMQkvKiBFcnJvciBGbGFnOiBPLksuICovCi0jZGVmaW5lIFNLX1NFTl9FUlJfV0FSTgkJCTIJLyogRXJyb3IgRmxhZzogV2FybmluZyAqLwotI2RlZmluZSBTS19TRU5fRVJSX0VSUgkJCTMJLyogRXJyb3IgRmxhZzogRXJyb3IgKi8KLSNkZWZpbmUgU0tfU0VOX0VSUl9GQVVMVFkJCTQJLyogRXJyb3IgRmxhZzogRmF1bHR5ICovCi0KLS8qCi0gKiBEZWZpbmUgdGhlIFNlbnNvciBzdHJ1Y3QKLSAqLwotc3RydWN0CXNfU2Vuc29yIHsKLQljaGFyCSpTZW5EZXNjOwkJCS8qIERlc2NyaXB0aW9uICovCi0JaW50CQlTZW5UeXBlOwkJCS8qIFZvbHRhZ2Ugb3IgVGVtcGVyYXR1cmUgKi8KLQlTS19JMzIJU2VuVmFsdWU7CQkJLyogQ3VycmVudCB2YWx1ZSBvZiB0aGUgc2Vuc29yICovCi0JU0tfSTMyCVNlblRocmVFcnJIaWdoOwkJLyogSGlnaCBlcnJvciBUaHJlc2hob2xkIG9mIHRoaXMgc2Vuc29yICovCi0JU0tfSTMyCVNlblRocmVXYXJuSGlnaDsJLyogSGlnaCB3YXJuaW5nIFRocmVzaGhvbGQgb2YgdGhpcyBzZW5zb3IgKi8KLQlTS19JMzIJU2VuVGhyZUVyckxvdzsJCS8qIExvd2VyIGVycm9yIFRocmVzaG9sZCBvZiB0aGUgc2Vuc29yICovCi0JU0tfSTMyCVNlblRocmVXYXJuTG93OwkJLyogTG93ZXIgd2FybmluZyBUaHJlc2hvbGQgb2YgdGhlIHNlbnNvciAqLwotCWludAkJU2VuRXJyRmxhZzsJCQkvKiBTZW5zb3IgaW5kaWNhdGVkIGFuIGVycm9yICovCi0JU0tfQk9PTAlTZW5Jbml0OwkJCS8qIElzIHNlbnNvciBpbml0aWFsaXplZCA/ICovCi0JU0tfVTY0CVNlbkVyckN0czsJCQkvKiBFcnJvciB0cmFwIGNvdW50ZXIgKi8KLQlTS19VNjQJU2VuV2FybkN0czsJCQkvKiBXYXJuaW5nIHRyYXAgY291bnRlciAqLwotCVNLX1U2NAlTZW5CZWdFcnJUUzsJCS8qIEJlZ2luIGVycm9yIHRpbWVzdGFtcCAqLwotCVNLX1U2NAlTZW5CZWdXYXJuVFM7CQkvKiBCZWdpbiB3YXJuaW5nIHRpbWVzdGFtcCAqLwotCVNLX1U2NAlTZW5MYXN0RXJyVHJhcFRTOwkvKiBMYXN0IGVycm9yIHRyYXAgdGltZXN0YW1wICovCi0JU0tfVTY0CVNlbkxhc3RFcnJMb2dUUzsJLyogTGFzdCBlcnJvciBsb2cgdGltZXN0YW1wICovCi0JU0tfVTY0CVNlbkxhc3RXYXJuVHJhcFRTOwkvKiBMYXN0IHdhcm5pbmcgdHJhcCB0aW1lc3RhbXAgKi8KLQlTS19VNjQJU2VuTGFzdFdhcm5Mb2dUUzsJLyogTGFzdCB3YXJuaW5nIGxvZyB0aW1lc3RhbXAgKi8KLQlpbnQJCVNlblN0YXRlOwkJCS8qIFNlbnNvciBTdGF0ZSAoc2VlIEhXIHNwZWNpZmljIGluY2x1ZGUpICovCi0JaW50CQkoKlNlblJlYWQpKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIHN0cnVjdCBzX1NlbnNvciAqcFNlbik7Ci0JCQkJCQkJCS8qIFNlbnNvcnMgcmVhZCBmdW5jdGlvbiAqLwotCVNLX1UxNglTZW5SZWc7CQkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgZm9yIHRoaXMgc2Vuc29yICovCi0JU0tfVTgJU2VuRGV2OwkJCQkvKiBEZXZpY2UgU2VsZWN0aW9uIGZvciB0aGlzIHNlbnNvciAqLwotfTsKLQotdHlwZWRlZglzdHJ1Y3QJc19JMmMgewotCVNLX1NFTlNPUglTZW5UYWJsZVtTS19NQVhfU0VOU09SU107CS8qIFNlbnNvciBUYWJsZSAqLwotCWludAkJCUN1cnJTZW5zOwkvKiBXaGljaCBzZW5zb3IgaXMgY3VycmVudGx5IHF1ZXJpZWQgKi8KLQlpbnQJCQlNYXhTZW5zOwkvKiBNYXguIG51bWJlciBvZiBzZW5zb3JzICovCi0JaW50CQkJVGltZXJNb2RlOwkvKiBVc2UgdGhlIHRpbWVyIGFsc28gdG8gd2F0Y2ggdGhlIHN0YXRlIG1hY2hpbmUgKi8KLQlpbnQJCQlJbml0TGV2ZWw7CS8qIEluaXRpYWxpemVkIExldmVsICovCi0jaWZuZGVmIFNLX0RJQUcKLQlpbnQJCQlEdW1teVJlYWRzOwkvKiBOdW1iZXIgb2Ygbm9uLWNoZWNrZWQgZHVtbXkgcmVhZHMgKi8KLQlTS19USU1FUglTZW5UaW1lcjsJLyogU2Vuc29ycyB0aW1lciAqLwotI2VuZGlmIC8qICFTS19ESUFHICovCi19IFNLX0kyQzsKLQotZXh0ZXJuIGludCBTa0kyY0luaXQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IExldmVsKTsKLSNpZmRlZiBTS19ESUFHCi1leHRlcm4JU0tfVTMyIFNrSTJjUmVhZChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgRGV2LCBpbnQgU2l6ZSwgaW50IFJlZywKLQkJCQkJCSBpbnQgQnVyc3QpOwotI2Vsc2UgLyogIVNLX0RJQUcgKi8KLWV4dGVybiBpbnQgU2tJMmNFdmVudChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgRXZlbnQsIFNLX0VWUEFSQSBQYXJhKTsKLWV4dGVybiB2b2lkIFNrSTJjV2FpdElycShTS19BQyAqcEFDLCBTS19JT0MgSW9DKTsKLWV4dGVybiB2b2lkIFNrSTJjSXNyKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MpOwotI2VuZGlmIC8qICFTS19ESUFHICovCi0jZW5kaWYgLyogbl9TS0kyQ19IICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3F1ZXVlLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2txdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWM0MGQ0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2txdWV1ZS5oCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBFdmVudCBTY2hlZHVsZXIgTW9kdWxlCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMTYgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDkvMTYgMTI6NTA6MzIgJAotICogUHVycG9zZToJRGVmaW5lcyBmb3IgdGhlIEV2ZW50IHF1ZXVlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdCBHbWJILgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNLUVVFVUUuSAljb250YWlucyBhbGwgZGVmaW5lcyBhbmQgdHlwZXMgZm9yIHRoZSBldmVudCBxdWV1ZQotICovCi0KLSNpZm5kZWYgX1NLUVVFVUVfSF8KLSNkZWZpbmUgX1NLUVVFVUVfSF8KLQotCi0vKgotICogZGVmaW5lIHRoZSBldmVudCBjbGFzc2VzIHRvIGJlIHNlcnZlZAotICovCi0jZGVmaW5lCVNLR0VfRFJWCTEJLyogRHJpdmVyIEV2ZW50IENsYXNzICovCi0jZGVmaW5lCVNLR0VfUkxNVAkyCS8qIFJMTVQgRXZlbnQgQ2xhc3MgKi8KLSNkZWZpbmUJU0tHRV9JMkMJMwkvKiBJMkMgRXZlbnQgQ2xhc3MgKi8KLSNkZWZpbmUJU0tHRV9QTk1JCTQJLyogUE5NSSBFdmVudCBDbGFzcyAqLwotI2RlZmluZQlTS0dFX0NTVU0JNQkvKiBDaGVja3N1bSBFdmVudCBDbGFzcyAqLwotI2RlZmluZQlTS0dFX0hXQUMJNgkvKiBIYXJkd2FyZSBBY2Nlc3MgRXZlbnQgQ2xhc3MgKi8KLQotI2RlZmluZQlTS0dFX1NXVAk5CS8qIFNvZnR3YXJlIFRpbWVyIEV2ZW50IENsYXNzICovCi0jZGVmaW5lCVNLR0VfTEFDUAkxMAkvKiBMQUNQIEFnZ3JlZ2F0aW9uIEV2ZW50IENsYXNzICovCi0jZGVmaW5lCVNLR0VfUlNGCTExCS8qIFJTRiBBZ2dyZWdhdGlvbiBFdmVudCBDbGFzcyAqLwotI2RlZmluZQlTS0dFX01BUktFUgkxMgkvKiBNQVJLRVIgQWdncmVnYXRpb24gRXZlbnQgQ2xhc3MgKi8KLSNkZWZpbmUJU0tHRV9GRAkJMTMJLyogRkQgRGlzdHJpYnV0b3IgRXZlbnQgQ2xhc3MgKi8KLQotLyoKLSAqIGRlZmluZSBldmVudCBxdWV1ZSBhcyBjaXJjdWxhciBidWZmZXIKLSAqLwotI2RlZmluZSBTS19NQVhfRVZFTlQJNjQKLQotLyoKLSAqIFBhcmFtZXRlciB1bmlvbiBmb3IgdGhlIFBhcmEgc3R1ZmYKLSAqLwotdHlwZWRlZgl1bmlvbiB1X0V2UGFyYSB7Ci0Jdm9pZAkqcFBhcmFQdHI7CS8qIFBhcmFtZXRlciBQb2ludGVyICovCi0JU0tfVTY0CVBhcmE2NDsJCS8qIFBhcmFtZXRlciA2NGJpdCB2ZXJzaW9uICovCi0JU0tfVTMyCVBhcmEzMlsyXTsJLyogUGFyYW1ldGVyIEFycmF5IG9mIDMyYml0IHBhcmFtZXRlcnMgKi8KLX0gU0tfRVZQQVJBOwotCi0vKgotICogRXZlbnQgUXVldWUKLSAqCXNrcXVldWUuYwotICogZXZlbnRzIGFyZSBjbGFzcy92YWx1ZSBwYWlycwotICoJY2xhc3MJaXMgYWRkcmVzc2VlLCBlLmcuIFJMTVQsIFBOTUkgZXRjLgotICoJdmFsdWUJaXMgY29tbWFuZCwgZS5nLiBsaW5lIHN0YXRlIGNoYW5nZSwgcmluZyBvcCBjaGFuZ2UgZXRjLgotICovCi10eXBlZGVmCXN0cnVjdCBzX0V2ZW50RWxlbSB7Ci0JU0tfVTMyCQlDbGFzczsJCQkvKiBFdmVudCBjbGFzcyAqLwotCVNLX1UzMgkJRXZlbnQ7CQkJLyogRXZlbnQgdmFsdWUgKi8KLQlTS19FVlBBUkEJUGFyYTsJCQkvKiBFdmVudCBwYXJhbWV0ZXIgKi8KLX0gU0tfRVZFTlRFTEVNOwotCi10eXBlZGVmCXN0cnVjdCBzX1F1ZXVlIHsKLQlTS19FVkVOVEVMRU0JRXZRdWV1ZVtTS19NQVhfRVZFTlRdOwotCVNLX0VWRU5URUxFTQkqRXZQdXQ7Ci0JU0tfRVZFTlRFTEVNCSpFdkdldDsKLX0gU0tfUVVFVUU7Ci0KLWV4dGVybgl2b2lkIFNrRXZlbnRJbml0KFNLX0FDICpwQUMsIFNLX0lPQyBJb2MsIGludCBMZXZlbCk7Ci1leHRlcm4Jdm9pZCBTa0V2ZW50UXVldWUoU0tfQUMgKnBBQywgU0tfVTMyIENsYXNzLCBTS19VMzIgRXZlbnQsCi0JU0tfRVZQQVJBIFBhcmEpOwotZXh0ZXJuCWludCBTa0V2ZW50RGlzcGF0Y2hlcihTS19BQyAqcEFDLCBTS19JT0MgSW9jKTsKLQotCi0vKiBEZWZpbmUgRXJyb3IgTnVtYmVycyBhbmQgbWVzc2FnZXMgKi8KLSNkZWZpbmUJU0tFUlJfUV9FMDAxCShTS19FUlJCQVNFX1FVRVVFKzApCi0jZGVmaW5lCVNLRVJSX1FfRTAwMU1TRwkiRXZlbnQgcXVldWUgb3ZlcmZsb3ciCi0jZGVmaW5lCVNLRVJSX1FfRTAwMgkoU0tFUlJfUV9FMDAxKzEpCi0jZGVmaW5lCVNLRVJSX1FfRTAwMk1TRwkiVW5kZWZpbmVkIGV2ZW50IGNsYXNzIgotI2VuZGlmCS8qIF9TS1FVRVVFX0hfICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3JsbXQuaCBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3JsbXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E3NWRmZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tybG10LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrcmxtdC5oCi0gKiBQcm9qZWN0OglHRW5lc2lzLCBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMzcgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDQvMTUgMDk6NDM6NDMgJAotICogUHVycG9zZToJSGVhZGVyIGZpbGUgZm9yIFJlZHVuZGFudCBMaW5rIE1hbmFnZW1lblQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdCBHbWJILgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFRoaXMgaXMgdGhlIGhlYWRlciBmaWxlIGZvciBSZWR1bmRhbnQgTGluayBNYW5hZ2VtZW5ULgotICoKLSAqIEluY2x1ZGUgRmlsZSBIaWVyYXJjaHk6Ci0gKgotICoJInNrZHJ2MXN0LmgiCi0gKgkuLi4KLSAqCSJza3R5cGVzLmgiCi0gKgkic2txdWV1ZS5oIgotICoJInNrYWRkci5oIgotICoJInNrcmxtdC5oIgotICoJLi4uCi0gKgkic2tkcnYybmQuaCIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fSU5DX1NLUkxNVF9ICi0jZGVmaW5lIF9fSU5DX1NLUkxNVF9ICi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYJLyogY3BsdXNwbHVzICovCi0KLS8qIGRlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUJU0tfUkxNVF9ORVRfRE9XTl9URU1QCTEJLyogTkVUX0RPV04gZHVlIHRvIGxhc3QgcG9ydCBkb3duLiAqLwotI2RlZmluZQlTS19STE1UX05FVF9ET1dOX0ZJTkFMCTIJLyogTkVUX0RPV04gZHVlIHRvIFJMTVRfU1RPUC4gKi8KLQotLyogLS0tLS0gRGVmYXVsdCBxdWV1ZSBzaXplcyAtIG11c3QgYmUgbXVsdGlwbGVzIG9mIDggS0IgLS0tLS0gKi8KLQotLyogTGVzcyB0aGFuIDggS0IgZnJlZSBpbiBSWCBxdWV1ZSA9PiBwYXVzZSBmcmFtZXMuICovCi0jZGVmaW5lIFNLX1JMTVRfU1RBTkRCWV9RUlhTSVpFCTEyOAkvKiBTaXplIG9mIHJ4IHN0YW5kYnkgcXVldWUgaW4gS0IuICovCi0jZGVmaW5lIFNLX1JMTVRfU1RBTkRCWV9RWEFTSVpFCTMyCS8qIFNpemUgb2YgYXN5bmMgc3RhbmRieSBxdWV1ZSBpbiBLQi4gKi8KLSNkZWZpbmUgU0tfUkxNVF9TVEFOREJZX1FYU1NJWkUJMAkvKiBTaXplIG9mIHN5bmMgc3RhbmRieSBxdWV1ZSBpbiBLQi4gKi8KLQotI2RlZmluZSBTS19STE1UX01BWF9UWF9CVUZfU0laRQk2MAkvKiBNYXhpbXVtIFJMTVQgdHJhbnNtaXQgc2l6ZS4gKi8KLQotLyogLS0tLS0gUE9SVCBzdGF0ZXMgLS0tLS0gKi8KLQotI2RlZmluZSBTS19STE1UX1BTX0lOSVQJCQkwCS8qIFBvcnQgc3RhdGU6IEluaXQuICovCi0jZGVmaW5lIFNLX1JMTVRfUFNfTElOS19ET1dOCTEJLyogUG9ydCBzdGF0ZTogTGluayBkb3duLiAqLwotI2RlZmluZSBTS19STE1UX1BTX0RPV04JCQkyCS8qIFBvcnQgc3RhdGU6IFBvcnQgZG93bi4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QU19HT0lOR19VUAkJMwkvKiBQb3J0IHN0YXRlOiBHb2luZyB1cC4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QU19VUAkJCTQJLyogUG9ydCBzdGF0ZTogVXAuICovCi0KLS8qIC0tLS0tIFJMTVQgc3RhdGVzIC0tLS0tICovCi0KLSNkZWZpbmUgU0tfUkxNVF9SU19JTklUCQkJMAkvKiBSTE1UIHN0YXRlOiBJbml0LiAqLwotI2RlZmluZSBTS19STE1UX1JTX05FVF9ET1dOCQkxCS8qIFJMTVQgc3RhdGU6IE5ldCBkb3duLiAqLwotI2RlZmluZSBTS19STE1UX1JTX05FVF9VUAkJMgkvKiBSTE1UIHN0YXRlOiBOZXQgdXAuICovCi0KLS8qIC0tLS0tIFBPUlQgZXZlbnRzIC0tLS0tICovCi0KLSNkZWZpbmUgU0tfUkxNVF9MSU5LX1VQCQkJMTAwMQkvKiBMaW5rIGNhbWUgdXAuICovCi0jZGVmaW5lIFNLX1JMTVRfTElOS19ET1dOCQkxMDAyCS8qIExpbmsgd2VudCBkb3duLiAqLwotI2RlZmluZSBTS19STE1UX1BPUlRfQUREUgkJMTAwMwkvKiBQb3J0IGFkZHJlc3MgY2hhbmdlZC4gKi8KLQotLyogLS0tLS0gUkxNVCBldmVudHMgLS0tLS0gKi8KLQotI2RlZmluZSBTS19STE1UX1NUQVJUCQkJMjAwMQkvKiBTdGFydCBSTE1ULiAqLwotI2RlZmluZSBTS19STE1UX1NUT1AJCQkyMDAyCS8qIFN0b3AgUkxNVC4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QQUNLRVRfUkVDRUlWRUQJMjAwMwkvKiBQYWNrZXQgd2FzIHJlY2VpdmVkIGZvciBSTE1ULiAqLwotI2RlZmluZSBTS19STE1UX1NUQVRTX0NMRUFSCQkyMDA0CS8qIENsZWFyIHN0YXRpc3RpY3MuICovCi0jZGVmaW5lIFNLX1JMTVRfU1RBVFNfVVBEQVRFCTIwMDUJLyogVXBkYXRlIHN0YXRpc3RpY3MuICovCi0jZGVmaW5lIFNLX1JMTVRfUFJFRlBPUlRfQ0hBTkdFCTIwMDYJLyogQ2hhbmdlIHByZWZlcnJlZCBwb3J0LiAqLwotI2RlZmluZSBTS19STE1UX01PREVfQ0hBTkdFCQkyMDA3CS8qIE5ldyBSbG10TW9kZS4gKi8KLSNkZWZpbmUgU0tfUkxNVF9TRVRfTkVUUwkJMjAwOAkvKiBOdW1iZXIgb2YgTmV0cyAoMSBvciAyKS4gKi8KLQotLyogLS0tLS0gUkxNVCBtb2RlIGJpdHMgLS0tLS0gKi8KLQotLyoKLSAqIENBVVRJT046CVRoZXNlIGRlZmluZXMgYXJlIHByaXZhdGUgdG8gUkxNVC4KLSAqCQkJUGxlYXNlIHVzZSB0aGUgUkxNVCBtb2RlIGRlZmluZXMgYmVsb3cuCi0gKi8KLQotI2RlZmluZSBTS19STE1UX0NIRUNLX0xJTksJCSAgMQkJLyogQ2hlY2sgTGluay4gKi8KLSNkZWZpbmUgU0tfUkxNVF9DSEVDS19MT0NfTElOSwkgIDIJCS8qIENoZWNrIG90aGVyIGxpbmsgb24gc2FtZSBhZGFwdGVyLiAqLwotI2RlZmluZSBTS19STE1UX0NIRUNLX1NFRwkJICA0CQkvKiBDaGVjayBzZWdtZW50YXRpb24uICovCi0KLSNpZm5kZWYgUkxNVF9DSEVDS19SRU1PVEUKLSNkZWZpbmUgU0tfUkxNVF9DSEVDS19PVEhFUlMJU0tfUkxNVF9DSEVDS19MT0NfTElOSwotI2Vsc2UJLyogUkxNVF9DSEVDS19SRU1PVEUgKi8KLSNkZWZpbmUgU0tfUkxNVF9DSEVDS19SRU1fTElOSwkgIDgJCS8qIENoZWNrIGxpbmsocykgb24gb3RoZXIgYWRhcHRlcihzKS4gKi8KLSNkZWZpbmUgU0tfUkxNVF9NQVhfUkVNT1RFX1BPUlRTX0NIRUNLRUQJMwotI2RlZmluZSBTS19STE1UX0NIRUNLX09USEVSUwlcCi0JCShTS19STE1UX0NIRUNLX0xPQ19MSU5LIHwgU0tfUkxNVF9DSEVDS19SRU1fTElOSykKLSNlbmRpZgkvKiBSTE1UX0NIRUNLX1JFTU9URSAqLwotCi0jaWZuZGVmIFNLX1JMTVRfRU5BQkxFX1RSQU5TUEFSRU5UCi0jZGVmaW5lIFNLX1JMTVRfVFJBTlNQQVJFTlQJCSAgMAkJLyogUkxNVCB0cmFuc3BhcmVudCAtIGluYWN0aXZlLiAqLwotI2Vsc2UJLyogU0tfUkxNVF9FTkFCTEVfVFJBTlNQQVJFTlQgKi8KLSNkZWZpbmUgU0tfUkxNVF9UUkFOU1BBUkVOVAkJMTI4CQkvKiBSTE1UIHRyYW5zcGFyZW50LiAqLwotI2VuZGlmCS8qIFNLX1JMTVRfRU5BQkxFX1RSQU5TUEFSRU5UICovCi0KLS8qIC0tLS0tIFJMTVQgbW9kZXMgLS0tLS0gKi8KLQotLyogQ2hlY2sgTGluayBTdGF0ZS4gKi8KLSNkZWZpbmUgU0tfUkxNVF9NT0RFX0NMUwkoU0tfUkxNVF9DSEVDS19MSU5LKQotCi0vKiBDaGVjayBMb2NhbCBQb3J0czogY2hlY2sgb3RoZXIgbGlua3Mgb24gdGhlIHNhbWUgYWRhcHRlci4gKi8KLSNkZWZpbmUgU0tfUkxNVF9NT0RFX0NMUAkoU0tfUkxNVF9DSEVDS19MSU5LIHwgU0tfUkxNVF9DSEVDS19MT0NfTElOSykKLQotLyogQ2hlY2sgTG9jYWwgUG9ydHMgYW5kIFNlZ21lbnRhdGlvbiBTdGF0dXMuICovCi0jZGVmaW5lIFNLX1JMTVRfTU9ERV9DTFBTUwlcCi0JCShTS19STE1UX0NIRUNLX0xJTksgfCBTS19STE1UX0NIRUNLX0xPQ19MSU5LIHwgU0tfUkxNVF9DSEVDS19TRUcpCi0KLSNpZmRlZiBSTE1UX0NIRUNLX1JFTU9URQotLyogQ2hlY2sgTG9jYWwgYW5kIFJlbW90ZSBQb3J0czogY2hlY2sgbGlua3MgKGxvY2FsIG9yIHJlbW90ZSkuICovCi0JTmFtZSBvZiBkZWZpbmUgVEJEIQotI2RlZmluZSBTS19STE1UX01PREVfQ1JQCVwKLQkJKFNLX1JMTVRfQ0hFQ0tfTElOSyB8IFNLX1JMTVRfQ0hFQ0tfTE9DX0xJTksgfCBTS19STE1UX0NIRUNLX1JFTV9MSU5LKQotCi0vKiBDaGVjayBMb2NhbCBhbmQgUmVtb3RlIFBvcnRzIGFuZCBTZWdtZW50YXRpb24gU3RhdHVzLiAqLwotCU5hbWUgb2YgZGVmaW5lIFRCRCEKLSNkZWZpbmUgU0tfUkxNVF9NT0RFX0NSUFNTCVwKLQkJKFNLX1JMTVRfQ0hFQ0tfTElOSyB8IFNLX1JMTVRfQ0hFQ0tfTE9DX0xJTksgfCBcCi0JCVNLX1JMTVRfQ0hFQ0tfUkVNX0xJTksgfCBTS19STE1UX0NIRUNLX1NFRykKLSNlbmRpZgkvKiBSTE1UX0NIRUNLX1JFTU9URSAqLwotCi0vKiAtLS0tLSBSTE1UIGxvb2thaGVhZCByZXN1bHQgYml0cyAtLS0tLSAqLwotCi0jZGVmaW5lIFNLX1JMTVRfUlhfUkxNVAkJCTEJLyogR2l2ZSBwYWNrZXQgdG8gUkxNVC4gKi8KLSNkZWZpbmUgU0tfUkxNVF9SWF9QUk9UT0NPTAkJMgkvKiBHaXZlIHBhY2tldCB0byBwcm90b2NvbC4gKi8KLQotLyogTWFjcm9zICovCi0KLSNpZiAwCi1TS19BQwkJKnBBQwkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19VMzIJCVBvcnROdW0JCS8qIHJlY2VpdmluZyBwb3J0ICovCi11bnNpZ25lZAlQa3RMZW4JCS8qIHJlY2VpdmVkIHBhY2tldCdzIGxlbmd0aCAqLwotU0tfQk9PTAkJSXNCYwkJLyogRmxhZzogcGFja2V0IGlzIGJyb2FkY2FzdCAqLwotdW5zaWduZWQJKnBPZmZzZXQJLyogb2Zmcy4gb2YgYnl0ZXMgdG8gcHJlc2VudCB0byBTS19STE1UX0xPT0tBSEVBRCAqLwotdW5zaWduZWQJKnBOdW1CeXRlcwkvKiAjQnl0ZXMgdG8gcHJlc2VudCB0byBTS19STE1UX0xPT0tBSEVBRCAqLwotI2VuZGlmCS8qIDAgKi8KLQotI2RlZmluZSBTS19STE1UX1BSRV9MT09LQUhFQUQocEFDLFBvcnROdW0sUGt0TGVuLElzQmMscE9mZnNldCxwTnVtQnl0ZXMpIHsgXAotCVNLX0FDCSpfcEFDOyBcCi0JU0tfVTMyCV9Qb3J0TnVtOyBcCi0JX3BBQyA9IChwQUMpOyBcCi0JX1BvcnROdW0gPSAoU0tfVTMyKShQb3J0TnVtKTsgXAotCS8qIF9wQUMtPlJsbXQuUG9ydFtfUG9ydE51bV0uUGFja2V0c1J4Kys7ICovIFwKLQlfcEFDLT5SbG10LlBvcnRbX1BvcnROdW1dLlBhY2tldHNQZXJUaW1lU2xvdCsrOyBcCi0gICAgaWYgKF9wQUMtPlJsbXQuUmxtdE9mZikgeyBcCi0JCSoocE51bUJ5dGVzKSA9IDA7IFwKLSAgICB9IFwKLSAgICBlbHNlIHtcCi0gICAgICAgIGlmICgoX3BBQy0+UmxtdC5Qb3J0W19Qb3J0TnVtXS5OZXQtPlJsbXRNb2RlICYgU0tfUkxNVF9UUkFOU1BBUkVOVCkgIT0gMCkgeyBcCi0gICAgCQkqKHBOdW1CeXRlcykgPSAwOyBcCi0gICAgCX0gXAotICAgIAllbHNlIGlmIChJc0JjKSB7IFwKLSAgICAJCWlmIChfcEFDLT5SbG10LlBvcnRbX1BvcnROdW1dLk5ldC0+UmxtdE1vZGUgIT0gU0tfUkxNVF9NT0RFX0NMUykgeyBcCi0gICAgCQkJKihwTnVtQnl0ZXMpID0gNjsgXAotICAgIAkJCSoocE9mZnNldCkgPSA2OyBcCi0gICAgCQl9IFwKLSAgICAJCWVsc2UgeyBcCi0gICAgCQkJKihwTnVtQnl0ZXMpID0gMDsgXAotICAgIAkJfSBcCi0gICAgCX0gXAotICAgIAllbHNlIHsgXAotICAgIAkJaWYgKChQa3RMZW4pID4gU0tfUkxNVF9NQVhfVFhfQlVGX1NJWkUpIHsgXAotICAgIAkJCS8qIF9wQUMtPlJsbXQuUG9ydFtfUG9ydE51bV0uRGF0YVBhY2tldHNQZXJUaW1lU2xvdCsrOyAqLyBcCi0gICAgCQkJKihwTnVtQnl0ZXMpID0gMDsgXAotICAgIAkJfSBcCi0gICAgCQllbHNlIHsgXAotICAgIAkJCSoocE51bUJ5dGVzKSA9IDY7IFwKLSAgICAJCQkqKHBPZmZzZXQpID0gMDsgXAotICAgIAkJfSBcCi0gICAgCX0gXAotICAgIH0gXAotfQotCi0jaWYgMAotU0tfQUMJCSpwQUMJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfVTMyCQlQb3J0TnVtCQkvKiByZWNlaXZpbmcgcG9ydCAqLwotU0tfVTgJCSpwTGFQYWNrZXQsCS8qIHJlY2VpdmVkIHBhY2tldCdzIGRhdGEgKHBvaW50cyB0byBwT2Zmc2V0KSAqLwotU0tfQk9PTAkJSXNCYwkJLyogRmxhZzogcGFja2V0IGlzIGJyb2FkY2FzdCAqLwotU0tfQk9PTAkJSXNNYwkJLyogRmxhZzogcGFja2V0IGlzIG11bHRpY2FzdCAqLwotdW5zaWduZWQJKnBGb3JSbG10CS8qIFJlc3VsdDogYml0cyBTS19STE1UX1JYX1JMTVQsIFNLX1JMTVRfUlhfUFJPVE9DT0wgKi8KLVNLX1JMTVRfTE9PS0FIRUFEKCkgZXhwZWN0cyAqcE51bUJ5dGVzIGZyb20KLXBhY2tldCBvZmZzZXQgKnBPZmZzZXQgKHMuYS4pIGF0ICpwTGFQYWNrZXQuCi0KLUlmIHlvdSB1c2UgU0tfUkxNVF9MT09LQUhFQUQgaW4gYSBwYXRoIHdoZXJlIHlvdSBhbHJlYWR5IGtub3cgaWYgdGhlIHBhY2tldCBpcwotQkMsIE1DLCBvciBVQywgeW91IHNob3VsZCB1c2UgY29uc3RhbnRzIGZvciBJc0JjIGFuZCBJc01jLCBzbyB0aGF0IHlvdXIgY29tcGlsZXIKLWNhbiB0cmFzaCB1bm5lZWRlZCBwYXJ0cyBvZiB0aGUgaWYgY29uc3RydWN0aW9uLgotI2VuZGlmCS8qIDAgKi8KLQotI2RlZmluZSBTS19STE1UX0xPT0tBSEVBRChwQUMsUG9ydE51bSxwTGFQYWNrZXQsSXNCYyxJc01jLHBGb3JSbG10KSB7IFwKLQlTS19BQwkqX3BBQzsgXAotCVNLX1UzMglfUG9ydE51bTsgXAotCVNLX1U4CSpfcExhUGFja2V0OyBcCi0JX3BBQyA9IChwQUMpOyBcCi0JX1BvcnROdW0gPSAoU0tfVTMyKShQb3J0TnVtKTsgXAotCV9wTGFQYWNrZXQgPSAoU0tfVTggKikocExhUGFja2V0KTsgXAotCWlmIChJc0JjKSB7XAotCQlpZiAoIVNLX0FERFJfRVFVQUwoX3BMYVBhY2tldCwgX3BBQy0+QWRkci5OZXRbX3BBQy0+UmxtdC5Qb3J0WyBcCi0JCQlfUG9ydE51bV0uTmV0LT5OZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmEpKSB7IFwKLQkJCV9wQUMtPlJsbXQuUG9ydFtfUG9ydE51bV0uQmNUaW1lU3RhbXAgPSBTa09zR2V0VGltZShfcEFDKTsgXAotCQkJX3BBQy0+UmxtdC5DaGVja1N3aXRjaCA9IFNLX1RSVUU7IFwKLQkJfSBcCi0JCS8qIF9wQUMtPlJsbXQuUG9ydFtfUG9ydE51bV0uRGF0YVBhY2tldHNQZXJUaW1lU2xvdCsrOyAqLyBcCi0JCSoocEZvclJsbXQpID0gU0tfUkxNVF9SWF9QUk9UT0NPTDsgXAotCX0gXAotCWVsc2UgaWYgKElzTWMpIHsgXAotCQlpZiAoU0tfQUREUl9FUVVBTChfcExhUGFja2V0LCBCcmlkZ2VNY0FkZHIuYSkpIHsgXAotCQkJX3BBQy0+UmxtdC5Qb3J0W19Qb3J0TnVtXS5CcGR1UGFja2V0c1BlclRpbWVTbG90Kys7IFwKLQkJCWlmIChfcEFDLT5SbG10LlBvcnRbX1BvcnROdW1dLk5ldC0+UmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX1NFRykgeyBcCi0JCQkJKihwRm9yUmxtdCkgPSBTS19STE1UX1JYX1JMTVQgfCBTS19STE1UX1JYX1BST1RPQ09MOyBcCi0JCQl9IFwKLQkJCWVsc2UgeyBcCi0JCQkJKihwRm9yUmxtdCkgPSBTS19STE1UX1JYX1BST1RPQ09MOyBcCi0JCQl9IFwKLQkJfSBcCi0JCWVsc2UgaWYgKFNLX0FERFJfRVFVQUwoX3BMYVBhY2tldCwgU2tSbG10TWNBZGRyLmEpKSB7IFwKLQkJCSoocEZvclJsbXQpID0gU0tfUkxNVF9SWF9STE1UOyBcCi0JCX0gXAotCQllbHNlIHsgXAotCQkJLyogX3BBQy0+UmxtdC5Qb3J0W19Qb3J0TnVtXS5EYXRhUGFja2V0c1BlclRpbWVTbG90Kys7ICovIFwKLQkJCSoocEZvclJsbXQpID0gU0tfUkxNVF9SWF9QUk9UT0NPTDsgXAotCQl9IFwKLQl9IFwKLQllbHNlIHsgXAotCQlpZiAoU0tfQUREUl9FUVVBTCggXAotCQkJX3BMYVBhY2tldCwgXAotCQkJX3BBQy0+QWRkci5Qb3J0W19Qb3J0TnVtXS5DdXJyZW50TWFjQWRkcmVzcy5hKSkgeyBcCi0JCQkqKHBGb3JSbG10KSA9IFNLX1JMTVRfUlhfUkxNVDsgXAotCQl9IFwKLQkJZWxzZSB7IFwKLQkJCS8qIF9wQUMtPlJsbXQuUG9ydFtfUG9ydE51bV0uRGF0YVBhY2tldHNQZXJUaW1lU2xvdCsrOyAqLyBcCi0JCQkqKHBGb3JSbG10KSA9IFNLX1JMTVRfUlhfUFJPVE9DT0w7IFwKLQkJfSBcCi0JfSBcCi19Ci0KLSNpZmRlZiBTS19STE1UX0ZBU1RfTE9PS0FIRUFECi1FcnJvcjogU0tfUkxNVF9GQVNUX0xPT0tBSEVBRCBubyBsb25nZXIgdXNlZC4gVXNlIG5ldyBtYWNyb3MgZm9yIGxvb2thaGVhZC4KLSNlbmRpZgkvKiBTS19STE1UX0ZBU1RfTE9PS0FIRUFEICovCi0jaWZkZWYgU0tfUkxNVF9TTE9XX0xPT0tBSEVBRAotRXJyb3I6IFNLX1JMTVRfU0xPV19MT09LQUhFQUQgbm8gbG9uZ2VyIHVzZWQuIFVzZSBuZXcgbWFjcm9zIGZvciBsb29rYWhlYWQuCi0jZW5kaWYJLyogU0tfUkxNVF9TTE9XX0xPT0tBSEVBRCAqLwotCi0vKiB0eXBlZGVmcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgU0tfUkxNVF9NQlVGX1BSSVZBVEUKLXR5cGVkZWYgc3RydWN0IHNfUmxtdE1idWYgewotCXNvbWUgY29udGVudAotfSBTS19STE1UX01CVUY7Ci0jZW5kaWYJLyogU0tfUkxNVF9NQlVGX1BSSVZBVEUgKi8KLQotCi0jaWZkZWYgU0tfTEFfSU5GTwotdHlwZWRlZiBzdHJ1Y3Qgc19SbG10X1BhY2tldEluZm8gewotCXVuc2lnbmVkCVBhY2tldExlbmd0aDsJCQkvKiBMZW5ndGggb2YgcGFja2V0LiAqLwotCXVuc2lnbmVkCVBhY2tldFR5cGU7CQkJCS8qIERpcmVjdGVkL011bHRpY2FzdC9Ccm9hZGNhc3QuICovCi19IFNLX1JMTVRfUElORk87Ci0jZW5kaWYJLyogU0tfTEFfSU5GTyAqLwotCi0KLXR5cGVkZWYgc3RydWN0IHNfUm9vdElkIHsKLQlTS19VOAkJSWRbOF07CQkJCQkvKiBSb290IEJyaWRnZSBJZC4gKi8KLX0gU0tfUkxNVF9ST09UX0lEOwotCi0KLXR5cGVkZWYgc3RydWN0IHNfcG9ydCB7Ci0JU0tfTUFDX0FERFIJQ2hlY2tBZGRyOwotCVNLX0JPT0wJCVN1c3BlY3RUeDsKLX0gU0tfUE9SVF9DSEVDSzsKLQotCi10eXBlZGVmIHN0cnVjdCBzX1JsbXROZXQgU0tfUkxNVF9ORVQ7Ci0KLQotdHlwZWRlZiBzdHJ1Y3Qgc19SbG10UG9ydCB7Ci0KLS8qIC0tLS0tIFB1YmxpYyBwYXJ0IChyZWFkLW9ubHkpIC0tLS0tICovCi0KLQlTS19VOAkJCVBvcnRTdGF0ZTsJCQkJLyogQ3VycmVudCBzdGF0ZSBvZiB0aGlzIHBvcnQuICovCi0KLQkvKiBGb3IgUE5NSSAqLwotCVNLX0JPT0wJCQlMaW5rRG93bjsKLQlTS19CT09MCQkJUG9ydERvd247Ci0JU0tfVTgJCQlBbGlnbjAxOwotCi0JU0tfVTMyCQkJUG9ydE51bWJlcjsJCQkJLyogTnVtYmVyIG9mIHBvcnQgb24gYWRhcHRlci4gKi8KLQlTS19STE1UX05FVCAqCU5ldDsJCQkJCS8qIE5ldCBwb3J0IGJlbG9uZ3MgdG8uICovCi0KLQlTS19VNjQJCQlUeEhlbGxvQ3RzOwotCVNLX1U2NAkJCVJ4SGVsbG9DdHM7Ci0JU0tfVTY0CQkJVHhTcEhlbGxvUmVxQ3RzOwotCVNLX1U2NAkJCVJ4U3BIZWxsb0N0czsKLQotLyogLS0tLS0gUHJpdmF0ZSBwYXJ0IC0tLS0tICovCi0KLS8qCVNLX1U2NAkJCVBhY2tldHNSeDsgKi8JCQkJLyogVG90YWwgcGFja2V0cyByZWNlaXZlZC4gKi8KLQlTS19VMzIJCQlQYWNrZXRzUGVyVGltZVNsb3Q7CQkvKiBQYWNrZXRzIHJ4ZWQgYmV0d2VlbiBUT3MuICovCi0vKglTS19VMzIJCQlEYXRhUGFja2V0c1BlclRpbWVTbG90OyAqLwkvKiBEYXRhIHBhY2tldHMgLi4uICovCi0JU0tfVTMyCQkJQnBkdVBhY2tldHNQZXJUaW1lU2xvdDsJLyogQlBEVSBwYWNrZXRzIHJ4ZWQgaW4gVFMuICovCi0JU0tfVTY0CQkJQmNUaW1lU3RhbXA7CQkJLyogVGltZSBvZiBsYXN0IEJDIHJlY2VpdmUuICovCi0JU0tfVTY0CQkJR3VUaW1lU3RhbXA7CQkJLyogVGltZSBvZiBlbnRlcmluZyBHT0lOR19VUC4gKi8KLQotCVNLX1RJTUVSCQlVcFRpbWVyOwkJCQkvKiBUaW1lciBzdHJ1Y3QgTGluay9Qb3J0IHVwLiAqLwotCVNLX1RJTUVSCQlEb3duUnhUaW1lcjsJCQkvKiBUaW1lciBzdHJ1Y3QgZG93biByeC4gKi8KLQlTS19USU1FUgkJRG93blR4VGltZXI7CQkJLyogVGltZXIgc3RydWN0IGRvd24gdHguICovCi0KLQlTS19VMzIJCQlDaGVja2luZ1N0YXRlOwkJCS8qIENoZWNraW5nIFN0YXRlLiAqLwotCi0JU0tfQUREUl9QT1JUICoJQWRkclBvcnQ7Ci0KLQlTS19VOAkJCVJhbmRvbVs0XTsJCQkJLyogUmFuZG9tIHZhbHVlLiAqLwotCXVuc2lnbmVkCQlQb3J0c0NoZWNrZWQ7CQkJLyogI3BvcnRzIGNoZWNrZWQuICovCi0JdW5zaWduZWQJCVBvcnRzU3VzcGVjdDsJCQkvKiAjcG9ydHMgY2hlY2tlZCB0aGF0IGFyZSBzLiAqLwotCVNLX1BPUlRfQ0hFQ0sJUG9ydENoZWNrWzFdOwotLyoJU0tfUE9SVF9DSEVDSwlQb3J0Q2hlY2tbU0tfTUFYX01BQ1MgLSAxXTsgKi8KLQotCVNLX0JPT0wJCQlQb3J0U3RhcnRlZDsJCQkvKiBQb3J0IGlzIHN0YXJ0ZWQuICovCi0JU0tfQk9PTAkJCVBvcnROb1J4OwkJCQkvKiBOb1J4IGZvciA+PSAxIHRpbWUgc2xvdC4gKi8KLQlTS19CT09MCQkJUm9vdElkU2V0OwotCVNLX1JMTVRfUk9PVF9JRAlSb290OwkJCQkJLyogUm9vdCBCcmlkZ2UgSWQuICovCi19IFNLX1JMTVRfUE9SVDsKLQotCi1zdHJ1Y3Qgc19SbG10TmV0IHsKLQotLyogLS0tLS0gUHVibGljIHBhcnQgKHJlYWQtb25seSkgLS0tLS0gKi8KLQotCVNLX1UzMgkJCU5ldE51bWJlcjsJCQkvKiBOdW1iZXIgb2YgbmV0LiAqLwotCi0JU0tfUkxNVF9QT1JUICoJUG9ydFtTS19NQVhfTUFDU107CS8qIFBvcnRzIHRoYXQgYmVsb25nIHRvIHRoaXMgbmV0LiAqLwotCVNLX1UzMgkJCU51bVBvcnRzOwkJCS8qIE51bWJlciBvZiBwb3J0cy4gKi8KLQlTS19VMzIJCQlQcmVmUG9ydDsJCQkvKiBQcmVmZXJyZWQgcG9ydC4gKi8KLQotCS8qIEZvciBQTk1JICovCi0KLQlTS19VMzIJCQlDaGdCY1ByaW87CQkJLyogQ2hhbmdlIFByaW9yaXR5IG9mIGxhc3QgYnJvYWRjYXN0IHJlY2VpdmVkICovCi0JU0tfVTMyCQkJUmxtdE1vZGU7CQkJLyogQ2hlY2sgLi4uICovCi0JU0tfVTMyCQkJQWN0aXZlUG9ydDsJCQkvKiBBY3RpdmUgcG9ydC4gKi8KLQlTS19VMzIJCQlQcmVmZXJlbmNlOwkJLyogMHhGRkZGRkZGRjogQXV0b21hdGljLiAqLwotCi0JU0tfVTgJCQlSbG10U3RhdGU7CQkJLyogQ3VycmVudCBSTE1UIHN0YXRlLiAqLwotCi0vKiAtLS0tLSBQcml2YXRlIHBhcnQgLS0tLS0gKi8KLQlTS19CT09MCQkJUm9vdElkU2V0OwotCVNLX1UxNgkJCUFsaWduMDE7Ci0KLQlpbnQJCQkJTGlua3NVcDsJCQkvKiAjTGlua3MgdXAuICovCi0JaW50CQkJCVBvcnRzVXA7CQkJLyogI1BvcnRzIHVwLiAqLwotCVNLX1UzMgkJCVRpbWVvdXRWYWx1ZTsJCS8qIFJMTVQgdGltZW91dCB2YWx1ZS4gKi8KLQotCVNLX1UzMgkJCUNoZWNraW5nU3RhdGU7CQkvKiBDaGVja2luZyBTdGF0ZS4gKi8KLQlTS19STE1UX1JPT1RfSUQJUm9vdDsJCQkJLyogUm9vdCBCcmlkZ2UgSWQuICovCi0KLQlTS19USU1FUgkJTG9jVGltZXI7CQkJLyogVGltZXIgc3RydWN0LiAqLwotCVNLX1RJTUVSCQlTZWdUaW1lcjsJCQkvKiBUaW1lciBzdHJ1Y3QuICovCi19OwotCi0KLXR5cGVkZWYgc3RydWN0IHNfUmxtdCB7Ci0KLS8qIC0tLS0tIFB1YmxpYyBwYXJ0IChyZWFkLW9ubHkpIC0tLS0tICovCi0KLQlTS19VMzIJCQlOdW1OZXRzOwkJCS8qIE51bWJlciBvZiBuZXRzLiAqLwotCVNLX1UzMgkJCU5ldHNTdGFydGVkOwkJLyogTnVtYmVyIG9mIG5ldHMgc3RhcnRlZC4gKi8KLQlTS19STE1UX05FVAkJTmV0W1NLX01BWF9ORVRTXTsJLyogQXJyYXkgb2YgYXZhaWxhYmxlIG5ldHMuICovCi0JU0tfUkxNVF9QT1JUCVBvcnRbU0tfTUFYX01BQ1NdOwkvKiBBcnJheSBvZiBhdmFpbGFibGUgcG9ydHMuICovCi0KLS8qIC0tLS0tIFByaXZhdGUgcGFydCAtLS0tLSAqLwotCVNLX0JPT0wJCQlDaGVja1N3aXRjaDsKLQlTS19CT09MCQkJUmxtdE9mZjsgICAgICAgICAgICAvKiBzZXQgdG8gemVybyBpZiB0aGUgTWFjIGFkZHJlc3NlcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZXF1YWwgb3IgdGhlIHNlY29uZCBvbmUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgemVybyAqLwotCVNLX1UxNgkJCUFsaWduMDE7Ci0KLX0gU0tfUkxNVDsKLQotCi1leHRlcm4JU0tfTUFDX0FERFIJQnJpZGdlTWNBZGRyOwotZXh0ZXJuCVNLX01BQ19BRERSCVNrUmxtdE1jQWRkcjsKLQotLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIFNLX0tSX1BST1RPCi0KLS8qIEZ1bmN0aW9ucyBwcm92aWRlZCBieSBTa1JsbXQgKi8KLQotLyogQU5TSS9DKysgY29tcGxpYW50IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLQotZXh0ZXJuCXZvaWQJU2tSbG10SW5pdCgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlMZXZlbCk7Ci0KLWV4dGVybglpbnQJU2tSbG10RXZlbnQoCi0JU0tfQUMJCSpwQUMsCi0JU0tfSU9DCQlJb0MsCi0JU0tfVTMyCQlFdmVudCwKLQlTS19FVlBBUkEJUGFyYSk7Ci0KLSNlbHNlCS8qIGRlZmluZWQoU0tfS1JfUFJPVE8pICovCi0KLS8qIE5vbi1BTlNJL0MrKyBjb21wbGlhbnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotCi0jZXJyb3IgS1Itc3R5bGUgZnVuY3Rpb24gcHJvdG90eXBlcyBhcmUgbm90IHlldCBwcm92aWRlZC4KLQotI2VuZGlmCS8qIGRlZmluZWQoU0tfS1JfUFJPVE8pKSAqLwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCS8qIF9fY3BsdXNwbHVzICovCi0KLSNlbmRpZgkvKiBfX0lOQ19TS1JMTVRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdGltZXIuaCBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3RpbWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZTZkN2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdGltZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza3RpbWVyLmgKLSAqIFByb2plY3Q6CUdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMsIEV2ZW50IFNjaGVkdWxlciBNb2R1bGUKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS4xMSAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8wOS8xNiAxMjo1ODoxOCAkCi0gKiBQdXJwb3NlOglEZWZpbmVzIGZvciB0aGUgdGltZXIgZnVuY3Rpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdCBHbWJILgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNLVElNRVIuSAljb250YWlucyBhbGwgZGVmaW5lcyBhbmQgdHlwZXMgZm9yIHRoZSB0aW1lciBmdW5jdGlvbnMKLSAqLwotCi0jaWZuZGVmCV9TS1RJTUVSX0hfCi0jZGVmaW5lIF9TS1RJTUVSX0hfCi0KLSNpbmNsdWRlICJoL3NrcXVldWUuaCIKLQotLyoKLSAqIFNLIHRpbWVyCi0gKiAtIG5lZWRlZCB3aGVyZXZlciBhIHRpbWVyIGlzIHVzZWQuIFB1dCB0aGlzIGluIHlvdXIgZGF0YSBzdHJ1Y3R1cmUKLSAqICAgd2hlcmV2ZXIgeW91IHdhbnQuCi0gKi8KLXR5cGVkZWYJc3RydWN0IHNfVGltZXIgU0tfVElNRVI7Ci0KLXN0cnVjdCBzX1RpbWVyIHsKLQlTS19USU1FUgkqVG1OZXh0OwkvKiBsaW5rZWQgbGlzdCAqLwotCVNLX1UzMgkJVG1DbGFzczsJLyogVGltZXIgRXZlbnQgY2xhc3MgKi8KLQlTS19VMzIJCVRtRXZlbnQ7CS8qIFRpbWVyIEV2ZW50IHZhbHVlICovCi0JU0tfRVZQQVJBCVRtUGFyYTsJCS8qIFRpbWVyIEV2ZW50IHBhcmFtZXRlciAqLwotCVNLX1UzMgkJVG1EZWx0YTsJLyogZGVsdGEgdGltZSAqLwotCWludAkJCVRtQWN0aXZlOwkvKiBmbGFnOiBhY3RpdmUvaW5hY3RpdmUgKi8KLX07Ci0KLS8qCi0gKiBUaW1lciBjb250cm9sIHN0cnVjdC4KLSAqIC0gdXNlIGluIEFkYXB0ZXJzIGNvbnRleHQgbmFtZSBwQUMtPlRpbQotICovCi10eXBlZGVmCXN0cnVjdCBzX1RpbUN0cmwgewotCVNLX1RJTUVSCSpTdFF1ZXVlOwkvKiBIZWFkIG9mIFRpbWVyIHF1ZXVlICovCi19IFNLX1RJTUNUUkw7Ci0KLWV4dGVybiB2b2lkIFNrVGltZXJJbml0KFNLX0FDICpwQUMsIFNLX0lPQyBJb2MsIGludCBMZXZlbCk7Ci1leHRlcm4gdm9pZCBTa1RpbWVyU3RvcChTS19BQyAqcEFDLCBTS19JT0MgSW9jLCBTS19USU1FUiAqcFRpbWVyKTsKLWV4dGVybiB2b2lkIFNrVGltZXJTdGFydChTS19BQyAqcEFDLCBTS19JT0MgSW9jLCBTS19USU1FUiAqcFRpbWVyLAotCVNLX1UzMiBUaW1lLCBTS19VMzIgQ2xhc3MsIFNLX1UzMiBFdmVudCwgU0tfRVZQQVJBIFBhcmEpOwotZXh0ZXJuIHZvaWQgU2tUaW1lckRvbmUoU0tfQUMgKnBBQywgU0tfSU9DIElvYyk7Ci0jZW5kaWYJLyogX1NLVElNRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3R5cGVzLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2t0eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGVkYzk2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2t0eXBlcy5oCi0gKiBQcm9qZWN0OglHRW5lc2lzLCBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMiAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8xMC8wNyAwODoxNjo1MSAkCi0gKiBQdXJwb3NlOglEZWZpbmUgZGF0YSB0eXBlcyBmb3IgTGludXgKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIEluIHRoaXMgZmlsZSwgYWxsIGRhdGEgdHlwZXMgdGhhdCBhcmUgbmVlZGVkIGJ5IHRoZSBjb21tb24gbW9kdWxlcwotICogYXJlIG1hcHBlZCB0byBMaW51eCBkYXRhIHR5cGVzLgotICogCi0gKgotICogSW5jbHVkZSBGaWxlIEhpZXJhcmNoeToKLSAqCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0lOQ19TS1RZUEVTX0gKLSNkZWZpbmUgX19JTkNfU0tUWVBFU19ICi0KLQotLyogZGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRGF0YSB0eXBlcyB3aXRoIGEgc3BlY2lmaWMgc2l6ZS4gJ0knID0gc2lnbmVkLCAnVScgPSB1bnNpZ25lZC4KLSAqLwotI2RlZmluZSBTS19JOAlzOAotI2RlZmluZSBTS19VOAl1OAotI2RlZmluZSBTS19JMTYJczE2Ci0jZGVmaW5lIFNLX1UxNgl1MTYKLSNkZWZpbmUgU0tfSTMyCXMzMgotI2RlZmluZSBTS19VMzIJdTMyCi0jZGVmaW5lIFNLX0k2NAlzNjQKLSNkZWZpbmUgU0tfVTY0CXU2NAotCi0jZGVmaW5lIFNLX1VQVFIJdWxvbmcJCS8qIGNhc3RpbmcgcG9pbnRlciA8LT4gaW50ZWdyYWwgKi8KLQotLyoKLSogQm9vbGVhbiB0eXBlLgotKi8KLSNkZWZpbmUgU0tfQk9PTAkJU0tfVTgKLSNkZWZpbmUgU0tfRkFMU0UJMAotI2RlZmluZSBTS19UUlVFCQkoIVNLX0ZBTFNFKQotCi0vKiB0eXBlZGVmcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBmdW5jdGlvbiBwcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZW5kaWYJLyogX19JTkNfU0tUWVBFU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2t2ZXJzaW9uLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2t2ZXJzaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExYTcyOTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXZlcnNpb24uaAotICogUHJvamVjdDoJR0VuZXNpcywgUENJIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjUgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMTAvMDcgMDg6MTY6NTEgJAotICogUHVycG9zZToJU0sgc3BlY2lmaWMgRXJyb3IgbG9nIHN1cHBvcnQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYJbGludAotc3RhdGljIGNvbnN0IGNoYXIgU3lzS29ubmVjdEZpbGVJZFtdID0gIkAoIykgKEMpIFN5c0tvbm5lY3QgR21iSC4iOwotc3RhdGljIGNvbnN0IGNoYXIgU3lzS29ubmVjdEJ1aWxkTnVtYmVyW10gPQotCSJAKCMpU0stQlVJTEQ6IDYuMjMgUEw6IDAxIjsgCi0jZW5kaWYJLyogIWRlZmluZWQobGludCkgKi8KLQotI2RlZmluZSBCT09UX1NUUklORwkic2s5OGxpbjogTmV0d29yayBEZXZpY2UgRHJpdmVyIHY2LjIzXG4iIFwKLQkJCSIoQylDb3B5cmlnaHQgMTk5OS0yMDA0IE1hcnZlbGwoUikuIgotCi0jZGVmaW5lIFZFUl9TVFJJTkcJIjYuMjMiCi0jZGVmaW5lIERSSVZFUl9GSUxFX05BTUUJInNrOThsaW4iCi0jZGVmaW5lIERSSVZFUl9SRUxfREFURQkJIkZlYi0xMy0yMDA0IgotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za3ZwZC5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdnBkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZDllNDguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdnBkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrdnBkLmgKLSAqIFByb2plY3Q6CUdFbmVzaXMsIFBDSSBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS4xNSAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8wMS8xMyAxMDozOTozOCAkCi0gKiBQdXJwb3NlOglEZWZpbmVzIGFuZCBNYWNyb3MgZm9yIFZQRCBoYW5kbGluZwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAzIFN5c0tvbm5lY3QgR21iSC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBza3ZwZC5oCWNvbnRhaW5zIERpYWdub3N0aWMgc3BlY2lmaWMgZGVmaW5lcyBmb3IgVlBEIGhhbmRsaW5nCi0gKi8KLQotI2lmbmRlZiBfX0lOQ19TS1ZQRF9IXwotI2RlZmluZSBfX0lOQ19TS1ZQRF9IXwotCi0vKgotICogRGVmaW5lIFJlc291cmNlIFR5cGUgSWRlbnRpZmllcnMgYW5kIFZQRCBrZXl3b3JkcwotICovCi0jZGVmaW5lCVJFU19JRAkJMHg4MgkvKiBSZXNvdXJjZSBUeXBlIElEIFN0cmluZyAoUHJvZHVjdCBOYW1lKSAqLwotI2RlZmluZSBSRVNfVlBEX1IJMHg5MAkvKiBzdGFydCBvZiBWUEQgcmVhZCBvbmx5IGFyZWEgKi8KLSNkZWZpbmUgUkVTX1ZQRF9XCTB4OTEJLyogc3RhcnQgb2YgVlBEIHJlYWQvd3JpdGUgYXJlYSAqLwotI2RlZmluZSBSRVNfRU5ECQkweDc4CS8qIFJlc291cmNlIFR5cGUgRW5kIFRhZyAqLwotCi0jaWZuZGVmIFZQRF9OQU1FCi0jZGVmaW5lIFZQRF9OQU1FCSJOYW1lIgkvKiBQcm9kdWN0IE5hbWUsIFZQRCBuYW1lIG9mIFJFU19JRCAqLwotI2VuZGlmCS8qIFZQRF9OQU1FICovCi0jZGVmaW5lIFZQRF9QTgkJIlBOIgkvKiBBZGFwdGVyIFBhcnQgTnVtYmVyICovCi0jZGVmaW5lCVZQRF9FQwkJIkVDIgkvKiBBZGFwdGVyIEVuZ2luZWVyaW5nIExldmVsICovCi0jZGVmaW5lIFZQRF9NTgkJIk1OIgkvKiBNYW51ZmFjdHVyZSBJRCAqLwotI2RlZmluZSBWUERfU04JCSJTTiIJLyogU2VyaWFsIE51bWJlciAqLwotI2RlZmluZSBWUERfQ1AJCSJDUCIJLyogRXh0ZW5kZWQgQ2FwYWJpbGl0eSAqLwotI2RlZmluZSBWUERfUlYJCSJSViIJLyogQ2hlY2tzdW0gYW5kIFJlc2VydmVkICovCi0jZGVmaW5lCVZQRF9ZQQkJIllBIgkvKiBBc3NldCBUYWcgSWRlbnRpZmllciAqLwotI2RlZmluZSBWUERfVkwJCSJWTCIJLyogRmlyc3QgRXJyb3IgTG9nIE1lc3NhZ2UgKFNLIHNwZWNpZmljKSAqLwotI2RlZmluZSBWUERfVkYJCSJWRiIJLyogU2Vjb25kIEVycm9yIExvZyBNZXNzYWdlIChTSyBzcGVjaWZpYykgKi8KLSNkZWZpbmUgVlBEX1JXCQkiUlciCS8qIFJlbWFpbmluZyBSZWFkIC8gV3JpdGUgQXJlYSAqLwotCi0vKiAndHlwZScgdmFsdWVzIGZvciB2cGRfc2V0dXBfcGFyYSgpICovCi0jZGVmaW5lIFZQRF9ST19LRVkJMQkvKiBSTyBrZXlzIGFyZSAiUE4iLCAiRUMiLCAiTU4iLCAiU04iLCAiUlYiICovCi0jZGVmaW5lIFZQRF9SV19LRVkJMgkvKiBSVyBrZXlzIGFyZSAiWXgiLCAiVngiLCBhbmQgIlJXIiAqLwotCi0vKiAnb3AnIHZhbHVlcyBmb3IgdnBkX3NldHVwX3BhcmEoKSAqLwotI2RlZmluZQlBRERfS0VZCQkxCS8qIGFkZCB0aGUga2V5IGF0IHRoZSBwb3MgIlJWIiBvciAiUlciICovCi0jZGVmaW5lIE9XUl9LRVkJCTIJLyogb3ZlcndyaXRlIGtleSBpZiBhbHJlYWR5IGV4aXN0cyAqLwotCi0vKgotICogRGVmaW5lIFJFQUQgYW5kIFdSSVRFIENvbnN0YW50cy4KLSAqLwotCi0jZGVmaW5lIFZQRF9ERVZfSURfR0VORVNJUyAJMHg0MzAwCi0KLSNkZWZpbmUJVlBEX1NJWkVfWVVLT04JCTI1NgotI2RlZmluZQlWUERfU0laRV9HRU5FU0lTCTUxMgotI2RlZmluZQlWUERfU0laRQkJCTUxMgotI2RlZmluZSBWUERfUkVBRAkweDAwMDAKLSNkZWZpbmUgVlBEX1dSSVRFCTB4ODAwMAotCi0jZGVmaW5lIFZQRF9TVE9QKHBBQyxJb0MpCVZQRF9PVVQxNihwQUMsSW9DLFBDSV9WUERfQURSX1JFRyxWUERfV1JJVEUpCi0KLSNkZWZpbmUgVlBEX0dFVF9SRVNfTEVOKHApCSgodW5zaWduZWQgaW50KSBcCi0JCQkJCSgqIChTS19VOCAqKSYocClbMV0pIHxcCi0JCQkJCSgoKiAoU0tfVTggKikmKHApWzJdKSA8PCA4KSkKLSNkZWZpbmUgVlBEX0dFVF9WUERfTEVOKHApCSgodW5zaWduZWQgaW50KSgqIChTS19VOCAqKSYocClbMl0pKQotI2RlZmluZSBWUERfR0VUX1ZBTChwKQkJKChjaGFyICopJihwKVszXSkKLQotI2RlZmluZSBWUERfTUFYX0xFTgk1MAotCi0vKiBWUEQgc3RhdHVzICovCi0JLyogYml0IDcuLjEgcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgVlBEX1ZBTElECSgxPDwwKQkvKiBWUEQgZGF0YSBidWZmZXIsIHZwZF9mcmVlX3JvLCAqLwotCQkJCQkJCS8qIGFuZCB2cGRfZnJlZV9ydyB2YWxpZAkgKi8KLQotLyoKLSAqIFZQRCBzdHJ1Y3RzCi0gKi8KLXR5cGVkZWYJc3RydWN0IHNfdnBkX3N0YXR1cyB7Ci0JdW5zaWduZWQgc2hvcnQJQWxpZ24wMTsJCQkvKiBBbGlnbm1lbnQgKi8KLQl1bnNpZ25lZCBzaG9ydAl2cGRfc3RhdHVzOwkJCS8qIFZQRCBzdGF0dXMsIGRlc2NyaXB0aW9uIHNlZSBhYm92ZSAqLwotCWludAkJCQl2cGRfZnJlZV9ybzsJCS8qIHVudXNlZCBieXRlcyBpbiByZWFkIG9ubHkgYXJlYSAqLwotCWludAkJCQl2cGRfZnJlZV9ydzsJCS8qIGJ5dGVzIGF2YWlsYWJsZSBpbiByZWFkL3dyaXRlIGFyZWEgKi8KLX0gU0tfVlBEX1NUQVRVUzsKLQotdHlwZWRlZglzdHJ1Y3Qgc192cGQgewotCVNLX1ZQRF9TVEFUVVMJdjsJCQkJCS8qIFZQRCBzdGF0dXMgc3RydWN0dXJlICovCi0JY2hhcgkJCXZwZF9idWZbVlBEX1NJWkVdOwkvKiBWUEQgYnVmZmVyICovCi0JaW50CQkJCXJvbV9zaXplOwkJCS8qIFZQRCBST00gU2l6ZSBmcm9tIFBDSV9PVVJfUkVHXzIgKi8KLQlpbnQJCQkJdnBkX3NpemU7CQkJLyogc2F2ZWQgVlBELXNpemUgKi8KLX0gU0tfVlBEOwotCi10eXBlZGVmCXN0cnVjdCBzX3ZwZF9wYXJhIHsKLQl1bnNpZ25lZCBpbnQJcF9sZW47CS8qIHBhcmFtZXRlciBsZW5ndGggKi8KLQljaGFyCQkJKnBfdmFsOwkvKiBwb2ludHMgdG8gdGhlIHZhbHVlICovCi19IFNLX1ZQRF9QQVJBOwotCi0vKgotICogc3RydWN0dXJlIG9mIExhcmdlIFJlc291cmNlIFR5cGUgSWRlbnRpZmllcnMKLSAqLwotCi0vKiB3YXMgcmVtb3ZlZCBiZWNhdXNlIG9mIGFsaWdubWVudCBwcm9ibGVtcyAqLwotCi0vKgotICogc3RydWN0dXJlIG9mIFZQRCBrZXl3b3JkcwotICovCi10eXBlZGVmCXN0cnVjdCBzX3ZwZF9rZXkgewotCWNoYXIJCQlwX2tleVsyXTsJLyogMiBieXRlcyBJRCBzdHJpbmcgKi8KLQl1bnNpZ25lZCBjaGFyCXBfbGVuOwkJLyogMSBieXRlIGxlbmd0aCAqLwotCWNoYXIJCQlwX3ZhbDsJCS8qIHN0YXJ0IG9mIHRoZSB2YWx1ZSBzdHJpbmcgKi8KLX0gU0tfVlBEX0tFWTsKLQotCi0vKgotICogU3lzdGVtIHNwZWNpZmljIFZQRCBtYWNyb3MKLSAqLwotI2lmbmRlZiBTS0RJQUcKLSNpZm5kZWYgVlBEX0RPX0lPCi0jZGVmaW5lIFZQRF9PVVQ4KHBBQyxJb0MsQWRkcixWYWwpCSh2b2lkKVNrUGNpV3JpdGVDZmdCeXRlKHBBQyxBZGRyLFZhbCkKLSNkZWZpbmUgVlBEX09VVDE2KHBBQyxJb0MsQWRkcixWYWwpCSh2b2lkKVNrUGNpV3JpdGVDZmdXb3JkKHBBQyxBZGRyLFZhbCkKLSNkZWZpbmUgVlBEX0lOOChwQUMsSW9DLEFkZHIscFZhbCkJKHZvaWQpU2tQY2lSZWFkQ2ZnQnl0ZShwQUMsQWRkcixwVmFsKQotI2RlZmluZSBWUERfSU4xNihwQUMsSW9DLEFkZHIscFZhbCkJKHZvaWQpU2tQY2lSZWFkQ2ZnV29yZChwQUMsQWRkcixwVmFsKQotI2RlZmluZSBWUERfSU4zMihwQUMsSW9DLEFkZHIscFZhbCkJKHZvaWQpU2tQY2lSZWFkQ2ZnRFdvcmQocEFDLEFkZHIscFZhbCkKLSNlbHNlCS8qIFZQRF9ET19JTyAqLwotI2RlZmluZSBWUERfT1VUOChwQUMsSW9DLEFkZHIsVmFsKQlTS19PVVQ4KElvQyxQQ0lfQyhBZGRyKSxWYWwpCi0jZGVmaW5lIFZQRF9PVVQxNihwQUMsSW9DLEFkZHIsVmFsKQlTS19PVVQxNihJb0MsUENJX0MoQWRkciksVmFsKQotI2RlZmluZSBWUERfSU44KHBBQyxJb0MsQWRkcixwVmFsKQlTS19JTjgoSW9DLFBDSV9DKEFkZHIpLHBWYWwpCi0jZGVmaW5lIFZQRF9JTjE2KHBBQyxJb0MsQWRkcixwVmFsKQlTS19JTjE2KElvQyxQQ0lfQyhBZGRyKSxwVmFsKQotI2RlZmluZSBWUERfSU4zMihwQUMsSW9DLEFkZHIscFZhbCkJU0tfSU4zMihJb0MsUENJX0MoQWRkcikscFZhbCkKLSNlbmRpZgkvKiBWUERfRE9fSU8gKi8KLSNlbHNlCS8qIFNLRElBRyAqLwotI2RlZmluZSBWUERfT1VUOChwQUMsSW9jLEFkZHIsVmFsKSB7CQkJXAotCQlpZiAoKHBBQyktPkRnVC5EZ1VzZUNmZ0N5Y2xlKQkJCVwKLQkJCVNrUGNpV3JpdGVDZmdCeXRlKHBBQyxBZGRyLFZhbCk7CVwKLQkJZWxzZQkJCQkJCQkJCVwKLQkJCVNLX09VVDgocEFDLFBDSV9DKEFkZHIpLFZhbCk7CQlcCi0JCX0KLSNkZWZpbmUgVlBEX09VVDE2KHBBQyxJb2MsQWRkcixWYWwpIHsJCQlcCi0JCWlmICgocEFDKS0+RGdULkRnVXNlQ2ZnQ3ljbGUpCQkJXAotCQkJU2tQY2lXcml0ZUNmZ1dvcmQocEFDLEFkZHIsVmFsKTsJXAotCQllbHNlCQkJCQkJXAotCQkJU0tfT1VUMTYocEFDLFBDSV9DKEFkZHIpLFZhbCk7CQlcCi0JCX0KLSNkZWZpbmUgVlBEX0lOOChwQUMsSW9jLEFkZHIscFZhbCkgewkJCVwKLQkJaWYgKChwQUMpLT5EZ1QuRGdVc2VDZmdDeWNsZSkgCQkJXAotCQkJU2tQY2lSZWFkQ2ZnQnl0ZShwQUMsQWRkcixwVmFsKTsJXAotCQllbHNlCQkJCQkJXAotCQkJU0tfSU44KHBBQyxQQ0lfQyhBZGRyKSxwVmFsKTsgCQlcCi0JCX0KLSNkZWZpbmUgVlBEX0lOMTYocEFDLElvYyxBZGRyLHBWYWwpIHsJCQlcCi0JCWlmICgocEFDKS0+RGdULkRnVXNlQ2ZnQ3ljbGUpIAkJCVwKLQkJCVNrUGNpUmVhZENmZ1dvcmQocEFDLEFkZHIscFZhbCk7CVwKLQkJZWxzZQkJCQkJCVwKLQkJCVNLX0lOMTYocEFDLFBDSV9DKEFkZHIpLHBWYWwpOyAJCVwKLQkJfQotI2RlZmluZSBWUERfSU4zMihwQUMsSW9jLEFkZHIscFZhbCkgewkJCVwKLQkJaWYgKChwQUMpLT5EZ1QuRGdVc2VDZmdDeWNsZSkJCQlcCi0JCQlTa1BjaVJlYWRDZmdEV29yZChwQUMsQWRkcixwVmFsKTsJXAotCQllbHNlCQkJCQkJXAotCQkJU0tfSU4zMihwQUMsUENJX0MoQWRkcikscFZhbCk7CQlcCi0JCX0KLSNlbmRpZgkvKiBuU0tESUFHICovCi0KLS8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYJU0tfS1JfUFJPVE8KLSNpZmRlZiBTS0RJQUcKLWV4dGVybiBTS19VMzIJVnBkUmVhZERXb3JkKAotCVNLX0FDCQkqcEFDLAotCVNLX0lPQwkJSW9DLAotCWludAkJCWFkZHIpOwotI2VuZGlmCS8qIFNLRElBRyAqLwotCi1leHRlcm4gU0tfVlBEX1NUQVRVUwkqVnBkU3RhdCgKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQyk7Ci0KLWV4dGVybiBpbnQJVnBkS2V5cygKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQywKLQljaGFyCQkqYnVmLAotCWludAkJCSpsZW4sCi0JaW50CQkJKmVsZW1lbnRzKTsKLQotZXh0ZXJuIGludAlWcGRSZWFkKAotCVNLX0FDCQkqcEFDLAotCVNLX0lPQwkJSW9DLAotCWNvbnN0IGNoYXIJKmtleSwKLQljaGFyCQkqYnVmLAotCWludAkJCSpsZW4pOwotCi1leHRlcm4gU0tfQk9PTAlWcGRNYXlXcml0ZSgKLQljaGFyCQkqa2V5KTsKLQotZXh0ZXJuIGludAlWcGRXcml0ZSgKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQywKLQljb25zdCBjaGFyCSprZXksCi0JY29uc3QgY2hhcgkqYnVmKTsKLQotZXh0ZXJuIGludAlWcGREZWxldGUoCi0JU0tfQUMJCSpwQUMsCi0JU0tfSU9DCQlJb0MsCi0JY2hhcgkJKmtleSk7Ci0KLWV4dGVybiBpbnQJVnBkVXBkYXRlKAotCVNLX0FDCQkqcEFDLAotCVNLX0lPQwkJSW9DKTsKLQotI2lmZGVmCVNLRElBRwotZXh0ZXJuIGludAlWcGRSZWFkQmxvY2soCi0JU0tfQUMJCSpwQUMsCi0JU0tfSU9DCQlJb0MsCi0JY2hhcgkJKmJ1ZiwKLQlpbnQJCQlhZGRyLAotCWludAkJCWxlbik7Ci0KLWV4dGVybiBpbnQJVnBkV3JpdGVCbG9jaygKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQywKLQljaGFyCQkqYnVmLAotCWludAkJCWFkZHIsCi0JaW50CQkJbGVuKTsKLSNlbmRpZgkvKiBTS0RJQUcgKi8KLSNlbHNlCS8qIFNLX0tSX1BST1RPICovCi1leHRlcm4gU0tfVTMyCVZwZFJlYWREV29yZCgpOwotZXh0ZXJuIFNLX1ZQRF9TVEFUVVMJKlZwZFN0YXQoKTsKLWV4dGVybiBpbnQJVnBkS2V5cygpOwotZXh0ZXJuIGludAlWcGRSZWFkKCk7Ci1leHRlcm4gU0tfQk9PTAlWcGRNYXlXcml0ZSgpOwotZXh0ZXJuIGludAlWcGRXcml0ZSgpOwotZXh0ZXJuIGludAlWcGREZWxldGUoKTsKLWV4dGVybiBpbnQJVnBkVXBkYXRlKCk7Ci0jZW5kaWYJLyogU0tfS1JfUFJPVE8gKi8KLQotI2VuZGlmCS8qIF9fSU5DX1NLVlBEX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gveG1hY19paS5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3htYWNfaWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4ZTZkMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gveG1hY19paS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJeG1hY19paS5oCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBDb21tb24gTW9kdWxlcwotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjUyICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzEwLzAyIDE2OjM1OjUwICQKLSAqIFB1cnBvc2U6CURlZmluZXMgYW5kIE1hY3JvcyBmb3IgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19JTkNfWE1BQ19ICi0jZGVmaW5lIF9fSU5DX1hNQUNfSAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCS8qIF9fY3BsdXNwbHVzICovCi0KLS8qIGRlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBYTUFDIElJIHJlZ2lzdGVycwotICoKLSAqIFRoZSBYTUFDIHJlZ2lzdGVycyBhcmUgMTYgb3IgMzIgYml0cyB3aWRlLgotICogVGhlIFhNQUNzIGhvc3QgcHJvY2Vzc29yIGludGVyZmFjZSBpcyBzZXQgdG8gMTYgYml0IG1vZGUsCi0gKiB0aGVyZWZvcmUgQUxMIHJlZ2lzdGVycyB3aWxsIGJlIGFkZHJlc3NlZCB3aXRoIDE2IGJpdCBhY2Nlc3Nlcy4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgcHJvdmlkZWQgdG8gYWNjZXNzIHRoZSBYTUFDIHJlZ2lzdGVycwotICogWE1fSU4xNigpLCBYTV9PVVQxNiwgWE1fSU4zMigpLCBYTV9PVVQzMigpLCBYTV9JTkFEUigpLCBYTV9PVVRBRFIoKSwKLSAqIFhNX0lOSEFTSCgpLCBhbmQgWE1fT1VUSEFTSCgpLgotICogVGhlIG1hY3JvcyBhcmUgZGVmaW5lZCBpbiBTa0dlSHcuaC4KLSAqCi0gKiBOb3RlOglOQSByZWcJPSBOZXR3b3JrIEFkZHJlc3MgZS5nIERBLCBTQSBldGMuCi0gKgotICovCi0jZGVmaW5lIFhNX01NVV9DTUQJCTB4MDAwMAkvKiAxNiBiaXQgci93CU1NVSBDb21tYW5kIFJlZ2lzdGVyICovCi0JLyogMHgwMDA0OgkJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgWE1fUE9GRgkJCTB4MDAwOAkvKiAzMiBiaXQgci93CVBhY2tldCBPZmZzZXQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fQlVSU1QJCTB4MDAwYwkvKiAzMiBiaXQgci93CUJ1cnN0IFJlZ2lzdGVyIGZvciBoYWxmIGR1cGxleCovCi0jZGVmaW5lIFhNXzFMX1ZMQU5fVEFHCTB4MDAxMAkvKiAxNiBiaXQgci93CU9uZSBMZXZlbCBWTEFOIFRhZyBJRCAqLwotI2RlZmluZSBYTV8yTF9WTEFOX1RBRwkweDAwMTQJLyogMTYgYml0IHIvdwlUd28gTGV2ZWwgVkxBTiBUYWcgSUQgKi8KLQkvKiAweDAwMTggLSAweDAwMWU6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1RYX0NNRAkJMHgwMDIwCS8qIDE2IGJpdCByL3cJVHJhbnNtaXQgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBYTV9UWF9SVF9MSU0JMHgwMDI0CS8qIDE2IGJpdCByL3cJVHJhbnNtaXQgUmV0cnkgTGltaXQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fVFhfU1RJTUUJCTB4MDAyOAkvKiAxNiBiaXQgci93CVRyYW5zbWl0IFNsb3R0aW1lIFJlZ2lzdGVyICovCi0jZGVmaW5lIFhNX1RYX0lQRwkJMHgwMDJjCS8qIDE2IGJpdCByL3cJVHJhbnNtaXQgSW50ZXIgUGFja2V0IEdhcCAqLwotI2RlZmluZSBYTV9SWF9DTUQJCTB4MDAzMAkvKiAxNiBiaXQgci93CVJlY2VpdmUgQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBYTV9QSFlfQUREUgkJMHgwMDM0CS8qIDE2IGJpdCByL3cJUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fUEhZX0RBVEEJCTB4MDAzOAkvKiAxNiBiaXQgci93CVBIWSBEYXRhIFJlZ2lzdGVyICovCi0JLyogMHgwMDNjOiAJCXJlc2VydmVkICovCi0jZGVmaW5lIFhNX0dQX1BPUlQJCTB4MDA0MAkvKiAzMiBiaXQgci93CUdlbmVyYWwgUHVycG9zZSBQb3J0IFJlZ2lzdGVyICovCi0jZGVmaW5lIFhNX0lNU0sJCQkweDAwNDQJLyogMTYgYml0IHIvdwlJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBYTV9JU1JDCQkJMHgwMDQ4CS8qIDE2IGJpdCByL28JSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBYTV9IV19DRkcJCTB4MDA0YwkvKiAxNiBiaXQgci93CUhhcmR3YXJlIENvbmZpZyBSZWdpc3RlciAqLwotCS8qIDB4MDA1MCAtIDB4MDA1ZToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgWE1fVFhfTE9fV00JCTB4MDA2MAkvKiAxNiBiaXQgci93CVR4IEZJRk8gTG93IFdhdGVyIE1hcmsgKi8KLSNkZWZpbmUgWE1fVFhfSElfV00JCTB4MDA2MgkvKiAxNiBiaXQgci93CVR4IEZJRk8gSGlnaCBXYXRlciBNYXJrICovCi0jZGVmaW5lIFhNX1RYX1RIUgkJMHgwMDY0CS8qIDE2IGJpdCByL3cJVHggUmVxdWVzdCBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgWE1fSFRfVEhSCQkweDAwNjYJLyogMTYgYml0IHIvdwlIb3N0IFJlcXVlc3QgVGhyZXNob2xkICovCi0jZGVmaW5lIFhNX1BBVVNFX0RBCQkweDAwNjgJLyogTkEgcmVnIHIvdwlQYXVzZSBEZXN0aW5hdGlvbiBBZGRyZXNzICovCi0JLyogMHgwMDZlOiAJCXJlc2VydmVkICovCi0jZGVmaW5lIFhNX0NUTF9QQVJBCQkweDAwNzAJLyogMzIgYml0IHIvdwlDb250cm9sIFBhcmFtZXRlciBSZWdpc3RlciAqLwotI2RlZmluZSBYTV9NQUNfT1BDT0RFCTB4MDA3NAkvKiAxNiBiaXQgci93CU9wY29kZSBmb3IgTUFDIGNvbnRyb2wgZnJhbWVzICovCi0jZGVmaW5lIFhNX01BQ19QVElNRQkweDAwNzYJLyogMTYgYml0IHIvdwlQYXVzZSB0aW1lIGZvciBNQUMgY3RybCBmcmFtZXMqLwotI2RlZmluZSBYTV9UWF9TVEFUCQkweDAwNzgJLyogMzIgYml0IHIvbwlUeCBTdGF0dXMgTElGTyBSZWdpc3RlciAqLwotCi0JLyogMHgwMDgwIC0gMHgwMGZjOgkxNiBOQSByZWcgci93CUV4YWN0IE1hdGNoIEFkZHJlc3MgUmVnaXN0ZXJzICovCi0JLyogCQkJCXVzZSB0aGUgWE1fRVhNKCkgbWFjcm8gdG8gYWRkcmVzcyAqLwotI2RlZmluZSBYTV9FWE1fU1RBUlQJMHgwMDgwCS8qIHIvdwlTdGFydCBBZGRyZXNzIG9mIHRoZSBFWE0gUmVncyAqLwotCi0JLyoKLQkgKiBYTV9FWE0oUmVnKQotCSAqCi0JICogcmV0dXJucyB0aGUgWE1BQyBhZGRyZXNzIG9mZnNldCBvZiBzcGVjaWZpZWQgRXhhY3QgTWF0Y2ggQWRkciBSZWcKLQkgKgotCSAqIHBhcmE6CVJlZwlFWE0gcmVnaXN0ZXIgdG8gYWRkcgkoMCAuLiAxNSkKLQkgKgotCSAqIHVzYWdlOglYTV9JTkFERFIoSW9DLCBNQUNfMSwgWE1fRVhNKGkpLCAmdmFsW2ldKTsKLQkgKi8KLSNkZWZpbmUgWE1fRVhNKFJlZykJKFhNX0VYTV9TVEFSVCArICgoUmVnKSA8PCAzKSkKLQotI2RlZmluZSBYTV9TUkNfQ0hLCQkweDAxMDAJLyogTkEgcmVnIHIvdwlTb3VyY2UgQ2hlY2sgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZSBYTV9TQQkJCTB4MDEwOAkvKiBOQSByZWcgci93CVN0YXRpb24gQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZSBYTV9IU00JCQkweDAxMTAJLyogNjQgYml0IHIvdwlIYXNoIE1hdGNoIEFkZHJlc3MgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFhNX1JYX0xPX1dNCQkweDAxMTgJLyogMTYgYml0IHIvdwlSZWNlaXZlIExvdyBXYXRlciBNYXJrICovCi0jZGVmaW5lIFhNX1JYX0hJX1dNCQkweDAxMWEJLyogMTYgYml0IHIvdwlSZWNlaXZlIEhpZ2ggV2F0ZXIgTWFyayAqLwotI2RlZmluZSBYTV9SWF9USFIJCTB4MDExYwkvKiAzMiBiaXQgci93CVJlY2VpdmUgUmVxdWVzdCBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgWE1fREVWX0lECQkweDAxMjAJLyogMzIgYml0IHIvbwlEZXZpY2UgSUQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fTU9ERQkJCTB4MDEyNAkvKiAzMiBiaXQgci93CU1vZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fTFNBCQkJMHgwMTI4CS8qIE5BIHJlZyByL28JTGFzdCBTb3VyY2UgUmVnaXN0ZXIgKi8KLQkvKiAweDAxMmU6CQlyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9UU19SRUFECQkweDAxMzAJLyogMzIgYml0IHIvbwlUaW1lIFN0YW1wIFJlYWQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fVFNfTE9BRAkJMHgwMTM0CS8qIDMyIGJpdCByL28JVGltZSBTdGFtcCBMb2FkIFZhbHVlICovCi0JLyogMHgwMTM4IC0gMHgwMWZlOglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9TVEFUX0NNRAkweDAyMDAJLyogMTYgYml0IHIvdwlTdGF0aXN0aWNzIENvbW1hbmQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fUlhfQ05UX0VWCTB4MDIwNAkvKiAzMiBiaXQgci9vCVJ4IENvdW50ZXIgRXZlbnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fVFhfQ05UX0VWCTB4MDIwOAkvKiAzMiBiaXQgci9vCVR4IENvdW50ZXIgRXZlbnQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fUlhfRVZfTVNLCTB4MDIwYwkvKiAzMiBiaXQgci93CVJ4IENvdW50ZXIgRXZlbnQgTWFzayAqLwotI2RlZmluZSBYTV9UWF9FVl9NU0sJMHgwMjEwCS8qIDMyIGJpdCByL3cJVHggQ291bnRlciBFdmVudCBNYXNrICovCi0JLyogMHgwMjA0IC0gMHgwMjdlOglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9UWEZfT0sJCTB4MDI4MAkvKiAzMiBiaXQgci9vCUZyYW1lcyBUcmFuc21pdHRlZCBPSyBDb251dGVyICovCi0jZGVmaW5lIFhNX1RYT19PS19ISQkweDAyODQJLyogMzIgYml0IHIvbwlPY3RldHMgVHJhbnNtaXR0ZWQgT0sgSGlnaCBDbnQqLwotI2RlZmluZSBYTV9UWE9fT0tfTE8JMHgwMjg4CS8qIDMyIGJpdCByL28JT2N0ZXRzIFRyYW5zbWl0dGVkIE9LIExvdyBDbnQgKi8KLSNkZWZpbmUgWE1fVFhGX0JDX09LCTB4MDI4YwkvKiAzMiBiaXQgci9vCUJyb2FkY2FzdCBGcmFtZXMgWG1pdHRlZCBPSyAqLwotI2RlZmluZSBYTV9UWEZfTUNfT0sJMHgwMjkwCS8qIDMyIGJpdCByL28JTXVsdGljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCi0jZGVmaW5lIFhNX1RYRl9VQ19PSwkweDAyOTQJLyogMzIgYml0IHIvbwlVbmljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCi0jZGVmaW5lIFhNX1RYRl9MT05HCQkweDAyOTgJLyogMzIgYml0IHIvbwlUeCBMb25nIEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fVFhFX0JVUlNUCTB4MDI5YwkvKiAzMiBiaXQgci9vCVR4IEJ1cnN0IEV2ZW50IENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fVFhGX01QQVVTRQkweDAyYTAJLyogMzIgYml0IHIvbwlUeCBQYXVzZSBNQUMgQ3RybCBGcmFtZSBDbnQgKi8KLSNkZWZpbmUgWE1fVFhGX01DVFJMCTB4MDJhNAkvKiAzMiBiaXQgci9vCVR4IE1BQyBDdHJsIEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fVFhGX1NOR19DT0wJMHgwMmE4CS8qIDMyIGJpdCByL28JVHggU2luZ2xlIENvbGxpc2lvbiBDb3VudGVyICovCi0jZGVmaW5lIFhNX1RYRl9NVUxfQ09MCTB4MDJhYwkvKiAzMiBiaXQgci9vCVR4IE11bHRpcGxlIENvbGxpc2lvbiBDb3VudGVyICovCi0jZGVmaW5lIFhNX1RYRl9BQk9fQ09MCTB4MDJiMAkvKiAzMiBiaXQgci9vCVR4IGFib3J0ZWQgZHVlIHRvIEV4Y2VzLiBDb2wuICovCi0jZGVmaW5lIFhNX1RYRl9MQVRfQ09MCTB4MDJiNAkvKiAzMiBiaXQgci9vCVR4IExhdGUgQ29sbGlzaW9uIENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fVFhGX0RFRgkJMHgwMmI4CS8qIDMyIGJpdCByL28JVHggRGVmZXJyZWQgRnJhbWUgQ291bnRlciAqLwotI2RlZmluZSBYTV9UWEZfRVhfREVGCTB4MDJiYwkvKiAzMiBiaXQgci9vCVR4IEV4Y2Vzc2l2ZSBEZWZlcmFsbCBDb3VudGVyICovCi0jZGVmaW5lIFhNX1RYRV9GSUZPX1VSCTB4MDJjMAkvKiAzMiBiaXQgci9vCVR4IEZJRk8gVW5kZXJydW4gRXZlbnQgQ250ICovCi0jZGVmaW5lIFhNX1RYRV9DU19FUlIJMHgwMmM0CS8qIDMyIGJpdCByL28JVHggQ2FycmllciBTZW5zZSBFcnJvciBDbnQgKi8KLSNkZWZpbmUgWE1fVFhQX1VUSUwJCTB4MDJjOAkvKiAzMiBiaXQgci9vCVR4IFV0aWxpemF0aW9uIGluICUgKi8KLQkvKiAweDAyY2MgLSAweDAyY2U6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1RYRl82NEIJCTB4MDJkMAkvKiAzMiBiaXQgci9vCTY0IEJ5dGUgVHggRnJhbWUgQ291bnRlciAqLwotI2RlZmluZSBYTV9UWEZfMTI3QgkJMHgwMmQ0CS8qIDMyIGJpdCByL28JNjUtMTI3IEJ5dGUgVHggRnJhbWUgQ291bnRlciAqLwotI2RlZmluZSBYTV9UWEZfMjU1QgkJMHgwMmQ4CS8qIDMyIGJpdCByL28JMTI4LTI1NSBCeXRlIFR4IEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fVFhGXzUxMUIJCTB4MDJkYwkvKiAzMiBiaXQgci9vCTI1Ni01MTEgQnl0ZSBUeCBGcmFtZSBDb3VudGVyICovCi0jZGVmaW5lIFhNX1RYRl8xMDIzQgkweDAyZTAJLyogMzIgYml0IHIvbwk1MTItMTAyMyBCeXRlIFR4IEZyYW1lIENvdW50ZXIqLwotI2RlZmluZSBYTV9UWEZfTUFYX1NaCTB4MDJlNAkvKiAzMiBiaXQgci9vCTEwMjQtTWF4U2l6ZSBCeXRlIFR4IEZyYW1lIENudCovCi0JLyogMHgwMmU4IC0gMHgwMmZlOglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9SWEZfT0sJCTB4MDMwMAkvKiAzMiBiaXQgci9vCUZyYW1lcyBSZWNlaXZlZCBPSyAqLwotI2RlZmluZSBYTV9SWE9fT0tfSEkJMHgwMzA0CS8qIDMyIGJpdCByL28JT2N0ZXRzIFJlY2VpdmVkIE9LIEhpZ2ggQ250ICovCi0jZGVmaW5lIFhNX1JYT19PS19MTwkweDAzMDgJLyogMzIgYml0IHIvbwlPY3RldHMgUmVjZWl2ZWQgT0sgTG93IENvdW50ZXIqLwotI2RlZmluZSBYTV9SWEZfQkNfT0sJMHgwMzBjCS8qIDMyIGJpdCByL28JQnJvYWRjYXN0IEZyYW1lcyBSZWNlaXZlZCBPSyAqLwotI2RlZmluZSBYTV9SWEZfTUNfT0sJMHgwMzEwCS8qIDMyIGJpdCByL28JTXVsdGljYXN0IEZyYW1lcyBSZWNlaXZlZCBPSyAqLwotI2RlZmluZSBYTV9SWEZfVUNfT0sJMHgwMzE0CS8qIDMyIGJpdCByL28JVW5pY2FzdCBGcmFtZXMgUmVjZWl2ZWQgT0sgKi8KLSNkZWZpbmUgWE1fUlhGX01QQVVTRQkweDAzMTgJLyogMzIgYml0IHIvbwlSeCBQYXVzZSBNQUMgQ3RybCBGcmFtZSBDbnQgKi8KLSNkZWZpbmUgWE1fUlhGX01DVFJMCTB4MDMxYwkvKiAzMiBiaXQgci9vCVJ4IE1BQyBDdHJsIEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fUlhGX0lOVl9NUAkweDAzMjAJLyogMzIgYml0IHIvbwlSeCBpbnZhbGlkIFBhdXNlIEZyYW1lIENudCAqLwotI2RlZmluZSBYTV9SWEZfSU5WX01PQwkweDAzMjQJLyogMzIgYml0IHIvbwlSeCBGcmFtZXMgd2l0aCBpbnYuIE1BQyBPcGNvZGUqLwotI2RlZmluZSBYTV9SWEVfQlVSU1QJMHgwMzI4CS8qIDMyIGJpdCByL28JUnggQnVyc3QgRXZlbnQgQ291bnRlciAqLwotI2RlZmluZSBYTV9SWEVfRk1JU1MJMHgwMzJjCS8qIDMyIGJpdCByL28JUnggTWlzc2VkIEZyYW1lcyBFdmVudCBDbnQgKi8KLSNkZWZpbmUgWE1fUlhGX0ZSQV9FUlIJMHgwMzMwCS8qIDMyIGJpdCByL28JUnggRnJhbWluZyBFcnJvciBDb3VudGVyICovCi0jZGVmaW5lIFhNX1JYRV9GSUZPX09WCTB4MDMzNAkvKiAzMiBiaXQgci9vCVJ4IEZJRk8gb3ZlcmZsb3cgRXZlbnQgQ250ICovCi0jZGVmaW5lIFhNX1JYRl9KQUJfUEtUCTB4MDMzOAkvKiAzMiBiaXQgci9vCVJ4IEphYmJlciBQYWNrZXQgRnJhbWUgQ250ICovCi0jZGVmaW5lIFhNX1JYRV9DQVJfRVJSCTB4MDMzYwkvKiAzMiBiaXQgci9vCVJ4IENhcnJpZXIgRXZlbnQgRXJyb3IgQ250ICovCi0jZGVmaW5lIFhNX1JYRl9MRU5fRVJSCTB4MDM0MAkvKiAzMiBiaXQgci9vCVJ4IGluIFJhbmdlIExlbmd0aCBFcnJvciAqLwotI2RlZmluZSBYTV9SWEVfU1lNX0VSUgkweDAzNDQJLyogMzIgYml0IHIvbwlSeCBTeW1ib2wgRXJyb3IgQ291bnRlciAqLwotI2RlZmluZSBYTV9SWEVfU0hUX0VSUgkweDAzNDgJLyogMzIgYml0IHIvbwlSeCBTaG9ydCBFdmVudCBFcnJvciBDbnQgKi8KLSNkZWZpbmUgWE1fUlhFX1JVTlQJCTB4MDM0YwkvKiAzMiBiaXQgci9vCVJ4IFJ1bnQgRXZlbnQgQ291bnRlciAqLwotI2RlZmluZSBYTV9SWEZfTE5HX0VSUgkweDAzNTAJLyogMzIgYml0IHIvbwlSeCBGcmFtZSB0b28gTG9uZyBFcnJvciBDbnQgKi8KLSNkZWZpbmUgWE1fUlhGX0ZDU19FUlIJMHgwMzU0CS8qIDMyIGJpdCByL28JUnggRnJhbWUgQ2hlY2sgU2VxLiBFcnJvciBDbnQgKi8KLQkvKiAweDAzNTggLSAweDAzNWE6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1JYRl9DRVhfRVJSCTB4MDM1YwkvKiAzMiBiaXQgci9vCVJ4IENhcnJpZXIgRXh0IEVycm9yIEZyYW1lIENudCovCi0jZGVmaW5lIFhNX1JYUF9VVElMCQkweDAzNjAJLyogMzIgYml0IHIvbwlSeCBVdGlsaXphdGlvbiBpbiAlICovCi0JLyogMHgwMzY0IC0gMHgwMzY2OglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9SWEZfNjRCCQkweDAzNjgJLyogMzIgYml0IHIvbwk2NCBCeXRlIFJ4IEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fUlhGXzEyN0IJCTB4MDM2YwkvKiAzMiBiaXQgci9vCTY1LTEyNyBCeXRlIFJ4IEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgWE1fUlhGXzI1NUIJCTB4MDM3MAkvKiAzMiBiaXQgci9vCTEyOC0yNTUgQnl0ZSBSeCBGcmFtZSBDb3VudGVyICovCi0jZGVmaW5lIFhNX1JYRl81MTFCCQkweDAzNzQJLyogMzIgYml0IHIvbwkyNTYtNTExIEJ5dGUgUnggRnJhbWUgQ291bnRlciAqLwotI2RlZmluZSBYTV9SWEZfMTAyM0IJMHgwMzc4CS8qIDMyIGJpdCByL28JNTEyLTEwMjMgQnl0ZSBSeCBGcmFtZSBDb3VudGVyKi8KLSNkZWZpbmUgWE1fUlhGX01BWF9TWgkweDAzN2MJLyogMzIgYml0IHIvbwkxMDI0LU1heFNpemUgQnl0ZSBSeCBGcmFtZSBDbnQqLwotCS8qIDB4MDJlOCAtIDB4MDJmZToJcmVzZXJ2ZWQgKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIFhNQUMgQml0IERlZmluaXRpb25zCi0gKgotICogSWYgdGhlIGJpdCBhY2Nlc3MgYmVoYXZpb3VyIGRpZmZlcnMgZnJvbSB0aGUgcmVnaXN0ZXIgYWNjZXNzIGJlaGF2aW91cgotICogKHIvdywgci9vKSB0aGlzIGlzIGRvY3VtZW50ZWQgYWZ0ZXIgdGhlIGJpdCBudW1iZXIuCi0gKiBUaGUgZm9sbG93aW5nIGJpdCBhY2Nlc3MgYmVoYXZpb3VycyBhcmUgdXNlZDoKLSAqCShzYykJc2VsZiBjbGVhcmluZwotICoJKHJvKQlyZWFkIG9ubHkKLSAqLwotCi0vKglYTV9NTVVfQ01ECTE2IGJpdCByL3cJTU1VIENvbW1hbmQgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJLyogQml0IDE1Li4xMzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgWE1fTU1VX1BIWV9SRFkJKDE8PDEyKQkvKiBCaXQgMTI6CVBIWSBSZWFkIFJlYWR5ICovCi0jZGVmaW5lIFhNX01NVV9QSFlfQlVTWQkoMTw8MTEpCS8qIEJpdCAxMToJUEhZIEJ1c3kgKi8KLSNkZWZpbmUgWE1fTU1VX0lHTl9QRgkoMTw8MTApCS8qIEJpdCAxMDoJSWdub3JlIFBhdXNlIEZyYW1lICovCi0jZGVmaW5lIFhNX01NVV9NQUNfTEIJKDE8PDkpCS8qIEJpdCAgOToJRW5hYmxlIE1BQyBMb29wYmFjayAqLwotCQkJCQkJCQkvKiBCaXQgIDg6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX01NVV9GUkNfQ09MCSgxPDw3KQkvKiBCaXQgIDc6CUZvcmNlIENvbGxpc2lvbiAqLwotI2RlZmluZSBYTV9NTVVfU0lNX0NPTAkoMTw8NikJLyogQml0ICA2OglTaW11bGF0ZSBDb2xsaXNpb24gKi8KLSNkZWZpbmUgWE1fTU1VX05PX1BSRQkoMTw8NSkJLyogQml0ICA1OglObyBNRElPIFByZWFtYmxlICovCi0jZGVmaW5lIFhNX01NVV9HTUlJX0ZECSgxPDw0KQkvKiBCaXQgIDQ6CUdNSUkgdXNlcyBGdWxsIER1cGxleCAqLwotI2RlZmluZSBYTV9NTVVfUkFUX0NUUkwJKDE8PDMpCS8qIEJpdCAgMzoJRW5hYmxlIFJhdGUgQ29udHJvbCAqLwotI2RlZmluZSBYTV9NTVVfR01JSV9MT09QICgxPDwyKQkvKiBCaXQgIDI6CVBIWSBpcyBpbiBMb29wYmFjayBNb2RlICovCi0jZGVmaW5lIFhNX01NVV9FTkFfUlgJKDE8PDEpCS8qIEJpdCAgMToJRW5hYmxlIFJlY2VpdmVyICovCi0jZGVmaW5lIFhNX01NVV9FTkFfVFgJKDE8PDApCS8qIEJpdCAgMDoJRW5hYmxlIFRyYW5zbWl0dGVyICovCi0KLQotLyoJWE1fVFhfQ01ECTE2IGJpdCByL3cJVHJhbnNtaXQgQ29tbWFuZCBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgMTUuLjc6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1RYX0JLMkJLCQkoMTw8NikJLyogQml0ICA2OglJZ25vciBDYXJyaWVyIFNlbnNlIChUeCBCazJCaykqLwotI2RlZmluZSBYTV9UWF9FTkNfQllQCSgxPDw1KQkvKiBCaXQgIDU6CVNldCBFbmNvZGVyIGluIEJ5cGFzcyBNb2RlICovCi0jZGVmaW5lIFhNX1RYX1NBTV9MSU5FCSgxPDw0KQkvKiBCaXQgIDQ6IChzYykJU3RhcnQgdXRpbGl6YXRpb24gY2FsY3VsYXRpb24gKi8KLSNkZWZpbmUgWE1fVFhfTk9fR0lHX01ECSgxPDwzKQkvKiBCaXQgIDM6CURpc2FibGUgQ2FycmllciBFeHRlbnNpb24gKi8KLSNkZWZpbmUgWE1fVFhfTk9fUFJFCSgxPDwyKQkvKiBCaXQgIDI6CURpc2FibGUgUHJlYW1ibGUgR2VuZXJhdGlvbiAqLwotI2RlZmluZSBYTV9UWF9OT19DUkMJKDE8PDEpCS8qIEJpdCAgMToJRGlzYWJsZSBDUkMgR2VuZXJhdGlvbiAqLwotI2RlZmluZSBYTV9UWF9BVVRPX1BBRAkoMTw8MCkJLyogQml0ICAwOglFbmFibGUgQXV0b21hdGljIFBhZGRpbmcgKi8KLQotCi0vKglYTV9UWF9SVF9MSU0JMTYgYml0IHIvdwlUcmFuc21pdCBSZXRyeSBMaW1pdCBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgMTUuLjU6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1JUX0xJTV9NU0sJMHgxZgkvKiBCaXQgIDQuLjA6CVR4IFJldHJ5IExpbWl0ICovCi0KLQotLyoJWE1fVFhfU1RJTUUJMTYgYml0IHIvdwlUcmFuc21pdCBTbG90dGltZSBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgMTUuLjc6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1NUSU1FX01TSwkweDdmCS8qIEJpdCAgNi4uMDoJVHggU2xvdHRpbWUgYml0cyAqLwotCi0KLS8qCVhNX1RYX0lQRwkxNiBiaXQgci93CVRyYW5zbWl0IEludGVyIFBhY2tldCBHYXAgKi8KLQkJCQkJCQkJLyogQml0IDE1Li44OglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9JUEdfTVNLCQkweGZmCS8qIEJpdCAgNy4uMDoJSVBHIHZhbHVlIGJpdHMgKi8KLQotCi0vKglYTV9SWF9DTUQJMTYgYml0IHIvdwlSZWNlaXZlIENvbW1hbmQgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJLyogQml0IDE1Li45OglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9SWF9MRU5FUlJfT0sgKDE8PDgpCS8qIEJpdCAgOAlkb24ndCBzZXQgUnggRXJyIGJpdCBmb3IgKi8KLQkJCQkJCQkJLyoJCWlucmFuZ2UgZXJyb3IgcGFja2V0cyAqLwotI2RlZmluZSBYTV9SWF9CSUdfUEtfT0sJKDE8PDcpCS8qIEJpdCAgNwlkb24ndCBzZXQgUnggRXJyIGJpdCBmb3IgKi8KLQkJCQkJCQkJLyoJCWp1bWJvIHBhY2tldHMgKi8KLSNkZWZpbmUgWE1fUlhfSVBHX0NBUAkoMTw8NikJLyogQml0ICA2CXJlcGwuIHR5cGUgZmllbGQgd2l0aCBJUEcgKi8KLSNkZWZpbmUgWE1fUlhfVFBfTUQJCSgxPDw1KQkvKiBCaXQgIDU6CUVuYWJsZSB0cmFuc3BhcmVudCBNb2RlICovCi0jZGVmaW5lIFhNX1JYX1NUUklQX0ZDUwkoMTw8NCkJLyogQml0ICA0OglFbmFibGUgRkNTIFN0cmlwcGluZyAqLwotI2RlZmluZSBYTV9SWF9TRUxGX1JYCSgxPDwzKQkvKiBCaXQgIDM6IAlFbmFibGUgUnggb2Ygb3duIHBhY2tldHMgKi8KLSNkZWZpbmUgWE1fUlhfU0FNX0xJTkUJKDE8PDIpCS8qIEJpdCAgMjogKHNjKQlTdGFydCB1dGlsaXphdGlvbiBjYWxjdWxhdGlvbiAqLwotI2RlZmluZSBYTV9SWF9TVFJJUF9QQUQJKDE8PDEpCS8qIEJpdCAgMToJU3RyaXAgcGFkIGJ5dGVzIG9mIFJ4IGZyYW1lcyAqLwotI2RlZmluZSBYTV9SWF9ESVNfQ0VYVAkoMTw8MCkJLyogQml0ICAwOglEaXNhYmxlIGNhcnJpZXIgZXh0LiBjaGVjayAqLwotCi0KLS8qCVhNX1BIWV9BRERSCTE2IGJpdCByL3cJUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQkJCQkJCQkJLyogQml0IDE1Li41OglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9QSFlfQUREUl9TWgkweDFmCS8qIEJpdCAgNC4uMDoJUEhZIEFkZHJlc3MgYml0cyAqLwotCi0KLS8qCVhNX0dQX1BPUlQJMzIgYml0IHIvdwlHZW5lcmFsIFB1cnBvc2UgUG9ydCBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgMzEuLjc6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX0dQX0FOSVAJCSgxTDw8NikJLyogQml0ICA2OiAocm8pCUF1dG8tTmVnLiBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSBYTV9HUF9GUkNfSU5UCSgxTDw8NSkJLyogQml0ICA1OiAoc2MpCUZvcmNlIEludGVycnVwdCAqLwotCQkJCQkJCQkvKiBCaXQgIDQ6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX0dQX1JFU19NQUMJKDFMPDwzKQkvKiBCaXQgIDM6IChzYykJUmVzZXQgTUFDIGFuZCBGSUZPcyAqLwotI2RlZmluZSBYTV9HUF9SRVNfU1RBVAkoMUw8PDIpCS8qIEJpdCAgMjogKHNjKQlSZXNldCB0aGUgc3RhdGlzdGljcyBtb2R1bGUgKi8KLQkJCQkJCQkJLyogQml0ICAxOglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9HUF9JTlBfQVNTCSgxTDw8MCkJLyogQml0ICAwOiAocm8pIEdQIElucHV0IFBpbiBhc3NlcnRlZCAqLwotCi0KLS8qCVhNX0lNU0sJCTE2IGJpdCByL3cJSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLS8qCVhNX0lTUkMJCTE2IGJpdCByL28JSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwotCQkJCQkJCQkvKiBCaXQgMTU6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX0lTX0xOS19BRQkoMTw8MTQpIC8qIEJpdCAxNDoJTGluayBBc3luY2hyb25vdXMgRXZlbnQgKi8KLSNkZWZpbmUgWE1fSVNfVFhfQUJPUlQJKDE8PDEzKSAvKiBCaXQgMTM6CVRyYW5zbWl0IEFib3J0LCBsYXRlIENvbC4gZXRjICovCi0jZGVmaW5lIFhNX0lTX0ZSQ19JTlQJKDE8PDEyKSAvKiBCaXQgMTI6CUZvcmNlIElOVCBiaXQgc2V0IGluIEdQICovCi0jZGVmaW5lIFhNX0lTX0lOUF9BU1MJKDE8PDExKQkvKiBCaXQgMTE6CUlucHV0IEFzc2VydGVkLCBHUCBiaXQgMCBzZXQgKi8KLSNkZWZpbmUgWE1fSVNfTElQQV9SQwkoMTw8MTApCS8qIEJpdCAxMDoJTGluayBQYXJ0bmVyIHJlcXVlc3RzIGNvbmZpZyAqLwotI2RlZmluZSBYTV9JU19SWF9QQUdFCSgxPDw5KQkvKiBCaXQgIDk6CVBhZ2UgUmVjZWl2ZWQgKi8KLSNkZWZpbmUgWE1fSVNfVFhfUEFHRQkoMTw8OCkJLyogQml0ICA4OglOZXh0IFBhZ2UgTG9hZGVkIGZvciBUcmFuc21pdCAqLwotI2RlZmluZSBYTV9JU19BTkQJCSgxPDw3KQkvKiBCaXQgIDc6CUF1dG8tTmVnb3RpYXRpb24gRG9uZSAqLwotI2RlZmluZSBYTV9JU19UU0NfT1YJKDE8PDYpCS8qIEJpdCAgNjoJVGltZSBTdGFtcCBDb3VudGVyIE92ZXJmbG93ICovCi0jZGVmaW5lIFhNX0lTX1JYQ19PVgkoMTw8NSkJLyogQml0ICA1OglSeCBDb3VudGVyIEV2ZW50IE92ZXJmbG93ICovCi0jZGVmaW5lIFhNX0lTX1RYQ19PVgkoMTw8NCkJLyogQml0ICA0OglUeCBDb3VudGVyIEV2ZW50IE92ZXJmbG93ICovCi0jZGVmaW5lIFhNX0lTX1JYRl9PVgkoMTw8MykJLyogQml0ICAzOglSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgKi8KLSNkZWZpbmUgWE1fSVNfVFhGX1VSCSgxPDwyKQkvKiBCaXQgIDI6CVRyYW5zbWl0IEZJRk8gVW5kZXJydW4gKi8KLSNkZWZpbmUgWE1fSVNfVFhfQ09NUAkoMTw8MSkJLyogQml0ICAxOglGcmFtZSBUeCBDb21wbGV0ZSAqLwotI2RlZmluZSBYTV9JU19SWF9DT01QCSgxPDwwKQkvKiBCaXQgIDA6CUZyYW1lIFJ4IENvbXBsZXRlICovCi0KLSNkZWZpbmUgWE1fREVGX01TSwkofihYTV9JU19JTlBfQVNTIHwgWE1fSVNfTElQQV9SQyB8IFhNX0lTX1JYX1BBR0UgfFwKLQkJCVhNX0lTX0FORCB8IFhNX0lTX1JYQ19PViB8IFhNX0lTX1RYQ19PViB8IFhNX0lTX1RYRl9VUikpCi0KLQotLyoJWE1fSFdfQ0ZHCTE2IGJpdCByL3cJSGFyZHdhcmUgQ29uZmlnIFJlZ2lzdGVyICovCi0JCQkJCQkJCS8qIEJpdCAxNS4uIDQ6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX0hXX0dFTl9FT1AJKDE8PDMpCS8qIEJpdCAgMzoJZ2VuZXJhdGUgRW5kIG9mIFBhY2tldCBwdWxzZSAqLwotI2RlZmluZSBYTV9IV19DT000U0lHCSgxPDwyKQkvKiBCaXQgIDI6CXVzZSBDb21tYSBEZXRlY3QgZm9yIFNpZy4gRGV0LiovCi0JCQkJCQkJCS8qIEJpdCAgMToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgWE1fSFdfR01JSV9NRAkoMTw8MCkJLyogQml0ICAwOglHTUlJIEludGVyZmFjZSBzZWxlY3RlZCAqLwotCi0KLS8qCVhNX1RYX0xPX1dNCTE2IGJpdCByL3cJVHggRklGTyBMb3cgV2F0ZXIgTWFyayAqLwotLyoJWE1fVFhfSElfV00JMTYgYml0IHIvdwlUeCBGSUZPIEhpZ2ggV2F0ZXIgTWFyayAqLwotCQkJCQkJCQkvKiBCaXQgMTUuLjEwCXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1RYX1dNX01TSwkweDAxZmYJLyogQml0ICA5Li4gMAlUeCBGSUZPIFdhdGVybWFyayBiaXRzICovCi0KLS8qCVhNX1RYX1RIUgkxNiBiaXQgci93CVR4IFJlcXVlc3QgVGhyZXNob2xkICovCi0vKglYTV9IVF9USFIJMTYgYml0IHIvdwlIb3N0IFJlcXVlc3QgVGhyZXNob2xkICovCi0vKglYTV9SWF9USFIJMTYgYml0IHIvdwlSeCBSZXF1ZXN0IFRocmVzaG9sZCAqLwotCQkJCQkJCQkvKiBCaXQgMTUuLjExCXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1RIUl9NU0sJCTB4MDNmZgkvKiBCaXQgMTAuLiAwCVJ4L1R4IFJlcXVlc3QgVGhyZXNob2xkIGJpdHMgKi8KLQotCi0vKglYTV9UWF9TVEFUCTMyIGJpdCByL28JVHggU3RhdHVzIExJRk8gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fU1RfVkFMSUQJCSgxVUw8PDMxKQkvKiBCaXQgMzE6CVN0YXR1cyBWYWxpZCAqLwotI2RlZmluZSBYTV9TVF9CWVRFX0NOVAkoMHgzZmZmTDw8MTcpCS8qIEJpdCAzMC4uMTc6CVR4IGZyYW1lIExlbmd0aCAqLwotI2RlZmluZSBYTV9TVF9SRVRSWV9DTlQJKDB4MWZMPDwxMikJLyogQml0IDE2Li4xMjoJUmV0cnkgQ291bnQgKi8KLSNkZWZpbmUgWE1fU1RfRVhfQ09MCSgxTDw8MTEpCS8qIEJpdCAxMToJRXhjZXNzaXZlIENvbGxpc2lvbnMgKi8KLSNkZWZpbmUgWE1fU1RfRVhfREVGCSgxTDw8MTApCS8qIEJpdCAxMDoJRXhjZXNzaXZlIERlZmVycmFsICovCi0jZGVmaW5lIFhNX1NUX0JVUlNUCQkoMUw8PDkpCQkvKiBCaXQgIDk6CXAuIHhtaXR0ZWQgaW4gYnVyc3QgbWQqLwotI2RlZmluZSBYTV9TVF9ERUZFUgkJKDFMPDw4KQkJLyogQml0ICA4OglwYWNrZXQgd2FzIGRlZmVyZWQgKi8KLSNkZWZpbmUgWE1fU1RfQkMJCSgxTDw8NykJCS8qIEJpdCAgNzoJQnJvYWRjYXN0IHBhY2tldCAqLwotI2RlZmluZSBYTV9TVF9NQwkJKDFMPDw2KQkJLyogQml0ICA2OglNdWx0aWNhc3QgcGFja2V0ICovCi0jZGVmaW5lIFhNX1NUX1VDCQkoMUw8PDUpCQkvKiBCaXQgIDU6CVVuaWNhc3QgcGFja2V0ICovCi0jZGVmaW5lIFhNX1NUX1RYX1VSCQkoMUw8PDQpCQkvKiBCaXQgIDQ6CUZJRk8gVW5kZXJydW4gb2NjdXJlZCAqLwotI2RlZmluZSBYTV9TVF9DU19FUlIJKDFMPDwzKQkJLyogQml0ICAzOglDYXJyaWVyIFNlbnNlIEVycm9yICovCi0jZGVmaW5lIFhNX1NUX0xBVF9DT0wJKDFMPDwyKQkJLyogQml0ICAyOglMYXRlIENvbGxpc2lvbiBFcnJvciAqLwotI2RlZmluZSBYTV9TVF9NVUxfQ09MCSgxTDw8MSkJCS8qIEJpdCAgMToJTXVsdGlwbGUgQ29sbGlzaW9ucyAqLwotI2RlZmluZSBYTV9TVF9TR05fQ09MCSgxTDw8MCkJCS8qIEJpdCAgMDoJU2luZ2xlIENvbGxpc2lvbiAqLwotCi0vKglYTV9SWF9MT19XTQkxNiBiaXQgci93CVJlY2VpdmUgTG93IFdhdGVyIE1hcmsgKi8KLS8qCVhNX1JYX0hJX1dNCTE2IGJpdCByL3cJUmVjZWl2ZSBIaWdoIFdhdGVyIE1hcmsgKi8KLQkJCQkJCQkJCS8qIEJpdCAxNS4uMTE6CXJlc2VydmVkICovCi0jZGVmaW5lIFhNX1JYX1dNX01TSwkweDAzZmYJCS8qIEJpdCAxMS4uIDA6CVJ4IEZJRk8gV2F0ZXJtYXJrIGJpdHMgKi8KLQotCi0vKglYTV9ERVZfSUQJMzIgYml0IHIvbwlEZXZpY2UgSUQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgWE1fREVWX09VSQkoMHgwMGZmZmZmZlVMPDw4KQkvKiBCaXQgMzEuLjg6CURldmljZSBPVUkgKi8KLSNkZWZpbmUgWE1fREVWX1JFVgkoMHgwN0wgPDwgNSkJCS8qIEJpdCAgNy4uNToJQ2hpcCBSZXYgTnVtICovCi0KLQotLyoJWE1fTU9ERQkJMzIgYml0IHIvdwlNb2RlIFJlZ2lzdGVyICovCi0JCQkJCQkJCQkvKiBCaXQgMzEuLjI3OglyZXNlcnZlZCAqLwotI2RlZmluZSBYTV9NRF9FTkFfUkVKCSgxTDw8MjYpCS8qIEJpdCAyNjoJRW5hYmxlIEZyYW1lIFJlamVjdCAqLwotI2RlZmluZSBYTV9NRF9TUE9FX0UJKDFMPDwyNSkJLyogQml0IDI1OglTZW5kIFBhdXNlIG9uIEVkZ2UgKi8KLQkJCQkJCQkJCS8qIAkJZXh0ZXJuIGdlbmVyYXRlZCAqLwotI2RlZmluZSBYTV9NRF9UWF9SRVAJKDFMPDwyNCkJLyogQml0IDI0OglUcmFuc21pdCBSZXBlYXRlciBNb2RlICovCi0jZGVmaW5lIFhNX01EX1NQT0ZGX0kJKDFMPDwyMykJLyogQml0IDIzOglTZW5kIFBhdXNlIG9uIEZJRk8gZnVsbCAqLwotCQkJCQkJCQkJLyoJCWludGVybiBnZW5lcmF0ZWQgKi8KLSNkZWZpbmUgWE1fTURfTEVfU1RXCSgxTDw8MjIpCS8qIEJpdCAyMjoJUnggU3RhdCBXb3JkIGluIExpdHRsZSBFbmRpYW4gKi8KLSNkZWZpbmUgWE1fTURfVFhfQ09OVAkoMUw8PDIxKQkvKiBCaXQgMjE6CVNlbmQgQ29udGludW91cyAqLwotI2RlZmluZSBYTV9NRF9UWF9QQVVTRQkoMUw8PDIwKQkvKiBCaXQgMjA6IChzYykJU2VuZCBQYXVzZSBGcmFtZSAqLwotI2RlZmluZSBYTV9NRF9BVFMJCSgxTDw8MTkpCS8qIEJpdCAxOToJQXBwZW5kIFRpbWUgU3RhbXAgKi8KLSNkZWZpbmUgWE1fTURfU1BPTF9JCSgxTDw8MTgpCS8qIEJpdCAxODoJU2VuZCBQYXVzZSBvbiBMb3cgKi8KLQkJCQkJCQkJCS8qCQlpbnRlcm4gZ2VuZXJhdGVkICovCi0jZGVmaW5lIFhNX01EX1NQT0hfSQkoMUw8PDE3KQkvKiBCaXQgMTc6CVNlbmQgUGF1c2Ugb24gSGlnaCAqLwotCQkJCQkJCQkJLyoJCWludGVybiBnZW5lcmF0ZWQgKi8KLSNkZWZpbmUgWE1fTURfQ0FQCQkoMUw8PDE2KQkvKiBCaXQgMTY6CUNoZWNrIEFkZHJlc3MgUGFpciAqLwotI2RlZmluZSBYTV9NRF9FTkFfSEFTSAkoMUw8PDE1KQkvKiBCaXQgMTU6CUVuYWJsZSBIYXNoaW5nICovCi0jZGVmaW5lIFhNX01EX0NTQQkJKDFMPDwxNCkJLyogQml0IDE0OglDaGVjayBTdGF0aW9uIEFkZHJlc3MgKi8KLSNkZWZpbmUgWE1fTURfQ0FBCQkoMUw8PDEzKQkvKiBCaXQgMTM6CUNoZWNrIEFkZHJlc3MgQXJyYXkgKi8KLSNkZWZpbmUgWE1fTURfUlhfTUNUUkwJKDFMPDwxMikJLyogQml0IDEyOglSeCBNQUMgQ29udHJvbCBGcmFtZSAqLwotI2RlZmluZSBYTV9NRF9SWF9SVU5UCSgxTDw8MTEpCS8qIEJpdCAxMToJUnggUnVudCBGcmFtZXMgKi8KLSNkZWZpbmUgWE1fTURfUlhfSVJMRQkoMUw8PDEwKQkvKiBCaXQgMTA6CVJ4IGluIFJhbmdlIExlbiBFcnIgRnJhbWUgKi8KLSNkZWZpbmUgWE1fTURfUlhfTE9ORwkoMUw8PDkpCQkvKiBCaXQgIDk6CVJ4IExvbmcgRnJhbWUgKi8KLSNkZWZpbmUgWE1fTURfUlhfQ1JDRQkoMUw8PDgpCQkvKiBCaXQgIDg6CVJ4IENSQyBFcnJvciBGcmFtZSAqLwotI2RlZmluZSBYTV9NRF9SWF9FUlIJKDFMPDw3KQkJLyogQml0ICA3OglSeCBFcnJvciBGcmFtZSAqLwotI2RlZmluZSBYTV9NRF9ESVNfVUMJKDFMPDw2KQkJLyogQml0ICA2OglEaXNhYmxlIFJ4IFVuaWNhc3QgKi8KLSNkZWZpbmUgWE1fTURfRElTX01DCSgxTDw8NSkJCS8qIEJpdCAgNToJRGlzYWJsZSBSeCBNdWx0aWNhc3QgKi8KLSNkZWZpbmUgWE1fTURfRElTX0JDCSgxTDw8NCkJCS8qIEJpdCAgNDoJRGlzYWJsZSBSeCBCcm9hZGNhc3QgKi8KLSNkZWZpbmUgWE1fTURfRU5BX1BST00JKDFMPDwzKQkJLyogQml0ICAzOglFbmFibGUgUHJvbWlzY3VvdXMgKi8KLSNkZWZpbmUgWE1fTURfRU5BX0JFCSgxTDw8MikJCS8qIEJpdCAgMjoJRW5hYmxlIEJpZyBFbmRpYW4gKi8KLSNkZWZpbmUgWE1fTURfRlRGCQkoMUw8PDEpCQkvKiBCaXQgIDE6IChzYykJRmx1c2ggVHggRklGTyAqLwotI2RlZmluZSBYTV9NRF9GUkYJCSgxTDw8MCkJCS8qIEJpdCAgMDogKHNjKQlGbHVzaCBSeCBGSUZPICovCi0KLSNkZWZpbmUgWE1fUEFVU0VfTU9ERQkoWE1fTURfU1BPRV9FIHwgWE1fTURfU1BPTF9JIHwgWE1fTURfU1BPSF9JKQotI2RlZmluZSBYTV9ERUZfTU9ERQkJKFhNX01EX1JYX1JVTlQgfCBYTV9NRF9SWF9JUkxFIHwgWE1fTURfUlhfTE9ORyB8XAotCQkJCVhNX01EX1JYX0NSQ0UgfCBYTV9NRF9SWF9FUlIgfCBYTV9NRF9DU0EgfCBYTV9NRF9DQUEpCi0KLS8qCVhNX1NUQVRfQ01ECTE2IGJpdCByL3cJU3RhdGlzdGljcyBDb21tYW5kIFJlZ2lzdGVyICovCi0JCQkJCQkJCS8qIEJpdCAxNi4uNjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgWE1fU0NfU05QX1JYQwkoMTw8NSkJLyogQml0ICA1OiAoc2MpCVNuYXAgUnggQ291bnRlcnMgKi8KLSNkZWZpbmUgWE1fU0NfU05QX1RYQwkoMTw8NCkJLyogQml0ICA0OiAoc2MpCVNuYXAgVHggQ291bnRlcnMgKi8KLSNkZWZpbmUgWE1fU0NfQ1BfUlhDCSgxPDwzKQkvKiBCaXQgIDM6IAlDb3B5IFJ4IENvdW50ZXJzIENvbnRpbnVvdXNseSAqLwotI2RlZmluZSBYTV9TQ19DUF9UWEMJKDE8PDIpCS8qIEJpdCAgMjoJQ29weSBUeCBDb3VudGVycyBDb250aW51b3VzbHkgKi8KLSNkZWZpbmUgWE1fU0NfQ0xSX1JYQwkoMTw8MSkJLyogQml0ICAxOiAoc2MpCUNsZWFyIFJ4IENvdW50ZXJzICovCi0jZGVmaW5lIFhNX1NDX0NMUl9UWEMJKDE8PDApCS8qIEJpdCAgMDogKHNjKSBDbGVhciBUeCBDb3VudGVycyAqLwotCi0KLS8qCVhNX1JYX0NOVF9FVgkzMiBiaXQgci9vCVJ4IENvdW50ZXIgRXZlbnQgUmVnaXN0ZXIgKi8KLS8qCVhNX1JYX0VWX01TSwkzMiBiaXQgci93CVJ4IENvdW50ZXIgRXZlbnQgTWFzayAqLwotI2RlZmluZSBYTVJfTUFYX1NaX09WCSgxVUw8PDMxKQkvKiBCaXQgMzE6CTEwMjQtTWF4U2l6ZSBSeCBDbnQgT3YqLwotI2RlZmluZSBYTVJfMTAyM0JfT1YJKDFMPDwzMCkJLyogQml0IDMwOgk1MTItMTAyM0J5dGUgUnggQ250IE92Ki8KLSNkZWZpbmUgWE1SXzUxMUJfT1YJCSgxTDw8MjkpCS8qIEJpdCAyOToJMjU2LTUxMSBCeXRlIFJ4IENudCBPdiovCi0jZGVmaW5lIFhNUl8yNTVCX09WCQkoMUw8PDI4KQkvKiBCaXQgMjg6CTEyOC0yNTUgQnl0ZSBSeCBDbnQgT3YqLwotI2RlZmluZSBYTVJfMTI3Ql9PVgkJKDFMPDwyNykJLyogQml0IDI3Ogk2NS0xMjcgQnl0ZSBSeCBDbnQgT3YgKi8KLSNkZWZpbmUgWE1SXzY0Ql9PVgkJKDFMPDwyNikJLyogQml0IDI2Ogk2NCBCeXRlIFJ4IENudCBPdiAqLwotI2RlZmluZSBYTVJfVVRJTF9PVgkJKDFMPDwyNSkJLyogQml0IDI1OglSeCBVdGlsIENudCBPdmVyZmxvdyAqLwotI2RlZmluZSBYTVJfVVRJTF9VUgkJKDFMPDwyNCkJLyogQml0IDI0OglSeCBVdGlsIENudCBVbmRlcnJ1biAqLwotI2RlZmluZSBYTVJfQ0VYX0VSUl9PVgkoMUw8PDIzKQkvKiBCaXQgMjM6CUNFWFQgRXJyIENudCBPdiAqLwotCQkJCQkJCQkJLyogQml0IDIyOglyZXNlcnZlZCAqLwotI2RlZmluZSBYTVJfRkNTX0VSUl9PVgkoMUw8PDIxKQkvKiBCaXQgMjE6CVJ4IEZDUyBFcnJvciBDbnQgT3YgKi8KLSNkZWZpbmUgWE1SX0xOR19FUlJfT1YJKDFMPDwyMCkJLyogQml0IDIwOglSeCB0b28gTG9uZyBFcnIgQ250IE92Ki8KLSNkZWZpbmUgWE1SX1JVTlRfT1YJCSgxTDw8MTkpCS8qIEJpdCAxOToJUnVudCBFdmVudCBDbnQgT3YgKi8KLSNkZWZpbmUgWE1SX1NIVF9FUlJfT1YJKDFMPDwxOCkJLyogQml0IDE4OglSeCBTaG9ydCBFdiBFcnIgQ250IE92Ki8KLSNkZWZpbmUgWE1SX1NZTV9FUlJfT1YJKDFMPDwxNykJLyogQml0IDE3OglSeCBTeW0gRXJyIENudCBPdiAqLwotCQkJCQkJCQkJLyogQml0IDE2OglyZXNlcnZlZCAqLwotI2RlZmluZSBYTVJfQ0FSX0VSUl9PVgkoMUw8PDE1KQkvKiBCaXQgMTU6CVJ4IENhcnIgRXYgRXJyIENudCBPdiAqLwotI2RlZmluZSBYTVJfSkFCX1BLVF9PVgkoMUw8PDE0KQkvKiBCaXQgMTQ6CVJ4IEphYmIgUGFja2V0IENudCBPdiAqLwotI2RlZmluZSBYTVJfRklGT19PVgkJKDFMPDwxMykJLyogQml0IDEzOglSeCBGSUZPIE92IEV2IENudCBPdiAqLwotI2RlZmluZSBYTVJfRlJBX0VSUl9PVgkoMUw8PDEyKQkvKiBCaXQgMTI6CVJ4IEZyYW1pbmcgRXJyIENudCBPdiAqLwotI2RlZmluZSBYTVJfRk1JU1NfT1YJKDFMPDwxMSkJLyogQml0IDExOglSeCBNaXNzZWQgRXYgQ250IE92ICovCi0jZGVmaW5lIFhNUl9CVVJTVAkJKDFMPDwxMCkJLyogQml0IDEwOglSeCBCdXJzdCBFdmVudCBDbnQgT3YgKi8KLSNkZWZpbmUgWE1SX0lOVl9NT0MJCSgxTDw8OSkJCS8qIEJpdCAgOToJUnggd2l0aCBpbnYuIE1BQyBPQyBPdiovCi0jZGVmaW5lIFhNUl9JTlZfTVAJCSgxTDw8OCkJCS8qIEJpdCAgODoJUnggaW52IFBhdXNlIEZyYW1lIE92ICovCi0jZGVmaW5lIFhNUl9NQ1RSTF9PVgkoMUw8PDcpCQkvKiBCaXQgIDc6CVJ4IE1BQyBDdHJsLUYgQ250IE92ICovCi0jZGVmaW5lIFhNUl9NUEFVU0VfT1YJKDFMPDw2KQkJLyogQml0ICA2OglSeCBQYXVzZSBNQUMgQ3RybC1GIE92Ki8KLSNkZWZpbmUgWE1SX1VDX09LX09WCSgxTDw8NSkJCS8qIEJpdCAgNToJUnggVW5pY2FzdCBGcmFtZSBDbnRPdiovCi0jZGVmaW5lIFhNUl9NQ19PS19PVgkoMUw8PDQpCQkvKiBCaXQgIDQ6CVJ4IE11bHRpY2FzdCBDbnQgT3YgKi8KLSNkZWZpbmUgWE1SX0JDX09LX09WCSgxTDw8MykJCS8qIEJpdCAgMzoJUnggQnJvYWRjYXN0IENudCBPdiAqLwotI2RlZmluZSBYTVJfT0tfTE9fT1YJKDFMPDwyKQkJLyogQml0ICAyOglPY3RldHMgUnggT0sgTG93IENudE92Ki8KLSNkZWZpbmUgWE1SX09LX0hJX09WCSgxTDw8MSkJCS8qIEJpdCAgMToJT2N0ZXRzIFJ4IE9LIEhpIENudCBPdiovCi0jZGVmaW5lIFhNUl9PS19PVgkJKDFMPDwwKQkJLyogQml0ICAwOglGcmFtZXMgUmVjZWl2ZWQgT2sgT3YgKi8KLQotI2RlZmluZSBYTVJfREVGX01TSwkJKFhNUl9PS19MT19PViB8IFhNUl9PS19ISV9PVikKLQotLyoJWE1fVFhfQ05UX0VWCTMyIGJpdCByL28JVHggQ291bnRlciBFdmVudCBSZWdpc3RlciAqLwotLyoJWE1fVFhfRVZfTVNLCTMyIGJpdCByL3cJVHggQ291bnRlciBFdmVudCBNYXNrICovCi0JCQkJCQkJCQkvKiBCaXQgMzEuLjI2OglyZXNlcnZlZCAqLwotI2RlZmluZSBYTVRfTUFYX1NaX09WCSgxTDw8MjUpCS8qIEJpdCAyNToJMTAyNC1NYXhTaXplIFR4IENudCBPdiovCi0jZGVmaW5lIFhNVF8xMDIzQl9PVgkoMUw8PDI0KQkvKiBCaXQgMjQ6CTUxMi0xMDIzQnl0ZSBUeCBDbnQgT3YqLwotI2RlZmluZSBYTVRfNTExQl9PVgkJKDFMPDwyMykJLyogQml0IDIzOgkyNTYtNTExIEJ5dGUgVHggQ250IE92Ki8KLSNkZWZpbmUgWE1UXzI1NUJfT1YJCSgxTDw8MjIpCS8qIEJpdCAyMjoJMTI4LTI1NSBCeXRlIFR4IENudCBPdiovCi0jZGVmaW5lIFhNVF8xMjdCX09WCQkoMUw8PDIxKQkvKiBCaXQgMjE6CTY1LTEyNyBCeXRlIFR4IENudCBPdiAqLwotI2RlZmluZSBYTVRfNjRCX09WCQkoMUw8PDIwKQkvKiBCaXQgMjA6CTY0IEJ5dGUgVHggQ250IE92ICovCi0jZGVmaW5lIFhNVF9VVElMX09WCQkoMUw8PDE5KQkvKiBCaXQgMTk6CVR4IFV0aWwgQ250IE92ZXJmbG93ICovCi0jZGVmaW5lIFhNVF9VVElMX1VSCQkoMUw8PDE4KQkvKiBCaXQgMTg6CVR4IFV0aWwgQ250IFVuZGVycnVuICovCi0jZGVmaW5lIFhNVF9DU19FUlJfT1YJKDFMPDwxNykJLyogQml0IDE3OglUeCBDYXJyIFNlbiBFcnIgQ250IE92Ki8KLSNkZWZpbmUgWE1UX0ZJRk9fVVJfT1YJKDFMPDwxNikJLyogQml0IDE2OglUeCBGSUZPIFVyIEV2IENudCBPdiAqLwotI2RlZmluZSBYTVRfRVhfREVGX09WCSgxTDw8MTUpCS8qIEJpdCAxNToJVHggRXggRGVmZXJhbGwgQ250IE92ICovCi0jZGVmaW5lIFhNVF9ERUYJCQkoMUw8PDE0KQkvKiBCaXQgMTQ6CVR4IERlZmVycmVkIENudCBPdiAqLwotI2RlZmluZSBYTVRfTEFUX0NPTF9PVgkoMUw8PDEzKQkvKiBCaXQgMTM6CVR4IExhdGUgQ29sIENudCBPdiAqLwotI2RlZmluZSBYTVRfQUJPX0NPTF9PVgkoMUw8PDEyKQkvKiBCaXQgMTI6CVR4IGFibyBkdWV0byBFeCBDb2wgT3YqLwotI2RlZmluZSBYTVRfTVVMX0NPTF9PVgkoMUw8PDExKQkvKiBCaXQgMTE6CVR4IE11bHQgQ29sIENudCBPdiAqLwotI2RlZmluZSBYTVRfU05HX0NPTAkJKDFMPDwxMCkJLyogQml0IDEwOglUeCBTaW5nbGUgQ29sIENudCBPdiAqLwotI2RlZmluZSBYTVRfTUNUUkxfT1YJKDFMPDw5KQkJLyogQml0ICA5OglUeCBNQUMgQ3RybCBDb3VudGVyIE92Ki8KLSNkZWZpbmUgWE1UX01QQVVTRQkJKDFMPDw4KQkJLyogQml0ICA4OglUeCBQYXVzZSBNQUMgQ3RybC1GIE92Ki8KLSNkZWZpbmUgWE1UX0JVUlNUCQkoMUw8PDcpCQkvKiBCaXQgIDc6CVR4IEJ1cnN0IEV2ZW50IENudCBPdiAqLwotI2RlZmluZSBYTVRfTE9ORwkJKDFMPDw2KQkJLyogQml0ICA2OglUeCBMb25nIEZyYW1lIENudCBPdiAqLwotI2RlZmluZSBYTVRfVUNfT0tfT1YJKDFMPDw1KQkJLyogQml0ICA1OglUeCBVbmljYXN0IENudCBPdiAqLwotI2RlZmluZSBYTVRfTUNfT0tfT1YJKDFMPDw0KQkJLyogQml0ICA0OglUeCBNdWx0aWNhc3QgQ250IE92ICovCi0jZGVmaW5lIFhNVF9CQ19PS19PVgkoMUw8PDMpCQkvKiBCaXQgIDM6CVR4IEJyb2FkY2FzdCBDbnQgT3YgKi8KLSNkZWZpbmUgWE1UX09LX0xPX09WCSgxTDw8MikJCS8qIEJpdCAgMjoJT2N0ZXRzIFR4IE9LIExvdyBDbnRPdiovCi0jZGVmaW5lIFhNVF9PS19ISV9PVgkoMUw8PDEpCQkvKiBCaXQgIDE6CU9jdGV0cyBUeCBPSyBIaSBDbnQgT3YqLwotI2RlZmluZSBYTVRfT0tfT1YJCSgxTDw8MCkJCS8qIEJpdCAgMDoJRnJhbWVzIFR4IE9rIE92ICovCi0KLSNkZWZpbmUgWE1UX0RFRl9NU0sJCShYTVRfT0tfTE9fT1YgfCBYTVRfT0tfSElfT1YpCi0KLS8qCi0gKiBSZWNlaXZlIEZyYW1lIFN0YXR1cyBFbmNvZGluZwotICovCi0jZGVmaW5lIFhNUl9GU19MRU4JKDB4M2ZmZlVMPDwxOCkJLyogQml0IDMxLi4xODoJUnggRnJhbWUgTGVuZ3RoICovCi0jZGVmaW5lIFhNUl9GU18yTF9WTEFOCSgxTDw8MTcpCS8qIEJpdCAxNzoJdGFnZ2VkIHdoIDJMZXYgVkxBTiBJRCovCi0jZGVmaW5lIFhNUl9GU18xTF9WTEFOCSgxTDw8MTYpCS8qIEJpdCAxNjoJdGFnZ2VkIHdoIDFMZXYgVkxBTiBJRCovCi0jZGVmaW5lIFhNUl9GU19CQwkJKDFMPDwxNSkJLyogQml0IDE1OglCcm9hZGNhc3QgRnJhbWUgKi8KLSNkZWZpbmUgWE1SX0ZTX01DCQkoMUw8PDE0KQkvKiBCaXQgMTQ6CU11bHRpY2FzdCBGcmFtZSAqLwotI2RlZmluZSBYTVJfRlNfVUMJCSgxTDw8MTMpCS8qIEJpdCAxMzoJVW5pY2FzdCBGcmFtZSAqLwotCQkJCQkJCQkJLyogQml0IDEyOglyZXNlcnZlZCAqLwotI2RlZmluZSBYTVJfRlNfQlVSU1QJKDFMPDwxMSkJLyogQml0IDExOglCdXJzdCBNb2RlICovCi0jZGVmaW5lIFhNUl9GU19DRVhfRVJSCSgxTDw8MTApCS8qIEJpdCAxMDoJQ2FycmllciBFeHQuIEVycm9yICovCi0jZGVmaW5lIFhNUl9GU184MDJfMwkoMUw8PDkpCQkvKiBCaXQgIDk6CTgwMi4zIEZyYW1lICovCi0jZGVmaW5lIFhNUl9GU19DT0xfRVJSCSgxTDw8OCkJCS8qIEJpdCAgODoJQ29sbGlzaW9uIEVycm9yICovCi0jZGVmaW5lIFhNUl9GU19DQVJfRVJSCSgxTDw8NykJCS8qIEJpdCAgNzoJQ2FycmllciBFdmVudCBFcnJvciAqLwotI2RlZmluZSBYTVJfRlNfTEVOX0VSUgkoMUw8PDYpCQkvKiBCaXQgIDY6CUluLVJhbmdlIExlbmd0aCBFcnJvciAqLwotI2RlZmluZSBYTVJfRlNfRlJBX0VSUgkoMUw8PDUpCQkvKiBCaXQgIDU6CUZyYW1pbmcgRXJyb3IgKi8KLSNkZWZpbmUgWE1SX0ZTX1JVTlQJCSgxTDw8NCkJCS8qIEJpdCAgNDoJUnVudCBGcmFtZSAqLwotI2RlZmluZSBYTVJfRlNfTE5HX0VSUgkoMUw8PDMpCQkvKiBCaXQgIDM6CUdpYW50IChKdW1ibykgRnJhbWUgKi8KLSNkZWZpbmUgWE1SX0ZTX0ZDU19FUlIJKDFMPDwyKQkJLyogQml0ICAyOglGcmFtZSBDaGVjayBTZXF1IEVyciAqLwotI2RlZmluZSBYTVJfRlNfRVJSCQkoMUw8PDEpCQkvKiBCaXQgIDE6CUZyYW1lIEVycm9yICovCi0jZGVmaW5lIFhNUl9GU19NQ1RSTAkoMUw8PDApCQkvKiBCaXQgIDA6CU1BQyBDb250cm9sIFBhY2tldCAqLwotCi0vKgotICogWE1SX0ZTX0VSUiB3aWxsIGJlIHNldCBpZgotICoJWE1SX0ZTX0ZDU19FUlIsIFhNUl9GU19MTkdfRVJSLCBYTVJfRlNfUlVOVCwKLSAqCVhNUl9GU19GUkFfRVJSLCBYTVJfRlNfTEVOX0VSUiwgb3IgWE1SX0ZTX0NFWF9FUlIKLSAqIGlzIHNldC4gWE1SX0ZTX0xOR19FUlIgYW5kIFhNUl9GU19MRU5fRVJSIHdpbGwgaXNzdWUKLSAqIFhNUl9GU19FUlIgdW5sZXNzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgUmVjZWl2ZSBDb21tYW5kCi0gKiBSZWdpc3RlciBpcyBzZXQuCi0gKi8KLSNkZWZpbmUgWE1SX0ZTX0FOWV9FUlIJWE1SX0ZTX0VSUgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIFhNQUMtUEhZIFJlZ2lzdGVycywgaW5kaXJlY3QgYWRkcmVzc2VkIG92ZXIgdGhlIFhNQUMKLSAqLwotI2RlZmluZSBQSFlfWE1BQ19DVFJMCQkweDAwCS8qIDE2IGJpdCByL3cJUEhZIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX1hNQUNfU1RBVAkJMHgwMQkvKiAxNiBiaXQgci93CVBIWSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX1hNQUNfSUQwCQkweDAyCS8qIDE2IGJpdCByL28JUEhZIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfWE1BQ19JRDEJCTB4MDMJLyogMTYgYml0IHIvbwlQSFkgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9YTUFDX0FVTkVfQURWCTB4MDQJLyogMTYgYml0IHIvdwlBdXRvLU5lZy4gQWR2ZXJ0aXNlbWVudCAqLwotI2RlZmluZSBQSFlfWE1BQ19BVU5FX0xQCTB4MDUJLyogMTYgYml0IHIvbwlMaW5rIFBhcnRuZXIgQWJpIFJlZyAqLwotI2RlZmluZSBQSFlfWE1BQ19BVU5FX0VYUAkweDA2CS8qIDE2IGJpdCByL28JQXV0by1OZWcuIEV4cGFuc2lvbiBSZWcgKi8KLSNkZWZpbmUgUEhZX1hNQUNfTkVQRwkJMHgwNwkvKiAxNiBiaXQgci93CU5leHQgUGFnZSBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfWE1BQ19ORVBHX0xQCTB4MDgJLyogMTYgYml0IHIvbwlOZXh0IFBhZ2UgTGluayBQYXJ0bmVyICovCi0JLyogMHgwOSAtIDB4MGU6CQlyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfWE1BQ19FWFRfU1RBVAkweDBmCS8qIDE2IGJpdCByL28JRXh0IFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfWE1BQ19SRVNfQUJJCTB4MTAJLyogMTYgYml0IHIvbwlQSFkgUmVzb2x2ZWQgQWJpbGl0eSAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIEJyb2FkY29tLVBIWSBSZWdpc3RlcnMsIGluZGlyZWN0IGFkZHJlc3NlZCBvdmVyIFhNQUMKLSAqLwotI2RlZmluZSBQSFlfQkNPTV9DVFJMCQkweDAwCS8qIDE2IGJpdCByL3cJUEhZIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX0JDT01fU1RBVAkJMHgwMQkvKiAxNiBiaXQgci9vCVBIWSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX0JDT01fSUQwCQkweDAyCS8qIDE2IGJpdCByL28JUEhZIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfQkNPTV9JRDEJCTB4MDMJLyogMTYgYml0IHIvbwlQSFkgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9CQ09NX0FVTkVfQURWCTB4MDQJLyogMTYgYml0IHIvdwlBdXRvLU5lZy4gQWR2ZXJ0aXNlbWVudCAqLwotI2RlZmluZSBQSFlfQkNPTV9BVU5FX0xQCTB4MDUJLyogMTYgYml0IHIvbwlMaW5rIFBhcnQgQWJpbGl0eSBSZWcgKi8KLSNkZWZpbmUgUEhZX0JDT01fQVVORV9FWFAJMHgwNgkvKiAxNiBiaXQgci9vCUF1dG8tTmVnLiBFeHBhbnNpb24gUmVnICovCi0jZGVmaW5lIFBIWV9CQ09NX05FUEcJCTB4MDcJLyogMTYgYml0IHIvdwlOZXh0IFBhZ2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX0JDT01fTkVQR19MUAkweDA4CS8qIDE2IGJpdCByL28JTmV4dCBQYWdlIExpbmsgUGFydG5lciAqLwotCS8qIEJyb2FkY29tLXNwZWNpZmljIHJlZ2lzdGVycyAqLwotI2RlZmluZSBQSFlfQkNPTV8xMDAwVF9DVFJMCTB4MDkJLyogMTYgYml0IHIvdwkxMDAwQmFzZS1UIEN0cmwgUmVnICovCi0jZGVmaW5lIFBIWV9CQ09NXzEwMDBUX1NUQVQJMHgwYQkvKiAxNiBiaXQgci9vCTEwMDBCYXNlLVQgU3RhdHVzIFJlZyAqLwotCS8qIDB4MGIgLSAweDBlOgkJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0JDT01fRVhUX1NUQVQJMHgwZgkvKiAxNiBiaXQgci9vCUV4dGVuZGVkIFN0YXR1cyBSZWcgKi8KLSNkZWZpbmUgUEhZX0JDT01fUF9FWFRfQ1RSTAkweDEwCS8qIDE2IGJpdCByL3cJUEhZIEV4dGVuZGVkIEN0cmwgUmVnICovCi0jZGVmaW5lIFBIWV9CQ09NX1BfRVhUX1NUQVQJMHgxMQkvKiAxNiBiaXQgci9vCVBIWSBFeHRlbmRlZCBTdGF0IFJlZyAqLwotI2RlZmluZSBQSFlfQkNPTV9SRV9DVFIJCTB4MTIJLyogMTYgYml0IHIvdwlSZWNlaXZlIEVycm9yIENvdW50ZXIgKi8KLSNkZWZpbmUgUEhZX0JDT01fRkNfQ1RSCQkweDEzCS8qIDE2IGJpdCByL3cJRmFsc2UgQ2FycmllciBTZW5zZSBDbnQgKi8KLSNkZWZpbmUgUEhZX0JDT01fUk5PX0NUUgkweDE0CS8qIDE2IGJpdCByL3cJUmVjZWl2ZXIgTk9UX09LIENudCAqLwotCS8qIDB4MTUgLSAweDE3OgkJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0JDT01fQVVYX0NUUkwJMHgxOAkvKiAxNiBiaXQgci93CUF1eGlsaWFyeSBDb250cm9sIFJlZyAqLwotI2RlZmluZSBQSFlfQkNPTV9BVVhfU1RBVAkweDE5CS8qIDE2IGJpdCByL28JQXV4aWxpYXJ5IFN0YXQgU3VtbWFyeSAqLwotI2RlZmluZSBQSFlfQkNPTV9JTlRfU1RBVAkweDFhCS8qIDE2IGJpdCByL28JSW50ZXJydXB0IFN0YXR1cyBSZWcgKi8KLSNkZWZpbmUgUEhZX0JDT01fSU5UX01BU0sJMHgxYgkvKiAxNiBiaXQgci93CUludGVycnVwdCBNYXNrIFJlZyAqLwotCS8qIDB4MWM6CQlyZXNlcnZlZCAqLwotCS8qIDB4MWQgLSAweDFmOgkJdGVzdCByZWdpc3RlcnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBNYXJ2ZWwtUEhZIFJlZ2lzdGVycywgaW5kaXJlY3QgYWRkcmVzc2VkIG92ZXIgR01BQwotICovCi0jZGVmaW5lIFBIWV9NQVJWX0NUUkwJCTB4MDAJLyogMTYgYml0IHIvdwlQSFkgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfTUFSVl9TVEFUCQkweDAxCS8qIDE2IGJpdCByL28JUEhZIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfTUFSVl9JRDAJCTB4MDIJLyogMTYgYml0IHIvbwlQSFkgSUQwIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9NQVJWX0lEMQkJMHgwMwkvKiAxNiBiaXQgci9vCVBIWSBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX01BUlZfQVVORV9BRFYJMHgwNAkvKiAxNiBiaXQgci93CUF1dG8tTmVnLiBBZHZlcnRpc2VtZW50ICovCi0jZGVmaW5lIFBIWV9NQVJWX0FVTkVfTFAJMHgwNQkvKiAxNiBiaXQgci9vCUxpbmsgUGFydCBBYmlsaXR5IFJlZyAqLwotI2RlZmluZSBQSFlfTUFSVl9BVU5FX0VYUAkweDA2CS8qIDE2IGJpdCByL28JQXV0by1OZWcuIEV4cGFuc2lvbiBSZWcgKi8KLSNkZWZpbmUgUEhZX01BUlZfTkVQRwkJMHgwNwkvKiAxNiBiaXQgci93CU5leHQgUGFnZSBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfTUFSVl9ORVBHX0xQCTB4MDgJLyogMTYgYml0IHIvbwlOZXh0IFBhZ2UgTGluayBQYXJ0bmVyICovCi0JLyogTWFydmVsLXNwZWNpZmljIHJlZ2lzdGVycyAqLwotI2RlZmluZSBQSFlfTUFSVl8xMDAwVF9DVFJMCTB4MDkJLyogMTYgYml0IHIvdwkxMDAwQmFzZS1UIEN0cmwgUmVnICovCi0jZGVmaW5lIFBIWV9NQVJWXzEwMDBUX1NUQVQJMHgwYQkvKiAxNiBiaXQgci9vCTEwMDBCYXNlLVQgU3RhdHVzIFJlZyAqLwotCS8qIDB4MGIgLSAweDBlOgkJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX01BUlZfRVhUX1NUQVQJMHgwZgkvKiAxNiBiaXQgci9vCUV4dGVuZGVkIFN0YXR1cyBSZWcgKi8KLSNkZWZpbmUgUEhZX01BUlZfUEhZX0NUUkwJMHgxMAkvKiAxNiBiaXQgci93CVBIWSBTcGVjaWZpYyBDdHJsIFJlZyAqLwotI2RlZmluZSBQSFlfTUFSVl9QSFlfU1RBVAkweDExCS8qIDE2IGJpdCByL28JUEhZIFNwZWNpZmljIFN0YXQgUmVnICovCi0jZGVmaW5lIFBIWV9NQVJWX0lOVF9NQVNLCTB4MTIJLyogMTYgYml0IHIvdwlJbnRlcnJ1cHQgTWFzayBSZWcgKi8KLSNkZWZpbmUgUEhZX01BUlZfSU5UX1NUQVQJMHgxMwkvKiAxNiBiaXQgci9vCUludGVycnVwdCBTdGF0dXMgUmVnICovCi0jZGVmaW5lIFBIWV9NQVJWX0VYVF9DVFJMCTB4MTQJLyogMTYgYml0IHIvdwlFeHQuIFBIWSBTcGVjaWZpYyBDdHJsICovCi0jZGVmaW5lIFBIWV9NQVJWX1JYRV9DTlQJMHgxNQkvKiAxNiBiaXQgci93CVJlY2VpdmUgRXJyb3IgQ291bnRlciAqLwotI2RlZmluZSBQSFlfTUFSVl9FWFRfQURSCTB4MTYJLyogMTYgYml0IHIvdwlFeHQuIEFkLiBmb3IgQ2FibGUgRGlhZy4gKi8KLQkvKiAweDE3OgkJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX01BUlZfTEVEX0NUUkwJMHgxOAkvKiAxNiBiaXQgci93CUxFRCBDb250cm9sIFJlZyAqLwotI2RlZmluZSBQSFlfTUFSVl9MRURfT1ZFUgkweDE5CS8qIDE2IGJpdCByL3cJTWFudWFsIExFRCBPdmVycmlkZSBSZWcgKi8KLSNkZWZpbmUgUEhZX01BUlZfRVhUX0NUUkxfMgkweDFhCS8qIDE2IGJpdCByL3cJRXh0LiBQSFkgU3BlY2lmaWMgQ3RybCAyICovCi0jZGVmaW5lIFBIWV9NQVJWX0VYVF9QX1NUQVQJMHgxYgkvKiAxNiBiaXQgci93CUV4dC4gUEhZIFNwZWMuIFN0YXQgUmVnICovCi0jZGVmaW5lIFBIWV9NQVJWX0NBQkxFX0RJQUcJMHgxYwkvKiAxNiBiaXQgci9vCUNhYmxlIERpYWdub3N0aWMgUmVnICovCi0JLyogMHgxZCAtIDB4MWY6CQlyZXNlcnZlZCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIExldmVsIE9uZS1QSFkgUmVnaXN0ZXJzLCBpbmRpcmVjdCBhZGRyZXNzZWQgb3ZlciBYTUFDCi0gKi8KLSNkZWZpbmUgUEhZX0xPTkVfQ1RSTAkJMHgwMAkvKiAxNiBiaXQgci93CVBIWSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9MT05FX1NUQVQJCTB4MDEJLyogMTYgYml0IHIvbwlQSFkgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9MT05FX0lEMAkJMHgwMgkvKiAxNiBiaXQgci9vCVBIWSBJRDAgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX0xPTkVfSUQxCQkweDAzCS8qIDE2IGJpdCByL28JUEhZIElEMSBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfTE9ORV9BVU5FX0FEVgkweDA0CS8qIDE2IGJpdCByL3cJQXV0by1OZWcuIEFkdmVydGlzZW1lbnQgKi8KLSNkZWZpbmUgUEhZX0xPTkVfQVVORV9MUAkweDA1CS8qIDE2IGJpdCByL28JTGluayBQYXJ0IEFiaWxpdHkgUmVnICovCi0jZGVmaW5lIFBIWV9MT05FX0FVTkVfRVhQCTB4MDYJLyogMTYgYml0IHIvbwlBdXRvLU5lZy4gRXhwYW5zaW9uIFJlZyAqLwotI2RlZmluZSBQSFlfTE9ORV9ORVBHCQkweDA3CS8qIDE2IGJpdCByL3cJTmV4dCBQYWdlIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9MT05FX05FUEdfTFAJMHgwOAkvKiAxNiBiaXQgci9vCU5leHQgUGFnZSBMaW5rIFBhcnRuZXIgKi8KLQkvKiBMZXZlbCBPbmUtc3BlY2lmaWMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFBIWV9MT05FXzEwMDBUX0NUUkwJMHgwOQkvKiAxNiBiaXQgci93CTEwMDBCYXNlLVQgQ29udHJvbCBSZWcqLwotI2RlZmluZSBQSFlfTE9ORV8xMDAwVF9TVEFUCTB4MGEJLyogMTYgYml0IHIvbwkxMDAwQmFzZS1UIFN0YXR1cyBSZWcgKi8KLQkvKiAweDBiIC0weDBlOgkJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0xPTkVfRVhUX1NUQVQJMHgwZgkvKiAxNiBiaXQgci9vCUV4dGVuZGVkIFN0YXR1cyBSZWcgKi8KLSNkZWZpbmUgUEhZX0xPTkVfUE9SVF9DRkcJMHgxMAkvKiAxNiBiaXQgci93CVBvcnQgQ29uZmlndXJhdGlvbiBSZWcqLwotI2RlZmluZSBQSFlfTE9ORV9RX1NUQVQJCTB4MTEJLyogMTYgYml0IHIvbwlRdWljayBTdGF0dXMgUmVnICovCi0jZGVmaW5lIFBIWV9MT05FX0lOVF9FTkFCCTB4MTIJLyogMTYgYml0IHIvdwlJbnRlcnJ1cHQgRW5hYmxlIFJlZyAqLwotI2RlZmluZSBQSFlfTE9ORV9JTlRfU1RBVAkweDEzCS8qIDE2IGJpdCByL28JSW50ZXJydXB0IFN0YXR1cyBSZWcgKi8KLSNkZWZpbmUgUEhZX0xPTkVfTEVEX0NGRwkweDE0CS8qIDE2IGJpdCByL3cJTEVEIENvbmZpZ3VyYXRpb24gUmVnICovCi0jZGVmaW5lIFBIWV9MT05FX1BPUlRfQ1RSTAkweDE1CS8qIDE2IGJpdCByL3cJUG9ydCBDb250cm9sIFJlZyAqLwotI2RlZmluZSBQSFlfTE9ORV9DSU0JCTB4MTYJLyogMTYgYml0IHIvbwlDSU0gUmVnICovCi0JLyogMHgxNyAtMHgxYzoJCXJlc2VydmVkICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogTmF0aW9uYWwtUEhZIFJlZ2lzdGVycywgaW5kaXJlY3QgYWRkcmVzc2VkIG92ZXIgWE1BQwotICovCi0jZGVmaW5lIFBIWV9OQVRfQ1RSTAkJMHgwMAkvKiAxNiBiaXQgci93CVBIWSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9OQVRfU1RBVAkJMHgwMQkvKiAxNiBiaXQgci93CVBIWSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX05BVF9JRDAJCQkweDAyCS8qIDE2IGJpdCByL28JUEhZIElEMCBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfTkFUX0lEMQkJCTB4MDMJLyogMTYgYml0IHIvbwlQSFkgSUQxIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBIWV9OQVRfQVVORV9BRFYJMHgwNAkvKiAxNiBiaXQgci93CUF1dG8tTmVnLiBBZHZlcnRpc2VtZW50ICovCi0jZGVmaW5lIFBIWV9OQVRfQVVORV9MUAkJMHgwNQkvKiAxNiBiaXQgci9vCUxpbmsgUGFydG5lciBBYmlsaXR5IFJlZyAqLwotI2RlZmluZSBQSFlfTkFUX0FVTkVfRVhQCTB4MDYJLyogMTYgYml0IHIvbwlBdXRvLU5lZy4gRXhwYW5zaW9uIFJlZyAqLwotI2RlZmluZSBQSFlfTkFUX05FUEcJCTB4MDcJLyogMTYgYml0IHIvdwlOZXh0IFBhZ2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX05BVF9ORVBHX0xQCQkweDA4CS8qIDE2IGJpdCByL28JTmV4dCBQYWdlIExpbmsgUGFydG5lciBSZWcgKi8KLQkvKiBOYXRpb25hbC1zcGVjaWZpYyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUEhZX05BVF8xMDAwVF9DVFJMCTB4MDkJLyogMTYgYml0IHIvdwkxMDAwQmFzZS1UIENvbnRyb2wgUmVnICovCi0jZGVmaW5lIFBIWV9OQVRfMTAwMFRfU1RBVAkweDBhCS8qIDE2IGJpdCByL28JMTAwMEJhc2UtVCBTdGF0dXMgUmVnICovCi0JLyogMHgwYiAtMHgwZToJCXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9OQVRfRVhUX1NUQVQJMHgwZgkvKiAxNiBiaXQgci9vCUV4dGVuZGVkIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBQSFlfTkFUX0VYVF9DVFJMMQkweDEwCS8qIDE2IGJpdCByL28JRXh0ZW5kZWQgQ29udHJvbCBSZWcxICovCi0jZGVmaW5lIFBIWV9OQVRfUV9TVEFUMQkJMHgxMQkvKiAxNiBiaXQgci9vCVF1aWNrIFN0YXR1cyBSZWcxICovCi0jZGVmaW5lIFBIWV9OQVRfMTBCX09QCQkweDEyCS8qIDE2IGJpdCByL28JMTBCYXNlLVQgT3BlcmF0aW9ucyBSZWcgKi8KLSNkZWZpbmUgUEhZX05BVF9FWFRfQ1RSTDIJMHgxMwkvKiAxNiBiaXQgci9vCUV4dGVuZGVkIENvbnRyb2wgUmVnMSAqLwotI2RlZmluZSBQSFlfTkFUX1FfU1RBVDIJCTB4MTQJLyogMTYgYml0IHIvbwlRdWljayBTdGF0dXMgUmVnMiAqLwotCS8qIDB4MTUgLTB4MTg6CQlyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfTkFUX1BIWV9BRERSCTB4MTkJLyogMTYgYml0IHIvbwlQSFkgQWRkcmVzcyBSZWdpc3RlciAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qCi0gKiBQSFkgYml0IGRlZmluaXRpb25zCi0gKiBCaXRzIGRlZmluZWQgYXMgUEhZX1hfLi4uLCBQSFlfQl8uLi4sIFBIWV9MXy4uLiBvciBQSFlfTl8uLi4gYXJlCi0gKiBYTUFDL0Jyb2FkY29tL0xldmVsT25lL05hdGlvbmFsL01hcnZlbGwtc3BlY2lmaWMuCi0gKiBBbGwgb3RoZXIgYXJlIGdlbmVyYWwuCi0gKi8KLQotLyoqKioqICBQSFlfWE1BQ19DVFJMCTE2IGJpdCByL3cJUEhZIENvbnRyb2wgUmVnaXN0ZXIgKioqKiovCi0vKioqKiogIFBIWV9CQ09NX0NUUkwJMTYgYml0IHIvdwlQSFkgQ29udHJvbCBSZWdpc3RlciAqKioqKi8KLS8qKioqKiAgUEhZX01BUlZfQ1RSTAkxNiBiaXQgci93CVBIWSBTdGF0dXMgUmVnaXN0ZXIgKioqKiovCi0vKioqKiogIFBIWV9MT05FX0NUUkwJMTYgYml0IHIvdwlQSFkgQ29udHJvbCBSZWdpc3RlciAqKioqKi8KLSNkZWZpbmUgUEhZX0NUX1JFU0VUCSgxPDwxNSkJLyogQml0IDE1OiAoc2MpCWNsZWFyIGFsbCBQSFkgcmVsYXRlZCByZWdzICovCi0jZGVmaW5lIFBIWV9DVF9MT09QCQkoMTw8MTQpCS8qIEJpdCAxNDoJZW5hYmxlIExvb3BiYWNrIG92ZXIgUEhZICovCi0jZGVmaW5lIFBIWV9DVF9TUFNfTFNCCSgxPDwxMykgLyogQml0IDEzOiAoQkMsTDEpIFNwZWVkIHNlbGVjdCwgbG93ZXIgYml0ICovCi0jZGVmaW5lIFBIWV9DVF9BTkUJCSgxPDwxMikJLyogQml0IDEyOglBdXRvLU5lZ290aWF0aW9uIEVuYWJsZWQgKi8KLSNkZWZpbmUgUEhZX0NUX1BET1dOCSgxPDwxMSkJLyogQml0IDExOiAoQkMsTDEpIFBvd2VyIERvd24gTW9kZSAqLwotI2RlZmluZSBQSFlfQ1RfSVNPTAkJKDE8PDEwKQkvKiBCaXQgMTA6IChCQyxMMSkgSXNvbGF0ZSBNb2RlICovCi0jZGVmaW5lIFBIWV9DVF9SRV9DRkcJKDE8PDkpCS8qIEJpdCAgOTogKHNjKSBSZXN0YXJ0IEF1dG8tTmVnb3RpYXRpb24gKi8KLSNkZWZpbmUgUEhZX0NUX0RVUF9NRAkoMTw8OCkJLyogQml0ICA4OglEdXBsZXggTW9kZSAqLwotI2RlZmluZSBQSFlfQ1RfQ09MX1RTVAkoMTw8NykJLyogQml0ICA3OiAoQkMsTDEpIENvbGxpc2lvbiBUZXN0IGVuYWJsZWQgKi8KLSNkZWZpbmUgUEhZX0NUX1NQU19NU0IJKDE8PDYpCS8qIEJpdCAgNjogKEJDLEwxKSBTcGVlZCBzZWxlY3QsIHVwcGVyIGJpdCAqLwotCQkJCQkJCQkvKiBCaXQgIDUuLjA6CXJlc2VydmVkICovCi0KLSNkZWZpbmUgUEhZX0NUX1NQMTAwMAlQSFlfQ1RfU1BTX01TQgkvKiBlbmFibGUgc3BlZWQgb2YgMTAwMCBNYnBzICovCi0jZGVmaW5lIFBIWV9DVF9TUDEwMAlQSFlfQ1RfU1BTX0xTQgkvKiBlbmFibGUgc3BlZWQgb2YgIDEwMCBNYnBzICovCi0jZGVmaW5lIFBIWV9DVF9TUDEwCQkoMCkJCQkJLyogZW5hYmxlIHNwZWVkIG9mICAgMTAgTWJwcyAqLwotCi0KLS8qKioqKiAgUEhZX1hNQUNfU1RBVAkxNiBiaXQgci93CVBIWSBTdGF0dXMgUmVnaXN0ZXIgKioqKiovCi0vKioqKiogIFBIWV9CQ09NX1NUQVQJMTYgYml0IHIvdwlQSFkgU3RhdHVzIFJlZ2lzdGVyICoqKioqLwotLyoqKioqICBQSFlfTUFSVl9TVEFUCTE2IGJpdCByL3cJUEhZIFN0YXR1cyBSZWdpc3RlciAqKioqKi8KLS8qKioqKiAgUEhZX0xPTkVfU1RBVAkxNiBiaXQgci93CVBIWSBTdGF0dXMgUmVnaXN0ZXIgKioqKiovCi0JCQkJCQkJCS8qIEJpdCAxNS4uOToJcmVzZXJ2ZWQgKi8KLQkJCQkvKgkoQkMvTDEpIDEwMC8xMCBNYnBzIGNhcCBiaXRzIGlnbm9yZWQqLwotI2RlZmluZSBQSFlfU1RfRVhUX1NUCSgxPDw4KQkvKiBCaXQgIDg6CUV4dGVuZGVkIFN0YXR1cyBQcmVzZW50ICovCi0JCQkJCQkJCS8qIEJpdCAgNzoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX1NUX1BSRV9TVVAJKDE8PDYpCS8qIEJpdCAgNjogKEJDL0wxKSBwcmVhbWJsZSBzdXBwcmVzc2lvbiAqLwotI2RlZmluZSBQSFlfU1RfQU5fT1ZFUgkoMTw8NSkJLyogQml0ICA1OglBdXRvLU5lZ290aWF0aW9uIE92ZXIgKi8KLSNkZWZpbmUgUEhZX1NUX1JFTV9GTFQJKDE8PDQpCS8qIEJpdCAgNDoJUmVtb3RlIEZhdWx0IENvbmRpdGlvbiBPY2N1cmVkICovCi0jZGVmaW5lIFBIWV9TVF9BTl9DQVAJKDE8PDMpCS8qIEJpdCAgMzoJQXV0by1OZWdvdGlhdGlvbiBDYXBhYmlsaXR5ICovCi0jZGVmaW5lIFBIWV9TVF9MU1lOQwkoMTw8MikJLyogQml0ICAyOglMaW5rIFN5bmNocm9uaXplZCAqLwotI2RlZmluZSBQSFlfU1RfSkFCX0RFVAkoMTw8MSkJLyogQml0ICAxOiAoQkMvTDEpIEphYmJlciBEZXRlY3RlZCAqLwotI2RlZmluZSBQSFlfU1RfRVhUX1JFRwkoMTw8MCkJLyogQml0ICAwOglFeHRlbmRlZCBSZWdpc3RlciBhdmFpbGFibGUgKi8KLQotCi0vKioqKioJUEhZX1hNQUNfSUQxCQkxNiBiaXQgci9vCVBIWSBJRDEgUmVnaXN0ZXIgKi8KLS8qKioqKglQSFlfQkNPTV9JRDEJCTE2IGJpdCByL28JUEhZIElEMSBSZWdpc3RlciAqLwotLyoqKioqCVBIWV9NQVJWX0lEMQkJMTYgYml0IHIvbwlQSFkgSUQxIFJlZ2lzdGVyICovCi0vKioqKioJUEhZX0xPTkVfSUQxCQkxNiBiaXQgci9vCVBIWSBJRDEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgUEhZX0kxX09VSV9NU0sJKDB4M2Y8PDEwKQkvKiBCaXQgMTUuLjEwOglPcmdhbml6YXRpb24gVW5pcXVlIElEICovCi0jZGVmaW5lIFBIWV9JMV9NT0RfTlVNCSgweDNmPDw0KQkvKiBCaXQgIDkuLiA0OglNb2RlbCBOdW1iZXIgKi8KLSNkZWZpbmUgUEhZX0kxX1JFVl9NU0sJMHgwZgkJLyogQml0ICAzLi4gMDoJUmV2aXNpb24gTnVtYmVyICovCi0KLS8qIGRpZmZlcmVudCBCcm9hZGNvbSBQSFkgSWRzICovCi0jZGVmaW5lIFBIWV9CQ09NX0lEMV9BMQkJMHg2MDQxCi0jZGVmaW5lIFBIWV9CQ09NX0lEMV9CMgkJMHg2MDQzCi0jZGVmaW5lIFBIWV9CQ09NX0lEMV9DMAkJMHg2MDQ0Ci0jZGVmaW5lIFBIWV9CQ09NX0lEMV9DNQkJMHg2MDQ3Ci0KLQotLyoqKioqICBQSFlfWE1BQ19BVU5FX0FEVgkxNiBiaXQgci93CUF1dG8tTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCAqKioqKi8KLS8qKioqKiAgUEhZX1hNQUNfQVVORV9MUAkxNiBiaXQgci9vCUxpbmsgUGFydG5lciBBYmlsaXR5IFJlZyAqKioqKi8KLSNkZWZpbmUgUEhZX0FOX05YVF9QRwkoMTw8MTUpCS8qIEJpdCAxNToJUmVxdWVzdCBOZXh0IFBhZ2UgKi8KLSNkZWZpbmUgUEhZX1hfQU5fQUNLCSgxPDwxNCkJLyogQml0IDE0OiAocm8pCUFja25vd2xlZGdlIFJlY2VpdmVkICovCi0jZGVmaW5lIFBIWV9YX0FOX1JGQgkoMzw8MTIpCS8qIEJpdCAxMy4uMTI6CVJlbW90ZSBGYXVsdCBCaXRzICovCi0JCQkJCQkJCS8qIEJpdCAxMS4uIDk6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9YX0FOX1BBVVNFCSgzPDw3KQkvKiBCaXQgIDguLiA3OglQYXVzZSBCaXRzICovCi0jZGVmaW5lIFBIWV9YX0FOX0hECQkoMTw8NikJLyogQml0ICA2OglIYWxmIER1cGxleCAqLwotI2RlZmluZSBQSFlfWF9BTl9GRAkJKDE8PDUpCS8qIEJpdCAgNToJRnVsbCBEdXBsZXggKi8KLQkJCQkJCQkJLyogQml0ICA0Li4gMDoJcmVzZXJ2ZWQgKi8KLQotLyoqKioqICBQSFlfQkNPTV9BVU5FX0FEVgkxNiBiaXQgci93CUF1dG8tTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCAqKioqKi8KLS8qKioqKiAgUEhZX0JDT01fQVVORV9MUAkxNiBiaXQgci9vCUxpbmsgUGFydG5lciBBYmlsaXR5IFJlZyAqKioqKi8KLS8qCVBIWV9BTl9OWFRfUEcJCShzZWUgWE1BQykgQml0IDE1OglSZXF1ZXN0IE5leHQgUGFnZSAqLwotCQkJCQkJCQkvKiBCaXQgMTQ6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9CX0FOX1JGCQkoMTw8MTMpCS8qIEJpdCAxMzoJUmVtb3RlIEZhdWx0ICovCi0JCQkJCQkJCS8qIEJpdCAxMjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0JfQU5fQVNQCSgxPDwxMSkJLyogQml0IDExOglBc3ltbWV0cmljIFBhdXNlICovCi0jZGVmaW5lIFBIWV9CX0FOX1BDCQkoMTw8MTApCS8qIEJpdCAxMDoJUGF1c2UgQ2FwYWJsZSAqLwotCQkJCQkJCQkvKiBCaXQgIDkuLjU6CTEwMC8xMCBCVCBjYXAgYml0cyBpbmdub3JlZCAqLwotI2RlZmluZSBQSFlfQl9BTl9TRUwJMHgxZgkvKiBCaXQgNC4uMDoJU2VsZWN0b3IgRmllbGQsIDAwMDAxPUV0aGVybmV0Ki8KLQotLyoqKioqICBQSFlfTE9ORV9BVU5FX0FEVgkxNiBiaXQgci93CUF1dG8tTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCAqKioqKi8KLS8qKioqKiAgUEhZX0xPTkVfQVVORV9MUAkxNiBiaXQgci9vCUxpbmsgUGFydG5lciBBYmlsaXR5IFJlZyAqKioqKi8KLS8qCVBIWV9BTl9OWFRfUEcJCShzZWUgWE1BQykgQml0IDE1OglSZXF1ZXN0IE5leHQgUGFnZSAqLwotCQkJCQkJCQkvKiBCaXQgMTQ6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9MX0FOX1JGCQkoMTw8MTMpCS8qIEJpdCAxMzoJUmVtb3RlIEZhdWx0ICovCi0JCQkJCQkJCS8qIEJpdCAxMjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0xfQU5fQVNQCSgxPDwxMSkJLyogQml0IDExOglBc3ltbWV0cmljIFBhdXNlICovCi0jZGVmaW5lIFBIWV9MX0FOX1BDCQkoMTw8MTApCS8qIEJpdCAxMDoJUGF1c2UgQ2FwYWJsZSAqLwotCQkJCQkJCQkvKiBCaXQgIDkuLjU6CTEwMC8xMCBCVCBjYXAgYml0cyBpbmdub3JlZCAqLwotI2RlZmluZSBQSFlfTF9BTl9TRUwJMHgxZgkvKiBCaXQgNC4uMDoJU2VsZWN0b3IgRmllbGQsIDAwMDAxPUV0aGVybmV0Ki8KLQotLyoqKioqICBQSFlfTkFUX0FVTkVfQURWCTE2IGJpdCByL3cJQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50ICoqKioqLwotLyoqKioqICBQSFlfTkFUX0FVTkVfTFAJCTE2IGJpdCByL28JTGluayBQYXJ0bmVyIEFiaWxpdHkgUmVnICoqKioqLwotLyoJUEhZX0FOX05YVF9QRwkJKHNlZSBYTUFDKSBCaXQgMTU6CVJlcXVlc3QgTmV4dCBQYWdlICovCi0JCQkJCQkJCS8qIEJpdCAxNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX05fQU5fUkYJCSgxPDwxMykJLyogQml0IDEzOglSZW1vdGUgRmF1bHQgKi8KLQkJCQkJCQkJLyogQml0IDEyOglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfTl9BTl8xMDBGCSgxPDwxMSkJLyogQml0IDExOgkxMDBCYXNlLVQyIEZEIFN1cHBvcnQgKi8KLSNkZWZpbmUgUEhZX05fQU5fMTAwSAkoMTw8MTApCS8qIEJpdCAxMDoJMTAwQmFzZS1UMiBIRCBTdXBwb3J0ICovCi0JCQkJCQkJCS8qIEJpdCAgOS4uNToJMTAwLzEwIEJUIGNhcCBiaXRzIGluZ25vcmVkICovCi0jZGVmaW5lIFBIWV9OX0FOX1NFTAkweDFmCS8qIEJpdCA0Li4wOglTZWxlY3RvciBGaWVsZCwgMDAwMDE9RXRoZXJuZXQqLwotCi0vKiBmaWVsZCB0eXBlIGRlZmluaXRpb24gZm9yIFBIWV94X0FOX1NFTCAqLwotI2RlZmluZSBQSFlfU0VMX1RZUEUJMHgwMQkvKiAwMDAwMSA9IEV0aGVybmV0ICovCi0KLS8qKioqKiAgUEhZX1hNQUNfQVVORV9FWFAJMTYgYml0IHIvbwlBdXRvLU5lZ290aWF0aW9uIEV4cGFuc2lvbiBSZWcgKioqKiovCi0JCQkJCQkJCS8qIEJpdCAxNS4uNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0FORV9MUF9OUAkoMTw8MykJLyogQml0ICAzOglMaW5rIFBhcnRuZXIgY2FuIE5leHQgUGFnZSAqLwotI2RlZmluZSBQSFlfQU5FX0xPQ19OUAkoMTw8MikJLyogQml0ICAyOglMb2NhbCBQSFkgY2FuIE5leHQgUGFnZSAqLwotI2RlZmluZSBQSFlfQU5FX1JYX1BHCSgxPDwxKQkvKiBCaXQgIDE6CVBhZ2UgUmVjZWl2ZWQgKi8KLQkJCQkJCQkJLyogQml0ICAwOglyZXNlcnZlZCAqLwotCi0vKioqKiogIFBIWV9CQ09NX0FVTkVfRVhQCTE2IGJpdCByL28JQXV0by1OZWdvdGlhdGlvbiBFeHBhbnNpb24gUmVnICoqKioqLwotLyoqKioqICBQSFlfTE9ORV9BVU5FX0VYUAkxNiBiaXQgci9vCUF1dG8tTmVnb3RpYXRpb24gRXhwYW5zaW9uIFJlZyAqKioqKi8KLS8qKioqKiAgUEhZX01BUlZfQVVORV9FWFAJMTYgYml0IHIvbwlBdXRvLU5lZ290aWF0aW9uIEV4cGFuc2lvbiBSZWcgKioqKiovCi0JCQkJCQkJCS8qIEJpdCAxNS4uNToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0FORV9QQVJfREYJKDE8PDQpCS8qIEJpdCAgNDoJUGFyYWxsZWwgRGV0ZWN0aW9uIEZhdWx0ICovCi0vKglQSFlfQU5FX0xQX05QCQkoc2VlIFhNQUMpIEJpdCAgMzoJTGluayBQYXJ0bmVyIGNhbiBOZXh0IFBhZ2UgKi8KLS8qCVBIWV9BTkVfTE9DX05QCQkoc2VlIFhNQUMpIEJpdCAgMjoJTG9jYWwgUEhZIGNhbiBOZXh0IFBhZ2UgKi8KLS8qCVBIWV9BTkVfUlhfUEcJCShzZWUgWE1BQykgQml0ICAxOglQYWdlIFJlY2VpdmVkICovCi0jZGVmaW5lIFBIWV9BTkVfTFBfQ0FQCSgxPDwwKQkvKiBCaXQgIDA6CUxpbmsgUGFydG5lciBBdXRvLU5lZy4gQ2FwLiAqLyAJCi0KLS8qKioqKiAgUEhZX1hNQUNfTkVQRwkJMTYgYml0IHIvdwlOZXh0IFBhZ2UgUmVnaXN0ZXIgKioqKiovCi0vKioqKiogIFBIWV9CQ09NX05FUEcJCTE2IGJpdCByL3cJTmV4dCBQYWdlIFJlZ2lzdGVyICoqKioqLwotLyoqKioqICBQSFlfTE9ORV9ORVBHCQkxNiBiaXQgci93CU5leHQgUGFnZSBSZWdpc3RlciAqKioqKi8KLS8qKioqKiAgUEhZX1hNQUNfTkVQR19MUAkxNiBiaXQgci9vCU5leHQgUGFnZSBMaW5rIFBhcnRuZXIgKioqKiovCi0vKioqKiogIFBIWV9CQ09NX05FUEdfTFAJMTYgYml0IHIvbwlOZXh0IFBhZ2UgTGluayBQYXJ0bmVyICoqKioqLwotLyoqKioqICBQSFlfTE9ORV9ORVBHX0xQCTE2IGJpdCByL28JTmV4dCBQYWdlIExpbmsgUGFydG5lciAqKioqKi8KLSNkZWZpbmUgUEhZX05QX01PUkUJCSgxPDwxNSkJLyogQml0IDE1OglNb3JlLCBOZXh0IFBhZ2VzIHRvIGZvbGxvdyAqLwotI2RlZmluZSBQSFlfTlBfQUNLMQkJKDE8PDE0KQkvKiBCaXQgMTQ6IChybykJQWNrMSwgZm9yIHJlY2VpdmluZyBhIG1lc3NhZ2UgKi8KLSNkZWZpbmUgUEhZX05QX01TR19WQUwJKDE8PDEzKQkvKiBCaXQgMTM6CU1lc3NhZ2UgUGFnZSB2YWxpZCAqLwotI2RlZmluZSBQSFlfTlBfQUNLMgkJKDE8PDEyKQkvKiBCaXQgMTI6CUFjazIsIGNvbXBseSB3aXRoIG1zZyBjb250ZW50ICovCi0jZGVmaW5lIFBIWV9OUF9UT0cJCSgxPDwxMSkJLyogQml0IDExOglUb2dnbGUgQml0LCBlbnN1cmUgc3luYyAqLwotI2RlZmluZSBQSFlfTlBfTVNHCQkweDA3ZmYJLyogQml0IDEwLi4wOglNZXNzYWdlIGZyb20vdG8gTGluayBQYXJ0bmVyICovCi0KLS8qCi0gKiBYTUFDLVNwZWNpZmljCi0gKi8KLS8qKioqKiAgUEhZX1hNQUNfRVhUX1NUQVQJMTYgYml0IHIvdwlFeHRlbmRlZCBTdGF0dXMgUmVnaXN0ZXIgKioqKiovCi0jZGVmaW5lIFBIWV9YX0VYX0ZECQkoMTw8MTUpCS8qIEJpdCAxNToJRGV2aWNlIFN1cHBvcnRzIEZ1bGwgRHVwbGV4ICovCi0jZGVmaW5lIFBIWV9YX0VYX0hECQkoMTw8MTQpCS8qIEJpdCAxNDoJRGV2aWNlIFN1cHBvcnRzIEhhbGYgRHVwbGV4ICovCi0JCQkJCQkJCS8qIEJpdCAxMy4uMDoJcmVzZXJ2ZWQgKi8KLQotLyoqKioqICBQSFlfWE1BQ19SRVNfQUJJCTE2IGJpdCByL28JUEhZIFJlc29sdmVkIEFiaWxpdHkgKioqKiovCi0JCQkJCQkJCS8qIEJpdCAxNS4uOToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX1hfUlNfUEFVU0UJKDM8PDcpCS8qIEJpdCAgOC4uNzoJc2VsZWN0ZWQgUGF1c2UgTW9kZSAqLwotI2RlZmluZSBQSFlfWF9SU19IRAkJKDE8PDYpCS8qIEJpdCAgNjoJSGFsZiBEdXBsZXggTW9kZSBzZWxlY3RlZCAqLwotI2RlZmluZSBQSFlfWF9SU19GRAkJKDE8PDUpCS8qIEJpdCAgNToJRnVsbCBEdXBsZXggTW9kZSBzZWxlY3RlZCAqLwotI2RlZmluZSBQSFlfWF9SU19BQkxNSVMgKDE8PDQpCS8qIEJpdCAgNDoJZHVwbGV4IG9yIHBhdXNlIGNhcCBtaXNtYXRjaCAqLwotI2RlZmluZSBQSFlfWF9SU19QQVVNSVMgKDE8PDMpCS8qIEJpdCAgMzoJcGF1c2UgY2FwYWJpbGl0eSBtaXNtYXRjaCAqLwotCQkJCQkJCQkvKiBCaXQgIDIuLjA6CXJlc2VydmVkICovCi0vKgotICogUmVtb3RlIEZhdWx0IEJpdHMgKFBIWV9YX0FOX1JGQikgZW5jb2RpbmcKLSAqLwotI2RlZmluZSBYX1JGQl9PSwkJKDA8PDEyKQkvKiBCaXQgMTMuLjEyCU5vIGVycm9ycywgTGluayBPSyAqLwotI2RlZmluZSBYX1JGQl9MRgkJKDE8PDEyKQkvKiBCaXQgMTMuLjEyCUxpbmsgRmFpbHVyZSAqLwotI2RlZmluZSBYX1JGQl9PRkYJCSgyPDwxMikJLyogQml0IDEzLi4xMglPZmZsaW5lICovCi0jZGVmaW5lIFhfUkZCX0FOX0VSUgkoMzw8MTIpCS8qIEJpdCAxMy4uMTIJQXV0by1OZWdvdGlhdGlvbiBFcnJvciAqLwotCi0vKgotICogUGF1c2UgQml0cyAoUEhZX1hfQU5fUEFVU0UgYW5kIFBIWV9YX1JTX1BBVVNFKSBlbmNvZGluZwotICovCi0jZGVmaW5lIFBIWV9YX1BfTk9fUEFVU0UJKDA8PDcpCS8qIEJpdCAgOC4uNzoJbm8gUGF1c2UgTW9kZSAqLwotI2RlZmluZSBQSFlfWF9QX1NZTV9NRAkJKDE8PDcpCS8qIEJpdCAgOC4uNzoJc3ltbWV0cmljIFBhdXNlIE1vZGUgKi8KLSNkZWZpbmUgUEhZX1hfUF9BU1lNX01ECQkoMjw8NykJLyogQml0ICA4Li43Oglhc3ltbWV0cmljIFBhdXNlIE1vZGUgKi8KLSNkZWZpbmUgUEhZX1hfUF9CT1RIX01ECQkoMzw8NykJLyogQml0ICA4Li43Oglib3RoIFBhdXNlIE1vZGUgKi8KLQotCi0vKgotICogQnJvYWRjb20tU3BlY2lmaWMKLSAqLwotLyoqKioqICBQSFlfQkNPTV8xMDAwVF9DVFJMCTE2IGJpdCByL3cJMTAwMEJhc2UtVCBDb250cm9sIFJlZyAqKioqKi8KLSNkZWZpbmUgUEhZX0JfMTAwMENfVEVTVAkoNzw8MTMpCS8qIEJpdCAxNS4uMTM6CVRlc3QgTW9kZXMgKi8KLSNkZWZpbmUgUEhZX0JfMTAwMENfTVNFCQkoMTw8MTIpCS8qIEJpdCAxMjoJTWFzdGVyL1NsYXZlIEVuYWJsZSAqLwotI2RlZmluZSBQSFlfQl8xMDAwQ19NU0MJCSgxPDwxMSkJLyogQml0IDExOglNL1MgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBQSFlfQl8xMDAwQ19SRAkJKDE8PDEwKQkvKiBCaXQgMTA6CVJlcGVhdGVyL0RURSAqLwotI2RlZmluZSBQSFlfQl8xMDAwQ19BRkQJCSgxPDw5KQkvKiBCaXQgIDk6CUFkdmVydGlzZSBGdWxsIER1cGxleCAqLwotI2RlZmluZSBQSFlfQl8xMDAwQ19BSEQJCSgxPDw4KQkvKiBCaXQgIDg6CUFkdmVydGlzZSBIYWxmIER1cGxleCAqLwotCQkJCQkJCQkJLyogQml0ICA3Li4wOglyZXNlcnZlZCAqLwotCi0vKioqKiogIFBIWV9CQ09NXzEwMDBUX1NUQVQJMTYgYml0IHIvbwkxMDAwQmFzZS1UIFN0YXR1cyBSZWcgKioqKiovCi0vKioqKiogIFBIWV9NQVJWXzEwMDBUX1NUQVQJMTYgYml0IHIvbwkxMDAwQmFzZS1UIFN0YXR1cyBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9CXzEwMDBTX01TRgkJKDE8PDE1KQkvKiBCaXQgMTU6CU1hc3Rlci9TbGF2ZSBGYXVsdCAqLwotI2RlZmluZSBQSFlfQl8xMDAwU19NU1IJCSgxPDwxNCkJLyogQml0IDE0OglNYXN0ZXIvU2xhdmUgUmVzdWx0ICovCi0jZGVmaW5lIFBIWV9CXzEwMDBTX0xSUwkJKDE8PDEzKQkvKiBCaXQgMTM6CUxvY2FsIFJlY2VpdmVyIFN0YXR1cyAqLwotI2RlZmluZSBQSFlfQl8xMDAwU19SUlMJCSgxPDwxMikJLyogQml0IDEyOglSZW1vdGUgUmVjZWl2ZXIgU3RhdHVzICovCi0jZGVmaW5lIFBIWV9CXzEwMDBTX0xQX0ZECSgxPDwxMSkJLyogQml0IDExOglMaW5rIFBhcnRuZXIgY2FuIEZEICovCi0jZGVmaW5lIFBIWV9CXzEwMDBTX0xQX0hECSgxPDwxMCkJLyogQml0IDEwOglMaW5rIFBhcnRuZXIgY2FuIEhEICovCi0JCQkJCQkJCQkvKiBCaXQgIDkuLjg6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9CXzEwMDBTX0lFQwkJMHhmZgkvKiBCaXQgIDcuLjA6CUlkbGUgRXJyb3IgQ291bnQgKi8KLQotLyoqKioqICBQSFlfQkNPTV9FWFRfU1RBVAkxNiBiaXQgci9vCUV4dGVuZGVkIFN0YXR1cyBSZWdpc3RlciAqKioqKi8KLSNkZWZpbmUgUEhZX0JfRVNfWF9GRF9DQVAJKDE8PDE1KQkvKiBCaXQgMTU6CTEwMDBCYXNlLVggRkQgY2FwYWJsZSAqLwotI2RlZmluZSBQSFlfQl9FU19YX0hEX0NBUAkoMTw8MTQpCS8qIEJpdCAxNDoJMTAwMEJhc2UtWCBIRCBjYXBhYmxlICovCi0jZGVmaW5lIFBIWV9CX0VTX1RfRkRfQ0FQCSgxPDwxMykJLyogQml0IDEzOgkxMDAwQmFzZS1UIEZEIGNhcGFibGUgKi8KLSNkZWZpbmUgUEhZX0JfRVNfVF9IRF9DQVAJKDE8PDEyKQkvKiBCaXQgMTI6CTEwMDBCYXNlLVQgSEQgY2FwYWJsZSAqLwotCQkJCQkJCQkJLyogQml0IDExLi4wOglyZXNlcnZlZCAqLwotCi0vKioqKiogIFBIWV9CQ09NX1BfRVhUX0NUUkwJMTYgYml0IHIvdwlQSFkgRXh0ZW5kZWQgQ29udHJvbCBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9CX1BFQ19NQUNfUEhZCSgxPDwxNSkJLyogQml0IDE1OgkxMEJJVC9HTUktSW50ZXJmYWNlICovCi0jZGVmaW5lIFBIWV9CX1BFQ19ESVNfQ1JPU1MJKDE8PDE0KQkvKiBCaXQgMTQ6CURpc2FibGUgTURJIENyb3Nzb3ZlciAqLwotI2RlZmluZSBQSFlfQl9QRUNfVFhfRElTCSgxPDwxMykJLyogQml0IDEzOglUeCBvdXRwdXQgRGlzYWJsZWQgKi8KLSNkZWZpbmUgUEhZX0JfUEVDX0lOVF9ESVMJKDE8PDEyKQkvKiBCaXQgMTI6CUludGVycnVwdHMgRGlzYWJsZWQgKi8KLSNkZWZpbmUgUEhZX0JfUEVDX0ZfSU5UCQkoMTw8MTEpCS8qIEJpdCAxMToJRm9yY2UgSW50ZXJydXB0ICovCi0jZGVmaW5lIFBIWV9CX1BFQ19CWV80NQkJKDE8PDEwKQkvKiBCaXQgMTA6CUJ5cGFzcyA0QjVCLURlY29kZXIgKi8KLSNkZWZpbmUgUEhZX0JfUEVDX0JZX1NDUgkoMTw8OSkJLyogQml0ICA5OglCeXBhc3MgU2NyYW1ibGVyICovCi0jZGVmaW5lIFBIWV9CX1BFQ19CWV9NTFQzCSgxPDw4KQkvKiBCaXQgIDg6CUJ5cGFzcyBNTFQzIEVuY29kZXIgKi8KLSNkZWZpbmUgUEhZX0JfUEVDX0JZX1JYQQkoMTw8NykJLyogQml0ICA3OglCeXBhc3MgUnggQWxpZ25tLiAqLwotI2RlZmluZSBQSFlfQl9QRUNfUkVTX1NDUgkoMTw8NikJLyogQml0ICA2OglSZXNldCBTY3JhbWJsZXIgKi8KLSNkZWZpbmUgUEhZX0JfUEVDX0VOX0xUUgkoMTw8NSkJLyogQml0ICA1OglFbmEgTEVEIFRyYWZmaWMgTW9kZSAqLwotI2RlZmluZSBQSFlfQl9QRUNfTEVEX09OCSgxPDw0KQkvKiBCaXQgIDQ6CUZvcmNlIExFRCdzIG9uICovCi0jZGVmaW5lIFBIWV9CX1BFQ19MRURfT0ZGCSgxPDwzKQkvKiBCaXQgIDM6CUZvcmNlIExFRCdzIG9mZiAqLwotI2RlZmluZSBQSFlfQl9QRUNfRVhfSVBHCSgxPDwyKQkvKiBCaXQgIDI6CUV4dGVuZCBUeCBJUEcgTW9kZSAqLwotI2RlZmluZSBQSFlfQl9QRUNfM19MRUQJCSgxPDwxKQkvKiBCaXQgIDE6CVRocmVlIExpbmsgTEVEIG1vZGUgKi8KLSNkZWZpbmUgUEhZX0JfUEVDX0hJR0hfTEEJKDE8PDApCS8qIEJpdCAgMDoJR01JSSBGSUZPIEVsYXN0aWN5ICovCi0KLS8qKioqKiAgUEhZX0JDT01fUF9FWFRfU1RBVAkxNiBiaXQgci9vCVBIWSBFeHRlbmRlZCBTdGF0dXMgUmVnICoqKioqLwotCQkJCQkJCQkJLyogQml0IDE1Li4xNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0JfUEVTX0NST1NTX1NUQVQJKDE8PDEzKQkvKiBCaXQgMTM6CU1ESSBDcm9zc292ZXIgU3RhdHVzICovCi0jZGVmaW5lIFBIWV9CX1BFU19JTlRfU1RBVAkoMTw8MTIpCS8qIEJpdCAxMjoJSW50ZXJydXB0IFN0YXR1cyAqLwotI2RlZmluZSBQSFlfQl9QRVNfUlJTCQkoMTw8MTEpCS8qIEJpdCAxMToJUmVtb3RlIFJlY2VpdmVyIFN0YXQuICovCi0jZGVmaW5lIFBIWV9CX1BFU19MUlMJCSgxPDwxMCkJLyogQml0IDEwOglMb2NhbCBSZWNlaXZlciBTdGF0LiAqLwotI2RlZmluZSBQSFlfQl9QRVNfTE9DS0VECSgxPDw5KQkvKiBCaXQgIDk6CUxvY2tlZCAqLwotI2RlZmluZSBQSFlfQl9QRVNfTFMJCSgxPDw4KQkvKiBCaXQgIDg6CUxpbmsgU3RhdHVzICovCi0jZGVmaW5lIFBIWV9CX1BFU19SRgkJKDE8PDcpCS8qIEJpdCAgNzoJUmVtb3RlIEZhdWx0ICovCi0jZGVmaW5lIFBIWV9CX1BFU19DRV9FUgkJKDE8PDYpCS8qIEJpdCAgNjoJQ2FycmllciBFeHQgRXJyb3IgKi8KLSNkZWZpbmUgUEhZX0JfUEVTX0JBRF9TU0QJKDE8PDUpCS8qIEJpdCAgNToJQmFkIFNTRCAqLwotI2RlZmluZSBQSFlfQl9QRVNfQkFEX0VTRAkoMTw8NCkJLyogQml0ICA0OglCYWQgRVNEICovCi0jZGVmaW5lIFBIWV9CX1BFU19SWF9FUgkJKDE8PDMpCS8qIEJpdCAgMzoJUmVjZWl2ZSBFcnJvciAqLwotI2RlZmluZSBQSFlfQl9QRVNfVFhfRVIJCSgxPDwyKQkvKiBCaXQgIDI6CVRyYW5zbWl0IEVycm9yICovCi0jZGVmaW5lIFBIWV9CX1BFU19MT0NLX0VSCSgxPDwxKQkvKiBCaXQgIDE6CUxvY2sgRXJyb3IgKi8KLSNkZWZpbmUgUEhZX0JfUEVTX01MVDNfRVIJKDE8PDApCS8qIEJpdCAgMDoJTUxUMyBjb2RlIEVycm9yICovCi0KLS8qKioqKiAgUEhZX0JDT01fRkNfQ1RSCQkxNiBiaXQgci93CUZhbHNlIENhcnJpZXIgQ291bnRlciAqKioqKi8KLQkJCQkJCQkJCS8qIEJpdCAxNS4uODoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0JfRkNfQ1RSCQkweGZmCS8qIEJpdCAgNy4uMDoJRmFsc2UgQ2FycmllciBDb3VudGVyICovCi0KLS8qKioqKiAgUEhZX0JDT01fUk5PX0NUUgkxNiBiaXQgci93CVJlY2VpdmUgTk9UX09LIENvdW50ZXIgKioqKiovCi0jZGVmaW5lIFBIWV9CX1JDX0xPQ19NU0sJMHhmZjAwCS8qIEJpdCAxNS4uODoJTG9jYWwgUnggTk9UX09LIGNudCAqLwotI2RlZmluZSBQSFlfQl9SQ19SRU1fTVNLCTB4MDBmZgkvKiBCaXQgIDcuLjA6CVJlbW90ZSBSeCBOT1RfT0sgY250ICovCi0KLS8qKioqKiAgUEhZX0JDT01fQVVYX0NUUkwJMTYgYml0IHIvdwlBdXhpbGlhcnkgQ29udHJvbCBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9CX0FDX0xfU1FFCQkoMTw8MTUpCS8qIEJpdCAxNToJTG93IFNxdWVsY2ggKi8KLSNkZWZpbmUgUEhZX0JfQUNfTE9OR19QQUNLCSgxPDwxNCkJLyogQml0IDE0OglSeCBMb25nIFBhY2tldHMgKi8KLSNkZWZpbmUgUEhZX0JfQUNfRVJfQ1RSTAkoMzw8MTIpCS8qIEJpdCAxMy4uMTI6CUVkZ2VyYXRlIENvbnRyb2wgKi8KLQkJCQkJCQkJCS8qIEJpdCAxMToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0JfQUNfVFhfVFNUCQkoMTw8MTApIC8qIEJpdCAxMDoJVHggdGVzdCBiaXQsIGFsd2F5cyAxICovCi0JCQkJCQkJCQkvKiBCaXQgIDkuLiA4OglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfQl9BQ19ESVNfUFJGCSgxPDw3KQkvKiBCaXQgIDc6CWRpcyBwYXJ0IHJlc3AgZmlsdGVyICovCi0JCQkJCQkJCQkvKiBCaXQgIDY6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9CX0FDX0RJU19QTQkJKDE8PDUpCS8qIEJpdCAgNToJZGlzIHBvd2VyIG1hbmFnZW1lbnQgKi8KLQkJCQkJCQkJCS8qIEJpdCAgNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0JfQUNfRElBRwkJKDE8PDMpCS8qIEJpdCAgMzoJRGlhZ25vc3RpYyBNb2RlICovCi0JCQkJCQkJCQkvKiBCaXQgIDIuLiAwOglyZXNlcnZlZCAqLwotCi0vKioqKiogIFBIWV9CQ09NX0FVWF9TVEFUCTE2IGJpdCByL28JQXV4aWxpYXJ5IFN0YXR1cyBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9CX0FTX0FOX0MJCSgxPDwxNSkJLyogQml0IDE1OglBdXRvTmVnIGNvbXBsZXRlICovCi0jZGVmaW5lIFBIWV9CX0FTX0FOX0NBCQkoMTw8MTQpCS8qIEJpdCAxNDoJQU4gQ29tcGxldGUgQWNrICovCi0jZGVmaW5lIFBIWV9CX0FTX0FOQUNLX0QJKDE8PDEzKQkvKiBCaXQgMTM6CUFOIEFjayBEZXRlY3QgKi8KLSNkZWZpbmUgUEhZX0JfQVNfQU5BQl9ECQkoMTw8MTIpCS8qIEJpdCAxMjoJQU4gQWJpbGl0eSBEZXRlY3QgKi8KLSNkZWZpbmUgUEhZX0JfQVNfTlBXCQkoMTw8MTEpCS8qIEJpdCAxMToJQU4gTmV4dCBQYWdlIFdhaXQgKi8KLSNkZWZpbmUgUEhZX0JfQVNfQU5fUkVTX01TSwkoNzw8OCkJLyogQml0IDEwLi44OglBTiBIREMgKi8KLSNkZWZpbmUgUEhZX0JfQVNfUERGCQkoMTw8NykJLyogQml0ICA3OglQYXJhbGxlbCBEZXRlY3QuIEZhdWx0ICovCi0jZGVmaW5lIFBIWV9CX0FTX1JGCQkJKDE8PDYpCS8qIEJpdCAgNjoJUmVtb3RlIEZhdWx0ICovCi0jZGVmaW5lIFBIWV9CX0FTX0FOUF9SCQkoMTw8NSkJLyogQml0ICA1OglBTiBQYWdlIFJlY2VpdmVkICovCi0jZGVmaW5lIFBIWV9CX0FTX0xQX0FOQUIJKDE8PDQpCS8qIEJpdCAgNDoJTFAgQU4gQWJpbGl0eSAqLwotI2RlZmluZSBQSFlfQl9BU19MUF9OUEFCCSgxPDwzKQkvKiBCaXQgIDM6CUxQIE5leHQgUGFnZSBBYmlsaXR5ICovCi0jZGVmaW5lIFBIWV9CX0FTX0xTCQkJKDE8PDIpCS8qIEJpdCAgMjoJTGluayBTdGF0dXMgKi8KLSNkZWZpbmUgUEhZX0JfQVNfUFJSCQkoMTw8MSkJLyogQml0ICAxOglQYXVzZSBSZXNvbHV0aW9uLVJ4ICovCi0jZGVmaW5lIFBIWV9CX0FTX1BSVAkJKDE8PDApCS8qIEJpdCAgMDoJUGF1c2UgUmVzb2x1dGlvbi1UeCAqLwotCi0jZGVmaW5lIFBIWV9CX0FTX1BBVVNFX01TSwkoUEhZX0JfQVNfUFJSIHwgUEhZX0JfQVNfUFJUKQotCi0vKioqKiogIFBIWV9CQ09NX0lOVF9TVEFUCTE2IGJpdCByL28JSW50ZXJydXB0IFN0YXR1cyBSZWcgKioqKiovCi0vKioqKiogIFBIWV9CQ09NX0lOVF9NQVNLCTE2IGJpdCByL3cJSW50ZXJydXB0IE1hc2sgUmVnICoqKioqLwotCQkJCQkJCQkJLyogQml0IDE1OglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfQl9JU19QU0UJCSgxPDwxNCkJLyogQml0IDE0OglQYWlyIFN3YXAgRXJyb3IgKi8KLSNkZWZpbmUgUEhZX0JfSVNfTURYSV9TQwkoMTw8MTMpCS8qIEJpdCAxMzoJTURJWCBTdGF0dXMgQ2hhbmdlICovCi0jZGVmaW5lIFBIWV9CX0lTX0hDVAkJKDE8PDEyKQkvKiBCaXQgMTI6CWNvdW50ZXIgYWJvdmUgMzJrICovCi0jZGVmaW5lIFBIWV9CX0lTX0xDVAkJKDE8PDExKQkvKiBCaXQgMTE6CWNvdW50ZXIgYWJvdmUgMTI4ICovCi0jZGVmaW5lIFBIWV9CX0lTX0FOX1BSCQkoMTw8MTApCS8qIEJpdCAxMDoJUGFnZSBSZWNlaXZlZCAqLwotI2RlZmluZSBQSFlfQl9JU19OT19IRENMCSgxPDw5KQkvKiBCaXQgIDk6CU5vIEhDRCBMaW5rICovCi0jZGVmaW5lIFBIWV9CX0lTX05PX0hEQwkJKDE8PDgpCS8qIEJpdCAgODoJTm8gSENEICovCi0jZGVmaW5lIFBIWV9CX0lTX05FR19VU0hEQwkoMTw8NykJLyogQml0ICA3OglOZWdvdGlhdGVkIFVuc3VwLiBIQ0QgKi8KLSNkZWZpbmUgUEhZX0JfSVNfU0NSX1NfRVIJKDE8PDYpCS8qIEJpdCAgNjoJU2NyYW1ibGVyIFN5bmMgRXJyb3IgKi8KLSNkZWZpbmUgUEhZX0JfSVNfUlJTX0NIQU5HRQkoMTw8NSkJLyogQml0ICA1OglSZW1vdGUgUnggU3RhdCBDaGFuZ2UgKi8KLSNkZWZpbmUgUEhZX0JfSVNfTFJTX0NIQU5HRQkoMTw8NCkJLyogQml0ICA0OglMb2NhbCBSeCBTdGF0IENoYW5nZSAqLwotI2RlZmluZSBQSFlfQl9JU19EVVBfQ0hBTkdFCSgxPDwzKQkvKiBCaXQgIDM6CUR1cGxleCBNb2RlIENoYW5nZSAqLwotI2RlZmluZSBQSFlfQl9JU19MU1BfQ0hBTkdFCSgxPDwyKQkvKiBCaXQgIDI6CUxpbmsgU3BlZWQgQ2hhbmdlICovCi0jZGVmaW5lIFBIWV9CX0lTX0xTVF9DSEFOR0UJKDE8PDEpCS8qIEJpdCAgMToJTGluayBTdGF0dXMgQ2hhbmdlZCAqLwotI2RlZmluZSBQSFlfQl9JU19DUkNfRVIJCSgxPDwwKQkvKiBCaXQgIDA6CUNSQyBFcnJvciAqLwotCi0jZGVmaW5lIFBIWV9CX0RFRl9NU0sJKH4oUEhZX0JfSVNfQU5fUFIgfCBQSFlfQl9JU19MU1RfQ0hBTkdFKSkKLQotLyogUGF1c2UgQml0cyAoUEhZX0JfQU5fQVNQIGFuZCBQSFlfQl9BTl9QQykgZW5jb2RpbmcgKi8KLSNkZWZpbmUgUEhZX0JfUF9OT19QQVVTRQkoMDw8MTApCS8qIEJpdCAxMS4uMTA6CW5vIFBhdXNlIE1vZGUgKi8KLSNkZWZpbmUgUEhZX0JfUF9TWU1fTUQJCSgxPDwxMCkJLyogQml0IDExLi4xMDoJc3ltbWV0cmljIFBhdXNlIE1vZGUgKi8KLSNkZWZpbmUgUEhZX0JfUF9BU1lNX01ECQkoMjw8MTApCS8qIEJpdCAxMS4uMTA6CWFzeW1tZXRyaWMgUGF1c2UgTW9kZSAqLwotI2RlZmluZSBQSFlfQl9QX0JPVEhfTUQJCSgzPDwxMCkJLyogQml0IDExLi4xMDoJYm90aCBQYXVzZSBNb2RlICovCi0KLS8qCi0gKiBSZXNvbHZlZCBEdXBsZXggbW9kZSBhbmQgQ2FwYWJpbGl0aWVzIChBdXggU3RhdHVzIFN1bW1hcnkgUmVnKQotICovCi0jZGVmaW5lIFBIWV9CX1JFU18xMDAwRkQJKDc8PDgpCS8qIEJpdCAxMC4uODoJMTAwMEJhc2UtVCBGdWxsIER1cC4gKi8KLSNkZWZpbmUgUEhZX0JfUkVTXzEwMDBIRAkoNjw8OCkJLyogQml0IDEwLi44OgkxMDAwQmFzZS1UIEhhbGYgRHVwLiAqLwotLyogb3RoZXJzOiAxMDAvMTA6IGludmFsaWQgZm9yIHVzICovCi0KLS8qCi0gKiBMZXZlbCBPbmUtU3BlY2lmaWMKLSAqLwotLyoqKioqICBQSFlfTE9ORV8xMDAwVF9DVFJMCTE2IGJpdCByL3cJMTAwMEJhc2UtVCBDb250cm9sIFJlZyAqKioqKi8KLSNkZWZpbmUgUEhZX0xfMTAwMENfVEVTVAkoNzw8MTMpCS8qIEJpdCAxNS4uMTM6CVRlc3QgTW9kZXMgKi8KLSNkZWZpbmUgUEhZX0xfMTAwMENfTVNFCQkoMTw8MTIpCS8qIEJpdCAxMjoJTWFzdGVyL1NsYXZlIEVuYWJsZSAqLwotI2RlZmluZSBQSFlfTF8xMDAwQ19NU0MJCSgxPDwxMSkJLyogQml0IDExOglNL1MgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBQSFlfTF8xMDAwQ19SRAkJKDE8PDEwKQkvKiBCaXQgMTA6CVJlcGVhdGVyL0RURSAqLwotI2RlZmluZSBQSFlfTF8xMDAwQ19BRkQJCSgxPDw5KQkvKiBCaXQgIDk6CUFkdmVydGlzZSBGdWxsIER1cGxleCAqLwotI2RlZmluZSBQSFlfTF8xMDAwQ19BSEQJCSgxPDw4KQkvKiBCaXQgIDg6CUFkdmVydGlzZSBIYWxmIER1cGxleCAqLwotCQkJCQkJCQkJLyogQml0ICA3Li4wOglyZXNlcnZlZCAqLwotCi0vKioqKiogIFBIWV9MT05FXzEwMDBUX1NUQVQJMTYgYml0IHIvbwkxMDAwQmFzZS1UIFN0YXR1cyBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9MXzEwMDBTX01TRgkJKDE8PDE1KQkvKiBCaXQgMTU6CU1hc3Rlci9TbGF2ZSBGYXVsdCAqLwotI2RlZmluZSBQSFlfTF8xMDAwU19NU1IJCSgxPDwxNCkJLyogQml0IDE0OglNYXN0ZXIvU2xhdmUgUmVzdWx0ICovCi0jZGVmaW5lIFBIWV9MXzEwMDBTX0xSUwkJKDE8PDEzKQkvKiBCaXQgMTM6CUxvY2FsIFJlY2VpdmVyIFN0YXR1cyAqLwotI2RlZmluZSBQSFlfTF8xMDAwU19SUlMJCSgxPDwxMikJLyogQml0IDEyOglSZW1vdGUgUmVjZWl2ZXIgU3RhdHVzICovCi0jZGVmaW5lIFBIWV9MXzEwMDBTX0xQX0ZECSgxPDwxMSkJLyogQml0IDExOglMaW5rIFBhcnRuZXIgY2FuIEZEICovCi0jZGVmaW5lIFBIWV9MXzEwMDBTX0xQX0hECSgxPDwxMCkJLyogQml0IDEwOglMaW5rIFBhcnRuZXIgY2FuIEhEICovCi0JCQkJCQkJCQkvKiBCaXQgIDkuLjg6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9CXzEwMDBTX0lFQwkJMHhmZgkvKiBCaXQgIDcuLjA6CUlkbGUgRXJyb3IgQ291bnQgKi8KLQotLyoqKioqICBQSFlfTE9ORV9FWFRfU1RBVAkxNiBiaXQgci9vCUV4dGVuZGVkIFN0YXR1cyBSZWdpc3RlciAqKioqKi8KLSNkZWZpbmUgUEhZX0xfRVNfWF9GRF9DQVAJKDE8PDE1KQkvKiBCaXQgMTU6CTEwMDBCYXNlLVggRkQgY2FwYWJsZSAqLwotI2RlZmluZSBQSFlfTF9FU19YX0hEX0NBUAkoMTw8MTQpCS8qIEJpdCAxNDoJMTAwMEJhc2UtWCBIRCBjYXBhYmxlICovCi0jZGVmaW5lIFBIWV9MX0VTX1RfRkRfQ0FQCSgxPDwxMykJLyogQml0IDEzOgkxMDAwQmFzZS1UIEZEIGNhcGFibGUgKi8KLSNkZWZpbmUgUEhZX0xfRVNfVF9IRF9DQVAJKDE8PDEyKQkvKiBCaXQgMTI6CTEwMDBCYXNlLVQgSEQgY2FwYWJsZSAqLwotCQkJCQkJCQkJLyogQml0IDExLi4wOglyZXNlcnZlZCAqLwotCi0vKioqKiogIFBIWV9MT05FX1BPUlRfQ0ZHCTE2IGJpdCByL3cJUG9ydCBDb25maWd1cmF0aW9uIFJlZyAqKioqKi8KLSNkZWZpbmUgUEhZX0xfUENfUkVQX01PREUJKDE8PDE1KQkvKiBCaXQgMTU6CVJlcGVhdGVyIE1vZGUgKi8KLQkJCQkJCQkJCS8qIEJpdCAxNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0xfUENfVFhfRElTCQkoMTw8MTMpCS8qIEJpdCAxMzoJVHggb3V0cHV0IERpc2FibGVkICovCi0jZGVmaW5lIFBIWV9MX1BDX0JZX1NDUgkJKDE8PDEyKQkvKiBCaXQgMTI6CUJ5cGFzcyBTY3JhbWJsZXIgKi8KLSNkZWZpbmUgUEhZX0xfUENfQllfNDUJCSgxPDwxMSkJLyogQml0IDExOglCeXBhc3MgNEI1Qi1EZWNvZGVyICovCi0jZGVmaW5lIFBIWV9MX1BDX0pBQl9ESVMJKDE8PDEwKQkvKiBCaXQgMTA6CUphYmJlciBEaXNhYmxlZCAqLwotI2RlZmluZSBQSFlfTF9QQ19TUUUJCSgxPDw5KQkvKiBCaXQgIDk6CUVuYWJsZSBIZWFydGJlYXQgKi8KLSNkZWZpbmUgUEhZX0xfUENfVFBfTE9PUAkoMTw8OCkJLyogQml0ICA4OglUUCBMb29wYmFjayAqLwotI2RlZmluZSBQSFlfTF9QQ19TU1MJCSgxPDw3KQkvKiBCaXQgIDc6CVNtYXJ0IFNwZWVkIFNlbGVjdGlvbiAqLwotI2RlZmluZSBQSFlfTF9QQ19GSUZPX1NJWkUJKDE8PDYpCS8qIEJpdCAgNjoJRklGTyBTaXplICovCi0jZGVmaW5lIFBIWV9MX1BDX1BSRV9FTgkJKDE8PDUpCS8qIEJpdCAgNToJUHJlYW1ibGUgRW5hYmxlICovCi0jZGVmaW5lIFBIWV9MX1BDX0NJTQkJKDE8PDQpCS8qIEJpdCAgNDoJQ2FycmllciBJbnRlZ3JpdHkgTW9uICovCi0jZGVmaW5lIFBIWV9MX1BDXzEwX1NFUgkJKDE8PDMpCS8qIEJpdCAgMzoJVXNlIFNlcmlhbCBPdXRwdXQgKi8KLSNkZWZpbmUgUEhZX0xfUENfQU5JU09MCQkoMTw8MikJLyogQml0ICAyOglVbmlzb2xhdGUgUG9ydCAqLwotI2RlZmluZSBQSFlfTF9QQ19URU5fQklUCSgxPDwxKQkvKiBCaXQgIDE6CTEwYml0IGlmYWNlIG1vZGUgb24gKi8KLSNkZWZpbmUgUEhZX0xfUENfQUxUQ0xPQ0sJKDE8PDApCS8qIEJpdCAgMDogKHJvKQlBTFRDTE9DSyBNb2RlIG9uICovCi0KLS8qKioqKiAgUEhZX0xPTkVfUV9TVEFUCQkxNiBiaXQgci9vCVF1aWNrIFN0YXR1cyBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9MX1FTX0RfUkFURQkJKDM8PDE0KQkvKiBCaXQgMTUuLjE0OglEYXRhIFJhdGUgKi8KLSNkZWZpbmUgUEhZX0xfUVNfVFhfU1RBVAkoMTw8MTMpCS8qIEJpdCAxMzoJVHJhbnNtaXR0aW5nICovCi0jZGVmaW5lIFBIWV9MX1FTX1JYX1NUQVQJKDE8PDEyKQkvKiBCaXQgMTI6CVJlY2VpdmluZyAqLwotI2RlZmluZSBQSFlfTF9RU19DT0xfU1RBVAkoMTw8MTEpCS8qIEJpdCAxMToJQ29sbGlzaW9uICovCi0jZGVmaW5lIFBIWV9MX1FTX0xfU1RBVAkJKDE8PDEwKQkvKiBCaXQgMTA6CUxpbmsgaXMgdXAgKi8KLSNkZWZpbmUgUEhZX0xfUVNfRFVQX01PRAkoMTw8OSkJLyogQml0ICA5OglGdWxsL0hhbGYgRHVwbGV4ICovCi0jZGVmaW5lIFBIWV9MX1FTX0FOCQkJKDE8PDgpCS8qIEJpdCAgODoJQXV0b05lZyBpcyBPbiAqLwotI2RlZmluZSBQSFlfTF9RU19BTl9DCQkoMTw8NykJLyogQml0ICA3OglBTiBpcyBDb21wbGV0ZSAqLwotI2RlZmluZSBQSFlfTF9RU19MTEUJCSg3PDw0KQkvKiBCaXQgIDY6CUxpbmUgTGVuZ3RoIEVzdGltLiAqLwotI2RlZmluZSBQSFlfTF9RU19QQVVTRQkJKDE8PDMpCS8qIEJpdCAgMzoJTFAgYWR2ZXJ0aXNlZCBQYXVzZSAqLwotI2RlZmluZSBQSFlfTF9RU19BU19QQVVTRQkoMTw8MikJLyogQml0ICAyOglMUCBhZHYuIGFzeW0uIFBhdXNlICovCi0jZGVmaW5lIFBIWV9MX1FTX0lTT0xBVEUJKDE8PDEpCS8qIEJpdCAgMToJQ0lNIElzb2xhdGVkICovCi0jZGVmaW5lIFBIWV9MX1FTX0VWRU5UCQkoMTw8MCkJLyogQml0ICAwOglFdmVudCBoYXMgb2NjdXJyZWQgKi8KLQotLyoqKioqICBQSFlfTE9ORV9JTlRfRU5BQgkxNiBiaXQgci93CUludGVycnVwdCBFbmFibGUgUmVnICoqKioqLwotLyoqKioqICBQSFlfTE9ORV9JTlRfU1RBVAkxNiBiaXQgci9vCUludGVycnVwdCBTdGF0dXMgUmVnICoqKioqLwotCQkJCQkJCQkJLyogQml0IDE1Li4xNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0xfSVNfQU5fRgkJKDE8PDEzKQkvKiBCaXQgMTM6CUF1dG8tTmVnb3RpYXRpb24gZmF1bHQgKi8KLQkJCQkJCQkJCS8qIEJpdCAxMjoJbm90IGRlc2NyaWJlZCAqLwotI2RlZmluZSBQSFlfTF9JU19DUk9TUwkJKDE8PDExKQkvKiBCaXQgMTE6CUNyb3Nzb3ZlciB1c2VkICovCi0jZGVmaW5lIFBIWV9MX0lTX1BPTAkJKDE8PDEwKQkvKiBCaXQgMTA6CVBvbGFyaXR5IGNvcnJlY3QuIHVzZWQgKi8KLSNkZWZpbmUgUEhZX0xfSVNfU1MJCQkoMTw8OSkJLyogQml0ICA5OglTbWFydCBTcGVlZCBEb3duZ3JhZGUgKi8KLSNkZWZpbmUgUEhZX0xfSVNfQ0ZVTEwJCSgxPDw4KQkvKiBCaXQgIDg6CUNvdW50ZXIgRnVsbCAqLwotI2RlZmluZSBQSFlfTF9JU19BTl9DCQkoMTw8NykJLyogQml0ICA3OglBdXRvTmVnIENvbXBsZXRlICovCi0jZGVmaW5lIFBIWV9MX0lTX1NQRUVECQkoMTw8NikJLyogQml0ICA2OglTcGVlZCBDaGFuZ2VkICovCi0jZGVmaW5lIFBIWV9MX0lTX0RVUAkJKDE8PDUpCS8qIEJpdCAgNToJRHVwbGV4IENoYW5nZWQgKi8KLSNkZWZpbmUgUEhZX0xfSVNfTFMJCQkoMTw8NCkJLyogQml0ICA0OglMaW5rIFN0YXR1cyBDaGFuZ2VkICovCi0jZGVmaW5lIFBIWV9MX0lTX0lTT0wJCSgxPDwzKQkvKiBCaXQgIDM6CUlzb2xhdGUgT2NjdXJlZCAqLwotI2RlZmluZSBQSFlfTF9JU19NRElOVAkJKDE8PDIpCS8qIEJpdCAgMjogKHJvKQlTVEFUOiBNSUkgSW50IFBlbmRpbmcgKi8KLSNkZWZpbmUgUEhZX0xfSVNfSU5URU4JCSgxPDwxKQkvKiBCaXQgIDE6CUVOQUI6IEVuYWJsZSBJUlFzICovCi0jZGVmaW5lIFBIWV9MX0lTX0ZPUkNFCQkoMTw8MCkJLyogQml0ICAwOglFTkFCOiBGb3JjZSBJbnRlcnJ1cHQgKi8KLQotLyogaW50LiBtYXNrICovCi0jZGVmaW5lIFBIWV9MX0RFRl9NU0sJCShQSFlfTF9JU19MUyB8IFBIWV9MX0lTX0lTT0wgfCBQSFlfTF9JU19JTlRFTikKLQotLyoqKioqICBQSFlfTE9ORV9MRURfQ0ZHCTE2IGJpdCByL3cJTEVEIENvbmZpZ3VyYXRpb24gUmVnICoqKioqLwotI2RlZmluZSBQSFlfTF9MQ19MRURDCQkoMzw8MTQpCS8qIEJpdCAxNS4uMTQ6CUNvbC9CbGluay9Pbi9PZmYgKi8KLSNkZWZpbmUgUEhZX0xfTENfTEVEUgkJKDM8PDEyKQkvKiBCaXQgMTMuLjEyOglSeC9CbGluay9Pbi9PZmYgKi8KLSNkZWZpbmUgUEhZX0xfTENfTEVEVAkJKDM8PDEwKQkvKiBCaXQgMTEuLjEwOglUeC9CbGluay9Pbi9PZmYgKi8KLSNkZWZpbmUgUEhZX0xfTENfTEVERwkJKDM8PDgpCS8qIEJpdCAgOS4uODoJR2lnYS9CbGluay9Pbi9PZmYgKi8KLSNkZWZpbmUgUEhZX0xfTENfTEVEUwkJKDM8PDYpCS8qIEJpdCAgNy4uNjoJMTAtMTAwL0JsaW5rL09uL09mZiAqLwotI2RlZmluZSBQSFlfTF9MQ19MRURMCQkoMzw8NCkJLyogQml0ICA1Li40OglMaW5rL0JsaW5rL09uL09mZiAqLwotI2RlZmluZSBQSFlfTF9MQ19MRURGCQkoMzw8MikJLyogQml0ICAzLi4yOglEdXBsZXgvQmxpbmsvT24vT2ZmICovCi0jZGVmaW5lIFBIWV9MX0xDX1BTVFJFQ0gJKDE8PDEpCS8qIEJpdCAgMToJU3RyZWNoIExFRCBQdWxzZXMgKi8KLSNkZWZpbmUgUEhZX0xfTENfRlJFUQkJKDE8PDApCS8qIEJpdCAgMDoJMzAvMTAwIG1zICovCi0KLS8qKioqKiAgUEhZX0xPTkVfUE9SVF9DVFJMCTE2IGJpdCByL3cJUG9ydCBDb250cm9sIFJlZyAqKioqKi8KLSNkZWZpbmUgUEhZX0xfUENfVFhfVENMSwkoMTw8MTUpCS8qIEJpdCAxNToJRW5hYmxlIFRYX1RDTEsgKi8KLQkJCQkJCQkJCS8qIEJpdCAxNDoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX0xfUENfQUxUX05QCQkoMTw8MTMpCS8qIEJpdCAxNDoJQWx0ZXJuYXRlIE5leHQgUGFnZSAqLwotI2RlZmluZSBQSFlfTF9QQ19HTUlJX0FMVAkoMTw8MTIpCS8qIEJpdCAxMzoJQWx0ZXJuYXRlIEdNSUkgZHJpdmVyICovCi0JCQkJCQkJCQkvKiBCaXQgMTE6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9MX1BDX1RFTl9DUlMJKDE8PDEwKQkvKiBCaXQgMTA6CUV4dGVuZCBDUlMqLwotCQkJCQkJCQkJLyogQml0ICA5Li4wOglub3QgZGVzY3JpYmVkICovCi0KLS8qKioqKiAgUEhZX0xPTkVfQ0lNCQkxNiBiaXQgci9vCUNJTSBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9MX0NJTV9JU09MCQkoMjU1PDw4KS8qIEJpdCAxNS4uODoJSXNvbGF0ZSBDb3VudCAqLwotI2RlZmluZSBQSFlfTF9DSU1fRkFMU0VfQ0FSCSgyNTU8PDApLyogQml0ICA3Li4wOglGYWxzZSBDYXJyaWVyIENvdW50ICovCi0KLQotLyoKLSAqIFBhdXNlIEJpdHMgKFBIWV9MX0FOX0FTUCBhbmQgUEhZX0xfQU5fUEMpIGVuY29kaW5nCi0gKi8KLSNkZWZpbmUgUEhZX0xfUF9OT19QQVVTRQkoMDw8MTApCS8qIEJpdCAxMS4uMTA6CW5vIFBhdXNlIE1vZGUgKi8KLSNkZWZpbmUgUEhZX0xfUF9TWU1fTUQJCSgxPDwxMCkJLyogQml0IDExLi4xMDoJc3ltbWV0cmljIFBhdXNlIE1vZGUgKi8KLSNkZWZpbmUgUEhZX0xfUF9BU1lNX01ECQkoMjw8MTApCS8qIEJpdCAxMS4uMTA6CWFzeW1tZXRyaWMgUGF1c2UgTW9kZSAqLwotI2RlZmluZSBQSFlfTF9QX0JPVEhfTUQJCSgzPDwxMCkJLyogQml0IDExLi4xMDoJYm90aCBQYXVzZSBNb2RlICovCi0KLQotLyoKLSAqIE5hdGlvbmFsLVNwZWNpZmljCi0gKi8KLS8qKioqKiAgUEhZX05BVF8xMDAwVF9DVFJMCTE2IGJpdCByL3cJMTAwMEJhc2UtVCBDb250cm9sIFJlZyAqKioqKi8KLSNkZWZpbmUgUEhZX05fMTAwMENfVEVTVAkoNzw8MTMpCS8qIEJpdCAxNS4uMTM6CVRlc3QgTW9kZXMgKi8KLSNkZWZpbmUgUEhZX05fMTAwMENfTVNFCQkoMTw8MTIpCS8qIEJpdCAxMjoJTWFzdGVyL1NsYXZlIEVuYWJsZSAqLwotI2RlZmluZSBQSFlfTl8xMDAwQ19NU0MJCSgxPDwxMSkJLyogQml0IDExOglNL1MgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBQSFlfTl8xMDAwQ19SRAkJKDE8PDEwKQkvKiBCaXQgMTA6CVJlcGVhdGVyL0RURSAqLwotI2RlZmluZSBQSFlfTl8xMDAwQ19BRkQJCSgxPDw5KQkvKiBCaXQgIDk6CUFkdmVydGlzZSBGdWxsIER1cGxleCAqLwotI2RlZmluZSBQSFlfTl8xMDAwQ19BSEQJCSgxPDw4KQkvKiBCaXQgIDg6CUFkdmVydGlzZSBIYWxmIER1cGxleCAqLwotI2RlZmluZSBQSFlfTl8xMDAwQ19BUEMJCSgxPDw3KQkvKiBCaXQgIDc6CUFzeW1tZXRyaWMgUGF1c2UgQ2FwLiAqLwotCQkJCQkJCQkJLyogQml0ICA2Li4wOglyZXNlcnZlZCAqLwotCi0vKioqKiogIFBIWV9OQVRfMTAwMFRfU1RBVAkxNiBiaXQgci9vCTEwMDBCYXNlLVQgU3RhdHVzIFJlZyAqKioqKi8KLSNkZWZpbmUgUEhZX05fMTAwMFNfTVNGCQkoMTw8MTUpCS8qIEJpdCAxNToJTWFzdGVyL1NsYXZlIEZhdWx0ICovCi0jZGVmaW5lIFBIWV9OXzEwMDBTX01TUgkJKDE8PDE0KQkvKiBCaXQgMTQ6CU1hc3Rlci9TbGF2ZSBSZXN1bHQgKi8KLSNkZWZpbmUgUEhZX05fMTAwMFNfTFJTCQkoMTw8MTMpCS8qIEJpdCAxMzoJTG9jYWwgUmVjZWl2ZXIgU3RhdHVzICovCi0jZGVmaW5lIFBIWV9OXzEwMDBTX1JSUwkJKDE8PDEyKQkvKiBCaXQgMTI6CVJlbW90ZSBSZWNlaXZlciBTdGF0dXMqLwotI2RlZmluZSBQSFlfTl8xMDAwU19MUF9GRAkoMTw8MTEpCS8qIEJpdCAxMToJTGluayBQYXJ0bmVyIGNhbiBGRCAqLwotI2RlZmluZSBQSFlfTl8xMDAwU19MUF9IRAkoMTw8MTApCS8qIEJpdCAxMDoJTGluayBQYXJ0bmVyIGNhbiBIRCAqLwotI2RlZmluZSBQSFlfTl8xMDAwQ19MUF9BUEMJKDE8PDkpCS8qIEJpdCAgOToJTFAgQXN5bS4gUGF1c2UgQ2FwLiAqLwotCQkJCQkJCQkJLyogQml0ICA4OglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfTl8xMDAwU19JRUMJCTB4ZmYJLyogQml0ICA3Li4wOglJZGxlIEVycm9yIENvdW50ICovCi0KLS8qKioqKiAgUEhZX05BVF9FWFRfU1RBVAkxNiBiaXQgci9vCUV4dGVuZGVkIFN0YXR1cyBSZWdpc3RlciAqKioqKi8KLSNkZWZpbmUgUEhZX05fRVNfWF9GRF9DQVAJKDE8PDE1KQkvKiBCaXQgMTU6CTEwMDBCYXNlLVggRkQgY2FwYWJsZSAqLwotI2RlZmluZSBQSFlfTl9FU19YX0hEX0NBUAkoMTw8MTQpCS8qIEJpdCAxNDoJMTAwMEJhc2UtWCBIRCBjYXBhYmxlICovCi0jZGVmaW5lIFBIWV9OX0VTX1RfRkRfQ0FQCSgxPDwxMykJLyogQml0IDEzOgkxMDAwQmFzZS1UIEZEIGNhcGFibGUgKi8KLSNkZWZpbmUgUEhZX05fRVNfVF9IRF9DQVAJKDE8PDEyKQkvKiBCaXQgMTI6CTEwMDBCYXNlLVQgSEQgY2FwYWJsZSAqLwotCQkJCQkJCQkJLyogQml0IDExLi4wOglyZXNlcnZlZCAqLwotCi0vKiB0b2RvOiB0aG9zZSBhcmUgc3RpbGwgbWlzc2luZyAqLwotLyoqKioqICBQSFlfTkFUX0VYVF9DVFJMMQkxNiBiaXQgci9vCUV4dGVuZGVkIENvbnRyb2wgUmVnMSAqKioqKi8KLS8qKioqKiAgUEhZX05BVF9RX1NUQVQxCQkxNiBiaXQgci9vCVF1aWNrIFN0YXR1cyBSZWcxICoqKioqLwotLyoqKioqICBQSFlfTkFUXzEwQl9PUAkJMTYgYml0IHIvbwkxMEJhc2UtVCBPcGVyYXRpb25zIFJlZyAqKioqKi8KLS8qKioqKiAgUEhZX05BVF9FWFRfQ1RSTDIJMTYgYml0IHIvbwlFeHRlbmRlZCBDb250cm9sIFJlZzEgKioqKiovCi0vKioqKiogIFBIWV9OQVRfUV9TVEFUMgkJMTYgYml0IHIvbwlRdWljayBTdGF0dXMgUmVnMiAqKioqKi8KLS8qKioqKiAgUEhZX05BVF9QSFlfQUREUgkxNiBiaXQgci9vCVBIWSBBZGRyZXNzIFJlZ2lzdGVyICoqKioqLwotCi0vKgotICogTWFydmVsbC1TcGVjaWZpYwotICovCi0vKioqKiogIFBIWV9NQVJWX0FVTkVfQURWCTE2IGJpdCByL3cJQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50ICoqKioqLwotLyoqKioqICBQSFlfTUFSVl9BVU5FX0xQCTE2IGJpdCByL3cJTGluayBQYXJ0IEFiaWxpdHkgUmVnICoqKioqLwotI2RlZmluZSBQSFlfTV9BTl9OWFRfUEcJCUJJVF8xNQkvKiBSZXF1ZXN0IE5leHQgUGFnZSAqLwotI2RlZmluZSBQSFlfTV9BTl9BQ0sJCUJJVF8xNAkvKiAocm8pCUFja25vd2xlZGdlIFJlY2VpdmVkICovCi0jZGVmaW5lIFBIWV9NX0FOX1JGCQkJQklUXzEzCS8qIFJlbW90ZSBGYXVsdCAqLwotCQkJCQkJCQkJLyogQml0IDEyOglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfTV9BTl9BU1AJCUJJVF8xMQkvKiBBc3ltbWV0cmljIFBhdXNlICovCi0jZGVmaW5lIFBIWV9NX0FOX1BDCQkJQklUXzEwCS8qIE1BQyBQYXVzZSBpbXBsZW1lbnRlZCAqLwotI2RlZmluZSBQSFlfTV9BTl8xMDBfRkQJCUJJVF84CS8qIEFkdmVydGlzZSAxMDBCYXNlLVRYIEZ1bGwgRHVwbGV4ICovCi0jZGVmaW5lIFBIWV9NX0FOXzEwMF9IRAkJQklUXzcJLyogQWR2ZXJ0aXNlIDEwMEJhc2UtVFggSGFsZiBEdXBsZXggKi8KLSNkZWZpbmUgUEhZX01fQU5fMTBfRkQJCUJJVF82CS8qIEFkdmVydGlzZSAxMEJhc2UtVFggRnVsbCBEdXBsZXggKi8KLSNkZWZpbmUgUEhZX01fQU5fMTBfSEQJCUJJVF81CS8qIEFkdmVydGlzZSAxMEJhc2UtVFggSGFsZiBEdXBsZXggKi8KLQotLyogc3BlY2lhbCBkZWZpbmVzIGZvciBGSUJFUiAoODhFMTAxMVMgb25seSkgKi8KLSNkZWZpbmUgUEhZX01fQU5fQVNQX1gJCUJJVF84CS8qIEFzeW1tZXRyaWMgUGF1c2UgKi8KLSNkZWZpbmUgUEhZX01fQU5fUENfWAkJQklUXzcJLyogTUFDIFBhdXNlIGltcGxlbWVudGVkICovCi0jZGVmaW5lIFBIWV9NX0FOXzEwMDBYX0FIRAlCSVRfNgkvKiBBZHZlcnRpc2UgMTAwMDBCYXNlLVggSGFsZiBEdXBsZXggKi8KLSNkZWZpbmUgUEhZX01fQU5fMTAwMFhfQUZECUJJVF81CS8qIEFkdmVydGlzZSAxMDAwMEJhc2UtWCBGdWxsIER1cGxleCAqLwotCi0vKiBQYXVzZSBCaXRzIChQSFlfTV9BTl9BU1BfWCBhbmQgUEhZX01fQU5fUENfWCkgZW5jb2RpbmcgKi8KLSNkZWZpbmUgUEhZX01fUF9OT19QQVVTRV9YCSgwPDw3KQkvKiBCaXQgIDguLiA3OglubyBQYXVzZSBNb2RlICovCi0jZGVmaW5lIFBIWV9NX1BfU1lNX01EX1gJKDE8PDcpCS8qIEJpdCAgOC4uIDc6CXN5bW1ldHJpYyBQYXVzZSBNb2RlICovCi0jZGVmaW5lIFBIWV9NX1BfQVNZTV9NRF9YCSgyPDw3KQkvKiBCaXQgIDguLiA3Oglhc3ltbWV0cmljIFBhdXNlIE1vZGUgKi8KLSNkZWZpbmUgUEhZX01fUF9CT1RIX01EX1gJKDM8PDcpCS8qIEJpdCAgOC4uIDc6CWJvdGggUGF1c2UgTW9kZSAqLwotCi0vKioqKiogIFBIWV9NQVJWXzEwMDBUX0NUUkwJMTYgYml0IHIvdwkxMDAwQmFzZS1UIENvbnRyb2wgUmVnICoqKioqLwotI2RlZmluZSBQSFlfTV8xMDAwQ19URVNUCSg3PDwxMykJLyogQml0IDE1Li4xMzoJVGVzdCBNb2RlcyAqLwotI2RlZmluZSBQSFlfTV8xMDAwQ19NU0UJCSgxPDwxMikJLyogQml0IDEyOglNYW51YWwgTWFzdGVyL1NsYXZlIEVuYWJsZSAqLwotI2RlZmluZSBQSFlfTV8xMDAwQ19NU0MJCSgxPDwxMSkJLyogQml0IDExOglNL1MgQ29uZmlndXJhdGlvbiAoMT1NYXN0ZXIpICovCi0jZGVmaW5lIFBIWV9NXzEwMDBDX01QRAkJKDE8PDEwKQkvKiBCaXQgMTA6CU11bHRpLVBvcnQgRGV2aWNlICovCi0jZGVmaW5lIFBIWV9NXzEwMDBDX0FGRAkJKDE8PDkpCS8qIEJpdCAgOToJQWR2ZXJ0aXNlIEZ1bGwgRHVwbGV4ICovCi0jZGVmaW5lIFBIWV9NXzEwMDBDX0FIRAkJKDE8PDgpCS8qIEJpdCAgODoJQWR2ZXJ0aXNlIEhhbGYgRHVwbGV4ICovCi0JCQkJCQkJCQkvKiBCaXQgIDcuLjA6CXJlc2VydmVkICovCi0KLS8qKioqKiAgUEhZX01BUlZfUEhZX0NUUkwJMTYgYml0IHIvdwlQSFkgU3BlY2lmaWMgQ3RybCBSZWcgKioqKiovCi0jZGVmaW5lIFBIWV9NX1BDX1RYX0ZGRF9NU0sJKDM8PDE0KQkvKiBCaXQgMTUuLjE0OglUeCBGSUZPIERlcHRoIE1hc2sgKi8KLSNkZWZpbmUgUEhZX01fUENfUlhfRkZEX01TSwkoMzw8MTIpCS8qIEJpdCAxMy4uMTI6CVJ4IEZJRk8gRGVwdGggTWFzayAqLwotI2RlZmluZSBQSFlfTV9QQ19BU1NfQ1JTX1RYCSgxPDwxMSkJLyogQml0IDExOglBc3NlcnQgQ1JTIG9uIFRyYW5zbWl0ICovCi0jZGVmaW5lIFBIWV9NX1BDX0ZMX0dPT0QJKDE8PDEwKQkvKiBCaXQgMTA6CUZvcmNlIExpbmsgR29vZCAqLwotI2RlZmluZSBQSFlfTV9QQ19FTl9ERVRfTVNLCSgzPDw4KQkvKiBCaXQgIDkuLiA4OglFbmVyZ3kgRGV0ZWN0IE1hc2sgKi8KLSNkZWZpbmUgUEhZX01fUENfRU5BX0VYVF9ECSgxPDw3KQkvKiBCaXQgIDc6CUVuYWJsZSBFeHQuIERpc3RhbmNlICgxMEJUKSAqLwotI2RlZmluZSBQSFlfTV9QQ19NRElYX01TSwkoMzw8NSkJLyogQml0ICA2Li4gNToJTURJL01ESVggQ29uZmlnLiBNYXNrICovCi0jZGVmaW5lIFBIWV9NX1BDX0RJU18xMjVDTEsJKDE8PDQpCS8qIEJpdCAgNDoJRGlzYWJsZSAxMjUgQ0xLICovCi0jZGVmaW5lIFBIWV9NX1BDX01BQ19QT1dfVVAJKDE8PDMpCS8qIEJpdCAgMzoJTUFDIFBvd2VyIHVwICovCi0jZGVmaW5lIFBIWV9NX1BDX1NRRV9UX0VOQQkoMTw8MikJLyogQml0ICAyOglTUUUgVGVzdCBFbmFibGVkICovCi0jZGVmaW5lIFBIWV9NX1BDX1BPTF9SX0RJUwkoMTw8MSkJLyogQml0ICAxOglQb2xhcml0eSBSZXZlcnNhbCBEaXNhYmxlZCAqLwotI2RlZmluZSBQSFlfTV9QQ19ESVNfSkFCQkVSCSgxPDwwKQkvKiBCaXQgIDA6CURpc2FibGUgSmFiYmVyICovCi0KLSNkZWZpbmUgUEhZX01fUENfRU5fREVUCQkJU0hJRlQ4KDIpCS8qIEVuZXJneSBEZXRlY3QgKE1vZGUgMSkgKi8KLSNkZWZpbmUgUEhZX01fUENfRU5fREVUX1BMVVMJU0hJRlQ4KDMpCS8qIEVuZXJneSBEZXRlY3QgUGx1cyAoTW9kZSAyKSAqLwotCi0jZGVmaW5lIFBIWV9NX1BDX01ESV9YTU9ERSh4KQlTSElGVDUoeCkJCi0jZGVmaW5lIFBIWV9NX1BDX01BTl9NREkJMCAgICAJLyogMDAgPSBNYW51YWwgTURJIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUEhZX01fUENfTUFOX01ESVgJMQkJLyogMDEgPSBNYW51YWwgTURJWCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIFBIWV9NX1BDX0VOQV9BVVRPCTMJCS8qIDExID0gRW5hYmxlIEF1dG9tYXRpYyBDcm9zc292ZXIgKi8KLQotLyoqKioqICBQSFlfTUFSVl9QSFlfU1RBVAkxNiBiaXQgci9vCVBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnICoqKioqLwotI2RlZmluZSBQSFlfTV9QU19TUEVFRF9NU0sJKDM8PDE0KQkvKiBCaXQgMTUuLjE0OglTcGVlZCBNYXNrICovCi0jZGVmaW5lIFBIWV9NX1BTX1NQRUVEXzEwMDAJKDE8PDE1KQkvKiAgICAgICAxMCA9IDEwMDAgTWJwcyAqLwotI2RlZmluZSBQSFlfTV9QU19TUEVFRF8xMDAJKDE8PDE0KQkvKiAgICAgICAwMSA9ICAxMDAgTWJwcyAqLwotI2RlZmluZSBQSFlfTV9QU19TUEVFRF8xMAkwCQkvKiAgICAgICAwMCA9ICAgMTAgTWJwcyAqLwotI2RlZmluZSBQSFlfTV9QU19GVUxMX0RVUAkoMTw8MTMpCS8qIEJpdCAxMzoJRnVsbCBEdXBsZXggKi8KLSNkZWZpbmUgUEhZX01fUFNfUEFHRV9SRUMJKDE8PDEyKQkvKiBCaXQgMTI6CVBhZ2UgUmVjZWl2ZWQgKi8KLSNkZWZpbmUgUEhZX01fUFNfU1BEVVBfUkVTCSgxPDwxMSkJLyogQml0IDExOglTcGVlZCAmIER1cGxleCBSZXNvbHZlZCAqLwotI2RlZmluZSBQSFlfTV9QU19MSU5LX1VQCSgxPDwxMCkJLyogQml0IDEwOglMaW5rIFVwICovCi0jZGVmaW5lIFBIWV9NX1BTX0NBQkxFX01TSwkoMzw8NykJLyogQml0ICA5Li4gNzoJQ2FibGUgTGVuZ3RoIE1hc2sgKi8KLSNkZWZpbmUgUEhZX01fUFNfTURJX1hfU1RBVAkoMTw8NikJLyogQml0ICA2OglNREkgQ3Jvc3NvdmVyIFN0YXQgKDE9TURJWCkgKi8KLSNkZWZpbmUgUEhZX01fUFNfRE9XTlNfU1RBVAkoMTw8NSkJLyogQml0ICA1OglEb3duc2hpZnQgU3RhdHVzICgxPWRvd25zaC4pICovCi0jZGVmaW5lIFBIWV9NX1BTX0VOREVUX1NUQVQJKDE8PDQpCS8qIEJpdCAgNDoJRW5lcmd5IERldGVjdCBTdGF0dXMgKDE9YWN0KSAqLwotI2RlZmluZSBQSFlfTV9QU19UWF9QX0VOCSgxPDwzKQkvKiBCaXQgIDM6CVR4IFBhdXNlIEVuYWJsZWQgKi8KLSNkZWZpbmUgUEhZX01fUFNfUlhfUF9FTgkoMTw8MikJLyogQml0ICAyOglSeCBQYXVzZSBFbmFibGVkICovCi0jZGVmaW5lIFBIWV9NX1BTX1BPTF9SRVYJKDE8PDEpCS8qIEJpdCAgMToJUG9sYXJpdHkgUmV2ZXJzZWQgKi8KLSNkZWZpbmUgUEhZX01fUENfSkFCQkVSCQkoMTw8MCkJLyogQml0ICAwOglKYWJiZXIgKi8KLQotI2RlZmluZSBQSFlfTV9QU19QQVVTRV9NU0sJKFBIWV9NX1BTX1RYX1BfRU4gfCBQSFlfTV9QU19SWF9QX0VOKQotCi0vKioqKiogIFBIWV9NQVJWX0lOVF9NQVNLCTE2IGJpdCByL3cJSW50ZXJydXB0IE1hc2sgUmVnICoqKioqLwotLyoqKioqICBQSFlfTUFSVl9JTlRfU1RBVAkxNiBiaXQgci9vCUludGVycnVwdCBTdGF0dXMgUmVnICoqKioqLwotI2RlZmluZSBQSFlfTV9JU19BTl9FUlJPUgkoMTw8MTUpCS8qIEJpdCAxNToJQXV0by1OZWdvdGlhdGlvbiBFcnJvciAqLwotI2RlZmluZSBQSFlfTV9JU19MU1BfQ0hBTkdFCSgxPDwxNCkJLyogQml0IDE0OglMaW5rIFNwZWVkIENoYW5nZWQgKi8KLSNkZWZpbmUgUEhZX01fSVNfRFVQX0NIQU5HRQkoMTw8MTMpCS8qIEJpdCAxMzoJRHVwbGV4IE1vZGUgQ2hhbmdlZCAqLwotI2RlZmluZSBQSFlfTV9JU19BTl9QUgkJKDE8PDEyKQkvKiBCaXQgMTI6CVBhZ2UgUmVjZWl2ZWQgKi8KLSNkZWZpbmUgUEhZX01fSVNfQU5fQ09NUEwJKDE8PDExKQkvKiBCaXQgMTE6CUF1dG8tTmVnb3RpYXRpb24gQ29tcGxldGVkICovCi0jZGVmaW5lIFBIWV9NX0lTX0xTVF9DSEFOR0UJKDE8PDEwKQkvKiBCaXQgMTA6CUxpbmsgU3RhdHVzIENoYW5nZWQgKi8KLSNkZWZpbmUgUEhZX01fSVNfU1lNQl9FUlJPUgkoMTw8OSkJLyogQml0ICA5OglTeW1ib2wgRXJyb3IgKi8KLSNkZWZpbmUgUEhZX01fSVNfRkFMU0VfQ0FSUgkoMTw8OCkJLyogQml0ICA4OglGYWxzZSBDYXJyaWVyICovCi0jZGVmaW5lIFBIWV9NX0lTX0ZJRk9fRVJST1IJKDE8PDcpCS8qIEJpdCAgNzoJRklGTyBPdmVyZmxvdy9VbmRlcnJ1biBFcnJvciAqLwotI2RlZmluZSBQSFlfTV9JU19NRElfQ0hBTkdFCSgxPDw2KQkvKiBCaXQgIDY6CU1ESSBDcm9zc292ZXIgQ2hhbmdlZCAqLwotI2RlZmluZSBQSFlfTV9JU19ET1dOU0hfREVUCSgxPDw1KQkvKiBCaXQgIDU6CURvd25zaGlmdCBEZXRlY3RlZCAqLwotI2RlZmluZSBQSFlfTV9JU19FTkRfQ0hBTkdFCSgxPDw0KQkvKiBCaXQgIDQ6CUVuZXJneSBEZXRlY3QgQ2hhbmdlZCAqLwotCQkJCQkJCQkJLyogQml0ICAzLi4yOglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfTV9JU19QT0xfQ0hBTkdFCSgxPDwxKQkvKiBCaXQgIDE6CVBvbGFyaXR5IENoYW5nZWQgKi8KLSNkZWZpbmUgUEhZX01fSVNfSkFCQkVSCQkoMTw8MCkJLyogQml0ICAwOglKYWJiZXIgKi8KLQotI2RlZmluZSBQSFlfTV9ERUZfTVNLCQkoUEhZX01fSVNfQU5fRVJST1IgfCBQSFlfTV9JU19BTl9QUiB8IFwKLQkJCQkJCQlQSFlfTV9JU19MU1RfQ0hBTkdFIHwgUEhZX01fSVNfRklGT19FUlJPUikKLQotLyoqKioqICBQSFlfTUFSVl9FWFRfQ1RSTAkxNiBiaXQgci93CUV4dC4gUEhZIFNwZWNpZmljIEN0cmwgKioqKiovCi0jZGVmaW5lIFBIWV9NX0VDX01fRFNDX01TSwkoMzw8MTApCS8qIEJpdCAxMS4uMTA6CU1hc3RlciBkb3duc2hpZnQgY291bnRlciAqLwotI2RlZmluZSBQSFlfTV9FQ19TX0RTQ19NU0sJKDM8PDgpCS8qIEJpdCAgOS4uIDg6CVNsYXZlICBkb3duc2hpZnQgY291bnRlciAqLwotI2RlZmluZSBQSFlfTV9FQ19NQUNfU19NU0sJKDc8PDQpCS8qIEJpdCAgNi4uIDQ6CURlZi4gTUFDIGludGVyZmFjZSBzcGVlZCAqLwotI2RlZmluZSBQSFlfTV9FQ19GSUJfQU5fRU5BCSgxPDwzKQkvKiBCaXQgIDM6CUZpYmVyIEF1dG8tTmVnLiBFbmFibGUgKi8KLQotI2RlZmluZSBQSFlfTV9FQ19NX0RTQyh4KQkJU0hJRlQxMCh4KQkvKiAwMD0xeDsgMDE9Mng7IDEwPTN4OyAxMT00eCAqLwotI2RlZmluZSBQSFlfTV9FQ19TX0RTQyh4KQkJU0hJRlQ4KHgpCS8qIDAwPWRpczsgMDE9MXg7IDEwPTJ4OyAxMT0zeCAqLwotI2RlZmluZSBQSFlfTV9FQ19NQUNfUyh4KQkJU0hJRlQ0KHgpCS8qIDAxWD0wOyAxMTA9Mi41OyAxMTE9MjUgKE1IeikgKi8KLQotI2RlZmluZSBNQUNfVFhfQ0xLXzBfTUhaCTIKLSNkZWZpbmUgTUFDX1RYX0NMS18yXzVfTUhaCTYKLSNkZWZpbmUgTUFDX1RYX0NMS18yNV9NSFoJNwotCi0vKioqKiogIFBIWV9NQVJWX0xFRF9DVFJMCTE2IGJpdCByL3cJTEVEIENvbnRyb2wgUmVnICoqKioqLwotI2RlZmluZSBQSFlfTV9MRURDX0RJU19MRUQJKDE8PDE1KQkvKiBCaXQgMTU6CURpc2FibGUgTEVEICovCi0jZGVmaW5lIFBIWV9NX0xFRENfUFVMU19NU0sJKDc8PDEyKQkvKiBCaXQgMTQuLjEyOiAgUHVsc2UgU3RyZXRjaCBNYXNrICovCi0jZGVmaW5lIFBIWV9NX0xFRENfRl9JTlQJKDE8PDExKQkvKiBCaXQgMTE6CUZvcmNlIEludGVycnVwdCAqLwotI2RlZmluZSBQSFlfTV9MRURDX0JMX1JfTVNLCSg3PDw4KQkvKiBCaXQgMTAuLiA4OiAgQmxpbmsgUmF0ZSBNYXNrICovCi0JCQkJCQkJCQkvKiBCaXQgIDcuLiA1OglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfTV9MRURDX0xJTktfTVNLCSgzPDwzKQkvKiBCaXQgIDQuLiAzOglMaW5rIENvbnRyb2wgTWFzayAqLwotI2RlZmluZSBQSFlfTV9MRURDX0RQX0NUUkwJKDE8PDIpCS8qIEJpdCAgMjoJRHVwbGV4IENvbnRyb2wgKi8KLSNkZWZpbmUgUEhZX01fTEVEQ19SWF9DVFJMCSgxPDwxKQkvKiBCaXQgIDE6CVJ4IGFjdGl2aXR5IC8gTGluayAqLwotI2RlZmluZSBQSFlfTV9MRURDX1RYX0NUUkwJKDE8PDApCS8qIEJpdCAgMDoJVHggYWN0aXZpdHkgLyBMaW5rICovCi0KLSNkZWZpbmUgUEhZX01fTEVEX1BVTFNfRFVSKHgpCVNISUZUMTIoeCkJLyogUHVsc2UgU3RyZXRjaCBEdXJhdGlvbiAqLwotCi0jZGVmaW5lCVBVTFNfTk9fU1RSCQkwCQkvKiBubyBwdWxzZSBzdHJldGNoaW5nICovCi0jZGVmaW5lCVBVTFNfMjFNUwkJMQkJLyogMjEgbXMgdG8gNDIgbXMgKi8KLSNkZWZpbmUgUFVMU180Mk1TCQkyCQkvKiA0MiBtcyB0byA4NCBtcyAqLwotI2RlZmluZSBQVUxTXzg0TVMJCTMJCS8qIDg0IG1zIHRvIDE3MCBtcyAqLwotI2RlZmluZSBQVUxTXzE3ME1TCQk0CQkvKiAxNzAgbXMgdG8gMzQwIG1zICovCi0jZGVmaW5lIFBVTFNfMzQwTVMJCTUJCS8qIDM0MCBtcyB0byA2NzAgbXMgKi8KLSNkZWZpbmUgUFVMU182NzBNUwkJNgkJLyogNjcwIG1zIHRvIDEuMyBzICovCi0jZGVmaW5lIFBVTFNfMTMwME1TCQk3CQkvKiAxLjMgcyB0byAyLjcgcyAqLwotCi0jZGVmaW5lIFBIWV9NX0xFRF9CTElOS19SVCh4KQlTSElGVDgoeCkJLyogQmxpbmsgUmF0ZSAqLwotCi0jZGVmaW5lIEJMSU5LXzQyTVMJCTAJCS8qIDQyIG1zICovCi0jZGVmaW5lIEJMSU5LXzg0TVMJCTEJCS8qIDg0IG1zICovCi0jZGVmaW5lIEJMSU5LXzE3ME1TCQkyCQkvKiAxNzAgbXMgKi8KLSNkZWZpbmUgQkxJTktfMzQwTVMJCTMJCS8qIDM0MCBtcyAqLwotI2RlZmluZSBCTElOS182NzBNUwkJNAkJLyogNjcwIG1zICovCi0JCQkJCQkJCS8qIHZhbHVlcyA1IC0gNzogcmVzZXJ2ZWQgKi8KLQotLyoqKioqICBQSFlfTUFSVl9MRURfT1ZFUgkxNiBiaXQgci93CU1hbnVhbCBMRUQgT3ZlcnJpZGUgUmVnICoqKioqLwotI2RlZmluZSBQSFlfTV9MRURfTU9fRFVQKHgpCQlTSElGVDEwKHgpCS8qIEJpdCAxMS4uMTA6ICBEdXBsZXggKi8KLSNkZWZpbmUgUEhZX01fTEVEX01PXzEwKHgpCQlTSElGVDgoeCkJLyogQml0ICA5Li4gODogIExpbmsgMTAgKi8KLSNkZWZpbmUgUEhZX01fTEVEX01PXzEwMCh4KQkJU0hJRlQ2KHgpCS8qIEJpdCAgNy4uIDY6ICBMaW5rIDEwMCAqLwotI2RlZmluZSBQSFlfTV9MRURfTU9fMTAwMCh4KQlTSElGVDQoeCkJLyogQml0ICA1Li4gNDogIExpbmsgMTAwMCAqLwotI2RlZmluZSBQSFlfTV9MRURfTU9fUlgoeCkJCVNISUZUMih4KQkvKiBCaXQgIDMuLiAyOiAgUnggKi8KLSNkZWZpbmUgUEhZX01fTEVEX01PX1RYKHgpCQlTSElGVDAoeCkJLyogQml0ICAxLi4gMDogIFR4ICovCi0KLSNkZWZpbmUgTU9fTEVEX05PUk0JCQkwCi0jZGVmaW5lIE1PX0xFRF9CTElOSwkJMQotI2RlZmluZSBNT19MRURfT0ZGCQkJMgotI2RlZmluZSBNT19MRURfT04JCQkzCi0KLS8qKioqKiAgUEhZX01BUlZfRVhUX0NUUkxfMgkxNiBiaXQgci93CUV4dC4gUEhZIFNwZWNpZmljIEN0cmwgMiAqKioqKi8KLQkJCQkJCQkJCS8qIEJpdCAxNS4uIDc6CXJlc2VydmVkICovCi0jZGVmaW5lIFBIWV9NX0VDMl9GSV9JTVBFRAkoMTw8NikJLyogQml0ICA2OglGaWJlciBJbnB1dCAgSW1wZWRhbmNlICovCi0jZGVmaW5lIFBIWV9NX0VDMl9GT19JTVBFRAkoMTw8NSkJLyogQml0ICA1OglGaWJlciBPdXRwdXQgSW1wZWRhbmNlICovCi0jZGVmaW5lIFBIWV9NX0VDMl9GT19NX0NMSwkoMTw8NCkJLyogQml0ICA0OglGaWJlciBNb2RlIENsb2NrIEVuYWJsZSAqLwotI2RlZmluZSBQSFlfTV9FQzJfRk9fQk9PU1QJKDE8PDMpCS8qIEJpdCAgMzoJRmliZXIgT3V0cHV0IEJvb3N0ICovCi0jZGVmaW5lIFBIWV9NX0VDMl9GT19BTV9NU0sJNwkJLyogQml0ICAyLi4gMDoJRmliZXIgT3V0cHV0IEFtcGxpdHVkZSAqLwotCi0vKioqKioJUEhZX01BUlZfRVhUX1BfU1RBVCAxNiBiaXQgci93CUV4dC4gUEhZIFNwZWNpZmljIFN0YXR1cyAqKioqKi8KLSNkZWZpbmUgUEhZX01fRkNfQVVUT19TRUwJKDE8PDE1KQkvKiBCaXQgMTU6CUZpYmVyL0NvcHBlciBBdXRvIFNlbC4gZGlzLiAqLwotI2RlZmluZSBQSFlfTV9GQ19BTl9SRUdfQUNDICgxPDwxNCkgLyogQml0IDE0OglGaWJlci9Db3BwZXIgQXV0b25lZy4gcmVnIGFjYyAqLwotI2RlZmluZSBQSFlfTV9GQ19SRVNVTFVUSU9OICgxPDwxMykJLyogQml0IDEzOglGaWJlci9Db3BwZXIgUmVzdWx1dGlvbiAqLwotI2RlZmluZSBQSFlfTV9TRVJfSUZfQU5fQlAgICgxPDwxMikgLyogQml0IDEyOglTZXIgSUYgYXV0b25lZy4gYnlwYXNzIGVuYWJsZSAqLwotI2RlZmluZSBQSFlfTV9TRVJfSUZfQlBfU1QJKDE8PDExKSAvKiBCaXQgMTE6CVNlciBJRiBhdXRvbmVnLiBieXBhc3Mgc3RhdHVzICovCi0jZGVmaW5lIFBIWV9NX0lSUV9QT0xBUklUWQkoMTw8MTApIC8qIEJpdCAxMDoJSVJRIHBvbGFyaXR5ICovCi0JCQkJCQkJCQkvKiBCaXQgOS4uNDogcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgUEhZX01fVU5ET0MxCQkoMTw8IDcpIC8qIHVuZG9jdW1lbnRlZCBiaXQgISEgKi8KLSNkZWZpbmUgUEhZX01fTU9ERV9NQVNLCQkoMHhmPDwwKS8qIEJpdCAzLi4wOiBjb3B5IG9mIEhXQ0ZHIE1PREVbMzowXSAqLwotCi0KLS8qKioqKiAgUEhZX01BUlZfQ0FCTEVfRElBRwkxNiBiaXQgci9vCUNhYmxlIERpYWdub3N0aWMgUmVnICoqKioqLwotI2RlZmluZSBQSFlfTV9DQUJEX0VOQV9URVNUCSgxPDwxNSkJLyogQml0IDE1OglFbmFibGUgVGVzdCAqLwotI2RlZmluZSBQSFlfTV9DQUJEX1NUQVRfTVNLCSgzPDwxMykJLyogQml0IDE0Li4xMzoJU3RhdHVzICovCi0JCQkJCQkJCQkvKiBCaXQgMTIuLiA4OglyZXNlcnZlZCAqLwotI2RlZmluZSBQSFlfTV9DQUJEX0RJU1RfTVNLCTB4ZmYJLyogQml0ICA3Li4gMDoJRGlzdGFuY2UgKi8KLQotLyogdmFsdWVzIGZvciBDYWJsZSBEaWFnbm9zdGljIFN0YXR1cyAoMTE9ZmFpbDsgMDA9T0s7IDEwPW9wZW47IDAxPXNob3J0KSAqLwotI2RlZmluZSBDQUJEX1NUQVRfTk9STUFMCTAKLSNkZWZpbmUgQ0FCRF9TVEFUX1NIT1JUCQkxCi0jZGVmaW5lIENBQkRfU1RBVF9PUEVOCQkyCi0jZGVmaW5lIENBQkRfU1RBVF9GQUlMCQkzCi0KLQotLyoKLSAqIEdNQUMgcmVnaXN0ZXJzCi0gKgotICogVGhlIEdNQUMgcmVnaXN0ZXJzIGFyZSAxNiBvciAzMiBiaXRzIHdpZGUuCi0gKiBUaGUgR01BQ3MgaG9zdCBwcm9jZXNzb3IgaW50ZXJmYWNlIGlzIDE2IGJpdHMgd2lkZSwKLSAqIHRoZXJlZm9yZSBBTEwgcmVnaXN0ZXJzIHdpbGwgYmUgYWRkcmVzc2VkIHdpdGggMTYgYml0IGFjY2Vzc2VzLgotICoKLSAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBwcm92aWRlZCB0byBhY2Nlc3MgdGhlIEdNQUMgcmVnaXN0ZXJzCi0gKiBHTV9JTjE2KCksIEdNX09VVDE2LCBHTV9JTjMyKCksIEdNX09VVDMyKCksIEdNX0lOQURSKCksIEdNX09VVEFEUigpLAotICogR01fSU5IQVNIKCksIGFuZCBHTV9PVVRIQVNIKCkuCi0gKiBUaGUgbWFjcm9zIGFyZSBkZWZpbmVkIGluIFNrR2VIdy5oLgotICoKLSAqIE5vdGU6CU5BIHJlZwk9IE5ldHdvcmsgQWRkcmVzcyBlLmcgREEsIFNBIGV0Yy4KLSAqCi0gKi8KLQotLyogUG9ydCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgR01fR1BfU1RBVAkJMHgwMDAwCQkvKiAxNiBiaXQgci9vCUdlbmVyYWwgUHVycG9zZSBTdGF0dXMgKi8KLSNkZWZpbmUgR01fR1BfQ1RSTAkJMHgwMDA0CQkvKiAxNiBiaXQgci93CUdlbmVyYWwgUHVycG9zZSBDb250cm9sICovCi0jZGVmaW5lIEdNX1RYX0NUUkwJCTB4MDAwOAkJLyogMTYgYml0IHIvdwlUcmFuc21pdCBDb250cm9sIFJlZy4gKi8KLSNkZWZpbmUgR01fUlhfQ1RSTAkJMHgwMDBjCQkvKiAxNiBiaXQgci93CVJlY2VpdmUgQ29udHJvbCBSZWcuICovCi0jZGVmaW5lIEdNX1RYX0ZMT1dfQ1RSTAkweDAwMTAJCS8qIDE2IGJpdCByL3cJVHJhbnNtaXQgRmxvdy1Db250cm9sICovCi0jZGVmaW5lIEdNX1RYX1BBUkFNCQkweDAwMTQJCS8qIDE2IGJpdCByL3cJVHJhbnNtaXQgUGFyYW1ldGVyIFJlZy4gKi8KLSNkZWZpbmUgR01fU0VSSUFMX01PREUJMHgwMDE4CQkvKiAxNiBiaXQgci93CVNlcmlhbCBNb2RlIFJlZ2lzdGVyICovCi0KLS8qIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVycyAqLwotI2RlZmluZSBHTV9TUkNfQUREUl8xTAkweDAwMWMJCS8qIDE2IGJpdCByL3cJU291cmNlIEFkZHJlc3MgMSAobG93KSAqLwotI2RlZmluZSBHTV9TUkNfQUREUl8xTQkweDAwMjAJCS8qIDE2IGJpdCByL3cJU291cmNlIEFkZHJlc3MgMSAobWlkZGxlKSAqLwotI2RlZmluZSBHTV9TUkNfQUREUl8xSAkweDAwMjQJCS8qIDE2IGJpdCByL3cJU291cmNlIEFkZHJlc3MgMSAoaGlnaCkgKi8KLSNkZWZpbmUgR01fU1JDX0FERFJfMkwJMHgwMDI4CQkvKiAxNiBiaXQgci93CVNvdXJjZSBBZGRyZXNzIDIgKGxvdykgKi8KLSNkZWZpbmUgR01fU1JDX0FERFJfMk0JMHgwMDJjCQkvKiAxNiBiaXQgci93CVNvdXJjZSBBZGRyZXNzIDIgKG1pZGRsZSkgKi8KLSNkZWZpbmUgR01fU1JDX0FERFJfMkgJMHgwMDMwCQkvKiAxNiBiaXQgci93CVNvdXJjZSBBZGRyZXNzIDIgKGhpZ2gpICovCi0KLS8qIE11bHRpY2FzdCBBZGRyZXNzIEhhc2ggUmVnaXN0ZXJzICovCi0jZGVmaW5lIEdNX01DX0FERFJfSDEJMHgwMDM0CQkvKiAxNiBiaXQgci93CU11bHRpY2FzdCBBZGRyZXNzIEhhc2ggMSAqLwotI2RlZmluZSBHTV9NQ19BRERSX0gyCTB4MDAzOAkJLyogMTYgYml0IHIvdwlNdWx0aWNhc3QgQWRkcmVzcyBIYXNoIDIgKi8KLSNkZWZpbmUgR01fTUNfQUREUl9IMwkweDAwM2MJCS8qIDE2IGJpdCByL3cJTXVsdGljYXN0IEFkZHJlc3MgSGFzaCAzICovCi0jZGVmaW5lIEdNX01DX0FERFJfSDQJMHgwMDQwCQkvKiAxNiBiaXQgci93CU11bHRpY2FzdCBBZGRyZXNzIEhhc2ggNCAqLwotCi0vKiBJbnRlcnJ1cHQgU291cmNlIFJlZ2lzdGVycyAqLwotI2RlZmluZSBHTV9UWF9JUlFfU1JDCTB4MDA0NAkJLyogMTYgYml0IHIvbwlUeCBPdmVyZmxvdyBJUlEgU291cmNlICovCi0jZGVmaW5lIEdNX1JYX0lSUV9TUkMJMHgwMDQ4CQkvKiAxNiBiaXQgci9vCVJ4IE92ZXJmbG93IElSUSBTb3VyY2UgKi8KLSNkZWZpbmUgR01fVFJfSVJRX1NSQwkweDAwNGMJCS8qIDE2IGJpdCByL28JVHgvUnggT3Zlci4gSVJRIFNvdXJjZSAqLwotCi0vKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgR01fVFhfSVJRX01TSwkweDAwNTAJCS8qIDE2IGJpdCByL3cJVHggT3ZlcmZsb3cgSVJRIE1hc2sgKi8KLSNkZWZpbmUgR01fUlhfSVJRX01TSwkweDAwNTQJCS8qIDE2IGJpdCByL3cJUnggT3ZlcmZsb3cgSVJRIE1hc2sgKi8KLSNkZWZpbmUgR01fVFJfSVJRX01TSwkweDAwNTgJCS8qIDE2IGJpdCByL3cJVHgvUnggT3Zlci4gSVJRIE1hc2sgKi8KLQotLyogU2VyaWFsIE1hbmFnZW1lbnQgSW50ZXJmYWNlIChTTUkpIFJlZ2lzdGVycyAqLwotI2RlZmluZSBHTV9TTUlfQ1RSTAkJMHgwMDgwCQkvKiAxNiBiaXQgci93CVNNSSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIEdNX1NNSV9EQVRBCQkweDAwODQJCS8qIDE2IGJpdCByL3cJU01JIERhdGEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgR01fUEhZX0FERFIJCTB4MDA4OAkJLyogMTYgYml0IHIvdwlHUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQotLyogTUlCIENvdW50ZXJzICovCi0jZGVmaW5lIEdNX01JQl9DTlRfQkFTRQkweDAxMDAJCS8qIEJhc2UgQWRkcmVzcyBvZiBNSUIgQ291bnRlcnMgKi8KLSNkZWZpbmUgR01fTUlCX0NOVF9TSVpFCTQ0CQkJLyogTnVtYmVyIG9mIE1JQiBDb3VudGVycyAqLwotCi0vKgotICogTUlCIENvdW50ZXJzIGJhc2UgYWRkcmVzcyBkZWZpbml0aW9ucyAobG93IHdvcmQpIC0KLSAqIHVzZSBvZmZzZXQgNCBmb3IgYWNjZXNzIHRvIGhpZ2ggd29yZAkoMzIgYml0IHIvbykKLSAqLwotI2RlZmluZSBHTV9SWEZfVUNfT0sgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDApCS8qIFVuaWNhc3QgRnJhbWVzIFJlY2VpdmVkIE9LICovCi0jZGVmaW5lIEdNX1JYRl9CQ19PSyBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgOCkJLyogQnJvYWRjYXN0IEZyYW1lcyBSZWNlaXZlZCBPSyAqLwotI2RlZmluZSBHTV9SWEZfTVBBVVNFIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAxNikJLyogUGF1c2UgTUFDIEN0cmwgRnJhbWVzIFJlY2VpdmVkICovCi0jZGVmaW5lIEdNX1JYRl9NQ19PSyBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMjQpCS8qIE11bHRpY2FzdCBGcmFtZXMgUmVjZWl2ZWQgT0sgKi8KLSNkZWZpbmUgR01fUlhGX0ZDU19FUlIgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDMyKQkvKiBSeCBGcmFtZSBDaGVjayBTZXEuIEVycm9yICovCi0JLyogR01fTUlCX0NOVF9CQVNFICsgNDA6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNX1JYT19PS19MTyBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgNDgpCS8qIE9jdGV0cyBSZWNlaXZlZCBPSyBMb3cgKi8KLSNkZWZpbmUgR01fUlhPX09LX0hJIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyA1NikJLyogT2N0ZXRzIFJlY2VpdmVkIE9LIEhpZ2ggKi8KLSNkZWZpbmUgR01fUlhPX0VSUl9MTyBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgNjQpCS8qIE9jdGV0cyBSZWNlaXZlZCBJbnZhbGlkIExvdyAqLwotI2RlZmluZSBHTV9SWE9fRVJSX0hJIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyA3MikJLyogT2N0ZXRzIFJlY2VpdmVkIEludmFsaWQgSGlnaCAqLwotI2RlZmluZSBHTV9SWEZfU0hUIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyA4MCkJLyogRnJhbWVzIDw2NCBCeXRlIFJlY2VpdmVkIE9LICovCi0jZGVmaW5lIEdNX1JYRV9GUkFHIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyA4OCkJLyogRnJhbWVzIDw2NCBCeXRlIFJlY2VpdmVkIHdpdGggRkNTIEVyciAqLwotI2RlZmluZSBHTV9SWEZfNjRCIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyA5NikJLyogNjQgQnl0ZSBSeCBGcmFtZSAqLwotI2RlZmluZSBHTV9SWEZfMTI3QiBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMTA0KQkvKiA2NS0xMjcgQnl0ZSBSeCBGcmFtZSAqLwotI2RlZmluZSBHTV9SWEZfMjU1QiBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMTEyKQkvKiAxMjgtMjU1IEJ5dGUgUnggRnJhbWUgKi8KLSNkZWZpbmUgR01fUlhGXzUxMUIgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDEyMCkJLyogMjU2LTUxMSBCeXRlIFJ4IEZyYW1lICovCi0jZGVmaW5lIEdNX1JYRl8xMDIzQiBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMTI4KQkvKiA1MTItMTAyMyBCeXRlIFJ4IEZyYW1lICovCi0jZGVmaW5lIEdNX1JYRl8xNTE4QiBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMTM2KQkvKiAxMDI0LTE1MTggQnl0ZSBSeCBGcmFtZSAqLwotI2RlZmluZSBHTV9SWEZfTUFYX1NaIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAxNDQpCS8qIDE1MTktTWF4U2l6ZSBCeXRlIFJ4IEZyYW1lICovCi0jZGVmaW5lIEdNX1JYRl9MTkdfRVJSIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAxNTIpCS8qIFJ4IEZyYW1lIHRvbyBMb25nIEVycm9yICovCi0jZGVmaW5lIEdNX1JYRl9KQUJfUEtUIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAxNjApCS8qIFJ4IEphYmJlciBQYWNrZXQgRnJhbWUgKi8KLQkvKiBHTV9NSUJfQ05UX0JBU0UgKyAxNjg6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNX1JYRV9GSUZPX09WIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAxNzYpCS8qIFJ4IEZJRk8gb3ZlcmZsb3cgRXZlbnQgKi8KLQkvKiBHTV9NSUJfQ05UX0JBU0UgKyAxODQ6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNX1RYRl9VQ19PSyBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMTkyKQkvKiBVbmljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCi0jZGVmaW5lIEdNX1RYRl9CQ19PSyBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMjAwKQkvKiBCcm9hZGNhc3QgRnJhbWVzIFhtaXR0ZWQgT0sgKi8KLSNkZWZpbmUgR01fVFhGX01QQVVTRSBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMjA4KQkvKiBQYXVzZSBNQUMgQ3RybCBGcmFtZXMgWG1pdHRlZCAqLwotI2RlZmluZSBHTV9UWEZfTUNfT0sgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDIxNikJLyogTXVsdGljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCi0jZGVmaW5lIEdNX1RYT19PS19MTyBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMjI0KQkvKiBPY3RldHMgVHJhbnNtaXR0ZWQgT0sgTG93ICovCi0jZGVmaW5lIEdNX1RYT19PS19ISSBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMjMyKQkvKiBPY3RldHMgVHJhbnNtaXR0ZWQgT0sgSGlnaCAqLwotI2RlZmluZSBHTV9UWEZfNjRCIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAyNDApCS8qIDY0IEJ5dGUgVHggRnJhbWUgKi8KLSNkZWZpbmUgR01fVFhGXzEyN0IgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDI0OCkJLyogNjUtMTI3IEJ5dGUgVHggRnJhbWUgKi8KLSNkZWZpbmUgR01fVFhGXzI1NUIgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDI1NikJLyogMTI4LTI1NSBCeXRlIFR4IEZyYW1lICovCi0jZGVmaW5lIEdNX1RYRl81MTFCIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAyNjQpCS8qIDI1Ni01MTEgQnl0ZSBUeCBGcmFtZSAqLwotI2RlZmluZSBHTV9UWEZfMTAyM0IgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDI3MikJLyogNTEyLTEwMjMgQnl0ZSBUeCBGcmFtZSAqLwotI2RlZmluZSBHTV9UWEZfMTUxOEIgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDI4MCkJLyogMTAyNC0xNTE4IEJ5dGUgVHggRnJhbWUgKi8KLSNkZWZpbmUgR01fVFhGX01BWF9TWiBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMjg4KQkvKiAxNTE5LU1heFNpemUgQnl0ZSBUeCBGcmFtZSAqLwotCS8qIEdNX01JQl9DTlRfQkFTRSArIDI5NjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR01fVFhGX0NPTCBcCi0JCQkoR01fTUlCX0NOVF9CQVNFICsgMzA0KQkvKiBUeCBDb2xsaXNpb24gKi8KLSNkZWZpbmUgR01fVFhGX0xBVF9DT0wgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDMxMikJLyogVHggTGF0ZSBDb2xsaXNpb24gKi8KLSNkZWZpbmUgR01fVFhGX0FCT19DT0wgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDMyMCkJLyogVHggYWJvcnRlZCBkdWUgdG8gRXhjZXMuIENvbC4gKi8KLSNkZWZpbmUgR01fVFhGX01VTF9DT0wgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDMyOCkJLyogVHggTXVsdGlwbGUgQ29sbGlzaW9uICovCi0jZGVmaW5lIEdNX1RYRl9TTkdfQ09MIFwKLQkJCShHTV9NSUJfQ05UX0JBU0UgKyAzMzYpCS8qIFR4IFNpbmdsZSBDb2xsaXNpb24gKi8KLSNkZWZpbmUgR01fVFhFX0ZJRk9fVVIgXAotCQkJKEdNX01JQl9DTlRfQkFTRSArIDM0NCkJLyogVHggRklGTyBVbmRlcnJ1biBFdmVudCAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIEdNQUMgQml0IERlZmluaXRpb25zCi0gKgotICogSWYgdGhlIGJpdCBhY2Nlc3MgYmVoYXZpb3VyIGRpZmZlcnMgZnJvbSB0aGUgcmVnaXN0ZXIgYWNjZXNzIGJlaGF2aW91cgotICogKHIvdywgci9vKSB0aGlzIGlzIGRvY3VtZW50ZWQgYWZ0ZXIgdGhlIGJpdCBudW1iZXIuCi0gKiBUaGUgZm9sbG93aW5nIGJpdCBhY2Nlc3MgYmVoYXZpb3VycyBhcmUgdXNlZDoKLSAqCShzYykJc2VsZiBjbGVhcmluZwotICoJKHIvbykJcmVhZCBvbmx5Ci0gKi8KLQotLyoJR01fR1BfU1RBVAkxNiBiaXQgci9vCUdlbmVyYWwgUHVycG9zZSBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgR01fR1BTUl9TUEVFRAkJKDE8PDE1KSAvKiBCaXQgMTU6CVBvcnQgU3BlZWQgKDEgPSAxMDAgTWJwcykgKi8KLSNkZWZpbmUgR01fR1BTUl9EVVBMRVgJCSgxPDwxNCkgLyogQml0IDE0OglEdXBsZXggTW9kZSAoMSA9IEZ1bGwpICovCi0jZGVmaW5lIEdNX0dQU1JfRkNfVFhfRElTCSgxPDwxMykgLyogQml0IDEzOglUeCBGbG93LUNvbnRyb2wgTW9kZSBEaXNhYmxlZCAqLwotI2RlZmluZSBHTV9HUFNSX0xJTktfVVAJCSgxPDwxMikJLyogQml0IDEyOglMaW5rIFVwIFN0YXR1cyAqLwotI2RlZmluZSBHTV9HUFNSX1BBVVNFCQkoMTw8MTEpCS8qIEJpdCAxMToJUGF1c2UgU3RhdGUgKi8KLSNkZWZpbmUgR01fR1BTUl9UWF9BQ1RJVkUJKDE8PDEwKQkvKiBCaXQgMTA6CVR4IGluIFByb2dyZXNzICovCi0jZGVmaW5lIEdNX0dQU1JfRVhDX0NPTAkJKDE8PDkpCS8qIEJpdCAgOToJRXhjZXNzaXZlIENvbGxpc2lvbnMgT2NjdXJlZCAqLwotI2RlZmluZSBHTV9HUFNSX0xBVF9DT0wJCSgxPDw4KQkvKiBCaXQgIDg6CUxhdGUgQ29sbGlzaW9ucyBPY2N1cmVkICovCi0JCQkJCQkJCS8qIEJpdCAgNy4uNjoJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR01fR1BTUl9QSFlfU1RfQ0gJKDE8PDUpCS8qIEJpdCAgNToJUEhZIFN0YXR1cyBDaGFuZ2UgKi8KLSNkZWZpbmUgR01fR1BTUl9HSUdfU1BFRUQJKDE8PDQpCS8qIEJpdCAgNDoJR2lnYWJpdCBTcGVlZCAoMSA9IDEwMDAgTWJwcykgKi8KLSNkZWZpbmUgR01fR1BTUl9QQVJUX01PREUJKDE8PDMpCS8qIEJpdCAgMzoJUGFydGl0aW9uIG1vZGUgKi8KLSNkZWZpbmUgR01fR1BTUl9GQ19SWF9ESVMJKDE8PDIpCS8qIEJpdCAgMjoJUnggRmxvdy1Db250cm9sIE1vZGUgRGlzYWJsZWQgKi8KLSNkZWZpbmUgR01fR1BTUl9QUk9NX0VOCQkoMTw8MSkJLyogQml0ICAxOglQcm9taXNjdW91cyBNb2RlIEVuYWJsZWQgKi8KLQkJCQkJCQkJLyogQml0ICAwOglyZXNlcnZlZCAqLwotCQotLyoJR01fR1BfQ1RSTAkxNiBiaXQgci93CUdlbmVyYWwgUHVycG9zZSBDb250cm9sIFJlZ2lzdGVyICovCi0JCQkJCQkJCS8qIEJpdCAxNToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR01fR1BDUl9QUk9NX0VOQQkoMTw8MTQpCS8qIEJpdCAxNDoJRW5hYmxlIFByb21pc2N1b3VzIE1vZGUgKi8KLSNkZWZpbmUgR01fR1BDUl9GQ19UWF9ESVMJKDE8PDEzKSAvKiBCaXQgMTM6CURpc2FibGUgVHggRmxvdy1Db250cm9sIE1vZGUgKi8KLSNkZWZpbmUgR01fR1BDUl9UWF9FTkEJCSgxPDwxMikgLyogQml0IDEyOglFbmFibGUgVHJhbnNtaXQgKi8KLSNkZWZpbmUgR01fR1BDUl9SWF9FTkEJCSgxPDwxMSkgLyogQml0IDExOglFbmFibGUgUmVjZWl2ZSAqLwotI2RlZmluZSBHTV9HUENSX0JVUlNUX0VOQQkoMTw8MTApCS8qIEJpdCAxMDoJRW5hYmxlIEJ1cnN0IE1vZGUgKi8KLSNkZWZpbmUgR01fR1BDUl9MT09QX0VOQQkoMTw8OSkJLyogQml0ICA5OglFbmFibGUgTUFDIExvb3BiYWNrIE1vZGUgKi8KLSNkZWZpbmUgR01fR1BDUl9QQVJUX0VOQQkoMTw8OCkJLyogQml0ICA4OglFbmFibGUgUGFydGl0aW9uIE1vZGUgKi8KLSNkZWZpbmUgR01fR1BDUl9HSUdTX0VOQQkoMTw8NykJLyogQml0ICA3OglHaWdhYml0IFNwZWVkICgxMDAwIE1icHMpICovCi0jZGVmaW5lIEdNX0dQQ1JfRkxfUEFTUwkJKDE8PDYpCS8qIEJpdCAgNjoJRm9yY2UgTGluayBQYXNzICovCi0jZGVmaW5lIEdNX0dQQ1JfRFVQX0ZVTEwJKDE8PDUpCS8qIEJpdCAgNToJRnVsbCBEdXBsZXggTW9kZSAqLwotI2RlZmluZSBHTV9HUENSX0ZDX1JYX0RJUwkoMTw8NCkJLyogQml0ICA0OglEaXNhYmxlIFJ4IEZsb3ctQ29udHJvbCBNb2RlICovCi0jZGVmaW5lIEdNX0dQQ1JfU1BFRURfMTAwCSgxPDwzKSAgLyogQml0ICAzOglQb3J0IFNwZWVkIDEwMCBNYnBzICovCi0jZGVmaW5lIEdNX0dQQ1JfQVVfRFVQX0RJUwkoMTw8MikJLyogQml0ICAyOglEaXNhYmxlIEF1dG8tVXBkYXRlIER1cGxleCAqLwotI2RlZmluZSBHTV9HUENSX0FVX0ZDVF9ESVMJKDE8PDEpCS8qIEJpdCAgMToJRGlzYWJsZSBBdXRvLVVwZGF0ZSBGbG93LUMuICovCi0jZGVmaW5lIEdNX0dQQ1JfQVVfU1BEX0RJUwkoMTw8MCkJLyogQml0ICAwOglEaXNhYmxlIEF1dG8tVXBkYXRlIFNwZWVkICovCi0KLSNkZWZpbmUgR01fR1BDUl9TUEVFRF8xMDAwCShHTV9HUENSX0dJR1NfRU5BIHwgR01fR1BDUl9TUEVFRF8xMDApCi0jZGVmaW5lIEdNX0dQQ1JfQVVfQUxMX0RJUwkoR01fR1BDUl9BVV9EVVBfRElTIHwgR01fR1BDUl9BVV9GQ1RfRElTIHxcCi0JCQkJCQkJIEdNX0dQQ1JfQVVfU1BEX0RJUykKLQkKLS8qCUdNX1RYX0NUUkwJCQkJMTYgYml0IHIvdwlUcmFuc21pdCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIEdNX1RYQ1JfRk9SQ0VfSkFNCSgxPDwxNSkJLyogQml0IDE1OglGb3JjZSBKYW0gLyBGbG93LUNvbnRyb2wgKi8KLSNkZWZpbmUgR01fVFhDUl9DUkNfRElTCQkoMTw8MTQpCS8qIEJpdCAxNDoJRGlzYWJsZSBpbnNlcnRpb24gb2YgQ1JDICovCi0jZGVmaW5lIEdNX1RYQ1JfUEFEX0RJUwkJKDE8PDEzKQkvKiBCaXQgMTM6CURpc2FibGUgcGFkZGluZyBvZiBwYWNrZXRzICovCi0jZGVmaW5lIEdNX1RYQ1JfQ09MX1RIUl9NU0sJKDc8PDEwKQkvKiBCaXQgMTIuLjEwOglDb2xsaXNpb24gVGhyZXNob2xkICovCi0KLSNkZWZpbmUgVFhfQ09MX1RIUih4KQkJKFNISUZUMTAoeCkgJiBHTV9UWENSX0NPTF9USFJfTVNLKQotCi0jZGVmaW5lIFRYX0NPTF9ERUYJCQkweDA0Ci0JCi0vKglHTV9SWF9DVFJMCQkJCTE2IGJpdCByL3cJUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIEdNX1JYQ1JfVUNGX0VOQQkJKDE8PDE1KQkvKiBCaXQgMTU6CUVuYWJsZSBVbmljYXN0IGZpbHRlcmluZyAqLwotI2RlZmluZSBHTV9SWENSX01DRl9FTkEJCSgxPDwxNCkJLyogQml0IDE0OglFbmFibGUgTXVsdGljYXN0IGZpbHRlcmluZyAqLwotI2RlZmluZSBHTV9SWENSX0NSQ19ESVMJCSgxPDwxMykJLyogQml0IDEzOglSZW1vdmUgNC1ieXRlIENSQyAqLwotI2RlZmluZSBHTV9SWENSX1BBU1NfRkMJCSgxPDwxMikJLyogQml0IDEyOglQYXNzIEZDIHBhY2tldHMgdG8gRklGTyAqLwotCQotLyoJR01fVFhfUEFSQU0JCQkJMTYgYml0IHIvdwlUcmFuc21pdCBQYXJhbWV0ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgR01fVFhQQV9KQU1MRU5fTVNLCSgweDAzPDwxNCkJLyogQml0IDE1Li4xNDoJSmFtIExlbmd0aCAqLwotI2RlZmluZSBHTV9UWFBBX0pBTUlQR19NU0sJKDB4MWY8PDkpCS8qIEJpdCAxMy4uOToJSmFtIElQRyAqLwotI2RlZmluZSBHTV9UWFBBX0pBTURBVF9NU0sJKDB4MWY8PDQpCS8qIEJpdCAgOC4uNDoJSVBHIEphbSB0byBEYXRhICovCi0JCQkJCQkJCS8qIEJpdCAgMy4uMDoJcmVzZXJ2ZWQgKi8KLQotI2RlZmluZSBUWF9KQU1fTEVOX1ZBTCh4KQkoU0hJRlQxNCh4KSAmIEdNX1RYUEFfSkFNTEVOX01TSykKLSNkZWZpbmUgVFhfSkFNX0lQR19WQUwoeCkJKFNISUZUOSh4KSAmIEdNX1RYUEFfSkFNSVBHX01TSykKLSNkZWZpbmUgVFhfSVBHX0pBTV9EQVRBKHgpCShTSElGVDQoeCkgJiBHTV9UWFBBX0pBTURBVF9NU0spCi0KLSNkZWZpbmUgVFhfSkFNX0xFTl9ERUYJCTB4MDMKLSNkZWZpbmUgVFhfSkFNX0lQR19ERUYJCTB4MGIKLSNkZWZpbmUgVFhfSVBHX0pBTV9ERUYJCTB4MWMKLQotLyoJR01fU0VSSUFMX01PREUJCQkxNiBiaXQgci93CVNlcmlhbCBNb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEdNX1NNT0RfREFUQUJMX01TSwkoMHgxZjw8MTEpCS8qIEJpdCAxNS4uMTE6CURhdGEgQmxpbmRlciAoci9vKSAqLwotI2RlZmluZSBHTV9TTU9EX0xJTUlUXzQJCSgxPDwxMCkJLyogQml0IDEwOgk0IGNvbnNlY3V0aXZlIFR4IHRyaWFscyAqLwotI2RlZmluZSBHTV9TTU9EX1ZMQU5fRU5BCSgxPDw5KQkvKiBCaXQgIDk6CUVuYWJsZSBWTEFOICAoTWF4LiBGcmFtZSBMZW4pICovCi0jZGVmaW5lIEdNX1NNT0RfSlVNQk9fRU5BCSgxPDw4KQkvKiBCaXQgIDg6CUVuYWJsZSBKdW1ibyAoTWF4LiBGcmFtZSBMZW4pICovCi0JCQkJCQkJCS8qIEJpdCAgNy4uNToJcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgR01fU01PRF9JUEdfTVNLCQkweDFmCS8qIEJpdCA0Li4wOglJbnRlci1QYWNrZXQgR2FwIChJUEcpICovCi0JCi0jZGVmaW5lIERBVEFfQkxJTkRfVkFMKHgpCShTSElGVDExKHgpICYgR01fU01PRF9EQVRBQkxfTVNLKQotI2RlZmluZSBEQVRBX0JMSU5EX0RFRgkJMHgwNAotCi0jZGVmaW5lIElQR19EQVRBX1ZBTCh4KQkJKHggJiBHTV9TTU9EX0lQR19NU0spCi0jZGVmaW5lIElQR19EQVRBX0RFRgkJMHgxZQotCi0vKglHTV9TTUlfQ1RSTAkJCQkxNiBiaXQgci93CVNNSSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIEdNX1NNSV9DVF9QSFlfQV9NU0sJKDB4MWY8PDExKQkvKiBCaXQgMTUuLjExOglQSFkgRGV2aWNlIEFkZHJlc3MgKi8KLSNkZWZpbmUgR01fU01JX0NUX1JFR19BX01TSwkoMHgxZjw8NikJLyogQml0IDEwLi4gNjoJUEhZIFJlZ2lzdGVyIEFkZHJlc3MgKi8KLSNkZWZpbmUgR01fU01JX0NUX09QX1JECQkoMTw8NSkJLyogQml0ICA1OglPcENvZGUgUmVhZCAoMD1Xcml0ZSkqLwotI2RlZmluZSBHTV9TTUlfQ1RfUkRfVkFMCSgxPDw0KQkvKiBCaXQgIDQ6CVJlYWQgVmFsaWQgKFJlYWQgY29tcGxldGVkKSAqLwotI2RlZmluZSBHTV9TTUlfQ1RfQlVTWQkJKDE8PDMpCS8qIEJpdCAgMzoJQnVzeSAoT3BlcmF0aW9uIGluIHByb2dyZXNzKSAqLwotCQkJCQkJCQkvKiBCaXQgICAyLi4wOglyZXNlcnZlZCAqLwotCQotI2RlZmluZSBHTV9TTUlfQ1RfUEhZX0FEKHgpCShTSElGVDExKHgpICYgR01fU01JX0NUX1BIWV9BX01TSykKLSNkZWZpbmUgR01fU01JX0NUX1JFR19BRCh4KQkoU0hJRlQ2KHgpICYgR01fU01JX0NUX1JFR19BX01TSykKLQotCS8qCUdNX1BIWV9BRERSCQkJCTE2IGJpdCByL3cJR1BIWSBBZGRyZXNzIFJlZ2lzdGVyICovCi0JCQkJCQkJCS8qIEJpdCAgMTUuLjY6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNX1BBUl9NSUJfQ0xSCQkoMTw8NSkJLyogQml0ICA1OglTZXQgTUlCIENsZWFyIENvdW50ZXIgTW9kZSAqLwotI2RlZmluZSBHTV9QQVJfTUlCX1RTVAkJKDE8PDQpCS8qIEJpdCAgNDoJTUlCIExvYWQgQ291bnRlciAoVGVzdCBNb2RlKSAqLwotCQkJCQkJCQkvKiBCaXQgICAzLi4wOglyZXNlcnZlZCAqLwotCQotLyogUmVjZWl2ZSBGcmFtZSBTdGF0dXMgRW5jb2RpbmcgKi8KLSNkZWZpbmUgR01SX0ZTX0xFTgkoMHhmZmZmVUw8PDE2KQkvKiBCaXQgMzEuLjE2OglSeCBGcmFtZSBMZW5ndGggKi8KLQkJCQkJCQkJLyogQml0ICAxNS4uMTQ6CXJlc2VydmVkICovCi0jZGVmaW5lIEdNUl9GU19WTEFOCQkoMUw8PDEzKQkvKiBCaXQgMTM6CVZMQU4gUGFja2V0ICovCi0jZGVmaW5lIEdNUl9GU19KQUJCRVIJKDFMPDwxMikJLyogQml0IDEyOglKYWJiZXIgUGFja2V0ICovCi0jZGVmaW5lIEdNUl9GU19VTl9TSVpFCSgxTDw8MTEpCS8qIEJpdCAxMToJVW5kZXJzaXplIFBhY2tldCAqLwotI2RlZmluZSBHTVJfRlNfTUMJCSgxTDw8MTApCS8qIEJpdCAxMDoJTXVsdGljYXN0IFBhY2tldCAqLwotI2RlZmluZSBHTVJfRlNfQkMJCSgxTDw8OSkJCS8qIEJpdCAgOToJQnJvYWRjYXN0IFBhY2tldCAqLwotI2RlZmluZSBHTVJfRlNfUlhfT0sJKDFMPDw4KQkJLyogQml0ICA4OglSZWNlaXZlIE9LIChHb29kIFBhY2tldCkgKi8KLSNkZWZpbmUgR01SX0ZTX0dPT0RfRkMJKDFMPDw3KQkJLyogQml0ICA3OglHb29kIEZsb3ctQ29udHJvbCBQYWNrZXQgKi8KLSNkZWZpbmUgR01SX0ZTX0JBRF9GQwkoMUw8PDYpCQkvKiBCaXQgIDY6CUJhZCAgRmxvdy1Db250cm9sIFBhY2tldCAqLwotI2RlZmluZSBHTVJfRlNfTUlJX0VSUgkoMUw8PDUpCQkvKiBCaXQgIDU6CU1JSSBFcnJvciAqLwotI2RlZmluZSBHTVJfRlNfTE9OR19FUlIJKDFMPDw0KQkJLyogQml0ICA0OglUb28gTG9uZyBQYWNrZXQgKi8KLSNkZWZpbmUgR01SX0ZTX0ZSQUdNRU5UCSgxTDw8MykJCS8qIEJpdCAgMzoJRnJhZ21lbnQgKi8KLQkJCQkJCQkJLyogQml0ICAyOglyZXNlcnZlZCAqLwotI2RlZmluZSBHTVJfRlNfQ1JDX0VSUgkoMUw8PDEpCQkvKiBCaXQgIDE6CUNSQyBFcnJvciAqLwotI2RlZmluZSBHTVJfRlNfUlhfRkZfT1YJKDFMPDwwKQkJLyogQml0ICAwOglSeCBGSUZPIE92ZXJmbG93ICovCi0KLS8qCi0gKiBHTVJfRlNfQU5ZX0VSUiAoYW5hbG9nb3VzIHRvIFhNUl9GU19BTllfRVJSKQotICovCi0jZGVmaW5lIEdNUl9GU19BTllfRVJSCShHTVJfRlNfQ1JDX0VSUiB8IFwKLQkJCUdNUl9GU19MT05HX0VSUiB8IFwKLQkJCUdNUl9GU19NSUlfRVJSIHwgXAotCQkJR01SX0ZTX0JBRF9GQyB8IFwKLQkJCUdNUl9GU19HT09EX0ZDIHwgXAotCQkJR01SX0ZTX0pBQkJFUikKLQotLyogUnggR01BQyBGSUZPIEZsdXNoIE1hc2sgKGRlZmF1bHQpICovCi0jZGVmaW5lIFJYX0ZGX0ZMX0RFRl9NU0sJKEdNUl9GU19DUkNfRVJSIHwgXAotCQkJR01SX0ZTX1JYX0ZGX09WIHwgXAotCQkJR01SX0ZTX01JSV9FUlIgfCBcCi0JCQlHTVJfRlNfQkFEX0ZDIHwgXAotCQkJR01SX0ZTX0dPT0RfRkMgfCBcCi0JCQlHTVJfRlNfVU5fU0laRSB8IFwKLQkJCUdNUl9GU19KQUJCRVIpCi0KLS8qIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYJLyogX19jcGx1c3BsdXMgKi8KLQotI2VuZGlmCS8qIF9fSU5DX1hNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2FkZHIuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2thZGRyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNmM1NmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2FkZHIuYworKysgL2Rldi9udWxsCkBAIC0xLDE3ODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrYWRkci5jCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBBRERSLU1vZHVsZQotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjUyICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzA2LzAyIDEzOjQ2OjE1ICQKLSAqIFB1cnBvc2U6CU1hbmFnZSBBZGRyZXNzZXMgKE11bHRpY2FzdCBhbmQgVW5pY2FzdCkgYW5kIFByb21pc2N1b3VzIE1vZGUuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdCBHbWJILgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFRoaXMgbW9kdWxlIGlzIGludGVuZGVkIHRvIG1hbmFnZSBtdWx0aWNhc3QgYWRkcmVzc2VzLCBhZGRyZXNzIG92ZXJyaWRlLAotICogYW5kIHByb21pc2N1b3VzIG1vZGUgb24gR0VuZXNpcyBhbmQgWXVrb24gYWRhcHRlcnMuCi0gKgotICogQWRkcmVzcyBMYXlvdXQ6Ci0gKglwb3J0IGFkZHJlc3M6CQlwaHlzaWNhbCBNQUMgYWRkcmVzcwotICoJMXN0IGV4YWN0IG1hdGNoOglsb2dpY2FsIE1BQyBhZGRyZXNzIChHRW5lc2lzIG9ubHkpCi0gKgkybmQgZXhhY3QgbWF0Y2g6CVJMTVQgbXVsdGljYXN0IChHRW5lc2lzIG9ubHkpCi0gKglleGFjdCBtYXRjaCAzLTEzOglPUy1zcGVjaWZpYyBtdWx0aWNhc3RzIChHRW5lc2lzIG9ubHkpCi0gKgotICogSW5jbHVkZSBGaWxlIEhpZXJhcmNoeToKLSAqCi0gKgkic2tkcnYxc3QuaCIKLSAqCSJza2RydjJuZC5oIgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZiAoZGVmaW5lZChERUJVRykgfHwgKCghZGVmaW5lZChMSU5UKSkgJiYgKCFkZWZpbmVkKFNLX1NMSU0pKSkpCi1zdGF0aWMgY29uc3QgY2hhciBTeXNLb25uZWN0RmlsZUlkW10gPQotCSJAKCMpICRJZDogc2thZGRyLmMsdiAxLjUyIDIwMDMvMDYvMDIgMTM6NDY6MTUgdHNjaGlsbGkgRXhwICQgKEMpIE1hcnZlbGwuIjsKLSNlbmRpZiAvKiBERUJVRyB8fCFMSU5UIHx8ICFTS19TTElNICovCi0KLSNkZWZpbmUgX19TS0FERFJfQwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCS8qIGNwbHVzcGx1cyAqLwotCi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLQotLyogZGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jZGVmaW5lIFhNQUNfUE9MWQkweEVEQjg4MzIwVUwJLyogQ1JDMzItUG9seSAtIFhNQUM6IExpdHRsZSBFbmRpYW4gKi8KLSNkZWZpbmUgR01BQ19QT0xZCTB4MDRDMTFEQjdMCS8qIENSQzE2LVBvbHkgLSBHTUFDOiBMaXR0bGUgRW5kaWFuICovCi0jZGVmaW5lIEhBU0hfQklUUwk2CQkJCS8qICNiaXRzIGluIGhhc2ggKi8KLSNkZWZpbmUJU0tfTUNfQklUCTB4MDEKLQotLyogRXJyb3IgbnVtYmVycyBhbmQgbWVzc2FnZXMuICovCi0KLSNkZWZpbmUgU0tFUlJfQUREUl9FMDAxCQkoU0tfRVJSQkFTRV9BRERSICsgMCkKLSNkZWZpbmUgU0tFUlJfQUREUl9FMDAxTVNHCSJCYWQgRmxhZ3MuIgotI2RlZmluZSBTS0VSUl9BRERSX0UwMDIJCShTS0VSUl9BRERSX0UwMDEgKyAxKQotI2RlZmluZSBTS0VSUl9BRERSX0UwMDJNU0cJIk5ldyBFcnJvci4iCi0KLS8qIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE5vbmUuICovCi0KLS8qIGdsb2JhbCB2YXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIDY0LWJpdCBoYXNoIHZhbHVlcyB3aXRoIGFsbCBiaXRzIHNldC4gKi8KLQotc3RhdGljIGNvbnN0IFNLX1UxNglPbmVzSGFzaFs0XSA9IHsweEZGRkYsIDB4RkZGRiwgMHhGRkZGLCAweEZGRkZ9OwotCi0vKiBsb2NhbCB2YXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgREVCVUcKLXN0YXRpYyBpbnQJTmV4dDBbU0tfTUFYX01BQ1NdID0gezB9OwotI2VuZGlmCS8qIERFQlVHICovCi0KLXN0YXRpYyBpbnQgU2tBZGRyR21hY01jQWRkKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBQb3J0TnVtYmVyLAotCQkJICAgU0tfTUFDX0FERFIgKnBNYywgaW50IEZsYWdzKTsKLXN0YXRpYyBpbnQgU2tBZGRyR21hY01jQ2xlYXIoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIFBvcnROdW1iZXIsCi0JCQkgICAgIGludCBGbGFncyk7Ci1zdGF0aWMgaW50IFNrQWRkckdtYWNNY1VwZGF0ZShTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgUG9ydE51bWJlcik7Ci1zdGF0aWMgaW50IFNrQWRkckdtYWNQcm9taXNjdW91c0NoYW5nZShTS19BQyAqcEFDLCBTS19JT0MgSW9DLAotCQkJCSAgICAgICBTS19VMzIgUG9ydE51bWJlciwgaW50IE5ld1Byb21Nb2RlKTsKLXN0YXRpYyBpbnQgU2tBZGRyWG1hY01jQWRkKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBQb3J0TnVtYmVyLAotCQkJICAgU0tfTUFDX0FERFIgKnBNYywgaW50IEZsYWdzKTsKLXN0YXRpYyBpbnQgU2tBZGRyWG1hY01jQ2xlYXIoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIFBvcnROdW1iZXIsCi0JCQkgICAgIGludCBGbGFncyk7Ci1zdGF0aWMgaW50IFNrQWRkclhtYWNNY1VwZGF0ZShTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgUG9ydE51bWJlcik7Ci1zdGF0aWMgaW50IFNrQWRkclhtYWNQcm9taXNjdW91c0NoYW5nZShTS19BQyAqcEFDLCBTS19JT0MgSW9DLAotCQkJCSAgICAgICBTS19VMzIgUG9ydE51bWJlciwgaW50IE5ld1Byb21Nb2RlKTsKLQotLyogZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrQWRkckluaXQgLSBpbml0aWFsaXplIGRhdGEsIHNldCBzdGF0ZSB0byBpbml0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKgotICoJU0tfSU5JVF9EQVRBCi0gKgk9PT09PT09PT09PT0KLSAqCi0gKglUaGlzIHJvdXRpbmUgY2xlYXJzIHRoZSBtdWx0aWNhc3QgdGFibGVzIGFuZCByZXNldHMgcHJvbWlzY3VvdXMgbW9kZS4KLSAqCVNvbWUgZW50cmllcyBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSAibG9naWNhbCBNQUMgYWRkcmVzcyIsIHRoZQotICoJU0stUkxNVCBtdWx0aWNhc3QgYWRkcmVzcywgYW5kIHRoZSBCUERVIG11bHRpY2FzdCBhZGRyZXNzLgotICoKLSAqCi0gKglTS19JTklUX0lPCi0gKgk9PT09PT09PT09Ci0gKgotICoJQWxsIHBlcm1hbmVudCBNQUMgYWRkcmVzc2VzIGFyZSByZWFkIGZyb20gRVBST00uCi0gKglJZiB0aGUgY3VycmVudCBNQUMgYWRkcmVzc2VzIGFyZSBub3QgYWxyZWFkeSBzZXQgaW4gc29mdHdhcmUsCi0gKgl0aGV5IGFyZSBzZXQgdG8gdGhlIHZhbHVlcyBvZiB0aGUgcGVybWFuZW50IGFkZHJlc3Nlcy4KLSAqCVRoZSBjdXJyZW50IGFkZHJlc3NlcyBhcmUgd3JpdHRlbiB0byB0aGUgY29ycmVzcG9uZGluZyBNQUMuCi0gKgotICoKLSAqCVNLX0lOSVRfUlVOCi0gKgk9PT09PT09PT09PQotICoKLSAqCU5vdGhpbmcuCi0gKgotICogQ29udGV4dDoKLSAqCWluaXQsIHBhZ2VhYmxlCi0gKgotICogUmV0dXJuczoKLSAqCVNLX0FERFJfU1VDQ0VTUwotICovCi1pbnQJU2tBZGRySW5pdCgKLVNLX0FDCSpwQUMsCS8qIHRoZSBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIEkvTyBjb250ZXh0ICovCi1pbnQJCUxldmVsKQkvKiBpbml0aWFsaXphdGlvbiBsZXZlbCAqLwotewotCWludAkJCWo7Ci0JU0tfVTMyCQlpOwotCVNLX1U4CQkqSW5BZGRyOwotCVNLX1UxNgkJKk91dEFkZHI7Ci0JU0tfQUREUl9QT1JUCSpwQVBvcnQ7Ci0KLQlzd2l0Y2ggKExldmVsKSB7Ci0JY2FzZSBTS19JTklUX0RBVEE6Ci0JCVNLX01FTVNFVCgoY2hhciAqKSAmcEFDLT5BZGRyLCAoU0tfVTgpIDAsCi0gICAgICAgICAgICAoU0tfVTE2KSBzaXplb2YoU0tfQUREUikpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBTS19NQVhfTUFDUzsgaSsrKSB7Ci0JCQlwQVBvcnQgPSAmcEFDLT5BZGRyLlBvcnRbaV07Ci0JCQlwQVBvcnQtPlByb21Nb2RlID0gU0tfUFJPTV9NT0RFX05PTkU7Ci0JCQkKLQkJCXBBUG9ydC0+Rmlyc3RFeGFjdE1hdGNoUmxtdCA9IFNLX0FERFJfRklSU1RfTUFUQ0hfUkxNVDsKLQkJCXBBUG9ydC0+Rmlyc3RFeGFjdE1hdGNoRHJ2ID0gU0tfQUREUl9GSVJTVF9NQVRDSF9EUlY7Ci0JCQlwQVBvcnQtPk5leHRFeGFjdE1hdGNoUmxtdCA9IFNLX0FERFJfRklSU1RfTUFUQ0hfUkxNVDsKLQkJCXBBUG9ydC0+TmV4dEV4YWN0TWF0Y2hEcnYgPSBTS19BRERSX0ZJUlNUX01BVENIX0RSVjsKLQkJfQotI2lmZGVmIHhERUJVRwotCQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYX01BQ1M7IGkrKykgewotCQkJaWYgKHBBQy0+QWRkci5Qb3J0W2ldLk5leHRFeGFjdE1hdGNoUmxtdCA8Ci0JCQkJU0tfQUREUl9GSVJTVF9NQVRDSF9STE1UKSB7Ci0JCQkJTmV4dDBbaV0gfD0gNDsKLQkJCX0KLQkJfQotI2VuZGlmCS8qIERFQlVHICovCi0JCS8qIHBBQy0+QWRkci5Jbml0RG9uZSA9IFNLX0lOSVRfREFUQTsgKi8KLQkJYnJlYWs7Ci0KLSAgICBjYXNlIFNLX0lOSVRfSU86Ci0jaWZuZGVmIFNLX05PX1JMTVQKLQkJZm9yIChpID0gMDsgaSA8IFNLX01BWF9ORVRTOyBpKyspIHsKLQkJCXBBQy0+QWRkci5OZXRbaV0uQWN0aXZlUG9ydCA9IHBBQy0+UmxtdC5OZXRbaV0uQWN0aXZlUG9ydDsKLQkJfQotI2VuZGlmIC8qICFTS19OT19STE1UICovCi0jaWZkZWYgeERFQlVHCi0JCWZvciAoaSA9IDA7IGkgPCBTS19NQVhfTUFDUzsgaSsrKSB7Ci0JCQlpZiAocEFDLT5BZGRyLlBvcnRbaV0uTmV4dEV4YWN0TWF0Y2hSbG10IDwKLQkJCQlTS19BRERSX0ZJUlNUX01BVENIX1JMTVQpIHsKLQkJCQlOZXh0MFtpXSB8PSA4OwotCQkJfQotCQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLQkJCi0JCS8qIFJlYWQgcGVybWFuZW50IGxvZ2ljYWwgTUFDIGFkZHJlc3MgZnJvbSBDb250cm9sIFJlZ2lzdGVyIEZpbGUuICovCi0JCWZvciAoaiA9IDA7IGogPCBTS19NQUNfQUREUl9MRU47IGorKykgewotCQkJSW5BZGRyID0gKFNLX1U4ICopICZwQUMtPkFkZHIuTmV0WzBdLlBlcm1hbmVudE1hY0FkZHJlc3MuYVtqXTsKLQkJCVNLX0lOOChJb0MsIEIyX01BQ18xICsgaiwgSW5BZGRyKTsKLQkJfQotCi0JCWlmICghcEFDLT5BZGRyLk5ldFswXS5DdXJyZW50TWFjQWRkcmVzc1NldCkgewotCQkJLyogU2V0IHRoZSBjdXJyZW50IGxvZ2ljYWwgTUFDIGFkZHJlc3MgdG8gdGhlIHBlcm1hbmVudCBvbmUuICovCi0JCQlwQUMtPkFkZHIuTmV0WzBdLkN1cnJlbnRNYWNBZGRyZXNzID0KLQkJCQlwQUMtPkFkZHIuTmV0WzBdLlBlcm1hbmVudE1hY0FkZHJlc3M7Ci0JCQlwQUMtPkFkZHIuTmV0WzBdLkN1cnJlbnRNYWNBZGRyZXNzU2V0ID0gU0tfVFJVRTsKLQkJfQotCi0JCS8qIFNldCB0aGUgY3VycmVudCBsb2dpY2FsIE1BQyBhZGRyZXNzLiAqLwotCQlwQUMtPkFkZHIuUG9ydFtwQUMtPkFkZHIuTmV0WzBdLkFjdGl2ZVBvcnRdLkV4YWN0WzBdID0KLQkJCXBBQy0+QWRkci5OZXRbMF0uQ3VycmVudE1hY0FkZHJlc3M7Ci0jaWYgU0tfTUFYX05FVFMgPiAxCi0JCS8qIFNldCBsb2dpY2FsIE1BQyBhZGRyZXNzIGZvciBuZXQgMiB0byAobG9nIHwgMykuICovCi0JCWlmICghcEFDLT5BZGRyLk5ldFsxXS5DdXJyZW50TWFjQWRkcmVzc1NldCkgewotCQkJcEFDLT5BZGRyLk5ldFsxXS5QZXJtYW5lbnRNYWNBZGRyZXNzID0KLQkJCQlwQUMtPkFkZHIuTmV0WzBdLlBlcm1hbmVudE1hY0FkZHJlc3M7Ci0JCQlwQUMtPkFkZHIuTmV0WzFdLlBlcm1hbmVudE1hY0FkZHJlc3MuYVs1XSB8PSAzOwotCQkJLyogU2V0IHRoZSBjdXJyZW50IGxvZ2ljYWwgTUFDIGFkZHJlc3MgdG8gdGhlIHBlcm1hbmVudCBvbmUuICovCi0JCQlwQUMtPkFkZHIuTmV0WzFdLkN1cnJlbnRNYWNBZGRyZXNzID0KLQkJCQlwQUMtPkFkZHIuTmV0WzFdLlBlcm1hbmVudE1hY0FkZHJlc3M7Ci0JCQlwQUMtPkFkZHIuTmV0WzFdLkN1cnJlbnRNYWNBZGRyZXNzU2V0ID0gU0tfVFJVRTsKLQkJfQotI2VuZGlmCS8qIFNLX01BWF9ORVRTID4gMSAqLwotCi0jaWZkZWYgREVCVUcKLQkJZm9yIChpID0gMDsgaSA8IChTS19VMzIpIHBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9JTklULAotCQkJCSgiUGVybWFuZW50IE1BQyBBZGRyZXNzIChOZXQlZCk6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAotCQkJCQlpLAotCQkJCQlwQUMtPkFkZHIuTmV0W2ldLlBlcm1hbmVudE1hY0FkZHJlc3MuYVswXSwKLQkJCQkJcEFDLT5BZGRyLk5ldFtpXS5QZXJtYW5lbnRNYWNBZGRyZXNzLmFbMV0sCi0JCQkJCXBBQy0+QWRkci5OZXRbaV0uUGVybWFuZW50TWFjQWRkcmVzcy5hWzJdLAotCQkJCQlwQUMtPkFkZHIuTmV0W2ldLlBlcm1hbmVudE1hY0FkZHJlc3MuYVszXSwKLQkJCQkJcEFDLT5BZGRyLk5ldFtpXS5QZXJtYW5lbnRNYWNBZGRyZXNzLmFbNF0sCi0JCQkJCXBBQy0+QWRkci5OZXRbaV0uUGVybWFuZW50TWFjQWRkcmVzcy5hWzVdKSkKLQkJCQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9BRERSLCBTS19EQkdDQVRfSU5JVCwKLQkJCQkoIkxvZ2ljYWwgTUFDIEFkZHJlc3MgKE5ldCVkKTogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCi0JCQkJCWksCi0JCQkJCXBBQy0+QWRkci5OZXRbaV0uQ3VycmVudE1hY0FkZHJlc3MuYVswXSwKLQkJCQkJcEFDLT5BZGRyLk5ldFtpXS5DdXJyZW50TWFjQWRkcmVzcy5hWzFdLAotCQkJCQlwQUMtPkFkZHIuTmV0W2ldLkN1cnJlbnRNYWNBZGRyZXNzLmFbMl0sCi0JCQkJCXBBQy0+QWRkci5OZXRbaV0uQ3VycmVudE1hY0FkZHJlc3MuYVszXSwKLQkJCQkJcEFDLT5BZGRyLk5ldFtpXS5DdXJyZW50TWFjQWRkcmVzcy5hWzRdLAotCQkJCQlwQUMtPkFkZHIuTmV0W2ldLkN1cnJlbnRNYWNBZGRyZXNzLmFbNV0pKQotCQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLQotCQlmb3IgKGkgPSAwOyBpIDwgKFNLX1UzMikgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJCXBBUG9ydCA9ICZwQUMtPkFkZHIuUG9ydFtpXTsKLQotCQkJLyogUmVhZCBwZXJtYW5lbnQgcG9ydCBhZGRyZXNzZXMgZnJvbSBDb250cm9sIFJlZ2lzdGVyIEZpbGUuICovCi0JCQlmb3IgKGogPSAwOyBqIDwgU0tfTUFDX0FERFJfTEVOOyBqKyspIHsKLQkJCQlJbkFkZHIgPSAoU0tfVTggKikgJnBBUG9ydC0+UGVybWFuZW50TWFjQWRkcmVzcy5hW2pdOwotCQkJCVNLX0lOOChJb0MsIEIyX01BQ18yICsgOCAqIGkgKyBqLCBJbkFkZHIpOwotCQkJfQotCi0JCQlpZiAoIXBBUG9ydC0+Q3VycmVudE1hY0FkZHJlc3NTZXQpIHsKLQkJCQkvKgotCQkJCSAqIFNldCB0aGUgY3VycmVudCBhbmQgcHJldmlvdXMgcGh5c2ljYWwgTUFDIGFkZHJlc3MKLQkJCQkgKiBvZiB0aGlzIHBvcnQgdG8gaXRzIHBlcm1hbmVudCBNQUMgYWRkcmVzcy4KLQkJCQkgKi8KLQkJCQlwQVBvcnQtPkN1cnJlbnRNYWNBZGRyZXNzID0gcEFQb3J0LT5QZXJtYW5lbnRNYWNBZGRyZXNzOwotCQkJCXBBUG9ydC0+UHJldmlvdXNNYWNBZGRyZXNzID0gcEFQb3J0LT5QZXJtYW5lbnRNYWNBZGRyZXNzOwotCQkJCXBBUG9ydC0+Q3VycmVudE1hY0FkZHJlc3NTZXQgPSBTS19UUlVFOwotCQkJfQotCi0JCQkvKiBTZXQgcG9ydCdzIGN1cnJlbnQgcGh5c2ljYWwgTUFDIGFkZHJlc3MuICovCi0JCQlPdXRBZGRyID0gKFNLX1UxNiAqKSAmcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzBdOwotI2lmZGVmIEdFTkVTSVMKLQkJCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQkJWE1fT1VUQUREUihJb0MsIGksIFhNX1NBLCBPdXRBZGRyKTsKLQkJCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0jaWZkZWYgWVVLT04KLQkJCWlmICghcEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkJCUdNX09VVEFERFIoSW9DLCBpLCBHTV9TUkNfQUREUl8xTCwgT3V0QWRkcik7Ci0JCQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLSNpZmRlZiBERUJVRwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9BRERSLCBTS19EQkdDQVRfSU5JVCwKLQkJCQkoIlNrQWRkckluaXQ6IFBlcm1hbmVudCBQaHlzaWNhbCBNQUMgQWRkcmVzczogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCi0JCQkJCXBBUG9ydC0+UGVybWFuZW50TWFjQWRkcmVzcy5hWzBdLAotCQkJCQlwQVBvcnQtPlBlcm1hbmVudE1hY0FkZHJlc3MuYVsxXSwKLQkJCQkJcEFQb3J0LT5QZXJtYW5lbnRNYWNBZGRyZXNzLmFbMl0sCi0JCQkJCXBBUG9ydC0+UGVybWFuZW50TWFjQWRkcmVzcy5hWzNdLAotCQkJCQlwQVBvcnQtPlBlcm1hbmVudE1hY0FkZHJlc3MuYVs0XSwKLQkJCQkJcEFQb3J0LT5QZXJtYW5lbnRNYWNBZGRyZXNzLmFbNV0pKQotCQkJCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9JTklULAotCQkJCSgiU2tBZGRySW5pdDogUGh5c2ljYWwgTUFDIEFkZHJlc3M6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAotCQkJCQlwQVBvcnQtPkN1cnJlbnRNYWNBZGRyZXNzLmFbMF0sCi0JCQkJCXBBUG9ydC0+Q3VycmVudE1hY0FkZHJlc3MuYVsxXSwKLQkJCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzJdLAotCQkJCQlwQVBvcnQtPkN1cnJlbnRNYWNBZGRyZXNzLmFbM10sCi0JCQkJCXBBUG9ydC0+Q3VycmVudE1hY0FkZHJlc3MuYVs0XSwKLQkJCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzVdKSkKLSNlbmRpZiAvKiBERUJVRyAqLwotCQl9Ci0JCS8qIHBBQy0+QWRkci5Jbml0RG9uZSA9IFNLX0lOSVRfSU87ICovCi0JCWJyZWFrOwotCi0JY2FzZSBTS19JTklUX1JVTjoKLSNpZmRlZiB4REVCVUcKLQkJZm9yIChpID0gMDsgaSA8IFNLX01BWF9NQUNTOyBpKyspIHsKLQkJCWlmIChwQUMtPkFkZHIuUG9ydFtpXS5OZXh0RXhhY3RNYXRjaFJsbXQgPAotCQkJCVNLX0FERFJfRklSU1RfTUFUQ0hfUkxNVCkgewotCQkJCU5leHQwW2ldIHw9IDE2OwotCQkJfQotCQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLQotCQkvKiBwQUMtPkFkZHIuSW5pdERvbmUgPSBTS19JTklUX1JVTjsgKi8KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgkvKiBlcnJvciAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gKFNLX0FERFJfU1VDQ0VTUyk7Ci0JCi19CS8qIFNrQWRkckluaXQgKi8KLQotI2lmbmRlZiBTS19TTElNCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0FkZHJNY0NsZWFyIC0gY2xlYXIgdGhlIG11bHRpY2FzdCB0YWJsZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGNsZWFycyB0aGUgbXVsdGljYXN0IHRhYmxlLgotICoKLSAqCUlmIG5vdCBzdXBwcmVzc2VkIGJ5IEZsYWcgU0tfTUNfU1dfT05MWSwgdGhlIGhhcmR3YXJlIGlzIHVwZGF0ZWQKLSAqCWltbWVkaWF0ZWx5LgotICoKLSAqCUl0IGNhbGxzIGVpdGhlciBTa0FkZHJYbWFjTWNDbGVhciBvciBTa0FkZHJHbWFjTWNDbGVhciwgYWNjb3JkaW5nCi0gKgl0byB0aGUgYWRhcHRlciBpbiB1c2UuIFRoZSByZWFsIHdvcmsgaXMgZG9uZSB0aGVyZS4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGUKLSAqCW1heSBiZSBjYWxsZWQgc3RhcnRpbmcgd2l0aCBTS19JTklUX0RBVEEgd2l0aCBmbGFnIFNLX01DX1NXX09OTFkKLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTyB3aXRob3V0IGxpbWl0YXRpb24KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQUREUl9TVUNDRVNTCi0gKglTS19BRERSX0lMTEVHQUxfUE9SVAotICovCi1pbnQJU2tBZGRyTWNDbGVhcigKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gY29udGV4dCAqLwotU0tfVTMyCVBvcnROdW1iZXIsCS8qIEluZGV4IG9mIGFmZmVjdGVkIHBvcnQgKi8KLWludAkJRmxhZ3MpCQkvKiBwZXJtYW5lbnQvbm9uLXBlcm0sIHN3LW9ubHkgKi8KLXsKLQlpbnQgUmV0dXJuQ29kZTsKLQkKLQlpZiAoUG9ydE51bWJlciA+PSAoU0tfVTMyKSBwQUMtPkdJbmkuR0lNYWNzRm91bmQpIHsKLQkJcmV0dXJuIChTS19BRERSX0lMTEVHQUxfUE9SVCk7Ci0JfQotCQotCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCVJldHVybkNvZGUgPSBTa0FkZHJYbWFjTWNDbGVhcihwQUMsIElvQywgUG9ydE51bWJlciwgRmxhZ3MpOwotCX0KLQllbHNlIHsKLQkJUmV0dXJuQ29kZSA9IFNrQWRkckdtYWNNY0NsZWFyKHBBQywgSW9DLCBQb3J0TnVtYmVyLCBGbGFncyk7Ci0JfQotCi0JcmV0dXJuIChSZXR1cm5Db2RlKTsKLQotfQkvKiBTa0FkZHJNY0NsZWFyICovCi0KLSNlbmRpZiAvKiAhU0tfU0xJTSAqLwotCi0jaWZuZGVmIFNLX1NMSU0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrQWRkclhtYWNNY0NsZWFyIC0gY2xlYXIgdGhlIG11bHRpY2FzdCB0YWJsZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGNsZWFycyB0aGUgbXVsdGljYXN0IHRhYmxlCi0gKgkoZWl0aGVyIGVudHJ5IDIgb3IgZW50cmllcyAzLTE2IGFuZCBJbmV4YWN0RmlsdGVyKSBvZiB0aGUgZ2l2ZW4gcG9ydC4KLSAqCUlmIG5vdCBzdXBwcmVzc2VkIGJ5IEZsYWcgU0tfTUNfU1dfT05MWSwgdGhlIGhhcmR3YXJlIGlzIHVwZGF0ZWQKLSAqCWltbWVkaWF0ZWx5LgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZQotICoJbWF5IGJlIGNhbGxlZCBzdGFydGluZyB3aXRoIFNLX0lOSVRfREFUQSB3aXRoIGZsYWcgU0tfTUNfU1dfT05MWQotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0lPIHdpdGhvdXQgbGltaXRhdGlvbgotICoKLSAqIFJldHVybnM6Ci0gKglTS19BRERSX1NVQ0NFU1MKLSAqCVNLX0FERFJfSUxMRUdBTF9QT1JUCi0gKi8KLXN0YXRpYyBpbnQJU2tBZGRyWG1hY01jQ2xlYXIoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSS9PIGNvbnRleHQgKi8KLVNLX1UzMglQb3J0TnVtYmVyLAkvKiBJbmRleCBvZiBhZmZlY3RlZCBwb3J0ICovCi1pbnQJCUZsYWdzKQkJLyogcGVybWFuZW50L25vbi1wZXJtLCBzdy1vbmx5ICovCi17Ci0JaW50IGk7Ci0KLQlpZiAoRmxhZ3MgJiBTS19BRERSX1BFUk1BTkVOVCkgewkvKiBwZXJtYW5lbnQgPT4gUkxNVCAqLwotCi0JCS8qIENsZWFyIFJMTVQgbXVsdGljYXN0IGFkZHJlc3Nlcy4gKi8KLQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uTmV4dEV4YWN0TWF0Y2hSbG10ID0gU0tfQUREUl9GSVJTVF9NQVRDSF9STE1UOwotCX0KLQllbHNlIHsJLyogbm90IHBlcm1hbmVudCA9PiBEUlYgKi8KLQotCQkvKiBDbGVhciBJbmV4YWN0RmlsdGVyICovCi0JCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbaV0gPSAwOwotCQl9Ci0KLQkJLyogQ2xlYXIgRFJWIG11bHRpY2FzdCBhZGRyZXNzZXMuICovCi0KLQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uTmV4dEV4YWN0TWF0Y2hEcnYgPSBTS19BRERSX0ZJUlNUX01BVENIX0RSVjsKLQl9Ci0KLQlpZiAoIShGbGFncyAmIFNLX01DX1NXX09OTFkpKSB7Ci0JCSh2b2lkKSBTa0FkZHJYbWFjTWNVcGRhdGUocEFDLCBJb0MsIFBvcnROdW1iZXIpOwotCX0KLQotCXJldHVybiAoU0tfQUREUl9TVUNDRVNTKTsKLQkKLX0JLyogU2tBZGRyWG1hY01jQ2xlYXIgKi8KLQotI2VuZGlmIC8qICFTS19TTElNICovCi0KLSNpZm5kZWYgU0tfU0xJTQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tBZGRyR21hY01jQ2xlYXIgLSBjbGVhciB0aGUgbXVsdGljYXN0IHRhYmxlCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgY2xlYXJzIHRoZSBtdWx0aWNhc3QgaGFzaGluZyB0YWJsZSAoSW5leGFjdEZpbHRlcikKLSAqCShlaXRoZXIgdGhlIFJMTVQgb3IgdGhlIGRyaXZlciBiaXRzKSBvZiB0aGUgZ2l2ZW4gcG9ydC4KLSAqCi0gKglJZiBub3Qgc3VwcHJlc3NlZCBieSBGbGFnIFNLX01DX1NXX09OTFksIHRoZSBoYXJkd2FyZSBpcyB1cGRhdGVkCi0gKglpbW1lZGlhdGVseS4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGUKLSAqCW1heSBiZSBjYWxsZWQgc3RhcnRpbmcgd2l0aCBTS19JTklUX0RBVEEgd2l0aCBmbGFnIFNLX01DX1NXX09OTFkKLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTyB3aXRob3V0IGxpbWl0YXRpb24KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQUREUl9TVUNDRVNTCi0gKglTS19BRERSX0lMTEVHQUxfUE9SVAotICovCi1zdGF0aWMgaW50CVNrQWRkckdtYWNNY0NsZWFyKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIEkvTyBjb250ZXh0ICovCi1TS19VMzIJUG9ydE51bWJlciwJLyogSW5kZXggb2YgYWZmZWN0ZWQgcG9ydCAqLwotaW50CQlGbGFncykJCS8qIHBlcm1hbmVudC9ub24tcGVybSwgc3ctb25seSAqLwotewotCWludCBpOwotCi0jaWZkZWYgREVCVUcKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9DVFJMLAotCQkoIkdNQUMgSW5leGFjdEZpbHRlciAobm90IGNsZWFyZWQpOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzWzBdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1sxXSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbMl0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzWzNdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1s0XSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbNV0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzWzZdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1s3XSkpCi0jZW5kaWYJLyogREVCVUcgKi8KLQotCS8qIENsZWFyIEluZXhhY3RGaWx0ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbaV0gPSAwOwotCX0KLQkKLQlpZiAoRmxhZ3MgJiBTS19BRERSX1BFUk1BTkVOVCkgewkvKiBwZXJtYW5lbnQgPT4gUkxNVCAqLwotCQkKLQkJLyogQ29weSBEUlYgYml0cyB0byBJbmV4YWN0RmlsdGVyLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzW2ldIHw9Ci0JCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdERydkZpbHRlci5CeXRlc1tpXTsKLQkJCQotCQkJLyogQ2xlYXIgSW5leGFjdFJsbXRGaWx0ZXIuICovCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0UmxtdEZpbHRlci5CeXRlc1tpXSA9IDA7Ci0KLQkJfQkJCi0JfQotCWVsc2UgewkvKiBub3QgcGVybWFuZW50ID0+IERSViAqLwotCQkKLQkJLyogQ29weSBSTE1UIGJpdHMgdG8gSW5leGFjdEZpbHRlci4gKi8KLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1tpXSB8PQotCQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RSbG10RmlsdGVyLkJ5dGVzW2ldOwotCQkJCi0JCQkvKiBDbGVhciBJbmV4YWN0RHJ2RmlsdGVyLiAqLwotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdERydkZpbHRlci5CeXRlc1tpXSA9IDA7Ci0JCX0KLQl9Ci0JCi0jaWZkZWYgREVCVUcKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9DVFJMLAotCQkoIkdNQUMgSW5leGFjdEZpbHRlciAoY2xlYXJlZCk6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbMF0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzWzFdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1syXSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbM10sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzWzRdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1s1XSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbNl0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzWzddKSkKLSNlbmRpZgkvKiBERUJVRyAqLwotCQotCWlmICghKEZsYWdzICYgU0tfTUNfU1dfT05MWSkpIHsKLQkJKHZvaWQpIFNrQWRkckdtYWNNY1VwZGF0ZShwQUMsIElvQywgUG9ydE51bWJlcik7Ci0JfQotCQotCXJldHVybiAoU0tfQUREUl9TVUNDRVNTKTsKLQotfQkvKiBTa0FkZHJHbWFjTWNDbGVhciAqLwotCi0jaWZuZGVmIFNLX0FERFJfQ0hFQVQKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrWG1hY01jSGFzaCAtIGhhc2ggbXVsdGljYXN0IGFkZHJlc3MKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBjb21wdXRlcyB0aGUgaGFzaCB2YWx1ZSBmb3IgYSBtdWx0aWNhc3QgYWRkcmVzcy4KLSAqCUEgQ1JDMzIgYWxnb3JpdGhtIGlzIHVzZWQuCi0gKgotICogTm90ZXM6Ci0gKglUaGUgY29kZSB3YXMgYWRhcHRlZCBmcm9tIHRoZSBYYVF0aSBkYXRhIHNoZWV0LgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZQotICoKLSAqIFJldHVybnM6Ci0gKglIYXNoIHZhbHVlIG9mIG11bHRpY2FzdCBhZGRyZXNzLgotICovCi1zdGF0aWMgU0tfVTMyIFNrWG1hY01jSGFzaCgKLXVuc2lnbmVkIGNoYXIgKnBNYykJLyogTXVsdGljYXN0IGFkZHJlc3MgKi8KLXsKLQlTS19VMzIgSWR4OwotCVNLX1UzMiBCaXQ7Ci0JU0tfVTMyIERhdGE7Ci0JU0tfVTMyIENyYzsKLQotCUNyYyA9IDB4RkZGRkZGRkZVTDsKLQlmb3IgKElkeCA9IDA7IElkeCA8IFNLX01BQ19BRERSX0xFTjsgSWR4KyspIHsKLQkJRGF0YSA9ICpwTWMrKzsKLQkJZm9yIChCaXQgPSAwOyBCaXQgPCA4OyBCaXQrKywgRGF0YSA+Pj0gMSkgewotCQkJQ3JjID0gKENyYyA+PiAxKSBeICgoKENyYyBeIERhdGEpICYgMSkgPyBYTUFDX1BPTFkgOiAwKTsKLQkJfQotCX0KLQotCXJldHVybiAoQ3JjICYgKCgxIDw8IEhBU0hfQklUUykgLSAxKSk7Ci0KLX0JLyogU2tYbWFjTWNIYXNoICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR21hY01jSGFzaCAtIGhhc2ggbXVsdGljYXN0IGFkZHJlc3MKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBjb21wdXRlcyB0aGUgaGFzaCB2YWx1ZSBmb3IgYSBtdWx0aWNhc3QgYWRkcmVzcy4KLSAqCUEgQ1JDMTYgYWxnb3JpdGhtIGlzIHVzZWQuCi0gKgotICogTm90ZXM6Ci0gKgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZQotICoKLSAqIFJldHVybnM6Ci0gKglIYXNoIHZhbHVlIG9mIG11bHRpY2FzdCBhZGRyZXNzLgotICovCi1zdGF0aWMgU0tfVTMyIFNrR21hY01jSGFzaCgKLXVuc2lnbmVkIGNoYXIgKnBNYykJLyogTXVsdGljYXN0IGFkZHJlc3MgKi8KLXsKLQlTS19VMzIgRGF0YTsKLQlTS19VMzIgVG1wRGF0YTsKLQlTS19VMzIgQ3JjOwotCWludCBCeXRlOwotCWludCBCaXQ7Ci0KLQlDcmMgPSAweEZGRkZGRkZGVUw7Ci0JZm9yIChCeXRlID0gMDsgQnl0ZSA8IDY7IEJ5dGUrKykgewotCQkvKiBHZXQgbmV4dCBieXRlLiAqLwotCQlEYXRhID0gKFNLX1UzMikgcE1jW0J5dGVdOwotCQkKLQkJLyogQ2hhbmdlIGJpdCBvcmRlciBpbiBieXRlLiAqLwotCQlUbXBEYXRhID0gRGF0YTsKLQkJZm9yIChCaXQgPSAwOyBCaXQgPCA4OyBCaXQrKykgewotCQkJaWYgKFRtcERhdGEgJiAxTCkgewotCQkJCURhdGEgfD0gIDFMIDw8ICg3IC0gQml0KTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCURhdGEgJj0gfigxTCA8PCAoNyAtIEJpdCkpOwotCQkJfQotCQkJVG1wRGF0YSA+Pj0gMTsKLQkJfQotCQkKLQkJQ3JjIF49IChEYXRhIDw8IDI0KTsKLQkJZm9yIChCaXQgPSAwOyBCaXQgPCA4OyBCaXQrKykgewotCQkJaWYgKENyYyAmIDB4ODAwMDAwMDApIHsKLQkJCQlDcmMgPSAoQ3JjIDw8IDEpIF4gR01BQ19QT0xZOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJQ3JjIDw8PSAxOwotCQkJfQotCQl9Ci0JfQotCQotCXJldHVybiAoQ3JjICYgKCgxIDw8IEhBU0hfQklUUykgLSAxKSk7Ci0KLX0JLyogU2tHbWFjTWNIYXNoICovCi0KLSNlbmRpZgkvKiAhU0tfQUREUl9DSEVBVCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tBZGRyTWNBZGQgLSBhZGQgYSBtdWx0aWNhc3QgYWRkcmVzcyB0byBhIHBvcnQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBlbmFibGVzIHJlY2VwdGlvbiBmb3IgYSBnaXZlbiBhZGRyZXNzIG9uIHRoZSBnaXZlbiBwb3J0LgotICoKLSAqCUl0IGNhbGxzIGVpdGhlciBTa0FkZHJYbWFjTWNBZGQgb3IgU2tBZGRyR21hY01jQWRkLCBhY2NvcmRpbmcgdG8gdGhlCi0gKglhZGFwdGVyIGluIHVzZS4gVGhlIHJlYWwgd29yayBpcyBkb25lIHRoZXJlLgotICoKLSAqIE5vdGVzOgotICoJVGhlIHJldHVybiBjb2RlIGlzIG9ubHkgdmFsaWQgZm9yIFNLX1BST01fTU9ERV9OT05FLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZQotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0RBVEEKLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfTUNfRklMVEVSSU5HX0VYQUNUCi0gKglTS19NQ19GSUxURVJJTkdfSU5FWEFDVAotICoJU0tfTUNfSUxMRUdBTF9BRERSRVNTCi0gKglTS19NQ19JTExFR0FMX1BPUlQKLSAqCVNLX01DX1JMTVRfT1ZFUkZMT1cKLSAqLwotaW50CVNrQWRkck1jQWRkKAotU0tfQUMJCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkJLyogSS9PIGNvbnRleHQgKi8KLVNLX1UzMgkJUG9ydE51bWJlciwJLyogUG9ydCBOdW1iZXIgKi8KLVNLX01BQ19BRERSCSpwTWMsCQkvKiBtdWx0aWNhc3QgYWRkcmVzcyB0byBiZSBhZGRlZCAqLwotaW50CQkJRmxhZ3MpCQkvKiBwZXJtYW5lbnQvbm9uLXBlcm1hbmVudCAqLwotewotCWludCBSZXR1cm5Db2RlOwotCQotCWlmIChQb3J0TnVtYmVyID49IChTS19VMzIpIHBBQy0+R0luaS5HSU1hY3NGb3VuZCkgewotCQlyZXR1cm4gKFNLX0FERFJfSUxMRUdBTF9QT1JUKTsKLQl9Ci0JCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJUmV0dXJuQ29kZSA9IFNrQWRkclhtYWNNY0FkZChwQUMsIElvQywgUG9ydE51bWJlciwgcE1jLCBGbGFncyk7Ci0JfQotCWVsc2UgewotCQlSZXR1cm5Db2RlID0gU2tBZGRyR21hY01jQWRkKHBBQywgSW9DLCBQb3J0TnVtYmVyLCBwTWMsIEZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gKFJldHVybkNvZGUpOwotCi19CS8qIFNrQWRkck1jQWRkICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrQWRkclhtYWNNY0FkZCAtIGFkZCBhIG11bHRpY2FzdCBhZGRyZXNzIHRvIGEgcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGVuYWJsZXMgcmVjZXB0aW9uIGZvciBhIGdpdmVuIGFkZHJlc3Mgb24gdGhlIGdpdmVuIHBvcnQuCi0gKgotICogTm90ZXM6Ci0gKglUaGUgcmV0dXJuIGNvZGUgaXMgb25seSB2YWxpZCBmb3IgU0tfUFJPTV9NT0RFX05PTkUuCi0gKgotICoJVGhlIG11bHRpY2FzdCBiaXQgaXMgb25seSBjaGVja2VkIGlmIHRoZXJlIGFyZSBubyBmcmVlIGV4YWN0IG1hdGNoCi0gKgllbnRyaWVzLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZQotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0RBVEEKLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfTUNfRklMVEVSSU5HX0VYQUNUCi0gKglTS19NQ19GSUxURVJJTkdfSU5FWEFDVAotICoJU0tfTUNfSUxMRUdBTF9BRERSRVNTCi0gKglTS19NQ19STE1UX09WRVJGTE9XCi0gKi8KLXN0YXRpYyBpbnQJU2tBZGRyWG1hY01jQWRkKAotU0tfQUMJCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkJLyogSS9PIGNvbnRleHQgKi8KLVNLX1UzMgkJUG9ydE51bWJlciwJLyogUG9ydCBOdW1iZXIgKi8KLVNLX01BQ19BRERSCSpwTWMsCQkvKiBtdWx0aWNhc3QgYWRkcmVzcyB0byBiZSBhZGRlZCAqLwotaW50CQlGbGFncykJCS8qIHBlcm1hbmVudC9ub24tcGVybWFuZW50ICovCi17Ci0JaW50CWk7Ci0JU0tfVTgJSW5leGFjdDsKLSNpZm5kZWYgU0tfQUREUl9DSEVBVAotCVNLX1UzMiBIYXNoQml0OwotI2VuZGlmCS8qICFkZWZpbmVkKFNLX0FERFJfQ0hFQVQpICovCi0KLQlpZiAoRmxhZ3MgJiBTS19BRERSX1BFUk1BTkVOVCkgewkvKiBwZXJtYW5lbnQgPT4gUkxNVCAqLwotI2lmZGVmIHhERUJVRwotCQlpZiAocEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uTmV4dEV4YWN0TWF0Y2hSbG10IDwKLQkJCVNLX0FERFJfRklSU1RfTUFUQ0hfUkxNVCkgewotCQkJTmV4dDBbUG9ydE51bWJlcl0gfD0gMTsKLQkJCXJldHVybiAoU0tfTUNfUkxNVF9PVkVSRkxPVyk7Ci0JCX0KLSNlbmRpZgkvKiBERUJVRyAqLwotCQkKLQkJaWYgKHBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLk5leHRFeGFjdE1hdGNoUmxtdCA+Ci0JCQlTS19BRERSX0xBU1RfTUFUQ0hfUkxNVCkgewotCQkJcmV0dXJuIChTS19NQ19STE1UX09WRVJGTE9XKTsKLQkJfQotCi0JCS8qIFNldCBhIFJMTVQgbXVsdGljYXN0IGFkZHJlc3MuICovCi0KLQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uRXhhY3RbCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5OZXh0RXhhY3RNYXRjaFJsbXQrK10gPSAqcE1jOwotCi0JCXJldHVybiAoU0tfTUNfRklMVEVSSU5HX0VYQUNUKTsKLQl9Ci0KLSNpZmRlZiB4REVCVUcKLQlpZiAocEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uTmV4dEV4YWN0TWF0Y2hEcnYgPAotCQlTS19BRERSX0ZJUlNUX01BVENIX0RSVikgewotCQkJTmV4dDBbUG9ydE51bWJlcl0gfD0gMjsKLQkJcmV0dXJuIChTS19NQ19STE1UX09WRVJGTE9XKTsKLQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLQkKLQlpZiAocEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uTmV4dEV4YWN0TWF0Y2hEcnYgPD0gU0tfQUREUl9MQVNUX01BVENIX0RSVikgewotCi0JCS8qIFNldCBleGFjdCBtYXRjaCBlbnRyeS4gKi8KLQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uRXhhY3RbCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5OZXh0RXhhY3RNYXRjaERydisrXSA9ICpwTWM7Ci0KLQkJLyogQ2xlYXIgSW5leGFjdEZpbHRlciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzW2ldID0gMDsKLQkJfQotCX0KLQllbHNlIHsKLQkJaWYgKCEocE1jLT5hWzBdICYgU0tfTUNfQklUKSkgewotCQkJLyogSGFzaGluZyBvbmx5IHBvc3NpYmxlIHdpdGggbXVsdGljYXN0IGFkZHJlc3NlcyAqLwotCQkJcmV0dXJuIChTS19NQ19JTExFR0FMX0FERFJFU1MpOwotCQl9Ci0jaWZuZGVmIFNLX0FERFJfQ0hFQVQKLQkJLyogQ29tcHV0ZSBoYXNoIHZhbHVlIG9mIGFkZHJlc3MuICovCi0JCUhhc2hCaXQgPSA2MyAtIFNrWG1hY01jSGFzaCgmcE1jLT5hWzBdKTsKLQotCQkvKiBBZGQgYml0IHRvIEluZXhhY3RGaWx0ZXIuICovCi0JCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbSGFzaEJpdCAvIDhdIHw9Ci0JCQkxIDw8IChIYXNoQml0ICUgOCk7Ci0jZWxzZQkvKiBTS19BRERSX0NIRUFUICovCi0JCS8qIFNldCBhbGwgYml0cyBpbiBJbmV4YWN0RmlsdGVyLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzW2ldID0gMHhGRjsKLQkJfQotI2VuZGlmCS8qIFNLX0FERFJfQ0hFQVQgKi8KLQl9Ci0KLQlmb3IgKEluZXhhY3QgPSAwLCBpID0gMDsgaSA8IDg7IGkrKykgewotCQlJbmV4YWN0IHw9IHBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbaV07Ci0JfQotCi0JaWYgKEluZXhhY3QgPT0gMCAmJiBwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5Qcm9tTW9kZSA9PSAwKSB7Ci0JCXJldHVybiAoU0tfTUNfRklMVEVSSU5HX0VYQUNUKTsKLQl9Ci0JZWxzZSB7Ci0JCXJldHVybiAoU0tfTUNfRklMVEVSSU5HX0lORVhBQ1QpOwotCX0KLQotfQkvKiBTa0FkZHJYbWFjTWNBZGQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tBZGRyR21hY01jQWRkIC0gYWRkIGEgbXVsdGljYXN0IGFkZHJlc3MgdG8gYSBwb3J0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgZW5hYmxlcyByZWNlcHRpb24gZm9yIGEgZ2l2ZW4gYWRkcmVzcyBvbiB0aGUgZ2l2ZW4gcG9ydC4KLSAqCi0gKiBOb3RlczoKLSAqCVRoZSByZXR1cm4gY29kZSBpcyBvbmx5IHZhbGlkIGZvciBTS19QUk9NX01PREVfTk9ORS4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGUKLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9EQVRBCi0gKgotICogUmV0dXJuczoKLSAqCVNLX01DX0ZJTFRFUklOR19JTkVYQUNUCi0gKglTS19NQ19JTExFR0FMX0FERFJFU1MKLSAqLwotc3RhdGljIGludAlTa0FkZHJHbWFjTWNBZGQoCi1TS19BQwkJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCQlJb0MsCQkvKiBJL08gY29udGV4dCAqLwotU0tfVTMyCQlQb3J0TnVtYmVyLAkvKiBQb3J0IE51bWJlciAqLwotU0tfTUFDX0FERFIJKnBNYywJCS8qIG11bHRpY2FzdCBhZGRyZXNzIHRvIGJlIGFkZGVkICovCi1pbnQJCUZsYWdzKQkJLyogcGVybWFuZW50L25vbi1wZXJtYW5lbnQgKi8KLXsKLQlpbnQJaTsKLSNpZm5kZWYgU0tfQUREUl9DSEVBVAotCVNLX1UzMiBIYXNoQml0OwotI2VuZGlmCS8qICFkZWZpbmVkKFNLX0FERFJfQ0hFQVQpICovCi0JCQotCWlmICghKHBNYy0+YVswXSAmIFNLX01DX0JJVCkpIHsKLQkJLyogSGFzaGluZyBvbmx5IHBvc3NpYmxlIHdpdGggbXVsdGljYXN0IGFkZHJlc3NlcyAqLwotCQlyZXR1cm4gKFNLX01DX0lMTEVHQUxfQUREUkVTUyk7Ci0JfQotCQotI2lmbmRlZiBTS19BRERSX0NIRUFUCi0JCi0JLyogQ29tcHV0ZSBoYXNoIHZhbHVlIG9mIGFkZHJlc3MuICovCi0JSGFzaEJpdCA9IFNrR21hY01jSGFzaCgmcE1jLT5hWzBdKTsKLQkKLQlpZiAoRmxhZ3MgJiBTS19BRERSX1BFUk1BTkVOVCkgewkvKiBwZXJtYW5lbnQgPT4gUkxNVCAqLwotCQkKLQkJLyogQWRkIGJpdCB0byBJbmV4YWN0UmxtdEZpbHRlci4gKi8KLQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdFJsbXRGaWx0ZXIuQnl0ZXNbSGFzaEJpdCAvIDhdIHw9Ci0JCQkxIDw8IChIYXNoQml0ICUgOCk7Ci0JCQotCQkvKiBDb3B5IGJpdCB0byBJbmV4YWN0RmlsdGVyLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzW2ldIHw9Ci0JCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdFJsbXRGaWx0ZXIuQnl0ZXNbaV07Ci0JCX0KLSNpZmRlZiBERUJVRwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9DVFJMLAotCQkoIkdNQUMgSW5leGFjdFJsbXRGaWx0ZXI6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RSbG10RmlsdGVyLkJ5dGVzWzBdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdFJsbXRGaWx0ZXIuQnl0ZXNbMV0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0UmxtdEZpbHRlci5CeXRlc1syXSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RSbG10RmlsdGVyLkJ5dGVzWzNdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdFJsbXRGaWx0ZXIuQnl0ZXNbNF0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0UmxtdEZpbHRlci5CeXRlc1s1XSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3RSbG10RmlsdGVyLkJ5dGVzWzZdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdFJsbXRGaWx0ZXIuQnl0ZXNbN10pKQotI2VuZGlmCS8qIERFQlVHICovCi0JfQotCWVsc2UgewkvKiBub3QgcGVybWFuZW50ID0+IERSViAqLwotCQkKLQkJLyogQWRkIGJpdCB0byBJbmV4YWN0RHJ2RmlsdGVyLiAqLwotCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RHJ2RmlsdGVyLkJ5dGVzW0hhc2hCaXQgLyA4XSB8PQotCQkJMSA8PCAoSGFzaEJpdCAlIDgpOwotCQkKLQkJLyogQ29weSBiaXQgdG8gSW5leGFjdEZpbHRlci4gKi8KLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1tpXSB8PQotCQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3REcnZGaWx0ZXIuQnl0ZXNbaV07Ci0JCX0KLSNpZmRlZiBERUJVRwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9DVFJMLAotCQkoIkdNQUMgSW5leGFjdERydkZpbHRlcjogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdERydkZpbHRlci5CeXRlc1swXSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3REcnZGaWx0ZXIuQnl0ZXNbMV0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RHJ2RmlsdGVyLkJ5dGVzWzJdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdERydkZpbHRlci5CeXRlc1szXSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3REcnZGaWx0ZXIuQnl0ZXNbNF0sCi0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RHJ2RmlsdGVyLkJ5dGVzWzVdLAotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdERydkZpbHRlci5CeXRlc1s2XSwKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkluZXhhY3REcnZGaWx0ZXIuQnl0ZXNbN10pKQotI2VuZGlmCS8qIERFQlVHICovCi0JfQotCQotI2Vsc2UJLyogU0tfQUREUl9DSEVBVCAqLwotCQotCS8qIFNldCBhbGwgYml0cyBpbiBJbmV4YWN0RmlsdGVyLiAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1tpXSA9IDB4RkY7Ci0JfQotI2VuZGlmCS8qIFNLX0FERFJfQ0hFQVQgKi8KLQkJCi0JcmV0dXJuIChTS19NQ19GSUxURVJJTkdfSU5FWEFDVCk7Ci0JCi19CS8qIFNrQWRkckdtYWNNY0FkZCAqLwotCi0jZW5kaWYgLyogIVNLX1NMSU0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrQWRkck1jVXBkYXRlIC0gdXBkYXRlIHRoZSBIVyBNQyBhZGRyZXNzIHRhYmxlIGFuZCBzZXQgdGhlIE1BQyBhZGRyZXNzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgZW5hYmxlcyByZWNlcHRpb24gb2YgdGhlIGFkZHJlc3NlcyBjb250YWluZWQgaW4gYSBsb2NhbAotICoJdGFibGUgZm9yIGEgZ2l2ZW4gcG9ydC4KLSAqCUl0IGFsc28gcHJvZ3JhbXMgdGhlIHBvcnQncyBjdXJyZW50IHBoeXNpY2FsIE1BQyBhZGRyZXNzLgotICoKLSAqCUl0IGNhbGxzIGVpdGhlciBTa0FkZHJYbWFjTWNVcGRhdGUgb3IgU2tBZGRyR21hY01jVXBkYXRlLCBhY2NvcmRpbmcKLSAqCXRvIHRoZSBhZGFwdGVyIGluIHVzZS4gVGhlIHJlYWwgd29yayBpcyBkb25lIHRoZXJlLgotICoKLSAqIE5vdGVzOgotICoJVGhlIHJldHVybiBjb2RlIGlzIG9ubHkgdmFsaWQgZm9yIFNLX1BST01fTU9ERV9OT05FLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZQotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0lPCi0gKgotICogUmV0dXJuczoKLSAqCVNLX01DX0ZJTFRFUklOR19FWEFDVAotICoJU0tfTUNfRklMVEVSSU5HX0lORVhBQ1QKLSAqCVNLX0FERFJfSUxMRUdBTF9QT1JUCi0gKi8KLWludAlTa0FkZHJNY1VwZGF0ZSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gY29udGV4dCAqLwotU0tfVTMyCVBvcnROdW1iZXIpCS8qIFBvcnQgTnVtYmVyICovCi17Ci0JaW50IFJldHVybkNvZGUgPSAwOwotI2lmICghZGVmaW5lZChTS19TTElNKSB8fCBkZWZpbmVkKERFQlVHKSkKLQlpZiAoUG9ydE51bWJlciA+PSAoU0tfVTMyKSBwQUMtPkdJbmkuR0lNYWNzRm91bmQpIHsKLQkJcmV0dXJuIChTS19BRERSX0lMTEVHQUxfUE9SVCk7Ci0JfQotI2VuZGlmIC8qICFTS19TTElNIHx8IERFQlVHICovCi0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJUmV0dXJuQ29kZSA9IFNrQWRkclhtYWNNY1VwZGF0ZShwQUMsIElvQywgUG9ydE51bWJlcik7Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLSNpZmRlZiBZVUtPTgotCWlmICghcEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQlSZXR1cm5Db2RlID0gU2tBZGRyR21hY01jVXBkYXRlKHBBQywgSW9DLCBQb3J0TnVtYmVyKTsKLQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQlyZXR1cm4gKFJldHVybkNvZGUpOwotCi19CS8qIFNrQWRkck1jVXBkYXRlICovCi0KLQotI2lmZGVmIEdFTkVTSVMKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrQWRkclhtYWNNY1VwZGF0ZSAtIHVwZGF0ZSB0aGUgSFcgTUMgYWRkcmVzcyB0YWJsZSBhbmQgc2V0IHRoZSBNQUMgYWRkcmVzcwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGVuYWJsZXMgcmVjZXB0aW9uIG9mIHRoZSBhZGRyZXNzZXMgY29udGFpbmVkIGluIGEgbG9jYWwKLSAqCXRhYmxlIGZvciBhIGdpdmVuIHBvcnQuCi0gKglJdCBhbHNvIHByb2dyYW1zIHRoZSBwb3J0J3MgY3VycmVudCBwaHlzaWNhbCBNQUMgYWRkcmVzcy4KLSAqCi0gKiBOb3RlczoKLSAqCVRoZSByZXR1cm4gY29kZSBpcyBvbmx5IHZhbGlkIGZvciBTS19QUk9NX01PREVfTk9ORS4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGUKLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglTS19NQ19GSUxURVJJTkdfRVhBQ1QKLSAqCVNLX01DX0ZJTFRFUklOR19JTkVYQUNUCi0gKglTS19BRERSX0lMTEVHQUxfUE9SVAotICovCi1zdGF0aWMgaW50CVNrQWRkclhtYWNNY1VwZGF0ZSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gY29udGV4dCAqLwotU0tfVTMyCVBvcnROdW1iZXIpCS8qIFBvcnQgTnVtYmVyICovCi17Ci0JU0tfVTMyCQlpOwotCVNLX1U4CQlJbmV4YWN0OwotCVNLX1UxNgkJKk91dEFkZHI7Ci0JU0tfQUREUl9QT1JUCSpwQVBvcnQ7Ci0KLQlTS19EQkdfTVNHKHBBQyxTS19EQkdNT0RfQUREUiwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU2tBZGRyWG1hY01jVXBkYXRlIG9uIFBvcnQgJXUuXG4iLCBQb3J0TnVtYmVyKSkKLQkKLQlwQVBvcnQgPSAmcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl07Ci0KLSNpZmRlZiBERUJVRwotCVNLX0RCR19NU0cocEFDLFNLX0RCR01PRF9BRERSLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJOZXh0MCBvbiBQb3J0ICVkOiAlZFxuIiwgUG9ydE51bWJlciwgTmV4dDBbUG9ydE51bWJlcl0pKQotI2VuZGlmIC8qIERFQlVHICovCi0KLQkvKiBTdGFydCB3aXRoIDAgdG8gYWxzbyBwcm9ncmFtIHRoZSBsb2dpY2FsIE1BQyBhZGRyZXNzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBwQVBvcnQtPk5leHRFeGFjdE1hdGNoUmxtdDsgaSsrKSB7Ci0JCS8qIFNldCBleGFjdCBtYXRjaCBhZGRyZXNzIGkgb24gWE1BQyAqLwotCQlPdXRBZGRyID0gKFNLX1UxNiAqKSAmcEFQb3J0LT5FeGFjdFtpXS5hWzBdOwotCQlYTV9PVVRBRERSKElvQywgUG9ydE51bWJlciwgWE1fRVhNKGkpLCBPdXRBZGRyKTsKLQl9Ci0KLQkvKiBDbGVhciBvdGhlciBwZXJtYW5lbnQgZXhhY3QgbWF0Y2ggYWRkcmVzc2VzIG9uIFhNQUMgKi8KLQlpZiAocEFQb3J0LT5OZXh0RXhhY3RNYXRjaFJsbXQgPD0gU0tfQUREUl9MQVNUX01BVENIX1JMTVQpIHsKLQkJCi0JCVNrWG1DbHJFeGFjdEFkZHIocEFDLCBJb0MsIFBvcnROdW1iZXIsIHBBUG9ydC0+TmV4dEV4YWN0TWF0Y2hSbG10LAotCQkJU0tfQUREUl9MQVNUX01BVENIX1JMTVQpOwotCX0KLQotCWZvciAoaSA9IHBBUG9ydC0+Rmlyc3RFeGFjdE1hdGNoRHJ2OyBpIDwgcEFQb3J0LT5OZXh0RXhhY3RNYXRjaERydjsgaSsrKSB7Ci0JCU91dEFkZHIgPSAoU0tfVTE2ICopICZwQVBvcnQtPkV4YWN0W2ldLmFbMF07Ci0JCVhNX09VVEFERFIoSW9DLCBQb3J0TnVtYmVyLCBYTV9FWE0oaSksIE91dEFkZHIpOwotCX0KLQotCS8qIENsZWFyIG90aGVyIG5vbi1wZXJtYW5lbnQgZXhhY3QgbWF0Y2ggYWRkcmVzc2VzIG9uIFhNQUMgKi8KLQlpZiAocEFQb3J0LT5OZXh0RXhhY3RNYXRjaERydiA8PSBTS19BRERSX0xBU1RfTUFUQ0hfRFJWKSB7Ci0JCQotCQlTa1htQ2xyRXhhY3RBZGRyKHBBQywgSW9DLCBQb3J0TnVtYmVyLCBwQVBvcnQtPk5leHRFeGFjdE1hdGNoRHJ2LAotCQkJU0tfQUREUl9MQVNUX01BVENIX0RSVik7Ci0JfQotCi0JZm9yIChJbmV4YWN0ID0gMCwgaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJSW5leGFjdCB8PSBwQVBvcnQtPkluZXhhY3RGaWx0ZXIuQnl0ZXNbaV07Ci0JfQotCi0JaWYgKHBBUG9ydC0+UHJvbU1vZGUgJiBTS19QUk9NX01PREVfQUxMX01DKSB7Ci0JCQotCQkvKiBTZXQgYWxsIGJpdHMgaW4gNjQtYml0IGhhc2ggcmVnaXN0ZXIuICovCi0JCVhNX09VVEhBU0goSW9DLCBQb3J0TnVtYmVyLCBYTV9IU00sICZPbmVzSGFzaCk7Ci0JCQotCQkvKiBFbmFibGUgSGFzaGluZyAqLwotCQlTa01hY0hhc2hpbmcocEFDLCBJb0MsIChpbnQpIFBvcnROdW1iZXIsIFNLX1RSVUUpOwotCX0KLQllbHNlIGlmIChJbmV4YWN0ICE9IDApIHsKLQkJCi0JCS8qIFNldCA2NC1iaXQgaGFzaCByZWdpc3RlciB0byBJbmV4YWN0RmlsdGVyLiAqLwotCQlYTV9PVVRIQVNIKElvQywgUG9ydE51bWJlciwgWE1fSFNNLCAmcEFQb3J0LT5JbmV4YWN0RmlsdGVyLkJ5dGVzWzBdKTsKLQkJCi0JCS8qIEVuYWJsZSBIYXNoaW5nICovCi0JCVNrTWFjSGFzaGluZyhwQUMsIElvQywgKGludCkgUG9ydE51bWJlciwgU0tfVFJVRSk7Ci0JfQotCWVsc2UgewotCQkvKiBEaXNhYmxlIEhhc2hpbmcgKi8KLQkJU2tNYWNIYXNoaW5nKHBBQywgSW9DLCAoaW50KSBQb3J0TnVtYmVyLCBTS19GQUxTRSk7Ci0JfQotCi0JaWYgKHBBUG9ydC0+UHJvbU1vZGUgIT0gU0tfUFJPTV9NT0RFX05PTkUpIHsKLQkJKHZvaWQpIFNrQWRkclhtYWNQcm9taXNjdW91c0NoYW5nZShwQUMsIElvQywgUG9ydE51bWJlciwgcEFQb3J0LT5Qcm9tTW9kZSk7Ci0JfQotCi0JLyogU2V0IHBvcnQncyBjdXJyZW50IHBoeXNpY2FsIE1BQyBhZGRyZXNzLiAqLwotCU91dEFkZHIgPSAoU0tfVTE2ICopICZwQVBvcnQtPkN1cnJlbnRNYWNBZGRyZXNzLmFbMF07Ci0JCi0JWE1fT1VUQUREUihJb0MsIFBvcnROdW1iZXIsIFhNX1NBLCBPdXRBZGRyKTsKLQotI2lmZGVmIHhERUJVRwotCWZvciAoaSA9IDA7IGkgPCBwQVBvcnQtPk5leHRFeGFjdE1hdGNoUmxtdDsgaSsrKSB7Ci0JCVNLX1U4CQlJbkFkZHI4WzZdOwotCQlTS19VMTYJCSpJbkFkZHI7Ci0KLQkJLyogR2V0IGV4YWN0IG1hdGNoIGFkZHJlc3MgaSBmcm9tIHBvcnQgUG9ydE51bWJlci4gKi8KLQkJSW5BZGRyID0gKFNLX1UxNiAqKSAmSW5BZGRyOFswXTsKLQkJCi0JCVhNX0lOQUREUihJb0MsIFBvcnROdW1iZXIsIFhNX0VYTShpKSwgSW5BZGRyKTsKLQkJCi0JCVNLX0RCR19NU0cocEFDLFNLX0RCR01PRF9BRERSLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU2tBZGRyWG1hY01jVXBkYXRlOiBNQyBhZGRyZXNzICVkIG9uIFBvcnQgJXU6ICIsCi0JCQkgIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC0tICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQkJCWksCi0JCQkJUG9ydE51bWJlciwKLQkJCQlJbkFkZHI4WzBdLAotCQkJCUluQWRkcjhbMV0sCi0JCQkJSW5BZGRyOFsyXSwKLQkJCQlJbkFkZHI4WzNdLAotCQkJCUluQWRkcjhbNF0sCi0JCQkJSW5BZGRyOFs1XSwKLQkJCQlwQVBvcnQtPkV4YWN0W2ldLmFbMF0sCi0JCQkJcEFQb3J0LT5FeGFjdFtpXS5hWzFdLAotCQkJCXBBUG9ydC0+RXhhY3RbaV0uYVsyXSwKLQkJCQlwQVBvcnQtPkV4YWN0W2ldLmFbM10sCi0JCQkJcEFQb3J0LT5FeGFjdFtpXS5hWzRdLAotCQkJCXBBUG9ydC0+RXhhY3RbaV0uYVs1XSkpCi0JfQotI2VuZGlmIC8qIERFQlVHICovCi0KLQkvKiBEZXRlcm1pbmUgcmV0dXJuIHZhbHVlLiAqLwotCWlmIChJbmV4YWN0ID09IDAgJiYgcEFQb3J0LT5Qcm9tTW9kZSA9PSAwKSB7Ci0JCXJldHVybiAoU0tfTUNfRklMVEVSSU5HX0VYQUNUKTsKLQl9Ci0JZWxzZSB7Ci0JCXJldHVybiAoU0tfTUNfRklMVEVSSU5HX0lORVhBQ1QpOwotCX0KLQkKLX0JLyogU2tBZGRyWG1hY01jVXBkYXRlICovCi0KLSNlbmRpZiAgLyogR0VORVNJUyAqLwotCi0jaWZkZWYgWVVLT04KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrQWRkckdtYWNNY1VwZGF0ZSAtIHVwZGF0ZSB0aGUgSFcgTUMgYWRkcmVzcyB0YWJsZSBhbmQgc2V0IHRoZSBNQUMgYWRkcmVzcwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGVuYWJsZXMgcmVjZXB0aW9uIG9mIHRoZSBhZGRyZXNzZXMgY29udGFpbmVkIGluIGEgbG9jYWwKLSAqCXRhYmxlIGZvciBhIGdpdmVuIHBvcnQuCi0gKglJdCBhbHNvIHByb2dyYW1zIHRoZSBwb3J0J3MgY3VycmVudCBwaHlzaWNhbCBNQUMgYWRkcmVzcy4KLSAqCi0gKiBOb3RlczoKLSAqCVRoZSByZXR1cm4gY29kZSBpcyBvbmx5IHZhbGlkIGZvciBTS19QUk9NX01PREVfTk9ORS4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGUKLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglTS19NQ19GSUxURVJJTkdfRVhBQ1QKLSAqCVNLX01DX0ZJTFRFUklOR19JTkVYQUNUCi0gKglTS19BRERSX0lMTEVHQUxfUE9SVAotICovCi1zdGF0aWMgaW50CVNrQWRkckdtYWNNY1VwZGF0ZSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gY29udGV4dCAqLwotU0tfVTMyCVBvcnROdW1iZXIpCS8qIFBvcnQgTnVtYmVyICovCi17Ci0jaWZuZGVmIFNLX1NMSU0KLQlTS19VMzIJCWk7Ci0JU0tfVTgJCUluZXhhY3Q7Ci0jZW5kaWYJLyogbm90IFNLX1NMSU0gKi8KLQlTS19VMTYJCSpPdXRBZGRyOwotCVNLX0FERFJfUE9SVAkqcEFQb3J0OwotCi0JU0tfREJHX01TRyhwQUMsU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNrQWRkckdtYWNNY1VwZGF0ZSBvbiBQb3J0ICV1LlxuIiwgUG9ydE51bWJlcikpCi0JCi0JcEFQb3J0ID0gJnBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdOwotCi0jaWZkZWYgREVCVUcKLQlTS19EQkdfTVNHKHBBQyxTS19EQkdNT0RfQUREUiwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiTmV4dDAgb24gUG9ydCAlZDogJWRcbiIsIFBvcnROdW1iZXIsIE5leHQwW1BvcnROdW1iZXJdKSkKLSNlbmRpZiAvKiBERUJVRyAqLwotCQotI2lmbmRlZiBTS19TTElNCi0JZm9yIChJbmV4YWN0ID0gMCwgaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJSW5leGFjdCB8PSBwQVBvcnQtPkluZXhhY3RGaWx0ZXIuQnl0ZXNbaV07Ci0JfQotCQotCS8qIFNldCA2NC1iaXQgaGFzaCByZWdpc3RlciB0byBJbmV4YWN0RmlsdGVyLiAqLwotCUdNX09VVEhBU0goSW9DLCBQb3J0TnVtYmVyLCBHTV9NQ19BRERSX0gxLAotCQkmcEFQb3J0LT5JbmV4YWN0RmlsdGVyLkJ5dGVzWzBdKTsKLQkKLQlpZiAocEFQb3J0LT5Qcm9tTW9kZSAmIFNLX1BST01fTU9ERV9BTExfTUMpIHsJCQkJCi0JCQotCQkvKiBTZXQgYWxsIGJpdHMgaW4gNjQtYml0IGhhc2ggcmVnaXN0ZXIuICovCi0JCUdNX09VVEhBU0goSW9DLCBQb3J0TnVtYmVyLCBHTV9NQ19BRERSX0gxLCAmT25lc0hhc2gpOwotCQkKLQkJLyogRW5hYmxlIEhhc2hpbmcgKi8KLQkJU2tNYWNIYXNoaW5nKHBBQywgSW9DLCAoaW50KSBQb3J0TnVtYmVyLCBTS19UUlVFKTsKLQl9Ci0JZWxzZSB7CQotCQkvKiBFbmFibGUgSGFzaGluZy4gKi8KLQkJU2tNYWNIYXNoaW5nKHBBQywgSW9DLCAoaW50KSBQb3J0TnVtYmVyLCBTS19UUlVFKTsKLQl9Ci0JCi0JaWYgKHBBUG9ydC0+UHJvbU1vZGUgIT0gU0tfUFJPTV9NT0RFX05PTkUpIHsKLQkJKHZvaWQpIFNrQWRkckdtYWNQcm9taXNjdW91c0NoYW5nZShwQUMsIElvQywgUG9ydE51bWJlciwgcEFQb3J0LT5Qcm9tTW9kZSk7Ci0JfQotI2Vsc2UgLyogU0tfU0xJTSAqLwotCi0JLyogU2V0IGFsbCBiaXRzIGluIDY0LWJpdCBoYXNoIHJlZ2lzdGVyLiAqLwotCUdNX09VVEhBU0goSW9DLCBQb3J0TnVtYmVyLCBHTV9NQ19BRERSX0gxLCAmT25lc0hhc2gpOwotCi0JLyogRW5hYmxlIEhhc2hpbmcgKi8KLQlTa01hY0hhc2hpbmcocEFDLCBJb0MsIChpbnQpIFBvcnROdW1iZXIsIFNLX1RSVUUpOwotCQotCSh2b2lkKSBTa0FkZHJHbWFjUHJvbWlzY3VvdXNDaGFuZ2UocEFDLCBJb0MsIFBvcnROdW1iZXIsIHBBUG9ydC0+UHJvbU1vZGUpOwotCQotI2VuZGlmIC8qIFNLX1NMSU0gKi8KLQkKLQkvKiBTZXQgcG9ydCdzIGN1cnJlbnQgcGh5c2ljYWwgTUFDIGFkZHJlc3MuICovCi0JT3V0QWRkciA9IChTS19VMTYgKikgJnBBUG9ydC0+Q3VycmVudE1hY0FkZHJlc3MuYVswXTsKLQlHTV9PVVRBRERSKElvQywgUG9ydE51bWJlciwgR01fU1JDX0FERFJfMUwsIE91dEFkZHIpOwotCQotCS8qIFNldCBwb3J0J3MgY3VycmVudCBsb2dpY2FsIE1BQyBhZGRyZXNzLiAqLwotCU91dEFkZHIgPSAoU0tfVTE2ICopICZwQVBvcnQtPkV4YWN0WzBdLmFbMF07Ci0JR01fT1VUQUREUihJb0MsIFBvcnROdW1iZXIsIEdNX1NSQ19BRERSXzJMLCBPdXRBZGRyKTsKLQkKLSNpZmRlZiBERUJVRwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfQUREUiwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU2tBZGRyR21hY01jVXBkYXRlOiBQZXJtYW5lbnQgUGh5c2ljYWwgTUFDIEFkZHJlc3M6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAotCQkJcEFQb3J0LT5FeGFjdFswXS5hWzBdLAotCQkJcEFQb3J0LT5FeGFjdFswXS5hWzFdLAotCQkJcEFQb3J0LT5FeGFjdFswXS5hWzJdLAotCQkJcEFQb3J0LT5FeGFjdFswXS5hWzNdLAotCQkJcEFQb3J0LT5FeGFjdFswXS5hWzRdLAotCQkJcEFQb3J0LT5FeGFjdFswXS5hWzVdKSkKLQkKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNrQWRkckdtYWNNY1VwZGF0ZTogUGh5c2ljYWwgTUFDIEFkZHJlc3M6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAotCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzBdLAotCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzFdLAotCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzJdLAotCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzNdLAotCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzRdLAotCQkJcEFQb3J0LT5DdXJyZW50TWFjQWRkcmVzcy5hWzVdKSkKLSNlbmRpZiAvKiBERUJVRyAqLwotCQotI2lmbmRlZiBTS19TTElNCi0JLyogRGV0ZXJtaW5lIHJldHVybiB2YWx1ZS4gKi8KLQlpZiAoSW5leGFjdCA9PSAwICYmIHBBUG9ydC0+UHJvbU1vZGUgPT0gMCkgewotCQlyZXR1cm4gKFNLX01DX0ZJTFRFUklOR19FWEFDVCk7Ci0JfQotCWVsc2UgewotCQlyZXR1cm4gKFNLX01DX0ZJTFRFUklOR19JTkVYQUNUKTsKLQl9Ci0jZWxzZSAvKiBTS19TTElNICovCi0JcmV0dXJuIChTS19NQ19GSUxURVJJTkdfSU5FWEFDVCk7Ci0jZW5kaWYgLyogU0tfU0xJTSAqLwotCQotfQkvKiBTa0FkZHJHbWFjTWNVcGRhdGUgKi8KLQotI2VuZGlmIC8qIFlVS09OICovCi0KLSNpZm5kZWYgU0tfTk9fTUFPCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0FkZHJPdmVycmlkZSAtIG92ZXJyaWRlIGEgcG9ydCdzIE1BQyBhZGRyZXNzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgb3ZlcnJpZGVzIHRoZSBNQUMgYWRkcmVzcyBvZiBvbmUgcG9ydC4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGUKLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglTS19BRERSX1NVQ0NFU1MgaWYgc3VjY2Vzc2Z1bC4KLSAqCVNLX0FERFJfRFVQTElDQVRFX0FERFJFU1MgaWYgZHVwbGljYXRlIE1BQyBhZGRyZXNzLgotICoJU0tfQUREUl9NVUxUSUNBU1RfQUREUkVTUyBpZiBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0IGFkZHJlc3MuCi0gKglTS19BRERSX1RPT19FQVJMWSBpZiBTS19JTklUX0lPIHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlLgotICovCi1pbnQJU2tBZGRyT3ZlcnJpZGUoCi1TS19BQwkJKnBBQywJCQkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJCUlvQywJCQkJLyogSS9PIGNvbnRleHQgKi8KLVNLX1UzMgkJUG9ydE51bWJlciwJCQkvKiBQb3J0IE51bWJlciAqLwotU0tfTUFDX0FERFIJU0tfRkFSICpwTmV3QWRkciwJLyogbmV3IE1BQyBhZGRyZXNzICovCi1pbnQJCQlGbGFncykJCQkJLyogbG9naWNhbC9waHlzaWNhbCBNQUMgYWRkcmVzcyAqLwotewotI2lmbmRlZiBTS19OT19STE1UCi0JU0tfRVZQQVJBCVBhcmE7Ci0jZW5kaWYgLyogIVNLX05PX1JMTVQgKi8KLQlTS19VMzIJCU5ldE51bWJlcjsKLQlTS19VMzIJCWk7Ci0JU0tfVTE2CQlTS19GQVIgKk91dEFkZHI7Ci0KLSNpZm5kZWYgU0tfTk9fUkxNVAotCU5ldE51bWJlciA9IHBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+TmV0TnVtYmVyOwotI2Vsc2UKLQlOZXROdW1iZXIgPSAwOwotI2VuZGlmIC8qIFNLX05PX1JMTVQgKi8KLSNpZiAoIWRlZmluZWQoU0tfU0xJTSkgfHwgZGVmaW5lZChERUJVRykpCi0JaWYgKFBvcnROdW1iZXIgPj0gKFNLX1UzMikgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kKSB7Ci0JCXJldHVybiAoU0tfQUREUl9JTExFR0FMX1BPUlQpOwotCX0KLSNlbmRpZiAvKiAhU0tfU0xJTSB8fCBERUJVRyAqLwotCWlmIChwTmV3QWRkciAhPSBOVUxMICYmIChwTmV3QWRkci0+YVswXSAmIFNLX01DX0JJVCkgIT0gMCkgewotCQlyZXR1cm4gKFNLX0FERFJfTVVMVElDQVNUX0FERFJFU1MpOwotCX0KLQotCWlmICghcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzU2V0KSB7Ci0JCXJldHVybiAoU0tfQUREUl9UT09fRUFSTFkpOwotCX0KLQotCWlmIChGbGFncyAmIFNLX0FERFJfU0VUX0xPR0lDQUwpIHsJLyogQWN0aXZhdGUgbG9naWNhbCBNQUMgYWRkcmVzcy4gKi8KLQkJLyogUGFyYW1ldGVyICpwTmV3QWRkciBpcyBpZ25vcmVkLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgKFNLX1UzMikgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJCWlmICghcEFDLT5BZGRyLlBvcnRbaV0uQ3VycmVudE1hY0FkZHJlc3NTZXQpIHsKLQkJCQlyZXR1cm4gKFNLX0FERFJfVE9PX0VBUkxZKTsKLQkJCX0KLQkJfQotI2lmbmRlZiBTS19OT19STE1UCi0JCS8qIFNldCBQb3J0TnVtYmVyIHRvIG51bWJlciBvZiBuZXQncyBhY3RpdmUgcG9ydC4gKi8KLQkJUG9ydE51bWJlciA9IHBBQy0+UmxtdC5OZXRbTmV0TnVtYmVyXS4KLQkJCVBvcnRbcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkFjdGl2ZVBvcnRdLT5Qb3J0TnVtYmVyOwotI2VuZGlmIC8qICFTS19OT19STE1UICovCi0JCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkV4YWN0WzBdID0KLQkJCXBBQy0+QWRkci5OZXRbTmV0TnVtYmVyXS5DdXJyZW50TWFjQWRkcmVzczsKLQotCQkvKiBXcml0ZSBhZGRyZXNzIHRvIGZpcnN0IGV4YWN0IG1hdGNoIGVudHJ5IG9mIGFjdGl2ZSBwb3J0LiAqLwotCQkodm9pZCkgU2tBZGRyTWNVcGRhdGUocEFDLCBJb0MsIFBvcnROdW1iZXIpOwotCX0KLQllbHNlIGlmIChGbGFncyAmIFNLX0FERFJfQ0xFQVJfTE9HSUNBTCkgewotCQkvKiBEZWFjdGl2YXRlIGxvZ2ljYWwgTUFDIGFkZHJlc3MuICovCi0JCS8qIFBhcmFtZXRlciAqcE5ld0FkZHIgaXMgaWdub3JlZC4gKi8KLQkJZm9yIChpID0gMDsgaSA8IChTS19VMzIpIHBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCQlpZiAoIXBBQy0+QWRkci5Qb3J0W2ldLkN1cnJlbnRNYWNBZGRyZXNzU2V0KSB7Ci0JCQkJcmV0dXJuIChTS19BRERSX1RPT19FQVJMWSk7Ci0JCQl9Ci0JCX0KLSNpZm5kZWYgU0tfTk9fUkxNVAotCQkvKiBTZXQgUG9ydE51bWJlciB0byBudW1iZXIgb2YgbmV0J3MgYWN0aXZlIHBvcnQuICovCi0JCVBvcnROdW1iZXIgPSBwQUMtPlJsbXQuTmV0W05ldE51bWJlcl0uCi0JCQlQb3J0W3BBQy0+QWRkci5OZXRbTmV0TnVtYmVyXS5BY3RpdmVQb3J0XS0+UG9ydE51bWJlcjsKLSNlbmRpZiAvKiAhU0tfTk9fUkxNVCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFDX0FERFJfTEVOOyBpKysgKSB7Ci0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5FeGFjdFswXS5hW2ldID0gMDsKLQkJfQotCi0JCS8qIFdyaXRlIGFkZHJlc3MgdG8gZmlyc3QgZXhhY3QgbWF0Y2ggZW50cnkgb2YgYWN0aXZlIHBvcnQuICovCi0JCSh2b2lkKSBTa0FkZHJNY1VwZGF0ZShwQUMsIElvQywgUG9ydE51bWJlcik7Ci0JfQotCWVsc2UgaWYgKEZsYWdzICYgU0tfQUREUl9QSFlTSUNBTF9BRERSRVNTKSB7CS8qIFBoeXNpY2FsIE1BQyBhZGRyZXNzLiAqLwotCQlpZiAoU0tfQUREUl9FUVVBTChwTmV3QWRkci0+YSwKLQkJCXBBQy0+QWRkci5OZXRbTmV0TnVtYmVyXS5DdXJyZW50TWFjQWRkcmVzcy5hKSkgewotCQkJcmV0dXJuIChTS19BRERSX0RVUExJQ0FURV9BRERSRVNTKTsKLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCAoU0tfVTMyKSBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQkJaWYgKCFwQUMtPkFkZHIuUG9ydFtpXS5DdXJyZW50TWFjQWRkcmVzc1NldCkgewotCQkJCXJldHVybiAoU0tfQUREUl9UT09fRUFSTFkpOwotCQkJfQotCi0JCQlpZiAoU0tfQUREUl9FUVVBTChwTmV3QWRkci0+YSwKLQkJCQlwQUMtPkFkZHIuUG9ydFtpXS5DdXJyZW50TWFjQWRkcmVzcy5hKSkgewotCQkJCWlmIChpID09IFBvcnROdW1iZXIpIHsKLQkJCQkJcmV0dXJuIChTS19BRERSX1NVQ0NFU1MpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJcmV0dXJuIChTS19BRERSX0RVUExJQ0FURV9BRERSRVNTKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5QcmV2aW91c01hY0FkZHJlc3MgPQotCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uQ3VycmVudE1hY0FkZHJlc3M7Ci0JCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzID0gKnBOZXdBZGRyOwotCi0JCS8qIENoYW5nZSBwb3J0J3MgcGh5c2ljYWwgTUFDIGFkZHJlc3MuICovCi0JCU91dEFkZHIgPSAoU0tfVTE2IFNLX0ZBUiAqKSBwTmV3QWRkcjsKLSNpZmRlZiBHRU5FU0lTCi0JCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQlYTV9PVVRBRERSKElvQywgUG9ydE51bWJlciwgWE1fU0EsIE91dEFkZHIpOwotCQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotI2lmZGVmIFlVS09OCi0JCWlmICghcEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkJR01fT1VUQUREUihJb0MsIFBvcnROdW1iZXIsIEdNX1NSQ19BRERSXzFMLCBPdXRBZGRyKTsKLQkJfQotI2VuZGlmIC8qIFlVS09OICovCi0KLSNpZm5kZWYgU0tfTk9fUkxNVAotCQkvKiBSZXBvcnQgYWRkcmVzcyBjaGFuZ2UgdG8gUkxNVC4gKi8KLQkJUGFyYS5QYXJhMzJbMF0gPSBQb3J0TnVtYmVyOwotCQlQYXJhLlBhcmEzMlswXSA9IC0xOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfUE9SVF9BRERSLCBQYXJhKTsKLSNlbmRpZiAvKiAhU0tfTk9fUkxNVCAqLwotCX0KLQllbHNlIHsJLyogTG9naWNhbCBNQUMgYWRkcmVzcy4gKi8KLQkJaWYgKFNLX0FERFJfRVFVQUwocE5ld0FkZHItPmEsCi0JCQlwQUMtPkFkZHIuTmV0W05ldE51bWJlcl0uQ3VycmVudE1hY0FkZHJlc3MuYSkpIHsKLQkJCXJldHVybiAoU0tfQUREUl9TVUNDRVNTKTsKLQkJfQotCQkKLQkJZm9yIChpID0gMDsgaSA8IChTS19VMzIpIHBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCQlpZiAoIXBBQy0+QWRkci5Qb3J0W2ldLkN1cnJlbnRNYWNBZGRyZXNzU2V0KSB7Ci0JCQkJcmV0dXJuIChTS19BRERSX1RPT19FQVJMWSk7Ci0JCQl9Ci0KLQkJCWlmIChTS19BRERSX0VRVUFMKHBOZXdBZGRyLT5hLAotCQkJCXBBQy0+QWRkci5Qb3J0W2ldLkN1cnJlbnRNYWNBZGRyZXNzLmEpKSB7Ci0JCQkJcmV0dXJuIChTS19BRERSX0RVUExJQ0FURV9BRERSRVNTKTsKLQkJCX0KLQkJfQotCQkKLQkJLyoKLQkJICogSW4gY2FzZSB0aGF0IHRoZSBwaHlzaWNhbCBhbmQgdGhlIGxvZ2ljYWwgTUFDIGFkZHJlc3NlcyBhcmUgZXF1YWwKLQkJICogd2UgbXVzdCBhbHNvIGNoYW5nZSB0aGUgcGh5c2ljYWwgTUFDIGFkZHJlc3MgaGVyZS4KLQkJICogSW4gdGhpcyBjYXNlIHdlIGhhdmUgYW4gYWRhcHRlciB3aGljaCBpbml0aWFsbHkgd2FzIHByb2dyYW1tZWQgd2l0aAotCQkgKiB0d28gaWRlbnRpY2FsIE1BQyBhZGRyZXNzZXMuCi0JCSAqLwotCQlpZiAoU0tfQUREUl9FUVVBTChwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5DdXJyZW50TWFjQWRkcmVzcy5hLAotCQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkV4YWN0WzBdLmEpKSB7Ci0JCQkKLQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLlByZXZpb3VzTWFjQWRkcmVzcyA9Ci0JCQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uQ3VycmVudE1hY0FkZHJlc3M7Ci0JCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5DdXJyZW50TWFjQWRkcmVzcyA9ICpwTmV3QWRkcjsKLQkJCQotI2lmbmRlZiBTS19OT19STE1UCi0JCQkvKiBSZXBvcnQgYWRkcmVzcyBjaGFuZ2UgdG8gUkxNVC4gKi8KLQkJCVBhcmEuUGFyYTMyWzBdID0gUG9ydE51bWJlcjsKLQkJCVBhcmEuUGFyYTMyWzBdID0gLTE7Ci0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfUE9SVF9BRERSLCBQYXJhKTsKLSNlbmRpZiAvKiAhU0tfTk9fUkxNVCAqLwotCQl9Ci0JCQotI2lmbmRlZiBTS19OT19STE1UCi0JCS8qIFNldCBQb3J0TnVtYmVyIHRvIG51bWJlciBvZiBuZXQncyBhY3RpdmUgcG9ydC4gKi8KLQkJUG9ydE51bWJlciA9IHBBQy0+UmxtdC5OZXRbTmV0TnVtYmVyXS4KLQkJCVBvcnRbcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkFjdGl2ZVBvcnRdLT5Qb3J0TnVtYmVyOwotI2VuZGlmIC8qICFTS19OT19STE1UICovCi0JCXBBQy0+QWRkci5OZXRbTmV0TnVtYmVyXS5DdXJyZW50TWFjQWRkcmVzcyA9ICpwTmV3QWRkcjsKLQkJcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uRXhhY3RbMF0gPSAqcE5ld0FkZHI7Ci0jaWZkZWYgREVCVUcKLQkJU0tfREJHX01TRyhwQUMsU0tfREJHTU9EX0FERFIsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTa0FkZHJPdmVycmlkZTogUGVybWFuZW50IE1BQyBBZGRyZXNzOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKLQkJCQlwQUMtPkFkZHIuTmV0W05ldE51bWJlcl0uUGVybWFuZW50TWFjQWRkcmVzcy5hWzBdLAotCQkJCXBBQy0+QWRkci5OZXRbTmV0TnVtYmVyXS5QZXJtYW5lbnRNYWNBZGRyZXNzLmFbMV0sCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLlBlcm1hbmVudE1hY0FkZHJlc3MuYVsyXSwKLQkJCQlwQUMtPkFkZHIuTmV0W05ldE51bWJlcl0uUGVybWFuZW50TWFjQWRkcmVzcy5hWzNdLAotCQkJCXBBQy0+QWRkci5OZXRbTmV0TnVtYmVyXS5QZXJtYW5lbnRNYWNBZGRyZXNzLmFbNF0sCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLlBlcm1hbmVudE1hY0FkZHJlc3MuYVs1XSkpCi0JCQotCQlTS19EQkdfTVNHKHBBQyxTS19EQkdNT0RfQUREUiwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNrQWRkck92ZXJyaWRlOiBOZXcgbG9naWNhbCBNQUMgQWRkcmVzczogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbMF0sCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbMV0sCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbMl0sCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbM10sCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbNF0sCi0JCQkJcEFDLT5BZGRyLk5ldFtOZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbNV0pKQotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAgICAgLyogV3JpdGUgYWRkcmVzcyB0byBmaXJzdCBleGFjdCBtYXRjaCBlbnRyeSBvZiBhY3RpdmUgcG9ydC4gKi8KLQkJKHZvaWQpIFNrQWRkck1jVXBkYXRlKHBBQywgSW9DLCBQb3J0TnVtYmVyKTsKLQl9Ci0KLQlyZXR1cm4gKFNLX0FERFJfU1VDQ0VTUyk7Ci0JCi19CS8qIFNrQWRkck92ZXJyaWRlICovCi0KLQotI2VuZGlmIC8qIFNLX05PX01BTyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tBZGRyUHJvbWlzY3VvdXNDaGFuZ2UgLSBzZXQgcHJvbWlzY3VvdXMgbW9kZSBmb3IgZ2l2ZW4gcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIG1hbmFnZXMgcHJvbWlzY3VvdXMgbW9kZToKLSAqCS0gbm9uZQotICoJLSBhbGwgTExDIGZyYW1lcwotICoJLSBhbGwgTUMgZnJhbWVzCi0gKgotICoJSXQgY2FsbHMgZWl0aGVyIFNrQWRkclhtYWNQcm9taXNjdW91c0NoYW5nZSBvcgotICoJU2tBZGRyR21hY1Byb21pc2N1b3VzQ2hhbmdlLCBhY2NvcmRpbmcgdG8gdGhlIGFkYXB0ZXIgaW4gdXNlLgotICoJVGhlIHJlYWwgd29yayBpcyBkb25lIHRoZXJlLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZQotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0lPCi0gKgotICogUmV0dXJuczoKLSAqCVNLX0FERFJfU1VDQ0VTUwotICoJU0tfQUREUl9JTExFR0FMX1BPUlQKLSAqLwotaW50CVNrQWRkclByb21pc2N1b3VzQ2hhbmdlKAotU0tfQUMJKnBBQywJCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkJLyogSS9PIGNvbnRleHQgKi8KLVNLX1UzMglQb3J0TnVtYmVyLAkJLyogcG9ydCB3aG9zZSBwcm9taXNjdW91cyBtb2RlIGNoYW5nZXMgKi8KLWludAkJTmV3UHJvbU1vZGUpCS8qIG5ldyBwcm9taXNjdW91cyBtb2RlICovCi17Ci0JaW50IFJldHVybkNvZGUgPSAwOwotI2lmICghZGVmaW5lZChTS19TTElNKSB8fCBkZWZpbmVkKERFQlVHKSkKLQlpZiAoUG9ydE51bWJlciA+PSAoU0tfVTMyKSBwQUMtPkdJbmkuR0lNYWNzRm91bmQpIHsKLQkJcmV0dXJuIChTS19BRERSX0lMTEVHQUxfUE9SVCk7Ci0JfQotI2VuZGlmIC8qICFTS19TTElNIHx8IERFQlVHICovCi0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJUmV0dXJuQ29kZSA9Ci0JCQlTa0FkZHJYbWFjUHJvbWlzY3VvdXNDaGFuZ2UocEFDLCBJb0MsIFBvcnROdW1iZXIsIE5ld1Byb21Nb2RlKTsKLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotI2lmZGVmIFlVS09OCi0JaWYgKCFwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCVJldHVybkNvZGUgPQotCQkJU2tBZGRyR21hY1Byb21pc2N1b3VzQ2hhbmdlKHBBQywgSW9DLCBQb3J0TnVtYmVyLCBOZXdQcm9tTW9kZSk7Ci0JfQotI2VuZGlmIC8qIFlVS09OICovCi0KLQlyZXR1cm4gKFJldHVybkNvZGUpOwotCi19CS8qIFNrQWRkclByb21pc2N1b3VzQ2hhbmdlICovCi0KLSNpZmRlZiBHRU5FU0lTCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0FkZHJYbWFjUHJvbWlzY3VvdXNDaGFuZ2UgLSBzZXQgcHJvbWlzY3VvdXMgbW9kZSBmb3IgZ2l2ZW4gcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIG1hbmFnZXMgcHJvbWlzY3VvdXMgbW9kZToKLSAqCS0gbm9uZQotICoJLSBhbGwgTExDIGZyYW1lcwotICoJLSBhbGwgTUMgZnJhbWVzCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlCi0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQUREUl9TVUNDRVNTCi0gKglTS19BRERSX0lMTEVHQUxfUE9SVAotICovCi1zdGF0aWMgaW50CVNrQWRkclhtYWNQcm9taXNjdW91c0NoYW5nZSgKLVNLX0FDCSpwQUMsCQkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJCS8qIEkvTyBjb250ZXh0ICovCi1TS19VMzIJUG9ydE51bWJlciwJCS8qIHBvcnQgd2hvc2UgcHJvbWlzY3VvdXMgbW9kZSBjaGFuZ2VzICovCi1pbnQJCU5ld1Byb21Nb2RlKQkvKiBuZXcgcHJvbWlzY3VvdXMgbW9kZSAqLwotewotCWludAkJCWk7Ci0JU0tfQk9PTAkJSW5leGFjdE1vZGVCaXQ7Ci0JU0tfVTgJCUluZXhhY3Q7Ci0JU0tfVTgJCUh3SW5leGFjdDsKLQlTS19GSUxURVI2NAlId0luZXhhY3RGaWx0ZXI7Ci0JU0tfVTE2CQlMb01vZGU7CQkvKiBMb3dlciAxNiBiaXRzIG9mIFhNQUMgTW9kZSBSZWdpc3Rlci4gKi8KLQlpbnQJCQlDdXJQcm9tTW9kZSA9IFNLX1BST01fTU9ERV9OT05FOwotCi0JLyogUmVhZCBDdXJQcm9tTW9kZSBmcm9tIEhhcmR3YXJlLiAqLwotCVhNX0lOMTYoSW9DLCBQb3J0TnVtYmVyLCBYTV9NT0RFLCAmTG9Nb2RlKTsKLQotCWlmICgoTG9Nb2RlICYgWE1fTURfRU5BX1BST00pICE9IDApIHsKLQkJLyogUHJvbWlzY3VvdXMgbW9kZSEgKi8KLQkJQ3VyUHJvbU1vZGUgfD0gU0tfUFJPTV9NT0RFX0xMQzsKLQl9Ci0JCi0JZm9yIChJbmV4YWN0ID0gMHhGRiwgaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJSW5leGFjdCAmPSBwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzW2ldOwotCX0KLQlpZiAoSW5leGFjdCA9PSAweEZGKSB7Ci0JCUN1clByb21Nb2RlIHw9IChwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5Qcm9tTW9kZSAmIFNLX1BST01fTU9ERV9BTExfTUMpOwotCX0KLQllbHNlIHsKLQkJLyogR2V0IEluZXhhY3RNb2RlQml0IChiaXQgWE1fTURfRU5BX0hBU0ggaW4gbW9kZSByZWdpc3RlcikgKi8KLQkJWE1fSU4xNihJb0MsIFBvcnROdW1iZXIsIFhNX01PREUsICZMb01vZGUpOwotCQkKLQkJSW5leGFjdE1vZGVCaXQgPSAoTG9Nb2RlICYgWE1fTURfRU5BX0hBU0gpICE9IDA7Ci0KLQkJLyogUmVhZCA2NC1iaXQgaGFzaCByZWdpc3RlciBmcm9tIFhNQUMgKi8KLQkJWE1fSU5IQVNIKElvQywgUG9ydE51bWJlciwgWE1fSFNNLCAmSHdJbmV4YWN0RmlsdGVyLkJ5dGVzWzBdKTsKLQotCQlmb3IgKEh3SW5leGFjdCA9IDB4RkYsIGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlId0luZXhhY3QgJj0gSHdJbmV4YWN0RmlsdGVyLkJ5dGVzW2ldOwotCQl9Ci0KLQkJaWYgKEluZXhhY3RNb2RlQml0ICYmIChId0luZXhhY3QgPT0gMHhGRikpIHsKLQkJCUN1clByb21Nb2RlIHw9IFNLX1BST01fTU9ERV9BTExfTUM7Ci0JCX0KLQl9Ci0KLQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5Qcm9tTW9kZSA9IE5ld1Byb21Nb2RlOwotCi0JaWYgKE5ld1Byb21Nb2RlID09IEN1clByb21Nb2RlKSB7Ci0JCXJldHVybiAoU0tfQUREUl9TVUNDRVNTKTsKLQl9Ci0KLQlpZiAoKE5ld1Byb21Nb2RlICYgU0tfUFJPTV9NT0RFX0FMTF9NQykgJiYKLQkJIShDdXJQcm9tTW9kZSAmIFNLX1BST01fTU9ERV9BTExfTUMpKSB7CS8qIEFsbCBNQy4gKi8KLQkJCi0JCS8qIFNldCBhbGwgYml0cyBpbiA2NC1iaXQgaGFzaCByZWdpc3Rlci4gKi8KLQkJWE1fT1VUSEFTSChJb0MsIFBvcnROdW1iZXIsIFhNX0hTTSwgJk9uZXNIYXNoKTsKLQotCQkvKiBFbmFibGUgSGFzaGluZyAqLwotCQlTa01hY0hhc2hpbmcocEFDLCBJb0MsIChpbnQpIFBvcnROdW1iZXIsIFNLX1RSVUUpOwotCX0KLQllbHNlIGlmICgoQ3VyUHJvbU1vZGUgJiBTS19QUk9NX01PREVfQUxMX01DKSAmJgotCQkhKE5ld1Byb21Nb2RlICYgU0tfUFJPTV9NT0RFX0FMTF9NQykpIHsJLyogTm9ybSBNQy4gKi8KLQkJZm9yIChJbmV4YWN0ID0gMCwgaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCUluZXhhY3QgfD0gcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1tpXTsKLQkJfQotCQlpZiAoSW5leGFjdCA9PSAwKSB7Ci0JCQkvKiBEaXNhYmxlIEhhc2hpbmcgKi8KLQkJCVNrTWFjSGFzaGluZyhwQUMsIElvQywgKGludCkgUG9ydE51bWJlciwgU0tfRkFMU0UpOwotCQl9Ci0JCWVsc2UgewotCQkJLyogU2V0IDY0LWJpdCBoYXNoIHJlZ2lzdGVyIHRvIEluZXhhY3RGaWx0ZXIuICovCi0JCQlYTV9PVVRIQVNIKElvQywgUG9ydE51bWJlciwgWE1fSFNNLAotCQkJCSZwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzWzBdKTsKLQotCQkJLyogRW5hYmxlIEhhc2hpbmcgKi8KLQkJCVNrTWFjSGFzaGluZyhwQUMsIElvQywgKGludCkgUG9ydE51bWJlciwgU0tfVFJVRSk7Ci0JCX0KLQl9Ci0KLQlpZiAoKE5ld1Byb21Nb2RlICYgU0tfUFJPTV9NT0RFX0xMQykgJiYKLQkJIShDdXJQcm9tTW9kZSAmIFNLX1BST01fTU9ERV9MTEMpKSB7CS8qIFByb20uIExMQyAqLwotCQkvKiBTZXQgdGhlIE1BQyBpbiBQcm9taXNjdW91cyBNb2RlICovCi0JCVNrTWFjUHJvbWlzY01vZGUocEFDLCBJb0MsIChpbnQpIFBvcnROdW1iZXIsIFNLX1RSVUUpOwotCX0KLQllbHNlIGlmICgoQ3VyUHJvbU1vZGUgJiBTS19QUk9NX01PREVfTExDKSAmJgotCQkhKE5ld1Byb21Nb2RlICYgU0tfUFJPTV9NT0RFX0xMQykpIHsJLyogTm9ybS4gTExDLiAqLwotCQkvKiBDbGVhciBQcm9taXNjdW91cyBNb2RlICovCi0JCVNrTWFjUHJvbWlzY01vZGUocEFDLCBJb0MsIChpbnQpIFBvcnROdW1iZXIsIFNLX0ZBTFNFKTsKLQl9Ci0JCi0JcmV0dXJuIChTS19BRERSX1NVQ0NFU1MpOwotCQotfQkvKiBTa0FkZHJYbWFjUHJvbWlzY3VvdXNDaGFuZ2UgKi8KLQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQotI2lmZGVmIFlVS09OCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0FkZHJHbWFjUHJvbWlzY3VvdXNDaGFuZ2UgLSBzZXQgcHJvbWlzY3VvdXMgbW9kZSBmb3IgZ2l2ZW4gcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIG1hbmFnZXMgcHJvbWlzY3VvdXMgbW9kZToKLSAqCS0gbm9uZQotICoJLSBhbGwgTExDIGZyYW1lcwotICoJLSBhbGwgTUMgZnJhbWVzCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlCi0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQUREUl9TVUNDRVNTCi0gKglTS19BRERSX0lMTEVHQUxfUE9SVAotICovCi1zdGF0aWMgaW50CVNrQWRkckdtYWNQcm9taXNjdW91c0NoYW5nZSgKLVNLX0FDCSpwQUMsCQkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJCS8qIEkvTyBjb250ZXh0ICovCi1TS19VMzIJUG9ydE51bWJlciwJCS8qIHBvcnQgd2hvc2UgcHJvbWlzY3VvdXMgbW9kZSBjaGFuZ2VzICovCi1pbnQJCU5ld1Byb21Nb2RlKQkvKiBuZXcgcHJvbWlzY3VvdXMgbW9kZSAqLwotewotCVNLX1UxNgkJUmVjZWl2ZUNvbnRyb2w7CS8qIEdNQUMgUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVyICovCi0JaW50CQlDdXJQcm9tTW9kZSA9IFNLX1BST01fTU9ERV9OT05FOwotCi0JLyogUmVhZCBDdXJQcm9tTW9kZSBmcm9tIEhhcmR3YXJlLiAqLwotCUdNX0lOMTYoSW9DLCBQb3J0TnVtYmVyLCBHTV9SWF9DVFJMLCAmUmVjZWl2ZUNvbnRyb2wpOwotCi0JaWYgKChSZWNlaXZlQ29udHJvbCAmIChHTV9SWENSX1VDRl9FTkEgfCBHTV9SWENSX01DRl9FTkEpKSA9PSAwKSB7Ci0JCS8qIFByb21pc2N1b3VzIG1vZGUhICovCi0JCUN1clByb21Nb2RlIHw9IFNLX1BST01fTU9ERV9MTEM7Ci0JfQotCi0JaWYgKChSZWNlaXZlQ29udHJvbCAmIEdNX1JYQ1JfTUNGX0VOQSkgPT0gMCkgewotCQkvKiBBbGwgTXVsdGljYXN0IG1vZGUhICovCi0JCUN1clByb21Nb2RlIHw9IChwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5Qcm9tTW9kZSAmIFNLX1BST01fTU9ERV9BTExfTUMpOwotCX0KLQotCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLlByb21Nb2RlID0gTmV3UHJvbU1vZGU7Ci0KLQlpZiAoTmV3UHJvbU1vZGUgPT0gQ3VyUHJvbU1vZGUpIHsKLQkJcmV0dXJuIChTS19BRERSX1NVQ0NFU1MpOwotCX0KLQkKLQlpZiAoKE5ld1Byb21Nb2RlICYgU0tfUFJPTV9NT0RFX0FMTF9NQykgJiYKLQkJIShDdXJQcm9tTW9kZSAmIFNLX1BST01fTU9ERV9BTExfTUMpKSB7CS8qIEFsbCBNQyAqLwotCQkKLQkJLyogU2V0IGFsbCBiaXRzIGluIDY0LWJpdCBoYXNoIHJlZ2lzdGVyLiAqLwotCQlHTV9PVVRIQVNIKElvQywgUG9ydE51bWJlciwgR01fTUNfQUREUl9IMSwgJk9uZXNIYXNoKTsKLQkJCi0JCS8qIEVuYWJsZSBIYXNoaW5nICovCi0JCVNrTWFjSGFzaGluZyhwQUMsIElvQywgKGludCkgUG9ydE51bWJlciwgU0tfVFJVRSk7Ci0JfQotCQotCWlmICgoQ3VyUHJvbU1vZGUgJiBTS19QUk9NX01PREVfQUxMX01DKSAmJgotCQkhKE5ld1Byb21Nb2RlICYgU0tfUFJPTV9NT0RFX0FMTF9NQykpIHsJLyogTm9ybS4gTUMgKi8KLQotCQkvKiBTZXQgNjQtYml0IGhhc2ggcmVnaXN0ZXIgdG8gSW5leGFjdEZpbHRlci4gKi8KLQkJR01fT1VUSEFTSChJb0MsIFBvcnROdW1iZXIsIEdNX01DX0FERFJfSDEsCi0JCQkmcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1swXSk7Ci0KLQkJLyogRW5hYmxlIEhhc2hpbmcuICovCi0JCVNrTWFjSGFzaGluZyhwQUMsIElvQywgKGludCkgUG9ydE51bWJlciwgU0tfVFJVRSk7Ci0JfQotCi0JaWYgKChOZXdQcm9tTW9kZSAmIFNLX1BST01fTU9ERV9MTEMpICYmCi0JCSEoQ3VyUHJvbU1vZGUgJiBTS19QUk9NX01PREVfTExDKSkgewkvKiBQcm9tLiBMTEMgKi8KLQkJCi0JCS8qIFNldCB0aGUgTUFDIHRvIFByb21pc2N1b3VzIE1vZGUuICovCi0JCVNrTWFjUHJvbWlzY01vZGUocEFDLCBJb0MsIChpbnQpIFBvcnROdW1iZXIsIFNLX1RSVUUpOwotCX0KLQllbHNlIGlmICgoQ3VyUHJvbU1vZGUgJiBTS19QUk9NX01PREVfTExDKSAmJgotCQkhKE5ld1Byb21Nb2RlICYgU0tfUFJPTV9NT0RFX0xMQykpIHsJLyogTm9ybS4gTExDICovCi0JCQotCQkvKiBDbGVhciBQcm9taXNjdW91cyBNb2RlLiAqLwotCQlTa01hY1Byb21pc2NNb2RlKHBBQywgSW9DLCAoaW50KSBQb3J0TnVtYmVyLCBTS19GQUxTRSk7Ci0JfQotCi0JcmV0dXJuIChTS19BRERSX1NVQ0NFU1MpOwotCQotfQkvKiBTa0FkZHJHbWFjUHJvbWlzY3VvdXNDaGFuZ2UgKi8KLQotI2VuZGlmIC8qIFlVS09OICovCi0KLSNpZm5kZWYgU0tfU0xJTQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tBZGRyU3dhcCAtIHN3YXAgYWRkcmVzcyBpbmZvCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgc3dhcHMgYWRkcmVzcyBpbmZvIG9mIHR3byBwb3J0cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGUKLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglTS19BRERSX1NVQ0NFU1MKLSAqCVNLX0FERFJfSUxMRUdBTF9QT1JUCi0gKi8KLWludAlTa0FkZHJTd2FwKAotU0tfQUMJKnBBQywJCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkJLyogSS9PIGNvbnRleHQgKi8KLVNLX1UzMglGcm9tUG9ydE51bWJlciwJCS8qIFBvcnQxIEluZGV4ICovCi1TS19VMzIJVG9Qb3J0TnVtYmVyKQkJLyogUG9ydDIgSW5kZXggKi8KLXsKLQlpbnQJCQlpOwotCVNLX1U4CQlCeXRlOwotCVNLX01BQ19BRERSCU1hY0FkZHI7Ci0JU0tfVTMyCQlEV29yZDsKLQotCWlmIChGcm9tUG9ydE51bWJlciA+PSAoU0tfVTMyKSBwQUMtPkdJbmkuR0lNYWNzRm91bmQpIHsKLQkJcmV0dXJuIChTS19BRERSX0lMTEVHQUxfUE9SVCk7Ci0JfQotCi0JaWYgKFRvUG9ydE51bWJlciA+PSAoU0tfVTMyKSBwQUMtPkdJbmkuR0lNYWNzRm91bmQpIHsKLQkJcmV0dXJuIChTS19BRERSX0lMTEVHQUxfUE9SVCk7Ci0JfQotCi0JaWYgKHBBQy0+UmxtdC5Qb3J0W0Zyb21Qb3J0TnVtYmVyXS5OZXQgIT0gcEFDLT5SbG10LlBvcnRbVG9Qb3J0TnVtYmVyXS5OZXQpIHsKLQkJcmV0dXJuIChTS19BRERSX0lMTEVHQUxfUE9SVCk7Ci0JfQotCi0JLyoKLQkgKiBTd2FwOgotCSAqIC0gRXhhY3QgTWF0Y2ggRW50cmllcyAoR0VuZXNpcyBhbmQgWXVrb24pCi0JICogICBZdWtvbiB1c2VzIGZpcnN0IGVudHJ5IGZvciB0aGUgbG9naWNhbCBNQUMKLQkgKiAgIGFkZHJlc3MgKHN0b3JlZCBpbiB0aGUgc2Vjb25kIEdNQUMgcmVnaXN0ZXIpLgotCSAqIC0gRmlyc3RFeGFjdE1hdGNoUmxtdCAoR0VuZXNpcyBvbmx5KQotCSAqIC0gTmV4dEV4YWN0TWF0Y2hSbG10IChHRW5lc2lzIG9ubHkpCi0JICogLSBGaXJzdEV4YWN0TWF0Y2hEcnYgKEdFbmVzaXMgb25seSkKLQkgKiAtIE5leHRFeGFjdE1hdGNoRHJ2IChHRW5lc2lzIG9ubHkpCi0JICogLSA2NC1iaXQgZmlsdGVyIChJbmV4YWN0RmlsdGVyKQotCSAqIC0gUHJvbWlzY3VvdXMgTW9kZQotCSAqIG9mIHBvcnRzLgotCSAqLwotCi0JZm9yIChpID0gMDsgaSA8IFNLX0FERFJfRVhBQ1RfTUFUQ0hFUzsgaSsrKSB7Ci0JCU1hY0FkZHIgPSBwQUMtPkFkZHIuUG9ydFtGcm9tUG9ydE51bWJlcl0uRXhhY3RbaV07Ci0JCXBBQy0+QWRkci5Qb3J0W0Zyb21Qb3J0TnVtYmVyXS5FeGFjdFtpXSA9Ci0JCQlwQUMtPkFkZHIuUG9ydFtUb1BvcnROdW1iZXJdLkV4YWN0W2ldOwotCQlwQUMtPkFkZHIuUG9ydFtUb1BvcnROdW1iZXJdLkV4YWN0W2ldID0gTWFjQWRkcjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCUJ5dGUgPSBwQUMtPkFkZHIuUG9ydFtGcm9tUG9ydE51bWJlcl0uSW5leGFjdEZpbHRlci5CeXRlc1tpXTsKLQkJcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbaV0gPQotCQkJcEFDLT5BZGRyLlBvcnRbVG9Qb3J0TnVtYmVyXS5JbmV4YWN0RmlsdGVyLkJ5dGVzW2ldOwotCQlwQUMtPkFkZHIuUG9ydFtUb1BvcnROdW1iZXJdLkluZXhhY3RGaWx0ZXIuQnl0ZXNbaV0gPSBCeXRlOwotCX0KLQkKLQlpID0gcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLlByb21Nb2RlOwotCXBBQy0+QWRkci5Qb3J0W0Zyb21Qb3J0TnVtYmVyXS5Qcm9tTW9kZSA9IHBBQy0+QWRkci5Qb3J0W1RvUG9ydE51bWJlcl0uUHJvbU1vZGU7Ci0JcEFDLT5BZGRyLlBvcnRbVG9Qb3J0TnVtYmVyXS5Qcm9tTW9kZSA9IGk7Ci0JCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJRFdvcmQgPSBwQUMtPkFkZHIuUG9ydFtGcm9tUG9ydE51bWJlcl0uRmlyc3RFeGFjdE1hdGNoUmxtdDsKLQkJcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLkZpcnN0RXhhY3RNYXRjaFJsbXQgPQotCQkJcEFDLT5BZGRyLlBvcnRbVG9Qb3J0TnVtYmVyXS5GaXJzdEV4YWN0TWF0Y2hSbG10OwotCQlwQUMtPkFkZHIuUG9ydFtUb1BvcnROdW1iZXJdLkZpcnN0RXhhY3RNYXRjaFJsbXQgPSBEV29yZDsKLQkJCi0JCURXb3JkID0gcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLk5leHRFeGFjdE1hdGNoUmxtdDsKLQkJcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLk5leHRFeGFjdE1hdGNoUmxtdCA9Ci0JCQlwQUMtPkFkZHIuUG9ydFtUb1BvcnROdW1iZXJdLk5leHRFeGFjdE1hdGNoUmxtdDsKLQkJcEFDLT5BZGRyLlBvcnRbVG9Qb3J0TnVtYmVyXS5OZXh0RXhhY3RNYXRjaFJsbXQgPSBEV29yZDsKLQkJCi0JCURXb3JkID0gcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLkZpcnN0RXhhY3RNYXRjaERydjsKLQkJcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLkZpcnN0RXhhY3RNYXRjaERydiA9Ci0JCQlwQUMtPkFkZHIuUG9ydFtUb1BvcnROdW1iZXJdLkZpcnN0RXhhY3RNYXRjaERydjsKLQkJcEFDLT5BZGRyLlBvcnRbVG9Qb3J0TnVtYmVyXS5GaXJzdEV4YWN0TWF0Y2hEcnYgPSBEV29yZDsKLQkJCi0JCURXb3JkID0gcEFDLT5BZGRyLlBvcnRbRnJvbVBvcnROdW1iZXJdLk5leHRFeGFjdE1hdGNoRHJ2OwotCQlwQUMtPkFkZHIuUG9ydFtGcm9tUG9ydE51bWJlcl0uTmV4dEV4YWN0TWF0Y2hEcnYgPQotCQkJcEFDLT5BZGRyLlBvcnRbVG9Qb3J0TnVtYmVyXS5OZXh0RXhhY3RNYXRjaERydjsKLQkJcEFDLT5BZGRyLlBvcnRbVG9Qb3J0TnVtYmVyXS5OZXh0RXhhY3RNYXRjaERydiA9IERXb3JkOwotCX0KLQkKLQkvKiBDQVVUSU9OOiBTb2x1dGlvbiB3b3JrcyBpZiBvbmx5IHBvcnRzIG9mIG9uZSBhZGFwdGVyIGFyZSBpbiB1c2UuICovCi0JZm9yIChpID0gMDsgKFNLX1UzMikgaSA8IHBBQy0+UmxtdC5OZXRbcEFDLT5SbG10LlBvcnRbVG9Qb3J0TnVtYmVyXS4KLQkJTmV0LT5OZXROdW1iZXJdLk51bVBvcnRzOyBpKyspIHsKLQkJaWYgKHBBQy0+UmxtdC5OZXRbcEFDLT5SbG10LlBvcnRbVG9Qb3J0TnVtYmVyXS5OZXQtPk5ldE51bWJlcl0uCi0JCQlQb3J0W2ldLT5Qb3J0TnVtYmVyID09IFRvUG9ydE51bWJlcikgewotCQkJcEFDLT5BZGRyLk5ldFtwQUMtPlJsbXQuUG9ydFtUb1BvcnROdW1iZXJdLk5ldC0+TmV0TnVtYmVyXS4KLQkJCQlBY3RpdmVQb3J0ID0gaTsKLQkJCS8qIDIwMDAxMjA3IFJBOiBXYXMgIlRvUG9ydE51bWJlcjsiLiAqLwotCQl9Ci0JfQotCQotCSh2b2lkKSBTa0FkZHJNY1VwZGF0ZShwQUMsIElvQywgRnJvbVBvcnROdW1iZXIpOwotCSh2b2lkKSBTa0FkZHJNY1VwZGF0ZShwQUMsIElvQywgVG9Qb3J0TnVtYmVyKTsKLQotCXJldHVybiAoU0tfQUREUl9TVUNDRVNTKTsKLQkKLX0JLyogU2tBZGRyU3dhcCAqLwotCi0jZW5kaWYgLyogIVNLX1NMSU0gKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYJLyogX19jcGx1c3BsdXMgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2RpbS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2RpbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2NlMDNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tkaW0uYworKysgL2Rldi9udWxsCkBAIC0xLDc0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tkaW0uYwotICogUHJvamVjdDoJR0VuZXNpcywgUENJIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjUgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMTEvMjggMTI6NTU6NDAgJAotICogUHVycG9zZToJQWxsIGZ1bmN0aW9ucyB0byBtYWludGFpbiBpbnRlcnJ1cHQgbW9kZXJhdGlvbgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QgR21iSC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBUaGlzIG1vZHVsZSBpcyBpbnRlbmRlZCB0byBtYW5hZ2UgdGhlIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gb24gYm90aCAgIAotICogR0VuZXNpcyBhbmQgWXVrb24gYWRhcHRlcnMuCi0gKgotICogSW5jbHVkZSBGaWxlIEhpZXJhcmNoeToKLSAqCi0gKgkic2tkcnYxc3QuaCIKLSAqCSJza2RydjJuZC5oIgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYJbGludAotc3RhdGljIGNvbnN0IGNoYXIgU3lzS29ubmVjdEZpbGVJZFtdID0KLQkiQCgjKSAkSWQ6IHNrZGltLmMsdiAxLjUgMjAwMy8xMS8yOCAxMjo1NTo0MCBycm9lc2xlciBFeHAgJCAoQykgU3lzS29ubmVjdC4iOwotI2VuZGlmCi0KLSNkZWZpbmUgX19TS0FERFJfQwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNlcnJvciBDKysgaXMgbm90IHlldCBzdXBwb3J0ZWQuCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioKLSoqIEluY2x1ZGVzCi0qKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0lOQ19TS0RSVjFTVF9ICi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgotI2VuZGlmCi0KLSNpZm5kZWYgX19JTkNfU0tEUlYyTkRfSAotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLSNlbmRpZgotCi0jaW5jbHVkZQk8bGludXgva2VybmVsX3N0YXQuaD4KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqCi0qKiBEZWZpbmVzCi0qKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqCi0qKiBUeXBlZGVmcwotKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKgotKiogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAKLSoqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IEdldEN1cnJlbnRTeXN0ZW1Mb2FkKFNLX0FDICpwQUMpOwotc3RhdGljIFNLX1U2NCAgICAgICBHZXRJc3JDYWxscyhTS19BQyAqcEFDKTsKLXN0YXRpYyBTS19CT09MICAgICAgSXNJbnRNb2RFbmFibGVkKFNLX0FDICpwQUMpOwotc3RhdGljIHZvaWQgICAgICAgICBTZXRDdXJySW50Q3RyKFNLX0FDICpwQUMpOwotc3RhdGljIHZvaWQgICAgICAgICBFbmFibGVJbnRNb2QoU0tfQUMgKnBBQyk7IAotc3RhdGljIHZvaWQgICAgICAgICBEaXNhYmxlSW50TW9kKFNLX0FDICpwQUMpOwotc3RhdGljIHZvaWQgICAgICAgICBSZXNpemVEaW1UaW1lckR1cmF0aW9uKFNLX0FDICpwQUMpOwotc3RhdGljIHZvaWQgICAgICAgICBEaXNwbGF5U2VsZWN0ZWRNb2RlcmF0aW9uVHlwZShTS19BQyAqcEFDKTsKLXN0YXRpYyB2b2lkICAgICAgICAgRGlzcGxheVNlbGVjdGVkTW9kZXJhdGlvbk1hc2soU0tfQUMgKnBBQyk7Ci1zdGF0aWMgdm9pZCAgICAgICAgIERpc3BsYXlEZXNjclJhdGlvKFNLX0FDICpwQUMpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioKLSoqIEdsb2JhbCB2YXJpYWJsZXMKLSoqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioKLSoqIExvY2FsIHZhcmlhYmxlcwotKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKgotKiogR2xvYmFsIGZ1bmN0aW9ucyAKLSoqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogU2tEaW1Nb2RlcmF0ZQotKiogRGVzY3JpcHRpb24gIDogQ2FsbGVkIGluIGV2ZXJ5IElTUiB0byBjaGVjayBpZiBtb2RlcmF0aW9uIGlzIHRvIGJlIGFwcGxpZWQKLSoqICAgICAgICAgICAgICAgIG9yIG5vdCBmb3IgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGludGVycnVwdHMKLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIyLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogdm9pZCAoISkKLSoqIE5vdGVzICAgICAgICA6IC0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgCi1Ta0RpbU1vZGVyYXRlKFNLX0FDICpwQUMpIHsKLSAgICB1bnNpZ25lZCBpbnQgQ3VyclN5c0xvYWQgICAgPSAwOyAgLyogZXhwcmVzc2VkIGluIHBlcmNlbnQgKi8KLSAgICB1bnNpZ25lZCBpbnQgTG9hZEluY3JlYXNlICAgPSAwOyAgLyogZXhwcmVzc2VkIGluIHBlcmNlbnQgKi8KLSAgICBTS19VNjQgICAgICAgVGhyZXNob2xkSW50cyAgPSAwOwotICAgIFNLX1U2NCAgICAgICBJc3JDYWxsc1BlclNlYyA9IDA7Ci0KLSNkZWZpbmUgTV9ESU1JTkZPIHBBQy0+RHluSXJxTW9kSW5mbwotCi0gICAgaWYgKCFJc0ludE1vZEVuYWJsZWQocEFDKSkgewotICAgICAgICBpZiAoTV9ESU1JTkZPLkludE1vZFR5cGVTZWxlY3QgPT0gQ19JTlRfTU9EX0RZTkFNSUMpIHsKLSAgICAgICAgICAgIEN1cnJTeXNMb2FkID0gR2V0Q3VycmVudFN5c3RlbUxvYWQocEFDKTsKLSAgICAgICAgICAgIGlmIChDdXJyU3lzTG9hZCA+IDc1KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIAotICAgICAgICAgICAgICAgICAgICAqKiBNb3JlIHRoYW4gNzUlIHRvdGFsIHN5c3RlbSBsb2FkISBFbmFibGUgdGhlIG1vZGVyYXRpb24gCi0gICAgICAgICAgICAgICAgICAgICoqIHRvIHNoaWVsZCB0aGUgc3lzdGVtIGFnYWluc3QgdG9vIG1hbnkgaW50ZXJydXB0cy4KLSAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgRW5hYmxlSW50TW9kKHBBQyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEN1cnJTeXNMb2FkID4gTV9ESU1JTkZPLlByZXZTeXNMb2FkKSB7Ci0gICAgICAgICAgICAgICAgTG9hZEluY3JlYXNlID0gKEN1cnJTeXNMb2FkIC0gTV9ESU1JTkZPLlByZXZTeXNMb2FkKTsKLSAgICAgICAgICAgICAgICBpZiAoTG9hZEluY3JlYXNlID4gKChNX0RJTUlORk8uUHJldlN5c0xvYWQgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0lOVF9NT0RfRU5BQkxFX1BFUkNFTlRBR0UpIC8gMTAwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQ3VyclN5c0xvYWQgPiAxMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogCi0gICAgICAgICAgICAgICAgICAgICAgICAqKiBNb3JlIHRoYW4gNTAlIGluY3JlYXNlIHdpdGggcmVzcGVjdCB0byB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAqKiBwcmV2aW91cyBsb2FkIG9mIHRoZSBzeXN0ZW0uIE1vc3QgbGlrZWx5IHRoaXMgCi0gICAgICAgICAgICAgICAgICAgICAgICAqKiBpcyBkdWUgdG8gb3VyIElTUi1wcm9jLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlSW50TW9kKHBBQyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgKiogTmVpdGhlciB0b28gbXVjaCBzeXN0ZW0gbG9hZCBhdCBhbGwgbm9yIHRvbyBtdWNoIGluY3JlYXNlCi0gICAgICAgICAgICAgICAgKiogd2l0aCByZXNwZWN0IHRvIHRoZSBwcmV2aW91cyBzeXN0ZW0gbG9hZC4gSGVuY2UsIHdlIGNhbiBsZWF2ZQotICAgICAgICAgICAgICAgICoqIHRoZSBJU1ItaGFuZGxpbmcgbGlrZSBpdCBpcyB3aXRob3V0IGVuYWJsaW5nIG1vZGVyYXRpb24uCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1fRElNSU5GTy5QcmV2U3lzTG9hZCA9IEN1cnJTeXNMb2FkOwotICAgICAgICB9ICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKE1fRElNSU5GTy5JbnRNb2RUeXBlU2VsZWN0ID09IENfSU5UX01PRF9EWU5BTUlDKSB7Ci0gICAgICAgICAgICBUaHJlc2hvbGRJbnRzICA9ICgoTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWMgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0lOVF9NT0RfRElTQUJMRV9QRVJDRU5UQUdFKSAvIDEwMCk7Ci0gICAgICAgICAgICBJc3JDYWxsc1BlclNlYyA9IEdldElzckNhbGxzKHBBQyk7Ci0gICAgICAgICAgICBpZiAoSXNyQ2FsbHNQZXJTZWMgPD0gVGhyZXNob2xkSW50cykgewotICAgICAgICAgICAgICAgIC8qIAotICAgICAgICAgICAgICAgICoqIFRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyB3aXRoaW4gdGhlIGxhc3Qgc2Vjb25kIGlzIAotICAgICAgICAgICAgICAgICoqIGxvd2VyIHRoYW4gdGhlIGRpc2FibGVfcGVyY2VudGFnZSBvZiB0aGUgZGVzcmllZCAKLSAgICAgICAgICAgICAgICAqKiBtYXhyYXRlLiBUaGVyZWZvcmUgd2UgY2FuIGRpc2FibGUgdGhlIG1vZGVyYXRpb24uCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBEaXNhYmxlSW50TW9kKHBBQyk7Ci0gICAgICAgICAgICAgICAgTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWMgPSAKLSAgICAgICAgICAgICAgICAgICAoTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWNVcHBlckxpbWl0ICsKLSAgICAgICAgICAgICAgICAgICAgTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWNMb3dlckxpbWl0KSAvIDI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgKiogVGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzZWMgaXMgdGhlIHNhbWUgYXMgZXhwZWN0ZWQuCi0gICAgICAgICAgICAgICAgKiogRXZhbHVsYXRlIHRoZSBkZXNjcmlwdG9yLXJhdGlvLiBJZiBpdCBoYXMgY2hhbmdlZCwgYSByZXNpemUgCi0gICAgICAgICAgICAgICAgKiogaW4gdGhlIG1vZGVyYXRpb24gdGltZXIgbWlnaHQgYmUgdXNlZnVsCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoTV9ESU1JTkZPLkF1dG9TaXppbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVzaXplRGltVGltZXJEdXJhdGlvbihwQUMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgKiogU29tZSBpbmZvcm1hdGlvbiB0byB0aGUgbG9nLi4uCi0gICAgKi8KLSAgICBpZiAoTV9ESU1JTkZPLkRpc3BsYXlTdGF0cykgewotICAgICAgICBEaXNwbGF5U2VsZWN0ZWRNb2RlcmF0aW9uVHlwZShwQUMpOwotICAgICAgICBEaXNwbGF5U2VsZWN0ZWRNb2RlcmF0aW9uTWFzayhwQUMpOwotICAgICAgICBEaXNwbGF5RGVzY3JSYXRpbyhwQUMpOwotICAgIH0KLQotICAgIE1fRElNSU5GTy5OYnJQcm9jZXNzZWREZXNjciA9IDA7IAotICAgIFNldEN1cnJJbnRDdHIocEFDKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqIEZ1bmN0aW9uICAgICA6IFNrRGltU3RhcnRNb2RlcmF0aW9uVGltZXIKLSoqIERlc2NyaXB0aW9uICA6IFN0YXJ0cyB0aGUgYXVkaXQtdGltZXIgZm9yIHRoZSBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uCi0qKiBQcm9ncmFtbWVyICAgOiBSYWxwaCBSb2VzbGVyCi0qKiBMYXN0IE1vZGlmaWVkOiAyMi1tYXItMDMKLSoqIFJldHVybnMgICAgICA6IHZvaWQgKCEpCi0qKiBOb3RlcyAgICAgICAgOiAtCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIAotU2tEaW1TdGFydE1vZGVyYXRpb25UaW1lcihTS19BQyAqcEFDKSB7Ci0gICAgU0tfRVZQQVJBICAgIEV2ZW50UGFyYW07ICAgLyogRXZlbnQgc3RydWN0IGZvciB0aW1lciBldmVudCAqLwotIAotICAgIFNLX01FTVNFVCgoY2hhciAqKSAmRXZlbnRQYXJhbSwgMCwgc2l6ZW9mKEV2ZW50UGFyYW0pKTsKLSAgICBFdmVudFBhcmFtLlBhcmEzMlswXSA9IFNLX0RSVl9NT0RFUkFUSU9OX1RJTUVSOwotICAgIFNrVGltZXJTdGFydChwQUMsIHBBQy0+SW9CYXNlLCAmcEFDLT5EeW5JcnFNb2RJbmZvLk1vZFRpbWVyLAotICAgICAgICAgICAgICAgICBTS19EUlZfTU9ERVJBVElPTl9USU1FUl9MRU5HVEgsCi0gICAgICAgICAgICAgICAgIFNLR0VfRFJWLCBTS19EUlZfVElNRVIsIEV2ZW50UGFyYW0pOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogU2tEaW1FbmFibGVNb2RlcmF0aW9uSWZOZWVkZWQKLSoqIERlc2NyaXB0aW9uICA6IEVpdGhlciBlbmFibGVzIG9yIGRpc2FibGVzIG1vZGVyYXRpb24KLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIyLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogdm9pZCAoISkKLSoqIE5vdGVzICAgICAgICA6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwYXJ0aWN1bGFyIGFkYXB0ZXIgaXMgb3BlbmVkCi0qKiAgICAgICAgICAgICAgICBUaGVyZSBpcyBubyBEaXNhYmxlIGZ1bmN0aW9uLCBiZWNhdXNlIHdoZW4gYWxsIGludGVycnVwdHMgCi0qKiAgICAgICAgICAgICAgICBtaWdodCBiZSBkaXNhYmxlLCB0aGUgbW9kZXJhdGlvbiB0aW1lciBoYXMgbm8gbWVhbmluZyBhdCBhbGwKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZAotU2tEaW1FbmFibGVNb2RlcmF0aW9uSWZOZWVkZWQoU0tfQUMgKnBBQykgewotCi0gICAgaWYgKE1fRElNSU5GTy5JbnRNb2RUeXBlU2VsZWN0ID09IENfSU5UX01PRF9TVEFUSUMpIHsKLSAgICAgICAgRW5hYmxlSW50TW9kKHBBQyk7ICAgLyogbm90aWZpY2F0aW9uIHByaW50IGluIHRoaXMgZnVuY3Rpb24gKi8KLSAgICB9IGVsc2UgaWYgKE1fRElNSU5GTy5JbnRNb2RUeXBlU2VsZWN0ID09IENfSU5UX01PRF9EWU5BTUlDKSB7Ci0gICAgICAgIFNrRGltU3RhcnRNb2RlcmF0aW9uVGltZXIocEFDKTsKLSAgICAgICAgaWYgKE1fRElNSU5GTy5EaXNwbGF5U3RhdHMpIHsKLSAgICAgICAgICAgIHByaW50aygiRHluYW1pYyBtb2RlcmF0aW9uIGhhcyBiZWVuIGVuYWJsZWRcbiIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKE1fRElNSU5GTy5EaXNwbGF5U3RhdHMpIHsKLSAgICAgICAgICAgIHByaW50aygiTm8gbW9kZXJhdGlvbiBoYXMgYmVlbiBlbmFibGVkXG4iKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqIEZ1bmN0aW9uICAgICA6IFNrRGltRGlzcGxheU1vZGVyYXRpb25TZXR0aW5ncwotKiogRGVzY3JpcHRpb24gIDogRGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3MgcmVnYXJkaW5nIGludGVycnVwdCBtb2RlcmF0aW9uCi0qKiBQcm9ncmFtbWVyICAgOiBSYWxwaCBSb2VzbGVyCi0qKiBMYXN0IE1vZGlmaWVkOiAyMi1tYXItMDMKLSoqIFJldHVybnMgICAgICA6IHZvaWQgKCEpCi0qKiBOb3RlcyAgICAgICAgOiAtCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIAotU2tEaW1EaXNwbGF5TW9kZXJhdGlvblNldHRpbmdzKFNLX0FDICpwQUMpIHsKLSAgICBEaXNwbGF5U2VsZWN0ZWRNb2RlcmF0aW9uVHlwZShwQUMpOwotICAgIERpc3BsYXlTZWxlY3RlZE1vZGVyYXRpb25NYXNrKHBBQyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKgotKiogTG9jYWwgZnVuY3Rpb25zIAotKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiBGdW5jdGlvbiAgICAgOiBHZXRDdXJyZW50U3lzdGVtTG9hZAotKiogRGVzY3JpcHRpb24gIDogUmV0cmlldmVzIHRoZSBjdXJyZW50IHN5c3RlbSBsb2FkIG9mIHRoZSBzeXN0ZW0uIFRoaXMgbG9hZAotKiogICAgICAgICAgICAgICAgaXMgZXZhbHVhdGVkIGZvciBhbGwgcHJvY2Vzc29ycyB3aXRoaW4gdGhlIHN5c3RlbS4KLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIyLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogdW5zaWduZWQgaW50OiBsb2FkIGV4cHJlc3NlZCBpbiBwZXJjZW50YWdlCi0qKiBOb3RlcyAgICAgICAgOiBUaGUgcG9zc2libGUgcmFuZ2UgYmVpbmcgcmV0dXJuZWQgaXMgZnJvbSAwIHVwIHRvIDEwMC4KLSoqICAgICAgICAgICAgICAgIFdoZXJlYXMgMCBtZWFucyAnbm8gbG9hZCBhdCBhbGwnIGFuZCAxMDAgJ3N5c3RlbSBmdWxseSBsb2FkZWQnCi0qKiAgICAgICAgICAgICAgICBJdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGF0IGFjdHVhbGx5IGNhdXNlcyB0aGUgc3lzdGVtCi0qKiAgICAgICAgICAgICAgICB0byBiZSBpbiAxMDAlLCBidXQgbWF5YmUgdGhhdCBpcyBkdWUgdG8gdG9vIG11Y2ggaW50ZXJydXB0cy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLUdldEN1cnJlbnRTeXN0ZW1Mb2FkKFNLX0FDICpwQUMpIHsKLQl1bnNpZ25lZCBsb25nIGppZiAgICAgICAgID0gamlmZmllczsKLQl1bnNpZ25lZCBpbnQgIFVzZXJUaW1lICAgID0gMDsKLQl1bnNpZ25lZCBpbnQgIFN5c3RlbVRpbWUgID0gMDsKLQl1bnNpZ25lZCBpbnQgIE5pY2VUaW1lICAgID0gMDsKLQl1bnNpZ25lZCBpbnQgIElkbGVUaW1lICAgID0gMDsKLQl1bnNpZ25lZCBpbnQgIFRvdGFsVGltZSAgID0gMDsKLQl1bnNpZ25lZCBpbnQgIFVzZWRUaW1lICAgID0gMDsKLQl1bnNpZ25lZCBpbnQgIFN5c3RlbUxvYWQgID0gMDsKLQotCS8qIHVuc2lnbmVkIGludCAgTmJyQ3B1ICAgICAgPSAwOyAqLwotCi0JLyoKLQkqKiBUaGUgZm9sbG93aW5nIGxpbmVzIGhhdmUgYmVlbiBjb21tZW50ZWQgb3V0LCBiZWNhdXNlCi0JKiogZnJvbSBrZXJuZWwgMi41LjQ0IG9ud2FyZHMsIHRoZSBrZXJuZWwtb3duZWQgc3RydWN0dXJlCi0JKioKLQkqKiAgICAgIHN0cnVjdCBrZXJuZWxfc3RhdCBrc3RhdAotCSoqCi0JKiogaXMgbm90IG1hcmtlZCBhcyBhbiBleHBvcnRlZCBzeW1ib2wgaW4gdGhlIGZpbGUKLQkqKgotCSoqICAgICAga2VybmVsL2tzeW1zLmMgCi0JKioKLQkqKiBBcyBhIGNvbnNlcXVlbmNlLCB1c2luZyB0aGlzIGRyaXZlciBhcyBLTE0gaXMgbm90IHBvc3NpYmxlCi0JKiogYW5kIGFueSBhY2Nlc3Mgb2YgdGhlIHN0cnVjdHVyZSBrZXJuZWxfc3RhdCB2aWEgdGhlIAotCSoqIGRlZGljYXRlZCBtYWNyb3Mga3N0YXRfY3B1KGkpLmNwdXN0YXQueHh4IGlzIHRvIGJlIGF2b2lkZWQuCi0JKioKLQkqKiBUaGUga3N0YXQtaW5mb3JtYXRpb24gbWlnaHQgYmUgYWRkZWQgYWdhaW4gaW4gZnV0dXJlIAotCSoqIHZlcnNpb25zIG9mIHRoZSAyLjUueHgga2VybmVsLCBidXQgZm9yIHRoZSB0aW1lIGJlaW5nLCAKLQkqKiBudW1iZXIgb2YgaW50ZXJydXB0cyB3aWxsIHNlcnZlIGFzIGluZGljYXRpb24gaG93IG11Y2ggCi0JKiogbG9hZCB3ZSBjdXJyZW50bHkgaGF2ZS4uLiAKLQkqKgotCSoqIGZvciAoTmJyQ3B1ID0gMDsgTmJyQ3B1IDwgbnVtX29ubGluZV9jcHVzKCk7IE5ickNwdSsrKSB7Ci0JKioJVXNlclRpbWUgICA9IFVzZXJUaW1lICAgKyBrc3RhdF9jcHUoTmJyQ3B1KS5jcHVzdGF0LnVzZXI7Ci0JKioJTmljZVRpbWUgICA9IE5pY2VUaW1lICAgKyBrc3RhdF9jcHUoTmJyQ3B1KS5jcHVzdGF0Lm5pY2U7Ci0JKioJU3lzdGVtVGltZSA9IFN5c3RlbVRpbWUgKyBrc3RhdF9jcHUoTmJyQ3B1KS5jcHVzdGF0LnN5c3RlbTsKLQkqKiB9Ci0JKi8KLQlTS19VNjQgVGhyZXNob2xkSW50cyAgPSAwOwotCVNLX1U2NCBJc3JDYWxsc1BlclNlYyA9IDA7Ci0KLQlUaHJlc2hvbGRJbnRzICA9ICgoTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWMgKgotCQkJICAgQ19JTlRfTU9EX0VOQUJMRV9QRVJDRU5UQUdFKSArIDEwMCk7Ci0JSXNyQ2FsbHNQZXJTZWMgPSBHZXRJc3JDYWxscyhwQUMpOwotCWlmIChJc3JDYWxsc1BlclNlYyA+PSBUaHJlc2hvbGRJbnRzKSB7Ci0JICAgIC8qCi0JICAgICoqIFdlIGRvIG5vdCBrbm93IGhvdyBtdWNoIHRoZSByZWFsIENQVS1sb2FkIGlzIQotCSAgICAqKiBSZXR1cm4gODAlIGFzIGEgZGVmYXVsdCBpbiBvcmRlciB0byBhY3RpdmF0ZSBESU0KLQkgICAgKi8KLQkgICAgU3lzdGVtTG9hZCA9IDgwOwotCSAgICByZXR1cm4gKFN5c3RlbUxvYWQpOyAgCi0JfSAKLQotCVVzZWRUaW1lICA9IFVzZXJUaW1lICsgTmljZVRpbWUgKyBTeXN0ZW1UaW1lOwotCi0JSWRsZVRpbWUgID0gamlmICogbnVtX29ubGluZV9jcHVzKCkgLSBVc2VkVGltZTsKLQlUb3RhbFRpbWUgPSBVc2VkVGltZSArIElkbGVUaW1lOwotCi0JU3lzdGVtTG9hZCA9ICggMTAwICogKFVzZWRUaW1lICAtIE1fRElNSU5GTy5QcmV2VXNlZFRpbWUpICkgLwotCQkJCQkJKFRvdGFsVGltZSAtIE1fRElNSU5GTy5QcmV2VG90YWxUaW1lKTsKLQotCWlmIChNX0RJTUlORk8uRGlzcGxheVN0YXRzKSB7Ci0JCXByaW50aygiQ3VycmVudCBzeXN0ZW0gbG9hZCBpczogJXVcbiIsIFN5c3RlbUxvYWQpOwotCX0KLQotCU1fRElNSU5GTy5QcmV2VG90YWxUaW1lID0gVG90YWxUaW1lOwotCU1fRElNSU5GTy5QcmV2VXNlZFRpbWUgID0gVXNlZFRpbWU7Ci0KLQlyZXR1cm4gKFN5c3RlbUxvYWQpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogR2V0SXNyQ2FsbHMKLSoqIERlc2NyaXB0aW9uICA6IERlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQgbW9kZXJhdGlvbiBtYXNrLCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSoqICAgICAgICAgICAgICAgIHJldHVybiB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgaGFuZGxlZCBpbiB0aGUgcHJldmlvdXMgdGltZS0KLSoqICAgICAgICAgICAgICAgIGZyYW1lLiBUaGlzIGV2YWx1YXRlZCBudW1iZXIgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbnVtYmVyIAotKiogICAgICAgICAgICAgICAgb2YgaW50ZXJydXB0cyBzdG9yZWQgaW4gUE5NSS1jb250ZXh0IGFuZCB0aGUgcHJldmlvdXMgc3RvcmVkIAotKiogICAgICAgICAgICAgICAgaW50ZXJydXB0cy4KLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIzLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogaW50OiAgIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBiZWluZyBleGVjdXRlZCBpbiB0aGUgbGFzdAotKiogICAgICAgICAgICAgICAgICAgICAgIHRpbWVmcmFtZQotKiogTm90ZXMgICAgICAgIDogSXQgbWFrZXMgb25seSBzZW5zZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIHdoZW4gZHluYW1pYyAKLSoqICAgICAgICAgICAgICAgIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIGFwcGxpZWQKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBTS19VNjQKLUdldElzckNhbGxzKFNLX0FDICpwQUMpIHsKLSAgICBTS19VNjQgICBSeFBvcnQwSW50RGlmZiA9IDA7Ci0gICAgU0tfVTY0ICAgUnhQb3J0MUludERpZmYgPSAwOwotICAgIFNLX1U2NCAgIFR4UG9ydDBJbnREaWZmID0gMDsKLSAgICBTS19VNjQgICBUeFBvcnQxSW50RGlmZiA9IDA7Ci0KLSAgICBpZiAocEFDLT5EeW5JcnFNb2RJbmZvLk1hc2tJcnFNb2RlcmF0aW9uID09IElSUV9NQVNLX1RYX09OTFkpIHsKLSAgICAgICAgaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyKSB7Ci0gICAgICAgICAgICBUeFBvcnQxSW50RGlmZiA9IHBBQy0+UG5taS5Qb3J0WzFdLlR4SW50ckN0cyAtIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uUHJldlBvcnQxVHhJbnRyQ3RzOwotICAgICAgICB9Ci0gICAgICAgIFR4UG9ydDBJbnREaWZmID0gcEFDLT5Qbm1pLlBvcnRbMF0uVHhJbnRyQ3RzIC0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5EeW5JcnFNb2RJbmZvLlByZXZQb3J0MFR4SW50ckN0czsKLSAgICB9IGVsc2UgaWYgKHBBQy0+RHluSXJxTW9kSW5mby5NYXNrSXJxTW9kZXJhdGlvbiA9PSBJUlFfTUFTS19SWF9PTkxZKSB7Ci0gICAgICAgIGlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMikgewotICAgICAgICAgICAgUnhQb3J0MUludERpZmYgPSBwQUMtPlBubWkuUG9ydFsxXS5SeEludHJDdHMgLSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5EeW5JcnFNb2RJbmZvLlByZXZQb3J0MVJ4SW50ckN0czsKLSAgICAgICAgfQotICAgICAgICBSeFBvcnQwSW50RGlmZiA9IHBBQy0+UG5taS5Qb3J0WzBdLlJ4SW50ckN0cyAtIAotICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+RHluSXJxTW9kSW5mby5QcmV2UG9ydDBSeEludHJDdHM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyKSB7Ci0gICAgICAgICAgICBSeFBvcnQxSW50RGlmZiA9IHBBQy0+UG5taS5Qb3J0WzFdLlJ4SW50ckN0cyAtIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uUHJldlBvcnQxUnhJbnRyQ3RzOwotICAgICAgICAgICAgVHhQb3J0MUludERpZmYgPSBwQUMtPlBubWkuUG9ydFsxXS5UeEludHJDdHMgLSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5EeW5JcnFNb2RJbmZvLlByZXZQb3J0MVR4SW50ckN0czsKLSAgICAgICAgfSAKLSAgICAgICAgUnhQb3J0MEludERpZmYgPSBwQUMtPlBubWkuUG9ydFswXS5SeEludHJDdHMgLSAKLSAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uUHJldlBvcnQwUnhJbnRyQ3RzOwotICAgICAgICBUeFBvcnQwSW50RGlmZiA9IHBBQy0+UG5taS5Qb3J0WzBdLlR4SW50ckN0cyAtIAotICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+RHluSXJxTW9kSW5mby5QcmV2UG9ydDBUeEludHJDdHM7Ci0gICAgfQotCi0gICAgcmV0dXJuIChSeFBvcnQwSW50RGlmZiArIFJ4UG9ydDFJbnREaWZmICsgVHhQb3J0MEludERpZmYgKyBUeFBvcnQxSW50RGlmZik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiBGdW5jdGlvbiAgICAgOiBHZXRSeENhbGxzCi0qKiBEZXNjcmlwdGlvbiAgOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgYSByZWNlaXZlIGludGVyLQotKiogICAgICAgICAgICAgICAgcnVwdCB3YXMgcHJvY2Vzc2VkLiBUaGlzIGlzIG5lZWRlZCB0byBldmFsdWF0ZSBhbnkgcmVzaXppbmcgCi0qKiAgICAgICAgICAgICAgICBmYWN0b3IuCi0qKiBQcm9ncmFtbWVyICAgOiBSYWxwaCBSb2VzbGVyCi0qKiBMYXN0IE1vZGlmaWVkOiAyMy1tYXItMDMKLSoqIFJldHVybnMgICAgICA6IFNLX1U2NDogdGhlIG51bWJlciBvZiBSWC1pbnRzIGJlaW5nIHByb2Nlc3NlZAotKiogTm90ZXMgICAgICAgIDogSXQgbWFrZXMgb25seSBzZW5zZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIHdoZW4gZHluYW1pYyAKLSoqICAgICAgICAgICAgICAgIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIGFwcGxpZWQKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBTS19VNjQKLUdldFJ4Q2FsbHMoU0tfQUMgKnBBQykgewotICAgIFNLX1U2NCAgIFJ4UG9ydDBJbnREaWZmID0gMDsKLSAgICBTS19VNjQgICBSeFBvcnQxSW50RGlmZiA9IDA7Ci0KLSAgICBpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDIpIHsKLSAgICAgICAgUnhQb3J0MUludERpZmYgPSBwQUMtPlBubWkuUG9ydFsxXS5SeEludHJDdHMgLSAKLSAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uUHJldlBvcnQxUnhJbnRyQ3RzOwotICAgIH0KLSAgICBSeFBvcnQwSW50RGlmZiA9IHBBQy0+UG5taS5Qb3J0WzBdLlJ4SW50ckN0cyAtIAotICAgICAgICAgICAgICAgICAgICAgcEFDLT5EeW5JcnFNb2RJbmZvLlByZXZQb3J0MFJ4SW50ckN0czsKLQotICAgIHJldHVybiAoUnhQb3J0MEludERpZmYgKyBSeFBvcnQxSW50RGlmZik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiBGdW5jdGlvbiAgICAgOiBTZXRDdXJySW50Q3RyCi0qKiBEZXNjcmlwdGlvbiAgOiBXaWxsIHN0b3JlIHRoZSBjdXJyZW50IG51bWJlciBvcmYgb2NjdXJlZCBpbnRlcnJ1cHRzIGluIHRoZSAKLSoqICAgICAgICAgICAgICAgIGFkYXB0ZXIgY29udGV4dC4gVGhpcyBpcyBuZWVkZWQgdG8gZXZhbHVhdGVkIHRoZSBudW1iZXIgb2YgCi0qKiAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzIHdpdGhpbiBhIGN1cnJlbnQgdGltZWZyYW1lLgotKiogUHJvZ3JhbW1lciAgIDogUmFscGggUm9lc2xlcgotKiogTGFzdCBNb2RpZmllZDogMjMtbWFyLTAzCi0qKiBSZXR1cm5zICAgICAgOiB2b2lkICghKQotKiogTm90ZXMgICAgICAgIDogLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLVNldEN1cnJJbnRDdHIoU0tfQUMgKnBBQykgewotICAgIGlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMikgewotICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uUHJldlBvcnQxUnhJbnRyQ3RzID0gcEFDLT5Qbm1pLlBvcnRbMV0uUnhJbnRyQ3RzOwotICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uUHJldlBvcnQxVHhJbnRyQ3RzID0gcEFDLT5Qbm1pLlBvcnRbMV0uVHhJbnRyQ3RzOwotICAgIH0gCi0gICAgcEFDLT5EeW5JcnFNb2RJbmZvLlByZXZQb3J0MFJ4SW50ckN0cyA9IHBBQy0+UG5taS5Qb3J0WzBdLlJ4SW50ckN0czsKLSAgICBwQUMtPkR5bklycU1vZEluZm8uUHJldlBvcnQwVHhJbnRyQ3RzID0gcEFDLT5Qbm1pLlBvcnRbMF0uVHhJbnRyQ3RzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogSXNJbnRNb2RFbmFibGVkKCkKLSoqIERlc2NyaXB0aW9uICA6IFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW50ZXJydXB0cyBtb2RlcmF0aW9uCi0qKiAgICAgICAgICAgICAgICBjb21tYW5kIHJlZ2lzdGVyLiBJdHMgY29udGVudCBkZXRlcm1pbmVzIHdoZXRoZXIgYW55IAotKiogICAgICAgICAgICAgICAgbW9kZXJhdGlvbiBpcyBydW5uaW5nIG9yIG5vdC4KLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIzLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogU0tfVFJVRSAgOiBpZiBtb2QgdGltZXIgcnVubmluZwotKiogICAgICAgICAgICAgICAgU0tfRkFMU0UgOiBpZiBubyBtb2RlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZAotKiogTm90ZXMgICAgICAgIDogLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIFNLX0JPT0wKLUlzSW50TW9kRW5hYmxlZChTS19BQyAqcEFDKSB7Ci0gICAgdW5zaWduZWQgbG9uZyBDdHJDbWQ7Ci0KLSAgICBTS19JTjMyKHBBQy0+SW9CYXNlLCBCMl9JUlFNX0NUUkwsICZDdHJDbWQpOwotICAgIGlmICgoQ3RyQ21kICYgVElNX1NUQVJUKSA9PSBUSU1fU1RBUlQpIHsKLSAgICAgICByZXR1cm4gU0tfVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgIHJldHVybiBTS19GQUxTRTsKLSAgICB9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiBGdW5jdGlvbiAgICAgOiBFbmFibGVJbnRNb2QoKQotKiogRGVzY3JpcHRpb24gIDogRW5hYmxlcyB0aGUgaW50ZXJydXB0IG1vZGVyYXRpb24gdXNpbmcgdGhlIHZhbHVlcyBzdG9yZWQgaW4KLSoqICAgICAgICAgICAgICAgIGluIHRoZSBwQUMtPkR5bkludE1vZCBkYXRhIHN0cnVjdHVyZQotKiogUHJvZ3JhbW1lciAgIDogUmFscGggUm9lc2xlcgotKiogTGFzdCBNb2RpZmllZDogMjItbWFyLTAzCi0qKiBSZXR1cm5zICAgICAgOiAtCi0qKiBOb3RlcyAgICAgICAgOiAtCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZAotRW5hYmxlSW50TW9kKFNLX0FDICpwQUMpIHsKLSAgICB1bnNpZ25lZCBsb25nIE1vZEJhc2U7Ci0KLSAgICBpZiAocEFDLT5HSW5pLkdJQ2hpcElkID09IENISVBfSURfR0VORVNJUykgewotICAgICAgIE1vZEJhc2UgPSBDX0NMS19GUkVRX0dFTkVTSVMgLyBwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYzsKLSAgICB9IGVsc2UgewotICAgICAgIE1vZEJhc2UgPSBDX0NMS19GUkVRX1lVS09OIC8gcEFDLT5EeW5JcnFNb2RJbmZvLk1heE1vZEludHNQZXJTZWM7Ci0gICAgfQotCi0gICAgU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIEIyX0lSUU1fSU5JLCAgTW9kQmFzZSk7Ci0gICAgU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIEIyX0lSUU1fTVNLLCAgcEFDLT5EeW5JcnFNb2RJbmZvLk1hc2tJcnFNb2RlcmF0aW9uKTsKLSAgICBTS19PVVQzMihwQUMtPklvQmFzZSwgQjJfSVJRTV9DVFJMLCBUSU1fU1RBUlQpOwotICAgIGlmIChNX0RJTUlORk8uRGlzcGxheVN0YXRzKSB7Ci0gICAgICAgIHByaW50aygiRW5hYmxlZCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiAoJWkgaW50cy9zZWMpXG4iLAotICAgICAgICAgICAgICAgTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWMpOwotICAgIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqIEZ1bmN0aW9uICAgICA6IERpc2FibGVJbnRNb2QoKQotKiogRGVzY3JpcHRpb24gIDogRGlzYWJsZXMgdGhlIGludGVycnVwdCBtb2RlcmF0aW9uIGluZGVwZW5kZW50IG9mIHdoYXQgaW50ZXItCi0qKiAgICAgICAgICAgICAgICBydXB0cyBhcmUgcnVubmluZyBvciBub3QKLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIzLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogLQotKiogTm90ZXMgICAgICAgIDogLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgCi1EaXNhYmxlSW50TW9kKFNLX0FDICpwQUMpIHsKLQotICAgIFNLX09VVDMyKHBBQy0+SW9CYXNlLCBCMl9JUlFNX0NUUkwsIFRJTV9TVE9QKTsKLSAgICBpZiAoTV9ESU1JTkZPLkRpc3BsYXlTdGF0cykgewotICAgICAgICBwcmludGsoIkRpc2FibGVkIGludGVycnVwdCBtb2RlcmF0aW9uXG4iKTsKLSAgICB9Ci19IAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogUmVzaXplRGltVGltZXJEdXJhdGlvbigpOwotKiogRGVzY3JpcHRpb24gIDogQ2hlY2tzIHRoZSBjdXJyZW50IHVzZWQgZGVzY3JpcHRvciByYXRpbyBhbmQgcmVzaXplcyB0aGUgCi0qKiAgICAgICAgICAgICAgICBkdXJhdGlvbiB0aW1lciAobG9uZ2VyL3NtYWxsZXIpIGlmIHBvc3NpYmxlLiAKLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIzLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogLQotKiogTm90ZXMgICAgICAgIDogVGhlcmUgYXJlIGJvdGggbWF4aW11bSBhbmQgbWluaW11bSB0aW1lciBkdXJhdGlvbiB2YWx1ZS4gCi0qKiAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBhbHJlYWR5Ci0qKiAgICAgICAgICAgICAgICBlbmFibGVkIQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgCi1SZXNpemVEaW1UaW1lckR1cmF0aW9uKFNLX0FDICpwQUMpIHsKLSAgICBTS19CT09MIEluY3JlYXNlVGltZXJEdXJhdGlvbjsKLSAgICBpbnQgICAgIFRvdGFsTWF4TmJyRGVzY3I7Ci0gICAgaW50ICAgICBVc2VkRGVzY3JSYXRpbzsKLSAgICBpbnQgICAgIFJhdGlvRGlmZkFiczsKLSAgICBpbnQgICAgIFJhdGlvRGlmZlJlbDsKLSAgICBpbnQgICAgIE5ld01heE1vZEludHNQZXJTZWM7Ci0gICAgaW50ICAgICBNb2RBZGpWYWx1ZTsKLSAgICBsb25nICAgIE1vZEJhc2U7Ci0KLSAgICAvKgotICAgICoqIENoZWNrIGZpcnN0IGlmIHdlIGFyZSBhbGxvd2VkIHRvIHBlcmZvcm0gYW55IG1vZGlmaWNhdGlvbgotICAgICovCi0gICAgaWYgKElzSW50TW9kRW5hYmxlZChwQUMpKSB7IAotICAgICAgICBpZiAoTV9ESU1JTkZPLkludE1vZFR5cGVTZWxlY3QgIT0gQ19JTlRfTU9EX0RZTkFNSUMpIHsKLSAgICAgICAgICAgIHJldHVybjsgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoTV9ESU1JTkZPLk1vZEp1c3RFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgTV9ESU1JTkZPLk1vZEp1c3RFbmFibGVkID0gU0tfRkFMU0U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAqKiBJZiB3ZSBnb3QgdW50aWwgaGVyZSwgd2UgaGF2ZSB0byBldmFsdWF0ZSB0aGUgYW1vdW50IG9mIHRoZQotICAgICoqIGRlc2NyaXB0b3IgcmF0aW8gY2hhbmdlLi4uCi0gICAgKi8KLSAgICBUb3RhbE1heE5ickRlc2NyID0gcEFDLT5SeERlc2NyUGVyUmluZyAqIEdldFJ4Q2FsbHMocEFDKTsKLSAgICBVc2VkRGVzY3JSYXRpbyAgID0gKE1fRElNSU5GTy5OYnJQcm9jZXNzZWREZXNjciAqIDEwMCkgLyBUb3RhbE1heE5ickRlc2NyOwotCi0gICAgaWYgKFVzZWREZXNjclJhdGlvID4gTV9ESU1JTkZPLlByZXZVc2VkRGVzY3JSYXRpbykgewotICAgICAgICBSYXRpb0RpZmZBYnMgPSAoVXNlZERlc2NyUmF0aW8gLSBNX0RJTUlORk8uUHJldlVzZWREZXNjclJhdGlvKTsKLSAgICAgICAgUmF0aW9EaWZmUmVsID0gKFJhdGlvRGlmZkFicyAqIDEwMCkgLyBVc2VkRGVzY3JSYXRpbzsKLSAgICAgICAgTV9ESU1JTkZPLlByZXZVc2VkRGVzY3JSYXRpbyA9IFVzZWREZXNjclJhdGlvOwotICAgICAgICBJbmNyZWFzZVRpbWVyRHVyYXRpb24gPSBTS19GQUxTRTsgIC8qIGluIG90aGVyIHdvcmRzOiBERUNSRUFTRSAqLwotICAgIH0gZWxzZSBpZiAoVXNlZERlc2NyUmF0aW8gPCBNX0RJTUlORk8uUHJldlVzZWREZXNjclJhdGlvKSB7Ci0gICAgICAgIFJhdGlvRGlmZkFicyA9IChNX0RJTUlORk8uUHJldlVzZWREZXNjclJhdGlvIC0gVXNlZERlc2NyUmF0aW8pOwotICAgICAgICBSYXRpb0RpZmZSZWwgPSAoUmF0aW9EaWZmQWJzICogMTAwKSAvIE1fRElNSU5GTy5QcmV2VXNlZERlc2NyUmF0aW87Ci0gICAgICAgIE1fRElNSU5GTy5QcmV2VXNlZERlc2NyUmF0aW8gPSBVc2VkRGVzY3JSYXRpbzsKLSAgICAgICAgSW5jcmVhc2VUaW1lckR1cmF0aW9uID0gU0tfVFJVRTsgICAvKiBpbiBvdGhlciB3b3JkczogSU5DUkVBU0UgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBSYXRpb0RpZmZBYnMgPSAoTV9ESU1JTkZPLlByZXZVc2VkRGVzY3JSYXRpbyAtIFVzZWREZXNjclJhdGlvKTsKLSAgICAgICAgUmF0aW9EaWZmUmVsID0gKFJhdGlvRGlmZkFicyAqIDEwMCkgLyBNX0RJTUlORk8uUHJldlVzZWREZXNjclJhdGlvOwotICAgICAgICBNX0RJTUlORk8uUHJldlVzZWREZXNjclJhdGlvID0gVXNlZERlc2NyUmF0aW87Ci0gICAgICAgIEluY3JlYXNlVGltZXJEdXJhdGlvbiA9IFNLX1RSVUU7ICAgLyogaW4gb3RoZXIgd29yZHM6IElOQ1JFQVNFICovCi0gICAgfQotCi0gICAgLyoKLSAgICAqKiBOb3cgd2UgY2FuIGRldGVybWluZSB0aGUgY2hhbmdlIGluIHBlcmNlbnQKLSAgICAqLwotICAgIGlmICgoUmF0aW9EaWZmUmVsID49IDApICYmIChSYXRpb0RpZmZSZWwgPD0gNSkgKSB7Ci0gICAgICAgTW9kQWRqVmFsdWUgPSAxOyAgLyogIDElIGNoYW5nZSAtIG1heWJlIHNvbWUgb3RoZXIgdmFsdWUgaW4gZnV0dXJlICovCi0gICAgfSBlbHNlIGlmICgoUmF0aW9EaWZmUmVsID4gNSkgJiYgKFJhdGlvRGlmZlJlbCA8PSAxMCkgKSB7Ci0gICAgICAgTW9kQWRqVmFsdWUgPSAxOyAgLyogIDElIGNoYW5nZSAtIG1heWJlIHNvbWUgb3RoZXIgdmFsdWUgaW4gZnV0dXJlICovCi0gICAgfSBlbHNlIGlmICgoUmF0aW9EaWZmUmVsID4gMTApICYmIChSYXRpb0RpZmZSZWwgPD0gMTUpICkgewotICAgICAgIE1vZEFkalZhbHVlID0gMTsgIC8qICAxJSBjaGFuZ2UgLSBtYXliZSBzb21lIG90aGVyIHZhbHVlIGluIGZ1dHVyZSAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgTW9kQWRqVmFsdWUgPSAxOyAgLyogIDElIGNoYW5nZSAtIG1heWJlIHNvbWUgb3RoZXIgdmFsdWUgaW4gZnV0dXJlICovCi0gICAgfQotCi0gICAgaWYgKEluY3JlYXNlVGltZXJEdXJhdGlvbikgewotICAgICAgIE5ld01heE1vZEludHNQZXJTZWMgPSAgTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWMgKiBNb2RBZGpWYWx1ZSkgLyAxMDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICBOZXdNYXhNb2RJbnRzUGVyU2VjID0gIE1fRElNSU5GTy5NYXhNb2RJbnRzUGVyU2VjIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1fRElNSU5GTy5NYXhNb2RJbnRzUGVyU2VjICogTW9kQWRqVmFsdWUpIC8gMTAwOwotICAgIH0KLQotICAgIC8qIAotICAgICoqIENoZWNrIGlmIHdlIGV4Y2VlZCBib3VuZGFyaWVzLi4uCi0gICAgKi8KLSAgICBpZiAoIChOZXdNYXhNb2RJbnRzUGVyU2VjID4gTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWNVcHBlckxpbWl0KSB8fAotICAgICAgICAgKE5ld01heE1vZEludHNQZXJTZWMgPCBNX0RJTUlORk8uTWF4TW9kSW50c1BlclNlY0xvd2VyTGltaXQpKSB7Ci0gICAgICAgIGlmIChNX0RJTUlORk8uRGlzcGxheVN0YXRzKSB7Ci0gICAgICAgICAgICBwcmludGsoIkNhbm5vdCBjaGFuZ2UgTW9kVGltIGZyb20gJWkgdG8gJWkgaW50cy9zZWNcbiIsCi0gICAgICAgICAgICAgICAgICAgTV9ESU1JTkZPLk1heE1vZEludHNQZXJTZWMsIE5ld01heE1vZEludHNQZXJTZWMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoTV9ESU1JTkZPLkRpc3BsYXlTdGF0cykgewotICAgICAgICAgICAgcHJpbnRrKCJSZXNpemVkIE1vZFRpbSBmcm9tICVpIHRvICVpIGludHMvc2VjXG4iLAotICAgICAgICAgICAgICAgICAgIE1fRElNSU5GTy5NYXhNb2RJbnRzUGVyU2VjLCBOZXdNYXhNb2RJbnRzUGVyU2VjKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE1fRElNSU5GTy5NYXhNb2RJbnRzUGVyU2VjID0gTmV3TWF4TW9kSW50c1BlclNlYzsKLQotICAgIGlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7Ci0gICAgICAgIE1vZEJhc2UgPSBDX0NMS19GUkVRX0dFTkVTSVMgLyBwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYzsKLSAgICB9IGVsc2UgewotICAgICAgICBNb2RCYXNlID0gQ19DTEtfRlJFUV9ZVUtPTiAvIHBBQy0+RHluSXJxTW9kSW5mby5NYXhNb2RJbnRzUGVyU2VjOwotICAgIH0KLQotICAgIC8qIAotICAgICoqIFdlIGRvIG5vdCBuZWVkIHRvIHRvdWNoIGFueSBvdGhlciByZWdpc3RlcnMKLSAgICAqLwotICAgIFNLX09VVDMyKHBBQy0+SW9CYXNlLCBCMl9JUlFNX0lOSSwgTW9kQmFzZSk7Ci19IAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogRGlzcGxheVNlbGVjdGVkTW9kZXJhdGlvblR5cGUoKQotKiogRGVzY3JpcHRpb24gIDogRGlzcGxheXMgd2hhdCB0eXBlIG9mIG1vZGVyYXRpb24gd2UgaGF2ZQotKiogUHJvZ3JhbW1lciAgIDogUmFscGggUm9lc2xlcgotKiogTGFzdCBNb2RpZmllZDogMjMtbWFyLTAzCi0qKiBSZXR1cm5zICAgICAgOiB2b2lkIQotKiogTm90ZXMgICAgICAgIDogLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLURpc3BsYXlTZWxlY3RlZE1vZGVyYXRpb25UeXBlKFNLX0FDICpwQUMpIHsKLQotICAgIGlmIChwQUMtPkR5bklycU1vZEluZm8uRGlzcGxheVN0YXRzKSB7Ci0gICAgICAgIGlmIChwQUMtPkR5bklycU1vZEluZm8uSW50TW9kVHlwZVNlbGVjdCA9PSBDX0lOVF9NT0RfU1RBVElDKSB7Ci0gICAgICAgICAgICAgcHJpbnRrKCJTdGF0aWMgaW50IG1vZGVyYXRpb24gcnVucyB3aXRoICVpIElOVFMvc2VjXG4iLAotICAgICAgICAgICAgICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyk7Ci0gICAgICAgIH0gZWxzZSBpZiAocEFDLT5EeW5JcnFNb2RJbmZvLkludE1vZFR5cGVTZWxlY3QgPT0gQ19JTlRfTU9EX0RZTkFNSUMpIHsKLSAgICAgICAgICAgICBpZiAoSXNJbnRNb2RFbmFibGVkKHBBQykpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoIkR5bmFtaWMgaW50IG1vZGVyYXRpb24gcnVucyB3aXRoICVpIElOVFMvc2VjXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyk7Ci0gICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGsoIkR5bmFtaWMgaW50IG1vZGVyYXRpb24gY3VycmVudGx5IG5vdCBhcHBsaWVkXG4iKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgcHJpbnRrKCJObyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBzZWxlY3RlZCFcbiIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogRGlzcGxheVNlbGVjdGVkTW9kZXJhdGlvbk1hc2soKQotKiogRGVzY3JpcHRpb24gIDogRGlzcGxheXMgd2hhdCBpbnRlcnJ1cHRzIGFyZSBtb2RlcmF0ZWQKLSoqIFByb2dyYW1tZXIgICA6IFJhbHBoIFJvZXNsZXIKLSoqIExhc3QgTW9kaWZpZWQ6IDIzLW1hci0wMwotKiogUmV0dXJucyAgICAgIDogdm9pZCEKLSoqIE5vdGVzICAgICAgICA6IC0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCi1EaXNwbGF5U2VsZWN0ZWRNb2RlcmF0aW9uTWFzayhTS19BQyAqcEFDKSB7Ci0KLSAgICBpZiAocEFDLT5EeW5JcnFNb2RJbmZvLkRpc3BsYXlTdGF0cykgewotICAgICAgICBpZiAocEFDLT5EeW5JcnFNb2RJbmZvLkludE1vZFR5cGVTZWxlY3QgIT0gQ19JTlRfTU9EX05PTkUpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocEFDLT5EeW5JcnFNb2RJbmZvLk1hc2tJcnFNb2RlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJUlFfTUFTS19UWF9PTkxZOiAKLSAgICAgICAgICAgICAgICAgICBwcmludGsoIk9ubHkgVHgtaW50ZXJydXB0cyBhcmUgbW9kZXJhdGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElSUV9NQVNLX1JYX09OTFk6IAotICAgICAgICAgICAgICAgICAgIHByaW50aygiT25seSBSeC1pbnRlcnJ1cHRzIGFyZSBtb2RlcmF0ZWRcbiIpOwotICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSVJRX01BU0tfU1BfT05MWTogCi0gICAgICAgICAgICAgICAgICAgcHJpbnRrKCJPbmx5IHNwZWNpYWwtaW50ZXJydXB0cyBhcmUgbW9kZXJhdGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElSUV9NQVNLX1RYX1JYOiAKLSAgICAgICAgICAgICAgICAgICBwcmludGsoIlR4LSBhbmQgUngtaW50ZXJydXB0cyBhcmUgbW9kZXJhdGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElSUV9NQVNLX1NQX1JYOiAKLSAgICAgICAgICAgICAgICAgICBwcmludGsoIlNwZWNpYWwtIGFuZCBSeC1pbnRlcnJ1cHRzIGFyZSBtb2RlcmF0ZWRcbiIpOwotICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSVJRX01BU0tfU1BfVFg6IAotICAgICAgICAgICAgICAgICAgIHByaW50aygiU3BlY2lhbC0gYW5kIFR4LWludGVycnVwdHMgYXJlIG1vZGVyYXRlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJUlFfTUFTS19SWF9UWF9TUDoKLSAgICAgICAgICAgICAgICAgICBwcmludGsoIkFsbCBSeC0sIFR4IGFuZCBzcGVjaWFsLWludGVycnVwdHMgYXJlIG1vZGVyYXRlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICBwcmludGsoIkRvbid0IGtub3cgd2hhdCBpcyBtb2RlcmF0ZWRcbiIpOwotICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRrKCJObyBzcGVjaWZpYyBpbnRlcnJ1cHRzIG1hc2tlZCBmb3IgbW9kZXJhdGlvblxuIik7Ci0gICAgICAgIH0KLSAgICB9IAotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogRnVuY3Rpb24gICAgIDogRGlzcGxheURlc2NyUmF0aW8KLSoqIERlc2NyaXB0aW9uICA6IExpa2UgdGhlIG5hbWUgc3RhdGVzLi4uCi0qKiBQcm9ncmFtbWVyICAgOiBSYWxwaCBSb2VzbGVyCi0qKiBMYXN0IE1vZGlmaWVkOiAyMy1tYXItMDMKLSoqIFJldHVybnMgICAgICA6IHZvaWQhCi0qKiBOb3RlcyAgICAgICAgOiAtCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZAotRGlzcGxheURlc2NyUmF0aW8oU0tfQUMgKnBBQykgewotICAgIGludCBUb3RhbE1heE5ickRlc2NyID0gMDsKLQotICAgIGlmIChwQUMtPkR5bklycU1vZEluZm8uRGlzcGxheVN0YXRzKSB7Ci0gICAgICAgIFRvdGFsTWF4TmJyRGVzY3IgPSBwQUMtPlJ4RGVzY3JQZXJSaW5nICogR2V0UnhDYWxscyhwQUMpOwotICAgICAgICBwcmludGsoIlJhdGlvIGRlc2NyaXB0b3JzOiAlaS8laVxuIiwKLSAgICAgICAgICAgICAgIE1fRElNSU5GTy5OYnJQcm9jZXNzZWREZXNjciwgVG90YWxNYXhOYnJEZXNjcik7Ci0gICAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioKLSoqIEVuZCBvZiBmaWxlCi0qKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZXRodG9vbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTZkYTg5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tldGh0b29sLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6ICAgICAgICBza2V0aHRvb2wuYwotICogUHJvamVjdDogICAgIEdFbmVzaXMsIFBDSSBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLSAqIFZlcnNpb246ICAgICAkUmV2aXNpb246IDEuNyAkCi0gKiBEYXRlOiAgICAgICAgJERhdGU6IDIwMDQvMDkvMjkgMTM6MzI6MDcgJAotICogUHVycG9zZTogICAgIEFsbCBmdW5jdGlvbnMgcmVnYXJkaW5nIGV0aHRvb2wgaGFuZGxpbmcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDA0IE1hcnZlbGwuCi0gKgotICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFl1a29uLzIgY2hpcHNldCBhbmQgU3lzS29ubmVjdCBHaWdhYml0IEV0aGVybmV0IAotICogICAgICBTZXJ2ZXIgQWRhcHRlcnMuCi0gKgotICoJQXV0aG9yOiBSYWxwaCBSb2VzbGVyIChycm9lc2xlckBzeXNrb25uZWN0LmRlKQotICoJICAgICAgICBNaXJrbyBMaW5kbmVyIChtbGluZG5lckBzeXNrb25uZWN0LmRlKQotICoKLSAqCUFkZHJlc3MgYWxsIHF1ZXN0aW9uIHRvOiBsaW51eEBzeXNrb25uZWN0LmRlCi0gKgotICoJVGhlIHRlY2huaWNhbCBtYW51YWwgZm9yIHRoZSBhZGFwdGVycyBpcyBhdmFpbGFibGUgZnJvbSBTeXNLb25uZWN0J3MKLSAqCXdlYiBwYWdlczogd3d3LnN5c2tvbm5lY3QuY29tCi0gKgkKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLSNpbmNsdWRlICJoL3NrdmVyc2lvbi5oIgotCi0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlZmluZXMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgU1VQUF9DT1BQRVJfQUxMIChTVVBQT1JURURfMTBiYXNlVF9IYWxmICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTVVBQT1JURURfVFApCi0KLSNkZWZpbmUgQURWX0NPUFBFUl9BTEwgIChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiAgfCBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGZ8IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VEX1RQKQotCi0jZGVmaW5lIFNVUFBfRklCUkVfQUxMICAoU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNVUFBPUlRFRF9GSUJSRSAgICAgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTVVBQT1JURURfQXV0b25lZykKLQotI2RlZmluZSBBRFZfRklCUkVfQUxMICAgKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQURWRVJUSVNFRF9GSUJSRSAgICAgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VEX0F1dG9uZWcpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIExvY2FsIEZ1bmN0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCWdldFNldHRpbmdzIC0gcmV0cmlldmVzIHRoZSBjdXJyZW50IHNldHRpbmdzIG9mIHRoZSBzZWxlY3RlZCBhZGFwdGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSBzZWxlY3RlZCBhZGFwdGVyIGlzIHJldHVybmVkLgotICoJVGhpcyBjb25maWd1cmF0aW9uIGludm9sdmVzIGEpc3BlZWQsIGIpZHVwbGV4IGFuZCBjKWF1dG9uZWcgcGx1cwotICoJYSBudW1iZXIgb2Ygb3RoZXIgdmFyaWFibGVzLgotICoKLSAqIFJldHVybnM6ICAgIGFsd2F5cyAwCi0gKgotICovCi1zdGF0aWMgaW50IGdldFNldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKLXsKLQljb25zdCBERVZfTkVUICpwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcG9ydCA9IHBOZXQtPlBvcnROcjsKLQljb25zdCBTS19BQyAqcEFDID0gcE5ldC0+cEFDOwotCWNvbnN0IFNLX0dFUE9SVCAqcFBvcnQgPSAmcEFDLT5HSW5pLkdQW3BvcnRdOwotCi0Jc3RhdGljIGludCBEdXBsZXhBdXRvTmVnQ29uZk1hcFs5XVszXT0gewotCQl7IC0xICAgICAgICAgICAgICAgICAgICAgLCAtMSAgICAgICAgICwgLTEgICAgICAgICAgICAgIH0sCi0JCXsgMCAgICAgICAgICAgICAgICAgICAgICAsIC0xICAgICAgICAgLCAtMSAgICAgICAgICAgICAgfSwKLQkJeyBTS19MTU9ERV9IQUxGICAgICAgICAgICwgRFVQTEVYX0hBTEYsIEFVVE9ORUdfRElTQUJMRSB9LAotCQl7IFNLX0xNT0RFX0ZVTEwgICAgICAgICAgLCBEVVBMRVhfRlVMTCwgQVVUT05FR19ESVNBQkxFIH0sCi0JCXsgU0tfTE1PREVfQVVUT0hBTEYgICAgICAsIERVUExFWF9IQUxGLCBBVVRPTkVHX0VOQUJMRSAgfSwKLQkJeyBTS19MTU9ERV9BVVRPRlVMTCAgICAgICwgRFVQTEVYX0ZVTEwsIEFVVE9ORUdfRU5BQkxFICB9LAotCQl7IFNLX0xNT0RFX0FVVE9CT1RIICAgICAgLCBEVVBMRVhfRlVMTCwgQVVUT05FR19FTkFCTEUgIH0sCi0JCXsgU0tfTE1PREVfQVVUT1NFTlNFICAgICAsIC0xICAgICAgICAgLCAtMSAgICAgICAgICAgICAgfSwKLQkJeyBTS19MTU9ERV9JTkRFVEVSTUlOQVRFRCwgLTEgICAgICAgICAsIC0xICAgICAgICAgICAgICB9Ci0JfTsKLQlzdGF0aWMgaW50IFNwZWVkQ29uZk1hcFs2XVsyXSA9IHsKLQkJeyAwICAgICAgICAgICAgICAgICAgICAgICAsIC0xICAgICAgICAgfSwKLQkJeyBTS19MU1BFRURfQVVUTyAgICAgICAgICAsIC0xICAgICAgICAgfSwKLQkJeyBTS19MU1BFRURfMTBNQlBTICAgICAgICAsIFNQRUVEXzEwICAgfSwKLQkJeyBTS19MU1BFRURfMTAwTUJQUyAgICAgICAsIFNQRUVEXzEwMCAgfSwKLQkJeyBTS19MU1BFRURfMTAwME1CUFMgICAgICAsIFNQRUVEXzEwMDAgfSwKLQkJeyBTS19MU1BFRURfSU5ERVRFUk1JTkFURUQsIC0xICAgICAgICAgfQotCX07Ci0Jc3RhdGljIGludCBBZHZTcGVlZE1hcFs2XVsyXSA9IHsKLQkJeyAwICAgICAgICAgICAgICAgICAgICAgICAsIC0xICAgICAgICAgfSwKLQkJeyBTS19MU1BFRURfQVVUTyAgICAgICAgICAsIC0xICAgICAgICAgfSwKLQkJeyBTS19MU1BFRURfMTBNQlBTICAgICAgICAsIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmICAgfCBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB9LAotCQl7IFNLX0xTUEVFRF8xMDBNQlBTICAgICAgICwgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmICB8IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB9LAotCQl7IFNLX0xTUEVFRF8xMDAwTUJQUyAgICAgICwgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGx9LAotCQl7IFNLX0xTUEVFRF9JTkRFVEVSTUlOQVRFRCwgLTEgICAgICAgICB9Ci0JfTsKLQotCWVjbWQtPnBoeV9hZGRyZXNzID0gcG9ydDsKLQllY21kLT5zcGVlZCAgICAgICA9IFNwZWVkQ29uZk1hcFtwUG9ydC0+UExpbmtTcGVlZFVzZWRdWzFdOwotCWVjbWQtPmR1cGxleCAgICAgID0gRHVwbGV4QXV0b05lZ0NvbmZNYXBbcFBvcnQtPlBMaW5rTW9kZVN0YXR1c11bMV07Ci0JZWNtZC0+YXV0b25lZyAgICAgPSBEdXBsZXhBdXRvTmVnQ29uZk1hcFtwUG9ydC0+UExpbmtNb2RlU3RhdHVzXVsyXTsKLQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7Ci0KLQlpZiAocEFDLT5HSW5pLkdJQ29wcGVyVHlwZSkgewotCQllY21kLT5wb3J0ICAgICAgICA9IFBPUlRfVFA7Ci0JCWVjbWQtPnN1cHBvcnRlZCAgID0gKFNVUFBfQ09QUEVSX0FMTHxTVVBQT1JURURfQXV0b25lZyk7Ci0JCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQllY21kLT5zdXBwb3J0ZWQgJj0gfihTVVBQT1JURURfMTBiYXNlVF9IYWxmKTsKLQkJCWVjbWQtPnN1cHBvcnRlZCAmPSB+KFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpOwotCQkJZWNtZC0+c3VwcG9ydGVkICY9IH4oU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYpOwotCQkJZWNtZC0+c3VwcG9ydGVkICY9IH4oU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpOwotCQl9IGVsc2UgewotCQkJaWYgKHBBQy0+R0luaS5HSUNoaXBJZCA9PSBDSElQX0lEX1lVS09OKSB7Ci0JCQkJZWNtZC0+c3VwcG9ydGVkICY9IH4oU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmKTsKLQkJCX0gCi0jaWZkZWYgQ0hJUF9JRF9ZVUtPTl9GRQotCQkJaWYgKHBBQy0+R0luaS5HSUNoaXBJZCA9PSBDSElQX0lEX1lVS09OX0ZFKSB7Ci0JCQkJZWNtZC0+c3VwcG9ydGVkICY9IH4oU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmKTsKLQkJCQllY21kLT5zdXBwb3J0ZWQgJj0gfihTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpOwotCQkJfQotI2VuZGlmCi0JCX0KLQkJaWYgKHBBQy0+R0luaS5HUFswXS5QTGlua1NwZWVkICE9IFNLX0xTUEVFRF9BVVRPKSB7Ci0JCQllY21kLT5hZHZlcnRpc2luZyA9IEFkdlNwZWVkTWFwW3BQb3J0LT5QTGlua1NwZWVkXVsxXTsKLQkJCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9ZVUtPTikgewotCQkJCWVjbWQtPmFkdmVydGlzaW5nICY9IH4oU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmKTsKLQkJCX0gCi0JCX0gZWxzZSB7Ci0JCQllY21kLT5hZHZlcnRpc2luZyA9IGVjbWQtPnN1cHBvcnRlZDsKLQkJfQotCi0JCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSAKLQkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKLQl9IGVsc2UgewotCQllY21kLT5wb3J0ICAgICAgICA9IFBPUlRfRklCUkU7Ci0JCWVjbWQtPnN1cHBvcnRlZCAgID0gU1VQUF9GSUJSRV9BTEw7Ci0JCWVjbWQtPmFkdmVydGlzaW5nID0gQURWX0ZJQlJFX0FMTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBNSUIgaW5mcmFzdHJ1Y3R1cmUgdXNlcyBpbnN0YW5jZSB2YWx1ZSBzdGFydGluZyBhdCAxCi0gKiBiYXNlZCBvbiBib2FyZCBhbmQgcG9ydC4KLSAqLwotc3RhdGljIGlubGluZSB1MzIgcG5taUluc3RhbmNlKGNvbnN0IERFVl9ORVQgKnBOZXQpCi17Ci0JcmV0dXJuIDEgKyAocE5ldC0+cEFDLT5SbG10TmV0cyA9PSAyKSArIHBOZXQtPlBvcnROcjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJc2V0U2V0dGluZ3MgLSBjb25maWd1cmVzIHRoZSBzZXR0aW5ncyBvZiBhIHNlbGVjdGVkIGFkYXB0ZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVBvc3NpYmxlIHNldHRpbmdzIHRoYXQgbWF5IGJlIGFsdGVyZWQgYXJlIGEpc3BlZWQsIGIpZHVwbGV4IG9yIAotICoJYylhdXRvbmVnb3RpYXRpb24uCi0gKgotICogUmV0dXJuczoKLSAqCTA6CWV2ZXJ5dGhpbmcgZmluZSwgbm8gZXJyb3IKLSAqCTwwOgl0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBmYWlsdXJlIAotICovCi1zdGF0aWMgaW50IHNldFNldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKLXsKLQlERVZfTkVUICpwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlTS19BQyAqcEFDID0gcE5ldC0+cEFDOwotCXUzMiBpbnN0YW5jZTsKLQljaGFyIGJ1Zls0XTsKLQlpbnQgbGVuID0gMTsKLQotCWlmIChlY21kLT5zcGVlZCAhPSBTUEVFRF8xMCAmJiBlY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgCi0JICAgICYmIGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJiBlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFICYmIGVjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKQotCQkqYnVmID0gKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgCi0JCQk/IFNLX0xNT0RFX0ZVTEwgOiBTS19MTU9ERV9IQUxGOwotCWVsc2UKLQkJKmJ1ZiA9IChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIAotCQkJPyBTS19MTU9ERV9BVVRPRlVMTCA6IFNLX0xNT0RFX0FVVE9IQUxGOwotCQotCWluc3RhbmNlID0gcG5taUluc3RhbmNlKHBOZXQpOwotCWlmIChTa1BubWlTZXRWYXIocEFDLCBwQUMtPklvQmFzZSwgT0lEX1NLR0VfTElOS19NT0RFLCAKLQkJCSAgICZidWYsICZsZW4sIGluc3RhbmNlLCBwTmV0LT5OZXROcikgIT0gU0tfUE5NSV9FUlJfT0spCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoKGVjbWQtPnNwZWVkKSB7Ci0JY2FzZSBTUEVFRF8xMDAwOgotCQkqYnVmID0gU0tfTFNQRUVEXzEwMDBNQlBTOwotCQlicmVhazsKLQljYXNlIFNQRUVEXzEwMDoKLQkJKmJ1ZiA9IFNLX0xTUEVFRF8xMDBNQlBTOwotCQlicmVhazsKLQljYXNlIFNQRUVEXzEwOgotCQkqYnVmID0gU0tfTFNQRUVEXzEwTUJQUzsKLQl9Ci0KLQlpZiAoU2tQbm1pU2V0VmFyKHBBQywgcEFDLT5Jb0Jhc2UsIE9JRF9TS0dFX1NQRUVEX01PREUsIAotCQkJICZidWYsICZsZW4sIGluc3RhbmNlLCBwTmV0LT5OZXROcikgIT0gU0tfUE5NSV9FUlJfT0spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIAlnZXREcml2ZXJJbmZvIC0gcmV0dXJucyBnZW5lcmljIGRyaXZlciBhbmQgYWRhcHRlciBpbmZvcm1hdGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJR2VuZXJpYyBkcml2ZXIgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQgdmlhIHRoaXMgZnVuY3Rpb24sIHN1Y2ggYXMKLSAqCXRoZSBuYW1lIG9mIHRoZSBkcml2ZXIsIGl0cyB2ZXJzaW9uIGFuZCBhbmQgZmlybXdhcmUgdmVyc2lvbi4KLSAqCUluIGFkZGl0aW9uIHRvIHRoaXMsIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2VsZWN0ZWQgYWRhcHRlciBpcyAKLSAqCXJldHVybmVkIGFzIGEgYnVzIGluZm8gc3RyaW5nIChlLmcuICcwMTowNS4wJykuCi0gKgkKLSAqIFJldHVybnM6CU4vQQotICoKLSAqLwotc3RhdGljIHZvaWQgZ2V0RHJpdmVySW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQotewotCWNvbnN0IERFVl9ORVQJKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNvbnN0IFNLX0FDICpwQUMgPSBwTmV0LT5wQUM7Ci0JY2hhciB2ZXJzWzMyXTsKLQotCXNucHJpbnRmKHZlcnMsIHNpemVvZih2ZXJzKS0xLCBWRVJfU1RSSU5HICIodiVkLiVkKSIsCi0JCShwQUMtPkdJbmkuR0lQY2lId1JldiA+PiA0KSAmIDB4ZiwgcEFDLT5HSW5pLkdJUGNpSHdSZXYgJiAweGYpOwotCi0Jc3RybGNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9GSUxFX05BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKLQlzdHJjcHkoaW5mby0+dmVyc2lvbiwgdmVycyk7Ci0Jc3RyY3B5KGluZm8tPmZ3X3ZlcnNpb24sICJOL0EiKTsKLQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShwQUMtPlBjaURldiksIEVUSFRPT0xfQlVTSU5GT19MRU4pOwotfQotCi0vKgotICogRXRodG9vbCBzdGF0aXN0aWNzIHN1cHBvcnQuCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyIFN0cmluZ3NTdGF0c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7Ci0JInJ4X3BhY2tldHMiLAkidHhfcGFja2V0cyIsCi0JInJ4X2J5dGVzIiwJInR4X2J5dGVzIiwKLQkicnhfZXJyb3JzIiwJInR4X2Vycm9ycyIsCQotCSJyeF9kcm9wcGVkIiwJInR4X2Ryb3BwZWQiLAotCSJtdWx0aWNhc3RzIiwJImNvbGxpc2lvbnMiLAkKLQkicnhfbGVuZ3RoX2Vycm9ycyIsCQkicnhfYnVmZmVyX292ZXJmbG93X2Vycm9ycyIsCi0JInJ4X2NyY19lcnJvcnMiLAkJInJ4X2ZyYW1lX2Vycm9ycyIsCi0JInJ4X3Rvb19zaG9ydF9lcnJvcnMiLAkJInJ4X3Rvb19sb25nX2Vycm9ycyIsCi0JInJ4X2NhcnJpZXJfZXh0ZW5zaW9uX2Vycm9ycyIsCSJyeF9zeW1ib2xfZXJyb3JzIiwKLQkicnhfbGxjX21hY19zaXplX2Vycm9ycyIsCSJyeF9jYXJyaWVyX2Vycm9ycyIsCQotCSJyeF9qYWJiZXJfZXJyb3JzIiwJCSJyeF9taXNzZWRfZXJyb3JzIiwKLQkidHhfYWJvcnRfY29sbGlzaW9uX2Vycm9ycyIsCSJ0eF9jYXJyaWVyX2Vycm9ycyIsCi0JInR4X2J1ZmZlcl91bmRlcnJ1bl9lcnJvcnMiLAkidHhfaGVhcnRiZWF0X2Vycm9ycyIsCi0JInR4X3dpbmRvd19lcnJvcnMiLAotfTsKLQotc3RhdGljIGludCBnZXRTdGF0c0NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIEFSUkFZX1NJWkUoU3RyaW5nc1N0YXRzKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0U3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKLXsKLQlzd2l0Y2goc3RyaW5nc2V0KSB7Ci0JY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCW1lbWNweShkYXRhLCAqU3RyaW5nc1N0YXRzLCBzaXplb2YoU3RyaW5nc1N0YXRzKSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZ2V0RXRodG9vbFN0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCi17Ci0JY29uc3QgREVWX05FVAkqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JY29uc3QgU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQljb25zdCBTS19QTk1JX1NUUlVDVF9EQVRBICpwUG5taVN0cnVjdCA9ICZwQUMtPlBubWlTdHJ1Y3Q7Ci0KLQkqZGF0YSsrID0gcFBubWlTdHJ1Y3QtPlN0YXRbMF0uU3RhdFJ4T2tDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRUeE9rQ3RzOwotCSpkYXRhKysgPSBwUG5taVN0cnVjdC0+U3RhdFswXS5TdGF0UnhPY3RldHNPa0N0czsKLQkqZGF0YSsrID0gcFBubWlTdHJ1Y3QtPlN0YXRbMF0uU3RhdFR4T2N0ZXRzT2tDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5JbkVycm9yc0N0czsKLQkqZGF0YSsrID0gcFBubWlTdHJ1Y3QtPlN0YXRbMF0uU3RhdFR4U2luZ2xlQ29sbGlzaW9uQ3RzOwotCSpkYXRhKysgPSBwUG5taVN0cnVjdC0+UnhOb0J1ZkN0czsKLQkqZGF0YSsrID0gcFBubWlTdHJ1Y3QtPlR4Tm9CdWZDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeE11bHRpY2FzdE9rQ3RzOwotCSpkYXRhKysgPSBwUG5taVN0cnVjdC0+U3RhdFswXS5TdGF0VHhTaW5nbGVDb2xsaXNpb25DdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeFJ1bnRDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeEZpZm9PdmVyZmxvd0N0czsKLQkqZGF0YSsrID0gcFBubWlTdHJ1Y3QtPlN0YXRbMF0uU3RhdFJ4RmNzQ3RzOwotCSpkYXRhKysgPSBwUG5taVN0cnVjdC0+U3RhdFswXS5TdGF0UnhGcmFtaW5nQ3RzOwotCSpkYXRhKysgPSBwUG5taVN0cnVjdC0+U3RhdFswXS5TdGF0UnhTaG9ydHNDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeFRvb0xvbmdDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeENleHRDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeFN5bWJvbEN0czsKLQkqZGF0YSsrID0gcFBubWlTdHJ1Y3QtPlN0YXRbMF0uU3RhdFJ4SVJMZW5ndGhDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeENhcnJpZXJDdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRSeEphYmJlckN0czsKLQkqZGF0YSsrID0gcFBubWlTdHJ1Y3QtPlN0YXRbMF0uU3RhdFJ4TWlzc2VkQ3RzOwotCSpkYXRhKysgPSBwQUMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzOwotCSpkYXRhKysgPSBwUG5taVN0cnVjdC0+U3RhdFswXS5TdGF0VHhDYXJyaWVyQ3RzOwotCSpkYXRhKysgPSBwUG5taVN0cnVjdC0+U3RhdFswXS5TdGF0VHhGaWZvVW5kZXJydW5DdHM7Ci0JKmRhdGErKyA9IHBQbm1pU3RydWN0LT5TdGF0WzBdLlN0YXRUeENhcnJpZXJDdHM7Ci0JKmRhdGErKyA9IHBBQy0+c3RhdHMudHhfd2luZG93X2Vycm9yczsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJdG9nZ2xlTGVkcyAtIENoYW5nZXMgdGhlIExFRCBzdGF0ZSBvZiBhbiBhZGFwdGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWxsIExFRHMgb2YgYW4gYWRhcHRlciBzbwotICoJdGhhdCBpdCBjYW4gYmUgbG9jYXRlZCBieSBhIHVzZXIuIAotICoKLSAqIFJldHVybnM6CU4vQQotICoKLSAqLwotc3RhdGljIHZvaWQgdG9nZ2xlTGVkcyhERVZfTkVUICpwTmV0LCBpbnQgb24pCi17Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQlpbnQgcG9ydCA9IHBOZXQtPlBvcnROcjsKLQl2b2lkIF9faW9tZW0gKmlvID0gcEFDLT5Jb0Jhc2U7Ci0KLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQlTS19PVVQ4KGlvLCBNUl9BRERSKHBvcnQsTE5LX0xFRF9SRUcpLCAKLQkJCW9uID8gU0tfTE5LX09OIDogU0tfTE5LX09GRik7Ci0JCVNrR2VZZWxsb3dMRUQocEFDLCBpbywgCi0JCQkgICAgICBvbiA/IChMRURfT04gPj4gMSkgOiAoTEVEX09GRiA+PiAxKSk7Ci0JCVNrR2VYbWl0TEVEKHBBQywgaW8sIE1SX0FERFIocG9ydCxSWF9MRURfSU5JKSwKLQkJCSAgICBvbiA/IFNLX0xFRF9UU1QgOiBTS19MRURfRElTKTsKLQotCQlpZiAocEFDLT5HSW5pLkdQW3BvcnRdLlBoeVR5cGUgPT0gU0tfUEhZX0JDT00pCi0JCQlTa1htUGh5V3JpdGUocEFDLCBpbywgcG9ydCwgUEhZX0JDT01fUF9FWFRfQ1RSTCwgCi0JCQkJICAgICBvbiA/IFBIWV9CX1BFQ19MRURfT04gOiBQSFlfQl9QRUNfTEVEX09GRik7Ci0JCWVsc2UgaWYgKHBBQy0+R0luaS5HUFtwb3J0XS5QaHlUeXBlID09IFNLX1BIWV9MT05FKQotCQkJU2tYbVBoeVdyaXRlKHBBQywgaW8sIHBvcnQsIFBIWV9MT05FX0xFRF9DRkcsCi0JCQkJICAgICBvbiA/IDB4MDgwMCA6IFBIWV9MX0xDX0xFRFQpOwotCQllbHNlCi0JCQlTa0dlWG1pdExFRChwQUMsIGlvLCBNUl9BRERSKHBvcnQsVFhfTEVEX0lOSSksCi0JCQkJICAgIG9uID8gU0tfTEVEX1RTVCA6IFNLX0xFRF9ESVMpOwotCX0gZWxzZSB7Ci0JCWNvbnN0IHUxNiBZdWtMZWRPbiA9IChQSFlfTV9MRURfTU9fRFVQKE1PX0xFRF9PTikgIHwKLQkJCQkgICAgICBQSFlfTV9MRURfTU9fMTAoTU9fTEVEX09OKSAgIHwKLQkJCQkgICAgICBQSFlfTV9MRURfTU9fMTAwKE1PX0xFRF9PTikgIHwKLQkJCQkgICAgICBQSFlfTV9MRURfTU9fMTAwMChNT19MRURfT04pIHwgCi0JCQkJICAgICAgUEhZX01fTEVEX01PX1JYKE1PX0xFRF9PTikpOwotCQljb25zdCB1MTYgIFl1a0xlZE9mZiA9IChQSFlfTV9MRURfTU9fRFVQKE1PX0xFRF9PRkYpICB8Ci0JCQkJCVBIWV9NX0xFRF9NT18xMChNT19MRURfT0ZGKSAgIHwKLQkJCQkJUEhZX01fTEVEX01PXzEwMChNT19MRURfT0ZGKSAgfAotCQkJCQlQSFlfTV9MRURfTU9fMTAwMChNT19MRURfT0ZGKSB8IAotCQkJCQlQSFlfTV9MRURfTU9fUlgoTU9fTEVEX09GRikpOwotCQotCi0JCVNrR21QaHlXcml0ZShwQUMsaW8scG9ydCxQSFlfTUFSVl9MRURfQ1RSTCwwKTsKLQkJU2tHbVBoeVdyaXRlKHBBQyxpbyxwb3J0LFBIWV9NQVJWX0xFRF9PVkVSLCAKLQkJCSAgICAgb24gPyBZdWtMZWRPbiA6IFl1a0xlZE9mZik7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJc2tHZUJsaW5rVGltZXIgLSBDaGFuZ2VzIHRoZSBMRUQgc3RhdGUgb2YgYW4gYWRhcHRlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFsbCBMRURzIG9mIGFuIGFkYXB0ZXIgc28KLSAqCXRoYXQgaXQgY2FuIGJlIGxvY2F0ZWQgYnkgYSB1c2VyLiBJZiB0aGUgcmVxdWVzdGVkIHRpbWUgaW50ZXJ2YWwgZm9yCi0gKgl0aGlzIHRlc3QgaGFzIGVsYXBzZWQsIHRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIGV2ZXJ5dGhpbmcgdGhhdCB3YXMgCi0gKgl0ZW1wb3JhcmlseSBzZXR1cCBkdXJpbmcgdGhlIGxvY2F0ZSBOSUMgdGVzdC4gVGhpcyBpbnZvbHZlcyBvZiBjb3Vyc2UKLSAqCWFsc28gY2xvc2luZyBvciBvcGVuaW5nIGFueSBhZGFwdGVyIHNvIHRoYXQgdGhlIGluaXRpYWwgYm9hcmQgc3RhdGUgCi0gKglpcyByZWNvdmVyZWQuCi0gKgotICogUmV0dXJuczoJTi9BCi0gKgotICovCi12b2lkIFNrR2VCbGlua1RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0JREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQotCXRvZ2dsZUxlZHMocE5ldCwgcEFDLT5MZWRzT24pOwotCi0JcEFDLT5MZWRzT24gPSAhcEFDLT5MZWRzT247Ci0JbW9kX3RpbWVyKCZwQUMtPkJsaW5rVGltZXIsIGppZmZpZXMgKyBIWi80KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCWxvY2F0ZURldmljZSAtIHN0YXJ0IHRoZSBsb2NhdGUgTklDIGZlYXR1cmUgb2YgdGhlIGVsZWN0ZWQgYWRhcHRlciAKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpZiB0aGUgdXNlciB3YW50IHRvIGxvY2F0ZSBhIHBhcnRpY3VsYXIgTklDLgotICoJQWxsIExFRHMgYXJlIHJlZ3VsYXJseSBzd2l0Y2hlZCBvbiBhbmQgb2ZmLCBzbyB0aGUgTklDIGNhbiBlYXNpbHkKLSAqCWJlIGlkZW50aWZpZWQuCi0gKgotICogUmV0dXJuczoJCi0gKgk9PTA6CWV2ZXJ5dGhpbmcgZmluZSwgbm8gZXJyb3IsIGxvY2F0ZU5JQyB0ZXN0IHdhcyBzdGFydGVkCi0gKgkhPTA6CW9uZSBsb2NhdGVOSUMgdGVzdCBydW5zIGFscmVhZHkKLSAqCi0gKi8KLXN0YXRpYyBpbnQgbG9jYXRlRGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCURFVl9ORVQgKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCVNLX0FDICpwQUMgPSBwTmV0LT5wQUM7Ci0KLQlpZighZGF0YSB8fCBkYXRhID4gKHUzMikoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpCi0JCWRhdGEgPSAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKTsKLQotCS8qIHN0YXJ0IGJsaW5raW5nICovCi0JcEFDLT5MZWRzT24gPSAwOwotCW1vZF90aW1lcigmcEFDLT5CbGlua1RpbWVyLCBqaWZmaWVzKTsKLQltc2xlZXBfaW50ZXJydXB0aWJsZShkYXRhICogMTAwMCk7Ci0JZGVsX3RpbWVyX3N5bmMoJnBBQy0+QmxpbmtUaW1lcik7Ci0JdG9nZ2xlTGVkcyhwTmV0LCAwKTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJZ2V0UGF1c2VQYXJhbXMgLSByZXRyaWV2ZXMgdGhlIHBhdXNlIHBhcmFtZXRlcnMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUFsbCBjdXJyZW50IHBhdXNlIHBhcmFtZXRlcnMgb2YgYSBzZWxlY3RlZCBhZGFwdGVyIGFyZSBwbGFjZWQgCi0gKglpbiB0aGUgcGFzc2VkIGV0aHRvb2xfcGF1c2VwYXJhbSBzdHJ1Y3R1cmUgYW5kIGFyZSByZXR1cm5lZC4KLSAqCi0gKiBSZXR1cm5zOglOL0EKLSAqCi0gKi8KLXN0YXRpYyB2b2lkIGdldFBhdXNlUGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwYXVzZSkgCi17Ci0JREVWX05FVAkqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQlTS19HRVBPUlQgKnBQb3J0ID0gJnBBQy0+R0luaS5HUFtwTmV0LT5Qb3J0TnJdOwotCi0JZXBhdXNlLT5yeF9wYXVzZSA9IChwUG9ydC0+UEZsb3dDdHJsTW9kZSA9PSBTS19GTE9XX01PREVfU1lNTUVUUklDKSB8fAotCQkgIChwUG9ydC0+UEZsb3dDdHJsTW9kZSA9PSBTS19GTE9XX01PREVfU1lNX09SX1JFTSk7Ci0KLQllcGF1c2UtPnR4X3BhdXNlID0gZXBhdXNlLT5yeF9wYXVzZSB8fCAocFBvcnQtPlBGbG93Q3RybE1vZGUgPT0gU0tfRkxPV19NT0RFX0xPQ19TRU5EKTsKLQllcGF1c2UtPmF1dG9uZWcgPSBlcGF1c2UtPnJ4X3BhdXNlIHx8IGVwYXVzZS0+dHhfcGF1c2U7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCXNldFBhdXNlUGFyYW1zIC0gY29uZmlndXJlcyB0aGUgcGF1c2UgcGFyYW1ldGVycyBvZiBhbiBhZGFwdGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFJ4IG9yIFR4IHBhdXNlIHBhcmFtZXRlcnMgCi0gKgotICogUmV0dXJuczoKLSAqCT09MDoJZXZlcnl0aGluZyBmaW5lLCBubyBlcnJvcgotICoJIT0wOgl0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBmYWlsdXJlIAotICovCi1zdGF0aWMgaW50IHNldFBhdXNlUGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgLCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCi17Ci0JREVWX05FVAkqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQlTS19HRVBPUlQgKnBQb3J0ID0gJnBBQy0+R0luaS5HUFtwTmV0LT5Qb3J0TnJdOwotCXUzMglpbnN0YW5jZSA9IHBubWlJbnN0YW5jZShwTmV0KTsKLQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIG9sZDsKLQl1OAlvbGRzcGVlZCA9IHBQb3J0LT5QTGlua1NwZWVkVXNlZDsKLQljaGFyCWJ1Zls0XTsKLQlpbnQJbGVuID0gMTsKLQlpbnQgcmV0OwotCi0JLyoKLQkqKiB3ZSBoYXZlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzZXR0aW5ncyB0byBzZWUgaWYgCi0JKiogdGhlIG9wZXJhdG9yIHJlcXVlc3RlZCBhbnkgbW9kaWZpY2F0aW9uIG9mIHRoZSBmbG93IAotCSoqIGNvbnRyb2wgcGFyYW1ldGVycy4uLgotCSovCi0JZ2V0UGF1c2VQYXJhbXMoZGV2LCAmb2xkKTsKLQotCS8qCi0JKiogcGVyZm9ybSBtb2RpZmljYXRpb25zIHJlZ2FyZGluZyB0aGUgY2hhbmdlcyAKLQkqKiByZXF1ZXN0ZWQgYnkgdGhlIG9wZXJhdG9yCi0JKi8KLQlpZiAoZXBhdXNlLT5hdXRvbmVnICE9IG9sZC5hdXRvbmVnKSAKLQkJKmJ1ZiA9IGVwYXVzZS0+YXV0b25lZyA/IFNLX0ZMT1dfTU9ERV9OT05FIDogU0tfRkxPV19NT0RFX1NZTU1FVFJJQzsKLQllbHNlIHsKLQkJaWYgKGVwYXVzZS0+cnhfcGF1c2UgJiYgZXBhdXNlLT50eF9wYXVzZSkgCi0JCQkqYnVmID0gU0tfRkxPV19NT0RFX1NZTU1FVFJJQzsKLQkJZWxzZSBpZiAoZXBhdXNlLT5yeF9wYXVzZSAmJiAhZXBhdXNlLT50eF9wYXVzZSkKLQkJCSpidWYgPSAgU0tfRkxPV19NT0RFX1NZTV9PUl9SRU07Ci0JCWVsc2UgaWYgKCFlcGF1c2UtPnJ4X3BhdXNlICYmIGVwYXVzZS0+dHhfcGF1c2UpCi0JCQkqYnVmID0gIFNLX0ZMT1dfTU9ERV9MT0NfU0VORDsKLQkJZWxzZQotCQkJKmJ1ZiA9IFNLX0ZMT1dfTU9ERV9OT05FOwotCX0KLQotCXJldCA9IFNrUG5taVNldFZhcihwQUMsIHBBQy0+SW9CYXNlLCBPSURfU0tHRV9GTE9XQ1RSTF9NT0RFLAotCQkJICZidWYsICZsZW4sIGluc3RhbmNlLCBwTmV0LT5OZXROcik7Ci0KLQlpZiAocmV0ICE9IFNLX1BOTUlfRVJSX09LKSB7Ci0JCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0NUUkwsCi0JCQkgICAoImV0aHRvb2wgKHNrOThsaW4pOiBlcnJvciBjaGFuZ2luZyByeC90eCBwYXVzZSAoJWkpXG4iLCByZXQpKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JLyoKLQkqKiBJdCBtYXkgYmUgdGhhdCBhdXRvbmVnIGhhcyBiZWVuIGRpc2FibGVkISBUaGVyZWZvcmUKLQkqKiBzZXQgdGhlIHNwZWVkIHRvIHRoZSBwcmV2aW91c2x5IHVzZWQgdmFsdWUuLi4KLQkqLwotCWlmICghZXBhdXNlLT5hdXRvbmVnKSB7Ci0JCWxlbiA9IDE7Ci0JCXJldCA9IFNrUG5taVNldFZhcihwQUMsIHBBQy0+SW9CYXNlLCBPSURfU0tHRV9TUEVFRF9NT0RFLCAKLQkJCQkgICAmb2xkc3BlZWQsICZsZW4sIGluc3RhbmNlLCBwTmV0LT5OZXROcik7Ci0JCWlmIChyZXQgIT0gU0tfUE5NSV9FUlJfT0spIAotCQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkgICAoImV0aHRvb2wgKHNrOThsaW4pOiBlcnJvciBzZXR0aW5nIHNwZWVkICglaSlcbiIsIHJldCkpOwotCX0KLSBlcnI6Ci0gICAgICAgIHJldHVybiByZXQgPyAtRUlPIDogMDsKLX0KLQotLyogT25seSBZdWtvbiBzdXBwb3J0cyBjaGVja3N1bSBvZmZsb2FkLiAqLwotc3RhdGljIGludCBzZXRTY2F0dGVyR2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCURFVl9ORVQgKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCVNLX0FDICpwQUMgPSBwTmV0LT5wQUM7Ci0KLQlpZiAocEFDLT5HSW5pLkdJQ2hpcElkID09IENISVBfSURfR0VORVNJUykKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBldGh0b29sX29wX3NldF9zZyhkZXYsIGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHNldFR4Q3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlERVZfTkVUICpwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlTS19BQyAqcEFDID0gcE5ldC0+cEFDOwotCi0JaWYgKHBBQy0+R0luaS5HSUNoaXBJZCA9PSBDSElQX0lEX0dFTkVTSVMpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBldGh0b29sX29wX3NldF90eF9jc3VtKGRldiwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB1MzIgZ2V0UnhDc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQotCXJldHVybiBwQUMtPlJ4UG9ydFtwTmV0LT5Qb3J0TnJdLlJ4Q3N1bTsKLX0KLQotc3RhdGljIGludCBzZXRSeENzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0JREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQotCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlwQUMtPlJ4UG9ydFtwTmV0LT5Qb3J0TnJdLlJ4Q3N1bSA9IGRhdGEgIT0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRSZWdzTGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDB4NDAwMDsKLX0KLQotLyoKLSAqIFJldHVybnMgY29weSBvZiB3aG9sZSBjb250cm9sIHJlZ2lzdGVyIHJlZ2lvbgotICogTm90ZTogc2tpcCBSQU0gYWRkcmVzcyByZWdpc3RlciBiZWNhdXNlIGFjY2Vzc2luZyBpdCB3aWxsCi0gKiAJIGNhdXNlIGJ1cyBoYW5ncyEKLSAqLwotc3RhdGljIHZvaWQgZ2V0UmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAotCQkJICB2b2lkICpwKQotewotCURFVl9ORVQgKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNvbnN0IHZvaWQgX19pb21lbSAqaW8gPSBwTmV0LT5wQUMtPklvQmFzZTsKLQotCXJlZ3MtPnZlcnNpb24gPSAxOwotCW1lbXNldChwLCAwLCByZWdzLT5sZW4pOwotCW1lbWNweV9mcm9taW8ocCwgaW8sIEIzX1JBTV9BRERSKTsKLQotCW1lbWNweV9mcm9taW8ocCArIEIzX1JJX1dUT19SMSwgaW8gKyBCM19SSV9XVE9fUjEsCi0JCSAgICAgIHJlZ3MtPmxlbiAtIEIzX1JJX1dUT19SMSk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBTa0dlRXRodG9vbE9wcyA9IHsKLQkuZ2V0X3NldHRpbmdzCQk9IGdldFNldHRpbmdzLAotCS5zZXRfc2V0dGluZ3MJCT0gc2V0U2V0dGluZ3MsCi0JLmdldF9kcnZpbmZvCQk9IGdldERyaXZlckluZm8sCi0JLmdldF9zdHJpbmdzCQk9IGdldFN0cmluZ3MsCi0JLmdldF9zdGF0c19jb3VudAk9IGdldFN0YXRzQ291bnQsCi0JLmdldF9ldGh0b29sX3N0YXRzCT0gZ2V0RXRodG9vbFN0YXRzLAotCS5waHlzX2lkCQk9IGxvY2F0ZURldmljZSwKLQkuZ2V0X3BhdXNlcGFyYW0JCT0gZ2V0UGF1c2VQYXJhbXMsCi0JLnNldF9wYXVzZXBhcmFtCQk9IHNldFBhdXNlUGFyYW1zLAotCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfc2cJCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cJCQk9IHNldFNjYXR0ZXJHYXRoZXIsCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IHNldFR4Q3N1bSwKLQkuZ2V0X3J4X2NzdW0JCT0gZ2V0UnhDc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBzZXRSeENzdW0sCi0JLmdldF9yZWdzCQk9IGdldFJlZ3MsCi0JLmdldF9yZWdzX2xlbgkJPSBnZXRSZWdzTGVuLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwODkwZTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MjE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2dlLmMKLSAqIFByb2plY3Q6CUdFbmVzaXMsIFBDSSBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS40NSAkCi0gKiBEYXRlOiAgICAgICAJJERhdGU6IDIwMDQvMDIvMTIgMTQ6NDE6MDIgJAotICogUHVycG9zZToJVGhlIG1haW4gZHJpdmVyIHNvdXJjZSBtb2R1bGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFl1a29uIGNoaXBzZXQgYW5kIFN5c0tvbm5lY3QgR2lnYWJpdCBFdGhlcm5ldCAKLSAqICAgICAgU2VydmVyIEFkYXB0ZXJzLgotICoKLSAqCUNyZWF0ZWQgMTAtRmViLTE5OTksIGJhc2VkIG9uIExpbnV4JyBhY2VuaWMuYywgM2M1OXguYyBhbmQKLSAqCVN5c0tvbm5lY3RzIEdFbmVzaXMgU29sYXJpcyBkcml2ZXIKLSAqCUF1dGhvcjogQ2hyaXN0b3BoIEdvb3MgKGNnb29zQHN5c2tvbm5lY3QuZGUpCi0gKgkgICAgICAgIE1pcmtvIExpbmRuZXIgKG1saW5kbmVyQHN5c2tvbm5lY3QuZGUpCi0gKgotICoJQWRkcmVzcyBhbGwgcXVlc3Rpb24gdG86IGxpbnV4QHN5c2tvbm5lY3QuZGUKLSAqCi0gKglUaGUgdGVjaG5pY2FsIG1hbnVhbCBmb3IgdGhlIGFkYXB0ZXJzIGlzIGF2YWlsYWJsZSBmcm9tIFN5c0tvbm5lY3QncwotICoJd2ViIHBhZ2VzOiB3d3cuc3lza29ubmVjdC5jb20KLSAqCUdvdG8gIlN1cHBvcnQiIGFuZCBzZWFyY2ggS25vd2xlZGdlIEJhc2UgZm9yICJtYW51YWwiLgotICoJCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBQb3NzaWJsZSBjb21waWxlciBvcHRpb25zICgjZGVmaW5lIHh4eCAvIC1EeHh4KToKLSAqCi0gKglkZWJ1Z2dpbmcgY2FuIGJlIGVuYWJsZSBieSBjaGFuZ2luZyBTS19ERUJVR19DSEtNT0QgYW5kCi0gKglTS19ERUJVR19DSEtDQVQgaW4gbWFrZWZpbGUgKGRlc2NyaWJlZCB0aGVyZSkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqCVRoaXMgaXMgdGhlIG1haW4gbW9kdWxlIG9mIHRoZSBMaW51eCBHRSBkcml2ZXIuCi0gKgkKLSAqCUFsbCBzb3VyY2UgZmlsZXMgZXhjZXB0IHNrZ2UuYywgc2tkcnYxc3QuaCwgc2tkcnYybmQuaCBhbmQgc2t0eXBlcy5oCi0gKglhcmUgcGFydCBvZiBTeXNLb25uZWN0J3MgQ09NTU9OIE1PRFVMRVMgZm9yIHRoZSBTSy05OHh4IGFkYXB0ZXJzLgotICoJVGhvc2UgYXJlIHVzZWQgZm9yIGRyaXZlcnMgb24gbXVsdGlwbGUgT1MnLCBzbyBzb21lIHRoaW5nIG1heSBzZWVtCi0gKgl1bm5lY2Vzc2FyeSBjb21wbGljYXRlZCBvbiBMaW51eC4gUGxlYXNlIGRvIG5vdCB0cnkgdG8gJ2NsZWFuIHVwJwotICoJdGhlbSB3aXRob3V0IFZFUlkgZ29vZCByZWFzb25zLCBiZWNhdXNlIHRoaXMgd2lsbCBtYWtlIGl0IG1vcmUKLSAqCWRpZmZpY3VsdCB0byBrZWVwIHRoZSBMaW51eCBkcml2ZXIgaW4gc3luY2hyb25pc2F0aW9uIHdpdGggdGhlCi0gKglvdGhlciB2ZXJzaW9ucy4KLSAqCi0gKiBJbmNsdWRlIGZpbGUgaGllcmFyY2h5OgotICoKLSAqCTxsaW51eC9tb2R1bGUuaD4KLSAqCi0gKgkiaC9za2RydjFzdC5oIgotICoJCTxsaW51eC90eXBlcy5oPgotICoJCTxsaW51eC9rZXJuZWwuaD4KLSAqCQk8bGludXgvc3RyaW5nLmg+Ci0gKgkJPGxpbnV4L2Vycm5vLmg+Ci0gKgkJPGxpbnV4L2lvcG9ydC5oPgotICoJCTxsaW51eC9zbGFiLmg+Ci0gKgkJPGxpbnV4L2ludGVycnVwdC5oPgotICoJCTxsaW51eC9wY2kuaD4KLSAqCQk8bGludXgvYml0b3BzLmg+Ci0gKgkJPGFzbS9ieXRlb3JkZXIuaD4KLSAqCQk8YXNtL2lvLmg+Ci0gKgkJPGxpbnV4L25ldGRldmljZS5oPgotICoJCTxsaW51eC9ldGhlcmRldmljZS5oPgotICoJCTxsaW51eC9za2J1ZmYuaD4KLSAqCSAgICB0aG9zZSB0aHJlZSBkZXBlbmRpbmcgb24ga2VybmVsIHZlcnNpb24gdXNlZDoKLSAqCQk8bGludXgvYmlvczMyLmg+Ci0gKgkJPGxpbnV4L2luaXQuaD4KLSAqCQk8YXNtL3VhY2Nlc3MuaD4KLSAqCQk8bmV0L2NoZWNrc3VtLmg+Ci0gKgotICoJCSJoL3NrZXJyb3IuaCIKLSAqCQkiaC9za2RlYnVnLmgiCi0gKgkJImgvc2t0eXBlcy5oIgotICoJCSJoL2xtODAuaCIKLSAqCQkiaC94bWFjX2lpLmgiCi0gKgotICogICAgICAiaC9za2RydjJuZC5oIgotICoJCSJoL3NrcXVldWUuaCIKLSAqCQkiaC9za2dlaHd0LmgiCi0gKgkJImgvc2t0aW1lci5oIgotICoJCSJoL3NraTJjLmgiCi0gKgkJImgvc2tnZXBubWkuaCIKLSAqCQkiaC9za3ZwZC5oIgotICoJCSJoL3NrZ2Vody5oIgotICoJCSJoL3NrZ2Vpbml0LmgiCi0gKgkJImgvc2thZGRyLmgiCi0gKgkJImgvc2tnZXNpcnEuaCIKLSAqCQkiaC9za3JsbXQuaCIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZQkiaC9za3ZlcnNpb24uaCIKLQotI2luY2x1ZGUJPGxpbnV4L2luLmg+Ci0jaW5jbHVkZQk8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZQk8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlCTxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZQk8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlCTxsaW51eC9pcC5oPgotI2luY2x1ZGUJPGxpbnV4L21paS5oPgotI2luY2x1ZGUJPGxpbnV4L21tLmg+Ci0KLSNpbmNsdWRlCSJoL3NrZHJ2MXN0LmgiCi0jaW5jbHVkZQkiaC9za2RydjJuZC5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIERlZmluZXMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBmb3IgZGVidWdpbmcgb24geDg2IG9ubHkgKi8KLS8qICNkZWZpbmUgQlJFQUtQT0lOVCgpIGFzbSgiIGludCAkMyIpOyAqLwotCi0vKiB1c2UgdGhlIHRyYW5zbWl0IGh3IGNoZWNrc3VtIGRyaXZlciBmdW5jdGlvbmFsaXR5ICovCi0jZGVmaW5lIFVTRV9TS19UWF9DSEVDS1NVTQotCi0vKiB1c2UgdGhlIHJlY2VpdmUgaHcgY2hlY2tzdW0gZHJpdmVyIGZ1bmN0aW9uYWxpdHkgKi8KLSNkZWZpbmUgVVNFX1NLX1JYX0NIRUNLU1VNCi0KLS8qIHVzZSB0aGUgc2NhdHRlci1nYXRoZXIgZnVuY3Rpb25hbGl0eSB3aXRoIHNlbmRmaWxlKCkgKi8KLSNkZWZpbmUgU0tfWkVST0NPUFkKLQotLyogdXNlIG9mIGEgdHJhbnNtaXQgY29tcGxldGUgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVTRV9UWF9DT01QTEVURQotCi0vKgotICogdGhyZXNob2xkIGZvciBjb3B5aW5nIHNtYWxsIHJlY2VpdmUgZnJhbWVzCi0gKiBzZXQgdG8gMCB0byBhdm9pZCBjb3B5aW5nLCBzZXQgdG8gOTAwMSB0byBjb3B5IGFsbCBmcmFtZXMKLSAqLwotI2RlZmluZSBTS19DT1BZX1RIUkVTSE9MRAk1MAotCi0vKiBudW1iZXIgb2YgYWRhcHRlcnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB2aWEgY29tbWFuZCBsaW5lIHBhcmFtcyAqLwotI2RlZmluZSBTS19NQVhfQ0FSRF9QQVJBTQkxNgotCi0KLQotLyoKLSAqIHVzZSB0aG9zZSBkZWZpbmVzIGZvciBhIGNvbXBpbGUtaW4gdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGluc3RlYWQKLSAqIG9mIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCi0gKi8KLS8vICNkZWZpbmUgTElOS19TUEVFRF9BCXsiQXV0byIsIH0KLS8vICNkZWZpbmUgTElOS19TUEVFRF9CCXsiQXV0byIsIH0KLS8vICNkZWZpbmUgQVVUT19ORUdfQQl7IlNlbnNlIiwgfQotLy8gI2RlZmluZSBBVVRPX05FR19CCXsiU2Vuc2UiLCB9Ci0vLyAjZGVmaW5lIERVUF9DQVBfQQl7IkJvdGgiLCB9Ci0vLyAjZGVmaW5lIERVUF9DQVBfQgl7IkJvdGgiLCB9Ci0vLyAjZGVmaW5lIEZMT1dfQ1RSTF9BCXsiU3ltT3JSZW0iLCB9Ci0vLyAjZGVmaW5lIEZMT1dfQ1RSTF9CCXsiU3ltT3JSZW0iLCB9Ci0vLyAjZGVmaW5lIFJPTEVfQQl7IkF1dG8iLCB9Ci0vLyAjZGVmaW5lIFJPTEVfQgl7IkF1dG8iLCB9Ci0vLyAjZGVmaW5lIFBSRUZfUE9SVAl7IkEiLCB9Ci0vLyAjZGVmaW5lIENPTl9UWVBFIAl7IkF1dG8iLCB9Ci0vLyAjZGVmaW5lIFJMTVRfTU9ERQl7IkNoZWNrTGlua1N0YXRlIiwgfQotCi0jZGVmaW5lIERFVl9LRlJFRV9TS0Ioc2tiKSBkZXZfa2ZyZWVfc2tiKHNrYikKLSNkZWZpbmUgREVWX0tGUkVFX1NLQl9JUlEoc2tiKSBkZXZfa2ZyZWVfc2tiX2lycShza2IpCi0jZGVmaW5lIERFVl9LRlJFRV9TS0JfQU5ZKHNrYikgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKQotCi0KLS8qIFNldCBibGluayBtb2RlKi8KLSNkZWZpbmUgT0VNX0NPTkZJR19WQUxVRSAoCVNLX0FDVF9MRURfQkxJTksgfCBcCi0JCQkJU0tfRFVQX0xFRF9OT1JNQUwgfCBcCi0JCQkJU0tfTEVEX0xJTksxMDBfT04pCi0KLQotLyogSXNyIHJldHVybiB2YWx1ZSAqLwotI2RlZmluZSBTa0lzclJldFZhcglpcnFyZXR1cm5fdAotI2RlZmluZSBTa0lzclJldE5vbmUJSVJRX05PTkUKLSNkZWZpbmUgU2tJc3JSZXRIYW5kbGVkCUlSUV9IQU5ETEVECi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBMb2NhbCBGdW5jdGlvbiBQcm90b3R5cGVzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQJRnJlZVJlc291cmNlcyhzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2KTsKLXN0YXRpYyBpbnQJU2tHZUJvYXJkSW5pdChzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2LCBTS19BQyAqcEFDKTsKLXN0YXRpYyBTS19CT09MCUJvYXJkQWxsb2NNZW0oU0tfQUMgKnBBQyk7Ci1zdGF0aWMgdm9pZAlCb2FyZEZyZWVNZW0oU0tfQUMgKnBBQyk7Ci1zdGF0aWMgdm9pZAlCb2FyZEluaXRNZW0oU0tfQUMgKnBBQyk7Ci1zdGF0aWMgdm9pZAlTZXR1cFJpbmcoU0tfQUMqLCB2b2lkKiwgdWludHB0cl90LCBSWEQqKiwgUlhEKiosIFJYRCoqLCBpbnQqLCBTS19CT09MKTsKLXN0YXRpYyBTa0lzclJldFZhcglTa0dlSXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgU2tJc3JSZXRWYXIJU2tHZUlzck9uZVBvcnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBpbnQJU2tHZU9wZW4oc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldik7Ci1zdGF0aWMgaW50CVNrR2VDbG9zZShzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2KTsKLXN0YXRpYyBpbnQJU2tHZVhtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldik7Ci1zdGF0aWMgaW50CVNrR2VTZXRNYWNBZGRyKHN0cnVjdCBTS19ORVRfREVWSUNFICpkZXYsIHZvaWQgKnApOwotc3RhdGljIHZvaWQJU2tHZVNldFJ4TW9kZShzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QJbmV0X2RldmljZV9zdGF0cyAqU2tHZVN0YXRzKHN0cnVjdCBTS19ORVRfREVWSUNFICpkZXYpOwotc3RhdGljIGludAlTa0dlSW9jdGwoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgdm9pZAlHZXRDb25maWd1cmF0aW9uKFNLX0FDKik7Ci1zdGF0aWMgaW50CVhtaXRGcmFtZShTS19BQyosIFRYX1BPUlQqLCBzdHJ1Y3Qgc2tfYnVmZiopOwotc3RhdGljIHZvaWQJRnJlZVR4RGVzY3JpcHRvcnMoU0tfQUMqcEFDLCBUWF9QT1JUKik7Ci1zdGF0aWMgdm9pZAlGaWxsUnhSaW5nKFNLX0FDKiwgUlhfUE9SVCopOwotc3RhdGljIFNLX0JPT0wJRmlsbFJ4RGVzY3JpcHRvcihTS19BQyosIFJYX1BPUlQqKTsKLXN0YXRpYyB2b2lkCVJlY2VpdmVJcnEoU0tfQUMqLCBSWF9QT1JUKiwgU0tfQk9PTCk7Ci1zdGF0aWMgdm9pZAlDbGVhckFuZFN0YXJ0UngoU0tfQUMqLCBpbnQpOwotc3RhdGljIHZvaWQJQ2xlYXJUeElycShTS19BQyosIGludCwgaW50KTsKLXN0YXRpYyB2b2lkCUNsZWFyUnhSaW5nKFNLX0FDKiwgUlhfUE9SVCopOwotc3RhdGljIHZvaWQJQ2xlYXJUeFJpbmcoU0tfQUMqLCBUWF9QT1JUKik7Ci1zdGF0aWMgaW50CVNrR2VDaGFuZ2VNdHUoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldiwgaW50IG5ld19tdHUpOwotc3RhdGljIHZvaWQJUG9ydFJlSW5pdEJtdShTS19BQyosIGludCk7Ci1zdGF0aWMgaW50CVNrR2VJb2NNaWIoREVWX05FVCosIHVuc2lnbmVkIGludCwgaW50KTsKLXN0YXRpYyBpbnQJU2tHZUluaXRQQ0koU0tfQUMgKnBBQyk7Ci1zdGF0aWMgdm9pZAlTdGFydERydkNsZWFudXBUaW1lcihTS19BQyAqcEFDKTsKLXN0YXRpYyB2b2lkCVN0b3BEcnZDbGVhbnVwVGltZXIoU0tfQUMgKnBBQyk7Ci1zdGF0aWMgaW50CVhtaXRGcmFtZVNHKFNLX0FDKiwgVFhfUE9SVCosIHN0cnVjdCBza19idWZmKik7Ci0KLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLXN0YXRpYyBTS19VMzIgICBQYXJzZURldmljZU5ickZyb21TbG90TmFtZShjb25zdCBjaGFyICpTbG90TmFtZSk7Ci1zdGF0aWMgaW50ICAgICAgU2tEcnZJbml0QWRhcHRlcihTS19BQyAqcEFDLCBpbnQgZGV2TmJyKTsKLXN0YXRpYyBpbnQgICAgICBTa0RydkRlSW5pdEFkYXB0ZXIoU0tfQUMgKnBBQywgaW50IGRldk5icik7Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBFeHRlcm4gRnVuY3Rpb24gUHJvdG90eXBlcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1leHRlcm4gdm9pZCBTa0RpbUVuYWJsZU1vZGVyYXRpb25JZk5lZWRlZChTS19BQyAqcEFDKTsJCi1leHRlcm4gdm9pZCBTa0RpbURpc3BsYXlNb2RlcmF0aW9uU2V0dGluZ3MoU0tfQUMgKnBBQyk7Ci1leHRlcm4gdm9pZCBTa0RpbVN0YXJ0TW9kZXJhdGlvblRpbWVyKFNLX0FDICpwQUMpOwotZXh0ZXJuIHZvaWQgU2tEaW1Nb2RlcmF0ZShTS19BQyAqcEFDKTsKLWV4dGVybiB2b2lkIFNrR2VCbGlua1RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLSNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQJRHVtcE1zZyhzdHJ1Y3Qgc2tfYnVmZiosIGNoYXIqKTsKLXN0YXRpYyB2b2lkCUR1bXBEYXRhKGNoYXIqLCBpbnQpOwotc3RhdGljIHZvaWQJRHVtcExvbmcoY2hhciosIGludCk7Ci0jZW5kaWYKLQotLyogZ2xvYmFsIHZhcmlhYmxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgU0tfQk9PTCBEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfVFJVRTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgU2tHZUV0aHRvb2xPcHM7Ci0KLS8qIGxvY2FsIHZhcmlhYmxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHVpbnRwdHJfdCBUeFF1ZXVlQWRkcltTS19NQVhfTUFDU11bMl0gPSB7ezB4NjgwLCAweDYwMH0sezB4NzgwLCAweDcwMH19Owotc3RhdGljIHVpbnRwdHJfdCBSeFF1ZXVlQWRkcltTS19NQVhfTUFDU10gPSB7MHg0MDAsIDB4NDgwfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tQY2lXcml0ZUNmZ0RXb3JkIC0gd3JpdGUgYSAzMiBiaXQgdmFsdWUgdG8gcGNpIGNvbmZpZyBzcGFjZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIHdyaXRlcyBhIDMyIGJpdCB2YWx1ZSB0byB0aGUgcGNpIGNvbmZpZ3VyYXRpb24KLSAqCXNwYWNlLgotICoKLSAqIFJldHVybnM6Ci0gKgkwIC0gaW5kaWNhdGUgZXZlcnl0aGluZyB3b3JrZWQgb2suCi0gKgkhPSAwIC0gZXJyb3IgaW5kaWNhdGlvbgotICovCi1zdGF0aWMgaW5saW5lIGludCBTa1BjaVdyaXRlQ2ZnRFdvcmQoCi1TS19BQyAqcEFDLAkvKiBBZGFwdGVyIENvbnRyb2wgc3RydWN0dXJlIHBvaW50ZXIgKi8KLWludCBQY2lBZGRyLAkJLyogUENJIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLVNLX1UzMiBWYWwpCQkvKiBwb2ludGVyIHRvIHN0b3JlIHRoZSByZWFkIHZhbHVlICovCi17Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwQUMtPlBjaURldiwgUGNpQWRkciwgVmFsKTsKLQlyZXR1cm4oMCk7Ci19IC8qIFNrUGNpV3JpdGVDZmdEV29yZCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJU2tHZUluaXRQQ0kgLSBJbml0IHRoZSBQQ0kgcmVzb3VyY2VzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgdGhlIFBDSSByZXNvdXJjZXMgYW5kIElPCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBpbmRpY2F0ZSBldmVyeXRoaW5nIHdvcmtlZCBvay4KLSAqCSE9IDAgLSBlcnJvciBpbmRpY2F0aW9uCi0gKi8KLXN0YXRpYyBfX2RldmluaXQgaW50IFNrR2VJbml0UENJKFNLX0FDICpwQUMpCi17Ci0Jc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldiA9IHBBQy0+ZGV2WzBdOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcEFDLT5QY2lEZXY7Ci0JaW50IHJldHZhbDsKLQotCWRldi0+bWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKTsKLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCXJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgInNrOThsaW4iKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKLQotI2lmZGVmIFNLX0JJR19FTkRJQU4KLQkvKgotCSAqIE9uIGJpZyBlbmRpYW4gbWFjaGluZXMsIHdlIHVzZSB0aGUgYWRhcHRlcidzIGFpYmlsaXR5IG9mCi0JICogcmVhZGluZyB0aGUgZGVzY3JpcHRvcnMgYXMgYmlnIGVuZGlhbi4KLQkgKi8KLQl7Ci0JCVNLX1UzMgkJb3VyMjsKLQkJU2tQY2lSZWFkQ2ZnRFdvcmQocEFDLCBQQ0lfT1VSX1JFR18yLCAmb3VyMik7Ci0JCW91cjIgfD0gUENJX1JFVl9ERVNDOwotCQlTa1BjaVdyaXRlQ2ZnRFdvcmQocEFDLCBQQ0lfT1VSX1JFR18yLCBvdXIyKTsKLQl9Ci0jZW5kaWYKLQotCS8qCi0JICogUmVtYXAgdGhlIHJlZ3MgaW50byBrZXJuZWwgc3BhY2UuCi0JICovCi0JcEFDLT5Jb0Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoZGV2LT5tZW1fc3RhcnQsIDB4NDAwMCk7Ci0JaWYgKCFwQUMtPklvQmFzZSkgewotCQlyZXR2YWwgPSAtRUlPOwotCQlnb3RvIG91dF9yZWxlYXNlOwotCX0KLQotCXJldHVybiAwOwotCi0gb3V0X3JlbGVhc2U6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLSBvdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJRnJlZVJlc291cmNlcyAtIHJlbGVhc2UgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgYWRhcHRlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgSVJRLCB1bm1hcHMgdGhlIElPIGFuZAotICoJZnJlZXMgdGhlIGRlc3JpcHRvciByaW5nLgotICoKLSAqIFJldHVybnM6IE4vQQotICoJCi0gKi8KLXN0YXRpYyB2b2lkIEZyZWVSZXNvdXJjZXMoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldikKLXsKLVNLX1UzMiBBbGxvY0ZsYWc7Ci1ERVZfTkVUCQkqcE5ldDsKLVNLX0FDCQkqcEFDOwotCi0JcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JcEFDID0gcE5ldC0+cEFDOwotCUFsbG9jRmxhZyA9IHBBQy0+QWxsb2NGbGFnOwotCWlmIChwQUMtPlBjaURldikgewotCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBBQy0+UGNpRGV2KTsKLQl9Ci0JaWYgKEFsbG9jRmxhZyAmIFNLX0FMTE9DX0lSUSkgewotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQl9Ci0JaWYgKHBBQy0+SW9CYXNlKSB7Ci0JCWlvdW5tYXAocEFDLT5Jb0Jhc2UpOwotCX0KLQlpZiAocEFDLT5wRGVzY3JNZW0pIHsKLQkJQm9hcmRGcmVlTWVtKHBBQyk7Ci0JfQotCQotfSAvKiBGcmVlUmVzb3VyY2VzICovCi0KLU1PRFVMRV9BVVRIT1IoIk1pcmtvIExpbmRuZXIgPG1saW5kbmVyQHN5c2tvbm5lY3QuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlN5c0tvbm5lY3QgU0stTkVUIEdpZ2FiaXQgRXRoZXJuZXQgU0stOTh4eCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2lmZGVmIExJTktfU1BFRURfQQotc3RhdGljIGNoYXIgKlNwZWVkX0FbU0tfTUFYX0NBUkRfUEFSQU1dID0gTElOS19TUEVFRDsKLSNlbHNlCi1zdGF0aWMgY2hhciAqU3BlZWRfQVtTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIExJTktfU1BFRURfQgotc3RhdGljIGNoYXIgKlNwZWVkX0JbU0tfTUFYX0NBUkRfUEFSQU1dID0gTElOS19TUEVFRDsKLSNlbHNlCi1zdGF0aWMgY2hhciAqU3BlZWRfQltTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIEFVVE9fTkVHX0EKLXN0YXRpYyBjaGFyICpBdXRvTmVnX0FbU0tfTUFYX0NBUkRfUEFSQU1dID0gQVVUT19ORUdfQTsKLSNlbHNlCi1zdGF0aWMgY2hhciAqQXV0b05lZ19BW1NLX01BWF9DQVJEX1BBUkFNXSA9IHsiIiwgfTsKLSNlbmRpZgotCi0jaWZkZWYgRFVQX0NBUF9BCi1zdGF0aWMgY2hhciAqRHVwQ2FwX0FbU0tfTUFYX0NBUkRfUEFSQU1dID0gRFVQX0NBUF9BOwotI2Vsc2UKLXN0YXRpYyBjaGFyICpEdXBDYXBfQVtTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIEZMT1dfQ1RSTF9BCi1zdGF0aWMgY2hhciAqRmxvd0N0cmxfQVtTS19NQVhfQ0FSRF9QQVJBTV0gPSBGTE9XX0NUUkxfQTsKLSNlbHNlCi1zdGF0aWMgY2hhciAqRmxvd0N0cmxfQVtTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIFJPTEVfQQotc3RhdGljIGNoYXIgKlJvbGVfQVtTS19NQVhfQ0FSRF9QQVJBTV0gPSBST0xFX0E7Ci0jZWxzZQotc3RhdGljIGNoYXIgKlJvbGVfQVtTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIEFVVE9fTkVHX0IKLXN0YXRpYyBjaGFyICpBdXRvTmVnX0JbU0tfTUFYX0NBUkRfUEFSQU1dID0gQVVUT19ORUdfQjsKLSNlbHNlCi1zdGF0aWMgY2hhciAqQXV0b05lZ19CW1NLX01BWF9DQVJEX1BBUkFNXSA9IHsiIiwgfTsKLSNlbmRpZgotCi0jaWZkZWYgRFVQX0NBUF9CCi1zdGF0aWMgY2hhciAqRHVwQ2FwX0JbU0tfTUFYX0NBUkRfUEFSQU1dID0gRFVQX0NBUF9COwotI2Vsc2UKLXN0YXRpYyBjaGFyICpEdXBDYXBfQltTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIEZMT1dfQ1RSTF9CCi1zdGF0aWMgY2hhciAqRmxvd0N0cmxfQltTS19NQVhfQ0FSRF9QQVJBTV0gPSBGTE9XX0NUUkxfQjsKLSNlbHNlCi1zdGF0aWMgY2hhciAqRmxvd0N0cmxfQltTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIFJPTEVfQgotc3RhdGljIGNoYXIgKlJvbGVfQltTS19NQVhfQ0FSRF9QQVJBTV0gPSBST0xFX0I7Ci0jZWxzZQotc3RhdGljIGNoYXIgKlJvbGVfQltTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIENPTl9UWVBFCi1zdGF0aWMgY2hhciAqQ29uVHlwZVtTS19NQVhfQ0FSRF9QQVJBTV0gPSBDT05fVFlQRTsKLSNlbHNlCi1zdGF0aWMgY2hhciAqQ29uVHlwZVtTS19NQVhfQ0FSRF9QQVJBTV0gPSB7IiIsIH07Ci0jZW5kaWYKLQotI2lmZGVmIFBSRUZfUE9SVAotc3RhdGljIGNoYXIgKlByZWZQb3J0W1NLX01BWF9DQVJEX1BBUkFNXSA9IFBSRUZfUE9SVDsKLSNlbHNlCi1zdGF0aWMgY2hhciAqUHJlZlBvcnRbU0tfTUFYX0NBUkRfUEFSQU1dID0geyIiLCB9OwotI2VuZGlmCi0KLSNpZmRlZiBSTE1UX01PREUKLXN0YXRpYyBjaGFyICpSbG10TW9kZVtTS19NQVhfQ0FSRF9QQVJBTV0gPSBSTE1UX01PREU7Ci0jZWxzZQotc3RhdGljIGNoYXIgKlJsbXRNb2RlW1NLX01BWF9DQVJEX1BBUkFNXSA9IHsiIiwgfTsKLSNlbmRpZgotCi1zdGF0aWMgaW50ICAgSW50c1BlclNlY1tTS19NQVhfQ0FSRF9QQVJBTV07Ci1zdGF0aWMgY2hhciAqTW9kZXJhdGlvbltTS19NQVhfQ0FSRF9QQVJBTV07Ci1zdGF0aWMgY2hhciAqTW9kZXJhdGlvbk1hc2tbU0tfTUFYX0NBUkRfUEFSQU1dOwotc3RhdGljIGNoYXIgKkF1dG9TaXppbmdbU0tfTUFYX0NBUkRfUEFSQU1dOwotc3RhdGljIGNoYXIgKlN0YXRzW1NLX01BWF9DQVJEX1BBUkFNXTsKLQotbW9kdWxlX3BhcmFtX2FycmF5KFNwZWVkX0EsIGNoYXJwLCBOVUxMLCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheShTcGVlZF9CLCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoQXV0b05lZ19BLCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoQXV0b05lZ19CLCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoRHVwQ2FwX0EsIGNoYXJwLCBOVUxMLCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheShEdXBDYXBfQiwgY2hhcnAsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KEZsb3dDdHJsX0EsIGNoYXJwLCBOVUxMLCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheShGbG93Q3RybF9CLCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoUm9sZV9BLCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoUm9sZV9CLCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoQ29uVHlwZSwgY2hhcnAsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KFByZWZQb3J0LCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoUmxtdE1vZGUsIGNoYXJwLCBOVUxMLCAwKTsKLS8qIHVzZWQgZm9yIGludGVycnVwdCBtb2RlcmF0aW9uICovCi1tb2R1bGVfcGFyYW1fYXJyYXkoSW50c1BlclNlYywgaW50LCBOVUxMLCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheShNb2RlcmF0aW9uLCBjaGFycCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoU3RhdHMsIGNoYXJwLCBOVUxMLCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheShNb2RlcmF0aW9uTWFzaywgY2hhcnAsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KEF1dG9TaXppbmcsIGNoYXJwLCBOVUxMLCAwKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCVNrR2VCb2FyZEluaXQgLSBkbyBsZXZlbCAwIGFuZCAxIGluaXRpYWxpemF0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBib2FyZCBoYXJkd2FyZSBmb3IgcnVubmluZy4gVGhlIGRlc3JpcHRvcgotICoJcmluZyBpcyBzZXQgdXAsIHRoZSBJUlEgaXMgYWxsb2NhdGVkIGFuZCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncwotICoJYXJlIGV4YW1pbmVkLgotICoKLSAqIFJldHVybnM6Ci0gKgkwLCBpZiBldmVyeXRoaW5nIGlzIG9rCi0gKgkhPTAsIG9uIGVycm9yCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IFNrR2VCb2FyZEluaXQoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldiwgU0tfQUMgKnBBQykKLXsKLXNob3J0CWk7Ci11bnNpZ25lZCBsb25nIEZsYWdzOwotY2hhcgkqRGVzY3JTdHJpbmcgPSAic2s5OGxpbjogRHJpdmVyIGZvciBMaW51eCI7IC8qIHRoaXMgaXMgZ2l2ZW4gdG8gUE5NSSAqLwotY2hhcgkqVmVyU3RyCT0gVkVSX1NUUklORzsKLWludAlSZXQ7CQkJLyogcmV0dXJuIGNvZGUgb2YgcmVxdWVzdF9pcnEgKi8KLVNLX0JPT0wJRHVhbE5ldDsKLQotCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9FTlRSWSwKLQkJKCJJb0Jhc2U6ICUwOGxYXG4iLCAodW5zaWduZWQgbG9uZylwQUMtPklvQmFzZSkpOwotCWZvciAoaT0wOyBpPFNLX01BWF9NQUNTOyBpKyspIHsKLQkJcEFDLT5UeFBvcnRbaV1bMF0uSHdBZGRyID0gcEFDLT5Jb0Jhc2UgKyBUeFF1ZXVlQWRkcltpXVswXTsKLQkJcEFDLT5UeFBvcnRbaV1bMF0uUG9ydEluZGV4ID0gaTsKLQkJcEFDLT5SeFBvcnRbaV0uSHdBZGRyID0gcEFDLT5Jb0Jhc2UgKyBSeFF1ZXVlQWRkcltpXTsKLQkJcEFDLT5SeFBvcnRbaV0uUG9ydEluZGV4ID0gaTsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBtdXRleGVzICovCi0JZm9yIChpPTA7IGk8U0tfTUFYX01BQ1M7IGkrKykgewotCQlzcGluX2xvY2tfaW5pdCgmcEFDLT5UeFBvcnRbaV1bMF0uVHhEZXNSaW5nTG9jayk7Ci0JCXNwaW5fbG9ja19pbml0KCZwQUMtPlJ4UG9ydFtpXS5SeERlc1JpbmdMb2NrKTsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJnBBQy0+U2xvd1BhdGhMb2NrKTsKLQotCS8qIHNldHVwIHBoeV9pZCBibGluayB0aW1lciAqLwotCXBBQy0+QmxpbmtUaW1lci5mdW5jdGlvbiA9IFNrR2VCbGlua1RpbWVyOwotCXBBQy0+QmxpbmtUaW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKLQlpbml0X3RpbWVyKCZwQUMtPkJsaW5rVGltZXIpOwotCi0JLyogbGV2ZWwgMCBpbml0IGNvbW1vbiBtb2R1bGVzIGhlcmUgKi8KLQkKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQkvKiBEb2VzIGEgUkVTRVQgb24gYm9hcmQgLi4uKi8KLQlpZiAoU2tHZUluaXQocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9EQVRBKSAhPSAwKSB7Ci0JCXByaW50aygiSFdJbml0ICgwKSBmYWlsZWQuXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCVNrSTJjSW5pdCggIHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfREFUQSk7Ci0JU2tFdmVudEluaXQocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9EQVRBKTsKLQlTa1BubWlJbml0KCBwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0RBVEEpOwotCVNrQWRkckluaXQoIHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfREFUQSk7Ci0JU2tSbG10SW5pdCggcEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9EQVRBKTsKLQlTa1RpbWVySW5pdChwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0RBVEEpOwotCi0JcEFDLT5Cb2FyZExldmVsID0gU0tfSU5JVF9EQVRBOwotCXBBQy0+UnhCdWZTaXplICA9IEVUSF9CVUZfU0laRTsKLQotCVNLX1BOTUlfU0VUX0RSSVZFUl9ERVNDUihwQUMsIERlc2NyU3RyaW5nKTsKLQlTS19QTk1JX1NFVF9EUklWRVJfVkVSKHBBQywgVmVyU3RyKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7Ci0KLQkvKiBsZXZlbCAxIGluaXQgY29tbW9uIG1vZHVsZXMgaGVyZSAoSFcgaW5pdCkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQlpZiAoU2tHZUluaXQocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTykgIT0gMCkgewotCQlwcmludGsoInNrOThsaW46IEhXSW5pdCAoMSkgZmFpbGVkLlxuIik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlTa0kyY0luaXQoICBwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQlTa0V2ZW50SW5pdChwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQlTa1BubWlJbml0KCBwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQlTa0FkZHJJbml0KCBwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQlTa1JsbXRJbml0KCBwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQlTa1RpbWVySW5pdChwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQotCS8qIFNldCBjaGlwc2V0IHR5cGUgc3VwcG9ydCAqLwotCXBBQy0+Q2hpcHNldFR5cGUgPSAwOwotCWlmICgocEFDLT5HSW5pLkdJQ2hpcElkID09IENISVBfSURfWVVLT04pIHx8Ci0JCShwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9ZVUtPTl9MSVRFKSkgewotCQlwQUMtPkNoaXBzZXRUeXBlID0gMTsKLQl9Ci0KLQlHZXRDb25maWd1cmF0aW9uKHBBQyk7Ci0JaWYgKHBBQy0+UmxtdE5ldHMgPT0gMikgewotCQlwQUMtPkdJbmkuR0lQb3J0VXNhZ2UgPSBTS19NVUxfTElOSzsKLQl9Ci0KLQlwQUMtPkJvYXJkTGV2ZWwgPSBTS19JTklUX0lPOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7Ci0KLQlpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDIpIHsKLQkJIFJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBTa0dlSXNyLCBJUlFGX1NIQVJFRCwgInNrOThsaW4iLCBkZXYpOwotCX0gZWxzZSBpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDEpIHsKLQkJUmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIFNrR2VJc3JPbmVQb3J0LCBJUlFGX1NIQVJFRCwKLQkJCSJzazk4bGluIiwgZGV2KTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzazk4bGluOiBJbGxlZ2FsIG51bWJlciBvZiBwb3J0czogJWRcbiIsCi0JCSAgICAgICBwQUMtPkdJbmkuR0lNYWNzRm91bmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZiAoUmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInNrOThsaW46IFJlcXVlc3RlZCBJUlEgJWQgaXMgYnVzeS5cbiIsCi0JCSAgICAgICBkZXYtPmlycSk7Ci0JCXJldHVybiBSZXQ7Ci0JfQotCXBBQy0+QWxsb2NGbGFnIHw9IFNLX0FMTE9DX0lSUTsKLQotCS8qIEFsbG9jIG1lbW9yeSBmb3IgdGhpcyBib2FyZCAoTWVtIGZvciBSeEQvVHhEKSA6ICovCi0JaWYoIUJvYXJkQWxsb2NNZW0ocEFDKSkgewotCQlwcmludGsoIk5vIG1lbW9yeSBmb3IgZGVzY3JpcHRvciByaW5ncy5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlCb2FyZEluaXRNZW0ocEFDKTsKLQkvKiB0c2NoaWxsaW5nOiBOZXcgY29tbW9uIGZ1bmN0aW9uIHdpdGggbWluaW11bSBzaXplIGNoZWNrLiAqLwotCUR1YWxOZXQgPSBTS19GQUxTRTsKLQlpZiAocEFDLT5SbG10TmV0cyA9PSAyKSB7Ci0JCUR1YWxOZXQgPSBTS19UUlVFOwotCX0KLQkKLQlpZiAoU2tHZUluaXRBc3NpZ25SYW1Ub1F1ZXVlcygKLQkJcEFDLAotCQlwQUMtPkFjdGl2ZVBvcnQsCi0JCUR1YWxOZXQpKSB7Ci0JCUJvYXJkRnJlZU1lbShwQUMpOwotCQlwcmludGsoInNrOThsaW46IFNrR2VJbml0QXNzaWduUmFtVG9RdWV1ZXMgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAoMCk7Ci19IC8qIFNrR2VCb2FyZEluaXQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJQm9hcmRBbGxvY01lbSAtIGFsbG9jYXRlIHRoZSBtZW1vcnkgZm9yIHRoZSBkZXNjcmlwdG9yIHJpbmdzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgbWVtb3J5IGZvciBhbGwgZGVzY3JpcHRvciByaW5ncy4KLSAqCUVhY2ggcmluZyBpcyBhbGlnbmVkIGZvciB0aGUgZGVzcmlwdG9yIGFsaWdubWVudCBhbmQgbm8gcmluZwotICoJaGFzIGEgNCBHQnl0ZSBib3VuZGFyeSBpbiBpdCAoYmVjYXVzZSB0aGUgdXBwZXIgMzIgYml0IG11c3QKLSAqCWJlIGNvbnN0YW50IGZvciBhbGwgZGVzY3JpcHRpb3JzIGluIG9uZSByaW5ncykuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1RSVUUsIGlmIGFsbCBtZW1vcnkgY291bGQgYmUgYWxsb2NhdGVkCi0gKglTS19GQUxTRSwgaWYgbm90Ci0gKi8KLXN0YXRpYyBfX2RldmluaXQgU0tfQk9PTCBCb2FyZEFsbG9jTWVtKFNLX0FDCSpwQUMpCi17Ci1jYWRkcl90CQlwRGVzY3JNZW07CS8qIHBvaW50ZXIgdG8gZGVzY3JpcHRvciBtZW1vcnkgYXJlYSAqLwotc2l6ZV90CQlBbGxvY0xlbmd0aDsJLyogbGVuZ3RoIG9mIGNvbXBsZXRlIGRlc2NyaXB0b3IgYXJlYSAqLwotaW50CQlpOwkJLyogbG9vcCBjb3VudGVyICovCi11bnNpZ25lZCBsb25nCUJ1c0FkZHI7Ci0KLQkKLQkvKiByaW5ncyBwbHVzIG9uZSBmb3IgYWxpZ25tZW50IChkbyBub3QgY3Jvc3MgNCBHQiBib3VuZGFyeSkgKi8KLQkvKiBSWF9SSU5HX1NJWkUgaXMgYXNzdW1lZCBiaWdnZXIgdGhhbiBUWF9SSU5HX1NJWkUgKi8KLSNpZiAoQklUU19QRVJfTE9ORyA9PSAzMikKLQlBbGxvY0xlbmd0aCA9IChSWF9SSU5HX1NJWkUgKyBUWF9SSU5HX1NJWkUpICogcEFDLT5HSW5pLkdJTWFjc0ZvdW5kICsgODsKLSNlbHNlCi0JQWxsb2NMZW5ndGggPSAoUlhfUklOR19TSVpFICsgVFhfUklOR19TSVpFKSAqIHBBQy0+R0luaS5HSU1hY3NGb3VuZAotCQkrIFJYX1JJTkdfU0laRSArIDg7Ci0jZW5kaWYKLQotCXBEZXNjck1lbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBBQy0+UGNpRGV2LCBBbGxvY0xlbmd0aCwKLQkJCQkJICZwQUMtPnBEZXNjck1lbURNQSk7Ci0KLQlpZiAocERlc2NyTWVtID09IE5VTEwpIHsKLQkJcmV0dXJuIChTS19GQUxTRSk7Ci0JfQotCXBBQy0+cERlc2NyTWVtID0gcERlc2NyTWVtOwotCUJ1c0FkZHIgPSAodW5zaWduZWQgbG9uZykgcEFDLT5wRGVzY3JNZW1ETUE7Ci0KLQkvKiBEZXNjcmlwdG9ycyBuZWVkIDggYnl0ZSBhbGlnbm1lbnQsIGFuZCB0aGlzIGlzIGVuc3VyZWQKLQkgKiBieSBwY2lfYWxsb2NfY29uc2lzdGVudC4KLQkgKi8KLQlmb3IgKGk9MDsgaTxwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfVFhfUFJPR1JFU1MsCi0JCQkoIlRYJWQvQTogcERlc2NyTWVtOiAlbFgsICAgUGh5c0Rlc2NyTWVtOiAlbFhcbiIsCi0JCQlpLCAodW5zaWduZWQgbG9uZykgcERlc2NyTWVtLAotCQkJQnVzQWRkcikpOwotCQlwQUMtPlR4UG9ydFtpXVswXS5wVHhEZXNjclJpbmcgPSBwRGVzY3JNZW07Ci0JCXBBQy0+VHhQb3J0W2ldWzBdLlZUeERlc2NyUmluZyA9IEJ1c0FkZHI7Ci0JCXBEZXNjck1lbSArPSBUWF9SSU5HX1NJWkU7Ci0JCUJ1c0FkZHIgKz0gVFhfUklOR19TSVpFOwotCQotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfVFhfUFJPR1JFU1MsCi0JCQkoIlJYJWQ6IHBEZXNjck1lbTogJWxYLCAgIFBoeXNEZXNjck1lbTogJWxYXG4iLAotCQkJaSwgKHVuc2lnbmVkIGxvbmcpIHBEZXNjck1lbSwKLQkJCSh1bnNpZ25lZCBsb25nKUJ1c0FkZHIpKTsKLQkJcEFDLT5SeFBvcnRbaV0ucFJ4RGVzY3JSaW5nID0gcERlc2NyTWVtOwotCQlwQUMtPlJ4UG9ydFtpXS5WUnhEZXNjclJpbmcgPSBCdXNBZGRyOwotCQlwRGVzY3JNZW0gKz0gUlhfUklOR19TSVpFOwotCQlCdXNBZGRyICs9IFJYX1JJTkdfU0laRTsKLQl9IC8qIGZvciAqLwotCQotCXJldHVybiAoU0tfVFJVRSk7Ci19IC8qIEJvYXJkQWxsb2NNZW0gKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCUJvYXJkRnJlZU1lbSAtIHJldmVyc2Ugb2YgQm9hcmRBbGxvY01lbQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBpbiBCb2FyZEFsbG9jTWVtOiBhZGFwdGVyIGNvbnRleHQsCi0gKglkZXNjcmlwdG9yIHJpbmdzLCBsb2Nrcy4KLSAqCi0gKiBSZXR1cm5zOglOL0EKLSAqLwotc3RhdGljIHZvaWQgQm9hcmRGcmVlTWVtKAotU0tfQUMJCSpwQUMpCi17Ci1zaXplX3QJCUFsbG9jTGVuZ3RoOwkvKiBsZW5ndGggb2YgY29tcGxldGUgZGVzY3JpcHRvciBhcmVhICovCi0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiQm9hcmRGcmVlTWVtXG4iKSk7Ci0jaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpCi0JQWxsb2NMZW5ndGggPSAoUlhfUklOR19TSVpFICsgVFhfUklOR19TSVpFKSAqIHBBQy0+R0luaS5HSU1hY3NGb3VuZCArIDg7Ci0jZWxzZQotCUFsbG9jTGVuZ3RoID0gKFJYX1JJTkdfU0laRSArIFRYX1JJTkdfU0laRSkgKiBwQUMtPkdJbmkuR0lNYWNzRm91bmQKLQkJKyBSWF9SSU5HX1NJWkUgKyA4OwotI2VuZGlmCi0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBBQy0+UGNpRGV2LCBBbGxvY0xlbmd0aCwKLQkJCSAgICBwQUMtPnBEZXNjck1lbSwgcEFDLT5wRGVzY3JNZW1ETUEpOwotCXBBQy0+cERlc2NyTWVtID0gTlVMTDsKLX0gLyogQm9hcmRGcmVlTWVtICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCUJvYXJkSW5pdE1lbSAtIGluaXRpYXRlIHRoZSBkZXNjcmlwdG9yIHJpbmdzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlc2NyaXB0b3IgcmluZ3MgdXAgaW4gbWVtb3J5LgotICoJVGhlIGFkYXB0ZXIgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZGVzY3JpcHRvciBzdGFydCBhZGRyZXNzZXMuCi0gKgotICogUmV0dXJuczoJTi9BCi0gKi8KLXN0YXRpYyBfX2RldmluaXQgdm9pZCBCb2FyZEluaXRNZW0oU0tfQUMgKnBBQykKLXsKLWludAlpOwkJLyogbG9vcCBjb3VudGVyICovCi1pbnQJUnhEZXNjclNpemU7CS8qIHRoZSBzaXplIG9mIGEgcnggZGVzY3JpcHRvciByb3VuZGVkIHVwIHRvIGFsaWdubWVudCovCi1pbnQJVHhEZXNjclNpemU7CS8qIHRoZSBzaXplIG9mIGEgdHggZGVzY3JpcHRvciByb3VuZGVkIHVwIHRvIGFsaWdubWVudCovCi0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiQm9hcmRJbml0TWVtXG4iKSk7Ci0KLQlSeERlc2NyU2l6ZSA9ICgoKHNpemVvZihSWEQpIC0gMSkgLyBERVNDUl9BTElHTikgKyAxKSAqIERFU0NSX0FMSUdOOwotCXBBQy0+UnhEZXNjclBlclJpbmcgPSBSWF9SSU5HX1NJWkUgLyBSeERlc2NyU2l6ZTsKLQlUeERlc2NyU2l6ZSA9ICgoKHNpemVvZihUWEQpIC0gMSkgLyBERVNDUl9BTElHTikgKyAxKSAqIERFU0NSX0FMSUdOOwotCXBBQy0+VHhEZXNjclBlclJpbmcgPSBUWF9SSU5HX1NJWkUgLyBSeERlc2NyU2l6ZTsKLQkKLQlmb3IgKGk9MDsgaTxwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlTZXR1cFJpbmcoCi0JCQlwQUMsCi0JCQlwQUMtPlR4UG9ydFtpXVswXS5wVHhEZXNjclJpbmcsCi0JCQlwQUMtPlR4UG9ydFtpXVswXS5WVHhEZXNjclJpbmcsCi0JCQkoUlhEKiopJnBBQy0+VHhQb3J0W2ldWzBdLnBUeGRSaW5nSGVhZCwKLQkJCShSWEQqKikmcEFDLT5UeFBvcnRbaV1bMF0ucFR4ZFJpbmdUYWlsLAotCQkJKFJYRCoqKSZwQUMtPlR4UG9ydFtpXVswXS5wVHhkUmluZ1ByZXYsCi0JCQkmcEFDLT5UeFBvcnRbaV1bMF0uVHhkUmluZ0ZyZWUsCi0JCQlTS19UUlVFKTsKLQkJU2V0dXBSaW5nKAotCQkJcEFDLAotCQkJcEFDLT5SeFBvcnRbaV0ucFJ4RGVzY3JSaW5nLAotCQkJcEFDLT5SeFBvcnRbaV0uVlJ4RGVzY3JSaW5nLAotCQkJJnBBQy0+UnhQb3J0W2ldLnBSeGRSaW5nSGVhZCwKLQkJCSZwQUMtPlJ4UG9ydFtpXS5wUnhkUmluZ1RhaWwsCi0JCQkmcEFDLT5SeFBvcnRbaV0ucFJ4ZFJpbmdQcmV2LAotCQkJJnBBQy0+UnhQb3J0W2ldLlJ4ZFJpbmdGcmVlLAotCQkJU0tfRkFMU0UpOwotCX0KLX0gLyogQm9hcmRJbml0TWVtICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCVNldHVwUmluZyAtIGNyZWF0ZSBvbmUgZGVzY3JpcHRvciByaW5nCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgb25lIGRlc2NyaXB0b3IgcmluZyBpbiB0aGUgZ2l2ZW4gbWVtb3J5IGFyZWEuCi0gKglUaGUgaGVhZCwgdGFpbCBhbmQgbnVtYmVyIG9mIGZyZWUgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgYXJlIHNldC4KLSAqCi0gKiBSZXR1cm5zOgotICoJbm9uZQotICovCi1zdGF0aWMgdm9pZCBTZXR1cFJpbmcoCi1TS19BQwkJKnBBQywKLXZvaWQJCSpwTWVtQXJlYSwJLyogYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgYXJlYSBmb3IgdGhlIHJpbmcgKi8KLXVpbnRwdHJfdAlWTWVtQXJlYSwJLyogdGhlIHZpcnR1YWwgYnVzIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBhcmVhICovCi1SWEQJCSoqcHBSaW5nSGVhZCwJLyogYWRkcmVzcyB3aGVyZSB0aGUgaGVhZCBzaG91bGQgYmUgd3JpdHRlbiAqLwotUlhECQkqKnBwUmluZ1RhaWwsCS8qIGFkZHJlc3Mgd2hlcmUgdGhlIHRhaWwgc2hvdWxkIGJlIHdyaXR0ZW4gKi8KLVJYRAkJKipwcFJpbmdQcmV2LAkvKiBhZGRyZXNzIHdoZXJlIHRoZSB0YWlsIHNob3VsZCBiZSB3cml0dGVuICovCi1pbnQJCSpwUmluZ0ZyZWUsCS8qIGFkZHJlc3Mgd2hlcmUgdGhlICMgb2YgZnJlZSBkZXNjci4gZ29lcyAqLwotU0tfQk9PTAkJSXNUeCkJCS8qIGZsYWc6IGlzIHRoaXMgYSB0eCByaW5nICovCi17Ci1pbnQJaTsJCS8qIGxvb3AgY291bnRlciAqLwotaW50CURlc2NyU2l6ZTsJLyogdGhlIHNpemUgb2YgYSBkZXNjcmlwdG9yIHJvdW5kZWQgdXAgdG8gYWxpZ25tZW50Ki8KLWludAlEZXNjck51bTsJLyogbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHBlciByaW5nICovCi1SWEQJKnBEZXNjcjsJLyogcG9pbnRlciB0byBhIGRlc2NyaXB0b3IgKHJlY2VpdmUgb3IgdHJhbnNtaXQpICovCi1SWEQJKnBOZXh0RGVzY3I7CS8qIHBvaW50ZXIgdG8gdGhlIG5leHQgZGVzY3JpcHRvciAqLwotUlhECSpwUHJldkRlc2NyOwkvKiBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBkZXNjcmlwdG9yICovCi11aW50cHRyX3QgVk5leHREZXNjcjsJLyogdGhlIHZpcnR1YWwgYnVzIGFkZHJlc3Mgb2YgdGhlIG5leHQgZGVzY3JpcHRvciAqLwotCi0JaWYgKElzVHggPT0gU0tfVFJVRSkgewotCQlEZXNjclNpemUgPSAoKChzaXplb2YoVFhEKSAtIDEpIC8gREVTQ1JfQUxJR04pICsgMSkgKgotCQkJREVTQ1JfQUxJR047Ci0JCURlc2NyTnVtID0gVFhfUklOR19TSVpFIC8gRGVzY3JTaXplOwotCX0gZWxzZSB7Ci0JCURlc2NyU2l6ZSA9ICgoKHNpemVvZihSWEQpIC0gMSkgLyBERVNDUl9BTElHTikgKyAxKSAqCi0JCQlERVNDUl9BTElHTjsKLQkJRGVzY3JOdW0gPSBSWF9SSU5HX1NJWkUgLyBEZXNjclNpemU7Ci0JfQotCQotCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9UWF9QUk9HUkVTUywKLQkJKCJEZXNjcmlwdG9yIHNpemU6ICVkICAgRGVzY3JpcHRvciBOdW1iZXI6ICVkXG4iLAotCQlEZXNjclNpemUsRGVzY3JOdW0pKTsKLQkKLQlwRGVzY3IgPSAoUlhEKikgcE1lbUFyZWE7Ci0JcFByZXZEZXNjciA9IE5VTEw7Ci0JcE5leHREZXNjciA9IChSWEQqKSAoKChjaGFyKilwRGVzY3IpICsgRGVzY3JTaXplKTsKLQlWTmV4dERlc2NyID0gVk1lbUFyZWEgKyBEZXNjclNpemU7Ci0JZm9yKGk9MDsgaTxEZXNjck51bTsgaSsrKSB7Ci0JCS8qIHNldCB0aGUgcG9pbnRlcnMgcmlnaHQgKi8KLQkJcERlc2NyLT5WTmV4dFJ4ZCA9IFZOZXh0RGVzY3IgJiAweGZmZmZmZmZmVUxMOwotCQlwRGVzY3ItPnBOZXh0UnhkID0gcE5leHREZXNjcjsKLQkJaWYgKCFJc1R4KSBwRGVzY3ItPlRjcFN1bVN0YXJ0cyA9IEVUSF9ITEVOIDw8IDE2IHwgRVRIX0hMRU47Ci0KLQkJLyogYWR2YW5jZSBvbmUgc3RlcCAqLwotCQlwUHJldkRlc2NyID0gcERlc2NyOwotCQlwRGVzY3IgPSBwTmV4dERlc2NyOwotCQlwTmV4dERlc2NyID0gKFJYRCopICgoKGNoYXIqKXBEZXNjcikgKyBEZXNjclNpemUpOwotCQlWTmV4dERlc2NyICs9IERlc2NyU2l6ZTsKLQl9Ci0JcFByZXZEZXNjci0+cE5leHRSeGQgPSAoUlhEKikgcE1lbUFyZWE7Ci0JcFByZXZEZXNjci0+Vk5leHRSeGQgPSBWTWVtQXJlYTsKLQlwRGVzY3IgPSAoUlhEKikgcE1lbUFyZWE7Ci0JKnBwUmluZ0hlYWQgPSAoUlhEKikgcE1lbUFyZWE7Ci0JKnBwUmluZ1RhaWwgPSAqcHBSaW5nSGVhZDsKLQkqcHBSaW5nUHJldiA9IHBQcmV2RGVzY3I7Ci0JKnBSaW5nRnJlZSA9IERlc2NyTnVtOwotfSAvKiBTZXR1cFJpbmcgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJUG9ydFJlSW5pdEJtdSAtIHJlLWluaXRpYXRlIHRoZSBkZXNjcmlwdG9yIHJpbmdzIGZvciBvbmUgcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiByZWluaXRpYWxpemVzIHRoZSBkZXNjcmlwdG9yIHJpbmdzIG9mIG9uZSBwb3J0Ci0gKglpbiBtZW1vcnkuIFRoZSBwb3J0IG11c3QgYmUgc3RvcHBlZCBiZWZvcmUuCi0gKglUaGUgSFcgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZGVzY3JpcHRvciBzdGFydCBhZGRyZXNzZXMuCi0gKgotICogUmV0dXJuczoKLSAqCW5vbmUKLSAqLwotc3RhdGljIHZvaWQgUG9ydFJlSW5pdEJtdSgKLVNLX0FDCSpwQUMsCQkvKiBwb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotaW50CVBvcnRJbmRleCkJLyogaW5kZXggb2YgdGhlIHBvcnQgZm9yIHdoaWNoIHRvIHJlLWluaXQgKi8KLXsKLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiUG9ydFJlSW5pdEJtdSAiKSk7Ci0KLQkvKiBzZXQgYWRkcmVzcyBvZiBmaXJzdCBkZXNjcmlwdG9yIG9mIHJpbmcgaW4gQk1VICovCi0JU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIFR4UXVldWVBZGRyW1BvcnRJbmRleF1bVFhfUFJJT19MT1ddKyBRX0RBX0wsCi0JCSh1aW50MzJfdCkoKChjYWRkcl90KQotCQkocEFDLT5UeFBvcnRbUG9ydEluZGV4XVtUWF9QUklPX0xPV10ucFR4ZFJpbmdIZWFkKSAtCi0JCXBBQy0+VHhQb3J0W1BvcnRJbmRleF1bVFhfUFJJT19MT1ddLnBUeERlc2NyUmluZyArCi0JCXBBQy0+VHhQb3J0W1BvcnRJbmRleF1bVFhfUFJJT19MT1ddLlZUeERlc2NyUmluZykgJgotCQkweEZGRkZGRkZGKSk7Ci0JU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIFR4UXVldWVBZGRyW1BvcnRJbmRleF1bVFhfUFJJT19MT1ddKyBRX0RBX0gsCi0JCSh1aW50MzJfdCkoKChjYWRkcl90KQotCQkocEFDLT5UeFBvcnRbUG9ydEluZGV4XVtUWF9QUklPX0xPV10ucFR4ZFJpbmdIZWFkKSAtCi0JCXBBQy0+VHhQb3J0W1BvcnRJbmRleF1bVFhfUFJJT19MT1ddLnBUeERlc2NyUmluZyArCi0JCXBBQy0+VHhQb3J0W1BvcnRJbmRleF1bVFhfUFJJT19MT1ddLlZUeERlc2NyUmluZykgPj4gMzIpKTsKLQlTS19PVVQzMihwQUMtPklvQmFzZSwgUnhRdWV1ZUFkZHJbUG9ydEluZGV4XStRX0RBX0wsCi0JCSh1aW50MzJfdCkoKChjYWRkcl90KShwQUMtPlJ4UG9ydFtQb3J0SW5kZXhdLnBSeGRSaW5nSGVhZCkgLQotCQlwQUMtPlJ4UG9ydFtQb3J0SW5kZXhdLnBSeERlc2NyUmluZyArCi0JCXBBQy0+UnhQb3J0W1BvcnRJbmRleF0uVlJ4RGVzY3JSaW5nKSAmIDB4RkZGRkZGRkYpKTsKLQlTS19PVVQzMihwQUMtPklvQmFzZSwgUnhRdWV1ZUFkZHJbUG9ydEluZGV4XStRX0RBX0gsCi0JCSh1aW50MzJfdCkoKChjYWRkcl90KShwQUMtPlJ4UG9ydFtQb3J0SW5kZXhdLnBSeGRSaW5nSGVhZCkgLQotCQlwQUMtPlJ4UG9ydFtQb3J0SW5kZXhdLnBSeERlc2NyUmluZyArCi0JCXBBQy0+UnhQb3J0W1BvcnRJbmRleF0uVlJ4RGVzY3JSaW5nKSA+PiAzMikpOwotfSAvKiBQb3J0UmVJbml0Qm11ICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlSXNyIC0gaGFuZGxlIGFkYXB0ZXIgaW50ZXJydXB0cwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhlIGludGVycnVwdCByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIHRoZSBuZXR3b3JrIGFkYXB0ZXIKLSAqCWdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQuIEl0IG1heSBhbHNvIGJlIGNhbGxlZCBpZiBhbm90aGVyIGRldmljZQotICoJc2hhcmVzIHRoaXMgaW50ZXJydXB0IHZlY3RvciB3aXRoIHRoZSBkcml2ZXIuCi0gKgotICogUmV0dXJuczogTi9BCi0gKgotICovCi1zdGF0aWMgU2tJc3JSZXRWYXIgU2tHZUlzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci1zdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2ID0gKHN0cnVjdCBTS19ORVRfREVWSUNFICopZGV2X2lkOwotREVWX05FVAkJKnBOZXQ7Ci1TS19BQwkJKnBBQzsKLVNLX1UzMgkJSW50U3JjOwkJLyogaW50ZXJydXB0cyBzb3VyY2UgcmVnaXN0ZXIgY29udGVudHMgKi8JCi0KLQlwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwQUMgPSBwTmV0LT5wQUM7Ci0JCi0JLyoKLQkgKiBDaGVjayBhbmQgcHJvY2VzcyBpZiBpdHMgb3VyIGludGVycnVwdAotCSAqLwotCVNLX0lOMzIocEFDLT5Jb0Jhc2UsIEIwX1NQX0lTUkMsICZJbnRTcmMpOwotCWlmIChJbnRTcmMgPT0gMCkgewotCQlyZXR1cm4gU2tJc3JSZXROb25lOwotCX0KLQotCXdoaWxlICgoKEludFNyYyAmIElSUV9NQVNLKSAmIH5TUEVDSUFMX0lSUVMpICE9IDApIHsKLSNpZiAwIC8qIHNvZnR3YXJlIGlycSBjdXJyZW50bHkgbm90IHVzZWQgKi8KLQkJaWYgKEludFNyYyAmIElTX0lSUV9TVykgewotCQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLAotCQkJCVNLX0RCR0NBVF9EUlZfSU5UX1NSQywKLQkJCQkoIlNvZnR3YXJlIElSUVxuIikpOwotCQl9Ci0jZW5kaWYKLQkJaWYgKEludFNyYyAmIElTX1IxX0YpIHsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQlTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkJKCJFT0YgUlgxIElSUVxuIikpOwotCQkJUmVjZWl2ZUlycShwQUMsICZwQUMtPlJ4UG9ydFswXSwgU0tfVFJVRSk7Ci0JCQlTS19QTk1JX0NOVF9SWF9JTlRSKHBBQywgMCk7Ci0JCX0KLQkJaWYgKEludFNyYyAmIElTX1IyX0YpIHsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQlTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkJKCJFT0YgUlgyIElSUVxuIikpOwotCQkJUmVjZWl2ZUlycShwQUMsICZwQUMtPlJ4UG9ydFsxXSwgU0tfVFJVRSk7Ci0JCQlTS19QTk1JX0NOVF9SWF9JTlRSKHBBQywgMSk7Ci0JCX0KLSNpZmRlZiBVU0VfVFhfQ09NUExFVEUgLyogb25seSBpZiB0eCBjb21wbGV0ZSBpbnRlcnJ1cHQgdXNlZCAqLwotCQlpZiAoSW50U3JjICYgSVNfWEExX0YpIHsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQlTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkJKCJFT0YgQVMgVFgxIElSUVxuIikpOwotCQkJU0tfUE5NSV9DTlRfVFhfSU5UUihwQUMsIDApOwotCQkJc3Bpbl9sb2NrKCZwQUMtPlR4UG9ydFswXVtUWF9QUklPX0xPV10uVHhEZXNSaW5nTG9jayk7Ci0JCQlGcmVlVHhEZXNjcmlwdG9ycyhwQUMsICZwQUMtPlR4UG9ydFswXVtUWF9QUklPX0xPV10pOwotCQkJc3Bpbl91bmxvY2soJnBBQy0+VHhQb3J0WzBdW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrKTsKLQkJfQotCQlpZiAoSW50U3JjICYgSVNfWEEyX0YpIHsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQlTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkJKCJFT0YgQVMgVFgyIElSUVxuIikpOwotCQkJU0tfUE5NSV9DTlRfVFhfSU5UUihwQUMsIDEpOwotCQkJc3Bpbl9sb2NrKCZwQUMtPlR4UG9ydFsxXVtUWF9QUklPX0xPV10uVHhEZXNSaW5nTG9jayk7Ci0JCQlGcmVlVHhEZXNjcmlwdG9ycyhwQUMsICZwQUMtPlR4UG9ydFsxXVtUWF9QUklPX0xPV10pOwotCQkJc3Bpbl91bmxvY2soJnBBQy0+VHhQb3J0WzFdW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrKTsKLQkJfQotI2lmIDAgLyogb25seSBpZiBzeW5jLiBxdWV1ZXMgdXNlZCAqLwotCQlpZiAoSW50U3JjICYgSVNfWFMxX0YpIHsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQlTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkJKCJFT0YgU1kgVFgxIElSUVxuIikpOwotCQkJU0tfUE5NSV9DTlRfVFhfSU5UUihwQUMsIDEpOwotCQkJc3Bpbl9sb2NrKCZwQUMtPlR4UG9ydFswXVtUWF9QUklPX0hJR0hdLlR4RGVzUmluZ0xvY2spOwotCQkJRnJlZVR4RGVzY3JpcHRvcnMocEFDLCAwLCBUWF9QUklPX0hJR0gpOwotCQkJc3Bpbl91bmxvY2soJnBBQy0+VHhQb3J0WzBdW1RYX1BSSU9fSElHSF0uVHhEZXNSaW5nTG9jayk7Ci0JCQlDbGVhclR4SXJxKHBBQywgMCwgVFhfUFJJT19ISUdIKTsKLQkJfQotCQlpZiAoSW50U3JjICYgSVNfWFMyX0YpIHsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQlTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkJKCJFT0YgU1kgVFgyIElSUVxuIikpOwotCQkJU0tfUE5NSV9DTlRfVFhfSU5UUihwQUMsIDEpOwotCQkJc3Bpbl9sb2NrKCZwQUMtPlR4UG9ydFsxXVtUWF9QUklPX0hJR0hdLlR4RGVzUmluZ0xvY2spOwotCQkJRnJlZVR4RGVzY3JpcHRvcnMocEFDLCAxLCBUWF9QUklPX0hJR0gpOwotCQkJc3Bpbl91bmxvY2soJnBBQy0+VHhQb3J0WzFdW1RYX1BSSU9fSElHSF0uVHhEZXNSaW5nTG9jayk7Ci0JCQlDbGVhclR4SXJxKHBBQywgMSwgVFhfUFJJT19ISUdIKTsKLQkJfQotI2VuZGlmCi0jZW5kaWYKLQotCQkvKiBkbyBhbGwgSU8gYXQgb25jZSAqLwotCQlpZiAoSW50U3JjICYgSVNfUjFfRikKLQkJCUNsZWFyQW5kU3RhcnRSeChwQUMsIDApOwotCQlpZiAoSW50U3JjICYgSVNfUjJfRikKLQkJCUNsZWFyQW5kU3RhcnRSeChwQUMsIDEpOwotI2lmZGVmIFVTRV9UWF9DT01QTEVURSAvKiBvbmx5IGlmIHR4IGNvbXBsZXRlIGludGVycnVwdCB1c2VkICovCi0JCWlmIChJbnRTcmMgJiBJU19YQTFfRikKLQkJCUNsZWFyVHhJcnEocEFDLCAwLCBUWF9QUklPX0xPVyk7Ci0JCWlmIChJbnRTcmMgJiBJU19YQTJfRikKLQkJCUNsZWFyVHhJcnEocEFDLCAxLCBUWF9QUklPX0xPVyk7Ci0jZW5kaWYKLQkJU0tfSU4zMihwQUMtPklvQmFzZSwgQjBfSVNSQywgJkludFNyYyk7Ci0JfSAvKiB3aGlsZSAoSW50U3JjICYgSVJRX01BU0sgIT0gMCkgKi8KLQotCUludFNyYyAmPSBwQUMtPkdJbmkuR0lWYWxJcnFNYXNrOwotCWlmICgoSW50U3JjICYgU1BFQ0lBTF9JUlFTKSB8fCBwQUMtPkNoZWNrUXVldWUpIHsKLQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkoIlNQRUNJQUwgSVJRIERQLUNhcmRzID0+ICV4XG4iLCBJbnRTcmMpKTsKLQkJcEFDLT5DaGVja1F1ZXVlID0gU0tfRkFMU0U7Ci0JCXNwaW5fbG9jaygmcEFDLT5TbG93UGF0aExvY2spOwotCQlpZiAoSW50U3JjICYgU1BFQ0lBTF9JUlFTKQotCQkJU2tHZVNpcnFJc3IocEFDLCBwQUMtPklvQmFzZSwgSW50U3JjKTsKLQotCQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIHBBQy0+SW9CYXNlKTsKLQkJc3Bpbl91bmxvY2soJnBBQy0+U2xvd1BhdGhMb2NrKTsKLQl9Ci0JLyoKLQkgKiBkbyBpdCBhbGwgYWdhaW4gaXMgY2FzZSB3ZSBjbGVhcmVkIGFuIGludGVycnVwdCB0aGF0Ci0JICogY2FtZSBpbiBhZnRlciBoYW5kbGluZyB0aGUgcmluZyAoT1VUcyBtYXkgYmUgZGVsYXllZAotCSAqIGluIGhhcmR3YXJlIGJ1ZmZlcnMsIGJ1dCBhcmUgdGhyb3VnaCBhZnRlciBJTikKLQkgKgotCSAqIHJyb2VzbGVyOiBoYXMgYmVlbiBjb21tZW50ZWQgb3V0IGFuZCBzaGlmdGVkIHRvCi0JICogICAgICAgICAgIFNrR2VEcnZFdmVudCgpLCBiZWNhdXNlIGl0IGlzIHRpbWVyCi0JICogICAgICAgICAgIGd1YXJkZWQgbm93Ci0JICoKLQlSZWNlaXZlSXJxKHBBQywgJnBBQy0+UnhQb3J0WzBdLCBTS19UUlVFKTsKLQlSZWNlaXZlSXJxKHBBQywgJnBBQy0+UnhQb3J0WzFdLCBTS19UUlVFKTsKLQkgKi8KLQotCWlmIChwQUMtPkNoZWNrUXVldWUpIHsKLQkJcEFDLT5DaGVja1F1ZXVlID0gU0tfRkFMU0U7Ci0JCXNwaW5fbG9jaygmcEFDLT5TbG93UGF0aExvY2spOwotCQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIHBBQy0+SW9CYXNlKTsKLQkJc3Bpbl91bmxvY2soJnBBQy0+U2xvd1BhdGhMb2NrKTsKLQl9Ci0KLQkvKiBJUlEgaXMgcHJvY2Vzc2VkIC0gRW5hYmxlIElSUXMgYWdhaW4qLwotCVNLX09VVDMyKHBBQy0+SW9CYXNlLCBCMF9JTVNLLCBwQUMtPkdJbmkuR0lWYWxJcnFNYXNrKTsKLQotCQlyZXR1cm4gU2tJc3JSZXRIYW5kbGVkOwotfSAvKiBTa0dlSXNyICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlSXNyT25lUG9ydCAtIGhhbmRsZSBhZGFwdGVyIGludGVycnVwdHMgZm9yIHNpbmdsZSBwb3J0IGFkYXB0ZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBpbnRlcnJ1cHQgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgbmV0d29yayBhZGFwdGVyCi0gKglnZW5lcmF0ZXMgYW4gaW50ZXJydXB0LiBJdCBtYXkgYWxzbyBiZSBjYWxsZWQgaWYgYW5vdGhlciBkZXZpY2UKLSAqCXNoYXJlcyB0aGlzIGludGVycnVwdCB2ZWN0b3Igd2l0aCB0aGUgZHJpdmVyLgotICoJVGhpcyBpcyB0aGUgc2FtZSBhcyBhYm92ZSwgYnV0IGhhbmRsZXMgb25seSBvbmUgcG9ydC4KLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqCi0gKi8KLXN0YXRpYyBTa0lzclJldFZhciBTa0dlSXNyT25lUG9ydChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci1zdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2ID0gKHN0cnVjdCBTS19ORVRfREVWSUNFICopZGV2X2lkOwotREVWX05FVAkJKnBOZXQ7Ci1TS19BQwkJKnBBQzsKLVNLX1UzMgkJSW50U3JjOwkJLyogaW50ZXJydXB0cyBzb3VyY2UgcmVnaXN0ZXIgY29udGVudHMgKi8JCi0KLQlwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwQUMgPSBwTmV0LT5wQUM7Ci0JCi0JLyoKLQkgKiBDaGVjayBhbmQgcHJvY2VzcyBpZiBpdHMgb3VyIGludGVycnVwdAotCSAqLwotCVNLX0lOMzIocEFDLT5Jb0Jhc2UsIEIwX1NQX0lTUkMsICZJbnRTcmMpOwotCWlmIChJbnRTcmMgPT0gMCkgewotCQlyZXR1cm4gU2tJc3JSZXROb25lOwotCX0KLQkKLQl3aGlsZSAoKChJbnRTcmMgJiBJUlFfTUFTSykgJiB+U1BFQ0lBTF9JUlFTKSAhPSAwKSB7Ci0jaWYgMCAvKiBzb2Z0d2FyZSBpcnEgY3VycmVudGx5IG5vdCB1c2VkICovCi0JCWlmIChJbnRTcmMgJiBJU19JUlFfU1cpIHsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQlTS19EQkdDQVRfRFJWX0lOVF9TUkMsCi0JCQkJKCJTb2Z0d2FyZSBJUlFcbiIpKTsKLQkJfQotI2VuZGlmCi0JCWlmIChJbnRTcmMgJiBJU19SMV9GKSB7Ci0JCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCi0JCQkJU0tfREJHQ0FUX0RSVl9JTlRfU1JDLAotCQkJCSgiRU9GIFJYMSBJUlFcbiIpKTsKLQkJCVJlY2VpdmVJcnEocEFDLCAmcEFDLT5SeFBvcnRbMF0sIFNLX1RSVUUpOwotCQkJU0tfUE5NSV9DTlRfUlhfSU5UUihwQUMsIDApOwotCQl9Ci0jaWZkZWYgVVNFX1RYX0NPTVBMRVRFIC8qIG9ubHkgaWYgdHggY29tcGxldGUgaW50ZXJydXB0IHVzZWQgKi8KLQkJaWYgKEludFNyYyAmIElTX1hBMV9GKSB7Ci0JCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCi0JCQkJU0tfREJHQ0FUX0RSVl9JTlRfU1JDLAotCQkJCSgiRU9GIEFTIFRYMSBJUlFcbiIpKTsKLQkJCVNLX1BOTUlfQ05UX1RYX0lOVFIocEFDLCAwKTsKLQkJCXNwaW5fbG9jaygmcEFDLT5UeFBvcnRbMF1bVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2spOwotCQkJRnJlZVR4RGVzY3JpcHRvcnMocEFDLCAmcEFDLT5UeFBvcnRbMF1bVFhfUFJJT19MT1ddKTsKLQkJCXNwaW5fdW5sb2NrKCZwQUMtPlR4UG9ydFswXVtUWF9QUklPX0xPV10uVHhEZXNSaW5nTG9jayk7Ci0JCX0KLSNpZiAwIC8qIG9ubHkgaWYgc3luYy4gcXVldWVzIHVzZWQgKi8KLQkJaWYgKEludFNyYyAmIElTX1hTMV9GKSB7Ci0JCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCi0JCQkJU0tfREJHQ0FUX0RSVl9JTlRfU1JDLAotCQkJCSgiRU9GIFNZIFRYMSBJUlFcbiIpKTsKLQkJCVNLX1BOTUlfQ05UX1RYX0lOVFIocEFDLCAwKTsKLQkJCXNwaW5fbG9jaygmcEFDLT5UeFBvcnRbMF1bVFhfUFJJT19ISUdIXS5UeERlc1JpbmdMb2NrKTsKLQkJCUZyZWVUeERlc2NyaXB0b3JzKHBBQywgMCwgVFhfUFJJT19ISUdIKTsKLQkJCXNwaW5fdW5sb2NrKCZwQUMtPlR4UG9ydFswXVtUWF9QUklPX0hJR0hdLlR4RGVzUmluZ0xvY2spOwotCQkJQ2xlYXJUeElycShwQUMsIDAsIFRYX1BSSU9fSElHSCk7Ci0JCX0KLSNlbmRpZgotI2VuZGlmCi0KLQkJLyogZG8gYWxsIElPIGF0IG9uY2UgKi8KLQkJaWYgKEludFNyYyAmIElTX1IxX0YpCi0JCQlDbGVhckFuZFN0YXJ0UngocEFDLCAwKTsKLSNpZmRlZiBVU0VfVFhfQ09NUExFVEUgLyogb25seSBpZiB0eCBjb21wbGV0ZSBpbnRlcnJ1cHQgdXNlZCAqLwotCQlpZiAoSW50U3JjICYgSVNfWEExX0YpCi0JCQlDbGVhclR4SXJxKHBBQywgMCwgVFhfUFJJT19MT1cpOwotI2VuZGlmCi0JCVNLX0lOMzIocEFDLT5Jb0Jhc2UsIEIwX0lTUkMsICZJbnRTcmMpOwotCX0gLyogd2hpbGUgKEludFNyYyAmIElSUV9NQVNLICE9IDApICovCi0JCi0JSW50U3JjICY9IHBBQy0+R0luaS5HSVZhbElycU1hc2s7Ci0JaWYgKChJbnRTcmMgJiBTUEVDSUFMX0lSUVMpIHx8IHBBQy0+Q2hlY2tRdWV1ZSkgewotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfSU5UX1NSQywKLQkJCSgiU1BFQ0lBTCBJUlEgU1AtQ2FyZHMgPT4gJXhcbiIsIEludFNyYykpOwotCQlwQUMtPkNoZWNrUXVldWUgPSBTS19GQUxTRTsKLQkJc3Bpbl9sb2NrKCZwQUMtPlNsb3dQYXRoTG9jayk7Ci0JCWlmIChJbnRTcmMgJiBTUEVDSUFMX0lSUVMpCi0JCQlTa0dlU2lycUlzcihwQUMsIHBBQy0+SW9CYXNlLCBJbnRTcmMpOwotCi0JCVNrRXZlbnREaXNwYXRjaGVyKHBBQywgcEFDLT5Jb0Jhc2UpOwotCQlzcGluX3VubG9jaygmcEFDLT5TbG93UGF0aExvY2spOwotCX0KLQkvKgotCSAqIGRvIGl0IGFsbCBhZ2FpbiBpcyBjYXNlIHdlIGNsZWFyZWQgYW4gaW50ZXJydXB0IHRoYXQKLQkgKiBjYW1lIGluIGFmdGVyIGhhbmRsaW5nIHRoZSByaW5nIChPVVRzIG1heSBiZSBkZWxheWVkCi0JICogaW4gaGFyZHdhcmUgYnVmZmVycywgYnV0IGFyZSB0aHJvdWdoIGFmdGVyIElOKQotCSAqCi0JICogcnJvZXNsZXI6IGhhcyBiZWVuIGNvbW1lbnRlZCBvdXQgYW5kIHNoaWZ0ZWQgdG8KLQkgKiAgICAgICAgICAgU2tHZURydkV2ZW50KCksIGJlY2F1c2UgaXQgaXMgdGltZXIKLQkgKiAgICAgICAgICAgZ3VhcmRlZCBub3cKLQkgKgotCVJlY2VpdmVJcnEocEFDLCAmcEFDLT5SeFBvcnRbMF0sIFNLX1RSVUUpOwotCSAqLwotCi0JLyogSVJRIGlzIHByb2Nlc3NlZCAtIEVuYWJsZSBJUlFzIGFnYWluKi8KLQlTS19PVVQzMihwQUMtPklvQmFzZSwgQjBfSU1TSywgcEFDLT5HSW5pLkdJVmFsSXJxTWFzayk7Ci0KLQkJcmV0dXJuIFNrSXNyUmV0SGFuZGxlZDsKLX0gLyogU2tHZUlzck9uZVBvcnQgKi8KLQotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIAlTa0dlUG9sbENvbnRyb2xsZXIgLSBwb2xsaW5nIHJlY2VpdmUsIGZvciBuZXRjb25zb2xlCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglQb2xsaW5nIHJlY2VpdmUgLSB1c2VkIGJ5IG5ldGNvbnNvbGUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHMKLSAqCXRvIGFsbG93IG5ldHdvcmsgaS9vIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotc3RhdGljIHZvaWQgU2tHZVBvbGxDb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwotCVNrR2VJc3IoZGV2LT5pcnEsIGRldik7Ci0JZW5hYmxlX2lycShkZXYtPmlycSk7Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlT3BlbiAtIGhhbmRsZSBzdGFydCBvZiBpbml0aWFsaXplZCBhZGFwdGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgaW5pdGlhbGl6ZWQgYWRhcHRlci4KLSAqCVRoZSBib2FyZCBsZXZlbCB2YXJpYWJsZSBpcyBzZXQgYW5kIHRoZSBhZGFwdGVyIGlzCi0gKglicm91Z2h0IHRvIGZ1bGwgZnVuY3Rpb25hbGl0eS4KLSAqCVRoZSBkZXZpY2UgZmxhZ3MgYXJlIHNldCBmb3Igb3BlcmF0aW9uLgotICoJRG8gYWxsIG5lY2Vzc2FyeSBsZXZlbCAyIGluaXRpYWxpemF0aW9uLCBlbmFibGUgaW50ZXJydXB0cyBhbmQKLSAqCWdpdmUgc3RhcnQgY29tbWFuZCB0byBSTE1ULgotICoKLSAqIFJldHVybnM6Ci0gKgkwIG9uIHN1Y2Nlc3MKLSAqCSE9IDAgb24gZXJyb3IKLSAqLwotc3RhdGljIGludCBTa0dlT3BlbigKLXN0cnVjdCBTS19ORVRfREVWSUNFCSpkZXYpCi17Ci0JREVWX05FVAkJCSpwTmV0OwotCVNLX0FDCQkJKnBBQzsKLQl1bnNpZ25lZCBsb25nCUZsYWdzOwkJLyogZm9yIHNwaW4gbG9jayAqLwotCWludAkJCQlpOwotCVNLX0VWUEFSQQkJRXZQYXJhOwkJLyogYW4gZXZlbnQgcGFyYW1ldGVyIHVuaW9uICovCi0KLQlwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwQUMgPSBwTmV0LT5wQUM7Ci0JCi0JU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VOVFJZLAotCQkoIlNrR2VPcGVuOiBwQUM9MHglbFg6XG4iLCAodW5zaWduZWQgbG9uZylwQUMpKTsKLQotI2lmZGVmIFNLX0RJQUdfU1VQUE9SVAotCWlmIChwQUMtPkRpYWdNb2RlQWN0aXZlID09IERJQUdfQUNUSVZFKSB7Ci0JCWlmIChwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID09IFNLX0RJQUdfUlVOTklORykgewotCQkJcmV0dXJuICgtMSk7ICAgLyogc3RpbGwgaW4gdXNlIGJ5IGRpYWc7IGRlbnkgYWN0aW9ucyAqLwotCQl9IAotCX0KLSNlbmRpZgotCi0JLyogU2V0IGJsaW5rIG1vZGUgKi8KLQlpZiAoKHBBQy0+UGNpRGV2LT52ZW5kb3IgPT0gMHgxMTg2KSB8fCAocEFDLT5QY2lEZXYtPnZlbmRvciA9PSAweDExYWIgKSkKLQkJcEFDLT5HSW5pLkdJTGVkQmxpbmtDdHJsID0gT0VNX0NPTkZJR19WQUxVRTsKLQotCWlmIChwQUMtPkJvYXJkTGV2ZWwgPT0gU0tfSU5JVF9EQVRBKSB7Ci0JCS8qIGxldmVsIDEgaW5pdCBjb21tb24gbW9kdWxlcyBoZXJlICovCi0JCWlmIChTa0dlSW5pdChwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKSAhPSAwKSB7Ci0JCQlwcmludGsoIiVzOiBIV0luaXQgKDEpIGZhaWxlZC5cbiIsIHBBQy0+ZGV2W3BOZXQtPlBvcnROcl0tPm5hbWUpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJU2tJMmNJbml0CShwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQkJU2tFdmVudEluaXQJKHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfSU8pOwotCQlTa1BubWlJbml0CShwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX0lPKTsKLQkJU2tBZGRySW5pdAkocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JCVNrUmxtdEluaXQJKHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfSU8pOwotCQlTa1RpbWVySW5pdAkocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JCXBBQy0+Qm9hcmRMZXZlbCA9IFNLX0lOSVRfSU87Ci0JfQotCi0JaWYgKHBBQy0+Qm9hcmRMZXZlbCAhPSBTS19JTklUX1JVTikgewotCQkvKiB0c2NoaWxsaW5nOiBMZXZlbCAyIGluaXQgbW9kdWxlcyBoZXJlLCBjaGVjayByZXR1cm4gdmFsdWUuICovCi0JCWlmIChTa0dlSW5pdChwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX1JVTikgIT0gMCkgewotCQkJcHJpbnRrKCIlczogSFdJbml0ICgyKSBmYWlsZWQuXG4iLCBwQUMtPmRldltwTmV0LT5Qb3J0TnJdLT5uYW1lKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCVNrSTJjSW5pdAkocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9SVU4pOwotCQlTa0V2ZW50SW5pdAkocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9SVU4pOwotCQlTa1BubWlJbml0CShwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX1JVTik7Ci0JCVNrQWRkckluaXQJKHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfUlVOKTsKLQkJU2tSbG10SW5pdAkocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9SVU4pOwotCQlTa1RpbWVySW5pdAkocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9SVU4pOwotCQlwQUMtPkJvYXJkTGV2ZWwgPSBTS19JTklUX1JVTjsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQkvKiBFbmFibGUgdHJhbnNtaXQgZGVzY3JpcHRvciBwb2xsaW5nLiAqLwotCQlTa0dlUG9sbFR4RChwQUMsIHBBQy0+SW9CYXNlLCBpLCBTS19UUlVFKTsKLQkJRmlsbFJ4UmluZyhwQUMsICZwQUMtPlJ4UG9ydFtpXSk7Ci0JfQotCVNrR2VZZWxsb3dMRUQocEFDLCBwQUMtPklvQmFzZSwgMSk7Ci0KLQlTdGFydERydkNsZWFudXBUaW1lcihwQUMpOwotCVNrRGltRW5hYmxlTW9kZXJhdGlvbklmTmVlZGVkKHBBQyk7CQotCVNrRGltRGlzcGxheU1vZGVyYXRpb25TZXR0aW5ncyhwQUMpOwotCi0JcEFDLT5HSW5pLkdJVmFsSXJxTWFzayAmPSBJUlFfTUFTSzsKLQotCS8qIGVuYWJsZSBJbnRlcnJ1cHRzICovCi0JU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIEIwX0lNU0ssIHBBQy0+R0luaS5HSVZhbElycU1hc2spOwotCVNLX09VVDMyKHBBQy0+SW9CYXNlLCBCMF9IV0VfSU1TSywgSVJRX0hXRV9NQVNLKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCi0JaWYgKChwQUMtPlJsbXRNb2RlICE9IDApICYmIChwQUMtPk1heFBvcnRzID09IDApKSB7Ci0JCUV2UGFyYS5QYXJhMzJbMF0gPSBwQUMtPlJsbXROZXRzOwotCQlFdlBhcmEuUGFyYTMyWzFdID0gLTE7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TRVRfTkVUUywKLQkJCUV2UGFyYSk7Ci0JCUV2UGFyYS5QYXJhMzJbMF0gPSBwQUMtPlJsbXRNb2RlOwotCQlFdlBhcmEuUGFyYTMyWzFdID0gMDsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9STE1ULCBTS19STE1UX01PREVfQ0hBTkdFLAotCQkJRXZQYXJhKTsKLQl9Ci0KLQlFdlBhcmEuUGFyYTMyWzBdID0gcE5ldC0+TmV0TnI7Ci0JRXZQYXJhLlBhcmEzMlsxXSA9IC0xOwotCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVEFSVCwgRXZQYXJhKTsKLQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIHBBQy0+SW9CYXNlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCi0JcEFDLT5NYXhQb3J0cysrOwotCi0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiU2tHZU9wZW4gc3VjZWVkZWRcbiIpKTsKLQotCXJldHVybiAoMCk7Ci19IC8qIFNrR2VPcGVuICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlQ2xvc2UgLSBTdG9wIGluaXRpYWxpemVkIGFkYXB0ZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUNsb3NlIGluaXRpYWxpemVkIGFkYXB0ZXIuCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBvbiBzdWNjZXNzCi0gKgllcnJvciBjb2RlIC0gb24gZXJyb3IKLSAqLwotc3RhdGljIGludCBTa0dlQ2xvc2UoCi1zdHJ1Y3QgU0tfTkVUX0RFVklDRQkqZGV2KQotewotCURFVl9ORVQJCSpwTmV0OwotCURFVl9ORVQJCSpuZXdQdHJOZXQ7Ci0JU0tfQUMJCSpwQUM7Ci0KLQl1bnNpZ25lZCBsb25nCUZsYWdzOwkJLyogZm9yIHNwaW4gbG9jayAqLwotCWludAkJaTsKLQlpbnQJCVBvcnRJZHg7Ci0JU0tfRVZQQVJBCUV2UGFyYTsKLQotCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9FTlRSWSwKLQkJKCJTa0dlQ2xvc2U6IHBBQz0weCVsWCAiLCAodW5zaWduZWQgbG9uZylwQUMpKTsKLQotCXBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXBBQyA9IHBOZXQtPnBBQzsKLQotI2lmZGVmIFNLX0RJQUdfU1VQUE9SVAotCWlmIChwQUMtPkRpYWdNb2RlQWN0aXZlID09IERJQUdfQUNUSVZFKSB7Ci0JCWlmIChwQUMtPkRpYWdGbG93Q3RybCA9PSBTS19GQUxTRSkgewotCQkJLyogCi0JCQkqKiBub3RpZnkgdGhhdCB0aGUgaW50ZXJmYWNlIHdoaWNoIGhhcyBiZWVuIGNsb3NlZAotCQkJKiogYnkgb3BlcmF0b3IgaW50ZXJhY3Rpb24gbXVzdCBub3QgYmUgc3RhcnRlZCB1cCAKLQkJCSoqIGFnYWluIHdoZW4gdGhlIERJQUcgaGFzIGZpbmlzaGVkLiAKLQkJCSovCi0JCQluZXdQdHJOZXQgPSBuZXRkZXZfcHJpdihwQUMtPmRldlswXSk7Ci0JCQlpZiAobmV3UHRyTmV0ID09IHBOZXQpIHsKLQkJCQlwQUMtPldhc0lmVXBbMF0gPSBTS19GQUxTRTsKLQkJCX0gZWxzZSB7Ci0JCQkJcEFDLT5XYXNJZlVwWzFdID0gU0tfRkFMU0U7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsgLyogcmV0dXJuIHRvIHN5c3RlbSBldmVyeXRoaW5nIGlzIGZpbmUuLi4gKi8KLQkJfSBlbHNlIHsKLQkJCXBBQy0+RGlhZ0Zsb3dDdHJsID0gU0tfRkFMU0U7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCWlmIChwQUMtPlJsbXROZXRzID09IDEpCi0JCVBvcnRJZHggPSBwQUMtPkFjdGl2ZVBvcnQ7Ci0JZWxzZQotCQlQb3J0SWR4ID0gcE5ldC0+TmV0TnI7Ci0KLSAgICAgICAgU3RvcERydkNsZWFudXBUaW1lcihwQUMpOwotCi0JLyoKLQkgKiBDbGVhciBtdWx0aWNhc3QgdGFibGUsIHByb21pc2N1b3VzIG1vZGUgLi4uLgotCSAqLwotCVNrQWRkck1jQ2xlYXIocEFDLCBwQUMtPklvQmFzZSwgUG9ydElkeCwgMCk7Ci0JU2tBZGRyUHJvbWlzY3VvdXNDaGFuZ2UocEFDLCBwQUMtPklvQmFzZSwgUG9ydElkeCwKLQkJU0tfUFJPTV9NT0RFX05PTkUpOwotCi0JaWYgKHBBQy0+TWF4UG9ydHMgPT0gMSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JCVNLX09VVDMyKHBBQy0+SW9CYXNlLCBCMF9JTVNLLCAwKTsKLQkJRXZQYXJhLlBhcmEzMlswXSA9IHBOZXQtPk5ldE5yOwotCQlFdlBhcmEuUGFyYTMyWzFdID0gLTE7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVE9QLCBFdlBhcmEpOwotCQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIHBBQy0+SW9CYXNlKTsKLQkJU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIEIwX0lNU0ssIDApOwotCQkvKiBzdG9wIHRoZSBoYXJkd2FyZSAqLwotCQlTa0dlRGVJbml0KHBBQywgcEFDLT5Jb0Jhc2UpOwotCQlwQUMtPkJvYXJkTGV2ZWwgPSBTS19JTklUX0RBVEE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7Ci0JfSBlbHNlIHsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQkJRXZQYXJhLlBhcmEzMlswXSA9IHBOZXQtPk5ldE5yOwotCQlFdlBhcmEuUGFyYTMyWzFdID0gLTE7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVE9QLCBFdlBhcmEpOwotCQlTa1BubWlFdmVudChwQUMsIHBBQy0+SW9CYXNlLCBTS19QTk1JX0VWVF9YTUFDX1JFU0VULCBFdlBhcmEpOwotCQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIHBBQy0+SW9CYXNlKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQkJCi0JCS8qIFN0b3AgcG9ydCAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5UeFBvcnRbcE5ldC0+UG9ydE5yXQotCQkJW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrLCBGbGFncyk7Ci0JCVNrR2VTdG9wUG9ydChwQUMsIHBBQy0+SW9CYXNlLCBwTmV0LT5Qb3J0TnIsCi0JCQlTS19TVE9QX0FMTCwgU0tfSEFSRF9SU1QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlR4UG9ydFtwTmV0LT5Qb3J0TnJdCi0JCQlbVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2ssIEZsYWdzKTsKLQl9Ci0KLQlpZiAocEFDLT5SbG10TmV0cyA9PSAxKSB7Ci0JCS8qIGNsZWFyIGFsbCBkZXNjcmlwdG9yIHJpbmdzICovCi0JCWZvciAoaT0wOyBpPHBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCQlSZWNlaXZlSXJxKHBBQywgJnBBQy0+UnhQb3J0W2ldLCBTS19UUlVFKTsKLQkJCUNsZWFyUnhSaW5nKHBBQywgJnBBQy0+UnhQb3J0W2ldKTsKLQkJCUNsZWFyVHhSaW5nKHBBQywgJnBBQy0+VHhQb3J0W2ldW1RYX1BSSU9fTE9XXSk7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBjbGVhciBwb3J0IGRlc2NyaXB0b3IgcmluZ3MgKi8KLQkJUmVjZWl2ZUlycShwQUMsICZwQUMtPlJ4UG9ydFtwTmV0LT5Qb3J0TnJdLCBTS19UUlVFKTsKLQkJQ2xlYXJSeFJpbmcocEFDLCAmcEFDLT5SeFBvcnRbcE5ldC0+UG9ydE5yXSk7Ci0JCUNsZWFyVHhSaW5nKHBBQywgJnBBQy0+VHhQb3J0W3BOZXQtPlBvcnROcl1bVFhfUFJJT19MT1ddKTsKLQl9Ci0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiU2tHZUNsb3NlOiBkb25lICIpKTsKLQotCVNLX01FTVNFVCgmKHBBQy0+UG5taUJhY2t1cCksIDAsIHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSk7Ci0JU0tfTUVNQ1BZKCYocEFDLT5Qbm1pQmFja3VwKSwgJihwQUMtPlBubWlTdHJ1Y3QpLCAKLQkJCXNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSk7Ci0KLQlwQUMtPk1heFBvcnRzLS07Ci0KLQlyZXR1cm4gKDApOwotfSAvKiBTa0dlQ2xvc2UgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJU2tHZVhtaXQgLSBMaW51eCBmcmFtZSB0cmFuc21pdCBmdW5jdGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhlIHN5c3RlbSBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIHNlbmQgZnJhbWVzIG9udG8gdGhlIHdpcmUuCi0gKglJdCBwdXRzIHRoZSBmcmFtZSBpbiB0aGUgdHggZGVzY3JpcHRvciByaW5nLiBJZiB0aGUgcmluZyBpcwotICoJZnVsbCB0aGVuLCB0aGUgJ3RidXN5JyBmbGFnIGlzIHNldC4KLSAqCi0gKiBSZXR1cm5zOgotICoJMCwgaWYgZXZlcnl0aGluZyBpcyBvawotICoJIT0wLCBvbiBlcnJvcgotICogV0FSTklORzogcmV0dXJuaW5nIDEgaW4gJ3RidXN5JyBjYXNlIGNhdXNlZCBzeXN0ZW0gY3Jhc2hlcyAoZG91YmxlCi0gKglhbGxvY2F0ZWQgc2tiJ3MpICEhIQotICovCi1zdGF0aWMgaW50IFNrR2VYbWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBTS19ORVRfREVWSUNFICpkZXYpCi17Ci1ERVZfTkVUCQkqcE5ldDsKLVNLX0FDCQkqcEFDOwotaW50CQkJUmM7CS8qIHJldHVybiBjb2RlIG9mIFhtaXRGcmFtZSAqLwotCi0JcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JcEFDID0gcE5ldC0+cEFDOwotCi0JaWYgKCghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgfHwKLQkJKHBBQy0+R0luaS5HSUNoaXBJZCA9PSBDSElQX0lEX0dFTkVTSVMpKSB7Ci0JCS8qIERvbid0IGFjdGl2YXRlIHNjYXR0ZXItZ2F0aGVyIGFuZCBoYXJkd2FyZSBjaGVja3N1bSAqLwotCi0JCWlmIChwQUMtPlJsbXROZXRzID09IDIpCi0JCQlSYyA9IFhtaXRGcmFtZSgKLQkJCQlwQUMsCi0JCQkJJnBBQy0+VHhQb3J0W3BOZXQtPlBvcnROcl1bVFhfUFJJT19MT1ddLAotCQkJCXNrYik7Ci0JCWVsc2UKLQkJCVJjID0gWG1pdEZyYW1lKAotCQkJCXBBQywKLQkJCQkmcEFDLT5UeFBvcnRbcEFDLT5BY3RpdmVQb3J0XVtUWF9QUklPX0xPV10sCi0JCQkJc2tiKTsKLQl9IGVsc2UgewotCQkvKiBzY2F0dGVyLWdhdGhlciBhbmQgaGFyZHdhcmUgVENQIGNoZWNrc3VtbWluZyBhbmFibGVkKi8KLQkJaWYgKHBBQy0+UmxtdE5ldHMgPT0gMikKLQkJCVJjID0gWG1pdEZyYW1lU0coCi0JCQkJcEFDLAotCQkJCSZwQUMtPlR4UG9ydFtwTmV0LT5Qb3J0TnJdW1RYX1BSSU9fTE9XXSwKLQkJCQlza2IpOwotCQllbHNlCi0JCQlSYyA9IFhtaXRGcmFtZVNHKAotCQkJCXBBQywKLQkJCQkmcEFDLT5UeFBvcnRbcEFDLT5BY3RpdmVQb3J0XVtUWF9QUklPX0xPV10sCi0JCQkJc2tiKTsKLQl9Ci0KLQkvKiBUcmFuc21pdHRlciBvdXQgb2YgcmVzb3VyY2VzPyAqLwotCWlmIChSYyA8PSAwKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQl9Ci0KLQkvKiBJZiBub3QgdGFrZW4sIGdpdmUgYnVmZmVyIG93bmVyc2hpcCBiYWNrIHRvIHRoZQotCSAqIHF1ZXVlaW5nIGxheWVyLgotCSAqLwotCWlmIChSYyA8IDApCi0JCXJldHVybiAoMSk7Ci0KLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gKDApOwotfSAvKiBTa0dlWG1pdCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIAlYbWl0RnJhbWUgLSBmaWxsIG9uZSBzb2NrZXQgYnVmZmVyIGludG8gdGhlIHRyYW5zbWl0IHJpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gcHV0cyBhIG1lc3NhZ2UgaW50byB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nCi0gKglpZiB0aGVyZSBpcyBhIGRlc2NyaXB0b3JzIGxlZnQuCi0gKglMaW51eCBza2IncyBjb25zaXN0IG9mIG9ubHkgb25lIGNvbnRpbnVvdXMgYnVmZmVyLgotICoJVGhlIGZpcnN0IHN0ZXAgbG9ja3MgdGhlIHJpbmcuIEl0IGlzIGhlbGQgbG9ja2VkCi0gKglhbGwgdGltZSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIFNXSVRDSF8uLi9QT1JUX1JFU0VULgotICoJVGhlbiB0aGUgZGVzY3JpcHRvcmlzIGFsbG9jYXRlZC4KLSAqCVRoZSBzZWNvbmQgcGFydCBpcyBsaW5raW5nIHRoZSBidWZmZXIgdG8gdGhlIGRlc2NyaXB0b3IuCi0gKglBdCB0aGUgdmVyeSBsYXN0LCB0aGUgQ29udHJvbCBmaWVsZCBvZiB0aGUgZGVzY3JpcHRvcgotICoJaXMgbWFkZSB2YWxpZCBmb3IgdGhlIEJNVSBhbmQgYSBzdGFydCBUWCBjb21tYW5kIGlzIGdpdmVuCi0gKglpZiBuZWNlc3NhcnkuCi0gKgotICogUmV0dXJuczoKLSAqCT4gMCAtIG9uIHN1Y2NlczogdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZQotICoJPSAwIC0gb24gcmVzb3VyY2Ugc2hvcnRhZ2U6IHRoaXMgZnJhbWUgc2VudCBvciBkcm9wcGVkLCBub3cKLSAqCQl0aGUgcmluZyBpcyBmdWxsICggLT4gc2V0IHRidXN5KQotICoJPCAwIC0gb24gZmFpbHVyZTogb3RoZXIgcHJvYmxlbXMgKCAtPiByZXR1cm4gZmFpbHVyZSB0byB1cHBlciBsYXllcnMpCi0gKi8KLXN0YXRpYyBpbnQgWG1pdEZyYW1lKAotU0tfQUMgCQkqcEFDLAkJLyogcG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgICAgICAgICAgICovCi1UWF9QT1JUCQkqcFR4UG9ydCwJLyogcG9pbnRlciB0byBzdHJ1Y3Qgb2YgcG9ydCB0byBzZW5kIHRvICovCi1zdHJ1Y3Qgc2tfYnVmZgkqcE1lc3NhZ2UpCS8qIHBvaW50ZXIgdG8gc2VuZC1tZXNzYWdlICAgICAgICAgICAgICAqLwotewotCVRYRAkJKnBUeGQ7CQkvKiB0aGUgcnhkIHRvIGZpbGwgKi8KLQlUWEQJCSpwT2xkVHhkOwotCXVuc2lnbmVkIGxvbmcJIEZsYWdzOwotCVNLX1U2NAkJIFBoeXNBZGRyOwotCWludAkJIEJ5dGVzU2VuZCA9IHBNZXNzYWdlLT5sZW47Ci0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfVFhfUFJPR1JFU1MsICgiWCIpKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwVHhQb3J0LT5UeERlc1JpbmdMb2NrLCBGbGFncyk7Ci0jaWZuZGVmIFVTRV9UWF9DT01QTEVURQotCUZyZWVUeERlc2NyaXB0b3JzKHBBQywgcFR4UG9ydCk7Ci0jZW5kaWYKLQlpZiAocFR4UG9ydC0+VHhkUmluZ0ZyZWUgPT0gMCkgewotCQkvKiAKLQkJKiogbm8gZW5vdWdoIGZyZWUgZGVzY3JpcHRvcnMgaW4gcmluZyBhdCB0aGUgbW9tZW50LgotCQkqKiBNYXliZSBmcmVlJ2luZyBzb21lIG9sZCBvbmUgaGVscD8KLQkJKi8KLQkJRnJlZVR4RGVzY3JpcHRvcnMocEFDLCBwVHhQb3J0KTsKLQkJaWYgKHBUeFBvcnQtPlR4ZFJpbmdGcmVlID09IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBUeFBvcnQtPlR4RGVzUmluZ0xvY2ssIEZsYWdzKTsKLQkJCVNLX1BOTUlfQ05UX05PX1RYX0JVRihwQUMsIHBUeFBvcnQtPlBvcnRJbmRleCk7Ci0JCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCi0JCQkJU0tfREJHQ0FUX0RSVl9UWF9QUk9HUkVTUywKLQkJCQkoIlhtaXRGcmFtZSBmYWlsZWRcbiIpKTsKLQkJCS8qIAotCQkJKiogdGhlIGRlc2lyZWQgbWVzc2FnZSBjYW4gbm90IGJlIHNlbnQKLQkJCSoqIEJlY2F1c2UgdGJ1c3kgc2VlbXMgdG8gYmUgc2V0LCB0aGUgbWVzc2FnZSAKLQkJCSoqIHNob3VsZCBub3QgYmUgZnJlZWQgaGVyZS4gSXQgd2lsbCBiZSB1c2VkIAotCQkJKiogYnkgdGhlIHNjaGVkdWxlciBvZiB0aGUgZXRoZXJuZXQgaGFuZGxlciAKLQkJCSovCi0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCX0KLQotCS8qCi0JKiogSWYgdGhlIHBhc3NlZCBzb2NrZXQgYnVmZmVyIGlzIG9mIHNtYWxsZXIgTVRVLXNpemUgdGhhbiA2MCwKLQkqKiBjb3B5IGV2ZXJ5dGhpbmcgaW50byBuZXcgYnVmZmVyIGFuZCBmaWxsIGFsbCBieXRlcyBiZXR3ZWVuCi0JKiogdGhlIG9yaWdpbmFsIHBhY2tldCBlbmQgYW5kIHRoZSBuZXcgcGFja2V0IGVuZCBvZiA2MCB3aXRoIDB4MDAuCi0JKiogVGhpcyBpcyB0byByZXNvbHZlIGZhdWx0eSBwYWRkaW5nIGJ5IHRoZSBIVyB3aXRoIDB4YWEgYnl0ZXMuCi0JKi8KLQlpZiAoQnl0ZXNTZW5kIDwgQ19MRU5fRVRIRVJORVRfTUlOU0laRSkgewotCQlpZiAoc2tiX3BhZHRvKHBNZXNzYWdlLCBDX0xFTl9FVEhFUk5FVF9NSU5TSVpFKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcFR4UG9ydC0+VHhEZXNSaW5nTG9jaywgRmxhZ3MpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcE1lc3NhZ2UtPmxlbiA9IENfTEVOX0VUSEVSTkVUX01JTlNJWkU7Ci0JfQotCi0JLyogCi0JKiogYWR2YW5jZSBoZWFkIGNvdW50ZXIgYmVoaW5kIGRlc2NyaXB0b3IgbmVlZGVkIGZvciB0aGlzIGZyYW1lLCAKLQkqKiBzbyB0aGF0IG5lZWRlZCBkZXNjcmlwdG9yIGlzIHJlc2VydmVkIGZyb20gdGhhdCBvbi4gVGhlIG5leHQKLQkqKiBhY3Rpb24gd2lsbCBiZSB0byBhZGQgdGhlIHBhc3NlZCBidWZmZXIgdG8gdGhlIFRYLWRlc2NyaXB0b3IKLQkqLwotCXBUeGQgPSBwVHhQb3J0LT5wVHhkUmluZ0hlYWQ7Ci0JcFR4UG9ydC0+cFR4ZFJpbmdIZWFkID0gcFR4ZC0+cE5leHRUeGQ7Ci0JcFR4UG9ydC0+VHhkUmluZ0ZyZWUtLTsKLQotI2lmZGVmIFNLX0RVTVBfVFgKLQlEdW1wTXNnKHBNZXNzYWdlLCAiWG1pdEZyYW1lIik7Ci0jZW5kaWYKLQotCS8qIAotCSoqIEZpcnN0IHN0ZXAgaXMgdG8gbWFwIHRoZSBkYXRhIHRvIGJlIHNlbnQgdmlhIHRoZSBhZGFwdGVyIG9udG8KLQkqKiB0aGUgRE1BIG1lbW9yeS4gS2VybmVsIDIuMiB1c2VzIHZpcnRfdG9fYnVzKCksIGJ1dCBrZXJuZWxzIDIuNAotCSoqIGFuZCAyLjYgbmVlZCB0byB1c2UgcGNpX21hcF9wYWdlKCkgZm9yIHRoYXQgbWFwcGluZy4KLQkqLwotCVBoeXNBZGRyID0gKFNLX1U2NCkgcGNpX21hcF9wYWdlKHBBQy0+UGNpRGV2LAotCQkJCQl2aXJ0X3RvX3BhZ2UocE1lc3NhZ2UtPmRhdGEpLAotCQkJCQkoKHVuc2lnbmVkIGxvbmcpIHBNZXNzYWdlLT5kYXRhICYgflBBR0VfTUFTSyksCi0JCQkJCXBNZXNzYWdlLT5sZW4sCi0JCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCXBUeGQtPlZEYXRhTG93ICA9IChTS19VMzIpIChQaHlzQWRkciAmIDB4ZmZmZmZmZmYpOwotCXBUeGQtPlZEYXRhSGlnaCA9IChTS19VMzIpIChQaHlzQWRkciA+PiAzMik7Ci0JcFR4ZC0+cE1CdWYgICAgID0gcE1lc3NhZ2U7Ci0KLQlpZiAocE1lc3NhZ2UtPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCXUxNiBoZHJsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChwTWVzc2FnZSk7Ci0JCXUxNiBvZmZzZXQgPSBoZHJsZW4gKyBwTWVzc2FnZS0+Y3N1bV9vZmZzZXQ7Ci0KLQkJaWYgKChpcGlwX2hkcihwTWVzc2FnZSktPnByb3RvY29sID09IElQUFJPVE9fVURQKSAmJgotCQkJKHBBQy0+R0luaS5HSUNoaXBSZXYgPT0gMCkgJiYKLQkJCShwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9ZVUtPTikpIHsKLQkJCXBUeGQtPlRCQ29udHJvbCA9IEJNVV9UQ1BfQ0hFQ0s7Ci0JCX0gZWxzZSB7Ci0JCQlwVHhkLT5UQkNvbnRyb2wgPSBCTVVfVURQX0NIRUNLOwotCQl9Ci0KLQkJcFR4ZC0+VGNwU3VtT2ZzID0gMDsKLQkJcFR4ZC0+VGNwU3VtU3QgID0gaGRybGVuOwotCQlwVHhkLT5UY3BTdW1XciAgPSBvZmZzZXQ7Ci0KLQkJcFR4ZC0+VEJDb250cm9sIHw9IEJNVV9PV04gfCBCTVVfU1RGIHwgCi0JCQkJICAgQk1VX1NXICB8IEJNVV9FT0YgfAotI2lmZGVmIFVTRV9UWF9DT01QTEVURQotCQkJCSAgIEJNVV9JUlFfRU9GIHwKLSNlbmRpZgotCQkJCSAgIHBNZXNzYWdlLT5sZW47Ci0gICAgICAgIH0gZWxzZSB7Ci0JCXBUeGQtPlRCQ29udHJvbCA9IEJNVV9PV04gfCBCTVVfU1RGIHwgQk1VX0NIRUNLIHwgCi0JCQkJICBCTVVfU1cgIHwgQk1VX0VPRiB8Ci0jaWZkZWYgVVNFX1RYX0NPTVBMRVRFCi0JCQkJICAgQk1VX0lSUV9FT0YgfAotI2VuZGlmCi0JCQlwTWVzc2FnZS0+bGVuOwotCX0KLQotCS8qIAotCSoqIElmIHByZXZpb3VzIGRlc2NyaXB0b3IgYWxyZWFkeSBkb25lLCBnaXZlIFRYIHN0YXJ0IGNtZCAKLQkqLwotCXBPbGRUeGQgPSB4Y2hnKCZwVHhQb3J0LT5wVHhkUmluZ1ByZXYsIHBUeGQpOwotCWlmICgocE9sZFR4ZC0+VEJDb250cm9sICYgQk1VX09XTikgPT0gMCkgewotCQlTS19PVVQ4KHBUeFBvcnQtPkh3QWRkciwgUV9DU1IsIENTUl9TVEFSVCk7Ci0JfQkKLQotCS8qIAotCSoqIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jaywgdGhlIHNrYiBtYXkgaW1tZWRpYXRlbHkgYmUgZnJlZSdkIAotCSovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcFR4UG9ydC0+VHhEZXNSaW5nTG9jaywgRmxhZ3MpOwotCWlmIChwVHhQb3J0LT5UeGRSaW5nRnJlZSAhPSAwKSB7Ci0JCXJldHVybiAoQnl0ZXNTZW5kKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKDApOwotCX0KLQotfSAvKiBYbWl0RnJhbWUgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCVhtaXRGcmFtZVNHIC0gZmlsbCBvbmUgc29ja2V0IGJ1ZmZlciBpbnRvIHRoZSB0cmFuc21pdCByaW5nCi0gKiAgICAgICAgICAgICAgICAodXNlIFNHIGFuZCBUQ1AvVURQIGhhcmR3YXJlIGNoZWNrc3VtbWluZykKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gcHV0cyBhIG1lc3NhZ2UgaW50byB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nCi0gKglpZiB0aGVyZSBpcyBhIGRlc2NyaXB0b3JzIGxlZnQuCi0gKgotICogUmV0dXJuczoKLSAqCT4gMCAtIG9uIHN1Y2NlczogdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZQotICoJPSAwIC0gb24gcmVzb3VyY2Ugc2hvcnRhZ2U6IHRoaXMgZnJhbWUgc2VudCBvciBkcm9wcGVkLCBub3cKLSAqCQl0aGUgcmluZyBpcyBmdWxsICggLT4gc2V0IHRidXN5KQotICoJPCAwIC0gb24gZmFpbHVyZTogb3RoZXIgcHJvYmxlbXMgKCAtPiByZXR1cm4gZmFpbHVyZSB0byB1cHBlciBsYXllcnMpCi0gKi8KLXN0YXRpYyBpbnQgWG1pdEZyYW1lU0coCi1TS19BQyAJCSpwQUMsCQkvKiBwb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAgICAgICAgICAgKi8KLVRYX1BPUlQJCSpwVHhQb3J0LAkvKiBwb2ludGVyIHRvIHN0cnVjdCBvZiBwb3J0IHRvIHNlbmQgdG8gKi8KLXN0cnVjdCBza19idWZmCSpwTWVzc2FnZSkJLyogcG9pbnRlciB0byBzZW5kLW1lc3NhZ2UgICAgICAgICAgICAgICovCi17Ci0KLQlUWEQJCSpwVHhkOwotCVRYRAkJKnBUeGRGc3Q7Ci0JVFhECQkqcFR4ZExzdDsKLQlpbnQgCSAJIEN1cnJGcmFnOwotCWludAkJIEJ5dGVzU2VuZDsKLQlza2JfZnJhZ190CSpza19mcmFnOwotCVNLX1U2NAkJIFBoeXNBZGRyOwotCXVuc2lnbmVkIGxvbmcJIEZsYWdzOwotCVNLX1UzMgkJIENvbnRyb2w7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcFR4UG9ydC0+VHhEZXNSaW5nTG9jaywgRmxhZ3MpOwotI2lmbmRlZiBVU0VfVFhfQ09NUExFVEUKLQlGcmVlVHhEZXNjcmlwdG9ycyhwQUMsIHBUeFBvcnQpOwotI2VuZGlmCi0JaWYgKChza2Jfc2hpbmZvKHBNZXNzYWdlKS0+bnJfZnJhZ3MgKzEpID4gcFR4UG9ydC0+VHhkUmluZ0ZyZWUpIHsKLQkJRnJlZVR4RGVzY3JpcHRvcnMocEFDLCBwVHhQb3J0KTsKLQkJaWYgKChza2Jfc2hpbmZvKHBNZXNzYWdlKS0+bnJfZnJhZ3MgKyAxKSA+IHBUeFBvcnQtPlR4ZFJpbmdGcmVlKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwVHhQb3J0LT5UeERlc1JpbmdMb2NrLCBGbGFncyk7Ci0JCQlTS19QTk1JX0NOVF9OT19UWF9CVUYocEFDLCBwVHhQb3J0LT5Qb3J0SW5kZXgpOwotCQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLAotCQkJCVNLX0RCR0NBVF9EUlZfVFhfUFJPR1JFU1MsCi0JCQkJKCJYbWl0RnJhbWVTRyBmYWlsZWQgLSBSaW5nIGZ1bGxcbiIpKTsKLQkJCQkvKiB0aGlzIG1lc3NhZ2UgY2FuIG5vdCBiZSBzZW50IG5vdyAqLwotCQkJcmV0dXJuKC0xKTsKLQkJfQotCX0KLQotCXBUeGQgICAgICA9IHBUeFBvcnQtPnBUeGRSaW5nSGVhZDsKLQlwVHhkRnN0ICAgPSBwVHhkOwotCXBUeGRMc3QgICA9IHBUeGQ7Ci0JQnl0ZXNTZW5kID0gMDsKLQotCS8qIAotCSoqIE1hcCB0aGUgZmlyc3QgZnJhZ21lbnQgKGhlYWRlcikgaW50byB0aGUgRE1BLXNwYWNlCi0JKi8KLQlQaHlzQWRkciA9IChTS19VNjQpIHBjaV9tYXBfcGFnZShwQUMtPlBjaURldiwKLQkJCXZpcnRfdG9fcGFnZShwTWVzc2FnZS0+ZGF0YSksCi0JCQkoKHVuc2lnbmVkIGxvbmcpIHBNZXNzYWdlLT5kYXRhICYgflBBR0VfTUFTSyksCi0JCQlza2JfaGVhZGxlbihwTWVzc2FnZSksCi0JCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQotCXBUeGQtPlZEYXRhTG93ICA9IChTS19VMzIpIChQaHlzQWRkciAmIDB4ZmZmZmZmZmYpOwotCXBUeGQtPlZEYXRhSGlnaCA9IChTS19VMzIpIChQaHlzQWRkciA+PiAzMik7Ci0KLQkvKiAKLQkqKiBEb2VzIHRoZSBIVyBuZWVkIHRvIGV2YWx1YXRlIGNoZWNrc3VtIGZvciBUQ1Agb3IgVURQIHBhY2tldHM/IAotCSovCi0JaWYgKHBNZXNzYWdlLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQl1MTYgaGRybGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQocE1lc3NhZ2UpOwotCQl1MTYgb2Zmc2V0ID0gaGRybGVuICsgcE1lc3NhZ2UtPmNzdW1fb2Zmc2V0OwotCi0JCUNvbnRyb2wgPSBCTVVfU1RGV0Q7Ci0KLQkJLyogCi0JCSoqIFdlIGhhdmUgdG8gdXNlIHRoZSBvcGNvZGUgZm9yIHRjcCBoZXJlLCAgYmVjYXVzZSB0aGUKLQkJKiogb3Bjb2RlIGZvciB1ZHAgaXMgbm90IHdvcmtpbmcgaW4gdGhlIGhhcmR3YXJlIHlldCAKLQkJKiogKFJldmlzaW9uIDIuMCkKLQkJKi8KLQkJaWYgKChpcGlwX2hkcihwTWVzc2FnZSktPnByb3RvY29sID09IElQUFJPVE9fVURQKSAmJgotCQkJKHBBQy0+R0luaS5HSUNoaXBSZXYgPT0gMCkgJiYKLQkJCShwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9ZVUtPTikpIHsKLQkJCUNvbnRyb2wgfD0gQk1VX1RDUF9DSEVDSzsKLQkJfSBlbHNlIHsKLQkJCUNvbnRyb2wgfD0gQk1VX1VEUF9DSEVDSzsKLQkJfQotCi0JCXBUeGQtPlRjcFN1bU9mcyA9IDA7Ci0JCXBUeGQtPlRjcFN1bVN0ICA9IGhkcmxlbjsKLQkJcFR4ZC0+VGNwU3VtV3IgID0gb2Zmc2V0OwotCX0gZWxzZQotCQlDb250cm9sID0gQk1VX0NIRUNLIHwgQk1VX1NXOwotCi0JcFR4ZC0+VEJDb250cm9sID0gQk1VX1NURiB8IENvbnRyb2wgfCBza2JfaGVhZGxlbihwTWVzc2FnZSk7Ci0KLQlwVHhkID0gcFR4ZC0+cE5leHRUeGQ7Ci0JcFR4UG9ydC0+VHhkUmluZ0ZyZWUtLTsKLQlCeXRlc1NlbmQgKz0gc2tiX2hlYWRsZW4ocE1lc3NhZ2UpOwotCi0JLyogCi0JKiogQnJvd3NlIG92ZXIgYWxsIFNHIGZyYWdtZW50cyBhbmQgbWFwIGVhY2ggb2YgdGhlbSBpbnRvIHRoZSBETUEgc3BhY2UKLQkqLwotCWZvciAoQ3VyckZyYWcgPSAwOyBDdXJyRnJhZyA8IHNrYl9zaGluZm8ocE1lc3NhZ2UpLT5ucl9mcmFnczsgQ3VyckZyYWcrKykgewotCQlza19mcmFnID0gJnNrYl9zaGluZm8ocE1lc3NhZ2UpLT5mcmFnc1tDdXJyRnJhZ107Ci0JCS8qIAotCQkqKiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHByb3BlciB2YWx1ZSBpbiBlbnRyeQotCQkqLwotCQlQaHlzQWRkciA9IChTS19VNjQpIHBjaV9tYXBfcGFnZShwQUMtPlBjaURldiwKLQkJCQkJCSBza19mcmFnLT5wYWdlLAotCQkJCQkJIHNrX2ZyYWctPnBhZ2Vfb2Zmc2V0LAotCQkJCQkJIHNrX2ZyYWctPnNpemUsCi0JCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJcFR4ZC0+VkRhdGFMb3cgID0gKFNLX1UzMikgKFBoeXNBZGRyICYgMHhmZmZmZmZmZik7Ci0JCXBUeGQtPlZEYXRhSGlnaCA9IChTS19VMzIpIChQaHlzQWRkciA+PiAzMik7Ci0JCXBUeGQtPnBNQnVmICAgICA9IHBNZXNzYWdlOwotCQkKLQkJcFR4ZC0+VEJDb250cm9sID0gQ29udHJvbCB8IEJNVV9PV04gfCBza19mcmFnLT5zaXplOwotCi0JCS8qIAotCQkqKiBEbyB3ZSBoYXZlIHRoZSBsYXN0IGZyYWdtZW50PyAKLQkJKi8KLQkJaWYoIChDdXJyRnJhZysxKSA9PSBza2Jfc2hpbmZvKHBNZXNzYWdlKS0+bnJfZnJhZ3MgKSAgewotI2lmZGVmIFVTRV9UWF9DT01QTEVURQotCQkJcFR4ZC0+VEJDb250cm9sIHw9IEJNVV9FT0YgfCBCTVVfSVJRX0VPRjsKLSNlbHNlCi0JCQlwVHhkLT5UQkNvbnRyb2wgfD0gQk1VX0VPRjsKLSNlbmRpZgotCQkJcFR4ZEZzdC0+VEJDb250cm9sIHw9IEJNVV9PV04gfCBCTVVfU1c7Ci0JCX0KLQkJcFR4ZExzdCA9IHBUeGQ7Ci0JCXBUeGQgICAgPSBwVHhkLT5wTmV4dFR4ZDsKLQkJcFR4UG9ydC0+VHhkUmluZ0ZyZWUtLTsKLQkJQnl0ZXNTZW5kICs9IHNrX2ZyYWctPnNpemU7Ci0JfQotCi0JLyogCi0JKiogSWYgcHJldmlvdXMgZGVzY3JpcHRvciBhbHJlYWR5IGRvbmUsIGdpdmUgVFggc3RhcnQgY21kIAotCSovCi0JaWYgKChwVHhQb3J0LT5wVHhkUmluZ1ByZXYtPlRCQ29udHJvbCAmIEJNVV9PV04pID09IDApIHsKLQkJU0tfT1VUOChwVHhQb3J0LT5Id0FkZHIsIFFfQ1NSLCBDU1JfU1RBUlQpOwotCX0KLQotCXBUeFBvcnQtPnBUeGRSaW5nUHJldiA9IHBUeGRMc3Q7Ci0JcFR4UG9ydC0+cFR4ZFJpbmdIZWFkID0gcFR4ZDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBUeFBvcnQtPlR4RGVzUmluZ0xvY2ssIEZsYWdzKTsKLQotCWlmIChwVHhQb3J0LT5UeGRSaW5nRnJlZSA+IDApIHsKLQkJcmV0dXJuIChCeXRlc1NlbmQpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJRnJlZVR4RGVzY3JpcHRvcnMgLSByZWxlYXNlIGRlc2NyaXB0b3JzIGZyb20gdGhlIGRlc2NyaXB0b3IgcmluZwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBkZXNjcmlwdG9ycyBmcm9tIGEgdHJhbnNtaXQgcmluZyBpZiB0aGV5Ci0gKgloYXZlIGJlZW4gc2VudCBieSB0aGUgQk1VLgotICoJSWYgYSBkZXNjcmlwdG9ycyBpcyBzZW50LCBpdCBjYW4gYmUgZnJlZWQgYW5kIHRoZSBtZXNzYWdlIGNhbgotICoJYmUgZnJlZWQsIHRvby4KLSAqCVRoZSBTT0ZUV0FSRSBjb250cm9sbGFibGUgYml0IGlzIHVzZWQgdG8gcHJldmVudCBydW5uaW5nIGFyb3VuZCBhCi0gKgljb21wbGV0ZWx5IGZyZWUgcmluZyBmb3IgZXZlci4gSWYgdGhpcyBiaXQgaXMgbm8gc2V0IGluIHRoZQotICoJZnJhbWUgKGJ5IFhtaXRGcmFtZSksIHRoaXMgZnJhbWUgaGFzIG5ldmVyIGJlZW4gc2VudCBvciBpcwotICoJYWxyZWFkeSBmcmVlZC4KLSAqCVRoZSBUeCBkZXNjcmlwdG9yIHJpbmcgbG9jayBtdXN0IGJlIGhlbGQgd2hpbGUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uICEhIQotICoKLSAqIFJldHVybnM6Ci0gKglub25lCi0gKi8KLXN0YXRpYyB2b2lkIEZyZWVUeERlc2NyaXB0b3JzKAotU0tfQUMJKnBBQywJCS8qIHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgY29udGV4dCAqLwotVFhfUE9SVAkqcFR4UG9ydCkJLyogcG9pbnRlciB0byBkZXN0aW5hdGlvbiBwb3J0IHN0cnVjdHVyZSAqLwotewotVFhECSpwVHhkOwkJLyogcG9pbnRlciB0byB0aGUgY2hlY2tlZCBkZXNjcmlwdG9yICovCi1UWEQJKnBOZXdUYWlsOwkvKiBwb2ludGVyIHRvICdlbmQnIG9mIHRoZSByaW5nICovCi1TS19VMzIJQ29udHJvbDsJLyogVEJDb250cm9sIGZpZWxkIG9mIGRlc2NyaXB0b3IgKi8KLVNLX1U2NAlQaHlzQWRkcjsJLyogYWRkcmVzcyBvZiBETUEgbWFwcGluZyAqLwotCi0JcE5ld1RhaWwgPSBwVHhQb3J0LT5wVHhkUmluZ1RhaWw7Ci0JcFR4ZCAgICAgPSBwTmV3VGFpbDsKLQkvKgotCSoqIGxvb3AgZm9yZXZlcjsgZXhpdHMgaWYgQk1VX1NXIGJpdCBub3Qgc2V0IGluIHN0YXJ0IGZyYW1lCi0JKiogb3IgQk1VX09XTiBiaXQgc2V0IGluIGFueSBmcmFtZQotCSovCi0Jd2hpbGUgKDEpIHsKLQkJQ29udHJvbCA9IHBUeGQtPlRCQ29udHJvbDsKLQkJaWYgKChDb250cm9sICYgQk1VX1NXKSA9PSAwKSB7Ci0JCQkvKgotCQkJKiogc29mdHdhcmUgY29udHJvbGxhYmxlIGJpdCBpcyBzZXQgaW4gZmlyc3QKLQkJCSoqIGZyYWdtZW50IHdoZW4gZ2l2ZW4gdG8gQk1VLiBOb3Qgc2V0IG1lYW5zIHRoYXQKLQkJCSoqIHRoaXMgZnJhZ21lbnQgd2FzIG5ldmVyIHNlbnQgb3IgaXMgYWxyZWFkeQotCQkJKiogZnJlZWQgKCAtPiByaW5nIGNvbXBsZXRlbHkgZnJlZSBub3cpLgotCQkJKi8KLQkJCXBUeFBvcnQtPnBUeGRSaW5nVGFpbCA9IHBUeGQ7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKHBBQy0+ZGV2W3BUeFBvcnQtPlBvcnRJbmRleF0pOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChDb250cm9sICYgQk1VX09XTikgewotCQkJcFR4UG9ydC0+cFR4ZFJpbmdUYWlsID0gcFR4ZDsKLQkJCWlmIChwVHhQb3J0LT5UeGRSaW5nRnJlZSA+IDApIHsKLQkJCQluZXRpZl93YWtlX3F1ZXVlKHBBQy0+ZGV2W3BUeFBvcnQtPlBvcnRJbmRleF0pOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQkvKiAKLQkJKiogcmVsZWFzZSB0aGUgRE1BIG1hcHBpbmcsIGJlY2F1c2UgdW50aWwgbm90IHVubWFwcGVkCi0JCSoqIHRoaXMgYnVmZmVyIGlzIGNvbnNpZGVyZWQgYmVpbmcgdW5kZXIgY29udHJvbCBvZiB0aGUKLQkJKiogYWRhcHRlciBjYXJkIQotCQkqLwotCQlQaHlzQWRkciA9ICgoU0tfVTY0KSBwVHhkLT5WRGF0YUhpZ2gpIDw8IChTS19VNjQpIDMyOwotCQlQaHlzQWRkciB8PSAoU0tfVTY0KSBwVHhkLT5WRGF0YUxvdzsKLQkJcGNpX3VubWFwX3BhZ2UocEFDLT5QY2lEZXYsIFBoeXNBZGRyLAotCQkJCSBwVHhkLT5wTUJ1Zi0+bGVuLAotCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCQlpZiAoQ29udHJvbCAmIEJNVV9FT0YpCi0JCQlERVZfS0ZSRUVfU0tCX0FOWShwVHhkLT5wTUJ1Zik7CS8qIGZyZWUgbWVzc2FnZSAqLwotCi0JCXBUeFBvcnQtPlR4ZFJpbmdGcmVlKys7Ci0JCXBUeGQtPlRCQ29udHJvbCAmPSB+Qk1VX1NXOwotCQlwVHhkID0gcFR4ZC0+cE5leHRUeGQ7IC8qIHBvaW50IGJlaGluZCBmcmFnbWVudCB3aXRoIEVPRiAqLwotCX0gLyogd2hpbGUoZm9yZXZlcikgKi8KLX0gLyogRnJlZVR4RGVzY3JpcHRvcnMgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCUZpbGxSeFJpbmcgLSBmaWxsIHRoZSByZWNlaXZlIHJpbmcgd2l0aCB2YWxpZCBkZXNjcmlwdG9ycwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgcmVjZWl2ZSByaW5nIGRlc2NyaXB0b3JzIHdpdGggZGF0YQotICoJc2VnbWVudHMgYW5kIG1ha2VzIHRoZW0gdmFsaWQgZm9yIHRoZSBCTVUuCi0gKglUaGUgYWN0aXZlIHJpbmcgaXMgZmlsbGVkIGNvbXBsZXRlbHksIGlmIHBvc3NpYmxlLgotICoJVGhlIG5vbi1hY3RpdmUgcmluZyBpcyBmaWxsZWQgb25seSBwYXJ0aWFsIHRvIHNhdmUgbWVtb3J5LgotICoKLSAqIERlc2NyaXB0aW9uIG9mIHJ4IHJpbmcgc3RydWN0dXJlOgotICoJaGVhZCAtIHBvaW50cyB0byB0aGUgZGVzY3JpcHRvciB3aGljaCB3aWxsIGJlIHVzZWQgbmV4dCBieSB0aGUgQk1VCi0gKgl0YWlsIC0gcG9pbnRzIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgdG8gZ2l2ZSB0byB0aGUgQk1VCi0gKgkKLSAqIFJldHVybnM6CU4vQQotICovCi1zdGF0aWMgdm9pZCBGaWxsUnhSaW5nKAotU0tfQUMJCSpwQUMsCQkvKiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIGNvbnRleHQgKi8KLVJYX1BPUlQJCSpwUnhQb3J0KQkvKiBwdHIgdG8gcG9ydCBzdHJ1Y3QgZm9yIHdoaWNoIHRoZSByaW5nCi0JCQkJICAgc2hvdWxkIGJlIGZpbGxlZCAqLwotewotdW5zaWduZWQgbG9uZwlGbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwUnhQb3J0LT5SeERlc1JpbmdMb2NrLCBGbGFncyk7Ci0Jd2hpbGUgKHBSeFBvcnQtPlJ4ZFJpbmdGcmVlID4gcFJ4UG9ydC0+UnhGaWxsTGltaXQpIHsKLQkJaWYoIUZpbGxSeERlc2NyaXB0b3IocEFDLCBwUnhQb3J0KSkKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwUnhQb3J0LT5SeERlc1JpbmdMb2NrLCBGbGFncyk7Ci19IC8qIEZpbGxSeFJpbmcgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJRmlsbFJ4RGVzY3JpcHRvciAtIGZpbGwgb25lIGJ1ZmZlciBpbnRvIHRoZSByZWNlaXZlIHJpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBuZXcgcmVjZWl2ZSBidWZmZXIgYW5kCi0gKglwdXRzIGl0IGludG8gdGhlIG5leHQgZGVzY3JpcHRvci4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfVFJVRSAtIGEgYnVmZmVyIHdhcyBhZGRlZCB0byB0aGUgcmluZwotICoJU0tfRkFMU0UgLSBhIGJ1ZmZlciBjb3VsZCBub3QgYmUgYWRkZWQKLSAqLwotc3RhdGljIFNLX0JPT0wgRmlsbFJ4RGVzY3JpcHRvcigKLVNLX0FDCQkqcEFDLAkJLyogcG9pbnRlciB0byB0aGUgYWRhcHRlciBjb250ZXh0IHN0cnVjdCAqLwotUlhfUE9SVAkJKnBSeFBvcnQpCS8qIHB0ciB0byBwb3J0IHN0cnVjdCBvZiByaW5nIHRvIGZpbGwgKi8KLXsKLXN0cnVjdCBza19idWZmCSpwTXNnQmxvY2s7CS8qIHBvaW50ZXIgdG8gYSBuZXcgbWVzc2FnZSBibG9jayAqLwotUlhECQkqcFJ4ZDsJCS8qIHRoZSByeGQgdG8gZmlsbCAqLwotU0tfVTE2CQlMZW5ndGg7CQkvKiBkYXRhIGZyYWdtZW50IGxlbmd0aCAqLwotU0tfVTY0CQlQaHlzQWRkcjsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBhIHJ4IGJ1ZmZlciAqLwotCi0JcE1zZ0Jsb2NrID0gYWxsb2Nfc2tiKHBBQy0+UnhCdWZTaXplLCBHRlBfQVRPTUlDKTsKLQlpZiAocE1zZ0Jsb2NrID09IE5VTEwpIHsKLQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLAotCQkJU0tfREJHQ0FUX0RSVl9FTlRSWSwKLQkJCSgiJXM6IEFsbG9jYXRpb24gb2YgcnggYnVmZmVyIGZhaWxlZCAhXG4iLAotCQkJcEFDLT5kZXZbcFJ4UG9ydC0+UG9ydEluZGV4XS0+bmFtZSkpOwotCQlTS19QTk1JX0NOVF9OT19SWF9CVUYocEFDLCBwUnhQb3J0LT5Qb3J0SW5kZXgpOwotCQlyZXR1cm4oU0tfRkFMU0UpOwotCX0KLQlza2JfcmVzZXJ2ZShwTXNnQmxvY2ssIDIpOyAvKiB0byBhbGlnbiBJUCBmcmFtZXMgKi8KLQkvKiBza2IgYWxsb2NhdGVkIG9rLCBzbyBhZGQgYnVmZmVyICovCi0JcFJ4ZCA9IHBSeFBvcnQtPnBSeGRSaW5nVGFpbDsKLQlwUnhQb3J0LT5wUnhkUmluZ1RhaWwgPSBwUnhkLT5wTmV4dFJ4ZDsKLQlwUnhQb3J0LT5SeGRSaW5nRnJlZS0tOwotCUxlbmd0aCA9IHBBQy0+UnhCdWZTaXplOwotCVBoeXNBZGRyID0gKFNLX1U2NCkgcGNpX21hcF9wYWdlKHBBQy0+UGNpRGV2LAotCQl2aXJ0X3RvX3BhZ2UocE1zZ0Jsb2NrLT5kYXRhKSwKLQkJKCh1bnNpZ25lZCBsb25nKSBwTXNnQmxvY2stPmRhdGEgJgotCQl+UEFHRV9NQVNLKSwKLQkJcEFDLT5SeEJ1ZlNpemUgLSAyLAotCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCi0JcFJ4ZC0+VkRhdGFMb3cgID0gKFNLX1UzMikgKFBoeXNBZGRyICYgMHhmZmZmZmZmZik7Ci0JcFJ4ZC0+VkRhdGFIaWdoID0gKFNLX1UzMikgKFBoeXNBZGRyID4+IDMyKTsKLQlwUnhkLT5wTUJ1ZiAgICAgPSBwTXNnQmxvY2s7Ci0JcFJ4ZC0+UkJDb250cm9sID0gQk1VX09XTiAgICAgICB8IAotCQkJICBCTVVfU1RGICAgICAgIHwgCi0JCQkgIEJNVV9JUlFfRU9GICAgfCAKLQkJCSAgQk1VX1RDUF9DSEVDSyB8IAotCQkJICBMZW5ndGg7Ci0JcmV0dXJuIChTS19UUlVFKTsKLQotfSAvKiBGaWxsUnhEZXNjcmlwdG9yICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCVJlUXVldWVSeEJ1ZmZlciAtIGZpbGwgb25lIGJ1ZmZlciBiYWNrIGludG8gdGhlIHJlY2VpdmUgcmluZwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRmlsbCBhIGdpdmVuIGJ1ZmZlciBiYWNrIGludG8gdGhlIHJ4IHJpbmcuIFRoZSBidWZmZXIKLSAqCWhhcyBiZWVuIHByZXZpb3VzbHkgYWxsb2NhdGVkIGFuZCBhbGlnbmVkLCBhbmQgaXRzIHBoeXMuCi0gKglhZGRyZXNzIGNhbGN1bGF0ZWQsIHNvIHRoaXMgaXMgbm8gbW9yZSBuZWNlc3NhcnkuCi0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXN0YXRpYyB2b2lkIFJlUXVldWVSeEJ1ZmZlcigKLVNLX0FDCQkqcEFDLAkJLyogcG9pbnRlciB0byB0aGUgYWRhcHRlciBjb250ZXh0IHN0cnVjdCAqLwotUlhfUE9SVAkJKnBSeFBvcnQsCS8qIHB0ciB0byBwb3J0IHN0cnVjdCBvZiByaW5nIHRvIGZpbGwgKi8KLXN0cnVjdCBza19idWZmCSpwTXNnLAkJLyogcG9pbnRlciB0byB0aGUgYnVmZmVyICovCi1TS19VMzIJCVBoeXNIaWdoLAkvKiBwaHlzIGFkZHJlc3MgaGlnaCBkd29yZCAqLwotU0tfVTMyCQlQaHlzTG93KQkvKiBwaHlzIGFkZHJlc3MgbG93IGR3b3JkICovCi17Ci1SWEQJCSpwUnhkOwkJLyogdGhlIHJ4ZCB0byBmaWxsICovCi1TS19VMTYJCUxlbmd0aDsJCS8qIGRhdGEgZnJhZ21lbnQgbGVuZ3RoICovCi0KLQlwUnhkID0gcFJ4UG9ydC0+cFJ4ZFJpbmdUYWlsOwotCXBSeFBvcnQtPnBSeGRSaW5nVGFpbCA9IHBSeGQtPnBOZXh0UnhkOwotCXBSeFBvcnQtPlJ4ZFJpbmdGcmVlLS07Ci0JTGVuZ3RoID0gcEFDLT5SeEJ1ZlNpemU7Ci0KLQlwUnhkLT5WRGF0YUxvdyAgPSBQaHlzTG93OwotCXBSeGQtPlZEYXRhSGlnaCA9IFBoeXNIaWdoOwotCXBSeGQtPnBNQnVmICAgICA9IHBNc2c7Ci0JcFJ4ZC0+UkJDb250cm9sID0gQk1VX09XTiAgICAgICB8IAotCQkJICBCTVVfU1RGICAgICAgIHwKLQkJCSAgQk1VX0lSUV9FT0YgICB8IAotCQkJICBCTVVfVENQX0NIRUNLIHwgCi0JCQkgIExlbmd0aDsKLQlyZXR1cm47Ci19IC8qIFJlUXVldWVSeEJ1ZmZlciAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJUmVjZWl2ZUlycSAtIGhhbmRsZSBhIHJlY2VpdmUgSVJRCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcmVjZWl2ZSBJUlEgaXMgc2V0LgotICoJSXQgd2Fsa3MgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nIGFuZCBzZW5kcyB1cCBhbGwKLSAqCWZyYW1lcyB0aGF0IGFyZSBjb21wbGV0ZS4KLSAqCi0gKiBSZXR1cm5zOglOL0EKLSAqLwotc3RhdGljIHZvaWQgUmVjZWl2ZUlycSgKLQlTS19BQwkJKnBBQywJCQkvKiBwb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotCVJYX1BPUlQJCSpwUnhQb3J0LAkJLyogcG9pbnRlciB0byByZWNlaXZlIHBvcnQgc3RydWN0ICovCi0JU0tfQk9PTAkJU2xvd1BhdGhMb2NrKQkvKiBpbmRpY2F0ZXMgaWYgU2xvd1BhdGhMb2NrIGlzIG5lZWRlZCAqLwotewotUlhECQkJCSpwUnhkOwkJCS8qIHBvaW50ZXIgdG8gcmVjZWl2ZSBkZXNjcmlwdG9ycyAqLwotU0tfVTMyCQkJQ29udHJvbDsJCS8qIGNvbnRyb2wgZmllbGQgb2YgZGVzY3JpcHRvciAqLwotc3RydWN0IHNrX2J1ZmYJKnBNc2c7CQkJLyogcG9pbnRlciB0byBtZXNzYWdlIGhvbGRpbmcgZnJhbWUgKi8KLXN0cnVjdCBza19idWZmCSpwTmV3TXNnOwkJLyogcG9pbnRlciB0byBhIG5ldyBtZXNzYWdlIGZvciBjb3B5aW5nIGZyYW1lICovCi1pbnQJCQkJRnJhbWVMZW5ndGg7CS8qIHRvdGFsIGxlbmd0aCBvZiByZWNlaXZlZCBmcmFtZSAqLwotU0tfTUJVRgkJCSpwUmxtdE1idWY7CQkvKiBwdHIgdG8gYSBidWZmZXIgZm9yIGdpdmluZyBhIGZyYW1lIHRvIHJsbXQgKi8KLVNLX0VWUEFSQQkJRXZQYXJhOwkJCS8qIGFuIGV2ZW50IHBhcmFtZXRlciB1bmlvbiAqLwkKLXVuc2lnbmVkIGxvbmcJRmxhZ3M7CQkJLyogZm9yIHNwaW4gbG9jayAqLwotaW50CQkJCVBvcnRJbmRleCA9IHBSeFBvcnQtPlBvcnRJbmRleDsKLXVuc2lnbmVkIGludAlPZmZzZXQ7Ci11bnNpZ25lZCBpbnQJTnVtQnl0ZXM7Ci11bnNpZ25lZCBpbnQJRm9yUmxtdDsKLVNLX0JPT0wJCQlJc0JjOwotU0tfQk9PTAkJCUlzTWM7Ci1TS19CT09MICBJc0JhZEZyYW1lOyAJCQkvKiBCYWQgZnJhbWUgKi8KLQotU0tfVTMyCQkJRnJhbWVTdGF0OwotU0tfVTY0CQkJUGh5c0FkZHI7Ci0KLXJ4X3N0YXJ0OgkKLQkvKiBkbyBmb3JldmVyOyBleGl0IGlmIEJNVV9PV04gZm91bmQgKi8KLQlmb3IgKCBwUnhkID0gcFJ4UG9ydC0+cFJ4ZFJpbmdIZWFkIDsKLQkJICBwUnhQb3J0LT5SeGRSaW5nRnJlZSA8IHBBQy0+UnhEZXNjclBlclJpbmcgOwotCQkgIHBSeGQgPSBwUnhkLT5wTmV4dFJ4ZCwKLQkJICBwUnhQb3J0LT5wUnhkUmluZ0hlYWQgPSBwUnhkLAotCQkgIHBSeFBvcnQtPlJ4ZFJpbmdGcmVlICsrKSB7Ci0KLQkJLyoKLQkJICogRm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBsb29wCi0JCSAqIEdvIHRocm91Z2ggZXZlcnkgZGVzY3JpcHRvciBiZWdpbm5pbmcgYXQgdGhlIGhlYWQKLQkJICogUGxlYXNlIG5vdGU6IHRoZSByaW5nIG1pZ2h0IGJlIGNvbXBsZXRlbHkgcmVjZWl2ZWQgc28gdGhlIE9XTiBiaXQKLQkJICogc2V0IGlzIG5vdCBhIGdvb2QgY3JpcnRlcmlhIHRvIGxlYXZlIHRoYXQgbG9vcC4KLQkJICogVGhlcmVmb3JlIHRoZSBSaW5nRnJlZSBjb3VudGVyIGlzIHVzZWQuCi0JCSAqIE9uIGVudHJ5IG9mIHRoaXMgbG9vcCBwUnhkIGlzIGEgcG9pbnRlciB0byB0aGUgUnhkIHRoYXQgbmVlZHMKLQkJICogdG8gYmUgY2hlY2tlZCBuZXh0LgotCQkgKi8KLQotCQlDb250cm9sID0gcFJ4ZC0+UkJDb250cm9sOwotCQotCQkvKiBjaGVjayBpZiB0aGlzIGRlc2NyaXB0b3IgaXMgcmVhZHkgKi8KLQkJaWYgKChDb250cm9sICYgQk1VX09XTikgIT0gMCkgewotCQkJLyogdGhpcyBkZXNjcmlwdG9yIGlzIG5vdCB5ZXQgcmVhZHkgKi8KLQkJCS8qIFRoaXMgaXMgdGhlIHVzdWFsIGVuZCBvZiB0aGUgbG9vcCAqLwotCQkJLyogV2UgZG9uJ3QgbmVlZCB0byBzdGFydCB0aGUgcmluZyBhZ2FpbiAqLwotCQkJRmlsbFJ4UmluZyhwQUMsIHBSeFBvcnQpOwotCQkJcmV0dXJuOwotCQl9Ci0gICAgICAgICAgICAgICAgcEFDLT5EeW5JcnFNb2RJbmZvLk5iclByb2Nlc3NlZERlc2NyKys7Ci0KLQkJLyogZ2V0IGxlbmd0aCBvZiBmcmFtZSBhbmQgY2hlY2sgaXQgKi8KLQkJRnJhbWVMZW5ndGggPSBDb250cm9sICYgQk1VX0JCQzsKLQkJaWYgKEZyYW1lTGVuZ3RoID4gcEFDLT5SeEJ1ZlNpemUpIHsKLQkJCWdvdG8gcnhfZmFpbGVkOwotCQl9Ci0KLQkJLyogY2hlY2sgZm9yIFNURiBhbmQgRU9GICovCi0JCWlmICgoQ29udHJvbCAmIChCTVVfU1RGIHwgQk1VX0VPRikpICE9IChCTVVfU1RGIHwgQk1VX0VPRikpIHsKLQkJCWdvdG8gcnhfZmFpbGVkOwotCQl9Ci0KLQkJLyogaGVyZSB3ZSBoYXZlIGEgY29tcGxldGUgZnJhbWUgaW4gdGhlIHJpbmcgKi8KLQkJcE1zZyA9IHBSeGQtPnBNQnVmOwotCi0JCUZyYW1lU3RhdCA9IHBSeGQtPkZyYW1lU3RhdDsKLQotCQkvKiBjaGVjayBmb3IgZnJhbWUgbGVuZ3RoIG1pc21hdGNoICovCi0jZGVmaW5lIFhNUl9GU19MRU5fU0hJRlQgICAgICAgIDE4Ci0jZGVmaW5lIEdNUl9GU19MRU5fU0hJRlQgICAgICAgIDE2Ci0JCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7Ci0JCQlpZiAoRnJhbWVMZW5ndGggIT0gKFNLX1UzMikgKEZyYW1lU3RhdCA+PiBYTVJfRlNfTEVOX1NISUZUKSkgewotCQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQkJU0tfREJHQ0FUX0RSVl9SWF9QUk9HUkVTUywKLQkJCQkJKCJza2dlOiBGcmFtZSBsZW5ndGggbWlzbWF0Y2ggKCV1LyV1KS5cbiIsCi0JCQkJCUZyYW1lTGVuZ3RoLAotCQkJCQkoU0tfVTMyKSAoRnJhbWVTdGF0ID4+IFhNUl9GU19MRU5fU0hJRlQpKSk7Ci0JCQkJZ290byByeF9mYWlsZWQ7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoRnJhbWVMZW5ndGggIT0gKFNLX1UzMikgKEZyYW1lU3RhdCA+PiBHTVJfRlNfTEVOX1NISUZUKSkgewotCQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwKLQkJCQkJU0tfREJHQ0FUX0RSVl9SWF9QUk9HUkVTUywKLQkJCQkJKCJza2dlOiBGcmFtZSBsZW5ndGggbWlzbWF0Y2ggKCV1LyV1KS5cbiIsCi0JCQkJCUZyYW1lTGVuZ3RoLAotCQkJCQkoU0tfVTMyKSAoRnJhbWVTdGF0ID4+IFhNUl9GU19MRU5fU0hJRlQpKSk7Ci0JCQkJZ290byByeF9mYWlsZWQ7Ci0JCQl9Ci0JCX0KLQotCQkvKiBTZXQgUnggU3RhdHVzICovCi0JCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7Ci0JCQlJc0JjID0gKEZyYW1lU3RhdCAmIFhNUl9GU19CQykgIT0gMDsKLQkJCUlzTWMgPSAoRnJhbWVTdGF0ICYgWE1SX0ZTX01DKSAhPSAwOwotCQkJSXNCYWRGcmFtZSA9IChGcmFtZVN0YXQgJgotCQkJCShYTVJfRlNfQU5ZX0VSUiB8IFhNUl9GU18yTF9WTEFOKSkgIT0gMDsKLQkJfSBlbHNlIHsKLQkJCUlzQmMgPSAoRnJhbWVTdGF0ICYgR01SX0ZTX0JDKSAhPSAwOwotCQkJSXNNYyA9IChGcmFtZVN0YXQgJiBHTVJfRlNfTUMpICE9IDA7Ci0JCQlJc0JhZEZyYW1lID0gKCgoRnJhbWVTdGF0ICYgR01SX0ZTX0FOWV9FUlIpICE9IDApIHx8Ci0JCQkJCQkJKChGcmFtZVN0YXQgJiBHTVJfRlNfUlhfT0spID09IDApKTsKLQkJfQotCi0JCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgMCwKLQkJCSgiUmVjZWl2ZWQgZnJhbWUgb2YgbGVuZ3RoICVkIG9uIHBvcnQgJWRcbiIsCi0JCQlGcmFtZUxlbmd0aCwgUG9ydEluZGV4KSk7Ci0JCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgMCwKLQkJCSgiTnVtYmVyIG9mIGZyZWUgcnggZGVzY3JpcHRvcnM6ICVkXG4iLAotCQkJcFJ4UG9ydC0+UnhkUmluZ0ZyZWUpKTsKLS8qIER1bXBNc2cocE1zZywgIlJ4Iik7CSovCi0KLQkJaWYgKChDb250cm9sICYgQk1VX1NUQVRfVkFMKSAhPSBCTVVfU1RBVF9WQUwgfHwgKElzQmFkRnJhbWUpKSB7Ci0jaWYgMAotCQkJKEZyYW1lU3RhdCAmIChYTVJfRlNfQU5ZX0VSUiB8IFhNUl9GU18yTF9WTEFOKSkgIT0gMCkgewotI2VuZGlmCi0JCQkvKiB0aGVyZSBpcyBhIHJlY2VpdmUgZXJyb3IgaW4gdGhpcyBmcmFtZSAqLwotCQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLAotCQkJCVNLX0RCR0NBVF9EUlZfUlhfUFJPR1JFU1MsCi0JCQkJKCJza2dlOiBFcnJvciBpbiByZWNlaXZlZCBmcmFtZSwgZHJvcHBlZCFcbiIKLQkJCQkiQ29udHJvbDogJXhcblJ4U3RhdDogJXhcbiIsCi0JCQkJQ29udHJvbCwgRnJhbWVTdGF0KSk7Ci0KLQkJCVJlUXVldWVSeEJ1ZmZlcihwQUMsIHBSeFBvcnQsIHBNc2csCi0JCQkJcFJ4ZC0+VkRhdGFIaWdoLCBwUnhkLT5WRGF0YUxvdyk7Ci0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogaWYgc2hvcnQgZnJhbWUgdGhlbiBjb3B5IGRhdGEgdG8gcmVkdWNlIG1lbW9yeSB3YXN0ZQotCQkgKi8KLQkJaWYgKChGcmFtZUxlbmd0aCA8IFNLX0NPUFlfVEhSRVNIT0xEKSAmJgotCQkJKChwTmV3TXNnID0gYWxsb2Nfc2tiKEZyYW1lTGVuZ3RoKzIsIEdGUF9BVE9NSUMpKSAhPSBOVUxMKSkgewotCQkJLyoKLQkJCSAqIFNob3J0IGZyYW1lIGRldGVjdGVkIGFuZCBhbGxvY2F0aW9uIHN1Y2Nlc3NmdWxsCi0JCQkgKi8KLQkJCS8qIHVzZSBuZXcgc2tiIGFuZCBjb3B5IGRhdGEgKi8KLQkJCXNrYl9yZXNlcnZlKHBOZXdNc2csIDIpOwotCQkJc2tiX3B1dChwTmV3TXNnLCBGcmFtZUxlbmd0aCk7Ci0JCQlQaHlzQWRkciA9ICgoU0tfVTY0KSBwUnhkLT5WRGF0YUhpZ2gpIDw8IChTS19VNjQpMzI7Ci0JCQlQaHlzQWRkciB8PSAoU0tfVTY0KSBwUnhkLT5WRGF0YUxvdzsKLQotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHBBQy0+UGNpRGV2LAotCQkJCQkJICAgIChkbWFfYWRkcl90KSBQaHlzQWRkciwKLQkJCQkJCSAgICBGcmFtZUxlbmd0aCwKLQkJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEocE5ld01zZywgcE1zZywgRnJhbWVMZW5ndGgpOwotCi0JCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocEFDLT5QY2lEZXYsCi0JCQkJCQkgICAgICAgKGRtYV9hZGRyX3QpIFBoeXNBZGRyLAotCQkJCQkJICAgICAgIEZyYW1lTGVuZ3RoLAotCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlSZVF1ZXVlUnhCdWZmZXIocEFDLCBwUnhQb3J0LCBwTXNnLAotCQkJCXBSeGQtPlZEYXRhSGlnaCwgcFJ4ZC0+VkRhdGFMb3cpOwotCi0JCQlwTXNnID0gcE5ld01zZzsKLQotCQl9Ci0JCWVsc2UgewotCQkJLyoKLQkJCSAqIGlmIGxhcmdlIGZyYW1lLCBvciBTS0IgYWxsb2NhdGlvbiBmYWlsZWQsIHBhc3MKLQkJCSAqIHRoZSBTS0IgZGlyZWN0bHkgdG8gdGhlIG5ldHdvcmtpbmcKLQkJCSAqLwotCi0JCQlQaHlzQWRkciA9ICgoU0tfVTY0KSBwUnhkLT5WRGF0YUhpZ2gpIDw8IChTS19VNjQpMzI7Ci0JCQlQaHlzQWRkciB8PSAoU0tfVTY0KSBwUnhkLT5WRGF0YUxvdzsKLQotCQkJLyogcmVsZWFzZSB0aGUgRE1BIG1hcHBpbmcgKi8KLQkJCXBjaV91bm1hcF9zaW5nbGUocEFDLT5QY2lEZXYsCi0JCQkJCSBQaHlzQWRkciwKLQkJCQkJIHBBQy0+UnhCdWZTaXplIC0gMiwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KLQkJCS8qIHNldCBsZW5ndGggaW4gbWVzc2FnZSAqLwotCQkJc2tiX3B1dChwTXNnLCBGcmFtZUxlbmd0aCk7Ci0JCX0gLyogZnJhbWUgPiBTS19DT1BZX1RSRVNIT0xEICovCi0KLSNpZmRlZiBVU0VfU0tfUlhfQ0hFQ0tTVU0KLQkJcE1zZy0+Y3N1bSA9IHBSeGQtPlRjcFN1bXMgJiAweGZmZmY7Ci0JCXBNc2ctPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwotI2Vsc2UKLQkJcE1zZy0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLSNlbmRpZgotCi0JCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwJMSwoIlYiKSk7Ci0JCUZvclJsbXQgPSBTS19STE1UX1JYX1BST1RPQ09MOwotI2lmIDAKLQkJSXNCYyA9IChGcmFtZVN0YXQgJiBYTVJfRlNfQkMpPT1YTVJfRlNfQkM7Ci0jZW5kaWYKLQkJU0tfUkxNVF9QUkVfTE9PS0FIRUFEKHBBQywgUG9ydEluZGV4LCBGcmFtZUxlbmd0aCwKLQkJCUlzQmMsICZPZmZzZXQsICZOdW1CeXRlcyk7Ci0JCWlmIChOdW1CeXRlcyAhPSAwKSB7Ci0jaWYgMAotCQkJSXNNYyA9IChGcmFtZVN0YXQgJiBYTVJfRlNfTUMpPT1YTVJfRlNfTUM7Ci0jZW5kaWYKLQkJCVNLX1JMTVRfTE9PS0FIRUFEKHBBQywgUG9ydEluZGV4LAotCQkJCSZwTXNnLT5kYXRhW09mZnNldF0sCi0JCQkJSXNCYywgSXNNYywgJkZvclJsbXQpOwotCQl9Ci0JCWlmIChGb3JSbG10ID09IFNLX1JMTVRfUlhfUFJPVE9DT0wpIHsKLQkJCQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLAkxLCgiVyIpKTsKLQkJCS8qIHNlbmQgdXAgb25seSBmcmFtZXMgZnJvbSBhY3RpdmUgcG9ydCAqLwotCQkJaWYgKChQb3J0SW5kZXggPT0gcEFDLT5BY3RpdmVQb3J0KSB8fAotCQkJCShwQUMtPlJsbXROZXRzID09IDIpKSB7Ci0JCQkJLyogZnJhbWUgZm9yIHVwcGVyIGxheWVyICovCi0JCQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCAxLCgiVSIpKTsKLSNpZmRlZiB4REVCVUcKLQkJCQlEdW1wTXNnKHBNc2csICJSeCIpOwotI2VuZGlmCi0JCQkJU0tfUE5NSV9DTlRfUlhfT0NURVRTX0RFTElWRVJFRChwQUMsCi0JCQkJCUZyYW1lTGVuZ3RoLCBwUnhQb3J0LT5Qb3J0SW5kZXgpOwotCi0JCQkJcE1zZy0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhwTXNnLAotCQkJCQlwQUMtPmRldltwUnhQb3J0LT5Qb3J0SW5kZXhdKTsKLQkJCQluZXRpZl9yeChwTXNnKTsKLQkJCQlwQUMtPmRldltwUnhQb3J0LT5Qb3J0SW5kZXhdLT5sYXN0X3J4ID0gamlmZmllczsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8qIGRyb3AgZnJhbWUgKi8KLQkJCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCi0JCQkJCVNLX0RCR0NBVF9EUlZfUlhfUFJPR1JFU1MsCi0JCQkJCSgiRCIpKTsKLQkJCQlERVZfS0ZSRUVfU0tCKHBNc2cpOwotCQkJfQotCQkJCi0JCX0gLyogaWYgbm90IGZvciBybG10ICovCi0JCWVsc2UgewotCQkJLyogcGFja2V0IGZvciBybG10ICovCi0JCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCi0JCQkJU0tfREJHQ0FUX0RSVl9SWF9QUk9HUkVTUywgKCJSIikpOwotCQkJcFJsbXRNYnVmID0gU2tEcnZBbGxvY1JsbXRNYnVmKHBBQywKLQkJCQlwQUMtPklvQmFzZSwgRnJhbWVMZW5ndGgpOwotCQkJaWYgKHBSbG10TWJ1ZiAhPSBOVUxMKSB7Ci0JCQkJcFJsbXRNYnVmLT5wTmV4dCA9IE5VTEw7Ci0JCQkJcFJsbXRNYnVmLT5MZW5ndGggPSBGcmFtZUxlbmd0aDsKLQkJCQlwUmxtdE1idWYtPlBvcnRJZHggPSBQb3J0SW5kZXg7Ci0JCQkJRXZQYXJhLnBQYXJhUHRyID0gcFJsbXRNYnVmOwotCQkJCW1lbWNweSgoY2hhciopKHBSbG10TWJ1Zi0+cERhdGEpLAotCQkJCQkgICAoY2hhciopKHBNc2ctPmRhdGEpLAotCQkJCQkgICBGcmFtZUxlbmd0aCk7Ci0KLQkJCQkvKiBTbG93UGF0aExvY2sgbmVlZGVkPyAqLwotCQkJCWlmIChTbG93UGF0aExvY2sgPT0gU0tfVFJVRSkgewotCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQkJCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9STE1ULAotCQkJCQkJU0tfUkxNVF9QQUNLRVRfUkVDRUlWRUQsCi0JCQkJCQlFdlBhcmEpOwotCQkJCQlwQUMtPkNoZWNrUXVldWUgPSBTS19UUlVFOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwKLQkJCQkJCVNLX1JMTVRfUEFDS0VUX1JFQ0VJVkVELAotCQkJCQkJRXZQYXJhKTsKLQkJCQkJcEFDLT5DaGVja1F1ZXVlID0gU0tfVFJVRTsKLQkJCQl9Ci0KLQkJCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsCi0JCQkJCVNLX0RCR0NBVF9EUlZfUlhfUFJPR1JFU1MsCi0JCQkJCSgiUSIpKTsKLQkJCX0KLQkJCWlmICgocEFDLT5kZXZbcFJ4UG9ydC0+UG9ydEluZGV4XS0+ZmxhZ3MgJgotCQkJCShJRkZfUFJPTUlTQyB8IElGRl9BTExNVUxUSSkpICE9IDAgfHwKLQkJCQkoRm9yUmxtdCAmIFNLX1JMTVRfUlhfUFJPVE9DT0wpID09Ci0JCQkJU0tfUkxNVF9SWF9QUk9UT0NPTCkgewotCQkJCXBNc2ctPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocE1zZywKLQkJCQkJcEFDLT5kZXZbcFJ4UG9ydC0+UG9ydEluZGV4XSk7Ci0JCQkJbmV0aWZfcngocE1zZyk7Ci0JCQkJcEFDLT5kZXZbcFJ4UG9ydC0+UG9ydEluZGV4XS0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlERVZfS0ZSRUVfU0tCKHBNc2cpOwotCQkJfQotCi0JCX0gLyogaWYgcGFja2V0IGZvciBybG10ICovCi0JfSAvKiBmb3IgLi4uIHNjYW5uaW5nIHRoZSBSWEQgcmluZyAqLwotCi0JLyogUlhEIHJpbmcgaXMgZW1wdHkgLT4gZmlsbCBhbmQgcmVzdGFydCAqLwotCUZpbGxSeFJpbmcocEFDLCBwUnhQb3J0KTsKLQkvKiBkbyBub3Qgc3RhcnQgaWYgY2FsbGVkIGZyb20gQ2xvc2UgKi8KLQlpZiAocEFDLT5Cb2FyZExldmVsID4gU0tfSU5JVF9EQVRBKSB7Ci0JCUNsZWFyQW5kU3RhcnRSeChwQUMsIFBvcnRJbmRleCk7Ci0JfQotCXJldHVybjsKLQotcnhfZmFpbGVkOgotCS8qIHJlbW92ZSBlcnJvciBmcmFtZSAqLwotCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9FUlJPUiwKLQkJKCJTY2hyb3R0ZGVzY3JpcHRvciwgbGVuZ3RoOiAweCV4XG4iLCBGcmFtZUxlbmd0aCkpOwotCi0JLyogcmVsZWFzZSB0aGUgRE1BIG1hcHBpbmcgKi8KLQotCVBoeXNBZGRyID0gKChTS19VNjQpIHBSeGQtPlZEYXRhSGlnaCkgPDwgKFNLX1U2NCkzMjsKLQlQaHlzQWRkciB8PSAoU0tfVTY0KSBwUnhkLT5WRGF0YUxvdzsKLQlwY2lfdW5tYXBfcGFnZShwQUMtPlBjaURldiwKLQkJCSBQaHlzQWRkciwKLQkJCSBwQUMtPlJ4QnVmU2l6ZSAtIDIsCi0JCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlERVZfS0ZSRUVfU0tCX0lSUShwUnhkLT5wTUJ1Zik7Ci0JcFJ4ZC0+cE1CdWYgPSBOVUxMOwotCXBSeFBvcnQtPlJ4ZFJpbmdGcmVlKys7Ci0JcFJ4UG9ydC0+cFJ4ZFJpbmdIZWFkID0gcFJ4ZC0+cE5leHRSeGQ7Ci0JZ290byByeF9zdGFydDsKLQotfSAvKiBSZWNlaXZlSXJxICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCUNsZWFyQW5kU3RhcnRSeCAtIGdpdmUgYSBzdGFydCByZWNlaXZlIGNvbW1hbmQgdG8gQk1VLCBjbGVhciBJUlEKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzdGFydCBjb21tYW5kIGFuZCBhIGNsZWFyIGludGVycnVwdAotICoJY29tbWFuZCBmb3Igb25lIHJlY2VpdmUgcXVldWUgdG8gdGhlIEJNVS4KLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqCW5vbmUKLSAqLwotc3RhdGljIHZvaWQgQ2xlYXJBbmRTdGFydFJ4KAotU0tfQUMJKnBBQywJCS8qIHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgY29udGV4dCAqLwotaW50CVBvcnRJbmRleCkJLyogaW5kZXggb2YgdGhlIHJlY2VpdmUgcG9ydCAoWE1BQykgKi8KLXsKLQlTS19PVVQ4KHBBQy0+SW9CYXNlLAotCQlSeFF1ZXVlQWRkcltQb3J0SW5kZXhdK1FfQ1NSLAotCQlDU1JfU1RBUlQgfCBDU1JfSVJRX0NMX0YpOwotfSAvKiBDbGVhckFuZFN0YXJ0UnggKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJQ2xlYXJUeElycSAtIGdpdmUgYSBjbGVhciB0cmFuc21pdCBJUlEgY29tbWFuZCB0byBCTVUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gc2VuZHMgYSBjbGVhciB0eCBJUlEgY29tbWFuZCBmb3Igb25lCi0gKgl0cmFuc21pdCBxdWV1ZSB0byB0aGUgQk1VLgotICoKLSAqIFJldHVybnM6IE4vQQotICovCi1zdGF0aWMgdm9pZCBDbGVhclR4SXJxKAotU0tfQUMJKnBBQywJCS8qIHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgY29udGV4dCAqLwotaW50CVBvcnRJbmRleCwJLyogaW5kZXggb2YgdGhlIHRyYW5zbWl0IHBvcnQgKFhNQUMpICovCi1pbnQJUHJpbykJCS8qIHByaW9yaXR5IG9yIG5vcm1hbCBxdWV1ZSAqLwotewotCVNLX09VVDgocEFDLT5Jb0Jhc2UsIAotCQlUeFF1ZXVlQWRkcltQb3J0SW5kZXhdW1ByaW9dK1FfQ1NSLAotCQlDU1JfSVJRX0NMX0YpOwotfSAvKiBDbGVhclR4SXJxICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCUNsZWFyUnhSaW5nIC0gcmVtb3ZlIGFsbCBidWZmZXJzIGZyb20gdGhlIHJlY2VpdmUgcmluZwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCByZWNlaXZlIGJ1ZmZlcnMgZnJvbSB0aGUgcmluZy4KLSAqCVRoZSByZWNlaXZlIEJNVSBtdXN0IGJlIHN0b3BwZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotc3RhdGljIHZvaWQgQ2xlYXJSeFJpbmcoCi1TS19BQwkqcEFDLAkJLyogcG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVJYX1BPUlQJKnBSeFBvcnQpCS8qIHBvaW50ZXIgdG8gcnggcG9ydCBzdHJ1Y3QgKi8KLXsKLVJYRAkJKnBSeGQ7CS8qIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGVzY3JpcHRvciAqLwotdW5zaWduZWQgbG9uZwlGbGFnczsKLVNLX1U2NAkJUGh5c0FkZHI7Ci0KLQlpZiAocFJ4UG9ydC0+UnhkUmluZ0ZyZWUgPT0gcEFDLT5SeERlc2NyUGVyUmluZykgewotCQlyZXR1cm47Ci0JfQotCXNwaW5fbG9ja19pcnFzYXZlKCZwUnhQb3J0LT5SeERlc1JpbmdMb2NrLCBGbGFncyk7Ci0JcFJ4ZCA9IHBSeFBvcnQtPnBSeGRSaW5nSGVhZDsKLQlkbyB7Ci0JCWlmIChwUnhkLT5wTUJ1ZiAhPSBOVUxMKSB7Ci0KLQkJCVBoeXNBZGRyID0gKChTS19VNjQpIHBSeGQtPlZEYXRhSGlnaCkgPDwgKFNLX1U2NCkzMjsKLQkJCVBoeXNBZGRyIHw9IChTS19VNjQpIHBSeGQtPlZEYXRhTG93OwotCQkJcGNpX3VubWFwX3BhZ2UocEFDLT5QY2lEZXYsCi0JCQkJCSBQaHlzQWRkciwKLQkJCQkJIHBBQy0+UnhCdWZTaXplIC0gMiwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlERVZfS0ZSRUVfU0tCKHBSeGQtPnBNQnVmKTsKLQkJCXBSeGQtPnBNQnVmID0gTlVMTDsKLQkJfQotCQlwUnhkLT5SQkNvbnRyb2wgJj0gQk1VX09XTjsKLQkJcFJ4ZCA9IHBSeGQtPnBOZXh0UnhkOwotCQlwUnhQb3J0LT5SeGRSaW5nRnJlZSsrOwotCX0gd2hpbGUgKHBSeGQgIT0gcFJ4UG9ydC0+cFJ4ZFJpbmdUYWlsKTsKLQlwUnhQb3J0LT5wUnhkUmluZ1RhaWwgPSBwUnhQb3J0LT5wUnhkUmluZ0hlYWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcFJ4UG9ydC0+UnhEZXNSaW5nTG9jaywgRmxhZ3MpOwotfSAvKiBDbGVhclJ4UmluZyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglDbGVhclR4UmluZyAtIHJlbW92ZSBhbGwgYnVmZmVycyBmcm9tIHRoZSB0cmFuc21pdCByaW5nCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHRyYW5zbWl0IGJ1ZmZlcnMgZnJvbSB0aGUgcmluZy4KLSAqCVRoZSB0cmFuc21pdCBCTVUgbXVzdCBiZSBzdG9wcGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KLSAqCWFuZCB0cmFuc21pdHRpbmcgYXQgdGhlIHVwcGVyIGxldmVsIG11c3QgYmUgZGlzYWJsZWQuCi0gKglUaGUgQk1VIG93biBiaXQgb2YgYWxsIGRlc2NyaXB0b3JzIGlzIGNsZWFyZWQsIHRoZSByZXN0IGlzCi0gKglkb25lIGJ5IGNhbGxpbmcgRnJlZVR4RGVzY3JpcHRvcnMuCi0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXN0YXRpYyB2b2lkIENsZWFyVHhSaW5nKAotU0tfQUMJKnBBQywJCS8qIHBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1UWF9QT1JUCSpwVHhQb3J0KQkvKiBwb2ludGVyIHRvIHR4IHBydCBzdHJ1Y3QgKi8KLXsKLVRYRAkJKnBUeGQ7CQkvKiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgKi8KLWludAkJaTsKLXVuc2lnbmVkIGxvbmcJRmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcFR4UG9ydC0+VHhEZXNSaW5nTG9jaywgRmxhZ3MpOwotCXBUeGQgPSBwVHhQb3J0LT5wVHhkUmluZ0hlYWQ7Ci0JZm9yIChpPTA7IGk8cEFDLT5UeERlc2NyUGVyUmluZzsgaSsrKSB7Ci0JCXBUeGQtPlRCQ29udHJvbCAmPSB+Qk1VX09XTjsKLQkJcFR4ZCA9IHBUeGQtPnBOZXh0VHhkOwotCX0KLQlGcmVlVHhEZXNjcmlwdG9ycyhwQUMsIHBUeFBvcnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBUeFBvcnQtPlR4RGVzUmluZ0xvY2ssIEZsYWdzKTsKLX0gLyogQ2xlYXJUeFJpbmcgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCVNrR2VTZXRNYWNBZGRyIC0gU2V0IHRoZSBoYXJkd2FyZSBNQUMgYWRkcmVzcwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBNQUMgYWRkcmVzcyB1c2VkIGJ5IHRoZSBhZGFwdGVyLgotICoKLSAqIFJldHVybnM6Ci0gKgkwLCBpZiBldmVyeXRoaW5nIGlzIG9rCi0gKgkhPTAsIG9uIGVycm9yCi0gKi8KLXN0YXRpYyBpbnQgU2tHZVNldE1hY0FkZHIoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldiwgdm9pZCAqcCkKLXsKLQotREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci1TS19BQwkqcEFDID0gcE5ldC0+cEFDOwotCi1zdHJ1Y3Qgc29ja2FkZHIJKmFkZHIgPSBwOwotdW5zaWduZWQgbG9uZwlGbGFnczsKLQkKLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiU2tHZVNldE1hY0FkZHIgc3RhcnRzIG5vdy4uLlxuIikpOwotCWlmKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLGRldi0+YWRkcl9sZW4pOwotCQotCXNwaW5fbG9ja19pcnFzYXZlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCi0JaWYgKHBBQy0+UmxtdE5ldHMgPT0gMikKLQkJU2tBZGRyT3ZlcnJpZGUocEFDLCBwQUMtPklvQmFzZSwgcE5ldC0+TmV0TnIsCi0JCQkoU0tfTUFDX0FERFIqKWRldi0+ZGV2X2FkZHIsIFNLX0FERFJfVklSVFVBTF9BRERSRVNTKTsKLQllbHNlCi0JCVNrQWRkck92ZXJyaWRlKHBBQywgcEFDLT5Jb0Jhc2UsIHBBQy0+QWN0aXZlUG9ydCwKLQkJCShTS19NQUNfQUREUiopZGV2LT5kZXZfYWRkciwgU0tfQUREUl9WSVJUVUFMX0FERFJFU1MpOwotCi0JCi0JCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQlyZXR1cm4gMDsKLX0gLyogU2tHZVNldE1hY0FkZHIgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJU2tHZVNldFJ4TW9kZSAtIHNldCByZWNlaXZlIG1vZGUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmVjZWl2ZSBtb2RlIG9mIGFuIGFkYXB0ZXIuIFRoZSBhZGFwdGVyCi0gKglzdXBwb3J0cyBwcm9taXNjdW91cyBtb2RlLCBhbGxtdWx0aWNhc3QgbW9kZSBhbmQgYSBudW1iZXIgb2YKLSAqCW11bHRpY2FzdCBhZGRyZXNzZXMuIElmIG1vcmUgbXVsdGljYXN0IGFkZHJlc3NlcyB0aGUgYXZhaWxhYmxlCi0gKglhcmUgc2VsZWN0ZWQsIGEgaGFzaCBmdW5jdGlvbiBpbiB0aGUgaGFyZHdhcmUgaXMgdXNlZC4KLSAqCi0gKiBSZXR1cm5zOgotICoJMCwgaWYgZXZlcnl0aGluZyBpcyBvawotICoJIT0wLCBvbiBlcnJvcgotICovCi1zdGF0aWMgdm9pZCBTa0dlU2V0UnhNb2RlKHN0cnVjdCBTS19ORVRfREVWSUNFICpkZXYpCi17Ci0KLURFVl9ORVQJCSpwTmV0OwotU0tfQUMJCSpwQUM7Ci0KLXN0cnVjdCBkZXZfbWNfbGlzdAkqcE1jTGlzdDsKLWludAkJCWk7Ci1pbnQJCQlQb3J0SWR4OwotdW5zaWduZWQgbG9uZwkJRmxhZ3M7Ci0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiU2tHZVNldFJ4TW9kZSBzdGFydHMgbm93Li4uICIpKTsKLQotCXBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXBBQyA9IHBOZXQtPnBBQzsKLQlpZiAocEFDLT5SbG10TmV0cyA9PSAxKQotCQlQb3J0SWR4ID0gcEFDLT5BY3RpdmVQb3J0OwotCWVsc2UKLQkJUG9ydElkeCA9IHBOZXQtPk5ldE5yOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7Ci0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCQkoIlBST01JU0NVT1VTIG1vZGVcbiIpKTsKLQkJU2tBZGRyUHJvbWlzY3VvdXNDaGFuZ2UocEFDLCBwQUMtPklvQmFzZSwgUG9ydElkeCwKLQkJCVNLX1BST01fTU9ERV9MTEMpOwotCX0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCQkoIkFMTE1VTFRJIG1vZGVcbiIpKTsKLQkJU2tBZGRyUHJvbWlzY3VvdXNDaGFuZ2UocEFDLCBwQUMtPklvQmFzZSwgUG9ydElkeCwKLQkJCVNLX1BST01fTU9ERV9BTExfTUMpOwotCX0gZWxzZSB7Ci0JCVNrQWRkclByb21pc2N1b3VzQ2hhbmdlKHBBQywgcEFDLT5Jb0Jhc2UsIFBvcnRJZHgsCi0JCQlTS19QUk9NX01PREVfTk9ORSk7Ci0JCVNrQWRkck1jQ2xlYXIocEFDLCBwQUMtPklvQmFzZSwgUG9ydElkeCwgMCk7Ci0KLQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VOVFJZLAotCQkJKCJOdW1iZXIgb2YgTUMgZW50cmllczogJWQgIiwgZGV2LT5tY19jb3VudCkpOwotCQkKLQkJcE1jTGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJZm9yIChpPTA7IGk8ZGV2LT5tY19jb3VudDsgaSsrLCBwTWNMaXN0ID0gcE1jTGlzdC0+bmV4dCkgewotCQkJU2tBZGRyTWNBZGQocEFDLCBwQUMtPklvQmFzZSwgUG9ydElkeCwKLQkJCQkoU0tfTUFDX0FERFIqKXBNY0xpc3QtPmRtaV9hZGRyLCAwKTsKLQkJCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9NQ0EsCi0JCQkJKCIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCQlwTWNMaXN0LT5kbWlfYWRkclswXSwKLQkJCQlwTWNMaXN0LT5kbWlfYWRkclsxXSwKLQkJCQlwTWNMaXN0LT5kbWlfYWRkclsyXSwKLQkJCQlwTWNMaXN0LT5kbWlfYWRkclszXSwKLQkJCQlwTWNMaXN0LT5kbWlfYWRkcls0XSwKLQkJCQlwTWNMaXN0LT5kbWlfYWRkcls1XSkpOwotCQl9Ci0JCVNrQWRkck1jVXBkYXRlKHBBQywgcEFDLT5Jb0Jhc2UsIFBvcnRJZHgpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCQotCXJldHVybjsKLX0gLyogU2tHZVNldFJ4TW9kZSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIAlTa0dlQ2hhbmdlTXR1IC0gc2V0IHRoZSBNVFUgdG8gYW5vdGhlciB2YWx1ZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBzZXRzIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgTVRVIHNpemUgaXMgY2hhbmdlZAotICoJKGlmY29uZmlnIG10dSB4eHggZGV2IGV0aFgpLiBJZiB0aGUgTVRVIGlzIGJpZ2dlciB0aGFuIHN0YW5kYXJkCi0gKglldGhlcm5ldCBNVFUgc2l6ZSwgbG9uZyBmcmFtZSBzdXBwb3J0IGlzIGFjdGl2YXRlZC4KLSAqCi0gKiBSZXR1cm5zOgotICoJMCwgaWYgZXZlcnl0aGluZyBpcyBvawotICoJIT0wLCBvbiBlcnJvcgotICovCi1zdGF0aWMgaW50IFNrR2VDaGFuZ2VNdHUoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldiwgaW50IE5ld010dSkKLXsKLURFVl9ORVQJCSpwTmV0Owotc3RydWN0IG5ldF9kZXZpY2UgKnBPdGhlckRldjsKLVNLX0FDCQkqcEFDOwotdW5zaWduZWQgbG9uZwlGbGFnczsKLWludAkJaTsKLVNLX0VWUEFSQSAJRXZQYXJhOwotCi0JU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VOVFJZLAotCQkoIlNrR2VDaGFuZ2VNdHUgc3RhcnRzIG5vdy4uLlxuIikpOwotCi0JcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JcEFDICA9IHBOZXQtPnBBQzsKLQotCWlmICgoTmV3TXR1IDwgNjgpIHx8IChOZXdNdHUgPiBTS19KVU1CT19NVFUpKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmKHBBQy0+Qm9hcmRMZXZlbCAhPSBTS19JTklUX1JVTikgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLQlpZiAocEFDLT5EaWFnTW9kZUFjdGl2ZSA9PSBESUFHX0FDVElWRSkgewotCQlpZiAocEFDLT5EaWFnRmxvd0N0cmwgPT0gU0tfRkFMU0UpIHsKLQkJCXJldHVybiAtMTsgLyogc3RpbGwgaW4gdXNlLCBkZW55IGFueSBhY3Rpb25zIG9mIE1UVSAqLwotCQl9IGVsc2UgewotCQkJcEFDLT5EaWFnRmxvd0N0cmwgPSBTS19GQUxTRTsKLQkJfQotCX0KLSNlbmRpZgotCi0JcE90aGVyRGV2ID0gcEFDLT5kZXZbMSAtIHBOZXQtPk5ldE5yXTsKLQotCWlmICggbmV0aWZfcnVubmluZyhwT3RoZXJEZXYpICYmIChwT3RoZXJEZXYtPm10dSA+IDE1MDApCi0JICAgICAmJiAoTmV3TXR1IDw9IDE1MDApKQotCQlyZXR1cm4gMDsKLQotCXBBQy0+UnhCdWZTaXplID0gTmV3TXR1ICsgMzI7Ci0JZGV2LT5tdHUgPSBOZXdNdHU7Ci0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiTmV3IE1UVTogJWRcbiIsIE5ld010dSkpOwotCi0JLyogCi0JKiogUHJldmVudCBhbnkgcmVjb25maWd1cmF0aW9uIHdoaWxlIGNoYW5naW5nIHRoZSBNVFUgCi0JKiogYnkgZGlzYWJsaW5nIGFueSBpbnRlcnJ1cHRzIAotCSovCi0JU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIEIwX0lNU0ssIDApOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCi0JLyogCi0JKiogTm90aWZ5IFJMTVQgdGhhdCBhbnkgcG9ydHMgYXJlIHRvIGJlIHN0b3BwZWQKLQkqLwotCUV2UGFyYS5QYXJhMzJbMF0gPSAgMDsKLQlFdlBhcmEuUGFyYTMyWzFdID0gLTE7Ci0JaWYgKChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMiApICYmIChwQUMtPlJsbXROZXRzID09IDIpKSB7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVE9QLCBFdlBhcmEpOwotCQlFdlBhcmEuUGFyYTMyWzBdID0gIDE7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVE9QLCBFdlBhcmEpOwotCX0gZWxzZSB7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVE9QLCBFdlBhcmEpOwotCX0KLQotCS8qCi0JKiogQWZ0ZXIgY2FsbGluZyB0aGUgU2tFdmVudERpc3BhdGNoZXIoKSwgUkxNVCBpcyBhd2FyZSBhYm91dAotCSoqIHRoZSBzdG9wcGVkIHBvcnRzIC0+IGNvbmZpZ3VyYXRpb24gY2FuIHRha2UgcGxhY2UhCi0JKi8KLQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIHBBQy0+SW9CYXNlKTsKLQotCWZvciAoaT0wOyBpPHBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCXNwaW5fbG9jaygmcEFDLT5UeFBvcnRbaV1bVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2spOwotCQluZXRpZl9zdG9wX3F1ZXVlKHBBQy0+ZGV2W2ldKTsKLQotCX0KLQotCS8qCi0JKiogRGVwZW5kaW5nIG9uIHRoZSBkZXNpcmVkIE1UVSBzaXplIGNoYW5nZSwgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIAotCSoqIFJYIGJ1ZmZlcnMgbmVlZCB0byBiZSBhbGxvY2F0ZWQKLQkqLwotCWlmIChOZXdNdHUgPiAxNTAwKSB7Ci0JICAgIC8qIAotCSAgICAqKiBVc2UgbGVzcyByeCBidWZmZXJzIAotCSAgICAqLwotCSAgICBmb3IgKGk9MDsgaTxwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlpZiAoKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyICkgJiYgKHBBQy0+UmxtdE5ldHMgPT0gMikpIHsKLQkJICAgIHBBQy0+UnhQb3J0W2ldLlJ4RmlsbExpbWl0ID0gIHBBQy0+UnhEZXNjclBlclJpbmcgLQotCQkJCQkJIChwQUMtPlJ4RGVzY3JQZXJSaW5nIC8gNCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBpZiAoaSA9PSBwQUMtPkFjdGl2ZVBvcnQpIHsKLQkJCXBBQy0+UnhQb3J0W2ldLlJ4RmlsbExpbWl0ID0gcEFDLT5SeERlc2NyUGVyUmluZyAtIAotCQkJCQkJICAgIChwQUMtPlJ4RGVzY3JQZXJSaW5nIC8gNCk7Ci0JCSAgICB9IGVsc2UgewotCQkJcEFDLT5SeFBvcnRbaV0uUnhGaWxsTGltaXQgPSBwQUMtPlJ4RGVzY3JQZXJSaW5nIC0gCi0JCQkJCQkgICAgKHBBQy0+UnhEZXNjclBlclJpbmcgLyAxMCk7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIC8qIAotCSAgICAqKiBVc2UgdGhlIG5vcm1hbCBhbW91bnQgb2YgcnggYnVmZmVycyAKLQkgICAgKi8KLQkgICAgZm9yIChpPTA7IGk8cEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJaWYgKChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMiApICYmIChwQUMtPlJsbXROZXRzID09IDIpKSB7Ci0JCSAgICBwQUMtPlJ4UG9ydFtpXS5SeEZpbGxMaW1pdCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCSAgICBpZiAoaSA9PSBwQUMtPkFjdGl2ZVBvcnQpIHsKLQkJCXBBQy0+UnhQb3J0W2ldLlJ4RmlsbExpbWl0ID0gMTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlwQUMtPlJ4UG9ydFtpXS5SeEZpbGxMaW1pdCA9IHBBQy0+UnhEZXNjclBlclJpbmcgLQotCQkJCQkJICAgIChwQUMtPlJ4RGVzY3JQZXJSaW5nIC8gNCk7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLQkKLQlTa0dlRGVJbml0KHBBQywgcEFDLT5Jb0Jhc2UpOwotCi0JLyoKLQkqKiBlbmFibGUvZGlzYWJsZSBoYXJkd2FyZSBzdXBwb3J0IGZvciBsb25nIGZyYW1lcwotCSovCi0JaWYgKE5ld010dSA+IDE1MDApIHsKLS8vIHBBQy0+SnVtYm9BY3RpdmF0ZWQgPSBTS19UUlVFOyAvKiBpcyBuZXZlciBzZXQgYmFjayAhISEgKi8KLQkJcEFDLT5HSW5pLkdJUG9ydFVzYWdlID0gU0tfSlVNQk9fTElOSzsKLQl9IGVsc2UgewotCSAgICBpZiAoKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyICkgJiYgKHBBQy0+UmxtdE5ldHMgPT0gMikpIHsKLQkJcEFDLT5HSW5pLkdJUG9ydFVzYWdlID0gU0tfTVVMX0xJTks7Ci0JICAgIH0gZWxzZSB7Ci0JCXBBQy0+R0luaS5HSVBvcnRVc2FnZSA9IFNLX1JFRF9MSU5LOwotCSAgICB9Ci0JfQotCi0JU2tHZUluaXQoICAgcEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JU2tJMmNJbml0KCAgcEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JU2tFdmVudEluaXQocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JU2tQbm1pSW5pdCggcEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JU2tBZGRySW5pdCggcEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JU2tSbG10SW5pdCggcEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JU2tUaW1lckluaXQocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9JTyk7Ci0JCi0JLyoKLQkqKiB0c2NoaWxsaW5nOgotCSoqIFNwZWVkIGFuZCBvdGhlcnMgYXJlIHNldCBiYWNrIHRvIGRlZmF1bHQgaW4gbGV2ZWwgMSBpbml0IQotCSovCi0JR2V0Q29uZmlndXJhdGlvbihwQUMpOwotCQotCVNrR2VJbml0KCAgIHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfUlVOKTsKLQlTa0kyY0luaXQoICBwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX1JVTik7Ci0JU2tFdmVudEluaXQocEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9SVU4pOwotCVNrUG5taUluaXQoIHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfUlVOKTsKLQlTa0FkZHJJbml0KCBwQUMsIHBBQy0+SW9CYXNlLCBTS19JTklUX1JVTik7Ci0JU2tSbG10SW5pdCggcEFDLCBwQUMtPklvQmFzZSwgU0tfSU5JVF9SVU4pOwotCVNrVGltZXJJbml0KHBBQywgcEFDLT5Jb0Jhc2UsIFNLX0lOSVRfUlVOKTsKLQotCS8qCi0JKiogY2xlYXIgYW5kIHJlaW5pdCB0aGUgcnggcmluZ3MgaGVyZQotCSovCi0JZm9yIChpPTA7IGk8cEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJUmVjZWl2ZUlycShwQUMsICZwQUMtPlJ4UG9ydFtpXSwgU0tfVFJVRSk7Ci0JCUNsZWFyUnhSaW5nKHBBQywgJnBBQy0+UnhQb3J0W2ldKTsKLQkJRmlsbFJ4UmluZyhwQUMsICZwQUMtPlJ4UG9ydFtpXSk7Ci0KLQkJLyogCi0JCSoqIEVuYWJsZSB0cmFuc21pdCBkZXNjcmlwdG9yIHBvbGxpbmcKLQkJKi8KLQkJU2tHZVBvbGxUeEQocEFDLCBwQUMtPklvQmFzZSwgaSwgU0tfVFJVRSk7Ci0JCUZpbGxSeFJpbmcocEFDLCAmcEFDLT5SeFBvcnRbaV0pOwotCX07Ci0KLQlTa0dlWWVsbG93TEVEKHBBQywgcEFDLT5Jb0Jhc2UsIDEpOwotCVNrRGltRW5hYmxlTW9kZXJhdGlvbklmTmVlZGVkKHBBQyk7CQotCVNrRGltRGlzcGxheU1vZGVyYXRpb25TZXR0aW5ncyhwQUMpOwotCi0JbmV0aWZfc3RhcnRfcXVldWUocEFDLT5kZXZbcE5ldC0+UG9ydE5yXSk7Ci0JZm9yIChpPXBBQy0+R0luaS5HSU1hY3NGb3VuZC0xOyBpPj0wOyBpLS0pIHsKLQkJc3Bpbl91bmxvY2soJnBBQy0+VHhQb3J0W2ldW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrKTsKLQl9Ci0KLQkvKiAKLQkqKiBFbmFibGUgSW50ZXJydXB0cyBhZ2FpbiAKLQkqLwotCVNLX09VVDMyKHBBQy0+SW9CYXNlLCBCMF9JTVNLLCBwQUMtPkdJbmkuR0lWYWxJcnFNYXNrKTsKLQlTS19PVVQzMihwQUMtPklvQmFzZSwgQjBfSFdFX0lNU0ssIElSUV9IV0VfTUFTSyk7Ci0KLQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfU1RBUlQsIEV2UGFyYSk7Ci0JU2tFdmVudERpc3BhdGNoZXIocEFDLCBwQUMtPklvQmFzZSk7Ci0KLQkvKiAKLQkqKiBOb3RpZnkgUkxNVCBhYm91dCB0aGUgY2hhbmdpbmcgYW5kIHJlc3RhcnRpbmcgb25lIChvciBtb3JlKSBwb3J0cwotCSovCi0JaWYgKChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMiApICYmIChwQUMtPlJsbXROZXRzID09IDIpKSB7Ci0JCUV2UGFyYS5QYXJhMzJbMF0gPSBwQUMtPlJsbXROZXRzOwotCQlFdlBhcmEuUGFyYTMyWzFdID0gLTE7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TRVRfTkVUUywgRXZQYXJhKTsKLQkJRXZQYXJhLlBhcmEzMlswXSA9IHBOZXQtPlBvcnROcjsKLQkJRXZQYXJhLlBhcmEzMlsxXSA9IC0xOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfU1RBUlQsIEV2UGFyYSk7Ci0JCQkKLQkJaWYgKG5ldGlmX3J1bm5pbmcocE90aGVyRGV2KSkgewotCQkJREVWX05FVCAqcE90aGVyTmV0ID0gbmV0ZGV2X3ByaXYocE90aGVyRGV2KTsKLQkJCUV2UGFyYS5QYXJhMzJbMF0gPSBwT3RoZXJOZXQtPlBvcnROcjsKLQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVEFSVCwgRXZQYXJhKTsKLQkJfQotCX0gZWxzZSB7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9TVEFSVCwgRXZQYXJhKTsKLQl9Ci0KLQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIHBBQy0+SW9CYXNlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCQotCS8qCi0JKiogV2hpbGUgdGVzdGluZyB0aGlzIGRyaXZlciB3aXRoIGxhdGVzdCBrZXJuZWwgMi41ICgyLjUuNzApLCBpdCAKLQkqKiBzZWVtcyBhcyBpZiB1cHBlciBsYXllcnMgaGF2ZSBhIHByb2JsZW0gdG8gaGFuZGxlIGEgc3VjY2Vzc2Z1bAotCSoqIHJldHVybiB2YWx1ZSBvZiAnMCcuIElmIHN1Y2ggYSB6ZXJvIGlzIHJldHVybmVkLCB0aGUgY29tcGxldGUgCi0JKiogc3lzdGVtIGhhbmdzIGZvciBzZXZlcmFsIG1pbnV0ZXMgKCEpLCB3aGljaCBpcyBpbiBhY2NlcHRhYmxlLgotCSoqCi0JKiogQ3VycmVudGx5IGl0IGlzIG5vdCBjbGVhciwgd2hhdCB0aGUgZXhhY3QgcmVhc29uIGZvciB0aGlzIHByb2JsZW0KLQkqKiBpcy4gVGhlIGltcGxlbWVudGVkIHdvcmthcm91bmQgZm9yIDIuNSBpcyB0byByZXR1cm4gdGhlIGRlc2lyZWQgCi0JKiogbmV3IE1UVSBzaXplIGlmIGFsbCBuZWVkZWQgY2hhbmdlcyBmb3IgdGhlIG5ldyBNVFUgc2l6ZSB3aGVyZSAKLQkqKiBwZXJmb3JtZWQuIEluIGtlcm5lbHMgMi4yIGFuZCAyLjQsIGEgemVybyB2YWx1ZSBpcyByZXR1cm5lZCwKLQkqKiB3aGljaCBpbmRpY2F0ZXMgdGhlIHN1Y2Nlc3NmdWwgY2hhbmdlIG9mIHRoZSBtdHUtc2l6ZS4KLQkqLwotCXJldHVybiBOZXdNdHU7Ci0KLX0gLyogU2tHZUNoYW5nZU10dSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIAlTa0dlU3RhdHMgLSByZXR1cm4gZXRoZXJuZXQgZGV2aWNlIHN0YXRpc3RpY3MKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gcmV0dXJuIHN0YXRpc3RpYyBkYXRhIGFib3V0IHRoZSBldGhlcm5ldCBkZXZpY2UKLSAqCXRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgotICoKLSAqIFJldHVybnM6Ci0gKglwb2ludGVyIHRvIHRoZSBzdGF0aXN0aWMgc3RydWN0dXJlLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKlNrR2VTdGF0cyhzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2KQotewotREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci1TS19BQwkqcEFDID0gcE5ldC0+cEFDOwotU0tfUE5NSV9TVFJVQ1RfREFUQSAqcFBubWlTdHJ1Y3Q7ICAgICAgIC8qIHN0cnVjdHVyZSBmb3IgYWxsIFBubWktRGF0YSAqLwotU0tfUE5NSV9TVEFUICAgICpwUG5taVN0YXQ7ICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gdmlydHVhbCBYTUFDIHN0YXQuIGRhdGEgKi8KLVNLX1BOTUlfQ09ORiAgICAqcFBubWlDb25mOyAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHZpcnR1YWwgbGluayBjb25maWcuICovCi11bnNpZ25lZCBpbnQgICAgU2l6ZTsgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBwbm1pIHN0cnVjdCAqLwotdW5zaWduZWQgbG9uZwlGbGFnczsJCQkvKiBmb3Igc3BpbiBsb2NrICovCi0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiU2tHZVN0YXRzIHN0YXJ0cyBub3cuLi5cbiIpKTsKLQlwUG5taVN0cnVjdCA9ICZwQUMtPlBubWlTdHJ1Y3Q7Ci0KLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLSAgICAgICAgaWYgKChwQUMtPkRpYWdNb2RlQWN0aXZlID09IERJQUdfTk9UQUNUSVZFKSAmJgotICAgICAgICAgICAgICAgIChwQUMtPkJvYXJkTGV2ZWwgPT0gU0tfSU5JVF9SVU4pKSB7Ci0jZW5kaWYKLSAgICAgICAgU0tfTUVNU0VUKHBQbm1pU3RydWN0LCAwLCBzaXplb2YoU0tfUE5NSV9TVFJVQ1RfREFUQSkpOwotICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLSAgICAgICAgU2l6ZSA9IFNLX1BOTUlfU1RSVUNUX1NJWkU7Ci0JCVNrUG5taUdldFN0cnVjdChwQUMsIHBBQy0+SW9CYXNlLCBwUG5taVN0cnVjdCwgJlNpemUsIHBOZXQtPk5ldE5yKTsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLQl9Ci0jZW5kaWYKLQotICAgICAgICBwUG5taVN0YXQgPSAmcFBubWlTdHJ1Y3QtPlN0YXRbMF07Ci0gICAgICAgIHBQbm1pQ29uZiA9ICZwUG5taVN0cnVjdC0+Q29uZlswXTsKLQotCXBBQy0+c3RhdHMucnhfcGFja2V0cyA9IChTS19VMzIpIHBQbm1pU3RydWN0LT5SeERlbGl2ZXJlZEN0cyAmIDB4RkZGRkZGRkY7Ci0JcEFDLT5zdGF0cy50eF9wYWNrZXRzID0gKFNLX1UzMikgcFBubWlTdGF0LT5TdGF0VHhPa0N0cyAmIDB4RkZGRkZGRkY7Ci0JcEFDLT5zdGF0cy5yeF9ieXRlcyA9IChTS19VMzIpIHBQbm1pU3RydWN0LT5SeE9jdGV0c0RlbGl2ZXJlZEN0czsKLQlwQUMtPnN0YXRzLnR4X2J5dGVzID0gKFNLX1UzMikgcFBubWlTdGF0LT5TdGF0VHhPY3RldHNPa0N0czsKLQkKLSAgICAgICAgaWYgKGRldi0+bXR1IDw9IDE1MDApIHsKLSAgICAgICAgICAgICAgICBwQUMtPnN0YXRzLnJ4X2Vycm9ycyA9IChTS19VMzIpIHBQbm1pU3RydWN0LT5JbkVycm9yc0N0cyAmIDB4RkZGRkZGRkY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcEFDLT5zdGF0cy5yeF9lcnJvcnMgPSAoU0tfVTMyKSAoKHBQbm1pU3RydWN0LT5JbkVycm9yc0N0cyAtCi0gICAgICAgICAgICAgICAgICAgICAgICBwUG5taVN0YXQtPlN0YXRSeFRvb0xvbmdDdHMpICYgMHhGRkZGRkZGRik7Ci0JfQotCi0KLQlpZiAocEFDLT5HSW5pLkdQWzBdLlBoeVR5cGUgPT0gU0tfUEhZX1hNQUMgJiYgcEFDLT5IV1JldmlzaW9uIDwgMTIpCi0JCXBBQy0+c3RhdHMucnhfZXJyb3JzID0gcEFDLT5zdGF0cy5yeF9lcnJvcnMgLSBwUG5taVN0YXQtPlN0YXRSeFNob3J0c0N0czsKLQotCXBBQy0+c3RhdHMudHhfZXJyb3JzID0gKFNLX1UzMikgcFBubWlTdGF0LT5TdGF0VHhTaW5nbGVDb2xsaXNpb25DdHMgJiAweEZGRkZGRkZGOwotCXBBQy0+c3RhdHMucnhfZHJvcHBlZCA9IChTS19VMzIpIHBQbm1pU3RydWN0LT5SeE5vQnVmQ3RzICYgMHhGRkZGRkZGRjsKLQlwQUMtPnN0YXRzLnR4X2Ryb3BwZWQgPSAoU0tfVTMyKSBwUG5taVN0cnVjdC0+VHhOb0J1ZkN0cyAmIDB4RkZGRkZGRkY7Ci0JcEFDLT5zdGF0cy5tdWx0aWNhc3QgPSAoU0tfVTMyKSBwUG5taVN0YXQtPlN0YXRSeE11bHRpY2FzdE9rQ3RzICYgMHhGRkZGRkZGRjsKLQlwQUMtPnN0YXRzLmNvbGxpc2lvbnMgPSAoU0tfVTMyKSBwUG5taVN0YXQtPlN0YXRUeFNpbmdsZUNvbGxpc2lvbkN0cyAmIDB4RkZGRkZGRkY7Ci0KLQkvKiBkZXRhaWxlZCByeF9lcnJvcnM6ICovCi0JcEFDLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gKFNLX1UzMikgcFBubWlTdGF0LT5TdGF0UnhSdW50Q3RzICYgMHhGRkZGRkZGRjsKLQlwQUMtPnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gKFNLX1UzMikgcFBubWlTdGF0LT5TdGF0UnhGaWZvT3ZlcmZsb3dDdHMgJiAweEZGRkZGRkZGOwotCXBBQy0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IChTS19VMzIpIHBQbm1pU3RhdC0+U3RhdFJ4RmNzQ3RzICYgMHhGRkZGRkZGRjsKLQlwQUMtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyA9IChTS19VMzIpIHBQbm1pU3RhdC0+U3RhdFJ4RnJhbWluZ0N0cyAmIDB4RkZGRkZGRkY7Ci0JcEFDLT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IChTS19VMzIpIHBQbm1pU3RhdC0+U3RhdFJ4Rmlmb092ZXJmbG93Q3RzICYgMHhGRkZGRkZGRjsKLQlwQUMtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSAoU0tfVTMyKSBwUG5taVN0YXQtPlN0YXRSeE1pc3NlZEN0cyAmIDB4RkZGRkZGRkY7Ci0KLQkvKiBkZXRhaWxlZCB0eF9lcnJvcnMgKi8KLQlwQUMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gKFNLX1UzMikgMDsKLQlwQUMtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzID0gKFNLX1UzMikgcFBubWlTdGF0LT5TdGF0VHhDYXJyaWVyQ3RzICYgMHhGRkZGRkZGRjsKLQlwQUMtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzID0gKFNLX1UzMikgcFBubWlTdGF0LT5TdGF0VHhGaWZvVW5kZXJydW5DdHMgJiAweEZGRkZGRkZGOwotCXBBQy0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyA9IChTS19VMzIpIHBQbm1pU3RhdC0+U3RhdFR4Q2FycmllckN0cyAmIDB4RkZGRkZGRkY7Ci0JcEFDLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzID0gKFNLX1UzMikgMDsKLQotCXJldHVybigmcEFDLT5zdGF0cyk7Ci19IC8qIFNrR2VTdGF0cyAqLwotCi0vKgotICogQmFzaWMgTUlJIHJlZ2lzdGVyIGFjY2VzcwotICovCi1zdGF0aWMgaW50IFNrR2VNaWlJb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhLCBpbnQgY21kKQotewotCURFVl9ORVQgKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCVNLX0FDICpwQUMgPSBwTmV0LT5wQUM7Ci0JU0tfSU9DIElvQyA9IHBBQy0+SW9CYXNlOwotCWludCBQb3J0ID0gcE5ldC0+UG9ydE5yOwotCVNLX0dFUE9SVCAqcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0JdW5zaWduZWQgbG9uZyBGbGFnczsKLQlpbnQgZXJyID0gMDsKLQlpbnQgcmVnID0gZGF0YS0+cmVnX251bSAmIDB4MWY7Ci0JU0tfVTE2IHZhbCA9IGRhdGEtPnZhbF9pbjsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsJLyogUGh5IHN0aWxsIGluIHJlc2V0ICovCi0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQlzd2l0Y2goY21kKSB7Ci0JY2FzZSBTSU9DR01JSVBIWToKLQkJZGF0YS0+cGh5X2lkID0gcFBydC0+UGh5QWRkcjsKLQotCQkvKiBmYWxsdGhydSAqLwotCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKQotCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIHJlZywgJnZhbCk7Ci0JCWVsc2UKLQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCByZWcsICZ2YWwpOwotCi0JCWRhdGEtPnZhbF9vdXQgPSB2YWw7Ci0JCWJyZWFrOwotCi0JY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJZXJyID0gLUVQRVJNOwotCi0JCWVsc2UgaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpCi0JCQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIHJlZywgdmFsKTsKLQkJZWxzZQotCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCByZWcsIHZhbCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCX0KLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIAlTa0dlSW9jdGwgLSBJTy1jb250cm9sIGZ1bmN0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiBhbiBpb2N0bCBpcyBpc3N1ZWQgb24gdGhlIGRldmljZS4KLSAqCVRoZXJlIGFyZSB0aHJlZSBzdWJmdW5jdGlvbiBmb3IgcmVhZGluZywgd3JpdGluZyBhbmQgdGVzdC13cml0aW5nCi0gKgl0aGUgcHJpdmF0ZSBNSUIgZGF0YSBzdHJ1Y3R1cmUgKHVzZWZ1bCBmb3IgU3lzS29ubmVjdC1pbnRlcm5hbCB0b29scykuCi0gKgotICogUmV0dXJuczoKLSAqCTAsIGlmIGV2ZXJ5dGhpbmcgaXMgb2sKLSAqCSE9MCwgb24gZXJyb3IKLSAqLwotc3RhdGljIGludCBTa0dlSW9jdGwoc3RydWN0IFNLX05FVF9ERVZJQ0UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLURFVl9ORVQJCSpwTmV0OwotU0tfQUMJCSpwQUM7Ci12b2lkCQkqcE1lbUJ1ZjsKLXN0cnVjdCBwY2lfZGV2ICAqcGRldiA9IE5VTEw7Ci1TS19HRV9JT0NUTAlJb2N0bDsKLXVuc2lnbmVkIGludAlFcnIgPSAwOwotaW50CQlTaXplID0gMDsKLWludCAgICAgICAgICAgICBSZXQgPSAwOwotdW5zaWduZWQgaW50CUxlbmd0aCA9IDA7Ci1pbnQJCUhlYWRlckxlbmd0aCA9IHNpemVvZihTS19VMzIpICsgc2l6ZW9mKFNLX1UzMik7Ci0KLQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRU5UUlksCi0JCSgiU2tHZUlvY3RsIHN0YXJ0cyBub3cuLi5cbiIpKTsKLQotCXBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXBBQyA9IHBOZXQtPnBBQzsKLQkKLQlpZiAoY21kID09IFNJT0NHTUlJUEhZIHx8IGNtZCA9PSBTSU9DU01JSVJFRyB8fCBjbWQgPT0gU0lPQ0dNSUlSRUcpCi0JICAgIHJldHVybiBTa0dlTWlpSW9jdGwoZGV2LCBpZl9taWkocnEpLCBjbWQpOwotCi0JaWYoY29weV9mcm9tX3VzZXIoJklvY3RsLCBycS0+aWZyX2RhdGEsIHNpemVvZihTS19HRV9JT0NUTCkpKSB7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXN3aXRjaChjbWQpIHsKLQljYXNlIFNLX0lPQ1RMX1NFVE1JQjoKLQljYXNlIFNLX0lPQ1RMX1BSRVNFVE1JQjoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSByZXR1cm4gLUVQRVJNOwotIAljYXNlIFNLX0lPQ1RMX0dFVE1JQjoKLQkJaWYoY29weV9mcm9tX3VzZXIoJnBBQy0+UG5taVN0cnVjdCwgSW9jdGwucERhdGEsCi0JCQlJb2N0bC5MZW48c2l6ZW9mKHBBQy0+UG5taVN0cnVjdCk/Ci0JCQlJb2N0bC5MZW4gOiBzaXplb2YocEFDLT5Qbm1pU3RydWN0KSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCVNpemUgPSBTa0dlSW9jTWliKHBOZXQsIElvY3RsLkxlbiwgY21kKTsKLQkJaWYoY29weV90b191c2VyKElvY3RsLnBEYXRhLCAmcEFDLT5Qbm1pU3RydWN0LAotCQkJSW9jdGwuTGVuPFNpemU/IElvY3RsLkxlbiA6IFNpemUpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlJb2N0bC5MZW4gPSBTaXplOwotCQlpZihjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCAmSW9jdGwsIHNpemVvZihTS19HRV9JT0NUTCkpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlicmVhazsKLQljYXNlIFNLX0lPQ1RMX0dFTjoKLQkJaWYgKElvY3RsLkxlbiA8IChzaXplb2YocEFDLT5Qbm1pU3RydWN0KSArIEhlYWRlckxlbmd0aCkpIHsKLQkJCUxlbmd0aCA9IElvY3RsLkxlbjsKLQkJfSBlbHNlIHsKLQkJCUxlbmd0aCA9IHNpemVvZihwQUMtPlBubWlTdHJ1Y3QpICsgSGVhZGVyTGVuZ3RoOwotCQl9Ci0JCWlmIChOVUxMID09IChwTWVtQnVmID0ga21hbGxvYyhMZW5ndGgsIEdGUF9LRVJORUwpKSkgewotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJaWYoY29weV9mcm9tX3VzZXIocE1lbUJ1ZiwgSW9jdGwucERhdGEsIExlbmd0aCkpIHsKLQkJCUVyciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGZhdWx0X2dlbjsKLQkJfQotCQlpZiAoKFJldCA9IFNrUG5taUdlbklvY3RsKHBBQywgcEFDLT5Jb0Jhc2UsIHBNZW1CdWYsICZMZW5ndGgsIDApKSA8IDApIHsKLQkJCUVyciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGZhdWx0X2dlbjsKLQkJfQotCQlpZihjb3B5X3RvX3VzZXIoSW9jdGwucERhdGEsIHBNZW1CdWYsIExlbmd0aCkgKSB7Ci0JCQlFcnIgPSAtRUZBVUxUOwotCQkJZ290byBmYXVsdF9nZW47Ci0JCX0KLQkJSW9jdGwuTGVuID0gTGVuZ3RoOwotCQlpZihjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCAmSW9jdGwsIHNpemVvZihTS19HRV9JT0NUTCkpKSB7Ci0JCQlFcnIgPSAtRUZBVUxUOwotCQkJZ290byBmYXVsdF9nZW47Ci0JCX0KLWZhdWx0X2dlbjoKLQkJa2ZyZWUocE1lbUJ1Zik7IC8qIGNsZWFudXAgZXZlcnl0aGluZyAqLwotCQlicmVhazsKLSNpZmRlZiBTS19ESUFHX1NVUFBPUlQKLSAgICAgICBjYXNlIFNLX0lPQ1RMX0RJQUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgcmV0dXJuIC1FUEVSTTsKLQkJaWYgKElvY3RsLkxlbiA8IChzaXplb2YocEFDLT5Qbm1pU3RydWN0KSArIEhlYWRlckxlbmd0aCkpIHsKLQkJCUxlbmd0aCA9IElvY3RsLkxlbjsKLQkJfSBlbHNlIHsKLQkJCUxlbmd0aCA9IHNpemVvZihwQUMtPlBubWlTdHJ1Y3QpICsgSGVhZGVyTGVuZ3RoOwotCQl9Ci0JCWlmIChOVUxMID09IChwTWVtQnVmID0ga21hbGxvYyhMZW5ndGgsIEdGUF9LRVJORUwpKSkgewotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJaWYoY29weV9mcm9tX3VzZXIocE1lbUJ1ZiwgSW9jdGwucERhdGEsIExlbmd0aCkpIHsKLQkJCUVyciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGZhdWx0X2RpYWc7Ci0JCX0KLQkJcGRldiA9IHBBQy0+UGNpRGV2OwotCQlMZW5ndGggPSAzICogc2l6ZW9mKFNLX1UzMik7ICAvKiBFcnJvciwgQnVzIGFuZCBEZXZpY2UgKi8KLQkJLyogCi0JCSoqIFdoaWxlIGNvZGluZyB0aGlzIG5ldyBJT0NUTCBpbnRlcmZhY2UsIG9ubHkgYSBmZXcgbGluZXMgb2YgY29kZQotCQkqKiBhcmUgdG8gdG8gYmUgYWRkZWQuIFRoZXJlZm9yZSBubyBkZWRpY2F0ZWQgZnVuY3Rpb24gaGFzIGJlZW4gCi0JCSoqIGFkZGVkLiBJZiBtb3JlIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQsIGEgc2VwYXJhdGUgZnVuY3Rpb24gCi0JCSoqIHNob3VsZCBiZSB1c2VkLi4uCi0JCSovCi0JCSogKChTS19VMzIgKilwTWVtQnVmKSA9IDA7Ci0JCSogKChTS19VMzIgKilwTWVtQnVmICsgMSkgPSBwZGV2LT5idXMtPm51bWJlcjsKLQkJKiAoKFNLX1UzMiAqKXBNZW1CdWYgKyAyKSA9IFBhcnNlRGV2aWNlTmJyRnJvbVNsb3ROYW1lKHBjaV9uYW1lKHBkZXYpKTsKLQkJaWYoY29weV90b191c2VyKElvY3RsLnBEYXRhLCBwTWVtQnVmLCBMZW5ndGgpICkgewotCQkJRXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZmF1bHRfZGlhZzsKLQkJfQotCQlJb2N0bC5MZW4gPSBMZW5ndGg7Ci0JCWlmKGNvcHlfdG9fdXNlcihycS0+aWZyX2RhdGEsICZJb2N0bCwgc2l6ZW9mKFNLX0dFX0lPQ1RMKSkpIHsKLQkJCUVyciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGZhdWx0X2RpYWc7Ci0JCX0KLWZhdWx0X2RpYWc6Ci0JCWtmcmVlKHBNZW1CdWYpOyAvKiBjbGVhbnVwIGV2ZXJ5dGhpbmcgKi8KLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlFcnIgPSAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4oRXJyKTsKLQotfSAvKiBTa0dlSW9jdGwgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJU2tHZUlvY01pYiAtIGhhbmRsZSBhIEdldE1pYiwgU2V0TWliLSBvciBQcmVzZXRNaWItaW9jdGwgbWVzc2FnZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiByZWFkcy93cml0ZXMgdGhlIE1JQiBkYXRhIHVzaW5nIFBOTUkgKFByaXZhdGUgTmV0d29yawotICoJTWFuYWdlbWVudCBJbnRlcmZhY2UpLgotICoJVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgZGF0YSBtdXN0IGJlIHByb3ZpZGVkIHdpdGggdGhlCi0gKglpb2N0bCBjYWxsIGFuZCBpcyBnaXZlbiB0byB0aGUgZHJpdmVyIGluIHRoZSBmb3JtIG9mCi0gKglhIHVzZXIgc3BhY2UgYWRkcmVzcy4KLSAqCUNvcHlpbmcgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBkYXRhIGFyZWEgaW50byBrZXJuZWwgbWVzc2FnZXMKLSAqCWFuZCBiYWNrIGlzIGRvbmUgYnkgY29weV9mcm9tX3VzZXIgYW5kIGNvcHlfdG9fdXNlciBjYWxscyBpbgotICoJU2tHZUlvY3RsLgotICoKLSAqIFJldHVybnM6Ci0gKglyZXR1cm5lZCBzaXplIGZyb20gUE5NSSBjYWxsCi0gKi8KLXN0YXRpYyBpbnQgU2tHZUlvY01pYigKLURFVl9ORVQJCSpwTmV0LAkvKiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIGNvbnRleHQgKi8KLXVuc2lnbmVkIGludAlTaXplLAkvKiBsZW5ndGggb2YgaW9jdGwgZGF0YSAqLwotaW50CQltb2RlKQkvKiBmbGFnIGZvciBzZXQvcHJlc2V0ICovCi17Ci11bnNpZ25lZCBsb25nCUZsYWdzOwkvKiBmb3Igc3BpbiBsb2NrICovCi1TS19BQwkJKnBBQzsKLQotCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9FTlRSWSwKLQkJKCJTa0dlSW9jTWliIHN0YXJ0cyBub3cuLi5cbiIpKTsKLQlwQUMgPSBwTmV0LT5wQUM7Ci0JLyogYWNjZXNzIE1JQiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCXN3aXRjaChtb2RlKSB7Ci0JY2FzZSBTS19JT0NUTF9HRVRNSUI6Ci0JCVNrUG5taUdldFN0cnVjdChwQUMsIHBBQy0+SW9CYXNlLCAmcEFDLT5Qbm1pU3RydWN0LCAmU2l6ZSwKLQkJCXBOZXQtPk5ldE5yKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19JT0NUTF9QUkVTRVRNSUI6Ci0JCVNrUG5taVByZVNldFN0cnVjdChwQUMsIHBBQy0+SW9CYXNlLCAmcEFDLT5Qbm1pU3RydWN0LCAmU2l6ZSwKLQkJCXBOZXQtPk5ldE5yKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19JT0NUTF9TRVRNSUI6Ci0JCVNrUG5taVNldFN0cnVjdChwQUMsIHBBQy0+SW9CYXNlLCAmcEFDLT5Qbm1pU3RydWN0LCAmU2l6ZSwKLQkJCXBOZXQtPk5ldE5yKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7Ci0JU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VOVFJZLAotCQkoIk1JQiBkYXRhIGFjY2VzcyBzdWNjZWVkZWRcbiIpKTsKLQlyZXR1cm4gKFNpemUpOwotfSAvKiBTa0dlSW9jTWliICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogCUdldENvbmZpZ3VyYXRpb24gLSByZWFkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gcmVhZHMgcGVyLWFkYXB0ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tCi0gKgl0aGUgb3B0aW9ucyBwcm92aWRlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotICoKLSAqIFJldHVybnM6Ci0gKglub25lCi0gKi8KLXN0YXRpYyB2b2lkIEdldENvbmZpZ3VyYXRpb24oCi1TS19BQwkqcEFDKQkvKiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIGNvbnRleHQgc3RydWN0dXJlICovCi17Ci1TS19JMzIJUG9ydDsJCS8qIHByZWZlcnJlZCBwb3J0ICovCi1TS19CT09MCUF1dG9TZXQ7Ci1TS19CT09MIER1cFNldDsKLWludAlMaW5rU3BlZWQgICAgICAgICAgPSBTS19MU1BFRURfQVVUTzsJLyogTGluayBzcGVlZCAqLwotaW50CUF1dG9OZWcgICAgICAgICAgICA9IDE7CQkJLyogYXV0b25lZyBvZmYgKDApIG9yIG9uICgxKSAqLwotaW50CUR1cGxleENhcCAgICAgICAgICA9IDA7CQkJLyogMD1ib3RoLDE9ZnVsbCwyPWhhbGYgKi8KLWludAlGbG93Q3RybCAgICAgICAgICAgPSBTS19GTE9XX01PREVfU1lNX09SX1JFTTsJLyogRmxvd0NvbnRyb2wgICovCi1pbnQJTVNNb2RlICAgICAgICAgICAgID0gU0tfTVNfTU9ERV9BVVRPOwkvKiBtYXN0ZXIvc2xhdmUgbW9kZSAgICAqLwotCi1TS19CT09MIElzQ29uVHlwZURlZmluZWQgICA9IFNLX1RSVUU7Ci1TS19CT09MIElzTGlua1NwZWVkRGVmaW5lZCA9IFNLX1RSVUU7Ci1TS19CT09MIElzRmxvd0N0cmxEZWZpbmVkICA9IFNLX1RSVUU7Ci1TS19CT09MIElzUm9sZURlZmluZWQgICAgICA9IFNLX1RSVUU7Ci1TS19CT09MIElzTW9kZURlZmluZWQgICAgICA9IFNLX1RSVUU7Ci0vKgotICoJVGhlIHR3byBwYXJhbWV0ZXJzIEF1dG9OZWcuIGFuZCBEdXBsZXhDYXAuIG1hcCB0byBvbmUgY29uZmlndXJhdGlvbgotICoJcGFyYW1ldGVyLiBUaGUgbWFwcGluZyBpcyBkZXNjcmliZWQgYnkgdGhpcyB0YWJsZToKLSAqCUR1cGxleENhcCAtPgl8CWJvdGgJfAlmdWxsCXwJaGFsZgl8Ci0gKglBdXRvTmVnCQl8CQl8CQl8CQl8Ci0gKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJT2ZmCQl8ICAgIGlsbGVnYWwJfAlGdWxsCXwJSGFsZgl8Ci0gKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJT24JCXwgICBBdXRvQm90aAl8ICAgQXV0b0Z1bGwJfCAgIEF1dG9IYWxmCXwKLSAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKglTZW5zZQkJfCAgIEF1dG9TZW5zZQl8ICAgQXV0b1NlbnNlCXwgICBBdXRvU2Vuc2UJfAotICovCi1pbnQJQ2FwYWJpbGl0aWVzWzNdWzNdID0KLQkJeyB7ICAgICAgICAgICAgICAgIC0xLCBTS19MTU9ERV9GVUxMICAgICAsIFNLX0xNT0RFX0hBTEYgICAgIH0sCi0JCSAge1NLX0xNT0RFX0FVVE9CT1RIICwgU0tfTE1PREVfQVVUT0ZVTEwgLCBTS19MTU9ERV9BVVRPSEFMRiB9LAotCQkgIHtTS19MTU9ERV9BVVRPU0VOU0UsIFNLX0xNT0RFX0FVVE9TRU5TRSwgU0tfTE1PREVfQVVUT1NFTlNFfSB9OwotCi0jZGVmaW5lIERDX0JPVEgJMAotI2RlZmluZSBEQ19GVUxMIDEKLSNkZWZpbmUgRENfSEFMRiAyCi0jZGVmaW5lIEFOX09GRgkwCi0jZGVmaW5lIEFOX09OCTEKLSNkZWZpbmUgQU5fU0VOUwkyCi0jZGVmaW5lIE1fQ3VyclBvcnQgcEFDLT5HSW5pLkdQW1BvcnRdCi0KLQotCS8qCi0JKiogU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmaXJzdCBmb3IgYm90aCBwb3J0cyEKLQkqLwotCWZvciAoUG9ydCA9IDA7IFBvcnQgPCBTS19NQVhfTUFDUzsgUG9ydCsrKSB7Ci0JCU1fQ3VyclBvcnQuUExpbmtNb2RlQ29uZiA9IENhcGFiaWxpdGllc1tBTl9PTl1bRENfQk9USF07Ci0JCU1fQ3VyclBvcnQuUEZsb3dDdHJsTW9kZSA9IFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNOwotCQlNX0N1cnJQb3J0LlBNU01vZGUgICAgICAgPSBTS19NU19NT0RFX0FVVE87Ci0JCU1fQ3VyclBvcnQuUExpbmtTcGVlZCAgICA9IFNLX0xTUEVFRF9BVVRPOwotCX0KLQotCS8qCi0JKiogQ2hlY2sgbWVyZ2VkIHBhcmFtZXRlciBDb25UeXBlLiBJZiBpdCBoYXMgbm90IGJlZW4gdXNlZCwKLQkqKiB2ZXJpZnkgYW55IG90aGVyIHBhcmFtZXRlciAoZS5nLiBBdXRvTmVnKSBhbmQgdXNlIGRlZmF1bHQgdmFsdWVzLiAKLQkqKgotCSoqIFN0YXRpbmcgYm90aCBDb25UeXBlIGFuZCBvdGhlciBsb3dsZXZlbCBsaW5rIHBhcmFtZXRlcnMgaXMgYWxzbwotCSoqIHBvc3NpYmxlLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgcGFzc2VkIENvblR5cGUtcGFyYW1ldGVyIGlzIAotCSoqIG92ZXJ3cml0dGVuIGJ5IHRoZSBsb3dsZXZlbCBsaW5rIHBhcmFtZXRlci4KLQkqKgotCSoqIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIHVzZWQgZm9yIGEgbWVyZ2VkIENvblR5cGUtcGFyYW1ldGVyOgotCSoqCi0JKiogQ29uVHlwZSAgIER1cENhcCAgIEF1dG9OZWcgICBGbG93Q3RybCAgICAgIFJvbGUgICAgICBTcGVlZAotCSoqIC0tLS0tLS0gICAtLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLS0gICAtLS0tLS0tLS0tICAgLS0tLS0KLQkqKiAgQXV0byAgICAgIEJvdGggICAgICBPbiAgICAgIFN5bU9yUmVtICAgICAgQXV0byAgICAgICBBdXRvCi0JKiogIDEwMEZEICAgICBGdWxsICAgICAgT2ZmICAgICAgIE5vbmUgICAgICA8aWdub3JlZD4gICAgMTAwCi0JKiogIDEwMEhEICAgICBIYWxmICAgICAgT2ZmICAgICAgIE5vbmUgICAgICA8aWdub3JlZD4gICAgMTAwCi0JKiogIDEwRkQgICAgICBGdWxsICAgICAgT2ZmICAgICAgIE5vbmUgICAgICA8aWdub3JlZD4gICAgMTAKLQkqKiAgMTBIRCAgICAgIEhhbGYgICAgICBPZmYgICAgICAgTm9uZSAgICAgIDxpZ25vcmVkPiAgICAxMAotCSoqIAotCSoqIFRoaXMgQ29uVHlwZSBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgYWxsIHBvcnRzIG9mIHRoZSBhZGFwdGVyIQotCSovCi0gICAgICAgIGlmICggKENvblR5cGUgIT0gTlVMTCkgICAgICAgICAgICAgICAgJiYgCi0JICAgICAocEFDLT5JbmRleCA8IFNLX01BWF9DQVJEX1BBUkFNKSAmJgotCSAgICAgKENvblR5cGVbcEFDLT5JbmRleF0gIT0gTlVMTCkgKSB7Ci0KLQkJCS8qIENoZWNrIGNoaXBzZXQgZmFtaWx5ICovCi0JCQlpZiAoKCFwQUMtPkNoaXBzZXRUeXBlKSAmJiAKLQkJCQkoc3RyY21wKENvblR5cGVbcEFDLT5JbmRleF0sIkF1dG8iKSE9MCkgJiYKLQkJCQkoc3RyY21wKENvblR5cGVbcEFDLT5JbmRleF0sIiIpIT0wKSkgewotCQkJCS8qIFNldCB0aGUgc3BlZWQgcGFyYW1ldGVyIGJhY2sgKi8KLQkJCQkJcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIFwiJXNcIiAiIAotCQkJCQkJCSJmb3IgQ29uVHlwZS4iCi0JCQkJCQkJIiBVc2luZyBBdXRvLlxuIiwgCi0JCQkJCQkJQ29uVHlwZVtwQUMtPkluZGV4XSk7Ci0KLQkJCQkJc3ByaW50ZihDb25UeXBlW3BBQy0+SW5kZXhdLCAiQXV0byIpOwkKLQkJCX0KLQotCQkJCWlmIChzdHJjbXAoQ29uVHlwZVtwQUMtPkluZGV4XSwiIik9PTApIHsKLQkJCUlzQ29uVHlwZURlZmluZWQgPSBTS19GQUxTRTsgLyogTm8gQ29uVHlwZSBkZWZpbmVkICovCi0JCQkJfSBlbHNlIGlmIChzdHJjbXAoQ29uVHlwZVtwQUMtPkluZGV4XSwiQXV0byIpPT0wKSB7Ci0JCSAgICBmb3IgKFBvcnQgPSAwOyBQb3J0IDwgU0tfTUFYX01BQ1M7IFBvcnQrKykgewotCQkJTV9DdXJyUG9ydC5QTGlua01vZGVDb25mID0gQ2FwYWJpbGl0aWVzW0FOX09OXVtEQ19CT1RIXTsKLQkJCU1fQ3VyclBvcnQuUEZsb3dDdHJsTW9kZSA9IFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNOwotCQkJTV9DdXJyUG9ydC5QTVNNb2RlICAgICAgID0gU0tfTVNfTU9ERV9BVVRPOwotCQkJTV9DdXJyUG9ydC5QTGlua1NwZWVkICAgID0gU0tfTFNQRUVEX0FVVE87Ci0JCSAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoQ29uVHlwZVtwQUMtPkluZGV4XSwiMTAwRkQiKT09MCkgewotCQkgICAgZm9yIChQb3J0ID0gMDsgUG9ydCA8IFNLX01BWF9NQUNTOyBQb3J0KyspIHsKLQkJCU1fQ3VyclBvcnQuUExpbmtNb2RlQ29uZiA9IENhcGFiaWxpdGllc1tBTl9PRkZdW0RDX0ZVTExdOwotCQkJTV9DdXJyUG9ydC5QRmxvd0N0cmxNb2RlID0gU0tfRkxPV19NT0RFX05PTkU7Ci0JCQlNX0N1cnJQb3J0LlBNU01vZGUgICAgICAgPSBTS19NU19NT0RFX0FVVE87Ci0JCQlNX0N1cnJQb3J0LlBMaW5rU3BlZWQgICAgPSBTS19MU1BFRURfMTAwTUJQUzsKLQkJICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChDb25UeXBlW3BBQy0+SW5kZXhdLCIxMDBIRCIpPT0wKSB7Ci0JCSAgICBmb3IgKFBvcnQgPSAwOyBQb3J0IDwgU0tfTUFYX01BQ1M7IFBvcnQrKykgewotCQkJTV9DdXJyUG9ydC5QTGlua01vZGVDb25mID0gQ2FwYWJpbGl0aWVzW0FOX09GRl1bRENfSEFMRl07Ci0JCQlNX0N1cnJQb3J0LlBGbG93Q3RybE1vZGUgPSBTS19GTE9XX01PREVfTk9ORTsKLQkJCU1fQ3VyclBvcnQuUE1TTW9kZSAgICAgICA9IFNLX01TX01PREVfQVVUTzsKLQkJCU1fQ3VyclBvcnQuUExpbmtTcGVlZCAgICA9IFNLX0xTUEVFRF8xMDBNQlBTOwotCQkgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKENvblR5cGVbcEFDLT5JbmRleF0sIjEwRkQiKT09MCkgewotCQkgICAgZm9yIChQb3J0ID0gMDsgUG9ydCA8IFNLX01BWF9NQUNTOyBQb3J0KyspIHsKLQkJCU1fQ3VyclBvcnQuUExpbmtNb2RlQ29uZiA9IENhcGFiaWxpdGllc1tBTl9PRkZdW0RDX0ZVTExdOwotCQkJTV9DdXJyUG9ydC5QRmxvd0N0cmxNb2RlID0gU0tfRkxPV19NT0RFX05PTkU7Ci0JCQlNX0N1cnJQb3J0LlBNU01vZGUgICAgICAgPSBTS19NU19NT0RFX0FVVE87Ci0JCQlNX0N1cnJQb3J0LlBMaW5rU3BlZWQgICAgPSBTS19MU1BFRURfMTBNQlBTOwotCQkgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKENvblR5cGVbcEFDLT5JbmRleF0sIjEwSEQiKT09MCkgewotCQkgICAgZm9yIChQb3J0ID0gMDsgUG9ydCA8IFNLX01BWF9NQUNTOyBQb3J0KyspIHsKLQkJCU1fQ3VyclBvcnQuUExpbmtNb2RlQ29uZiA9IENhcGFiaWxpdGllc1tBTl9PRkZdW0RDX0hBTEZdOwotCQkJTV9DdXJyUG9ydC5QRmxvd0N0cmxNb2RlID0gU0tfRkxPV19NT0RFX05PTkU7Ci0JCQlNX0N1cnJQb3J0LlBNU01vZGUgICAgICAgPSBTS19NU19NT0RFX0FVVE87Ci0JCQlNX0N1cnJQb3J0LlBMaW5rU3BlZWQgICAgPSBTS19MU1BFRURfMTBNQlBTOwotCQkgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7IAotCQkgICAgcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIFwiJXNcIiBmb3IgQ29uVHlwZVxuIiwgCi0JCQlDb25UeXBlW3BBQy0+SW5kZXhdKTsKLQkJICAgIElzQ29uVHlwZURlZmluZWQgPSBTS19GQUxTRTsgLyogV3JvbmcgQ29uVHlwZSBkZWZpbmVkICovCi0JCX0KLSAgICAgICAgfSBlbHNlIHsKLQkgICAgSXNDb25UeXBlRGVmaW5lZCA9IFNLX0ZBTFNFOyAvKiBObyBDb25UeXBlIGRlZmluZWQgKi8KLQl9Ci0KLQkvKgotCSoqIFBhcnNlIGFueSBwYXJhbWV0ZXIgc2V0dGluZ3MgZm9yIHBvcnQgQToKLQkqKiBhKSBhbnkgTGlua1NwZWVkIHN0YXRlZD8KLQkqLwotCWlmIChTcGVlZF9BICE9IE5VTEwgJiYgcEFDLT5JbmRleDxTS19NQVhfQ0FSRF9QQVJBTSAmJgotCQlTcGVlZF9BW3BBQy0+SW5kZXhdICE9IE5VTEwpIHsKLQkJaWYgKHN0cmNtcChTcGVlZF9BW3BBQy0+SW5kZXhdLCIiKT09MCkgewotCQkgICAgSXNMaW5rU3BlZWREZWZpbmVkID0gU0tfRkFMU0U7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFNwZWVkX0FbcEFDLT5JbmRleF0sIkF1dG8iKT09MCkgewotCQkgICAgTGlua1NwZWVkID0gU0tfTFNQRUVEX0FVVE87Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFNwZWVkX0FbcEFDLT5JbmRleF0sIjEwIik9PTApIHsKLQkJICAgIExpbmtTcGVlZCA9IFNLX0xTUEVFRF8xME1CUFM7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFNwZWVkX0FbcEFDLT5JbmRleF0sIjEwMCIpPT0wKSB7Ci0JCSAgICBMaW5rU3BlZWQgPSBTS19MU1BFRURfMTAwTUJQUzsKLQkJfSBlbHNlIGlmIChzdHJjbXAoU3BlZWRfQVtwQUMtPkluZGV4XSwiMTAwMCIpPT0wKSB7Ci0JCSAgICBMaW5rU3BlZWQgPSBTS19MU1BFRURfMTAwME1CUFM7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGsoInNrOThsaW46IElsbGVnYWwgdmFsdWUgXCIlc1wiIGZvciBTcGVlZF9BXG4iLAotCQkJU3BlZWRfQVtwQUMtPkluZGV4XSk7Ci0JCSAgICBJc0xpbmtTcGVlZERlZmluZWQgPSBTS19GQUxTRTsKLQkJfQotCX0gZWxzZSB7Ci0JICAgIElzTGlua1NwZWVkRGVmaW5lZCA9IFNLX0ZBTFNFOwotCX0KLQotCS8qIAotCSoqIENoZWNrIHNwZWVkIHBhcmFtZXRlcjogCi0JKiogICAgT25seSBjb3BwZXIgdHlwZSBhZGFwdGVyIGFuZCBHRSBWMiBjYXJkcyAKLQkqLwotCWlmICgoKCFwQUMtPkNoaXBzZXRUeXBlKSB8fCAocEFDLT5HSW5pLkdJQ29wcGVyVHlwZSAhPSBTS19UUlVFKSkgJiYKLQkJKChMaW5rU3BlZWQgIT0gU0tfTFNQRUVEX0FVVE8pICYmCi0JCShMaW5rU3BlZWQgIT0gU0tfTFNQRUVEXzEwMDBNQlBTKSkpIHsKLQkJcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIGZvciBTcGVlZF9BLiAiCi0JCQkiTm90IGEgY29wcGVyIGNhcmQgb3IgR0UgVjIgY2FyZFxuICAgIFVzaW5nICIKLQkJCSJzcGVlZCAxMDAwXG4iKTsKLQkJTGlua1NwZWVkID0gU0tfTFNQRUVEXzEwMDBNQlBTOwotCX0KLQkKLQkvKgkKLQkqKiBEZWNpZGUgd2hldGhlciB0byBzZXQgbmV3IGNvbmZpZyB2YWx1ZSBpZiBzb21ldGhpZyB2YWxpZCBoYXMKLQkqKiBiZWVuIHJlY2VpdmVkLgotCSovCi0JaWYgKElzTGlua1NwZWVkRGVmaW5lZCkgewotCQlwQUMtPkdJbmkuR1BbMF0uUExpbmtTcGVlZCA9IExpbmtTcGVlZDsKLQl9IAotCi0JLyogCi0JKiogYikgQW55IEF1dG9uZWdvdGlhdGlvbiBhbmQgRHVwbGV4Q2FwYWJpbGl0aWVzIHNldD8KLQkqKiAgICBQbGVhc2Ugbm90ZSB0aGF0IGJvdGggYmVsb25nIHRvZ2V0aGVyLi4uCi0JKi8KLQlBdXRvTmVnID0gQU5fT047IC8qIHRzY2hpbGxpbmc6IERlZmF1bHQ6IEF1dG9uZWdvdGlhdGlvbiBvbiEgKi8KLQlBdXRvU2V0ID0gU0tfRkFMU0U7Ci0JaWYgKEF1dG9OZWdfQSAhPSBOVUxMICYmIHBBQy0+SW5kZXg8U0tfTUFYX0NBUkRfUEFSQU0gJiYKLQkJQXV0b05lZ19BW3BBQy0+SW5kZXhdICE9IE5VTEwpIHsKLQkJQXV0b1NldCA9IFNLX1RSVUU7Ci0JCWlmIChzdHJjbXAoQXV0b05lZ19BW3BBQy0+SW5kZXhdLCIiKT09MCkgewotCQkgICAgQXV0b1NldCA9IFNLX0ZBTFNFOwotCQl9IGVsc2UgaWYgKHN0cmNtcChBdXRvTmVnX0FbcEFDLT5JbmRleF0sIk9uIik9PTApIHsKLQkJICAgIEF1dG9OZWcgPSBBTl9PTjsKLQkJfSBlbHNlIGlmIChzdHJjbXAoQXV0b05lZ19BW3BBQy0+SW5kZXhdLCJPZmYiKT09MCkgewotCQkgICAgQXV0b05lZyA9IEFOX09GRjsKLQkJfSBlbHNlIGlmIChzdHJjbXAoQXV0b05lZ19BW3BBQy0+SW5kZXhdLCJTZW5zZSIpPT0wKSB7Ci0JCSAgICBBdXRvTmVnID0gQU5fU0VOUzsKLQkJfSBlbHNlIHsKLQkJICAgIHByaW50aygic2s5OGxpbjogSWxsZWdhbCB2YWx1ZSBcIiVzXCIgZm9yIEF1dG9OZWdfQVxuIiwKLQkJCUF1dG9OZWdfQVtwQUMtPkluZGV4XSk7Ci0JCX0KLQl9Ci0KLQlEdXBsZXhDYXAgPSBEQ19CT1RIOwotCUR1cFNldCAgICA9IFNLX0ZBTFNFOwotCWlmIChEdXBDYXBfQSAhPSBOVUxMICYmIHBBQy0+SW5kZXg8U0tfTUFYX0NBUkRfUEFSQU0gJiYKLQkJRHVwQ2FwX0FbcEFDLT5JbmRleF0gIT0gTlVMTCkgewotCQlEdXBTZXQgPSBTS19UUlVFOwotCQlpZiAoc3RyY21wKER1cENhcF9BW3BBQy0+SW5kZXhdLCIiKT09MCkgewotCQkgICAgRHVwU2V0ID0gU0tfRkFMU0U7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKER1cENhcF9BW3BBQy0+SW5kZXhdLCJCb3RoIik9PTApIHsKLQkJICAgIER1cGxleENhcCA9IERDX0JPVEg7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKER1cENhcF9BW3BBQy0+SW5kZXhdLCJGdWxsIik9PTApIHsKLQkJICAgIER1cGxleENhcCA9IERDX0ZVTEw7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKER1cENhcF9BW3BBQy0+SW5kZXhdLCJIYWxmIik9PTApIHsKLQkJICAgIER1cGxleENhcCA9IERDX0hBTEY7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGsoInNrOThsaW46IElsbGVnYWwgdmFsdWUgXCIlc1wiIGZvciBEdXBDYXBfQVxuIiwKLQkJCUR1cENhcF9BW3BBQy0+SW5kZXhdKTsKLQkJfQotCX0KLQotCS8qIAotCSoqIENoZWNrIGZvciBpbGxlZ2FsIGNvbWJpbmF0aW9ucyAKLQkqLwotCWlmICgoTGlua1NwZWVkID09IFNLX0xTUEVFRF8xMDAwTUJQUykgJiYKLQkJKChEdXBsZXhDYXAgPT0gU0tfTE1PREVfU1RBVF9BVVRPSEFMRikgfHwKLQkJKER1cGxleENhcCA9PSBTS19MTU9ERV9TVEFUX0hBTEYpKSAmJgotCQkocEFDLT5DaGlwc2V0VHlwZSkpIHsKLQkJICAgIHByaW50aygic2s5OGxpbjogSGFsZiBEdXBsZXggbm90IHBvc3NpYmxlIHdpdGggR2lnYWJpdCBzcGVlZCFcbiIKLQkJCQkJIiAgICBVc2luZyBGdWxsIER1cGxleC5cbiIpOwotCQkJCUR1cGxleENhcCA9IERDX0ZVTEw7Ci0JfQotCi0JaWYgKCBBdXRvU2V0ICYmIEF1dG9OZWc9PUFOX1NFTlMgJiYgRHVwU2V0KSB7Ci0JCXByaW50aygic2s5OGxpbiwgUG9ydCBBOiBEdXBsZXhDYXBhYmlsaXRpZXMiCi0JCQkiIGlnbm9yZWQgdXNpbmcgU2Vuc2UgbW9kZVxuIik7Ci0JfQotCi0JaWYgKEF1dG9TZXQgJiYgQXV0b05lZz09QU5fT0ZGICYmIER1cFNldCAmJiBEdXBsZXhDYXA9PURDX0JPVEgpewotCQlwcmludGsoInNrOThsaW46IFBvcnQgQTogSWxsZWdhbCBjb21iaW5hdGlvbiIKLQkJCSIgb2YgdmFsdWVzIEF1dG9OZWcuIGFuZCBEdXBsZXhDYXAuXG4gICAgVXNpbmcgIgotCQkJIkZ1bGwgRHVwbGV4XG4iKTsKLQkJRHVwbGV4Q2FwID0gRENfRlVMTDsKLQl9Ci0KLQlpZiAoQXV0b1NldCAmJiBBdXRvTmVnPT1BTl9PRkYgJiYgIUR1cFNldCkgewotCQlEdXBsZXhDYXAgPSBEQ19GVUxMOwotCX0KLQkKLQlpZiAoIUF1dG9TZXQgJiYgRHVwU2V0KSB7Ci0JCXByaW50aygic2s5OGxpbjogUG9ydCBBOiBEdXBsZXggc2V0dGluZyBub3QiCi0JCQkiIHBvc3NpYmxlIGluXG4gICAgZGVmYXVsdCBBdXRvTmVnb3RpYXRpb24gbW9kZSIKLQkJCSIgKFNlbnNlKS5cbiAgICBVc2luZyBBdXRvTmVnb3RpYXRpb24gT25cbiIpOwotCQlBdXRvTmVnID0gQU5fT047Ci0JfQotCQotCS8qIAotCSoqIHNldCB0aGUgZGVzaXJlZCBtb2RlIAotCSovCi0JaWYgKEF1dG9TZXQgfHwgRHVwU2V0KSB7Ci0JICAgIHBBQy0+R0luaS5HUFswXS5QTGlua01vZGVDb25mID0gQ2FwYWJpbGl0aWVzW0F1dG9OZWddW0R1cGxleENhcF07Ci0JfQotCQotCS8qIAotCSoqIGMpIEFueSBGbG93Y29udHJvbC1wYXJhbWV0ZXIgc2V0PwotCSovCi0JaWYgKEZsb3dDdHJsX0EgIT0gTlVMTCAmJiBwQUMtPkluZGV4PFNLX01BWF9DQVJEX1BBUkFNICYmCi0JCUZsb3dDdHJsX0FbcEFDLT5JbmRleF0gIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKEZsb3dDdHJsX0FbcEFDLT5JbmRleF0sIiIpID09IDApIHsKLQkJICAgIElzRmxvd0N0cmxEZWZpbmVkID0gU0tfRkFMU0U7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKEZsb3dDdHJsX0FbcEFDLT5JbmRleF0sIlN5bU9yUmVtIikgPT0gMCkgewotCQkgICAgRmxvd0N0cmwgPSBTS19GTE9XX01PREVfU1lNX09SX1JFTTsKLQkJfSBlbHNlIGlmIChzdHJjbXAoRmxvd0N0cmxfQVtwQUMtPkluZGV4XSwiU3ltIik9PTApIHsKLQkJICAgIEZsb3dDdHJsID0gU0tfRkxPV19NT0RFX1NZTU1FVFJJQzsKLQkJfSBlbHNlIGlmIChzdHJjbXAoRmxvd0N0cmxfQVtwQUMtPkluZGV4XSwiTG9jU2VuZCIpPT0wKSB7Ci0JCSAgICBGbG93Q3RybCA9IFNLX0ZMT1dfTU9ERV9MT0NfU0VORDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoRmxvd0N0cmxfQVtwQUMtPkluZGV4XSwiTm9uZSIpPT0wKSB7Ci0JCSAgICBGbG93Q3RybCA9IFNLX0ZMT1dfTU9ERV9OT05FOwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIFwiJXNcIiBmb3IgRmxvd0N0cmxfQVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZsb3dDdHJsX0FbcEFDLT5JbmRleF0pOwotCQkgICAgSXNGbG93Q3RybERlZmluZWQgPSBTS19GQUxTRTsKLQkJfQotCX0gZWxzZSB7Ci0JICAgSXNGbG93Q3RybERlZmluZWQgPSBTS19GQUxTRTsKLQl9Ci0KLQlpZiAoSXNGbG93Q3RybERlZmluZWQpIHsKLQkgICAgaWYgKChBdXRvTmVnID09IEFOX09GRikgJiYgKEZsb3dDdHJsICE9IFNLX0ZMT1dfTU9ERV9OT05FKSkgewotCQlwcmludGsoInNrOThsaW46IFBvcnQgQTogRmxvd0NvbnRyb2wiCi0JCQkiIGltcG9zc2libGUgd2l0aG91dCBBdXRvTmVnb3RpYXRpb24sIgotCQkJIiBkaXNhYmxlZFxuIik7Ci0JCUZsb3dDdHJsID0gU0tfRkxPV19NT0RFX05PTkU7Ci0JICAgIH0KLQkgICAgcEFDLT5HSW5pLkdQWzBdLlBGbG93Q3RybE1vZGUgPSBGbG93Q3RybDsKLQl9Ci0KLQkvKgotCSoqIGQpIFdoYXQgaXMgd2l0aCB0aGUgUm9sZVBhcmFtZXRlcj8KLQkqLwotCWlmIChSb2xlX0EgIT0gTlVMTCAmJiBwQUMtPkluZGV4PFNLX01BWF9DQVJEX1BBUkFNICYmCi0JCVJvbGVfQVtwQUMtPkluZGV4XSAhPSBOVUxMKSB7Ci0JCWlmIChzdHJjbXAoUm9sZV9BW3BBQy0+SW5kZXhdLCIiKT09MCkgewotCQkgICBJc1JvbGVEZWZpbmVkID0gU0tfRkFMU0U7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFJvbGVfQVtwQUMtPkluZGV4XSwiQXV0byIpPT0wKSB7Ci0JCSAgICBNU01vZGUgPSBTS19NU19NT0RFX0FVVE87Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFJvbGVfQVtwQUMtPkluZGV4XSwiTWFzdGVyIik9PTApIHsKLQkJICAgIE1TTW9kZSA9IFNLX01TX01PREVfTUFTVEVSOwotCQl9IGVsc2UgaWYgKHN0cmNtcChSb2xlX0FbcEFDLT5JbmRleF0sIlNsYXZlIik9PTApIHsKLQkJICAgIE1TTW9kZSA9IFNLX01TX01PREVfU0xBVkU7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGsoInNrOThsaW46IElsbGVnYWwgdmFsdWUgXCIlc1wiIGZvciBSb2xlX0FcbiIsCi0JCQlSb2xlX0FbcEFDLT5JbmRleF0pOwotCQkgICAgSXNSb2xlRGVmaW5lZCA9IFNLX0ZBTFNFOwotCQl9Ci0JfSBlbHNlIHsKLQkgICBJc1JvbGVEZWZpbmVkID0gU0tfRkFMU0U7Ci0JfQotCi0JaWYgKElzUm9sZURlZmluZWQgPT0gU0tfVFJVRSkgewotCSAgICBwQUMtPkdJbmkuR1BbMF0uUE1TTW9kZSA9IE1TTW9kZTsKLQl9Ci0JCi0KLQkKLQkvKiAKLQkqKiBQYXJzZSBhbnkgcGFyYW1ldGVyIHNldHRpbmdzIGZvciBwb3J0IEI6Ci0JKiogYSkgYW55IExpbmtTcGVlZCBzdGF0ZWQ/Ci0JKi8KLQlJc0NvblR5cGVEZWZpbmVkICAgPSBTS19UUlVFOwotCUlzTGlua1NwZWVkRGVmaW5lZCA9IFNLX1RSVUU7Ci0JSXNGbG93Q3RybERlZmluZWQgID0gU0tfVFJVRTsKLQlJc01vZGVEZWZpbmVkICAgICAgPSBTS19UUlVFOwotCi0JaWYgKFNwZWVkX0IgIT0gTlVMTCAmJiBwQUMtPkluZGV4PFNLX01BWF9DQVJEX1BBUkFNICYmCi0JCVNwZWVkX0JbcEFDLT5JbmRleF0gIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKFNwZWVkX0JbcEFDLT5JbmRleF0sIiIpPT0wKSB7Ci0JCSAgICBJc0xpbmtTcGVlZERlZmluZWQgPSBTS19GQUxTRTsKLQkJfSBlbHNlIGlmIChzdHJjbXAoU3BlZWRfQltwQUMtPkluZGV4XSwiQXV0byIpPT0wKSB7Ci0JCSAgICBMaW5rU3BlZWQgPSBTS19MU1BFRURfQVVUTzsKLQkJfSBlbHNlIGlmIChzdHJjbXAoU3BlZWRfQltwQUMtPkluZGV4XSwiMTAiKT09MCkgewotCQkgICAgTGlua1NwZWVkID0gU0tfTFNQRUVEXzEwTUJQUzsKLQkJfSBlbHNlIGlmIChzdHJjbXAoU3BlZWRfQltwQUMtPkluZGV4XSwiMTAwIik9PTApIHsKLQkJICAgIExpbmtTcGVlZCA9IFNLX0xTUEVFRF8xMDBNQlBTOwotCQl9IGVsc2UgaWYgKHN0cmNtcChTcGVlZF9CW3BBQy0+SW5kZXhdLCIxMDAwIik9PTApIHsKLQkJICAgIExpbmtTcGVlZCA9IFNLX0xTUEVFRF8xMDAwTUJQUzsKLQkJfSBlbHNlIHsKLQkJICAgIHByaW50aygic2s5OGxpbjogSWxsZWdhbCB2YWx1ZSBcIiVzXCIgZm9yIFNwZWVkX0JcbiIsCi0JCQlTcGVlZF9CW3BBQy0+SW5kZXhdKTsKLQkJICAgIElzTGlua1NwZWVkRGVmaW5lZCA9IFNLX0ZBTFNFOwotCQl9Ci0JfSBlbHNlIHsKLQkgICAgSXNMaW5rU3BlZWREZWZpbmVkID0gU0tfRkFMU0U7Ci0JfQotCi0JLyogCi0JKiogQ2hlY2sgc3BlZWQgcGFyYW1ldGVyOgotCSoqICAgIE9ubHkgY29wcGVyIHR5cGUgYWRhcHRlciBhbmQgR0UgVjIgY2FyZHMgCi0JKi8KLQlpZiAoKCghcEFDLT5DaGlwc2V0VHlwZSkgfHwgKHBBQy0+R0luaS5HSUNvcHBlclR5cGUgIT0gU0tfVFJVRSkpICYmCi0JCSgoTGlua1NwZWVkICE9IFNLX0xTUEVFRF9BVVRPKSAmJgotCQkoTGlua1NwZWVkICE9IFNLX0xTUEVFRF8xMDAwTUJQUykpKSB7Ci0JCXByaW50aygic2s5OGxpbjogSWxsZWdhbCB2YWx1ZSBmb3IgU3BlZWRfQi4gIgotCQkJIk5vdCBhIGNvcHBlciBjYXJkIG9yIEdFIFYyIGNhcmRcbiAgICBVc2luZyAiCi0JCQkic3BlZWQgMTAwMFxuIik7Ci0JCUxpbmtTcGVlZCA9IFNLX0xTUEVFRF8xMDAwTUJQUzsKLQl9Ci0KLQkvKiAgICAgIAotCSoqIERlY2lkZSB3aGV0aGVyIHRvIHNldCBuZXcgY29uZmlnIHZhbHVlIGlmIHNvbWV0aGlnIHZhbGlkIGhhcwotCSoqIGJlZW4gcmVjZWl2ZWQuCi0JKi8KLSAgICAgICAgaWYgKElzTGlua1NwZWVkRGVmaW5lZCkgewotCSAgICBwQUMtPkdJbmkuR1BbMV0uUExpbmtTcGVlZCA9IExpbmtTcGVlZDsKLQl9Ci0KLQkvKiAKLQkqKiBiKSBBbnkgQXV0b25lZ290aWF0aW9uIGFuZCBEdXBsZXhDYXBhYmlsaXRpZXMgc2V0PwotCSoqICAgIFBsZWFzZSBub3RlIHRoYXQgYm90aCBiZWxvbmcgdG9nZXRoZXIuLi4KLQkqLwotCUF1dG9OZWcgPSBBTl9TRU5TOyAvKiBkZWZhdWx0OiBkbyBhdXRvIFNlbnNlICovCi0JQXV0b1NldCA9IFNLX0ZBTFNFOwotCWlmIChBdXRvTmVnX0IgIT0gTlVMTCAmJiBwQUMtPkluZGV4PFNLX01BWF9DQVJEX1BBUkFNICYmCi0JCUF1dG9OZWdfQltwQUMtPkluZGV4XSAhPSBOVUxMKSB7Ci0JCUF1dG9TZXQgPSBTS19UUlVFOwotCQlpZiAoc3RyY21wKEF1dG9OZWdfQltwQUMtPkluZGV4XSwiIik9PTApIHsKLQkJICAgIEF1dG9TZXQgPSBTS19GQUxTRTsKLQkJfSBlbHNlIGlmIChzdHJjbXAoQXV0b05lZ19CW3BBQy0+SW5kZXhdLCJPbiIpPT0wKSB7Ci0JCSAgICBBdXRvTmVnID0gQU5fT047Ci0JCX0gZWxzZSBpZiAoc3RyY21wKEF1dG9OZWdfQltwQUMtPkluZGV4XSwiT2ZmIik9PTApIHsKLQkJICAgIEF1dG9OZWcgPSBBTl9PRkY7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKEF1dG9OZWdfQltwQUMtPkluZGV4XSwiU2Vuc2UiKT09MCkgewotCQkgICAgQXV0b05lZyA9IEFOX1NFTlM7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGsoInNrOThsaW46IElsbGVnYWwgdmFsdWUgXCIlc1wiIGZvciBBdXRvTmVnX0JcbiIsCi0JCQlBdXRvTmVnX0JbcEFDLT5JbmRleF0pOwotCQl9Ci0JfQotCi0JRHVwbGV4Q2FwID0gRENfQk9USDsKLQlEdXBTZXQgICAgPSBTS19GQUxTRTsKLQlpZiAoRHVwQ2FwX0IgIT0gTlVMTCAmJiBwQUMtPkluZGV4PFNLX01BWF9DQVJEX1BBUkFNICYmCi0JCUR1cENhcF9CW3BBQy0+SW5kZXhdICE9IE5VTEwpIHsKLQkJRHVwU2V0ID0gU0tfVFJVRTsKLQkJaWYgKHN0cmNtcChEdXBDYXBfQltwQUMtPkluZGV4XSwiIik9PTApIHsKLQkJICAgIER1cFNldCA9IFNLX0ZBTFNFOwotCQl9IGVsc2UgaWYgKHN0cmNtcChEdXBDYXBfQltwQUMtPkluZGV4XSwiQm90aCIpPT0wKSB7Ci0JCSAgICBEdXBsZXhDYXAgPSBEQ19CT1RIOwotCQl9IGVsc2UgaWYgKHN0cmNtcChEdXBDYXBfQltwQUMtPkluZGV4XSwiRnVsbCIpPT0wKSB7Ci0JCSAgICBEdXBsZXhDYXAgPSBEQ19GVUxMOwotCQl9IGVsc2UgaWYgKHN0cmNtcChEdXBDYXBfQltwQUMtPkluZGV4XSwiSGFsZiIpPT0wKSB7Ci0JCSAgICBEdXBsZXhDYXAgPSBEQ19IQUxGOwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIFwiJXNcIiBmb3IgRHVwQ2FwX0JcbiIsCi0JCQlEdXBDYXBfQltwQUMtPkluZGV4XSk7Ci0JCX0KLQl9Ci0KLQkKLQkvKiAKLQkqKiBDaGVjayBmb3IgaWxsZWdhbCBjb21iaW5hdGlvbnMgCi0JKi8KLQlpZiAoKExpbmtTcGVlZCA9PSBTS19MU1BFRURfMTAwME1CUFMpICYmCi0JCSgoRHVwbGV4Q2FwID09IFNLX0xNT0RFX1NUQVRfQVVUT0hBTEYpIHx8Ci0JCShEdXBsZXhDYXAgPT0gU0tfTE1PREVfU1RBVF9IQUxGKSkgJiYKLQkJKHBBQy0+Q2hpcHNldFR5cGUpKSB7Ci0JCSAgICBwcmludGsoInNrOThsaW46IEhhbGYgRHVwbGV4IG5vdCBwb3NzaWJsZSB3aXRoIEdpZ2FiaXQgc3BlZWQhXG4iCi0JCQkJCSIgICAgVXNpbmcgRnVsbCBEdXBsZXguXG4iKTsKLQkJCQlEdXBsZXhDYXAgPSBEQ19GVUxMOwotCX0KLQotCWlmIChBdXRvU2V0ICYmIEF1dG9OZWc9PUFOX1NFTlMgJiYgRHVwU2V0KSB7Ci0JCXByaW50aygic2s5OGxpbiwgUG9ydCBCOiBEdXBsZXhDYXBhYmlsaXRpZXMiCi0JCQkiIGlnbm9yZWQgdXNpbmcgU2Vuc2UgbW9kZVxuIik7Ci0JfQotCi0JaWYgKEF1dG9TZXQgJiYgQXV0b05lZz09QU5fT0ZGICYmIER1cFNldCAmJiBEdXBsZXhDYXA9PURDX0JPVEgpewotCQlwcmludGsoInNrOThsaW46IFBvcnQgQjogSWxsZWdhbCBjb21iaW5hdGlvbiIKLQkJCSIgb2YgdmFsdWVzIEF1dG9OZWcuIGFuZCBEdXBsZXhDYXAuXG4gICAgVXNpbmcgIgotCQkJIkZ1bGwgRHVwbGV4XG4iKTsKLQkJRHVwbGV4Q2FwID0gRENfRlVMTDsKLQl9Ci0KLQlpZiAoQXV0b1NldCAmJiBBdXRvTmVnPT1BTl9PRkYgJiYgIUR1cFNldCkgewotCQlEdXBsZXhDYXAgPSBEQ19GVUxMOwotCX0KLQkKLQlpZiAoIUF1dG9TZXQgJiYgRHVwU2V0KSB7Ci0JCXByaW50aygic2s5OGxpbjogUG9ydCBCOiBEdXBsZXggc2V0dGluZyBub3QiCi0JCQkiIHBvc3NpYmxlIGluXG4gICAgZGVmYXVsdCBBdXRvTmVnb3RpYXRpb24gbW9kZSIKLQkJCSIgKFNlbnNlKS5cbiAgICBVc2luZyBBdXRvTmVnb3RpYXRpb24gT25cbiIpOwotCQlBdXRvTmVnID0gQU5fT047Ci0JfQotCi0JLyogCi0JKiogc2V0IHRoZSBkZXNpcmVkIG1vZGUgCi0JKi8KLQlpZiAoQXV0b1NldCB8fCBEdXBTZXQpIHsKLQkgICAgcEFDLT5HSW5pLkdQWzFdLlBMaW5rTW9kZUNvbmYgPSBDYXBhYmlsaXRpZXNbQXV0b05lZ11bRHVwbGV4Q2FwXTsKLQl9Ci0KLQkvKgotCSoqIGMpIEFueSBGbG93Q3RybCBwYXJhbWV0ZXIgc2V0PwotCSovCi0JaWYgKEZsb3dDdHJsX0IgIT0gTlVMTCAmJiBwQUMtPkluZGV4PFNLX01BWF9DQVJEX1BBUkFNICYmCi0JCUZsb3dDdHJsX0JbcEFDLT5JbmRleF0gIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKEZsb3dDdHJsX0JbcEFDLT5JbmRleF0sIiIpID09IDApIHsKLQkJICAgIElzRmxvd0N0cmxEZWZpbmVkID0gU0tfRkFMU0U7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKEZsb3dDdHJsX0JbcEFDLT5JbmRleF0sIlN5bU9yUmVtIikgPT0gMCkgewotCQkgICAgRmxvd0N0cmwgPSBTS19GTE9XX01PREVfU1lNX09SX1JFTTsKLQkJfSBlbHNlIGlmIChzdHJjbXAoRmxvd0N0cmxfQltwQUMtPkluZGV4XSwiU3ltIik9PTApIHsKLQkJICAgIEZsb3dDdHJsID0gU0tfRkxPV19NT0RFX1NZTU1FVFJJQzsKLQkJfSBlbHNlIGlmIChzdHJjbXAoRmxvd0N0cmxfQltwQUMtPkluZGV4XSwiTG9jU2VuZCIpPT0wKSB7Ci0JCSAgICBGbG93Q3RybCA9IFNLX0ZMT1dfTU9ERV9MT0NfU0VORDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoRmxvd0N0cmxfQltwQUMtPkluZGV4XSwiTm9uZSIpPT0wKSB7Ci0JCSAgICBGbG93Q3RybCA9IFNLX0ZMT1dfTU9ERV9OT05FOwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIFwiJXNcIiBmb3IgRmxvd0N0cmxfQlxuIiwKLQkJCUZsb3dDdHJsX0JbcEFDLT5JbmRleF0pOwotCQkgICAgSXNGbG93Q3RybERlZmluZWQgPSBTS19GQUxTRTsKLQkJfQotCX0gZWxzZSB7Ci0JCUlzRmxvd0N0cmxEZWZpbmVkID0gU0tfRkFMU0U7Ci0JfQotCi0JaWYgKElzRmxvd0N0cmxEZWZpbmVkKSB7Ci0JICAgIGlmICgoQXV0b05lZyA9PSBBTl9PRkYpICYmIChGbG93Q3RybCAhPSBTS19GTE9XX01PREVfTk9ORSkpIHsKLQkJcHJpbnRrKCJzazk4bGluOiBQb3J0IEI6IEZsb3dDb250cm9sIgotCQkJIiBpbXBvc3NpYmxlIHdpdGhvdXQgQXV0b05lZ290aWF0aW9uLCIKLQkJCSIgZGlzYWJsZWRcbiIpOwotCQlGbG93Q3RybCA9IFNLX0ZMT1dfTU9ERV9OT05FOwotCSAgICB9Ci0JICAgIHBBQy0+R0luaS5HUFsxXS5QRmxvd0N0cmxNb2RlID0gRmxvd0N0cmw7Ci0JfQotCi0JLyoKLQkqKiBkKSBXaGF0IGlzIHRoZSBSb2xlUGFyYW1ldGVyPwotCSovCi0JaWYgKFJvbGVfQiAhPSBOVUxMICYmIHBBQy0+SW5kZXg8U0tfTUFYX0NBUkRfUEFSQU0gJiYKLQkJUm9sZV9CW3BBQy0+SW5kZXhdICE9IE5VTEwpIHsKLQkJaWYgKHN0cmNtcChSb2xlX0JbcEFDLT5JbmRleF0sIiIpPT0wKSB7Ci0JCSAgICBJc1JvbGVEZWZpbmVkID0gU0tfRkFMU0U7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFJvbGVfQltwQUMtPkluZGV4XSwiQXV0byIpPT0wKSB7Ci0JCSAgICBNU01vZGUgPSBTS19NU19NT0RFX0FVVE87Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFJvbGVfQltwQUMtPkluZGV4XSwiTWFzdGVyIik9PTApIHsKLQkJICAgIE1TTW9kZSA9IFNLX01TX01PREVfTUFTVEVSOwotCQl9IGVsc2UgaWYgKHN0cmNtcChSb2xlX0JbcEFDLT5JbmRleF0sIlNsYXZlIik9PTApIHsKLQkJICAgIE1TTW9kZSA9IFNLX01TX01PREVfU0xBVkU7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGsoInNrOThsaW46IElsbGVnYWwgdmFsdWUgXCIlc1wiIGZvciBSb2xlX0JcbiIsCi0JCQlSb2xlX0JbcEFDLT5JbmRleF0pOwotCQkgICAgSXNSb2xlRGVmaW5lZCA9IFNLX0ZBTFNFOwotCQl9Ci0JfSBlbHNlIHsKLQkgICAgSXNSb2xlRGVmaW5lZCA9IFNLX0ZBTFNFOwotCX0KLQotCWlmIChJc1JvbGVEZWZpbmVkKSB7Ci0JICAgIHBBQy0+R0luaS5HUFsxXS5QTVNNb2RlID0gTVNNb2RlOwotCX0KLQkKLQkvKgotCSoqIEV2YWx1YXRlIHNldHRpbmdzIGZvciBib3RoIHBvcnRzCi0JKi8KLQlwQUMtPkFjdGl2ZVBvcnQgPSAwOwotCWlmIChQcmVmUG9ydCAhPSBOVUxMICYmIHBBQy0+SW5kZXg8U0tfTUFYX0NBUkRfUEFSQU0gJiYKLQkJUHJlZlBvcnRbcEFDLT5JbmRleF0gIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKFByZWZQb3J0W3BBQy0+SW5kZXhdLCIiKSA9PSAwKSB7IC8qIEF1dG8gKi8KLQkJCXBBQy0+QWN0aXZlUG9ydCAgICAgICAgICAgICA9ICAwOwotCQkJcEFDLT5SbG10Lk5ldFswXS5QcmVmZXJlbmNlID0gLTE7IC8qIGF1dG8gKi8KLQkJCXBBQy0+UmxtdC5OZXRbMF0uUHJlZlBvcnQgICA9ICAwOwotCQl9IGVsc2UgaWYgKHN0cmNtcChQcmVmUG9ydFtwQUMtPkluZGV4XSwiQSIpID09IDApIHsKLQkJCS8qCi0JCQkqKiBkbyBub3Qgc2V0IEFjdGl2ZVBvcnQgaGVyZSwgdGh1cyBhIHBvcnQKLQkJCSoqIHN3aXRjaCBpcyBpc3N1ZWQgYWZ0ZXIgbmV0IHVwLgotCQkJKi8KLQkJCVBvcnQgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0JCQlwQUMtPlJsbXQuTmV0WzBdLlByZWZlcmVuY2UgPSBQb3J0OwotCQkJcEFDLT5SbG10Lk5ldFswXS5QcmVmUG9ydCAgID0gUG9ydDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoUHJlZlBvcnRbcEFDLT5JbmRleF0sIkIiKSA9PSAwKSB7Ci0JCQkvKgotCQkJKiogZG8gbm90IHNldCBBY3RpdmVQb3J0IGhlcmUsIHRodXMgYSBwb3J0Ci0JCQkqKiBzd2l0Y2ggaXMgaXNzdWVkIGFmdGVyIG5ldCB1cC4KLQkJCSovCi0JCQlpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDEpIHsKLQkJCQlwcmludGsoInNrOThsaW46IElsbGVnYWwgdmFsdWUgXCJCXCIgZm9yIFByZWZQb3J0LlxuIgotCQkJCQkiICAgICAgUG9ydCBCIG5vdCBhdmFpbGFibGUgb24gc2luZ2xlIHBvcnQgYWRhcHRlcnMuXG4iKTsKLQotCQkJCXBBQy0+QWN0aXZlUG9ydCAgICAgICAgICAgICA9ICAwOwotCQkJCXBBQy0+UmxtdC5OZXRbMF0uUHJlZmVyZW5jZSA9IC0xOyAvKiBhdXRvICovCi0JCQkJcEFDLT5SbG10Lk5ldFswXS5QcmVmUG9ydCAgID0gIDA7Ci0JCQl9IGVsc2UgewotCQkJCVBvcnQgICAgICAgICAgICAgICAgICAgICAgICA9IDE7Ci0JCQkJcEFDLT5SbG10Lk5ldFswXS5QcmVmZXJlbmNlID0gUG9ydDsKLQkJCQlwQUMtPlJsbXQuTmV0WzBdLlByZWZQb3J0ICAgPSBQb3J0OwotCQkJfQotCQl9IGVsc2UgewotCQkgICAgcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIFwiJXNcIiBmb3IgUHJlZlBvcnRcbiIsCi0JCQlQcmVmUG9ydFtwQUMtPkluZGV4XSk7Ci0JCX0KLQl9Ci0KLQlwQUMtPlJsbXROZXRzID0gMTsKLQotCWlmIChSbG10TW9kZSAhPSBOVUxMICYmIHBBQy0+SW5kZXg8U0tfTUFYX0NBUkRfUEFSQU0gJiYKLQkJUmxtdE1vZGVbcEFDLT5JbmRleF0gIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKFJsbXRNb2RlW3BBQy0+SW5kZXhdLCAiIikgPT0gMCkgewotCQkJcEFDLT5SbG10TW9kZSA9IDA7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFJsbXRNb2RlW3BBQy0+SW5kZXhdLCAiQ2hlY2tMaW5rU3RhdGUiKSA9PSAwKSB7Ci0JCQlwQUMtPlJsbXRNb2RlID0gU0tfUkxNVF9DSEVDS19MSU5LOwotCQl9IGVsc2UgaWYgKHN0cmNtcChSbG10TW9kZVtwQUMtPkluZGV4XSwgIkNoZWNrTG9jYWxQb3J0IikgPT0gMCkgewotCQkJcEFDLT5SbG10TW9kZSA9IFNLX1JMTVRfQ0hFQ0tfTElOSyB8Ci0JCQkJCVNLX1JMTVRfQ0hFQ0tfTE9DX0xJTks7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKFJsbXRNb2RlW3BBQy0+SW5kZXhdLCAiQ2hlY2tTZWciKSA9PSAwKSB7Ci0JCQlwQUMtPlJsbXRNb2RlID0gU0tfUkxNVF9DSEVDS19MSU5LICAgICB8Ci0JCQkJCVNLX1JMTVRfQ0hFQ0tfTE9DX0xJTksgfAotCQkJCQlTS19STE1UX0NIRUNLX1NFRzsKLQkJfSBlbHNlIGlmICgoc3RyY21wKFJsbXRNb2RlW3BBQy0+SW5kZXhdLCAiRHVhbE5ldCIpID09IDApICYmCi0JCQkocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDIpKSB7Ci0JCQlwQUMtPlJsbXRNb2RlID0gU0tfUkxNVF9DSEVDS19MSU5LOwotCQkJcEFDLT5SbG10TmV0cyA9IDI7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGsoInNrOThsaW46IElsbGVnYWwgdmFsdWUgXCIlc1wiIGZvciIKLQkJCSIgUmxtdE1vZGUsIHVzaW5nIGRlZmF1bHRcbiIsIAotCQkJUmxtdE1vZGVbcEFDLT5JbmRleF0pOwotCQkJcEFDLT5SbG10TW9kZSA9IDA7Ci0JCX0KLQl9IGVsc2UgewotCQlwQUMtPlJsbXRNb2RlID0gMDsKLQl9Ci0JCi0JLyoKLQkqKiBDaGVjayB0aGUgaW50ZXJydXB0IG1vZGVyYXRpb24gcGFyYW1ldGVycwotCSovCi0JaWYgKE1vZGVyYXRpb25bcEFDLT5JbmRleF0gIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKE1vZGVyYXRpb25bcEFDLT5JbmRleF0sICIiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uSW50TW9kVHlwZVNlbGVjdCA9IENfSU5UX01PRF9OT05FOwotCQl9IGVsc2UgaWYgKHN0cmNtcChNb2RlcmF0aW9uW3BBQy0+SW5kZXhdLCAiU3RhdGljIikgPT0gMCkgewotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLkludE1vZFR5cGVTZWxlY3QgPSBDX0lOVF9NT0RfU1RBVElDOwotCQl9IGVsc2UgaWYgKHN0cmNtcChNb2RlcmF0aW9uW3BBQy0+SW5kZXhdLCAiRHluYW1pYyIpID09IDApIHsKLQkJCXBBQy0+RHluSXJxTW9kSW5mby5JbnRNb2RUeXBlU2VsZWN0ID0gQ19JTlRfTU9EX0RZTkFNSUM7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKE1vZGVyYXRpb25bcEFDLT5JbmRleF0sICJOb25lIikgPT0gMCkgewotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLkludE1vZFR5cGVTZWxlY3QgPSBDX0lOVF9NT0RfTk9ORTsKLQkJfSBlbHNlIHsKLQkgICAJCXByaW50aygic2s5OGxpbjogSWxsZWdhbCB2YWx1ZSBcIiVzXCIgZm9yIE1vZGVyYXRpb24uXG4iCi0JCQkJIiAgICAgIERpc2FibGUgaW50ZXJydXB0IG1vZGVyYXRpb24uXG4iLAotCQkJCU1vZGVyYXRpb25bcEFDLT5JbmRleF0pOwotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLkludE1vZFR5cGVTZWxlY3QgPSBDX0lOVF9NT0RfTk9ORTsKLQkJfQotCX0gZWxzZSB7Ci0JCXBBQy0+RHluSXJxTW9kSW5mby5JbnRNb2RUeXBlU2VsZWN0ID0gQ19JTlRfTU9EX05PTkU7Ci0JfQotCi0JaWYgKFN0YXRzW3BBQy0+SW5kZXhdICE9IE5VTEwpIHsKLQkJaWYgKHN0cmNtcChTdGF0c1twQUMtPkluZGV4XSwgIlllcyIpID09IDApIHsKLQkJCXBBQy0+RHluSXJxTW9kSW5mby5EaXNwbGF5U3RhdHMgPSBTS19UUlVFOwotCQl9IGVsc2UgewotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLkRpc3BsYXlTdGF0cyA9IFNLX0ZBTFNFOwotCQl9Ci0JfSBlbHNlIHsKLQkJcEFDLT5EeW5JcnFNb2RJbmZvLkRpc3BsYXlTdGF0cyA9IFNLX0ZBTFNFOwotCX0KLQotCWlmIChNb2RlcmF0aW9uTWFza1twQUMtPkluZGV4XSAhPSBOVUxMKSB7Ci0JCWlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJSeCIpID09IDApIHsKLQkJCXBBQy0+RHluSXJxTW9kSW5mby5NYXNrSXJxTW9kZXJhdGlvbiA9IElSUV9NQVNLX1JYX09OTFk7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKE1vZGVyYXRpb25NYXNrW3BBQy0+SW5kZXhdLCAiVHgiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19UWF9PTkxZOwotCQl9IGVsc2UgaWYgKHN0cmNtcChNb2RlcmF0aW9uTWFza1twQUMtPkluZGV4XSwgIlNwIikgPT0gMCkgewotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLk1hc2tJcnFNb2RlcmF0aW9uID0gSVJRX01BU0tfU1BfT05MWTsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJSeFNwIikgPT0gMCkgewotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLk1hc2tJcnFNb2RlcmF0aW9uID0gSVJRX01BU0tfU1BfUlg7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKE1vZGVyYXRpb25NYXNrW3BBQy0+SW5kZXhdLCAiU3BSeCIpID09IDApIHsKLQkJCXBBQy0+RHluSXJxTW9kSW5mby5NYXNrSXJxTW9kZXJhdGlvbiA9IElSUV9NQVNLX1NQX1JYOwotCQl9IGVsc2UgaWYgKHN0cmNtcChNb2RlcmF0aW9uTWFza1twQUMtPkluZGV4XSwgIlJ4VHgiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19UWF9SWDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJUeFJ4IikgPT0gMCkgewotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLk1hc2tJcnFNb2RlcmF0aW9uID0gSVJRX01BU0tfVFhfUlg7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKE1vZGVyYXRpb25NYXNrW3BBQy0+SW5kZXhdLCAiVHhTcCIpID09IDApIHsKLQkJCXBBQy0+RHluSXJxTW9kSW5mby5NYXNrSXJxTW9kZXJhdGlvbiA9IElSUV9NQVNLX1NQX1RYOwotCQl9IGVsc2UgaWYgKHN0cmNtcChNb2RlcmF0aW9uTWFza1twQUMtPkluZGV4XSwgIlNwVHgiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19TUF9UWDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJSeFR4U3AiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19SWF9UWF9TUDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJSeFNwVHgiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19SWF9UWF9TUDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJUeFJ4U3AiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19SWF9UWF9TUDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJUeFNwUngiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19SWF9UWF9TUDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJTcFR4UngiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19SWF9UWF9TUDsKLQkJfSBlbHNlIGlmIChzdHJjbXAoTW9kZXJhdGlvbk1hc2tbcEFDLT5JbmRleF0sICJTcFJ4VHgiKSA9PSAwKSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19SWF9UWF9TUDsKLQkJfSBlbHNlIHsgLyogc29tZSBydWJiaXNoICovCi0JCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19SWF9PTkxZOwotCQl9Ci0JfSBlbHNlIHsgIC8qIG9wZXJhdG9yIGhhcyBzdGF0ZWQgbm90aGluZyAqLwotCQlwQUMtPkR5bklycU1vZEluZm8uTWFza0lycU1vZGVyYXRpb24gPSBJUlFfTUFTS19UWF9SWDsKLQl9Ci0KLQlpZiAoQXV0b1NpemluZ1twQUMtPkluZGV4XSAhPSBOVUxMKSB7Ci0JCWlmIChzdHJjbXAoQXV0b1NpemluZ1twQUMtPkluZGV4XSwgIk9uIikgPT0gMCkgewotCQkJcEFDLT5EeW5JcnFNb2RJbmZvLkF1dG9TaXppbmcgPSBTS19GQUxTRTsKLQkJfSBlbHNlIHsKLQkJCXBBQy0+RHluSXJxTW9kSW5mby5BdXRvU2l6aW5nID0gU0tfRkFMU0U7Ci0JCX0KLQl9IGVsc2UgeyAgLyogb3BlcmF0b3IgaGFzIHN0YXRlZCBub3RoaW5nICovCi0JCXBBQy0+RHluSXJxTW9kSW5mby5BdXRvU2l6aW5nID0gU0tfRkFMU0U7Ci0JfQotCi0JaWYgKEludHNQZXJTZWNbcEFDLT5JbmRleF0gIT0gMCkgewotCQlpZiAoKEludHNQZXJTZWNbcEFDLT5JbmRleF08IENfSU5UX01PRF9JUFNfTE9XRVJfUkFOR0UpIHx8IAotCQkJKEludHNQZXJTZWNbcEFDLT5JbmRleF0gPiBDX0lOVF9NT0RfSVBTX1VQUEVSX1JBTkdFKSkgewotCSAgIAkJcHJpbnRrKCJzazk4bGluOiBJbGxlZ2FsIHZhbHVlIFwiJWRcIiBmb3IgSW50c1BlclNlYy4gKFJhbmdlOiAlZCAtICVkKVxuIgotCQkJCSIgICAgICBVc2luZyBkZWZhdWx0IHZhbHVlIG9mICVpLlxuIiwgCi0JCQkJSW50c1BlclNlY1twQUMtPkluZGV4XSwKLQkJCQlDX0lOVF9NT0RfSVBTX0xPV0VSX1JBTkdFLAotCQkJCUNfSU5UX01PRF9JUFNfVVBQRVJfUkFOR0UsCi0JCQkJQ19JTlRTX1BFUl9TRUNfREVGQVVMVCk7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyA9IENfSU5UU19QRVJfU0VDX0RFRkFVTFQ7Ci0JCX0gZWxzZSB7Ci0JCQlwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyA9IEludHNQZXJTZWNbcEFDLT5JbmRleF07Ci0JCX0KLQl9IGVsc2UgewotCQlwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyA9IENfSU5UU19QRVJfU0VDX0RFRkFVTFQ7Ci0JfQotCi0JLyoKLQkqKiBFdmFsdWF0ZSB1cHBlciBhbmQgbG93ZXIgbW9kZXJhdGlvbiB0aHJlc2hvbGQKLQkqLwotCXBBQy0+RHluSXJxTW9kSW5mby5NYXhNb2RJbnRzUGVyU2VjVXBwZXJMaW1pdCA9Ci0JCXBBQy0+RHluSXJxTW9kSW5mby5NYXhNb2RJbnRzUGVyU2VjICsKLQkJKHBBQy0+RHluSXJxTW9kSW5mby5NYXhNb2RJbnRzUGVyU2VjIC8gMik7Ci0KLQlwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlY0xvd2VyTGltaXQgPQotCQlwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyAtCi0JCShwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyAvIDIpOwotCi0JcEFDLT5EeW5JcnFNb2RJbmZvLlByZXZUaW1lVmFsID0gamlmZmllczsgIC8qIGluaXRpYWwgdmFsdWUgKi8KLQotCi19IC8qIEdldENvbmZpZ3VyYXRpb24gKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAJUHJvZHVjdFN0ciAtIHJldHVybiBhIGFkYXB0ZXIgaWRlbnRpZmljYXRpb24gc3RyaW5nIGZyb20gdnBkCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBwcm9kdWN0IG5hbWUgc3RyaW5nIGZyb20gdGhlIHZwZCBhcmVhCi0gKglhbmQgcHV0cyBpdCB0aGUgZmllbGQgcEFDLT5EZXZpY2VTdHJpbmcuCi0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IFByb2R1Y3RTdHIoCi0JU0tfQUMJKnBBQywJCS8qIHBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi0JY2hhciAgICAqRGV2aWNlU3RyLAkvKiByZXN1bHQgc3RyaW5nICovCi0JaW50ICAgICAgU3RyTGVuCQkvKiBsZW5ndGggb2YgdGhlIHN0cmluZyAqLwotKQotewotY2hhcglLZXl3b3JkW10gPSBWUERfTkFNRTsJLyogdnBkIHByb2R1Y3RuYW1lIGlkZW50aWZpZXIgKi8KLWludAlSZXR1cm5Db2RlOwkJLyogcmV0dXJuIGNvZGUgZnJvbSB2cGRfcmVhZCAqLwotdW5zaWduZWQgbG9uZyBGbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCVJldHVybkNvZGUgPSBWcGRSZWFkKHBBQywgcEFDLT5Jb0Jhc2UsIEtleXdvcmQsIERldmljZVN0ciwgJlN0ckxlbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFDLT5TbG93UGF0aExvY2ssIEZsYWdzKTsKLQotCXJldHVybiBSZXR1cm5Db2RlOwotfSAvKiBQcm9kdWN0U3RyICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICAgICAgU3RhcnREcnZDbGVhbnVwVGltZXIgLSBTdGFydCB0aW1lciB0byBjaGVjayBmb3IgZGVzY3JpcHRvcnMgd2hpY2gKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWdodCBiZSBwbGFjZWQgaW4gZGVzY3JpcHRvciByaW5nLCBidXQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlbnQgYmVlbiBoYW5kbGVkIHVwIHRvIG5vdwotICoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICBUaGlzIGZ1bmN0aW9uIHJlcXVlc3RzIGEgSFctdGltZXIgZm8gdGhlIFl1a29uIGNhcmQuIFRoZSBhY3Rpb25zIHRvCi0gKiAgICAgIHBlcmZvcm0gd2hlbiB0aGlzIHRpbWVyIGV4cGlyZXMsIGFyZSBsb2NhdGVkIGluIHRoZSBTa0RydkV2ZW50KCkuCi0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXN0YXRpYyB2b2lkCi1TdGFydERydkNsZWFudXBUaW1lcihTS19BQyAqcEFDKSB7Ci0gICAgU0tfRVZQQVJBICAgIEV2ZW50UGFyYW07ICAgLyogRXZlbnQgc3RydWN0IGZvciB0aW1lciBldmVudCAqLwotCi0gICAgU0tfTUVNU0VUKChjaGFyICopICZFdmVudFBhcmFtLCAwLCBzaXplb2YoRXZlbnRQYXJhbSkpOwotICAgIEV2ZW50UGFyYW0uUGFyYTMyWzBdID0gU0tfRFJWX1JYX0NMRUFOVVBfVElNRVI7Ci0gICAgU2tUaW1lclN0YXJ0KHBBQywgcEFDLT5Jb0Jhc2UsICZwQUMtPkRydkNsZWFudXBUaW1lciwKLSAgICAgICAgICAgICAgICAgU0tfRFJWX1JYX0NMRUFOVVBfVElNRVJfTEVOR1RILAotICAgICAgICAgICAgICAgICBTS0dFX0RSViwgU0tfRFJWX1RJTUVSLCBFdmVudFBhcmFtKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogICAgICBTdG9wRHJ2Q2xlYW51cFRpbWVyIC0gU3RvcCB0aW1lciB0byBjaGVjayBmb3IgZGVzY3JpcHRvcnMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyBhIEhXLXRpbWVyIGZvIHRoZSBZdWtvbiBjYXJkLiBUaGUgYWN0aW9ucyB0bwotICogICAgICBwZXJmb3JtIHdoZW4gdGhpcyB0aW1lciBleHBpcmVzLCBhcmUgbG9jYXRlZCBpbiB0aGUgU2tEcnZFdmVudCgpLgotICoKLSAqIFJldHVybnM6IE4vQQotICovCi1zdGF0aWMgdm9pZAotU3RvcERydkNsZWFudXBUaW1lcihTS19BQyAqcEFDKSB7Ci0gICAgU2tUaW1lclN0b3AocEFDLCBwQUMtPklvQmFzZSwgJnBBQy0+RHJ2Q2xlYW51cFRpbWVyKTsKLSAgICBTS19NRU1TRVQoKGNoYXIgKikgJnBBQy0+RHJ2Q2xlYW51cFRpbWVyLCAwLCBzaXplb2YoU0tfVElNRVIpKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBmdW5jdGlvbnMgZm9yIGNvbW1vbiBtb2R1bGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrRHJ2QWxsb2NSbG10TWJ1ZiAtIGFsbG9jYXRlIGFuIFJMTVQgbWJ1ZgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIHJldHVybnMgYW4gUkxNVCBtYnVmIG9yIE5VTEwuIFRoZSBSTE1UIE1idWYgc3RydWN0dXJlCi0gKglpcyBlbWJlZGRlZCBpbnRvIGEgc29ja2V0IGJ1ZmYgZGF0YSBhcmVhLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lCi0gKgotICogUmV0dXJuczoKLSAqCU5VTEwgb3IgcG9pbnRlciB0byBNYnVmLgotICovCi1TS19NQlVGICpTa0RydkFsbG9jUmxtdE1idWYoCi1TS19BQwkJKnBBQywJCS8qIHBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJCUlvQywJCS8qIHRoZSBJTy1jb250ZXh0ICovCi11bnNpZ25lZAlCdWZmZXJTaXplKQkvKiBzaXplIG9mIHRoZSByZXF1ZXN0ZWQgYnVmZmVyICovCi17Ci1TS19NQlVGCQkqcFJsbXRNYnVmOwkvKiBwb2ludGVyIHRvIGEgbmV3IHJsbXQtbWJ1ZiBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBza19idWZmCSpwTXNnQmxvY2s7CS8qIHBvaW50ZXIgdG8gYSBuZXcgbWVzc2FnZSBibG9jayAqLwotCi0JcE1zZ0Jsb2NrID0gYWxsb2Nfc2tiKEJ1ZmZlclNpemUgKyBzaXplb2YoU0tfTUJVRiksIEdGUF9BVE9NSUMpOwotCWlmIChwTXNnQmxvY2sgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlwUmxtdE1idWYgPSAoU0tfTUJVRiopIHBNc2dCbG9jay0+ZGF0YTsKLQlza2JfcmVzZXJ2ZShwTXNnQmxvY2ssIHNpemVvZihTS19NQlVGKSk7Ci0JcFJsbXRNYnVmLT5wTmV4dCA9IE5VTEw7Ci0JcFJsbXRNYnVmLT5wT3MgPSBwTXNnQmxvY2s7Ci0JcFJsbXRNYnVmLT5wRGF0YSA9IHBNc2dCbG9jay0+ZGF0YTsJLyogRGF0YSBidWZmZXIuICovCi0JcFJsbXRNYnVmLT5TaXplID0gQnVmZmVyU2l6ZTsJCS8qIERhdGEgYnVmZmVyIHNpemUuICovCi0JcFJsbXRNYnVmLT5MZW5ndGggPSAwOwkJLyogTGVuZ3RoIG9mIHBhY2tldCAoPD0gU2l6ZSkuICovCi0JcmV0dXJuIChwUmxtdE1idWYpOwotCi19IC8qIFNrRHJ2QWxsb2NSbG10TWJ1ZiAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrRHJ2RnJlZVJsbXRNYnVmIC0gZnJlZSBhbiBSTE1UIG1idWYKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBmcmVlcyBvbmUgb3IgbW9yZSBSTE1UIG1idWYocykuCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUKLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi12b2lkICBTa0RydkZyZWVSbG10TWJ1ZigKLVNLX0FDCQkqcEFDLAkJLyogcG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkJLyogdGhlIElPLWNvbnRleHQgKi8KLVNLX01CVUYJCSpwTWJ1ZikJCS8qIHNpemUgb2YgdGhlIHJlcXVlc3RlZCBidWZmZXIgKi8KLXsKLVNLX01CVUYJCSpwRnJlZU1idWY7Ci1TS19NQlVGCQkqcE5leHRNYnVmOwotCi0JcEZyZWVNYnVmID0gcE1idWY7Ci0JZG8gewotCQlwTmV4dE1idWYgPSBwRnJlZU1idWYtPnBOZXh0OwotCQlERVZfS0ZSRUVfU0tCX0FOWShwRnJlZU1idWYtPnBPcyk7Ci0JCXBGcmVlTWJ1ZiA9IHBOZXh0TWJ1ZjsKLQl9IHdoaWxlICggcEZyZWVNYnVmICE9IE5VTEwgKTsKLX0gLyogU2tEcnZGcmVlUmxtdE1idWYgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa09zR2V0VGltZSAtIHByb3ZpZGUgYSB0aW1lIHZhbHVlCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgcHJvdmlkZXMgYSB0aW1lIHZhbHVlLiBUaGUgdW5pdCBpcyAxL0haIChkZWZpbmVkIGJ5IExpbnV4KS4KLSAqCUl0IGlzIG5vdCB1c2VkIGZvciBhYnNvbHV0ZSB0aW1lLCBidXQgb25seSBmb3IgdGltZSBkaWZmZXJlbmNlcy4KLSAqCi0gKgotICogUmV0dXJuczoKLSAqCVRpbWUgdmFsdWUKLSAqLwotU0tfVTY0IFNrT3NHZXRUaW1lKFNLX0FDICpwQUMpCi17Ci0JU0tfVTY0CVByaXZhdGVKaWZmaWVzOwotCVNrT3NHZXRUaW1lQ3VycmVudChwQUMsICZQcml2YXRlSmlmZmllcyk7Ci0JcmV0dXJuIFByaXZhdGVKaWZmaWVzOwotfSAvKiBTa09zR2V0VGltZSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUGNpUmVhZENmZ0RXb3JkIC0gcmVhZCBhIDMyIGJpdCB2YWx1ZSBmcm9tIHBjaSBjb25maWcgc3BhY2UKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSByZWFkcyBhIDMyIGJpdCB2YWx1ZSBmcm9tIHRoZSBwY2kgY29uZmlndXJhdGlvbgotICoJc3BhY2UuCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBpbmRpY2F0ZSBldmVyeXRoaW5nIHdvcmtlZCBvay4KLSAqCSE9IDAgLSBlcnJvciBpbmRpY2F0aW9uCi0gKi8KLWludCBTa1BjaVJlYWRDZmdEV29yZCgKLVNLX0FDICpwQUMsCQkvKiBBZGFwdGVyIENvbnRyb2wgc3RydWN0dXJlIHBvaW50ZXIgKi8KLWludCBQY2lBZGRyLAkJLyogUENJIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLVNLX1UzMiAqcFZhbCkJCS8qIHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJlYWQgdmFsdWUgKi8KLXsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocEFDLT5QY2lEZXYsIFBjaUFkZHIsIHBWYWwpOwotCXJldHVybigwKTsKLX0gLyogU2tQY2lSZWFkQ2ZnRFdvcmQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1BjaVJlYWRDZmdXb3JkIC0gcmVhZCBhIDE2IGJpdCB2YWx1ZSBmcm9tIHBjaSBjb25maWcgc3BhY2UKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSByZWFkcyBhIDE2IGJpdCB2YWx1ZSBmcm9tIHRoZSBwY2kgY29uZmlndXJhdGlvbgotICoJc3BhY2UuCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBpbmRpY2F0ZSBldmVyeXRoaW5nIHdvcmtlZCBvay4KLSAqCSE9IDAgLSBlcnJvciBpbmRpY2F0aW9uCi0gKi8KLWludCBTa1BjaVJlYWRDZmdXb3JkKAotU0tfQUMgKnBBQywJLyogQWRhcHRlciBDb250cm9sIHN0cnVjdHVyZSBwb2ludGVyICovCi1pbnQgUGNpQWRkciwJCS8qIFBDSSByZWdpc3RlciBhZGRyZXNzICovCi1TS19VMTYgKnBWYWwpCQkvKiBwb2ludGVyIHRvIHN0b3JlIHRoZSByZWFkIHZhbHVlICovCi17Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQocEFDLT5QY2lEZXYsIFBjaUFkZHIsIHBWYWwpOwotCXJldHVybigwKTsKLX0gLyogU2tQY2lSZWFkQ2ZnV29yZCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUGNpUmVhZENmZ0J5dGUgLSByZWFkIGEgOCBiaXQgdmFsdWUgZnJvbSBwY2kgY29uZmlnIHNwYWNlCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgcmVhZHMgYSA4IGJpdCB2YWx1ZSBmcm9tIHRoZSBwY2kgY29uZmlndXJhdGlvbgotICoJc3BhY2UuCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBpbmRpY2F0ZSBldmVyeXRoaW5nIHdvcmtlZCBvay4KLSAqCSE9IDAgLSBlcnJvciBpbmRpY2F0aW9uCi0gKi8KLWludCBTa1BjaVJlYWRDZmdCeXRlKAotU0tfQUMgKnBBQywJLyogQWRhcHRlciBDb250cm9sIHN0cnVjdHVyZSBwb2ludGVyICovCi1pbnQgUGNpQWRkciwJCS8qIFBDSSByZWdpc3RlciBhZGRyZXNzICovCi1TS19VOCAqcFZhbCkJCS8qIHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJlYWQgdmFsdWUgKi8KLXsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwQUMtPlBjaURldiwgUGNpQWRkciwgcFZhbCk7Ci0JcmV0dXJuKDApOwotfSAvKiBTa1BjaVJlYWRDZmdCeXRlICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tQY2lXcml0ZUNmZ1dvcmQgLSB3cml0ZSBhIDE2IGJpdCB2YWx1ZSB0byBwY2kgY29uZmlnIHNwYWNlCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgd3JpdGVzIGEgMTYgYml0IHZhbHVlIHRvIHRoZSBwY2kgY29uZmlndXJhdGlvbgotICoJc3BhY2UuIFRoZSBmbGFnIFBjaUNvbmZpZ1VwIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjb25maWcgc3BhY2UKLSAqCWlzIGFjY2VzaWJsZSBvciBtdXN0IGJlIHNldCB1cCBmaXJzdC4KLSAqCi0gKiBSZXR1cm5zOgotICoJMCAtIGluZGljYXRlIGV2ZXJ5dGhpbmcgd29ya2VkIG9rLgotICoJIT0gMCAtIGVycm9yIGluZGljYXRpb24KLSAqLwotaW50IFNrUGNpV3JpdGVDZmdXb3JkKAotU0tfQUMgKnBBQywJLyogQWRhcHRlciBDb250cm9sIHN0cnVjdHVyZSBwb2ludGVyICovCi1pbnQgUGNpQWRkciwJCS8qIFBDSSByZWdpc3RlciBhZGRyZXNzICovCi1TS19VMTYgVmFsKQkJLyogcG9pbnRlciB0byBzdG9yZSB0aGUgcmVhZCB2YWx1ZSAqLwotewotCXBjaV93cml0ZV9jb25maWdfd29yZChwQUMtPlBjaURldiwgUGNpQWRkciwgVmFsKTsKLQlyZXR1cm4oMCk7Ci19IC8qIFNrUGNpV3JpdGVDZmdXb3JkICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tQY2lXcml0ZUNmZ1dvcmQgLSB3cml0ZSBhIDggYml0IHZhbHVlIHRvIHBjaSBjb25maWcgc3BhY2UKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSB3cml0ZXMgYSA4IGJpdCB2YWx1ZSB0byB0aGUgcGNpIGNvbmZpZ3VyYXRpb24KLSAqCXNwYWNlLiBUaGUgZmxhZyBQY2lDb25maWdVcCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29uZmlnIHNwYWNlCi0gKglpcyBhY2Nlc2libGUgb3IgbXVzdCBiZSBzZXQgdXAgZmlyc3QuCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBpbmRpY2F0ZSBldmVyeXRoaW5nIHdvcmtlZCBvay4KLSAqCSE9IDAgLSBlcnJvciBpbmRpY2F0aW9uCi0gKi8KLWludCBTa1BjaVdyaXRlQ2ZnQnl0ZSgKLVNLX0FDICpwQUMsCS8qIEFkYXB0ZXIgQ29udHJvbCBzdHJ1Y3R1cmUgcG9pbnRlciAqLwotaW50IFBjaUFkZHIsCQkvKiBQQ0kgcmVnaXN0ZXIgYWRkcmVzcyAqLwotU0tfVTggVmFsKQkJLyogcG9pbnRlciB0byBzdG9yZSB0aGUgcmVhZCB2YWx1ZSAqLwotewotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwQUMtPlBjaURldiwgUGNpQWRkciwgVmFsKTsKLQlyZXR1cm4oMCk7Ci19IC8qIFNrUGNpV3JpdGVDZmdCeXRlICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tEcnZFdmVudCAtIGhhbmRsZSBkcml2ZXIgZXZlbnRzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgZXZlbnRzIGZyb20gYWxsIG1vZHVsZXMgZGlyZWN0ZWQgdG8gdGhlIGRyaXZlcgotICoKLSAqIENvbnRleHQ6Ci0gKglJcyBjYWxsZWQgdW5kZXIgcHJvdGVjdGlvbiBvZiBzbG93IHBhdGggbG9jay4KLSAqCi0gKiBSZXR1cm5zOgotICoJMCBpZiBldmVyeXRoaW5nIG9rCi0gKgk8IDAgIG9uIGVycm9yCi0gKgkKLSAqLwotaW50IFNrRHJ2RXZlbnQoCi1TS19BQyAqcEFDLAkJLyogcG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBpby1jb250ZXh0ICovCi1TS19VMzIgRXZlbnQsCQkvKiBldmVudC1pZCAqLwotU0tfRVZQQVJBIFBhcmFtKQkvKiBldmVudC1wYXJhbWV0ZXIgKi8KLXsKLVNLX01CVUYJCSpwUmxtdE1idWY7CS8qIHBvaW50ZXIgdG8gYSBybG10LW1idWYgc3RydWN0dXJlICovCi1zdHJ1Y3Qgc2tfYnVmZgkqcE1zZzsJCS8qIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGJsb2NrICovCi1pbnQJCUZyb21Qb3J0OwkvKiB0aGUgcG9ydCBmcm9tIHdoaWNoIHdlIHN3aXRjaCBhd2F5ICovCi1pbnQJCVRvUG9ydDsJCS8qIHRoZSBwb3J0IHdlIHN3aXRjaCB0byAqLwotU0tfRVZQQVJBCU5ld1BhcmE7CS8qIHBhcmFtZXRlciBmb3IgZnVydGhlciBldmVudHMgKi8KLWludAkJU3RhdDsKLXVuc2lnbmVkIGxvbmcJRmxhZ3M7Ci1TS19CT09MCQlEdWFsTmV0OwotCi0Jc3dpdGNoIChFdmVudCkgewotCWNhc2UgU0tfRFJWX0FEQVBfRkFJTDoKLQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VWRU5ULAotCQkJKCJBREFQVEVSIEZBSUwgRVZFTlRcbiIpKTsKLQkJcHJpbnRrKCIlczogQWRhcHRlciBmYWlsZWQuXG4iLCBwQUMtPmRldlswXS0+bmFtZSk7Ci0JCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCQlTS19PVVQzMihwQUMtPklvQmFzZSwgQjBfSU1TSywgMCk7Ci0JCS8qIGNnb29zICovCi0JCWJyZWFrOwotCWNhc2UgU0tfRFJWX1BPUlRfRkFJTDoKLQkJRnJvbVBvcnQgPSBQYXJhbS5QYXJhMzJbMF07Ci0JCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9FVkVOVCwKLQkJCSgiUE9SVCBGQUlMIEVWRU5ULCBQb3J0OiAlZFxuIiwgRnJvbVBvcnQpKTsKLQkJaWYgKEZyb21Qb3J0ID09IDApIHsKLQkJCXByaW50aygiJXM6IFBvcnQgQSBmYWlsZWQuXG4iLCBwQUMtPmRldlswXS0+bmFtZSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoIiVzOiBQb3J0IEIgZmFpbGVkLlxuIiwgcEFDLT5kZXZbMV0tPm5hbWUpOwotCQl9Ci0JCS8qIGNnb29zICovCi0JCWJyZWFrOwotCWNhc2UgU0tfRFJWX1BPUlRfUkVTRVQ6CSAvKiBTS19VMzIgUG9ydElkeCAqLwotCQkvKiBhY3Rpb24gbGlzdCA0ICovCi0JCUZyb21Qb3J0ID0gUGFyYW0uUGFyYTMyWzBdOwotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRVZFTlQsCi0JCQkoIlBPUlQgUkVTRVQgRVZFTlQsIFBvcnQ6ICVkICIsIEZyb21Qb3J0KSk7Ci0JCU5ld1BhcmEuUGFyYTY0ID0gRnJvbVBvcnQ7Ci0JCVNrUG5taUV2ZW50KHBBQywgSW9DLCBTS19QTk1JX0VWVF9YTUFDX1JFU0VULCBOZXdQYXJhKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoCi0JCQkmcEFDLT5UeFBvcnRbRnJvbVBvcnRdW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrLAotCQkJRmxhZ3MpOwotCi0JCVNrR2VTdG9wUG9ydChwQUMsIElvQywgRnJvbVBvcnQsIFNLX1NUT1BfQUxMLCBTS19IQVJEX1JTVCk7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHBBQy0+ZGV2W1BhcmFtLlBhcmEzMlswXV0pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAotCQkJJnBBQy0+VHhQb3J0W0Zyb21Qb3J0XVtUWF9QUklPX0xPV10uVHhEZXNSaW5nTG9jaywKLQkJCUZsYWdzKTsKLQkJCi0JCS8qIGNsZWFyIHJ4IHJpbmcgZnJvbSByZWNlaXZlZCBmcmFtZXMgKi8KLQkJUmVjZWl2ZUlycShwQUMsICZwQUMtPlJ4UG9ydFtGcm9tUG9ydF0sIFNLX0ZBTFNFKTsKLQkJCi0JCUNsZWFyVHhSaW5nKHBBQywgJnBBQy0+VHhQb3J0W0Zyb21Qb3J0XVtUWF9QUklPX0xPV10pOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgKLQkJCSZwQUMtPlR4UG9ydFtGcm9tUG9ydF1bVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2ssCi0JCQlGbGFncyk7Ci0JCQotCQkvKiB0c2NoaWxsaW5nOiBIYW5kbGluZyBvZiByZXR1cm4gdmFsdWUgaW5zZXJ0ZWQuICovCi0JCWlmIChTa0dlSW5pdFBvcnQocEFDLCBJb0MsIEZyb21Qb3J0KSkgewotCQkJaWYgKEZyb21Qb3J0ID09IDApIHsKLQkJCQlwcmludGsoIiVzOiBTa0dlSW5pdFBvcnQgQSBmYWlsZWQuXG4iLCBwQUMtPmRldlswXS0+bmFtZSk7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50aygiJXM6IFNrR2VJbml0UG9ydCBCIGZhaWxlZC5cbiIsIHBBQy0+ZGV2WzFdLT5uYW1lKTsKLQkJCX0KLQkJfQotCQlTa0FkZHJNY1VwZGF0ZShwQUMsSW9DLCBGcm9tUG9ydCk7Ci0JCVBvcnRSZUluaXRCbXUocEFDLCBGcm9tUG9ydCk7Ci0JCVNrR2VQb2xsVHhEKHBBQywgSW9DLCBGcm9tUG9ydCwgU0tfVFJVRSk7Ci0JCUNsZWFyQW5kU3RhcnRSeChwQUMsIEZyb21Qb3J0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKLQkJCSZwQUMtPlR4UG9ydFtGcm9tUG9ydF1bVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2ssCi0JCQlGbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfRFJWX05FVF9VUDoJIC8qIFNLX1UzMiBQb3J0SWR4ICovCi0JewlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcEFDLT5kZXZbUGFyYW0uUGFyYTMyWzBdXTsKLQkJLyogYWN0aW9uIGxpc3QgNSAqLwotCQlGcm9tUG9ydCA9IFBhcmFtLlBhcmEzMlswXTsKLQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VWRU5ULAotCQkJKCJORVQgVVAgRVZFTlQsIFBvcnQ6ICVkICIsIFBhcmFtLlBhcmEzMlswXSkpOwotCQkvKiBNYWMgdXBkYXRlICovCi0JCVNrQWRkck1jVXBkYXRlKHBBQyxJb0MsIEZyb21Qb3J0KTsKLQotCQlpZiAoRG9QcmludEludGVyZmFjZUNoYW5nZSkgewotCQlwcmludGsoIiVzOiBuZXR3b3JrIGNvbm5lY3Rpb24gdXAgdXNpbmciCi0JCQkiIHBvcnQgJWNcbiIsIHBBQy0+ZGV2W1BhcmFtLlBhcmEzMlswXV0tPm5hbWUsICdBJytQYXJhbS5QYXJhMzJbMF0pOwotCi0JCS8qIHRzY2hpbGxpbmc6IFZhbHVlcyBjaGFuZ2VkIGFjY29yZGluZyB0byBMaW5rU3BlZWRVc2VkLiAqLwotCQlTdGF0ID0gcEFDLT5HSW5pLkdQW0Zyb21Qb3J0XS5QTGlua1NwZWVkVXNlZDsKLQkJaWYgKFN0YXQgPT0gU0tfTFNQRUVEX1NUQVRfMTBNQlBTKSB7Ci0JCQlwcmludGsoIiAgICBzcGVlZDogICAgICAgICAgIDEwXG4iKTsKLQkJfSBlbHNlIGlmIChTdGF0ID09IFNLX0xTUEVFRF9TVEFUXzEwME1CUFMpIHsKLQkJCXByaW50aygiICAgIHNwZWVkOiAgICAgICAgICAgMTAwXG4iKTsKLQkJfSBlbHNlIGlmIChTdGF0ID09IFNLX0xTUEVFRF9TVEFUXzEwMDBNQlBTKSB7Ci0JCQlwcmludGsoIiAgICBzcGVlZDogICAgICAgICAgIDEwMDBcbiIpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKCIgICAgc3BlZWQ6ICAgICAgICAgICB1bmtub3duXG4iKTsKLQkJfQotCi0KLQkJU3RhdCA9IHBBQy0+R0luaS5HUFtGcm9tUG9ydF0uUExpbmtNb2RlU3RhdHVzOwotCQlpZiAoU3RhdCA9PSBTS19MTU9ERV9TVEFUX0FVVE9IQUxGIHx8Ci0JCQlTdGF0ID09IFNLX0xNT0RFX1NUQVRfQVVUT0ZVTEwpIHsKLQkJCXByaW50aygiICAgIGF1dG9uZWdvdGlhdGlvbjogeWVzXG4iKTsKLQkJfQotCQllbHNlIHsKLQkJCXByaW50aygiICAgIGF1dG9uZWdvdGlhdGlvbjogbm9cbiIpOwotCQl9Ci0JCWlmIChTdGF0ID09IFNLX0xNT0RFX1NUQVRfQVVUT0hBTEYgfHwKLQkJCVN0YXQgPT0gU0tfTE1PREVfU1RBVF9IQUxGKSB7Ci0JCQlwcmludGsoIiAgICBkdXBsZXggbW9kZTogICAgIGhhbGZcbiIpOwotCQl9Ci0JCWVsc2UgewotCQkJcHJpbnRrKCIgICAgZHVwbGV4IG1vZGU6ICAgICBmdWxsXG4iKTsKLQkJfQotCQlTdGF0ID0gcEFDLT5HSW5pLkdQW0Zyb21Qb3J0XS5QRmxvd0N0cmxTdGF0dXM7Ci0JCWlmIChTdGF0ID09IFNLX0ZMT1dfU1RBVF9SRU1fU0VORCApIHsKLQkJCXByaW50aygiICAgIGZsb3djdHJsOiAgICAgICAgcmVtb3RlIHNlbmRcbiIpOwotCQl9Ci0JCWVsc2UgaWYgKFN0YXQgPT0gU0tfRkxPV19TVEFUX0xPQ19TRU5EICl7Ci0JCQlwcmludGsoIiAgICBmbG93Y3RybDogICAgICAgIGxvY2FsIHNlbmRcbiIpOwotCQl9Ci0JCWVsc2UgaWYgKFN0YXQgPT0gU0tfRkxPV19TVEFUX1NZTU1FVFJJQyApewotCQkJcHJpbnRrKCIgICAgZmxvd2N0cmw6ICAgICAgICBzeW1tZXRyaWNcbiIpOwotCQl9Ci0JCWVsc2UgewotCQkJcHJpbnRrKCIgICAgZmxvd2N0cmw6ICAgICAgICBub25lXG4iKTsKLQkJfQotCQkKLQkJLyogdHNjaGlsbGluZzogQ2hlY2sgYWdhaW5zdCBDb3BwZXJUeXBlIG5vdy4gKi8KLQkJaWYgKChwQUMtPkdJbmkuR0lDb3BwZXJUeXBlID09IFNLX1RSVUUpICYmCi0JCQkocEFDLT5HSW5pLkdQW0Zyb21Qb3J0XS5QTGlua1NwZWVkVXNlZCA9PQotCQkJU0tfTFNQRUVEX1NUQVRfMTAwME1CUFMpKSB7Ci0JCQlTdGF0ID0gcEFDLT5HSW5pLkdQW0Zyb21Qb3J0XS5QTVNTdGF0dXM7Ci0JCQlpZiAoU3RhdCA9PSBTS19NU19TVEFUX01BU1RFUiApIHsKLQkJCQlwcmludGsoIiAgICByb2xlOiAgICAgICAgICAgIG1hc3RlclxuIik7Ci0JCQl9Ci0JCQllbHNlIGlmIChTdGF0ID09IFNLX01TX1NUQVRfU0xBVkUgKSB7Ci0JCQkJcHJpbnRrKCIgICAgcm9sZTogICAgICAgICAgICBzbGF2ZVxuIik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwcmludGsoIiAgICByb2xlOiAgICAgICAgICAgID8/P1xuIik7Ci0JCQl9Ci0JCX0KLQotCQkvKiAKLQkJICAgRGlzcGxheSBkaW0gKGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24pIAotCQkgICBpbmZvcm1hdGlvbnMKLQkJICovCi0JCWlmIChwQUMtPkR5bklycU1vZEluZm8uSW50TW9kVHlwZVNlbGVjdCA9PSBDX0lOVF9NT0RfU1RBVElDKQotCQkJcHJpbnRrKCIgICAgaXJxIG1vZGVyYXRpb246ICBzdGF0aWMgKCVkIGludHMvc2VjKVxuIiwKLQkJCQkJcEFDLT5EeW5JcnFNb2RJbmZvLk1heE1vZEludHNQZXJTZWMpOwotCQllbHNlIGlmIChwQUMtPkR5bklycU1vZEluZm8uSW50TW9kVHlwZVNlbGVjdCA9PSBDX0lOVF9NT0RfRFlOQU1JQykKLQkJCXByaW50aygiICAgIGlycSBtb2RlcmF0aW9uOiAgZHluYW1pYyAoJWQgaW50cy9zZWMpXG4iLAotCQkJCQlwQUMtPkR5bklycU1vZEluZm8uTWF4TW9kSW50c1BlclNlYyk7Ci0JCWVsc2UKLQkJCXByaW50aygiICAgIGlycSBtb2RlcmF0aW9uOiAgZGlzYWJsZWRcbiIpOwotCi0KLQkJcHJpbnRrKCIgICAgc2NhdHRlci1nYXRoZXI6ICAlc1xuIiwKLQkJICAgICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQkJcHJpbnRrKCIgICAgdHgtY2hlY2tzdW06ICAgICAlc1xuIiwKLQkJICAgICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotCQlwcmludGsoIiAgICByeC1jaGVja3N1bTogICAgICVzXG4iLAotCQkgICAgICAgcEFDLT5SeFBvcnRbUGFyYW0uUGFyYTMyWzBdXS5SeENzdW0gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQotCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgRG9QcmludEludGVyZmFjZUNoYW5nZSA9IFNLX1RSVUU7Ci0gICAgICAgICAgICAgICAgfQotCQotCQlpZiAoKFBhcmFtLlBhcmEzMlswXSAhPSBwQUMtPkFjdGl2ZVBvcnQpICYmCi0JCQkocEFDLT5SbG10TmV0cyA9PSAxKSkgewotCQkJTmV3UGFyYS5QYXJhMzJbMF0gPSBwQUMtPkFjdGl2ZVBvcnQ7Ci0JCQlOZXdQYXJhLlBhcmEzMlsxXSA9IFBhcmFtLlBhcmEzMlswXTsKLQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfU1dJVENIX0lOVEVSTiwKLQkJCQlOZXdQYXJhKTsKLQkJfQotCi0JCS8qIEluZm9ybSB0aGUgd29ybGQgdGhhdCBsaW5rIHByb3RvY29sIGlzIHVwLiAqLwotCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNLX0RSVl9ORVRfRE9XTjoJIC8qIFNLX1UzMiBSZWFzb24gKi8KLQkJLyogYWN0aW9uIGxpc3QgNyAqLwotCQlTS19EQkdfTVNHKE5VTEwsIFNLX0RCR01PRF9EUlYsIFNLX0RCR0NBVF9EUlZfRVZFTlQsCi0JCQkoIk5FVCBET1dOIEVWRU5UICIpKTsKLQkJaWYgKERvUHJpbnRJbnRlcmZhY2VDaGFuZ2UpIHsKLQkJCXByaW50aygiJXM6IG5ldHdvcmsgY29ubmVjdGlvbiBkb3duXG4iLCAKLQkJCQlwQUMtPmRldltQYXJhbS5QYXJhMzJbMV1dLT5uYW1lKTsKLQkJfSBlbHNlIHsKLQkJCURvUHJpbnRJbnRlcmZhY2VDaGFuZ2UgPSBTS19UUlVFOwotCQl9Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHBBQy0+ZGV2W1BhcmFtLlBhcmEzMlsxXV0pOwotCQlicmVhazsKLQljYXNlIFNLX0RSVl9TV0lUQ0hfSEFSRDogLyogU0tfVTMyIEZyb21Qb3J0SWR4IFNLX1UzMiBUb1BvcnRJZHggKi8KLQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VWRU5ULAotCQkJKCJQT1JUIFNXSVRDSCBIQVJEICIpKTsKLQljYXNlIFNLX0RSVl9TV0lUQ0hfU09GVDogLyogU0tfVTMyIEZyb21Qb3J0SWR4IFNLX1UzMiBUb1BvcnRJZHggKi8KLQkvKiBhY3Rpb24gbGlzdCA2ICovCi0JCXByaW50aygiJXM6IHN3aXRjaGluZyB0byBwb3J0ICVjXG4iLCBwQUMtPmRldlswXS0+bmFtZSwKLQkJCSdBJytQYXJhbS5QYXJhMzJbMV0pOwotCWNhc2UgU0tfRFJWX1NXSVRDSF9JTlRFUk46IC8qIFNLX1UzMiBGcm9tUG9ydElkeCBTS19VMzIgVG9Qb3J0SWR4ICovCi0JCUZyb21Qb3J0ID0gUGFyYW0uUGFyYTMyWzBdOwotCQlUb1BvcnQgPSBQYXJhbS5QYXJhMzJbMV07Ci0JCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9FVkVOVCwKLQkJCSgiUE9SVCBTV0lUQ0ggRVZFTlQsIEZyb206ICVkICBUbzogJWQgKFByZWYgJWQpICIsCi0JCQlGcm9tUG9ydCwgVG9Qb3J0LCBwQUMtPlJsbXQuTmV0WzBdLlByZWZQb3J0KSk7Ci0JCU5ld1BhcmEuUGFyYTY0ID0gRnJvbVBvcnQ7Ci0JCVNrUG5taUV2ZW50KHBBQywgSW9DLCBTS19QTk1JX0VWVF9YTUFDX1JFU0VULCBOZXdQYXJhKTsKLQkJTmV3UGFyYS5QYXJhNjQgPSBUb1BvcnQ7Ci0JCVNrUG5taUV2ZW50KHBBQywgSW9DLCBTS19QTk1JX0VWVF9YTUFDX1JFU0VULCBOZXdQYXJhKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoCi0JCQkmcEFDLT5UeFBvcnRbRnJvbVBvcnRdW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrLAotCQkJRmxhZ3MpOwotCQlzcGluX2xvY2soJnBBQy0+VHhQb3J0W1RvUG9ydF1bVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2spOwotCQlTa0dlU3RvcFBvcnQocEFDLCBJb0MsIEZyb21Qb3J0LCBTS19TVE9QX0FMTCwgU0tfU09GVF9SU1QpOwotCQlTa0dlU3RvcFBvcnQocEFDLCBJb0MsIFRvUG9ydCwgU0tfU1RPUF9BTEwsIFNLX1NPRlRfUlNUKTsKLQkJc3Bpbl91bmxvY2soJnBBQy0+VHhQb3J0W1RvUG9ydF1bVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2spOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAotCQkJJnBBQy0+VHhQb3J0W0Zyb21Qb3J0XVtUWF9QUklPX0xPV10uVHhEZXNSaW5nTG9jaywKLQkJCUZsYWdzKTsKLQotCQlSZWNlaXZlSXJxKHBBQywgJnBBQy0+UnhQb3J0W0Zyb21Qb3J0XSwgU0tfRkFMU0UpOyAvKiBjbGVhcnMgcnggcmluZyAqLwotCQlSZWNlaXZlSXJxKHBBQywgJnBBQy0+UnhQb3J0W1RvUG9ydF0sIFNLX0ZBTFNFKTsgLyogY2xlYXJzIHJ4IHJpbmcgKi8KLQkJCi0JCUNsZWFyVHhSaW5nKHBBQywgJnBBQy0+VHhQb3J0W0Zyb21Qb3J0XVtUWF9QUklPX0xPV10pOwotCQlDbGVhclR4UmluZyhwQUMsICZwQUMtPlR4UG9ydFtUb1BvcnRdW1RYX1BSSU9fTE9XXSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKAotCQkJJnBBQy0+VHhQb3J0W0Zyb21Qb3J0XVtUWF9QUklPX0xPV10uVHhEZXNSaW5nTG9jaywKLQkJCUZsYWdzKTsKLQkJc3Bpbl9sb2NrKCZwQUMtPlR4UG9ydFtUb1BvcnRdW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrKTsKLQkJcEFDLT5BY3RpdmVQb3J0ID0gVG9Qb3J0OwotI2lmIDAKLQkJU2V0UXVldWVTaXplcyhwQUMpOwotI2Vsc2UKLQkJLyogdHNjaGlsbGluZzogTmV3IGNvbW1vbiBmdW5jdGlvbiB3aXRoIG1pbmltdW0gc2l6ZSBjaGVjay4gKi8KLQkJRHVhbE5ldCA9IFNLX0ZBTFNFOwotCQlpZiAocEFDLT5SbG10TmV0cyA9PSAyKSB7Ci0JCQlEdWFsTmV0ID0gU0tfVFJVRTsKLQkJfQotCQkKLQkJaWYgKFNrR2VJbml0QXNzaWduUmFtVG9RdWV1ZXMoCi0JCQlwQUMsCi0JCQlwQUMtPkFjdGl2ZVBvcnQsCi0JCQlEdWFsTmV0KSkgewotCQkJc3Bpbl91bmxvY2soJnBBQy0+VHhQb3J0W1RvUG9ydF1bVFhfUFJJT19MT1ddLlR4RGVzUmluZ0xvY2spOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKLQkJCQkmcEFDLT5UeFBvcnRbRnJvbVBvcnRdW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrLAotCQkJCUZsYWdzKTsKLQkJCXByaW50aygiU2tHZUluaXRBc3NpZ25SYW1Ub1F1ZXVlcyBmYWlsZWQuXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJLyogdHNjaGlsbGluZzogSGFuZGxpbmcgb2YgcmV0dXJuIHZhbHVlcyBpbnNlcnRlZC4gKi8KLQkJaWYgKFNrR2VJbml0UG9ydChwQUMsIElvQywgRnJvbVBvcnQpIHx8Ci0JCQlTa0dlSW5pdFBvcnQocEFDLCBJb0MsIFRvUG9ydCkpIHsKLQkJCXByaW50aygiJXM6IFNrR2VJbml0UG9ydCBmYWlsZWQuXG4iLCBwQUMtPmRldlswXS0+bmFtZSk7Ci0JCX0KLQkJaWYgKEV2ZW50ID09IFNLX0RSVl9TV0lUQ0hfU09GVCkgewotCQkJU2tNYWNSeFR4RW5hYmxlKHBBQywgSW9DLCBGcm9tUG9ydCk7Ci0JCX0KLQkJU2tNYWNSeFR4RW5hYmxlKHBBQywgSW9DLCBUb1BvcnQpOwotCQlTa0FkZHJTd2FwKHBBQywgSW9DLCBGcm9tUG9ydCwgVG9Qb3J0KTsKLQkJU2tBZGRyTWNVcGRhdGUocEFDLCBJb0MsIEZyb21Qb3J0KTsKLQkJU2tBZGRyTWNVcGRhdGUocEFDLCBJb0MsIFRvUG9ydCk7Ci0JCVBvcnRSZUluaXRCbXUocEFDLCBGcm9tUG9ydCk7Ci0JCVBvcnRSZUluaXRCbXUocEFDLCBUb1BvcnQpOwotCQlTa0dlUG9sbFR4RChwQUMsIElvQywgRnJvbVBvcnQsIFNLX1RSVUUpOwotCQlTa0dlUG9sbFR4RChwQUMsIElvQywgVG9Qb3J0LCBTS19UUlVFKTsKLQkJQ2xlYXJBbmRTdGFydFJ4KHBBQywgRnJvbVBvcnQpOwotCQlDbGVhckFuZFN0YXJ0UngocEFDLCBUb1BvcnQpOwotCQlzcGluX3VubG9jaygmcEFDLT5UeFBvcnRbVG9Qb3J0XVtUWF9QUklPX0xPV10uVHhEZXNSaW5nTG9jayk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCi0JCQkmcEFDLT5UeFBvcnRbRnJvbVBvcnRdW1RYX1BSSU9fTE9XXS5UeERlc1JpbmdMb2NrLAotCQkJRmxhZ3MpOwotCQlicmVhazsKLQljYXNlIFNLX0RSVl9STE1UX1NFTkQ6CSAvKiBTS19NQlVGICpwTWIgKi8KLQkJU0tfREJHX01TRyhOVUxMLCBTS19EQkdNT0RfRFJWLCBTS19EQkdDQVRfRFJWX0VWRU5ULAotCQkJKCJSTFMgIikpOwotCQlwUmxtdE1idWYgPSAoU0tfTUJVRiopIFBhcmFtLnBQYXJhUHRyOwotCQlwTXNnID0gKHN0cnVjdCBza19idWZmKikgcFJsbXRNYnVmLT5wT3M7Ci0JCXNrYl9wdXQocE1zZywgcFJsbXRNYnVmLT5MZW5ndGgpOwotCQlpZiAoWG1pdEZyYW1lKHBBQywgJnBBQy0+VHhQb3J0W3BSbG10TWJ1Zi0+UG9ydElkeF1bVFhfUFJJT19MT1ddLAotCQkJcE1zZykgPCAwKQotCi0JCQlERVZfS0ZSRUVfU0tCX0FOWShwTXNnKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19EUlZfVElNRVI6Ci0JCWlmIChQYXJhbS5QYXJhMzJbMF0gPT0gU0tfRFJWX01PREVSQVRJT05fVElNRVIpIHsKLQkJCS8qCi0JCQkqKiBleHBpcmF0aW9uIG9mIHRoZSBtb2RlcmF0aW9uIHRpbWVyIGltcGxpZXMgdGhhdAotCQkJKiogZHluYW1pYyBtb2RlcmF0aW9uIGlzIHRvIGJlIGFwcGxpZWQKLQkJCSovCi0JCQlTa0RpbVN0YXJ0TW9kZXJhdGlvblRpbWVyKHBBQyk7Ci0JCQlTa0RpbU1vZGVyYXRlKHBBQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5EeW5JcnFNb2RJbmZvLkRpc3BsYXlTdGF0cykgewotCQkJICAgIFNrRGltRGlzcGxheU1vZGVyYXRpb25TZXR0aW5ncyhwQUMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGFyYW0uUGFyYTMyWzBdID09IFNLX0RSVl9SWF9DTEVBTlVQX1RJTUVSKSB7Ci0JCQkvKgotCQkJKiogY2hlY2sgaWYgd2UgbmVlZCB0byBjaGVjayBmb3IgZGVzY3JpcHRvcnMgd2hpY2gKLQkJCSoqIGhhdmVuJ3QgYmVlbiBoYW5kbGVkIHRoZSBsYXN0IG1pbGxpc2VjcwotCQkJKi8KLQkJCVN0YXJ0RHJ2Q2xlYW51cFRpbWVyKHBBQyk7Ci0JCQlpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDIpIHsKLQkJCQlSZWNlaXZlSXJxKHBBQywgJnBBQy0+UnhQb3J0WzFdLCBTS19GQUxTRSk7Ci0JCQl9Ci0JCQlSZWNlaXZlSXJxKHBBQywgJnBBQy0+UnhQb3J0WzBdLCBTS19GQUxTRSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoIkV4cGlyYXRpb24gb2YgdW5rbm93biB0aW1lclxuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCVNLX0RCR19NU0coTlVMTCwgU0tfREJHTU9EX0RSViwgU0tfREJHQ0FUX0RSVl9FVkVOVCwKLQkJKCJFTkQgRVZFTlQgIikpOwotCQotCXJldHVybiAoMCk7Ci19IC8qIFNrRHJ2RXZlbnQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0Vycm9yTG9nIC0gbG9nIGVycm9ycwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBsb2dzIGVycm9ycyB0byB0aGUgc3lzdGVtIGJ1ZmZlciBhbmQgdG8gdGhlIGNvbnNvbGUKLSAqCi0gKiBSZXR1cm5zOgotICoJMCBpZiBldmVyeXRoaW5nIG9rCi0gKgk8IDAgIG9uIGVycm9yCi0gKgkKLSAqLwotdm9pZCBTa0Vycm9yTG9nKAotU0tfQUMJKnBBQywKLWludAlFcnJDbGFzcywKLWludAlFcnJOdW0sCi1jaGFyCSpwRXJyb3JNc2cpCi17Ci1jaGFyCUNsYXNzU3RyWzgwXTsKLQotCXN3aXRjaCAoRXJyQ2xhc3MpIHsKLQljYXNlIFNLX0VSUkNMX09USEVSOgotCQlzdHJjcHkoQ2xhc3NTdHIsICJPdGhlciBlcnJvciIpOwotCQlicmVhazsKLQljYXNlIFNLX0VSUkNMX0NPTkZJRzoKLQkJc3RyY3B5KENsYXNzU3RyLCAiQ29uZmlndXJhdGlvbiBlcnJvciIpOwotCQlicmVhazsKLQljYXNlIFNLX0VSUkNMX0lOSVQ6Ci0JCXN0cmNweShDbGFzc1N0ciwgIkluaXRpYWxpemF0aW9uIGVycm9yIik7Ci0JCWJyZWFrOwotCWNhc2UgU0tfRVJSQ0xfTk9SRVM6Ci0JCXN0cmNweShDbGFzc1N0ciwgIk91dCBvZiByZXNvdXJjZXMgZXJyb3IiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19FUlJDTF9TVzoKLQkJc3RyY3B5KENsYXNzU3RyLCAiaW50ZXJuYWwgU29mdHdhcmUgZXJyb3IiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19FUlJDTF9IVzoKLQkJc3RyY3B5KENsYXNzU3RyLCAiSGFyZHdhcmUgZmFpbHVyZSIpOwotCQlicmVhazsKLQljYXNlIFNLX0VSUkNMX0NPTU06Ci0JCXN0cmNweShDbGFzc1N0ciwgIkNvbW11bmljYXRpb24gZXJyb3IiKTsKLQkJYnJlYWs7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIiVzOiAtLSBFUlJPUiAtLVxuICAgICAgICBDbGFzczogICVzXG4iCi0JCSIgICAgICAgIE5yOiAgMHgleFxuICAgICAgICBNc2c6ICAlc1xuIiwgcEFDLT5kZXZbMF0tPm5hbWUsCi0JCUNsYXNzU3RyLCBFcnJOdW0sIHBFcnJvck1zZyk7Ci0KLX0gLyogU2tFcnJvckxvZyAqLwotCi0jaWZkZWYgU0tfRElBR19TVVBQT1JUCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrRHJ2RW50ZXJEaWFnTW9kZSAtIGhhbmRsZXMgRElBRyBhdHRhY2ggcmVxdWVzdAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJTm90aWZ5IHRoZSBrZXJuZWwgdG8gTk9UIGFjY2VzcyB0aGUgY2FyZCBhbnkgbG9uZ2VyIGR1ZSB0byBESUFHCi0gKglEZWluaXRpYWxpemUgdGhlIENhcmQKLSAqCi0gKiBSZXR1cm5zOgotICoJaW50Ci0gKi8KLWludCBTa0RydkVudGVyRGlhZ01vZGUoCi1TS19BQyAgICpwQWMpICAgLyogcG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLXsKLQlERVZfTkVUICpwTmV0ID0gbmV0ZGV2X3ByaXYocEFjLT5kZXZbMF0pOwotCVNLX0FDICAgKnBBQyAgPSBwTmV0LT5wQUM7Ci0KLQlTS19NRU1DUFkoJihwQWMtPlBubWlCYWNrdXApLCAmKHBBYy0+UG5taVN0cnVjdCksIAotCQkJc2l6ZW9mKFNLX1BOTUlfU1RSVUNUX0RBVEEpKTsKLQotCXBBQy0+RGlhZ01vZGVBY3RpdmUgPSBESUFHX0FDVElWRTsKLQlpZiAocEFDLT5Cb2FyZExldmVsID4gU0tfSU5JVF9EQVRBKSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKHBBQy0+ZGV2WzBdKSkgewotCQkJcEFDLT5XYXNJZlVwWzBdID0gU0tfVFJVRTsKLQkJCXBBQy0+RGlhZ0Zsb3dDdHJsID0gU0tfVFJVRTsgLyogZm9yIFNrR2VDbG9zZSAgICAgICovCi0JCQlEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfRkFMU0U7Ci0JCQlTa0RydkRlSW5pdEFkYXB0ZXIocEFDLCAwKTsgIC8qIHBlcmZvcm1zIFNrR2VDbG9zZSAqLwotCQl9IGVsc2UgewotCQkJcEFDLT5XYXNJZlVwWzBdID0gU0tfRkFMU0U7Ci0JCX0KLQkJaWYgKHBOZXQgIT0gbmV0ZGV2X3ByaXYocEFDLT5kZXZbMV0pKSB7Ci0JCQlwTmV0ID0gbmV0ZGV2X3ByaXYocEFDLT5kZXZbMV0pOwotCQkJaWYgKG5ldGlmX3J1bm5pbmcocEFDLT5kZXZbMV0pKSB7Ci0JCQkJcEFDLT5XYXNJZlVwWzFdID0gU0tfVFJVRTsKLQkJCQlwQUMtPkRpYWdGbG93Q3RybCA9IFNLX1RSVUU7IC8qIGZvciBTa0dlQ2xvc2UgKi8KLQkJCQlEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfRkFMU0U7Ci0JCQkJU2tEcnZEZUluaXRBZGFwdGVyKHBBQywgMSk7ICAvKiBkbyBTa0dlQ2xvc2UgICovCi0JCQl9IGVsc2UgewotCQkJCXBBQy0+V2FzSWZVcFsxXSA9IFNLX0ZBTFNFOwotCQkJfQotCQl9Ci0JCXBBQy0+Qm9hcmRMZXZlbCA9IFNLX0lOSVRfREFUQTsKLQl9Ci0JcmV0dXJuKDApOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0RydkxlYXZlRGlhZ01vZGUgLSBoYW5kbGVzIERJQUcgZGV0YWNoIHJlcXVlc3QKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU5vdGlmeSB0aGUga2VybmVsIHRvIG1heSBhY2Nlc3MgdGhlIGNhcmQgYWdhaW4gYWZ0ZXIgdXNlIGJ5IERJQUcKLSAqCUluaXRpYWxpemUgdGhlIENhcmQKLSAqCi0gKiBSZXR1cm5zOgotICogCWludAotICovCi1pbnQgU2tEcnZMZWF2ZURpYWdNb2RlKAotU0tfQUMgICAqcEFjKSAgIC8qIHBvaW50ZXIgdG8gYWRhcHRlciBjb250cm9sIGNvbnRleHQgKi8KLXsgCi0JU0tfTUVNQ1BZKCYocEFjLT5Qbm1pU3RydWN0KSwgJihwQWMtPlBubWlCYWNrdXApLCAKLQkJCXNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSk7Ci0JcEFjLT5EaWFnTW9kZUFjdGl2ZSAgICA9IERJQUdfTk9UQUNUSVZFOwotCXBBYy0+UG5taS5EaWFnQXR0YWNoZWQgPSBTS19ESUFHX0lETEU7Ci0gICAgICAgIGlmIChwQWMtPldhc0lmVXBbMF0gPT0gU0tfVFJVRSkgewotICAgICAgICAgICAgICAgIHBBYy0+RGlhZ0Zsb3dDdHJsID0gU0tfVFJVRTsgLyogZm9yIFNrR2VDbG9zZSAqLwotCQlEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfRkFMU0U7Ci0gICAgICAgICAgICAgICAgU2tEcnZJbml0QWRhcHRlcihwQWMsIDApOyAgICAvKiBmaXJzdCBkZXZpY2UgICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHBBYy0+V2FzSWZVcFsxXSA9PSBTS19UUlVFKSB7Ci0gICAgICAgICAgICAgICAgcEFjLT5EaWFnRmxvd0N0cmwgPSBTS19UUlVFOyAvKiBmb3IgU2tHZUNsb3NlICovCi0JCURvUHJpbnRJbnRlcmZhY2VDaGFuZ2UgPSBTS19GQUxTRTsKLSAgICAgICAgICAgICAgICBTa0RydkluaXRBZGFwdGVyKHBBYywgMSk7ICAgIC8qIHNlY29uZCBkZXZpY2UgKi8KLSAgICAgICAgfQotCXJldHVybigwKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJUGFyc2VEZXZpY2VOYnJGcm9tU2xvdE5hbWUgLSBFdmFsdWF0ZSBQQ0kgZGV2aWNlIG51bWJlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICogCVRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBQQ0kgc2xvdCBuYW1lIGluZm9ybWF0aW9uIHN0cmluZyBhbmQgd2lsbAotICoJcmV0cmlldmUgdGhlIGRldmNpZSBudW1iZXIgb3V0IG9mIGl0LiBUaGUgc2xvdF9uYW1lIG1haW50aWFuZWQgYnkKLSAqCWxpbnV4IGlzIGluIHRoZSBmb3JtIG9mICcwMjowYS4wJywgd2hlcmVhcyB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgCi0gKglyZXByZXNlbnQgdGhlIGJ1cyBudW1iZXIgaW4gaGV4IChpbiB0aGUgc2FtcGxlIGFib3ZlIHRoaXMgaXMgCi0gKglwY2kgYnVzIDB4MDIpIGFuZCB0aGUgbmV4dCB0d28gY2hhcmFjdGVycyB0aGUgZGV2aWNlIG51bWJlciAoMHgwYSkuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1UzMjogVGhlIGRldmljZSBudW1iZXIgZnJvbSB0aGUgUENJIHNsb3QgbmFtZQotICovIAotCi1zdGF0aWMgU0tfVTMyIFBhcnNlRGV2aWNlTmJyRnJvbVNsb3ROYW1lKAotY29uc3QgY2hhciAqU2xvdE5hbWUpICAgLyogcG9pbnRlciB0byBwY2kgc2xvdCBuYW1lIGVnLiAnMDI6MGEuMCcgKi8KLXsKLQljaGFyCSpDdXJyQ2hhclBvcwk9IChjaGFyICopIFNsb3ROYW1lOwotCWludAlGaXJzdE5pYmJsZQk9IC0xOwotCWludAlTZWNvbmROaWJibGUJPSAtMTsKLQlTS19VMzIJUmVzdWx0CQk9ICAwOwotCi0Jd2hpbGUgKCpDdXJyQ2hhclBvcyAhPSAnXDAnKSB7Ci0JCWlmICgqQ3VyckNoYXJQb3MgPT0gJzonKSB7IAotCQkJd2hpbGUgKCpDdXJyQ2hhclBvcyAhPSAnLicpIHsKLQkJCQlDdXJyQ2hhclBvcysrOyAgCi0JCQkJaWYgKAkoKkN1cnJDaGFyUG9zID49ICcwJykgJiYgCi0JCQkJCSgqQ3VyckNoYXJQb3MgPD0gJzknKSkgewotCQkJCQlpZiAoRmlyc3ROaWJibGUgPT0gLTEpIHsKLQkJCQkJCS8qIGRlYy4gdmFsdWUgZm9yICcwJyAqLwotCQkJCQkJRmlyc3ROaWJibGUgPSAqQ3VyckNoYXJQb3MgLSA0ODsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCVNlY29uZE5pYmJsZSA9ICpDdXJyQ2hhclBvcyAtIDQ4OwotCQkJCQl9ICAKLQkJCQl9IGVsc2UgaWYgKAkoKkN1cnJDaGFyUG9zID49ICdhJykgJiYgCi0JCQkJCQkoKkN1cnJDaGFyUG9zIDw9ICdmJykgICkgewotCQkJCQlpZiAoRmlyc3ROaWJibGUgPT0gLTEpIHsKLQkJCQkJCUZpcnN0TmliYmxlID0gKkN1cnJDaGFyUG9zIC0gODc7IAotCQkJCQl9IGVsc2UgewotCQkJCQkJU2Vjb25kTmliYmxlID0gKkN1cnJDaGFyUG9zIC0gODc7IAotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJUmVzdWx0ID0gMDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCVJlc3VsdCA9IEZpcnN0TmliYmxlOwotCQkJUmVzdWx0ID0gUmVzdWx0IDw8IDQ7IC8qIGZpcnN0IG5pYmJsZSBpcyBoaWdoZXIgb25lICovCi0JCQlSZXN1bHQgPSBSZXN1bHQgfCBTZWNvbmROaWJibGU7Ci0JCX0KLQkJQ3VyckNoYXJQb3MrKzsgICAvKiBuZXh0IGNoYXJhY3RlciAqLwotCX0KLQlyZXR1cm4gKFJlc3VsdCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tEcnZEZUluaXRBZGFwdGVyIC0gZGVpbml0aWFsaXplIGFkYXB0ZXIgKHRoaXMgZnVuY3Rpb24gaXMgb25seSAKLSAqCQkJCWNhbGxlZCBpZiBEaWFnIGF0dGFjaGVzIHRvIHRoYXQgY2FyZCkKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUNsb3NlIGluaXRpYWxpemVkIGFkYXB0ZXIuCi0gKgotICogUmV0dXJuczoKLSAqCTAgLSBvbiBzdWNjZXNzCi0gKgllcnJvciBjb2RlIC0gb24gZXJyb3IKLSAqLwotc3RhdGljIGludCBTa0RydkRlSW5pdEFkYXB0ZXIoCi1TS19BQyAgICpwQUMsCQkvKiBwb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAgICovCi1pbnQgICAgICBkZXZOYnIpCS8qIHdoYXQgZGV2aWNlIGlzIHRvIGJlIGhhbmRsZWQgKi8KLXsKLQlzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2OwotCi0JZGV2ID0gcEFDLT5kZXZbZGV2TmJyXTsKLQotCS8qIE9uIExpbnV4IDIuNiB0aGUgbmV0d29yayBkcml2ZXIgZG9lcyBOT1QgbWVzcyB3aXRoIHJlZmVyZW5jZQotCSoqIGNvdW50cy4gIFRoZSBkcml2ZXIgTVVTVCBiZSBhYmxlIHRvIGJlIHVubG9hZGVkIGF0IGFueSB0aW1lCi0JKiogZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZiBob3RwbHVnLgotCSovCi0JaWYgKFNrR2VDbG9zZShkZXYpICE9IDApIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoMCk7Ci0KLX0gLyogU2tEcnZEZUluaXRBZGFwdGVyKCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0RydkluaXRBZGFwdGVyIC0gSW5pdGlhbGl6ZSBhZGFwdGVyICh0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgCi0gKgkJCQljYWxsZWQgaWYgRGlhZyBkZWF0dGFjaGVzIGZyb20gdGhhdCBjYXJkKQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJQ2xvc2UgaW5pdGlhbGl6ZWQgYWRhcHRlci4KLSAqCi0gKiBSZXR1cm5zOgotICoJMCAtIG9uIHN1Y2Nlc3MKLSAqCWVycm9yIGNvZGUgLSBvbiBlcnJvcgotICovCi1zdGF0aWMgaW50IFNrRHJ2SW5pdEFkYXB0ZXIoCi1TS19BQyAgICpwQUMsCQkvKiBwb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAgICovCi1pbnQgICAgICBkZXZOYnIpCS8qIHdoYXQgZGV2aWNlIGlzIHRvIGJlIGhhbmRsZWQgKi8KLXsKLQlzdHJ1Y3QgU0tfTkVUX0RFVklDRSAqZGV2OwotCi0JZGV2ID0gcEFDLT5kZXZbZGV2TmJyXTsKLQotCWlmIChTa0dlT3BlbihkZXYpICE9IDApIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCi0JLyoKLQkqKiBVc2UgY29ycmVjdCBNVFUgc2l6ZSBhbmQgaW5kaWNhdGUgdG8ga2VybmVsIFRYIHF1ZXVlIGNhbiBiZSBzdGFydGVkCi0JKi8gCi0JaWYgKFNrR2VDaGFuZ2VNdHUoZGV2LCBkZXYtPm10dSkgIT0gMCkgewotCQlyZXR1cm4gKC0xKTsKLQl9IAotCXJldHVybiAoMCk7Ci0KLX0gLyogU2tEcnZJbml0QWRhcHRlciAqLwotCi0jZW5kaWYKLQotI2lmZGVmIERFQlVHCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICJkZWJ1ZyBvbmx5IiBzZWN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJRHVtcE1zZyAtIHByaW50IGEgZnJhbWUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gcHJpbnRzIGZyYW1lcyB0byB0aGUgc3lzdGVtIGxvZ2ZpbGUvdG8gdGhlIGNvbnNvbGUuCi0gKgotICogUmV0dXJuczogTi9BCi0gKgkKLSAqLwotc3RhdGljIHZvaWQgRHVtcE1zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpzdHIpCi17Ci0JaW50CW1zZ2xlbjsKLQotCWlmIChza2IgPT0gTlVMTCkgewotCQlwcmludGsoIkR1bXBNc2coKTogTlVMTC1NZXNzYWdlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChza2ItPmRhdGEgPT0gTlVMTCkgewotCQlwcmludGsoIkR1bXBNc2coKTogTWVzc2FnZSBlbXB0eVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltc2dsZW4gPSBza2ItPmxlbjsKLQlpZiAobXNnbGVuID4gNjQpCi0JCW1zZ2xlbiA9IDY0OwotCi0JcHJpbnRrKCItLS0gQmVnaW4gb2YgbWVzc2FnZSBmcm9tICVzICwgbGVuICVkIChmcm9tICVkKSAtLS0tXG4iLCBzdHIsIG1zZ2xlbiwgc2tiLT5sZW4pOwotCi0JRHVtcERhdGEoKGNoYXIgKilza2ItPmRhdGEsIG1zZ2xlbik7Ci0KLQlwcmludGsoIi0tLS0tLS0gRW5kIG9mIG1lc3NhZ2UgLS0tLS0tLS0tXG4iKTsKLX0gLyogRHVtcE1zZyAqLwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJRHVtcERhdGEgLSBwcmludCBhIGRhdGEgYXJlYQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBwcmludHMgYSBhcmVhIG9mIGRhdGEgdG8gdGhlIHN5c3RlbSBsb2dmaWxlL3RvIHRoZQotICoJY29uc29sZS4KLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqCQotICovCi1zdGF0aWMgdm9pZCBEdW1wRGF0YShjaGFyICpwLCBpbnQgc2l6ZSkKLXsKLXJlZ2lzdGVyIGludCAgICBpOwotaW50CWhhZGRyLCBhZGRyOwotY2hhcgloZXhfYnVmZmVyWzE4MF07Ci1jaGFyCWFzY19idWZmZXJbMTgwXTsKLWNoYXIJSEVYQ0hBUltdID0gIjAxMjM0NTY3ODlBQkNERUYiOwotCi0JYWRkciA9IDA7Ci0JaGFkZHIgPSAwOwotCWhleF9idWZmZXJbMF0gPSAwOwotCWFzY19idWZmZXJbMF0gPSAwOwotCWZvciAoaT0wOyBpIDwgc2l6ZTsgKSB7Ci0JCWlmICgqcCA+PSAnMCcgJiYgKnAgPD0neicpCi0JCQlhc2NfYnVmZmVyW2FkZHJdID0gKnA7Ci0JCWVsc2UKLQkJCWFzY19idWZmZXJbYWRkcl0gPSAnLic7Ci0JCWFkZHIrKzsKLQkJYXNjX2J1ZmZlclthZGRyXSA9IDA7Ci0JCWhleF9idWZmZXJbaGFkZHJdID0gSEVYQ0hBUlsoKnAgJiAweGYwKSA+PiA0XTsKLQkJaGFkZHIrKzsKLQkJaGV4X2J1ZmZlcltoYWRkcl0gPSBIRVhDSEFSWypwICYgMHgwZl07Ci0JCWhhZGRyKys7Ci0JCWhleF9idWZmZXJbaGFkZHJdID0gJyAnOwotCQloYWRkcisrOwotCQloZXhfYnVmZmVyW2hhZGRyXSA9IDA7Ci0JCXArKzsKLQkJaSsrOwotCQlpZiAoaSUxNiA9PSAwKSB7Ci0JCQlwcmludGsoIiVzICAlc1xuIiwgaGV4X2J1ZmZlciwgYXNjX2J1ZmZlcik7Ci0JCQlhZGRyID0gMDsKLQkJCWhhZGRyID0gMDsKLQkJfQotCX0KLX0gLyogRHVtcERhdGEgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglEdW1wTG9uZyAtIHByaW50IGEgZGF0YSBhcmVhIGFzIGxvbmcgdmFsdWVzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHByaW50cyBhIGFyZWEgb2YgZGF0YSB0byB0aGUgc3lzdGVtIGxvZ2ZpbGUvdG8gdGhlCi0gKgljb25zb2xlLgotICoKLSAqIFJldHVybnM6IE4vQQotICoJCi0gKi8KLXN0YXRpYyB2b2lkIER1bXBMb25nKGNoYXIgKnBjLCBpbnQgc2l6ZSkKLXsKLXJlZ2lzdGVyIGludCAgICBpOwotaW50CWhhZGRyLCBhZGRyOwotY2hhcgloZXhfYnVmZmVyWzE4MF07Ci1jaGFyCWFzY19idWZmZXJbMTgwXTsKLWNoYXIJSEVYQ0hBUltdID0gIjAxMjM0NTY3ODlBQkNERUYiOwotbG9uZwkqcDsKLWludAlsOwotCi0JYWRkciA9IDA7Ci0JaGFkZHIgPSAwOwotCWhleF9idWZmZXJbMF0gPSAwOwotCWFzY19idWZmZXJbMF0gPSAwOwotCXAgPSAobG9uZyopIHBjOwotCWZvciAoaT0wOyBpIDwgc2l6ZTsgKSB7Ci0JCWwgPSAobG9uZykgKnA7Ci0JCWhleF9idWZmZXJbaGFkZHJdID0gSEVYQ0hBUlsobCA+PiAyOCkgJiAweGZdOwotCQloYWRkcisrOwotCQloZXhfYnVmZmVyW2hhZGRyXSA9IEhFWENIQVJbKGwgPj4gMjQpICYgMHhmXTsKLQkJaGFkZHIrKzsKLQkJaGV4X2J1ZmZlcltoYWRkcl0gPSBIRVhDSEFSWyhsID4+IDIwKSAmIDB4Zl07Ci0JCWhhZGRyKys7Ci0JCWhleF9idWZmZXJbaGFkZHJdID0gSEVYQ0hBUlsobCA+PiAxNikgJiAweGZdOwotCQloYWRkcisrOwotCQloZXhfYnVmZmVyW2hhZGRyXSA9IEhFWENIQVJbKGwgPj4gMTIpICYgMHhmXTsKLQkJaGFkZHIrKzsKLQkJaGV4X2J1ZmZlcltoYWRkcl0gPSBIRVhDSEFSWyhsID4+IDgpICYgMHhmXTsKLQkJaGFkZHIrKzsKLQkJaGV4X2J1ZmZlcltoYWRkcl0gPSBIRVhDSEFSWyhsID4+IDQpICYgMHhmXTsKLQkJaGFkZHIrKzsKLQkJaGV4X2J1ZmZlcltoYWRkcl0gPSBIRVhDSEFSW2wgJiAweDBmXTsKLQkJaGFkZHIrKzsKLQkJaGV4X2J1ZmZlcltoYWRkcl0gPSAnICc7Ci0JCWhhZGRyKys7Ci0JCWhleF9idWZmZXJbaGFkZHJdID0gMDsKLQkJcCsrOwotCQlpKys7Ci0JCWlmIChpJTggPT0gMCkgewotCQkJcHJpbnRrKCIlNHggJXNcbiIsIChpLTgpKjQsIGhleF9idWZmZXIpOwotCQkJaGFkZHIgPSAwOwotCQl9Ci0JfQotCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLX0gLyogRHVtcExvbmcgKi8KLQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNrZ2VfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCVNLX0FDCQkJKnBBQzsKLQlERVZfTkVUCQkJKnBOZXQgPSBOVUxMOwotCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXYgPSBOVUxMOwotCXN0YXRpYyBpbnQgYm9hcmRzX2ZvdW5kID0gMDsKLQlpbnQgZXJyb3IgPSAtRU5PREVWOwotCWludCB1c2luZ19kYWMgPSAwOwotCWNoYXIgRGV2aWNlU3RyWzgwXTsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJZ290byBvdXQ7Ci0gCi0JLyogQ29uZmlndXJlIERNQSBhdHRyaWJ1dGVzLiAqLwotCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSAmJgotCSAgICAhKGVycm9yID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7Ci0JCXVzaW5nX2RhYyA9IDE7Ci0JCWVycm9yID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKLQkJaWYgKGVycm9yIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzazk4bGluICVzIHVuYWJsZSB0byBvYnRhaW4gNjQgYml0IERNQSAiCi0JCQkgICAgICAgImZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iLCBwY2lfbmFtZShwZGV2KSk7Ci0JCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKLQkJfQotCX0gZWxzZSB7Ci0JCWVycm9yID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JCWlmIChlcnJvcikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzazk4bGluICVzIG5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIiwKLQkJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKLQkJfQotCX0KLQotIAllcnJvciA9IC1FTk9NRU07Ci0gCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihERVZfTkVUKSk7Ci0gCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2s5OGxpbjogdW5hYmxlIHRvIGFsbG9jYXRlIGV0aGVyZGV2ICIKLQkJICAgICAgICJzdHJ1Y3R1cmUhXG4iKTsKLQkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7Ci0JfQotCi0JcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JcE5ldC0+cEFDID0ga3phbGxvYyhzaXplb2YoU0tfQUMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBOZXQtPnBBQykgewotCQlwcmludGsoS0VSTl9FUlIgInNrOThsaW46IHVuYWJsZSB0byBhbGxvY2F0ZSBhZGFwdGVyICIKLQkJICAgICAgICJzdHJ1Y3R1cmUhXG4iKTsKLQkJZ290byBvdXRfZnJlZV9uZXRkZXY7Ci0JfQotCi0JcEFDID0gcE5ldC0+cEFDOwotCXBBQy0+UGNpRGV2ID0gcGRldjsKLQotCXBBQy0+ZGV2WzBdID0gZGV2OwotCXBBQy0+ZGV2WzFdID0gZGV2OwotCXBBQy0+Q2hlY2tRdWV1ZSA9IFNLX0ZBTFNFOwotCi0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7Ci0KLQllcnJvciA9IFNrR2VJbml0UENJKHBBQyk7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2s5OGxpbjogUENJIHNldHVwIGZhaWxlZDogJWlcbiIsIGVycm9yKTsKLQkJZ290byBvdXRfZnJlZV9uZXRkZXY7Ci0JfQotCi0JZGV2LT5vcGVuID0JCSZTa0dlT3BlbjsKLQlkZXYtPnN0b3AgPQkJJlNrR2VDbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9CSZTa0dlWG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9CSZTa0dlU3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmU2tHZVNldFJ4TW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9CSZTa0dlU2V0TWFjQWRkcjsKLQlkZXYtPmRvX2lvY3RsID0JCSZTa0dlSW9jdGw7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0JJlNrR2VDaGFuZ2VNdHU7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9CSZTa0dlUG9sbENvbnRyb2xsZXI7Ci0jZW5kaWYKLQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwotCVNFVF9FVEhUT09MX09QUyhkZXYsICZTa0dlRXRodG9vbE9wcyk7Ci0KLQkvKiBVc2Ugb25seSBpZiB5dWtvbiBoYXJkd2FyZSAqLwotCWlmIChwQUMtPkNoaXBzZXRUeXBlKSB7Ci0jaWZkZWYgVVNFX1NLX1RYX0NIRUNLU1VNCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOwotI2VuZGlmCi0jaWZkZWYgU0tfWkVST0NPUFkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwotI2VuZGlmCi0jaWZkZWYgVVNFX1NLX1JYX0NIRUNLU1VNCi0JCXBBQy0+UnhQb3J0WzBdLlJ4Q3N1bSA9IDE7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAodXNpbmdfZGFjKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQotCXBBQy0+SW5kZXggPSBib2FyZHNfZm91bmQrKzsKLQotCWVycm9yID0gU2tHZUJvYXJkSW5pdChkZXYsIHBBQyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9mcmVlX25ldGRldjsKLQotCS8qIFJlYWQgQWRhcHRlciBuYW1lIGZyb20gVlBEICovCi0JaWYgKFByb2R1Y3RTdHIocEFDLCBEZXZpY2VTdHIsIHNpemVvZihEZXZpY2VTdHIpKSAhPSAwKSB7Ci0JCWVycm9yID0gLUVJTzsKLQkJcHJpbnRrKEtFUk5fRVJSICJzazk4bGluOiBDb3VsZCBub3QgcmVhZCBWUEQgZGF0YS5cbiIpOwotCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKLQl9Ci0KLQkvKiBSZWdpc3RlciBuZXQgZGV2aWNlICovCi0JZXJyb3IgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzazk4bGluOiBDb3VsZCBub3QgcmVnaXN0ZXIgZGV2aWNlLlxuIik7Ci0JCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwotCX0KLQotCS8qIFByaW50IGFkYXB0ZXIgc3BlY2lmaWMgc3RyaW5nIGZyb20gdnBkICovCi0JcHJpbnRrKCIlczogJXNcbiIsIGRldi0+bmFtZSwgRGV2aWNlU3RyKTsKLQotCS8qIFByaW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KLQlwcmludGsoIiAgICAgIFByZWZQb3J0OiVjICBSbG10TW9kZTolc1xuIiwKLQkJJ0EnICsgcEFDLT5SbG10Lk5ldFswXS5Qb3J0W3BBQy0+UmxtdC5OZXRbMF0uUHJlZlBvcnRdLT5Qb3J0TnVtYmVyLAotCQkocEFDLT5SbG10TW9kZT09MCkgID8gIkNoZWNrIExpbmsgU3RhdGUiIDoKLQkJKChwQUMtPlJsbXRNb2RlPT0xKSA/ICJDaGVjayBMaW5rIFN0YXRlIiA6Ci0JCSgocEFDLT5SbG10TW9kZT09MykgPyAiQ2hlY2sgTG9jYWwgUG9ydCIgOgotCQkoKHBBQy0+UmxtdE1vZGU9PTcpID8gIkNoZWNrIFNlZ21lbnRhdGlvbiIgOgotCQkoKHBBQy0+UmxtdE1vZGU9PTE3KSA/ICJEdWFsIENoZWNrIExpbmsgU3RhdGUiIDoiRXJyb3IiKSkpKSk7Ci0KLQlTa0dlWWVsbG93TEVEKHBBQywgcEFDLT5Jb0Jhc2UsIDEpOwotCi0JbWVtY3B5KCZkZXYtPmRldl9hZGRyLCAmcEFDLT5BZGRyLk5ldFswXS5DdXJyZW50TWFjQWRkcmVzcywgNik7Ci0JbWVtY3B5KGRldi0+cGVybV9hZGRyLCBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKLQotCXBOZXQtPlBvcnROciA9IDA7Ci0JcE5ldC0+TmV0TnIgID0gMDsKLQotCWJvYXJkc19mb3VuZCsrOwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0KLQkvKiBNb3JlIHRoZW4gb25lIHBvcnQgZm91bmQgKi8KLQlpZiAoKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyICkgJiYgKHBBQy0+UmxtdE5ldHMgPT0gMikpIHsKLQkJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKERFVl9ORVQpKTsKLQkJaWYgKCFkZXYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2s5OGxpbjogdW5hYmxlIHRvIGFsbG9jYXRlIGV0aGVyZGV2ICIKLQkJCQkic3RydWN0dXJlIVxuIik7Ci0JCQlnb3RvIHNpbmdsZV9wb3J0OwotCQl9Ci0KLQkJcE5ldCAgICAgICAgICA9IG5ldGRldl9wcml2KGRldik7Ci0JCXBOZXQtPlBvcnROciAgPSAxOwotCQlwTmV0LT5OZXROciAgID0gMTsKLQkJcE5ldC0+cEFDICAgICA9IHBBQzsKLQotCQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9ICZTa0dlT3BlbjsKLQkJZGV2LT5zdG9wICAgICAgICAgICAgICAgPSAmU2tHZUNsb3NlOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9ICZTa0dlWG1pdDsKLQkJZGV2LT5nZXRfc3RhdHMgICAgICAgICAgPSAmU2tHZVN0YXRzOwotCQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZTa0dlU2V0UnhNb2RlOwotCQlkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9ICZTa0dlU2V0TWFjQWRkcjsKLQkJZGV2LT5kb19pb2N0bCAgICAgICAgICAgPSAmU2tHZUlvY3RsOwotCQlkZXYtPmNoYW5nZV9tdHUgICAgICAgICA9ICZTa0dlQ2hhbmdlTXR1OwotCQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwotCQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmU2tHZUV0aHRvb2xPcHMpOwotCi0JCWlmIChwQUMtPkNoaXBzZXRUeXBlKSB7Ci0jaWZkZWYgVVNFX1NLX1RYX0NIRUNLU1VNCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKLSNlbmRpZgotI2lmZGVmIFNLX1pFUk9DT1BZCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0jZW5kaWYKLSNpZmRlZiBVU0VfU0tfUlhfQ0hFQ0tTVU0KLQkJCXBBQy0+UnhQb3J0WzFdLlJ4Q3N1bSA9IDE7Ci0jZW5kaWYKLQkJfQotCi0JCWlmICh1c2luZ19kYWMpCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQotCQllcnJvciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2s5OGxpbjogQ291bGQgbm90IHJlZ2lzdGVyIGRldmljZSIKLQkJCSAgICAgICAiIGZvciBzZWNvbmQgcG9ydC4gKCVkKVxuIiwgZXJyb3IpOwotCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJCWdvdG8gc2luZ2xlX3BvcnQ7Ci0JCX0KLQotCQlwQUMtPmRldlsxXSAgID0gZGV2OwotCQltZW1jcHkoJmRldi0+ZGV2X2FkZHIsCi0JCSAgICAgICAmcEFDLT5BZGRyLk5ldFsxXS5DdXJyZW50TWFjQWRkcmVzcywgNik7Ci0JCW1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7Ci0KLQkJcHJpbnRrKCIlczogJXNcbiIsIGRldi0+bmFtZSwgRGV2aWNlU3RyKTsKLQkJcHJpbnRrKCIgICAgICBQcmVmUG9ydDpCICBSbG10TW9kZTpEdWFsIENoZWNrIExpbmsgU3RhdGVcbiIpOwotCX0KLQotc2luZ2xlX3BvcnQ6Ci0KLQkvKiBTYXZlIHRoZSBoYXJkd2FyZSByZXZpc2lvbiAqLwotCXBBQy0+SFdSZXZpc2lvbiA9ICgoKHBBQy0+R0luaS5HSVBjaUh3UmV2ID4+IDQpICYgMHgwRikqMTApICsKLQkJKHBBQy0+R0luaS5HSVBjaUh3UmV2ICYgMHgwRik7Ci0KLQkvKiBTZXQgZHJpdmVyIGdsb2JhbHMgKi8KLQlwQUMtPlBubWkucERyaXZlckZpbGVOYW1lICAgID0gRFJJVkVSX0ZJTEVfTkFNRTsKLQlwQUMtPlBubWkucERyaXZlclJlbGVhc2VEYXRlID0gRFJJVkVSX1JFTF9EQVRFOwotCi0JbWVtc2V0KCZwQUMtPlBubWlCYWNrdXAsIDAsIHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSk7Ci0JbWVtY3B5KCZwQUMtPlBubWlCYWNrdXAsICZwQUMtPlBubWlTdHJ1Y3QsIHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSk7Ci0KLQlyZXR1cm4gMDsKLQotIG91dF9mcmVlX3Jlc291cmNlczoKLQlGcmVlUmVzb3VyY2VzKGRldik7Ci0gb3V0X2ZyZWVfbmV0ZGV2OgotCWZyZWVfbmV0ZGV2KGRldik7Ci0gb3V0X2Rpc2FibGVfZGV2aWNlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLSBvdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc2tnZV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJkZXYgPSBwQUMtPmRldlsxXTsKLQotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0KLQlTa0dlWWVsbG93TEVEKHBBQywgcEFDLT5Jb0Jhc2UsIDApOwotCi0JaWYgKHBBQy0+Qm9hcmRMZXZlbCA9PSBTS19JTklUX1JVTikgewotCQlTS19FVlBBUkEgRXZQYXJhOwotCQl1bnNpZ25lZCBsb25nIEZsYWdzOwotCi0JCS8qIGJvYXJkIGlzIHN0aWxsIGFsaXZlICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCQlFdlBhcmEuUGFyYTMyWzBdID0gMDsKLQkJRXZQYXJhLlBhcmEzMlsxXSA9IC0xOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfU1RPUCwgRXZQYXJhKTsKLQkJRXZQYXJhLlBhcmEzMlswXSA9IDE7Ci0JCUV2UGFyYS5QYXJhMzJbMV0gPSAtMTsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9STE1ULCBTS19STE1UX1NUT1AsIEV2UGFyYSk7Ci0JCVNrRXZlbnREaXNwYXRjaGVyKHBBQywgcEFDLT5Jb0Jhc2UpOwotCQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQkJU0tfT1VUMzIocEFDLT5Jb0Jhc2UsIEIwX0lNU0ssIDApOwotCQlTa0dlRGVJbml0KHBBQywgcEFDLT5Jb0Jhc2UpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQUMtPlNsb3dQYXRoTG9jaywgRmxhZ3MpOwotCQlwQUMtPkJvYXJkTGV2ZWwgPSBTS19JTklUX0RBVEE7Ci0JCS8qIFdlIGRvIE5PVCBjaGVjayBoZXJlLCBpZiBJUlEgd2FzIHBlbmRpbmcsIG9mIGNvdXJzZSovCi0JfQotCi0JaWYgKHBBQy0+Qm9hcmRMZXZlbCA9PSBTS19JTklUX0lPKSB7Ci0JCS8qIGJvYXJkIGlzIHN0aWxsIGFsaXZlICovCi0JCVNrR2VEZUluaXQocEFDLCBwQUMtPklvQmFzZSk7Ci0JCXBBQy0+Qm9hcmRMZXZlbCA9IFNLX0lOSVRfREFUQTsKLQl9Ci0KLQlGcmVlUmVzb3VyY2VzKGRldik7Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLQlpZiAob3RoZXJkZXYgIT0gZGV2KQotCQlmcmVlX25ldGRldihvdGhlcmRldik7Ci0Ja2ZyZWUocEFDKTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBza2dlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCURFVl9ORVQgKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCVNLX0FDICpwQUMgPSBwTmV0LT5wQUM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm90aGVyZGV2ID0gcEFDLT5kZXZbMV07Ci0KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCURvUHJpbnRJbnRlcmZhY2VDaGFuZ2UgPSBTS19GQUxTRTsKLQkJU2tEcnZEZUluaXRBZGFwdGVyKHBBQywgMCk7ICAvKiBwZXJmb3JtcyBTa0dlQ2xvc2UgKi8KLQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCX0KLQlpZiAob3RoZXJkZXYgIT0gZGV2KSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKG90aGVyZGV2KSkgewotCQkJbmV0aWZfY2Fycmllcl9vZmYob3RoZXJkZXYpOwotCQkJRG9QcmludEludGVyZmFjZUNoYW5nZSA9IFNLX0ZBTFNFOwotCQkJU2tEcnZEZUluaXRBZGFwdGVyKHBBQywgMSk7ICAvKiBwZXJmb3JtcyBTa0dlQ2xvc2UgKi8KLQkJCW5ldGlmX2RldmljZV9kZXRhY2gob3RoZXJkZXYpOwotCQl9Ci0JfQotCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCAwKTsKLQlpZiAocEFDLT5BbGxvY0ZsYWcgJiBTS19BTExPQ19JUlEpIHsKLQkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JfQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNrZ2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JREVWX05FVCAqcE5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JU0tfQUMgKnBBQyA9IHBOZXQtPnBBQzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJkZXYgPSBwQUMtPmRldlsxXTsKLQlpbnQgcmV0OwotCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2s5OGxpbjogdW5hYmxlIHRvIGVuYWJsZSBkZXZpY2UgJXMgIgotCQkJCSJpbiByZXN1bWVcbiIsIGRldi0+bmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyKQotCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgU2tHZUlzciwgSVJRRl9TSEFSRUQsICJzazk4bGluIiwgZGV2KTsKLQllbHNlCi0JCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBTa0dlSXNyT25lUG9ydCwgSVJRRl9TSEFSRUQsICJzazk4bGluIiwgZGV2KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInNrOThsaW46IHVuYWJsZSB0byBhY3F1aXJlIElSUSAlZFxuIiwgZGV2LT5pcnEpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7Ci0JfQotCi0JbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJRG9QcmludEludGVyZmFjZUNoYW5nZSA9IFNLX0ZBTFNFOwotCQlTa0RydkluaXRBZGFwdGVyKHBBQywgMCk7ICAgIC8qIGZpcnN0IGRldmljZSAgKi8KLQl9Ci0JaWYgKG90aGVyZGV2ICE9IGRldikgewotCQluZXRpZl9kZXZpY2VfYXR0YWNoKG90aGVyZGV2KTsKLQkJaWYgKG5ldGlmX3J1bm5pbmcob3RoZXJkZXYpKSB7Ci0JCQlEb1ByaW50SW50ZXJmYWNlQ2hhbmdlID0gU0tfRkFMU0U7Ci0JCQlTa0RydkluaXRBZGFwdGVyKHBBQywgMSk7ICAgIC8qIHNlY29uZCBkZXZpY2UgICovCi0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9kaXNhYmxlX3BkZXY6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotZXJyX291dDoKLQlwQUMtPkFsbG9jRmxhZyAmPSB+U0tfQUxMT0NfSVJROwotCWRldi0+aXJxID0gMDsKLQlyZXR1cm4gcmV0OwotfQotI2Vsc2UKLSNkZWZpbmUgc2tnZV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgc2tnZV9yZXN1bWUgTlVMTAotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBza2dlX3BjaV90YmxbXSA9IHsKLSNpZmRlZiBTSzk4TElOX0FMTF9ERVZJQ0VTCi0JeyBQQ0lfVkVORE9SX0lEXzNDT00sIDB4MTcwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCXsgUENJX1ZFTkRPUl9JRF8zQ09NLCAweDgwZWIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLSNlbmRpZgotI2lmZGVmIEdFTkVTSVMKLQkvKiBHZW5lcmljIFN5c0tvbm5lY3QgU0stOTh4eCBHaWdhYml0IEV0aGVybmV0IFNlcnZlciBBZGFwdGVyICovCQotCXsgUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDQzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLSNlbmRpZgotCS8qIEdlbmVyaWMgU3lzS29ubmVjdCBTSy05OHh4IFYyLjAgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyICovCQotCXsgUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDQzMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLSNpZmRlZiBTSzk4TElOX0FMTF9ERVZJQ0VTCi0vKiBETGluayBjYXJkIGRvZXMgbm90IGhhdmUgdmFsaWQgVlBEIHNvIHRoaXMgZHJpdmVyIGdhZ3MKLSAqCXsgUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0gKi8KLQl7IFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JeyBQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NTAwNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCXsgUENJX1ZFTkRPUl9JRF9DTkVULCAweDQzNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLQl7IFBDSV9WRU5ET1JfSURfTElOS1NZUywgMHgxMDMyLCBQQ0lfQU5ZX0lELCAweDAwMTUsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0xJTktTWVMsIDB4MTA2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotI2VuZGlmCi0JeyAwIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBza2dlX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2tnZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNrOThsaW4iLAotCS5pZF90YWJsZQk9IHNrZ2VfcGNpX3RibCwKLQkucHJvYmUJCT0gc2tnZV9wcm9iZV9vbmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChza2dlX3JlbW92ZV9vbmUpLAotCS5zdXNwZW5kCT0gc2tnZV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2tnZV9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBza2dlX2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgInNrOThsaW46IGRyaXZlciBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgc2tnZSBkcml2ZXIiCi0JICAgICAgICIgYW5kIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbFxuIik7Ci0KLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2tnZV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2tnZV9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZza2dlX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHNrZ2VfaW5pdCk7Ci1tb2R1bGVfZXhpdChza2dlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlaHd0LmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2Vod3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI2NzA5OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2Vod3QuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tnZWh3dC5jCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBFdmVudCBTY2hlZHVsZXIgTW9kdWxlCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMTUgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDkvMTYgMTM6NDE6MjMgJAotICogUHVycG9zZToJSGFyZHdhcmUgVGltZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICoJRXZlbnQgcXVldWUgYW5kIGRpc3BhdGNoZXIKLSAqLwotI2lmIChkZWZpbmVkKERFQlVHKSB8fCAoKCFkZWZpbmVkKExJTlQpKSAmJiAoIWRlZmluZWQoU0tfU0xJTSkpKSkKLXN0YXRpYyBjb25zdCBjaGFyIFN5c0tvbm5lY3RGaWxlSWRbXSA9Ci0JIkAoIykgJElkOiBza2dlaHd0LmMsdiAxLjE1IDIwMDMvMDkvMTYgMTM6NDE6MjMgcnNjaG1pZHQgRXhwICQgKEMpIE1hcnZlbGwuIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgkJLyogRHJpdmVyIFNwZWNpZmljIERlZmluaXRpb25zICovCi0jaW5jbHVkZSAiaC9za2RydjJuZC5oIgkJLyogQWRhcHRlciBDb250cm9sLSBhbmQgRHJpdmVyIHNwZWNpZmljIERlZi4gKi8KLQotI2lmZGVmIF9fQzJNQU5fXwotLyoKLSAqICAgSGFyZHdhcmUgVGltZXIgZnVuY3Rpb24gcXVldWUgbWFuYWdlbWVudC4KLSAqLwotaW50cm8oKQote30KLSNlbmRpZgotCi0vKgotICogUHJvdG90eXBlcyBvZiBsb2NhbCBmdW5jdGlvbnMuCi0gKi8KLSNkZWZpbmUJU0tfSFdUX01BWAkoNjUwMDApCi0KLS8qIGNvcnJlY3Rpb24gZmFjdG9yICovCi0jZGVmaW5lCVNLX0hXVF9GQUMJKDEwMDAgKiAoU0tfVTMyKXBBQy0+R0luaS5HSUhzdENsa0ZhY3QgLyAxMDApCi0KLS8qCi0gKiBJbml0aWFsaXplIGhhcmR3YXJlIHRpbWVyLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIGR1cmluZyBpbml0IGxldmVsIDEuCi0gKi8KLXZvaWQJU2tId3RJbml0KAotU0tfQUMJKnBBQywJLyogQWRhcHRlcnMgY29udGV4dCAqLwotU0tfSU9DCUlvYykJLyogSW9Db250ZXh0ICovCi17Ci0JcEFDLT5Id3QuVFN0YXJ0ID0gMCA7Ci0JcEFDLT5Id3QuVFN0b3AJPSAwIDsKLQlwQUMtPkh3dC5UQWN0aXZlID0gU0tfRkFMU0U7Ci0KLQlTa0h3dFN0b3AocEFDLCBJb2MpOwotfQotCi0vKgotICoKLSAqIFN0YXJ0IGhhcmR3YXJlIHRpbWVyIChjbG9jayB0aWNrcyBhcmUgMTZ1cykuCi0gKgotICovCi12b2lkCVNrSHd0U3RhcnQoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVycyBjb250ZXh0ICovCi1TS19JT0MJSW9jLAkvKiBJb0NvbnRleHQgKi8KLVNLX1UzMglUaW1lKQkvKiBUaW1lIGluIHVuaXRzIG9mIDE2dXMgdG8gbG9hZCB0aGUgdGltZXIgd2l0aC4gKi8KLXsKLQlTS19VMzIJQ250OwotCi0JaWYgKFRpbWUgPiBTS19IV1RfTUFYKQotCQlUaW1lID0gU0tfSFdUX01BWDsKLQotCXBBQy0+SHd0LlRTdGFydCA9IFRpbWU7Ci0JcEFDLT5Id3QuVFN0b3AgPSAwTDsKLQotCUNudCA9IFRpbWU7Ci0KLQkvKgotCSAqIGlmIHRpbWUgPCAxNiB1cwotCSAqCXRpbWUgPSAxNiB1cwotCSAqLwotCWlmICghQ250KSB7Ci0JCUNudCsrOwotCX0KLQotCVNLX09VVDMyKElvYywgQjJfVElfSU5JLCBDbnQgKiBTS19IV1RfRkFDKTsKLQkKLQlTS19PVVQxNihJb2MsIEIyX1RJX0NUUkwsIFRJTV9TVEFSVCk7CS8qIFN0YXJ0IHRpbWVyLiAqLwotCi0JcEFDLT5Id3QuVEFjdGl2ZSA9IFNLX1RSVUU7Ci19Ci0KLS8qCi0gKiBTdG9wIGhhcmR3YXJlIHRpbWVyLgotICogYW5kIGNsZWFyIHRoZSB0aW1lciBJUlEKLSAqLwotdm9pZAlTa0h3dFN0b3AoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVycyBjb250ZXh0ICovCi1TS19JT0MJSW9jKQkvKiBJb0NvbnRleHQgKi8KLXsKLQlTS19PVVQxNihJb2MsIEIyX1RJX0NUUkwsIFRJTV9TVE9QKTsKLQkKLQlTS19PVVQxNihJb2MsIEIyX1RJX0NUUkwsIFRJTV9DTFJfSVJRKTsKLQotCXBBQy0+SHd0LlRBY3RpdmUgPSBTS19GQUxTRTsKLX0KLQotCi0vKgotICoJU3RvcCBoYXJkd2FyZSB0aW1lciBhbmQgcmVhZCB0aW1lIGVsYXBzZWQgc2luY2UgbGFzdCBzdGFydC4KLSAqCi0gKiByZXR1cm5zCi0gKglUaGUgZWxhcHNlZCB0aW1lIHNpbmNlIGxhc3Qgc3RhcnQgaW4gdW5pdHMgb2YgMTZ1cy4KLSAqCi0gKi8KLVNLX1UzMglTa0h3dFJlYWQoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVycyBjb250ZXh0ICovCi1TS19JT0MJSW9jKQkvKiBJb0NvbnRleHQgKi8KLXsKLQlTS19VMzIJVFJlYWQ7Ci0JU0tfVTMyCUlTdGF0dXM7Ci0KLQlpZiAocEFDLT5Id3QuVEFjdGl2ZSkgewotCQkKLQkJU2tId3RTdG9wKHBBQywgSW9jKTsKLQotCQlTS19JTjMyKElvYywgQjJfVElfVkFMLCAmVFJlYWQpOwotCQlUUmVhZCAvPSBTS19IV1RfRkFDOwotCi0JCVNLX0lOMzIoSW9jLCBCMF9JU1JDLCAmSVN0YXR1cyk7Ci0KLQkJLyogQ2hlY2sgaWYgdGltZXIgZXhwaXJlZCAob3Igd3JhcGVkIGFyb3VuZCkgKi8KLQkJaWYgKChUUmVhZCA+IHBBQy0+SHd0LlRTdGFydCkgfHwgKElTdGF0dXMgJiBJU19USU1JTlQpKSB7Ci0JCQkKLQkJCVNrSHd0U3RvcChwQUMsIElvYyk7Ci0JCQkKLQkJCXBBQy0+SHd0LlRTdG9wID0gcEFDLT5Id3QuVFN0YXJ0OwotCQl9Ci0JCWVsc2UgewotCQkJCi0JCQlwQUMtPkh3dC5UU3RvcCA9IHBBQy0+SHd0LlRTdGFydCAtIFRSZWFkOwotCQl9Ci0JfQotCXJldHVybihwQUMtPkh3dC5UU3RvcCk7Ci19Ci0KLS8qCi0gKiBpbnRlcnJ1cHQgc291cmNlPSB0aW1lcgotICovCi12b2lkCVNrSHd0SXNyKAotU0tfQUMJKnBBQywJLyogQWRhcHRlcnMgY29udGV4dCAqLwotU0tfSU9DCUlvYykJLyogSW9Db250ZXh0ICovCi17Ci0JU2tId3RTdG9wKHBBQywgSW9jKTsKLQkKLQlwQUMtPkh3dC5UU3RvcCA9IHBBQy0+SHd0LlRTdGFydDsKLQkKLQlTa1RpbWVyRG9uZShwQUMsIElvYyk7Ci19Ci0KLS8qIEVuZCBvZiBmaWxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2Vpbml0LmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2Vpbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZjFkNmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlaW5pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tnZWluaXQuYwotICogUHJvamVjdDoJR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVycywgQ29tbW9uIE1vZHVsZXMKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS45NyAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8xMC8wMiAxNjo0NTozMSAkCi0gKiBQdXJwb3NlOglDb250YWlucyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgYWRhcHRlcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QuCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLQotLyogZ2xvYmFsIHZhcmlhYmxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogbG9jYWwgdmFyaWFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmIChkZWZpbmVkKERFQlVHKSB8fCAoKCFkZWZpbmVkKExJTlQpKSAmJiAoIWRlZmluZWQoU0tfU0xJTSkpKSkKLXN0YXRpYyBjb25zdCBjaGFyIFN5c0tvbm5lY3RGaWxlSWRbXSA9Ci0JIkAoIykgJElkOiBza2dlaW5pdC5jLHYgMS45NyAyMDAzLzEwLzAyIDE2OjQ1OjMxIHJzY2htaWR0IEV4cCAkIChDKSBNYXJ2ZWxsLiI7Ci0jZW5kaWYKLQotc3RydWN0IHNfUU9mZlRhYiB7Ci0JaW50CVJ4UU9mZjsJCS8qIFJlY2VpdmUgUXVldWUgQWRkcmVzcyBPZmZzZXQgKi8KLQlpbnQJWHNRT2ZmOwkJLyogU3luYyBUeCBRdWV1ZSBBZGRyZXNzIE9mZnNldCAqLwotCWludAlYYVFPZmY7CQkvKiBBc3luYyBUeCBRdWV1ZSBBZGRyZXNzIE9mZnNldCAqLwotfTsKLXN0YXRpYyBzdHJ1Y3Qgc19RT2ZmVGFiIFFPZmZUYWJbXSA9IHsKLQl7UV9SMSwgUV9YUzEsIFFfWEExfSwge1FfUjIsIFFfWFMyLCBRX1hBMn0KLX07Ci0KLXN0cnVjdCBzX0NvbmZpZyB7Ci0JY2hhcglTY2FuU3RyaW5nWzhdOwotCVNLX1UzMglWYWx1ZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc19Db25maWcgT2VtQ29uZmlnID0gewotCXsnTycsJ0UnLCdNJywnXycsJ0MnLCdvJywnbicsJ2YnfSwKLSNpZmRlZiBTS19PRU1fQ09ORklHCi0JT0VNX0NPTkZJR19WQUxVRSwKLSNlbHNlCi0JMCwKLSNlbmRpZgotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VQb2xsVHhEKCkgLSBFbmFibGUgLyBEaXNhYmxlIERlc2NyaXB0b3IgUG9sbGluZyBvZiBUeEQgUmluZ3MKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUVuYWJsZSBvciBkaXNhYmxlIHRoZSBkZXNjcmlwdG9yIHBvbGxpbmcgb2YgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IKLSAqCXJpbmcocykgKFR4RCkgZm9yIHBvcnQgJ1BvcnQnLgotICoJVGhlIG5ldyBjb25maWd1cmF0aW9uIGlzICpub3QqIHNhdmVkIG92ZXIgYW55IFNrR2VTdG9wUG9ydCgpIGFuZAotICoJU2tHZUluaXRQb3J0KCkgY2FsbHMuCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa0dlUG9sbFR4RCgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1TS19CT09MIFBvbGxUeEQpCS8qIFNLX1RSVUUgKGVuYWJsZSBwb2wuKSwgU0tfRkFMU0UgKGRpc2FibGUgcG9sLikgKi8KLXsKLQlTS19HRVBPUlQgKnBQcnQ7Ci0JU0tfVTMyCURXb3JkOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlEV29yZCA9IChTS19VMzIpKFBvbGxUeEQgPyBDU1JfRU5BX1BPTCA6IENTUl9ESVNfUE9MKTsKLQotCWlmIChwUHJ0LT5QWFNRU2l6ZSAhPSAwKSB7Ci0JCVNLX09VVDMyKElvQywgUV9BRERSKHBQcnQtPlBYc1FPZmYsIFFfQ1NSKSwgRFdvcmQpOwotCX0KLQkKLQlpZiAocFBydC0+UFhBUVNpemUgIT0gMCkgewotCQlTS19PVVQzMihJb0MsIFFfQUREUihwUHJ0LT5QWGFRT2ZmLCBRX0NTUiksIERXb3JkKTsKLQl9Ci19CS8qIFNrR2VQb2xsVHhEICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VZZWxsb3dMRUQoKSAtIFN3aXRjaCB0aGUgeWVsbG93IExFRCBvbiBvciBvZmYuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglTd2l0Y2ggdGhlIHllbGxvdyBMRUQgb24gb3Igb2ZmLgotICoKLSAqIE5vdGU6Ci0gKglUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYW55IHRpbWUgYWZ0ZXIgU2tHZUluaXQoTGV2ZWwgMSkuCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa0dlWWVsbG93TEVEKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJU3RhdGUpCQkvKiB5ZWxsb3cgTEVEIHN0YXRlLCAwID0gT0ZGLCAwICE9IE9OICovCi17Ci0JaWYgKFN0YXRlID09IDApIHsKLQkJLyogU3dpdGNoIHllbGxvdyBMRUQgT0ZGICovCi0JCVNLX09VVDgoSW9DLCBCMF9MRUQsIExFRF9TVEFUX09GRik7Ci0JfQotCWVsc2UgewotCQkvKiBTd2l0Y2ggeWVsbG93IExFRCBPTiAqLwotCQlTS19PVVQ4KElvQywgQjBfTEVELCBMRURfU1RBVF9PTik7Ci0JfQotfQkvKiBTa0dlWWVsbG93TEVEICovCi0KLQotI2lmICghZGVmaW5lZChTS19TTElNKSB8fCBkZWZpbmVkKEdFTkVTSVMpKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VYbWl0TEVEKCkgLSBNb2RpZnkgdGhlIE9wZXJhdGlvbmFsIE1vZGUgb2YgYSB0cmFuc21pc3Npb24gTEVELgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhlIFJ4IG9yIFR4IExFRCB3aGljaCBpcyBzcGVjaWZpZWQgYnkgJ0xlZCcgd2lsbCBiZQotICoJZW5hYmxlZCwgZGlzYWJsZWQgb3Igc3dpdGNoZWQgb24gaW4gdGVzdCBtb2RlLgotICoKLSAqIE5vdGU6Ci0gKgknTGVkJyBtdXN0IGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBMRURzIElOSSByZWdpc3Rlci4KLSAqCi0gKiBVc2FnZToKLSAqCVNrR2VYbWl0TEVEKHBBQywgSW9DLCBNUl9BRERSKFBvcnQsIFRYX0xFRF9JTkkpLCBTS19MRURfRU5BKTsKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrR2VYbWl0TEVEKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJTGVkLAkJLyogb2Zmc2V0IHRvIHRoZSBMRUQgSW5pdCBWYWx1ZSByZWdpc3RlciAqLwotaW50CQlNb2RlKQkJLyogTW9kZSBtYXkgYmUgU0tfTEVEX0RJUywgU0tfTEVEX0VOQSwgU0tfTEVEX1RTVCAqLwotewotCVNLX1UzMglMZWRJbmk7Ci0KLQlzd2l0Y2ggKE1vZGUpIHsKLQljYXNlIFNLX0xFRF9FTkE6Ci0JCUxlZEluaSA9IFNLX1hNSVRfRFVSICogKFNLX1UzMilwQUMtPkdJbmkuR0lIc3RDbGtGYWN0IC8gMTAwOwotCQlTS19PVVQzMihJb0MsIExlZCArIFhNSVRfTEVEX0lOSSwgTGVkSW5pKTsKLQkJU0tfT1VUOChJb0MsIExlZCArIFhNSVRfTEVEX0NUUkwsIExFRF9TVEFSVCk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfTEVEX1RTVDoKLQkJU0tfT1VUOChJb0MsIExlZCArIFhNSVRfTEVEX1RTVCwgTEVEX1RfT04pOwotCQlTS19PVVQzMihJb0MsIExlZCArIFhNSVRfTEVEX0NOVCwgMTAwKTsKLQkJU0tfT1VUOChJb0MsIExlZCArIFhNSVRfTEVEX0NUUkwsIExFRF9TVEFSVCk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfTEVEX0RJUzoKLQlkZWZhdWx0OgotCQkvKgotCQkgKiBEbyBOT1Qgc3RvcCB0aGUgTEVEIFRpbWVyIGhlcmUuIFRoZSBMRUQgbWlnaHQgYmUKLQkJICogaW4gb24gc3RhdGUuIEJ1dCBpdCBuZWVkcyB0byBnbyBvZmYuCi0JCSAqLwotCQlTS19PVVQzMihJb0MsIExlZCArIFhNSVRfTEVEX0NOVCwgMCk7Ci0JCVNLX09VVDgoSW9DLCBMZWQgKyBYTUlUX0xFRF9UU1QsIExFRF9UX09GRik7Ci0JCWJyZWFrOwotCX0KLQkJCQotCS8qCi0JICogMTAwMEJUOiBUaGUgVHJhbnNtaXQgTEVEIGlzIGRyaXZlbiBieSB0aGUgUEhZLgotCSAqIEJ1dCB0aGUgZGVmYXVsdCBMRUQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGZvcgotCSAqIExldmVsIE9uZSBhbmQgQnJvYWRjb20gUEhZcy4KLQkgKiAoQnJvYWRjb206IEl0IG1heSBiZSB0aGF0IFBIWV9CX1BFQ19FTl9MVFIgaGFzIHRvIGJlIHNldC4pCi0JICogKEluIHRoaXMgY2FzZSBpdCBoYXMgdG8gYmUgYWRkZWQgaGVyZS4gQnV0IHdlIHdpbGwgc2VlLiBYWFgpCi0JICovCi19CS8qIFNrR2VYbWl0TEVEICovCi0jZW5kaWYJLyogIVNLX1NMSU0gfHwgR0VORVNJUyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglEb0NhbGNBZGRyKCkgLSBDYWxjdWxhdGVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzIG9mIGEgcXVldWUuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIGFkZHJlc3Mgb2YgYSBxdWV1ZS4KLSAqICBBZnRlcndhcmRzIHRoZSAnU3RhcnRWYWwnIGlzIGluY3JlbWVudGVkIHRvIHRoZSBuZXh0IHN0YXJ0IHBvc2l0aW9uLgotICoJSWYgdGhlIHBvcnQgaXMgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgY2FsY3VsYXRlZCB2YWx1ZXMKLSAqCXdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIHZhbHVlcyBhbmQgYW4KLSAqCWVycm9yIHdpbGwgYmUgcmV0dXJuZWQsIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4KLSAqCUlmIHRoZSBwb3J0IGlzIG5vdCBpbml0aWFsaXplZCB0aGUgdmFsdWVzIHdpbGwgYmUgd3JpdHRlbiB0bwotICoJKlN0YXJ0QWRyIGFuZCAqRW5kQWRkci4KLSAqCi0gKiBSZXR1cm5zOgotICoJMDoJc3VjY2VzcwotICoJMToJY29uZmlndXJhdGlvbiBlcnJvcgotICovCi1zdGF0aWMgaW50IERvQ2FsY0FkZHIoCi1TS19BQwkJKnBBQywgCQkJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfR0VQT1JUCVNLX0ZBUiAqcFBydCwJCS8qIHBvcnQgaW5kZXggKi8KLWludAkJCVF1U2l6ZSwJCQkJLyogc2l6ZSBvZiB0aGUgcXVldWUgdG8gY29uZmlndXJlIGluIGtCICovCi1TS19VMzIJCVNLX0ZBUiAqU3RhcnRWYWwsCS8qIHN0YXJ0IHZhbHVlIGZvciBhZGRyZXNzIGNhbGN1bGF0aW9uICovCi1TS19VMzIJCVNLX0ZBUiAqUXVTdGFydEFkZHIsLyogc3RhcnQgYWRkciB0byBjYWxjdWxhdGUgKi8KLVNLX1UzMgkJU0tfRkFSICpRdUVuZEFkZHIpCS8qIGVuZCBhZGRyZXNzIHRvIGNhbGN1bGF0ZSAqLwotewotCVNLX1UzMglFbmRWYWw7Ci0JU0tfVTMyCU5leHRTdGFydDsKLQlpbnQJCVJ0djsKLQotCVJ0diA9IDA7Ci0JaWYgKFF1U2l6ZSA9PSAwKSB7Ci0JCUVuZFZhbCA9ICpTdGFydFZhbDsKLQkJTmV4dFN0YXJ0ID0gRW5kVmFsOwotCX0KLQllbHNlIHsKLQkJRW5kVmFsID0gKlN0YXJ0VmFsICsgKChTS19VMzIpUXVTaXplICogMTAyNCkgLSAxOwotCQlOZXh0U3RhcnQgPSBFbmRWYWwgKyAxOwotCX0KLQotCWlmIChwUHJ0LT5QU3RhdGUgPj0gU0tfUFJUX0lOSVQpIHsKLQkJaWYgKCpTdGFydFZhbCAhPSAqUXVTdGFydEFkZHIgfHwgRW5kVmFsICE9ICpRdUVuZEFkZHIpIHsKLQkJCVJ0diA9IDE7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCSpRdVN0YXJ0QWRkciA9ICpTdGFydFZhbDsKLQkJKlF1RW5kQWRkciA9IEVuZFZhbDsKLQl9Ci0KLQkqU3RhcnRWYWwgPSBOZXh0U3RhcnQ7Ci0JcmV0dXJuKFJ0dik7Ci19CS8qIERvQ2FsY0FkZHIgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VJbml0QXNzaWduUmFtVG9RdWV1ZXMoKSAtIGFsbG9jYXRlIGRlZmF1bHQgcXVldWUgc2l6ZXMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gYXNzaWducyB0aGUgbWVtb3J5IHRvIHRoZSBkaWZmZXJlbnQgcXVldWVzIGFuZCBwb3J0cy4KLSAqCVdoZW4gRHVhbE5ldCBpcyBzZXQgdG8gU0tfVFJVRSBhbGwgcG9ydHMgZ2V0IHRoZSBzYW1lIGFtb3VudCBvZiBtZW1vcnkuCi0gKiAgT3RoZXJ3aXNlIHRoZSBmaXJzdCBwb3J0IGdldHMgbW9zdCBvZiB0aGUgbWVtb3J5IGFuZCBhbGwgdGhlCi0gKglvdGhlciBwb3J0cyBqdXN0IHRoZSByZXF1aXJlZCBtaW5pbXVtLgotICoJVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiBwQUMtPkdJbmkuR0lSYW1TaXplIGFuZAotICoJcEFDLT5HSW5pLkdJTWFjc0ZvdW5kIGhhdmUgYmVlbiBpbml0aWFsaXplZCwgdXN1YWxseSB0aGlzIGhhcHBlbnMKLSAqCWF0IGluaXQgbGV2ZWwgMQotICoKLSAqIFJldHVybnM6Ci0gKgkwIC0gb2sKLSAqCTEgLSBpbnZhbGlkIGlucHV0IHZhbHVlcwotICoJMiAtIG5vdCBlbm91Z2ggbWVtb3J5Ci0gKi8KLQotaW50IFNrR2VJbml0QXNzaWduUmFtVG9RdWV1ZXMoCi1TS19BQwkqcEFDLAkJCS8qIEFkYXB0ZXIgY29udGV4dCAqLwotaW50CQlBY3RpdmVQb3J0LAkJLyogQWN0aXZlIFBvcnQgaW4gUkxNVCBtb2RlICovCi1TS19CT09MCUR1YWxOZXQpCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLXsKLQlpbnQJaTsKLQlpbnQJVXNlZEtpbG9ieXRlczsJCQkvKiBtZW1vcnkgYWxyZWFkeSBhc3NpZ25lZCAqLwotCWludAlBY3RpdmVQb3J0S2lsb2J5dGVzOwkvKiBtZW1vcnkgYXZhaWxhYmxlIGZvciBhY3RpdmUgcG9ydCAqLwotCVNLX0dFUE9SVCAqcEdlUG9ydDsKLQotCVVzZWRLaWxvYnl0ZXMgPSAwOwotCi0JaWYgKEFjdGl2ZVBvcnQgPj0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSU5JVCwKLQkJCSgiU2tHZUluaXRBc3NpZ25SYW1Ub1F1ZXVlczogQWN0aXZlUG9ydCAoJWQpIGludmFsaWRcbiIsCi0JCQlBY3RpdmVQb3J0KSk7Ci0JCXJldHVybigxKTsKLQl9Ci0JaWYgKCgocEFDLT5HSW5pLkdJTWFjc0ZvdW5kICogKFNLX01JTl9SWFFfU0laRSArIFNLX01JTl9UWFFfU0laRSkpICsKLQkJKChSQU1fUVVPVEFfU1lOQyA9PSAwKSA/IDAgOiBTS19NSU5fVFhRX1NJWkUpKSA+IHBBQy0+R0luaS5HSVJhbVNpemUpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9JTklULAotCQkJKCJTa0dlSW5pdEFzc2lnblJhbVRvUXVldWVzOiBOb3QgZW5vdWdoIG1lbW9yeSAoJWQpXG4iLAotCQkJIHBBQy0+R0luaS5HSVJhbVNpemUpKTsKLQkJcmV0dXJuKDIpOwotCX0KLQotCWlmIChEdWFsTmV0KSB7Ci0JCS8qIGV2ZXJ5IHBvcnQgZ2V0cyB0aGUgc2FtZSBhbW91bnQgb2YgbWVtb3J5ICovCi0JCUFjdGl2ZVBvcnRLaWxvYnl0ZXMgPSBwQUMtPkdJbmkuR0lSYW1TaXplIC8gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQotCQkJcEdlUG9ydCA9ICZwQUMtPkdJbmkuR1BbaV07Ci0JCQkKLQkJCS8qIHRha2UgYXdheSB0aGUgbWluaW11bSBtZW1vcnkgZm9yIGFjdGl2ZSBxdWV1ZXMgKi8KLQkJCUFjdGl2ZVBvcnRLaWxvYnl0ZXMgLT0gKFNLX01JTl9SWFFfU0laRSArIFNLX01JTl9UWFFfU0laRSk7Ci0KLQkJCS8qIHJlY2VpdmUgcXVldWUgZ2V0cyB0aGUgbWluaW11bSArIDgwJSBvZiB0aGUgcmVzdCAqLwotCQkJcEdlUG9ydC0+UFJ4UVNpemUgPSAoaW50KSAoUk9VTkRfUVVFVUVfU0laRV9LQigoCi0JCQkJQWN0aXZlUG9ydEtpbG9ieXRlcyAqICh1bnNpZ25lZCBsb25nKSBSQU1fUVVPVEFfUlgpIC8gMTAwKSkKLQkJCQkrIFNLX01JTl9SWFFfU0laRTsKLQotCQkJQWN0aXZlUG9ydEtpbG9ieXRlcyAtPSAocEdlUG9ydC0+UFJ4UVNpemUgLSBTS19NSU5fUlhRX1NJWkUpOwotCi0JCQkvKiBzeW5jaHJvbm91cyB0cmFuc21pdCBxdWV1ZSAqLwotCQkJcEdlUG9ydC0+UFhTUVNpemUgPSAwOwotCi0JCQkvKiBhc3luY2hyb25vdXMgdHJhbnNtaXQgcXVldWUgKi8KLQkJCXBHZVBvcnQtPlBYQVFTaXplID0gKGludCkgUk9VTkRfUVVFVUVfU0laRV9LQihBY3RpdmVQb3J0S2lsb2J5dGVzICsKLQkJCQlTS19NSU5fVFhRX1NJWkUpOwotCQl9Ci0JfQotCWVsc2UgewkKLQkJLyogUmxtdCBNb2RlIG9yIHNpbmdsZSBsaW5rIGFkYXB0ZXIgKi8KLQotCQkvKiBTZXQgc3RhbmRieSBxdWV1ZSBzaXplIGRlZmF1bHRzIGZvciBhbGwgc3RhbmRieSBwb3J0cyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQotCQkJaWYgKGkgIT0gQWN0aXZlUG9ydCkgewotCQkJCXBHZVBvcnQgPSAmcEFDLT5HSW5pLkdQW2ldOwotCi0JCQkJcEdlUG9ydC0+UFJ4UVNpemUgPSBTS19NSU5fUlhRX1NJWkU7Ci0JCQkJcEdlUG9ydC0+UFhBUVNpemUgPSBTS19NSU5fVFhRX1NJWkU7Ci0JCQkJcEdlUG9ydC0+UFhTUVNpemUgPSAwOwotCi0JCQkJLyogQ291bnQgdXNlZCBSQU0gKi8KLQkJCQlVc2VkS2lsb2J5dGVzICs9IHBHZVBvcnQtPlBSeFFTaXplICsgcEdlUG9ydC0+UFhBUVNpemU7Ci0JCQl9Ci0JCX0KLQkJLyogd2hhdCdzIGxlZnQ/ICovCi0JCUFjdGl2ZVBvcnRLaWxvYnl0ZXMgPSBwQUMtPkdJbmkuR0lSYW1TaXplIC0gVXNlZEtpbG9ieXRlczsKLQotCQkvKiBhc3NpZ24gaXQgdG8gdGhlIGFjdGl2ZSBwb3J0ICovCi0JCS8qIGZpcnN0IHRha2UgYXdheSB0aGUgbWluaW11bSBtZW1vcnkgKi8KLQkJQWN0aXZlUG9ydEtpbG9ieXRlcyAtPSAoU0tfTUlOX1JYUV9TSVpFICsgU0tfTUlOX1RYUV9TSVpFKTsKLQkJcEdlUG9ydCA9ICZwQUMtPkdJbmkuR1BbQWN0aXZlUG9ydF07Ci0KLQkJLyogcmVjZWl2ZSBxdWV1ZSBnZXQncyB0aGUgbWluaW11bSArIDgwJSBvZiB0aGUgcmVzdCAqLwotCQlwR2VQb3J0LT5QUnhRU2l6ZSA9IChpbnQpIChST1VORF9RVUVVRV9TSVpFX0tCKChBY3RpdmVQb3J0S2lsb2J5dGVzICoKLQkJCSh1bnNpZ25lZCBsb25nKSBSQU1fUVVPVEFfUlgpIC8gMTAwKSkgKyBTS19NSU5fUlhRX1NJWkU7Ci0KLQkJQWN0aXZlUG9ydEtpbG9ieXRlcyAtPSAocEdlUG9ydC0+UFJ4UVNpemUgLSBTS19NSU5fUlhRX1NJWkUpOwotCi0JCS8qIHN5bmNocm9ub3VzIHRyYW5zbWl0IHF1ZXVlICovCi0JCXBHZVBvcnQtPlBYU1FTaXplID0gMDsKLQotCQkvKiBhc3luY2hyb25vdXMgdHJhbnNtaXQgcXVldWUgKi8KLQkJcEdlUG9ydC0+UFhBUVNpemUgPSAoaW50KSBST1VORF9RVUVVRV9TSVpFX0tCKEFjdGl2ZVBvcnRLaWxvYnl0ZXMpICsKLQkJCVNLX01JTl9UWFFfU0laRTsKLQl9Ci0jaWZkZWYgVkNQVQotCVZDUFVwcmludGYoMCwgIlBSeFFTaXplPSV1LCBQWFNRU2l6ZT0ldSwgUFhBUVNpemU9JXVcbiIsCi0JCXBHZVBvcnQtPlBSeFFTaXplLCBwR2VQb3J0LT5QWFNRU2l6ZSwgcEdlUG9ydC0+UFhBUVNpemUpOwotI2VuZGlmIC8qIFZDUFUgKi8KLQotCXJldHVybigwKTsKLX0JLyogU2tHZUluaXRBc3NpZ25SYW1Ub1F1ZXVlcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHZUNoZWNrUVNpemUoKSAtIENoZWNrcyB0aGUgQWRhcHRlcnMgUXVldWUgU2l6ZSBDb25maWd1cmF0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBRdWV1ZSBTaXplIENvbmZpZ3VyYXRpb24gc3BlY2lmaWVkCi0gKglpbiB0aGUgdmFyaWFibGVzIFBSeFFTaXplLCBQWFNRU2l6ZSwgYW5kIFBYQVFTaXplIG9mIGFsbAotICoJdXNlZCBwb3J0cy4KLSAqCVRoaXMgcmVxdWlyZW1lbnRzIG11c3QgYmUgZnVsbGZpbGxlZCB0byBoYXZlIGEgdmFsaWQgY29uZmlndXJhdGlvbjoKLSAqCQktIFRoZSBzaXplIG9mIGFsbCBxdWV1ZXMgbXVzdCBub3QgZXhjZWVkIEdJUmFtU2l6ZS4KLSAqCQktIFRoZSBxdWV1ZSBzaXplcyBtdXN0IGJlIHNwZWNpZmllZCBpbiB1bml0cyBvZiA4IGtCLgotICoJCS0gVGhlIHNpemUgb2YgUnggcXVldWVzIG9mIGF2YWlsYWJsZSBwb3J0cyBtdXN0IG5vdCBiZQotICoJCSAgc21hbGxlciB0aGFuIDE2IGtCLgotICoJCS0gVGhlIHNpemUgb2YgYXQgbGVhc3Qgb25lIFR4IHF1ZXVlIChzeW5jaC4gb3IgYXN5bmNoLikKLSAqICAgICAgICBvZiBhdmFpbGFibGUgcG9ydHMgbXVzdCBub3QgYmUgc21hbGxlciB0aGFuIDE2IGtCCi0gKiAgICAgICAgd2hlbiBKdW1ibyBGcmFtZXMgYXJlIHVzZWQuCi0gKgkJLSBUaGUgUkFNIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIG11c3Qgbm90IGJlIGNoYW5nZWQKLSAqCQkgIGZvciBwb3J0cyB3aGljaCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC4KLSAqCUZ1cnRoZXJtb3JlIFNrR2VDaGVja1FTaXplKCkgZGVmaW5lcyB0aGUgU3RhcnQgYW5kIEVuZCBBZGRyZXNzZXMKLSAqICBvZiBhbGwgcG9ydHMgYW5kIHN0b3JlcyB0aGVtIGludG8gdGhlIEhXQUMgcG9ydAlzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuczoKLSAqCTA6CVF1ZXVlIFNpemUgQ29uZmlndXJhdGlvbiB2YWxpZAotICoJMToJUXVldWUgU2l6ZSBDb25maWd1cmF0aW9uIGludmFsaWQKLSAqLwotc3RhdGljIGludCBTa0dlQ2hlY2tRU2l6ZSgKLVNLX0FDCSAqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1pbnQJCSBQb3J0KQkJLyogcG9ydCBpbmRleCAqLwotewotCVNLX0dFUE9SVCAqcFBydDsKLQlpbnQJaTsKLQlpbnQJUnR2OwotCWludAlSdHYyOwotCVNLX1UzMglTdGFydEFkZHI7Ci0jaWZuZGVmIFNLX1NMSU0KLQlpbnQJVXNlZE1lbTsJLyogdG90YWwgbWVtb3J5IHVzZWQgKG1heC4gZm91bmQgcG9ydHMpICovCi0jZW5kaWYJCi0KLQlSdHYgPSAwOwotCQotI2lmbmRlZiBTS19TTElNCi0KLQlVc2VkTWVtID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJcFBydCA9ICZwQUMtPkdJbmkuR1BbaV07Ci0KLQkJaWYgKChwUHJ0LT5QUnhRU2l6ZSAmIFFaX1VOSVRTKSAhPSAwIHx8Ci0JCQkocFBydC0+UFhTUVNpemUgJiBRWl9VTklUUykgIT0gMCB8fAotCQkJKHBQcnQtPlBYQVFTaXplICYgUVpfVU5JVFMpICE9IDApIHsKLQotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAxMiwgU0tFUlJfSFdJX0UwMTJNU0cpOwotCQkJcmV0dXJuKDEpOwotCQl9Ci0KLQkJaWYgKGkgPT0gUG9ydCAmJiBwUHJ0LT5QUnhRU2l6ZSA8IFNLX01JTl9SWFFfU0laRSkgewotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAxMSwgU0tFUlJfSFdJX0UwMTFNU0cpOwotCQkJcmV0dXJuKDEpOwotCQl9Ci0JCQotCQkvKgotCQkgKiB0aGUgc2l6ZSBvZiBhdCBsZWFzdCBvbmUgVHggcXVldWUgKHN5bmNoLiBvciBhc3luY2guKSBoYXMgdG8gYmUgPiAwLgotCQkgKiBpZiBKdW1ibyBGcmFtZXMgYXJlIHVzZWQsIHRoaXMgc2l6ZSBoYXMgdG8gYmUgPj0gMTYga0IuCi0JCSAqLwotCQlpZiAoKGkgPT0gUG9ydCAmJiBwUHJ0LT5QWFNRU2l6ZSA9PSAwICYmIHBQcnQtPlBYQVFTaXplID09IDApIHx8Ci0JCQkocEFDLT5HSW5pLkdJUG9ydFVzYWdlID09IFNLX0pVTUJPX0xJTksgJiYKLSAgICAgICAgICAgICgocFBydC0+UFhTUVNpemUgPiAwICYmIHBQcnQtPlBYU1FTaXplIDwgU0tfTUlOX1RYUV9TSVpFKSB8fAotCQkJIChwUHJ0LT5QWEFRU2l6ZSA+IDAgJiYgcFBydC0+UFhBUVNpemUgPCBTS19NSU5fVFhRX1NJWkUpKSkpIHsKLQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX0hXSV9FMDIzLCBTS0VSUl9IV0lfRTAyM01TRyk7Ci0JCQkJcmV0dXJuKDEpOwotCQl9Ci0JCQotCQlVc2VkTWVtICs9IHBQcnQtPlBSeFFTaXplICsgcFBydC0+UFhTUVNpemUgKyBwUHJ0LT5QWEFRU2l6ZTsKLQl9Ci0JCi0JaWYgKFVzZWRNZW0gPiBwQUMtPkdJbmkuR0lSYW1TaXplKSB7Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfSFdJX0UwMTIsIFNLRVJSX0hXSV9FMDEyTVNHKTsKLQkJcmV0dXJuKDEpOwotCX0KLSNlbmRpZgkvKiAhU0tfU0xJTSAqLwotCi0JLyogTm93IHN0YXJ0IGFkZHJlc3MgY2FsY3VsYXRpb24gKi8KLQlTdGFydEFkZHIgPSBwQUMtPkdJbmkuR0lSYW1PZmZzOwotCWZvciAoaSA9IDA7IGkgPCBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtpXTsKLQotCQkvKiBDYWxjdWxhdGUvQ2hlY2sgdmFsdWVzIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSAqLwotCQlSdHYyID0gRG9DYWxjQWRkcihwQUMsIHBQcnQsIHBQcnQtPlBSeFFTaXplLCAmU3RhcnRBZGRyLAotCQkJJnBQcnQtPlBSeFFSYW1TdGFydCwgJnBQcnQtPlBSeFFSYW1FbmQpOwotCQlSdHYgfD0gUnR2MjsKLQotCQkvKiBDYWxjdWxhdGUvQ2hlY2sgdmFsdWVzIGZvciB0aGUgc3luY2hyb25vdXMgVHggcXVldWUgKi8KLQkJUnR2MiA9IERvQ2FsY0FkZHIocEFDLCBwUHJ0LCBwUHJ0LT5QWFNRU2l6ZSwgJlN0YXJ0QWRkciwKLQkJCSZwUHJ0LT5QWHNRUmFtU3RhcnQsICZwUHJ0LT5QWHNRUmFtRW5kKTsKLQkJUnR2IHw9IFJ0djI7Ci0KLQkJLyogQ2FsY3VsYXRlL0NoZWNrIHZhbHVlcyBmb3IgdGhlIGFzeW5jaHJvbm91cyBUeCBxdWV1ZSAqLwotCQlSdHYyID0gRG9DYWxjQWRkcihwQUMsIHBQcnQsIHBQcnQtPlBYQVFTaXplLCAmU3RhcnRBZGRyLAotCQkJJnBQcnQtPlBYYVFSYW1TdGFydCwgJnBQcnQtPlBYYVFSYW1FbmQpOwotCQlSdHYgfD0gUnR2MjsKLQotCQlpZiAoUnR2KSB7Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX0hXSV9FMDEzLCBTS0VSUl9IV0lfRTAxM01TRyk7Ci0JCQlyZXR1cm4oMSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4oMCk7Ci19CS8qIFNrR2VDaGVja1FTaXplICovCi0KLQotI2lmZGVmIEdFTkVTSVMKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlSW5pdE1hY0FyYigpIC0gSW5pdGlhbGl6ZSB0aGUgTUFDIEFyYml0ZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIE1BQyBBcmJpdGVyLgotICoJSXQgbXVzdCBub3QgYmUgY2FsbGVkIGlmIHRoZXJlIGlzIHN0aWxsIGFuCi0gKglpbml0aWFsaXplZCBvciBhY3RpdmUgcG9ydC4KLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi1zdGF0aWMgdm9pZCBTa0dlSW5pdE1hY0FyYigKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MpCQkvKiBJTyBjb250ZXh0ICovCi17Ci0JLyogcmVsZWFzZSBsb2NhbCByZXNldCAqLwotCVNLX09VVDE2KElvQywgQjNfTUFfVE9fQ1RSTCwgTUFfUlNUX0NMUik7Ci0KLQkvKiBjb25maWd1cmUgdGltZW91dCB2YWx1ZXMgKi8KLQlTS19PVVQ4KElvQywgQjNfTUFfVE9JTklfUlgxLCBTS19NQUNfVE9fNTMpOwotCVNLX09VVDgoSW9DLCBCM19NQV9UT0lOSV9SWDIsIFNLX01BQ19UT181Myk7Ci0JU0tfT1VUOChJb0MsIEIzX01BX1RPSU5JX1RYMSwgU0tfTUFDX1RPXzUzKTsKLQlTS19PVVQ4KElvQywgQjNfTUFfVE9JTklfVFgyLCBTS19NQUNfVE9fNTMpOwotCi0JU0tfT1VUOChJb0MsIEIzX01BX1JDSU5JX1JYMSwgMCk7Ci0JU0tfT1VUOChJb0MsIEIzX01BX1JDSU5JX1JYMiwgMCk7Ci0JU0tfT1VUOChJb0MsIEIzX01BX1JDSU5JX1RYMSwgMCk7Ci0JU0tfT1VUOChJb0MsIEIzX01BX1JDSU5JX1RYMiwgMCk7Ci0KLQkvKiByZWNvdmVyeSB2YWx1ZXMgYXJlIG5lZWRlZCBmb3IgWE1BQyBJSSBSZXYuIEIyIG9ubHkgKi8KLQkvKiBGYXN0IE91dHB1dCBFbmFibGUgTW9kZSB3YXMgaW50ZW5kZWQgdG8gdXNlIHdpdGggUmV2LiBCMiwgYnV0IG5vdz8gKi8KLQotCS8qCi0JICogVGhlcmUgaXMgbm8gc3RhcnQgb3IgZW5hYmxlIGJ1dHRvbiB0byBwdXNoLCB0aGVyZWZvcmUKLQkgKiB0aGUgTUFDIGFyYml0ZXIgaXMgY29uZmlndXJlZCBhbmQgZW5hYmxlZCBub3cuCi0JICovCi19CS8qIFNrR2VJbml0TWFjQXJiICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VJbml0UGt0QXJiKCkgLSBJbml0aWFsaXplIHRoZSBQYWNrZXQgQXJiaXRlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgUGFja2V0IEFyYml0ZXIuCi0gKglJdCBtdXN0IG5vdCBiZSBjYWxsZWQgaWYgdGhlcmUgaXMgc3RpbGwgYW4KLSAqCWluaXRpYWxpemVkIG9yIGFjdGl2ZSBwb3J0LgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrR2VJbml0UGt0QXJiKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQykJCS8qIElPIGNvbnRleHQgKi8KLXsKLQkvKiByZWxlYXNlIGxvY2FsIHJlc2V0ICovCi0JU0tfT1VUMTYoSW9DLCBCM19QQV9DVFJMLCBQQV9SU1RfQ0xSKTsKLQotCS8qIGNvbmZpZ3VyZSB0aW1lb3V0IHZhbHVlcyAqLwotCVNLX09VVDE2KElvQywgQjNfUEFfVE9JTklfUlgxLCBTS19QS1RfVE9fTUFYKTsKLQlTS19PVVQxNihJb0MsIEIzX1BBX1RPSU5JX1JYMiwgU0tfUEtUX1RPX01BWCk7Ci0JU0tfT1VUMTYoSW9DLCBCM19QQV9UT0lOSV9UWDEsIFNLX1BLVF9UT19NQVgpOwotCVNLX09VVDE2KElvQywgQjNfUEFfVE9JTklfVFgyLCBTS19QS1RfVE9fTUFYKTsKLQotCS8qCi0JICogZW5hYmxlIHRpbWVvdXQgdGltZXJzIGlmIGp1bWJvIGZyYW1lcyBub3QgdXNlZAotCSAqIE5PVEU6IHRoZSBwYWNrZXQgYXJiaXRlciB0aW1lb3V0IGludGVycnVwdCBpcyBuZWVkZWQgZm9yCi0JICogaGFsZiBkdXBsZXggaGFuZ3VwIHdvcmthcm91bmQKLQkgKi8KLQlpZiAocEFDLT5HSW5pLkdJUG9ydFVzYWdlICE9IFNLX0pVTUJPX0xJTkspIHsKLQkJaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAxKSB7Ci0JCQlTS19PVVQxNihJb0MsIEIzX1BBX0NUUkwsIFBBX0VOQV9UT19UWDEpOwotCQl9Ci0JCWVsc2UgewotCQkJU0tfT1VUMTYoSW9DLCBCM19QQV9DVFJMLCBQQV9FTkFfVE9fVFgxIHwgUEFfRU5BX1RPX1RYMik7Ci0JCX0KLQl9Ci19CS8qIFNrR2VJbml0UGt0QXJiICovCi0jZW5kaWYgLyogR0VORVNJUyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlSW5pdE1hY0ZpZm8oKSAtIEluaXRpYWxpemUgdGhlIE1BQyBGSUZPcwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJSW5pdGlhbGl6ZSBhbGwgTUFDIEZJRk9zIG9mIHRoZSBzcGVjaWZpZWQgcG9ydAotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrR2VJbml0TWFjRmlmbygKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfVTE2CVdvcmQ7Ci0jaWZkZWYgVkNQVQotCVNLX1UzMglEV29yZDsKLSNlbmRpZiAvKiBWQ1BVICovCi0JLyoKLQkgKiBGb3IgZWFjaCBGSUZPOgotCSAqCS0gcmVsZWFzZSBsb2NhbCByZXNldAotCSAqCS0gdXNlIGRlZmF1bHQgdmFsdWUgZm9yIE1BQyBGSUZPIHNpemUKLQkgKgktIHNldHVwIGRlZmF1bHRzIGZvciB0aGUgY29udHJvbCByZWdpc3RlcgotCSAqCS0gZW5hYmxlIHRoZSBGSUZPCi0JICovCi0JCi0jaWZkZWYgR0VORVNJUwotCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCS8qIENvbmZpZ3VyZSBSeCBNQUMgRklGTyAqLwotCQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBSWF9NRkZfQ1RSTDIpLCBNRkZfUlNUX0NMUik7Ci0JCVNLX09VVDE2KElvQywgTVJfQUREUihQb3J0LCBSWF9NRkZfQ1RSTDEpLCBNRkZfUlhfQ1RSTF9ERUYpOwotCQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBSWF9NRkZfQ1RSTDIpLCBNRkZfRU5BX09QX01EKTsKLQkKLQkJLyogQ29uZmlndXJlIFR4IE1BQyBGSUZPICovCi0JCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFRYX01GRl9DVFJMMiksIE1GRl9SU1RfQ0xSKTsKLQkJU0tfT1VUMTYoSW9DLCBNUl9BRERSKFBvcnQsIFRYX01GRl9DVFJMMSksIE1GRl9UWF9DVFJMX0RFRik7Ci0JCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFRYX01GRl9DVFJMMiksIE1GRl9FTkFfT1BfTUQpOwotCQotCQkvKiBFbmFibGUgZnJhbWUgZmx1c2hpbmcgaWYganVtYm8gZnJhbWVzIHVzZWQgKi8KLQkJaWYgKHBBQy0+R0luaS5HSVBvcnRVc2FnZSA9PSBTS19KVU1CT19MSU5LKSB7Ci0JCQlTS19PVVQxNihJb0MsIE1SX0FERFIoUG9ydCwgUlhfTUZGX0NUUkwxKSwgTUZGX0VOQV9GTFVTSCk7Ci0JCX0KLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCS8qIHNldCBSeCBHTUFDIEZJRk8gRmx1c2ggTWFzayAqLwotCQlTS19PVVQxNihJb0MsIE1SX0FERFIoUG9ydCwgUlhfR01GX0ZMX01TSyksIChTS19VMTYpUlhfRkZfRkxfREVGX01TSyk7Ci0JCQotCQlXb3JkID0gKFNLX1UxNilHTUZfUlhfQ1RSTF9ERUY7Ci0KLQkJLyogZGlzYWJsZSBSeCBHTUFDIEZJRk8gRmx1c2ggZm9yIFlVS09OLUxpdGUgUmV2LiBBMCBvbmx5ICovCi0JCWlmIChwQUMtPkdJbmkuR0lZdWtvbkxpdGUgJiYgcEFDLT5HSW5pLkdJQ2hpcElkID09IENISVBfSURfWVVLT04pIHsKLQotCQkJV29yZCAmPSB+R01GX1JYX0ZfRkxfT047Ci0JCX0KLQkJCi0JCS8qIENvbmZpZ3VyZSBSeCBNQUMgRklGTyAqLwotCQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBSWF9HTUZfQ1RSTF9UKSwgKFNLX1U4KUdNRl9SU1RfQ0xSKTsKLQkJU0tfT1VUMTYoSW9DLCBNUl9BRERSKFBvcnQsIFJYX0dNRl9DVFJMX1QpLCBXb3JkKTsKLQkJCi0JCS8qIHNldCBSeCBHTUFDIEZJRk8gRmx1c2ggVGhyZXNob2xkIChkZWZhdWx0OiAweDBhIC0+IDU2IGJ5dGVzKSAqLwotCQlTS19PVVQxNihJb0MsIE1SX0FERFIoUG9ydCwgUlhfR01GX0ZMX1RIUiksIFJYX0dNRl9GTF9USFJfREVGKTsKLQkJCi0JCS8qIENvbmZpZ3VyZSBUeCBNQUMgRklGTyAqLwotCQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBUWF9HTUZfQ1RSTF9UKSwgKFNLX1U4KUdNRl9SU1RfQ0xSKTsKLQkJU0tfT1VUMTYoSW9DLCBNUl9BRERSKFBvcnQsIFRYX0dNRl9DVFJMX1QpLCAoU0tfVTE2KUdNRl9UWF9DVFJMX0RFRik7Ci0JCQotI2lmZGVmIFZDUFUKLQkJU0tfSU4zMihJb0MsIE1SX0FERFIoUG9ydCwgUlhfR01GX0FGX1RIUiksICZEV29yZCk7Ci0JCVNLX0lOMzIoSW9DLCBNUl9BRERSKFBvcnQsIFRYX0dNRl9BRV9USFIpLCAmRFdvcmQpOwotI2VuZGlmIC8qIFZDUFUgKi8KLQkJCi0JCS8qIHNldCBUeCBHTUFDIEZJRk8gQWxtb3N0IEVtcHR5IFRocmVzaG9sZCAqLwotLyoJCVNLX09VVDMyKElvQywgTVJfQUREUihQb3J0LCBUWF9HTUZfQUVfVEhSKSwgMCk7ICovCi0JfQotI2VuZGlmIC8qIFlVS09OICovCi0KLX0JLyogU2tHZUluaXRNYWNGaWZvICovCi0KLSNpZmRlZglTS19MTktfU1lOQ19DTlQKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlTG9hZExua1N5bmNDbnQoKSAtIExvYWQgdGhlIExpbmsgU3luYyBDb3VudGVyIGFuZCBzdGFydHMgY291bnRpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSBMaW5rIFN5bmMgQ291bnRlciBvZiB0aGUgc3BlY2lmaWVkCi0gKglwb3J0IGFuZCBlbmFibGVzIHRoZSBnZW5lcmF0aW9uIG9mIGFuIExpbmsgU3luYyBJUlEuCi0gKglUaGUgTGluayBTeW5jIENvdW50ZXIgbWF5IGJlIHVzZWQgdG8gZGV0ZWN0IGFuIGFjdGl2ZSBsaW5rLAotICoJaWYgYXV0b25lZ290aWF0aW9uIGlzIG5vdCB1c2VkLgotICoKLSAqIE5vdGU6Ci0gKglvIFRvIGVuc3VyZSByZWNlaXZpbmcgdGhlIExpbmsgU3luYyBFdmVudCB0aGUgTGlua1N5bmNDb3VudGVyCi0gKgkgIHNob3VsZCBiZSBpbml0aWFsaXplZCBCRUZPUkUgY2xlYXJpbmcgdGhlIFhNQUMncyByZXNldCEKLSAqCW8gRW5hYmxlIElTX0xOS19TWU5DX00xIGFuZCBJU19MTktfU1lOQ19NMiBhZnRlciBjYWxsaW5nIHRoaXMKLSAqCSAgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa0dlTG9hZExua1N5bmNDbnQoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfVTMyCUNudFZhbCkJCS8qIENvdW50ZXIgdmFsdWUgKi8KLXsKLQlTS19VMzIJT3JnSU1zazsKLQlTS19VMzIJTmV3SU1zazsKLQlTS19VMzIJSVNyYzsKLQlTS19CT09MCUlycVBlbmQ7Ci0KLQkvKiBzdG9wIGNvdW50ZXIgKi8KLQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBMTktfU1lOQ19DVFJMKSwgTEVEX1NUT1ApOwotCi0JLyoKLQkgKiBBU0lDIHByb2JsZW06Ci0JICogRWFjaCB0aW1lIHN0YXJ0aW5nIHRoZSBMaW5rIFN5bmMgQ291bnRlciBhbiBJUlEgaXMgZ2VuZXJhdGVkCi0JICogYnkgdGhlIGFkYXB0ZXIuIFNlZSBwcm9ibGVtIHJlcG9ydCBlbnRyeSBmcm9tIDIxLjA3Ljk4Ci0JICoKLQkgKiBXb3JrYXJvdW5kOglEaXNhYmxlIExpbmsgU3luYyBJUlEgYW5kIGNsZWFyIHRoZSB1bmV4cGVjZWQgSVJRCi0JICoJCWlmIG5vIElSUSBpcyBhbHJlYWR5IHBlbmRpbmcuCi0JICovCi0JSXJxUGVuZCA9IFNLX0ZBTFNFOwotCVNLX0lOMzIoSW9DLCBCMF9JU1JDLCAmSVNyYyk7Ci0JU0tfSU4zMihJb0MsIEIwX0lNU0ssICZPcmdJTXNrKTsKLQlpZiAoUG9ydCA9PSBNQUNfMSkgewotCQlOZXdJTXNrID0gT3JnSU1zayAmIH5JU19MTktfU1lOQ19NMTsKLQkJaWYgKChJU3JjICYgSVNfTE5LX1NZTkNfTTEpICE9IDApIHsKLQkJCUlycVBlbmQgPSBTS19UUlVFOwotCQl9Ci0JfQotCWVsc2UgewotCQlOZXdJTXNrID0gT3JnSU1zayAmIH5JU19MTktfU1lOQ19NMjsKLQkJaWYgKChJU3JjICYgSVNfTE5LX1NZTkNfTTIpICE9IDApIHsKLQkJCUlycVBlbmQgPSBTS19UUlVFOwotCQl9Ci0JfQotCWlmICghSXJxUGVuZCkgewotCQlTS19PVVQzMihJb0MsIEIwX0lNU0ssIE5ld0lNc2spOwotCX0KLQotCS8qIGxvYWQgY291bnRlciAqLwotCVNLX09VVDMyKElvQywgTVJfQUREUihQb3J0LCBMTktfU1lOQ19JTkkpLCBDbnRWYWwpOwotCi0JLyogc3RhcnQgY291bnRlciAqLwotCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIExOS19TWU5DX0NUUkwpLCBMRURfU1RBUlQpOwotCi0JaWYgKCFJcnFQZW5kKSB7Ci0JCS8qIGNsZWFyIHRoZSB1bmV4cGVjdGVkIElSUSwgYW5kIHJlc3RvcmUgdGhlIGludGVycnVwdCBtYXNrICovCi0JCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIExOS19TWU5DX0NUUkwpLCBMRURfQ0xSX0lSUSk7Ci0JCVNLX09VVDMyKElvQywgQjBfSU1TSywgT3JnSU1zayk7Ci0JfQotfQkvKiBTa0dlTG9hZExua1N5bmNDbnQqLwotI2VuZGlmCS8qIFNLX0xOS19TWU5DX0NOVCAqLwotCi0jaWYgZGVmaW5lZChTS19ESUFHKSB8fCBkZWZpbmVkKFNLX0NGR19TWU5DKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VDZmdTeW5jKCkgLSBDb25maWd1cmUgc3luY2hyb25vdXMgYmFuZHdpZHRoIGZvciB0aGlzIHBvcnQuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBzeW5jaHJvbm91cyBiYW5kd2lkdGgKLSAqCXRvIHRoZSBzcGVjaWZpZWQgcG9ydC4gVGhpcyBtYXkgYmUgZG9uZSBhbnkgdGltZSBhZnRlcgotICoJaW5pdGlhbGl6aW5nIHRoZSBwb3J0LiBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZXMgYXJlIE5PVCBzYXZlZAotICoJaW4gdGhlIEhXQUMgcG9ydCBzdHJ1Y3R1cmUgYW5kIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYW55Ci0gKgl0aW1lIHdoZW4gc3RvcHBpbmcgYW5kIHN0YXJ0aW5nIHRoZSBwb3J0LgotICoJQW55IHZhbHVlcyBmb3IgdGhlIHN5bmNocm9ub3VzIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBpZ25vcmVkCi0gKglpZiB0aGUgc2l6ZSBvZiB0aGUgc3luY2hyb25vdXMgcXVldWUgaXMgemVybyEKLSAqCi0gKglUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3luY2hyb25vdXMgc2VydmljZSBpcwotICoJVFhBX0VOQV9GU1lOQy4gVGhpcyBtZWFucyBpZiB0aGUgc2l6ZSBvZgotICoJdGhlIHN5bmNocm9ub3VzIHF1ZXVlIGlzIHVuZXF1YWwgemVybyBidXQgbm8gc3BlY2lmaWMKLSAqCXN5bmNocm9ub3VzIGJhbmR3aWR0aCBpcyBjb25maWd1cmVkLCB0aGUgc3luY2hyb25vdXMgcXVldWUKLSAqCXdpbGwgYWx3YXlzIGhhdmUgdGhlICd1bmxpbWl0ZWQnIHRyYW5zbWl0IHByaW9yaXR5IQotICoKLSAqCVRoaXMgbW9kZSB3aWxsIGJlIHJlc3RvcmVkIGlmIHRoZSBzeW5jaHJvbm91cyBiYW5kd2lkdGggaXMKLSAqCWRlYWxsb2NhdGVkICgnSW50VGltZScgPSAwIGFuZCAnTGltQ291bnQnID0gMCkuCi0gKgotICogUmV0dXJuczoKLSAqCTA6CXN1Y2Nlc3MKLSAqCTE6CXBhcmFtZXRlciBjb25maWd1cmF0aW9uIGVycm9yCi0gKgkyOgl0cnkgdG8gY29uZmlndXJlIHF1YWxpdHkgb2Ygc2VydmljZSBhbHRob3VnaCBubwotICoJCXN5bmNocm9ub3VzIHF1ZXVlIGlzIGNvbmZpZ3VyZWQKLSAqLwotaW50IFNrR2VDZmdTeW5jKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX1UzMglJbnRUaW1lLAkvKiBJbnRlcnZhbCBUaW1lciBWYWx1ZSBpbiB1bml0cyBvZiA4bnMgKi8KLVNLX1UzMglMaW1Db3VudCwJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIGR1cmluZyBJbnRUaW1lICovCi1pbnQJCVN5bmNNb2RlKQkvKiBTeW5jIE1vZGU6IFRYQV9FTkFfQUxMT0MgfCBUWEFfRElTX0FMTE9DIHwgMCAqLwotewotCWludCBSdHY7Ci0KLQlSdHYgPSAwOwotCi0JLyogY2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLQlpZiAoTGltQ291bnQgPiBJbnRUaW1lIHx8Ci0JCShMaW1Db3VudCA9PSAwICYmIEludFRpbWUgIT0gMCkgfHwKLQkJKExpbUNvdW50ICE9IDAgJiYgSW50VGltZSA9PSAwKSkgewotCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfSFdJX0UwMTAsIFNLRVJSX0hXSV9FMDEwTVNHKTsKLQkJcmV0dXJuKDEpOwotCX0KLQkKLQlpZiAocEFDLT5HSW5pLkdQW1BvcnRdLlBYU1FTaXplID09IDApIHsKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAwOSwgU0tFUlJfSFdJX0UwMDlNU0cpOwotCQlyZXR1cm4oMik7Ci0JfQotCQotCS8qIGNhbGN1bGF0ZSByZWdpc3RlciB2YWx1ZXMgKi8KLQlJbnRUaW1lID0gKEludFRpbWUgLyAyKSAqIHBBQy0+R0luaS5HSUhzdENsa0ZhY3QgLyAxMDA7Ci0JTGltQ291bnQgPSBMaW1Db3VudCAvIDg7Ci0JCi0JaWYgKEludFRpbWUgPiBUWEFfTUFYX1ZBTCB8fCBMaW1Db3VudCA+IFRYQV9NQVhfVkFMKSB7Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfSFdJX0UwMTAsIFNLRVJSX0hXSV9FMDEwTVNHKTsKLQkJcmV0dXJuKDEpOwotCX0KLQotCS8qCi0JICogLSBFbmFibGUgJ0ZvcmNlIFN5bmMnIHRvIGVuc3VyZSB0aGUgc3luY2hyb25vdXMgcXVldWUKLQkgKiAgIGhhcyB0aGUgcHJpb3JpdHkgd2hpbGUgY29uZmlndXJpbmcgdGhlIG5ldyB2YWx1ZXMuCi0JICogLSBBbHNvICdkaXNhYmxlIGFsbG9jJyB0byBlbnN1cmUgdGhlIHNldHRpbmdzIGNvbXBsaWVzCi0JICogICB0byB0aGUgU3luY01vZGUgcGFyYW1ldGVyLgotCSAqIC0gRGlzYWJsZSAnUmF0ZSBDb250cm9sJyB0byBjb25maWd1cmUgdGhlIG5ldyB2YWx1ZXMuCi0JICogLSB3cml0ZSBJbnRUaW1lIGFuZCBMaW1Db3VudAotCSAqIC0gc3RhcnQgJ1JhdGUgQ29udHJvbCcgYW5kIGRpc2FibGUgJ0ZvcmNlIFN5bmMnCi0JICogICBpZiBJbnRlcnZhbCBUaW1lciBvciBMaW1pdCBDb3VudGVyIG5vdCB6ZXJvLgotCSAqLwotCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFRYQV9DVFJMKSwKLQkJVFhBX0VOQV9GU1lOQyB8IFRYQV9ESVNfQUxMT0MgfCBUWEFfU1RPUF9SQyk7Ci0JCi0JU0tfT1VUMzIoSW9DLCBNUl9BRERSKFBvcnQsIFRYQV9JVElfSU5JKSwgSW50VGltZSk7Ci0JU0tfT1VUMzIoSW9DLCBNUl9BRERSKFBvcnQsIFRYQV9MSU1fSU5JKSwgTGltQ291bnQpOwotCQotCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFRYQV9DVFJMKSwKLQkJKFNLX1U4KShTeW5jTW9kZSAmIChUWEFfRU5BX0FMTE9DIHwgVFhBX0RJU19BTExPQykpKTsKLQkKLQlpZiAoSW50VGltZSAhPSAwIHx8IExpbUNvdW50ICE9IDApIHsKLQkJU0tfT1VUOChJb0MsIE1SX0FERFIoUG9ydCwgVFhBX0NUUkwpLCBUWEFfRElTX0ZTWU5DIHwgVFhBX1NUQVJUX1JDKTsKLQl9Ci0KLQlyZXR1cm4oMCk7Ci19CS8qIFNrR2VDZmdTeW5jICovCi0jZW5kaWYgLyogU0tfRElBRyB8fCBTS19DRkdfU1lOQyovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCURvSW5pdFJhbVF1ZXVlKCkgLSBJbml0aWFsaXplIHRoZSBSQU0gQnVmZmVyIEFkZHJlc3Mgb2YgYSBzaW5nbGUgUXVldWUKLSAqCi0gKiBEZXNjY3JpcHRpb246Ci0gKglJZiB0aGUgcXVldWUgaXMgdXNlZCwgZW5hYmxlIGFuZCBpbml0aWFsaXplIGl0LgotICoJTWFrZSBzdXJlIHRoZSBxdWV1ZSBpcyBzdGlsbCByZXNldCwgaWYgaXQgaXMgbm90IHVzZWQuCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgRG9Jbml0UmFtUXVldWUoCi1TS19BQwkqcEFDLAkJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVF1SW9PZmZzLAkJLyogUXVldWUgSU8gQWRkcmVzcyBPZmZzZXQgKi8KLVNLX1UzMglRdVN0YXJ0QWRkciwJLyogUXVldWUgU3RhcnQgQWRkcmVzcyAqLwotU0tfVTMyCVF1RW5kQWRkciwJCS8qIFF1ZXVlIEVuZCBBZGRyZXNzICovCi1pbnQJCVF1VHlwZSkJCQkvKiBRdWV1ZSBUeXBlIChTS19SWF9TUkFNX1F8U0tfUlhfQlJBTV9RfFNLX1RYX1JBTV9RKSAqLwotewotCVNLX1UzMglSeFVwVGhyZXNWYWw7Ci0JU0tfVTMyCVJ4TG9UaHJlc1ZhbDsKLQotCWlmIChRdVN0YXJ0QWRkciAhPSBRdUVuZEFkZHIpIHsKLQkJLyogY2FsY3VsYXRlIHRocmVzaG9sZHMsIGFzc3VtZSB3ZSBoYXZlIGEgYmlnIFJ4IHF1ZXVlICovCi0JCVJ4VXBUaHJlc1ZhbCA9IChRdUVuZEFkZHIgKyAxIC0gUXVTdGFydEFkZHIgLSBTS19SQl9VTFBQKSAvIDg7Ci0JCVJ4TG9UaHJlc1ZhbCA9IChRdUVuZEFkZHIgKyAxIC0gUXVTdGFydEFkZHIgLSBTS19SQl9MTFBQX0IpLzg7Ci0KLQkJLyogYnVpbGQgSFcgYWRkcmVzcyBmb3JtYXQgKi8KLQkJUXVTdGFydEFkZHIgPSBRdVN0YXJ0QWRkciAvIDg7Ci0JCVF1RW5kQWRkciA9IFF1RW5kQWRkciAvIDg7Ci0KLQkJLyogcmVsZWFzZSBsb2NhbCByZXNldCAqLwotCQlTS19PVVQ4KElvQywgUkJfQUREUihRdUlvT2ZmcywgUkJfQ1RSTCksIFJCX1JTVF9DTFIpOwotCi0JCS8qIGNvbmZpZ3VyZSBhZGRyZXNzZXMgKi8KLQkJU0tfT1VUMzIoSW9DLCBSQl9BRERSKFF1SW9PZmZzLCBSQl9TVEFSVCksIFF1U3RhcnRBZGRyKTsKLQkJU0tfT1VUMzIoSW9DLCBSQl9BRERSKFF1SW9PZmZzLCBSQl9FTkQpLCBRdUVuZEFkZHIpOwotCQlTS19PVVQzMihJb0MsIFJCX0FERFIoUXVJb09mZnMsIFJCX1dQKSwgUXVTdGFydEFkZHIpOwotCQlTS19PVVQzMihJb0MsIFJCX0FERFIoUXVJb09mZnMsIFJCX1JQKSwgUXVTdGFydEFkZHIpOwotCi0JCXN3aXRjaCAoUXVUeXBlKSB7Ci0JCWNhc2UgU0tfUlhfU1JBTV9ROgotCQkJLyogY29uZmlndXJlIHRocmVzaG9sZCBmb3Igc21hbGwgUnggUXVldWUgKi8KLQkJCVJ4TG9UaHJlc1ZhbCArPSAoU0tfUkJfTExQUF9CIC0gU0tfUkJfTExQUF9TKSAvIDg7Ci0KLQkJCS8qIGNvbnRpbnVlIHdpdGggU0tfUlhfQlJBTV9RICovCi0JCWNhc2UgU0tfUlhfQlJBTV9ROgotCQkJLyogd3JpdGUgdGhyZXNob2xkIGZvciBSeCBRdWV1ZSAqLwotCi0JCQlTS19PVVQzMihJb0MsIFJCX0FERFIoUXVJb09mZnMsIFJCX1JYX1VUUFApLCBSeFVwVGhyZXNWYWwpOwotCQkJU0tfT1VUMzIoSW9DLCBSQl9BRERSKFF1SW9PZmZzLCBSQl9SWF9MVFBQKSwgUnhMb1RocmVzVmFsKTsKLQotCQkJLyogdGhlIGhpZ2ggcHJpb3JpdHkgdGhyZXNob2xkIG5vdCB1c2VkICovCi0JCQlicmVhazsKLQkJY2FzZSBTS19UWF9SQU1fUToKLQkJCS8qCi0JCQkgKiBEbyBOT1QgdXNlIFN0b3JlICYgRm9yd2FyZCB1bmRlciBub3JtYWwgb3BlcmF0aW9uIGR1ZSB0bwotCQkJICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIChHRU5FU0lTIG9ubHkpLgotCQkJICogQnV0IGlmIEp1bWJvIEZyYW1lcyBhcmUgY29uZmlndXJlZCAoWE1BQyBUeCBGSUZPIGlzIG9ubHkgNCBrQikKLQkJCSAqIG9yIFlVS09OIGlzIHVzZWQgKChHTUFDIFR4IEZJRk8gaXMgb25seSAxIGtCKQotCQkJICogd2UgTkVFRCBTdG9yZSAmIEZvcndhcmQgb2YgdGhlIFJBTSBidWZmZXIuCi0JCQkgKi8KLQkJCWlmIChwQUMtPkdJbmkuR0lQb3J0VXNhZ2UgPT0gU0tfSlVNQk9fTElOSyB8fAotCQkJCXBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCQkJLyogZW5hYmxlIFN0b3JlICYgRm9yd2FyZCBNb2RlIGZvciB0aGUgVHggU2lkZSAqLwotCQkJCVNLX09VVDgoSW9DLCBSQl9BRERSKFF1SW9PZmZzLCBSQl9DVFJMKSwgUkJfRU5BX1NURldEKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogc2V0IHF1ZXVlIG9wZXJhdGlvbmFsICovCi0JCVNLX09VVDgoSW9DLCBSQl9BRERSKFF1SW9PZmZzLCBSQl9DVFJMKSwgUkJfRU5BX09QX01EKTsKLQl9Ci0JZWxzZSB7Ci0JCS8qIGVuc3VyZSB0aGUgcXVldWUgaXMgc3RpbGwgZGlzYWJsZWQgKi8KLQkJU0tfT1VUOChJb0MsIFJCX0FERFIoUXVJb09mZnMsIFJCX0NUUkwpLCBSQl9SU1RfU0VUKTsKLQl9Ci19CS8qIERvSW5pdFJhbVF1ZXVlICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VJbml0UmFtQnVmcygpIC0gSW5pdGlhbGl6ZSB0aGUgUkFNIEJ1ZmZlciBRdWV1ZXMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUluaXRpYWxpemUgYWxsIFJBTSBCdWZmZXIgUXVldWVzIG9mIHRoZSBzcGVjaWZpZWQgcG9ydAotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrR2VJbml0UmFtQnVmcygKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfR0VQT1JUICpwUHJ0OwotCWludCBSeFFUeXBlOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAocFBydC0+UFJ4UVNpemUgPT0gU0tfTUlOX1JYUV9TSVpFKSB7Ci0JCVJ4UVR5cGUgPSBTS19SWF9TUkFNX1E7IAkvKiBzbWFsbCBSeCBRdWV1ZSAqLwotCX0KLQllbHNlIHsKLQkJUnhRVHlwZSA9IFNLX1JYX0JSQU1fUTsJCS8qIGJpZyBSeCBRdWV1ZSAqLwotCX0KLQotCURvSW5pdFJhbVF1ZXVlKHBBQywgSW9DLCBwUHJ0LT5QUnhRT2ZmLCBwUHJ0LT5QUnhRUmFtU3RhcnQsCi0JCXBQcnQtPlBSeFFSYW1FbmQsIFJ4UVR5cGUpOwotCQotCURvSW5pdFJhbVF1ZXVlKHBBQywgSW9DLCBwUHJ0LT5QWHNRT2ZmLCBwUHJ0LT5QWHNRUmFtU3RhcnQsCi0JCXBQcnQtPlBYc1FSYW1FbmQsIFNLX1RYX1JBTV9RKTsKLQkKLQlEb0luaXRSYW1RdWV1ZShwQUMsIElvQywgcFBydC0+UFhhUU9mZiwgcFBydC0+UFhhUVJhbVN0YXJ0LAotCQlwUHJ0LT5QWGFRUmFtRW5kLCBTS19UWF9SQU1fUSk7Ci0KLX0JLyogU2tHZUluaXRSYW1CdWZzICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VJbml0UmFtSWZhY2UoKSAtIEluaXRpYWxpemUgdGhlIFJBTSBJbnRlcmZhY2UKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIEFkYXB0ZXJzIFJBTSBJbnRlcmZhY2UuCi0gKgotICogTm90ZToKLSAqCVRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgZGlhZ25vc3RpY3MuCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tHZUluaXRSYW1JZmFjZSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MpCQkvKiBJTyBjb250ZXh0ICovCi17Ci0JLyogcmVsZWFzZSBsb2NhbCByZXNldCAqLwotCVNLX09VVDE2KElvQywgQjNfUklfQ1RSTCwgUklfUlNUX0NMUik7Ci0KLQkvKiBjb25maWd1cmUgdGltZW91dCB2YWx1ZXMgKi8KLQlTS19PVVQ4KElvQywgQjNfUklfV1RPX1IxLCBTS19SSV9UT181Myk7Ci0JU0tfT1VUOChJb0MsIEIzX1JJX1dUT19YQTEsIFNLX1JJX1RPXzUzKTsKLQlTS19PVVQ4KElvQywgQjNfUklfV1RPX1hTMSwgU0tfUklfVE9fNTMpOwotCVNLX09VVDgoSW9DLCBCM19SSV9SVE9fUjEsIFNLX1JJX1RPXzUzKTsKLQlTS19PVVQ4KElvQywgQjNfUklfUlRPX1hBMSwgU0tfUklfVE9fNTMpOwotCVNLX09VVDgoSW9DLCBCM19SSV9SVE9fWFMxLCBTS19SSV9UT181Myk7Ci0JU0tfT1VUOChJb0MsIEIzX1JJX1dUT19SMiwgU0tfUklfVE9fNTMpOwotCVNLX09VVDgoSW9DLCBCM19SSV9XVE9fWEEyLCBTS19SSV9UT181Myk7Ci0JU0tfT1VUOChJb0MsIEIzX1JJX1dUT19YUzIsIFNLX1JJX1RPXzUzKTsKLQlTS19PVVQ4KElvQywgQjNfUklfUlRPX1IyLCBTS19SSV9UT181Myk7Ci0JU0tfT1VUOChJb0MsIEIzX1JJX1JUT19YQTIsIFNLX1JJX1RPXzUzKTsKLQlTS19PVVQ4KElvQywgQjNfUklfUlRPX1hTMiwgU0tfUklfVE9fNTMpOwotCi19CS8qIFNrR2VJbml0UmFtSWZhY2UgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHZUluaXRCbXUoKSAtIEluaXRpYWxpemUgdGhlIEJNVSBzdGF0ZSBtYWNoaW5lcwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJSW5pdGlhbGl6ZSBhbGwgQk1VIHN0YXRlIG1hY2hpbmVzIG9mIHRoZSBzcGVjaWZpZWQgcG9ydAotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrR2VJbml0Qm11KAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0JU0tfVTMyCQlSeFdtOwotCVNLX1UzMgkJVHhXbTsKLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JUnhXbSA9IFNLX0JNVV9SWF9XTTsKLQlUeFdtID0gU0tfQk1VX1RYX1dNOwotCQotCWlmICghcEFDLT5HSW5pLkdJUGNpU2xvdDY0ICYmICFwQUMtPkdJbmkuR0lQY2lDbG9jazY2KSB7Ci0JCS8qIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgKi8KLQkJUnhXbSAvPSAyOwotCQlUeFdtIC89IDI7Ci0JfQotCi0JLyogUnggUXVldWU6IFJlbGVhc2UgYWxsIGxvY2FsIHJlc2V0cyBhbmQgc2V0IHRoZSB3YXRlcm1hcmsgKi8KLQlTS19PVVQzMihJb0MsIFFfQUREUihwUHJ0LT5QUnhRT2ZmLCBRX0NTUiksIENTUl9DTFJfUkVTRVQpOwotCVNLX09VVDMyKElvQywgUV9BRERSKHBQcnQtPlBSeFFPZmYsIFFfRiksIFJ4V20pOwotCi0JLyoKLQkgKiBUeCBRdWV1ZTogUmVsZWFzZSBhbGwgbG9jYWwgcmVzZXRzIGlmIHRoZSBxdWV1ZSBpcyB1c2VkICEKLQkgKiAJCXNldCB3YXRlcm1hcmsKLQkgKi8KLQlpZiAocFBydC0+UFhTUVNpemUgIT0gMCkgewotCQlTS19PVVQzMihJb0MsIFFfQUREUihwUHJ0LT5QWHNRT2ZmLCBRX0NTUiksIENTUl9DTFJfUkVTRVQpOwotCQlTS19PVVQzMihJb0MsIFFfQUREUihwUHJ0LT5QWHNRT2ZmLCBRX0YpLCBUeFdtKTsKLQl9Ci0JCi0JaWYgKHBQcnQtPlBYQVFTaXplICE9IDApIHsKLQkJU0tfT1VUMzIoSW9DLCBRX0FERFIocFBydC0+UFhhUU9mZiwgUV9DU1IpLCBDU1JfQ0xSX1JFU0VUKTsKLQkJU0tfT1VUMzIoSW9DLCBRX0FERFIocFBydC0+UFhhUU9mZiwgUV9GKSwgVHhXbSk7Ci0JfQotCS8qCi0JICogRG8gTk9UIGVuYWJsZSB0aGUgZGVzY3JpcHRvciBwb2xsIHRpbWVycyBoZXJlLCBiZWNhdXNlCi0JICogdGhlIGRlc2NyaXB0b3IgYWRkcmVzc2VzIGFyZSBub3Qgc3BlY2lmaWVkIHlldC4KLQkgKi8KLX0JLyogU2tHZUluaXRCbXUgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJVGVzdFN0b3BCaXQoKSAtCVRlc3QgdGhlIHN0b3AgYml0IG9mIHRoZSBxdWV1ZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJU3RvcHBpbmcgYSBxdWV1ZSBpcyBub3QgYXMgc2ltcGxlIGFzIGl0IHNlZW1zIHRvIGJlLgotICoJSWYgZGVzY3JpcHRvciBwb2xsaW5nIGlzIGVuYWJsZWQsIGl0IG1heSBoYXBwZW4KLSAqCXRoYXQgUlgvVFggc3RvcCBpcyBkb25lIGFuZCBTViBpZGxlIGlzIE5PVCBzZXQuCi0gKglJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBpc3N1ZSBhbm90aGVyIHN0b3AgY29tbWFuZC4KLSAqCi0gKiBSZXR1cm5zOgotICoJVGhlIHF1ZXVlcyBjb250cm9sIHN0YXR1cyByZWdpc3RlcgotICovCi1zdGF0aWMgU0tfVTMyIFRlc3RTdG9wQml0KAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIENvbnRleHQgKi8KLWludAkJUXVJb09mZnMpCS8qIFF1ZXVlIElPIEFkZHJlc3MgT2Zmc2V0ICovCi17Ci0JU0tfVTMyCVF1Q3NyOwkvKiBDU1IgY29udGVudHMgKi8KLQotCVNLX0lOMzIoSW9DLCBRX0FERFIoUXVJb09mZnMsIFFfQ1NSKSwgJlF1Q3NyKTsKLQkKLQlpZiAoKFF1Q3NyICYgKENTUl9TVE9QIHwgQ1NSX1NWX0lETEUpKSA9PSAwKSB7Ci0JCS8qIFN0b3AgRGVzY3JpcHRvciBvdmVycmlkZGVuIGJ5IHN0YXJ0IGNvbW1hbmQgKi8KLQkJU0tfT1VUMzIoSW9DLCBRX0FERFIoUXVJb09mZnMsIFFfQ1NSKSwgQ1NSX1NUT1ApOwotCi0JCVNLX0lOMzIoSW9DLCBRX0FERFIoUXVJb09mZnMsIFFfQ1NSKSwgJlF1Q3NyKTsKLQl9Ci0JCi0JcmV0dXJuKFF1Q3NyKTsKLX0JLyogVGVzdFN0b3BCaXQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHZVN0b3BQb3J0KCkgLSBTdG9wIHRoZSBSeC9UeCBhY3Rpdml0eSBvZiB0aGUgcG9ydCAnUG9ydCcuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdGhlIGRlc2NyaXB0b3IgcmluZ3MgYW5kIFJ4IGFuZCBUeAotICoJcXVldWVzIG9mIHRoaXMgcG9ydCBtYXkgYmUgcmVjb25maWd1cmVkLgotICoKLSAqCUl0IGlzIHBvc3NpYmxlIHRvIHN0b3AgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHBhdGggc2VwYXJhdGUgb3IKLSAqCWJvdGggdG9nZXRoZXIuCi0gKgotICoJRGlyID0JU0tfU1RPUF9UWCAJU3RvcHMgdGhlIHRyYW5zbWl0IHBhdGggb25seSBhbmQgcmVzZXRzIHRoZSBNQUMuCi0gKgkJCQlUaGUgcmVjZWl2ZSBxdWV1ZSBpcyBzdGlsbCBhY3RpdmUgYW5kCi0gKgkJCQl0aGUgcGVuZGluZyBSeCBmcmFtZXMgbWF5IGJlIHN0aWxsIHRyYW5zZmVycmVkCi0gKgkJCQlpbnRvIHRoZSBSeEQuCi0gKgkJU0tfU1RPUF9SWAlTdG9wIHRoZSByZWNlaXZlIHBhdGguIFRoZSB0YW5zbWl0IHBhdGgKLSAqCQkJCWhhcyB0byBiZSBzdG9wcGVkIG9uY2UgYmVmb3JlLgotICoJCVNLX1NUT1BfQUxMCVNLX1NUT1BfVFggKyBTS19TVE9QX1JYCi0gKgotICoJUnN0TW9kZSA9IFNLX1NPRlRfUlNUCVJlc2V0cyB0aGUgTUFDLiBUaGUgUEhZIGlzIHN0aWxsIGFsaXZlLgotICoJCQlTS19IQVJEX1JTVAlSZXNldHMgdGhlIE1BQyBhbmQgdGhlIFBIWS4KLSAqCi0gKiBFeGFtcGxlOgotICoJMSkgQSBMaW5rIERvd24gZXZlbnQgd2FzIHNpZ25hbGVkIGZvciBhIHBvcnQuIFRoZXJlZm9yZSB0aGUgYWN0aXZpdHkKLSAqCW9mIHRoaXMgcG9ydCBzaG91bGQgYmUgc3RvcHBlZCBhbmQgYSBoYXJkd2FyZSByZXNldCBzaG91bGQgYmUgaXNzdWVkCi0gKgl0byBlbmFibGUgdGhlIHdvcmthcm91bmQgb2YgWE1BQyBFcnJhdGEgIzIuIEJ1dCB0aGUgcmVjZWl2ZWQgZnJhbWVzCi0gKglzaG91bGQgbm90IGJlIGRpc2NhcmRlZC4KLSAqCQkuLi4KLSAqCQlTa0dlU3RvcFBvcnQocEFDLCBJb0MsIFBvcnQsIFNLX1NUT1BfVFgsIFNLX0hBUkRfUlNUKTsKLSAqCQkodHJhbnNmZXIgYWxsIHBlbmRpbmcgUnggZnJhbWVzKQotICoJCVNrR2VTdG9wUG9ydChwQUMsIElvQywgUG9ydCwgU0tfU1RPUF9SWCwgU0tfSEFSRF9SU1QpOwotICoJCS4uLgotICoKLSAqCTIpIEFuIGV2ZW50IHdhcyBpc3N1ZWQgd2hpY2ggcmVxdWVzdCB0aGUgZHJpdmVyIHRvIHN3aXRjaAotICoJdGhlICd2aXJ0dWFsIGFjdGl2ZScgbGluayB0byBhbiBvdGhlciBhbHJlYWR5IGFjdGl2ZSBwb3J0Ci0gKglhcyBzb29uIGFzIHBvc3NpYmxlLiBUaGUgZnJhbWVzIGluIHRoZSByZWNlaXZlIHF1ZXVlIG9mIHRoaXMKLSAqCXBvcnQgbWF5IGJlIGxvc3QuIEJ1dCB0aGUgUEhZIG11c3Qgbm90IGJlIHJlc2V0IGR1cmluZyB0aGlzCi0gKglldmVudC4KLSAqCQkuLi4KLSAqCQlTa0dlU3RvcFBvcnQocEFDLCBJb0MsIFBvcnQsIFNLX1NUT1BfQUxMLCBTS19TT0ZUX1JTVCk7Ci0gKgkJLi4uCi0gKgotICogRXh0ZW5kZWQgRGVzY3JpcHRpb246Ci0gKglJZiBTS19TVE9QX1RYIGlzIHNldCwKLSAqCQlvIGRpc2FibGUgdGhlIE1BQydzIHJlY2VpdmUgYW5kIHRyYW5zbWl0dGVyIHRvIHByZXZlbnQKLSAqCQkgIGZyb20gc2VuZGluZyBpbmNvbXBsZXRlIGZyYW1lcwotICoJCW8gc3RvcCB0aGUgcG9ydCdzIHRyYW5zbWl0IHF1ZXVlcyBiZWZvcmUgdGVybWluYXRpbmcgdGhlCi0gKgkJICBCTVVzIHRvIHByZXZlbnQgZnJvbSBwZXJmb3JtaW5nIGluY29tcGxldGUgUENJIGN5Y2xlcwotICoJCSAgb24gdGhlIFBDSSBidXMKLSAqCQktIFRoZSBuZXR3b3JrIFJ4IGFuZCBUeCBhY3Rpdml0eSBhbmQgUENJIFR4IHRyYW5zZmVyIGlzCi0gKgkJICBkaXNhYmxlZCBub3cuCi0gKgkJbyByZXNldCB0aGUgTUFDIGRlcGVuZGluZyBvbiB0aGUgUnN0TW9kZQotICoJCW8gU3RvcCBJbnRlcnZhbCBUaW1lciBhbmQgTGltaXQgQ291bnRlciBvZiBUeCBBcmJpdGVyLAotICoJCSAgYWxzbyBkaXNhYmxlIEZvcmNlIFN5bmMgYml0IGFuZCBFbmFibGUgQWxsb2MgYml0LgotICoJCW8gcGVyZm9ybSBhIGxvY2FsIHJlc2V0IG9mIHRoZSBwb3J0J3MgVHggcGF0aAotICoJCQktIHJlc2V0IHRoZSBQQ0kgRklGTyBvZiB0aGUgYXN5bmMgVHggcXVldWUKLSAqCQkJLSByZXNldCB0aGUgUENJIEZJRk8gb2YgdGhlIHN5bmMgVHggcXVldWUKLSAqCQkJLSByZXNldCB0aGUgUkFNIEJ1ZmZlciBhc3luYyBUeCBxdWV1ZQotICoJCQktIHJlc2V0IHRoZSBSQU0gQnVmZmVyIHN5bmMgVHggcXVldWUKLSAqCQkJLSByZXNldCB0aGUgTUFDIFR4IEZJRk8KLSAqCQlvIHN3aXRjaCBMaW5rIGFuZCBUeCBMRUQgb2ZmLCBzdG9wIHRoZSBMRUQgY291bnRlcnMKLSAqCi0gKglJZiBTS19TVE9QX1JYIGlzIHNldCwKLSAqCQlvIHN0b3AgdGhlIHBvcnQncyByZWNlaXZlIHF1ZXVlCi0gKgkJLSBUaGUgcGF0aCBkYXRhIHRyYW5zZmVyIGFjdGl2aXR5IGlzIGZ1bGx5IHN0b3BwZWQgbm93LgotICoJCW8gcGVyZm9ybSBhIGxvY2FsIHJlc2V0IG9mIHRoZSBwb3J0J3MgUnggcGF0aAotICoJCQktIHJlc2V0IHRoZSBQQ0kgRklGTyBvZiB0aGUgUnggcXVldWUKLSAqCQkJLSByZXNldCB0aGUgUkFNIEJ1ZmZlciByZWNlaXZlIHF1ZXVlCi0gKgkJCS0gcmVzZXQgdGhlIE1BQyBSeCBGSUZPCi0gKgkJbyBzd2l0Y2ggUnggTEVEIG9mZiwgc3RvcCB0aGUgTEVEIGNvdW50ZXIKLSAqCi0gKglJZiBhbGwgcG9ydHMgYXJlIHN0b3BwZWQsCi0gKgkJbyByZXNldCB0aGUgUkFNIEludGVyZmFjZS4KLSAqCi0gKiBOb3RlczoKLSAqCW8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGR1cmluZyB0aGUgZHJpdmVyIHN0YXRlcyBSRVNFVF9QT1JUIGFuZAotICoJICBTV0lUQ0hfUE9SVC4KLSAqLwotdm9pZCBTa0dlU3RvcFBvcnQoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIEkvTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCS8qIHBvcnQgdG8gc3RvcCAoTUFDXzEgKyBuKSAqLwotaW50CQlEaXIsCS8qIERpcmVjdGlvbiB0byBTdG9wIChTS19TVE9QX1JYLCBTS19TVE9QX1RYLCBTS19TVE9QX0FMTCkgKi8KLWludAkJUnN0TW9kZSkvKiBSZXNldCBNb2RlIChTS19TT0ZUX1JTVCwgU0tfSEFSRF9SU1QpICovCi17Ci0jaWZuZGVmIFNLX0RJQUcKLQlTS19FVlBBUkEgUGFyYTsKLSNlbmRpZiAvKiAhU0tfRElBRyAqLwotCVNLX0dFUE9SVCAqcFBydDsKLQlTS19VMzIJRFdvcmQ7Ci0JU0tfVTMyCVhzQ3NyOwotCVNLX1UzMglYYUNzcjsKLQlTS19VNjQJVG91dFN0YXJ0OwotCWludAkJaTsKLQlpbnQJCVRvdXRDbnQ7Ci0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotCWlmICgoRGlyICYgU0tfU1RPUF9UWCkgIT0gMCkgewotCQkvKiBkaXNhYmxlIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciAqLwotCQlTa01hY1J4VHhEaXNhYmxlKHBBQywgSW9DLCBQb3J0KTsKLQkJCi0JCS8qIHN0b3AgYm90aCB0cmFuc21pdCBxdWV1ZXMgKi8KLQkJLyoKLQkJICogSWYgdGhlIEJNVSBpcyBpbiB0aGUgcmVzZXQgc3RhdGUgQ1NSX1NUT1Agd2lsbCB0ZXJtaW5hdGUKLQkJICogaW1tZWRpYXRlbHkuCi0JCSAqLwotCQlTS19PVVQzMihJb0MsIFFfQUREUihwUHJ0LT5QWHNRT2ZmLCBRX0NTUiksIENTUl9TVE9QKTsKLQkJU0tfT1VUMzIoSW9DLCBRX0FERFIocFBydC0+UFhhUU9mZiwgUV9DU1IpLCBDU1JfU1RPUCk7Ci0KLQkJVG91dFN0YXJ0ID0gU2tPc0dldFRpbWUocEFDKTsKLQkJVG91dENudCA9IDA7Ci0JCWRvIHsKLQkJCS8qCi0JCQkgKiBDbGVhciBwYWNrZXQgYXJiaXRlciB0aW1lb3V0IHRvIG1ha2Ugc3VyZQotCQkJICogdGhpcyBsb29wIHdpbGwgdGVybWluYXRlLgotCQkJICovCi0JCQlTS19PVVQxNihJb0MsIEIzX1BBX0NUUkwsIChTS19VMTYpKChQb3J0ID09IE1BQ18xKSA/Ci0JCQkJUEFfQ0xSX1RPX1RYMSA6IFBBX0NMUl9UT19UWDIpKTsKLQotCQkJLyoKLQkJCSAqIElmIHRoZSB0cmFuc2ZlciBzdHVja3MgYXQgdGhlIE1BQyB0aGUgU1RPUCBjb21tYW5kIHdpbGwgbm90Ci0JCQkgKiB0ZXJtaW5hdGUgaWYgd2UgZG9uJ3QgZmx1c2ggdGhlIFhNQUMncyB0cmFuc21pdCBGSUZPICEKLQkJCSAqLwotCQkJU2tNYWNGbHVzaFR4RmlmbyhwQUMsIElvQywgUG9ydCk7Ci0KLQkJCVhzQ3NyID0gVGVzdFN0b3BCaXQocEFDLCBJb0MsIHBQcnQtPlBYc1FPZmYpOwotCQkJWGFDc3IgPSBUZXN0U3RvcEJpdChwQUMsIElvQywgcFBydC0+UFhhUU9mZik7Ci0KLQkJCWlmIChTa09zR2V0VGltZShwQUMpIC0gVG91dFN0YXJ0ID4gKFNLX1RJQ0tTX1BFUl9TRUMgLyAxOCkpIHsKLQkJCQkvKgotCQkJCSAqIFRpbWVvdXQgb2YgMS8xOCBzZWNvbmQgcmVhY2hlZC4KLQkJCQkgKiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgYXQgMS8xOCBzZWMgb25seS4KLQkJCQkgKi8KLQkJCQlUb3V0Q250Kys7Ci0JCQkJaWYgKFRvdXRDbnQgPiAxKSB7Ci0JCQkJCS8qIE1pZ2h0IGJlIGEgcHJvYmxlbSB3aGVuIHRoZSBkcml2ZXIgZXZlbnQgaGFuZGxlcgotCQkJCQkgKiBjYWxscyBTdG9wUG9ydCBhZ2Fpbi4gWFhYLgotCQkJCQkgKi8KLQotCQkJCQkvKiBGYXRhbCBFcnJvciwgTG9vcCBhYm9ydGVkICovCi0JCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfSFdJX0UwMTgsCi0JCQkJCQlTS0VSUl9IV0lfRTAxOE1TRyk7Ci0jaWZuZGVmIFNLX0RJQUcKLQkJCQkJUGFyYS5QYXJhNjQgPSBQb3J0OwotCQkJCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1BPUlRfRkFJTCwgUGFyYSk7Ci0jZW5kaWYgLyogIVNLX0RJQUcgKi8KLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIENhY2hlIGluY29oZXJlbmN5IHdvcmthcm91bmQ6IEFzc3VtZSBhIHN0YXJ0IGNvbW1hbmQKLQkJCQkgKiBoYXMgYmVlbiBsb3N0IHdoaWxlIHNlbmRpbmcgdGhlIGZyYW1lLgotCQkJCSAqLwotCQkJCVRvdXRTdGFydCA9IFNrT3NHZXRUaW1lKHBBQyk7Ci0KLQkJCQlpZiAoKFhzQ3NyICYgQ1NSX1NUT1ApICE9IDApIHsKLQkJCQkJU0tfT1VUMzIoSW9DLCBRX0FERFIocFBydC0+UFhzUU9mZiwgUV9DU1IpLCBDU1JfU1RBUlQpOwotCQkJCX0KLQkJCQlpZiAoKFhhQ3NyICYgQ1NSX1NUT1ApICE9IDApIHsKLQkJCQkJU0tfT1VUMzIoSW9DLCBRX0FERFIocFBydC0+UFhhUU9mZiwgUV9DU1IpLCBDU1JfU1RBUlQpOwotCQkJCX0KLQkJCX0KLQotCQkJLyoKLQkJCSAqIEJlY2F1c2Ugb2YgdGhlIEFTSUMgcHJvYmxlbSByZXBvcnQgZW50cnkgZnJvbSAyMS4wOC4xOTk4IGl0IGlzCi0JCQkgKiByZXF1aXJlZCB0byB3YWl0IHVudGlsIENTUl9TVE9QIGlzIHJlc2V0IGFuZCBDU1JfU1ZfSURMRSBpcyBzZXQuCi0JCQkgKi8KLQkJfSB3aGlsZSAoKFhzQ3NyICYgKENTUl9TVE9QIHwgQ1NSX1NWX0lETEUpKSAhPSBDU1JfU1ZfSURMRSB8fAotCQkJCSAoWGFDc3IgJiAoQ1NSX1NUT1AgfCBDU1JfU1ZfSURMRSkpICE9IENTUl9TVl9JRExFKTsKLQotCQkvKiBSZXNldCB0aGUgTUFDIGRlcGVuZGluZyBvbiB0aGUgUnN0TW9kZSAqLwotCQlpZiAoUnN0TW9kZSA9PSBTS19TT0ZUX1JTVCkgewotCQkJU2tNYWNTb2Z0UnN0KHBBQywgSW9DLCBQb3J0KTsKLQkJfQotCQllbHNlIHsKLQkJCVNrTWFjSGFyZFJzdChwQUMsIElvQywgUG9ydCk7Ci0JCX0KLSAJCQotCQkvKiBEaXNhYmxlIEZvcmNlIFN5bmMgYml0IGFuZCBFbmFibGUgQWxsb2MgYml0ICovCi0JCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFRYQV9DVFJMKSwKLQkJCVRYQV9ESVNfRlNZTkMgfCBUWEFfRElTX0FMTE9DIHwgVFhBX1NUT1BfUkMpOwotCQkKLQkJLyogU3RvcCBJbnRlcnZhbCBUaW1lciBhbmQgTGltaXQgQ291bnRlciBvZiBUeCBBcmJpdGVyICovCi0JCVNLX09VVDMyKElvQywgTVJfQUREUihQb3J0LCBUWEFfSVRJX0lOSSksIDBMKTsKLQkJU0tfT1VUMzIoSW9DLCBNUl9BRERSKFBvcnQsIFRYQV9MSU1fSU5JKSwgMEwpOwotCi0JCS8qIFBlcmZvcm0gYSBsb2NhbCByZXNldCBvZiB0aGUgcG9ydCdzIFR4IHBhdGggKi8KLQotCQkvKiBSZXNldCB0aGUgUENJIEZJRk8gb2YgdGhlIGFzeW5jIFR4IHF1ZXVlICovCi0JCVNLX09VVDMyKElvQywgUV9BRERSKHBQcnQtPlBYYVFPZmYsIFFfQ1NSKSwgQ1NSX1NFVF9SRVNFVCk7Ci0JCS8qIFJlc2V0IHRoZSBQQ0kgRklGTyBvZiB0aGUgc3luYyBUeCBxdWV1ZSAqLwotCQlTS19PVVQzMihJb0MsIFFfQUREUihwUHJ0LT5QWHNRT2ZmLCBRX0NTUiksIENTUl9TRVRfUkVTRVQpOwotCQkvKiBSZXNldCB0aGUgUkFNIEJ1ZmZlciBhc3luYyBUeCBxdWV1ZSAqLwotCQlTS19PVVQ4KElvQywgUkJfQUREUihwUHJ0LT5QWGFRT2ZmLCBSQl9DVFJMKSwgUkJfUlNUX1NFVCk7Ci0JCS8qIFJlc2V0IHRoZSBSQU0gQnVmZmVyIHN5bmMgVHggcXVldWUgKi8KLQkJU0tfT1VUOChJb0MsIFJCX0FERFIocFBydC0+UFhzUU9mZiwgUkJfQ1RSTCksIFJCX1JTVF9TRVQpOwotCQkKLQkJLyogUmVzZXQgVHggTUFDIEZJRk8gKi8KLSNpZmRlZiBHRU5FU0lTCi0JCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQkvKiBOb3RlOiBNRkZfUlNUX1NFVCBkb2VzIE5PVCByZXNldCB0aGUgWE1BQyAhICovCi0JCQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBUWF9NRkZfQ1RSTDIpLCBNRkZfUlNUX1NFVCk7Ci0KLQkJCS8qIHN3aXRjaCBMaW5rIGFuZCBUeCBMRUQgb2ZmLCBzdG9wIHRoZSBMRUQgY291bnRlcnMgKi8KLQkJCS8qIExpbmsgTEVEIGlzIHN3aXRjaGVkIG9mZiBieSB0aGUgUkxNVCBhbmQgdGhlIERpYWcgaXRzZWxmICovCi0JCQlTa0dlWG1pdExFRChwQUMsIElvQywgTVJfQUREUihQb3J0LCBUWF9MRURfSU5JKSwgU0tfTEVEX0RJUyk7Ci0JCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQkJaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCQkvKiBSZXNldCBUWCBNQUMgRklGTyAqLwotCQkJU0tfT1VUOChJb0MsIE1SX0FERFIoUG9ydCwgVFhfR01GX0NUUkxfVCksIChTS19VOClHTUZfUlNUX1NFVCk7Ci0JCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCX0KLQotCWlmICgoRGlyICYgU0tfU1RPUF9SWCkgIT0gMCkgewotCQkvKgotCQkgKiBUaGUgUlggU3RvcCBDb21tYW5kIHdpbGwgbm90IHRlcm1pbmF0ZSBpZiBubyBidWZmZXJzCi0JCSAqIGFyZSBxdWV1ZWQgaW4gdGhlIFJ4RCByaW5nLiBCdXQgaXQgd2lsbCBhbHdheXMgcmVhY2gKLQkJICogdGhlIElkbGUgc3RhdGUuIFRoZXJlZm9yZSB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSB0bwotCQkgKiBzdG9wIHRoZSB0cmFuc2ZlciBvZiByZWNlaXZlZCBwYWNrZXRzLgotCQkgKi8KLQkJLyogc3RvcCB0aGUgcG9ydCdzIHJlY2VpdmUgcXVldWUgKi8KLQkJU0tfT1VUMzIoSW9DLCBRX0FERFIocFBydC0+UFJ4UU9mZiwgUV9DU1IpLCBDU1JfU1RPUCk7Ci0JCQotCQlpID0gMTAwOwotCQlkbyB7Ci0JCQkvKgotCQkJICogQ2xlYXIgcGFja2V0IGFyYml0ZXIgdGltZW91dCB0byBtYWtlIHN1cmUKLQkJCSAqIHRoaXMgbG9vcCB3aWxsIHRlcm1pbmF0ZQotCQkJICovCi0JCQlTS19PVVQxNihJb0MsIEIzX1BBX0NUUkwsIChTS19VMTYpKChQb3J0ID09IE1BQ18xKSA/Ci0JCQkJUEFfQ0xSX1RPX1JYMSA6IFBBX0NMUl9UT19SWDIpKTsKLQotCQkJRFdvcmQgPSBUZXN0U3RvcEJpdChwQUMsIElvQywgcFBydC0+UFJ4UU9mZik7Ci0KLQkJCS8qIHRpbWVvdXQgaWYgaT09MCAoYnVnIGZpeCBmb3IgIzEwNzQ4KSAqLwotCQkJaWYgKC0taSA9PSAwKSB7Ci0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9IV0lfRTAyNCwKLQkJCQkJU0tFUlJfSFdJX0UwMjRNU0cpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyoKLQkJCSAqIGJlY2F1c2Ugb2YgdGhlIEFTSUMgcHJvYmxlbSByZXBvcnQgZW50cnkgZnJvbSAyMS4wOC45OAotCQkJICogaXQgaXMgcmVxdWlyZWQgdG8gd2FpdCB1bnRpbCBDU1JfU1RPUCBpcyByZXNldCBhbmQKLQkJCSAqIENTUl9TVl9JRExFIGlzIHNldC4KLQkJCSAqLwotCQl9IHdoaWxlICgoRFdvcmQgJiAoQ1NSX1NUT1AgfCBDU1JfU1ZfSURMRSkpICE9IENTUl9TVl9JRExFKTsKLQotCQkvKiBUaGUgcGF0aCBkYXRhIHRyYW5zZmVyIGFjdGl2aXR5IGlzIGZ1bGx5IHN0b3BwZWQgbm93ICovCi0KLQkJLyogUGVyZm9ybSBhIGxvY2FsIHJlc2V0IG9mIHRoZSBwb3J0J3MgUnggcGF0aCAqLwotCi0JCSAvKglSZXNldCB0aGUgUENJIEZJRk8gb2YgdGhlIFJ4IHF1ZXVlICovCi0JCVNLX09VVDMyKElvQywgUV9BRERSKHBQcnQtPlBSeFFPZmYsIFFfQ1NSKSwgQ1NSX1NFVF9SRVNFVCk7Ci0JCS8qIFJlc2V0IHRoZSBSQU0gQnVmZmVyIHJlY2VpdmUgcXVldWUgKi8KLQkJU0tfT1VUOChJb0MsIFJCX0FERFIocFBydC0+UFJ4UU9mZiwgUkJfQ1RSTCksIFJCX1JTVF9TRVQpOwotCi0JCS8qIFJlc2V0IFJ4IE1BQyBGSUZPICovCi0jaWZkZWYgR0VORVNJUwotCQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkJCi0JCQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBSWF9NRkZfQ1RSTDIpLCBNRkZfUlNUX1NFVCk7Ci0KLQkJCS8qIHN3aXRjaCBSeCBMRUQgb2ZmLCBzdG9wIHRoZSBMRUQgY291bnRlciAqLwotCQkJU2tHZVhtaXRMRUQocEFDLCBJb0MsIE1SX0FERFIoUG9ydCwgUlhfTEVEX0lOSSksIFNLX0xFRF9ESVMpOwotCQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkJLyogUmVzZXQgUnggTUFDIEZJRk8gKi8KLQkJCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFJYX0dNRl9DVFJMX1QpLCAoU0tfVTgpR01GX1JTVF9TRVQpOwotCQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQl9Ci19CS8qIFNrR2VTdG9wUG9ydCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlSW5pdDAoKSAtIExldmVsIDAgSW5pdGlhbGl6YXRpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCS0gSW5pdGlhbGl6ZSB0aGUgQk1VIGFkZHJlc3Mgb2Zmc2V0cwotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrR2VJbml0MCgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MpCQkvKiBJTyBjb250ZXh0ICovCi17Ci0JaW50IGk7Ci0JU0tfR0VQT1JUICpwUHJ0OwotCi0JZm9yIChpID0gMDsgaSA8IFNLX01BWF9NQUNTOyBpKyspIHsKLQkJcFBydCA9ICZwQUMtPkdJbmkuR1BbaV07Ci0KLQkJcFBydC0+UFN0YXRlID0gU0tfUFJUX1JFU0VUOwotCQlwUHJ0LT5QUnhRT2ZmID0gUU9mZlRhYltpXS5SeFFPZmY7Ci0JCXBQcnQtPlBYc1FPZmYgPSBRT2ZmVGFiW2ldLlhzUU9mZjsKLQkJcFBydC0+UFhhUU9mZiA9IFFPZmZUYWJbaV0uWGFRT2ZmOwotCQlwUHJ0LT5QQ2hlY2tQYXIgPSBTS19GQUxTRTsKLQkJcFBydC0+UElzYXZlID0gMDsKLQkJcFBydC0+UFByZXZTaG9ydHMgPSAwOwotCQlwUHJ0LT5QTGlua1Jlc0N0ID0gMDsKLQkJcFBydC0+UEF1dG9OZWdUT0N0ID0gMDsKLQkJcFBydC0+UFByZXZSeCA9IDA7Ci0JCXBQcnQtPlBQcmV2RmNzID0gMDsKLQkJcFBydC0+UFJ4TGltID0gU0tfREVGX1JYX1dBX0xJTTsKLQkJcFBydC0+UExpbmtNb2RlID0gKFNLX1U4KVNLX0xNT0RFX0FVVE9GVUxMOwotCQlwUHJ0LT5QTGlua1NwZWVkQ2FwID0gKFNLX1U4KVNLX0xTUEVFRF9DQVBfMTAwME1CUFM7Ci0JCXBQcnQtPlBMaW5rU3BlZWQgPSAoU0tfVTgpU0tfTFNQRUVEXzEwMDBNQlBTOwotCQlwUHJ0LT5QTGlua1NwZWVkVXNlZCA9IChTS19VOClTS19MU1BFRURfU1RBVF9VTktOT1dOOwotCQlwUHJ0LT5QTGlua01vZGVDb25mID0gKFNLX1U4KVNLX0xNT0RFX0FVVE9TRU5TRTsKLQkJcFBydC0+UEZsb3dDdHJsTW9kZSA9IChTS19VOClTS19GTE9XX01PREVfU1lNX09SX1JFTTsKLQkJcFBydC0+UExpbmtDYXAgPSAoU0tfVTgpKFNLX0xNT0RFX0NBUF9IQUxGIHwgU0tfTE1PREVfQ0FQX0ZVTEwgfAotCQkJU0tfTE1PREVfQ0FQX0FVVE9IQUxGIHwgU0tfTE1PREVfQ0FQX0FVVE9GVUxMKTsKLQkJcFBydC0+UExpbmtNb2RlU3RhdHVzID0gKFNLX1U4KVNLX0xNT0RFX1NUQVRfVU5LTk9XTjsKLQkJcFBydC0+UEZsb3dDdHJsQ2FwID0gKFNLX1U4KVNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNOwotCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSAoU0tfVTgpU0tfRkxPV19TVEFUX05PTkU7Ci0JCXBQcnQtPlBNU0NhcCA9IDA7Ci0JCXBQcnQtPlBNU01vZGUgPSAoU0tfVTgpU0tfTVNfTU9ERV9BVVRPOwotCQlwUHJ0LT5QTVNTdGF0dXMgPSAoU0tfVTgpU0tfTVNfU1RBVF9VTlNFVDsKLQkJcFBydC0+UExpcGFBdXRvTmVnID0gKFNLX1U4KVNLX0xJUEFfVU5LTk9XTjsKLQkJcFBydC0+UEF1dG9OZWdGYWlsID0gU0tfRkFMU0U7Ci0JCXBQcnQtPlBIV0xpbmtVcCA9IFNLX0ZBTFNFOwotCQlwUHJ0LT5QTGlua0Jyb2tlbiA9IFNLX1RSVUU7IC8qIFNlZSBXQSBjb2RlICovCi0JCXBQcnQtPlBQaHlQb3dlclN0YXRlID0gUEhZX1BNX09QRVJBVElPTkFMX01PREU7Ci0JCXBQcnQtPlBNYWNDb2xUaHJlcyA9IFRYX0NPTF9ERUY7Ci0JCXBQcnQtPlBNYWNKYW1MZW4gPSBUWF9KQU1fTEVOX0RFRjsKLQkJcFBydC0+UE1hY0phbUlwZ1ZhbAk9IFRYX0pBTV9JUEdfREVGOwotCQlwUHJ0LT5QTWFjSmFtSXBnRGF0YSA9IFRYX0lQR19KQU1fREVGOwotCQlwUHJ0LT5QTWFjSXBnRGF0YSA9IElQR19EQVRBX0RFRjsKLQkJcFBydC0+UE1hY0xpbWl0NCA9IFNLX0ZBTFNFOwotCX0KLQotCXBBQy0+R0luaS5HSVBvcnRVc2FnZSA9IFNLX1JFRF9MSU5LOwotCXBBQy0+R0luaS5HSUxlZEJsaW5rQ3RybCA9IChTS19VMTYpT2VtQ29uZmlnLlZhbHVlOwotCXBBQy0+R0luaS5HSVZhbElycU1hc2sgPSBJU19BTExfTVNLOwotCi19CS8qIFNrR2VJbml0MCovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VJbml0MSgpIC0gTGV2ZWwgMSBJbml0aWFsaXphdGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJbyBEbyBhIHNvZnR3YXJlIHJlc2V0LgotICoJbyBDbGVhciBhbGwgcmVzZXQgYml0cy4KLSAqCW8gVmVyaWZ5IHRoYXQgdGhlIGRldGVjdGVkIGhhcmR3YXJlIGlzIHByZXNlbnQuCi0gKgkgIFJldHVybiBhbiBlcnJvciBpZiBub3QuCi0gKglvIEdldCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbgotICoJCSsgUmVhZCB0aGUgbnVtYmVyIG9mIE1BQ3MvUG9ydHMuCi0gKgkJKyBSZWFkIHRoZSBSQU0gc2l6ZS4KLSAqCQkrIFJlYWQgdGhlIFBDSSBSZXZpc2lvbiBJZC4KLSAqCQkrIEZpbmQgb3V0IHRoZSBhZGFwdGVycyBob3N0IGNsb2NrIHNwZWVkCi0gKgkJKyBSZWFkIGFuZCBjaGVjayB0aGUgUEhZIHR5cGUKLSAqCi0gKiBSZXR1cm5zOgotICoJMDoJc3VjY2VzcwotICoJNToJVW5leHBlY3RlZCBQSFkgdHlwZSBkZXRlY3RlZAotICoJNjoJSFcgc2VsZiB0ZXN0IGZhaWxlZAotICovCi1zdGF0aWMgaW50IFNrR2VJbml0MSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MpCQkvKiBJTyBjb250ZXh0ICovCi17Ci0JU0tfVTgJQnl0ZTsKLQlTS19VMTYJV29yZDsKLQlTS19VMTYJQ3RybFN0YXQ7Ci0JU0tfVTMyCURXb3JkOwotCWludAlSZXRWYWw7Ci0JaW50CWk7Ci0KLQlSZXRWYWwgPSAwOwotCi0JLyogc2F2ZSBDTEtfUlVOIGJpdHMgKFlVS09OLUxpdGUpICovCi0JU0tfSU4xNihJb0MsIEIwX0NUU1QsICZDdHJsU3RhdCk7Ci0KLQkvKiBkbyB0aGUgU1ctcmVzZXQgKi8KLQlTS19PVVQ4KElvQywgQjBfQ1RTVCwgQ1NfUlNUX1NFVCk7Ci0KLQkvKiByZWxlYXNlIHRoZSBTVy1yZXNldCAqLwotCVNLX09VVDgoSW9DLCBCMF9DVFNULCBDU19SU1RfQ0xSKTsKLQotCS8qIHJlc2V0IGFsbCBlcnJvciBiaXRzIGluIHRoZSBQQ0kgU1RBVFVTIHJlZ2lzdGVyICovCi0JLyoKLQkgKiBOb3RlOiBQQ0kgQ2ZnIGN5Y2xlcyBjYW5ub3QgYmUgdXNlZCwgYmVjYXVzZSB0aGV5IGFyZSBub3QKLQkgKgkJIGF2YWlsYWJsZSBvbiBzb21lIHBsYXRmb3JtcyBhZnRlciAnYm9vdCB0aW1lJy4KLQkgKi8KLQlTS19JTjE2KElvQywgUENJX0MoUENJX1NUQVRVUyksICZXb3JkKTsKLQkKLQlTS19PVVQ4KElvQywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKLQlTS19PVVQxNihJb0MsIFBDSV9DKFBDSV9TVEFUVVMpLCAoU0tfVTE2KShXb3JkIHwgUENJX0VSUkJJVFMpKTsKLQlTS19PVVQ4KElvQywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7Ci0KLQkvKiByZWxlYXNlIE1hc3RlciBSZXNldCAqLwotCVNLX09VVDgoSW9DLCBCMF9DVFNULCBDU19NUlNUX0NMUik7Ci0KLSNpZmRlZiBDTEtfUlVOCi0JQ3RybFN0YXQgfD0gQ1NfQ0xLX1JVTl9FTkE7Ci0jZW5kaWYgLyogQ0xLX1JVTiAqLwotCi0JLyogcmVzdG9yZSBDTEtfUlVOIGJpdHMgKi8KLQlTS19PVVQxNihJb0MsIEIwX0NUU1QsIChTS19VMTYpKEN0cmxTdGF0ICYKLQkJKENTX0NMS19SVU5fSE9UIHwgQ1NfQ0xLX1JVTl9SU1QgfCBDU19DTEtfUlVOX0VOQSkpKTsKLQotCS8qIHJlYWQgQ2hpcCBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKi8KLQlTS19JTjgoSW9DLCBCMl9DSElQX0lELCAmQnl0ZSk7Ci0JcEFDLT5HSW5pLkdJQ2hpcElkID0gQnl0ZTsKLQkKLQkvKiByZWFkIG51bWJlciBvZiBNQUNzICovCi0JU0tfSU44KElvQywgQjJfTUFDX0NGRywgJkJ5dGUpOwotCXBBQy0+R0luaS5HSU1hY3NGb3VuZCA9IChCeXRlICYgQ0ZHX1NOR19NQUMpID8gMSA6IDI7Ci0JCi0JLyogZ2V0IENoaXAgUmV2aXNpb24gTnVtYmVyICovCi0JcEFDLT5HSW5pLkdJQ2hpcFJldiA9IChTS19VOCkoKEJ5dGUgJiBDRkdfQ0hJUF9SX01TSykgPj4gNCk7Ci0KLQkvKiBnZXQgZGlmZi4gUENJIHBhcmFtZXRlcnMgKi8KLQlTS19JTjE2KElvQywgQjBfQ1RTVCwgJkN0cmxTdGF0KTsKLQkKLQkvKiByZWFkIHRoZSBhZGFwdGVycyBSQU0gc2l6ZSAqLwotCVNLX0lOOChJb0MsIEIyX0VfMCwgJkJ5dGUpOwotCQotCXBBQy0+R0luaS5HSUdlbmVzaXMgPSBTS19GQUxTRTsKLQlwQUMtPkdJbmkuR0lZdWtvbiA9IFNLX0ZBTFNFOwotCXBBQy0+R0luaS5HSVl1a29uTGl0ZSA9IFNLX0ZBTFNFOwotCi0jaWZkZWYgR0VORVNJUwotCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7Ci0KLQkJcEFDLT5HSW5pLkdJR2VuZXNpcyA9IFNLX1RSVUU7Ci0KLQkJaWYgKEJ5dGUgPT0gKFNLX1U4KTMpIHsJCQkJCQkKLQkJCS8qIHNwZWNpYWwgY2FzZTogNCB4IDY0ayB4IDM2LCBvZmZzZXQgPSAweDgwMDAwICovCi0JCQlwQUMtPkdJbmkuR0lSYW1TaXplID0gMTAyNDsKLQkJCXBBQy0+R0luaS5HSVJhbU9mZnMgPSAoU0tfVTMyKTUxMiAqIDEwMjQ7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwQUMtPkdJbmkuR0lSYW1TaXplID0gKGludClCeXRlICogNTEyOwotCQkJcEFDLT5HSW5pLkdJUmFtT2ZmcyA9IDA7Ci0JCX0KLQkJLyogYWxsIEdFIGFkYXB0ZXJzIHdvcmsgd2l0aCA1My4xMjUgTUh6IGhvc3QgY2xvY2sgKi8KLQkJcEFDLT5HSW5pLkdJSHN0Q2xrRmFjdCA9IFNLX0ZBQ1RfNTM7Ci0JCQotCQkvKiBzZXQgRGVzY3IuIFBvbGwgVGltZXIgSW5pdCBWYWx1ZSB0byAyNTAgbXMgKi8KLQkJcEFDLT5HSW5pLkdJUG9sbFRpbWVyVmFsID0KLQkJCVNLX0RQT0xMX0RFRiAqIChTS19VMzIpcEFDLT5HSW5pLkdJSHN0Q2xrRmFjdCAvIDEwMDsKLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JaWYgKHBBQy0+R0luaS5HSUNoaXBJZCAhPSBDSElQX0lEX0dFTkVTSVMpIHsKLQkJCi0JCXBBQy0+R0luaS5HSVl1a29uID0gU0tfVFJVRTsKLQkJCi0JCXBBQy0+R0luaS5HSVJhbVNpemUgPSAoQnl0ZSA9PSAoU0tfVTgpMCkgPyAxMjggOiAoaW50KUJ5dGUgKiA0OwotCQkKLQkJcEFDLT5HSW5pLkdJUmFtT2ZmcyA9IDA7Ci0JCQotCQkvKiBXQSBmb3IgY2hpcCBSZXYuIEEgKi8KLQkJcEFDLT5HSW5pLkdJV29sT2ZmcyA9IChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9ZVUtPTiAmJgotCQkJcEFDLT5HSW5pLkdJQ2hpcFJldiA9PSAwKSA/IFdPTF9SRUdfT0ZGUyA6IDA7Ci0JCQotCQkvKiBnZXQgUE0gQ2FwYWJpbGl0aWVzIG9mIFBDSSBjb25maWcgc3BhY2UgKi8KLQkJU0tfSU4xNihJb0MsIFBDSV9DKFBDSV9QTV9DQVBfUkVHKSwgJldvcmQpOwotCi0JCS8qIGNoZWNrIGlmIFZBVVggaXMgYXZhaWxhYmxlICovCi0JCWlmICgoKEN0cmxTdGF0ICYgQ1NfVkFVWF9BVkFJTCkgIT0gMCkgJiYKLQkJCS8qIGNoZWNrIGFsc28gaWYgUE1FIGZyb20gRDNjb2xkIGlzIHNldCAqLwotCQkJKChXb3JkICYgUENJX1BNRV9EM0NfU1VQKSAhPSAwKSkgewotCQkJLyogc2V0IGVudHJ5IGluIEdFIGluaXQgc3RydWN0ICovCi0JCQlwQUMtPkdJbmkuR0lWYXV4QXZhaWwgPSBTS19UUlVFOwotCQl9Ci0JCQotCQlpZiAocEFDLT5HSW5pLkdJQ2hpcElkID09IENISVBfSURfWVVLT05fTElURSkgewotCQkJLyogdGhpcyBpcyBSZXYuIEExICovCi0JCQlwQUMtPkdJbmkuR0lZdWtvbkxpdGUgPSBTS19UUlVFOwotCQl9Ci0JCWVsc2UgewotCQkJLyogc2F2ZSBGbGFzaC1BZGRyZXNzIFJlZ2lzdGVyICovCi0JCQlTS19JTjMyKElvQywgQjJfRkFSLCAmRFdvcmQpOwotCi0JCQkvKiB0ZXN0IEZsYXNoLUFkZHJlc3MgUmVnaXN0ZXIgKi8KLQkJCVNLX09VVDgoSW9DLCBCMl9GQVIgKyAzLCAweGZmKTsKLQkJCVNLX0lOOChJb0MsIEIyX0ZBUiArIDMsICZCeXRlKTsKLQotCQkJaWYgKEJ5dGUgIT0gMCkgewotCQkJCS8qIHRoaXMgaXMgUmV2LiBBMCAqLwotCQkJCXBBQy0+R0luaS5HSVl1a29uTGl0ZSA9IFNLX1RSVUU7Ci0KLQkJCQkvKiByZXN0b3JlIEZsYXNoLUFkZHJlc3MgUmVnaXN0ZXIgKi8KLQkJCQlTS19PVVQzMihJb0MsIEIyX0ZBUiwgRFdvcmQpOwotCQkJfQotCQl9Ci0KLQkJLyogc3dpdGNoIHBvd2VyIHRvIFZDQyAoV0EgZm9yIFZBVVggcHJvYmxlbSkgKi8KLQkJU0tfT1VUOChJb0MsIEIwX1BPV0VSX0NUUkwsIChTS19VOCkoUENfVkFVWF9FTkEgfCBQQ19WQ0NfRU5BIHwKLQkJCVBDX1ZBVVhfT0ZGIHwgUENfVkNDX09OKSk7Ci0KLQkJLyogcmVhZCB0aGUgSW50ZXJydXB0IHNvdXJjZSAqLwotCQlTS19JTjMyKElvQywgQjBfSVNSQywgJkRXb3JkKTsKLQkJCi0JCWlmICgoRFdvcmQgJiBJU19IV19FUlIpICE9IDApIHsKLQkJCS8qIHJlYWQgdGhlIEhXIEVycm9yIEludGVycnVwdCBzb3VyY2UgKi8KLQkJCVNLX0lOMzIoSW9DLCBCMF9IV0VfSVNSQywgJkRXb3JkKTsKLQkJCQotCQkJaWYgKChEV29yZCAmIElTX0lSUV9TRU5TT1IpICE9IDApIHsKLQkJCQkvKiBkaXNhYmxlIEhXIEVycm9yIElSUSAqLwotCQkJCXBBQy0+R0luaS5HSVZhbElycU1hc2sgJj0gfklTX0hXX0VSUjsKLQkJCX0KLQkJfQotCQkKLQkJZm9yIChpID0gMDsgaSA8IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCQkvKiBzZXQgR01BQyBMaW5rIENvbnRyb2wgcmVzZXQgKi8KLQkJCVNLX09VVDE2KElvQywgTVJfQUREUihpLCBHTUFDX0xJTktfQ1RSTCksIEdNTENfUlNUX1NFVCk7Ci0KLQkJCS8qIGNsZWFyIEdNQUMgTGluayBDb250cm9sIHJlc2V0ICovCi0JCQlTS19PVVQxNihJb0MsIE1SX0FERFIoaSwgR01BQ19MSU5LX0NUUkwpLCBHTUxDX1JTVF9DTFIpOwotCQl9Ci0JCS8qIGFsbCBZVSBjaGlwcyB3b3JrIHdpdGggNzguMTI1IE1IeiBob3N0IGNsb2NrICovCi0JCXBBQy0+R0luaS5HSUhzdENsa0ZhY3QgPSBTS19GQUNUXzc4OwotCQkKLQkJcEFDLT5HSW5pLkdJUG9sbFRpbWVyVmFsID0gU0tfRFBPTExfTUFYOwkvKiAyMTUgbXMgKi8KLQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQotCS8qIGNoZWNrIGlmIDY0LWJpdCBQQ0kgU2xvdCBpcyBwcmVzZW50ICovCi0JcEFDLT5HSW5pLkdJUGNpU2xvdDY0ID0gKFNLX0JPT0wpKChDdHJsU3RhdCAmIENTX0JVU19TTE9UX1NaKSAhPSAwKTsKLQkKLQkvKiBjaGVjayBpZiA2NiBNSHogUENJIENsb2NrIGlzIGFjdGl2ZSAqLwotCXBBQy0+R0luaS5HSVBjaUNsb2NrNjYgPSAoU0tfQk9PTCkoKEN0cmxTdGF0ICYgQ1NfQlVTX0NMT0NLKSAhPSAwKTsKLQotCS8qIHJlYWQgUENJIEhXIFJldmlzaW9uIElkLiAqLwotCVNLX0lOOChJb0MsIFBDSV9DKFBDSV9SRVZfSUQpLCAmQnl0ZSk7Ci0JcEFDLT5HSW5pLkdJUGNpSHdSZXYgPSBCeXRlOwotCi0JLyogcmVhZCB0aGUgUE1EIHR5cGUgKi8KLQlTS19JTjgoSW9DLCBCMl9QTURfVFlQLCAmQnl0ZSk7Ci0JcEFDLT5HSW5pLkdJQ29wcGVyVHlwZSA9IChTS19VOCkoQnl0ZSA9PSAnVCcpOwotCi0JLyogcmVhZCB0aGUgUEhZIHR5cGUgKi8KLQlTS19JTjgoSW9DLCBCMl9FXzEsICZCeXRlKTsKLQotCUJ5dGUgJj0gMHgwZjsJLyogdGhlIFBIWSB0eXBlIGlzIHN0b3JlZCBpbiB0aGUgbG93ZXIgbmliYmxlICovCi0JZm9yIChpID0gMDsgaSA8IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCQotI2lmZGVmIEdFTkVTSVMKLQkJaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCXN3aXRjaCAoQnl0ZSkgewotCQkJY2FzZSBTS19QSFlfWE1BQzoKLQkJCQlwQUMtPkdJbmkuR1BbaV0uUGh5QWRkciA9IFBIWV9BRERSX1hNQUM7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNLX1BIWV9CQ09NOgotCQkJCXBBQy0+R0luaS5HUFtpXS5QaHlBZGRyID0gUEhZX0FERFJfQkNPTTsKLQkJCQlwQUMtPkdJbmkuR1BbaV0uUE1TQ2FwID0gKFNLX1U4KShTS19NU19DQVBfQVVUTyB8Ci0JCQkJCVNLX01TX0NBUF9NQVNURVIgfCBTS19NU19DQVBfU0xBVkUpOwotCQkJCWJyZWFrOwotI2lmZGVmIE9USEVSX1BIWQotCQkJY2FzZSBTS19QSFlfTE9ORToKLQkJCQlwQUMtPkdJbmkuR1BbaV0uUGh5QWRkciA9IFBIWV9BRERSX0xPTkU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNLX1BIWV9OQVQ6Ci0JCQkJcEFDLT5HSW5pLkdQW2ldLlBoeUFkZHIgPSBQSFlfQUREUl9OQVQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYgLyogT1RIRVJfUEhZICovCi0JCQlkZWZhdWx0OgotCQkJCS8qIEVSUk9SOiB1bmV4cGVjdGVkIFBIWSB0eXBlIGRldGVjdGVkICovCi0JCQkJUmV0VmFsID0gNTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJCQotCQkJaWYgKEJ5dGUgPCAoU0tfVTgpU0tfUEhZX01BUlZfQ09QUEVSKSB7Ci0JCQkJLyogaWYgdGhpcyBmaWVsZCBpcyBub3QgaW5pdGlhbGl6ZWQgKi8KLQkJCQlCeXRlID0gKFNLX1U4KVNLX1BIWV9NQVJWX0NPUFBFUjsKLQkJCQkKLQkJCQlwQUMtPkdJbmkuR0lDb3BwZXJUeXBlID0gU0tfVFJVRTsKLQkJCX0KLQkJCQotCQkJcEFDLT5HSW5pLkdQW2ldLlBoeUFkZHIgPSBQSFlfQUREUl9NQVJWOwotCQkJCi0JCQlpZiAocEFDLT5HSW5pLkdJQ29wcGVyVHlwZSkgewotCi0JCQkJcEFDLT5HSW5pLkdQW2ldLlBMaW5rU3BlZWRDYXAgPSAoU0tfVTgpKFNLX0xTUEVFRF9DQVBfQVVUTyB8Ci0JCQkJCVNLX0xTUEVFRF9DQVBfMTBNQlBTIHwgU0tfTFNQRUVEX0NBUF8xMDBNQlBTIHwKLQkJCQkJU0tfTFNQRUVEX0NBUF8xMDAwTUJQUyk7Ci0JCQkJCi0JCQkJcEFDLT5HSW5pLkdQW2ldLlBMaW5rU3BlZWQgPSAoU0tfVTgpU0tfTFNQRUVEX0FVVE87Ci0JCQkJCi0JCQkJcEFDLT5HSW5pLkdQW2ldLlBNU0NhcCA9IChTS19VOCkoU0tfTVNfQ0FQX0FVVE8gfAotCQkJCQlTS19NU19DQVBfTUFTVEVSIHwgU0tfTVNfQ0FQX1NMQVZFKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCUJ5dGUgPSAoU0tfVTgpU0tfUEhZX01BUlZfRklCRVI7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCQkKLQkJcEFDLT5HSW5pLkdQW2ldLlBoeVR5cGUgPSAoaW50KUJ5dGU7Ci0JCQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0lOSVQsCi0JCQkoIlBIWSB0eXBlOiAlZCAgUEhZIGFkZHI6ICUwNHhcbiIsIEJ5dGUsCi0JCQlwQUMtPkdJbmkuR1BbaV0uUGh5QWRkcikpOwotCX0KLQkKLQkvKiBnZXQgTUFDIFR5cGUgJiBzZXQgZnVuY3Rpb24gcG9pbnRlcnMgZGVwZW5kZW50IG9uICovCi0jaWZkZWYgR0VORVNJUwotCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQotCQlwQUMtPkdJbmkuR0lNYWNUeXBlID0gU0tfTUFDX1hNQUM7Ci0KLQkJcEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNVcGRhdGVTdGF0cwk9IFNrWG1VcGRhdGVTdGF0czsKLQkJcEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNTdGF0aXN0aWMJPSBTa1htTWFjU3RhdGlzdGljOwotCQlwQUMtPkdJbmkuR0lGdW5jLnBGbk1hY1Jlc2V0Q291bnRlcgk9IFNrWG1SZXNldENvdW50ZXI7Ci0JCXBBQy0+R0luaS5HSUZ1bmMucEZuTWFjT3ZlcmZsb3cJCT0gU2tYbU92ZXJmbG93U3RhdHVzOwotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJCi0JCXBBQy0+R0luaS5HSU1hY1R5cGUgPSBTS19NQUNfR01BQzsKLQotCQlwQUMtPkdJbmkuR0lGdW5jLnBGbk1hY1VwZGF0ZVN0YXRzCT0gU2tHbVVwZGF0ZVN0YXRzOwotCQlwQUMtPkdJbmkuR0lGdW5jLnBGbk1hY1N0YXRpc3RpYwk9IFNrR21NYWNTdGF0aXN0aWM7Ci0JCXBBQy0+R0luaS5HSUZ1bmMucEZuTWFjUmVzZXRDb3VudGVyCT0gU2tHbVJlc2V0Q291bnRlcjsKLQkJcEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNPdmVyZmxvdwkJPSBTa0dtT3ZlcmZsb3dTdGF0dXM7Ci0KLSNpZmRlZiBTUEVDSUFMX0hBTkRMSU5HCi0JCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9ZVUtPTikgewotCQkJLyogY2hlY2sgSFcgc2VsZiB0ZXN0IHJlc3VsdCAqLwotCQkJU0tfSU44KElvQywgQjJfRV8zLCAmQnl0ZSk7Ci0JCQlpZiAoQnl0ZSAmIEIyX0UzX1JFU19NQVNLKSB7Ci0JCQkJUmV0VmFsID0gNjsKLQkJCX0KLQkJfQotI2VuZGlmCi0JfQotI2VuZGlmIC8qIFlVS09OICovCi0JCi0JcmV0dXJuKFJldFZhbCk7Ci19CS8qIFNrR2VJbml0MSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlSW5pdDIoKSAtIExldmVsIDIgSW5pdGlhbGl6YXRpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCS0gc3RhcnQgdGhlIEJsaW5rIFNvdXJjZSBDb3VudGVyCi0gKgktIHN0YXJ0IHRoZSBEZXNjcmlwdG9yIFBvbGwgVGltZXIKLSAqCS0gY29uZmlndXJlIHRoZSBNQUMtQXJiaXRlcgotICoJLSBjb25maWd1cmUgdGhlIFBhY2tldC1BcmJpdGVyCi0gKgktIGVuYWJsZSB0aGUgVHggQXJiaXRlcnMKLSAqCS0gZW5hYmxlIHRoZSBSQU0gSW50ZXJmYWNlIEFyYml0ZXIKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi1zdGF0aWMgdm9pZCBTa0dlSW5pdDIoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DKQkJLyogSU8gY29udGV4dCAqLwotewotI2lmZGVmIEdFTkVTSVMKLQlTS19VMzIJRFdvcmQ7Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCWludAkJaTsKLQotCS8qIHN0YXJ0IHRoZSBEZXNjcmlwdG9yIFBvbGwgVGltZXIgKi8KLQlpZiAocEFDLT5HSW5pLkdJUG9sbFRpbWVyVmFsICE9IDApIHsKLQkJaWYgKHBBQy0+R0luaS5HSVBvbGxUaW1lclZhbCA+IFNLX0RQT0xMX01BWCkgewotCQkJcEFDLT5HSW5pLkdJUG9sbFRpbWVyVmFsID0gU0tfRFBPTExfTUFYOwotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX0hXSV9FMDE3LCBTS0VSUl9IV0lfRTAxN01TRyk7Ci0JCX0KLQkJU0tfT1VUMzIoSW9DLCBCMjhfRFBUX0lOSSwgcEFDLT5HSW5pLkdJUG9sbFRpbWVyVmFsKTsKLQkJU0tfT1VUOChJb0MsIEIyOF9EUFRfQ1RSTCwgRFBUX1NUQVJUKTsKLQl9Ci0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJLyogc3RhcnQgdGhlIEJsaW5rIFNvdXJjZSBDb3VudGVyICovCi0JCURXb3JkID0gU0tfQkxLX0RVUiAqIChTS19VMzIpcEFDLT5HSW5pLkdJSHN0Q2xrRmFjdCAvIDEwMDsKLQotCQlTS19PVVQzMihJb0MsIEIyX0JTQ19JTkksIERXb3JkKTsKLQkJU0tfT1VUOChJb0MsIEIyX0JTQ19DVFJMLCBCU0NfU1RBUlQpOwotCi0JCS8qCi0JCSAqIENvbmZpZ3VyZSB0aGUgTUFDIEFyYml0ZXIgYW5kIHRoZSBQYWNrZXQgQXJiaXRlci4KLQkJICogVGhleSB3aWxsIGJlIHN0YXJ0ZWQgb25jZSBhbmQgbmV2ZXIgYmUgc3RvcHBlZC4KLQkJICovCi0JCVNrR2VJbml0TWFjQXJiKHBBQywgSW9DKTsKLQotCQlTa0dlSW5pdFBrdEFyYihwQUMsIElvQyk7Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkvKiBzdGFydCBUaW1lIFN0YW1wIFRpbWVyICovCi0JCVNLX09VVDgoSW9DLCBHTUFDX1RJX1NUX0NUUkwsIChTS19VOClHTVRfU1RfU1RBUlQpOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi0JLyogZW5hYmxlIHRoZSBUeCBBcmJpdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlTS19PVVQ4KElvQywgTVJfQUREUihpLCBUWEFfQ1RSTCksIFRYQV9FTkFfQVJCKTsKLQl9Ci0KLQkvKiBlbmFibGUgdGhlIFJBTSBJbnRlcmZhY2UgQXJiaXRlciAqLwotCVNrR2VJbml0UmFtSWZhY2UocEFDLCBJb0MpOwotCi19CS8qIFNrR2VJbml0MiAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHZUluaXQoKSAtIEluaXRpYWxpemUgdGhlIEdFIEFkYXB0ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGxldmVsLgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJTGV2ZWwJMDoJSW5pdGlhbGl6ZSB0aGUgTW9kdWxlIHN0cnVjdHVyZXMuCi0gKglMZXZlbAkxOglHZW5lcmljIEhhcmR3YXJlIEluaXRpYWxpemF0aW9uLiBUaGUgSU9QL01lbUJhc2UgcG9pbnRlciBoYXMKLSAqCQkJCXRvIGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGxldmVsLgotICoKLSAqCQkJbyBEbyBhIHNvZnR3YXJlIHJlc2V0LgotICoJCQlvIENsZWFyIGFsbCByZXNldCBiaXRzLgotICoJCQlvIFZlcmlmeSB0aGF0IHRoZSBkZXRlY3RlZCBoYXJkd2FyZSBpcyBwcmVzZW50LgotICoJCQkgIFJldHVybiBhbiBlcnJvciBpZiBub3QuCi0gKgkJCW8gR2V0IHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uCi0gKgkJCQkrIFNldCBHSU1hY3NGb3VuZCB3aXRoIHRoZSBudW1iZXIgb2YgTUFDcy4KLSAqCQkJCSsgU3RvcmUgdGhlIFJBTSBzaXplIGluIEdJUmFtU2l6ZS4KLSAqCQkJCSsgU2F2ZSB0aGUgUENJIFJldmlzaW9uIElEIGluIEdJUGNpSHdSZXYuCi0gKgkJCW8gcmV0dXJuIGFuIGVycm9yCi0gKgkJCQlpZiBOdW1iZXIgb2YgTUFDcyA+IFNLX01BWF9NQUNTCi0gKgotICoJCQlBZnRlciByZXR1cm5pbmcgZnJvbSBMZXZlbCAwIHRoZSBhZGFwdGVyCi0gKgkJCW1heSBiZSBhY2Nlc3NlZCB3aXRoIElPIG9wZXJhdGlvbnMuCi0gKgotICoJTGV2ZWwJMjoJc3RhcnQgdGhlIEJsaW5rIFNvdXJjZSBDb3VudGVyCi0gKgotICogUmV0dXJuczoKLSAqCTA6CXN1Y2Nlc3MKLSAqCTE6CU51bWJlciBvZiBNQUNzIGV4Y2VlZHMgU0tfTUFYX01BQ1MJKGFmdGVyIGxldmVsIDEpCi0gKgkyOglBZGFwdGVyIG5vdCBwcmVzZW50IG9yIG5vdCBhY2Nlc3NpYmxlCi0gKgkzOglJbGxlZ2FsIGluaXRpYWxpemF0aW9uIGxldmVsCi0gKgk0OglJbml0aWFsaXphdGlvbiBMZXZlbCAxIENhbGwgbWlzc2luZwotICoJNToJVW5leHBlY3RlZCBQSFkgdHlwZSBkZXRlY3RlZAotICoJNjoJSFcgc2VsZiB0ZXN0IGZhaWxlZAotICovCi1pbnQJU2tHZUluaXQoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlMZXZlbCkJCS8qIGluaXRpYWxpemF0aW9uIGxldmVsICovCi17Ci0JaW50CQlSZXRWYWw7CQkvKiByZXR1cm4gdmFsdWUgKi8KLQlTS19VMzIJRFdvcmQ7Ci0KLQlSZXRWYWwgPSAwOwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSU5JVCwKLQkJKCJTa0dlSW5pdChMZXZlbCAlZClcbiIsIExldmVsKSk7Ci0KLQlzd2l0Y2ggKExldmVsKSB7Ci0JY2FzZSBTS19JTklUX0RBVEE6Ci0JCS8qIEluaXRpYWxpemF0aW9uIExldmVsIDAgKi8KLQkJU2tHZUluaXQwKHBBQywgSW9DKTsKLQkJcEFDLT5HSW5pLkdJTGV2ZWwgPSBTS19JTklUX0RBVEE7Ci0JCWJyZWFrOwotCQotCWNhc2UgU0tfSU5JVF9JTzoKLQkJLyogSW5pdGlhbGl6YXRpb24gTGV2ZWwgMSAqLwotCQlSZXRWYWwgPSBTa0dlSW5pdDEocEFDLCBJb0MpOwotCQlpZiAoUmV0VmFsICE9IDApIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogY2hlY2sgaWYgdGhlIGFkYXB0ZXIgc2VlbXMgdG8gYmUgYWNjZXNzaWJsZSAqLwotCQlTS19PVVQzMihJb0MsIEIyX0lSUU1fSU5JLCBTS19URVNUX1ZBTCk7Ci0JCVNLX0lOMzIoSW9DLCBCMl9JUlFNX0lOSSwgJkRXb3JkKTsKLQkJU0tfT1VUMzIoSW9DLCBCMl9JUlFNX0lOSSwgMEwpOwotCQkKLQkJaWYgKERXb3JkICE9IFNLX1RFU1RfVkFMKSB7Ci0JCQlSZXRWYWwgPSAyOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIEdJTWFjc0ZvdW5kIG1hdGNoZXMgU0tfTUFYX01BQ1MgKi8KLQkJaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA+IFNLX01BWF9NQUNTKSB7Ci0JCQlSZXRWYWwgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBMZXZlbCAxIHN1Y2Nlc3NmdWxseSBwYXNzZWQgKi8KLQkJcEFDLT5HSW5pLkdJTGV2ZWwgPSBTS19JTklUX0lPOwotCQlicmVhazsKLQkKLQljYXNlIFNLX0lOSVRfUlVOOgotCQkvKiBJbml0aWFsaXphdGlvbiBMZXZlbCAyICovCi0JCWlmIChwQUMtPkdJbmkuR0lMZXZlbCAhPSBTS19JTklUX0lPKSB7Ci0jaWZuZGVmIFNLX0RJQUcKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfSFdJX0UwMDIsIFNLRVJSX0hXSV9FMDAyTVNHKTsKLSNlbmRpZiAvKiAhU0tfRElBRyAqLwotCQkJUmV0VmFsID0gNDsKLQkJCWJyZWFrOwotCQl9Ci0JCVNrR2VJbml0MihwQUMsIElvQyk7Ci0KLQkJLyogTGV2ZWwgMiBzdWNjZXNzZnVsbHkgcGFzc2VkICovCi0JCXBBQy0+R0luaS5HSUxldmVsID0gU0tfSU5JVF9SVU47Ci0JCWJyZWFrOwotCQotCWRlZmF1bHQ6Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfSFdJX0UwMDMsIFNLRVJSX0hXSV9FMDAzTVNHKTsKLQkJUmV0VmFsID0gMzsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuKFJldFZhbCk7Ci19CS8qIFNrR2VJbml0ICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VEZUluaXQoKSAtIERlaW5pdGlhbGl6ZSB0aGUgYWRhcHRlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJQWxsIHBvcnRzIG9mIHRoZSBhZGFwdGVyIHdpbGwgYmUgc3RvcHBlZCBpZiBub3QgYWxyZWFkeSBkb25lLgotICoJRG8gYSBzb2Z0d2FyZSByZXNldCBhbmQgc3dpdGNoIG9mZiBhbGwgTEVEcy4KLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrR2VEZUluaXQoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DKQkJLyogSU8gY29udGV4dCAqLwotewotCWludAlpOwotCVNLX1UxNglXb3JkOwotCi0jaWYgKCFkZWZpbmVkKFNLX1NMSU0pICYmICFkZWZpbmVkKFZDUFUpKQotCS8qIGVuc3VyZSBJMkMgaXMgcmVhZHkgKi8KLQlTa0kyY1dhaXRJcnEocEFDLCBJb0MpOwotI2VuZGlmCQotCi0JLyogc3RvcCBhbGwgY3VycmVudCB0cmFuc2ZlciBhY3Rpdml0eSAqLwotCWZvciAoaSA9IDA7IGkgPCBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlpZiAocEFDLT5HSW5pLkdQW2ldLlBTdGF0ZSAhPSBTS19QUlRfU1RPUCAmJgotCQkJcEFDLT5HSW5pLkdQW2ldLlBTdGF0ZSAhPSBTS19QUlRfUkVTRVQpIHsKLQotCQkJU2tHZVN0b3BQb3J0KHBBQywgSW9DLCBpLCBTS19TVE9QX0FMTCwgU0tfSEFSRF9SU1QpOwotCQl9Ci0JfQotCi0JLyogUmVzZXQgYWxsIGJpdHMgaW4gdGhlIFBDSSBTVEFUVVMgcmVnaXN0ZXIgKi8KLQkvKgotCSAqIE5vdGU6IFBDSSBDZmcgY3ljbGVzIGNhbm5vdCBiZSB1c2VkLCBiZWNhdXNlIHRoZXkgYXJlIG5vdAotCSAqCSBhdmFpbGFibGUgb24gc29tZSBwbGF0Zm9ybXMgYWZ0ZXIgJ2Jvb3QgdGltZScuCi0JICovCi0JU0tfSU4xNihJb0MsIFBDSV9DKFBDSV9TVEFUVVMpLCAmV29yZCk7Ci0JCi0JU0tfT1VUOChJb0MsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7Ci0JU0tfT1VUMTYoSW9DLCBQQ0lfQyhQQ0lfU1RBVFVTKSwgKFNLX1UxNikoV29yZCB8IFBDSV9FUlJCSVRTKSk7Ci0JU0tfT1VUOChJb0MsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOwotCi0JLyogZG8gdGhlIHJlc2V0LCBhbGwgTEVEcyBhcmUgc3dpdGNoZWQgb2ZmIG5vdyAqLwotCVNLX09VVDgoSW9DLCBCMF9DVFNULCBDU19SU1RfU0VUKTsKLQkKLQlwQUMtPkdJbmkuR0lMZXZlbCA9IFNLX0lOSVRfREFUQTsKLX0JLyogU2tHZURlSW5pdCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlSW5pdFBvcnQoKQlJbml0aWFsaXplIHRoZSBzcGVjaWZpZWQgcG9ydC4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVBSeFFTaXplLCBQWFNRU2l6ZSwgYW5kIFBYQVFTaXplIGhhcyB0byBiZQotICoJY29uZmlndXJlZCBmb3IgdGhlIHNwZWNpZmllZCBwb3J0IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKiAgVGhlIGRlc2NyaXB0b3IgcmluZ3MgaGFzIHRvIGJlIGluaXRpYWxpemVkIHRvby4KLSAqCi0gKglvIChSZSljb25maWd1cmUgcXVldWVzIG9mIHRoZSBzcGVjaWZpZWQgcG9ydC4KLSAqCW8gY29uZmlndXJlIHRoZSBNQUMgb2YgdGhlIHNwZWNpZmllZCBwb3J0LgotICoJbyBwdXQgQVNJQyBhbmQgTUFDKHMpIGluIG9wZXJhdGlvbmFsIG1vZGUuCi0gKglvIGluaXRpYWxpemUgUngvVHggYW5kIFN5bmMgTEVECi0gKglvIGluaXRpYWxpemUgUkFNIEJ1ZmZlcnMgYW5kIE1BQyBGSUZPcwotICoKLSAqCVRoZSBwb3J0IGlzIHJlYWR5IHRvIGNvbm5lY3Qgd2hlbiByZXR1cm5pbmcuCi0gKgotICogTm90ZToKLSAqCVRoZSBNQUMncyBSeCBhbmQgVHggc3RhdGUgbWFjaGluZSBpcyBzdGlsbCBkaXNhYmxlZCB3aGVuIHJldHVybmluZy4KLSAqCi0gKiBSZXR1cm5zOgotICoJMDoJc3VjY2VzcwotICoJMToJUXVldWUgc2l6ZSBpbml0aWFsaXphdGlvbiBlcnJvci4gVGhlIGNvbmZpZ3VyZWQgdmFsdWVzCi0gKgkJZm9yIFBSeFFTaXplLCBQWFNRU2l6ZSwgb3IgUFhBUVNpemUgYXJlIGludmFsaWQgZm9yIG9uZQotICoJCW9yIG1vcmUgcXVldWVzLiBUaGUgc3BlY2lmaWVkIHBvcnQgd2FzIE5PVCBpbml0aWFsaXplZC4KLSAqCQlBbiBlcnJvciBsb2cgZW50cnkgd2FzIGdlbmVyYXRlZC4KLSAqCTI6CVRoZSBwb3J0IGhhcyB0byBiZSBzdG9wcGVkIGJlZm9yZSBpdCBjYW4gYmUgaW5pdGlhbGl6ZWQgYWdhaW4uCi0gKi8KLWludCBTa0dlSW5pdFBvcnQoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCB0byBjb25maWd1cmUgKi8KLXsKLQlTS19HRVBPUlQgKnBQcnQ7Ci0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotCWlmIChTa0dlQ2hlY2tRU2l6ZShwQUMsIFBvcnQpICE9IDApIHsKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAwNCwgU0tFUlJfSFdJX0UwMDRNU0cpOwotCQlyZXR1cm4oMSk7Ci0JfQotCQotCWlmIChwUHJ0LT5QU3RhdGUgPT0gU0tfUFJUX0lOSVQgfHwgcFBydC0+UFN0YXRlID09IFNLX1BSVF9SVU4pIHsKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAwNSwgU0tFUlJfSFdJX0UwMDVNU0cpOwotCQlyZXR1cm4oMik7Ci0JfQotCi0JLyogY29uZmlndXJhdGlvbiBvaywgaW5pdGlhbGl6ZSB0aGUgUG9ydCBub3cgKi8KLQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkvKiBpbml0aWFsaXplIFJ4LCBUeCBhbmQgTGluayBMRUQgKi8KLQkJLyoKLQkJICogSWYgMTAwMEJUIFBoeSBuZWVkcyBMRUQgaW5pdGlhbGl6YXRpb24gdGhhbiBzd2FwCi0JCSAqIExFRCBhbmQgWE1BQyBpbml0aWFsaXphdGlvbiBvcmRlcgotCQkgKi8KLQkJU2tHZVhtaXRMRUQocEFDLCBJb0MsIE1SX0FERFIoUG9ydCwgVFhfTEVEX0lOSSksIFNLX0xFRF9FTkEpOwotCQlTa0dlWG1pdExFRChwQUMsIElvQywgTVJfQUREUihQb3J0LCBSWF9MRURfSU5JKSwgU0tfTEVEX0VOQSk7Ci0JCS8qIFRoZSBMaW5rIExFRCBpcyBpbml0aWFsaXplZCBieSBSTE1UIG9yIERpYWdub3N0aWNzIGl0c2VsZiAqLwotCQkKLQkJU2tYbUluaXRNYWMocEFDLCBJb0MsIFBvcnQpOwotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQotCQlTa0dtSW5pdE1hYyhwQUMsIElvQywgUG9ydCk7Ci0JfQotI2VuZGlmIC8qIFlVS09OICovCi0JCi0JLyogZG8gTk9UIGluaXRpYWxpemUgdGhlIExpbmsgU3luYyBDb3VudGVyICovCi0KLQlTa0dlSW5pdE1hY0ZpZm8ocEFDLCBJb0MsIFBvcnQpOwotCQotCVNrR2VJbml0UmFtQnVmcyhwQUMsIElvQywgUG9ydCk7Ci0JCi0JaWYgKHBQcnQtPlBYU1FTaXplICE9IDApIHsKLQkJLyogZW5hYmxlIEZvcmNlIFN5bmMgYml0IGlmIHN5bmNocm9ub3VzIHF1ZXVlIGF2YWlsYWJsZSAqLwotCQlTS19PVVQ4KElvQywgTVJfQUREUihQb3J0LCBUWEFfQ1RSTCksIFRYQV9FTkFfRlNZTkMpOwotCX0KLQkKLQlTa0dlSW5pdEJtdShwQUMsIElvQywgUG9ydCk7Ci0KLQkvKiBtYXJrIHBvcnQgYXMgaW5pdGlhbGl6ZWQgKi8KLQlwUHJ0LT5QU3RhdGUgPSBTS19QUlRfSU5JVDsKLQotCXJldHVybigwKTsKLX0JLyogU2tHZUluaXRQb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2VtaWIuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZW1pYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGU0NTA4My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2VtaWIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tnZW1pYi5jCi0gKiBQcm9qZWN0OglHRW5lc2lzLCBQQ0kgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMTEgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDkvMTUgMTM6Mzg6MTIgJAotICogUHVycG9zZToJUHJpdmF0ZSBOZXR3b3JrIE1hbmFnZW1lbnQgSW50ZXJmYWNlIE1hbmFnZW1lbnQgRGF0YWJhc2UKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdCBHbWJILgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFBSSVZBVEUgT0lEIGhhbmRsZXIgZnVuY3Rpb24gcHJvdG90eXBlcwotICovCi1QTk1JX1NUQVRJQyBpbnQgQWRkcihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgYWN0aW9uLAotCVNLX1UzMiBJZCwgY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsCi0JdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIFNLX1UzMiBOZXRJbmRleCk7Ci1QTk1JX1NUQVRJQyBpbnQgQ3N1bVN0YXQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGFjdGlvbiwgU0tfVTMyIElkLAotCWNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLAotCXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IEdlbmVyYWwoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGFjdGlvbiwgU0tfVTMyIElkLAotCWNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLAotCXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IE1hYzgwMjNTdGF0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIGludCBhY3Rpb24sIFNLX1UzMiBJZCwKLQljaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBJbnN0YW5jZSwKLQl1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgU0tfVTMyIE5ldEluZGV4KTsKLVBOTUlfU1RBVElDIGludCBNYWNQcml2YXRlQ29uZihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgYWN0aW9uLCBTS19VMzIgSWQsCi0JY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsCi0JdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIFNLX1UzMiBOZXRJbmRleCk7Ci1QTk1JX1NUQVRJQyBpbnQgTWFjUHJpdmF0ZVN0YXQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGFjdGlvbiwgU0tfVTMyIElkLAotCWNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLAotCXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IE1vbml0b3IoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGFjdGlvbiwKLQlTS19VMzIgSWQsIGNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLAotCXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IE9pZFN0cnVjdChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgYWN0aW9uLCBTS19VMzIgSWQsCi0JY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsCi0JdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIFNLX1UzMiBOZXRJbmRleCk7Ci1QTk1JX1NUQVRJQyBpbnQgUGVyZm9ybShTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgYWN0aW9uLCBTS19VMzIgSWQsCi0JY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50KiBwTGVuLCBTS19VMzIgSW5zdGFuY2UsCi0JdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIFNLX1UzMiBOZXRJbmRleCk7Ci1QTk1JX1NUQVRJQyBpbnQgUmxtdChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgYWN0aW9uLCBTS19VMzIgSWQsCi0JY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsCi0JdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIFNLX1UzMiBOZXRJbmRleCk7Ci1QTk1JX1NUQVRJQyBpbnQgUmxtdFN0YXQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGFjdGlvbiwgU0tfVTMyIElkLAotCWNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLAotCXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IFNlbnNvclN0YXQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGFjdGlvbiwgU0tfVTMyIElkLAotCWNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLAotCXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IFZwZChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgYWN0aW9uLCBTS19VMzIgSWQsCi0JY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsCi0JdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIFNLX1UzMiBOZXRJbmRleCk7Ci1QTk1JX1NUQVRJQyBpbnQgVmN0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIGludCBhY3Rpb24sIFNLX1UzMiBJZCwKLQljaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBJbnN0YW5jZSwKLQl1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgU0tfVTMyIE5ldEluZGV4KTsKLQotI2lmZGVmIFNLX1BPV0VSX01HTVQKLVBOTUlfU1RBVElDIGludCBQb3dlck1hbmFnZW1lbnQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGFjdGlvbiwgU0tfVTMyIElkLAotCWNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLAotCXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotI2VuZGlmIC8qIFNLX1BPV0VSX01HTVQgKi8KLQotI2lmZGVmIFNLX0RJQUdfU1VQUE9SVAotUE5NSV9TVEFUSUMgaW50IERpYWdBY3Rpb25zKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIGludCBhY3Rpb24sIFNLX1UzMiBJZCwKLQljaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBJbnN0YW5jZSwKLQl1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgU0tfVTMyIE5ldEluZGV4KTsKLSNlbmRpZiAvKiBTS19ESUFHX1NVUFBPUlQgKi8KLQotCi0vKiBkZWZpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIElEX1RBQkxFX1NJWkUJQVJSQVlfU0laRShJZFRhYmxlKQotCi0KLS8qIGdsb2JhbCB2YXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFRhYmxlIHRvIGNvcnJlbGF0ZSBPSUQgd2l0aCBoYW5kbGVyIGZ1bmN0aW9uIGFuZCBpbmRleCB0bwotICogaGFyZHdhcmUgcmVnaXN0ZXIgc3RvcmVkIGluIFN0YXRBZGRyZXNzIGlmIGFwcGxpY2FibGUuCi0gKi8KLVBOTUlfU1RBVElDIGNvbnN0IFNLX1BOTUlfVEFCX0VOVFJZIElkVGFibGVbXSA9IHsKLQl7T0lEX0dFTl9YTUlUX09LLAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFh9LAotCXtPSURfR0VOX1JDVl9PSywKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9STywgTWFjODAyM1N0YXQsIFNLX1BOTUlfSFJYfSwKLQl7T0lEX0dFTl9YTUlUX0VSUk9SLAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX0dFTl9SQ1ZfRVJST1IsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfR0VOX1JDVl9OT19CVUZGRVIsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlULAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfVU5JQ0FTVH0sCi0Je09JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlULAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfTVVMVElDQVNUfSwKLQl7T0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1hNSVQsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hUWF9CUk9BRENBU1R9LAotCXtPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hSWF9VTklDQVNUfSwKLQl7T0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDViwKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9STywgTWFjODAyM1N0YXQsIFNLX1BOTUlfSFJYX01VTFRJQ0FTVH0sCi0Je09JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hSWF9CUk9BRENBU1R9LAotCXtPSURfR0VOX1JDVl9DUkNfRVJST1IsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hSWF9GQ1N9LAotCXtPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCwKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUywKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9STywgTWFjODAyM1N0YXQsIDB9LAotCXtPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTLAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgMH0sCi0Je09JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5ULAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IUlhfRlJBTUlOR30sCi0Je09JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT04sCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hUWF9TSU5HTEVfQ09MfSwKLQl7T0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TLAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfTVVMVElfQ09MfSwKLQl7T0lEXzgwMl8zX1hNSVRfREVGRVJSRUQsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hUWF9ERUZGRVJBTH0sCi0Je09JRF84MDJfM19YTUlUX01BWF9DT0xMSVNJT05TLAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfRVhDRVNTX0NPTH0sCi0Je09JRF84MDJfM19SQ1ZfT1ZFUlJVTiwKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9STywgTWFjODAyM1N0YXQsIFNLX1BOTUlfSFJYX09WRVJGTE9XfSwKLQl7T0lEXzgwMl8zX1hNSVRfVU5ERVJSVU4sCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hUWF9VTkRFUlJVTn0sCi0Je09JRF84MDJfM19YTUlUX1RJTUVTX0NSU19MT1NULAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfQ0FSUklFUn0sCi0Je09JRF84MDJfM19YTUlUX0xBVEVfQ09MTElTSU9OUywKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9STywgTWFjODAyM1N0YXQsIFNLX1BOTUlfSFRYX0xBVEVfQ09MfSwKLSNpZmRlZiBTS19QT1dFUl9NR01UCi0Je09JRF9QTlBfQ0FQQUJJTElUSUVTLAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBQb3dlck1hbmFnZW1lbnQsIDB9LAotCXtPSURfUE5QX1NFVF9QT1dFUiwKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9XTywgUG93ZXJNYW5hZ2VtZW50LCAwfSwKLQl7T0lEX1BOUF9RVUVSWV9QT1dFUiwKLQkJMCwKLQkJMCwKLQkJMCwKLQkJU0tfUE5NSV9STywgUG93ZXJNYW5hZ2VtZW50LCAwfSwKLQl7T0lEX1BOUF9BRERfV0FLRV9VUF9QQVRURVJOLAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1dPLCBQb3dlck1hbmFnZW1lbnQsIDB9LAotCXtPSURfUE5QX1JFTU9WRV9XQUtFX1VQX1BBVFRFUk4sCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfV08sIFBvd2VyTWFuYWdlbWVudCwgMH0sCi0Je09JRF9QTlBfRU5BQkxFX1dBS0VfVVAsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUlcsIFBvd2VyTWFuYWdlbWVudCwgMH0sCi0jZW5kaWYgLyogU0tfUE9XRVJfTUdNVCAqLwotI2lmZGVmIFNLX0RJQUdfU1VQUE9SVAotCXtPSURfU0tHRV9ESUFHX01PREUsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUlcsIERpYWdBY3Rpb25zLCAwfSwKLSNlbmRpZiAvKiBTS19ESUFHX1NVUFBPUlQgKi8KLQl7T0lEX1NLR0VfTURCX1ZFUlNJT04sCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihNZ210REJWZXJzaW9uKSwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF9TS0dFX1NVUFBPUlRFRF9MSVNULAotCQkwLAotCQkwLAotCQkwLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfQUxMX0RBVEEsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUlcsIE9pZFN0cnVjdCwgMH0sCi0Je09JRF9TS0dFX1ZQRF9GUkVFX0JZVEVTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVnBkRnJlZUJ5dGVzKSwKLQkJU0tfUE5NSV9STywgVnBkLCAwfSwKLQl7T0lEX1NLR0VfVlBEX0VOVFJJRVNfTElTVCwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFZwZEVudHJpZXNMaXN0KSwKLQkJU0tfUE5NSV9STywgVnBkLCAwfSwKLQl7T0lEX1NLR0VfVlBEX0VOVFJJRVNfTlVNQkVSLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVnBkRW50cmllc051bWJlciksCi0JCVNLX1BOTUlfUk8sIFZwZCwgMH0sCi0Je09JRF9TS0dFX1ZQRF9LRVksCi0JCVNLX1BOTUlfVlBEX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1ZQRCksCi0JCVNLX1BOTUlfT0ZGKFZwZCkgKyBTS19QTk1JX1ZQRF9PRkYoVnBkS2V5KSwKLQkJU0tfUE5NSV9STywgVnBkLCAwfSwKLQl7T0lEX1NLR0VfVlBEX1ZBTFVFLAotCQlTS19QTk1JX1ZQRF9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9WUEQpLAotCQlTS19QTk1JX09GRihWcGQpICsgU0tfUE5NSV9WUERfT0ZGKFZwZFZhbHVlKSwKLQkJU0tfUE5NSV9STywgVnBkLCAwfSwKLQl7T0lEX1NLR0VfVlBEX0FDQ0VTUywKLQkJU0tfUE5NSV9WUERfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfVlBEKSwKLQkJU0tfUE5NSV9PRkYoVnBkKSArIFNLX1BOTUlfVlBEX09GRihWcGRBY2Nlc3MpLAotCQlTS19QTk1JX1JPLCBWcGQsIDB9LAotCXtPSURfU0tHRV9WUERfQUNUSU9OLAotCQlTS19QTk1JX1ZQRF9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9WUEQpLAotCQlTS19QTk1JX09GRihWcGQpICsgU0tfUE5NSV9WUERfT0ZGKFZwZEFjdGlvbiksCi0JCVNLX1BOTUlfUlcsIFZwZCwgMH0sCi0Je09JRF9TS0dFX1BPUlRfTlVNQkVSLAkJCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihQb3J0TnVtYmVyKSwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF9TS0dFX0RFVklDRV9UWVBFLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoRGV2aWNlVHlwZSksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9EUklWRVJfREVTQ1IsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihEcml2ZXJEZXNjciksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9EUklWRVJfVkVSU0lPTiwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKERyaXZlclZlcnNpb24pLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfRFJJVkVSX1JFTERBVEUsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihEcml2ZXJSZWxlYXNlRGF0ZSksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9EUklWRVJfRklMRU5BTUUsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihEcml2ZXJGaWxlTmFtZSksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9IV19ERVNDUiwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKEh3RGVzY3IpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfSFdfVkVSU0lPTiwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKEh3VmVyc2lvbiksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9DSElQU0VULAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoQ2hpcHNldCksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9DSElQSUQsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihDaGlwSWQpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfUkFNU0laRSwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFJhbVNpemUpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfVkFVWEFWQUlMLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVmF1eEF2YWlsKSwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF9TS0dFX0FDVElPTiwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKEFjdGlvbiksCi0JCVNLX1BOTUlfUlcsIFBlcmZvcm0sIDB9LAotCXtPSURfU0tHRV9SRVNVTFQsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihUZXN0UmVzdWx0KSwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF9TS0dFX0JVU19UWVBFLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoQnVzVHlwZSksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9CVVNfU1BFRUQsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihCdXNTcGVlZCksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9CVVNfV0lEVEgsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihCdXNXaWR0aCksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9UWF9TV19RVUVVRV9MRU4sCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihUeFN3UXVldWVMZW4pLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfVFhfU1dfUVVFVUVfTUFYLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVHhTd1F1ZXVlTWF4KSwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF9TS0dFX1RYX1JFVFJZLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVHhSZXRyeUN0cyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9SWF9JTlRSX0NUUywKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFJ4SW50ckN0cyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9UWF9JTlRSX0NUUywKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFR4SW50ckN0cyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9SWF9OT19CVUZfQ1RTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoUnhOb0J1ZkN0cyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9UWF9OT19CVUZfQ1RTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVHhOb0J1ZkN0cyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9UWF9VU0VEX0RFU0NSX05PLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVHhVc2VkRGVzY3JObyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9SWF9ERUxJVkVSRURfQ1RTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoUnhEZWxpdmVyZWRDdHMpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfUlhfT0NURVRTX0RFTElWX0NUUywKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFJ4T2N0ZXRzRGVsaXZlcmVkQ3RzKSwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF9TS0dFX1JYX0hXX0VSUk9SX0NUUywKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFJ4SHdFcnJvcnNDdHMpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfVFhfSFdfRVJST1JfQ1RTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVHhId0Vycm9yc0N0cyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9JTl9FUlJPUlNfQ1RTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoSW5FcnJvcnNDdHMpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfT1VUX0VSUk9SX0NUUywKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKE91dEVycm9yc0N0cyksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9FUlJfUkVDT1ZFUllfQ1RTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoRXJyUmVjb3ZlcnlDdHMpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfU1lTVVBUSU1FLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoU3lzVXBUaW1lKSwKLQkJU0tfUE5NSV9STywgR2VuZXJhbCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9OVU1CRVIsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihTZW5zb3JOdW1iZXIpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfU0VOU09SX0lOREVYLAotCQlTS19QTk1JX1NFTlNPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAotCQlTS19QTk1JX09GRihTZW5zb3IpICsgU0tfUE5NSV9TRU5fT0ZGKFNlbnNvckluZGV4KSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9ERVNDUiwKLQkJU0tfUE5NSV9TRU5TT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKLQkJU0tfUE5NSV9PRkYoU2Vuc29yKSArIFNLX1BOTUlfU0VOX09GRihTZW5zb3JEZXNjciksCi0JCVNLX1BOTUlfUk8sIFNlbnNvclN0YXQsIDB9LAotCXtPSURfU0tHRV9TRU5TT1JfVFlQRSwKLQkJU0tfUE5NSV9TRU5TT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKLQkJU0tfUE5NSV9PRkYoU2Vuc29yKSArIFNLX1BOTUlfU0VOX09GRihTZW5zb3JUeXBlKSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9WQUxVRSwKLQkJU0tfUE5NSV9TRU5TT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKLQkJU0tfUE5NSV9PRkYoU2Vuc29yKSArIFNLX1BOTUlfU0VOX09GRihTZW5zb3JWYWx1ZSksCi0JCVNLX1BOTUlfUk8sIFNlbnNvclN0YXQsIDB9LAotCXtPSURfU0tHRV9TRU5TT1JfV0FSX1RIUkVTX0xPVywKLQkJU0tfUE5NSV9TRU5TT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKLQkJU0tfUE5NSV9PRkYoU2Vuc29yKSArIFNLX1BOTUlfU0VOX09GRihTZW5zb3JXYXJuaW5nVGhyZXNob2xkTG93KSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9XQVJfVEhSRVNfVVBQLAotCQlTS19QTk1JX1NFTlNPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAotCQlTS19QTk1JX09GRihTZW5zb3IpICsgU0tfUE5NSV9TRU5fT0ZGKFNlbnNvcldhcm5pbmdUaHJlc2hvbGRIaWdoKSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9FUlJfVEhSRVNfTE9XLAotCQlTS19QTk1JX1NFTlNPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAotCQlTS19QTk1JX09GRihTZW5zb3IpICsgU0tfUE5NSV9TRU5fT0ZGKFNlbnNvckVycm9yVGhyZXNob2xkTG93KSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9FUlJfVEhSRVNfVVBQLAotCQlTS19QTk1JX1NFTlNPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAotCQlTS19QTk1JX09GRihTZW5zb3IpICsgU0tfUE5NSV9TRU5fT0ZGKFNlbnNvckVycm9yVGhyZXNob2xkSGlnaCksCi0JCVNLX1BOTUlfUk8sIFNlbnNvclN0YXQsIDB9LAotCXtPSURfU0tHRV9TRU5TT1JfU1RBVFVTLAotCQlTS19QTk1JX1NFTlNPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAotCQlTS19QTk1JX09GRihTZW5zb3IpICsgU0tfUE5NSV9TRU5fT0ZGKFNlbnNvclN0YXR1cyksCi0JCVNLX1BOTUlfUk8sIFNlbnNvclN0YXQsIDB9LAotCXtPSURfU0tHRV9TRU5TT1JfV0FSX0NUUywKLQkJU0tfUE5NSV9TRU5TT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKLQkJU0tfUE5NSV9PRkYoU2Vuc29yKSArIFNLX1BOTUlfU0VOX09GRihTZW5zb3JXYXJuaW5nQ3RzKSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9FUlJfQ1RTLAotCQlTS19QTk1JX1NFTlNPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAotCQlTS19QTk1JX09GRihTZW5zb3IpICsgU0tfUE5NSV9TRU5fT0ZGKFNlbnNvckVycm9yQ3RzKSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9XQVJfVElNRSwKLQkJU0tfUE5NSV9TRU5TT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKLQkJU0tfUE5NSV9PRkYoU2Vuc29yKSArIFNLX1BOTUlfU0VOX09GRihTZW5zb3JXYXJuaW5nVGltZXN0YW1wKSwKLQkJU0tfUE5NSV9STywgU2Vuc29yU3RhdCwgMH0sCi0Je09JRF9TS0dFX1NFTlNPUl9FUlJfVElNRSwKLQkJU0tfUE5NSV9TRU5TT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKLQkJU0tfUE5NSV9PRkYoU2Vuc29yKSArIFNLX1BOTUlfU0VOX09GRihTZW5zb3JFcnJvclRpbWVzdGFtcCksCi0JCVNLX1BOTUlfUk8sIFNlbnNvclN0YXQsIDB9LAotCXtPSURfU0tHRV9DSEtTTV9OVU1CRVIsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihDaGVja3N1bU51bWJlciksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9DSEtTTV9SWF9PS19DVFMsCi0JCVNLQ1NfTlVNX1BST1RPQ09MUywKLQkJc2l6ZW9mKFNLX1BOTUlfQ0hFQ0tTVU0pLAotCQlTS19QTk1JX09GRihDaGVja3N1bSkgKyBTS19QTk1JX0NIS19PRkYoQ2hlY2tzdW1SeE9rQ3RzKSwKLQkJU0tfUE5NSV9STywgQ3N1bVN0YXQsIDB9LAotCXtPSURfU0tHRV9DSEtTTV9SWF9VTkFCTEVfQ1RTLAotCQlTS0NTX05VTV9QUk9UT0NPTFMsCi0JCXNpemVvZihTS19QTk1JX0NIRUNLU1VNKSwKLQkJU0tfUE5NSV9PRkYoQ2hlY2tzdW0pICsgU0tfUE5NSV9DSEtfT0ZGKENoZWNrc3VtUnhVbmFibGVDdHMpLAotCQlTS19QTk1JX1JPLCBDc3VtU3RhdCwgMH0sCi0Je09JRF9TS0dFX0NIS1NNX1JYX0VSUl9DVFMsCi0JCVNLQ1NfTlVNX1BST1RPQ09MUywKLQkJc2l6ZW9mKFNLX1BOTUlfQ0hFQ0tTVU0pLAotCQlTS19QTk1JX09GRihDaGVja3N1bSkgKyBTS19QTk1JX0NIS19PRkYoQ2hlY2tzdW1SeEVyckN0cyksCi0JCVNLX1BOTUlfUk8sIENzdW1TdGF0LCAwfSwKLQl7T0lEX1NLR0VfQ0hLU01fVFhfT0tfQ1RTLAotCQlTS0NTX05VTV9QUk9UT0NPTFMsCi0JCXNpemVvZihTS19QTk1JX0NIRUNLU1VNKSwKLQkJU0tfUE5NSV9PRkYoQ2hlY2tzdW0pICsgU0tfUE5NSV9DSEtfT0ZGKENoZWNrc3VtVHhPa0N0cyksCi0JCVNLX1BOTUlfUk8sIENzdW1TdGF0LCAwfSwKLQl7T0lEX1NLR0VfQ0hLU01fVFhfVU5BQkxFX0NUUywKLQkJU0tDU19OVU1fUFJPVE9DT0xTLAotCQlzaXplb2YoU0tfUE5NSV9DSEVDS1NVTSksCi0JCVNLX1BOTUlfT0ZGKENoZWNrc3VtKSArIFNLX1BOTUlfQ0hLX09GRihDaGVja3N1bVR4VW5hYmxlQ3RzKSwKLQkJU0tfUE5NSV9STywgQ3N1bVN0YXQsIDB9LAotCXtPSURfU0tHRV9TVEFUX1RYLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4T2tDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFh9LAotCXtPSURfU0tHRV9TVEFUX1RYX09DVEVUUywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeE9jdGV0c09rQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX09DVEVUfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9CUk9BRENBU1QsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0VHhCcm9hZGNhc3RPa0N0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9CUk9BRENBU1R9LAotCXtPSURfU0tHRV9TVEFUX1RYX01VTFRJQ0FTVCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeE11bHRpY2FzdE9rQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX01VTFRJQ0FTVH0sCi0Je09JRF9TS0dFX1NUQVRfVFhfVU5JQ0FTVCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeFVuaWNhc3RPa0N0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9VTklDQVNUfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9MT05HRlJBTUVTLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4TG9uZ0ZyYW1lc0N0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9MT05HRlJBTUVTfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9CVVJTVCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeEJ1cnN0Q3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX0JVUlNUfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9QRkxPV0MsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0VHhQYXVzZU1hY0N0cmxDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfUE1BQ0N9LAotCXtPSURfU0tHRV9TVEFUX1RYX0ZMT1dDLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4TWFjQ3RybEN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9NQUNDfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9TSU5HTEVfQ09MLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4U2luZ2xlQ29sbGlzaW9uQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX1NJTkdMRV9DT0x9LAotCXtPSURfU0tHRV9TVEFUX1RYX01VTFRJX0NPTCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeE11bHRpcGxlQ29sbGlzaW9uQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX01VTFRJX0NPTH0sCi0Je09JRF9TS0dFX1NUQVRfVFhfRVhDRVNTX0NPTCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeEV4Y2Vzc2l2ZUNvbGxpc2lvbkN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9FWENFU1NfQ09MfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9MQVRFX0NPTCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeExhdGVDb2xsaXNpb25DdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfTEFURV9DT0x9LAotCXtPSURfU0tHRV9TVEFUX1RYX0RFRkZFUkFMLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4RGVmZXJyYWxDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfREVGRkVSQUx9LAotCXtPSURfU0tHRV9TVEFUX1RYX0VYQ0VTU19ERUYsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0VHhFeGNlc3NpdmVEZWZlcnJhbEN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9FWENFU1NfREVGfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9VTkRFUlJVTiwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeEZpZm9VbmRlcnJ1bkN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9VTkRFUlJVTn0sCi0Je09JRF9TS0dFX1NUQVRfVFhfQ0FSUklFUiwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeENhcnJpZXJDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfQ0FSUklFUn0sCi0vKgl7T0lEX1NLR0VfU1RBVF9UWF9VVElMLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4VXRpbGl6YXRpb24pLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgKFNLX1UxNikoLTEpfSwgKi8KLQl7T0lEX1NLR0VfU1RBVF9UWF82NCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeDY0Q3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYXzY0fSwKLQl7T0lEX1NLR0VfU1RBVF9UWF8xMjcsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0VHgxMjdDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfMTI3fSwKLQl7T0lEX1NLR0VfU1RBVF9UWF8yNTUsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0VHgyNTVDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfMjU1fSwKLQl7T0lEX1NLR0VfU1RBVF9UWF81MTEsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0VHg1MTFDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfNTExfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF8xMDIzLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4MTAyM0N0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF8xMDIzfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9NQVgsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0VHhNYXhDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfTUFYfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9TWU5DLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFR4U3luY0N0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9TWU5DfSwKLQl7T0lEX1NLR0VfU1RBVF9UWF9TWU5DX09DVEVUUywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRUeFN5bmNPY3RldHNDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfU1lOQ19PQ1RFVH0sCi0Je09JRF9TS0dFX1NUQVRfUlgsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhPa0N0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWH0sCi0Je09JRF9TS0dFX1NUQVRfUlhfT0NURVRTLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4T2N0ZXRzT2tDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfT0NURVR9LAotCXtPSURfU0tHRV9TVEFUX1JYX0JST0FEQ0FTVCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeEJyb2FkY2FzdE9rQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX0JST0FEQ0FTVH0sCi0Je09JRF9TS0dFX1NUQVRfUlhfTVVMVElDQVNULAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4TXVsdGljYXN0T2tDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfTVVMVElDQVNUfSwKLQl7T0lEX1NLR0VfU1RBVF9SWF9VTklDQVNULAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4VW5pY2FzdE9rQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX1VOSUNBU1R9LAotCXtPSURfU0tHRV9TVEFUX1JYX0xPTkdGUkFNRVMsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhMb25nRnJhbWVzQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX0xPTkdGUkFNRVN9LAotCXtPSURfU0tHRV9TVEFUX1JYX1BGTE9XQywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeFBhdXNlTWFjQ3RybEN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9QTUFDQ30sCi0Je09JRF9TS0dFX1NUQVRfUlhfRkxPV0MsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhNYWNDdHJsQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX01BQ0N9LAotCXtPSURfU0tHRV9TVEFUX1JYX1BGTE9XQ19FUlIsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhQYXVzZU1hY0N0cmxFcnJvckN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9QTUFDQ19FUlJ9LAotCXtPSURfU0tHRV9TVEFUX1JYX0ZMT1dDX1VOS1dOLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4TWFjQ3RybFVua25vd25DdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfTUFDQ19VTktXTn0sCi0Je09JRF9TS0dFX1NUQVRfUlhfQlVSU1QsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhCdXJzdEN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9CVVJTVH0sCi0Je09JRF9TS0dFX1NUQVRfUlhfTUlTU0VELAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4TWlzc2VkQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX01JU1NFRH0sCi0Je09JRF9TS0dFX1NUQVRfUlhfRlJBTUlORywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeEZyYW1pbmdDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfRlJBTUlOR30sCi0Je09JRF9TS0dFX1NUQVRfUlhfT1ZFUkZMT1csCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhGaWZvT3ZlcmZsb3dDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfT1ZFUkZMT1d9LAotCXtPSURfU0tHRV9TVEFUX1JYX0pBQkJFUiwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeEphYmJlckN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9KQUJCRVJ9LAotCXtPSURfU0tHRV9TVEFUX1JYX0NBUlJJRVIsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhDYXJyaWVyQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX0NBUlJJRVJ9LAotCXtPSURfU0tHRV9TVEFUX1JYX0lSX0xFTkdUSCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeElSTGVuZ3RoQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX0lSTEVOR1RIfSwKLQl7T0lEX1NLR0VfU1RBVF9SWF9TWU1CT0wsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhTeW1ib2xDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfU1lNQk9MfSwKLQl7T0lEX1NLR0VfU1RBVF9SWF9TSE9SVFMsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0UnhTaG9ydHNDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfU0hPUlRTfSwKLQl7T0lEX1NLR0VfU1RBVF9SWF9SVU5ULAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4UnVudEN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9SVU5UfSwKLQl7T0lEX1NLR0VfU1RBVF9SWF9DRVhULAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4Q2V4dEN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9DRVhUfSwKLQl7T0lEX1NLR0VfU1RBVF9SWF9UT09fTE9ORywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeFRvb0xvbmdDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfVE9PX0xPTkd9LAotCXtPSURfU0tHRV9TVEFUX1JYX0ZDUywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeEZjc0N0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9GQ1N9LAotLyoJe09JRF9TS0dFX1NUQVRfUlhfVVRJTCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeFV0aWxpemF0aW9uKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIChTS19VMTYpKC0xKX0sICovCi0Je09JRF9TS0dFX1NUQVRfUlhfNjQsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1NUQVQpLAotCQlTS19QTk1JX09GRihTdGF0KSArIFNLX1BOTUlfU1RBX09GRihTdGF0Ung2NEN0cyksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF82NH0sCi0Je09JRF9TS0dFX1NUQVRfUlhfMTI3LAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4MTI3Q3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYXzEyN30sCi0Je09JRF9TS0dFX1NUQVRfUlhfMjU1LAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4MjU1Q3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYXzI1NX0sCi0Je09JRF9TS0dFX1NUQVRfUlhfNTExLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4NTExQ3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYXzUxMX0sCi0Je09JRF9TS0dFX1NUQVRfUlhfMTAyMywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfU1RBVCksCi0JCVNLX1BOTUlfT0ZGKFN0YXQpICsgU0tfUE5NSV9TVEFfT0ZGKFN0YXRSeDEwMjNDdHMpLAotCQlTS19QTk1JX1JPLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfMTAyM30sCi0Je09JRF9TS0dFX1NUQVRfUlhfTUFYLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9TVEFUKSwKLQkJU0tfUE5NSV9PRkYoU3RhdCkgKyBTS19QTk1JX1NUQV9PRkYoU3RhdFJ4TWF4Q3RzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX01BWH0sCi0Je09JRF9TS0dFX1BIWVNfQ1VSX0FERFIsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mTWFjQ3VycmVudEFkZHIpLAotCQlTS19QTk1JX1JXLCBBZGRyLCAwfSwKLQl7T0lEX1NLR0VfUEhZU19GQUNfQUREUiwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfQ09ORiksCi0JCVNLX1BOTUlfT0ZGKENvbmYpICsgU0tfUE5NSV9DTkZfT0ZGKENvbmZNYWNGYWN0b3J5QWRkciksCi0JCVNLX1BOTUlfUk8sIEFkZHIsIDB9LAotCXtPSURfU0tHRV9QTUQsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mUE1EKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9DT05ORUNUT1IsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mQ29ubmVjdG9yKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9QSFlfVFlQRSwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfQ09ORiksCi0JCVNLX1BOTUlfT0ZGKENvbmYpICsgU0tfUE5NSV9DTkZfT0ZGKENvbmZQaHlUeXBlKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9MSU5LX0NBUCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfQ09ORiksCi0JCVNLX1BOTUlfT0ZGKENvbmYpICsgU0tfUE5NSV9DTkZfT0ZGKENvbmZMaW5rQ2FwYWJpbGl0eSksCi0JCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVDb25mLCAwfSwKLQl7T0lEX1NLR0VfTElOS19NT0RFLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9DT05GKSwKLQkJU0tfUE5NSV9PRkYoQ29uZikgKyBTS19QTk1JX0NORl9PRkYoQ29uZkxpbmtNb2RlKSwKLQkJU0tfUE5NSV9SVywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9MSU5LX01PREVfU1RBVFVTLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9DT05GKSwKLQkJU0tfUE5NSV9PRkYoQ29uZikgKyBTS19QTk1JX0NORl9PRkYoQ29uZkxpbmtNb2RlU3RhdHVzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9MSU5LX1NUQVRVUywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfQ09ORiksCi0JCVNLX1BOTUlfT0ZGKENvbmYpICsgU0tfUE5NSV9DTkZfT0ZGKENvbmZMaW5rU3RhdHVzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9GTE9XQ1RSTF9DQVAsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mRmxvd0N0cmxDYXBhYmlsaXR5KSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9GTE9XQ1RSTF9NT0RFLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9DT05GKSwKLQkJU0tfUE5NSV9PRkYoQ29uZikgKyBTS19QTk1JX0NORl9PRkYoQ29uZkZsb3dDdHJsTW9kZSksCi0JCVNLX1BOTUlfUlcsIE1hY1ByaXZhdGVDb25mLCAwfSwKLQl7T0lEX1NLR0VfRkxPV0NUUkxfU1RBVFVTLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9DT05GKSwKLQkJU0tfUE5NSV9PRkYoQ29uZikgKyBTS19QTk1JX0NORl9PRkYoQ29uZkZsb3dDdHJsU3RhdHVzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9QSFlfT1BFUkFUSU9OX0NBUCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfQ09ORiksCi0JCVNLX1BOTUlfT0ZGKENvbmYpICsgU0tfUE5NSV9DTkZfT0ZGKENvbmZQaHlPcGVyYXRpb25DYXBhYmlsaXR5KSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9QSFlfT1BFUkFUSU9OX01PREUsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mUGh5T3BlcmF0aW9uTW9kZSksCi0JCVNLX1BOTUlfUlcsIE1hY1ByaXZhdGVDb25mLCAwfSwKLQl7T0lEX1NLR0VfUEhZX09QRVJBVElPTl9TVEFUVVMsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mUGh5T3BlcmF0aW9uU3RhdHVzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9TUEVFRF9DQVAsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mU3BlZWRDYXBhYmlsaXR5KSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9TUEVFRF9NT0RFLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9DT05GKSwKLQkJU0tfUE5NSV9PRkYoQ29uZikgKyBTS19QTk1JX0NORl9PRkYoQ29uZlNwZWVkTW9kZSksCi0JCVNLX1BOTUlfUlcsIE1hY1ByaXZhdGVDb25mLCAwfSwKLQl7T0lEX1NLR0VfU1BFRURfU1RBVFVTLAotCQlTS19QTk1JX01BQ19FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9DT05GKSwKLQkJU0tfUE5NSV9PRkYoQ29uZikgKyBTS19QTk1JX0NORl9PRkYoQ29uZlNwZWVkU3RhdHVzKSwKLQkJU0tfUE5NSV9STywgTWFjUHJpdmF0ZUNvbmYsIDB9LAotCXtPSURfU0tHRV9UUkFQLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoVHJhcCksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9UUkFQX05VTUJFUiwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFRyYXBOdW1iZXIpLAotCQlTS19QTk1JX1JPLCBHZW5lcmFsLCAwfSwKLQl7T0lEX1NLR0VfUkxNVF9NT0RFLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoUmxtdE1vZGUpLAotCQlTS19QTk1JX1JXLCBSbG10LCAwfSwKLQl7T0lEX1NLR0VfUkxNVF9QT1JUX05VTUJFUiwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKFJsbXRQb3J0TnVtYmVyKSwKLQkJU0tfUE5NSV9STywgUmxtdCwgMH0sCi0Je09JRF9TS0dFX1JMTVRfUE9SVF9BQ1RJVkUsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihSbG10UG9ydEFjdGl2ZSksCi0JCVNLX1BOTUlfUk8sIFJsbXQsIDB9LAotCXtPSURfU0tHRV9STE1UX1BPUlRfUFJFRkVSUkVELAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoUmxtdFBvcnRQcmVmZXJyZWQpLAotCQlTS19QTk1JX1JXLCBSbG10LCAwfSwKLQl7T0lEX1NLR0VfUkxNVF9DSEFOR0VfQ1RTLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoUmxtdENoYW5nZUN0cyksCi0JCVNLX1BOTUlfUk8sIFJsbXQsIDB9LAotCXtPSURfU0tHRV9STE1UX0NIQU5HRV9USU1FLAotCQkxLAotCQkwLAotCQlTS19QTk1JX01BSV9PRkYoUmxtdENoYW5nZVRpbWUpLAotCQlTS19QTk1JX1JPLCBSbG10LCAwfSwKLQl7T0lEX1NLR0VfUkxNVF9DSEFOR0VfRVNUSU0sCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihSbG10Q2hhbmdlRXN0aW1hdGUpLAotCQlTS19QTk1JX1JPLCBSbG10LCAwfSwKLQl7T0lEX1NLR0VfUkxNVF9DSEFOR0VfVEhSRVMsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihSbG10Q2hhbmdlVGhyZXNob2xkKSwKLQkJU0tfUE5NSV9SVywgUmxtdCwgMH0sCi0Je09JRF9TS0dFX1JMTVRfUE9SVF9JTkRFWCwKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfUkxNVCksCi0JCVNLX1BOTUlfT0ZGKFJsbXQpICsgU0tfUE5NSV9STE1fT0ZGKFJsbXRJbmRleCksCi0JCVNLX1BOTUlfUk8sIFJsbXRTdGF0LCAwfSwKLQl7T0lEX1NLR0VfUkxNVF9TVEFUVVMsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1JMTVQpLAotCQlTS19QTk1JX09GRihSbG10KSArIFNLX1BOTUlfUkxNX09GRihSbG10U3RhdHVzKSwKLQkJU0tfUE5NSV9STywgUmxtdFN0YXQsIDB9LAotCXtPSURfU0tHRV9STE1UX1RYX0hFTExPX0NUUywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfUkxNVCksCi0JCVNLX1BOTUlfT0ZGKFJsbXQpICsgU0tfUE5NSV9STE1fT0ZGKFJsbXRUeEhlbGxvQ3RzKSwKLQkJU0tfUE5NSV9STywgUmxtdFN0YXQsIDB9LAotCXtPSURfU0tHRV9STE1UX1JYX0hFTExPX0NUUywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfUkxNVCksCi0JCVNLX1BOTUlfT0ZGKFJsbXQpICsgU0tfUE5NSV9STE1fT0ZGKFJsbXRSeEhlbGxvQ3RzKSwKLQkJU0tfUE5NSV9STywgUmxtdFN0YXQsIDB9LAotCXtPSURfU0tHRV9STE1UX1RYX1NQX1JFUV9DVFMsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1JMTVQpLAotCQlTS19QTk1JX09GRihSbG10KSArIFNLX1BOTUlfUkxNX09GRihSbG10VHhTcEhlbGxvUmVxQ3RzKSwKLQkJU0tfUE5NSV9STywgUmxtdFN0YXQsIDB9LAotCXtPSURfU0tHRV9STE1UX1JYX1NQX0NUUywKLQkJU0tfUE5NSV9NQUNfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfUkxNVCksCi0JCVNLX1BOTUlfT0ZGKFJsbXQpICsgU0tfUE5NSV9STE1fT0ZGKFJsbXRSeFNwSGVsbG9DdHMpLAotCQlTS19QTk1JX1JPLCBSbG10U3RhdCwgMH0sCi0Je09JRF9TS0dFX1JMTVRfTU9OSVRPUl9OVU1CRVIsCi0JCTEsCi0JCTAsCi0JCVNLX1BOTUlfTUFJX09GRihSbG10TW9uaXRvck51bWJlciksCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotCXtPSURfU0tHRV9STE1UX01PTklUT1JfSU5ERVgsCi0JCVNLX1BOTUlfTU9OSVRPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9STE1UX01PTklUT1IpLAotCQlTS19QTk1JX09GRihSbG10TW9uaXRvcikgKyBTS19QTk1JX01PTl9PRkYoUmxtdE1vbml0b3JJbmRleCksCi0JCVNLX1BOTUlfUk8sIE1vbml0b3IsIDB9LAotCXtPSURfU0tHRV9STE1UX01PTklUT1JfQUREUiwKLQkJU0tfUE5NSV9NT05JVE9SX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1JMTVRfTU9OSVRPUiksCi0JCVNLX1BOTUlfT0ZGKFJsbXRNb25pdG9yKSArIFNLX1BOTUlfTU9OX09GRihSbG10TW9uaXRvckFkZHIpLAotCQlTS19QTk1JX1JPLCBNb25pdG9yLCAwfSwKLQl7T0lEX1NLR0VfUkxNVF9NT05JVE9SX0VSUlMsCi0JCVNLX1BOTUlfTU9OSVRPUl9FTlRSSUVTLAotCQlzaXplb2YoU0tfUE5NSV9STE1UX01PTklUT1IpLAotCQlTS19QTk1JX09GRihSbG10TW9uaXRvcikgKyBTS19QTk1JX01PTl9PRkYoUmxtdE1vbml0b3JFcnJvckN0cyksCi0JCVNLX1BOTUlfUk8sIE1vbml0b3IsIDB9LAotCXtPSURfU0tHRV9STE1UX01PTklUT1JfVElNRVNUQU1QLAotCQlTS19QTk1JX01PTklUT1JfRU5UUklFUywKLQkJc2l6ZW9mKFNLX1BOTUlfUkxNVF9NT05JVE9SKSwKLQkJU0tfUE5NSV9PRkYoUmxtdE1vbml0b3IpICsgU0tfUE5NSV9NT05fT0ZGKFJsbXRNb25pdG9yVGltZXN0YW1wKSwKLQkJU0tfUE5NSV9STywgTW9uaXRvciwgMH0sCi0Je09JRF9TS0dFX1JMTVRfTU9OSVRPUl9BRE1JTiwKLQkJU0tfUE5NSV9NT05JVE9SX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX1JMTVRfTU9OSVRPUiksCi0JCVNLX1BOTUlfT0ZGKFJsbXRNb25pdG9yKSArIFNLX1BOTUlfTU9OX09GRihSbG10TW9uaXRvckFkbWluKSwKLQkJU0tfUE5NSV9SVywgTW9uaXRvciwgMH0sCi0Je09JRF9TS0dFX01UVSwKLQkJMSwKLQkJMCwKLQkJU0tfUE5NSV9NQUlfT0ZGKE10dVNpemUpLAotCQlTS19QTk1JX1JXLCBNYWNQcml2YXRlQ29uZiwgMH0sCi0Je09JRF9TS0dFX1ZDVF9HRVQsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIFZjdCwgMH0sCi0Je09JRF9TS0dFX1ZDVF9TRVQsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfV08sIFZjdCwgMH0sCi0Je09JRF9TS0dFX1ZDVF9TVEFUVVMsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIFZjdCwgMH0sCi0Je09JRF9TS0dFX0JPQVJETEVWRUwsCi0JCTAsCi0JCTAsCi0JCTAsCi0JCVNLX1BOTUlfUk8sIEdlbmVyYWwsIDB9LAotfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlcG5taS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlcG5taS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzZiYjIxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZXBubWkuYworKysgL2Rldi9udWxsCkBAIC0xLDgxOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tnZXBubWkuYwotICogUHJvamVjdDoJR0VuZXNpcywgUENJIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjExMSAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8wOS8xNSAxMzozNTozNSAkCi0gKiBQdXJwb3NlOglQcml2YXRlIE5ldHdvcmsgTWFuYWdlbWVudCBJbnRlcmZhY2UKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdCBHbWJILgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIF9saW50Ci1zdGF0aWMgY29uc3QgY2hhciBTeXNLb25uZWN0RmlsZUlkW10gPQotCSJAKCMpICRJZDogc2tnZXBubWkuYyx2IDEuMTExIDIwMDMvMDkvMTUgMTM6MzU6MzUgdHNjaGlsbGkgRXhwICQgKEMpIE1hcnZlbGwuIjsKLSNlbmRpZiAvKiAhX2xpbnQgKi8KLQotI2luY2x1ZGUgImgvc2tkcnYxc3QuaCIKLSNpbmNsdWRlICJoL3NrdHlwZXMuaCIKLSNpbmNsdWRlICJoL3htYWNfaWkuaCIKLSNpbmNsdWRlICJoL3NrZGVidWcuaCIKLSNpbmNsdWRlICJoL3NrcXVldWUuaCIKLSNpbmNsdWRlICJoL3NrZ2Vwbm1pLmgiCi0jaW5jbHVkZSAiaC9za2dlc2lycS5oIgotI2luY2x1ZGUgImgvc2tjc3VtLmgiCi0jaW5jbHVkZSAiaC9za3ZwZC5oIgotI2luY2x1ZGUgImgvc2tnZWh3LmgiCi0jaW5jbHVkZSAiaC9za2dlaW5pdC5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLSNpbmNsdWRlICJoL3NrZ2Vwbm0yLmgiCi0jaWZkZWYgU0tfUE9XRVJfTUdNVAotI2luY2x1ZGUgImgvc2tnZXBtZ3QuaCIKLSNlbmRpZgotLyogZGVmaW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIERFQlVHCi0jZGVmaW5lIFBOTUlfU1RBVElDCXN0YXRpYwotI2Vsc2UJLyogREVCVUcgKi8KLSNkZWZpbmUgUE5NSV9TVEFUSUMKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0vKgotICogUHVibGljIEZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotaW50IFNrUG5taUluaXQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IGxldmVsKTsKLWludCBTa1BubWlTZXRWYXIoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIElkLCB2b2lkICpwQnVmLAotCXVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLCBTS19VMzIgTmV0SW5kZXgpOwotaW50IFNrUG5taUdldFN0cnVjdChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB2b2lkICpwQnVmLAotCXVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIE5ldEluZGV4KTsKLWludCBTa1BubWlQcmVTZXRTdHJ1Y3QoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgdm9pZCAqcEJ1ZiwKLQl1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBOZXRJbmRleCk7Ci1pbnQgU2tQbm1pU2V0U3RydWN0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIHZvaWQgKnBCdWYsCi0JdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgTmV0SW5kZXgpOwotaW50IFNrUG5taUV2ZW50KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBFdmVudCwgU0tfRVZQQVJBIFBhcmFtKTsKLWludCBTa1BubWlHZW5Jb2N0bChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB2b2lkICogcEJ1ZiwKLQl1bnNpZ25lZCBpbnQgKiBwTGVuLCBTS19VMzIgTmV0SW5kZXgpOwotCi0KLS8qCi0gKiBQcml2YXRlIEZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotCi1QTk1JX1NUQVRJQyBTS19VOCBDYWxjdWxhdGVMaW5rTW9kZVN0YXR1cyhTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB1bnNpZ25lZCBpbnQKLQlQaHlzUG9ydEluZGV4KTsKLVBOTUlfU1RBVElDIFNLX1U4IENhbGN1bGF0ZUxpbmtTdGF0dXMoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgdW5zaWduZWQgaW50Ci0JUGh5c1BvcnRJbmRleCk7Ci1QTk1JX1NUQVRJQyB2b2lkIENvcHlNYWMoY2hhciAqcERzdCwgU0tfTUFDX0FERFIgKnBNYWMpOwotUE5NSV9TVEFUSUMgdm9pZCBDb3B5VHJhcFF1ZXVlKFNLX0FDICpwQUMsIGNoYXIgKnBEc3RCdWYpOwotUE5NSV9TVEFUSUMgU0tfVTY0IEdldFBoeXNTdGF0VmFsKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsCi0JdW5zaWduZWQgaW50IFBoeXNQb3J0SW5kZXgsIHVuc2lnbmVkIGludCBTdGF0SW5kZXgpOwotUE5NSV9TVEFUSUMgU0tfVTY0IEdldFN0YXRWYWwoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgdW5zaWduZWQgaW50IExvZ1BvcnRJbmRleCwKLQl1bnNpZ25lZCBpbnQgU3RhdEluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgY2hhciogR2V0VHJhcEVudHJ5KFNLX0FDICpwQUMsIFNLX1UzMiBUcmFwSWQsIHVuc2lnbmVkIGludCBTaXplKTsKLVBOTUlfU1RBVElDIHZvaWQgR2V0VHJhcFF1ZXVlTGVuKFNLX0FDICpwQUMsIHVuc2lnbmVkIGludCAqcExlbiwKLQl1bnNpZ25lZCBpbnQgKnBFbnRyaWVzKTsKLVBOTUlfU1RBVElDIGludCBHZXRWcGRLZXlBcnIoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgY2hhciAqcEtleUFyciwKLQl1bnNpZ25lZCBpbnQgS2V5QXJyTGVuLCB1bnNpZ25lZCBpbnQgKnBLZXlObyk7Ci1QTk1JX1NUQVRJQyBpbnQgTG9va3VwSWQoU0tfVTMyIElkKTsKLVBOTUlfU1RBVElDIGludCBNYWNVcGRhdGUoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgdW5zaWduZWQgaW50IEZpcnN0TWFjLAotCXVuc2lnbmVkIGludCBMYXN0TWFjKTsKLVBOTUlfU1RBVElDIGludCBQbm1pU3RydWN0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIGludCBBY3Rpb24sIGNoYXIgKnBCdWYsCi0JdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IFBubWlWYXIoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IEFjdGlvbiwgU0tfVTMyIElkLAotCWNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgdm9pZCBRdWV1ZVJsbXROZXdNYWNUcmFwKFNLX0FDICpwQUMsIHVuc2lnbmVkIGludCBBY3RpdmVNYWMpOwotUE5NSV9TVEFUSUMgdm9pZCBRdWV1ZVJsbXRQb3J0VHJhcChTS19BQyAqcEFDLCBTS19VMzIgVHJhcElkLAotCXVuc2lnbmVkIGludCBQb3J0SW5kZXgpOwotUE5NSV9TVEFUSUMgdm9pZCBRdWV1ZVNlbnNvclRyYXAoU0tfQUMgKnBBQywgU0tfVTMyIFRyYXBJZCwKLQl1bnNpZ25lZCBpbnQgU2Vuc29ySW5kZXgpOwotUE5NSV9TVEFUSUMgdm9pZCBRdWV1ZVNpbXBsZVRyYXAoU0tfQUMgKnBBQywgU0tfVTMyIFRyYXBJZCk7Ci1QTk1JX1NUQVRJQyB2b2lkIFJlc2V0Q291bnRlcihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgaW50IFJsbXRVcGRhdGUoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIE5ldEluZGV4KTsKLVBOTUlfU1RBVElDIGludCBTaXJxVXBkYXRlKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MpOwotUE5NSV9TVEFUSUMgdm9pZCBWaXJ0dWFsQ29uZihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgSWQsIGNoYXIgKnBCdWYpOwotUE5NSV9TVEFUSUMgaW50IFZjdChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgQWN0aW9uLCBTS19VMzIgSWQsIGNoYXIgKnBCdWYsCi0JdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsIHVuc2lnbmVkIGludCBUYWJsZUluZGV4LCBTS19VMzIgTmV0SW5kZXgpOwotUE5NSV9TVEFUSUMgdm9pZCBDaGVja1ZjdFN0YXR1cyhTS19BQyAqLCBTS19JT0MsIGNoYXIgKiwgU0tfVTMyLCBTS19VMzIpOwotCi0vKgotICogVGFibGUgdG8gY29ycmVsYXRlIE9JRCB3aXRoIGhhbmRsZXIgZnVuY3Rpb24gYW5kIGluZGV4IHRvCi0gKiBoYXJkd2FyZSByZWdpc3RlciBzdG9yZWQgaW4gU3RhdEFkZHJlc3MgaWYgYXBwbGljYWJsZS4KLSAqLwotI2luY2x1ZGUgInNrZ2VtaWIuYyIKLQotLyogZ2xvYmFsIHZhcmlhYmxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogT3ZlcmZsb3cgc3RhdHVzIHJlZ2lzdGVyIGJpdCB0YWJsZSBhbmQgY29ycmVzcG9uZGluZyBjb3VudGVyCi0gKiBkZXBlbmRlbnQgb24gTUFDIHR5cGUgLSB0aGUgbnVtYmVyIHJlbGF0ZXMgdG8gdGhlIHNpemUgb2Ygb3ZlcmZsb3cKLSAqIG1hc2sgcmV0dXJuZWQgYnkgdGhlIHBGbk1hY092ZXJmbG93IGZ1bmN0aW9uCi0gKi8KLVBOTUlfU1RBVElDIGNvbnN0IFNLX1UxNiBTdGF0T3ZyZmx3Qml0W11bU0tfUE5NSV9NQUNfVFlQRVNdID0gewotLyogQml0MCAgKi8JeyBTS19QTk1JX0hUWCwgCQkJCVNLX1BOTUlfSFRYX1VOSUNBU1R9LAotLyogQml0MSAgKi8JeyBTS19QTk1JX0hUWF9PQ1RFVEhJR0gsIAlTS19QTk1JX0hUWF9CUk9BRENBU1R9LAotLyogQml0MiAgKi8JeyBTS19QTk1JX0hUWF9PQ1RFVExPVywgCVNLX1BOTUlfSFRYX1BNQUNDfSwKLS8qIEJpdDMgICovCXsgU0tfUE5NSV9IVFhfQlJPQURDQVNULCAJU0tfUE5NSV9IVFhfTVVMVElDQVNUfSwKLS8qIEJpdDQgICovCXsgU0tfUE5NSV9IVFhfTVVMVElDQVNULCAJU0tfUE5NSV9IVFhfT0NURVRMT1d9LAotLyogQml0NSAgKi8JeyBTS19QTk1JX0hUWF9VTklDQVNULCAJCVNLX1BOTUlfSFRYX09DVEVUSElHSH0sCi0vKiBCaXQ2ICAqLwl7IFNLX1BOTUlfSFRYX0xPTkdGUkFNRVMsIAlTS19QTk1JX0hUWF82NH0sCi0vKiBCaXQ3ICAqLwl7IFNLX1BOTUlfSFRYX0JVUlNULCAJCVNLX1BOTUlfSFRYXzEyN30sCi0vKiBCaXQ4ICAqLwl7IFNLX1BOTUlfSFRYX1BNQUNDLCAJCVNLX1BOTUlfSFRYXzI1NX0sCi0vKiBCaXQ5ICAqLwl7IFNLX1BOTUlfSFRYX01BQ0MsIAkJU0tfUE5NSV9IVFhfNTExfSwKLS8qIEJpdDEwICovCXsgU0tfUE5NSV9IVFhfU0lOR0xFX0NPTCwgCVNLX1BOTUlfSFRYXzEwMjN9LAotLyogQml0MTEgKi8JeyBTS19QTk1JX0hUWF9NVUxUSV9DT0wsIAlTS19QTk1JX0hUWF9NQVh9LAotLyogQml0MTIgKi8JeyBTS19QTk1JX0hUWF9FWENFU1NfQ09MLCAJU0tfUE5NSV9IVFhfTE9OR0ZSQU1FU30sCi0vKiBCaXQxMyAqLwl7IFNLX1BOTUlfSFRYX0xBVEVfQ09MLCAJU0tfUE5NSV9IVFhfUkVTRVJWRUR9LAotLyogQml0MTQgKi8JeyBTS19QTk1JX0hUWF9ERUZGRVJBTCwgCVNLX1BOTUlfSFRYX0NPTH0sCi0vKiBCaXQxNSAqLwl7IFNLX1BOTUlfSFRYX0VYQ0VTU19ERUYsIAlTS19QTk1JX0hUWF9MQVRFX0NPTH0sCi0vKiBCaXQxNiAqLwl7IFNLX1BOTUlfSFRYX1VOREVSUlVOLCAJU0tfUE5NSV9IVFhfRVhDRVNTX0NPTH0sCi0vKiBCaXQxNyAqLwl7IFNLX1BOTUlfSFRYX0NBUlJJRVIsIAkJU0tfUE5NSV9IVFhfTVVMVElfQ09MfSwKLS8qIEJpdDE4ICovCXsgU0tfUE5NSV9IVFhfVVRJTFVOREVSLCAJU0tfUE5NSV9IVFhfU0lOR0xFX0NPTH0sCi0vKiBCaXQxOSAqLwl7IFNLX1BOTUlfSFRYX1VUSUxPVkVSLCAJU0tfUE5NSV9IVFhfVU5ERVJSVU59LAotLyogQml0MjAgKi8JeyBTS19QTk1JX0hUWF82NCwgCQkJU0tfUE5NSV9IVFhfUkVTRVJWRUR9LAotLyogQml0MjEgKi8JeyBTS19QTk1JX0hUWF8xMjcsIAkJCVNLX1BOTUlfSFRYX1JFU0VSVkVEfSwKLS8qIEJpdDIyICovCXsgU0tfUE5NSV9IVFhfMjU1LCAJCQlTS19QTk1JX0hUWF9SRVNFUlZFRH0sCi0vKiBCaXQyMyAqLwl7IFNLX1BOTUlfSFRYXzUxMSwgCQkJU0tfUE5NSV9IVFhfUkVTRVJWRUR9LAotLyogQml0MjQgKi8JeyBTS19QTk1JX0hUWF8xMDIzLCAJCVNLX1BOTUlfSFRYX1JFU0VSVkVEfSwKLS8qIEJpdDI1ICovCXsgU0tfUE5NSV9IVFhfTUFYLCAJCQlTS19QTk1JX0hUWF9SRVNFUlZFRH0sCi0vKiBCaXQyNiAqLwl7IFNLX1BOTUlfSFRYX1JFU0VSVkVELCAJU0tfUE5NSV9IVFhfUkVTRVJWRUR9LAotLyogQml0MjcgKi8JeyBTS19QTk1JX0hUWF9SRVNFUlZFRCwgCVNLX1BOTUlfSFRYX1JFU0VSVkVEfSwKLS8qIEJpdDI4ICovCXsgU0tfUE5NSV9IVFhfUkVTRVJWRUQsIAlTS19QTk1JX0hUWF9SRVNFUlZFRH0sCi0vKiBCaXQyOSAqLwl7IFNLX1BOTUlfSFRYX1JFU0VSVkVELCAJU0tfUE5NSV9IVFhfUkVTRVJWRUR9LAotLyogQml0MzAgKi8JeyBTS19QTk1JX0hUWF9SRVNFUlZFRCwgCVNLX1BOTUlfSFRYX1JFU0VSVkVEfSwKLS8qIEJpdDMxICovCXsgU0tfUE5NSV9IVFhfUkVTRVJWRUQsIAlTS19QTk1JX0hUWF9SRVNFUlZFRH0sCi0vKiBCaXQzMiAqLwl7IFNLX1BOTUlfSFJYLCAJCQkJU0tfUE5NSV9IUlhfVU5JQ0FTVH0sCi0vKiBCaXQzMyAqLwl7IFNLX1BOTUlfSFJYX09DVEVUSElHSCwgCVNLX1BOTUlfSFJYX0JST0FEQ0FTVH0sCi0vKiBCaXQzNCAqLwl7IFNLX1BOTUlfSFJYX09DVEVUTE9XLCAJU0tfUE5NSV9IUlhfUE1BQ0N9LAotLyogQml0MzUgKi8JeyBTS19QTk1JX0hSWF9CUk9BRENBU1QsIAlTS19QTk1JX0hSWF9NVUxUSUNBU1R9LAotLyogQml0MzYgKi8JeyBTS19QTk1JX0hSWF9NVUxUSUNBU1QsIAlTS19QTk1JX0hSWF9GQ1N9LAotLyogQml0MzcgKi8JeyBTS19QTk1JX0hSWF9VTklDQVNULCAJCVNLX1BOTUlfSFJYX1JFU0VSVkVEfSwKLS8qIEJpdDM4ICovCXsgU0tfUE5NSV9IUlhfUE1BQ0MsIAkJU0tfUE5NSV9IUlhfT0NURVRMT1d9LAotLyogQml0MzkgKi8JeyBTS19QTk1JX0hSWF9NQUNDLCAJCVNLX1BOTUlfSFJYX09DVEVUSElHSH0sCi0vKiBCaXQ0MCAqLwl7IFNLX1BOTUlfSFJYX1BNQUNDX0VSUiwgCVNLX1BOTUlfSFJYX0JBRE9DVEVUTE9XfSwKLS8qIEJpdDQxICovCXsgU0tfUE5NSV9IUlhfTUFDQ19VTktXTiwJU0tfUE5NSV9IUlhfQkFET0NURVRISUdIfSwKLS8qIEJpdDQyICovCXsgU0tfUE5NSV9IUlhfQlVSU1QsIAkJU0tfUE5NSV9IUlhfVU5ERVJTSVpFfSwKLS8qIEJpdDQzICovCXsgU0tfUE5NSV9IUlhfTUlTU0VELCAJCVNLX1BOTUlfSFJYX1JVTlR9LAotLyogQml0NDQgKi8JeyBTS19QTk1JX0hSWF9GUkFNSU5HLCAJCVNLX1BOTUlfSFJYXzY0fSwKLS8qIEJpdDQ1ICovCXsgU0tfUE5NSV9IUlhfT1ZFUkZMT1csIAlTS19QTk1JX0hSWF8xMjd9LAotLyogQml0NDYgKi8JeyBTS19QTk1JX0hSWF9KQUJCRVIsIAkJU0tfUE5NSV9IUlhfMjU1fSwKLS8qIEJpdDQ3ICovCXsgU0tfUE5NSV9IUlhfQ0FSUklFUiwgCQlTS19QTk1JX0hSWF81MTF9LAotLyogQml0NDggKi8JeyBTS19QTk1JX0hSWF9JUkxFTkdUSCwgCVNLX1BOTUlfSFJYXzEwMjN9LAotLyogQml0NDkgKi8JeyBTS19QTk1JX0hSWF9TWU1CT0wsIAkJU0tfUE5NSV9IUlhfTUFYfSwKLS8qIEJpdDUwICovCXsgU0tfUE5NSV9IUlhfU0hPUlRTLCAJCVNLX1BOTUlfSFJYX0xPTkdGUkFNRVN9LAotLyogQml0NTEgKi8JeyBTS19QTk1JX0hSWF9SVU5ULCAJCVNLX1BOTUlfSFJYX1RPT19MT05HfSwKLS8qIEJpdDUyICovCXsgU0tfUE5NSV9IUlhfVE9PX0xPTkcsIAlTS19QTk1JX0hSWF9KQUJCRVJ9LAotLyogQml0NTMgKi8JeyBTS19QTk1JX0hSWF9GQ1MsIAkJCVNLX1BOTUlfSFJYX1JFU0VSVkVEfSwKLS8qIEJpdDU0ICovCXsgU0tfUE5NSV9IUlhfUkVTRVJWRUQsIAlTS19QTk1JX0hSWF9PVkVSRkxPV30sCi0vKiBCaXQ1NSAqLwl7IFNLX1BOTUlfSFJYX0NFWFQsIAkJU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAotLyogQml0NTYgKi8JeyBTS19QTk1JX0hSWF9VVElMVU5ERVIsIAlTS19QTk1JX0hSWF9SRVNFUlZFRH0sCi0vKiBCaXQ1NyAqLwl7IFNLX1BOTUlfSFJYX1VUSUxPVkVSLCAJU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAotLyogQml0NTggKi8JeyBTS19QTk1JX0hSWF82NCwgCQkJU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAotLyogQml0NTkgKi8JeyBTS19QTk1JX0hSWF8xMjcsIAkJCVNLX1BOTUlfSFJYX1JFU0VSVkVEfSwKLS8qIEJpdDYwICovCXsgU0tfUE5NSV9IUlhfMjU1LCAJCQlTS19QTk1JX0hSWF9SRVNFUlZFRH0sCi0vKiBCaXQ2MSAqLwl7IFNLX1BOTUlfSFJYXzUxMSwgCQkJU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAotLyogQml0NjIgKi8JeyBTS19QTk1JX0hSWF8xMDIzLCAJCVNLX1BOTUlfSFJYX1JFU0VSVkVEfSwKLS8qIEJpdDYzICovCXsgU0tfUE5NSV9IUlhfTUFYLCAJCQlTS19QTk1JX0hSWF9SRVNFUlZFRH0KLX07Ci0KLS8qCi0gKiBUYWJsZSBmb3IgaGFyZHdhcmUgcmVnaXN0ZXIgc2F2aW5nIG9uIHJlc2V0cyBhbmQgcG9ydCBzd2l0Y2hlcwotICovCi1QTk1JX1NUQVRJQyBjb25zdCBTS19QTk1JX1NUQVRBRERSIFN0YXRBZGRyW1NLX1BOTUlfTUFYX0lEWF1bU0tfUE5NSV9NQUNfVFlQRVNdID0gewotCS8qIFNLX1BOTUlfSFRYICovCi0Je3tYTV9UWEZfT0ssIFNLX1RSVUV9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hUWF9PQ1RFVEhJR0ggKi8KLQl7e1hNX1RYT19PS19ISSwgU0tfVFJVRX0sIHtHTV9UWE9fT0tfSEksIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hUWF9PQ1RFVExPVyAqLwotCXt7WE1fVFhPX09LX0xPLCBTS19GQUxTRX0sIHtHTV9UWE9fT0tfTE8sIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IVFhfQlJPQURDQVNUICovCi0Je3tYTV9UWEZfQkNfT0ssIFNLX1RSVUV9LCB7R01fVFhGX0JDX09LLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfTVVMVElDQVNUICovCi0Je3tYTV9UWEZfTUNfT0ssIFNLX1RSVUV9LCB7R01fVFhGX01DX09LLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfVU5JQ0FTVCAqLwotCXt7WE1fVFhGX1VDX09LLCBTS19UUlVFfSwge0dNX1RYRl9VQ19PSywgU0tfVFJVRX19LAotCS8qIFNLX1BOTUlfSFRYX0JVUlNUICovCi0Je3tYTV9UWEVfQlVSU1QsIFNLX1RSVUV9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hUWF9QTUFDQyAqLwotCXt7WE1fVFhGX01QQVVTRSwgU0tfVFJVRX0sIHtHTV9UWEZfTVBBVVNFLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfTUFDQyAqLwotCXt7WE1fVFhGX01DVFJMLCBTS19UUlVFfSwgezAsIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IVFhfQ09MICovCi0Je3swLCBTS19GQUxTRX0sIHtHTV9UWEZfQ09MLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfU0lOR0xFX0NPTCAqLwotCXt7WE1fVFhGX1NOR19DT0wsIFNLX1RSVUV9LCB7R01fVFhGX1NOR19DT0wsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hUWF9NVUxUSV9DT0wgKi8KLQl7e1hNX1RYRl9NVUxfQ09MLCBTS19UUlVFfSwge0dNX1RYRl9NVUxfQ09MLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfRVhDRVNTX0NPTCAqLwotCXt7WE1fVFhGX0FCT19DT0wsIFNLX1RSVUV9LCB7R01fVFhGX0FCT19DT0wsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hUWF9MQVRFX0NPTCAqLwotCXt7WE1fVFhGX0xBVF9DT0wsIFNLX1RSVUV9LCB7R01fVFhGX0xBVF9DT0wsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hUWF9ERUZGRVJBTCAqLwotCXt7WE1fVFhGX0RFRiwgU0tfVFJVRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFRYX0VYQ0VTU19ERUYgKi8KLQl7e1hNX1RYRl9FWF9ERUYsIFNLX1RSVUV9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hUWF9VTkRFUlJVTiAqLwotCXt7WE1fVFhFX0ZJRk9fVVIsIFNLX1RSVUV9LCB7R01fVFhFX0ZJRk9fVVIsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hUWF9DQVJSSUVSICovCi0Je3tYTV9UWEVfQ1NfRVJSLCBTS19UUlVFfSwgezAsIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IVFhfVVRJTFVOREVSICovCi0Je3swLCBTS19GQUxTRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFRYX1VUSUxPVkVSICovCi0Je3swLCBTS19GQUxTRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFRYXzY0ICovCi0Je3tYTV9UWEZfNjRCLCBTS19UUlVFfSwge0dNX1RYRl82NEIsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hUWF8xMjcgKi8KLQl7e1hNX1RYRl8xMjdCLCBTS19UUlVFfSwge0dNX1RYRl8xMjdCLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfMjU1ICovCi0Je3tYTV9UWEZfMjU1QiwgU0tfVFJVRX0sIHtHTV9UWEZfMjU1QiwgU0tfVFJVRX19LAotCS8qIFNLX1BOTUlfSFRYXzUxMSAqLwotCXt7WE1fVFhGXzUxMUIsIFNLX1RSVUV9LCB7R01fVFhGXzUxMUIsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hUWF8xMDIzICovCi0Je3tYTV9UWEZfMTAyM0IsIFNLX1RSVUV9LCB7R01fVFhGXzEwMjNCLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfTUFYICovCi0Je3tYTV9UWEZfTUFYX1NaLCBTS19UUlVFfSwge0dNX1RYRl8xNTE4QiwgU0tfVFJVRX19LAotCS8qIFNLX1BOTUlfSFRYX0xPTkdGUkFNRVMgICovCi0Je3tYTV9UWEZfTE9ORywgU0tfVFJVRX0sIHtHTV9UWEZfTUFYX1NaLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IVFhfU1lOQyAqLwotCXt7MCwgU0tfRkFMU0V9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hUWF9TWU5DX09DVEVUICovCi0Je3swLCBTS19GQUxTRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFRYX1JFU0VSVkVEICovCi0Je3swLCBTS19GQUxTRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFJYICovCi0Je3tYTV9SWEZfT0ssIFNLX1RSVUV9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hSWF9PQ1RFVEhJR0ggKi8KLQl7e1hNX1JYT19PS19ISSwgU0tfVFJVRX0sIHtHTV9SWE9fT0tfSEksIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF9PQ1RFVExPVyAqLwotCXt7WE1fUlhPX09LX0xPLCBTS19GQUxTRX0sIHtHTV9SWE9fT0tfTE8sIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IUlhfQkFET0NURVRISUdIICovCi0Je3swLCBTS19GQUxTRX0sIHtHTV9SWE9fRVJSX0hJLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IUlhfQkFET0NURVRMT1cgKi8KLQl7ezAsIFNLX0ZBTFNFfSwge0dNX1JYT19FUlJfTE8sIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF9CUk9BRENBU1QgKi8KLQl7e1hNX1JYRl9CQ19PSywgU0tfVFJVRX0sIHtHTV9SWEZfQkNfT0ssIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF9NVUxUSUNBU1QgKi8KLQl7e1hNX1JYRl9NQ19PSywgU0tfVFJVRX0sIHtHTV9SWEZfTUNfT0ssIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF9VTklDQVNUICovCi0Je3tYTV9SWEZfVUNfT0ssIFNLX1RSVUV9LCB7R01fUlhGX1VDX09LLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IUlhfUE1BQ0MgKi8KLQl7e1hNX1JYRl9NUEFVU0UsIFNLX1RSVUV9LCB7R01fUlhGX01QQVVTRSwgU0tfVFJVRX19LAotCS8qIFNLX1BOTUlfSFJYX01BQ0MgKi8KLQl7e1hNX1JYRl9NQ1RSTCwgU0tfVFJVRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFJYX1BNQUNDX0VSUiAqLwotCXt7WE1fUlhGX0lOVl9NUCwgU0tfVFJVRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFJYX01BQ0NfVU5LV04gKi8KLQl7e1hNX1JYRl9JTlZfTU9DLCBTS19UUlVFfSwgezAsIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IUlhfQlVSU1QgKi8KLQl7e1hNX1JYRV9CVVJTVCwgU0tfVFJVRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFJYX01JU1NFRCAqLwotCXt7WE1fUlhFX0ZNSVNTLCBTS19UUlVFfSwgezAsIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IUlhfRlJBTUlORyAqLwotCXt7WE1fUlhGX0ZSQV9FUlIsIFNLX1RSVUV9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hSWF9VTkRFUlNJWkUgKi8KLQl7ezAsIFNLX0ZBTFNFfSwge0dNX1JYRl9TSFQsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF9PVkVSRkxPVyAqLwotCXt7WE1fUlhFX0ZJRk9fT1YsIFNLX1RSVUV9LCB7R01fUlhFX0ZJRk9fT1YsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF9KQUJCRVIgKi8KLQl7e1hNX1JYRl9KQUJfUEtULCBTS19UUlVFfSwge0dNX1JYRl9KQUJfUEtULCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IUlhfQ0FSUklFUiAqLwotCXt7WE1fUlhFX0NBUl9FUlIsIFNLX1RSVUV9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hSWF9JUkxFTkdUSCAqLwotCXt7WE1fUlhGX0xFTl9FUlIsIFNLX1RSVUV9LCB7MCwgU0tfRkFMU0V9fSwKLQkvKiBTS19QTk1JX0hSWF9TWU1CT0wgKi8KLQl7e1hNX1JYRV9TWU1fRVJSLCBTS19UUlVFfSwgezAsIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IUlhfU0hPUlRTICovCi0Je3tYTV9SWEVfU0hUX0VSUiwgU0tfVFJVRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFJYX1JVTlQgKi8KLQl7e1hNX1JYRV9SVU5ULCBTS19UUlVFfSwge0dNX1JYRV9GUkFHLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IUlhfVE9PX0xPTkcgKi8KLQl7e1hNX1JYRl9MTkdfRVJSLCBTS19UUlVFfSwge0dNX1JYRl9MTkdfRVJSLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IUlhfRkNTICovCi0Je3tYTV9SWEZfRkNTX0VSUiwgU0tfVFJVRX0sIHtHTV9SWEZfRkNTX0VSUiwgU0tfVFJVRX19LAotCS8qIFNLX1BOTUlfSFJYX0NFWFQgKi8KLQl7e1hNX1JYRl9DRVhfRVJSLCBTS19UUlVFfSwgezAsIFNLX0ZBTFNFfX0sCi0JLyogU0tfUE5NSV9IUlhfVVRJTFVOREVSICovCi0Je3swLCBTS19GQUxTRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFJYX1VUSUxPVkVSICovCi0Je3swLCBTS19GQUxTRX0sIHswLCBTS19GQUxTRX19LAotCS8qIFNLX1BOTUlfSFJYXzY0ICovCi0Je3tYTV9SWEZfNjRCLCBTS19UUlVFfSwge0dNX1JYRl82NEIsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF8xMjcgKi8KLQl7e1hNX1JYRl8xMjdCLCBTS19UUlVFfSwge0dNX1JYRl8xMjdCLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IUlhfMjU1ICovCi0Je3tYTV9SWEZfMjU1QiwgU0tfVFJVRX0sIHtHTV9SWEZfMjU1QiwgU0tfVFJVRX19LAotCS8qIFNLX1BOTUlfSFJYXzUxMSAqLwotCXt7WE1fUlhGXzUxMUIsIFNLX1RSVUV9LCB7R01fUlhGXzUxMUIsIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF8xMDIzICovCi0Je3tYTV9SWEZfMTAyM0IsIFNLX1RSVUV9LCB7R01fUlhGXzEwMjNCLCBTS19UUlVFfX0sCi0JLyogU0tfUE5NSV9IUlhfTUFYICovCi0Je3tYTV9SWEZfTUFYX1NaLCBTS19UUlVFfSwge0dNX1JYRl8xNTE4QiwgU0tfVFJVRX19LAotCS8qIFNLX1BOTUlfSFJYX0xPTkdGUkFNRVMgKi8KLQl7ezAsIFNLX0ZBTFNFfSwge0dNX1JYRl9NQVhfU1osIFNLX1RSVUV9fSwKLQkvKiBTS19QTk1JX0hSWF9SRVNFUlZFRCAqLwotCXt7MCwgU0tfRkFMU0V9LCB7MCwgU0tfRkFMU0V9fQotfTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBQdWJsaWMgZnVuY3Rpb25zCi0gKgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFNrUG5taUluaXQgLSBJbml0IGZ1bmN0aW9uIG9mIFBOTUkKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVNLX0lOSVRfREFUQTogSW5pdGlhbGlzZXMgdGhlIGRhdGEgc3RydWN0dXJlcwotICoJU0tfSU5JVF9JTzogICBSZXNldHMgdGhlIFhNQUMgc3RhdGlzdGljcywgZGV0ZXJtaW5lcyB0aGUgZGV2aWNlIGFuZAotICoJICAgICAgICAgICAgICBjb25uZWN0b3IgdHlwZS4KLSAqCVNLX0lOSVRfUlVOOiAgU3RhcnRzIGEgdGltZXIgZXZlbnQgZm9yIHBvcnQgc3dpdGNoIHBlciBob3VyCi0gKgkgICAgICAgICAgICAgIGNhbGN1bGF0aW9uLgotICoKLSAqIFJldHVybnM6Ci0gKglBbHdheXMgMAotICovCi1pbnQgU2tQbm1pSW5pdCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgTGV2ZWwpCQkvKiBJbml0aWFsaXphdGlvbiBsZXZlbCAqLwotewotCXVuc2lnbmVkIGludAlQb3J0TWF4OwkvKiBOdW1iZXIgb2YgcG9ydHMgKi8KLQl1bnNpZ25lZCBpbnQJUG9ydEluZGV4OwkvKiBDdXJyZW50IHBvcnQgaW5kZXggaW4gbG9vcCAqLwotCVNLX1UxNgkJVmFsMTY7CQkvKiBNdWx0aXBsZSBwdXJwb3NlIDE2IGJpdCB2YXJpYWJsZSAqLwotCVNLX1U4CQlWYWw4OwkJLyogTXVsaXRwbGUgcHVycG9zZSA4IGJpdCB2YXJpYWJsZSAqLwotCVNLX0VWUEFSQQlFdmVudFBhcmFtOwkvKiBFdmVudCBzdHJ1Y3QgZm9yIHRpbWVyIGV2ZW50ICovCi0JU0tfUE5NSV9WQ1QJKnBWY3RCYWNrdXBEYXRhOwotCi0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1BOTUksIFNLX0RCR0NBVF9DVFJMLAotCQkoIlBOTUk6IFNrUG5taUluaXQ6IENhbGxlZCwgbGV2ZWw9JWRcbiIsIExldmVsKSk7Ci0KLQlzd2l0Y2ggKExldmVsKSB7Ci0KLQljYXNlIFNLX0lOSVRfREFUQToKLQkJU0tfTUVNU0VUKChjaGFyICopJnBBQy0+UG5taSwgMCwgc2l6ZW9mKHBBQy0+UG5taSkpOwotCQlwQUMtPlBubWkuVHJhcEJ1ZkZyZWUgPSBTS19QTk1JX1RSQVBfUVVFVUVfTEVOOwotCQlwQUMtPlBubWkuU3RhcnRVcFRpbWUgPSBTS19QTk1JX0hVTkRSRURTX1NFQyhTa09zR2V0VGltZShwQUMpKTsKLQkJcEFDLT5Qbm1pLlJsbXRDaGFuZ2VUaHJlc2hvbGQgPSBTS19QTk1JX0RFRl9STE1UX0NIR19USFJFUzsKLQkJZm9yIChQb3J0SW5kZXggPSAwOyBQb3J0SW5kZXggPCBTS19NQVhfTUFDUzsgUG9ydEluZGV4ICsrKSB7Ci0KLQkJCXBBQy0+UG5taS5Qb3J0W1BvcnRJbmRleF0uQWN0aXZlRmxhZyA9IFNLX0ZBTFNFOwotCQkJcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID0gU0tfRkFMU0U7Ci0JCX0KLQotI2lmZGVmIFNLX1BOTUlfQ0hFQ0sKLQkJaWYgKFNLX1BOTUlfTUFYX0lEWCAhPSBTS19QTk1JX0NOVF9OTykgewotCQkJCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDQ5LCBTS19QTk1JX0VSUjA0OU1TRyk7Ci0KLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0lOSVQgfCBTS19EQkdDQVRfRkFUQUwsCi0JCQkJCSAgICgiQ291bnRlck9mZnNldCBzdHJ1Y3Qgc2l6ZSAoJWQpIGRpZmZlcnMgZnJvbSAiCi0JCQkJCQkiU0tfUE5NSV9NQVhfSURYICglZClcbiIsCi0JCQkJCQlTS19QTk1JX0NOVF9OTywgU0tfUE5NSV9NQVhfSURYKSk7Ci0JCX0KLQotI2VuZGlmIC8qIFNLX1BOTUlfQ0hFQ0sgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIFNLX0lOSVRfSU86Ci0JCS8qCi0JCSAqIFJlc2V0IE1BQyBjb3VudGVycwotCQkgKi8KLQkJUG9ydE1heCA9IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsKLQotCQlmb3IgKFBvcnRJbmRleCA9IDA7IFBvcnRJbmRleCA8IFBvcnRNYXg7IFBvcnRJbmRleCArKykgewotCi0JCQlwQUMtPkdJbmkuR0lGdW5jLnBGbk1hY1Jlc2V0Q291bnRlcihwQUMsIElvQywgUG9ydEluZGV4KTsKLQkJfQotCQkKLQkJLyogSW5pdGlhbGl6ZSBEU1AgdmFyaWFibGVzIGZvciBWY3QoKSB0byAweGZmID0+IE5ldmVyIHdyaXR0ZW4hICovCQkKLQkJZm9yIChQb3J0SW5kZXggPSAwOyBQb3J0SW5kZXggPCBQb3J0TWF4OyBQb3J0SW5kZXggKyspIHsKLQkJCXBBQy0+R0luaS5HUFtQb3J0SW5kZXhdLlBDYWJsZUxlbiA9IDB4ZmY7Ci0JCQlwVmN0QmFja3VwRGF0YSA9ICZwQUMtPlBubWkuVmN0QmFja3VwW1BvcnRJbmRleF07Ci0JCQlwVmN0QmFja3VwRGF0YS0+UENhYmxlTGVuID0gMHhmZjsKLQkJfQotCQkKLQkJLyoKLQkJICogR2V0IHBjaSBidXMgc3BlZWQKLQkJICovCi0JCVNLX0lOMTYoSW9DLCBCMF9DVFNULCAmVmFsMTYpOwotCQlpZiAoKFZhbDE2ICYgQ1NfQlVTX0NMT0NLKSA9PSAwKSB7Ci0KLQkJCXBBQy0+UG5taS5QY2lCdXNTcGVlZCA9IDMzOwotCQl9Ci0JCWVsc2UgewotCQkJcEFDLT5Qbm1pLlBjaUJ1c1NwZWVkID0gNjY7Ci0JCX0KLQotCQkvKgotCQkgKiBHZXQgcGNpIGJ1cyB3aWR0aAotCQkgKi8KLQkJU0tfSU4xNihJb0MsIEIwX0NUU1QsICZWYWwxNik7Ci0JCWlmICgoVmFsMTYgJiBDU19CVVNfU0xPVF9TWikgPT0gMCkgewotCi0JCQlwQUMtPlBubWkuUGNpQnVzV2lkdGggPSAzMjsKLQkJfQotCQllbHNlIHsKLQkJCXBBQy0+UG5taS5QY2lCdXNXaWR0aCA9IDY0OwotCQl9Ci0KLQkJLyoKLQkJICogR2V0IGNoaXBzZXQKLQkJICovCi0JCXN3aXRjaCAocEFDLT5HSW5pLkdJQ2hpcElkKSB7Ci0JCWNhc2UgQ0hJUF9JRF9HRU5FU0lTOgotCQkJcEFDLT5Qbm1pLkNoaXBzZXQgPSBTS19QTk1JX0NISVBTRVRfWE1BQzsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQ0hJUF9JRF9ZVUtPTjoKLQkJCXBBQy0+UG5taS5DaGlwc2V0ID0gU0tfUE5NSV9DSElQU0VUX1lVS09OOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogR2V0IFBNRCBhbmQgRGV2aWNlVHlwZQotCQkgKi8KLQkJU0tfSU44KElvQywgQjJfUE1EX1RZUCwgJlZhbDgpOwotCQlzd2l0Y2ggKFZhbDgpIHsKLQkJY2FzZSAnUyc6Ci0JCQlwQUMtPlBubWkuUE1EID0gMzsKLQkJCWlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPiAxKSB7Ci0KLQkJCQlwQUMtPlBubWkuRGV2aWNlVHlwZSA9IDB4MDAwMjAwMDI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwQUMtPlBubWkuRGV2aWNlVHlwZSA9IDB4MDAwMjAwMDE7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlICdMJzoKLQkJCXBBQy0+UG5taS5QTUQgPSAyOwotCQkJaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA+IDEpIHsKLQotCQkJCXBBQy0+UG5taS5EZXZpY2VUeXBlID0gMHgwMDAyMDAwNDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXBBQy0+UG5taS5EZXZpY2VUeXBlID0gMHgwMDAyMDAwMzsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgJ0MnOgotCQkJcEFDLT5Qbm1pLlBNRCA9IDQ7Ci0JCQlpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID4gMSkgewotCi0JCQkJcEFDLT5Qbm1pLkRldmljZVR5cGUgPSAweDAwMDIwMDA2OwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcEFDLT5Qbm1pLkRldmljZVR5cGUgPSAweDAwMDIwMDA1OwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAnVCc6Ci0JCQlwQUMtPlBubWkuUE1EID0gNTsKLQkJCWlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPiAxKSB7Ci0KLQkJCQlwQUMtPlBubWkuRGV2aWNlVHlwZSA9IDB4MDAwMjAwMDg7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwQUMtPlBubWkuRGV2aWNlVHlwZSA9IDB4MDAwMjAwMDc7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0IDoKLQkJCXBBQy0+UG5taS5QTUQgPSAxOwotCQkJcEFDLT5Qbm1pLkRldmljZVR5cGUgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBHZXQgY29ubmVjdG9yCi0JCSAqLwotCQlTS19JTjgoSW9DLCBCMl9DT05OX1RZUCwgJlZhbDgpOwotCQlzd2l0Y2ggKFZhbDgpIHsKLQkJY2FzZSAnQyc6Ci0JCQlwQUMtPlBubWkuQ29ubmVjdG9yID0gMjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ0QnOgotCQkJcEFDLT5Qbm1pLkNvbm5lY3RvciA9IDM7Ci0JCQlicmVhazsKLQotCQljYXNlICdGJzoKLQkJCXBBQy0+UG5taS5Db25uZWN0b3IgPSA0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAnSic6Ci0JCQlwQUMtPlBubWkuQ29ubmVjdG9yID0gNTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ1YnOgotCQkJcEFDLT5Qbm1pLkNvbm5lY3RvciA9IDY7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcEFDLT5Qbm1pLkNvbm5lY3RvciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0tfSU5JVF9SVU46Ci0JCS8qCi0JCSAqIFN0YXJ0IHRpbWVyIGZvciBSTE1UIGNoYW5nZSBjb3VudGVyCi0JCSAqLwotCQlTS19NRU1TRVQoKGNoYXIgKikmRXZlbnRQYXJhbSwgMCwgc2l6ZW9mKEV2ZW50UGFyYW0pKTsKLQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RUaW1lciwKLQkJCTI4MTI1MDAwLCBTS0dFX1BOTUksIFNLX1BOTUlfRVZUX0NIR19FU1RfVElNRVIsCi0JCQlFdmVudFBhcmFtKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsgLyogTm90aGluZyB0b2RvICovCi0JfQotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU2tQbm1pR2V0VmFyIC0gUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIHNpbmdsZSBPSUQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUNhbGxzIGEgZ2VuZXJhbCBzdWItZnVuY3Rpb24gZm9yIGFsbCB0aGlzIHN0dWZmLiBJZiB0aGUgaW5zdGFuY2UKLSAqCS0xIGlzIHBhc3NlZCwgdGhlIHZhbHVlcyBvZiBhbGwgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCBpbiBhbgotICoJYXJyYXkgb2YgdmFsdWVzLgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQKLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQKLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gdGFrZQotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhLgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9PSUQgIFRoZSByZXF1ZXN0ZWQgT0lEIGlzIHVua25vd24KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgU2tQbm1pR2V0VmFyKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLVNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwotdm9pZCAqcEJ1ZiwJCS8qIEJ1ZmZlciB0byB3aGljaCB0aGUgbWFuYWdlbWVudCBkYXRhIHdpbGwgYmUgY29waWVkICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIE9uIGNhbGw6IGJ1ZmZlciBsZW5ndGguIE9uIHJldHVybjogdXNlZCBidWZmZXIgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgcXVlcmllZCBvciAtMSAqLwotU0tfVTMyIE5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiUE5NSTogU2tQbm1pR2V0VmFyOiBDYWxsZWQsIElkPTB4JXgsIEJ1Zkxlbj0lZCwgSW5zdGFuY2U9JWQsIE5ldEluZGV4PSVkXG4iLAotCQkJSWQsICpwTGVuLCBJbnN0YW5jZSwgTmV0SW5kZXgpKTsKLQotCXJldHVybiAoUG5taVZhcihwQUMsIElvQywgU0tfUE5NSV9HRVQsIElkLCAoY2hhciAqKXBCdWYsIHBMZW4sCi0JCUluc3RhbmNlLCBOZXRJbmRleCkpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTa1BubWlQcmVTZXRWYXIgLSBQcmVzZXRzIHRoZSB2YWx1ZSBvZiBhIHNpbmdsZSBPSUQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUNhbGxzIGEgZ2VuZXJhbCBzdWItZnVuY3Rpb24gZm9yIGFsbCB0aGlzIHN0dWZmLiBUaGUgcHJlc2V0IGRvZXMKLSAqCXRoZSBzYW1lIGFzIGEgc2V0LCBidXQgcmV0dXJucyBqdXN0IGJlZm9yZSBmaW5hbGx5IHNldHRpbmcgdGhlCi0gKgluZXcgdmFsdWUuIFRoaXMgaXMgdXNlZnVsIHRvIGNoZWNrIGlmIGEgc2V0IG1pZ2h0IGJlIHN1Y2Nlc3NmdWxsLgotICoJSWYgdGhlIGluc3RhbmNlIC0xIGlzIHBhc3NlZCwgYW4gYXJyYXkgb2YgdmFsdWVzIGlzIHN1cHBvc2VkIGFuZAotICoJYWxsIGluc3RhbmNlcyBvZiB0aGUgT0lEIHdpbGwgYmUgc2V0LgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkLgotICoJU0tfUE5NSV9FUlJfVE9PX1NIT1JUICAgIFRoZSBwYXNzZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgZGF0YSAoZS5nLiBhIDMyYml0IHZhbHVlIGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLCBidXQgYSAxNiBiaXQgdmFsdWUgd2FzIHBhc3NlZCkuCi0gKglTS19QTk1JX0VSUl9CQURfVkFMVUUgICAgVGhlIHBhc3NlZCB2YWx1ZSBpcyBub3QgaW4gdGhlIHZhbGlkCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgcmFuZ2UuCi0gKglTS19QTk1JX0VSUl9SRUFEX09OTFkgICAgVGhlIE9JRCBpcyByZWFkLW9ubHkgYW5kIGNhbm5vdCBiZSBzZXQuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX09JRCAgVGhlIHJlcXVlc3RlZCBPSUQgaXMgdW5rbm93bi4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgU2tQbm1pUHJlU2V0VmFyKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLVNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwotdm9pZCAqcEJ1ZiwJCS8qIEJ1ZmZlciB0byB3aGljaCB0aGUgbWFuYWdlbWVudCBkYXRhIHdpbGwgYmUgY29waWVkICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIFRvdGFsIGxlbmd0aCBvZiBtYW5hZ2VtZW50IGRhdGEgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgc2V0IG9yIC0xICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsd2F5cyB6ZXJvICovCi17Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQTk1JOiBTa1BubWlQcmVTZXRWYXI6IENhbGxlZCwgSWQ9MHgleCwgQnVmTGVuPSVkLCBJbnN0YW5jZT0lZCwgTmV0SW5kZXg9JWRcbiIsCi0JCQlJZCwgKnBMZW4sIEluc3RhbmNlLCBOZXRJbmRleCkpOwotCi0KLQlyZXR1cm4gKFBubWlWYXIocEFDLCBJb0MsIFNLX1BOTUlfUFJFU0VULCBJZCwgKGNoYXIgKilwQnVmLCBwTGVuLAotCQlJbnN0YW5jZSwgTmV0SW5kZXgpKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU2tQbm1pU2V0VmFyIC0gU2V0cyB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgT0lECi0gKgotICogRGVzY3JpcHRpb246Ci0gKglDYWxscyBhIGdlbmVyYWwgc3ViLWZ1bmN0aW9uIGZvciBhbGwgdGhpcyBzdHVmZi4gVGhlIHByZXNldCBkb2VzCi0gKgl0aGUgc2FtZSBhcyBhIHNldCwgYnV0IHJldHVybnMganVzdCBiZWZvcmUgZmluYWxseSBzZXR0aW5nIHRoZQotICoJbmV3IHZhbHVlLiBUaGlzIGlzIHVzZWZ1bCB0byBjaGVjayBpZiBhIHNldCBtaWdodCBiZSBzdWNjZXNzZnVsbC4KLSAqCUlmIHRoZSBpbnN0YW5jZSAtMSBpcyBwYXNzZWQsIGFuIGFycmF5IG9mIHZhbHVlcyBpcyBzdXBwb3NlZCBhbmQKLSAqCWFsbCBpbnN0YW5jZXMgb2YgdGhlIE9JRCB3aWxsIGJlIHNldC4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgICAgIEEgZ2VuZXJhbCBzZXZlcmUgaW50ZXJuYWwgZXJyb3Igb2NjdXJlZC4KLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gY29udGFpbgotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IGRhdGEgKGUuZy4gYSAzMmJpdCB2YWx1ZSBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgYnV0IGEgMTYgYml0IHZhbHVlIHdhcyBwYXNzZWQpLgotICoJU0tfUE5NSV9FUlJfQkFEX1ZBTFVFICAgIFRoZSBwYXNzZWQgdmFsdWUgaXMgbm90IGluIHRoZSB2YWxpZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHJhbmdlLgotICoJU0tfUE5NSV9FUlJfUkVBRF9PTkxZICAgIFRoZSBPSUQgaXMgcmVhZC1vbmx5IGFuZCBjYW5ub3QgYmUgc2V0LgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9PSUQgIFRoZSByZXF1ZXN0ZWQgT0lEIGlzIHVua25vd24uCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QgVGhlIHJlcXVlc3RlZCBpbnN0YW5jZSBvZiB0aGUgT0lEIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QgKGUuZy4gcG9ydCBpbnN0YW5jZSAzIG9uIGEgdHdvIHBvcnQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLgotICovCi1pbnQgU2tQbm1pU2V0VmFyKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLVNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwotdm9pZCAqcEJ1ZiwJCS8qIEJ1ZmZlciB0byB3aGljaCB0aGUgbWFuYWdlbWVudCBkYXRhIHdpbGwgYmUgY29waWVkICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIFRvdGFsIGxlbmd0aCBvZiBtYW5hZ2VtZW50IGRhdGEgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgc2V0IG9yIC0xICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsd2F5cyB6ZXJvICovCi17Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQTk1JOiBTa1BubWlTZXRWYXI6IENhbGxlZCwgSWQ9MHgleCwgQnVmTGVuPSVkLCBJbnN0YW5jZT0lZCwgTmV0SW5kZXg9JWRcbiIsCi0JCQlJZCwgKnBMZW4sIEluc3RhbmNlLCBOZXRJbmRleCkpOwotCi0JcmV0dXJuIChQbm1pVmFyKHBBQywgSW9DLCBTS19QTk1JX1NFVCwgSWQsIChjaGFyICopcEJ1ZiwgcExlbiwKLQkJSW5zdGFuY2UsIE5ldEluZGV4KSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFNrUG5taUdldFN0cnVjdCAtIFJldHJpZXZlcyB0aGUgbWFuYWdlbWVudCBkYXRhYmFzZSBpbiBTS19QTk1JX1NUUlVDVF9EQVRBCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglSdW5zIHRocm91Z2ggdGhlIElkVGFibGUsIHF1ZXJpZXMgdGhlIHNpbmdsZSBPSURzIGFuZCBzdG9yZXMgdGhlCi0gKglyZXR1cm5lZCBkYXRhIGludG8gdGhlIG1hbmFnZW1lbnQgZGF0YWJhc2Ugc3RydWN0dXJlCi0gKglTS19QTk1JX1NUUlVDVF9EQVRBLiBUaGUgb2Zmc2V0IG9mIHRoZSBPSUQgaW4gdGhlIHN0cnVjdHVyZQotICoJaXMgc3RvcmVkIGluIHRoZSBJZFRhYmxlLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGFsc28KLSAqCWJlIHN0b3JlZCBpbiBTS19QTk1JX1NUUlVDVF9EQVRBIGlmIHRoZSBwYXNzZWQgYnVmZmVyIGhhcyB0aGUKLSAqCW1pbmltdW0gc2l6ZSBvZiBTS19QTk1JX01JTl9TVFJVQ1RfU0laRS4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkCi0gKglTS19QTk1JX0VSUl9UT09fU0hPUlQgICAgVGhlIHBhc3NlZCBidWZmZXIgaXMgdG9vIHNob3J0IHRvIHRha2UKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YS4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fTkVUICBUaGUgcmVxdWVzdGVkIE5ldEluZGV4IGRvZXNuJ3QgZXhpc3QKLSAqLwotaW50IFNrUG5taUdldFN0cnVjdCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi12b2lkICpwQnVmLAkJLyogQnVmZmVyIHRvIHdoaWNoIHRoZSBtYW5hZ2VtZW50IGRhdGEgd2lsbCBiZSBjb3BpZWQuICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIExlbmd0aCBvZiBidWZmZXIgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQlpbnQJCVJldDsKLQl1bnNpZ25lZCBpbnQJVGFibGVJbmRleDsKLQl1bnNpZ25lZCBpbnQJRHN0T2Zmc2V0OwotCXVuc2lnbmVkIGludAlJbnN0YW5jZU5vOwotCXVuc2lnbmVkIGludAlJbnN0YW5jZUNudDsKLQlTS19VMzIJCUluc3RhbmNlOwotCXVuc2lnbmVkIGludAlUbXBMZW47Ci0JY2hhcgkJS2V5QXJyW1NLX1BOTUlfVlBEX0VOVFJJRVNdW1NLX1BOTUlfVlBEX0tFWV9TSVpFXTsKLQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQTk1JOiBTa1BubWlHZXRTdHJ1Y3Q6IENhbGxlZCwgQnVmTGVuPSVkLCBOZXRJbmRleD0lZFxuIiwKLQkJCSpwTGVuLCBOZXRJbmRleCkpOwotCi0JaWYgKCpwTGVuIDwgU0tfUE5NSV9TVFJVQ1RfU0laRSkgewotCi0JCWlmICgqcExlbiA+PSBTS19QTk1JX01JTl9TVFJVQ1RfU0laRSkgewotCi0JCQlTS19QTk1JX1NFVF9TVEFUKHBCdWYsIFNLX1BOTUlfRVJSX1RPT19TSE9SVCwKLQkJCQkoU0tfVTMyKSgtMSkpOwotCQl9Ci0KLQkJKnBMZW4gPSBTS19QTk1JX1NUUlVDVF9TSVpFOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JfQotCi0gICAgLyoKLSAgICAgKiBDaGVjayBOZXRJbmRleAotICAgICAqLwotCWlmIChOZXRJbmRleCA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fTkVUKTsKLQl9Ci0KLQkvKiBVcGRhdGUgc3RhdGlzdGljICovCi0JU0tfUE5NSV9DSEVDS0ZMQUdTKCJTa1BubWlHZXRTdHJ1Y3Q6IE9uIGNhbGwiKTsKLQotCWlmICgoUmV0ID0gTWFjVXBkYXRlKHBBQywgSW9DLCAwLCBwQUMtPkdJbmkuR0lNYWNzRm91bmQgLSAxKSkgIT0KLQkJU0tfUE5NSV9FUlJfT0spIHsKLQotCQlTS19QTk1JX1NFVF9TVEFUKHBCdWYsIFJldCwgKFNLX1UzMikoLTEpKTsKLQkJKnBMZW4gPSBTS19QTk1JX01JTl9TVFJVQ1RfU0laRTsKLQkJcmV0dXJuIChSZXQpOwotCX0KLQotCWlmICgoUmV0ID0gUmxtdFVwZGF0ZShwQUMsIElvQywgTmV0SW5kZXgpKSAhPSBTS19QTk1JX0VSUl9PSykgewotCi0JCVNLX1BOTUlfU0VUX1NUQVQocEJ1ZiwgUmV0LCAoU0tfVTMyKSgtMSkpOwotCQkqcExlbiA9IFNLX1BOTUlfTUlOX1NUUlVDVF9TSVpFOwotCQlyZXR1cm4gKFJldCk7Ci0JfQotCi0JaWYgKChSZXQgPSBTaXJxVXBkYXRlKHBBQywgSW9DKSkgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQlTS19QTk1JX1NFVF9TVEFUKHBCdWYsIFJldCwgKFNLX1UzMikoLTEpKTsKLQkJKnBMZW4gPSBTS19QTk1JX01JTl9TVFJVQ1RfU0laRTsKLQkJcmV0dXJuIChSZXQpOwotCX0KLQotCS8qCi0JICogSW5jcmVtZW50IHNlbWFwaG9yZXMgdG8gaW5kaWNhdGUgdGhhdCBhbiB1cGRhdGUgd2FzCi0JICogYWxyZWFkeSBkb25lCi0JICovCi0JcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnICsrOwotCXBBQy0+UG5taS5SbG10VXBkYXRlZEZsYWcgKys7Ci0JcEFDLT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyArKzsKLQotCS8qIEdldCB2cGQga2V5cyBmb3IgaW5zdGFuY2UgY2FsY3VsYXRpb24gKi8KLQlSZXQgPSBHZXRWcGRLZXlBcnIocEFDLCBJb0MsICZLZXlBcnJbMF1bMF0sIHNpemVvZihLZXlBcnIpLCAmVG1wTGVuKTsKLQlpZiAoUmV0ICE9IFNLX1BOTUlfRVJSX09LKSB7Ci0KLQkJcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnIC0tOwotCQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwotCQlwQUMtPlBubWkuU2lycVVwZGF0ZWRGbGFnIC0tOwotCi0JCVNLX1BOTUlfQ0hFQ0tGTEFHUygiU2tQbm1pR2V0U3RydWN0OiBPbiByZXR1cm4iKTsKLQkJU0tfUE5NSV9TRVRfU1RBVChwQnVmLCBSZXQsIChTS19VMzIpKC0xKSk7Ci0JCSpwTGVuID0gU0tfUE5NSV9NSU5fU1RSVUNUX1NJWkU7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JfQotCi0JLyogUmV0cmlldmUgdmFsdWVzICovCi0JU0tfTUVNU0VUKChjaGFyICopcEJ1ZiwgMCwgU0tfUE5NSV9TVFJVQ1RfU0laRSk7Ci0JZm9yIChUYWJsZUluZGV4ID0gMDsgVGFibGVJbmRleCA8IElEX1RBQkxFX1NJWkU7IFRhYmxlSW5kZXggKyspIHsKLQotCQlJbnN0YW5jZU5vID0gSWRUYWJsZVtUYWJsZUluZGV4XS5JbnN0YW5jZU5vOwotCQlmb3IgKEluc3RhbmNlQ250ID0gMTsgSW5zdGFuY2VDbnQgPD0gSW5zdGFuY2VObzsKLQkJCUluc3RhbmNlQ250ICsrKSB7Ci0KLQkJCURzdE9mZnNldCA9IElkVGFibGVbVGFibGVJbmRleF0uT2Zmc2V0ICsKLQkJCQkoSW5zdGFuY2VDbnQgLSAxKSAqCi0JCQkJSWRUYWJsZVtUYWJsZUluZGV4XS5TdHJ1Y3RTaXplOwotCi0JCQkvKgotCQkJICogRm9yIHRoZSBWUEQgdGhlIGluc3RhbmNlIGlzIG5vdCBhbiBpbmRleCBudW1iZXIKLQkJCSAqIGJ1dCB0aGUga2V5IGl0c2VsZi4gRGV0ZXJtaW4gd2l0aCB0aGUgaW5zdGFuY2UKLQkJCSAqIGNvdW50ZXIgdGhlIFZQRCBrZXkgdG8gYmUgdXNlZC4KLQkJCSAqLwotCQkJaWYgKElkVGFibGVbVGFibGVJbmRleF0uSWQgPT0gT0lEX1NLR0VfVlBEX0tFWSB8fAotCQkJCUlkVGFibGVbVGFibGVJbmRleF0uSWQgPT0gT0lEX1NLR0VfVlBEX1ZBTFVFIHx8Ci0JCQkJSWRUYWJsZVtUYWJsZUluZGV4XS5JZCA9PSBPSURfU0tHRV9WUERfQUNDRVNTIHx8Ci0JCQkJSWRUYWJsZVtUYWJsZUluZGV4XS5JZCA9PSBPSURfU0tHRV9WUERfQUNUSU9OKSB7Ci0KLQkJCQlTS19TVFJOQ1BZKChjaGFyICopJkluc3RhbmNlLCBLZXlBcnJbSW5zdGFuY2VDbnQgLSAxXSwgNCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlJbnN0YW5jZSA9IChTS19VMzIpSW5zdGFuY2VDbnQ7Ci0JCQl9Ci0KLQkJCVRtcExlbiA9ICpwTGVuIC0gRHN0T2Zmc2V0OwotCQkJUmV0ID0gSWRUYWJsZVtUYWJsZUluZGV4XS5GdW5jKHBBQywgSW9DLCBTS19QTk1JX0dFVCwKLQkJCQlJZFRhYmxlW1RhYmxlSW5kZXhdLklkLCAoY2hhciAqKXBCdWYgKwotCQkJCURzdE9mZnNldCwgJlRtcExlbiwgSW5zdGFuY2UsIFRhYmxlSW5kZXgsIE5ldEluZGV4KTsKLQotCQkJLyoKLQkJCSAqIEFuIHVua25vd24gaW5zdGFuY2UgZXJyb3IgbWVhbnMgdGhhdCB3ZSByZWFjaGVkCi0JCQkgKiB0aGUgbGFzdCBpbnN0YW5jZSBvZiB0aGF0IHZhcmlhYmxlLiBQcm9jZWVkIHdpdGgKLQkJCSAqIHRoZSBuZXh0IE9JRCBpbiB0aGUgdGFibGUgYW5kIGlnbm9yZSB0aGUgcmV0dXJuCi0JCQkgKiBjb2RlLgotCQkJICovCi0JCQlpZiAoUmV0ID09IFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCkgewotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JCQl9Ci0KLQkJCWlmIChSZXQgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQkJCXBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKLQkJCQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwotCQkJCXBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgLS07Ci0KLQkJCQlTS19QTk1JX0NIRUNLRkxBR1MoIlNrUG5taUdldFN0cnVjdDogT24gcmV0dXJuIik7Ci0JCQkJU0tfUE5NSV9TRVRfU1RBVChwQnVmLCBSZXQsIERzdE9mZnNldCk7Ci0JCQkJKnBMZW4gPSBTS19QTk1JX01JTl9TVFJVQ1RfU0laRTsKLQkJCQlyZXR1cm4gKFJldCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwQUMtPlBubWkuTWFjVXBkYXRlZEZsYWcgLS07Ci0JcEFDLT5Qbm1pLlJsbXRVcGRhdGVkRmxhZyAtLTsKLQlwQUMtPlBubWkuU2lycVVwZGF0ZWRGbGFnIC0tOwotCi0JKnBMZW4gPSBTS19QTk1JX1NUUlVDVF9TSVpFOwotCVNLX1BOTUlfQ0hFQ0tGTEFHUygiU2tQbm1pR2V0U3RydWN0OiBPbiByZXR1cm4iKTsKLQlTS19QTk1JX1NFVF9TVEFUKHBCdWYsIFNLX1BOTUlfRVJSX09LLCAoU0tfVTMyKSgtMSkpOwotCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTa1BubWlQcmVTZXRTdHJ1Y3QgLSBQcmVzZXRzIHRoZSBtYW5hZ2VtZW50IGRhdGFiYXNlIGluIFNLX1BOTUlfU1RSVUNUX0RBVEEKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUNhbGxzIGEgZ2VuZXJhbCBzdWItZnVuY3Rpb24gZm9yIGFsbCB0aGlzIHNldCBzdHVmZi4gVGhlIHByZXNldCBkb2VzCi0gKgl0aGUgc2FtZSBhcyBhIHNldCwgYnV0IHJldHVybnMganVzdCBiZWZvcmUgZmluYWxseSBzZXR0aW5nIHRoZQotICoJbmV3IHZhbHVlLiBUaGlzIGlzIHVzZWZ1bCB0byBjaGVjayBpZiBhIHNldCBtaWdodCBiZSBzdWNjZXNzZnVsbC4KLSAqCVRoZSBzdWItZnVuY3Rpb24gcnVucyB0aHJvdWdoIHRoZSBJZFRhYmxlLCBjaGVja3Mgd2hpY2ggT0lEcyBhcmUgYWJsZQotICoJdG8gc2V0LCBhbmQgY2FsbHMgdGhlIGhhbmRsZXIgZnVuY3Rpb24gb2YgdGhlIE9JRCB0byBwZXJmb3JtIHRoZQotICoJcHJlc2V0LiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGFsc28gYmUgc3RvcmVkIGluCi0gKglTS19QTk1JX1NUUlVDVF9EQVRBIGlmIHRoZSBwYXNzZWQgYnVmZmVyIGhhcyB0aGUgbWluaW11bSBzaXplIG9mCi0gKglTS19QTk1JX01JTl9TVFJVQ1RfU0laRS4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgICAgIEEgZ2VuZXJhbCBzZXZlcmUgaW50ZXJuYWwgZXJyb3Igb2NjdXJlZC4KLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gY29udGFpbgotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IGRhdGEgKGUuZy4gYSAzMmJpdCB2YWx1ZSBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgYnV0IGEgMTYgYml0IHZhbHVlIHdhcyBwYXNzZWQpLgotICoJU0tfUE5NSV9FUlJfQkFEX1ZBTFVFICAgIFRoZSBwYXNzZWQgdmFsdWUgaXMgbm90IGluIHRoZSB2YWxpZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHJhbmdlLgotICovCi1pbnQgU2tQbm1pUHJlU2V0U3RydWN0KAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLXZvaWQgKnBCdWYsCQkvKiBCdWZmZXIgd2hpY2ggY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgc2V0ICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIExlbmd0aCBvZiBidWZmZXIgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1BOTUksIFNLX0RCR0NBVF9DVFJMLAotCQkoIlBOTUk6IFNrUG5taVByZVNldFN0cnVjdDogQ2FsbGVkLCBCdWZMZW49JWQsIE5ldEluZGV4PSVkXG4iLAotCQkJKnBMZW4sIE5ldEluZGV4KSk7Ci0KLQlyZXR1cm4gKFBubWlTdHJ1Y3QocEFDLCBJb0MsIFNLX1BOTUlfUFJFU0VULCAoY2hhciAqKXBCdWYsCi0gICAgCQkJCQlwTGVuLCBOZXRJbmRleCkpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTa1BubWlTZXRTdHJ1Y3QgLSBTZXRzIHRoZSBtYW5hZ2VtZW50IGRhdGFiYXNlIGluIFNLX1BOTUlfU1RSVUNUX0RBVEEKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUNhbGxzIGEgZ2VuZXJhbCBzdWItZnVuY3Rpb24gZm9yIGFsbCB0aGlzIHNldCBzdHVmZi4gVGhlIHJldHVybiB2YWx1ZQotICoJb2YgdGhlIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBzdG9yZWQgaW4gU0tfUE5NSV9TVFJVQ1RfREFUQSBpZiB0aGUKLSAqCXBhc3NlZCBidWZmZXIgaGFzIHRoZSBtaW5pbXVtIHNpemUgb2YgU0tfUE5NSV9NSU5fU1RSVUNUX1NJWkUuCi0gKglUaGUgc3ViLWZ1bmN0aW9uIHJ1bnMgdGhyb3VnaCB0aGUgSWRUYWJsZSwgY2hlY2tzIHdoaWNoIE9JRHMgYXJlIGFibGUKLSAqCXRvIHNldCwgYW5kIGNhbGxzIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIG9mIHRoZSBPSUQgdG8gcGVyZm9ybSB0aGUKLSAqCXNldC4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gd2lsbCBhbHNvIGJlIHN0b3JlZCBpbgotICoJU0tfUE5NSV9TVFJVQ1RfREFUQSBpZiB0aGUgcGFzc2VkIGJ1ZmZlciBoYXMgdGhlIG1pbmltdW0gc2l6ZSBvZgotICoJU0tfUE5NSV9NSU5fU1RSVUNUX1NJWkUuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1BOTUlfRVJSX09LICAgICAgICAgICBUaGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQuCi0gKglTS19QTk1JX0VSUl9UT09fU0hPUlQgICAgVGhlIHBhc3NlZCBidWZmZXIgaXMgdG9vIHNob3J0IHRvIGNvbnRhaW4KLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCBkYXRhIChlLmcuIGEgMzJiaXQgdmFsdWUgaXMKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQsIGJ1dCBhIDE2IGJpdCB2YWx1ZSB3YXMgcGFzc2VkKS4KLSAqCVNLX1BOTUlfRVJSX0JBRF9WQUxVRSAgICBUaGUgcGFzc2VkIHZhbHVlIGlzIG5vdCBpbiB0aGUgdmFsaWQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSByYW5nZS4KLSAqLwotaW50IFNrUG5taVNldFN0cnVjdCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi12b2lkICpwQnVmLAkJLyogQnVmZmVyIHdoaWNoIGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHNldCAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBMZW5ndGggb2YgYnVmZmVyICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsd2F5cyB6ZXJvICovCi17Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQTk1JOiBTa1BubWlTZXRTdHJ1Y3Q6IENhbGxlZCwgQnVmTGVuPSVkLCBOZXRJbmRleD0lZFxuIiwKLQkJCSpwTGVuLCBOZXRJbmRleCkpOwotCi0JcmV0dXJuIChQbm1pU3RydWN0KHBBQywgSW9DLCBTS19QTk1JX1NFVCwgKGNoYXIgKilwQnVmLAotICAgIAkJCQkJcExlbiwgTmV0SW5kZXgpKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU2tQbm1pRXZlbnQgLSBFdmVudCBoYW5kbGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglIYW5kbGVzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOgotICoJU0tfUE5NSV9FVlRfU0lSUV9PVkVSRkxPVyAgICAgV2hlbiBhIGhhcmR3YXJlIGNvdW50ZXIgb3ZlcmZsb3dzIGFuCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQgd2hpY2ggaXMKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IGhhbmRsZWQgYnkgU0lSUSB3aGljaCBnZW5lcmF0ZXMgYQotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBldmVudC4gVGhlIGV2ZW50IGluY3JlbWVudHMgdGhlCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlciAzMiBiaXQgb2YgdGhlIDY0IGJpdCBjb3VudGVyLgotICoJU0tfUE5NSV9FVlRfU0VOX1hYWCAgICAgICAgICAgVGhlIGV2ZW50IGlzIGdlbmVyYXRlZCBieSB0aGUgSTJDIG1vZHVsZQotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBhIHNlbnNvciByZXBvcnRzIGEgd2FybmluZyBvcgotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuIFRoZSBldmVudCB3aWxsIHN0b3JlIGEgdHJhcAotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBpbiB0aGUgdHJhcCBidWZmZXIuCi0gKglTS19QTk1JX0VWVF9DSEdfRVNUX1RJTUVSICAgICBUaGUgdGltZXIgZXZlbnQgd2FzIGluaXRpYXRlZCBieSB0aGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgYW5kIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZQotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCBzd2l0Y2hlcyBwZXIgaG91ci4KLSAqCVNLX1BOTUlfRVZUX0NMRUFSX0NPVU5URVIgICAgIFRoZSBldmVudCBjbGVhcnMgYWxsIGNvdW50ZXJzIGFuZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wcy4KLSAqCVNLX1BOTUlfRVZUX1hNQUNfUkVTRVQgICAgICAgIFRoZSBldmVudCBpcyBnZW5lcmF0ZWQgYnkgdGhlIGRyaXZlcgotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIGEgaGFyZCByZXNldCBvZiB0aGUgWE1BQyBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWVkLiBBbGwgY291bnRlcnMgd2lsbCBiZSBzYXZlZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFkZGVkIHRvIHRoZSBoYXJkd2FyZSBjb3VudGVyCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYWZ0ZXIgcmVzZXQgdG8gZ3JhbnQgY29udGludW91cwotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciB2YWx1ZXMuCi0gKglTS19QTk1JX0VWVF9STE1UX1BPUlRfVVAgICAgICBHZW5lcmF0ZWQgYnkgUkxNVCB0byBub3RpZnkgdGhhdCBhIHBvcnQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlbnQgbG9naWNhbGx5IHVwLiBBIHRyYXAgbWVzc2FnZSB3aWxsCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzdG9yZWQgdG8gdGhlIHRyYXAgYnVmZmVyLgotICoJU0tfUE5NSV9FVlRfUkxNVF9QT1JUX0RPV04gICAgR2VuZXJhdGVkIGJ5IFJMTVQgdG8gbm90aWZ5IHRoYXQgYSBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZW50IGxvZ2ljYWxseSBkb3duLiBBIHRyYXAgbWVzc2FnZSB3aWxsCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzdG9yZWQgdG8gdGhlIHRyYXAgYnVmZmVyLgotICoJU0tfUE5NSV9FVlRfUkxNVF9TRUdNRU5UQVRJT04gR2VuZXJhdGVkIGJ5IFJMTVQgdG8gbm90aWZ5IHRoYXQgdHdvCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFubmluZyB0cmVlIHJvb3QgYnJpZGdlcyB3ZXJlCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZC4gQSB0cmFwIG1lc3NhZ2Ugd2lsbCBiZSBzdG9yZWQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB0cmFwIGJ1ZmZlci4KLSAqCVNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX0RPV04gIE5vdGlmaWVzIFBOTUkgdGhhdCBhbiBhY3RpdmUgcG9ydCB3ZW50Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duLiBQTk1JIHdpbGwgbm90IGZ1cnRoZXIgYWRkIHRoZQotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljIHZhbHVlcyB0byB0aGUgdmlydHVhbCBwb3J0LgotICoJU0tfUE5NSV9FVlRfUkxNVF9BQ1RJVkVfVVAgICAgTm90aWZpZXMgUE5NSSB0aGF0IGEgcG9ydCB3ZW50IHVwIGFuZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm93IGFuIGFjdGl2ZSBwb3J0LiBQTk1JIHdpbGwgbm93Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgdGhlIHN0YXRpc3RpYyBkYXRhIG9mIHRoaXMgcG9ydCB0bwotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZpcnR1YWwgcG9ydC4KLSAqCVNLX1BOTUlfRVZUX1JMTVRfU0VUX05FVFMgICAgIE5vdGlmaWVzIFBOTUkgYWJvdXQgdGhlIG5ldCBtb2RlLiBUaGUgZmlyc3QgcGFyYW1ldGVyCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgbnVtYmVyIG9mIG5ldHMuIDEgbWVhbnMgc2luZ2xlIG5ldCwgMiBtZWFucwotICoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCBuZXQuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIC0xCi0gKgotICogUmV0dXJuczoKLSAqCUFsd2F5cyAwCi0gKi8KLWludCBTa1BubWlFdmVudCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1TS19VMzIgRXZlbnQsCQkvKiBFdmVudC1JZCAqLwotU0tfRVZQQVJBIFBhcmFtKQkvKiBFdmVudCBkZXBlbmRlbnQgcGFyYW1ldGVyICovCi17Ci0JdW5zaWduZWQgaW50CVBoeXNQb3J0SW5kZXg7Ci0gICAgdW5zaWduZWQgaW50CU1heE5ldE51bWJlcjsKLQlpbnQJCQlDb3VudGVySW5kZXg7Ci0JaW50CQkJUmV0OwotCVNLX1UxNgkJTWFjU3RhdHVzOwotCVNLX1U2NAkJT3ZlcmZsb3dTdGF0dXM7Ci0JU0tfVTY0CQlNYXNrOwotCWludAkJCU1hY1R5cGU7Ci0JU0tfVTY0CQlWYWx1ZTsKLQlTS19VMzIJCVZhbDMyOwotCVNLX1UxNgkJUmVnaXN0ZXI7Ci0JU0tfRVZQQVJBCUV2ZW50UGFyYW07Ci0JU0tfVTY0CQlOZXdlc3RWYWx1ZTsKLQlTS19VNjQJCU9sZGVzdFZhbHVlOwotCVNLX1U2NAkJRGVsdGE7Ci0JU0tfUE5NSV9FU1RJTUFURSAqcEVzdDsKLQlTS19VMzIJCU5ldEluZGV4OwotCVNLX0dFUE9SVAkqcFBydDsKLQlTS19QTk1JX1ZDVAkqcFZjdEJhY2t1cERhdGE7Ci0JU0tfVTMyCQlSZXRDb2RlOwotCWludAkJaTsKLQlTS19VMzIJCUNhYmxlTGVuZ3RoOwotCi0KLSNpZmRlZiBERUJVRwotCWlmIChFdmVudCAhPSBTS19QTk1JX0VWVF9YTUFDX1JFU0VUKSB7Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiUE5NSTogU2tQbm1pRXZlbnQ6IENhbGxlZCwgRXZlbnQ9MHgleCwgUGFyYW09MHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpRXZlbnQsICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTY0KSk7Ci0JfQotI2VuZGlmIC8qIERFQlVHICovCi0JU0tfUE5NSV9DSEVDS0ZMQUdTKCJTa1BubWlFdmVudDogT24gY2FsbCIpOwotCi0JTWFjVHlwZSA9IHBBQy0+R0luaS5HSU1hY1R5cGU7Ci0JCi0Jc3dpdGNoIChFdmVudCkgewotCi0JY2FzZSBTS19QTk1JX0VWVF9TSVJRX09WRVJGTE9XOgotCQlQaHlzUG9ydEluZGV4ID0gKGludClQYXJhbS5QYXJhMzJbMF07Ci0JCU1hY1N0YXR1cyA9IChTS19VMTYpUGFyYW0uUGFyYTMyWzFdOwotI2lmZGVmIERFQlVHCi0JCWlmIChQaHlzUG9ydEluZGV4ID49IFNLX01BWF9NQUNTKSB7Ci0KLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJQTk1JOiBFUlI6IFNrUG5taUV2ZW50OiBTS19QTk1JX0VWVF9TSVJRX09WRVJGTE9XIHBhcmFtZXRlciIKLQkJCQkgIiB3cm9uZywgUGh5c1BvcnRJbmRleD0weCV4XG4iLAotCQkJCVBoeXNQb3J0SW5kZXgpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCQlPdmVyZmxvd1N0YXR1cyA9IDA7Ci0KLQkJLyoKLQkJICogQ2hlY2sgd2hpY2ggc291cmNlIGNhdXNlZCBhbiBvdmVyZmxvdyBpbnRlcnJ1cHQuCi0JCSAqLwotCQlpZiAoKHBBQy0+R0luaS5HSUZ1bmMucEZuTWFjT3ZlcmZsb3cocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJTWFjU3RhdHVzLCAmT3ZlcmZsb3dTdGF0dXMpICE9IDApIHx8Ci0JCQkoT3ZlcmZsb3dTdGF0dXMgPT0gMCkpIHsKLQotCQkJU0tfUE5NSV9DSEVDS0ZMQUdTKCJTa1BubWlFdmVudDogT24gcmV0dXJuIik7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0KLQkJLyoKLQkJICogQ2hlY2sgdGhlIG92ZXJmbG93IHN0YXR1cyByZWdpc3RlciBhbmQgaW5jcmVtZW50Ci0JCSAqIHRoZSB1cHBlciBkd29yZCBvZiBjb3JyZXNwb25kaW5nIGNvdW50ZXIuCi0JCSAqLwotCQlmb3IgKENvdW50ZXJJbmRleCA9IDA7IENvdW50ZXJJbmRleCA8IHNpemVvZihNYXNrKSAqIDg7Ci0JCQlDb3VudGVySW5kZXggKyspIHsKLQotCQkJTWFzayA9IChTS19VNjQpMSA8PCBDb3VudGVySW5kZXg7Ci0JCQlpZiAoKE92ZXJmbG93U3RhdHVzICYgTWFzaykgPT0gMCkgewotCi0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCXN3aXRjaCAoU3RhdE92cmZsd0JpdFtDb3VudGVySW5kZXhdW01hY1R5cGVdKSB7Ci0KLQkJCWNhc2UgU0tfUE5NSV9IVFhfVVRJTFVOREVSOgotCQkJY2FzZSBTS19QTk1JX0hUWF9VVElMT1ZFUjoKLQkJCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJCQlYTV9JTjE2KElvQywgUGh5c1BvcnRJbmRleCwgWE1fVFhfQ01ELCAmUmVnaXN0ZXIpOwotCQkJCQlSZWdpc3RlciB8PSBYTV9UWF9TQU1fTElORTsKLQkJCQkJWE1fT1VUMTYoSW9DLCBQaHlzUG9ydEluZGV4LCBYTV9UWF9DTUQsIFJlZ2lzdGVyKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgU0tfUE5NSV9IUlhfVVRJTFVOREVSOgotCQkJY2FzZSBTS19QTk1JX0hSWF9VVElMT1ZFUjoKLQkJCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJCQlYTV9JTjE2KElvQywgUGh5c1BvcnRJbmRleCwgWE1fUlhfQ01ELCAmUmVnaXN0ZXIpOwotCQkJCQlSZWdpc3RlciB8PSBYTV9SWF9TQU1fTElORTsKLQkJCQkJWE1fT1VUMTYoSW9DLCBQaHlzUG9ydEluZGV4LCBYTV9SWF9DTUQsIFJlZ2lzdGVyKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgU0tfUE5NSV9IVFhfT0NURVRISUdIOgotCQkJY2FzZSBTS19QTk1JX0hUWF9PQ1RFVExPVzoKLQkJCWNhc2UgU0tfUE5NSV9IVFhfUkVTRVJWRUQ6Ci0JCQljYXNlIFNLX1BOTUlfSFJYX09DVEVUSElHSDoKLQkJCWNhc2UgU0tfUE5NSV9IUlhfT0NURVRMT1c6Ci0JCQljYXNlIFNLX1BOTUlfSFJYX0lSTEVOR1RIOgotCQkJY2FzZSBTS19QTk1JX0hSWF9SRVNFUlZFRDoKLQkJCQotCQkJLyoKLQkJCSAqIHRoZSBmb2xsb3dpbmcgY291bnRlcnMgYXJlbid0IGJlIGhhbmRsZWQgKGlkID4gNjMpCi0JCQkgKi8KLQkJCWNhc2UgU0tfUE5NSV9IVFhfU1lOQzoKLQkJCWNhc2UgU0tfUE5NSV9IVFhfU1lOQ19PQ1RFVDoKLQkJCQlicmVhazsKLQotCQkJY2FzZSBTS19QTk1JX0hSWF9MT05HRlJBTUVTOgotCQkJCWlmIChNYWNUeXBlID09IFNLX01BQ19HTUFDKSB7Ci0JCQkJCXBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgotCQkJCQkJQ291bnRlckhpZ2hbQ291bnRlckluZGV4XSArKzsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uCi0JCQkJCUNvdW50ZXJIaWdoW0NvdW50ZXJJbmRleF0gKys7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX1NFTl9XQVJfTE9XOgotI2lmZGVmIERFQlVHCi0JCWlmICgodW5zaWduZWQgaW50KVBhcmFtLlBhcmE2NCA+PSAodW5zaWduZWQgaW50KXBBQy0+STJjLk1heFNlbnMpIHsKLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlBOTUk6IEVSUjogU2tQbm1pRXZlbnQ6IFNLX1BOTUlfRVZUX1NFTl9XQVJfTE9XIHBhcmFtZXRlciB3cm9uZywgU2Vuc29ySW5kZXg9JWRcbiIsCi0JCQkJKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JCS8qCi0JCSAqIFN0b3JlIGEgdHJhcCBtZXNzYWdlIGluIHRoZSB0cmFwIGJ1ZmZlciBhbmQgZ2VuZXJhdGUKLQkJICogYW4gZXZlbnQgZm9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIHdpdGggdGhlCi0JCSAqIFNLX0RSSVZFUl9TRU5ERVZFTlQgbWFjcm8uCi0JCSAqLwotCQlRdWV1ZVNlbnNvclRyYXAocEFDLCBPSURfU0tHRV9UUkFQX1NFTl9XQVJfTE9XLAotCQkJKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQpOwotCQkodm9pZClTS19EUklWRVJfU0VOREVWRU5UKHBBQywgSW9DKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX1NFTl9XQVJfVVBQOgotI2lmZGVmIERFQlVHCi0JCWlmICgodW5zaWduZWQgaW50KVBhcmFtLlBhcmE2NCA+PSAodW5zaWduZWQgaW50KXBBQy0+STJjLk1heFNlbnMpIHsKLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlBOTUk6IEVSUjogU2tQbm1pRXZlbnQ6IFNLX1BOTUlfRVZUX1NFTl9XQVJfVVBQIHBhcmFtZXRlciB3cm9uZywgU2Vuc29ySW5kZXg9JWRcbiIsCi0JCQkJKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JCS8qCi0JCSAqIFN0b3JlIGEgdHJhcCBtZXNzYWdlIGluIHRoZSB0cmFwIGJ1ZmZlciBhbmQgZ2VuZXJhdGUKLQkJICogYW4gZXZlbnQgZm9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIHdpdGggdGhlCi0JCSAqIFNLX0RSSVZFUl9TRU5ERVZFTlQgbWFjcm8uCi0JCSAqLwotCQlRdWV1ZVNlbnNvclRyYXAocEFDLCBPSURfU0tHRV9UUkFQX1NFTl9XQVJfVVBQLAotCQkJKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQpOwotCQkodm9pZClTS19EUklWRVJfU0VOREVWRU5UKHBBQywgSW9DKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX1NFTl9FUlJfTE9XOgotI2lmZGVmIERFQlVHCi0JCWlmICgodW5zaWduZWQgaW50KVBhcmFtLlBhcmE2NCA+PSAodW5zaWduZWQgaW50KXBBQy0+STJjLk1heFNlbnMpIHsKLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlBOTUk6IEVSUjogU2tQbm1pRXZlbnQ6IFNLX1BOTUlfRVZUX1NFTl9FUlJfTE9XIHBhcmFtZXRlciB3cm9uZywgU2Vuc29ySW5kZXg9JWRcbiIsCi0JCQkJKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JCS8qCi0JCSAqIFN0b3JlIGEgdHJhcCBtZXNzYWdlIGluIHRoZSB0cmFwIGJ1ZmZlciBhbmQgZ2VuZXJhdGUKLQkJICogYW4gZXZlbnQgZm9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIHdpdGggdGhlCi0JCSAqIFNLX0RSSVZFUl9TRU5ERVZFTlQgbWFjcm8uCi0JCSAqLwotCQlRdWV1ZVNlbnNvclRyYXAocEFDLCBPSURfU0tHRV9UUkFQX1NFTl9FUlJfTE9XLAotCQkJKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQpOwotCQkodm9pZClTS19EUklWRVJfU0VOREVWRU5UKHBBQywgSW9DKTsKLQkJYnJlYWs7Ci0JCi0JY2FzZSBTS19QTk1JX0VWVF9TRU5fRVJSX1VQUDoKLSNpZmRlZiBERUJVRwotCQlpZiAoKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQgPj0gKHVuc2lnbmVkIGludClwQUMtPkkyYy5NYXhTZW5zKSB7Ci0KLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJQTk1JOiBFUlI6IFNrUG5taUV2ZW50OiBTS19QTk1JX0VWVF9TRU5fRVJSX1VQUCBwYXJhbWV0ZXIgd3JvbmcsIFNlbnNvckluZGV4PSVkXG4iLAotCQkJCSh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTY0KSk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotCQkvKgotCQkgKiBTdG9yZSBhIHRyYXAgbWVzc2FnZSBpbiB0aGUgdHJhcCBidWZmZXIgYW5kIGdlbmVyYXRlCi0JCSAqIGFuIGV2ZW50IGZvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyB3aXRoIHRoZQotCQkgKiBTS19EUklWRVJfU0VOREVWRU5UIG1hY3JvLgotCQkgKi8KLQkJUXVldWVTZW5zb3JUcmFwKHBBQywgT0lEX1NLR0VfVFJBUF9TRU5fRVJSX1VQUCwKLQkJCSh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTY0KTsKLQkJKHZvaWQpU0tfRFJJVkVSX1NFTkRFVkVOVChwQUMsIElvQyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTS19QTk1JX0VWVF9DSEdfRVNUX1RJTUVSOgotCQkvKgotCQkgKiBDYWxjdWxhdGUgcG9ydCBzd2l0Y2ggYXZlcmFnZSBvbiBhIHBlciBob3VyIGJhc2lzCi0JCSAqICAgVGltZSBpbnRlcnZhbCBmb3IgY2hlY2sgICAgICAgOiAyODEyNSBtcwotCQkgKiAgIE51bWJlciBvZiB2YWx1ZXMgZm9yIGF2ZXJhZ2UgIDogOAotCQkgKgotCQkgKiBCZSBjYXJlZnVsIGluIGNoYW5naW5nIHRoZXNlIHZhbHVlcywgb24gY2hhbmdlIGNoZWNrCi0JCSAqICAgLSB0eXBlZGVmIG9mIFNLX1BOTUlfRVNUSU1BVEUgKFNpemUgb2YgRXN0VmFsdWUKLQkJICogICAgIGFycmF5IG9uZSBsZXNzIHRoYW4gdmFsdWUgbnVtYmVyKQotCQkgKiAgIC0gVGltZXIgaW5pdGlhbGl6YXRpb24gU2tUaW1lclN0YXJ0KCkgaW4gU2tQbm1pSW5pdAotCQkgKiAgIC0gRGVsdGEgdmFsdWUgYmVsb3cgbXVzdCBiZSBtdWx0aXBsaWNhdGVkIHdpdGgKLQkJICogICAgIHBvd2VyIG9mIDIKLQkJICoKLQkJICovCi0JCXBFc3QgPSAmcEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZTsKLQkJQ291bnRlckluZGV4ID0gcEVzdC0+RXN0VmFsdWVJbmRleCArIDE7Ci0JCWlmIChDb3VudGVySW5kZXggPT0gNykgewotCi0JCQlDb3VudGVySW5kZXggPSAwOwotCQl9Ci0JCXBFc3QtPkVzdFZhbHVlSW5kZXggPSBDb3VudGVySW5kZXg7Ci0KLQkJTmV3ZXN0VmFsdWUgPSBwQUMtPlBubWkuUmxtdENoYW5nZUN0czsKLQkJT2xkZXN0VmFsdWUgPSBwRXN0LT5Fc3RWYWx1ZVtDb3VudGVySW5kZXhdOwotCQlwRXN0LT5Fc3RWYWx1ZVtDb3VudGVySW5kZXhdID0gTmV3ZXN0VmFsdWU7Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIGF2ZXJhZ2UuIERlbHRhIHN0b3JlcyB0aGUgbnVtYmVyIG9mCi0JCSAqIHBvcnQgc3dpdGNoZXMgcGVyIDI4MTI1ICogOCA9IDIyNTAwMCBtcwotCQkgKi8KLQkJaWYgKE5ld2VzdFZhbHVlID49IE9sZGVzdFZhbHVlKSB7Ci0KLQkJCURlbHRhID0gTmV3ZXN0VmFsdWUgLSBPbGRlc3RWYWx1ZTsKLQkJfQotCQllbHNlIHsKLQkJCS8qIE92ZXJmbG93IHNpdHVhdGlvbiAqLwotCQkJRGVsdGEgPSAoU0tfVTY0KSgwIC0gT2xkZXN0VmFsdWUpICsgTmV3ZXN0VmFsdWU7Ci0JCX0KLQotCQkvKgotCQkgKiBFeHRyYXBvbGF0ZSBkZWx0YSB0byBwb3J0IHN3aXRjaGVzIHBlciBob3VyLgotCQkgKiAgICAgRXN0aW1hdGUgPSBEZWx0YSAqICgzNjAwMDAwIC8gMjI1MDAwKQotCQkgKiAgICAgICAgICAgICAgPSBEZWx0YSAqIDE2Ci0JCSAqICAgICAgICAgICAgICA9IERlbHRhIDw8IDQKLQkJICovCi0JCXBBQy0+UG5taS5SbG10Q2hhbmdlRXN0aW1hdGUuRXN0aW1hdGUgPSBEZWx0YSA8PCA0OwotCi0JCS8qCi0JCSAqIENoZWNrIGlmIHRocmVzaG9sZCBpcyBleGNlZWRlZC4gSWYgdGhlIHRocmVzaG9sZCBpcwotCQkgKiBwZXJtYW5lbnRseSBleGNlZWRlZCBldmVyeSAyODEyNSBtcyBhbiBldmVudCB3aWxsIGJlCi0JCSAqIGdlbmVyYXRlZCB0byByZW1pbmQgdGhlIHVzZXIgb2YgdGhpcyBjb25kaXRpb24uCi0JCSAqLwotCQlpZiAoKHBBQy0+UG5taS5SbG10Q2hhbmdlVGhyZXNob2xkICE9IDApICYmCi0JCQkocEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RpbWF0ZSA+PQotCQkJcEFDLT5Qbm1pLlJsbXRDaGFuZ2VUaHJlc2hvbGQpKSB7Ci0KLQkJCVF1ZXVlU2ltcGxlVHJhcChwQUMsIE9JRF9TS0dFX1RSQVBfUkxNVF9DSEFOR0VfVEhSRVMpOwotCQkJKHZvaWQpU0tfRFJJVkVSX1NFTkRFVkVOVChwQUMsIElvQyk7Ci0JCX0KLQotCQlTS19NRU1TRVQoKGNoYXIgKikmRXZlbnRQYXJhbSwgMCwgc2l6ZW9mKEV2ZW50UGFyYW0pKTsKLQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RUaW1lciwKLQkJCTI4MTI1MDAwLCBTS0dFX1BOTUksIFNLX1BOTUlfRVZUX0NIR19FU1RfVElNRVIsCi0JCQlFdmVudFBhcmFtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX0NMRUFSX0NPVU5URVI6Ci0JCS8qCi0JCSAqICBQYXJhbS5QYXJhMzJbMF0gY29udGFpbnMgdGhlIE5ldEluZGV4ICgwIC4uMSkuCi0JCSAqICBQYXJhbS5QYXJhMzJbMV0gaXMgcmVzZXJ2ZWQsIGNvbnRhaW5zIC0xLgotCQkgKi8KLQkJTmV0SW5kZXggPSAoU0tfVTMyKVBhcmFtLlBhcmEzMlswXTsKLQotI2lmZGVmIERFQlVHCi0JCWlmIChOZXRJbmRleCA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewotCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1BOTUksIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiUE5NSTogRVJSOiBTa1BubWlFdmVudDogU0tfUE5NSV9FVlRfQ0xFQVJfQ09VTlRFUiBwYXJhbWV0ZXIgd3JvbmcsIE5ldEluZGV4PSVkXG4iLAotCQkJCU5ldEluZGV4KSk7Ci0KLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JCS8qCi0JCSAqIFNldCBhbGwgY291bnRlcnMgYW5kIHRpbWVzdGFtcHMgdG8gemVyby4KLQkJICogVGhlIGFjY29yZGluZyBOZXRJbmRleCBpcyByZXF1aXJlZCBhcyBhCi0JCSAqIHBhcmFtZXRlciBvZiB0aGUgZXZlbnQuCi0JCSAqLwotCQlSZXNldENvdW50ZXIocEFDLCBJb0MsIE5ldEluZGV4KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX1hNQUNfUkVTRVQ6Ci0JCS8qCi0JCSAqIFRvIGdyYW50IGNvbnRpbnVvdXMgY291bnRlciB2YWx1ZXMgc3RvcmUgdGhlIGN1cnJlbnQKLQkJICogWE1BQyBzdGF0aXN0aWMgdmFsdWVzIHRvIHRoZSBlbnRyaWVzIDEuLm4gb2YgdGhlCi0JCSAqIENvdW50ZXJPZmZzZXQgYXJyYXkuIFhNQUMgRXJyYXRhICMyCi0JCSAqLwotI2lmZGVmIERFQlVHCi0JCWlmICgodW5zaWduZWQgaW50KVBhcmFtLlBhcmE2NCA+PSBTS19NQVhfTUFDUykgewotCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1BOTUksIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiUE5NSTogRVJSOiBTa1BubWlFdmVudDogU0tfUE5NSV9FVlRfWE1BQ19SRVNFVCBwYXJhbWV0ZXIgd3JvbmcsIFBoeXNQb3J0SW5kZXg9JWRcbiIsCi0JCQkJKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZgotCQlQaHlzUG9ydEluZGV4ID0gKHVuc2lnbmVkIGludClQYXJhbS5QYXJhNjQ7Ci0KLQkJLyoKLQkJICogVXBkYXRlIFhNQUMgc3RhdGlzdGljIHRvIGdldCBmcmVzaCB2YWx1ZXMKLQkJICovCi0JCVJldCA9IE1hY1VwZGF0ZShwQUMsIElvQywgMCwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kIC0gMSk7Ci0JCWlmIChSZXQgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQkJU0tfUE5NSV9DSEVDS0ZMQUdTKCJTa1BubWlFdmVudDogT24gcmV0dXJuIik7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCS8qCi0JCSAqIEluY3JlbWVudCBzZW1hcGhvcmUgdG8gaW5kaWNhdGUgdGhhdCBhbiB1cGRhdGUgd2FzCi0JCSAqIGFscmVhZHkgZG9uZQotCQkgKi8KLQkJcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnICsrOwotCi0JCWZvciAoQ291bnRlckluZGV4ID0gMDsgQ291bnRlckluZGV4IDwgU0tfUE5NSV9NQVhfSURYOwotCQkJQ291bnRlckluZGV4ICsrKSB7Ci0KLQkJCWlmICghU3RhdEFkZHJbQ291bnRlckluZGV4XVtNYWNUeXBlXS5HZXRPZmZzZXQpIHsKLQotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5Db3VudGVyT2Zmc2V0W0NvdW50ZXJJbmRleF0gPQotCQkJCUdldFBoeXNTdGF0VmFsKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBDb3VudGVySW5kZXgpOwotCQkJCi0JCQlwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5Db3VudGVySGlnaFtDb3VudGVySW5kZXhdID0gMDsKLQkJfQotCi0JCXBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX1JMTVRfUE9SVF9VUDoKLQkJUGh5c1BvcnRJbmRleCA9ICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTMyWzBdOwotI2lmZGVmIERFQlVHCi0JCWlmIChQaHlzUG9ydEluZGV4ID49IFNLX01BWF9NQUNTKSB7Ci0KLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJQTk1JOiBFUlI6IFNrUG5taUV2ZW50OiBTS19QTk1JX0VWVF9STE1UX1BPUlRfVVAgcGFyYW1ldGVyIgotICAgICAgICAgICAgICAgICAiIHdyb25nLCBQaHlzUG9ydEluZGV4PSVkXG4iLCBQaHlzUG9ydEluZGV4KSk7Ci0KLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JCS8qCi0JCSAqIFN0b3JlIGEgdHJhcCBtZXNzYWdlIGluIHRoZSB0cmFwIGJ1ZmZlciBhbmQgZ2VuZXJhdGUgYW4gZXZlbnQgZm9yCi0JCSAqIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIHdpdGggdGhlIFNLX0RSSVZFUl9TRU5ERVZFTlQgbWFjcm8uCi0JCSAqLwotCQlRdWV1ZVJsbXRQb3J0VHJhcChwQUMsIE9JRF9TS0dFX1RSQVBfUkxNVF9QT1JUX1VQLCBQaHlzUG9ydEluZGV4KTsKLQkJKHZvaWQpU0tfRFJJVkVSX1NFTkRFVkVOVChwQUMsIElvQyk7Ci0KLQkJLyogQnVnZml4IGZvciBYTUFDIGVycmF0YSAoIzEwNjIwKSovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0JCQkvKiBBZGQgaW5jcmVtZW50YWwgZGlmZmVyZW5jZSB0byBvZmZzZXQgKCMxMDYyMCkqLwotCQkJKHZvaWQpcEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJWE1fUlhFX1NIVF9FUlIsICZWYWwzMik7Ci0JCQkKLQkJCVZhbHVlID0gKCgoU0tfVTY0KXBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgotCQkJCSBDb3VudGVySGlnaFtTS19QTk1JX0hSWF9TSE9SVFNdIDw8IDMyKSB8IChTS19VNjQpVmFsMzIpOwotCQkJcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQ291bnRlck9mZnNldFtTS19QTk1JX0hSWF9TSE9SVFNdICs9Ci0JCQkJVmFsdWUgLSBwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5SeFNob3J0WmVyb01hcms7Ci0JCX0KLQkJCi0JCS8qIFRlbGwgVmN0U3RhdHVzKCkgdGhhdCBhIGxpbmsgd2FzIHVwIG1lYW53aGlsZS4gKi8KLQkJcEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSB8PSBTS19QTk1JX1ZDVF9MSU5LOwkJCi0JCWJyZWFrOwotCi0gICAgY2FzZSBTS19QTk1JX0VWVF9STE1UX1BPUlRfRE9XTjoKLQkJUGh5c1BvcnRJbmRleCA9ICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTMyWzBdOwotCi0jaWZkZWYgREVCVUcKLQkJaWYgKFBoeXNQb3J0SW5kZXggPj0gU0tfTUFYX01BQ1MpIHsKLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlBOTUk6IEVSUjogU2tQbm1pRXZlbnQ6IFNLX1BOTUlfRVZUX1JMTVRfUE9SVF9ET1dOIHBhcmFtZXRlciIKLSAgICAgICAgICAgICAgICAgIiB3cm9uZywgUGh5c1BvcnRJbmRleD0lZFxuIiwgUGh5c1BvcnRJbmRleCkpOwotCi0JCQlyZXR1cm4gKDApOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotCQkvKgotCQkgKiBTdG9yZSBhIHRyYXAgbWVzc2FnZSBpbiB0aGUgdHJhcCBidWZmZXIgYW5kIGdlbmVyYXRlIGFuIGV2ZW50IGZvcgotCQkgKiB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBTS19EUklWRVJfU0VOREVWRU5UIG1hY3JvLgotCQkgKi8KLQkJUXVldWVSbG10UG9ydFRyYXAocEFDLCBPSURfU0tHRV9UUkFQX1JMTVRfUE9SVF9ET1dOLCBQaHlzUG9ydEluZGV4KTsKLQkJKHZvaWQpU0tfRFJJVkVSX1NFTkRFVkVOVChwQUMsIElvQyk7Ci0KLQkJLyogQnVnZml4ICMxMDYyMCAtIGdldCB6ZXJvIGxldmVsIGZvciBpbmNyZW1lbnRhbCBkaWZmZXJlbmNlICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0KLQkJCSh2b2lkKXBBQy0+R0luaS5HSUZ1bmMucEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAotCQkJCVhNX1JYRV9TSFRfRVJSLCAmVmFsMzIpOwotCQkJCi0JCQlwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5SeFNob3J0WmVyb01hcmsgPQotCQkJCSgoKFNLX1U2NClwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS4KLQkJCQkgQ291bnRlckhpZ2hbU0tfUE5NSV9IUlhfU0hPUlRTXSA8PCAzMikgfCAoU0tfVTY0KVZhbDMyKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9FVlRfUkxNVF9BQ1RJVkVfRE9XTjoKLQkJUGh5c1BvcnRJbmRleCA9ICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTMyWzBdOwotCQlOZXRJbmRleCA9IChTS19VMzIpUGFyYW0uUGFyYTMyWzFdOwotCi0jaWZkZWYgREVCVUcKLQkJaWYgKFBoeXNQb3J0SW5kZXggPj0gU0tfTUFYX01BQ1MpIHsKLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlBOTUk6IEVSUjogU2tQbm1pRXZlbnQ6IFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX0RPV04gcGFyYW1ldGVyIHRvbyBoaWdoLCBQaHlzUG9ydD0lZFxuIiwKLQkJCQlQaHlzUG9ydEluZGV4KSk7Ci0JCX0KLQotCQlpZiAoTmV0SW5kZXggPj0gcEFDLT5SbG10Lk51bU5ldHMpIHsKLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlBOTUk6IEVSUjogU2tQbm1pRXZlbnQ6IFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX0RPV04gcGFyYW1ldGVyIHRvbyBoaWdoLCBOZXRJbmRleD0lZFxuIiwKLQkJCQlOZXRJbmRleCkpOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotCQkvKgotCQkgKiBGb3Igbm93LCBpZ25vcmUgZXZlbnQgaWYgTmV0SW5kZXggIT0gMC4KLQkJICovCi0JCWlmIChQYXJhbS5QYXJhMzJbMV0gIT0gMCkgewotCi0JCQlyZXR1cm4gKDApOwotCQl9Ci0KLQkJLyoKLQkJICogTm90aGluZyB0byBkbyBpZiBwb3J0IGlzIGFscmVhZHkgaW5hY3RpdmUKLQkJICovCi0JCWlmICghcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQWN0aXZlRmxhZykgewotCi0JCQlyZXR1cm4gKDApOwotCQl9Ci0KLQkJLyoKLQkJICogVXBkYXRlIHN0YXRpc3RpYyBjb3VudGVycyB0byBjYWxjdWxhdGUgbmV3IG9mZnNldCBmb3IgdGhlIHZpcnR1YWwKLQkJICogcG9ydCBhbmQgaW5jcmVtZW50IHNlbWFwaG9yZSB0byBpbmRpY2F0ZSB0aGF0IGFuIHVwZGF0ZSB3YXMgYWxyZWFkeQotCQkgKiBkb25lLgotCQkgKi8KLQkJaWYgKE1hY1VwZGF0ZShwQUMsIElvQywgMCwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kIC0gMSkgIT0KLQkJCVNLX1BOTUlfRVJSX09LKSB7Ci0KLQkJCVNLX1BOTUlfQ0hFQ0tGTEFHUygiU2tQbm1pRXZlbnQ6IE9uIHJldHVybiIpOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlwQUMtPlBubWkuTWFjVXBkYXRlZEZsYWcgKys7Ci0KLQkJLyoKLQkJICogQ2FsY3VsYXRlIG5ldyBjb3VudGVyIG9mZnNldCBmb3IgdmlydHVhbCBwb3J0IHRvIGdyYW50IGNvbnRpbm91cwotCQkgKiBjb3VudGluZyBvbiBwb3J0IHN3aXRjaGVzLiBUaGUgdmlydHVhbCBwb3J0IGNvbnNpc3RzIG9mIGFsbCBjdXJyZW50bHkKLQkJICogYWN0aXZlIHBvcnRzLiBUaGUgcG9ydCBkb3duIGV2ZW50IGluZGljYXRlcyB0aGF0IGEgcG9ydCBpcyByZW1vdmVkCi0JCSAqIGZyb20gdGhlIHZpcnR1YWwgcG9ydC4gVGhlcmVmb3JlIGFkZCB0aGUgY291bnRlciB2YWx1ZSBvZiB0aGUgcmVtb3ZlZAotCQkgKiBwb3J0IHRvIHRoZSBDb3VudGVyT2Zmc2V0IGZvciB0aGUgdmlydHVhbCBwb3J0IHRvIGdyYW50IHRoZSBzYW1lCi0JCSAqIGNvdW50ZXIgdmFsdWUuCi0JCSAqLwotCQlmb3IgKENvdW50ZXJJbmRleCA9IDA7IENvdW50ZXJJbmRleCA8IFNLX1BOTUlfTUFYX0lEWDsKLQkJCUNvdW50ZXJJbmRleCArKykgewotCi0JCQlpZiAoIVN0YXRBZGRyW0NvdW50ZXJJbmRleF1bTWFjVHlwZV0uR2V0T2Zmc2V0KSB7Ci0KLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJVmFsdWUgPSBHZXRQaHlzU3RhdFZhbChwQUMsIElvQywgUGh5c1BvcnRJbmRleCwgQ291bnRlckluZGV4KTsKLQotCQkJcEFDLT5Qbm1pLlZpcnR1YWxDb3VudGVyT2Zmc2V0W0NvdW50ZXJJbmRleF0gKz0gVmFsdWU7Ci0JCX0KLQotCQkvKgotCQkgKiBTZXQgcG9ydCB0byBpbmFjdGl2ZQotCQkgKi8KLQkJcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQWN0aXZlRmxhZyA9IFNLX0ZBTFNFOwotCi0JCXBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX1VQOgotCQlQaHlzUG9ydEluZGV4ID0gKHVuc2lnbmVkIGludClQYXJhbS5QYXJhMzJbMF07Ci0JCU5ldEluZGV4ID0gKFNLX1UzMilQYXJhbS5QYXJhMzJbMV07Ci0KLSNpZmRlZiBERUJVRwotCQlpZiAoUGh5c1BvcnRJbmRleCA+PSBTS19NQVhfTUFDUykgewotCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1BOTUksIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiUE5NSTogRVJSOiBTa1BubWlFdmVudDogU0tfUE5NSV9FVlRfUkxNVF9BQ1RJVkVfVVAgcGFyYW1ldGVyIHRvbyBoaWdoLCBQaHlzUG9ydD0lZFxuIiwKLQkJCQlQaHlzUG9ydEluZGV4KSk7Ci0JCX0KLQotCQlpZiAoTmV0SW5kZXggPj0gcEFDLT5SbG10Lk51bU5ldHMpIHsKLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlBOTUk6IEVSUjogU2tQbm1pRXZlbnQ6IFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX1VQIHBhcmFtZXRlciB0b28gaGlnaCwgTmV0SW5kZXg9JWRcbiIsCi0JCQkJTmV0SW5kZXgpKTsKLQkJfQotI2VuZGlmIC8qIERFQlVHICovCi0KLQkJLyoKLQkJICogRm9yIG5vdywgaWdub3JlIGV2ZW50IGlmIE5ldEluZGV4ICE9IDAuCi0JCSAqLwotCQlpZiAoUGFyYW0uUGFyYTMyWzFdICE9IDApIHsKLQotCQkJcmV0dXJuICgwKTsKLQkJfQotCi0JCS8qCi0JCSAqIE5vdGhpbmcgdG8gZG8gaWYgcG9ydCBpcyBhbHJlYWR5IGFjdGl2ZQotCQkgKi8KLQkJaWYgKHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkFjdGl2ZUZsYWcpIHsKLQotCQkJcmV0dXJuICgwKTsKLQkJfQotCi0JCS8qCi0JCSAqIFN0YXRpc3RpYyBtYWludGVuYW5jZQotCQkgKi8KLQkJcEFDLT5Qbm1pLlJsbXRDaGFuZ2VDdHMgKys7Ci0JCXBBQy0+UG5taS5SbG10Q2hhbmdlVGltZSA9IFNLX1BOTUlfSFVORFJFRFNfU0VDKFNrT3NHZXRUaW1lKHBBQykpOwotCi0JCS8qCi0JCSAqIFN0b3JlIGEgdHJhcCBtZXNzYWdlIGluIHRoZSB0cmFwIGJ1ZmZlciBhbmQgZ2VuZXJhdGUgYW4gZXZlbnQgZm9yCi0JCSAqIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIHdpdGggdGhlIFNLX0RSSVZFUl9TRU5ERVZFTlQgbWFjcm8uCi0JCSAqLwotCQlRdWV1ZVJsbXROZXdNYWNUcmFwKHBBQywgUGh5c1BvcnRJbmRleCk7Ci0JCSh2b2lkKVNLX0RSSVZFUl9TRU5ERVZFTlQocEFDLCBJb0MpOwotCi0JCS8qCi0JCSAqIFVwZGF0ZSBzdGF0aXN0aWMgY291bnRlcnMgdG8gY2FsY3VsYXRlIG5ldyBvZmZzZXQgZm9yIHRoZSB2aXJ0dWFsCi0JCSAqIHBvcnQgYW5kIGluY3JlbWVudCBzZW1hcGhvcmUgdG8gaW5kaWNhdGUgdGhhdCBhbiB1cGRhdGUgd2FzCi0JCSAqIGFscmVhZHkgZG9uZS4KLQkJICovCi0JCWlmIChNYWNVcGRhdGUocEFDLCBJb0MsIDAsIHBBQy0+R0luaS5HSU1hY3NGb3VuZCAtIDEpICE9Ci0JCQlTS19QTk1JX0VSUl9PSykgewotCi0JCQlTS19QTk1JX0NIRUNLRkxBR1MoIlNrUG5taUV2ZW50OiBPbiByZXR1cm4iKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnICsrOwotCi0JCS8qCi0JCSAqIENhbGN1bGF0ZSBuZXcgY291bnRlciBvZmZzZXQgZm9yIHZpcnR1YWwgcG9ydCB0byBncmFudCBjb250aW5vdXMKLQkJICogY291bnRpbmcgb24gcG9ydCBzd2l0Y2hlcy4gQSBuZXcgcG9ydCBpcyBhZGRlZCB0byB0aGUgdmlydHVhbCBwb3J0LgotCQkgKiBUaGVyZWZvcmUgc3Vic3RyYWN0IHRoZSBjb3VudGVyIHZhbHVlIG9mIHRoZSBuZXcgcG9ydCBmcm9tIHRoZQotCQkgKiBDb3VudGVyT2Zmc2V0IGZvciB0aGUgdmlydHVhbCBwb3J0IHRvIGdyYW50IHRoZSBzYW1lIHZhbHVlLgotCQkgKi8KLQkJZm9yIChDb3VudGVySW5kZXggPSAwOyBDb3VudGVySW5kZXggPCBTS19QTk1JX01BWF9JRFg7Ci0JCQlDb3VudGVySW5kZXggKyspIHsKLQotCQkJaWYgKCFTdGF0QWRkcltDb3VudGVySW5kZXhdW01hY1R5cGVdLkdldE9mZnNldCkgewotCi0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCVZhbHVlID0gR2V0UGh5c1N0YXRWYWwocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsIENvdW50ZXJJbmRleCk7Ci0KLQkJCXBBQy0+UG5taS5WaXJ0dWFsQ291bnRlck9mZnNldFtDb3VudGVySW5kZXhdIC09IFZhbHVlOwotCQl9Ci0KLQkJLyogU2V0IHBvcnQgdG8gYWN0aXZlICovCi0JCXBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkFjdGl2ZUZsYWcgPSBTS19UUlVFOwotCi0JCXBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfRVZUX1JMTVRfU0VHTUVOVEFUSU9OOgotCQkvKgotCQkgKiBQYXJhLlBhcmEzMlswXSBjb250YWlucyB0aGUgTmV0SW5kZXguCi0JCSAqLwotCi0JCS8qCi0JCSAqIFN0b3JlIGEgdHJhcCBtZXNzYWdlIGluIHRoZSB0cmFwIGJ1ZmZlciBhbmQgZ2VuZXJhdGUgYW4gZXZlbnQgZm9yCi0JCSAqIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIHdpdGggdGhlIFNLX0RSSVZFUl9TRU5ERVZFTlQgbWFjcm8uCi0JCSAqLwotCQlRdWV1ZVNpbXBsZVRyYXAocEFDLCBPSURfU0tHRV9UUkFQX1JMTVRfU0VHTUVOVEFUSU9OKTsKLQkJKHZvaWQpU0tfRFJJVkVSX1NFTkRFVkVOVChwQUMsIElvQyk7Ci0JCWJyZWFrOwotCi0gICAgY2FzZSBTS19QTk1JX0VWVF9STE1UX1NFVF9ORVRTOgotCQkvKgotCQkgKiAgUGFyYW0uUGFyYTMyWzBdIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgTmV0cy4KLQkJICogIFBhcmFtLlBhcmEzMlsxXSBpcyByZXNlcnZlZCwgY29udGFpbnMgLTEuCi0JCSAqLwotCSAgICAvKgotICAgIAkgKiBDaGVjayBudW1iZXIgb2YgbmV0cwotCQkgKi8KLQkJTWF4TmV0TnVtYmVyID0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCQlpZiAoKCh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTMyWzBdIDwgMSkKLQkJCXx8ICgodW5zaWduZWQgaW50KVBhcmFtLlBhcmEzMlswXSA+IE1heE5ldE51bWJlcikpIHsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVU5LTk9XTl9ORVQpOwotCQl9Ci0KLSAgICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTMyWzBdID09IDEpIHsgLyogc2luZ2xlIG5ldCBtb2RlICovCi0gICAgICAgIAlwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPSBTS19GQUxTRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsgLyogZHVhbCBuZXQgbW9kZSAqLwotICAgICAgICAJcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID0gU0tfVFJVRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0tfUE5NSV9FVlRfVkNUX1JFU0VUOgotCQlQaHlzUG9ydEluZGV4ID0gUGFyYW0uUGFyYTMyWzBdOwotCQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XTsKLQkJcFZjdEJhY2t1cERhdGEgPSAmcEFDLT5Qbm1pLlZjdEJhY2t1cFtQaHlzUG9ydEluZGV4XTsKLQkJCi0JCWlmIChwQUMtPlBubWkuVmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdICYgU0tfUE5NSV9WQ1RfUEVORElORykgewotCQkJUmV0Q29kZSA9IFNrR21DYWJsZURpYWdTdGF0dXMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsIFNLX0ZBTFNFKTsKLQkJCWlmIChSZXRDb2RlID09IDIpIHsKLQkJCQkvKgotCQkJCSAqIFZDVCB0ZXN0IGlzIHN0aWxsIHJ1bm5pbmcuCi0JCQkJICogU3RhcnQgVkNUIHRpbWVyIGNvdW50ZXIgYWdhaW4uCi0JCQkJICovCi0JCQkJU0tfTUVNU0VUKChjaGFyICopICZQYXJhbSwgMCwgc2l6ZW9mKFBhcmFtKSk7Ci0JCQkJUGFyYW0uUGFyYTMyWzBdID0gUGh5c1BvcnRJbmRleDsKLQkJCQlQYXJhbS5QYXJhMzJbMV0gPSAtMTsKLQkJCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsCi0JCQkJCSZwQUMtPlBubWkuVmN0VGltZW91dFtQaHlzUG9ydEluZGV4XS5WY3RUaW1lciwKLQkJCQk0MDAwMDAwLCBTS0dFX1BOTUksIFNLX1BOTUlfRVZUX1ZDVF9SRVNFVCwgUGFyYW0pOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSAmPSB+U0tfUE5NSV9WQ1RfUEVORElORzsKLQkJCXBBQy0+UG5taS5WY3RTdGF0dXNbUGh5c1BvcnRJbmRleF0gfD0KLQkJCQkoU0tfUE5NSV9WQ1RfTkVXX1ZDVF9EQVRBIHwgU0tfUE5NSV9WQ1RfVEVTVF9ET05FKTsKLQkJCQotCQkJLyogQ29weSByZXN1bHRzIGZvciBsYXRlciB1c2UgdG8gUE5NSSBzdHJ1Y3QuICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSAgewotCQkJCWlmIChwUHJ0LT5QTWRpUGFpclN0c1tpXSA9PSBTS19QTk1JX1ZDVF9OT1JNQUxfQ0FCTEUpIHsKLQkJCQkJaWYgKChwUHJ0LT5QTWRpUGFpckxlbltpXSA+IDM1KSAmJgotCQkJCQkJKHBQcnQtPlBNZGlQYWlyTGVuW2ldIDwgMHhmZikpIHsKLQkJCQkJCXBQcnQtPlBNZGlQYWlyU3RzW2ldID0gU0tfUE5NSV9WQ1RfSU1QRURBTkNFX01JU01BVENIOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICgocFBydC0+UE1kaVBhaXJMZW5baV0gPiAzNSkgJiYKLQkJCQkJKHBQcnQtPlBNZGlQYWlyTGVuW2ldICE9IDB4ZmYpKSB7Ci0JCQkJCUNhYmxlTGVuZ3RoID0gMTAwMCAqCi0JCQkJCQkoKCgxNzUgKiBwUHJ0LT5QTWRpUGFpckxlbltpXSkgLyAyMTApIC0gMjgpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJQ2FibGVMZW5ndGggPSAwOwotCQkJCX0KLQkJCQlwVmN0QmFja3VwRGF0YS0+UE1kaVBhaXJMZW5baV0gPSBDYWJsZUxlbmd0aDsKLQkJCQlwVmN0QmFja3VwRGF0YS0+UE1kaVBhaXJTdHNbaV0gPSBwUHJ0LT5QTWRpUGFpclN0c1tpXTsKLQkJCX0KLQkJCQotCQkJUGFyYW0uUGFyYTMyWzBdID0gUGh5c1BvcnRJbmRleDsKLQkJCVBhcmFtLlBhcmEzMlsxXSA9IC0xOwotCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9QT1JUX1JFU0VULCBQYXJhbSk7Ci0JCQlTa0V2ZW50RGlzcGF0Y2hlcihwQUMsIElvQyk7Ci0JCX0KLQkJCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JU0tfUE5NSV9DSEVDS0ZMQUdTKCJTa1BubWlFdmVudDogT24gcmV0dXJuIik7Ci0JcmV0dXJuICgwKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUHJpdmF0ZSBmdW5jdGlvbnMKLSAqCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUG5taVZhciAtIEdldHMsIHByZXNldHMsIGFuZCBzZXRzIHNpbmdsZSBPSURzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglMb29rcyB1cCB0aGUgcmVxdWVzdGVkIE9JRCwgY2FsbHMgdGhlIGNvcnJlc3BvbmRpbmcgaGFuZGxlcgotICoJZnVuY3Rpb24sIGFuZCBwYXNzZXMgdGhlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZ2V0LCBwcmVzZXQsIG9yCi0gKglzZXQgY29tbWFuZC4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBTa0dlUG5taUdldFZhciwKLSAqCVNrR2VQbm1pUHJlU2V0VmFyLCBvciBTa0dlUG5taVNldFZhci4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfWFhYLiBGb3IgZGV0YWlscyBoYXZlIGEgbG9vayBhdCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlCi0gKgljYWxsaW5nIGZ1bmN0aW9ucy4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fTkVUICBUaGUgcmVxdWVzdGVkIE5ldEluZGV4IGRvZXNuJ3QgZXhpc3QKLSAqLwotUE5NSV9TVEFUSUMgaW50IFBubWlWYXIoCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotaW50IEFjdGlvbiwJCS8qIEdFVC9QUkVTRVQvU0VUIGFjdGlvbiAqLwotU0tfVTMyIElkLAkJLyogT2JqZWN0IElEIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkICovCi1jaGFyICpwQnVmLAkJLyogQnVmZmVyIHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IGRhdGEgdHJhbnNmZXIgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogVG90YWwgbGVuZ3RoIG9mIHBCdWYgbWFuYWdlbWVudCBkYXRhICAqLwotU0tfVTMyIEluc3RhbmNlLAkvKiBJbnN0YW5jZSAoMS4ubikgdGhhdCBpcyB0byBiZSBzZXQgb3IgLTEgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQl1bnNpZ25lZCBpbnQJVGFibGVJbmRleDsKLQlpbnQJCVJldDsKLQotCi0JaWYgKChUYWJsZUluZGV4ID0gTG9va3VwSWQoSWQpKSA9PSAodW5zaWduZWQgaW50KSgtMSkpIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfVU5LTk9XTl9PSUQpOwotCX0KLQkKLSAgICAvKiBDaGVjayBOZXRJbmRleCAqLwotCWlmIChOZXRJbmRleCA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fTkVUKTsKLQl9Ci0KLQlTS19QTk1JX0NIRUNLRkxBR1MoIlBubWlWYXI6IE9uIGNhbGwiKTsKLQotCVJldCA9IElkVGFibGVbVGFibGVJbmRleF0uRnVuYyhwQUMsIElvQywgQWN0aW9uLCBJZCwgcEJ1ZiwgcExlbiwKLQkJSW5zdGFuY2UsIFRhYmxlSW5kZXgsIE5ldEluZGV4KTsKLQotCVNLX1BOTUlfQ0hFQ0tGTEFHUygiUG5taVZhcjogT24gcmV0dXJuIik7Ci0KLQlyZXR1cm4gKFJldCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFBubWlTdHJ1Y3QgLSBQcmVzZXRzIGFuZCBTZXRzIGRhdGEgaW4gc3RydWN0dXJlIFNLX1BOTUlfU1RSVUNUX0RBVEEKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBzdG9yZWQgaW4KLSAqCVNLX1BOTUlfU1RSVUNUX0RBVEEgaWYgdGhlIHBhc3NlZCBidWZmZXIgaGFzIHRoZSBtaW5pbXVtIHNpemUgb2YKLSAqCVNLX1BOTUlfTUlOX1NUUlVDVF9TSVpFLiBUaGUgc3ViLWZ1bmN0aW9uIHJ1bnMgdGhyb3VnaCB0aGUgSWRUYWJsZSwKLSAqCWNoZWNrcyB3aGljaCBPSURzIGFyZSBhYmxlIHRvIHNldCwgYW5kIGNhbGxzIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIG9mCi0gKgl0aGUgT0lEIHRvIHBlcmZvcm0gdGhlIHNldC4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gd2lsbAotICoJYWxzbyBiZSBzdG9yZWQgaW4gU0tfUE5NSV9TVFJVQ1RfREFUQSBpZiB0aGUgcGFzc2VkIGJ1ZmZlciBoYXMgdGhlCi0gKgltaW5pbXVtIHNpemUgb2YgU0tfUE5NSV9NSU5fU1RSVUNUX1NJWkUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQKLSAqCWJ5IFNrR2VQbm1pUHJlU2V0U3RydWN0IGFuZCBTa0dlUG5taVNldFN0cnVjdC4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfWFhYLiBUaGUgY29kZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX05FVCAgVGhlIHJlcXVlc3RlZCBOZXRJbmRleCBkb2Vzbid0IGV4aXN0Ci0gKi8KLVBOTUlfU1RBVElDIGludCBQbm1pU3RydWN0KAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLWludCAgQWN0aW9uLAkvKiBQUkVTRVQvU0VUIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBMZW5ndGggb2YgcEJ1ZiBtYW5hZ2VtZW50IGRhdGEgYnVmZmVyICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsd2F5cyB6ZXJvICovCi17Ci0JaW50CQlSZXQ7Ci0JdW5zaWduZWQgaW50CVRhYmxlSW5kZXg7Ci0JdW5zaWduZWQgaW50CURzdE9mZnNldDsKLQl1bnNpZ25lZCBpbnQJTGVuOwotCXVuc2lnbmVkIGludAlJbnN0YW5jZU5vOwotCXVuc2lnbmVkIGludAlJbnN0YW5jZUNudDsKLQlTS19VMzIJCUluc3RhbmNlOwotCVNLX1UzMgkJSWQ7Ci0KLQotCS8qIENoZWNrIGlmIHRoZSBwYXNzZWQgYnVmZmVyIGhhcyB0aGUgcmlnaHQgc2l6ZSAqLwotCWlmICgqcExlbiA8IFNLX1BOTUlfU1RSVUNUX1NJWkUpIHsKLQotCQkvKiBDaGVjayBpZiB3ZSBjYW4gcmV0dXJuIHRoZSBlcnJvciB3aXRoaW4gdGhlIGJ1ZmZlciAqLwotCQlpZiAoKnBMZW4gPj0gU0tfUE5NSV9NSU5fU1RSVUNUX1NJWkUpIHsKLQotCQkJU0tfUE5NSV9TRVRfU1RBVChwQnVmLCBTS19QTk1JX0VSUl9UT09fU0hPUlQsCi0JCQkJKFNLX1UzMikoLTEpKTsKLQkJfQotCi0JCSpwTGVuID0gU0tfUE5NSV9TVFJVQ1RfU0laRTsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCX0KLQkKLSAgICAvKiBDaGVjayBOZXRJbmRleCAqLwotCWlmIChOZXRJbmRleCA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fTkVUKTsKLQl9Ci0JCi0JU0tfUE5NSV9DSEVDS0ZMQUdTKCJQbm1pU3RydWN0OiBPbiBjYWxsIik7Ci0KLQkvKgotCSAqIFVwZGF0ZSB0aGUgdmFsdWVzIG9mIFJMTVQgYW5kIFNJUlEgYW5kIGluY3JlbWVudCBzZW1hcGhvcmVzIHRvCi0JICogaW5kaWNhdGUgdGhhdCBhbiB1cGRhdGUgd2FzIGFscmVhZHkgZG9uZS4KLQkgKi8KLQlpZiAoKFJldCA9IFJsbXRVcGRhdGUocEFDLCBJb0MsIE5ldEluZGV4KSkgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQlTS19QTk1JX1NFVF9TVEFUKHBCdWYsIFJldCwgKFNLX1UzMikoLTEpKTsKLQkJKnBMZW4gPSBTS19QTk1JX01JTl9TVFJVQ1RfU0laRTsKLQkJcmV0dXJuIChSZXQpOwotCX0KLQotCWlmICgoUmV0ID0gU2lycVVwZGF0ZShwQUMsIElvQykpICE9IFNLX1BOTUlfRVJSX09LKSB7Ci0KLQkJU0tfUE5NSV9TRVRfU1RBVChwQnVmLCBSZXQsIChTS19VMzIpKC0xKSk7Ci0JCSpwTGVuID0gU0tfUE5NSV9NSU5fU1RSVUNUX1NJWkU7Ci0JCXJldHVybiAoUmV0KTsKLQl9Ci0KLQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnICsrOwotCXBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgKys7Ci0KLQkvKiBQcmVzZXQvU2V0IHZhbHVlcyAqLwotCWZvciAoVGFibGVJbmRleCA9IDA7IFRhYmxlSW5kZXggPCBJRF9UQUJMRV9TSVpFOyBUYWJsZUluZGV4ICsrKSB7Ci0KLQkJaWYgKChJZFRhYmxlW1RhYmxlSW5kZXhdLkFjY2VzcyAhPSBTS19QTk1JX1JXKSAmJgotCQkJKElkVGFibGVbVGFibGVJbmRleF0uQWNjZXNzICE9IFNLX1BOTUlfV08pKSB7Ci0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJSW5zdGFuY2VObyA9IElkVGFibGVbVGFibGVJbmRleF0uSW5zdGFuY2VObzsKLQkJSWQgPSBJZFRhYmxlW1RhYmxlSW5kZXhdLklkOwotCi0JCWZvciAoSW5zdGFuY2VDbnQgPSAxOyBJbnN0YW5jZUNudCA8PSBJbnN0YW5jZU5vOwotCQkJSW5zdGFuY2VDbnQgKyspIHsKLQotCQkJRHN0T2Zmc2V0ID0gSWRUYWJsZVtUYWJsZUluZGV4XS5PZmZzZXQgKwotCQkJCShJbnN0YW5jZUNudCAtIDEpICoKLQkJCQlJZFRhYmxlW1RhYmxlSW5kZXhdLlN0cnVjdFNpemU7Ci0KLQkJCS8qCi0JCQkgKiBCZWNhdXNlIFZQRCBtdWx0aXBsZSBpbnN0YW5jZSB2YXJpYWJsZXMgYXJlCi0JCQkgKiBub3Qgc2V0YWJsZSB3ZSBkbyBub3QgbmVlZCB0byBldmFsdWF0ZSBWUEQKLQkJCSAqIGluc3RhbmNlcy4gSGF2ZSBhIGxvb2sgdG8gVlBEIGluc3RhbmNlCi0JCQkgKiBjYWxjdWxhdGlvbiBpbiBTa1BubWlHZXRTdHJ1Y3QoKS4KLQkJCSAqLwotCQkJSW5zdGFuY2UgPSAoU0tfVTMyKUluc3RhbmNlQ250OwotCi0JCQkvKgotCQkJICogRXZhbHVhdGUgbmVlZGVkIGJ1ZmZlciBsZW5ndGgKLQkJCSAqLwotCQkJTGVuID0gMDsKLQkJCVJldCA9IElkVGFibGVbVGFibGVJbmRleF0uRnVuYyhwQUMsIElvQywKLQkJCQlTS19QTk1JX0dFVCwgSWRUYWJsZVtUYWJsZUluZGV4XS5JZCwKLQkJCQlOVUxMLCAmTGVuLCBJbnN0YW5jZSwgVGFibGVJbmRleCwgTmV0SW5kZXgpOwotCi0JCQlpZiAoUmV0ID09IFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCkgewotCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoUmV0ICE9IFNLX1BOTUlfRVJSX1RPT19TSE9SVCkgewotCi0JCQkJcEFDLT5Qbm1pLlJsbXRVcGRhdGVkRmxhZyAtLTsKLQkJCQlwQUMtPlBubWkuU2lycVVwZGF0ZWRGbGFnIC0tOwotCi0JCQkJU0tfUE5NSV9DSEVDS0ZMQUdTKCJQbm1pU3RydWN0OiBPbiByZXR1cm4iKTsKLQkJCQlTS19QTk1JX1NFVF9TVEFUKHBCdWYsCi0JCQkJCVNLX1BOTUlfRVJSX0dFTkVSQUwsIERzdE9mZnNldCk7Ci0JCQkJKnBMZW4gPSBTS19QTk1JX01JTl9TVFJVQ1RfU0laRTsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJfQotCQkJaWYgKElkID09IE9JRF9TS0dFX1ZQRF9BQ1RJT04pIHsKLQotCQkJCXN3aXRjaCAoKihwQnVmICsgRHN0T2Zmc2V0KSkgewotCi0JCQkJY2FzZSBTS19QTk1JX1ZQRF9DUkVBVEU6Ci0JCQkJCUxlbiA9IDMgKyAqKHBCdWYgKyBEc3RPZmZzZXQgKyAzKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIFNLX1BOTUlfVlBEX0RFTEVURToKLQkJCQkJTGVuID0gMzsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OgotCQkJCQlMZW4gPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIENhbGwgdGhlIE9JRCBoYW5kbGVyIGZ1bmN0aW9uICovCi0JCQlSZXQgPSBJZFRhYmxlW1RhYmxlSW5kZXhdLkZ1bmMocEFDLCBJb0MsIEFjdGlvbiwKLQkJCQlJZFRhYmxlW1RhYmxlSW5kZXhdLklkLCBwQnVmICsgRHN0T2Zmc2V0LAotCQkJCSZMZW4sIEluc3RhbmNlLCBUYWJsZUluZGV4LCBOZXRJbmRleCk7Ci0KLQkJCWlmIChSZXQgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQkJCXBBQy0+UG5taS5SbG10VXBkYXRlZEZsYWcgLS07Ci0JCQkJcEFDLT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyAtLTsKLQotCQkJCVNLX1BOTUlfQ0hFQ0tGTEFHUygiUG5taVN0cnVjdDogT24gcmV0dXJuIik7Ci0JCQkJU0tfUE5NSV9TRVRfU1RBVChwQnVmLCBTS19QTk1JX0VSUl9CQURfVkFMVUUsCi0JCQkJCURzdE9mZnNldCk7Ci0JCQkJKnBMZW4gPSBTS19QTk1JX01JTl9TVFJVQ1RfU0laRTsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwotCXBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgLS07Ci0KLQlTS19QTk1JX0NIRUNLRkxBR1MoIlBubWlTdHJ1Y3Q6IE9uIHJldHVybiIpOwotCVNLX1BOTUlfU0VUX1NUQVQocEJ1ZiwgU0tfUE5NSV9FUlJfT0ssIChTS19VMzIpKC0xKSk7Ci0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIExvb2t1cElkIC0gTG9va3VwIGFuIE9JRCBpbiB0aGUgSWRUYWJsZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJU2NhbnMgdGhlIElkVGFibGUgdG8gZmluZCB0aGUgdGFibGUgZW50cnkgb2YgYW4gT0lELgotICoKLSAqIFJldHVybnM6Ci0gKglUaGUgdGFibGUgaW5kZXggb3IgLTEgaWYgbm90IGZvdW5kLgotICovCi1QTk1JX1NUQVRJQyBpbnQgTG9va3VwSWQoCi1TS19VMzIgSWQpCQkvKiBPYmplY3QgaWRlbnRpZmllciB0byBiZSBzZWFyY2hlZCAqLwotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IElEX1RBQkxFX1NJWkU7IGkrKykgewotCi0JCWlmIChJZFRhYmxlW2ldLklkID09IElkKSB7Ci0KLQkJCXJldHVybiBpOwotCQl9Ci0JfQotCi0JcmV0dXJuICgtMSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE9pZFN0cnVjdCAtIEhhbmRsZXIgb2YgT0lEX1NLR0VfQUxMX0RBVEEKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgT0lEIHBlcmZvcm1zIGEgR2V0L1ByZXNldC9TZXRTdHJ1Y3QgY2FsbCBhbmQgcmV0dXJucyBhbGwgZGF0YQotICoJaW4gYSBTS19QTk1JX1NUUlVDVF9EQVRBIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgICAgIEEgZ2VuZXJhbCBzZXZlcmUgaW50ZXJuYWwgZXJyb3Igb2NjdXJlZC4KLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gY29udGFpbgotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IGRhdGEgKGUuZy4gYSAzMmJpdCB2YWx1ZSBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgYnV0IGEgMTYgYml0IHZhbHVlIHdhcyBwYXNzZWQpLgotICoJU0tfUE5NSV9FUlJfQkFEX1ZBTFVFICAgIFRoZSBwYXNzZWQgdmFsdWUgaXMgbm90IGluIHRoZSB2YWxpZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHJhbmdlLgotICoJU0tfUE5NSV9FUlJfUkVBRF9PTkxZICAgIFRoZSBPSUQgaXMgcmVhZC1vbmx5IGFuZCBjYW5ub3QgYmUgc2V0LgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUIFRoZSByZXF1ZXN0ZWQgaW5zdGFuY2Ugb2YgdGhlIE9JRCBkb2Vzbid0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KLSAqLwotUE5NSV9TVEFUSUMgaW50IE9pZFN0cnVjdCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgQWN0aW9uLAkJLyogR0VUL1BSRVNFVC9TRVQgYWN0aW9uICovCi1TS19VMzIgSWQsCQkvKiBPYmplY3QgSUQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBPbiBjYWxsOiBwQnVmIGJ1ZmZlciBsZW5ndGguIE9uIHJldHVybjogdXNlZCBidWZmZXIgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgcXVlcmllZCBvciAtMSAqLwotdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIC8qIEluZGV4IHRvIHRoZSBJZCB0YWJsZSAqLwotU0tfVTMyIE5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotCWlmIChJZCAhPSBPSURfU0tHRV9BTExfREFUQSkgewotCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMDMsCi0JCQlTS19QTk1JX0VSUjAwM01TRyk7Ci0KLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCX0KLQotCS8qCi0JICogQ2hlY2sgaW5zdGFuY2UuIFdlIG9ubHkgaGFuZGxlIHNpbmdsZSBpbnN0YW5jZSB2YXJpYWJsZXMKLQkgKi8KLQlpZiAoSW5zdGFuY2UgIT0gKFNLX1UzMikoLTEpICYmIEluc3RhbmNlICE9IDEpIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUKTsKLQl9Ci0KLQlzd2l0Y2ggKEFjdGlvbikgewotCi0JY2FzZSBTS19QTk1JX0dFVDoKLQkJcmV0dXJuIChTa1BubWlHZXRTdHJ1Y3QocEFDLCBJb0MsIHBCdWYsIHBMZW4sIE5ldEluZGV4KSk7Ci0KLQljYXNlIFNLX1BOTUlfUFJFU0VUOgotCQlyZXR1cm4gKFNrUG5taVByZVNldFN0cnVjdChwQUMsIElvQywgcEJ1ZiwgcExlbiwgTmV0SW5kZXgpKTsKLQotCWNhc2UgU0tfUE5NSV9TRVQ6Ci0JCXJldHVybiAoU2tQbm1pU2V0U3RydWN0KHBBQywgSW9DLCBwQnVmLCBwTGVuLCBOZXRJbmRleCkpOwotCX0KLQotCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMDQsIFNLX1BOTUlfRVJSMDA0TVNHKTsKLQotCSpwTGVuID0gMDsKLQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBQZXJmb3JtIC0gT0lEIGhhbmRsZXIgb2YgT0lEX1NLR0VfQUNUSU9OCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglOb25lLgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkLgotICoJU0tfUE5NSV9FUlJfVE9PX1NIT1JUICAgIFRoZSBwYXNzZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgZGF0YSAoZS5nLiBhIDMyYml0IHZhbHVlIGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLCBidXQgYSAxNiBiaXQgdmFsdWUgd2FzIHBhc3NlZCkuCi0gKglTS19QTk1JX0VSUl9CQURfVkFMVUUgICAgVGhlIHBhc3NlZCB2YWx1ZSBpcyBub3QgaW4gdGhlIHZhbGlkCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgcmFuZ2UuCi0gKglTS19QTk1JX0VSUl9SRUFEX09OTFkgICAgVGhlIE9JRCBpcyByZWFkLW9ubHkgYW5kIGNhbm5vdCBiZSBzZXQuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QgVGhlIHJlcXVlc3RlZCBpbnN0YW5jZSBvZiB0aGUgT0lEIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QgKGUuZy4gcG9ydCBpbnN0YW5jZSAzIG9uIGEgdHdvIHBvcnQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLgotICovCi1QTk1JX1NUQVRJQyBpbnQgUGVyZm9ybSgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgQWN0aW9uLAkJLyogR0VUL1BSRVNFVC9TRVQgYWN0aW9uICovCi1TS19VMzIgSWQsCQkvKiBPYmplY3QgSUQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBPbiBjYWxsOiBwQnVmIGJ1ZmZlciBsZW5ndGguIE9uIHJldHVybjogdXNlZCBidWZmZXIgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgcXVlcmllZCBvciAtMSAqLwotdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIC8qIEluZGV4IHRvIHRoZSBJZCB0YWJsZSAqLwotU0tfVTMyIE5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotCWludAlSZXQ7Ci0JU0tfVTMyCUFjdGlvbk9wOwotCi0KLQkvKgotCSAqIENoZWNrIGluc3RhbmNlLiBXZSBvbmx5IGhhbmRsZSBzaW5nbGUgaW5zdGFuY2UgdmFyaWFibGVzCi0JICovCi0JaWYgKEluc3RhbmNlICE9IChTS19VMzIpKC0xKSAmJiBJbnN0YW5jZSAhPSAxKSB7Ci0KLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCk7Ci0JfQotCi0JaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1UzMikpIHsKLQotCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JfQotCi0JLyogQ2hlY2sgaWYgYSBnZXQgc2hvdWxkIGJlIHBlcmZvcm1lZCAqLwotCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9HRVQpIHsKLQotCQkvKiBBIGdldCBpcyBlYXN5LiBXZSBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHZhbHVlICovCi0JCUFjdGlvbk9wID0gKFNLX1UzMilTS19QTk1JX0FDVF9JRExFOwotCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmLCBBY3Rpb25PcCk7Ci0JCSpwTGVuID0gc2l6ZW9mKFNLX1UzMik7Ci0KLQkJcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci0JfQotCi0JLyogQ29udGludWUgd2l0aCBQUkVTRVQvU0VUIGFjdGlvbiAqLwotCWlmICgqcExlbiA+IHNpemVvZihTS19VMzIpKSB7Ci0KLQkJcmV0dXJuIChTS19QTk1JX0VSUl9CQURfVkFMVUUpOwotCX0KLQotCS8qIENoZWNrIGlmIHRoZSBjb21tYW5kIGlzIGEga25vd24gb25lICovCi0JU0tfUE5NSV9SRUFEX1UzMihwQnVmLCBBY3Rpb25PcCk7Ci0JaWYgKCpwTGVuID4gc2l6ZW9mKFNLX1UzMikgfHwKLQkJKEFjdGlvbk9wICE9IFNLX1BOTUlfQUNUX0lETEUgJiYKLQkJQWN0aW9uT3AgIT0gU0tfUE5NSV9BQ1RfUkVTRVQgJiYKLQkJQWN0aW9uT3AgIT0gU0tfUE5NSV9BQ1RfU0VMRlRFU1QgJiYKLQkJQWN0aW9uT3AgIT0gU0tfUE5NSV9BQ1RfUkVTRVRDTlQpKSB7Ci0KLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JfQotCi0JLyogQSBwcmVzZXQgZW5kcyBoZXJlICovCi0JaWYgKEFjdGlvbiA9PSBTS19QTk1JX1BSRVNFVCkgewotCi0JCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCX0KLQotCXN3aXRjaCAoQWN0aW9uT3ApIHsKLQotCWNhc2UgU0tfUE5NSV9BQ1RfSURMRToKLQkJLyogTm90aGluZyB0byBkbyAqLwotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9BQ1RfUkVTRVQ6Ci0JCS8qCi0JCSAqIFBlcmZvcm0gYSBkcml2ZXIgcmVzZXQgb3Igc29tZXRoaW5nIHRoYXQgY29tZXMgbmVhcgotCQkgKiB0byB0aGlzLgotCQkgKi8KLQkJUmV0ID0gU0tfRFJJVkVSX1JFU0VUKHBBQywgSW9DKTsKLQkJaWYgKFJldCAhPSAwKSB7Ci0KLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMDUsCi0JCQkJU0tfUE5NSV9FUlIwMDVNU0cpOwotCi0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBTS19QTk1JX0FDVF9TRUxGVEVTVDoKLQkJLyoKLQkJICogUGVyZm9ybSBhIGRyaXZlciBzZWxmdGVzdCBvciBzb21ldGhpbmcgc2ltaWxhciB0byB0aGlzLgotCQkgKiBDdXJyZW50bHkgdGhpcyBmZWF0dXJlIGlzIG5vdCB1c2VkIGFuZCB3aWxsIHByb2JhYmx5Ci0JCSAqIGltcGxlbWVudGVkIGluIGFub3RoZXIgd2F5LgotCQkgKi8KLQkJUmV0ID0gU0tfRFJJVkVSX1NFTEZURVNUKHBBQywgSW9DKTsKLQkJcEFDLT5Qbm1pLlRlc3RSZXN1bHQgPSBSZXQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBTS19QTk1JX0FDVF9SRVNFVENOVDoKLQkJLyogU2V0IGFsbCBjb3VudGVycyBhbmQgdGltZXN0YW1wcyB0byB6ZXJvICovCi0JCVJlc2V0Q291bnRlcihwQUMsIElvQywgTmV0SW5kZXgpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMDYsCi0JCQlTS19QTk1JX0VSUjAwNk1TRyk7Ci0KLQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQl9Ci0KLQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTWFjODAyM1N0YXQgLSBPSUQgaGFuZGxlciBvZiBPSURfR0VOX1hYWCBhbmQgT0lEXzgwMl8zX1hYWAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJUmV0cmlldmVzIHRoZSBzdGF0aXN0aWMgdmFsdWVzIG9mIHRoZSB2aXJ0dWFsIHBvcnQgKGxvZ2ljYWwKLSAqCWluZGV4IDApLiBPbmx5IHNwZWNpYWwgT0lEcyBvZiBORElTIGFyZSBoYW5kbGVkIHdoaWNoIGNvbnNpc3QKLSAqCW9mIGEgMzIgYml0IGluc3RlYWQgb2YgYSA2NCBiaXQgdmFsdWUuIFRoZSBPSURzIGFyZSBwdWJsaWMKLSAqCWJlY2F1c2UgcGVyaGFwcyBzb21lIG90aGVyIHBsYXRmb3JtIGNhbiB1c2UgdGhlbSB0b28uCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1BOTUlfRVJSX09LICAgICAgICAgICBUaGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQuCi0gKglTS19QTk1JX0VSUl9UT09fU0hPUlQgICAgVGhlIHBhc3NlZCBidWZmZXIgaXMgdG9vIHNob3J0IHRvIGNvbnRhaW4KLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCBkYXRhIChlLmcuIGEgMzJiaXQgdmFsdWUgaXMKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQsIGJ1dCBhIDE2IGJpdCB2YWx1ZSB3YXMgcGFzc2VkKS4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuCi0gKi8KLVBOTUlfU1RBVElDIGludCBNYWM4MDIzU3RhdCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgQWN0aW9uLAkJLyogR0VUL1BSRVNFVC9TRVQgYWN0aW9uICovCi1TS19VMzIgSWQsCQkvKiBPYmplY3QgSUQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBPbiBjYWxsOiBwQnVmIGJ1ZmZlciBsZW5ndGguIE9uIHJldHVybjogdXNlZCBidWZmZXIgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgcXVlcmllZCBvciAtMSAqLwotdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsCS8qIEluZGV4IHRvIHRoZSBJZCB0YWJsZSAqLwotU0tfVTMyIE5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotCWludCAgICAgUmV0OwotCVNLX1U2NCAgU3RhdFZhbDsKLQlTS19VMzIgIFN0YXRWYWwzMjsKLQlTS19CT09MIElzNjRCaXRSZXEgPSBTS19GQUxTRTsKLQotCS8qCi0JICogT25seSB0aGUgYWN0aXZlIE1hYyBpcyByZXR1cm5lZAotCSAqLwotCWlmIChJbnN0YW5jZSAhPSAoU0tfVTMyKSgtMSkgJiYgSW5zdGFuY2UgIT0gMSkgewotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QpOwotCX0KLQotCS8qCi0JICogQ2hlY2sgYWN0aW9uIHR5cGUKLQkgKi8KLQlpZiAoQWN0aW9uICE9IFNLX1BOTUlfR0VUKSB7Ci0KLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1JFQURfT05MWSk7Ci0JfQotCi0JLyogQ2hlY2sgbGVuZ3RoICovCi0Jc3dpdGNoIChJZCkgewotCi0JY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6Ci0JY2FzZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOgotCQlpZiAoKnBMZW4gPCBzaXplb2YoU0tfTUFDX0FERFIpKSB7Ci0KLQkJCSpwTGVuID0gc2l6ZW9mKFNLX01BQ19BRERSKTsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0jaWZuZGVmIFNLX05ESVNfNjRCSVRfQ1RSCi0JCWlmICgqcExlbiA8IHNpemVvZihTS19VMzIpKSB7Ci0JCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0KLSNlbHNlIC8qIFNLX05ESVNfNjRCSVRfQ1RSICovCi0KLQkJLyogZm9yIGNvbXBhdGliaWxpdHksIGF0IGxlYXN0IDMyYml0IGFyZSByZXF1aXJlZCBmb3IgT0lEICovCi0JCWlmICgqcExlbiA8IHNpemVvZihTS19VMzIpKSB7Ci0JCQkvKgotCQkJKiBidXQgaW5kaWNhdGUgaGFuZGxpbmcgZm9yIDY0Yml0IHZhbHVlcywKLQkJCSogaWYgaW5zdWZmaWNpZW50IHNwYWNlIGlzIHByb3ZpZGVkCi0JCQkqLwotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCi0JCUlzNjRCaXRSZXEgPSAoKnBMZW4gPCBzaXplb2YoU0tfVTY0KSkgPyBTS19GQUxTRSA6IFNLX1RSVUU7Ci0jZW5kaWYgLyogU0tfTkRJU182NEJJVF9DVFIgKi8KLQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBVcGRhdGUgYWxsIHN0YXRpc3RpY3MsIGJlY2F1c2Ugd2UgcmV0cmlldmUgdmlydHVhbCBNQUMsIHdoaWNoCi0JICogY29uc2lzdHMgb2YgbXVsdGlwbGUgcGh5c2ljYWwgc3RhdGlzdGljcyBhbmQgaW5jcmVtZW50IHNlbWFwaG9yZQotCSAqIHRvIGluZGljYXRlIHRoYXQgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGRvbmUuCi0JICovCi0JUmV0ID0gTWFjVXBkYXRlKHBBQywgSW9DLCAwLCBwQUMtPkdJbmkuR0lNYWNzRm91bmQgLSAxKTsKLQlpZiAoIFJldCAhPSBTS19QTk1JX0VSUl9PSykgewotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChSZXQpOwotCX0KLQlwQUMtPlBubWkuTWFjVXBkYXRlZEZsYWcgKys7Ci0KLQkvKgotCSAqIEdldCB2YWx1ZSAoTUFDIEluZGV4IDAgaWRlbnRpZmllcyB0aGUgdmlydHVhbCBNQUMpCi0JICovCi0Jc3dpdGNoIChJZCkgewotCi0JY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6Ci0JCUNvcHlNYWMocEJ1ZiwgJnBBQy0+QWRkci5OZXRbTmV0SW5kZXhdLlBlcm1hbmVudE1hY0FkZHJlc3MpOwotCQkqcExlbiA9IHNpemVvZihTS19NQUNfQUREUik7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOgotCQlDb3B5TWFjKHBCdWYsICZwQUMtPkFkZHIuTmV0W05ldEluZGV4XS5DdXJyZW50TWFjQWRkcmVzcyk7Ci0JCSpwTGVuID0gc2l6ZW9mKFNLX01BQ19BRERSKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlTdGF0VmFsID0gR2V0U3RhdFZhbChwQUMsIElvQywgMCwgSWRUYWJsZVtUYWJsZUluZGV4XS5QYXJhbSwgTmV0SW5kZXgpOwotCi0JCS8qIGJ5IGRlZmF1bHQgMzJiaXQgdmFsdWVzIGFyZSBldmFsdWF0ZWQgKi8KLQkJaWYgKCFJczY0Qml0UmVxKSB7Ci0JCQlTdGF0VmFsMzIgPSAoU0tfVTMyKVN0YXRWYWw7Ci0JCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmLCBTdGF0VmFsMzIpOwotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJfQotCQllbHNlIHsKLQkJCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFN0YXRWYWwpOwotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlwQUMtPlBubWkuTWFjVXBkYXRlZEZsYWcgLS07Ci0KLQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTWFjUHJpdmF0ZVN0YXQgLSBPSUQgaGFuZGxlciBmdW5jdGlvbiBvZiBPSURfU0tHRV9TVEFUX1hYWAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJUmV0cmlldmVzIHRoZSBNQUMgc3RhdGlzdGljIGRhdGEuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1BOTUlfRVJSX09LICAgICAgICAgICBUaGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQuCi0gKglTS19QTk1JX0VSUl9UT09fU0hPUlQgICAgVGhlIHBhc3NlZCBidWZmZXIgaXMgdG9vIHNob3J0IHRvIGNvbnRhaW4KLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCBkYXRhIChlLmcuIGEgMzJiaXQgdmFsdWUgaXMKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQsIGJ1dCBhIDE2IGJpdCB2YWx1ZSB3YXMgcGFzc2VkKS4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuCi0gKi8KLVBOTUlfU1RBVElDIGludCBNYWNQcml2YXRlU3RhdCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgQWN0aW9uLAkJLyogR0VUL1BSRVNFVC9TRVQgYWN0aW9uICovCi1TS19VMzIgSWQsCQkvKiBPYmplY3QgSUQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBPbiBjYWxsOiBwQnVmIGJ1ZmZlciBsZW5ndGguIE9uIHJldHVybjogdXNlZCBidWZmZXIgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgcXVlcmllZCBvciAtMSAqLwotdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIC8qIEluZGV4IHRvIHRoZSBJZCB0YWJsZSAqLwotU0tfVTMyIE5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotCXVuc2lnbmVkIGludAlMb2dQb3J0TWF4OwotCXVuc2lnbmVkIGludAlMb2dQb3J0SW5kZXg7Ci0JdW5zaWduZWQgaW50CVBoeXNQb3J0TWF4OwotCXVuc2lnbmVkIGludAlMaW1pdDsKLQl1bnNpZ25lZCBpbnQJT2Zmc2V0OwotCWludAkJCQlNYWNUeXBlOwotCWludAkJCQlSZXQ7Ci0JU0tfVTY0CQkJU3RhdFZhbDsKLQkKLQkKLQotCS8qIENhbGN1bGF0ZSBpbnN0YW5jZSBpZiB3aXNoZWQuIE1BQyBpbmRleCAwIGlzIHRoZSB2aXJ0dWFsIE1BQyAqLwotCVBoeXNQb3J0TWF4ID0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCUxvZ1BvcnRNYXggPSBTS19QTk1JX1BPUlRfUEhZUzJMT0coUGh5c1BvcnRNYXgpOwotCQotCU1hY1R5cGUgPSBwQUMtPkdJbmkuR0lNYWNUeXBlOwotCi0JaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7IC8qIER1YWwgbmV0IG1vZGUgKi8KLQkJTG9nUG9ydE1heC0tOwotCX0KLQotCWlmICgoSW5zdGFuY2UgIT0gKFNLX1UzMikoLTEpKSkgeyAvKiBPbmx5IG9uZSBzcGVjaWZpYyBpbnN0YW5jZSBpcyBxdWVyaWVkICovCi0JCS8qIENoZWNrIGluc3RhbmNlIHJhbmdlICovCi0JCWlmICgoSW5zdGFuY2UgPCAxKSB8fCAoSW5zdGFuY2UgPiBMb2dQb3J0TWF4KSkgewotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCk7Ci0JCX0KLQkJTG9nUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0lOU1QyTE9HKEluc3RhbmNlKTsKLQkJTGltaXQgPSBMb2dQb3J0SW5kZXggKyAxOwotCX0KLQotCWVsc2UgeyAvKiBJbnN0YW5jZSA9PSAoU0tfVTMyKSgtMSksIGdldCBhbGwgSW5zdGFuY2VzIG9mIHRoYXQgT0lEICovCi0KLQkJTG9nUG9ydEluZGV4ID0gMDsKLQkJTGltaXQgPSBMb2dQb3J0TWF4OwotCX0KLQotCS8qIENoZWNrIGFjdGlvbiAqLwotCWlmIChBY3Rpb24gIT0gU0tfUE5NSV9HRVQpIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfUkVBRF9PTkxZKTsKLQl9Ci0KLQkvKiBDaGVjayBsZW5ndGggKi8KLQlpZiAoKnBMZW4gPCAoTGltaXQgLSBMb2dQb3J0SW5kZXgpICogc2l6ZW9mKFNLX1U2NCkpIHsKLQotCQkqcExlbiA9IChMaW1pdCAtIExvZ1BvcnRJbmRleCkgKiBzaXplb2YoU0tfVTY0KTsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCX0KLQotCS8qCi0JICogVXBkYXRlIE1BQyBzdGF0aXN0aWMgYW5kIGluY3JlbWVudCBzZW1hcGhvcmUgdG8gaW5kaWNhdGUgdGhhdAotCSAqIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBkb25lLgotCSAqLwotCVJldCA9IE1hY1VwZGF0ZShwQUMsIElvQywgMCwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kIC0gMSk7Ci0JaWYgKFJldCAhPSBTS19QTk1JX0VSUl9PSykgewotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChSZXQpOwotCX0KLQlwQUMtPlBubWkuTWFjVXBkYXRlZEZsYWcgKys7Ci0KLQkvKiBHZXQgdmFsdWUgKi8KLQlPZmZzZXQgPSAwOwotCWZvciAoOyBMb2dQb3J0SW5kZXggPCBMaW1pdDsgTG9nUG9ydEluZGV4ICsrKSB7Ci0KLQkJc3dpdGNoIChJZCkgewotCi0vKiBYWFggbm90IHlldCBpbXBsZW1lbnRlZCBkdWUgdG8gWE1BQyBwcm9ibGVtcwotCQljYXNlIE9JRF9TS0dFX1NUQVRfVFhfVVRJTDoKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0qLwotLyogWFhYIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZHVlIHRvIFhNQUMgcHJvYmxlbXMKLQkJY2FzZSBPSURfU0tHRV9TVEFUX1JYX1VUSUw6Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotKi8KLQkJY2FzZSBPSURfU0tHRV9TVEFUX1JYOgotCQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX0dNQUMpIHsKLQkJCQlTdGF0VmFsID0KLQkJCQkJR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9ydEluZGV4LAotCQkJCQkJCSAgIFNLX1BOTUlfSFJYX0JST0FEQ0FTVCwgTmV0SW5kZXgpICsKLQkJCQkJR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9ydEluZGV4LAotCQkJCQkJCSAgIFNLX1BOTUlfSFJYX01VTFRJQ0FTVCwgTmV0SW5kZXgpICsKLQkJCQkJR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9ydEluZGV4LAotCQkJCQkJCSAgIFNLX1BOTUlfSFJYX1VOSUNBU1QsIE5ldEluZGV4KSArCi0JCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKLQkJCQkJCQkgICBTS19QTk1JX0hSWF9VTkRFUlNJWkUsIE5ldEluZGV4KTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVN0YXRWYWwgPSBHZXRTdGF0VmFsKHBBQywgSW9DLCBMb2dQb3J0SW5kZXgsCi0JCQkJCUlkVGFibGVbVGFibGVJbmRleF0uUGFyYW0sIE5ldEluZGV4KTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfU1RBVF9UWDoKLQkJCWlmIChNYWNUeXBlID09IFNLX01BQ19HTUFDKSB7Ci0JCQkJU3RhdFZhbCA9Ci0JCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKLQkJCQkJCQkgICBTS19QTk1JX0hUWF9CUk9BRENBU1QsIE5ldEluZGV4KSArCi0JCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKLQkJCQkJCQkgICBTS19QTk1JX0hUWF9NVUxUSUNBU1QsIE5ldEluZGV4KSArCi0JCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKLQkJCQkJCQkgICBTS19QTk1JX0hUWF9VTklDQVNULCBOZXRJbmRleCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTdGF0VmFsID0gR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9ydEluZGV4LAotCQkJCQlJZFRhYmxlW1RhYmxlSW5kZXhdLlBhcmFtLCBOZXRJbmRleCk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJU3RhdFZhbCA9IEdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKLQkJCQlJZFRhYmxlW1RhYmxlSW5kZXhdLlBhcmFtLCBOZXRJbmRleCk7Ci0JCX0KLQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiArIE9mZnNldCwgU3RhdFZhbCk7Ci0KLQkJT2Zmc2V0ICs9IHNpemVvZihTS19VNjQpOwotCX0KLQkqcExlbiA9IE9mZnNldDsKLQotCXBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKLQotCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBBZGRyIC0gT0lEIGhhbmRsZXIgZnVuY3Rpb24gb2YgT0lEX1NLR0VfUEhZU19DVVJfQUREUiBhbmQgX0ZBQ19BRERSCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglHZXQvUHJlc2V0cy9TZXRzIHRoZSBjdXJyZW50IGFuZCBmYWN0b3J5IE1BQyBhZGRyZXNzLiBUaGUgTUFDCi0gKglhZGRyZXNzIG9mIHRoZSB2aXJ0dWFsIHBvcnQsIHdoaWNoIGlzIHJlcG9ydGVkIHRvIHRoZSBPUywgbWF5Ci0gKglub3QgYmUgY2hhbmdlZCwgYnV0IHRoZSBwaHlzaWNhbCBvbmVzLiBBIHNldCB0byB0aGUgdmlydHVhbCBwb3J0Ci0gKgl3aWxsIGJlIGlnbm9yZWQuIE5vIGVycm9yIHNob3VsZCBiZSByZXBvcnRlZCBiZWNhdXNlIG90aGVyd2lzZQotICoJYSBtdWx0aXBsZSBpbnN0YW5jZSBzZXQgKC0xKSB3b3VsZCBhbHdheXMgZmFpbC4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgICAgIEEgZ2VuZXJhbCBzZXZlcmUgaW50ZXJuYWwgZXJyb3Igb2NjdXJlZC4KLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gY29udGFpbgotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IGRhdGEgKGUuZy4gYSAzMmJpdCB2YWx1ZSBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgYnV0IGEgMTYgYml0IHZhbHVlIHdhcyBwYXNzZWQpLgotICoJU0tfUE5NSV9FUlJfQkFEX1ZBTFVFICAgIFRoZSBwYXNzZWQgdmFsdWUgaXMgbm90IGluIHRoZSB2YWxpZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHJhbmdlLgotICoJU0tfUE5NSV9FUlJfUkVBRF9PTkxZICAgIFRoZSBPSUQgaXMgcmVhZC1vbmx5IGFuZCBjYW5ub3QgYmUgc2V0LgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUIFRoZSByZXF1ZXN0ZWQgaW5zdGFuY2Ugb2YgdGhlIE9JRCBkb2Vzbid0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KLSAqLwotUE5NSV9TVEFUSUMgaW50IEFkZHIoCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotaW50IEFjdGlvbiwJCS8qIEdFVC9QUkVTRVQvU0VUIGFjdGlvbiAqLwotU0tfVTMyIElkLAkJLyogT2JqZWN0IElEIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkICovCi1jaGFyICpwQnVmLAkJLyogQnVmZmVyIHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IGRhdGEgdHJhbnNmZXIgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogT24gY2FsbDogcEJ1ZiBidWZmZXIgbGVuZ3RoLiBPbiByZXR1cm46IHVzZWQgYnVmZmVyICovCi1TS19VMzIgSW5zdGFuY2UsCS8qIEluc3RhbmNlICgxLi5uKSB0aGF0IGlzIHRvIGJlIHF1ZXJpZWQgb3IgLTEgKi8KLXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCAvKiBJbmRleCB0byB0aGUgSWQgdGFibGUgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQlpbnQJCVJldDsKLQl1bnNpZ25lZCBpbnQJTG9nUG9ydE1heDsKLQl1bnNpZ25lZCBpbnQJUGh5c1BvcnRNYXg7Ci0JdW5zaWduZWQgaW50CUxvZ1BvcnRJbmRleDsKLQl1bnNpZ25lZCBpbnQJUGh5c1BvcnRJbmRleDsKLQl1bnNpZ25lZCBpbnQJTGltaXQ7Ci0JdW5zaWduZWQgaW50CU9mZnNldCA9IDA7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBpbnN0YW5jZSBpZiB3aXNoZWQuIE1BQyBpbmRleCAwIGlzIHRoZSB2aXJ0dWFsCi0JICogTUFDLgotCSAqLwotCVBoeXNQb3J0TWF4ID0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCUxvZ1BvcnRNYXggPSBTS19QTk1JX1BPUlRfUEhZUzJMT0coUGh5c1BvcnRNYXgpOwotCi0JaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7IC8qIER1YWwgbmV0IG1vZGUgKi8KLQkJTG9nUG9ydE1heC0tOwotCX0KLQotCWlmICgoSW5zdGFuY2UgIT0gKFNLX1UzMikoLTEpKSkgeyAvKiBPbmx5IG9uZSBzcGVjaWZpYyBpbnN0YW5jZSBpcyBxdWVyaWVkICovCi0JCS8qIENoZWNrIGluc3RhbmNlIHJhbmdlICovCi0JCWlmICgoSW5zdGFuY2UgPCAxKSB8fCAoSW5zdGFuY2UgPiBMb2dQb3J0TWF4KSkgewotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCk7Ci0JCX0KLQkJTG9nUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0lOU1QyTE9HKEluc3RhbmNlKTsKLQkJTGltaXQgPSBMb2dQb3J0SW5kZXggKyAxOwotCX0KLQllbHNlIHsgLyogSW5zdGFuY2UgPT0gKFNLX1UzMikoLTEpLCBnZXQgYWxsIEluc3RhbmNlcyBvZiB0aGF0IE9JRCAqLwotCi0JCUxvZ1BvcnRJbmRleCA9IDA7Ci0JCUxpbWl0ID0gTG9nUG9ydE1heDsKLQl9Ci0KLQkvKgotCSAqIFBlcmZvcm0gQWN0aW9uCi0JICovCi0JaWYgKEFjdGlvbiA9PSBTS19QTk1JX0dFVCkgewotCi0JCS8qIENoZWNrIGxlbmd0aCAqLwotCQlpZiAoKnBMZW4gPCAoTGltaXQgLSBMb2dQb3J0SW5kZXgpICogNikgewotCi0JCQkqcExlbiA9IChMaW1pdCAtIExvZ1BvcnRJbmRleCkgKiA2OwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0KLQkJLyoKLQkJICogR2V0IHZhbHVlCi0JCSAqLwotCQlmb3IgKDsgTG9nUG9ydEluZGV4IDwgTGltaXQ7IExvZ1BvcnRJbmRleCArKykgewotCi0JCQlzd2l0Y2ggKElkKSB7Ci0KLQkJCWNhc2UgT0lEX1NLR0VfUEhZU19DVVJfQUREUjoKLQkJCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQkJCQkJQ29weU1hYyhwQnVmICsgT2Zmc2V0LCAmcEFDLT5BZGRyLk5ldFtOZXRJbmRleF0uQ3VycmVudE1hY0FkZHJlc3MpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJUGh5c1BvcnRJbmRleCA9IFNLX1BOTUlfUE9SVF9MT0cyUEhZUyhwQUMsIExvZ1BvcnRJbmRleCk7Ci0KLQkJCQkJQ29weU1hYyhwQnVmICsgT2Zmc2V0LAotCQkJCQkJJnBBQy0+QWRkci5Qb3J0W1BoeXNQb3J0SW5kZXhdLkN1cnJlbnRNYWNBZGRyZXNzKTsKLQkJCQl9Ci0JCQkJT2Zmc2V0ICs9IDY7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgT0lEX1NLR0VfUEhZU19GQUNfQUREUjoKLQkJCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQkJCQkJQ29weU1hYyhwQnVmICsgT2Zmc2V0LAotCQkJCQkJJnBBQy0+QWRkci5OZXRbTmV0SW5kZXhdLlBlcm1hbmVudE1hY0FkZHJlc3MpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJUGh5c1BvcnRJbmRleCA9IFNLX1BOTUlfUE9SVF9MT0cyUEhZUygKLQkJCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQotCQkJCQlDb3B5TWFjKHBCdWYgKyBPZmZzZXQsCi0JCQkJCQkmcEFDLT5BZGRyLlBvcnRbUGh5c1BvcnRJbmRleF0uUGVybWFuZW50TWFjQWRkcmVzcyk7Ci0JCQkJfQotCQkJCU9mZnNldCArPSA2OwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMDgsCi0JCQkJCVNLX1BOTUlfRVJSMDA4TVNHKTsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJfQotCQl9Ci0KLQkJKnBMZW4gPSBPZmZzZXQ7Ci0JfQotCWVsc2UgewotCQkvKgotCQkgKiBUaGUgbG9naWNhbCBNQUMgYWRkcmVzcyBtYXkgbm90IGJlIGNoYW5nZWQgb25seQotCQkgKiB0aGUgcGh5c2ljYWwgb25lcwotCQkgKi8KLQkJaWYgKElkID09IE9JRF9TS0dFX1BIWVNfRkFDX0FERFIpIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9SRUFEX09OTFkpOwotCQl9Ci0KLQkJLyoKLQkJICogT25seSB0aGUgY3VycmVudCBhZGRyZXNzIG1heSBiZSBjaGFuZ2VkCi0JCSAqLwotCQlpZiAoSWQgIT0gT0lEX1NLR0VfUEhZU19DVVJfQUREUikgewotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDA5LAotCQkJCVNLX1BOTUlfRVJSMDA5TVNHKTsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCS8qIENoZWNrIGxlbmd0aCAqLwotCQlpZiAoKnBMZW4gPCAoTGltaXQgLSBMb2dQb3J0SW5kZXgpICogNikgewotCi0JCQkqcExlbiA9IChMaW1pdCAtIExvZ1BvcnRJbmRleCkgKiA2OwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCWlmICgqcExlbiA+IChMaW1pdCAtIExvZ1BvcnRJbmRleCkgKiA2KSB7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJfQotCi0JCS8qCi0JCSAqIENoZWNrIEFjdGlvbgotCQkgKi8KLQkJaWYgKEFjdGlvbiA9PSBTS19QTk1JX1BSRVNFVCkgewotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLQkJfQotCi0JCS8qCi0JCSAqIFNldCBPSURfU0tHRV9NQUNfQ1VSX0FERFIKLQkJICovCi0JCWZvciAoOyBMb2dQb3J0SW5kZXggPCBMaW1pdDsgTG9nUG9ydEluZGV4ICsrLCBPZmZzZXQgKz0gNikgewotCi0JCQkvKgotCQkJICogQSBzZXQgdG8gdmlydHVhbCBwb3J0IGFuZCBzZXQgb2YgYnJvYWRjYXN0Ci0JCQkgKiBhZGRyZXNzIHdpbGwgYmUgaWdub3JlZAotCQkJICovCi0JCQlpZiAoTG9nUG9ydEluZGV4ID09IDAgfHwgU0tfTUVNQ01QKHBCdWYgKyBPZmZzZXQsCi0JCQkJIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIsIDYpID09IDApIHsKLQotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKHBBQywKLQkJCQlMb2dQb3J0SW5kZXgpOwotCi0JCQlSZXQgPSBTa0FkZHJPdmVycmlkZShwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkoU0tfTUFDX0FERFIgKikocEJ1ZiArIE9mZnNldCksCi0JCQkJKExvZ1BvcnRJbmRleCA9PSAwID8gU0tfQUREUl9WSVJUVUFMX0FERFJFU1MgOgotCQkJCVNLX0FERFJfUEhZU0lDQUxfQUREUkVTUykpOwotCQkJaWYgKFJldCAhPSBTS19BRERSX09WRVJSSURFX1NVQ0NFU1MpIHsKLQotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQl9Ci0JCX0KLQkJKnBMZW4gPSBPZmZzZXQ7Ci0JfQotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENzdW1TdGF0IC0gT0lEIGhhbmRsZXIgZnVuY3Rpb24gb2YgT0lEX1NLR0VfQ0hLU01fWFhYCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglSZXRyaWV2ZXMgdGhlIHN0YXRpc3RpYyB2YWx1ZXMgb2YgdGhlIENTVU0gbW9kdWxlLiBUaGUgQ1NVTSBkYXRhCi0gKglzdHJ1Y3R1cmUgbXVzdCBiZSBhdmFpbGFibGUgaW4gdGhlIFNLX0FDIGV2ZW4gaWYgdGhlIENTVU0gbW9kdWxlCi0gKglpcyBub3QgaW5jbHVkZWQsIGJlY2F1c2UgUE5NSSByZWFkcyB0aGUgc3RhdGlzdGljIGRhdGEgZnJvbSB0aGUKLSAqCUNTVU0gcGFydCBvZiBTS19BQyBkaXJlY3RseS4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgICAgIEEgZ2VuZXJhbCBzZXZlcmUgaW50ZXJuYWwgZXJyb3Igb2NjdXJlZC4KLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gY29udGFpbgotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IGRhdGEgKGUuZy4gYSAzMmJpdCB2YWx1ZSBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgYnV0IGEgMTYgYml0IHZhbHVlIHdhcyBwYXNzZWQpLgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUIFRoZSByZXF1ZXN0ZWQgaW5zdGFuY2Ugb2YgdGhlIE9JRCBkb2Vzbid0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KLSAqLwotUE5NSV9TVEFUSUMgaW50IENzdW1TdGF0KAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLWludCBBY3Rpb24sCQkvKiBHRVQvUFJFU0VUL1NFVCBhY3Rpb24gKi8KLVNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwotY2hhciAqcEJ1ZiwJCS8qIEJ1ZmZlciB1c2VkIGZvciB0aGUgbWFuYWdlbWVudCBkYXRhIHRyYW5zZmVyICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIE9uIGNhbGw6IHBCdWYgYnVmZmVyIGxlbmd0aC4gT24gcmV0dXJuOiB1c2VkIGJ1ZmZlciAqLwotU0tfVTMyIEluc3RhbmNlLAkvKiBJbnN0YW5jZSAoMS4ubikgdGhhdCBpcyB0byBiZSBxdWVyaWVkIG9yIC0xICovCi11bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgLyogSW5kZXggdG8gdGhlIElkIHRhYmxlICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsd2F5cyB6ZXJvICovCi17Ci0JdW5zaWduZWQgaW50CUluZGV4OwotCXVuc2lnbmVkIGludAlMaW1pdDsKLQl1bnNpZ25lZCBpbnQJT2Zmc2V0ID0gMDsKLQlTS19VNjQJCVN0YXRWYWw7Ci0KLQotCS8qCi0JICogQ2FsY3VsYXRlIGluc3RhbmNlIGlmIHdpc2hlZAotCSAqLwotCWlmIChJbnN0YW5jZSAhPSAoU0tfVTMyKSgtMSkpIHsKLQotCQlpZiAoKEluc3RhbmNlIDwgMSkgfHwgKEluc3RhbmNlID4gU0tDU19OVU1fUFJPVE9DT0xTKSkgewotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCk7Ci0JCX0KLQkJSW5kZXggPSAodW5zaWduZWQgaW50KUluc3RhbmNlIC0gMTsKLQkJTGltaXQgPSBJbmRleCArIDE7Ci0JfQotCWVsc2UgewotCQlJbmRleCA9IDA7Ci0JCUxpbWl0ID0gU0tDU19OVU1fUFJPVE9DT0xTOwotCX0KLQotCS8qCi0JICogQ2hlY2sgYWN0aW9uCi0JICovCi0JaWYgKEFjdGlvbiAhPSBTS19QTk1JX0dFVCkgewotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9SRUFEX09OTFkpOwotCX0KLQotCS8qIENoZWNrIGxlbmd0aCAqLwotCWlmICgqcExlbiA8IChMaW1pdCAtIEluZGV4KSAqIHNpemVvZihTS19VNjQpKSB7Ci0KLQkJKnBMZW4gPSAoTGltaXQgLSBJbmRleCkgKiBzaXplb2YoU0tfVTY0KTsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCX0KLQotCS8qCi0JICogR2V0IHZhbHVlCi0JICovCi0JZm9yICg7IEluZGV4IDwgTGltaXQ7IEluZGV4ICsrKSB7Ci0KLQkJc3dpdGNoIChJZCkgewotCi0JCWNhc2UgT0lEX1NLR0VfQ0hLU01fUlhfT0tfQ1RTOgotCQkJU3RhdFZhbCA9IHBBQy0+Q3N1bS5Qcm90b1N0YXRzW05ldEluZGV4XVtJbmRleF0uUnhPa0N0czsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfQ0hLU01fUlhfVU5BQkxFX0NUUzoKLQkJCVN0YXRWYWwgPSBwQUMtPkNzdW0uUHJvdG9TdGF0c1tOZXRJbmRleF1bSW5kZXhdLlJ4VW5hYmxlQ3RzOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9DSEtTTV9SWF9FUlJfQ1RTOgotCQkJU3RhdFZhbCA9IHBBQy0+Q3N1bS5Qcm90b1N0YXRzW05ldEluZGV4XVtJbmRleF0uUnhFcnJDdHM7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX0NIS1NNX1RYX09LX0NUUzoKLQkJCVN0YXRWYWwgPSBwQUMtPkNzdW0uUHJvdG9TdGF0c1tOZXRJbmRleF1bSW5kZXhdLlR4T2tDdHM7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX0NIS1NNX1RYX1VOQUJMRV9DVFM6Ci0JCQlTdGF0VmFsID0gcEFDLT5Dc3VtLlByb3RvU3RhdHNbTmV0SW5kZXhdW0luZGV4XS5UeFVuYWJsZUN0czsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDEwLAotCQkJCVNLX1BOTUlfRVJSMDEwTVNHKTsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYgKyBPZmZzZXQsIFN0YXRWYWwpOwotCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1U2NCk7Ci0JfQotCi0JLyoKLQkgKiBTdG9yZSB1c2VkIGJ1ZmZlciBzcGFjZQotCSAqLwotCSpwTGVuID0gT2Zmc2V0OwotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFNlbnNvclN0YXQgLSBPSUQgaGFuZGxlciBmdW5jdGlvbiBvZiBPSURfU0tHRV9TRU5TT1JfWFhYCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglSZXRyaWV2ZXMgdGhlIHN0YXRpc3RpYyB2YWx1ZXMgb2YgdGhlIEkyQyBtb2R1bGUsIHdoaWNoIGhhbmRsZXMKLSAqCXRoZSB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3JzLgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkLgotICoJU0tfUE5NSV9FUlJfVE9PX1NIT1JUICAgIFRoZSBwYXNzZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgZGF0YSAoZS5nLiBhIDMyYml0IHZhbHVlIGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLCBidXQgYSAxNiBiaXQgdmFsdWUgd2FzIHBhc3NlZCkuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QgVGhlIHJlcXVlc3RlZCBpbnN0YW5jZSBvZiB0aGUgT0lEIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QgKGUuZy4gcG9ydCBpbnN0YW5jZSAzIG9uIGEgdHdvIHBvcnQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLgotICovCi1QTk1JX1NUQVRJQyBpbnQgU2Vuc29yU3RhdCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgQWN0aW9uLAkJLyogR0VUL1BSRVNFVC9TRVQgYWN0aW9uICovCi1TS19VMzIgSWQsCQkvKiBPYmplY3QgSUQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBPbiBjYWxsOiBwQnVmIGJ1ZmZlciBsZW5ndGguIE9uIHJldHVybjogdXNlZCBidWZmZXIgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgcXVlcmllZCBvciAtMSAqLwotdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIC8qIEluZGV4IHRvIHRoZSBJZCB0YWJsZSAqLwotU0tfVTMyIE5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotCXVuc2lnbmVkIGludAlpOwotCXVuc2lnbmVkIGludAlJbmRleDsKLQl1bnNpZ25lZCBpbnQJTGltaXQ7Ci0JdW5zaWduZWQgaW50CU9mZnNldDsKLQl1bnNpZ25lZCBpbnQJTGVuOwotCVNLX1UzMgkJVmFsMzI7Ci0JU0tfVTY0CQlWYWw2NDsKLQotCi0JLyoKLQkgKiBDYWxjdWxhdGUgaW5zdGFuY2UgaWYgd2lzaGVkCi0JICovCi0JaWYgKChJbnN0YW5jZSAhPSAoU0tfVTMyKSgtMSkpKSB7Ci0KLQkJaWYgKChJbnN0YW5jZSA8IDEpIHx8IChJbnN0YW5jZSA+IChTS19VMzIpcEFDLT5JMmMuTWF4U2VucykpIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QpOwotCQl9Ci0KLQkJSW5kZXggPSAodW5zaWduZWQgaW50KUluc3RhbmNlIC0xOwotCQlMaW1pdCA9ICh1bnNpZ25lZCBpbnQpSW5zdGFuY2U7Ci0JfQotCWVsc2UgewotCQlJbmRleCA9IDA7Ci0JCUxpbWl0ID0gKHVuc2lnbmVkIGludCkgcEFDLT5JMmMuTWF4U2VuczsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGFjdGlvbgotCSAqLwotCWlmIChBY3Rpb24gIT0gU0tfUE5NSV9HRVQpIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfUkVBRF9PTkxZKTsKLQl9Ci0KLQkvKiBDaGVjayBsZW5ndGggKi8KLQlzd2l0Y2ggKElkKSB7Ci0KLQljYXNlIE9JRF9TS0dFX1NFTlNPUl9WQUxVRToKLQljYXNlIE9JRF9TS0dFX1NFTlNPUl9XQVJfVEhSRVNfTE9XOgotCWNhc2UgT0lEX1NLR0VfU0VOU09SX1dBUl9USFJFU19VUFA6Ci0JY2FzZSBPSURfU0tHRV9TRU5TT1JfRVJSX1RIUkVTX0xPVzoKLQljYXNlIE9JRF9TS0dFX1NFTlNPUl9FUlJfVEhSRVNfVVBQOgotCQlpZiAoKnBMZW4gPCAoTGltaXQgLSBJbmRleCkgKiBzaXplb2YoU0tfVTMyKSkgewotCi0JCQkqcExlbiA9IChMaW1pdCAtIEluZGV4KSAqIHNpemVvZihTS19VMzIpOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9TRU5TT1JfREVTQ1I6Ci0JCWZvciAoT2Zmc2V0ID0gMCwgaSA9IEluZGV4OyBpIDwgTGltaXQ7IGkgKyspIHsKLQotCQkJTGVuID0gKHVuc2lnbmVkIGludCkKLQkJCQlTS19TVFJMRU4ocEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYykgKyAxOwotCQkJaWYgKExlbiA+PSBTS19QTk1JX1NUUklOR0xFTjIpIHsKLQotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMTEsCi0JCQkJCVNLX1BOTUlfRVJSMDExTVNHKTsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJfQotCQkJT2Zmc2V0ICs9IExlbjsKLQkJfQotCQlpZiAoKnBMZW4gPCBPZmZzZXQpIHsKLQotCQkJKnBMZW4gPSBPZmZzZXQ7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1NFTlNPUl9JTkRFWDoKLQljYXNlIE9JRF9TS0dFX1NFTlNPUl9UWVBFOgotCWNhc2UgT0lEX1NLR0VfU0VOU09SX1NUQVRVUzoKLQkJaWYgKCpwTGVuIDwgTGltaXQgLSBJbmRleCkgewotCi0JCQkqcExlbiA9IExpbWl0IC0gSW5kZXg7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1NFTlNPUl9XQVJfQ1RTOgotCWNhc2UgT0lEX1NLR0VfU0VOU09SX1dBUl9USU1FOgotCWNhc2UgT0lEX1NLR0VfU0VOU09SX0VSUl9DVFM6Ci0JY2FzZSBPSURfU0tHRV9TRU5TT1JfRVJSX1RJTUU6Ci0JCWlmICgqcExlbiA8IChMaW1pdCAtIEluZGV4KSAqIHNpemVvZihTS19VNjQpKSB7Ci0KLQkJCSpwTGVuID0gKExpbWl0IC0gSW5kZXgpICogc2l6ZW9mKFNLX1U2NCk7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDEyLAotCQkJU0tfUE5NSV9FUlIwMTJNU0cpOwotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQotCX0KLQotCS8qCi0JICogR2V0IHZhbHVlCi0JICovCi0JZm9yIChPZmZzZXQgPSAwOyBJbmRleCA8IExpbWl0OyBJbmRleCArKykgewotCi0JCXN3aXRjaCAoSWQpIHsKLQotCQljYXNlIE9JRF9TS0dFX1NFTlNPUl9JTkRFWDoKLQkJCSoocEJ1ZiArIE9mZnNldCkgPSAoY2hhcilJbmRleDsKLQkJCU9mZnNldCArPSBzaXplb2YoY2hhcik7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1NFTlNPUl9ERVNDUjoKLQkJCUxlbiA9IFNLX1NUUkxFTihwQUMtPkkyYy5TZW5UYWJsZVtJbmRleF0uU2VuRGVzYyk7Ci0JCQlTS19NRU1DUFkocEJ1ZiArIE9mZnNldCArIDEsCi0JCQkJcEFDLT5JMmMuU2VuVGFibGVbSW5kZXhdLlNlbkRlc2MsIExlbik7Ci0JCQkqKHBCdWYgKyBPZmZzZXQpID0gKGNoYXIpTGVuOwotCQkJT2Zmc2V0ICs9IExlbiArIDE7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1NFTlNPUl9UWVBFOgotCQkJKihwQnVmICsgT2Zmc2V0KSA9Ci0JCQkJKGNoYXIpcEFDLT5JMmMuU2VuVGFibGVbSW5kZXhdLlNlblR5cGU7Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TRU5TT1JfVkFMVUU6Ci0JCQlWYWwzMiA9IChTS19VMzIpcEFDLT5JMmMuU2VuVGFibGVbSW5kZXhdLlNlblZhbHVlOwotCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIE9mZnNldCwgVmFsMzIpOwotCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VMzIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TRU5TT1JfV0FSX1RIUkVTX0xPVzoKLQkJCVZhbDMyID0gKFNLX1UzMilwQUMtPkkyYy5TZW5UYWJsZVtJbmRleF0uCi0JCQkJU2VuVGhyZVdhcm5Mb3c7Ci0JCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmICsgT2Zmc2V0LCBWYWwzMik7Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1UzMik7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1NFTlNPUl9XQVJfVEhSRVNfVVBQOgotCQkJVmFsMzIgPSAoU0tfVTMyKXBBQy0+STJjLlNlblRhYmxlW0luZGV4XS4KLQkJCQlTZW5UaHJlV2FybkhpZ2g7Ci0JCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmICsgT2Zmc2V0LCBWYWwzMik7Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1UzMik7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1NFTlNPUl9FUlJfVEhSRVNfTE9XOgotCQkJVmFsMzIgPSAoU0tfVTMyKXBBQy0+STJjLlNlblRhYmxlW0luZGV4XS4KLQkJCQlTZW5UaHJlRXJyTG93OwotCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIE9mZnNldCwgVmFsMzIpOwotCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VMzIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TRU5TT1JfRVJSX1RIUkVTX1VQUDoKLQkJCVZhbDMyID0gcEFDLT5JMmMuU2VuVGFibGVbSW5kZXhdLlNlblRocmVFcnJIaWdoOwotCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIE9mZnNldCwgVmFsMzIpOwotCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VMzIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TRU5TT1JfU1RBVFVTOgotCQkJKihwQnVmICsgT2Zmc2V0KSA9Ci0JCQkJKGNoYXIpcEFDLT5JMmMuU2VuVGFibGVbSW5kZXhdLlNlbkVyckZsYWc7Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TRU5TT1JfV0FSX0NUUzoKLQkJCVZhbDY0ID0gcEFDLT5JMmMuU2VuVGFibGVbSW5kZXhdLlNlbldhcm5DdHM7Ci0JCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmICsgT2Zmc2V0LCBWYWw2NCk7Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1U2NCk7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1NFTlNPUl9FUlJfQ1RTOgotCQkJVmFsNjQgPSBwQUMtPkkyYy5TZW5UYWJsZVtJbmRleF0uU2VuRXJyQ3RzOwotCQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiArIE9mZnNldCwgVmFsNjQpOwotCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VNjQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TRU5TT1JfV0FSX1RJTUU6Ci0JCQlWYWw2NCA9IFNLX1BOTUlfSFVORFJFRFNfU0VDKHBBQy0+STJjLlNlblRhYmxlW0luZGV4XS4KLQkJCQlTZW5CZWdXYXJuVFMpOwotCQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiArIE9mZnNldCwgVmFsNjQpOwotCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VNjQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TRU5TT1JfRVJSX1RJTUU6Ci0JCQlWYWw2NCA9IFNLX1BOTUlfSFVORFJFRFNfU0VDKHBBQy0+STJjLlNlblRhYmxlW0luZGV4XS4KLQkJCQlTZW5CZWdFcnJUUyk7Ci0JCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmICsgT2Zmc2V0LCBWYWw2NCk7Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1U2NCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfRVJSLAotCQkJCSgiU2Vuc29yU3RhdDogVW5rbm93biBPSUQgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIikpOwotCi0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTdG9yZSB1c2VkIGJ1ZmZlciBzcGFjZQotCSAqLwotCSpwTGVuID0gT2Zmc2V0OwotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFZwZCAtIE9JRCBoYW5kbGVyIGZ1bmN0aW9uIG9mIE9JRF9TS0dFX1ZQRF9YWFgKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUdldC9wcmVzZXQvc2V0IG9mIFZQRCBkYXRhLiBBcyBpbnN0YW5jZSB0aGUgbmFtZSBvZiBhIFZQRCBrZXkKLSAqCWNhbiBiZSBwYXNzZWQuIFRoZSBJbnN0YW5jZSBwYXJhbWV0ZXIgaXMgYSBTS19VMzIgYW5kIGNhbiBiZQotICoJdXNlZCBhcyBhIHN0cmluZyBidWZmZXIgZm9yIHRoZSBWUEQga2V5LCBiZWNhdXNlIHRoZWlyIG1heGltdW0KLSAqCWxlbmd0aCBpcyA0IGJ5dGUuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1BOTUlfRVJSX09LICAgICAgICAgICBUaGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQuCi0gKglTS19QTk1JX0VSUl9UT09fU0hPUlQgICAgVGhlIHBhc3NlZCBidWZmZXIgaXMgdG9vIHNob3J0IHRvIGNvbnRhaW4KLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCBkYXRhIChlLmcuIGEgMzJiaXQgdmFsdWUgaXMKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQsIGJ1dCBhIDE2IGJpdCB2YWx1ZSB3YXMgcGFzc2VkKS4KLSAqCVNLX1BOTUlfRVJSX0JBRF9WQUxVRSAgICBUaGUgcGFzc2VkIHZhbHVlIGlzIG5vdCBpbiB0aGUgdmFsaWQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSByYW5nZS4KLSAqCVNLX1BOTUlfRVJSX1JFQURfT05MWSAgICBUaGUgT0lEIGlzIHJlYWQtb25seSBhbmQgY2Fubm90IGJlIHNldC4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuCi0gKi8KLVBOTUlfU1RBVElDIGludCBWcGQoCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotaW50IEFjdGlvbiwJCS8qIEdFVC9QUkVTRVQvU0VUIGFjdGlvbiAqLwotU0tfVTMyIElkLAkJLyogT2JqZWN0IElEIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkICovCi1jaGFyICpwQnVmLAkJLyogQnVmZmVyIHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IGRhdGEgdHJhbnNmZXIgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogT24gY2FsbDogcEJ1ZiBidWZmZXIgbGVuZ3RoLiBPbiByZXR1cm46IHVzZWQgYnVmZmVyICovCi1TS19VMzIgSW5zdGFuY2UsCS8qIEluc3RhbmNlICgxLi5uKSB0aGF0IGlzIHRvIGJlIHF1ZXJpZWQgb3IgLTEgKi8KLXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCAvKiBJbmRleCB0byB0aGUgSWQgdGFibGUgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQlTS19WUERfU1RBVFVTCSpwVnBkU3RhdHVzOwotCXVuc2lnbmVkIGludAlCdWZMZW47Ci0JY2hhcgkJQnVmWzI1Nl07Ci0JY2hhcgkJS2V5QXJyW1NLX1BOTUlfVlBEX0VOVFJJRVNdW1NLX1BOTUlfVlBEX0tFWV9TSVpFXTsKLQljaGFyCQlLZXlTdHJbU0tfUE5NSV9WUERfS0VZX1NJWkVdOwotCXVuc2lnbmVkIGludAlLZXlObzsKLQl1bnNpZ25lZCBpbnQJT2Zmc2V0OwotCXVuc2lnbmVkIGludAlJbmRleDsKLQl1bnNpZ25lZCBpbnQJRmlyc3RJbmRleDsKLQl1bnNpZ25lZCBpbnQJTGFzdEluZGV4OwotCXVuc2lnbmVkIGludAlMZW47Ci0JaW50CQlSZXQ7Ci0JU0tfVTMyCQlWYWwzMjsKLQotCS8qCi0JICogR2V0IGFycmF5IG9mIGFsbCBjdXJyZW50bHkgc3RvcmVkIFZQRCBrZXlzCi0JICovCi0JUmV0ID0gR2V0VnBkS2V5QXJyKHBBQywgSW9DLCAmS2V5QXJyWzBdWzBdLCBzaXplb2YoS2V5QXJyKSwgJktleU5vKTsKLQlpZiAoUmV0ICE9IFNLX1BOTUlfRVJSX09LKSB7Ci0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChSZXQpOwotCX0KLQotCS8qCi0JICogSWYgaW5zdGFuY2UgaXMgbm90IC0xLCB0cnkgdG8gZmluZCB0aGUgcmVxdWVzdGVkIFZQRCBrZXkgZm9yCi0JICogdGhlIG11bHRpcGxlIGluc3RhbmNlIHZhcmlhYmxlcy4gVGhlIG90aGVyIE9JRHMgYXMgZm9yIGV4YW1wbGUKLQkgKiBPSUQgVlBEX0FDVElPTiBhcmUgc2luZ2xlIGluc3RhbmNlIHZhcmlhYmxlcyBhbmQgbXVzdCBiZQotCSAqIGhhbmRsZWQgc2VwYXJhdGx5LgotCSAqLwotCUZpcnN0SW5kZXggPSAwOwotCUxhc3RJbmRleCA9IEtleU5vOwotCi0JaWYgKChJbnN0YW5jZSAhPSAoU0tfVTMyKSgtMSkpKSB7Ci0KLQkJaWYgKElkID09IE9JRF9TS0dFX1ZQRF9LRVkgfHwgSWQgPT0gT0lEX1NLR0VfVlBEX1ZBTFVFIHx8Ci0JCQlJZCA9PSBPSURfU0tHRV9WUERfQUNDRVNTKSB7Ci0KLQkJCVNLX1NUUk5DUFkoS2V5U3RyLCAoY2hhciAqKSZJbnN0YW5jZSwgNCk7Ci0JCQlLZXlTdHJbNF0gPSAwOwotCi0JCQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBLZXlObzsgSW5kZXggKyspIHsKLQotCQkJCWlmIChTS19TVFJDTVAoS2V5U3RyLCBLZXlBcnJbSW5kZXhdKSA9PSAwKSB7Ci0JCQkJCUZpcnN0SW5kZXggPSBJbmRleDsKLQkJCQkJTGFzdEluZGV4ID0gSW5kZXgrMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKEluZGV4ID09IEtleU5vKSB7Ci0KLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QpOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKEluc3RhbmNlICE9IDEpIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBHZXQgdmFsdWUsIGlmIGEgcXVlcnkgc2hvdWxkIGJlIHBlcmZvcm1lZAotCSAqLwotCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9HRVQpIHsKLQotCQlzd2l0Y2ggKElkKSB7Ci0KLQkJY2FzZSBPSURfU0tHRV9WUERfRlJFRV9CWVRFUzoKLQkJCS8qIENoZWNrIGxlbmd0aCBvZiBidWZmZXIgKi8KLQkJCWlmICgqcExlbiA8IHNpemVvZihTS19VMzIpKSB7Ci0KLQkJCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJCX0KLQkJCS8qIEdldCBudW1iZXIgb2YgZnJlZSBieXRlcyAqLwotCQkJcFZwZFN0YXR1cyA9IFZwZFN0YXQocEFDLCBJb0MpOwotCQkJaWYgKHBWcGRTdGF0dXMgPT0gTlVMTCkgewotCi0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAxNywKLQkJCQkJU0tfUE5NSV9FUlIwMTdNU0cpOwotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQl9Ci0JCQlpZiAoKHBWcGRTdGF0dXMtPnZwZF9zdGF0dXMgJiBWUERfVkFMSUQpID09IDApIHsKLQotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMTgsCi0JCQkJCVNLX1BOTUlfRVJSMDE4TVNHKTsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJfQotCQkJCi0JCQlWYWwzMiA9IChTS19VMzIpcFZwZFN0YXR1cy0+dnBkX2ZyZWVfcnc7Ci0JCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmLCBWYWwzMik7Ci0JCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9WUERfRU5UUklFU19MSVNUOgotCQkJLyogQ2hlY2sgbGVuZ3RoICovCi0JCQlmb3IgKExlbiA9IDAsIEluZGV4ID0gMDsgSW5kZXggPCBLZXlObzsgSW5kZXggKyspIHsKLQotCQkJCUxlbiArPSBTS19TVFJMRU4oS2V5QXJyW0luZGV4XSkgKyAxOwotCQkJfQotCQkJaWYgKCpwTGVuIDwgTGVuKSB7Ci0KLQkJCQkqcExlbiA9IExlbjsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0KLQkJCS8qIEdldCB2YWx1ZSAqLwotCQkJKihwQnVmKSA9IChjaGFyKUxlbiAtIDE7Ci0JCQlmb3IgKE9mZnNldCA9IDEsIEluZGV4ID0gMDsgSW5kZXggPCBLZXlObzsgSW5kZXggKyspIHsKLQotCQkJCUxlbiA9IFNLX1NUUkxFTihLZXlBcnJbSW5kZXhdKTsKLQkJCQlTS19NRU1DUFkocEJ1ZiArIE9mZnNldCwgS2V5QXJyW0luZGV4XSwgTGVuKTsKLQotCQkJCU9mZnNldCArPSBMZW47Ci0KLQkJCQlpZiAoSW5kZXggPCBLZXlObyAtIDEpIHsKLQotCQkJCQkqKHBCdWYgKyBPZmZzZXQpID0gJyAnOwotCQkJCQlPZmZzZXQgKys7Ci0JCQkJfQotCQkJfQotCQkJKnBMZW4gPSBPZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1ZQRF9FTlRSSUVTX05VTUJFUjoKLQkJCS8qIENoZWNrIGxlbmd0aCAqLwotCQkJaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1UzMikpIHsKLQotCQkJCSpwTGVuID0gc2l6ZW9mKFNLX1UzMik7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQkJfQotCi0JCQlWYWwzMiA9IChTS19VMzIpS2V5Tm87Ci0JCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmLCBWYWwzMik7Ci0JCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9WUERfS0VZOgotCQkJLyogQ2hlY2sgYnVmZmVyIGxlbmd0aCwgaWYgaXQgaXMgbGFyZ2UgZW5vdWdoICovCi0JCQlmb3IgKExlbiA9IDAsIEluZGV4ID0gRmlyc3RJbmRleDsKLQkJCQlJbmRleCA8IExhc3RJbmRleDsgSW5kZXggKyspIHsKLQotCQkJCUxlbiArPSBTS19TVFJMRU4oS2V5QXJyW0luZGV4XSkgKyAxOwotCQkJfQotCQkJaWYgKCpwTGVuIDwgTGVuKSB7Ci0KLQkJCQkqcExlbiA9IExlbjsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBHZXQgdGhlIGtleSB0byBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyLCBiZWNhdXNlCi0JCQkgKiB3ZSBoYXZlIHRvIHByZXBlbmQgYSBsZW5ndGggYnl0ZS4KLQkJCSAqLwotCQkJZm9yIChPZmZzZXQgPSAwLCBJbmRleCA9IEZpcnN0SW5kZXg7Ci0JCQkJSW5kZXggPCBMYXN0SW5kZXg7IEluZGV4ICsrKSB7Ci0KLQkJCQlMZW4gPSBTS19TVFJMRU4oS2V5QXJyW0luZGV4XSk7Ci0KLQkJCQkqKHBCdWYgKyBPZmZzZXQpID0gKGNoYXIpTGVuOwotCQkJCVNLX01FTUNQWShwQnVmICsgT2Zmc2V0ICsgMSwgS2V5QXJyW0luZGV4XSwKLQkJCQkJTGVuKTsKLQkJCQlPZmZzZXQgKz0gTGVuICsgMTsKLQkJCX0KLQkJCSpwTGVuID0gT2Zmc2V0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9WUERfVkFMVUU6Ci0JCQkvKiBDaGVjayB0aGUgYnVmZmVyIGxlbmd0aCBpZiBpdCBpcyBsYXJnZSBlbm91Z2ggKi8KLQkJCWZvciAoT2Zmc2V0ID0gMCwgSW5kZXggPSBGaXJzdEluZGV4OwotCQkJCUluZGV4IDwgTGFzdEluZGV4OyBJbmRleCArKykgewotCi0JCQkJQnVmTGVuID0gMjU2OwotCQkJCWlmIChWcGRSZWFkKHBBQywgSW9DLCBLZXlBcnJbSW5kZXhdLCBCdWYsCi0JCQkJCShpbnQgKikmQnVmTGVuKSA+IDAgfHwKLQkJCQkJQnVmTGVuID49IFNLX1BOTUlfVlBEX0RBVEFMRU4pIHsKLQotCQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csCi0JCQkJCQlTS19QTk1JX0VSUjAyMSwKLQkJCQkJCVNLX1BOTUlfRVJSMDIxTVNHKTsKLQotCQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gQnVmTGVuICsgMTsKLQkJCX0KLQkJCWlmICgqcExlbiA8IE9mZnNldCkgewotCi0JCQkJKnBMZW4gPSBPZmZzZXQ7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQkJfQotCi0JCQkvKgotCQkJICogR2V0IHRoZSB2YWx1ZSB0byBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyLCBiZWNhdXNlCi0JCQkgKiB3ZSBoYXZlIHRvIHByZXBlbmQgYSBsZW5ndGggYnl0ZS4KLQkJCSAqLwotCQkJZm9yIChPZmZzZXQgPSAwLCBJbmRleCA9IEZpcnN0SW5kZXg7Ci0JCQkJSW5kZXggPCBMYXN0SW5kZXg7IEluZGV4ICsrKSB7Ci0KLQkJCQlCdWZMZW4gPSAyNTY7Ci0JCQkJaWYgKFZwZFJlYWQocEFDLCBJb0MsIEtleUFycltJbmRleF0sIEJ1ZiwKLQkJCQkJKGludCAqKSZCdWZMZW4pID4gMCB8fAotCQkJCQlCdWZMZW4gPj0gU0tfUE5NSV9WUERfREFUQUxFTikgewotCi0JCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywKLQkJCQkJCVNLX1BOTUlfRVJSMDIyLAotCQkJCQkJU0tfUE5NSV9FUlIwMjJNU0cpOwotCi0JCQkJCSpwTGVuID0gMDsKLQkJCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJCQl9Ci0KLQkJCQkqKHBCdWYgKyBPZmZzZXQpID0gKGNoYXIpQnVmTGVuOwotCQkJCVNLX01FTUNQWShwQnVmICsgT2Zmc2V0ICsgMSwgQnVmLCBCdWZMZW4pOwotCQkJCU9mZnNldCArPSBCdWZMZW4gKyAxOwotCQkJfQotCQkJKnBMZW4gPSBPZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1ZQRF9BQ0NFU1M6Ci0JCQlpZiAoKnBMZW4gPCBMYXN0SW5kZXggLSBGaXJzdEluZGV4KSB7Ci0KLQkJCQkqcExlbiA9IExhc3RJbmRleCAtIEZpcnN0SW5kZXg7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQkJfQotCi0JCQlmb3IgKE9mZnNldCA9IDAsIEluZGV4ID0gRmlyc3RJbmRleDsKLQkJCQlJbmRleCA8IExhc3RJbmRleDsgSW5kZXggKyspIHsKLQotCQkJCWlmIChWcGRNYXlXcml0ZShLZXlBcnJbSW5kZXhdKSkgewotCi0JCQkJCSoocEJ1ZiArIE9mZnNldCkgPSBTS19QTk1JX1ZQRF9SVzsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCSoocEJ1ZiArIE9mZnNldCkgPSBTS19QTk1JX1ZQRF9STzsKLQkJCQl9Ci0JCQkJT2Zmc2V0ICsrOwotCQkJfQotCQkJKnBMZW4gPSBPZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1ZQRF9BQ1RJT046Ci0JCQlPZmZzZXQgPSBMYXN0SW5kZXggLSBGaXJzdEluZGV4OwotCQkJaWYgKCpwTGVuIDwgT2Zmc2V0KSB7Ci0KLQkJCQkqcExlbiA9IE9mZnNldDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0JCQlTS19NRU1TRVQocEJ1ZiwgMCwgT2Zmc2V0KTsKLQkJCSpwTGVuID0gT2Zmc2V0OwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMjMsCi0JCQkJU0tfUE5NSV9FUlIwMjNNU0cpOwotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQl9Ci0JfQotCWVsc2UgewotCQkvKiBUaGUgb25seSBPSUQgd2hpY2ggY2FuIGJlIHNldCBpcyBWUERfQUNUSU9OICovCi0JCWlmIChJZCAhPSBPSURfU0tHRV9WUERfQUNUSU9OKSB7Ci0KLQkJCWlmIChJZCA9PSBPSURfU0tHRV9WUERfRlJFRV9CWVRFUyB8fAotCQkJCUlkID09IE9JRF9TS0dFX1ZQRF9FTlRSSUVTX0xJU1QgfHwKLQkJCQlJZCA9PSBPSURfU0tHRV9WUERfRU5UUklFU19OVU1CRVIgfHwKLQkJCQlJZCA9PSBPSURfU0tHRV9WUERfS0VZIHx8Ci0JCQkJSWQgPT0gT0lEX1NLR0VfVlBEX1ZBTFVFIHx8Ci0JCQkJSWQgPT0gT0lEX1NLR0VfVlBEX0FDQ0VTUykgewotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfUkVBRF9PTkxZKTsKLQkJCX0KLQotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAyNCwKLQkJCQlTS19QTk1JX0VSUjAyNE1TRyk7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCX0KLQotCQkvKgotCQkgKiBGcm9tIHRoaXMgcG9pbnQgd2UgaGFuZGxlIFZQRF9BQ1RJT04uIENoZWNrIHRoZSBidWZmZXIKLQkJICogbGVuZ3RoLiBJdCBzaG91bGQgYXQgbGVhc3QgaGF2ZSB0aGUgc2l6ZSBvZiBvbmUgYnl0ZS4KLQkJICovCi0JCWlmICgqcExlbiA8IDEpIHsKLQotCQkJKnBMZW4gPSAxOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0KLQkJLyoKLQkJICogVGhlIGZpcnN0IGJ5dGUgY29udGFpbnMgdGhlIFZQRCBhY3Rpb24gdHlwZSB3ZSBzaG91bGQKLQkJICogcGVyZm9ybS4KLQkJICovCi0JCXN3aXRjaCAoKnBCdWYpIHsKLQotCQljYXNlIFNLX1BOTUlfVlBEX0lHTk9SRToKLQkJCS8qIE5vdGhpbmcgdG8gZG8gKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgU0tfUE5NSV9WUERfQ1JFQVRFOgotCQkJLyoKLQkJCSAqIFdlIGhhdmUgdG8gY3JlYXRlIGEgbmV3IFZQRCBlbnRyeSBvciB3ZSBtb2RpZnkKLQkJCSAqIGFuIGV4aXN0aW5nIG9uZS4gQ2hlY2sgZmlyc3QgdGhlIGJ1ZmZlciBsZW5ndGguCi0JCQkgKi8KLQkJCWlmICgqcExlbiA8IDQpIHsKLQotCQkJCSpwTGVuID0gNDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0JCQlLZXlTdHJbMF0gPSBwQnVmWzFdOwotCQkJS2V5U3RyWzFdID0gcEJ1ZlsyXTsKLQkJCUtleVN0clsyXSA9IDA7Ci0KLQkJCS8qCi0JCQkgKiBJcyB0aGUgZW50cnkgd3JpdGFibGUgb3IgZG9lcyBpdCBiZWxvbmcgdG8gdGhlCi0JCQkgKiByZWFkLW9ubHkgYXJlYT8KLQkJCSAqLwotCQkJaWYgKCFWcGRNYXlXcml0ZShLZXlTdHIpKSB7Ci0KLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9CQURfVkFMVUUpOwotCQkJfQotCi0JCQlPZmZzZXQgPSAoaW50KXBCdWZbM10gJiAweEZGOwotCi0JCQlTS19NRU1DUFkoQnVmLCBwQnVmICsgNCwgT2Zmc2V0KTsKLQkJCUJ1ZltPZmZzZXRdID0gMDsKLQotCQkJLyogQSBwcmVzZXQgZW5kcyBoZXJlICovCi0JCQlpZiAoQWN0aW9uID09IFNLX1BOTUlfUFJFU0VUKSB7Ci0KLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLQkJCX0KLQotCQkJLyogV3JpdGUgdGhlIG5ldyBlbnRyeSBvciBtb2RpZnkgYW4gZXhpc3Rpbmcgb25lICovCi0JCQlSZXQgPSBWcGRXcml0ZShwQUMsIElvQywgS2V5U3RyLCBCdWYpOwotCQkJaWYgKFJldCA9PSBTS19QTk1JX1ZQRF9OT1dSSVRFICkgewotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJCX0KLQkJCWVsc2UgaWYgKFJldCAhPSBTS19QTk1JX1ZQRF9PSykgewotCi0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAyNSwKLQkJCQkJU0tfUE5NSV9FUlIwMjVNU0cpOwotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBQZXJmb3JtIGFuIHVwZGF0ZSBvZiB0aGUgVlBEIGRhdGEuIFRoaXMgaXMKLQkJCSAqIG5vdCBtYW5kYW50b3J5LCBidXQganVzdCB0byBiZSBzdXJlLgotCQkJICovCi0JCQlSZXQgPSBWcGRVcGRhdGUocEFDLCBJb0MpOwotCQkJaWYgKFJldCAhPSBTS19QTk1JX1ZQRF9PSykgewotCi0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAyNiwKLQkJCQkJU0tfUE5NSV9FUlIwMjZNU0cpOwotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIFNLX1BOTUlfVlBEX0RFTEVURToKLQkJCS8qIENoZWNrIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyBwbGF1c2libGUgKi8KLQkJCWlmICgqcExlbiA8IDMpIHsKLQotCQkJCSpwTGVuID0gMzsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0JCQlpZiAoKnBMZW4gPiAzKSB7Ci0KLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9CQURfVkFMVUUpOwotCQkJfQotCQkJS2V5U3RyWzBdID0gcEJ1ZlsxXTsKLQkJCUtleVN0clsxXSA9IHBCdWZbMl07Ci0JCQlLZXlTdHJbMl0gPSAwOwotCi0JCQkvKiBGaW5kIHRoZSBwYXNzZWQga2V5IGluIHRoZSBhcnJheSAqLwotCQkJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgS2V5Tm87IEluZGV4ICsrKSB7Ci0KLQkJCQlpZiAoU0tfU1RSQ01QKEtleVN0ciwgS2V5QXJyW0luZGV4XSkgPT0gMCkgewotCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBjYW5ub3QgZmluZCB0aGUga2V5IGl0IGlzIHdyb25nLCBzbyB3ZQotCQkJICogcmV0dXJuIGFuIGFwcHJvcHJpYXRlIGVycm9yIHZhbHVlLgotCQkJICovCi0JCQlpZiAoSW5kZXggPT0gS2V5Tm8pIHsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCQl9Ci0KLQkJCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9QUkVTRVQpIHsKLQotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCQkJfQotCi0JCQkvKiBPaywgeW91IHdhbnRlZCBpdCBhbmQgeW91IHdpbGwgZ2V0IGl0ICovCi0JCQlSZXQgPSBWcGREZWxldGUocEFDLCBJb0MsIEtleVN0cik7Ci0JCQlpZiAoUmV0ICE9IFNLX1BOTUlfVlBEX09LKSB7Ci0KLQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDI3LAotCQkJCQlTS19QTk1JX0VSUjAyN01TRyk7Ci0KLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIFBlcmZvcm0gYW4gdXBkYXRlIG9mIHRoZSBWUEQgZGF0YS4gVGhpcyBpcwotCQkJICogbm90IG1hbmRhbnRvcnksIGJ1dCBqdXN0IHRvIGJlIHN1cmUuCi0JCQkgKi8KLQkJCVJldCA9IFZwZFVwZGF0ZShwQUMsIElvQyk7Ci0JCQlpZiAoUmV0ICE9IFNLX1BOTUlfVlBEX09LKSB7Ci0KLQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDI4LAotCQkJCQlTS19QTk1JX0VSUjAyOE1TRyk7Ci0KLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogR2VuZXJhbCAtIE9JRCBoYW5kbGVyIGZ1bmN0aW9uIG9mIHZhcmlvdXMgc2luZ2xlIGluc3RhbmNlIE9JRHMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBjb2RlIGlzIHNpbXBsZS4gTm8gZGVzY3JpcHRpb24gbmVjZXNzYXJ5LgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkLgotICoJU0tfUE5NSV9FUlJfVE9PX1NIT1JUICAgIFRoZSBwYXNzZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgZGF0YSAoZS5nLiBhIDMyYml0IHZhbHVlIGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLCBidXQgYSAxNiBiaXQgdmFsdWUgd2FzIHBhc3NlZCkuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QgVGhlIHJlcXVlc3RlZCBpbnN0YW5jZSBvZiB0aGUgT0lEIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QgKGUuZy4gcG9ydCBpbnN0YW5jZSAzIG9uIGEgdHdvIHBvcnQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLgotICovCi1QTk1JX1NUQVRJQyBpbnQgR2VuZXJhbCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgQWN0aW9uLAkJLyogR0VUL1BSRVNFVC9TRVQgYWN0aW9uICovCi1TS19VMzIgSWQsCQkvKiBPYmplY3QgSUQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBPbiBjYWxsOiBidWZmZXIgbGVuZ3RoLiBPbiByZXR1cm46IHVzZWQgYnVmZmVyICovCi1TS19VMzIgSW5zdGFuY2UsCS8qIEluc3RhbmNlICgxLi5uKSB0aGF0IGlzIHRvIGJlIHF1ZXJpZWQgb3IgLTEgKi8KLXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCAvKiBJbmRleCB0byB0aGUgSWQgdGFibGUgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQlpbnQJCVJldDsKLQl1bnNpZ25lZCBpbnQJSW5kZXg7Ci0JdW5zaWduZWQgaW50CUxlbjsKLQl1bnNpZ25lZCBpbnQJT2Zmc2V0OwotCXVuc2lnbmVkIGludAlWYWw7Ci0JU0tfVTgJCVZhbDg7Ci0JU0tfVTE2CQlWYWwxNjsKLQlTS19VMzIJCVZhbDMyOwotCVNLX1U2NAkJVmFsNjQ7Ci0JU0tfVTY0CQlWYWw2NFJ4SHdFcnJzID0gMDsKLQlTS19VNjQJCVZhbDY0VHhId0VycnMgPSAwOwotCVNLX0JPT0wJCUlzNjRCaXRSZXEgPSBTS19GQUxTRTsKLQljaGFyCQlCdWZbMjU2XTsKLQlpbnQJCQlNYWNUeXBlOwotCi0JLyoKLQkgKiBDaGVjayBpbnN0YW5jZS4gV2Ugb25seSBoYW5kbGUgc2luZ2xlIGluc3RhbmNlIHZhcmlhYmxlcy4KLQkgKi8KLQlpZiAoSW5zdGFuY2UgIT0gKFNLX1UzMikoLTEpICYmIEluc3RhbmNlICE9IDEpIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGFjdGlvbi4gV2Ugb25seSBhbGxvdyBnZXQgcmVxdWVzdHMuCi0JICovCi0JaWYgKEFjdGlvbiAhPSBTS19QTk1JX0dFVCkgewotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9SRUFEX09OTFkpOwotCX0KLQkKLQlNYWNUeXBlID0gcEFDLT5HSW5pLkdJTWFjVHlwZTsKLQkKLQkvKgotCSAqIENoZWNrIGxlbmd0aCBmb3IgdGhlIHZhcmlvdXMgc3VwcG9ydGVkIE9JRHMKLQkgKi8KLQlzd2l0Y2ggKElkKSB7Ci0KLQljYXNlIE9JRF9HRU5fWE1JVF9FUlJPUjoKLQljYXNlIE9JRF9HRU5fUkNWX0VSUk9SOgotCWNhc2UgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSOgotI2lmbmRlZiBTS19ORElTXzY0QklUX0NUUgotCQlpZiAoKnBMZW4gPCBzaXplb2YoU0tfVTMyKSkgewotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCi0jZWxzZSAvKiBTS19ORElTXzY0QklUX0NUUiAqLwotCi0JCS8qCi0JCSAqIGZvciBjb21wYXRpYmlsaXR5LCBhdCBsZWFzdCAzMmJpdCBhcmUgcmVxdWlyZWQgZm9yIG9pZAotCQkgKi8KLQkJaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1UzMikpIHsKLQkJCS8qCi0JCQkqIGJ1dCBpbmRpY2F0ZSBoYW5kbGluZyBmb3IgNjRiaXQgdmFsdWVzLAotCQkJKiBpZiBpbnN1ZmZpY2llbnQgc3BhY2UgaXMgcHJvdmlkZWQKLQkJCSovCi0JCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0KLQkJSXM2NEJpdFJlcSA9ICgqcExlbiA8IHNpemVvZihTS19VNjQpKSA/IFNLX0ZBTFNFIDogU0tfVFJVRTsKLSNlbmRpZiAvKiBTS19ORElTXzY0QklUX0NUUiAqLwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfUE9SVF9OVU1CRVI6Ci0JY2FzZSBPSURfU0tHRV9ERVZJQ0VfVFlQRToKLQljYXNlIE9JRF9TS0dFX1JFU1VMVDoKLQljYXNlIE9JRF9TS0dFX1JMTVRfTU9OSVRPUl9OVU1CRVI6Ci0JY2FzZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSDoKLQljYXNlIE9JRF9TS0dFX1RSQVBfTlVNQkVSOgotCWNhc2UgT0lEX1NLR0VfTURCX1ZFUlNJT046Ci0JY2FzZSBPSURfU0tHRV9CT0FSRExFVkVMOgotCWNhc2UgT0lEX1NLR0VfQ0hJUElEOgotCWNhc2UgT0lEX1NLR0VfUkFNU0laRToKLQkJaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1UzMikpIHsKLQotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfQ0hJUFNFVDoKLQkJaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1UxNikpIHsKLQotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTE2KTsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfQlVTX1RZUEU6Ci0JY2FzZSBPSURfU0tHRV9CVVNfU1BFRUQ6Ci0JY2FzZSBPSURfU0tHRV9CVVNfV0lEVEg6Ci0JY2FzZSBPSURfU0tHRV9TRU5TT1JfTlVNQkVSOgotCWNhc2UgT0lEX1NLR0VfQ0hLU01fTlVNQkVSOgotCWNhc2UgT0lEX1NLR0VfVkFVWEFWQUlMOgotCQlpZiAoKnBMZW4gPCBzaXplb2YoU0tfVTgpKSB7Ci0KLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1U4KTsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfVFhfU1dfUVVFVUVfTEVOOgotCWNhc2UgT0lEX1NLR0VfVFhfU1dfUVVFVUVfTUFYOgotCWNhc2UgT0lEX1NLR0VfVFhfUkVUUlk6Ci0JY2FzZSBPSURfU0tHRV9SWF9JTlRSX0NUUzoKLQljYXNlIE9JRF9TS0dFX1RYX0lOVFJfQ1RTOgotCWNhc2UgT0lEX1NLR0VfUlhfTk9fQlVGX0NUUzoKLQljYXNlIE9JRF9TS0dFX1RYX05PX0JVRl9DVFM6Ci0JY2FzZSBPSURfU0tHRV9UWF9VU0VEX0RFU0NSX05POgotCWNhc2UgT0lEX1NLR0VfUlhfREVMSVZFUkVEX0NUUzoKLQljYXNlIE9JRF9TS0dFX1JYX09DVEVUU19ERUxJVl9DVFM6Ci0JY2FzZSBPSURfU0tHRV9SWF9IV19FUlJPUl9DVFM6Ci0JY2FzZSBPSURfU0tHRV9UWF9IV19FUlJPUl9DVFM6Ci0JY2FzZSBPSURfU0tHRV9JTl9FUlJPUlNfQ1RTOgotCWNhc2UgT0lEX1NLR0VfT1VUX0VSUk9SX0NUUzoKLQljYXNlIE9JRF9TS0dFX0VSUl9SRUNPVkVSWV9DVFM6Ci0JY2FzZSBPSURfU0tHRV9TWVNVUFRJTUU6Ci0JCWlmICgqcExlbiA8IHNpemVvZihTS19VNjQpKSB7Ci0KLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQkvKiBDaGVja2VkIGxhdGVyICovCi0JCWJyZWFrOwotCX0KLQotCS8qIFVwZGF0ZSBzdGF0aXN0aWMgKi8KLQlpZiAoSWQgPT0gT0lEX1NLR0VfUlhfSFdfRVJST1JfQ1RTIHx8Ci0JCUlkID09IE9JRF9TS0dFX1RYX0hXX0VSUk9SX0NUUyB8fAotCQlJZCA9PSBPSURfU0tHRV9JTl9FUlJPUlNfQ1RTIHx8Ci0JCUlkID09IE9JRF9TS0dFX09VVF9FUlJPUl9DVFMgfHwKLQkJSWQgPT0gT0lEX0dFTl9YTUlUX0VSUk9SIHx8Ci0JCUlkID09IE9JRF9HRU5fUkNWX0VSUk9SKSB7Ci0KLQkJLyogRm9yY2UgdGhlIFhNQUMgdG8gdXBkYXRlIGl0cyBzdGF0aXN0aWMgY291bnRlcnMgYW5kCi0JCSAqIEluY3JlbWVudCBzZW1hcGhvcmUgdG8gaW5kaWNhdGUgdGhhdCBhbiB1cGRhdGUgd2FzCi0JCSAqIGFscmVhZHkgZG9uZS4KLQkJICovCi0JCVJldCA9IE1hY1VwZGF0ZShwQUMsIElvQywgMCwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kIC0gMSk7Ci0JCWlmIChSZXQgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChSZXQpOwotCQl9Ci0JCXBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyArKzsKLQotCQkvKgotCQkgKiBTb21lIE9JRHMgY29uc2lzdCBvZiBtdWx0aXBsZSBoYXJkd2FyZSBjb3VudGVycy4gVGhvc2UKLQkJICogdmFsdWVzIHdoaWNoIGFyZSBjb250YWluZWQgaW4gYWxsIG9mIHRoZW0gd2lsbCBiZSBhZGRlZAotCQkgKiBub3cuCi0JCSAqLwotCQlzd2l0Y2ggKElkKSB7Ci0KLQkJY2FzZSBPSURfU0tHRV9SWF9IV19FUlJPUl9DVFM6Ci0JCWNhc2UgT0lEX1NLR0VfSU5fRVJST1JTX0NUUzoKLQkJY2FzZSBPSURfR0VOX1JDVl9FUlJPUjoKLQkJCVZhbDY0UnhId0VycnMgPQotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFJYX01JU1NFRCwgTmV0SW5kZXgpICsKLQkJCQlHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9GUkFNSU5HLCBOZXRJbmRleCkgKwotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFJYX09WRVJGTE9XLCBOZXRJbmRleCkgKwotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFJYX0pBQkJFUiwgTmV0SW5kZXgpICsKLQkJCQlHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9DQVJSSUVSLCBOZXRJbmRleCkgKwotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFJYX0lSTEVOR1RILCBOZXRJbmRleCkgKwotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFJYX1NZTUJPTCwgTmV0SW5kZXgpICsKLQkJCQlHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9TSE9SVFMsIE5ldEluZGV4KSArCi0JCQkJR2V0U3RhdFZhbChwQUMsIElvQywgMCwgU0tfUE5NSV9IUlhfUlVOVCwgTmV0SW5kZXgpICsKLQkJCQlHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9UT09fTE9ORywgTmV0SW5kZXgpICsKLQkJCQlHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9GQ1MsIE5ldEluZGV4KSArCi0JCQkJR2V0U3RhdFZhbChwQUMsIElvQywgMCwgU0tfUE5NSV9IUlhfQ0VYVCwgTmV0SW5kZXgpOwotCSAgICAgICAgYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9UWF9IV19FUlJPUl9DVFM6Ci0JCWNhc2UgT0lEX1NLR0VfT1VUX0VSUk9SX0NUUzoKLQkJY2FzZSBPSURfR0VOX1hNSVRfRVJST1I6Ci0JCQlWYWw2NFR4SHdFcnJzID0KLQkJCQlHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hUWF9FWENFU1NfQ09MLCBOZXRJbmRleCkgKwotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFRYX0xBVEVfQ09MLCBOZXRJbmRleCkgKwotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFRYX1VOREVSUlVOLCBOZXRJbmRleCkgKwotCQkJCUdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFRYX0NBUlJJRVIsIE5ldEluZGV4KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBSZXRyaWV2ZSB2YWx1ZQotCSAqLwotCXN3aXRjaCAoSWQpIHsKLQotCWNhc2UgT0lEX1NLR0VfU1VQUE9SVEVEX0xJU1Q6Ci0JCUxlbiA9IElEX1RBQkxFX1NJWkUgKiBzaXplb2YoU0tfVTMyKTsKLQkJaWYgKCpwTGVuIDwgTGVuKSB7Ci0KLQkJCSpwTGVuID0gTGVuOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCWZvciAoT2Zmc2V0ID0gMCwgSW5kZXggPSAwOyBPZmZzZXQgPCBMZW47Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1UzMiksIEluZGV4ICsrKSB7Ci0KLQkJCVZhbDMyID0gKFNLX1UzMilJZFRhYmxlW0luZGV4XS5JZDsKLQkJCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYgKyBPZmZzZXQsIFZhbDMyKTsKLQkJfQotCQkqcExlbiA9IExlbjsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0JPQVJETEVWRUw6Ci0JCVZhbDMyID0gKFNLX1UzMilwQUMtPkdJbmkuR0lMZXZlbDsKLQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiwgVmFsMzIpOwotCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfUE9SVF9OVU1CRVI6Ci0JCVZhbDMyID0gKFNLX1UzMilwQUMtPkdJbmkuR0lNYWNzRm91bmQ7Ci0JCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFZhbDMyKTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0RFVklDRV9UWVBFOgotCQlWYWwzMiA9IChTS19VMzIpcEFDLT5Qbm1pLkRldmljZVR5cGU7Ci0JCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFZhbDMyKTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0RSSVZFUl9ERVNDUjoKLQkJaWYgKHBBQy0+UG5taS5wRHJpdmVyRGVzY3JpcHRpb24gPT0gTlVMTCkgewotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDA3LAotCQkJCVNLX1BOTUlfRVJSMDA3TVNHKTsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCUxlbiA9IFNLX1NUUkxFTihwQUMtPlBubWkucERyaXZlckRlc2NyaXB0aW9uKSArIDE7Ci0JCWlmIChMZW4gPiBTS19QTk1JX1NUUklOR0xFTjEpIHsKLQotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAyOSwKLQkJCQlTS19QTk1JX0VSUjAyOU1TRyk7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCX0KLQotCQlpZiAoKnBMZW4gPCBMZW4pIHsKLQotCQkJKnBMZW4gPSBMZW47Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJKnBCdWYgPSAoY2hhcikoTGVuIC0gMSk7Ci0JCVNLX01FTUNQWShwQnVmICsgMSwgcEFDLT5Qbm1pLnBEcml2ZXJEZXNjcmlwdGlvbiwgTGVuIC0gMSk7Ci0JCSpwTGVuID0gTGVuOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfRFJJVkVSX1ZFUlNJT046Ci0JCWlmIChwQUMtPlBubWkucERyaXZlclZlcnNpb24gPT0gTlVMTCkgewotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDMwLAotCQkJCVNLX1BOTUlfRVJSMDMwTVNHKTsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCUxlbiA9IFNLX1NUUkxFTihwQUMtPlBubWkucERyaXZlclZlcnNpb24pICsgMTsKLQkJaWYgKExlbiA+IFNLX1BOTUlfU1RSSU5HTEVOMSkgewotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDMxLAotCQkJCVNLX1BOTUlfRVJSMDMxTVNHKTsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCWlmICgqcExlbiA8IExlbikgewotCi0JCQkqcExlbiA9IExlbjsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQkqcEJ1ZiA9IChjaGFyKShMZW4gLSAxKTsKLQkJU0tfTUVNQ1BZKHBCdWYgKyAxLCBwQUMtPlBubWkucERyaXZlclZlcnNpb24sIExlbiAtIDEpOwotCQkqcExlbiA9IExlbjsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0RSSVZFUl9SRUxEQVRFOgotCQlpZiAocEFDLT5Qbm1pLnBEcml2ZXJSZWxlYXNlRGF0ZSA9PSBOVUxMKSB7Ci0KLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMzAsCi0JCQkJU0tfUE5NSV9FUlIwNTNNU0cpOwotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQl9Ci0KLQkJTGVuID0gU0tfU1RSTEVOKHBBQy0+UG5taS5wRHJpdmVyUmVsZWFzZURhdGUpICsgMTsKLQkJaWYgKExlbiA+IFNLX1BOTUlfU1RSSU5HTEVOMSkgewotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDMxLAotCQkJCVNLX1BOTUlfRVJSMDU0TVNHKTsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCWlmICgqcExlbiA8IExlbikgewotCi0JCQkqcExlbiA9IExlbjsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQkqcEJ1ZiA9IChjaGFyKShMZW4gLSAxKTsKLQkJU0tfTUVNQ1BZKHBCdWYgKyAxLCBwQUMtPlBubWkucERyaXZlclJlbGVhc2VEYXRlLCBMZW4gLSAxKTsKLQkJKnBMZW4gPSBMZW47Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9EUklWRVJfRklMRU5BTUU6Ci0JCWlmIChwQUMtPlBubWkucERyaXZlckZpbGVOYW1lID09IE5VTEwpIHsKLQotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAzMCwKLQkJCQlTS19QTk1JX0VSUjA1NU1TRyk7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCX0KLQotCQlMZW4gPSBTS19TVFJMRU4ocEFDLT5Qbm1pLnBEcml2ZXJGaWxlTmFtZSkgKyAxOwotCQlpZiAoTGVuID4gU0tfUE5NSV9TVFJJTkdMRU4xKSB7Ci0KLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMzEsCi0JCQkJU0tfUE5NSV9FUlIwNTZNU0cpOwotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQl9Ci0KLQkJaWYgKCpwTGVuIDwgTGVuKSB7Ci0KLQkJCSpwTGVuID0gTGVuOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCSpwQnVmID0gKGNoYXIpKExlbiAtIDEpOwotCQlTS19NRU1DUFkocEJ1ZiArIDEsIHBBQy0+UG5taS5wRHJpdmVyRmlsZU5hbWUsIExlbiAtIDEpOwotCQkqcExlbiA9IExlbjsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0hXX0RFU0NSOgotCQkvKgotCQkgKiBUaGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gaXMgbG9jYXRlZCBpbiB0aGUgVlBELiBUaGlzCi0JCSAqIHF1ZXJ5IG1heSBtb3ZlIHRvIHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBCdXQKLQkJICogdGhlIFZQRCBkYXRhIGlzIGNhY2hlZCBhbmQgdGhlcmVmb3JlIGEgY2FsbCBoZXJlCi0JCSAqIHdpbGwgbm90IG1ha2UgbXVjaCBkaWZmZXJlbmNlLgotCQkgKi8KLQkJTGVuID0gMjU2OwotCQlpZiAoVnBkUmVhZChwQUMsIElvQywgVlBEX05BTUUsIEJ1ZiwgKGludCAqKSZMZW4pID4gMCkgewotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDMyLAotCQkJCVNLX1BOTUlfRVJSMDMyTVNHKTsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCQlMZW4gKys7Ci0JCWlmIChMZW4gPiBTS19QTk1JX1NUUklOR0xFTjEpIHsKLQotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAzMywKLQkJCQlTS19QTk1JX0VSUjAzM01TRyk7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCX0KLQkJaWYgKCpwTGVuIDwgTGVuKSB7Ci0KLQkJCSpwTGVuID0gTGVuOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCSpwQnVmID0gKGNoYXIpKExlbiAtIDEpOwotCQlTS19NRU1DUFkocEJ1ZiArIDEsIEJ1ZiwgTGVuIC0gMSk7Ci0JCSpwTGVuID0gTGVuOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfSFdfVkVSU0lPTjoKLQkJLyogT2gsIEkgbG92ZSB0byBkbyBzb21lIHN0cmluZyBtYW5pcHVsYXRpb24gKi8KLQkJaWYgKCpwTGVuIDwgNSkgewotCi0JCQkqcExlbiA9IDU7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJVmFsOCA9IChTS19VOClwQUMtPkdJbmkuR0lQY2lId1JldjsKLQkJcEJ1ZlswXSA9IDQ7Ci0JCXBCdWZbMV0gPSAndic7Ci0JCXBCdWZbMl0gPSAoY2hhcikoMHgzMCB8ICgoVmFsOCA+PiA0KSAmIDB4MEYpKTsKLQkJcEJ1ZlszXSA9ICcuJzsKLQkJcEJ1Zls0XSA9IChjaGFyKSgweDMwIHwgKFZhbDggJiAweDBGKSk7Ci0JCSpwTGVuID0gNTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0NISVBTRVQ6Ci0JCVZhbDE2ID0gcEFDLT5Qbm1pLkNoaXBzZXQ7Ci0JCVNLX1BOTUlfU1RPUkVfVTE2KHBCdWYsIFZhbDE2KTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTE2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0NISVBJRDoKLQkJVmFsMzIgPSBwQUMtPkdJbmkuR0lDaGlwSWQ7Ci0JCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFZhbDMyKTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1JBTVNJWkU6Ci0JCVZhbDMyID0gcEFDLT5HSW5pLkdJUmFtU2l6ZTsKLQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiwgVmFsMzIpOwotCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfVkFVWEFWQUlMOgotCQkqcEJ1ZiA9IChjaGFyKSBwQUMtPkdJbmkuR0lWYXV4QXZhaWw7Ci0JCSpwTGVuID0gc2l6ZW9mKGNoYXIpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfQlVTX1RZUEU6Ci0JCSpwQnVmID0gKGNoYXIpIFNLX1BOTUlfQlVTX1BDSTsKLQkJKnBMZW4gPSBzaXplb2YoY2hhcik7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9CVVNfU1BFRUQ6Ci0JCSpwQnVmID0gcEFDLT5Qbm1pLlBjaUJ1c1NwZWVkOwotCQkqcExlbiA9IHNpemVvZihjaGFyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0JVU19XSURUSDoKLQkJKnBCdWYgPSBwQUMtPlBubWkuUGNpQnVzV2lkdGg7Ci0JCSpwTGVuID0gc2l6ZW9mKGNoYXIpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfUkVTVUxUOgotCQlWYWwzMiA9IHBBQy0+UG5taS5UZXN0UmVzdWx0OwotCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmLCBWYWwzMik7Ci0JCSpwTGVuID0gc2l6ZW9mKFNLX1UzMik7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9TRU5TT1JfTlVNQkVSOgotCQkqcEJ1ZiA9IChjaGFyKXBBQy0+STJjLk1heFNlbnM7Ci0JCSpwTGVuID0gc2l6ZW9mKGNoYXIpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfQ0hLU01fTlVNQkVSOgotCQkqcEJ1ZiA9IFNLQ1NfTlVNX1BST1RPQ09MUzsKLQkJKnBMZW4gPSBzaXplb2YoY2hhcik7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9UUkFQX05VTUJFUjoKLQkJR2V0VHJhcFF1ZXVlTGVuKHBBQywgJkxlbiwgJlZhbCk7Ci0JCVZhbDMyID0gKFNLX1UzMilWYWw7Ci0JCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFZhbDMyKTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1RSQVA6Ci0JCUdldFRyYXBRdWV1ZUxlbihwQUMsICZMZW4sICZWYWwpOwotCQlpZiAoKnBMZW4gPCBMZW4pIHsKLQotCQkJKnBMZW4gPSBMZW47Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJQ29weVRyYXBRdWV1ZShwQUMsIHBCdWYpOwotCQkqcExlbiA9IExlbjsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1JMTVRfTU9OSVRPUl9OVU1CRVI6Ci0vKiBYWFggTm90IHlldCBpbXBsZW1lbnRlZCBieSBSTE1UIHRoZXJlZm9yZSB3ZSByZXR1cm4gemVybyBlbGVtZW50cyAqLwotCQlWYWwzMiA9IDA7Ci0JCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFZhbDMyKTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1RYX1NXX1FVRVVFX0xFTjoKLQkJLyogMjAwMi0wOS0xNyBwd2ViZXI6IEZvciBYTUFDLCB1c2UgdGhlIGZyb3plbiBTVyBjb3VudGVycyAoQnVmUG9ydCkgKi8KLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX1hNQUMpIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlR4U3dRdWV1ZUxlbjsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFswXS5UeFN3UXVldWVMZW4gKwotCQkJCQlwQUMtPlBubWkuQnVmUG9ydFsxXS5UeFN3UXVldWVMZW47Ci0JCQl9CQkJCi0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeFN3UXVldWVMZW47Ci0JCQl9Ci0JCQkvKiBTaW5nbGUgbmV0IG1vZGUgKi8KLQkJCWVsc2UgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uVHhTd1F1ZXVlTGVuICsKLQkJCQkJcEFDLT5Qbm1pLlBvcnRbMV0uVHhTd1F1ZXVlTGVuOwotCQkJfQkJCQotCQl9Ci0JCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJYnJlYWs7Ci0KLQotCWNhc2UgT0lEX1NLR0VfVFhfU1dfUVVFVUVfTUFYOgotCQkvKiAyMDAyLTA5LTE3IHB3ZWJlcjogRm9yIFhNQUMsIHVzZSB0aGUgZnJvemVuIFNXIGNvdW50ZXJzIChCdWZQb3J0KSAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJLyogRHVhbCBuZXQgbW9kZSAqLwotCQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFtOZXRJbmRleF0uVHhTd1F1ZXVlTWF4OwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0WzBdLlR4U3dRdWV1ZU1heCArCi0JCQkJCXBBQy0+UG5taS5CdWZQb3J0WzFdLlR4U3dRdWV1ZU1heDsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlR4U3dRdWV1ZU1heDsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFswXS5UeFN3UXVldWVNYXggKwotCQkJCQlwQUMtPlBubWkuUG9ydFsxXS5UeFN3UXVldWVNYXg7Ci0JCQl9Ci0JCX0KLQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiwgVmFsNjQpOwotCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfVFhfUkVUUlk6Ci0JCS8qIDIwMDItMDktMTcgcHdlYmVyOiBGb3IgWE1BQywgdXNlIHRoZSBmcm96ZW4gU1cgY291bnRlcnMgKEJ1ZlBvcnQpICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldEluZGV4XS5UeFJldHJ5Q3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0WzBdLlR4UmV0cnlDdHMgKwotCQkJCQlwQUMtPlBubWkuQnVmUG9ydFsxXS5UeFJldHJ5Q3RzOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJLyogRHVhbCBuZXQgbW9kZSAqLwotCQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uVHhSZXRyeUN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFswXS5UeFJldHJ5Q3RzICsKLQkJCQkJcEFDLT5Qbm1pLlBvcnRbMV0uVHhSZXRyeUN0czsKLQkJCX0KLQkJfQotCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NCk7Ci0JCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9SWF9JTlRSX0NUUzoKLQkJLyogMjAwMi0wOS0xNyBwd2ViZXI6IEZvciBYTUFDLCB1c2UgdGhlIGZyb3plbiBTVyBjb3VudGVycyAoQnVmUG9ydCkgKi8KLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX1hNQUMpIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlJ4SW50ckN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFswXS5SeEludHJDdHMgKwotCQkJCQlwQUMtPlBubWkuQnVmUG9ydFsxXS5SeEludHJDdHM7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5SeEludHJDdHM7Ci0JCQl9Ci0JCQkvKiBTaW5nbGUgbmV0IG1vZGUgKi8KLQkJCWVsc2UgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uUnhJbnRyQ3RzICsKLQkJCQkJcEFDLT5Qbm1pLlBvcnRbMV0uUnhJbnRyQ3RzOwotCQkJfQotCQl9Ci0JCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1RYX0lOVFJfQ1RTOgotCQkvKiAyMDAyLTA5LTE3IHB3ZWJlcjogRm9yIFhNQUMsIHVzZSB0aGUgZnJvemVuIFNXIGNvdW50ZXJzIChCdWZQb3J0KSAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJLyogRHVhbCBuZXQgbW9kZSAqLwotCQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFtOZXRJbmRleF0uVHhJbnRyQ3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0WzBdLlR4SW50ckN0cyArCi0JCQkJCXBBQy0+UG5taS5CdWZQb3J0WzFdLlR4SW50ckN0czsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlR4SW50ckN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFswXS5UeEludHJDdHMgKwotCQkJCQlwQUMtPlBubWkuUG9ydFsxXS5UeEludHJDdHM7Ci0JCQl9Ci0JCX0KLQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiwgVmFsNjQpOwotCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfUlhfTk9fQlVGX0NUUzoKLQkJLyogMjAwMi0wOS0xNyBwd2ViZXI6IEZvciBYTUFDLCB1c2UgdGhlIGZyb3plbiBTVyBjb3VudGVycyAoQnVmUG9ydCkgKi8KLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX1hNQUMpIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlJ4Tm9CdWZDdHM7Ci0JCQl9Ci0JCQkvKiBTaW5nbGUgbmV0IG1vZGUgKi8KLQkJCWVsc2UgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbMF0uUnhOb0J1ZkN0cyArCi0JCQkJCXBBQy0+UG5taS5CdWZQb3J0WzFdLlJ4Tm9CdWZDdHM7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5SeE5vQnVmQ3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5Qb3J0WzBdLlJ4Tm9CdWZDdHMgKwotCQkJCQlwQUMtPlBubWkuUG9ydFsxXS5SeE5vQnVmQ3RzOwotCQkJfQotCQl9Ci0JCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1RYX05PX0JVRl9DVFM6Ci0JCS8qIDIwMDItMDktMTcgcHdlYmVyOiBGb3IgWE1BQywgdXNlIHRoZSBmcm96ZW4gU1cgY291bnRlcnMgKEJ1ZlBvcnQpICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldEluZGV4XS5UeE5vQnVmQ3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0WzBdLlR4Tm9CdWZDdHMgKwotCQkJCQlwQUMtPlBubWkuQnVmUG9ydFsxXS5UeE5vQnVmQ3RzOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJLyogRHVhbCBuZXQgbW9kZSAqLwotCQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uVHhOb0J1ZkN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFswXS5UeE5vQnVmQ3RzICsKLQkJCQkJcEFDLT5Qbm1pLlBvcnRbMV0uVHhOb0J1ZkN0czsKLQkJCX0KLQkJfQotCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NCk7Ci0JCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9UWF9VU0VEX0RFU0NSX05POgotCQkvKiAyMDAyLTA5LTE3IHB3ZWJlcjogRm9yIFhNQUMsIHVzZSB0aGUgZnJvemVuIFNXIGNvdW50ZXJzIChCdWZQb3J0KSAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJLyogRHVhbCBuZXQgbW9kZSAqLwotCQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFtOZXRJbmRleF0uVHhVc2VkRGVzY3JObzsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFswXS5UeFVzZWREZXNjck5vICsKLQkJCQkJcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uVHhVc2VkRGVzY3JObzsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlR4VXNlZERlc2NyTm87Ci0JCQl9Ci0JCQkvKiBTaW5nbGUgbmV0IG1vZGUgKi8KLQkJCWVsc2UgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uVHhVc2VkRGVzY3JObyArCi0JCQkJCXBBQy0+UG5taS5Qb3J0WzFdLlR4VXNlZERlc2NyTm87Ci0JCQl9Ci0JCX0KLQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiwgVmFsNjQpOwotCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfUlhfREVMSVZFUkVEX0NUUzoKLQkJLyogMjAwMi0wOS0xNyBwd2ViZXI6IEZvciBYTUFDLCB1c2UgdGhlIGZyb3plbiBTVyBjb3VudGVycyAoQnVmUG9ydCkgKi8KLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX1hNQUMpIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlJ4RGVsaXZlcmVkQ3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0WzBdLlJ4RGVsaXZlcmVkQ3RzICsKLQkJCQkJcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uUnhEZWxpdmVyZWRDdHM7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5SeERlbGl2ZXJlZEN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFswXS5SeERlbGl2ZXJlZEN0cyArCi0JCQkJCXBBQy0+UG5taS5Qb3J0WzFdLlJ4RGVsaXZlcmVkQ3RzOwotCQkJfQotCQl9Ci0JCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX1JYX09DVEVUU19ERUxJVl9DVFM6Ci0JCS8qIDIwMDItMDktMTcgcHdlYmVyOiBGb3IgWE1BQywgdXNlIHRoZSBmcm96ZW4gU1cgY291bnRlcnMgKEJ1ZlBvcnQpICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldEluZGV4XS5SeE9jdGV0c0RlbGl2ZXJlZEN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFswXS5SeE9jdGV0c0RlbGl2ZXJlZEN0cyArCi0JCQkJCXBBQy0+UG5taS5CdWZQb3J0WzFdLlJ4T2N0ZXRzRGVsaXZlcmVkQ3RzOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJLyogRHVhbCBuZXQgbW9kZSAqLwotCQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uUnhPY3RldHNEZWxpdmVyZWRDdHM7Ci0JCQl9Ci0JCQkvKiBTaW5nbGUgbmV0IG1vZGUgKi8KLQkJCWVsc2UgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uUnhPY3RldHNEZWxpdmVyZWRDdHMgKwotCQkJCQlwQUMtPlBubWkuUG9ydFsxXS5SeE9jdGV0c0RlbGl2ZXJlZEN0czsKLQkJCX0KLQkJfQotCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NCk7Ci0JCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9SWF9IV19FUlJPUl9DVFM6Ci0JCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0UnhId0VycnMpOwotCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfVFhfSFdfRVJST1JfQ1RTOgotCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NFR4SHdFcnJzKTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX0lOX0VSUk9SU19DVFM6Ci0JCS8qIDIwMDItMDktMTcgcHdlYmVyOiBGb3IgWE1BQywgdXNlIHRoZSBmcm96ZW4gU1cgY291bnRlcnMgKEJ1ZlBvcnQpICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IFZhbDY0UnhId0VycnMgKyBwQUMtPlBubWkuQnVmUG9ydFtOZXRJbmRleF0uUnhOb0J1ZkN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBWYWw2NFJ4SHdFcnJzICsKLQkJCQkJcEFDLT5Qbm1pLkJ1ZlBvcnRbMF0uUnhOb0J1ZkN0cyArCi0JCQkJCXBBQy0+UG5taS5CdWZQb3J0WzFdLlJ4Tm9CdWZDdHM7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBEdWFsIG5ldCBtb2RlICovCi0JCQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsKLQkJCQlWYWw2NCA9IFZhbDY0UnhId0VycnMgKyBwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uUnhOb0J1ZkN0czsKLQkJCX0KLQkJCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQkJZWxzZSB7Ci0JCQkJVmFsNjQgPSBWYWw2NFJ4SHdFcnJzICsKLQkJCQkJcEFDLT5Qbm1pLlBvcnRbMF0uUnhOb0J1ZkN0cyArCi0JCQkJCXBBQy0+UG5taS5Qb3J0WzFdLlJ4Tm9CdWZDdHM7Ci0JCQl9Ci0JCX0KLQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiwgVmFsNjQpOwotCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfT1VUX0VSUk9SX0NUUzoKLQkJLyogMjAwMi0wOS0xNyBwd2ViZXI6IEZvciBYTUFDLCB1c2UgdGhlIGZyb3plbiBTVyBjb3VudGVycyAoQnVmUG9ydCkgKi8KLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX1hNQUMpIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gVmFsNjRUeEh3RXJycyArIHBBQy0+UG5taS5CdWZQb3J0W05ldEluZGV4XS5UeE5vQnVmQ3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IFZhbDY0VHhId0VycnMgKwotCQkJCQlwQUMtPlBubWkuQnVmUG9ydFswXS5UeE5vQnVmQ3RzICsKLQkJCQkJcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uVHhOb0J1ZkN0czsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gVmFsNjRUeEh3RXJycyArIHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeE5vQnVmQ3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IFZhbDY0VHhId0VycnMgKwotCQkJCQlwQUMtPlBubWkuUG9ydFswXS5UeE5vQnVmQ3RzICsKLQkJCQkJcEFDLT5Qbm1pLlBvcnRbMV0uVHhOb0J1ZkN0czsKLQkJCX0KLQkJfQotCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NCk7Ci0JCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9FUlJfUkVDT1ZFUllfQ1RTOgotCQkvKiAyMDAyLTA5LTE3IHB3ZWJlcjogRm9yIFhNQUMsIHVzZSB0aGUgZnJvemVuIFNXIGNvdW50ZXJzIChCdWZQb3J0KSAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJLyogRHVhbCBuZXQgbW9kZSAqLwotCQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQkJVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFtOZXRJbmRleF0uRXJyUmVjb3ZlcnlDdHM7Ci0JCQl9Ci0JCQkvKiBTaW5nbGUgbmV0IG1vZGUgKi8KLQkJCWVsc2UgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbMF0uRXJyUmVjb3ZlcnlDdHMgKwotCQkJCQlwQUMtPlBubWkuQnVmUG9ydFsxXS5FcnJSZWNvdmVyeUN0czsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLkVyclJlY292ZXJ5Q3RzOwotCQkJfQotCQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCQllbHNlIHsKLQkJCQlWYWw2NCA9IHBBQy0+UG5taS5Qb3J0WzBdLkVyclJlY292ZXJ5Q3RzICsKLQkJCQkJcEFDLT5Qbm1pLlBvcnRbMV0uRXJyUmVjb3ZlcnlDdHM7Ci0JCQl9Ci0JCX0KLQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiwgVmFsNjQpOwotCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQlicmVhazsKLQotCWNhc2UgT0lEX1NLR0VfU1lTVVBUSU1FOgotCQlWYWw2NCA9IFNLX1BOTUlfSFVORFJFRFNfU0VDKFNrT3NHZXRUaW1lKHBBQykpOwotCQlWYWw2NCAtPSBwQUMtPlBubWkuU3RhcnRVcFRpbWU7Ci0JCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9TS0dFX01EQl9WRVJTSU9OOgotCQlWYWwzMiA9IFNLX1BOTUlfTURCX1ZFUlNJT047Ci0JCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFZhbDMyKTsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9HRU5fUkNWX0VSUk9SOgotCQkvKiAyMDAyLTA5LTE3IHB3ZWJlcjogRm9yIFhNQUMsIHVzZSB0aGUgZnJvemVuIFNXIGNvdW50ZXJzIChCdWZQb3J0KSAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJVmFsNjQgPSBWYWw2NFJ4SHdFcnJzICsgcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlJ4Tm9CdWZDdHM7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlWYWw2NCA9IFZhbDY0UnhId0VycnMgKyBwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uUnhOb0J1ZkN0czsKLQkJfQotCi0JCS8qCi0JCSAqIGJ5IGRlZmF1bHQgMzJiaXQgdmFsdWVzIGFyZSBldmFsdWF0ZWQKLQkJICovCi0JCWlmICghSXM2NEJpdFJlcSkgewotCQkJVmFsMzIgPSAoU0tfVTMyKVZhbDY0OwotCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiwgVmFsMzIpOwotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJfQotCQllbHNlIHsKLQkJCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9HRU5fWE1JVF9FUlJPUjoKLQkJLyogMjAwMi0wOS0xNyBwd2ViZXI6IEZvciBYTUFDLCB1c2UgdGhlIGZyb3plbiBTVyBjb3VudGVycyAoQnVmUG9ydCkgKi8KLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX1hNQUMpIHsKLQkJCVZhbDY0ID0gVmFsNjRUeEh3RXJycyArIHBBQy0+UG5taS5CdWZQb3J0W05ldEluZGV4XS5UeE5vQnVmQ3RzOwotCQl9Ci0JCWVsc2UgewotCQkJVmFsNjQgPSBWYWw2NFR4SHdFcnJzICsgcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlR4Tm9CdWZDdHM7Ci0JCX0KLQotCQkvKgotCQkgKiBieSBkZWZhdWx0IDMyYml0IHZhbHVlcyBhcmUgZXZhbHVhdGVkCi0JCSAqLwotCQlpZiAoIUlzNjRCaXRSZXEpIHsKLQkJCVZhbDMyID0gKFNLX1UzMilWYWw2NDsKLQkJCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFZhbDMyKTsKLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1UzMik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NCk7Ci0JCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfR0VOX1JDVl9OT19CVUZGRVI6Ci0JCS8qIDIwMDItMDktMTcgcHdlYmVyOiBGb3IgWE1BQywgdXNlIHRoZSBmcm96ZW4gU1cgY291bnRlcnMgKEJ1ZlBvcnQpICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0JCQlWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldEluZGV4XS5SeE5vQnVmQ3RzOwotCQl9Ci0JCWVsc2UgewotCQkJVmFsNjQgPSBwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uUnhOb0J1ZkN0czsKLQkJfQotCi0JCS8qCi0JCSAqIGJ5IGRlZmF1bHQgMzJiaXQgdmFsdWVzIGFyZSBldmFsdWF0ZWQKLQkJICovCi0JCWlmICghSXM2NEJpdFJlcSkgewotCQkJVmFsMzIgPSAoU0tfVTMyKVZhbDY0OwotCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiwgVmFsMzIpOwotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJfQotCQllbHNlIHsKLQkJCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIOgotCQlWYWwzMiA9IChTS19VMzIpcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlR4U3dRdWV1ZUxlbjsKLQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiwgVmFsMzIpOwotCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMzQsCi0JCQlTS19QTk1JX0VSUjAzNE1TRyk7Ci0KLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCX0KLQotCWlmIChJZCA9PSBPSURfU0tHRV9SWF9IV19FUlJPUl9DVFMgfHwKLQkJSWQgPT0gT0lEX1NLR0VfVFhfSFdfRVJST1JfQ1RTIHx8Ci0JCUlkID09IE9JRF9TS0dFX0lOX0VSUk9SU19DVFMgfHwKLQkJSWQgPT0gT0lEX1NLR0VfT1VUX0VSUk9SX0NUUyB8fAotCQlJZCA9PSBPSURfR0VOX1hNSVRfRVJST1IgfHwKLQkJSWQgPT0gT0lEX0dFTl9SQ1ZfRVJST1IpIHsKLQotCQlwQUMtPlBubWkuTWFjVXBkYXRlZEZsYWcgLS07Ci0JfQotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFJsbXQgLSBPSUQgaGFuZGxlciBmdW5jdGlvbiBvZiBPSURfU0tHRV9STE1UX1hYWCBzaW5nbGUgaW5zdGFuY2UuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglHZXQvUHJlc2V0cy9TZXRzIHRoZSBSTE1UIE9JRHMuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1BOTUlfRVJSX09LICAgICAgICAgICBUaGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQuCi0gKglTS19QTk1JX0VSUl9UT09fU0hPUlQgICAgVGhlIHBhc3NlZCBidWZmZXIgaXMgdG9vIHNob3J0IHRvIGNvbnRhaW4KLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCBkYXRhIChlLmcuIGEgMzJiaXQgdmFsdWUgaXMKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQsIGJ1dCBhIDE2IGJpdCB2YWx1ZSB3YXMgcGFzc2VkKS4KLSAqCVNLX1BOTUlfRVJSX0JBRF9WQUxVRSAgICBUaGUgcGFzc2VkIHZhbHVlIGlzIG5vdCBpbiB0aGUgdmFsaWQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSByYW5nZS4KLSAqCVNLX1BOTUlfRVJSX1JFQURfT05MWSAgICBUaGUgT0lEIGlzIHJlYWQtb25seSBhbmQgY2Fubm90IGJlIHNldC4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuCi0gKi8KLVBOTUlfU1RBVElDIGludCBSbG10KAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLWludCBBY3Rpb24sCQkvKiBHRVQvUFJFU0VUL1NFVCBhY3Rpb24gKi8KLVNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwotY2hhciAqcEJ1ZiwJCS8qIEJ1ZmZlciB1c2VkIGZvciB0aGUgbWFuYWdlbWVudCBkYXRhIHRyYW5zZmVyICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIE9uIGNhbGw6IHBCdWYgYnVmZmVyIGxlbmd0aC4gT24gcmV0dXJuOiB1c2VkIGJ1ZmZlciAqLwotU0tfVTMyIEluc3RhbmNlLAkvKiBJbnN0YW5jZSAoMS4ubikgdGhhdCBpcyB0byBiZSBxdWVyaWVkIG9yIC0xICovCi11bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgLyogSW5kZXggdG8gdGhlIElkIHRhYmxlICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsd2F5cyB6ZXJvICovCi17Ci0JaW50CQlSZXQ7Ci0JdW5zaWduZWQgaW50CVBoeXNQb3J0SW5kZXg7Ci0JdW5zaWduZWQgaW50CVBoeXNQb3J0TWF4OwotCVNLX0VWUEFSQQlFdmVudFBhcmFtOwotCVNLX1UzMgkJVmFsMzI7Ci0JU0tfVTY0CQlWYWw2NDsKLQotCi0JLyoKLQkgKiBDaGVjayBpbnN0YW5jZS4gT25seSBzaW5nbGUgaW5zdGFuY2UgT0lEcyBhcmUgYWxsb3dlZCBoZXJlLgotCSAqLwotCWlmIChJbnN0YW5jZSAhPSAoU0tfVTMyKSgtMSkgJiYgSW5zdGFuY2UgIT0gMSkgewotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QpOwotCX0KLQotCS8qCi0JICogUGVyZm9ybSB0aGUgcmVxdWVzdGVkIGFjdGlvbi4KLQkgKi8KLQlpZiAoQWN0aW9uID09IFNLX1BOTUlfR0VUKSB7Ci0KLQkJLyoKLQkJICogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBsZW5ndGggaXMgbGFyZ2UgZW5vdWdoLgotCQkgKi8KLQotCQlzd2l0Y2ggKElkKSB7Ci0KLQkJY2FzZSBPSURfU0tHRV9STE1UX01PREU6Ci0JCWNhc2UgT0lEX1NLR0VfUkxNVF9QT1JUX0FDVElWRToKLQkJY2FzZSBPSURfU0tHRV9STE1UX1BPUlRfUFJFRkVSUkVEOgotCQkJaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1U4KSkgewotCi0JCQkJKnBMZW4gPSBzaXplb2YoU0tfVTgpOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9QT1JUX05VTUJFUjoKLQkJCWlmICgqcExlbiA8IHNpemVvZihTS19VMzIpKSB7Ci0KLQkJCQkqcExlbiA9IHNpemVvZihTS19VMzIpOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9DSEFOR0VfQ1RTOgotCQljYXNlIE9JRF9TS0dFX1JMTVRfQ0hBTkdFX1RJTUU6Ci0JCWNhc2UgT0lEX1NLR0VfUkxNVF9DSEFOR0VfRVNUSU06Ci0JCWNhc2UgT0lEX1NLR0VfUkxNVF9DSEFOR0VfVEhSRVM6Ci0JCQlpZiAoKnBMZW4gPCBzaXplb2YoU0tfVTY0KSkgewotCi0JCQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAzNSwKLQkJCQlTS19QTk1JX0VSUjAzNU1TRyk7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCX0KLQotCQkvKgotCQkgKiBVcGRhdGUgUkxNVCBzdGF0aXN0aWMgYW5kIGluY3JlbWVudCBzZW1hcGhvcmVzIHRvIGluZGljYXRlCi0JCSAqIHRoYXQgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGRvbmUuIE1heWJlIFJMTVQgd2lsbCBob2xkIGl0cwotCQkgKiBzdGF0aXN0aWMgYWx3YXlzIHVwIHRvIGRhdGUgc29tZSB0aW1lLiBUaGVuIHdlIGNhbgotCQkgKiByZW1vdmUgdGhpcyB0eXBlIG9mIGNhbGwuCi0JCSAqLwotCQlpZiAoKFJldCA9IFJsbXRVcGRhdGUocEFDLCBJb0MsIE5ldEluZGV4KSkgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChSZXQpOwotCQl9Ci0JCXBBQy0+UG5taS5SbG10VXBkYXRlZEZsYWcgKys7Ci0KLQkJLyoKLQkJICogUmV0cmlldmUgVmFsdWUKLQkJKi8KLQkJc3dpdGNoIChJZCkgewotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9NT0RFOgotCQkJKnBCdWYgPSAoY2hhcilwQUMtPlJsbXQuTmV0WzBdLlJsbXRNb2RlOwotCQkJKnBMZW4gPSBzaXplb2YoY2hhcik7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1JMTVRfUE9SVF9OVU1CRVI6Ci0JCQlWYWwzMiA9IChTS19VMzIpcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiwgVmFsMzIpOwotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9QT1JUX0FDVElWRToKLQkJCSpwQnVmID0gMDsKLQkJCS8qCi0JCQkgKiBJZiBtdWx0aXBsZSBwb3J0cyBtYXkgYmVjb21lIGFjdGl2ZSB0aGlzIE9JRAotCQkJICogZG9lc24ndCBtYWtlIHNlbnNlIGFueSBtb3JlLiBBIG5ldyB2YXJpYWJsZSBpbgotCQkJICogdGhlIHBvcnQgc3RydWN0dXJlIHNob3VsZCBiZSBjcmVhdGVkLiBIb3dldmVyLAotCQkJICogZm9yIHRoaXMgdmFyaWFibGUgdGhlIGZpcnN0IGFjdGl2ZSBwb3J0IGlzCi0JCQkgKiByZXR1cm5lZC4KLQkJCSAqLwotCQkJUGh5c1BvcnRNYXggPSBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7Ci0KLQkJCWZvciAoUGh5c1BvcnRJbmRleCA9IDA7IFBoeXNQb3J0SW5kZXggPCBQaHlzUG9ydE1heDsKLQkJCQlQaHlzUG9ydEluZGV4ICsrKSB7Ci0KLQkJCQlpZiAocEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQWN0aXZlRmxhZykgewotCi0JCQkJCSpwQnVmID0gKGNoYXIpU0tfUE5NSV9QT1JUX1BIWVMyTE9HKFBoeXNQb3J0SW5kZXgpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkqcExlbiA9IHNpemVvZihjaGFyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9QT1JUX1BSRUZFUlJFRDoKLQkJCSpwQnVmID0gKGNoYXIpU0tfUE5NSV9QT1JUX1BIWVMyTE9HKHBBQy0+UmxtdC5OZXRbTmV0SW5kZXhdLlByZWZlcmVuY2UpOwotCQkJKnBMZW4gPSBzaXplb2YoY2hhcik7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1JMTVRfQ0hBTkdFX0NUUzoKLQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlJsbXRDaGFuZ2VDdHM7Ci0JCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NCk7Ci0JCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9STE1UX0NIQU5HRV9USU1FOgotCQkJVmFsNjQgPSBwQUMtPlBubWkuUmxtdENoYW5nZVRpbWU7Ci0JCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmLCBWYWw2NCk7Ci0JCQkqcExlbiA9IHNpemVvZihTS19VNjQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9STE1UX0NIQU5HRV9FU1RJTToKLQkJCVZhbDY0ID0gcEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RpbWF0ZTsKLQkJCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1JMTVRfQ0hBTkdFX1RIUkVTOgotCQkJVmFsNjQgPSBwQUMtPlBubWkuUmxtdENoYW5nZVRocmVzaG9sZDsKLQkJCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYsIFZhbDY0KTsKLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9QTk1JLCBTS19EQkdDQVRfRVJSLAotCQkJCSgiUmxtdDogVW5rbm93biBPSUQgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIikpOwotCi0JCQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCXBBQy0+UG5taS5SbG10VXBkYXRlZEZsYWcgLS07Ci0JfQotCWVsc2UgewotCQkvKiBQZXJmb3JtIGEgcHJlc2V0IG9yIHNldCAqLwotCQlzd2l0Y2ggKElkKSB7Ci0KLQkJY2FzZSBPSURfU0tHRV9STE1UX01PREU6Ci0JCQkvKiBDaGVjayBpZiB0aGUgYnVmZmVyIGxlbmd0aCBpcyBwbGF1c2libGUgKi8KLQkJCWlmICgqcExlbiA8IHNpemVvZihjaGFyKSkgewotCi0JCQkJKnBMZW4gPSBzaXplb2YoY2hhcik7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQkJfQotCQkJLyogQ2hlY2sgaWYgdGhlIHZhbHVlIHJhbmdlIGlzIGNvcnJlY3QgKi8KLQkJCWlmICgqcExlbiAhPSBzaXplb2YoY2hhcikgfHwKLQkJCQkoKnBCdWYgJiBTS19QTk1JX1JMTVRfTU9ERV9DSEtfTElOSykgPT0gMCB8fAotCQkJCSooU0tfVTggKilwQnVmID4gMTUpIHsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCQl9Ci0JCQkvKiBUaGUgcHJlc2V0IGVuZHMgaGVyZSAqLwotCQkJaWYgKEFjdGlvbiA9PSBTS19QTk1JX1BSRVNFVCkgewotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCQkJfQotCQkJLyogU2VuZCBhbiBldmVudCB0byBSTE1UIHRvIGNoYW5nZSB0aGUgbW9kZSAqLwotCQkJU0tfTUVNU0VUKChjaGFyICopJkV2ZW50UGFyYW0sIDAsIHNpemVvZihFdmVudFBhcmFtKSk7Ci0JCQlFdmVudFBhcmFtLlBhcmEzMlswXSB8PSAoU0tfVTMyKSgqcEJ1Zik7Ci0JCQlFdmVudFBhcmFtLlBhcmEzMlsxXSA9IDA7Ci0JCQlpZiAoU2tSbG10RXZlbnQocEFDLCBJb0MsIFNLX1JMTVRfTU9ERV9DSEFOR0UsCi0JCQkJRXZlbnRQYXJhbSkgPiAwKSB7Ci0KLQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDM3LAotCQkJCQlTS19QTk1JX0VSUjAzN01TRyk7Ci0KLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9QT1JUX1BSRUZFUlJFRDoKLQkJCS8qIENoZWNrIGlmIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHBsYXVzaWJsZSAqLwotCQkJaWYgKCpwTGVuIDwgc2l6ZW9mKGNoYXIpKSB7Ci0KLQkJCQkqcExlbiA9IHNpemVvZihjaGFyKTsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0JCQkvKiBDaGVjayBpZiB0aGUgdmFsdWUgcmFuZ2UgaXMgY29ycmVjdCAqLwotCQkJaWYgKCpwTGVuICE9IHNpemVvZihjaGFyKSB8fCAqKFNLX1U4ICopcEJ1ZiA+Ci0JCQkJKFNLX1U4KXBBQy0+R0luaS5HSU1hY3NGb3VuZCkgewotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJCX0KLQkJCS8qIFRoZSBwcmVzZXQgZW5kcyBoZXJlICovCi0JCQlpZiAoQWN0aW9uID09IFNLX1BOTUlfUFJFU0VUKSB7Ci0KLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBTZW5kIGFuIGV2ZW50IHRvIFJMTVQgY2hhbmdlIHRoZSBwcmVmZXJyZWQgcG9ydC4KLQkJCSAqIEEgcGFyYW0gb2YgLTEgbWVhbnMgYXV0b21hdGljIG1vZGUuIFJMTVQgd2lsbAotCQkJICogbWFrZSB0aGUgZGVjaXNpb24gd2hpY2ggaXMgdGhlIHByZWZlcnJlZCBwb3J0LgotCQkJICovCi0JCQlTS19NRU1TRVQoKGNoYXIgKikmRXZlbnRQYXJhbSwgMCwgc2l6ZW9mKEV2ZW50UGFyYW0pKTsKLQkJCUV2ZW50UGFyYW0uUGFyYTMyWzBdID0gKFNLX1UzMikoKnBCdWYpIC0gMTsKLQkJCUV2ZW50UGFyYW0uUGFyYTMyWzFdID0gTmV0SW5kZXg7Ci0JCQlpZiAoU2tSbG10RXZlbnQocEFDLCBJb0MsIFNLX1JMTVRfUFJFRlBPUlRfQ0hBTkdFLAotCQkJCUV2ZW50UGFyYW0pID4gMCkgewotCi0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAzOCwKLQkJCQkJU0tfUE5NSV9FUlIwMzhNU0cpOwotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1JMTVRfQ0hBTkdFX1RIUkVTOgotCQkJLyogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBsZW5ndGggaXMgcGxhdXNpYmxlICovCi0JCQlpZiAoKnBMZW4gPCBzaXplb2YoU0tfVTY0KSkgewotCi0JCQkJKnBMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0JCQkvKgotCQkJICogVGhlcmUgYXJlIG5vdCBtYW55IHJlc3RyaWN0aW9ucyB0byB0aGUKLQkJCSAqIHZhbHVlIHJhbmdlLgotCQkJICovCi0JCQlpZiAoKnBMZW4gIT0gc2l6ZW9mKFNLX1U2NCkpIHsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCQl9Ci0JCQkvKiBBIHByZXNldCBlbmRzIGhlcmUgKi8KLQkJCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9QUkVTRVQpIHsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBTdG9yZSB0aGUgbmV3IHRocmVzaG9sZCwgd2hpY2ggd2lsbCBiZSB0YWtlbgotCQkJICogb24gdGhlIG5leHQgdGltZXIgZXZlbnQuCi0JCQkgKi8KLQkJCVNLX1BOTUlfUkVBRF9VNjQocEJ1ZiwgVmFsNjQpOwotCQkJcEFDLT5Qbm1pLlJsbXRDaGFuZ2VUaHJlc2hvbGQgPSBWYWw2NDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQkvKiBUaGUgb3RoZXIgT0lEcyBhcmUgbm90IGJlIGFibGUgZm9yIHNldCAqLwotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9SRUFEX09OTFkpOwotCQl9Ci0JfQotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFJsbXRTdGF0IC0gT0lEIGhhbmRsZXIgZnVuY3Rpb24gb2YgT0lEX1NLR0VfUkxNVF9YWFggbXVsdGlwbGUgaW5zdGFuY2UuCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglQZXJmb3JtcyBnZXQgcmVxdWVzdHMgb24gbXVsdGlwbGUgaW5zdGFuY2UgdmFyaWFibGVzLgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkLgotICoJU0tfUE5NSV9FUlJfVE9PX1NIT1JUICAgIFRoZSBwYXNzZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgZGF0YSAoZS5nLiBhIDMyYml0IHZhbHVlIGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLCBidXQgYSAxNiBiaXQgdmFsdWUgd2FzIHBhc3NlZCkuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QgVGhlIHJlcXVlc3RlZCBpbnN0YW5jZSBvZiB0aGUgT0lEIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QgKGUuZy4gcG9ydCBpbnN0YW5jZSAzIG9uIGEgdHdvIHBvcnQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLgotICovCi1QTk1JX1NUQVRJQyBpbnQgUmxtdFN0YXQoCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotaW50IEFjdGlvbiwJCS8qIEdFVC9QUkVTRVQvU0VUIGFjdGlvbiAqLwotU0tfVTMyIElkLAkJLyogT2JqZWN0IElEIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkICovCi1jaGFyICpwQnVmLAkJLyogQnVmZmVyIHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IGRhdGEgdHJhbnNmZXIgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogT24gY2FsbDogcEJ1ZiBidWZmZXIgbGVuZ3RoLiBPbiByZXR1cm46IHVzZWQgYnVmZmVyICovCi1TS19VMzIgSW5zdGFuY2UsCS8qIEluc3RhbmNlICgxLi5uKSB0aGF0IGlzIHRvIGJlIHF1ZXJpZWQgb3IgLTEgKi8KLXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCAvKiBJbmRleCB0byB0aGUgSWQgdGFibGUgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQl1bnNpZ25lZCBpbnQJUGh5c1BvcnRNYXg7Ci0JdW5zaWduZWQgaW50CVBoeXNQb3J0SW5kZXg7Ci0JdW5zaWduZWQgaW50CUxpbWl0OwotCXVuc2lnbmVkIGludAlPZmZzZXQ7Ci0JaW50CQlSZXQ7Ci0JU0tfVTMyCQlWYWwzMjsKLQlTS19VNjQJCVZhbDY0OwotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIHBvcnQgaW5kZXhlcyBmcm9tIHRoZSBpbnN0YW5jZS4KLQkgKi8KLQlQaHlzUG9ydE1heCA9IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsKLQotCWlmICgoSW5zdGFuY2UgIT0gKFNLX1UzMikoLTEpKSkgewotCQkvKiBDaGVjayBpbnN0YW5jZSByYW5nZSAqLwotCQlpZiAoKEluc3RhbmNlIDwgMSkgfHwgKEluc3RhbmNlID4gUGh5c1BvcnRNYXgpKSB7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUKTsKLQkJfQotCi0JCS8qIFNpbmdsZSBuZXQgbW9kZSAqLwotCQlQaHlzUG9ydEluZGV4ID0gSW5zdGFuY2UgLSAxOwotCi0JCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQlQaHlzUG9ydEluZGV4ID0gTmV0SW5kZXg7Ci0JCX0KLQotCQkvKiBCb3RoIG5ldCBtb2RlcyAqLwotCQlMaW1pdCA9IFBoeXNQb3J0SW5kZXggKyAxOwotCX0KLQllbHNlIHsKLQkJLyogU2luZ2xlIG5ldCBtb2RlICovCi0JCVBoeXNQb3J0SW5kZXggPSAwOwotCQlMaW1pdCA9IFBoeXNQb3J0TWF4OwotCi0JCS8qIER1YWwgbmV0IG1vZGUgKi8KLQkJaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCQlQaHlzUG9ydEluZGV4ID0gTmV0SW5kZXg7Ci0JCQlMaW1pdCA9IFBoeXNQb3J0SW5kZXggKyAxOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBDdXJyZW50bHkgb25seSBnZXQgcmVxdWVzdHMgYXJlIGFsbG93ZWQuCi0JICovCi0JaWYgKEFjdGlvbiAhPSBTS19QTk1JX0dFVCkgewotCi0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9SRUFEX09OTFkpOwotCX0KLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBsZW5ndGggaXMgbGFyZ2UgZW5vdWdoLgotCSAqLwotCXN3aXRjaCAoSWQpIHsKLQotCWNhc2UgT0lEX1NLR0VfUkxNVF9QT1JUX0lOREVYOgotCWNhc2UgT0lEX1NLR0VfUkxNVF9TVEFUVVM6Ci0JCWlmICgqcExlbiA8IChMaW1pdCAtIFBoeXNQb3J0SW5kZXgpICogc2l6ZW9mKFNLX1UzMikpIHsKLQotCQkJKnBMZW4gPSAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZihTS19VMzIpOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9STE1UX1RYX0hFTExPX0NUUzoKLQljYXNlIE9JRF9TS0dFX1JMTVRfUlhfSEVMTE9fQ1RTOgotCWNhc2UgT0lEX1NLR0VfUkxNVF9UWF9TUF9SRVFfQ1RTOgotCWNhc2UgT0lEX1NLR0VfUkxNVF9SWF9TUF9DVFM6Ci0JCWlmICgqcExlbiA8IChMaW1pdCAtIFBoeXNQb3J0SW5kZXgpICogc2l6ZW9mKFNLX1U2NCkpIHsKLQotCQkJKnBMZW4gPSAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZihTS19VNjQpOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjAzOSwKLQkJCVNLX1BOTUlfRVJSMDM5TVNHKTsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0KLQl9Ci0KLQkvKgotCSAqIFVwZGF0ZSBzdGF0aXN0aWMgYW5kIGluY3JlbWVudCBzZW1hcGhvcmVzIHRvIGluZGljYXRlIHRoYXQKLQkgKiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgZG9uZS4KLQkgKi8KLQlpZiAoKFJldCA9IFJsbXRVcGRhdGUocEFDLCBJb0MsIE5ldEluZGV4KSkgIT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoUmV0KTsKLQl9Ci0JcEFDLT5Qbm1pLlJsbXRVcGRhdGVkRmxhZyArKzsKLQotCS8qCi0JICogR2V0IHZhbHVlCi0JICovCi0JT2Zmc2V0ID0gMDsKLQlmb3IgKDsgUGh5c1BvcnRJbmRleCA8IExpbWl0OyBQaHlzUG9ydEluZGV4ICsrKSB7Ci0KLQkJc3dpdGNoIChJZCkgewotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9QT1JUX0lOREVYOgotCQkJVmFsMzIgPSBQaHlzUG9ydEluZGV4OwotCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIE9mZnNldCwgVmFsMzIpOwotCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VMzIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9STE1UX1NUQVRVUzoKLQkJCWlmIChwQUMtPlJsbXQuUG9ydFtQaHlzUG9ydEluZGV4XS5Qb3J0U3RhdGUgPT0KLQkJCQlTS19STE1UX1BTX0lOSVQgfHwKLQkJCQlwQUMtPlJsbXQuUG9ydFtQaHlzUG9ydEluZGV4XS5Qb3J0U3RhdGUgPT0KLQkJCQlTS19STE1UX1BTX0RPV04pIHsKLQotCQkJCVZhbDMyID0gU0tfUE5NSV9STE1UX1NUQVRVU19FUlJPUjsKLQkJCX0KLQkJCWVsc2UgaWYgKHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkFjdGl2ZUZsYWcpIHsKLQotCQkJCVZhbDMyID0gU0tfUE5NSV9STE1UX1NUQVRVU19BQ1RJVkU7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlWYWwzMiA9IFNLX1BOTUlfUkxNVF9TVEFUVVNfU1RBTkRCWTsKLQkJCX0KLQkJCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYgKyBPZmZzZXQsIFZhbDMyKTsKLQkJCU9mZnNldCArPSBzaXplb2YoU0tfVTMyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9UWF9IRUxMT19DVFM6Ci0JCQlWYWw2NCA9IHBBQy0+UmxtdC5Qb3J0W1BoeXNQb3J0SW5kZXhdLlR4SGVsbG9DdHM7Ci0JCQlTS19QTk1JX1NUT1JFX1U2NChwQnVmICsgT2Zmc2V0LCBWYWw2NCk7Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1U2NCk7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1JMTVRfUlhfSEVMTE9fQ1RTOgotCQkJVmFsNjQgPSBwQUMtPlJsbXQuUG9ydFtQaHlzUG9ydEluZGV4XS5SeEhlbGxvQ3RzOwotCQkJU0tfUE5NSV9TVE9SRV9VNjQocEJ1ZiArIE9mZnNldCwgVmFsNjQpOwotCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VNjQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9STE1UX1RYX1NQX1JFUV9DVFM6Ci0JCQlWYWw2NCA9IHBBQy0+UmxtdC5Qb3J0W1BoeXNQb3J0SW5kZXhdLlR4U3BIZWxsb1JlcUN0czsKLQkJCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYgKyBPZmZzZXQsIFZhbDY0KTsKLQkJCU9mZnNldCArPSBzaXplb2YoU0tfVTY0KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUkxNVF9SWF9TUF9DVFM6Ci0JCQlWYWw2NCA9IHBBQy0+UmxtdC5Qb3J0W1BoeXNQb3J0SW5kZXhdLlJ4U3BIZWxsb0N0czsKLQkJCVNLX1BOTUlfU1RPUkVfVTY0KHBCdWYgKyBPZmZzZXQsIFZhbDY0KTsKLQkJCU9mZnNldCArPSBzaXplb2YoU0tfVTY0KTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1BOTUksIFNLX0RCR0NBVF9FUlIsCi0JCQkJKCJSbG10U3RhdDogVW5rbm93biBPSUQgc2hvdWxkIGJlIGVycm9yZWQgYmVmb3JlIikpOwotCi0JCQlwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCX0KLQkqcExlbiA9IE9mZnNldDsKLQotCXBBQy0+UG5taS5SbG10VXBkYXRlZEZsYWcgLS07Ci0KLQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTWFjUHJpdmF0ZUNvbmYgLSBPSUQgaGFuZGxlciBmdW5jdGlvbiBvZiBPSURzIGNvbmNlcm5pbmcgdGhlIGNvbmZpZ3VyYXRpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUdldC9QcmVzZXRzL1NldHMgdGhlIE9JRHMgY29uY2VybmluZyB0aGUgY29uZmlndXJhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgICAgIEEgZ2VuZXJhbCBzZXZlcmUgaW50ZXJuYWwgZXJyb3Igb2NjdXJlZC4KLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gY29udGFpbgotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IGRhdGEgKGUuZy4gYSAzMmJpdCB2YWx1ZSBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgYnV0IGEgMTYgYml0IHZhbHVlIHdhcyBwYXNzZWQpLgotICoJU0tfUE5NSV9FUlJfQkFEX1ZBTFVFICAgIFRoZSBwYXNzZWQgdmFsdWUgaXMgbm90IGluIHRoZSB2YWxpZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHJhbmdlLgotICoJU0tfUE5NSV9FUlJfUkVBRF9PTkxZICAgIFRoZSBPSUQgaXMgcmVhZC1vbmx5IGFuZCBjYW5ub3QgYmUgc2V0LgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUIFRoZSByZXF1ZXN0ZWQgaW5zdGFuY2Ugb2YgdGhlIE9JRCBkb2Vzbid0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KLSAqLwotUE5NSV9TVEFUSUMgaW50IE1hY1ByaXZhdGVDb25mKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLWludCBBY3Rpb24sCQkvKiBHRVQvUFJFU0VUL1NFVCBhY3Rpb24gKi8KLVNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwotY2hhciAqcEJ1ZiwJCS8qIEJ1ZmZlciB1c2VkIGZvciB0aGUgbWFuYWdlbWVudCBkYXRhIHRyYW5zZmVyICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCS8qIE9uIGNhbGw6IHBCdWYgYnVmZmVyIGxlbmd0aC4gT24gcmV0dXJuOiB1c2VkIGJ1ZmZlciAqLwotU0tfVTMyIEluc3RhbmNlLAkvKiBJbnN0YW5jZSAoMS4ubikgdGhhdCBpcyB0byBiZSBxdWVyaWVkIG9yIC0xICovCi11bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgLyogSW5kZXggdG8gdGhlIElkIHRhYmxlICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsd2F5cyB6ZXJvICovCi17Ci0JdW5zaWduZWQgaW50CVBoeXNQb3J0TWF4OwotCXVuc2lnbmVkIGludAlQaHlzUG9ydEluZGV4OwotCXVuc2lnbmVkIGludAlMb2dQb3J0TWF4OwotCXVuc2lnbmVkIGludAlMb2dQb3J0SW5kZXg7Ci0JdW5zaWduZWQgaW50CUxpbWl0OwotCXVuc2lnbmVkIGludAlPZmZzZXQ7Ci0JY2hhcgkJVmFsODsKLQljaGFyIAkJKnBCdWZQdHI7Ci0JaW50CQkJUmV0OwotCVNLX0VWUEFSQQlFdmVudFBhcmFtOwotCVNLX1UzMgkJVmFsMzI7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBpbnN0YW5jZSBpZiB3aXNoZWQuIE1BQyBpbmRleCAwIGlzIHRoZSB2aXJ0dWFsIE1BQy4KLQkgKi8KLQlQaHlzUG9ydE1heCA9IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsKLQlMb2dQb3J0TWF4ID0gU0tfUE5NSV9QT1JUX1BIWVMyTE9HKFBoeXNQb3J0TWF4KTsKLQotCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgeyAvKiBEdWFsIG5ldCBtb2RlICovCi0JCUxvZ1BvcnRNYXgtLTsKLQl9Ci0KLQlpZiAoKEluc3RhbmNlICE9IChTS19VMzIpKC0xKSkpIHsgLyogT25seSBvbmUgc3BlY2lmaWMgaW5zdGFuY2UgaXMgcXVlcmllZCAqLwotCQkvKiBDaGVjayBpbnN0YW5jZSByYW5nZSAqLwotCQlpZiAoKEluc3RhbmNlIDwgMSkgfHwgKEluc3RhbmNlID4gTG9nUG9ydE1heCkpIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QpOwotCQl9Ci0JCUxvZ1BvcnRJbmRleCA9IFNLX1BOTUlfUE9SVF9JTlNUMkxPRyhJbnN0YW5jZSk7Ci0JCUxpbWl0ID0gTG9nUG9ydEluZGV4ICsgMTsKLQl9Ci0KLQllbHNlIHsgLyogSW5zdGFuY2UgPT0gKFNLX1UzMikoLTEpLCBnZXQgYWxsIEluc3RhbmNlcyBvZiB0aGF0IE9JRCAqLwotCi0JCUxvZ1BvcnRJbmRleCA9IDA7Ci0JCUxpbWl0ID0gTG9nUG9ydE1heDsKLQl9Ci0KLQkvKgotCSAqIFBlcmZvcm0gYWN0aW9uCi0JICovCi0JaWYgKEFjdGlvbiA9PSBTS19QTk1JX0dFVCkgewotCi0JCS8qIENoZWNrIGxlbmd0aCAqLwotCQlzd2l0Y2ggKElkKSB7Ci0KLQkJY2FzZSBPSURfU0tHRV9QTUQ6Ci0JCWNhc2UgT0lEX1NLR0VfQ09OTkVDVE9SOgotCQljYXNlIE9JRF9TS0dFX0xJTktfQ0FQOgotCQljYXNlIE9JRF9TS0dFX0xJTktfTU9ERToKLQkJY2FzZSBPSURfU0tHRV9MSU5LX01PREVfU1RBVFVTOgotCQljYXNlIE9JRF9TS0dFX0xJTktfU1RBVFVTOgotCQljYXNlIE9JRF9TS0dFX0ZMT1dDVFJMX0NBUDoKLQkJY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9NT0RFOgotCQljYXNlIE9JRF9TS0dFX0ZMT1dDVFJMX1NUQVRVUzoKLQkJY2FzZSBPSURfU0tHRV9QSFlfT1BFUkFUSU9OX0NBUDoKLQkJY2FzZSBPSURfU0tHRV9QSFlfT1BFUkFUSU9OX01PREU6Ci0JCWNhc2UgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9TVEFUVVM6Ci0JCWNhc2UgT0lEX1NLR0VfU1BFRURfQ0FQOgotCQljYXNlIE9JRF9TS0dFX1NQRUVEX01PREU6Ci0JCWNhc2UgT0lEX1NLR0VfU1BFRURfU1RBVFVTOgotCQkJaWYgKCpwTGVuIDwgKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIHNpemVvZihTS19VOCkpIHsKLQotCQkJCSpwTGVuID0gKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIHNpemVvZihTS19VOCk7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQkJfQotCQkJYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBPSURfU0tHRV9NVFU6Ci0gICAgICAgIGNhc2UgT0lEX1NLR0VfUEhZX1RZUEU6Ci0JCQlpZiAoKnBMZW4gPCAoTGltaXQgLSBMb2dQb3J0SW5kZXgpICogc2l6ZW9mKFNLX1UzMikpIHsKLQotCQkJCSpwTGVuID0gKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIHNpemVvZihTS19VMzIpOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDQxLAotCQkJCVNLX1BOTUlfRVJSMDQxTVNHKTsKLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCX0KLQotCQkvKgotCQkgKiBVcGRhdGUgc3RhdGlzdGljIGFuZCBpbmNyZW1lbnQgc2VtYXBob3JlIHRvIGluZGljYXRlCi0JCSAqIHRoYXQgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGRvbmUuCi0JCSAqLwotCQlpZiAoKFJldCA9IFNpcnFVcGRhdGUocEFDLCBJb0MpKSAhPSBTS19QTk1JX0VSUl9PSykgewotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFJldCk7Ci0JCX0KLQkJcEFDLT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyArKzsKLQotCQkvKgotCQkgKiBHZXQgdmFsdWUKLQkJICovCi0JCU9mZnNldCA9IDA7Ci0JCWZvciAoOyBMb2dQb3J0SW5kZXggPCBMaW1pdDsgTG9nUG9ydEluZGV4ICsrKSB7Ci0KLQkJCXBCdWZQdHIgPSBwQnVmICsgT2Zmc2V0OwotCQkJCi0JCQlzd2l0Y2ggKElkKSB7Ci0KLQkJCWNhc2UgT0lEX1NLR0VfUE1EOgotCQkJCSpwQnVmUHRyID0gcEFDLT5Qbm1pLlBNRDsKLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE9JRF9TS0dFX0NPTk5FQ1RPUjoKLQkJCQkqcEJ1ZlB0ciA9IHBBQy0+UG5taS5Db25uZWN0b3I7Ci0JCQkJT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBPSURfU0tHRV9QSFlfVFlQRToKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnRzICovCi0JCQkJCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKAotCQkJCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQkJCQkJCVZhbDMyID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBoeVR5cGU7Ci0JCQkJCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmUHRyLCBWYWwzMik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7IC8qIER1YWxOZXRNb2RlICovCi0JCQkJCQotCQkJCQlWYWwzMiA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUGh5VHlwZTsKLQkJCQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZlB0ciwgVmFsMzIpOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1UzMik7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgT0lEX1NLR0VfTElOS19DQVA6Ci0JCQkJaWYgKCFwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcpIHsgLyogU2luZ2xlTmV0TW9kZSAqLwotCQkJCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQkJCQkJCS8qIEdldCB2YWx1ZSBmb3IgdmlydHVhbCBwb3J0ICovCi0JCQkJCQlWaXJ0dWFsQ29uZihwQUMsIElvQywgSWQsIHBCdWZQdHIpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciBwaHlzaWNhbCBwb3J0cyAqLwotCQkJCQkJUGh5c1BvcnRJbmRleCA9IFNLX1BOTUlfUE9SVF9MT0cyUEhZUygKLQkJCQkJCQlwQUMsIExvZ1BvcnRJbmRleCk7Ci0KLQkJCQkJCSpwQnVmUHRyID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rQ2FwOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgeyAvKiBEdWFsTmV0TW9kZSAqLwotCQkJCQkKLQkJCQkJKnBCdWZQdHIgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBMaW5rQ2FwOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE9JRF9TS0dFX0xJTktfTU9ERToKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciB2aXJ0dWFsIHBvcnQgKi8KLQkJCQkJCVZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZlB0cik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnRzICovCi0JCQkJCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKAotCQkJCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQotCQkJCQkJKnBCdWZQdHIgPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUExpbmtNb2RlQ29uZjsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsgLyogRHVhbE5ldE1vZGUgKi8KLQkJCQkKLQkJCQkJKnBCdWZQdHIgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBMaW5rTW9kZUNvbmY7Ci0JCQkJfQotCQkJCU9mZnNldCArPSBzaXplb2YoY2hhcik7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgT0lEX1NLR0VfTElOS19NT0RFX1NUQVRVUzoKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciB2aXJ0dWFsIHBvcnQgKi8KLQkJCQkJCVZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZlB0cik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnQgKi8KLQkJCQkJCVBoeXNQb3J0SW5kZXggPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCQkJcEFDLCBMb2dQb3J0SW5kZXgpOwotCi0JCQkJCQkqcEJ1ZlB0ciA9Ci0JCQkJCQkJQ2FsY3VsYXRlTGlua01vZGVTdGF0dXMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgeyAvKiBEdWFsTmV0TW9kZSAqLwotCQkJCQkKLQkJCQkJKnBCdWZQdHIgPSBDYWxjdWxhdGVMaW5rTW9kZVN0YXR1cyhwQUMsIElvQywgTmV0SW5kZXgpOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE9JRF9TS0dFX0xJTktfU1RBVFVTOgotCQkJCWlmICghcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnKSB7IC8qIFNpbmdsZU5ldE1vZGUgKi8KLQkJCQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHZpcnR1YWwgcG9ydCAqLwotCQkJCQkJVmlydHVhbENvbmYocEFDLCBJb0MsIElkLCBwQnVmUHRyKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCS8qIEdldCB2YWx1ZSBmb3IgcGh5c2ljYWwgcG9ydHMgKi8KLQkJCQkJCVBoeXNQb3J0SW5kZXggPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCQkJcEFDLCBMb2dQb3J0SW5kZXgpOwotCQotCQkJCQkJKnBCdWZQdHIgPSBDYWxjdWxhdGVMaW5rU3RhdHVzKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4KTsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsgLyogRHVhbE5ldE1vZGUgKi8KLQotCQkJCQkqcEJ1ZlB0ciA9IENhbGN1bGF0ZUxpbmtTdGF0dXMocEFDLCBJb0MsIE5ldEluZGV4KTsKLQkJCQl9Ci0JCQkJT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9DQVA6Ci0JCQkJaWYgKCFwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcpIHsgLyogU2luZ2xlTmV0TW9kZSAqLwotCQkJCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQkJCQkJCS8qIEdldCB2YWx1ZSBmb3IgdmlydHVhbCBwb3J0ICovCi0JCQkJCQlWaXJ0dWFsQ29uZihwQUMsIElvQywgSWQsIHBCdWZQdHIpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciBwaHlzaWNhbCBwb3J0cyAqLwotCQkJCQkJUGh5c1BvcnRJbmRleCA9IFNLX1BOTUlfUE9SVF9MT0cyUEhZUygKLQkJCQkJCQlwQUMsIExvZ1BvcnRJbmRleCk7Ci0JCi0JCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QRmxvd0N0cmxDYXA7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7IC8qIER1YWxOZXRNb2RlICovCi0JCQkJCi0JCQkJCSpwQnVmUHRyID0gcEFDLT5HSW5pLkdQW05ldEluZGV4XS5QRmxvd0N0cmxDYXA7Ci0JCQkJfQotCQkJCU9mZnNldCArPSBzaXplb2YoY2hhcik7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgT0lEX1NLR0VfRkxPV0NUUkxfTU9ERToKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciB2aXJ0dWFsIHBvcnQgKi8KLQkJCQkJCVZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZlB0cik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnQgKi8KLQkJCQkJCVBoeXNQb3J0SW5kZXggPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCQkJcEFDLCBMb2dQb3J0SW5kZXgpOwotCQotCQkJCQkJKnBCdWZQdHIgPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUEZsb3dDdHJsTW9kZTsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsgLyogRHVhbE5ldE1vZGUgKi8KLQotCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUEZsb3dDdHJsTW9kZTsKLQkJCQl9Ci0JCQkJT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9TVEFUVVM6Ci0JCQkJaWYgKCFwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcpIHsgLyogU2luZ2xlTmV0TW9kZSAqLwotCQkJCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQkJCQkJCS8qIEdldCB2YWx1ZSBmb3IgdmlydHVhbCBwb3J0ICovCi0JCQkJCQlWaXJ0dWFsQ29uZihwQUMsIElvQywgSWQsIHBCdWZQdHIpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciBwaHlzaWNhbCBwb3J0ICovCi0JCQkJCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKAotCQkJCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQkKLQkJCQkJCSpwQnVmUHRyID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBGbG93Q3RybFN0YXR1czsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsgLyogRHVhbE5ldE1vZGUgKi8KLQotCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUEZsb3dDdHJsU3RhdHVzOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE9JRF9TS0dFX1BIWV9PUEVSQVRJT05fQ0FQOgotCQkJCWlmICghcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnKSB7IC8qIFNpbmdsZU5ldE1vZGUgKi8KLQkJCQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHZpcnR1YWwgcG9ydCAqLwotCQkJCQkJVmlydHVhbENvbmYocEFDLCBJb0MsIElkLCBwQnVmUHRyKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCS8qIEdldCB2YWx1ZSBmb3IgcGh5c2ljYWwgcG9ydHMgKi8KLQkJCQkJCVBoeXNQb3J0SW5kZXggPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCQkJcEFDLCBMb2dQb3J0SW5kZXgpOwotCQotCQkJCQkJKnBCdWZQdHIgPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUE1TQ2FwOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgeyAvKiBEdWFsTmV0TW9kZSAqLwotCQkJCQotCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUE1TQ2FwOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE9JRF9TS0dFX1BIWV9PUEVSQVRJT05fTU9ERToKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciB2aXJ0dWFsIHBvcnQgKi8KLQkJCQkJCVZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZlB0cik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnQgKi8KLQkJCQkJCVBoeXNQb3J0SW5kZXggPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCQkJcEFDLCBMb2dQb3J0SW5kZXgpOwotCi0JCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QTVNNb2RlOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgeyAvKiBEdWFsTmV0TW9kZSAqLwotCQkJCQotCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUE1TTW9kZTsKLQkJCQl9Ci0JCQkJT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBPSURfU0tHRV9QSFlfT1BFUkFUSU9OX1NUQVRVUzoKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciB2aXJ0dWFsIHBvcnQgKi8KLQkJCQkJCVZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZlB0cik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnQgKi8KLQkJCQkJCVBoeXNQb3J0SW5kZXggPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCQkJcEFDLCBMb2dQb3J0SW5kZXgpOwotCQotCQkJCQkJKnBCdWZQdHIgPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUE1TU3RhdHVzOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQotCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUE1TU3RhdHVzOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE9JRF9TS0dFX1NQRUVEX0NBUDoKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciB2aXJ0dWFsIHBvcnQgKi8KLQkJCQkJCVZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZlB0cik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnRzICovCi0JCQkJCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKAotCQkJCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQkKLQkJCQkJCSpwQnVmUHRyID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rU3BlZWRDYXA7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7IC8qIER1YWxOZXRNb2RlICovCi0JCQkJCi0JCQkJCSpwQnVmUHRyID0gcEFDLT5HSW5pLkdQW05ldEluZGV4XS5QTGlua1NwZWVkQ2FwOwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIE9JRF9TS0dFX1NQRUVEX01PREU6Ci0JCQkJaWYgKCFwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcpIHsgLyogU2luZ2xlTmV0TW9kZSAqLwotCQkJCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQkJCQkJCS8qIEdldCB2YWx1ZSBmb3IgdmlydHVhbCBwb3J0ICovCi0JCQkJCQlWaXJ0dWFsQ29uZihwQUMsIElvQywgSWQsIHBCdWZQdHIpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJLyogR2V0IHZhbHVlIGZvciBwaHlzaWNhbCBwb3J0ICovCi0JCQkJCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKAotCQkJCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQkKLQkJCQkJCSpwQnVmUHRyID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rU3BlZWQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7IC8qIER1YWxOZXRNb2RlICovCi0KLQkJCQkJKnBCdWZQdHIgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBMaW5rU3BlZWQ7Ci0JCQkJfQotCQkJCU9mZnNldCArPSBzaXplb2YoY2hhcik7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgT0lEX1NLR0VfU1BFRURfU1RBVFVTOgotCQkJCWlmICghcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnKSB7IC8qIFNpbmdsZU5ldE1vZGUgKi8KLQkJCQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHZpcnR1YWwgcG9ydCAqLwotCQkJCQkJVmlydHVhbENvbmYocEFDLCBJb0MsIElkLCBwQnVmUHRyKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCS8qIEdldCB2YWx1ZSBmb3IgcGh5c2ljYWwgcG9ydCAqLwotCQkJCQkJUGh5c1BvcnRJbmRleCA9IFNLX1BOTUlfUE9SVF9MT0cyUEhZUygKLQkJCQkJCQlwQUMsIExvZ1BvcnRJbmRleCk7Ci0JCi0JCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QTGlua1NwZWVkVXNlZDsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsgLyogRHVhbE5ldE1vZGUgKi8KLQotCQkJCQkqcEJ1ZlB0ciA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUExpbmtTcGVlZFVzZWQ7Ci0JCQkJfQotCQkJCU9mZnNldCArPSBzaXplb2YoY2hhcik7Ci0JCQkJYnJlYWs7Ci0JCQkKLQkJCWNhc2UgT0lEX1NLR0VfTVRVOgotCQkJCVZhbDMyID0gU0tfRFJJVkVSX0dFVF9NVFUocEFDLCBJb0MsIE5ldEluZGV4KTsKLQkJCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmUHRyLCBWYWwzMik7Ci0JCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VMzIpOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0VSUiwKLQkJCQkJKCJNYWNQcml2YXRlQ29uZjogVW5rbm93biBPSUQgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIikpOwotCi0JCQkJcEFDLT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyAtLTsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJfQotCQl9Ci0JCSpwTGVuID0gT2Zmc2V0OwotCQlwQUMtPlBubWkuU2lycVVwZGF0ZWRGbGFnIC0tOwotCi0JCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCX0KLQotCS8qCi0JICogRnJvbSBoZXJlIFNFVCBvciBQUkVTRVQgYWN0aW9uLiBDaGVjayBpZiB0aGUgcGFzc2VkCi0JICogYnVmZmVyIGxlbmd0aCBpcyBwbGF1c2libGUuCi0JICovCi0Jc3dpdGNoIChJZCkgewotCi0JY2FzZSBPSURfU0tHRV9MSU5LX01PREU6Ci0JY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9NT0RFOgotCWNhc2UgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9NT0RFOgotCWNhc2UgT0lEX1NLR0VfU1BFRURfTU9ERToKLQkJaWYgKCpwTGVuIDwgTGltaXQgLSBMb2dQb3J0SW5kZXgpIHsKLQotCQkJKnBMZW4gPSBMaW1pdCAtIExvZ1BvcnRJbmRleDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQlpZiAoKnBMZW4gIT0gTGltaXQgLSBMb2dQb3J0SW5kZXgpIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9CQURfVkFMVUUpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBPSURfU0tHRV9NVFU6Ci0JCWlmICgqcExlbiA8IHNpemVvZihTS19VMzIpKSB7Ci0KLQkJCSpwTGVuID0gc2l6ZW9mKFNLX1UzMik7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJaWYgKCpwTGVuICE9IHNpemVvZihTS19VMzIpKSB7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJfQotCQlicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0JCSpwTGVuID0gMDsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9SRUFEX09OTFkpOwotCX0KLQotCS8qCi0JICogUGVyZm9ybSBwcmVzZXQgb3Igc2V0Ci0JICovCi0JT2Zmc2V0ID0gMDsKLQlmb3IgKDsgTG9nUG9ydEluZGV4IDwgTGltaXQ7IExvZ1BvcnRJbmRleCArKykgewotCi0JCXN3aXRjaCAoSWQpIHsKLQotCQljYXNlIE9JRF9TS0dFX0xJTktfTU9ERToKLQkJCS8qIENoZWNrIHRoZSB2YWx1ZSByYW5nZSAqLwotCQkJVmFsOCA9ICoocEJ1ZiArIE9mZnNldCk7Ci0JCQlpZiAoVmFsOCA9PSAwKSB7Ci0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKFZhbDggPCBTS19MTU9ERV9IQUxGIHx8Ci0JCQkJKExvZ1BvcnRJbmRleCAhPSAwICYmIFZhbDggPiBTS19MTU9ERV9BVVRPU0VOU0UpIHx8Ci0JCQkJKExvZ1BvcnRJbmRleCA9PSAwICYmIFZhbDggPiBTS19MTU9ERV9JTkRFVEVSTUlOQVRFRCkpIHsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCQl9Ci0KLQkJCS8qIFRoZSBwcmVzZXQgZW5kcyBoZXJlICovCi0JCQlpZiAoQWN0aW9uID09IFNLX1BOTUlfUFJFU0VUKSB7Ci0KLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLQkJCX0KLQotCQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7Ci0KLQkJCQkvKgotCQkJCSAqIFRoZSB2aXJ0dWFsIHBvcnQgY29uc2lzdHMgb2YgYWxsIGN1cnJlbnRseQotCQkJCSAqIGFjdGl2ZSBwb3J0cy4gRmluZCB0aGVtIGFuZCBzZW5kIGFuIGV2ZW50Ci0JCQkJICogd2l0aCB0aGUgbmV3IGxpbmsgbW9kZSB0byBTSVJRLgotCQkJCSAqLwotCQkJCWZvciAoUGh5c1BvcnRJbmRleCA9IDA7Ci0JCQkJCVBoeXNQb3J0SW5kZXggPCBQaHlzUG9ydE1heDsKLQkJCQkJUGh5c1BvcnRJbmRleCArKykgewotCi0JCQkJCWlmICghcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uCi0JCQkJCQlBY3RpdmVGbGFnKSB7Ci0KLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0KLQkJCQkJRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSBQaHlzUG9ydEluZGV4OwotCQkJCQlFdmVudFBhcmFtLlBhcmEzMlsxXSA9IChTS19VMzIpVmFsODsKLQkJCQkJaWYgKFNrR2VTaXJxRXZlbnQocEFDLCBJb0MsCi0JCQkJCQlTS19IV0VWX1NFVF9MTU9ERSwKLQkJCQkJCUV2ZW50UGFyYW0pID4gMCkgewotCi0JCQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csCi0JCQkJCQkJU0tfUE5NSV9FUlIwNDMsCi0JCQkJCQkJU0tfUE5NSV9FUlIwNDNNU0cpOwotCi0JCQkJCQkqcExlbiA9IDA7Ci0JCQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBTZW5kIGFuIGV2ZW50IHdpdGggdGhlIG5ldyBsaW5rIG1vZGUgdG8KLQkJCQkgKiB0aGUgU0lSUSBtb2R1bGUuCi0JCQkJICovCi0JCQkJRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQkJCQlFdmVudFBhcmFtLlBhcmEzMlsxXSA9IChTS19VMzIpVmFsODsKLQkJCQlpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywgU0tfSFdFVl9TRVRfTE1PREUsCi0JCQkJCUV2ZW50UGFyYW0pID4gMCkgewotCi0JCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywKLQkJCQkJCVNLX1BOTUlfRVJSMDQzLAotCQkJCQkJU0tfUE5NSV9FUlIwNDNNU0cpOwotCi0JCQkJCSpwTGVuID0gMDsKLQkJCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJCQl9Ci0JCQl9Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9NT0RFOgotCQkJLyogQ2hlY2sgdGhlIHZhbHVlIHJhbmdlICovCi0JCQlWYWw4ID0gKihwQnVmICsgT2Zmc2V0KTsKLQkJCWlmIChWYWw4ID09IDApIHsKLQotCQkJCU9mZnNldCArPSBzaXplb2YoY2hhcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoVmFsOCA8IFNLX0ZMT1dfTU9ERV9OT05FIHx8Ci0JCQkJKExvZ1BvcnRJbmRleCAhPSAwICYmIFZhbDggPiBTS19GTE9XX01PREVfU1lNX09SX1JFTSkgfHwKLQkJCQkoTG9nUG9ydEluZGV4ID09IDAgJiYgVmFsOCA+IFNLX0ZMT1dfTU9ERV9JTkRFVEVSTUlOQVRFRCkpIHsKLQotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCQl9Ci0KLQkJCS8qIFRoZSBwcmVzZXQgZW5kcyBoZXJlICovCi0JCQlpZiAoQWN0aW9uID09IFNLX1BOTUlfUFJFU0VUKSB7Ci0KLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLQkJCX0KLQotCQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7Ci0KLQkJCQkvKgotCQkJCSAqIFRoZSB2aXJ0dWFsIHBvcnQgY29uc2lzdHMgb2YgYWxsIGN1cnJlbnRseQotCQkJCSAqIGFjdGl2ZSBwb3J0cy4gRmluZCB0aGVtIGFuZCBzZW5kIGFuIGV2ZW50Ci0JCQkJICogd2l0aCB0aGUgbmV3IGZsb3cgY29udHJvbCBtb2RlIHRvIFNJUlEuCi0JCQkJICovCi0JCQkJZm9yIChQaHlzUG9ydEluZGV4ID0gMDsKLQkJCQkJUGh5c1BvcnRJbmRleCA8IFBoeXNQb3J0TWF4OwotCQkJCQlQaHlzUG9ydEluZGV4ICsrKSB7Ci0KLQkJCQkJaWYgKCFwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS4KLQkJCQkJCUFjdGl2ZUZsYWcpIHsKLQotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQotCQkJCQlFdmVudFBhcmFtLlBhcmEzMlswXSA9IFBoeXNQb3J0SW5kZXg7Ci0JCQkJCUV2ZW50UGFyYW0uUGFyYTMyWzFdID0gKFNLX1UzMilWYWw4OwotCQkJCQlpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywKLQkJCQkJCVNLX0hXRVZfU0VUX0ZMT1dNT0RFLAotCQkJCQkJRXZlbnRQYXJhbSkgPiAwKSB7Ci0KLQkJCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywKLQkJCQkJCQlTS19QTk1JX0VSUjA0NCwKLQkJCQkJCQlTS19QTk1JX0VSUjA0NE1TRyk7Ci0KLQkJCQkJCSpwTGVuID0gMDsKLQkJCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvKgotCQkJCSAqIFNlbmQgYW4gZXZlbnQgd2l0aCB0aGUgbmV3IGZsb3cgY29udHJvbAotCQkJCSAqIG1vZGUgdG8gdGhlIFNJUlEgbW9kdWxlLgotCQkJCSAqLwotCQkJCUV2ZW50UGFyYW0uUGFyYTMyWzBdID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKAotCQkJCQlwQUMsIExvZ1BvcnRJbmRleCk7Ci0JCQkJRXZlbnRQYXJhbS5QYXJhMzJbMV0gPSAoU0tfVTMyKVZhbDg7Ci0JCQkJaWYgKFNrR2VTaXJxRXZlbnQocEFDLCBJb0MsCi0JCQkJCVNLX0hXRVZfU0VUX0ZMT1dNT0RFLCBFdmVudFBhcmFtKQotCQkJCQk+IDApIHsKLQotCQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csCi0JCQkJCQlTS19QTk1JX0VSUjA0NCwKLQkJCQkJCVNLX1BOTUlfRVJSMDQ0TVNHKTsKLQotCQkJCQkqcExlbiA9IDA7Ci0JCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQkJfQotCQkJfQotCQkJT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9NT0RFIDoKLQkJCS8qIENoZWNrIHRoZSB2YWx1ZSByYW5nZSAqLwotCQkJVmFsOCA9ICoocEJ1ZiArIE9mZnNldCk7Ci0JCQlpZiAoVmFsOCA9PSAwKSB7Ci0JCQkJLyogbW9kZSBvZiB0aGlzIHBvcnQgcmVtYWlucyB1bmNoYW5nZWQgKi8KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKFZhbDggPCBTS19NU19NT0RFX0FVVE8gfHwKLQkJCQkoTG9nUG9ydEluZGV4ICE9IDAgJiYgVmFsOCA+IFNLX01TX01PREVfU0xBVkUpIHx8Ci0JCQkJKExvZ1BvcnRJbmRleCA9PSAwICYmIFZhbDggPiBTS19NU19NT0RFX0lOREVURVJNSU5BVEVEKSkgewotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJCX0KLQotCQkJLyogVGhlIHByZXNldCBlbmRzIGhlcmUgKi8KLQkJCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9QUkVTRVQpIHsKLQotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCQkJfQotCi0JCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQotCQkJCS8qCi0JCQkJICogVGhlIHZpcnR1YWwgcG9ydCBjb25zaXN0cyBvZiBhbGwgY3VycmVudGx5Ci0JCQkJICogYWN0aXZlIHBvcnRzLiBGaW5kIHRoZW0gYW5kIHNlbmQgYW4gZXZlbnQKLQkJCQkgKiB3aXRoIG5ldyBtYXN0ZXIvc2xhdmUgKHJvbGUpIG1vZGUgdG8gU0lSUS4KLQkJCQkgKi8KLQkJCQlmb3IgKFBoeXNQb3J0SW5kZXggPSAwOwotCQkJCQlQaHlzUG9ydEluZGV4IDwgUGh5c1BvcnRNYXg7Ci0JCQkJCVBoeXNQb3J0SW5kZXggKyspIHsKLQotCQkJCQlpZiAoIXBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgotCQkJCQkJQWN0aXZlRmxhZykgewotCi0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCi0JCQkJCUV2ZW50UGFyYW0uUGFyYTMyWzBdID0gUGh5c1BvcnRJbmRleDsKLQkJCQkJRXZlbnRQYXJhbS5QYXJhMzJbMV0gPSAoU0tfVTMyKVZhbDg7Ci0JCQkJCWlmIChTa0dlU2lycUV2ZW50KHBBQywgSW9DLAotCQkJCQkJU0tfSFdFVl9TRVRfUk9MRSwKLQkJCQkJCUV2ZW50UGFyYW0pID4gMCkgewotCi0JCQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csCi0JCQkJCQkJU0tfUE5NSV9FUlIwNDIsCi0JCQkJCQkJU0tfUE5NSV9FUlIwNDJNU0cpOwotCi0JCQkJCQkqcExlbiA9IDA7Ci0JCQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBTZW5kIGFuIGV2ZW50IHdpdGggdGhlIG5ldyBtYXN0ZXIvc2xhdmUKLQkJCQkgKiAocm9sZSkgbW9kZSB0byB0aGUgU0lSUSBtb2R1bGUuCi0JCQkJICovCi0JCQkJRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSBTS19QTk1JX1BPUlRfTE9HMlBIWVMoCi0JCQkJCXBBQywgTG9nUG9ydEluZGV4KTsKLQkJCQlFdmVudFBhcmFtLlBhcmEzMlsxXSA9IChTS19VMzIpVmFsODsKLQkJCQlpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywKLQkJCQkJU0tfSFdFVl9TRVRfUk9MRSwgRXZlbnRQYXJhbSkgPiAwKSB7Ci0KLQkJCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLAotCQkJCQkJU0tfUE5NSV9FUlIwNDIsCi0JCQkJCQlTS19QTk1JX0VSUjA0Mk1TRyk7Ci0KLQkJCQkJKnBMZW4gPSAwOwotCQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJCX0KLQkJCX0KLQotCQkJT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfU1BFRURfTU9ERToKLQkJCS8qIENoZWNrIHRoZSB2YWx1ZSByYW5nZSAqLwotCQkJVmFsOCA9ICoocEJ1ZiArIE9mZnNldCk7Ci0JCQlpZiAoVmFsOCA9PSAwKSB7Ci0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKFZhbDggPCAoU0tfTFNQRUVEX0FVVE8pIHx8Ci0JCQkJKExvZ1BvcnRJbmRleCAhPSAwICYmIFZhbDggPiAoU0tfTFNQRUVEXzEwMDBNQlBTKSkgfHwKLQkJCQkoTG9nUG9ydEluZGV4ID09IDAgJiYgVmFsOCA+IChTS19MU1BFRURfSU5ERVRFUk1JTkFURUQpKSkgewotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJCX0KLQotCQkJLyogVGhlIHByZXNldCBlbmRzIGhlcmUgKi8KLQkJCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9QUkVTRVQpIHsKLQotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCQkJfQotCi0JCQlpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKLQotCQkJCS8qCi0JCQkJICogVGhlIHZpcnR1YWwgcG9ydCBjb25zaXN0cyBvZiBhbGwgY3VycmVudGx5Ci0JCQkJICogYWN0aXZlIHBvcnRzLiBGaW5kIHRoZW0gYW5kIHNlbmQgYW4gZXZlbnQKLQkJCQkgKiB3aXRoIHRoZSBuZXcgZmxvdyBjb250cm9sIG1vZGUgdG8gU0lSUS4KLQkJCQkgKi8KLQkJCQlmb3IgKFBoeXNQb3J0SW5kZXggPSAwOwotCQkJCQlQaHlzUG9ydEluZGV4IDwgUGh5c1BvcnRNYXg7Ci0JCQkJCVBoeXNQb3J0SW5kZXggKyspIHsKLQotCQkJCQlpZiAoIXBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkFjdGl2ZUZsYWcpIHsKLQotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQotCQkJCQlFdmVudFBhcmFtLlBhcmEzMlswXSA9IFBoeXNQb3J0SW5kZXg7Ci0JCQkJCUV2ZW50UGFyYW0uUGFyYTMyWzFdID0gKFNLX1UzMilWYWw4OwotCQkJCQlpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywKLQkJCQkJCVNLX0hXRVZfU0VUX1NQRUVELAotCQkJCQkJRXZlbnRQYXJhbSkgPiAwKSB7Ci0KLQkJCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywKLQkJCQkJCQlTS19QTk1JX0VSUjA0NSwKLQkJCQkJCQlTS19QTk1JX0VSUjA0NU1TRyk7Ci0KLQkJCQkJCSpwTGVuID0gMDsKLQkJCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvKgotCQkJCSAqIFNlbmQgYW4gZXZlbnQgd2l0aCB0aGUgbmV3IGZsb3cgY29udHJvbAotCQkJCSAqIG1vZGUgdG8gdGhlIFNJUlEgbW9kdWxlLgotCQkJCSAqLwotCQkJCUV2ZW50UGFyYW0uUGFyYTMyWzBdID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKAotCQkJCQlwQUMsIExvZ1BvcnRJbmRleCk7Ci0JCQkJRXZlbnRQYXJhbS5QYXJhMzJbMV0gPSAoU0tfVTMyKVZhbDg7Ci0JCQkJaWYgKFNrR2VTaXJxRXZlbnQocEFDLCBJb0MsCi0JCQkJCVNLX0hXRVZfU0VUX1NQRUVELAotCQkJCQlFdmVudFBhcmFtKSA+IDApIHsKLQotCQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csCi0JCQkJCQlTS19QTk1JX0VSUjA0NSwKLQkJCQkJCVNLX1BOTUlfRVJSMDQ1TVNHKTsKLQotCQkJCQkqcExlbiA9IDA7Ci0JCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQkJfQotCQkJfQotCQkJT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfTVRVIDoKLQkJCS8qIENoZWNrIHRoZSB2YWx1ZSByYW5nZSAqLwotCQkJVmFsMzIgPSAqKFNLX1UzMiopKHBCdWYgKyBPZmZzZXQpOwotCQkJaWYgKFZhbDMyID09IDApIHsKLQkJCQkvKiBtdHUgb2YgdGhpcyBwb3J0IHJlbWFpbnMgdW5jaGFuZ2VkICovCi0JCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VMzIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKFNLX0RSSVZFUl9QUkVTRVRfTVRVKHBBQywgSW9DLCBOZXRJbmRleCwgVmFsMzIpICE9IDApIHsKLQkJCQkqcExlbiA9IDA7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9CQURfVkFMVUUpOwotCQkJfQotCi0JCQkvKiBUaGUgcHJlc2V0IGVuZHMgaGVyZSAqLwotCQkJaWYgKEFjdGlvbiA9PSBTS19QTk1JX1BSRVNFVCkgewotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCQkJfQotCi0JCQlpZiAoU0tfRFJJVkVSX1NFVF9NVFUocEFDLCBJb0MsIE5ldEluZGV4LCBWYWwzMikgIT0gMCkgewotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQl9Ci0KLQkJCU9mZnNldCArPSBzaXplb2YoU0tfVTMyKTsKLQkJCWJyZWFrOwotCQkKLQkJZGVmYXVsdDoKLSAgICAgICAgICAgIFNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0VSUiwKLSAgICAgICAgICAgICAgICAoIk1hY1ByaXZhdGVDb25mOiBVbmtub3duIE9JRCBzaG91bGQgYmUgaGFuZGxlZCBiZWZvcmUgc2V0IikpOwotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQl9Ci0JfQotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE1vbml0b3IgLSBPSUQgaGFuZGxlciBmdW5jdGlvbiBmb3IgUkxNVF9NT05JVE9SX1hYWAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJQmVjYXVzZSBSTE1UIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBtb25pdG9yaW5nIG9mCi0gKglyZW1vdGUgYWRhcHRlciBjYXJkcywgd2UgcmV0dXJuIGFsd2F5cyBhbiBlbXB0eSB0YWJsZS4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sgICAgICAgICAgIFRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgICAgIEEgZ2VuZXJhbCBzZXZlcmUgaW50ZXJuYWwgZXJyb3Igb2NjdXJlZC4KLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gY29udGFpbgotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IGRhdGEgKGUuZy4gYSAzMmJpdCB2YWx1ZSBpcwotICoJICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgYnV0IGEgMTYgYml0IHZhbHVlIHdhcyBwYXNzZWQpLgotICoJU0tfUE5NSV9FUlJfQkFEX1ZBTFVFICAgIFRoZSBwYXNzZWQgdmFsdWUgaXMgbm90IGluIHRoZSB2YWxpZAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHJhbmdlLgotICoJU0tfUE5NSV9FUlJfUkVBRF9PTkxZICAgIFRoZSBPSUQgaXMgcmVhZC1vbmx5IGFuZCBjYW5ub3QgYmUgc2V0LgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUIFRoZSByZXF1ZXN0ZWQgaW5zdGFuY2Ugb2YgdGhlIE9JRCBkb2Vzbid0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KLSAqLwotUE5NSV9TVEFUSUMgaW50IE1vbml0b3IoCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotaW50IEFjdGlvbiwJCS8qIEdFVC9QUkVTRVQvU0VUIGFjdGlvbiAqLwotU0tfVTMyIElkLAkJLyogT2JqZWN0IElEIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkICovCi1jaGFyICpwQnVmLAkJLyogQnVmZmVyIHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IGRhdGEgdHJhbnNmZXIgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogT24gY2FsbDogcEJ1ZiBidWZmZXIgbGVuZ3RoLiBPbiByZXR1cm46IHVzZWQgYnVmZmVyICovCi1TS19VMzIgSW5zdGFuY2UsCS8qIEluc3RhbmNlICgxLi5uKSB0aGF0IGlzIHRvIGJlIHF1ZXJpZWQgb3IgLTEgKi8KLXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCAvKiBJbmRleCB0byB0aGUgSWQgdGFibGUgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQl1bnNpZ25lZCBpbnQJSW5kZXg7Ci0JdW5zaWduZWQgaW50CUxpbWl0OwotCXVuc2lnbmVkIGludAlPZmZzZXQ7Ci0JdW5zaWduZWQgaW50CUVudHJpZXM7Ci0KLQkKLQkvKgotCSAqIENhbGN1bGF0ZSBpbnN0YW5jZSBpZiB3aXNoZWQuCi0JICovCi0JLyogWFhYIE5vdCB5ZXQgaW1wbGVtZW50ZWQuIFJldHVybiBhbHdheXMgYW4gZW1wdHkgdGFibGUuICovCi0JRW50cmllcyA9IDA7Ci0KLQlpZiAoKEluc3RhbmNlICE9IChTS19VMzIpKC0xKSkpIHsKLQotCQlpZiAoKEluc3RhbmNlIDwgMSkgfHwgKEluc3RhbmNlID4gRW50cmllcykpIHsKLQotCQkJKnBMZW4gPSAwOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QpOwotCQl9Ci0KLQkJSW5kZXggPSAodW5zaWduZWQgaW50KUluc3RhbmNlIC0gMTsKLQkJTGltaXQgPSAodW5zaWduZWQgaW50KUluc3RhbmNlOwotCX0KLQllbHNlIHsKLQkJSW5kZXggPSAwOwotCQlMaW1pdCA9IEVudHJpZXM7Ci0JfQotCi0JLyoKLQkgKiBHZXQvU2V0IHZhbHVlCi0JKi8KLQlpZiAoQWN0aW9uID09IFNLX1BOTUlfR0VUKSB7Ci0KLQkJZm9yIChPZmZzZXQ9MDsgSW5kZXggPCBMaW1pdDsgSW5kZXggKyspIHsKLQotCQkJc3dpdGNoIChJZCkgewotCi0JCQljYXNlIE9JRF9TS0dFX1JMTVRfTU9OSVRPUl9JTkRFWDoKLQkJCWNhc2UgT0lEX1NLR0VfUkxNVF9NT05JVE9SX0FERFI6Ci0JCQljYXNlIE9JRF9TS0dFX1JMTVRfTU9OSVRPUl9FUlJTOgotCQkJY2FzZSBPSURfU0tHRV9STE1UX01PTklUT1JfVElNRVNUQU1QOgotCQkJY2FzZSBPSURfU0tHRV9STE1UX01PTklUT1JfQURNSU46Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjA0NiwKLQkJCQkJU0tfUE5NSV9FUlIwNDZNU0cpOwotCi0JCQkJKnBMZW4gPSAwOwotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCQl9Ci0JCX0KLQkJKnBMZW4gPSBPZmZzZXQ7Ci0JfQotCWVsc2UgewotCQkvKiBPbmx5IE1PTklUT1JfQURNSU4gY2FuIGJlIHNldCAqLwotCQlpZiAoSWQgIT0gT0lEX1NLR0VfUkxNVF9NT05JVE9SX0FETUlOKSB7Ci0KLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfUkVBRF9PTkxZKTsKLQkJfQotCi0JCS8qIENoZWNrIGlmIHRoZSBsZW5ndGggaXMgcGxhdXNpYmxlICovCi0JCWlmICgqcExlbiA8IChMaW1pdCAtIEluZGV4KSkgewotCi0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJLyogT2theSwgd2UgaGF2ZSBhIHdpZGUgdmFsdWUgcmFuZ2UgKi8KLQkJaWYgKCpwTGVuICE9IChMaW1pdCAtIEluZGV4KSkgewotCi0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JCX0KLS8qCi0JCWZvciAoT2Zmc2V0PTA7IEluZGV4IDwgTGltaXQ7IEluZGV4ICsrKSB7Ci0JCX0KLSovCi0vKgotICogWFhYIE5vdCB5ZXQgaW1wbGVtZW50ZWQuIFJldHVybiBhbHdheXMgQkFEX1ZBTFVFLCBiZWNhdXNlIHRoZSB0YWJsZQotICogaXMgZW1wdHkuCi0gKi8KLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0JBRF9WQUxVRSk7Ci0JfQotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFZpcnR1YWxDb25mIC0gQ2FsY3VsYXRlcyB0aGUgdmFsdWVzIG9mIGNvbmZpZ3VyYXRpb24gT0lEcyBmb3IgdmlydHVhbCBwb3J0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKglXZSBoYW5kbGUgaGVyZSB0aGUgZ2V0IG9mIHRoZSBjb25maWd1cmF0aW9uIGdyb3VwIE9JRHMsIHdoaWNoIGFyZQotICoJYSBsaXR0bGUgYml0IGNvbXBsaWNhdGVkLiBUaGUgdmlydHVhbCBwb3J0IGNvbnNpc3RzIG9mIGFsbCBjdXJyZW50bHkKLSAqCWFjdGl2ZSBwaHlzaWNhbCBwb3J0cy4gSWYgbXVsdGlwbGUgcG9ydHMgYXJlIGFjdGl2ZSBhbmQgY29uZmlndXJlZAotICoJZGlmZmVyZW50bHkgd2UgZ2V0IGluIHNvbWUgdHJvdWJsZSB0byByZXR1cm4gYSBzaW5nbGUgdmFsdWUuIFNvIHdlCi0gKglnZXQgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhY3RpdmUgcG9ydCBhbmQgY29tcGFyZSBpdCB3aXRoIHRoYXQgb2YKLSAqCXRoZSBvdGhlciBhY3RpdmUgcG9ydHMuIElmIHRoZXkgYXJlIG5vdCB0aGUgc2FtZSwgd2UgcmV0dXJuIGEgdmFsdWUKLSAqCXRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGVkLgotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVBOTUlfU1RBVElDIHZvaWQgVmlydHVhbENvbmYoCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotU0tfVTMyIElkLAkJLyogT2JqZWN0IElEIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkICovCi1jaGFyICpwQnVmKQkJLyogQnVmZmVyIHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IGRhdGEgdHJhbnNmZXIgKi8KLXsKLQl1bnNpZ25lZCBpbnQJUGh5c1BvcnRNYXg7Ci0JdW5zaWduZWQgaW50CVBoeXNQb3J0SW5kZXg7Ci0JU0tfVTgJCVZhbDg7Ci0JU0tfVTMyCQlWYWwzMjsKLQlTS19CT09MCQlQb3J0QWN0aXZlRmxhZzsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0KLQkqcEJ1ZiA9IDA7Ci0JUG9ydEFjdGl2ZUZsYWcgPSBTS19GQUxTRTsKLQlQaHlzUG9ydE1heCA9IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsKLQkKLQlmb3IgKFBoeXNQb3J0SW5kZXggPSAwOyBQaHlzUG9ydEluZGV4IDwgUGh5c1BvcnRNYXg7Ci0JCVBoeXNQb3J0SW5kZXggKyspIHsKLQotCQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XTsKLQotCQkvKiBDaGVjayBpZiB0aGUgcGh5c2ljYWwgcG9ydCBpcyBhY3RpdmUgKi8KLQkJaWYgKCFwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5BY3RpdmVGbGFnKSB7Ci0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJUG9ydEFjdGl2ZUZsYWcgPSBTS19UUlVFOwotCi0JCXN3aXRjaCAoSWQpIHsKLQotCQljYXNlIE9JRF9TS0dFX1BIWV9UWVBFOgotCQkJLyogQ2hlY2sgaWYgaXQgaXMgdGhlIGZpcnN0IGFjdGl2ZSBwb3J0ICovCi0JCQlpZiAoKnBCdWYgPT0gMCkgewotCQkJCVZhbDMyID0gcFBydC0+UGh5VHlwZTsKLQkJCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmLCBWYWwzMik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJY2FzZSBPSURfU0tHRV9MSU5LX0NBUDoKLQotCQkJLyoKLQkJCSAqIERpZmZlcmVudCBjYXBhYmlsaXRpZXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dAotCQkJICogaW4gdGhlIGNhc2Ugb2YgdGhlIGNhc2VzIE9SIHRoZW0gYWxsIHRvZ2V0aGVyLgotCQkJICogRnJvbSBhIGN1cmlvdXMgcG9pbnQgb2YgdmlldyB0aGUgdmlydHVhbCBwb3J0Ci0JCQkgKiBpcyBjYXBhYmxlIG9mIGFsbCBmb3VuZCBjYXBhYmlsaXRpZXMuCi0JCQkgKi8KLQkJCSpwQnVmIHw9IHBQcnQtPlBMaW5rQ2FwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9MSU5LX01PREU6Ci0JCQkvKiBDaGVjayBpZiBpdCBpcyB0aGUgZmlyc3QgYWN0aXZlIHBvcnQgKi8KLQkJCWlmICgqcEJ1ZiA9PSAwKSB7Ci0KLQkJCQkqcEJ1ZiA9IHBQcnQtPlBMaW5rTW9kZUNvbmY7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBmaW5kIGFuIGFjdGl2ZSBwb3J0IHdpdGggYSBkaWZmZXJlbnQgbGluawotCQkJICogbW9kZSB0aGFuIHRoZSBmaXJzdCBvbmUgd2UgcmV0dXJuIGEgdmFsdWUgdGhhdAotCQkJICogaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgbW9kZSBpcyBpbmRldGVybWluYXRlZC4KLQkJCSAqLwotCQkJaWYgKCpwQnVmICE9IHBQcnQtPlBMaW5rTW9kZUNvbmYpIHsKLQotCQkJCSpwQnVmID0gU0tfTE1PREVfSU5ERVRFUk1JTkFURUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX0xJTktfTU9ERV9TVEFUVVM6Ci0JCQkvKiBHZXQgdGhlIGxpbmsgbW9kZSBvZiB0aGUgcGh5c2ljYWwgcG9ydCAqLwotCQkJVmFsOCA9IENhbGN1bGF0ZUxpbmtNb2RlU3RhdHVzKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4KTsKLQotCQkJLyogQ2hlY2sgaWYgaXQgaXMgdGhlIGZpcnN0IGFjdGl2ZSBwb3J0ICovCi0JCQlpZiAoKnBCdWYgPT0gMCkgewotCi0JCQkJKnBCdWYgPSBWYWw4OwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKgotCQkJICogSWYgd2UgZmluZCBhbiBhY3RpdmUgcG9ydCB3aXRoIGEgZGlmZmVyZW50IGxpbmsKLQkJCSAqIG1vZGUgc3RhdHVzIHRoYW4gdGhlIGZpcnN0IG9uZSB3ZSByZXR1cm4gYSB2YWx1ZQotCQkJICogdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgbGluayBtb2RlIHN0YXR1cyBpcwotCQkJICogaW5kZXRlcm1pbmF0ZWQuCi0JCQkgKi8KLQkJCWlmICgqcEJ1ZiAhPSBWYWw4KSB7Ci0KLQkJCQkqcEJ1ZiA9IFNLX0xNT0RFX1NUQVRfSU5ERVRFUk1JTkFURUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX0xJTktfU1RBVFVTOgotCQkJLyogR2V0IHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgcGh5c2ljYWwgcG9ydCAqLwotCQkJVmFsOCA9IENhbGN1bGF0ZUxpbmtTdGF0dXMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgpOwotCi0JCQkvKiBDaGVjayBpZiBpdCBpcyB0aGUgZmlyc3QgYWN0aXZlIHBvcnQgKi8KLQkJCWlmICgqcEJ1ZiA9PSAwKSB7Ci0KLQkJCQkqcEJ1ZiA9IFZhbDg7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBmaW5kIGFuIGFjdGl2ZSBwb3J0IHdpdGggYSBkaWZmZXJlbnQgbGluawotCQkJICogc3RhdHVzIHRoYW4gdGhlIGZpcnN0IG9uZSwgd2UgcmV0dXJuIGEgdmFsdWUKLQkJCSAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgc3RhdHVzIGlzCi0JCQkgKiBpbmRldGVybWluYXRlZC4KLQkJCSAqLwotCQkJaWYgKCpwQnVmICE9IFZhbDgpIHsKLQotCQkJCSpwQnVmID0gU0tfUE5NSV9STE1UX0xTVEFUX0lOREVURVJNSU5BVEVEOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9DQVA6Ci0JCQkvKiBDaGVjayBpZiBpdCBpcyB0aGUgZmlyc3QgYWN0aXZlIHBvcnQgKi8KLQkJCWlmICgqcEJ1ZiA9PSAwKSB7Ci0KLQkJCQkqcEJ1ZiA9IHBQcnQtPlBGbG93Q3RybENhcDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIEZyb20gYSBjdXJpb3VzIHBvaW50IG9mIHZpZXcgdGhlIHZpcnR1YWwgcG9ydAotCQkJICogaXMgY2FwYWJsZSBvZiBhbGwgZm91bmQgY2FwYWJpbGl0aWVzLgotCQkJICovCi0JCQkqcEJ1ZiB8PSBwUHJ0LT5QRmxvd0N0cmxDYXA7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX0ZMT1dDVFJMX01PREU6Ci0JCQkvKiBDaGVjayBpZiBpdCBpcyB0aGUgZmlyc3QgYWN0aXZlIHBvcnQgKi8KLQkJCWlmICgqcEJ1ZiA9PSAwKSB7Ci0KLQkJCQkqcEJ1ZiA9IHBQcnQtPlBGbG93Q3RybE1vZGU7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBmaW5kIGFuIGFjdGl2ZSBwb3J0IHdpdGggYSBkaWZmZXJlbnQgZmxvdwotCQkJICogY29udHJvbCBtb2RlIHRoYW4gdGhlIGZpcnN0IG9uZSwgd2UgcmV0dXJuIGEgdmFsdWUKLQkJCSAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIG1vZGUgaXMgaW5kZXRlcm1pbmF0ZWQuCi0JCQkgKi8KLQkJCWlmICgqcEJ1ZiAhPSBwUHJ0LT5QRmxvd0N0cmxNb2RlKSB7Ci0KLQkJCQkqcEJ1ZiA9IFNLX0ZMT1dfTU9ERV9JTkRFVEVSTUlOQVRFRDsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfRkxPV0NUUkxfU1RBVFVTOgotCQkJLyogQ2hlY2sgaWYgaXQgaXMgdGhlIGZpcnN0IGFjdGl2ZSBwb3J0ICovCi0JCQlpZiAoKnBCdWYgPT0gMCkgewotCi0JCQkJKnBCdWYgPSBwUHJ0LT5QRmxvd0N0cmxTdGF0dXM7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBmaW5kIGFuIGFjdGl2ZSBwb3J0IHdpdGggYSBkaWZmZXJlbnQgZmxvdwotCQkJICogY29udHJvbCBzdGF0dXMgdGhhbiB0aGUgZmlyc3Qgb25lLCB3ZSByZXR1cm4gYQotCQkJICogdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RhdHVzIGlzCi0JCQkgKiBpbmRldGVybWluYXRlZC4KLQkJCSAqLwotCQkJaWYgKCpwQnVmICE9IHBQcnQtPlBGbG93Q3RybFN0YXR1cykgewotCi0JCQkJKnBCdWYgPSBTS19GTE9XX1NUQVRfSU5ERVRFUk1JTkFURUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJCi0JCWNhc2UgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9DQVA6Ci0JCQkvKiBDaGVjayBpZiBpdCBpcyB0aGUgZmlyc3QgYWN0aXZlIHBvcnQgKi8KLQkJCWlmICgqcEJ1ZiA9PSAwKSB7Ci0KLQkJCQkqcEJ1ZiA9IHBQcnQtPlBNU0NhcDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIEZyb20gYSBjdXJpb3VzIHBvaW50IG9mIHZpZXcgdGhlIHZpcnR1YWwgcG9ydAotCQkJICogaXMgY2FwYWJsZSBvZiBhbGwgZm91bmQgY2FwYWJpbGl0aWVzLgotCQkJICovCi0JCQkqcEJ1ZiB8PSBwUHJ0LT5QTVNDYXA7Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1BIWV9PUEVSQVRJT05fTU9ERToKLQkJCS8qIENoZWNrIGlmIGl0IGlzIHRoZSBmaXJzdCBhY3RpdmUgcG9ydCAqLwotCQkJaWYgKCpwQnVmID09IDApIHsKLQotCQkJCSpwQnVmID0gcFBydC0+UE1TTW9kZTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIElmIHdlIGZpbmQgYW4gYWN0aXZlIHBvcnQgd2l0aCBhIGRpZmZlcmVudCBtYXN0ZXIvCi0JCQkgKiBzbGF2ZSBtb2RlIHRoYW4gdGhlIGZpcnN0IG9uZSwgd2UgcmV0dXJuIGEgdmFsdWUKLQkJCSAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIG1vZGUgaXMgaW5kZXRlcm1pbmF0ZWQuCi0JCQkgKi8KLQkJCWlmICgqcEJ1ZiAhPSBwUHJ0LT5QTVNNb2RlKSB7Ci0KLQkJCQkqcEJ1ZiA9IFNLX01TX01PREVfSU5ERVRFUk1JTkFURUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIE9JRF9TS0dFX1BIWV9PUEVSQVRJT05fU1RBVFVTOgotCQkJLyogQ2hlY2sgaWYgaXQgaXMgdGhlIGZpcnN0IGFjdGl2ZSBwb3J0ICovCi0JCQlpZiAoKnBCdWYgPT0gMCkgewotCi0JCQkJKnBCdWYgPSBwUHJ0LT5QTVNTdGF0dXM7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBmaW5kIGFuIGFjdGl2ZSBwb3J0IHdpdGggYSBkaWZmZXJlbnQgbWFzdGVyLwotCQkJICogc2xhdmUgc3RhdHVzIHRoYW4gdGhlIGZpcnN0IG9uZSwgd2UgcmV0dXJuIGEKLQkJCSAqIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0YXR1cyBpcwotCQkJICogaW5kZXRlcm1pbmF0ZWQuCi0JCQkgKi8KLQkJCWlmICgqcEJ1ZiAhPSBwUHJ0LT5QTVNTdGF0dXMpIHsKLQotCQkJCSpwQnVmID0gU0tfTVNfU1RBVF9JTkRFVEVSTUlOQVRFRDsKLQkJCX0KLQkJCWJyZWFrOwotCQkKLQkJY2FzZSBPSURfU0tHRV9TUEVFRF9NT0RFOgotCQkJLyogQ2hlY2sgaWYgaXQgaXMgdGhlIGZpcnN0IGFjdGl2ZSBwb3J0ICovCi0JCQlpZiAoKnBCdWYgPT0gMCkgewotCi0JCQkJKnBCdWYgPSBwUHJ0LT5QTGlua1NwZWVkOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKgotCQkJICogSWYgd2UgZmluZCBhbiBhY3RpdmUgcG9ydCB3aXRoIGEgZGlmZmVyZW50IGZsb3cKLQkJCSAqIGNvbnRyb2wgbW9kZSB0aGFuIHRoZSBmaXJzdCBvbmUsIHdlIHJldHVybiBhIHZhbHVlCi0JCQkgKiB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBtb2RlIGlzIGluZGV0ZXJtaW5hdGVkLgotCQkJICovCi0JCQlpZiAoKnBCdWYgIT0gcFBydC0+UExpbmtTcGVlZCkgewotCi0JCQkJKnBCdWYgPSBTS19MU1BFRURfSU5ERVRFUk1JTkFURUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJCi0JCWNhc2UgT0lEX1NLR0VfU1BFRURfU1RBVFVTOgotCQkJLyogQ2hlY2sgaWYgaXQgaXMgdGhlIGZpcnN0IGFjdGl2ZSBwb3J0ICovCi0JCQlpZiAoKnBCdWYgPT0gMCkgewotCi0JCQkJKnBCdWYgPSBwUHJ0LT5QTGlua1NwZWVkVXNlZDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIElmIHdlIGZpbmQgYW4gYWN0aXZlIHBvcnQgd2l0aCBhIGRpZmZlcmVudCBmbG93Ci0JCQkgKiBjb250cm9sIHN0YXR1cyB0aGFuIHRoZSBmaXJzdCBvbmUsIHdlIHJldHVybiBhCi0JCQkgKiB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBzdGF0dXMgaXMKLQkJCSAqIGluZGV0ZXJtaW5hdGVkLgotCQkJICovCi0JCQlpZiAoKnBCdWYgIT0gcFBydC0+UExpbmtTcGVlZFVzZWQpIHsKLQotCQkJCSpwQnVmID0gU0tfTFNQRUVEX1NUQVRfSU5ERVRFUk1JTkFURUQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qCi0JICogSWYgbm8gcG9ydCBpcyBhY3RpdmUgcmV0dXJuIGFuIGluZGV0ZXJtaW5hdGVkIGFuc3dlcgotCSAqLwotCWlmICghUG9ydEFjdGl2ZUZsYWcpIHsKLQotCQlzd2l0Y2ggKElkKSB7Ci0KLQkJY2FzZSBPSURfU0tHRV9MSU5LX0NBUDoKLQkJCSpwQnVmID0gU0tfTE1PREVfQ0FQX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9MSU5LX01PREU6Ci0JCQkqcEJ1ZiA9IFNLX0xNT0RFX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9MSU5LX01PREVfU1RBVFVTOgotCQkJKnBCdWYgPSBTS19MTU9ERV9TVEFUX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9MSU5LX1NUQVRVUzoKLQkJCSpwQnVmID0gU0tfUE5NSV9STE1UX0xTVEFUX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9DQVA6Ci0JCWNhc2UgT0lEX1NLR0VfRkxPV0NUUkxfTU9ERToKLQkJCSpwQnVmID0gU0tfRkxPV19NT0RFX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9GTE9XQ1RSTF9TVEFUVVM6Ci0JCQkqcEJ1ZiA9IFNLX0ZMT1dfU1RBVF9JTkRFVEVSTUlOQVRFRDsKLQkJCWJyZWFrOwotCQkJCi0JCWNhc2UgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9DQVA6Ci0JCQkqcEJ1ZiA9IFNLX01TX0NBUF9JTkRFVEVSTUlOQVRFRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfUEhZX09QRVJBVElPTl9NT0RFOgotCQkJKnBCdWYgPSBTS19NU19NT0RFX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9QSFlfT1BFUkFUSU9OX1NUQVRVUzoKLQkJCSpwQnVmID0gU0tfTVNfU1RBVF9JTkRFVEVSTUlOQVRFRDsKLQkJCWJyZWFrOwotCQljYXNlIE9JRF9TS0dFX1NQRUVEX0NBUDoKLQkJCSpwQnVmID0gU0tfTFNQRUVEX0NBUF9JTkRFVEVSTUlOQVRFRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1NLR0VfU1BFRURfTU9ERToKLQkJCSpwQnVmID0gU0tfTFNQRUVEX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBPSURfU0tHRV9TUEVFRF9TVEFUVVM6Ci0JCQkqcEJ1ZiA9IFNLX0xTUEVFRF9TVEFUX0lOREVURVJNSU5BVEVEOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENhbGN1bGF0ZUxpbmtTdGF0dXMgLSBEZXRlcm1pbnMgdGhlIGxpbmsgc3RhdHVzIG9mIGEgcGh5c2ljYWwgcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRGV0ZXJtaW5zIHRoZSBsaW5rIHN0YXR1cyB0aGUgZm9sbG93aW5nIHdheToKLSAqCSAgTFNUQVRfUEhZX0RPV046ICBMaW5rIGlzIGRvd24KLSAqCSAgTFNUQVRfQVVUT05FRzogICBBdXRvLW5lZ290aWF0aW9uIGZhaWxlZAotICoJICBMU1RBVF9MT0dfRE9XTjogIExpbmsgaXMgdXAgYnV0IFJMTVQgZGlkIG5vdCB5ZXQgcHV0IHRoZSBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgbG9naWNhbGx5IHVwLgotICoJICBMU1RBVF9MT0dfVVA6ICAgIFJMTVQgbWFya2VkIHRoZSBwb3J0IGFzIHVwCi0gKgotICogUmV0dXJuczoKLSAqCUxpbmsgc3RhdHVzIG9mIHBoeXNpY2FsIHBvcnQKLSAqLwotUE5NSV9TVEFUSUMgU0tfVTggQ2FsY3VsYXRlTGlua1N0YXR1cygKLVNLX0FDICpwQUMsCQkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLXVuc2lnbmVkIGludCBQaHlzUG9ydEluZGV4KQkvKiBQaHlzaWNhbCBwb3J0IGluZGV4ICovCi17Ci0JU0tfVTgJUmVzdWx0OwotCi0JaWYgKCFwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUEhXTGlua1VwKSB7Ci0KLQkJUmVzdWx0ID0gU0tfUE5NSV9STE1UX0xTVEFUX1BIWV9ET1dOOwotCX0KLQllbHNlIGlmIChwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUEF1dG9OZWdGYWlsID4gMCkgewotCi0JCVJlc3VsdCA9IFNLX1BOTUlfUkxNVF9MU1RBVF9BVVRPTkVHOwotCQkJCX0KLQllbHNlIGlmICghcEFDLT5SbG10LlBvcnRbUGh5c1BvcnRJbmRleF0uUG9ydERvd24pIHsKLQotCQlSZXN1bHQgPSBTS19QTk1JX1JMTVRfTFNUQVRfTE9HX1VQOwotCX0KLQllbHNlIHsKLQkJUmVzdWx0ID0gU0tfUE5NSV9STE1UX0xTVEFUX0xPR19ET1dOOwotCX0KLQotCXJldHVybiAoUmVzdWx0KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ2FsY3VsYXRlTGlua01vZGVTdGF0dXMgLSBEZXRlcm1pbnMgdGhlIGxpbmsgbW9kZSBzdGF0dXMgb2YgYSBwaHlzLiBwb3J0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgQ09NTU9OIG1vZHVsZSBvbmx5IHRlbGxzIHVzIGlmIHRoZSBtb2RlIGlzIGhhbGYgb3IgZnVsbCBkdXBsZXguCi0gKglCdXQgaW4gdGhlIGRlY2FkZSBvZiBhdXRvIHNlbnNpbmcgaXQgaXMgdXNlZnVsIGZvciB0aGUgdXNlciB0bwotICoJa25vdyBpZiB0aGUgbW9kZSB3YXMgbmVnb3RpYXRlZCBvciBmb3JjZWQuIFRoZXJlZm9yZSB3ZSBoYXZlIGEKLSAqCWxvb2sgdG8gdGhlIG1vZGUsIHdoaWNoIHdhcyBsYXN0IHVzZWQgYnkgdGhlIG5lZ290aWF0aW9uIHByb2Nlc3MuCi0gKgotICogUmV0dXJuczoKLSAqCVRoZSBsaW5rIG1vZGUgc3RhdHVzCi0gKi8KLVBOTUlfU1RBVElDIFNLX1U4IENhbGN1bGF0ZUxpbmtNb2RlU3RhdHVzKAotU0tfQUMgKnBBQywJCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotdW5zaWduZWQgaW50IFBoeXNQb3J0SW5kZXgpCS8qIFBoeXNpY2FsIHBvcnQgaW5kZXggKi8KLXsKLQlTS19VOAlSZXN1bHQ7Ci0KLQkvKiBHZXQgdGhlIGN1cnJlbnQgbW9kZSwgd2hpY2ggY2FuIGJlIGZ1bGwgb3IgaGFsZiBkdXBsZXggKi8KLQlSZXN1bHQgPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUExpbmtNb2RlU3RhdHVzOwotCi0JLyogQ2hlY2sgaWYgbm8gdmFsaWQgbW9kZSBjb3VsZCBiZSBmb3VuZCAobGluayBpcyBkb3duKSAqLwotCWlmIChSZXN1bHQgPCBTS19MTU9ERV9TVEFUX0hBTEYpIHsKLQotCQlSZXN1bHQgPSBTS19MTU9ERV9TVEFUX1VOS05PV047Ci0JfQotCWVsc2UgaWYgKHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QTGlua01vZGUgPj0gU0tfTE1PREVfQVVUT0hBTEYpIHsKLQotCQkvKgotCQkgKiBBdXRvLW5lZ290aWF0aW9uIHdhcyB1c2VkIHRvIGJyaW5nIHVwIHRoZSBsaW5rLiBDaGFuZ2UKLQkJICogdGhlIGFscmVhZHkgZm91bmQgZHVwbGV4IHN0YXR1cyB0aGF0IGl0IGluZGljYXRlcwotCQkgKiBhdXRvLW5lZ290aWF0aW9uIHdhcyBpbnZvbHZlZC4KLQkJICovCi0JCWlmIChSZXN1bHQgPT0gU0tfTE1PREVfU1RBVF9IQUxGKSB7Ci0KLQkJCVJlc3VsdCA9IFNLX0xNT0RFX1NUQVRfQVVUT0hBTEY7Ci0JCX0KLQkJZWxzZSBpZiAoUmVzdWx0ID09IFNLX0xNT0RFX1NUQVRfRlVMTCkgewotCi0JCQlSZXN1bHQgPSBTS19MTU9ERV9TVEFUX0FVVE9GVUxMOwotCQl9Ci0JfQotCi0JcmV0dXJuIChSZXN1bHQpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHZXRWcGRLZXlBcnIgLSBPYnRhaW4gYW4gYXJyYXkgb2YgVlBEIGtleXMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVJlYWQgdGhlIFZQRCBrZXlzIGFuZCBidWlsZCBhbiBhcnJheSBvZiBWUEQga2V5cywgd2hpY2ggYXJlCi0gKgllYXN5IHRvIGFjY2Vzcy4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sJICAgICBUYXNrIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICBTb21ldGhpbmcgd2VudCB3cm9uZy4KLSAqLwotUE5NSV9TVEFUSUMgaW50IEdldFZwZEtleUFycigKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1jaGFyICpwS2V5QXJyLAkJLyogUHRyIEtleUFycmF5ICovCi11bnNpZ25lZCBpbnQgS2V5QXJyTGVuLAkvKiBMZW5ndGggb2YgYXJyYXkgaW4gYnl0ZXMgKi8KLXVuc2lnbmVkIGludCAqcEtleU5vKQkvKiBOdW1iZXIgb2Yga2V5cyAqLwotewotCXVuc2lnbmVkIGludAkJQnVmS2V5c0xlbiA9IFNLX1BOTUlfVlBEX0JVRlNJWkU7Ci0JY2hhcgkJCUJ1ZktleXNbU0tfUE5NSV9WUERfQlVGU0laRV07Ci0JdW5zaWduZWQgaW50CQlTdGFydE9mZnNldDsKLQl1bnNpZ25lZCBpbnQJCU9mZnNldDsKLQlpbnQJCQlJbmRleDsKLQlpbnQJCQlSZXQ7Ci0KLQotCVNLX01FTVNFVChwS2V5QXJyLCAwLCBLZXlBcnJMZW4pOwotCi0JLyoKLQkgKiBHZXQgVlBEIGtleSBsaXN0Ci0JICovCi0JUmV0ID0gVnBkS2V5cyhwQUMsIElvQywgKGNoYXIgKikmQnVmS2V5cywgKGludCAqKSZCdWZLZXlzTGVuLAotCQkoaW50ICopcEtleU5vKTsKLQlpZiAoUmV0ID4gMCkgewotCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMTQsCi0JCQlTS19QTk1JX0VSUjAxNE1TRyk7Ci0KLQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQl9Ci0JLyogSWYgbm8ga2V5cyBhcmUgYXZhaWxhYmxlIHJldHVybiBub3cgKi8KLQlpZiAoKnBLZXlObyA9PSAwIHx8IEJ1ZktleXNMZW4gPT0gMCkgewotCi0JCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCX0KLQkvKgotCSAqIElmIHRoZSBrZXkgbGlzdCBpcyB0b28gbG9uZyBmb3IgdXMgdHJ1bmMgaXQgYW5kIGdpdmUgYQotCSAqIGVycm9ybG9nIG5vdGlmaWNhdGlvbi4gVGhpcyBjYXNlIHNob3VsZCBub3QgaGFwcGVuIGJlY2F1c2UKLQkgKiB0aGUgbWF4aW11bSBudW1iZXIgb2Yga2V5cyBpcyBsaW1pdGVkIGR1ZSB0byBSQU0gbGltaXRhdGlvbnMKLQkgKi8KLQlpZiAoKnBLZXlObyA+IFNLX1BOTUlfVlBEX0VOVFJJRVMpIHsKLQotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLX1BOTUlfRVJSMDE1LAotCQkJU0tfUE5NSV9FUlIwMTVNU0cpOwotCi0JCSpwS2V5Tm8gPSBTS19QTk1JX1ZQRF9FTlRSSUVTOwotCX0KLQotCS8qCi0JICogTm93IGJ1aWxkIGFuIGFycmF5IG9mIGZpeGVkIHN0cmluZyBsZW5ndGggc2l6ZSBhbmQgY29weQotCSAqIHRoZSBrZXlzIHRvZ2V0aGVyLgotCSAqLwotCWZvciAoSW5kZXggPSAwLCBTdGFydE9mZnNldCA9IDAsIE9mZnNldCA9IDA7IE9mZnNldCA8IEJ1ZktleXNMZW47Ci0JCU9mZnNldCArKykgewotCi0JCWlmIChCdWZLZXlzW09mZnNldF0gIT0gMCkgewotCi0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChPZmZzZXQgLSBTdGFydE9mZnNldCA+IFNLX1BOTUlfVlBEX0tFWV9TSVpFKSB7Ci0KLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwMTYsCi0JCQkJU0tfUE5NSV9FUlIwMTZNU0cpOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCi0JCVNLX1NUUk5DUFkocEtleUFyciArIEluZGV4ICogU0tfUE5NSV9WUERfS0VZX1NJWkUsCi0JCQkmQnVmS2V5c1tTdGFydE9mZnNldF0sIFNLX1BOTUlfVlBEX0tFWV9TSVpFKTsKLQotCQlJbmRleCArKzsKLQkJU3RhcnRPZmZzZXQgPSBPZmZzZXQgKyAxOwotCX0KLQotCS8qIExhc3Qga2V5IG5vdCB6ZXJvIHRlcm1pbmF0ZWQ/IEdldCBpdCBhbnl3YXkgKi8KLQlpZiAoU3RhcnRPZmZzZXQgPCBPZmZzZXQpIHsKLQotCQlTS19TVFJOQ1BZKHBLZXlBcnIgKyBJbmRleCAqIFNLX1BOTUlfVlBEX0tFWV9TSVpFLAotCQkJJkJ1ZktleXNbU3RhcnRPZmZzZXRdLCBTS19QTk1JX1ZQRF9LRVlfU0laRSk7Ci0JfQotCi0JcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFNpcnFVcGRhdGUgLSBMZXQgdGhlIFNJUlEgdXBkYXRlIGl0cyBpbnRlcm5hbCB2YWx1ZXMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUp1c3QgdG8gYmUgc3VyZSB0aGF0IHRoZSBTSVJRIG1vZHVsZSBob2xkcyBpdHMgaW50ZXJuYWwgZGF0YQotICoJc3RydWN0dXJlcyB1cCB0byBkYXRlLCB3ZSBzZW5kIGFuIHVwZGF0ZSBldmVudCBiZWZvcmUgd2UgbWFrZQotICoJYW55IGFjY2Vzcy4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfUE5NSV9FUlJfT0sJICAgICBUYXNrIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICBTb21ldGhpbmcgd2VudCB3cm9uZy4KLSAqLwotUE5NSV9TVEFUSUMgaW50IFNpcnFVcGRhdGUoCi1TS19BQyAqcEFDLAkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQykJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLXsKLQlTS19FVlBBUkEJRXZlbnRQYXJhbTsKLQotCi0JLyogV2FzIHRoZSBtb2R1bGUgYWxyZWFkeSB1cGRhdGVkIGR1cmluZyB0aGUgY3VycmVudCBQTk1JIGNhbGw/ICovCi0JaWYgKHBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgPiAwKSB7Ci0KLQkJcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci0JfQotCi0JLyogU2VuZCBhbiBzeW5jaHJvbnVvdXMgdXBkYXRlIGV2ZW50IHRvIHRoZSBtb2R1bGUgKi8KLQlTS19NRU1TRVQoKGNoYXIgKikmRXZlbnRQYXJhbSwgMCwgc2l6ZW9mKEV2ZW50UGFyYW0pKTsKLQlpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywgU0tfSFdFVl9VUERBVEVfU1RBVCwgRXZlbnRQYXJhbSkgPiAwKSB7Ci0KLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS19QTk1JX0VSUjA0NywKLQkJCVNLX1BOTUlfRVJSMDQ3TVNHKTsKLQotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCX0KLQotCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBSbG10VXBkYXRlIC0gTGV0IHRoZSBSTE1UIHVwZGF0ZSBpdHMgaW50ZXJuYWwgdmFsdWVzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglKdXN0IHRvIGJlIHN1cmUgdGhhdCB0aGUgUkxNVCBtb2R1bGUgaG9sZHMgaXRzIGludGVybmFsIGRhdGEKLSAqCXN0cnVjdHVyZXMgdXAgdG8gZGF0ZSwgd2Ugc2VuZCBhbiB1cGRhdGUgZXZlbnQgYmVmb3JlIHdlIG1ha2UKLSAqCWFueSBhY2Nlc3MuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1BOTUlfRVJSX09LCSAgICAgVGFzayBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgotICoJU0tfUE5NSV9FUlJfR0VORVJBTCAgU29tZXRoaW5nIHdlbnQgd3JvbmcuCi0gKi8KLVBOTUlfU1RBVElDIGludCBSbG10VXBkYXRlKAotU0tfQUMgKnBBQywJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsbHdheXMgemVybyAqLwotewotCVNLX0VWUEFSQQlFdmVudFBhcmFtOwotCi0KLQkvKiBXYXMgdGhlIG1vZHVsZSBhbHJlYWR5IHVwZGF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IFBOTUkgY2FsbD8gKi8KLQlpZiAocEFDLT5Qbm1pLlJsbXRVcGRhdGVkRmxhZyA+IDApIHsKLQotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLQl9Ci0KLQkvKiBTZW5kIGFuIHN5bmNocm9udW91cyB1cGRhdGUgZXZlbnQgdG8gdGhlIG1vZHVsZSAqLwotCVNLX01FTVNFVCgoY2hhciAqKSZFdmVudFBhcmFtLCAwLCBzaXplb2YoRXZlbnRQYXJhbSkpOwotCUV2ZW50UGFyYW0uUGFyYTMyWzBdID0gTmV0SW5kZXg7Ci0JRXZlbnRQYXJhbS5QYXJhMzJbMV0gPSAoU0tfVTMyKS0xOwotCWlmIChTa1JsbXRFdmVudChwQUMsIElvQywgU0tfUkxNVF9TVEFUU19VUERBVEUsIEV2ZW50UGFyYW0pID4gMCkgewotCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwNDgsCi0JCQlTS19QTk1JX0VSUjA0OE1TRyk7Ci0KLQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQl9Ci0KLQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTWFjVXBkYXRlIC0gRm9yY2UgdGhlIFhNQUMgdG8gb3V0cHV0IHRoZSBjdXJyZW50IHN0YXRpc3RpYwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhlIFhNQUMgaG9sZHMgaXRzIHN0YXRpc3RpYyBpbnRlcm5hbGx5LiBUbyBvYnRhaW4gdGhlIGN1cnJlbnQKLSAqCXZhbHVlcyB3ZSBtdXN0IHNlbmQgYSBjb21tYW5kIHNvIHRoYXQgdGhlIHN0YXRpc3RpYyBkYXRhIHdpbGwKLSAqCWJlIHdyaXR0ZW4gdG8gYSBwcmVkZWZpbmVkIG1lbW9yeSBhcmVhIG9uIHRoZSBhZGFwdGVyLgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSwkgICAgIFRhc2sgc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgIFNvbWV0aGluZyB3ZW50IHdyb25nLgotICovCi1QTk1JX1NUQVRJQyBpbnQgTWFjVXBkYXRlKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLXVuc2lnbmVkIGludCBGaXJzdE1hYywJLyogSW5kZXggb2YgdGhlIGZpcnN0IE1hYyB0byBiZSB1cGRhdGVkICovCi11bnNpZ25lZCBpbnQgTGFzdE1hYykJLyogSW5kZXggb2YgdGhlIGxhc3QgTWFjIHRvIGJlIHVwZGF0ZWQgKi8KLXsKLQl1bnNpZ25lZCBpbnQJTWFjSW5kZXg7Ci0KLQkvKgotCSAqIFdlcmUgdGhlIHN0YXRpc3RpY3MgYWxyZWFkeSB1cGRhdGVkIGR1cmluZyB0aGUKLQkgKiBjdXJyZW50IFBOTUkgY2FsbD8KLQkgKi8KLQlpZiAocEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnID4gMCkgewotCi0JCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCX0KLQotCS8qIFNlbmQgYW4gdXBkYXRlIGNvbW1hbmQgdG8gYWxsIE1BQ3Mgc3BlY2lmaWVkICovCi0JZm9yIChNYWNJbmRleCA9IEZpcnN0TWFjOyBNYWNJbmRleCA8PSBMYXN0TWFjOyBNYWNJbmRleCArKykgewotCi0JCS8qCi0JCSAqIDIwMDItMDktMTMgcHdlYmVyOglGcmVlemUgdGhlIGN1cnJlbnQgU1cgY291bnRlcnMuCi0JCSAqICAgICAgICAgICAgICAgICAgICAgIChUaGF0IHNob3VsZCBiZSBkb25lIGFzIGNsb3NlIGFzCi0JCSAqICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHRvIHRoZSB1cGRhdGUgb2YgdGhlCi0JCSAqICAgICAgICAgICAgICAgICAgICAgIEhXIGNvdW50ZXJzKQotCQkgKi8KLQkJaWYgKHBBQy0+R0luaS5HSU1hY1R5cGUgPT0gU0tfTUFDX1hNQUMpIHsKLQkJCXBBQy0+UG5taS5CdWZQb3J0W01hY0luZGV4XSA9IHBBQy0+UG5taS5Qb3J0W01hY0luZGV4XTsKLQkJfQotCQkJCi0JCS8qIDIwMDItMDktMTMgcHdlYmVyOiAgVXBkYXRlIHRoZSBIVyBjb3VudGVyICAqLwotCQlpZiAocEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNVcGRhdGVTdGF0cyhwQUMsIElvQywgTWFjSW5kZXgpICE9IDApIHsKLQotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJfQotCX0KLQotCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHZXRTdGF0VmFsIC0gUmV0cmlldmUgYW4gWE1BQyBzdGF0aXN0aWMgY291bnRlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJUmV0cmlldmVzIHRoZSBzdGF0aXN0aWMgY291bnRlciBvZiBhIHZpcnR1YWwgb3IgcGh5c2ljYWwgcG9ydC4gVGhlCi0gKgl2aXJ0dWFsIHBvcnQgaXMgaWRlbnRpZmllZCBieSB0aGUgaW5kZXggMC4gSXQgY29uc2lzdHMgb2YgYWxsCi0gKgljdXJyZW50bHkgYWN0aXZlIHBvcnRzLiBUbyBvYnRhaW4gdGhlIGNvdW50ZXIgdmFsdWUgZm9yIHRoaXMgcG9ydAotICoJd2UgbXVzdCBhZGQgdGhlIHN0YXRpc3RpYyBjb3VudGVyIG9mIGFsbCBhY3RpdmUgcG9ydHMuIFRvIGdyYW50Ci0gKgljb250aW51b3VzIGNvdW50ZXIgdmFsdWVzIGZvciB0aGUgdmlydHVhbCBwb3J0IGV2ZW4gd2hlbiBwb3J0Ci0gKglzd2l0Y2hlcyBvY2N1ciB3ZSBtdXN0IGFkZGl0aW9uYWxseSBhZGQgYSBkZWx0YSB2YWx1ZSwgd2hpY2ggd2FzCi0gKgljYWxjdWxhdGVkIGR1cmluZyBhIFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX1VQIGV2ZW50LgotICoKLSAqIFJldHVybnM6Ci0gKglSZXF1ZXN0ZWQgc3RhdGlzdGljIHZhbHVlCi0gKi8KLVBOTUlfU1RBVElDIFNLX1U2NCBHZXRTdGF0VmFsKAotU0tfQUMgKnBBQywJCQkJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJCQkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLXVuc2lnbmVkIGludCBMb2dQb3J0SW5kZXgsCS8qIEluZGV4IG9mIHRoZSBsb2dpY2FsIFBvcnQgdG8gYmUgcHJvY2Vzc2VkICovCi11bnNpZ25lZCBpbnQgU3RhdEluZGV4LAkJLyogSW5kZXggdG8gc3RhdGlzdGljIHZhbHVlICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsbHdheXMgemVybyAqLwotewotCXVuc2lnbmVkIGludAlQaHlzUG9ydEluZGV4OwotCXVuc2lnbmVkIGludAlQaHlzUG9ydE1heDsKLQlTS19VNjQJCQlWYWwgPSAwOwotCi0KLQlpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09IFNLX1RSVUUpIHsJLyogRHVhbCBuZXQgbW9kZSAqLwotCi0JCVBoeXNQb3J0SW5kZXggPSBOZXRJbmRleDsKLQkJCi0JCVZhbCA9IEdldFBoeXNTdGF0VmFsKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBTdGF0SW5kZXgpOwotCX0KLQllbHNlIHsJLyogU2luZ2xlIE5ldCBtb2RlICovCi0KLQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7Ci0KLQkJCVBoeXNQb3J0TWF4ID0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCi0JCQkvKiBBZGQgY291bnRlciBvZiBhbGwgYWN0aXZlIHBvcnRzICovCi0JCQlmb3IgKFBoeXNQb3J0SW5kZXggPSAwOyBQaHlzUG9ydEluZGV4IDwgUGh5c1BvcnRNYXg7Ci0JCQkJUGh5c1BvcnRJbmRleCArKykgewotCi0JCQkJaWYgKHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkFjdGl2ZUZsYWcpIHsKLQotCQkJCQlWYWwgKz0gR2V0UGh5c1N0YXRWYWwocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsIFN0YXRJbmRleCk7Ci0JCQkJfQotCQkJfQotCi0JCQkvKiBDb3JyZWN0IHZhbHVlIGJlY2F1c2Ugb2YgcG9ydCBzd2l0Y2hlcyAqLwotCQkJVmFsICs9IHBBQy0+UG5taS5WaXJ0dWFsQ291bnRlck9mZnNldFtTdGF0SW5kZXhdOwotCQl9Ci0JCWVsc2UgewotCQkJLyogR2V0IGNvdW50ZXIgdmFsdWUgb2YgcGh5c2ljYWwgcG9ydCAqLwotCQkJUGh5c1BvcnRJbmRleCA9IFNLX1BOTUlfUE9SVF9MT0cyUEhZUyhwQUMsIExvZ1BvcnRJbmRleCk7Ci0JCQkKLQkJCVZhbCA9IEdldFBoeXNTdGF0VmFsKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBTdGF0SW5kZXgpOwotCQl9Ci0JfQotCXJldHVybiAoVmFsKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogR2V0UGh5c1N0YXRWYWwgLSBHZXQgY291bnRlciB2YWx1ZSBmb3IgcGh5c2ljYWwgcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJQnVpbGRzIGEgNjRiaXQgY291bnRlciB2YWx1ZS4gRXhjZXB0IGZvciB0aGUgb2N0ZXQgY291bnRlcnMKLSAqCXRoZSBsb3dlciAzMmJpdCBhcmUgY291bnRlZCBpbiBoYXJkd2FyZSBhbmQgdGhlIHVwcGVyIDMyYml0Ci0gKglpbiBzb2Z0d2FyZSBieSBtb25pdG9yaW5nIGNvdW50ZXIgb3ZlcmZsb3cgaW50ZXJydXB0cyBpbiB0aGUKLSAqCWV2ZW50IGhhbmRsZXIuIFRvIGdyYW50IGNvbnRpbm91cyBjb3VudGVyIHZhbHVlcyBkdXJpbmcgWE1BQwotICoJcmVzZXRzIChjYXVzZWQgYnkgYSB3b3JrYXJvdW5kKSB3ZSBtdXN0IGFkZCBhIGRlbHRhIHZhbHVlLgotICoJVGhlIGRlbHRhIHdhcyBjYWxjdWxhdGVkIGluIHRoZSBldmVudCBoYW5kbGVyIHdoZW4gYQotICoJU0tfUE5NSV9FVlRfWE1BQ19SRVNFVCB3YXMgcmVjZWl2ZWQuCi0gKgotICogUmV0dXJuczoKLSAqCUNvdW50ZXIgdmFsdWUKLSAqLwotUE5NSV9TVEFUSUMgU0tfVTY0IEdldFBoeXNTdGF0VmFsKAotU0tfQUMgKnBBQywJCQkJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJCQkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLXVuc2lnbmVkIGludCBQaHlzUG9ydEluZGV4LAkvKiBJbmRleCBvZiB0aGUgbG9naWNhbCBQb3J0IHRvIGJlIHByb2Nlc3NlZCAqLwotdW5zaWduZWQgaW50IFN0YXRJbmRleCkJCS8qIEluZGV4IHRvIHN0YXRpc3RpYyB2YWx1ZSAqLwotewotCVNLX1U2NAlWYWwgPSAwOwotCVNLX1UzMglMb3dWYWwgPSAwOwotCVNLX1UzMglIaWdoVmFsID0gMDsKLQlTS19VMTYJV29yZDsKLQlpbnQJCU1hY1R5cGU7Ci0JdW5zaWduZWQgaW50IEhlbHBJbmRleDsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0JCi0JU0tfUE5NSV9QT1JUCSpwUG5taVBydDsKLQlTS19HRU1BQ0ZVTkMJKnBGbk1hYzsKLQkKLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XTsKLQkKLQlNYWNUeXBlID0gcEFDLT5HSW5pLkdJTWFjVHlwZTsKLQkKLQkvKiAyMDAyLTA5LTE3IHB3ZWJlcjogRm9yIFhNQUMsIHVzZSB0aGUgZnJvemVuIFNXIGNvdW50ZXJzIChCdWZQb3J0KSAqLwotCWlmIChNYWNUeXBlID09IFNLX01BQ19YTUFDKSB7Ci0JCXBQbm1pUHJ0ID0gJnBBQy0+UG5taS5CdWZQb3J0W1BoeXNQb3J0SW5kZXhdOwotCX0KLQllbHNlIHsKLQkJcFBubWlQcnQgPSAmcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF07Ci0JfQotCQotCXBGbk1hYyAgID0gJnBBQy0+R0luaS5HSUZ1bmM7Ci0KLQlzd2l0Y2ggKFN0YXRJbmRleCkgewotCWNhc2UgU0tfUE5NSV9IVFg6Ci0JCWlmIChNYWNUeXBlID09IFNLX01BQ19HTUFDKSB7Ci0JCQkodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkJCQlTdGF0QWRkcltTS19QTk1JX0hUWF9CUk9BRENBU1RdW01hY1R5cGVdLlJlZywKLQkJCQkJCQkmTG93VmFsKTsKLQkJCSh2b2lkKXBGbk1hYy0+cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAotCQkJCQkJCVN0YXRBZGRyW1NLX1BOTUlfSFRYX01VTFRJQ0FTVF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCSZIaWdoVmFsKTsKLQkJCUxvd1ZhbCArPSBIaWdoVmFsOwotCQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJU3RhdEFkZHJbU0tfUE5NSV9IVFhfVU5JQ0FTVF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCSZIaWdoVmFsKTsKLQkJCUxvd1ZhbCArPSBIaWdoVmFsOwotCQl9Ci0JCWVsc2UgewotCQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCQkJICBTdGF0QWRkcltTdGF0SW5kZXhdW01hY1R5cGVdLlJlZywKLQkJCQkJCQkJCQkgICZMb3dWYWwpOwotCQl9Ci0JCUhpZ2hWYWwgPSBwUG5taVBydC0+Q291bnRlckhpZ2hbU3RhdEluZGV4XTsKLQkJYnJlYWs7Ci0JCi0JY2FzZSBTS19QTk1JX0hSWDoKLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX0dNQUMpIHsKLQkJCSh2b2lkKXBGbk1hYy0+cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAotCQkJCQkJCVN0YXRBZGRyW1NLX1BOTUlfSFJYX0JST0FEQ0FTVF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCSZMb3dWYWwpOwotCQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJU3RhdEFkZHJbU0tfUE5NSV9IUlhfTVVMVElDQVNUXVtNYWNUeXBlXS5SZWcsCi0JCQkJCQkJJkhpZ2hWYWwpOwotCQkJTG93VmFsICs9IEhpZ2hWYWw7Ci0JCQkodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkJCQlTdGF0QWRkcltTS19QTk1JX0hSWF9VTklDQVNUXVtNYWNUeXBlXS5SZWcsCi0JCQkJCQkJJkhpZ2hWYWwpOwotCQkJTG93VmFsICs9IEhpZ2hWYWw7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJCSAgJkxvd1ZhbCk7Ci0JCX0KLQkJSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9IVFhfT0NURVQ6Ci0JY2FzZSBTS19QTk1JX0hSWF9PQ1RFVDoKLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJICAmSGlnaFZhbCk7Ci0JCSh2b2lkKXBGbk1hYy0+cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAotCQkJCQkJCQkJICBTdGF0QWRkcltTdGF0SW5kZXggKyAxXVtNYWNUeXBlXS5SZWcsCi0JCQkJCQkJCQkgICZMb3dWYWwpOwotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9IVFhfQlVSU1Q6Ci0JY2FzZSBTS19QTk1JX0hUWF9FWENFU1NfREVGOgotCWNhc2UgU0tfUE5NSV9IVFhfQ0FSUklFUjoKLQkJLyogTm90IHN1cHBvcnRlZCBieSBHTUFDICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19HTUFDKSB7Ci0JCQlyZXR1cm4gKFZhbCk7Ci0JCX0KLQotCQkodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkJCQkJCSAgU3RhdEFkZHJbU3RhdEluZGV4XVtNYWNUeXBlXS5SZWcsCi0JCQkJCQkJCQkgICZMb3dWYWwpOwotCQlIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07Ci0JCWJyZWFrOwotCi0JY2FzZSBTS19QTk1JX0hUWF9NQUNDOgotCQkvKiBHTUFDIG9ubHkgc3VwcG9ydHMgUEFVU0UgTUFDIGNvbnRyb2wgZnJhbWVzICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19HTUFDKSB7Ci0JCQlIZWxwSW5kZXggPSBTS19QTk1JX0hUWF9QTUFDQzsKLQkJfQotCQllbHNlIHsKLQkJCUhlbHBJbmRleCA9IFN0YXRJbmRleDsKLQkJfQotCQkKLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCVN0YXRBZGRyW0hlbHBJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkmTG93VmFsKTsKLQotCQlIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07Ci0JCWJyZWFrOwotCi0JY2FzZSBTS19QTk1JX0hUWF9DT0w6Ci0JY2FzZSBTS19QTk1JX0hSWF9VTkRFUlNJWkU6Ci0JCS8qIE5vdCBzdXBwb3J0ZWQgYnkgWE1BQyAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJcmV0dXJuIChWYWwpOwotCQl9Ci0KLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJICAmTG93VmFsKTsKLQkJSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9IVFhfREVGRkVSQUw6Ci0JCS8qIE5vdCBzdXBwb3J0ZWQgYnkgR01BQyAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfR01BQykgewotCQkJcmV0dXJuIChWYWwpOwotCQl9Ci0JCQotCQkvKgotCQkgKiBYTUFDIGNvdW50cyBmcmFtZXMgd2l0aCBkZWZlcnJlZCB0cmFuc21pc3Npb24KLQkJICogZXZlbiBpbiBmdWxsLWR1cGxleCBtb2RlLgotCQkgKgotCQkgKiBJbiBmdWxsLWR1cGxleCBtb2RlIHRoZSBjb3VudGVyIHJlbWFpbnMgY29uc3RhbnQhCi0JCSAqLwotCQlpZiAoKHBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0FVVE9GVUxMKSB8fAotCQkJKHBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0ZVTEwpKSB7Ci0KLQkJCUxvd1ZhbCA9IDA7Ci0JCQlIaWdoVmFsID0gMDsKLQkJfQotCQllbHNlIHsKLQkJCS8qIE90aGVyd2lzZSBnZXQgY29udGVudHMgb2YgaGFyZHdhcmUgcmVnaXN0ZXIgKi8KLQkJCSh2b2lkKXBGbk1hYy0+cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAotCQkJCQkJCQkJCSAgU3RhdEFkZHJbU3RhdEluZGV4XVtNYWNUeXBlXS5SZWcsCi0JCQkJCQkJCQkJICAmTG93VmFsKTsKLQkJCUhpZ2hWYWwgPSBwUG5taVBydC0+Q291bnRlckhpZ2hbU3RhdEluZGV4XTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9IUlhfQkFET0NURVQ6Ci0JCS8qIE5vdCBzdXBwb3J0ZWQgYnkgWE1BQyAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJcmV0dXJuIChWYWwpOwotCQl9Ci0KLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJICAmSGlnaFZhbCk7Ci0JCSh2b2lkKXBGbk1hYy0+cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAotCQkJCQkJCQkJICBTdGF0QWRkcltTdGF0SW5kZXggKyAxXVtNYWNUeXBlXS5SZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMb3dWYWwpOwotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9IVFhfT0NURVRMT1c6Ci0JY2FzZSBTS19QTk1JX0hSWF9PQ1RFVExPVzoKLQljYXNlIFNLX1BOTUlfSFJYX0JBRE9DVEVUTE9XOgotCQlyZXR1cm4gKFZhbCk7Ci0KLQljYXNlIFNLX1BOTUlfSFJYX0xPTkdGUkFNRVM6Ci0JCS8qIEZvciBYTUFDIHRoZSBTVyBjb3VudGVyIGlzIG1hbmFnZWQgYnkgUE5NSSAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfWE1BQykgewotCQkJcmV0dXJuIChwUG5taVBydC0+U3RhdFJ4TG9uZ0ZyYW1lQ3RzKTsKLQkJfQotCQkKLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJICAmTG93VmFsKTsKLQkJSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwotCQlicmVhazsKLQkJCi0JY2FzZSBTS19QTk1JX0hSWF9UT09fTE9ORzoKLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCVN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkmTG93VmFsKTsKLQkJSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwotCQkKLQkJVmFsID0gKCgoU0tfVTY0KUhpZ2hWYWwgPDwgMzIpIHwgKFNLX1U2NClMb3dWYWwpOwotCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19HTUFDKSB7Ci0JCQkvKiBGb3IgR01BQyB0aGUgU1cgY291bnRlciBpcyBhZGRpdGlvbmFsbHkgbWFuYWdlZCBieSBQTk1JICovCi0JCQlWYWwgKz0gcFBubWlQcnQtPlN0YXRSeEZyYW1lVG9vTG9uZ0N0czsKLQkJfQotCQllbHNlIHsKLQkJCS8qCi0JCQkgKiBGcmFtZXMgbG9uZ2VyIHRoYW4gSUVFRSA4MDIuMyBmcmFtZSBtYXggc2l6ZSBhcmUgY291bnRlZAotCQkJICogYnkgWE1BQyBpbiBmcmFtZV90b29fbG9uZyBjb3VudGVyIGV2ZW4gcmVjZXB0aW9uIG9mIGxvbmcKLQkJCSAqIGZyYW1lcyB3YXMgZW5hYmxlZCBhbmQgdGhlIGZyYW1lIHdhcyBjb3JyZWN0LgotCQkJICogU28gY29ycmVjdCB0aGUgdmFsdWUgYnkgc3VidHJhY3RpbmcgUnhMb25nRnJhbWUgY291bnRlci4KLQkJCSAqLwotCQkJVmFsIC09IHBQbm1pUHJ0LT5TdGF0UnhMb25nRnJhbWVDdHM7Ci0JCX0KLQotCQlMb3dWYWwgPSAoU0tfVTMyKVZhbDsKLQkJSGlnaFZhbCA9IChTS19VMzIpKFZhbCA+PiAzMik7Ci0JCWJyZWFrOwotCQkKLQljYXNlIFNLX1BOTUlfSFJYX1NIT1JUUzoKLQkJLyogTm90IHN1cHBvcnRlZCBieSBHTUFDICovCi0JCWlmIChNYWNUeXBlID09IFNLX01BQ19HTUFDKSB7Ci0JCQkvKiBHTV9SWEVfRlJBRz8/ICovCi0JCQlyZXR1cm4gKFZhbCk7Ci0JCX0KLQkJCi0JCS8qCi0JCSAqIFhNQUMgY291bnRzIHNob3J0IGZyYW1lIGVycm9ycyBldmVuIGlmIGxpbmsgZG93biAoIzEwNjIwKQotCQkgKgotCQkgKiBJZiBsaW5rLWRvd24gdGhlIGNvdW50ZXIgcmVtYWlucyBjb25zdGFudAotCQkgKi8KLQkJaWYgKHBQcnQtPlBMaW5rTW9kZVN0YXR1cyAhPSBTS19MTU9ERV9TVEFUX1VOS05PV04pIHsKLQotCQkJLyogT3RoZXJ3aXNlIGdldCBpbmNyZW1lbnRhbCBkaWZmZXJlbmNlICovCi0JCQkodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJCSAgJkxvd1ZhbCk7Ci0JCQlIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07Ci0KLQkJCVZhbCA9ICgoKFNLX1U2NClIaWdoVmFsIDw8IDMyKSB8IChTS19VNjQpTG93VmFsKTsKLQkJCVZhbCAtPSBwUG5taVBydC0+UnhTaG9ydFplcm9NYXJrOwotCi0JCQlMb3dWYWwgPSAoU0tfVTMyKVZhbDsKLQkJCUhpZ2hWYWwgPSAoU0tfVTMyKShWYWwgPj4gMzIpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBTS19QTk1JX0hSWF9NQUNDOgotCWNhc2UgU0tfUE5NSV9IUlhfTUFDQ19VTktXTjoKLQljYXNlIFNLX1BOTUlfSFJYX0JVUlNUOgotCWNhc2UgU0tfUE5NSV9IUlhfTUlTU0VEOgotCWNhc2UgU0tfUE5NSV9IUlhfRlJBTUlORzoKLQljYXNlIFNLX1BOTUlfSFJYX0NBUlJJRVI6Ci0JY2FzZSBTS19QTk1JX0hSWF9JUkxFTkdUSDoKLQljYXNlIFNLX1BOTUlfSFJYX1NZTUJPTDoKLQljYXNlIFNLX1BOTUlfSFJYX0NFWFQ6Ci0JCS8qIE5vdCBzdXBwb3J0ZWQgYnkgR01BQyAqLwotCQlpZiAoTWFjVHlwZSA9PSBTS19NQUNfR01BQykgewotCQkJcmV0dXJuIChWYWwpOwotCQl9Ci0KLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJICAmTG93VmFsKTsKLQkJSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwotCQlicmVhazsKLQotCWNhc2UgU0tfUE5NSV9IUlhfUE1BQ0NfRVJSOgotCQkvKiBGb3IgR01BQyB0aGUgU1cgY291bnRlciBpcyBtYW5hZ2VkIGJ5IFBOTUkgKi8KLQkJaWYgKE1hY1R5cGUgPT0gU0tfTUFDX0dNQUMpIHsKLQkJCXJldHVybiAocFBubWlQcnQtPlN0YXRSeFBNYWNjRXJyKTsKLQkJfQotCQkKLQkJKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCi0JCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJICAmTG93VmFsKTsKLQkJSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwotCQlicmVhazsKLQotCS8qIFNXIGNvdW50ZXIgbWFuYWdlZCBieSBQTk1JICovCi0JY2FzZSBTS19QTk1JX0hUWF9TWU5DOgotCQlMb3dWYWwgPSAoU0tfVTMyKXBQbm1pUHJ0LT5TdGF0U3luY0N0czsKLQkJSGlnaFZhbCA9IChTS19VMzIpKHBQbm1pUHJ0LT5TdGF0U3luY0N0cyA+PiAzMik7Ci0JCWJyZWFrOwotCi0JLyogU1cgY291bnRlciBtYW5hZ2VkIGJ5IFBOTUkgKi8KLQljYXNlIFNLX1BOTUlfSFRYX1NZTkNfT0NURVQ6Ci0JCUxvd1ZhbCA9IChTS19VMzIpcFBubWlQcnQtPlN0YXRTeW5jT2N0ZXRzQ3RzOwotCQlIaWdoVmFsID0gKFNLX1UzMikocFBubWlQcnQtPlN0YXRTeW5jT2N0ZXRzQ3RzID4+IDMyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX1BOTUlfSFJYX0ZDUzoKLQkJLyoKLQkJICogQnJvYWRjb20gZmlsdGVycyBGQ1MgZXJyb3JzIGFuZCBjb3VudHMgaXQgaW4KLQkJICogUmVjZWl2ZSBFcnJvciBDb3VudGVyIHJlZ2lzdGVyCi0JCSAqLwotCQlpZiAocFBydC0+UGh5VHlwZSA9PSBTS19QSFlfQkNPTSkgewotCQkJLyogZG8gbm90IHJlYWQgd2hpbGUgbm90IGluaXRpYWxpemVkIChQSFlfUkVBRCBoYW5ncyEpKi8KLQkJCWlmIChwUHJ0LT5QU3RhdGUgIT0gU0tfUFJUX1JFU0VUKSB7Ci0JCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsIFBIWV9CQ09NX1JFX0NUUiwgJldvcmQpOwotCQkJCQotCQkJCUxvd1ZhbCA9IFdvcmQ7Ci0JCQl9Ci0JCQlIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07Ci0JCX0KLQkJZWxzZSB7Ci0JCQkodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkJCQkJCQkgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAotCQkJCQkJCQkJCSAgJkxvd1ZhbCk7Ci0JCQlIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQkodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKLQkJCQkJCQkJCSAgU3RhdEFkZHJbU3RhdEluZGV4XVtNYWNUeXBlXS5SZWcsCi0JCQkJCQkJCQkgICZMb3dWYWwpOwotCQlIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07Ci0JCWJyZWFrOwotCX0KLQotCVZhbCA9ICgoKFNLX1U2NClIaWdoVmFsIDw8IDMyKSB8IChTS19VNjQpTG93VmFsKTsKLQotCS8qIENvcnJlY3QgdmFsdWUgYmVjYXVzZSBvZiBwb3NzaWJsZSBYTUFDIHJlc2V0LiBYTUFDIEVycmF0YSAjMiAqLwotCVZhbCArPSBwUG5taVBydC0+Q291bnRlck9mZnNldFtTdGF0SW5kZXhdOwotCi0JcmV0dXJuIChWYWwpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBSZXNldENvdW50ZXIgLSBTZXQgYWxsIGNvdW50ZXJzIGFuZCB0aW1lc3RhbXBzIHRvIHplcm8KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU5vdGlmaWVzIG90aGVyIGNvbW1vbiBtb2R1bGVzIHdoaWNoIHN0b3JlIHN0YXRpc3RpYyBkYXRhIHRvCi0gKglyZXNldCB0aGVpciBjb3VudGVycyBhbmQgZmluYWxseSByZXNldCBvdXIgb3duIGNvdW50ZXJzLgotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVBOTUlfU1RBVElDIHZvaWQgUmVzZXRDb3VudGVyKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLVNLX1UzMiBOZXRJbmRleCkKLXsKLQl1bnNpZ25lZCBpbnQJUGh5c1BvcnRJbmRleDsKLQlTS19FVlBBUkEJRXZlbnRQYXJhbTsKLQotCi0JU0tfTUVNU0VUKChjaGFyICopJkV2ZW50UGFyYW0sIDAsIHNpemVvZihFdmVudFBhcmFtKSk7Ci0KLQkvKiBOb3RpZnkgc2Vuc29yIG1vZHVsZSAqLwotCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfSTJDLCBTS19JMkNFVl9DTEVBUiwgRXZlbnRQYXJhbSk7Ci0KLQkvKiBOb3RpZnkgUkxNVCBtb2R1bGUgKi8KLQlFdmVudFBhcmFtLlBhcmEzMlswXSA9IE5ldEluZGV4OwotCUV2ZW50UGFyYW0uUGFyYTMyWzFdID0gKFNLX1UzMiktMTsKLQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfU1RBVFNfQ0xFQVIsIEV2ZW50UGFyYW0pOwotCUV2ZW50UGFyYW0uUGFyYTMyWzFdID0gMDsKLQotCS8qIE5vdGlmeSBTSVJRIG1vZHVsZSAqLwotCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfSFdBQywgU0tfSFdFVl9DTEVBUl9TVEFULCBFdmVudFBhcmFtKTsKLQotCS8qIE5vdGlmeSBDU1VNIG1vZHVsZSAqLwotI2lmZGVmIFNLX1VTRV9DU1VNCi0JRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSBOZXRJbmRleDsKLQlFdmVudFBhcmFtLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9DU1VNLCBTS19DU1VNX0VWRU5UX0NMRUFSX1BST1RPX1NUQVRTLAotCQlFdmVudFBhcmFtKTsKLSNlbmRpZiAvKiBTS19VU0VfQ1NVTSAqLwotCQotCS8qIENsZWFyIFhNQUMgc3RhdGlzdGljICovCi0JZm9yIChQaHlzUG9ydEluZGV4ID0gMDsgUGh5c1BvcnRJbmRleCA8Ci0JCSh1bnNpZ25lZCBpbnQpcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBQaHlzUG9ydEluZGV4ICsrKSB7Ci0KLQkJKHZvaWQpcEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNSZXNldENvdW50ZXIocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgpOwotCi0JCVNLX01FTVNFVCgoY2hhciAqKSZwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5Db3VudGVySGlnaCwKLQkJCTAsIHNpemVvZihwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5Db3VudGVySGlnaCkpOwotCQlTS19NRU1TRVQoKGNoYXIgKikmcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uCi0JCQlDb3VudGVyT2Zmc2V0LCAwLCBzaXplb2YocEFDLT5Qbm1pLlBvcnRbCi0JCQlQaHlzUG9ydEluZGV4XS5Db3VudGVyT2Zmc2V0KSk7Ci0JCVNLX01FTVNFVCgoY2hhciAqKSZwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5TdGF0U3luY0N0cywKLQkJCTAsIHNpemVvZihwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5TdGF0U3luY0N0cykpOwotCQlTS19NRU1TRVQoKGNoYXIgKikmcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uCi0JCQlTdGF0U3luY09jdGV0c0N0cywgMCwgc2l6ZW9mKHBBQy0+UG5taS5Qb3J0WwotCQkJUGh5c1BvcnRJbmRleF0uU3RhdFN5bmNPY3RldHNDdHMpKTsKLQkJU0tfTUVNU0VUKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgotCQkJU3RhdFJ4TG9uZ0ZyYW1lQ3RzLCAwLCBzaXplb2YocEFDLT5Qbm1pLlBvcnRbCi0JCQlQaHlzUG9ydEluZGV4XS5TdGF0UnhMb25nRnJhbWVDdHMpKTsKLQkJU0tfTUVNU0VUKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgotCQkJCSAgU3RhdFJ4RnJhbWVUb29Mb25nQ3RzLCAwLCBzaXplb2YocEFDLT5Qbm1pLlBvcnRbCi0JCQlQaHlzUG9ydEluZGV4XS5TdGF0UnhGcmFtZVRvb0xvbmdDdHMpKTsKLQkJU0tfTUVNU0VUKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgotCQkJCSAgU3RhdFJ4UE1hY2NFcnIsIDAsIHNpemVvZihwQUMtPlBubWkuUG9ydFsKLQkJCVBoeXNQb3J0SW5kZXhdLlN0YXRSeFBNYWNjRXJyKSk7Ci0JfQotCi0JLyoKLQkgKiBDbGVhciBsb2NhbCBzdGF0aXN0aWNzCi0JICovCi0JU0tfTUVNU0VUKChjaGFyICopJnBBQy0+UG5taS5WaXJ0dWFsQ291bnRlck9mZnNldCwgMCwKLQkJICBzaXplb2YocEFDLT5Qbm1pLlZpcnR1YWxDb3VudGVyT2Zmc2V0KSk7Ci0JcEFDLT5Qbm1pLlJsbXRDaGFuZ2VDdHMgPSAwOwotCXBBQy0+UG5taS5SbG10Q2hhbmdlVGltZSA9IDA7Ci0JU0tfTUVNU0VUKChjaGFyICopJnBBQy0+UG5taS5SbG10Q2hhbmdlRXN0aW1hdGUuRXN0VmFsdWVbMF0sIDAsCi0JCXNpemVvZihwQUMtPlBubWkuUmxtdENoYW5nZUVzdGltYXRlLkVzdFZhbHVlKSk7Ci0JcEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RWYWx1ZUluZGV4ID0gMDsKLQlwQUMtPlBubWkuUmxtdENoYW5nZUVzdGltYXRlLkVzdGltYXRlID0gMDsKLQlwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uVHhTd1F1ZXVlTWF4ID0gMDsKLQlwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uVHhSZXRyeUN0cyA9IDA7Ci0JcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlJ4SW50ckN0cyA9IDA7Ci0JcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlR4SW50ckN0cyA9IDA7Ci0JcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlJ4Tm9CdWZDdHMgPSAwOwotCXBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeE5vQnVmQ3RzID0gMDsKLQlwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uVHhVc2VkRGVzY3JObyA9IDA7Ci0JcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlJ4RGVsaXZlcmVkQ3RzID0gMDsKLQlwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0uUnhPY3RldHNEZWxpdmVyZWRDdHMgPSAwOwotCXBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5FcnJSZWNvdmVyeUN0cyA9IDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEdldFRyYXBFbnRyeSAtIEdldCBhbiBlbnRyeSBpbiB0aGUgdHJhcCBidWZmZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSB0cmFwIGJ1ZmZlciBzdG9yZXMgdmFyaW91cyBldmVudHMuIEEgdXNlciBhcHBsaWNhdGlvbiBzb21laG93Ci0gKglnZXRzIG5vdGlmaWVkIHRoYXQgYW4gZXZlbnQgb2NjdXJlZCBhbmQgcmV0cmlldmVzIHRoZSB0cmFwIGJ1ZmZlcgotICoJY29udGVucyAob3Igc2ltcGx5IHBvbGxzIHRoZSBidWZmZXIpLiBUaGUgYnVmZmVyIGlzIG9yZ2FuaXplZCBhcwotICoJYSByaW5nIHdoaWNoIHN0b3JlcyB0aGUgbmV3ZXN0IHRyYXBzIGF0IHRoZSBiZWdpbm5pbmcuIFRoZSBvbGRlc3QKLSAqCXRyYXBzIGFyZSBvdmVyd3JpdHRlbiBieSB0aGUgbmV3ZXN0IG9uZXMuIEVhY2ggdHJhcCBlbnRyeSBoYXMgYQotICoJdW5pcXVlIG51bWJlciwgc28gdGhhdCBhcHBsaWNhdGlvbnMgbWF5IGRldGVjdCBuZXcgdHJhcCBlbnRyaWVzLgotICoKLSAqIFJldHVybnM6Ci0gKglBIHBvaW50ZXIgdG8gdGhlIHRyYXAgZW50cnkKLSAqLwotUE5NSV9TVEFUSUMgY2hhciogR2V0VHJhcEVudHJ5KAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19VMzIgVHJhcElkLAkJLyogU05NUCBJRCBvZiB0aGUgdHJhcCAqLwotdW5zaWduZWQgaW50IFNpemUpCS8qIFNwYWNlIG5lZWRlZCBmb3IgdHJhcCBlbnRyeSAqLwotewotCXVuc2lnbmVkIGludAkJQnVmUGFkID0gcEFDLT5Qbm1pLlRyYXBCdWZQYWQ7Ci0JdW5zaWduZWQgaW50CQlCdWZGcmVlID0gcEFDLT5Qbm1pLlRyYXBCdWZGcmVlOwotCXVuc2lnbmVkIGludAkJQmVnID0gcEFDLT5Qbm1pLlRyYXBRdWV1ZUJlZzsKLQl1bnNpZ25lZCBpbnQJCUVuZCA9IHBBQy0+UG5taS5UcmFwUXVldWVFbmQ7Ci0JY2hhcgkJCSpwQnVmID0gJnBBQy0+UG5taS5UcmFwQnVmWzBdOwotCWludAkJCVdyYXA7Ci0JdW5zaWduZWQgaW50CQlOZWVkZWRTcGFjZTsKLQl1bnNpZ25lZCBpbnQJCUVudHJ5U2l6ZTsKLQlTS19VMzIJCQlWYWwzMjsKLQlTS19VNjQJCQlWYWw2NDsKLQotCi0JLyogTGFzdCBieXRlIG9mIGVudHJ5IHdpbGwgZ2V0IGEgY29weSBvZiB0aGUgZW50cnkgbGVuZ3RoICovCi0JU2l6ZSArKzsKLQotCS8qCi0JICogQ2FsY3VsYXRlIG5lZWRlZCBidWZmZXIgc3BhY2UgKi8KLQlpZiAoQmVnID49IFNpemUpIHsKLQotCQlOZWVkZWRTcGFjZSA9IFNpemU7Ci0JCVdyYXAgPSBTS19GQUxTRTsKLQl9Ci0JZWxzZSB7Ci0JCU5lZWRlZFNwYWNlID0gQmVnICsgU2l6ZTsKLQkJV3JhcCA9IFNLX1RSVUU7Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBpZiBlbm91Z2ggYnVmZmVyIHNwYWNlIGlzIHByb3ZpZGVkLiBPdGhlcndpc2UKLQkgKiBmcmVlIHNvbWUgZW50cmllcy4gTGVhdmUgb25lIGJ5dGUgc3BhY2UgYmV0d2VlbiBiZWdpbgotCSAqIGFuZCBlbmQgb2YgYnVmZmVyIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gZGV0ZWN0IHdoZXRoZXIKLQkgKiB0aGUgYnVmZmVyIGlzIGZ1bGwgb3IgZW1wdHkKLQkgKi8KLQl3aGlsZSAoQnVmRnJlZSA8IE5lZWRlZFNwYWNlICsgMSkgewotCi0JCWlmIChFbmQgPT0gMCkgewotCi0JCQlFbmQgPSBTS19QTk1JX1RSQVBfUVVFVUVfTEVOOwotCQl9Ci0KLQkJRW50cnlTaXplID0gKHVuc2lnbmVkIGludCkqKCh1bnNpZ25lZCBjaGFyICopcEJ1ZiArIEVuZCAtIDEpOwotCQlCdWZGcmVlICs9IEVudHJ5U2l6ZTsKLQkJRW5kIC09IEVudHJ5U2l6ZTsKLSNpZmRlZiBERUJVRwotCQlTS19NRU1TRVQocEJ1ZiArIEVuZCwgKGNoYXIpKC0xKSwgRW50cnlTaXplKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCQlpZiAoRW5kID09IEJ1ZlBhZCkgewotI2lmZGVmIERFQlVHCi0JCQlTS19NRU1TRVQocEJ1ZiwgKGNoYXIpKC0xKSwgRW5kKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCQkJQnVmRnJlZSArPSBFbmQ7Ci0JCQlFbmQgPSAwOwotCQkJQnVmUGFkID0gMDsKLQkJfQotCX0KLQotCS8qCi0JICogSW5zZXJ0IG5ldyBlbnRyeSBhcyBmaXJzdCBlbnRyeS4gTmV3ZXN0IGVudHJpZXMgYXJlCi0JICogc3RvcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlLgotCSAqLwotCWlmIChXcmFwKSB7Ci0KLQkJQnVmUGFkID0gQmVnOwotCQlCZWcgPSBTS19QTk1JX1RSQVBfUVVFVUVfTEVOIC0gU2l6ZTsKLQl9Ci0JZWxzZSB7Ci0JCUJlZyA9IEJlZyAtIFNpemU7Ci0JfQotCUJ1ZkZyZWUgLT0gTmVlZGVkU3BhY2U7Ci0KLQkvKiBTYXZlIHRoZSBjdXJyZW50IG9mZnNldHMgKi8KLQlwQUMtPlBubWkuVHJhcFF1ZXVlQmVnID0gQmVnOwotCXBBQy0+UG5taS5UcmFwUXVldWVFbmQgPSBFbmQ7Ci0JcEFDLT5Qbm1pLlRyYXBCdWZQYWQgPSBCdWZQYWQ7Ci0JcEFDLT5Qbm1pLlRyYXBCdWZGcmVlID0gQnVmRnJlZTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHRyYXAgZW50cnkgKi8KLQkqKHBCdWYgKyBCZWcgKyBTaXplIC0gMSkgPSAoY2hhcilTaXplOwotCSoocEJ1ZiArIEJlZykgPSAoY2hhcilTaXplOwotCVZhbDMyID0gKHBBQy0+UG5taS5UcmFwVW5pcXVlKSArKzsKLQlTS19QTk1JX1NUT1JFX1UzMihwQnVmICsgQmVnICsgMSwgVmFsMzIpOwotCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYgKyBCZWcgKyAxICsgc2l6ZW9mKFNLX1UzMiksIFRyYXBJZCk7Ci0JVmFsNjQgPSBTS19QTk1JX0hVTkRSRURTX1NFQyhTa09zR2V0VGltZShwQUMpKTsKLQlTS19QTk1JX1NUT1JFX1U2NChwQnVmICsgQmVnICsgMSArIDIgKiBzaXplb2YoU0tfVTMyKSwgVmFsNjQpOwotCi0JcmV0dXJuIChwQnVmICsgQmVnKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weVRyYXBRdWV1ZSAtIENvcGllcyB0aGUgdHJhcCBidWZmZXIgZm9yIHRoZSBUUkFQIE9JRAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJT24gYSBxdWVyeSBvZiB0aGUgVFJBUCBPSUQgdGhlIHRyYXAgYnVmZmVyIGNvbnRlbnRzIHdpbGwgYmUKLSAqCWNvcGllZCBjb250aW51b3VzbHkgdG8gdGhlIHJlcXVlc3QgYnVmZmVyLCB3aGljaCBtdXN0IGJlIGxhcmdlCi0gKgllbm91Z2guIE5vIGxlbmd0aCBjaGVjayBpcyBwZXJmb3JtZWQuCi0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcKLSAqLwotUE5NSV9TVEFUSUMgdm9pZCBDb3B5VHJhcFF1ZXVlKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1jaGFyICpwRHN0QnVmKQkJLyogQnVmZmVyIHRvIHdoaWNoIHRoZSBxdWV1ZWQgdHJhcHMgd2lsbCBiZSBjb3BpZWQgKi8KLXsKLQl1bnNpZ25lZCBpbnQJQnVmUGFkID0gcEFDLT5Qbm1pLlRyYXBCdWZQYWQ7Ci0JdW5zaWduZWQgaW50CVRyYXAgPSBwQUMtPlBubWkuVHJhcFF1ZXVlQmVnOwotCXVuc2lnbmVkIGludAlFbmQgPSBwQUMtPlBubWkuVHJhcFF1ZXVlRW5kOwotCWNoYXIJCSpwQnVmID0gJnBBQy0+UG5taS5UcmFwQnVmWzBdOwotCXVuc2lnbmVkIGludAlMZW47Ci0JdW5zaWduZWQgaW50CURzdE9mZiA9IDA7Ci0KLQotCXdoaWxlIChUcmFwICE9IEVuZCkgewotCi0JCUxlbiA9ICh1bnNpZ25lZCBpbnQpKihwQnVmICsgVHJhcCk7Ci0KLQkJLyoKLQkJICogTGFzdCBieXRlIGNvbnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBsZW5ndGggd2lsbAotCQkgKiBub3QgYmUgY29waWVkLgotCQkgKi8KLQkJKihwRHN0QnVmICsgRHN0T2ZmKSA9IChjaGFyKShMZW4gLSAxKTsKLQkJU0tfTUVNQ1BZKHBEc3RCdWYgKyBEc3RPZmYgKyAxLCBwQnVmICsgVHJhcCArIDEsIExlbiAtIDIpOwotCQlEc3RPZmYgKz0gTGVuIC0gMTsKLQotCQlUcmFwICs9IExlbjsKLQkJaWYgKFRyYXAgPT0gU0tfUE5NSV9UUkFQX1FVRVVFX0xFTikgewotCi0JCQlUcmFwID0gQnVmUGFkOwotCQl9Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHZXRUcmFwUXVldWVMZW4gLSBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgdHJhcCBidWZmZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUV2YWx1YXRlcyB0aGUgbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgdHJhcHMgYW5kIHRoZSBuZWVkZWQKLSAqCWJ1ZmZlciBzaXplIHRvIHJldHJpZXZlIHRoZW0uCi0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcKLSAqLwotUE5NSV9TVEFUSUMgdm9pZCBHZXRUcmFwUXVldWVMZW4oCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogTGVuZ3RoIGluIEJ5dGVzIG9mIGFsbCBxdWV1ZWQgdHJhcHMgKi8KLXVuc2lnbmVkIGludCAqcEVudHJpZXMpCS8qIFJldHVybnMgbnVtYmVyIG9mIHRyYXBlcyBzdG9yZWQgaW4gcXVldWUgKi8KLXsKLQl1bnNpZ25lZCBpbnQJQnVmUGFkID0gcEFDLT5Qbm1pLlRyYXBCdWZQYWQ7Ci0JdW5zaWduZWQgaW50CVRyYXAgPSBwQUMtPlBubWkuVHJhcFF1ZXVlQmVnOwotCXVuc2lnbmVkIGludAlFbmQgPSBwQUMtPlBubWkuVHJhcFF1ZXVlRW5kOwotCWNoYXIJCSpwQnVmID0gJnBBQy0+UG5taS5UcmFwQnVmWzBdOwotCXVuc2lnbmVkIGludAlMZW47Ci0JdW5zaWduZWQgaW50CUVudHJpZXMgPSAwOwotCXVuc2lnbmVkIGludAlUb3RhbExlbiA9IDA7Ci0KLQotCXdoaWxlIChUcmFwICE9IEVuZCkgewotCi0JCUxlbiA9ICh1bnNpZ25lZCBpbnQpKihwQnVmICsgVHJhcCk7Ci0JCVRvdGFsTGVuICs9IExlbiAtIDE7Ci0JCUVudHJpZXMgKys7Ci0KLQkJVHJhcCArPSBMZW47Ci0JCWlmIChUcmFwID09IFNLX1BOTUlfVFJBUF9RVUVVRV9MRU4pIHsKLQotCQkJVHJhcCA9IEJ1ZlBhZDsKLQkJfQotCX0KLQotCSpwRW50cmllcyA9IEVudHJpZXM7Ci0JKnBMZW4gPSBUb3RhbExlbjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUXVldWVTaW1wbGVUcmFwIC0gU3RvcmUgYSBzaW1wbGUgdHJhcCB0byB0aGUgdHJhcCBidWZmZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUEgc2ltcGxlIHRyYXAgaXMgYSB0cmFwIHdpdGggbm93IGFkZGl0aW9uYWwgZGF0YS4gSXQgY29uc2lzdHMKLSAqCXNpbXBseSBvZiBhIHRyYXAgY29kZS4KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1QTk1JX1NUQVRJQyB2b2lkIFF1ZXVlU2ltcGxlVHJhcCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfVTMyIFRyYXBJZCkJCS8qIFR5cGUgb2Ygc2Vuc29yIHRyYXAgKi8KLXsKLQlHZXRUcmFwRW50cnkocEFDLCBUcmFwSWQsIFNLX1BOTUlfVFJBUF9TSU1QTEVfTEVOKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUXVldWVTZW5zb3JUcmFwIC0gU3RvcmVzIGEgc2Vuc29yIHRyYXAgaW4gdGhlIHRyYXAgYnVmZmVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglHZXRzIGFuIGVudHJ5IGluIHRoZSB0cmFwIGJ1ZmZlciBhbmQgZmlsbHMgaXQgd2l0aCBzZW5zb3IgcmVsYXRlZAotICoJZGF0YS4KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1QTk1JX1NUQVRJQyB2b2lkIFF1ZXVlU2Vuc29yVHJhcCgKLVNLX0FDICpwQUMsCQkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX1UzMiBUcmFwSWQsCQkJLyogVHlwZSBvZiBzZW5zb3IgdHJhcCAqLwotdW5zaWduZWQgaW50IFNlbnNvckluZGV4KQkvKiBJbmRleCBvZiBzZW5zb3Igd2hpY2ggY2F1c2VkIHRoZSB0cmFwICovCi17Ci0JY2hhcgkJKnBCdWY7Ci0JdW5zaWduZWQgaW50CU9mZnNldDsKLQl1bnNpZ25lZCBpbnQJRGVzY3JMZW47Ci0JU0tfVTMyCQlWYWwzMjsKLQotCi0JLyogR2V0IHRyYXAgYnVmZmVyIGVudHJ5ICovCi0JRGVzY3JMZW4gPSBTS19TVFJMRU4ocEFDLT5JMmMuU2VuVGFibGVbU2Vuc29ySW5kZXhdLlNlbkRlc2MpOwotCXBCdWYgPSBHZXRUcmFwRW50cnkocEFDLCBUcmFwSWQsCi0JCVNLX1BOTUlfVFJBUF9TRU5TT1JfTEVOX0JBU0UgKyBEZXNjckxlbik7Ci0JT2Zmc2V0ID0gU0tfUE5NSV9UUkFQX1NJTVBMRV9MRU47Ci0KLQkvKiBTdG9yZSBhZGRpdGlvbmFsbHkgc2Vuc29yIHRyYXAgcmVsYXRlZCBkYXRhICovCi0JVmFsMzIgPSBPSURfU0tHRV9TRU5TT1JfSU5ERVg7Ci0JU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIE9mZnNldCwgVmFsMzIpOwotCSoocEJ1ZiArIE9mZnNldCArIDQpID0gNDsKLQlWYWwzMiA9IChTS19VMzIpU2Vuc29ySW5kZXg7Ci0JU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIE9mZnNldCArIDUsIFZhbDMyKTsKLQlPZmZzZXQgKz0gOTsKLQkKLQlWYWwzMiA9IChTS19VMzIpT0lEX1NLR0VfU0VOU09SX0RFU0NSOwotCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYgKyBPZmZzZXQsIFZhbDMyKTsKLQkqKHBCdWYgKyBPZmZzZXQgKyA0KSA9IChjaGFyKURlc2NyTGVuOwotCVNLX01FTUNQWShwQnVmICsgT2Zmc2V0ICsgNSwgcEFDLT5JMmMuU2VuVGFibGVbU2Vuc29ySW5kZXhdLlNlbkRlc2MsCi0JCURlc2NyTGVuKTsKLQlPZmZzZXQgKz0gRGVzY3JMZW4gKyA1OwotCi0JVmFsMzIgPSBPSURfU0tHRV9TRU5TT1JfVFlQRTsKLQlTS19QTk1JX1NUT1JFX1UzMihwQnVmICsgT2Zmc2V0LCBWYWwzMik7Ci0JKihwQnVmICsgT2Zmc2V0ICsgNCkgPSAxOwotCSoocEJ1ZiArIE9mZnNldCArIDUpID0gKGNoYXIpcEFDLT5JMmMuU2VuVGFibGVbU2Vuc29ySW5kZXhdLlNlblR5cGU7Ci0JT2Zmc2V0ICs9IDY7Ci0KLQlWYWwzMiA9IE9JRF9TS0dFX1NFTlNPUl9WQUxVRTsKLQlTS19QTk1JX1NUT1JFX1UzMihwQnVmICsgT2Zmc2V0LCBWYWwzMik7Ci0JKihwQnVmICsgT2Zmc2V0ICsgNCkgPSA0OwotCVZhbDMyID0gKFNLX1UzMilwQUMtPkkyYy5TZW5UYWJsZVtTZW5zb3JJbmRleF0uU2VuVmFsdWU7Ci0JU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIE9mZnNldCArIDUsIFZhbDMyKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUXVldWVSbG10TmV3TWFjVHJhcCAtIFN0b3JlIGEgcG9ydCBzd2l0Y2ggdHJhcCBpbiB0aGUgdHJhcCBidWZmZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCU5vdGhpbmcgZnVydGhlciB0byBleHBsYWluLgotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVBOTUlfU1RBVElDIHZvaWQgUXVldWVSbG10TmV3TWFjVHJhcCgKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotdW5zaWduZWQgaW50IEFjdGl2ZU1hYykJLyogSW5kZXggKDAuLm4pIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHBvcnQgKi8KLXsKLQljaGFyCSpwQnVmOwotCVNLX1UzMglWYWwzMjsKLQotCi0JcEJ1ZiA9IEdldFRyYXBFbnRyeShwQUMsIE9JRF9TS0dFX1RSQVBfUkxNVF9DSEFOR0VfUE9SVCwKLQkJU0tfUE5NSV9UUkFQX1JMTVRfQ0hBTkdFX0xFTik7Ci0KLQlWYWwzMiA9IE9JRF9TS0dFX1JMTVRfUE9SVF9BQ1RJVkU7Ci0JU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiArIFNLX1BOTUlfVFJBUF9TSU1QTEVfTEVOLCBWYWwzMik7Ci0JKihwQnVmICsgU0tfUE5NSV9UUkFQX1NJTVBMRV9MRU4gKyA0KSA9IDE7Ci0JKihwQnVmICsgU0tfUE5NSV9UUkFQX1NJTVBMRV9MRU4gKyA1KSA9IChjaGFyKUFjdGl2ZU1hYzsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUXVldWVSbG10UG9ydFRyYXAgLSBTdG9yZSBwb3J0IHJlbGF0ZWQgUkxNVCB0cmFwIHRvIHRyYXAgYnVmZmVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglOb3RoaW5nIGZ1cnRoZXIgdG8gZXhwbGFpbi4KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1QTk1JX1NUQVRJQyB2b2lkIFF1ZXVlUmxtdFBvcnRUcmFwKAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19VMzIgVHJhcElkLAkJLyogVHlwZSBvZiBSTE1UIHBvcnQgdHJhcCAqLwotdW5zaWduZWQgaW50IFBvcnRJbmRleCkJLyogSW5kZXggb2YgdGhlIHBvcnQsIHdoaWNoIGNoYW5nZWQgaXRzIHN0YXRlICovCi17Ci0JY2hhcgkqcEJ1ZjsKLQlTS19VMzIJVmFsMzI7Ci0KLQotCXBCdWYgPSBHZXRUcmFwRW50cnkocEFDLCBUcmFwSWQsIFNLX1BOTUlfVFJBUF9STE1UX1BPUlRfTEVOKTsKLQotCVZhbDMyID0gT0lEX1NLR0VfUkxNVF9QT1JUX0lOREVYOwotCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYgKyBTS19QTk1JX1RSQVBfU0lNUExFX0xFTiwgVmFsMzIpOwotCSoocEJ1ZiArIFNLX1BOTUlfVFJBUF9TSU1QTEVfTEVOICsgNCkgPSAxOwotCSoocEJ1ZiArIFNLX1BOTUlfVFJBUF9TSU1QTEVfTEVOICsgNSkgPSAoY2hhcilQb3J0SW5kZXg7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlNYWMgLSBDb3BpZXMgYSBNQUMgYWRkcmVzcwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJTm90aGluZyBmdXJ0aGVyIHRvIGV4cGxhaW4uCi0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcKLSAqLwotUE5NSV9TVEFUSUMgdm9pZCBDb3B5TWFjKAotY2hhciAqcERzdCwJCS8qIFBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVmZmVyICovCi1TS19NQUNfQUREUiAqcE1hYykJLyogUG9pbnRlciBvZiBTb3VyY2UgKi8KLXsKLQlpbnQJaTsKLQotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihTS19NQUNfQUREUik7IGkgKyspIHsKLQotCQkqKHBEc3QgKyBpKSA9IHBNYWMtPmFbaV07Ci0JfQotfQotCi0jaWZkZWYgU0tfUE9XRVJfTUdNVAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogUG93ZXJNYW5hZ2VtZW50IC0gT0lEIGhhbmRsZXIgZnVuY3Rpb24gb2YgUG93ZXJNYW5hZ2VtZW50IE9JRHMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBjb2RlIGlzIHNpbXBsZS4gTm8gZGVzY3JpcHRpb24gbmVjZXNzYXJ5LgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkLgotICoJU0tfUE5NSV9FUlJfVE9PX1NIT1JUICAgIFRoZSBwYXNzZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgZGF0YSAoZS5nLiBhIDMyYml0IHZhbHVlIGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLCBidXQgYSAxNiBiaXQgdmFsdWUgd2FzIHBhc3NlZCkuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QgVGhlIHJlcXVlc3RlZCBpbnN0YW5jZSBvZiB0aGUgT0lEIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0Ci0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KLSAqLwotCi1QTk1JX1NUQVRJQyBpbnQgUG93ZXJNYW5hZ2VtZW50KAotU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KLWludCBBY3Rpb24sCQkvKiBHZXQvUHJlU2V0L1NldCBhY3Rpb24gKi8KLVNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwotY2hhciAqcEJ1ZiwJCS8qIEJ1ZmZlciB0byB3aGljaCB0byBtZ210IGRhdGEgd2lsbCBiZSByZXRyaWV2ZWQgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogT24gY2FsbDogYnVmZmVyIGxlbmd0aC4gT24gcmV0dXJuOiB1c2VkIGJ1ZmZlciAqLwotU0tfVTMyIEluc3RhbmNlLAkvKiBJbnN0YW5jZSAoMS4ubikgdGhhdCBpcyB0byBiZSBxdWVyaWVkIG9yIC0xICovCi11bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgLyogSW5kZXggdG8gdGhlIElkIHRhYmxlICovCi1TS19VMzIgTmV0SW5kZXgpCS8qIE5ldEluZGV4ICgwLi5uKSwgaW4gc2luZ2xlIG5ldCBtb2RlIGFsbHdheXMgemVybyAqLwotewotCQotCVNLX1UzMglSZXRDb2RlID0gU0tfUE5NSV9FUlJfR0VORVJBTDsKLQotCS8qCi0JICogQ2hlY2sgaW5zdGFuY2UuIFdlIG9ubHkgaGFuZGxlIHNpbmdsZSBpbnN0YW5jZSB2YXJpYWJsZXMKLQkgKi8KLQlpZiAoSW5zdGFuY2UgIT0gKFNLX1UzMikoLTEpICYmIEluc3RhbmNlICE9IDEpIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUKTsKLQl9Ci0JCi0gICAgCi0gICAgLyogQ2hlY2sgbGVuZ3RoICovCi0gICAgc3dpdGNoIChJZCkgewotCi0gICAgY2FzZSBPSURfUE5QX0NBUEFCSUxJVElFUzoKLSAgICAgICAgaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1BOUF9DQVBBQklMSVRJRVMpKSB7Ci0KLSAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKFNLX1BOUF9DQVBBQklMSVRJRVMpOwotICAgICAgICAgICAgcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0JY2FzZSBPSURfUE5QX1NFVF9QT1dFUjoKLSAgICBjYXNlIE9JRF9QTlBfUVVFUllfUE9XRVI6Ci0gICAgCWlmICgqcExlbiA8IHNpemVvZihTS19ERVZJQ0VfUE9XRVJfU1RBVEUpKQotICAgIAl7Ci0gICAgCQkqcExlbiA9IHNpemVvZihTS19ERVZJQ0VfUE9XRVJfU1RBVEUpOwotICAgIAkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotICAgIAl9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBPSURfUE5QX0FERF9XQUtFX1VQX1BBVFRFUk46Ci0gICAgY2FzZSBPSURfUE5QX1JFTU9WRV9XQUtFX1VQX1BBVFRFUk46Ci0JCWlmICgqcExlbiA8IHNpemVvZihTS19QTV9QQUNLRVRfUEFUVEVSTikpIHsKLQotCQkJKnBMZW4gPSBzaXplb2YoU0tfUE1fUEFDS0VUX1BBVFRFUk4pOwotCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQl9Ci0JCWJyZWFrOwotCi0gICAgY2FzZSBPSURfUE5QX0VOQUJMRV9XQUtFX1VQOgotICAgICAgICBpZiAoKnBMZW4gPCBzaXplb2YoU0tfVTMyKSkgewotCi0gICAgICAgICAgICAqcExlbiA9IHNpemVvZihTS19VMzIpOwotICAgICAgICAgICAgcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQkKLSAgICAvKgotCSAqIFBlcmZvcm0gYWN0aW9uCi0JICovCi0JaWYgKEFjdGlvbiA9PSBTS19QTk1JX0dFVCkgewotCi0JCS8qCi0JCSAqIEdldCB2YWx1ZQotCQkgKi8KLQkJc3dpdGNoIChJZCkgewotCi0JCWNhc2UgT0lEX1BOUF9DQVBBQklMSVRJRVM6Ci0JCQlSZXRDb2RlID0gU2tQb3dlclF1ZXJ5UG5QQ2FwYWJpbGl0aWVzKHBBQywgSW9DLCBwQnVmLCBwTGVuKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1BOUF9RVUVSWV9QT1dFUjoKLQkJCS8qIFRoZSBXaW5kb3dzIERESyBkZXNjcmliZXM6IEFuIE9JRF9QTlBfUVVFUllfUE9XRVIgcmVxdWVzdHMKLQkJCSB0aGUgbWluaXBvcnQgdG8gaW5kaWNhdGUgd2hldGhlciBpdCBjYW4gdHJhbnNpdGlvbiBpdHMgTklDCi0JCQkgdG8gdGhlIGxvdy1wb3dlciBzdGF0ZS4KLQkJCSBBIG1pbmlwb3J0IGRyaXZlciBtdXN0IGFsd2F5cyByZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUwotCQkJIHRvIGEgcXVlcnkgb2YgT0lEX1BOUF9RVUVSWV9QT1dFUi4gKi8KLQkJCSpwTGVuID0gc2l6ZW9mKFNLX0RFVklDRV9QT1dFUl9TVEFURSk7Ci0gICAgICAgICAgICBSZXRDb2RlID0gU0tfUE5NSV9FUlJfT0s7Ci0JCQlicmVhazsKLQotCQkJLyogTkRJUyBoYW5kbGVzIHRoZXNlIE9JRHMgYXMgd3JpdGUtb25seS4KLQkJCSAqIFNvIGluIGNhc2Ugb2YgZ2V0IGFjdGlvbiB0aGUgYnVmZmVyIHdpdGggd3JpdHRlbiBsZW5ndGggPSAwCi0JCQkgKiBpcyByZXR1cm5lZAotCQkJICovCi0JCWNhc2UgT0lEX1BOUF9TRVRfUE9XRVI6Ci0JCWNhc2UgT0lEX1BOUF9BRERfV0FLRV9VUF9QQVRURVJOOgotCQljYXNlIE9JRF9QTlBfUkVNT1ZFX1dBS0VfVVBfUEFUVEVSTjoKLQkJCSpwTGVuID0gMDsJCi0gICAgICAgICAgICBSZXRDb2RlID0gU0tfUE5NSV9FUlJfTk9UX1NVUFBPUlRFRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgT0lEX1BOUF9FTkFCTEVfV0FLRV9VUDoKLQkJCVJldENvZGUgPSBTa1Bvd2VyR2V0RW5hYmxlV2FrZVVwKHBBQywgSW9DLCBwQnVmLCBwTGVuKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlSZXRDb2RlID0gU0tfUE5NSV9FUlJfR0VORVJBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIChSZXRDb2RlKTsKLQl9Ci0JCi0KLQkvKgotCSAqIFBlcmZvcm0gcHJlc2V0IG9yIHNldAotCSAqLwotCQotCS8qIFBPV0VSIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IFBSRVNFVCBhY3Rpb24gKi8KLQlpZiAoQWN0aW9uID09IFNLX1BOTUlfUFJFU0VUKSB7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCX0KLQotCXN3aXRjaCAoSWQpIHsKLQljYXNlIE9JRF9QTlBfU0VUX1BPV0VSOgotCQlSZXRDb2RlID0gU2tQb3dlclNldFBvd2VyKHBBQywgSW9DLCBwQnVmLCBwTGVuKTsJCi0JCWJyZWFrOwotCi0JY2FzZSBPSURfUE5QX0FERF9XQUtFX1VQX1BBVFRFUk46Ci0JCVJldENvZGUgPSBTa1Bvd2VyQWRkV2FrZVVwUGF0dGVybihwQUMsIElvQywgcEJ1ZiwgcExlbik7CQotCQlicmVhazsKLQkJCi0JY2FzZSBPSURfUE5QX1JFTU9WRV9XQUtFX1VQX1BBVFRFUk46Ci0JCVJldENvZGUgPSBTa1Bvd2VyUmVtb3ZlV2FrZVVwUGF0dGVybihwQUMsIElvQywgcEJ1ZiwgcExlbik7CQotCQlicmVhazsKLQkJCi0JY2FzZSBPSURfUE5QX0VOQUJMRV9XQUtFX1VQOgotCQlSZXRDb2RlID0gU2tQb3dlclNldEVuYWJsZVdha2VVcChwQUMsIElvQywgcEJ1ZiwgcExlbik7Ci0JCWJyZWFrOwotCQkKLQlkZWZhdWx0OgotCQlSZXRDb2RlID0gU0tfUE5NSV9FUlJfUkVBRF9PTkxZOwotCX0KLQkKLQlyZXR1cm4gKFJldENvZGUpOwotfQotI2VuZGlmIC8qIFNLX1BPV0VSX01HTVQgKi8KLQotI2lmZGVmIFNLX0RJQUdfU1VQUE9SVAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRGlhZ0FjdGlvbnMgLSBPSUQgaGFuZGxlciBmdW5jdGlvbiBvZiBEaWFnbm9zdGljIGRyaXZlciAKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBjb2RlIGlzIHNpbXBsZS4gTm8gZGVzY3JpcHRpb24gbmVjZXNzYXJ5LgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQuCi0gKglTS19QTk1JX0VSUl9HRU5FUkFMICAgICAgQSBnZW5lcmFsIHNldmVyZSBpbnRlcm5hbCBlcnJvciBvY2N1cmVkLgotICoJU0tfUE5NSV9FUlJfVE9PX1NIT1JUICAgIFRoZSBwYXNzZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBjb250YWluCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgZGF0YSAoZS5nLiBhIDMyYml0IHZhbHVlIGlzCi0gKgkgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLCBidXQgYSAxNiBiaXQgdmFsdWUgd2FzIHBhc3NlZCkuCi0gKglTS19QTk1JX0VSUl9VTktOT1dOX0lOU1QgVGhlIHJlcXVlc3RlZCBpbnN0YW5jZSBvZiB0aGUgT0lEIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QgKGUuZy4gcG9ydCBpbnN0YW5jZSAzIG9uIGEgdHdvIHBvcnQKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLgotICovCi0KLVBOTUlfU1RBVElDIGludCBEaWFnQWN0aW9ucygKLVNLX0FDICpwQUMsCQkvKiBQb2ludGVyIHRvIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DIElvQywJCS8qIElPIGNvbnRleHQgaGFuZGxlICovCi1pbnQgQWN0aW9uLAkJLyogR0VUL1BSRVNFVC9TRVQgYWN0aW9uICovCi1TS19VMzIgSWQsCQkvKiBPYmplY3QgSUQgdGhhdCBpcyB0byBiZSBwcm9jZXNzZWQgKi8KLWNoYXIgKnBCdWYsCQkvKiBCdWZmZXIgdXNlZCBmb3IgdGhlIG1hbmFnZW1lbnQgZGF0YSB0cmFuc2ZlciAqLwotdW5zaWduZWQgaW50ICpwTGVuLAkvKiBPbiBjYWxsOiBwQnVmIGJ1ZmZlciBsZW5ndGguIE9uIHJldHVybjogdXNlZCBidWZmZXIgKi8KLVNLX1UzMiBJbnN0YW5jZSwJLyogSW5zdGFuY2UgKDEuLm4pIHRoYXQgaXMgdG8gYmUgcXVlcmllZCBvciAtMSAqLwotdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIC8qIEluZGV4IHRvIHRoZSBJZCB0YWJsZSAqLwotU0tfVTMyIE5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotCi0JU0tfVTMyCURpYWdTdGF0dXM7Ci0JU0tfVTMyCVJldENvZGUgPSBTS19QTk1JX0VSUl9HRU5FUkFMOwotCi0JLyoKLQkgKiBDaGVjayBpbnN0YW5jZS4gV2Ugb25seSBoYW5kbGUgc2luZ2xlIGluc3RhbmNlIHZhcmlhYmxlcy4KLQkgKi8KLQlpZiAoSW5zdGFuY2UgIT0gKFNLX1UzMikoLTEpICYmIEluc3RhbmNlICE9IDEpIHsKLQotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfVU5LTk9XTl9JTlNUKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGxlbmd0aC4KLQkgKi8KLQlzd2l0Y2ggKElkKSB7Ci0KLQljYXNlIE9JRF9TS0dFX0RJQUdfTU9ERToKLQkJaWYgKCpwTGVuIDwgc2l6ZW9mKFNLX1UzMikpIHsKLQotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tfUE5NSV9FUlIwNDAsIFNLX1BOTUlfRVJSMDQwTVNHKTsKLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCX0KLQotCS8qIFBlcmZvcm0gYWN0aW9uLiAqLwotCi0JLyogR0VUIHZhbHVlLiAqLwotCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9HRVQpIHsKLQotCQlzd2l0Y2ggKElkKSB7Ci0KLQkJY2FzZSBPSURfU0tHRV9ESUFHX01PREU6Ci0JCQlEaWFnU3RhdHVzID0gcEFDLT5Qbm1pLkRpYWdBdHRhY2hlZDsKLQkJCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIERpYWdTdGF0dXMpOwotCQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsJCi0JCQlSZXRDb2RlID0gU0tfUE5NSV9FUlJfT0s7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJKnBMZW4gPSAwOwkKLQkJCVJldENvZGUgPSBTS19QTk1JX0VSUl9HRU5FUkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIChSZXRDb2RlKTsgCi0JfQotCi0JLyogRnJvbSBoZXJlIFNFVCBvciBQUkVTRVQgdmFsdWUuICovCi0JCi0JLyogUFJFU0VUIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQuICovCi0JaWYgKEFjdGlvbiA9PSBTS19QTk1JX1BSRVNFVCkgewotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX09LKTsgCi0JfQotCi0JLyogU0VUIHZhbHVlLiAqLwotCXN3aXRjaCAoSWQpIHsKLQkJY2FzZSBPSURfU0tHRV9ESUFHX01PREU6Ci0KLQkJCS8qIEhhbmRsZSB0aGUgU0VULiAqLwotCQkJc3dpdGNoICgqcEJ1ZikgewotCi0JCQkJLyogQXR0YWNoIHRoZSBESUFHIHRvIHRoaXMgYWRhcHRlci4gKi8KLQkJCQljYXNlIFNLX0RJQUdfQVRUQUNIRUQ6Ci0JCQkJCS8qIENoZWNrIGlmIHdlIGNvbWUgZnJvbSBydW5uaW5nICovCi0JCQkJCWlmIChwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID09IFNLX0RJQUdfUlVOTklORykgewotCi0JCQkJCQlSZXRDb2RlID0gU2tEcnZMZWF2ZURpYWdNb2RlKHBBQyk7Ci0KLQkJCQkJfQotCQkJCQllbHNlIGlmIChwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID09IFNLX0RJQUdfSURMRSkgewotCi0JCQkJCQlSZXRDb2RlID0gU0tfUE5NSV9FUlJfT0s7Ci0JCQkJCX0JCi0JCQkJCQotCQkJCQllbHNlIHsKLQotCQkJCQkJUmV0Q29kZSA9IFNLX1BOTUlfRVJSX0dFTkVSQUw7Ci0KLQkJCQkJfQotCQkJCQkKLQkJCQkJaWYgKFJldENvZGUgPT0gU0tfUE5NSV9FUlJfT0spIHsKLQotCQkJCQkJcEFDLT5Qbm1pLkRpYWdBdHRhY2hlZCA9IFNLX0RJQUdfQVRUQUNIRUQ7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKiBFbnRlciB0aGUgRElBRyBtb2RlIGluIHRoZSBkcml2ZXIuICovCi0JCQkJY2FzZSBTS19ESUFHX1JVTk5JTkc6Ci0JCQkJCVJldENvZGUgPSBTS19QTk1JX0VSUl9PSzsKLQkJCQkJCi0JCQkJCS8qCi0JCQkJCSAqIElmIERpYWdBdHRhY2hlZCBpcyBzZXQsIHdlIGNhbiB0ZWxsIHRoZSBkcml2ZXIKLQkJCQkJICogdG8gZW50ZXIgdGhlIERJQUcgbW9kZS4KLQkJCQkJICovCi0JCQkJCWlmIChwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID09IFNLX0RJQUdfQVRUQUNIRUQpIHsKLQkJCQkJCS8qIElmIERpYWdNb2RlIGlzIG5vdCBhY3RpdmUsIHdlIGNhbiBlbnRlciBpdC4gKi8KLQkJCQkJCWlmICghcEFDLT5EaWFnTW9kZUFjdGl2ZSkgewotCi0JCQkJCQkJUmV0Q29kZSA9IFNrRHJ2RW50ZXJEaWFnTW9kZShwQUMpOyAKLQkJCQkJCX0KLQkJCQkJCWVsc2UgewotCi0JCQkJCQkJUmV0Q29kZSA9IFNLX1BOTUlfRVJSX0dFTkVSQUw7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0KLQkJCQkJCVJldENvZGUgPSBTS19QTk1JX0VSUl9HRU5FUkFMOwotCQkJCQl9Ci0JCQkJCQotCQkJCQlpZiAoUmV0Q29kZSA9PSBTS19QTk1JX0VSUl9PSykgewotCi0JCQkJCQlwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID0gU0tfRElBR19SVU5OSU5HOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBTS19ESUFHX0lETEU6Ci0JCQkJCS8qIENoZWNrIGlmIHdlIGNvbWUgZnJvbSBydW5uaW5nICovCi0JCQkJCWlmIChwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID09IFNLX0RJQUdfUlVOTklORykgewotCi0JCQkJCQlSZXRDb2RlID0gU2tEcnZMZWF2ZURpYWdNb2RlKHBBQyk7Ci0KLQkJCQkJfQotCQkJCQllbHNlIGlmIChwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID09IFNLX0RJQUdfQVRUQUNIRUQpIHsKLQotCQkJCQkJUmV0Q29kZSA9IFNLX1BOTUlfRVJSX09LOwotCQkJCQl9CQotCQkJCQkKLQkJCQkJZWxzZSB7Ci0KLQkJCQkJCVJldENvZGUgPSBTS19QTk1JX0VSUl9HRU5FUkFMOwotCi0JCQkJCX0KLQotCQkJCQlpZiAoUmV0Q29kZSA9PSBTS19QTk1JX0VSUl9PSykgewotCi0JCQkJCQlwQUMtPlBubWkuRGlhZ0F0dGFjaGVkID0gU0tfRElBR19JRExFOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoKLQkJCQkJUmV0Q29kZSA9IFNLX1BOTUlfRVJSX0JBRF9WQUxVRTsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJUmV0Q29kZSA9IFNLX1BOTUlfRVJSX0dFTkVSQUw7Ci0JfQotCi0JaWYgKFJldENvZGUgPT0gU0tfUE5NSV9FUlJfT0spIHsKLQkJKnBMZW4gPSBzaXplb2YoU0tfVTMyKTsKLQl9Ci0JZWxzZSB7Ci0KLQkJKnBMZW4gPSAwOwotCX0KLQlyZXR1cm4gKFJldENvZGUpOwotfQotI2VuZGlmIC8qIFNLX0RJQUdfU1VQUE9SVCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBWY3QgLSBPSUQgaGFuZGxlciBmdW5jdGlvbiBvZiAgT0lEcwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhlIGNvZGUgaXMgc2ltcGxlLiBObyBkZXNjcmlwdGlvbiBuZWNlc3NhcnkuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX1BOTUlfRVJSX09LICAgICAgICAgICBUaGUgcmVxdWVzdCB3YXMgcGVyZm9ybWVkIHN1Y2Nlc3NmdWxseS4KLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQuCi0gKglTS19QTk1JX0VSUl9UT09fU0hPUlQgICAgVGhlIHBhc3NlZCBidWZmZXIgaXMgdG9vIHNob3J0IHRvIGNvbnRhaW4KLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCBkYXRhIChlLmcuIGEgMzJiaXQgdmFsdWUgaXMKLSAqCSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQsIGJ1dCBhIDE2IGJpdCB2YWx1ZSB3YXMgcGFzc2VkKS4KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIpLgotICoJU0tfUE5NSV9FUlJfUkVBRF9PTkxZCSBPbmx5IHRoZSBHZXQgYWN0aW9uIGlzIGFsbG93ZWQuCi0gKgotICovCi0KLVBOTUlfU1RBVElDIGludCBWY3QoCi1TS19BQyAqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQyBJb0MsCQkvKiBJTyBjb250ZXh0IGhhbmRsZSAqLwotaW50IEFjdGlvbiwJCS8qIEdFVC9QUkVTRVQvU0VUIGFjdGlvbiAqLwotU0tfVTMyIElkLAkJLyogT2JqZWN0IElEIHRoYXQgaXMgdG8gYmUgcHJvY2Vzc2VkICovCi1jaGFyICpwQnVmLAkJLyogQnVmZmVyIHVzZWQgZm9yIHRoZSBtYW5hZ2VtZW50IGRhdGEgdHJhbnNmZXIgKi8KLXVuc2lnbmVkIGludCAqcExlbiwJLyogT24gY2FsbDogcEJ1ZiBidWZmZXIgbGVuZ3RoLiBPbiByZXR1cm46IHVzZWQgYnVmZmVyICovCi1TS19VMzIgSW5zdGFuY2UsCS8qIEluc3RhbmNlICgtMSwyLi5uKSB0aGF0IGlzIHRvIGJlIHF1ZXJpZWQgKi8KLXVuc2lnbmVkIGludCBUYWJsZUluZGV4LCAvKiBJbmRleCB0byB0aGUgSWQgdGFibGUgKi8KLVNLX1UzMiBOZXRJbmRleCkJLyogTmV0SW5kZXggKDAuLm4pLCBpbiBzaW5nbGUgbmV0IG1vZGUgYWx3YXlzIHplcm8gKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0JU0tfUE5NSV9WQ1QJKnBWY3RCYWNrdXBEYXRhOwotCVNLX1UzMgkJTG9nUG9ydE1heDsKLQlTS19VMzIJCVBoeXNQb3J0TWF4OwotCVNLX1UzMgkJUGh5c1BvcnRJbmRleDsKLQlTS19VMzIJCUxpbWl0OwotCVNLX1UzMgkJT2Zmc2V0OwotCVNLX0JPT0wJCUxpbms7Ci0JU0tfVTMyCQlSZXRDb2RlID0gU0tfUE5NSV9FUlJfR0VORVJBTDsKLQlpbnQJCWk7Ci0JU0tfRVZQQVJBCVBhcmE7Ci0JU0tfVTMyCQlDYWJsZUxlbmd0aDsKLQkKLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgcG9ydCBpbmRleGVzIGZyb20gdGhlIGluc3RhbmNlLgotCSAqLwotCVBoeXNQb3J0TWF4ID0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCUxvZ1BvcnRNYXggPSBTS19QTk1JX1BPUlRfUEhZUzJMT0coUGh5c1BvcnRNYXgpOwotCQotCS8qIER1YWwgbmV0IG1vZGU/ICovCi0JaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSBTS19UUlVFKSB7Ci0JCUxvZ1BvcnRNYXgtLTsKLQl9Ci0JCi0JaWYgKChJbnN0YW5jZSAhPSAoU0tfVTMyKSAoLTEpKSkgewotCQkvKiBDaGVjayBpbnN0YW5jZSByYW5nZS4gKi8KLQkJaWYgKChJbnN0YW5jZSA8IDIpIHx8IChJbnN0YW5jZSA+IExvZ1BvcnRNYXgpKSB7Ci0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCk7Ci0JCX0KLQkJCi0JCWlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gU0tfVFJVRSkgewotCQkJUGh5c1BvcnRJbmRleCA9IE5ldEluZGV4OwotCQl9Ci0JCWVsc2UgewotCQkJUGh5c1BvcnRJbmRleCA9IEluc3RhbmNlIC0gMjsKLQkJfQotCQlMaW1pdCA9IFBoeXNQb3J0SW5kZXggKyAxOwotCX0KLQllbHNlIHsKLQkJLyoKLQkJICogSW5zdGFuY2UgPT0gKFNLX1UzMikgKC0xKSwgZ2V0IGFsbCBJbnN0YW5jZXMgb2YgdGhhdCBPSUQuCi0JCSAqCi0JCSAqIE5vdCBpbXBsZW1lbnRlZCB5ZXQuIE1heSBiZSB1c2VkIGluIGZ1dHVyZSByZWxlYXNlcy4KLQkJICovCi0JCVBoeXNQb3J0SW5kZXggPSAwOwotCQlMaW1pdCA9IFBoeXNQb3J0TWF4OwotCX0KLQkKLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XTsKLQlpZiAocFBydC0+UEhXTGlua1VwKSB7Ci0JCUxpbmsgPSBTS19UUlVFOwotCX0KLQllbHNlIHsKLQkJTGluayA9IFNLX0ZBTFNFOwotCX0KLQkKLQkvKiBDaGVjayBNQUMgdHlwZSAqLwotCWlmIChwUHJ0LT5QaHlUeXBlICE9IFNLX1BIWV9NQVJWX0NPUFBFUikgewotCQkqcExlbiA9IDA7Ci0JCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JfQotCQotCS8qIEluaXRpYWxpemUgYmFja3VwIGRhdGEgcG9pbnRlci4gKi8KLQlwVmN0QmFja3VwRGF0YSA9ICZwQUMtPlBubWkuVmN0QmFja3VwW1BoeXNQb3J0SW5kZXhdOwotCQotCS8qIENoZWNrIGFjdGlvbiB0eXBlICovCi0JaWYgKEFjdGlvbiA9PSBTS19QTk1JX0dFVCkgewotCQkvKiBDaGVjayBsZW5ndGggKi8KLQkJc3dpdGNoIChJZCkgewotCQkKLQkJY2FzZSBPSURfU0tHRV9WQ1RfR0VUOgotCQkJaWYgKCpwTGVuIDwgKExpbWl0IC0gUGh5c1BvcnRJbmRleCkgKiBzaXplb2YoU0tfUE5NSV9WQ1QpKSB7Ci0JCQkJKnBMZW4gPSAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZihTS19QTk1JX1ZDVCk7Ci0JCQkJcmV0dXJuIChTS19QTk1JX0VSUl9UT09fU0hPUlQpOwotCQkJfQotCQkJYnJlYWs7Ci0JCQotCQljYXNlIE9JRF9TS0dFX1ZDVF9TVEFUVVM6Ci0JCQlpZiAoKnBMZW4gPCAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZihTS19VOCkpIHsKLQkJCQkqcExlbiA9IChMaW1pdCAtIFBoeXNQb3J0SW5kZXgpICogc2l6ZW9mKFNLX1U4KTsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJCi0JCWRlZmF1bHQ6Ci0JCQkqcExlbiA9IDA7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQl9CQotCQkKLQkJLyogR2V0IHZhbHVlICovCi0JCU9mZnNldCA9IDA7Ci0JCWZvciAoOyBQaHlzUG9ydEluZGV4IDwgTGltaXQ7IFBoeXNQb3J0SW5kZXgrKykgewotCQkJc3dpdGNoIChJZCkgewotCQkJCi0JCQljYXNlIE9JRF9TS0dFX1ZDVF9HRVQ6Ci0JCQkJaWYgKChMaW5rID09IFNLX0ZBTFNFKSAmJgotCQkJCQkocEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSAmIFNLX1BOTUlfVkNUX1BFTkRJTkcpKSB7Ci0JCQkJCVJldENvZGUgPSBTa0dtQ2FibGVEaWFnU3RhdHVzKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBTS19GQUxTRSk7Ci0JCQkJCWlmIChSZXRDb2RlID09IDApIHsKLQkJCQkJCXBBQy0+UG5taS5WY3RTdGF0dXNbUGh5c1BvcnRJbmRleF0gJj0gflNLX1BOTUlfVkNUX1BFTkRJTkc7Ci0JCQkJCQlwQUMtPlBubWkuVmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdIHw9Ci0JCQkJCQkJKFNLX1BOTUlfVkNUX05FV19WQ1RfREFUQSB8IFNLX1BOTUlfVkNUX1RFU1RfRE9ORSk7Ci0JCQkJCQkKLQkJCQkJCS8qIENvcHkgcmVzdWx0cyBmb3IgbGF0ZXIgdXNlIHRvIFBOTUkgc3RydWN0LiAqLwotCQkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgIHsKLQkJCQkJCQlpZiAocFBydC0+UE1kaVBhaXJTdHNbaV0gPT0gU0tfUE5NSV9WQ1RfTk9STUFMX0NBQkxFKSB7Ci0JCQkJCQkJCWlmICgocFBydC0+UE1kaVBhaXJMZW5baV0gPiAzNSkgJiYgKHBQcnQtPlBNZGlQYWlyTGVuW2ldIDwgMHhmZikpIHsKLQkJCQkJCQkJCXBQcnQtPlBNZGlQYWlyU3RzW2ldID0gU0tfUE5NSV9WQ1RfSU1QRURBTkNFX01JU01BVENIOwotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJCWlmICgocFBydC0+UE1kaVBhaXJMZW5baV0gPiAzNSkgJiYgKHBQcnQtPlBNZGlQYWlyTGVuW2ldICE9IDB4ZmYpKSB7Ci0JCQkJCQkJCUNhYmxlTGVuZ3RoID0gMTAwMCAqICgoKDE3NSAqIHBQcnQtPlBNZGlQYWlyTGVuW2ldKSAvIDIxMCkgLSAyOCk7Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UgewotCQkJCQkJCQlDYWJsZUxlbmd0aCA9IDA7Ci0JCQkJCQkJfQotCQkJCQkJCXBWY3RCYWNrdXBEYXRhLT5QTWRpUGFpckxlbltpXSA9IENhYmxlTGVuZ3RoOwotCQkJCQkJCXBWY3RCYWNrdXBEYXRhLT5QTWRpUGFpclN0c1tpXSA9IHBQcnQtPlBNZGlQYWlyU3RzW2ldOwotCQkJCQkJfQotCi0JCQkJCQlQYXJhLlBhcmEzMlswXSA9IFBoeXNQb3J0SW5kZXg7Ci0JCQkJCQlQYXJhLlBhcmEzMlsxXSA9IC0xOwotCQkJCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9QT1JUX1JFU0VULCBQYXJhKTsKLQkJCQkJCVNrRXZlbnREaXNwYXRjaGVyKHBBQywgSW9DKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCTsgLyogVkNUIHRlc3QgaXMgcnVubmluZy4gKi8KLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQkvKiBHZXQgYWxsIHJlc3VsdHMuICovCi0JCQkJQ2hlY2tWY3RTdGF0dXMocEFDLCBJb0MsIHBCdWYsIE9mZnNldCwgUGh5c1BvcnRJbmRleCk7Ci0JCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VOCk7Ci0JCQkJKihwQnVmICsgT2Zmc2V0KSA9IHBQcnQtPlBDYWJsZUxlbjsKLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1U4KTsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSAgewotCQkJCQlTS19QTk1JX1NUT1JFX1UzMigocEJ1ZiArIE9mZnNldCksIHBWY3RCYWNrdXBEYXRhLT5QTWRpUGFpckxlbltpXSk7Ci0JCQkJCU9mZnNldCArPSBzaXplb2YoU0tfVTMyKTsKLQkJCQl9Ci0JCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgIHsKLQkJCQkJKihwQnVmICsgT2Zmc2V0KSA9IHBWY3RCYWNrdXBEYXRhLT5QTWRpUGFpclN0c1tpXTsKLQkJCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VOCk7Ci0JCQkJfQotCQkJCQotCQkJCVJldENvZGUgPSBTS19QTk1JX0VSUl9PSzsKLQkJCQlicmVhazsKLQkJCi0JCQljYXNlIE9JRF9TS0dFX1ZDVF9TVEFUVVM6Ci0JCQkJQ2hlY2tWY3RTdGF0dXMocEFDLCBJb0MsIHBCdWYsIE9mZnNldCwgUGh5c1BvcnRJbmRleCk7Ci0JCQkJT2Zmc2V0ICs9IHNpemVvZihTS19VOCk7Ci0JCQkJUmV0Q29kZSA9IFNLX1BOTUlfRVJSX09LOwotCQkJCWJyZWFrOwotCQkJCi0JCQlkZWZhdWx0OgotCQkJCSpwTGVuID0gMDsKLQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJfQotCQl9IC8qIGZvciAqLwotCQkqcExlbiA9IE9mZnNldDsKLQkJcmV0dXJuIChSZXRDb2RlKTsKLQkKLQl9IC8qIGlmIFNLX1BOTUlfR0VUICovCi0JCi0JLyoKLQkgKiBGcm9tIGhlcmUgU0VUIG9yIFBSRVNFVCBhY3Rpb24uIENoZWNrIGlmIHRoZSBwYXNzZWQKLQkgKiBidWZmZXIgbGVuZ3RoIGlzIHBsYXVzaWJsZS4KLQkgKi8KLQkKLQkvKiBDaGVjayBsZW5ndGggKi8KLQlzd2l0Y2ggKElkKSB7Ci0JY2FzZSBPSURfU0tHRV9WQ1RfU0VUOgotCQlpZiAoKnBMZW4gPCAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZihTS19VMzIpKSB7Ci0JCQkqcExlbiA9IChMaW1pdCAtIFBoeXNQb3J0SW5kZXgpICogc2l6ZW9mKFNLX1UzMik7Ci0JCQlyZXR1cm4gKFNLX1BOTUlfRVJSX1RPT19TSE9SVCk7Ci0JCX0KLQkJYnJlYWs7Ci0JCi0JZGVmYXVsdDoKLQkJKnBMZW4gPSAwOwotCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCX0KLQkKLQkvKgotCSAqIFBlcmZvcm0gcHJlc2V0IG9yIHNldC4KLQkgKi8KLQkKLQkvKiBWQ1QgZG9lcyBub3Qgc3VwcG9ydCBQUkVTRVQgYWN0aW9uLiAqLwotCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9QUkVTRVQpIHsKLQkJcmV0dXJuIChTS19QTk1JX0VSUl9PSyk7Ci0JfQotCQotCU9mZnNldCA9IDA7Ci0JZm9yICg7IFBoeXNQb3J0SW5kZXggPCBMaW1pdDsgUGh5c1BvcnRJbmRleCsrKSB7Ci0JCXN3aXRjaCAoSWQpIHsKLQkJY2FzZSBPSURfU0tHRV9WQ1RfU0VUOiAvKiBTdGFydCBWQ1QgdGVzdC4gKi8KLQkJCWlmIChMaW5rID09IFNLX0ZBTFNFKSB7Ci0JCQkJU2tHZVN0b3BQb3J0KHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBTS19TVE9QX0FMTCwgU0tfU09GVF9SU1QpOwotCQkJCQotCQkJCVJldENvZGUgPSBTa0dtQ2FibGVEaWFnU3RhdHVzKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBTS19UUlVFKTsKLQkJCQlpZiAoUmV0Q29kZSA9PSAwKSB7IC8qIFJldENvZGU6IDAgPT4gU3RhcnQhICovCi0JCQkJCXBBQy0+UG5taS5WY3RTdGF0dXNbUGh5c1BvcnRJbmRleF0gfD0gU0tfUE5NSV9WQ1RfUEVORElORzsKLQkJCQkJcEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSAmPSB+U0tfUE5NSV9WQ1RfTkVXX1ZDVF9EQVRBOwotCQkJCQlwQUMtPlBubWkuVmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdICY9IH5TS19QTk1JX1ZDVF9MSU5LOwotCQkJCQkKLQkJCQkJLyoKLQkJCQkJICogU3RhcnQgVkNUIHRpbWVyIGNvdW50ZXIuCi0JCQkJCSAqLwotCQkJCQlTS19NRU1TRVQoKGNoYXIgKikgJlBhcmEsIDAsIHNpemVvZihQYXJhKSk7Ci0JCQkJCVBhcmEuUGFyYTMyWzBdID0gUGh5c1BvcnRJbmRleDsKLQkJCQkJUGFyYS5QYXJhMzJbMV0gPSAtMTsKLQkJCQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5Qbm1pLlZjdFRpbWVvdXRbUGh5c1BvcnRJbmRleF0uVmN0VGltZXIsCi0JCQkJCQk0MDAwMDAwLCBTS0dFX1BOTUksIFNLX1BOTUlfRVZUX1ZDVF9SRVNFVCwgUGFyYSk7Ci0JCQkJCVNLX1BOTUlfU1RPUkVfVTMyKChwQnVmICsgT2Zmc2V0KSwgUmV0Q29kZSk7Ci0JCQkJCVJldENvZGUgPSBTS19QTk1JX0VSUl9PSzsKLQkJCQl9Ci0JCQkJZWxzZSB7IC8qIFJldENvZGU6IDIgPT4gUnVubmluZyEgKi8KLQkJCQkJU0tfUE5NSV9TVE9SRV9VMzIoKHBCdWYgKyBPZmZzZXQpLCBSZXRDb2RlKTsKLQkJCQkJUmV0Q29kZSA9IFNLX1BOTUlfRVJSX09LOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgeyAvKiBSZXRDb2RlOiA0ID0+IExpbmshICovCi0JCQkJUmV0Q29kZSA9IDQ7Ci0JCQkJU0tfUE5NSV9TVE9SRV9VMzIoKHBCdWYgKyBPZmZzZXQpLCBSZXRDb2RlKTsKLQkJCQlSZXRDb2RlID0gU0tfUE5NSV9FUlJfT0s7Ci0JCQl9Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1UzMik7Ci0JCQlicmVhazsKLQkKLQkJZGVmYXVsdDoKLQkJCSpwTGVuID0gMDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfR0VORVJBTCk7Ci0JCX0KLQl9IC8qIGZvciAqLwotCSpwTGVuID0gT2Zmc2V0OwotCXJldHVybiAoUmV0Q29kZSk7Ci0KLX0gLyogVmN0ICovCi0KLQotUE5NSV9TVEFUSUMgdm9pZCBDaGVja1ZjdFN0YXR1cygKLVNLX0FDCQkqcEFDLAotU0tfSU9DCQlJb0MsCi1jaGFyCQkqcEJ1ZiwKLVNLX1UzMgkJT2Zmc2V0LAotU0tfVTMyCQlQaHlzUG9ydEluZGV4KQotewotCVNLX0dFUE9SVCAJKnBQcnQ7Ci0JU0tfUE5NSV9WQ1QJKnBWY3REYXRhOwotCVNLX1UzMgkJUmV0Q29kZTsKLQkKLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XTsKLQkKLQlwVmN0RGF0YSA9IChTS19QTk1JX1ZDVCAqKSAocEJ1ZiArIE9mZnNldCk7Ci0JcFZjdERhdGEtPlZjdFN0YXR1cyA9IFNLX1BOTUlfVkNUX05PTkU7Ci0JCi0JaWYgKCFwUHJ0LT5QSFdMaW5rVXApIHsKLQkJCi0JCS8qIFdhcyBhIFZDVCB0ZXN0IGV2ZXIgbWFkZSBiZWZvcmU/ICovCi0JCWlmIChwQUMtPlBubWkuVmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdICYgU0tfUE5NSV9WQ1RfVEVTVF9ET05FKSB7Ci0JCQlpZiAoKHBBQy0+UG5taS5WY3RTdGF0dXNbUGh5c1BvcnRJbmRleF0gJiBTS19QTk1JX1ZDVF9MSU5LKSkgewotCQkJCXBWY3REYXRhLT5WY3RTdGF0dXMgfD0gU0tfUE5NSV9WQ1RfT0xEX1ZDVF9EQVRBOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcFZjdERhdGEtPlZjdFN0YXR1cyB8PSBTS19QTk1JX1ZDVF9ORVdfVkNUX0RBVEE7Ci0JCQl9Ci0JCX0KLQkJCi0JCS8qIENoZWNrIFZDVCB0ZXN0IHN0YXR1cy4gKi8KLQkJUmV0Q29kZSA9IFNrR21DYWJsZURpYWdTdGF0dXMocEFDLElvQywgUGh5c1BvcnRJbmRleCwgU0tfRkFMU0UpOwotCQlpZiAoUmV0Q29kZSA9PSAyKSB7IC8qIFZDVCB0ZXN0IGlzIHJ1bm5pbmcuICovCi0JCQlwVmN0RGF0YS0+VmN0U3RhdHVzIHw9IFNLX1BOTUlfVkNUX1JVTk5JTkc7Ci0JCX0KLQkJZWxzZSB7IC8qIFZDVCBkYXRhIHdhcyBjb3BpZWQgdG8gcEFDIGhlcmUuIENoZWNrIFBFTkRJTkcgc3RhdGUuICovCi0JCQlpZiAocEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSAmIFNLX1BOTUlfVkNUX1BFTkRJTkcpIHsKLQkJCQlwVmN0RGF0YS0+VmN0U3RhdHVzIHw9IFNLX1BOTUlfVkNUX05FV19WQ1RfREFUQTsKLQkJCX0KLQkJfQotCQkKLQkJaWYgKHBQcnQtPlBDYWJsZUxlbiAhPSAweGZmKSB7IC8qIE9sZCBEU1AgdmFsdWUuICovCi0JCQlwVmN0RGF0YS0+VmN0U3RhdHVzIHw9IFNLX1BOTUlfVkNUX09MRF9EU1BfREFUQTsKLQkJfQotCX0KLQllbHNlIHsKLQkJCi0JCS8qIFdhcyBhIFZDVCB0ZXN0IGV2ZXIgbWFkZSBiZWZvcmU/ICovCi0JCWlmIChwQUMtPlBubWkuVmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdICYgU0tfUE5NSV9WQ1RfVEVTVF9ET05FKSB7Ci0JCQlwVmN0RGF0YS0+VmN0U3RhdHVzICY9IH5TS19QTk1JX1ZDVF9ORVdfVkNUX0RBVEE7Ci0JCQlwVmN0RGF0YS0+VmN0U3RhdHVzIHw9IFNLX1BOTUlfVkNUX09MRF9WQ1RfREFUQTsKLQkJfQotCQkKLQkJLyogRFNQIG9ubHkgdmFsaWQgaW4gMTAwLzEwMDAgbW9kZXMuICovCi0JCWlmIChwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUExpbmtTcGVlZFVzZWQgIT0KLQkJCVNLX0xTUEVFRF9TVEFUXzEwTUJQUykgewkKLQkJCXBWY3REYXRhLT5WY3RTdGF0dXMgfD0gU0tfUE5NSV9WQ1RfTkVXX0RTUF9EQVRBOwotCQl9Ci0JfQotfSAvKiBDaGVja1ZjdFN0YXR1cyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICAgICAgU2tQbm1pR2VuSW9jdGwgLSBIYW5kbGVzIG5ldyBnZW5lcmljIFBOTUkgSU9DVEwsIGNhbGxzIHRoZSBuZWVkZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICBQTk1JIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiB0aGUgc3ViY29tbWFuZCBhbmQKLSAqICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFsbCBkYXRhIGJlbG9uZ2luZyB0byB0aGUgY29tcGxldGUgZGF0YWJhc2UKLSAqICAgICAgICAgICAgICAgICAgICAgICBvciBPSUQgcmVxdWVzdC4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUxvb2tzIHVwIHRoZSByZXF1ZXN0ZWQgc3ViY29tbWFuZCwgY2FsbHMgdGhlIGNvcnJlc3BvbmRpbmcgaGFuZGxlcgotICoJZnVuY3Rpb24gYW5kIHBhc3NlcyBhbGwgcmVxdWlyZWQgcGFyYW1ldGVycyB0byBpdC4KLSAqCVRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGRyaXZlci4gSXQgaXMgbmVlZGVkIHRvIGhhbmRsZSB0aGUgbmV3Ci0gKiAgZ2VuZXJpYyBQTk1JIElPQ1RMLiBUaGlzIElPQ1RMIGlzIGdpdmVuIHRvIHRoZSBkcml2ZXIgYW5kIGNvbnRhaW5zIGJvdGgKLSAqICB0aGUgT0lEIGFuZCBhIHN1YmNvbW1hbmQgdG8gZGVjaWRlIHdoYXQga2luZCBvZiByZXF1ZXN0IGhhcyB0byBiZSBkb25lLgotICoKLSAqIFJldHVybnM6Ci0gKglTS19QTk1JX0VSUl9PSyAgICAgICAgICAgVGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQKLSAqCVNLX1BOTUlfRVJSX0dFTkVSQUwgICAgICBBIGdlbmVyYWwgc2V2ZXJlIGludGVybmFsIGVycm9yIG9jY3VyZWQKLSAqCVNLX1BOTUlfRVJSX1RPT19TSE9SVCAgICBUaGUgcGFzc2VkIGJ1ZmZlciBpcyB0b28gc2hvcnQgdG8gdGFrZQotICoJICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhLgotICoJU0tfUE5NSV9FUlJfVU5LTk9XTl9PSUQgIFRoZSByZXF1ZXN0ZWQgT0lEIGlzIHVua25vd24KLSAqCVNLX1BOTUlfRVJSX1VOS05PV05fSU5TVCBUaGUgcmVxdWVzdGVkIGluc3RhbmNlIG9mIHRoZSBPSUQgZG9lc24ndAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCAoZS5nLiBwb3J0IGluc3RhbmNlIDMgb24gYSB0d28gcG9ydAotICoJICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXIuCi0gKi8KLWludCBTa1BubWlHZW5Jb2N0bCgKLVNLX0FDCQkqcEFDLAkJLyogUG9pbnRlciB0byBhZGFwdGVyIGNvbnRleHQgc3RydWN0ICovCi1TS19JT0MJCUlvQywJCS8qIEkvTyBjb250ZXh0ICovCi12b2lkCQkqcEJ1ZiwJCS8qIEJ1ZmZlciB1c2VkIGZvciB0aGUgbWFuYWdlbWVudCBkYXRhIHRyYW5zZmVyICovCi11bnNpZ25lZCBpbnQgKnBMZW4sCQkvKiBMZW5ndGggb2YgYnVmZmVyICovCi1TS19VMzIJCU5ldEluZGV4KQkvKiBOZXRJbmRleCAoMC4ubiksIGluIHNpbmdsZSBuZXQgbW9kZSBhbHdheXMgemVybyAqLwotewotU0tfSTMyCU1vZGU7CQkJLyogU3RvcmUgdmFsdWUgb2Ygc3ViY29tbWFuZC4gKi8KLVNLX1UzMglPaWQ7CQkJLyogU3RvcmUgdmFsdWUgb2YgT0lELiAqLwotaW50CQlSZXR1cm5Db2RlOwkJLyogU3RvcmUgcmV0dXJuIHZhbHVlIHRvIHNob3cgc3RhdHVzIG9mIFBOTUkgYWN0aW9uLiAqLwotaW50IAlIZWFkZXJMZW5ndGg7CS8qIExlbmd0aCBvZiBkZXNpcmVkIGFjdGlvbiBwbHVzIE9JRC4gKi8KLQotCVJldHVybkNvZGUgPSBTS19QTk1JX0VSUl9HRU5FUkFMOwotCQotCVNLX01FTUNQWSgmTW9kZSwgcEJ1Ziwgc2l6ZW9mKFNLX0kzMikpOwotCVNLX01FTUNQWSgmT2lkLCAoY2hhciAqKSBwQnVmICsgc2l6ZW9mKFNLX0kzMiksIHNpemVvZihTS19VMzIpKTsKLQlIZWFkZXJMZW5ndGggPSBzaXplb2YoU0tfSTMyKSArIHNpemVvZihTS19VMzIpOwotCSpwTGVuID0gKnBMZW4gLSBIZWFkZXJMZW5ndGg7Ci0JU0tfTUVNQ1BZKChjaGFyICopIHBCdWYgKyBzaXplb2YoU0tfSTMyKSwgKGNoYXIgKikgcEJ1ZiArIEhlYWRlckxlbmd0aCwgKnBMZW4pOwotCQotCXN3aXRjaChNb2RlKSB7Ci0JY2FzZSBTS19HRVRfU0lOR0xFX1ZBUjoKLQkJUmV0dXJuQ29kZSA9IFNrUG5taUdldFZhcihwQUMsIElvQywgT2lkLCAKLQkJCQkoY2hhciAqKSBwQnVmICsgc2l6ZW9mKFNLX0kzMiksIHBMZW4sCi0JCQkJKChTS19VMzIpICgtMSkpLCBOZXRJbmRleCk7Ci0JCVNLX1BOTUlfU1RPUkVfVTMyKHBCdWYsIFJldHVybkNvZGUpOwotCQkqcExlbiA9ICpwTGVuICsgc2l6ZW9mKFNLX0kzMik7Ci0JCWJyZWFrOwotCWNhc2UgU0tfUFJFU0VUX1NJTkdMRV9WQVI6Ci0JCVJldHVybkNvZGUgPSBTa1BubWlQcmVTZXRWYXIocEFDLCBJb0MsIE9pZCwgCi0JCQkJKGNoYXIgKikgcEJ1ZiArIHNpemVvZihTS19JMzIpLCBwTGVuLAotCQkJCSgoU0tfVTMyKSAoLTEpKSwgTmV0SW5kZXgpOwotCQlTS19QTk1JX1NUT1JFX1UzMihwQnVmLCBSZXR1cm5Db2RlKTsKLQkJKnBMZW4gPSAqcExlbiArIHNpemVvZihTS19JMzIpOwotCQlicmVhazsKLQljYXNlIFNLX1NFVF9TSU5HTEVfVkFSOgotCQlSZXR1cm5Db2RlID0gU2tQbm1pU2V0VmFyKHBBQywgSW9DLCBPaWQsIAotCQkJCShjaGFyICopIHBCdWYgKyBzaXplb2YoU0tfSTMyKSwgcExlbiwKLQkJCQkoKFNLX1UzMikgKC0xKSksIE5ldEluZGV4KTsKLQkJU0tfUE5NSV9TVE9SRV9VMzIocEJ1ZiwgUmV0dXJuQ29kZSk7Ci0JCSpwTGVuID0gKnBMZW4gKyBzaXplb2YoU0tfSTMyKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19HRVRfRlVMTF9NSUI6Ci0JCVJldHVybkNvZGUgPSBTa1BubWlHZXRTdHJ1Y3QocEFDLCBJb0MsIHBCdWYsIHBMZW4sIE5ldEluZGV4KTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19QUkVTRVRfRlVMTF9NSUI6Ci0JCVJldHVybkNvZGUgPSBTa1BubWlQcmVTZXRTdHJ1Y3QocEFDLCBJb0MsIHBCdWYsIHBMZW4sIE5ldEluZGV4KTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19TRVRfRlVMTF9NSUI6Ci0JCVJldHVybkNvZGUgPSBTa1BubWlTZXRTdHJ1Y3QocEFDLCBJb0MsIHBCdWYsIHBMZW4sIE5ldEluZGV4KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCQotCXJldHVybiAoUmV0dXJuQ29kZSk7Ci0KLX0gLyogU2tHZUlvY0dlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlc2lycS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlc2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWVlNmQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZXNpcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE5hbWU6CXNrZ2VzaXJxLmMKLSAqIFByb2plY3Q6CUdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMsIENvbW1vbiBNb2R1bGVzCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuOTIgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDkvMTYgMTQ6Mzc6MDcgJAotICogUHVycG9zZToJU3BlY2lhbCBJUlEgbW9kdWxlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglTcGVjaWFsIEludGVycnVwdCBoYW5kbGVyCi0gKgotICoJVGhlIGZvbGxvd2luZyBhYnN0cmFjdCBzaG91bGQgc2hvdyBob3cgdGhpcyBtb2R1bGUgaXMgaW5jbHVkZWQKLSAqCWluIHRoZSBkcml2ZXIgcGF0aDoKLSAqCi0gKglJbiB0aGUgSVNSIG9mIHRoZSBkcml2ZXIgdGhlIGJpdHMgZm9yIGZyYW1lIHRyYW5zbWlzc2lvbiBjb21wbGV0ZSBhbmQKLSAqCWZvciByZWNlaXZlIGNvbXBsZXRlIGFyZSBjaGVja2VkIGFuZCBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIgaXRzZWxmLgotICoJVGhlIGJpdHMgb2YgdGhlIHNsb3cgcGF0aCBtYXNrIGFyZSBjaGVja2VkIGFmdGVyIHRoYXQgYW5kIHRoZW4gdGhlCi0gKgllbnRyeSBpbnRvIHRoZSBzby1jYWxsZWQgInNsb3cgcGF0aCIgaXMgcHJlcGFyZWQuIEl0IGlzIGFuIGltcGxlbWVudG9ycwotICoJZGVjaXNpb24gd2hldGhlciB0aGlzIGlzIGV4ZWN1dGVkIGRpcmVjdGx5IG9yIGp1c3Qgc2NoZWR1bGVkIGJ5Ci0gKglkaXNhYmxpbmcgdGhlIG1hc2suIEluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHNvbWUgZXZlbnRzIG1heSBiZQotICoJZ2VuZXJhdGVkLCBzbyBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBjYWxsIHRoZSBFdmVudERpc3BhdGNoZXIKLSAqCXJpZ2h0IGFmdGVyIHRoaXMgSVNSLgotICoKLSAqCVRoZSBJbnRlcnJ1cHQgc291cmNlIHJlZ2lzdGVyIG9mIHRoZSBhZGFwdGVyIGlzIE5PVCByZWFkIGJ5IHRoaXMgbW9kdWxlLgotICogIFNPIGlmIHRoZSBkcml2ZXJzIGltcGxlbWVudG9yIG5lZWRzIGEgd2hpbGUgbG9vcCBhcm91bmQgdGhlCi0gKglzbG93IGRhdGEgcGF0aHMgaW50ZXJydXB0IGJpdHMsIGhlIG5lZWRzIHRvIGNhbGwgdGhlIFNrR2VTaXJxSXNyKCkgZm9yCi0gKgllYWNoIGxvb3AgZW50ZXJlZC4KLSAqCi0gKglIb3dldmVyLCB0aGUgTUFDIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzIGFyZSByZWFkIGluIGEgd2hpbGUgbG9vcC4KLSAqCi0gKi8KLQotI2lmIChkZWZpbmVkKERFQlVHKSB8fCAoKCFkZWZpbmVkKExJTlQpKSAmJiAoIWRlZmluZWQoU0tfU0xJTSkpKSkKLXN0YXRpYyBjb25zdCBjaGFyIFN5c0tvbm5lY3RGaWxlSWRbXSA9Ci0JIkAoIykgJElkOiBza2dlc2lycS5jLHYgMS45MiAyMDAzLzA5LzE2IDE0OjM3OjA3IHJzY2htaWR0IEV4cCAkIChDKSBNYXJ2ZWxsLiI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgImgvc2tkcnYxc3QuaCIJCS8qIERyaXZlciBTcGVjaWZpYyBEZWZpbml0aW9ucyAqLwotI2lmbmRlZiBTS19TTElNCi0jaW5jbHVkZSAiaC9za2dlcG5taS5oIgkJLyogUE5NSSBEZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgImgvc2tybG10LmgiCQkvKiBSTE1UIERlZmluaXRpb25zICovCi0jZW5kaWYKLSNpbmNsdWRlICJoL3NrZHJ2Mm5kLmgiCQkvKiBBZGFwdGVyIENvbnRyb2wgYW5kIERyaXZlciBzcGVjaWZpYyBEZWYuICovCi0KLS8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLSNpZmRlZiBHRU5FU0lTCi1zdGF0aWMgaW50CVNrR2VQb3J0Q2hlY2tVcFhtYWMoU0tfQUMqLCBTS19JT0MsIGludCwgU0tfQk9PTCk7Ci1zdGF0aWMgaW50CVNrR2VQb3J0Q2hlY2tVcEJjb20oU0tfQUMqLCBTS19JT0MsIGludCwgU0tfQk9PTCk7Ci1zdGF0aWMgdm9pZAlTa1BoeUlzckJjb20oU0tfQUMqLCBTS19JT0MsIGludCwgU0tfVTE2KTsKLSNlbmRpZiAvKiBHRU5FU0lTICovCi0jaWZkZWYgWVVLT04KLXN0YXRpYyBpbnQJU2tHZVBvcnRDaGVja1VwR21hYyhTS19BQyosIFNLX0lPQywgaW50LCBTS19CT09MKTsKLXN0YXRpYyB2b2lkCVNrUGh5SXNyR21hYyhTS19BQyosIFNLX0lPQywgaW50LCBTS19VMTYpOwotI2VuZGlmIC8qIFlVS09OICovCi0jaWZkZWYgT1RIRVJfUEhZCi1zdGF0aWMgaW50CVNrR2VQb3J0Q2hlY2tVcExvbmUoU0tfQUMqLCBTS19JT0MsIGludCwgU0tfQk9PTCk7Ci1zdGF0aWMgaW50CVNrR2VQb3J0Q2hlY2tVcE5hdChTS19BQyosIFNLX0lPQywgaW50LCBTS19CT09MKTsKLXN0YXRpYyB2b2lkCVNrUGh5SXNyTG9uZShTS19BQyosIFNLX0lPQywgaW50LCBTS19VMTYpOwotI2VuZGlmIC8qIE9USEVSX1BIWSAqLwotCi0jaWZkZWYgR0VORVNJUwotLyoKLSAqIGFycmF5IG9mIFJ4IGNvdW50ZXIgZnJvbSBYTUFDIHdoaWNoIGFyZSBjaGVja2VkCi0gKiBpbiBBdXRvU2Vuc2UgbW9kZSB0byBjaGVjayB3aGV0aGVyIGEgbGluayBpcyBub3QgYWJsZSB0byBhdXRvLW5lZ290aWF0ZS4KLSAqLwotc3RhdGljIGNvbnN0IFNLX1UxNiBTa0dlUnhSZWdzW109IHsKLQlYTV9SWEZfNjRCLAotCVhNX1JYRl8xMjdCLAotCVhNX1JYRl8yNTVCLAotCVhNX1JYRl81MTFCLAotCVhNX1JYRl8xMDIzQiwKLQlYTV9SWEZfTUFYX1NaCi19IDsKLSNlbmRpZiAvKiBHRU5FU0lTICovCi0KLSNpZmRlZiBfX0MyTUFOX18KLS8qCi0gKglTcGVjaWFsIElSUSBmdW5jdGlvbgotICoKLSAqCUdlbmVyYWwgRGVzY3JpcHRpb246Ci0gKgotICovCi1pbnRybygpCi17fQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0hXSW5pdERlZlNlbnNlKCkgLSBEZWZhdWx0IEF1dG9zZW5zaW5nIG1vZGUgaW5pdGlhbGl6YXRpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjogc2V0cyB0aGUgUExpbmtNb2RlIGZvciBIV0luaXQKLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotc3RhdGljIHZvaWQgU2tIV0luaXREZWZTZW5zZSgKLVNLX0FDCSpwQUMsCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotCXBQcnQtPlBBdXRvTmVnVGltZU91dCA9IDA7Ci0KLQlpZiAocFBydC0+UExpbmtNb2RlQ29uZiAhPSBTS19MTU9ERV9BVVRPU0VOU0UpIHsKLQkJcFBydC0+UExpbmtNb2RlID0gcFBydC0+UExpbmtNb2RlQ29uZjsKLQkJcmV0dXJuOwotCX0KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkoIkF1dG9TZW5zaW5nOiBGaXJzdCBtb2RlICVkIG9uIFBvcnQgJWRcbiIsCi0JCShpbnQpU0tfTE1PREVfQVVUT0ZVTEwsIFBvcnQpKTsKLQotCXBQcnQtPlBMaW5rTW9kZSA9IChTS19VOClTS19MTU9ERV9BVVRPRlVMTDsKLQotCXJldHVybjsKLX0JLyogU2tIV0luaXREZWZTZW5zZSAqLwotCi0KLSNpZmRlZiBHRU5FU0lTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tIV1NlbnNlR2V0TmV4dCgpIC0gR2V0IE5leHQgQXV0b3NlbnNpbmcgTW9kZQotICoKLSAqIERlc2NyaXB0aW9uOiBnZXRzIHRoZSBhcHByb3ByaWF0ZSBuZXh0IG1vZGUKLSAqCi0gKiBOb3RlOgotICoKLSAqLwotc3RhdGljIFNLX1U4IFNrSFdTZW5zZUdldE5leHQoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsJCS8qIEdJbmkgUG9ydCBzdHJ1Y3QgcG9pbnRlciAqLwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlwUHJ0LT5QQXV0b05lZ1RpbWVPdXQgPSAwOwotCi0gICAgaWYgKHBQcnQtPlBMaW5rTW9kZUNvbmYgIT0gKFNLX1U4KVNLX0xNT0RFX0FVVE9TRU5TRSkgewotCQkvKiBMZWF2ZSBhbGwgYXMgY29uZmlndXJlZCAqLwotCQlyZXR1cm4ocFBydC0+UExpbmtNb2RlQ29uZik7Ci0JfQotCi0gICAgaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSAoU0tfVTgpU0tfTE1PREVfQVVUT0ZVTEwpIHsKLQkJLyogUmV0dXJuIG5leHQgbW9kZSBBVVRPQk9USCAqLwotICAgICAgICByZXR1cm4gKChTS19VOClTS19MTU9ERV9BVVRPQk9USCk7Ci0JfQotCi0JLyogUmV0dXJuIGRlZmF1bHQgYXV0b2Z1bGwgKi8KLSAgICByZXR1cm4gKChTS19VOClTS19MTU9ERV9BVVRPRlVMTCk7Ci19CS8qIFNrSFdTZW5zZUdldE5leHQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tIV1NlbnNlU2V0TmV4dCgpIC0gQXV0b3NlbnNpbmcgU2V0IG5leHQgbW9kZQotICoKLSAqIERlc2NyaXB0aW9uOglzZXRzIHRoZSBhcHByb3ByaWF0ZSBuZXh0IG1vZGUKLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotc3RhdGljIHZvaWQgU2tIV1NlbnNlU2V0TmV4dCgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1TS19VOAlOZXdNb2RlKQkvKiBOZXcgTW9kZSB0byBiZSB3cml0dGVuIGluIHNlbnNlIG1vZGUgKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7CQkvKiBHSW5pIFBvcnQgc3RydWN0IHBvaW50ZXIgKi8KLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JcFBydC0+UEF1dG9OZWdUaW1lT3V0ID0gMDsKLQotICAgIGlmIChwUHJ0LT5QTGlua01vZGVDb25mICE9IChTS19VOClTS19MTU9ERV9BVVRPU0VOU0UpIHsKLQkJcmV0dXJuOwotCX0KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkoIkF1dG9TZW5zaW5nOiBuZXh0IG1vZGUgJWQgb24gUG9ydCAlZFxuIiwKLQkJKGludClOZXdNb2RlLCBQb3J0KSk7Ci0KLQlwUHJ0LT5QTGlua01vZGUgPSBOZXdNb2RlOwotCi0JcmV0dXJuOwotfQkvKiBTa0hXU2Vuc2VTZXROZXh0ICovCi0jZW5kaWYgLyogR0VORVNJUyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0hXTGlua0Rvd24oKSAtIExpbmsgRG93biBoYW5kbGluZwotICoKLSAqIERlc2NyaXB0aW9uOiBoYW5kbGVzIHRoZSBoYXJkd2FyZSBsaW5rIGRvd24gc2lnbmFsCi0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXZvaWQgU2tIV0xpbmtEb3duKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7CQkvKiBHSW5pIFBvcnQgc3RydWN0IHBvaW50ZXIgKi8KLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JLyogRGlzYWJsZSBhbGwgTUFDIGludGVycnVwdHMgKi8KLQlTa01hY0lycURpc2FibGUocEFDLCBJb0MsIFBvcnQpOwotCi0JLyogRGlzYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIgKi8KLQlTa01hY1J4VHhEaXNhYmxlKHBBQywgSW9DLCBQb3J0KTsKLQkKLQkvKiBJbml0IGRlZmF1bHQgc2Vuc2UgbW9kZSAqLwotCVNrSFdJbml0RGVmU2Vuc2UocEFDLCBJb0MsIFBvcnQpOwotCi0JaWYgKHBQcnQtPlBIV0xpbmtVcCA9PSBTS19GQUxTRSkgewotCQlyZXR1cm47Ci0JfQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9JUlEsCi0JCSgiTGluayBkb3duIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQotCS8qIFNldCBMaW5rIHRvIERPV04gKi8KLQlwUHJ0LT5QSFdMaW5rVXAgPSBTS19GQUxTRTsKLQotCS8qIFJlc2V0IFBvcnQgc3RhdGkgKi8KLSAgICBwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9VTktOT1dOOwotICAgIHBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IChTS19VOClTS19GTE9XX1NUQVRfTk9ORTsKLQlwUHJ0LT5QTGlua1NwZWVkVXNlZCA9IChTS19VOClTS19MU1BFRURfU1RBVF9JTkRFVEVSTUlOQVRFRDsKLQotCS8qIFJlLWluaXQgUGh5IGVzcGVjaWFsbHkgd2hlbiB0aGUgQXV0b1NlbnNlIGRlZmF1bHQgaXMgc2V0IG5vdyAqLwotCVNrTWFjSW5pdFBoeShwQUMsIElvQywgUG9ydCwgU0tfRkFMU0UpOwotCi0JLyogR1AwOiB1c2VkIGZvciB3b3JrYXJvdW5kIG9mIFJldi4gQyBFcnJhdGEgMiAqLwotCi0JLyogRG8gTk9UIHNpZ25hbCB0byBSTE1UICovCi0KLQkvKiBEbyBOT1Qgc3RhcnQgdGhlIHRpbWVyIGhlcmUgKi8KLX0JLyogU2tIV0xpbmtEb3duICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrSFdMaW5rVXAoKSAtIExpbmsgVXAgaGFuZGxpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjogaGFuZGxlcyB0aGUgaGFyZHdhcmUgbGluayB1cCBzaWduYWwKLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotc3RhdGljIHZvaWQgU2tIV0xpbmtVcCgKLVNLX0FDCSpwQUMsCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotCWlmIChwUHJ0LT5QSFdMaW5rVXApIHsKLQkJLyogV2UgZG8gTk9UIG5lZWQgdG8gcHJvY2VlZCBvbiBhY3RpdmUgbGluayAqLwotCQlyZXR1cm47Ci0JfQotCi0JcFBydC0+UEhXTGlua1VwID0gU0tfVFJVRTsKLQlwUHJ0LT5QQXV0b05lZ0ZhaWwgPSBTS19GQUxTRTsKLSAgICBwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9VTktOT1dOOwotCi0gICAgaWYgKHBQcnQtPlBMaW5rTW9kZSAhPSAoU0tfVTgpU0tfTE1PREVfQVVUT0hBTEYgJiYKLSAgICAgICAgcFBydC0+UExpbmtNb2RlICE9IChTS19VOClTS19MTU9ERV9BVVRPRlVMTCAmJgotICAgICAgICBwUHJ0LT5QTGlua01vZGUgIT0gKFNLX1U4KVNLX0xNT0RFX0FVVE9CT1RIKSB7Ci0JCS8qIExpbmsgaXMgdXAgYW5kIG5vIEF1dG8tbmVnb3RpYXRpb24gc2hvdWxkIGJlIGRvbmUgKi8KLQotCQkvKiBMaW5rIHNwZWVkIHNob3VsZCBiZSB0aGUgY29uZmlndXJlZCBvbmUgKi8KLQkJc3dpdGNoIChwUHJ0LT5QTGlua1NwZWVkKSB7Ci0JCWNhc2UgU0tfTFNQRUVEX0FVVE86Ci0JCQkvKiBkZWZhdWx0IGlzIDEwMDAgTWJwcyAqLwotCQljYXNlIFNLX0xTUEVFRF8xMDAwTUJQUzoKLQkJCXBQcnQtPlBMaW5rU3BlZWRVc2VkID0gKFNLX1U4KVNLX0xTUEVFRF9TVEFUXzEwMDBNQlBTOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfTFNQRUVEXzEwME1CUFM6Ci0JCQlwUHJ0LT5QTGlua1NwZWVkVXNlZCA9IChTS19VOClTS19MU1BFRURfU1RBVF8xMDBNQlBTOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfTFNQRUVEXzEwTUJQUzoKLQkJCXBQcnQtPlBMaW5rU3BlZWRVc2VkID0gKFNLX1U4KVNLX0xTUEVFRF9TVEFUXzEwTUJQUzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU2V0IExpbmsgTW9kZSBTdGF0dXMgKi8KLQkJaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCQlwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9GVUxMOwotCQl9Ci0JCWVsc2UgewotICAgICAgICAgICAgcFBydC0+UExpbmtNb2RlU3RhdHVzID0gKFNLX1U4KVNLX0xNT0RFX1NUQVRfSEFMRjsKLQkJfQotCi0JCS8qIE5vIGZsb3cgY29udHJvbCB3aXRob3V0IGF1dG8tbmVnb3RpYXRpb24gKi8KLSAgICAgICAgcFBydC0+UEZsb3dDdHJsU3RhdHVzID0gKFNLX1U4KVNLX0ZMT1dfU1RBVF9OT05FOwotCi0JCS8qIGVuYWJsZSBSeC9UeCAqLwotICAgICAgICAodm9pZClTa01hY1J4VHhFbmFibGUocEFDLCBJb0MsIFBvcnQpOwotCX0KLX0JLyogU2tIV0xpbmtVcCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa01hY1Bhcml0eSgpIC0gTUFDIHBhcml0eSB3b3JrYXJvdW5kCi0gKgotICogRGVzY3JpcHRpb246IGhhbmRsZXMgTUFDIHBhcml0eSBlcnJvcnMgY29ycmVjdGx5Ci0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXN0YXRpYyB2b2lkIFNrTWFjUGFyaXR5KAotU0tfQUMJKnBBQywJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCS8qIFBvcnQgSW5kZXggb2YgdGhlIHBvcnQgZmFpbGVkICovCi17Ci0JU0tfRVZQQVJBCVBhcmE7Ci0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0JU0tfVTMyCQlUeE1heDsJCS8qIFR4IE1heCBTaXplIENvdW50ZXIgKi8KLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JLyogQ2xlYXIgSVJRIFR4IFBhcml0eSBFcnJvciAqLwotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCi0JCVNLX09VVDE2KElvQywgTVJfQUREUihQb3J0LCBUWF9NRkZfQ1RSTDEpLCBNRkZfQ0xSX1BFUlIpOwotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJLyogSFctQnVnICM4OiBjbGVhcmVkIGJ5IEdNRl9DTElfVFhfRkMgaW5zdGVhZCBvZiBHTUZfQ0xJX1RYX1BFICovCi0JCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFRYX0dNRl9DVFJMX1QpLAotCQkJKFNLX1U4KSgocEFDLT5HSW5pLkdJQ2hpcElkID09IENISVBfSURfWVVLT04gJiYKLQkJCXBBQy0+R0luaS5HSUNoaXBSZXYgPT0gMCkgPyBHTUZfQ0xJX1RYX0ZDIDogR01GX0NMSV9UWF9QRSkpOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCQotCWlmIChwUHJ0LT5QQ2hlY2tQYXIpIHsKLQotCQlpZiAoUG9ydCA9PSBNQUNfMSkgewotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9TSVJRX0UwMTYsIFNLRVJSX1NJUlFfRTAxNk1TRyk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSFcsIFNLRVJSX1NJUlFfRTAxNywgU0tFUlJfU0lSUV9FMDE3TVNHKTsKLQkJfQotCQlQYXJhLlBhcmE2NCA9IFBvcnQ7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUE9SVF9GQUlMLCBQYXJhKTsKLQkJCi0JCVBhcmEuUGFyYTMyWzBdID0gUG9ydDsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9STE1ULCBTS19STE1UX0xJTktfRE9XTiwgUGFyYSk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCS8qIENoZWNrIHdoZXRoZXIgZnJhbWVzIHdpdGggYSBzaXplIG9mIDFrIHdlcmUgc2VudCAqLwotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkvKiBTbmFwIHN0YXRpc3RpYyBjb3VudGVycyAqLwotCQkodm9pZClTa1htVXBkYXRlU3RhdHMocEFDLCBJb0MsIFBvcnQpOwotCQkKLQkJKHZvaWQpU2tYbU1hY1N0YXRpc3RpYyhwQUMsIElvQywgUG9ydCwgWE1fVFhGX01BWF9TWiwgJlR4TWF4KTsKLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0KLQkJKHZvaWQpU2tHbU1hY1N0YXRpc3RpYyhwQUMsIElvQywgUG9ydCwgR01fVFhGXzE1MThCLCAmVHhNYXgpOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCQotCWlmIChUeE1heCA+IDApIHsKLQkJLyogRnJvbSBub3cgb24gY2hlY2sgdGhlIHBhcml0eSAqLwotCQlwUHJ0LT5QQ2hlY2tQYXIgPSBTS19UUlVFOwotCX0KLX0JLyogU2tNYWNQYXJpdHkgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHZUh3RXJyKCkgLSBIYXJkd2FyZSBFcnJvciBzZXJ2aWNlIHJvdXRpbmUKLSAqCi0gKiBEZXNjcmlwdGlvbjogaGFuZGxlcyBhbGwgSFcgRXJyb3IgaW50ZXJydXB0cwotICoKLSAqIFJldHVybnM6IE4vQQotICovCi1zdGF0aWMgdm9pZCBTa0dlSHdFcnIoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotU0tfVTMyCUh3U3RhdHVzKQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHdvcmQgKi8KLXsKLQlTS19FVlBBUkEJUGFyYTsKLQlTS19VMTYJCVdvcmQ7Ci0KLQlpZiAoKEh3U3RhdHVzICYgKElTX0lSUV9NU1RfRVJSIHwgSVNfSVJRX1NUQVQpKSAhPSAwKSB7Ci0JCS8qIFBDSSBFcnJvcnMgb2NjdXJlZCAqLwotCQlpZiAoKEh3U3RhdHVzICYgSVNfSVJRX1NUQVQpICE9IDApIHsKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfU0lSUV9FMDEzLCBTS0VSUl9TSVJRX0UwMTNNU0cpOwotCQl9Ci0JCWVsc2UgewotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9TSVJRX0UwMTIsIFNLRVJSX1NJUlFfRTAxMk1TRyk7Ci0JCX0KLQotCQkvKiBSZXNldCBhbGwgYml0cyBpbiB0aGUgUENJIFNUQVRVUyByZWdpc3RlciAqLwotCQlTS19JTjE2KElvQywgUENJX0MoUENJX1NUQVRVUyksICZXb3JkKTsKLQkJCi0JCVNLX09VVDgoSW9DLCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOwotICAgICAgICBTS19PVVQxNihJb0MsIFBDSV9DKFBDSV9TVEFUVVMpLCAoU0tfVTE2KShXb3JkIHwgUENJX0VSUkJJVFMpKTsKLQkJU0tfT1VUOChJb0MsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOwotCi0JCVBhcmEuUGFyYTY0ID0gMDsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9BREFQX0ZBSUwsIFBhcmEpOwotCX0KLQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCi0JCWlmICgoSHdTdGF0dXMgJiBJU19OT19TVEFUX00xKSAhPSAwKSB7Ci0JCQkvKiBJZ25vcmUgaXQgKi8KLQkJCS8qIFRoaXMgc2l0dWF0aW9uIGlzIGFsc28gaW5kaWNhdGVkIGluIHRoZSBkZXNjcmlwdG9yICovCi0JCQlTS19PVVQxNihJb0MsIE1SX0FERFIoTUFDXzEsIFJYX01GRl9DVFJMMSksIE1GRl9DTFJfSU5TVEFUKTsKLQkJfQotCi0JCWlmICgoSHdTdGF0dXMgJiBJU19OT19TVEFUX00yKSAhPSAwKSB7Ci0JCQkvKiBJZ25vcmUgaXQgKi8KLQkJCS8qIFRoaXMgc2l0dWF0aW9uIGlzIGFsc28gaW5kaWNhdGVkIGluIHRoZSBkZXNjcmlwdG9yICovCi0JCQlTS19PVVQxNihJb0MsIE1SX0FERFIoTUFDXzIsIFJYX01GRl9DVFJMMSksIE1GRl9DTFJfSU5TVEFUKTsKLQkJfQotCi0JCWlmICgoSHdTdGF0dXMgJiBJU19OT19USVNUX00xKSAhPSAwKSB7Ci0JCQkvKiBJZ25vcmUgaXQgKi8KLQkJCS8qIFRoaXMgc2l0dWF0aW9uIGlzIGFsc28gaW5kaWNhdGVkIGluIHRoZSBkZXNjcmlwdG9yICovCi0JCQlTS19PVVQxNihJb0MsIE1SX0FERFIoTUFDXzEsIFJYX01GRl9DVFJMMSksIE1GRl9DTFJfSU5USVNUKTsKLQkJfQotCi0JCWlmICgoSHdTdGF0dXMgJiBJU19OT19USVNUX00yKSAhPSAwKSB7Ci0JCQkvKiBJZ25vcmUgaXQgKi8KLQkJCS8qIFRoaXMgc2l0dWF0aW9uIGlzIGFsc28gaW5kaWNhdGVkIGluIHRoZSBkZXNjcmlwdG9yICovCi0JCQlTS19PVVQxNihJb0MsIE1SX0FERFIoTUFDXzIsIFJYX01GRl9DVFJMMSksIE1GRl9DTFJfSU5USVNUKTsKLQkJfQotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJLyogVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBmb3IgUnggdGltaW5nIG1lYXN1cmVtZW50cyAqLwotCQlpZiAoKEh3U3RhdHVzICYgSVNfSVJRX1RJU1RfT1YpICE9IDApIHsKLQkJCS8qIGluY3JlbWVudCBUaW1lIFN0YW1wIFRpbWVyIGNvdW50ZXIgKGhpZ2gpICovCi0JCQlwQUMtPkdJbmkuR0lUaW1lU3RhbXBDbnQrKzsKLQotCQkJLyogQ2xlYXIgVGltZSBTdGFtcCBUaW1lciBJUlEgKi8KLQkJCVNLX09VVDgoSW9DLCBHTUFDX1RJX1NUX0NUUkwsIChTS19VOClHTVRfU1RfQ0xSX0lSUSk7Ci0JCX0KLQotCQlpZiAoKEh3U3RhdHVzICYgSVNfSVJRX1NFTlNPUikgIT0gMCkgewotCQkJLyogbm8gc2Vuc29ycyBvbiAzMi1iaXQgWXVrb24gKi8KLQkJCWlmIChwQUMtPkdJbmkuR0lZdWtvbjMyQml0KSB7Ci0JCQkJLyogZGlzYWJsZSBIVyBFcnJvciBJUlEgKi8KLQkJCQlwQUMtPkdJbmkuR0lWYWxJcnFNYXNrICY9IH5JU19IV19FUlI7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQotCWlmICgoSHdTdGF0dXMgJiBJU19SQU1fUkRfUEFSKSAhPSAwKSB7Ci0JCVNLX09VVDE2KElvQywgQjNfUklfQ1RSTCwgUklfQ0xSX1JEX1BFUlIpOwotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSFcsIFNLRVJSX1NJUlFfRTAxNCwgU0tFUlJfU0lSUV9FMDE0TVNHKTsKLQkJUGFyYS5QYXJhNjQgPSAwOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX0FEQVBfRkFJTCwgUGFyYSk7Ci0JfQotCi0JaWYgKChId1N0YXR1cyAmIElTX1JBTV9XUl9QQVIpICE9IDApIHsKLQkJU0tfT1VUMTYoSW9DLCBCM19SSV9DVFJMLCBSSV9DTFJfV1JfUEVSUik7Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfU0lSUV9FMDE1LCBTS0VSUl9TSVJRX0UwMTVNU0cpOwotCQlQYXJhLlBhcmE2NCA9IDA7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfQURBUF9GQUlMLCBQYXJhKTsKLQl9Ci0KLQlpZiAoKEh3U3RhdHVzICYgSVNfTTFfUEFSX0VSUikgIT0gMCkgewotCQlTa01hY1Bhcml0eShwQUMsIElvQywgTUFDXzEpOwotCX0KLQotCWlmICgoSHdTdGF0dXMgJiBJU19NMl9QQVJfRVJSKSAhPSAwKSB7Ci0JCVNrTWFjUGFyaXR5KHBBQywgSW9DLCBNQUNfMik7Ci0JfQotCi0JaWYgKChId1N0YXR1cyAmIElTX1IxX1BBUl9FUlIpICE9IDApIHsKLQkJLyogQ2xlYXIgSVJRICovCi0JCVNLX09VVDMyKElvQywgQjBfUjFfQ1NSLCBDU1JfSVJRX0NMX1ApOwotCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfU0lSUV9FMDE4LCBTS0VSUl9TSVJRX0UwMThNU0cpOwotCQlQYXJhLlBhcmE2NCA9IE1BQ18xOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1BPUlRfRkFJTCwgUGFyYSk7Ci0JCQotCQlQYXJhLlBhcmEzMlswXSA9IE1BQ18xOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfTElOS19ET1dOLCBQYXJhKTsKLQl9Ci0KLQlpZiAoKEh3U3RhdHVzICYgSVNfUjJfUEFSX0VSUikgIT0gMCkgewotCQkvKiBDbGVhciBJUlEgKi8KLQkJU0tfT1VUMzIoSW9DLCBCMF9SMl9DU1IsIENTUl9JUlFfQ0xfUCk7Ci0KLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9TSVJRX0UwMTksIFNLRVJSX1NJUlFfRTAxOU1TRyk7Ci0JCVBhcmEuUGFyYTY0ID0gTUFDXzI7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUE9SVF9GQUlMLCBQYXJhKTsKLQkJCi0JCVBhcmEuUGFyYTMyWzBdID0gTUFDXzI7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9MSU5LX0RPV04sIFBhcmEpOwotCX0KLX0JLyogU2tHZUh3RXJyICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VTaXJxSXNyKCkgLSBTcGVjaWFsIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUKLSAqCi0gKiBEZXNjcmlwdGlvbjogaGFuZGxlcyBhbGwgbm9uIGRhdGEgdHJhbnNmZXIgc3BlY2lmaWMgaW50ZXJydXB0cyAoc2xvdyBwYXRoKQotICoKLSAqIFJldHVybnM6IE4vQQotICovCi12b2lkIFNrR2VTaXJxSXNyKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLVNLX1UzMglJc3RhdHVzKQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHdvcmQgKi8KLXsKLQlTS19FVlBBUkEJUGFyYTsKLQlTS19VMzIJCVJlZ1ZhbDMyOwkvKiBSZWFkIHJlZ2lzdGVyIHZhbHVlICovCi0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0JU0tfVTE2IAkJUGh5SW50OwotCWludAkJCWk7Ci0KLQlpZiAoKChJc3RhdHVzICYgSVNfSFdfRVJSKSAmIHBBQy0+R0luaS5HSVZhbElycU1hc2spICE9IDApIHsKLQkJLyogcmVhZCB0aGUgSFcgRXJyb3IgSW50ZXJydXB0IHNvdXJjZSAqLwotCQlTS19JTjMyKElvQywgQjBfSFdFX0lTUkMsICZSZWdWYWwzMik7Ci0JCQotCQlTa0dlSHdFcnIocEFDLCBJb0MsIFJlZ1ZhbDMyKTsKLQl9Ci0KLQkvKgotCSAqIFBhY2tldCBUaW1lb3V0IGludGVycnVwdHMKLQkgKi8KLQkvKiBDaGVjayB3aGV0aGVyIE1BQ3MgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCAqLwotCWlmICgoKElzdGF0dXMgJiAoSVNfUEFfVE9fUlgxIHwgSVNfUEFfVE9fVFgxKSkgIT0gMCkgJiYKLQkJcEFDLT5HSW5pLkdQW01BQ18xXS5QU3RhdGUgPT0gU0tfUFJUX1JFU0VUKSB7Ci0JCS8qIE1BQyAxIHdhcyBub3QgaW5pdGlhbGl6ZWQgYnV0IFBhY2tldCB0aW1lb3V0IG9jY3VyZWQgKi8KLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfU0lSUV9FMDA0LAotCQkJU0tFUlJfU0lSUV9FMDA0TVNHKTsKLQl9Ci0KLQlpZiAoKChJc3RhdHVzICYgKElTX1BBX1RPX1JYMiB8IElTX1BBX1RPX1RYMikpICE9IDApICYmCi0JICAgIHBBQy0+R0luaS5HUFtNQUNfMl0uUFN0YXRlID09IFNLX1BSVF9SRVNFVCkgewotCQkvKiBNQUMgMiB3YXMgbm90IGluaXRpYWxpemVkIGJ1dCBQYWNrZXQgdGltZW91dCBvY2N1cmVkICovCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX1NJUlFfRTAwNSwKLQkJCVNLRVJSX1NJUlFfRTAwNU1TRyk7Ci0JfQotCi0JaWYgKChJc3RhdHVzICYgSVNfUEFfVE9fUlgxKSAhPSAwKSB7Ci0JCS8qIE1lYW5zIG5ldHdvcmsgaXMgZmlsbGluZyB1cyB1cCAqLwotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSFcgfCBTS19FUlJDTF9JTklULCBTS0VSUl9TSVJRX0UwMDIsCi0JCQlTS0VSUl9TSVJRX0UwMDJNU0cpOwotCQlTS19PVVQxNihJb0MsIEIzX1BBX0NUUkwsIFBBX0NMUl9UT19SWDEpOwotCX0KLQotCWlmICgoSXN0YXR1cyAmIElTX1BBX1RPX1JYMikgIT0gMCkgewotCQkvKiBNZWFucyBuZXR3b3JrIGlzIGZpbGxpbmcgdXMgdXAgKi8KLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfU0lSUV9FMDAzLAotCQkJU0tFUlJfU0lSUV9FMDAzTVNHKTsKLQkJU0tfT1VUMTYoSW9DLCBCM19QQV9DVFJMLCBQQV9DTFJfVE9fUlgyKTsKLQl9Ci0KLQlpZiAoKElzdGF0dXMgJiBJU19QQV9UT19UWDEpICE9IDApIHsKLQkJCi0JCXBQcnQgPSAmcEFDLT5HSW5pLkdQWzBdOwotCi0JCS8qIE1heSBiZSBhIG5vcm1hbCBzaXR1YXRpb24gaW4gYSBzZXJ2ZXIgd2l0aCBhIHNsb3cgbmV0d29yayAqLwotCQlTS19PVVQxNihJb0MsIEIzX1BBX0NUUkwsIFBBX0NMUl9UT19UWDEpOwotCi0jaWZkZWYgR0VORVNJUwotCQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkJLyoKLQkJCSAqIHdvcmthcm91bmQ6IGlmIGluIGhhbGYgZHVwbGV4IG1vZGUsIGNoZWNrIGZvciBUeCBoYW5ndXAuCi0JCQkgKiBSZWFkIG51bWJlciBvZiBUWCdlZCBieXRlcywgd2FpdCBmb3IgMTAgbXMsIHRoZW4gY29tcGFyZQotCQkJICogdGhlIG51bWJlciB3aXRoIGN1cnJlbnQgdmFsdWUuIElmIG5vdGhpbmcgY2hhbmdlZCwgd2UgYXNzdW1lCi0JCQkgKiB0aGF0IFR4IGlzIGhhbmdpbmcgYW5kIGRvIGEgRklGTyBmbHVzaCAoc2VlIGV2ZW50IHJvdXRpbmUpLgotCQkJICovCi0JCQlpZiAoKHBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0hBTEYgfHwKLQkJCQlwUHJ0LT5QTGlua01vZGVTdGF0dXMgPT0gU0tfTE1PREVfU1RBVF9BVVRPSEFMRikgJiYKLQkJCQkhcFBydC0+SGFsZkR1cFRpbWVyQWN0aXZlKSB7Ci0JCQkJLyoKLQkJCQkgKiBtYW55IG1vcmUgcGFjay4gYXJiLiB0aW1lb3V0cyBtYXkgY29tZSBpbiBiZXR3ZWVuLAotCQkJCSAqIHdlIGlnbm9yZSB0aG9zZQotCQkJCSAqLwotCQkJCXBQcnQtPkhhbGZEdXBUaW1lckFjdGl2ZSA9IFNLX1RSVUU7Ci0JCQkJLyogU25hcCBzdGF0aXN0aWMgY291bnRlcnMgKi8KLQkJCQkodm9pZClTa1htVXBkYXRlU3RhdHMocEFDLCBJb0MsIDApOwotCi0JCQkJKHZvaWQpU2tYbU1hY1N0YXRpc3RpYyhwQUMsIElvQywgMCwgWE1fVFhPX09LX0hJLCAmUmVnVmFsMzIpOwotCi0JCQkJcFBydC0+TGFzdE9jdGV0cyA9IChTS19VNjQpUmVnVmFsMzIgPDwgMzI7Ci0JCQkJCi0JCQkJKHZvaWQpU2tYbU1hY1N0YXRpc3RpYyhwQUMsIElvQywgMCwgWE1fVFhPX09LX0xPLCAmUmVnVmFsMzIpOwotCi0JCQkJcFBydC0+TGFzdE9jdGV0cyArPSBSZWdWYWwzMjsKLQkJCQkKLQkJCQlQYXJhLlBhcmEzMlswXSA9IDA7Ci0JCQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcFBydC0+SGFsZkR1cENoa1RpbWVyLCBTS19IQUxGRFVQX0NIS19USU1FLAotCQkJCQlTS0dFX0hXQUMsIFNLX0hXRVZfSEFMRkRVUF9DSEssIFBhcmEpOwotCQkJfQotCQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCX0KLQotCWlmICgoSXN0YXR1cyAmIElTX1BBX1RPX1RYMikgIT0gMCkgewotCQkKLQkJcFBydCA9ICZwQUMtPkdJbmkuR1BbMV07Ci0KLQkJLyogTWF5IGJlIGEgbm9ybWFsIHNpdHVhdGlvbiBpbiBhIHNlcnZlciB3aXRoIGEgc2xvdyBuZXR3b3JrICovCi0JCVNLX09VVDE2KElvQywgQjNfUEFfQ1RSTCwgUEFfQ0xSX1RPX1RYMik7Ci0KLSNpZmRlZiBHRU5FU0lTCi0JCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQkvKiB3b3JrYXJvdW5kOiBzZWUgYWJvdmUgKi8KLQkJCWlmICgocFBydC0+UExpbmtNb2RlU3RhdHVzID09IFNLX0xNT0RFX1NUQVRfSEFMRiB8fAotCQkJCSBwUHJ0LT5QTGlua01vZGVTdGF0dXMgPT0gU0tfTE1PREVfU1RBVF9BVVRPSEFMRikgJiYKLQkJCQkhcFBydC0+SGFsZkR1cFRpbWVyQWN0aXZlKSB7Ci0JCQkJcFBydC0+SGFsZkR1cFRpbWVyQWN0aXZlID0gU0tfVFJVRTsKLQkJCQkvKiBTbmFwIHN0YXRpc3RpYyBjb3VudGVycyAqLwotCQkJCSh2b2lkKVNrWG1VcGRhdGVTdGF0cyhwQUMsIElvQywgMSk7Ci0KLQkJCQkodm9pZClTa1htTWFjU3RhdGlzdGljKHBBQywgSW9DLCAxLCBYTV9UWE9fT0tfSEksICZSZWdWYWwzMik7Ci0KLQkJCQlwUHJ0LT5MYXN0T2N0ZXRzID0gKFNLX1U2NClSZWdWYWwzMiA8PCAzMjsKLQkJCQkKLQkJCQkodm9pZClTa1htTWFjU3RhdGlzdGljKHBBQywgSW9DLCAxLCBYTV9UWE9fT0tfTE8sICZSZWdWYWwzMik7Ci0KLQkJCQlwUHJ0LT5MYXN0T2N0ZXRzICs9IFJlZ1ZhbDMyOwotCQkJCQotCQkJCVBhcmEuUGFyYTMyWzBdID0gMTsKLQkJCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwUHJ0LT5IYWxmRHVwQ2hrVGltZXIsIFNLX0hBTEZEVVBfQ0hLX1RJTUUsCi0JCQkJCVNLR0VfSFdBQywgU0tfSFdFVl9IQUxGRFVQX0NISywgUGFyYSk7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JfQotCi0JLyogQ2hlY2sgaW50ZXJydXB0cyBvZiB0aGUgcGFydGljdWxhciBxdWV1ZXMgKi8KLQlpZiAoKElzdGF0dXMgJiBJU19SMV9DKSAhPSAwKSB7Ci0JCS8qIENsZWFyIElSUSAqLwotCQlTS19PVVQzMihJb0MsIEIwX1IxX0NTUiwgQ1NSX0lSUV9DTF9DKTsKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfU0lSUV9FMDA2LAotCQkJU0tFUlJfU0lSUV9FMDA2TVNHKTsKLQkJUGFyYS5QYXJhNjQgPSBNQUNfMTsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9QT1JUX0ZBSUwsIFBhcmEpOwotCQlQYXJhLlBhcmEzMlswXSA9IE1BQ18xOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfTElOS19ET1dOLCBQYXJhKTsKLQl9Ci0KLQlpZiAoKElzdGF0dXMgJiBJU19SMl9DKSAhPSAwKSB7Ci0JCS8qIENsZWFyIElSUSAqLwotCQlTS19PVVQzMihJb0MsIEIwX1IyX0NTUiwgQ1NSX0lSUV9DTF9DKTsKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfU0lSUV9FMDA3LAotCQkJU0tFUlJfU0lSUV9FMDA3TVNHKTsKLQkJUGFyYS5QYXJhNjQgPSBNQUNfMjsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9QT1JUX0ZBSUwsIFBhcmEpOwotCQlQYXJhLlBhcmEzMlswXSA9IE1BQ18yOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfTElOS19ET1dOLCBQYXJhKTsKLQl9Ci0KLQlpZiAoKElzdGF0dXMgJiBJU19YUzFfQykgIT0gMCkgewotCQkvKiBDbGVhciBJUlEgKi8KLQkJU0tfT1VUMzIoSW9DLCBCMF9YUzFfQ1NSLCBDU1JfSVJRX0NMX0MpOwotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1cgfCBTS19FUlJDTF9JTklULCBTS0VSUl9TSVJRX0UwMDgsCi0JCQlTS0VSUl9TSVJRX0UwMDhNU0cpOwotCQlQYXJhLlBhcmE2NCA9IE1BQ18xOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1BPUlRfRkFJTCwgUGFyYSk7Ci0JCVBhcmEuUGFyYTMyWzBdID0gTUFDXzE7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9MSU5LX0RPV04sIFBhcmEpOwotCX0KLQotCWlmICgoSXN0YXR1cyAmIElTX1hBMV9DKSAhPSAwKSB7Ci0JCS8qIENsZWFyIElSUSAqLwotCQlTS19PVVQzMihJb0MsIEIwX1hBMV9DU1IsIENTUl9JUlFfQ0xfQyk7Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX1NJUlFfRTAwOSwKLQkJCVNLRVJSX1NJUlFfRTAwOU1TRyk7Ci0JCVBhcmEuUGFyYTY0ID0gTUFDXzE7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUE9SVF9GQUlMLCBQYXJhKTsKLQkJUGFyYS5QYXJhMzJbMF0gPSBNQUNfMTsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9STE1ULCBTS19STE1UX0xJTktfRE9XTiwgUGFyYSk7Ci0JfQotCi0JaWYgKChJc3RhdHVzICYgSVNfWFMyX0MpICE9IDApIHsKLQkJLyogQ2xlYXIgSVJRICovCi0JCVNLX09VVDMyKElvQywgQjBfWFMyX0NTUiwgQ1NSX0lSUV9DTF9DKTsKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfU0lSUV9FMDEwLAotCQkJU0tFUlJfU0lSUV9FMDEwTVNHKTsKLQkJUGFyYS5QYXJhNjQgPSBNQUNfMjsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9QT1JUX0ZBSUwsIFBhcmEpOwotCQlQYXJhLlBhcmEzMlswXSA9IE1BQ18yOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfTElOS19ET1dOLCBQYXJhKTsKLQl9Ci0KLQlpZiAoKElzdGF0dXMgJiBJU19YQTJfQykgIT0gMCkgewotCQkvKiBDbGVhciBJUlEgKi8KLQkJU0tfT1VUMzIoSW9DLCBCMF9YQTJfQ1NSLCBDU1JfSVJRX0NMX0MpOwotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1cgfCBTS19FUlJDTF9JTklULCBTS0VSUl9TSVJRX0UwMTEsCi0JCQlTS0VSUl9TSVJRX0UwMTFNU0cpOwotCQlQYXJhLlBhcmE2NCA9IE1BQ18yOwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1BPUlRfRkFJTCwgUGFyYSk7Ci0JCVBhcmEuUGFyYTMyWzBdID0gTUFDXzI7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9MSU5LX0RPV04sIFBhcmEpOwotCX0KLQotCS8qIEV4dGVybmFsIHJlZyBpbnRlcnJ1cHQgKi8KLQlpZiAoKElzdGF0dXMgJiBJU19FWFRfUkVHKSAhPSAwKSB7Ci0JCS8qIFRlc3QgSVJRcyBmcm9tIFBIWSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJCQotCQkJcFBydCA9ICZwQUMtPkdJbmkuR1BbaV07Ci0JCQkKLQkJCWlmIChwUHJ0LT5QU3RhdGUgPT0gU0tfUFJUX1JFU0VUKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkKLSNpZmRlZiBHRU5FU0lTCi0JCQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkJCQotCQkJCXN3aXRjaCAocFBydC0+UGh5VHlwZSkgewotCQkJCQotCQkJCWNhc2UgU0tfUEhZX1hNQUM6Ci0JCQkJCWJyZWFrOwotCQkJCQotCQkJCWNhc2UgU0tfUEhZX0JDT006Ci0JCQkJCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBpLCBQSFlfQkNPTV9JTlRfU1RBVCwgJlBoeUludCk7Ci0JCi0JCQkJCWlmICgoUGh5SW50ICYgflBIWV9CX0RFRl9NU0spICE9IDApIHsKLQkJCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJCQkJCSgiUG9ydCAlZCBCY29tIEludDogMHglMDRYXG4iLAotCQkJCQkJCWksIFBoeUludCkpOwotCQkJCQkJU2tQaHlJc3JCY29tKHBBQywgSW9DLCBpLCBQaHlJbnQpOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotI2lmZGVmIE9USEVSX1BIWQotCQkJCWNhc2UgU0tfUEhZX0xPTkU6Ci0JCQkJCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBpLCBQSFlfTE9ORV9JTlRfU1RBVCwgJlBoeUludCk7Ci0JCQkJCQotCQkJCQlpZiAoKFBoeUludCAmIFBIWV9MX0RFRl9NU0spICE9IDApIHsKLQkJCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJCQkJCSgiUG9ydCAlZCBMb25lIEludDogJXhcbiIsCi0JCQkJCQkJaSwgUGh5SW50KSk7Ci0JCQkJCQlTa1BoeUlzckxvbmUocEFDLCBJb0MsIGksIFBoeUludCk7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYgLyogT1RIRVJfUEhZICovCi0JCQkJfQotCQkJfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCQkJaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCQkJLyogUmVhZCBQSFkgSW50ZXJydXB0IFN0YXR1cyAqLwotCQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBpLCBQSFlfTUFSVl9JTlRfU1RBVCwgJlBoeUludCk7Ci0KLQkJCQlpZiAoKFBoeUludCAmIFBIWV9NX0RFRl9NU0spICE9IDApIHsKLQkJCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9JUlEsCi0JCQkJCQkoIlBvcnQgJWQgTWFydiBJbnQ6IDB4JTA0WFxuIiwKLQkJCQkJCWksIFBoeUludCkpOwotCQkJCQlTa1BoeUlzckdtYWMocEFDLCBJb0MsIGksIFBoeUludCk7Ci0JCQkJfQotCQkJfQotI2VuZGlmIC8qIFlVS09OICovCi0JCX0KLQl9Ci0KLQkvKiBJMkMgUmVhZHkgaW50ZXJydXB0ICovCi0JaWYgKChJc3RhdHVzICYgSVNfSTJDX1JFQURZKSAhPSAwKSB7Ci0jaWZkZWYgU0tfU0xJTQotICAgICAgICBTS19PVVQzMihJb0MsIEIyX0kyQ19JUlEsIEkyQ19DTFJfSVJRKTsKLSNlbHNlCQkKLQkJU2tJMmNJc3IocEFDLCBJb0MpOwotI2VuZGlmCQkKLQl9Ci0KLQkvKiBTVyBmb3JjZWQgaW50ZXJydXB0ICovCi0JaWYgKChJc3RhdHVzICYgSVNfSVJRX1NXKSAhPSAwKSB7Ci0JCS8qIGNsZWFyIHRoZSBzb2Z0d2FyZSBJUlEgKi8KLQkJU0tfT1VUOChJb0MsIEIwX0NUU1QsIENTX0NMX1NXX0lSUSk7Ci0JfQotCi0JaWYgKChJc3RhdHVzICYgSVNfTE5LX1NZTkNfTTEpICE9IDApIHsKLQkJLyoKLQkJICogV2UgZG8gTk9UIG5lZWQgdGhlIExpbmsgU3luYyBpbnRlcnJ1cHQsIGJlY2F1c2UgaXQgc2hvd3MKLQkJICogdXMgb25seSBhIGxpbmsgZ29pbmcgZG93bi4KLQkJICovCi0JCS8qIGNsZWFyIGludGVycnVwdCAqLwotCQlTS19PVVQ4KElvQywgTVJfQUREUihNQUNfMSwgTE5LX1NZTkNfQ1RSTCksIExFRF9DTFJfSVJRKTsKLQl9Ci0KLQkvKiBDaGVjayBNQUMgYWZ0ZXIgbGluayBzeW5jIGNvdW50ZXIgKi8KLQlpZiAoKElzdGF0dXMgJiBJU19NQUMxKSAhPSAwKSB7Ci0JCS8qIElSUSBmcm9tIE1BQyAxICovCi0JCVNrTWFjSXJxKHBBQywgSW9DLCBNQUNfMSk7Ci0JfQotCi0JaWYgKChJc3RhdHVzICYgSVNfTE5LX1NZTkNfTTIpICE9IDApIHsKLQkJLyoKLQkJICogV2UgZG8gTk9UIG5lZWQgdGhlIExpbmsgU3luYyBpbnRlcnJ1cHQsIGJlY2F1c2UgaXQgc2hvd3MKLQkJICogdXMgb25seSBhIGxpbmsgZ29pbmcgZG93bi4KLQkJICovCi0JCS8qIGNsZWFyIGludGVycnVwdCAqLwotCQlTS19PVVQ4KElvQywgTVJfQUREUihNQUNfMiwgTE5LX1NZTkNfQ1RSTCksIExFRF9DTFJfSVJRKTsKLQl9Ci0KLQkvKiBDaGVjayBNQUMgYWZ0ZXIgbGluayBzeW5jIGNvdW50ZXIgKi8KLQlpZiAoKElzdGF0dXMgJiBJU19NQUMyKSAhPSAwKSB7Ci0JCS8qIElSUSBmcm9tIE1BQyAyICovCi0JCVNrTWFjSXJxKHBBQywgSW9DLCBNQUNfMik7Ci0JfQotCi0JLyogVGltZXIgaW50ZXJydXB0IChzZXJ2ZWQgbGFzdCkgKi8KLQlpZiAoKElzdGF0dXMgJiBJU19USU1JTlQpICE9IDApIHsKLQkJLyogY2hlY2sgZm9yIEhXIEVycm9ycyAqLwotCQlpZiAoKChJc3RhdHVzICYgSVNfSFdfRVJSKSAmIH5wQUMtPkdJbmkuR0lWYWxJcnFNYXNrKSAhPSAwKSB7Ci0JCQkvKiByZWFkIHRoZSBIVyBFcnJvciBJbnRlcnJ1cHQgc291cmNlICovCi0JCQlTS19JTjMyKElvQywgQjBfSFdFX0lTUkMsICZSZWdWYWwzMik7Ci0KLQkJCVNrR2VId0VycihwQUMsIElvQywgUmVnVmFsMzIpOwotCQl9Ci0KLQkJU2tId3RJc3IocEFDLCBJb0MpOwotCX0KLQotfQkvKiBTa0dlU2lycUlzciAqLwotCi0KLSNpZmRlZiBHRU5FU0lTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU2tHZVBvcnRDaGVja1Nob3J0cygpIC0gSW1wbGVtZW50aW5nIFhNQUMgV29ya2Fyb3VuZCBFcnJhdGEgIyAyCi0gKgotICogcmV0dXJuOgotICoJMAlvLmsuIG5vdGhpbmcgbmVlZGVkCi0gKgkxCVJlc3RhcnQgbmVlZGVkIG9uIHRoaXMgcG9ydAotICovCi1zdGF0aWMgaW50IFNrR2VQb3J0Q2hlY2tTaG9ydHMoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gQ29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogV2hpY2ggcG9ydCBzaG91bGQgYmUgY2hlY2tlZCAqLwotewotCVNLX1UzMgkJU2hvcnRzOwkJCS8qIFNob3J0IEV2ZW50IENvdW50ZXIgKi8KLQlTS19VMzIJCUNoZWNrU2hvcnRzOwkvKiBDaGVjayB2YWx1ZSBmb3IgU2hvcnQgRXZlbnQgQ291bnRlciAqLwotCVNLX1U2NAkJUnhDdHM7CQkJLyogUnggQ291bnRlciAocGFja2V0cyBvbiBuZXR3b3JrKSAqLwotCVNLX1UzMgkJUnhUbXA7CQkJLyogUnggdGVtcC4gQ291bnRlciAqLwotCVNLX1UzMgkJRmNzRXJyQ3RzOwkJLyogRkNTIEVycm9yIENvdW50ZXIgKi8KLQlTS19HRVBPUlQJKnBQcnQ7CQkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0JaW50CQkJUnR2OwkJCS8qIFJldHVybiB2YWx1ZSAqLwotCWludAkJCWk7Ci0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotCS8qIERlZmF1bHQ6IG5vIGFjdGlvbiAqLwotCVJ0diA9IFNLX0hXX1BTX05PTkU7Ci0KLQkodm9pZClTa1htVXBkYXRlU3RhdHMocEFDLCBJb0MsIFBvcnQpOwotCi0JLyogRXh0cmEgcHJlY2F1dGlvbjogY2hlY2sgZm9yIHNob3J0IEV2ZW50IGNvdW50ZXIgKi8KLQkodm9pZClTa1htTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQb3J0LCBYTV9SWEVfU0hUX0VSUiwgJlNob3J0cyk7Ci0KLQkvKgotCSAqIFJlYWQgUnggY291bnRlcnMgKHBhY2tldHMgc2VlbiBvbiB0aGUgbmV0d29yayBhbmQgbm90IG5lY2Vzc2FyaWx5Ci0JICogcmVhbGx5IHJlY2VpdmVkLgotCSAqLwotCVJ4Q3RzID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKFNrR2VSeFJlZ3MpOyBpKyspIHsKLQkJCi0JCSh2b2lkKVNrWG1NYWNTdGF0aXN0aWMocEFDLCBJb0MsIFBvcnQsIFNrR2VSeFJlZ3NbaV0sICZSeFRtcCk7Ci0JCQotCQlSeEN0cyArPSAoU0tfVTY0KVJ4VG1wOwotCX0KLQotCS8qIE9uIGRlZmF1bHQ6IGNoZWNrIHNob3J0cyBhZ2FpbnN0IHplcm8gKi8KLQlDaGVja1Nob3J0cyA9IDA7Ci0KLQkvKiBFeHRyYSBwcmVjYXV0aW9uIG9uIGFjdGl2ZSBsaW5rcyAqLwotCWlmIChwUHJ0LT5QSFdMaW5rVXApIHsKLQkJLyogUmVzZXQgTGluayBSZXN0YXJ0IGNvdW50ZXIgKi8KLQkJcFBydC0+UExpbmtSZXNDdCA9IDA7Ci0JCXBQcnQtPlBBdXRvTmVnVE9DdCA9IDA7Ci0KLQkJLyogSWYgbGluayBpcyB1cCBjaGVjayBmb3IgMiAqLwotCQlDaGVja1Nob3J0cyA9IDI7Ci0KLQkJKHZvaWQpU2tYbU1hY1N0YXRpc3RpYyhwQUMsIElvQywgUG9ydCwgWE1fUlhGX0ZDU19FUlIsICZGY3NFcnJDdHMpOwotCQkKLQkJaWYgKHBQcnQtPlBMaW5rTW9kZUNvbmYgPT0gU0tfTE1PREVfQVVUT1NFTlNFICYmCi0JCSAgICBwUHJ0LT5QTGlwYUF1dG9OZWcgPT0gU0tfTElQQV9VTktOT1dOICYmCi0JCSAgICAocFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0hBTEYgfHwKLQkJCSBwUHJ0LT5QTGlua01vZGUgPT0gU0tfTE1PREVfRlVMTCkpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGF1dG9zZW5zaW5nIGFuZCB3ZSBhcmUgaW4gdGhlIGZhbGxiYWNrCi0JCQkgKiBtYW51YWwgZnVsbC9oYWxmIGR1cGxleCBtb2RlLgotCQkJICovCi0JCQlpZiAoUnhDdHMgPT0gcFBydC0+UFByZXZSeCkgewotCQkJCS8qIE5vdGhpbmcgcmVjZWl2ZWQsIHJlc3RhcnQgbGluayAqLwotCQkJCXBQcnQtPlBQcmV2RmNzID0gRmNzRXJyQ3RzOwotCQkJCXBQcnQtPlBQcmV2U2hvcnRzID0gU2hvcnRzOwotCQkJCQotCQkJCXJldHVybihTS19IV19QU19SRVNUQVJUKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXBQcnQtPlBMaXBhQXV0b05lZyA9IFNLX0xJUEFfTUFOVUFMOwotCQkJfQotCQl9Ci0KLQkJaWYgKCgoUnhDdHMgLSBwUHJ0LT5QUHJldlJ4KSA+IHBQcnQtPlBSeExpbSkgfHwKLQkJICAgICghKEZjc0VyckN0cyAtIHBQcnQtPlBQcmV2RmNzKSkpIHsKLQkJCS8qCi0JCQkgKiBOb3RlOiBUaGUgY29tcGFyZSB3aXRoIHplcm8gYWJvdmUgaGFzIHRvIGJlIGRvbmUgdGhlIHdheSBzaG93biwKLQkJCSAqIG90aGVyd2lzZSB0aGUgTGludXggZHJpdmVyIHdpbGwgaGF2ZSBhIHByb2JsZW0uCi0JCQkgKi8KLQkJCS8qCi0JCQkgKiBXZSByZWNlaXZlZCBhIGJ1bmNoIG9mIGZyYW1lcyBvciBubyBDUkMgZXJyb3Igb2NjdXJlZCBvbiB0aGUKLQkJCSAqIG5ldHdvcmsgLT4gb2suCi0JCQkgKi8KLQkJCXBQcnQtPlBQcmV2UnggPSBSeEN0czsKLQkJCXBQcnQtPlBQcmV2RmNzID0gRmNzRXJyQ3RzOwotCQkJcFBydC0+UFByZXZTaG9ydHMgPSBTaG9ydHM7Ci0KLQkJCXJldHVybihTS19IV19QU19OT05FKTsKLQkJfQotCi0JCXBQcnQtPlBQcmV2RmNzID0gRmNzRXJyQ3RzOwotCX0KLQotCi0JaWYgKChTaG9ydHMgLSBwUHJ0LT5QUHJldlNob3J0cykgPiBDaGVja1Nob3J0cykgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0lSUSwKLQkJCSgiU2hvcnQgRXZlbnQgQ291bnQgUmVzdGFydCBQb3J0ICVkIFxuIiwgUG9ydCkpOwotCQlSdHYgPSBTS19IV19QU19SRVNUQVJUOwotCX0KLQotCXBQcnQtPlBQcmV2U2hvcnRzID0gU2hvcnRzOwotCXBQcnQtPlBQcmV2UnggPSBSeEN0czsKLQotCXJldHVybihSdHYpOwotfQkvKiBTa0dlUG9ydENoZWNrU2hvcnRzICovCi0jZW5kaWYgLyogR0VORVNJUyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTa0dlUG9ydENoZWNrVXAoKSAtIENoZWNrIGlmIHRoZSBsaW5rIGlzIHVwCi0gKgotICogcmV0dXJuOgotICoJMAlvLmsuIG5vdGhpbmcgbmVlZGVkCi0gKgkxCVJlc3RhcnQgbmVlZGVkIG9uIHRoaXMgcG9ydAotICoJMglMaW5rIGNhbWUgdXAKLSAqLwotc3RhdGljIGludCBTa0dlUG9ydENoZWNrVXAoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gQ29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogV2hpY2ggcG9ydCBzaG91bGQgYmUgY2hlY2tlZCAqLwotewotCVNLX0dFUE9SVAkqcFBydDsJCS8qIEdJbmkgUG9ydCBzdHJ1Y3QgcG9pbnRlciAqLwotCVNLX0JPT0wJCUF1dG9OZWc7CS8qIElzIEF1dG8tbmVnb3RpYXRpb24gdXNlZCA/ICovCi0JaW50CQkJUnR2OwkJLyogUmV0dXJuIHZhbHVlICovCi0KLQlSdHYgPSBTS19IV19QU19OT05FOwotCQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9IQUxGIHx8IHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCUF1dG9OZWcgPSBTS19GQUxTRTsKLQl9Ci0JZWxzZSB7Ci0JCUF1dG9OZWcgPSBTS19UUlVFOwotCX0KLQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCi0JCXN3aXRjaCAocFBydC0+UGh5VHlwZSkgewotCQkKLQkJY2FzZSBTS19QSFlfWE1BQzoKLQkJCVJ0diA9IFNrR2VQb3J0Q2hlY2tVcFhtYWMocEFDLCBJb0MsIFBvcnQsIEF1dG9OZWcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfUEhZX0JDT006Ci0JCQlSdHYgPSBTa0dlUG9ydENoZWNrVXBCY29tKHBBQywgSW9DLCBQb3J0LCBBdXRvTmVnKTsKLQkJCWJyZWFrOwotI2lmZGVmIE9USEVSX1BIWQotCQljYXNlIFNLX1BIWV9MT05FOgotCQkJUnR2ID0gU2tHZVBvcnRDaGVja1VwTG9uZShwQUMsIElvQywgUG9ydCwgQXV0b05lZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBTS19QSFlfTkFUOgotCQkJUnR2ID0gU2tHZVBvcnRDaGVja1VwTmF0KHBBQywgSW9DLCBQb3J0LCBBdXRvTmVnKTsKLQkJCWJyZWFrOwotI2VuZGlmIC8qIE9USEVSX1BIWSAqLwotCQl9Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkKLQkJUnR2ID0gU2tHZVBvcnRDaGVja1VwR21hYyhwQUMsIElvQywgUG9ydCwgQXV0b05lZyk7Ci0JfQotI2VuZGlmIC8qIFlVS09OICovCi0KLQlyZXR1cm4oUnR2KTsJCi19CS8qIFNrR2VQb3J0Q2hlY2tVcCAqLwotCi0KLSNpZmRlZiBHRU5FU0lTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU2tHZVBvcnRDaGVja1VwWG1hYygpIC0gSW1wbGVtZW50aW5nIG9mIHRoZSBXb3JrYXJvdW5kIEVycmF0YSAjIDIKLSAqCi0gKiByZXR1cm46Ci0gKgkwCW8uay4gbm90aGluZyBuZWVkZWQKLSAqCTEJUmVzdGFydCBuZWVkZWQgb24gdGhpcyBwb3J0Ci0gKgkyCUxpbmsgY2FtZSB1cAotICovCi1zdGF0aWMgaW50IFNrR2VQb3J0Q2hlY2tVcFhtYWMoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gQ29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogV2hpY2ggcG9ydCBzaG91bGQgYmUgY2hlY2tlZCAqLwotU0tfQk9PTAlBdXRvTmVnKQkvKiBJcyBBdXRvLW5lZ290aWF0aW9uIHVzZWQgPyAqLwotewotCVNLX1UzMgkJU2hvcnRzOwkJLyogU2hvcnQgRXZlbnQgQ291bnRlciAqLwotCVNLX0dFUE9SVAkqcFBydDsJCS8qIEdJbmkgUG9ydCBzdHJ1Y3QgcG9pbnRlciAqLwotCWludAkJCURvbmU7Ci0JU0tfVTMyCQlHcFJlZzsJCS8qIEdlbmVyYWwgUHVycG9zZSByZWdpc3RlciB2YWx1ZSAqLwotCVNLX1UxNgkJSXNyYzsJCS8qIEludGVycnVwdCBzb3VyY2UgcmVnaXN0ZXIgKi8KLQlTS19VMTYJCUlzcmNTdW07CS8qIEludGVycnVwdCBzb3VyY2UgcmVnaXN0ZXIgc3VtICovCi0JU0tfVTE2CQlMcEFiOwkJLyogTGluayBQYXJ0bmVyIEFiaWxpdHkgKi8KLQlTS19VMTYJCVJlc0FiOwkJLyogUmVzb2x2ZWQgQWJpbGl0eSAqLwotCVNLX1UxNgkJRXh0U3RhdDsJLyogRXh0ZW5kZWQgU3RhdHVzIFJlZ2lzdGVyICovCi0JU0tfVTgJCU5leHRNb2RlOwkvKiBOZXh0IEF1dG9TZW5zaW5nIE1vZGUgKi8KLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JaWYgKHBQcnQtPlBIV0xpbmtVcCkgewotCQlpZiAocFBydC0+UGh5VHlwZSAhPSBTS19QSFlfWE1BQykgewotCQkJcmV0dXJuKFNLX0hXX1BTX05PTkUpOwotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuKFNrR2VQb3J0Q2hlY2tTaG9ydHMocEFDLCBJb0MsIFBvcnQpKTsKLQkJfQotCX0KLQotCUlzcmNTdW0gPSBwUHJ0LT5QSXNhdmU7Ci0JcFBydC0+UElzYXZlID0gMDsKLQotCS8qIE5vdyB3YWl0IGZvciBlYWNoIHBvcnQncyBsaW5rICovCi0JaWYgKHBQcnQtPlBMaW5rQnJva2VuKSB7Ci0JCS8qIExpbmsgd2FzIGJyb2tlbiAqLwotCQlYTV9JTjMyKElvQywgUG9ydCwgWE1fR1BfUE9SVCwgJkdwUmVnKTsKLQotCQlpZiAoKEdwUmVnICYgWE1fR1BfSU5QX0FTUykgPT0gMCkgewotCQkJLyogVGhlIExpbmsgaXMgaW4gc3luYyAqLwotCQkJWE1fSU4xNihJb0MsIFBvcnQsIFhNX0lTUkMsICZJc3JjKTsKLQkJCUlzcmNTdW0gfD0gSXNyYzsKLQkJCVNrWG1BdXRvTmVnTGlwYVhtYWMocEFDLCBJb0MsIFBvcnQsIElzcmNTdW0pOwotCQkJCi0JCQlpZiAoKElzcmMgJiBYTV9JU19JTlBfQVNTKSA9PSAwKSB7Ci0JCQkJLyogSXQgaGFzIGJlZW4gaW4gc3luYyBzaW5jZSBsYXN0IHRpbWUgKi8KLQkJCQkvKiBSZXN0YXJ0IHRoZSBQT1JUICovCi0JCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9JUlEsCi0JCQkJCSgiTGluayBpbiBzeW5jIFJlc3RhcnQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCi0JCQkJKHZvaWQpU2tYbVVwZGF0ZVN0YXRzKHBBQywgSW9DLCBQb3J0KTsKLQotCQkJCS8qIFdlIG5vdyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0aGUgUHJldlNob3J0cyBjb3VudGVyICovCi0JCQkJKHZvaWQpU2tYbU1hY1N0YXRpc3RpYyhwQUMsIElvQywgUG9ydCwgWE1fUlhFX1NIVF9FUlIsICZTaG9ydHMpOwotCQkJCXBQcnQtPlBQcmV2U2hvcnRzID0gU2hvcnRzOwotCi0JCQkJcFBydC0+UExpbmtCcm9rZW4gPSBTS19GQUxTRTsKLQotCQkJCS8qCi0JCQkJICogTGluayBSZXN0YXJ0IFdvcmthcm91bmQ6Ci0JCQkJICogIGl0IG1heSBiZSBwb3NzaWJsZSB0aGF0IHRoZSBvdGhlciBMaW5rIHNpZGUKLQkJCQkgKiAgcmVzdGFydHMgaXRzIGxpbmsgYXMgd2VsbCBhbiB3ZSBkZXRlY3QKLQkJCQkgKiAgYW5vdGhlciBMaW5rQnJva2VuLiBUbyBwcmV2ZW50IHRoaXMKLQkJCQkgKiAgaGFwcGVuaW5nIHdlIGNoZWNrIGZvciBhIG1heGltdW0gbnVtYmVyCi0JCQkJICogIG9mIGNvbnNlY3V0aXZlIHJlc3RhcnQuIElmIHRob3NlIGhhcHBlbnMsCi0JCQkJICogIHdlIGRvIE5PVCByZXN0YXJ0IHRoZSBhY3RpdmUgbGluayBhbmQKLQkJCQkgKiAgY2hlY2sgd2hldGhlciB0aGUgbGluayBpcyBub3cgby5rLgotCQkJCSAqLwotCQkJCXBQcnQtPlBMaW5rUmVzQ3QrKzsKLQkJCQkKLQkJCQlwUHJ0LT5QQXV0b05lZ1RpbWVPdXQgPSAwOwotCi0JCQkJaWYgKHBQcnQtPlBMaW5rUmVzQ3QgPCBTS19NQVhfTFJFU1RBUlQpIHsKLQkJCQkJcmV0dXJuKFNLX0hXX1BTX1JFU1RBUlQpOwotCQkJCX0KLQotCQkJCXBQcnQtPlBMaW5rUmVzQ3QgPSAwOwotCQkJCQotCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkJKCJEbyBOT1QgcmVzdGFydCBvbiBQb3J0ICVkICV4ICV4XG4iLCBQb3J0LCBJc3JjLCBJc3JjU3VtKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwUHJ0LT5QSXNhdmUgPSAoU0tfVTE2KShJc3JjU3VtICYgWE1fSVNfQU5EKTsKLQkJCQkKLQkJCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJCSgiU2F2ZSBTeW5jL25vc3luYyBQb3J0ICVkICV4ICV4XG4iLCBQb3J0LCBJc3JjLCBJc3JjU3VtKSk7Ci0KLQkJCQkvKiBEbyBub3RoaW5nIG1vcmUgaWYgbGluayBpcyBicm9rZW4gKi8KLQkJCQlyZXR1cm4oU0tfSFdfUFNfTk9ORSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBEbyBub3RoaW5nIG1vcmUgaWYgbGluayBpcyBicm9rZW4gKi8KLQkJCXJldHVybihTS19IV19QU19OT05FKTsKLQkJfQotCi0JfQotCWVsc2UgewotCQkvKiBMaW5rIHdhcyBub3QgYnJva2VuLCBjaGVjayBpZiBpdCBpcyAqLwotCQlYTV9JTjE2KElvQywgUG9ydCwgWE1fSVNSQywgJklzcmMpOwotCQlJc3JjU3VtIHw9IElzcmM7Ci0JCWlmICgoSXNyYyAmIFhNX0lTX0lOUF9BU1MpICE9IDApIHsKLQkJCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9JU1JDLCAmSXNyYyk7Ci0JCQlJc3JjU3VtIHw9IElzcmM7Ci0JCQlpZiAoKElzcmMgJiBYTV9JU19JTlBfQVNTKSAhPSAwKSB7Ci0JCQkJWE1fSU4xNihJb0MsIFBvcnQsIFhNX0lTUkMsICZJc3JjKTsKLQkJCQlJc3JjU3VtIHw9IElzcmM7Ci0JCQkJaWYgKChJc3JjICYgWE1fSVNfSU5QX0FTUykgIT0gMCkgewotCQkJCQlwUHJ0LT5QTGlua0Jyb2tlbiA9IFNLX1RSVUU7Ci0JCQkJCS8qIFJlLUluaXQgTGluayBwYXJ0bmVyIEF1dG9uZWcgZmxhZyAqLwotCQkJCQlwUHJ0LT5QTGlwYUF1dG9OZWcgPSBTS19MSVBBX1VOS05PV047Ci0JCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJCQkJKCJMaW5rIGJyb2tlbiBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0KLQkJCQkJLyogQ2FibGUgcmVtb3ZlZC0+IHJlaW5pdCBzZW5zZSBtb2RlICovCi0JCQkJCVNrSFdJbml0RGVmU2Vuc2UocEFDLCBJb0MsIFBvcnQpOwotCi0JCQkJCXJldHVybihTS19IV19QU19SRVNUQVJUKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTa1htQXV0b05lZ0xpcGFYbWFjKHBBQywgSW9DLCBQb3J0LCBJc3JjKTsKLQkJCQotCQkJaWYgKFNrR2VQb3J0Q2hlY2tTaG9ydHMocEFDLCBJb0MsIFBvcnQpID09IFNLX0hXX1BTX1JFU1RBUlQpIHsKLQkJCQlyZXR1cm4oU0tfSFdfUFNfUkVTVEFSVCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIGhlcmUgd2UgdXN1YWxseSBjYW4gY2hlY2sgd2hldGhlciB0aGUgbGluayBpcyBpbiBzeW5jIGFuZAotCSAqIGF1dG8tbmVnb3RpYXRpb24gaXMgZG9uZS4KLQkgKi8KLQlYTV9JTjMyKElvQywgUG9ydCwgWE1fR1BfUE9SVCwgJkdwUmVnKTsKLQlYTV9JTjE2KElvQywgUG9ydCwgWE1fSVNSQywgJklzcmMpOwotCUlzcmNTdW0gfD0gSXNyYzsKLQotCVNrWG1BdXRvTmVnTGlwYVhtYWMocEFDLCBJb0MsIFBvcnQsIElzcmNTdW0pOwotCQotCWlmICgoR3BSZWcgJiBYTV9HUF9JTlBfQVNTKSAhPSAwIHx8IChJc3JjU3VtICYgWE1fSVNfSU5QX0FTUykgIT0gMCkgewotCQlpZiAoKEdwUmVnICYgWE1fR1BfSU5QX0FTUykgPT0gMCkgewotCQkJLyogU2F2ZSBBdXRvLW5lZ290aWF0aW9uIERvbmUgaW50ZXJydXB0IG9ubHkgaWYgbGluayBpcyBpbiBzeW5jICovCi0JCQlwUHJ0LT5QSXNhdmUgPSAoU0tfVTE2KShJc3JjU3VtICYgWE1fSVNfQU5EKTsKLQkJfQotI2lmZGVmIERFQlVHCi0JCWlmICgocFBydC0+UElzYXZlICYgWE1fSVNfQU5EKSAhPSAwKSB7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJBdXRvTmVnIGRvbmUgcmVzY2hlZHVsZWQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJcmV0dXJuKFNLX0hXX1BTX05PTkUpOwotCX0KLQotCWlmIChBdXRvTmVnKSB7Ci0JCWlmICgoSXNyY1N1bSAmIFhNX0lTX0FORCkgIT0gMCkgewotCQkJU2tIV0xpbmtVcChwQUMsIElvQywgUG9ydCk7Ci0JCQlEb25lID0gU2tNYWNBdXRvTmVnRG9uZShwQUMsIElvQywgUG9ydCk7Ci0JCQlpZiAoRG9uZSAhPSBTS19BTkRfT0spIHsKLQkJCQkvKiBHZXQgUEhZIHBhcmFtZXRlcnMsIGZvciBkZWJ1Z2dpbmcgb25seSAqLwotCQkJCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfWE1BQ19BVU5FX0xQLCAmTHBBYik7Ci0JCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9YTUFDX1JFU19BQkksICZSZXNBYik7Ci0JCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJCQkoIkF1dG9OZWcgRkFJTCBQb3J0ICVkIChMcEFiICV4LCBSZXNBYiAleClcbiIsCi0JCQkJCSBQb3J0LCBMcEFiLCBSZXNBYikpOwotCQkJCQkKLQkJCQkvKiBUcnkgbmV4dCBwb3NzaWJsZSBtb2RlICovCi0JCQkJTmV4dE1vZGUgPSBTa0hXU2Vuc2VHZXROZXh0KHBBQywgSW9DLCBQb3J0KTsKLQkJCQlTa0hXTGlua0Rvd24ocEFDLCBJb0MsIFBvcnQpOwotCQkJCWlmIChEb25lID09IFNLX0FORF9EVVBfQ0FQKSB7Ci0JCQkJCS8qIEdvVG8gbmV4dCBtb2RlICovCi0JCQkJCVNrSFdTZW5zZVNldE5leHQocEFDLCBJb0MsIFBvcnQsIE5leHRNb2RlKTsKLQkJCQl9Ci0KLQkJCQlyZXR1cm4oU0tfSFdfUFNfUkVTVEFSVCk7Ci0JCQl9Ci0JCQkvKgotCQkJICogRHVtbXkgUmVhZCBleHRlbmRlZCBzdGF0dXMgdG8gcHJldmVudCBleHRyYSBsaW5rIGRvd24vdXBzCi0JCQkgKiAoY2xlYXIgUGFnZSBSZWNlaXZlZCBiaXQgaWYgc2V0KQotCQkJICovCi0JCQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX1hNQUNfQVVORV9FWFAsICZFeHRTdGF0KTsKLQkJCQotCQkJcmV0dXJuKFNLX0hXX1BTX0xJTkspOwotCQl9Ci0JCQotCQkvKiBBdXRvTmVnIG5vdCBkb25lLCBidXQgSFcgbGluayBpcyB1cC4gQ2hlY2sgZm9yIHRpbWVvdXRzICovCi0JCXBQcnQtPlBBdXRvTmVnVGltZU91dCsrOwotCQlpZiAocFBydC0+UEF1dG9OZWdUaW1lT3V0ID49IFNLX0FORF9NQVhfVE8pIHsKLQkJCS8qIEluY3JlYXNlIHRoZSBUaW1lb3V0IGNvdW50ZXIgKi8KLQkJCXBQcnQtPlBBdXRvTmVnVE9DdCsrOwotCi0JCQkvKiBUaW1lb3V0IG9jY3VyZWQgKi8KLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJCSgiQXV0b05lZyB0aW1lb3V0IFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJCWlmIChwUHJ0LT5QTGlua01vZGVDb25mID09IFNLX0xNT0RFX0FVVE9TRU5TRSAmJgotCQkJCXBQcnQtPlBMaXBhQXV0b05lZyAhPSBTS19MSVBBX0FVVE8pIHsKLQkJCQkvKiBTZXQgTGluayBtYW51YWxseSB1cCAqLwotCQkJCVNrSFdTZW5zZVNldE5leHQocEFDLCBJb0MsIFBvcnQsIFNLX0xNT0RFX0ZVTEwpOwotCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJCQkoIlNldCBtYW51YWwgZnVsbCBkdXBsZXggUG9ydCAlZFxuIiwgUG9ydCkpOwotCQkJfQotCi0JCQlpZiAocFBydC0+UExpbmtNb2RlQ29uZiA9PSBTS19MTU9ERV9BVVRPU0VOU0UgJiYKLQkJCQlwUHJ0LT5QTGlwYUF1dG9OZWcgPT0gU0tfTElQQV9BVVRPICYmCi0JCQkJcFBydC0+UEF1dG9OZWdUT0N0ID49IFNLX01BWF9BTkVHX1RPKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIGlzIHJhdGhlciBjb21wbGljYXRlZC4KLQkJCQkgKiB3ZSBuZWVkIHRvIGNoZWNrIGhlcmUgd2hldGhlciB0aGUgTElQQV9BVVRPCi0JCQkJICogd2Ugc2F3IGJlZm9yZSBpcyBmYWxzZSBhbGVydC4gV2Ugc2F3IGF0IG9uZQotCQkJCSAqIHN3aXRjaCAoIFNSODgwMCkgdGhhdCBvbiBib290IHRpbWUgaXQgc2VuZHMKLQkJCQkgKiBqdXN0IG9uZSBhdXRvLW5lZyBwYWNrZXQgYW5kIGRvZXMgbm8gZnVydGhlcgotCQkJCSAqIGF1dG8tbmVnb3RpYXRpb24uCi0JCQkJICogU29sdXRpb246IHdlIHJlc3RhcnQgdGhlIGF1dG9zZW5zaW5nIGFmdGVyCi0JCQkJICogYSBmZXcgdGltZW91dHMuCi0JCQkJICovCi0JCQkJcFBydC0+UEF1dG9OZWdUT0N0ID0gMDsKLQkJCQlwUHJ0LT5QTGlwYUF1dG9OZWcgPSBTS19MSVBBX1VOS05PV047Ci0JCQkJU2tIV0luaXREZWZTZW5zZShwQUMsIElvQywgUG9ydCk7Ci0JCQl9Ci0KLQkJCS8qIERvIHRoZSByZXN0YXJ0ICovCi0JCQlyZXR1cm4oU0tfSFdfUFNfUkVTVEFSVCk7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCS8qIExpbmsgaXMgdXAgYW5kIHdlIGRvbid0IG5lZWQgbW9yZSAqLwotI2lmZGVmIERFQlVHCi0JCWlmIChwUHJ0LT5QTGlwYUF1dG9OZWcgPT0gU0tfTElQQV9BVVRPKSB7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJFUlJPUjogTGlwYSBhdXRvIGRldGVjdGVkIG9uIHBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJfQotI2VuZGlmIC8qIERFQlVHICovCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJKCJMaW5rIHN5bmMoR1ApLCBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCVNrSFdMaW5rVXAocEFDLCBJb0MsIFBvcnQpOwotCQkKLQkJLyoKLQkJICogTGluayBzeW5jIChHUCkgYW5kIHNvIGFzc3VtZSBhIGdvb2QgY29ubmVjdGlvbi4gQnV0IGlmIG5vdCByZWNlaXZlZAotCQkgKiBhIGJ1bmNoIG9mIGZyYW1lcyByZWNlaXZlZCBpbiBhIHRpbWUgc2xvdCAobWF5YmUgYnJva2VuIHR4IGNhYmxlKQotCQkgKiB0aGUgcG9ydCBpcyByZXN0YXJ0LgotCQkgKi8KLQkJcmV0dXJuKFNLX0hXX1BTX0xJTkspOwotCX0KLQotCXJldHVybihTS19IV19QU19OT05FKTsKLX0JLyogU2tHZVBvcnRDaGVja1VwWG1hYyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTa0dlUG9ydENoZWNrVXBCY29tKCkgLSBDaGVjayBpZiB0aGUgbGluayBpcyB1cCBvbiBCY29tIFBIWQotICoKLSAqIHJldHVybjoKLSAqCTAJby5rLiBub3RoaW5nIG5lZWRlZAotICoJMQlSZXN0YXJ0IG5lZWRlZCBvbiB0aGlzIHBvcnQKLSAqCTIJTGluayBjYW1lIHVwCi0gKi8KLXN0YXRpYyBpbnQgU2tHZVBvcnRDaGVja1VwQmNvbSgKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBDb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBXaGljaCBwb3J0IHNob3VsZCBiZSBjaGVja2VkICovCi1TS19CT09MCUF1dG9OZWcpCS8qIElzIEF1dG8tbmVnb3RpYXRpb24gdXNlZCA/ICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0JaW50CQkJRG9uZTsKLQlTS19VMTYJCUlzcmM7CQkvKiBJbnRlcnJ1cHQgc291cmNlIHJlZ2lzdGVyICovCi0JU0tfVTE2CQlQaHlTdGF0OwkvKiBQaHkgU3RhdHVzIFJlZ2lzdGVyICovCi0JU0tfVTE2CQlSZXNBYjsJCS8qIE1hc3Rlci9TbGF2ZSByZXNvbHV0aW9uICovCi0JU0tfVTE2CQlDdHJsOwkJLyogQnJvYWRjb20gY29udHJvbCBmbGFncyAqLwotI2lmZGVmIERFQlVHCi0JU0tfVTE2CQlMcEFiOwotCVNLX1UxNgkJRXh0U3RhdDsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQkvKiBDaGVjayBmb3IgTm8gSENEIExpbmsgZXZlbnRzICgjMTA1MjMpICovCi0JU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0lOVF9TVEFULCAmSXNyYyk7Ci0KLSNpZmRlZiB4REVCVUcKLQlpZiAoKElzcmMgJiB+KFBIWV9CX0lTX0hDVCB8IFBIWV9CX0lTX0xDVCkpID09Ci0JCShQSFlfQl9JU19TQ1JfU19FUiB8IFBIWV9CX0lTX1JSU19DSEFOR0UgfCBQSFlfQl9JU19MUlNfQ0hBTkdFKSkgewotCi0JCVNLX1UzMglTdGF0MSwgU3RhdDIsIFN0YXQzOwotCi0JCVN0YXQxID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0lOVF9NQVNLLCAmU3RhdDEpOwotCQlDTVNNUHJpbnRTdHJpbmcoCi0JCQlwQUMtPnBDb25maWdUYWJsZSwKLQkJCU1TR19UWVBFX1JVTlRJTUVfSU5GTywKLQkJCSJDaGVja1VwMSAtIFN0YXQ6ICV4LCBNYXNrOiAleCIsCi0JCQkodm9pZCAqKUlzcmMsCi0JCQkodm9pZCAqKVN0YXQxKTsKLQotCQlTdGF0MSA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9DVFJMLCAmU3RhdDEpOwotCQlTdGF0MiA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9TVEFULCAmU3RhdDIpOwotCQlTdGF0MSA9IFN0YXQxIDw8IDE2IHwgU3RhdDI7Ci0JCVN0YXQyID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVTkVfQURWLCAmU3RhdDIpOwotCQlTdGF0MyA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9BVU5FX0xQLCAmU3RhdDMpOwotCQlTdGF0MiA9IFN0YXQyIDw8IDE2IHwgU3RhdDM7Ci0JCUNNU01QcmludFN0cmluZygKLQkJCXBBQy0+cENvbmZpZ1RhYmxlLAotCQkJTVNHX1RZUEVfUlVOVElNRV9JTkZPLAotCQkJIkN0cmwvU3RhdDogJXgsIEFOIEFkdi9MUDogJXgiLAotCQkJKHZvaWQgKilTdGF0MSwKLQkJCSh2b2lkICopU3RhdDIpOwotCi0JCVN0YXQxID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVTkVfRVhQLCAmU3RhdDEpOwotCQlTdGF0MiA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9FWFRfU1RBVCwgJlN0YXQyKTsKLQkJU3RhdDEgPSBTdGF0MSA8PCAxNiB8IFN0YXQyOwotCQlTdGF0MiA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV8xMDAwVF9DVFJMLCAmU3RhdDIpOwotCQlTdGF0MyA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV8xMDAwVF9TVEFULCAmU3RhdDMpOwotCQlTdGF0MiA9IFN0YXQyIDw8IDE2IHwgU3RhdDM7Ci0JCUNNU01QcmludFN0cmluZygKLQkJCXBBQy0+cENvbmZpZ1RhYmxlLAotCQkJTVNHX1RZUEVfUlVOVElNRV9JTkZPLAotCQkJIkFOIEV4cC9JRUVFIEV4dDogJXgsIDEwMDBUIEN0cmwvU3RhdDogJXgiLAotCQkJKHZvaWQgKilTdGF0MSwKLQkJCSh2b2lkICopU3RhdDIpOwotCi0JCVN0YXQxID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX1BfRVhUX0NUUkwsICZTdGF0MSk7Ci0JCVN0YXQyID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX1BfRVhUX1NUQVQsICZTdGF0Mik7Ci0JCVN0YXQxID0gU3RhdDEgPDwgMTYgfCBTdGF0MjsKLQkJU3RhdDIgPSAwOwotCQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fQVVYX0NUUkwsICZTdGF0Mik7Ci0JCVN0YXQzID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVWF9TVEFULCAmU3RhdDMpOwotCQlTdGF0MiA9IFN0YXQyIDw8IDE2IHwgU3RhdDM7Ci0JCUNNU01QcmludFN0cmluZygKLQkJCXBBQy0+cENvbmZpZ1RhYmxlLAotCQkJTVNHX1RZUEVfUlVOVElNRV9JTkZPLAotCQkJIlBIWSBFeHQgQ3RybC9TdGF0OiAleCwgQXV4IEN0cmwvU3RhdDogJXgiLAotCQkJKHZvaWQgKilTdGF0MSwKLQkJCSh2b2lkICopU3RhdDIpOwotCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JaWYgKChJc3JjICYgKFBIWV9CX0lTX05PX0hEQ0wgLyogfCBQSFlfQl9JU19OT19IREMgKi8pKSAhPSAwKSB7Ci0JCS8qCi0JCSAqIFdvcmthcm91bmQgQkNvbSBFcnJhdGE6Ci0JCSAqCWVuYWJsZSBhbmQgZGlzYWJsZSBsb29wYmFjayBtb2RlIGlmICJOTyBIQ0QiIG9jY3Vycy4KLQkJICovCi0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9DVFJMLCAmQ3RybCk7Ci0JCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fQ1RSTCwKLQkJCShTS19VMTYpKEN0cmwgfCBQSFlfQ1RfTE9PUCkpOwotCQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0NUUkwsCi0JCQkoU0tfVTE2KShDdHJsICYgflBIWV9DVF9MT09QKSk7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiTm8gSENEIExpbmsgZXZlbnQsIFBvcnQgJWRcbiIsIFBvcnQpKTsKLSNpZmRlZiB4REVCVUcKLQkJQ01TTVByaW50U3RyaW5nKAotCQkJcEFDLT5wQ29uZmlnVGFibGUsCi0JCQlNU0dfVFlQRV9SVU5USU1FX0lORk8sCi0JCQkiTm8gSENEIGxpbmsgZXZlbnQsIHBvcnQgJWQuIiwKLQkJCSh2b2lkICopUG9ydCwKLQkJCSh2b2lkICopTlVMTCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQl9Ci0KLQkvKiBOb3Qgb2Jzb2xldGU6IGxpbmsgc3RhdHVzIGJpdCBpcyBsYXRjaGVkIHRvIDAgYW5kIGF1dG9jbGVhcmluZyEgKi8KLQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fU1RBVCwgJlBoeVN0YXQpOwotCi0JaWYgKHBQcnQtPlBIV0xpbmtVcCkgewotCQlyZXR1cm4oU0tfSFdfUFNfTk9ORSk7Ci0JfQotCi0jaWZkZWYgeERFQlVHCi0JewotCQlTS19VMzIJU3RhdDEsIFN0YXQyLCBTdGF0MzsKLQotCQlTdGF0MSA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9JTlRfTUFTSywgJlN0YXQxKTsKLQkJQ01TTVByaW50U3RyaW5nKAotCQkJcEFDLT5wQ29uZmlnVGFibGUsCi0JCQlNU0dfVFlQRV9SVU5USU1FX0lORk8sCi0JCQkiQ2hlY2tVcDFhIC0gU3RhdDogJXgsIE1hc2s6ICV4IiwKLQkJCSh2b2lkICopSXNyYywKLQkJCSh2b2lkICopU3RhdDEpOwotCi0JCVN0YXQxID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0NUUkwsICZTdGF0MSk7Ci0JCVN0YXQyID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX1NUQVQsICZQaHlTdGF0KTsKLQkJU3RhdDEgPSBTdGF0MSA8PCAxNiB8IFBoeVN0YXQ7Ci0JCVN0YXQyID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVTkVfQURWLCAmU3RhdDIpOwotCQlTdGF0MyA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9BVU5FX0xQLCAmU3RhdDMpOwotCQlTdGF0MiA9IFN0YXQyIDw8IDE2IHwgU3RhdDM7Ci0JCUNNU01QcmludFN0cmluZygKLQkJCXBBQy0+cENvbmZpZ1RhYmxlLAotCQkJTVNHX1RZUEVfUlVOVElNRV9JTkZPLAotCQkJIkN0cmwvU3RhdDogJXgsIEFOIEFkdi9MUDogJXgiLAotCQkJKHZvaWQgKilTdGF0MSwKLQkJCSh2b2lkICopU3RhdDIpOwotCi0JCVN0YXQxID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVTkVfRVhQLCAmU3RhdDEpOwotCQlTdGF0MiA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9FWFRfU1RBVCwgJlN0YXQyKTsKLQkJU3RhdDEgPSBTdGF0MSA8PCAxNiB8IFN0YXQyOwotCQlTdGF0MiA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV8xMDAwVF9DVFJMLCAmU3RhdDIpOwotCQlTdGF0MyA9IDA7Ci0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV8xMDAwVF9TVEFULCAmUmVzQWIpOwotCQlTdGF0MiA9IFN0YXQyIDw8IDE2IHwgUmVzQWI7Ci0JCUNNU01QcmludFN0cmluZygKLQkJCXBBQy0+cENvbmZpZ1RhYmxlLAotCQkJTVNHX1RZUEVfUlVOVElNRV9JTkZPLAotCQkJIkFOIEV4cC9JRUVFIEV4dDogJXgsIDEwMDBUIEN0cmwvU3RhdDogJXgiLAotCQkJKHZvaWQgKilTdGF0MSwKLQkJCSh2b2lkICopU3RhdDIpOwotCi0JCVN0YXQxID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX1BfRVhUX0NUUkwsICZTdGF0MSk7Ci0JCVN0YXQyID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX1BfRVhUX1NUQVQsICZTdGF0Mik7Ci0JCVN0YXQxID0gU3RhdDEgPDwgMTYgfCBTdGF0MjsKLQkJU3RhdDIgPSAwOwotCQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fQVVYX0NUUkwsICZTdGF0Mik7Ci0JCVN0YXQzID0gMDsKLQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVWF9TVEFULCAmU3RhdDMpOwotCQlTdGF0MiA9IFN0YXQyIDw8IDE2IHwgU3RhdDM7Ci0JCUNNU01QcmludFN0cmluZygKLQkJCXBBQy0+cENvbmZpZ1RhYmxlLAotCQkJTVNHX1RZUEVfUlVOVElNRV9JTkZPLAotCQkJIlBIWSBFeHQgQ3RybC9TdGF0OiAleCwgQXV4IEN0cmwvU3RhdDogJXgiLAotCQkJKHZvaWQgKilTdGF0MSwKLQkJCSh2b2lkICopU3RhdDIpOwotCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JLyoKLQkgKiBIZXJlIHdlIHVzdWFsbHkgY2FuIGNoZWNrIHdoZXRoZXIgdGhlIGxpbmsgaXMgaW4gc3luYyBhbmQKLQkgKiBhdXRvLW5lZ290aWF0aW9uIGlzIGRvbmUuCi0JICovCi0KLQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fU1RBVCwgJlBoeVN0YXQpOwotCi0JU2tNYWNBdXRvTmVnTGlwYVBoeShwQUMsIElvQywgUG9ydCwgUGh5U3RhdCk7Ci0JCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIkNoZWNrVXAgUG9ydCAlZCwgUGh5U3RhdDogMHglMDRYXG4iLCBQb3J0LCBQaHlTdGF0KSk7Ci0KLQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fMTAwMFRfU1RBVCwgJlJlc0FiKTsKLQotCWlmICgoUmVzQWIgJiBQSFlfQl8xMDAwU19NU0YpICE9IDApIHsKLQkJLyogRXJyb3IgKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJNYXN0ZXIvU2xhdmUgRmF1bHQgcG9ydCAlZFxuIiwgUG9ydCkpOwotCQkKLQkJcFBydC0+UEF1dG9OZWdGYWlsID0gU0tfVFJVRTsKLQkJcFBydC0+UE1TU3RhdHVzID0gU0tfTVNfU1RBVF9GQVVMVDsKLQkJCi0JCXJldHVybihTS19IV19QU19SRVNUQVJUKTsKLQl9Ci0KLQlpZiAoKFBoeVN0YXQgJiBQSFlfU1RfTFNZTkMpID09IDApIHsKLQkJcmV0dXJuKFNLX0hXX1BTX05PTkUpOwotCX0KLQkKLQlwUHJ0LT5QTVNTdGF0dXMgPSAoKFJlc0FiICYgUEhZX0JfMTAwMFNfTVNSKSAhPSAwKSA/Ci0JCVNLX01TX1NUQVRfTUFTVEVSIDogU0tfTVNfU1RBVF9TTEFWRTsKLQkKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiUG9ydCAlZCwgUmVzQWI6IDB4JTA0WFxuIiwgUG9ydCwgUmVzQWIpKTsKLQotCWlmIChBdXRvTmVnKSB7Ci0JCWlmICgoUGh5U3RhdCAmIFBIWV9TVF9BTl9PVkVSKSAhPSAwKSB7Ci0JCQkKLQkJCVNrSFdMaW5rVXAocEFDLCBJb0MsIFBvcnQpOwotCQkJCi0JCQlEb25lID0gU2tNYWNBdXRvTmVnRG9uZShwQUMsIElvQywgUG9ydCk7Ci0JCQkKLQkJCWlmIChEb25lICE9IFNLX0FORF9PSykgewotI2lmZGVmIERFQlVHCi0JCQkJLyogR2V0IFBIWSBwYXJhbWV0ZXJzLCBmb3IgZGVidWdnaW5nIG9ubHkgKi8KLQkJCQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fQVVORV9MUCwgJkxwQWIpOwotCQkJCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV8xMDAwVF9TVEFULCAmRXh0U3RhdCk7Ci0JCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJCQkoIkF1dG9OZWcgRkFJTCBQb3J0ICVkIChMcEFiICV4LCAxMDAwVFN0YXQgJXgpXG4iLAotCQkJCQlQb3J0LCBMcEFiLCBFeHRTdGF0KSk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJCQlyZXR1cm4oU0tfSFdfUFNfUkVTVEFSVCk7Ci0JCQl9Ci0JCQllbHNlIHsKLSNpZmRlZiB4REVCVUcKLQkJCQkvKiBEdW1teSByZWFkIElTUiB0byBwcmV2ZW50IGV4dHJhIGxpbmsgZG93bnMvdXBzICovCi0JCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0lOVF9TVEFULCAmRXh0U3RhdCk7Ci0KLQkJCQlpZiAoKEV4dFN0YXQgJiB+KFBIWV9CX0lTX0hDVCB8IFBIWV9CX0lTX0xDVCkpICE9IDApIHsKLQkJCQkJQ01TTVByaW50U3RyaW5nKAotCQkJCQkJcEFDLT5wQ29uZmlnVGFibGUsCi0JCQkJCQlNU0dfVFlQRV9SVU5USU1FX0lORk8sCi0JCQkJCQkiQ2hlY2tVcDIgLSBTdGF0OiAleCIsCi0JCQkJCQkodm9pZCAqKUV4dFN0YXQsCi0JCQkJCQkodm9pZCAqKU5VTEwpOwotCQkJCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCQkJCXJldHVybihTS19IV19QU19MSU5LKTsKLQkJCX0KLQkJfQotCX0KLQllbHNlIHsJLyogIUF1dG9OZWcgKi8KLQkJLyogTGluayBpcyB1cCBhbmQgd2UgZG9uJ3QgbmVlZCBtb3JlLiAqLwotI2lmZGVmIERFQlVHCi0JCWlmIChwUHJ0LT5QTGlwYUF1dG9OZWcgPT0gU0tfTElQQV9BVVRPKSB7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJFUlJPUjogTGlwYSBhdXRvIGRldGVjdGVkIG9uIHBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiB4REVCVUcKLQkJLyogRHVtbXkgcmVhZCBJU1IgdG8gcHJldmVudCBleHRyYSBsaW5rIGRvd25zL3VwcyAqLwotCQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fSU5UX1NUQVQsICZFeHRTdGF0KTsKLQotCQlpZiAoKEV4dFN0YXQgJiB+KFBIWV9CX0lTX0hDVCB8IFBIWV9CX0lTX0xDVCkpICE9IDApIHsKLQkJCUNNU01QcmludFN0cmluZygKLQkJCQlwQUMtPnBDb25maWdUYWJsZSwKLQkJCQlNU0dfVFlQRV9SVU5USU1FX0lORk8sCi0JCQkJIkNoZWNrVXAzIC0gU3RhdDogJXgiLAotCQkJCSh2b2lkICopRXh0U3RhdCwKLQkJCQkodm9pZCAqKU5VTEwpOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJKCJMaW5rIHN5bmMoR1ApLCBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCVNrSFdMaW5rVXAocEFDLCBJb0MsIFBvcnQpOwotCQkKLQkJcmV0dXJuKFNLX0hXX1BTX0xJTkspOwotCX0KLQotCXJldHVybihTS19IV19QU19OT05FKTsKLX0JLyogU2tHZVBvcnRDaGVja1VwQmNvbSAqLwotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQotCi0jaWZkZWYgWVVLT04KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTa0dlUG9ydENoZWNrVXBHbWFjKCkgLSBDaGVjayBpZiB0aGUgbGluayBpcyB1cCBvbiBNYXJ2ZWxsIFBIWQotICoKLSAqIHJldHVybjoKLSAqCTAJby5rLiBub3RoaW5nIG5lZWRlZAotICoJMQlSZXN0YXJ0IG5lZWRlZCBvbiB0aGlzIHBvcnQKLSAqCTIJTGluayBjYW1lIHVwCi0gKi8KLXN0YXRpYyBpbnQgU2tHZVBvcnRDaGVja1VwR21hYygKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBDb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBXaGljaCBwb3J0IHNob3VsZCBiZSBjaGVja2VkICovCi1TS19CT09MCUF1dG9OZWcpCS8qIElzIEF1dG8tbmVnb3RpYXRpb24gdXNlZCA/ICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0JaW50CQkJRG9uZTsKLQlTS19VMTYJCVBoeUlzcmM7CS8qIFBIWSBJbnRlcnJ1cHQgc291cmNlICovCi0JU0tfVTE2CQlQaHlTdGF0OwkvKiBQUFkgU3RhdHVzICovCi0JU0tfVTE2CQlQaHlTcGVjU3RhdDsvKiBQSFkgU3BlY2lmaWMgU3RhdHVzICovCi0JU0tfVTE2CQlSZXNBYjsJCS8qIE1hc3Rlci9TbGF2ZSByZXNvbHV0aW9uICovCi0JU0tfRVZQQVJBCVBhcmE7Ci0jaWZkZWYgREVCVUcKLQlTS19VMTYJCVdvcmQ7CQkvKiBJL08gaGVscGVyICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JaWYgKHBQcnQtPlBIV0xpbmtVcCkgewotCQlyZXR1cm4oU0tfSFdfUFNfTk9ORSk7Ci0JfQotCi0JLyogUmVhZCBQSFkgU3RhdHVzICovCi0JU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX1NUQVQsICZQaHlTdGF0KTsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJDaGVja1VwIFBvcnQgJWQsIFBoeVN0YXQ6IDB4JTA0WFxuIiwgUG9ydCwgUGh5U3RhdCkpOwotCi0JLyogUmVhZCBQSFkgSW50ZXJydXB0IFN0YXR1cyAqLwotCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9JTlRfU1RBVCwgJlBoeUlzcmMpOwotCi0JaWYgKChQaHlJc3JjICYgUEhZX01fSVNfQU5fQ09NUEwpICE9IDApIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJBdXRvLU5lZ290aWF0aW9uIENvbXBsZXRlZCwgUGh5SXNyYzogMHglMDRYXG4iLCBQaHlJc3JjKSk7Ci0JfQotCi0JaWYgKChQaHlJc3JjICYgUEhZX01fSVNfTFNQX0NIQU5HRSkgIT0gMCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkxpbmsgU3BlZWQgQ2hhbmdlZCwgUGh5SXNyYzogMHglMDRYXG4iLCBQaHlJc3JjKSk7Ci0JfQotCi0JU2tNYWNBdXRvTmVnTGlwYVBoeShwQUMsIElvQywgUG9ydCwgUGh5U3RhdCk7Ci0JCi0JU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWXzEwMDBUX1NUQVQsICZSZXNBYik7Ci0KLQlpZiAoKFJlc0FiICYgUEhZX0JfMTAwMFNfTVNGKSAhPSAwKSB7Ci0JCS8qIEVycm9yICovCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiTWFzdGVyL1NsYXZlIEZhdWx0IHBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJCi0JCXBQcnQtPlBBdXRvTmVnRmFpbCA9IFNLX1RSVUU7Ci0JCXBQcnQtPlBNU1N0YXR1cyA9IFNLX01TX1NUQVRfRkFVTFQ7Ci0JCQotCQlyZXR1cm4oU0tfSFdfUFNfUkVTVEFSVCk7Ci0JfQotCi0JLyogUmVhZCBQSFkgU3BlY2lmaWMgU3RhdHVzICovCi0JU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX1BIWV9TVEFULCAmUGh5U3BlY1N0YXQpOwotCQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQaHkxMDAwQlQ6IDB4JTA0WCwgUGh5U3BlY1N0YXQ6IDB4JTA0WFxuIiwgUmVzQWIsIFBoeVNwZWNTdGF0KSk7Ci0KLSNpZmRlZiBERUJVRwotCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9BVU5FX0VYUCwgJldvcmQpOwotCi0JaWYgKChQaHlJc3JjICYgUEhZX01fSVNfQU5fUFIpICE9IDAgfHwgKFdvcmQgJiBQSFlfQU5FX1JYX1BHKSAhPSAwIHx8Ci0JCShQaHlTcGVjU3RhdCAmIFBIWV9NX1BTX1BBR0VfUkVDKSAhPSAwKSAgewotCQkvKiBSZWFkIFBIWSBOZXh0IFBhZ2UgTGluayBQYXJ0bmVyICovCi0JCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9ORVBHX0xQLCAmV29yZCk7Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJQYWdlIFJlY2VpdmVkLCBOZXh0UGFnZTogMHglMDRYXG4iLCBXb3JkKSk7Ci0JfQotI2VuZGlmIC8qIERFQlVHICovCi0KLQlpZiAoKFBoeVNwZWNTdGF0ICYgUEhZX01fUFNfTElOS19VUCkgPT0gMCkgewotCQlyZXR1cm4oU0tfSFdfUFNfTk9ORSk7Ci0JfQotCQotCWlmICgoUGh5U3BlY1N0YXQgJiBQSFlfTV9QU19ET1dOU19TVEFUKSAhPSAwIHx8Ci0JCShQaHlJc3JjICYgUEhZX01fSVNfRE9XTlNIX0RFVCkgIT0gMCkgewotCQkvKiBEb3duc2hpZnQgZGV0ZWN0ZWQgKi8KLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9TSVJRX0UwMjUsIFNLRVJSX1NJUlFfRTAyNU1TRyk7Ci0JCQotCQlQYXJhLlBhcmE2NCA9IFBvcnQ7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfRE9XTlNISUZUX0RFVCwgUGFyYSk7Ci0JCQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkRvd25zaGlmdCBkZXRlY3RlZCwgUGh5SXNyYzogMHglMDRYXG4iLCBQaHlJc3JjKSk7Ci0JfQotCi0JcFBydC0+UE1TU3RhdHVzID0gKChSZXNBYiAmIFBIWV9CXzEwMDBTX01TUikgIT0gMCkgPwotCQlTS19NU19TVEFUX01BU1RFUiA6IFNLX01TX1NUQVRfU0xBVkU7Ci0JCi0JcFBydC0+UENhYmxlTGVuID0gKFNLX1U4KSgoUGh5U3BlY1N0YXQgJiBQSFlfTV9QU19DQUJMRV9NU0spID4+IDcpOwotCQotCWlmIChBdXRvTmVnKSB7Ci0JCS8qIEF1dG8tTmVnb3RpYXRpb24gT3ZlciA/ICovCi0JCWlmICgoUGh5U3RhdCAmIFBIWV9TVF9BTl9PVkVSKSAhPSAwKSB7Ci0JCQkKLQkJCVNrSFdMaW5rVXAocEFDLCBJb0MsIFBvcnQpOwotCQkJCi0JCQlEb25lID0gU2tNYWNBdXRvTmVnRG9uZShwQUMsIElvQywgUG9ydCk7Ci0JCQkKLQkJCWlmIChEb25lICE9IFNLX0FORF9PSykgewotCQkJCXJldHVybihTS19IV19QU19SRVNUQVJUKTsKLQkJCX0KLQkJCQotCQkJcmV0dXJuKFNLX0hXX1BTX0xJTkspOwotCQl9Ci0JfQotCWVsc2UgewkvKiAhQXV0b05lZyAqLwotCQkvKiBMaW5rIGlzIHVwIGFuZCB3ZSBkb24ndCBuZWVkIG1vcmUgKi8KLSNpZmRlZiBERUJVRwotCQlpZiAocFBydC0+UExpcGFBdXRvTmVnID09IFNLX0xJUEFfQVVUTykgewotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiRVJST1I6IExpcGEgYXV0byBkZXRlY3RlZCBvbiBwb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJKCJMaW5rIHN5bmMsIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJU2tIV0xpbmtVcChwQUMsIElvQywgUG9ydCk7Ci0JCQotCQlyZXR1cm4oU0tfSFdfUFNfTElOSyk7Ci0JfQotCi0JcmV0dXJuKFNLX0hXX1BTX05PTkUpOwotfQkvKiBTa0dlUG9ydENoZWNrVXBHbWFjICovCi0jZW5kaWYgLyogWVVLT04gKi8KLQotCi0jaWZkZWYgT1RIRVJfUEhZCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogU2tHZVBvcnRDaGVja1VwTG9uZSgpIC0gQ2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb24gTGV2ZWwgT25lIFBIWQotICoKLSAqIHJldHVybjoKLSAqCTAJby5rLiBub3RoaW5nIG5lZWRlZAotICoJMQlSZXN0YXJ0IG5lZWRlZCBvbiB0aGlzIHBvcnQKLSAqCTIJTGluayBjYW1lIHVwCi0gKi8KLXN0YXRpYyBpbnQgU2tHZVBvcnRDaGVja1VwTG9uZSgKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBDb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBXaGljaCBwb3J0IHNob3VsZCBiZSBjaGVja2VkICovCi1TS19CT09MCUF1dG9OZWcpCS8qIElzIEF1dG8tbmVnb3RpYXRpb24gdXNlZCA/ICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0JaW50CQkJRG9uZTsKLQlTS19VMTYJCUlzcmM7CQkvKiBJbnRlcnJ1cHQgc291cmNlIHJlZ2lzdGVyICovCi0JU0tfVTE2CQlMcEFiOwkJLyogTGluayBQYXJ0bmVyIEFiaWxpdHkgKi8KLQlTS19VMTYJCUV4dFN0YXQ7CS8qIEV4dGVuZGVkIFN0YXR1cyBSZWdpc3RlciAqLwotCVNLX1UxNgkJUGh5U3RhdDsJLyogUGh5IFN0YXR1cyBSZWdpc3RlciAqLwotCVNLX1UxNgkJU3RhdFN1bTsKLQlTS19VOAkJTmV4dE1vZGU7CS8qIE5leHQgQXV0b1NlbnNpbmcgTW9kZSAqLwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAocFBydC0+UEhXTGlua1VwKSB7Ci0JCXJldHVybihTS19IV19QU19OT05FKTsKLQl9Ci0KLQlTdGF0U3VtID0gcFBydC0+UElzYXZlOwotCXBQcnQtPlBJc2F2ZSA9IDA7Ci0KLQkvKgotCSAqIGhlcmUgd2UgdXN1YWxseSBjYW4gY2hlY2sgd2hldGhlciB0aGUgbGluayBpcyBpbiBzeW5jIGFuZAotCSAqIGF1dG8tbmVnb3RpYXRpb24gaXMgZG9uZS4KLQkgKi8KLQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0xPTkVfU1RBVCwgJlBoeVN0YXQpOwotCVN0YXRTdW0gfD0gUGh5U3RhdDsKLQotCVNrTWFjQXV0b05lZ0xpcGFQaHkocEFDLCBJb0MsIFBvcnQsIFBoeVN0YXQpOwotCQotCWlmICgoUGh5U3RhdCAmIFBIWV9TVF9MU1lOQykgPT0gMCkgewotCQkvKiBTYXZlIEF1dG8tbmVnb3RpYXRpb24gRG9uZSBiaXQgKi8KLQkJcFBydC0+UElzYXZlID0gKFNLX1UxNikoU3RhdFN1bSAmIFBIWV9TVF9BTl9PVkVSKTsKLSNpZmRlZiBERUJVRwotCQlpZiAoKHBQcnQtPlBJc2F2ZSAmIFBIWV9TVF9BTl9PVkVSKSAhPSAwKSB7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJBdXRvTmVnIGRvbmUgcmVzY2hlZHVsZWQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJcmV0dXJuKFNLX0hXX1BTX05PTkUpOwotCX0KLQotCWlmIChBdXRvTmVnKSB7Ci0JCWlmICgoU3RhdFN1bSAmIFBIWV9TVF9BTl9PVkVSKSAhPSAwKSB7Ci0JCQlTa0hXTGlua1VwKHBBQywgSW9DLCBQb3J0KTsKLQkJCURvbmUgPSBTa01hY0F1dG9OZWdEb25lKHBBQywgSW9DLCBQb3J0KTsKLQkJCWlmIChEb25lICE9IFNLX0FORF9PSykgewotCQkJCS8qIEdldCBQSFkgcGFyYW1ldGVycywgZm9yIGRlYnVnZ2luZyBvbmx5ICovCi0JCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9MT05FX0FVTkVfTFAsICZMcEFiKTsKLQkJCQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0xPTkVfMTAwMFRfU1RBVCwgJkV4dFN0YXQpOwotCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkJKCJBdXRvTmVnIEZBSUwgUG9ydCAlZCAoTHBBYiAleCwgMTAwMFRTdGF0ICV4KVxuIiwKLQkJCQkJIFBvcnQsIExwQWIsIEV4dFN0YXQpKTsKLQkJCQkJCi0JCQkJLyogVHJ5IG5leHQgcG9zc2libGUgbW9kZSAqLwotCQkJCU5leHRNb2RlID0gU2tIV1NlbnNlR2V0TmV4dChwQUMsIElvQywgUG9ydCk7Ci0JCQkJU2tIV0xpbmtEb3duKHBBQywgSW9DLCBQb3J0KTsKLQkJCQlpZiAoRG9uZSA9PSBTS19BTkRfRFVQX0NBUCkgewotCQkJCQkvKiBHb1RvIG5leHQgbW9kZSAqLwotCQkJCQlTa0hXU2Vuc2VTZXROZXh0KHBBQywgSW9DLCBQb3J0LCBOZXh0TW9kZSk7Ci0JCQkJfQotCi0JCQkJcmV0dXJuKFNLX0hXX1BTX1JFU1RBUlQpOwotCi0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvKgotCQkJCSAqIER1bW15IFJlYWQgaW50ZXJydXB0IHN0YXR1cyB0byBwcmV2ZW50Ci0JCQkJICogZXh0cmEgbGluayBkb3duL3VwcwotCQkJCSAqLwotCQkJCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTE9ORV9JTlRfU1RBVCwgJkV4dFN0YXQpOwotCQkJCXJldHVybihTS19IV19QU19MSU5LKTsKLQkJCX0KLQkJfQotCQkKLQkJLyogQXV0b05lZyBub3QgZG9uZSwgYnV0IEhXIGxpbmsgaXMgdXAuIENoZWNrIGZvciB0aW1lb3V0cyAqLwotCQlwUHJ0LT5QQXV0b05lZ1RpbWVPdXQrKzsKLQkJaWYgKHBQcnQtPlBBdXRvTmVnVGltZU91dCA+PSBTS19BTkRfTUFYX1RPKSB7Ci0JCQkvKiBUaW1lb3V0IG9jY3VyZWQgKi8KLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJCSgiQXV0b05lZyB0aW1lb3V0IFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJCWlmIChwUHJ0LT5QTGlua01vZGVDb25mID09IFNLX0xNT0RFX0FVVE9TRU5TRSAmJgotCQkJCXBQcnQtPlBMaXBhQXV0b05lZyAhPSBTS19MSVBBX0FVVE8pIHsKLQkJCQkvKiBTZXQgTGluayBtYW51YWxseSB1cCAqLwotCQkJCVNrSFdTZW5zZVNldE5leHQocEFDLCBJb0MsIFBvcnQsIFNLX0xNT0RFX0ZVTEwpOwotCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJCQkoIlNldCBtYW51YWwgZnVsbCBkdXBsZXggUG9ydCAlZFxuIiwgUG9ydCkpOwotCQkJfQotCi0JCQkvKiBEbyB0aGUgcmVzdGFydCAqLwotCQkJcmV0dXJuKFNLX0hXX1BTX1JFU1RBUlQpOwotCQl9Ci0JfQotCWVsc2UgewotCQkvKiBMaW5rIGlzIHVwIGFuZCB3ZSBkb24ndCBuZWVkIG1vcmUgKi8KLSNpZmRlZiBERUJVRwotCQlpZiAocFBydC0+UExpcGFBdXRvTmVnID09IFNLX0xJUEFfQVVUTykgewotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiRVJST1I6IExpcGEgYXV0byBkZXRlY3RlZCBvbiBwb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0JCS8qCi0JCSAqIER1bW15IFJlYWQgaW50ZXJydXB0IHN0YXR1cyB0byBwcmV2ZW50Ci0JCSAqIGV4dHJhIGxpbmsgZG93bi91cHMKLQkJICovCi0JCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTE9ORV9JTlRfU1RBVCwgJkV4dFN0YXQpOwotCQkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9JUlEsCi0JCQkoIkxpbmsgc3luYyhHUCksIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJU2tIV0xpbmtVcChwQUMsIElvQywgUG9ydCk7Ci0JCQotCQlyZXR1cm4oU0tfSFdfUFNfTElOSyk7Ci0JfQotCi0JcmV0dXJuKFNLX0hXX1BTX05PTkUpOwotfQkvKiBTa0dlUG9ydENoZWNrVXBMb25lICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFNrR2VQb3J0Q2hlY2tVcE5hdCgpIC0gQ2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb24gTmF0aW9uYWwgUEhZCi0gKgotICogcmV0dXJuOgotICoJMAlvLmsuIG5vdGhpbmcgbmVlZGVkCi0gKgkxCVJlc3RhcnQgbmVlZGVkIG9uIHRoaXMgcG9ydAotICoJMglMaW5rIGNhbWUgdXAKLSAqLwotc3RhdGljIGludCBTa0dlUG9ydENoZWNrVXBOYXQoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gQ29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogV2hpY2ggcG9ydCBzaG91bGQgYmUgY2hlY2tlZCAqLwotU0tfQk9PTAlBdXRvTmVnKQkvKiBJcyBBdXRvLW5lZ290aWF0aW9uIHVzZWQgPyAqLwotewotCS8qIHRvZG86IE5hdGlvbmFsICovCi0JcmV0dXJuKFNLX0hXX1BTX05PTkUpOwotfQkvKiBTa0dlUG9ydENoZWNrVXBOYXQgKi8KLSNlbmRpZiAvKiBPVEhFUl9QSFkgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHZVNpcnFFdmVudCgpIC0gRXZlbnQgU2VydmljZSBSb3V0aW5lCi0gKgotICogRGVzY3JpcHRpb246Ci0gKgotICogTm90ZXM6Ci0gKi8KLWludAlTa0dlU2lycUV2ZW50KAotU0tfQUMJCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkJLyogSW8gQ29udGV4dCAqLwotU0tfVTMyCQlFdmVudCwJCS8qIE1vZHVsZSBzcGVjaWZpYyBFdmVudCAqLwotU0tfRVZQQVJBCVBhcmEpCQkvKiBFdmVudCBzcGVjaWZpYyBQYXJhbWV0ZXIgKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7CQkvKiBHSW5pIFBvcnQgc3RydWN0IHBvaW50ZXIgKi8KLQlTS19VMzIJCVBvcnQ7Ci0JU0tfVTMyCQlWYWwzMjsKLQlpbnQJCQlQb3J0U3RhdDsKLQlTS19VOAkJVmFsODsKLSNpZmRlZiBHRU5FU0lTCi0JU0tfVTY0CQlPY3RldHM7Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCi0JUG9ydCA9IFBhcmEuUGFyYTMyWzBdOwotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0Jc3dpdGNoIChFdmVudCkgewotCWNhc2UgU0tfSFdFVl9XQVRJTToKLQkJaWYgKHBQcnQtPlBTdGF0ZSA9PSBTS19QUlRfUkVTRVQpIHsKLQkJCi0JCQlQb3J0U3RhdCA9IFNLX0hXX1BTX05PTkU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBDaGVjayB3aGV0aGVyIHBvcnQgY2FtZSB1cCAqLwotCQkJUG9ydFN0YXQgPSBTa0dlUG9ydENoZWNrVXAocEFDLCBJb0MsIChpbnQpUG9ydCk7Ci0JCX0KLQotCQlzd2l0Y2ggKFBvcnRTdGF0KSB7Ci0JCWNhc2UgU0tfSFdfUFNfUkVTVEFSVDoKLQkJCWlmIChwUHJ0LT5QSFdMaW5rVXApIHsKLQkJCQkvKiBTZXQgTGluayB0byBkb3duICovCi0JCQkJU2tIV0xpbmtEb3duKHBBQywgSW9DLCAoaW50KVBvcnQpOwotCi0JCQkJLyoKLQkJCQkgKiBTaWduYWwgZGlyZWN0bHkgdG8gUkxNVCB0byBlbnN1cmUgY29ycmVjdAotCQkJCSAqIHNlcXVlbmNlIG9mIFNXSVRDSCBhbmQgUkVTRVQgZXZlbnQuCi0JCQkJICovCi0JCQkJU2tSbG10RXZlbnQocEFDLCBJb0MsIFNLX1JMTVRfTElOS19ET1dOLCBQYXJhKTsKLQkJCX0KLQotCQkJLyogUmVzdGFydCBuZWVkZWQgKi8KLQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUE9SVF9SRVNFVCwgUGFyYSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFNLX0hXX1BTX0xJTks6Ci0JCQkvKiBTaWduYWwgdG8gUkxNVCAqLwotCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9STE1ULCBTS19STE1UX0xJTktfVVAsIFBhcmEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJCi0JCS8qIFN0YXJ0IGFnYWluIHRoZSBjaGVjayBUaW1lciAqLwotCQlpZiAocFBydC0+UEhXTGlua1VwKSB7Ci0JCQlWYWwzMiA9IFNLX1dBX0FDVF9USU1FOwotCQl9Ci0JCWVsc2UgewotCQkJVmFsMzIgPSBTS19XQV9JTkFfVElNRTsKLQkJfQotCi0JCS8qIFRvZG86IHN0aWxsIG5lZWRlZCBmb3Igbm9uLVhNQUMgUEhZcz8/PyAqLwotCQkvKiBTdGFydCB3b3JrYXJvdW5kIEVycmF0YSAjMiB0aW1lciAqLwotCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwUHJ0LT5QV2FUaW1lciwgVmFsMzIsCi0JCQlTS0dFX0hXQUMsIFNLX0hXRVZfV0FUSU0sIFBhcmEpOwotCQlicmVhazsKLQotCWNhc2UgU0tfSFdFVl9QT1JUX1NUQVJUOgotCQlpZiAocFBydC0+UEhXTGlua1VwKSB7Ci0JCQkvKgotCQkJICogU2lnbmFsIGRpcmVjdGx5IHRvIFJMTVQgdG8gZW5zdXJlIGNvcnJlY3QKLQkJCSAqIHNlcXVlbmNlIG9mIFNXSVRDSCBhbmQgUkVTRVQgZXZlbnQuCi0JCQkgKi8KLQkJCVNrUmxtdEV2ZW50KHBBQywgSW9DLCBTS19STE1UX0xJTktfRE9XTiwgUGFyYSk7Ci0JCX0KLQotCQlTa0hXTGlua0Rvd24ocEFDLCBJb0MsIChpbnQpUG9ydCk7Ci0KLQkJLyogU2NoZWR1bGUgUG9ydCBSRVNFVCAqLwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1BPUlRfUkVTRVQsIFBhcmEpOwotCi0JCS8qIFN0YXJ0IHdvcmthcm91bmQgRXJyYXRhICMyIHRpbWVyICovCi0JCVNrVGltZXJTdGFydChwQUMsIElvQywgJnBQcnQtPlBXYVRpbWVyLCBTS19XQV9JTkFfVElNRSwKLQkJCVNLR0VfSFdBQywgU0tfSFdFVl9XQVRJTSwgUGFyYSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTS19IV0VWX1BPUlRfU1RPUDoKLQkJaWYgKHBQcnQtPlBIV0xpbmtVcCkgewotCQkJLyoKLQkJCSAqIFNpZ25hbCBkaXJlY3RseSB0byBSTE1UIHRvIGVuc3VyZSBjb3JyZWN0Ci0JCQkgKiBzZXF1ZW5jZSBvZiBTV0lUQ0ggYW5kIFJFU0VUIGV2ZW50LgotCQkJICovCi0JCQlTa1JsbXRFdmVudChwQUMsIElvQywgU0tfUkxNVF9MSU5LX0RPV04sIFBhcmEpOwotCQl9Ci0KLQkJLyogU3RvcCBXb3JrYXJvdW5kIFRpbWVyICovCi0JCVNrVGltZXJTdG9wKHBBQywgSW9DLCAmcFBydC0+UFdhVGltZXIpOwotCi0JCVNrSFdMaW5rRG93bihwQUMsIElvQywgKGludClQb3J0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLX0hXRVZfVVBEQVRFX1NUQVQ6Ci0JCS8qIFdlIGRvIE5PVCBuZWVkIHRvIHVwZGF0ZSBhbnkgc3RhdGlzdGljcyAqLwotCQlicmVhazsKLQotCWNhc2UgU0tfSFdFVl9DTEVBUl9TVEFUOgotCQkvKiBXZSBkbyBOT1QgbmVlZCB0byBjbGVhciBhbnkgc3RhdGlzdGljcyAqLwotCQlmb3IgKFBvcnQgPSAwOyBQb3J0IDwgKFNLX1UzMilwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IFBvcnQrKykgewotCQkJcFBydC0+UFByZXZSeCA9IDA7Ci0JCQlwUHJ0LT5QUHJldkZjcyA9IDA7Ci0JCQlwUHJ0LT5QUHJldlNob3J0cyA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFNLX0hXRVZfU0VUX0xNT0RFOgotCQlWYWw4ID0gKFNLX1U4KVBhcmEuUGFyYTMyWzFdOwotCQlpZiAocFBydC0+UExpbmtNb2RlQ29uZiAhPSBWYWw4KSB7Ci0JCQkvKiBTZXQgTmV3IGxpbmsgbW9kZSAqLwotCQkJcFBydC0+UExpbmtNb2RlQ29uZiA9IFZhbDg7Ci0KLQkJCS8qIFJlc3RhcnQgUG9ydCAqLwotCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9IV0FDLCBTS19IV0VWX1BPUlRfU1RPUCwgUGFyYSk7Ci0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0hXQUMsIFNLX0hXRVZfUE9SVF9TVEFSVCwgUGFyYSk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFNLX0hXRVZfU0VUX0ZMT1dNT0RFOgotCQlWYWw4ID0gKFNLX1U4KVBhcmEuUGFyYTMyWzFdOwotCQlpZiAocFBydC0+UEZsb3dDdHJsTW9kZSAhPSBWYWw4KSB7Ci0JCQkvKiBTZXQgTmV3IEZsb3cgQ29udHJvbCBtb2RlICovCi0JCQlwUHJ0LT5QRmxvd0N0cmxNb2RlID0gVmFsODsKLQotCQkJLyogUmVzdGFydCBQb3J0ICovCi0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0hXQUMsIFNLX0hXRVZfUE9SVF9TVE9QLCBQYXJhKTsKLQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfSFdBQywgU0tfSFdFVl9QT1JUX1NUQVJULCBQYXJhKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0tfSFdFVl9TRVRfUk9MRToKLQkJLyogbm90IHBvc3NpYmxlIGZvciBmaWJlciAqLwotCQlpZiAoIXBBQy0+R0luaS5HSUNvcHBlclR5cGUpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCVZhbDggPSAoU0tfVTgpUGFyYS5QYXJhMzJbMV07Ci0JCWlmIChwUHJ0LT5QTVNNb2RlICE9IFZhbDgpIHsKLQkJCS8qIFNldCBOZXcgUm9sZSAoTWFzdGVyL1NsYXZlKSBtb2RlICovCi0JCQlwUHJ0LT5QTVNNb2RlID0gVmFsODsKLQotCQkJLyogUmVzdGFydCBQb3J0ICovCi0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0hXQUMsIFNLX0hXRVZfUE9SVF9TVE9QLCBQYXJhKTsKLQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfSFdBQywgU0tfSFdFVl9QT1JUX1NUQVJULCBQYXJhKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0tfSFdFVl9TRVRfU1BFRUQ6Ci0JCWlmIChwUHJ0LT5QaHlUeXBlICE9IFNLX1BIWV9NQVJWX0NPUFBFUikgewotCQkJYnJlYWs7Ci0JCX0KLQkJVmFsOCA9IChTS19VOClQYXJhLlBhcmEzMlsxXTsKLQkJaWYgKHBQcnQtPlBMaW5rU3BlZWQgIT0gVmFsOCkgewotCQkJLyogU2V0IE5ldyBTcGVlZCBwYXJhbWV0ZXIgKi8KLQkJCXBQcnQtPlBMaW5rU3BlZWQgPSBWYWw4OwotCi0JCQkvKiBSZXN0YXJ0IFBvcnQgKi8KLQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfSFdBQywgU0tfSFdFVl9QT1JUX1NUT1AsIFBhcmEpOwotCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9IV0FDLCBTS19IV0VWX1BPUlRfU1RBUlQsIFBhcmEpOwotCQl9Ci0JCWJyZWFrOwotCi0jaWZkZWYgR0VORVNJUwotCWNhc2UgU0tfSFdFVl9IQUxGRFVQX0NISzoKLQkJaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCS8qCi0JCQkgKiBoYWxmIGR1cGxleCBoYW5ndXAgd29ya2Fyb3VuZC4KLQkJCSAqIFNlZSBwYWNrZXQgYXJiaXRlciB0aW1lb3V0IGludGVycnVwdCBmb3IgZGVzY3JpcHRpb24KLQkJCSAqLwotCQkJcFBydC0+SGFsZkR1cFRpbWVyQWN0aXZlID0gU0tfRkFMU0U7Ci0JCQlpZiAocFBydC0+UExpbmtNb2RlU3RhdHVzID09IFNLX0xNT0RFX1NUQVRfSEFMRiB8fAotCQkJCXBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0FVVE9IQUxGKSB7Ci0JCQkJLyogU25hcCBzdGF0aXN0aWMgY291bnRlcnMgKi8KLQkJCQkodm9pZClTa1htVXBkYXRlU3RhdHMocEFDLCBJb0MsIFBvcnQpOwotCi0JCQkJKHZvaWQpU2tYbU1hY1N0YXRpc3RpYyhwQUMsIElvQywgUG9ydCwgWE1fVFhPX09LX0hJLCAmVmFsMzIpOwotCi0JCQkJT2N0ZXRzID0gKFNLX1U2NClWYWwzMiA8PCAzMjsKLQkJCQkKLQkJCQkodm9pZClTa1htTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQb3J0LCBYTV9UWE9fT0tfTE8sICZWYWwzMik7Ci0KLQkJCQlPY3RldHMgKz0gVmFsMzI7Ci0JCQkJCi0JCQkJaWYgKHBQcnQtPkxhc3RPY3RldHMgPT0gT2N0ZXRzKSB7Ci0JCQkJCS8qIFR4IGhhbmdpbmcsIGEgRklGTyBmbHVzaCByZXN0YXJ0cyBpdCAqLwotCQkJCQlTa01hY0ZsdXNoVHhGaWZvKHBBQywgSW9DLCBQb3J0KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotCWRlZmF1bHQ6Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfU0lSUV9FMDAxLCBTS0VSUl9TSVJRX0UwMDFNU0cpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4oMCk7Ci19CS8qIFNrR2VTaXJxRXZlbnQgKi8KLQotCi0jaWZkZWYgR0VORVNJUwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUGh5SXNyQmNvbSgpIC0gUEhZIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKLSAqCi0gKiBEZXNjcmlwdGlvbjogaGFuZGxlcyBhbGwgaW50ZXJydXB0cyBmcm9tIEJDb20gUEhZCi0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXN0YXRpYyB2b2lkIFNrUGh5SXNyQmNvbSgKLVNLX0FDCQkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJCS8qIElvIENvbnRleHQgKi8KLWludAkJCVBvcnQsCQkvKiBQb3J0IE51bSA9IFBIWSBOdW0gKi8KLVNLX1UxNgkJSVN0YXR1cykJLyogSW50ZXJydXB0IFN0YXR1cyAqLwotewotCVNLX0dFUE9SVAkqcFBydDsJCS8qIEdJbmkgUG9ydCBzdHJ1Y3QgcG9pbnRlciAqLwotCVNLX0VWUEFSQQlQYXJhOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAoKElTdGF0dXMgJiBQSFlfQl9JU19QU0UpICE9IDApIHsKLQkJLyogSW5jb3JyZWN0YWJsZSBwYWlyIHN3YXAgZXJyb3IgKi8KLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfU0lSUV9FMDIyLAotCQkJU0tFUlJfU0lSUV9FMDIyTVNHKTsKLQl9Ci0JCi0JaWYgKChJU3RhdHVzICYgKFBIWV9CX0lTX0FOX1BSIHwgUEhZX0JfSVNfTFNUX0NIQU5HRSkpICE9IDApIHsKLQotCQlTa0hXTGlua0Rvd24ocEFDLCBJb0MsIFBvcnQpOwotCi0JCVBhcmEuUGFyYTMyWzBdID0gKFNLX1UzMilQb3J0OwotCQkvKiBTaWduYWwgdG8gUkxNVCAqLwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfTElOS19ET1dOLCBQYXJhKTsKLQotCQkvKiBTdGFydCB3b3JrYXJvdW5kIEVycmF0YSAjMiB0aW1lciAqLwotCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwUHJ0LT5QV2FUaW1lciwgU0tfV0FfSU5BX1RJTUUsCi0JCQlTS0dFX0hXQUMsIFNLX0hXRVZfV0FUSU0sIFBhcmEpOwotCX0KLQotfQkvKiBTa1BoeUlzckJjb20gKi8KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0KLQotI2lmZGVmIFlVS09OCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tQaHlJc3JHbWFjKCkgLSBQSFkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQotICoKLSAqIERlc2NyaXB0aW9uOiBoYW5kbGVzIGFsbCBpbnRlcnJ1cHRzIGZyb20gTWFydmVsbCBQSFkKLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotc3RhdGljIHZvaWQgU2tQaHlJc3JHbWFjKAotU0tfQUMJCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkJLyogSW8gQ29udGV4dCAqLwotaW50CQkJUG9ydCwJCS8qIFBvcnQgTnVtID0gUEhZIE51bSAqLwotU0tfVTE2CQlJU3RhdHVzKQkvKiBJbnRlcnJ1cHQgU3RhdHVzICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwkJLyogR0luaSBQb3J0IHN0cnVjdCBwb2ludGVyICovCi0JU0tfRVZQQVJBCVBhcmE7Ci0JU0tfVTE2CQlXb3JkOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAoKElTdGF0dXMgJiAoUEhZX01fSVNfQU5fUFIgfCBQSFlfTV9JU19MU1RfQ0hBTkdFKSkgIT0gMCkgewotCi0JCVNrSFdMaW5rRG93bihwQUMsIElvQywgUG9ydCk7Ci0KLQkJU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0FVTkVfQURWLCAmV29yZCk7Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJBdXRvTmVnLkFkdjogMHglMDRYXG4iLCBXb3JkKSk7Ci0JCQotCQkvKiBTZXQgQXV0by1uZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50ICovCi0JCWlmIChwUHJ0LT5QRmxvd0N0cmxNb2RlID09IFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNKSB7Ci0JCQkvKiByZXN0b3JlIEFzeW1tZXRyaWMgUGF1c2UgYml0ICovCi0JCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0FVTkVfQURWLAotCQkJCShTS19VMTYpKFdvcmQgfCBQSFlfTV9BTl9BU1ApKTsKLQkJfQotCQkKLQkJUGFyYS5QYXJhMzJbMF0gPSAoU0tfVTMyKVBvcnQ7Ci0JCS8qIFNpZ25hbCB0byBSTE1UICovCi0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9MSU5LX0RPV04sIFBhcmEpOwotCX0KLQkKLQlpZiAoKElTdGF0dXMgJiBQSFlfTV9JU19BTl9FUlJPUikgIT0gMCkgewotCQkvKiBBdXRvLU5lZ290aWF0aW9uIEVycm9yICovCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfU0lSUV9FMDIzLCBTS0VSUl9TSVJRX0UwMjNNU0cpOwotCX0KLQkKLQlpZiAoKElTdGF0dXMgJiBQSFlfTV9JU19GSUZPX0VSUk9SKSAhPSAwKSB7Ci0JCS8qIEZJRk8gT3ZlcmZsb3cvVW5kZXJydW4gRXJyb3IgKi8KLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9TSVJRX0UwMjQsIFNLRVJSX1NJUlFfRTAyNE1TRyk7Ci0JfQotCQotfQkvKiBTa1BoeUlzckdtYWMgKi8KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi0KLSNpZmRlZiBPVEhFUl9QSFkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1BoeUlzckxvbmUoKSAtIFBIWSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0gKgotICogRGVzY3JpcHRpb246IGhhbmRsZXMgYWxsIGludGVycnVwdHMgZnJvbSBMT05FIFBIWQotICoKLSAqIFJldHVybnM6IE4vQQotICovCi1zdGF0aWMgdm9pZCBTa1BoeUlzckxvbmUoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSW8gQ29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBOdW0gPSBQSFkgTnVtICovCi1TS19VMTYJSVN0YXR1cykJLyogSW50ZXJydXB0IFN0YXR1cyAqLwotewotCVNLX0VWUEFSQQlQYXJhOwotCi0JaWYgKElTdGF0dXMgJiAoUEhZX0xfSVNfRFVQIHwgUEhZX0xfSVNfSVNPTCkpIHsKLQkJCi0JCVNrSFdMaW5rRG93bihwQUMsIElvQywgUG9ydCk7Ci0KLQkJUGFyYS5QYXJhMzJbMF0gPSAoU0tfVTMyKVBvcnQ7Ci0JCS8qIFNpZ25hbCB0byBSTE1UICovCi0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUkxNVCwgU0tfUkxNVF9MSU5LX0RPV04sIFBhcmEpOwotCX0KLQotfQkvKiBTa1BoeUlzckxvbmUgKi8KLSNlbmRpZiAvKiBPVEhFUl9QSFkgKi8KLQotLyogRW5kIG9mIEZpbGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tpMmMuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tpMmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzliZjU3Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NraTJjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2kyYy5jCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBUV1NJLU1vZHVsZQotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjU5ICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzEwLzIwIDA5OjA3OjI1ICQKLSAqIFB1cnBvc2U6CUZ1bmN0aW9ucyB0byBhY2Nlc3MgVm9sdGFnZSBhbmQgVGVtcGVyYXR1cmUgU2Vuc29yCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCShDKUNvcHlyaWdodCAxOTk4LTIwMDIgU3lzS29ubmVjdC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglJMkMgUHJvdG9jb2wKLSAqLwotI2lmIChkZWZpbmVkKERFQlVHKSB8fCAoKCFkZWZpbmVkKExJTlQpKSAmJiAoIWRlZmluZWQoU0tfU0xJTSkpKSkKLXN0YXRpYyBjb25zdCBjaGFyIFN5c0tvbm5lY3RGaWxlSWRbXSA9Ci0JIkAoIykgJElkOiBza2kyYy5jLHYgMS41OSAyMDAzLzEwLzIwIDA5OjA3OjI1IHJzY2htaWR0IEV4cCAkIChDKSBNYXJ2ZWxsLiAiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJoL3NrZHJ2MXN0LmgiCQkvKiBEcml2ZXIgU3BlY2lmaWMgRGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJoL2xtODAuaCIKLSNpbmNsdWRlICJoL3NrZHJ2Mm5kLmgiCQkvKiBBZGFwdGVyIENvbnRyb2wtIGFuZCBEcml2ZXIgc3BlY2lmaWMgRGVmLiAqLwotCi0jaWZkZWYgX19DMk1BTl9fCi0vKgotCUkyQyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4KLQotCUdlbmVyYWwgRGVzY3JpcHRpb246Ci0KLQlUaGUgSTJDIHByb3RvY29sIGlzIHVzZWQgZm9yIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3JzIGFuZCBmb3IKLQl0aGUgc2VyaWFsIEVFUFJPTSB3aGljaCBob2xkIHRoZSBjb25maWd1cmF0aW9uLgotCi0JVGhpcyBmaWxlIGNvdmVycyBmdW5jdGlvbnMgdGhhdCBhbGxvdyB0byByZWFkIHdyaXRlIGFuZCBkbwotCXNvbWUgYnVsayByZXF1ZXN0cyBhIHNwZWNpZmllZCBJMkMgYWRkcmVzcy4KLQotCVRoZSBHZW5lc2lzIGhhcyAyIEkyQyBidXNlcy4gT25lIGZvciB0aGUgRUVQUk9NIHdoaWNoIGhvbGRzCi0JdGhlIFZQRCBEYXRhIGFuZCBvbmUgZm9yIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvci4KLQlUaGUgZm9sbG93aW5nIHBpY3R1cmUgc2hvd3MgdGhlIEkyQyBidXNlcywgSTJDIGRldmljZXMgYW5kCi0JdGhlaXIgY29udHJvbCByZWdpc3RlcnMuCi0KLQlOb3RlOiBUaGUgVlBEIGZ1bmN0aW9ucyBhcmUgaW4gc2t2cGQuYwotLgotLglQQ0kgQ29uZmlnIEkyQyBCdXMgZm9yIFZQRCBEYXRhOgotLgotLgkJICAgICAgKy0tLS0tLS0tLS0tLSsKLS4JCSAgICAgIHwgVlBEIEVFUFJPTSB8Ci0uCQkgICAgICArLS0tLS0tLS0tLS0tKwotLgkJCSAgICAgfAotLgkJCSAgICAgfCA8LS0gSTJDCi0uCQkJICAgICB8Ci0uCQkgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwotLgkJIHwJCQkgfAotLgkrLS0tLS0tLS0tLS0tLS0tLS0rCSstLS0tLS0tLS0tLS0tLS0tLSsKLS4JfCBQQ0lfVlBEX0FEUl9SRUcgfAl8IFBDSV9WUERfREFUX1JFRyB8Ci0uCSstLS0tLS0tLS0tLS0tLS0tLSsJKy0tLS0tLS0tLS0tLS0tLS0tKwotLgotLgotLglJMkMgQnVzIGZvciBMTTgwIHNlbnNvcjoKLS4KLS4JCQkrLS0tLS0tLS0tLS0tLS0tLS0rCi0uCQkJfCBUZW1wZXJhdHVyZSBhbmQgfAotLgkJCXwgVm9sdGFnZSBTZW5zb3IgIHwKLS4JCQl8IAlMTTgwCSAgfAotLgkJCSstLS0tLS0tLS0tLS0tLS0tLSsKLS4JCQkJfAotLgkJCQl8Ci0uCQkJSTJDIC0tPiB8Ci0uCQkJCXwKLS4JCQkgICAgICstLS0tKwotLgkgICAgICstLS0tLS0tLS0tLS0tLT58IE9SIHw8LS0rCi0uCSAgICAgfAkJICAgICArLS0tLSsgICB8Ci0uICAgICArLS0tLS0tKy0tLS0tLSsJCSAgICAgIHwKLS4gICAgIHwJCSAgICB8CQkgICAgICB8Ci0uICstLS0tLS0tLSsJKy0tLS0tLS0tKwkrLS0tLS0tLS0tLSsKLS4gfCBCMl9JMkMgfAl8IEIyX0kyQyB8CXwgIEIyX0kyQyAgfAotLiB8IF9DVFJMICB8CXwgX0RBVEEgIHwJfCAgIF9TVyAgICB8Ci0uICstLS0tLS0tLSsJKy0tLS0tLS0tKwkrLS0tLS0tLS0tLSsKLS4KLQlUaGUgSTJDIGJ1cyBtYXkgYmUgZHJpdmVuIGJ5IHRoZSBCMl9JMkNfU1cgb3IgYnkgdGhlIEIyX0kyQ19DVFJMCi0JYW5kIEIyX0kyQ19EQVRBIHJlZ2lzdGVycy4KLQlGb3IgZHJpdmVyIHNvZnR3YXJlIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgSTJDIGNvbnRyb2wgYW5kCi0JZGF0YSByZWdpc3RlciwgYmVjYXVzZSBJMkMgYnVzIHRpbWluZyBpcyBkb25lIGJ5IHRoZSBBU0lDIGFuZAotCWFuIGludGVycnVwdCBtYXkgYmUgcmVjZWl2ZWQgd2hlbiB0aGUgSTJDIHJlcXVlc3QgaXMgY29tcGxldGVkLgotCi0JQ2xvY2sgUmF0ZSBUaW1pbmc6CQkJTUlOCU1BWAlnZW5lcmF0ZWQgYnkKLQkJVlBEIEVFUFJPTToJCQk1MCBrSHoJMTAwIGtIegkJSFcKLQkJTE04MCBvdmVyIEkyQyBDdHJsL0RhdGEgcmVnLgk1MCBrSHoJMTAwIGtIegkJSFcKLQkJTE04MCBvdmVyIEIyX0kyQ19TVyByZWdpc3RlcgkwCTQwMCBrSHoJCVNXCi0KLQlOb3RlOglUaGUgY2xvY2sgZ2VuZXJhdGVkIGJ5IHRoZSBoYXJkd2FyZSBpcyBkZXBlbmRlbmQgb24gdGhlCi0JCVBDSSBjbG9jay4gSWYgdGhlIFBDSSBidXMgY2xvY2sgaXMgMzMgTUh6LCB0aGUgSTJDL1ZQRAotCQljbG9jayBpcyA1MCBrSHouCi0gKi8KLWludHJvKCkKLXt9Ci0jZW5kaWYKLQotI2lmZGVmIFNLX0RJQUcKLS8qCi0gKiBJMkMgRmFzdCBNb2RlIHRpbWluZyB2YWx1ZXMgdXNlZCBieSB0aGUgTE04MC4KLSAqIElmIG5ldyBkZXZpY2VzIGFyZSBhZGRlZCB0byB0aGUgSTJDIGJ1cyB0aGUgdGltaW5nIHZhbHVlcyBoYXZlIHRvIGJlIGNoZWNrZWQuCi0gKi8KLSNpZm5kZWYgSTJDX1NMT1dfVElNSU5HCi0jZGVmaW5lCVRfQ0xLX0xPVwkJCTEzMDBMCS8qIGNsb2NrIGxvdyB0aW1lIGluIG5zICovCi0jZGVmaW5lCVRfQ0xLX0hJR0gJCSAJIDYwMEwJLyogY2xvY2sgaGlnaCB0aW1lIGluIG5zICovCi0jZGVmaW5lIFRfREFUQV9JTl9TRVRVUAkJIDEwMEwJLyogZGF0YSBpbiBTZXQtdXAgVGltZSAqLwotI2RlZmluZSBUX1NUQVJUX0hPTEQJCSA2MDBMCS8qIHN0YXJ0IGNvbmRpdGlvbiBob2xkIHRpbWUgKi8KLSNkZWZpbmUgVF9TVEFSVF9TRVRVUAkJIDYwMEwJLyogc3RhcnQgY29uZGl0aW9uIFNldC11cCB0aW1lICovCi0jZGVmaW5lCVRfU1RPUF9TRVRVUAkJIDYwMEwJLyogc3RvcCBjb25kaXRpb24gU2V0LXVwIHRpbWUgKi8KLSNkZWZpbmUgVF9CVVNfSURMRQkJCTEzMDBMCS8qIHRpbWUgdGhlIGJ1cyBtdXN0IGZyZWUgYWZ0ZXIgVHggKi8KLSNkZWZpbmUJVF9DTEtfMl9EQVRBX09VVAkgOTAwTAkvKiBtYXguIGNsb2NrIGxvdyB0byBkYXRhIG91dHB1dCB2YWxpZCAqLwotI2Vsc2UJLyogSTJDX1NMT1dfVElNSU5HICovCi0vKiBJMkMgU3RhbmRhcmQgTW9kZSBUaW1pbmcgKi8KLSNkZWZpbmUJVF9DTEtfTE9XCQkJNDcwMEwJLyogY2xvY2sgbG93IHRpbWUgaW4gbnMgKi8KLSNkZWZpbmUJVF9DTEtfSElHSAkJCTQwMDBMCS8qIGNsb2NrIGhpZ2ggdGltZSBpbiBucyAqLwotI2RlZmluZSBUX0RBVEFfSU5fU0VUVVAJCSAyNTBMCS8qIGRhdGEgaW4gU2V0LXVwIFRpbWUgKi8KLSNkZWZpbmUgVF9TVEFSVF9IT0xECQk0MDAwTAkvKiBzdGFydCBjb25kaXRpb24gaG9sZCB0aW1lICovCi0jZGVmaW5lIFRfU1RBUlRfU0VUVVAJCTQ3MDBMCS8qIHN0YXJ0IGNvbmRpdGlvbiBTZXQtdXAgdGltZSAqLwotI2RlZmluZQlUX1NUT1BfU0VUVVAJCTQwMDBMCS8qIHN0b3AgY29uZGl0aW9uIFNldC11cCB0aW1lICovCi0jZGVmaW5lIFRfQlVTX0lETEUJCQk0NzAwTAkvKiB0aW1lIHRoZSBidXMgbXVzdCBmcmVlIGFmdGVyIFR4ICovCi0jZW5kaWYJLyogIUkyQ19TTE9XX1RJTUlORyAqLwotCi0jZGVmaW5lIE5TMkJDTEsoeCkJKCgoeCkqMTI1KS8xMDAwMCkKLQotLyoKLSAqIEkyQyBXaXJlIE9wZXJhdGlvbnMKLSAqCi0gKiBBYm91dCBJMkNfQ0xLX0xPVygpOgotICoKLSAqIFRoZSBEYXRhIERpcmVjdGlvbiBiaXQgKEkyQ19EQVRBX0RJUikgaGFzIHRvIGJlIHNldCB0byBpbnB1dCB3aGVuIHNldHRpbmcKLSAqIGNsb2NrIHRvIGxvdywgdG8gcHJldmVudCB0aGUgQVNJQyBhbmQgdGhlIEkyQyBkYXRhIGNsaWVudCBmcm9tIGRyaXZpbmcgdGhlCi0gKiBzZXJpYWwgZGF0YSBsaW5lIHNpbXVsdGFuZW91c2x5IChBU0lDOiBsYXN0IGJpdCBvZiBhIGJ5dGUgPSAnMScsIEkyQyBjbGllbnQKLSAqIHNlbmQgYW4gJ0FDSycpLiBTZWUgYWxzbyBDb25jZW50cmF0b3IgQnVncmVwb3J0IE5vLiAxMDE5Mi4KLSAqLwotI2RlZmluZSBJMkNfREFUQV9ISUdIKElvQykJU0tfSTJDX1NFVF9CSVQoSW9DLCBJMkNfREFUQSkKLSNkZWZpbmUJSTJDX0RBVEFfTE9XKElvQykJU0tfSTJDX0NMUl9CSVQoSW9DLCBJMkNfREFUQSkKLSNkZWZpbmUJSTJDX0RBVEFfT1VUKElvQykJU0tfSTJDX1NFVF9CSVQoSW9DLCBJMkNfREFUQV9ESVIpCi0jZGVmaW5lCUkyQ19EQVRBX0lOKElvQykJU0tfSTJDX0NMUl9CSVQoSW9DLCBJMkNfREFUQV9ESVIgfCBJMkNfREFUQSkKLSNkZWZpbmUJSTJDX0NMS19ISUdIKElvQykJU0tfSTJDX1NFVF9CSVQoSW9DLCBJMkNfQ0xLKQotI2RlZmluZQlJMkNfQ0xLX0xPVyhJb0MpCVNLX0kyQ19DTFJfQklUKElvQywgSTJDX0NMSyB8IEkyQ19EQVRBX0RJUikKLSNkZWZpbmUJSTJDX1NUQVJUX0NPTkQoSW9DKQlTS19JMkNfQ0xSX0JJVChJb0MsIEkyQ19DTEspCi0KLSNkZWZpbmUgTlMyQ0xLVCh4KQkoKHgqMTI1TCkvMTAwMDApCi0KLS8qLS0tLS0tLS0tLS0tLS0tIEkyQyBJbnRlcmZhY2UgUmVnaXN0ZXIgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogc2VuZGluZyBvbmUgYml0Ci0gKi8KLXZvaWQgU2tJMmNTbmRCaXQoCi1TS19JT0MJSW9DLAkvKiBJL08gQ29udGV4dCAqLwotU0tfVTgJQml0KQkvKiBCaXQgdG8gc2VuZCAqLwotewotCUkyQ19EQVRBX09VVChJb0MpOwotCWlmIChCaXQpIHsKLQkJSTJDX0RBVEFfSElHSChJb0MpOwotCX0KLQllbHNlIHsKLQkJSTJDX0RBVEFfTE9XKElvQyk7Ci0JfQotCVNrRGdXYWl0VGltZShJb0MsIE5TMkJDTEsoVF9EQVRBX0lOX1NFVFVQKSk7Ci0JSTJDX0NMS19ISUdIKElvQyk7Ci0JU2tEZ1dhaXRUaW1lKElvQywgTlMyQkNMSyhUX0NMS19ISUdIKSk7Ci0JSTJDX0NMS19MT1coSW9DKTsKLX0JLyogU2tJMmNTbmRCaXQqLwotCi0KLS8qCi0gKiBTaWduYWwgYSBzdGFydCB0byB0aGUgSTJDIEJ1cy4KLSAqCi0gKiBBIHN0YXJ0IGlzIHNpZ25hbGVkIHdoZW4gZGF0YSBnb2VzIHRvIGxvdyBpbiBhIGhpZ2ggY2xvY2sgY3ljbGUuCi0gKgotICogRW5kcyB3aXRoIENsb2NrIExvdy4KLSAqCi0gKiBTdGF0dXM6IG5vdCB0ZXN0ZWQKLSAqLwotdm9pZCBTa0kyY1N0YXJ0KAotU0tfSU9DCUlvQykJLyogSS9PIENvbnRleHQgKi8KLXsKLQkvKiBJbml0IGRhdGEgYW5kIENsb2NrIHRvIG91dHB1dCBsaW5lcyAqLwotCS8qIFNldCBEYXRhIGhpZ2ggKi8KLQlJMkNfREFUQV9PVVQoSW9DKTsKLQlJMkNfREFUQV9ISUdIKElvQyk7Ci0JLyogU2V0IENsb2NrIGhpZ2ggKi8KLQlJMkNfQ0xLX0hJR0goSW9DKTsKLQotCVNrRGdXYWl0VGltZShJb0MsIE5TMkJDTEsoVF9TVEFSVF9TRVRVUCkpOwotCi0JLyogU2V0IERhdGEgTG93ICovCi0JSTJDX0RBVEFfTE9XKElvQyk7Ci0KLQlTa0RnV2FpdFRpbWUoSW9DLCBOUzJCQ0xLKFRfU1RBUlRfSE9MRCkpOwotCi0JLyogQ2xvY2sgbG93IHdpdGhvdXQgRGF0YSB0byBJbnB1dCAqLwotCUkyQ19TVEFSVF9DT05EKElvQyk7Ci0KLQlTa0RnV2FpdFRpbWUoSW9DLCBOUzJCQ0xLKFRfQ0xLX0xPVykpOwotfQkvKiBTa0kyY1N0YXJ0ICovCi0KLQotdm9pZCBTa0kyY1N0b3AoCi1TS19JT0MJSW9DKQkvKiBJL08gQ29udGV4dCAqLwotewotCS8qIEluaXQgZGF0YSBhbmQgQ2xvY2sgdG8gb3V0cHV0IGxpbmVzICovCi0JLyogU2V0IERhdGEgbG93ICovCi0JSTJDX0RBVEFfT1VUKElvQyk7Ci0JSTJDX0RBVEFfTE9XKElvQyk7Ci0KLQlTa0RnV2FpdFRpbWUoSW9DLCBOUzJCQ0xLKFRfQ0xLXzJfREFUQV9PVVQpKTsKLQotCS8qIFNldCBDbG9jayBoaWdoICovCi0JSTJDX0NMS19ISUdIKElvQyk7Ci0KLQlTa0RnV2FpdFRpbWUoSW9DLCBOUzJCQ0xLKFRfU1RPUF9TRVRVUCkpOwotCi0JLyoKLQkgKiBTZXQgRGF0YSBIaWdoOglEbyBpdCBieSBzZXR0aW5nIHRoZSBEYXRhIExpbmUgdG8gSW5wdXQuCi0JICoJCQlCZWNhdXNlIG9mIGEgcHVsbCB1cCByZXNpc3RvciB0aGUgRGF0YSBMaW5lCi0JICoJCQlmbG9vZHMgdG8gaGlnaC4KLQkgKi8KLQlJMkNfREFUQV9JTihJb0MpOwotCi0JLyoKLQkgKglXaGVuIEkyQyBhY3Rpdml0eSBpcyBzdG9wcGVkCi0JICoJIG8JREFUQSBzaG91bGQgYmUgc2V0IHRvIGlucHV0IGFuZAotCSAqCSBvCUNMT0NLIHNob3VsZCBiZSBzZXQgdG8gaGlnaCEKLQkgKi8KLQlTa0RnV2FpdFRpbWUoSW9DLCBOUzJCQ0xLKFRfQlVTX0lETEUpKTsKLX0JLyogU2tJMmNTdG9wICovCi0KLQotLyoKLSAqIFJlY2VpdmUganVzdCBvbmUgYml0IHZpYSB0aGUgSTJDIGJ1cy4KLSAqCi0gKiBOb3RlOglDbG9jayBtdXN0IGJlIHNldCB0byBMT1cgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zIFRoZSByZWNlaXZlZCBiaXQuCi0gKi8KLWludCBTa0kyY1JjdkJpdCgKLVNLX0lPQwlJb0MpCS8qIEkvTyBDb250ZXh0ICovCi17Ci0JaW50CUJpdDsKLQlTS19VOAlJMmNTd0N0cmw7Ci0KLQkvKiBJbml0IGRhdGEgYXMgaW5wdXQgbGluZSAqLwotCUkyQ19EQVRBX0lOKElvQyk7Ci0KLQlTa0RnV2FpdFRpbWUoSW9DLCBOUzJCQ0xLKFRfQ0xLXzJfREFUQV9PVVQpKTsKLQotCUkyQ19DTEtfSElHSChJb0MpOwotCi0JU2tEZ1dhaXRUaW1lKElvQywgTlMyQkNMSyhUX0NMS19ISUdIKSk7Ci0KLQlTS19JMkNfR0VUX1NXKElvQywgJkkyY1N3Q3RybCk7Ci0JCi0JQml0ID0gKEkyY1N3Q3RybCAmIEkyQ19EQVRBKSA/IDEgOiAwOwotCi0JSTJDX0NMS19MT1coSW9DKTsKLQlTa0RnV2FpdFRpbWUoSW9DLCBOUzJCQ0xLKFRfQ0xLX0xPVy1UX0NMS18yX0RBVEFfT1VUKSk7Ci0KLQlyZXR1cm4oQml0KTsKLX0JLyogU2tJMmNSY3ZCaXQgKi8KLQotCi0vKgotICogUmVjZWl2ZSBhbiBBQ0suCi0gKgotICogcmV0dXJucwkwIElmIGFja25vd2xlZGdlZAotICoJCTEgaW4gY2FzZSBvZiBhbiBlcnJvcgotICovCi1pbnQgU2tJMmNSY3ZBY2soCi1TS19JT0MJSW9DKQkvKiBJL08gQ29udGV4dCAqLwotewotCS8qCi0JICogUmVjZWl2ZWQgYml0IG11c3QgYmUgemVyby4KLQkgKi8KLQlyZXR1cm4oU2tJMmNSY3ZCaXQoSW9DKSAhPSAwKTsKLX0JLyogU2tJMmNSY3ZBY2sgKi8KLQotCi0vKgotICogU2VuZCBhbiBOQUNLLgotICovCi12b2lkIFNrSTJjU25kTkFjaygKLVNLX0lPQwlJb0MpCS8qIEkvTyBDb250ZXh0ICovCi17Ci0JLyoKLQkgKiBSZWNlaXZlZCBiaXQgbXVzdCBiZSB6ZXJvLgotCSAqLwotCVNrSTJjU25kQml0KElvQywgMSk7Ci19CS8qIFNrSTJjU25kTkFjayAqLwotCi0KLS8qCi0gKiBTZW5kIGFuIEFDSy4KLSAqLwotdm9pZCBTa0kyY1NuZEFjaygKLVNLX0lPQyBJb0MpCS8qIEkvTyBDb250ZXh0ICovCi17Ci0JLyoKLQkgKiBSZWNlaXZlZCBiaXQgbXVzdCBiZSB6ZXJvLgotCSAqLwotCVNrSTJjU25kQml0KElvQywgMCk7Ci19CS8qIFNrSTJjU25kQWNrICovCi0KLQotLyoKLSAqIFNlbmQgb25lIGJ5dGUgdG8gdGhlIEkyQyBkZXZpY2UgYW5kIHdhaXQgZm9yIEFDSy4KLSAqCi0gKiBSZXR1cm4gYWNrbm93bGVnZWQgc3RhdHVzLgotICovCi1pbnQgU2tJMmNTbmRCeXRlKAotU0tfSU9DCUlvQywJLyogSS9PIENvbnRleHQgKi8KLWludAkJQnl0ZSkJLyogYnl0ZSB0byBzZW5kICovCi17Ci0JaW50CWk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmIChCeXRlICYgKDE8PCg3LWkpKSkgewotCQkJU2tJMmNTbmRCaXQoSW9DLCAxKTsKLQkJfQotCQllbHNlIHsKLQkJCVNrSTJjU25kQml0KElvQywgMCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4oU2tJMmNSY3ZBY2soSW9DKSk7Ci19CS8qIFNrSTJjU25kQnl0ZSAqLwotCi0KLS8qCi0gKiBSZWNlaXZlIG9uZSBieXRlIGFuZCBhY2sgaXQuCi0gKgotICogUmV0dXJuIGJ5dGUuCi0gKi8KLWludCBTa0kyY1JjdkJ5dGUoCi1TS19JT0MJSW9DLAkvKiBJL08gQ29udGV4dCAqLwotaW50CQlMYXN0KQkvKiBMYXN0IEJ5dGUgRmxhZyAqLwotewotCWludAlpOwotCWludAlCeXRlID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJQnl0ZSA8PD0gMTsKLQkJQnl0ZSB8PSBTa0kyY1JjdkJpdChJb0MpOwotCX0KLQotCWlmIChMYXN0KSB7Ci0JCVNrSTJjU25kTkFjayhJb0MpOwotCX0KLQllbHNlIHsKLQkJU2tJMmNTbmRBY2soSW9DKTsKLQl9Ci0KLQlyZXR1cm4oQnl0ZSk7Ci19CS8qIFNrSTJjUmN2Qnl0ZSAqLwotCi0KLS8qCi0gKiBTdGFydCBkaWFsb2cgYW5kIHNlbmQgZGV2aWNlIGFkZHJlc3MKLSAqCi0gKiBSZXR1cm4gMCBpZiBhY2tub3dsZWdlZCwgMSBpbiBjYXNlIG9mIGFuIGVycm9yCi0gKi8KLWludAlTa0kyY1NuZERldigKLVNLX0lPQwlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1pbnQJCUFkZHIsCS8qIERldmljZSBBZGRyZXNzICovCi1pbnQJCVJ3KQkJLyogUmVhZCAvIFdyaXRlIEZsYWcgKi8KLXsKLQlTa0kyY1N0YXJ0KElvQyk7Ci0JUncgPSB+Unc7Ci0JUncgJj0gSTJDX1dSSVRFOwotCXJldHVybihTa0kyY1NuZEJ5dGUoSW9DLCAoQWRkcjw8MSkgfCBSdykpOwotfQkvKiBTa0kyY1NuZERldiAqLwotCi0jZW5kaWYgLyogU0tfRElBRyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tIEkyQyBDVFJMIFJlZ2lzdGVyIEZ1bmN0aW9ucyAtLS0tLS0tLS0tKi8KLQotLyoKLSAqIHdhaXRzIGZvciBhIGNvbXBsZXRpb24gb2YgYW4gSTJDIHRyYW5zZmVyCi0gKgotICogcmV0dXJucwkwOglzdWNjZXNzLCB0cmFuc2ZlciBjb21wbGV0ZXMKLSAqCQkJMToJZXJyb3IsCSB0cmFuc2ZlciBkb2VzIG5vdCBjb21wbGV0ZSwgSTJDIHRyYW5zZmVyCi0gKgkJCQkJCSBraWxsZWQsIHdhaXQgbG9vcCB0ZXJtaW5hdGVkLgotICovCi1zdGF0aWMgaW50CVNrSTJjV2FpdCgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSS9PIENvbnRleHQgKi8KLWludAkJRXZlbnQpCS8qIGNvbXBsZXRlIGV2ZW50IHRvIHdhaXQgZm9yIChJMkNfUkVBRCBvciBJMkNfV1JJVEUpICovCi17Ci0JU0tfVTY0CVN0YXJ0VGltZTsKLQlTS19VNjQJQ3VycmVudFRpbWU7Ci0JU0tfVTMyCUkyY0N0cmw7Ci0KLQlTdGFydFRpbWUgPSBTa09zR2V0VGltZShwQUMpOwotCQotCWRvIHsKLQkJQ3VycmVudFRpbWUgPSBTa09zR2V0VGltZShwQUMpOwotCi0JCWlmIChDdXJyZW50VGltZSAtIFN0YXJ0VGltZSA+IFNLX1RJQ0tTX1BFUl9TRUMgLyA4KSB7Ci0JCQkKLQkJCVNLX0kyQ19TVE9QKElvQyk7Ci0jaWZuZGVmIFNLX0RJQUcKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfSTJDX0UwMDIsIFNLRVJSX0kyQ19FMDAyTVNHKTsKLSNlbmRpZiAvKiAhU0tfRElBRyAqLwotCQkJcmV0dXJuKDEpOwotCQl9Ci0JCQotCQlTS19JMkNfR0VUX0NUTChJb0MsICZJMmNDdHJsKTsKLQotI2lmZGVmIHhZVUtPTl9EQkcKLQkJcHJpbnRmKCJTdGFydFRpbWU9JWx1LCBDdXJyZW50VGltZT0lbHVcbiIsCi0JCQlTdGFydFRpbWUsIEN1cnJlbnRUaW1lKTsKLQkJaWYgKGtiaGl0KCkpIHsKLQkJCXJldHVybigxKTsKLQkJfQotI2VuZGlmIC8qIFlVS09OX0RCRyAqLwotCQotCX0gd2hpbGUgKChJMmNDdHJsICYgSTJDX0ZMQUcpID09IChTS19VMzIpRXZlbnQgPDwgMzEpOwotCi0JcmV0dXJuKDApOwotfQkvKiBTa0kyY1dhaXQgKi8KLQotCi0vKgotICogd2FpdHMgZm9yIGEgY29tcGxldGlvbiBvZiBhbiBJMkMgdHJhbnNmZXIKLSAqCi0gKiBSZXR1cm5zCi0gKglOb3RoaW5nCi0gKi8KLXZvaWQgU2tJMmNXYWl0SXJxKAotU0tfQUMJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DKQkvKiBJL08gQ29udGV4dCAqLwotewotCVNLX1NFTlNPUgkqcFNlbjsKLQlTS19VNjQJCVN0YXJ0VGltZTsKLQlTS19VMzIJCUlycVNyYzsKLQotCXBTZW4gPSAmcEFDLT5JMmMuU2VuVGFibGVbcEFDLT5JMmMuQ3VyclNlbnNdOwotCi0JaWYgKHBTZW4tPlNlblN0YXRlID09IFNLX1NFTl9JRExFKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlTdGFydFRpbWUgPSBTa09zR2V0VGltZShwQUMpOwotCQotCWRvIHsKLQkJaWYgKFNrT3NHZXRUaW1lKHBBQykgLSBTdGFydFRpbWUgPiBTS19USUNLU19QRVJfU0VDIC8gOCkgewotCQkJCi0JCQlTS19JMkNfU1RPUChJb0MpOwotI2lmbmRlZiBTS19ESUFHCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX0kyQ19FMDE2LCBTS0VSUl9JMkNfRTAxNk1TRyk7Ci0jZW5kaWYgLyogIVNLX0RJQUcgKi8KLQkJCXJldHVybjsKLQkJfQotCQkKLQkJU0tfSU4zMihJb0MsIEIwX0lTUkMsICZJcnFTcmMpOwotCi0JfSB3aGlsZSAoKElycVNyYyAmIElTX0kyQ19SRUFEWSkgPT0gMCk7Ci0KLQlwU2VuLT5TZW5TdGF0ZSA9IFNLX1NFTl9JRExFOwotCXJldHVybjsKLX0JLyogU2tJMmNXYWl0SXJxICovCi0KLS8qCi0gKiB3cml0ZXMgYSBzaW5nbGUgYnl0ZSBvciA0IGJ5dGVzIGludG8gdGhlIEkyQyBkZXZpY2UKLSAqCi0gKiByZXR1cm5zCTA6CXN1Y2Nlc3MKLSAqCQkJMToJZXJyb3IKLSAqLwotc3RhdGljIGludCBTa0kyY1dyaXRlKAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIEkvTyBDb250ZXh0ICovCi1TS19VMzIJSTJjRGF0YSwJLyogSTJDIERhdGEgdG8gd3JpdGUgKi8KLWludAkJSTJjRGV2LAkJLyogSTJDIERldmljZSBBZGRyZXNzICovCi1pbnQJCUkyY0RldlNpemUsIC8qIEkyQyBEZXZpY2UgU2l6ZSAoZS5nLiBJMkNfMDI1S19ERVYgb3IgSTJDXzJLX0RFVikgKi8KLWludAkJSTJjUmVnLAkJLyogSTJDIERldmljZSBSZWdpc3RlciBBZGRyZXNzICovCi1pbnQJCUkyY0J1cnN0KQkvKiBJMkMgQnVyc3QgRmxhZyAqLwotewotCVNLX09VVDMyKElvQywgQjJfSTJDX0RBVEEsIEkyY0RhdGEpOwotCQotCVNLX0kyQ19DVEwoSW9DLCBJMkNfV1JJVEUsIEkyY0RldiwgSTJjRGV2U2l6ZSwgSTJjUmVnLCBJMmNCdXJzdCk7Ci0JCi0JcmV0dXJuKFNrSTJjV2FpdChwQUMsIElvQywgSTJDX1dSSVRFKSk7Ci19CS8qIFNrSTJjV3JpdGUqLwotCi0KLSNpZmRlZglTS19ESUFHCi0vKgotICogcmVhZHMgYSBzaW5nbGUgYnl0ZSBvciA0IGJ5dGVzIGZyb20gdGhlIEkyQyBkZXZpY2UKLSAqCi0gKiByZXR1cm5zCXRoZSB3b3JkIHJlYWQKLSAqLwotU0tfVTMyIFNrSTJjUmVhZCgKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gQ29udGV4dCAqLwotaW50CQlJMmNEZXYsCQkvKiBJMkMgRGV2aWNlIEFkZHJlc3MgKi8KLWludAkJSTJjRGV2U2l6ZSwgLyogSTJDIERldmljZSBTaXplIChlLmcuIEkyQ18wMjVLX0RFViBvciBJMkNfMktfREVWKSAqLwotaW50CQlJMmNSZWcsCQkvKiBJMkMgRGV2aWNlIFJlZ2lzdGVyIEFkZHJlc3MgKi8KLWludAkJSTJjQnVyc3QpCS8qIEkyQyBCdXJzdCBGbGFnICovCi17Ci0JU0tfVTMyCURhdGE7Ci0KLQlTS19PVVQzMihJb0MsIEIyX0kyQ19EQVRBLCAwKTsKLQlTS19JMkNfQ1RMKElvQywgSTJDX1JFQUQsIEkyY0RldiwgSTJjRGV2U2l6ZSwgSTJjUmVnLCBJMmNCdXJzdCk7Ci0JCi0JaWYgKFNrSTJjV2FpdChwQUMsIElvQywgSTJDX1JFQUQpICE9IDApIHsKLQkJd19wcmludCgiJXNcbiIsIFNLRVJSX0kyQ19FMDAyTVNHKTsKLQl9Ci0JCi0JU0tfSU4zMihJb0MsIEIyX0kyQ19EQVRBLCAmRGF0YSk7Ci0JCi0JcmV0dXJuKERhdGEpOwotfQkvKiBTa0kyY1JlYWQgKi8KLSNlbmRpZiAvKiBTS19ESUFHICovCi0KLQotLyoKLSAqIHJlYWQgYSBzZW5zb3IncyB2YWx1ZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgYSBzZW5zb3IncyB2YWx1ZSBmcm9tIHRoZSBJMkMgc2Vuc29yIGNoaXAuIFRoZSBzZW5zb3IKLSAqIGlzIGRlZmluZWQgYnkgaXRzIGluZGV4IGludG8gdGhlIHNlbnNvcnMgZGF0YWJhc2UgaW4gdGhlIHN0cnVjdCBwQUMgcG9pbnRzCi0gKiB0by4KLSAqIFJldHVybnMKLSAqCQkxIGlmIHRoZSByZWFkIGlzIGNvbXBsZXRlZAotICoJCTAgaWYgdGhlIHJlYWQgbXVzdCBiZSBjb250aW51ZWQgKEkyQyBCdXMgc3RpbGwgYWxsb2NhdGVkKQotICovCi1zdGF0aWMgaW50CVNrSTJjUmVhZFNlbnNvcigKLVNLX0FDCQkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkvKiBJL08gQ29udGV4dCAqLwotU0tfU0VOU09SCSpwU2VuKQkvKiBTZW5zb3IgdG8gYmUgcmVhZCAqLwotewotICAgIGlmIChwU2VuLT5TZW5SZWFkICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuKCgqcFNlbi0+U2VuUmVhZCkocEFDLCBJb0MsIHBTZW4pKTsKLSAgICB9Ci0JZWxzZSB7Ci0gICAgICAgIHJldHVybigwKTsgLyogbm8gc3VjY2VzcyAqLwotCX0KLX0JLyogU2tJMmNSZWFkU2Vuc29yICovCi0KLS8qCi0gKiBEbyB0aGUgSW5pdCBzdGF0ZSAwIGluaXRpYWxpemF0aW9uCi0gKi8KLXN0YXRpYyBpbnQgU2tJMmNJbml0MCgKLVNLX0FDCSpwQUMpCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotewotCWludAlpOwotCi0JLyogQmVnaW4gd2l0aCBmaXJzdCBzZW5zb3IgKi8KLQlwQUMtPkkyYy5DdXJyU2VucyA9IDA7Ci0JCi0JLyogQmVnaW4gd2l0aCB0aW1lb3V0IGNvbnRyb2wgZm9yIHN0YXRlIG1hY2hpbmUgKi8KLQlwQUMtPkkyYy5UaW1lck1vZGUgPSBTS19USU1FUl9XQVRDSF9TTTsKLQkKLQkvKiBTZXQgc2Vuc29yIG51bWJlciB0byB6ZXJvICovCi0JcEFDLT5JMmMuTWF4U2VucyA9IDA7Ci0KLSNpZm5kZWYgU0tfRElBRwotCS8qIEluaXRpYWxpemUgTnVtYmVyIG9mIER1bW15IFJlYWRzICovCi0JcEFDLT5JMmMuRHVtbXlSZWFkcyA9IFNLX01BWF9TRU5TT1JTOwotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYX1NFTlNPUlM7IGkrKykgewotCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5EZXNjID0gInVua25vd24iOwotCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UeXBlID0gU0tfU0VOX1VOS05PV047Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gMDsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IDA7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuSGlnaCA9IDA7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuTG93ID0gMDsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuUmVnID0gTE04MF9GQU4yX0lOOwotCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5Jbml0ID0gU0tfU0VOX0RZTl9JTklUX05PTkU7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblZhbHVlID0gMDsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRXJyRmxhZyA9IFNLX1NFTl9FUlJfTk9UX1BSRVNFTlQ7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkVyckN0cyA9IDA7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkJlZ0VyclRTID0gMDsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuU3RhdGUgPSBTS19TRU5fSURMRTsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuUmVhZCA9IE5VTEw7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkRldiA9IDA7Ci0JfQotCi0JLyogTm93IHdlIGFyZSAiSU5JVCBkYXRhImVkICovCi0JcEFDLT5JMmMuSW5pdExldmVsID0gU0tfSU5JVF9EQVRBOwotCXJldHVybigwKTsKLX0JLyogU2tJMmNJbml0MCovCi0KLQotLyoKLSAqIERvIHRoZSBpbml0IHN0YXRlIDEgaW5pdGlhbGl6YXRpb24KLSAqCi0gKiBpbml0aWFsaXplIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgb2YgdGhlIExNODA6Ci0gKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyOgotICogLSBTVEFSVCwgbm9JTlQsIGFjdGl2ZUxPVywgbm9JTlQjQ2xlYXIsIG5vUkVTRVQsIG5vQ0ksIG5vR1BPIywgbm9JTklUCi0gKgotICogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgMToKLSAqIC0gYWxsIGludGVycnVwdHMgYXJlIERpc2FibGVkICgweGZmKQotICoKLSAqIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDI6Ci0gKiAtIGFsbCBpbnRlcnJ1cHRzIGFyZSBEaXNhYmxlZCAoMHhmZikgSW50ZXJydXB0IG1vZGkgZG9lc24ndCBtYXR0ZXIuCi0gKgotICogRmFuIERpdmlzb3IvUlNUX09VVCByZWdpc3RlcjoKLSAqIC0gRGl2aXNvcnMgc2V0IHRvIDEgKGJpdHMgMDApLCBhbGwgb3RoZXJzIDBzLgotICoKLSAqIE9TIyBDb25maWd1cmF0aW9uL1RlbXBlcmF0dXJlIHJlc29sdXRpb24gUmVnaXN0ZXI6Ci0gKiAtIGFsbCAwcwotICoKLSAqLwotc3RhdGljIGludCBTa0kyY0luaXQxKAotU0tfQUMJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DKQkvKiBJL08gQ29udGV4dCAqLwotewotICAgIGludCBpOwotICAgIFNLX1U4IEkyY1N3Q3RybDsKLQlTS19HRVBPUlQgKnBQcnQ7CS8qIEdJbmkgUG9ydCBzdHJ1Y3QgcG9pbnRlciAqLwotCi0JaWYgKHBBQy0+STJjLkluaXRMZXZlbCAhPSBTS19JTklUX0RBVEEpIHsKLQkJLyogUmVJbml0IG5vdCBuZWVkZWQgaW4gSTJDIG1vZHVsZSAqLwotCQlyZXR1cm4oMCk7Ci0JfQotCi0gICAgLyogU2V0IHRoZSBEaXJlY3Rpb24gb2YgSTJDLURhdGEgUGluIHRvIElOICovCi0gICAgU0tfSTJDX0NMUl9CSVQoSW9DLCBJMkNfREFUQV9ESVIgfCBJMkNfREFUQSk7Ci0gICAgLyogQ2hlY2sgZm9yIDMyLUJpdCBZdWtvbiB3aXRoIExvdyBhdCBJMkMtRGF0YSBQaW4gKi8KLQlTS19JMkNfR0VUX1NXKElvQywgJkkyY1N3Q3RybCk7Ci0KLQlpZiAoKEkyY1N3Q3RybCAmIEkyQ19EQVRBKSA9PSAwKSB7Ci0JCS8qIHRoaXMgaXMgYSAzMi1CaXQgYm9hcmQgKi8KLQkJcEFDLT5HSW5pLkdJWXVrb24zMkJpdCA9IFNLX1RSVUU7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLQkvKiBDaGVjayBmb3IgNjQgQml0IFl1a29uIHdpdGhvdXQgc2Vuc29ycyAqLwotCWlmIChTa0kyY1dyaXRlKHBBQywgSW9DLCAwLCBMTTgwX0FERFIsIEkyQ18wMjVLX0RFViwgTE04MF9DRkcsIDApICE9IDApIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotCSh2b2lkKVNrSTJjV3JpdGUocEFDLCBJb0MsIDB4ZmZVTCwgTE04MF9BRERSLCBJMkNfMDI1S19ERVYsIExNODBfSU1TS18xLCAwKTsKLQkKLQkodm9pZClTa0kyY1dyaXRlKHBBQywgSW9DLCAweGZmVUwsIExNODBfQUREUiwgSTJDXzAyNUtfREVWLCBMTTgwX0lNU0tfMiwgMCk7Ci0JCi0JKHZvaWQpU2tJMmNXcml0ZShwQUMsIElvQywgMCwgTE04MF9BRERSLCBJMkNfMDI1S19ERVYsIExNODBfRkFOX0NUUkwsIDApOwotCQotCSh2b2lkKVNrSTJjV3JpdGUocEFDLCBJb0MsIDAsIExNODBfQUREUiwgSTJDXzAyNUtfREVWLCBMTTgwX1RFTVBfQ1RSTCwgMCk7Ci0JCi0JKHZvaWQpU2tJMmNXcml0ZShwQUMsIElvQywgKFNLX1UzMilMTTgwX0NGR19TVEFSVCwgTE04MF9BRERSLCBJMkNfMDI1S19ERVYsCi0JCUxNODBfQ0ZHLCAwKTsKLQkKLQkvKgotCSAqIE1heFNlbnMgaGFzIHRvIGJlIHVwZGF0ZWQgaGVyZSwgYmVjYXVzZSBQaHlUeXBlIGlzIG5vdAotCSAqIHNldCB3aGVuIHBlcmZvcm1pbmcgSW5pdCBMZXZlbCAwCi0JICovCi0gICAgcEFDLT5JMmMuTWF4U2VucyA9IDU7Ci0JCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbMF07Ci0JCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJaWYgKHBQcnQtPlBoeVR5cGUgPT0gU0tfUEhZX0JDT00pIHsKLQkJCWlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMSkgewotCQkJCXBBQy0+STJjLk1heFNlbnMgKz0gMTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXBBQy0+STJjLk1heFNlbnMgKz0gMzsKLQkJCX0KLQkJfQotCX0KLQllbHNlIHsKLQkJcEFDLT5JMmMuTWF4U2VucyArPSAzOwotCX0KLQkKLQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5JMmMuTWF4U2VuczsgaSsrKSB7Ci0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5EZXNjID0gIlRlbXBlcmF0dXJlIjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblR5cGUgPSBTS19TRU5fVEVNUDsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gU0tfU0VOX1RFTVBfSElHSF9FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkhpZ2ggPSBTS19TRU5fVEVNUF9ISUdIX1dBUk47Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkxvdyA9IFNLX1NFTl9URU1QX0xPV19XQVJOOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IFNLX1NFTl9URU1QX0xPV19FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5SZWcgPSBMTTgwX1RFTVBfSU47Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYyA9ICJWb2x0YWdlIFBDSSI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UeXBlID0gU0tfU0VOX1ZPTFQ7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlRXJySGlnaCA9IFNLX1NFTl9QQ0lfNVZfSElHSF9FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkhpZ2ggPSBTS19TRU5fUENJXzVWX0hJR0hfV0FSTjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuTG93ID0gU0tfU0VOX1BDSV81Vl9MT1dfV0FSTjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJMb3cgPSBTS19TRU5fUENJXzVWX0xPV19FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5SZWcgPSBMTTgwX1ZUMF9JTjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5EZXNjID0gIlZvbHRhZ2UgUENJLUlPIjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblR5cGUgPSBTS19TRU5fVk9MVDsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gU0tfU0VOX1BDSV9JT181Vl9ISUdIX0VSUjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuSGlnaCA9IFNLX1NFTl9QQ0lfSU9fNVZfSElHSF9XQVJOOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZVdhcm5Mb3cgPSBTS19TRU5fUENJX0lPXzNWM19MT1dfV0FSTjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJMb3cgPSBTS19TRU5fUENJX0lPXzNWM19MT1dfRVJSOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuUmVnID0gTE04MF9WVDFfSU47Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5Jbml0ID0gU0tfU0VOX0RZTl9JTklUX1BDSV9JTzsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5EZXNjID0gIlZvbHRhZ2UgQVNJQyI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UeXBlID0gU0tfU0VOX1ZPTFQ7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlRXJySGlnaCA9IFNLX1NFTl9WRERfSElHSF9FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkhpZ2ggPSBTS19TRU5fVkREX0hJR0hfV0FSTjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuTG93ID0gU0tfU0VOX1ZERF9MT1dfV0FSTjsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJMb3cgPSBTS19TRU5fVkREX0xPV19FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5SZWcgPSBMTTgwX1ZUMl9JTjsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkJCWlmIChwUHJ0LT5QaHlUeXBlID09IFNLX1BIWV9CQ09NKSB7Ci0JCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkRlc2MgPSAiVm9sdGFnZSBQSFkgQSBQTEwiOwotCQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlRXJySGlnaCA9IFNLX1NFTl9QTExfM1YzX0hJR0hfRVJSOwotCQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkhpZ2ggPSBTS19TRU5fUExMXzNWM19ISUdIX1dBUk47Ci0JCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuTG93ID0gU0tfU0VOX1BMTF8zVjNfTE9XX1dBUk47Ci0JCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJMb3cgPSBTS19TRU5fUExMXzNWM19MT1dfRVJSOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYyA9ICJWb2x0YWdlIFBNQSI7Ci0JCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gU0tfU0VOX1BMTF8zVjNfSElHSF9FUlI7Ci0JCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuSGlnaCA9IFNLX1NFTl9QTExfM1YzX0hJR0hfV0FSTjsKLQkJCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZVdhcm5Mb3cgPSBTS19TRU5fUExMXzNWM19MT1dfV0FSTjsKLQkJCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IFNLX1NFTl9QTExfM1YzX0xPV19FUlI7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYyA9ICJWb2x0YWdlIFZBVVgiOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gU0tfU0VOX1ZBVVhfM1YzX0hJR0hfRVJSOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuSGlnaCA9IFNLX1NFTl9WQVVYXzNWM19ISUdIX1dBUk47Ci0JCQkJaWYgKHBBQy0+R0luaS5HSVZhdXhBdmFpbCkgewotCQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkxvdyA9IFNLX1NFTl9WQVVYXzNWM19MT1dfV0FSTjsKLQkJCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IFNLX1NFTl9WQVVYXzNWM19MT1dfRVJSOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IFNLX1NFTl9WQVVYXzBWX1dBUk5fRVJSOwotCQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkxvdyA9IFNLX1NFTl9WQVVYXzBWX1dBUk5fRVJSOwotCQkJCX0KLQkJCX0KLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblR5cGUgPSBTS19TRU5fVk9MVDsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblJlZyA9IExNODBfVlQzX0lOOwotCQkJYnJlYWs7Ci0JCWNhc2UgNToKLQkJCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYyA9ICJWb2x0YWdlIFBIWSAyVjUiOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gU0tfU0VOX1BIWV8yVjVfSElHSF9FUlI7Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZVdhcm5IaWdoID0gU0tfU0VOX1BIWV8yVjVfSElHSF9XQVJOOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuTG93ID0gU0tfU0VOX1BIWV8yVjVfTE9XX1dBUk47Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IFNLX1NFTl9QSFlfMlY1X0xPV19FUlI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5EZXNjID0gIlZvbHRhZ2UgQ29yZSAxVjUiOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gU0tfU0VOX0NPUkVfMVY1X0hJR0hfRVJSOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuSGlnaCA9IFNLX1NFTl9DT1JFXzFWNV9ISUdIX1dBUk47Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZVdhcm5Mb3cgPSBTS19TRU5fQ09SRV8xVjVfTE9XX1dBUk47Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IFNLX1NFTl9DT1JFXzFWNV9MT1dfRVJSOwotCQkJfQotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVHlwZSA9IFNLX1NFTl9WT0xUOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuUmVnID0gTE04MF9WVDRfSU47Ci0JCQlicmVhazsKLQkJY2FzZSA2OgotCQkJaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5EZXNjID0gIlZvbHRhZ2UgUEhZIEIgUExMIjsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkRlc2MgPSAiVm9sdGFnZSBQSFkgM1YzIjsKLQkJCX0KLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblR5cGUgPSBTS19TRU5fVk9MVDsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJIaWdoID0gU0tfU0VOX1BMTF8zVjNfSElHSF9FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkhpZ2ggPSBTS19TRU5fUExMXzNWM19ISUdIX1dBUk47Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkxvdyA9IFNLX1NFTl9QTExfM1YzX0xPV19XQVJOOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZUVyckxvdyA9IFNLX1NFTl9QTExfM1YzX0xPV19FUlI7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5SZWcgPSBMTTgwX1ZUNV9JTjsKLQkJCWJyZWFrOwotCQljYXNlIDc6Ci0JCQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkRlc2MgPSAiU3BlZWQgRmFuIjsKLQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UeXBlID0gU0tfU0VOX0ZBTjsKLQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlRXJySGlnaCA9IFNLX1NFTl9GQU5fSElHSF9FUlI7Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZVdhcm5IaWdoID0gU0tfU0VOX0ZBTl9ISUdIX1dBUk47Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuVGhyZVdhcm5Mb3cgPSBTS19TRU5fRkFOX0xPV19XQVJOOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJMb3cgPSBTS19TRU5fRkFOX0xPV19FUlI7Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuUmVnID0gTE04MF9GQU4yX0lOOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRGVzYyA9ICJWb2x0YWdlIFBIWSAyVjUiOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblR5cGUgPSBTS19TRU5fVk9MVDsKLQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlRXJySGlnaCA9IFNLX1NFTl9QSFlfMlY1X0hJR0hfRVJSOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVXYXJuSGlnaCA9IFNLX1NFTl9QSFlfMlY1X0hJR0hfV0FSTjsKLQkJCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5UaHJlV2FybkxvdyA9IFNLX1NFTl9QSFlfMlY1X0xPV19XQVJOOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblRocmVFcnJMb3cgPSBTS19TRU5fUEhZXzJWNV9MT1dfRVJSOwotCQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblJlZyA9IExNODBfVlQ2X0lOOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSU5JVCB8IFNLX0VSUkNMX1NXLAotCQkJCVNLRVJSX0kyQ19FMDAxLCBTS0VSUl9JMkNfRTAwMU1TRyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlblZhbHVlID0gMDsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRXJyRmxhZyA9IFNLX1NFTl9FUlJfT0s7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkVyckN0cyA9IDA7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkJlZ0VyclRTID0gMDsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuU3RhdGUgPSBTS19TRU5fSURMRTsKLQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuUmVhZCA9IFNrTG04MFJlYWRTZW5zb3I7Ci0JCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkRldiA9IExNODBfQUREUjsKLQl9Ci0KLSNpZm5kZWYgU0tfRElBRwotCXBBQy0+STJjLkR1bW15UmVhZHMgPSBwQUMtPkkyYy5NYXhTZW5zOwotI2VuZGlmIC8qICFTS19ESUFHICovCi0JCi0JLyogQ2xlYXIgSTJDIElSUSAqLwotCVNLX09VVDMyKElvQywgQjJfSTJDX0lSUSwgSTJDX0NMUl9JUlEpOwotCQotCS8qIE5vdyB3ZSBhcmUgSS9PIGluaXRpYWxpemVkICovCi0JcEFDLT5JMmMuSW5pdExldmVsID0gU0tfSU5JVF9JTzsKLQlyZXR1cm4oMCk7Ci19CS8qIFNrSTJjSW5pdDEgKi8KLQotCi0vKgotICogSW5pdCBsZXZlbCAyOiBTdGFydCBmaXJzdCBzZW5zb3IgcmVhZC4KLSAqLwotc3RhdGljIGludCBTa0kyY0luaXQyKAotU0tfQUMJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DKQkvKiBJL08gQ29udGV4dCAqLwotewotCWludAkJUmVhZENvbXBsZXRlOwotCVNLX1NFTlNPUgkqcFNlbjsKLQotCWlmIChwQUMtPkkyYy5Jbml0TGV2ZWwgIT0gU0tfSU5JVF9JTykgewotCQkvKiBSZUluaXQgbm90IG5lZWRlZCBpbiBJMkMgbW9kdWxlICovCi0JCS8qIEluaXQwIGFuZCBJbml0MiBub3QgcGVybWl0dGVkICovCi0JCXJldHVybigwKTsKLQl9Ci0KLQlwU2VuID0gJnBBQy0+STJjLlNlblRhYmxlW3BBQy0+STJjLkN1cnJTZW5zXTsKLQlSZWFkQ29tcGxldGUgPSBTa0kyY1JlYWRTZW5zb3IocEFDLCBJb0MsIHBTZW4pOwotCi0JaWYgKFJlYWRDb21wbGV0ZSkgewotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfSTJDX0UwMDgsIFNLRVJSX0kyQ19FMDA4TVNHKTsKLQl9Ci0KLQkvKiBOb3cgd2UgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCAqLwotCXBBQy0+STJjLkluaXRMZXZlbCA9IFNLX0lOSVRfUlVOOwotCi0JcmV0dXJuKDApOwotfQkvKiBTa0kyY0luaXQyKi8KLQotCi0vKgotICogSW5pdGlhbGl6ZSBJMkMgZGV2aWNlcwotICoKLSAqIEdldCB0aGUgZmlyc3Qgdm9sdGFnZSB2YWx1ZSBhbmQgZGlzY2FyZCBpdC4KLSAqIEdvIGludG8gdGVtcGVyYXR1cmUgcmVhZCBtb2RlLiBBIGRlZmF1bHQgcG9pbnRlciBpcyBub3Qgc2V0LgotICoKLSAqIFRoZSB0aGluZ3MgdG8gYmUgZG9uZSBkZXBlbmQgb24gdGhlIGluaXQgbGV2ZWwgaW4gdGhlIHBhcmFtZXRlciBsaXN0OgotICogTGV2ZWwgMDoKLSAqCUluaXRpYWxpemUgb25seSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLiBEbyBOT1QgYWNjZXNzIGhhcmR3YXJlLgotICogTGV2ZWwgMToKLSAqCUluaXRpYWxpemUgaGFyZHdhcmUgdGhyb3VnaCBTS19JTiAvIFNLX09VVCBjb21tYW5kcy4gRG8gTk9UIHVzZSBpbnRlcnJ1cHRzLgotICogTGV2ZWwgMjoKLSAqCUV2ZXJ5dGhpbmcgaXMgcG9zc2libGUuIEludGVycnVwdHMgbWF5IGJlIHVzZWQgZnJvbSBub3cgb24uCi0gKgotICogcmV0dXJuOgotICoJMCA9IHN1Y2Nlc3MKLSAqCW90aGVyID0gZXJyb3IuCi0gKi8KLWludAlTa0kyY0luaXQoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIEkvTyBDb250ZXh0IG5lZWRlZCBpbiBsZXZlbHMgMSBhbmQgMiAqLwotaW50CQlMZXZlbCkJLyogSW5pdCBMZXZlbCAqLwotewotCi0Jc3dpdGNoIChMZXZlbCkgewotCWNhc2UgU0tfSU5JVF9EQVRBOgotCQlyZXR1cm4oU2tJMmNJbml0MChwQUMpKTsKLQljYXNlIFNLX0lOSVRfSU86Ci0JCXJldHVybihTa0kyY0luaXQxKHBBQywgSW9DKSk7Ci0JY2FzZSBTS19JTklUX1JVTjoKLQkJcmV0dXJuKFNrSTJjSW5pdDIocEFDLCBJb0MpKTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4oMCk7Ci19CS8qIFNrSTJjSW5pdCAqLwotCi0KLSNpZm5kZWYgU0tfRElBRwotCi0vKgotICogSW50ZXJydXB0IHNlcnZpY2UgZnVuY3Rpb24gZm9yIHRoZSBJMkMgSW50ZXJmYWNlCi0gKgotICogQ2xlYXJzIHRoZSBJbnRlcnJ1cHQgc291cmNlCi0gKgotICogUmVhZHMgdGhlIHJlZ2lzdGVyIGFuZCBjaGVjayBpdCBmb3Igc2VuZGluZyBhIHRyYXAuCi0gKgotICogU3RhcnRzIHRoZSB0aW1lciBpZiBuZWNlc3NhcnkuCi0gKi8KLXZvaWQgU2tJMmNJc3IoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MpCS8qIEkvTyBDb250ZXh0ICovCi17Ci0JU0tfRVZQQVJBCVBhcmE7Ci0KLQkvKiBDbGVhciBJMkMgSVJRICovCi0JU0tfT1VUMzIoSW9DLCBCMl9JMkNfSVJRLCBJMkNfQ0xSX0lSUSk7Ci0KLQlQYXJhLlBhcmE2NCA9IDA7Ci0JU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9JMkMsIFNLX0kyQ0VWX0lSUSwgUGFyYSk7Ci19CS8qIFNrSTJjSXNyICovCi0KLQotLyoKLSAqIENoZWNrIHRoaXMgc2Vuc29ycyBWYWx1ZSBhZ2FpbnN0IHRoZSB0aHJlc2hvbGQgYW5kIHNlbmQgZXZlbnRzLgotICovCi1zdGF0aWMgdm9pZCBTa0kyY0NoZWNrU2Vuc29yKAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfU0VOU09SCSpwU2VuKQotewotCVNLX0VWUEFSQQlQYXJhTG9jYWw7Ci0JU0tfQk9PTAkJVG9vSGlnaDsJLyogSXMgc2Vuc29yIHRvbyBoaWdoPyAqLwotCVNLX0JPT0wJCVRvb0xvdzsJCS8qIElzIHNlbnNvciB0b28gbG93PyAqLwotCVNLX1U2NAkJQ3VyclRpbWU7CS8qIEN1cnJlbnQgVGltZSAqLwotCVNLX0JPT0wJCURvVHJhcFNlbmQ7CS8qIFdlIG5lZWQgdG8gc2VuZCBhIHRyYXAgKi8KLQlTS19CT09MCQlEb0VyckxvZzsJLyogV2UgbmVlZCB0byBsb2cgdGhlIGVycm9yICovCi0JU0tfQk9PTAkJSXNFcnJvcjsJLyogV2UgbmVlZCB0byBsb2cgdGhlIGVycm9yICovCi0KLQkvKiBDaGVjayBEdW1teSBSZWFkcyBmaXJzdCAqLwotCWlmIChwQUMtPkkyYy5EdW1teVJlYWRzID4gMCkgewotCQlwQUMtPkkyYy5EdW1teVJlYWRzLS07Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBHZXQgdGhlIGN1cnJlbnQgdGltZSAqLwotCUN1cnJUaW1lID0gU2tPc0dldFRpbWUocEFDKTsKLQotCS8qIFNldCBwYXJhIHRvIHRoZSBtb3N0IHVzZWZ1bCBzZXR0aW5nOiBUaGUgY3VycmVudCBzZW5zb3IuICovCi0JUGFyYUxvY2FsLlBhcmE2NCA9IChTS19VNjQpcEFDLT5JMmMuQ3VyclNlbnM7Ci0KLQkvKiBDaGVjayB0aGUgVmFsdWUgYWdhaW5zdCB0aGUgdGhyZXNob2xkcy4gRmlyc3Q6IEVycm9yIFRocmVzaG9sZHMgKi8KLQlUb29IaWdoID0gKHBTZW4tPlNlblZhbHVlID4gcFNlbi0+U2VuVGhyZUVyckhpZ2gpOwotCVRvb0xvdyA9IChwU2VuLT5TZW5WYWx1ZSA8IHBTZW4tPlNlblRocmVFcnJMb3cpOwotCQkKLQlJc0Vycm9yID0gU0tfRkFMU0U7Ci0JaWYgKFRvb0hpZ2ggfHwgVG9vTG93KSB7Ci0JCS8qIEVycm9yIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQgKi8KLQkJRG9UcmFwU2VuZCA9IFNLX1RSVUU7Ci0JCURvRXJyTG9nID0gU0tfVFJVRTsKLQotCQkvKiBOb3cgZXJyb3IgY29uZGl0aW9uIGlzIHNhdGlzZmllZCAqLwotCQlJc0Vycm9yID0gU0tfVFJVRTsKLQotCQlpZiAocFNlbi0+U2VuRXJyRmxhZyA9PSBTS19TRU5fRVJSX0VSUikgewotCQkJLyogVGhpcyBzdGF0ZSBpcyB0aGUgZm9ybWVyIG9uZSAqLwotCi0JCQkvKiBTbyBjaGVjayBmaXJzdCB3aGV0aGVyIHdlIGhhdmUgdG8gc2VuZCBhIHRyYXAgKi8KLQkJCWlmIChwU2VuLT5TZW5MYXN0RXJyVHJhcFRTICsgU0tfU0VOX0VSUl9UUl9IT0xEID4KLQkJCSAgICBDdXJyVGltZSkgewotCQkJCS8qCi0JCQkJICogRG8gTk9UIHNlbmQgdGhlIFRyYXAuIFRoZSBob2xkIGJhY2sgdGltZQotCQkJCSAqIGhhcyB0byBydW4gb3V0IGZpcnN0LgotCQkJCSAqLwotCQkJCURvVHJhcFNlbmQgPSBTS19GQUxTRTsKLQkJCX0KLQotCQkJLyogQ2hlY2sgbm93IHdoZXRoZXIgd2UgaGF2ZSB0byBsb2cgYW4gRXJyb3IgKi8KLQkJCWlmIChwU2VuLT5TZW5MYXN0RXJyTG9nVFMgKyBTS19TRU5fRVJSX0xPR19IT0xEID4KLQkJCSAgICBDdXJyVGltZSkgewotCQkJCS8qCi0JCQkJICogRG8gTk9UIGxvZyB0aGUgZXJyb3IuIFRoZSBob2xkIGJhY2sgdGltZQotCQkJCSAqIGhhcyB0byBydW4gb3V0IGZpcnN0LgotCQkJCSAqLwotCQkJCURvRXJyTG9nID0gU0tfRkFMU0U7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBXZSBjYW1lIGZyb20gYSBkaWZmZXJlbnQgc3RhdGUgLT4gU2V0IEJlZ2luIFRpbWUgU3RhbXAgKi8KLQkJCXBTZW4tPlNlbkJlZ0VyclRTID0gQ3VyclRpbWU7Ci0JCQlwU2VuLT5TZW5FcnJGbGFnID0gU0tfU0VOX0VSUl9FUlI7Ci0JCX0KLQotCQlpZiAoRG9UcmFwU2VuZCkgewotCQkJLyogU2V0IGN1cnJlbnQgVGltZSAqLwotCQkJcFNlbi0+U2VuTGFzdEVyclRyYXBUUyA9IEN1cnJUaW1lOwotCQkJcFNlbi0+U2VuRXJyQ3RzKys7Ci0KLQkJCS8qIFF1ZXVlIFBOTUkgRXZlbnQgKi8KLQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUE5NSSwgKFRvb0hpZ2ggPwotCQkJCVNLX1BOTUlfRVZUX1NFTl9FUlJfVVBQIDoKLQkJCQlTS19QTk1JX0VWVF9TRU5fRVJSX0xPVyksCi0JCQkJUGFyYUxvY2FsKTsKLQkJfQotCi0JCWlmIChEb0VyckxvZykgewotCQkJLyogU2V0IGN1cnJlbnQgVGltZSAqLwotCQkJcFNlbi0+U2VuTGFzdEVyckxvZ1RTID0gQ3VyclRpbWU7Ci0KLQkJCWlmIChwU2VuLT5TZW5UeXBlID09IFNLX1NFTl9URU1QKSB7Ci0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9JMkNfRTAxMSwgU0tFUlJfSTJDX0UwMTFNU0cpOwotCQkJfQotCQkJZWxzZSBpZiAocFNlbi0+U2VuVHlwZSA9PSBTS19TRU5fVk9MVCkgewotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfSTJDX0UwMTIsIFNLRVJSX0kyQ19FMDEyTVNHKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfSTJDX0UwMTUsIFNLRVJSX0kyQ19FMDE1TVNHKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIENoZWNrIHRoZSBWYWx1ZSBhZ2FpbnN0IHRoZSB0aHJlc2hvbGRzICovCi0JLyogMm5kOiBXYXJuaW5nIHRocmVzaG9sZHMgKi8KLQlUb29IaWdoID0gKHBTZW4tPlNlblZhbHVlID4gcFNlbi0+U2VuVGhyZVdhcm5IaWdoKTsKLQlUb29Mb3cgPSAocFNlbi0+U2VuVmFsdWUgPCBwU2VuLT5TZW5UaHJlV2Fybkxvdyk7Ci0JCQotCWlmICghSXNFcnJvciAmJiAoVG9vSGlnaCB8fCBUb29Mb3cpKSB7Ci0JCS8qIEVycm9yIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQgKi8KLQkJRG9UcmFwU2VuZCA9IFNLX1RSVUU7Ci0JCURvRXJyTG9nID0gU0tfVFJVRTsKLQotCQlpZiAocFNlbi0+U2VuRXJyRmxhZyA9PSBTS19TRU5fRVJSX1dBUk4pIHsKLQkJCS8qIFRoaXMgc3RhdGUgaXMgdGhlIGZvcm1lciBvbmUgKi8KLQotCQkJLyogU28gY2hlY2sgZmlyc3Qgd2hldGhlciB3ZSBoYXZlIHRvIHNlbmQgYSB0cmFwICovCi0JCQlpZiAocFNlbi0+U2VuTGFzdFdhcm5UcmFwVFMgKyBTS19TRU5fV0FSTl9UUl9IT0xEID4gQ3VyclRpbWUpIHsKLQkJCQkvKgotCQkJCSAqIERvIE5PVCBzZW5kIHRoZSBUcmFwLiBUaGUgaG9sZCBiYWNrIHRpbWUKLQkJCQkgKiBoYXMgdG8gcnVuIG91dCBmaXJzdC4KLQkJCQkgKi8KLQkJCQlEb1RyYXBTZW5kID0gU0tfRkFMU0U7Ci0JCQl9Ci0KLQkJCS8qIENoZWNrIG5vdyB3aGV0aGVyIHdlIGhhdmUgdG8gbG9nIGFuIEVycm9yICovCi0JCQlpZiAocFNlbi0+U2VuTGFzdFdhcm5Mb2dUUyArIFNLX1NFTl9XQVJOX0xPR19IT0xEID4gQ3VyclRpbWUpIHsKLQkJCQkvKgotCQkJCSAqIERvIE5PVCBsb2cgdGhlIGVycm9yLiBUaGUgaG9sZCBiYWNrIHRpbWUKLQkJCQkgKiBoYXMgdG8gcnVuIG91dCBmaXJzdC4KLQkJCQkgKi8KLQkJCQlEb0VyckxvZyA9IFNLX0ZBTFNFOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJLyogV2UgY2FtZSBmcm9tIGEgZGlmZmVyZW50IHN0YXRlIC0+IFNldCBCZWdpbiBUaW1lIFN0YW1wICovCi0JCQlwU2VuLT5TZW5CZWdXYXJuVFMgPSBDdXJyVGltZTsKLQkJCXBTZW4tPlNlbkVyckZsYWcgPSBTS19TRU5fRVJSX1dBUk47Ci0JCX0KLQotCQlpZiAoRG9UcmFwU2VuZCkgewotCQkJLyogU2V0IGN1cnJlbnQgVGltZSAqLwotCQkJcFNlbi0+U2VuTGFzdFdhcm5UcmFwVFMgPSBDdXJyVGltZTsKLQkJCXBTZW4tPlNlbldhcm5DdHMrKzsKLQotCQkJLyogUXVldWUgUE5NSSBFdmVudCAqLwotCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9QTk1JLCAoVG9vSGlnaCA/Ci0JCQkJU0tfUE5NSV9FVlRfU0VOX1dBUl9VUFAgOgotCQkJCVNLX1BOTUlfRVZUX1NFTl9XQVJfTE9XKSwKLQkJCQlQYXJhTG9jYWwpOwotCQl9Ci0KLQkJaWYgKERvRXJyTG9nKSB7Ci0JCQkvKiBTZXQgY3VycmVudCBUaW1lICovCi0JCQlwU2VuLT5TZW5MYXN0V2FybkxvZ1RTID0gQ3VyclRpbWU7Ci0KLQkJCWlmIChwU2VuLT5TZW5UeXBlID09IFNLX1NFTl9URU1QKSB7Ci0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9JMkNfRTAwOSwgU0tFUlJfSTJDX0UwMDlNU0cpOwotCQkJfQotCQkJZWxzZSBpZiAocFNlbi0+U2VuVHlwZSA9PSBTS19TRU5fVk9MVCkgewotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfSTJDX0UwMTAsIFNLRVJSX0kyQ19FMDEwTVNHKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9IVywgU0tFUlJfSTJDX0UwMTQsIFNLRVJSX0kyQ19FMDE0TVNHKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIENoZWNrIGZvciBOTyBlcnJvciBhdCBhbGwgKi8KLQlpZiAoIUlzRXJyb3IgJiYgIVRvb0hpZ2ggJiYgIVRvb0xvdykgewotCQkvKiBTZXQgby5rLiBTdGF0dXMgaWYgbm8gZXJyb3IgYW5kIG5vIHdhcm5pbmcgY29uZGl0aW9uICovCi0JCXBTZW4tPlNlbkVyckZsYWcgPSBTS19TRU5fRVJSX09LOwotCX0KLQotCS8qIEVuZCBvZiBjaGVjayBhZ2FpbnN0IHRoZSB0aHJlc2hvbGRzICovCi0KLQkvKiBCdWcgZml4IEFGOiAxNi5BdWcuMjAwMTogQ29ycmVjdCB0aGUgaW5pdCBiYXNlCi0JICogb2YgTE04MCBzZW5zb3IuCi0JICovCi0JaWYgKHBTZW4tPlNlbkluaXQgPT0gU0tfU0VOX0RZTl9JTklUX1BDSV9JTykgewotCi0gICAgICAgIHBTZW4tPlNlbkluaXQgPSBTS19TRU5fRFlOX0lOSVRfTk9ORTsKLQotCQlpZiAocFNlbi0+U2VuVmFsdWUgPiBTS19TRU5fUENJX0lPX1JBTkdFX0xJTUlURVIpIHsKLQkJCS8qIDVWIFBDSS1JTyBWb2x0YWdlICovCi0JCQlwU2VuLT5TZW5UaHJlV2FybkxvdyA9IFNLX1NFTl9QQ0lfSU9fNVZfTE9XX1dBUk47Ci0JCQlwU2VuLT5TZW5UaHJlRXJyTG93ID0gU0tfU0VOX1BDSV9JT181Vl9MT1dfRVJSOwotCQl9Ci0JCWVsc2UgewotCQkJLyogMy4zViBQQ0ktSU8gVm9sdGFnZSAqLwotCQkJcFNlbi0+U2VuVGhyZVdhcm5IaWdoID0gU0tfU0VOX1BDSV9JT18zVjNfSElHSF9XQVJOOwotCQkJcFNlbi0+U2VuVGhyZUVyckhpZ2ggPSBTS19TRU5fUENJX0lPXzNWM19ISUdIX0VSUjsKLQkJfQotCX0KLQkKLSNpZmRlZiBURVNUX09OTFkKLSAgICAvKiBEeW5hbWljIHRocmVzaG9sZHMgYWxzbyBmb3IgVkFVWCBvZiBMTTgwIHNlbnNvciAqLwotCWlmIChwU2VuLT5TZW5Jbml0ID09IFNLX1NFTl9EWU5fSU5JVF9WQVVYKSB7Ci0KLSAgICAgICAgcFNlbi0+U2VuSW5pdCA9IFNLX1NFTl9EWU5fSU5JVF9OT05FOwotCi0JCS8qIDMuM1YgVkFVWCBWb2x0YWdlICovCi0JCWlmIChwU2VuLT5TZW5WYWx1ZSA+IFNLX1NFTl9WQVVYX1JBTkdFX0xJTUlURVIpIHsKLQkJCXBTZW4tPlNlblRocmVXYXJuTG93ID0gU0tfU0VOX1ZBVVhfM1YzX0xPV19XQVJOOwotCQkJcFNlbi0+U2VuVGhyZUVyckxvdyA9IFNLX1NFTl9WQVVYXzNWM19MT1dfRVJSOwotCQl9Ci0JCS8qIDBWIFZBVVggVm9sdGFnZSAqLwotCQllbHNlIHsKLQkJCXBTZW4tPlNlblRocmVXYXJuSGlnaCA9IFNLX1NFTl9WQVVYXzBWX1dBUk5fRVJSOwotCQkJcFNlbi0+U2VuVGhyZUVyckhpZ2ggPSBTS19TRU5fVkFVWF8wVl9XQVJOX0VSUjsKLQkJfQotCX0KLQotCS8qCi0JICogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGU6Ci0JICogVGhlIFZJTyBUaHJlc2hvbGRzIG5lZWQgYWRhcHRpb24KLQkgKi8KLQlpZiAoIXBTZW4tPlNlbkluaXQgJiYgcFNlbi0+U2VuUmVnID09IExNODBfVlQxX0lOICYmCi0JICAgICBwU2VuLT5TZW5WYWx1ZSA+IFNLX1NFTl9XQVJOTE9XMkMgJiYKLQkgICAgIHBTZW4tPlNlblZhbHVlIDwgU0tfU0VOX1dBUk5ISUdIMikgewotCQlwU2VuLT5TZW5UaHJlRXJyTG93ID0gU0tfU0VOX0VSUkxPVzJDOwotCQlwU2VuLT5TZW5UaHJlV2FybkxvdyA9IFNLX1NFTl9XQVJOTE9XMkM7Ci0JCXBTZW4tPlNlbkluaXQgPSBTS19UUlVFOwotCX0KLQotCWlmICghcFNlbi0+U2VuSW5pdCAmJiBwU2VuLT5TZW5SZWcgPT0gTE04MF9WVDFfSU4gJiYKLQkgICAgIHBTZW4tPlNlblZhbHVlID4gU0tfU0VOX1dBUk5MT1cyICYmCi0JICAgICBwU2VuLT5TZW5WYWx1ZSA8IFNLX1NFTl9XQVJOSElHSDJDKSB7Ci0JCXBTZW4tPlNlblRocmVFcnJIaWdoID0gU0tfU0VOX0VSUkhJR0gyQzsKLQkJcFNlbi0+U2VuVGhyZVdhcm5IaWdoID0gU0tfU0VOX1dBUk5ISUdIMkM7Ci0JCXBTZW4tPlNlbkluaXQgPSBTS19UUlVFOwotCX0KLSNlbmRpZgotCi0JaWYgKHBTZW4tPlNlbkluaXQgIT0gU0tfU0VOX0RZTl9JTklUX05PTkUpIHsKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX0hXLCBTS0VSUl9JMkNfRTAxMywgU0tFUlJfSTJDX0UwMTNNU0cpOwotCX0KLX0JLyogU2tJMmNDaGVja1NlbnNvciAqLwotCi0KLS8qCi0gKiBUaGUgb25seSBFdmVudCB0byBiZSBzZXJ2ZWQgaXMgdGhlIHRpbWVvdXQgZXZlbnQKLSAqCi0gKi8KLWludAlTa0kyY0V2ZW50KAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19VMzIJCUV2ZW50LAkvKiBNb2R1bGUgc3BlY2lmaWMgRXZlbnQgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBFdmVudCBzcGVjaWZpYyBQYXJhbWV0ZXIgKi8KLXsKLQlpbnQJCQlSZWFkQ29tcGxldGU7Ci0JU0tfU0VOU09SCSpwU2VuOwotCVNLX1UzMgkJVGltZTsKLQlTS19FVlBBUkEJUGFyYUxvY2FsOwotCWludAkJCWk7Ci0KLQkvKiBOZXcgY2FzZTogbm8gc2Vuc29ycyAqLwotCWlmIChwQUMtPkkyYy5NYXhTZW5zID09IDApIHsKLQkJcmV0dXJuKDApOwotCX0KLQotCXN3aXRjaCAoRXZlbnQpIHsKLQljYXNlIFNLX0kyQ0VWX0lSUToKLQkJcFNlbiA9ICZwQUMtPkkyYy5TZW5UYWJsZVtwQUMtPkkyYy5DdXJyU2Vuc107Ci0JCVJlYWRDb21wbGV0ZSA9IFNrSTJjUmVhZFNlbnNvcihwQUMsIElvQywgcFNlbik7Ci0KLQkJaWYgKFJlYWRDb21wbGV0ZSkgewotCQkJLyogQ2hlY2sgc2Vuc29yIGFnYWluc3QgZGVmaW5lZCB0aHJlc2hvbGRzICovCi0JCQlTa0kyY0NoZWNrU2Vuc29yKHBBQywgcFNlbik7Ci0KLQkJCS8qIEluY3JlbWVudCBDdXJyZW50IHNlbnNvciBhbmQgc2V0IGFwcHJvcHJpYXRlIFRpbWVvdXQgKi8KLQkJCXBBQy0+STJjLkN1cnJTZW5zKys7Ci0JCQlpZiAocEFDLT5JMmMuQ3VyclNlbnMgPj0gcEFDLT5JMmMuTWF4U2VucykgewotCQkJCXBBQy0+STJjLkN1cnJTZW5zID0gMDsKLQkJCQlUaW1lID0gU0tfSTJDX1RJTV9MT05HOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJVGltZSA9IFNLX0kyQ19USU1fU0hPUlQ7Ci0JCQl9Ci0KLQkJCS8qIFN0YXJ0IFRpbWVyICovCi0JCQlQYXJhTG9jYWwuUGFyYTY0ID0gKFNLX1U2NCkwOwotCi0JCQlwQUMtPkkyYy5UaW1lck1vZGUgPSBTS19USU1FUl9ORVdfR0FVR0lORzsKLQkJCQotCQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5JMmMuU2VuVGltZXIsIFRpbWUsCi0JCQkJU0tHRV9JMkMsIFNLX0kyQ0VWX1RJTSwgUGFyYUxvY2FsKTsKLQkJfQotICAgICAgICBlbHNlIHsKLQkJCS8qIFN0YXJ0IFRpbWVyICovCi0JCQlQYXJhTG9jYWwuUGFyYTY0ID0gKFNLX1U2NCkwOwotCi0JCQlwQUMtPkkyYy5UaW1lck1vZGUgPSBTS19USU1FUl9XQVRDSF9TTTsKLQotICAgICAgICAgICAgU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5JMmMuU2VuVGltZXIsIFNLX0kyQ19USU1fV0FUQ0gsCi0JCQkJU0tHRV9JMkMsIFNLX0kyQ0VWX1RJTSwgUGFyYUxvY2FsKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNLX0kyQ0VWX1RJTToKLQkJaWYgKHBBQy0+STJjLlRpbWVyTW9kZSA9PSBTS19USU1FUl9ORVdfR0FVR0lORykgewotCi0JCQlQYXJhTG9jYWwuUGFyYTY0ID0gKFNLX1U2NCkwOwotCQkJU2tUaW1lclN0b3AocEFDLCBJb0MsICZwQUMtPkkyYy5TZW5UaW1lcik7Ci0KLQkJCXBTZW4gPSAmcEFDLT5JMmMuU2VuVGFibGVbcEFDLT5JMmMuQ3VyclNlbnNdOwotCQkJUmVhZENvbXBsZXRlID0gU2tJMmNSZWFkU2Vuc29yKHBBQywgSW9DLCBwU2VuKTsKLQotCQkJaWYgKFJlYWRDb21wbGV0ZSkgewotCQkJCS8qIENoZWNrIHNlbnNvciBhZ2FpbnN0IGRlZmluZWQgdGhyZXNob2xkcyAqLwotCQkJCVNrSTJjQ2hlY2tTZW5zb3IocEFDLCBwU2VuKTsKLQotCQkJCS8qIEluY3JlbWVudCBDdXJyZW50IHNlbnNvciBhbmQgc2V0IGFwcHJvcHJpYXRlIFRpbWVvdXQgKi8KLQkJCQlwQUMtPkkyYy5DdXJyU2VucysrOwotCQkJCWlmIChwQUMtPkkyYy5DdXJyU2VucyA9PSBwQUMtPkkyYy5NYXhTZW5zKSB7Ci0JCQkJCXBBQy0+STJjLkN1cnJTZW5zID0gMDsKLQkJCQkJVGltZSA9IFNLX0kyQ19USU1fTE9ORzsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCVRpbWUgPSBTS19JMkNfVElNX1NIT1JUOwotCQkJCX0KLQotCQkJCS8qIFN0YXJ0IFRpbWVyICovCi0JCQkJUGFyYUxvY2FsLlBhcmE2NCA9IChTS19VNjQpMDsKLQotCQkJCXBBQy0+STJjLlRpbWVyTW9kZSA9IFNLX1RJTUVSX05FV19HQVVHSU5HOwotCi0JCQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5JMmMuU2VuVGltZXIsIFRpbWUsCi0JCQkJCVNLR0VfSTJDLCBTS19JMkNFVl9USU0sIFBhcmFMb2NhbCk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwU2VuID0gJnBBQy0+STJjLlNlblRhYmxlW3BBQy0+STJjLkN1cnJTZW5zXTsKLQkJCXBTZW4tPlNlbkVyckZsYWcgPSBTS19TRU5fRVJSX0ZBVUxUWTsKLQkJCVNLX0kyQ19TVE9QKElvQyk7Ci0KLQkJCS8qIEluY3JlbWVudCBDdXJyZW50IHNlbnNvciBhbmQgc2V0IGFwcHJvcHJpYXRlIFRpbWVvdXQgKi8KLQkJCXBBQy0+STJjLkN1cnJTZW5zKys7Ci0JCQlpZiAocEFDLT5JMmMuQ3VyclNlbnMgPT0gcEFDLT5JMmMuTWF4U2VucykgewotCQkJCXBBQy0+STJjLkN1cnJTZW5zID0gMDsKLQkJCQlUaW1lID0gU0tfSTJDX1RJTV9MT05HOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJVGltZSA9IFNLX0kyQ19USU1fU0hPUlQ7Ci0JCQl9Ci0KLQkJCS8qIFN0YXJ0IFRpbWVyICovCi0JCQlQYXJhTG9jYWwuUGFyYTY0ID0gKFNLX1U2NCkwOwotCi0JCQlwQUMtPkkyYy5UaW1lck1vZGUgPSBTS19USU1FUl9ORVdfR0FVR0lORzsKLQotCQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5JMmMuU2VuVGltZXIsIFRpbWUsCi0JCQkJU0tHRV9JMkMsIFNLX0kyQ0VWX1RJTSwgUGFyYUxvY2FsKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNLX0kyQ0VWX0NMRUFSOgotCQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYX1NFTlNPUlM7IGkrKykgewotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuRXJyRmxhZyA9IFNLX1NFTl9FUlJfT0s7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5FcnJDdHMgPSAwOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuV2FybkN0cyA9IDA7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5CZWdFcnJUUyA9IDA7Ci0JCQlwQUMtPkkyYy5TZW5UYWJsZVtpXS5TZW5CZWdXYXJuVFMgPSAwOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuTGFzdEVyclRyYXBUUyA9IChTS19VNjQpMDsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkxhc3RFcnJMb2dUUyA9IChTS19VNjQpMDsKLQkJCXBBQy0+STJjLlNlblRhYmxlW2ldLlNlbkxhc3RXYXJuVHJhcFRTID0gKFNLX1U2NCkwOwotCQkJcEFDLT5JMmMuU2VuVGFibGVbaV0uU2VuTGFzdFdhcm5Mb2dUUyA9IChTS19VNjQpMDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX0kyQ19FMDA2LCBTS0VSUl9JMkNfRTAwNk1TRyk7Ci0JfQotCi0JcmV0dXJuKDApOwotfQkvKiBTa0kyY0V2ZW50Ki8KLQotI2VuZGlmIC8qICFTS19ESUFHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrbG04MC5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2xtODAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIwNGY1Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrbG04MC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza2xtODAuYwotICogUHJvamVjdDoJR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVycywgVFdTSS1Nb2R1bGUKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS4yMiAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8xMC8yMCAwOTowODoyMSAkCi0gKiBQdXJwb3NlOglGdW5jdGlvbnMgdG8gYWNjZXNzIFZvbHRhZ2UgYW5kIFRlbXBlcmF0dXJlIFNlbnNvciAoTE04MCkKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0LgotICoJKEMpQ29weXJpZ2h0IDIwMDItMjAwMyBNYXJ2ZWxsLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiIHdpdGhvdXQgd2FycmFudHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLQlMTTgwIGZ1bmN0aW9ucwotKi8KLSNpZiAoZGVmaW5lZChERUJVRykgfHwgKCghZGVmaW5lZChMSU5UKSkgJiYgKCFkZWZpbmVkKFNLX1NMSU0pKSkpCi1zdGF0aWMgY29uc3QgY2hhciBTeXNLb25uZWN0RmlsZUlkW10gPQotCSJAKCMpICRJZDogc2tsbTgwLmMsdiAxLjIyIDIwMDMvMTAvMjAgMDk6MDg6MjEgcnNjaG1pZHQgRXhwICQgKEMpIE1hcnZlbGwuICI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgImgvc2tkcnYxc3QuaCIJCS8qIERyaXZlciBTcGVjaWZpYyBEZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgImgvbG04MC5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIJCS8qIEFkYXB0ZXIgQ29udHJvbC0gYW5kIERyaXZlciBzcGVjaWZpYyBEZWYuICovCi0KLSNkZWZpbmUJQlJFQUtfT1JfV0FJVChwQUMsSW9DLEV2ZW50KQlicmVhawotCi0vKgotICogcmVhZCBhIHNlbnNvcnMgdmFsdWUgKExNODAgc3BlY2lmaWMpCi0gKgotICogVGhpcyBmdW5jdGlvbiByZWFkcyBhIHNlbnNvcnMgdmFsdWUgZnJvbSB0aGUgSTJDIHNlbnNvciBjaGlwIExNODAuCi0gKiBUaGUgc2Vuc29yIGlzIGRlZmluZWQgYnkgaXRzIGluZGV4IGludG8gdGhlIHNlbnNvcnMgZGF0YWJhc2UgaW4gdGhlIHN0cnVjdAotICogcEFDIHBvaW50cyB0by4KLSAqCi0gKiBSZXR1cm5zCTEgaWYgdGhlIHJlYWQgaXMgY29tcGxldGVkCi0gKgkJMCBpZiB0aGUgcmVhZCBtdXN0IGJlIGNvbnRpbnVlZCAoSTJDIEJ1cyBzdGlsbCBhbGxvY2F0ZWQpCi0gKi8KLWludCBTa0xtODBSZWFkU2Vuc29yKAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0IG5lZWRlZCBpbiBsZXZlbCAxIGFuZCAyICovCi1TS19TRU5TT1IJKnBTZW4pCS8qIFNlbnNvciB0byBiZSByZWFkICovCi17Ci0JU0tfSTMyCQlWYWx1ZTsKLQotCXN3aXRjaCAocFNlbi0+U2VuU3RhdGUpIHsKLQljYXNlIFNLX1NFTl9JRExFOgotCQkvKiBTZW5kIGFkZHJlc3MgdG8gQUREUiByZWdpc3RlciAqLwotCQlTS19JMkNfQ1RMKElvQywgSTJDX1JFQUQsIHBTZW4tPlNlbkRldiwgSTJDXzAyNUtfREVWLCBwU2VuLT5TZW5SZWcsIDApOwotCi0JCXBTZW4tPlNlblN0YXRlID0gU0tfU0VOX1ZBTFVFIDsKLQkJQlJFQUtfT1JfV0FJVChwQUMsIElvQywgSTJDX1JFQUQpOwotCQotCWNhc2UgU0tfU0VOX1ZBTFVFOgotCQkvKiBSZWFkIHZhbHVlIGZyb20gZGF0YSByZWdpc3RlciAqLwotCQlTS19JTjMyKElvQywgQjJfSTJDX0RBVEEsICgoU0tfVTMyICopJlZhbHVlKSk7Ci0JCQotCQlWYWx1ZSAmPSAweGZmOyAvKiBvbmx5IGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgaXMgdmFsaWQgKi8KLQotCQkvKiBEbyBOT1QgY2hlY2sgdGhlIFZhbHVlIGFnYWluc3QgdGhlIHRocmVzaG9sZHMgKi8KLQkJLyogQ2hlY2tpbmcgaXMgZG9uZSBpbiB0aGUgY2FsbGluZyBpbnN0YW5jZSAqLwotCi0JCWlmIChwU2VuLT5TZW5UeXBlID09IFNLX1NFTl9WT0xUKSB7Ci0JCQkvKiBWb2x0YWdlIHNlbnNvciAqLwotCQkJcFNlbi0+U2VuVmFsdWUgPSBWYWx1ZSAqIFNLX0xNODBfVlRfTFNCOwotCQkJcFNlbi0+U2VuU3RhdGUgPSBTS19TRU5fSURMRSA7Ci0JCQlyZXR1cm4oMSk7Ci0JCX0KLQotCQlpZiAocFNlbi0+U2VuVHlwZSA9PSBTS19TRU5fRkFOKSB7Ci0JCQlpZiAoVmFsdWUgIT0gMCAmJiBWYWx1ZSAhPSAweGZmKSB7Ci0JCQkJLyogRmFuIHNwZWVkIGNvdW50ZXIgKi8KLQkJCQlwU2VuLT5TZW5WYWx1ZSA9IFNLX0xNODBfRkFOX0ZBS1RPUi9WYWx1ZTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8qIEluZGljYXRlIEZhbiBlcnJvciAqLwotCQkJCXBTZW4tPlNlblZhbHVlID0gMDsKLQkJCX0KLQkJCXBTZW4tPlNlblN0YXRlID0gU0tfU0VOX0lETEUgOwotCQkJcmV0dXJuKDEpOwotCQl9Ci0KLQkJLyogRmlyc3Q6IGNvcnJlY3QgdGhlIHZhbHVlOiBpdCBtaWdodCBiZSBuZWdhdGl2ZSAqLwotCQlpZiAoKFZhbHVlICYgMHg4MCkgIT0gMCkgewotCQkJLyogVmFsdWUgaXMgbmVnYXRpdmUgKi8KLQkJCVZhbHVlID0gVmFsdWUgLSAyNTY7Ci0JCX0KLQotCQkvKiBXZSBoYXZlIGEgdGVtcGVyYXR1cmUgc2Vuc29yIGFuZCBuZWVkIHRvIGdldCB0aGUgc2lnbmVkIGV4dGVuc2lvbi4KLQkJICogRm9yIG5vdyB3ZSBnZXQgdGhlIGV4dGVuc2lvbiBmcm9tIHRoZSBsYXN0IHJlYWRpbmcsIHNvIGluIHRoZSBub3JtYWwKLQkJICogY2FzZSB3ZSB3b24ndCBzZWUgZmxpY2tlcmluZyB0ZW1wZXJhdHVyZXMuCi0JCSAqLwotCQlwU2VuLT5TZW5WYWx1ZSA9IChWYWx1ZSAqIFNLX0xNODBfVEVNUF9MU0IpICsKLQkJCShwU2VuLT5TZW5WYWx1ZSAlIFNLX0xNODBfVEVNUF9MU0IpOwotCi0JCS8qIFNlbmQgYWRkcmVzcyB0byBBRERSIHJlZ2lzdGVyICovCi0JCVNLX0kyQ19DVEwoSW9DLCBJMkNfUkVBRCwgcFNlbi0+U2VuRGV2LCBJMkNfMDI1S19ERVYsIExNODBfVEVNUF9DVFJMLCAwKTsKLQotCQlwU2VuLT5TZW5TdGF0ZSA9IFNLX1NFTl9WQUxFWFQgOwotCQlCUkVBS19PUl9XQUlUKHBBQywgSW9DLCBJMkNfUkVBRCk7Ci0JCi0JY2FzZSBTS19TRU5fVkFMRVhUOgotCQkvKiBSZWFkIHZhbHVlIGZyb20gZGF0YSByZWdpc3RlciAqLwotCQlTS19JTjMyKElvQywgQjJfSTJDX0RBVEEsICgoU0tfVTMyICopJlZhbHVlKSk7Ci0JCVZhbHVlICY9IExNODBfVEVNUF9MU0JfOTsgLyogb25seSBiaXQgNyBpcyB2YWxpZCAqLwotCi0JCS8qIGN1dCB0aGUgTFNCIGJpdCAqLwotCQlwU2VuLT5TZW5WYWx1ZSA9ICgocFNlbi0+U2VuVmFsdWUgLyBTS19MTTgwX1RFTVBfTFNCKSAqCi0JCQlTS19MTTgwX1RFTVBfTFNCKTsKLQotCQlpZiAocFNlbi0+U2VuVmFsdWUgPCAwKSB7Ci0JCQkvKiBWYWx1ZSBuZWdhdGl2ZTogVGhlIGJpdCB2YWx1ZSBtdXN0IGJlIHN1YnRyYWN0ZWQgKi8KLQkJCXBTZW4tPlNlblZhbHVlIC09ICgoVmFsdWUgPj4gNykgKiBTS19MTTgwX1RFTVBFWFRfTFNCKTsKLQkJfQotCQllbHNlIHsKLQkJCS8qIFZhbHVlIHBvc2l0aXZlOiBUaGUgYml0IHZhbHVlIG11c3QgYmUgYWRkZWQgKi8KLQkJCXBTZW4tPlNlblZhbHVlICs9ICgoVmFsdWUgPj4gNykgKiBTS19MTTgwX1RFTVBFWFRfTFNCKTsKLQkJfQotCi0JCXBTZW4tPlNlblN0YXRlID0gU0tfU0VOX0lETEUgOwotCQlyZXR1cm4oMSk7Ci0JCi0JZGVmYXVsdDoKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9JMkNfRTAwNywgU0tFUlJfSTJDX0UwMDdNU0cpOwotCQlyZXR1cm4oMSk7Ci0JfQotCi0JLyogTm90IGNvbXBsZXRlZCAqLwotCXJldHVybigwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za3F1ZXVlLmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrcXVldWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI3NWI0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrcXVldWUuYworKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2txdWV1ZS5jCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBFdmVudCBTY2hlZHVsZXIgTW9kdWxlCi0gKiBWZXJzaW9uOgkkUmV2aXNpb246IDEuMjAgJAotICogRGF0ZToJJERhdGU6IDIwMDMvMDkvMTYgMTM6NDQ6MDAgJAotICogUHVycG9zZToJTWFuYWdlbWVudCBvZiBhbiBldmVudCBxdWV1ZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qCi0gKglFdmVudCBxdWV1ZSBhbmQgZGlzcGF0Y2hlcgotICovCi0jaWYgKGRlZmluZWQoREVCVUcpIHx8ICgoIWRlZmluZWQoTElOVCkpICYmICghZGVmaW5lZChTS19TTElNKSkpKQotc3RhdGljIGNvbnN0IGNoYXIgU3lzS29ubmVjdEZpbGVJZFtdID0KLQkiQCgjKSAkSWQ6IHNrcXVldWUuYyx2IDEuMjAgMjAwMy8wOS8xNiAxMzo0NDowMCByc2NobWlkdCBFeHAgJCAoQykgTWFydmVsbC4iOwotI2VuZGlmCi0KLSNpbmNsdWRlICJoL3NrZHJ2MXN0LmgiCQkvKiBEcml2ZXIgU3BlY2lmaWMgRGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJoL3NrcXVldWUuaCIJCS8qIFF1ZXVlIERlZmluaXRpb25zICovCi0jaW5jbHVkZSAiaC9za2RydjJuZC5oIgkJLyogQWRhcHRlciBDb250cm9sLSBhbmQgRHJpdmVyIHNwZWNpZmljIERlZi4gKi8KLQotI2lmZGVmIF9fQzJNQU5fXwotLyoKLQlFdmVudCBxdWV1ZSBtYW5hZ2VtZW50LgotCi0JR2VuZXJhbCBEZXNjcmlwdGlvbjoKLQotICovCi1pbnRybygpCi17fQotI2VuZGlmCi0KLSNkZWZpbmUgUFJJTlRGKGEsYixjKQotCi0vKgotICogaW5pdCBldmVudCBxdWV1ZSBtYW5hZ2VtZW50Ci0gKgotICogTXVzdCBiZSBjYWxsZWQgZHVyaW5nIGluaXQgbGV2ZWwgMC4KLSAqLwotdm9pZAlTa0V2ZW50SW5pdCgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvYywJLyogSU8gY29udGV4dCAqLwotaW50CQlMZXZlbCkJLyogSW5pdCBsZXZlbCAqLwotewotCXN3aXRjaCAoTGV2ZWwpIHsKLQljYXNlIFNLX0lOSVRfREFUQToKLQkJcEFDLT5FdmVudC5FdlB1dCA9IHBBQy0+RXZlbnQuRXZHZXQgPSBwQUMtPkV2ZW50LkV2UXVldWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoKLSAqIGFkZCBldmVudCB0byBxdWV1ZQotICovCi12b2lkCVNrRXZlbnRRdWV1ZSgKLVNLX0FDCQkqcEFDLAkvKiBBZGFwdGVycyBjb250ZXh0ICovCi1TS19VMzIJCUNsYXNzLAkvKiBFdmVudCBDbGFzcyAqLwotU0tfVTMyCQlFdmVudCwJLyogRXZlbnQgdG8gYmUgcXVldWVkICovCi1TS19FVlBBUkEJUGFyYSkJLyogRXZlbnQgcGFyYW1ldGVyICovCi17Ci0JcEFDLT5FdmVudC5FdlB1dC0+Q2xhc3MgPSBDbGFzczsKLQlwQUMtPkV2ZW50LkV2UHV0LT5FdmVudCA9IEV2ZW50OwotCXBBQy0+RXZlbnQuRXZQdXQtPlBhcmEgPSBQYXJhOwotCQotCWlmICgrK3BBQy0+RXZlbnQuRXZQdXQgPT0gJnBBQy0+RXZlbnQuRXZRdWV1ZVtTS19NQVhfRVZFTlRdKQotCQlwQUMtPkV2ZW50LkV2UHV0ID0gcEFDLT5FdmVudC5FdlF1ZXVlOwotCi0JaWYgKHBBQy0+RXZlbnQuRXZQdXQgPT0gcEFDLT5FdmVudC5FdkdldCkgewotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfTk9SRVMsIFNLRVJSX1FfRTAwMSwgU0tFUlJfUV9FMDAxTVNHKTsKLQl9Ci19Ci0KLS8qCi0gKiBldmVudCBkaXNwYXRjaGVyCi0gKgl3aGlsZSBldmVudCBxdWV1ZSBpcyBub3QgZW1wdHkKLSAqCQlnZXQgZXZlbnQgZnJvbSBxdWV1ZQotICoJCXNlbmQgY29tbWFuZCB0byBzdGF0ZSBtYWNoaW5lCi0gKgllbmQKLSAqCXJldHVybiBlcnJvciByZXBvcnRlZCBieSBpbmRpdmlkdWFsIEV2ZW50IGZ1bmN0aW9uCi0gKgkJMCBpZiBubyBlcnJvciBvY2N1cmVkLgotICovCi1pbnQJU2tFdmVudERpc3BhdGNoZXIoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVycyBDb250ZXh0ICovCi1TS19JT0MJSW9jKQkvKiBJbyBjb250ZXh0ICovCi17Ci0JU0tfRVZFTlRFTEVNCSpwRXY7CS8qIHBvaW50ZXIgaW50byBxdWV1ZSAqLwotCVNLX1UzMgkJCUNsYXNzOwotCWludAkJCVJ0djsKLQotCXBFdiA9IHBBQy0+RXZlbnQuRXZHZXQ7Ci0JCi0JUFJJTlRGKCJkaXNwYXRjaCBnZXQgJXggcHV0ICV4XG4iLCBwRXYsIHBBQy0+RXZlbnQuZXZfcHV0KTsKLQkKLQl3aGlsZSAocEV2ICE9IHBBQy0+RXZlbnQuRXZQdXQpIHsKLQkJUFJJTlRGKCJkaXNwYXRjaCBDbGFzcyAlZCBFdmVudCAlZFxuIiwgcEV2LT5DbGFzcywgcEV2LT5FdmVudCk7Ci0KLQkJc3dpdGNoIChDbGFzcyA9IHBFdi0+Q2xhc3MpIHsKLSNpZm5kZWYgU0tfVVNFX0xBQ19FVgotI2lmbmRlZiBTS19TTElNCi0JCWNhc2UgU0tHRV9STE1UOgkJLyogUkxNVCBFdmVudCAqLwotCQkJUnR2ID0gU2tSbG10RXZlbnQocEFDLCBJb2MsIHBFdi0+RXZlbnQsIHBFdi0+UGFyYSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTS0dFX0kyQzoJCS8qIEkyQyBFdmVudCAqLwotCQkJUnR2ID0gU2tJMmNFdmVudChwQUMsIElvYywgcEV2LT5FdmVudCwgcEV2LT5QYXJhKTsKLQkJCWJyZWFrOwotCQljYXNlIFNLR0VfUE5NSToJCS8qIFBOTUkgRXZlbnQgKi8KLQkJCVJ0diA9IFNrUG5taUV2ZW50KHBBQywgSW9jLCBwRXYtPkV2ZW50LCBwRXYtPlBhcmEpOwotCQkJYnJlYWs7Ci0jZW5kaWYJLyogbm90IFNLX1NMSU0gKi8KLSNlbmRpZgkvKiBub3QgU0tfVVNFX0xBQ19FViAqLwotCQljYXNlIFNLR0VfRFJWOgkJLyogRHJpdmVyIEV2ZW50ICovCi0JCQlSdHYgPSBTa0RydkV2ZW50KHBBQywgSW9jLCBwRXYtPkV2ZW50LCBwRXYtPlBhcmEpOwotCQkJYnJlYWs7Ci0jaWZuZGVmIFNLX1VTRV9TV19USU1FUgotCQljYXNlIFNLR0VfSFdBQzoKLQkJCVJ0diA9IFNrR2VTaXJxRXZlbnQocEFDLCBJb2MsIHBFdi0+RXZlbnQsIHBFdi0+UGFyYSk7Ci0JCQlicmVhazsKLSNlbHNlIC8qICFTS19VU0VfU1dfVElNRVIgKi8KLSAgICAgICAgY2FzZSBTS0dFX1NXVCA6Ci0JCQlSdHYgPSBTa1N3dEV2ZW50KHBBQywgSW9jLCBwRXYtPkV2ZW50LCBwRXYtPlBhcmEpOwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogIVNLX1VTRV9TV19USU1FUiAqLwotI2lmZGVmIFNLX1VTRV9MQUNfRVYKLQkJY2FzZSBTS0dFX0xBQ1AgOgotCQkJUnR2ID0gU2tMYWNwRXZlbnQocEFDLCBJb2MsIHBFdi0+RXZlbnQsIHBFdi0+UGFyYSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTS0dFX1JTRiA6Ci0JCQlSdHYgPSBTa1JzZkV2ZW50KHBBQywgSW9jLCBwRXYtPkV2ZW50LCBwRXYtPlBhcmEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tHRV9NQVJLRVIgOgotCQkJUnR2ID0gU2tNYXJrZXJFdmVudChwQUMsIElvYywgcEV2LT5FdmVudCwgcEV2LT5QYXJhKTsKLQkJCWJyZWFrOwotCQljYXNlIFNLR0VfRkQgOgotCQkJUnR2ID0gU2tGZEV2ZW50KHBBQywgSW9jLCBwRXYtPkV2ZW50LCBwRXYtPlBhcmEpOwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogU0tfVVNFX0xBQ19FViAqLwotI2lmZGVmCVNLX1VTRV9DU1VNCi0JCWNhc2UgU0tHRV9DU1VNIDoKLQkJCVJ0diA9IFNrQ3NFdmVudChwQUMsIElvYywgcEV2LT5FdmVudCwgcEV2LT5QYXJhKTsKLQkJCWJyZWFrOwotI2VuZGlmCS8qIFNLX1VTRV9DU1VNICovCi0JCWRlZmF1bHQgOgotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9RX0UwMDIsIFNLRVJSX1FfRTAwMk1TRyk7Ci0JCQlSdHYgPSAwOwotCQl9Ci0KLQkJaWYgKFJ0diAhPSAwKSB7Ci0JCQlyZXR1cm4oUnR2KTsKLQkJfQotCi0JCWlmICgrK3BFdiA9PSAmcEFDLT5FdmVudC5FdlF1ZXVlW1NLX01BWF9FVkVOVF0pCi0JCQlwRXYgPSBwQUMtPkV2ZW50LkV2UXVldWU7Ci0KLQkJLyogUmVuZXcgZ2V0OiBpdCBpcyB1c2VkIGluIHF1ZXVlX2V2ZW50cyB0byBkZXRlY3Qgb3ZlcnJ1bnMgKi8KLQkJcEFDLT5FdmVudC5FdkdldCA9IHBFdjsKLQl9Ci0KLQlyZXR1cm4oMCk7Ci19Ci0KLS8qIEVuZCBvZiBmaWxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrcmxtdC5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za3JsbXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4ZDFjYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrcmxtdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2tybG10LmMKLSAqIFByb2plY3Q6CUdFbmVzaXMsIFBDSSBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS42OSAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8wNC8xNSAwOTozOToyMiAkCi0gKiBQdXJwb3NlOglNYW5hZ2UgbGlua3Mgb24gU0stTkVUIEFkYXB0ZXJzLCBlc3AuIHJlZHVuZGFudCBvbmVzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QgR21iSC4KLSAqCShDKUNvcHlyaWdodCAyMDAyLTIwMDMgTWFydmVsbC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBUaGlzIG1vZHVsZSBjb250YWlucyBjb2RlIGZvciBMaW5rIE1hbmFnZW1lblQgKExNVCkgb2YgU0stTkVUIEFkYXB0ZXJzLgotICogSXQgaXMgbWFpbmx5IGludGVuZGVkIGZvciBhZGFwdGVycyB3aXRoIG1vcmUgdGhhbiBvbmUgbGluay4KLSAqIEZvciBzdWNoIGFkYXB0ZXJzLCB0aGlzIG1vZHVsZSByZWFsaXplcyBSZWR1bmRhbnQgTGluayBNYW5hZ2VtZW5UIChSTE1UKS4KLSAqCi0gKiBJbmNsdWRlIEZpbGUgSGllcmFyY2h5OgotICoKLSAqCSJza2RydjFzdC5oIgotICoJInNrZHJ2Mm5kLmgiCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZglsaW50Ci1zdGF0aWMgY29uc3QgY2hhciBTeXNLb25uZWN0RmlsZUlkW10gPQotCSJAKCMpICRJZDogc2tybG10LmMsdiAxLjY5IDIwMDMvMDQvMTUgMDk6Mzk6MjIgdHNjaGlsbGkgRXhwICQgKEMpIE1hcnZlbGwuIjsKLSNlbmRpZgkvKiAhZGVmaW5lZChsaW50KSAqLwotCi0jZGVmaW5lIF9fU0tSTE1UX0MKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgkvKiBjcGx1c3BsdXMgKi8KLQotI2luY2x1ZGUgImgvc2tkcnYxc3QuaCIKLSNpbmNsdWRlICJoL3NrZHJ2Mm5kLmgiCi0KLS8qIGRlZmluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgU0tfSFdBQ19MSU5LX0xFRAotI2RlZmluZSBTS19IV0FDX0xJTktfTEVEKGEsYixjLGQpCi0jZW5kaWYJLyogIWRlZmluZWQoU0tfSFdBQ19MSU5LX0xFRCkgKi8KLQotI2lmbmRlZiBERUJVRwotI2RlZmluZSBSTE1UX1NUQVRJQwlzdGF0aWMKLSNlbHNlCS8qIERFQlVHICovCi0jZGVmaW5lIFJMTVRfU1RBVElDCi0KLSNpZm5kZWYgU0tfTElUVExFX0VORElBTgotLyogRmlyc3QgMzIgYml0cyAqLwotI2RlZmluZSBPRkZTX0xPMzIJMQotCi0vKiBTZWNvbmQgMzIgYml0cyAqLwotI2RlZmluZSBPRkZTX0hJMzIJMAotI2Vsc2UJLyogU0tfTElUVExFX0VORElBTiAqLwotLyogRmlyc3QgMzIgYml0cyAqLwotI2RlZmluZSBPRkZTX0xPMzIJMAotCi0vKiBTZWNvbmQgMzIgYml0cyAqLwotI2RlZmluZSBPRkZTX0hJMzIJMQotI2VuZGlmCS8qIFNLX0xJVFRMRV9FTkRJQU4gKi8KLQotI2VuZGlmCS8qIERFQlVHICovCi0KLS8qIC0tLS0tIFByaXZhdGUgdGltZW91dCB2YWx1ZXMgLS0tLS0gKi8KLQotI2RlZmluZSBTS19STE1UX01JTl9UT19WQUwJCQkgICAxMjUwMDAJLyogMS84IHNlYy4gKi8KLSNkZWZpbmUgU0tfUkxNVF9ERUZfVE9fVkFMCQkJICAxMDAwMDAwCS8qIDEgc2VjLiAqLwotI2RlZmluZSBTS19STE1UX1BPUlRET1dOX1RJTV9WQUwJICAgOTAwMDAwCS8qIGFub3RoZXIgMC45IHNlYy4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QT1JUU1RBUlRfVElNX1ZBTAkgICAxMDAwMDAJLyogMC4xIHNlYy4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QT1JUVVBfVElNX1ZBTAkJICAyNTAwMDAwCS8qIDIuNSBzZWMuICovCi0jZGVmaW5lIFNLX1JMTVRfU0VHX1RPX1ZBTAkJCTkwMDAwMDAwMAkvKiAxNSBtaW4uICovCi0KLS8qIEFzc3VtZSB0aWNrIGNvdW50ZXIgaW5jcmVtZW50IGlzIDEgLSBtYXkgYmUgc2V0IE9TLWRlcGVuZGVudC4gKi8KLSNpZm5kZWYgU0tfVElDS19JTkNSCi0jZGVmaW5lIFNLX1RJQ0tfSU5DUglTS19DT05TVFU2NCgxKQotI2VuZGlmCS8qICFkZWZpbmVkKFNLX1RJQ0tfSU5DUikgKi8KLQotLyoKLSAqIEFtb3VudCB0aGF0IGEgdGltZSBzdGFtcCBtdXN0IGJlIGxhdGVyIHRvIGJlIHJlY29nbml6ZWQgYXMgInN1YnN0YW50aWFsbHkKLSAqIGxhdGVyIi4gVGhpcyBpcyBhYm91dCAxLzEyOCBzZWMsIGJ1dCBhYm92ZSAxIHRpY2sgY291bnRlciBpbmNyZW1lbnQuCi0gKi8KLSNkZWZpbmUgU0tfUkxNVF9CQ19ERUxUQQkJKDEgKyAoKFNLX1RJQ0tTX1BFUl9TRUMgPj4gNykgPiBTS19USUNLX0lOQ1IgPyBcCi0JCQkJCQkJCQkoU0tfVElDS1NfUEVSX1NFQyA+PiA3KSA6IFNLX1RJQ0tfSU5DUikpCi0KLS8qIC0tLS0tIFByaXZhdGUgUkxNVCBkZWZhdWx0cyAtLS0tLSAqLwotCi0jZGVmaW5lIFNLX1JMTVRfREVGX1BSRUZfUE9SVAkwCQkJCQkvKiAiTG93ZXIiIHBvcnQuICovCi0jZGVmaW5lIFNLX1JMTVRfREVGX01PREUgCQlTS19STE1UX0NIRUNLX0xJTksJLyogRGVmYXVsdCBSTE1UIE1vZGUuICovCi0KLS8qIC0tLS0tIFByaXZhdGUgUkxNVCBjaGVja2luZyBzdGF0ZXMgLS0tLS0gKi8KLQotI2RlZmluZSBTS19STE1UX1JDU19TRUcJCQkxCQkvKiBSTE1UIENoZWNrIFN0YXRlOiBjaGVjayBzZWcuICovCi0jZGVmaW5lIFNLX1JMTVRfUkNTX1NUQVJUX1NFRwkyCQkvKiBSTE1UIENoZWNrIFN0YXRlOiBzdGFydCBjaGVjayBzZWcuICovCi0jZGVmaW5lIFNLX1JMTVRfUkNTX1NFTkRfU0VHCTQJCS8qIFJMTVQgQ2hlY2sgU3RhdGU6IHNlbmQgQlBEVSBwYWNrZXQgKi8KLSNkZWZpbmUgU0tfUkxNVF9SQ1NfUkVQT1JUX1NFRwk4CQkvKiBSTE1UIENoZWNrIFN0YXRlOiByZXBvcnQgc2VnLiAqLwotCi0vKiAtLS0tLSBQcml2YXRlIFBPUlQgY2hlY2tpbmcgc3RhdGVzIC0tLS0tICovCi0KLSNkZWZpbmUgU0tfUkxNVF9QQ1NfVFgJCQkxCQkvKiBQb3J0IENoZWNrIFN0YXRlOiBjaGVjayB0eC4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QQ1NfUlgJCQkyCQkvKiBQb3J0IENoZWNrIFN0YXRlOiBjaGVjayByeC4gKi8KLQotLyogLS0tLS0gUHJpdmF0ZSBQT1JUIGV2ZW50cyAtLS0tLSAqLwotCi0vKiBOb3RlOiBVcGRhdGUgc2ltdWxhdGlvbiB3aGVuIGNoYW5naW5nIHRoZXNlLiAqLwotI2RlZmluZSBTS19STE1UX1BPUlRTVEFSVF9USU0JMTEwMAkvKiBQb3J0IHN0YXJ0IHRpbWVvdXQuICovCi0jZGVmaW5lIFNLX1JMTVRfUE9SVFVQX1RJTQkJMTEwMQkvKiBQb3J0IGNhbiBub3cgZ28gdXAuICovCi0jZGVmaW5lIFNLX1JMTVRfUE9SVERPV05fUlhfVElNCTExMDIJLyogUG9ydCBkaWQgbm90IHJlY2VpdmUgb25jZSAuLi4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QT1JURE9XTgkJMTEwMwkvKiBQb3J0IHdlbnQgZG93bi4gKi8KLSNkZWZpbmUgU0tfUkxNVF9QT1JURE9XTl9UWF9USU0JMTEwNAkvKiBQYXJ0bmVyIGRpZCBub3QgcmVjZWl2ZSAuLi4gKi8KLQotLyogLS0tLS0gUHJpdmF0ZSBSTE1UIGV2ZW50cyAtLS0tLSAqLwotCi0vKiBOb3RlOiBVcGRhdGUgc2ltdWxhdGlvbiB3aGVuIGNoYW5naW5nIHRoZXNlLiAqLwotI2RlZmluZSBTS19STE1UX1RJTQkJCQkyMTAwCS8qIFJMTVQgdGltZW91dC4gKi8KLSNkZWZpbmUgU0tfUkxNVF9TRUdfVElNCQkJMjEwMQkvKiBSTE1UIHNlZ21lbnRhdGlvbiBjaGVjayB0aW1lb3V0LiAqLwotCi0jZGVmaW5lIFRPX1NIT1JURU4odGltKQkoKHRpbSkgLyAyKQotCi0vKiBFcnJvciBudW1iZXJzIGFuZCBtZXNzYWdlcy4gKi8KLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDAxCQkoU0tfRVJSQkFTRV9STE1UICsgMCkKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDAxX01TRwkiTm8gUGFja2V0LiIKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDAyCQkoU0tFUlJfUkxNVF9FMDAxICsgMSkKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDAyX01TRwkiU2hvcnQgUGFja2V0LiIKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDAzCQkoU0tFUlJfUkxNVF9FMDAyICsgMSkKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDAzX01TRwkiVW5rbm93biBSTE1UIGV2ZW50LiIKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDA0CQkoU0tFUlJfUkxNVF9FMDAzICsgMSkKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDA0X01TRwkiUG9ydHNVcCBpbmNvcnJlY3QuIgotI2RlZmluZSBTS0VSUl9STE1UX0UwMDUJCShTS0VSUl9STE1UX0UwMDQgKyAxKQotI2RlZmluZSBTS0VSUl9STE1UX0UwMDVfTVNHCVwKLSAiTmV0IHNlZW1zIHRvIGJlIHNlZ21lbnRlZCAoZGlmZmVyZW50IHJvb3QgYnJpZGdlcyBhcmUgcmVwb3J0ZWQgb24gdGhlIHBvcnRzKS4iCi0jZGVmaW5lIFNLRVJSX1JMTVRfRTAwNgkJKFNLRVJSX1JMTVRfRTAwNSArIDEpCi0jZGVmaW5lIFNLRVJSX1JMTVRfRTAwNl9NU0cJIkR1cGxpY2F0ZSBNQUMgQWRkcmVzcyBkZXRlY3RlZC4iCi0jZGVmaW5lIFNLRVJSX1JMTVRfRTAwNwkJKFNLRVJSX1JMTVRfRTAwNiArIDEpCi0jZGVmaW5lIFNLRVJSX1JMTVRfRTAwN19NU0cJIkxpbmtzVXAgaW5jb3JyZWN0LiIKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDA4CQkoU0tFUlJfUkxNVF9FMDA3ICsgMSkKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDA4X01TRwkiUG9ydCBub3Qgc3RhcnRlZCBidXQgbGluayBjYW1lIHVwLiIKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDA5CQkoU0tFUlJfUkxNVF9FMDA4ICsgMSkKLSNkZWZpbmUgU0tFUlJfUkxNVF9FMDA5X01TRwkiQ29ycmVjdGVkIGlsbGVnYWwgc2V0dGluZyBvZiBQcmVmZXJyZWQgUG9ydC4iCi0jZGVmaW5lIFNLRVJSX1JMTVRfRTAxMAkJKFNLRVJSX1JMTVRfRTAwOSArIDEpCi0jZGVmaW5lIFNLRVJSX1JMTVRfRTAxMF9NU0cJIklnbm9yZWQgaWxsZWdhbCBQcmVmZXJyZWQgUG9ydC4iCi0KLS8qIExMQyBmaWVsZCB2YWx1ZXMuICovCi0jZGVmaW5lIExMQ19DT01NQU5EX1JFU1BPTlNFX0JJVAkJMQotI2RlZmluZSBMTENfVEVTVF9DT01NQU5ECQkJCTB4RTMKLSNkZWZpbmUgTExDX1VJCQkJCQkJCTB4MDMKLQotLyogUkxNVCBQYWNrZXQgZmllbGRzLiAqLwotI2RlZmluZQlTS19STE1UX0RTQVAJCQkJCTAKLSNkZWZpbmUJU0tfUkxNVF9TU0FQCQkJCQkwCi0jZGVmaW5lIFNLX1JMTVRfQ1RSTAkJCQkJKExMQ19URVNUX0NPTU1BTkQpCi0jZGVmaW5lIFNLX1JMTVRfSU5ESUNBVE9SMAkJCQkweDUzCS8qIFMgKi8KLSNkZWZpbmUgU0tfUkxNVF9JTkRJQ0FUT1IxCQkJCTB4NEIJLyogSyAqLwotI2RlZmluZSBTS19STE1UX0lORElDQVRPUjIJCQkJMHgyRAkvKiAtICovCi0jZGVmaW5lIFNLX1JMTVRfSU5ESUNBVE9SMwkJCQkweDUyCS8qIFIgKi8KLSNkZWZpbmUgU0tfUkxNVF9JTkRJQ0FUT1I0CQkJCTB4NEMJLyogTCAqLwotI2RlZmluZSBTS19STE1UX0lORElDQVRPUjUJCQkJMHg0RAkvKiBNICovCi0jZGVmaW5lIFNLX1JMTVRfSU5ESUNBVE9SNgkJCQkweDU0CS8qIFQgKi8KLSNkZWZpbmUgU0tfUkxNVF9QQUNLRVRfVkVSU0lPTgkJCTAKLQotLyogUkxNVCBTUFQgRmxhZyB2YWx1ZXMuICovCi0jZGVmaW5lCVNLX1JMTVRfU1BUX0ZMQUdfQ0hBTkdFCQkJMHgwMQotI2RlZmluZQlTS19STE1UX1NQVF9GTEFHX0NIQU5HRV9BQ0sJCTB4ODAKLQotLyogUkxNVCBTUFQgUGFja2V0IGZpZWxkcy4gKi8KLSNkZWZpbmUJU0tfUkxNVF9TUFRfRFNBUAkJCQkweDQyCi0jZGVmaW5lCVNLX1JMTVRfU1BUX1NTQVAJCQkJMHg0MgotI2RlZmluZSBTS19STE1UX1NQVF9DVFJMCQkJCShMTENfVUkpCi0jZGVmaW5lCVNLX1JMTVRfU1BUX1BST1RPQ09MX0lEMAkJMHgwMAotI2RlZmluZQlTS19STE1UX1NQVF9QUk9UT0NPTF9JRDEJCTB4MDAKLSNkZWZpbmUJU0tfUkxNVF9TUFRfUFJPVE9DT0xfVkVSU0lPTl9JRAkweDAwCi0jZGVmaW5lCVNLX1JMTVRfU1BUX0JQRFVfVFlQRQkJCTB4MDAKLSNkZWZpbmUJU0tfUkxNVF9TUFRfRkxBR1MJCQkJMHgwMAkvKiA/PyAqLwotI2RlZmluZQlTS19STE1UX1NQVF9ST09UX0lEMAkJCTB4RkYJLyogTG93ZXN0IHBvc3NpYmxlIHByaW9yaXR5LiAqLwotI2RlZmluZQlTS19STE1UX1NQVF9ST09UX0lEMQkJCTB4RkYJLyogTG93ZXN0IHBvc3NpYmxlIHByaW9yaXR5LiAqLwotCi0vKiBSZW1haW5pbmcgNiBieXRlcyB3aWxsIGJlIHRoZSBjdXJyZW50IHBvcnQgYWRkcmVzcy4gKi8KLSNkZWZpbmUJU0tfUkxNVF9TUFRfUk9PVF9QQVRIX0NPU1QwCQkweDAwCi0jZGVmaW5lCVNLX1JMTVRfU1BUX1JPT1RfUEFUSF9DT1NUMQkJMHgwMAotI2RlZmluZQlTS19STE1UX1NQVF9ST09UX1BBVEhfQ09TVDIJCTB4MDAKLSNkZWZpbmUJU0tfUkxNVF9TUFRfUk9PVF9QQVRIX0NPU1QzCQkweDAwCi0jZGVmaW5lCVNLX1JMTVRfU1BUX0JSSURHRV9JRDAJCQkweEZGCS8qIExvd2VzdCBwb3NzaWJsZSBwcmlvcml0eS4gKi8KLSNkZWZpbmUJU0tfUkxNVF9TUFRfQlJJREdFX0lEMQkJCTB4RkYJLyogTG93ZXN0IHBvc3NpYmxlIHByaW9yaXR5LiAqLwotCi0vKiBSZW1haW5pbmcgNiBieXRlcyB3aWxsIGJlIHRoZSBjdXJyZW50IHBvcnQgYWRkcmVzcy4gKi8KLSNkZWZpbmUJU0tfUkxNVF9TUFRfUE9SVF9JRDAJCQkweEZGCS8qIExvd2VzdCBwb3NzaWJsZSBwcmlvcml0eS4gKi8KLSNkZWZpbmUJU0tfUkxNVF9TUFRfUE9SVF9JRDEJCQkweEZGCS8qIExvd2VzdCBwb3NzaWJsZSBwcmlvcml0eS4gKi8KLSNkZWZpbmUJU0tfUkxNVF9TUFRfTVNHX0FHRTAJCQkweDAwCi0jZGVmaW5lCVNLX1JMTVRfU1BUX01TR19BR0UxCQkJMHgwMAotI2RlZmluZQlTS19STE1UX1NQVF9NQVhfQUdFMAkJCTB4MDAKLSNkZWZpbmUJU0tfUkxNVF9TUFRfTUFYX0FHRTEJCQkweEZGCi0jZGVmaW5lCVNLX1JMTVRfU1BUX0hFTExPX1RJTUUwCQkJMHgwMAotI2RlZmluZQlTS19STE1UX1NQVF9IRUxMT19USU1FMQkJCTB4RkYKLSNkZWZpbmUJU0tfUkxNVF9TUFRfRldEX0RFTEFZMAkJCTB4MDAKLSNkZWZpbmUJU0tfUkxNVF9TUFRfRldEX0RFTEFZMQkJCTB4NDAKLQotLyogU2l6ZSBkZWZpbmVzLiAqLwotI2RlZmluZSBTS19STE1UX01JTl9QQUNLRVRfU0laRQkJCTM0Ci0jZGVmaW5lIFNLX1JMTVRfTUFYX1BBQ0tFVF9TSVpFCQkJKFNLX1JMTVRfTUFYX1RYX0JVRl9TSVpFKQotI2RlZmluZSBTS19QQUNLRVRfREFUQV9MRU4JCQkJKFNLX1JMTVRfTUFYX1BBQ0tFVF9TSVpFIC0gXAotCQkJCQkJCQkJCVNLX1JMTVRfTUlOX1BBQ0tFVF9TSVpFKQotCi0vKiAtLS0tLSBSTE1UIHBhY2tldCB0eXBlcyAtLS0tLSAqLwotI2RlZmluZSBTS19QQUNLRVRfQU5OT1VOQ0UJCQkJMQkvKiBQb3J0IGFubm91bmNlbWVudC4gKi8KLSNkZWZpbmUgU0tfUEFDS0VUX0FMSVZFCQkJCQkyCS8qIEFsaXZlIHBhY2tldCB0byBwb3J0LiAqLwotI2RlZmluZSBTS19QQUNLRVRfQUREUl9DSEFOR0VECQkJMwkvKiBQb3J0IGFkZHJlc3MgY2hhbmdlZC4gKi8KLSNkZWZpbmUgU0tfUEFDS0VUX0NIRUNLX1RYCQkJCTQJLyogQ2hlY2sgeW91ciB0eCBsaW5lLiAqLwotCi0jaWZkZWYgU0tfTElUVExFX0VORElBTgotI2RlZmluZSBTS19VMTZfVE9fTkVUV09SS19PUkRFUihWYWwsQWRkcikgeyBcCi0JU0tfVTgJKl9BZGRyID0gKFNLX1U4KikoQWRkcik7IFwKLQlTS19VMTYJX1ZhbCA9IChTS19VMTYpKFZhbCk7IFwKLQkqX0FkZHIrKyA9IChTS19VOCkoX1ZhbCA+PiA4KTsgXAotCSpfQWRkciA9IChTS19VOCkoX1ZhbCAmIDB4RkYpOyBcCi19Ci0jZW5kaWYJLyogU0tfTElUVExFX0VORElBTiAqLwotCi0jaWZkZWYgU0tfQklHX0VORElBTgotI2RlZmluZSBTS19VMTZfVE9fTkVUV09SS19PUkRFUihWYWwsQWRkcikgKCooU0tfVTE2KikoQWRkcikgPSAoU0tfVTE2KShWYWwpKQotI2VuZGlmCS8qIFNLX0JJR19FTkRJQU4gKi8KLQotI2RlZmluZSBBVVRPTkVHX0ZBSUxFRAlTS19GQUxTRQotI2RlZmluZSBBVVRPTkVHX1NVQ0NFU1MJU0tfVFJVRQotCi0KLS8qIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFJMTVQgcGFja2V0LiAgTGVuZ3RoOiBTS19STE1UX01BWF9QQUNLRVRfU0laRSAoNjApIGJ5dGVzLiAqLwotdHlwZWRlZiBzdHJ1Y3Qgc19SbG10UGFja2V0IHsKLQlTS19VOAlEc3RBZGRyW1NLX01BQ19BRERSX0xFTl07Ci0JU0tfVTgJU3JjQWRkcltTS19NQUNfQUREUl9MRU5dOwotCVNLX1U4CVR5cGVMZW5bMl07Ci0JU0tfVTgJRFNhcDsKLQlTS19VOAlTU2FwOwotCVNLX1U4CUN0cmw7Ci0JU0tfVTgJSW5kaWNhdG9yWzddOwotCVNLX1U4CVJsbXRQYWNrZXRUeXBlWzJdOwotCVNLX1U4CUFsaWduMVsyXTsKLQlTS19VOAlSYW5kb21bNF07CQkJCS8qIFJhbmRvbSB2YWx1ZSBvZiByZXF1ZXN0aW5nKCEpIHN0YXRpb24uICovCi0JU0tfVTgJUmxtdFBhY2tldFZlcnNpb25bMl07CS8qIFJMTVQgUGFja2V0IHZlcnNpb24uICovCi0JU0tfVTgJRGF0YVtTS19QQUNLRVRfREFUQV9MRU5dOwotfSBTS19STE1UX1BBQ0tFVDsKLQotdHlwZWRlZiBzdHJ1Y3Qgc19TcFRyZWVSbG10UGFja2V0IHsKLQlTS19VOAlEc3RBZGRyW1NLX01BQ19BRERSX0xFTl07Ci0JU0tfVTgJU3JjQWRkcltTS19NQUNfQUREUl9MRU5dOwotCVNLX1U4CVR5cGVMZW5bMl07Ci0JU0tfVTgJRFNhcDsKLQlTS19VOAlTU2FwOwotCVNLX1U4CUN0cmw7Ci0JU0tfVTgJUHJvdG9jb2xJZFsyXTsKLQlTS19VOAlQcm90b2NvbFZlcnNpb25JZDsKLQlTS19VOAlCcGR1VHlwZTsKLQlTS19VOAlGbGFnczsKLQlTS19VOAlSb290SWRbOF07Ci0JU0tfVTgJUm9vdFBhdGhDb3N0WzRdOwotCVNLX1U4CUJyaWRnZUlkWzhdOwotCVNLX1U4CVBvcnRJZFsyXTsKLQlTS19VOAlNZXNzYWdlQWdlWzJdOwotCVNLX1U4CU1heEFnZVsyXTsKLQlTS19VOAlIZWxsb1RpbWVbMl07Ci0JU0tfVTgJRm9yd2FyZERlbGF5WzJdOwotfSBTS19TUFRSRUVfUEFDS0VUOwotCi0vKiBnbG9iYWwgdmFyaWFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1TS19NQUNfQUREUglTa1JsbXRNY0FkZHIgPQl7ezB4MDEsICAweDAwLCAgMHg1QSwgIDB4NTIsICAweDRDLCAgMHg0RH19OwotU0tfTUFDX0FERFIJQnJpZGdlTWNBZGRyID0Je3sweDAxLCAgMHg4MCwgIDB4QzIsICAweDAwLCAgMHgwMCwgIDB4MDB9fTsKLQotLyogbG9jYWwgdmFyaWFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTm9uZS4gKi8KLQotLyogZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotUkxNVF9TVEFUSUMgdm9pZAlTa1JsbXRDaGVja1N3aXRjaCgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JU0tfVTMyCU5ldElkeCk7Ci1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdENoZWNrU2VnKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlTS19VMzIJTmV0SWR4KTsKLVJMTVRfU1RBVElDIHZvaWQJU2tSbG10RXZ0U2V0TmV0cygKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQywKLQlTS19FVlBBUkEJUGFyYSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRJbml0IC0gaW5pdGlhbGl6ZSBkYXRhLCBzZXQgc3RhdGUgdG8gaW5pdAotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqCVNLX0lOSVRfREFUQQotICoJPT09PT09PT09PT09Ci0gKgotICoJVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIGFsbCBSTE1ULXJlbGF0ZWQgdmFyaWFibGVzIHRvIGEga25vd24gc3RhdGUuCi0gKglUaGUgaW5pdGlhbCBzdGF0ZSBpcyBTS19STE1UX1JTX0lOSVQuCi0gKglBbGwgcG9ydHMgYXJlIGluaXRpYWxpemVkIHRvIFNLX1JMTVRfUFNfSU5JVC4KLSAqCi0gKgotICoJU0tfSU5JVF9JTwotICoJPT09PT09PT09PQotICoKLSAqCU5vdGhpbmcuCi0gKgotICoKLSAqCVNLX0lOSVRfUlVOCi0gKgk9PT09PT09PT09PQotICoKLSAqCURldGVybWluZSB0aGUgYWRhcHRlcidzIHJhbmRvbSB2YWx1ZS4KLSAqCVNldCB0aGUgaHcgcmVnaXN0ZXJzLCB0aGUgImxvZ2ljYWwgTUFDIGFkZHJlc3MiLCB0aGUKLSAqCVJMTVQgbXVsdGljYXN0IGFkZHJlc3MsIGFuZCBldmVudHVhbGx5IHRoZSBCUERVIG11bHRpY2FzdCBhZGRyZXNzLgotICoKLSAqIENvbnRleHQ6Ci0gKglpbml0LCBwYWdlYWJsZQotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nLgotICovCi12b2lkCVNrUmxtdEluaXQoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1pbnQJCUxldmVsKQkvKiBJbml0aWFsaXphdGlvbiBMZXZlbCAqLwotewotCVNLX1UzMgkJaSwgajsKLQlTS19VNjQJCVJhbmRvbTsKLQlTS19FVlBBUkEJUGFyYTsKLSAgICBTS19NQUNfQUREUgkJVmlydHVhbE1hY0FkZHJlc3M7Ci0gICAgU0tfTUFDX0FERFIJCVBoeXNpY2FsQU1hY0FkZHJlc3M7Ci0gICAgU0tfQk9PTAkJVmlydHVhbE1hY0FkZHJlc3NTZXQ7Ci0gICAgU0tfQk9PTAkJUGh5c2ljYWxBTWFjQWRkcmVzc1NldDsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0lOSVQsCi0JCSgiUkxNVCBJbml0IGxldmVsICVkLlxuIiwgTGV2ZWwpKQotCi0Jc3dpdGNoIChMZXZlbCkgewotCWNhc2UgU0tfSU5JVF9EQVRBOgkvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcy4gKi8KLQkJU0tfTUVNU0VUKChjaGFyICopJnBBQy0+UmxtdCwgMCwgc2l6ZW9mKFNLX1JMTVQpKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFYX01BQ1M7IGkrKykgewotCQkJcEFDLT5SbG10LlBvcnRbaV0uUG9ydFN0YXRlID0gU0tfUkxNVF9QU19JTklUOwotCQkJcEFDLT5SbG10LlBvcnRbaV0uTGlua0Rvd24gPSBTS19UUlVFOwotCQkJcEFDLT5SbG10LlBvcnRbaV0uUG9ydERvd24gPSBTS19UUlVFOwotCQkJcEFDLT5SbG10LlBvcnRbaV0uUG9ydFN0YXJ0ZWQgPSBTS19GQUxTRTsKLQkJCXBBQy0+UmxtdC5Qb3J0W2ldLlBvcnROb1J4ID0gU0tfRkFMU0U7Ci0JCQlwQUMtPlJsbXQuUG9ydFtpXS5Sb290SWRTZXQgPSBTS19GQUxTRTsKLQkJCXBBQy0+UmxtdC5Qb3J0W2ldLlBvcnROdW1iZXIgPSBpOwotCQkJcEFDLT5SbG10LlBvcnRbaV0uTmV0ID0gJnBBQy0+UmxtdC5OZXRbMF07Ci0JCQlwQUMtPlJsbXQuUG9ydFtpXS5BZGRyUG9ydCA9ICZwQUMtPkFkZHIuUG9ydFtpXTsKLQkJfQotCi0JCXBBQy0+UmxtdC5OdW1OZXRzID0gMTsKLQkJZm9yIChpID0gMDsgaSA8IFNLX01BWF9ORVRTOyBpKyspIHsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUmxtdFN0YXRlID0gU0tfUkxNVF9SU19JTklUOwotCQkJcEFDLT5SbG10Lk5ldFtpXS5Sb290SWRTZXQgPSBTS19GQUxTRTsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUHJlZlBvcnQgPSBTS19STE1UX0RFRl9QUkVGX1BPUlQ7Ci0JCQlwQUMtPlJsbXQuTmV0W2ldLlByZWZlcmVuY2UgPSAweEZGRkZGRkZGOwkgIC8qIEF1dG9tYXRpYy4gKi8KLQkJCS8qIEp1c3QgYXNzdW1pbmcuICovCi0JCQlwQUMtPlJsbXQuTmV0W2ldLkFjdGl2ZVBvcnQgPSBwQUMtPlJsbXQuTmV0W2ldLlByZWZQb3J0OwotCQkJcEFDLT5SbG10Lk5ldFtpXS5SbG10TW9kZSA9IFNLX1JMTVRfREVGX01PREU7Ci0JCQlwQUMtPlJsbXQuTmV0W2ldLlRpbWVvdXRWYWx1ZSA9IFNLX1JMTVRfREVGX1RPX1ZBTDsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uTmV0TnVtYmVyID0gaTsKLQkJfQotCi0JCXBBQy0+UmxtdC5OZXRbMF0uUG9ydFswXSA9ICZwQUMtPlJsbXQuUG9ydFswXTsKLQkJcEFDLT5SbG10Lk5ldFswXS5Qb3J0WzFdID0gJnBBQy0+UmxtdC5Qb3J0WzFdOwotI2lmIFNLX01BWF9ORVRTID4gMQotCQlwQUMtPlJsbXQuTmV0WzFdLlBvcnRbMF0gPSAmcEFDLT5SbG10LlBvcnRbMV07Ci0jZW5kaWYJLyogU0tfTUFYX05FVFMgPiAxICovCi0JCWJyZWFrOwotCi0JY2FzZSBTS19JTklUX0lPOgkvKiBHSU1hY3NGb3VuZCBmaXJzdCBhdmFpbGFibGUgaGVyZS4gKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfSU5JVCwKLQkJCSgiUkxNVDogJWQgTUFDcyB3ZXJlIGRldGVjdGVkLlxuIiwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kKSkKLQotCQlwQUMtPlJsbXQuTmV0WzBdLk51bVBvcnRzID0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCi0JCS8qIEluaXRpYWxpemUgSFcgcmVnaXN0ZXJzPyAqLwotCQlpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDEpIHsKLQkJCVBhcmEuUGFyYTMyWzBdID0gU0tfUkxNVF9NT0RFX0NMUzsKLQkJCVBhcmEuUGFyYTMyWzFdID0gMDsKLQkJCSh2b2lkKVNrUmxtdEV2ZW50KHBBQywgSW9DLCBTS19STE1UX01PREVfQ0hBTkdFLCBQYXJhKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgU0tfSU5JVF9SVU46Ci0JCS8qIEVuc3VyZSBSTE1UIGlzIHNldCB0byBvbmUgbmV0LiAqLwotCQlpZiAocEFDLT5SbG10Lk51bU5ldHMgPiAxKSB7Ci0JCQlQYXJhLlBhcmEzMlswXSA9IDE7Ci0JCQlQYXJhLlBhcmEzMlsxXSA9IC0xOwotCQkJU2tSbG10RXZ0U2V0TmV0cyhwQUMsIElvQywgUGFyYSk7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgKFNLX1UzMilwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQkJUmFuZG9tID0gU2tPc0dldFRpbWUocEFDKTsKLQkJCSooU0tfVTMyKikmcEFDLT5SbG10LlBvcnRbaV0uUmFuZG9tID0gKihTS19VMzIqKSZSYW5kb207Ci0KLQkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLQkJCQlwQUMtPlJsbXQuUG9ydFtpXS5SYW5kb21bal0gXj0gcEFDLT5SbG10LlBvcnRbaV0uQWRkclBvcnQtPgotCQkJCQlDdXJyZW50TWFjQWRkcmVzcy5hW1NLX01BQ19BRERSX0xFTiAtIDEgLSBqXTsKLQkJCX0KLQotCQkJKHZvaWQpU2tBZGRyTWNDbGVhcihwQUMsIElvQywgaSwgU0tfQUREUl9QRVJNQU5FTlQgfCBTS19NQ19TV19PTkxZKTsKLQkJCQotCQkJLyogQWRkIFJMTVQgTUMgYWRkcmVzcy4gKi8KLQkJCSh2b2lkKVNrQWRkck1jQWRkKHBBQywgSW9DLCBpLCAmU2tSbG10TWNBZGRyLCBTS19BRERSX1BFUk1BTkVOVCk7Ci0KLQkJCWlmIChwQUMtPlJsbXQuTmV0WzBdLlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19TRUcpIHsKLQkJCQkvKiBBZGQgQlBEVSBNQyBhZGRyZXNzLiAqLwotCQkJCSh2b2lkKVNrQWRkck1jQWRkKHBBQywgSW9DLCBpLCAmQnJpZGdlTWNBZGRyLCBTS19BRERSX1BFUk1BTkVOVCk7Ci0JCQl9Ci0KLQkJCSh2b2lkKVNrQWRkck1jVXBkYXRlKHBBQywgSW9DLCBpKTsKLQkJfQotCi0gICAgCVZpcnR1YWxNYWNBZGRyZXNzU2V0ID0gU0tfRkFMU0U7Ci0JCS8qIFJlYWQgdmlydHVhbCBNQUMgYWRkcmVzcyBmcm9tIENvbnRyb2wgUmVnaXN0ZXIgRmlsZS4gKi8KLQkJZm9yIChqID0gMDsgaiA8IFNLX01BQ19BRERSX0xFTjsgaisrKSB7Ci0JCQkKLSAgICAgICAgICAgIFNLX0lOOChJb0MsIEIyX01BQ18xICsgaiwgJlZpcnR1YWxNYWNBZGRyZXNzLmFbal0pOwotICAgICAgICAgICAgVmlydHVhbE1hY0FkZHJlc3NTZXQgfD0gVmlydHVhbE1hY0FkZHJlc3MuYVtqXTsKLQkJfQotICAgIAkKLSAgICAgICAgUGh5c2ljYWxBTWFjQWRkcmVzc1NldCA9IFNLX0ZBTFNFOwotCQkvKiBSZWFkIHBoeXNpY2FsIE1BQyBhZGRyZXNzIGZvciBNQUMgQSBmcm9tIENvbnRyb2wgUmVnaXN0ZXIgRmlsZS4gKi8KLQkJZm9yIChqID0gMDsgaiA8IFNLX01BQ19BRERSX0xFTjsgaisrKSB7Ci0JCQkKLSAgICAgICAgICAgIFNLX0lOOChJb0MsIEIyX01BQ18yICsgaiwgJlBoeXNpY2FsQU1hY0FkZHJlc3MuYVtqXSk7Ci0gICAgICAgICAgICBQaHlzaWNhbEFNYWNBZGRyZXNzU2V0IHw9IFBoeXNpY2FsQU1hY0FkZHJlc3MuYVtqXTsKLQkJfQotCi0gICAgICAgIC8qIGNoZWNrIGlmIHRoZSB0d28gbWFjIGFkZHJlc3NlcyBjb250YWluIHJlYXNvbmFibGUgdmFsdWVzICovCi0gICAgICAgIGlmICghVmlydHVhbE1hY0FkZHJlc3NTZXQgfHwgIVBoeXNpY2FsQU1hY0FkZHJlc3NTZXQpIHsKLQotICAgICAgICAgICAgcEFDLT5SbG10LlJsbXRPZmYgPSBTS19UUlVFOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogaWYgdGhlIHR3byBtYWMgYWRkcmVzc2VzIGFyZSBlcXVhbCBzd2l0Y2ggb2ZmIHRoZSBSTE1UX1BSRV9MT09LQUhFQUQKLSAgICAgICAgICAgYW5kIHRoZSBSTE1UX0xPT0tBSEVBRCBtYWNyb3MgKi8KLSAgICAgICAgZWxzZSBpZiAoU0tfQUREUl9FUVVBTChQaHlzaWNhbEFNYWNBZGRyZXNzLmEsIFZpcnR1YWxNYWNBZGRyZXNzLmEpKSB7Ci0KLSAgICAgICAgICAgIHBBQy0+UmxtdC5SbG10T2ZmID0gU0tfVFJVRTsKLSAgICAgICAgfQotCQllbHNlIHsKLQkJCXBBQy0+UmxtdC5SbG10T2ZmID0gU0tfRkFMU0U7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgkvKiBlcnJvciAqLwotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQkvKiBTa1JsbXRJbml0ICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEJ1aWxkQ2hlY2tDaGFpbiAtIGJ1aWxkIHRoZSBjaGVjayBjaGFpbgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGJ1aWxkcyB0aGUgbG9jYWwgY2hlY2sgY2hhaW46Ci0gKgktIEVhY2ggcG9ydCB0aGF0IGlzIHVwIGNoZWNrcyB0aGUgbmV4dCBwb3J0LgotICoJLSBUaGUgbGFzdCBwb3J0IHRoYXQgaXMgdXAgY2hlY2tzIHRoZSBmaXJzdCBwb3J0IHRoYXQgaXMgdXAuCi0gKgotICogTm90ZXM6Ci0gKgktIEN1cnJlbnRseSBvbmx5IGxvY2FsIHBvcnRzIGFyZSBjb25zaWRlcmVkIHdoZW4gYnVpbGRpbmcgdGhlIGNoYWluLgotICoJLSBDdXJyZW50bHkgdGhlIFN1c3BlY3RTdGF0ZSBpcyBqdXN0IHJlc2V0OwotICoJICBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gc2F2ZSBpdCAuLi4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcKLSAqLwotUkxNVF9TVEFUSUMgdm9pZAlTa1JsbXRCdWlsZENoZWNrQ2hhaW4oCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX1UzMglOZXRJZHgpCS8qIE5ldCBOdW1iZXIgKi8KLXsKLQlTS19VMzIJCQlpOwotCVNLX1UzMgkJCU51bU1hY3NVcDsKLQlTS19STE1UX1BPUlQgKglGaXJzdE1hY1VwOwotCVNLX1JMTVRfUE9SVCAqCVByZXZNYWNVcDsKLQotCUZpcnN0TWFjVXAJPSBOVUxMOwotCVByZXZNYWNVcAk9IE5VTEw7Ci0JCi0JaWYgKCEocEFDLT5SbG10Lk5ldFtOZXRJZHhdLlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19MT0NfTElOSykpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBBQy0+UmxtdC5OZXRbaV0uTnVtUG9ydHM7IGkrKykgewotCQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbaV0tPlBvcnRzQ2hlY2tlZCA9IDA7Ci0JCX0KLQkJcmV0dXJuOwkvKiBEb25lLiAqLwotCX0KLQkJCQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU2tSbG10QnVpbGRDaGVja0NoYWluLlxuIikpCi0KLQlOdW1NYWNzVXAgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHBBQy0+UmxtdC5OZXRbTmV0SWR4XS5OdW1Qb3J0czsgaSsrKSB7Ci0JCXBBQy0+UmxtdC5OZXRbTmV0SWR4XS5Qb3J0W2ldLT5Qb3J0c0NoZWNrZWQgPSAwOwotCQlwQUMtPlJsbXQuTmV0W05ldElkeF0uUG9ydFtpXS0+UG9ydHNTdXNwZWN0ID0gMDsKLQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbaV0tPkNoZWNraW5nU3RhdGUgJj0KLQkJCX4oU0tfUkxNVF9QQ1NfUlggfCBTS19STE1UX1BDU19UWCk7Ci0KLQkJLyoKLQkJICogSWYgbW9yZSB0aGFuIHR3byBsaW5rcyBhcmUgZGV0ZWN0ZWQgd2Ugc2hvdWxkIGNvbnNpZGVyCi0JCSAqIGNoZWNraW5nIGF0IGxlYXN0IHR3byBvdGhlciBwb3J0czoKLQkJICogMS4gdGhlIG5leHQgcG9ydCB0aGF0IGlzIG5vdCBMaW5rRG93biBhbmQKLQkJICogMi4gdGhlIG5leHQgcG9ydCB0aGF0IGlzIG5vdCBQb3J0RG93bi4KLQkJICovCi0JCWlmICghcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbaV0tPkxpbmtEb3duKSB7Ci0JCQlpZiAoTnVtTWFjc1VwID09IDApIHsKLQkJCQlGaXJzdE1hY1VwID0gcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbaV07Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlQcmV2TWFjVXAtPlBvcnRDaGVja1sKLQkJCQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbaV0tPlBvcnRzQ2hlY2tlZF0uQ2hlY2tBZGRyID0KLQkJCQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbaV0tPkFkZHJQb3J0LT5DdXJyZW50TWFjQWRkcmVzczsKLQkJCQlQcmV2TWFjVXAtPlBvcnRDaGVja1sKLQkJCQkJUHJldk1hY1VwLT5Qb3J0c0NoZWNrZWRdLlN1c3BlY3RUeCA9IFNLX0ZBTFNFOwotCQkJCVByZXZNYWNVcC0+UG9ydHNDaGVja2VkKys7Ci0JCQl9Ci0JCQlQcmV2TWFjVXAgPSBwQUMtPlJsbXQuTmV0W05ldElkeF0uUG9ydFtpXTsKLQkJCU51bU1hY3NVcCsrOwotCQl9Ci0JfQotCi0JaWYgKE51bU1hY3NVcCA+IDEpIHsKLQkJUHJldk1hY1VwLT5Qb3J0Q2hlY2tbUHJldk1hY1VwLT5Qb3J0c0NoZWNrZWRdLkNoZWNrQWRkciA9Ci0JCQlGaXJzdE1hY1VwLT5BZGRyUG9ydC0+Q3VycmVudE1hY0FkZHJlc3M7Ci0JCVByZXZNYWNVcC0+UG9ydENoZWNrW1ByZXZNYWNVcC0+UG9ydHNDaGVja2VkXS5TdXNwZWN0VHggPQotCQkJU0tfRkFMU0U7Ci0JCVByZXZNYWNVcC0+UG9ydHNDaGVja2VkKys7Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5SbG10Lk5ldFtOZXRJZHhdLk51bVBvcnRzOyBpKyspIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiUG9ydCAlZCBjaGVja3MgJWQgb3RoZXIgcG9ydHM6ICUyWC5cbiIsIGksCi0JCQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbaV0tPlBvcnRzQ2hlY2tlZCwKLQkJCQlwQUMtPlJsbXQuTmV0W05ldElkeF0uUG9ydFtpXS0+UG9ydENoZWNrWzBdLkNoZWNrQWRkci5hWzVdKSkKLQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLQotCXJldHVybjsKLX0JLyogU2tSbG10QnVpbGRDaGVja0NoYWluICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEJ1aWxkUGFja2V0IC0gYnVpbGQgYW4gUkxNVCBwYWNrZXQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBzZXRzIHVwIGFuIFJMTVQgcGFja2V0LgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCi0gKiBSZXR1cm5zOgotICoJTlVMTCBvciBwb2ludGVyIHRvIFJMTVQgbWJ1ZgotICovCi1STE1UX1NUQVRJQyBTS19NQlVGCSpTa1JsbXRCdWlsZFBhY2tldCgKLVNLX0FDCQkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJCS8qIEkvTyBDb250ZXh0ICovCi1TS19VMzIJCVBvcnROdW1iZXIsCS8qIFNlbmRpbmcgcG9ydCAqLwotU0tfVTE2CQlQYWNrZXRUeXBlLAkvKiBSTE1UIHBhY2tldCB0eXBlICovCi1TS19NQUNfQUREUgkqU3JjQWRkciwJLyogU291cmNlIGFkZHJlc3MgKi8KLVNLX01BQ19BRERSCSpEZXN0QWRkcikJLyogRGVzdGluYXRpb24gYWRkcmVzcyAqLwotewotCWludAkJaTsKLQlTS19VMTYJCUxlbmd0aDsKLQlTS19NQlVGCQkqcE1iOwotCVNLX1JMTVRfUEFDS0VUCSpwUGFja2V0OwotCi0jaWZkZWYgREVCVUcKLQlTS19VOAlDaGVja1NyYyAgPSAwOwotCVNLX1U4CUNoZWNrRGVzdCA9IDA7Ci0JCi0JZm9yIChpID0gMDsgaSA8IFNLX01BQ19BRERSX0xFTjsgKytpKSB7Ci0JCUNoZWNrU3JjICB8PSBTcmNBZGRyLT5hW2ldOwotCQlDaGVja0Rlc3QgfD0gRGVzdEFkZHItPmFbaV07Ci0JfQotCi0JaWYgKChDaGVja1NyYyA9PSAwKSB8fCAoQ2hlY2tEZXN0ID09IDApKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0VSUiwKLQkJCSgiU2tSbG10QnVpbGRQYWNrZXQ6IEludmFsaWQgJXMlc2FkZHIuXG4iLAotCQkJIChDaGVja1NyYyA9PSAwID8gIlNyYyIgOiAiIiksIChDaGVja0Rlc3QgPT0gMCA/ICJEZXN0IiA6ICIiKSkpCi0JfQotI2VuZGlmCi0KLQlpZiAoKHBNYiA9IFNrRHJ2QWxsb2NSbG10TWJ1ZihwQUMsIElvQywgU0tfUkxNVF9NQVhfUEFDS0VUX1NJWkUpKSAhPSBOVUxMKSB7Ci0JCXBQYWNrZXQgPSAoU0tfUkxNVF9QQUNLRVQqKXBNYi0+cERhdGE7Ci0JCWZvciAoaSA9IDA7IGkgPCBTS19NQUNfQUREUl9MRU47IGkrKykgewotCQkJcFBhY2tldC0+RHN0QWRkcltpXSA9IERlc3RBZGRyLT5hW2ldOwotCQkJcFBhY2tldC0+U3JjQWRkcltpXSA9IFNyY0FkZHItPmFbaV07Ci0JCX0KLQkJcFBhY2tldC0+RFNhcCA9IFNLX1JMTVRfRFNBUDsKLQkJcFBhY2tldC0+U1NhcCA9IFNLX1JMTVRfU1NBUDsKLQkJcFBhY2tldC0+Q3RybCA9IFNLX1JMTVRfQ1RSTDsKLQkJcFBhY2tldC0+SW5kaWNhdG9yWzBdID0gU0tfUkxNVF9JTkRJQ0FUT1IwOwotCQlwUGFja2V0LT5JbmRpY2F0b3JbMV0gPSBTS19STE1UX0lORElDQVRPUjE7Ci0JCXBQYWNrZXQtPkluZGljYXRvclsyXSA9IFNLX1JMTVRfSU5ESUNBVE9SMjsKLQkJcFBhY2tldC0+SW5kaWNhdG9yWzNdID0gU0tfUkxNVF9JTkRJQ0FUT1IzOwotCQlwUGFja2V0LT5JbmRpY2F0b3JbNF0gPSBTS19STE1UX0lORElDQVRPUjQ7Ci0JCXBQYWNrZXQtPkluZGljYXRvcls1XSA9IFNLX1JMTVRfSU5ESUNBVE9SNTsKLQkJcFBhY2tldC0+SW5kaWNhdG9yWzZdID0gU0tfUkxNVF9JTkRJQ0FUT1I2OwotCi0JCVNLX1UxNl9UT19ORVRXT1JLX09SREVSKFBhY2tldFR5cGUsICZwUGFja2V0LT5SbG10UGFja2V0VHlwZVswXSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJcFBhY2tldC0+UmFuZG9tW2ldID0gcEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl0uUmFuZG9tW2ldOwotCQl9Ci0JCQotCQlTS19VMTZfVE9fTkVUV09SS19PUkRFUigKLQkJCVNLX1JMTVRfUEFDS0VUX1ZFUlNJT04sICZwUGFja2V0LT5SbG10UGFja2V0VmVyc2lvblswXSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFNLX1BBQ0tFVF9EQVRBX0xFTjsgaSsrKSB7Ci0JCQlwUGFja2V0LT5EYXRhW2ldID0gMHgwMDsKLQkJfQotCi0JCUxlbmd0aCA9IFNLX1JMTVRfTUFYX1BBQ0tFVF9TSVpFOwkvKiBPciBzbWFsbGVyLiAqLwotCQlwTWItPkxlbmd0aCA9IExlbmd0aDsKLQkJcE1iLT5Qb3J0SWR4ID0gUG9ydE51bWJlcjsKLQkJTGVuZ3RoIC09IDE0OwotCQlTS19VMTZfVE9fTkVUV09SS19PUkRFUihMZW5ndGgsICZwUGFja2V0LT5UeXBlTGVuWzBdKTsKLQotCQlpZiAoUGFja2V0VHlwZSA9PSBTS19QQUNLRVRfQUxJVkUpIHsKLQkJCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLlR4SGVsbG9DdHMrKzsKLQkJfQotCX0KLQotCXJldHVybiAocE1iKTsKLX0JLyogU2tSbG10QnVpbGRQYWNrZXQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tSbG10QnVpbGRTcGFubmluZ1RyZWVQYWNrZXQgLSBidWlsZCBzcGFubmluZyB0cmVlIGNoZWNrIHBhY2tldAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIHNldHMgdXAgYSBCUERVIHBhY2tldCBmb3Igc3Bhbm5pbmcgdHJlZSBjaGVjay4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgotICogUmV0dXJuczoKLSAqCU5VTEwgb3IgcG9pbnRlciB0byBSTE1UIG1idWYKLSAqLwotUkxNVF9TVEFUSUMgU0tfTUJVRgkqU2tSbG10QnVpbGRTcGFubmluZ1RyZWVQYWNrZXQoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMglQb3J0TnVtYmVyKQkvKiBTZW5kaW5nIHBvcnQgKi8KLXsKLQl1bnNpZ25lZAkJCWk7Ci0JU0tfVTE2CQkJCUxlbmd0aDsKLQlTS19NQlVGCQkJCSpwTWI7Ci0JU0tfU1BUUkVFX1BBQ0tFVAkqcFNQYWNrZXQ7Ci0KLQlpZiAoKHBNYiA9IFNrRHJ2QWxsb2NSbG10TWJ1ZihwQUMsIElvQywgU0tfUkxNVF9NQVhfUEFDS0VUX1NJWkUpKSAhPQotCQlOVUxMKSB7Ci0JCXBTUGFja2V0ID0gKFNLX1NQVFJFRV9QQUNLRVQqKXBNYi0+cERhdGE7Ci0JCWZvciAoaSA9IDA7IGkgPCBTS19NQUNfQUREUl9MRU47IGkrKykgewotCQkJcFNQYWNrZXQtPkRzdEFkZHJbaV0gPSBCcmlkZ2VNY0FkZHIuYVtpXTsKLQkJCXBTUGFja2V0LT5TcmNBZGRyW2ldID0KLQkJCQlwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5DdXJyZW50TWFjQWRkcmVzcy5hW2ldOwotCQl9Ci0JCXBTUGFja2V0LT5EU2FwID0gU0tfUkxNVF9TUFRfRFNBUDsKLQkJcFNQYWNrZXQtPlNTYXAgPSBTS19STE1UX1NQVF9TU0FQOwotCQlwU1BhY2tldC0+Q3RybCA9IFNLX1JMTVRfU1BUX0NUUkw7Ci0KLQkJcFNQYWNrZXQtPlByb3RvY29sSWRbMF0gPSBTS19STE1UX1NQVF9QUk9UT0NPTF9JRDA7Ci0JCXBTUGFja2V0LT5Qcm90b2NvbElkWzFdID0gU0tfUkxNVF9TUFRfUFJPVE9DT0xfSUQxOwotCQlwU1BhY2tldC0+UHJvdG9jb2xWZXJzaW9uSWQgPSBTS19STE1UX1NQVF9QUk9UT0NPTF9WRVJTSU9OX0lEOwotCQlwU1BhY2tldC0+QnBkdVR5cGUgPSBTS19STE1UX1NQVF9CUERVX1RZUEU7Ci0JCXBTUGFja2V0LT5GbGFncyA9IFNLX1JMTVRfU1BUX0ZMQUdTOwotCQlwU1BhY2tldC0+Um9vdElkWzBdID0gU0tfUkxNVF9TUFRfUk9PVF9JRDA7Ci0JCXBTUGFja2V0LT5Sb290SWRbMV0gPSBTS19STE1UX1NQVF9ST09UX0lEMTsKLQkJcFNQYWNrZXQtPlJvb3RQYXRoQ29zdFswXSA9IFNLX1JMTVRfU1BUX1JPT1RfUEFUSF9DT1NUMDsKLQkJcFNQYWNrZXQtPlJvb3RQYXRoQ29zdFsxXSA9IFNLX1JMTVRfU1BUX1JPT1RfUEFUSF9DT1NUMTsKLQkJcFNQYWNrZXQtPlJvb3RQYXRoQ29zdFsyXSA9IFNLX1JMTVRfU1BUX1JPT1RfUEFUSF9DT1NUMjsKLQkJcFNQYWNrZXQtPlJvb3RQYXRoQ29zdFszXSA9IFNLX1JMTVRfU1BUX1JPT1RfUEFUSF9DT1NUMzsKLQkJcFNQYWNrZXQtPkJyaWRnZUlkWzBdID0gU0tfUkxNVF9TUFRfQlJJREdFX0lEMDsKLQkJcFNQYWNrZXQtPkJyaWRnZUlkWzFdID0gU0tfUkxNVF9TUFRfQlJJREdFX0lEMTsKLQotCQkvKgotCQkgKiBVc2UgbG9naWNhbCBNQUMgYWRkcmVzcyBhcyBicmlkZ2UgSUQgYW5kIGZpbHRlciB0aGVzZSBwYWNrZXRzCi0JCSAqIG9uIHJlY2VpdmUuCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0tfTUFDX0FERFJfTEVOOyBpKyspIHsKLQkJCXBTUGFja2V0LT5CcmlkZ2VJZFtpICsgMl0gPSBwU1BhY2tldC0+Um9vdElkW2kgKyAyXSA9Ci0JCQkJcEFDLT5BZGRyLk5ldFtwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5OZXQtPk5ldE51bWJlcl0uCi0JCQkJCUN1cnJlbnRNYWNBZGRyZXNzLmFbaV07Ci0JCX0KLQkJcFNQYWNrZXQtPlBvcnRJZFswXSA9IFNLX1JMTVRfU1BUX1BPUlRfSUQwOwotCQlwU1BhY2tldC0+UG9ydElkWzFdID0gU0tfUkxNVF9TUFRfUE9SVF9JRDE7Ci0JCXBTUGFja2V0LT5NZXNzYWdlQWdlWzBdID0gU0tfUkxNVF9TUFRfTVNHX0FHRTA7Ci0JCXBTUGFja2V0LT5NZXNzYWdlQWdlWzFdID0gU0tfUkxNVF9TUFRfTVNHX0FHRTE7Ci0JCXBTUGFja2V0LT5NYXhBZ2VbMF0gPSBTS19STE1UX1NQVF9NQVhfQUdFMDsKLQkJcFNQYWNrZXQtPk1heEFnZVsxXSA9IFNLX1JMTVRfU1BUX01BWF9BR0UxOwotCQlwU1BhY2tldC0+SGVsbG9UaW1lWzBdID0gU0tfUkxNVF9TUFRfSEVMTE9fVElNRTA7Ci0JCXBTUGFja2V0LT5IZWxsb1RpbWVbMV0gPSBTS19STE1UX1NQVF9IRUxMT19USU1FMTsKLQkJcFNQYWNrZXQtPkZvcndhcmREZWxheVswXSA9IFNLX1JMTVRfU1BUX0ZXRF9ERUxBWTA7Ci0JCXBTUGFja2V0LT5Gb3J3YXJkRGVsYXlbMV0gPSBTS19STE1UX1NQVF9GV0RfREVMQVkxOwotCi0JCUxlbmd0aCA9IFNLX1JMTVRfTUFYX1BBQ0tFVF9TSVpFOwkvKiBPciBzbWFsbGVyLiAqLwotCQlwTWItPkxlbmd0aCA9IExlbmd0aDsKLQkJcE1iLT5Qb3J0SWR4ID0gUG9ydE51bWJlcjsKLQkJTGVuZ3RoIC09IDE0OwotCQlTS19VMTZfVE9fTkVUV09SS19PUkRFUihMZW5ndGgsICZwU1BhY2tldC0+VHlwZUxlblswXSk7Ci0KLQkJcEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl0uVHhTcEhlbGxvUmVxQ3RzKys7Ci0JfQotCi0JcmV0dXJuIChwTWIpOwotfQkvKiBTa1JsbXRCdWlsZFNwYW5uaW5nVHJlZVBhY2tldCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRTZW5kIC0gYnVpbGQgYW5kIHNlbmQgY2hlY2sgcGFja2V0cwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRGVwZW5kaW5nIG9uIHRoZSBSTE1UIHN0YXRlIGFuZCB0aGUgY2hlY2tpbmcgc3RhdGUsIHNldmVyYWwgcGFja2V0cwotICoJYXJlIHNlbnQgdGhyb3VnaCB0aGUgaW5kaWNhdGVkIHBvcnQuCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nLgotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdFNlbmQoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMglQb3J0TnVtYmVyKQkvKiBTZW5kaW5nIHBvcnQgKi8KLXsKLQl1bnNpZ25lZAlqOwotCVNLX0VWUEFSQQlQYXJhOwotCVNLX1JMTVRfUE9SVAkqcFJQb3J0OwotCi0JcFJQb3J0ID0gJnBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdOwotCWlmIChwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5OZXQtPlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19MT0NfTElOSykgewotCQlpZiAocFJQb3J0LT5DaGVja2luZ1N0YXRlICYgKFNLX1JMTVRfUENTX1RYIHwgU0tfUkxNVF9QQ1NfUlgpKSB7Ci0JCQkvKiBQb3J0IGlzIHN1c3BpY2lvdXMuIFNlbmQgdGhlIFJMTVQgcGFja2V0IHRvIHRoZSBSTE1UIG1jIGFkZHIuICovCi0JCQlpZiAoKFBhcmEucFBhcmFQdHIgPSBTa1JsbXRCdWlsZFBhY2tldChwQUMsIElvQywgUG9ydE51bWJlciwKLQkJCQlTS19QQUNLRVRfQUxJVkUsICZwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXS5DdXJyZW50TWFjQWRkcmVzcywKLQkJCQkmU2tSbG10TWNBZGRyKSkgIT0gTlVMTCkgewotCQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUkxNVF9TRU5ELCBQYXJhKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCS8qCi0JCQkgKiBTZW5kIGEgZGlyZWN0ZWQgUkxNVCBwYWNrZXQgdG8gYWxsIHBvcnRzIHRoYXQgYXJlCi0JCQkgKiBjaGVja2VkIGJ5IHRoZSBpbmRpY2F0ZWQgcG9ydC4KLQkJCSAqLwotCQkJZm9yIChqID0gMDsgaiA8IHBSUG9ydC0+UG9ydHNDaGVja2VkOyBqKyspIHsKLQkJCQlpZiAoKFBhcmEucFBhcmFQdHIgPSBTa1JsbXRCdWlsZFBhY2tldChwQUMsIElvQywgUG9ydE51bWJlciwKLQkJCQkJU0tfUEFDS0VUX0FMSVZFLCAmcEFDLT5BZGRyLlBvcnRbUG9ydE51bWJlcl0uQ3VycmVudE1hY0FkZHJlc3MsCi0JCQkJCSZwUlBvcnQtPlBvcnRDaGVja1tqXS5DaGVja0FkZHIpKSAhPSBOVUxMKSB7Ci0JCQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUkxNVF9TRU5ELCBQYXJhKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKHBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+UmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX1NFRykgJiYKLQkJKHBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+Q2hlY2tpbmdTdGF0ZSAmIFNLX1JMTVRfUkNTX1NFTkRfU0VHKSkgewotCQkvKgotCQkgKiBTZW5kIGEgQlBEVSBwYWNrZXQgdG8gbWFrZSBhIGNvbm5lY3RlZCBzd2l0Y2ggdGVsbCB1cwotCQkgKiB0aGUgY29ycmVjdCByb290IGJyaWRnZS4KLQkJICovCi0JCWlmICgoUGFyYS5wUGFyYVB0ciA9Ci0JCQlTa1JsbXRCdWlsZFNwYW5uaW5nVHJlZVBhY2tldChwQUMsIElvQywgUG9ydE51bWJlcikpICE9IE5VTEwpIHsKLQkJCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+Q2hlY2tpbmdTdGF0ZSAmPSB+U0tfUkxNVF9SQ1NfU0VORF9TRUc7Ci0JCQlwUlBvcnQtPlJvb3RJZFNldCA9IFNLX0ZBTFNFOwotCi0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1JMTVRfU0VORCwgUGFyYSk7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9UWCwKLQkJCQkoIlNrUmxtdFNlbmQ6IEJQRFUgUGFja2V0IG9uIFBvcnQgJXUuXG4iLCBQb3J0TnVtYmVyKSkKLQkJfQotCX0KLQlyZXR1cm47Ci19CS8qIFNrUmxtdFNlbmQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tSbG10UG9ydFJlY2VpdmVzIC0gY2hlY2sgaWYgcG9ydCBpcyAoZ29pbmcpIGRvd24gYW5kIGJyaW5nIGl0IHVwCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIGEgcG9ydCB3aG8gcmVjZWl2ZWQgYSBub24tQlBEVSBwYWNrZXQKLSAqCW5lZWRzIHRvIGdvIHVwIG9yIG5lZWRzIHRvIGJlIHN0b3BwZWQgZ29pbmcgZG93bi4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcuCi0gKi8KLVJMTVRfU1RBVElDIHZvaWQJU2tSbG10UG9ydFJlY2VpdmVzKAotU0tfQUMJKnBBQywJCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMglQb3J0TnVtYmVyKQkJLyogUG9ydCB0byBjaGVjayAqLwotewotCVNLX1JMTVRfUE9SVAkqcFJQb3J0OwotCVNLX0VWUEFSQQkJUGFyYTsKLQotCXBSUG9ydCA9ICZwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXTsKLQlwUlBvcnQtPlBvcnROb1J4ID0gU0tfRkFMU0U7Ci0KLQlpZiAoKHBSUG9ydC0+UG9ydFN0YXRlID09IFNLX1JMTVRfUFNfRE9XTikgJiYKLQkJIShwUlBvcnQtPkNoZWNraW5nU3RhdGUgJiBTS19STE1UX1BDU19UWCkpIHsKLQkJLyoKLQkJICogUG9ydCBpcyBtYXJrZWQgZG93biAocngpLCBidXQgcmVjZWl2ZWQgYSBub24tQlBEVSBwYWNrZXQuCi0JCSAqIEJyaW5nIGl0IHVwLgotCQkgKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfUlgsCi0JCQkoIlNrUmxtdFBhY2tldFJlY2VpdmU6IFJlY2VpdmVkIG9uIFBvcnREb3duLlxuIikpCi0KLQkJcFJQb3J0LT5Qb3J0U3RhdGUgPSBTS19STE1UX1BTX0dPSU5HX1VQOwotCQlwUlBvcnQtPkd1VGltZVN0YW1wID0gU2tPc0dldFRpbWUocEFDKTsKLQkJUGFyYS5QYXJhMzJbMF0gPSBQb3J0TnVtYmVyOwotCQlQYXJhLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JCVNrVGltZXJTdGFydChwQUMsIElvQywgJnBSUG9ydC0+VXBUaW1lciwgU0tfUkxNVF9QT1JUVVBfVElNX1ZBTCwKLQkJCVNLR0VfUkxNVCwgU0tfUkxNVF9QT1JUVVBfVElNLCBQYXJhKTsKLQkJcFJQb3J0LT5DaGVja2luZ1N0YXRlICY9IH5TS19STE1UX1BDU19SWDsKLQkJLyogcEFDLT5SbG10LkNoZWNrU3dpdGNoID0gU0tfVFJVRTsgKi8KLQkJU2tSbG10Q2hlY2tTd2l0Y2gocEFDLCBJb0MsIHBSUG9ydC0+TmV0LT5OZXROdW1iZXIpOwotCX0JLyogUG9ydERvd24gJiYgIVN1c3BlY3RUeCAqLwotCWVsc2UgaWYgKHBSUG9ydC0+Q2hlY2tpbmdTdGF0ZSAmIFNLX1JMTVRfUENTX1JYKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX1JYLAotCQkJKCJTa1JsbXRQYWNrZXRSZWNlaXZlOiBTdG9wIGJyaW5naW5nIHBvcnQgZG93bi5cbiIpKQotCQlTa1RpbWVyU3RvcChwQUMsIElvQywgJnBSUG9ydC0+RG93blJ4VGltZXIpOwotCQlwUlBvcnQtPkNoZWNraW5nU3RhdGUgJj0gflNLX1JMTVRfUENTX1JYOwotCQkvKiBwQUMtPlJsbXQuQ2hlY2tTd2l0Y2ggPSBTS19UUlVFOyAqLwotCQlTa1JsbXRDaGVja1N3aXRjaChwQUMsIElvQywgcFJQb3J0LT5OZXQtPk5ldE51bWJlcik7Ci0JfQkvKiBQb3J0R29pbmdEb3duICovCi0KLQlyZXR1cm47Ci19CS8qIFNrUmxtdFBvcnRSZWNlaXZlcyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRQYWNrZXRSZWNlaXZlIC0gcmVjZWl2ZSBhIHBhY2tldCBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgZXhhbWluZXMgYSBwYWNrZXQgbW9yZSBjbG9zZWx5IHRoYW4gU0tfUkxNVF9MT09LQUhFQUQuCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nLgotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdFBhY2tldFJlY2VpdmUoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19NQlVGCSpwTWIpCS8qIFJlY2VpdmVkIHBhY2tldCAqLwotewotI2lmZGVmIHhERUJVRwotCWV4dGVybgl2b2lkIER1bXBEYXRhKGNoYXIgKnAsIGludCBzaXplKTsKLSNlbmRpZgkvKiBERUJVRyAqLwotCWludAkJCQkJaTsKLQl1bnNpZ25lZAkJCWo7Ci0JU0tfVTE2CQkJCVBhY2tldFR5cGU7Ci0JU0tfVTMyCQkJCVBvcnROdW1iZXI7Ci0JU0tfQUREUl9QT1JUCQkqcEFQb3J0OwotCVNLX1JMTVRfUE9SVAkJKnBSUG9ydDsKLQlTS19STE1UX1BBQ0tFVAkJKnBSUGFja2V0OwotCVNLX1NQVFJFRV9QQUNLRVQJKnBTUGFja2V0OwotCVNLX0VWUEFSQQkJCVBhcmE7Ci0KLQlQb3J0TnVtYmVyCT0gcE1iLT5Qb3J0SWR4OwotCXBBUG9ydCA9ICZwQUMtPkFkZHIuUG9ydFtQb3J0TnVtYmVyXTsKLQlwUlBvcnQgPSAmcEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl07Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9SWCwKLQkJKCJTa1JsbXRQYWNrZXRSZWNlaXZlOiBQb3J0TnVtYmVyID09ICVkLlxuIiwgUG9ydE51bWJlcikpCi0KLQlwUlBhY2tldCA9IChTS19STE1UX1BBQ0tFVCopcE1iLT5wRGF0YTsKLQlwU1BhY2tldCA9IChTS19TUFRSRUVfUEFDS0VUKilwUlBhY2tldDsKLQotI2lmZGVmIHhERUJVRwotCUR1bXBEYXRhKChjaGFyICopcFJQYWNrZXQsIDMyKTsKLSNlbmRpZgkvKiBERUJVRyAqLwotCi0JaWYgKChwUlBvcnQtPlBhY2tldHNQZXJUaW1lU2xvdCAtIHBSUG9ydC0+QnBkdVBhY2tldHNQZXJUaW1lU2xvdCkgIT0gMCkgewotCQlTa1JsbXRQb3J0UmVjZWl2ZXMocEFDLCBJb0MsIFBvcnROdW1iZXIpOwotCX0KLQkKLQkvKiBDaGVjayBkZXN0aW5hdGlvbiBhZGRyZXNzLiAqLwotCi0JaWYgKCFTS19BRERSX0VRVUFMKHBBUG9ydC0+Q3VycmVudE1hY0FkZHJlc3MuYSwgcFJQYWNrZXQtPkRzdEFkZHIpICYmCi0JCSFTS19BRERSX0VRVUFMKFNrUmxtdE1jQWRkci5hLCBwUlBhY2tldC0+RHN0QWRkcikgJiYKLQkJIVNLX0FERFJfRVFVQUwoQnJpZGdlTWNBZGRyLmEsIHBSUGFja2V0LT5Ec3RBZGRyKSkgewotCi0JCS8qIE5vdCBzZW50IHRvIGN1cnJlbnQgTUFDIG9yIHJlZ2lzdGVyZWQgTUMgYWRkcmVzcyA9PiBUcmFzaCBpdC4gKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfUlgsCi0JCQkoIlNrUmxtdFBhY2tldFJlY2VpdmU6IE5vdCBmb3IgbWUuXG4iKSkKLQotCQlTa0RydkZyZWVSbG10TWJ1ZihwQUMsIElvQywgcE1iKTsKLQkJcmV0dXJuOwotCX0KLQllbHNlIGlmIChTS19BRERSX0VRVUFMKHBBUG9ydC0+Q3VycmVudE1hY0FkZHJlc3MuYSwgcFJQYWNrZXQtPlNyY0FkZHIpKSB7Ci0KLQkJLyoKLQkJICogV2FzIHNlbnQgYnkgc2FtZSBwb3J0IChtYXkgaGFwcGVuIGR1cmluZyBwb3J0IHN3aXRjaGluZwotCQkgKiBvciBpbiBjYXNlIG9mIGR1cGxpY2F0ZSBNQUMgYWRkcmVzc2VzKS4KLQkJICovCi0KLQkJLyoKLQkJICogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBhZGRyZXNzIGhlcmU6Ci0JCSAqIElmIFBhY2tldC5SYW5kb20gIT0gTXkuUmFuZG9tID0+IER1cEFkZHIuCi0JCSAqLwotCQlmb3IgKGkgPSAzOyBpID49IDA7IGktLSkgewotCQkJaWYgKHBSUG9ydC0+UmFuZG9tW2ldICE9IHBSUGFja2V0LT5SYW5kb21baV0pIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIENBVVRJT046IERvIG5vdCBjaGVjayBmb3IgZHVwbGljYXRlIE1BQyBhZGRyZXNzIGluIFJMTVQgQWxpdmUgUmVwbHkKLQkJICogcGFja2V0cyAodGhleSBoYXZlIHRoZSBMTENfQ09NTUFORF9SRVNQT05TRV9CSVQgc2V0IGluCi0JCSAqIHBSUGFja2V0LT5TU2FwKS4KLQkJICovCi0JCWlmIChpID49IDAgJiYgcFJQYWNrZXQtPkRTYXAgPT0gU0tfUkxNVF9EU0FQICYmCi0JCQlwUlBhY2tldC0+Q3RybCA9PSBTS19STE1UX0NUUkwgJiYKLQkJCXBSUGFja2V0LT5TU2FwID09IFNLX1JMTVRfU1NBUCAmJgotCQkJcFJQYWNrZXQtPkluZGljYXRvclswXSA9PSBTS19STE1UX0lORElDQVRPUjAgJiYKLQkJCXBSUGFja2V0LT5JbmRpY2F0b3JbMV0gPT0gU0tfUkxNVF9JTkRJQ0FUT1IxICYmCi0JCQlwUlBhY2tldC0+SW5kaWNhdG9yWzJdID09IFNLX1JMTVRfSU5ESUNBVE9SMiAmJgotCQkJcFJQYWNrZXQtPkluZGljYXRvclszXSA9PSBTS19STE1UX0lORElDQVRPUjMgJiYKLQkJCXBSUGFja2V0LT5JbmRpY2F0b3JbNF0gPT0gU0tfUkxNVF9JTkRJQ0FUT1I0ICYmCi0JCQlwUlBhY2tldC0+SW5kaWNhdG9yWzVdID09IFNLX1JMTVRfSU5ESUNBVE9SNSAmJgotCQkJcFJQYWNrZXQtPkluZGljYXRvcls2XSA9PSBTS19STE1UX0lORElDQVRPUjYpIHsKLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX1JYLAotCQkJCSgiU2tSbG10UGFja2V0UmVjZWl2ZTogRHVwbGljYXRlIE1BQyBBZGRyZXNzLlxuIikpCi0KLQkJCS8qIEVycm9yIExvZyBlbnRyeS4gKi8KLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9DT01NLCBTS0VSUl9STE1UX0UwMDYsIFNLRVJSX1JMTVRfRTAwNl9NU0cpOwotCQl9Ci0JCWVsc2UgewotCQkJLyogU2ltcGx5IHRyYXNoIGl0LiAqLwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfUlgsCi0JCQkJKCJTa1JsbXRQYWNrZXRSZWNlaXZlOiBTZW50IGJ5IG1lLlxuIikpCi0JCX0KLQotCQlTa0RydkZyZWVSbG10TWJ1ZihwQUMsIElvQywgcE1iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIENoZWNrIFN1c3BlY3RUeCBlbnRyaWVzLiAqLwotCWlmIChwUlBvcnQtPlBvcnRzU3VzcGVjdCA+IDApIHsKLQkJZm9yIChqID0gMDsgaiA8IHBSUG9ydC0+UG9ydHNDaGVja2VkOyBqKyspIHsKLQkJCWlmIChwUlBvcnQtPlBvcnRDaGVja1tqXS5TdXNwZWN0VHggJiYKLQkJCQlTS19BRERSX0VRVUFMKAotCQkJCQlwUlBhY2tldC0+U3JjQWRkciwgcFJQb3J0LT5Qb3J0Q2hlY2tbal0uQ2hlY2tBZGRyLmEpKSB7Ci0JCQkJcFJQb3J0LT5Qb3J0Q2hlY2tbal0uU3VzcGVjdFR4ID0gU0tfRkFMU0U7Ci0JCQkJcFJQb3J0LT5Qb3J0c1N1c3BlY3QtLTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCS8qIERldGVybWluZSB0eXBlIG9mIHBhY2tldC4gKi8KLQlpZiAocFJQYWNrZXQtPkRTYXAgPT0gU0tfUkxNVF9EU0FQICYmCi0JCXBSUGFja2V0LT5DdHJsID09IFNLX1JMTVRfQ1RSTCAmJgotCQkocFJQYWNrZXQtPlNTYXAgJiB+TExDX0NPTU1BTkRfUkVTUE9OU0VfQklUKSA9PSBTS19STE1UX1NTQVAgJiYKLQkJcFJQYWNrZXQtPkluZGljYXRvclswXSA9PSBTS19STE1UX0lORElDQVRPUjAgJiYKLQkJcFJQYWNrZXQtPkluZGljYXRvclsxXSA9PSBTS19STE1UX0lORElDQVRPUjEgJiYKLQkJcFJQYWNrZXQtPkluZGljYXRvclsyXSA9PSBTS19STE1UX0lORElDQVRPUjIgJiYKLQkJcFJQYWNrZXQtPkluZGljYXRvclszXSA9PSBTS19STE1UX0lORElDQVRPUjMgJiYKLQkJcFJQYWNrZXQtPkluZGljYXRvcls0XSA9PSBTS19STE1UX0lORElDQVRPUjQgJiYKLQkJcFJQYWNrZXQtPkluZGljYXRvcls1XSA9PSBTS19STE1UX0lORElDQVRPUjUgJiYKLQkJcFJQYWNrZXQtPkluZGljYXRvcls2XSA9PSBTS19STE1UX0lORElDQVRPUjYpIHsKLQotCQkvKiBJdCdzIGFuIFJMTVQgcGFja2V0LiAqLwotCQlQYWNrZXRUeXBlID0gKFNLX1UxNikoKHBSUGFja2V0LT5SbG10UGFja2V0VHlwZVswXSA8PCA4KSB8Ci0JCQlwUlBhY2tldC0+UmxtdFBhY2tldFR5cGVbMV0pOwotCi0JCXN3aXRjaCAoUGFja2V0VHlwZSkgewotCQljYXNlIFNLX1BBQ0tFVF9BTk5PVU5DRToJLyogTm90IHlldCB1c2VkLiAqLwotI2lmIDAKLQkJCS8qIEJ1aWxkIHRoZSBjaGVjayBjaGFpbi4gKi8KLQkJCVNrUmxtdEJ1aWxkQ2hlY2tDaGFpbihwQUMpOwotI2VuZGlmCS8qIDAgKi8KLQotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfUlgsCi0JCQkJKCJTa1JsbXRQYWNrZXRSZWNlaXZlOiBBbm5vdW5jZS5cbiIpKQotCi0JCQlTa0RydkZyZWVSbG10TWJ1ZihwQUMsIElvQywgcE1iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU0tfUEFDS0VUX0FMSVZFOgotCQkJaWYgKHBSUGFja2V0LT5TU2FwICYgTExDX0NPTU1BTkRfUkVTUE9OU0VfQklUKSB7Ci0JCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfUlgsCi0JCQkJCSgiU2tSbG10UGFja2V0UmVjZWl2ZTogQWxpdmUgUmVwbHkuXG4iKSkKLQotCQkJCWlmICghKHBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLlByb21Nb2RlICYgU0tfUFJPTV9NT0RFX0xMQykgfHwKLQkJCQkJU0tfQUREUl9FUVVBTCgKLQkJCQkJCXBSUGFja2V0LT5Ec3RBZGRyLCBwQVBvcnQtPkN1cnJlbnRNYWNBZGRyZXNzLmEpKSB7Ci0JCQkJCS8qIE9idmlvdXNseSB3ZSBjb3VsZCBzZW5kIHNvbWV0aGluZy4gKi8KLQkJCQkJaWYgKHBSUG9ydC0+Q2hlY2tpbmdTdGF0ZSAmIFNLX1JMTVRfUENTX1RYKSB7Ci0JCQkJCQlwUlBvcnQtPkNoZWNraW5nU3RhdGUgJj0gIH5TS19STE1UX1BDU19UWDsKLQkJCQkJCVNrVGltZXJTdG9wKHBBQywgSW9DLCAmcFJQb3J0LT5Eb3duVHhUaW1lcik7Ci0JCQkJCX0KLQotCQkJCQlpZiAoKHBSUG9ydC0+UG9ydFN0YXRlID09IFNLX1JMTVRfUFNfRE9XTikgJiYKLQkJCQkJCSEocFJQb3J0LT5DaGVja2luZ1N0YXRlICYgU0tfUkxNVF9QQ1NfUlgpKSB7Ci0JCQkJCQlwUlBvcnQtPlBvcnRTdGF0ZSA9IFNLX1JMTVRfUFNfR09JTkdfVVA7Ci0JCQkJCQlwUlBvcnQtPkd1VGltZVN0YW1wID0gU2tPc0dldFRpbWUocEFDKTsKLQotCQkJCQkJU2tUaW1lclN0b3AocEFDLCBJb0MsICZwUlBvcnQtPkRvd25UeFRpbWVyKTsKLQotCQkJCQkJUGFyYS5QYXJhMzJbMF0gPSBQb3J0TnVtYmVyOwotCQkJCQkJUGFyYS5QYXJhMzJbMV0gPSAoU0tfVTMyKS0xOwotCQkJCQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcFJQb3J0LT5VcFRpbWVyLAotCQkJCQkJCVNLX1JMTVRfUE9SVFVQX1RJTV9WQUwsIFNLR0VfUkxNVCwKLQkJCQkJCQlTS19STE1UX1BPUlRVUF9USU0sIFBhcmEpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJLyogTWFyayBzZW5kaW5nIHBvcnQgYXMgYWxpdmU/ICovCi0JCQkJU2tEcnZGcmVlUmxtdE1idWYocEFDLCBJb0MsIHBNYik7Ci0JCQl9Ci0JCQllbHNlIHsJLyogQWxpdmUgUmVxdWVzdCBQYWNrZXQuICovCi0JCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfUlgsCi0JCQkJCSgiU2tSbG10UGFja2V0UmVjZWl2ZTogQWxpdmUgUmVxdWVzdC5cbiIpKQotCi0JCQkJcFJQb3J0LT5SeEhlbGxvQ3RzKys7Ci0KLQkJCQkvKiBBbnN3ZXIuICovCi0JCQkJZm9yIChpID0gMDsgaSA8IFNLX01BQ19BRERSX0xFTjsgaSsrKSB7Ci0JCQkJCXBSUGFja2V0LT5Ec3RBZGRyW2ldID0gcFJQYWNrZXQtPlNyY0FkZHJbaV07Ci0JCQkJCXBSUGFja2V0LT5TcmNBZGRyW2ldID0KLQkJCQkJCXBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbaV07Ci0JCQkJfQotCQkJCXBSUGFja2V0LT5TU2FwIHw9IExMQ19DT01NQU5EX1JFU1BPTlNFX0JJVDsKLQotCQkJCVBhcmEucFBhcmFQdHIgPSBwTWI7Ci0JCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9STE1UX1NFTkQsIFBhcmEpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTS19QQUNLRVRfQ0hFQ0tfVFg6Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9SWCwKLQkJCQkoIlNrUmxtdFBhY2tldFJlY2VpdmU6IENoZWNrIHlvdXIgdHggbGluZS5cbiIpKQotCi0JCQkvKiBBIHBvcnQgY2hlY2tpbmcgdXMgcmVxdWVzdHMgdXMgdG8gY2hlY2sgb3VyIHR4IGxpbmUuICovCi0JCQlwUlBvcnQtPkNoZWNraW5nU3RhdGUgfD0gU0tfUkxNVF9QQ1NfVFg7Ci0KLQkJCS8qIFN0YXJ0IFBvcnREb3duVHggdGltZXIuICovCi0JCQlQYXJhLlBhcmEzMlswXSA9IFBvcnROdW1iZXI7Ci0JCQlQYXJhLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwUlBvcnQtPkRvd25UeFRpbWVyLAotCQkJCVNLX1JMTVRfUE9SVERPV05fVElNX1ZBTCwgU0tHRV9STE1ULAotCQkJCVNLX1JMTVRfUE9SVERPV05fVFhfVElNLCBQYXJhKTsKLQotCQkJU2tEcnZGcmVlUmxtdE1idWYocEFDLCBJb0MsIHBNYik7Ci0KLQkJCWlmICgoUGFyYS5wUGFyYVB0ciA9IFNrUmxtdEJ1aWxkUGFja2V0KHBBQywgSW9DLCBQb3J0TnVtYmVyLAotCQkJCVNLX1BBQ0tFVF9BTElWRSwgJnBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLAotCQkJCSZTa1JsbXRNY0FkZHIpKSAhPSBOVUxMKSB7Ci0JCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9STE1UX1NFTkQsIFBhcmEpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTS19QQUNLRVRfQUREUl9DSEFOR0VEOgotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfUlgsCi0JCQkJKCJTa1JsbXRQYWNrZXRSZWNlaXZlOiBBZGRyZXNzIENoYW5nZS5cbiIpKQotCi0JCQkvKiBCdWlsZCB0aGUgY2hlY2sgY2hhaW4uICovCi0JCQlTa1JsbXRCdWlsZENoZWNrQ2hhaW4ocEFDLCBwUlBvcnQtPk5ldC0+TmV0TnVtYmVyKTsKLQkJCVNrRHJ2RnJlZVJsbXRNYnVmKHBBQywgSW9DLCBwTWIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX1JYLAotCQkJCSgiU2tSbG10UGFja2V0UmVjZWl2ZTogVW5rbm93biBSTE1UIHBhY2tldC5cbiIpKQotCi0JCQkvKiBSQTs6OzogPz8/ICovCi0JCQlTa0RydkZyZWVSbG10TWJ1ZihwQUMsIElvQywgcE1iKTsKLQkJfQotCX0KLQllbHNlIGlmIChwU1BhY2tldC0+RFNhcCA9PSBTS19STE1UX1NQVF9EU0FQICYmCi0JCXBTUGFja2V0LT5DdHJsID09IFNLX1JMTVRfU1BUX0NUUkwgJiYKLQkJKHBTUGFja2V0LT5TU2FwICYgfkxMQ19DT01NQU5EX1JFU1BPTlNFX0JJVCkgPT0gU0tfUkxNVF9TUFRfU1NBUCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9SWCwKLQkJCSgiU2tSbG10UGFja2V0UmVjZWl2ZTogQlBEVSBQYWNrZXQuXG4iKSkKLQotCQkvKiBTcGFubmluZyBUcmVlIHBhY2tldC4gKi8KLQkJcFJQb3J0LT5SeFNwSGVsbG9DdHMrKzsKLQotCQlpZiAoIVNLX0FERFJfRVFVQUwoJnBTUGFja2V0LT5Sb290SWRbMl0sICZwQUMtPkFkZHIuTmV0W3BBQy0+UmxtdC4KLQkJCVBvcnRbUG9ydE51bWJlcl0uTmV0LT5OZXROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLmFbMF0pKSB7Ci0JCQkvKgotCQkJICogQ2hlY2sgc2VnbWVudGF0aW9uIGlmIGEgbmV3IHJvb3QgYnJpZGdlIGlzIHNldCBhbmQKLQkJCSAqIHRoZSBzZWdtZW50YXRpb24gY2hlY2sgaXMgbm90IGN1cnJlbnRseSBydW5uaW5nLgotCQkJICovCi0JCQlpZiAoIVNLX0FERFJfRVFVQUwoJnBTUGFja2V0LT5Sb290SWRbMl0sICZwUlBvcnQtPlJvb3QuSWRbMl0pICYmCi0JCQkJKHBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+TGlua3NVcCA+IDEpICYmCi0JCQkJKHBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+UmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX1NFRykKLQkJCQkhPSAwICYmIChwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5OZXQtPkNoZWNraW5nU3RhdGUgJgotCQkJCVNLX1JMTVRfUkNTX1NFRykgPT0gMCkgewotCQkJCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+Q2hlY2tpbmdTdGF0ZSB8PQotCQkJCQlTS19STE1UX1JDU19TVEFSVF9TRUcgfCBTS19STE1UX1JDU19TRU5EX1NFRzsKLQkJCX0KLQotCQkJLyogU3RvcmUgdHJlZSB2aWV3IG9mIHRoaXMgcG9ydC4gKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCQlwUlBvcnQtPlJvb3QuSWRbaV0gPSBwU1BhY2tldC0+Um9vdElkW2ldOwotCQkJfQotCQkJcFJQb3J0LT5Sb290SWRTZXQgPSBTS19UUlVFOwotCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9EVU1QLAotCQkJCSgiUm9vdCBJRCAlZDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4LlxuIiwKLQkJCQkJUG9ydE51bWJlciwKLQkJCQkJcFJQb3J0LT5Sb290LklkWzBdLCBwUlBvcnQtPlJvb3QuSWRbMV0sCi0JCQkJCXBSUG9ydC0+Um9vdC5JZFsyXSwgcFJQb3J0LT5Sb290LklkWzNdLAotCQkJCQlwUlBvcnQtPlJvb3QuSWRbNF0sIHBSUG9ydC0+Um9vdC5JZFs1XSwKLQkJCQkJcFJQb3J0LT5Sb290LklkWzZdLCBwUlBvcnQtPlJvb3QuSWRbN10pKQotCQl9Ci0KLQkJU2tEcnZGcmVlUmxtdE1idWYocEFDLCBJb0MsIHBNYik7Ci0JCWlmICgocEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl0uTmV0LT5DaGVja2luZ1N0YXRlICYKLQkJCVNLX1JMTVRfUkNTX1JFUE9SVF9TRUcpICE9IDApIHsKLQkJCVNrUmxtdENoZWNrU2VnKHBBQywgSW9DLCBwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5OZXQtPk5ldE51bWJlcik7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX1JYLAotCQkJKCJTa1JsbXRQYWNrZXRSZWNlaXZlOiBVbmtub3duIFBhY2tldCBUeXBlLlxuIikpCi0KLQkJLyogVW5rbm93biBwYWNrZXQuICovCi0JCVNrRHJ2RnJlZVJsbXRNYnVmKHBBQywgSW9DLCBwTWIpOwotCX0KLQlyZXR1cm47Ci19CS8qIFNrUmxtdFBhY2tldFJlY2VpdmUgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tSbG10Q2hlY2tQb3J0IC0gY2hlY2sgaWYgYSBwb3J0IHdvcmtzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIGEgcG9ydCB3aG9zZSBsaW5rIGlzIHVwIHJlY2VpdmVkIHNvbWV0aGluZwotICoJYW5kIGlmIGl0IHNlZW1zIHRvIHRyYW5zbWl0IHN1Y2Nlc3NmdWxseS4KLSAqCi0gKgkjIFBvcnRTdGF0ZTogUHNJbml0LCBQc0xpbmtEb3duLCBQc0Rvd24sIFBzR29pbmdVcCwgUHNVcAotICoJIyBQb3J0Q2hlY2tpbmdTdGF0ZSAoQml0ZmllbGQpOiBDaGtUeCwgQ2hrUngsIENoa1NlZwotICoJIyBSbG10Q2hlY2tpbmdTdGF0ZSAoQml0ZmllbGQpOiBDaGtTZWcsIFN0YXJ0Q2hrU2VnLCBSZXBvcnRTZWcKLSAqCi0gKglpZiAoUnggLSBSeEJwZHUgPT0gMCkgewkjIE5vIHJ4LgotICoJCWlmIChzdGF0ZSA9PSBQc1VwKSB7Ci0gKgkJCVBvcnRDaGVja2luZ1N0YXRlIHw9IENoa1J4Ci0gKgkJfQotICoJCWlmIChNb2RlQ2hlY2tTZWcgJiYgKFRpbWVvdXQgPT0KLSAqCQkJVE9fU0hPUlRFTihSTE1UX0RFRkFVTFRfVElNRU9VVCkpKSB7Ci0gKgkJCVJsbXRDaGVja2luZ1N0YXRlIHw9IENoa1NlZykKLSAqCQkJUG9ydENoZWNraW5nU3RhdGUgfD0gQ2hrU2VnCi0gKgkJfQotICoJCU5ld1RpbWVvdXQgPSBUT19TSE9SVEVOKFRpbWVvdXQpCi0gKgkJaWYgKE5ld1RpbWVvdXQgPCBSTE1UX01JTl9USU1FT1VUKSB7Ci0gKgkJCU5ld1RpbWVvdXQgPSBSTE1UX01JTl9USU1FT1VUCi0gKgkJCVBvcnRTdGF0ZSA9IFBzRG93bgotICoJCQkuLi4KLSAqCQl9Ci0gKgl9Ci0gKgllbHNlIHsJIyBzb21ldGhpbmcgd2FzIHJlY2VpdmVkCi0gKgkJIyBTZXQgY291bnRlciB0byAwIGF0IExpbmtEb3duPwotICoJCSMgICBObyAtIHJ4IG1heSBiZSByZXBvcnRlZCBhZnRlciBMaW5rRG93biA/Pz8KLSAqCQlQb3J0Q2hlY2tpbmdTdGF0ZSAmPSB+Q2hrUngKLSAqCQlOZXdUaW1lb3V0ID0gUkxNVF9ERUZBVUxUX1RJTUVPVVQKLSAqCQlpZiAoUnhBY2sgPT0gMCkgewotICoJCQlwb3NzaWJsZSByZWFzb25zOgotICoJCQlpcyBteSB0eCBsaW5lIGJhZD8gLS0KLSAqCQkJCXNlbmQgUkxNVCBtdWx0aWNhc3QgYW5kIHJlcG9ydAotICoJCQkJYmFjayBpbnRlcm5hbGx5PyAob25seSBwb3NzaWJsZQotICoJCQkJYmV0d2VlbiBwb3J0cyBvbiBzYW1lIGFkYXB0ZXIpCi0gKgkJfQotICoJCWlmIChSeENoayA9PSAwKSB7Ci0gKgkJCXBvc3NpYmxlIHJlYXNvbnM6Ci0gKgkJCS0gdHggbGluZSBvZiBwb3J0IHNldCB0byBjaGVjayBtZQotICoJCQkgIG1heWJlIGJhZAotICoJCQktIG5vIG90aGVyIHBvcnQvYWRhcHRlciBhdmFpbGFibGUgb3Igc2V0Ci0gKgkJCSAgdG8gY2hlY2sgbWUKLSAqCQkJLSBhZGFwdGVyIGNoZWNraW5nIG1lIGhhcyBhIGxvbmdlcgotICoJCQkgIHRpbWVvdXQKLSAqCQkJPz8/IGFueXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgaGVyZT8KLSAqCQl9Ci0gKgl9Ci0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoKLSAqIFJldHVybnM6Ci0gKglOZXcgdGltZW91dCB2YWx1ZS4KLSAqLwotUkxNVF9TVEFUSUMgU0tfVTMyCVNrUmxtdENoZWNrUG9ydCgKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gQ29udGV4dCAqLwotU0tfVTMyCVBvcnROdW1iZXIpCS8qIFBvcnQgdG8gY2hlY2sgKi8KLXsKLQl1bnNpZ25lZAkJaTsKLQlTS19VMzIJCQlOZXdUaW1lb3V0OwotCVNLX1JMTVRfUE9SVAkqcFJQb3J0OwotCVNLX0VWUEFSQQkJUGFyYTsKLQotCXBSUG9ydCA9ICZwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXTsKLQotCWlmICgocFJQb3J0LT5QYWNrZXRzUGVyVGltZVNsb3QgLSBwUlBvcnQtPkJwZHVQYWNrZXRzUGVyVGltZVNsb3QpID09IDApIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU2tSbG10Q2hlY2tQb3J0ICVkOiBObyAoJWQpIHJlY2VpdmVzIGluIGxhc3QgdGltZSBzbG90LlxuIiwKLQkJCQlQb3J0TnVtYmVyLCBwUlBvcnQtPlBhY2tldHNQZXJUaW1lU2xvdCkpCi0KLQkJLyoKLQkJICogQ2hlY2sgc2VnbWVudGF0aW9uIGlmIHRoZXJlIHdhcyBubyByZWNlaXZlIGF0IGxlYXN0IHR3aWNlCi0JCSAqIGluIGEgcm93IChQb3J0Tm9SeCBpcyBhbHJlYWR5IHNldCkgYW5kIHRoZSBzZWdtZW50YXRpb24KLQkJICogY2hlY2sgaXMgbm90IGN1cnJlbnRseSBydW5uaW5nLgotCQkgKi8KLQotCQlpZiAocFJQb3J0LT5Qb3J0Tm9SeCAmJiAocEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl0uTmV0LT5MaW5rc1VwID4gMSkgJiYKLQkJCShwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5OZXQtPlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19TRUcpICYmCi0JCQkhKHBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+Q2hlY2tpbmdTdGF0ZSAmIFNLX1JMTVRfUkNTX1NFRykpIHsKLQkJCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+Q2hlY2tpbmdTdGF0ZSB8PQotCQkJCVNLX1JMTVRfUkNTX1NUQVJUX1NFRyB8IFNLX1JMTVRfUkNTX1NFTkRfU0VHOwotCQl9Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU2tSbG10Q2hlY2tQb3J0OiBQb3J0c1N1c3BlY3QgJWQsIFBjc1J4ICVkLlxuIiwKLQkJCQlwUlBvcnQtPlBvcnRzU3VzcGVjdCwgcFJQb3J0LT5DaGVja2luZ1N0YXRlICYgU0tfUkxNVF9QQ1NfUlgpKQotCi0JCWlmIChwUlBvcnQtPlBvcnRTdGF0ZSAhPSBTS19STE1UX1BTX0RPV04pIHsKLQkJCU5ld1RpbWVvdXQgPSBUT19TSE9SVEVOKHBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLk5ldC0+VGltZW91dFZhbHVlKTsKLQkJCWlmIChOZXdUaW1lb3V0IDwgU0tfUkxNVF9NSU5fVE9fVkFMKSB7Ci0JCQkJTmV3VGltZW91dCA9IFNLX1JMTVRfTUlOX1RPX1ZBTDsKLQkJCX0KLQotCQkJaWYgKCEocFJQb3J0LT5DaGVja2luZ1N0YXRlICYgU0tfUkxNVF9QQ1NfUlgpKSB7Ci0JCQkJUGFyYS5QYXJhMzJbMF0gPSBQb3J0TnVtYmVyOwotCQkJCXBSUG9ydC0+Q2hlY2tpbmdTdGF0ZSB8PSBTS19STE1UX1BDU19SWDsKLQotCQkJCS8qCi0JCQkJICogV2hhdCBzaGFsbCB3ZSBkbyBpZiB0aGUgcG9ydCBjaGVja2VkIGJ5IHRoaXMgb25lIHJlY2VpdmVzCi0JCQkJICogb3VyIHJlcXVlc3QgZnJhbWVzPyAgV2hhdCdzIGJhZCAtIG91ciByeCBsaW5lIG9yIGhpcyB0eCBsaW5lPwotCQkJCSAqLwotCQkJCVBhcmEuUGFyYTMyWzFdID0gKFNLX1UzMiktMTsKLQkJCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwUlBvcnQtPkRvd25SeFRpbWVyLAotCQkJCQlTS19STE1UX1BPUlRET1dOX1RJTV9WQUwsIFNLR0VfUkxNVCwKLQkJCQkJU0tfUkxNVF9QT1JURE9XTl9SWF9USU0sIFBhcmEpOwotCi0JCQkJZm9yIChpID0gMDsgaSA8IHBSUG9ydC0+UG9ydHNDaGVja2VkOyBpKyspIHsKLQkJCQkJaWYgKHBSUG9ydC0+UG9ydENoZWNrW2ldLlN1c3BlY3RUeCkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJcFJQb3J0LT5Qb3J0Q2hlY2tbaV0uU3VzcGVjdFR4ID0gU0tfVFJVRTsKLQkJCQkJcFJQb3J0LT5Qb3J0c1N1c3BlY3QrKzsKLQkJCQkJaWYgKChQYXJhLnBQYXJhUHRyID0KLQkJCQkJCVNrUmxtdEJ1aWxkUGFja2V0KHBBQywgSW9DLCBQb3J0TnVtYmVyLCBTS19QQUNLRVRfQ0hFQ0tfVFgsCi0JCQkJCQkJJnBBQy0+QWRkci5Qb3J0W1BvcnROdW1iZXJdLkN1cnJlbnRNYWNBZGRyZXNzLAotCQkJCQkJCSZwUlBvcnQtPlBvcnRDaGVja1tpXS5DaGVja0FkZHIpKSAhPSBOVUxMKSB7Ci0JCQkJCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1JMTVRfU0VORCwgUGFyYSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7CS8qIFBvcnREb3duIC0tIG9yIGFsbCBwYXJ0bmVycyBzdXNwZWN0LiAqLwotCQkJTmV3VGltZW91dCA9IFNLX1JMTVRfREVGX1RPX1ZBTDsKLQkJfQotCQlwUlBvcnQtPlBvcnROb1J4ID0gU0tfVFJVRTsKLQl9Ci0JZWxzZSB7CS8qIEEgbm9uLUJQRFUgcGFja2V0IHdhcyByZWNlaXZlZC4gKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU2tSbG10Q2hlY2tQb3J0ICVkOiAlZCAoJWQpIHJlY2VpdmVzIGluIGxhc3QgdGltZSBzbG90LlxuIiwKLQkJCQlQb3J0TnVtYmVyLAotCQkJCXBSUG9ydC0+UGFja2V0c1BlclRpbWVTbG90IC0gcFJQb3J0LT5CcGR1UGFja2V0c1BlclRpbWVTbG90LAotCQkJCXBSUG9ydC0+UGFja2V0c1BlclRpbWVTbG90KSkKLQkJCi0JCVNrUmxtdFBvcnRSZWNlaXZlcyhwQUMsIElvQywgUG9ydE51bWJlcik7Ci0JCWlmIChwQUMtPlJsbXQuQ2hlY2tTd2l0Y2gpIHsKLQkJCVNrUmxtdENoZWNrU3dpdGNoKHBBQywgSW9DLCBwUlBvcnQtPk5ldC0+TmV0TnVtYmVyKTsKLQkJfQotCi0JCU5ld1RpbWVvdXQgPSBTS19STE1UX0RFRl9UT19WQUw7Ci0JfQotCi0JcmV0dXJuIChOZXdUaW1lb3V0KTsKLX0JLyogU2tSbG10Q2hlY2tQb3J0ICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdFNlbGVjdEJjUnggLSBzZWxlY3QgbmV3IGFjdGl2ZSBwb3J0LCBjcml0ZXJpYSAxIChDTFApCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgc2VsZWN0cyB0aGUgcG9ydCB0aGF0IHJlY2VpdmVkIGEgYnJvYWRjYXN0IGZyYW1lCi0gKglzdWJzdGFudGlhbGx5IGxhdGVyIHRoYW4gYWxsIG90aGVyIHBvcnRzLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQk9PTAotICovCi1STE1UX1NUQVRJQyBTS19CT09MCVNrUmxtdFNlbGVjdEJjUngoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMglBY3RpdmUsCQkvKiBBY3RpdmUgcG9ydCAqLwotU0tfVTMyCVByZWZQb3J0LAkvKiBQcmVmZXJyZWQgcG9ydCAqLwotU0tfVTMyCSpwU2VsZWN0KQkvKiBOZXcgYWN0aXZlIHBvcnQgKi8KLXsKLQlTS19VNjQJCUJjVGltZVN0YW1wOwotCVNLX1UzMgkJaTsKLQlTS19CT09MCQlQb3J0Rm91bmQ7Ci0KLQlCY1RpbWVTdGFtcCA9IDA7CS8qIE5vdCB0b3RhbGx5IG5lY2Vzc2FyeSwgYnV0IGZlZWxpbmcgYmV0dGVyLiAqLwotCVBvcnRGb3VuZCA9IFNLX0ZBTFNFOwotCQotCS8qIFNlbGVjdCBwb3J0IHdpdGggdGhlIGxhdGVzdCBUaW1lU3RhbXAuICovCi0JZm9yIChpID0gMDsgaSA8IChTS19VMzIpcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJUaW1lU3RhbXAgUG9ydCAlZCAoRG93bjogJWQsIE5vUng6ICVkKTogJTA4eCAlMDh4LlxuIiwKLQkJCQlpLAotICAgCQkJCXBBQy0+UmxtdC5Qb3J0W2ldLlBvcnREb3duLCBwQUMtPlJsbXQuUG9ydFtpXS5Qb3J0Tm9SeCwKLQkJCQkqKChTS19VMzIqKSgmcEFDLT5SbG10LlBvcnRbaV0uQmNUaW1lU3RhbXApICsgT0ZGU19ISTMyKSwKLQkJCQkqKChTS19VMzIqKSgmcEFDLT5SbG10LlBvcnRbaV0uQmNUaW1lU3RhbXApICsgT0ZGU19MTzMyKSkpCi0KLQkJaWYgKCFwQUMtPlJsbXQuUG9ydFtpXS5Qb3J0RG93biAmJiAhcEFDLT5SbG10LlBvcnRbaV0uUG9ydE5vUngpIHsKLQkJCWlmICghUG9ydEZvdW5kIHx8IHBBQy0+UmxtdC5Qb3J0W2ldLkJjVGltZVN0YW1wID4gQmNUaW1lU3RhbXApIHsKLQkJCQlCY1RpbWVTdGFtcCA9IHBBQy0+UmxtdC5Qb3J0W2ldLkJjVGltZVN0YW1wOwotCQkJCSpwU2VsZWN0ID0gaTsKLQkJCQlQb3J0Rm91bmQgPSBTS19UUlVFOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKFBvcnRGb3VuZCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJQb3J0ICVkIHJlY2VpdmVkIHRoZSBsYXN0IGJyb2FkY2FzdC5cbiIsICpwU2VsZWN0KSkKLQotCQkvKiBMb29rIGlmIGFub3RoZXIgcG9ydCdzIHRpbWUgc3RhbXAgaXMgc2ltaWxhci4gKi8KLQkJZm9yIChpID0gMDsgaSA8IChTS19VMzIpcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJCWlmIChpID09ICpwU2VsZWN0KSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoIXBBQy0+UmxtdC5Qb3J0W2ldLlBvcnREb3duICYmICFwQUMtPlJsbXQuUG9ydFtpXS5Qb3J0Tm9SeCAmJgotCQkJCShwQUMtPlJsbXQuUG9ydFtpXS5CY1RpbWVTdGFtcCA+Ci0JCQkJIEJjVGltZVN0YW1wIC0gU0tfUkxNVF9CQ19ERUxUQSB8fAotCQkJCXBBQy0+UmxtdC5Qb3J0W2ldLkJjVGltZVN0YW1wICsKLQkJCQkgU0tfUkxNVF9CQ19ERUxUQSA+IEJjVGltZVN0YW1wKSkgewotCQkJCVBvcnRGb3VuZCA9IFNLX0ZBTFNFOwotCQkJCQotCQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJCSgiUG9ydCAlZCByZWNlaXZlZCBhIGJyb2FkY2FzdCBhdCBhIHNpbWlsYXIgdGltZS5cbiIsIGkpKQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlpZiAoUG9ydEZvdW5kKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU0VMRUNUX0JDUlggZm91bmQgUG9ydCAlZCByZWNlaXZpbmcgdGhlIHN1YnN0YW50aWFsbHkgIgotCQkJICJsYXRlc3QgYnJvYWRjYXN0ICgldSkuXG4iLAotCQkJCSpwU2VsZWN0LAotCQkJCUJjVGltZVN0YW1wIC0gcEFDLT5SbG10LlBvcnRbMSAtICpwU2VsZWN0XS5CY1RpbWVTdGFtcCkpCi0JfQotI2VuZGlmCS8qIERFQlVHICovCi0KLQlyZXR1cm4gKFBvcnRGb3VuZCk7Ci19CS8qIFNrUmxtdFNlbGVjdEJjUnggKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tSbG10U2VsZWN0Tm90U3VzcGVjdCAtIHNlbGVjdCBuZXcgYWN0aXZlIHBvcnQsIGNyaXRlcmlhIDIgKENMUCkKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBzZWxlY3RzIGEgZ29vZCBwb3J0IChpdCBpcyBQb3J0VXAgJiYgIVN1c3BlY3RSeCkuCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoKLSAqIFJldHVybnM6Ci0gKglTS19CT09MCi0gKi8KLVJMTVRfU1RBVElDIFNLX0JPT0wJU2tSbG10U2VsZWN0Tm90U3VzcGVjdCgKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gQ29udGV4dCAqLwotU0tfVTMyCUFjdGl2ZSwJCS8qIEFjdGl2ZSBwb3J0ICovCi1TS19VMzIJUHJlZlBvcnQsCS8qIFByZWZlcnJlZCBwb3J0ICovCi1TS19VMzIJKnBTZWxlY3QpCS8qIE5ldyBhY3RpdmUgcG9ydCAqLwotewotCVNLX1UzMgkJaTsKLQlTS19CT09MCQlQb3J0Rm91bmQ7Ci0KLQlQb3J0Rm91bmQgPSBTS19GQUxTRTsKLQotCS8qIFNlbGVjdCBmaXJzdCBwb3J0IHRoYXQgaXMgUG9ydFVwICYmICFTdXNwZWN0UnguICovCi0JZm9yIChpID0gMDsgaSA8IChTS19VMzIpcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJaWYgKCFwQUMtPlJsbXQuUG9ydFtpXS5Qb3J0RG93biAmJgotCQkJIShwQUMtPlJsbXQuUG9ydFtpXS5DaGVja2luZ1N0YXRlICYgU0tfUkxNVF9QQ1NfUlgpKSB7Ci0JCQkqcFNlbGVjdCA9IGk7Ci0JCQlpZiAoIXBBQy0+UmxtdC5Qb3J0W0FjdGl2ZV0uUG9ydERvd24gJiYKLQkJCQkhKHBBQy0+UmxtdC5Qb3J0W0FjdGl2ZV0uQ2hlY2tpbmdTdGF0ZSAmIFNLX1JMTVRfUENTX1JYKSkgewotCQkJCSpwU2VsZWN0ID0gQWN0aXZlOwotCQkJfQotCQkJaWYgKCFwQUMtPlJsbXQuUG9ydFtQcmVmUG9ydF0uUG9ydERvd24gJiYKLQkJCQkhKHBBQy0+UmxtdC5Qb3J0W1ByZWZQb3J0XS5DaGVja2luZ1N0YXRlICYgU0tfUkxNVF9QQ1NfUlgpKSB7Ci0JCQkJKnBTZWxlY3QgPSBQcmVmUG9ydDsKLQkJCX0KLQkJCVBvcnRGb3VuZCA9IFNLX1RSVUU7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiU0tfUkxNVF9TRUxFQ1RfTk9UU1VTUEVDVCBmb3VuZCBQb3J0ICVkIHVwIGFuZCBub3QgY2hlY2sgUlguXG4iLAotCQkJCQkqcFNlbGVjdCkpCi0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gKFBvcnRGb3VuZCk7Ci19CS8qIFNrUmxtdFNlbGVjdE5vdFN1c3BlY3QgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tSbG10U2VsZWN0VXAgLSBzZWxlY3QgbmV3IGFjdGl2ZSBwb3J0LCBjcml0ZXJpYSAzLCA0IChDTFApCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgc2VsZWN0cyBhIHBvcnQgdGhhdCBpcyB1cC4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgotICogUmV0dXJuczoKLSAqCVNLX0JPT0wKLSAqLwotUkxNVF9TVEFUSUMgU0tfQk9PTAlTa1JsbXRTZWxlY3RVcCgKLVNLX0FDCSpwQUMsCQkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJCS8qIEkvTyBDb250ZXh0ICovCi1TS19VMzIJQWN0aXZlLAkJCS8qIEFjdGl2ZSBwb3J0ICovCi1TS19VMzIJUHJlZlBvcnQsCQkvKiBQcmVmZXJyZWQgcG9ydCAqLwotU0tfVTMyCSpwU2VsZWN0LAkJLyogTmV3IGFjdGl2ZSBwb3J0ICovCi1TS19CT09MCUF1dG9OZWdEb25lKQkvKiBTdWNjZXNzZnVsbHkgYXV0by1uZWdvdGlhdGVkPyAqLwotewotCVNLX1UzMgkJaTsKLQlTS19CT09MCQlQb3J0Rm91bmQ7Ci0KLQlQb3J0Rm91bmQgPSBTS19GQUxTRTsKLQotCS8qIFNlbGVjdCBmaXJzdCBwb3J0IHRoYXQgaXMgUG9ydFVwLiAqLwotCWZvciAoaSA9IDA7IGkgPCAoU0tfVTMyKXBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCWlmIChwQUMtPlJsbXQuUG9ydFtpXS5Qb3J0U3RhdGUgPT0gU0tfUkxNVF9QU19VUCAmJgotCQkJcEFDLT5HSW5pLkdQW2ldLlBBdXRvTmVnRmFpbCAhPSBBdXRvTmVnRG9uZSkgewotCQkJKnBTZWxlY3QgPSBpOwotCQkJaWYgKHBBQy0+UmxtdC5Qb3J0W0FjdGl2ZV0uUG9ydFN0YXRlID09IFNLX1JMTVRfUFNfVVAgJiYKLQkJCQlwQUMtPkdJbmkuR1BbQWN0aXZlXS5QQXV0b05lZ0ZhaWwgIT0gQXV0b05lZ0RvbmUpIHsKLQkJCQkqcFNlbGVjdCA9IEFjdGl2ZTsKLQkJCX0KLQkJCWlmIChwQUMtPlJsbXQuUG9ydFtQcmVmUG9ydF0uUG9ydFN0YXRlID09IFNLX1JMTVRfUFNfVVAgJiYKLQkJCQlwQUMtPkdJbmkuR1BbUHJlZlBvcnRdLlBBdXRvTmVnRmFpbCAhPSBBdXRvTmVnRG9uZSkgewotCQkJCSpwU2VsZWN0ID0gUHJlZlBvcnQ7Ci0JCQl9Ci0JCQlQb3J0Rm91bmQgPSBTS19UUlVFOwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlNLX1JMTVRfU0VMRUNUX1VQIGZvdW5kIFBvcnQgJWQgdXAuXG4iLCAqcFNlbGVjdCkpCi0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gKFBvcnRGb3VuZCk7Ci19CS8qIFNrUmxtdFNlbGVjdFVwICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdFNlbGVjdEdvaW5nVXAgLSBzZWxlY3QgbmV3IGFjdGl2ZSBwb3J0LCBjcml0ZXJpYSA1LCA2IChDTFApCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgc2VsZWN0cyB0aGUgcG9ydCB0aGF0IGlzIGdvaW5nIHVwIGZvciB0aGUgbG9uZ2VzdCB0aW1lLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQk9PTAotICovCi1STE1UX1NUQVRJQyBTS19CT09MCVNrUmxtdFNlbGVjdEdvaW5nVXAoCi1TS19BQwkqcEFDLAkJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCQkvKiBJL08gQ29udGV4dCAqLwotU0tfVTMyCUFjdGl2ZSwJCQkvKiBBY3RpdmUgcG9ydCAqLwotU0tfVTMyCVByZWZQb3J0LAkJLyogUHJlZmVycmVkIHBvcnQgKi8KLVNLX1UzMgkqcFNlbGVjdCwJCS8qIE5ldyBhY3RpdmUgcG9ydCAqLwotU0tfQk9PTAlBdXRvTmVnRG9uZSkJLyogU3VjY2Vzc2Z1bGx5IGF1dG8tbmVnb3RpYXRlZD8gKi8KLXsKLQlTS19VNjQJCUd1VGltZVN0YW1wOwotCVNLX1UzMgkJaTsKLQlTS19CT09MCQlQb3J0Rm91bmQ7Ci0KLQlHdVRpbWVTdGFtcCA9IDA7Ci0JUG9ydEZvdW5kID0gU0tfRkFMU0U7Ci0KLQkvKiBTZWxlY3QgcG9ydCB0aGF0IGlzIFBvcnRHb2luZ1VwIGZvciB0aGUgbG9uZ2VzdCB0aW1lLiAqLwotCWZvciAoaSA9IDA7IGkgPCAoU0tfVTMyKXBBQy0+R0luaS5HSU1hY3NGb3VuZDsgaSsrKSB7Ci0JCWlmIChwQUMtPlJsbXQuUG9ydFtpXS5Qb3J0U3RhdGUgPT0gU0tfUkxNVF9QU19HT0lOR19VUCAmJgotCQkJcEFDLT5HSW5pLkdQW2ldLlBBdXRvTmVnRmFpbCAhPSBBdXRvTmVnRG9uZSkgewotCQkJR3VUaW1lU3RhbXAgPSBwQUMtPlJsbXQuUG9ydFtpXS5HdVRpbWVTdGFtcDsKLQkJCSpwU2VsZWN0ID0gaTsKLQkJCVBvcnRGb3VuZCA9IFNLX1RSVUU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghUG9ydEZvdW5kKSB7Ci0JCXJldHVybiAoU0tfRkFMU0UpOwotCX0KLQotCWZvciAoaSA9ICpwU2VsZWN0ICsgMTsgaSA8IChTS19VMzIpcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOyBpKyspIHsKLQkJaWYgKHBBQy0+UmxtdC5Qb3J0W2ldLlBvcnRTdGF0ZSA9PSBTS19STE1UX1BTX0dPSU5HX1VQICYmCi0JCQlwQUMtPlJsbXQuUG9ydFtpXS5HdVRpbWVTdGFtcCA8IEd1VGltZVN0YW1wICYmCi0JCQlwQUMtPkdJbmkuR1BbaV0uUEF1dG9OZWdGYWlsICE9IEF1dG9OZWdEb25lKSB7Ci0JCQlHdVRpbWVTdGFtcCA9IHBBQy0+UmxtdC5Qb3J0W2ldLkd1VGltZVN0YW1wOwotCQkJKnBTZWxlY3QgPSBpOwotCQl9Ci0JfQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX1NFTEVDVF9HT0lOR1VQIGZvdW5kIFBvcnQgJWQgZ29pbmcgdXAuXG4iLCAqcFNlbGVjdCkpCi0JcmV0dXJuIChTS19UUlVFKTsKLX0JLyogU2tSbG10U2VsZWN0R29pbmdVcCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRTZWxlY3REb3duIC0gc2VsZWN0IG5ldyBhY3RpdmUgcG9ydCwgY3JpdGVyaWEgNywgOCAoQ0xQKQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIHNlbGVjdHMgYSBwb3J0IHRoYXQgaXMgZG93bi4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgotICogUmV0dXJuczoKLSAqCVNLX0JPT0wKLSAqLwotUkxNVF9TVEFUSUMgU0tfQk9PTAlTa1JsbXRTZWxlY3REb3duKAotU0tfQUMJKnBBQywJCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMglBY3RpdmUsCQkJLyogQWN0aXZlIHBvcnQgKi8KLVNLX1UzMglQcmVmUG9ydCwJCS8qIFByZWZlcnJlZCBwb3J0ICovCi1TS19VMzIJKnBTZWxlY3QsCQkvKiBOZXcgYWN0aXZlIHBvcnQgKi8KLVNLX0JPT0wJQXV0b05lZ0RvbmUpCS8qIFN1Y2Nlc3NmdWxseSBhdXRvLW5lZ290aWF0ZWQ/ICovCi17Ci0JU0tfVTMyCQlpOwotCVNLX0JPT0wJCVBvcnRGb3VuZDsKLQotCVBvcnRGb3VuZCA9IFNLX0ZBTFNFOwotCi0JLyogU2VsZWN0IGZpcnN0IHBvcnQgdGhhdCBpcyBQb3J0RG93bi4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgKFNLX1UzMilwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlpZiAocEFDLT5SbG10LlBvcnRbaV0uUG9ydFN0YXRlID09IFNLX1JMTVRfUFNfRE9XTiAmJgotCQkJcEFDLT5HSW5pLkdQW2ldLlBBdXRvTmVnRmFpbCAhPSBBdXRvTmVnRG9uZSkgewotCQkJKnBTZWxlY3QgPSBpOwotCQkJaWYgKHBBQy0+UmxtdC5Qb3J0W0FjdGl2ZV0uUG9ydFN0YXRlID09IFNLX1JMTVRfUFNfRE9XTiAmJgotCQkJCXBBQy0+R0luaS5HUFtBY3RpdmVdLlBBdXRvTmVnRmFpbCAhPSBBdXRvTmVnRG9uZSkgewotCQkJCSpwU2VsZWN0ID0gQWN0aXZlOwotCQkJfQotCQkJaWYgKHBBQy0+UmxtdC5Qb3J0W1ByZWZQb3J0XS5Qb3J0U3RhdGUgPT0gU0tfUkxNVF9QU19ET1dOICYmCi0JCQkJcEFDLT5HSW5pLkdQW1ByZWZQb3J0XS5QQXV0b05lZ0ZhaWwgIT0gQXV0b05lZ0RvbmUpIHsKLQkJCQkqcFNlbGVjdCA9IFByZWZQb3J0OwotCQkJfQotCQkJUG9ydEZvdW5kID0gU0tfVFJVRTsKLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJTS19STE1UX1NFTEVDVF9ET1dOIGZvdW5kIFBvcnQgJWQgZG93bi5cbiIsICpwU2VsZWN0KSkKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiAoUG9ydEZvdW5kKTsKLX0JLyogU2tSbG10U2VsZWN0RG93biAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRDaGVja1N3aXRjaCAtIHNlbGVjdCBuZXcgYWN0aXZlIHBvcnQgYW5kIHN3aXRjaCB0byBpdAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGRlY2lkZXMgd2hpY2ggcG9ydCBzaG91bGQgYmUgdGhlIGFjdGl2ZSBvbmUgYW5kIHF1ZXVlcwotICoJcG9ydCBzd2l0Y2hpbmcgaWYgbmVjZXNzYXJ5LgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZy4KLSAqLwotUkxNVF9TVEFUSUMgdm9pZAlTa1JsbXRDaGVja1N3aXRjaCgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMglOZXRJZHgpCS8qIE5ldCBpbmRleCAqLwotewotCVNLX0VWUEFSQQlQYXJhOwotCVNLX1UzMgkJQWN0aXZlOwotCVNLX1UzMgkJUHJlZlBvcnQ7Ci0JU0tfVTMyCQlpOwotCVNLX0JPT0wJCVBvcnRGb3VuZDsKLQotCUFjdGl2ZSA9IHBBQy0+UmxtdC5OZXRbTmV0SWR4XS5BY3RpdmVQb3J0OwkvKiBJbmRleCBvZiBhY3RpdmUgcG9ydC4gKi8KLQlQcmVmUG9ydCA9IHBBQy0+UmxtdC5OZXRbTmV0SWR4XS5QcmVmUG9ydDsJLyogSW5kZXggb2YgcHJlZmVycmVkIHBvcnQuICovCi0JUG9ydEZvdW5kID0gU0tfRkFMU0U7Ci0JcEFDLT5SbG10LkNoZWNrU3dpdGNoID0gU0tfRkFMU0U7Ci0KLSNpZiAwCS8qIFJXIDIwMDEvMTAvMTggLSBhY3RpdmUgcG9ydCBiZWNvbWVzIGFsd2F5cyBwcmVmZXJlZCBvbmUgKi8KLQlpZiAocEFDLT5SbG10Lk5ldFtOZXRJZHhdLlByZWZlcmVuY2UgPT0gMHhGRkZGRkZGRikgeyAvKiBBdXRvbWF0aWMgKi8KLQkJLyogZGlzYWJsZSBhdXRvLWZhaWwgYmFjayAqLwotCQlQcmVmUG9ydCA9IEFjdGl2ZTsKLQl9Ci0jZW5kaWYKLQotCWlmIChwQUMtPlJsbXQuTmV0W05ldElkeF0uTGlua3NVcCA9PSAwKSB7Ci0JCS8qIExhc3QgbGluayB3ZW50IGRvd24gLSBzaHV0IGRvd24gdGhlIG5ldC4gKi8KLQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlJsbXRTdGF0ZSA9IFNLX1JMTVRfUlNfTkVUX0RPV047Ci0JCVBhcmEuUGFyYTMyWzBdID0gU0tfUkxNVF9ORVRfRE9XTl9URU1QOwotCQlQYXJhLlBhcmEzMlsxXSA9IE5ldElkeDsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9ORVRfRE9XTiwgUGFyYSk7Ci0KLQkJUGFyYS5QYXJhMzJbMF0gPSBwQUMtPlJsbXQuTmV0W05ldElkeF0uCi0JCQlQb3J0W3BBQy0+UmxtdC5OZXRbTmV0SWR4XS5BY3RpdmVQb3J0XS0+UG9ydE51bWJlcjsKLQkJUGFyYS5QYXJhMzJbMV0gPSBOZXRJZHg7Ci0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUE5NSSwgU0tfUE5NSV9FVlRfUkxNVF9BQ1RJVkVfRE9XTiwgUGFyYSk7Ci0JCXJldHVybjsKLQl9CS8qIHBBQy0+UmxtdC5MaW5rc1VwID09IDAgKi8KLQllbHNlIGlmIChwQUMtPlJsbXQuTmV0W05ldElkeF0uTGlua3NVcCA9PSAxICYmCi0JCXBBQy0+UmxtdC5OZXRbTmV0SWR4XS5SbG10U3RhdGUgPT0gU0tfUkxNVF9SU19ORVRfRE9XTikgewotCQkvKiBGaXJzdCBsaW5rIGNhbWUgdXAgLSBnZXQgdGhlIG5ldCB1cC4gKi8KLQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlJsbXRTdGF0ZSA9IFNLX1JMTVRfUlNfTkVUX1VQOwotCi0JCS8qCi0JCSAqIElmIHBBQy0+UmxtdC5BY3RpdmVQb3J0ICE9IFBhcmEuUGFyYTMyWzBdLAotCQkgKiB0aGUgRFJWIHN3aXRjaGVzIHRvIHRoZSBwb3J0IHRoYXQgY2FtZSB1cC4KLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBwQUMtPlJsbXQuTmV0W05ldElkeF0uTnVtUG9ydHM7IGkrKykgewotCQkJaWYgKCFwQUMtPlJsbXQuTmV0W05ldElkeF0uUG9ydFtpXS0+TGlua0Rvd24pIHsKLQkJCQlpZiAoIXBBQy0+UmxtdC5OZXRbTmV0SWR4XS5Qb3J0W0FjdGl2ZV0tPkxpbmtEb3duKSB7Ci0JCQkJCWkgPSBBY3RpdmU7Ci0JCQkJfQotCQkJCWlmICghcEFDLT5SbG10Lk5ldFtOZXRJZHhdLlBvcnRbUHJlZlBvcnRdLT5MaW5rRG93bikgewotCQkJCQlpID0gUHJlZlBvcnQ7Ci0JCQkJfQotCQkJCVBvcnRGb3VuZCA9IFNLX1RSVUU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoUG9ydEZvdW5kKSB7Ci0JCQlQYXJhLlBhcmEzMlswXSA9IHBBQy0+UmxtdC5OZXRbTmV0SWR4XS5Qb3J0W2ldLT5Qb3J0TnVtYmVyOwotCQkJUGFyYS5QYXJhMzJbMV0gPSBOZXRJZHg7Ci0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1BOTUksIFNLX1BOTUlfRVZUX1JMTVRfQUNUSVZFX1VQLCBQYXJhKTsKLQotCQkJcEFDLT5SbG10Lk5ldFtOZXRJZHhdLkFjdGl2ZVBvcnQgPSBpOwotCQkJUGFyYS5QYXJhMzJbMF0gPSBwQUMtPlJsbXQuTmV0W05ldElkeF0uUG9ydFtpXS0+UG9ydE51bWJlcjsKLQkJCVBhcmEuUGFyYTMyWzFdID0gTmV0SWR4OwotCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9ORVRfVVAsIFBhcmEpOwotCi0JCQlpZiAoKHBBQy0+UmxtdC5OZXRbTmV0SWR4XS5SbG10TW9kZSAmIFNLX1JMTVRfVFJBTlNQQVJFTlQpID09IDAgJiYKLQkJCQkoUGFyYS5wUGFyYVB0ciA9IFNrUmxtdEJ1aWxkUGFja2V0KHBBQywgSW9DLAotCQkJCXBBQy0+UmxtdC5OZXRbTmV0SWR4XS5Qb3J0W2ldLT5Qb3J0TnVtYmVyLAotCQkJCVNLX1BBQ0tFVF9BTk5PVU5DRSwgJnBBQy0+QWRkci5OZXRbTmV0SWR4XS4KLQkJCQlDdXJyZW50TWFjQWRkcmVzcywgJlNrUmxtdE1jQWRkcikpICE9IE5VTEwpIHsKLQkJCQkvKgotCQkJCSAqIFNlbmQgYW5ub3VuY2UgcGFja2V0IHRvIFJMTVQgbXVsdGljYXN0IGFkZHJlc3MgdG8gZm9yY2UKLQkJCQkgKiBzd2l0Y2hlcyB0byBsZWFybiB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZSBsb2dpY2FsIE1BQyBhZGRyZXNzLgotCQkJCSAqLwotCQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUkxNVF9TRU5ELCBQYXJhKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfUkxNVF9FMDA3LCBTS0VSUl9STE1UX0UwMDdfTVNHKTsKLQkJfQotCi0JCXJldHVybjsKLQl9CS8qIExpbmtzVXAgPT0gMSAmJiBSbG10U3RhdGUgPT0gU0tfUkxNVF9SU19ORVRfRE9XTiAqLwotCWVsc2UgewkvKiBDYW5ub3QgYmUgcmVhY2hlZCBpbiBkdWFsLW5ldCBtb2RlLiAqLwotCQlQYXJhLlBhcmEzMlswXSA9IEFjdGl2ZTsKLQotCQkvKgotCQkgKiBQcmVzZWxlY3Rpb246Ci0JCSAqCUlmIFJMTVQgTW9kZSAhPSBDaGVja0xpbmtTdGF0ZQotCQkgKgkJc2VsZWN0IHBvcnQgdGhhdCByZWNlaXZlZCBhIGJyb2FkY2FzdCBmcmFtZSBzdWJzdGFudGlhbGx5IGxhdGVyCi0JCSAqCQl0aGFuIGFsbCBvdGhlciBwb3J0cwotCQkgKgllbHNlIHNlbGVjdCBmaXJzdCBwb3J0IHRoYXQgaXMgbm90IFN1c3BlY3RSeAotCQkgKgllbHNlIHNlbGVjdCBmaXJzdCBwb3J0IHRoYXQgaXMgUG9ydFVwCi0JCSAqCWVsc2Ugc2VsZWN0IHBvcnQgdGhhdCBpcyBQb3J0R29pbmdVcCBmb3IgdGhlIGxvbmdlc3QgdGltZQotCQkgKgllbHNlIHNlbGVjdCBmaXJzdCBwb3J0IHRoYXQgaXMgUG9ydERvd24KLQkJICoJZWxzZSBzdG9wLgotCQkgKgotCQkgKiBGb3IgdGhlIHByZXNlbGVjdGVkIHBvcnQ6Ci0JCSAqCUlmIEFjdGl2ZVBvcnQgaXMgZXF1YWwgaW4gcXVhbGl0eSwgc2VsZWN0IEFjdGl2ZVBvcnQuCi0JCSAqCi0JCSAqCUlmIFByZWZQb3J0IGlzIGVxdWFsIGluIHF1YWxpdHksIHNlbGVjdCBQcmVmUG9ydC4KLQkJICoKLQkJICoJSWYgQWN0aXZlUG9ydCAhPSBTZWxlY3RlZFBvcnQsCi0JCSAqCQlJZiBvbGQgQWN0aXZlUG9ydCBpcyBMaW5rRG93biwKLQkJICoJCQlTd2l0Y2hIYXJkCi0JCSAqCQllbHNlCi0JCSAqCQkJU3dpdGNoU29mdAotCQkgKi8KLQkJLyogY2hlY2sgb2YgQ2hnQmNQcmlvIGZsYWcgYWRkZWQgKi8KLQkJaWYgKChwQUMtPlJsbXQuTmV0WzBdLlJsbXRNb2RlICE9IFNLX1JMTVRfTU9ERV9DTFMpICYmCi0JCQkoIXBBQy0+UmxtdC5OZXRbMF0uQ2hnQmNQcmlvKSkgewotCQkJCi0JCQlpZiAoIVBvcnRGb3VuZCkgewotCQkJCVBvcnRGb3VuZCA9IFNrUmxtdFNlbGVjdEJjUngoCi0JCQkJCXBBQywgSW9DLCBBY3RpdmUsIFByZWZQb3J0LCAmUGFyYS5QYXJhMzJbMV0pOwotCQkJfQotCi0JCQlpZiAoIVBvcnRGb3VuZCkgewotCQkJCVBvcnRGb3VuZCA9IFNrUmxtdFNlbGVjdE5vdFN1c3BlY3QoCi0JCQkJCXBBQywgSW9DLCBBY3RpdmUsIFByZWZQb3J0LCAmUGFyYS5QYXJhMzJbMV0pOwotCQkJfQotCQl9CS8qIHBBQy0+UmxtdC5SbG10TW9kZSAhPSBTS19STE1UX01PREVfQ0xTICovCi0KLQkJLyogd2l0aCBjaGFuZ2VkIHByaW9yaXR5IGZvciBsYXN0IGJyb2FkY2FzdCByZWNlaXZlZCAqLwotCQlpZiAoKHBBQy0+UmxtdC5OZXRbMF0uUmxtdE1vZGUgIT0gU0tfUkxNVF9NT0RFX0NMUykgJiYKLQkJCShwQUMtPlJsbXQuTmV0WzBdLkNoZ0JjUHJpbykpIHsKLQkJCWlmICghUG9ydEZvdW5kKSB7Ci0JCQkJUG9ydEZvdW5kID0gU2tSbG10U2VsZWN0Tm90U3VzcGVjdCgKLQkJCQkJcEFDLCBJb0MsIEFjdGl2ZSwgUHJlZlBvcnQsICZQYXJhLlBhcmEzMlsxXSk7Ci0JCQl9Ci0KLQkJCWlmICghUG9ydEZvdW5kKSB7Ci0JCQkJUG9ydEZvdW5kID0gU2tSbG10U2VsZWN0QmNSeCgKLQkJCQkJcEFDLCBJb0MsIEFjdGl2ZSwgUHJlZlBvcnQsICZQYXJhLlBhcmEzMlsxXSk7Ci0JCQl9Ci0JCX0JLyogcEFDLT5SbG10LlJsbXRNb2RlICE9IFNLX1JMTVRfTU9ERV9DTFMgKi8KLQotCQlpZiAoIVBvcnRGb3VuZCkgewotCQkJUG9ydEZvdW5kID0gU2tSbG10U2VsZWN0VXAoCi0JCQkJcEFDLCBJb0MsIEFjdGl2ZSwgUHJlZlBvcnQsICZQYXJhLlBhcmEzMlsxXSwgQVVUT05FR19TVUNDRVNTKTsKLQkJfQotCi0JCWlmICghUG9ydEZvdW5kKSB7Ci0JCQlQb3J0Rm91bmQgPSBTa1JsbXRTZWxlY3RVcCgKLQkJCQlwQUMsIElvQywgQWN0aXZlLCBQcmVmUG9ydCwgJlBhcmEuUGFyYTMyWzFdLCBBVVRPTkVHX0ZBSUxFRCk7Ci0JCX0KLQotCQlpZiAoIVBvcnRGb3VuZCkgewotCQkJUG9ydEZvdW5kID0gU2tSbG10U2VsZWN0R29pbmdVcCgKLQkJCQlwQUMsIElvQywgQWN0aXZlLCBQcmVmUG9ydCwgJlBhcmEuUGFyYTMyWzFdLCBBVVRPTkVHX1NVQ0NFU1MpOwotCQl9Ci0KLQkJaWYgKCFQb3J0Rm91bmQpIHsKLQkJCVBvcnRGb3VuZCA9IFNrUmxtdFNlbGVjdEdvaW5nVXAoCi0JCQkJcEFDLCBJb0MsIEFjdGl2ZSwgUHJlZlBvcnQsICZQYXJhLlBhcmEzMlsxXSwgQVVUT05FR19GQUlMRUQpOwotCQl9Ci0KLQkJaWYgKHBBQy0+UmxtdC5OZXRbMF0uUmxtdE1vZGUgIT0gU0tfUkxNVF9NT0RFX0NMUykgewotCQkJaWYgKCFQb3J0Rm91bmQpIHsKLQkJCQlQb3J0Rm91bmQgPSBTa1JsbXRTZWxlY3REb3duKHBBQywgSW9DLAotCQkJCQlBY3RpdmUsIFByZWZQb3J0LCAmUGFyYS5QYXJhMzJbMV0sIEFVVE9ORUdfU1VDQ0VTUyk7Ci0JCQl9Ci0KLQkJCWlmICghUG9ydEZvdW5kKSB7Ci0JCQkJUG9ydEZvdW5kID0gU2tSbG10U2VsZWN0RG93bihwQUMsIElvQywKLQkJCQkJQWN0aXZlLCBQcmVmUG9ydCwgJlBhcmEuUGFyYTMyWzFdLCBBVVRPTkVHX0ZBSUxFRCk7Ci0JCQl9Ci0JCX0JLyogcEFDLT5SbG10LlJsbXRNb2RlICE9IFNLX1JMTVRfTU9ERV9DTFMgKi8KLQotCQlpZiAoUG9ydEZvdW5kKSB7Ci0KLQkJCWlmIChQYXJhLlBhcmEzMlsxXSAhPSBBY3RpdmUpIHsKLQkJCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJCQkoIkFjdGl2ZTogJWQsIFBhcmExOiAlZC5cbiIsIEFjdGl2ZSwgUGFyYS5QYXJhMzJbMV0pKQotCQkJCXBBQy0+UmxtdC5OZXRbTmV0SWR4XS5BY3RpdmVQb3J0ID0gUGFyYS5QYXJhMzJbMV07Ci0JCQkJUGFyYS5QYXJhMzJbMF0gPSBwQUMtPlJsbXQuTmV0W05ldElkeF0uCi0JCQkJCVBvcnRbUGFyYS5QYXJhMzJbMF1dLT5Qb3J0TnVtYmVyOwotCQkJCVBhcmEuUGFyYTMyWzFdID0gcEFDLT5SbG10Lk5ldFtOZXRJZHhdLgotCQkJCQlQb3J0W1BhcmEuUGFyYTMyWzFdXS0+UG9ydE51bWJlcjsKLQkJCQlTS19IV0FDX0xJTktfTEVEKHBBQywgSW9DLCBQYXJhLlBhcmEzMlsxXSwgU0tfTEVEX0FDVElWRSk7Ci0JCQkJaWYgKHBBQy0+UmxtdC5Qb3J0W0FjdGl2ZV0uTGlua0Rvd24pIHsKLQkJCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9TV0lUQ0hfSEFSRCwgUGFyYSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlTS19IV0FDX0xJTktfTEVEKHBBQywgSW9DLCBQYXJhLlBhcmEzMlswXSwgU0tfTEVEX1NUQU5EQlkpOwotCQkJCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1NXSVRDSF9TT0ZULCBQYXJhKTsKLQkJCQl9Ci0JCQkJUGFyYS5QYXJhMzJbMV0gPSBOZXRJZHg7Ci0JCQkJUGFyYS5QYXJhMzJbMF0gPQotCQkJCQlwQUMtPlJsbXQuTmV0W05ldElkeF0uUG9ydFtQYXJhLlBhcmEzMlswXV0tPlBvcnROdW1iZXI7Ci0JCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9QTk1JLCBTS19QTk1JX0VWVF9STE1UX0FDVElWRV9ET1dOLCBQYXJhKTsKLQkJCQlQYXJhLlBhcmEzMlswXSA9IHBBQy0+UmxtdC5OZXRbTmV0SWR4XS4KLQkJCQkJUG9ydFtwQUMtPlJsbXQuTmV0W05ldElkeF0uQWN0aXZlUG9ydF0tPlBvcnROdW1iZXI7Ci0JCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9QTk1JLCBTS19QTk1JX0VWVF9STE1UX0FDVElWRV9VUCwgUGFyYSk7Ci0JCQkJaWYgKChwQUMtPlJsbXQuTmV0W05ldElkeF0uUmxtdE1vZGUgJiBTS19STE1UX1RSQU5TUEFSRU5UKSA9PSAwICYmCi0JCQkJCShQYXJhLnBQYXJhUHRyID0gU2tSbG10QnVpbGRQYWNrZXQocEFDLCBJb0MsIFBhcmEuUGFyYTMyWzBdLAotCQkJCQlTS19QQUNLRVRfQU5OT1VOQ0UsICZwQUMtPkFkZHIuTmV0W05ldElkeF0uQ3VycmVudE1hY0FkZHJlc3MsCi0JCQkJCSZTa1JsbXRNY0FkZHIpKSAhPSBOVUxMKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFNlbmQgYW5ub3VuY2UgcGFja2V0IHRvIFJMTVQgbXVsdGljYXN0IGFkZHJlc3MgdG8gZm9yY2UKLQkJCQkJICogc3dpdGNoZXMgdG8gbGVhcm4gdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgbG9naWNhbAotCQkJCQkgKiBNQUMgYWRkcmVzcy4KLQkJCQkJICovCi0JCQkJCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfUkxNVF9TRU5ELCBQYXJhKTsKLQkJCQl9CS8qIChQYXJhLnBQYXJhUHRyID0gU2tSbG10QnVpbGRQYWNrZXQoLi4uKSkgIT0gTlVMTCAqLwotCQkJfQkvKiBQYXJhLlBhcmEzMlsxXSAhPSBBY3RpdmUgKi8KLQkJfQkvKiBQb3J0Rm91bmQgKi8KLQkJZWxzZSB7Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX1JMTVRfRTAwNCwgU0tFUlJfUkxNVF9FMDA0X01TRyk7Ci0JCX0KLQl9CS8qIExpbmtzVXAgPiAxIHx8IExpbmtzVXAgPT0gMSAmJiBSbG10U3RhdGUgIT0gU0tfUkxNVF9SU19ORVRfRE9XTiAqLwotCXJldHVybjsKLX0JLyogU2tSbG10Q2hlY2tTd2l0Y2ggKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tSbG10Q2hlY2tTZWcgLSBSZXBvcnQgaWYgc2VnbWVudGF0aW9uIGlzIGRldGVjdGVkCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIHRoZSBwb3J0cyBzZWUgZGlmZmVyZW50IHJvb3QgYnJpZGdlcyBhbmQgcmVwb3J0cwotICoJc2VnbWVudGF0aW9uIGluIHN1Y2ggYSBjYXNlLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZy4KLSAqLwotUkxNVF9TVEFUSUMgdm9pZAlTa1JsbXRDaGVja1NlZygKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMglOZXRJZHgpCS8qIE5ldCBudW1iZXIgKi8KLXsKLQlTS19FVlBBUkEJUGFyYTsKLQlTS19STE1UX05FVAkqcE5ldDsKLQlTS19VMzIJCWksIGo7Ci0JU0tfQk9PTAkJRXF1YWw7Ci0KLQlwTmV0ID0gJnBBQy0+UmxtdC5OZXRbTmV0SWR4XTsKLQlwTmV0LT5Sb290SWRTZXQgPSBTS19GQUxTRTsKLQlFcXVhbCA9IFNLX1RSVUU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcE5ldC0+TnVtUG9ydHM7IGkrKykgewotCQlpZiAocE5ldC0+UG9ydFtpXS0+TGlua0Rvd24gfHwgIXBOZXQtPlBvcnRbaV0tPlJvb3RJZFNldCkgewotCQkJY29udGludWU7Ci0JCX0KLQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9EVU1QLAotCQkJKCJSb290IElEICVkOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnguXG4iLCBpLAotCQkJCXBOZXQtPlBvcnRbaV0tPlJvb3QuSWRbMF0sIHBOZXQtPlBvcnRbaV0tPlJvb3QuSWRbMV0sCi0JCQkJcE5ldC0+UG9ydFtpXS0+Um9vdC5JZFsyXSwgcE5ldC0+UG9ydFtpXS0+Um9vdC5JZFszXSwKLQkJCQlwTmV0LT5Qb3J0W2ldLT5Sb290LklkWzRdLCBwTmV0LT5Qb3J0W2ldLT5Sb290LklkWzVdLAotCQkJCXBOZXQtPlBvcnRbaV0tPlJvb3QuSWRbNl0sIHBOZXQtPlBvcnRbaV0tPlJvb3QuSWRbN10pKQotCi0JCWlmICghcE5ldC0+Um9vdElkU2V0KSB7Ci0JCQlwTmV0LT5Sb290ID0gcE5ldC0+UG9ydFtpXS0+Um9vdDsKLQkJCXBOZXQtPlJvb3RJZFNldCA9IFNLX1RSVUU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWZvciAoaiA9IDA7IGogPCA4OyBqICsrKSB7Ci0JCQlFcXVhbCAmPSBwTmV0LT5Qb3J0W2ldLT5Sb290LklkW2pdID09IHBOZXQtPlJvb3QuSWRbal07Ci0JCQlpZiAoIUVxdWFsKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmICghRXF1YWwpIHsKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9DT01NLCBTS0VSUl9STE1UX0UwMDUsIFNLRVJSX1JMTVRfRTAwNV9NU0cpOwotCQkJUGFyYS5QYXJhMzJbMF0gPSBOZXRJZHg7Ci0JCQlQYXJhLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1BOTUksIFNLX1BOTUlfRVZUX1JMTVRfU0VHTUVOVEFUSU9OLCBQYXJhKTsKLQotCQkJcE5ldC0+Q2hlY2tpbmdTdGF0ZSAmPSB+U0tfUkxNVF9SQ1NfUkVQT1JUX1NFRzsKLQotCQkJLyogMjAwMC0wMy0wNiBSQTogTmV3LiAqLwotCQkJUGFyYS5QYXJhMzJbMF0gPSBOZXRJZHg7Ci0JCQlQYXJhLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwTmV0LT5TZWdUaW1lciwgU0tfUkxNVF9TRUdfVE9fVkFMLAotCQkJCVNLR0VfUkxNVCwgU0tfUkxNVF9TRUdfVElNLCBQYXJhKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQkvKiBmb3IgKGkgPSAwOyBpIDwgcE5ldC0+TnVtUG9ydHM7IGkrKykgKi8KLQotCS8qIDIwMDAtMDMtMDYgUkE6IE1vdmVkIGhlcmUuICovCi0JLyogU2VnbWVudGF0aW9uIGNoZWNrIG5vdCBydW5uaW5nIGFueW1vcmUuICovCi0JcE5ldC0+Q2hlY2tpbmdTdGF0ZSAmPSB+U0tfUkxNVF9SQ1NfU0VHOwotCi19CS8qIFNrUmxtdENoZWNrU2VnICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdFBvcnRTdGFydCAtIGluaXRpYWxpemUgcG9ydCB2YXJpYWJsZXMgYW5kIHN0YXJ0IHBvcnQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBpbml0aWFsaXplcyBhIHBvcnQncyB2YXJpYWJsZXMgYW5kIGlzc3VlcyBhIFBPUlRfU1RBUlQKLSAqCXRvIHRoZSBIV0FDIG1vZHVsZS4gIFRoaXMgaGFuZGxlcyByZXRyaWVzIGlmIHRoZSBzdGFydCBmYWlscyBvciB0aGUKLSAqCWxpbmsgZXZlbnR1YWxseSBnb2VzIGRvd24uCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVJMTVRfU1RBVElDIHZvaWQJU2tSbG10UG9ydFN0YXJ0KAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIEkvTyBDb250ZXh0ICovCi1TS19VMzIJUG9ydE51bWJlcikJLyogUG9ydCBudW1iZXIgKi8KLXsKLQlTS19FVlBBUkEJUGFyYTsKLQotCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLlBvcnRTdGF0ZSA9IFNLX1JMTVRfUFNfTElOS19ET1dOOwotCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLlBvcnRTdGFydGVkID0gU0tfVFJVRTsKLQlwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5MaW5rRG93biA9IFNLX1RSVUU7Ci0JcEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl0uUG9ydERvd24gPSBTS19UUlVFOwotCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLkNoZWNraW5nU3RhdGUgPSAwOwotCXBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLlJvb3RJZFNldCA9IFNLX0ZBTFNFOwotCVBhcmEuUGFyYTMyWzBdID0gUG9ydE51bWJlcjsKLQlQYXJhLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9IV0FDLCBTS19IV0VWX1BPUlRfU1RBUlQsIFBhcmEpOwotfQkvKiBTa1JsbXRQb3J0U3RhcnQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tSbG10RXZ0UG9ydFN0YXJ0VGltIC0gUE9SVF9TVEFSVF9USU0KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBoYW5kbGVzIFBPUlRfU1RBUlRfVElNIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dFBvcnRTdGFydFRpbSgKLVNLX0FDCQkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkvKiBJL08gQ29udGV4dCAqLwotU0tfRVZQQVJBCVBhcmEpCS8qIFNLX1UzMiBQb3J0TnVtYmVyOyBTS19VMzIgLTEgKi8KLXsKLQlTS19VMzIJCQlpOwotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX1BPUlRTVEFSVF9USU1FT1VUIFBvcnQgJWQgRXZlbnQgQkVHSU4uXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0KLQkJaWYgKFBhcmEuUGFyYTMyWzFdICE9IChTS19VMzIpLTEpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQmFkIFBhcmFtZXRlci5cbiIpKQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1BPUlRTVEFSVF9USU1FT1VUIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFVzZWQgdG8gc3RhcnQgbm9uLXByZWZlcnJlZCBwb3J0cyBpZiB0aGUgcHJlZmVycmVkIG9uZQotCSAqIGRvZXMgbm90IGNvbWUgdXAuCi0JICogVGhpcyB0aW1lb3V0IG5lZWRzIG9ubHkgYmUgc2V0IHdoZW4gc3RhcnRpbmcgdGhlIGZpcnN0Ci0JICogKHByZWZlcnJlZCkgcG9ydC4KLQkgKi8KLQlpZiAocEFDLT5SbG10LlBvcnRbUGFyYS5QYXJhMzJbMF1dLkxpbmtEb3duKSB7Ci0JCS8qIFBPUlRfU1RBUlQgZmFpbGVkLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5SbG10LlBvcnRbUGFyYS5QYXJhMzJbMF1dLk5ldC0+TnVtUG9ydHM7IGkrKykgewotCQkJaWYgKCFwQUMtPlJsbXQuUG9ydFtQYXJhLlBhcmEzMlswXV0uTmV0LT5Qb3J0W2ldLT5Qb3J0U3RhcnRlZCkgewotCQkJCVNrUmxtdFBvcnRTdGFydChwQUMsIElvQywKLQkJCQkJcEFDLT5SbG10LlBvcnRbUGFyYS5QYXJhMzJbMF1dLk5ldC0+UG9ydFtpXS0+UG9ydE51bWJlcik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfUE9SVFNUQVJUX1RJTUVPVVQgRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dFBvcnRTdGFydFRpbSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRMaW5rVXAgLSBMSU5LX1VQCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgaGFuZGxlcyBMTElOS19VUCBldmVudHMuCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0lPCi0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcKLSAqLwotUkxNVF9TVEFUSUMgdm9pZAlTa1JsbXRFdnRMaW5rVXAoCi1TS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBTS19VMzIgUG9ydE51bWJlcjsgU0tfVTMyIFVuZGVmaW5lZCAqLwotewotCVNLX1UzMgkJCWk7Ci0JU0tfUkxNVF9QT1JUCSpwUlBvcnQ7Ci0JU0tfRVZQQVJBCQlQYXJhMjsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9MSU5LX1VQIFBvcnQgJWQgRXZlbnQgQkVHSU4uXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0KLQlwUlBvcnQgPSAmcEFDLT5SbG10LlBvcnRbUGFyYS5QYXJhMzJbMF1dOwotCWlmICghcFJQb3J0LT5Qb3J0U3RhcnRlZCkgewotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX1JMTVRfRTAwOCwgU0tFUlJfUkxNVF9FMDA4X01TRyk7Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCQkoIlNLX1JMTVRfTElOS19VUCBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFwUlBvcnQtPkxpbmtEb3duKSB7Ci0JCS8qIFJBOzo7OiBBbnkgYmV0dGVyIHNvbHV0aW9uPyAqLwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX0xJTktfVVAgRXZlbnQgRU1QVFkuXG4iKSkKLQkJcmV0dXJuOwotCX0KLQotCVNrVGltZXJTdG9wKHBBQywgSW9DLCAmcFJQb3J0LT5VcFRpbWVyKTsKLQlTa1RpbWVyU3RvcChwQUMsIElvQywgJnBSUG9ydC0+RG93blJ4VGltZXIpOwotCVNrVGltZXJTdG9wKHBBQywgSW9DLCAmcFJQb3J0LT5Eb3duVHhUaW1lcik7Ci0KLQkvKiBEbyBzb21ldGhpbmcgaWYgdGltZXIgYWxyZWFkeSBmaXJlZD8gKi8KLQotCXBSUG9ydC0+TGlua0Rvd24gPSBTS19GQUxTRTsKLQlwUlBvcnQtPlBvcnRTdGF0ZSA9IFNLX1JMTVRfUFNfR09JTkdfVVA7Ci0JcFJQb3J0LT5HdVRpbWVTdGFtcCA9IFNrT3NHZXRUaW1lKHBBQyk7Ci0JcFJQb3J0LT5CY1RpbWVTdGFtcCA9IDA7Ci0JcFJQb3J0LT5OZXQtPkxpbmtzVXArKzsKLQlpZiAocFJQb3J0LT5OZXQtPkxpbmtzVXAgPT0gMSkgewotCQlTS19IV0FDX0xJTktfTEVEKHBBQywgSW9DLCBQYXJhLlBhcmEzMlswXSwgU0tfTEVEX0FDVElWRSk7Ci0JfQotCWVsc2UgewotCQlTS19IV0FDX0xJTktfTEVEKHBBQywgSW9DLCBQYXJhLlBhcmEzMlswXSwgU0tfTEVEX1NUQU5EQlkpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBwUlBvcnQtPk5ldC0+TnVtUG9ydHM7IGkrKykgewotCQlpZiAoIXBSUG9ydC0+TmV0LT5Qb3J0W2ldLT5Qb3J0U3RhcnRlZCkgewotCQkJU2tSbG10UG9ydFN0YXJ0KHBBQywgSW9DLCBwUlBvcnQtPk5ldC0+UG9ydFtpXS0+UG9ydE51bWJlcik7Ci0JCX0KLQl9Ci0KLQlTa1JsbXRDaGVja1N3aXRjaChwQUMsIElvQywgcFJQb3J0LT5OZXQtPk5ldE51bWJlcik7Ci0KLQlpZiAocFJQb3J0LT5OZXQtPkxpbmtzVXAgPj0gMikgewotCQlpZiAocFJQb3J0LT5OZXQtPlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19MT0NfTElOSykgewotCQkJLyogQnVpbGQgdGhlIGNoZWNrIGNoYWluLiAqLwotCQkJU2tSbG10QnVpbGRDaGVja0NoYWluKHBBQywgcFJQb3J0LT5OZXQtPk5ldE51bWJlcik7Ci0JCX0KLQl9Ci0KLQkvKiBJZiB0aGUgZmlyc3QgbGluayBjb21lcyB1cCwgc3RhcnQgdGhlIHBlcmlvZGljYWwgUkxNVCB0aW1lb3V0LiAqLwotCWlmIChwUlBvcnQtPk5ldC0+TnVtUG9ydHMgPiAxICYmIHBSUG9ydC0+TmV0LT5MaW5rc1VwID09IDEgJiYKLQkJKHBSUG9ydC0+TmV0LT5SbG10TW9kZSAmIFNLX1JMTVRfQ0hFQ0tfT1RIRVJTKSAhPSAwKSB7Ci0JCVBhcmEyLlBhcmEzMlswXSA9IHBSUG9ydC0+TmV0LT5OZXROdW1iZXI7Ci0JCVBhcmEyLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JCVNrVGltZXJTdGFydChwQUMsIElvQywgJnBSUG9ydC0+TmV0LT5Mb2NUaW1lciwKLQkJCXBSUG9ydC0+TmV0LT5UaW1lb3V0VmFsdWUsIFNLR0VfUkxNVCwgU0tfUkxNVF9USU0sIFBhcmEyKTsKLQl9Ci0KLQlQYXJhMiA9IFBhcmE7Ci0JUGFyYTIuUGFyYTMyWzFdID0gKFNLX1UzMiktMTsKLQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwUlBvcnQtPlVwVGltZXIsIFNLX1JMTVRfUE9SVFVQX1RJTV9WQUwsCi0JCVNLR0VfUkxNVCwgU0tfUkxNVF9QT1JUVVBfVElNLCBQYXJhMik7Ci0JCi0JLyogTGF0ZXI6IGlmIChwQUMtPlJsbXQuUmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX0xPQ19MSU5LKSAmJiAqLwotCWlmICgocFJQb3J0LT5OZXQtPlJsbXRNb2RlICYgU0tfUkxNVF9UUkFOU1BBUkVOVCkgPT0gMCAmJgotCQkocFJQb3J0LT5OZXQtPlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19MSU5LKSAhPSAwICYmCi0JCShQYXJhMi5wUGFyYVB0ciA9Ci0JCQlTa1JsbXRCdWlsZFBhY2tldChwQUMsIElvQywgUGFyYS5QYXJhMzJbMF0sIFNLX1BBQ0tFVF9BTk5PVU5DRSwKLQkJCSZwQUMtPkFkZHIuUG9ydFtQYXJhLlBhcmEzMlswXV0uQ3VycmVudE1hY0FkZHJlc3MsICZTa1JsbXRNY0FkZHIpCi0JCSkgIT0gTlVMTCkgewotCQkvKiBTZW5kICJuZXciIHBhY2tldCB0byBSTE1UIG11bHRpY2FzdCBhZGRyZXNzLiAqLwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0RSViwgU0tfRFJWX1JMTVRfU0VORCwgUGFyYTIpOwotCX0KLQotCWlmIChwUlBvcnQtPk5ldC0+UmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX1NFRykgewotCQlpZiAoKFBhcmEyLnBQYXJhUHRyID0KLQkJCVNrUmxtdEJ1aWxkU3Bhbm5pbmdUcmVlUGFja2V0KHBBQywgSW9DLCBQYXJhLlBhcmEzMlswXSkpICE9IE5VTEwpIHsKLQkJCXBBQy0+UmxtdC5Qb3J0W1BhcmEuUGFyYTMyWzBdXS5Sb290SWRTZXQgPSBTS19GQUxTRTsKLQkJCXBSUG9ydC0+TmV0LT5DaGVja2luZ1N0YXRlIHw9Ci0JCQkJU0tfUkxNVF9SQ1NfU0VHIHwgU0tfUkxNVF9SQ1NfUkVQT1JUX1NFRzsKLQotCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9STE1UX1NFTkQsIFBhcmEyKTsKLQotCQkJUGFyYS5QYXJhMzJbMV0gPSAoU0tfVTMyKS0xOwotCQkJU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcFJQb3J0LT5OZXQtPlNlZ1RpbWVyLAotCQkJCVNLX1JMTVRfU0VHX1RPX1ZBTCwgU0tHRV9STE1ULCBTS19STE1UX1NFR19USU0sIFBhcmEpOwotCQl9Ci0JfQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX0xJTktfVVAgRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dExpbmtVcCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRQb3J0VXBUaW0gLSBQT1JUX1VQX1RJTQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGhhbmRsZXMgUE9SVF9VUF9USU0gZXZlbnRzLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVJMTVRfU1RBVElDIHZvaWQJU2tSbG10RXZ0UG9ydFVwVGltKAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19FVlBBUkEJUGFyYSkJLyogU0tfVTMyIFBvcnROdW1iZXI7IFNLX1UzMiAtMSAqLwotewotCVNLX1JMTVRfUE9SVAkqcFJQb3J0OwotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX1BPUlRVUF9USU0gUG9ydCAlZCBFdmVudCBCRUdJTi5cbiIsIFBhcmEuUGFyYTMyWzBdKSkKLQotCWlmIChQYXJhLlBhcmEzMlsxXSAhPSAoU0tfVTMyKS0xKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBQYXJhbWV0ZXIuXG4iKSkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9QT1JUVVBfVElNIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQlwUlBvcnQgPSAmcEFDLT5SbG10LlBvcnRbUGFyYS5QYXJhMzJbMF1dOwotCWlmIChwUlBvcnQtPkxpbmtEb3duIHx8IChwUlBvcnQtPlBvcnRTdGF0ZSA9PSBTS19STE1UX1BTX1VQKSkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1BPUlRVUF9USU0gUG9ydCAlZCBFdmVudCBFTVBUWS5cbiIsIFBhcmEuUGFyYTMyWzBdKSkKLQkJcmV0dXJuOwotCX0KLQotCXBSUG9ydC0+UG9ydERvd24gPSBTS19GQUxTRTsKLQlwUlBvcnQtPlBvcnRTdGF0ZSA9IFNLX1JMTVRfUFNfVVA7Ci0JcFJQb3J0LT5OZXQtPlBvcnRzVXArKzsKLQlpZiAocFJQb3J0LT5OZXQtPlJsbXRTdGF0ZSAhPSBTS19STE1UX1JTX0lOSVQpIHsKLQkJaWYgKHBBQy0+UmxtdC5OdW1OZXRzIDw9IDEpIHsKLQkJCVNrUmxtdENoZWNrU3dpdGNoKHBBQywgSW9DLCBwUlBvcnQtPk5ldC0+TmV0TnVtYmVyKTsKLQkJfQotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1BOTUksIFNLX1BOTUlfRVZUX1JMTVRfUE9SVF9VUCwgUGFyYSk7Ci0JfQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX1BPUlRVUF9USU0gRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dFBvcnRVcFRpbSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRQb3J0RG93blRpbSAtIFBPUlRfRE9XTl8qCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgaGFuZGxlcyBQT1JUX0RPV05fKiBldmVudHMuCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0lPCi0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcKLSAqLwotUkxNVF9TVEFUSUMgdm9pZAlTa1JsbXRFdnRQb3J0RG93blgoCi1TS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMgkJRXZlbnQsCS8qIEV2ZW50IGNvZGUgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBTS19VMzIgUG9ydE51bWJlcjsgU0tfVTMyIC0xICovCi17Ci0JU0tfUkxNVF9QT1JUCSpwUlBvcnQ7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfUE9SVERPV04qIFBvcnQgJWQgRXZlbnQgKCVkKSBCRUdJTi5cbiIsCi0JCQlQYXJhLlBhcmEzMlswXSwgRXZlbnQpKQotCi0JaWYgKFBhcmEuUGFyYTMyWzFdICE9IChTS19VMzIpLTEpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQmFkIFBhcmFtZXRlci5cbiIpKQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1BPUlRET1dOKiBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JcFJQb3J0ID0gJnBBQy0+UmxtdC5Qb3J0W1BhcmEuUGFyYTMyWzBdXTsKLQlpZiAoIXBSUG9ydC0+UG9ydFN0YXJ0ZWQgfHwgKEV2ZW50ID09IFNLX1JMTVRfUE9SVERPV05fVFhfVElNICYmCi0JCSEocFJQb3J0LT5DaGVja2luZ1N0YXRlICYgU0tfUkxNVF9QQ1NfVFgpKSkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1BPUlRET1dOKiBFdmVudCAoJWQpIEVNUFRZLlxuIiwgRXZlbnQpKQotCQlyZXR1cm47Ci0JfQotCQotCS8qIFN0b3AgcG9ydCdzIHRpbWVycy4gKi8KLQlTa1RpbWVyU3RvcChwQUMsIElvQywgJnBSUG9ydC0+VXBUaW1lcik7Ci0JU2tUaW1lclN0b3AocEFDLCBJb0MsICZwUlBvcnQtPkRvd25SeFRpbWVyKTsKLQlTa1RpbWVyU3RvcChwQUMsIElvQywgJnBSUG9ydC0+RG93blR4VGltZXIpOwotCi0JaWYgKHBSUG9ydC0+UG9ydFN0YXRlICE9IFNLX1JMTVRfUFNfTElOS19ET1dOKSB7Ci0JCXBSUG9ydC0+UG9ydFN0YXRlID0gU0tfUkxNVF9QU19ET1dOOwotCX0KLQotCWlmICghcFJQb3J0LT5Qb3J0RG93bikgewotCQlwUlBvcnQtPk5ldC0+UG9ydHNVcC0tOwotCQlwUlBvcnQtPlBvcnREb3duID0gU0tfVFJVRTsKLQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9QTk1JLCBTS19QTk1JX0VWVF9STE1UX1BPUlRfRE9XTiwgUGFyYSk7Ci0JfQotCi0JcFJQb3J0LT5QYWNrZXRzUGVyVGltZVNsb3QgPSAwOwotCS8qIHBSUG9ydC0+RGF0YVBhY2tldHNQZXJUaW1lU2xvdCA9IDA7ICovCi0JcFJQb3J0LT5CcGR1UGFja2V0c1BlclRpbWVTbG90ID0gMDsKLQlwUlBvcnQtPkJjVGltZVN0YW1wID0gMDsKLQotCS8qCi0JICogUkE7Ojs6IFRvIGJlIGNoZWNrZWQ6Ci0JICogLSBhY3Rpb25zIGF0IFJMTVRfU1RPUDogV2Ugc2hvdWxkIG5vdCBzd2l0Y2ggYW55bW9yZS4KLQkgKi8KLQlpZiAocFJQb3J0LT5OZXQtPlJsbXRTdGF0ZSAhPSBTS19STE1UX1JTX0lOSVQpIHsKLQkJaWYgKFBhcmEuUGFyYTMyWzBdID09Ci0JCQlwUlBvcnQtPk5ldC0+UG9ydFtwUlBvcnQtPk5ldC0+QWN0aXZlUG9ydF0tPlBvcnROdW1iZXIpIHsKLQkJCS8qIEFjdGl2ZSBQb3J0IHdlbnQgZG93bi4gKi8KLQkJCVNrUmxtdENoZWNrU3dpdGNoKHBBQywgSW9DLCBwUlBvcnQtPk5ldC0+TmV0TnVtYmVyKTsKLQkJfQotCX0KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9QT1JURE9XTiogRXZlbnQgKCVkKSBFTkQuXG4iLCBFdmVudCkpCi19CS8qIFNrUmxtdEV2dFBvcnREb3duWCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRMaW5rRG93biAtIExJTktfRE9XTgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGhhbmRsZXMgTElOS19ET1dOIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dExpbmtEb3duKAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19FVlBBUkEJUGFyYSkJLyogU0tfVTMyIFBvcnROdW1iZXI7IFNLX1UzMiBVbmRlZmluZWQgKi8KLXsKLQlTS19STE1UX1BPUlQJKnBSUG9ydDsKLQotCXBSUG9ydCA9ICZwQUMtPlJsbXQuUG9ydFtQYXJhLlBhcmEzMlswXV07Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX0xJTktfRE9XTiBQb3J0ICVkIEV2ZW50IEJFR0lOLlxuIiwgUGFyYS5QYXJhMzJbMF0pKQotCi0JaWYgKCFwQUMtPlJsbXQuUG9ydFtQYXJhLlBhcmEzMlswXV0uTGlua0Rvd24pIHsKLQkJcFJQb3J0LT5OZXQtPkxpbmtzVXAtLTsKLQkJcFJQb3J0LT5MaW5rRG93biA9IFNLX1RSVUU7Ci0JCXBSUG9ydC0+UG9ydFN0YXRlID0gU0tfUkxNVF9QU19MSU5LX0RPV047Ci0JCVNLX0hXQUNfTElOS19MRUQocEFDLCBJb0MsIFBhcmEuUGFyYTMyWzBdLCBTS19MRURfT0ZGKTsKLQotCQlpZiAoKHBSUG9ydC0+TmV0LT5SbG10TW9kZSAmIFNLX1JMTVRfQ0hFQ0tfTE9DX0xJTkspICE9IDApIHsKLQkJCS8qIEJ1aWxkIHRoZSBjaGVjayBjaGFpbi4gKi8KLQkJCVNrUmxtdEJ1aWxkQ2hlY2tDaGFpbihwQUMsIHBSUG9ydC0+TmV0LT5OZXROdW1iZXIpOwotCQl9Ci0KLQkJLyogRW5zdXJlIHRoYXQgcG9ydCBpcyBtYXJrZWQgZG93bi4gKi8KLQkJUGFyYS5QYXJhMzJbMV0gPSAtMTsKLQkJKHZvaWQpU2tSbG10RXZlbnQocEFDLCBJb0MsIFNLX1JMTVRfUE9SVERPV04sIFBhcmEpOwotCX0KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9MSU5LX0RPV04gRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dExpbmtEb3duICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEV2dFBvcnRBZGRyIC0gUE9SVF9BRERSCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgaGFuZGxlcyBQT1JUX0FERFIgZXZlbnRzLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVJMTVRfU1RBVElDIHZvaWQJU2tSbG10RXZ0UG9ydEFkZHIoCi1TS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBTS19VMzIgUG9ydE51bWJlcjsgU0tfVTMyIC0xICovCi17Ci0JU0tfVTMyCQkJaSwgajsKLQlTS19STE1UX1BPUlQJKnBSUG9ydDsKLQlTS19NQUNfQUREUgkJKnBPbGRNYWNBZGRyOwotCVNLX01BQ19BRERSCQkqcE5ld01hY0FkZHI7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfUE9SVF9BRERSIFBvcnQgJWQgRXZlbnQgQkVHSU4uXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0KLQlpZiAoUGFyYS5QYXJhMzJbMV0gIT0gKFNLX1UzMiktMSkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJCYWQgUGFyYW1ldGVyLlxuIikpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfUE9SVF9BRERSIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBQb3J0J3MgcGh5c2ljYWwgTUFDIGFkZHJlc3MgY2hhbmdlZC4gKi8KLQlwT2xkTWFjQWRkciA9ICZwQUMtPkFkZHIuUG9ydFtQYXJhLlBhcmEzMlswXV0uUHJldmlvdXNNYWNBZGRyZXNzOwotCXBOZXdNYWNBZGRyID0gJnBBQy0+QWRkci5Qb3J0W1BhcmEuUGFyYTMyWzBdXS5DdXJyZW50TWFjQWRkcmVzczsKLQotCS8qCi0JICogTk9URTogVGhpcyBpcyBub3Qgc2NhbGFibGUgZm9yIHNvbHV0aW9ucyB3aGVyZSBwb3J0cyBhcmUKLQkgKgkgY2hlY2tlZCByZW1vdGVseS4gIFRoZXJlLCB3ZSBuZWVkIHRvIHNlbmQgYW4gUkxNVAotCSAqCSBhZGRyZXNzIGNoYW5nZSBwYWNrZXQgLSBhbmQgaG93IGRvIHdlIGVuc3VyZSBkZWxpdmVyeT8KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKFNLX1UzMilwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQlwUlBvcnQgPSAmcEFDLT5SbG10LlBvcnRbaV07Ci0JCWZvciAoaiA9IDA7IGogPCBwUlBvcnQtPlBvcnRzQ2hlY2tlZDsgaisrKSB7Ci0JCQlpZiAoU0tfQUREUl9FUVVBTCgKLQkJCQlwUlBvcnQtPlBvcnRDaGVja1tqXS5DaGVja0FkZHIuYSwgcE9sZE1hY0FkZHItPmEpKSB7Ci0JCQkJcFJQb3J0LT5Qb3J0Q2hlY2tbal0uQ2hlY2tBZGRyID0gKnBOZXdNYWNBZGRyOwotCQkJfQotCQl9Ci0JfQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9QT1JUX0FERFIgRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dFBvcnRBZGRyICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEV2dFN0YXJ0IC0gU1RBUlQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBoYW5kbGVzIFNUQVJUIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dFN0YXJ0KAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19FVlBBUkEJUGFyYSkJLyogU0tfVTMyIE5ldE51bWJlcjsgU0tfVTMyIC0xICovCi17Ci0JU0tfRVZQQVJBCVBhcmEyOwotCVNLX1UzMgkJUG9ydElkeDsKLQlTS19VMzIJCVBvcnROdW1iZXI7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfU1RBUlQgTmV0ICVkIEV2ZW50IEJFR0lOLlxuIiwgUGFyYS5QYXJhMzJbMF0pKQotCi0JaWYgKFBhcmEuUGFyYTMyWzFdICE9IChTS19VMzIpLTEpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQmFkIFBhcmFtZXRlci5cbiIpKQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1NUQVJUIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoUGFyYS5QYXJhMzJbMF0gPj0gcEFDLT5SbG10Lk51bU5ldHMpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQmFkIE5ldE51bWJlciAlZC5cbiIsIFBhcmEuUGFyYTMyWzBdKSkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9TVEFSVCBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlJsbXRTdGF0ZSAhPSBTS19STE1UX1JTX0lOSVQpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9TVEFSVCBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBBQy0+UmxtdC5OZXRzU3RhcnRlZCA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJBbGwgbmV0cyBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQuXG4iKSkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9TVEFSVCBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlByZWZQb3J0ID49Ci0JCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLk51bVBvcnRzKSB7Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfUkxNVF9FMDA5LCBTS0VSUl9STE1UX0UwMDlfTVNHKTsKLQotCQkvKiBDaGFuZ2UgUHJlZlBvcnQgdG8gaW50ZXJuYWwgZGVmYXVsdC4gKi8KLQkJUGFyYTIuUGFyYTMyWzBdID0gMHhGRkZGRkZGRjsKLQkJUGFyYTIuUGFyYTMyWzFdID0gUGFyYS5QYXJhMzJbMF07Ci0JCSh2b2lkKVNrUmxtdEV2ZW50KHBBQywgSW9DLCBTS19STE1UX1BSRUZQT1JUX0NIQU5HRSwgUGFyYTIpOwotCX0KLQotCVBvcnRJZHggPSBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5QcmVmUG9ydDsKLQlQb3J0TnVtYmVyID0gcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uUG9ydFtQb3J0SWR4XS0+UG9ydE51bWJlcjsKLQotCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLkxpbmtzVXAgPSAwOwotCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlBvcnRzVXAgPSAwOwotCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLkNoZWNraW5nU3RhdGUgPSAwOwotCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlJsbXRTdGF0ZSA9IFNLX1JMTVRfUlNfTkVUX0RPV047Ci0KLQkvKiBTdGFydCBwcmVmZXJyZWQgcG9ydC4gKi8KLQlTa1JsbXRQb3J0U3RhcnQocEFDLCBJb0MsIFBvcnROdW1iZXIpOwotCi0JLyogU3RhcnQgVGltZXIgKGZvciBmaXJzdCBwb3J0IG9ubHkpLiAqLwotCVBhcmEyLlBhcmEzMlswXSA9IFBvcnROdW1iZXI7Ci0JUGFyYTIuUGFyYTMyWzFdID0gKFNLX1UzMiktMTsKLQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5VcFRpbWVyLAotCQlTS19STE1UX1BPUlRTVEFSVF9USU1fVkFMLCBTS0dFX1JMTVQsIFNLX1JMTVRfUE9SVFNUQVJUX1RJTSwgUGFyYTIpOwotCi0JcEFDLT5SbG10Lk5ldHNTdGFydGVkKys7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1NUQVJUIEV2ZW50IEVORC5cbiIpKQotfQkvKiBTa1JsbXRFdnRTdGFydCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRTdG9wIC0gU1RPUAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGhhbmRsZXMgU1RPUCBldmVudHMuCi0gKgotICogQ29udGV4dDoKLSAqCXJ1bnRpbWUsIHBhZ2VhYmxlPwotICoJbWF5IGJlIGNhbGxlZCBhZnRlciBTS19JTklUX0lPCi0gKgotICogUmV0dXJuczoKLSAqCU5vdGhpbmcKLSAqLwotUkxNVF9TVEFUSUMgdm9pZAlTa1JsbXRFdnRTdG9wKAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19FVlBBUkEJUGFyYSkJLyogU0tfVTMyIE5ldE51bWJlcjsgU0tfVTMyIC0xICovCi17Ci0JU0tfRVZQQVJBCVBhcmEyOwotCVNLX1UzMgkJUG9ydE51bWJlcjsKLQlTS19VMzIJCWk7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfU1RPUCBOZXQgJWQgRXZlbnQgQkVHSU4uXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0KLQlpZiAoUGFyYS5QYXJhMzJbMV0gIT0gKFNLX1UzMiktMSkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJCYWQgUGFyYW1ldGVyLlxuIikpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU1RPUCBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFBhcmEuUGFyYTMyWzBdID49IHBBQy0+UmxtdC5OdW1OZXRzKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBOZXROdW1iZXIgJWQuXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU1RPUCBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlJsbXRTdGF0ZSA9PSBTS19STE1UX1JTX0lOSVQpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9TVE9QIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAocEFDLT5SbG10Lk5ldHNTdGFydGVkID09IDApIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQWxsIG5ldHMgYXJlIHN0b3BwZWQuXG4iKSkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9TVE9QIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBTdG9wIFJMTVQgdGltZXJzLiAqLwotCVNrVGltZXJTdG9wKHBBQywgSW9DLCAmcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uTG9jVGltZXIpOwotCVNrVGltZXJTdG9wKHBBQywgSW9DLCAmcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uU2VnVGltZXIpOwotCi0JLyogU3RvcCBuZXQuICovCi0JcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uUmxtdFN0YXRlID0gU0tfUkxNVF9SU19JTklUOwotCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlJvb3RJZFNldCA9IFNLX0ZBTFNFOwotCVBhcmEyLlBhcmEzMlswXSA9IFNLX1JMTVRfTkVUX0RPV05fRklOQUw7Ci0JUGFyYTIuUGFyYTMyWzFdID0gUGFyYS5QYXJhMzJbMF07CQkJLyogTmV0IyAqLwotCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfRFJWLCBTS19EUlZfTkVUX0RPV04sIFBhcmEyKTsKLQotCS8qIFN0b3AgcG9ydHMuICovCi0JZm9yIChpID0gMDsgaSA8IHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLk51bVBvcnRzOyBpKyspIHsKLQkJUG9ydE51bWJlciA9IHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlBvcnRbaV0tPlBvcnROdW1iZXI7Ci0JCWlmIChwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5Qb3J0U3RhdGUgIT0gU0tfUkxNVF9QU19JTklUKSB7Ci0JCQlTa1RpbWVyU3RvcChwQUMsIElvQywgJnBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLlVwVGltZXIpOwotCQkJU2tUaW1lclN0b3AocEFDLCBJb0MsICZwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5Eb3duUnhUaW1lcik7Ci0JCQlTa1RpbWVyU3RvcChwQUMsIElvQywgJnBBQy0+UmxtdC5Qb3J0W1BvcnROdW1iZXJdLkRvd25UeFRpbWVyKTsKLQotCQkJcEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl0uUG9ydFN0YXRlID0gU0tfUkxNVF9QU19JTklUOwotCQkJcEFDLT5SbG10LlBvcnRbUG9ydE51bWJlcl0uUm9vdElkU2V0ID0gU0tfRkFMU0U7Ci0JCQlwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXS5Qb3J0U3RhcnRlZCA9IFNLX0ZBTFNFOwotCQkJUGFyYTIuUGFyYTMyWzBdID0gUG9ydE51bWJlcjsKLQkJCVBhcmEyLlBhcmEzMlsxXSA9IChTS19VMzIpLTE7Ci0JCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX0hXQUMsIFNLX0hXRVZfUE9SVF9TVE9QLCBQYXJhMik7Ci0JCX0KLQl9Ci0KLQlwQUMtPlJsbXQuTmV0c1N0YXJ0ZWQtLTsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9TVE9QIEV2ZW50IEVORC5cbiIpKQotfQkvKiBTa1JsbXRFdnRTdG9wICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEV2dFRpbSAtIFRJTQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGhhbmRsZXMgVElNIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dFRpbSgKLVNLX0FDCQkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkvKiBJL08gQ29udGV4dCAqLwotU0tfRVZQQVJBCVBhcmEpCS8qIFNLX1UzMiBOZXROdW1iZXI7IFNLX1UzMiAtMSAqLwotewotCVNLX1JMTVRfUE9SVAkqcFJQb3J0OwotCVNLX1UzMgkJCVRpbWVvdXQ7Ci0JU0tfVTMyCQkJTmV3VGltZW91dDsKLQlTS19VMzIJCQlQb3J0TnVtYmVyOwotCVNLX1UzMgkJCWk7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfVElNIEV2ZW50IEJFR0lOLlxuIikpCi0KLQlpZiAoUGFyYS5QYXJhMzJbMV0gIT0gKFNLX1UzMiktMSkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJCYWQgUGFyYW1ldGVyLlxuIikpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfVElNIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19PVEhFUlMpID09IDAgfHwKLQkJcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uTGlua3NVcCA9PSAwKSB7Ci0JCS8qIE1vZGUgY2hhbmdlZCBvciBhbGwgbGlua3MgZG93bjogTm8gbW9yZSBsaW5rIGNoZWNraW5nLiAqLwotCQlyZXR1cm47Ci0JfQotCi0jaWYgMAotCXBBQy0+UmxtdC5Td2l0Y2hDaGVja0NvdW50ZXItLTsKLQlpZiAocEFDLT5SbG10LlN3aXRjaENoZWNrQ291bnRlciA9PSAwKSB7Ci0JCXBBQy0+UmxtdC5Td2l0Y2hDaGVja0NvdW50ZXI7Ci0JfQotI2VuZGlmCS8qIDAgKi8KLQotCU5ld1RpbWVvdXQgPSBTS19STE1UX0RFRl9UT19WQUw7Ci0JZm9yIChpID0gMDsgaSA8IHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLk51bVBvcnRzOyBpKyspIHsKLQkJUG9ydE51bWJlciA9IHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlBvcnRbaV0tPlBvcnROdW1iZXI7Ci0JCXBSUG9ydCA9ICZwQUMtPlJsbXQuUG9ydFtQb3J0TnVtYmVyXTsKLQkJaWYgKCFwUlBvcnQtPkxpbmtEb3duKSB7Ci0JCQlUaW1lb3V0ID0gU2tSbG10Q2hlY2tQb3J0KHBBQywgSW9DLCBQb3J0TnVtYmVyKTsKLQkJCWlmIChUaW1lb3V0IDwgTmV3VGltZW91dCkgewotCQkJCU5ld1RpbWVvdXQgPSBUaW1lb3V0OwotCQkJfQotCi0JCQkvKgotCQkJICogVGhlc2UgY291bnRlcnMgc2hvdWxkIGJlIHNldCB0byAwIGZvciBhbGwgcG9ydHMgYmVmb3JlIHRoZQotCQkJICogZmlyc3QgZnJhbWUgaXMgc2VudCBpbiB0aGUgbmV4dCBsb29wLgotCQkJICovCi0JCQlwUlBvcnQtPlBhY2tldHNQZXJUaW1lU2xvdCA9IDA7Ci0JCQkvKiBwUlBvcnQtPkRhdGFQYWNrZXRzUGVyVGltZVNsb3QgPSAwOyAqLwotCQkJcFJQb3J0LT5CcGR1UGFja2V0c1BlclRpbWVTbG90ID0gMDsKLQkJfQotCX0KLQlwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5UaW1lb3V0VmFsdWUgPSBOZXdUaW1lb3V0OwotCi0JaWYgKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLkxpbmtzVXAgPiAxKSB7Ci0JCS8qCi0JCSAqIElmIGNoZWNraW5nIHJlbW90ZSBwb3J0cywgYWxzbyBzZW5kIHBhY2tldHMgaWYKLQkJICogICAoTGlua3NVcCA9PSAxKSAmJgotCQkgKiAgIHRoaXMgcG9ydCBjaGVja3MgYXQgbGVhc3Qgb25lIChyZW1vdGUpIHBvcnQuCi0JCSAqLwotCi0JCS8qCi0JCSAqIE11c3QgYmUgbmV3IGxvb3AsIGFzIFNrUmxtdENoZWNrUG9ydCBjYW4gcmVxdWVzdCB0bwotCQkgKiBjaGVjayBzZWdtZW50YXRpb24gd2hlbiBlLmcuIGNoZWNraW5nIHRoZSBsYXN0IHBvcnQuCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uTnVtUG9ydHM7IGkrKykgewotCQkJaWYgKCFwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5Qb3J0W2ldLT5MaW5rRG93bikgewotCQkJCVNrUmxtdFNlbmQocEFDLCBJb0MsCi0JCQkJCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlBvcnRbaV0tPlBvcnROdW1iZXIpOwotCQkJfQotCQl9Ci0JfQotCi0JU2tUaW1lclN0YXJ0KHBBQywgSW9DLCAmcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uTG9jVGltZXIsCi0JCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlRpbWVvdXRWYWx1ZSwgU0tHRV9STE1ULCBTS19STE1UX1RJTSwKLQkJUGFyYSk7Ci0KLQlpZiAocEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uTGlua3NVcCA+IDEgJiYKLQkJKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19TRUcpICYmCi0JCShwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5DaGVja2luZ1N0YXRlICYgU0tfUkxNVF9SQ1NfU1RBUlRfU0VHKSkgewotCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5TZWdUaW1lciwKLQkJCVNLX1JMTVRfU0VHX1RPX1ZBTCwgU0tHRV9STE1ULCBTS19STE1UX1NFR19USU0sIFBhcmEpOwotCQlwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5DaGVja2luZ1N0YXRlICY9IH5TS19STE1UX1JDU19TVEFSVF9TRUc7Ci0JCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLkNoZWNraW5nU3RhdGUgfD0KLQkJCVNLX1JMTVRfUkNTX1NFRyB8IFNLX1JMTVRfUkNTX1JFUE9SVF9TRUc7Ci0JfQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9USU0gRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dFRpbSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRTZWdUaW0gLSBTRUdfVElNCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgaGFuZGxlcyBTRUdfVElNIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dFNlZ1RpbSgKLVNLX0FDCQkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkvKiBJL08gQ29udGV4dCAqLwotU0tfRVZQQVJBCVBhcmEpCS8qIFNLX1UzMiBOZXROdW1iZXI7IFNLX1UzMiAtMSAqLwotewotI2lmZGVmIHhERUJVRwotCWludCBqOwotI2VuZGlmCS8qIERFQlVHICovCi0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfU0VHX1RJTSBFdmVudCBCRUdJTi5cbiIpKQotCi0JaWYgKFBhcmEuUGFyYTMyWzFdICE9IChTS19VMzIpLTEpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQmFkIFBhcmFtZXRlci5cbiIpKQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1NFR19USU0gRXZlbnQgRU1QVFkuXG4iKSkKLQkJcmV0dXJuOwotCX0KLQotI2lmZGVmIHhERUJVRwotCWZvciAoaiA9IDA7IGogPCBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5OdW1Qb3J0czsgaisrKSB7Ci0JCVNLX0FERFJfUE9SVAkqcEFQb3J0OwotCQlTS19VMzIJCQlrOwotCQlTS19VMTYJCQkqSW5BZGRyOwotCQlTS19VOAkJCUluQWRkcjhbNl07Ci0KLQkJSW5BZGRyID0gKFNLX1UxNiAqKSZJbkFkZHI4WzBdOwotCQlwQVBvcnQgPSBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5Qb3J0W2pdLT5BZGRyUG9ydDsKLQkJZm9yIChrID0gMDsgayA8IHBBUG9ydC0+TmV4dEV4YWN0TWF0Y2hSbG10OyBrKyspIHsKLQkJCS8qIEdldCBleGFjdCBtYXRjaCBhZGRyZXNzIGsgZnJvbSBwb3J0IGouICovCi0JCQlYTV9JTkFERFIoSW9DLCBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5Qb3J0W2pdLT5Qb3J0TnVtYmVyLAotCQkJCVhNX0VYTShrKSwgSW5BZGRyKTsKLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkJKCJNQyBhZGRyZXNzICVkIG9uIFBvcnQgJXU6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC0tICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeC5cbiIsCi0JCQkJCWssIHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMF1dLlBvcnRbal0tPlBvcnROdW1iZXIsCi0JCQkJCUluQWRkcjhbMF0sIEluQWRkcjhbMV0sIEluQWRkcjhbMl0sCi0JCQkJCUluQWRkcjhbM10sIEluQWRkcjhbNF0sIEluQWRkcjhbNV0sCi0JCQkJCXBBUG9ydC0+RXhhY3Rba10uYVswXSwgcEFQb3J0LT5FeGFjdFtrXS5hWzFdLAotCQkJCQlwQVBvcnQtPkV4YWN0W2tdLmFbMl0sIHBBUG9ydC0+RXhhY3Rba10uYVszXSwKLQkJCQkJcEFQb3J0LT5FeGFjdFtrXS5hWzRdLCBwQVBvcnQtPkV4YWN0W2tdLmFbNV0pKQotCQl9Ci0JfQotI2VuZGlmCS8qIHhERUJVRyAqLwotCQkJCQotCVNrUmxtdENoZWNrU2VnKHBBQywgSW9DLCBQYXJhLlBhcmEzMlswXSk7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1NFR19USU0gRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dFNlZ1RpbSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRQYWNrZXRSeCAtIFBBQ0tFVF9SRUNFSVZFRAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGhhbmRsZXMgUEFDS0VUX1JFQ0VJVkVEIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dFBhY2tldFJ4KAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19FVlBBUkEJUGFyYSkJLyogU0tfTUJVRiAqcE1iICovCi17Ci0JU0tfTUJVRgkqcE1iOwotCVNLX01CVUYJKnBOZXh0TWI7Ci0JU0tfVTMyCU5ldE51bWJlcjsKLQotCQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9QQUNLRVRfUkVDRUlWRUQgRXZlbnQgQkVHSU4uXG4iKSkKLQotCS8qIFNob3VsZCB3ZSBpZ25vcmUgZnJhbWVzIGR1cmluZyBwb3J0IHN3aXRjaGluZz8gKi8KLQotI2lmZGVmIERFQlVHCi0JcE1iID0gUGFyYS5wUGFyYVB0cjsKLQlpZiAocE1iID09IE5VTEwpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwgKCJObyBtYnVmLlxuIikpCi0JfQotCWVsc2UgaWYgKHBNYi0+cE5leHQgIT0gTlVMTCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJNb3JlIHRoYW4gb25lIG1idWYgb3IgcE1iLT5wTmV4dCBub3Qgc2V0LlxuIikpCi0JfQotI2VuZGlmCS8qIERFQlVHICovCi0KLQlmb3IgKHBNYiA9IFBhcmEucFBhcmFQdHI7IHBNYiAhPSBOVUxMOyBwTWIgPSBwTmV4dE1iKSB7Ci0JCXBOZXh0TWIgPSBwTWItPnBOZXh0OwotCQlwTWItPnBOZXh0ID0gTlVMTDsKLQotCQlOZXROdW1iZXIgPSBwQUMtPlJsbXQuUG9ydFtwTWItPlBvcnRJZHhdLk5ldC0+TmV0TnVtYmVyOwotCQlpZiAocEFDLT5SbG10Lk5ldFtOZXROdW1iZXJdLlJsbXRTdGF0ZSA9PSBTS19STE1UX1JTX0lOSVQpIHsKLQkJCVNrRHJ2RnJlZVJsbXRNYnVmKHBBQywgSW9DLCBwTWIpOwotCQl9Ci0JCWVsc2UgewotCQkJU2tSbG10UGFja2V0UmVjZWl2ZShwQUMsIElvQywgcE1iKTsKLQkJfQotCX0KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9QQUNLRVRfUkVDRUlWRUQgRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dFBhY2tldFJ4ICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEV2dFN0YXRzQ2xlYXIgLSBTVEFUU19DTEVBUgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGhhbmRsZXMgU1RBVFNfQ0xFQVIgZXZlbnRzLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVJMTVRfU1RBVElDIHZvaWQJU2tSbG10RXZ0U3RhdHNDbGVhcigKLVNLX0FDCQkqcEFDLAkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwkJSW9DLAkvKiBJL08gQ29udGV4dCAqLwotU0tfRVZQQVJBCVBhcmEpCS8qIFNLX1UzMiBOZXROdW1iZXI7IFNLX1UzMiAtMSAqLwotewotCVNLX1UzMgkJCWk7Ci0JU0tfUkxNVF9QT1JUCSpwUlBvcnQ7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfU1RBVFNfQ0xFQVIgRXZlbnQgQkVHSU4uXG4iKSkKLQotCWlmIChQYXJhLlBhcmEzMlsxXSAhPSAoU0tfVTMyKS0xKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBQYXJhbWV0ZXIuXG4iKSkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9TVEFUU19DTEVBUiBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFBhcmEuUGFyYTMyWzBdID49IHBBQy0+UmxtdC5OdW1OZXRzKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBOZXROdW1iZXIgJWQuXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU1RBVFNfQ0xFQVIgRXZlbnQgRU1QVFkuXG4iKSkKLQkJcmV0dXJuOwotCX0KLQotCS8qIENsZWFyIHN0YXRpc3RpY3MgZm9yIGxvZ2ljYWwgYW5kIHBoeXNpY2FsIHBvcnRzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzBdXS5OdW1Qb3J0czsgaSsrKSB7Ci0JCXBSUG9ydCA9Ci0JCQkmcEFDLT5SbG10LlBvcnRbcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlswXV0uUG9ydFtpXS0+UG9ydE51bWJlcl07Ci0JCXBSUG9ydC0+VHhIZWxsb0N0cyA9IDA7Ci0JCXBSUG9ydC0+UnhIZWxsb0N0cyA9IDA7Ci0JCXBSUG9ydC0+VHhTcEhlbGxvUmVxQ3RzID0gMDsKLQkJcFJQb3J0LT5SeFNwSGVsbG9DdHMgPSAwOwotCX0KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9TVEFUU19DTEVBUiBFdmVudCBFTkQuXG4iKSkKLX0JLyogU2tSbG10RXZ0U3RhdHNDbGVhciAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRTdGF0c1VwZGF0ZSAtIFNUQVRTX1VQREFURQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyByb3V0aW5lIGhhbmRsZXMgU1RBVFNfVVBEQVRFIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dFN0YXRzVXBkYXRlKAotU0tfQUMJCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCQlJb0MsCS8qIEkvTyBDb250ZXh0ICovCi1TS19FVlBBUkEJUGFyYSkJLyogU0tfVTMyIE5ldE51bWJlcjsgU0tfVTMyIC0xICovCi17Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX1NUQVRTX1VQREFURSBFdmVudCBCRUdJTi5cbiIpKQotCi0JaWYgKFBhcmEuUGFyYTMyWzFdICE9IChTS19VMzIpLTEpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQmFkIFBhcmFtZXRlci5cbiIpKQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX1NUQVRTX1VQREFURSBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFBhcmEuUGFyYTMyWzBdID49IHBBQy0+UmxtdC5OdW1OZXRzKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBOZXROdW1iZXIgJWQuXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU1RBVFNfVVBEQVRFIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBVcGRhdGUgc3RhdGlzdGljcyAtIGN1cnJlbnRseSBhbHdheXMgdXAtdG8tZGF0ZS4gKi8KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9TVEFUU19VUERBVEUgRXZlbnQgRU5ELlxuIikpCi19CS8qIFNrUmxtdEV2dFN0YXRzVXBkYXRlICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEV2dFByZWZwb3J0Q2hhbmdlIC0gUFJFRlBPUlRfQ0hBTkdFCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgaGFuZGxlcyBQUkVGUE9SVF9DSEFOR0UgZXZlbnRzLgotICoKLSAqIENvbnRleHQ6Ci0gKglydW50aW1lLCBwYWdlYWJsZT8KLSAqCW1heSBiZSBjYWxsZWQgYWZ0ZXIgU0tfSU5JVF9JTwotICoKLSAqIFJldHVybnM6Ci0gKglOb3RoaW5nCi0gKi8KLVJMTVRfU1RBVElDIHZvaWQJU2tSbG10RXZ0UHJlZnBvcnRDaGFuZ2UoCi1TS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBTS19VMzIgUG9ydEluZGV4OyBTS19VMzIgTmV0TnVtYmVyICovCi17Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTS19STE1UX1BSRUZQT1JUX0NIQU5HRSB0byBQb3J0ICVkIEV2ZW50IEJFR0lOLlxuIiwgUGFyYS5QYXJhMzJbMF0pKQotCi0JaWYgKFBhcmEuUGFyYTMyWzFdID49IHBBQy0+UmxtdC5OdW1OZXRzKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBOZXROdW1iZXIgJWQuXG4iLCBQYXJhLlBhcmEzMlsxXSkpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfUFJFRlBPUlRfQ0hBTkdFIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQkvKiAweEZGRkZGRkZGID09IGF1dG8tbW9kZS4gKi8KLQlpZiAoUGFyYS5QYXJhMzJbMF0gPT0gMHhGRkZGRkZGRikgewotCQlwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5QcmVmUG9ydCA9IFNLX1JMTVRfREVGX1BSRUZfUE9SVDsKLQl9Ci0JZWxzZSB7Ci0JCWlmIChQYXJhLlBhcmEzMlswXSA+PSBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5OdW1Qb3J0cykgewotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9STE1UX0UwMTAsIFNLRVJSX1JMTVRfRTAxMF9NU0cpOwotCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiU0tfUkxNVF9QUkVGUE9SVF9DSEFOR0UgRXZlbnQgRU1QVFkuXG4iKSkKLQkJCXJldHVybjsKLQkJfQotCi0JCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlByZWZQb3J0ID0gUGFyYS5QYXJhMzJbMF07Ci0JfQotCi0JcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlsxXV0uUHJlZmVyZW5jZSA9IFBhcmEuUGFyYTMyWzBdOwotCi0JaWYgKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlJsbXRTdGF0ZSAhPSBTS19STE1UX1JTX0lOSVQpIHsKLQkJU2tSbG10Q2hlY2tTd2l0Y2gocEFDLCBJb0MsIFBhcmEuUGFyYTMyWzFdKTsKLQl9Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfUFJFRlBPUlRfQ0hBTkdFIEV2ZW50IEVORC5cbiIpKQotfQkvKiBTa1JsbXRFdnRQcmVmcG9ydENoYW5nZSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRTZXROZXRzIC0gU0VUX05FVFMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBoYW5kbGVzIFNFVF9ORVRTIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dFNldE5ldHMoCi1TS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBTS19VMzIgTnVtTmV0czsgU0tfVTMyIC0xICovCi17Ci0JaW50IGk7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfU0VUX05FVFMgRXZlbnQgQkVHSU4uXG4iKSkKLQotCWlmIChQYXJhLlBhcmEzMlsxXSAhPSAoU0tfVTMyKS0xKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBQYXJhbWV0ZXIuXG4iKSkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9TRVRfTkVUUyBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFBhcmEuUGFyYTMyWzBdID09IDAgfHwgUGFyYS5QYXJhMzJbMF0gPiBTS19NQVhfTkVUUyB8fAotCQlQYXJhLlBhcmEzMlswXSA+IChTS19VMzIpcEFDLT5HSW5pLkdJTWFjc0ZvdW5kKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkJhZCBudW1iZXIgb2YgbmV0czogJWQuXG4iLCBQYXJhLlBhcmEzMlswXSkpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU0VUX05FVFMgRXZlbnQgRU1QVFkuXG4iKSkKLQkJcmV0dXJuOwotCX0KLQotCWlmIChQYXJhLlBhcmEzMlswXSA9PSBwQUMtPlJsbXQuTnVtTmV0cykgewkvKiBObyBjaGFuZ2UuICovCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU0VUX05FVFMgRXZlbnQgRU1QVFkuXG4iKSkKLQkJcmV0dXJuOwotCX0KLQotCS8qIEVudGVyaW5nIGFuZCBsZWF2aW5nIGR1YWwgbW9kZSBvbmx5IGFsbG93ZWQgd2hpbGUgbmV0cyBhcmUgc3RvcHBlZC4gKi8KLQlpZiAocEFDLT5SbG10Lk5ldHNTdGFydGVkID4gMCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJDaGFuZ2luZyBkdWFsIG1vZGUgb25seSBhbGxvd2VkIHdoaWxlIGFsbCBuZXRzIGFyZSBzdG9wcGVkLlxuIikpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU0VUX05FVFMgRXZlbnQgRU1QVFkuXG4iKSkKLQkJcmV0dXJuOwotCX0KLQotCWlmIChQYXJhLlBhcmEzMlswXSA9PSAxKSB7Ci0JCWlmIChwQUMtPlJsbXQuTnVtTmV0cyA+IDEpIHsKLQkJCS8qIENsZWFyIGxvZ2ljYWwgTUFDIGFkZHIgZnJvbSBzZWNvbmQgbmV0J3MgYWN0aXZlIHBvcnQuICovCi0JCQkodm9pZClTa0FkZHJPdmVycmlkZShwQUMsIElvQywgcEFDLT5SbG10Lk5ldFsxXS5Qb3J0W3BBQy0+QWRkci4KLQkJCQlOZXRbMV0uQWN0aXZlUG9ydF0tPlBvcnROdW1iZXIsIE5VTEwsIFNLX0FERFJfQ0xFQVJfTE9HSUNBTCk7Ci0JCQlwQUMtPlJsbXQuTmV0WzFdLk51bVBvcnRzID0gMDsKLQkJfQotCi0JCXBBQy0+UmxtdC5OdW1OZXRzID0gUGFyYS5QYXJhMzJbMF07Ci0JCWZvciAoaSA9IDA7IChTS19VMzIpaSA8IHBBQy0+UmxtdC5OdW1OZXRzOyBpKyspIHsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUmxtdFN0YXRlID0gU0tfUkxNVF9SU19JTklUOwotCQkJcEFDLT5SbG10Lk5ldFtpXS5Sb290SWRTZXQgPSBTS19GQUxTRTsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUHJlZmVyZW5jZSA9IDB4RkZGRkZGRkY7CSAgLyogIkF1dG9tYXRpYyIgKi8KLQkJCXBBQy0+UmxtdC5OZXRbaV0uUHJlZlBvcnQgPSBTS19STE1UX0RFRl9QUkVGX1BPUlQ7Ci0JCQkvKiBKdXN0IGFzc3VtaW5nLiAqLwotCQkJcEFDLT5SbG10Lk5ldFtpXS5BY3RpdmVQb3J0ID0gcEFDLT5SbG10Lk5ldFtpXS5QcmVmUG9ydDsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUmxtdE1vZGUgPSBTS19STE1UX0RFRl9NT0RFOwotCQkJcEFDLT5SbG10Lk5ldFtpXS5UaW1lb3V0VmFsdWUgPSBTS19STE1UX0RFRl9UT19WQUw7Ci0JCQlwQUMtPlJsbXQuTmV0W2ldLk5ldE51bWJlciA9IGk7Ci0JCX0KLQotCQlwQUMtPlJsbXQuUG9ydFsxXS5OZXQ9ICZwQUMtPlJsbXQuTmV0WzBdOwotCQlwQUMtPlJsbXQuTmV0WzBdLk51bVBvcnRzID0gcEFDLT5HSW5pLkdJTWFjc0ZvdW5kOwotCi0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUE5NSSwgU0tfUE5NSV9FVlRfUkxNVF9TRVRfTkVUUywgUGFyYSk7Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiUkxNVDogQ2hhbmdlZCB0byBvbmUgbmV0IHdpdGggdHdvIHBvcnRzLlxuIikpCi0JfQotCWVsc2UgaWYgKFBhcmEuUGFyYTMyWzBdID09IDIpIHsKLQkJcEFDLT5SbG10LlBvcnRbMV0uTmV0PSAmcEFDLT5SbG10Lk5ldFsxXTsKLQkJcEFDLT5SbG10Lk5ldFsxXS5OdW1Qb3J0cyA9IHBBQy0+R0luaS5HSU1hY3NGb3VuZCAtIDE7Ci0JCXBBQy0+UmxtdC5OZXRbMF0uTnVtUG9ydHMgPQotCQkJcEFDLT5HSW5pLkdJTWFjc0ZvdW5kIC0gcEFDLT5SbG10Lk5ldFsxXS5OdW1Qb3J0czsKLQkJCi0JCXBBQy0+UmxtdC5OdW1OZXRzID0gUGFyYS5QYXJhMzJbMF07Ci0JCWZvciAoaSA9IDA7IChTS19VMzIpaSA8IHBBQy0+UmxtdC5OdW1OZXRzOyBpKyspIHsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUmxtdFN0YXRlID0gU0tfUkxNVF9SU19JTklUOwotCQkJcEFDLT5SbG10Lk5ldFtpXS5Sb290SWRTZXQgPSBTS19GQUxTRTsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUHJlZmVyZW5jZSA9IDB4RkZGRkZGRkY7CSAgLyogIkF1dG9tYXRpYyIgKi8KLQkJCXBBQy0+UmxtdC5OZXRbaV0uUHJlZlBvcnQgPSBTS19STE1UX0RFRl9QUkVGX1BPUlQ7Ci0JCQkvKiBKdXN0IGFzc3VtaW5nLiAqLwotCQkJcEFDLT5SbG10Lk5ldFtpXS5BY3RpdmVQb3J0ID0gcEFDLT5SbG10Lk5ldFtpXS5QcmVmUG9ydDsKLQkJCXBBQy0+UmxtdC5OZXRbaV0uUmxtdE1vZGUgPSBTS19STE1UX0RFRl9NT0RFOwotCQkJcEFDLT5SbG10Lk5ldFtpXS5UaW1lb3V0VmFsdWUgPSBTS19STE1UX0RFRl9UT19WQUw7Ci0KLQkJCXBBQy0+UmxtdC5OZXRbaV0uTmV0TnVtYmVyID0gaTsKLQkJfQotCi0JCS8qIFNldCBsb2dpY2FsIE1BQyBhZGRyIG9uIHNlY29uZCBuZXQncyBhY3RpdmUgcG9ydC4gKi8KLQkJKHZvaWQpU2tBZGRyT3ZlcnJpZGUocEFDLCBJb0MsIHBBQy0+UmxtdC5OZXRbMV0uUG9ydFtwQUMtPkFkZHIuCi0JCQlOZXRbMV0uQWN0aXZlUG9ydF0tPlBvcnROdW1iZXIsIE5VTEwsIFNLX0FERFJfU0VUX0xPR0lDQUwpOwotCi0JCVNrRXZlbnRRdWV1ZShwQUMsIFNLR0VfUE5NSSwgU0tfUE5NSV9FVlRfUkxNVF9TRVRfTkVUUywgUGFyYSk7Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiUkxNVDogQ2hhbmdlZCB0byB0d28gbmV0cyB3aXRoIG9uZSBwb3J0IGVhY2guXG4iKSkKLQl9Ci0JZWxzZSB7Ci0JCS8qIE5vdCBpbXBsZW1lbnRlZCBmb3IgbW9yZSB0aGFuIHR3byBuZXRzLiAqLwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTZXROZXRzIG5vdCBpbXBsZW1lbnRlZCBmb3IgbW9yZSB0aGFuIHR3byBuZXRzLlxuIikpCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIlNLX1JMTVRfU0VUX05FVFMgRXZlbnQgRU1QVFkuXG4iKSkKLQkJcmV0dXJuOwotCX0KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUkxNVCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiU0tfUkxNVF9TRVRfTkVUUyBFdmVudCBFTkQuXG4iKSkKLX0JLyogU2tSbG10U2V0TmV0cyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1JsbXRFdnRNb2RlQ2hhbmdlIC0gTU9ERV9DSEFOR0UKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgcm91dGluZSBoYW5kbGVzIE1PREVfQ0hBTkdFIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJTm90aGluZwotICovCi1STE1UX1NUQVRJQyB2b2lkCVNrUmxtdEV2dE1vZGVDaGFuZ2UoCi1TS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBTS19VMzIgTmV3TW9kZTsgU0tfVTMyIE5ldE51bWJlciAqLwotewotCVNLX0VWUEFSQQlQYXJhMjsKLQlTS19VMzIJCWk7Ci0JU0tfVTMyCQlQcmV2UmxtdE1vZGU7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNLX1JMTVRfTU9ERV9DSEFOR0UgRXZlbnQgQkVHSU4uXG4iKSkKLQotCWlmIChQYXJhLlBhcmEzMlsxXSA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJCYWQgTmV0TnVtYmVyICVkLlxuIiwgUGFyYS5QYXJhMzJbMV0pKQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX01PREVfQ0hBTkdFIEV2ZW50IEVNUFRZLlxuIikpCi0JCXJldHVybjsKLQl9Ci0KLQlQYXJhLlBhcmEzMlswXSB8PSBTS19STE1UX0NIRUNLX0xJTks7Ci0KLQlpZiAoKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLk51bVBvcnRzID09IDEpICYmCi0JCVBhcmEuUGFyYTMyWzBdICE9IFNLX1JMTVRfTU9ERV9DTFMpIHsKLQkJcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlsxXV0uUmxtdE1vZGUgPSBTS19STE1UX01PREVfQ0xTOwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJGb3JjZWQgUkxNVCBtb2RlIHRvIENMUyBvbiBzaW5nbGUgcG9ydCBuZXQuXG4iKSkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiU0tfUkxNVF9NT0RFX0NIQU5HRSBFdmVudCBFTVBUWS5cbiIpKQotCQlyZXR1cm47Ci0JfQotCi0JLyogVXBkYXRlIFJMTVQgbW9kZS4gKi8KLQlQcmV2UmxtdE1vZGUgPSBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5SbG10TW9kZTsKLQlwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5SbG10TW9kZSA9IFBhcmEuUGFyYTMyWzBdOwotCi0JaWYgKChQcmV2UmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX0xPQ19MSU5LKSAhPQotCQkocEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlsxXV0uUmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX0xPQ19MSU5LKSkgewotCQkvKiBTS19STE1UX0NIRUNLX0xPQ19MSU5LIGJpdCBjaGFuZ2VkLiAqLwotCQlpZiAoKFByZXZSbG10TW9kZSAmIFNLX1JMTVRfQ0hFQ0tfT1RIRVJTKSA9PSAwICYmCi0JCQlwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5OdW1Qb3J0cyA+IDEgJiYKLQkJCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlBvcnRzVXAgPj0gMSkgewotCQkJLyogMjAwMDEyMDcgUkE6IFdhcyAiUG9ydHNVcCA9PSAxIi4gKi8KLQkJCVBhcmEyLlBhcmEzMlswXSA9IFBhcmEuUGFyYTMyWzFdOwotCQkJUGFyYTIuUGFyYTMyWzFdID0gKFNLX1UzMiktMTsKLQkJCVNrVGltZXJTdGFydChwQUMsIElvQywgJnBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLkxvY1RpbWVyLAotCQkJCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlRpbWVvdXRWYWx1ZSwKLQkJCQlTS0dFX1JMTVQsIFNLX1JMTVRfVElNLCBQYXJhMik7Ci0JCX0KLQl9Ci0KLQlpZiAoKFByZXZSbG10TW9kZSAmIFNLX1JMTVRfQ0hFQ0tfU0VHKSAhPQotCQkocEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlsxXV0uUmxtdE1vZGUgJiBTS19STE1UX0NIRUNLX1NFRykpIHsKLQkJLyogU0tfUkxNVF9DSEVDS19TRUcgYml0IGNoYW5nZWQuICovCi0JCWZvciAoaSA9IDA7IGkgPCBwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5OdW1Qb3J0czsgaSsrKSB7Ci0JCQkodm9pZClTa0FkZHJNY0NsZWFyKHBBQywgSW9DLAotCQkJCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlBvcnRbaV0tPlBvcnROdW1iZXIsCi0JCQkJU0tfQUREUl9QRVJNQU5FTlQgfCBTS19NQ19TV19PTkxZKTsKLQotCQkJLyogQWRkIFJMTVQgTUMgYWRkcmVzcy4gKi8KLQkJCSh2b2lkKVNrQWRkck1jQWRkKHBBQywgSW9DLAotCQkJCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlBvcnRbaV0tPlBvcnROdW1iZXIsCi0JCQkJJlNrUmxtdE1jQWRkciwgU0tfQUREUl9QRVJNQU5FTlQpOwotCi0JCQlpZiAoKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlJsbXRNb2RlICYKLQkJCQlTS19STE1UX0NIRUNLX1NFRykgIT0gMCkgewotCQkJCS8qIEFkZCBCUERVIE1DIGFkZHJlc3MuICovCi0JCQkJKHZvaWQpU2tBZGRyTWNBZGQocEFDLCBJb0MsCi0JCQkJCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlBvcnRbaV0tPlBvcnROdW1iZXIsCi0JCQkJCSZCcmlkZ2VNY0FkZHIsIFNLX0FERFJfUEVSTUFORU5UKTsKLQotCQkJCWlmIChwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5SbG10U3RhdGUgIT0gU0tfUkxNVF9SU19JTklUKSB7Ci0JCQkJCWlmICghcEFDLT5SbG10Lk5ldFtQYXJhLlBhcmEzMlsxXV0uUG9ydFtpXS0+TGlua0Rvd24gJiYKLQkJCQkJCShQYXJhMi5wUGFyYVB0ciA9IFNrUmxtdEJ1aWxkU3Bhbm5pbmdUcmVlUGFja2V0KAotCQkJCQkJcEFDLCBJb0MsIGkpKSAhPSBOVUxMKSB7Ci0JCQkJCQlwQUMtPlJsbXQuTmV0W1BhcmEuUGFyYTMyWzFdXS5Qb3J0W2ldLT5Sb290SWRTZXQgPQotCQkJCQkJCVNLX0ZBTFNFOwotCQkJCQkJU2tFdmVudFF1ZXVlKHBBQywgU0tHRV9EUlYsIFNLX0RSVl9STE1UX1NFTkQsIFBhcmEyKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCSh2b2lkKVNrQWRkck1jVXBkYXRlKHBBQywgSW9DLAotCQkJCXBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlBvcnRbaV0tPlBvcnROdW1iZXIpOwotCQl9CS8qIGZvciAuLi4gKi8KLQotCQlpZiAoKHBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlJsbXRNb2RlICYgU0tfUkxNVF9DSEVDS19TRUcpICE9IDApIHsKLQkJCVBhcmEyLlBhcmEzMlswXSA9IFBhcmEuUGFyYTMyWzFdOwotCQkJUGFyYTIuUGFyYTMyWzFdID0gKFNLX1UzMiktMTsKLQkJCVNrVGltZXJTdGFydChwQUMsIElvQywgJnBBQy0+UmxtdC5OZXRbUGFyYS5QYXJhMzJbMV1dLlNlZ1RpbWVyLAotCQkJCVNLX1JMTVRfU0VHX1RPX1ZBTCwgU0tHRV9STE1ULCBTS19STE1UX1NFR19USU0sIFBhcmEyKTsKLQkJfQotCX0JLyogU0tfUkxNVF9DSEVDS19TRUcgYml0IGNoYW5nZWQuICovCi0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1JMTVQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTS19STE1UX01PREVfQ0hBTkdFIEV2ZW50IEVORC5cbiIpKQotfQkvKiBTa1JsbXRFdnRNb2RlQ2hhbmdlICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrUmxtdEV2ZW50IC0gYSBQT1JULSBvciBhbiBSTE1ULXNwZWNpZmljIGV2ZW50IGhhcHBlbmVkCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIHJvdXRpbmUgY2FsbHMgc3Vicm91dGluZXMgdG8gaGFuZGxlIFBPUlQtIGFuZCBSTE1ULXNwZWNpZmljIGV2ZW50cy4KLSAqCi0gKiBDb250ZXh0OgotICoJcnVudGltZSwgcGFnZWFibGU/Ci0gKgltYXkgYmUgY2FsbGVkIGFmdGVyIFNLX0lOSVRfSU8KLSAqCi0gKiBSZXR1cm5zOgotICoJMAotICovCi1pbnQJU2tSbG10RXZlbnQoCi1TS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KLVNLX1UzMgkJRXZlbnQsCS8qIEV2ZW50IGNvZGUgKi8KLVNLX0VWUEFSQQlQYXJhKQkvKiBFdmVudC1zcGVjaWZpYyBwYXJhbWV0ZXIgKi8KLXsKLQlzd2l0Y2ggKEV2ZW50KSB7Ci0JCi0JLyogLS0tLS0gUE9SVCBldmVudHMgLS0tLS0gKi8KLQotCWNhc2UgU0tfUkxNVF9QT1JUU1RBUlRfVElNOgkvKiBGcm9tIFJMTVQgdmlhIFRJTUUuICovCi0JCVNrUmxtdEV2dFBvcnRTdGFydFRpbShwQUMsIElvQywgUGFyYSk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfUkxNVF9MSU5LX1VQOgkJLyogRnJvbSBTSVJRLiAqLwotCQlTa1JsbXRFdnRMaW5rVXAocEFDLCBJb0MsIFBhcmEpOwotCQlicmVhazsKLQljYXNlIFNLX1JMTVRfUE9SVFVQX1RJTToJLyogRnJvbSBSTE1UIHZpYSBUSU1FLiAqLwotCQlTa1JsbXRFdnRQb3J0VXBUaW0ocEFDLCBJb0MsIFBhcmEpOwotCQlicmVhazsKLQljYXNlIFNLX1JMTVRfUE9SVERPV046CQkJLyogRnJvbSBSTE1ULiAqLwotCWNhc2UgU0tfUkxNVF9QT1JURE9XTl9SWF9USU06CS8qIEZyb20gUkxNVCB2aWEgVElNRS4gKi8KLQljYXNlIFNLX1JMTVRfUE9SVERPV05fVFhfVElNOgkvKiBGcm9tIFJMTVQgdmlhIFRJTUUuICovCi0JCVNrUmxtdEV2dFBvcnREb3duWChwQUMsIElvQywgRXZlbnQsIFBhcmEpOwotCQlicmVhazsKLQljYXNlIFNLX1JMTVRfTElOS19ET1dOOgkJLyogRnJvbSBTSVJRLiAqLwotCQlTa1JsbXRFdnRMaW5rRG93bihwQUMsIElvQywgUGFyYSk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfUkxNVF9QT1JUX0FERFI6CQkvKiBGcm9tIEFERFIuICovCi0JCVNrUmxtdEV2dFBvcnRBZGRyKHBBQywgSW9DLCBQYXJhKTsKLQkJYnJlYWs7Ci0KLQkvKiAtLS0tLSBSTE1UIGV2ZW50cyAtLS0tLSAqLwotCi0JY2FzZSBTS19STE1UX1NUQVJUOgkJLyogRnJvbSBEUlYuICovCi0JCVNrUmxtdEV2dFN0YXJ0KHBBQywgSW9DLCBQYXJhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19STE1UX1NUT1A6CQkvKiBGcm9tIERSVi4gKi8KLQkJU2tSbG10RXZ0U3RvcChwQUMsIElvQywgUGFyYSk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfUkxNVF9USU06CQkvKiBGcm9tIFJMTVQgdmlhIFRJTUUuICovCi0JCVNrUmxtdEV2dFRpbShwQUMsIElvQywgUGFyYSk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfUkxNVF9TRUdfVElNOgotCQlTa1JsbXRFdnRTZWdUaW0ocEFDLCBJb0MsIFBhcmEpOwotCQlicmVhazsKLQljYXNlIFNLX1JMTVRfUEFDS0VUX1JFQ0VJVkVEOgkvKiBGcm9tIERSVi4gKi8KLQkJU2tSbG10RXZ0UGFja2V0UngocEFDLCBJb0MsIFBhcmEpOwotCQlicmVhazsKLQljYXNlIFNLX1JMTVRfU1RBVFNfQ0xFQVI6CS8qIEZyb20gUE5NSS4gKi8KLQkJU2tSbG10RXZ0U3RhdHNDbGVhcihwQUMsIElvQywgUGFyYSk7Ci0JCWJyZWFrOwotCWNhc2UgU0tfUkxNVF9TVEFUU19VUERBVEU6CS8qIEZyb20gUE5NSS4gKi8KLQkJU2tSbG10RXZ0U3RhdHNVcGRhdGUocEFDLCBJb0MsIFBhcmEpOwotCQlicmVhazsKLQljYXNlIFNLX1JMTVRfUFJFRlBPUlRfQ0hBTkdFOgkvKiBGcm9tIFBOTUkuICovCi0JCVNrUmxtdEV2dFByZWZwb3J0Q2hhbmdlKHBBQywgSW9DLCBQYXJhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTS19STE1UX01PREVfQ0hBTkdFOgkvKiBGcm9tIFBOTUkuICovCi0JCVNrUmxtdEV2dE1vZGVDaGFuZ2UocEFDLCBJb0MsIFBhcmEpOwotCQlicmVhazsKLQljYXNlIFNLX1JMTVRfU0VUX05FVFM6CS8qIEZyb20gRFJWLiAqLwotCQlTa1JsbXRFdnRTZXROZXRzKHBBQywgSW9DLCBQYXJhKTsKLQkJYnJlYWs7Ci0KLQkvKiAtLS0tLSBVbmtub3duIGV2ZW50cyAtLS0tLSAqLwotCi0JZGVmYXVsdDoJLyogQ3JlYXRlIGVycm9yIGxvZyBlbnRyeS4gKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9STE1ULCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiVW5rbm93biBSTE1UIEV2ZW50ICVkLlxuIiwgRXZlbnQpKQotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX1JMTVRfRTAwMywgU0tFUlJfUkxNVF9FMDAzX01TRyk7Ci0JCWJyZWFrOwotCX0JLyogc3dpdGNoKCkgKi8KLQotCXJldHVybiAoMCk7Ci19CS8qIFNrUmxtdEV2ZW50ICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCS8qIF9fY3BsdXNwbHVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrdGltZXIuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2t0aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQ2Mjk1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2t0aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBOYW1lOglza3RpbWVyLmMKLSAqIFByb2plY3Q6CUdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMsIEV2ZW50IFNjaGVkdWxlciBNb2R1bGUKLSAqIFZlcnNpb246CSRSZXZpc2lvbjogMS4xNCAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8wOS8xNiAxMzo0Njo1MSAkCi0gKiBQdXJwb3NlOglIaWdoIGxldmVsIHRpbWVyIGZ1bmN0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJKEMpQ29weXJpZ2h0IDE5OTgtMjAwMiBTeXNLb25uZWN0IEdtYkguCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qCi0gKglFdmVudCBxdWV1ZSBhbmQgZGlzcGF0Y2hlcgotICovCi0jaWYgKGRlZmluZWQoREVCVUcpIHx8ICgoIWRlZmluZWQoTElOVCkpICYmICghZGVmaW5lZChTS19TTElNKSkpKQotc3RhdGljIGNvbnN0IGNoYXIgU3lzS29ubmVjdEZpbGVJZFtdID0KLQkiQCgjKSAkSWQ6IHNrdGltZXIuYyx2IDEuMTQgMjAwMy8wOS8xNiAxMzo0Njo1MSByc2NobWlkdCBFeHAgJCAoQykgTWFydmVsbC4iOwotI2VuZGlmCi0KLSNpbmNsdWRlICJoL3NrZHJ2MXN0LmgiCQkvKiBEcml2ZXIgU3BlY2lmaWMgRGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJoL3NrZHJ2Mm5kLmgiCQkvKiBBZGFwdGVyIENvbnRyb2wtIGFuZCBEcml2ZXIgc3BlY2lmaWMgRGVmLiAqLwotCi0jaWZkZWYgX19DMk1BTl9fCi0vKgotCUV2ZW50IHF1ZXVlIG1hbmFnZW1lbnQuCi0KLQlHZW5lcmFsIERlc2NyaXB0aW9uOgotCi0gKi8KLWludHJvKCkKLXt9Ci0jZW5kaWYKLQotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCi1zdGF0aWMgdm9pZCB0aW1lcl9kb25lKFNLX0FDICpwQUMsU0tfSU9DIElvYyxpbnQgUmVzdGFydCk7Ci0KLQotLyoKLSAqIEluaXRzIHRoZSBzb2Z0d2FyZSB0aW1lcgotICoKLSAqIG5lZWRzIHRvIGJlIGNhbGxlZCBkdXJpbmcgSW5pdCBsZXZlbCAxLgotICovCi12b2lkCVNrVGltZXJJbml0KAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb2MsCQkvKiBJb0NvbnRleHQgKi8KLWludAkJTGV2ZWwpCQkvKiBJbml0IExldmVsICovCi17Ci0Jc3dpdGNoIChMZXZlbCkgewotCWNhc2UgU0tfSU5JVF9EQVRBOgotCQlwQUMtPlRpbS5TdFF1ZXVlID0gTlVMTDsKLQkJYnJlYWs7Ci0JY2FzZSBTS19JTklUX0lPOgotCQlTa0h3dEluaXQocEFDLCBJb2MpOwotCQlTa1RpbWVyRG9uZShwQUMsIElvYyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoKLSAqIFN0b3BzIGEgaGlnaCBsZXZlbCB0aW1lcgotICogLSBJZiBhIHRpbWVyIGlzIG5vdCBpbiB0aGUgcXVldWUgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9ybWFsbHksIHRvby4KLSAqLwotdm9pZAlTa1RpbWVyU3RvcCgKLVNLX0FDCQkqcEFDLAkJLyogQWRhcHRlcnMgY29udGV4dCAqLwotU0tfSU9DCQlJb2MsCQkvKiBJb0NvbnRleHQgKi8KLVNLX1RJTUVSCSpwVGltZXIpCS8qIFRpbWVyIFBvaW50ZXIgdG8gYmUgc3RhcnRlZCAqLwotewotCVNLX1RJTUVSCSoqcHBUaW1QcmV2OwotCVNLX1RJTUVSCSpwVG07Ci0KLQkvKgotCSAqIHJlbW92ZSB0aW1lciBmcm9tIHF1ZXVlCi0JICovCi0JcFRpbWVyLT5UbUFjdGl2ZSA9IFNLX0ZBTFNFOwotCQotCWlmIChwQUMtPlRpbS5TdFF1ZXVlID09IHBUaW1lciAmJiAhcFRpbWVyLT5UbU5leHQpIHsKLQkJU2tId3RTdG9wKHBBQywgSW9jKTsKLQl9Ci0JCi0JZm9yIChwcFRpbVByZXYgPSAmcEFDLT5UaW0uU3RRdWV1ZTsgKHBUbSA9ICpwcFRpbVByZXYpOwotCQlwcFRpbVByZXYgPSAmcFRtLT5UbU5leHQgKSB7Ci0JCQotCQlpZiAocFRtID09IHBUaW1lcikgewotCQkJLyoKLQkJCSAqIFRpbWVyIGZvdW5kIGluIHF1ZXVlCi0JCQkgKiAtIGRlcXVldWUgaXQgYW5kCi0JCQkgKiAtIGNvcnJlY3QgZGVsdGEgb2YgdGhlIG5leHQgdGltZXIKLQkJCSAqLwotCQkJKnBwVGltUHJldiA9IHBUbS0+VG1OZXh0OwotCi0JCQlpZiAocFRtLT5UbU5leHQpIHsKLQkJCQkvKiBjb3JyZWN0IGRlbHRhIG9mIG5leHQgdGltZXIgaW4gcXVldWUgKi8KLQkJCQlwVG0tPlRtTmV4dC0+VG1EZWx0YSArPSBwVG0tPlRtRGVsdGE7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBTdGFydCBhIGhpZ2ggbGV2ZWwgc29mdHdhcmUgdGltZXIKLSAqLwotdm9pZAlTa1RpbWVyU3RhcnQoCi1TS19BQwkJKnBBQywJCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwkJSW9jLAkJLyogSW9Db250ZXh0ICovCi1TS19USU1FUgkqcFRpbWVyLAkvKiBUaW1lciBQb2ludGVyIHRvIGJlIHN0YXJ0ZWQgKi8KLVNLX1UzMgkJVGltZSwJCS8qIFRpbWUgdmFsdWUgKi8KLVNLX1UzMgkJQ2xhc3MsCQkvKiBFdmVudCBDbGFzcyBmb3IgdGhpcyB0aW1lciAqLwotU0tfVTMyCQlFdmVudCwJCS8qIEV2ZW50IFZhbHVlIGZvciB0aGlzIHRpbWVyICovCi1TS19FVlBBUkEJUGFyYSkJCS8qIEV2ZW50IFBhcmFtZXRlciBmb3IgdGhpcyB0aW1lciAqLwotewotCVNLX1RJTUVSCSoqcHBUaW1QcmV2OwotCVNLX1RJTUVSCSpwVG07Ci0JU0tfVTMyCQlEZWx0YTsKLQotCVRpbWUgLz0gMTY7CQkvKiBpbnB1dCBpcyB1UywgY2xvY2sgdGlja3MgYXJlIDE2dVMgKi8KLQkKLQlpZiAoIVRpbWUpCi0JCVRpbWUgPSAxOwotCi0JU2tUaW1lclN0b3AocEFDLCBJb2MsIHBUaW1lcik7Ci0KLQlwVGltZXItPlRtQ2xhc3MgPSBDbGFzczsKLQlwVGltZXItPlRtRXZlbnQgPSBFdmVudDsKLQlwVGltZXItPlRtUGFyYSA9IFBhcmE7Ci0JcFRpbWVyLT5UbUFjdGl2ZSA9IFNLX1RSVUU7Ci0KLQlpZiAoIXBBQy0+VGltLlN0UXVldWUpIHsKLQkJLyogRmlyc3QgVGltZXIgdG8gYmUgc3RhcnRlZCAqLwotCQlwQUMtPlRpbS5TdFF1ZXVlID0gcFRpbWVyOwotCQlwVGltZXItPlRtTmV4dCA9IE5VTEw7Ci0JCXBUaW1lci0+VG1EZWx0YSA9IFRpbWU7Ci0JCQotCQlTa0h3dFN0YXJ0KHBBQywgSW9jLCBUaW1lKTsKLQkJCi0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIHRpbWVyIGNvcnJlY3Rpb24KLQkgKi8KLQl0aW1lcl9kb25lKHBBQywgSW9jLCAwKTsKLQotCS8qCi0JICogZmluZCBwb3NpdGlvbiBpbiBxdWV1ZQotCSAqLwotCURlbHRhID0gMDsKLQlmb3IgKHBwVGltUHJldiA9ICZwQUMtPlRpbS5TdFF1ZXVlOyAocFRtID0gKnBwVGltUHJldik7Ci0JCXBwVGltUHJldiA9ICZwVG0tPlRtTmV4dCApIHsKLQkJCi0JCWlmIChEZWx0YSArIHBUbS0+VG1EZWx0YSA+IFRpbWUpIHsKLQkJCS8qIFBvc2l0aW9uIGZvdW5kICovCi0JCQkvKiBIZXJlIHRoZSB0aW1lciBuZWVkcyB0byBiZSBpbnNlcnRlZC4gKi8KLQkJCWJyZWFrOwotCQl9Ci0JCURlbHRhICs9IHBUbS0+VG1EZWx0YTsKLQl9Ci0KLQkvKiBpbnNlcnQgaW4gcXVldWUgKi8KLQkqcHBUaW1QcmV2ID0gcFRpbWVyOwotCXBUaW1lci0+VG1OZXh0ID0gcFRtOwotCXBUaW1lci0+VG1EZWx0YSA9IFRpbWUgLSBEZWx0YTsKLQotCWlmIChwVG0pIHsKLQkJLyogVGhlcmUgaXMgYSBuZXh0IHRpbWVyCi0JCSAqIC0+IGNvcnJlY3QgaXRzIERlbHRhIHZhbHVlLgotCQkgKi8KLQkJcFRtLT5UbURlbHRhIC09IHBUaW1lci0+VG1EZWx0YTsKLQl9Ci0KLQkvKiByZXN0YXJ0IHdpdGggZmlyc3QgKi8KLQlTa0h3dFN0YXJ0KHBBQywgSW9jLCBwQUMtPlRpbS5TdFF1ZXVlLT5UbURlbHRhKTsKLX0KLQotCi12b2lkCVNrVGltZXJEb25lKAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb2MpCQkvKiBJb0NvbnRleHQgKi8KLXsKLQl0aW1lcl9kb25lKHBBQywgSW9jLCAxKTsKLX0KLQotCi1zdGF0aWMgdm9pZAl0aW1lcl9kb25lKAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb2MsCQkvKiBJb0NvbnRleHQgKi8KLWludAkJUmVzdGFydCkJLyogRG8gd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBIYXJkd2FyZSB0aW1lciA/ICovCi17Ci0JU0tfVTMyCQlEZWx0YTsKLQlTS19USU1FUgkqcFRtOwotCVNLX1RJTUVSCSpwVENvbXA7CS8qIFRpbWVyIGNvbXBsZXRlZCBub3cgbm93ICovCi0JU0tfVElNRVIJKipwcExhc3Q7CS8qIE5leHQgZmllbGQgb2YgTGFzdCB0aW1lciB0byBiZSBkZXEgKi8KLQlpbnQJCURvbmUgPSAwOwotCi0JRGVsdGEgPSBTa0h3dFJlYWQocEFDLCBJb2MpOwotCQotCXBwTGFzdCA9ICZwQUMtPlRpbS5TdFF1ZXVlOwotCXBUbSA9IHBBQy0+VGltLlN0UXVldWU7Ci0Jd2hpbGUgKHBUbSAmJiAhRG9uZSkgewotCQlpZiAoRGVsdGEgPj0gcFRtLT5UbURlbHRhKSB7Ci0JCQkvKiBUaW1lciByYW4gb3V0ICovCi0JCQlwVG0tPlRtQWN0aXZlID0gU0tfRkFMU0U7Ci0JCQlEZWx0YSAtPSBwVG0tPlRtRGVsdGE7Ci0JCQlwcExhc3QgPSAmcFRtLT5UbU5leHQ7Ci0JCQlwVG0gPSBwVG0tPlRtTmV4dDsKLQkJfQotCQllbHNlIHsKLQkJCS8qIFdlIGZvdW5kIHRoZSBmaXJzdCB0aW1lciB0aGF0IGRpZCBub3QgcnVuIG91dCAqLwotCQkJcFRtLT5UbURlbHRhIC09IERlbHRhOwotCQkJRGVsdGEgPSAwOwotCQkJRG9uZSA9IDE7Ci0JCX0KLQl9Ci0JKnBwTGFzdCA9IE5VTEw7Ci0JLyoKLQkgKiBwVG0gcG9pbnRzIHRvIHRoZSBmaXJzdCBUaW1lciB0aGF0IGRpZCBub3QgcnVuIG91dC4KLQkgKiBTdFF1ZXVlIHBvaW50cyB0byB0aGUgZmlyc3QgVGltZXIgdGhhdCBydW4gb3V0LgotCSAqLwotCi0JZm9yICggcFRDb21wID0gcEFDLT5UaW0uU3RRdWV1ZTsgcFRDb21wOyBwVENvbXAgPSBwVENvbXAtPlRtTmV4dCkgewotCQlTa0V2ZW50UXVldWUocEFDLHBUQ29tcC0+VG1DbGFzcywgcFRDb21wLT5UbUV2ZW50LCBwVENvbXAtPlRtUGFyYSk7Ci0JfQotCi0JLyogU2V0IGhlYWQgb2YgdGltZXIgcXVldWUgdG8gdGhlIGZpcnN0IHRpbWVyIHRoYXQgZGlkIG5vdCBydW4gb3V0ICovCi0JcEFDLT5UaW0uU3RRdWV1ZSA9IHBUbTsKLQotCWlmIChSZXN0YXJ0ICYmIHBBQy0+VGltLlN0UXVldWUpIHsKLQkJLyogUmVzdGFydCBIVyB0aW1lciAqLwotCQlTa0h3dFN0YXJ0KHBBQywgSW9jLCBwQUMtPlRpbS5TdFF1ZXVlLT5UbURlbHRhKTsKLQl9Ci19Ci0KLS8qIEVuZCBvZiBmaWxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrdnBkLmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrdnBkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNjYyYWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za3ZwZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2t2cGQuYwotICogUHJvamVjdDoJR0VuZXNpcywgUENJIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcgotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjM3ICQKLSAqIERhdGU6CSREYXRlOiAyMDAzLzAxLzEzIDEwOjQyOjQ1ICQKLSAqIFB1cnBvc2U6CVNoYXJlZCBzb2Z0d2FyZSB0byByZWFkIGFuZCB3cml0ZSBWUEQgZGF0YQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAzIFN5c0tvbm5lY3QgR21iSC4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIiB3aXRob3V0IHdhcnJhbnR5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0JUGxlYXNlIHJlZmVyIHNrdnBkLnR4dCBmb3IgaW5mb3JtYXRpb24gaG93IHRvIGluY2x1ZGUgdGhpcyBtb2R1bGUKLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgU3lzS29ubmVjdEZpbGVJZFtdID0KLQkiQCgjKSRJZDogc2t2cGQuYyx2IDEuMzcgMjAwMy8wMS8xMyAxMDo0Mjo0NSByc2NobWlkdCBFeHAgJCAoQykgU0siOwotCi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgotI2luY2x1ZGUgImgvc2t0eXBlcy5oIgotI2luY2x1ZGUgImgvc2tkZWJ1Zy5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLQotLyoKLSAqIFN0YXRpYyBmdW5jdGlvbnMKLSAqLwotI2lmbmRlZiBTS19LUl9QUk9UTwotc3RhdGljIFNLX1ZQRF9QQVJBCSp2cGRfZmluZF9wYXJhKAotCVNLX0FDCSpwQUMsCi0JY29uc3QgY2hhcgkqa2V5LAotCVNLX1ZQRF9QQVJBICpwKTsKLSNlbHNlCS8qIFNLX0tSX1BST1RPICovCi1zdGF0aWMgU0tfVlBEX1BBUkEJKnZwZF9maW5kX3BhcmEoKTsKLSNlbmRpZgkvKiBTS19LUl9QUk9UTyAqLwotCi0vKgotICogd2FpdHMgZm9yIGEgY29tcGxldGlvbiBvZiBhIFZQRCB0cmFuc2ZlcgotICogVGhlIFZQRCB0cmFuc2ZlciBtdXN0IGNvbXBsZXRlIHdpdGhpbiBTS19USUNLU19QRVJfU0VDLzE2Ci0gKgotICogcmV0dXJucwkwOglzdWNjZXNzLCB0cmFuc2ZlciBjb21wbGV0ZXMKLSAqCQllcnJvcglleGl0KDkpIHdpdGggYSBlcnJvciBtZXNzYWdlCi0gKi8KLXN0YXRpYyBpbnQgVnBkV2FpdCgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIENvbnRleHQgKi8KLWludAkJZXZlbnQpCS8qIGV2ZW50IHRvIHdhaXQgZm9yIChWUERfUkVBRCAvIFZQRF93cml0ZSkgY29tcGxldGlvbiovCi17Ci0JU0tfVTY0CXN0YXJ0X3RpbWU7Ci0JU0tfVTE2CXN0YXRlOwotCi0JU0tfREJHX01TRyhwQUMsU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiVlBEIHdhaXQgZm9yICVzXG4iLCBldmVudD8iV3JpdGUiOiJSZWFkIikpOwotCXN0YXJ0X3RpbWUgPSBTa09zR2V0VGltZShwQUMpOwotCWRvIHsKLQkJaWYgKFNrT3NHZXRUaW1lKHBBQykgLSBzdGFydF90aW1lID4gU0tfVElDS1NfUEVSX1NFQykgewotCi0JCQkvKiBCdWcgZml4IEFGOiBUaHUgTWFyIDI4IDIwMDIKLQkJCSAqIERvIG5vdCBjYWxsOiBWUERfU1RPUChwQUMsIElvQyk7Ci0JCQkgKiBBIHBlbmRpbmcgVlBEIHJlYWQgY3ljbGUgY2FuIG5vdCBiZSBhYm9ydGVkIGJ5IHdyaXRpbmcKLQkJCSAqIFZQRF9XUklURSB0byB0aGUgUENJX1ZQRF9BRFJfUkVHIChWUEQgYWRkcmVzcyByZWdpc3RlcikuCi0JCQkgKiBBbHRob3VnaCB0aGUgd3JpdGUgdGhyZXNob2xkIGluIHRoZSBPVVItcmVnaXN0ZXIgcHJvdGVjdHMKLQkJCSAqIFZQRCByZWFkIG9ubHkgc3BhY2UgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiB0aGlzIGRvZXMgbm90Ci0JCQkgKiBwcm90ZWN0IGEgVlBEIHJlYWQgZnJvbSBiZWluZyBgY29udmVydGVkYCBpbnRvIGEgVlBEIHdyaXRlCi0JCQkgKiBvcGVyYXRpb24gKG9uIHRoZSBmbHkpLiBBcyBhIGNvbnNlcXVlbmNlIHRoZSBWUERfU1RPUCB3b3VsZAotCQkJICogZGVsZXRlIFZQRCByZWFkIG9ubHkgZGF0YS4gSW4gY2FzZSBvZiBhbnkgcHJvYmxlbXMgd2l0aCB0aGUKLQkJCSAqIEkyQyBidXMgd2UgZXhpdCB0aGUgbG9vcCBoZXJlLiBUaGUgSTJDIHJlYWQgb3BlcmF0aW9uIGNhbgotCQkJICogbm90IGJlIGFib3J0ZWQgZXhjZXB0IGJ5IGEgcmVzZXQgKC0+TFIpLgotCQkJICovCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0ZBVEFMIHwgU0tfREJHQ0FUX0VSUiwKLQkJCQkoIkVSUk9SOlZQRCB3YWl0IHRpbWVvdXRcbiIpKTsKLQkJCXJldHVybigxKTsKLQkJfQotCQkKLQkJVlBEX0lOMTYocEFDLCBJb0MsIFBDSV9WUERfQURSX1JFRywgJnN0YXRlKTsKLQkJCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgic3RhdGUgPSAleCwgZXZlbnQgJXhcbiIsc3RhdGUsZXZlbnQpKTsKLQl9IHdoaWxlKChpbnQpKHN0YXRlICYgUENJX1ZQRF9GTEFHKSA9PSBldmVudCk7Ci0KLQlyZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBTS0RJQUcKLQotLyoKLSAqIFJlYWQgdGhlIGR3b3JkIGF0IGFkZHJlc3MgJ2FkZHInIGZyb20gdGhlIFZQRCBFRVBST00uCi0gKgotICogTmVlZGVkIFRpbWU6CU1JTiAxLDMgbXMJTUFYIDIsNiBtcwotICoKLSAqIE5vdGU6IFRoZSBEV29yZCBpcyByZXR1cm5lZCBpbiB0aGUgZW5kaWFuZXNzIG9mIHRoZSBtYWNoaW5lIHRoZSByb3V0aW5lCi0gKiAgICAgICBpcyBydW5uaW5nIG9uLgotICoKLSAqIFJldHVybnMgdGhlIGRhdGEgcmVhZC4KLSAqLwotU0tfVTMyIFZwZFJlYWREV29yZCgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIENvbnRleHQgKi8KLWludAkJYWRkcikJLyogVlBEIGFkZHJlc3MgKi8KLXsKLQlTS19VMzIJUnR2OwotCi0JLyogc3RhcnQgVlBEIHJlYWQgKi8KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiVlBEIHJlYWQgZHdvcmQgYXQgMHgleFxuIixhZGRyKSk7Ci0JYWRkciAmPSB+VlBEX1dSSVRFOwkJLyogZW5zdXJlIHRoZSBSL1cgYml0IGlzIHNldCB0byByZWFkICovCi0KLQlWUERfT1VUMTYocEFDLCBJb0MsIFBDSV9WUERfQURSX1JFRywgKFNLX1UxNilhZGRyKTsKLQotCS8qIGlnbm9yZSByZXR1cm4gY29kZSBoZXJlICovCi0JKHZvaWQpVnBkV2FpdChwQUMsIElvQywgVlBEX1JFQUQpOwotCi0JLyogRG9uJ3Qgc3dhcCBoZXJlLCBpdCdzIGEgZGF0YSBzdHJlYW0gb2YgYnl0ZXMgKi8KLQlSdHYgPSAwOwotCi0JVlBEX0lOMzIocEFDLCBJb0MsIFBDSV9WUERfREFUX1JFRywgJlJ0dik7Ci0JCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9DVFJMLAotCQkoIlZQRCByZWFkIGR3b3JkIGRhdGEgPSAweCV4XG4iLFJ0dikpOwotCXJldHVybihSdHYpOwotfQotCi0jZW5kaWYJLyogU0tESUFHICovCi0KLS8qCi0gKglSZWFkIG9uZSBTdHJlYW0gb2YgJ2xlbicgYnl0ZXMgb2YgVlBEIGRhdGEsIHN0YXJ0aW5nIGF0ICdhZGRyJyBmcm9tCi0gKglvciB0byB0aGUgSTJDIEVFUFJPTS4KLSAqCi0gKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkIC8gd3JpdHRlbi4KLSAqLwotc3RhdGljIGludCBWcGRXcml0ZVN0cmVhbSgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIENvbnRleHQgKi8KLWNoYXIJKmJ1ZiwJLyogZGF0YSBidWZmZXIgKi8KLWludAkJQWRkciwJLyogVlBEIHN0YXJ0IGFkZHJlc3MgKi8KLWludAkJTGVuKQkvKiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAvIHRvIHdyaXRlICovCi17Ci0JaW50CQlpOwotCWludAkJajsKLQlTS19VMTYJQWRyUmVnOwotCWludAkJUnR2OwotCVNLX1U4CSogcENvbXA7CS8qIENvbXBhcmUgcG9pbnRlciAqLwotCVNLX1U4CURhdGE7CQkvKiBJbnB1dCBEYXRhIGZvciBDb21wYXJlICovCi0KLQkvKiBJbml0IENvbXBhcmUgUG9pbnRlciAqLwotCXBDb21wID0gKFNLX1U4ICopIGJ1ZjsKLQotCWZvciAoaSA9IDA7IGkgPCBMZW47IGkrKywgYnVmKyspIHsKLQkJaWYgKChpJXNpemVvZihTS19VMzIpKSA9PSAwKSB7Ci0JCQkvKgotCQkJICogQXQgdGhlIGJlZ2luIG9mIGVhY2ggY3ljbGUgcmVhZCB0aGUgRGF0YSBSZWcKLQkJCSAqIFNvIGl0IGlzIGluaXRpYWxpemVkIGV2ZW4gaWYgb25seSBhIGZldyBieXRlcwotCQkJICogYXJlIHdyaXR0ZW4uCi0JCQkgKi8KLQkJCUFkclJlZyA9IChTS19VMTYpIEFkZHI7Ci0JCQlBZHJSZWcgJj0gflZQRF9XUklURTsJLyogUkVBRCBvcGVyYXRpb24gKi8KLQotCQkJVlBEX09VVDE2KHBBQywgSW9DLCBQQ0lfVlBEX0FEUl9SRUcsIEFkclJlZyk7Ci0KLQkJCS8qIFdhaXQgZm9yIHRlcm1pbmF0aW9uICovCi0JCQlSdHYgPSBWcGRXYWl0KHBBQywgSW9DLCBWUERfUkVBRCk7Ci0JCQlpZiAoUnR2ICE9IDApIHsKLQkJCQlyZXR1cm4oaSk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBXcml0ZSBjdXJyZW50IEJ5dGUgKi8KLQkJVlBEX09VVDgocEFDLCBJb0MsIFBDSV9WUERfREFUX1JFRyArIChpJXNpemVvZihTS19VMzIpKSwKLQkJCQkqKFNLX1U4KilidWYpOwotCi0JCWlmICgoKGklc2l6ZW9mKFNLX1UzMikpID09IDMpIHx8IChpID09IChMZW4gLSAxKSkpIHsKLQkJCS8qIE5ldyBBZGRyZXNzIG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8gVlBEX0FERFIgcmVnICovCi0JCQlBZHJSZWcgPSAoU0tfVTE2KSBBZGRyOwotCQkJQWRkciArPSBzaXplb2YoU0tfVTMyKTsKLQkJCUFkclJlZyB8PSBWUERfV1JJVEU7CS8qIFdSSVRFIG9wZXJhdGlvbiAqLwotCi0JCQlWUERfT1VUMTYocEFDLCBJb0MsIFBDSV9WUERfQURSX1JFRywgQWRyUmVnKTsKLQotCQkJLyogV2FpdCBmb3IgdGVybWluYXRpb24gKi8KLQkJCVJ0diA9IFZwZFdhaXQocEFDLCBJb0MsIFZQRF9XUklURSk7Ci0JCQlpZiAoUnR2ICE9IDApIHsKLQkJCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiwKLQkJCQkJKCJXcml0ZSBUaW1lZCBPdXRcbiIpKTsKLQkJCQlyZXR1cm4oaSAtIChpJXNpemVvZihTS19VMzIpKSk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBOb3cgcmUtcmVhZCB0byB2ZXJpZnkKLQkJCSAqLwotCQkJQWRyUmVnICY9IH5WUERfV1JJVEU7CS8qIFJFQUQgb3BlcmF0aW9uICovCi0KLQkJCVZQRF9PVVQxNihwQUMsIElvQywgUENJX1ZQRF9BRFJfUkVHLCBBZHJSZWcpOwotCi0JCQkvKiBXYWl0IGZvciB0ZXJtaW5hdGlvbiAqLwotCQkJUnR2ID0gVnBkV2FpdChwQUMsIElvQywgVlBEX1JFQUQpOwotCQkJaWYgKFJ0diAhPSAwKSB7Ci0JCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkJCSgiVmVyaWZ5IFRpbWVkIE91dFxuIikpOwotCQkJCXJldHVybihpIC0gKGklc2l6ZW9mKFNLX1UzMikpKTsKLQkJCX0KLQotCQkJZm9yIChqID0gMDsgaiA8PSAoaW50KShpJXNpemVvZihTS19VMzIpKTsgaisrLCBwQ29tcCsrKSB7Ci0JCQkJCi0JCQkJVlBEX0lOOChwQUMsIElvQywgUENJX1ZQRF9EQVRfUkVHICsgaiwgJkRhdGEpOwotCQkJCQotCQkJCWlmIChEYXRhICE9ICpwQ29tcCkgewotCQkJCQkvKiBWZXJpZnkgRXJyb3IgKi8KLQkJCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkJCQkoIldyaXRlU3RyZWFtIFZlcmlmeSBFcnJvclxuIikpOwotCQkJCQlyZXR1cm4oaSAtIChpJXNpemVvZihTS19VMzIpKSArIGopOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXJldHVybihMZW4pOwotfQotCQotCi0vKgotICoJUmVhZCBvbmUgU3RyZWFtIG9mICdsZW4nIGJ5dGVzIG9mIFZQRCBkYXRhLCBzdGFydGluZyBhdCAnYWRkcicgZnJvbQotICoJb3IgdG8gdGhlIEkyQyBFRVBST00uCi0gKgotICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCAvIHdyaXR0ZW4uCi0gKi8KLXN0YXRpYyBpbnQgVnBkUmVhZFN0cmVhbSgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIENvbnRleHQgKi8KLWNoYXIJKmJ1ZiwJLyogZGF0YSBidWZmZXIgKi8KLWludAkJQWRkciwJLyogVlBEIHN0YXJ0IGFkZHJlc3MgKi8KLWludAkJTGVuKQkvKiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAvIHRvIHdyaXRlICovCi17Ci0JaW50CQlpOwotCVNLX1UxNglBZHJSZWc7Ci0JaW50CQlSdHY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTGVuOyBpKyssIGJ1ZisrKSB7Ci0JCWlmICgoaSVzaXplb2YoU0tfVTMyKSkgPT0gMCkgewotCQkJLyogTmV3IEFkZHJlc3MgbmVlZHMgdG8gYmUgd3JpdHRlbiB0byBWUERfQUREUiByZWcgKi8KLQkJCUFkclJlZyA9IChTS19VMTYpIEFkZHI7Ci0JCQlBZGRyICs9IHNpemVvZihTS19VMzIpOwotCQkJQWRyUmVnICY9IH5WUERfV1JJVEU7CS8qIFJFQUQgb3BlcmF0aW9uICovCi0KLQkJCVZQRF9PVVQxNihwQUMsIElvQywgUENJX1ZQRF9BRFJfUkVHLCBBZHJSZWcpOwotCi0JCQkvKiBXYWl0IGZvciB0ZXJtaW5hdGlvbiAqLwotCQkJUnR2ID0gVnBkV2FpdChwQUMsIElvQywgVlBEX1JFQUQpOwotCQkJaWYgKFJ0diAhPSAwKSB7Ci0JCQkJcmV0dXJuKGkpOwotCQkJfQotCQl9Ci0JCVZQRF9JTjgocEFDLCBJb0MsIFBDSV9WUERfREFUX1JFRyArIChpJXNpemVvZihTS19VMzIpKSwKLQkJCShTS19VOCAqKWJ1Zik7Ci0JfQotCi0JcmV0dXJuKExlbik7Ci19Ci0KLS8qCi0gKglSZWFkIG9yZSB3cml0ZXMgJ2xlbicgYnl0ZXMgb2YgVlBEIGRhdGEsIHN0YXJ0aW5nIGF0ICdhZGRyJyBmcm9tCi0gKglvciB0byB0aGUgSTJDIEVFUFJPTS4KLSAqCi0gKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkIC8gd3JpdHRlbi4KLSAqLwotc3RhdGljIGludCBWcGRUcmFuc2ZlckJsb2NrKAotU0tfQUMJKnBBQywJLyogQWRhcHRlcnMgY29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSU8gQ29udGV4dCAqLwotY2hhcgkqYnVmLAkvKiBkYXRhIGJ1ZmZlciAqLwotaW50CQlhZGRyLAkvKiBWUEQgc3RhcnQgYWRkcmVzcyAqLwotaW50CQlsZW4sCS8qIG51bWJlciBvZiBieXRlcyB0byByZWFkIC8gdG8gd3JpdGUgKi8KLWludAkJZGlyKQkvKiB0cmFuc2ZlciBkaXJlY3Rpb24gbWF5IGJlIFZQRF9SRUFEIG9yIFZQRF9XUklURSAqLwotewotCWludAkJUnR2OwkvKiBSZXR1cm4gdmFsdWUgKi8KLQlpbnQJCXZwZF9yb21fc2l6ZTsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJWUEQgJXMgYmxvY2ssIGFkZHIgPSAweCV4LCBsZW4gPSAlZFxuIiwKLQkJZGlyID8gIndyaXRlIiA6ICJyZWFkIiwgYWRkciwgbGVuKSk7Ci0KLQlpZiAobGVuID09IDApCi0JCXJldHVybigwKTsKLQotCXZwZF9yb21fc2l6ZSA9IHBBQy0+dnBkLnJvbV9zaXplOwotCQotCWlmIChhZGRyID4gdnBkX3JvbV9zaXplIC0gNCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiB8IFNLX0RCR0NBVF9GQVRBTCwKLQkJCSgiQWRkcmVzcyBlcnJvcjogMHgleCwgZXhwLiA8IDB4JXhcbiIsCi0JCQlhZGRyLCB2cGRfcm9tX3NpemUgLSA0KSk7Ci0JCXJldHVybigwKTsKLQl9Ci0JCi0JaWYgKGFkZHIgKyBsZW4gPiB2cGRfcm9tX3NpemUpIHsKLQkJbGVuID0gdnBkX3JvbV9zaXplIC0gYWRkcjsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkoIldhcm5pbmc6IGxlbiB3YXMgY3V0IHRvICVkXG4iLCBsZW4pKTsKLQl9Ci0KLQlpZiAoZGlyID09IFZQRF9SRUFEKSB7Ci0JCVJ0diA9IFZwZFJlYWRTdHJlYW0ocEFDLCBJb0MsIGJ1ZiwgYWRkciwgbGVuKTsKLQl9Ci0JZWxzZSB7Ci0JCVJ0diA9IFZwZFdyaXRlU3RyZWFtKHBBQywgSW9DLCBidWYsIGFkZHIsIGxlbik7Ci0JfQotCi0JcmV0dXJuKFJ0dik7Ci19Ci0KLSNpZmRlZiBTS0RJQUcKLQotLyoKLSAqCVJlYWQgJ2xlbicgYnl0ZXMgb2YgVlBEIGRhdGEsIHN0YXJ0aW5nIGF0ICdhZGRyJy4KLSAqCi0gKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkLgotICovCi1pbnQgVnBkUmVhZEJsb2NrKAotU0tfQUMJKnBBQywJLyogcEFDIHBvaW50ZXIgKi8KLVNLX0lPQwlJb0MsCS8qIElPIENvbnRleHQgKi8KLWNoYXIJKmJ1ZiwJLyogYnVmZmVyIHdlcmUgdGhlIGRhdGEgc2hvdWxkIGJlIHN0b3JlZCAqLwotaW50CQlhZGRyLAkvKiBzdGFydCByZWFkaW5nIGF0IHRoZSBWUEQgYWRkcmVzcyAqLwotaW50CQlsZW4pCS8qIG51bWJlciBvZiBieXRlcyB0byByZWFkICovCi17Ci0JcmV0dXJuKFZwZFRyYW5zZmVyQmxvY2socEFDLCBJb0MsIGJ1ZiwgYWRkciwgbGVuLCBWUERfUkVBRCkpOwotfQotCi0vKgotICoJV3JpdGUgJ2xlbicgYnl0ZXMgb2YgKmJ1dCB0byB0aGUgVlBEIEVFUFJPTSwgc3RhcnRpbmcgYXQgJ2FkZHInLgotICoKLSAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHdyaXRlcy4KLSAqLwotaW50IFZwZFdyaXRlQmxvY2soCi1TS19BQwkqcEFDLAkvKiBwQUMgcG9pbnRlciAqLwotU0tfSU9DCUlvQywJLyogSU8gQ29udGV4dCAqLwotY2hhcgkqYnVmLAkvKiBidWZmZXIsIGhvbGRzIHRoZSBkYXRhIHRvIHdyaXRlICovCi1pbnQJCWFkZHIsCS8qIHN0YXJ0IHdyaXRpbmcgYXQgdGhlIFZQRCBhZGRyZXNzICovCi1pbnQJCWxlbikJLyogbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlICovCi17Ci0JcmV0dXJuKFZwZFRyYW5zZmVyQmxvY2socEFDLCBJb0MsIGJ1ZiwgYWRkciwgbGVuLCBWUERfV1JJVEUpKTsKLX0KLSNlbmRpZgkvKiBTS0RJQUcgKi8KLQotLyoKLSAqIChyZSlpbml0aWFsaXplIHRoZSBWUEQgYnVmZmVyCi0gKgotICogUmVhZHMgdGhlIFZQRCBkYXRhIGZyb20gdGhlIEVFUFJPTSBpbnRvIHRoZSBWUEQgYnVmZmVyLgotICogR2V0IHRoZSByZW1haW5pbmcgcmVhZCBvbmx5IGFuZCByZWFkIC8gd3JpdGUgc3BhY2UuCi0gKgotICogcmV0dXJuCTA6CXN1Y2Nlc3MKLSAqCQkxOglmYXRhbCBWUEQgZXJyb3IKLSAqLwotc3RhdGljIGludCBWcGRJbml0KAotU0tfQUMJKnBBQywJLyogQWRhcHRlcnMgY29udGV4dCAqLwotU0tfSU9DCUlvQykJLyogSU8gQ29udGV4dCAqLwotewotCVNLX1ZQRF9QQVJBICpyLCBycDsJLyogUlcgb3IgUlYgKi8KLQlpbnQJCWk7Ci0JdW5zaWduZWQgY2hhcgl4OwotCWludAkJdnBkX3NpemU7Ci0JU0tfVTE2CWRldl9pZDsKLQlTS19VMzIJb3VyX3JlZzI7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0lOSVQsICgiVnBkSW5pdCAuLiAiKSk7Ci0JCi0JVlBEX0lOMTYocEFDLCBJb0MsIFBDSV9ERVZJQ0VfSUQsICZkZXZfaWQpOwotCQotCVZQRF9JTjMyKHBBQywgSW9DLCBQQ0lfT1VSX1JFR18yLCAmb3VyX3JlZzIpOwotCQotCXBBQy0+dnBkLnJvbV9zaXplID0gMjU2IDw8ICgob3VyX3JlZzIgJiBQQ0lfVlBEX1JPTV9TWikgPj4gMTQpOwotCQotCS8qCi0JICogdGhpcyBmdW5jdGlvbiBtaWdodCBnZXQgdXNlZCBiZWZvcmUgdGhlIGhhcmR3YXJlIGlzIGluaXRpYWxpemVkCi0JICogdGhlcmVmb3JlIHdlIGNhbm5vdCBhbHdheXMgdHJ1c3QgaW4gR0lDaGlwSWQKLQkgKi8KLQlpZiAoKChwQUMtPnZwZC52LnZwZF9zdGF0dXMgJiBWUERfVkFMSUQpID09IDAgJiYKLQkJZGV2X2lkICE9IFZQRF9ERVZfSURfR0VORVNJUykgfHwKLQkJKChwQUMtPnZwZC52LnZwZF9zdGF0dXMgJiBWUERfVkFMSUQpICE9IDAgJiYKLQkJIXBBQy0+R0luaS5HSUdlbmVzaXMpKSB7Ci0KLQkJLyogZm9yIFl1a29uIHRoZSBWUEQgc2l6ZSBpcyBhbHdheXMgMjU2ICovCi0JCXZwZF9zaXplID0gVlBEX1NJWkVfWVVLT047Ci0JfQotCWVsc2UgewotCQkvKiBHZW5lc2lzIHVzZXMgdGhlIG1heGltdW0gUk9NIHNpemUgdXAgdG8gNTEyIGZvciBWUEQgKi8KLQkJaWYgKHBBQy0+dnBkLnJvbV9zaXplID4gVlBEX1NJWkVfR0VORVNJUykgewotCQkJdnBkX3NpemUgPSBWUERfU0laRV9HRU5FU0lTOwotCQl9Ci0JCWVsc2UgewotCQkJdnBkX3NpemUgPSBwQUMtPnZwZC5yb21fc2l6ZTsKLQkJfQotCX0KLQotCS8qIHJlYWQgdGhlIFZQRCBkYXRhIGludG8gdGhlIFZQRCBidWZmZXIgKi8KLQlpZiAoVnBkVHJhbnNmZXJCbG9jayhwQUMsIElvQywgcEFDLT52cGQudnBkX2J1ZiwgMCwgdnBkX3NpemUsIFZQRF9SRUFEKQotCQkhPSB2cGRfc2l6ZSkgewotCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSLAotCQkJKCJCbG9jayBSZWFkIEVycm9yXG4iKSk7Ci0JCXJldHVybigxKTsKLQl9Ci0JCi0JcEFDLT52cGQudnBkX3NpemUgPSB2cGRfc2l6ZTsKLQotCS8qIEFzdXMgSzhWIFNlIERlbHV4ZSBidWdmaXguIENvcnJlY3QgVlBEIGNvbnRlbnQgKi8KLQkvKiBNQm8gQXByaWwgMjAwNCAqLwotCWlmICgoKHVuc2lnbmVkIGNoYXIpcEFDLT52cGQudnBkX2J1ZlsweDNmXSA9PSAweDM4KSAmJgotCSAgICAoKHVuc2lnbmVkIGNoYXIpcEFDLT52cGQudnBkX2J1ZlsweDQwXSA9PSAweDNjKSAmJgotCSAgICAoKHVuc2lnbmVkIGNoYXIpcEFDLT52cGQudnBkX2J1ZlsweDQxXSA9PSAweDQ1KSkgewotCQlwcmludGsoInNrOThsaW46IEFzdXMgbWFpbmJvYXJkIHdpdGggYnVnZ3kgVlBEPyAiCi0JCQkJIkNvcnJlY3RpbmcgZGF0YS5cbiIpOwotCQlwQUMtPnZwZC52cGRfYnVmWzB4NDBdID0gMHgzODsKLQl9Ci0KLQotCS8qIGZpbmQgdGhlIGVuZCB0YWcgb2YgdGhlIFJPIGFyZWEgKi8KLQlpZiAoIShyID0gdnBkX2ZpbmRfcGFyYShwQUMsIFZQRF9SViwgJnJwKSkpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIgfCBTS19EQkdDQVRfRkFUQUwsCi0JCQkoIkVuY29kaW5nIEVycm9yOiBSViBUYWcgbm90IGZvdW5kXG4iKSk7Ci0JCXJldHVybigxKTsKLQl9Ci0JCi0JaWYgKHItPnBfdmFsICsgci0+cF9sZW4gPiBwQUMtPnZwZC52cGRfYnVmICsgdnBkX3NpemUvMikgewotCQlTS19EQkdfTVNHKHBBQyxTS19EQkdNT0RfVlBELFNLX0RCR0NBVF9FUlIgfCBTS19EQkdDQVRfRkFUQUwsCi0JCQkoIkVuY29kaW5nIEVycm9yOiBJbnZhbGlkIFZQRCBzdHJ1Y3Qgc2l6ZVxuIikpOwotCQlyZXR1cm4oMSk7Ci0JfQotCXBBQy0+dnBkLnYudnBkX2ZyZWVfcm8gPSByLT5wX2xlbiAtIDE7Ci0KLQkvKiB0ZXN0IHRoZSBjaGVja3N1bSAqLwotCWZvciAoaSA9IDAsIHggPSAwOyAodW5zaWduZWQpaSA8PSAodW5zaWduZWQpdnBkX3NpemUvMiAtIHItPnBfbGVuOyBpKyspIHsKLQkJeCArPSBwQUMtPnZwZC52cGRfYnVmW2ldOwotCX0KLQkKLQlpZiAoeCAhPSAwKSB7Ci0JCS8qIGNoZWNrc3VtIGVycm9yICovCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSIHwgU0tfREJHQ0FUX0ZBVEFMLAotCQkJKCJWUEQgQ2hlY2tzdW0gRXJyb3JcbiIpKTsKLQkJcmV0dXJuKDEpOwotCX0KLQotCS8qIGZpbmQgYW5kIGNoZWNrIHRoZSBlbmQgdGFnIG9mIHRoZSBSVyBhcmVhICovCi0JaWYgKCEociA9IHZwZF9maW5kX3BhcmEocEFDLCBWUERfUlcsICZycCkpKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSIHwgU0tfREJHQ0FUX0ZBVEFMLAotCQkJKCJFbmNvZGluZyBFcnJvcjogUlYgVGFnIG5vdCBmb3VuZFxuIikpOwotCQlyZXR1cm4oMSk7Ci0JfQotCQotCWlmIChyLT5wX3ZhbCA8IHBBQy0+dnBkLnZwZF9idWYgKyB2cGRfc2l6ZS8yKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSIHwgU0tfREJHQ0FUX0ZBVEFMLAotCQkJKCJFbmNvZGluZyBFcnJvcjogSW52YWxpZCBWUEQgc3RydWN0IHNpemVcbiIpKTsKLQkJcmV0dXJuKDEpOwotCX0KLQlwQUMtPnZwZC52LnZwZF9mcmVlX3J3ID0gci0+cF9sZW47Ci0KLQkvKiBldmVyeXRoaW5nIHNlZW1zIHRvIGJlIG9rICovCi0JaWYgKHBBQy0+R0luaS5HSUNoaXBJZCAhPSAwKSB7Ci0JCXBBQy0+dnBkLnYudnBkX3N0YXR1cyB8PSBWUERfVkFMSUQ7Ci0JfQotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9JTklULAotCQkoImRvbmUuIEZyZWUgUk8gPSAlZCwgRnJlZSBSVyA9ICVkXG4iLAotCQlwQUMtPnZwZC52LnZwZF9mcmVlX3JvLCBwQUMtPnZwZC52LnZwZF9mcmVlX3J3KSk7Ci0KLQlyZXR1cm4oMCk7Ci19Ci0KLS8qCi0gKglmaW5kIHRoZSBLZXl3b3JkICdrZXknIGluIHRoZSBWUEQgYnVmZmVyIGFuZCBmaWxscyB0aGUKLSAqCXBhcmFtZXRlciBzdHJ1Y3QgJ3AnIHdpdGggaXQncyB2YWx1ZXMKLSAqCi0gKiByZXR1cm5zCSpwCXN1Y2Nlc3MKLSAqCQkwOglwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBWUEQgZW5jb2RpbmcgZXJyb3IKLSAqLwotc3RhdGljIFNLX1ZQRF9QQVJBICp2cGRfZmluZF9wYXJhKAotU0tfQUMJCSpwQUMsCS8qIGNvbW1vbiBkYXRhIGJhc2UgKi8KLWNvbnN0IGNoYXIJKmtleSwJLyoga2V5d29yZCB0byBmaW5kIChlLmcuICJNTiIpICovCi1TS19WUERfUEFSQSAqcCkJCS8qIHBhcmFtZXRlciBkZXNjcmlwdGlvbiBzdHJ1Y3QgKi8KLXsKLQljaGFyICp2CTsJLyogcG9pbnRzIHRvIFZQRCBidWZmZXIgKi8KLQlpbnQgbWF4OwkvKiBNYXhpbXVtIE51bWJlciBvZiBJdGVyYXRpb25zICovCi0KLQl2ID0gcEFDLT52cGQudnBkX2J1ZjsKLQltYXggPSAxMjg7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiVlBEIGZpbmQgcGFyYSAlcyAuLiAiLGtleSkpOwotCi0JLyogY2hlY2sgbWFuZGF0b3J5IHJlc291cmNlIHR5cGUgSUQgc3RyaW5nIChQcm9kdWN0IE5hbWUpICovCi0JaWYgKCp2ICE9IChjaGFyKVJFU19JRCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiB8IFNLX0RCR0NBVF9GQVRBTCwKLQkJCSgiRXJyb3I6IDB4JXggbWlzc2luZ1xuIiwgUkVTX0lEKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChzdHJjbXAoa2V5LCBWUERfTkFNRSkgPT0gMCkgewotCQlwLT5wX2xlbiA9IFZQRF9HRVRfUkVTX0xFTih2KTsKLQkJcC0+cF92YWwgPSBWUERfR0VUX1ZBTCh2KTsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJmb3VuZCwgbGVuID0gJWRcbiIsIHAtPnBfbGVuKSk7Ci0JCXJldHVybihwKTsKLQl9Ci0KLQl2ICs9IDMgKyBWUERfR0VUX1JFU19MRU4odikgKyAzOwotCWZvciAoOzsgKSB7Ci0JCWlmIChTS19NRU1DTVAoa2V5LHYsMikgPT0gMCkgewotCQkJcC0+cF9sZW4gPSBWUERfR0VUX1ZQRF9MRU4odik7Ci0JCQlwLT5wX3ZhbCA9IFZQRF9HRVRfVkFMKHYpOwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiZm91bmQsIGxlbiA9ICVkXG4iLHAtPnBfbGVuKSk7Ci0JCQlyZXR1cm4ocCk7Ci0JCX0KLQotCQkvKiBleGl0IHdoZW4gcmVhY2hpbmcgdGhlICJSVyIgVGFnIG9yIHRoZSBtYXhpbXVtIG9mIGl0ZXJhLiAqLwotCQltYXgtLTsKLQkJaWYgKFNLX01FTUNNUChWUERfUlcsdiwyKSA9PSAwIHx8IG1heCA9PSAwKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChTS19NRU1DTVAoVlBEX1JWLHYsMikgPT0gMCkgewotCQkJdiArPSAzICsgVlBEX0dFVF9WUERfTEVOKHYpICsgMzsJLyogc2tpcCBWUEQtVyAqLwotCQl9Ci0JCWVsc2UgewotCQkJdiArPSAzICsgVlBEX0dFVF9WUERfTEVOKHYpOwotCQl9Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgic2Nhbm5pbmcgJyVjJWMnIGxlbiA9ICVkXG4iLHZbMF0sdlsxXSx2WzJdKSk7Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0NUUkwsICgibm90IGZvdW5kXG4iKSk7Ci0JaWYgKG1heCA9PSAwKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSIHwgU0tfREJHQ0FUX0ZBVEFMLAotCQkJKCJLZXkvTGVuIEVuY29kaW5nIGVycm9yXG4iKSk7Ci0JfQotI2VuZGlmIC8qIERFQlVHICovCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKglNb3ZlICduJyBieXRlcy4gQmVnaW4gd2l0aCB0aGUgbGFzdCBieXRlIGlmICduJyBpcyA+IDAsCi0gKglTdGFydCB3aXRoIHRoZSBsYXN0IGJ5dGUgaWYgbiBpcyA8IDAuCi0gKgotICogcmV0dXJucyBub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIHZwZF9tb3ZlX3BhcmEoCi1jaGFyCSpzdGFydCwJCS8qIHN0YXJ0IG9mIG1lbW9yeSBibG9jayAqLwotY2hhcgkqZW5kLAkJLyogZW5kIG9mIG1lbW9yeSBibG9jayB0byBtb3ZlICovCi1pbnQJCW4pCQkJLyogbnVtYmVyIG9mIGJ5dGVzIHRoZSBtZW1vcnkgYmxvY2sgaGFzIHRvIGJlIG1vdmVkICovCi17Ci0JY2hhciAqcDsKLQlpbnQgaTsJCS8qIG51bWJlciBvZiBieXRlIGNvcGllZCAqLwotCi0JaWYgKG4gPT0gMCkKLQkJcmV0dXJuOwotCi0JaSA9IChpbnQpIChlbmQgLSBzdGFydCArIDEpOwotCWlmIChuIDwgMCkgewotCQlwID0gc3RhcnQgKyBuOwotCQl3aGlsZSAoaSAhPSAwKSB7Ci0JCQkqcCsrID0gKnN0YXJ0Kys7Ci0JCQlpLS07Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCXAgPSBlbmQgKyBuOwotCQl3aGlsZSAoaSAhPSAwKSB7Ci0JCQkqcC0tID0gKmVuZC0tOwotCQkJaS0tOwotCQl9Ci0JfQotfQotCi0vKgotICoJc2V0dXAgdGhlIFZQRCBrZXl3b3JkICdrZXknIGF0ICdpcCcuCi0gKgotICogcmV0dXJucyBub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIHZwZF9pbnNlcnRfa2V5KAotY29uc3QgY2hhcgkqa2V5LAkvKiBrZXl3b3JkIHRvIGluc2VydCAqLwotY29uc3QgY2hhcgkqYnVmLAkvKiBidWZmZXIgd2l0aCB0aGUga2V5d29yZCB2YWx1ZSAqLwotaW50CQlsZW4sCQkvKiBsZW5ndGggb2YgdGhlIHZhbHVlIHN0cmluZyAqLwotY2hhcgkqaXApCQkvKiBpbnNlcmF0aW9uIHBvaW50ICovCi17Ci0JU0tfVlBEX0tFWSAqcDsKLQotCXAgPSAoU0tfVlBEX0tFWSAqKSBpcDsKLQlwLT5wX2tleVswXSA9IGtleVswXTsKLQlwLT5wX2tleVsxXSA9IGtleVsxXTsKLQlwLT5wX2xlbiA9ICh1bnNpZ25lZCBjaGFyKSBsZW47Ci0JU0tfTUVNQ1BZKCZwLT5wX3ZhbCxidWYsbGVuKTsKLX0KLQotLyoKLSAqCVNldHVwIHRoZSBWUEQgZW5kIHRhZyAiUlYiIC8gIlJXIi4KLSAqCUFsc28gY29ycmVjdCB0aGUgcmVtYWluaW5nIHNwYWNlIHZhcmlhYmxlcyB2cGRfZnJlZV9ybyAvIHZwZF9mcmVlX3J3LgotICoKLSAqIHJldHVybnMJMDoJc3VjY2VzcwotICoJCTE6CWVuY29kaW5nIGVycm9yCi0gKi8KLXN0YXRpYyBpbnQgdnBkX21vZF9lbmR0YWcoCi1TS19BQwkqcEFDLAkJLyogY29tbW9uIGRhdGEgYmFzZSAqLwotY2hhcgkqZXRwKQkJLyogZW5kIHBvaW50ZXIgaW5wdXQgcG9zaXRpb24gKi8KLXsKLQlTS19WUERfS0VZICpwOwotCXVuc2lnbmVkIGNoYXIJeDsKLQlpbnQJaTsKLQlpbnQJdnBkX3NpemU7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiVlBEIG1vZGlmeSBlbmR0YWcgYXQgMHgleCA9ICclYyVjJ1xuIixldHAsZXRwWzBdLGV0cFsxXSkpOwotCi0JdnBkX3NpemUgPSBwQUMtPnZwZC52cGRfc2l6ZTsKLQotCXAgPSAoU0tfVlBEX0tFWSAqKSBldHA7Ci0KLQlpZiAocC0+cF9rZXlbMF0gIT0gJ1InIHx8IChwLT5wX2tleVsxXSAhPSAnVicgJiYgcC0+cF9rZXlbMV0gIT0gJ1cnKSkgewotCQkvKiBzb21ldGhpbmcgd3JvbmcgaGVyZSwgZW5jb2RpbmcgZXJyb3IgKi8KLQkJU0tfREJHX01TRyhwQUMsU0tfREJHTU9EX1ZQRCxTS19EQkdDQVRfRVJSIHwgU0tfREJHQ0FUX0ZBVEFMLAotCQkJKCJFbmNvZGluZyBFcnJvcjogaW52YWxpZCBlbmQgdGFnXG4iKSk7Ci0JCXJldHVybigxKTsKLQl9Ci0JaWYgKGV0cCA+IHBBQy0+dnBkLnZwZF9idWYgKyB2cGRfc2l6ZS8yKSB7Ci0JCS8qIGNyZWF0ZSAiUlciIHRhZyAqLwotCQlwLT5wX2xlbiA9ICh1bnNpZ25lZCBjaGFyKShwQUMtPnZwZC52cGRfYnVmK3ZwZF9zaXplLWV0cC0zLTEpOwotCQlwQUMtPnZwZC52LnZwZF9mcmVlX3J3ID0gKGludCkgcC0+cF9sZW47Ci0JCWkgPSBwQUMtPnZwZC52LnZwZF9mcmVlX3J3OwotCQlldHAgKz0gMzsKLQl9Ci0JZWxzZSB7Ci0JCS8qIGNyZWF0ZSAiUlYiIHRhZyAqLwotCQlwLT5wX2xlbiA9ICh1bnNpZ25lZCBjaGFyKShwQUMtPnZwZC52cGRfYnVmK3ZwZF9zaXplLzItZXRwLTMpOwotCQlwQUMtPnZwZC52LnZwZF9mcmVlX3JvID0gKGludCkgcC0+cF9sZW4gLSAxOwotCi0JCS8qIHNldHVwIGNoZWNrc3VtICovCi0JCWZvciAoaSA9IDAsIHggPSAwOyBpIDwgdnBkX3NpemUvMiAtIHAtPnBfbGVuOyBpKyspIHsKLQkJCXggKz0gcEFDLT52cGQudnBkX2J1ZltpXTsKLQkJfQotCQlwLT5wX3ZhbCA9IChjaGFyKSAwIC0geDsKLQkJaSA9IHBBQy0+dnBkLnYudnBkX2ZyZWVfcm87Ci0JCWV0cCArPSA0OwotCX0KLQl3aGlsZSAoaSkgewotCQkqZXRwKysgPSAweDAwOwotCQlpLS07Ci0JfQotCi0JcmV0dXJuKDApOwotfQotCi0vKgotICoJSW5zZXJ0IGEgVlBEIGtleXdvcmQgaW50byB0aGUgVlBEIGJ1ZmZlci4KLSAqCi0gKglUaGUga2V5d29yZCAna2V5JyBpcyBpbnNlcnRlZCBhdCB0aGUgcG9zaXRpb24gJ2lwJyBpbiB0aGUKLSAqCVZQRCBidWZmZXIuCi0gKglUaGUga2V5d29yZHMgYmVoaW5kIHRoZSBpbnB1dCBwb3NpdGlvbiB3aWxsCi0gKgliZSBtb3ZlZC4gVGhlIFZQRCBlbmQgdGFnICJSViIgb3IgIlJXIiBpcyBnZW5lcmF0ZWQgYWdhaW4uCi0gKgotICogcmV0dXJucwkwOglzdWNjZXNzCi0gKgkJMjoJdmFsdWUgc3RyaW5nIHdhcyBjdXQKLSAqCQk0OglWUEQgZnVsbCwga2V5d29yZCB3YXMgbm90IHdyaXR0ZW4KLSAqCQk2OglmYXRhbCBWUEQgZXJyb3IKLSAqCi0gKi8KLXN0YXRpYyBpbnQJVnBkU2V0dXBQYXJhKAotU0tfQUMJKnBBQywJCS8qIGNvbW1vbiBkYXRhIGJhc2UgKi8KLWNvbnN0IGNoYXIJKmtleSwJLyoga2V5d29yZCB0byBpbnNlcnQgKi8KLWNvbnN0IGNoYXIJKmJ1ZiwJLyogYnVmZmVyIHdpdGggdGhlIGtleXdvcmQgdmFsdWUgKi8KLWludAkJbGVuLAkJLyogbGVuZ3RoIG9mIHRoZSBrZXl3b3JkIHZhbHVlICovCi1pbnQJCXR5cGUsCQkvKiBWUERfUk9fS0VZIG9yIFZQRF9SV19LRVkgKi8KLWludAkJb3ApCQkJLyogb3BlcmF0aW9uIHRvIGRvOiBBRERfS0VZIG9yIE9XUl9LRVkgKi8KLXsKLQlTS19WUERfUEFSQSB2cDsKLQljaGFyCSpldHA7CQkvKiBlbmQgdGFnIHBvc2l0aW9uICovCi0JaW50CWZyZWU7CQkvKiByZW1haW5pbmcgc3BhY2UgaW4gc2VsZWN0ZWQgYXJlYSAqLwotCWNoYXIJKmlwOwkJLyogaW5wdXQgcG9zaXRpb24gaW5zaWRlIHRoZSBWUEQgYnVmZmVyICovCi0JaW50CXJ0djsJCS8qIHJldHVybiBjb2RlICovCi0JaW50CWhlYWQ7CQkvKiBhZGRpdGlvbmFsIGhhZWRlciBieXRlcyB0byBtb3ZlICovCi0JaW50CWZvdW5kOwkJLyogYWRkaXRpbm9hbCBieXRlcyBpZiB0aGUga2V5d29yZCB3YXMgZm91bmQgKi8KLQlpbnQgdnBkX3NpemU7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiVlBEIHNldHVwIHBhcmEga2V5ID0gJXMsIHZhbCA9ICVzXG4iLGtleSxidWYpKTsKLQkKLQl2cGRfc2l6ZSA9IHBBQy0+dnBkLnZwZF9zaXplOwotCi0JcnR2ID0gMDsKLQlpcCA9IE5VTEw7Ci0JaWYgKHR5cGUgPT0gVlBEX1JXX0tFWSkgewotCQkvKiBlbmQgdGFnIGlzICJSVyIgKi8KLQkJZnJlZSA9IHBBQy0+dnBkLnYudnBkX2ZyZWVfcnc7Ci0JCWV0cCA9IHBBQy0+dnBkLnZwZF9idWYgKyAodnBkX3NpemUgLSBmcmVlIC0gMSAtIDMpOwotCX0KLQllbHNlIHsKLQkJLyogZW5kIHRhZyBpcyAiUlYiICovCi0JCWZyZWUgPSBwQUMtPnZwZC52LnZwZF9mcmVlX3JvOwotCQlldHAgPSBwQUMtPnZwZC52cGRfYnVmICsgKHZwZF9zaXplLzIgLSBmcmVlIC0gNCk7Ci0JfQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJGcmVlIFJPID0gJWQsIEZyZWUgUlcgPSAlZFxuIiwKLQkJcEFDLT52cGQudi52cGRfZnJlZV9ybywgcEFDLT52cGQudi52cGRfZnJlZV9ydykpOwotCi0JaGVhZCA9IDA7Ci0JZm91bmQgPSAwOwotCWlmIChvcCA9PSBPV1JfS0VZKSB7Ci0JCWlmICh2cGRfZmluZF9wYXJhKHBBQywga2V5LCAmdnApKSB7Ci0JCQlmb3VuZCA9IDM7Ci0JCQlpcCA9IHZwLnBfdmFsIC0gMzsKLQkJCWZyZWUgKz0gdnAucF9sZW4gKyAzOwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiT3ZlcndyaXRlIEtleVxuIikpOwotCQl9Ci0JCWVsc2UgewotCQkJb3AgPSBBRERfS0VZOwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9DVFJMLAotCQkJCSgiQWRkIEtleVxuIikpOwotCQl9Ci0JfQotCWlmIChvcCA9PSBBRERfS0VZKSB7Ci0JCWlwID0gZXRwOwotCQl2cC5wX2xlbiA9IDA7Ci0JCWhlYWQgPSAzOwotCX0KLQotCWlmIChsZW4gKyAzID4gZnJlZSkgewotCQlpZiAoZnJlZSA8IDcpIHsKLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSLAotCQkJCSgiVlBEIEJ1ZmZlciBPdmVyZmxvdywga2V5d29yZCBub3Qgd3JpdHRlblxuIikpOwotCQkJcmV0dXJuKDQpOwotCQl9Ci0JCS8qIGN1dCBpdCBhZ2FpbiAqLwotCQlsZW4gPSBmcmVlIC0gMzsKLQkJcnR2ID0gMjsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkoIlZQRCBCdWZmZXIgRnVsbCwgS2V5d29yZCB3YXMgY3V0XG4iKSk7Ci0JfQotCi0JdnBkX21vdmVfcGFyYShpcCArIHZwLnBfbGVuICsgZm91bmQsIGV0cCsyLCBsZW4tdnAucF9sZW4raGVhZCk7Ci0JdnBkX2luc2VydF9rZXkoa2V5LCBidWYsIGxlbiwgaXApOwotCWlmICh2cGRfbW9kX2VuZHRhZyhwQUMsIGV0cCArIGxlbiAtIHZwLnBfbGVuICsgaGVhZCkpIHsKLQkJcEFDLT52cGQudi52cGRfc3RhdHVzICY9IH5WUERfVkFMSUQ7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSLAotCQkJKCJWUEQgRW5jb2RpbmcgRXJyb3JcbiIpKTsKLQkJcmV0dXJuKDYpOwotCX0KLQotCXJldHVybihydHYpOwotfQotCi0KLS8qCi0gKglSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgVlBEIEVFUFJPTSBhbmQgY29weSBpdCB0byB0aGUKLSAqCVZQRCBidWZmZXIgaWYgbm90IGFscmVhZHkgZG9uZS4KLSAqCi0gKiByZXR1cm46CUEgcG9pbnRlciB0byB0aGUgdnBkX3N0YXR1cyBzdHJ1Y3R1cmUuIFRoZSBzdHJ1Y3R1cmUgY29udGFpbnMKLSAqCQl0aGlzIGZpZWxkcy4KLSAqLwotU0tfVlBEX1NUQVRVUyAqVnBkU3RhdCgKLVNLX0FDCSpwQUMsCS8qIEFkYXB0ZXJzIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MpCS8qIElPIENvbnRleHQgKi8KLXsKLQlpZiAoKHBBQy0+dnBkLnYudnBkX3N0YXR1cyAmIFZQRF9WQUxJRCkgPT0gMCkgewotCQkodm9pZClWcGRJbml0KHBBQywgSW9DKTsKLQl9Ci0JcmV0dXJuKCZwQUMtPnZwZC52KTsKLX0KLQotCi0vKgotICoJUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIFZQRCBFRVBST00gYW5kIGNvcHkgaXQgdG8gdGhlIFZQRAotICoJYnVmZmVyIGlmIG5vdCBhbHJlYWR5IGRvbmUuCi0gKglTY2FuIHRoZSBWUEQgYnVmZmVyIGZvciBWUEQga2V5d29yZHMgYW5kIGNyZWF0ZSB0aGUgVlBECi0gKglrZXl3b3JkIGxpc3QgYnkgY29weWluZyB0aGUga2V5d29yZHMgdG8gJ2J1ZicsIGFsbCBhZnRlcgotICoJZWFjaCBvdGhlciBhbmQgdGVybWluYXRlZCB3aXRoIGEgJ1wwJy4KLSAqCi0gKiBFeGNlcHRpb25zOglvIFRoZSBSZXNvdXJjZSBUeXBlIElEIFN0cmluZyAocHJvZHVjdCBuYW1lKSBpcyBjYWxsZWQgIk5hbWUiCi0gKgkJbyBUaGUgVlBEIGVuZCB0YWdzICdSVicgYW5kICdSVycgYXJlIG5vdCBsaXN0ZWQKLSAqCi0gKglUaGUgbnVtYmVyIG9mIGNvcGllZCBrZXl3b3JkcyBpcyBjb3VudGVkIGluICdlbGVtZW50cycuCi0gKgotICogcmV0dXJucwkwOglzdWNjZXNzCi0gKgkJMjoJYnVmZmVyIG92ZXJmdWxsLCBvbmUgb3IgbW9yZSBrZXl3b3JkcyBhcmUgbWlzc2luZwotICoJCTY6CWZhdGFsIFZQRCBlcnJvcgotICoKLSAqCWV4YW1wbGUgdmFsdWVzIGFmdGVyIHJldHVybmluZzoKLSAqCi0gKgkJYnVmID0JIk5hbWVcMFBOXDBFQ1wwTU5cMFNOXDBDUFwwVkZcMFZMXDBZQVwwIgotICoJCSpsZW4gPQkJMzAKLSAqCQkqZWxlbWVudHMgPQkgOQotICovCi1pbnQgVnBkS2V5cygKLVNLX0FDCSpwQUMsCQkvKiBjb21tb24gZGF0YSBiYXNlICovCi1TS19JT0MJSW9DLAkJLyogSU8gQ29udGV4dCAqLwotY2hhcgkqYnVmLAkJLyogYnVmZmVyIHdoZXJlIHRvIGNvcHkgdGhlIGtleXdvcmRzICovCi1pbnQJCSpsZW4sCQkvKiBidWZmZXIgbGVuZ3RoICovCi1pbnQJCSplbGVtZW50cykJLyogbnVtYmVyIG9mIGtleXdvcmRzIHJldHVybmVkICovCi17Ci0JY2hhciAqdjsKLQlpbnQgbjsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfUlgsICgibGlzdCBWUEQga2V5cyAuLiAiKSk7Ci0JKmVsZW1lbnRzID0gMDsKLQlpZiAoKHBBQy0+dnBkLnYudnBkX3N0YXR1cyAmIFZQRF9WQUxJRCkgPT0gMCkgewotCQlpZiAoVnBkSW5pdChwQUMsIElvQykgIT0gMCkgewotCQkJKmxlbiA9IDA7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiwKLQkJCQkoIlZQRCBJbml0IEVycm9yLCB0ZXJtaW5hdGVkXG4iKSk7Ci0JCQlyZXR1cm4oNik7Ci0JCX0KLQl9Ci0KLQlpZiAoKHNpZ25lZClzdHJsZW4oVlBEX05BTUUpICsgMSA8PSAqbGVuKSB7Ci0JCXYgPSBwQUMtPnZwZC52cGRfYnVmOwotCQlzdHJjcHkoYnVmLFZQRF9OQU1FKTsKLQkJbiA9IHN0cmxlbihWUERfTkFNRSkgKyAxOwotCQlidWYgKz0gbjsKLQkJKmVsZW1lbnRzID0gMTsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9SWCwKLQkJCSgiJyVjJWMnICIsdlswXSx2WzFdKSk7Ci0JfQotCWVsc2UgewotCQkqbGVuID0gMDsKLQkJU0tfREJHX01TRyhwQUMsU0tfREJHTU9EX1ZQRCxTS19EQkdDQVRfRVJSLAotCQkJKCJidWZmZXIgb3ZlcmZsb3dcbiIpKTsKLQkJcmV0dXJuKDIpOwotCX0KLQotCXYgKz0gMyArIFZQRF9HRVRfUkVTX0xFTih2KSArIDM7Ci0JZm9yICg7OyApIHsKLQkJLyogZXhpdCB3aGVuIHJlYWNoaW5nIHRoZSAiUlciIFRhZyAqLwotCQlpZiAoU0tfTUVNQ01QKFZQRF9SVyx2LDIpID09IDApIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKFNLX01FTUNNUChWUERfUlYsdiwyKSA9PSAwKSB7Ci0JCQl2ICs9IDMgKyBWUERfR0VUX1ZQRF9MRU4odikgKyAzOwkvKiBza2lwIFZQRC1XICovCi0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChuKzMgPD0gKmxlbikgewotCQkJU0tfTUVNQ1BZKGJ1Zix2LDIpOwotCQkJYnVmICs9IDI7Ci0JCQkqYnVmKysgPSAnXDAnOwotCQkJbiArPSAzOwotCQkJdiArPSAzICsgVlBEX0dFVF9WUERfTEVOKHYpOwotCQkJKmVsZW1lbnRzICs9IDE7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX1JYLAotCQkJCSgiJyVjJWMnICIsdlswXSx2WzFdKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkqbGVuID0gbjsKLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSLAotCQkJCSgiYnVmZmVyIG92ZXJmbG93XG4iKSk7Ci0JCQlyZXR1cm4oMik7Ci0JCX0KLQl9Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX1JYLCAoIlxuIikpOwotCSpsZW4gPSBuOwotCXJldHVybigwKTsKLX0KLQotCi0vKgotICoJUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIFZQRCBFRVBST00gYW5kIGNvcHkgaXQgdG8gdGhlCi0gKglWUEQgYnVmZmVyIGlmIG5vdCBhbHJlYWR5IGRvbmUuIFNlYXJjaCBmb3IgdGhlIFZQRCBrZXl3b3JkCi0gKgkna2V5JyBhbmQgY29weSBpdHMgdmFsdWUgdG8gJ2J1ZicuIEFkZCBhIHRlcm1pbmF0aW5nICdcMCcuCi0gKglJZiB0aGUgdmFsdWUgZG9lcyBub3QgZml0IGludG8gdGhlIGJ1ZmZlciBjdXQgaXQgYWZ0ZXIKLSAqCSdsZW4nIC0gMSBieXRlcy4KLSAqCi0gKiByZXR1cm5zCTA6CXN1Y2Nlc3MKLSAqCQkxOglrZXl3b3JkIG5vdCBmb3VuZAotICoJCTI6CXZhbHVlIHN0cmluZyB3YXMgY3V0Ci0gKgkJMzoJVlBEIHRyYW5zZmVyIHRpbWVvdXQKLSAqCQk2OglmYXRhbCBWUEQgZXJyb3IKLSAqLwotaW50IFZwZFJlYWQoCi1TS19BQwkJKnBBQywJLyogY29tbW9uIGRhdGEgYmFzZSAqLwotU0tfSU9DCQlJb0MsCS8qIElPIENvbnRleHQgKi8KLWNvbnN0IGNoYXIJKmtleSwJLyoga2V5d29yZCB0byByZWFkIChlLmcuICJNTiIpICovCi1jaGFyCQkqYnVmLAkvKiBidWZmZXIgd2hlcmUgdG8gY29weSB0aGUga2V5d29yZCB2YWx1ZSAqLwotaW50CQkJKmxlbikJLyogYnVmZmVyIGxlbmd0aCAqLwotewotCVNLX1ZQRF9QQVJBICpwLCB2cDsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfUlgsICgiVlBEIHJlYWQgJXMgLi4gIiwga2V5KSk7Ci0JaWYgKChwQUMtPnZwZC52LnZwZF9zdGF0dXMgJiBWUERfVkFMSUQpID09IDApIHsKLQkJaWYgKFZwZEluaXQocEFDLCBJb0MpICE9IDApIHsKLQkJCSpsZW4gPSAwOwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkJKCJWUEQgaW5pdCBlcnJvclxuIikpOwotCQkJcmV0dXJuKDYpOwotCQl9Ci0JfQotCi0JaWYgKChwID0gdnBkX2ZpbmRfcGFyYShwQUMsIGtleSwgJnZwKSkgIT0gTlVMTCkgewotCQlpZiAocC0+cF9sZW4gPiAoKih1bnNpZ25lZCAqKWxlbiktMSkgewotCQkJcC0+cF9sZW4gPSAqbGVuIC0gMTsKLQkJfQotCQlTS19NRU1DUFkoYnVmLCBwLT5wX3ZhbCwgcC0+cF9sZW4pOwotCQlidWZbcC0+cF9sZW5dID0gJ1wwJzsKLQkJKmxlbiA9IHAtPnBfbGVuOwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX1JYLAotCQkJKCIlYyVjJWMlYy4uLCBsZW4gPSAlZFxuIiwKLQkJCWJ1ZlswXSxidWZbMV0sYnVmWzJdLGJ1ZlszXSwqbGVuKSk7Ci0JfQotCWVsc2UgewotCQkqbGVuID0gMDsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsICgibm90IGZvdW5kXG4iKSk7Ci0JCXJldHVybigxKTsKLQl9Ci0JcmV0dXJuKDApOwotfQotCi0KLS8qCi0gKglDaGVjayB3aGV0aGVyIGEgZ2l2ZW4ga2V5IG1heSBiZSB3cml0dGVuCi0gKgotICogcmV0dXJucwotICoJU0tfVFJVRQkJWWVzIGl0IG1heSBiZSB3cml0dGVuCi0gKglTS19GQUxTRQlObyBpdCBtYXkgYmUgd3JpdHRlbgotICovCi1TS19CT09MIFZwZE1heVdyaXRlKAotY2hhcgkqa2V5KQkvKiBrZXl3b3JkIHRvIHdyaXRlIChhbGxvd2VkIHZhbHVlcyAiWXgiLCAiVngiKSAqLwotewotCWlmICgoKmtleSAhPSAnWScgJiYgKmtleSAhPSAnVicpIHx8Ci0JCWtleVsxXSA8ICcwJyB8fCBrZXlbMV0gPiAnWicgfHwKLQkJKGtleVsxXSA+ICc5JyAmJiBrZXlbMV0gPCAnQScpIHx8IHN0cmxlbihrZXkpICE9IDIpIHsKLQotCQlyZXR1cm4oU0tfRkFMU0UpOwotCX0KLQlyZXR1cm4oU0tfVFJVRSk7Ci19Ci0KLS8qCi0gKglSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgVlBEIEVFUFJPTSBhbmQgY29weSBpdCB0byB0aGUgVlBECi0gKglidWZmZXIgaWYgbm90IGFscmVhZHkgZG9uZS4gSW5zZXJ0L292ZXJ3cml0ZSB0aGUga2V5d29yZCAna2V5JwotICoJaW4gdGhlIFZQRCBidWZmZXIuIEN1dCB0aGUga2V5d29yZCB2YWx1ZSBpZiBpdCBkb2VzIG5vdCBmaXQKLSAqCWludG8gdGhlIFZQRCByZWFkIC8gd3JpdGUgYXJlYS4KLSAqCi0gKiByZXR1cm5zCTA6CXN1Y2Nlc3MKLSAqCQkyOgl2YWx1ZSBzdHJpbmcgd2FzIGN1dAotICoJCTM6CVZQRCB0cmFuc2ZlciB0aW1lb3V0Ci0gKgkJNDoJVlBEIGZ1bGwsIGtleXdvcmQgd2FzIG5vdCB3cml0dGVuCi0gKgkJNToJa2V5d29yZCBjYW5ub3QgYmUgd3JpdHRlbgotICoJCTY6CWZhdGFsIFZQRCBlcnJvcgotICovCi1pbnQgVnBkV3JpdGUoCi1TS19BQwkJKnBBQywJLyogY29tbW9uIGRhdGEgYmFzZSAqLwotU0tfSU9DCQlJb0MsCS8qIElPIENvbnRleHQgKi8KLWNvbnN0IGNoYXIJKmtleSwJLyoga2V5d29yZCB0byB3cml0ZSAoYWxsb3dlZCB2YWx1ZXMgIll4IiwgIlZ4IikgKi8KLWNvbnN0IGNoYXIJKmJ1ZikJLyogYnVmZmVyIHdoZXJlIHRoZSBrZXl3b3JkIHZhbHVlIGNhbiBiZSByZWFkIGZyb20gKi8KLXsKLQlpbnQgbGVuOwkJLyogbGVuZ3RoIG9mIHRoZSBrZXl3b3JkIHRvIHdyaXRlICovCi0JaW50IHJ0djsJCS8qIHJldHVybiBjb2RlICovCi0JaW50IHJ0djI7Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX1RYLAotCQkoIlZQRCB3cml0ZSAlcyA9ICVzXG4iLGtleSxidWYpKTsKLQotCWlmICgoKmtleSAhPSAnWScgJiYgKmtleSAhPSAnVicpIHx8Ci0JCWtleVsxXSA8ICcwJyB8fCBrZXlbMV0gPiAnWicgfHwKLQkJKGtleVsxXSA+ICc5JyAmJiBrZXlbMV0gPCAnQScpIHx8IHN0cmxlbihrZXkpICE9IDIpIHsKLQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiwKLQkJCSgiaWxsZWdhbCBrZXkgdGFnLCBrZXl3b3JkIG5vdCB3cml0dGVuXG4iKSk7Ci0JCXJldHVybig1KTsKLQl9Ci0KLQlpZiAoKHBBQy0+dnBkLnYudnBkX3N0YXR1cyAmIFZQRF9WQUxJRCkgPT0gMCkgewotCQlpZiAoVnBkSW5pdChwQUMsIElvQykgIT0gMCkgewotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkJKCJWUEQgaW5pdCBlcnJvclxuIikpOwotCQkJcmV0dXJuKDYpOwotCQl9Ci0JfQotCi0JcnR2ID0gMDsKLQlsZW4gPSBzdHJsZW4oYnVmKTsKLQlpZiAobGVuID4gVlBEX01BWF9MRU4pIHsKLQkJLyogY3V0IGl0ICovCi0JCWxlbiA9IFZQRF9NQVhfTEVOOwotCQlydHYgPSAyOwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiwKLQkJCSgia2V5d29yZCB0b28gbG9uZywgY3V0IGFmdGVyICVkIGJ5dGVzXG4iLFZQRF9NQVhfTEVOKSk7Ci0JfQotCWlmICgocnR2MiA9IFZwZFNldHVwUGFyYShwQUMsIGtleSwgYnVmLCBsZW4sIFZQRF9SV19LRVksIE9XUl9LRVkpKSAhPSAwKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSLAotCQkJKCJWUEQgd3JpdGUgZXJyb3JcbiIpKTsKLQkJcmV0dXJuKHJ0djIpOwotCX0KLQotCXJldHVybihydHYpOwotfQotCi0vKgotICoJUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIFZQRCBFRVBST00gYW5kIGNvcHkgaXQgdG8gdGhlCi0gKglWUEQgYnVmZmVyIGlmIG5vdCBhbHJlYWR5IGRvbmUuIFJlbW92ZSB0aGUgVlBEIGtleXdvcmQKLSAqCSdrZXknIGZyb20gdGhlIFZQRCBidWZmZXIuCi0gKglPbmx5IHRoZSBrZXl3b3JkcyBpbiB0aGUgcmVhZC93cml0ZSBhcmVhIGNhbiBiZSBkZWxldGVkLgotICoJS2V5d29yZHMgaW4gdGhlIHJlYWQgb25seSBhcmVhIGNhbm5vdCBiZSBkZWxldGVkLgotICoKLSAqIHJldHVybnMJMDoJc3VjY2Vzcywga2V5d29yZCB3YXMgcmVtb3ZlZAotICoJCTE6CWtleXdvcmQgbm90IGZvdW5kCi0gKgkJNToJa2V5d29yZCBjYW5ub3QgYmUgZGVsZXRlZAotICoJCTY6CWZhdGFsIFZQRCBlcnJvcgotICovCi1pbnQgVnBkRGVsZXRlKAotU0tfQUMJKnBBQywJLyogY29tbW9uIGRhdGEgYmFzZSAqLwotU0tfSU9DCUlvQywJLyogSU8gQ29udGV4dCAqLwotY2hhcgkqa2V5KQkvKiBrZXl3b3JkIHRvIHJlYWQgKGUuZy4gIk1OIikgKi8KLXsKLQlTS19WUERfUEFSQSAqcCwgdnA7Ci0JY2hhciAqZXRwOwotCWludAl2cGRfc2l6ZTsKLQotCXZwZF9zaXplID0gcEFDLT52cGQudnBkX3NpemU7Ci0KLQlTS19EQkdfTVNHKHBBQyxTS19EQkdNT0RfVlBELFNLX0RCR0NBVF9UWCwoIlZQRCBkZWxldGUga2V5ICVzXG4iLGtleSkpOwotCWlmICgocEFDLT52cGQudi52cGRfc3RhdHVzICYgVlBEX1ZBTElEKSA9PSAwKSB7Ci0JCWlmIChWcGRJbml0KHBBQywgSW9DKSAhPSAwKSB7Ci0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiwKLQkJCQkoIlZQRCBpbml0IGVycm9yXG4iKSk7Ci0JCQlyZXR1cm4oNik7Ci0JCX0KLQl9Ci0KLQlpZiAoKHAgPSB2cGRfZmluZF9wYXJhKHBBQywga2V5LCAmdnApKSAhPSBOVUxMKSB7Ci0JCWlmIChwLT5wX3ZhbCA8IHBBQy0+dnBkLnZwZF9idWYgKyB2cGRfc2l6ZS8yKSB7Ci0JCQkvKiB0cnkgdG8gZGVsZXRlIHJlYWQgb25seSBrZXl3b3JkICovCi0JCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX0VSUiwKLQkJCQkoImNhbm5vdCBkZWxldGUgUk8ga2V5d29yZFxuIikpOwotCQkJcmV0dXJuKDUpOwotCQl9Ci0KLQkJZXRwID0gcEFDLT52cGQudnBkX2J1ZiArICh2cGRfc2l6ZS1wQUMtPnZwZC52LnZwZF9mcmVlX3J3LTEtMyk7Ci0KLQkJdnBkX21vdmVfcGFyYSh2cC5wX3ZhbCt2cC5wX2xlbiwgZXRwKzIsCi0JCQktICgoaW50KSh2cC5wX2xlbiArIDMpKSk7Ci0JCWlmICh2cGRfbW9kX2VuZHRhZyhwQUMsIGV0cCAtIHZwLnBfbGVuIC0gMykpIHsKLQkJCXBBQy0+dnBkLnYudnBkX3N0YXR1cyAmPSB+VlBEX1ZBTElEOwotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkJKCJWUEQgZW5jb2RpbmcgZXJyb3JcbiIpKTsKLQkJCXJldHVybig2KTsKLQkJfQotCX0KLQllbHNlIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkoImtleXdvcmQgbm90IGZvdW5kXG4iKSk7Ci0JCXJldHVybigxKTsKLQl9Ci0KLQlyZXR1cm4oMCk7Ci19Ci0KLS8qCi0gKglJZiB0aGUgVlBEIGJ1ZmZlciBjb250YWlucyB2YWxpZCBkYXRhIHdyaXRlIHRoZSBWUEQKLSAqCXJlYWQvd3JpdGUgYXJlYSBiYWNrIHRvIHRoZSBWUEQgRUVQUk9NLgotICoKLSAqIHJldHVybnMJMDoJc3VjY2VzcwotICoJCTM6CVZQRCB0cmFuc2ZlciB0aW1lb3V0Ci0gKi8KLWludCBWcGRVcGRhdGUoCi1TS19BQwkqcEFDLAkvKiBBZGFwdGVycyBjb250ZXh0ICovCi1TS19JT0MJSW9DKQkvKiBJTyBDb250ZXh0ICovCi17Ci0JaW50IHZwZF9zaXplOwotCi0JdnBkX3NpemUgPSBwQUMtPnZwZC52cGRfc2l6ZTsKLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfVFgsICgiVlBEIHVwZGF0ZSAuLiAiKSk7Ci0JaWYgKChwQUMtPnZwZC52LnZwZF9zdGF0dXMgJiBWUERfVkFMSUQpICE9IDApIHsKLQkJaWYgKFZwZFRyYW5zZmVyQmxvY2socEFDLCBJb0MsIHBBQy0+dnBkLnZwZF9idWYgKyB2cGRfc2l6ZS8yLAotCQkJdnBkX3NpemUvMiwgdnBkX3NpemUvMiwgVlBEX1dSSVRFKSAhPSB2cGRfc2l6ZS8yKSB7Ci0KLQkJCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSLAotCQkJCSgidHJhbnNmZXIgdGltZWQgb3V0XG4iKSk7Ci0JCQlyZXR1cm4oMyk7Ci0JCX0KLQl9Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9UWCwgKCJkb25lXG4iKSk7Ci0JcmV0dXJuKDApOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NreG1hYzIuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2t4bWFjMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGU3NTAyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2t4bWFjMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTmFtZToJc2t4bWFjMi5jCi0gKiBQcm9qZWN0OglHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzLCBDb21tb24gTW9kdWxlcwotICogVmVyc2lvbjoJJFJldmlzaW9uOiAxLjEwMiAkCi0gKiBEYXRlOgkkRGF0ZTogMjAwMy8xMC8wMiAxNjo1Mzo1OCAkCi0gKiBQdXJwb3NlOglDb250YWlucyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgTUFDcyBhbmQgUEhZcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKgkoQylDb3B5cmlnaHQgMTk5OC0yMDAyIFN5c0tvbm5lY3QuCi0gKgkoQylDb3B5cmlnaHQgMjAwMi0yMDAzIE1hcnZlbGwuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKglUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIgd2l0aG91dCB3YXJyYW50eS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiaC9za2RydjFzdC5oIgotI2luY2x1ZGUgImgvc2tkcnYybmQuaCIKLQotLyogdHlwZWRlZnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQkNPTSBQSFkgbWFnaWMgcGF0dGVybiBsaXN0ICovCi10eXBlZGVmIHN0cnVjdCBzX1BoeUhhY2sgewotCWludAkJUGh5UmVnOwkJLyogUGh5IHJlZ2lzdGVyICovCi0JU0tfVTE2CVBoeVZhbDsJCS8qIFZhbHVlIHRvIHdyaXRlICovCi19IEJDT01fSEFDSzsKLQotLyogbG9jYWwgdmFyaWFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmIChkZWZpbmVkKERFQlVHKSB8fCAoKCFkZWZpbmVkKExJTlQpKSAmJiAoIWRlZmluZWQoU0tfU0xJTSkpKSkKLXN0YXRpYyBjb25zdCBjaGFyIFN5c0tvbm5lY3RGaWxlSWRbXSA9Ci0JIkAoIykgJElkOiBza3htYWMyLmMsdiAxLjEwMiAyMDAzLzEwLzAyIDE2OjUzOjU4IHJzY2htaWR0IEV4cCAkIChDKSBNYXJ2ZWxsLiI7Ci0jZW5kaWYKLQotI2lmZGVmIEdFTkVTSVMKLXN0YXRpYyBCQ09NX0hBQ0sgQmNvbVJlZ0ExSGFja1tdID0gewotIHsgMHgxOCwgMHgwYzIwIH0sIHsgMHgxNywgMHgwMDEyIH0sIHsgMHgxNSwgMHgxMTA0IH0sIHsgMHgxNywgMHgwMDEzIH0sCi0geyAweDE1LCAweDA0MDQgfSwgeyAweDE3LCAweDgwMDYgfSwgeyAweDE1LCAweDAxMzIgfSwgeyAweDE3LCAweDgwMDYgfSwKLSB7IDB4MTUsIDB4MDIzMiB9LCB7IDB4MTcsIDB4ODAwRCB9LCB7IDB4MTUsIDB4MDAwRiB9LCB7IDB4MTgsIDB4MDQyMCB9LAotIHsgMCwgMCB9Ci19Owotc3RhdGljIEJDT01fSEFDSyBCY29tUmVnQzBIYWNrW10gPSB7Ci0geyAweDE4LCAweDBjMjAgfSwgeyAweDE3LCAweDAwMTIgfSwgeyAweDE1LCAweDEyMDQgfSwgeyAweDE3LCAweDAwMTMgfSwKLSB7IDB4MTUsIDB4MEEwNCB9LCB7IDB4MTgsIDB4MDQyMCB9LAotIHsgMCwgMCB9Ci19OwotI2VuZGlmCi0KLS8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgR0VORVNJUwotc3RhdGljIHZvaWQJU2tYbUluaXRQaHlYbWFjKFNLX0FDKiwgU0tfSU9DLCBpbnQsIFNLX0JPT0wpOwotc3RhdGljIHZvaWQJU2tYbUluaXRQaHlCY29tKFNLX0FDKiwgU0tfSU9DLCBpbnQsIFNLX0JPT0wpOwotc3RhdGljIGludAlTa1htQXV0b05lZ0RvbmVYbWFjKFNLX0FDKiwgU0tfSU9DLCBpbnQpOwotc3RhdGljIGludAlTa1htQXV0b05lZ0RvbmVCY29tKFNLX0FDKiwgU0tfSU9DLCBpbnQpOwotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLSNpZmRlZiBZVUtPTgotc3RhdGljIHZvaWQJU2tHbUluaXRQaHlNYXJ2KFNLX0FDKiwgU0tfSU9DLCBpbnQsIFNLX0JPT0wpOwotc3RhdGljIGludAlTa0dtQXV0b05lZ0RvbmVNYXJ2KFNLX0FDKiwgU0tfSU9DLCBpbnQpOwotI2VuZGlmIC8qIFlVS09OICovCi0jaWZkZWYgT1RIRVJfUEhZCi1zdGF0aWMgdm9pZAlTa1htSW5pdFBoeUxvbmUoU0tfQUMqLCBTS19JT0MsIGludCwgU0tfQk9PTCk7Ci1zdGF0aWMgdm9pZAlTa1htSW5pdFBoeU5hdCAoU0tfQUMqLCBTS19JT0MsIGludCwgU0tfQk9PTCk7Ci1zdGF0aWMgaW50CVNrWG1BdXRvTmVnRG9uZUxvbmUoU0tfQUMqLCBTS19JT0MsIGludCk7Ci1zdGF0aWMgaW50CVNrWG1BdXRvTmVnRG9uZU5hdCAoU0tfQUMqLCBTS19JT0MsIGludCk7Ci0jZW5kaWYgLyogT1RIRVJfUEhZICovCi0KLQotI2lmZGVmIEdFTkVTSVMKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htUGh5UmVhZCgpIC0gUmVhZCBmcm9tIFhNQUMgUEhZIHJlZ2lzdGVyCi0gKgotICogRGVzY3JpcHRpb246CXJlYWRzIGEgMTYtYml0IHdvcmQgZnJvbSBYTUFDIFBIWSBvciBleHQuIFBIWQotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXZvaWQgU2tYbVBoeVJlYWQoCi1TS19BQwkqcEFDLAkJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCQkvKiBJL08gQ29udGV4dCAqLwotaW50CQlQb3J0LAkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLWludAkJUGh5UmVnLAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKE9mZnNldCkgKi8KLVNLX1UxNglTS19GQVIgKnBWYWwpCS8qIFBvaW50ZXIgdG8gVmFsdWUgKi8KLXsKLQlTS19VMTYJCU1tdTsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQkKLQkvKiB3cml0ZSB0aGUgUEhZIHJlZ2lzdGVyJ3MgYWRkcmVzcyAqLwotCVhNX09VVDE2KElvQywgUG9ydCwgWE1fUEhZX0FERFIsIFBoeVJlZyB8IHBQcnQtPlBoeUFkZHIpOwotCQotCS8qIGdldCB0aGUgUEhZIHJlZ2lzdGVyJ3MgdmFsdWUgKi8KLQlYTV9JTjE2KElvQywgUG9ydCwgWE1fUEhZX0RBVEEsIHBWYWwpOwotCQotCWlmIChwUHJ0LT5QaHlUeXBlICE9IFNLX1BIWV9YTUFDKSB7Ci0JCWRvIHsKLQkJCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCAmTW11KTsKLQkJCS8qIHdhaXQgdW50aWwgJ1JlYWR5JyBpcyBzZXQgKi8KLQkJfSB3aGlsZSAoKE1tdSAmIFhNX01NVV9QSFlfUkRZKSA9PSAwKTsKLQotCQkvKiBnZXQgdGhlIFBIWSByZWdpc3RlcidzIHZhbHVlICovCi0JCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9QSFlfREFUQSwgcFZhbCk7Ci0JfQotfQkvKiBTa1htUGh5UmVhZCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htUGh5V3JpdGUoKSAtIFdyaXRlIHRvIFhNQUMgUEhZIHJlZ2lzdGVyCi0gKgotICogRGVzY3JpcHRpb246CXdyaXRlcyBhIDE2LWJpdCB3b3JkIHRvIFhNQUMgUEhZIG9yIGV4dC4gUEhZCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa1htUGh5V3JpdGUoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSS9PIENvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLWludAkJUGh5UmVnLAkJLyogUmVnaXN0ZXIgQWRkcmVzcyAoT2Zmc2V0KSAqLwotU0tfVTE2CVZhbCkJCS8qIFZhbHVlICovCi17Ci0JU0tfVTE2CQlNbXU7Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0JCi0JaWYgKHBQcnQtPlBoeVR5cGUgIT0gU0tfUEhZX1hNQUMpIHsKLQkJZG8gewotCQkJWE1fSU4xNihJb0MsIFBvcnQsIFhNX01NVV9DTUQsICZNbXUpOwotCQkJLyogd2FpdCB1bnRpbCAnQnVzeScgaXMgY2xlYXJlZCAqLwotCQl9IHdoaWxlICgoTW11ICYgWE1fTU1VX1BIWV9CVVNZKSAhPSAwKTsKLQl9Ci0JCi0JLyogd3JpdGUgdGhlIFBIWSByZWdpc3RlcidzIGFkZHJlc3MgKi8KLQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX1BIWV9BRERSLCBQaHlSZWcgfCBwUHJ0LT5QaHlBZGRyKTsKLQkKLQkvKiB3cml0ZSB0aGUgUEhZIHJlZ2lzdGVyJ3MgdmFsdWUgKi8KLQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX1BIWV9EQVRBLCBWYWwpOwotCQotCWlmIChwUHJ0LT5QaHlUeXBlICE9IFNLX1BIWV9YTUFDKSB7Ci0JCWRvIHsKLQkJCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCAmTW11KTsKLQkJCS8qIHdhaXQgdW50aWwgJ0J1c3knIGlzIGNsZWFyZWQgKi8KLQkJfSB3aGlsZSAoKE1tdSAmIFhNX01NVV9QSFlfQlVTWSkgIT0gMCk7Ci0JfQotfQkvKiBTa1htUGh5V3JpdGUgKi8KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0KLQotI2lmZGVmIFlVS09OCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHbVBoeVJlYWQoKSAtIFJlYWQgZnJvbSBHUEhZIHJlZ2lzdGVyCi0gKgotICogRGVzY3JpcHRpb246CXJlYWRzIGEgMTYtYml0IHdvcmQgZnJvbSBHUEhZIHRocm91Z2ggTURJTwotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXZvaWQgU2tHbVBoeVJlYWQoCi1TS19BQwkqcEFDLAkJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCQkvKiBJL08gQ29udGV4dCAqLwotaW50CQlQb3J0LAkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLWludAkJUGh5UmVnLAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKE9mZnNldCkgKi8KLVNLX1UxNglTS19GQVIgKnBWYWwpCS8qIFBvaW50ZXIgdG8gVmFsdWUgKi8KLXsKLQlTS19VMTYJQ3RybDsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0jaWZkZWYgVkNQVQotCXVfbG9uZyBTaW1DeWxlOwotCXVfbG9uZyBTaW1Mb3dUaW1lOwotCQotCVZDUFVnZXRUaW1lKCZTaW1DeWxlLCAmU2ltTG93VGltZSk7Ci0JVkNQVXByaW50ZigwLCAiU2tHbVBoeVJlYWQoJXUpLCBTaW1DeWxlPSV1LCBTaW1Mb3dUaW1lPSV1XG4iLAotCQlQaHlSZWcsIFNpbUN5bGUsIFNpbUxvd1RpbWUpOwotI2VuZGlmIC8qIFZDUFUgKi8KLQkKLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQkKLQkvKiBzZXQgUEhZLVJlZ2lzdGVyIG9mZnNldCBhbmQgJ1JlYWQnIE9wQ29kZSAoPSAxKSAqLwotCSpwVmFsID0gKFNLX1UxNikoR01fU01JX0NUX1BIWV9BRChwUHJ0LT5QaHlBZGRyKSB8Ci0JCUdNX1NNSV9DVF9SRUdfQUQoUGh5UmVnKSB8IEdNX1NNSV9DVF9PUF9SRCk7Ci0KLQlHTV9PVVQxNihJb0MsIFBvcnQsIEdNX1NNSV9DVFJMLCAqcFZhbCk7Ci0KLQlHTV9JTjE2KElvQywgUG9ydCwgR01fU01JX0NUUkwsICZDdHJsKTsKLQkKLQkvKiBhZGRpdGlvbmFsIGNoZWNrIGZvciBNREMvTURJTyBhY3Rpdml0eSAqLwotCWlmICgoQ3RybCAmIEdNX1NNSV9DVF9CVVNZKSA9PSAwKSB7Ci0JCSpwVmFsID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCSpwVmFsIHw9IEdNX1NNSV9DVF9CVVNZOwotCQotCWRvIHsKLSNpZmRlZiBWQ1BVCi0JCVZDUFV3YWl0VGltZSgxMDAwKTsKLSNlbmRpZiAvKiBWQ1BVICovCi0KLQkJR01fSU4xNihJb0MsIFBvcnQsIEdNX1NNSV9DVFJMLCAmQ3RybCk7Ci0KLQkvKiB3YWl0IHVudGlsICdSZWFkVmFsaWQnIGlzIHNldCAqLwotCX0gd2hpbGUgKEN0cmwgPT0gKnBWYWwpOwotCQotCS8qIGdldCB0aGUgUEhZIHJlZ2lzdGVyJ3MgdmFsdWUgKi8KLQlHTV9JTjE2KElvQywgUG9ydCwgR01fU01JX0RBVEEsIHBWYWwpOwotCi0jaWZkZWYgVkNQVQotCVZDUFVnZXRUaW1lKCZTaW1DeWxlLCAmU2ltTG93VGltZSk7Ci0JVkNQVXByaW50ZigwLCAiVkNQVWdldFRpbWUoKSwgU2ltQ3lsZT0ldSwgU2ltTG93VGltZT0ldVxuIiwKLQkJU2ltQ3lsZSwgU2ltTG93VGltZSk7Ci0jZW5kaWYgLyogVkNQVSAqLwotCi19CS8qIFNrR21QaHlSZWFkICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR21QaHlXcml0ZSgpIC0gV3JpdGUgdG8gR1BIWSByZWdpc3RlcgotICoKLSAqIERlc2NyaXB0aW9uOgl3cml0ZXMgYSAxNi1iaXQgd29yZCB0byBHUEhZIHRocm91Z2ggTURJTwotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXZvaWQgU2tHbVBoeVdyaXRlKAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIEkvTyBDb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1pbnQJCVBoeVJlZywJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKE9mZnNldCkgKi8KLVNLX1UxNglWYWwpCQkvKiBWYWx1ZSAqLwotewotCVNLX1UxNglDdHJsOwotCVNLX0dFUE9SVAkqcFBydDsKLSNpZmRlZiBWQ1BVCi0JU0tfVTMyCURXb3JkOwotCXVfbG9uZwlTaW1DeWxlOwotCXVfbG9uZwlTaW1Mb3dUaW1lOwotCQotCVZDUFVnZXRUaW1lKCZTaW1DeWxlLCAmU2ltTG93VGltZSk7Ci0JVkNQVXByaW50ZigwLCAiU2tHbVBoeVdyaXRlKFJlZz0ldSwgVmFsPTB4JTA0eCksIFNpbUN5bGU9JXUsIFNpbUxvd1RpbWU9JXVcbiIsCi0JCVBoeVJlZywgVmFsLCBTaW1DeWxlLCBTaW1Mb3dUaW1lKTsKLSNlbmRpZiAvKiBWQ1BVICovCi0JCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0JCi0JLyogd3JpdGUgdGhlIFBIWSByZWdpc3RlcidzIHZhbHVlICovCi0JR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9TTUlfREFUQSwgVmFsKTsKLQkKLQkvKiBzZXQgUEhZLVJlZ2lzdGVyIG9mZnNldCBhbmQgJ1dyaXRlJyBPcENvZGUgKD0gMCkgKi8KLQlWYWwgPSBHTV9TTUlfQ1RfUEhZX0FEKHBQcnQtPlBoeUFkZHIpIHwgR01fU01JX0NUX1JFR19BRChQaHlSZWcpOwotCi0JR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9TTUlfQ1RSTCwgVmFsKTsKLQotCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9TTUlfQ1RSTCwgJkN0cmwpOwotCQotCS8qIGFkZGl0aW9uYWwgY2hlY2sgZm9yIE1EQy9NRElPIGFjdGl2aXR5ICovCi0JaWYgKChDdHJsICYgR01fU01JX0NUX0JVU1kpID09IDApIHsKLQkJcmV0dXJuOwotCX0KLQkKLQlWYWwgfD0gR01fU01JX0NUX0JVU1k7Ci0KLQlkbyB7Ci0jaWZkZWYgVkNQVQotCQkvKiByZWFkIFRpbWVyIHZhbHVlICovCi0JCVNLX0lOMzIoSW9DLCBCMl9USV9WQUwsICZEV29yZCk7Ci0KLQkJVkNQVXdhaXRUaW1lKDEwMDApOwotI2VuZGlmIC8qIFZDUFUgKi8KLQotCQlHTV9JTjE2KElvQywgUG9ydCwgR01fU01JX0NUUkwsICZDdHJsKTsKLQotCS8qIHdhaXQgdW50aWwgJ0J1c3knIGlzIGNsZWFyZWQgKi8KLQl9IHdoaWxlIChDdHJsID09IFZhbCk7Ci0JCi0jaWZkZWYgVkNQVQotCVZDUFVnZXRUaW1lKCZTaW1DeWxlLCAmU2ltTG93VGltZSk7Ci0JVkNQVXByaW50ZigwLCAiVkNQVWdldFRpbWUoKSwgU2ltQ3lsZT0ldSwgU2ltTG93VGltZT0ldVxuIiwKLQkJU2ltQ3lsZSwgU2ltTG93VGltZSk7Ci0jZW5kaWYgLyogVkNQVSAqLwotCi19CS8qIFNrR21QaHlXcml0ZSAqLwotI2VuZGlmIC8qIFlVS09OICovCi0KLQotI2lmZGVmIFNLX0RJQUcKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dlUGh5UmVhZCgpIC0gUmVhZCBmcm9tIFBIWSByZWdpc3RlcgotICoKLSAqIERlc2NyaXB0aW9uOgljYWxscyBhIHJlYWQgUEhZIHJvdXRpbmUgZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa0dlUGh5UmVhZCgKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJL08gQ29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotaW50CQlQaHlSZWcsCQkvKiBSZWdpc3RlciBBZGRyZXNzIChPZmZzZXQpICovCi1TS19VMTYJKnBWYWwpCQkvKiBQb2ludGVyIHRvIFZhbHVlICovCi17Ci0Jdm9pZCAoKnJfZnVuYykoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IFBvcnQsIGludCBSZWcsIFNLX1UxNiAqcFZhbCk7Ci0KLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQlyX2Z1bmMgPSBTa1htUGh5UmVhZDsKLQl9Ci0JZWxzZSB7Ci0JCXJfZnVuYyA9IFNrR21QaHlSZWFkOwotCX0KLQkKLQlyX2Z1bmMocEFDLCBJb0MsIFBvcnQsIFBoeVJlZywgcFZhbCk7Ci19CS8qIFNrR2VQaHlSZWFkICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR2VQaHlXcml0ZSgpIC0gV3JpdGUgdG8gUEhZIHJlZ2lzdGVyCi0gKgotICogRGVzY3JpcHRpb246CWNhbGxzIGEgd3JpdGUgUEhZIHJvdXRpbmUgZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa0dlUGh5V3JpdGUoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSS9PIENvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLWludAkJUGh5UmVnLAkJLyogUmVnaXN0ZXIgQWRkcmVzcyAoT2Zmc2V0KSAqLwotU0tfVTE2CVZhbCkJCS8qIFZhbHVlICovCi17Ci0Jdm9pZCAoKndfZnVuYykoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IFBvcnQsIGludCBSZWcsIFNLX1UxNiBWYWwpOwotCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJd19mdW5jID0gU2tYbVBoeVdyaXRlOwotCX0KLQllbHNlIHsKLQkJd19mdW5jID0gU2tHbVBoeVdyaXRlOwotCX0KLQkKLQl3X2Z1bmMocEFDLCBJb0MsIFBvcnQsIFBoeVJlZywgVmFsKTsKLX0JLyogU2tHZVBoeVdyaXRlICovCi0jZW5kaWYgLyogU0tfRElBRyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa01hY1Byb21pc2NNb2RlKCkgLSBFbmFibGUgLyBEaXNhYmxlIFByb21pc2N1b3VzIE1vZGUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgZW5hYmxlcyAvIGRpc2FibGVzIHByb21pc2N1b3VzIG1vZGUgYnkgc2V0dGluZyBNb2RlIFJlZ2lzdGVyIChYTUFDKSBvcgotICogICBSZWNlaXZlIENvbnRyb2wgUmVnaXN0ZXIgKEdNQUMpIGRlcC4gb24gYm9hcmQgdHlwZSAgIAkKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrTWFjUHJvbWlzY01vZGUoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfQk9PTAlFbmFibGUpCS8qIEVuYWJsZSAvIERpc2FibGUgKi8KLXsKLSNpZmRlZiBZVUtPTgotCVNLX1UxNglSY1JlZzsKLSNlbmRpZgotI2lmZGVmIEdFTkVTSVMKLQlTS19VMzIJTWRSZWc7Ci0jZW5kaWYJCi0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCi0JCVhNX0lOMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCAmTWRSZWcpOwotCQkvKiBlbmFibGUgb3IgZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCi0JCWlmIChFbmFibGUpIHsKLQkJCU1kUmVnIHw9IFhNX01EX0VOQV9QUk9NOwotCQl9Ci0JCWVsc2UgewotCQkJTWRSZWcgJj0gflhNX01EX0VOQV9QUk9NOwotCQl9Ci0JCS8qIHNldHVwIE1vZGUgUmVnaXN0ZXIgKi8KLQkJWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBNZFJlZyk7Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkKLQkJR01fSU4xNihJb0MsIFBvcnQsIEdNX1JYX0NUUkwsICZSY1JlZyk7Ci0JCQotCQkvKiBlbmFibGUgb3IgZGlzYWJsZSB1bmljYXN0IGFuZCBtdWx0aWNhc3QgZmlsdGVyaW5nICovCi0JCWlmIChFbmFibGUpIHsKLQkJCVJjUmVnICY9IH4oR01fUlhDUl9VQ0ZfRU5BIHwgR01fUlhDUl9NQ0ZfRU5BKTsKLQkJfQotCQllbHNlIHsKLQkJCVJjUmVnIHw9IChHTV9SWENSX1VDRl9FTkEgfCBHTV9SWENSX01DRl9FTkEpOwotCQl9Ci0JCS8qIHNldHVwIFJlY2VpdmUgQ29udHJvbCBSZWdpc3RlciAqLwotCQlHTV9PVVQxNihJb0MsIFBvcnQsIEdNX1JYX0NUUkwsIFJjUmVnKTsKLQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQotfQkvKiBTa01hY1Byb21pc2NNb2RlKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNIYXNoaW5nKCkgLSBFbmFibGUgLyBEaXNhYmxlIEhhc2hpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgZW5hYmxlcyAvIGRpc2FibGVzIGhhc2hpbmcgYnkgc2V0dGluZyBNb2RlIFJlZ2lzdGVyIChYTUFDKSBvcgotICogICBSZWNlaXZlIENvbnRyb2wgUmVnaXN0ZXIgKEdNQUMpIGRlcC4gb24gYm9hcmQgdHlwZQkJCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa01hY0hhc2hpbmcoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfQk9PTAlFbmFibGUpCS8qIEVuYWJsZSAvIERpc2FibGUgKi8KLXsKLSNpZmRlZiBZVUtPTgotCVNLX1UxNglSY1JlZzsKLSNlbmRpZgkKLSNpZmRlZiBHRU5FU0lTCi0JU0tfVTMyCU1kUmVnOwotI2VuZGlmCi0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCi0JCVhNX0lOMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCAmTWRSZWcpOwotCQkvKiBlbmFibGUgb3IgZGlzYWJsZSBoYXNoaW5nICovCi0JCWlmIChFbmFibGUpIHsKLQkJCU1kUmVnIHw9IFhNX01EX0VOQV9IQVNIOwotCQl9Ci0JCWVsc2UgewotCQkJTWRSZWcgJj0gflhNX01EX0VOQV9IQVNIOwotCQl9Ci0JCS8qIHNldHVwIE1vZGUgUmVnaXN0ZXIgKi8KLQkJWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBNZFJlZyk7Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkKLQkJR01fSU4xNihJb0MsIFBvcnQsIEdNX1JYX0NUUkwsICZSY1JlZyk7Ci0JCQotCQkvKiBlbmFibGUgb3IgZGlzYWJsZSBtdWx0aWNhc3QgZmlsdGVyaW5nICovCi0JCWlmIChFbmFibGUpIHsKLQkJCVJjUmVnIHw9IEdNX1JYQ1JfTUNGX0VOQTsKLQkJfQotCQllbHNlIHsKLQkJCVJjUmVnICY9IH5HTV9SWENSX01DRl9FTkE7Ci0JCX0KLQkJLyogc2V0dXAgUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVyICovCi0JCUdNX09VVDE2KElvQywgUG9ydCwgR01fUlhfQ1RSTCwgUmNSZWcpOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi19CS8qIFNrTWFjSGFzaGluZyovCi0KLQotI2lmZGVmIFNLX0RJQUcKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htU2V0UnhDbWQoKSAtIE1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIFhNQUMncyBSeCBDb21tYW5kIFJlZ2lzdGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgZmVhdHVyZXMKLSAqCSAtIEZDUyBzdHJpcHBpbmcsCQkJCQlTS19TVFJJUF9GQ1NfT04vT0ZGCi0gKgkgLSBwYWQgYnl0ZSBzdHJpcHBpbmcsCQkJCVNLX1NUUklQX1BBRF9PTi9PRkYKLSAqCSAtIGRvbid0IHNldCBYTVJfRlNfRVJSIGluIHN0YXR1cwlTS19MRU5FUlJfT0tfT04vT0ZGCi0gKgkgICBmb3IgaW5yYW5nZSBsZW5ndGggZXJyb3IgZnJhbWVzCi0gKgkgLSBkb24ndCBzZXQgWE1SX0ZTX0VSUiBpbiBzdGF0dXMJU0tfQklHX1BLX09LX09OL09GRgotICoJICAgZm9yIGZyYW1lcyA+IDE1MTQgYnl0ZXMKLSAqICAgLSBlbmFibGUgUnggb2Ygb3duIHBhY2tldHMgICAgICAgICBTS19TRUxGX1JYX09OL09GRgotICoKLSAqCWZvciBpbmNvbWluZyBwYWNrZXRzIG1heSBiZSBlbmFibGVkL2Rpc2FibGVkIGJ5IHRoaXMgZnVuY3Rpb24uCi0gKglBZGRpdGlvbmFsIG1vZGVzIG1heSBiZSBhZGRlZCBsYXRlci4KLSAqCU11bHRpcGxlIG1vZGVzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGF0IHRoZSBzYW1lIHRpbWUuCi0gKglUaGUgbmV3IGNvbmZpZ3VyYXRpb24gaXMgd3JpdHRlbiB0byB0aGUgUnggQ29tbWFuZCByZWdpc3RlciBpbW1lZGlhdGVseS4KLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi1zdGF0aWMgdm9pZCBTa1htU2V0UnhDbWQoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotaW50CQlNb2RlKQkJLyogTW9kZSBpcyBTS19TVFJJUF9GQ1NfT04vT0ZGLCBTS19TVFJJUF9QQURfT04vT0ZGLAotCQkJCQkgICBTS19MRU5FUlJfT0tfT04vT0ZGLCBvciBTS19CSUdfUEtfT0tfT04vT0ZGICovCi17Ci0JU0tfVTE2CU9sZFJ4Q21kOwotCVNLX1UxNglSeENtZDsKLQotCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9SWF9DTUQsICZPbGRSeENtZCk7Ci0KLQlSeENtZCA9IE9sZFJ4Q21kOwotCQotCXN3aXRjaCAoTW9kZSAmIChTS19TVFJJUF9GQ1NfT04gfCBTS19TVFJJUF9GQ1NfT0ZGKSkgewotCWNhc2UgU0tfU1RSSVBfRkNTX09OOgotCQlSeENtZCB8PSBYTV9SWF9TVFJJUF9GQ1M7Ci0JCWJyZWFrOwotCWNhc2UgU0tfU1RSSVBfRkNTX09GRjoKLQkJUnhDbWQgJj0gflhNX1JYX1NUUklQX0ZDUzsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChNb2RlICYgKFNLX1NUUklQX1BBRF9PTiB8IFNLX1NUUklQX1BBRF9PRkYpKSB7Ci0JY2FzZSBTS19TVFJJUF9QQURfT046Ci0JCVJ4Q21kIHw9IFhNX1JYX1NUUklQX1BBRDsKLQkJYnJlYWs7Ci0JY2FzZSBTS19TVFJJUF9QQURfT0ZGOgotCQlSeENtZCAmPSB+WE1fUlhfU1RSSVBfUEFEOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKE1vZGUgJiAoU0tfTEVORVJSX09LX09OIHwgU0tfTEVORVJSX09LX09GRikpIHsKLQljYXNlIFNLX0xFTkVSUl9PS19PTjoKLQkJUnhDbWQgfD0gWE1fUlhfTEVORVJSX09LOwotCQlicmVhazsKLQljYXNlIFNLX0xFTkVSUl9PS19PRkY6Ci0JCVJ4Q21kICY9IH5YTV9SWF9MRU5FUlJfT0s7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoTW9kZSAmIChTS19CSUdfUEtfT0tfT04gfCBTS19CSUdfUEtfT0tfT0ZGKSkgewotCWNhc2UgU0tfQklHX1BLX09LX09OOgotCQlSeENtZCB8PSBYTV9SWF9CSUdfUEtfT0s7Ci0JCWJyZWFrOwotCWNhc2UgU0tfQklHX1BLX09LX09GRjoKLQkJUnhDbWQgJj0gflhNX1JYX0JJR19QS19PSzsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChNb2RlICYgKFNLX1NFTEZfUlhfT04gfCBTS19TRUxGX1JYX09GRikpIHsKLQljYXNlIFNLX1NFTEZfUlhfT046Ci0JCVJ4Q21kIHw9IFhNX1JYX1NFTEZfUlg7Ci0JCWJyZWFrOwotCWNhc2UgU0tfU0VMRl9SWF9PRkY6Ci0JCVJ4Q21kICY9IH5YTV9SWF9TRUxGX1JYOwotCQlicmVhazsKLQl9Ci0KLQkvKiBXcml0ZSB0aGUgbmV3IG1vZGUgdG8gdGhlIFJ4IGNvbW1hbmQgcmVnaXN0ZXIgaWYgcmVxdWlyZWQgKi8KLQlpZiAoT2xkUnhDbWQgIT0gUnhDbWQpIHsKLQkJWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9SWF9DTUQsIFJ4Q21kKTsKLQl9Ci19CS8qIFNrWG1TZXRSeENtZCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtU2V0UnhDbWQoKSAtIE1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIEdNQUMncyBSeCBDb250cm9sIFJlZ2lzdGVyCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgZmVhdHVyZXMKLSAqCSAtIEZDUyAoQ1JDKSBzdHJpcHBpbmcsCQkJCVNLX1NUUklQX0ZDU19PTi9PRkYKLSAqCSAtIGRvbid0IHNldCBHTVJfRlNfTE9OR19FUlIJCVNLX0JJR19QS19PS19PTi9PRkYKLSAqCSAgIGZvciBmcmFtZXMgPiAxNTE0IGJ5dGVzCi0gKiAgIC0gZW5hYmxlIFJ4IG9mIG93biBwYWNrZXRzICAgICAgICAgU0tfU0VMRl9SWF9PTi9PRkYKLSAqCi0gKglmb3IgaW5jb21pbmcgcGFja2V0cyBtYXkgYmUgZW5hYmxlZC9kaXNhYmxlZCBieSB0aGlzIGZ1bmN0aW9uLgotICoJQWRkaXRpb25hbCBtb2RlcyBtYXkgYmUgYWRkZWQgbGF0ZXIuCi0gKglNdWx0aXBsZSBtb2RlcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhdCB0aGUgc2FtZSB0aW1lLgotICoJVGhlIG5ldyBjb25maWd1cmF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlIFJ4IENvbW1hbmQgcmVnaXN0ZXIgaW1tZWRpYXRlbHkuCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tHbVNldFJ4Q21kKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLWludAkJTW9kZSkJCS8qIE1vZGUgaXMgU0tfU1RSSVBfRkNTX09OL09GRiwgU0tfU1RSSVBfUEFEX09OL09GRiwKLQkJCQkJICAgU0tfTEVORVJSX09LX09OL09GRiwgb3IgU0tfQklHX1BLX09LX09OL09GRiAqLwotewotCVNLX1UxNglPbGRSeENtZDsKLQlTS19VMTYJUnhDbWQ7Ci0KLQlpZiAoKE1vZGUgJiAoU0tfU1RSSVBfRkNTX09OIHwgU0tfU1RSSVBfRkNTX09GRikpICE9IDApIHsKLQkJCi0JCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9SWF9DVFJMLCAmT2xkUnhDbWQpOwotCi0JCVJ4Q21kID0gT2xkUnhDbWQ7Ci0KLQkJaWYgKChNb2RlICYgU0tfU1RSSVBfRkNTX09OKSAhPSAwKSB7Ci0JCQlSeENtZCB8PSBHTV9SWENSX0NSQ19ESVM7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlSeENtZCAmPSB+R01fUlhDUl9DUkNfRElTOwotCQl9Ci0JCS8qIFdyaXRlIHRoZSBuZXcgbW9kZSB0byB0aGUgUnggY29udHJvbCByZWdpc3RlciBpZiByZXF1aXJlZCAqLwotCQlpZiAoT2xkUnhDbWQgIT0gUnhDbWQpIHsKLQkJCUdNX09VVDE2KElvQywgUG9ydCwgR01fUlhfQ1RSTCwgUnhDbWQpOwotCQl9Ci0JfQotCi0JaWYgKChNb2RlICYgKFNLX0JJR19QS19PS19PTiB8IFNLX0JJR19QS19PS19PRkYpKSAhPSAwKSB7Ci0JCQotCQlHTV9JTjE2KElvQywgUG9ydCwgR01fU0VSSUFMX01PREUsICZPbGRSeENtZCk7Ci0KLQkJUnhDbWQgPSBPbGRSeENtZDsKLQotCQlpZiAoKE1vZGUgJiBTS19CSUdfUEtfT0tfT04pICE9IDApIHsKLQkJCVJ4Q21kIHw9IEdNX1NNT0RfSlVNQk9fRU5BOwotCQl9Ci0JCWVsc2UgewotCQkJUnhDbWQgJj0gfkdNX1NNT0RfSlVNQk9fRU5BOwotCQl9Ci0JCS8qIFdyaXRlIHRoZSBuZXcgbW9kZSB0byB0aGUgUnggY29udHJvbCByZWdpc3RlciBpZiByZXF1aXJlZCAqLwotCQlpZiAoT2xkUnhDbWQgIT0gUnhDbWQpIHsKLQkJCUdNX09VVDE2KElvQywgUG9ydCwgR01fU0VSSUFMX01PREUsIFJ4Q21kKTsKLQkJfQotCX0KLX0JLyogU2tHbVNldFJ4Q21kICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrTWFjU2V0UnhDbWQoKSAtIE1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIE1BQydzIFJ4IENvbnRyb2wgUmVnaXN0ZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoJbW9kaWZpZXMgdGhlIE1BQydzIFJ4IENvbnRyb2wgcmVnLiBkZXAuIG9uIGJvYXJkIHR5cGUKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrTWFjU2V0UnhDbWQoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotaW50CQlNb2RlKQkJLyogUnggTW9kZSAqLwotewotCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0JCQotCQlTa1htU2V0UnhDbWQocEFDLCBJb0MsIFBvcnQsIE1vZGUpOwotCX0KLQllbHNlIHsKLQkJCi0JCVNrR21TZXRSeENtZChwQUMsIElvQywgUG9ydCwgTW9kZSk7Ci0JfQotCi19CS8qIFNrTWFjU2V0UnhDbWQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNDcmNHZW5lcigpIC0gRW5hYmxlIC8gRGlzYWJsZSBDUkMgR2VuZXJhdGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgllbmFibGVzIC8gZGlzYWJsZXMgQ1JDIGdlbmVyYXRpb24gZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa01hY0NyY0dlbmVyKAotU0tfQUMJKnBBQywJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX0JPT0wJRW5hYmxlKQkvKiBFbmFibGUgLyBEaXNhYmxlICovCi17Ci0JU0tfVTE2CVdvcmQ7Ci0KLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkKLQkJWE1fSU4xNihJb0MsIFBvcnQsIFhNX1RYX0NNRCwgJldvcmQpOwotCi0JCWlmIChFbmFibGUpIHsKLQkJCVdvcmQgJj0gflhNX1RYX05PX0NSQzsKLQkJfQotCQllbHNlIHsKLQkJCVdvcmQgfD0gWE1fVFhfTk9fQ1JDOwotCQl9Ci0JCS8qIHNldHVwIFR4IENvbW1hbmQgUmVnaXN0ZXIgKi8KLQkJWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9UWF9DTUQsIFdvcmQpOwotCX0KLQllbHNlIHsKLQkJCi0JCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9UWF9DVFJMLCAmV29yZCk7Ci0JCQotCQlpZiAoRW5hYmxlKSB7Ci0JCQlXb3JkICY9IH5HTV9UWENSX0NSQ19ESVM7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlXb3JkIHw9IEdNX1RYQ1JfQ1JDX0RJUzsKLQkJfQotCQkvKiBzZXR1cCBUeCBDb250cm9sIFJlZ2lzdGVyICovCi0JCUdNX09VVDE2KElvQywgUG9ydCwgR01fVFhfQ1RSTCwgV29yZCk7Ci0JfQotCi19CS8qIFNrTWFjQ3JjR2VuZXIqLwotCi0jZW5kaWYgLyogU0tfRElBRyAqLwotCi0KLSNpZmRlZiBHRU5FU0lTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tYbUNsckV4YWN0QWRkcigpIC0gQ2xlYXIgRXhhY3QgTWF0Y2ggQWRkcmVzcyBSZWdpc3RlcnMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUFsbCBFeGFjdCBNYXRjaCBBZGRyZXNzIHJlZ2lzdGVycyBvZiB0aGUgWE1BQyAnUG9ydCcgd2lsbCBiZQotICoJY2xlYXJlZCBzdGFydGluZyB3aXRoICdTdGFydE51bScgdXAgdG8gKGFuZCBpbmNsdWRpbmcpIHRoZQotICoJRXhhY3QgTWF0Y2ggYWRkcmVzcyBudW1iZXIgb2YgJ1N0b3BOdW0nLgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXZvaWQgU2tYbUNsckV4YWN0QWRkcigKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1pbnQJCVN0YXJ0TnVtLAkvKiBCZWdpbiB3aXRoIHRoaXMgQWRkcmVzcyBSZWdpc3RlciBJbmRleCAoMC4uMTUpICovCi1pbnQJCVN0b3BOdW0pCS8qIFN0b3AgYWZ0ZXIgZmluaXNoZWQgd2l0aCB0aGlzIFJlZ2lzdGVyIElkeCAoMC4uMTUpICovCi17Ci0JaW50CQlpOwotCVNLX1UxNglaZXJvQWRkclszXSA9IHsweDAwMDAsIDB4MDAwMCwgMHgwMDAwfTsKLQotCWlmICgodW5zaWduZWQpU3RhcnROdW0gPiAxNSB8fCAodW5zaWduZWQpU3RvcE51bSA+IDE1IHx8Ci0JCVN0YXJ0TnVtID4gU3RvcE51bSkgewotCi0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVywgU0tFUlJfSFdJX0UwMDEsIFNLRVJSX0hXSV9FMDAxTVNHKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9IFN0YXJ0TnVtOyBpIDw9IFN0b3BOdW07IGkrKykgewotCQlYTV9PVVRBRERSKElvQywgUG9ydCwgWE1fRVhNKGkpLCAmWmVyb0FkZHJbMF0pOwotCX0KLX0JLyogU2tYbUNsckV4YWN0QWRkciAqLwotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNGbHVzaFR4RmlmbygpIC0gRmx1c2ggdGhlIE1BQydzIHRyYW5zbWl0IEZJRk8KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUZsdXNoIHRoZSB0cmFuc21pdCBGSUZPIG9mIHRoZSBNQUMgc3BlY2lmaWVkIGJ5IHRoZSBpbmRleCAnUG9ydCcKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrTWFjRmx1c2hUeEZpZm8oCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotI2lmZGVmIEdFTkVTSVMKLQlTS19VMzIJTWRSZWc7Ci0KLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkKLQkJWE1fSU4zMihJb0MsIFBvcnQsIFhNX01PREUsICZNZFJlZyk7Ci0KLQkJWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBNZFJlZyB8IFhNX01EX0ZURik7Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkvKiBubyB3YXkgdG8gZmx1c2ggdGhlIEZJRk8gd2UgaGF2ZSB0byBpc3N1ZSBhIHJlc2V0ICovCi0JCS8qIFRCRCAqLwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi19CS8qIFNrTWFjRmx1c2hUeEZpZm8gKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNGbHVzaFJ4RmlmbygpIC0gRmx1c2ggdGhlIE1BQydzIHJlY2VpdmUgRklGTwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRmx1c2ggdGhlIHJlY2VpdmUgRklGTyBvZiB0aGUgTUFDIHNwZWNpZmllZCBieSB0aGUgaW5kZXggJ1BvcnQnCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tNYWNGbHVzaFJ4RmlmbygKLVNLX0FDCSpwQUMsCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0jaWZkZWYgR0VORVNJUwotCVNLX1UzMglNZFJlZzsKLQotCWlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKSB7Ci0KLQkJWE1fSU4zMihJb0MsIFBvcnQsIFhNX01PREUsICZNZFJlZyk7Ci0KLQkJWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBNZFJlZyB8IFhNX01EX0ZSRik7Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkvKiBubyB3YXkgdG8gZmx1c2ggdGhlIEZJRk8gd2UgaGF2ZSB0byBpc3N1ZSBhIHJlc2V0ICovCi0JCS8qIFRCRCAqLwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi19CS8qIFNrTWFjRmx1c2hSeEZpZm8gKi8KLQotCi0jaWZkZWYgR0VORVNJUwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrWG1Tb2Z0UnN0KCkgLSBEbyBhIFhNQUMgc29mdHdhcmUgcmVzZXQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBQSFkgcmVnaXN0ZXJzIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGR1cmluZyB0aGlzCi0gKglraW5kIG9mIHNvZnR3YXJlIHJlc2V0LiBUaGVyZWZvcmUgdGhlIFhNQUMgU29mdHdhcmUgUmVzZXQKLSAqCShYTV9HUF9SRVNfTUFDIGJpdCBpbiBYTV9HUF9QT1JUKSBtdXN0IG5vdCBiZSB1c2VkIQotICoKLSAqCVRoZSBzb2Z0d2FyZSByZXNldCBpcyBkb25lIGJ5Ci0gKgkJLSBkaXNhYmxpbmcgdGhlIFJ4IGFuZCBUeCBzdGF0ZSBtYWNoaW5lLAotICoJCS0gcmVzZXR0aW5nIHRoZSBzdGF0aXN0aWNzIG1vZHVsZSwKLSAqCQktIGNsZWFyIGFsbCBvdGhlciBzaWduaWZpY2FudCBYTUFDIE1vZGUsCi0gKgkJICBDb21tYW5kLCBhbmQgQ29udHJvbCBSZWdpc3RlcnMKLSAqCQktIGNsZWFyaW5nIHRoZSBIYXNoIFJlZ2lzdGVyIGFuZCB0aGUKLSAqCQkgIEV4YWN0IE1hdGNoIEFkZHJlc3MgcmVnaXN0ZXJzLCBhbmQKLSAqCQktIGZsdXNoaW5nIHRoZSBYTUFDJ3MgUnggYW5kIFR4IEZJRk9zLgotICoKLSAqIE5vdGU6Ci0gKglBbm90aGVyIHJlcXVpcmVtZW50IHdoZW4gc3RvcHBpbmcgdGhlIFhNQUMgaXMgdG8KLSAqCWF2b2lkIHNlbmRpbmcgY29ycnVwdGVkIGZyYW1lcyBvbiB0aGUgbmV0d29yay4KLSAqCURpc2FibGluZyB0aGUgVHggc3RhdGUgbWFjaGluZSB3aWxsIE5PVCBpbnRlcnJ1cHQKLSAqCXRoZSBjdXJyZW50bHkgdHJhbnNtaXR0ZWQgZnJhbWUuIEJ1dCB3ZSBtdXN0IHRha2UgY2FyZQotICoJdGhhdCB0aGUgVHggRklGTyBpcyBjbGVhcmVkIEFGVEVSIHRoZSBjdXJyZW50IGZyYW1lCi0gKglpcyBjb21wbGV0ZSBzZW50IHRvIHRoZSBuZXR3b3JrLgotICoKLSAqCUl0IHRha2VzIGFib3V0IDEybnMgdG8gc2VuZCBhIGZyYW1lIHdpdGggMTUzOCBieXRlcy4KLSAqCU9uZSBQQ0kgY2xvY2sgZ29lcyBhdCBsZWFzdCAxNW5zICg2Nk1IeikuIFRoZXJlZm9yZQotICoJYWZ0ZXIgcmVhZGluZyBYTV9HUF9QT1JUIGJhY2ssIHdlIGFyZSBzdXJlIHRoYXQgdGhlCi0gKgl0cmFuc21pdHRlciBpcyBkaXNhYmxlZCBBTkQgaWRsZS4gQW5kIHRoaXMgbWVhbnMKLSAqCXdlIG1heSBmbHVzaCB0aGUgdHJhbnNtaXQgRklGTyBub3cuCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tYbVNvZnRSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX1UxNglaZXJvQWRkcls0XSA9IHsweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDB9OwotCQotCS8qIHJlc2V0IHRoZSBzdGF0aXN0aWNzIG1vZHVsZSAqLwotCVhNX09VVDMyKElvQywgUG9ydCwgWE1fR1BfUE9SVCwgWE1fR1BfUkVTX1NUQVQpOwotCi0JLyogZGlzYWJsZSBhbGwgWE1BQyBJUlFzICovCi0JWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9JTVNLLCAweGZmZmYpOwotCQotCVhNX09VVDMyKElvQywgUG9ydCwgWE1fTU9ERSwgMCk7CQkvKiBjbGVhciBNb2RlIFJlZyAqLwotCQotCVhNX09VVDE2KElvQywgUG9ydCwgWE1fVFhfQ01ELCAwKTsJCS8qIHJlc2V0IFRYIENNRCBSZWcgKi8KLQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX1JYX0NNRCwgMCk7CQkvKiByZXNldCBSWCBDTUQgUmVnICovCi0JCi0JLyogZGlzYWJsZSBhbGwgUEhZIElSUXMgKi8KLQlzd2l0Y2ggKHBBQy0+R0luaS5HUFtQb3J0XS5QaHlUeXBlKSB7Ci0JY2FzZSBTS19QSFlfQkNPTToKLQkJCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fSU5UX01BU0ssIDB4ZmZmZik7Ci0JCQlicmVhazsKLSNpZmRlZiBPVEhFUl9QSFkKLQkJY2FzZSBTS19QSFlfTE9ORToKLQkJCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0xPTkVfSU5UX0VOQUIsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfUEhZX05BVDoKLQkJCS8qIHRvZG86IE5hdGlvbmFsCi0JCQkgU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTkFUX0lOVF9NQVNLLCAweGZmZmYpOyAqLwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogT1RIRVJfUEhZICovCi0JfQotCi0JLyogY2xlYXIgdGhlIEhhc2ggUmVnaXN0ZXIgKi8KLQlYTV9PVVRIQVNIKElvQywgUG9ydCwgWE1fSFNNLCAmWmVyb0FkZHIpOwotCi0JLyogY2xlYXIgdGhlIEV4YWN0IE1hdGNoIEFkZHJlc3MgcmVnaXN0ZXJzICovCi0JU2tYbUNsckV4YWN0QWRkcihwQUMsIElvQywgUG9ydCwgMCwgMTUpOwotCQotCS8qIGNsZWFyIHRoZSBTb3VyY2UgQ2hlY2sgQWRkcmVzcyByZWdpc3RlcnMgKi8KLQlYTV9PVVRIQVNIKElvQywgUG9ydCwgWE1fU1JDX0NISywgJlplcm9BZGRyKTsKLQotfQkvKiBTa1htU29mdFJzdCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htSGFyZFJzdCgpIC0gRG8gYSBYTUFDIGhhcmR3YXJlIHJlc2V0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgWE1BQyBvZiB0aGUgc3BlY2lmaWVkICdQb3J0JyBhbmQgYWxsIGNvbm5lY3RlZCBkZXZpY2VzCi0gKgkoUEhZIGFuZCBTRVJERVMpIHdpbGwgcmVjZWl2ZSBhIHJlc2V0IHNpZ25hbCBvbiBpdHMgKlJlc2V0IHBpbnMuCi0gKglFeHRlcm5hbCBQSFlzIG11c3QgYmUgcmVzZXQgYnkgY2xlYXJpbmcgYSBiaXQgaW4gdGhlIEdQSU8gcmVnaXN0ZXIKLSAqICAoVGltaW5nIHJlcXVpcmVtZW50czogQnJvYWRjb206IDQwMG5zLCBMZXZlbCBPbmU6IG5vbmUsIE5hdGlvbmFsOiA4MG5zKS4KLSAqCi0gKiBBVFRFTlRJT046Ci0gKiAJSXQgaXMgYWJzb2x1dGVseSBuZWNlc3NhcnkgdG8gcmVzZXQgdGhlIFNXX1JTVCBCaXQgZmlyc3QKLSAqCWJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tYbUhhcmRSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX1UzMglSZWc7Ci0JaW50CQlpOwotCWludAkJVE91dDsKLQlTS19VMTYJV29yZDsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJLyogVFhfTUZGX0NUUkwxIGhhcyAzMiBiaXRzLCBidXQgb25seSB0aGUgbG93ZXN0IDE2IGJpdHMgYXJlIHVzZWQgKi8KLQkJU0tfT1VUMTYoSW9DLCBNUl9BRERSKFBvcnQsIFRYX01GRl9DVFJMMSksIE1GRl9DTFJfTUFDX1JTVCk7Ci0KLQkJVE91dCA9IDA7Ci0JCWRvIHsKLQkJCWlmIChUT3V0KysgPiAxMDAwMCkgewotCQkJCS8qCi0JCQkJICogQWRhcHRlciBzZWVtcyB0byBiZSBpbiBSRVNFVCBzdGF0ZS4KLQkJCQkgKiBSZWdpc3RlcnMgY2Fubm90IGJlIHdyaXR0ZW4uCi0JCQkJICovCi0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQlTS19PVVQxNihJb0MsIE1SX0FERFIoUG9ydCwgVFhfTUZGX0NUUkwxKSwgTUZGX1NFVF9NQUNfUlNUKTsKLQkJCQotCQkJU0tfSU4xNihJb0MsIE1SX0FERFIoUG9ydCwgVFhfTUZGX0NUUkwxKSwgJldvcmQpOwotCQkKLQkJfSB3aGlsZSAoKFdvcmQgJiBNRkZfU0VUX01BQ19SU1QpID09IDApOwotCX0KLQotCS8qIEZvciBleHRlcm5hbCBQSFlzIHRoZXJlIG11c3QgYmUgc3BlY2lhbCBoYW5kbGluZyAqLwotCWlmIChwQUMtPkdJbmkuR1BbUG9ydF0uUGh5VHlwZSAhPSBTS19QSFlfWE1BQykgewotCQkKLQkJU0tfSU4zMihJb0MsIEIyX0dQX0lPLCAmUmVnKTsKLQkJCi0JCWlmIChQb3J0ID09IDApIHsKLQkJCVJlZyB8PSBHUF9ESVJfMDsgCS8qIHNldCB0byBvdXRwdXQgKi8KLQkJCVJlZyAmPSB+R1BfSU9fMDsJLyogc2V0IFBIWSByZXNldCAoYWN0aXZlIGxvdykgKi8KLQkJfQotCQllbHNlIHsKLQkJCVJlZyB8PSBHUF9ESVJfMjsJLyogc2V0IHRvIG91dHB1dCAqLwotCQkJUmVnICY9IH5HUF9JT18yOwkvKiBzZXQgUEhZIHJlc2V0IChhY3RpdmUgbG93KSAqLwotCQl9Ci0JCS8qIHJlc2V0IGV4dGVybmFsIFBIWSAqLwotCQlTS19PVVQzMihJb0MsIEIyX0dQX0lPLCBSZWcpOwotCi0JCS8qIHNob3J0IGRlbGF5ICovCi0JCVNLX0lOMzIoSW9DLCBCMl9HUF9JTywgJlJlZyk7Ci0JfQotfQkvKiBTa1htSGFyZFJzdCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htQ2xlYXJSc3QoKSAtIFJlbGVhc2UgdGhlIFBIWSAmIFhNQUMgcmVzZXQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi1zdGF0aWMgdm9pZCBTa1htQ2xlYXJSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX1UzMglEV29yZDsKLQkKLQkvKiBjbGVhciBIVyByZXNldCAqLwotCVNLX09VVDE2KElvQywgTVJfQUREUihQb3J0LCBUWF9NRkZfQ1RSTDEpLCBNRkZfQ0xSX01BQ19SU1QpOwotCi0JaWYgKHBBQy0+R0luaS5HUFtQb3J0XS5QaHlUeXBlICE9IFNLX1BIWV9YTUFDKSB7Ci0KLQkJU0tfSU4zMihJb0MsIEIyX0dQX0lPLCAmRFdvcmQpOwotCi0JCWlmIChQb3J0ID09IDApIHsKLQkJCURXb3JkIHw9IChHUF9ESVJfMCB8IEdQX0lPXzApOyAvKiBzZXQgdG8gb3V0cHV0ICovCi0JCX0KLQkJZWxzZSB7Ci0JCQlEV29yZCB8PSAoR1BfRElSXzIgfCBHUF9JT18yKTsgLyogc2V0IHRvIG91dHB1dCAqLwotCQl9Ci0JCS8qIENsZWFyIFBIWSByZXNldCAqLwotCQlTS19PVVQzMihJb0MsIEIyX0dQX0lPLCBEV29yZCk7Ci0KLQkJLyogRW5hYmxlIEdNSUkgaW50ZXJmYWNlICovCi0JCVhNX09VVDE2KElvQywgUG9ydCwgWE1fSFdfQ0ZHLCBYTV9IV19HTUlJX01EKTsKLQl9Ci19CS8qIFNrWG1DbGVhclJzdCAqLwotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQotCi0jaWZkZWYgWVVLT04KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtU29mdFJzdCgpIC0gRG8gYSBHTUFDIHNvZnR3YXJlIHJlc2V0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgR1BIWSByZWdpc3RlcnMgc2hvdWxkIG5vdCBiZSBkZXN0cm95ZWQgZHVyaW5nIHRoaXMKLSAqCWtpbmQgb2Ygc29mdHdhcmUgcmVzZXQuCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tHbVNvZnRSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX1UxNglFbXB0eUhhc2hbNF0gPSB7MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwfTsKLQlTS19VMTYgIFJ4Q3RybDsKLQotCS8qIHJlc2V0IHRoZSBzdGF0aXN0aWNzIG1vZHVsZSAqLwotCi0JLyogZGlzYWJsZSBhbGwgR01BQyBJUlFzICovCi0JU0tfT1VUOChJb0MsIEdNQUNfSVJRX01TSywgMCk7Ci0JCi0JLyogZGlzYWJsZSBhbGwgUEhZIElSUXMgKi8KLQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0lOVF9NQVNLLCAwKTsKLQkKLQkvKiBjbGVhciB0aGUgSGFzaCBSZWdpc3RlciAqLwotCUdNX09VVEhBU0goSW9DLCBQb3J0LCBHTV9NQ19BRERSX0gxLCBFbXB0eUhhc2gpOwotCi0JLyogRW5hYmxlIFVuaWNhc3QgYW5kIE11bHRpY2FzdCBmaWx0ZXJpbmcgKi8KLQlHTV9JTjE2KElvQywgUG9ydCwgR01fUlhfQ1RSTCwgJlJ4Q3RybCk7Ci0JCi0JR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9SWF9DVFJMLAotCQkoU0tfVTE2KShSeEN0cmwgfCBHTV9SWENSX1VDRl9FTkEgfCBHTV9SWENSX01DRl9FTkEpKTsKLQotfQkvKiBTa0dtU29mdFJzdCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtSGFyZFJzdCgpIC0gRG8gYSBHTUFDIGhhcmR3YXJlIHJlc2V0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tHbUhhcmRSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX1UzMglEV29yZDsKLQkKLQkvKiBXQSBjb2RlIGZvciBDT01BIG1vZGUgKi8KLQlpZiAocEFDLT5HSW5pLkdJWXVrb25MaXRlICYmCi0JCXBBQy0+R0luaS5HSUNoaXBSZXYgPj0gQ0hJUF9SRVZfWVVfTElURV9BMykgewotCQkKLQkJU0tfSU4zMihJb0MsIEIyX0dQX0lPLCAmRFdvcmQpOwotCi0JCURXb3JkIHw9IChHUF9ESVJfOSB8IEdQX0lPXzkpOwotCi0JCS8qIHNldCBQSFkgcmVzZXQgKi8KLQkJU0tfT1VUMzIoSW9DLCBCMl9HUF9JTywgRFdvcmQpOwotCX0KLQotCS8qIHNldCBHUEhZIENvbnRyb2wgcmVzZXQgKi8KLQlTS19PVVQzMihJb0MsIE1SX0FERFIoUG9ydCwgR1BIWV9DVFJMKSwgR1BDX1JTVF9TRVQpOwotCi0JLyogc2V0IEdNQUMgQ29udHJvbCByZXNldCAqLwotCVNLX09VVDMyKElvQywgTVJfQUREUihQb3J0LCBHTUFDX0NUUkwpLCBHTUNfUlNUX1NFVCk7Ci0KLX0JLyogU2tHbUhhcmRSc3QgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHbUNsZWFyUnN0KCkgLSBSZWxlYXNlIHRoZSBHUEhZICYgR01BQyByZXNldAotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrR21DbGVhclJzdCgKLVNLX0FDCSpwQUMsCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfVTMyCURXb3JkOwotCQotI2lmZGVmIFhYWAotCQkvKiBjbGVhciBHTUFDIENvbnRyb2wgcmVzZXQgKi8KLQkJU0tfT1VUMzIoSW9DLCBNUl9BRERSKFBvcnQsIEdNQUNfQ1RSTCksIEdNQ19SU1RfQ0xSKTsKLQotCQkvKiBzZXQgR01BQyBDb250cm9sIHJlc2V0ICovCi0JCVNLX09VVDMyKElvQywgTVJfQUREUihQb3J0LCBHTUFDX0NUUkwpLCBHTUNfUlNUX1NFVCk7Ci0jZW5kaWYgLyogWFhYICovCi0KLQkvKiBXQSBjb2RlIGZvciBDT01BIG1vZGUgKi8KLQlpZiAocEFDLT5HSW5pLkdJWXVrb25MaXRlICYmCi0JCXBBQy0+R0luaS5HSUNoaXBSZXYgPj0gQ0hJUF9SRVZfWVVfTElURV9BMykgewotCQkKLQkJU0tfSU4zMihJb0MsIEIyX0dQX0lPLCAmRFdvcmQpOwotCi0JCURXb3JkIHw9IEdQX0RJUl85OwkJLyogc2V0IHRvIG91dHB1dCAqLwotCQlEV29yZCAmPSB+R1BfSU9fOTsJCS8qIGNsZWFyIFBIWSByZXNldCAoYWN0aXZlIGhpZ2gpICovCi0KLQkJLyogY2xlYXIgUEhZIHJlc2V0ICovCi0JCVNLX09VVDMyKElvQywgQjJfR1BfSU8sIERXb3JkKTsKLQl9Ci0KLQkvKiBzZXQgSFdDRkdfTU9ERSAqLwotCURXb3JkID0gR1BDX0lOVF9QT0xfSEkgfCBHUENfRElTX0ZDIHwgR1BDX0RJU19TTEVFUCB8Ci0JCUdQQ19FTkFfWEMgfCBHUENfQU5FR19BRFZfQUxMX00gfCBHUENfRU5BX1BBVVNFIHwKLQkJKHBBQy0+R0luaS5HSUNvcHBlclR5cGUgPyBHUENfSFdDRkdfR01JSV9DT1AgOgotCQlHUENfSFdDRkdfR01JSV9GSUIpOwotCi0JLyogc2V0IEdQSFkgQ29udHJvbCByZXNldCAqLwotCVNLX09VVDMyKElvQywgTVJfQUREUihQb3J0LCBHUEhZX0NUUkwpLCBEV29yZCB8IEdQQ19SU1RfU0VUKTsKLQotCS8qIHJlbGVhc2UgR1BIWSBDb250cm9sIHJlc2V0ICovCi0JU0tfT1VUMzIoSW9DLCBNUl9BRERSKFBvcnQsIEdQSFlfQ1RSTCksIERXb3JkIHwgR1BDX1JTVF9DTFIpOwotCi0jaWZkZWYgVkNQVQotCVZDcHVXYWl0KDkwMDApOwotI2VuZGlmIC8qIFZDUFUgKi8KLQotCS8qIGNsZWFyIEdNQUMgQ29udHJvbCByZXNldCAqLwotCVNLX09VVDMyKElvQywgTVJfQUREUihQb3J0LCBHTUFDX0NUUkwpLCBHTUNfUEFVU0VfT04gfCBHTUNfUlNUX0NMUik7Ci0KLSNpZmRlZiBWQ1BVCi0JVkNwdVdhaXQoMjAwMCk7Ci0JCi0JU0tfSU4zMihJb0MsIE1SX0FERFIoUG9ydCwgR1BIWV9DVFJMKSwgJkRXb3JkKTsKLQkJCQotCVNLX0lOMzIoSW9DLCBCMF9JU1JDLCAmRFdvcmQpOwotI2VuZGlmIC8qIFZDUFUgKi8KLQotfQkvKiBTa0dtQ2xlYXJSc3QgKi8KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa01hY1NvZnRSc3QoKSAtIERvIGEgTUFDIHNvZnR3YXJlIHJlc2V0Ci0gKgotICogRGVzY3JpcHRpb246CWNhbGxzIGEgTUFDIHNvZnR3YXJlIHJlc2V0IHJvdXRpbmUgZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa01hY1NvZnRSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JLyogZGlzYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgKi8KLQlTa01hY1J4VHhEaXNhYmxlKHBBQywgSW9DLCBQb3J0KTsKLQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkKLQkJU2tYbVNvZnRSc3QocEFDLCBJb0MsIFBvcnQpOwotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJCi0JCVNrR21Tb2Z0UnN0KHBBQywgSW9DLCBQb3J0KTsKLQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQotCS8qIGZsdXNoIHRoZSBNQUMncyBSeCBhbmQgVHggRklGT3MgKi8KLQlTa01hY0ZsdXNoVHhGaWZvKHBBQywgSW9DLCBQb3J0KTsKLQkKLQlTa01hY0ZsdXNoUnhGaWZvKHBBQywgSW9DLCBQb3J0KTsKLQotCXBQcnQtPlBTdGF0ZSA9IFNLX1BSVF9TVE9QOwotCi19CS8qIFNrTWFjU29mdFJzdCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa01hY0hhcmRSc3QoKSAtIERvIGEgTUFDIGhhcmR3YXJlIHJlc2V0Ci0gKgotICogRGVzY3JpcHRpb246CWNhbGxzIGEgTUFDIGhhcmR3YXJlIHJlc2V0IHJvdXRpbmUgZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa01hY0hhcmRSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkKLQkJU2tYbUhhcmRSc3QocEFDLCBJb0MsIFBvcnQpOwotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJCi0JCVNrR21IYXJkUnN0KHBBQywgSW9DLCBQb3J0KTsKLQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQotCXBBQy0+R0luaS5HUFtQb3J0XS5QU3RhdGUgPSBTS19QUlRfUkVTRVQ7Ci0KLX0JLyogU2tNYWNIYXJkUnN0ICovCi0KLQotI2lmZGVmIEdFTkVTSVMKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htSW5pdE1hYygpIC0gSW5pdGlhbGl6ZSB0aGUgWE1BQyBJSQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJSW5pdGlhbGl6ZSB0aGUgWE1BQyBvZiB0aGUgc3BlY2lmaWVkIHBvcnQuCi0gKglUaGUgWE1BQyBtdXN0IGJlIHJlc2V0IG9yIHN0b3BwZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBOb3RlOgotICoJVGhlIFhNQUMncyBSeCBhbmQgVHggc3RhdGUgbWFjaGluZSBpcyBzdGlsbCBkaXNhYmxlZCB3aGVuIHJldHVybmluZy4KLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrWG1Jbml0TWFjKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0JaW50CQkJaTsKLQlTS19VMTYJCVNXb3JkOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAocFBydC0+UFN0YXRlID09IFNLX1BSVF9TVE9QKSB7Ci0JCS8qIFBvcnQgU3RhdGU6IFNLX1BSVF9TVE9QICovCi0JCS8qIFZlcmlmeSB0aGF0IHRoZSByZXNldCBiaXQgaXMgY2xlYXJlZCAqLwotCQlTS19JTjE2KElvQywgTVJfQUREUihQb3J0LCBUWF9NRkZfQ1RSTDEpLCAmU1dvcmQpOwotCi0JCWlmICgoU1dvcmQgJiBNRkZfU0VUX01BQ19SU1QpICE9IDApIHsKLQkJCS8qIFBTdGF0ZSBkb2VzIG5vdCBtYXRjaCBIVyBzdGF0ZSAqLwotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAwNiwgU0tFUlJfSFdJX0UwMDZNU0cpOwotCQkJLyogQ29ycmVjdCBpdCAqLwotCQkJcFBydC0+UFN0YXRlID0gU0tfUFJUX1JFU0VUOwotCQl9Ci0JfQotCi0JaWYgKHBQcnQtPlBTdGF0ZSA9PSBTS19QUlRfUkVTRVQpIHsKLQotCQlTa1htQ2xlYXJSc3QocEFDLCBJb0MsIFBvcnQpOwotCi0JCWlmIChwUHJ0LT5QaHlUeXBlICE9IFNLX1BIWV9YTUFDKSB7Ci0JCQkvKiByZWFkIElkIGZyb20gZXh0ZXJuYWwgUEhZIChhbGwgaGF2ZSB0aGUgc2FtZSBhZGRyZXNzKSAqLwotCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9YTUFDX0lEMSwgJnBQcnQtPlBoeUlkMSk7Ci0KLQkJCS8qCi0JCQkgKiBPcHRpbWl6ZSBNRElPIHRyYW5zZmVyIGJ5IHN1cHByZXNzaW5nIHByZWFtYmxlLgotCQkJICogTXVzdCBiZSBkb25lIEFGVEVSIGZpcnN0IGFjY2VzcyB0byBCQ09NIGNoaXAuCi0JCQkgKi8KLQkJCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCAmU1dvcmQpOwotCQkJCi0JCQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX01NVV9DTUQsIFNXb3JkIHwgWE1fTU1VX05PX1BSRSk7Ci0KLQkJCWlmIChwUHJ0LT5QaHlJZDEgPT0gUEhZX0JDT01fSUQxX0MwKSB7Ci0JCQkJLyoKLQkJCQkgKiBXb3JrYXJvdW5kIEJDT00gRXJyYXRhIGZvciB0aGUgQzAgdHlwZS4KLQkJCQkgKiBXcml0ZSBtYWdpYyBwYXR0ZXJucyB0byByZXNlcnZlZCByZWdpc3RlcnMuCi0JCQkJICovCi0JCQkJaSA9IDA7Ci0JCQkJd2hpbGUgKEJjb21SZWdDMEhhY2tbaV0uUGh5UmVnICE9IDApIHsKLQkJCQkJU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBCY29tUmVnQzBIYWNrW2ldLlBoeVJlZywKLQkJCQkJCUJjb21SZWdDMEhhY2tbaV0uUGh5VmFsKTsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHBQcnQtPlBoeUlkMSA9PSBQSFlfQkNPTV9JRDFfQTEpIHsKLQkJCQkvKgotCQkJCSAqIFdvcmthcm91bmQgQkNPTSBFcnJhdGEgZm9yIHRoZSBBMSB0eXBlLgotCQkJCSAqIFdyaXRlIG1hZ2ljIHBhdHRlcm5zIHRvIHJlc2VydmVkIHJlZ2lzdGVycy4KLQkJCQkgKi8KLQkJCQlpID0gMDsKLQkJCQl3aGlsZSAoQmNvbVJlZ0ExSGFja1tpXS5QaHlSZWcgIT0gMCkgewotCQkJCQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIEJjb21SZWdBMUhhY2tbaV0uUGh5UmVnLAotCQkJCQkJQmNvbVJlZ0ExSGFja1tpXS5QaHlWYWwpOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQotCi0JCQkvKgotCQkJICogV29ya2Fyb3VuZCBCQ09NIEVycmF0YSAoIzEwNTIzKSBmb3IgYWxsIEJDb20gUEhZcy4KLQkJCSAqIERpc2FibGUgUG93ZXIgTWFuYWdlbWVudCBhZnRlciByZXNldC4KLQkJCSAqLwotCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVWF9DVFJMLCAmU1dvcmQpOwotCQkJCi0JCQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVWF9DVFJMLAotCQkJCShTS19VMTYpKFNXb3JkIHwgUEhZX0JfQUNfRElTX1BNKSk7Ci0KLQkJCS8qIFBIWSBMRUQgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiBTa0dlWG1pdExFRCgpICovCi0JCX0KLQotCQkvKiBEdW1teSByZWFkIHRoZSBJbnRlcnJ1cHQgc291cmNlIHJlZ2lzdGVyICovCi0JCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9JU1JDLCAmU1dvcmQpOwotCQkKLQkJLyoKLQkJICogVGhlIGF1dG8tbmVnb3RpYXRpb24gcHJvY2VzcyBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIKLQkJICogY2xlYXJpbmcgdGhlIHJlc2V0LiBUaGUgYXV0by1uZWdvdGlhdGlvbiBwcm9jZXNzIHNob3VsZCBiZQotCQkgKiBzdGFydGVkIGJ5IHRoZSBTSVJRLCB0aGVyZWZvcmUgc3RvcCBpdCBoZXJlIGltbWVkaWF0ZWx5LgotCQkgKi8KLQkJU2tNYWNJbml0UGh5KHBBQywgSW9DLCBQb3J0LCBTS19GQUxTRSk7Ci0KLSNpZmRlZiBURVNUX09OTFkKLQkJLyogdGVtcC4gY29kZTogZW5hYmxlIHNpZ25hbCBkZXRlY3QgKi8KLQkJLyogV0FSTklORzogZG8gbm90IG92ZXJyaWRlIEdNSUkgc2V0dGluZyBhYm92ZSAqLwotCQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX0hXX0NGRywgWE1fSFdfQ09NNFNJRyk7Ci0jZW5kaWYKLQl9Ci0KLQkvKgotCSAqIGNvbmZpZ3VyZSB0aGUgWE1BQ3MgU3RhdGlvbiBBZGRyZXNzCi0JICogQjJfTUFDXzIgPSB4eCB4eCB4eCB4eCB4eCB4MSBpcyBwcm9ncmFtbWVkIHRvIFhNQUMgQQotCSAqIEIyX01BQ18zID0geHggeHggeHggeHggeHggeDIgaXMgcHJvZ3JhbW1lZCB0byBYTUFDIEIKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCS8qCi0JCSAqIFRoZSBmb2xsb3dpbmcgMiBzdGF0ZW1lbnRzIGFyZSB0b2dldGhlciBlbmRpYW5lc3MKLQkJICogaW5kZXBlbmRlbnQuIFJlbWVtYmVyIHRoaXMgd2hlbiBjaGFuZ2luZy4KLQkJICovCi0JCVNLX0lOMTYoSW9DLCAoQjJfTUFDXzIgKyBQb3J0ICogOCArIGkgKiAyKSwgJlNXb3JkKTsKLQkJCi0JCVhNX09VVDE2KElvQywgUG9ydCwgKFhNX1NBICsgaSAqIDIpLCBTV29yZCk7Ci0JfQotCi0JLyogVHggSW50ZXIgUGFja2V0IEdhcCAoWE1fVFhfSVBHKToJdXNlIGRlZmF1bHQgKi8KLQkvKiBUeCBIaWdoIFdhdGVyIE1hcmsgKFhNX1RYX0hJX1dNKToJdXNlIGRlZmF1bHQgKi8KLQkvKiBUeCBMb3cgV2F0ZXIgTWFyayAoWE1fVFhfTE9fV00pOgl1c2UgZGVmYXVsdCAqLwotCS8qIEhvc3QgUmVxdWVzdCBUaHJlc2hvbGQgKFhNX0hUX1RIUik6CXVzZSBkZWZhdWx0ICovCi0JLyogUnggUmVxdWVzdCBUaHJlc2hvbGQgKFhNX1JYX1RIUik6CXVzZSBkZWZhdWx0ICovCi0JLyogUnggTG93IFdhdGVyIE1hcmsgKFhNX1JYX0xPX1dNKToJdXNlIGRlZmF1bHQgKi8KLQotCS8qIGNvbmZpZ3VyZSBSeCBIaWdoIFdhdGVyIE1hcmsgKFhNX1JYX0hJX1dNKSAqLwotCVhNX09VVDE2KElvQywgUG9ydCwgWE1fUlhfSElfV00sIFNLX1hNX1JYX0hJX1dNKTsKLQotCS8qIENvbmZpZ3VyZSBUeCBSZXF1ZXN0IFRocmVzaG9sZCAqLwotCVNXb3JkID0gU0tfWE1fVEhSX1NMOwkJCQkvKiBmb3Igc2luZ2xlIHBvcnQgKi8KLQotCWlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPiAxKSB7Ci0JCXN3aXRjaCAocEFDLT5HSW5pLkdJUG9ydFVzYWdlKSB7Ci0JCWNhc2UgU0tfUkVEX0xJTks6Ci0JCQlTV29yZCA9IFNLX1hNX1RIUl9SRURMOwkJLyogcmVkdW5kYW50IGxpbmsgKi8KLQkJCWJyZWFrOwotCQljYXNlIFNLX01VTF9MSU5LOgotCQkJU1dvcmQgPSBTS19YTV9USFJfTVVMTDsJCS8qIGxvYWQgYmFsYW5jaW5nICovCi0JCQlicmVhazsKLQkJY2FzZSBTS19KVU1CT19MSU5LOgotCQkJU1dvcmQgPSBTS19YTV9USFJfSlVNQk87CS8qIGp1bWJvIGZyYW1lcyAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX0hXSV9FMDE0LCBTS0VSUl9IV0lfRTAxNE1TRyk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX1RYX1RIUiwgU1dvcmQpOwotCi0JLyogc2V0dXAgcmVnaXN0ZXIgZGVmYXVsdHMgZm9yIHRoZSBUeCBDb21tYW5kIFJlZ2lzdGVyICovCi0JWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9UWF9DTUQsIFhNX1RYX0FVVE9fUEFEKTsKLQotCS8qIHNldHVwIHJlZ2lzdGVyIGRlZmF1bHRzIGZvciB0aGUgUnggQ29tbWFuZCBSZWdpc3RlciAqLwotCVNXb3JkID0gWE1fUlhfU1RSSVBfRkNTIHwgWE1fUlhfTEVORVJSX09LOwotCi0JaWYgKHBBQy0+R0luaS5HSVBvcnRVc2FnZSA9PSBTS19KVU1CT19MSU5LKSB7Ci0JCVNXb3JkIHw9IFhNX1JYX0JJR19QS19PSzsKLQl9Ci0KLQlpZiAocFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0hBTEYpIHsKLQkJLyoKLQkJICogSWYgaW4gbWFudWFsIGhhbGYgZHVwbGV4IG1vZGUgdGhlIG90aGVyIHNpZGUgbWlnaHQgYmUgaW4KLQkJICogZnVsbCBkdXBsZXggbW9kZSwgc28gaWdub3JlIGlmIGEgY2FycmllciBleHRlbnNpb24gaXMgbm90IHNlZW4KLQkJICogb24gZnJhbWVzIHJlY2VpdmVkCi0JCSAqLwotCQlTV29yZCB8PSBYTV9SWF9ESVNfQ0VYVDsKLQl9Ci0JCi0JWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9SWF9DTUQsIFNXb3JkKTsKLQotCS8qCi0JICogc2V0dXAgcmVnaXN0ZXIgZGVmYXVsdHMgZm9yIHRoZSBNb2RlIFJlZ2lzdGVyCi0JICoJLSBEb24ndCBzdHJpcCBlcnJvciBmcmFtZXMgdG8gYXZvaWQgU3RvcmUgJiBGb3J3YXJkCi0JICoJICBvbiB0aGUgUnggc2lkZS4KLQkgKgktIEVuYWJsZSAnQ2hlY2sgU3RhdGlvbiBBZGRyZXNzJyBiaXQKLQkgKgktIEVuYWJsZSAnQ2hlY2sgQWRkcmVzcyBBcnJheScgYml0Ci0JICovCi0JWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBYTV9ERUZfTU9ERSk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIFJlY2VpdmUgQ291bnRlciBFdmVudCBNYXNrIChYTV9SWF9FVl9NU0spCi0JICoJLSBFbmFibGUgYWxsIGJpdHMgZXhjZXB0aW5nICdPY3RldHMgUnggT0sgTG93IENudE92JwotCSAqCSAgYW5kICdPY3RldHMgUnggT0sgSGkgQ250IE92Jy4KLQkgKi8KLQlYTV9PVVQzMihJb0MsIFBvcnQsIFhNX1JYX0VWX01TSywgWE1SX0RFRl9NU0spOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBUcmFuc21pdCBDb3VudGVyIEV2ZW50IE1hc2sgKFhNX1RYX0VWX01TSykKLQkgKgktIEVuYWJsZSBhbGwgYml0cyBleGNlcHRpbmcgJ09jdGV0cyBUeCBPSyBMb3cgQ250T3YnCi0JICoJICBhbmQgJ09jdGV0cyBUeCBPSyBIaSBDbnQgT3YnLgotCSAqLwotCVhNX09VVDMyKElvQywgUG9ydCwgWE1fVFhfRVZfTVNLLCBYTVRfREVGX01TSyk7Ci0KLQkvKgotCSAqIERvIE5PVCBpbml0IFhNQUMgaW50ZXJydXB0IG1hc2sgaGVyZS4KLQkgKiBBbGwgaW50ZXJydXB0cyByZW1haW4gZGlzYWJsZSB1bnRpbCBsaW5rIGNvbWVzIHVwIQotCSAqLwotCi0JLyoKLQkgKiBBbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGNoYW5nZXMgbWF5IGJlIGRvbmUgbm93LgotCSAqIFRoZSBsYXN0IGFjdGlvbiBpcyB0byBlbmFibGUgdGhlIFJ4IGFuZCBUeCBzdGF0ZSBtYWNoaW5lLgotCSAqIFRoaXMgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgdGhlIGF1dG8tbmVnb3RpYXRpb24gcHJvY2VzcwotCSAqIGhhcyBiZWVuIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCi0JICovCi19CS8qIFNrWG1Jbml0TWFjICovCi0jZW5kaWYgLyogR0VORVNJUyAqLwotCi0KLSNpZmRlZiBZVUtPTgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR21Jbml0TWFjKCkgLSBJbml0aWFsaXplIHRoZSBHTUFDCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglJbml0aWFsaXplIHRoZSBHTUFDIG9mIHRoZSBzcGVjaWZpZWQgcG9ydC4KLSAqCVRoZSBHTUFDIG11c3QgYmUgcmVzZXQgb3Igc3RvcHBlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIE5vdGU6Ci0gKglUaGUgR01BQydzIFJ4IGFuZCBUeCBzdGF0ZSBtYWNoaW5lIGlzIHN0aWxsIGRpc2FibGVkIHdoZW4gcmV0dXJuaW5nLgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXZvaWQgU2tHbUluaXRNYWMoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlpbnQJCQlpOwotCVNLX1UxNgkJU1dvcmQ7Ci0JU0tfVTMyCQlEV29yZDsKLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JaWYgKHBQcnQtPlBTdGF0ZSA9PSBTS19QUlRfU1RPUCkgewotCQkvKiBQb3J0IFN0YXRlOiBTS19QUlRfU1RPUCAqLwotCQkvKiBWZXJpZnkgdGhhdCB0aGUgcmVzZXQgYml0IGlzIGNsZWFyZWQgKi8KLQkJU0tfSU4zMihJb0MsIE1SX0FERFIoUG9ydCwgR01BQ19DVFJMKSwgJkRXb3JkKTsKLQkJCi0JCWlmICgoRFdvcmQgJiBHTUNfUlNUX1NFVCkgIT0gMCkgewotCQkJLyogUFN0YXRlIGRvZXMgbm90IG1hdGNoIEhXIHN0YXRlICovCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1csIFNLRVJSX0hXSV9FMDA2LCBTS0VSUl9IV0lfRTAwNk1TRyk7Ci0JCQkvKiBDb3JyZWN0IGl0ICovCi0JCQlwUHJ0LT5QU3RhdGUgPSBTS19QUlRfUkVTRVQ7Ci0JCX0KLQl9Ci0KLQlpZiAocFBydC0+UFN0YXRlID09IFNLX1BSVF9SRVNFVCkgewotCQkKLQkJU2tHbUhhcmRSc3QocEFDLCBJb0MsIFBvcnQpOwotCi0JCVNrR21DbGVhclJzdChwQUMsIElvQywgUG9ydCk7Ci0JCQotCQkvKiBBdXRvLW5lZ290aWF0aW9uID8gKi8KLQkJaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9IQUxGIHx8IHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCQkvKiBBdXRvLW5lZ290aWF0aW9uIGRpc2FibGVkICovCi0KLQkJCS8qIGdldCBHZW5lcmFsIFB1cnBvc2UgQ29udHJvbCAqLwotCQkJR01fSU4xNihJb0MsIFBvcnQsIEdNX0dQX0NUUkwsICZTV29yZCk7Ci0KLQkJCS8qIGRpc2FibGUgYXV0by11cGRhdGUgZm9yIHNwZWVkLCBkdXBsZXggYW5kIGZsb3ctY29udHJvbCAqLwotCQkJU1dvcmQgfD0gR01fR1BDUl9BVV9BTExfRElTOwotCQkJCi0JCQkvKiBzZXR1cCBHZW5lcmFsIFB1cnBvc2UgQ29udHJvbCBSZWdpc3RlciAqLwotCQkJR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9HUF9DVFJMLCBTV29yZCk7Ci0JCQkKLQkJCVNXb3JkID0gR01fR1BDUl9BVV9BTExfRElTOwotCQl9Ci0JCWVsc2UgewotCQkJU1dvcmQgPSAwOwotCQl9Ci0KLQkJLyogc3BlZWQgc2V0dGluZ3MgKi8KLQkJc3dpdGNoIChwUHJ0LT5QTGlua1NwZWVkKSB7Ci0JCWNhc2UgU0tfTFNQRUVEX0FVVE86Ci0JCWNhc2UgU0tfTFNQRUVEXzEwMDBNQlBTOgotCQkJU1dvcmQgfD0gR01fR1BDUl9TUEVFRF8xMDAwIHwgR01fR1BDUl9TUEVFRF8xMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTS19MU1BFRURfMTAwTUJQUzoKLQkJCVNXb3JkIHw9IEdNX0dQQ1JfU1BFRURfMTAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfTFNQRUVEXzEwTUJQUzoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogZHVwbGV4IHNldHRpbmdzICovCi0JCWlmIChwUHJ0LT5QTGlua01vZGUgIT0gU0tfTE1PREVfSEFMRikgewotCQkJLyogc2V0IGZ1bGwgZHVwbGV4ICovCi0JCQlTV29yZCB8PSBHTV9HUENSX0RVUF9GVUxMOwotCQl9Ci0KLQkJLyogZmxvdy1jb250cm9sIHNldHRpbmdzICovCi0JCXN3aXRjaCAocFBydC0+UEZsb3dDdHJsTW9kZSkgewotCQljYXNlIFNLX0ZMT1dfTU9ERV9OT05FOgotCQkJLyogc2V0IFBhdXNlIE9mZiAqLwotCQkJU0tfT1VUMzIoSW9DLCBNUl9BRERSKFBvcnQsIEdNQUNfQ1RSTCksIEdNQ19QQVVTRV9PRkYpOwotCQkJLyogZGlzYWJsZSBUeCAmIFJ4IGZsb3ctY29udHJvbCAqLwotCQkJU1dvcmQgfD0gR01fR1BDUl9GQ19UWF9ESVMgfCBHTV9HUENSX0ZDX1JYX0RJUyB8IEdNX0dQQ1JfQVVfRkNUX0RJUzsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0ZMT1dfTU9ERV9MT0NfU0VORDoKLQkJCS8qIGRpc2FibGUgUnggZmxvdy1jb250cm9sICovCi0JCQlTV29yZCB8PSBHTV9HUENSX0ZDX1JYX0RJUyB8IEdNX0dQQ1JfQVVfRkNUX0RJUzsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0ZMT1dfTU9ERV9TWU1NRVRSSUM6Ci0JCWNhc2UgU0tfRkxPV19NT0RFX1NZTV9PUl9SRU06Ci0JCQkvKiBlbmFibGUgVHggJiBSeCBmbG93LWNvbnRyb2wgKi8KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogc2V0dXAgR2VuZXJhbCBQdXJwb3NlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQkJR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9HUF9DVFJMLCBTV29yZCk7Ci0KLQkJLyogZHVtbXkgcmVhZCB0aGUgSW50ZXJydXB0IFNvdXJjZSBSZWdpc3RlciAqLwotCQlTS19JTjE2KElvQywgR01BQ19JUlFfU1JDLCAmU1dvcmQpOwotCQkKLSNpZm5kZWYgVkNQVQotCQkvKiByZWFkIElkIGZyb20gUEhZICovCi0JCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9JRDEsICZwUHJ0LT5QaHlJZDEpOwotCQkKLQkJU2tHbUluaXRQaHlNYXJ2KHBBQywgSW9DLCBQb3J0LCBTS19GQUxTRSk7Ci0jZW5kaWYgLyogVkNQVSAqLwotCX0KLQotCSh2b2lkKVNrR21SZXNldENvdW50ZXIocEFDLCBJb0MsIFBvcnQpOwotCi0JLyogc2V0dXAgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlciAqLwotCUdNX09VVDE2KElvQywgUG9ydCwgR01fVFhfQ1RSTCwgVFhfQ09MX1RIUihwUHJ0LT5QTWFjQ29sVGhyZXMpKTsKLQotCS8qIHNldHVwIFJlY2VpdmUgQ29udHJvbCBSZWdpc3RlciAqLwotCUdNX09VVDE2KElvQywgUG9ydCwgR01fUlhfQ1RSTCwgR01fUlhDUl9VQ0ZfRU5BIHwgR01fUlhDUl9NQ0ZfRU5BIHwKLQkJR01fUlhDUl9DUkNfRElTKTsKLQotCS8qIHNldHVwIFRyYW5zbWl0IEZsb3cgQ29udHJvbCBSZWdpc3RlciAqLwotCUdNX09VVDE2KElvQywgUG9ydCwgR01fVFhfRkxPV19DVFJMLCAweGZmZmYpOwotCi0JLyogc2V0dXAgVHJhbnNtaXQgUGFyYW1ldGVyIFJlZ2lzdGVyICovCi0jaWZkZWYgVkNQVQotCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9UWF9QQVJBTSwgJlNXb3JkKTsKLSNlbmRpZiAvKiBWQ1BVICovCi0KLSAgICBTV29yZCA9IFRYX0pBTV9MRU5fVkFMKHBQcnQtPlBNYWNKYW1MZW4pIHwKLQkJCVRYX0pBTV9JUEdfVkFMKHBQcnQtPlBNYWNKYW1JcGdWYWwpIHwKLQkJCVRYX0lQR19KQU1fREFUQShwUHJ0LT5QTWFjSmFtSXBnRGF0YSk7Ci0JCi0JR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9UWF9QQVJBTSwgU1dvcmQpOwotCi0JLyogY29uZmlndXJlIHRoZSBTZXJpYWwgTW9kZSBSZWdpc3RlciAqLwotI2lmZGVmIFZDUFUKLQlHTV9JTjE2KElvQywgUG9ydCwgR01fU0VSSUFMX01PREUsICZTV29yZCk7Ci0jZW5kaWYgLyogVkNQVSAqLwotCQotCVNXb3JkID0gR01fU01PRF9WTEFOX0VOQSB8IElQR19EQVRBX1ZBTChwUHJ0LT5QTWFjSXBnRGF0YSk7Ci0KLQlpZiAocFBydC0+UE1hY0xpbWl0NCkgewotCQkvKiByZXNldCBvZiBjb2xsaXNpb24gY291bnRlciBhZnRlciA0IGNvbnNlY3V0aXZlIGNvbGxpc2lvbnMgKi8KLQkJU1dvcmQgfD0gR01fU01PRF9MSU1JVF80OwotCX0KLQotCWlmIChwQUMtPkdJbmkuR0lQb3J0VXNhZ2UgPT0gU0tfSlVNQk9fTElOSykgewotCQkvKiBlbmFibGUganVtYm8gbW9kZSAoTWF4LiBGcmFtZSBMZW5ndGggPSA5MDE4KSAqLwotCQlTV29yZCB8PSBHTV9TTU9EX0pVTUJPX0VOQTsKLQl9Ci0JCi0JR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9TRVJJQUxfTU9ERSwgU1dvcmQpOwotCQotCS8qCi0JICogY29uZmlndXJlIHRoZSBHTUFDcyBTdGF0aW9uIEFkZHJlc3NlcwotCSAqIGluIFBST00geW91IGNhbiBmaW5kIG91ciBhZGRyZXNzZXMgYXQ6Ci0JICogQjJfTUFDXzEgPSB4eCB4eCB4eCB4eCB4eCB4MCB2aXJ0dWFsIGFkZHJlc3MKLQkgKiBCMl9NQUNfMiA9IHh4IHh4IHh4IHh4IHh4IHgxIGlzIHByb2dyYW1tZWQgdG8gR01BQyBBCi0JICogQjJfTUFDXzMgPSB4eCB4eCB4eCB4eCB4eCB4MiBpcyByZXNlcnZlZCBmb3IgRHVhbFBvcnQKLQkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJLyoKLQkJICogVGhlIGZvbGxvd2luZyAyIHN0YXRlbWVudHMgYXJlIHRvZ2V0aGVyIGVuZGlhbmVzcwotCQkgKiBpbmRlcGVuZGVudC4gUmVtZW1iZXIgdGhpcyB3aGVuIGNoYW5naW5nLgotCQkgKi8KLQkJLyogcGh5c2ljYWwgYWRkcmVzczogd2lsbCBiZSB1c2VkIGZvciBwYXVzZSBmcmFtZXMgKi8KLQkJU0tfSU4xNihJb0MsIChCMl9NQUNfMiArIFBvcnQgKiA4ICsgaSAqIDIpLCAmU1dvcmQpOwotCi0jaWZkZWYgV0FfREVWXzE2Ci0JCS8qIFdBIGZvciBkZXZpYXRpb24gIzE2ICovCi0JCWlmIChwQUMtPkdJbmkuR0lDaGlwSWQgPT0gQ0hJUF9JRF9ZVUtPTiAmJiBwQUMtPkdJbmkuR0lDaGlwUmV2ID09IDApIHsKLQkJCS8qIHN3YXAgdGhlIGFkZHJlc3MgYnl0ZXMgKi8KLQkJCVNXb3JkID0gKChTV29yZCAmIDB4ZmYwMCkgPj4gOCkJfCAoKFNXb3JkICYgMHgwMGZmKSA8PCA4KTsKLQotCQkJLyogd3JpdGUgdG8gcmVnaXN0ZXIgaW4gcmV2ZXJzZWQgb3JkZXIgKi8KLQkJCUdNX09VVDE2KElvQywgUG9ydCwgKEdNX1NSQ19BRERSXzFMICsgKDIgLSBpKSAqIDQpLCBTV29yZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlHTV9PVVQxNihJb0MsIFBvcnQsIChHTV9TUkNfQUREUl8xTCArIGkgKiA0KSwgU1dvcmQpOwotCQl9Ci0jZWxzZQkJCi0JCUdNX09VVDE2KElvQywgUG9ydCwgKEdNX1NSQ19BRERSXzFMICsgaSAqIDQpLCBTV29yZCk7Ci0jZW5kaWYgLyogV0FfREVWXzE2ICovCi0JCQotCQkvKiB2aXJ0dWFsIGFkZHJlc3M6IHdpbGwgYmUgdXNlZCBmb3IgZGF0YSAqLwotCQlTS19JTjE2KElvQywgKEIyX01BQ18xICsgUG9ydCAqIDggKyBpICogMiksICZTV29yZCk7Ci0KLQkJR01fT1VUMTYoSW9DLCBQb3J0LCAoR01fU1JDX0FERFJfMkwgKyBpICogNCksIFNXb3JkKTsKLQkJCi0JCS8qIHJlc2V0IE11bHRpY2FzdCBmaWx0ZXJpbmcgSGFzaCByZWdpc3RlcnMgMS0zICovCi0JCUdNX09VVDE2KElvQywgUG9ydCwgR01fTUNfQUREUl9IMSArIDQqaSwgMCk7Ci0JfQotCi0JLyogcmVzZXQgTXVsdGljYXN0IGZpbHRlcmluZyBIYXNoIHJlZ2lzdGVyIDQgKi8KLQlHTV9PVVQxNihJb0MsIFBvcnQsIEdNX01DX0FERFJfSDQsIDApOwotCi0JLyogZW5hYmxlIGludGVycnVwdCBtYXNrIGZvciBjb3VudGVyIG92ZXJmbG93cyAqLwotCUdNX09VVDE2KElvQywgUG9ydCwgR01fVFhfSVJRX01TSywgMCk7Ci0JR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9SWF9JUlFfTVNLLCAwKTsKLQlHTV9PVVQxNihJb0MsIFBvcnQsIEdNX1RSX0lSUV9NU0ssIDApOwotCi0jaWYgZGVmaW5lZChTS19ESUFHKSB8fCBkZWZpbmVkKERFQlVHKQotCS8qIHJlYWQgR2VuZXJhbCBQdXJwb3NlIFN0YXR1cyAqLwotCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9HUF9TVEFULCAmU1dvcmQpOwotCQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJNQUMgU3RhdCBSZWcuPTB4JTA0WFxuIiwgU1dvcmQpKTsKLSNlbmRpZiAvKiBTS19ESUFHIHx8IERFQlVHICovCi0KLSNpZmRlZiBTS19ESUFHCi0JY19wcmludCgiTUFDIFN0YXQgUmVnPTB4JTA0WFxuIiwgU1dvcmQpOwotI2VuZGlmIC8qIFNLX0RJQUcgKi8KLQotfQkvKiBTa0dtSW5pdE1hYyAqLwotI2VuZGlmIC8qIFlVS09OICovCi0KLQotI2lmZGVmIEdFTkVTSVMKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htSW5pdER1cE1kKCkgLSBJbml0aWFsaXplIHRoZSBYTUFDcyBEdXBsZXggTW9kZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgWE1BQ3MgRHVwbGV4IE1vZGUuCi0gKglJdCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHN1Y2Nlc3NmdWxseSBmaW5pc2hpbmcKLSAqCXRoZSBBdXRvLW5lZ290aWF0aW9uIFByb2Nlc3MKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi1zdGF0aWMgdm9pZCBTa1htSW5pdER1cE1kKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLQlzd2l0Y2ggKHBBQy0+R0luaS5HUFtQb3J0XS5QTGlua01vZGVTdGF0dXMpIHsKLQljYXNlIFNLX0xNT0RFX1NUQVRfQVVUT0hBTEY6Ci0JY2FzZSBTS19MTU9ERV9TVEFUX0hBTEY6Ci0JCS8qIENvbmZpZ3VyYXRpb24gQWN0aW9ucyBmb3IgSGFsZiBEdXBsZXggTW9kZSAqLwotCQkvKgotCQkgKiBYTV9CVVJTVCA9IGRlZmF1bHQgdmFsdWUuIFdlIGFyZSBwcm9iYWJsZSBub3QgcXVpY2sKLQkJICogCWVub3VnaCBhdCB0aGUgJ1hNQUMnIGJ1cyB0byBidXJzdCA4a0IuCi0JCSAqCVRoZSBYTUFDIHN0b3BzIGJ1cnN0aW5nIGlmIG5vIHRyYW5zbWl0IGZyYW1lcwotCQkgKglhcmUgYXZhaWxhYmxlIG9yIHRoZSBidXJzdCBsaW1pdCBpcyBleGNlZWRlZC4KLQkJICovCi0JCS8qIFhNX1RYX1JUX0xJTSA9IGRlZmF1bHQgdmFsdWUgKDE1KSAqLwotCQkvKiBYTV9UWF9TVElNRSA9IGRlZmF1bHQgdmFsdWUgKDB4ZmYgPSA0MDk2IGJpdCB0aW1lcykgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTS19MTU9ERV9TVEFUX0FVVE9GVUxMOgotCWNhc2UgU0tfTE1PREVfU1RBVF9GVUxMOgotCQkvKiBDb25maWd1cmF0aW9uIEFjdGlvbnMgZm9yIEZ1bGwgRHVwbGV4IE1vZGUgKi8KLQkJLyoKLQkJICogVGhlIGR1cGxleCBtb2RlIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIFBIWSwKLQkJICogdGhlcmVmb3JlIGl0IHNlZW1zIHRvIGJlIHRoYXQgdGhlcmUgaXMgbm90aGluZwotCQkgKiB0byBkbyBoZXJlLgotCQkgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTS19MTU9ERV9TVEFUX1VOS05PV046Ci0JZGVmYXVsdDoKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAwNywgU0tFUlJfSFdJX0UwMDdNU0cpOwotCQlicmVhazsKLQl9Ci19CS8qIFNrWG1Jbml0RHVwTWQgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tYbUluaXRQYXVzZU1kKCkgLSBpbml0aWFsaXplIHRoZSBQYXVzZSBNb2RlIHRvIGJlIHVzZWQgZm9yIHRoaXMgcG9ydAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgUGF1c2UgTW9kZSB3aGljaCBzaG91bGQKLSAqCWJlIHVzZWQgZm9yIHRoaXMgcG9ydC4KLSAqCUl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGZpbmlzaGluZwotICoJdGhlIEF1dG8tbmVnb3RpYXRpb24gUHJvY2VzcwotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrWG1Jbml0UGF1c2VNZCgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCVNLX1UzMgkJRFdvcmQ7Ci0JU0tfVTE2CQlXb3JkOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlYTV9JTjE2KElvQywgUG9ydCwgWE1fTU1VX0NNRCwgJldvcmQpOwotCQotCWlmIChwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPT0gU0tfRkxPV19TVEFUX05PTkUgfHwKLQkJcFBydC0+UEZsb3dDdHJsU3RhdHVzID09IFNLX0ZMT1dfU1RBVF9MT0NfU0VORCkgewotCi0JCS8qIERpc2FibGUgUGF1c2UgRnJhbWUgUmVjZXB0aW9uICovCi0JCVdvcmQgfD0gWE1fTU1VX0lHTl9QRjsKLQl9Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIGVuYWJsaW5nIHBhdXNlIGZyYW1lIHJlY2VwdGlvbiBpcyByZXF1aXJlZCBmb3IgMTAwMEJUCi0JCSAqIGJlY2F1c2UgdGhlIFhNQUMgaXMgbm90IHJlc2V0IGlmIHRoZSBsaW5rIGlzIGdvaW5nIGRvd24KLQkJICovCi0JCS8qIEVuYWJsZSBQYXVzZSBGcmFtZSBSZWNlcHRpb24gKi8KLQkJV29yZCAmPSB+WE1fTU1VX0lHTl9QRjsKLQl9CQotCQotCVhNX09VVDE2KElvQywgUG9ydCwgWE1fTU1VX0NNRCwgV29yZCk7Ci0KLQlYTV9JTjMyKElvQywgUG9ydCwgWE1fTU9ERSwgJkRXb3JkKTsKLQotCWlmIChwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPT0gU0tfRkxPV19TVEFUX1NZTU1FVFJJQyB8fAotCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPT0gU0tfRkxPV19TVEFUX0xPQ19TRU5EKSB7Ci0KLQkJLyoKLQkJICogQ29uZmlndXJlIFBhdXNlIEZyYW1lIEdlbmVyYXRpb24KLQkJICogVXNlIGludGVybmFsIGFuZCBleHRlcm5hbCBQYXVzZSBGcmFtZSBHZW5lcmF0aW9uLgotCQkgKiBTZW5kaW5nIHBhdXNlIGZyYW1lcyBpcyBlZGdlIHRyaWdnZXJlZC4KLQkJICogU2VuZCBhIFBhdXNlIGZyYW1lIHdpdGggdGhlIG1heGltdW0gcGF1c2UgdGltZSBpZgotCQkgKiBpbnRlcm5hbCBvZGVyIGV4dGVybmFsIEZJRk8gZnVsbCBjb25kaXRpb24gb2NjdXJzLgotCQkgKiBTZW5kIGEgemVybyBwYXVzZSB0aW1lIGZyYW1lIHRvIHJlLXN0YXJ0IHRyYW5zbWlzc2lvbi4KLQkJICovCi0KLQkJLyogWE1fUEFVU0VfREEgPSAnMDEwMDAwQzI4MDAxJyAoZGVmYXVsdCkgKi8KLQotCQkvKiBYTV9NQUNfUFRJTUUgPSAweGZmZmYgKG1heGltdW0pICovCi0JCS8qIHJlbWVtYmVyIHRoaXMgdmFsdWUgaXMgZGVmaW5lZCBpbiBiaWcgZW5kaWFuICghKSAqLwotCQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX01BQ19QVElNRSwgMHhmZmZmKTsKLQotCQkvKiBTZXQgUGF1c2UgTW9kZSBpbiBNb2RlIFJlZ2lzdGVyICovCi0JCURXb3JkIHw9IFhNX1BBVVNFX01PREU7Ci0KLQkJLyogU2V0IFBhdXNlIE1vZGUgaW4gTUFDIFJ4IEZJRk8gKi8KLQkJU0tfT1VUMTYoSW9DLCBNUl9BRERSKFBvcnQsIFJYX01GRl9DVFJMMSksIE1GRl9FTkFfUEFVU0UpOwotCX0KLQllbHNlIHsKLQkJLyoKLQkJICogZGlzYWJsZSBwYXVzZSBmcmFtZSBnZW5lcmF0aW9uIGlzIHJlcXVpcmVkIGZvciAxMDAwQlQKLQkJICogYmVjYXVzZSB0aGUgWE1BQyBpcyBub3QgcmVzZXQgaWYgdGhlIGxpbmsgaXMgZ29pbmcgZG93bgotCQkgKi8KLQkJLyogRGlzYWJsZSBQYXVzZSBNb2RlIGluIE1vZGUgUmVnaXN0ZXIgKi8KLQkJRFdvcmQgJj0gflhNX1BBVVNFX01PREU7Ci0KLQkJLyogRGlzYWJsZSBQYXVzZSBNb2RlIGluIE1BQyBSeCBGSUZPICovCi0JCVNLX09VVDE2KElvQywgTVJfQUREUihQb3J0LCBSWF9NRkZfQ1RSTDEpLCBNRkZfRElTX1BBVVNFKTsKLQl9Ci0JCi0JWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBEV29yZCk7Ci19CS8qIFNrWG1Jbml0UGF1c2VNZCovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrWG1Jbml0UGh5WG1hYygpIC0gSW5pdGlhbGl6ZSB0aGUgWE1BQyBQaHkgcmVnaXN0ZXJzCi0gKgotICogRGVzY3JpcHRpb246CWluaXRpYWxpemVzIGFsbCB0aGUgWE1BQ3MgUGh5IHJlZ2lzdGVycwotICoKLSAqIE5vdGU6Ci0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tYbUluaXRQaHlYbWFjKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX0JPT0wJRG9Mb29wKQkJLyogU2hvdWxkIGEgUGh5IExvb3BCYWNrIGJlIHNldC11cD8gKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0JU0tfVTE2CQlDdHJsOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0JQ3RybCA9IDA7Ci0JCi0JLyogQXV0by1uZWdvdGlhdGlvbiA/ICovCi0JaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9IQUxGIHx8IHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiSW5pdFBoeVhtYWM6IG5vIGF1dG8tbmVnb3RpYXRpb24gUG9ydCAlZFxuIiwgUG9ydCkpOwotCQkvKiBTZXQgRHVwbGV4TW9kZSBpbiBDb25maWcgcmVnaXN0ZXIgKi8KLQkJaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCQlDdHJsIHw9IFBIWV9DVF9EVVBfTUQ7Ci0JCX0KLQotCQkvKgotCQkgKiBEbyBOT1QgZW5hYmxlIEF1dG8tbmVnb3RpYXRpb24gaGVyZS4gVGhpcyB3b3VsZCBob2xkCi0JCSAqIHRoZSBsaW5rIGRvd24gYmVjYXVzZSBubyBJRExFcyBhcmUgdHJhbnNtaXR0ZWQKLQkJICovCi0JfQotCWVsc2UgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkluaXRQaHlYbWFjOiB3aXRoIGF1dG8tbmVnb3RpYXRpb24gUG9ydCAlZFxuIiwgUG9ydCkpOwotCQkvKiBTZXQgQXV0by1uZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50ICovCi0KLQkJLyogU2V0IEZ1bGwvaGFsZiBkdXBsZXggY2FwYWJpbGl0aWVzICovCi0JCXN3aXRjaCAocFBydC0+UExpbmtNb2RlKSB7Ci0JCWNhc2UgU0tfTE1PREVfQVVUT0hBTEY6Ci0JCQlDdHJsIHw9IFBIWV9YX0FOX0hEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfTE1PREVfQVVUT0ZVTEw6Ci0JCQlDdHJsIHw9IFBIWV9YX0FOX0ZEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfTE1PREVfQVVUT0JPVEg6Ci0JCQlDdHJsIHw9IFBIWV9YX0FOX0ZEIHwgUEhZX1hfQU5fSEQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX0hXSV9FMDE1LAotCQkJCVNLRVJSX0hXSV9FMDE1TVNHKTsKLQkJfQotCi0JCS8qIFNldCBGbG93LWNvbnRyb2wgY2FwYWJpbGl0aWVzICovCi0JCXN3aXRjaCAocFBydC0+UEZsb3dDdHJsTW9kZSkgewotCQljYXNlIFNLX0ZMT1dfTU9ERV9OT05FOgotCQkJQ3RybCB8PSBQSFlfWF9QX05PX1BBVVNFOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfRkxPV19NT0RFX0xPQ19TRU5EOgotCQkJQ3RybCB8PSBQSFlfWF9QX0FTWU1fTUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTS19GTE9XX01PREVfU1lNTUVUUklDOgotCQkJQ3RybCB8PSBQSFlfWF9QX1NZTV9NRDsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNOgotCQkJQ3RybCB8PSBQSFlfWF9QX0JPVEhfTUQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX0hXSV9FMDE2LAotCQkJCVNLRVJSX0hXSV9FMDE2TVNHKTsKLQkJfQotCi0JCS8qIFdyaXRlIEF1dG9OZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAqLwotCQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9YTUFDX0FVTkVfQURWLCBDdHJsKTsKLQotCQkvKiBSZXN0YXJ0IEF1dG8tbmVnb3RpYXRpb24gKi8KLQkJQ3RybCA9IFBIWV9DVF9BTkUgfCBQSFlfQ1RfUkVfQ0ZHOwotCX0KLQotCWlmIChEb0xvb3ApIHsKLQkJLyogU2V0IHRoZSBQaHkgTG9vcGJhY2sgYml0LCB0b28gKi8KLQkJQ3RybCB8PSBQSFlfQ1RfTE9PUDsKLQl9Ci0KLQkvKiBXcml0ZSB0byB0aGUgUGh5IGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9YTUFDX0NUUkwsIEN0cmwpOwotfQkvKiBTa1htSW5pdFBoeVhtYWMgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tYbUluaXRQaHlCY29tKCkgLSBJbml0aWFsaXplIHRoZSBCcm9hZGNvbSBQaHkgcmVnaXN0ZXJzCi0gKgotICogRGVzY3JpcHRpb246CWluaXRpYWxpemVzIGFsbCB0aGUgQnJvYWRjb20gUGh5IHJlZ2lzdGVycwotICoKLSAqIE5vdGU6Ci0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tYbUluaXRQaHlCY29tKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX0JPT0wJRG9Mb29wKQkJLyogU2hvdWxkIGEgUGh5IExvb3BCYWNrIGJlIHNldC11cD8gKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0JU0tfVTE2CQlDdHJsMTsKLQlTS19VMTYJCUN0cmwyOwotCVNLX1UxNgkJQ3RybDM7Ci0JU0tfVTE2CQlDdHJsNDsKLQlTS19VMTYJCUN0cmw1OwotCi0JQ3RybDEgPSBQSFlfQ1RfU1AxMDAwOwotCUN0cmwyID0gMDsKLQlDdHJsMyA9IFBIWV9TRUxfVFlQRTsKLQlDdHJsNCA9IFBIWV9CX1BFQ19FTl9MVFI7Ci0JQ3RybDUgPSBQSFlfQl9BQ19UWF9UU1Q7Ci0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotCS8qIG1hbnVhbGx5IE1hc3Rlci9TbGF2ZSA/ICovCi0JaWYgKHBQcnQtPlBNU01vZGUgIT0gU0tfTVNfTU9ERV9BVVRPKSB7Ci0JCUN0cmwyIHw9IFBIWV9CXzEwMDBDX01TRTsKLQkJCi0JCWlmIChwUHJ0LT5QTVNNb2RlID09IFNLX01TX01PREVfTUFTVEVSKSB7Ci0JCQlDdHJsMiB8PSBQSFlfQl8xMDAwQ19NU0M7Ci0JCX0KLQl9Ci0JLyogQXV0by1uZWdvdGlhdGlvbiA/ICovCi0JaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9IQUxGIHx8IHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiSW5pdFBoeUJjb206IG5vIGF1dG8tbmVnb3RpYXRpb24gUG9ydCAlZFxuIiwgUG9ydCkpOwotCQkvKiBTZXQgRHVwbGV4TW9kZSBpbiBDb25maWcgcmVnaXN0ZXIgKi8KLQkJaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCQlDdHJsMSB8PSBQSFlfQ1RfRFVQX01EOwotCQl9Ci0KLQkJLyogRGV0ZXJtaW5lIE1hc3Rlci9TbGF2ZSBtYW51YWxseSBpZiBub3QgYWxyZWFkeSBkb25lICovCi0JCWlmIChwUHJ0LT5QTVNNb2RlID09IFNLX01TX01PREVfQVVUTykgewotCQkJQ3RybDIgfD0gUEhZX0JfMTAwMENfTVNFOwkvKiBzZXQgaXQgdG8gU2xhdmUgKi8KLQkJfQotCi0JCS8qCi0JCSAqIERvIE5PVCBlbmFibGUgQXV0by1uZWdvdGlhdGlvbiBoZXJlLiBUaGlzIHdvdWxkIGhvbGQKLQkJICogdGhlIGxpbmsgZG93biBiZWNhdXNlIG5vIElETEVTIGFyZSB0cmFuc21pdHRlZAotCQkgKi8KLQl9Ci0JZWxzZSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiSW5pdFBoeUJjb206IHdpdGggYXV0by1uZWdvdGlhdGlvbiBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCS8qIFNldCBBdXRvLW5lZ290aWF0aW9uIGFkdmVydGlzZW1lbnQgKi8KLQotCQkvKgotCQkgKiBXb3JrYXJvdW5kIEJDT00gRXJyYXRhICMxIGZvciB0aGUgQzUgdHlwZS4KLQkJICogMTAwMEJhc2UtVCBMaW5rIEFjcXVpc2l0aW9uIEZhaWx1cmUgaW4gU2xhdmUgTW9kZQotCQkgKiBTZXQgUmVwZWF0ZXIvRFRFIGJpdCAxMCBvZiB0aGUgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyCi0JCSAqLwotCQlDdHJsMiB8PSBQSFlfQl8xMDAwQ19SRDsKLQkJCi0JCSAvKiBTZXQgRnVsbC9oYWxmIGR1cGxleCBjYXBhYmlsaXRpZXMgKi8KLQkJc3dpdGNoIChwUHJ0LT5QTGlua01vZGUpIHsKLQkJY2FzZSBTS19MTU9ERV9BVVRPSEFMRjoKLQkJCUN0cmwyIHw9IFBIWV9CXzEwMDBDX0FIRDsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0xNT0RFX0FVVE9GVUxMOgotCQkJQ3RybDIgfD0gUEhZX0JfMTAwMENfQUZEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfTE1PREVfQVVUT0JPVEg6Ci0JCQlDdHJsMiB8PSBQSFlfQl8xMDAwQ19BRkQgfCBQSFlfQl8xMDAwQ19BSEQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX0hXSV9FMDE1LAotCQkJCVNLRVJSX0hXSV9FMDE1TVNHKTsKLQkJfQotCi0JCS8qIFNldCBGbG93LWNvbnRyb2wgY2FwYWJpbGl0aWVzICovCi0JCXN3aXRjaCAocFBydC0+UEZsb3dDdHJsTW9kZSkgewotCQljYXNlIFNLX0ZMT1dfTU9ERV9OT05FOgotCQkJQ3RybDMgfD0gUEhZX0JfUF9OT19QQVVTRTsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0ZMT1dfTU9ERV9MT0NfU0VORDoKLQkJCUN0cmwzIHw9IFBIWV9CX1BfQVNZTV9NRDsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0ZMT1dfTU9ERV9TWU1NRVRSSUM6Ci0JCQlDdHJsMyB8PSBQSFlfQl9QX1NZTV9NRDsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNOgotCQkJQ3RybDMgfD0gUEhZX0JfUF9CT1RIX01EOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1cgfCBTS19FUlJDTF9JTklULCBTS0VSUl9IV0lfRTAxNiwKLQkJCQlTS0VSUl9IV0lfRTAxNk1TRyk7Ci0JCX0KLQotCQkvKiBSZXN0YXJ0IEF1dG8tbmVnb3RpYXRpb24gKi8KLQkJQ3RybDEgfD0gUEhZX0NUX0FORSB8IFBIWV9DVF9SRV9DRkc7Ci0JfQotCQotCS8qIEluaXRpYWxpemUgTEVEIHJlZ2lzdGVyIGhlcmU/ICovCi0JLyogTm8uIFBsZWFzZSBkbyBpdCBpbiBTa0RnWG1pdExlZCgpIChpZiByZXF1aXJlZCkgYW5kIHN3YXAKLQkgICBpbml0IG9yZGVyIG9mIExFRHMgYW5kIFhNQUMuIChNQWwpICovCi0JCi0JLyogV3JpdGUgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyICovCi0JU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV8xMDAwVF9DVFJMLCBDdHJsMik7Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNldCAxMDAwQi1UIEN0cmwgUmVnPTB4JTA0WFxuIiwgQ3RybDIpKTsKLQkKLQkvKiBXcml0ZSBBdXRvTmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKi8KLQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVTkVfQURWLCBDdHJsMyk7Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNldCBBdXRvLU5lZy5BZHYuUmVnPTB4JTA0WFxuIiwgQ3RybDMpKTsKLQkKLQlpZiAoRG9Mb29wKSB7Ci0JCS8qIFNldCB0aGUgUGh5IExvb3BiYWNrIGJpdCwgdG9vICovCi0JCUN0cmwxIHw9IFBIWV9DVF9MT09QOwotCX0KLQotCWlmIChwQUMtPkdJbmkuR0lQb3J0VXNhZ2UgPT0gU0tfSlVNQk9fTElOSykgewotCQkvKiBjb25maWd1cmUgRklGTyB0byBoaWdoIGxhdGVuY3kgZm9yIHRyYW5zbWlzc2lvbiBvZiBleHQuIHBhY2tldHMgKi8KLQkJQ3RybDQgfD0gUEhZX0JfUEVDX0hJR0hfTEE7Ci0KLQkJLyogY29uZmlndXJlIHJlY2VwdGlvbiBvZiBleHRlbmRlZCBwYWNrZXRzICovCi0JCUN0cmw1IHw9IFBIWV9CX0FDX0xPTkdfUEFDSzsKLQotCQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVWF9DVFJMLCBDdHJsNSk7Ci0JfQotCi0JLyogQ29uZmlndXJlIExFRCBUcmFmZmljIE1vZGUgYW5kIEp1bWJvIEZyYW1lIHVzYWdlIGlmIHNwZWNpZmllZCAqLwotCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fUF9FWFRfQ1RSTCwgQ3RybDQpOwotCQotCS8qIFdyaXRlIHRvIHRoZSBQaHkgY29udHJvbCByZWdpc3RlciAqLwotCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fQ1RSTCwgQ3RybDEpOwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQSFkgQ29udHJvbCBSZWc9MHglMDRYXG4iLCBDdHJsMSkpOwotfQkvKiBTa1htSW5pdFBoeUJjb20gKi8KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0KLSNpZmRlZiBZVUtPTgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR21Jbml0UGh5TWFydigpIC0gSW5pdGlhbGl6ZSB0aGUgTWFydmVsbCBQaHkgcmVnaXN0ZXJzCi0gKgotICogRGVzY3JpcHRpb246CWluaXRpYWxpemVzIGFsbCB0aGUgTWFydmVsbCBQaHkgcmVnaXN0ZXJzCi0gKgotICogTm90ZToKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi1zdGF0aWMgdm9pZCBTa0dtSW5pdFBoeU1hcnYoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfQk9PTAlEb0xvb3ApCQkvKiBTaG91bGQgYSBQaHkgTG9vcEJhY2sgYmUgc2V0LXVwPyAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlTS19VMTYJCVBoeUN0cmw7Ci0JU0tfVTE2CQlDMTAwMEJhc2VUOwotCVNLX1UxNgkJQXV0b05lZ0FkdjsKLQlTS19VMTYJCUV4dFBoeUN0cmw7Ci0JU0tfVTE2CQlMZWRDdHJsOwotCVNLX0JPT0wJCUF1dG9OZWc7Ci0jaWYgZGVmaW5lZChTS19ESUFHKSB8fCBkZWZpbmVkKERFQlVHKQotCVNLX1UxNgkJUGh5U3RhdDsKLQlTS19VMTYJCVBoeVN0YXQxOwotCVNLX1UxNgkJUGh5U3BlY1N0YXQ7Ci0jZW5kaWYgLyogU0tfRElBRyB8fCBERUJVRyAqLwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQkvKiBBdXRvLW5lZ290aWF0aW9uID8gKi8KLQlpZiAocFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0hBTEYgfHwgcFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0ZVTEwpIHsKLQkJQXV0b05lZyA9IFNLX0ZBTFNFOwotCX0KLQllbHNlIHsKLQkJQXV0b05lZyA9IFNLX1RSVUU7Ci0JfQotCQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJJbml0UGh5TWFydjogUG9ydCAlZCwgYXV0by1uZWdvdGlhdGlvbiAlc1xuIiwKLQkJIFBvcnQsIEF1dG9OZWcgPyAiT04iIDogIk9GRiIpKTsKLQotI2lmZGVmIFZDUFUKLQlWQ1BVcHJpbnRmKDAsICJTa0dtSW5pdFBoeU1hcnYoKSwgUG9ydD0ldSwgRG9Mb29wPSV1XG4iLAotCQlQb3J0LCBEb0xvb3ApOwotI2Vsc2UgLyogVkNQVSAqLwotCWlmIChEb0xvb3ApIHsKLQkJLyogU2V0ICdNQUMgUG93ZXIgdXAnLWJpdCwgc2V0IE1hbnVhbCBNREkgY29uZmlndXJhdGlvbiAqLwotCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLAotCQkJUEhZX01fUENfTUFDX1BPV19VUCk7Ci0JfQotCWVsc2UgaWYgKEF1dG9OZWcgJiYgcFBydC0+UExpbmtTcGVlZCA9PSBTS19MU1BFRURfQVVUTykgewotCQkvKiBSZWFkIEV4dC4gUEhZIFNwZWNpZmljIENvbnRyb2wgKi8KLQkJU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0VYVF9DVFJMLCAmRXh0UGh5Q3RybCk7Ci0JCQotCQlFeHRQaHlDdHJsICY9IH4oUEhZX01fRUNfTV9EU0NfTVNLIHwgUEhZX01fRUNfU19EU0NfTVNLIHwKLQkJCVBIWV9NX0VDX01BQ19TX01TSyk7Ci0JCQotCQlFeHRQaHlDdHJsIHw9IFBIWV9NX0VDX01BQ19TKE1BQ19UWF9DTEtfMjVfTUhaKSB8Ci0JCQlQSFlfTV9FQ19NX0RTQygwKSB8IFBIWV9NX0VDX1NfRFNDKDEpOwotCQotCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0VYVF9DVFJMLCBFeHRQaHlDdHJsKTsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTZXQgRXh0LiBQSFkgQ3RybD0weCUwNFhcbiIsIEV4dFBoeUN0cmwpKTsKLQl9Ci0KLQkvKiBSZWFkIFBIWSBDb250cm9sICovCi0JU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0NUUkwsICZQaHlDdHJsKTsKLQotCWlmICghQXV0b05lZykgewotCQkvKiBEaXNhYmxlIEF1dG8tbmVnb3RpYXRpb24gKi8KLQkJUGh5Q3RybCAmPSB+UEhZX0NUX0FORTsKLQl9Ci0KLQlQaHlDdHJsIHw9IFBIWV9DVF9SRVNFVDsKLQkvKiBBc3NlcnQgc29mdHdhcmUgcmVzZXQgKi8KLQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0NUUkwsIFBoeUN0cmwpOwotI2VuZGlmIC8qIFZDUFUgKi8KLQotCVBoeUN0cmwgPSAwIC8qIFBIWV9DVF9DT0xfVFNUICovOwotCUMxMDAwQmFzZVQgPSAwOwotCUF1dG9OZWdBZHYgPSBQSFlfU0VMX1RZUEU7Ci0KLQkvKiBtYW51YWxseSBNYXN0ZXIvU2xhdmUgPyAqLwotCWlmIChwUHJ0LT5QTVNNb2RlICE9IFNLX01TX01PREVfQVVUTykgewotCQkvKiBlbmFibGUgTWFudWFsIE1hc3Rlci9TbGF2ZSAqLwotCQlDMTAwMEJhc2VUIHw9IFBIWV9NXzEwMDBDX01TRTsKLQkJCi0JCWlmIChwUHJ0LT5QTVNNb2RlID09IFNLX01TX01PREVfTUFTVEVSKSB7Ci0JCQlDMTAwMEJhc2VUIHw9IFBIWV9NXzEwMDBDX01TQzsJLyogc2V0IGl0IHRvIE1hc3RlciAqLwotCQl9Ci0JfQotCQotCS8qIEF1dG8tbmVnb3RpYXRpb24gPyAqLwotCWlmICghQXV0b05lZykgewotCQkKLQkJaWYgKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9GVUxMKSB7Ci0JCQkvKiBTZXQgRnVsbCBEdXBsZXggTW9kZSAqLwotCQkJUGh5Q3RybCB8PSBQSFlfQ1RfRFVQX01EOwotCQl9Ci0KLQkJLyogU2V0IE1hc3Rlci9TbGF2ZSBtYW51YWxseSBpZiBub3QgYWxyZWFkeSBkb25lICovCi0JCWlmIChwUHJ0LT5QTVNNb2RlID09IFNLX01TX01PREVfQVVUTykgewotCQkJQzEwMDBCYXNlVCB8PSBQSFlfTV8xMDAwQ19NU0U7CS8qIHNldCBpdCB0byBTbGF2ZSAqLwotCQl9Ci0KLQkJLyogU2V0IFNwZWVkICovCi0JCXN3aXRjaCAocFBydC0+UExpbmtTcGVlZCkgewotCQljYXNlIFNLX0xTUEVFRF9BVVRPOgotCQljYXNlIFNLX0xTUEVFRF8xMDAwTUJQUzoKLQkJCVBoeUN0cmwgfD0gUEhZX0NUX1NQMTAwMDsKLQkJCWJyZWFrOwotCQljYXNlIFNLX0xTUEVFRF8xMDBNQlBTOgotCQkJUGh5Q3RybCB8PSBQSFlfQ1RfU1AxMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTS19MU1BFRURfMTBNQlBTOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1cgfCBTS19FUlJDTF9JTklULCBTS0VSUl9IV0lfRTAxOSwKLQkJCQlTS0VSUl9IV0lfRTAxOU1TRyk7Ci0JCX0KLQotCQlpZiAoIURvTG9vcCkgewotCQkJUGh5Q3RybCB8PSBQSFlfQ1RfUkVTRVQ7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCS8qIFNldCBBdXRvLW5lZ290aWF0aW9uIGFkdmVydGlzZW1lbnQgKi8KLQkJCi0JCWlmIChwQUMtPkdJbmkuR0lDb3BwZXJUeXBlKSB7Ci0JCQkvKiBTZXQgU3BlZWQgY2FwYWJpbGl0aWVzICovCi0JCQlzd2l0Y2ggKHBQcnQtPlBMaW5rU3BlZWQpIHsKLQkJCWNhc2UgU0tfTFNQRUVEX0FVVE86Ci0JCQkJQzEwMDBCYXNlVCB8PSBQSFlfTV8xMDAwQ19BSEQgfCBQSFlfTV8xMDAwQ19BRkQ7Ci0JCQkJQXV0b05lZ0FkdiB8PSBQSFlfTV9BTl8xMDBfRkQgfCBQSFlfTV9BTl8xMDBfSEQgfAotCQkJCQlQSFlfTV9BTl8xMF9GRCB8IFBIWV9NX0FOXzEwX0hEOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTS19MU1BFRURfMTAwME1CUFM6Ci0JCQkJQzEwMDBCYXNlVCB8PSBQSFlfTV8xMDAwQ19BSEQgfCBQSFlfTV8xMDAwQ19BRkQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNLX0xTUEVFRF8xMDBNQlBTOgotCQkJCUF1dG9OZWdBZHYgfD0gUEhZX01fQU5fMTAwX0ZEIHwgUEhZX01fQU5fMTAwX0hEIHwKLQkJCQkJLyogYWR2ZXJ0aXNlIDEwQmFzZS1UIGFsc28gKi8KLQkJCQkJUEhZX01fQU5fMTBfRkQgfCBQSFlfTV9BTl8xMF9IRDsKLQkJCQlicmVhazsKLQkJCWNhc2UgU0tfTFNQRUVEXzEwTUJQUzoKLQkJCQlBdXRvTmVnQWR2IHw9IFBIWV9NX0FOXzEwX0ZEIHwgUEhZX01fQU5fMTBfSEQ7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX0hXSV9FMDE5LAotCQkJCQlTS0VSUl9IV0lfRTAxOU1TRyk7Ci0JCQl9Ci0KLQkJCS8qIFNldCBGdWxsL2hhbGYgZHVwbGV4IGNhcGFiaWxpdGllcyAqLwotCQkJc3dpdGNoIChwUHJ0LT5QTGlua01vZGUpIHsKLQkJCWNhc2UgU0tfTE1PREVfQVVUT0hBTEY6Ci0JCQkJQzEwMDBCYXNlVCAmPSB+UEhZX01fMTAwMENfQUZEOwotCQkJCUF1dG9OZWdBZHYgJj0gfihQSFlfTV9BTl8xMDBfRkQgfCBQSFlfTV9BTl8xMF9GRCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNLX0xNT0RFX0FVVE9GVUxMOgotCQkJCUMxMDAwQmFzZVQgJj0gflBIWV9NXzEwMDBDX0FIRDsKLQkJCQlBdXRvTmVnQWR2ICY9IH4oUEhZX01fQU5fMTAwX0hEIHwgUEhZX01fQU5fMTBfSEQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTS19MTU9ERV9BVVRPQk9USDoKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfSFdJX0UwMTUsCi0JCQkJCVNLRVJSX0hXSV9FMDE1TVNHKTsKLQkJCX0KLQkJCQotCQkJLyogU2V0IEZsb3ctY29udHJvbCBjYXBhYmlsaXRpZXMgKi8KLQkJCXN3aXRjaCAocFBydC0+UEZsb3dDdHJsTW9kZSkgewotCQkJY2FzZSBTS19GTE9XX01PREVfTk9ORToKLQkJCQlBdXRvTmVnQWR2IHw9IFBIWV9CX1BfTk9fUEFVU0U7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNLX0ZMT1dfTU9ERV9MT0NfU0VORDoKLQkJCQlBdXRvTmVnQWR2IHw9IFBIWV9CX1BfQVNZTV9NRDsKLQkJCQlicmVhazsKLQkJCWNhc2UgU0tfRkxPV19NT0RFX1NZTU1FVFJJQzoKLQkJCQlBdXRvTmVnQWR2IHw9IFBIWV9CX1BfU1lNX01EOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTS19GTE9XX01PREVfU1lNX09SX1JFTToKLQkJCQlBdXRvTmVnQWR2IHw9IFBIWV9CX1BfQk9USF9NRDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfSFdJX0UwMTYsCi0JCQkJCVNLRVJSX0hXSV9FMDE2TVNHKTsKLQkJCX0KLQkJfQotCQllbHNlIHsJLyogc3BlY2lhbCBkZWZpbmVzIGZvciBGSUJFUiAoODhFMTAxMVMgb25seSkgKi8KLQkJCQotCQkJLyogU2V0IEZ1bGwvaGFsZiBkdXBsZXggY2FwYWJpbGl0aWVzICovCi0JCQlzd2l0Y2ggKHBQcnQtPlBMaW5rTW9kZSkgewotCQkJY2FzZSBTS19MTU9ERV9BVVRPSEFMRjoKLQkJCQlBdXRvTmVnQWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FIRDsKLQkJCQlicmVhazsKLQkJCWNhc2UgU0tfTE1PREVfQVVUT0ZVTEw6Ci0JCQkJQXV0b05lZ0FkdiB8PSBQSFlfTV9BTl8xMDAwWF9BRkQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNLX0xNT0RFX0FVVE9CT1RIOgotCQkJCUF1dG9OZWdBZHYgfD0gUEhZX01fQU5fMTAwMFhfQUhEIHwgUEhZX01fQU5fMTAwMFhfQUZEOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfU1cgfCBTS19FUlJDTF9JTklULCBTS0VSUl9IV0lfRTAxNSwKLQkJCQkJU0tFUlJfSFdJX0UwMTVNU0cpOwotCQkJfQotCQkJCi0JCQkvKiBTZXQgRmxvdy1jb250cm9sIGNhcGFiaWxpdGllcyAqLwotCQkJc3dpdGNoIChwUHJ0LT5QRmxvd0N0cmxNb2RlKSB7Ci0JCQljYXNlIFNLX0ZMT1dfTU9ERV9OT05FOgotCQkJCUF1dG9OZWdBZHYgfD0gUEhZX01fUF9OT19QQVVTRV9YOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTS19GTE9XX01PREVfTE9DX1NFTkQ6Ci0JCQkJQXV0b05lZ0FkdiB8PSBQSFlfTV9QX0FTWU1fTURfWDsKLQkJCQlicmVhazsKLQkJCWNhc2UgU0tfRkxPV19NT0RFX1NZTU1FVFJJQzoKLQkJCQlBdXRvTmVnQWR2IHw9IFBIWV9NX1BfU1lNX01EX1g7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNOgotCQkJCUF1dG9OZWdBZHYgfD0gUEhZX01fUF9CT1RIX01EX1g7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX0hXSV9FMDE2LAotCQkJCQlTS0VSUl9IV0lfRTAxNk1TRyk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIURvTG9vcCkgewotCQkJLyogUmVzdGFydCBBdXRvLW5lZ290aWF0aW9uICovCi0JCQlQaHlDdHJsIHw9IFBIWV9DVF9BTkUgfCBQSFlfQ1RfUkVfQ0ZHOwotCQl9Ci0JfQotCQotI2lmZGVmIFZDUFUKLQkvKgotCSAqIEUtbWFpbCBmcm9tIEd1IExpbiAoMDgtMDMtMjAwMik6Ci0JICovCi0JCi0JLyogUHJvZ3JhbSBQSFkgcmVnaXN0ZXIgMzAgYXMgMTYnaDA3MDggZm9yIHNpbXVsYXRpb24gc3BlZWQgdXAgKi8KLQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIDMwLCAweDA3MDAgLyogMHgwNzA4ICovKTsKLQkKLQlWQ3B1V2FpdCgyMDAwKTsKLQotI2Vsc2UgLyogVkNQVSAqLwotCQotCS8qIFdyaXRlIDEwMDBCYXNlLVQgQ29udHJvbCBSZWdpc3RlciAqLwotCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfMTAwMFRfQ1RSTCwgQzEwMDBCYXNlVCk7Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNldCAxMDAwQi1UIEN0cmwgPTB4JTA0WFxuIiwgQzEwMDBCYXNlVCkpOwotCQotCS8qIFdyaXRlIEF1dG9OZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAqLwotCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQVVORV9BRFYsIEF1dG9OZWdBZHYpOwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJTZXQgQXV0by1OZWcuQWR2Lj0weCUwNFhcbiIsIEF1dG9OZWdBZHYpKTsKLSNlbmRpZiAvKiBWQ1BVICovCi0JCi0JaWYgKERvTG9vcCkgewotCQkvKiBTZXQgdGhlIFBIWSBMb29wYmFjayBiaXQgKi8KLQkJUGh5Q3RybCB8PSBQSFlfQ1RfTE9PUDsKLQotI2lmZGVmIFhYWAotCQkvKiBQcm9ncmFtIFBIWSByZWdpc3RlciAxNiBhcyAxNidoMDQwMCB0byBmb3JjZSBsaW5rIGdvb2QgKi8KLQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgUEhZX01fUENfRkxfR09PRCk7Ci0jZW5kaWYgLyogWFhYICovCi0KLSNpZm5kZWYgVkNQVQotCQlpZiAocFBydC0+UExpbmtTcGVlZCAhPSBTS19MU1BFRURfQVVUTykgewotCQkJLyogV3JpdGUgRXh0LiBQSFkgU3BlY2lmaWMgQ29udHJvbCAqLwotCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9FWFRfQ1RSTCwKLQkJCQkoU0tfVTE2KSgocFBydC0+UExpbmtTcGVlZCArIDIpIDw8IDQpKTsKLQkJfQotI2VuZGlmIC8qIFZDUFUgKi8KLQl9Ci0jaWZkZWYgVEVTVF9PTkxZCi0JZWxzZSBpZiAocFBydC0+UExpbmtTcGVlZCA9PSBTS19MU1BFRURfMTBNQlBTKSB7Ci0JCQkvKiBXcml0ZSBQSFkgU3BlY2lmaWMgQ29udHJvbCAqLwotCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwKLQkJCQlQSFlfTV9QQ19FTl9ERVRfTVNLKTsKLQl9Ci0jZW5kaWYKLQotCS8qIFdyaXRlIHRvIHRoZSBQSFkgQ29udHJvbCByZWdpc3RlciAqLwotCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQ1RSTCwgUGh5Q3RybCk7Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIlNldCBQSFkgQ3RybCBSZWcuPTB4JTA0WFxuIiwgUGh5Q3RybCkpOwotCi0jaWZkZWYgVkNQVQotCVZDcHVXYWl0KDIwMDApOwotI2Vsc2UKLQotCUxlZEN0cmwgPSBQSFlfTV9MRURfUFVMU19EVVIoUFVMU18xNzBNUykgfCBQSFlfTV9MRURfQkxJTktfUlQoQkxJTktfODRNUyk7Ci0KLQlpZiAoKHBBQy0+R0luaS5HSUxlZEJsaW5rQ3RybCAmIFNLX0FDVF9MRURfQkxJTkspICE9IDApIHsKLQkJTGVkQ3RybCB8PSBQSFlfTV9MRURDX1JYX0NUUkwgfCBQSFlfTV9MRURDX1RYX0NUUkw7Ci0JfQotCi0JaWYgKChwQUMtPkdJbmkuR0lMZWRCbGlua0N0cmwgJiBTS19EVVBfTEVEX05PUk1BTCkgIT0gMCkgewotCQlMZWRDdHJsIHw9IFBIWV9NX0xFRENfRFBfQ1RSTDsKLQl9Ci0JCi0JU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9MRURfQ1RSTCwgTGVkQ3RybCk7Ci0KLQlpZiAoKHBBQy0+R0luaS5HSUxlZEJsaW5rQ3RybCAmIFNLX0xFRF9MSU5LMTAwX09OKSAhPSAwKSB7Ci0JCS8qIG9ubHkgaW4gZm9yY2VkIDEwMCBNYnBzIG1vZGUgKi8KLQkJaWYgKCFBdXRvTmVnICYmIHBQcnQtPlBMaW5rU3BlZWQgPT0gU0tfTFNQRUVEXzEwME1CUFMpIHsKLQotCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9MRURfT1ZFUiwKLQkJCQlQSFlfTV9MRURfTU9fMTAwKE1PX0xFRF9PTikpOwotCQl9Ci0JfQotCi0jaWZkZWYgU0tfRElBRwotCWNfcHJpbnQoIlNldCBQSFkgQ3RybD0weCUwNFhcbiIsIFBoeUN0cmwpOwotCWNfcHJpbnQoIlNldCAxMDAwIEItVD0weCUwNFhcbiIsIEMxMDAwQmFzZVQpOwotCWNfcHJpbnQoIlNldCBBdXRvLU5lZz0weCUwNFhcbiIsIEF1dG9OZWdBZHYpOwotCWNfcHJpbnQoIlNldCBFeHQgQ3RybD0weCUwNFhcbiIsIEV4dFBoeUN0cmwpOwotI2VuZGlmIC8qIFNLX0RJQUcgKi8KLQotI2lmIGRlZmluZWQoU0tfRElBRykgfHwgZGVmaW5lZChERUJVRykKLQkvKiBSZWFkIFBIWSBDb250cm9sICovCi0JU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0NUUkwsICZQaHlDdHJsKTsKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiUEhZIEN0cmwgUmVnLj0weCUwNFhcbiIsIFBoeUN0cmwpKTsKLQkKLQkvKiBSZWFkIDEwMDBCYXNlLVQgQ29udHJvbCBSZWdpc3RlciAqLwotCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl8xMDAwVF9DVFJMLCAmQzEwMDBCYXNlVCk7Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIjEwMDBCLVQgQ3RybCA9MHglMDRYXG4iLCBDMTAwMEJhc2VUKSk7Ci0JCi0JLyogUmVhZCBBdXRvTmVnIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKi8KLQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQVVORV9BRFYsICZBdXRvTmVnQWR2KTsKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiQXV0by1OZWcuQWR2Lj0weCUwNFhcbiIsIEF1dG9OZWdBZHYpKTsKLQkKLQkvKiBSZWFkIEV4dC4gUEhZIFNwZWNpZmljIENvbnRyb2wgKi8KLQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfRVhUX0NUUkwsICZFeHRQaHlDdHJsKTsKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiRXh0LiBQSFkgQ3RybD0weCUwNFhcbiIsIEV4dFBoeUN0cmwpKTsKLQkKLQkvKiBSZWFkIFBIWSBTdGF0dXMgKi8KLQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfU1RBVCwgJlBoeVN0YXQpOwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQSFkgU3RhdCBSZWcuPTB4JTA0WFxuIiwgUGh5U3RhdCkpOwotCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9TVEFULCAmUGh5U3RhdDEpOwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJQSFkgU3RhdCBSZWcuPTB4JTA0WFxuIiwgUGh5U3RhdDEpKTsKLQkKLQkvKiBSZWFkIFBIWSBTcGVjaWZpYyBTdGF0dXMgKi8KLQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfUEhZX1NUQVQsICZQaHlTcGVjU3RhdCk7Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIlBIWSBTcGVjIFN0YXQ9MHglMDRYXG4iLCBQaHlTcGVjU3RhdCkpOwotI2VuZGlmIC8qIFNLX0RJQUcgfHwgREVCVUcgKi8KLQotI2lmZGVmIFNLX0RJQUcKLQljX3ByaW50KCJQSFkgQ3RybCBSZWc9MHglMDRYXG4iLCBQaHlDdHJsKTsKLQljX3ByaW50KCJQSFkgMTAwMCBSZWc9MHglMDRYXG4iLCBDMTAwMEJhc2VUKTsKLQljX3ByaW50KCJQSFkgQW5BZCBSZWc9MHglMDRYXG4iLCBBdXRvTmVnQWR2KTsKLQljX3ByaW50KCJFeHQgQ3RybCBSZWc9MHglMDRYXG4iLCBFeHRQaHlDdHJsKTsKLQljX3ByaW50KCJQSFkgU3RhdCBSZWc9MHglMDRYXG4iLCBQaHlTdGF0KTsKLQljX3ByaW50KCJQSFkgU3RhdCBSZWc9MHglMDRYXG4iLCBQaHlTdGF0MSk7Ci0JY19wcmludCgiUEhZIFNwZWMgUmVnPTB4JTA0WFxuIiwgUGh5U3BlY1N0YXQpOwotI2VuZGlmIC8qIFNLX0RJQUcgKi8KLQotI2VuZGlmIC8qIFZDUFUgKi8KLQotfQkvKiBTa0dtSW5pdFBoeU1hcnYgKi8KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi0KLSNpZmRlZiBPVEhFUl9QSFkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htSW5pdFBoeUxvbmUoKSAtIEluaXRpYWxpemUgdGhlIExldmVsIE9uZSBQaHkgcmVnaXN0ZXJzCi0gKgotICogRGVzY3JpcHRpb246CWluaXRpYWxpemVzIGFsbCB0aGUgTGV2ZWwgT25lIFBoeSByZWdpc3RlcnMKLSAqCi0gKiBOb3RlOgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrWG1Jbml0UGh5TG9uZSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1TS19CT09MCURvTG9vcCkJCS8qIFNob3VsZCBhIFBoeSBMb29wQmFjayBiZSBzZXQtdXA/ICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCVNLX1UxNgkJQ3RybDE7Ci0JU0tfVTE2CQlDdHJsMjsKLQlTS19VMTYJCUN0cmwzOwotCi0JQ3RybDEgPSBQSFlfQ1RfU1AxMDAwOwotCUN0cmwyID0gMDsKLQlDdHJsMyA9IFBIWV9TRUxfVFlQRTsKLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JLyogbWFudWFsbHkgTWFzdGVyL1NsYXZlID8gKi8KLQlpZiAocFBydC0+UE1TTW9kZSAhPSBTS19NU19NT0RFX0FVVE8pIHsKLQkJQ3RybDIgfD0gUEhZX0xfMTAwMENfTVNFOwotCQkKLQkJaWYgKHBQcnQtPlBNU01vZGUgPT0gU0tfTVNfTU9ERV9NQVNURVIpIHsKLQkJCUN0cmwyIHw9IFBIWV9MXzEwMDBDX01TQzsKLQkJfQotCX0KLQkvKiBBdXRvLW5lZ290aWF0aW9uID8gKi8KLQlpZiAocFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0hBTEYgfHwgcFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0ZVTEwpIHsKLQkJLyoKLQkJICogbGV2ZWwgb25lIHNwZWMgc2F5OiAiMTAwMCBNYnBzOiBtYW51YWwgbW9kZSBub3QgYWxsb3dlZCIKLQkJICogYnV0IGxldHMgc2VlIHdoYXQgaGFwcGVucy4uLgotCQkgKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJJbml0UGh5TG9uZTogbm8gYXV0by1uZWdvdGlhdGlvbiBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCS8qIFNldCBEdXBsZXhNb2RlIGluIENvbmZpZyByZWdpc3RlciAqLwotCQlpZiAocFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0ZVTEwpIHsKLQkJCUN0cmwxIHw9IFBIWV9DVF9EVVBfTUQ7Ci0JCX0KLQotCQkvKiBEZXRlcm1pbmUgTWFzdGVyL1NsYXZlIG1hbnVhbGx5IGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KLQkJaWYgKHBQcnQtPlBNU01vZGUgPT0gU0tfTVNfTU9ERV9BVVRPKSB7Ci0JCQlDdHJsMiB8PSBQSFlfTF8xMDAwQ19NU0U7CS8qIHNldCBpdCB0byBTbGF2ZSAqLwotCQl9Ci0KLQkJLyoKLQkJICogRG8gTk9UIGVuYWJsZSBBdXRvLW5lZ290aWF0aW9uIGhlcmUuIFRoaXMgd291bGQgaG9sZAotCQkgKiB0aGUgbGluayBkb3duIGJlY2F1c2Ugbm8gSURMRVMgYXJlIHRyYW5zbWl0dGVkCi0JCSAqLwotCX0KLQllbHNlIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJJbml0UGh5TG9uZTogd2l0aCBhdXRvLW5lZ290aWF0aW9uIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJLyogU2V0IEF1dG8tbmVnb3RpYXRpb24gYWR2ZXJ0aXNlbWVudCAqLwotCi0JCS8qIFNldCBGdWxsL2hhbGYgZHVwbGV4IGNhcGFiaWxpdGllcyAqLwotCQlzd2l0Y2ggKHBQcnQtPlBMaW5rTW9kZSkgewotCQljYXNlIFNLX0xNT0RFX0FVVE9IQUxGOgotCQkJQ3RybDIgfD0gUEhZX0xfMTAwMENfQUhEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfTE1PREVfQVVUT0ZVTEw6Ci0JCQlDdHJsMiB8PSBQSFlfTF8xMDAwQ19BRkQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTS19MTU9ERV9BVVRPQk9USDoKLQkJCUN0cmwyIHw9IFBIWV9MXzEwMDBDX0FGRCB8IFBIWV9MXzEwMDBDX0FIRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXIHwgU0tfRVJSQ0xfSU5JVCwgU0tFUlJfSFdJX0UwMTUsCi0JCQkJU0tFUlJfSFdJX0UwMTVNU0cpOwotCQl9Ci0KLQkJLyogU2V0IEZsb3ctY29udHJvbCBjYXBhYmlsaXRpZXMgKi8KLQkJc3dpdGNoIChwUHJ0LT5QRmxvd0N0cmxNb2RlKSB7Ci0JCWNhc2UgU0tfRkxPV19NT0RFX05PTkU6Ci0JCQlDdHJsMyB8PSBQSFlfTF9QX05PX1BBVVNFOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfRkxPV19NT0RFX0xPQ19TRU5EOgotCQkJQ3RybDMgfD0gUEhZX0xfUF9BU1lNX01EOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfRkxPV19NT0RFX1NZTU1FVFJJQzoKLQkJCUN0cmwzIHw9IFBIWV9MX1BfU1lNX01EOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfRkxPV19NT0RFX1NZTV9PUl9SRU06Ci0JCQlDdHJsMyB8PSBQSFlfTF9QX0JPVEhfTUQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX0hXSV9FMDE2LAotCQkJCVNLRVJSX0hXSV9FMDE2TVNHKTsKLQkJfQotCi0JCS8qIFJlc3RhcnQgQXV0by1uZWdvdGlhdGlvbiAqLwotCQlDdHJsMSA9IFBIWV9DVF9BTkUgfCBQSFlfQ1RfUkVfQ0ZHOwotCX0KLQkKLQkvKiBXcml0ZSAxMDAwQmFzZS1UIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9MT05FXzEwMDBUX0NUUkwsIEN0cmwyKTsKLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiMTAwMEItVCBDdHJsIFJlZz0weCUwNFhcbiIsIEN0cmwyKSk7Ci0JCi0JLyogV3JpdGUgQXV0b05lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyICovCi0JU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTE9ORV9BVU5FX0FEViwgQ3RybDMpOwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJBdXRvLU5lZy5BZHYuUmVnPTB4JTA0WFxuIiwgQ3RybDMpKTsKLQotCWlmIChEb0xvb3ApIHsKLQkJLyogU2V0IHRoZSBQaHkgTG9vcGJhY2sgYml0LCB0b28gKi8KLQkJQ3RybDEgfD0gUEhZX0NUX0xPT1A7Ci0JfQotCi0JLyogV3JpdGUgdG8gdGhlIFBoeSBjb250cm9sIHJlZ2lzdGVyICovCi0JU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTE9ORV9DVFJMLCBDdHJsMSk7Ci0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIlBIWSBDb250cm9sIFJlZz0weCUwNFhcbiIsIEN0cmwxKSk7Ci19CS8qIFNrWG1Jbml0UGh5TG9uZSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htSW5pdFBoeU5hdCgpIC0gSW5pdGlhbGl6ZSB0aGUgTmF0aW9uYWwgUGh5IHJlZ2lzdGVycwotICoKLSAqIERlc2NyaXB0aW9uOglpbml0aWFsaXplcyBhbGwgdGhlIE5hdGlvbmFsIFBoeSByZWdpc3RlcnMKLSAqCi0gKiBOb3RlOgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrWG1Jbml0UGh5TmF0KAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX0JPT0wJRG9Mb29wKQkJLyogU2hvdWxkIGEgUGh5IExvb3BCYWNrIGJlIHNldC11cD8gKi8KLXsKLS8qIHRvZG86IE5hdGlvbmFsICovCi19CS8qIFNrWG1Jbml0UGh5TmF0ICovCi0jZW5kaWYgLyogT1RIRVJfUEhZICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrTWFjSW5pdFBoeSgpIC0gSW5pdGlhbGl6ZSB0aGUgUEhZIHJlZ2lzdGVycwotICoKLSAqIERlc2NyaXB0aW9uOgljYWxscyB0aGUgSW5pdCBQSFkgcm91dGluZXMgZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogTm90ZToKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrTWFjSW5pdFBoeSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1TS19CT09MCURvTG9vcCkJCS8qIFNob3VsZCBhIFBoeSBMb29wQmFjayBiZSBzZXQtdXA/ICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCi0JCXN3aXRjaCAocFBydC0+UGh5VHlwZSkgewotCQljYXNlIFNLX1BIWV9YTUFDOgotCQkJU2tYbUluaXRQaHlYbWFjKHBBQywgSW9DLCBQb3J0LCBEb0xvb3ApOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfUEhZX0JDT006Ci0JCQlTa1htSW5pdFBoeUJjb20ocEFDLCBJb0MsIFBvcnQsIERvTG9vcCk7Ci0JCQlicmVhazsKLSNpZmRlZiBPVEhFUl9QSFkKLQkJY2FzZSBTS19QSFlfTE9ORToKLQkJCVNrWG1Jbml0UGh5TG9uZShwQUMsIElvQywgUG9ydCwgRG9Mb29wKTsKLQkJCWJyZWFrOwotCQljYXNlIFNLX1BIWV9OQVQ6Ci0JCQlTa1htSW5pdFBoeU5hdChwQUMsIElvQywgUG9ydCwgRG9Mb29wKTsKLQkJCWJyZWFrOwotI2VuZGlmIC8qIE9USEVSX1BIWSAqLwotCQl9Ci0JfQotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQkKLSNpZmRlZiBZVUtPTgotCWlmIChwQUMtPkdJbmkuR0lZdWtvbikgewotCQkKLQkJU2tHbUluaXRQaHlNYXJ2KHBBQywgSW9DLCBQb3J0LCBEb0xvb3ApOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi19CS8qIFNrTWFjSW5pdFBoeSAqLwotCi0KLSNpZmRlZiBHRU5FU0lTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tYbUF1dG9OZWdEb25lWG1hYygpIC0gQXV0by1uZWdvdGlhdGlvbiBoYW5kbGluZwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBhdXRvLW5lZ290aWF0aW9uIGlmIHRoZSBEb25lIGJpdCBpcyBzZXQuCi0gKgotICogUmV0dXJuczoKLSAqCVNLX0FORF9PSwlvLmsuCi0gKglTS19BTkRfRFVQX0NBUCAJRHVwbGV4IGNhcGFiaWxpdHkgZXJyb3IgaGFwcGVuZWQKLSAqCVNLX0FORF9PVEhFUiAJT3RoZXIgZXJyb3IgaGFwcGVuZWQKLSAqLwotc3RhdGljIGludCBTa1htQXV0b05lZ0RvbmVYbWFjKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLQlTS19HRVBPUlQJKnBQcnQ7Ci0JU0tfVTE2CQlSZXNBYjsJCS8qIFJlc29sdmVkIEFiaWxpdHkgKi8KLQlTS19VMTYJCUxQQWI7CQkvKiBMaW5rIFBhcnRuZXIgQWJpbGl0eSAqLwotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIkF1dG9OZWdEb25lWG1hYywgUG9ydCAlZFxuIiwgUG9ydCkpOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQkvKiBHZXQgUEhZIHBhcmFtZXRlcnMgKi8KLQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX1hNQUNfQVVORV9MUCwgJkxQQWIpOwotCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfWE1BQ19SRVNfQUJJLCAmUmVzQWIpOwotCi0JaWYgKChMUEFiICYgUEhZX1hfQU5fUkZCKSAhPSAwKSB7Ci0JCS8qIEF0IGxlYXN0IG9uZSBvZiB0aGUgcmVtb3RlIGZhdWx0IGJpdCBpcyBzZXQgKi8KLQkJLyogRXJyb3IgKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJBdXRvTmVnRmFpbDogUmVtb3RlIGZhdWx0IGJpdCBzZXQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCQlwUHJ0LT5QQXV0b05lZ0ZhaWwgPSBTS19UUlVFOwotCQlyZXR1cm4oU0tfQU5EX09USEVSKTsKLQl9Ci0KLQkvKiBDaGVjayBEdXBsZXggbWlzbWF0Y2ggKi8KLQlpZiAoKFJlc0FiICYgKFBIWV9YX1JTX0hEIHwgUEhZX1hfUlNfRkQpKSA9PSBQSFlfWF9SU19GRCkgewotCQlwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9BVVRPRlVMTDsKLQl9Ci0JZWxzZSBpZiAoKFJlc0FiICYgKFBIWV9YX1JTX0hEIHwgUEhZX1hfUlNfRkQpKSA9PSBQSFlfWF9SU19IRCkgewotCQlwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9BVVRPSEFMRjsKLQl9Ci0JZWxzZSB7Ci0JCS8qIEVycm9yICovCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQXV0b05lZ0ZhaWw6IER1cGxleCBtb2RlIG1pc21hdGNoIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJcFBydC0+UEF1dG9OZWdGYWlsID0gU0tfVFJVRTsKLQkJcmV0dXJuKFNLX0FORF9EVVBfQ0FQKTsKLQl9Ci0KLQkvKiBDaGVjayBQQVVTRSBtaXNtYXRjaCAqLwotCS8qIFdlIGFyZSBOT1QgdXNpbmcgY2hhcHRlciA0LjIzIG9mIHRoZSBYYXF0aSBtYW51YWwgKi8KLQkvKiBXZSBhcmUgdXNpbmcgSUVFRSA4MDIuM3ovRDUuMCBUYWJsZSAzNy00ICovCi0JaWYgKChwUHJ0LT5QRmxvd0N0cmxNb2RlID09IFNLX0ZMT1dfTU9ERV9TWU1NRVRSSUMgfHwKLQkgICAgIHBQcnQtPlBGbG93Q3RybE1vZGUgPT0gU0tfRkxPV19NT0RFX1NZTV9PUl9SRU0pICYmCi0JICAgIChMUEFiICYgUEhZX1hfUF9TWU1fTUQpICE9IDApIHsKLQkJLyogU3ltbWV0cmljIFBBVVNFICovCi0JCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9TWU1NRVRSSUM7Ci0JfQotCWVsc2UgaWYgKHBQcnQtPlBGbG93Q3RybE1vZGUgPT0gU0tfRkxPV19NT0RFX1NZTV9PUl9SRU0gJiYKLQkJICAgKExQQWIgJiBQSFlfWF9SU19QQVVTRSkgPT0gUEhZX1hfUF9BU1lNX01EKSB7Ci0JCS8qIEVuYWJsZSBQQVVTRSByZWNlaXZlLCBkaXNhYmxlIFBBVVNFIHRyYW5zbWl0ICovCi0JCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9SRU1fU0VORDsKLQl9Ci0JZWxzZSBpZiAocFBydC0+UEZsb3dDdHJsTW9kZSA9PSBTS19GTE9XX01PREVfTE9DX1NFTkQgJiYKLQkJICAgKExQQWIgJiBQSFlfWF9SU19QQVVTRSkgPT0gUEhZX1hfUF9CT1RIX01EKSB7Ci0JCS8qIERpc2FibGUgUEFVU0UgcmVjZWl2ZSwgZW5hYmxlIFBBVVNFIHRyYW5zbWl0ICovCi0JCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9MT0NfU0VORDsKLQl9Ci0JZWxzZSB7Ci0JCS8qIFBBVVNFIG1pc21hdGNoIC0+IG5vIFBBVVNFICovCi0JCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9OT05FOwotCX0KLQlwUHJ0LT5QTGlua1NwZWVkVXNlZCA9IChTS19VOClTS19MU1BFRURfU1RBVF8xMDAwTUJQUzsKLQotCXJldHVybihTS19BTkRfT0spOwotfQkvKiBTa1htQXV0b05lZ0RvbmVYbWFjICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrWG1BdXRvTmVnRG9uZUJjb20oKSAtIEF1dG8tbmVnb3RpYXRpb24gaGFuZGxpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYXV0by1uZWdvdGlhdGlvbiBpZiB0aGUgRG9uZSBiaXQgaXMgc2V0LgotICoKLSAqIFJldHVybnM6Ci0gKglTS19BTkRfT0sJby5rLgotICoJU0tfQU5EX0RVUF9DQVAgCUR1cGxleCBjYXBhYmlsaXR5IGVycm9yIGhhcHBlbmVkCi0gKglTS19BTkRfT1RIRVIgCU90aGVyIGVycm9yIGhhcHBlbmVkCi0gKi8KLXN0YXRpYyBpbnQgU2tYbUF1dG9OZWdEb25lQmNvbSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCVNLX1UxNgkJTFBBYjsJCS8qIExpbmsgUGFydG5lciBBYmlsaXR5ICovCi0JU0tfVTE2CQlBdXhTdGF0OwkvKiBBdXhpbGlhcnkgU3RhdHVzICovCi0KLSNpZmRlZiBURVNUX09OTFkKLTAxLVNlcC0yMDAwIFJBOzo7OgotCVNLX1UxNgkJUmVzQWI7CQkvKiBSZXNvbHZlZCBBYmlsaXR5ICovCi0jZW5kaWYJLyogMCAqLwotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIkF1dG9OZWdEb25lQmNvbSwgUG9ydCAlZFxuIiwgUG9ydCkpOwotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JLyogR2V0IFBIWSBwYXJhbWV0ZXJzICovCi0JU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVTkVfTFAsICZMUEFiKTsKLSNpZmRlZiBURVNUX09OTFkKLTAxLVNlcC0yMDAwIFJBOzo7OgotCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV8xMDAwVF9TVEFULCAmUmVzQWIpOwotI2VuZGlmCS8qIDAgKi8KLQkKLQlTa1htUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fQVVYX1NUQVQsICZBdXhTdGF0KTsKLQotCWlmICgoTFBBYiAmIFBIWV9CX0FOX1JGKSAhPSAwKSB7Ci0JCS8qIFJlbW90ZSBmYXVsdCBiaXQgaXMgc2V0OiBFcnJvciAqLwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkF1dG9OZWdGYWlsOiBSZW1vdGUgZmF1bHQgYml0IHNldCBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCXBQcnQtPlBBdXRvTmVnRmFpbCA9IFNLX1RSVUU7Ci0JCXJldHVybihTS19BTkRfT1RIRVIpOwotCX0KLQotCS8qIENoZWNrIER1cGxleCBtaXNtYXRjaCAqLwotCWlmICgoQXV4U3RhdCAmIFBIWV9CX0FTX0FOX1JFU19NU0spID09IFBIWV9CX1JFU18xMDAwRkQpIHsKLQkJcFBydC0+UExpbmtNb2RlU3RhdHVzID0gKFNLX1U4KVNLX0xNT0RFX1NUQVRfQVVUT0ZVTEw7Ci0JfQotCWVsc2UgaWYgKChBdXhTdGF0ICYgUEhZX0JfQVNfQU5fUkVTX01TSykgPT0gUEhZX0JfUkVTXzEwMDBIRCkgewotCQlwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9BVVRPSEFMRjsKLQl9Ci0JZWxzZSB7Ci0JCS8qIEVycm9yICovCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJCSgiQXV0b05lZ0ZhaWw6IER1cGxleCBtb2RlIG1pc21hdGNoIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJcFBydC0+UEF1dG9OZWdGYWlsID0gU0tfVFJVRTsKLQkJcmV0dXJuKFNLX0FORF9EVVBfQ0FQKTsKLQl9Ci0JCi0jaWZkZWYgVEVTVF9PTkxZCi0wMS1TZXAtMjAwMCBSQTs6OzoKLQkvKiBDaGVjayBNYXN0ZXIvU2xhdmUgcmVzb2x1dGlvbiAqLwotCWlmICgoUmVzQWIgJiBQSFlfQl8xMDAwU19NU0YpICE9IDApIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJNYXN0ZXIvU2xhdmUgRmF1bHQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCQlwUHJ0LT5QQXV0b05lZ0ZhaWwgPSBTS19UUlVFOwotCQlwUHJ0LT5QTVNTdGF0dXMgPSBTS19NU19TVEFUX0ZBVUxUOwotCQlyZXR1cm4oU0tfQU5EX09USEVSKTsKLQl9Ci0JCi0JcFBydC0+UE1TU3RhdHVzID0gKChSZXNBYiAmIFBIWV9CXzEwMDBTX01TUikgIT0gMCkgPwotCQlTS19NU19TVEFUX01BU1RFUiA6IFNLX01TX1NUQVRfU0xBVkU7Ci0jZW5kaWYJLyogMCAqLwotCi0JLyogQ2hlY2sgUEFVU0UgbWlzbWF0Y2ggPz8/ICovCi0JLyogV2UgYXJlIHVzaW5nIElFRUUgODAyLjN6L0Q1LjAgVGFibGUgMzctNCAqLwotCWlmICgoQXV4U3RhdCAmIFBIWV9CX0FTX1BBVVNFX01TSykgPT0gUEhZX0JfQVNfUEFVU0VfTVNLKSB7Ci0JCS8qIFN5bW1ldHJpYyBQQVVTRSAqLwotCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSBTS19GTE9XX1NUQVRfU1lNTUVUUklDOwotCX0KLQllbHNlIGlmICgoQXV4U3RhdCAmIFBIWV9CX0FTX1BBVVNFX01TSykgPT0gUEhZX0JfQVNfUFJSKSB7Ci0JCS8qIEVuYWJsZSBQQVVTRSByZWNlaXZlLCBkaXNhYmxlIFBBVVNFIHRyYW5zbWl0ICovCi0JCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9SRU1fU0VORDsKLQl9Ci0JZWxzZSBpZiAoKEF1eFN0YXQgJiBQSFlfQl9BU19QQVVTRV9NU0spID09IFBIWV9CX0FTX1BSVCkgewotCQkvKiBEaXNhYmxlIFBBVVNFIHJlY2VpdmUsIGVuYWJsZSBQQVVTRSB0cmFuc21pdCAqLwotCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSBTS19GTE9XX1NUQVRfTE9DX1NFTkQ7Ci0JfQotCWVsc2UgewotCQkvKiBQQVVTRSBtaXNtYXRjaCAtPiBubyBQQVVTRSAqLwotCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSBTS19GTE9XX1NUQVRfTk9ORTsKLQl9Ci0JcFBydC0+UExpbmtTcGVlZFVzZWQgPSAoU0tfVTgpU0tfTFNQRUVEX1NUQVRfMTAwME1CUFM7Ci0KLQlyZXR1cm4oU0tfQU5EX09LKTsKLX0JLyogU2tYbUF1dG9OZWdEb25lQmNvbSAqLwotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQotCi0jaWZkZWYgWVVLT04KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtQXV0b05lZ0RvbmVNYXJ2KCkgLSBBdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGF1dG8tbmVnb3RpYXRpb24gaWYgdGhlIERvbmUgYml0IGlzIHNldC4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQU5EX09LCW8uay4KLSAqCVNLX0FORF9EVVBfQ0FQIAlEdXBsZXggY2FwYWJpbGl0eSBlcnJvciBoYXBwZW5lZAotICoJU0tfQU5EX09USEVSIAlPdGhlciBlcnJvciBoYXBwZW5lZAotICovCi1zdGF0aWMgaW50IFNrR21BdXRvTmVnRG9uZU1hcnYoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlTS19VMTYJCUxQQWI7CQkvKiBMaW5rIFBhcnRuZXIgQWJpbGl0eSAqLwotCVNLX1UxNgkJUmVzQWI7CQkvKiBSZXNvbHZlZCBBYmlsaXR5ICovCi0JU0tfVTE2CQlBdXhTdGF0OwkvKiBBdXhpbGlhcnkgU3RhdHVzICovCi0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiQXV0b05lZ0RvbmVNYXJ2LCBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQkvKiBHZXQgUEhZIHBhcmFtZXRlcnMgKi8KLQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQVVORV9MUCwgJkxQQWIpOwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJMaW5rIFAuQWJpbC49MHglMDRYXG4iLCBMUEFiKSk7Ci0JCi0JaWYgKChMUEFiICYgUEhZX01fQU5fUkYpICE9IDApIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJBdXRvTmVnRmFpbDogUmVtb3RlIGZhdWx0IGJpdCBzZXQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCQlwUHJ0LT5QQXV0b05lZ0ZhaWwgPSBTS19UUlVFOwotCQlyZXR1cm4oU0tfQU5EX09USEVSKTsKLQl9Ci0KLQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfMTAwMFRfU1RBVCwgJlJlc0FiKTsKLQkKLQkvKiBDaGVjayBNYXN0ZXIvU2xhdmUgcmVzb2x1dGlvbiAqLwotCWlmICgoUmVzQWIgJiBQSFlfQl8xMDAwU19NU0YpICE9IDApIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJNYXN0ZXIvU2xhdmUgRmF1bHQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCQlwUHJ0LT5QQXV0b05lZ0ZhaWwgPSBTS19UUlVFOwotCQlwUHJ0LT5QTVNTdGF0dXMgPSBTS19NU19TVEFUX0ZBVUxUOwotCQlyZXR1cm4oU0tfQU5EX09USEVSKTsKLQl9Ci0JCi0JcFBydC0+UE1TU3RhdHVzID0gKChSZXNBYiAmIFBIWV9CXzEwMDBTX01TUikgIT0gMCkgPwotCQkoU0tfVTgpU0tfTVNfU1RBVF9NQVNURVIgOiAoU0tfVTgpU0tfTVNfU1RBVF9TTEFWRTsKLQkKLQkvKiBSZWFkIFBIWSBTcGVjaWZpYyBTdGF0dXMgKi8KLQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfUEhZX1NUQVQsICZBdXhTdGF0KTsKLQkKLQkvKiBDaGVjayBTcGVlZCAmIER1cGxleCByZXNvbHZlZCAqLwotCWlmICgoQXV4U3RhdCAmIFBIWV9NX1BTX1NQRFVQX1JFUykgPT0gMCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkF1dG9OZWdGYWlsOiBTcGVlZCAmIER1cGxleCBub3QgcmVzb2x2ZWQsIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJcFBydC0+UEF1dG9OZWdGYWlsID0gU0tfVFJVRTsKLQkJcFBydC0+UExpbmtNb2RlU3RhdHVzID0gKFNLX1U4KVNLX0xNT0RFX1NUQVRfVU5LTk9XTjsKLQkJcmV0dXJuKFNLX0FORF9EVVBfQ0FQKTsKLQl9Ci0JCi0JaWYgKChBdXhTdGF0ICYgUEhZX01fUFNfRlVMTF9EVVApICE9IDApIHsKLQkJcFBydC0+UExpbmtNb2RlU3RhdHVzID0gKFNLX1U4KVNLX0xNT0RFX1NUQVRfQVVUT0ZVTEw7Ci0JfQotCWVsc2UgewotCQlwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9BVVRPSEFMRjsKLQl9Ci0JCi0JLyogQ2hlY2sgUEFVU0UgbWlzbWF0Y2ggPz8/ICovCi0JLyogV2UgYXJlIHVzaW5nIElFRUUgODAyLjN6L0Q1LjAgVGFibGUgMzctNCAqLwotCWlmICgoQXV4U3RhdCAmIFBIWV9NX1BTX1BBVVNFX01TSykgPT0gUEhZX01fUFNfUEFVU0VfTVNLKSB7Ci0JCS8qIFN5bW1ldHJpYyBQQVVTRSAqLwotCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSBTS19GTE9XX1NUQVRfU1lNTUVUUklDOwotCX0KLQllbHNlIGlmICgoQXV4U3RhdCAmIFBIWV9NX1BTX1BBVVNFX01TSykgPT0gUEhZX01fUFNfUlhfUF9FTikgewotCQkvKiBFbmFibGUgUEFVU0UgcmVjZWl2ZSwgZGlzYWJsZSBQQVVTRSB0cmFuc21pdCAqLwotCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSBTS19GTE9XX1NUQVRfUkVNX1NFTkQ7Ci0JfQotCWVsc2UgaWYgKChBdXhTdGF0ICYgUEhZX01fUFNfUEFVU0VfTVNLKSA9PSBQSFlfTV9QU19UWF9QX0VOKSB7Ci0JCS8qIERpc2FibGUgUEFVU0UgcmVjZWl2ZSwgZW5hYmxlIFBBVVNFIHRyYW5zbWl0ICovCi0JCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9MT0NfU0VORDsKLQl9Ci0JZWxzZSB7Ci0JCS8qIFBBVVNFIG1pc21hdGNoIC0+IG5vIFBBVVNFICovCi0JCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9OT05FOwotCX0KLQkKLQkvKiBzZXQgdXNlZCBsaW5rIHNwZWVkICovCi0Jc3dpdGNoICgodW5zaWduZWQpKEF1eFN0YXQgJiBQSFlfTV9QU19TUEVFRF9NU0spKSB7Ci0JY2FzZSAodW5zaWduZWQpUEhZX01fUFNfU1BFRURfMTAwMDoKLQkJcFBydC0+UExpbmtTcGVlZFVzZWQgPSAoU0tfVTgpU0tfTFNQRUVEX1NUQVRfMTAwME1CUFM7Ci0JCWJyZWFrOwotCWNhc2UgUEhZX01fUFNfU1BFRURfMTAwOgotCQlwUHJ0LT5QTGlua1NwZWVkVXNlZCA9IChTS19VOClTS19MU1BFRURfU1RBVF8xMDBNQlBTOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwUHJ0LT5QTGlua1NwZWVkVXNlZCA9IChTS19VOClTS19MU1BFRURfU1RBVF8xME1CUFM7Ci0JfQotCi0JcmV0dXJuKFNLX0FORF9PSyk7Ci19CS8qIFNrR21BdXRvTmVnRG9uZU1hcnYgKi8KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi0KLSNpZmRlZiBPVEhFUl9QSFkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htQXV0b05lZ0RvbmVMb25lKCkgLSBBdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGF1dG8tbmVnb3RpYXRpb24gaWYgdGhlIERvbmUgYml0IGlzIHNldC4KLSAqCi0gKiBSZXR1cm5zOgotICoJU0tfQU5EX09LCW8uay4KLSAqCVNLX0FORF9EVVBfQ0FQIAlEdXBsZXggY2FwYWJpbGl0eSBlcnJvciBoYXBwZW5lZAotICoJU0tfQU5EX09USEVSIAlPdGhlciBlcnJvciBoYXBwZW5lZAotICovCi1zdGF0aWMgaW50IFNrWG1BdXRvTmVnRG9uZUxvbmUoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlTS19VMTYJCVJlc0FiOwkJLyogUmVzb2x2ZWQgQWJpbGl0eSAqLwotCVNLX1UxNgkJTFBBYjsJCS8qIExpbmsgUGFydG5lciBBYmlsaXR5ICovCi0JU0tfVTE2CQlRdWlja1N0YXQ7CS8qIEF1eGlsaWFyeSBTdGF0dXMgKi8KLQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJBdXRvTmVnRG9uZUxvbmUsIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotCS8qIEdldCBQSFkgcGFyYW1ldGVycyAqLwotCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTE9ORV9BVU5FX0xQLCAmTFBBYik7Ci0JU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9MT05FXzEwMDBUX1NUQVQsICZSZXNBYik7Ci0JU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9MT05FX1FfU1RBVCwgJlF1aWNrU3RhdCk7Ci0KLQlpZiAoKExQQWIgJiBQSFlfTF9BTl9SRikgIT0gMCkgewotCQkvKiBSZW1vdGUgZmF1bHQgYml0IGlzIHNldCAqLwotCQkvKiBFcnJvciAqLwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkF1dG9OZWdGYWlsOiBSZW1vdGUgZmF1bHQgYml0IHNldCBQb3J0ICVkXG4iLCBQb3J0KSk7Ci0JCXBQcnQtPlBBdXRvTmVnRmFpbCA9IFNLX1RSVUU7Ci0JCXJldHVybihTS19BTkRfT1RIRVIpOwotCX0KLQotCS8qIENoZWNrIER1cGxleCBtaXNtYXRjaCAqLwotCWlmICgoUXVpY2tTdGF0ICYgUEhZX0xfUVNfRFVQX01PRCkgIT0gMCkgewotCQlwUHJ0LT5QTGlua01vZGVTdGF0dXMgPSAoU0tfVTgpU0tfTE1PREVfU1RBVF9BVVRPRlVMTDsKLQl9Ci0JZWxzZSB7Ci0JCXBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9IChTS19VOClTS19MTU9ERV9TVEFUX0FVVE9IQUxGOwotCX0KLQkKLQkvKiBDaGVjayBNYXN0ZXIvU2xhdmUgcmVzb2x1dGlvbiAqLwotCWlmICgoUmVzQWIgJiBQSFlfTF8xMDAwU19NU0YpICE9IDApIHsKLQkJLyogRXJyb3IgKi8KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJNYXN0ZXIvU2xhdmUgRmF1bHQgUG9ydCAlZFxuIiwgUG9ydCkpOwotCQlwUHJ0LT5QQXV0b05lZ0ZhaWwgPSBTS19UUlVFOwotCQlwUHJ0LT5QTVNTdGF0dXMgPSBTS19NU19TVEFUX0ZBVUxUOwotCQlyZXR1cm4oU0tfQU5EX09USEVSKTsKLQl9Ci0JZWxzZSBpZiAoUmVzQWIgJiBQSFlfTF8xMDAwU19NU1IpIHsKLQkJcFBydC0+UE1TU3RhdHVzID0gU0tfTVNfU1RBVF9NQVNURVI7Ci0JfQotCWVsc2UgewotCQlwUHJ0LT5QTVNTdGF0dXMgPSBTS19NU19TVEFUX1NMQVZFOwotCX0KLQotCS8qIENoZWNrIFBBVVNFIG1pc21hdGNoICovCi0JLyogV2UgYXJlIHVzaW5nIElFRUUgODAyLjN6L0Q1LjAgVGFibGUgMzctNCAqLwotCS8qIHdlIG11c3QgbWFudWFsbHkgcmVzb2x2ZSB0aGUgYWJpbGl0aWVzIGhlcmUgKi8KLQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSBTS19GTE9XX1NUQVRfTk9ORTsKLQkKLQlzd2l0Y2ggKHBQcnQtPlBGbG93Q3RybE1vZGUpIHsKLQljYXNlIFNLX0ZMT1dfTU9ERV9OT05FOgotCQkvKiBkZWZhdWx0ICovCi0JCWJyZWFrOwotCWNhc2UgU0tfRkxPV19NT0RFX0xPQ19TRU5EOgotCQlpZiAoKFF1aWNrU3RhdCAmIChQSFlfTF9RU19QQVVTRSB8IFBIWV9MX1FTX0FTX1BBVVNFKSkgPT0KLQkJCShQSFlfTF9RU19QQVVTRSB8IFBIWV9MX1FTX0FTX1BBVVNFKSkgewotCQkJLyogRGlzYWJsZSBQQVVTRSByZWNlaXZlLCBlbmFibGUgUEFVU0UgdHJhbnNtaXQgKi8KLQkJCXBQcnQtPlBGbG93Q3RybFN0YXR1cyA9IFNLX0ZMT1dfU1RBVF9MT0NfU0VORDsKLQkJfQotCQlicmVhazsKLQljYXNlIFNLX0ZMT1dfTU9ERV9TWU1NRVRSSUM6Ci0JCWlmICgoUXVpY2tTdGF0ICYgUEhZX0xfUVNfUEFVU0UpICE9IDApIHsKLQkJCS8qIFN5bW1ldHJpYyBQQVVTRSAqLwotCQkJcFBydC0+UEZsb3dDdHJsU3RhdHVzID0gU0tfRkxPV19TVEFUX1NZTU1FVFJJQzsKLQkJfQotCQlicmVhazsKLQljYXNlIFNLX0ZMT1dfTU9ERV9TWU1fT1JfUkVNOgotCQlpZiAoKFF1aWNrU3RhdCAmIChQSFlfTF9RU19QQVVTRSB8IFBIWV9MX1FTX0FTX1BBVVNFKSkgPT0KLQkJCVBIWV9MX1FTX0FTX1BBVVNFKSB7Ci0JCQkvKiBFbmFibGUgUEFVU0UgcmVjZWl2ZSwgZGlzYWJsZSBQQVVTRSB0cmFuc21pdCAqLwotCQkJcFBydC0+UEZsb3dDdHJsU3RhdHVzID0gU0tfRkxPV19TVEFUX1JFTV9TRU5EOwotCQl9Ci0JCWVsc2UgaWYgKChRdWlja1N0YXQgJiBQSFlfTF9RU19QQVVTRSkgIT0gMCkgewotCQkJLyogU3ltbWV0cmljIFBBVVNFICovCi0JCQlwUHJ0LT5QRmxvd0N0cmxTdGF0dXMgPSBTS19GTE9XX1NUQVRfU1lNTUVUUklDOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVNLX0VSUl9MT0cocEFDLCBTS19FUlJDTF9TVyB8IFNLX0VSUkNMX0lOSVQsIFNLRVJSX0hXSV9FMDE2LAotCQkJU0tFUlJfSFdJX0UwMTZNU0cpOwotCX0KLQkKLQlyZXR1cm4oU0tfQU5EX09LKTsKLX0JLyogU2tYbUF1dG9OZWdEb25lTG9uZSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htQXV0b05lZ0RvbmVOYXQoKSAtIEF1dG8tbmVnb3RpYXRpb24gaGFuZGxpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCVRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYXV0by1uZWdvdGlhdGlvbiBpZiB0aGUgRG9uZSBiaXQgaXMgc2V0LgotICoKLSAqIFJldHVybnM6Ci0gKglTS19BTkRfT0sJby5rLgotICoJU0tfQU5EX0RVUF9DQVAgCUR1cGxleCBjYXBhYmlsaXR5IGVycm9yIGhhcHBlbmVkCi0gKglTS19BTkRfT1RIRVIgCU90aGVyIGVycm9yIGhhcHBlbmVkCi0gKi8KLXN0YXRpYyBpbnQgU2tYbUF1dG9OZWdEb25lTmF0KAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLS8qIHRvZG86IE5hdGlvbmFsICovCi0JcmV0dXJuKFNLX0FORF9PSyk7Ci19CS8qIFNrWG1BdXRvTmVnRG9uZU5hdCAqLwotI2VuZGlmIC8qIE9USEVSX1BIWSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa01hY0F1dG9OZWdEb25lKCkgLSBBdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nCi0gKgotICogRGVzY3JpcHRpb246CWNhbGxzIHRoZSBhdXRvLW5lZ290aWF0aW9uIGRvbmUgcm91dGluZXMgZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogUmV0dXJuczoKLSAqCVNLX0FORF9PSwlvLmsuCi0gKglTS19BTkRfRFVQX0NBUCAJRHVwbGV4IGNhcGFiaWxpdHkgZXJyb3IgaGFwcGVuZWQKLSAqCVNLX0FORF9PVEhFUiAJT3RoZXIgZXJyb3IgaGFwcGVuZWQKLSAqLwotaW50CVNrTWFjQXV0b05lZ0RvbmUoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlpbnQJUnR2OwotCi0JUnR2ID0gU0tfQU5EX09LOwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCi0JCXN3aXRjaCAocFBydC0+UGh5VHlwZSkgewotCQkKLQkJY2FzZSBTS19QSFlfWE1BQzoKLQkJCVJ0diA9IFNrWG1BdXRvTmVnRG9uZVhtYWMocEFDLCBJb0MsIFBvcnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0tfUEhZX0JDT006Ci0JCQlSdHYgPSBTa1htQXV0b05lZ0RvbmVCY29tKHBBQywgSW9DLCBQb3J0KTsKLQkJCWJyZWFrOwotI2lmZGVmIE9USEVSX1BIWQotCQljYXNlIFNLX1BIWV9MT05FOgotCQkJUnR2ID0gU2tYbUF1dG9OZWdEb25lTG9uZShwQUMsIElvQywgUG9ydCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTS19QSFlfTkFUOgotCQkJUnR2ID0gU2tYbUF1dG9OZWdEb25lTmF0KHBBQywgSW9DLCBQb3J0KTsKLQkJCWJyZWFrOwotI2VuZGlmIC8qIE9USEVSX1BIWSAqLwotCQlkZWZhdWx0OgotCQkJcmV0dXJuKFNLX0FORF9PVEhFUik7Ci0JCX0KLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCQotCQlSdHYgPSBTa0dtQXV0b05lZ0RvbmVNYXJ2KHBBQywgSW9DLCBQb3J0KTsKLQl9Ci0jZW5kaWYgLyogWVVLT04gKi8KLQkKLQlpZiAoUnR2ICE9IFNLX0FORF9PSykgewotCQlyZXR1cm4oUnR2KTsKLQl9Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCSgiQXV0b05lZyBkb25lIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkKLQkvKiBXZSBjaGVja2VkIGV2ZXJ5dGhpbmcgYW5kIG1heSBub3cgZW5hYmxlIHRoZSBsaW5rICovCi0JcFBydC0+UEF1dG9OZWdGYWlsID0gU0tfRkFMU0U7Ci0KLQlTa01hY1J4VHhFbmFibGUocEFDLCBJb0MsIFBvcnQpOwotCQotCXJldHVybihTS19BTkRfT0spOwotfQkvKiBTa01hY0F1dG9OZWdEb25lICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrTWFjUnhUeEVuYWJsZSgpIC0gRW5hYmxlIFJ4L1R4IGFjdGl2aXR5IGlmIHBvcnQgaXMgdXAKLSAqCi0gKiBEZXNjcmlwdGlvbjoJZW5hYmxlcyBSeC9UeCBkZXAuIG9uIGJvYXJkIHR5cGUKLSAqCi0gKiBSZXR1cm5zOgotICoJMAlvLmsuCi0gKgkhPSAwCUVycm9yIGhhcHBlbmVkCi0gKi8KLWludCBTa01hY1J4VHhFbmFibGUoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlTS19VMTYJCVJlZzsJCS8qIDE2LWJpdCByZWdpc3RlciB2YWx1ZSAqLwotCVNLX1UxNgkJSW50TWFzazsJLyogTUFDIGludGVycnVwdCBtYXNrICovCi0jaWZkZWYgR0VORVNJUwotCVNLX1UxNgkJU1dvcmQ7Ci0jZW5kaWYKLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCi0JaWYgKCFwUHJ0LT5QSFdMaW5rVXApIHsKLQkJLyogVGhlIEhhcmR3YXJlIGxpbmsgaXMgTk9UIHVwICovCi0JCXJldHVybigwKTsKLQl9Ci0KLQlpZiAoKHBQcnQtPlBMaW5rTW9kZSA9PSBTS19MTU9ERV9BVVRPSEFMRiB8fAotCSAgICAgcFBydC0+UExpbmtNb2RlID09IFNLX0xNT0RFX0FVVE9GVUxMIHx8Ci0JICAgICBwUHJ0LT5QTGlua01vZGUgPT0gU0tfTE1PREVfQVVUT0JPVEgpICYmCi0JICAgICBwUHJ0LT5QQXV0b05lZ0ZhaWwpIHsKLQkJLyogQXV0by1uZWdvdGlhdGlvbiBpcyBub3QgZG9uZSBvciBmYWlsZWQgKi8KLQkJcmV0dXJuKDApOwotCX0KLQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkvKiBzZXQgRHVwbGV4IE1vZGUgYW5kIFBhdXNlIE1vZGUgKi8KLQkJU2tYbUluaXREdXBNZChwQUMsIElvQywgUG9ydCk7Ci0JCQotCQlTa1htSW5pdFBhdXNlTWQocEFDLCBJb0MsIFBvcnQpOwotCQotCQkvKgotCQkgKiBJbml0aWFsaXplIHRoZSBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rlci4gRGVmYXVsdCBJUlFzIGFyZS4uLgotCQkgKgktIExpbmsgQXN5bmNocm9ub3VzIEV2ZW50Ci0JCSAqCS0gTGluayBQYXJ0bmVyIHJlcXVlc3RzIGNvbmZpZwotCQkgKgktIEF1dG8gTmVnb3RpYXRpb24gRG9uZQotCQkgKgktIFJ4IENvdW50ZXIgRXZlbnQgT3ZlcmZsb3cKLQkJICoJLSBUeCBDb3VudGVyIEV2ZW50IE92ZXJmbG93Ci0JCSAqCS0gVHJhbnNtaXQgRklGTyBVbmRlcnJ1bgotCQkgKi8KLQkJSW50TWFzayA9IFhNX0RFRl9NU0s7Ci0KLSNpZmRlZiBERUJVRwotCQkvKiBhZGQgSVJRIGZvciBSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgKi8KLQkJSW50TWFzayAmPSB+WE1fSVNfUlhGX09WOwotI2VuZGlmIC8qIERFQlVHICovCi0JCQotCQlpZiAocFBydC0+UGh5VHlwZSAhPSBTS19QSFlfWE1BQykgewotCQkJLyogZGlzYWJsZSBHUDAgaW50ZXJydXB0IGJpdCAqLwotCQkJSW50TWFzayB8PSBYTV9JU19JTlBfQVNTOwotCQl9Ci0JCVhNX09VVDE2KElvQywgUG9ydCwgWE1fSU1TSywgSW50TWFzayk7Ci0JCi0JCS8qIGdldCBNTVUgQ29tbWFuZCBSZWcuICovCi0JCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCAmUmVnKTsKLQkJCi0JCWlmIChwUHJ0LT5QaHlUeXBlICE9IFNLX1BIWV9YTUFDICYmCi0JCQkocFBydC0+UExpbmtNb2RlU3RhdHVzID09IFNLX0xNT0RFX1NUQVRfRlVMTCB8fAotCQkJIHBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0FVVE9GVUxMKSkgewotCQkJLyogc2V0IHRvIEZ1bGwgRHVwbGV4ICovCi0JCQlSZWcgfD0gWE1fTU1VX0dNSUlfRkQ7Ci0JCX0KLQkJCi0JCXN3aXRjaCAocFBydC0+UGh5VHlwZSkgewotCQljYXNlIFNLX1BIWV9CQ09NOgotCQkJLyoKLQkJCSAqIFdvcmthcm91bmQgQkNPTSBFcnJhdGEgKCMxMDUyMykgZm9yIGFsbCBCQ29tIFBoeXMKLQkJCSAqIEVuYWJsZSBQb3dlciBNYW5hZ2VtZW50IGFmdGVyIGxpbmsgdXAKLQkJCSAqLwotCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVWF9DVFJMLCAmU1dvcmQpOwotCQkJU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfQkNPTV9BVVhfQ1RSTCwKLQkJCQkoU0tfVTE2KShTV29yZCAmIH5QSFlfQl9BQ19ESVNfUE0pKTsKLSAgICAgICAgICAgIFNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fSU5UX01BU0ssCi0JCQkJKFNLX1UxNilQSFlfQl9ERUZfTVNLKTsKLQkJCWJyZWFrOwotI2lmZGVmIE9USEVSX1BIWQotCQljYXNlIFNLX1BIWV9MT05FOgotCQkJU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTE9ORV9JTlRfRU5BQiwgUEhZX0xfREVGX01TSyk7Ci0JCQlicmVhazsKLQkJY2FzZSBTS19QSFlfTkFUOgotCQkJLyogdG9kbyBOYXRpb25hbDoKLQkJCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX05BVF9JTlRfTUFTSywgUEhZX05fREVGX01TSyk7ICovCi0JCQkvKiBubyBpbnRlcnJ1cHRzIHBvc3NpYmxlIGZyb20gTmF0aW9uYWwgPz8/ICovCi0JCQlicmVhazsKLSNlbmRpZiAvKiBPVEhFUl9QSFkgKi8KLQkJfQotCQkKLQkJLyogZW5hYmxlIFJ4L1R4ICovCi0JCVhNX09VVDE2KElvQywgUG9ydCwgWE1fTU1VX0NNRCwgUmVnIHwgWE1fTU1VX0VOQV9SWCB8IFhNX01NVV9FTkFfVFgpOwotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJLyoKLQkJICogSW5pdGlhbGl6ZSB0aGUgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIuIERlZmF1bHQgSVJRcyBhcmUuLi4KLQkJICoJLSBSeCBDb3VudGVyIEV2ZW50IE92ZXJmbG93Ci0JCSAqCS0gVHggQ291bnRlciBFdmVudCBPdmVyZmxvdwotCQkgKgktIFRyYW5zbWl0IEZJRk8gVW5kZXJydW4KLQkJICovCi0JCUludE1hc2sgPSBHTUFDX0RFRl9NU0s7Ci0KLSNpZmRlZiBERUJVRwotCQkvKiBhZGQgSVJRIGZvciBSZWNlaXZlIEZJRk8gT3ZlcnJ1biAqLwotCQlJbnRNYXNrIHw9IEdNX0lTX1JYX0ZGX09SOwotI2VuZGlmIC8qIERFQlVHICovCi0JCQotCQlTS19PVVQ4KElvQywgR01BQ19JUlFfTVNLLCAoU0tfVTgpSW50TWFzayk7Ci0JCQotCQkvKiBnZXQgR2VuZXJhbCBQdXJwb3NlIENvbnRyb2wgKi8KLQkJR01fSU4xNihJb0MsIFBvcnQsIEdNX0dQX0NUUkwsICZSZWcpOwotCQkKLQkJaWYgKHBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0ZVTEwgfHwKLQkJCXBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0FVVE9GVUxMKSB7Ci0JCQkvKiBzZXQgdG8gRnVsbCBEdXBsZXggKi8KLQkJCVJlZyB8PSBHTV9HUENSX0RVUF9GVUxMOwotCQl9Ci0JCQotCQkvKiBlbmFibGUgUngvVHggKi8KLSAgICAgICAgR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9HUF9DVFJMLCAoU0tfVTE2KShSZWcgfCBHTV9HUENSX1JYX0VOQSB8Ci0JCQlHTV9HUENSX1RYX0VOQSkpOwotCi0jaWZuZGVmIFZDUFUKLQkJLyogRW5hYmxlIGFsbCBQSFkgaW50ZXJydXB0cyAqLwotICAgICAgICBTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0lOVF9NQVNLLAotCQkJKFNLX1UxNilQSFlfTV9ERUZfTVNLKTsKLSNlbmRpZiAvKiBWQ1BVICovCi0JfQotI2VuZGlmIC8qIFlVS09OICovCi0JCQkJCQotCXJldHVybigwKTsKLQotfQkvKiBTa01hY1J4VHhFbmFibGUgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNSeFR4RGlzYWJsZSgpIC0gRGlzYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIKLSAqCi0gKiBEZXNjcmlwdGlvbjoJZGlzYWJsZXMgUngvVHggZGVwLiBvbiBib2FyZCB0eXBlCi0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXZvaWQgU2tNYWNSeFR4RGlzYWJsZSgKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfVTE2CVdvcmQ7Ci0KLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCi0JCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCAmV29yZCk7Ci0JCQotCQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX01NVV9DTUQsIFdvcmQgJiB+KFhNX01NVV9FTkFfUlggfCBYTV9NTVVfRU5BX1RYKSk7Ci0JCi0JCS8qIGR1bW15IHJlYWQgdG8gZW5zdXJlIHdyaXRpbmcgKi8KLQkJWE1fSU4xNihJb0MsIFBvcnQsIFhNX01NVV9DTUQsICZXb3JkKTsKLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCQotCQlHTV9JTjE2KElvQywgUG9ydCwgR01fR1BfQ1RSTCwgJldvcmQpOwotCi0gICAgICAgIEdNX09VVDE2KElvQywgUG9ydCwgR01fR1BfQ1RSTCwgKFNLX1UxNikoV29yZCAmIH4oR01fR1BDUl9SWF9FTkEgfAotCQkJR01fR1BDUl9UWF9FTkEpKSk7Ci0KLQkJLyogZHVtbXkgcmVhZCB0byBlbnN1cmUgd3JpdGluZyAqLwotCQlHTV9JTjE2KElvQywgUG9ydCwgR01fR1BfQ1RSTCwgJldvcmQpOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi19CS8qIFNrTWFjUnhUeERpc2FibGUgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNJcnFEaXNhYmxlKCkgLSBEaXNhYmxlIElSUSBmcm9tIE1BQwotICoKLSAqIERlc2NyaXB0aW9uOglzZXRzIHRoZSBJUlEtbWFzayB0byBkaXNhYmxlIElSUSBkZXAuIG9uIGJvYXJkIHR5cGUKLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotdm9pZCBTa01hY0lycURpc2FibGUoCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLSNpZmRlZiBHRU5FU0lTCi0JU0tfVTE2CQlXb3JkOwotI2VuZGlmCi0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkKLQkJLyogZGlzYWJsZSBhbGwgWE1BQyBJUlFzICovCi0JCVhNX09VVDE2KElvQywgUG9ydCwgWE1fSU1TSywgMHhmZmZmKTsJCi0JCQotCQkvKiBEaXNhYmxlIGFsbCBQSFkgaW50ZXJydXB0cyAqLwotCQlzd2l0Y2ggKHBQcnQtPlBoeVR5cGUpIHsKLQkJCWNhc2UgU0tfUEhZX0JDT006Ci0JCQkJLyogTWFrZSBzdXJlIHRoYXQgUEhZIGlzIGluaXRpYWxpemVkICovCi0JCQkJaWYgKHBQcnQtPlBTdGF0ZSAhPSBTS19QUlRfUkVTRVQpIHsKLQkJCQkJLyogTk9UIGFsbG93ZWQgaWYgQkNPTSBpcyBpbiBSRVNFVCBzdGF0ZSAqLwotCQkJCQkvKiBXb3JrYXJvdW5kIEJDT00gRXJyYXRhICgjMTA1MjMpIGFsbCBCQ29tICovCi0JCQkJCS8qIERpc2FibGUgUG93ZXIgTWFuYWdlbWVudCBpZiBsaW5rIGlzIGRvd24gKi8KLQkJCQkJU2tYbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9CQ09NX0FVWF9DVFJMLCAmV29yZCk7Ci0JCQkJCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fQVVYX0NUUkwsCi0JCQkJCQkoU0tfVTE2KShXb3JkIHwgUEhZX0JfQUNfRElTX1BNKSk7Ci0JCQkJCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX0JDT01fSU5UX01BU0ssIDB4ZmZmZik7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2lmZGVmIE9USEVSX1BIWQotCQkJY2FzZSBTS19QSFlfTE9ORToKLQkJCQlTa1htUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9MT05FX0lOVF9FTkFCLCAwKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU0tfUEhZX05BVDoKLQkJCQkvKiB0b2RvOiBOYXRpb25hbAotCQkJCVNrWG1QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX05BVF9JTlRfTUFTSywgMHhmZmZmKTsgKi8KLQkJCQlicmVhazsKLSNlbmRpZiAvKiBPVEhFUl9QSFkgKi8KLQkJfQotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJLyogZGlzYWJsZSBhbGwgR01BQyBJUlFzICovCi0JCVNLX09VVDgoSW9DLCBHTUFDX0lSUV9NU0ssIDApOwotCQkKLSNpZm5kZWYgVkNQVQotCQkvKiBEaXNhYmxlIGFsbCBQSFkgaW50ZXJydXB0cyAqLwotCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0lOVF9NQVNLLCAwKTsKLSNlbmRpZiAvKiBWQ1BVICovCi0JfQotI2VuZGlmIC8qIFlVS09OICovCi0KLX0JLyogU2tNYWNJcnFEaXNhYmxlICovCi0KLQotI2lmZGVmIFNLX0RJQUcKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htU2VuZENvbnQoKSAtIEVuYWJsZSAvIERpc2FibGUgU2VuZCBDb250aW51b3VzIE1vZGUKLSAqCi0gKiBEZXNjcmlwdGlvbjoJZW5hYmxlIC8gZGlzYWJsZSBTZW5kIENvbnRpbnVvdXMgTW9kZSBvbiBYTUFDCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotdm9pZCBTa1htU2VuZENvbnQoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfQk9PTAlFbmFibGUpCS8qIEVuYWJsZSAvIERpc2FibGUgKi8KLXsKLQlTS19VMzIJTWRSZWc7Ci0KLQlYTV9JTjMyKElvQywgUG9ydCwgWE1fTU9ERSwgJk1kUmVnKTsKLQotCWlmIChFbmFibGUpIHsKLQkJTWRSZWcgfD0gWE1fTURfVFhfQ09OVDsKLQl9Ci0JZWxzZSB7Ci0JCU1kUmVnICY9IH5YTV9NRF9UWF9DT05UOwotCX0KLQkvKiBzZXR1cCBNb2RlIFJlZ2lzdGVyICovCi0JWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBNZFJlZyk7Ci0KLX0JLyogU2tYbVNlbmRDb250ICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrTWFjVGltZVN0YW1wKCkgLSBFbmFibGUgLyBEaXNhYmxlIFRpbWUgU3RhbXAKLSAqCi0gKiBEZXNjcmlwdGlvbjoJZW5hYmxlIC8gZGlzYWJsZSBUaW1lIFN0YW1wIGdlbmVyYXRpb24gZm9yIFJ4IHBhY2tldHMKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrTWFjVGltZVN0YW1wKAotU0tfQUMJKnBBQywJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX0JPT0wJRW5hYmxlKQkvKiBFbmFibGUgLyBEaXNhYmxlICovCi17Ci0JU0tfVTMyCU1kUmVnOwotCVNLX1U4CVRpbWVDdHJsOwotCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQotCQlYTV9JTjMyKElvQywgUG9ydCwgWE1fTU9ERSwgJk1kUmVnKTsKLQotCQlpZiAoRW5hYmxlKSB7Ci0JCQlNZFJlZyB8PSBYTV9NRF9BVFM7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlNZFJlZyAmPSB+WE1fTURfQVRTOwotCQl9Ci0JCS8qIHNldHVwIE1vZGUgUmVnaXN0ZXIgKi8KLQkJWE1fT1VUMzIoSW9DLCBQb3J0LCBYTV9NT0RFLCBNZFJlZyk7Ci0JfQotCWVsc2UgewotCQlpZiAoRW5hYmxlKSB7Ci0JCQlUaW1lQ3RybCA9IEdNVF9TVF9TVEFSVCB8IEdNVF9TVF9DTFJfSVJROwotCQl9Ci0JCWVsc2UgewotCQkJVGltZUN0cmwgPSBHTVRfU1RfU1RPUCB8IEdNVF9TVF9DTFJfSVJROwotCQl9Ci0JCS8qIFN0YXJ0L1N0b3AgVGltZSBTdGFtcCBUaW1lciAqLwotCQlTS19PVVQ4KElvQywgR01BQ19USV9TVF9DVFJMLCBUaW1lQ3RybCk7Ci0JfQotCi19CS8qIFNrTWFjVGltZVN0YW1wKi8KLQotI2Vsc2UgLyogIVNLX0RJQUcgKi8KLQotI2lmZGVmIEdFTkVTSVMKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htQXV0b05lZ0xpcGFYbWFjKCkgLSBEZWNpZGVzIHdoZXRoZXIgTGluayBQYXJ0bmVyIGNvdWxkIGRvIGF1dG8tbmVnCi0gKgotICoJVGhpcyBmdW5jdGlvbiBhbmFseXNlcyB0aGUgSW50ZXJydXB0IHN0YXR1cyB3b3JkLiBJZiBhbnkgb2YgdGhlCi0gKglBdXRvLW5lZ290aWF0aW5nIGludGVycnVwdCBiaXRzIGFyZSBzZXQsIHRoZSBQTGlwYUF1dG9OZWcgdmFyaWFibGUKLSAqCWlzIHNldCB0cnVlLgotICovCi12b2lkIFNrWG1BdXRvTmVnTGlwYVhtYWMoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfVTE2CUlTdGF0dXMpCS8qIEludGVycnVwdCBTdGF0dXMgd29yZCB0byBhbmFseXNlICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAocFBydC0+UExpcGFBdXRvTmVnICE9IFNLX0xJUEFfQVVUTyAmJgotCQkoSVN0YXR1cyAmIChYTV9JU19MSVBBX1JDIHwgWE1fSVNfUlhfUEFHRSB8IFhNX0lTX0FORCkpICE9IDApIHsKLQotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0NUUkwsCi0JCQkoIkF1dG9OZWdMaXBhOiBBdXRvTmVnIGRldGVjdGVkIG9uIFBvcnQgJWQsIElTdGF0dXM9MHglMDRYXG4iLAotCQkJUG9ydCwgSVN0YXR1cykpOwotCQlwUHJ0LT5QTGlwYUF1dG9OZWcgPSBTS19MSVBBX0FVVE87Ci0JfQotfQkvKiBTa1htQXV0b05lZ0xpcGFYbWFjICovCi0jZW5kaWYgLyogR0VORVNJUyAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa01hY0F1dG9OZWdMaXBhUGh5KCkgLSBEZWNpZGVzIHdoZXRoZXIgTGluayBQYXJ0bmVyIGNvdWxkIGRvIGF1dG8tbmVnCi0gKgotICoJVGhpcyBmdW5jdGlvbiBhbmFseXNlcyB0aGUgUEhZIHN0YXR1cyB3b3JkLgotICogIElmIGFueSBvZiB0aGUgQXV0by1uZWdvdGlhdGluZyBiaXRzIGFyZSBzZXQsIHRoZSBQTGlwYUF1dG9OZWcgdmFyaWFibGUKLSAqCWlzIHNldCB0cnVlLgotICovCi12b2lkIFNrTWFjQXV0b05lZ0xpcGFQaHkoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfVTE2CVBoeVN0YXQpCS8qIFBIWSBTdGF0dXMgd29yZCB0byBhbmFseXNlICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAocFBydC0+UExpcGFBdXRvTmVnICE9IFNLX0xJUEFfQVVUTyAmJgotCQkoUGh5U3RhdCAmIFBIWV9TVF9BTl9PVkVSKSAhPSAwKSB7Ci0KLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJBdXRvTmVnTGlwYTogQXV0b05lZyBkZXRlY3RlZCBvbiBQb3J0ICVkLCBQaHlTdGF0PTB4JTA0WFxuIiwKLQkJCVBvcnQsIFBoeVN0YXQpKTsKLQkJcFBydC0+UExpcGFBdXRvTmVnID0gU0tfTElQQV9BVVRPOwotCX0KLX0JLyogU2tNYWNBdXRvTmVnTGlwYVBoeSAqLwotCi0KLSNpZmRlZiBHRU5FU0lTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tYbUlycSgpIC0gSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZQotICoKLSAqIERlc2NyaXB0aW9uOglzZXJ2aWNlcyBhbiBJbnRlcnJ1cHQgUmVxdWVzdCBvZiB0aGUgWE1BQwotICoKLSAqIE5vdGU6Ci0gKglXaXRoIGFuIGV4dGVybmFsIFBIWSwgc29tZSBpbnRlcnJ1cHQgYml0cyBhcmUgbm90IG1lYW5pbmdmdWxsIGFueSBtb3JlOgotICoJLSBMaW5rQXN5bmNFdmVudCAoYml0ICMxNCkgICAgICAgICAgICAgIFhNX0lTX0xOS19BRQotICoJLSBMaW5rUGFydG5lclJlcUNvbmZpZyAoYml0ICMxMCkJWE1fSVNfTElQQV9SQwotICoJLSBQYWdlIFJlY2VpdmVkIChiaXQgIzkpCQlYTV9JU19SWF9QQUdFCi0gKgktIE5leHRQYWdlTG9hZGVkRm9yWG10IChiaXQgIzgpCQlYTV9JU19UWF9QQUdFCi0gKgktIEF1dG9OZWdEb25lIChiaXQgIzcpCQkJWE1fSVNfQU5ECi0gKglBbHNvIHByb2JhYmx5IG5vdCB2YWxpZCBhbnkgbW9yZSBpcyB0aGUgR1AwIGlucHV0IGJpdDoKLSAqCS0gR1BSZWdpc3RlckJpdDBzZXQJCQlYTV9JU19JTlBfQVNTCi0gKgotICogUmV0dXJuczoKLSAqCW5vdGhpbmcKLSAqLwotc3RhdGljIHZvaWQgU2tYbUlycSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCVNLX0VWUEFSQQlQYXJhOwotCVNLX1UxNgkJSVN0YXR1czsJLyogSW50ZXJydXB0IHN0YXR1cyByZWFkIGZyb20gdGhlIFhNQUMgKi8KLQlTS19VMTYJCUlTdGF0dXMyOwotI2lmZGVmIFNLX1NMSU0KLSAgICBTS19VNjQgICAgICBPdmVyZmxvd1N0YXR1czsKLSNlbmRpZgkKLQotCXBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOwotCQotCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9JU1JDLCAmSVN0YXR1cyk7Ci0JCi0JLyogTGlua1BhcnRuZXIgQXV0by1uZWdhYmxlPyAqLwotCWlmIChwUHJ0LT5QaHlUeXBlID09IFNLX1BIWV9YTUFDKSB7Ci0JCVNrWG1BdXRvTmVnTGlwYVhtYWMocEFDLCBJb0MsIFBvcnQsIElTdGF0dXMpOwotCX0KLQllbHNlIHsKLQkJLyogbWFzayBiaXRzIHRoYXQgYXJlIG5vdCB1c2VkIHdpdGggZXh0LiBQSFkgKi8KLQkJSVN0YXR1cyAmPSB+KFhNX0lTX0xOS19BRSB8IFhNX0lTX0xJUEFfUkMgfAotCQkJWE1fSVNfUlhfUEFHRSB8IFhNX0lTX1RYX1BBR0UgfAotCQkJWE1fSVNfQU5EIHwgWE1fSVNfSU5QX0FTUyk7Ci0JfQotCQotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkoIlhtYWNJcnEgUG9ydCAlZCBJc3IgMHglMDRYXG4iLCBQb3J0LCBJU3RhdHVzKSk7Ci0KLQlpZiAoIXBQcnQtPlBIV0xpbmtVcCkgewotCQkvKiBTcHVyaW91cyBYTUFDIGludGVycnVwdCAqLwotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX0hXTSwgU0tfREJHQ0FUX0lSUSwKLQkJCSgiU2tYbUlycTogc3B1cmlvdXMgaW50ZXJydXB0IG9uIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgoSVN0YXR1cyAmIFhNX0lTX0lOUF9BU1MpICE9IDApIHsKLQkJLyogUmVyZWFkIElTUiBSZWdpc3RlciBpZiBsaW5rIGlzIG5vdCBpbiBzeW5jICovCi0JCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9JU1JDLCAmSVN0YXR1czIpOwotCi0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJKCJTa1htSXJxOiBMaW5rIGFzeW5jLiBEb3VibGUgY2hlY2sgUG9ydCAlZCAweCUwNFggMHglMDRYXG4iLAotCQkJIFBvcnQsIElTdGF0dXMsIElTdGF0dXMyKSk7Ci0JCUlTdGF0dXMgJj0gflhNX0lTX0lOUF9BU1M7Ci0JCUlTdGF0dXMgfD0gSVN0YXR1czI7Ci0JfQotCi0JaWYgKChJU3RhdHVzICYgWE1fSVNfTE5LX0FFKSAhPSAwKSB7Ci0JCS8qIG5vdCB1c2VkLCBHUDAgaXMgdXNlZCBpbnN0ZWFkICovCi0JfQotCi0JaWYgKChJU3RhdHVzICYgWE1fSVNfVFhfQUJPUlQpICE9IDApIHsKLQkJLyogbm90IHVzZWQgKi8KLQl9Ci0KLQlpZiAoKElTdGF0dXMgJiBYTV9JU19GUkNfSU5UKSAhPSAwKSB7Ci0JCS8qIG5vdCB1c2VkLCB1c2UgQVNJQyBJUlEgaW5zdGVhZCBpZiBuZWVkZWQgKi8KLQl9Ci0KLQlpZiAoKElTdGF0dXMgJiAoWE1fSVNfSU5QX0FTUyB8IFhNX0lTX0xJUEFfUkMgfCBYTV9JU19SWF9QQUdFKSkgIT0gMCkgewotCQlTa0hXTGlua0Rvd24ocEFDLCBJb0MsIFBvcnQpOwotCi0JCS8qIFNpZ25hbCB0byBSTE1UICovCi0JCVBhcmEuUGFyYTMyWzBdID0gKFNLX1UzMilQb3J0OwotCQlTa0V2ZW50UXVldWUocEFDLCBTS0dFX1JMTVQsIFNLX1JMTVRfTElOS19ET1dOLCBQYXJhKTsKLQotCQkvKiBTdGFydCB3b3JrYXJvdW5kIEVycmF0YSAjMiB0aW1lciAqLwotCQlTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwUHJ0LT5QV2FUaW1lciwgU0tfV0FfSU5BX1RJTUUsCi0JCQlTS0dFX0hXQUMsIFNLX0hXRVZfV0FUSU0sIFBhcmEpOwotCX0KLQotCWlmICgoSVN0YXR1cyAmIFhNX0lTX1JYX1BBR0UpICE9IDApIHsKLQkJLyogbm90IHVzZWQgKi8KLQl9Ci0KLQlpZiAoKElTdGF0dXMgJiBYTV9JU19UWF9QQUdFKSAhPSAwKSB7Ci0JCS8qIG5vdCB1c2VkICovCi0JfQotCi0JaWYgKChJU3RhdHVzICYgWE1fSVNfQU5EKSAhPSAwKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfSFdNLCBTS19EQkdDQVRfSVJRLAotCQkJKCJTa1htSXJxOiBBTkQgb24gbGluayB0aGF0IGlzIHVwIFBvcnQgJWRcbiIsIFBvcnQpKTsKLQl9Ci0KLQlpZiAoKElTdGF0dXMgJiBYTV9JU19UU0NfT1YpICE9IDApIHsKLQkJLyogbm90IHVzZWQgKi8KLQl9Ci0KLQkvKiBDb21iaW5lZCBUeCAmIFJ4IENvdW50ZXIgT3ZlcmZsb3cgU0lSUSBFdmVudCAqLwotCWlmICgoSVN0YXR1cyAmIChYTV9JU19SWENfT1YgfCBYTV9JU19UWENfT1YpKSAhPSAwKSB7Ci0jaWZkZWYgU0tfU0xJTQotCQlTa1htT3ZlcmZsb3dTdGF0dXMocEFDLCBJb0MsIFBvcnQsIElTdGF0dXMsICZPdmVyZmxvd1N0YXR1cyk7Ci0jZWxzZQotCQlQYXJhLlBhcmEzMlswXSA9IChTS19VMzIpUG9ydDsKLQkJUGFyYS5QYXJhMzJbMV0gPSAoU0tfVTMyKUlTdGF0dXM7Ci0JCVNrUG5taUV2ZW50KHBBQywgSW9DLCBTS19QTk1JX0VWVF9TSVJRX09WRVJGTE9XLCBQYXJhKTsKLSNlbmRpZiAvKiBTS19TTElNICovCi0JfQotCi0JaWYgKChJU3RhdHVzICYgWE1fSVNfUlhGX09WKSAhPSAwKSB7Ci0JCS8qIG5vcm1hbCBzaXR1YXRpb24gLT4gbm8gZWZmZWN0ICovCi0jaWZkZWYgREVCVUcKLQkJcFBydC0+UFJ4T3ZlckNudCsrOwotI2VuZGlmIC8qIERFQlVHICovCi0JfQotCi0JaWYgKChJU3RhdHVzICYgWE1fSVNfVFhGX1VSKSAhPSAwKSB7Ci0JCS8qIG1heSBOT1QgaGFwcGVuIC0+IGVycm9yIGxvZyAqLwotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSFcsIFNLRVJSX1NJUlFfRTAyMCwgU0tFUlJfU0lSUV9FMDIwTVNHKTsKLQl9Ci0KLQlpZiAoKElTdGF0dXMgJiBYTV9JU19UWF9DT01QKSAhPSAwKSB7Ci0JCS8qIG5vdCBzZXJ2ZWQgaGVyZSAqLwotCX0KLQotCWlmICgoSVN0YXR1cyAmIFhNX0lTX1JYX0NPTVApICE9IDApIHsKLQkJLyogbm90IHNlcnZlZCBoZXJlICovCi0JfQotfQkvKiBTa1htSXJxICovCi0jZW5kaWYgLyogR0VORVNJUyAqLwotCi0KLSNpZmRlZiBZVUtPTgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR21JcnEoKSAtIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUKLSAqCi0gKiBEZXNjcmlwdGlvbjoJc2VydmljZXMgYW4gSW50ZXJydXB0IFJlcXVlc3Qgb2YgdGhlIEdNQUMKLSAqCi0gKiBOb3RlOgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXN0YXRpYyB2b2lkIFNrR21JcnEoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlTS19VOAkJSVN0YXR1czsJLyogSW50ZXJydXB0IHN0YXR1cyAqLwotI2lmZGVmIFNLX1NMSU0KLSAgICBTS19VNjQgICAgICBPdmVyZmxvd1N0YXR1czsKLSNlbHNlCi0JU0tfRVZQQVJBCVBhcmE7Ci0jZW5kaWYJCi0KLQlwUHJ0ID0gJnBBQy0+R0luaS5HUFtQb3J0XTsKLQkKLQlTS19JTjgoSW9DLCBHTUFDX0lSUV9TUkMsICZJU3RhdHVzKTsKLQkKLSNpZmRlZiBYWFgKLQkvKiBMaW5rUGFydG5lciBBdXRvLW5lZ2FibGU/ICovCi0JU2tNYWNBdXRvTmVnTGlwYVBoeShwQUMsIElvQywgUG9ydCwgSVN0YXR1cyk7Ci0jZW5kaWYgLyogWFhYICovCi0JCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9JUlEsCi0JCSgiR21hY0lycSBQb3J0ICVkIElzciAweCUwNFhcbiIsIFBvcnQsIElTdGF0dXMpKTsKLQotCS8qIENvbWJpbmVkIFR4ICYgUnggQ291bnRlciBPdmVyZmxvdyBTSVJRIEV2ZW50ICovCi0JaWYgKElTdGF0dXMgJiAoR01fSVNfUlhfQ09fT1YgfCBHTV9JU19UWF9DT19PVikpIHsKLQkJLyogdGhlc2UgSVJRcyB3aWxsIGJlIGNsZWFyZWQgYnkgcmVhZGluZyBHTUFDcyByZWdpc3RlciAqLwotI2lmZGVmIFNLX1NMSU0KLSAgICAgICAgU2tHbU92ZXJmbG93U3RhdHVzKHBBQywgSW9DLCBQb3J0LCBJU3RhdHVzLCAmT3ZlcmZsb3dTdGF0dXMpOwotI2Vsc2UKLQkJUGFyYS5QYXJhMzJbMF0gPSAoU0tfVTMyKVBvcnQ7Ci0JCVBhcmEuUGFyYTMyWzFdID0gKFNLX1UzMilJU3RhdHVzOwotCQlTa1BubWlFdmVudChwQUMsIElvQywgU0tfUE5NSV9FVlRfU0lSUV9PVkVSRkxPVywgUGFyYSk7Ci0jZW5kaWYJCQotCX0KLQotCWlmIChJU3RhdHVzICYgR01fSVNfUlhfRkZfT1IpIHsKLQkJLyogY2xlYXIgR01BQyBSeCBGSUZPIE92ZXJydW4gSVJRICovCi0JCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFJYX0dNRl9DVFJMX1QpLCAoU0tfVTgpR01GX0NMSV9SWF9GTyk7Ci0jaWZkZWYgREVCVUcKLQkJcFBydC0+UFJ4T3ZlckNudCsrOwotI2VuZGlmIC8qIERFQlVHICovCi0JfQotCi0JaWYgKElTdGF0dXMgJiBHTV9JU19UWF9GRl9VUikgewotCQkvKiBjbGVhciBHTUFDIFR4IEZJRk8gVW5kZXJydW4gSVJRICovCi0JCVNLX09VVDgoSW9DLCBNUl9BRERSKFBvcnQsIFRYX0dNRl9DVFJMX1QpLCAoU0tfVTgpR01GX0NMSV9UWF9GVSk7Ci0JCS8qIG1heSBOT1QgaGFwcGVuIC0+IGVycm9yIGxvZyAqLwotCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSFcsIFNLRVJSX1NJUlFfRTAyMCwgU0tFUlJfU0lSUV9FMDIwTVNHKTsKLQl9Ci0KLQlpZiAoSVN0YXR1cyAmIEdNX0lTX1RYX0NPTVBMKSB7Ci0JCS8qIG5vdCBzZXJ2ZWQgaGVyZSAqLwotCX0KLQotCWlmIChJU3RhdHVzICYgR01fSVNfUlhfQ09NUEwpIHsKLQkJLyogbm90IHNlcnZlZCBoZXJlICovCi0JfQotfQkvKiBTa0dtSXJxICovCi0jZW5kaWYgLyogWVVLT04gKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNJcnEoKSAtIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUgZm9yIE1BQwotICoKLSAqIERlc2NyaXB0aW9uOgljYWxscyB0aGUgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSBkZXAuIG9uIGJvYXJkIHR5cGUKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrTWFjSXJxKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJLyogSVJRIGZyb20gWE1BQyAqLwotCQlTa1htSXJxKHBBQywgSW9DLCBQb3J0KTsKLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCS8qIElSUSBmcm9tIEdNQUMgKi8KLQkJU2tHbUlycShwQUMsIElvQywgUG9ydCk7Ci0JfQotI2VuZGlmIC8qIFlVS09OICovCi0KLX0JLyogU2tNYWNJcnEgKi8KLQotI2VuZGlmIC8qICFTS19ESUFHICovCi0KLSNpZmRlZiBHRU5FU0lTCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tYbVVwZGF0ZVN0YXRzKCkgLSBGb3JjZSB0aGUgWE1BQyB0byBvdXRwdXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGUgWE1BQyBob2xkcyBpdHMgc3RhdGlzdGljIGludGVybmFsbHkuIFRvIG9idGFpbiB0aGUgY3VycmVudAotICoJdmFsdWVzIGEgY29tbWFuZCBtdXN0IGJlIHNlbnQgc28gdGhhdCB0aGUgc3RhdGlzdGljIGRhdGEgd2lsbAotICoJYmUgd3JpdHRlbiB0byBhIHByZWRlZmluZWQgbWVtb3J5IGFyZWEgb24gdGhlIGFkYXB0ZXIuCi0gKgotICogUmV0dXJuczoKLSAqCTA6ICBzdWNjZXNzCi0gKgkxOiAgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAqLwotaW50IFNrWG1VcGRhdGVTdGF0cygKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi11bnNpZ25lZCBpbnQgUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCVNLX0dFUE9SVAkqcFBydDsKLQlTS19VMTYJCVN0YXRSZWc7Ci0JaW50CQkJV2FpdEluZGV4OwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0JV2FpdEluZGV4ID0gMDsKLQotCS8qIFNlbmQgYW4gdXBkYXRlIGNvbW1hbmQgdG8gWE1BQyBzcGVjaWZpZWQgKi8KLQlYTV9PVVQxNihJb0MsIFBvcnQsIFhNX1NUQVRfQ01ELCBYTV9TQ19TTlBfVFhDIHwgWE1fU0NfU05QX1JYQyk7Ci0KLQkvKgotCSAqIEl0IGlzIGFuIGF1dG8tY2xlYXJpbmcgcmVnaXN0ZXIuIElmIHRoZSBjb21tYW5kIGJpdHMKLQkgKiB3ZW50IHRvIHplcm8gYWdhaW4sIHRoZSBzdGF0aXN0aWNzIGFyZSB0cmFuc2ZlcnJlZC4KLQkgKiBOb3JtYWxseSB0aGUgY29tbWFuZCBzaG91bGQgYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkuCi0JICogQnV0IGp1c3QgdG8gYmUgc3VyZSB3ZSBleGVjdXRlIGEgbG9vcC4KLQkgKi8KLQlkbyB7Ci0KLQkJWE1fSU4xNihJb0MsIFBvcnQsIFhNX1NUQVRfQ01ELCAmU3RhdFJlZyk7Ci0JCQotCQlpZiAoKytXYWl0SW5kZXggPiAxMCkgewotCi0JCQlTS19FUlJfTE9HKHBBQywgU0tfRVJSQ0xfSFcsIFNLRVJSX0hXSV9FMDIxLCBTS0VSUl9IV0lfRTAyMU1TRyk7Ci0KLQkJCXJldHVybigxKTsKLQkJfQotCX0gd2hpbGUgKChTdGF0UmVnICYgKFhNX1NDX1NOUF9UWEMgfCBYTV9TQ19TTlBfUlhDKSkgIT0gMCk7Ci0JCi0JcmV0dXJuKDApOwotfQkvKiBTa1htVXBkYXRlU3RhdHMgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tYbU1hY1N0YXRpc3RpYygpIC0gR2V0IFhNQUMgY291bnRlciB2YWx1ZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJR2V0cyB0aGUgMzJiaXQgY291bnRlciB2YWx1ZS4gRXhjZXB0IGZvciB0aGUgb2N0ZXQgY291bnRlcnMKLSAqCXRoZSBsb3dlciAzMmJpdCBhcmUgY291bnRlZCBpbiBoYXJkd2FyZSBhbmQgdGhlIHVwcGVyIDMyYml0Ci0gKgltdXN0IGJlIGNvdW50ZWQgaW4gc29mdHdhcmUgYnkgbW9uaXRvcmluZyBjb3VudGVyIG92ZXJmbG93IGludGVycnVwdHMuCi0gKgotICogUmV0dXJuczoKLSAqCTA6ICBzdWNjZXNzCi0gKgkxOiAgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAqLwotaW50IFNrWG1NYWNTdGF0aXN0aWMoCi1TS19BQwkqcEFDLAkJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCQkvKiBJTyBjb250ZXh0ICovCi11bnNpZ25lZCBpbnQgUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX1UxNglTdGF0QWRkciwJCS8qIE1JQiBjb3VudGVyIGJhc2UgYWRkcmVzcyAqLwotU0tfVTMyCVNLX0ZBUiAqcFZhbCkJLyogcHRyIHRvIHJldHVybiBzdGF0aXN0aWMgdmFsdWUgKi8KLXsKLQlpZiAoKFN0YXRBZGRyIDwgWE1fVFhGX09LKSB8fCAoU3RhdEFkZHIgPiBYTV9SWEZfTUFYX1NaKSkgewotCQkKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAyMiwgU0tFUlJfSFdJX0UwMjJNU0cpOwotCQkKLQkJcmV0dXJuKDEpOwotCX0KLQkKLQlYTV9JTjMyKElvQywgUG9ydCwgU3RhdEFkZHIsIHBWYWwpOwotCi0JcmV0dXJuKDApOwotfQkvKiBTa1htTWFjU3RhdGlzdGljICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrWG1SZXNldENvdW50ZXIoKSAtIENsZWFyIE1BQyBzdGF0aXN0aWMgY291bnRlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRm9yY2UgdGhlIFhNQUMgdG8gY2xlYXIgaXRzIHN0YXRpc3RpYyBjb3VudGVyLgotICoKLSAqIFJldHVybnM6Ci0gKgkwOiAgc3VjY2VzcwotICoJMTogIHNvbWV0aGluZyB3ZW50IHdyb25nCi0gKi8KLWludCBTa1htUmVzZXRDb3VudGVyKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLXVuc2lnbmVkIGludCBQb3J0KQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi17Ci0JWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9TVEFUX0NNRCwgWE1fU0NfQ0xSX1JYQyB8IFhNX1NDX0NMUl9UWEMpOwotCS8qIENsZWFyIHR3byB0aW1lcyBhY2NvcmRpbmcgdG8gRXJyYXRhICMzICovCi0JWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9TVEFUX0NNRCwgWE1fU0NfQ0xSX1JYQyB8IFhNX1NDX0NMUl9UWEMpOwotCi0JcmV0dXJuKDApOwotfQkvKiBTa1htUmVzZXRDb3VudGVyICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrWG1PdmVyZmxvd1N0YXR1cygpIC0gR2V0cyB0aGUgc3RhdHVzIG9mIGNvdW50ZXIgb3ZlcmZsb3cgaW50ZXJydXB0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKglDaGVja3MgdGhlIHNvdXJjZSBjYXVzaW5nIGFuIGNvdW50ZXIgb3ZlcmZsb3cgaW50ZXJydXB0LiBPbiBzdWNjZXNzIHRoZQotICoJcmVzdWx0aW5nIGNvdW50ZXIgb3ZlcmZsb3cgc3RhdHVzIGlzIHdyaXR0ZW4gdG8gPHBTdGF0dXM+LCB3aGVyZWFzIHRoZQotICoJdXBwZXIgZHdvcmQgc3RvcmVzIHRoZSBYTUFDIFJlY2VpdmVDb3VudGVyRXZlbnQgcmVnaXN0ZXIgYW5kIHRoZSBsb3dlcgotICoJZHdvcmQgdGhlIFhNQUMgVHJhbnNtaXRDb3VudGVyRXZlbnQgcmVnaXN0ZXIuCi0gKgotICogTm90ZToKLSAqCUZvciBYTUFDIHRoZSBpbnRlcnJ1cHQgc291cmNlIGlzIGEgc2VsZi1jbGVhcmluZyByZWdpc3Rlciwgc28gdGhlIHNvdXJjZQotICoJbXVzdCBiZSBjaGVja2VkIG9ubHkgb25jZS4gU0lSUSBtb2R1bGUgZG9lcyBhbm90aGVyIGNoZWNrIHRvIGJlIHN1cmUKLSAqCXRoYXQgbm8gaW50ZXJydXB0IGdldCBsb3N0IGR1cmluZyBwcm9jZXNzIHRpbWUuCi0gKgotICogUmV0dXJuczoKLSAqCTA6ICBzdWNjZXNzCi0gKgkxOiAgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAqLwotaW50IFNrWG1PdmVyZmxvd1N0YXR1cygKLVNLX0FDCSpwQUMsCQkJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCQkJLyogSU8gY29udGV4dCAqLwotdW5zaWduZWQgaW50IFBvcnQsCQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfVTE2CUlTdGF0dXMsCQkJLyogSW50ZXJ1cHQgU3RhdHVzIGZyb20gTUFDICovCi1TS19VNjQJU0tfRkFSICpwU3RhdHVzKQkvKiBwdHIgZm9yIHJldHVybiBvdmVyZmxvdyBzdGF0dXMgdmFsdWUgKi8KLXsKLQlTS19VNjQJU3RhdHVzOwkvKiBPdmVyZmxvdyBzdGF0dXMgKi8KLQlTS19VMzIJUmVnVmFsOwotCi0JU3RhdHVzID0gMDsKLQotCWlmICgoSVN0YXR1cyAmIFhNX0lTX1JYQ19PVikgIT0gMCkgewotCi0JCVhNX0lOMzIoSW9DLCBQb3J0LCBYTV9SWF9DTlRfRVYsICZSZWdWYWwpOwotCQlTdGF0dXMgfD0gKFNLX1U2NClSZWdWYWwgPDwgMzI7Ci0JfQotCQotCWlmICgoSVN0YXR1cyAmIFhNX0lTX1RYQ19PVikgIT0gMCkgewotCi0JCVhNX0lOMzIoSW9DLCBQb3J0LCBYTV9UWF9DTlRfRVYsICZSZWdWYWwpOwotCQlTdGF0dXMgfD0gKFNLX1U2NClSZWdWYWw7Ci0JfQotCi0JKnBTdGF0dXMgPSBTdGF0dXM7Ci0KLQlyZXR1cm4oMCk7Ci19CS8qIFNrWG1PdmVyZmxvd1N0YXR1cyAqLwotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQotCi0jaWZkZWYgWVVLT04KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtVXBkYXRlU3RhdHMoKSAtIEZvcmNlIHRoZSBHTUFDIHRvIG91dHB1dCB0aGUgY3VycmVudCBzdGF0aXN0aWMKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqCUVtcHR5IGZ1bmN0aW9uIGZvciBHTUFDLiBTdGF0aXN0aWMgZGF0YSBpcyBhY2Nlc3NpYmxlIGluIGRpcmVjdCB3YXkuCi0gKgotICogUmV0dXJuczoKLSAqCTA6ICBzdWNjZXNzCi0gKgkxOiAgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAqLwotaW50IFNrR21VcGRhdGVTdGF0cygKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi11bnNpZ25lZCBpbnQgUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCXJldHVybigwKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHbU1hY1N0YXRpc3RpYygpIC0gR2V0IEdNQUMgY291bnRlciB2YWx1ZQotICoKLSAqIERlc2NyaXB0aW9uOgotICoJR2V0cyB0aGUgMzJiaXQgY291bnRlciB2YWx1ZS4gRXhjZXB0IGZvciB0aGUgb2N0ZXQgY291bnRlcnMKLSAqCXRoZSBsb3dlciAzMmJpdCBhcmUgY291bnRlZCBpbiBoYXJkd2FyZSBhbmQgdGhlIHVwcGVyIDMyYml0Ci0gKgltdXN0IGJlIGNvdW50ZWQgaW4gc29mdHdhcmUgYnkgbW9uaXRvcmluZyBjb3VudGVyIG92ZXJmbG93IGludGVycnVwdHMuCi0gKgotICogUmV0dXJuczoKLSAqCTA6ICBzdWNjZXNzCi0gKgkxOiAgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAqLwotaW50IFNrR21NYWNTdGF0aXN0aWMoCi1TS19BQwkqcEFDLAkJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCQkvKiBJTyBjb250ZXh0ICovCi11bnNpZ25lZCBpbnQgUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLVNLX1UxNglTdGF0QWRkciwJCS8qIE1JQiBjb3VudGVyIGJhc2UgYWRkcmVzcyAqLwotU0tfVTMyCVNLX0ZBUiAqcFZhbCkJLyogcHRyIHRvIHJldHVybiBzdGF0aXN0aWMgdmFsdWUgKi8KLXsKLQotCWlmICgoU3RhdEFkZHIgPCBHTV9SWEZfVUNfT0spIHx8IChTdGF0QWRkciA+IEdNX1RYRV9GSUZPX1VSKSkgewotCQkKLQkJU0tfRVJSX0xPRyhwQUMsIFNLX0VSUkNMX1NXLCBTS0VSUl9IV0lfRTAyMiwgU0tFUlJfSFdJX0UwMjJNU0cpOwotCQkKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkJKCJTa0dtTWFjU3RhdDogd3JvbmcgTUlCIGNvdW50ZXIgMHglMDRYXG4iLCBTdGF0QWRkcikpOwotCQlyZXR1cm4oMSk7Ci0JfQotCQkKLQlHTV9JTjMyKElvQywgUG9ydCwgU3RhdEFkZHIsIHBWYWwpOwotCi0JcmV0dXJuKDApOwotfQkvKiBTa0dtTWFjU3RhdGlzdGljICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR21SZXNldENvdW50ZXIoKSAtIENsZWFyIE1BQyBzdGF0aXN0aWMgY291bnRlcgotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRm9yY2UgR01BQyB0byBjbGVhciBpdHMgc3RhdGlzdGljIGNvdW50ZXIuCi0gKgotICogUmV0dXJuczoKLSAqCTA6ICBzdWNjZXNzCi0gKgkxOiAgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAqLwotaW50IFNrR21SZXNldENvdW50ZXIoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotdW5zaWduZWQgaW50IFBvcnQpCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLXsKLQlTS19VMTYJUmVnOwkvKiBQaHkgQWRkcmVzcyBSZWdpc3RlciAqLwotCVNLX1UxNglXb3JkOwotCWludAkJaTsKLQotCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9QSFlfQUREUiwgJlJlZyk7Ci0KLQkvKiBzZXQgTUlCIENsZWFyIENvdW50ZXIgTW9kZSAqLwotCUdNX09VVDE2KElvQywgUG9ydCwgR01fUEhZX0FERFIsIFJlZyB8IEdNX1BBUl9NSUJfQ0xSKTsKLQkKLQkvKiByZWFkIGFsbCBNSUIgQ291bnRlcnMgd2l0aCBDbGVhciBNb2RlIHNldCAqLwotCWZvciAoaSA9IDA7IGkgPCBHTV9NSUJfQ05UX1NJWkU7IGkrKykgewotCQkvKiB0aGUgcmVzZXQgaXMgcGVyZm9ybWVkIG9ubHkgd2hlbiB0aGUgbG93ZXIgMTYgYml0cyBhcmUgcmVhZCAqLwotCQlHTV9JTjE2KElvQywgUG9ydCwgR01fTUlCX0NOVF9CQVNFICsgOCppLCAmV29yZCk7Ci0JfQotCQotCS8qIGNsZWFyIE1JQiBDbGVhciBDb3VudGVyIE1vZGUgKi8KLQlHTV9PVVQxNihJb0MsIFBvcnQsIEdNX1BIWV9BRERSLCBSZWcpOwotCQotCXJldHVybigwKTsKLX0JLyogU2tHbVJlc2V0Q291bnRlciAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtT3ZlcmZsb3dTdGF0dXMoKSAtIEdldHMgdGhlIHN0YXR1cyBvZiBjb3VudGVyIG92ZXJmbG93IGludGVycnVwdAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJQ2hlY2tzIHRoZSBzb3VyY2UgY2F1c2luZyBhbiBjb3VudGVyIG92ZXJmbG93IGludGVycnVwdC4gT24gc3VjY2VzcyB0aGUKLSAqCXJlc3VsdGluZyBjb3VudGVyIG92ZXJmbG93IHN0YXR1cyBpcyB3cml0dGVuIHRvIDxwU3RhdHVzPiwgd2hlcmVhcyB0aGUKLSAqCXRoZSBmb2xsb3dpbmcgYml0IGNvZGluZyBpcyB1c2VkOgotICoJNjM6NTYgLSB1bnVzZWQKLSAqCTU1OjQ4IC0gVHhSeCBpbnRlcnJ1cHQgcmVnaXN0ZXIgYml0NzowCi0gKgkzMjo0NyAtIFJ4IGludGVycnVwdCByZWdpc3RlcgotICoJMzE6MjQgLSB1bnVzZWQKLSAqCTIzOjE2IC0gVHhSeCBpbnRlcnJ1cHQgcmVnaXN0ZXIgYml0MTU6OAotICoJMTU6MCAgLSBUeCBpbnRlcnJ1cHQgcmVnaXN0ZXIKLSAqCi0gKiBSZXR1cm5zOgotICoJMDogIHN1Y2Nlc3MKLSAqCTE6ICBzb21ldGhpbmcgd2VudCB3cm9uZwotICovCi1pbnQgU2tHbU92ZXJmbG93U3RhdHVzKAotU0tfQUMJKnBBQywJCQkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJCQkvKiBJTyBjb250ZXh0ICovCi11bnNpZ25lZCBpbnQgUG9ydCwJCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1TS19VMTYJSVN0YXR1cywJCQkvKiBJbnRlcnVwdCBTdGF0dXMgZnJvbSBNQUMgKi8KLVNLX1U2NAlTS19GQVIgKnBTdGF0dXMpCS8qIHB0ciBmb3IgcmV0dXJuIG92ZXJmbG93IHN0YXR1cyB2YWx1ZSAqLwotewotCVNLX1U2NAlTdGF0dXM7CQkvKiBPdmVyZmxvdyBzdGF0dXMgKi8KLQlTS19VMTYJUmVnVmFsOwotCi0JU3RhdHVzID0gMDsKLQotCWlmICgoSVN0YXR1cyAmIEdNX0lTX1JYX0NPX09WKSAhPSAwKSB7Ci0JCS8qIHRoaXMgcmVnaXN0ZXIgaXMgc2VsZi1jbGVhcmluZyBhZnRlciByZWFkICovCi0JCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9SWF9JUlFfU1JDLCAmUmVnVmFsKTsKLQkJU3RhdHVzIHw9IChTS19VNjQpUmVnVmFsIDw8IDMyOwotCX0KLQkKLQlpZiAoKElTdGF0dXMgJiBHTV9JU19UWF9DT19PVikgIT0gMCkgewotCQkvKiB0aGlzIHJlZ2lzdGVyIGlzIHNlbGYtY2xlYXJpbmcgYWZ0ZXIgcmVhZCAqLwotCQlHTV9JTjE2KElvQywgUG9ydCwgR01fVFhfSVJRX1NSQywgJlJlZ1ZhbCk7Ci0JCVN0YXR1cyB8PSAoU0tfVTY0KVJlZ1ZhbDsKLQl9Ci0JCi0JLyogdGhpcyByZWdpc3RlciBpcyBzZWxmLWNsZWFyaW5nIGFmdGVyIHJlYWQgKi8KLQlHTV9JTjE2KElvQywgUG9ydCwgR01fVFJfSVJRX1NSQywgJlJlZ1ZhbCk7Ci0JLyogUnggb3ZlcmZsb3cgaW50ZXJydXB0IHJlZ2lzdGVyIGJpdHMgKExvQnl0ZSkqLwotCVN0YXR1cyB8PSAoU0tfVTY0KSgoU0tfVTgpUmVnVmFsKSA8PCA0ODsKLQkvKiBUeCBvdmVyZmxvdyBpbnRlcnJ1cHQgcmVnaXN0ZXIgYml0cyAoSGlCeXRlKSovCi0JU3RhdHVzIHw9IChTS19VNjQpKFJlZ1ZhbCA+PiA4KSA8PCAxNjsKLQotCSpwU3RhdHVzID0gU3RhdHVzOwotCi0JcmV0dXJuKDApOwotfQkvKiBTa0dtT3ZlcmZsb3dTdGF0dXMgKi8KLQotCi0jaWZuZGVmIFNLX1NMSU0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtQ2FibGVEaWFnU3RhdHVzKCkgLSBTdGFydHMgLyBHZXRzIHN0YXR1cyBvZiBjYWJsZSBkaWFnbm9zdGljIHRlc3QKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICBzdGFydHMgdGhlIGNhYmxlIGRpYWdub3N0aWMgdGVzdCBpZiAnU3RhcnRUZXN0JyBpcyB0cnVlCi0gKiAgZ2V0cyB0aGUgcmVzdWx0cyBpZiAnU3RhcnRUZXN0JyBpcyB0cnVlCi0gKgotICogTk9URToJdGhpcyB0ZXN0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGxpbmsgaXMgZG93bgotICoJCi0gKiBSZXR1cm5zOgotICoJMDogIHN1Y2Nlc3MKLSAqCTE6CW5vIFlVS09OIGNvcHBlcgotICoJMjoJdGVzdCBpbiBwcm9ncmVzcwotICovCi1pbnQgU2tHbUNhYmxlRGlhZ1N0YXR1cygKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsICAgCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1TS19CT09MCVN0YXJ0VGVzdCkJLyogZmxhZyBmb3Igc3RhcnQgLyBnZXQgcmVzdWx0ICovCi17Ci0JaW50CQlpOwotCVNLX1UxNglSZWdWYWw7Ci0JU0tfR0VQT1JUCSpwUHJ0OwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlpZiAocFBydC0+UGh5VHlwZSAhPSBTS19QSFlfTUFSVl9DT1BQRVIpIHsKLQkJCi0JCXJldHVybigxKTsKLQl9Ci0KLQlpZiAoU3RhcnRUZXN0KSB7Ci0JCS8qIG9ubHkgc3RhcnQgdGhlIGNhYmxlIHRlc3QgKi8KLQkJaWYgKChwUHJ0LT5QaHlJZDEgJiBQSFlfSTFfUkVWX01TSykgPCA0KSB7Ci0JCQkvKiBhcHBseSBURFIgd29ya2Fyb3VuZCBmcm9tIE1hcnZlbGwgKi8KLQkJCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgMjksIDB4MDAxZSk7Ci0JCQkKLQkJCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgMzAsIDB4Y2MwMCk7Ci0JCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIDMwLCAweGM4MDApOwotCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCAzMCwgMHhjNDAwKTsKLQkJCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgMzAsIDB4YzAwMCk7Ci0JCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIDMwLCAweGMxMDApOwotCQl9Ci0KLQkJLyogc2V0IGFkZHJlc3MgdG8gMCBmb3IgTURJWzBdICovCi0JCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMCk7Ci0KLQkJLyogUmVhZCBDYWJsZSBEaWFnbm9zdGljIFJlZyAqLwotCQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQ0FCTEVfRElBRywgJlJlZ1ZhbCk7Ci0KLQkJLyogc3RhcnQgQ2FibGUgRGlhZ25vc3RpYyBUZXN0ICovCi0JCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQ0FCTEVfRElBRywKLQkJCShTS19VMTYpKFJlZ1ZhbCB8IFBIWV9NX0NBQkRfRU5BX1RFU1QpKTsKLQkKLQkJcmV0dXJuKDApOwotCX0KLQkKLQkvKiBSZWFkIENhYmxlIERpYWdub3N0aWMgUmVnICovCi0JU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX0NBQkxFX0RJQUcsICZSZWdWYWwpOwotCi0JU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9IV00sIFNLX0RCR0NBVF9DVFJMLAotCQkoIlBIWSBDYWJsZSBEaWFnLj0weCUwNFhcbiIsIFJlZ1ZhbCkpOwotCi0JaWYgKChSZWdWYWwgJiBQSFlfTV9DQUJEX0VOQV9URVNUKSAhPSAwKSB7Ci0JCS8qIHRlc3QgaXMgcnVubmluZyAqLwotCQlyZXR1cm4oMik7Ci0JfQotCi0JLyogZ2V0IHRoZSB0ZXN0IHJlc3VsdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSAgewotCQkvKiBzZXQgYWRkcmVzcyB0byBpIGZvciBNRElbaV0gKi8KLQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAoU0tfVTE2KWkpOwotCi0JCS8qIGdldCBDYWJsZSBEaWFnbm9zdGljIHZhbHVlcyAqLwotCQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQ0FCTEVfRElBRywgJlJlZ1ZhbCk7Ci0KLQkJcFBydC0+UE1kaVBhaXJMZW5baV0gPSAoU0tfVTgpKFJlZ1ZhbCAmIFBIWV9NX0NBQkRfRElTVF9NU0spOwotCi0JCXBQcnQtPlBNZGlQYWlyU3RzW2ldID0gKFNLX1U4KSgoUmVnVmFsICYgUEhZX01fQ0FCRF9TVEFUX01TSykgPj4gMTMpOwotCX0KLQotCXJldHVybigwKTsKLX0JLyogU2tHbUNhYmxlRGlhZ1N0YXR1cyAqLwotI2VuZGlmIC8qICFTS19TTElNICovCi0jZW5kaWYgLyogWVVLT04gKi8KLQotLyogRW5kIG9mIGZpbGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvZnBsdXN0bS5jIGIvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKaW5kZXggNzZkYzhhZC4uNjAyOGJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKQEAgLTQwMSwxOCArNDAxLDE4IEBACiAvKiBpbnQgbGVuIDsJCSBsZW5ndGggb2YgdGhlIGZyYW1lIGluY2x1ZGluZyB0aGUgRkMgKi8KIHsKIAlpbnQJaSA7Ci0JdV9pbnQJKnAgOworCV9fbGUzMgkqcCA7CiAKIAlDSEVDS19OUFAoKSA7CiAJTUFSVyhvZmYpIDsJCS8qIHNldCBtZW1vcnkgYWRkcmVzcyByZWcgZm9yIHdyaXRlcyAqLwogCi0JcCA9ICh1X2ludCAqKSBtYWMgOworCXAgPSAoX19sZTMyICopIG1hYyA7CiAJZm9yIChpID0gKGxlbiArIDMpLzQgOyBpIDsgaS0tKSB7CiAJCWlmIChpID09IDEpIHsKIAkJCS8qIGxhc3Qgd29yZCwgc2V0IHRoZSB0YWcgYml0ICovCiAJCQlvdXRwdyhGTV9BKEZNX0NNRFJFRzIpLEZNX0lTVFRCKSA7CiAJCX0KLQkJd3JpdGVfbWRyKHNtYyxNRFJfUkVWRVJTRSgqcCkpIDsKKwkJd3JpdGVfbWRyKHNtYyxsZTMyX3RvX2NwdSgqcCkpIDsKIAkJcCsrIDsKIAl9CiAKQEAgLTQ0NCw3ICs0NDQsNyBAQAogICovCiBzdGF0aWMgdm9pZCBkaXJlY3RlZF9iZWFjb24oc3RydWN0IHNfc21jICpzbWMpCiB7Ci0JU0tfTE9DX0RFQ0wodV9pbnQsYVsyXSkgOworCVNLX0xPQ19ERUNMKF9fbGUzMixhWzJdKSA7CiAKIAkvKgogCSAqIHNldCBVTkEgaW4gZnJhbWUKQEAgLTQ1OCw5ICs0NTgsOSBAQAogCUNIRUNLX05QUCgpIDsKIAkgLyogc2V0IG1lbW9yeSBhZGRyZXNzIHJlZyBmb3Igd3JpdGVzICovCiAJTUFSVyhzbWMtPmh3LmZwLmZpZm8ucmJjX3JhbV9zdGFydCtEQkVBQ09OX0ZSQU1FX09GRis0KSA7Ci0Jd3JpdGVfbWRyKHNtYyxNRFJfUkVWRVJTRShhWzBdKSkgOworCXdyaXRlX21kcihzbWMsbGUzMl90b19jcHUoYVswXSkpIDsKIAlvdXRwdyhGTV9BKEZNX0NNRFJFRzIpLEZNX0lTVFRCKSA7CS8qIHNldCB0aGUgdGFnIGJpdCAqLwotCXdyaXRlX21kcihzbWMsTURSX1JFVkVSU0UoYVsxXSkpIDsKKwl3cml0ZV9tZHIoc21jLGxlMzJfdG9fY3B1KGFbMV0pKSA7CiAKIAlvdXRwdyhGTV9BKEZNX1NBQkMpLHNtYy0+aHcuZnAuZmlmby5yYmNfcmFtX3N0YXJ0ICsgREJFQUNPTl9GUkFNRV9PRkYpIDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaC9mcGx1c3RtLmggYi9kcml2ZXJzL25ldC9za2ZwL2gvZnBsdXN0bS5oCmluZGV4IDk4YmJmNjUuLjZkNzM4ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvaC9mcGx1c3RtLmgKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9oL2ZwbHVzdG0uaApAQCAtNTAsMTIgKzUwLDEyIEBACiAgKglUcmFuc21pdCBEZXNjcmlwdG9yIHN0cnVjdAogICovCiBzdHJ1Y3Qgc19zbXRfZnBfdHhkIHsKLQl1X2ludCB0eGRfdGJjdHJsIDsJCS8qIHRyYW5zbWl0IGJ1ZmZlciBjb250cm9sICovCi0JdV9pbnQgdHhkX3R4ZHNjciA7CQkvKiB0cmFuc21pdCBmcmFtZSBzdGF0dXMgd29yZCAqLwotCXVfaW50IHR4ZF90YmFkciA7CQkvKiBwaHlzaWNhbCB0eCBidWZmZXIgYWRkcmVzcyAqLwotCXVfaW50IHR4ZF9udGRhZHIgOwkJLyogcGh5c2ljYWwgcG9pbnRlciB0byB0aGUgbmV4dCBUeEQgKi8KKwlfX2xlMzIgdHhkX3RiY3RybCA7CQkvKiB0cmFuc21pdCBidWZmZXIgY29udHJvbCAqLworCV9fbGUzMiB0eGRfdHhkc2NyIDsJCS8qIHRyYW5zbWl0IGZyYW1lIHN0YXR1cyB3b3JkICovCisJX19sZTMyIHR4ZF90YmFkciA7CQkvKiBwaHlzaWNhbCB0eCBidWZmZXIgYWRkcmVzcyAqLworCV9fbGUzMiB0eGRfbnRkYWRyIDsJCS8qIHBoeXNpY2FsIHBvaW50ZXIgdG8gdGhlIG5leHQgVHhEICovCiAjaWZkZWYJRU5BXzY0QklUX1NVUAotCXVfaW50IHR4ZF90YmFkcl9oaSA7CQkvKiBwaHlzaWNhbCB0eCBidWZmZXIgYWRkciAoaGlnaCBkd29yZCkqLworCV9fbGUzMiB0eGRfdGJhZHJfaGkgOwkJLyogcGh5c2ljYWwgdHggYnVmZmVyIGFkZHIgKGhpZ2ggZHdvcmQpKi8KICNlbmRpZgogCWNoYXIgZmFyICp0eGRfdmlydCA7CQkvKiB2aXJ0dWFsIHBvaW50ZXIgdG8gdGhlIGRhdGEgZnJhZyAqLwogCQkJCQkvKiB2aXJ0IHBvaW50ZXIgdG8gdGhlIG5leHQgVHhEICovCkBAIC02NywxMiArNjcsMTIgQEAKICAqCVJlY2VpdmUgRGVzY3JpcHRvciBzdHJ1Y3QKICAqLwogc3RydWN0IHNfc210X2ZwX3J4ZCB7Ci0JdV9pbnQgcnhkX3JiY3RybCA7CQkvKiByZWNlaXZlIGJ1ZmZlciBjb250cm9sICovCi0JdV9pbnQgcnhkX3Jmc3cgOwkJLyogcmVjZWl2ZSBmcmFtZSBzdGF0dXMgd29yZCAqLwotCXVfaW50IHJ4ZF9yYmFkciA7CQkvKiBwaHlzaWNhbCByeCBidWZmZXIgYWRkcmVzcyAqLwotCXVfaW50IHJ4ZF9ucmRhZHIgOwkJLyogcGh5c2ljYWwgcG9pbnRlciB0byB0aGUgbmV4dCBSeEQgKi8KKwlfX2xlMzIgcnhkX3JiY3RybCA7CQkvKiByZWNlaXZlIGJ1ZmZlciBjb250cm9sICovCisJX19sZTMyIHJ4ZF9yZnN3IDsJCS8qIHJlY2VpdmUgZnJhbWUgc3RhdHVzIHdvcmQgKi8KKwlfX2xlMzIgcnhkX3JiYWRyIDsJCS8qIHBoeXNpY2FsIHJ4IGJ1ZmZlciBhZGRyZXNzICovCisJX19sZTMyIHJ4ZF9ucmRhZHIgOwkJLyogcGh5c2ljYWwgcG9pbnRlciB0byB0aGUgbmV4dCBSeEQgKi8KICNpZmRlZglFTkFfNjRCSVRfU1VQCi0JdV9pbnQgcnhkX3JiYWRyX2hpIDsJCS8qIHBoeXNpY2FsIHR4IGJ1ZmZlciBhZGRyIChoaWdoIGR3b3JkKSovCisJX19sZTMyIHJ4ZF9yYmFkcl9oaSA7CQkvKiBwaHlzaWNhbCB0eCBidWZmZXIgYWRkciAoaGlnaCBkd29yZCkqLwogI2VuZGlmCiAJY2hhciBmYXIgKnJ4ZF92aXJ0IDsJCS8qIHZpcnR1YWwgcG9pbnRlciB0byB0aGUgZGF0YSBmcmFnICovCiAJCQkJCS8qIHZpcnQgcG9pbnRlciB0byB0aGUgbmV4dCBSeEQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwppbmRleCA0NmUzMzkzLi40MjE4ZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKICNpZglkZWZpbmVkKE5ESVNfT1MyKSB8fCBkZWZpbmVkKE9ESTIpCiAjZGVmaW5lIENSX1JFQUQodmFyKQkoKHZhcikgJiAweGZmZmYwMDAwIHwgKCh2YXIpICYgMHhmZmZmKSkKICNlbHNlCi0jZGVmaW5lIENSX1JFQUQodmFyKQkodV9sb25nKSh2YXIpCisjZGVmaW5lIENSX1JFQUQodmFyKQkoX19sZTMyKSh2YXIpCiAjZW5kaWYKIAogI2RlZmluZSBJTUFTS19TTE9XCShJU19QTElOVDEgfCBJU19QTElOVDIgfCBJU19USU1JTlQgfCBJU19UT0tFTiB8IFwKQEAgLTM0MywxNiArMzQzLDE2IEBACiAJZm9yIChpPWNvdW50LTEsIGQxPXN0YXJ0OyBpIDsgaS0tKSB7CiAJCWQyID0gZDEgOwogCQlkMSsrIDsJCS8qIGRlc2NyIGlzIG93bmVkIGJ5IHRoZSBob3N0ICovCi0JCWQyLT5yLnJ4ZF9yYmN0cmwgPSBBSVhfUkVWRVJTRShCTVVfQ0hFQ0spIDsKKwkJZDItPnIucnhkX3JiY3RybCA9IGNwdV90b19sZTMyKEJNVV9DSEVDSykgOwogCQlkMi0+ci5yeGRfbmV4dCA9ICZkMS0+ciA7CiAJCXBoeXMgPSBtYWNfZHJ2X3ZpcnQycGh5cyhzbWMsKHZvaWQgKilkMSkgOwotCQlkMi0+ci5yeGRfbnJkYWRyID0gQUlYX1JFVkVSU0UocGh5cykgOworCQlkMi0+ci5yeGRfbnJkYWRyID0gY3B1X3RvX2xlMzIocGh5cykgOwogCX0KIAlEQl9HRU4oImRlc2NyIHJpbmcgZW5kcyBhdCA9ICV4ICIsKHZvaWQgKilkMSwwLDMpIDsKLQlkMS0+ci5yeGRfcmJjdHJsID0gQUlYX1JFVkVSU0UoQk1VX0NIRUNLKSA7CisJZDEtPnIucnhkX3JiY3RybCA9IGNwdV90b19sZTMyKEJNVV9DSEVDSykgOwogCWQxLT5yLnJ4ZF9uZXh0ID0gJnN0YXJ0LT5yIDsKIAlwaHlzID0gbWFjX2Rydl92aXJ0MnBoeXMoc21jLCh2b2lkICopc3RhcnQpIDsKLQlkMS0+ci5yeGRfbnJkYWRyID0gQUlYX1JFVkVSU0UocGh5cykgOworCWQxLT5yLnJ4ZF9ucmRhZHIgPSBjcHVfdG9fbGUzMihwaHlzKSA7CiAKIAlmb3IgKGk9Y291bnQsIGQxPXN0YXJ0OyBpIDsgaS0tKSB7CiAJCURSVl9CVUZfRkxVU0goJmQxLT5yLERESV9ETUFfU1lOQ19GT1JERVYpIDsKQEAgLTM3Niw3ICszNzYsNyBAQAogCURCX0dFTigiSW5pdCBhc3luYyBUeEQgcmluZywgJWQgVHhEcyAiLEhXTV9BU1lOQ19UWERfQ09VTlQsMCwzKSA7CiAJKHZvaWQpaW5pdF9kZXNjcl9yaW5nKHNtYywodW5pb24gc19mcF9kZXNjciB2b2xhdGlsZSAqKWRzLAogCQlIV01fQVNZTkNfVFhEX0NPVU5UKSA7Ci0JcGh5cyA9IEFJWF9SRVZFUlNFKGRzLT50eGRfbnRkYWRyKSA7CisJcGh5cyA9IGxlMzJfdG9fY3B1KGRzLT50eGRfbnRkYWRyKSA7CiAJZHMrKyA7CiAJcXVldWUtPnR4X2N1cnJfcHV0ID0gcXVldWUtPnR4X2N1cnJfZ2V0ID0gZHMgOwogCWRzLS0gOwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJREJfR0VOKCJJbml0IHN5bmMgVHhEIHJpbmcsICVkIFR4RHMgIixIV01fU1lOQ19UWERfQ09VTlQsMCwzKSA7CiAJKHZvaWQpaW5pdF9kZXNjcl9yaW5nKHNtYywodW5pb24gc19mcF9kZXNjciB2b2xhdGlsZSAqKWRzLAogCQlIV01fU1lOQ19UWERfQ09VTlQpIDsKLQlwaHlzID0gQUlYX1JFVkVSU0UoZHMtPnR4ZF9udGRhZHIpIDsKKwlwaHlzID0gbGUzMl90b19jcHUoZHMtPnR4ZF9udGRhZHIpIDsKIAlkcysrIDsKIAlxdWV1ZS0+dHhfY3Vycl9wdXQgPSBxdWV1ZS0+dHhfY3Vycl9nZXQgPSBkcyA7CiAJcXVldWUtPnR4X2ZyZWUgPSBIV01fU1lOQ19UWERfQ09VTlQgOwpAQCAtNDEyLDcgKzQxMiw3IEBACiAJREJfR0VOKCJJbml0IFJ4RCByaW5nLCAlZCBSeERzICIsU01UX1IxX1JYRF9DT1VOVCwwLDMpIDsKIAkodm9pZClpbml0X2Rlc2NyX3Jpbmcoc21jLCh1bmlvbiBzX2ZwX2Rlc2NyIHZvbGF0aWxlICopZHMsCiAJCVNNVF9SMV9SWERfQ09VTlQpIDsKLQlwaHlzID0gQUlYX1JFVkVSU0UoZHMtPnJ4ZF9ucmRhZHIpIDsKKwlwaHlzID0gbGUzMl90b19jcHUoZHMtPnJ4ZF9ucmRhZHIpIDsKIAlkcysrIDsKIAlxdWV1ZS0+cnhfY3Vycl9wdXQgPSBxdWV1ZS0+cnhfY3Vycl9nZXQgPSBkcyA7CiAJcXVldWUtPnJ4X2ZyZWUgPSBTTVRfUjFfUlhEX0NPVU5UIDsKQEAgLTYwNywxMiArNjA3LDEyIEBACiAJZm9yIChpID0gdHhfdXNlZCtxdWV1ZS0+dHhfZnJlZS0xIDsgaSA7IGktLSApIHsKIAkJdCA9IHQtPnR4ZF9uZXh0IDsKIAl9Ci0JcGh5cyA9IEFJWF9SRVZFUlNFKHQtPnR4ZF9udGRhZHIpIDsKKwlwaHlzID0gbGUzMl90b19jcHUodC0+dHhkX250ZGFkcikgOwogCiAJdCA9IHF1ZXVlLT50eF9jdXJyX2dldCA7CiAJd2hpbGUgKHR4X3VzZWQpIHsKIAkJRFJWX0JVRl9GTFVTSCh0LERESV9ETUFfU1lOQ19GT1JDUFUpIDsKLQkJdGJjdHJsID0gQUlYX1JFVkVSU0UodC0+dHhkX3RiY3RybCkgOworCQl0YmN0cmwgPSBsZTMyX3RvX2NwdSh0LT50eGRfdGJjdHJsKSA7CiAKIAkJaWYgKHRiY3RybCAmIEJNVV9PV04pIHsKIAkJCWlmICh0YmN0cmwgJiBCTVVfU1RGKSB7CkBAIC02MjIsMTAgKzYyMiwxMCBAQAogCQkJCS8qCiAJCQkJICogcmVwYWlyIHRoZSBkZXNjcmlwdG9yCiAJCQkJICovCi0JCQkJdC0+dHhkX3RiY3RybCAmPSBBSVhfUkVWRVJTRSh+Qk1VX09XTikgOworCQkJCXQtPnR4ZF90YmN0cmwgJj0gfmNwdV90b19sZTMyKEJNVV9PV04pIDsKIAkJCX0KIAkJfQotCQlwaHlzID0gQUlYX1JFVkVSU0UodC0+dHhkX250ZGFkcikgOworCQlwaHlzID0gbGUzMl90b19jcHUodC0+dHhkX250ZGFkcikgOwogCQlEUlZfQlVGX0ZMVVNIKHQsRERJX0RNQV9TWU5DX0ZPUkRFVikgOwogCQl0ID0gdC0+dHhkX25leHQgOwogCQl0eF91c2VkLS0gOwpAQCAtNjU5LDEyICs2NTksMTIgQEAKIAlmb3IgKGkgPSBTTVRfUjFfUlhEX0NPVU5ULTEgOyBpIDsgaS0tICkgewogCQlyID0gci0+cnhkX25leHQgOwogCX0KLQlwaHlzID0gQUlYX1JFVkVSU0Uoci0+cnhkX25yZGFkcikgOworCXBoeXMgPSBsZTMyX3RvX2NwdShyLT5yeGRfbnJkYWRyKSA7CiAKIAlyID0gcXVldWUtPnJ4X2N1cnJfZ2V0IDsKIAl3aGlsZSAocnhfdXNlZCkgewogCQlEUlZfQlVGX0ZMVVNIKHIsRERJX0RNQV9TWU5DX0ZPUkNQVSkgOwotCQlyYmN0cmwgPSBBSVhfUkVWRVJTRShyLT5yeGRfcmJjdHJsKSA7CisJCXJiY3RybCA9IGxlMzJfdG9fY3B1KHItPnJ4ZF9yYmN0cmwpIDsKIAogCQlpZiAocmJjdHJsICYgQk1VX09XTikgewogCQkJaWYgKHJiY3RybCAmIEJNVV9TVEYpIHsKQEAgLTY3NCwxMCArNjc0LDEwIEBACiAJCQkJLyoKIAkJCQkgKiByZXBhaXIgdGhlIGRlc2NyaXB0b3IKIAkJCQkgKi8KLQkJCQlyLT5yeGRfcmJjdHJsICY9IEFJWF9SRVZFUlNFKH5CTVVfT1dOKSA7CisJCQkJci0+cnhkX3JiY3RybCAmPSB+Y3B1X3RvX2xlMzIoQk1VX09XTikgOwogCQkJfQogCQl9Ci0JCXBoeXMgPSBBSVhfUkVWRVJTRShyLT5yeGRfbnJkYWRyKSA7CisJCXBoeXMgPSBsZTMyX3RvX2NwdShyLT5yeGRfbnJkYWRyKSA7CiAJCURSVl9CVUZfRkxVU0gocixERElfRE1BX1NZTkNfRk9SREVWKSA7CiAJCXIgPSByLT5yeGRfbmV4dCA7CiAJCXJ4X3VzZWQtLSA7CkBAIC0xMDk0LDggKzEwOTQsNyBAQAogCQlkbyB7CiAJCQlEQl9SWCgiQ2hlY2sgUnhEICV4IGZvciBPV04gYW5kIEVPRiIsKHZvaWQgKilyLDAsNSkgOwogCQkJRFJWX0JVRl9GTFVTSChyLERESV9ETUFfU1lOQ19GT1JDUFUpIDsKLQkJCXJiY3RybCA9IENSX1JFQUQoci0+cnhkX3JiY3RybCkgOwotCQkJcmJjdHJsID0gQUlYX1JFVkVSU0UocmJjdHJsKSA7CisJCQlyYmN0cmwgPSBsZTMyX3RvX2NwdShDUl9SRUFEKHItPnJ4ZF9yYmN0cmwpKTsKIAogCQkJaWYgKHJiY3RybCAmIEJNVV9PV04pIHsKIAkJCQlORERfVFJBQ0UoIlJIeEUiLHIscmZzdyxyYmN0cmwpIDsKQEAgLTExMTgsNyArMTExNyw3IEBACiAJCQkJc21jLT5vcy5od20uZGV0ZWNfY291bnQgPSAwIDsKIAkJCQlnb3RvIHJ4X2VuZCA7CiAJCQl9Ci0JCQlyZnN3ID0gQUlYX1JFVkVSU0Uoci0+cnhkX3Jmc3cpIDsKKwkJCXJmc3cgPSBsZTMyX3RvX2NwdShyLT5yeGRfcmZzdykgOwogCQkJaWYgKChyYmN0cmwgJiBCTVVfU1RGKSAhPSAoKHJiY3RybCAmIEJNVV9TVF9CVUYpIDw8NSkpIHsKIAkJCQkvKgogCQkJCSAqIFRoZSBCTVVfU1RGIGJpdCBpcyBkZWxldGVkLCAxIGZyYW1lIGlzCkBAIC0xMTUxLDcgKzExNTAsNyBAQAogCQkvKiBtYXkgYmUgbmV4dCAyIERSVl9CVUZfRkxVU0goKSBjYW4gYmUgc2tpcHBlZCwgYmVjYXVzZSAqLwogCQkvKiBCTVVfU1RfQlVGIHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhlIEFTSUMgKi8KIAkJRFJWX0JVRl9GTFVTSChyLERESV9ETUFfU1lOQ19GT1JDUFUpIDsKLQkJd2hpbGUgKHJ4X3VzZWQgJiYgIShyLT5yeGRfcmJjdHJsICYgQUlYX1JFVkVSU0UoQk1VX1NUX0JVRikpKSB7CisJCXdoaWxlIChyeF91c2VkICYmICEoci0+cnhkX3JiY3RybCAmIGNwdV90b19sZTMyKEJNVV9TVF9CVUYpKSkgewogCQkJREJfUlgoIkNoZWNrIFNURiBiaXQgaW4gJXgiLCh2b2lkICopciwwLDUpIDsKIAkJCXIgPSByLT5yeGRfbmV4dCA7CiAJCQlEUlZfQlVGX0ZMVVNIKHIsRERJX0RNQV9TWU5DX0ZPUkNQVSkgOwpAQCAtMTE3MSw3ICsxMTcwLDcgQEAKIAkJLyoKIAkJICogQVNJQyBFcnJhdGEgbm8uIDcgKFNURiAtIEJpdCBCdWcpCiAJCSAqLwotCQlyeGQtPnJ4ZF9yYmN0cmwgJj0gQUlYX1JFVkVSU0UofkJNVV9TVEYpIDsKKwkJcnhkLT5yeGRfcmJjdHJsICY9IGNwdV90b19sZTMyKH5CTVVfU1RGKSA7CiAKIAkJZm9yIChyPXJ4ZCwgaT1mcmFnX2NvdW50IDsgaSA7IHI9ci0+cnhkX25leHQsIGktLSl7CiAJCQlEQl9SWCgiZG1hX2NvbXBsZXRlIGZvciBSeEQgJXgiLCh2b2lkICopciwwLDUpIDsKQEAgLTEyODcsNyArMTI4Niw3IEBACiAJCQlod21fY3B5X3J4ZDJtYihyeGQsZGF0YSxsZW4pIDsKICNlbHNlCiAJCQlmb3IgKHI9cnhkLCBpPXVzZWRfZnJhZ3MgOyBpIDsgcj1yLT5yeGRfbmV4dCwgaS0tKXsKLQkJCQluID0gQUlYX1JFVkVSU0Uoci0+cnhkX3JiY3RybCkgJiBSRF9MRU5HVEggOworCQkJCW4gPSBsZTMyX3RvX2NwdShyLT5yeGRfcmJjdHJsKSAmIFJEX0xFTkdUSCA7CiAJCQkJREJfUlgoImNwIFNNVCBmcmFtZSB0byBtYjogbGVuID0gJWQiLG4sMCw2KSA7CiAJCQkJbWVtY3B5KGRhdGEsci0+cnhkX3ZpcnQsbikgOwogCQkJCWRhdGEgKz0gbiA7CkBAIC0xNDI2LDE0ICsxNDI1LDE0IEBACiAJCSBpbnQgZnJhbWVfc3RhdHVzKQogewogCXN0cnVjdCBzX3NtdF9mcF9yeGQgdm9sYXRpbGUgKnIgOwotCXVfaW50CXJiY3RybCA7CisJX19sZTMyCXJiY3RybDsKIAogCU5ERF9UUkFDRSgiUkhmQiIsdmlydCxsZW4sZnJhbWVfc3RhdHVzKSA7CiAJREJfUlgoImh3bV9yeF9mcmFnOiBsZW4gPSAlZCwgZnJhbWVfc3RhdHVzID0gJXhcbiIsbGVuLGZyYW1lX3N0YXR1cywyKSA7CiAJciA9IHNtYy0+aHcuZnAucnhfcVtRVUVVRV9SMV0ucnhfY3Vycl9wdXQgOwogCXItPnJ4ZF92aXJ0ID0gdmlydCA7Ci0Jci0+cnhkX3JiYWRyID0gQUlYX1JFVkVSU0UocGh5cykgOwotCXJiY3RybCA9IEFJWF9SRVZFUlNFKCAoKCh1X2xvbmcpZnJhbWVfc3RhdHVzICYKKwlyLT5yeGRfcmJhZHIgPSBjcHVfdG9fbGUzMihwaHlzKSA7CisJcmJjdHJsID0gY3B1X3RvX2xlMzIoICgoKF9fdTMyKWZyYW1lX3N0YXR1cyAmCiAJCShGSVJTVF9GUkFHfExBU1RfRlJBRykpPDwyNikgfAogCQkoKCh1X2xvbmcpIGZyYW1lX3N0YXR1cyAmIEZJUlNUX0ZSQUcpIDw8IDIxKSB8CiAJCUJNVV9PV04gfCBCTVVfQ0hFQ0sgfCBCTVVfRU5fSVJRX0VPRiB8IGxlbikgOwpAQCAtMTQ0NCw3ICsxNDQzLDcgQEAKIAlzbWMtPmh3LmZwLnJ4X3FbUVVFVUVfUjFdLnJ4X2ZyZWUtLSA7CiAJc21jLT5ody5mcC5yeF9xW1FVRVVFX1IxXS5yeF91c2VkKysgOwogCXNtYy0+aHcuZnAucnhfcVtRVUVVRV9SMV0ucnhfY3Vycl9wdXQgPSByLT5yeGRfbmV4dCA7Ci0JTkREX1RSQUNFKCJSSGZFIixyLEFJWF9SRVZFUlNFKHItPnJ4ZF9yYmFkciksMCkgOworCU5ERF9UUkFDRSgiUkhmRSIscixsZTMyX3RvX2NwdShyLT5yeGRfcmJhZHIpLDApIDsKIH0KIAogLyoKQEAgLTE0OTQsMTUgKzE0OTMsMTUgQEAKIAl3aGlsZSAocXVldWUtPnJ4X3VzZWQpIHsKIAkJRFJWX0JVRl9GTFVTSChyLERESV9ETUFfU1lOQ19GT1JDUFUpIDsKIAkJREJfUlgoInN3aXRjaCBPV04gYml0IG9mIFJ4RCAweCV4ICIsciwwLDUpIDsKLQkJci0+cnhkX3JiY3RybCAmPSBBSVhfUkVWRVJTRSh+Qk1VX09XTikgOworCQlyLT5yeGRfcmJjdHJsICY9IH5jcHVfdG9fbGUzMihCTVVfT1dOKSA7CiAJCWZyYWdfY291bnQgPSAxIDsKIAkJRFJWX0JVRl9GTFVTSChyLERESV9ETUFfU1lOQ19GT1JERVYpIDsKIAkJciA9IHItPnJ4ZF9uZXh0IDsKIAkJRFJWX0JVRl9GTFVTSChyLERESV9ETUFfU1lOQ19GT1JDUFUpIDsKIAkJd2hpbGUgKHIgIT0gcXVldWUtPnJ4X2N1cnJfcHV0ICYmCi0JCQkhKHItPnJ4ZF9yYmN0cmwgJiBBSVhfUkVWRVJTRShCTVVfU1RfQlVGKSkpIHsKKwkJCSEoci0+cnhkX3JiY3RybCAmIGNwdV90b19sZTMyKEJNVV9TVF9CVUYpKSkgewogCQkJREJfUlgoIkNoZWNrIFNURiBiaXQgaW4gJXgiLCh2b2lkICopciwwLDUpIDsKLQkJCXItPnJ4ZF9yYmN0cmwgJj0gQUlYX1JFVkVSU0UofkJNVV9PV04pIDsKKwkJCXItPnJ4ZF9yYmN0cmwgJj0gfmNwdV90b19sZTMyKEJNVV9PV04pIDsKIAkJCURSVl9CVUZfRkxVU0gocixERElfRE1BX1NZTkNfRk9SREVWKSA7CiAJCQlyID0gci0+cnhkX25leHQgOwogCQkJRFJWX0JVRl9GTFVTSChyLERESV9ETUFfU1lOQ19GT1JDUFUpIDsKQEAgLTE2NDAsNyArMTYzOSw3IEBACiB7CiAJc3RydWN0IHNfc210X2ZwX3R4ZCB2b2xhdGlsZSAqdCA7CiAJc3RydWN0IHNfc210X3R4X3F1ZXVlICpxdWV1ZSA7Ci0JdV9pbnQJdGJjdHJsIDsKKwlfX2xlMzIJdGJjdHJsIDsKIAogCXF1ZXVlID0gc21jLT5vcy5od20udHhfcCA7CiAKQEAgLTE2NTcsOSArMTY1Niw5IEBACiAJCS8qICcqdCcgaXMgYWxyZWFkeSBkZWZpbmVkICovCiAJCURCX1RYKCJMQU5fVFg6IFR4RCA9ICV4LCB2aXJ0ID0gJXggIix0LHZpcnQsMykgOwogCQl0LT50eGRfdmlydCA9IHZpcnQgOwotCQl0LT50eGRfdHhkc2NyID0gQUlYX1JFVkVSU0Uoc21jLT5vcy5od20udHhfZGVzY3IpIDsKLQkJdC0+dHhkX3RiYWRyID0gQUlYX1JFVkVSU0UocGh5cykgOwotCQl0YmN0cmwgPSBBSVhfUkVWRVJTRSgoKCh1X2xvbmcpZnJhbWVfc3RhdHVzICYKKwkJdC0+dHhkX3R4ZHNjciA9IGNwdV90b19sZTMyKHNtYy0+b3MuaHdtLnR4X2Rlc2NyKSA7CisJCXQtPnR4ZF90YmFkciA9IGNwdV90b19sZTMyKHBoeXMpIDsKKwkJdGJjdHJsID0gY3B1X3RvX2xlMzIoKCgoX191MzIpZnJhbWVfc3RhdHVzICYKIAkJCShGSVJTVF9GUkFHfExBU1RfRlJBR3xFTl9JUlFfRU9GKSk8PCAyNikgfAogCQkJQk1VX09XTnxCTVVfQ0hFQ0sgfGxlbikgOwogCQl0LT50eGRfdGJjdHJsID0gdGJjdHJsIDsKQEAgLTE4MjYsNyArMTgyNSw3IEBACiAJc3RydWN0IHNfc210X3R4X3F1ZXVlICpxdWV1ZSA7CiAJc3RydWN0IHNfc210X2ZwX3R4ZCB2b2xhdGlsZSAqdCA7CiAJdV9sb25nCXBoeXMgOwotCXVfaW50CXRiY3RybCA7CisJX19sZTMyCXRiY3RybDsKIAogCU5ERF9UUkFDRSgiVEhTQiIsbWIsZmMsMCkgOwogCURCX1RYKCJzbXRfc2VuZF9tYnVmOiBtYiA9IDB4JXgsIGZjID0gMHgleCIsbWIsZmMsNCkgOwpAQCAtMTg5NCwxNCArMTg5MywxNCBAQAogCQkJREJfVFgoImluaXQgVHhEID0gMHgleCIsKHZvaWQgKil0LDAsNSkgOwogCQkJaWYgKGkgPT0gZnJhZ19jb3VudC0xKSB7CiAJCQkJZnJhbWVfc3RhdHVzIHw9IExBU1RfRlJBRyA7Ci0JCQkJdC0+dHhkX3R4ZHNjciA9IEFJWF9SRVZFUlNFKFRYX0RFU0NSSVBUT1IgfAotCQkJCQkoKCh1X2xvbmcpKG1iLT5zbV9sZW4tMSkmMykgPDwgMjcpKSA7CisJCQkJdC0+dHhkX3R4ZHNjciA9IGNwdV90b19sZTMyKFRYX0RFU0NSSVBUT1IgfAorCQkJCQkoKChfX3UzMikobWItPnNtX2xlbi0xKSYzKSA8PCAyNykpIDsKIAkJCX0KIAkJCXQtPnR4ZF92aXJ0ID0gdmlydFtpXSA7CiAJCQlwaHlzID0gZG1hX21hc3RlcihzbWMsICh2b2lkIGZhciAqKXZpcnRbaV0sCiAJCQkJZnJhZ19sZW5baV0sIERNQV9SRHxTTVRfQlVGKSA7Ci0JCQl0LT50eGRfdGJhZHIgPSBBSVhfUkVWRVJTRShwaHlzKSA7Ci0JCQl0YmN0cmwgPSBBSVhfUkVWRVJTRSgoKCh1X2xvbmcpIGZyYW1lX3N0YXR1cyAmCisJCQl0LT50eGRfdGJhZHIgPSBjcHVfdG9fbGUzMihwaHlzKSA7CisJCQl0YmN0cmwgPSBjcHVfdG9fbGUzMigoKChfX3UzMilmcmFtZV9zdGF0dXMgJgogCQkJCShGSVJTVF9GUkFHfExBU1RfRlJBRykpIDw8IDI2KSB8CiAJCQkJQk1VX09XTiB8IEJNVV9DSEVDSyB8IEJNVV9TTVRfVFggfGZyYWdfbGVuW2ldKSA7CiAJCQl0LT50eGRfdGJjdHJsID0gdGJjdHJsIDsKQEAgLTE5NzEsOCArMTk3MCw3IEBACiAJCQlkbyB7CiAJCQkJRFJWX0JVRl9GTFVTSCh0MSxERElfRE1BX1NZTkNfRk9SQ1BVKSA7CiAJCQkJREJfVFgoImNoZWNrIE9XTi9FT0YgYml0IG9mIFR4RCAweCV4Iix0MSwwLDUpIDsKLQkJCQl0YmN0cmwgPSBDUl9SRUFEKHQxLT50eGRfdGJjdHJsKSA7Ci0JCQkJdGJjdHJsID0gQUlYX1JFVkVSU0UodGJjdHJsKSA7CisJCQkJdGJjdHJsID0gbGUzMl90b19jcHUoQ1JfUkVBRCh0MS0+dHhkX3RiY3RybCkpOwogCiAJCQkJaWYgKHRiY3RybCAmIEJNVV9PV04gfHwgIXF1ZXVlLT50eF91c2VkKXsKIAkJCQkJREJfVFgoIkVuZCBvZiBUeERzIHF1ZXVlICVkIixpLDAsNCkgOwpAQCAtMTk4NCw3ICsxOTgyLDcgQEAKIAogCQkJdDEgPSBxdWV1ZS0+dHhfY3Vycl9nZXQgOwogCQkJZm9yIChuID0gZnJhZ19jb3VudDsgbjsgbi0tKSB7Ci0JCQkJdGJjdHJsID0gQUlYX1JFVkVSU0UodDEtPnR4ZF90YmN0cmwpIDsKKwkJCQl0YmN0cmwgPSBsZTMyX3RvX2NwdSh0MS0+dHhkX3RiY3RybCkgOwogCQkJCWRtYV9jb21wbGV0ZShzbWMsCiAJCQkJCSh1bmlvbiBzX2ZwX2Rlc2NyIHZvbGF0aWxlICopIHQxLAogCQkJCQkoaW50KSAoRE1BX1JEIHwKQEAgLTIwNjQsNyArMjA2Miw3IEBACiAJCXdoaWxlICh0eF91c2VkKSB7CiAJCQlEUlZfQlVGX0ZMVVNIKHQsRERJX0RNQV9TWU5DX0ZPUkNQVSkgOwogCQkJREJfVFgoInN3aXRjaCBPV04gYml0IG9mIFR4RCAweCV4ICIsdCwwLDUpIDsKLQkJCXQtPnR4ZF90YmN0cmwgJj0gQUlYX1JFVkVSU0UofkJNVV9PV04pIDsKKwkJCXQtPnR4ZF90YmN0cmwgJj0gfmNwdV90b19sZTMyKEJNVV9PV04pIDsKIAkJCURSVl9CVUZfRkxVU0godCxERElfRE1BX1NZTkNfRk9SREVWKSA7CiAJCQl0ID0gdC0+dHhkX25leHQgOwogCQkJdHhfdXNlZC0tIDsKQEAgLTIwODYsMTAgKzIwODQsMTAgQEAKIAkJICogdHhfY3Vycl9nZXQgYW5kIHR4X2N1cnJfcHV0IHRvIHRoaXMgcG9zaXRpb24KIAkJICovCiAJCWlmIChpID09IFFVRVVFX1MpIHsKLQkJCW91dHBkKEFERFIoQjVfWFNfREEpLEFJWF9SRVZFUlNFKHQtPnR4ZF9udGRhZHIpKSA7CisJCQlvdXRwZChBRERSKEI1X1hTX0RBKSxsZTMyX3RvX2NwdSh0LT50eGRfbnRkYWRyKSkgOwogCQl9CiAJCWVsc2UgewotCQkJb3V0cGQoQUREUihCNV9YQV9EQSksQUlYX1JFVkVSU0UodC0+dHhkX250ZGFkcikpIDsKKwkJCW91dHBkKEFERFIoQjVfWEFfREEpLGxlMzJfdG9fY3B1KHQtPnR4ZF9udGRhZHIpKSA7CiAJCX0KIAogCQlxdWV1ZS0+dHhfY3Vycl9wdXQgPSBxdWV1ZS0+dHhfY3Vycl9nZXQtPnR4ZF9uZXh0IDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCmluZGV4IDdjZjliOWYuLmEyYjA5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAKIAlQUklOVEsoS0VSTl9JTkZPICJlbnRlcmluZyBza2ZwX29wZW5cbiIpOwogCS8qIFJlZ2lzdGVyIElSUSAtIHN1cHBvcnQgc2hhcmVkIGludGVycnVwdHMgYnkgcGFzc2luZyBkZXZpY2UgcHRyICovCi0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICh2b2lkICopIHNrZnBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc2tmcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTE2NDQsNyArMTY0NCw3IEBACiAJCS8vIEdldCBSSUYgbGVuZ3RoIGZyb20gUm91dGluZyBDb250cm9sIChSQykgZmllbGQuCiAJCWNwID0gdmlydCArIEZERElfTUFDX0hEUl9MRU47CS8vIFBvaW50IGJlaGluZCBNQUMgaGVhZGVyLgogCi0JCXJpID0gbnRvaHMoKigodW5zaWduZWQgc2hvcnQgKikgY3ApKTsKKwkJcmkgPSBudG9ocygqKChfX2JlMTYgKikgY3ApKTsKIAkJUmlmTGVuZ3RoID0gcmkgJiBGRERJX1JDRl9MRU5fTUFTSzsKIAkJaWYgKGxlbiA8IChpbnQpIChGRERJX01BQ19IRFJfTEVOICsgUmlmTGVuZ3RoKSkgewogCQkJcHJpbnRrKCJmZGRpOiBJbnZhbGlkIFJJRi5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDE4NmViOGUuLjJlMjZkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTMxOTksMTIgKzMxOTksMTQgQEAKIAlza2dlX3dyaXRlOChodywgUV9BRERSKHJ4cWFkZHJbc2tnZS0+cG9ydF0sIFFfQ1NSKSwgQ1NSX1NUQVJUKTsKIAogCWlmICh3b3JrX2RvbmUgPCB0b19kbykgewotCQlzcGluX2xvY2tfaXJxKCZody0+aHdfbG9jayk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5od19sb2NrLCBmbGFncyk7CiAJCV9fbmV0aWZfcnhfY29tcGxldGUoZGV2LCBuYXBpKTsKIAkJaHctPmludHJfbWFzayB8PSBuYXBpbWFza1tza2dlLT5wb3J0XTsKIAkJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKIAkJc2tnZV9yZWFkMzIoaHcsIEIwX0lNU0spOwotCQlzcGluX3VubG9ja19pcnEoJmh3LT5od19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmh3X2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDlhNjI5NTkuLmYyMjZiY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogCSJFQyIsCQkvKiAweGI2ICovCiAJIkZFIiwJCS8qIDB4YjcgKi8KIAkiRkUrIiwJCS8qIDB4YjggKi8KKwkiU3VwcmVtZSIsCS8qIDB4YjkgKi8KIH07CiAKIHN0YXRpYyB2b2lkIHNreTJfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTU3Miw4ICs1NzMsOSBAQAogCWRlZmF1bHQ6CiAJCS8qIHNldCBUeCBMRUQgKExFRF9UWCkgdG8gYmxpbmsgbW9kZSBvbiBSeCBPUiBUeCBhY3Rpdml0eSAqLwogCQlsZWRjdHJsIHw9IFBIWV9NX0xFRF9CTElOS19SVChCTElOS184NE1TKSB8IFBIWV9NX0xFRENfVFhfQ1RSTDsKKwogCQkvKiB0dXJuIG9mZiB0aGUgUnggTEVEIChMRURfUlgpICovCi0JCWxlZG92ZXIgJj0gflBIWV9NX0xFRF9NT19SWDsKKwkJbGVkb3ZlciB8PSBQSFlfTV9MRURfTU9fUlgoTU9fTEVEX09GRik7CiAJfQogCiAJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSAmJgpAQCAtNjAyLDcgKzYwNCw3IEBACiAKIAkJaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFIHx8IHNreTItPnNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJLyogdHVybiBvbiAxMDAgTWJwcyBMRUQgKExFRF9MSU5LMTAwKSAqLwotCQkJbGVkb3ZlciB8PSBQSFlfTV9MRURfTU9fMTAwOworCQkJbGVkb3ZlciB8PSBQSFlfTV9MRURfTU9fMTAwKE1PX0xFRF9PTik7CiAJCX0KIAogCQlpZiAobGVkb3ZlcikKQEAgLTMzMjIsODIgKzMzMjQsODAgQEAKIC8qIENhbiBoYXZlIG9uZSBnbG9iYWwgYmVjYXVzZSBibGlua2luZyBpcyBjb250cm9sbGVkIGJ5CiAgKiBldGh0b29sIGFuZCB0aGF0IGlzIGFsd2F5cyB1bmRlciBSVE5MIG11dGV4CiAgKi8KLXN0YXRpYyB2b2lkIHNreTJfbGVkKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgaW50IG9uKQorc3RhdGljIHZvaWQgc2t5Ml9sZWQoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwgZW51bSBsZWRfbW9kZSBtb2RlKQogewotCXUxNiBwZzsKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKwl1bnNpZ25lZCBwb3J0ID0gc2t5Mi0+cG9ydDsKIAotCXN3aXRjaCAoaHctPmNoaXBfaWQpIHsKLQljYXNlIENISVBfSURfWVVLT05fWEw6CisJc3Bpbl9sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSB8fAorCSAgICBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VYIHx8CisJICAgIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fU1VQUikgeworCQl1MTYgcGc7CiAJCXBnID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIpOwogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIDMpOwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLAotCQkJICAgICBvbiA/IChQSFlfTV9MRURDX0xPU19DVFJMKDEpIHwKLQkJCQkgICBQSFlfTV9MRURDX0lOSVRfQ1RSTCg3KSB8Ci0JCQkJICAgUEhZX01fTEVEQ19TVEExX0NUUkwoNykgfAotCQkJCSAgIFBIWV9NX0xFRENfU1RBMF9DVFJMKDcpKQotCQkJICAgICA6IDApOworCisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIE1PX0xFRF9PRkY6CisJCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLAorCQkJCSAgICAgUEhZX01fTEVEQ19MT1NfQ1RSTCg4KSB8CisJCQkJICAgICBQSFlfTV9MRURDX0lOSVRfQ1RSTCg4KSB8CisJCQkJICAgICBQSFlfTV9MRURDX1NUQTFfQ1RSTCg4KSB8CisJCQkJICAgICBQSFlfTV9MRURDX1NUQTBfQ1RSTCg4KSk7CisJCQlicmVhazsKKwkJY2FzZSBNT19MRURfT046CisJCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLAorCQkJCSAgICAgUEhZX01fTEVEQ19MT1NfQ1RSTCg5KSB8CisJCQkJICAgICBQSFlfTV9MRURDX0lOSVRfQ1RSTCg5KSB8CisJCQkJICAgICBQSFlfTV9MRURDX1NUQTFfQ1RSTCg5KSB8CisJCQkJICAgICBQSFlfTV9MRURDX1NUQTBfQ1RSTCg5KSk7CisJCQlicmVhazsKKwkJY2FzZSBNT19MRURfQkxJTks6CisJCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLAorCQkJCSAgICAgUEhZX01fTEVEQ19MT1NfQ1RSTCgweGEpIHwKKwkJCQkgICAgIFBIWV9NX0xFRENfSU5JVF9DVFJMKDB4YSkgfAorCQkJCSAgICAgUEhZX01fTEVEQ19TVEExX0NUUkwoMHhhKSB8CisJCQkJICAgICBQSFlfTV9MRURDX1NUQTBfQ1RSTCgweGEpKTsKKwkJCWJyZWFrOworCQljYXNlIE1PX0xFRF9OT1JNOgorCQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwKKwkJCQkgICAgIFBIWV9NX0xFRENfTE9TX0NUUkwoMSkgfAorCQkJCSAgICAgUEhZX01fTEVEQ19JTklUX0NUUkwoOCkgfAorCQkJCSAgICAgUEhZX01fTEVEQ19TVEExX0NUUkwoNykgfAorCQkJCSAgICAgUEhZX01fTEVEQ19TVEEwX0NUUkwoNykpOworCQl9CiAKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCBwZyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfQ1RSTCwgMCk7CisJfSBlbHNlCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX09WRVIsIAotCQkJICAgICBvbiA/IFBIWV9NX0xFRF9BTEwgOiAwKTsKLQl9CisJCQkJICAgICBQSFlfTV9MRURfTU9fRFVQKG1vZGUpIHwKKwkJCQkgICAgIFBIWV9NX0xFRF9NT18xMChtb2RlKSB8CisJCQkJICAgICBQSFlfTV9MRURfTU9fMTAwKG1vZGUpIHwKKwkJCQkgICAgIFBIWV9NX0xFRF9NT18xMDAwKG1vZGUpIHwKKwkJCQkgICAgIFBIWV9NX0xFRF9NT19SWChtb2RlKSB8CisJCQkJICAgICBQSFlfTV9MRURfTU9fVFgobW9kZSkpOworCisJc3Bpbl91bmxvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIH0KIAogLyogYmxpbmsgTEVEJ3MgZm9yIGZpbmRpbmcgYm9hcmQgKi8KIHN0YXRpYyBpbnQgc2t5Ml9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwotCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwotCXUxNiBsZWRjdHJsLCBsZWRvdmVyID0gMDsKLQlsb25nIG1zOwotCWludCBpbnRlcnJ1cHRlZDsKLQlpbnQgb25vZmYgPSAxOworCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKCFkYXRhIHx8IGRhdGEgPiAodTMyKSAoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpCi0JCW1zID0gamlmZmllc190b19tc2VjcyhNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0JZWxzZQotCQltcyA9IGRhdGEgKiAxMDAwOworCWlmIChkYXRhID09IDApCisJCWRhdGEgPSBVSU5UX01BWDsKIAotCS8qIHNhdmUgaW5pdGlhbCB2YWx1ZXMgKi8KLQlzcGluX2xvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCkgewotCQl1MTYgcGcgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUik7Ci0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMyk7Ci0JCWxlZGN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwpOwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIHBnKTsKLQl9IGVsc2UgewotCQlsZWRjdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9DVFJMKTsKLQkJbGVkb3ZlciA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfT1ZFUik7CisJZm9yIChpID0gMDsgaSA8IGRhdGE7IGkrKykgeworCQlza3kyX2xlZChza3kyLCBNT19MRURfT04pOworCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoNTAwKSkKKwkJCWJyZWFrOworCQlza3kyX2xlZChza3kyLCBNT19MRURfT0ZGKTsKKwkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCkpCisJCQlicmVhazsKIAl9Ci0KLQlpbnRlcnJ1cHRlZCA9IDA7Ci0Jd2hpbGUgKCFpbnRlcnJ1cHRlZCAmJiBtcyA+IDApIHsKLQkJc2t5Ml9sZWQoaHcsIHBvcnQsIG9ub2ZmKTsKLQkJb25vZmYgPSAhb25vZmY7Ci0KLQkJc3Bpbl91bmxvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKLQkJaW50ZXJydXB0ZWQgPSBtc2xlZXBfaW50ZXJydXB0aWJsZSgyNTApOwotCQlzcGluX2xvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKLQotCQltcyAtPSAyNTA7Ci0JfQotCi0JLyogcmVzdW1lIHJlZ3VsYXJseSBzY2hlZHVsZWQgcHJvZ3JhbW1pbmcgKi8KLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCkgewotCQl1MTYgcGcgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUik7Ci0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfRVhUX0FEUiwgMyk7Ci0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGxlZGN0cmwpOwotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIHBnKTsKLQl9IGVsc2UgewotCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9DVFJMLCBsZWRjdHJsKTsKLQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfT1ZFUiwgbGVkb3Zlcik7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CisJc2t5Ml9sZWQoc2t5MiwgTU9fTEVEX05PUk0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzMwLDEwICs0MzMwLDE0IEBACiAJaWYgKCFodykKIAkJcmV0dXJuIDA7CiAKKwlkZWxfdGltZXJfc3luYygmaHctPndhdGNoZG9nX3RpbWVyKTsKKwljYW5jZWxfd29ya19zeW5jKCZody0+cmVzdGFydF93b3JrKTsKKwogCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltpXTsKIAkJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQkJc2t5Ml9kb3duKGRldik7CiAKQEAgLTQzODQsNiArNDM4OCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CisKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQllcnIgPSBza3kyX3VwKGRldik7CiAJCQlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmggYi9kcml2ZXJzL25ldC9za3kyLmgKaW5kZXggNWFiNWMxYy4uN2JiM2JhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5oCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuaApAQCAtMTMxOCwxOCArMTMxOCwyMSBAQAogCUJMSU5LXzY3ME1TCT0gNCwvKiA2NzAgbXMgKi8KIH07CiAKLS8qKioqIFBIWV9NQVJWX0xFRF9PVkVSICAgIDE2IGJpdCByL3cgTEVEIGNvbnRyb2wgKi8KLWVudW0gewotCVBIWV9NX0xFRF9NT19EVVAgID0gMzw8MTAsLyogQml0IDExLi4xMDogIER1cGxleCAqLwotCVBIWV9NX0xFRF9NT18xMAkgID0gMzw8OCwgLyogQml0ICA5Li4gODogIExpbmsgMTAgKi8KLQlQSFlfTV9MRURfTU9fMTAwICA9IDM8PDYsIC8qIEJpdCAgNy4uIDY6ICBMaW5rIDEwMCAqLwotCVBIWV9NX0xFRF9NT18xMDAwID0gMzw8NCwgLyogQml0ICA1Li4gNDogIExpbmsgMTAwMCAqLwotCVBIWV9NX0xFRF9NT19SWAkgID0gMzw8MiwgLyogQml0ICAzLi4gMjogIFJ4ICovCi0JUEhZX01fTEVEX01PX1RYCSAgPSAzPDwwLCAvKiBCaXQgIDEuLiAwOiAgVHggKi8KKy8qKioqKiAgUEhZX01BUlZfTEVEX09WRVIJMTYgYml0IHIvdwlNYW51YWwgTEVEIE92ZXJyaWRlIFJlZyAqKioqKi8KKyNkZWZpbmUgUEhZX01fTEVEX01PX1NHTUlJKHgpCSgoeCk8PDE0KQkvKiBCaXQgMTUuLjE0OiAgU0dNSUkgQU4gVGltZXIgKi8KIAotCVBIWV9NX0xFRF9BTEwJICA9IFBIWV9NX0xFRF9NT19EVVAgfCBQSFlfTV9MRURfTU9fMTAgCi0JCQkgICAgfCBQSFlfTV9MRURfTU9fMTAwIHwgUEhZX01fTEVEX01PXzEwMDAKLQkJCSAgICB8IFBIWV9NX0xFRF9NT19SWCwKKyNkZWZpbmUgUEhZX01fTEVEX01PX0RVUCh4KQkoKHgpPDwxMCkJLyogQml0IDExLi4xMDogIER1cGxleCAqLworI2RlZmluZSBQSFlfTV9MRURfTU9fMTAoeCkJKCh4KTw8OCkJLyogQml0ICA5Li4gODogIExpbmsgMTAgKi8KKyNkZWZpbmUgUEhZX01fTEVEX01PXzEwMCh4KQkoKHgpPDw2KQkvKiBCaXQgIDcuLiA2OiAgTGluayAxMDAgKi8KKyNkZWZpbmUgUEhZX01fTEVEX01PXzEwMDAoeCkJKCh4KTw8NCkJLyogQml0ICA1Li4gNDogIExpbmsgMTAwMCAqLworI2RlZmluZSBQSFlfTV9MRURfTU9fUlgoeCkJKCh4KTw8MikJLyogQml0ICAzLi4gMjogIFJ4ICovCisjZGVmaW5lIFBIWV9NX0xFRF9NT19UWCh4KQkoKHgpPDwwKQkvKiBCaXQgIDEuLiAwOiAgVHggKi8KKworZW51bSBsZWRfbW9kZSB7CisJTU9fTEVEX05PUk0gID0gMCwKKwlNT19MRURfQkxJTksgPSAxLAorCU1PX0xFRF9PRkYgICA9IDIsCisJTU9fTEVEX09OICAgID0gMywKIH07CiAKIC8qKioqKiAgUEhZX01BUlZfRVhUX0NUUkxfMgkxNiBiaXQgci93CUV4dC4gUEhZIFNwZWNpZmljIEN0cmwgMiAqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggNDAyMGU5ZS4uNjAwYjkyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTIyMCwyMiArMjIwLDIyIEBACiAKIAogLyogdGhpcyBlbmFibGVzIGFuIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU01DX0VOQUJMRV9JTlQoeCkgZG8gewkJCQkJCVwKKyNkZWZpbmUgU01DX0VOQUJMRV9JTlQobHAsIHgpIGRvIHsJCQkJCVwKIAl1bnNpZ25lZCBjaGFyIG1hc2s7CQkJCQkJXAogCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsJCQkJCVwKLQltYXNrID0gU01DX0dFVF9JTlRfTUFTSygpOwkJCQkJXAorCW1hc2sgPSBTTUNfR0VUX0lOVF9NQVNLKGxwKTsJCQkJCVwKIAltYXNrIHw9ICh4KTsJCQkJCQkJXAotCVNNQ19TRVRfSU5UX01BU0sobWFzayk7CQkJCQkJXAorCVNNQ19TRVRfSU5UX01BU0sobHAsIG1hc2spOwkJCQkJXAogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwkJCQkJXAogfSB3aGlsZSAoMCkKIAogLyogdGhpcyBkaXNhYmxlcyBhbiBpbnRlcnJ1cHQgZnJvbSB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU01DX0RJU0FCTEVfSU5UKHgpIGRvIHsJCQkJCQlcCisjZGVmaW5lIFNNQ19ESVNBQkxFX0lOVChscCwgeCkgZG8gewkJCQkJXAogCXVuc2lnbmVkIGNoYXIgbWFzazsJCQkJCQlcCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwkJCQkJXAotCW1hc2sgPSBTTUNfR0VUX0lOVF9NQVNLKCk7CQkJCQlcCisJbWFzayA9IFNNQ19HRVRfSU5UX01BU0sobHApOwkJCQkJXAogCW1hc2sgJj0gfih4KTsJCQkJCQkJXAotCVNNQ19TRVRfSU5UX01BU0sobWFzayk7CQkJCQkJXAorCVNNQ19TRVRfSU5UX01BU0sobHAsIG1hc2spOwkJCQkJXAogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwkJCQkJXAogfSB3aGlsZSAoMCkKIApAQCAtMjQ0LDEwICsyNDQsMTAgQEAKICAqIGlmIGF0IGFsbCwgYnV0IGxldCdzIGF2b2lkIGRlYWRsb2NraW5nIHRoZSBzeXN0ZW0gaWYgdGhlIGhhcmR3YXJlCiAgKiBkZWNpZGVzIHRvIGdvIHNvdXRoLgogICovCi0jZGVmaW5lIFNNQ19XQUlUX01NVV9CVVNZKCkgZG8gewkJCQkJXAotCWlmICh1bmxpa2VseShTTUNfR0VUX01NVV9DTUQoKSAmIE1DX0JVU1kpKSB7CQkJXAorI2RlZmluZSBTTUNfV0FJVF9NTVVfQlVTWShscCkgZG8gewkJCQkJXAorCWlmICh1bmxpa2VseShTTUNfR0VUX01NVV9DTUQobHApICYgTUNfQlVTWSkpIHsJCVwKIAkJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDI7CQkJXAotCQl3aGlsZSAoU01DX0dFVF9NTVVfQ01EKCkgJiBNQ19CVVNZKSB7CQkJXAorCQl3aGlsZSAoU01DX0dFVF9NTVVfQ01EKGxwKSAmIE1DX0JVU1kpIHsJCVwKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CQlcCiAJCQkJcHJpbnRrKCIlczogdGltZW91dCAlcyBsaW5lICVkXG4iLAlcCiAJCQkJCWRldi0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsJXApAQCAtMjczLDggKzI3Myw4IEBACiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLCBibG9jayBUWCB0YXNrbGV0ICovCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCVNNQ19TRUxFQ1RfQkFOSygyKTsKLQlTTUNfU0VUX0lOVF9NQVNLKDApOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMik7CisJU01DX1NFVF9JTlRfTUFTSyhscCwgMCk7CiAJcGVuZGluZ19za2IgPSBscC0+cGVuZGluZ190eF9za2I7CiAJbHAtPnBlbmRpbmdfdHhfc2tiID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKQEAgLTI5MCwxNSArMjkwLDE1IEBACiAJICogVGhpcyByZXNldHMgdGhlIHJlZ2lzdGVycyBtb3N0bHkgdG8gZGVmYXVsdHMsIGJ1dCBkb2Vzbid0CiAJICogYWZmZWN0IEVFUFJPTS4gIFRoYXQgc2VlbXMgdW5uZWNlc3NhcnkKIAkgKi8KLQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JU01DX1NFVF9SQ1IoUkNSX1NPRlRSU1QpOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMCk7CisJU01DX1NFVF9SQ1IobHAsIFJDUl9TT0ZUUlNUKTsKIAogCS8qCiAJICogU2V0dXAgdGhlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKIAkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDT05GSUdfUkVHIGlzIG5vdCBhZmZlY3RlZAogCSAqIGJ5IGEgc29mdCByZXNldAogCSAqLwotCVNNQ19TRUxFQ1RfQkFOSygxKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOwogCiAJY2ZnID0gQ09ORklHX0RFRkFVTFQ7CiAKQEAgLTMxNiw3ICszMTYsNyBAQAogCSAqLwogCWNmZyB8PSBDT05GSUdfRVBIX1BPV0VSX0VOOwogCi0JU01DX1NFVF9DT05GSUcoY2ZnKTsKKwlTTUNfU0VUX0NPTkZJRyhscCwgY2ZnKTsKIAogCS8qIHRoaXMgc2hvdWxkIHBhdXNlIGVub3VnaCBmb3IgdGhlIGNoaXAgdG8gYmUgaGFwcHkgKi8KIAkvKgpAQCAtMzI5LDEyICszMjksMTIgQEAKIAl1ZGVsYXkoMSk7CiAKIAkvKiBEaXNhYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZ1bmN0aW9uYWxpdHkgKi8KLQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JU01DX1NFVF9SQ1IoUkNSX0NMRUFSKTsKLQlTTUNfU0VUX1RDUihUQ1JfQ0xFQVIpOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMCk7CisJU01DX1NFVF9SQ1IobHAsIFJDUl9DTEVBUik7CisJU01DX1NFVF9UQ1IobHAsIFRDUl9DTEVBUik7CiAKLQlTTUNfU0VMRUNUX0JBTksoMSk7Ci0JY3RsID0gU01DX0dFVF9DVEwoKSB8IENUTF9MRV9FTkFCTEU7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwljdGwgPSBTTUNfR0VUX0NUTChscCkgfCBDVExfTEVfRU5BQkxFOwogCiAJLyoKIAkgKiBTZXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgdG8gYXV0b21hdGljYWxseSByZWxlYXNlIHN1Y2Nlc3NmdWxseQpAQCAtMzQ1LDEyICszNDUsMTIgQEAKIAkJY3RsIHw9IENUTF9BVVRPX1JFTEVBU0U7CiAJZWxzZQogCQljdGwgJj0gfkNUTF9BVVRPX1JFTEVBU0U7Ci0JU01DX1NFVF9DVEwoY3RsKTsKKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKIAogCS8qIFJlc2V0IHRoZSBNTVUgKi8KLQlTTUNfU0VMRUNUX0JBTksoMik7Ci0JU01DX1NFVF9NTVVfQ01EKE1DX1JFU0VUKTsKLQlTTUNfV0FJVF9NTVVfQlVTWSgpOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMik7CisJU01DX1NFVF9NTVVfQ01EKGxwLCBNQ19SRVNFVCk7CisJU01DX1dBSVRfTU1VX0JVU1kobHApOwogfQogCiAvKgpAQCAtMzY1LDE5ICszNjUsMTkgQEAKIAlEQkcoMiwgIiVzOiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOwogCiAJLyogc2VlIHRoZSBoZWFkZXIgZmlsZSBmb3Igb3B0aW9ucyBpbiBUQ1IvUkNSIERFRkFVTFQgKi8KLQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JU01DX1NFVF9UQ1IobHAtPnRjcl9jdXJfbW9kZSk7Ci0JU01DX1NFVF9SQ1IobHAtPnJjcl9jdXJfbW9kZSk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAwKTsKKwlTTUNfU0VUX1RDUihscCwgbHAtPnRjcl9jdXJfbW9kZSk7CisJU01DX1NFVF9SQ1IobHAsIGxwLT5yY3JfY3VyX21vZGUpOwogCi0JU01DX1NFTEVDVF9CQU5LKDEpOwotCVNNQ19TRVRfTUFDX0FERFIoZGV2LT5kZXZfYWRkcik7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwlTTUNfU0VUX01BQ19BRERSKGxwLCBkZXYtPmRldl9hZGRyKTsKIAogCS8qIG5vdywgZW5hYmxlIGludGVycnVwdHMgKi8KIAltYXNrID0gSU1fRVBIX0lOVHxJTV9SWF9PVlJOX0lOVHxJTV9SQ1ZfSU5UOwogCWlmIChscC0+dmVyc2lvbiA+PSAoQ0hJUF85MTEwMCA8PCA0KSkKIAkJbWFzayB8PSBJTV9NRElOVDsKLQlTTUNfU0VMRUNUX0JBTksoMik7Ci0JU01DX1NFVF9JTlRfTUFTSyhtYXNrKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCVNNQ19TRVRfSU5UX01BU0sobHAsIG1hc2spOwogCiAJLyoKIAkgKiBGcm9tIHRoaXMgcG9pbnQgdGhlIHJlZ2lzdGVyIGJhbmsgbXVzdCBfTk9UXyBiZSBzd2l0Y2hlZCBhd2F5CkBAIC00MDAsOCArNDAwLDggQEAKIAogCS8qIG5vIG1vcmUgaW50ZXJydXB0cyBmb3IgbWUgKi8KIAlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7Ci0JU01DX1NFTEVDVF9CQU5LKDIpOwotCVNNQ19TRVRfSU5UX01BU0soMCk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX0lOVF9NQVNLKGxwLCAwKTsKIAlwZW5kaW5nX3NrYiA9IGxwLT5wZW5kaW5nX3R4X3NrYjsKIAlscC0+cGVuZGluZ190eF9za2IgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwpAQCAtNDA5LDE0ICs0MDksMTQgQEAKIAkJZGV2X2tmcmVlX3NrYihwZW5kaW5nX3NrYik7CiAKIAkvKiBhbmQgdGVsbCB0aGUgY2FyZCB0byBzdGF5IGF3YXkgZnJvbSB0aGF0IG5hc3R5IG91dHNpZGUgd29ybGQgKi8KLQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JU01DX1NFVF9SQ1IoUkNSX0NMRUFSKTsKLQlTTUNfU0VUX1RDUihUQ1JfQ0xFQVIpOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMCk7CisJU01DX1NFVF9SQ1IobHAsIFJDUl9DTEVBUik7CisJU01DX1NFVF9UQ1IobHAsIFRDUl9DTEVBUik7CiAKICNpZmRlZiBQT1dFUl9ET1dOCiAJLyogZmluYWxseSwgc2h1dCB0aGUgY2hpcCBkb3duICovCi0JU01DX1NFTEVDVF9CQU5LKDEpOwotCVNNQ19TRVRfQ09ORklHKFNNQ19HRVRfQ09ORklHKCkgJiB+Q09ORklHX0VQSF9QT1dFUl9FTik7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwlTTUNfU0VUX0NPTkZJRyhscCwgU01DX0dFVF9DT05GSUcobHApICYgfkNPTkZJR19FUEhfUE9XRVJfRU4pOwogI2VuZGlmCiB9CiAKQEAgLTQzMSwxNyArNDMxLDE3IEBACiAKIAlEQkcoMywgIiVzOiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOwogCi0JcGFja2V0X251bWJlciA9IFNNQ19HRVRfUlhGSUZPKCk7CisJcGFja2V0X251bWJlciA9IFNNQ19HRVRfUlhGSUZPKGxwKTsKIAlpZiAodW5saWtlbHkocGFja2V0X251bWJlciAmIFJYRklGT19SRU1QVFkpKSB7CiAJCVBSSU5USygiJXM6IHNtY19yY3Ygd2l0aCBub3RoaW5nIG9uIEZJRk8uXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCiAJLyogcmVhZCBmcm9tIHN0YXJ0IG9mIHBhY2tldCAqLwotCVNNQ19TRVRfUFRSKFBUUl9SRUFEIHwgUFRSX1JDViB8IFBUUl9BVVRPSU5DKTsKKwlTTUNfU0VUX1BUUihscCwgUFRSX1JFQUQgfCBQVFJfUkNWIHwgUFRSX0FVVE9JTkMpOwogCiAJLyogRmlyc3QgdHdvIHdvcmRzIGFyZSBzdGF0dXMgYW5kIHBhY2tldCBsZW5ndGggKi8KLQlTTUNfR0VUX1BLVF9IRFIoc3RhdHVzLCBwYWNrZXRfbGVuKTsKKwlTTUNfR0VUX1BLVF9IRFIobHAsIHN0YXR1cywgcGFja2V0X2xlbik7CiAJcGFja2V0X2xlbiAmPSAweDA3ZmY7ICAvKiBtYXNrIG9mZiB0b3AgYml0cyAqLwogCURCRygyLCAiJXM6IFJYIFBOUiAweCV4IFNUQVRVUyAweCUwNHggTEVOR1RIIDB4JTA0eCAoJWQpXG4iLAogCQlkZXYtPm5hbWUsIHBhY2tldF9udW1iZXIsIHN0YXR1cywKQEAgLTQ2MCw4ICs0NjAsOCBAQAogCQkJCQlkZXYtPm5hbWUsIHBhY2tldF9sZW4sIHN0YXR1cyk7CiAJCQlzdGF0dXMgfD0gUlNfVE9PU0hPUlQ7CiAJCX0KLQkJU01DX1dBSVRfTU1VX0JVU1koKTsKLQkJU01DX1NFVF9NTVVfQ01EKE1DX1JFTEVBU0UpOworCQlTTUNfV0FJVF9NTVVfQlVTWShscCk7CisJCVNNQ19TRVRfTU1VX0NNRChscCwgTUNfUkVMRUFTRSk7CiAJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCWlmIChzdGF0dXMgJiBSU19BTEdORVJSKQogCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKQEAgLTQ5MCw4ICs0OTAsOCBAQAogCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBMb3cgbWVtb3J5LCBwYWNrZXQgZHJvcHBlZC5cbiIsCiAJCQkJZGV2LT5uYW1lKTsKLQkJCVNNQ19XQUlUX01NVV9CVVNZKCk7Ci0JCQlTTUNfU0VUX01NVV9DTUQoTUNfUkVMRUFTRSk7CisJCQlTTUNfV0FJVF9NTVVfQlVTWShscCk7CisJCQlTTUNfU0VUX01NVV9DTUQobHAsIE1DX1JFTEVBU0UpOwogCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTUxMCwxMCArNTEwLDEwIEBACiAJCSAqLwogCQlkYXRhX2xlbiA9IHBhY2tldF9sZW4gLSAoKHN0YXR1cyAmIFJTX09EREZSQU1FKSA/IDUgOiA2KTsKIAkJZGF0YSA9IHNrYl9wdXQoc2tiLCBkYXRhX2xlbik7Ci0JCVNNQ19QVUxMX0RBVEEoZGF0YSwgcGFja2V0X2xlbiAtIDQpOworCQlTTUNfUFVMTF9EQVRBKGxwLCBkYXRhLCBwYWNrZXRfbGVuIC0gNCk7CiAKLQkJU01DX1dBSVRfTU1VX0JVU1koKTsKLQkJU01DX1NFVF9NTVVfQ01EKE1DX1JFTEVBU0UpOworCQlTTUNfV0FJVF9NTVVfQlVTWShscCk7CisJCVNNQ19TRVRfTU1VX0NNRChscCwgTUNfUkVMRUFTRSk7CiAKIAkJUFJJTlRfUEtUKGRhdGEsIHBhY2tldF9sZW4gLSA0KTsKIApAQCAtNTkxLDcgKzU5MSw3IEBACiAJfQogCWxwLT5wZW5kaW5nX3R4X3NrYiA9IE5VTEw7CiAKLQlwYWNrZXRfbm8gPSBTTUNfR0VUX0FSKCk7CisJcGFja2V0X25vID0gU01DX0dFVF9BUihscCk7CiAJaWYgKHVubGlrZWx5KHBhY2tldF9ubyAmIEFSX0ZBSUxFRCkpIHsKIAkJcHJpbnRrKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgZGV2LT5uYW1lKTsKIAkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKQEAgLTYwMSw4ICs2MDEsOCBAQAogCX0KIAogCS8qIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCAqLwotCVNNQ19TRVRfUE4ocGFja2V0X25vKTsKLQlTTUNfU0VUX1BUUihQVFJfQVVUT0lOQyk7CisJU01DX1NFVF9QTihscCwgcGFja2V0X25vKTsKKwlTTUNfU0VUX1BUUihscCwgUFRSX0FVVE9JTkMpOwogCiAJYnVmID0gc2tiLT5kYXRhOwogCWxlbiA9IHNrYi0+bGVuOwpAQCAtNjE0LDEzICs2MTQsMTMgQEAKIAkgKiBTZW5kIHRoZSBwYWNrZXQgbGVuZ3RoICgrNiBmb3Igc3RhdHVzIHdvcmRzLCBsZW5ndGgsIGFuZCBjdGwuCiAJICogVGhlIGNhcmQgd2lsbCBwYWQgdG8gNjQgYnl0ZXMgd2l0aCB6ZXJvZXMgaWYgcGFja2V0IGlzIHRvbyBzbWFsbC4KIAkgKi8KLQlTTUNfUFVUX1BLVF9IRFIoMCwgbGVuICsgNik7CisJU01DX1BVVF9QS1RfSERSKGxwLCAwLCBsZW4gKyA2KTsKIAogCS8qIHNlbmQgdGhlIGFjdHVhbCBkYXRhICovCi0JU01DX1BVU0hfREFUQShidWYsIGxlbiAmIH4xKTsKKwlTTUNfUFVTSF9EQVRBKGxwLCBidWYsIGxlbiAmIH4xKTsKIAogCS8qIFNlbmQgZmluYWwgY3RsIHdvcmQgd2l0aCB0aGUgbGFzdCBieXRlIGlmIHRoZXJlIGlzIG9uZSAqLwotCVNNQ19vdXR3KCgobGVuICYgMSkgPyAoMHgyMDAwIHwgYnVmW2xlbi0xXSkgOiAwKSwgaW9hZGRyLCBEQVRBX1JFRyk7CisJU01DX291dHcoKChsZW4gJiAxKSA/ICgweDIwMDAgfCBidWZbbGVuLTFdKSA6IDApLCBpb2FkZHIsIERBVEFfUkVHKGxwKSk7CiAKIAkvKgogCSAqIElmIFRIUk9UVExFX1RYX1BLVFMgaXMgc2V0LCB3ZSBzdG9wIHRoZSBxdWV1ZSBoZXJlLiBUaGlzIHdpbGwKQEAgLTYzNCwxNCArNjM0LDE0IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCS8qIHF1ZXVlIHRoZSBwYWNrZXQgZm9yIFRYICovCi0JU01DX1NFVF9NTVVfQ01EKE1DX0VOUVVFVUUpOworCVNNQ19TRVRfTU1VX0NNRChscCwgTUNfRU5RVUVVRSk7CiAJc21jX3NwZWNpYWxfdW5sb2NrKCZscC0+bG9jayk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKIAotCVNNQ19FTkFCTEVfSU5UKElNX1RYX0lOVCB8IElNX1RYX0VNUFRZX0lOVCk7CisJU01DX0VOQUJMRV9JTlQobHAsIElNX1RYX0lOVCB8IElNX1RYX0VNUFRZX0lOVCk7CiAKIGRvbmU6CWlmICghVEhST1RUTEVfVFhfUEtUUykKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtNjg4LDcgKzY4OCw3IEBACiAJc21jX3NwZWNpYWxfbG9jaygmbHAtPmxvY2spOwogCiAJLyogbm93LCB0cnkgdG8gYWxsb2NhdGUgdGhlIG1lbW9yeSAqLwotCVNNQ19TRVRfTU1VX0NNRChNQ19BTExPQyB8IG51bVBhZ2VzKTsKKwlTTUNfU0VUX01NVV9DTUQobHAsIE1DX0FMTE9DIHwgbnVtUGFnZXMpOwogCiAJLyoKIAkgKiBQb2xsIHRoZSBjaGlwIGZvciBhIHNob3J0IGFtb3VudCBvZiB0aW1lIGluIGNhc2UgdGhlCkBAIC02OTYsOSArNjk2LDkgQEAKIAkgKi8KIAlwb2xsX2NvdW50ID0gTUVNT1JZX1dBSVRfVElNRTsKIAlkbyB7Ci0JCXN0YXR1cyA9IFNNQ19HRVRfSU5UKCk7CisJCXN0YXR1cyA9IFNNQ19HRVRfSU5UKGxwKTsKIAkJaWYgKHN0YXR1cyAmIElNX0FMTE9DX0lOVCkgewotCQkJU01DX0FDS19JTlQoSU1fQUxMT0NfSU5UKTsKKwkJCVNNQ19BQ0tfSU5UKGxwLCBJTV9BTExPQ19JTlQpOwogICAJCQlicmVhazsKIAkJfQogICAgCX0gd2hpbGUgKC0tcG9sbF9jb3VudCk7CkBAIC03MTAsNyArNzEwLDcgQEAKIAkJLyogb2ggd2VsbCwgd2FpdCB1bnRpbCB0aGUgY2hpcCBmaW5kcyBtZW1vcnkgbGF0ZXIgKi8KIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlEQkcoMiwgIiVzOiBUWCBtZW1vcnkgYWxsb2NhdGlvbiBkZWZlcnJlZC5cbiIsIGRldi0+bmFtZSk7Ci0JCVNNQ19FTkFCTEVfSU5UKElNX0FMTE9DX0lOVCk7CisJCVNNQ19FTkFCTEVfSU5UKGxwLCBJTV9BTExPQ19JTlQpOwogICAgCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEFsbG9jYXRpb24gc3VjY2VlZGVkOiBwdXNoIHBhY2tldCB0byB0aGUgY2hpcCdzIG93biBtZW1vcnkKQEAgLTczNiwxOSArNzM2LDE5IEBACiAJREJHKDMsICIlczogJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKIAogCS8qIElmIHRoZSBUWCBGSUZPIGlzIGVtcHR5IHRoZW4gbm90aGluZyB0byBkbyAqLwotCXBhY2tldF9ubyA9IFNNQ19HRVRfVFhGSUZPKCk7CisJcGFja2V0X25vID0gU01DX0dFVF9UWEZJRk8obHApOwogCWlmICh1bmxpa2VseShwYWNrZXRfbm8gJiBUWEZJRk9fVEVNUFRZKSkgewogCQlQUklOVEsoIiVzOiBzbWNfdHggd2l0aCBub3RoaW5nIG9uIEZJRk8uXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCiAJLyogc2VsZWN0IHBhY2tldCB0byByZWFkIGZyb20gKi8KLQlzYXZlZF9wYWNrZXQgPSBTTUNfR0VUX1BOKCk7Ci0JU01DX1NFVF9QTihwYWNrZXRfbm8pOworCXNhdmVkX3BhY2tldCA9IFNNQ19HRVRfUE4obHApOworCVNNQ19TRVRfUE4obHAsIHBhY2tldF9ubyk7CiAKIAkvKiByZWFkIHRoZSBmaXJzdCB3b3JkIChzdGF0dXMgd29yZCkgZnJvbSB0aGlzIHBhY2tldCAqLwotCVNNQ19TRVRfUFRSKFBUUl9BVVRPSU5DIHwgUFRSX1JFQUQpOwotCVNNQ19HRVRfUEtUX0hEUih0eF9zdGF0dXMsIHBrdF9sZW4pOworCVNNQ19TRVRfUFRSKGxwLCBQVFJfQVVUT0lOQyB8IFBUUl9SRUFEKTsKKwlTTUNfR0VUX1BLVF9IRFIobHAsIHR4X3N0YXR1cywgcGt0X2xlbik7CiAJREJHKDIsICIlczogVFggU1RBVFVTIDB4JTA0eCBQTlIgMHglMDJ4XG4iLAogCQlkZXYtPm5hbWUsIHR4X3N0YXR1cywgcGFja2V0X25vKTsKIApAQCAtNzcxLDE3ICs3NzEsMTcgQEAKIAl9CiAKIAkvKiBraWxsIHRoZSBwYWNrZXQgKi8KLQlTTUNfV0FJVF9NTVVfQlVTWSgpOwotCVNNQ19TRVRfTU1VX0NNRChNQ19GUkVFUEtUKTsKKwlTTUNfV0FJVF9NTVVfQlVTWShscCk7CisJU01DX1NFVF9NTVVfQ01EKGxwLCBNQ19GUkVFUEtUKTsKIAogCS8qIERvbid0IHJlc3RvcmUgUGFja2V0IE51bWJlciBSZWcgdW50aWwgYnVzeSBiaXQgaXMgY2xlYXJlZCAqLwotCVNNQ19XQUlUX01NVV9CVVNZKCk7Ci0JU01DX1NFVF9QTihzYXZlZF9wYWNrZXQpOworCVNNQ19XQUlUX01NVV9CVVNZKGxwKTsKKwlTTUNfU0VUX1BOKGxwLCBzYXZlZF9wYWNrZXQpOwogCiAJLyogcmUtZW5hYmxlIHRyYW5zbWl0ICovCi0JU01DX1NFTEVDVF9CQU5LKDApOwotCVNNQ19TRVRfVENSKGxwLT50Y3JfY3VyX21vZGUpOwotCVNNQ19TRUxFQ1RfQkFOSygyKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDApOworCVNNQ19TRVRfVENSKGxwLCBscC0+dGNyX2N1cl9tb2RlKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOwogfQogCiAKQEAgLTc5Myw3ICs3OTMsNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CiAJdW5zaWduZWQgaW50IG1paV9yZWcsIG1hc2s7CiAKLQltaWlfcmVnID0gU01DX0dFVF9NSUkoKSAmIH4oTUlJX01DTEsgfCBNSUlfTURPRSB8IE1JSV9NRE8pOworCW1paV9yZWcgPSBTTUNfR0VUX01JSShscCkgJiB+KE1JSV9NQ0xLIHwgTUlJX01ET0UgfCBNSUlfTURPKTsKIAltaWlfcmVnIHw9IE1JSV9NRE9FOwogCiAJZm9yIChtYXNrID0gMSA8PCAoYml0cyAtIDEpOyBtYXNrOyBtYXNrID4+PSAxKSB7CkBAIC04MDIsOSArODAyLDkgQEAKIAkJZWxzZQogCQkJbWlpX3JlZyAmPSB+TUlJX01ETzsKIAotCQlTTUNfU0VUX01JSShtaWlfcmVnKTsKKwkJU01DX1NFVF9NSUkobHAsIG1paV9yZWcpOwogCQl1ZGVsYXkoTUlJX0RFTEFZKTsKLQkJU01DX1NFVF9NSUkobWlpX3JlZyB8IE1JSV9NQ0xLKTsKKwkJU01DX1NFVF9NSUkobHAsIG1paV9yZWcgfCBNSUlfTUNMSyk7CiAJCXVkZWxheShNSUlfREVMQVkpOwogCX0KIH0KQEAgLTgxNSwxNiArODE1LDE2IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKIAl1bnNpZ25lZCBpbnQgbWlpX3JlZywgbWFzaywgdmFsOwogCi0JbWlpX3JlZyA9IFNNQ19HRVRfTUlJKCkgJiB+KE1JSV9NQ0xLIHwgTUlJX01ET0UgfCBNSUlfTURPKTsKLQlTTUNfU0VUX01JSShtaWlfcmVnKTsKKwltaWlfcmVnID0gU01DX0dFVF9NSUkobHApICYgfihNSUlfTUNMSyB8IE1JSV9NRE9FIHwgTUlJX01ETyk7CisJU01DX1NFVF9NSUkobHAsIG1paV9yZWcpOwogCiAJZm9yIChtYXNrID0gMSA8PCAoYml0cyAtIDEpLCB2YWwgPSAwOyBtYXNrOyBtYXNrID4+PSAxKSB7Ci0JCWlmIChTTUNfR0VUX01JSSgpICYgTUlJX01ESSkKKwkJaWYgKFNNQ19HRVRfTUlJKGxwKSAmIE1JSV9NREkpCiAJCQl2YWwgfD0gbWFzazsKIAotCQlTTUNfU0VUX01JSShtaWlfcmVnKTsKKwkJU01DX1NFVF9NSUkobHAsIG1paV9yZWcpOwogCQl1ZGVsYXkoTUlJX0RFTEFZKTsKLQkJU01DX1NFVF9NSUkobWlpX3JlZyB8IE1JSV9NQ0xLKTsKKwkJU01DX1NFVF9NSUkobHAsIG1paV9yZWcgfCBNSUlfTUNMSyk7CiAJCXVkZWxheShNSUlfREVMQVkpOwogCX0KIApAQCAtODQwLDcgKzg0MCw3IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKIAl1bnNpZ25lZCBpbnQgcGh5ZGF0YTsKIAotCVNNQ19TRUxFQ1RfQkFOSygzKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDMpOwogCiAJLyogSWRsZSAtIDMyIG9uZXMgKi8KIAlzbWNfbWlpX291dChkZXYsIDB4ZmZmZmZmZmYsIDMyKTsKQEAgLTg1MiwxMiArODUyLDEyIEBACiAJcGh5ZGF0YSA9IHNtY19taWlfaW4oZGV2LCAxOCk7CiAKIAkvKiBSZXR1cm4gdG8gaWRsZSBzdGF0ZSAqLwotCVNNQ19TRVRfTUlJKFNNQ19HRVRfTUlJKCkgJiB+KE1JSV9NQ0xLfE1JSV9NRE9FfE1JSV9NRE8pKTsKKwlTTUNfU0VUX01JSShscCwgU01DX0dFVF9NSUkobHApICYgfihNSUlfTUNMS3xNSUlfTURPRXxNSUlfTURPKSk7CiAKIAlEQkcoMywgIiVzOiBwaHlhZGRyPTB4JXgsIHBoeXJlZz0weCV4LCBwaHlkYXRhPTB4JXhcbiIsCiAJCV9fRlVOQ1RJT05fXywgcGh5YWRkciwgcGh5cmVnLCBwaHlkYXRhKTsKIAotCVNNQ19TRUxFQ1RfQkFOSygyKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOwogCXJldHVybiBwaHlkYXRhOwogfQogCkBAIC04NzAsNyArODcwLDcgQEAKIAlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKIAotCVNNQ19TRUxFQ1RfQkFOSygzKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDMpOwogCiAJLyogSWRsZSAtIDMyIG9uZXMgKi8KIAlzbWNfbWlpX291dChkZXYsIDB4ZmZmZmZmZmYsIDMyKTsKQEAgLTg3OSwxMiArODc5LDEyIEBACiAJc21jX21paV9vdXQoZGV2LCA1IDw8IDI4IHwgcGh5YWRkciA8PCAyMyB8IHBoeXJlZyA8PCAxOCB8IDIgPDwgMTYgfCBwaHlkYXRhLCAzMik7CiAKIAkvKiBSZXR1cm4gdG8gaWRsZSBzdGF0ZSAqLwotCVNNQ19TRVRfTUlJKFNNQ19HRVRfTUlJKCkgJiB+KE1JSV9NQ0xLfE1JSV9NRE9FfE1JSV9NRE8pKTsKKwlTTUNfU0VUX01JSShscCwgU01DX0dFVF9NSUkobHApICYgfihNSUlfTUNMS3xNSUlfTURPRXxNSUlfTURPKSk7CiAKIAlEQkcoMywgIiVzOiBwaHlhZGRyPTB4JXgsIHBoeXJlZz0weCV4LCBwaHlkYXRhPTB4JXhcbiIsCiAJCV9fRlVOQ1RJT05fXywgcGh5YWRkciwgcGh5cmVnLCBwaHlkYXRhKTsKIAotCVNNQ19TRUxFQ1RfQkFOSygyKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOwogfQogCiAvKgpAQCAtOTU3LDkgKzk1Nyw5IEBACiAJc21jX3BoeV93cml0ZShkZXYsIHBoeWFkZHIsIE1JSV9CTUNSLCBibWNyKTsKIAogCS8qIFJlLUNvbmZpZ3VyZSB0aGUgUmVjZWl2ZS9QaHkgQ29udHJvbCByZWdpc3RlciAqLwotCVNNQ19TRUxFQ1RfQkFOSygwKTsKLQlTTUNfU0VUX1JQQyhscC0+cnBjX2N1cl9tb2RlKTsKLQlTTUNfU0VMRUNUX0JBTksoMik7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAwKTsKKwlTTUNfU0VUX1JQQyhscCwgbHAtPnJwY19jdXJfbW9kZSk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTA1MCw4ICsxMDUwLDggQEAKIAkJCWxwLT50Y3JfY3VyX21vZGUgJj0gflRDUl9TV0ZEVVA7CiAJCX0KIAotCQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JCVNNQ19TRVRfVENSKGxwLT50Y3JfY3VyX21vZGUpOworCQlTTUNfU0VMRUNUX0JBTksobHAsIDApOworCQlTTUNfU0VUX1RDUihscCwgbHAtPnRjcl9jdXJfbW9kZSk7CiAJfQogfQogCkBAIC0xMTAwLDggKzExMDAsOCBAQAogCQlQSFlfSU5UX1NQRERFVCB8IFBIWV9JTlRfRFBMWERFVCk7CiAKIAkvKiBDb25maWd1cmUgdGhlIFJlY2VpdmUvUGh5IENvbnRyb2wgcmVnaXN0ZXIgKi8KLQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JU01DX1NFVF9SUEMobHAtPnJwY19jdXJfbW9kZSk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAwKTsKKwlTTUNfU0VUX1JQQyhscCwgbHAtPnJwY19jdXJfbW9kZSk7CiAKIAkvKiBJZiB0aGUgdXNlciByZXF1ZXN0ZWQgbm8gYXV0byBuZWcsIHRoZW4gZ28gc2V0IGhpcyByZXF1ZXN0ICovCiAJaWYgKGxwLT5taWkuZm9yY2VfbWVkaWEpIHsKQEAgLTExNTgsNyArMTE1OCw3IEBACiAJc21jX3BoeV9jaGVja19tZWRpYShkZXYsIDEpOwogCiBzbWNfcGh5X2NvbmZpZ3VyZV9leGl0OgotCVNNQ19TRUxFQ1RfQkFOSygyKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCWxwLT53b3JrX3BlbmRpbmcgPSAwOwogfQpAQCAtMTIwMCw5ICsxMjAwLDkgQEAKIAogCW9sZF9jYXJyaWVyID0gbmV0aWZfY2Fycmllcl9vayhkZXYpID8gMSA6IDA7CiAKLQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JbmV3X2NhcnJpZXIgPSAoU01DX0dFVF9FUEhfU1RBVFVTKCkgJiBFU19MSU5LX09LKSA/IDEgOiAwOwotCVNNQ19TRUxFQ1RfQkFOSygyKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDApOworCW5ld19jYXJyaWVyID0gKFNNQ19HRVRfRVBIX1NUQVRVUyhscCkgJiBFU19MSU5LX09LKSA/IDEgOiAwOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMik7CiAKIAlpZiAoaW5pdCB8fCAob2xkX2NhcnJpZXIgIT0gbmV3X2NhcnJpZXIpKSB7CiAJCWlmICghbmV3X2NhcnJpZXIpIHsKQEAgLTEyMjQsMTEgKzEyMjQsMTEgQEAKIAogCXNtY18xMGJ0X2NoZWNrX21lZGlhKGRldiwgMCk7CiAKLQlTTUNfU0VMRUNUX0JBTksoMSk7Ci0JY3RsID0gU01DX0dFVF9DVEwoKTsKLQlTTUNfU0VUX0NUTChjdGwgJiB+Q1RMX0xFX0VOQUJMRSk7Ci0JU01DX1NFVF9DVEwoY3RsKTsKLQlTTUNfU0VMRUNUX0JBTksoMik7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCAmIH5DVExfTEVfRU5BQkxFKTsKKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOwogfQogCiAvKgpAQCAtMTI1MiwyMiArMTI1MiwyMiBAQAogCSAqIElTUi4gKi8KIAlTTUNfSU5URVJSVVBUX1BSRUFNQkxFOwogCi0Jc2F2ZWRfcG9pbnRlciA9IFNNQ19HRVRfUFRSKCk7Ci0JbWFzayA9IFNNQ19HRVRfSU5UX01BU0soKTsKLQlTTUNfU0VUX0lOVF9NQVNLKDApOworCXNhdmVkX3BvaW50ZXIgPSBTTUNfR0VUX1BUUihscCk7CisJbWFzayA9IFNNQ19HRVRfSU5UX01BU0sobHApOworCVNNQ19TRVRfSU5UX01BU0sobHAsIDApOwogCiAJLyogc2V0IGEgdGltZW91dCB2YWx1ZSwgc28gSSBkb24ndCBzdGF5IGhlcmUgZm9yZXZlciAqLwogCXRpbWVvdXQgPSBNQVhfSVJRX0xPT1BTOwogCiAJZG8gewotCQlzdGF0dXMgPSBTTUNfR0VUX0lOVCgpOworCQlzdGF0dXMgPSBTTUNfR0VUX0lOVChscCk7CiAKIAkJREJHKDIsICIlczogSU5UIDB4JTAyeCBNQVNLIDB4JTAyeCBNRU0gMHglMDR4IEZJRk8gMHglMDR4XG4iLAogCQkJZGV2LT5uYW1lLCBzdGF0dXMsIG1hc2ssCi0JCQkoeyBpbnQgbWVtaW5mbzsgU01DX1NFTEVDVF9CQU5LKDApOwotCQkJICAgbWVtaW5mbyA9IFNNQ19HRVRfTUlSKCk7Ci0JCQkgICBTTUNfU0VMRUNUX0JBTksoMik7IG1lbWluZm87IH0pLAotCQkJU01DX0dFVF9GSUZPKCkpOworCQkJKHsgaW50IG1lbWluZm87IFNNQ19TRUxFQ1RfQkFOSyhscCwgMCk7CisJCQkgICBtZW1pbmZvID0gU01DX0dFVF9NSVIobHApOworCQkJICAgU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsgbWVtaW5mbzsgfSksCisJCQlTTUNfR0VUX0ZJRk8obHApKTsKIAogCQlzdGF0dXMgJj0gbWFzazsKIAkJaWYgKCFzdGF0dXMpCkBAIC0xMjc3LDcgKzEyNzcsNyBAQAogCQkJLyogZG8gdGhpcyBiZWZvcmUgUlggYXMgaXQgd2lsbCBmcmVlIG1lbW9yeSBxdWlja2x5ICovCiAJCQlEQkcoMywgIiVzOiBUWCBpbnRcbiIsIGRldi0+bmFtZSk7CiAJCQlzbWNfdHgoZGV2KTsKLQkJCVNNQ19BQ0tfSU5UKElNX1RYX0lOVCk7CisJCQlTTUNfQUNLX0lOVChscCwgSU1fVFhfSU5UKTsKIAkJCWlmIChUSFJPVFRMRV9UWF9QS1RTKQogCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJfSBlbHNlIGlmIChzdGF0dXMgJiBJTV9SQ1ZfSU5UKSB7CkBAIC0xMjkyLDkgKzEyOTIsOSBAQAogCQkJbWFzayAmPSB+SU1fVFhfRU1QVFlfSU5UOwogCiAJCQkvKiB1cGRhdGUgc3RhdHMgKi8KLQkJCVNNQ19TRUxFQ1RfQkFOSygwKTsKLQkJCWNhcmRfc3RhdHMgPSBTTUNfR0VUX0NPVU5URVIoKTsKLQkJCVNNQ19TRUxFQ1RfQkFOSygyKTsKKwkJCVNNQ19TRUxFQ1RfQkFOSyhscCwgMCk7CisJCQljYXJkX3N0YXRzID0gU01DX0dFVF9DT1VOVEVSKGxwKTsKKwkJCVNNQ19TRUxFQ1RfQkFOSyhscCwgMik7CiAKIAkJCS8qIHNpbmdsZSBjb2xsaXNpb25zICovCiAJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gY2FyZF9zdGF0cyAmIDB4RjsKQEAgLTEzMDQsMzEgKzEzMDQsMzMgQEAKIAkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBjYXJkX3N0YXRzICYgMHhGOwogCQl9IGVsc2UgaWYgKHN0YXR1cyAmIElNX1JYX09WUk5fSU5UKSB7CiAJCQlEQkcoMSwgIiVzOiBSWCBvdmVycnVuIChFUEhfU1QgMHglMDR4KVxuIiwgZGV2LT5uYW1lLAotCQkJICAgICAgICh7IGludCBlcGhfc3Q7IFNNQ19TRUxFQ1RfQkFOSygwKTsKLQkJCQkgIGVwaF9zdCA9IFNNQ19HRVRfRVBIX1NUQVRVUygpOwotCQkJCSAgU01DX1NFTEVDVF9CQU5LKDIpOyBlcGhfc3Q7IH0pICk7Ci0JCQlTTUNfQUNLX0lOVChJTV9SWF9PVlJOX0lOVCk7CisJCQkgICAgICAgKHsgaW50IGVwaF9zdDsgU01DX1NFTEVDVF9CQU5LKGxwLCAwKTsKKwkJCQkgIGVwaF9zdCA9IFNNQ19HRVRfRVBIX1NUQVRVUyhscCk7CisJCQkJICBTTUNfU0VMRUNUX0JBTksobHAsIDIpOyBlcGhfc3Q7IH0pKTsKKwkJCVNNQ19BQ0tfSU5UKGxwLCBJTV9SWF9PVlJOX0lOVCk7CiAJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQl9IGVsc2UgaWYgKHN0YXR1cyAmIElNX0VQSF9JTlQpIHsKIAkJCXNtY19lcGhfaW50ZXJydXB0KGRldik7CiAJCX0gZWxzZSBpZiAoc3RhdHVzICYgSU1fTURJTlQpIHsKLQkJCVNNQ19BQ0tfSU5UKElNX01ESU5UKTsKKwkJCVNNQ19BQ0tfSU5UKGxwLCBJTV9NRElOVCk7CiAJCQlzbWNfcGh5X2ludGVycnVwdChkZXYpOwogCQl9IGVsc2UgaWYgKHN0YXR1cyAmIElNX0VSQ1ZfSU5UKSB7Ci0JCQlTTUNfQUNLX0lOVChJTV9FUkNWX0lOVCk7CisJCQlTTUNfQUNLX0lOVChscCwgSU1fRVJDVl9JTlQpOwogCQkJUFJJTlRLKCIlczogVU5TVVBQT1JURUQ6IEVSQ1YgSU5URVJSVVBUIFxuIiwgZGV2LT5uYW1lKTsKIAkJfQogCX0gd2hpbGUgKC0tdGltZW91dCk7CiAKIAkvKiByZXN0b3JlIHJlZ2lzdGVyIHN0YXRlcyAqLwotCVNNQ19TRVRfUFRSKHNhdmVkX3BvaW50ZXIpOwotCVNNQ19TRVRfSU5UX01BU0sobWFzayk7CisJU01DX1NFVF9QVFIobHAsIHNhdmVkX3BvaW50ZXIpOworCVNNQ19TRVRfSU5UX01BU0sobHAsIG1hc2spOwogCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CiAKKyNpZm5kZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAlpZiAodGltZW91dCA9PSBNQVhfSVJRX0xPT1BTKQogCQlQUklOVEsoIiVzOiBzcHVyaW91cyBpbnRlcnJ1cHQgKG1hc2sgPSAweCUwMngpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBtYXNrKTsKKyNlbmRpZgogCURCRygzLCAiJXM6IEludGVycnVwdCBkb25lICglZCBsb29wcylcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgTUFYX0lSUV9MT09QUyAtIHRpbWVvdXQpOwogCkBAIC0xMzY2LDEzICsxMzY4LDEzIEBACiAJREJHKDIsICIlczogJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKIAogCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKLQlzdGF0dXMgPSBTTUNfR0VUX0lOVCgpOwotCW1hc2sgPSBTTUNfR0VUX0lOVF9NQVNLKCk7Ci0JZmlmbyA9IFNNQ19HRVRfRklGTygpOwotCVNNQ19TRUxFQ1RfQkFOSygwKTsKLQllcGhfc3QgPSBTTUNfR0VUX0VQSF9TVEFUVVMoKTsKLQltZW1pbmZvID0gU01DX0dFVF9NSVIoKTsKLQlTTUNfU0VMRUNUX0JBTksoMik7CisJc3RhdHVzID0gU01DX0dFVF9JTlQobHApOworCW1hc2sgPSBTTUNfR0VUX0lOVF9NQVNLKGxwKTsKKwlmaWZvID0gU01DX0dFVF9GSUZPKGxwKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDApOworCWVwaF9zdCA9IFNNQ19HRVRfRVBIX1NUQVRVUyhscCk7CisJbWVtaW5mbyA9IFNNQ19HRVRfTUlSKGxwKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCVBSSU5USyggIiVzOiBUWCB0aW1lb3V0IChJTlQgMHglMDJ4IElOVE1BU0sgMHglMDJ4ICIKIAkJIk1FTSAweCUwNHggRklGTyAweCUwNHggRVBIX1NUIDB4JTA0eClcbiIsCkBAIC0xNDkyLDEzICsxNDk0LDEzIEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCVNNQ19TRUxFQ1RfQkFOSygwKTsKLQlTTUNfU0VUX1JDUihscC0+cmNyX2N1cl9tb2RlKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDApOworCVNNQ19TRVRfUkNSKGxwLCBscC0+cmNyX2N1cl9tb2RlKTsKIAlpZiAodXBkYXRlX211bHRpY2FzdCkgewotCQlTTUNfU0VMRUNUX0JBTksoMyk7Ci0JCVNNQ19TRVRfTUNBU1QobXVsdGljYXN0X3RhYmxlKTsKKwkJU01DX1NFTEVDVF9CQU5LKGxwLCAzKTsKKwkJU01DX1NFVF9NQ0FTVChscCwgbXVsdGljYXN0X3RhYmxlKTsKIAl9Ci0JU01DX1NFTEVDVF9CQU5LKDIpOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMik7CiAJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CiB9CiAKQEAgLTE3MDIsOCArMTcwNCw5IEBACiAgKiBJIGp1c3QgZGVsZXRlZCBhdXRvX2lycS5jLCBzaW5jZSBpdCB3YXMgbmV2ZXIgYnVpbHQuLi4KICAqICAgLS1qZ2FyemlrCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNtY19maW5kaXJxKHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIGludCBfX2luaXQgc21jX2ZpbmRpcnEoc3RydWN0IHNtY19sb2NhbCAqbHApCiB7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKIAlpbnQgdGltZW91dCA9IDIwOwogCXVuc2lnbmVkIGxvbmcgY29va2llOwogCkBAIC0xNzE3LDE0ICsxNzIwLDE0IEBACiAJICogd2hlbiBkb25lLgogCSAqLwogCS8qIGVuYWJsZSBBTExPQ2F0aW9uIGludGVycnVwdHMgT05MWSAqLwotCVNNQ19TRUxFQ1RfQkFOSygyKTsKLQlTTUNfU0VUX0lOVF9NQVNLKElNX0FMTE9DX0lOVCk7CisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX0lOVF9NQVNLKGxwLCBJTV9BTExPQ19JTlQpOwogCiAJLyoKICAJICogQWxsb2NhdGUgNTEyIGJ5dGVzIG9mIG1lbW9yeS4gIE5vdGUgdGhhdCB0aGUgY2hpcCB3YXMganVzdAogCSAqIHJlc2V0IHNvIGFsbCB0aGUgbWVtb3J5IGlzIGF2YWlsYWJsZQogCSAqLwotCVNNQ19TRVRfTU1VX0NNRChNQ19BTExPQyB8IDEpOworCVNNQ19TRVRfTU1VX0NNRChscCwgTUNfQUxMT0MgfCAxKTsKIAogCS8qCiAJICogV2FpdCB1bnRpbCBwb3NpdGl2ZSB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gZ2VuZXJhdGVkCkBAIC0xNzMyLDcgKzE3MzUsNyBAQAogCWRvIHsKIAkJaW50IGludF9zdGF0dXM7CiAJCXVkZWxheSgxMCk7Ci0JCWludF9zdGF0dXMgPSBTTUNfR0VUX0lOVCgpOworCQlpbnRfc3RhdHVzID0gU01DX0dFVF9JTlQobHApOwogCQlpZiAoaW50X3N0YXR1cyAmIElNX0FMTE9DX0lOVCkKIAkJCWJyZWFrOwkJLyogZ290IHRoZSBpbnRlcnJ1cHQgKi8KIAl9IHdoaWxlICgtLXRpbWVvdXQpOwpAQCAtMTc0NSw3ICsxNzQ4LDcgQEAKIAkgKi8KIAogCS8qIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFnYWluICovCi0JU01DX1NFVF9JTlRfTUFTSygwKTsKKwlTTUNfU0VUX0lOVF9NQVNLKGxwLCAwKTsKIAogCS8qIGFuZCByZXR1cm4gd2hhdCBJIGZvdW5kICovCiAJcmV0dXJuIHByb2JlX2lycV9vZmYoY29va2llKTsKQEAgLTE3ODgsNyArMTc5MSw3IEBACiAJREJHKDIsICIlczogJXNcbiIsIENBUkROQU1FLCBfX0ZVTkNUSU9OX18pOwogCiAJLyogRmlyc3QsIHNlZSBpZiB0aGUgaGlnaCBieXRlIGlzIDB4MzMgKi8KLQl2YWwgPSBTTUNfQ1VSUkVOVF9CQU5LKCk7CisJdmFsID0gU01DX0NVUlJFTlRfQkFOSyhscCk7CiAJREJHKDIsICIlczogYmFuayBzaWduYXR1cmUgcHJvYmUgcmV0dXJuZWQgMHglMDR4XG4iLCBDQVJETkFNRSwgdmFsKTsKIAlpZiAoKHZhbCAmIDB4RkYwMCkgIT0gMHgzMzAwKSB7CiAJCWlmICgodmFsICYgMHhGRikgPT0gMHgzMykgewpAQCAtMTgwNCw4ICsxODA3LDggQEAKIAkgKiBUaGUgYWJvdmUgTUlHSFQgaW5kaWNhdGUgYSBkZXZpY2UsIGJ1dCBJIG5lZWQgdG8gd3JpdGUgdG8KIAkgKiBmdXJ0aGVyIHRlc3QgdGhpcy4KIAkgKi8KLQlTTUNfU0VMRUNUX0JBTksoMCk7Ci0JdmFsID0gU01DX0NVUlJFTlRfQkFOSygpOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMCk7CisJdmFsID0gU01DX0NVUlJFTlRfQkFOSyhscCk7CiAJaWYgKCh2YWwgJiAweEZGMDApICE9IDB4MzMwMCkgewogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0xODE3LDggKzE4MjAsOCBAQAogCSAqIHJlZ2lzdGVyIHRvIGJhbmsgMSwgc28gSSBjYW4gYWNjZXNzIHRoZSBiYXNlIGFkZHJlc3MKIAkgKiByZWdpc3RlcgogCSAqLwotCVNNQ19TRUxFQ1RfQkFOSygxKTsKLQl2YWwgPSBTTUNfR0VUX0JBU0UoKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOworCXZhbCA9IFNNQ19HRVRfQkFTRShscCk7CiAJdmFsID0gKCh2YWwgJiAweDFGMDApID4+IDMpIDw8IFNNQ19JT19TSElGVDsKIAlpZiAoKCh1bnNpZ25lZCBpbnQpaW9hZGRyICYgKDB4M2UwIDw8IFNNQ19JT19TSElGVCkpICE9IHZhbCkgewogCQlwcmludGsoIiVzOiBJT0FERFIgJXAgZG9lc24ndCBtYXRjaCBjb25maWd1cmF0aW9uICgleCkuXG4iLApAQCAtMTgzMCw4ICsxODMzLDggQEAKIAkgKiByZWNvZ25pemUuICBUaGVzZSBtaWdodCBuZWVkIHRvIGJlIGFkZGVkIHRvIGxhdGVyLAogCSAqIGFzIGZ1dHVyZSByZXZpc2lvbnMgY291bGQgYmUgYWRkZWQuCiAJICovCi0JU01DX1NFTEVDVF9CQU5LKDMpOwotCXJldmlzaW9uX3JlZ2lzdGVyID0gU01DX0dFVF9SRVYoKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDMpOworCXJldmlzaW9uX3JlZ2lzdGVyID0gU01DX0dFVF9SRVYobHApOwogCURCRygyLCAiJXM6IHJldmlzaW9uID0gMHglMDR4XG4iLCBDQVJETkFNRSwgcmV2aXNpb25fcmVnaXN0ZXIpOwogCXZlcnNpb25fc3RyaW5nID0gY2hpcF9pZHNbIChyZXZpc2lvbl9yZWdpc3RlciA+PiA0KSAmIDB4Rl07CiAJaWYgKCF2ZXJzaW9uX3N0cmluZyB8fCAocmV2aXNpb25fcmVnaXN0ZXIgJiAweGZmMDApICE9IDB4MzMwMCkgewpAQCAtMTg1NSw4ICsxODU4LDggQEAKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwogCiAJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCVNNQ19TRUxFQ1RfQkFOSygxKTsKLQlTTUNfR0VUX01BQ19BRERSKGRldi0+ZGV2X2FkZHIpOworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMSk7CisJU01DX0dFVF9NQUNfQUREUihscCwgZGV2LT5kZXZfYWRkcik7CiAKIAkvKiBub3csIHJlc2V0IHRoZSBjaGlwLCBhbmQgcHV0IGl0IGludG8gYSBrbm93biBzdGF0ZSAqLwogCXNtY19yZXNldChkZXYpOwpAQCAtMTg4MSw3ICsxODg0LDcgQEAKIAogCQl0cmlhbHMgPSAzOwogCQl3aGlsZSAodHJpYWxzLS0pIHsKLQkJCWRldi0+aXJxID0gc21jX2ZpbmRpcnEoaW9hZGRyKTsKKwkJCWRldi0+aXJxID0gc21jX2ZpbmRpcnEobHApOwogCQkJaWYgKGRldi0+aXJxKQogCQkJCWJyZWFrOwogCQkJLyoga2ljayB0aGUgY2FyZCBhbmQgdHJ5IGFnYWluICovCkBAIC0xOTk2LDYgKzE5OTksOCBAQAogCiBzdGF0aWMgaW50IHNtY19lbmFibGVfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciBlY29yLCBlY3NyOwogCXZvaWQgX19pb21lbSAqYWRkcjsKQEAgLTIwMzgsNyArMjA0Myw3IEBACiAJICogU2V0IHRoZSBhcHByb3ByaWF0ZSBieXRlL3dvcmQgbW9kZS4KIAkgKi8KIAllY3NyID0gcmVhZGIoYWRkciArIChFQ1NSIDw8IFNNQ19JT19TSElGVCkpICYgfkVDU1JfSU9JUzg7Ci0JaWYgKCFTTUNfQ0FOX1VTRV8xNkJJVCkKKwlpZiAoIVNNQ18xNkJJVChscCkpCiAJCWVjc3IgfD0gRUNTUl9JT0lTODsKIAl3cml0ZWIoZWNzciwgYWRkciArIChFQ1NSIDw8IFNNQ19JT19TSElGVCkpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTIxMjMsMTAgKzIxMjgsMTEgQEAKICAqLwogc3RhdGljIGludCBzbWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKmlyZXM7CiAJdW5zaWduZWQgaW50IF9faW9tZW0gKmFkZHI7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MgPSBTTUNfSVJRX0ZMQUdTOwogCWludCByZXQ7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAic21jOTF4LXJlZ3MiKTsKQEAgLTIxNTEsNiArMjE1NywyNyBAQAogCX0KIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIAorCS8qIGdldCBjb25maWd1cmF0aW9uIGZyb20gcGxhdGZvcm0gZGF0YSwgb25seSBhbGxvdyB1c2Ugb2YKKwkgKiBidXMgd2lkdGggaWYgYm90aCBTTUNfQ0FOX1VTRV94eHggYW5kIFNNQzkxWF9VU0VfeHh4IGFyZSBzZXQuCisJICovCisKKwlscCA9IG5ldGRldl9wcml2KG5kZXYpOworCWxwLT5jZmcuaXJxX2ZsYWdzID0gU01DX0lSUV9GTEFHUzsKKworI2lmZGVmIFNNQ19EWU5BTUlDX0JVU19DT05GSUcKKwlpZiAocGQpCisJCW1lbWNweSgmbHAtPmNmZywgcGQsIHNpemVvZihscC0+Y2ZnKSk7CisJZWxzZSB7CisJCWxwLT5jZmcuZmxhZ3MgPSBTTUM5MVhfVVNFXzhCSVQ7CisJCWxwLT5jZmcuZmxhZ3MgfD0gU01DOTFYX1VTRV8xNkJJVDsKKwkJbHAtPmNmZy5mbGFncyB8PSBTTUM5MVhfVVNFXzMyQklUOworCX0KKworCWxwLT5jZmcuZmxhZ3MgJj0gfihTTUNfQ0FOX1VTRV84QklUID8gMCA6IFNNQzkxWF9VU0VfOEJJVCk7CisJbHAtPmNmZy5mbGFncyAmPSB+KFNNQ19DQU5fVVNFXzE2QklUID8gMCA6IFNNQzkxWF9VU0VfMTZCSVQpOworCWxwLT5jZmcuZmxhZ3MgJj0gfihTTUNfQ0FOX1VTRV8zMkJJVCA/IDAgOiBTTUM5MVhfVVNFXzMyQklUKTsKKyNlbmRpZgorCiAJbmRldi0+ZG1hID0gKHVuc2lnbmVkIGNoYXIpLTE7CiAKIAlpcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKQEAgLTIxNjEsNyArMjE4OCw3IEBACiAKIAluZGV2LT5pcnEgPSBpcmVzLT5zdGFydDsKIAlpZiAoU01DX0lSUV9GTEFHUyA9PSAtMSkKLQkJaXJxX2ZsYWdzID0gaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKwkJbHAtPmNmZy5pcnFfZmxhZ3MgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCiAJcmV0ID0gc21jX3JlcXVlc3RfYXR0cmliKHBkZXYpOwogCWlmIChyZXQpCkBAIC0yMTY5LDYgKzIxOTYsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NBMTEwMF9BU1NBQkVUKQogCU5DUl8wIHw9IE5DUl9FTkVUX09TQ19FTjsKICNlbmRpZgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOwogCXJldCA9IHNtY19lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3JlbGVhc2VfYXR0cmliOwpAQCAtMjE4Nyw4ICsyMjE1LDcgQEAKIAl9CiAjZW5kaWYKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOwotCXJldCA9IHNtY19wcm9iZShuZGV2LCBhZGRyLCBpcnFfZmxhZ3MpOworCXJldCA9IHNtY19wcm9iZShuZGV2LCBhZGRyLCBscC0+Y2ZnLmlycV9mbGFncyk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dF9pb3VubWFwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDUxZDQxMzQuLjY5ZTk3YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaWZuZGVmIF9TTUM5MVhfSF8KICNkZWZpbmUgX1NNQzkxWF9IXwogCisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKIC8qCiAgKiBEZWZpbmUgeW91ciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYnVzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBoZXJlLgpAQCAtMjkxLDM2ICsyOTIsNiBAQAogI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKQlpbnN3KChhKSArIChyKSwgcCwgbCkKICNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCW91dHN3KChhKSArIChyKSwgcCwgbCkKIAotI2VsaWYgICBkZWZpbmVkKENPTkZJR19TVVBFUkgpCi0KLSNpZmRlZiBDT05GSUdfU09MVVRJT05fRU5HSU5FCi0jZGVmaW5lIFNNQ19JUlFfRkxBR1MJCSgwKQotI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUICAgICAgIDAKLSNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQgICAgICAxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUICAgICAgMAotI2RlZmluZSBTTUNfSU9fU0hJRlQgICAgICAgICAgIDAKLSNkZWZpbmUgU01DX05PV0FJVCAgICAgICAgICAgICAxCi0KLSNkZWZpbmUgU01DX2ludyhhLCByKSAgICAgICAgICBpbncoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKSAgICAgIG91dHcodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKSAgIGluc3coKGEpICsgKHIpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkgIG91dHN3KChhKSArIChyKSwgcCwgbCkKLQotI2Vsc2UgLyogQk9BUkRTICovCi0KLSNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVCAgICAgICAxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUICAgICAgMQotI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVCAgICAgIDAKLQotI2RlZmluZSBTTUNfaW5iKGEsIHIpICAgICAgICAgIGluYigoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19pbncoYSwgcikgICAgICAgICAgaW53KChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dGIodiwgYSwgcikgICAgICBvdXRiKHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dHcodiwgYSwgcikgICAgICBvdXR3KHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkgICBpbnN3KChhKSArIChyKSwgcCwgbCkKLSNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpICBvdXRzdygoYSkgKyAociksIHAsIGwpCi0KLSNlbmRpZiAgLyogQk9BUkRTICovCi0KICNlbGlmICAgZGVmaW5lZChDT05GSUdfTTMyUikKIAogI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTAKQEAgLTQ3NSwxMiArNDQ2LDE1IEBACiAjZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpCXdyaXRlYih2LCAoYSkgKyAocikpCiAjZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCXdyaXRldyh2LCAoYSkgKyAocikpCiAjZGVmaW5lIFNNQ19vdXRsKHYsIGEsIHIpCXdyaXRlbCh2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpCXJlYWRzdygoYSkgKyAociksIHAsIGwpCisjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKQl3cml0ZXN3KChhKSArIChyKSwgcCwgbCkKICNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJcmVhZHNsKChhKSArIChyKSwgcCwgbCkKICNkZWZpbmUgU01DX291dHNsKGEsIHIsIHAsIGwpCXdyaXRlc2woKGEpICsgKHIpLCBwLCBsKQogCiAjZGVmaW5lIFJQQ19MU0FfREVGQVVMVAkJUlBDX0xFRF8xMDBfMTAKICNkZWZpbmUgUlBDX0xTQl9ERUZBVUxUCQlSUENfTEVEX1RYX1JYCiAKKyNkZWZpbmUgU01DX0RZTkFNSUNfQlVTX0NPTkZJRwogI2VuZGlmCiAKIApAQCAtNTI2LDggKzUwMCwxOSBAQAogI2VuZGlmCiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXZvaWQgX19pb21lbSAqZGF0YWNzOworCisJc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBjZmc7CiB9OwogCisjaWZkZWYgU01DX0RZTkFNSUNfQlVTX0NPTkZJRworI2RlZmluZSBTTUNfOEJJVChwKSAoKChwKS0+Y2ZnLmZsYWdzICYgU01DOTFYX1VTRV84QklUKSAmJiBTTUNfQ0FOX1VTRV84QklUKQorI2RlZmluZSBTTUNfMTZCSVQocCkgKCgocCktPmNmZy5mbGFncyAmIFNNQzkxWF9VU0VfMTZCSVQpICYmIFNNQ19DQU5fVVNFXzE2QklUKQorI2RlZmluZSBTTUNfMzJCSVQocCkgKCgocCktPmNmZy5mbGFncyAmIFNNQzkxWF9VU0VfMzJCSVQpICYmIFNNQ19DQU5fVVNFXzMyQklUKQorI2Vsc2UKKyNkZWZpbmUgU01DXzhCSVQocCkgU01DX0NBTl9VU0VfOEJJVAorI2RlZmluZSBTTUNfMTZCSVQocCkgU01DX0NBTl9VU0VfMTZCSVQKKyNkZWZpbmUgU01DXzMyQklUKHApIFNNQ19DQU5fVVNFXzMyQklUCisjZW5kaWYKIAogI2lmZGVmIFNNQ19VU0VfUFhBX0RNQQogLyoKQEAgLTcyMCw3ICs3MDUsNyBAQAogCiAvLyBUcmFuc21pdCBDb250cm9sIFJlZ2lzdGVyCiAvKiBCQU5LIDAgICovCi0jZGVmaW5lIFRDUl9SRUcgCVNNQ19SRUcoMHgwMDAwLCAwKQorI2RlZmluZSBUQ1JfUkVHKGxwKSAJU01DX1JFRyhscCwgMHgwMDAwLCAwKQogI2RlZmluZSBUQ1JfRU5BQkxFCTB4MDAwMQkvLyBXaGVuIDEgd2UgY2FuIHRyYW5zbWl0CiAjZGVmaW5lIFRDUl9MT09QCTB4MDAwMgkvLyBDb250cm9scyBvdXRwdXQgcGluIExCSwogI2RlZmluZSBUQ1JfRk9SQ09MCTB4MDAwNAkvLyBXaGVuIDEgd2lsbCBmb3JjZSBhIGNvbGxpc2lvbgpAQCAtNzM5LDcgKzcyNCw3IEBACiAKIC8vIEVQSCBTdGF0dXMgUmVnaXN0ZXIKIC8qIEJBTksgMCAgKi8KLSNkZWZpbmUgRVBIX1NUQVRVU19SRUcJU01DX1JFRygweDAwMDIsIDApCisjZGVmaW5lIEVQSF9TVEFUVVNfUkVHKGxwKQlTTUNfUkVHKGxwLCAweDAwMDIsIDApCiAjZGVmaW5lIEVTX1RYX1NVQwkweDAwMDEJLy8gTGFzdCBUWCB3YXMgc3VjY2Vzc2Z1bAogI2RlZmluZSBFU19TTkdMX0NPTAkweDAwMDIJLy8gU2luZ2xlIGNvbGxpc2lvbiBkZXRlY3RlZCBmb3IgbGFzdCB0eAogI2RlZmluZSBFU19NVUxfQ09MCTB4MDAwNAkvLyBNdWx0aXBsZSBjb2xsaXNpb25zIGRldGVjdGVkIGZvciBsYXN0IHR4CkBAIC03NTgsNyArNzQzLDcgQEAKIAogLy8gUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVyCiAvKiBCQU5LIDAgICovCi0jZGVmaW5lIFJDUl9SRUcJCVNNQ19SRUcoMHgwMDA0LCAwKQorI2RlZmluZSBSQ1JfUkVHKGxwKQkJU01DX1JFRyhscCwgMHgwMDA0LCAwKQogI2RlZmluZSBSQ1JfUlhfQUJPUlQJMHgwMDAxCS8vIFNldCBpZiBhIHJ4IGZyYW1lIHdhcyBhYm9ydGVkCiAjZGVmaW5lIFJDUl9QUk1TCTB4MDAwMgkvLyBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZQogI2RlZmluZSBSQ1JfQUxNVUwJMHgwMDA0CS8vIFdoZW4gc2V0IGFjY2VwdHMgYWxsIG11bHRpY2FzdCBmcmFtZXMKQEAgLTc3NSwxNyArNzYwLDE3IEBACiAKIC8vIENvdW50ZXIgUmVnaXN0ZXIKIC8qIEJBTksgMCAgKi8KLSNkZWZpbmUgQ09VTlRFUl9SRUcJU01DX1JFRygweDAwMDYsIDApCisjZGVmaW5lIENPVU5URVJfUkVHKGxwKQlTTUNfUkVHKGxwLCAweDAwMDYsIDApCiAKIAogLy8gTWVtb3J5IEluZm9ybWF0aW9uIFJlZ2lzdGVyCiAvKiBCQU5LIDAgICovCi0jZGVmaW5lIE1JUl9SRUcJCVNNQ19SRUcoMHgwMDA4LCAwKQorI2RlZmluZSBNSVJfUkVHKGxwKQkJU01DX1JFRyhscCwgMHgwMDA4LCAwKQogCiAKIC8vIFJlY2VpdmUvUGh5IENvbnRyb2wgUmVnaXN0ZXIKIC8qIEJBTksgMCAgKi8KLSNkZWZpbmUgUlBDX1JFRwkJU01DX1JFRygweDAwMEEsIDApCisjZGVmaW5lIFJQQ19SRUcobHApCQlTTUNfUkVHKGxwLCAweDAwMEEsIDApCiAjZGVmaW5lIFJQQ19TUEVFRAkweDIwMDAJLy8gV2hlbiAxIFBIWSBpcyBpbiAxMDBNYnBzIG1vZGUuCiAjZGVmaW5lIFJQQ19EUExYCTB4MTAwMAkvLyBXaGVuIDEgUEhZIGlzIGluIEZ1bGwtRHVwbGV4IE1vZGUKICNkZWZpbmUgUlBDX0FORUcJMHgwODAwCS8vIFdoZW4gMSBQSFkgaXMgaW4gQXV0by1OZWdvdGlhdGUgTW9kZQpAQCAtODE5LDcgKzgwNCw3IEBACiAKIC8vIENvbmZpZ3VyYXRpb24gUmVnCiAvKiBCQU5LIDEgKi8KLSNkZWZpbmUgQ09ORklHX1JFRwlTTUNfUkVHKDB4MDAwMCwJMSkKKyNkZWZpbmUgQ09ORklHX1JFRyhscCkJU01DX1JFRyhscCwgMHgwMDAwLAkxKQogI2RlZmluZSBDT05GSUdfRVhUX1BIWQkweDAyMDAJLy8gMT1leHRlcm5hbCBNSUksIDA9aW50ZXJuYWwgUGh5CiAjZGVmaW5lIENPTkZJR19HUENOVFJMCTB4MDQwMAkvLyBJbnZlcnNlIHZhbHVlIGRyaXZlcyBwaW4gbkNOVFJMCiAjZGVmaW5lIENPTkZJR19OT19XQUlUCTB4MTAwMAkvLyBXaGVuIDEgbm8gZXh0cmEgd2FpdCBzdGF0ZXMgb24gSVNBIGJ1cwpAQCAtODMxLDI0ICs4MTYsMjQgQEAKIAogLy8gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyCiAvKiBCQU5LIDEgKi8KLSNkZWZpbmUgQkFTRV9SRUcJU01DX1JFRygweDAwMDIsIDEpCisjZGVmaW5lIEJBU0VfUkVHKGxwKQlTTUNfUkVHKGxwLCAweDAwMDIsIDEpCiAKIAogLy8gSW5kaXZpZHVhbCBBZGRyZXNzIFJlZ2lzdGVycwogLyogQkFOSyAxICovCi0jZGVmaW5lIEFERFIwX1JFRwlTTUNfUkVHKDB4MDAwNCwgMSkKLSNkZWZpbmUgQUREUjFfUkVHCVNNQ19SRUcoMHgwMDA2LCAxKQotI2RlZmluZSBBRERSMl9SRUcJU01DX1JFRygweDAwMDgsIDEpCisjZGVmaW5lIEFERFIwX1JFRyhscCkJU01DX1JFRyhscCwgMHgwMDA0LCAxKQorI2RlZmluZSBBRERSMV9SRUcobHApCVNNQ19SRUcobHAsIDB4MDAwNiwgMSkKKyNkZWZpbmUgQUREUjJfUkVHKGxwKQlTTUNfUkVHKGxwLCAweDAwMDgsIDEpCiAKIAogLy8gR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyCiAvKiBCQU5LIDEgKi8KLSNkZWZpbmUgR1BfUkVHCQlTTUNfUkVHKDB4MDAwQSwgMSkKKyNkZWZpbmUgR1BfUkVHKGxwKQkJU01DX1JFRyhscCwgMHgwMDBBLCAxKQogCiAKIC8vIENvbnRyb2wgUmVnaXN0ZXIKIC8qIEJBTksgMSAqLwotI2RlZmluZSBDVExfUkVHCQlTTUNfUkVHKDB4MDAwQywgMSkKKyNkZWZpbmUgQ1RMX1JFRyhscCkJCVNNQ19SRUcobHAsIDB4MDAwQywgMSkKICNkZWZpbmUgQ1RMX1JDVl9CQUQJMHg0MDAwIC8vIFdoZW4gMSBiYWQgQ1JDIHBhY2tldHMgYXJlIHJlY2VpdmVkCiAjZGVmaW5lIENUTF9BVVRPX1JFTEVBU0UgMHgwODAwIC8vIFdoZW4gMSB0eCBwYWdlcyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseQogI2RlZmluZSBDVExfTEVfRU5BQkxFCTB4MDA4MCAvLyBXaGVuIDEgZW5hYmxlcyBMaW5rIEVycm9yIGludGVycnVwdApAQCAtODYxLDcgKzg0Niw3IEBACiAKIC8vIE1NVSBDb21tYW5kIFJlZ2lzdGVyCiAvKiBCQU5LIDIgKi8KLSNkZWZpbmUgTU1VX0NNRF9SRUcJU01DX1JFRygweDAwMDAsIDIpCisjZGVmaW5lIE1NVV9DTURfUkVHKGxwKQlTTUNfUkVHKGxwLCAweDAwMDAsIDIpCiAjZGVmaW5lIE1DX0JVU1kJCTEJLy8gV2hlbiAxIHRoZSBsYXN0IHJlbGVhc2UgaGFzIG5vdCBjb21wbGV0ZWQKICNkZWZpbmUgTUNfTk9QCQkoMDw8NSkJLy8gTm8gT3AKICNkZWZpbmUgTUNfQUxMT0MJKDE8PDUpIAkvLyBPUiB3aXRoIG51bWJlciBvZiAyNTYgYnl0ZSBwYWNrZXRzCkBAIC04NzUsMzAgKzg2MCwzMCBAQAogCiAvLyBQYWNrZXQgTnVtYmVyIFJlZ2lzdGVyCiAvKiBCQU5LIDIgKi8KLSNkZWZpbmUgUE5fUkVHCQlTTUNfUkVHKDB4MDAwMiwgMikKKyNkZWZpbmUgUE5fUkVHKGxwKQkJU01DX1JFRyhscCwgMHgwMDAyLCAyKQogCiAKIC8vIEFsbG9jYXRpb24gUmVzdWx0IFJlZ2lzdGVyCiAvKiBCQU5LIDIgKi8KLSNkZWZpbmUgQVJfUkVHCQlTTUNfUkVHKDB4MDAwMywgMikKKyNkZWZpbmUgQVJfUkVHKGxwKQkJU01DX1JFRyhscCwgMHgwMDAzLCAyKQogI2RlZmluZSBBUl9GQUlMRUQJMHg4MAkvLyBBbG9jYXRpb24gRmFpbGVkCiAKIAogLy8gVFggRklGTyBQb3J0cyBSZWdpc3RlcgogLyogQkFOSyAyICovCi0jZGVmaW5lIFRYRklGT19SRUcJU01DX1JFRygweDAwMDQsIDIpCisjZGVmaW5lIFRYRklGT19SRUcobHApCVNNQ19SRUcobHAsIDB4MDAwNCwgMikKICNkZWZpbmUgVFhGSUZPX1RFTVBUWQkweDgwCS8vIFRYIEZJRk8gRW1wdHkKIAogLy8gUlggRklGTyBQb3J0cyBSZWdpc3RlcgogLyogQkFOSyAyICovCi0jZGVmaW5lIFJYRklGT19SRUcJU01DX1JFRygweDAwMDUsIDIpCisjZGVmaW5lIFJYRklGT19SRUcobHApCVNNQ19SRUcobHAsIDB4MDAwNSwgMikKICNkZWZpbmUgUlhGSUZPX1JFTVBUWQkweDgwCS8vIFJYIEZJRk8gRW1wdHkKIAotI2RlZmluZSBGSUZPX1JFRwlTTUNfUkVHKDB4MDAwNCwgMikKKyNkZWZpbmUgRklGT19SRUcobHApCVNNQ19SRUcobHAsIDB4MDAwNCwgMikKIAogLy8gUG9pbnRlciBSZWdpc3RlcgogLyogQkFOSyAyICovCi0jZGVmaW5lIFBUUl9SRUcJCVNNQ19SRUcoMHgwMDA2LCAyKQorI2RlZmluZSBQVFJfUkVHKGxwKQkJU01DX1JFRyhscCwgMHgwMDA2LCAyKQogI2RlZmluZSBQVFJfUkNWCQkweDgwMDAgLy8gMT1SZWNlaXZlIGFyZWEsIDA9VHJhbnNtaXQgYXJlYQogI2RlZmluZSBQVFJfQVVUT0lOQyAJMHg0MDAwIC8vIEF1dG8gaW5jcmVtZW50IHRoZSBwb2ludGVyIG9uIGVhY2ggYWNjZXNzCiAjZGVmaW5lIFBUUl9SRUFECTB4MjAwMCAvLyBXaGVuIDEgdGhlIG9wZXJhdGlvbiBpcyBhIHJlYWQKQEAgLTkwNiwxNyArODkxLDE3IEBACiAKIC8vIERhdGEgUmVnaXN0ZXIKIC8qIEJBTksgMiAqLwotI2RlZmluZSBEQVRBX1JFRwlTTUNfUkVHKDB4MDAwOCwgMikKKyNkZWZpbmUgREFUQV9SRUcobHApCVNNQ19SRUcobHAsIDB4MDAwOCwgMikKIAogCiAvLyBJbnRlcnJ1cHQgU3RhdHVzL0Fja25vd2xlZGdlIFJlZ2lzdGVyCiAvKiBCQU5LIDIgKi8KLSNkZWZpbmUgSU5UX1JFRwkJU01DX1JFRygweDAwMEMsIDIpCisjZGVmaW5lIElOVF9SRUcobHApCQlTTUNfUkVHKGxwLCAweDAwMEMsIDIpCiAKIAogLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKIC8qIEJBTksgMiAqLwotI2RlZmluZSBJTV9SRUcJCVNNQ19SRUcoMHgwMDBELCAyKQorI2RlZmluZSBJTV9SRUcobHApCQlTTUNfUkVHKGxwLCAweDAwMEQsIDIpCiAjZGVmaW5lIElNX01ESU5UCTB4ODAgLy8gUEhZIE1JIFJlZ2lzdGVyIDE4IEludGVycnVwdAogI2RlZmluZSBJTV9FUkNWX0lOVAkweDQwIC8vIEVhcmx5IFJlY2VpdmUgSW50ZXJydXB0CiAjZGVmaW5lIElNX0VQSF9JTlQJMHgyMCAvLyBTZXQgYnkgRXRoZXJuZXQgUHJvdG9jb2wgSGFuZGxlciBzZWN0aW9uCkBAIC05MjksMTUgKzkxNCwxNSBAQAogCiAvLyBNdWx0aWNhc3QgVGFibGUgUmVnaXN0ZXJzCiAvKiBCQU5LIDMgKi8KLSNkZWZpbmUgTUNBU1RfUkVHMQlTTUNfUkVHKDB4MDAwMCwgMykKLSNkZWZpbmUgTUNBU1RfUkVHMglTTUNfUkVHKDB4MDAwMiwgMykKLSNkZWZpbmUgTUNBU1RfUkVHMwlTTUNfUkVHKDB4MDAwNCwgMykKLSNkZWZpbmUgTUNBU1RfUkVHNAlTTUNfUkVHKDB4MDAwNiwgMykKKyNkZWZpbmUgTUNBU1RfUkVHMShscCkJU01DX1JFRyhscCwgMHgwMDAwLCAzKQorI2RlZmluZSBNQ0FTVF9SRUcyKGxwKQlTTUNfUkVHKGxwLCAweDAwMDIsIDMpCisjZGVmaW5lIE1DQVNUX1JFRzMobHApCVNNQ19SRUcobHAsIDB4MDAwNCwgMykKKyNkZWZpbmUgTUNBU1RfUkVHNChscCkJU01DX1JFRyhscCwgMHgwMDA2LCAzKQogCiAKIC8vIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFJlZ2lzdGVyIChNSUkpCiAvKiBCQU5LIDMgKi8KLSNkZWZpbmUgTUlJX1JFRwkJU01DX1JFRygweDAwMDgsIDMpCisjZGVmaW5lIE1JSV9SRUcobHApCQlTTUNfUkVHKGxwLCAweDAwMDgsIDMpCiAjZGVmaW5lIE1JSV9NU0tfQ1JTMTAwCTB4NDAwMCAvLyBEaXNhYmxlcyBDUlMxMDAgZGV0ZWN0aW9uIGR1cmluZyB0eCBoYWxmIGR1cAogI2RlZmluZSBNSUlfTURPRQkweDAwMDggLy8gTUlJIE91dHB1dCBFbmFibGUKICNkZWZpbmUgTUlJX01DTEsJMHgwMDA0IC8vIE1JSSBDbG9jaywgcGluIE1EQ0xLCkBAIC05NDgsMjAgKzkzMywyMCBAQAogLy8gUmV2aXNpb24gUmVnaXN0ZXIKIC8qIEJBTksgMyAqLwogLyogKCBoaTogY2hpcCBpZCAgIGxvdzogcmV2ICMgKSAqLwotI2RlZmluZSBSRVZfUkVHCQlTTUNfUkVHKDB4MDAwQSwgMykKKyNkZWZpbmUgUkVWX1JFRyhscCkJCVNNQ19SRUcobHAsIDB4MDAwQSwgMykKIAogCiAvLyBFYXJseSBSQ1YgUmVnaXN0ZXIKIC8qIEJBTksgMyAqLwogLyogdGhpcyBpcyBOT1Qgb24gU01DOTE5MiAqLwotI2RlZmluZSBFUkNWX1JFRwlTTUNfUkVHKDB4MDAwQywgMykKKyNkZWZpbmUgRVJDVl9SRUcobHApCVNNQ19SRUcobHAsIDB4MDAwQywgMykKICNkZWZpbmUgRVJDVl9SQ1ZfRElTQ1JECTB4MDA4MCAvLyBXaGVuIDEgZGlzY2FyZHMgYSBwYWNrZXQgYmVpbmcgcmVjZWl2ZWQKICNkZWZpbmUgRVJDVl9USFJFU0hPTEQJMHgwMDFGIC8vIEVSQ1YgVGhyZXNob2xkIE1hc2sKIAogCiAvLyBFeHRlcm5hbCBSZWdpc3RlcgogLyogQkFOSyA3ICovCi0jZGVmaW5lIEVYVF9SRUcJCVNNQ19SRUcoMHgwMDAwLCA3KQorI2RlZmluZSBFWFRfUkVHKGxwKQkJU01DX1JFRyhscCwgMHgwMDAwLCA3KQogCiAKICNkZWZpbmUgQ0hJUF85MTkyCTMKQEAgLTEwODUsOSArMTA3MCw5IEBACiAgKi8KIAogI2lmIFNNQ19ERUJVRyA+IDAKLSNkZWZpbmUgU01DX1JFRyhyZWcsIGJhbmspCQkJCQkJXAorI2RlZmluZSBTTUNfUkVHKGxwLCByZWcsIGJhbmspCQkJCQlcCiAJKHsJCQkJCQkJCVwKLQkJaW50IF9fYiA9IFNNQ19DVVJSRU5UX0JBTksoKTsJCQkJXAorCQlpbnQgX19iID0gU01DX0NVUlJFTlRfQkFOSyhscCk7CQkJXAogCQlpZiAodW5saWtlbHkoKF9fYiAmIH4weGYwKSAhPSAoMHgzMzAwIHwgYmFuaykpKSB7CVwKIAkJCXByaW50ayggIiVzOiBiYW5rIHJlZyBzY3Jld2VkICgweCUwNHgpXG4iLAlcCiAJCQkJQ0FSRE5BTUUsIF9fYiApOwkJCVwKQEAgLTEwOTYsNyArMTA4MSw3IEBACiAJCXJlZzw8U01DX0lPX1NISUZUOwkJCQkJXAogCX0pCiAjZWxzZQotI2RlZmluZSBTTUNfUkVHKHJlZywgYmFuaykJKHJlZzw8U01DX0lPX1NISUZUKQorI2RlZmluZSBTTUNfUkVHKGxwLCByZWcsIGJhbmspCShyZWc8PFNNQ19JT19TSElGVCkKICNlbmRpZgogCiAvKgpAQCAtMTEwOCwyMTIgKzEwOTMsMjE1IEBACiAgKgogICogRW5mb3JjZSBpdCBvbiBhbnkgMzItYml0IGNhcGFibGUgc2V0dXAgZm9yIG5vdy4KICAqLwotI2RlZmluZSBTTUNfTVVTVF9BTElHTl9XUklURQlTTUNfQ0FOX1VTRV8zMkJJVAorI2RlZmluZSBTTUNfTVVTVF9BTElHTl9XUklURShscCkJU01DXzMyQklUKGxwKQogCi0jZGVmaW5lIFNNQ19HRVRfUE4oKQkJCQkJCQlcCi0JKCBTTUNfQ0FOX1VTRV84QklUCT8gKFNNQ19pbmIoaW9hZGRyLCBQTl9SRUcpKQkJXAotCQkJCTogKFNNQ19pbncoaW9hZGRyLCBQTl9SRUcpICYgMHhGRikgKQorI2RlZmluZSBTTUNfR0VUX1BOKGxwKQkJCQkJCVwKKwkoU01DXzhCSVQobHApCT8gKFNNQ19pbmIoaW9hZGRyLCBQTl9SRUcobHApKSkJXAorCQkJCTogKFNNQ19pbncoaW9hZGRyLCBQTl9SRUcobHApKSAmIDB4RkYpKQogCi0jZGVmaW5lIFNNQ19TRVRfUE4oeCkJCQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX1BOKGxwLCB4KQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWlmIChTTUNfTVVTVF9BTElHTl9XUklURSkJCQkJXAotCQkJU01DX291dGwoKHgpPDwxNiwgaW9hZGRyLCBTTUNfUkVHKDAsIDIpKTsJXAotCQllbHNlIGlmIChTTUNfQ0FOX1VTRV84QklUKQkJCQlcCi0JCQlTTUNfb3V0Yih4LCBpb2FkZHIsIFBOX1JFRyk7CQkJXAorCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUobHApKQkJCQlcCisJCQlTTUNfb3V0bCgoeCk8PDE2LCBpb2FkZHIsIFNNQ19SRUcobHAsIDAsIDIpKTsJXAorCQllbHNlIGlmIChTTUNfOEJJVChscCkpCQkJCVwKKwkJCVNNQ19vdXRiKHgsIGlvYWRkciwgUE5fUkVHKGxwKSk7CQlcCiAJCWVsc2UJCQkJCQkJXAotCQkJU01DX291dHcoeCwgaW9hZGRyLCBQTl9SRUcpOwkJCVwKKwkJCVNNQ19vdXR3KHgsIGlvYWRkciwgUE5fUkVHKGxwKSk7CQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBTTUNfR0VUX0FSKCkJCQkJCQkJXAotCSggU01DX0NBTl9VU0VfOEJJVAk/IChTTUNfaW5iKGlvYWRkciwgQVJfUkVHKSkJCVwKLQkgIAkJCTogKFNNQ19pbncoaW9hZGRyLCBQTl9SRUcpID4+IDgpICkKKyNkZWZpbmUgU01DX0dFVF9BUihscCkJCQkJCQlcCisJKFNNQ184QklUKGxwKQk/IChTTUNfaW5iKGlvYWRkciwgQVJfUkVHKGxwKSkpCVwKKwkJCQk6IChTTUNfaW53KGlvYWRkciwgUE5fUkVHKGxwKSkgPj4gOCkpCiAKLSNkZWZpbmUgU01DX0dFVF9UWEZJRk8oKQkJCQkJCVwKLQkoIFNNQ19DQU5fVVNFXzhCSVQJPyAoU01DX2luYihpb2FkZHIsIFRYRklGT19SRUcpKQkJXAotCQkJCTogKFNNQ19pbncoaW9hZGRyLCBUWEZJRk9fUkVHKSAmIDB4RkYpICkKKyNkZWZpbmUgU01DX0dFVF9UWEZJRk8obHApCQkJCQkJXAorCShTTUNfOEJJVChscCkJPyAoU01DX2luYihpb2FkZHIsIFRYRklGT19SRUcobHApKSkJXAorCQkJCTogKFNNQ19pbncoaW9hZGRyLCBUWEZJRk9fUkVHKGxwKSkgJiAweEZGKSkKIAotI2RlZmluZSBTTUNfR0VUX1JYRklGTygpCQkJCQkJXAotCSAgKCBTTUNfQ0FOX1VTRV84QklUCT8gKFNNQ19pbmIoaW9hZGRyLCBSWEZJRk9fUkVHKSkJCVwKLQkJCQk6IChTTUNfaW53KGlvYWRkciwgVFhGSUZPX1JFRykgPj4gOCkgKQorI2RlZmluZSBTTUNfR0VUX1JYRklGTyhscCkJCQkJCQlcCisJKFNNQ184QklUKGxwKQk/IChTTUNfaW5iKGlvYWRkciwgUlhGSUZPX1JFRyhscCkpKQlcCisJCQkJOiAoU01DX2ludyhpb2FkZHIsIFRYRklGT19SRUcobHApKSA+PiA4KSkKIAotI2RlZmluZSBTTUNfR0VUX0lOVCgpCQkJCQkJCVwKLQkoIFNNQ19DQU5fVVNFXzhCSVQJPyAoU01DX2luYihpb2FkZHIsIElOVF9SRUcpKQkJXAotCQkJCTogKFNNQ19pbncoaW9hZGRyLCBJTlRfUkVHKSAmIDB4RkYpICkKKyNkZWZpbmUgU01DX0dFVF9JTlQobHApCQkJCQkJXAorCShTTUNfOEJJVChscCkJPyAoU01DX2luYihpb2FkZHIsIElOVF9SRUcobHApKSkJXAorCQkJCTogKFNNQ19pbncoaW9hZGRyLCBJTlRfUkVHKGxwKSkgJiAweEZGKSkKIAotI2RlZmluZSBTTUNfQUNLX0lOVCh4KQkJCQkJCQlcCisjZGVmaW5lIFNNQ19BQ0tfSU5UKGxwLCB4KQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWlmIChTTUNfQ0FOX1VTRV84QklUKQkJCQkJXAotCQkJU01DX291dGIoeCwgaW9hZGRyLCBJTlRfUkVHKTsJCQlcCisJCWlmIChTTUNfOEJJVChscCkpCQkJCQlcCisJCQlTTUNfb3V0Yih4LCBpb2FkZHIsIElOVF9SRUcobHApKTsJCVwKIAkJZWxzZSB7CQkJCQkJCVwKIAkJCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJXAogCQkJaW50IF9fbWFzazsJCQkJCVwKIAkJCWxvY2FsX2lycV9zYXZlKF9fZmxhZ3MpOwkJCVwKLQkJCV9fbWFzayA9IFNNQ19pbncoIGlvYWRkciwgSU5UX1JFRyApICYgfjB4ZmY7CVwKLQkJCVNNQ19vdXR3KCBfX21hc2sgfCAoeCksIGlvYWRkciwgSU5UX1JFRyApOwlcCisJCQlfX21hc2sgPSBTTUNfaW53KGlvYWRkciwgSU5UX1JFRyhscCkpICYgfjB4ZmY7IFwKKwkJCVNNQ19vdXR3KF9fbWFzayB8ICh4KSwgaW9hZGRyLCBJTlRfUkVHKGxwKSk7CVwKIAkJCWxvY2FsX2lycV9yZXN0b3JlKF9fZmxhZ3MpOwkJCVwKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBTTUNfR0VUX0lOVF9NQVNLKCkJCQkJCQlcCi0JKCBTTUNfQ0FOX1VTRV84QklUCT8gKFNNQ19pbmIoaW9hZGRyLCBJTV9SRUcpKQkJXAotCQkJCTogKFNNQ19pbncoIGlvYWRkciwgSU5UX1JFRyApID4+IDgpICkKKyNkZWZpbmUgU01DX0dFVF9JTlRfTUFTSyhscCkJCQkJCQlcCisJKFNNQ184QklUKGxwKQk/IChTTUNfaW5iKGlvYWRkciwgSU1fUkVHKGxwKSkpCVwKKwkJCQk6IChTTUNfaW53KGlvYWRkciwgSU5UX1JFRyhscCkpID4+IDgpKQogCi0jZGVmaW5lIFNNQ19TRVRfSU5UX01BU0soeCkJCQkJCQlcCisjZGVmaW5lIFNNQ19TRVRfSU5UX01BU0sobHAsIHgpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlpZiAoU01DX0NBTl9VU0VfOEJJVCkJCQkJCVwKLQkJCVNNQ19vdXRiKHgsIGlvYWRkciwgSU1fUkVHKTsJCQlcCisJCWlmIChTTUNfOEJJVChscCkpCQkJCQlcCisJCQlTTUNfb3V0Yih4LCBpb2FkZHIsIElNX1JFRyhscCkpOwkJXAogCQllbHNlCQkJCQkJCVwKLQkJCVNNQ19vdXR3KCh4KSA8PCA4LCBpb2FkZHIsIElOVF9SRUcpOwkJXAorCQkJU01DX291dHcoKHgpIDw8IDgsIGlvYWRkciwgSU5UX1JFRyhscCkpOwlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBTTUNfQ1VSUkVOVF9CQU5LKCkJU01DX2ludyhpb2FkZHIsIEJBTktfU0VMRUNUKQorI2RlZmluZSBTTUNfQ1VSUkVOVF9CQU5LKGxwKQlTTUNfaW53KGlvYWRkciwgQkFOS19TRUxFQ1QpCiAKLSNkZWZpbmUgU01DX1NFTEVDVF9CQU5LKHgpCQkJCQkJXAorI2RlZmluZSBTTUNfU0VMRUNUX0JBTksobHAsIHgpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUpCQkJCVwKKwkJaWYgKFNNQ19NVVNUX0FMSUdOX1dSSVRFKGxwKSkJCQkJXAogCQkJU01DX291dGwoKHgpPDwxNiwgaW9hZGRyLCAxMjw8U01DX0lPX1NISUZUKTsJXAogCQllbHNlCQkJCQkJCVwKIAkJCVNNQ19vdXR3KHgsIGlvYWRkciwgQkFOS19TRUxFQ1QpOwkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU01DX0dFVF9CQVNFKCkJCVNNQ19pbncoaW9hZGRyLCBCQVNFX1JFRykKKyNkZWZpbmUgU01DX0dFVF9CQVNFKGxwKQkJU01DX2ludyhpb2FkZHIsIEJBU0VfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfU0VUX0JBU0UoeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgQkFTRV9SRUcpCisjZGVmaW5lIFNNQ19TRVRfQkFTRShscCwgeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgQkFTRV9SRUcobHApKQogCi0jZGVmaW5lIFNNQ19HRVRfQ09ORklHKCkJU01DX2ludyhpb2FkZHIsIENPTkZJR19SRUcpCisjZGVmaW5lIFNNQ19HRVRfQ09ORklHKGxwKQlTTUNfaW53KGlvYWRkciwgQ09ORklHX1JFRyhscCkpCiAKLSNkZWZpbmUgU01DX1NFVF9DT05GSUcoeCkJU01DX291dHcoeCwgaW9hZGRyLCBDT05GSUdfUkVHKQorI2RlZmluZSBTTUNfU0VUX0NPTkZJRyhscCwgeCkJU01DX291dHcoeCwgaW9hZGRyLCBDT05GSUdfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfR0VUX0NPVU5URVIoKQlTTUNfaW53KGlvYWRkciwgQ09VTlRFUl9SRUcpCisjZGVmaW5lIFNNQ19HRVRfQ09VTlRFUihscCkJU01DX2ludyhpb2FkZHIsIENPVU5URVJfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfR0VUX0NUTCgpCQlTTUNfaW53KGlvYWRkciwgQ1RMX1JFRykKKyNkZWZpbmUgU01DX0dFVF9DVEwobHApCQlTTUNfaW53KGlvYWRkciwgQ1RMX1JFRyhscCkpCiAKLSNkZWZpbmUgU01DX1NFVF9DVEwoeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgQ1RMX1JFRykKKyNkZWZpbmUgU01DX1NFVF9DVEwobHAsIHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIENUTF9SRUcobHApKQogCi0jZGVmaW5lIFNNQ19HRVRfTUlJKCkJCVNNQ19pbncoaW9hZGRyLCBNSUlfUkVHKQorI2RlZmluZSBTTUNfR0VUX01JSShscCkJCVNNQ19pbncoaW9hZGRyLCBNSUlfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfU0VUX01JSSh4KQkJU01DX291dHcoeCwgaW9hZGRyLCBNSUlfUkVHKQorI2RlZmluZSBTTUNfU0VUX01JSShscCwgeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgTUlJX1JFRyhscCkpCiAKLSNkZWZpbmUgU01DX0dFVF9NSVIoKQkJU01DX2ludyhpb2FkZHIsIE1JUl9SRUcpCisjZGVmaW5lIFNNQ19HRVRfTUlSKGxwKQkJU01DX2ludyhpb2FkZHIsIE1JUl9SRUcobHApKQogCi0jZGVmaW5lIFNNQ19TRVRfTUlSKHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIE1JUl9SRUcpCisjZGVmaW5lIFNNQ19TRVRfTUlSKGxwLCB4KQkJU01DX291dHcoeCwgaW9hZGRyLCBNSVJfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfR0VUX01NVV9DTUQoKQlTTUNfaW53KGlvYWRkciwgTU1VX0NNRF9SRUcpCisjZGVmaW5lIFNNQ19HRVRfTU1VX0NNRChscCkJU01DX2ludyhpb2FkZHIsIE1NVV9DTURfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfU0VUX01NVV9DTUQoeCkJU01DX291dHcoeCwgaW9hZGRyLCBNTVVfQ01EX1JFRykKKyNkZWZpbmUgU01DX1NFVF9NTVVfQ01EKGxwLCB4KQlTTUNfb3V0dyh4LCBpb2FkZHIsIE1NVV9DTURfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfR0VUX0ZJRk8oKQkJU01DX2ludyhpb2FkZHIsIEZJRk9fUkVHKQorI2RlZmluZSBTTUNfR0VUX0ZJRk8obHApCQlTTUNfaW53KGlvYWRkciwgRklGT19SRUcobHApKQogCi0jZGVmaW5lIFNNQ19HRVRfUFRSKCkJCVNNQ19pbncoaW9hZGRyLCBQVFJfUkVHKQorI2RlZmluZSBTTUNfR0VUX1BUUihscCkJCVNNQ19pbncoaW9hZGRyLCBQVFJfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfU0VUX1BUUih4KQkJCQkJCQlcCisjZGVmaW5lIFNNQ19TRVRfUFRSKGxwLCB4KQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWlmIChTTUNfTVVTVF9BTElHTl9XUklURSkJCQkJXAotCQkJU01DX291dGwoKHgpPDwxNiwgaW9hZGRyLCBTTUNfUkVHKDQsIDIpKTsJXAorCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUobHApKQkJCQlcCisJCQlTTUNfb3V0bCgoeCk8PDE2LCBpb2FkZHIsIFNNQ19SRUcobHAsIDQsIDIpKTsJXAogCQllbHNlCQkJCQkJCVwKLQkJCVNNQ19vdXR3KHgsIGlvYWRkciwgUFRSX1JFRyk7CQkJXAorCQkJU01DX291dHcoeCwgaW9hZGRyLCBQVFJfUkVHKGxwKSk7CQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBTTUNfR0VUX0VQSF9TVEFUVVMoKQlTTUNfaW53KGlvYWRkciwgRVBIX1NUQVRVU19SRUcpCisjZGVmaW5lIFNNQ19HRVRfRVBIX1NUQVRVUyhscCkJU01DX2ludyhpb2FkZHIsIEVQSF9TVEFUVVNfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfR0VUX1JDUigpCQlTTUNfaW53KGlvYWRkciwgUkNSX1JFRykKKyNkZWZpbmUgU01DX0dFVF9SQ1IobHApCQlTTUNfaW53KGlvYWRkciwgUkNSX1JFRyhscCkpCiAKLSNkZWZpbmUgU01DX1NFVF9SQ1IoeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgUkNSX1JFRykKKyNkZWZpbmUgU01DX1NFVF9SQ1IobHAsIHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIFJDUl9SRUcobHApKQogCi0jZGVmaW5lIFNNQ19HRVRfUkVWKCkJCVNNQ19pbncoaW9hZGRyLCBSRVZfUkVHKQorI2RlZmluZSBTTUNfR0VUX1JFVihscCkJCVNNQ19pbncoaW9hZGRyLCBSRVZfUkVHKGxwKSkKIAotI2RlZmluZSBTTUNfR0VUX1JQQygpCQlTTUNfaW53KGlvYWRkciwgUlBDX1JFRykKKyNkZWZpbmUgU01DX0dFVF9SUEMobHApCQlTTUNfaW53KGlvYWRkciwgUlBDX1JFRyhscCkpCiAKLSNkZWZpbmUgU01DX1NFVF9SUEMoeCkJCQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX1JQQyhscCwgeCkJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUpCQkJCVwKLQkJCVNNQ19vdXRsKCh4KTw8MTYsIGlvYWRkciwgU01DX1JFRyg4LCAwKSk7CVwKKwkJaWYgKFNNQ19NVVNUX0FMSUdOX1dSSVRFKGxwKSkJCQkJXAorCQkJU01DX291dGwoKHgpPDwxNiwgaW9hZGRyLCBTTUNfUkVHKGxwLCA4LCAwKSk7CVwKIAkJZWxzZQkJCQkJCQlcCi0JCQlTTUNfb3V0dyh4LCBpb2FkZHIsIFJQQ19SRUcpOwkJCVwKKwkJCVNNQ19vdXR3KHgsIGlvYWRkciwgUlBDX1JFRyhscCkpOwkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU01DX0dFVF9UQ1IoKQkJU01DX2ludyhpb2FkZHIsIFRDUl9SRUcpCisjZGVmaW5lIFNNQ19HRVRfVENSKGxwKQkJU01DX2ludyhpb2FkZHIsIFRDUl9SRUcobHApKQogCi0jZGVmaW5lIFNNQ19TRVRfVENSKHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIFRDUl9SRUcpCisjZGVmaW5lIFNNQ19TRVRfVENSKGxwLCB4KQkJU01DX291dHcoeCwgaW9hZGRyLCBUQ1JfUkVHKGxwKSkKIAogI2lmbmRlZiBTTUNfR0VUX01BQ19BRERSCi0jZGVmaW5lIFNNQ19HRVRfTUFDX0FERFIoYWRkcikJCQkJCQlcCisjZGVmaW5lIFNNQ19HRVRfTUFDX0FERFIobHAsIGFkZHIpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQl1bnNpZ25lZCBpbnQgX192OwkJCQkJXAotCQlfX3YgPSBTTUNfaW53KCBpb2FkZHIsIEFERFIwX1JFRyApOwkJCVwKKwkJX192ID0gU01DX2ludyhpb2FkZHIsIEFERFIwX1JFRyhscCkpOwkJCVwKIAkJYWRkclswXSA9IF9fdjsgYWRkclsxXSA9IF9fdiA+PiA4OwkJCVwKLQkJX192ID0gU01DX2ludyggaW9hZGRyLCBBRERSMV9SRUcgKTsJCQlcCisJCV9fdiA9IFNNQ19pbncoaW9hZGRyLCBBRERSMV9SRUcobHApKTsJCQlcCiAJCWFkZHJbMl0gPSBfX3Y7IGFkZHJbM10gPSBfX3YgPj4gODsJCQlcCi0JCV9fdiA9IFNNQ19pbncoIGlvYWRkciwgQUREUjJfUkVHICk7CQkJXAorCQlfX3YgPSBTTUNfaW53KGlvYWRkciwgQUREUjJfUkVHKGxwKSk7CQkJXAogCQlhZGRyWzRdID0gX192OyBhZGRyWzVdID0gX192ID4+IDg7CQkJXAogCX0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBTTUNfU0VUX01BQ19BRERSKGFkZHIpCQkJCQkJXAorI2RlZmluZSBTTUNfU0VUX01BQ19BRERSKGxwLCBhZGRyKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJU01DX291dHcoIGFkZHJbMF18KGFkZHJbMV0gPDwgOCksIGlvYWRkciwgQUREUjBfUkVHICk7CVwKLQkJU01DX291dHcoIGFkZHJbMl18KGFkZHJbM10gPDwgOCksIGlvYWRkciwgQUREUjFfUkVHICk7CVwKLQkJU01DX291dHcoIGFkZHJbNF18KGFkZHJbNV0gPDwgOCksIGlvYWRkciwgQUREUjJfUkVHICk7CVwKKwkJU01DX291dHcoYWRkclswXXwoYWRkclsxXSA8PCA4KSwgaW9hZGRyLCBBRERSMF9SRUcobHApKTsgXAorCQlTTUNfb3V0dyhhZGRyWzJdfChhZGRyWzNdIDw8IDgpLCBpb2FkZHIsIEFERFIxX1JFRyhscCkpOyBcCisJCVNNQ19vdXR3KGFkZHJbNF18KGFkZHJbNV0gPDwgOCksIGlvYWRkciwgQUREUjJfUkVHKGxwKSk7IFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFNNQ19TRVRfTUNBU1QoeCkJCQkJCQlcCisjZGVmaW5lIFNNQ19TRVRfTUNBU1QobHAsIHgpCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqbXQgPSAoeCk7CQkJCVwKLQkJU01DX291dHcoIG10WzBdIHwgKG10WzFdIDw8IDgpLCBpb2FkZHIsIE1DQVNUX1JFRzEgKTsJXAotCQlTTUNfb3V0dyggbXRbMl0gfCAobXRbM10gPDwgOCksIGlvYWRkciwgTUNBU1RfUkVHMiApOwlcCi0JCVNNQ19vdXR3KCBtdFs0XSB8IChtdFs1XSA8PCA4KSwgaW9hZGRyLCBNQ0FTVF9SRUczICk7CVwKLQkJU01DX291dHcoIG10WzZdIHwgKG10WzddIDw8IDgpLCBpb2FkZHIsIE1DQVNUX1JFRzQgKTsJXAorCQlTTUNfb3V0dyhtdFswXSB8IChtdFsxXSA8PCA4KSwgaW9hZGRyLCBNQ0FTVF9SRUcxKGxwKSk7IFwKKwkJU01DX291dHcobXRbMl0gfCAobXRbM10gPDwgOCksIGlvYWRkciwgTUNBU1RfUkVHMihscCkpOyBcCisJCVNNQ19vdXR3KG10WzRdIHwgKG10WzVdIDw8IDgpLCBpb2FkZHIsIE1DQVNUX1JFRzMobHApKTsgXAorCQlTTUNfb3V0dyhtdFs2XSB8IChtdFs3XSA8PCA4KSwgaW9hZGRyLCBNQ0FTVF9SRUc0KGxwKSk7IFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFNNQ19QVVRfUEtUX0hEUihzdGF0dXMsIGxlbmd0aCkJCQkJCVwKKyNkZWZpbmUgU01DX1BVVF9QS1RfSERSKGxwLCBzdGF0dXMsIGxlbmd0aCkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJaWYgKFNNQ19DQU5fVVNFXzMyQklUKQkJCQkJXAotCQkJU01DX291dGwoKHN0YXR1cykgfCAobGVuZ3RoKTw8MTYsIGlvYWRkciwgREFUQV9SRUcpOyBcCisJCWlmIChTTUNfMzJCSVQobHApKQkJCQkJXAorCQkJU01DX291dGwoKHN0YXR1cykgfCAobGVuZ3RoKTw8MTYsIGlvYWRkciwJXAorCQkJCSBEQVRBX1JFRyhscCkpOwkJCVwKIAkJZWxzZSB7CQkJCQkJCVwKLQkJCVNNQ19vdXR3KHN0YXR1cywgaW9hZGRyLCBEQVRBX1JFRyk7CQlcCi0JCQlTTUNfb3V0dyhsZW5ndGgsIGlvYWRkciwgREFUQV9SRUcpOwkJXAorCQkJU01DX291dHcoc3RhdHVzLCBpb2FkZHIsIERBVEFfUkVHKGxwKSk7CVwKKwkJCVNNQ19vdXR3KGxlbmd0aCwgaW9hZGRyLCBEQVRBX1JFRyhscCkpOwlcCiAJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU01DX0dFVF9QS1RfSERSKHN0YXR1cywgbGVuZ3RoKQkJCQkJXAorI2RlZmluZSBTTUNfR0VUX1BLVF9IRFIobHAsIHN0YXR1cywgbGVuZ3RoKQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlpZiAoU01DX0NBTl9VU0VfMzJCSVQpIHsJCQkJXAotCQkJdW5zaWduZWQgaW50IF9fdmFsID0gU01DX2lubChpb2FkZHIsIERBVEFfUkVHKTsJXAorCQlpZiAoU01DXzMyQklUKGxwKSkgewkJCQlcCisJCQl1bnNpZ25lZCBpbnQgX192YWwgPSBTTUNfaW5sKGlvYWRkciwgREFUQV9SRUcobHApKTsgXAogCQkJKHN0YXR1cykgPSBfX3ZhbCAmIDB4ZmZmZjsJCQlcCiAJCQkobGVuZ3RoKSA9IF9fdmFsID4+IDE2OwkJCQlcCiAJCX0gZWxzZSB7CQkJCQkJXAotCQkJKHN0YXR1cykgPSBTTUNfaW53KGlvYWRkciwgREFUQV9SRUcpOwkJXAotCQkJKGxlbmd0aCkgPSBTTUNfaW53KGlvYWRkciwgREFUQV9SRUcpOwkJXAorCQkJKHN0YXR1cykgPSBTTUNfaW53KGlvYWRkciwgREFUQV9SRUcobHApKTsJXAorCQkJKGxlbmd0aCkgPSBTTUNfaW53KGlvYWRkciwgREFUQV9SRUcobHApKTsJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFNNQ19QVVNIX0RBVEEocCwgbCkJCQkJCQlcCisjZGVmaW5lIFNNQ19QVVNIX0RBVEEobHAsIHAsIGwpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlpZiAoU01DX0NBTl9VU0VfMzJCSVQpIHsJCQkJXAorCQlpZiAoU01DXzMyQklUKGxwKSkgewkJCQlcCiAJCQl2b2lkICpfX3B0ciA9IChwKTsJCQkJXAogCQkJaW50IF9fbGVuID0gKGwpOwkJCQlcCiAJCQl2b2lkIF9faW9tZW0gKl9faW9hZGRyID0gaW9hZGRyOwkJXAogCQkJaWYgKF9fbGVuID49IDIgJiYgKHVuc2lnbmVkIGxvbmcpX19wdHIgJiAyKSB7CVwKIAkJCQlfX2xlbiAtPSAyOwkJCQlcCi0JCQkJU01DX291dHcoKih1MTYgKilfX3B0ciwgaW9hZGRyLCBEQVRBX1JFRyk7IFwKKwkJCQlTTUNfb3V0dygqKHUxNiAqKV9fcHRyLCBpb2FkZHIsCQlcCisJCQkJCURBVEFfUkVHKGxwKSk7CQlcCiAJCQkJX19wdHIgKz0gMjsJCQkJXAogCQkJfQkJCQkJCVwKIAkJCWlmIChTTUNfQ0FOX1VTRV9EQVRBQ1MgJiYgbHAtPmRhdGFjcykJCVwKIAkJCQlfX2lvYWRkciA9IGxwLT5kYXRhY3M7CQkJXAotCQkJU01DX291dHNsKF9faW9hZGRyLCBEQVRBX1JFRywgX19wdHIsIF9fbGVuPj4yKTsJXAorCQkJU01DX291dHNsKF9faW9hZGRyLCBEQVRBX1JFRyhscCksIF9fcHRyLCBfX2xlbj4+Mik7IFwKIAkJCWlmIChfX2xlbiAmIDIpIHsJCQkJXAogCQkJCV9fcHRyICs9IChfX2xlbiAmIH4zKTsJCQlcCi0JCQkJU01DX291dHcoKigodTE2ICopX19wdHIpLCBpb2FkZHIsIERBVEFfUkVHKTsgXAorCQkJCVNNQ19vdXR3KCooKHUxNiAqKV9fcHRyKSwgaW9hZGRyLAlcCisJCQkJCSBEQVRBX1JFRyhscCkpOwkJXAogCQkJfQkJCQkJCVwKLQkJfSBlbHNlIGlmIChTTUNfQ0FOX1VTRV8xNkJJVCkJCQkJXAotCQkJU01DX291dHN3KGlvYWRkciwgREFUQV9SRUcsIHAsIChsKSA+PiAxKTsJXAotCQllbHNlIGlmIChTTUNfQ0FOX1VTRV84QklUKQkJCQlcCi0JCQlTTUNfb3V0c2IoaW9hZGRyLCBEQVRBX1JFRywgcCwgbCk7CQlcCisJCX0gZWxzZSBpZiAoU01DXzE2QklUKGxwKSkJCQkJXAorCQkJU01DX291dHN3KGlvYWRkciwgREFUQV9SRUcobHApLCBwLCAobCkgPj4gMSk7CVwKKwkJZWxzZSBpZiAoU01DXzhCSVQobHApKQkJCQlcCisJCQlTTUNfb3V0c2IoaW9hZGRyLCBEQVRBX1JFRyhscCksIHAsIGwpOwlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBTTUNfUFVMTF9EQVRBKHAsIGwpCQkJCQkJXAorI2RlZmluZSBTTUNfUFVMTF9EQVRBKGxwLCBwLCBsKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJaWYgKFNNQ19DQU5fVVNFXzMyQklUKSB7CQkJCVwKKwkJaWYgKFNNQ18zMkJJVChscCkpIHsJCQkJXAogCQkJdm9pZCAqX19wdHIgPSAocCk7CQkJCVwKIAkJCWludCBfX2xlbiA9IChsKTsJCQkJXAogCQkJdm9pZCBfX2lvbWVtICpfX2lvYWRkciA9IGlvYWRkcjsJCVwKQEAgLTEzMzMsMTYgKzEzMjEsMTcgQEAKIAkJCQkgKi8JCQkJCVwKIAkJCQlfX3B0ciAtPSAyOwkJCQlcCiAJCQkJX19sZW4gKz0gMjsJCQkJXAotCQkJCVNNQ19TRVRfUFRSKDJ8UFRSX1JFQUR8UFRSX1JDVnxQVFJfQVVUT0lOQyk7IFwKKwkJCQlTTUNfU0VUX1BUUihscCwJCQlcCisJCQkJCTJ8UFRSX1JFQUR8UFRSX1JDVnxQVFJfQVVUT0lOQyk7IFwKIAkJCX0JCQkJCQlcCiAJCQlpZiAoU01DX0NBTl9VU0VfREFUQUNTICYmIGxwLT5kYXRhY3MpCQlcCiAJCQkJX19pb2FkZHIgPSBscC0+ZGF0YWNzOwkJCVwKIAkJCV9fbGVuICs9IDI7CQkJCQlcCi0JCQlTTUNfaW5zbChfX2lvYWRkciwgREFUQV9SRUcsIF9fcHRyLCBfX2xlbj4+Mik7CVwKLQkJfSBlbHNlIGlmIChTTUNfQ0FOX1VTRV8xNkJJVCkJCQkJXAotCQkJU01DX2luc3coaW9hZGRyLCBEQVRBX1JFRywgcCwgKGwpID4+IDEpOwlcCi0JCWVsc2UgaWYgKFNNQ19DQU5fVVNFXzhCSVQpCQkJCVwKLQkJCVNNQ19pbnNiKGlvYWRkciwgREFUQV9SRUcsIHAsIGwpOwkJXAorCQkJU01DX2luc2woX19pb2FkZHIsIERBVEFfUkVHKGxwKSwgX19wdHIsIF9fbGVuPj4yKTsgXAorCQl9IGVsc2UgaWYgKFNNQ18xNkJJVChscCkpCQkJCVwKKwkJCVNNQ19pbnN3KGlvYWRkciwgREFUQV9SRUcobHApLCBwLCAobCkgPj4gMSk7CVwKKwkJZWxzZSBpZiAoU01DXzhCSVQobHApKQkJCQlcCisJCQlTTUNfaW5zYihpb2FkZHIsIERBVEFfUkVHKGxwKSwgcCwgbCk7CQlcCiAJfSB3aGlsZSAoMCkKIAogI2VuZGlmICAvKiBfU01DOTFYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggYmNjYWU3ZS4uNDc3NjcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTM5OSw2ICsxMzk5LDggQEAKIAlzcGlkZXJfbmV0X3dyaXRlX3JlZyhjYXJkLCBTUElERVJfTkVUX0dNQUNJTlRFTiwgMCk7CiAKIAkvKiByZXNldCBwaHkgYW5kIHNldHVwIGFuZWcgKi8KKwljYXJkLT5hbmVnX2NvdW50ID0gMDsKKwljYXJkLT5tZWRpdW0gPSBCQ001NFhYX0NPUFBFUjsKIAlzcGlkZXJfbmV0X3NldHVwX2FuZWcoY2FyZCk7CiAJbW9kX3RpbWVyKCZjYXJkLT5hbmVnX3RpbWVyLCBqaWZmaWVzICsgU1BJREVSX05FVF9BTkVHX1RJTUVSKTsKIApAQCAtMTQxMywxOCArMTQxNSwxMiBAQAogICogZm91bmQgd2hlbiBhbiBpbnRlcnJ1cHQgaXMgcHJlc2VudGVkCiAgKi8KIHN0YXRpYyB2b2lkCi1zcGlkZXJfbmV0X2hhbmRsZV9lcnJvcl9pcnEoc3RydWN0IHNwaWRlcl9uZXRfY2FyZCAqY2FyZCwgdTMyIHN0YXR1c19yZWcpCitzcGlkZXJfbmV0X2hhbmRsZV9lcnJvcl9pcnEoc3RydWN0IHNwaWRlcl9uZXRfY2FyZCAqY2FyZCwgdTMyIHN0YXR1c19yZWcsCisJCQkgICAgdTMyIGVycm9yX3JlZzEsIHUzMiBlcnJvcl9yZWcyKQogewotCXUzMiBlcnJvcl9yZWcxLCBlcnJvcl9yZWcyOwogCXUzMiBpOwogCWludCBzaG93X2Vycm9yID0gMTsKIAotCWVycm9yX3JlZzEgPSBzcGlkZXJfbmV0X3JlYWRfcmVnKGNhcmQsIFNQSURFUl9ORVRfR0hJSU5UMVNUUyk7Ci0JZXJyb3JfcmVnMiA9IHNwaWRlcl9uZXRfcmVhZF9yZWcoY2FyZCwgU1BJREVSX05FVF9HSElJTlQyU1RTKTsKLQotCWVycm9yX3JlZzEgJj0gU1BJREVSX05FVF9JTlQxX01BU0tfVkFMVUU7Ci0JZXJyb3JfcmVnMiAmPSBTUElERVJfTkVUX0lOVDJfTUFTS19WQUxVRTsKLQogCS8qIGNoZWNrIEdISUlOVDBTVFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCWlmIChzdGF0dXNfcmVnKQogCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKQEAgLTE2NTQsMTIgKzE2NTAsMTUgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHRyOwogCXN0cnVjdCBzcGlkZXJfbmV0X2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXUzMiBzdGF0dXNfcmVnOworCXUzMiBzdGF0dXNfcmVnLCBlcnJvcl9yZWcxLCBlcnJvcl9yZWcyOwogCiAJc3RhdHVzX3JlZyA9IHNwaWRlcl9uZXRfcmVhZF9yZWcoY2FyZCwgU1BJREVSX05FVF9HSElJTlQwU1RTKTsKLQlzdGF0dXNfcmVnICY9IFNQSURFUl9ORVRfSU5UMF9NQVNLX1ZBTFVFOworCWVycm9yX3JlZzEgPSBzcGlkZXJfbmV0X3JlYWRfcmVnKGNhcmQsIFNQSURFUl9ORVRfR0hJSU5UMVNUUyk7CisJZXJyb3JfcmVnMiA9IHNwaWRlcl9uZXRfcmVhZF9yZWcoY2FyZCwgU1BJREVSX05FVF9HSElJTlQyU1RTKTsKIAotCWlmICghc3RhdHVzX3JlZykKKwlpZiAoIShzdGF0dXNfcmVnICYgU1BJREVSX05FVF9JTlQwX01BU0tfVkFMVUUpICYmCisJICAgICEoZXJyb3JfcmVnMSAmIFNQSURFUl9ORVRfSU5UMV9NQVNLX1ZBTFVFKSAmJgorCSAgICAhKGVycm9yX3JlZzIgJiBTUElERVJfTkVUX0lOVDJfTUFTS19WQUxVRSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWlmIChzdGF0dXNfcmVnICYgU1BJREVSX05FVF9SWElOVCApIHsKQEAgLTE2NzQsNyArMTY3Myw4IEBACiAJCXNwaWRlcl9uZXRfbGlua19yZXNldChuZXRkZXYpOwogCiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX0VSUklOVCApCi0JCXNwaWRlcl9uZXRfaGFuZGxlX2Vycm9yX2lycShjYXJkLCBzdGF0dXNfcmVnKTsKKwkJc3BpZGVyX25ldF9oYW5kbGVfZXJyb3JfaXJxKGNhcmQsIHN0YXR1c19yZWcsCisJCQkJCSAgICBlcnJvcl9yZWcxLCBlcnJvcl9yZWcyKTsKIAogCS8qIGNsZWFyIGludGVycnVwdCBzb3VyY2VzICovCiAJc3BpZGVyX25ldF93cml0ZV9yZWcoY2FyZCwgU1BJREVSX05FVF9HSElJTlQwU1RTLCBzdGF0dXNfcmVnKTsKQEAgLTE5ODIsNiArMTk4Miw4IEBACiAJCWdvdG8gaW5pdF9maXJtd2FyZV9mYWlsZWQ7CiAKIAkvKiBzdGFydCBwcm9iaW5nIHdpdGggY29wcGVyICovCisJY2FyZC0+YW5lZ19jb3VudCA9IDA7CisJY2FyZC0+bWVkaXVtID0gQkNNNTRYWF9DT1BQRVI7CiAJc3BpZGVyX25ldF9zZXR1cF9hbmVnKGNhcmQpOwogCWlmIChjYXJkLT5waHkuZGVmLT5waHlfaWQpCiAJCW1vZF90aW1lcigmY2FyZC0+YW5lZ190aW1lciwgamlmZmllcyArIFNQSURFUl9ORVRfQU5FR19USU1FUik7CkBAIC0yMDQzLDcgKzIwNDUsOCBAQAogCS8qIGlmIGxpbmsgZGlkbid0IGNvbWUgdXAgYWZ0ZXIgU1BJREVSX05FVF9BTkVHX1RJTUVPVVQgdHJpZXMsIHNldHVwIHBoeSBhZ2FpbiAqLwogCWlmIChjYXJkLT5hbmVnX2NvdW50ID4gU1BJREVSX05FVF9BTkVHX1RJTUVPVVQpIHsKIAotCQlwcl9pbmZvKCIlczogbGluayBpcyBkb3duIHRyeWluZyB0byBicmluZyBpdCB1cFxuIiwgY2FyZC0+bmV0ZGV2LT5uYW1lKTsKKwkJcHJfZGVidWcoIiVzOiBsaW5rIGlzIGRvd24gdHJ5aW5nIHRvIGJyaW5nIGl0IHVwXG4iLAorCQkJIGNhcmQtPm5ldGRldi0+bmFtZSk7CiAKIAkJc3dpdGNoIChjYXJkLT5tZWRpdW0pIHsKIAkJY2FzZSBCQ001NFhYX0NPUFBFUjoKQEAgLTIwOTQsOSArMjA5NywxMCBAQAogCiAJY2FyZC0+YW5lZ19jb3VudCA9IDA7CiAKLQlwcl9kZWJ1ZygiRm91bmQgJXMgd2l0aCAlaSBNYnBzLCAlcy1kdXBsZXggJXNhdXRvbmVnLlxuIiwKLQkJcGh5LT5kZWYtPm5hbWUsIHBoeS0+c3BlZWQsIHBoeS0+ZHVwbGV4PT0xID8gIkZ1bGwiIDogIkhhbGYiLAotCQlwaHktPmF1dG9uZWc9PTEgPyAiIiA6ICJubyAiKTsKKwlwcl9pbmZvKCIlczogbGluayB1cCwgJWkgTWJwcywgJXMtZHVwbGV4ICVzYXV0b25lZy5cbiIsCisJCWNhcmQtPm5ldGRldi0+bmFtZSwgcGh5LT5zcGVlZCwKKwkJcGh5LT5kdXBsZXggPT0gMSA/ICJGdWxsIiA6ICJIYWxmIiwKKwkJcGh5LT5hdXRvbmVnID09IDEgPyAiIiA6ICJubyAiKTsKIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaCBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaAppbmRleCBlMWQwNWMwLi4wNWY3NGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmgKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oCkBAIC01Miw3ICs1Miw3IEBACiAKICNkZWZpbmUgU1BJREVSX05FVF9UWF9USU1FUgkJCShIWi81KQogI2RlZmluZSBTUElERVJfTkVUX0FORUdfVElNRVIJCQkoSFopCi0jZGVmaW5lIFNQSURFUl9ORVRfQU5FR19USU1FT1VUCQkJMgorI2RlZmluZSBTUElERVJfTkVUX0FORUdfVElNRU9VVAkJCTUKIAogI2RlZmluZSBTUElERVJfTkVUX1JYX0NTVU1fREVGQVVMVAkJMQogCkBAIC0xNTksOSArMTU5LDggQEAKIAogLyoqIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLwogI2RlZmluZSBTUElERVJfTkVUX0lOVDBfTUFTS19WQUxVRQkweDNmN2ZlMmM3Ci0jZGVmaW5lIFNQSURFUl9ORVRfSU5UMV9NQVNLX1ZBTFVFCTB4ZmZmZjdmZjcKLS8qIG5vIE1BQyBhYm9ydHMgLT4gYXV0byByZXRyYW5zbWlzc2lvbiAqLwotI2RlZmluZSBTUElERVJfTkVUX0lOVDJfTUFTS19WQUxVRQkweGZmZWY3ZmYxCisjZGVmaW5lIFNQSURFUl9ORVRfSU5UMV9NQVNLX1ZBTFVFCTB4MDAwMGZmZjIKKyNkZWZpbmUgU1BJREVSX05FVF9JTlQyX01BU0tfVkFMVUUJMHgwMDAwMDNmMQogCiAvKiB3ZSByZWx5IG9uIGZsYWdnZWQgZGVzY3JpcHRvciBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIFNQSURFUl9ORVRfRlJBTUVOVU1fVkFMVUUJMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKaW5kZXggYzQ5MjE0Zi4uN2I3YjE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RhcmZpcmUuYworKysgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCkBAIC0xNDcyLDEzICsxNDcyLDEyIEBACiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24JCQkvKiBSZW1vdmUgYWZ0ZXIgdGVzdGluZy4gKi8KIAkJLyogWW91IHdpbGwgd2FudCB0aGlzIGluZm8gZm9yIHRoZSBpbml0aWFsIGRlYnVnLiAqLwogCQlpZiAoZGVidWcgPiA1KSB7Ci0JCQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQkJCURFQ0xBUkVfTUFDX0JVRihtYWMyKTsKLQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggZGF0YSAlcyAlcyIKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgIFJ4IGRhdGEgIiBNQUNfRk1UICIgIiBNQUNfRk1UCiAJCQkgICAgICAgIiAlMi4yeCUyLjJ4LlxuIiwKLQkJCSAgICAgICBwcmludF9tYWMobWFjLCAmc2tiLT5kYXRhWzBdKSwKLQkJCSAgICAgICBwcmludF9tYWMobWFjMiwgJnNrYi0+ZGF0YVs2XSksCisJCQkgICAgICAgc2tiLT5kYXRhWzBdLCBza2ItPmRhdGFbMV0sIHNrYi0+ZGF0YVsyXSwKKwkJCSAgICAgICBza2ItPmRhdGFbM10sIHNrYi0+ZGF0YVs0XSwgc2tiLT5kYXRhWzVdLAorCQkJICAgICAgIHNrYi0+ZGF0YVs2XSwgc2tiLT5kYXRhWzddLCBza2ItPmRhdGFbOF0sCisJCQkgICAgICAgc2tiLT5kYXRhWzldLCBza2ItPmRhdGFbMTBdLCBza2ItPmRhdGFbMTFdLAogCQkJICAgICAgIHNrYi0+ZGF0YVsxMl0sIHNrYi0+ZGF0YVsxM10pOwogCQl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggOTcyMTI3OS4uNDI5MTQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTkxMiw3ICs5MTIsNyBAQAogCQkgKiByeCByaW5nIC0gbXVzdCBjYWxsIG5hcGlfZGlzYWJsZSgpLCB3aGljaAogCQkgKiBzY2hlZHVsZV90aW1lb3V0KCkncyBpZiBwb2xsaW5nIGlzIGFscmVhZHkgZGlzYWJsZWQuCiAJCSAqLwotCQl3b3JrX2RvbmUgKz0gZ2VtX3J4KGdwLCBidWRnZXQpOworCQl3b3JrX2RvbmUgKz0gZ2VtX3J4KGdwLCBidWRnZXQgLSB3b3JrX2RvbmUpOwogCiAJCWlmICh3b3JrX2RvbmUgPj0gYnVkZ2V0KQogCQkJcmV0dXJuIHdvcmtfZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCAzNzBkMzI5Li4xMGU0ZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC0yMyw5ICsyMyw5IEBACiAgKi8KIAogI2lmZGVmIFRDMzU4MTVfTkFQSQotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zNi1OQVBJIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zNy1OQVBJIgogI2Vsc2UKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMzYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjM3IgogI2VuZGlmCiBzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9ICJ0YzM1ODE1LmM6diIgRFJWX1ZFUlNJT04gIlxuIjsKICNkZWZpbmUgTU9ETkFNRQkJCSJ0YzM1ODE1IgpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KQEAgLTYwLDE2ICs2MCwxNiBAQAogI2RlZmluZSBXT1JLQVJPVU5EXzEwMEhBTEZfUFJPTUlTQwogLyogI2RlZmluZSBUQzM1ODE1X1VTRV9QQUNLRURCVUZGRVIgKi8KIAotdHlwZWRlZiBlbnVtIHsKK2VudW0gdGMzNTgxNV9jaGlwdHlwZSB7CiAJVEMzNTgxNUNGID0gMCwKIAlUQzM1ODE1X05XVSwKIAlUQzM1ODE1X1RYNDkzOSwKLX0gYm9hcmRfdDsKK307CiAKLS8qIGluZGV4ZWQgYnkgYm9hcmRfdCwgYWJvdmUgKi8KKy8qIGluZGV4ZWQgYnkgdGMzNTgxNV9jaGlwdHlwZSwgYWJvdmUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgKm5hbWU7Ci19IGJvYXJkX2luZm9bXSBfX2RldmluaXRkYXRhID0geworfSBjaGlwX2luZm9bXSBfX2RldmluaXRkYXRhID0gewogCXsgIlRPU0hJQkEgVEMzNTgxNUNGIDEwLzEwMEJhc2VUWCIgfSwKIAl7ICJUT1NISUJBIFRDMzU4MTUgd2l0aCBXYWtlIG9uIExBTiIgfSwKIAl7ICJUT1NISUJBIFRDMzU4MTUvVFg0OTM5IiB9LApAQCAtODEsMjA5ICs4MSwyMDggQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RPU0hJQkFfMiwgUENJX0RFVklDRV9JRF9UT1NISUJBX1RDMzU4MTVfVFg0OTM5KSwgLmRyaXZlcl9kYXRhID0gVEMzNTgxNV9UWDQ5MzkgfSwKIAl7MCx9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCB0YzM1ODE1X3BjaV90YmwpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRjMzU4MTVfcGNpX3RibCk7CiAKIC8qIHNlZSBNT0RVTEVfUEFSTV9ERVNDICovCiBzdGF0aWMgc3RydWN0IHRjMzU4MTVfb3B0aW9ucyB7CiAJaW50IHNwZWVkOwogCWludCBkdXBsZXg7Ci0JaW50IGRvZm9yY2U7CiB9IG9wdGlvbnM7CiAKIC8qCiAgKiBSZWdpc3RlcnMKICAqLwogc3RydWN0IHRjMzU4MTVfcmVncyB7Ci0Jdm9sYXRpbGUgX191MzIgRE1BX0N0bDsJCS8qIDB4MDAgKi8KLQl2b2xhdGlsZSBfX3UzMiBUeEZybVB0cjsKLQl2b2xhdGlsZSBfX3UzMiBUeFRocnNoOwotCXZvbGF0aWxlIF9fdTMyIFR4UG9sbEN0cjsKLQl2b2xhdGlsZSBfX3UzMiBCTEZybVB0cjsKLQl2b2xhdGlsZSBfX3UzMiBSeEZyYWdTaXplOwotCXZvbGF0aWxlIF9fdTMyIEludF9FbjsKLQl2b2xhdGlsZSBfX3UzMiBGREFfQmFzOwotCXZvbGF0aWxlIF9fdTMyIEZEQV9MaW07CQkvKiAweDIwICovCi0Jdm9sYXRpbGUgX191MzIgSW50X1NyYzsKLQl2b2xhdGlsZSBfX3UzMiB1bnVzZWQwWzJdOwotCXZvbGF0aWxlIF9fdTMyIFBhdXNlQ250OwotCXZvbGF0aWxlIF9fdTMyIFJlbVBhdUNudDsKLQl2b2xhdGlsZSBfX3UzMiBUeEN0bEZybVN0YXQ7Ci0Jdm9sYXRpbGUgX191MzIgdW51c2VkMTsKLQl2b2xhdGlsZSBfX3UzMiBNQUNfQ3RsOwkJLyogMHg0MCAqLwotCXZvbGF0aWxlIF9fdTMyIENBTV9DdGw7Ci0Jdm9sYXRpbGUgX191MzIgVHhfQ3RsOwotCXZvbGF0aWxlIF9fdTMyIFR4X1N0YXQ7Ci0Jdm9sYXRpbGUgX191MzIgUnhfQ3RsOwotCXZvbGF0aWxlIF9fdTMyIFJ4X1N0YXQ7Ci0Jdm9sYXRpbGUgX191MzIgTURfRGF0YTsKLQl2b2xhdGlsZSBfX3UzMiBNRF9DQTsKLQl2b2xhdGlsZSBfX3UzMiBDQU1fQWRyOwkJLyogMHg2MCAqLwotCXZvbGF0aWxlIF9fdTMyIENBTV9EYXRhOwotCXZvbGF0aWxlIF9fdTMyIENBTV9FbmE7Ci0Jdm9sYXRpbGUgX191MzIgUFJPTV9DdGw7Ci0Jdm9sYXRpbGUgX191MzIgUFJPTV9EYXRhOwotCXZvbGF0aWxlIF9fdTMyIEFsZ25fQ250OwotCXZvbGF0aWxlIF9fdTMyIENSQ19DbnQ7Ci0Jdm9sYXRpbGUgX191MzIgTWlzc19DbnQ7CisJX191MzIgRE1BX0N0bDsJCS8qIDB4MDAgKi8KKwlfX3UzMiBUeEZybVB0cjsKKwlfX3UzMiBUeFRocnNoOworCV9fdTMyIFR4UG9sbEN0cjsKKwlfX3UzMiBCTEZybVB0cjsKKwlfX3UzMiBSeEZyYWdTaXplOworCV9fdTMyIEludF9FbjsKKwlfX3UzMiBGREFfQmFzOworCV9fdTMyIEZEQV9MaW07CQkvKiAweDIwICovCisJX191MzIgSW50X1NyYzsKKwlfX3UzMiB1bnVzZWQwWzJdOworCV9fdTMyIFBhdXNlQ250OworCV9fdTMyIFJlbVBhdUNudDsKKwlfX3UzMiBUeEN0bEZybVN0YXQ7CisJX191MzIgdW51c2VkMTsKKwlfX3UzMiBNQUNfQ3RsOwkJLyogMHg0MCAqLworCV9fdTMyIENBTV9DdGw7CisJX191MzIgVHhfQ3RsOworCV9fdTMyIFR4X1N0YXQ7CisJX191MzIgUnhfQ3RsOworCV9fdTMyIFJ4X1N0YXQ7CisJX191MzIgTURfRGF0YTsKKwlfX3UzMiBNRF9DQTsKKwlfX3UzMiBDQU1fQWRyOwkJLyogMHg2MCAqLworCV9fdTMyIENBTV9EYXRhOworCV9fdTMyIENBTV9FbmE7CisJX191MzIgUFJPTV9DdGw7CisJX191MzIgUFJPTV9EYXRhOworCV9fdTMyIEFsZ25fQ250OworCV9fdTMyIENSQ19DbnQ7CisJX191MzIgTWlzc19DbnQ7CiB9OwogCiAvKgogICogQml0IGFzc2lnbm1lbnRzCiAgKi8KIC8qIERNQV9DdGwgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgRE1BX1J4QWxpZ24gICAgICAgICAgICAweDAwYzAwMDAwIC8qIDE6UmVjZXB0aW9uIEFsaWdubWVudCAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX1J4QWxpZ25fMSAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIERNQV9SeEFsaWduXzIgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBETUFfUnhBbGlnbl8zICAgICAgICAgIDB4MDBjMDAwMDAKLSNkZWZpbmUgRE1BX002NkVuU3RhdCAgICAgICAgICAweDAwMDgwMDAwIC8qIDE6NjZNSHogRW5hYmxlIFN0YXRlICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX0ludE1hc2sgICAgICAgICAgICAweDAwMDQwMDAwIC8qIDE6SW50ZXJ1cHQgbWFzayAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX1NXSW50UmVxICAgICAgICAgICAweDAwMDIwMDAwIC8qIDE6U29mdHdhcmUgSW50ZXJydXB0IHJlcXVlc3QgICAgKi8KLSNkZWZpbmUgRE1BX1R4V2FrZVVwICAgICAgICAgICAweDAwMDEwMDAwIC8qIDE6VHJhbnNtaXQgV2FrZSBVcCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX1J4QmlnRSAgICAgICAgICAgICAweDAwMDA4MDAwIC8qIDE6UmVjZWl2ZSBCaWcgRW5kaWFuICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX1R4QmlnRSAgICAgICAgICAgICAweDAwMDA0MDAwIC8qIDE6VHJhbnNtaXQgQmlnIEVuZGlhbiAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX1Rlc3RNb2RlICAgICAgICAgICAweDAwMDAyMDAwIC8qIDE6VGVzdCBNb2RlICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX1Bvd3JNZ21udCAgICAgICAgICAweDAwMDAxMDAwIC8qIDE6UG93ZXIgTWFuYWdlbWVudCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE1BX0RtQnVyc3RfTWFzayAgICAgICAweDAwMDAwMWZjIC8qIERNQSBCdXJzdCBzaXplICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX1J4QWxpZ24JICAgICAgIDB4MDBjMDAwMDAgLyogMTpSZWNlcHRpb24gQWxpZ25tZW50CSAgICAgKi8KKyNkZWZpbmUgRE1BX1J4QWxpZ25fMQkgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBETUFfUnhBbGlnbl8yCSAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIERNQV9SeEFsaWduXzMJICAgICAgIDB4MDBjMDAwMDAKKyNkZWZpbmUgRE1BX002NkVuU3RhdAkgICAgICAgMHgwMDA4MDAwMCAvKiAxOjY2TUh6IEVuYWJsZSBTdGF0ZQkgICAgICovCisjZGVmaW5lIERNQV9JbnRNYXNrCSAgICAgICAweDAwMDQwMDAwIC8qIDE6SW50ZXJ1cHQgbWFzawkJICAgICAqLworI2RlZmluZSBETUFfU1dJbnRSZXEJICAgICAgIDB4MDAwMjAwMDAgLyogMTpTb2Z0d2FyZSBJbnRlcnJ1cHQgcmVxdWVzdCAgICAqLworI2RlZmluZSBETUFfVHhXYWtlVXAJICAgICAgIDB4MDAwMTAwMDAgLyogMTpUcmFuc21pdCBXYWtlIFVwCQkgICAgICovCisjZGVmaW5lIERNQV9SeEJpZ0UJICAgICAgIDB4MDAwMDgwMDAgLyogMTpSZWNlaXZlIEJpZyBFbmRpYW4JICAgICAqLworI2RlZmluZSBETUFfVHhCaWdFCSAgICAgICAweDAwMDA0MDAwIC8qIDE6VHJhbnNtaXQgQmlnIEVuZGlhbgkgICAgICovCisjZGVmaW5lIERNQV9UZXN0TW9kZQkgICAgICAgMHgwMDAwMjAwMCAvKiAxOlRlc3QgTW9kZQkJICAgICAqLworI2RlZmluZSBETUFfUG93ck1nbW50CSAgICAgICAweDAwMDAxMDAwIC8qIDE6UG93ZXIgTWFuYWdlbWVudAkJICAgICAqLworI2RlZmluZSBETUFfRG1CdXJzdF9NYXNrICAgICAgIDB4MDAwMDAxZmMgLyogRE1BIEJ1cnN0IHNpemUJCSAgICAgKi8KIAogLyogUnhGcmFnU2l6ZSBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBSeEZyYWdfRW5QYWNrICAgICAgICAgIDB4MDAwMDgwMDAgLyogMTpFbmFibGUgUGFja2luZyAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBSeEZyYWdfTWluRnJhZ01hc2sgICAgIDB4MDAwMDBmZmMgLyogTWluaW11bSBGcmFnbWVudCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSeEZyYWdfRW5QYWNrCSAgICAgICAweDAwMDA4MDAwIC8qIDE6RW5hYmxlIFBhY2tpbmcJCSAgICAgKi8KKyNkZWZpbmUgUnhGcmFnX01pbkZyYWdNYXNrICAgICAweDAwMDAwZmZjIC8qIE1pbmltdW0gRnJhZ21lbnQJCSAgICAgKi8KIAogLyogTUFDX0N0bCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBNQUNfTGluazEwICAgICAgICAgICAgIDB4MDAwMDgwMDAgLyogMTpMaW5rIFN0YXR1cyAxME1iaXRzICAgICAgICAgICAqLwotI2RlZmluZSBNQUNfRW5NaXNzUm9sbCAgICAgICAgIDB4MDAwMDIwMDAgLyogMTpFbmFibGUgTWlzc2VkIFJvbGwgICAgICAgICAgICAqLwotI2RlZmluZSBNQUNfTWlzc1JvbGwgICAgICAgICAgIDB4MDAwMDA0MDAgLyogMTpNaXNzZWQgUm9sbCAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBNQUNfTG9vcDEwICAgICAgICAgICAgIDB4MDAwMDAwODAgLyogMTpMb29wIDEwIE1icHMgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBNQUNfQ29ubl9BdXRvICAgICAgICAgIDB4MDAwMDAwMDAgLyowMDpDb25uZWN0aW9uIG1vZGUgKEF1dG9tYXRpYykgICAqLwotI2RlZmluZSBNQUNfQ29ubl8xME0gICAgICAgICAgIDB4MDAwMDAwMjAgLyowMTogICAgICAgICAgICAgICAgKDEwTWJwcyBlbmRlYykqLwotI2RlZmluZSBNQUNfQ29ubl9NbGwgICAgICAgICAgIDB4MDAwMDAwNDAgLyoxMDogICAgICAgICAgICAgICAgKE1sbCBjbG9jaykgICAqLwotI2RlZmluZSBNQUNfTWFjTG9vcCAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogMTpNQUMgTG9vcGJhY2sgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBNQUNfRnVsbER1cCAgICAgICAgICAgIDB4MDAwMDAwMDggLyogMTpGdWxsIER1cGxleCAwOkhhbGYgRHVwbGV4ICAgICAqLwotI2RlZmluZSBNQUNfUmVzZXQgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogMTpTb2Z0d2FyZSBSZXNldCAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBNQUNfSGFsdEltbSAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogMTpIYWx0IEltbWVkaWF0ZSAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBNQUNfSGFsdFJlcSAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogMTpIYWx0IHJlcXVlc3QgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNQUNfTGluazEwCSAgICAgICAweDAwMDA4MDAwIC8qIDE6TGluayBTdGF0dXMgMTBNYml0cwkgICAgICovCisjZGVmaW5lIE1BQ19Fbk1pc3NSb2xsCSAgICAgICAweDAwMDAyMDAwIC8qIDE6RW5hYmxlIE1pc3NlZCBSb2xsCSAgICAgKi8KKyNkZWZpbmUgTUFDX01pc3NSb2xsCSAgICAgICAweDAwMDAwNDAwIC8qIDE6TWlzc2VkIFJvbGwJCSAgICAgKi8KKyNkZWZpbmUgTUFDX0xvb3AxMAkgICAgICAgMHgwMDAwMDA4MCAvKiAxOkxvb3AgMTAgTWJwcwkJICAgICAqLworI2RlZmluZSBNQUNfQ29ubl9BdXRvCSAgICAgICAweDAwMDAwMDAwIC8qMDA6Q29ubmVjdGlvbiBtb2RlIChBdXRvbWF0aWMpICAgKi8KKyNkZWZpbmUgTUFDX0Nvbm5fMTBNCSAgICAgICAweDAwMDAwMDIwIC8qMDE6CQkgICAgICAgKDEwTWJwcyBlbmRlYykqLworI2RlZmluZSBNQUNfQ29ubl9NbGwJICAgICAgIDB4MDAwMDAwNDAgLyoxMDoJCSAgICAgICAoTWxsIGNsb2NrKSAgICovCisjZGVmaW5lIE1BQ19NYWNMb29wCSAgICAgICAweDAwMDAwMDEwIC8qIDE6TUFDIExvb3BiYWNrCQkgICAgICovCisjZGVmaW5lIE1BQ19GdWxsRHVwCSAgICAgICAweDAwMDAwMDA4IC8qIDE6RnVsbCBEdXBsZXggMDpIYWxmIER1cGxleCAgICAgKi8KKyNkZWZpbmUgTUFDX1Jlc2V0CSAgICAgICAweDAwMDAwMDA0IC8qIDE6U29mdHdhcmUgUmVzZXQJCSAgICAgKi8KKyNkZWZpbmUgTUFDX0hhbHRJbW0JICAgICAgIDB4MDAwMDAwMDIgLyogMTpIYWx0IEltbWVkaWF0ZQkJICAgICAqLworI2RlZmluZSBNQUNfSGFsdFJlcQkgICAgICAgMHgwMDAwMDAwMSAvKiAxOkhhbHQgcmVxdWVzdAkJICAgICAqLwogCiAvKiBQUk9NX0N0bCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIFBST01fQnVzeSAgICAgICAgICAgICAgMHgwMDAwODAwMCAvKiAxOkJ1c3kgKFN0YXJ0IE9wZXJhdGlvbikgICAgICAgICovCi0jZGVmaW5lIFBST01fUmVhZCAgICAgICAgICAgICAgMHgwMDAwNDAwMCAvKjEwOlJlYWQgb3BlcmF0aW9uICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBST01fV3JpdGUgICAgICAgICAgICAgMHgwMDAwMjAwMCAvKjAxOldyaXRlIG9wZXJhdGlvbiAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFBST01fRXJhc2UgICAgICAgICAgICAgMHgwMDAwNjAwMCAvKjExOkVyYXNlIG9wZXJhdGlvbiAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjAwOkVuYWJsZSBvciBEaXNhYmxlIFdyaXR0aW5nLCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIGFzIHNwZWNpZmllZCBpbiBQUk9NX0FkZHIuICovCi0jZGVmaW5lIFBST01fQWRkcl9FbmEgICAgICAgICAgMHgwMDAwMDAzMCAvKjExeHh4eDpQUk9NIFdyaXRlIGVuYWJsZSAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjAweHh4eDogICAgICAgICAgIGRpc2FibGUgICAgICAgICovCisjZGVmaW5lIFBST01fQnVzeQkgICAgICAgMHgwMDAwODAwMCAvKiAxOkJ1c3kgKFN0YXJ0IE9wZXJhdGlvbikJICAgICAqLworI2RlZmluZSBQUk9NX1JlYWQJICAgICAgIDB4MDAwMDQwMDAgLyoxMDpSZWFkIG9wZXJhdGlvbgkJICAgICAqLworI2RlZmluZSBQUk9NX1dyaXRlCSAgICAgICAweDAwMDAyMDAwIC8qMDE6V3JpdGUgb3BlcmF0aW9uCQkgICAgICovCisjZGVmaW5lIFBST01fRXJhc2UJICAgICAgIDB4MDAwMDYwMDAgLyoxMTpFcmFzZSBvcGVyYXRpb24JCSAgICAgKi8KKwkJCQkJICAvKjAwOkVuYWJsZSBvciBEaXNhYmxlIFdyaXR0aW5nLCAgICovCisJCQkJCSAgLyoJICBhcyBzcGVjaWZpZWQgaW4gUFJPTV9BZGRyLiAqLworI2RlZmluZSBQUk9NX0FkZHJfRW5hCSAgICAgICAweDAwMDAwMDMwIC8qMTF4eHh4OlBST00gV3JpdGUgZW5hYmxlCSAgICAgKi8KKwkJCQkJICAvKjAweHh4eDoJICAgICAgZGlzYWJsZQkgICAgICovCiAKIC8qIENBTV9DdGwgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgQ0FNX0NvbXBFbiAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIDE6Q0FNIENvbXBhcmUgRW5hYmxlICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ0FNX05lZ0NBTSAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIDE6UmVqZWN0IHBhY2tldHMgQ0FNIHJlY29nbml6ZXMsKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICBhY2NlcHQgb3RoZXIgKi8KLSNkZWZpbmUgQ0FNX0Jyb2FkQWNjICAgICAgICAgICAweDAwMDAwMDA0IC8qIDE6QnJvYWRjYXN0IGFzc2VwdCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ0FNX0dyb3VwQWNjICAgICAgICAgICAweDAwMDAwMDAyIC8qIDE6TXVsdGljYXN0IGFzc2VwdCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ0FNX1N0YXRpb25BY2MgICAgICAgICAweDAwMDAwMDAxIC8qIDE6dW5pY2FzdCBhY2NlcHQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FNX0NvbXBFbgkgICAgICAgMHgwMDAwMDAxMCAvKiAxOkNBTSBDb21wYXJlIEVuYWJsZQkgICAgICovCisjZGVmaW5lIENBTV9OZWdDQU0JICAgICAgIDB4MDAwMDAwMDggLyogMTpSZWplY3QgcGFja2V0cyBDQU0gcmVjb2duaXplcywqLworCQkJCQkgIC8qCQkJYWNjZXB0IG90aGVyICovCisjZGVmaW5lIENBTV9Ccm9hZEFjYwkgICAgICAgMHgwMDAwMDAwNCAvKiAxOkJyb2FkY2FzdCBhc3NlcHQJCSAgICAgKi8KKyNkZWZpbmUgQ0FNX0dyb3VwQWNjCSAgICAgICAweDAwMDAwMDAyIC8qIDE6TXVsdGljYXN0IGFzc2VwdAkJICAgICAqLworI2RlZmluZSBDQU1fU3RhdGlvbkFjYwkgICAgICAgMHgwMDAwMDAwMSAvKiAxOnVuaWNhc3QgYWNjZXB0CQkgICAgICovCiAKIC8qIENBTV9FbmEgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgQ0FNX0VOVFJZX01BWCAgICAgICAgICAgICAgICAgIDIxICAgLyogQ0FNIERhdGEgZW50cnkgbWF4IGNvdW50ICAgICAgKi8KKyNkZWZpbmUgQ0FNX0VOVFJZX01BWAkJICAgICAgIDIxICAgLyogQ0FNIERhdGEgZW50cnkgbWF4IGNvdW50CSAgICAgKi8KICNkZWZpbmUgQ0FNX0VuYV9NYXNrICgoMTw8Q0FNX0VOVFJZX01BWCktMSkgLyogQ0FNIEVuYWJsZSBiaXRzIChNYXggMjFiaXRzKSAgKi8KLSNkZWZpbmUgQ0FNX0VuYV9CaXQoaW5kZXgpICAgICAgICAgKDE8PChpbmRleCkpCisjZGVmaW5lIENBTV9FbmFfQml0KGluZGV4KQkoMSA8PCAoaW5kZXgpKQogI2RlZmluZSBDQU1fRU5UUllfREVTVElOQVRJT04JMAogI2RlZmluZSBDQU1fRU5UUllfU09VUkNFCTEKICNkZWZpbmUgQ0FNX0VOVFJZX01BQ0NUTAkyMAogCiAvKiBUeF9DdGwgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIFR4X0VuICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiAxOlRyYW5zbWl0IGVuYWJsZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFR4X1R4SGFsdCAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiAxOlRyYW5zbWl0IEhhbHQgUmVxdWVzdCAgICAgICAgICovCi0jZGVmaW5lIFR4X05vUGFkICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiAxOlN1cHByZXNzIFBhZGRpbmcgICAgICAgICAgICAgICovCi0jZGVmaW5lIFR4X05vQ1JDICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiAxOlN1cHByZXNzIFBhZGRpbmcgICAgICAgICAgICAgICovCi0jZGVmaW5lIFR4X0ZCYWNrICAgICAgICAgICAgICAgMHgwMDAwMDAxMCAvKiAxOkZhc3QgQmFjay1vZmYgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFR4X0VuVW5kZXIgICAgICAgICAgICAgMHgwMDAwMDEwMCAvKiAxOkVuYWJsZSBVbmRlcnJ1biAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFR4X0VuRXhEZWZlciAgICAgICAgICAgMHgwMDAwMDIwMCAvKiAxOkVuYWJsZSBFeGNlc3NpdmUgRGVmZXJyYWwgICAgICovCi0jZGVmaW5lIFR4X0VuTENhcnIgICAgICAgICAgICAgMHgwMDAwMDQwMCAvKiAxOkVuYWJsZSBMb3N0IENhcnJpZXIgICAgICAgICAgICovCi0jZGVmaW5lIFR4X0VuRXhDb2xsICAgICAgICAgICAgMHgwMDAwMDgwMCAvKiAxOkVuYWJsZSBFeGNlc3NpdmUgQ29sbGlzaW9uICAgICovCi0jZGVmaW5lIFR4X0VuTGF0ZUNvbGwgICAgICAgICAgMHgwMDAwMTAwMCAvKiAxOkVuYWJsZSBMYXRlIENvbGxpc2lvbiAgICAgICAgICovCi0jZGVmaW5lIFR4X0VuVHhQYXIgICAgICAgICAgICAgMHgwMDAwMjAwMCAvKiAxOkVuYWJsZSBUcmFuc21pdCBQYXJpdHkgICAgICAgICovCi0jZGVmaW5lIFR4X0VuQ29tcCAgICAgICAgICAgICAgMHgwMDAwNDAwMCAvKiAxOkVuYWJsZSBDb21wbGV0aW9uICAgICAgICAgICAgICovCisjZGVmaW5lIFR4X0VuCQkgICAgICAgMHgwMDAwMDAwMSAvKiAxOlRyYW5zbWl0IGVuYWJsZQkJICAgICAqLworI2RlZmluZSBUeF9UeEhhbHQJICAgICAgIDB4MDAwMDAwMDIgLyogMTpUcmFuc21pdCBIYWx0IFJlcXVlc3QJICAgICAqLworI2RlZmluZSBUeF9Ob1BhZAkgICAgICAgMHgwMDAwMDAwNCAvKiAxOlN1cHByZXNzIFBhZGRpbmcJCSAgICAgKi8KKyNkZWZpbmUgVHhfTm9DUkMJICAgICAgIDB4MDAwMDAwMDggLyogMTpTdXBwcmVzcyBQYWRkaW5nCQkgICAgICovCisjZGVmaW5lIFR4X0ZCYWNrCSAgICAgICAweDAwMDAwMDEwIC8qIDE6RmFzdCBCYWNrLW9mZgkJICAgICAqLworI2RlZmluZSBUeF9FblVuZGVyCSAgICAgICAweDAwMDAwMTAwIC8qIDE6RW5hYmxlIFVuZGVycnVuCQkgICAgICovCisjZGVmaW5lIFR4X0VuRXhEZWZlcgkgICAgICAgMHgwMDAwMDIwMCAvKiAxOkVuYWJsZSBFeGNlc3NpdmUgRGVmZXJyYWwgICAgICovCisjZGVmaW5lIFR4X0VuTENhcnIJICAgICAgIDB4MDAwMDA0MDAgLyogMTpFbmFibGUgTG9zdCBDYXJyaWVyCSAgICAgKi8KKyNkZWZpbmUgVHhfRW5FeENvbGwJICAgICAgIDB4MDAwMDA4MDAgLyogMTpFbmFibGUgRXhjZXNzaXZlIENvbGxpc2lvbiAgICAqLworI2RlZmluZSBUeF9FbkxhdGVDb2xsCSAgICAgICAweDAwMDAxMDAwIC8qIDE6RW5hYmxlIExhdGUgQ29sbGlzaW9uCSAgICAgKi8KKyNkZWZpbmUgVHhfRW5UeFBhcgkgICAgICAgMHgwMDAwMjAwMCAvKiAxOkVuYWJsZSBUcmFuc21pdCBQYXJpdHkJICAgICAqLworI2RlZmluZSBUeF9FbkNvbXAJICAgICAgIDB4MDAwMDQwMDAgLyogMTpFbmFibGUgQ29tcGxldGlvbgkgICAgICovCiAKIC8qIFR4X1N0YXQgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgVHhfVHhDb2xsX01BU0sgICAgICAgICAweDAwMDAwMDBGIC8qIFR4IENvbGxpc2lvbiBDb3VudCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfRXhDb2xsICAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIEV4Y2Vzc2l2ZSBDb2xsaXNpb24gICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfVFhEZWZlciAgICAgICAgICAgICAweDAwMDAwMDIwIC8qIFRyYW5zbWl0IERlZmVyZWQgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfUGF1c2VkICAgICAgICAgICAgICAweDAwMDAwMDQwIC8qIFRyYW5zbWl0IFBhdXNlZCAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfSW50VHggICAgICAgICAgICAgICAweDAwMDAwMDgwIC8qIEludGVycnVwdCBvbiBUeCAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfVW5kZXIgICAgICAgICAgICAgICAweDAwMDAwMTAwIC8qIFVuZGVycnVuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfRGVmZXIgICAgICAgICAgICAgICAweDAwMDAwMjAwIC8qIERlZmVycmFsICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfTkNhcnIgICAgICAgICAgICAgICAweDAwMDAwNDAwIC8qIE5vIENhcnJpZXIgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfMTBTdGF0ICAgICAgICAgICAgICAweDAwMDAwODAwIC8qIDEwTWJwcyBTdGF0dXMgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfTGF0ZUNvbGwgICAgICAgICAgICAweDAwMDAxMDAwIC8qIExhdGUgQ29sbGlzaW9uICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfVHhQYXIgICAgICAgICAgICAgICAweDAwMDAyMDAwIC8qIFR4IFBhcml0eSBFcnJvciAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfQ29tcCAgICAgICAgICAgICAgICAweDAwMDA0MDAwIC8qIENvbXBsZXRpb24gICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfSGFsdGVkICAgICAgICAgICAgICAweDAwMDA4MDAwIC8qIFR4IEhhbHRlZCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVHhfU1FFcnIgICAgICAgICAgICAgICAweDAwMDEwMDAwIC8qIFNpZ25hbCBRdWFsaXR5IEVycm9yKFNRRSkgICAgICAgKi8KKyNkZWZpbmUgVHhfVHhDb2xsX01BU0sJICAgICAgIDB4MDAwMDAwMEYgLyogVHggQ29sbGlzaW9uIENvdW50CQkgICAgICovCisjZGVmaW5lIFR4X0V4Q29sbAkgICAgICAgMHgwMDAwMDAxMCAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uCSAgICAgKi8KKyNkZWZpbmUgVHhfVFhEZWZlcgkgICAgICAgMHgwMDAwMDAyMCAvKiBUcmFuc21pdCBEZWZlcmVkCQkgICAgICovCisjZGVmaW5lIFR4X1BhdXNlZAkgICAgICAgMHgwMDAwMDA0MCAvKiBUcmFuc21pdCBQYXVzZWQJCSAgICAgKi8KKyNkZWZpbmUgVHhfSW50VHgJICAgICAgIDB4MDAwMDAwODAgLyogSW50ZXJydXB0IG9uIFR4CQkgICAgICovCisjZGVmaW5lIFR4X1VuZGVyCSAgICAgICAweDAwMDAwMTAwIC8qIFVuZGVycnVuCQkJICAgICAqLworI2RlZmluZSBUeF9EZWZlcgkgICAgICAgMHgwMDAwMDIwMCAvKiBEZWZlcnJhbAkJCSAgICAgKi8KKyNkZWZpbmUgVHhfTkNhcnIJICAgICAgIDB4MDAwMDA0MDAgLyogTm8gQ2FycmllcgkJCSAgICAgKi8KKyNkZWZpbmUgVHhfMTBTdGF0CSAgICAgICAweDAwMDAwODAwIC8qIDEwTWJwcyBTdGF0dXMJCSAgICAgKi8KKyNkZWZpbmUgVHhfTGF0ZUNvbGwJICAgICAgIDB4MDAwMDEwMDAgLyogTGF0ZSBDb2xsaXNpb24JCSAgICAgKi8KKyNkZWZpbmUgVHhfVHhQYXIJICAgICAgIDB4MDAwMDIwMDAgLyogVHggUGFyaXR5IEVycm9yCQkgICAgICovCisjZGVmaW5lIFR4X0NvbXAJCSAgICAgICAweDAwMDA0MDAwIC8qIENvbXBsZXRpb24JCQkgICAgICovCisjZGVmaW5lIFR4X0hhbHRlZAkgICAgICAgMHgwMDAwODAwMCAvKiBUeCBIYWx0ZWQJCQkgICAgICovCisjZGVmaW5lIFR4X1NRRXJyCSAgICAgICAweDAwMDEwMDAwIC8qIFNpZ25hbCBRdWFsaXR5IEVycm9yKFNRRSkJICAgICAqLwogCiAvKiBSeF9DdGwgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIFJ4X0VuR29vZCAgICAgICAgICAgICAgMHgwMDAwNDAwMCAvKiAxOkVuYWJsZSBHb29kICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X0VuUnhQYXIgICAgICAgICAgICAgMHgwMDAwMjAwMCAvKiAxOkVuYWJsZSBSZWNlaXZlIFBhcml0eSAgICAgICAgICovCi0jZGVmaW5lIFJ4X0VuTG9uZ0VyciAgICAgICAgICAgMHgwMDAwMDgwMCAvKiAxOkVuYWJsZSBMb25nIEVycm9yICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X0VuT3ZlciAgICAgICAgICAgICAgMHgwMDAwMDQwMCAvKiAxOkVuYWJsZSBPdmVyRmxvdyAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X0VuQ1JDRXJyICAgICAgICAgICAgMHgwMDAwMDIwMCAvKiAxOkVuYWJsZSBDUkMgRXJyb3IgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X0VuQWxpZ24gICAgICAgICAgICAgMHgwMDAwMDEwMCAvKiAxOkVuYWJsZSBBbGlnbm1lbnQgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X0lnbm9yZUNSQyAgICAgICAgICAgMHgwMDAwMDA0MCAvKiAxOklnbm9yZSBDUkMgVmFsdWUgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X1N0cmlwQ1JDICAgICAgICAgICAgMHgwMDAwMDAxMCAvKiAxOlN0cmlwIENSQyBWYWx1ZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X1Nob3J0RW4gICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiAxOlNob3J0IEVuYWJsZSAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X0xvbmdFbiAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiAxOkxvbmcgRW5hYmxlICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJ4X1J4SGFsdCAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiAxOlJlY2VpdmUgSGFsdCBSZXF1ZXN0ICAgICAgICAgICovCi0jZGVmaW5lIFJ4X1J4RW4gICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiAxOlJlY2VpdmUgSW50cnJ1cHQgRW5hYmxlICAgICAgICovCisjZGVmaW5lIFJ4X0VuR29vZAkgICAgICAgMHgwMDAwNDAwMCAvKiAxOkVuYWJsZSBHb29kCQkgICAgICovCisjZGVmaW5lIFJ4X0VuUnhQYXIJICAgICAgIDB4MDAwMDIwMDAgLyogMTpFbmFibGUgUmVjZWl2ZSBQYXJpdHkJICAgICAqLworI2RlZmluZSBSeF9FbkxvbmdFcnIJICAgICAgIDB4MDAwMDA4MDAgLyogMTpFbmFibGUgTG9uZyBFcnJvcgkgICAgICovCisjZGVmaW5lIFJ4X0VuT3ZlcgkgICAgICAgMHgwMDAwMDQwMCAvKiAxOkVuYWJsZSBPdmVyRmxvdwkJICAgICAqLworI2RlZmluZSBSeF9FbkNSQ0VycgkgICAgICAgMHgwMDAwMDIwMCAvKiAxOkVuYWJsZSBDUkMgRXJyb3IJCSAgICAgKi8KKyNkZWZpbmUgUnhfRW5BbGlnbgkgICAgICAgMHgwMDAwMDEwMCAvKiAxOkVuYWJsZSBBbGlnbm1lbnQJCSAgICAgKi8KKyNkZWZpbmUgUnhfSWdub3JlQ1JDCSAgICAgICAweDAwMDAwMDQwIC8qIDE6SWdub3JlIENSQyBWYWx1ZQkJICAgICAqLworI2RlZmluZSBSeF9TdHJpcENSQwkgICAgICAgMHgwMDAwMDAxMCAvKiAxOlN0cmlwIENSQyBWYWx1ZQkJICAgICAqLworI2RlZmluZSBSeF9TaG9ydEVuCSAgICAgICAweDAwMDAwMDA4IC8qIDE6U2hvcnQgRW5hYmxlCQkgICAgICovCisjZGVmaW5lIFJ4X0xvbmdFbgkgICAgICAgMHgwMDAwMDAwNCAvKiAxOkxvbmcgRW5hYmxlCQkgICAgICovCisjZGVmaW5lIFJ4X1J4SGFsdAkgICAgICAgMHgwMDAwMDAwMiAvKiAxOlJlY2VpdmUgSGFsdCBSZXF1ZXN0CSAgICAgKi8KKyNkZWZpbmUgUnhfUnhFbgkJICAgICAgIDB4MDAwMDAwMDEgLyogMTpSZWNlaXZlIEludHJydXB0IEVuYWJsZQkgICAgICovCiAKIC8qIFJ4X1N0YXQgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgUnhfSGFsdGVkICAgICAgICAgICAgICAweDAwMDA4MDAwIC8qIFJ4IEhhbHRlZCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfR29vZCAgICAgICAgICAgICAgICAweDAwMDA0MDAwIC8qIFJ4IEdvb2QgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfUnhQYXIgICAgICAgICAgICAgICAweDAwMDAyMDAwIC8qIFJ4IFBhcml0eSBFcnJvciAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAxMDAwICAgIG5vdCB1c2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfTG9uZ0VyciAgICAgICAgICAgICAweDAwMDAwODAwIC8qIFJ4IExvbmcgRXJyb3IgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfT3ZlciAgICAgICAgICAgICAgICAweDAwMDAwNDAwIC8qIFJ4IE92ZXJmbG93ICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfQ1JDRXJyICAgICAgICAgICAgICAweDAwMDAwMjAwIC8qIFJ4IENSQyBFcnJvciAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfQWxpZ24gICAgICAgICAgICAgICAweDAwMDAwMTAwIC8qIFJ4IEFsaWdubWVudCBFcnJvciAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfMTBTdGF0ICAgICAgICAgICAgICAweDAwMDAwMDgwIC8qIFJ4IDEwTWJwcyBTdGF0dXMgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfSW50UnggICAgICAgICAgICAgICAweDAwMDAwMDQwIC8qIFJ4IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUnhfQ3RsUmVjZCAgICAgICAgICAgICAweDAwMDAwMDIwIC8qIFJ4IENvbnRyb2wgUmVjZWl2ZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUnhfSGFsdGVkCSAgICAgICAweDAwMDA4MDAwIC8qIFJ4IEhhbHRlZAkJCSAgICAgKi8KKyNkZWZpbmUgUnhfR29vZAkJICAgICAgIDB4MDAwMDQwMDAgLyogUnggR29vZAkJCSAgICAgKi8KKyNkZWZpbmUgUnhfUnhQYXIJICAgICAgIDB4MDAwMDIwMDAgLyogUnggUGFyaXR5IEVycm9yCQkgICAgICovCisJCQkgICAgLyogMHgwMDAwMTAwMCAgICBub3QgdXNlCQkJICAgICAqLworI2RlZmluZSBSeF9Mb25nRXJyCSAgICAgICAweDAwMDAwODAwIC8qIFJ4IExvbmcgRXJyb3IJCSAgICAgKi8KKyNkZWZpbmUgUnhfT3ZlcgkJICAgICAgIDB4MDAwMDA0MDAgLyogUnggT3ZlcmZsb3cJCSAgICAgKi8KKyNkZWZpbmUgUnhfQ1JDRXJyCSAgICAgICAweDAwMDAwMjAwIC8qIFJ4IENSQyBFcnJvcgkJICAgICAqLworI2RlZmluZSBSeF9BbGlnbgkgICAgICAgMHgwMDAwMDEwMCAvKiBSeCBBbGlnbm1lbnQgRXJyb3IJCSAgICAgKi8KKyNkZWZpbmUgUnhfMTBTdGF0CSAgICAgICAweDAwMDAwMDgwIC8qIFJ4IDEwTWJwcyBTdGF0dXMJCSAgICAgKi8KKyNkZWZpbmUgUnhfSW50UngJICAgICAgIDB4MDAwMDAwNDAgLyogUnggSW50ZXJydXB0CQkgICAgICovCisjZGVmaW5lIFJ4X0N0bFJlY2QJICAgICAgIDB4MDAwMDAwMjAgLyogUnggQ29udHJvbCBSZWNlaXZlCQkgICAgICovCiAKLSNkZWZpbmUgUnhfU3RhdF9NYXNrICAgICAgICAgICAweDAwMDBFRkMwIC8qIFJ4IEFsbCBTdGF0dXMgTWFzayAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUnhfU3RhdF9NYXNrCSAgICAgICAweDAwMDBFRkMwIC8qIFJ4IEFsbCBTdGF0dXMgTWFzawkJICAgICAqLwogCiAvKiBJbnRfRW4gYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIEludF9OUkFidEVuICAgICAgICAgICAgMHgwMDAwMDgwMCAvKiAxOk5vbi1yZWNvdmVyYWJsZSBBYm9ydCBFbmFibGUgICovCi0jZGVmaW5lIEludF9UeEN0bENtcEVuICAgICAgICAgMHgwMDAwMDQwMCAvKiAxOlRyYW5zbWl0IENvbnRyb2wgQ29tcGxldGUgRW5hYmxlICovCi0jZGVmaW5lIEludF9EbVBhckVyckVuICAgICAgICAgMHgwMDAwMDIwMCAvKiAxOkRNQSBQYXJpdHkgRXJyb3IgRW5hYmxlICAgICAgICovCi0jZGVmaW5lIEludF9EUGFyREVuICAgICAgICAgICAgMHgwMDAwMDEwMCAvKiAxOkRhdGEgUGFyaXR5IEVycm9yIEVuYWJsZSAgICAgICovCi0jZGVmaW5lIEludF9FYXJOb3RFbiAgICAgICAgICAgMHgwMDAwMDA4MCAvKiAxOkVhcmx5IE5vdGlmeSBFbmFibGUgICAgICAgICAgICovCi0jZGVmaW5lIEludF9EUGFyRXJyRW4gICAgICAgICAgMHgwMDAwMDA0MCAvKiAxOkRldGVjdGVkIFBhcml0eSBFcnJvciBFbmFibGUgICovCi0jZGVmaW5lIEludF9TU3lzRXJyRW4gICAgICAgICAgMHgwMDAwMDAyMCAvKiAxOlNpZ25hbGxlZCBTeXN0ZW0gRXJyb3IgRW5hYmxlICovCi0jZGVmaW5lIEludF9STWFzQWJ0RW4gICAgICAgICAgMHgwMDAwMDAxMCAvKiAxOlJlY2VpdmVkIE1hc3RlciBBYm9ydCBFbmFibGUgICovCi0jZGVmaW5lIEludF9SVGFyZ0FidEVuICAgICAgICAgMHgwMDAwMDAwOCAvKiAxOlJlY2VpdmVkIFRhcmdldCBBYm9ydCBFbmFibGUgICovCi0jZGVmaW5lIEludF9TVGFyZ0FidEVuICAgICAgICAgMHgwMDAwMDAwNCAvKiAxOlNpZ25hbGxlZCBUYXJnZXQgQWJvcnQgRW5hYmxlICovCi0jZGVmaW5lIEludF9CTEV4RW4gICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiAxOkJ1ZmZlciBMaXN0IEV4aGF1c3RlZCBFbmFibGUgICovCi0jZGVmaW5lIEludF9GREFFeEVuICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiAxOkZyZWUgRGVzY3JpcHRvciBBcmVhICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgIEV4aGF1c3RlZCBFbmFibGUgICovCisjZGVmaW5lIEludF9OUkFidEVuCSAgICAgICAweDAwMDAwODAwIC8qIDE6Tm9uLXJlY292ZXJhYmxlIEFib3J0IEVuYWJsZSAgKi8KKyNkZWZpbmUgSW50X1R4Q3RsQ21wRW4JICAgICAgIDB4MDAwMDA0MDAgLyogMTpUcmFuc21pdCBDdGwgQ29tcGxldGUgRW5hYmxlICAqLworI2RlZmluZSBJbnRfRG1QYXJFcnJFbgkgICAgICAgMHgwMDAwMDIwMCAvKiAxOkRNQSBQYXJpdHkgRXJyb3IgRW5hYmxlCSAgICAgKi8KKyNkZWZpbmUgSW50X0RQYXJERW4JICAgICAgIDB4MDAwMDAxMDAgLyogMTpEYXRhIFBhcml0eSBFcnJvciBFbmFibGUJICAgICAqLworI2RlZmluZSBJbnRfRWFyTm90RW4JICAgICAgIDB4MDAwMDAwODAgLyogMTpFYXJseSBOb3RpZnkgRW5hYmxlCSAgICAgKi8KKyNkZWZpbmUgSW50X0RQYXJFcnJFbgkgICAgICAgMHgwMDAwMDA0MCAvKiAxOkRldGVjdGVkIFBhcml0eSBFcnJvciBFbmFibGUgICovCisjZGVmaW5lIEludF9TU3lzRXJyRW4JICAgICAgIDB4MDAwMDAwMjAgLyogMTpTaWduYWxsZWQgU3lzdGVtIEVycm9yIEVuYWJsZSAqLworI2RlZmluZSBJbnRfUk1hc0FidEVuCSAgICAgICAweDAwMDAwMDEwIC8qIDE6UmVjZWl2ZWQgTWFzdGVyIEFib3J0IEVuYWJsZSAgKi8KKyNkZWZpbmUgSW50X1JUYXJnQWJ0RW4JICAgICAgIDB4MDAwMDAwMDggLyogMTpSZWNlaXZlZCBUYXJnZXQgQWJvcnQgRW5hYmxlICAqLworI2RlZmluZSBJbnRfU1RhcmdBYnRFbgkgICAgICAgMHgwMDAwMDAwNCAvKiAxOlNpZ25hbGxlZCBUYXJnZXQgQWJvcnQgRW5hYmxlICovCisjZGVmaW5lIEludF9CTEV4RW4JICAgICAgIDB4MDAwMDAwMDIgLyogMTpCdWZmZXIgTGlzdCBFeGhhdXN0ZWQgRW5hYmxlICAqLworI2RlZmluZSBJbnRfRkRBRXhFbgkgICAgICAgMHgwMDAwMDAwMSAvKiAxOkZyZWUgRGVzY3JpcHRvciBBcmVhCSAgICAgKi8KKwkJCQkJICAvKgkJICAgRXhoYXVzdGVkIEVuYWJsZSAgKi8KIAogLyogSW50X1NyYyBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBJbnRfTlJhYnQgICAgICAgICAgICAgIDB4MDAwMDQwMDAgLyogMTpOb24gUmVjb3ZlcmFibGUgZXJyb3IgICAgICAgICAqLwotI2RlZmluZSBJbnRfRG1QYXJFcnJTdGF0ICAgICAgIDB4MDAwMDIwMDAgLyogMTpETUEgUGFyaXR5IEVycm9yICYgQ2xlYXIgICAgICAqLwotI2RlZmluZSBJbnRfQkxFeCAgICAgICAgICAgICAgIDB4MDAwMDEwMDAgLyogMTpCdWZmZXIgTGlzdCBFbXB0eSAmIENsZWFyICAgICAqLwotI2RlZmluZSBJbnRfRkRBRXggICAgICAgICAgICAgIDB4MDAwMDA4MDAgLyogMTpGREEgRW1wdHkgJiBDbGVhciAgICAgICAgICAgICAqLwotI2RlZmluZSBJbnRfSW50TlJBYnQgICAgICAgICAgIDB4MDAwMDA0MDAgLyogMTpOb24gUmVjb3ZlcmFibGUgQWJvcnQgICAgICAgICAqLwotI2RlZmluZQlJbnRfSW50Q21wICAgICAgICAgICAgIDB4MDAwMDAyMDAgLyogMTpNQUMgY29udHJvbCBwYWNrZXQgY29tcGxldGUgICAqLwotI2RlZmluZSBJbnRfSW50RXhCRCAgICAgICAgICAgIDB4MDAwMDAxMDAgLyogMTpJbnRlcnJ1cHQgRXh0cmEgQkQgJiBDbGVhciAgICAqLwotI2RlZmluZSBJbnRfRG1QYXJFcnIgICAgICAgICAgIDB4MDAwMDAwODAgLyogMTpETUEgUGFyaXR5IEVycm9yICYgQ2xlYXIgICAgICAqLwotI2RlZmluZSBJbnRfSW50RWFyTm90ICAgICAgICAgIDB4MDAwMDAwNDAgLyogMTpSZWNlaXZlIERhdGEgd3JpdGUgJiBDbGVhciAgICAqLwotI2RlZmluZSBJbnRfU1dJbnQgICAgICAgICAgICAgIDB4MDAwMDAwMjAgLyogMTpTb2Z0d2FyZSByZXF1ZXN0ICYgQ2xlYXIgICAgICAqLwotI2RlZmluZSBJbnRfSW50QkxFeCAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogMTpCdWZmZXIgTGlzdCBFbXB0eSAmIENsZWFyICAgICAqLwotI2RlZmluZSBJbnRfSW50RkRBRXggICAgICAgICAgIDB4MDAwMDAwMDggLyogMTpGREEgRW1wdHkgJiBDbGVhciAgICAgICAgICAgICAqLwotI2RlZmluZSBJbnRfSW50UENJICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogMTpQQ0kgY29udHJvbGxlciAmIENsZWFyICAgICAgICAqLwotI2RlZmluZSBJbnRfSW50TWFjUnggICAgICAgICAgIDB4MDAwMDAwMDIgLyogMTpSeCBjb250cm9sbGVyICYgQ2xlYXIgICAgICAgICAqLwotI2RlZmluZSBJbnRfSW50TWFjVHggICAgICAgICAgIDB4MDAwMDAwMDEgLyogMTpUeCBjb250cm9sbGVyICYgQ2xlYXIgICAgICAgICAqLworI2RlZmluZSBJbnRfTlJhYnQJICAgICAgIDB4MDAwMDQwMDAgLyogMTpOb24gUmVjb3ZlcmFibGUgZXJyb3IJICAgICAqLworI2RlZmluZSBJbnRfRG1QYXJFcnJTdGF0ICAgICAgIDB4MDAwMDIwMDAgLyogMTpETUEgUGFyaXR5IEVycm9yICYgQ2xlYXIJICAgICAqLworI2RlZmluZSBJbnRfQkxFeAkgICAgICAgMHgwMDAwMTAwMCAvKiAxOkJ1ZmZlciBMaXN0IEVtcHR5ICYgQ2xlYXIgICAgICovCisjZGVmaW5lIEludF9GREFFeAkgICAgICAgMHgwMDAwMDgwMCAvKiAxOkZEQSBFbXB0eSAmIENsZWFyCSAgICAgKi8KKyNkZWZpbmUgSW50X0ludE5SQWJ0CSAgICAgICAweDAwMDAwNDAwIC8qIDE6Tm9uIFJlY292ZXJhYmxlIEFib3J0CSAgICAgKi8KKyNkZWZpbmUgSW50X0ludENtcAkgICAgICAgMHgwMDAwMDIwMCAvKiAxOk1BQyBjb250cm9sIHBhY2tldCBjb21wbGV0ZSAgICovCisjZGVmaW5lIEludF9JbnRFeEJECSAgICAgICAweDAwMDAwMTAwIC8qIDE6SW50ZXJydXB0IEV4dHJhIEJEICYgQ2xlYXIgICAgKi8KKyNkZWZpbmUgSW50X0RtUGFyRXJyCSAgICAgICAweDAwMDAwMDgwIC8qIDE6RE1BIFBhcml0eSBFcnJvciAmIENsZWFyCSAgICAgKi8KKyNkZWZpbmUgSW50X0ludEVhck5vdAkgICAgICAgMHgwMDAwMDA0MCAvKiAxOlJlY2VpdmUgRGF0YSB3cml0ZSAmIENsZWFyICAgICovCisjZGVmaW5lIEludF9TV0ludAkgICAgICAgMHgwMDAwMDAyMCAvKiAxOlNvZnR3YXJlIHJlcXVlc3QgJiBDbGVhcgkgICAgICovCisjZGVmaW5lIEludF9JbnRCTEV4CSAgICAgICAweDAwMDAwMDEwIC8qIDE6QnVmZmVyIExpc3QgRW1wdHkgJiBDbGVhciAgICAgKi8KKyNkZWZpbmUgSW50X0ludEZEQUV4CSAgICAgICAweDAwMDAwMDA4IC8qIDE6RkRBIEVtcHR5ICYgQ2xlYXIJICAgICAqLworI2RlZmluZSBJbnRfSW50UENJCSAgICAgICAweDAwMDAwMDA0IC8qIDE6UENJIGNvbnRyb2xsZXIgJiBDbGVhcgkgICAgICovCisjZGVmaW5lIEludF9JbnRNYWNSeAkgICAgICAgMHgwMDAwMDAwMiAvKiAxOlJ4IGNvbnRyb2xsZXIgJiBDbGVhcgkgICAgICovCisjZGVmaW5lIEludF9JbnRNYWNUeAkgICAgICAgMHgwMDAwMDAwMSAvKiAxOlR4IGNvbnRyb2xsZXIgJiBDbGVhcgkgICAgICovCiAKIC8qIE1EX0NBIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgTURfQ0FfUHJlU3VwICAgICAgICAgICAweDAwMDAxMDAwIC8qIDE6UHJlYW1ibGUgU3VwcmVzcyAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTURfQ0FfQnVzeSAgICAgICAgICAgICAweDAwMDAwODAwIC8qIDE6QnVzeSAoU3RhcnQgT3BlcmF0aW9uKSAgICAgICAgKi8KLSNkZWZpbmUgTURfQ0FfV3IgICAgICAgICAgICAgICAweDAwMDAwNDAwIC8qIDE6V3JpdGUgMDpSZWFkICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTURfQ0FfUHJlU3VwCSAgICAgICAweDAwMDAxMDAwIC8qIDE6UHJlYW1ibGUgU3VwcmVzcwkJICAgICAqLworI2RlZmluZSBNRF9DQV9CdXN5CSAgICAgICAweDAwMDAwODAwIC8qIDE6QnVzeSAoU3RhcnQgT3BlcmF0aW9uKQkgICAgICovCisjZGVmaW5lIE1EX0NBX1dyCSAgICAgICAweDAwMDAwNDAwIC8qIDE6V3JpdGUgMDpSZWFkCQkgICAgICovCiAKIAogLyoKQEAgLTMwNywyNCArMzA2LDI0IEBACiAjZGVmaW5lIEZEX0FMSUdOCTE2CiAKIC8qIEZyYW1lIERlc2NyaXB0ZXIgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgRkRfRkRMZW5ndGhfTUFTSyAgICAgICAweDAwMDBGRkZGIC8qIExlbmd0aCBNQVNLICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRkRfQkRDbnRfTUFTSyAgICAgICAgICAweDAwMUYwMDAwIC8qIEJEIGNvdW50IE1BU0sgaW4gRkQgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRkRfRnJtT3B0X01BU0sgICAgICAgICAweDdDMDAwMDAwIC8qIEZyYW1lIG9wdGlvbiBNQVNLICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkRfRkRMZW5ndGhfTUFTSyAgICAgICAweDAwMDBGRkZGIC8qIExlbmd0aCBNQVNLCQkgICAgICovCisjZGVmaW5lIEZEX0JEQ250X01BU0sJICAgICAgIDB4MDAxRjAwMDAgLyogQkQgY291bnQgTUFTSyBpbiBGRAkgICAgICovCisjZGVmaW5lIEZEX0ZybU9wdF9NQVNLCSAgICAgICAweDdDMDAwMDAwIC8qIEZyYW1lIG9wdGlvbiBNQVNLCQkgICAgICovCiAjZGVmaW5lIEZEX0ZybU9wdF9CaWdFbmRpYW4gICAgMHg0MDAwMDAwMCAvKiBUeC9SeCAqLwotI2RlZmluZSBGRF9Gcm1PcHRfSW50VHggICAgICAgIDB4MjAwMDAwMDAgLyogVHggb25seSAqLwotI2RlZmluZSBGRF9Gcm1PcHRfTm9DUkMgICAgICAgIDB4MTAwMDAwMDAgLyogVHggb25seSAqLworI2RlZmluZSBGRF9Gcm1PcHRfSW50VHgJICAgICAgIDB4MjAwMDAwMDAgLyogVHggb25seSAqLworI2RlZmluZSBGRF9Gcm1PcHRfTm9DUkMJICAgICAgIDB4MTAwMDAwMDAgLyogVHggb25seSAqLwogI2RlZmluZSBGRF9Gcm1PcHRfTm9QYWRkaW5nICAgIDB4MDgwMDAwMDAgLyogVHggb25seSAqLwogI2RlZmluZSBGRF9Gcm1PcHRfUGFja2luZyAgICAgIDB4MDQwMDAwMDAgLyogUnggb25seSAqLwotI2RlZmluZSBGRF9Db3duc0ZEICAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRkQgQ29udHJvbGxlciBvd25lciBiaXQgICAgICAgICAqLwotI2RlZmluZSBGRF9OZXh0X0VPTCAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogRkQgRU9MIGluZGljYXRvciAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGRF9CRENudF9TSElGVCAgICAgICAgIDE2CisjZGVmaW5lIEZEX0Nvd25zRkQJICAgICAgIDB4ODAwMDAwMDAgLyogRkQgQ29udHJvbGxlciBvd25lciBiaXQJICAgICAqLworI2RlZmluZSBGRF9OZXh0X0VPTAkgICAgICAgMHgwMDAwMDAwMSAvKiBGRCBFT0wgaW5kaWNhdG9yCQkgICAgICovCisjZGVmaW5lIEZEX0JEQ250X1NISUZUCSAgICAgICAxNgogCiAvKiBCdWZmZXIgRGVzY3JpcHRlciBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIEJEX0J1ZmZMZW5ndGhfTUFTSyAgICAgMHgwMDAwRkZGRiAvKiBSZWNpZXZlIERhdGEgU2l6ZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEJEX1J4QkRJRF9NQVNLICAgICAgICAgMHgwMEZGMDAwMCAvKiBCRCBJRCBOdW1iZXIgTUFTSyAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEJEX1J4QkRTZXFOX01BU0sgICAgICAgMHg3RjAwMDAwMCAvKiBSeCBCRCBTZXF1ZW5jZSBOdW1iZXIgICAgICAgICAgICovCi0jZGVmaW5lIEJEX0Nvd25zQkQgICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBCRCBDb250cm9sbGVyIG93bmVyIGJpdCAgICAgICAgICovCi0jZGVmaW5lIEJEX1J4QkRJRF9TSElGVCAgICAgICAgMTYKKyNkZWZpbmUgQkRfQnVmZkxlbmd0aF9NQVNLICAgICAweDAwMDBGRkZGIC8qIFJlY2lldmUgRGF0YSBTaXplCQkgICAgICovCisjZGVmaW5lIEJEX1J4QkRJRF9NQVNLCSAgICAgICAweDAwRkYwMDAwIC8qIEJEIElEIE51bWJlciBNQVNLCQkgICAgICovCisjZGVmaW5lIEJEX1J4QkRTZXFOX01BU0sgICAgICAgMHg3RjAwMDAwMCAvKiBSeCBCRCBTZXF1ZW5jZSBOdW1iZXIJICAgICAqLworI2RlZmluZSBCRF9Db3duc0JECSAgICAgICAweDgwMDAwMDAwIC8qIEJEIENvbnRyb2xsZXIgb3duZXIgYml0CSAgICAgKi8KKyNkZWZpbmUgQkRfUnhCRElEX1NISUZUCSAgICAgICAxNgogI2RlZmluZSBCRF9SeEJEU2VxTl9TSElGVCAgICAgIDI0CiAKIApAQCAtMzQ4LDEzICszNDcsMTUgQEAKIAlJbnRfU1RhcmdBYnRFbiB8IFwKIAlJbnRfQkxFeEVuICB8IEludF9GREFFeEVuKSAvKiBtYXliZSAweGI3ZiovCiAjZGVmaW5lIERNQV9DVExfQ01ECURNQV9CVVJTVF9TSVpFCi0jZGVmaW5lIEhBVkVfRE1BX1JYQUxJR04obHApCWxpa2VseSgobHApLT5ib2FyZHR5cGUgIT0gVEMzNTgxNUNGKQorI2RlZmluZSBIQVZFX0RNQV9SWEFMSUdOKGxwKQlsaWtlbHkoKGxwKS0+Y2hpcHR5cGUgIT0gVEMzNTgxNUNGKQogCiAvKiBUdW5pbmcgcGFyYW1ldGVycyAqLwogI2RlZmluZSBETUFfQlVSU1RfU0laRQkzMgogI2RlZmluZSBUWF9USFJFU0hPTEQJMTAyNAotI2RlZmluZSBUWF9USFJFU0hPTERfTUFYIDE1MzYgICAgICAgLyogdXNlZCB0aHJlc2hvbGQgd2l0aCBwYWNrZXQgbWF4IGJ5dGUgZm9yIGxvdyBwY2kgdHJhbnNmZXIgYWJpbGl0eS4qLwotI2RlZmluZSBUWF9USFJFU0hPTERfS0VFUF9MSU1JVCAxMCAgLyogc2V0dGluZyB0aHJlc2hvbGQgbWF4IHZhbHVlIHdoZW4gb3ZlcnJ1biBlcnJvciBvY2N1cmVkIHRoaXMgY291bnQuICovCisvKiB1c2VkIHRocmVzaG9sZCB3aXRoIHBhY2tldCBtYXggYnl0ZSBmb3IgbG93IHBjaSB0cmFuc2ZlciBhYmlsaXR5LiovCisjZGVmaW5lIFRYX1RIUkVTSE9MRF9NQVggMTUzNgorLyogc2V0dGluZyB0aHJlc2hvbGQgbWF4IHZhbHVlIHdoZW4gb3ZlcnJ1biBlcnJvciBvY2N1cmVkIHRoaXMgY291bnQuICovCisjZGVmaW5lIFRYX1RIUkVTSE9MRF9LRUVQX0xJTUlUIDEwCiAKIC8qIDE2ICsgUlhfQlVGX05VTSAqIDggKyBSWF9GRF9OVU0gKiAxNiArIFRYX0ZEX05VTSAqIDMyIDw9IFBBR0VfU0laRSpGRF9QQUdFX05VTSAqLwogI2lmZGVmIFRDMzU4MTVfVVNFX1BBQ0tFREJVRkZFUgpAQCAtMzk2LDIxICszOTcsMTIgQEAKIH07CiAKIAotI2RlZmluZSB0Y19yZWFkbChhZGRyKQlyZWFkbChhZGRyKQotI2RlZmluZSB0Y193cml0ZWwoZCwgYWRkcikJd3JpdGVsKGQsIGFkZHIpCisjZGVmaW5lIHRjX3JlYWRsKGFkZHIpCWlvcmVhZDMyKGFkZHIpCisjZGVmaW5lIHRjX3dyaXRlbChkLCBhZGRyKQlpb3dyaXRlMzIoZCwgYWRkcikKIAogI2RlZmluZSBUQzM1ODE1X1RYX1RJTUVPVVQgIG1zZWNzX3RvX2ppZmZpZXMoNDAwKQogCi0vKiBUaW1lciBzdGF0ZSBlbmdpbmUuICovCi1lbnVtIHRjMzU4MTVfdGltZXJfc3RhdGUgewotCWFyYndhaXQgID0gMCwJLyogV2FpdGluZyBmb3IgYXV0byBuZWdvdGlhdGlvbiB0byBjb21wbGV0ZS4gICAgICAgICAgKi8KLQlsdXB3YWl0ICA9IDEsCS8qIEF1dG8tbmVnIGNvbXBsZXRlLCBhd2FpdGluZyBsaW5rLXVwIHN0YXR1cy4gICAgICAgICovCi0JbHRyeXdhaXQgPSAyLAkvKiBGb3JjaW5nIHRyeSBvZiBhbGwgbW9kZXMsIGZyb20gZmFzdGVzdCB0byBzbG93ZXN0LiAqLwotCWFzbGVlcCAgID0gMywJLyogVGltZSBpbmFjdGl2ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlsY2hlY2sgICA9IDQsCS8qIENoZWNrIGxpbmsgc3RhdHVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi19OwotCi0vKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWQgdG8gYmUga2VwdCBmb3IgZWFjaCBib2FyZC4gKi8KKy8qIEluZm9ybWF0aW9uIHRoYXQgbmVlZCB0byBiZSBrZXB0IGZvciBlYWNoIGNvbnRyb2xsZXIuICovCiBzdHJ1Y3QgdGMzNTgxNV9sb2NhbCB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAKQEAgLTQxOCwxMiArNDEwLDExIEBACiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAKIAkvKiBzdGF0aXN0aWNzICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHsKIAkJaW50IG1heF90eF9xbGVuOwogCQlpbnQgdHhfaW50czsKIAkJaW50IHJ4X2ludHM7Ci0JICAgICAgICBpbnQgdHhfdW5kZXJydW47CisJCWludCB0eF91bmRlcnJ1bjsKIAl9IGxzdGF0czsKIAogCS8qIFR4IGNvbnRyb2wgbG9jay4gIFRoaXMgcHJvdGVjdHMgdGhlIHRyYW5zbWl0IGJ1ZmZlciByaW5nCkBAIC00MzMsMTIgKzQyNCwxMiBAQAogCSAqLwogCXNwaW5sb2NrX3QgbG9jazsKIAotCWludCBwaHlfYWRkcjsKLQlpbnQgZnVsbGR1cGxleDsKLQl1bnNpZ25lZCBzaG9ydCBzYXZlZF9scGE7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0JZW51bSB0YzM1ODE1X3RpbWVyX3N0YXRlIHRpbWVyX3N0YXRlOyAvKiBTdGF0ZSBvZiBhdXRvLW5lZyB0aW1lci4gKi8KLQl1bnNpZ25lZCBpbnQgdGltZXJfdGlja3M7CS8qIE51bWJlciBvZiBjbGlja3MgYXQgZWFjaCBzdGF0ZSAgKi8KKwlzdHJ1Y3QgbWlpX2J1cyBtaWlfYnVzOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2OworCWludCBkdXBsZXg7CisJaW50IHNwZWVkOworCWludCBsaW5rOworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXN0YXJ0X3dvcms7CiAKIAkvKgogCSAqIFRyYW5zbWl0dGluZzogQmF0Y2ggTW9kZS4KQEAgLTQ1Miw3ICs0NDMsNyBAQAogCSAqCVJYX0JVRl9OVU0gQkQgaW4gRnJlZSBCdWZmZXIgRkQuCiAJICoJT25lIEZyZWUgQnVmZmVyIEJEIGhhcyBFVEhfRlJBTUVfTEVOIGRhdGEgYnVmZmVyLgogCSAqLwotCXZvaWQgKiBmZF9idWY7CS8qIGZvciBUeEZELCBSeEZELCBGckZEICovCisJdm9pZCAqZmRfYnVmOwkvKiBmb3IgVHhGRCwgUnhGRCwgRnJGRCAqLwogCWRtYV9hZGRyX3QgZmRfYnVmX2RtYTsKIAlzdHJ1Y3QgVHhGRCAqdGZkX2Jhc2U7CiAJdW5zaWduZWQgaW50IHRmZF9zdGFydDsKQEAgLTQ2Myw3ICs0NTQsNyBAQAogCXN0cnVjdCBGckZEICpmYmxfcHRyOwogI2lmZGVmIFRDMzU4MTVfVVNFX1BBQ0tFREJVRkZFUgogCXVuc2lnbmVkIGNoYXIgZmJsX2N1cmlkOwotCXZvaWQgKiBkYXRhX2J1ZltSWF9CVUZfTlVNXTsJCS8qIHBhY2tpbmcgKi8KKwl2b2lkICpkYXRhX2J1ZltSWF9CVUZfTlVNXTsJCS8qIHBhY2tpbmcgKi8KIAlkbWFfYWRkcl90IGRhdGFfYnVmX2RtYVtSWF9CVUZfTlVNXTsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNDc2LDEwICs0NjcsOCBAQAogCQlkbWFfYWRkcl90IHNrYl9kbWE7CiAJfSB0eF9za2JzW1RYX0ZEX05VTV0sIHJ4X3NrYnNbUlhfQlVGX05VTV07CiAjZW5kaWYKLQlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpOwotCXVuc2lnbmVkIHNob3J0IG1paV9pZFsyXTsKIAl1MzIgbXNnX2VuYWJsZTsKLQlib2FyZF90IGJvYXJkdHlwZTsKKwllbnVtIHRjMzU4MTVfY2hpcHR5cGUgY2hpcHR5cGU7CiB9OwogCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZmRfdmlydF90b19idXMoc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwLCB2b2lkICp2aXJ0KQpAQCAtNTA2LDEzICs0OTUsMTQgQEAKIH0KIAogI2RlZmluZSBUQzM1ODE1X0RNQV9TWU5DX09OREVNQU5ECi1zdGF0aWMgdm9pZCogYWxsb2NfcnhidWZfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCitzdGF0aWMgdm9pZCAqYWxsb2NfcnhidWZfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCiB7CiAjaWZkZWYgVEMzNTgxNV9ETUFfU1lOQ19PTkRFTUFORAogCXZvaWQgKmJ1ZjsKIAkvKiBwY2lfbWFwICsgcGNpX2RtYV9zeW5jIHdpbGwgYmUgbW9yZSBlZmZlY3RpdmUgdGhhbgogCSAqIHBjaV9hbGxvY19jb25zaXN0ZW50IG9uIHNvbWUgYXJjaHMuICovCi0JaWYgKChidWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKSkgPT0gTlVMTCkKKwlidWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZikKIAkJcmV0dXJuIE5VTEw7CiAJKmRtYV9oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShod2RldiwgYnVmLCBQQUdFX1NJWkUsCiAJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtNTc3LDcgKzU2Nyw3IEBACiBzdGF0aWMgaW50CXRjMzU4MTVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0CW5ldF9kZXZpY2Vfc3RhdHMgKnRjMzU4MTVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQJdGMzNTgxNV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCAgICAgdGMzNTgxNV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQJdGMzNTgxNV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludAl0YzM1ODE1X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZAl0YzM1ODE1X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTU4NSwyMSArNTc1LDIyNSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0YzM1ODE1X2V0aHRvb2xfb3BzOwogCiAvKiBFeGFtcGxlIHJvdXRpbmVzIHlvdSBtdXN0IHdyaXRlIDstPi4gKi8KLXN0YXRpYyB2b2lkIAl0YzM1ODE1X2NoaXBfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCAJdGMzNTgxNV9jaGlwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZAl0YzM1ODE1X2ZpbmRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgCXRjMzU4MTVfcGh5X2NoaXBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkCXRjMzU4MTVfY2hpcF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkCXRjMzU4MTVfY2hpcF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjaWZkZWYgREVCVUcKIHN0YXRpYyB2b2lkCXBhbmljX3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCB0YzM1ODE1X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCB0YzM1ODE1X3N0YXJ0X2F1dG9fbmVnb3RpYXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgc3RydWN0IGV0aHRvb2xfY21kICplcCk7Ci1zdGF0aWMgaW50IHRjX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwotc3RhdGljIHZvaWQgdGNfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCi0JCQkgIGludCB2YWwpOworc3RhdGljIHZvaWQgdGMzNTgxNV9yZXN0YXJ0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIGludCB0Y19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnVzLT5wcml2OworCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQorCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwOworCisJdGNfd3JpdGVsKE1EX0NBX0J1c3kgfCAobWlpX2lkIDw8IDUpIHwgKHJlZ251bSAmIDB4MWYpLCAmdHItPk1EX0NBKTsKKwl3aGlsZSAodGNfcmVhZGwoJnRyLT5NRF9DQSkgJiBNRF9DQV9CdXN5KSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FSU87CisJCWNwdV9yZWxheCgpOworCX0KKwlyZXR1cm4gdGNfcmVhZGwoJnRyLT5NRF9EYXRhKSAmIDB4ZmZmZjsKK30KKworc3RhdGljIGludCB0Y19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWwpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJ1cy0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KKwkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMDsKKworCXRjX3dyaXRlbCh2YWwsICZ0ci0+TURfRGF0YSk7CisJdGNfd3JpdGVsKE1EX0NBX0J1c3kgfCBNRF9DQV9XciB8IChtaWlfaWQgPDwgNSkgfCAocmVnbnVtICYgMHgxZiksCisJCSAgJnRyLT5NRF9DQSk7CisJd2hpbGUgKHRjX3JlYWRsKCZ0ci0+TURfQ0EpICYgTURfQ0FfQnVzeSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRUlPOworCQljcHVfcmVsYXgoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRjX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGxwLT5waHlfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1c19jaGFuZ2UgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJaWYgKHBoeWRldi0+bGluayAmJgorCSAgICAobHAtPnNwZWVkICE9IHBoeWRldi0+c3BlZWQgfHwgbHAtPmR1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKKwkJc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9CisJCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CisJCXUzMiByZWc7CisKKwkJcmVnID0gdGNfcmVhZGwoJnRyLT5NQUNfQ3RsKTsKKwkJcmVnIHw9IE1BQ19IYWx0UmVxOworCQl0Y193cml0ZWwocmVnLCAmdHItPk1BQ19DdGwpOworCQlpZiAocGh5ZGV2LT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQlyZWcgfD0gTUFDX0Z1bGxEdXA7CisJCWVsc2UKKwkJCXJlZyAmPSB+TUFDX0Z1bGxEdXA7CisJCXRjX3dyaXRlbChyZWcsICZ0ci0+TUFDX0N0bCk7CisJCXJlZyAmPSB+TUFDX0hhbHRSZXE7CisJCXRjX3dyaXRlbChyZWcsICZ0ci0+TUFDX0N0bCk7CisKKwkJLyoKKwkJICogVFg0OTM5IFBDRkcuU1BFRURuIGJpdCB3aWxsIGJlIGNoYW5nZWQgb24KKwkJICogTkVUREVWX0NIQU5HRSBldmVudC4KKwkJICovCisKKyNpZiAhZGVmaW5lZChOT19DSEVDS19DQVJSSUVSKSAmJiBkZWZpbmVkKFdPUktBUk9VTkRfTE9TVENBUikKKwkJLyoKKwkJICogV09SS0FST1VORDogZW5hYmxlIExvc3RDclMgb25seSBpZiBoYWxmIGR1cGxleAorCQkgKiBvcGVyYXRpb24uCisJCSAqIChUWDQ5MzkgZG9lcyBub3QgaGF2ZSBFbkxDYXJyKQorCQkgKi8KKwkJaWYgKHBoeWRldi0+ZHVwbGV4ID09IERVUExFWF9IQUxGICYmCisJCSAgICBscC0+Y2hpcHR5cGUgIT0gVEMzNTgxNV9UWDQ5MzkpCisJCQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5UeF9DdGwpIHwgVHhfRW5MQ2FyciwKKwkJCQkgICZ0ci0+VHhfQ3RsKTsKKyNlbmRpZgorCisJCWxwLT5zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJCWxwLT5kdXBsZXggPSBwaHlkZXYtPmR1cGxleDsKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCisJaWYgKHBoeWRldi0+bGluayAhPSBscC0+bGluaykgeworCQlpZiAocGh5ZGV2LT5saW5rKSB7CisjaWZkZWYgV09SS0FST1VORF8xMDBIQUxGX1BST01JU0MKKwkJCS8qIGRlbGF5ZWQgcHJvbWlzY3VvdXMgZW5hYmxpbmcgKi8KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCQkJdGMzNTgxNV9zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKKyNlbmRpZgorCQkJbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWxwLT5zcGVlZCA9IDA7CisJCQlscC0+ZHVwbGV4ID0gLTE7CisJCX0KKwkJbHAtPmxpbmsgPSBwaHlkZXYtPmxpbms7CisKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3RhdHVzX2NoYW5nZSAmJiBuZXRpZl9tc2dfbGluayhscCkpIHsKKwkJcGh5X3ByaW50X3N0YXR1cyhwaHlkZXYpOworI2lmZGVmIERFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiJXM6IE1JSSBCTUNSICUwNHggQk1TUiAlMDR4IExQQSAlMDR4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLAorCQkgICAgICAgcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUiksCisJCSAgICAgICBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTVNSKSwKKwkJICAgICAgIHBoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSkpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgaW50IHRjX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CisJaW50IHBoeV9hZGRyOworCXUzMiBkcm9wbWFzazsKKworCS8qIGZpbmQgdGhlIGZpcnN0IHBoeSAqLworCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykgeworCQlpZiAobHAtPm1paV9idXMucGh5X21hcFtwaHlfYWRkcl0pIHsKKwkJCWlmIChwaHlkZXYpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtdWx0aXBsZSBQSFlzIGZvdW5kXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJcGh5ZGV2ID0gbHAtPm1paV9idXMucGh5X21hcFtwaHlfYWRkcl07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcGh5ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogYXR0YWNoIHRoZSBtYWMgdG8gdGhlIHBoeSAqLworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQkJICAgICAmdGNfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLAorCQkJICAgICBscC0+Y2hpcHR5cGUgPT0gVEMzNTgxNV9UWDQ5MzkgPworCQkJICAgICBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA6IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCWlmIChJU19FUlIocGh5ZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5ZGV2KTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAiCisJCSIobWlpX2J1czpwaHlfYWRkcj0lcywgaWQ9JXgpXG4iLAorCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsCisJCXBoeWRldi0+cGh5X2lkKTsKKworCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCisJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gUEhZX0JBU0lDX0ZFQVRVUkVTOworCWRyb3BtYXNrID0gMDsKKwlpZiAob3B0aW9ucy5zcGVlZCA9PSAxMCkKKwkJZHJvcG1hc2sgfD0gU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKKwllbHNlIGlmIChvcHRpb25zLnNwZWVkID09IDEwMCkKKwkJZHJvcG1hc2sgfD0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGw7CisJaWYgKG9wdGlvbnMuZHVwbGV4ID09IDEpCisJCWRyb3BtYXNrIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKKwllbHNlIGlmIChvcHRpb25zLmR1cGxleCA9PSAyKQorCQlkcm9wbWFzayB8PSBTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGY7CisJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gfmRyb3BtYXNrOworCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPnN1cHBvcnRlZDsKKworCWxwLT5saW5rID0gMDsKKwlscC0+c3BlZWQgPSAwOworCWxwLT5kdXBsZXggPSAtMTsKKwlscC0+cGh5X2RldiA9IHBoeWRldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRjX21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyOworCWludCBpOworCisJbHAtPm1paV9idXMubmFtZSA9ICJ0YzM1ODE1X21paV9idXMiOworCWxwLT5taWlfYnVzLnJlYWQgPSB0Y19tZGlvX3JlYWQ7CisJbHAtPm1paV9idXMud3JpdGUgPSB0Y19tZGlvX3dyaXRlOworCXNucHJpbnRmKGxwLT5taWlfYnVzLmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsCisJCSAobHAtPnBjaV9kZXYtPmJ1cy0+bnVtYmVyIDw8IDgpIHwgbHAtPnBjaV9kZXYtPmRldmZuKTsKKwlscC0+bWlpX2J1cy5wcml2ID0gZGV2OworCWxwLT5taWlfYnVzLmRldiA9ICZscC0+cGNpX2Rldi0+ZGV2OworCWxwLT5taWlfYnVzLmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkgKiBQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOworCWlmICghbHAtPm1paV9idXMuaXJxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCWxwLT5taWlfYnVzLmlycVtpXSA9IFBIWV9QT0xMOworCisJZXJyID0gbWRpb2J1c19yZWdpc3RlcigmbHAtPm1paV9idXMpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX21kaW9faXJxOworCWVyciA9IHRjX21paV9wcm9iZShkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1czsKKwlyZXR1cm4gMDsKKworZXJyX291dF91bnJlZ2lzdGVyX2J1czoKKwltZGlvYnVzX3VucmVnaXN0ZXIoJmxwLT5taWlfYnVzKTsKK2Vycl9vdXRfZnJlZV9tZGlvX2lycToKKwlrZnJlZShscC0+bWlpX2J1cy5pcnEpOworZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQogCiAjaWZkZWYgQ09ORklHX0NQVV9UWDQ5WFgKIC8qCkBAIC02MTcsNyArODExLDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgdGMzNTgxNV9yZWFkX3BsYXRfZGV2X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlICpwZCA9IGJ1c19maW5kX2RldmljZSgmcGxhdGZvcm1fYnVzX3R5cGUsIE5VTEwsCiAJCQkJCSAgICBscC0+cGNpX2RldiwgdGMzNTgxNV9tYWNfbWF0Y2gpOwogCWlmIChwZCkgewpAQCAtNjM1LDcgKzgyOSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgdGMzNTgxNV9pbml0X2Rldl9hZGRyIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgdGMzNTgxNV9pbml0X2Rldl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9CiAJCShzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKQEAgLTY1NywyMSArODUxLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHRjMzU4MTVfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQgdGMzNTgxNV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscDsKIAlpbnQgcmM7Ci0JdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0LCBtbWlvX2VuZCwgbW1pb19mbGFncywgbW1pb19sZW47CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKSB7CiAJCXByaW50ayh2ZXJzaW9uKTsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAotCQkJICAgInNwZWVkOiVkIGR1cGxleDolZCBkb2ZvcmNlOiVkXG4iLAotCQkJICAgb3B0aW9ucy5zcGVlZCwgb3B0aW9ucy5kdXBsZXgsIG9wdGlvbnMuZG9mb3JjZSk7CisJCQkgICAic3BlZWQ6JWQgZHVwbGV4OiVkXG4iLAorCQkJICAgb3B0aW9ucy5zcGVlZCwgb3B0aW9ucy5kdXBsZXgpOwogCX0KIAogCWlmICghcGRldi0+aXJxKSB7CkBAIC02ODAsNTUgKzg3NCwyNCBAQAogCX0KIAogCS8qIGRldiB6ZXJvZWQgaW4gYWxsb2NfZXRoZXJkZXYgKi8KLQlkZXYgPSBhbGxvY19ldGhlcmRldiAoc2l6ZW9mICgqbHApKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmxwKSk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBhbGxvYyBuZXcgZXRoZXJuZXRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKLQlscCA9IGRldi0+cHJpdjsKKwlscCA9IG5ldGRldl9wcml2KGRldik7CiAJbHAtPmRldiA9IGRldjsKIAogCS8qIGVuYWJsZSBkZXZpY2UgKGluY2wuIFBDSSBQTSB3YWtldXApLCBhbmQgYnVzLW1hc3RlcmluZyAqLwotCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UgKHBkZXYpOworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwotCi0JbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMSk7Ci0JbW1pb19lbmQgPSBwY2lfcmVzb3VyY2VfZW5kIChwZGV2LCAxKTsKLQltbWlvX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzIChwZGV2LCAxKTsKLQltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4gKHBkZXYsIDEpOwotCi0JLyogc2V0IHRoaXMgaW1tZWRpYXRlbHksIHdlIG5lZWQgdG8ga25vdyBiZWZvcmUKLQkgKiB3ZSB0YWxrIHRvIHRoZSBjaGlwIGRpcmVjdGx5ICovCi0KLQkvKiBtYWtlIHN1cmUgUENJIGJhc2UgYWRkciAxIGlzIE1NSU8gKi8KLQlpZiAoIShtbWlvX2ZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lvbiAjMSBub3QgYW4gTU1JTyByZXNvdXJjZSwgYWJvcnRpbmdcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQkvKiBjaGVjayBmb3Igd2VpcmQvYnJva2VuIFBDSSByZWdpb24gcmVwb3J0aW5nICovCi0JaWYgKChtbWlvX2xlbiA8IHNpemVvZihzdHJ1Y3QgdGMzNTgxNV9yZWdzKSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBQQ0kgcmVnaW9uIHNpemUocyksIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCi0JcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zIChwZGV2LCBNT0ROQU1FKTsKKwlyYyA9IHBjaW1faW9tYXBfcmVnaW9ucyhwZGV2LCAxIDw8IDEsIE1PRE5BTUUpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwotCi0JcGNpX3NldF9tYXN0ZXIgKHBkZXYpOwotCi0JLyogaW9yZW1hcCBNTUlPIHJlZ2lvbiAqLwotCWlvYWRkciA9IGlvcmVtYXAgKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQlpZiAoaW9hZGRyID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIE1NSU8sIGFib3J0aW5nXG4iKTsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7Ci0JfQorCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCWlvYWRkciA9IHBjaW1faW9tYXBfdGFibGUocGRldilbMV07CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwogCWRldi0+b3BlbiA9IHRjMzU4MTVfb3BlbjsKQEAgLTc0OCwxMSArOTExLDEyIEBACiAjZW5kaWYKIAogCWRldi0+aXJxID0gcGRldi0+aXJxOwotCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvYWRkcjsKKwlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsKIAorCUlOSVRfV09SSygmbHAtPnJlc3RhcnRfd29yaywgdGMzNTgxNV9yZXN0YXJ0X3dvcmspOwogCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CiAJbHAtPnBjaV9kZXYgPSBwZGV2OwotCWxwLT5ib2FyZHR5cGUgPSBlbnQtPmRyaXZlcl9kYXRhOworCWxwLT5jaGlwdHlwZSA9IGVudC0+ZHJpdmVyX2RhdGE7CiAKIAlscC0+bXNnX2VuYWJsZSA9IE5FVElGX01TR19UWF9FUlIgfCBORVRJRl9NU0dfSFcgfCBORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX0xJTks7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CkBAIC03NjYsNjggKzkzMCw0OSBAQAogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKIAl9CiAKLQlyYyA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKKwlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyYykKLQkJZ290byBlcnJfb3V0X3VubWFwOworCQlnb3RvIGVycl9vdXQ7CiAKIAltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBhdCAweCVseCwgIgotCQkiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngsICIKLQkJIklSUSAlZFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMgYXQgMHglbHgsICVzLCBJUlEgJWRcbiIsCiAJCWRldi0+bmFtZSwKLQkJYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAorCQljaGlwX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKIAkJZGV2LT5iYXNlX2FkZHIsCi0JCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sCi0JCWRldi0+ZGV2X2FkZHJbMl0sIGRldi0+ZGV2X2FkZHJbM10sCi0JCWRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0sCisJCXByaW50X21hYyhtYWMsIGRldi0+ZGV2X2FkZHIpLAogCQlkZXYtPmlycSk7CiAKLQlzZXR1cF90aW1lcigmbHAtPnRpbWVyLCB0YzM1ODE1X3RpbWVyLCAodW5zaWduZWQgbG9uZykgZGV2KTsKLQlscC0+bWlpLmRldiA9IGRldjsKLQlscC0+bWlpLm1kaW9fcmVhZCA9IHRjX21kaW9fcmVhZDsKLQlscC0+bWlpLm1kaW9fd3JpdGUgPSB0Y19tZGlvX3dyaXRlOwotCWxwLT5taWkucGh5X2lkX21hc2sgPSAweDFmOwotCWxwLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQl0YzM1ODE1X2ZpbmRfcGh5KGRldik7Ci0JbHAtPm1paS5waHlfaWQgPSBscC0+cGh5X2FkZHI7Ci0JbHAtPm1paS5mdWxsX2R1cGxleCA9IDA7Ci0JbHAtPm1paS5mb3JjZV9tZWRpYSA9IDA7CisJcmMgPSB0Y19taWlfaW5pdChkZXYpOworCWlmIChyYykKKwkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7CiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF91bm1hcDoKLQlpb3VubWFwKGlvYWRkcik7Ci1lcnJfb3V0X2ZyZWVfcmVzOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMgKHBkZXYpOworZXJyX291dF91bnJlZ2lzdGVyOgorCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiBlcnJfb3V0OgotCWZyZWVfbmV0ZGV2IChkZXYpOworCWZyZWVfbmV0ZGV2KGRldik7CiAJcmV0dXJuIHJjOwogfQogCiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB0YzM1ODE1X3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHRjMzU4MTVfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKLQl1bnNpZ25lZCBsb25nIG1taW9fYWRkcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKLQltbWlvX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwotCi0JaWYgKG1taW9fYWRkcikgewotCQlpb3VubWFwICgodm9pZCBfX2lvbWVtICopbW1pb19hZGRyKTsKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyAocGRldik7Ci0JfQotCi0JZnJlZV9uZXRkZXYgKGRldik7Ci0KLQlwY2lfc2V0X2RydmRhdGEgKHBkZXYsIE5VTEwpOworCXBoeV9kaXNjb25uZWN0KGxwLT5waHlfZGV2KTsKKwltZGlvYnVzX3VucmVnaXN0ZXIoJmxwLT5taWlfYnVzKTsKKwlrZnJlZShscC0+bWlpX2J1cy5pcnEpOworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQKIHRjMzU4MTVfaW5pdF9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZkX2FkZHI7CiAKQEAgLTgzOCwxMSArOTgzLDE3IEBACiAJCSAgICAgICBzaXplb2Yoc3RydWN0IFR4RkQpICogVFhfRkRfTlVNID4KIAkJICAgICAgIFBBR0VfU0laRSAqIEZEX1BBR0VfTlVNKTsKIAotCQlpZiAoKGxwLT5mZF9idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChscC0+cGNpX2RldiwgUEFHRV9TSVpFICogRkRfUEFHRV9OVU0sICZscC0+ZmRfYnVmX2RtYSkpID09IDApCisJCWxwLT5mZF9idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChscC0+cGNpX2RldiwKKwkJCQkJCSAgUEFHRV9TSVpFICogRkRfUEFHRV9OVU0sCisJCQkJCQkgICZscC0+ZmRfYnVmX2RtYSk7CisJCWlmICghbHAtPmZkX2J1ZikKIAkJCXJldHVybiAtRU5PTUVNOwogCQlmb3IgKGkgPSAwOyBpIDwgUlhfQlVGX05VTTsgaSsrKSB7CiAjaWZkZWYgVEMzNTgxNV9VU0VfUEFDS0VEQlVGRkVSCi0JCQlpZiAoKGxwLT5kYXRhX2J1ZltpXSA9IGFsbG9jX3J4YnVmX3BhZ2UobHAtPnBjaV9kZXYsICZscC0+ZGF0YV9idWZfZG1hW2ldKSkgPT0gTlVMTCkgeworCQkJbHAtPmRhdGFfYnVmW2ldID0KKwkJCQlhbGxvY19yeGJ1Zl9wYWdlKGxwLT5wY2lfZGV2LAorCQkJCQkJICZscC0+ZGF0YV9idWZfZG1hW2ldKTsKKwkJCWlmICghbHAtPmRhdGFfYnVmW2ldKSB7CiAJCQkJd2hpbGUgKC0taSA+PSAwKSB7CiAJCQkJCWZyZWVfcnhidWZfcGFnZShscC0+cGNpX2RldiwKIAkJCQkJCQlscC0+ZGF0YV9idWZbaV0sCkBAIC04ODUsMTggKzEwMzYsMTcgQEAKICNlbmRpZgogCQlwcmludGsoIlxuIik7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IEZEX1BBR0VfTlVNOyBpKyspIHsKLQkJCWNsZWFyX3BhZ2UoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpbHAtPmZkX2J1ZiArIGkgKiBQQUdFX1NJWkUpKTsKLQkJfQorCQlmb3IgKGkgPSAwOyBpIDwgRkRfUEFHRV9OVU07IGkrKykKKwkJCWNsZWFyX3BhZ2UoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpbHAtPmZkX2J1ZiArCisJCQkJCSAgICBpICogUEFHRV9TSVpFKSk7CiAJfQogCWZkX2FkZHIgPSAodW5zaWduZWQgbG9uZylscC0+ZmRfYnVmOwogCiAJLyogRnJlZSBEZXNjcmlwdG9ycyAoZm9yIFJlY2VpdmUpICovCiAJbHAtPnJmZF9iYXNlID0gKHN0cnVjdCBSeEZEICopZmRfYWRkcjsKIAlmZF9hZGRyICs9IHNpemVvZihzdHJ1Y3QgUnhGRCkgKiBSWF9GRF9OVU07Ci0JZm9yIChpID0gMDsgaSA8IFJYX0ZEX05VTTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFJYX0ZEX05VTTsgaSsrKQogCQlscC0+cmZkX2Jhc2VbaV0uZmQuRkRDdGwgPSBjcHVfdG9fbGUzMihGRF9Db3duc0ZEKTsKLQl9CiAJbHAtPnJmZF9jdXIgPSBscC0+cmZkX2Jhc2U7CiAJbHAtPnJmZF9saW1pdCA9IChzdHJ1Y3QgUnhGRCAqKWZkX2FkZHIgLSAoUlhfRkRfUkVTRVJWRSArIDEpOwogCkBAIC05NjQsNyArMTExNCw3IEBACiBzdGF0aWMgdm9pZAogdGMzNTgxNV9jbGVhcl9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBUWF9GRF9OVU07IGkrKykgewpAQCAtOTk1LDcgKzExNDUsNyBAQAogc3RhdGljIHZvaWQKIHRjMzU4MTVfZnJlZV9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAogCWlmIChscC0+dGZkX2Jhc2UpIHsKQEAgLTEwNzYsNyArMTIyNiw3IEBACiAJICAgICAgIGxlMzJfdG9fY3B1KGZkLT5mZC5GRFN0YXQpLAogCSAgICAgICBsZTMyX3RvX2NwdShmZC0+ZmQuRkRDdGwpKTsKIAlpZiAobGUzMl90b19jcHUoZmQtPmZkLkZEQ3RsKSAmIEZEX0Nvd25zRkQpCi0JICAgIHJldHVybiAwOworCQlyZXR1cm4gMDsKIAlwcmludGsoIkJEOiAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgYmRfY291bnQ7IGkrKykKIAkJcHJpbnRrKCIgJTA4eCAlMDh4IiwKQEAgLTExMDksNyArMTI1OSw3IEBACiBzdGF0aWMgdm9pZAogcGFuaWNfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGk7CiAKIAlwcmludGsoIlR4RkQgYmFzZSAlcCwgc3RhcnQgJXUsIGVuZCAldVxuIiwKQEAgLTExMjgsNDIgKzEyNzgsMzMgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBwcmludF9ldGgoY2hhciAqYWRkKQorc3RhdGljIHZvaWQgcHJpbnRfZXRoKGNvbnN0IHU4ICphZGQpCiB7Ci0JaW50IGk7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKLQlwcmludGsoInByaW50X2V0aCglcClcbiIsIGFkZCk7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJcHJpbnRrKCIgJTIuMlgiLCAodW5zaWduZWQgY2hhcikgYWRkW2kgKyA2XSk7Ci0JcHJpbnRrKCIgPT4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlwcmludGsoIiAlMi4yWCIsICh1bnNpZ25lZCBjaGFyKSBhZGRbaV0pOwotCXByaW50aygiIDogJTIuMlglMi4yWFxuIiwgKHVuc2lnbmVkIGNoYXIpIGFkZFsxMl0sICh1bnNpZ25lZCBjaGFyKSBhZGRbMTNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicHJpbnRfZXRoKCVwKVxuIiwgYWRkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICVzID0+IiwgcHJpbnRfbWFjKG1hYywgYWRkICsgNikpOworCXByaW50ayhLRVJOX0NPTlQgIiAlcyA6ICUwMnglMDJ4XG4iLAorCQlwcmludF9tYWMobWFjLCBhZGQpLCBhZGRbMTJdLCBhZGRbMTNdKTsKIH0KIAogc3RhdGljIGludCB0YzM1ODE1X3R4X2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlyZXR1cm4gKChscC0+dGZkX3N0YXJ0ICsgMSkgJSBUWF9GRF9OVU0gPT0gbHAtPnRmZF9lbmQpOwogfQogCiBzdGF0aWMgdm9pZCB0YzM1ODE1X3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7Ci0JaW50IHBpZCA9IGxwLT5waHlfYWRkcjsKLQlpbnQgZG9fcGh5X3Jlc2V0ID0gMTsKLQlkZWxfdGltZXIoJmxwLT50aW1lcik7CQkvKiBLaWxsIGlmIHJ1bm5pbmcJKi8KKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKGxwLT5taWlfaWRbMF0gPT0gMHgwMDE2ICYmIChscC0+bWlpX2lkWzFdICYgMHhmYzAwKSA9PSAweGY4MDApIHsKLQkJLyogUmVzZXR0aW5nIFBIWSBjYXVzZSBwcm9ibGVtIG9uIHNvbWUgY2hpcC4uLiAoU0VFUSA4MDIyMSkgKi8KLQkJZG9fcGh5X3Jlc2V0ID0gMDsKLQl9Ci0JaWYgKGRvX3BoeV9yZXNldCkgeworCWlmIChscC0+cGh5X2RldikgewogCQlpbnQgdGltZW91dDsKLQkJdGNfbWRpb193cml0ZShkZXYsIHBpZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCisJCXBoeV93cml0ZShscC0+cGh5X2RldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwogCQl0aW1lb3V0ID0gMTAwOwogCQl3aGlsZSAoLS10aW1lb3V0KSB7Ci0JCQlpZiAoISh0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9CTUNSKSAmIEJNQ1JfUkVTRVQpKQorCQkJaWYgKCEocGh5X3JlYWQobHAtPnBoeV9kZXYsIE1JSV9CTUNSKSAmIEJNQ1JfUkVTRVQpKQogCQkJCWJyZWFrOwogCQkJdWRlbGF5KDEpOwogCQl9CkBAIC0xMTcxLDE2ICsxMzEyLDQwIEBACiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCTUNSIHJlc2V0IGZhaWxlZC5cbiIsIGRldi0+bmFtZSk7CiAJfQogCisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCXRjMzU4MTVfY2hpcF9yZXNldChkZXYpOwogCXRjMzU4MTVfY2xlYXJfcXVldWVzKGRldik7CiAJdGMzNTgxNV9jaGlwX2luaXQoZGV2KTsKIAkvKiBSZWNvbmZpZ3VyZSBDQU0gYWdhaW4gc2luY2UgdGMzNTgxNV9jaGlwX2luaXQoKSBpbml0aWFsaXplIGl0LiAqLwogCXRjMzU4MTVfc2V0X211bHRpY2FzdF9saXN0KGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CisKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHRjMzU4MTVfcmVzdGFydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHRjMzU4MTVfbG9jYWwsIHJlc3RhcnRfd29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxwLT5kZXY7CisKKwl0YzM1ODE1X3Jlc3RhcnQoZGV2KTsKK30KKworc3RhdGljIHZvaWQgdGMzNTgxNV9zY2hlZHVsZV9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KKwkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJdGNfd3JpdGVsKDAsICZ0ci0+SW50X0VuKTsKKwl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5ETUFfQ3RsKSB8IERNQV9JbnRNYXNrLCAmdHItPkRNQV9DdGwpOworCXNjaGVkdWxlX3dvcmsoJmxwLT5yZXN0YXJ0X3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCB0YzM1ODE1X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CiAJc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9CiAJCShzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKIApAQCAtMTE4OCwyOCArMTM1MywxMiBAQAogCSAgICAgICBkZXYtPm5hbWUsIHRjX3JlYWRsKCZ0ci0+VHhfU3RhdCkpOwogCiAJLyogVHJ5IHRvIHJlc3RhcnQgdGhlIGFkYXB0b3IuICovCi0Jc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCXRjMzU4MTVfcmVzdGFydChkZXYpOwotCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwotCi0JbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCi0JLyogSWYgd2UgaGF2ZSBzcGFjZSBhdmFpbGFibGUgdG8gYWNjZXB0IG5ldyB0cmFuc21pdAotCSAqIHJlcXVlc3RzLCB3YWtlIHVwIHRoZSBxdWV1ZWluZyBsYXllci4gIFRoaXMgd291bGQKLQkgKiBiZSB0aGUgY2FzZSBpZiB0aGUgY2hpcHNldF9pbml0KCkgY2FsbCBhYm92ZSBqdXN0Ci0JICogZmx1c2hlcyBvdXQgdGhlIHR4IHF1ZXVlIGFuZCBlbXB0aWVzIGl0LgotCSAqCi0JICogSWYgaW5zdGVhZCwgdGhlIHR4IHF1ZXVlIGlzIHJldGFpbmVkIHRoZW4gdGhlCi0JICogbmV0aWZfd2FrZV9xdWV1ZSgpIGNhbGwgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUKLQkgKiBUWCBjb21wbGV0aW9uIGludGVycnVwdCBoYW5kbGVyIG9mIHRoZSBkcml2ZXIgaW5zdGVhZAotCSAqIG9mIGhlcmUuCi0JICovCi0JaWYgKCF0YzM1ODE1X3R4X2Z1bGwoZGV2KSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCXRjMzU4MTVfc2NoZWR1bGVfcmVzdGFydChkZXYpOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CiAKIC8qCi0gKiBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLiBUaGlzIGlzIGNhbGxlZCAoaW4gdGhlIGN1cnJlbnQga2VybmVsKQorICogT3Blbi9pbml0aWFsaXplIHRoZSBjb250cm9sbGVyLiBUaGlzIGlzIGNhbGxlZCAoaW4gdGhlIGN1cnJlbnQga2VybmVsKQogICogc29tZXRpbWUgYWZ0ZXIgYm9vdGluZyB3aGVuIHRoZSAnaWZjb25maWcnIHByb2dyYW0gaXMgcnVuLgogICoKICAqIFRoaXMgcm91dGluZSBzaG91bGQgc2V0IGV2ZXJ5dGhpbmcgdXAgYW5ldyBhdCBlYWNoIG9wZW4sIGV2ZW4KQEAgLTEyMTksMTcgKzEzNjgsMTYgQEAKIHN0YXRpYyBpbnQKIHRjMzU4MTVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyoKIAkgKiBUaGlzIGlzIHVzZWQgaWYgdGhlIGludGVycnVwdCBsaW5lIGNhbiB0dXJuZWQgb2ZmIChzaGFyZWQpLgogCSAqIFNlZSAzYzUwMy5jIGZvciBhbiBleGFtcGxlIG9mIHNlbGVjdGluZyB0aGUgSVJRIGF0IGNvbmZpZy10aW1lLgogCSAqLwotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJnRjMzU4MTVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmdGMzNTgxNV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJZGV2LT5uYW1lLCBkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKLQl9CiAKLQlkZWxfdGltZXIoJmxwLT50aW1lcik7CQkvKiBLaWxsIGlmIHJ1bm5pbmcJKi8KIAl0YzM1ODE1X2NoaXBfcmVzZXQoZGV2KTsKIAogCWlmICh0YzM1ODE1X2luaXRfcXVldWVzKGRldikgIT0gMCkgewpAQCAtMTI0Niw2ICsxMzk0LDkgQEAKIAl0YzM1ODE1X2NoaXBfaW5pdChkZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCisJLyogc2NoZWR1bGUgYSBsaW5rIHN0YXRlIGNoZWNrICovCisJcGh5X3N0YXJ0KGxwLT5waHlfZGV2KTsKKwogCS8qIFdlIGFyZSBub3cgcmVhZHkgdG8gYWNjZXB0IHRyYW5zbWl0IHJlcXVldXN0cyBmcm9tCiAJICogdGhlIHF1ZXVlaW5nIGxheWVyIG9mIHRoZSBuZXR3b3JraW5nLgogCSAqLwpAQCAtMTI2MSw3ICsxNDEyLDcgQEAKICAqLwogc3RhdGljIGludCB0YzM1ODE1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IFR4RkQgKnR4ZmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTM2Niw3ICsxNTE3LDcgQEAKIAkJcGFuaWMoIiVzOiBUb28gbWFueSBmYXRhbCBlcnJvcnMuIiwgZGV2LT5uYW1lKTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVzZXR0aW5nIC4uLlxuIiwgZGV2LT5uYW1lKTsKIAkvKiBUcnkgdG8gcmVzdGFydCB0aGUgYWRhcHRvci4gKi8KLQl0YzM1ODE1X3Jlc3RhcnQoZGV2KTsKKwl0YzM1ODE1X3NjaGVkdWxlX3Jlc3RhcnQoZGV2KTsKIH0KIAogI2lmZGVmIFRDMzU4MTVfTkFQSQpAQCAtMTM3NSw3ICsxNTI2LDcgQEAKIHN0YXRpYyBpbnQgdGMzNTgxNV9kb19pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKICNlbmRpZgogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQogCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAJaW50IHJldCA9IC0xOwpAQCAtMTM5Miw3ICsxNTQzLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBGcmVlIERlc2NyaXB0b3IgQXJlYSBFeGhhdXN0ZWQgKCUjeCkuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwotCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0ID0gMDsKIAl9CiAJaWYgKHN0YXR1cyAmIEludF9JbnRCTEV4KSB7CkBAIC0xNDAxLDE0ICsxNTUyLDE0IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlczogQnVmZmVyIExpc3QgRXhoYXVzdGVkICglI3gpLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldCA9IDA7CiAJfQogCWlmIChzdGF0dXMgJiBJbnRfSW50RXhCRCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IEV4Y2Vzc2l2ZSBCdWZmZXIgRGVzY3JpcHRpb3JzICglI3gpLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKLQkJbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldCA9IDA7CiAJfQogCkBAIC0xNDkyLDcgKzE2NDMsNyBAQAogdGMzNTgxNV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogI2VuZGlmCiB7Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGZkY3RsOwogCWludCBpOwogCWludCBidWZfZnJlZV9jb3VudCA9IDA7CkBAIC0xNTMyLDcgKzE2ODMsNyBAQAogCQkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7ICAgLyogMTYgYml0IGFsaWdubWVudCAqLwpAQCAtMTYwMiwxMCArMTc1MywxMCBAQAogCQkJbmV0aWZfcngoc2tiKTsKICNlbmRpZgogCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCQl9IGVsc2UgewotCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUnggZXJyb3IgKHN0YXR1cyAleClcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMgJiBSeF9TdGF0X01hc2spOwogCQkJLyogV09SS0FST1VORDogTG9uZ0VyciBhbmQgQ1JDRXJyIG1lYW5zIE92ZXJmbG93LiAqLwpAQCAtMTYxMywxMCArMTc2NCwxNCBAQAogCQkJCXN0YXR1cyAmPSB+KFJ4X0xvbmdFcnJ8UnhfQ1JDRXJyKTsKIAkJCQlzdGF0dXMgfD0gUnhfT3ZlcjsKIAkJCX0KLQkJCWlmIChzdGF0dXMgJiBSeF9Mb25nRXJyKSBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIFJ4X092ZXIpIGxwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIFJ4X0NSQ0VycikgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJCWlmIChzdGF0dXMgJiBSeF9BbGlnbikgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIFJ4X0xvbmdFcnIpCisJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQlpZiAoc3RhdHVzICYgUnhfT3ZlcikKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQlpZiAoc3RhdHVzICYgUnhfQ1JDRXJyKQorCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIFJ4X0FsaWduKQorCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCX0KIAogCQlpZiAoYmRfY291bnQgPiAwKSB7CkBAIC0xNzcyLDQwICsxOTI3LDM5IEBACiBzdGF0aWMgdm9pZAogdGMzNTgxNV9jaGVja190eF9zdGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGF0dXMpCiB7Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJY29uc3QgY2hhciAqbXNnID0gTlVMTDsKIAogCS8qIGNvdW50IGNvbGxpc2lvbnMgKi8KIAlpZiAoc3RhdHVzICYgVHhfRXhDb2xsKQotCQlscC0+c3RhdHMuY29sbGlzaW9ucyArPSAxNjsKKwkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IDE2OwogCWlmIChzdGF0dXMgJiBUeF9UeENvbGxfTUFTSykKLQkJbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gc3RhdHVzICYgVHhfVHhDb2xsX01BU0s7CisJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBzdGF0dXMgJiBUeF9UeENvbGxfTUFTSzsKIAogI2lmbmRlZiBOT19DSEVDS19DQVJSSUVSCiAJLyogVFg0OTM5IGRvZXMgbm90IGhhdmUgTkNhcnIgKi8KLQlpZiAobHAtPmJvYXJkdHlwZSA9PSBUQzM1ODE1X1RYNDkzOSkKKwlpZiAobHAtPmNoaXB0eXBlID09IFRDMzU4MTVfVFg0OTM5KQogCQlzdGF0dXMgJj0gflR4X05DYXJyOwogI2lmZGVmIFdPUktBUk9VTkRfTE9TVENBUgogCS8qIFdPUktBUk9VTkQ6IGlnbm9yZSBMb3N0Q3JTIGluIGZ1bGwgZHVwbGV4IG9wZXJhdGlvbiAqLwotCWlmICgobHAtPnRpbWVyX3N0YXRlICE9IGFzbGVlcCAmJiBscC0+dGltZXJfc3RhdGUgIT0gbGNoZWNrKQotCSAgICB8fCBscC0+ZnVsbGR1cGxleCkKKwlpZiAoIWxwLT5saW5rIHx8IGxwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCXN0YXR1cyAmPSB+VHhfTkNhcnI7CiAjZW5kaWYKICNlbmRpZgogCiAJaWYgKCEoc3RhdHVzICYgVFhfU1RBX0VSUikpIHsKIAkJLyogbm8gZXJyb3IuICovCi0JCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQlyZXR1cm47CiAJfQogCi0JbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJaWYgKHN0YXR1cyAmIFR4X0V4Q29sbCkgewotCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQltc2cgPSAiRXhjZXNzaXZlIENvbGxpc2lvbi4iOwogCX0KIAlpZiAoc3RhdHVzICYgVHhfVW5kZXIpIHsKLQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJbXNnID0gIlR4IEZJRk8gVW5kZXJydW4uIjsKIAkJaWYgKGxwLT5sc3RhdHMudHhfdW5kZXJydW4gPCBUWF9USFJFU0hPTERfS0VFUF9MSU1JVCkgewogCQkJbHAtPmxzdGF0cy50eF91bmRlcnJ1bisrOwpAQCAtMTgxOCwyNSArMTk3MiwyNSBAQAogCQl9CiAJfQogCWlmIChzdGF0dXMgJiBUeF9EZWZlcikgewotCQlscC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQltc2cgPSAiRXhjZXNzaXZlIERlZmVycmFsLiI7CiAJfQogI2lmbmRlZiBOT19DSEVDS19DQVJSSUVSCiAJaWYgKHN0YXR1cyAmIFR4X05DYXJyKSB7Ci0JCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCW1zZyA9ICJMb3N0IENhcnJpZXIgU2Vuc2UuIjsKIAl9CiAjZW5kaWYKIAlpZiAoc3RhdHVzICYgVHhfTGF0ZUNvbGwpIHsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJbXNnID0gIkxhdGUgQ29sbGlzaW9uLiI7CiAJfQogCWlmIChzdGF0dXMgJiBUeF9UeFBhcikgewotCQlscC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQltc2cgPSAiVHJhbnNtaXQgUGFyaXR5IEVycm9yLiI7CiAJfQogCWlmIChzdGF0dXMgJiBUeF9TUUVycikgewotCQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKIAkJbXNnID0gIlNpZ25hbCBRdWFsaXR5IEVycm9yLiI7CiAJfQogCWlmIChtc2cgJiYgbmV0aWZfbXNnX3R4X2VycihscCkpCkBAIC0xODQ5LDcgKzIwMDMsNyBAQAogc3RhdGljIHZvaWQKIHRjMzU4MTVfdHhkb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IFR4RkQgKnR4ZmQ7CiAJdW5zaWduZWQgaW50IGZkY3RsOwogCkBAIC0xODc4LDcgKzIwMzIsNyBAQAogCQlCVUdfT04obHAtPnR4X3NrYnNbbHAtPnRmZF9lbmRdLnNrYiAhPSBza2IpOwogI2VuZGlmCiAJCWlmIChza2IpIHsKLQkJCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBscC0+dHhfc2tic1tscC0+dGZkX2VuZF0uc2tiX2RtYSwgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJbHAtPnR4X3NrYnNbbHAtPnRmZF9lbmRdLnNrYiA9IE5VTEw7CiAJCQlscC0+dHhfc2tic1tscC0+dGZkX2VuZF0uc2tiX2RtYSA9IDA7CkBAIC0xOTA0LDcgKzIwNTgsNyBAQAogCQkJCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQogCQkJCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAJCQkJaW50IGhlYWQgPSAobHAtPnRmZF9zdGFydCArIFRYX0ZEX05VTSAtIDEpICUgVFhfRkRfTlVNOwotCQkJCXN0cnVjdCBUeEZEKiB0eGhlYWQgPSAmbHAtPnRmZF9iYXNlW2hlYWRdOworCQkJCXN0cnVjdCBUeEZEICp0eGhlYWQgPSAmbHAtPnRmZF9iYXNlW2hlYWRdOwogCQkJCWludCBxbGVuID0gKGxwLT50ZmRfc3RhcnQgKyBUWF9GRF9OVU0KIAkJCQkJICAgIC0gbHAtPnRmZF9lbmQpICUgVFhfRkRfTlVNOwogCkBAIC0xOTM5LDcgKzIwOTMsNyBAQAogCSAqIGNvbmRpdGlvbiwgYW5kIHNwYWNlIGhhcyBub3cgYmVlbiBtYWRlIGF2YWlsYWJsZSwKIAkgKiB3YWtlIHVwIHRoZSBxdWV1ZS4KIAkgKi8KLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmICEgdGMzNTgxNV90eF9mdWxsKGRldikpCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJiAhdGMzNTgxNV90eF9mdWxsKGRldikpCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIApAQCAtMTk0NywxNiArMjEwMSwxNyBAQAogc3RhdGljIGludAogdGMzNTgxNV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogI2lmZGVmIFRDMzU4MTVfTkFQSQogCW5hcGlfZGlzYWJsZSgmbHAtPm5hcGkpOwogI2VuZGlmCisJaWYgKGxwLT5waHlfZGV2KQorCQlwaHlfc3RvcChscC0+cGh5X2Rldik7CisJY2FuY2VsX3dvcmtfc3luYygmbHAtPnJlc3RhcnRfd29yayk7CiAKIAkvKiBGbHVzaCB0aGUgVHggYW5kIGRpc2FibGUgUnggaGVyZS4gKi8KLQotCWRlbF90aW1lcigmbHAtPnRpbWVyKTsJCS8qIEtpbGwgaWYgcnVubmluZwkqLwogCXRjMzU4MTVfY2hpcF9yZXNldChkZXYpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCkBAIC0xOTcyLDM0ICsyMTI3LDMwIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdGMzNTgxNV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CiAJc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9CiAJCShzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJLyogVXBkYXRlIHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIGRldmljZSByZWdpc3RlcnMuICovCi0JCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gdGNfcmVhZGwoJnRyLT5NaXNzX0NudCk7Ci0JfQorCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSB0Y19yZWFkbCgmdHItPk1pc3NfQ250KTsKIAotCXJldHVybiAmbHAtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogc3RhdGljIHZvaWQgdGMzNTgxNV9zZXRfY2FtX2VudHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCwgdW5zaWduZWQgY2hhciAqYWRkcikKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KIAkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOwogCWludCBjYW1faW5kZXggPSBpbmRleCAqIDY7CiAJdTMyIGNhbV9kYXRhOwogCXUzMiBzYXZlZF9hZGRyOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCiAJc2F2ZWRfYWRkciA9IHRjX3JlYWRsKCZ0ci0+Q0FNX0Fkcik7CiAKLQlpZiAobmV0aWZfbXNnX2h3KGxwKSkgewotCQlpbnQgaTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDQU0gJWQ6IiwgZGV2LT5uYW1lLCBpbmRleCk7Ci0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQlwcmludGsoIiAlMDJ4IiwgYWRkcltpXSk7Ci0JCXByaW50aygiXG4iKTsKLQl9CisJaWYgKG5ldGlmX21zZ19odyhscCkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ0FNICVkOiAlc1xuIiwKKwkJCWRldi0+bmFtZSwgaW5kZXgsIHByaW50X21hYyhtYWMsIGFkZHIpKTsKIAlpZiAoaW5kZXggJiAxKSB7CiAJCS8qIHJlYWQgbW9kaWZ5IHdyaXRlICovCiAJCXRjX3dyaXRlbChjYW1faW5kZXggLSAyLCAmdHItPkNBTV9BZHIpOwpAQCAtMjAzOSwyOCArMjE5MCwyNCBAQAogCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQogCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAKLQlpZiAoZGV2LT5mbGFncyZJRkZfUFJPTUlTQykKLQl7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogI2lmZGVmIFdPUktBUk9VTkRfMTAwSEFMRl9QUk9NSVNDCiAJCS8qIFdpdGggc29tZSAoYWxsPykgMTAwTUhhbGYgSFVCLCBjb250cm9sbGVyIHdpbGwgaGFuZwogCQkgKiBpZiB3ZSBlbmFibGVkIHByb21pc2N1b3VzIG1vZGUgYmVmb3JlIGxpbmt1cC4uLiAqLwotCQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7Ci0JCWludCBwaWQgPSBscC0+cGh5X2FkZHI7Ci0JCWlmICghKHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNU1IpICYgQk1TUl9MU1RBVFVTKSkKKwkJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCQlpZiAoIWxwLT5saW5rKQogCQkJcmV0dXJuOwogI2VuZGlmCiAJCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCXRjX3dyaXRlbChDQU1fQ29tcEVuIHwgQ0FNX0Jyb2FkQWNjIHwgQ0FNX0dyb3VwQWNjIHwgQ0FNX1N0YXRpb25BY2MsICZ0ci0+Q0FNX0N0bCk7Ci0JfQotCWVsc2UgaWYoKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKSB8fCBkZXYtPm1jX2NvdW50ID4gQ0FNX0VOVFJZX01BWCAtIDMpCi0JeworCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CisJCSAgZGV2LT5tY19jb3VudCA+IENBTV9FTlRSWV9NQVggLSAzKSB7CiAJCS8qIENBTSAwLCAxLCAyMCBhcmUgcmVzZXJ2ZWQuICovCiAJCS8qIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgdXNlIG5vcm1hbCBtb2RlLiAqLwogCQl0Y193cml0ZWwoQ0FNX0NvbXBFbiB8IENBTV9Ccm9hZEFjYyB8IENBTV9Hcm91cEFjYywgJnRyLT5DQU1fQ3RsKTsKLQl9Ci0JZWxzZSBpZihkZXYtPm1jX2NvdW50KQotCXsKLQkJc3RydWN0IGRldl9tY19saXN0KiBjdXJfYWRkciA9IGRldi0+bWNfbGlzdDsKKwl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQpIHsKKwkJc3RydWN0IGRldl9tY19saXN0ICpjdXJfYWRkciA9IGRldi0+bWNfbGlzdDsKIAkJaW50IGk7CiAJCWludCBlbmFfYml0cyA9IENBTV9FbmFfQml0KENBTV9FTlRSWV9TT1VSQ0UpOwogCkBAIC0yMDc1LDggKzIyMjIsNyBAQAogCQl9CiAJCXRjX3dyaXRlbChlbmFfYml0cywgJnRyLT5DQU1fRW5hKTsKIAkJdGNfd3JpdGVsKENBTV9Db21wRW4gfCBDQU1fQnJvYWRBY2MsICZ0ci0+Q0FNX0N0bCk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCXRjX3dyaXRlbChDQU1fRW5hX0JpdChDQU1fRU5UUllfU09VUkNFKSwgJnRyLT5DQU1fRW5hKTsKIAkJdGNfd3JpdGVsKENBTV9Db21wRW4gfCBDQU1fQnJvYWRBY2MsICZ0ci0+Q0FNX0N0bCk7CiAJfQpAQCAtMjA4NCw3ICsyMjMwLDcgQEAKIAogc3RhdGljIHZvaWQgdGMzNTgxNV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cmNweShpbmZvLT5kcml2ZXIsIE1PRE5BTUUpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7CiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShscC0+cGNpX2RldikpOwpAQCAtMjA5Miw3OCArMjIzOCwzNyBAQAogCiBzdGF0aWMgaW50IHRjMzU4MTVfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKLQlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7Ci0JbWlpX2V0aHRvb2xfZ3NldCgmbHAtPm1paSwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFscC0+cGh5X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQobHAtPnBoeV9kZXYsIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgdGMzNTgxNV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OwotCWludCByYzsKLSNpZiAxCS8qIHVzZSBvdXIgbmVnb3RpYXRpb24gbWV0aG9kLi4uICovCi0JLyogVmVyaWZ5IHRoZSBzZXR0aW5ncyB3ZSBjYXJlIGFib3V0LiAqLwotCWlmIChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUgJiYKLQkgICAgY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgJiYKLQkgICAgKChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgotCSAgICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApIHx8Ci0JICAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYKLQkgICAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JLyogT2ssIGRvIGl0IHRvIGl0LiAqLwotCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKLQlkZWxfdGltZXIoJmxwLT50aW1lcik7Ci0JdGMzNTgxNV9zdGFydF9hdXRvX25lZ290aWF0aW9uKGRldiwgY21kKTsKLQlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKLQlyYyA9IDA7Ci0jZWxzZQotCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKLQlyYyA9IG1paV9ldGh0b29sX3NzZXQoJmxwLT5taWksIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgdGMzNTgxNV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OwotCWludCByYzsKLQlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7Ci0JcmMgPSBtaWlfbndheV9yZXN0YXJ0KCZscC0+bWlpKTsKLQlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB1MzIgdGMzNTgxNV9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKLQlpbnQgcmM7Ci0Jc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCXJjID0gbWlpX2xpbmtfb2soJmxwLT5taWkpOwotCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwotCXJldHVybiByYzsKKwlpZiAoIWxwLT5waHlfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChscC0+cGh5X2RldiwgY21kKTsKIH0KIAogc3RhdGljIHUzMiB0YzM1ODE1X2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiBscC0+bXNnX2VuYWJsZTsKIH0KIAogc3RhdGljIHZvaWQgdGMzNTgxNV9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdHVtKQogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxwLT5tc2dfZW5hYmxlID0gZGF0dW07CiB9CiAKIHN0YXRpYyBpbnQgdGMzNTgxNV9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXN3aXRjaCAoc3NldCkgewogCWNhc2UgRVRIX1NTX1NUQVRTOgpAQCAtMjE3NSw3ICsyMjgwLDcgQEAKIAogc3RhdGljIHZvaWQgdGMzNTgxNV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKIHsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkYXRhWzBdID0gbHAtPmxzdGF0cy5tYXhfdHhfcWxlbjsKIAlkYXRhWzFdID0gbHAtPmxzdGF0cy50eF9pbnRzOwogCWRhdGFbMl0gPSBscC0+bHN0YXRzLnJ4X2ludHM7CkBAIC0yMjAwLDggKzIzMDUsNyBAQAogCS5nZXRfZHJ2aW5mbwkJPSB0YzM1ODE1X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gdGMzNTgxNV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSB0YzM1ODE1X3NldF9zZXR0aW5ncywKLQkubndheV9yZXNldAkJPSB0YzM1ODE1X253YXlfcmVzZXQsCi0JLmdldF9saW5rCQk9IHRjMzU4MTVfZ2V0X2xpbmssCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB0YzM1ODE1X2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IHRjMzU4MTVfc2V0X21zZ2xldmVsLAogCS5nZXRfc3RyaW5ncwkJPSB0YzM1ODE1X2dldF9zdHJpbmdzLApAQCAtMjIxMSw2MTEgKzIzMTUsMTMgQEAKIAogc3RhdGljIGludCB0YzM1ODE1X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OwotCWludCByYzsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCXJjID0gZ2VuZXJpY19taWlfaW9jdGwoJmxwLT5taWksIGlmX21paShycSksIGNtZCwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgdGNfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKLXsKLQlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KLQkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOwotCXUzMiBkYXRhOwotCXRjX3dyaXRlbChNRF9DQV9CdXN5IHwgKHBoeV9pZCA8PCA1KSB8IGxvY2F0aW9uLCAmdHItPk1EX0NBKTsKLQl3aGlsZSAodGNfcmVhZGwoJnRyLT5NRF9DQSkgJiBNRF9DQV9CdXN5KQotCQk7Ci0JZGF0YSA9IHRjX3JlYWRsKCZ0ci0+TURfRGF0YSk7Ci0JcmV0dXJuIGRhdGEgJiAweGZmZmY7Ci19Ci0KLXN0YXRpYyB2b2lkIHRjX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAotCQkJICBpbnQgdmFsKQotewotCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQotCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7Ci0JdGNfd3JpdGVsKHZhbCwgJnRyLT5NRF9EYXRhKTsKLQl0Y193cml0ZWwoTURfQ0FfQnVzeSB8IE1EX0NBX1dyIHwgKHBoeV9pZCA8PCA1KSB8IGxvY2F0aW9uLCAmdHItPk1EX0NBKTsKLQl3aGlsZSAodGNfcmVhZGwoJnRyLT5NRF9DQSkgJiBNRF9DQV9CdXN5KQotCQk7Ci19Ci0KLS8qIEF1dG8gbmVnb3RpYXRpb24uICBUaGUgc2NoZW1lIGlzIHZlcnkgc2ltcGxlLiAgV2UgaGF2ZSBhIHRpbWVyIHJvdXRpbmUKLSAqIHRoYXQga2VlcHMgd2F0Y2hpbmcgdGhlIGF1dG8gbmVnb3RpYXRpb24gcHJvY2VzcyBhcyBpdCBwcm9ncmVzc2VzLgotICogVGhlIERQODM4NDAgaXMgZmlyc3QgdG9sZCB0byBzdGFydCBkb2luZyBpdCdzIHRoaW5nLCB3ZSBzZXQgdXAgdGhlIHRpbWUKLSAqIGFuZCBwbGFjZSB0aGUgdGltZXIgc3RhdGUgbWFjaGluZSBpbiBpdCdzIGluaXRpYWwgc3RhdGUuCi0gKgotICogSGVyZSB0aGUgdGltZXIgcGVla3MgYXQgdGhlIERQODM4NDAgc3RhdHVzIHJlZ2lzdGVycyBhdCBlYWNoIGNsaWNrIHRvIHNlZQotICogaWYgdGhlIGF1dG8gbmVnb3RpYXRpb24gaGFzIGNvbXBsZXRlZCwgd2UgYXNzdW1lIGhlcmUgdGhhdCB0aGUgRFA4Mzg0MCBQSFkKLSAqIHdpbGwgdGltZSBvdXQgYXQgc29tZSBwb2ludCBhbmQganVzdCB0ZWxsIHVzIHdoYXQgKGRpZG4ndCkgaGFwcGVuLiAgRm9yCi0gKiBjb21wbGV0ZSBjb3ZlcmFnZSB3ZSBvbmx5IGFsbG93IHNvIG1hbnkgb2YgdGhlIHRpY2tzIGF0IHRoaXMgbGV2ZWwgdG8gcnVuLAotICogd2hlbiB0aGlzIGhhcyBleHBpcmVkIHdlIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGFuZCB0cnkgYW5vdGhlciBzdHJhdGVneS4KLSAqIFRoaXMgIm90aGVyIiBzdHJhdGVneSBpcyB0byBmb3JjZSB0aGUgaW50ZXJmYWNlIGludG8gdmFyaW91cyBzcGVlZC9kdXBsZXgKLSAqIGNvbmZpZ3VyYXRpb25zIGFuZCB3ZSBzdG9wIHdoZW4gd2Ugc2VlIGEgbGluay11cCBjb25kaXRpb24gYmVmb3JlIHRoZQotICogbWF4aW11bSBudW1iZXIgb2YgInBlZWsiIHRpY2tzIGhhdmUgb2NjdXJyZWQuCi0gKgotICogT25jZSBhIHZhbGlkIGxpbmsgc3RhdHVzIGhhcyBiZWVuIGRldGVjdGVkIHdlIGNvbmZpZ3VyZSB0aGUgQmlnTUFDIGFuZAotICogdGhlIHJlc3Qgb2YgdGhlIEhhcHB5IE1lYWwgdG8gc3BlYWsgdGhlIG1vc3QgZWZmaWNpZW50IHByb3RvY29sIHdlIGNvdWxkCi0gKiBnZXQgYSBjbGVhbiBsaW5rIGZvci4gIFRoZSBwcmlvcml0eSBmb3IgbGluayBjb25maWd1cmF0aW9ucywgaGlnaGVzdCBmaXJzdAotICogaXM6Ci0gKiAgICAgICAgICAgICAgICAgMTAwIEJhc2UtVCBGdWxsIER1cGxleAotICogICAgICAgICAgICAgICAgIDEwMCBCYXNlLVQgSGFsZiBEdXBsZXgKLSAqICAgICAgICAgICAgICAgICAxMCBCYXNlLVQgRnVsbCBEdXBsZXgKLSAqICAgICAgICAgICAgICAgICAxMCBCYXNlLVQgSGFsZiBEdXBsZXgKLSAqCi0gKiBXZSBzdGFydCBhIG5ldyB0aW1lciBub3csIGFmdGVyIGEgc3VjY2Vzc2Z1bCBhdXRvIG5lZ290aWF0aW9uIHN0YXR1cyBoYXMKLSAqIGJlZW4gZGV0ZWN0ZWQuICBUaGlzIHRpbWVyIGp1c3Qgd2FpdHMgZm9yIHRoZSBsaW5rLXVwIGJpdCB0byBnZXQgc2V0IGluCi0gKiB0aGUgQk1DUiBvZiB0aGUgRFA4Mzg0MC4gIFdoZW4gdGhpcyBvY2N1cnMgd2UgcHJpbnQgYSBrZXJuZWwgbG9nIG1lc3NhZ2UKLSAqIGRlc2NyaWJpbmcgdGhlIGxpbmsgdHlwZSBpbiB1c2UgYW5kIHRoZSBmYWN0IHRoYXQgaXQgaXMgdXAuCi0gKgotICogSWYgYSBmYXRhbCBlcnJvciBvZiBzb21lIHNvcnQgaXMgc2lnbmFsbGVkIGFuZCBkZXRlY3RlZCBpbiB0aGUgaW50ZXJydXB0Ci0gKiBzZXJ2aWNlIHJvdXRpbmUsIGFuZCB0aGUgY2hpcCBpcyByZXNldCwgb3IgdGhlIGxpbmsgaXMgaWZjb25maWcnZCBkb3duCi0gKiBhbmQgdGhlbiBiYWNrIHVwLCB0aGlzIGVudGlyZSBwcm9jZXNzIHJlcGVhdHMgaXRzZWxmIGFsbCBvdmVyIGFnYWluLgotICovCi0vKiBOb3RlOiBBYm92ZSBjb21tZW50cyBhcmUgY29tZSBmcm9tIHN1bmhtZSBkcml2ZXIuICovCi0KLXN0YXRpYyBpbnQgdGMzNTgxNV90cnlfbmV4dF9wZXJtdXRhdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKLQlpbnQgcGlkID0gbHAtPnBoeV9hZGRyOwotCXVuc2lnbmVkIHNob3J0IGJtY3I7Ci0KLQlibWNyID0gdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfQk1DUik7Ci0KLQkvKiBEb3duZ3JhZGUgZnJvbSBmdWxsIHRvIGhhbGYgZHVwbGV4LiAgT25seSBwb3NzaWJsZSB2aWEgZXRodG9vbC4gICovCi0JaWYgKGJtY3IgJiBCTUNSX0ZVTExEUExYKSB7Ci0JCWJtY3IgJj0gfkJNQ1JfRlVMTERQTFg7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHJ5IG5leHQgcGVybXV0YXRpb24gKEJNQ1IgJXgpXG4iLCBkZXYtPm5hbWUsIGJtY3IpOwotCQl0Y19tZGlvX3dyaXRlKGRldiwgcGlkLCBNSUlfQk1DUiwgYm1jcik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIERvd25ncmFkZSBmcm9tIDEwMCB0byAxMC4gKi8KLQlpZiAoYm1jciAmIEJNQ1JfU1BFRUQxMDApIHsKLQkJYm1jciAmPSB+Qk1DUl9TUEVFRDEwMDsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0cnkgbmV4dCBwZXJtdXRhdGlvbiAoQk1DUiAleClcbiIsIGRldi0+bmFtZSwgYm1jcik7Ci0JCXRjX21kaW9fd3JpdGUoZGV2LCBwaWQsIE1JSV9CTUNSLCBibWNyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogV2UndmUgdHJpZWQgZXZlcnl0aGluZy4gKi8KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi10YzM1ODE1X2Rpc3BsYXlfbGlua19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OwotCWludCBwaWQgPSBscC0+cGh5X2FkZHI7Ci0JdW5zaWduZWQgc2hvcnQgbHBhLCBibWNyOwotCWNoYXIgKnNwZWVkID0gIiIsICpkdXBsZXggPSAiIjsKLQotCWxwYSA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0xQQSk7Ci0JYm1jciA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNQ1IpOwotCWlmIChvcHRpb25zLnNwZWVkID8gKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA6IChscGEgJiAoTFBBXzEwMEhBTEYgfCBMUEFfMTAwRlVMTCkpKQotCQlzcGVlZCA9ICIxMDBNYi9zIjsKLQllbHNlCi0JCXNwZWVkID0gIjEwTWIvcyI7Ci0JaWYgKG9wdGlvbnMuZHVwbGV4ID8gKGJtY3IgJiBCTUNSX0ZVTExEUExYKSA6IChscGEgJiAoTFBBXzEwMEZVTEwgfCBMUEFfMTBGVUxMKSkpCi0JCWR1cGxleCA9ICJGdWxsIER1cGxleCI7Ci0JZWxzZQotCQlkdXBsZXggPSAiSGFsZiBEdXBsZXgiOwotCi0JaWYgKG5ldGlmX21zZ19saW5rKGxwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgaXMgdXAgYXQgJXMsICVzLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc3BlZWQsIGR1cGxleCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNSUkgQk1DUiAlMDR4IEJNU1IgJTA0eCBMUEEgJTA0eFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLAotCSAgICAgICBibWNyLCB0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9CTVNSKSwgbHBhKTsKLX0KLQotc3RhdGljIHZvaWQgdGMzNTgxNV9kaXNwbGF5X2ZvcmNlZF9saW5rX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7Ci0JaW50IHBpZCA9IGxwLT5waHlfYWRkcjsKLQl1bnNpZ25lZCBzaG9ydCBibWNyOwotCWNoYXIgKnNwZWVkID0gIiIsICpkdXBsZXggPSAiIjsKLQotCWJtY3IgPSB0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9CTUNSKTsKLQlpZiAoYm1jciAmIEJNQ1JfU1BFRUQxMDApCi0JCXNwZWVkID0gIjEwME1iL3MiOwotCWVsc2UKLQkJc3BlZWQgPSAiMTBNYi9zIjsKLQlpZiAoYm1jciAmIEJNQ1JfRlVMTERQTFgpCi0JCWR1cGxleCA9ICJGdWxsIER1cGxleC5cbiI7Ci0JZWxzZQotCQlkdXBsZXggPSAiSGFsZiBEdXBsZXguXG4iOwotCi0JaWYgKG5ldGlmX21zZ19saW5rKGxwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgaGFzIGJlZW4gZm9yY2VkIHVwIGF0ICVzLCAlcyIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHNwZWVkLCBkdXBsZXgpOwotfQotCi1zdGF0aWMgdm9pZCB0YzM1ODE1X3NldF9saW5rX21vZGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OwotCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQotCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7Ci0JaW50IHBpZCA9IGxwLT5waHlfYWRkcjsKLQl1bnNpZ25lZCBzaG9ydCBibWNyLCBscGE7Ci0JaW50IHNwZWVkOwotCi0JaWYgKGxwLT50aW1lcl9zdGF0ZSA9PSBhcmJ3YWl0KSB7Ci0JCWxwYSA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0xQQSk7Ci0JCWJtY3IgPSB0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9CTUNSKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNSUkgQk1DUiAlMDR4IEJNU1IgJTA0eCBMUEEgJTA0eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwKLQkJICAgICAgIGJtY3IsIHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNU1IpLCBscGEpOwotCQlpZiAoIShscGEgJiAoTFBBXzEwSEFMRiB8IExQQV8xMEZVTEwgfAotCQkJICAgICBMUEFfMTAwSEFMRiB8IExQQV8xMDBGVUxMKSkpIHsKLQkJCS8qIGZhbGwgYmFjayB0byAxMEhBTEYgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBiYWQgYWJpbGl0eSAlMDR4IC0gZmFsbGluZyBiYWNrIHRvIDEwSEQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbHBhKTsKLQkJCWxwYSA9IExQQV8xMEhBTEY7Ci0JCX0KLQkJaWYgKG9wdGlvbnMuZHVwbGV4ID8gKGJtY3IgJiBCTUNSX0ZVTExEUExYKSA6IChscGEgJiAoTFBBXzEwMEZVTEwgfCBMUEFfMTBGVUxMKSkpCi0JCQlscC0+ZnVsbGR1cGxleCA9IDE7Ci0JCWVsc2UKLQkJCWxwLT5mdWxsZHVwbGV4ID0gMDsKLQkJaWYgKG9wdGlvbnMuc3BlZWQgPyAoYm1jciAmIEJNQ1JfU1BFRUQxMDApIDogKGxwYSAmIChMUEFfMTAwSEFMRiB8IExQQV8xMDBGVUxMKSkpCi0JCQlzcGVlZCA9IDEwMDsKLQkJZWxzZQotCQkJc3BlZWQgPSAxMDsKLQl9IGVsc2UgewotCQkvKiBGb3JjaW5nIGEgbGluayBtb2RlLiAqLwotCQlibWNyID0gdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfQk1DUik7Ci0JCWlmIChibWNyICYgQk1DUl9GVUxMRFBMWCkKLQkJCWxwLT5mdWxsZHVwbGV4ID0gMTsKLQkJZWxzZQotCQkJbHAtPmZ1bGxkdXBsZXggPSAwOwotCQlpZiAoYm1jciAmIEJNQ1JfU1BFRUQxMDApCi0JCQlzcGVlZCA9IDEwMDsKLQkJZWxzZQotCQkJc3BlZWQgPSAxMDsKLQl9Ci0KLQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5NQUNfQ3RsKSB8IE1BQ19IYWx0UmVxLCAmdHItPk1BQ19DdGwpOwotCWlmIChscC0+ZnVsbGR1cGxleCkgewotCQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5NQUNfQ3RsKSB8IE1BQ19GdWxsRHVwLCAmdHItPk1BQ19DdGwpOwotCX0gZWxzZSB7Ci0JCXRjX3dyaXRlbCh0Y19yZWFkbCgmdHItPk1BQ19DdGwpICYgfk1BQ19GdWxsRHVwLCAmdHItPk1BQ19DdGwpOwotCX0KLQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5NQUNfQ3RsKSAmIH5NQUNfSGFsdFJlcSwgJnRyLT5NQUNfQ3RsKTsKLQotCS8qIFRYNDkzOSBQQ0ZHLlNQRUVEbiBiaXQgd2lsbCBiZSBjaGFuZ2VkIG9uIE5FVERFVl9DSEFOR0UgZXZlbnQuICovCi0KLSNpZm5kZWYgTk9fQ0hFQ0tfQ0FSUklFUgotCS8qIFRYNDkzOSBkb2VzIG5vdCBoYXZlIEVuTENhcnIgKi8KLQlpZiAobHAtPmJvYXJkdHlwZSAhPSBUQzM1ODE1X1RYNDkzOSkgewotI2lmZGVmIFdPUktBUk9VTkRfTE9TVENBUgotCQkvKiBXT1JLQVJPVU5EOiBlbmFibGUgTG9zdENyUyBvbmx5IGlmIGhhbGYgZHVwbGV4IG9wZXJhdGlvbiAqLwotCQlpZiAoIWxwLT5mdWxsZHVwbGV4ICYmIGxwLT5ib2FyZHR5cGUgIT0gVEMzNTgxNV9UWDQ5MzkpCi0JCQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5UeF9DdGwpIHwgVHhfRW5MQ2FyciwgJnRyLT5UeF9DdGwpOwotI2VuZGlmCi0JfQotI2VuZGlmCi0JbHAtPm1paS5mdWxsX2R1cGxleCA9IGxwLT5mdWxsZHVwbGV4OwotfQotCi1zdGF0aWMgdm9pZCB0YzM1ODE1X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7Ci0JaW50IHBpZCA9IGxwLT5waHlfYWRkcjsKLQl1bnNpZ25lZCBzaG9ydCBibXNyLCBibWNyLCBscGE7Ci0JaW50IHJlc3RhcnRfdGltZXIgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCi0JbHAtPnRpbWVyX3RpY2tzKys7Ci0Jc3dpdGNoIChscC0+dGltZXJfc3RhdGUpIHsKLQljYXNlIGFyYndhaXQ6Ci0JCS8qCi0JCSAqIE9ubHkgYWxsb3cgZm9yIDUgdGlja3MsIHRoYXRzIDEwIHNlY29uZHMgYW5kIG11Y2ggdG9vCi0JCSAqIGxvbmcgdG8gd2FpdCBmb3IgYXJiaXRyYXRpb24gdG8gY29tcGxldGUuCi0JCSAqLwotCQkvKiBUQzM1ODE1IG5lZWQgbW9yZSB0aW1lcy4uLiAqLwotCQlpZiAobHAtPnRpbWVyX3RpY2tzID49IDEwKSB7Ci0JCQkvKiBFbnRlciBmb3JjZSBtb2RlLiAqLwotCQkJaWYgKCFvcHRpb25zLmRvZm9yY2UpIHsKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBBdXRvLU5lZ290aWF0aW9uIHVuc3VjY2Vzc2Z1bCwiCi0JCQkJICAgICAgICIgY2FibGUgcHJvYmJsZW0/XG4iLCBkZXYtPm5hbWUpOwotCQkJCS8qIFRyeSB0byByZXN0YXJ0IHRoZSBhZGFwdG9yLiAqLwotCQkJCXRjMzU4MTVfcmVzdGFydChkZXYpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogQXV0by1OZWdvdGlhdGlvbiB1bnN1Y2Nlc3NmdWwsIgotCQkJICAgICAgICIgdHJ5aW5nIGZvcmNlIGxpbmsgbW9kZVxuIiwgZGV2LT5uYW1lKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQk1DUiAleCBCTVNSICV4XG4iLCBkZXYtPm5hbWUsCi0JCQkgICAgICAgdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfQk1DUiksCi0JCQkgICAgICAgdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfQk1TUikpOwotCQkJYm1jciA9IEJNQ1JfU1BFRUQxMDA7Ci0JCQl0Y19tZGlvX3dyaXRlKGRldiwgcGlkLCBNSUlfQk1DUiwgYm1jcik7Ci0KLQkJCS8qCi0JCQkgKiBPSywgc2VlbXMgd2UgbmVlZCBkbyBkaXNhYmxlIHRoZSB0cmFuc2NlaXZlcgotCQkJICogZm9yIHRoZSBmaXJzdCB0aWNrIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYW4KLQkJCSAqIGFjY3VyYXRlIGxpbmsgc3RhdGUgYXQgdGhlIHNlY29uZCB0aWNrLgotCQkJICovCi0KLQkJCWxwLT50aW1lcl9zdGF0ZSA9IGx0cnl3YWl0OwotCQkJbHAtPnRpbWVyX3RpY2tzID0gMDsKLQkJCXJlc3RhcnRfdGltZXIgPSAxOwotCQl9IGVsc2UgewotCQkJLyogQW55dGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuPyAqLwotCQkJYm1zciA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNU1IpOwotCQkJaWYgKGJtc3IgJiBCTVNSX0FORUdDT01QTEVURSkgewotCQkJCS8qIEp1c3Qgd2hhdCB3ZSd2ZSBiZWVuIHdhaXRpbmcgZm9yLi4uICovCi0JCQkJdGMzNTgxNV9zZXRfbGlua19tb2RlcyhkZXYpOwotCi0JCQkJLyoKLQkJCQkgKiBTdWNjZXNzLCBhdCBsZWFzdCBzbyBmYXIsIGFkdmFuY2Ugb3VyIHN0YXRlCi0JCQkJICogZW5naW5lLgotCQkJCSAqLwotCQkJCWxwLT50aW1lcl9zdGF0ZSA9IGx1cHdhaXQ7Ci0JCQkJcmVzdGFydF90aW1lciA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCXJlc3RhcnRfdGltZXIgPSAxOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBsdXB3YWl0OgotCQkvKgotCQkgKiBBdXRvIG5lZ290aWF0aW9uIHdhcyBzdWNjZXNzZnVsIGFuZCB3ZSBhcmUgYXdhaXRpbmcgYQotCQkgKiBsaW5rIHVwIHN0YXR1cy4gIEkgaGF2ZSBkZWNpZGVkIHRvIGxldCB0aGlzIHRpbWVyIHJ1bgotCQkgKiBmb3JldmVyIHVudGlsIHNvbWUgc29ydCBvZiBlcnJvciBpcyBzaWduYWxsZWQsIHJlcG9ydGluZwotCQkgKiBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYXQgMTAgc2Vjb25kIGludGVydmFscy4KLQkJICovCi0JCWJtc3IgPSB0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9CTVNSKTsKLQkJaWYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpIHsKLQkJCS8qCi0JCQkgKiBXaGVlZSwgaXQncyB1cCwgZGlzcGxheSB0aGUgbGluayBtb2RlIGluIHVzZSBhbmQgcHV0Ci0JCQkgKiB0aGUgdGltZXIgdG8gc2xlZXAuCi0JCQkgKi8KLQkJCXRjMzU4MTVfZGlzcGxheV9saW5rX21vZGUoZGV2KTsKLQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLSNpZmRlZiBXT1JLQVJPVU5EXzEwMEhBTEZfUFJPTUlTQwotCQkJLyogZGVsYXllZCBwcm9taXNjdW91cyBlbmFibGluZyAqLwotCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJCQl0YzM1ODE1X3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwotI2VuZGlmCi0jaWYgMQotCQkJbHAtPnNhdmVkX2xwYSA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0xQQSk7Ci0JCQlscC0+dGltZXJfc3RhdGUgPSBsY2hlY2s7Ci0JCQlyZXN0YXJ0X3RpbWVyID0gMTsKLSNlbHNlCi0JCQlscC0+dGltZXJfc3RhdGUgPSBhc2xlZXA7Ci0JCQlyZXN0YXJ0X3RpbWVyID0gMDsKLSNlbmRpZgotCQl9IGVsc2UgewotCQkJaWYgKGxwLT50aW1lcl90aWNrcyA+PSAxMCkgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEF1dG8gbmVnb3RpYXRpb24gc3VjY2Vzc2Z1bCwgbGluayBzdGlsbCAiCi0JCQkJICAgICAgICJub3QgY29tcGxldGVseSB1cC5cbiIsIGRldi0+bmFtZSk7Ci0JCQkJbHAtPnRpbWVyX3RpY2tzID0gMDsKLQkJCQlyZXN0YXJ0X3RpbWVyID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzdGFydF90aW1lciA9IDE7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIGx0cnl3YWl0OgotCQkvKgotCQkgKiBNYWtpbmcgdGhlIHRpbWVvdXQgaGVyZSB0b28gbG9uZyBjYW4gbWFrZSBpdCB0YWtlCi0JCSAqIGFubm95aW5nbHkgbG9uZyB0byBhdHRlbXB0IGFsbCBvZiB0aGUgbGluayBtb2RlCi0JCSAqIHBlcm11dGF0aW9ucywgYnV0IHRoZW4gYWdhaW4gdGhpcyBpcyBlc3NlbnRpYWxseQotCQkgKiBlcnJvciByZWNvdmVyeSBjb2RlIGZvciB0aGUgbW9zdCBwYXJ0LgotCQkgKi8KLQkJYm1zciA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNU1IpOwotCQlibWNyID0gdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfQk1DUik7Ci0JCWlmIChscC0+dGltZXJfdGlja3MgPT0gMSkgewotCQkJLyoKLQkJCSAqIFJlLWVuYWJsZSB0cmFuc2NlaXZlciwgd2UnbGwgcmUtZW5hYmxlIHRoZQotCQkJICogdHJhbnNjZWl2ZXIgbmV4dCB0aWNrLCB0aGVuIGNoZWNrIGxpbmsgc3RhdGUKLQkJCSAqIG9uIHRoZSBmb2xsb3dpbmcgdGljay4KLQkJCSAqLwotCQkJcmVzdGFydF90aW1lciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAobHAtPnRpbWVyX3RpY2tzID09IDIpIHsKLQkJCXJlc3RhcnRfdGltZXIgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpIHsKLQkJCS8qIEZvcmNlIG1vZGUgc2VsZWN0aW9uIHN1Y2Nlc3MuICovCi0JCQl0YzM1ODE1X2Rpc3BsYXlfZm9yY2VkX2xpbmtfbW9kZShkZXYpOwotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQkJdGMzNTgxNV9zZXRfbGlua19tb2RlcyhkZXYpOwotI2lmZGVmIFdPUktBUk9VTkRfMTAwSEFMRl9QUk9NSVNDCi0JCQkvKiBkZWxheWVkIHByb21pc2N1b3VzIGVuYWJsaW5nICovCi0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotCQkJCXRjMzU4MTVfc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0jZW5kaWYKLSNpZiAxCi0JCQlscC0+c2F2ZWRfbHBhID0gdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfTFBBKTsKLQkJCWxwLT50aW1lcl9zdGF0ZSA9IGxjaGVjazsKLQkJCXJlc3RhcnRfdGltZXIgPSAxOwotI2Vsc2UKLQkJCWxwLT50aW1lcl9zdGF0ZSA9IGFzbGVlcDsKLQkJCXJlc3RhcnRfdGltZXIgPSAwOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpZiAobHAtPnRpbWVyX3RpY2tzID49IDQpIHsgLyogNiBzZWNvbmRzIG9yIHNvLi4uICovCi0JCQkJaW50IHJldDsKLQotCQkJCXJldCA9IHRjMzU4MTVfdHJ5X25leHRfcGVybXV0YXRpb24oZGV2KTsKLQkJCQlpZiAocmV0ID09IC0xKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIEFpZWVlLCB0cmllZCB0aGVtIGFsbCwgcmVzZXQgdGhlCi0JCQkJCSAqIGNoaXAgYW5kIHRyeSBhbGwgb3ZlciBhZ2Fpbi4KLQkJCQkJICovCi0JCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IExpbmsgZG93biwgIgotCQkJCQkgICAgICAgImNhYmxlIHByb2JsZW0/XG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKLQotCQkJCQkvKiBUcnkgdG8gcmVzdGFydCB0aGUgYWRhcHRvci4gKi8KLQkJCQkJdGMzNTgxNV9yZXN0YXJ0KGRldik7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCQlscC0+dGltZXJfdGlja3MgPSAwOwotCQkJCXJlc3RhcnRfdGltZXIgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlyZXN0YXJ0X3RpbWVyID0gMTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgbGNoZWNrOgotCQlibWNyID0gdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfQk1DUik7Ci0JCWxwYSA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0xQQSk7Ci0JCWlmIChibWNyICYgKEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUgfCBCTUNSX1JFU0VUKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUEhZIGRvd24/IChCTUNSICV4KVxuIiwgZGV2LT5uYW1lLAotCQkJICAgICAgIGJtY3IpOwotCQl9IGVsc2UgaWYgKChscC0+c2F2ZWRfbHBhIF4gbHBhKSAmCi0JCQkgICAoTFBBXzEwMEZVTEx8TFBBXzEwMEhBTEZ8TFBBXzEwRlVMTHxMUEFfMTBIQUxGKSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogbGluayBzdGF0dXMgY2hhbmdlZCIKLQkJCSAgICAgICAiIChCTUNSICV4IExQQSAleC0+JXgpXG4iLCBkZXYtPm5hbWUsCi0JCQkgICAgICAgYm1jciwgbHAtPnNhdmVkX2xwYSwgbHBhKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGdvIG9uICovCi0JCQlyZXN0YXJ0X3RpbWVyID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIFRyeSB0byByZXN0YXJ0IHRoZSBhZGFwdG9yLiAqLwotCQl0YzM1ODE1X3Jlc3RhcnQoZGV2KTsKLQkJZ290byBvdXQ7Ci0KLQljYXNlIGFzbGVlcDoKLQlkZWZhdWx0OgotCQkvKiBDYW4ndCBoYXBwZW5zLi4uLiAqLwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBaWVlZSwgbGluayB0aW1lciBpcyBhc2xlZXAgYnV0IHdlIGdvdCAiCi0JCSAgICAgICAib25lIGFueXdheXMhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXN0YXJ0X3RpbWVyID0gMDsKLQkJbHAtPnRpbWVyX3RpY2tzID0gMDsKLQkJbHAtPnRpbWVyX3N0YXRlID0gYXNsZWVwOyAvKiBmb28gb24geW91ICovCi0JCWJyZWFrOwotCX0KLQotCWlmIChyZXN0YXJ0X3RpbWVyKSB7Ci0JCWxwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTIwMCk7Ci0JCWFkZF90aW1lcigmbHAtPnRpbWVyKTsKLQl9Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRjMzU4MTVfc3RhcnRfYXV0b19uZWdvdGlhdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVwKQotewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKLQlpbnQgcGlkID0gbHAtPnBoeV9hZGRyOwotCXVuc2lnbmVkIHNob3J0IGJtc3IsIGJtY3IsIGFkdmVydGl6ZTsKLQlpbnQgdGltZW91dDsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JYm1zciA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNU1IpOwotCWJtY3IgPSB0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9CTUNSKTsKLQlhZHZlcnRpemUgPSB0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9BRFZFUlRJU0UpOwotCi0JaWYgKGVwID09IE5VTEwgfHwgZXAtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKLQkJaWYgKG9wdGlvbnMuc3BlZWQgfHwgb3B0aW9ucy5kdXBsZXgpIHsKLQkJCS8qIEFkdmVydGlzZSBvbmx5IHNwZWNpZmllZCBjb25maWd1cmF0aW9uLiAqLwotCQkJYWR2ZXJ0aXplICY9IH4oQURWRVJUSVNFXzEwSEFMRiB8Ci0JCQkJICAgICAgIEFEVkVSVElTRV8xMEZVTEwgfAotCQkJCSAgICAgICBBRFZFUlRJU0VfMTAwSEFMRiB8Ci0JCQkJICAgICAgIEFEVkVSVElTRV8xMDBGVUxMKTsKLQkJCWlmIChvcHRpb25zLnNwZWVkICE9IDEwKSB7Ci0JCQkJaWYgKG9wdGlvbnMuZHVwbGV4ICE9IDEpCi0JCQkJCWFkdmVydGl6ZSB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKLQkJCQlpZiAob3B0aW9ucy5kdXBsZXggIT0gMikKLQkJCQkJYWR2ZXJ0aXplIHw9IEFEVkVSVElTRV8xMDBIQUxGOwotCQkJfQotCQkJaWYgKG9wdGlvbnMuc3BlZWQgIT0gMTAwKSB7Ci0JCQkJaWYgKG9wdGlvbnMuZHVwbGV4ICE9IDEpCi0JCQkJCWFkdmVydGl6ZSB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCQkJCWlmIChvcHRpb25zLmR1cGxleCAhPSAyKQotCQkJCQlhZHZlcnRpemUgfD0gQURWRVJUSVNFXzEwSEFMRjsKLQkJCX0KLQkJCWlmIChvcHRpb25zLnNwZWVkID09IDEwMCkKLQkJCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDA7Ci0JCQllbHNlIGlmIChvcHRpb25zLnNwZWVkID09IDEwKQotCQkJCWJtY3IgJj0gfkJNQ1JfU1BFRUQxMDA7Ci0JCQlpZiAob3B0aW9ucy5kdXBsZXggPT0gMikKLQkJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7Ci0JCQllbHNlIGlmIChvcHRpb25zLmR1cGxleCA9PSAxKQotCQkJCWJtY3IgJj0gfkJNQ1JfRlVMTERQTFg7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBBZHZlcnRpc2UgZXZlcnl0aGluZyB3ZSBjYW4gc3VwcG9ydC4gKi8KLQkJCWlmIChibXNyICYgQk1TUl8xMEhBTEYpCi0JCQkJYWR2ZXJ0aXplIHw9IEFEVkVSVElTRV8xMEhBTEY7Ci0JCQllbHNlCi0JCQkJYWR2ZXJ0aXplICY9IH5BRFZFUlRJU0VfMTBIQUxGOwotCQkJaWYgKGJtc3IgJiBCTVNSXzEwRlVMTCkKLQkJCQlhZHZlcnRpemUgfD0gQURWRVJUSVNFXzEwRlVMTDsKLQkJCWVsc2UKLQkJCQlhZHZlcnRpemUgJj0gfkFEVkVSVElTRV8xMEZVTEw7Ci0JCQlpZiAoYm1zciAmIEJNU1JfMTAwSEFMRikKLQkJCQlhZHZlcnRpemUgfD0gQURWRVJUSVNFXzEwMEhBTEY7Ci0JCQllbHNlCi0JCQkJYWR2ZXJ0aXplICY9IH5BRFZFUlRJU0VfMTAwSEFMRjsKLQkJCWlmIChibXNyICYgQk1TUl8xMDBGVUxMKQotCQkJCWFkdmVydGl6ZSB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKLQkJCWVsc2UKLQkJCQlhZHZlcnRpemUgJj0gfkFEVkVSVElTRV8xMDBGVUxMOwotCQl9Ci0KLQkJdGNfbWRpb193cml0ZShkZXYsIHBpZCwgTUlJX0FEVkVSVElTRSwgYWR2ZXJ0aXplKTsKLQotCQkvKiBFbmFibGUgQXV0by1OZWdvdGlhdGlvbiwgdGhpcyBpcyB1c3VhbGx5IG9uIGFscmVhZHkuLi4gKi8KLQkJYm1jciB8PSBCTUNSX0FORU5BQkxFOwotCQl0Y19tZGlvX3dyaXRlKGRldiwgcGlkLCBNSUlfQk1DUiwgYm1jcik7Ci0KLQkJLyogUmVzdGFydCBpdCB0byBtYWtlIHN1cmUgaXQgaXMgZ29pbmcuICovCi0JCWJtY3IgfD0gQk1DUl9BTlJFU1RBUlQ7Ci0JCXRjX21kaW9fd3JpdGUoZGV2LCBwaWQsIE1JSV9CTUNSLCBibWNyKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBRFZFUlRJU0UgJXggQk1DUiAleFxuIiwgZGV2LT5uYW1lLCBhZHZlcnRpemUsIGJtY3IpOwotCi0JCS8qIEJNQ1JfQU5SRVNUQVJUIHNlbGYgY2xlYXJzIHdoZW4gdGhlIHByb2Nlc3MgaGFzIGJlZ3VuLiAqLwotCQl0aW1lb3V0ID0gNjQ7ICAvKiBNb3JlIHRoYW4gZW5vdWdoLiAqLwotCQl3aGlsZSAoLS10aW1lb3V0KSB7Ci0JCQlibWNyID0gdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfQk1DUik7Ci0JCQlpZiAoIShibWNyICYgQk1DUl9BTlJFU1RBUlQpKQotCQkJCWJyZWFrOyAvKiBnb3QgaXQuICovCi0JCQl1ZGVsYXkoMTApOwotCQl9Ci0JCWlmICghdGltZW91dCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVEMzNTgxNSB3b3VsZCBub3Qgc3RhcnQgYXV0byAiCi0JCQkgICAgICAgIm5lZ290aWF0aW9uIEJNQ1I9MHglMDR4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgYm1jcik7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQZXJmb3JtaW5nIGZvcmNlIGxpbmsgIgotCQkJICAgICAgICJkZXRlY3Rpb24uXG4iLCBkZXYtPm5hbWUpOwotCQkJZ290byBmb3JjZV9saW5rOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRvIG5lZ290aWF0aW9uIHN0YXJ0ZWQuXG4iLCBkZXYtPm5hbWUpOwotCQkJbHAtPnRpbWVyX3N0YXRlID0gYXJid2FpdDsKLQkJfQotCX0gZWxzZSB7Ci1mb3JjZV9saW5rOgotCQkvKiBGb3JjZSB0aGUgbGluayB1cCwgdHJ5aW5nIGZpcnN0IGEgcGFydGljdWxhciBtb2RlLgotCQkgKiBFaXRoZXIgd2UgYXJlIGhlcmUgYXQgdGhlIHJlcXVlc3Qgb2YgZXRodG9vbCBvcgotCQkgKiBiZWNhdXNlIHRoZSBIYXBweSBNZWFsIHdvdWxkIG5vdCBzdGFydCB0byBhdXRvbmVnLgotCQkgKi8KLQotCQkvKiBEaXNhYmxlIGF1dG8tbmVnb3RpYXRpb24gaW4gQk1DUiwgZW5hYmxlIHRoZSBkdXBsZXggYW5kCi0JCSAqIHNwZWVkIHNldHRpbmcsIGluaXQgdGhlIHRpbWVyIHN0YXRlIG1hY2hpbmUsIGFuZCBmaXJlIGl0IG9mZi4KLQkJICovCi0JCWlmIChlcCA9PSBOVUxMIHx8IGVwLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7Ci0JCQlibWNyID0gQk1DUl9TUEVFRDEwMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChlcC0+c3BlZWQgPT0gU1BFRURfMTAwKQotCQkJCWJtY3IgPSBCTUNSX1NQRUVEMTAwOwotCQkJZWxzZQotCQkJCWJtY3IgPSAwOwotCQkJaWYgKGVwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQkJYm1jciB8PSBCTUNSX0ZVTExEUExYOwotCQl9Ci0JCXRjX21kaW9fd3JpdGUoZGV2LCBwaWQsIE1JSV9CTUNSLCBibWNyKTsKLQotCQkvKiBPSywgc2VlbXMgd2UgbmVlZCBkbyBkaXNhYmxlIHRoZSB0cmFuc2NlaXZlciBmb3IgdGhlIGZpcnN0Ci0JCSAqIHRpY2sgdG8gbWFrZSBzdXJlIHdlIGdldCBhbiBhY2N1cmF0ZSBsaW5rIHN0YXRlIGF0IHRoZQotCQkgKiBzZWNvbmQgdGljay4KLQkJICovCi0JCWxwLT50aW1lcl9zdGF0ZSA9IGx0cnl3YWl0OwotCX0KLQotCWRlbF90aW1lcigmbHAtPnRpbWVyKTsKLQlscC0+dGltZXJfdGlja3MgPSAwOwotCWxwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTIwMCk7Ci0JYWRkX3RpbWVyKCZscC0+dGltZXIpOwotfQotCi1zdGF0aWMgdm9pZCB0YzM1ODE1X2ZpbmRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OwotCWludCBwaWQgPSBscC0+cGh5X2FkZHI7Ci0JdW5zaWduZWQgc2hvcnQgaWQwOwotCi0JLyogZmluZCBNSUkgcGh5ICovCi0JZm9yIChwaWQgPSAzMTsgcGlkID49IDA7IHBpZC0tKSB7Ci0JCWlkMCA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNU1IpOwotCQlpZiAoaWQwICE9IDB4ZmZmZiAmJiBpZDAgIT0gMHgwMDAwICYmCi0JCSAgICAoaWQwICYgQk1TUl9SRVNWKSAhPSAoMHhmZmZmICYgQk1TUl9SRVNWKSAvKiBwYXJhbm9pYT8gKi8KLQkJCSkgewotCQkJbHAtPnBoeV9hZGRyID0gcGlkOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHBpZCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogTm8gTUlJIFBoeSBmb3VuZC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlscC0+cGh5X2FkZHIgPSBwaWQgPSAwOwotCX0KLQotCWxwLT5taWlfaWRbMF0gPSB0Y19tZGlvX3JlYWQoZGV2LCBwaWQsIE1JSV9QSFlTSUQxKTsKLQlscC0+bWlpX2lkWzFdID0gdGNfbWRpb19yZWFkKGRldiwgcGlkLCBNSUlfUEhZU0lEMik7Ci0JaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQSFkoJTAyeCkgSUQgJTA0eCAlMDR4XG4iLCBkZXYtPm5hbWUsCi0JCSAgICAgICBwaWQsIGxwLT5taWlfaWRbMF0sIGxwLT5taWlfaWRbMV0pOwotfQotCi1zdGF0aWMgdm9pZCB0YzM1ODE1X3BoeV9jaGlwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7Ci0JaW50IHBpZCA9IGxwLT5waHlfYWRkcjsKLQl1bnNpZ25lZCBzaG9ydCBibWNyOwotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kLCAqZXA7Ci0KLQkvKiBkaXMtaXNvbGF0ZSBpZiBuZWVkZWQuICovCi0JYm1jciA9IHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNQ1IpOwotCWlmIChibWNyICYgQk1DUl9JU09MQVRFKSB7Ci0JCWludCBjb3VudCA9IDMyOwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuaXNvbGF0aW5nLi4uIiwgZGV2LT5uYW1lKTsKLQkJdGNfbWRpb193cml0ZShkZXYsIHBpZCwgTUlJX0JNQ1IsIGJtY3IgJiB+Qk1DUl9JU09MQVRFKTsKLQkJd2hpbGUgKC0tY291bnQpIHsKLQkJCWlmICghKHRjX21kaW9fcmVhZChkZXYsIHBpZCwgTUlJX0JNQ1IpICYgQk1DUl9JU09MQVRFKSkKLQkJCQlicmVhazsKLQkJCXVkZWxheSgyMCk7Ci0JCX0KLQkJcHJpbnRrKCIgJXMuXG4iLCBjb3VudCA/ICJkb25lIiA6ICJmYWlsZWQiKTsKLQl9Ci0KLQlpZiAob3B0aW9ucy5zcGVlZCAmJiBvcHRpb25zLmR1cGxleCkgewotCQllY21kLmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCWVjbWQuc3BlZWQgPSBvcHRpb25zLnNwZWVkID09IDEwID8gU1BFRURfMTAgOiBTUEVFRF8xMDA7Ci0JCWVjbWQuZHVwbGV4ID0gb3B0aW9ucy5kdXBsZXggPT0gMSA/IERVUExFWF9IQUxGIDogRFVQTEVYX0ZVTEw7Ci0JCWVwID0gJmVjbWQ7Ci0JfSBlbHNlIHsKLQkJZXAgPSBOVUxMOwotCX0KLQl0YzM1ODE1X3N0YXJ0X2F1dG9fbmVnb3RpYXRpb24oZGV2LCBlcCk7CisJaWYgKCFscC0+cGh5X2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHBoeV9taWlfaW9jdGwobHAtPnBoeV9kZXYsIGlmX21paShycSksIGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRjMzU4MTVfY2hpcF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjg2MiwxMyArMjM2OCwxMSBAQAogCiBzdGF0aWMgdm9pZCB0YzM1ODE1X2NoaXBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQogCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAJdW5zaWduZWQgbG9uZyB0eGN0bCA9IFRYX0NUTF9DTUQ7CiAKLQl0YzM1ODE1X3BoeV9jaGlwX2luaXQoZGV2KTsKLQogCS8qIGxvYWQgc3RhdGlvbiBhZGRyZXNzIHRvIENBTSAqLwogCXRjMzU4MTVfc2V0X2NhbV9lbnRyeShkZXYsIENBTV9FTlRSWV9TT1VSQ0UsIGRldi0+ZGV2X2FkZHIpOwogCkBAIC0yOTA1LDEyICsyNDA5LDExIEBACiAJLyogc3RhcnQgTUFDIHRyYW5zbWl0dGVyICovCiAjaWZuZGVmIE5PX0NIRUNLX0NBUlJJRVIKIAkvKiBUWDQ5MzkgZG9lcyBub3QgaGF2ZSBFbkxDYXJyICovCi0JaWYgKGxwLT5ib2FyZHR5cGUgPT0gVEMzNTgxNV9UWDQ5MzkpCisJaWYgKGxwLT5jaGlwdHlwZSA9PSBUQzM1ODE1X1RYNDkzOSkKIAkJdHhjdGwgJj0gflR4X0VuTENhcnI7CiAjaWZkZWYgV09SS0FST1VORF9MT1NUQ0FSCiAJLyogV09SS0FST1VORDogaWdub3JlIExvc3RDclMgaW4gZnVsbCBkdXBsZXggb3BlcmF0aW9uICovCi0JaWYgKChscC0+dGltZXJfc3RhdGUgIT0gYXNsZWVwICYmIGxwLT50aW1lcl9zdGF0ZSAhPSBsY2hlY2spIHx8Ci0JICAgIGxwLT5mdWxsZHVwbGV4KQorCWlmICghbHAtPnBoeV9kZXYgfHwgIWxwLT5saW5rIHx8IGxwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCXR4Y3RsICY9IH5UeF9FbkxDYXJyOwogI2VuZGlmCiAjZW5kaWYgLyogIU5PX0NIRUNLX0NBUlJJRVIgKi8KQEAgLTI5MjQsMTUgKzI0MjcsMTYgQEAKIHN0YXRpYyBpbnQgdGMzNTgxNV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwlpZiAobHAtPnBoeV9kZXYpCisJCXBoeV9zdG9wKGxwLT5waHlfZGV2KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlkZWxfdGltZXIoJmxwLT50aW1lcik7CQkvKiBLaWxsIGlmIHJ1bm5pbmcJKi8KIAl0YzM1ODE1X2NoaXBfcmVzZXQoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKQEAgLTI5NDIsMTYgKzI0NDYsMTUgQEAKIHN0YXRpYyBpbnQgdGMzNTgxNV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBkZXYtPnByaXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAl0YzM1ODE1X3Jlc3RhcnQoZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCWlmIChscC0+cGh5X2RldikKKwkJcGh5X3N0YXJ0KGxwLT5waHlfZGV2KTsKIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTcyLDggKzI0NzUsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhzcGVlZCwgIjA6YXV0bywgMTA6MTBNYnBzLCAxMDA6MTAwTWJwcyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGR1cGxleCwgb3B0aW9ucy5kdXBsZXgsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR1cGxleCwgIjA6YXV0bywgMTpoYWxmLCAyOmZ1bGwiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkb2ZvcmNlLCBvcHRpb25zLmRvZm9yY2UsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRvZm9yY2UsICJ0cnkgZm9yY2UgbGluayBtb2RlIGlmIGF1dG8tbmVnb3RpYXRpb24gZmFpbGVkIik7CiAKIHN0YXRpYyBpbnQgX19pbml0IHRjMzU4MTVfaW5pdF9tb2R1bGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggZGI2MDZiNi4uYmM0YzYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTY0LDggKzY0LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuODciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRGVjZW1iZXIgMjAsIDIwMDciCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45MSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJBcHJpbCAxOCwgMjAwOCIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC04MDQsNiArODA0LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgdGczX3BoeWRzcF93cml0ZShzdHJ1Y3QgdGczICp0cCwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIHJlZyk7CisJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCB2YWwpOworfQorCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X3RvZ2dsZV9hdXRvbWRpeChzdHJ1Y3QgdGczICp0cCwgaW50IGVuYWJsZSkKIHsKIAl1MzIgcGh5OwpAQCAtODg2LDYgKzg5Miw0OSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB0ZzNfcGh5X2FwcGx5X290cChzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgb3RwLCBwaHk7CisKKwlpZiAoIXRwLT5waHlfb3RwKQorCQlyZXR1cm47CisKKwlvdHAgPSB0cC0+cGh5X290cDsKKworCS8qIEVuYWJsZSBTTV9EU1AgY2xvY2sgYW5kIHR4IDZkQiBjb2RpbmcuICovCisJcGh5ID0gTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwgfAorCSAgICAgIE1JSV9URzNfQVVYQ1RMX0FDVExfU01EU1BfRU5BIHwKKwkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQjsKKwl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHBoeSk7CisKKwlwaHkgPSAoKG90cCAmIFRHM19PVFBfQUdDVEdUX01BU0spID4+IFRHM19PVFBfQUdDVEdUX1NISUZUKTsKKwlwaHkgfD0gTUlJX1RHM19EU1BfVEFQMV9BR0NUR1RfREZMVDsKKwl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCBNSUlfVEczX0RTUF9UQVAxLCBwaHkpOworCisJcGh5ID0gKChvdHAgJiBURzNfT1RQX0hQRkZMVFJfTUFTSykgPj4gVEczX09UUF9IUEZGTFRSX1NISUZUKSB8CisJICAgICAgKChvdHAgJiBURzNfT1RQX0hQRk9WRVJfTUFTSykgPj4gVEczX09UUF9IUEZPVkVSX1NISUZUKTsKKwl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCBNSUlfVEczX0RTUF9BQURKMUNIMCwgcGh5KTsKKworCXBoeSA9ICgob3RwICYgVEczX09UUF9MUEZESVNfTUFTSykgPj4gVEczX09UUF9MUEZESVNfU0hJRlQpOworCXBoeSB8PSBNSUlfVEczX0RTUF9BQURKMUNIM19BRENDS0FESjsKKwl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCBNSUlfVEczX0RTUF9BQURKMUNIMywgcGh5KTsKKworCXBoeSA9ICgob3RwICYgVEczX09UUF9WREFDX01BU0spID4+IFRHM19PVFBfVkRBQ19TSElGVCk7CisJdGczX3BoeWRzcF93cml0ZSh0cCwgTUlJX1RHM19EU1BfRVhQNzUsIHBoeSk7CisKKwlwaHkgPSAoKG90cCAmIFRHM19PVFBfMTBCVEFNUF9NQVNLKSA+PiBURzNfT1RQXzEwQlRBTVBfU0hJRlQpOworCXRnM19waHlkc3Bfd3JpdGUodHAsIE1JSV9URzNfRFNQX0VYUDk2LCBwaHkpOworCisJcGh5ID0gKChvdHAgJiBURzNfT1RQX1JPRkZfTUFTSykgPj4gVEczX09UUF9ST0ZGX1NISUZUKSB8CisJICAgICAgKChvdHAgJiBURzNfT1RQX1JDT0ZGX01BU0spID4+IFRHM19PVFBfUkNPRkZfU0hJRlQpOworCXRnM19waHlkc3Bfd3JpdGUodHAsIE1JSV9URzNfRFNQX0VYUDk3LCBwaHkpOworCisJLyogVHVybiBvZmYgU01fRFNQIGNsb2NrLiAqLworCXBoeSA9IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMIHwKKwkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQjsKKwl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHBoeSk7Cit9CisKIHN0YXRpYyBpbnQgdGczX3dhaXRfbWFjcm9fZG9uZShzdHJ1Y3QgdGczICp0cCkKIHsKIAlpbnQgbGltaXQgPSAxMDA7CkBAIC0xMDczLDYgKzExMjIsNyBAQAogICovCiBzdGF0aWMgaW50IHRnM19waHlfcmVzZXQoc3RydWN0IHRnMyAqdHApCiB7CisJdTMyIGNwbXVjdHJsOwogCXUzMiBwaHlfc3RhdHVzOwogCWludCBlcnI7CiAKQEAgLTExMDIsMTAgKzExNTIsMjggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJY3BtdWN0cmwgPSAwOworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCAmJgorCSAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSB7CisJCWNwbXVjdHJsID0gdHIzMihURzNfQ1BNVV9DVFJMKTsKKwkJaWYgKGNwbXVjdHJsICYgQ1BNVV9DVFJMX0dQSFlfMTBNQl9SWE9OTFkpCisJCQl0dzMyKFRHM19DUE1VX0NUUkwsCisJCQkgICAgIGNwbXVjdHJsICYgfkNQTVVfQ1RSTF9HUEhZXzEwTUJfUlhPTkxZKTsKKwl9CisKIAllcnIgPSB0ZzNfYm1jcl9yZXNldCh0cCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWlmIChjcG11Y3RybCAmIENQTVVfQ1RSTF9HUEhZXzEwTUJfUlhPTkxZKSB7CisJCXUzMiBwaHk7CisKKwkJcGh5ID0gTUlJX1RHM19EU1BfRVhQOF9BRURXIHwgTUlJX1RHM19EU1BfRVhQOF9SRUoyTUh6OworCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCBNSUlfVEczX0RTUF9FWFA4LCBwaHkpOworCisJCXR3MzIoVEczX0NQTVVfQ1RSTCwgY3BtdWN0cmwpOworCX0KKwogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NjFfNTc4NF9BWF9GSVhFUykgewogCQl1MzIgdmFsOwogCkBAIC0xMTI0LDYgKzExOTIsOCBAQAogCQkJICAgICBNSUlfVEczX01JU0NfU0hEV19BUERfV0tUTV84NE1TKTsKIAl9CiAKKwl0ZzNfcGh5X2FwcGx5X290cCh0cCk7CisKIG91dDoKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfQURDX0JVRykgewogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7CkBAIC00MDY1LDExICs0MTM1LDIxIEBACiAJCQkJICAgICAgIHUzMiBsYXN0X3BsdXNfb25lLCB1MzIgKnN0YXJ0LAogCQkJCSAgICAgICB1MzIgYmFzZV9mbGFncywgdTMyIG1zcykKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiAJZG1hX2FkZHJfdCBuZXdfYWRkciA9IDA7CiAJdTMyIGVudHJ5ID0gKnN0YXJ0OwogCWludCBpLCByZXQgPSAwOwogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAxKQorCQluZXdfc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwllbHNlIHsKKwkJaW50IG1vcmVfaGVhZHJvb20gPSA0IC0gKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDMpOworCisJCW5ld19za2IgPSBza2JfY29weV9leHBhbmQoc2tiLAorCQkJCQkgIHNrYl9oZWFkcm9vbShza2IpICsgbW9yZV9oZWFkcm9vbSwKKwkJCQkJICBza2JfdGFpbHJvb20oc2tiKSwgR0ZQX0FUT01JQyk7CisJfQorCiAJaWYgKCFuZXdfc2tiKSB7CiAJCXJldCA9IC0xOwogCX0gZWxzZSB7CkBAIC00MzkyLDcgKzQ0NzIsOSBAQAogCiAJd291bGRfaGl0X2h3YnVnID0gMDsKIAotCWlmICh0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKQorCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MDFfRE1BX0JVRykKKwkJd291bGRfaGl0X2h3YnVnID0gMTsKKwllbHNlIGlmICh0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKQogCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCiAJdGczX3NldF90eGQodHAsIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGJhc2VfZmxhZ3MsCkBAIC04NzgxLDcgKzg4NjMsNyBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChkYXRhID09IDApCi0JCWRhdGEgPSAyOworCQlkYXRhID0gVUlOVF9NQVggLyAyOwogCiAJZm9yIChpID0gMDsgaSA8IChkYXRhICogMik7IGkrKykgewogCQlpZiAoKGkgJSAyKSA9PSAwKQpAQCAtOTQ2NCw3ICs5NTQ2LDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gVEczX0xPT1BCQUNLX0ZBSUxFRDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NjFfNTc4NF9BWF9GSVhFUykgeworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkgewogCQlpbnQgaTsKIAkJdTMyIHN0YXR1czsKIApAQCAtOTQ4MSwxNyArOTU2NCwyMyBAQAogCQlpZiAoc3RhdHVzICE9IENQTVVfTVVURVhfR05UX0RSSVZFUikKIAkJCXJldHVybiBURzNfTE9PUEJBQ0tfRkFJTEVEOwogCi0JCS8qIFR1cm4gb2ZmIHBvd2VyIG1hbmFnZW1lbnQgYmFzZWQgb24gbGluayBzcGVlZC4gKi8KKwkJLyogVHVybiBvZmYgbGluay1iYXNlZCBwb3dlciBtYW5hZ2VtZW50LiAqLwogCQljcG11Y3RybCA9IHRyMzIoVEczX0NQTVVfQ1RSTCk7Ci0JCXR3MzIoVEczX0NQTVVfQ1RSTCwKLQkJICAgICBjcG11Y3RybCAmIH4oQ1BNVV9DVFJMX0xJTktfU1BFRURfTU9ERSB8Ci0JCQkJICBDUE1VX0NUUkxfTElOS19BV0FSRV9NT0RFKSk7CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAorCQkgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IENISVBSRVZfNTc2MV9BWCkKKwkJCXR3MzIoVEczX0NQTVVfQ1RSTCwKKwkJCSAgICAgY3BtdWN0cmwgJiB+KENQTVVfQ1RSTF9MSU5LX1NQRUVEX01PREUgfAorCQkJCQkgIENQTVVfQ1RSTF9MSU5LX0FXQVJFX01PREUpKTsKKwkJZWxzZQorCQkJdHczMihURzNfQ1BNVV9DVFJMLAorCQkJICAgICBjcG11Y3RybCAmIH5DUE1VX0NUUkxfTElOS19BV0FSRV9NT0RFKTsKIAl9CiAKIAlpZiAodGczX3J1bl9sb29wYmFjayh0cCwgVEczX01BQ19MT09QQkFDSykpCiAJCWVyciB8PSBURzNfTUFDX0xPT1BCQUNLX0ZBSUxFRDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NjFfNTc4NF9BWF9GSVhFUykgeworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSkgewogCQl0dzMyKFRHM19DUE1VX0NUUkwsIGNwbXVjdHJsKTsKIAogCQkvKiBSZWxlYXNlIHRoZSBtdXRleCAqLwpAQCAtMTA3MjQsOSArMTA4MTMsOCBAQAogCQkgICAgdHAtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9ERUxMKQogCQkJdHAtPmxlZF9jdHJsID0gTEVEX0NUUkxfTU9ERV9QSFlfMjsKIAotCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3ODRfQTAgfHwKLQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzg0X0ExKQotCQkJdHAtPmxlZF9jdHJsID0gTEVEX0NUUkxfTU9ERV9NQUM7CisJCWlmIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQ0hJUFJFVl81Nzg0X0FYKQorCQkJdHAtPmxlZF9jdHJsID0gTEVEX0NUUkxfTU9ERV9QSFlfMTsKIAogCQlpZiAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0VFUFJPTV9XUCkgewogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKQEAgLTEwNzczLDYgKzEwODYxLDU1IEBACiAJfQogfQogCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0ZzNfaXNzdWVfb3RwX2NvbW1hbmQoc3RydWN0IHRnMyAqdHAsIHUzMiBjbWQpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKworCXR3MzIoT1RQX0NUUkwsIGNtZCB8IE9UUF9DVFJMX09UUF9DTURfU1RBUlQpOworCXR3MzIoT1RQX0NUUkwsIGNtZCk7CisKKwkvKiBXYWl0IGZvciB1cCB0byAxIG1zIGZvciBjb21tYW5kIHRvIGV4ZWN1dGUuICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCXZhbCA9IHRyMzIoT1RQX1NUQVRVUyk7CisJCWlmICh2YWwgJiBPVFBfU1RBVFVTX0NNRF9ET05FKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCisJcmV0dXJuICh2YWwgJiBPVFBfU1RBVFVTX0NNRF9ET05FKSA/IDAgOiAtRUJVU1k7Cit9CisKKy8qIFJlYWQgdGhlIGdwaHkgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBPVFAgcmVnaW9uIG9mIHRoZSBjaGlwLiAgVGhlIGdwaHkKKyAqIGNvbmZpZ3VyYXRpb24gaXMgYSAzMi1iaXQgdmFsdWUgdGhhdCBzdHJhZGRsZXMgdGhlIGFsaWdubWVudCBib3VuZGFyeS4KKyAqIFdlIGRvIHR3byAzMi1iaXQgcmVhZHMgYW5kIHRoZW4gc2hpZnQgYW5kIG1lcmdlIHRoZSByZXN1bHRzLgorICovCitzdGF0aWMgdTMyIF9fZGV2aW5pdCB0ZzNfcmVhZF9vdHBfcGh5Y2ZnKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBiaGFsZl9vdHAsIHRoYWxmX290cDsKKworCXR3MzIoT1RQX01PREUsIE9UUF9NT0RFX09UUF9USFJVX0dSQyk7CisKKwlpZiAodGczX2lzc3VlX290cF9jb21tYW5kKHRwLCBPVFBfQ1RSTF9PVFBfQ01EX0lOSVQpKQorCQlyZXR1cm4gMDsKKworCXR3MzIoT1RQX0FERFJFU1MsIE9UUF9BRERSRVNTX01BR0lDMSk7CisKKwlpZiAodGczX2lzc3VlX290cF9jb21tYW5kKHRwLCBPVFBfQ1RSTF9PVFBfQ01EX1JFQUQpKQorCQlyZXR1cm4gMDsKKworCXRoYWxmX290cCA9IHRyMzIoT1RQX1JFQURfREFUQSk7CisKKwl0dzMyKE9UUF9BRERSRVNTLCBPVFBfQUREUkVTU19NQUdJQzIpOworCisJaWYgKHRnM19pc3N1ZV9vdHBfY29tbWFuZCh0cCwgT1RQX0NUUkxfT1RQX0NNRF9SRUFEKSkKKwkJcmV0dXJuIDA7CisKKwliaGFsZl9vdHAgPSB0cjMyKE9UUF9SRUFEX0RBVEEpOworCisJcmV0dXJuICgodGhhbGZfb3RwICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKGJoYWxmX290cCA+PiAxNik7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19waHlfcHJvYmUoc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIGh3X3BoeV9pZF8xLCBod19waHlfaWRfMjsKQEAgLTExMjE0LDYgKzExMzUxLDM4IEBACiAJCX0KIAl9CiAKKwlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkgeworCQlzdGF0aWMgc3RydWN0IHRnM19kZXZfaWQgeworCQkJdTMyCXZlbmRvcjsKKwkJCXUzMglkZXZpY2U7CisJCX0gYnJpZGdlX2NoaXBzZXRzW10gPSB7CisJCQl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfUFhIXzAgfSwKKwkJCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9QWEhfMSB9LAorCQkJeyB9LAorCQl9OworCQlzdHJ1Y3QgdGczX2Rldl9pZCAqcGNpX2lkID0gJmJyaWRnZV9jaGlwc2V0c1swXTsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IE5VTEw7CisKKwkJd2hpbGUgKHBjaV9pZC0+dmVuZG9yICE9IDApIHsKKwkJCWJyaWRnZSA9IHBjaV9nZXRfZGV2aWNlKHBjaV9pZC0+dmVuZG9yLAorCQkJCQkJcGNpX2lkLT5kZXZpY2UsCisJCQkJCQlicmlkZ2UpOworCQkJaWYgKCFicmlkZ2UpIHsKKwkJCQlwY2lfaWQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChicmlkZ2UtPnN1Ym9yZGluYXRlICYmCisJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPm51bWJlciA8PQorCQkJICAgICB0cC0+cGRldi0+YnVzLT5udW1iZXIpICYmCisJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPnN1Ym9yZGluYXRlID49CisJCQkgICAgIHRwLT5wZGV2LT5idXMtPm51bWJlcikpIHsKKwkJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM181NzAxX0RNQV9CVUc7CisJCQkJcGNpX2Rldl9wdXQoYnJpZGdlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwogCS8qIFRoZSBFUEIgYnJpZGdlIGluc2lkZSA1NzE0LCA1NzE1LCBhbmQgNTc4MCBjYW5ub3Qgc3VwcG9ydAogCSAqIERNQSBhZGRyZXNzZXMgPiA0MC1iaXQuIFRoaXMgYnJpZGdlIG1heSBoYXZlIG90aGVyIGFkZGl0aW9uYWwKIAkgKiA1N3h4IGRldmljZXMgYmVoaW5kIGl0IGluIHNvbWUgNC1wb3J0IE5JQyBkZXNpZ25zIGZvciBleGFtcGxlLgpAQCAtMTE1ODYsNiArMTE3NTUsMTMgQEAKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9CRVJfQlVHOwogCX0KIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCAmJgorCSAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSB7CisJCXRwLT5waHlfb3RwID0gdGczX3JlYWRfb3RwX3BoeWNmZyh0cCk7CisJCWlmICh0cC0+cGh5X290cCA9PSAwKQorCQkJdHAtPnBoeV9vdHAgPSBURzNfT1RQX0RFRkFVTFQ7CisJfQorCiAJdHAtPmNvYWxlc2NlX21vZGUgPSAwOwogCWlmIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81NzAwX0FYICYmCiAJICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3MDBfQlgpCkBAIC0xMTg0MSw3ICsxMjAxNyw3IEBACiAJfQogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCZkZXYtPmRldl9hZGRyWzBdKSkgewotI2lmZGVmIENPTkZJR19TUEFSQzY0CisjaWZkZWYgQ09ORklHX1NQQVJDCiAJCWlmICghdGczX2dldF9kZWZhdWx0X21hY2FkZHJfc3BhcmModHApKQogCQkJcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTEyNDQ2LDcgKzEyNjIyLDggQEAKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCB0ZzNfdmVyc2lvbl9wcmludGVkID0gMDsKLQl1bnNpZ25lZCBsb25nIHRnM3JlZ19iYXNlLCB0ZzNyZWdfbGVuOworCXJlc291cmNlX3NpemVfdCB0ZzNyZWdfYmFzZTsKKwl1bnNpZ25lZCBsb25nIHRnM3JlZ19sZW47CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdGczICp0cDsKIAlpbnQgZXJyLCBwbV9jYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDM5MzhlYjMuLmM2ODhjM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0xMzgsNiArMTM4LDggQEAKICNkZWZpbmUgICBDSElQUkVWXzU3MDRfQlgJCSAweDIxCiAjZGVmaW5lICAgQ0hJUFJFVl81NzUwX0FYCQkgMHg0MAogI2RlZmluZSAgIENISVBSRVZfNTc1MF9CWAkJIDB4NDEKKyNkZWZpbmUgICBDSElQUkVWXzU3ODRfQVgJCSAweDU3ODQwCisjZGVmaW5lICAgQ0hJUFJFVl81NzYxX0FYCQkgMHg1NzYxMAogI2RlZmluZSAgR0VUX01FVEFMX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgJiAweGZmKQogI2RlZmluZSAgIE1FVEFMX1JFVl9BMAkJCSAweDAwCiAjZGVmaW5lICAgTUVUQUxfUkVWX0ExCQkJIDB4MDEKQEAgLTg2Niw2ICs4NjgsNyBAQAogI2RlZmluZSAgQ1BNVV9DVFJMX0xJTktfSURMRV9NT0RFCSAweDAwMDAwMjAwCiAjZGVmaW5lICBDUE1VX0NUUkxfTElOS19BV0FSRV9NT0RFCSAweDAwMDAwNDAwCiAjZGVmaW5lICBDUE1VX0NUUkxfTElOS19TUEVFRF9NT0RFCSAweDAwMDA0MDAwCisjZGVmaW5lICBDUE1VX0NUUkxfR1BIWV8xME1CX1JYT05MWQkgMHgwMDAxMDAwMAogI2RlZmluZSBURzNfQ1BNVV9MU1BEXzEwTUJfQ0xLCQkweDAwMDAzNjA0CiAjZGVmaW5lICBDUE1VX0xTUERfMTBNQl9NQUNDTEtfTUFTSwkgMHgwMDFmMDAwMAogI2RlZmluZSAgQ1BNVV9MU1BEXzEwTUJfTUFDQ0xLXzZfMjUJIDB4MDAxMzAwMDAKQEAgLTE1NTksNyArMTU2MiwyNCBAQAogLyogMHg3MDJjIHVudXNlZCAqLwogCiAjZGVmaW5lIE5WUkFNX0FERFJfTE9DS09VVAkJMHgwMDAwNzAzMAotLyogMHg3MDM0IC0tPiAweDdjMDAgdW51c2VkICovCisvKiAweDcwMzQgLS0+IDB4NzUwMCB1bnVzZWQgKi8KKworI2RlZmluZSBPVFBfTU9ERQkJCTB4MDAwMDc1MDAKKyNkZWZpbmUgT1RQX01PREVfT1RQX1RIUlVfR1JDCQkgMHgwMDAwMDAwMQorI2RlZmluZSBPVFBfQ1RSTAkJCTB4MDAwMDc1MDQKKyNkZWZpbmUgT1RQX0NUUkxfT1RQX1BST0dfRU5BQkxFCSAweDAwMjAwMDAwCisjZGVmaW5lIE9UUF9DVFJMX09UUF9DTURfUkVBRAkJIDB4MDAwMDAwMDAKKyNkZWZpbmUgT1RQX0NUUkxfT1RQX0NNRF9JTklUCQkgMHgwMDAwMDAwOAorI2RlZmluZSBPVFBfQ1RSTF9PVFBfQ01EX1NUQVJUCQkgMHgwMDAwMDAwMQorI2RlZmluZSBPVFBfU1RBVFVTCQkJMHgwMDAwNzUwOAorI2RlZmluZSBPVFBfU1RBVFVTX0NNRF9ET05FCQkgMHgwMDAwMDAwMQorI2RlZmluZSBPVFBfQUREUkVTUwkJCTB4MDAwMDc1MGMKKyNkZWZpbmUgT1RQX0FERFJFU1NfTUFHSUMxCQkgMHgwMDAwMDBhMAorI2RlZmluZSBPVFBfQUREUkVTU19NQUdJQzIJCSAweDAwMDAwMDgwCisvKiAweDc1MTAgdW51c2VkICovCisKKyNkZWZpbmUgT1RQX1JFQURfREFUQQkJCTB4MDAwMDc1MTQKKy8qIDB4NzUxOCAtLT4gMHg3YzA0IHVudXNlZCAqLwogCiAjZGVmaW5lIFBDSUVfVFJBTlNBQ1RJT05fQ0ZHCQkweDAwMDA3YzA0CiAjZGVmaW5lIFBDSUVfVFJBTlNfQ0ZHXzFTSE9UX01TSQkgMHgyMDAwMDAwMApAQCAtMTU2OCw2ICsxNTg4LDI4IEBACiAjZGVmaW5lIFBDSUVfUFdSX01HTVRfVEhSRVNICQkweDAwMDA3ZDI4CiAjZGVmaW5lIFBDSUVfUFdSX01HTVRfTDFfVEhSRVNIX01TSwkgMHgwMDAwZmYwMAogCisKKy8qIE9UUCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVEczX09UUF9BR0NUR1RfTUFTSwkJMHgwMDAwMDBlMAorI2RlZmluZSBURzNfT1RQX0FHQ1RHVF9TSElGVAkJMQorI2RlZmluZSBURzNfT1RQX0hQRkZMVFJfTUFTSwkJMHgwMDAwMDMwMAorI2RlZmluZSBURzNfT1RQX0hQRkZMVFJfU0hJRlQJCTEKKyNkZWZpbmUgVEczX09UUF9IUEZPVkVSX01BU0sJCTB4MDAwMDA0MDAKKyNkZWZpbmUgVEczX09UUF9IUEZPVkVSX1NISUZUCQkxCisjZGVmaW5lIFRHM19PVFBfTFBGRElTX01BU0sJCTB4MDAwMDA4MDAKKyNkZWZpbmUgVEczX09UUF9MUEZESVNfU0hJRlQJCTExCisjZGVmaW5lIFRHM19PVFBfVkRBQ19NQVNLCQkweGZmMDAwMDAwCisjZGVmaW5lIFRHM19PVFBfVkRBQ19TSElGVAkJMjQKKyNkZWZpbmUgVEczX09UUF8xMEJUQU1QX01BU0sJCTB4MDAwMGYwMDAKKyNkZWZpbmUgVEczX09UUF8xMEJUQU1QX1NISUZUCQk4CisjZGVmaW5lIFRHM19PVFBfUk9GRl9NQVNLCQkweDAwZTAwMDAwCisjZGVmaW5lIFRHM19PVFBfUk9GRl9TSElGVAkJMTEKKyNkZWZpbmUgVEczX09UUF9SQ09GRl9NQVNLCQkweDAwMWMwMDAwCisjZGVmaW5lIFRHM19PVFBfUkNPRkZfU0hJRlQJCTE2CisKKyNkZWZpbmUgVEczX09UUF9ERUZBVUxUCQkJMHgyODZjMTY0MAorCisKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQwkJMHg2Njk5NTVhYQogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDX0ZXCQkweGE1MDAwMDAwCiAjZGVmaW5lIFRHM19FRVBST01fTUFHSUNfRldfTVNLCQkweGZmMDAwMDAwCkBAIC0xNzA1LDE1ICsxNzQ3LDMxIEBACiAKICNkZWZpbmUgTUlJX1RHM19EU1BfUldfUE9SVAkJMHgxNSAvKiBEU1AgY29lZmZpY2llbnQgcmVhZC93cml0ZSBwb3J0ICovCiAKLSNkZWZpbmUgTUlJX1RHM19EU1BfQUREUkVTUwkJMHgxNyAvKiBEU1AgYWRkcmVzcyByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfVEczX0VQSFlfUFRFU1QJCTB4MTcgLyogNTkwNiBQSFkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX1RHM19EU1BfQUREUkVTUwkJMHgxNyAvKiBEU1AgYWRkcmVzcyByZWdpc3RlciAqLworCisjZGVmaW5lIE1JSV9URzNfRFNQX1RBUDEJCTB4MDAwMQorI2RlZmluZSAgTUlJX1RHM19EU1BfVEFQMV9BR0NUR1RfREZMVAkweDAwMDcKKyNkZWZpbmUgTUlJX1RHM19EU1BfQUFESjFDSDAJCTB4MDAxZgorI2RlZmluZSBNSUlfVEczX0RTUF9BQURKMUNIMwkJMHg2MDFmCisjZGVmaW5lICBNSUlfVEczX0RTUF9BQURKMUNIM19BRENDS0FESgkweDAwMDIKKyNkZWZpbmUgTUlJX1RHM19EU1BfRVhQOAkJMHgwNzA4CisjZGVmaW5lICBNSUlfVEczX0RTUF9FWFA4X1JFSjJNSHoJMHgwMDAxCisjZGVmaW5lICBNSUlfVEczX0RTUF9FWFA4X0FFRFcJCTB4MDIwMAorI2RlZmluZSBNSUlfVEczX0RTUF9FWFA3NQkJMHgwZjc1CisjZGVmaW5lIE1JSV9URzNfRFNQX0VYUDk2CQkweDBmOTYKKyNkZWZpbmUgTUlJX1RHM19EU1BfRVhQOTcJCTB4MGY5NwogCiAjZGVmaW5lIE1JSV9URzNfQVVYX0NUUkwJCTB4MTggLyogYXV4aWxsaWFyeSBjb250cm9sIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgTUlJX1RHM19BVVhDVExfTUlTQ19XUkVOCTB4ODAwMAogI2RlZmluZSBNSUlfVEczX0FVWENUTF9NSVNDX0ZPUkNFX0FNRElYCTB4MDIwMAogI2RlZmluZSBNSUlfVEczX0FVWENUTF9NSVNDX1JEU0VMX01JU0MJMHg3MDAwCi0jZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQwkJMHgwMDA3CisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQwkweDAwMDcKKworI2RlZmluZSBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQQkweDA4MDAKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REIJMHgwNDAwCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMCTB4MDAwMAogCiAjZGVmaW5lIE1JSV9URzNfQVVYX1NUQVQJCTB4MTkgLyogYXV4aWxsaWFyeSBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX1RHM19BVVhfU1RBVF9MUEFTUwkJMHgwMDA0CkBAIC0xNzQzLDYgKzE4MDEsMjAgQEAKICNkZWZpbmUgTUlJX1RHM19JTlRfRFVQTEVYQ0hHCQkweDAwMDgKICNkZWZpbmUgTUlJX1RHM19JTlRfQU5FR19QQUdFX1JYCTB4MDQwMAogCisjZGVmaW5lIE1JSV9URzNfTUlTQ19TSERXCQkweDFjCisjZGVmaW5lIE1JSV9URzNfTUlTQ19TSERXX1dSRU4JCTB4ODAwMAorI2RlZmluZSBNSUlfVEczX01JU0NfU0hEV19TQ1I1X1NFTAkweDE0MDAKKyNkZWZpbmUgTUlJX1RHM19NSVNDX1NIRFdfQVBEX1NFTAkweDI4MDAKKworI2RlZmluZSBNSUlfVEczX01JU0NfU0hEV19TQ1I1X0MxMjVPRQkweDAwMDEKKyNkZWZpbmUgTUlJX1RHM19NSVNDX1NIRFdfU0NSNV9ETExBUEQJMHgwMDAyCisjZGVmaW5lIE1JSV9URzNfTUlTQ19TSERXX1NDUjVfU0RUTAkweDAwMDQKKyNkZWZpbmUgTUlJX1RHM19NSVNDX1NIRFdfU0NSNV9ETFBUTE0JMHgwMDA4CisjZGVmaW5lIE1JSV9URzNfTUlTQ19TSERXX1NDUjVfTFBFRAkweDAwMTAKKworI2RlZmluZSBNSUlfVEczX01JU0NfU0hEV19BUERfV0tUTV84NE1TCTB4MDAwMQorI2RlZmluZSBNSUlfVEczX01JU0NfU0hEV19BUERfRU5BQkxFCTB4MDAyMAorCiAjZGVmaW5lIE1JSV9URzNfRVBIWV9URVNUCQkweDFmIC8qIDU5MDYgUEhZIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9URzNfRVBIWV9TSEFET1dfRU4JCTB4ODAKIApAQCAtMjQwNCw2ICsyNDc2LDcgQEAKICNkZWZpbmUgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUwkweDAwMDAwMDAxCiAjZGVmaW5lIFRHM19GTEczX0VOQUJMRV9BUEUJCTB4MDAwMDAwMDIKICNkZWZpbmUgVEczX0ZMRzNfNTc2MV81Nzg0X0FYX0ZJWEVTCTB4MDAwMDAwMDQKKyNkZWZpbmUgVEczX0ZMRzNfNTcwMV9ETUFfQlVHCQkweDAwMDAwMDA4CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CiAJdTE2CQkJCXRpbWVyX2NvdW50ZXI7CkBAIC0yNDczLDYgKzI1NDYsNyBAQAogI2RlZmluZSBQSFlfUkVWX0JDTTU0MTFfWDAJCTB4MSAvKiBGb3VuZCBvbiBOZXRnZWFyIEdBMzAyVCAqLwogCiAJdTMyCQkJCWxlZF9jdHJsOworCXUzMgkJCQlwaHlfb3RwOwogCXUxNgkJCQlwY2lfY21kOwogCiAJY2hhcgkJCQlib2FyZF9wYXJ0X251bWJlclsyNF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90bGFuLmMgYi9kcml2ZXJzL25ldC90bGFuLmMKaW5kZXggM2FmNWI5Mi4uMDE2NjQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3RsYW4uYwpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIFRMYW5fSGFuZGxlSW52YWxpZCggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGhvc3RfaW50ICkKK3N0YXRpYyB1MzIgVExhbl9IYW5kbGVJbnZhbGlkKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgaG9zdF9pbnQgKQogewogCS8qIHByaW50ayggIlRMQU46ICBJbnZhbGlkIGludGVycnVwdCBvbiAlcy5cbiIsIGRldi0+bmFtZSApOyAqLwogCXJldHVybiAwOwpAQCAtMTQzMiw3ICsxNDMyLDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIFRMYW5fSGFuZGxlVHhFT0YoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBob3N0X2ludCApCitzdGF0aWMgdTMyIFRMYW5fSGFuZGxlVHhFT0YoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBob3N0X2ludCApCiB7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQJCWVvYyA9IDA7CkBAIC0xNTE4LDcgKzE1MTgsNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi11MzIgVExhbl9IYW5kbGVTdGF0T3ZlcmZsb3coIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBob3N0X2ludCApCitzdGF0aWMgdTMyIFRMYW5fSGFuZGxlU3RhdE92ZXJmbG93KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgaG9zdF9pbnQgKQogewogCVRMYW5fUmVhZEFuZENsZWFyU3RhdHMoIGRldiwgVExBTl9SRUNPUkQgKTsKIApAQCAtMTU1NCw3ICsxNTU0LDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIFRMYW5fSGFuZGxlUnhFT0YoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBob3N0X2ludCApCitzdGF0aWMgdTMyIFRMYW5fSGFuZGxlUnhFT0YoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBob3N0X2ludCApCiB7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIJCWFjayA9IDA7CkBAIC0xNjg5LDcgKzE2ODksNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi11MzIgVExhbl9IYW5kbGVEdW1teSggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGhvc3RfaW50ICkKK3N0YXRpYyB1MzIgVExhbl9IYW5kbGVEdW1teSggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGhvc3RfaW50ICkKIHsKIAlwcmludGsoICJUTEFOOiAgVGVzdCBpbnRlcnJ1cHQgb24gJXMuXG4iLCBkZXYtPm5hbWUgKTsKIAlyZXR1cm4gMTsKQEAgLTE3MTksNyArMTcxOSw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXUzMiBUTGFuX0hhbmRsZVR4RU9DKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgaG9zdF9pbnQgKQorc3RhdGljIHUzMiBUTGFuX0hhbmRsZVR4RU9DKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgaG9zdF9pbnQgKQogewogCVRMYW5Qcml2YXRlSW5mbwkqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJVExhbkxpc3QJCSpoZWFkX2xpc3Q7CkBAIC0xNzY3LDcgKzE3NjcsNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi11MzIgVExhbl9IYW5kbGVTdGF0dXNDaGVjayggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGhvc3RfaW50ICkKK3N0YXRpYyB1MzIgVExhbl9IYW5kbGVTdGF0dXNDaGVjayggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGhvc3RfaW50ICkKIHsKIAlUTGFuUHJpdmF0ZUluZm8JKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMgkJYWNrOwpAQCAtMTg0Miw3ICsxODQyLDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIFRMYW5fSGFuZGxlUnhFT0MoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBob3N0X2ludCApCitzdGF0aWMgdTMyIFRMYW5fSGFuZGxlUnhFT0MoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBob3N0X2ludCApCiB7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkbWFfYWRkcl90CWhlYWRfbGlzdF9waHlzOwpAQCAtMTkwMiw3ICsxOTAyLDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBUTGFuX1RpbWVyKCB1bnNpZ25lZCBsb25nIGRhdGEgKQorc3RhdGljIHZvaWQgVExhbl9UaW1lciggdW5zaWduZWQgbG9uZyBkYXRhICkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE5ODMsNyArMTk4Myw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgVExhbl9SZXNldExpc3RzKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKK3N0YXRpYyB2b2lkIFRMYW5fUmVzZXRMaXN0cyggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCiB7CiAJVExhblByaXZhdGVJbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQJCWk7CkBAIC0yMDQzLDcgKzIwNDMsNyBAQAogfSAvKiBUTGFuX1Jlc2V0TGlzdHMgKi8KIAogCi12b2lkIFRMYW5fRnJlZUxpc3RzKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKK3N0YXRpYyB2b2lkIFRMYW5fRnJlZUxpc3RzKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKIHsKIAlUTGFuUHJpdmF0ZUluZm8gKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludAkJaTsKQEAgLTIwOTIsNyArMjA5Miw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgVExhbl9QcmludERpbyggdTE2IGlvX2Jhc2UgKQorc3RhdGljIHZvaWQgVExhbl9QcmludERpbyggdTE2IGlvX2Jhc2UgKQogewogCXUzMiBkYXRhMCwgZGF0YTE7CiAJaW50CWk7CkBAIC0yMTI3LDcgKzIxMjcsNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIFRMYW5fUHJpbnRMaXN0KCBUTGFuTGlzdCAqbGlzdCwgY2hhciAqdHlwZSwgaW50IG51bSkKK3N0YXRpYyB2b2lkIFRMYW5fUHJpbnRMaXN0KCBUTGFuTGlzdCAqbGlzdCwgY2hhciAqdHlwZSwgaW50IG51bSkKIHsKIAlpbnQgaTsKIApAQCAtMjE2Myw3ICsyMTYzLDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBUTGFuX1JlYWRBbmRDbGVhclN0YXRzKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcmVjb3JkICkKK3N0YXRpYyB2b2lkIFRMYW5fUmVhZEFuZENsZWFyU3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByZWNvcmQgKQogewogCVRMYW5Qcml2YXRlSW5mbwkqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyCQl0eF9nb29kLCB0eF91bmRlcjsKQEAgLTIyMzgsNyArMjIzOCw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBUTGFuX1Jlc2V0QWRhcHRlciggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCiB7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTIzMjQsNyArMjMyNCw3IEBACiAKIAogCi12b2lkCitzdGF0aWMgdm9pZAogVExhbl9GaW5pc2hSZXNldCggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCiB7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI0NDgsNyArMjQ0OCw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgVExhbl9TZXRNYWMoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhcmVnLCBjaGFyICptYWMgKQorc3RhdGljIHZvaWQgVExhbl9TZXRNYWMoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhcmVnLCBjaGFyICptYWMgKQogewogCWludCBpOwogCkBAIC0yNDkwLDcgKzI0OTAsNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIFRMYW5fUGh5UHJpbnQoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQorc3RhdGljIHZvaWQgVExhbl9QaHlQcmludCggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCiB7CiAJVExhblByaXZhdGVJbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MTYgaSwgZGF0YTAsIGRhdGExLCBkYXRhMiwgZGF0YTMsIHBoeTsKQEAgLTI1MzksNyArMjUzOSw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgVExhbl9QaHlEZXRlY3QoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQorc3RhdGljIHZvaWQgVExhbl9QaHlEZXRlY3QoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogewogCVRMYW5Qcml2YXRlSW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2CQljb250cm9sOwpAQCAtMjU4Niw3ICsyNTg2LDcgQEAKIAogCiAKLXZvaWQgVExhbl9QaHlQb3dlckRvd24oIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQorc3RhdGljIHZvaWQgVExhbl9QaHlQb3dlckRvd24oIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogewogCVRMYW5Qcml2YXRlSW5mbwkqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2CQl2YWx1ZTsKQEAgLTI2MTEsNyArMjYxMSw3IEBACiAKIAogCi12b2lkIFRMYW5fUGh5UG93ZXJVcCggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCitzdGF0aWMgdm9pZCBUTGFuX1BoeVBvd2VyVXAoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogewogCVRMYW5Qcml2YXRlSW5mbwkqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2CQl2YWx1ZTsKQEAgLTI2MzIsNyArMjYzMiw3IEBACiAKIAogCi12b2lkIFRMYW5fUGh5UmVzZXQoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQorc3RhdGljIHZvaWQgVExhbl9QaHlSZXNldCggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCiB7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MTYJCXBoeTsKQEAgLTI2NjAsNyArMjY2MCw3IEBACiAKIAogCi12b2lkIFRMYW5fUGh5U3RhcnRMaW5rKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKK3N0YXRpYyB2b2lkIFRMYW5fUGh5U3RhcnRMaW5rKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKIHsKIAlUTGFuUHJpdmF0ZUluZm8JKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNgkJYWJpbGl0eTsKQEAgLTI3NDcsNyArMjc0Nyw3IEBACiAKIAogCi12b2lkIFRMYW5fUGh5RmluaXNoQXV0b05lZyggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCitzdGF0aWMgdm9pZCBUTGFuX1BoeUZpbmlzaEF1dG9OZWcoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogewogCVRMYW5Qcml2YXRlSW5mbwkqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2CQlhbl9hZHY7CkBAIC0yOTAzLDcgKzI5MDMsNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1pbnQgVExhbl9NaWlSZWFkUmVnKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcGh5LCB1MTYgcmVnLCB1MTYgKnZhbCApCitzdGF0aWMgaW50IFRMYW5fTWlpUmVhZFJlZyggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHBoeSwgdTE2IHJlZywgdTE2ICp2YWwgKQogewogCXU4CW5hY2s7CiAJdTE2CXNpbywgdG1wOwpAQCAtMjk5Myw3ICsyOTkzLDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBUTGFuX01paVNlbmREYXRhKCB1MTYgYmFzZV9wb3J0LCB1MzIgZGF0YSwgdW5zaWduZWQgbnVtX2JpdHMgKQorc3RhdGljIHZvaWQgVExhbl9NaWlTZW5kRGF0YSggdTE2IGJhc2VfcG9ydCwgdTMyIGRhdGEsIHVuc2lnbmVkIG51bV9iaXRzICkKIHsKIAl1MTYgc2lvOwogCXUzMiBpOwpAQCAtMzAzNSw3ICszMDM1LDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBUTGFuX01paVN5bmMoIHUxNiBiYXNlX3BvcnQgKQorc3RhdGljIHZvaWQgVExhbl9NaWlTeW5jKCB1MTYgYmFzZV9wb3J0ICkKIHsKIAlpbnQgaTsKIAl1MTYgc2lvOwpAQCAtMzA3NCw3ICszMDc0LDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBUTGFuX01paVdyaXRlUmVnKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcGh5LCB1MTYgcmVnLCB1MTYgdmFsICkKK3N0YXRpYyB2b2lkIFRMYW5fTWlpV3JpdGVSZWcoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBwaHksIHUxNiByZWcsIHUxNiB2YWwgKQogewogCXUxNglzaW87CiAJaW50CW1pbnRlbjsKQEAgLTMxNDQsNyArMzE0NCw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgVExhbl9FZVNlbmRTdGFydCggdTE2IGlvX2Jhc2UgKQorc3RhdGljIHZvaWQgVExhbl9FZVNlbmRTdGFydCggdTE2IGlvX2Jhc2UgKQogewogCXUxNglzaW87CiAKQEAgLTMxODQsNyArMzE4NCw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWludCBUTGFuX0VlU2VuZEJ5dGUoIHUxNiBpb19iYXNlLCB1OCBkYXRhLCBpbnQgc3RvcCApCitzdGF0aWMgaW50IFRMYW5fRWVTZW5kQnl0ZSggdTE2IGlvX2Jhc2UsIHU4IGRhdGEsIGludCBzdG9wICkKIHsKIAlpbnQJZXJyOwogCXU4CXBsYWNlOwpAQCAtMzI0NSw3ICszMjQ1LDcgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBUTGFuX0VlUmVjZWl2ZUJ5dGUoIHUxNiBpb19iYXNlLCB1OCAqZGF0YSwgaW50IHN0b3AgKQorc3RhdGljIHZvaWQgVExhbl9FZVJlY2VpdmVCeXRlKCB1MTYgaW9fYmFzZSwgdTggKmRhdGEsIGludCBzdG9wICkKIHsKIAl1OCAgcGxhY2U7CiAJdTE2IHNpbzsKQEAgLTMzMDMsNyArMzMwMyw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWludCBUTGFuX0VlUmVhZEJ5dGUoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGVlX2FkZHIsIHU4ICpkYXRhICkKK3N0YXRpYyBpbnQgVExhbl9FZVJlYWRCeXRlKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBlZV9hZGRyLCB1OCAqZGF0YSApCiB7CiAJaW50IGVycjsKIAlUTGFuUHJpdmF0ZUluZm8gKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCA0NGEwNmY4Li40NTIwOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtNDIsNiArNDIsNyBAQAogCiAjZGVmaW5lIFhMX0RFQlVHIDAKIAorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNDA4LDcgKzQwOSw3IEBACiAJdD1qaWZmaWVzOwogCXdoaWxlIChyZWFkdyh4bF9tbWlvICsgTU1JT19JTlRTVEFUVVMpICYgSU5UU1RBVF9DTURfSU5fUFJPR1JFU1MpIHsgCiAJCXNjaGVkdWxlKCk7CQkKLQkJaWYoamlmZmllcy10ID4gNDAqSFopIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdCArIDQwICogSFopKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAzQ09NIDNDMzU5IFZlbG9jaXR5IFhMICBjYXJkIG5vdCByZXNwb25kaW5nIHRvIGdsb2JhbCByZXNldC5cbiIsIGRldi0+bmFtZSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtNTE5LDcgKzUyMCw3IEBACiAJdD1qaWZmaWVzOwogCXdoaWxlICggIShyZWFkdyh4bF9tbWlvICsgTU1JT19JTlRTVEFUVVNfQVVUTykgJiBJTlRTVEFUX1NSQikgKSB7IAogCQlzY2hlZHVsZSgpOwkJCi0JCWlmKGppZmZpZXMtdCA+IDE1KkhaKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHQgKyAxNSAqIEhaKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIzQ09NIDNDMzU5IFZlbG9jaXR5IFhMICBjYXJkIG5vdCByZXNwb25kaW5nLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsgCiAJCX0KQEAgLTc5MCw3ICs3OTEsNyBAQAogCXQ9amlmZmllczsKIAl3aGlsZSAoISAocmVhZHcoeGxfbW1pbyArIE1NSU9fSU5UU1RBVFVTKSAmIElOVFNUQVRfU1JCKSkgeyAKIAkJc2NoZWR1bGUoKTsJCQotCQlpZihqaWZmaWVzLXQgPiA0MCpIWikgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0ICsgNDAgKiBIWikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiM0NPTSAzQzM1OSBWZWxvY2l0eSBYTCAgY2FyZCBub3QgcmVzcG9uZGluZy5cbiIpOwogCQkJYnJlYWsgOyAKIAkJfQpAQCAtMTAwMyw3ICsxMDA0LDcgQEAKIAogCXQ9amlmZmllczsKIAl3aGlsZSAocmVhZHcoeGxfbW1pbyArIE1NSU9fSU5UU1RBVFVTKSAmIElOVFNUQVRfQ01EX0lOX1BST0dSRVNTKSB7IAotCQlpZihqaWZmaWVzLXQgPiA0MCpIWikgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0ICsgNDAgKiBIWikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiM0NPTSAzQzM1OSBWZWxvY2l0eSBYTCAgY2FyZCBub3QgcmVzcG9uZGluZy5cbiIpOwogCQkJYnJlYWsgOyAKIAkJfQpAQCAtMTI3MCw3ICsxMjcxLDcgQEAKIAl0PWppZmZpZXM7CiAJd2hpbGUgKHJlYWR3KHhsX21taW8gKyBNTUlPX0lOVFNUQVRVUykgJiBJTlRTVEFUX0NNRF9JTl9QUk9HUkVTUykgeyAKIAkJc2NoZWR1bGUoKTsJCQotCQlpZihqaWZmaWVzLXQgPiAxMCpIWikgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0ICsgMTAgKiBIWikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IDNDT00gM0MzNTkgVmVsb2NpdHkgWEwtRE5TVEFMTCBub3QgcmVzcG9uZGluZy5cbiIsIGRldi0+bmFtZSk7CiAJCQlicmVhayA7IAogCQl9CkBAIC0xMjc5LDcgKzEyODAsNyBAQAogCXQ9amlmZmllczsKIAl3aGlsZSAocmVhZHcoeGxfbW1pbyArIE1NSU9fSU5UU1RBVFVTKSAmIElOVFNUQVRfQ01EX0lOX1BST0dSRVNTKSB7IAogCQlzY2hlZHVsZSgpOwkJCi0JCWlmKGppZmZpZXMtdCA+IDEwKkhaKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHQgKyAxMCAqIEhaKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogM0NPTSAzQzM1OSBWZWxvY2l0eSBYTC1ETkRJU0FCTEUgbm90IHJlc3BvbmRpbmcuXG4iLCBkZXYtPm5hbWUpOwogCQkJYnJlYWsgOwogCQl9CkBAIC0xMjg4LDcgKzEyODksNyBAQAogCXQ9amlmZmllczsKIAl3aGlsZSAocmVhZHcoeGxfbW1pbyArIE1NSU9fSU5UU1RBVFVTKSAmIElOVFNUQVRfQ01EX0lOX1BST0dSRVNTKSB7IAogCQlzY2hlZHVsZSgpOwkJCi0JCWlmKGppZmZpZXMtdCA+IDEwKkhaKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHQgKyAxMCAqIEhaKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogM0NPTSAzQzM1OSBWZWxvY2l0eSBYTC1VUFNUQUxMIG5vdCByZXNwb25kaW5nLlxuIiwgZGV2LT5uYW1lKTsKIAkJCWJyZWFrIDsgCiAJCX0KQEAgLTEzMDUsNyArMTMwNiw3IEBACiAJdD1qaWZmaWVzOwogCXdoaWxlICghKHJlYWR3KHhsX21taW8gKyBNTUlPX0lOVFNUQVRVUykgJiBJTlRTVEFUX1NSQikpIHsgCiAJCXNjaGVkdWxlKCk7CQkKLQkJaWYoamlmZmllcy10ID4gMTAqSFopIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdCArIDEwICogSFopKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAzQ09NIDNDMzU5IFZlbG9jaXR5IFhMLUNMT1NFTklDIG5vdCByZXNwb25kaW5nLlxuIiwgZGV2LT5uYW1lKTsKIAkJCWJyZWFrIDsgCiAJCX0KQEAgLTEzMzQsNyArMTMzNSw3IEBACiAJdD1qaWZmaWVzOwogCXdoaWxlIChyZWFkdyh4bF9tbWlvICsgTU1JT19JTlRTVEFUVVMpICYgSU5UU1RBVF9DTURfSU5fUFJPR1JFU1MpIHsgCiAJCXNjaGVkdWxlKCk7CQkKLQkJaWYoamlmZmllcy10ID4gMTAqSFopIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdCArIDEwICogSFopKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAzQ09NIDNDMzU5IFZlbG9jaXR5IFhMLVVQUkVTRVQgbm90IHJlc3BvbmRpbmcuXG4iLCBkZXYtPm5hbWUpOwogCQkJYnJlYWsgOyAKIAkJfQpAQCAtMTM0Myw3ICsxMzQ0LDcgQEAKIAl0PWppZmZpZXM7CiAJd2hpbGUgKHJlYWR3KHhsX21taW8gKyBNTUlPX0lOVFNUQVRVUykgJiBJTlRTVEFUX0NNRF9JTl9QUk9HUkVTUykgeyAKIAkJc2NoZWR1bGUoKTsJCQotCQlpZihqaWZmaWVzLXQgPiAxMCpIWikgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0ICsgMTAgKiBIWikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IDNDT00gM0MzNTkgVmVsb2NpdHkgWEwtRE5SRVNFVCBub3QgcmVzcG9uZGluZy5cbiIsIGRldi0+bmFtZSk7CiAJCQlicmVhayA7IAogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCA0MzNjOTk0Li4wYWI1MWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogICogT2ZmaWNpYWwgcmVsZWFzZXMgd2lsbCBvbmx5IGhhdmUgYW4gYS5iLmMgdmVyc2lvbiBudW1iZXIgZm9ybWF0LiAKICAqLwogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9IAorc3RhdGljIGNoYXIgdmVyc2lvbltdID0KICJPbHltcGljLmMgdjEuMC41IDYvMDQvMDIgLSBQZXRlciBEZSBTY2hyaWp2ZXIgJiBNaWtlIFBoaWxsaXBzIiA7IAogCiBzdGF0aWMgY2hhciAqb3Blbl9tYWpfZXJyb3JbXSAgPSB7Ik5vIGVycm9yIiwgIkxvYmUgTWVkaWEgVGVzdCIsICJQaHlzaWNhbCBJbnNlcnRpb24iLApAQCAtMjkwLDcgKzI5MCw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG9seW1waWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBvbHltcGljX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICAJc3RydWN0IG9seW1waWNfcHJpdmF0ZSAqb2x5bXBpY19wcml2OwogCXU4IF9faW9tZW0gKm9seW1waWNfbW1pbywgKmluaXRfc3JiLCphZGFwdGVyX2FkZHI7CkBAIC00MzQsNyArNDM0LDcgQEAKIAogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBvbHltcGljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCitzdGF0aWMgaW50IG9seW1waWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBvbHltcGljX3ByaXZhdGUgKm9seW1waWNfcHJpdj1uZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKm9seW1waWNfbW1pbz1vbHltcGljX3ByaXYtPm9seW1waWNfbW1pbywqaW5pdF9zcmI7CkBAIC0xNDM4LDEzICsxNDM4LDE4IEBACiAKIAkJaWYgKG9seW1waWNfcHJpdi0+b2x5bXBpY19uZXR3b3JrX21vbml0b3IpIHsgCiAJCQlzdHJ1Y3QgdHJoX2hkciAqbWFjX2hkcjsKLQkJCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlY2VpdmVkIE1BQyBGcmFtZSwgZGV0YWlsczogXG4iLGRldi0+bmFtZSk7CiAJCQltYWNfaGRyID0gdHJfaGRyKG1hY19mcmFtZSk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTUFDIEZyYW1lIERlc3QuIEFkZHI6ICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWFjX2hkci0+ZGFkZHIpKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNQUMgRnJhbWUgU3JjZS4gQWRkcjogJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtYWNfaGRyLT5zYWRkcikpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1BQyBGcmFtZSBEZXN0LiBBZGRyOiAiCisJCQkgICAgICAgTUFDX0ZNVCAiIFxuIiwgZGV2LT5uYW1lLAorCQkJICAgICAgIG1hY19oZHItPmRhZGRyWzBdLCBtYWNfaGRyLT5kYWRkclsxXSwKKwkJCSAgICAgICBtYWNfaGRyLT5kYWRkclsyXSwgbWFjX2hkci0+ZGFkZHJbM10sCisJCQkgICAgICAgbWFjX2hkci0+ZGFkZHJbNF0sIG1hY19oZHItPmRhZGRyWzVdKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNQUMgRnJhbWUgU3JjZS4gQWRkcjogIgorCQkJICAgICAgIE1BQ19GTVQgIiBcbiIsIGRldi0+bmFtZSwKKwkJCSAgICAgICBtYWNfaGRyLT5zYWRkclswXSwgbWFjX2hkci0+c2FkZHJbMV0sCisJCQkgICAgICAgbWFjX2hkci0+c2FkZHJbMl0sIG1hY19oZHItPnNhZGRyWzNdLAorCQkJICAgICAgIG1hY19oZHItPnNhZGRyWzRdLCBtYWNfaGRyLT5zYWRkcls1XSk7CiAJCX0KIAkJbmV0aWZfcngobWFjX2ZyYW1lKTsKIAkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggODkwOTA1MC4uNWYxYzUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTM0MTMsNyArMzQxMyw3IEBACiAgICAgICAgIHRzdi0+c3ZpID0gVFJBTlNNSVRfU1RBVFVTX0NPREU7CiAgICAgICAgIHRzdi0+c3ZsID0gU19UUkFOU01JVF9TVEFUVVNfQ09ERTsKIAotICAgICAgICB0c3YtPnN2dlswXSA9ICgodHhfZnN0YXR1cyAmIDB4MDEwMCA+PiA2KSB8fCBJQk1fUEFTU19TT1VSQ0VfQUREUik7CisJdHN2LT5zdnZbMF0gPSAoKHR4X2ZzdGF0dXMgJiAweDAxMDAgPj4gNikgfCBJQk1fUEFTU19TT1VSQ0VfQUREUik7CiAKICAgICAgICAgLyogU3RyaXBwZWQgZnJhbWUgc3RhdHVzIG9mIFRyYW5zbWl0dGVkIEZyYW1lICovCiAgICAgICAgIHRzdi0+c3Z2WzFdID0gdHhfZnN0YXR1cyAmIDB4ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKaW5kZXggMzVkMTVlOC4uNmYzM2Y4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMjk3LDE4ICsyOTgsMTEgQEAKIAl1MzIgc3BlZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIERvIGEgZHVtbXkgcmVhZCwgYXMgZm9yIHNvbWUgcmVhc29uIHRoZSBmaXJzdCByZWFkCi0JICogYWZ0ZXIgYSBsaW5rIGJlY29tZXMgdXAgcmV0dXJucyBsaW5rIGRvd24sIGV2ZW4gaWYKLQkgKiBpdCdzIGJlZW4gYSB3aGlsZSBzaW5jZSB0aGUgbGluayBjYW1lIHVwLgotCSAqLwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoeV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWRhdGEtPnBoeV9vaykKIAkJZ290byBvdXQ7CiAKLQl0c2kxMDhfcmVhZF9taWkoZGF0YSwgTUlJX0JNU1IpOwotCiAJZHVwbGV4ID0gbWlpX2NoZWNrX21lZGlhKCZkYXRhLT5taWlfaWYsIG5ldGlmX21zZ19saW5rKGRhdGEpLCBkYXRhLT5pbml0X21lZGlhKTsKIAlkYXRhLT5pbml0X21lZGlhID0gMDsKIApAQCAtMzQ1LDIyICszMzksMjEgQEAKIAogCQkJVFNJX1dSSVRFKFRTSTEwOF9NQUNfQ0ZHMiwgbWFjX2NmZzJfcmVnKTsKIAkJCVRTSV9XUklURShUU0kxMDhfRUNfUE9SVENUUkwsIHBvcnRjdHJsX3JlZyk7Ci0KLQkJCWlmIChkYXRhLT5saW5rX3VwID09IDApIHsKLQkJCQkvKiBUaGUgbWFudWFsIHNheXMgaXQgY2FuIHRha2UgMy00IHVzZWNzIGZvciB0aGUgc3BlZWQgY2hhbmdlCi0JCQkJICogdG8gdGFrZSBlZmZlY3QuCi0JCQkJICovCi0JCQkJdWRlbGF5KDUpOwotCi0JCQkJc3Bpbl9sb2NrKCZkYXRhLT50eGxvY2spOwotCQkJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpICYmIGRhdGEtPnR4ZnJlZSkKLQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCi0JCQkJZGF0YS0+bGlua191cCA9IDE7Ci0JCQkJc3Bpbl91bmxvY2soJmRhdGEtPnR4bG9jayk7Ci0JCQl9CiAJCX0KIAorCQlpZiAoZGF0YS0+bGlua191cCA9PSAwKSB7CisJCQkvKiBUaGUgbWFudWFsIHNheXMgaXQgY2FuIHRha2UgMy00IHVzZWNzIGZvciB0aGUgc3BlZWQgY2hhbmdlCisJCQkgKiB0byB0YWtlIGVmZmVjdC4KKwkJCSAqLworCQkJdWRlbGF5KDUpOworCisJCQlzcGluX2xvY2soJmRhdGEtPnR4bG9jayk7CisJCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSAmJiBkYXRhLT50eGZyZWUpCisJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCisJCQlkYXRhLT5saW5rX3VwID0gMTsKKwkJCXNwaW5fdW5sb2NrKCZkYXRhLT50eGxvY2spOworCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGRhdGEtPmxpbmtfdXAgPT0gMSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtMTI3NCwxMiArMTI2NywxMSBAQAogCSAqIFBIWV9TVEFUIHJlZ2lzdGVyIGJlZm9yZSB0aGUgbGluayB1cCBzdGF0dXMgYml0IGlzIHNldC4KIAkgKi8KIAotCWRhdGEtPmxpbmtfdXAgPSAxOworCWRhdGEtPmxpbmtfdXAgPSAwOwogCiAJd2hpbGUgKCEoKHBoeXZhbCA9IHRzaTEwOF9yZWFkX21paShkYXRhLCBNSUlfQk1TUikpICYKIAkJIEJNU1JfTFNUQVRVUykpIHsKIAkJaWYgKGkrKyA+IChNSUlfUkVBRF9ERUxBWSAvIDEwKSkgewotCQkJZGF0YS0+bGlua191cCA9IDA7CiAJCQlicmVhazsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaHlfbG9jaywgZmxhZ3MpOwpAQCAtMTI4Nyw2ICsxMjc5LDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoeV9sb2NrLCBmbGFncyk7CiAJfQogCisJZGF0YS0+bWlpX2lmLnN1cHBvcnRzX2dtaWkgPSBtaWlfY2hlY2tfZ21paV9zdXBwb3J0KCZkYXRhLT5taWlfaWYpOwogCXByaW50ayhLRVJOX0RFQlVHICJQSFlfU1RBVCByZWcgY29udGFpbnMgJTA4eFxuIiwgcGh5dmFsKTsKIAlkYXRhLT5waHlfb2sgPSAxOwogCWRhdGEtPmluaXRfbWVkaWEgPSAxOwpAQCAtMTUyNywxMiArMTUyMCw0NiBAQAogCVRTSV9XUklURShUU0kxMDhfRUNfSU5UTUFTSywgfjApOwogfQogCitzdGF0aWMgaW50IHRzaTEwOF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmM7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPnR4bG9jaywgZmxhZ3MpOworCXJjID0gbWlpX2V0aHRvb2xfZ3NldCgmZGF0YS0+bWlpX2lmLCBjbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPnR4bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHRzaTEwOF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+dHhsb2NrLCBmbGFncyk7CisJcmMgPSBtaWlfZXRodG9vbF9zc2V0KCZkYXRhLT5taWlfaWYsIGNtZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+dHhsb2NrLCBmbGFncyk7CisJCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IHRzaTEwOF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRhdGEtPm1paV9pZiwgaWZfbWlpKHJxKSwgY21kLCBOVUxMKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0c2kxMDhfZXRodG9vbF9vcHMgPSB7CisJLmdldF9saW5rIAk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9zZXR0aW5ncwk9IHRzaTEwOF9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwk9IHRzaTEwOF9zZXRfc2V0dGluZ3MsCit9OworCiBzdGF0aWMgaW50CiB0c2kxMDhfaW5pdF9vbmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTE1ODQsNyArMTYxMSw2IEBACiAJZGF0YS0+bWlpX2lmLnBoeV9pZCA9IGVpbmZvLT5waHk7CiAJZGF0YS0+bWlpX2lmLnBoeV9pZF9tYXNrID0gMHgxZjsKIAlkYXRhLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKLQlkYXRhLT5taWlfaWYuc3VwcG9ydHNfZ21paSA9IG1paV9jaGVja19nbWlpX3N1cHBvcnQoJmRhdGEtPm1paV9pZik7CiAKIAlkYXRhLT5waHkgPSBlaW5mby0+cGh5OwogCWRhdGEtPnBoeV90eXBlID0gZWluZm8tPnBoeV90eXBlOwpAQCAtMTU5OCw2ICsxNjI0LDcgQEAKIAlkZXYtPmdldF9zdGF0cyA9IHRzaTEwOF9nZXRfc3RhdHM7CiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmZGF0YS0+bmFwaSwgdHNpMTA4X3BvbGwsIDY0KTsKIAlkZXYtPmRvX2lvY3RsID0gdHNpMTA4X2RvX2lvY3RsOworCWRldi0+ZXRodG9vbF9vcHMgPSAmdHNpMTA4X2V0aHRvb2xfb3BzOwogCiAJLyogQXBwYXJlbnRseSwgdGhlIExpbnV4IG5ldHdvcmtpbmcgY29kZSB3b24ndCB1c2Ugc2NhdHRlci1nYXRoZXIKIAkgKiBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBkbyBjaGVja3N1bXMuICBIb3dldmVyLCBpdCdzIGZhc3RlcgpAQCAtMTYyOSw2ICsxNjU2LDcgQEAKIAkJZ290byByZWdpc3Rlcl9mYWlsOwogCX0KIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRzaTEwOCBHaWdhYml0IEV0aGVybmV0LCBNQUM6ICVzXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGRldi0+ZGV2X2FkZHIpKTsKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3R1bGlwL0tjb25maWcKaW5kZXggMjBhYzE1MC4uZDkxMzQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC90dWxpcC9LY29uZmlnCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkgIGJlIGNhbGxlZCB1bGk1MjZ4LgogCSAgCiBjb25maWcgUENNQ0lBX1hJUkNPTQotCXRyaXN0YXRlICJYaXJjb20gQ2FyZEJ1cyBzdXBwb3J0IChuZXcgZHJpdmVyKSIKKwl0cmlzdGF0ZSAiWGlyY29tIENhcmRCdXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENBUkRCVVMKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIERpZ2l0YWwgIlR1bGlwIiBFdGhlcm5ldCBDYXJkQnVzIGFkYXB0ZXJzLgpAQCAtMTUyLDE3ICsxNTIsNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgeGlyY29tX2NiLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFBDTUNJQV9YSVJUVUxJUAotCXRyaXN0YXRlICJYaXJjb20gVHVsaXAtbGlrZSBDYXJkQnVzIHN1cHBvcnQgKG9sZCBkcml2ZXIpIgotCWRlcGVuZHMgb24gQ0FSREJVUyAmJiBCUk9LRU5fT05fU01QCi0Jc2VsZWN0IENSQzMyCi0JLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBEaWdpdGFsICJUdWxpcCIgRXRoZXJuZXQgQ2FyZEJ1cyBhZGFwdGVycy4KLQkgIEl0IHNob3VsZCB3b3JrIHdpdGggbW9zdCBERUMgMjEqNCotYmFzZWQgY2hpcHMvZXRoZXJjYXJkcywgYXMgd2VsbAotCSAgYXMgd2l0aCB3b3JrLWFsaWtlIGNoaXBzIGZyb20gTGl0ZS1PbiAoUE5JQykgYW5kIE1hY3Jvbml4IChNWElDKSBhbmQKLQkgIEFTSVguCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbAotCSAgYmUgY2FsbGVkIHhpcmNvbV90dWxpcF9jYi4gIElmIHVuc3VyZSwgc2F5IE4uCi0KIGVuZGlmICMgTkVUX1RVTElQCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3R1bGlwL01ha2VmaWxlCmluZGV4IDQ1MTA5MGQuLjIwMGNiZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL01ha2VmaWxlCkBAIC0yLDcgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4ICJUdWxpcCIgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLW9iai0kKENPTkZJR19QQ01DSUFfWElSVFVMSVApCSs9IHhpcmNvbV90dWxpcF9jYi5vCiBvYmotJChDT05GSUdfUENNQ0lBX1hJUkNPTSkJKz0geGlyY29tX2NiLm8KIG9iai0kKENPTkZJR19ETTkxMDIpCQkrPSBkbWZlLm8KIG9iai0kKENPTkZJR19XSU5CT05EXzg0MCkJKz0gd2luYm9uZC04NDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IDc3ZDlkZDcuLjFiNWVkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTg0Miw3ICs4NDIsNyBAQAogc3RhdGljIHZvaWQgZGVfc3RvcF9yeHR4IChzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUpCiB7CiAJdTMyIG1hY21vZGU7Ci0JdW5zaWduZWQgaW50IHdvcmsgPSAxMDAwOworCXVuc2lnbmVkIGludCBpID0gMTMwMC8xMDA7CiAKIAltYWNtb2RlID0gZHIzMihNYWNNb2RlKTsKIAlpZiAobWFjbW9kZSAmIFJ4VHgpIHsKQEAgLTg1MCwxMCArODUwLDE0IEBACiAJCWRyMzIoTWFjTW9kZSk7CiAJfQogCi0Jd2hpbGUgKC0td29yayA+IDApIHsKKwkvKiB3YWl0IHVudGlsIGluLWZsaWdodCBmcmFtZSBjb21wbGV0ZXMuCisJICogTWF4IHRpbWUgQCAxMEJUOiAxNTAwKjhiLzEwTWJwcyA9PSAxMjAwdXMgKCsgMTAwdXMgbWFyZ2luKQorCSAqIFR5cGljYWxseSBleHBlY3QgdGhpcyBsb29wIHRvIGVuZCBpbiA8IDUwIHVzIG9uIDEwMEJULgorCSAqLworCXdoaWxlICgtLWkpIHsKIAkJaWYgKCFkZV9pc19ydW5uaW5nKGRlKSkKIAkJCXJldHVybjsKLQkJY3B1X3JlbGF4KCk7CisJCXVkZWxheSgxMDApOwogCX0KIAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0aW1lb3V0IGV4cGlyZWQgc3RvcHBpbmcgRE1BXG4iLCBkZS0+ZGV2LT5uYW1lKTsKQEAgLTkxMCw3ICs5MTQsOCBAQAogCXVuc2lnbmVkIG1lZGlhID0gZGUtPm1lZGlhX3R5cGU7CiAJdTMyIG1hY21vZGUgPSBkcjMyKE1hY01vZGUpOwogCi0JQlVHX09OKGRlX2lzX3J1bm5pbmcoZGUpKTsKKwlpZiAoZGVfaXNfcnVubmluZyhkZSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjaGlwIGlzIHJ1bm5pbmcgd2hpbGUgY2hhbmdpbmcgbWVkaWEhXG4iLCBkZS0+ZGV2LT5uYW1lKTsKIAogCWlmIChkZS0+ZGUyMTA0MCkKIAkJZHczMihDU1IxMSwgRlVMTF9EVVBMRVhfTUFHSUMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwppbmRleCAyMDY5MThiLi5kYTIyMDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwpAQCAtMzQzLDYgKzM0MywxMiBAQAogCXZvaWQgX19pb21lbSAqZWVfYWRkciA9IHRwLT5iYXNlX2FkZHIgKyBDU1I5OwogCWludCByZWFkX2NtZCA9IGxvY2F0aW9uIHwgKEVFX1JFQURfQ01EIDw8IGFkZHJfbGVuKTsKIAorCS8qIElmIGxvY2F0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiB3aGF0IHdlIGNhbiBhZGRyZXNzLCBkb24ndAorCSAqIHJlYWQgc29tZSBvdGhlciBsb2NhdGlvbiAoaWUgdHJ1bmNhdGUpLiBKdXN0IHJldHVybiB6ZXJvLgorCSAqLworCWlmIChsb2NhdGlvbiA+ICgxIDw8IGFkZHJfbGVuKSAtIDEpCisJCXJldHVybiAwOworCiAJaW93cml0ZTMyKEVFX0VOQiAmIH5FRV9DUywgZWVfYWRkcik7CiAJaW93cml0ZTMyKEVFX0VOQiwgZWVfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmggYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCmluZGV4IDNmNjlmNTMuLjkwODQyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaApAQCAtMjY4LDcgKzI2OCwxMiBAQAogI2RlZmluZSBSWF9SSU5HX1NJWkUJMTI4CiAjZGVmaW5lIE1FRElBX01BU0sgICAgIDMxCiAKLSNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4gKi8KKy8qIFRoZSByZWNlaXZlciBvbiB0aGUgREMyMTE0MyByZXYgNjUgY2FuIGZhaWwgdG8gY2xvc2UgdGhlIGxhc3QKKyAqIHJlY2VpdmUgZGVzY3JpcHRvciBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgKHNlZSBlcnJhdGEpIHdoZW4KKyAqIHVzaW5nIE1XSS4gVGhpcyBjYW4gb25seSBvY2N1ciBpZiB0aGUgcmVjZWl2ZSBidWZmZXIgZW5kcyBvbgorICogYSBjYWNoZSBsaW5lIGJvdW5kYXJ5LCBzbyB0aGUgIisgNCIgYmVsb3cgZW5zdXJlcyBpdCBkb2Vzbid0LgorICovCisjZGVmaW5lIFBLVF9CVUZfU1oJKDE1MzYgKyA0KQkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4gKi8KIAogI2RlZmluZSBUVUxJUF9NSU5fQ0FDSEVfTElORQk4CS8qIGluIHVuaXRzIG9mIDMyLWJpdCB3b3JkcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggZWQ2MDBiZi4uZmExYzFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwpAQCAtMTE1NCwxOCArMTE1NCwxMyBAQAogCiAJdHAtPmNzcjAgPSBjc3IwID0gMDsKIAotCS8qIGlmIHdlIGhhdmUgYW55IGNhY2hlIGxpbmUgc2l6ZSBhdCBhbGwsIHdlIGNhbiBkbyBNUk0gKi8KLQljc3IwIHw9IE1STTsKKwkvKiBpZiB3ZSBoYXZlIGFueSBjYWNoZSBsaW5lIHNpemUgYXQgYWxsLCB3ZSBjYW4gZG8gTVJNIGFuZCBNV0kgKi8KKwljc3IwIHw9IE1STSB8IE1XSTsKIAotCS8qIC4uLmFuZCBiYXJyaW5nIGhhcmR3YXJlIGJ1Z3MsIE1XSSAqLwotCWlmICghKHRwLT5jaGlwX2lkID09IERDMjExNDMgJiYgdHAtPnJldmlzaW9uID09IDY1KSkKLQkJY3NyMCB8PSBNV0k7Ci0KLQkvKiBzZXQgb3IgZGlzYWJsZSBNV0kgaW4gdGhlIHN0YW5kYXJkIFBDSSBjb21tYW5kIGJpdC4KLQkgKiBDaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgIG13aSBpcyBkZXNpcmVkIGJ1dCBub3QgYXZhaWxhYmxlCisJLyogRW5hYmxlIE1XSSBpbiB0aGUgc3RhbmRhcmQgUENJIGNvbW1hbmQgYml0LgorCSAqIENoZWNrIGZvciB0aGUgY2FzZSB3aGVyZSBNV0kgaXMgZGVzaXJlZCBidXQgbm90IGF2YWlsYWJsZQogCSAqLwotCWlmIChjc3IwICYgTVdJKQlwY2lfdHJ5X3NldF9td2kocGRldik7Ci0JZWxzZQkJcGNpX2NsZWFyX213aShwZGV2KTsKKwlwY2lfdHJ5X3NldF9td2kocGRldik7CiAKIAkvKiByZWFkIHJlc3VsdCBmcm9tIGhhcmR3YXJlIChpbiBjYXNlIGJpdCByZWZ1c2VkIHRvIGVuYWJsZSkgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKQEAgLTE0MDEsMTAgKzEzOTYsNiBAQAogI2lmZGVmIENPTkZJR19UVUxJUF9NV0kKIAlpZiAoIWZvcmNlX2NzcjAgJiYgKHRwLT5mbGFncyAmIEhBU19QQ0lfTVdJKSkKIAkJdHVsaXBfbXdpX2NvbmZpZyAocGRldiwgZGV2KTsKLSNlbHNlCi0JLyogTVdJIGlzIGJyb2tlbiBmb3IgREMyMTE0MyByZXYgNjUuLi4gKi8KLQlpZiAoY2hpcF9pZHggPT0gREMyMTE0MyAmJiBwZGV2LT5yZXZpc2lvbiA9PSA2NSkKLQkJdHAtPmNzcjAgJj0gfk1XSTsKICNlbmRpZgogCiAJLyogU3RvcCB0aGUgY2hpcCdzIFR4IGFuZCBSeCBwcm9jZXNzZXMuICovCkBAIC0xNDM3LDYgKzE0MjgsNyBAQAogCSAgIEVFUFJPTS4KIAkgICAqLwogCWVlX2RhdGEgPSB0cC0+ZWVwcm9tOworCW1lbXNldChlZV9kYXRhLCAwLCBzaXplb2YodHAtPmVlcHJvbSkpOwogCXN1bSA9IDA7CiAJaWYgKGNoaXBfaWR4ID09IExDODJDMTY4KSB7CiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKQEAgLTE0NTgsOCArMTQ1MCwxMiBAQAogCQkvKiBBIHNlcmlhbCBFRVBST00gaW50ZXJmYWNlLCB3ZSByZWFkIG5vdyBhbmQgc29ydCBpdCBvdXQgbGF0ZXIuICovCiAJCWludCBzYV9vZmZzZXQgPSAwOwogCQlpbnQgZWVfYWRkcl9zaXplID0gdHVsaXBfcmVhZF9lZXByb20oZGV2LCAweGZmLCA4KSAmIDB4NDAwMDAgPyA4IDogNjsKKwkJaW50IGVlX21heF9hZGRyID0gKCgxIDw8IGVlX2FkZHJfc2l6ZSkgLSAxKSAqIHNpemVvZih1MTYpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodHAtPmVlcHJvbSk7IGkrPTIpIHsKKwkJaWYgKGVlX21heF9hZGRyID4gc2l6ZW9mKHRwLT5lZXByb20pKQorCQkJZWVfbWF4X2FkZHIgPSBzaXplb2YodHAtPmVlcHJvbSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGVlX21heF9hZGRyIDsgaSArPSBzaXplb2YodTE2KSkgewogCQkJdTE2IGRhdGEgPSB0dWxpcF9yZWFkX2VlcHJvbShkZXYsIGkvMiwgZWVfYWRkcl9zaXplKTsKIAkJCWVlX2RhdGFbaV0gPSBkYXRhICYgMHhmZjsKIAkJCWVlX2RhdGFbaSArIDFdID0gZGF0YSA+PiA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCmluZGV4IGE3YWZlZWEuLmE1OWMxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKQEAgLTQ4Miw5ICs0ODIsMTEgQEAKIAlzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkYi0+aW9hZGRyOwogCXU4CXBoeV90bXA7CisJdTgJdGltZW91dDsKIAl1MTYJcGh5X3ZhbHVlOwogCXUxNiBwaHlfcmVnX3Jlc2V0OwogCisKIAlVTEk1MjZYX0RCVUcoMCwgInVsaTUyNnhfaW5pdCgpIiwgMCk7CiAKIAkvKiBSZXNldCBNNTI2eCBNQUMgY29udHJvbGxlciAqLwpAQCAtNTA5LDExICs1MTEsMTkgQEAKIAkvKiBQYXJzZXIgU1JPTSBhbmQgbWVkaWEgbW9kZSAqLwogCWRiLT5tZWRpYV9tb2RlID0gdWxpNTI2eF9tZWRpYV9tb2RlOwogCi0JLyogUGh5eGNlciBjYXBhYmlsaXR5IHNldHRpbmcgKi8KKwkvKiBwaHl4Y2VyIGNhcGFiaWxpdHkgc2V0dGluZyAqLwogCXBoeV9yZWdfcmVzZXQgPSBwaHlfcmVhZChkYi0+aW9hZGRyLCBkYi0+cGh5X2FkZHIsIDAsIGRiLT5jaGlwX2lkKTsKIAlwaHlfcmVnX3Jlc2V0ID0gKHBoeV9yZWdfcmVzZXQgfCAweDgwMDApOwogCXBoeV93cml0ZShkYi0+aW9hZGRyLCBkYi0+cGh5X2FkZHIsIDAsIHBoeV9yZWdfcmVzZXQsIGRiLT5jaGlwX2lkKTsKKworCS8qIFNlZSBJRUVFIDgwMi4zLTIwMDIucGRmIChTZWN0aW9uIDIsIENoYXB0ZXIgIjIyLjIuNCBNYW5hZ2VtZW50CisJICogZnVuY3Rpb25zIikgb3IgcGh5IGRhdGEgc2hlZXQgZm9yIGRldGFpbHMgb24gcGh5IHJlc2V0CisJICovCiAJdWRlbGF5KDUwMCk7CisJdGltZW91dCA9IDEwOworCXdoaWxlICh0aW1lb3V0LS0gJiYKKwkJcGh5X3JlYWQoZGItPmlvYWRkciwgZGItPnBoeV9hZGRyLCAwLCBkYi0+Y2hpcF9pZCkgJiAweDgwMDApCisJCQl1ZGVsYXkoMTAwKTsKIAogCS8qIFByb2Nlc3MgUGh5eGNlciBNZWRpYSBNb2RlICovCiAJdWxpNTI2eF9zZXRfcGh5eGNlcihkYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCAzNWQwY2ZjLi41MDA2ODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTEwNyw4ICsxMDcsNiBAQAogLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nLiAqLwogI2RlZmluZSBUWF9USU1FT1VUICAoMipIWikKIAotI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2CQkJLyogU2l6ZSBvZiBlYWNoIHRlbXBvcmFyeSBSeCBidWZmZXIuKi8KLQogLyogSW5jbHVkZSBmaWxlcywgZGVzaWduZWQgdG8gc3VwcG9ydCBtb3N0IGtlcm5lbCB2ZXJzaW9ucyAyLjAuMCBhbmQgbGF0ZXIuICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMzcsNiArMTM1LDkgQEAKIAogI2luY2x1ZGUgInR1bGlwLmgiCiAKKyN1bmRlZiBQS1RfQlVGX1NaCQkJLyogdHVsaXAuaCBhbHNvIGRlZmluZXMgdGhpcyAqLworI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2CS8qIFNpemUgb2YgZWFjaCB0ZW1wb3JhcnkgUnggYnVmZmVyLiovCisKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gPQogS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICgyLjQgcG9ydCkgIiBEUlZfUkVMREFURSAiICBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX3R1bGlwX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fdHVsaXBfY2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNmOGUzMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fdHVsaXBfY2IuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MjYgKzAsMCBAQAotLyogeGlyY29tX3R1bGlwX2NiLmM6IEEgWGlyY29tIENCRS0xMDAgZXRoZXJuZXQgZHJpdmVyIGZvciBMaW51eC4gKi8KLS8qCi0JV3JpdHRlbi9jb3B5cmlnaHQgMTk5NC0xOTk5IGJ5IERvbmFsZCBCZWNrZXIuCi0KLQlUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCi0Jb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KLQotCVRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgYXMgYmVja2VyQHNjeWxkLmNvbSwgb3IgQy9PCi0JU2N5bGQgQ29tcHV0aW5nIENvcnBvcmF0aW9uCi0JNDEwIFNldmVybiBBdmUuLCBTdWl0ZSAyMTAKLQlBbm5hcG9saXMgTUQgMjE0MDMKLQotKi8KLQotI2RlZmluZSBEUlZfTkFNRQkieGlyY29tX3R1bGlwX2NiIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC45MiIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIkp1bmUgMjcsIDIwMDYiCi0KLS8qIEEgZmV3IHVzZXItY29uZmlndXJhYmxlIHZhbHVlcy4gKi8KLQotI2RlZmluZSB4aXJjb21fZGVidWcgZGVidWcKLSNpZmRlZiBYSVJDT01fREVCVUcKLXN0YXRpYyBpbnQgeGlyY29tX2RlYnVnID0gWElSQ09NX0RFQlVHOwotI2Vsc2UKLXN0YXRpYyBpbnQgeGlyY29tX2RlYnVnID0gMTsKLSNlbmRpZgotCi0vKiBNYXhpbXVtIGV2ZW50cyAoUnggcGFja2V0cywgZXRjLikgdG8gaGFuZGxlIGF0IGVhY2ggaW50ZXJydXB0LiAqLwotc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAyNTsKLQotI2RlZmluZSBNQVhfVU5JVFMgNAotLyogVXNlZCB0byBwYXNzIHRoZSBmdWxsLWR1cGxleCBmbGFnLCBldGMuICovCi1zdGF0aWMgaW50IGZ1bGxfZHVwbGV4W01BWF9VTklUU107Ci1zdGF0aWMgaW50IG9wdGlvbnNbTUFYX1VOSVRTXTsKLXN0YXRpYyBpbnQgbXR1W01BWF9VTklUU107CQkJLyogSnVtYm8gTVRVIGZvciBpbnRlcmZhY2VzLiAqLwotCi0vKiBLZWVwIHRoZSByaW5nIHNpemVzIGEgcG93ZXIgb2YgdHdvIGZvciBlZmZpY2llbmN5LgotICAgTWFraW5nIHRoZSBUeCByaW5nIHRvbyBsYXJnZSBkZWNyZWFzZXMgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgY2hhbm5lbAotICAgYm9uZGluZyBhbmQgcGFja2V0IHByaW9yaXR5LgotICAgVGhlcmUgYXJlIG5vIGlsbCBlZmZlY3RzIGZyb20gdG9vLWxhcmdlIHJlY2VpdmUgcmluZ3MuICovCi0jZGVmaW5lIFRYX1JJTkdfU0laRQkxNgotI2RlZmluZSBSWF9SSU5HX1NJWkUJMzIKLQotLyogU2V0IHRoZSBjb3B5IGJyZWFrcG9pbnQgZm9yIHRoZSBjb3B5LW9ubHktdGlueS1idWZmZXIgUnggc3RydWN0dXJlLiAqLwotI2lmZGVmIF9fYWxwaGFfXwotc3RhdGljIGludCByeF9jb3B5YnJlYWsgPSAxNTE4OwotI2Vsc2UKLXN0YXRpYyBpbnQgcnhfY29weWJyZWFrID0gMTAwOwotI2VuZGlmCi0KLS8qCi0gIFNldCB0aGUgYnVzIHBlcmZvcm1hbmNlIHJlZ2lzdGVyLgotCVR5cGljYWw6IFNldCAxNiBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIG5vIGJ1cnN0IGxpbWl0LgotCUNhY2hlIGFsaWdubWVudCBiaXRzIDE1OjE0CSAgICAgQnVyc3QgbGVuZ3RoIDEzOjgKLQkJMDAwMAlObyBhbGlnbm1lbnQgIDB4MDAwMDAwMDAgdW5saW1pdGVkCQkwODAwIDggbG9uZ3dvcmRzCi0JCTQwMDAJOCAgbG9uZ3dvcmRzCQkwMTAwIDEgbG9uZ3dvcmQJCTEwMDAgMTYgbG9uZ3dvcmRzCi0JCTgwMDAJMTYgbG9uZ3dvcmRzCQkwMjAwIDIgbG9uZ3dvcmRzCTIwMDAgMzIgbG9uZ3dvcmRzCi0JCUMwMDAJMzIgIGxvbmd3b3JkcwkJMDQwMCA0IGxvbmd3b3JkcwotCVdhcm5pbmc6IG1hbnkgb2xkZXIgNDg2IHN5c3RlbXMgYXJlIGJyb2tlbiBhbmQgcmVxdWlyZSBzZXR0aW5nIDB4MDBBMDQ4MDAKLQkgICA4IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgOCBsb25nd29yZCBidXJzdC4KLQlUb0RvOiBOb24tSW50ZWwgc2V0dGluZyBjb3VsZCBiZSBiZXR0ZXIuCi0qLwotCi0jaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLXN0YXRpYyBpbnQgY3NyMCA9IDB4MDFBMDAwMDAgfCAweEUwMDA7Ci0jZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQotc3RhdGljIGludCBjc3IwID0gMHgwMUIwMDAwMCB8IDB4ODAwMDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKQotc3RhdGljIGludCBjc3IwID0gMHgwMUIwMDA4MCB8IDB4ODAwMDsKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pCi1zdGF0aWMgaW50IGNzcjAgPSAweDAxQTAwMDAwIHwgMHg4MDAwOwotI2Vsc2UKLSN3YXJuaW5nIFByb2Nlc3NvciBhcmNoaXRlY3R1cmUgdW5kZWZpbmVkIQotc3RhdGljIGludCBjc3IwID0gMHgwMEEwMDAwMCB8IDB4NDgwMDsKLSNlbmRpZgotCi0vKiBPcGVyYXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgdXN1YWxseSBhcmUgbm90IGNoYW5nZWQuICovCi0vKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCi0jZGVmaW5lIFRYX1RJTUVPVVQJCSg0ICogSFopCi0jZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzYJCQkvKiBTaXplIG9mIGVhY2ggdGVtcG9yYXJ5IFJ4IGJ1ZmZlci4qLwotI2RlZmluZSBQS1RfU0VUVVBfU1oJCTE5MgkJCS8qIFNpemUgb2YgdGhlIHNldHVwIGZyYW1lICovCi0KLS8qIFBDSSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUENJX1BPV0VSTUdNVCAJMHg0MAotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgkvKiBQcm9jZXNzb3IgdHlwZSBmb3IgY2FjaGUgYWxpZ25tZW50LiAqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLQotLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyBEUlZfTkFNRSAiLmMgZGVyaXZlZCBmcm9tIHR1bGlwLmM6djAuOTEgNC8xNC85OSBiZWNrZXJAc2N5bGQuY29tXG4iCi1LRVJOX0lORk8gIiB1bm9mZmljaWFsIDIuNC54IGtlcm5lbCBwb3J0LCB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiXG4iOwotCi1NT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYaXJjb20gQ0JFLTEwMCBldGhlcm5ldCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKG1heF9pbnRlcnJ1cHRfd29yaywgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShyeF9jb3B5YnJlYWssIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0oY3NyMCwgaW50LCAwKTsKLQotbW9kdWxlX3BhcmFtX2FycmF5KG9wdGlvbnMsIGludCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZnVsbF9kdXBsZXgsIGludCwgTlVMTCwgMCk7Ci0KLSNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQotCi0vKgotCQkJCVRoZW9yeSBvZiBPcGVyYXRpb24KLQotSS4gQm9hcmQgQ29tcGF0aWJpbGl0eQotCi1UaGlzIGRldmljZSBkcml2ZXIgd2FzIGZvcmtlZCBmcm9tIHRoZSBkcml2ZXIgZm9yIHRoZSBERUNjaGlwICJUdWxpcCIsCi1EaWdpdGFsJ3Mgc2luZ2xlLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlcnMgZm9yIFBDSS4gIEl0IHN1cHBvcnRzIFhpcmNvbSdzCi1hbG1vc3QtVHVsaXAtY29tcGF0aWJsZSBDQkUtMTAwIENhcmRCdXMgYWRhcHRlcnMuCi0KLUlJLiBCb2FyZC1zcGVjaWZpYyBzZXR0aW5ncwotCi1QQ0kgYnVzIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgYnkgdGhlIHN5c3RlbSBhdCBib290IHRpbWUsIHNvIG5vIGp1bXBlcnMKLW5lZWQgdG8gYmUgc2V0IG9uIHRoZSBib2FyZC4gIFRoZSBzeXN0ZW0gQklPUyBwcmVmZXJhYmx5IHNob3VsZCBhc3NpZ24gdGhlCi1QQ0kgSU5UQSBzaWduYWwgdG8gYW4gb3RoZXJ3aXNlIHVudXNlZCBzeXN0ZW0gSVJRIGxpbmUuCi0KLUlJSS4gRHJpdmVyIG9wZXJhdGlvbgotCi1JSUlhLiBSaW5nIGJ1ZmZlcnMKLQotVGhlIFhpcmNvbSBjYW4gdXNlIGVpdGhlciByaW5nIGJ1ZmZlcnMgb3IgbGlzdHMgb2YgVHggYW5kIFJ4IGRlc2NyaXB0b3JzLgotVGhpcyBkcml2ZXIgdXNlcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCByaW5ncyBvZiBSeCBhbmQgVHggZGVzY3JpcHRvcnMsIHNldCBhdAotY29tcGlsZSB0aW1lIGJ5IFJYL1RYX1JJTkdfU0laRS4gIFRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGFsbG9jYXRlcyBza2J1ZmZzCi1mb3IgdGhlIFJ4IHJpbmcgYnVmZmVycyBhdCBvcGVuKCkgdGltZSBhbmQgcGFzc2VzIHRoZSBza2ItPmRhdGEgZmllbGQgdG8gdGhlCi1YaXJjb20gYXMgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXaGVuIGFuIGluY29taW5nIGZyYW1lIGlzIGxlc3MgdGhhbgotUlhfQ09QWUJSRUFLIGJ5dGVzIGxvbmcsIGEgZnJlc2ggc2tidWZmIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGZyYW1lIGlzCi1jb3BpZWQgdG8gdGhlIG5ldyBza2J1ZmYuICBXaGVuIHRoZSBpbmNvbWluZyBmcmFtZSBpcyBsYXJnZXIsIHRoZSBza2J1ZmYgaXMKLXBhc3NlZCBkaXJlY3RseSB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgYW5kIHJlcGxhY2VkIGJ5IGEgbmV3bHkgYWxsb2NhdGVkCi1za2J1ZmYuCi0KLVRoZSBSWF9DT1BZQlJFQUsgdmFsdWUgaXMgY2hvc2VuIHRvIHRyYWRlLW9mZiB0aGUgbWVtb3J5IHdhc3RlZCBieQotdXNpbmcgYSBmdWxsLXNpemVkIHNrYnVmZiBmb3Igc21hbGwgZnJhbWVzIHZzLiB0aGUgY29weWluZyBjb3N0cyBvZiBsYXJnZXIKLWZyYW1lcy4gIEZvciBzbWFsbCBmcmFtZXMgdGhlIGNvcHlpbmcgY29zdCBpcyBuZWdsaWdpYmxlIChlc3AuIGNvbnNpZGVyaW5nCi10aGF0IHdlIGFyZSBwcmUtbG9hZGluZyB0aGUgY2FjaGUgd2l0aCBpbW1lZGlhdGVseSB1c2VmdWwgaGVhZGVyCi1pbmZvcm1hdGlvbikuICBGb3IgbGFyZ2UgZnJhbWVzIHRoZSBjb3B5aW5nIGNvc3QgaXMgbm9uLXRyaXZpYWwsIGFuZCB0aGUKLWxhcmdlciBjb3B5IG1pZ2h0IGZsdXNoIHRoZSBjYWNoZSBvZiB1c2VmdWwgZGF0YS4gIEEgc3VidGxlIGFzcGVjdCBvZiB0aGlzCi1jaG9pY2UgaXMgdGhhdCB0aGUgWGlyY29tIG9ubHkgcmVjZWl2ZXMgaW50byBsb25nd29yZCBhbGlnbmVkIGJ1ZmZlcnMsIHRodXMKLXRoZSBJUCBoZWFkZXIgYXQgb2Zmc2V0IDE0IGlzbid0IGxvbmd3b3JkIGFsaWduZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KLUNvcGllZCBmcmFtZXMgYXJlIHB1dCBpbnRvIHRoZSBuZXcgc2tidWZmIGF0IGFuIG9mZnNldCBvZiAiKzIiLCB0aHVzIGNvcHlpbmcKLWhhcyB0aGUgYmVuZWZpY2lhbCBlZmZlY3Qgb2YgYWxpZ25pbmcgdGhlIElQIGhlYWRlciBhbmQgcHJlbG9hZGluZyB0aGUKLWNhY2hlLgotCi1JSUlDLiBTeW5jaHJvbml6YXRpb24KLVRoZSBkcml2ZXIgcnVucyBhcyB0d28gaW5kZXBlbmRlbnQsIHNpbmdsZS10aHJlYWRlZCBmbG93cyBvZiBjb250cm9sLiAgT25lCi1pcyB0aGUgc2VuZC1wYWNrZXQgcm91dGluZSwgd2hpY2ggZW5mb3JjZXMgc2luZ2xlLXRocmVhZGVkIHVzZSBieSB0aGUKLWRldi0+dGJ1c3kgZmxhZy4gIFRoZSBvdGhlciB0aHJlYWQgaXMgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3aGljaCBpcyBzaW5nbGUKLXRocmVhZGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgb3RoZXIgc29mdHdhcmUuCi0KLVRoZSBzZW5kIHBhY2tldCB0aHJlYWQgaGFzIHBhcnRpYWwgY29udHJvbCBvdmVyIHRoZSBUeCByaW5nIGFuZCAnZGV2LT50YnVzeScKLWZsYWcuICBJdCBzZXRzIHRoZSB0YnVzeSBmbGFnIHdoZW5ldmVyIGl0J3MgcXVldWluZyBhIFR4IHBhY2tldC4gSWYgdGhlIG5leHQKLXF1ZXVlIHNsb3QgaXMgZW1wdHksIGl0IGNsZWFycyB0aGUgdGJ1c3kgZmxhZyB3aGVuIGZpbmlzaGVkIG90aGVyd2lzZSBpdCBzZXRzCi10aGUgJ3RwLT50eF9mdWxsJyBmbGFnLgotCi1UaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGV4Y2x1c2l2ZSBjb250cm9sIG92ZXIgdGhlIFJ4IHJpbmcgYW5kIHJlY29yZHMgc3RhdHMKLWZyb20gdGhlIFR4IHJpbmcuICAoVGhlIFR4LWRvbmUgaW50ZXJydXB0IGNhbid0IGJlIHNlbGVjdGl2ZWx5IHR1cm5lZCBvZmYsIHNvCi13ZSBjYW4ndCBhdm9pZCB0aGUgaW50ZXJydXB0IG92ZXJoZWFkIGJ5IGhhdmluZyB0aGUgVHggcm91dGluZSByZWFwIHRoZSBUeAotc3RhdHMuKQkgQWZ0ZXIgcmVhcGluZyB0aGUgc3RhdHMsIGl0IG1hcmtzIHRoZSBxdWV1ZSBlbnRyeSBhcyBlbXB0eSBieSBzZXR0aW5nCi10aGUgJ2Jhc2UnIHRvIHplcm8uCSBJZmYgdGhlICd0cC0+dHhfZnVsbCcgZmxhZyBpcyBzZXQsIGl0IGNsZWFycyBib3RoIHRoZQotdHhfZnVsbCBhbmQgdGJ1c3kgZmxhZ3MuCi0KLUlWLiBOb3RlcwotCi1JVmIuIFJlZmVyZW5jZXMKLQotaHR0cDovL2Nlc2Rpcy5nc2ZjLm5hc2EuZ292L2xpbnV4L21pc2MvTldheS5odG1sCi1odHRwOi8vd3d3LmRpZ2l0YWwuY29tICAoc2VhcmNoIGZvciBjdXJyZW50IDIxKjQqIGRhdGFzaGVldHMgYW5kICIyMVg0IFNST00iKQotaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvRFAvRFA4Mzg0MEEuaHRtbAotCi1JVmMuIEVycmF0YQotCi0qLwotCi0vKiBBIGZ1bGwtZHVwbGV4IG1hcCBmb3IgbWVkaWEgdHlwZXMuICovCi1lbnVtIE1lZGlhSXMgewotCU1lZGlhSXNGRCA9IDEsIE1lZGlhQWx3YXlzRkQ9MiwgTWVkaWFJc01JST00LCBNZWRpYUlzRng9OCwKLQlNZWRpYUlzMTAwPTE2fTsKLXN0YXRpYyBjb25zdCBjaGFyIG1lZGlhX2NhcFtdID0KLXswLDAsMCwxNiwgIDMsMTksMTYsMjQsICAyNyw0LDcsNSwgMCwyMCwyMywyMCB9OwotCi0vKiBPZmZzZXRzIHRvIHRoZSBDb21tYW5kIGFuZCBTdGF0dXMgUmVnaXN0ZXJzLCAiQ1NScyIuICBBbGwgYWNjZXNzZXMKLSAgIG11c3QgYmUgbG9uZ3dvcmQgaW5zdHJ1Y3Rpb25zIGFuZCBxdWFkd29yZCBhbGlnbmVkLiAqLwotZW51bSB4aXJjb21fb2Zmc2V0cyB7Ci0JQ1NSMD0wLCAgICBDU1IxPTB4MDgsIENTUjI9MHgxMCwgQ1NSMz0weDE4LCBDU1I0PTB4MjAsIENTUjU9MHgyOCwKLQlDU1I2PTB4MzAsIENTUjc9MHgzOCwgQ1NSOD0weDQwLCBDU1I5PTB4NDgsIENTUjEwPTB4NTAsIENTUjExPTB4NTgsCi0JQ1NSMTI9MHg2MCwgQ1NSMTM9MHg2OCwgQ1NSMTQ9MHg3MCwgQ1NSMTU9MHg3OCwgQ1NSMTY9MHgwNCwgfTsKLQotLyogVGhlIGJpdHMgaW4gdGhlIENTUjUgc3RhdHVzIHJlZ2lzdGVycywgbW9zdGx5IGludGVycnVwdCBzb3VyY2VzLiAqLwotZW51bSBzdGF0dXNfYml0cyB7Ci0JTGlua0NoYW5nZT0weDA4MDAwMDAwLAotCU5vcm1hbEludHI9MHgxMDAwMCwgTm9ybWFsSW50ck1hc2s9MHgwMDAxNDA0NSwKLQlBYm5vcm1hbEludHI9MHg4MDAwLCBBYm5vcm1hbEludHJNYXNrPTB4MGEwMGE1YTIsCi0JUmVzZXJ2ZWRJbnRyTWFzaz0weGUwMDAxYTE4LAotCUVhcmx5UnhJbnRyPTB4NDAwMCwgQnVzRXJyb3JJbnRyPTB4MjAwMCwKLQlFYXJseVR4SW50cj0weDQwMCwgUnhEaWVkPTB4MTAwLCBSeE5vQnVmPTB4ODAsIFJ4SW50cj0weDQwLAotCVR4RklGT1VuZGVyZmxvdz0weDIwLCBUeE5vQnVmPTB4MDQsIFR4RGllZD0weDAyLCBUeEludHI9MHgwMSwKLX07Ci0KLWVudW0gY3NyMF9jb250cm9sX2JpdHMgewotCUVuYWJsZU1XST0weDAxMDAwMDAwLCBFbmFibGVNUkw9MHgwMDgwMDAwMCwKLQlFbmFibGVNUk09MHgwMDIwMDAwMCwgRXF1YWxCdXNQcmlvPTB4MDIsCi0JU29mdHdhcmVSZXNldD0weDAxLAotfTsKLQotZW51bSBjc3I2X2NvbnRyb2xfYml0cyB7Ci0JUmVjZWl2ZUFsbEJpdD0weDQwMDAwMDAwLCBBbGxNdWx0aUJpdD0weDgwLCBQcm9taXNjQml0PTB4NDAsCi0JSGFzaEZpbHRlckJpdD0weDAxLCBGdWxsRHVwbGV4Qml0PTB4MDIwMCwKLQlUeFRocmVzaDEwPTB4NDAwMDAwLCBUeFN0b3JlRm9ydz0weDIwMDAwMCwKLQlUeFRocmVzaE1hc2s9MHhjMDAwLCBUeFRocmVzaFNoaWZ0PTE0LAotCUVuYWJsZVR4PTB4MjAwMCwgRW5hYmxlUng9MHgwMiwKLQlSZXNlcnZlZFplcm9NYXNrPTB4OGQ5MzAxMzQsIFJlc2VydmVkT25lTWFzaz0weDMyMGMwMDAwLAotCUVuYWJsZVR4Ung9KEVuYWJsZVR4IHwgRW5hYmxlUngpLAotfTsKLQotCi1lbnVtIHRibF9mbGFnIHsKLQlIQVNfTUlJPTEsIEhBU19BQ1BJPTIsCi19Owotc3RhdGljIHN0cnVjdCB4aXJjb21fY2hpcF90YWJsZSB7Ci0JY2hhciAqY2hpcF9uYW1lOwotCWludCB2YWxpZF9pbnRyczsJCQkvKiBDU1I3IGludGVycnVwdCBlbmFibGUgc2V0dGluZ3MgKi8KLQlpbnQgZmxhZ3M7Ci19IHhpcmNvbV90YmxbXSA9IHsKLSAgeyAiWGlyY29tIENhcmRidXMgQWRhcHRlciIsCi0JTGlua0NoYW5nZSB8IE5vcm1hbEludHIgfCBBYm5vcm1hbEludHIgfCBCdXNFcnJvckludHIgfAotCVJ4RGllZCB8IFJ4Tm9CdWYgfCBSeEludHIgfCBUeEZJRk9VbmRlcmZsb3cgfCBUeE5vQnVmIHwgVHhEaWVkIHwgVHhJbnRyLAotCUhBU19NSUkgfCBIQVNfQUNQSSwgfSwKLSAgeyBOVUxMLCB9LAotfTsKLS8qIFRoaXMgbWF0Y2hlcyB0aGUgdGFibGUgYWJvdmUuICovCi1lbnVtIGNoaXBzIHsKLQlYMzIwMV8zLAotfTsKLQotCi0vKiBUaGUgWGlyY29tIFJ4IGFuZCBUeCBidWZmZXIgZGVzY3JpcHRvcnMuICovCi1zdHJ1Y3QgeGlyY29tX3J4X2Rlc2MgewotCXMzMiBzdGF0dXM7Ci0JczMyIGxlbmd0aDsKLQl1MzIgYnVmZmVyMSwgYnVmZmVyMjsKLX07Ci0KLXN0cnVjdCB4aXJjb21fdHhfZGVzYyB7Ci0JczMyIHN0YXR1czsKLQlzMzIgbGVuZ3RoOwotCXUzMiBidWZmZXIxLCBidWZmZXIyOwkJCQkvKiBXZSB1c2Ugb25seSBidWZmZXIgMS4gICovCi19OwotCi1lbnVtIHR4X2Rlc2MwX3N0YXR1c19iaXRzIHsKLQlUeDBEZXNjT3duZWQ9MHg4MDAwMDAwMCwgVHgwRGVzY0Vycm9yPTB4ODAwMCwgVHgwTm9DYXJyaWVyPTB4MDgwMCwKLQlUeDBMYXRlQ29sbD0weDAyMDAsIFR4ME1hbnlDb2xsPTB4MDEwMCwgVHgwVW5kZXJmbG93PTB4MDIsCi19OwotZW51bSB0eF9kZXNjMV9zdGF0dXNfYml0cyB7Ci0JVHgxQ29tcGxJbnRyPTB4ODAwMDAwMDAsIFR4MUxhc3RTZWc9MHg0MDAwMDAwMCwgVHgxRmlyc3RTZWc9MHgyMDAwMDAwMCwKLQlUeDFTZXR1cFBrdD0weDA4MDAwMDAwLCBUeDFEaXNhYmxlQ1JDPTB4MDQwMDAwMDAsIFR4MVJpbmdXcmFwPTB4MDIwMDAwMDAsCi0JVHgxQ2hhaW5EZXNjPTB4MDEwMDAwMDAsIFR4MU5vUGFkPTB4ODAwMDAwLCBUeDFIYXNoU2V0dXA9MHg0MDAwMDAsCi0JVHgxV2hvbGVQa3Q9KFR4MUZpcnN0U2VnIHwgVHgxTGFzdFNlZyksCi19OwotZW51bSByeF9kZXNjMF9zdGF0dXNfYml0cyB7Ci0JUngwRGVzY093bmVkPTB4ODAwMDAwMDAsIFJ4MERlc2NFcnJvcj0weDgwMDAsIFJ4ME5vU3BhY2U9MHg0MDAwLAotCVJ4MFJ1bnQ9MHgwODAwLCBSeDBNY2FzdFBrdD0weDA0MDAsIFJ4MEZpcnN0U2VnPTB4MDIwMCwgUngwTGFzdFNlZz0weDAxMDAsCi0JUngwSHVnZUZyYW1lPTB4ODAsIFJ4MENSQ0Vycm9yPTB4MDIsCi0JUngwV2hvbGVQa3Q9KFJ4MEZpcnN0U2VnIHwgUngwTGFzdFNlZyksCi19OwotZW51bSByeF9kZXNjMV9zdGF0dXNfYml0cyB7Ci0JUngxUmluZ1dyYXA9MHgwMjAwMDAwMCwgUngxQ2hhaW5EZXNjPTB4MDEwMDAwMDAsCi19OwotCi1zdHJ1Y3QgeGlyY29tX3ByaXZhdGUgewotCXN0cnVjdCB4aXJjb21fcnhfZGVzYyByeF9yaW5nW1JYX1JJTkdfU0laRV07Ci0Jc3RydWN0IHhpcmNvbV90eF9kZXNjIHR4X3JpbmdbVFhfUklOR19TSVpFXTsKLQkvKiBUaGUgc2F2ZWQgYWRkcmVzcyBvZiBhIHNlbnQtaW4tcGxhY2UgcGFja2V0L2J1ZmZlciwgZm9yIHNrZnJlZSgpLiAqLwotCXN0cnVjdCBza19idWZmKiB0eF9za2J1ZmZbVFhfUklOR19TSVpFXTsKLQotCS8qIFRoZSBYMzIwMS0zIHJlcXVpcmVzIDQtYnl0ZSBhbGlnbmVkIHR4IGJ1ZnMgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiogdHhfYWxpZ25lZF9za2J1ZmZbVFhfUklOR19TSVpFXTsKLQotCS8qIFRoZSBhZGRyZXNzZXMgb2YgcmVjZWl2ZS1pbi1wbGFjZSBza2J1ZmZzLiAqLwotCXN0cnVjdCBza19idWZmKiByeF9za2J1ZmZbUlhfUklOR19TSVpFXTsKLQl1MTYgc2V0dXBfZnJhbWVbUEtUX1NFVFVQX1NaIC8gc2l6ZW9mKHUxNildOwkvKiBQc2V1ZG8tVHggZnJhbWUgdG8gaW5pdCBhZGRyZXNzIHRhYmxlLiAqLwotCWludCBjaGlwX2lkOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCXVuc2lnbmVkIGludCBjdXJfcngsIGN1cl90eDsJCS8qIFRoZSBuZXh0IGZyZWUgcmluZyBlbnRyeSAqLwotCXVuc2lnbmVkIGludCBkaXJ0eV9yeCwgZGlydHlfdHg7CS8qIFRoZSByaW5nIGVudHJpZXMgdG8gYmUgZnJlZSgpZWQuICovCi0JdW5zaWduZWQgaW50IHR4X2Z1bGw6MTsJCQkJLyogVGhlIFR4IHF1ZXVlIGlzIGZ1bGwuICovCi0JdW5zaWduZWQgaW50IHNwZWVkMTAwOjE7Ci0JdW5zaWduZWQgaW50IGZ1bGxfZHVwbGV4OjE7CQkJLyogRnVsbC1kdXBsZXggb3BlcmF0aW9uIHJlcXVlc3RlZC4gKi8KLQl1bnNpZ25lZCBpbnQgYXV0b25lZzoxOwotCXVuc2lnbmVkIGludCBkZWZhdWx0X3BvcnQ6NDsJCS8qIExhc3QgZGV2LT5pZl9wb3J0IHZhbHVlLiAqLwotCXVuc2lnbmVkIGludCBvcGVuOjE7Ci0JdW5zaWduZWQgaW50IGNzcjA7CQkJCQkvKiBDU1IwIHNldHRpbmcuICovCi0JdW5zaWduZWQgaW50IGNzcjY7CQkJCQkvKiBDdXJyZW50IENTUjYgY29udHJvbCBzZXR0aW5ncy4gKi8KLQl1MTYgdG9fYWR2ZXJ0aXNlOwkJCQkJLyogTldheSBjYXBhYmlsaXRpZXMgYWR2ZXJ0aXNlZC4gICovCi0JdTE2IGFkdmVydGlzaW5nWzRdOwotCXNpZ25lZCBjaGFyIHBoeXNbNF0sIG1paV9jbnQ7CQkvKiBNSUkgZGV2aWNlIGFkZHJlc3Nlcy4gKi8KLQlpbnQgc2F2ZWRfaWZfcG9ydDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlzcGlubG9ja190IGxvY2s7Ci19OwotCi1zdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwotc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCB4aXJjb21fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCB4aXJjb21fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgeGlyY29tX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCB4aXJjb21fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHhpcmNvbV9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHhpcmNvbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB4aXJjb21fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCB4aXJjb21fbWVkaWFfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGlycXJldHVybl90IHhpcmNvbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKLXN0YXRpYyBpbnQgeGlyY29tX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp4aXJjb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB4aXJjb21faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGNoZWNrX2R1cGxleChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzOwotCi0KLS8qIFRoZSBYaXJjb20gY2FyZHMgYXJlIHBpY2t5IGFib3V0IHdoZW4gY2VydGFpbiBiaXRzIGluIENTUjYgY2FuIGJlCi0gICBtYW5pcHVsYXRlZC4gIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+LiAqLwotc3RhdGljIHZvaWQgb3V0bF9DU1I2KHUzMiBuZXdjc3I2LCBsb25nIGlvYWRkcikKLXsKLQljb25zdCBpbnQgc3RyaWN0X2JpdHMgPQotCQlUeFRocmVzaDEwIHwgVHhTdG9yZUZvcncgfCBUeFRocmVzaE1hc2sgfCBFbmFibGVUeFJ4IHwgRnVsbER1cGxleEJpdDsKLSAgICBpbnQgY3NyNSwgY3NyNV8yMl8yMCwgY3NyNV8xOV8xNywgY3VycmNzcjYsIGF0dGVtcHRzID0gMjAwOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgc2F2ZV9mbGFncyhmbGFncyk7Ci0gICAgY2xpKCk7Ci0JLyogbWFzayBvdXQgdGhlIHJlc2VydmVkIGJpdHMgdGhhdCBhbHdheXMgcmVhZCAwIG9uIHRoZSBYaXJjb20gY2FyZHMgKi8KLQluZXdjc3I2ICY9IH5SZXNlcnZlZFplcm9NYXNrOwotCS8qIG9yIGluIHRoZSByZXNlcnZlZCBiaXRzIHRoYXQgYWx3YXlzIHJlYWQgMSAqLwotCW5ld2NzcjYgfD0gUmVzZXJ2ZWRPbmVNYXNrOwotICAgIGN1cnJjc3I2ID0gaW5sKGlvYWRkciArIENTUjYpOwotICAgIGlmICgoKG5ld2NzcjYgJiBzdHJpY3RfYml0cykgPT0gKGN1cnJjc3I2ICYgc3RyaWN0X2JpdHMpKSB8fAotCSgoY3VycmNzcjYgJiB+RW5hYmxlVHhSeCkgPT0gMCkpIHsKLQkJb3V0bChuZXdjc3I2LCBpb2FkZHIgKyBDU1I2KTsJLyogc2FmZSAqLwotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLQkJcmV0dXJuOwotICAgIH0KLSAgICAvKiBtYWtlIHN1cmUgdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciBhcmUgc3RvcHBlZCBmaXJzdCAqLwotICAgIGN1cnJjc3I2ICY9IH5FbmFibGVUeFJ4OwotICAgIHdoaWxlICgxKSB7Ci0JCWNzcjUgPSBpbmwoaW9hZGRyICsgQ1NSNSk7Ci0JCWlmIChjc3I1ID09IDB4ZmZmZmZmZmYpCi0JCQlicmVhazsgIC8qIGNhbm5vdCByZWFkIGNzcjUsIGNhcmQgcmVtb3ZlZD8gKi8KLQkJY3NyNV8yMl8yMCA9IGNzcjUgJiAweDcwMDAwMDsKLQkJY3NyNV8xOV8xNyA9IGNzcjUgJiAweDBlMDAwMDsKLQkJaWYgKChjc3I1XzIyXzIwID09IDAgfHwgY3NyNV8yMl8yMCA9PSAweDYwMDAwMCkgJiYKLQkJCShjc3I1XzE5XzE3ID09IDAgfHwgY3NyNV8xOV8xNyA9PSAweDgwMDAwIHx8IGNzcjVfMTlfMTcgPT0gMHhjMDAwMCkpCi0JCQlicmVhazsgIC8qIGJvdGggYXJlIHN0b3BwZWQgb3Igc3VzcGVuZGVkICovCi0JCWlmICghLS1hdHRlbXB0cykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBvdXRsX0NTUjYgdG9vIG1hbnkgYXR0ZW1wdHMsIgotCQkJCSAgICJjc3I1PTB4JTA4eFxuIiwgY3NyNSk7Ci0JCQlvdXRsKG5ld2NzcjYsIGlvYWRkciArIENTUjYpOyAgLyogdW5zYWZlIGJ1dCBkbyBpdCBhbnl3YXkgKi8KLQkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0JCW91dGwoY3VycmNzcjYsIGlvYWRkciArIENTUjYpOwotCQl1ZGVsYXkoMSk7Ci0gICAgfQotICAgIC8qIG5vdyBpdCBpcyBzYWZlIHRvIGNoYW5nZSBjc3I2ICovCi0gICAgb3V0bChuZXdjc3I2LCBpb2FkZHIgKyBDU1I2KTsKLSAgICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcmVhZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JaW50IGksIGo7Ci0JdW5zaWduZWQgY2hhciB0dXBsZSwgbGluaywgZGF0YV9pZCwgZGF0YV9jb3VudDsKLQotCS8qIFhpcmNvbSBoYXMgaXRzIGFkZHJlc3Mgc3RvcmVkIGluIHRoZSBDSVM7Ci0JICogd2UgYWNjZXNzIGl0IHRocm91Z2ggdGhlIGJvb3Qgcm9tIGludGVyZmFjZSBmb3Igbm93Ci0JICogdGhpcyBtaWdodCBub3Qgd29yaywgYXMgdGhlIENJUyBpcyBub3QgcGFyc2VkIGJ1dCBJCi0JICogKGRhbmlsbykgdXNlIHRoZSBvZmZzZXQgSSBmb3VuZCBvbiBteSBjYXJkJ3MgQ0lTICEhIQotCSAqCi0JICogRG91ZyBMZWRmb3JkOiBJIGNoYW5nZWQgdGhpcyByb3V0aW5lIGFyb3VuZCBzbyB0aGF0IGl0Ci0JICogd2Fsa3MgdGhlIENJUyBtZW1vcnkgc3BhY2UsIHBhcnNpbmcgdGhlIGNvbmZpZyBpdGVtcywgYW5kCi0JICogZmluZHMgdGhlIHByb3BlciBsYW5fbm9kZV9pZCB0dXBsZSBhbmQgdXNlcyB0aGUgZGF0YQotCSAqIHN0b3JlZCB0aGVyZS4KLQkgKi8KLQlvdXRsKDEgPDwgMTIsIGlvYWRkciArIENTUjkpOyAvKiBlbmFibGUgYm9vdCByb20gYWNjZXNzICovCi0JZm9yIChpID0gMHgxMDA7IGkgPCAweDFmNzsgaSArPSBsaW5rKzIpIHsKLQkJb3V0bChpLCBpb2FkZHIgKyBDU1IxMCk7Ci0JCXR1cGxlID0gaW5sKGlvYWRkciArIENTUjkpICYgMHhmZjsKLQkJb3V0bChpICsgMSwgaW9hZGRyICsgQ1NSMTApOwotCQlsaW5rID0gaW5sKGlvYWRkciArIENTUjkpICYgMHhmZjsKLQkJb3V0bChpICsgMiwgaW9hZGRyICsgQ1NSMTApOwotCQlkYXRhX2lkID0gaW5sKGlvYWRkciArIENTUjkpICYgMHhmZjsKLQkJb3V0bChpICsgMywgaW9hZGRyICsgQ1NSMTApOwotCQlkYXRhX2NvdW50ID0gaW5sKGlvYWRkciArIENTUjkpICYgMHhmZjsKLQkJaWYgKCAodHVwbGUgPT0gMHgyMikgJiYKLQkJCSAoZGF0YV9pZCA9PSAweDA0KSAmJiAoZGF0YV9jb3VudCA9PSAweDA2KSApIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGl0LiAgV2UgaGF2ZSB0aGUgZGF0YSB3ZSB3YW50LgotCQkJICovCi0JCQlmb3IgKGogPSAwOyBqIDwgNjsgaisrKSB7Ci0JCQkJb3V0bChpICsgaiArIDQsIGlvYWRkciArIENTUjEwKTsKLQkJCQlkZXYtPmRldl9hZGRyW2pdID0gaW5sKGlvYWRkciArIENTUjkpICYgMHhmZjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGxpbmsgPT0gMCkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIGxvY2F0ZSB0aGUgTUlJIGludGVyZmFjZXMgYW5kIGluaXRpYWxpemUgdGhlbS4KLSAqIHdlIGRpc2FibGUgZnVsbC1kdXBsZXggbW9kZXMgaGVyZSwKLSAqIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHRoZW0uCi0gKi8KLXN0YXRpYyB2b2lkIGZpbmRfbWlpX3RyYW5zY2VpdmVycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBwaHksIHBoeV9pZHg7Ci0KLQlpZiAobWVkaWFfY2FwW3RwLT5kZWZhdWx0X3BvcnRdICYgTWVkaWFJc01JSSkgewotCQl1MTYgbWVkaWEyYWR2ZXJ0W10gPSB7IDB4MjAsIDB4NDAsIDB4MDNlMCwgMHg2MCwgMHg4MCwgMHgxMDAsIDB4MjAwIH07Ci0JCXRwLT50b19hZHZlcnRpc2UgPSBtZWRpYTJhZHZlcnRbdHAtPmRlZmF1bHRfcG9ydCAtIDldOwotCX0gZWxzZQotCQl0cC0+dG9fYWR2ZXJ0aXNlID0KLQkJCS8qQURWRVJUSVNFXzEwMEJBU0U0IHwgQURWRVJUSVNFXzEwMEZVTEwgfCovIEFEVkVSVElTRV8xMDBIQUxGIHwKLQkJCS8qQURWRVJUSVNFXzEwRlVMTCB8Ki8gQURWRVJUSVNFXzEwSEFMRiB8IEFEVkVSVElTRV9DU01BOwotCi0JLyogRmluZCB0aGUgY29ubmVjdGVkIE1JSSB4Y3Zycy4KLQkgICBEb2luZyB0aGlzIGluIG9wZW4oKSB3b3VsZCBhbGxvdyBkZXRlY3RpbmcgZXh0ZXJuYWwgeGN2cnMgbGF0ZXIsCi0JICAgYnV0IHRha2VzIG11Y2ggdGltZS4gKi8KLQlmb3IgKHBoeSA9IDAsIHBoeV9pZHggPSAwOyBwaHkgPCAzMiAmJiBwaHlfaWR4IDwgc2l6ZW9mKHRwLT5waHlzKTsgcGh5KyspIHsKLQkJaW50IG1paV9zdGF0dXMgPSBtZGlvX3JlYWQoZGV2LCBwaHksIE1JSV9CTVNSKTsKLQkJaWYgKChtaWlfc3RhdHVzICYgKEJNU1JfMTAwQkFTRTQgfCBCTVNSXzEwMEhBTEYgfCBCTVNSXzEwSEFMRikpID09IEJNU1JfMTAwQkFTRTQgfHwKLQkJCSgobWlpX3N0YXR1cyAmIEJNU1JfMTAwQkFTRTQpID09IDAgJiYKLQkJCSAobWlpX3N0YXR1cyAmIChCTVNSXzEwMEZVTEwgfCBCTVNSXzEwMEhBTEYgfCBCTVNSXzEwRlVMTCB8IEJNU1JfMTBIQUxGKSkgIT0gMCkpIHsKLQkJCWludCBtaWlfcmVnMCA9IG1kaW9fcmVhZChkZXYsIHBoeSwgTUlJX0JNQ1IpOwotCQkJaW50IG1paV9hZHZlcnQgPSBtZGlvX3JlYWQoZGV2LCBwaHksIE1JSV9BRFZFUlRJU0UpOwotCQkJaW50IHJlZzQgPSAoKG1paV9zdGF0dXMgPj4gNikgJiB0cC0+dG9fYWR2ZXJ0aXNlKSB8IEFEVkVSVElTRV9DU01BOwotCQkJdHAtPnBoeXNbcGh5X2lkeF0gPSBwaHk7Ci0JCQl0cC0+YWR2ZXJ0aXNpbmdbcGh5X2lkeCsrXSA9IHJlZzQ7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogIE1JSSB0cmFuc2NlaXZlciAjJWQgIgotCQkJCSAgICJjb25maWcgJTQuNHggc3RhdHVzICU0LjR4IGFkdmVydGlzaW5nICU0LjR4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIHBoeSwgbWlpX3JlZzAsIG1paV9zdGF0dXMsIG1paV9hZHZlcnQpOwotCQl9Ci0JfQotCXRwLT5taWlfY250ID0gcGh5X2lkeDsKLQlpZiAocGh5X2lkeCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAqKipXQVJOSU5HKioqOiBObyBNSUkgdHJhbnNjZWl2ZXIgZm91bmQhXG4iLAotCQkJICAgZGV2LT5uYW1lKTsKLQkJdHAtPnBoeXNbMF0gPSAwOwotCX0KLX0KLQotCi0vKgotICogVG8gcXVvdGUgQXJqYW4gdmFuIGRlIFZlbjoKLSAqICAgdHJhbnNjZWl2ZXJfdm9vZG9vKCkgZW5hYmxlcyB0aGUgZXh0ZXJuYWwgVVRQIHBsdWcgdGhpbmd5LgotICogICBpdCdzIGNhbGxlZCB2b29kb28gYXMgSSBzdG9sZSB0aGlzIGNvZGUgYW5kIGNhbm5vdCBjcm9zcy1yZWZlcmVuY2UKLSAqICAgaXQgd2l0aCB0aGUgc3BlY2lmaWNhdGlvbi4KLSAqIEFjdHVhbGx5IGl0IHNlZW1zIHRvIGdvIGxpa2UgdGhpczoKLSAqIC0gR1BJTzIgZW5hYmxlcyB0aGUgTUlJIGl0c2VsZiBzbyB3ZSBjYW4gdGFsayB0byBpdC4gVGhlIE1JSSBnZXRzIHJlc2V0Ci0gKiAgIHNvIGFueSBwcmlvciBNSUkgc2V0dGluZ3MgYXJlIGxvc3QuCi0gKiAtIEdQSU8wIGVuYWJsZXMgdGhlIFRQIHBvcnQgc28gdGhlIE1JSSBjYW4gdGFsayB0byB0aGUgbmV0d29yay4KLSAqIC0gYSBzb2Z0d2FyZSByZXNldCB3aWxsIHJlc2V0IGJvdGggR1BJTyBwaW5zLgotICogSSBhbHNvIG1vdmVkIHRoZSBzb2Z0d2FyZSByZXNldCBoZXJlLCBiZWNhdXNlIGRvaW5nIGl0IGluIHhpcmNvbV91cCgpCi0gKiByZXF1aXJlZCBlbmFibGluZyB0aGUgR1BJTyBwaW5zIGVhY2ggdGltZSwgd2hpY2ggcmVzZXQgdGhlIE1JSSBlYWNoIHRpbWUuCi0gKiBUaHVzIHdlIGNvdWxkbid0IGNvbnRyb2wgdGhlIE1JSSAtLSB3aGljaCBzdWNrcyBiZWNhdXNlIHdlIGRvbid0IGtub3cKLSAqIGhvdyB0byBoYW5kbGUgZnVsbC1kdXBsZXggbW9kZXMgc28gd2UgKm11c3QqIGRpc2FibGUgdGhlbS4KLSAqLwotc3RhdGljIHZvaWQgdHJhbnNjZWl2ZXJfdm9vZG9vKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCS8qIFJlc2V0IHRoZSBjaGlwLCBob2xkaW5nIGJpdCAwIHNldCBhdCBsZWFzdCA1MCBQQ0kgY3ljbGVzLiAqLwotCW91dGwoU29mdHdhcmVSZXNldCwgaW9hZGRyICsgQ1NSMCk7Ci0JdWRlbGF5KDIpOwotCi0JLyogRGVhc3NlcnQgcmVzZXQuICovCi0Jb3V0bCh0cC0+Y3NyMCwgaW9hZGRyICsgQ1NSMCk7Ci0KLQkvKiBSZXNldCB0aGUgeGN2ciBpbnRlcmZhY2UgYW5kIHR1cm4gb24gaGVhcnRiZWF0LiAqLwotCW91dGwoMHgwMDA4LCBpb2FkZHIgKyBDU1IxNSk7Ci0JdWRlbGF5KDUpOyAgLyogVGhlIGRlbGF5cyBhcmUgWGlyY29tLXJlY29tbWVuZGVkIHRvIGdpdmUgdGhlCi0JCQkJICogY2hpcHNldCB0aW1lIHRvIHJlc2V0IHRoZSBhY3R1YWwgaGFyZHdhcmUKLQkJCQkgKiBvbiB0aGUgUENNQ0lBIGNhcmQKLQkJCQkgKi8KLQlvdXRsKDB4YTgwNTAwMDAsIGlvYWRkciArIENTUjE1KTsKLQl1ZGVsYXkoNSk7Ci0Jb3V0bCgweGEwMGYwMDAwLCBpb2FkZHIgKyBDU1IxNSk7Ci0JdWRlbGF5KDUpOwotCi0Jb3V0bF9DU1I2KDAsIGlvYWRkcik7Ci0JLy9vdXRsX0NTUjYoRnVsbER1cGxleEJpdCwgaW9hZGRyKTsKLX0KLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB4aXJjb21faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqdHA7Ci0Jc3RhdGljIGludCBib2FyZF9pZHggPSAtMTsKLQlpbnQgY2hpcF9pZHggPSBpZC0+ZHJpdmVyX2RhdGE7Ci0JbG9uZyBpb2FkZHI7Ci0JaW50IGk7Ci0KLS8qIHdoZW4gYnVpbHQgaW50byB0aGUga2VybmVsLCB3ZSBvbmx5IHByaW50IHZlcnNpb24gaWYgZGV2aWNlIGlzIGZvdW5kICovCi0jaWZuZGVmIE1PRFVMRQotCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwotCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCi0JCXByaW50ayh2ZXJzaW9uKTsKLSNlbmRpZgotCi0JLy9wcmludGsoS0VSTl9JTkZPICJ4aXJjb21faW5pdF9vbmUoJXMpXG4iLCBwY2lfbmFtZShwZGV2KSk7Ci0KLQlib2FyZF9pZHgrKzsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCWlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnRwKSk7Ci0JaWYgKCFkZXYpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiBEUlZfTkFNRSAiJWQ6IGNhbm5vdCBhbGxvYyBldGhlcmRldiwgYWJvcnRpbmdcbiIsIGJvYXJkX2lkeCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwotCi0JZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7Ci0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7Ci0KLQlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBkZXYtPm5hbWUpKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgRFJWX05BTUUgIiAlZDogY2Fubm90IHJlc2VydmUgUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIsIGJvYXJkX2lkeCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKLQl9Ci0KLQkvKiBCcmluZyB0aGUgY2hpcCBvdXQgb2Ygc2xlZXAgbW9kZS4KLQkgICBDYXV0aW9uOiBTbm9vemUgbW9kZSBkb2VzIG5vdCB3b3JrIHdpdGggc29tZSBib2FyZHMhICovCi0JaWYgKHhpcmNvbV90YmxbY2hpcF9pZHhdLmZsYWdzICYgSEFTX0FDUEkpCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX1BPV0VSTUdNVCwgMCk7Ci0KLQkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IHByb2Nlc3Nlcy4gKi8KLQlvdXRsX0NTUjYoaW5sKGlvYWRkciArIENTUjYpICYgfkVuYWJsZVR4UngsIGlvYWRkcik7Ci0JLyogQ2xlYXIgdGhlIG1pc3NlZC1wYWNrZXQgY291bnRlci4gKi8KLQkodm9sYXRpbGUgaW50KWlubChpb2FkZHIgKyBDU1I4KTsKLQotCXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXNwaW5fbG9ja19pbml0KCZ0cC0+bG9jayk7Ci0JdHAtPnBkZXYgPSBwZGV2OwotCXRwLT5jaGlwX2lkID0gY2hpcF9pZHg7Ci0JLyogQnVnRml4ZXM6IFRoZSAyMTE0My1URCBoYW5ncyB3aXRoIFBDSSBXcml0ZS1hbmQtSW52YWxpZGF0ZSBjeWNsZXMuICovCi0JLyogWFhYOiBpcyB0aGlzIG5lY2Vzc2FyeSBmb3IgWGlyY29tPyAqLwotCXRwLT5jc3IwID0gY3NyMCAmIH5FbmFibGVNV0k7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQotCS8qIFRoZSBsb3dlciBmb3VyIGJpdHMgYXJlIHRoZSBtZWRpYSB0eXBlLiAqLwotCWlmIChib2FyZF9pZHggPj0gMCAmJiBib2FyZF9pZHggPCBNQVhfVU5JVFMpIHsKLQkJdHAtPmRlZmF1bHRfcG9ydCA9IG9wdGlvbnNbYm9hcmRfaWR4XSAmIDE1OwotCQlpZiAoKG9wdGlvbnNbYm9hcmRfaWR4XSAmIDB4OTApIHx8IGZ1bGxfZHVwbGV4W2JvYXJkX2lkeF0gPiAwKQotCQkJdHAtPmZ1bGxfZHVwbGV4ID0gMTsKLQkJaWYgKG10dVtib2FyZF9pZHhdID4gMCkKLQkJCWRldi0+bXR1ID0gbXR1W2JvYXJkX2lkeF07Ci0JfQotCWlmIChkZXYtPm1lbV9zdGFydCkKLQkJdHAtPmRlZmF1bHRfcG9ydCA9IGRldi0+bWVtX3N0YXJ0OwotCWlmICh0cC0+ZGVmYXVsdF9wb3J0KSB7Ci0JCWlmIChtZWRpYV9jYXBbdHAtPmRlZmF1bHRfcG9ydF0gJiBNZWRpYUFsd2F5c0ZEKQotCQkJdHAtPmZ1bGxfZHVwbGV4ID0gMTsKLQl9Ci0JaWYgKHRwLT5mdWxsX2R1cGxleCkKLQkJdHAtPmF1dG9uZWcgPSAwOwotCWVsc2UKLQkJdHAtPmF1dG9uZWcgPSAxOwotCXRwLT5zcGVlZDEwMCA9IDE7Ci0KLQkvKiBUaGUgWGlyY29tLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJnhpcmNvbV9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnhpcmNvbV9zdGFydF94bWl0OwotCWRldi0+c3RvcCA9ICZ4aXJjb21fY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmeGlyY29tX2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsID0gJnhpcmNvbV9pb2N0bDsKLSNpZmRlZiBIQVZFX01VTFRJQ0FTVAotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9yeF9tb2RlOwotI2VuZGlmCi0JZGV2LT50eF90aW1lb3V0ID0geGlyY29tX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0JU0VUX0VUSFRPT0xfT1BTKGRldiwgJm9wcyk7Ci0KLQl0cmFuc2NlaXZlcl92b29kb28oZGV2KTsKLQotCXJlYWRfbWFjX2FkZHJlc3MoZGV2KTsKLQotCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkKLQkJZ290byBlcnJfb3V0X2NsZWFyZGV2OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIHJldiAlZCBhdCAlIzNseCwiLAotCSAgICAgICBkZXYtPm5hbWUsIHhpcmNvbV90YmxbY2hpcF9pZHhdLmNoaXBfbmFtZSwgcGRldi0+cmV2aXNpb24sIGlvYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJcHJpbnRrKCIlYyUyLjJYIiwgaSA/ICc6JyA6ICcgJywgZGV2LT5kZXZfYWRkcltpXSk7Ci0JcHJpbnRrKCIsIElSUSAlZC5cbiIsIGRldi0+aXJxKTsKLQotCWlmICh4aXJjb21fdGJsW2NoaXBfaWR4XS5mbGFncyAmIEhBU19NSUkpIHsKLQkJZmluZF9taWlfdHJhbnNjZWl2ZXJzKGRldik7Ci0JCWNoZWNrX2R1cGxleChkZXYpOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2NsZWFyZGV2OgotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotZXJyX291dF9mcmVlX25ldGRldjoKLQlmcmVlX25ldGRldihkZXYpOwotCXJldHVybiAtRU5PREVWOwotfQotCi0KLS8qIE1JSSB0cmFuc2NlaXZlciBjb250cm9sIHNlY3Rpb24uCi0gICBSZWFkIGFuZCB3cml0ZSB0aGUgTUlJIHJlZ2lzdGVycyB1c2luZyBzb2Z0d2FyZS1nZW5lcmF0ZWQgc2VyaWFsCi0gICBNRElPIHByb3RvY29sLiAgU2VlIHRoZSBNSUkgc3BlY2lmaWNhdGlvbnMgb3IgRFA4Mzg0MEEgZGF0YSBzaGVldAotICAgZm9yIGRldGFpbHMuICovCi0KLS8qIFRoZSBtYXhpbXVtIGRhdGEgY2xvY2sgcmF0ZSBpcyAyLjUgTWh6LiAgVGhlIG1pbmltdW0gdGltaW5nIGlzIHVzdWFsbHkKLSAgIG1ldCBieSBiYWNrLXRvLWJhY2sgUENJIEkvTyBjeWNsZXMsIGJ1dCB3ZSBpbnNlcnQgYSBkZWxheSB0byBhdm9pZAotICAgIm92ZXJjbG9ja2luZyIgaXNzdWVzIG9yIGZ1dHVyZSA2Nk1oeiBQQ0kuICovCi0jZGVmaW5lIG1kaW9fZGVsYXkoKSBpbmwobWRpb19hZGRyKQotCi0vKiBSZWFkIGFuZCB3cml0ZSB0aGUgTUlJIHJlZ2lzdGVycyB1c2luZyBzb2Z0d2FyZS1nZW5lcmF0ZWQgc2VyaWFsCi0gICBNRElPIHByb3RvY29sLiAgSXQgaXMganVzdCBkaWZmZXJlbnQgZW5vdWdoIGZyb20gdGhlIEVFUFJPTSBwcm90b2NvbAotICAgdG8gbm90IHNoYXJlIGNvZGUuICBUaGUgbWF4aXVtIGRhdGEgY2xvY2sgcmF0ZSBpcyAyLjUgTWh6LiAqLwotI2RlZmluZSBNRElPX1NISUZUX0NMSwkweDEwMDAwCi0jZGVmaW5lIE1ESU9fREFUQV9XUklURTAgMHgwMDAwMAotI2RlZmluZSBNRElPX0RBVEFfV1JJVEUxIDB4MjAwMDAKLSNkZWZpbmUgTURJT19FTkIJCTB4MDAwMDAJCS8qIElnbm9yZSB0aGUgMHgwMjAwMCBkYXRhYm9vayBzZXR0aW5nLiAqLwotI2RlZmluZSBNRElPX0VOQl9JTgkJMHg0MDAwMAotI2RlZmluZSBNRElPX0RBVEFfUkVBRAkweDgwMDAwCi0KLXN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKLXsKLQlpbnQgaTsKLQlpbnQgcmVhZF9jbWQgPSAoMHhmNiA8PCAxMCkgfCAocGh5X2lkIDw8IDUpIHwgbG9jYXRpb247Ci0JaW50IHJldHZhbCA9IDA7Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlsb25nIG1kaW9fYWRkciA9IGlvYWRkciArIENTUjk7Ci0KLQkvKiBFc3RhYmxpc2ggc3luYyBieSBzZW5kaW5nIGF0IGxlYXN0IDMyIGxvZ2ljIG9uZXMuICovCi0JZm9yIChpID0gMzI7IGkgPj0gMDsgaS0tKSB7Ci0JCW91dGwoTURJT19FTkIgfCBNRElPX0RBVEFfV1JJVEUxLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7Ci0JCW91dGwoTURJT19FTkIgfCBNRElPX0RBVEFfV1JJVEUxIHwgTURJT19TSElGVF9DTEssIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkoKTsKLQl9Ci0JLyogU2hpZnQgdGhlIHJlYWQgY29tbWFuZCBiaXRzIG91dC4gKi8KLQlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKLQkJaW50IGRhdGF2YWwgPSAocmVhZF9jbWQgJiAoMSA8PCBpKSkgPyBNRElPX0RBVEFfV1JJVEUxIDogMDsKLQotCQlvdXRsKE1ESU9fRU5CIHwgZGF0YXZhbCwgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOwotCQlvdXRsKE1ESU9fRU5CIHwgZGF0YXZhbCB8IE1ESU9fU0hJRlRfQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7Ci0JfQotCS8qIFJlYWQgdGhlIHR3byB0cmFuc2l0aW9uLCAxNiBkYXRhLCBhbmQgd2lyZS1pZGxlIGJpdHMuICovCi0JZm9yIChpID0gMTk7IGkgPiAwOyBpLS0pIHsKLQkJb3V0bChNRElPX0VOQl9JTiwgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOwotCQlyZXR2YWwgPSAocmV0dmFsIDw8IDEpIHwgKChpbmwobWRpb19hZGRyKSAmIE1ESU9fREFUQV9SRUFEKSA/IDEgOiAwKTsKLQkJb3V0bChNRElPX0VOQl9JTiB8IE1ESU9fU0hJRlRfQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7Ci0JfQotCXJldHVybiAocmV0dmFsPj4xKSAmIDB4ZmZmZjsKLX0KLQotCi1zdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbHVlKQotewotCWludCBpOwotCWludCBjbWQgPSAoMHg1MDAyIDw8IDE2KSB8IChwaHlfaWQgPDwgMjMpIHwgKGxvY2F0aW9uIDw8IDE4KSB8IHZhbHVlOwotCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JbG9uZyBtZGlvX2FkZHIgPSBpb2FkZHIgKyBDU1I5OwotCi0JLyogRXN0YWJsaXNoIHN5bmMgYnkgc2VuZGluZyAzMiBsb2dpYyBvbmVzLiAqLwotCWZvciAoaSA9IDMyOyBpID49IDA7IGktLSkgewotCQlvdXRsKE1ESU9fRU5CIHwgTURJT19EQVRBX1dSSVRFMSwgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOwotCQlvdXRsKE1ESU9fRU5CIHwgTURJT19EQVRBX1dSSVRFMSB8IE1ESU9fU0hJRlRfQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7Ci0JfQotCS8qIFNoaWZ0IHRoZSBjb21tYW5kIGJpdHMgb3V0LiAqLwotCWZvciAoaSA9IDMxOyBpID49IDA7IGktLSkgewotCQlpbnQgZGF0YXZhbCA9IChjbWQgJiAoMSA8PCBpKSkgPyBNRElPX0RBVEFfV1JJVEUxIDogMDsKLQkJb3V0bChNRElPX0VOQiB8IGRhdGF2YWwsIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkoKTsKLQkJb3V0bChNRElPX0VOQiB8IGRhdGF2YWwgfCBNRElPX1NISUZUX0NMSywgbWRpb19hZGRyKTsKLQkJbWRpb19kZWxheSgpOwotCX0KLQkvKiBDbGVhciBvdXQgZXh0cmEgYml0cy4gKi8KLQlmb3IgKGkgPSAyOyBpID4gMDsgaS0tKSB7Ci0JCW91dGwoTURJT19FTkJfSU4sIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkoKTsKLQkJb3V0bChNRElPX0VOQl9JTiB8IE1ESU9fU0hJRlRfQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5KCk7Ci0JfQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZAoteGlyY29tX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlpbnQgaTsKLQotCXhpcmNvbV9pbml0X3JpbmcoZGV2KTsKLQkvKiBDbGVhciB0aGUgdHggcmluZyAqLwotCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewotCQl0cC0+dHhfc2tidWZmW2ldID0gTlVMTDsKLQkJdHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gMDsKLQl9Ci0KLQlpZiAoeGlyY29tX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB4aXJjb21fdXAoKSBpcnEgJWQuXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKLQotCW91dGwodmlydF90b19idXModHAtPnJ4X3JpbmcpLCBpb2FkZHIgKyBDU1IzKTsKLQlvdXRsKHZpcnRfdG9fYnVzKHRwLT50eF9yaW5nKSwgaW9hZGRyICsgQ1NSNCk7Ci0KLQl0cC0+c2F2ZWRfaWZfcG9ydCA9IGRldi0+aWZfcG9ydDsKLQlpZiAoZGV2LT5pZl9wb3J0ID09IDApCi0JCWRldi0+aWZfcG9ydCA9IHRwLT5kZWZhdWx0X3BvcnQ7Ci0KLQl0cC0+Y3NyNiA9IFR4VGhyZXNoMTAgLyp8IEZ1bGxEdXBsZXhCaXQqLzsJCQkJCQkvKiBYWFg6IHdoeSAxMCBhbmQgbm90IDEwMD8gKi8KLQotCXNldF9yeF9tb2RlKGRldik7Ci0KLQkvKiBTdGFydCB0aGUgY2hpcCdzIFR4IHRvIHByb2Nlc3Mgc2V0dXAgZnJhbWUuICovCi0Jb3V0bF9DU1I2KHRwLT5jc3I2LCBpb2FkZHIpOwotCW91dGxfQ1NSNih0cC0+Y3NyNiB8IEVuYWJsZVR4LCBpb2FkZHIpOwotCi0JLyogQWNrbm93bGVkZ2UgYWxsIG91dHN0YW5kaW5nIGludGVycnVwdHMgc291cmNlcyAqLwotCW91dGwoeGlyY29tX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMsIGlvYWRkciArIENTUjUpOwotCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwotCW91dGwoeGlyY29tX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMsIGlvYWRkciArIENTUjcpOwotCS8qIEVuYWJsZSBSeCAqLwotCW91dGxfQ1NSNih0cC0+Y3NyNiB8IEVuYWJsZVR4UngsIGlvYWRkcik7Ci0JLyogUnggcG9sbCBkZW1hbmQgKi8KLQlvdXRsKDAsIGlvYWRkciArIENTUjIpOwotCi0JLyogVGVsbCB0aGUgbmV0IGxheWVyIHdlJ3JlIHJlYWR5ICovCi0JbmV0aWZfc3RhcnRfcXVldWUgKGRldik7Ci0KLQkvKiBDaGVjayBjdXJyZW50IG1lZGlhIHN0YXRlICovCi0JeGlyY29tX21lZGlhX2NoYW5nZShkZXYpOwotCi0JaWYgKHhpcmNvbV9kZWJ1ZyA+IDIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBEb25lIHhpcmNvbV91cCgpLCBDU1IwICU4Ljh4LCBDU1I1ICU4Ljh4IENTUjYgJTguOHguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBpbmwoaW9hZGRyICsgQ1NSMCksIGlubChpb2FkZHIgKyBDU1I1KSwKLQkJCSAgIGlubChpb2FkZHIgKyBDU1I2KSk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQKLXhpcmNvbV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ4aXJjb21faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXhpcmNvbV91cChkZXYpOwotCXRwLT5vcGVuID0gMTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHhpcmNvbV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCWlmIChtZWRpYV9jYXBbZGV2LT5pZl9wb3J0XSAmIE1lZGlhSXNNSUkpIHsKLQkJLyogRG8gbm90aGluZyAtLSB0aGUgbWVkaWEgbW9uaXRvciBzaG91bGQgaGFuZGxlIHRoaXMuICovCi0JCWlmICh4aXJjb21fZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IHRpbWVvdXQgdXNpbmcgTUlJIGRldmljZS5cbiIsCi0JCQkJICAgZGV2LT5uYW1lKTsKLQl9Ci0KLSNpZiBkZWZpbmVkKHdheV90b29fbWFueV9tZXNzYWdlcykKLQlpZiAoeGlyY29tX2RlYnVnID4gMykgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7Ci0JCQl1OCAqYnVmID0gKHU4ICopKHRwLT5yeF9yaW5nW2ldLmJ1ZmZlcjEpOwotCQkJaW50IGo7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTJkOiAlOC44eCAlOC44eCAlOC44eCAlOC44eCAgIgotCQkJCSAgICIlMi4yeCAlMi4yeCAlMi4yeC5cbiIsCi0JCQkJICAgaSwgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5zdGF0dXMsCi0JCQkJICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5sZW5ndGgsCi0JCQkJICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5idWZmZXIxLAotCQkJCSAgICh1bnNpZ25lZCBpbnQpdHAtPnJ4X3JpbmdbaV0uYnVmZmVyMiwKLQkJCQkgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKLQkJCWZvciAoaiA9IDA7IGJ1ZltqXSAhPSAweGVlICYmIGogPCAxNjAwOyBqKyspCi0JCQkJaWYgKGogPCAxMDApIHByaW50aygiICUyLjJ4IiwgYnVmW2pdKTsKLQkJCXByaW50aygiIGo9JWQuXG4iLCBqKTsKLQkJfQotCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICU4Ljh4OiAiLCAoaW50KXRwLT5yeF9yaW5nKTsKLQkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKQotCQkJcHJpbnRrKCIgJTguOHgiLCAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLnN0YXR1cyk7Ci0JCXByaW50aygiXG4iIEtFUk5fREVCVUcgIiAgVHggcmluZyAlOC44eDogIiwgKGludCl0cC0+dHhfcmluZyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykKLQkJCXByaW50aygiICU4Ljh4IiwgKHVuc2lnbmVkIGludCl0cC0+dHhfcmluZ1tpXS5zdGF0dXMpOwotCQlwcmludGsoIlxuIik7Ci0JfQotI2VuZGlmCi0KLQkvKiBTdG9wIGFuZCByZXN0YXJ0IHRoZSBjaGlwJ3MgVHgvUnggcHJvY2Vzc2VzIC4gKi8KLQlvdXRsX0NTUjYodHAtPmNzcjYgfCBFbmFibGVSeCwgaW9hZGRyKTsKLQlvdXRsX0NTUjYodHAtPmNzcjYgfCBFbmFibGVUeFJ4LCBpb2FkZHIpOwotCS8qIFRyaWdnZXIgYW4gaW1tZWRpYXRlIHRyYW5zbWl0IGRlbWFuZC4gKi8KLQlvdXRsKDAsIGlvYWRkciArIENTUjEpOwotCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLQl0cC0+c3RhdHMudHhfZXJyb3JzKys7Ci19Ci0KLQotLyogSW5pdGlhbGl6ZSB0aGUgUnggYW5kIFR4IHJpbmdzLCBhbG9uZyB3aXRoIHZhcmlvdXMgJ2RldicgYml0cy4gKi8KLXN0YXRpYyB2b2lkIHhpcmNvbV9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKLQotCXRwLT50eF9mdWxsID0gMDsKLQl0cC0+Y3VyX3J4ID0gdHAtPmN1cl90eCA9IDA7Ci0JdHAtPmRpcnR5X3J4ID0gdHAtPmRpcnR5X3R4ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQl0cC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwotCQl0cC0+cnhfcmluZ1tpXS5sZW5ndGggPSBQS1RfQlVGX1NaOwotCQl0cC0+cnhfcmluZ1tpXS5idWZmZXIyID0gdmlydF90b19idXMoJnRwLT5yeF9yaW5nW2krMV0pOwotCQl0cC0+cnhfc2tidWZmW2ldID0gTlVMTDsKLQl9Ci0JLyogTWFyayB0aGUgbGFzdCBlbnRyeSBhcyB3cmFwcGluZyB0aGUgcmluZy4gKi8KLQl0cC0+cnhfcmluZ1tpLTFdLmxlbmd0aCA9IFBLVF9CVUZfU1ogfCBSeDFSaW5nV3JhcDsKLQl0cC0+cnhfcmluZ1tpLTFdLmJ1ZmZlcjIgPSB2aXJ0X3RvX2J1cygmdHAtPnJ4X3JpbmdbMF0pOwotCi0JZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7Ci0JCS8qIE5vdGUgdGhlIHJlY2VpdmUgYnVmZmVyIG11c3QgYmUgbG9uZ3dvcmQgYWxpZ25lZC4KLQkJICAgZGV2X2FsbG9jX3NrYigpIHByb3ZpZGVzIDE2IGJ5dGUgYWxpZ25tZW50LiAgQnV0IGRvICpub3QqCi0JCSAgIHVzZSBza2JfcmVzZXJ2ZSgpIHRvIGFsaWduIHRoZSBJUCBoZWFkZXIhICovCi0JCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU1opOwotCQl0cC0+cnhfc2tidWZmW2ldID0gc2tiOwotCQlpZiAoc2tiID09IE5VTEwpCi0JCQlicmVhazsKLQkJc2tiLT5kZXYgPSBkZXY7CQkJLyogTWFyayBhcyBiZWluZyB1c2VkIGJ5IHRoaXMgZGV2aWNlLiAqLwotCQl0cC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBSeDBEZXNjT3duZWQ7CS8qIE93bmVkIGJ5IFhpcmNvbSBjaGlwICovCi0JCXRwLT5yeF9yaW5nW2ldLmJ1ZmZlcjEgPSB2aXJ0X3RvX2J1cyhza2ItPmRhdGEpOwotCX0KLQl0cC0+ZGlydHlfcnggPSAodW5zaWduZWQgaW50KShpIC0gUlhfUklOR19TSVpFKTsKLQotCS8qIFRoZSBUeCBidWZmZXIgZGVzY3JpcHRvciBpcyBmaWxsZWQgaW4gYXMgbmVlZGVkLCBidXQgd2UKLQkgICBkbyBuZWVkIHRvIGNsZWFyIHRoZSBvd25lcnNoaXAgYml0LiAqLwotCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewotCQl0cC0+dHhfc2tidWZmW2ldID0gTlVMTDsKLQkJdHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gMDsKLQkJdHAtPnR4X3JpbmdbaV0uYnVmZmVyMiA9IHZpcnRfdG9fYnVzKCZ0cC0+dHhfcmluZ1tpKzFdKTsKLQkJaWYgKHRwLT5jaGlwX2lkID09IFgzMjAxXzMpCi0JCQl0cC0+dHhfYWxpZ25lZF9za2J1ZmZbaV0gPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU1opOwotCX0KLQl0cC0+dHhfcmluZ1tpLTFdLmJ1ZmZlcjIgPSB2aXJ0X3RvX2J1cygmdHAtPnR4X3JpbmdbMF0pOwotfQotCi0KLXN0YXRpYyBpbnQKLXhpcmNvbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVudHJ5OwotCXUzMiBmbGFnOwotCi0JLyogQ2F1dGlvbjogdGhlIHdyaXRlIG9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCBzZXQgdGhlIGJhc2UgYWRkcmVzcwotCSAgIHdpdGggdGhlICJvd25lcnNoaXAiIGJpdHMgbGFzdC4gKi8KLQotCS8qIENhbGN1bGF0ZSB0aGUgbmV4dCBUeCBkZXNjcmlwdG9yIGVudHJ5LiAqLwotCWVudHJ5ID0gdHAtPmN1cl90eCAlIFRYX1JJTkdfU0laRTsKLQotCXRwLT50eF9za2J1ZmZbZW50cnldID0gc2tiOwotCWlmICh0cC0+Y2hpcF9pZCA9PSBYMzIwMV8zKSB7Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLAotCQkJCQkgIHRwLT50eF9hbGlnbmVkX3NrYnVmZltlbnRyeV0tPmRhdGEsCi0JCQkJCSAgc2tiLT5sZW4pOwotCQl0cC0+dHhfcmluZ1tlbnRyeV0uYnVmZmVyMSA9IHZpcnRfdG9fYnVzKHRwLT50eF9hbGlnbmVkX3NrYnVmZltlbnRyeV0tPmRhdGEpOwotCX0gZWxzZQotCQl0cC0+dHhfcmluZ1tlbnRyeV0uYnVmZmVyMSA9IHZpcnRfdG9fYnVzKHNrYi0+ZGF0YSk7Ci0KLQlpZiAodHAtPmN1cl90eCAtIHRwLT5kaXJ0eV90eCA8IFRYX1JJTkdfU0laRS8yKSB7LyogVHlwaWNhbCBwYXRoICovCi0JCWZsYWcgPSBUeDFXaG9sZVBrdDsgLyogTm8gaW50ZXJydXB0ICovCi0JfSBlbHNlIGlmICh0cC0+Y3VyX3R4IC0gdHAtPmRpcnR5X3R4ID09IFRYX1JJTkdfU0laRS8yKSB7Ci0JCWZsYWcgPSBUeDFXaG9sZVBrdCB8IFR4MUNvbXBsSW50cjsgLyogVHgtZG9uZSBpbnRyLiAqLwotCX0gZWxzZSBpZiAodHAtPmN1cl90eCAtIHRwLT5kaXJ0eV90eCA8IFRYX1JJTkdfU0laRSAtIDIpIHsKLQkJZmxhZyA9IFR4MVdob2xlUGt0OyAvKiBObyBUeC1kb25lIGludHIuICovCi0JfSBlbHNlIHsKLQkJLyogTGVhdmUgcm9vbSBmb3Igc2V0X3J4X21vZGUoKSB0byBmaWxsIGVudHJpZXMuICovCi0JCWZsYWcgPSBUeDFXaG9sZVBrdCB8IFR4MUNvbXBsSW50cjsgLyogVHgtZG9uZSBpbnRyLiAqLwotCQl0cC0+dHhfZnVsbCA9IDE7Ci0JfQotCWlmIChlbnRyeSA9PSBUWF9SSU5HX1NJWkUgLSAxKQotCQlmbGFnIHw9IFR4MVdob2xlUGt0IHwgVHgxQ29tcGxJbnRyIHwgVHgxUmluZ1dyYXA7Ci0KLQl0cC0+dHhfcmluZ1tlbnRyeV0ubGVuZ3RoID0gc2tiLT5sZW4gfCBmbGFnOwotCXRwLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMgPSBUeDBEZXNjT3duZWQ7CS8qIFBhc3Mgb3duZXJzaGlwIHRvIHRoZSBjaGlwLiAqLwotCXRwLT5jdXJfdHgrKzsKLQlpZiAodHAtPnR4X2Z1bGwpCi0JCW5ldGlmX3N0b3BfcXVldWUgKGRldik7Ci0JZWxzZQotCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCi0JLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUgdHJhbnNtaXQgZGVtYW5kLiAqLwotCW91dGwoMCwgZGV2LT5iYXNlX2FkZHIgKyBDU1IxKTsKLQotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgeGlyY29tX21lZGlhX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JdTE2IHJlZzAsIHJlZzEsIHJlZzQsIHJlZzU7Ci0JdTMyIGNzcjYgPSBpbmwoaW9hZGRyICsgQ1NSNiksIG5ld2NzcjY7Ci0KLQkvKiByZXNldCBzdGF0dXMgZmlyc3QgKi8KLQltZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgTUlJX0JNQ1IpOwotCW1kaW9fcmVhZChkZXYsIHRwLT5waHlzWzBdLCBNSUlfQk1TUik7Ci0KLQlyZWcwID0gbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIE1JSV9CTUNSKTsKLQlyZWcxID0gbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIE1JSV9CTVNSKTsKLQotCWlmIChyZWcxICYgQk1TUl9MU1RBVFVTKSB7Ci0JCS8qIGxpbmsgaXMgdXAgKi8KLQkJaWYgKHJlZzAgJiBCTUNSX0FORU5BQkxFKSB7Ci0JCQkvKiBhdXRvbmVnb3RpYXRpb24gaXMgZW5hYmxlZCAqLwotCQkJcmVnNCA9IG1kaW9fcmVhZChkZXYsIHRwLT5waHlzWzBdLCBNSUlfQURWRVJUSVNFKTsKLQkJCXJlZzUgPSBtZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgTUlJX0xQQSk7Ci0JCQlpZiAocmVnNCAmIEFEVkVSVElTRV8xMDBGVUxMICYmIHJlZzUgJiBMUEFfMTAwRlVMTCkgewotCQkJCXRwLT5zcGVlZDEwMCA9IDE7Ci0JCQkJdHAtPmZ1bGxfZHVwbGV4ID0gMTsKLQkJCX0gZWxzZSBpZiAocmVnNCAmIEFEVkVSVElTRV8xMDBIQUxGICYmIHJlZzUgJiBMUEFfMTAwSEFMRikgewotCQkJCXRwLT5zcGVlZDEwMCA9IDE7Ci0JCQkJdHAtPmZ1bGxfZHVwbGV4ID0gMDsKLQkJCX0gZWxzZSBpZiAocmVnNCAmIEFEVkVSVElTRV8xMEZVTEwgJiYgcmVnNSAmIExQQV8xMEZVTEwpIHsKLQkJCQl0cC0+c3BlZWQxMDAgPSAwOwotCQkJCXRwLT5mdWxsX2R1cGxleCA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCXRwLT5zcGVlZDEwMCA9IDA7Ci0JCQkJdHAtPmZ1bGxfZHVwbGV4ID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGF1dG9uZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCAqLwotCQkJaWYgKHJlZzAgJiBCTUNSX1NQRUVEMTAwKQotCQkJCXRwLT5zcGVlZDEwMCA9IDE7Ci0JCQllbHNlCi0JCQkJdHAtPnNwZWVkMTAwID0gMDsKLQkJCWlmIChyZWcwICYgQk1DUl9GVUxMRFBMWCkKLQkJCQl0cC0+ZnVsbF9kdXBsZXggPSAxOwotCQkJZWxzZQotCQkJCXRwLT5mdWxsX2R1cGxleCA9IDA7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMaW5rIGlzIHVwLCBydW5uaW5nIGF0ICVzTWJpdCAlcy1kdXBsZXhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsCi0JCSAgICAgICB0cC0+c3BlZWQxMDAgPyAiMTAwIiA6ICIxMCIsCi0JCSAgICAgICB0cC0+ZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpOwotCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCW5ld2NzcjYgPSBjc3I2ICYgfkZ1bGxEdXBsZXhCaXQ7Ci0JCWlmICh0cC0+ZnVsbF9kdXBsZXgpCi0JCQluZXdjc3I2IHw9IEZ1bGxEdXBsZXhCaXQ7Ci0JCWlmIChuZXdjc3I2ICE9IGNzcjYpCi0JCQlvdXRsX0NTUjYobmV3Y3NyNiwgaW9hZGRyICsgQ1NSNik7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMaW5rIGlzIGRvd25cbiIsIGRldi0+bmFtZSk7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIGNoZWNrX2R1cGxleChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiByZWcwOwotCi0JbWRpb193cml0ZShkZXYsIHRwLT5waHlzWzBdLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7Ci0JdWRlbGF5KDUwMCk7Ci0Jd2hpbGUgKG1kaW9fcmVhZChkZXYsIHRwLT5waHlzWzBdLCBNSUlfQk1DUikgJiBCTUNSX1JFU0VUKTsKLQotCXJlZzAgPSBtZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgTUlJX0JNQ1IpOwotCW1kaW9fd3JpdGUoZGV2LCB0cC0+cGh5c1swXSwgTUlJX0FEVkVSVElTRSwgdHAtPmFkdmVydGlzaW5nWzBdKTsKLQotCWlmICh0cC0+YXV0b25lZykgewotCQlyZWcwICY9IH4oQk1DUl9TUEVFRDEwMCB8IEJNQ1JfRlVMTERQTFgpOwotCQlyZWcwIHw9IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVDsKLQl9IGVsc2UgewotCQlyZWcwICY9IH4oQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKLQkJaWYgKHRwLT5zcGVlZDEwMCkKLQkJCXJlZzAgfD0gQk1DUl9TUEVFRDEwMDsKLQkJaWYgKHRwLT5mdWxsX2R1cGxleCkKLQkJCXJlZzAgfD0gQk1DUl9GVUxMRFBMWDsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMaW5rIGZvcmNlZCB0byAlc01iaXQgJXMtZHVwbGV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLAotCQkgICAgICAgdHAtPnNwZWVkMTAwID8gIjEwMCIgOiAiMTAiLAotCQkgICAgICAgdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKLQl9Ci0JbWRpb193cml0ZShkZXYsIHRwLT5waHlzWzBdLCBNSUlfQk1DUiwgcmVnMCk7Ci19Ci0KLQotLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCi0gICBhZnRlciB0aGUgVHggdGhyZWFkLiAqLwotc3RhdGljIGlycXJldHVybl90IHhpcmNvbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlpbnQgY3NyNSwgd29ya19idWRnZXQgPSBtYXhfaW50ZXJydXB0X3dvcms7Ci0JaW50IGhhbmRsZWQgPSAwOwotCi0Jc3Bpbl9sb2NrICgmdHAtPmxvY2spOwotCi0JZG8gewotCQljc3I1ID0gaW5sKGlvYWRkciArIENTUjUpOwotCQkvKiBBY2tub3dsZWRnZSBhbGwgb2YgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHNvdXJjZXMgQVNBUC4gKi8KLQkJb3V0bChjc3I1ICYgMHgwMDAxZmZmZiwgaW9hZGRyICsgQ1NSNSk7Ci0KLQkJaWYgKHhpcmNvbV9kZWJ1ZyA+IDQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGludGVycnVwdCAgY3NyNT0lIzguOHggbmV3IGNzcjU9JSM4Ljh4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIGNzcjUsIGlubChkZXYtPmJhc2VfYWRkciArIENTUjUpKTsKLQotCQlpZiAoY3NyNSA9PSAweGZmZmZmZmZmKQotCQkJYnJlYWs7CS8qIGFsbCBiaXRzIHNldCwgYXNzdW1lIFBDTUNJQSBjYXJkIHJlbW92ZWQgKi8KLQotCQlpZiAoKGNzcjUgJiAoTm9ybWFsSW50cnxBYm5vcm1hbEludHIpKSA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJaGFuZGxlZCA9IDE7Ci0KLQkJaWYgKGNzcjUgJiAoUnhJbnRyIHwgUnhOb0J1ZikpCi0JCQl3b3JrX2J1ZGdldCAtPSB4aXJjb21fcngoZGV2KTsKLQotCQlpZiAoY3NyNSAmIChUeE5vQnVmIHwgVHhEaWVkIHwgVHhJbnRyKSkgewotCQkJdW5zaWduZWQgaW50IGRpcnR5X3R4OwotCi0JCQlmb3IgKGRpcnR5X3R4ID0gdHAtPmRpcnR5X3R4OyB0cC0+Y3VyX3R4IC0gZGlydHlfdHggPiAwOwotCQkJCSBkaXJ0eV90eCsrKSB7Ci0JCQkJaW50IGVudHJ5ID0gZGlydHlfdHggJSBUWF9SSU5HX1NJWkU7Ci0JCQkJaW50IHN0YXR1cyA9IHRwLT50eF9yaW5nW2VudHJ5XS5zdGF0dXM7Ci0KLQkJCQlpZiAoc3RhdHVzIDwgMCkKLQkJCQkJYnJlYWs7CQkJLyogSXQgc3RpbGwgaGFzbid0IGJlZW4gVHhlZCAqLwotCQkJCS8qIENoZWNrIGZvciBSeCBmaWx0ZXIgc2V0dXAgZnJhbWVzLiAqLwotCQkJCWlmICh0cC0+dHhfc2tidWZmW2VudHJ5XSA9PSBOVUxMKQotCQkJCSAgY29udGludWU7Ci0KLQkJCQlpZiAoc3RhdHVzICYgVHgwRGVzY0Vycm9yKSB7Ci0JCQkJCS8qIFRoZXJlIHdhcyBhbiBtYWpvciBlcnJvciwgbG9nIGl0LiAqLwotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0JCQkJCWlmICh4aXJjb21fZGVidWcgPiAxKQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICU4Ljh4LlxuIiwKLQkJCQkJCQkgICBkZXYtPm5hbWUsIHN0YXR1cyk7Ci0jZW5kaWYKLQkJCQkJdHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJCQlpZiAoc3RhdHVzICYgVHgwTWFueUNvbGwpIHsKLQkJCQkJCXRwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJCQl9Ci0JCQkJCWlmIChzdGF0dXMgJiBUeDBOb0NhcnJpZXIpIHRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwotCQkJCQlpZiAoc3RhdHVzICYgVHgwTGF0ZUNvbGwpIHRwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7Ci0JCQkJCWlmIChzdGF0dXMgJiBUeDBVbmRlcmZsb3cpIHRwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRwLT5zdGF0cy50eF9ieXRlcyArPSB0cC0+dHhfcmluZ1tlbnRyeV0ubGVuZ3RoICYgMHg3ZmY7Ci0JCQkJCXRwLT5zdGF0cy5jb2xsaXNpb25zICs9IChzdGF0dXMgPj4gMykgJiAxNTsKLQkJCQkJdHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCQl9Ci0KLQkJCQkvKiBGcmVlIHRoZSBvcmlnaW5hbCBza2IuICovCi0JCQkJZGV2X2tmcmVlX3NrYl9pcnEodHAtPnR4X3NrYnVmZltlbnRyeV0pOwotCQkJCXRwLT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKLQkJCX0KLQotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0JCQlpZiAodHAtPmN1cl90eCAtIGRpcnR5X3R4ID4gVFhfUklOR19TSVpFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLCBmdWxsPSVkLlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgdHAtPmN1cl90eCwgdHAtPnR4X2Z1bGwpOwotCQkJCWRpcnR5X3R4ICs9IFRYX1JJTkdfU0laRTsKLQkJCX0KLSNlbmRpZgotCi0JCQlpZiAodHAtPnR4X2Z1bGwgJiYKLQkJCSAgICB0cC0+Y3VyX3R4IC0gZGlydHlfdHggIDwgVFhfUklOR19TSVpFIC0gMikKLQkJCQkvKiBUaGUgcmluZyBpcyBubyBsb25nZXIgZnVsbCAqLwotCQkJCXRwLT50eF9mdWxsID0gMDsKLQotCQkJaWYgKHRwLT50eF9mdWxsKQotCQkJCW5ldGlmX3N0b3BfcXVldWUgKGRldik7Ci0JCQllbHNlCi0JCQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLQotCQkJdHAtPmRpcnR5X3R4ID0gZGlydHlfdHg7Ci0JCQlpZiAoY3NyNSAmIFR4RGllZCkgewotCQkJCWlmICh4aXJjb21fZGVidWcgPiAyKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhlIHRyYW5zbWl0dGVyIHN0b3BwZWQuIgotCQkJCQkJICAgIiAgQ1NSNSBpcyAleCwgQ1NSNiAleCwgbmV3IENTUjYgJXguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBjc3I1LCBpbmwoaW9hZGRyICsgQ1NSNiksIHRwLT5jc3I2KTsKLQkJCQlvdXRsX0NTUjYodHAtPmNzcjYgfCBFbmFibGVSeCwgaW9hZGRyKTsKLQkJCQlvdXRsX0NTUjYodHAtPmNzcjYgfCBFbmFibGVUeFJ4LCBpb2FkZHIpOwotCQkJfQotCQl9Ci0KLQkJLyogTG9nIGVycm9ycy4gKi8KLQkJaWYgKGNzcjUgJiBBYm5vcm1hbEludHIpIHsJLyogQWJub3JtYWwgZXJyb3Igc3VtbWFyeSBiaXQuICovCi0JCQlpZiAoY3NyNSAmIExpbmtDaGFuZ2UpCi0JCQkJeGlyY29tX21lZGlhX2NoYW5nZShkZXYpOwotCQkJaWYgKGNzcjUgJiBUeEZJRk9VbmRlcmZsb3cpIHsKLQkJCQlpZiAoKHRwLT5jc3I2ICYgVHhUaHJlc2hNYXNrKSAhPSBUeFRocmVzaE1hc2spCi0JCQkJCXRwLT5jc3I2ICs9ICgxIDw8IFR4VGhyZXNoU2hpZnQpOwkvKiBCdW1wIHVwIHRoZSBUeCB0aHJlc2hvbGQgKi8KLQkJCQllbHNlCi0JCQkJCXRwLT5jc3I2IHw9IFR4U3RvcmVGb3J3OyAgLyogU3RvcmUtbi1mb3J3YXJkLiAqLwotCQkJCS8qIFJlc3RhcnQgdGhlIHRyYW5zbWl0IHByb2Nlc3MuICovCi0JCQkJb3V0bF9DU1I2KHRwLT5jc3I2IHwgRW5hYmxlUngsIGlvYWRkcik7Ci0JCQkJb3V0bF9DU1I2KHRwLT5jc3I2IHwgRW5hYmxlVHhSeCwgaW9hZGRyKTsKLQkJCX0KLQkJCWlmIChjc3I1ICYgUnhEaWVkKSB7CQkvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KLQkJCQl0cC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJdHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW5sKGlvYWRkciArIENTUjgpICYgMHhmZmZmOwotCQkJCW91dGxfQ1NSNih0cC0+Y3NyNiB8IEVuYWJsZVR4UngsIGlvYWRkcik7Ci0JCQl9Ci0JCQkvKiBDbGVhciBhbGwgZXJyb3Igc291cmNlcywgaW5jbHVkZWQgdW5kb2N1bWVudGVkIG9uZXMhICovCi0JCQlvdXRsKDB4MDgwMGY3YmEsIGlvYWRkciArIENTUjUpOwotCQl9Ci0JCWlmICgtLXdvcmtfYnVkZ2V0IDwgMCkgewotCQkJaWYgKHhpcmNvbV9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtdWNoIHdvcmsgZHVyaW5nIGFuIGludGVycnVwdCwgIgotCQkJCQkgICAiY3NyNT0weCU4Ljh4LlxuIiwgZGV2LT5uYW1lLCBjc3I1KTsKLQkJCS8qIEFja25vd2xlZGdlIGFsbCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KLQkJCW91dGwoMHg4MDAxZmZmZiwgaW9hZGRyICsgQ1NSNSk7Ci0JCQlicmVhazsKLQkJfQotCX0gd2hpbGUgKDEpOwotCi0JaWYgKHhpcmNvbV9kZWJ1ZyA+IDMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQsIGNzcjU9JSM0LjR4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgaW5sKGlvYWRkciArIENTUjUpKTsKLQotCXNwaW5fdW5sb2NrICgmdHAtPmxvY2spOwotCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwotfQotCi0KLXN0YXRpYyBpbnQKLXhpcmNvbV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlbnRyeSA9IHRwLT5jdXJfcnggJSBSWF9SSU5HX1NJWkU7Ci0JaW50IHJ4X3dvcmtfbGltaXQgPSB0cC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUgLSB0cC0+Y3VyX3J4OwotCWludCB3b3JrX2RvbmUgPSAwOwotCi0JaWYgKHhpcmNvbV9kZWJ1ZyA+IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHICIgSW4geGlyY29tX3J4KCksIGVudHJ5ICVkICU4Ljh4LlxuIiwgZW50cnksCi0JCQkgICB0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKLQkvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0J3MgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwotCXdoaWxlICh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzID49IDApIHsKLQkJczMyIHN0YXR1cyA9IHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXM7Ci0KLQkJaWYgKHhpcmNvbV9kZWJ1ZyA+IDUpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHhpcmNvbV9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsIGVudHJ5LAotCQkJCSAgIHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOwotCQlpZiAoLS1yeF93b3JrX2xpbWl0IDwgMCkKLQkJCWJyZWFrOwotCQlpZiAoKHN0YXR1cyAmIDB4MzgwMDgzMDApICE9IDB4MDMwMCkgewotCQkJaWYgKChzdGF0dXMgJiAweDM4MDAwMzAwKSAhPSAweDAzMDApIHsKLQkJCQkvKiBJZ25vcmUgZWFybGllciBidWZmZXJzLiAqLwotCQkJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKLQkJCQkJaWYgKHhpcmNvbV9kZWJ1ZyA+IDEpCi0JCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lICIKLQkJCQkJCQkgICAic3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzLCBzdGF0dXMgJTguOHghXG4iLAotCQkJCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKLQkJCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFJ4MERlc2NFcnJvcikgewotCQkJCS8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwotCQkJCWlmICh4aXJjb21fZGVidWcgPiAyKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlOC44eC5cbiIsCi0JCQkJCQkgICBkZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQkJdHAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KLQkJCQlpZiAoc3RhdHVzICYgKFJ4MFJ1bnQgfCBSeDBIdWdlRnJhbWUpKSB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJCWlmIChzdGF0dXMgJiBSeDBDUkNFcnJvcikgdHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4gKi8KLQkJCXNob3J0IHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OwotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0JCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHBrdF9sZW4sIHBrdF9sZW4pOwotCQkJCXBrdF9sZW4gPSAxNTE4OwotCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQl9Ci0jZW5kaWYKLQkJCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9uZyBlbm91Z2ggdG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwotCQkJICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwotCQkJaWYgKHBrdF9sZW4gPCByeF9jb3B5YnJlYWsKLQkJCQkmJiAoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMikpICE9IE5VTEwpIHsKLQkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduIHRoZSBJUCBoZWFkZXIgKi8KLSNpZiAhIGRlZmluZWQoX19hbHBoYV9fKQotCQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgYnVzX3RvX3ZpcnQodHAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEpLAotCQkJCQkJCQkgcGt0X2xlbik7Ci0JCQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwotI2Vsc2UKLQkJCQltZW1jcHkoc2tiX3B1dChza2IsIHBrdF9sZW4pLAotCQkJCQkgICBidXNfdG9fdmlydCh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSksIHBrdF9sZW4pOwotI2VuZGlmCi0JCQkJd29ya19kb25lKys7Ci0JCQl9IGVsc2UgeyAJLyogUGFzcyB1cCB0aGUgc2tiIGFscmVhZHkgb24gdGhlIFJ4IHJpbmcuICovCi0JCQkJc2tiX3B1dChza2IgPSB0cC0+cnhfc2tidWZmW2VudHJ5XSwgcGt0X2xlbik7Ci0JCQkJdHAtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwotCQkJfQotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJCW5ldGlmX3J4KHNrYik7Ci0JCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQkJdHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCXRwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwotCQl9Ci0JCWVudHJ5ID0gKCsrdHAtPmN1cl9yeCkgJSBSWF9SSU5HX1NJWkU7Ci0JfQotCi0JLyogUmVmaWxsIHRoZSBSeCByaW5nIGJ1ZmZlcnMuICovCi0JZm9yICg7IHRwLT5jdXJfcnggLSB0cC0+ZGlydHlfcnggPiAwOyB0cC0+ZGlydHlfcngrKykgewotCQllbnRyeSA9IHRwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRTsKLQkJaWYgKHRwLT5yeF9za2J1ZmZbZW50cnldID09IE5VTEwpIHsKLQkJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCQlza2IgPSB0cC0+cnhfc2tidWZmW2VudHJ5XSA9IGRldl9hbGxvY19za2IoUEtUX0JVRl9TWik7Ci0JCQlpZiAoc2tiID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0JCQlza2ItPmRldiA9IGRldjsJCQkvKiBNYXJrIGFzIGJlaW5nIHVzZWQgYnkgdGhpcyBkZXZpY2UuICovCi0JCQl0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSA9IHZpcnRfdG9fYnVzKHNrYi0+ZGF0YSk7Ci0JCQl3b3JrX2RvbmUrKzsKLQkJfQotCQl0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzID0gUngwRGVzY093bmVkOwotCX0KLQotCXJldHVybiB3b3JrX2RvbmU7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXhpcmNvbV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCi0Jb3V0bCgwLCBpb2FkZHIgKyBDU1I3KTsKLQkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IHByb2Nlc3Nlcy4gKi8KLQlvdXRsX0NTUjYoaW5sKGlvYWRkciArIENTUjYpICYgfkVuYWJsZVR4UngsIGlvYWRkcik7Ci0KLQlpZiAoaW5sKGlvYWRkciArIENTUjYpICE9IDB4ZmZmZmZmZmYpCi0JCXRwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IGlubChpb2FkZHIgKyBDU1I4KSAmIDB4ZmZmZjsKLQotCWRldi0+aWZfcG9ydCA9IHRwLT5zYXZlZF9pZl9wb3J0OwotfQotCi0KLXN0YXRpYyBpbnQKLXhpcmNvbV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7Ci0KLQlpZiAoeGlyY29tX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMi4yeC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlubChpb2FkZHIgKyBDU1I1KSk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQlpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKLQkJeGlyY29tX2Rvd24oZGV2KTsKLQotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCi0JLyogRnJlZSBhbGwgdGhlIHNrYnVmZnMgaW4gdGhlIFJ4IHF1ZXVlLiAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHAtPnJ4X3NrYnVmZltpXTsKLQkJdHAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7Ci0JCXRwLT5yeF9yaW5nW2ldLnN0YXR1cyA9IDA7CQkvKiBOb3Qgb3duZWQgYnkgWGlyY29tIGNoaXAuICovCi0JCXRwLT5yeF9yaW5nW2ldLmxlbmd0aCA9IDA7Ci0JCXRwLT5yeF9yaW5nW2ldLmJ1ZmZlcjEgPSAweEJBREYwMEQwOyAvKiBBbiBpbnZhbGlkIGFkZHJlc3MuICovCi0JCWlmIChza2IpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKLQkJaWYgKHRwLT50eF9za2J1ZmZbaV0pCi0JCQlkZXZfa2ZyZWVfc2tiKHRwLT50eF9za2J1ZmZbaV0pOwotCQl0cC0+dHhfc2tidWZmW2ldID0gTlVMTDsKLQl9Ci0KLQl0cC0+b3BlbiA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp4aXJjb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCWlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQotCQl0cC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBpbmwoaW9hZGRyICsgQ1NSOCkgJiAweGZmZmY7Ci0KLQlyZXR1cm4gJnRwLT5zdGF0czsKLX0KLQotc3RhdGljIGludCB4aXJjb21fZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKLXsKLQlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQllY21kLT5zdXBwb3J0ZWQgPQotCQkJU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8Ci0JCQlTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKLQkJCVNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKLQkJCVNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKLQkJCVNVUFBPUlRFRF9BdXRvbmVnIHwKLQkJCVNVUFBPUlRFRF9NSUk7Ci0KLQllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfTUlJOwotCWlmICh0cC0+YWR2ZXJ0aXNpbmdbMF0gJiBBRFZFUlRJU0VfMTBIQUxGKQotCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZjsKLQlpZiAodHAtPmFkdmVydGlzaW5nWzBdICYgQURWRVJUSVNFXzEwRlVMTCkKLQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGw7Ci0JaWYgKHRwLT5hZHZlcnRpc2luZ1swXSAmIEFEVkVSVElTRV8xMDBIQUxGKQotCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGY7Ci0JaWYgKHRwLT5hZHZlcnRpc2luZ1swXSAmIEFEVkVSVElTRV8xMDBGVUxMKQotCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7Ci0JaWYgKHRwLT5hdXRvbmVnKSB7Ci0JCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKLQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCX0gZWxzZQotCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCi0JZWNtZC0+cG9ydCA9IFBPUlRfTUlJOwotCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKLQllY21kLT5waHlfYWRkcmVzcyA9IHRwLT5waHlzWzBdOwotCWVjbWQtPnNwZWVkID0gdHAtPnNwZWVkMTAwID8gU1BFRURfMTAwIDogU1BFRURfMTA7Ci0JZWNtZC0+ZHVwbGV4ID0gdHAtPmZ1bGxfZHVwbGV4ID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKLQllY21kLT5tYXh0eHBrdCA9IFRYX1JJTkdfU0laRSAvIDI7Ci0JZWNtZC0+bWF4cnhwa3QgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHhpcmNvbV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQotewotCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiBhdXRvbmVnLCBzcGVlZDEwMCwgZnVsbF9kdXBsZXg7Ci0KLQlhdXRvbmVnID0gKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpOwotCXNwZWVkMTAwID0gKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCk7Ci0JZnVsbF9kdXBsZXggPSAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKTsKLQotCXRwLT5hdXRvbmVnID0gYXV0b25lZzsKLQlpZiAoc3BlZWQxMDAgIT0gdHAtPnNwZWVkMTAwIHx8Ci0JICAgIGZ1bGxfZHVwbGV4ICE9IHRwLT5mdWxsX2R1cGxleCkgewotCQl0cC0+c3BlZWQxMDAgPSBzcGVlZDEwMDsKLQkJdHAtPmZ1bGxfZHVwbGV4ID0gZnVsbF9kdXBsZXg7Ci0JCS8qIGNoYW5nZSBhZHZlcnRpc2luZyBiaXRzICovCi0JCXRwLT5hZHZlcnRpc2luZ1swXSAmPSB+KEFEVkVSVElTRV8xMEhBTEYgfAotCQkJCSAgICAgQURWRVJUSVNFXzEwRlVMTCB8Ci0JCQkJICAgICBBRFZFUlRJU0VfMTAwSEFMRiB8Ci0JCQkJICAgICBBRFZFUlRJU0VfMTAwRlVMTCB8Ci0JCQkJICAgICBBRFZFUlRJU0VfMTAwQkFTRTQpOwotCQlpZiAoc3BlZWQxMDApIHsKLQkJCWlmIChmdWxsX2R1cGxleCkKLQkJCQl0cC0+YWR2ZXJ0aXNpbmdbMF0gfD0gQURWRVJUSVNFXzEwMEZVTEw7Ci0JCQllbHNlCi0JCQkJdHAtPmFkdmVydGlzaW5nWzBdIHw9IEFEVkVSVElTRV8xMDBIQUxGOwotCQl9IGVsc2UgewotCQkJaWYgKGZ1bGxfZHVwbGV4KQotCQkJCXRwLT5hZHZlcnRpc2luZ1swXSB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCQkJZWxzZQotCQkJCXRwLT5hZHZlcnRpc2luZ1swXSB8PSBBRFZFUlRJU0VfMTBIQUxGOwotCQl9Ci0JfQotCWNoZWNrX2R1cGxleChkZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB4aXJjb21fZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7Ci0Jc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKLQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHRwLT5wZGV2KSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewotCS5nZXRfc2V0dGluZ3MgPSB4aXJjb21fZ2V0X3NldHRpbmdzLAotCS5zZXRfc2V0dGluZ3MgPSB4aXJjb21fc2V0X3NldHRpbmdzLAotCS5nZXRfZHJ2aW5mbyA9IHhpcmNvbV9nZXRfZHJ2aW5mbywKLX07Ci0KLS8qIFByb3ZpZGUgaW9jdGwoKSBjYWxscyB0byBleGFtaW5lIHRoZSBNSUkgeGN2ciBzdGF0ZS4gKi8KLXN0YXRpYyBpbnQgeGlyY29tX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2ICpkYXRhID0gKHUxNiAqKSZycS0+aWZyX2lmcnU7Ci0JaW50IHBoeSA9IHRwLT5waHlzWzBdICYgMHgxZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3dpdGNoKGNtZCkgewotCS8qIExlZ2FjeSBtaWktZGlhZyBpbnRlcmZhY2UgKi8KLQljYXNlIFNJT0NHTUlJUEhZOgkJLyogR2V0IGFkZHJlc3Mgb2YgTUlJIFBIWSBpbiB1c2UuICovCi0JCWlmICh0cC0+bWlpX2NudCkKLQkJCWRhdGFbMF0gPSBwaHk7Ci0JCWVsc2UKLQkJCXJldHVybiAtRU5PREVWOwotCQlyZXR1cm4gMDsKLQljYXNlIFNJT0NHTUlJUkVHOgkJLyogUmVhZCBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCQlzYXZlX2ZsYWdzKGZsYWdzKTsKLQkJY2xpKCk7Ci0JCWRhdGFbM10gPSBtZGlvX3JlYWQoZGV2LCBkYXRhWzBdICYgMHgxZiwgZGF0YVsxXSAmIDB4MWYpOwotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCQljbGkoKTsKLQkJaWYgKGRhdGFbMF0gPT0gdHAtPnBoeXNbMF0pIHsKLQkJCXUxNiB2YWx1ZSA9IGRhdGFbMl07Ci0JCQlzd2l0Y2ggKGRhdGFbMV0pIHsKLQkJCWNhc2UgMDoKLQkJCQlpZiAodmFsdWUgJiAoQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpKQotCQkJCQkvKiBBdXRvbmVnb3RpYXRpb24uICovCi0JCQkJCXRwLT5hdXRvbmVnID0gMTsKLQkJCQllbHNlIHsKLQkJCQkJdHAtPmZ1bGxfZHVwbGV4ID0gKHZhbHVlICYgQk1DUl9GVUxMRFBMWCkgPyAxIDogMDsKLQkJCQkJdHAtPmF1dG9uZWcgPSAwOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgNDoKLQkJCQl0cC0+YWR2ZXJ0aXNpbmdbMF0gPSB2YWx1ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNoZWNrX2R1cGxleChkZXYpOwotCQl9Ci0JCW1kaW9fd3JpdGUoZGV2LCBkYXRhWzBdICYgMHgxZiwgZGF0YVsxXSAmIDB4MWYsIGRhdGFbMl0pOwotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotLyogU2V0IG9yIGNsZWFyIHRoZSBtdWx0aWNhc3QgZmlsdGVyIGZvciB0aGlzIGFkYXB0b3IuCi0gICBOb3RlIHRoYXQgd2Ugb25seSB1c2UgZXhjbHVzaW9uIGFyb3VuZCBhY3R1YWxseSBxdWV1ZWluZyB0aGUKLSAgIG5ldyBmcmFtZSwgbm90IGFyb3VuZCBmaWxsaW5nIHRwLT5zZXR1cF9mcmFtZS4gIFRoaXMgaXMgbm9uLWRldGVybWluaXN0aWMKLSAgIHdoZW4gcmUtZW50ZXJlZCBidXQgc3RpbGwgY29ycmVjdC4gKi8KLXN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHhpcmNvbV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlpbnQgY3NyNiA9IGlubChpb2FkZHIgKyBDU1I2KTsKLQl1MTYgKmVhZGRycywgKnNldHVwX2ZybTsKLQl1MzIgdHhfZmxhZ3M7Ci0JaW50IGk7Ci0KLQl0cC0+Y3NyNiAmPSB+KEFsbE11bHRpQml0IHwgUHJvbWlzY0JpdCB8IEhhc2hGaWx0ZXJCaXQpOwotCWNzcjYgJj0gfihBbGxNdWx0aUJpdCB8IFByb21pc2NCaXQgfCBIYXNoRmlsdGVyQml0KTsKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwotCQl0cC0+Y3NyNiB8PSBQcm9taXNjQml0OwotCQljc3I2IHw9IFByb21pc2NCaXQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICgoZGV2LT5tY19jb3VudCA+IDEwMDApIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewotCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgd2VsbCAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCi0JCXRwLT5jc3I2IHw9IEFsbE11bHRpQml0OwotCQljc3I2IHw9IEFsbE11bHRpQml0OwotCQlnb3RvIG91dDsKLQl9Ci0KLQl0eF9mbGFncyA9IFR4MVdob2xlUGt0IHwgVHgxU2V0dXBQa3QgfCBQS1RfU0VUVVBfU1o7Ci0KLQkvKiBOb3RlIHRoYXQgb25seSB0aGUgbG93LWFkZHJlc3Mgc2hvcnR3b3JkIG9mIHNldHVwX2ZyYW1lIGlzIHZhbGlkISAqLwotCXNldHVwX2ZybSA9IHRwLT5zZXR1cF9mcmFtZTsKLQltY2xpc3QgPSBkZXYtPm1jX2xpc3Q7Ci0KLQkvKiBGaWxsIHRoZSBmaXJzdCBlbnRyeSB3aXRoIG91ciBwaHlzaWNhbCBhZGRyZXNzLiAqLwotCWVhZGRycyA9ICh1MTYgKilkZXYtPmRldl9hZGRyOwotCSpzZXR1cF9mcm0gPSBjcHVfdG9fbGUxNihlYWRkcnNbMF0pOyBzZXR1cF9mcm0gKz0gMjsKLQkqc2V0dXBfZnJtID0gY3B1X3RvX2xlMTYoZWFkZHJzWzFdKTsgc2V0dXBfZnJtICs9IDI7Ci0JKnNldHVwX2ZybSA9IGNwdV90b19sZTE2KGVhZGRyc1syXSk7IHNldHVwX2ZybSArPSAyOwotCi0JaWYgKGRldi0+bWNfY291bnQgPiAxNCkgeyAvKiBNdXN0IHVzZSBhIG11bHRpY2FzdCBoYXNoIHRhYmxlLiAqLwotCQl1MzIgKmhhc2hfdGFibGUgPSAodTMyICopKHRwLT5zZXR1cF9mcmFtZSArIDQgKiAxMik7Ci0JCXUzMiBoYXNoLCBoYXNoMjsKLQotCQl0eF9mbGFncyB8PSBUeDFIYXNoU2V0dXA7Ci0JCXRwLT5jc3I2IHw9IEhhc2hGaWx0ZXJCaXQ7Ci0JCWNzcjYgfD0gSGFzaEZpbHRlckJpdDsKLQotCQkvKiBGaWxsIHRoZSB1bnVzZWQgMyBlbnRyaWVzIHdpdGggdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgotCQkgICBBdCBsZWFzdCBvbmUgZW50cnkgKm11c3QqIGNvbnRhaW4gdGhlIGJyb2FkY2FzdCBhZGRyZXNzISEhKi8KLQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQkJKnNldHVwX2ZybSA9IDB4ZmZmZjsgc2V0dXBfZnJtICs9IDI7Ci0JCQkqc2V0dXBfZnJtID0gMHhmZmZmOyBzZXR1cF9mcm0gKz0gMjsKLQkJCSpzZXR1cF9mcm0gPSAweGZmZmY7IHNldHVwX2ZybSArPSAyOwotCQl9Ci0KLQkJLyogVHJ1bHkgYnJhaW4tZGFtYWdlZCBoYXNoIGZpbHRlciBsYXlvdXQgKi8KLQkJLyogWFhYOiBub3Qgc3VyZSBpZiBJIHNob3VsZCB0YWtlIHRoZSBsYXN0IG9yIHRoZSBmaXJzdCA5IGJpdHMgKi8KLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQl1MzIgKmhwdHI7Ci0JCQloYXNoID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSAmIDB4MWZmOwotCQkJaWYgKGhhc2ggPCAzODQpIHsKLQkJCQloYXNoMiA9IGhhc2ggKyAoKGhhc2ggPj4gNCkgPDwgNCkgKwotCQkJCQkoKGhhc2ggPj4gNSkgPDwgNSk7Ci0JCQl9IGVsc2UgewotCQkJCWhhc2ggLT0gMzg0OwotCQkJCWhhc2gyID0gNjQgKyBoYXNoICsgKGhhc2ggPj4gNCkgKiA4MDsKLQkJCX0KLQkJCWhwdHIgPSAmaGFzaF90YWJsZVtoYXNoMiAmIH4weDFmXTsKLQkJCSpocHRyIHw9IGNwdV90b19sZTMyKDEgPDwgKGhhc2gyICYgMHgxZikpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogV2UgaGF2ZSA8PSAxNCBtY2FzdCBhZGRyZXNzZXMgc28gd2UgY2FuIHVzZSBYaXJjb20ncwotCQkgICB3b25kZXJmdWwgMTYtYWRkcmVzcyBwZXJmZWN0IGZpbHRlci4gKi8KLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQllYWRkcnMgPSAodTE2ICopbWNsaXN0LT5kbWlfYWRkcjsKLQkJCSpzZXR1cF9mcm0gPSBjcHVfdG9fbGUxNihlYWRkcnNbMF0pOyBzZXR1cF9mcm0gKz0gMjsKLQkJCSpzZXR1cF9mcm0gPSBjcHVfdG9fbGUxNihlYWRkcnNbMV0pOyBzZXR1cF9mcm0gKz0gMjsKLQkJCSpzZXR1cF9mcm0gPSBjcHVfdG9fbGUxNihlYWRkcnNbMl0pOyBzZXR1cF9mcm0gKz0gMjsKLQkJfQotCQkvKiBGaWxsIHRoZSB1bnVzZWQgZW50cmllcyB3aXRoIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KLQkJICAgQXQgbGVhc3Qgb25lIGVudHJ5ICptdXN0KiBjb250YWluIHRoZSBicm9hZGNhc3QgYWRkcmVzcyEhISovCi0JCWZvciAoOyBpIDwgMTU7IGkrKykgewotCQkJKnNldHVwX2ZybSA9IDB4ZmZmZjsgc2V0dXBfZnJtICs9IDI7Ci0JCQkqc2V0dXBfZnJtID0gMHhmZmZmOyBzZXR1cF9mcm0gKz0gMjsKLQkJCSpzZXR1cF9mcm0gPSAweGZmZmY7IHNldHVwX2ZybSArPSAyOwotCQl9Ci0JfQotCi0JLyogTm93IGFkZCB0aGlzIGZyYW1lIHRvIHRoZSBUeCBsaXN0LiAqLwotCWlmICh0cC0+Y3VyX3R4IC0gdHAtPmRpcnR5X3R4ID4gVFhfUklOR19TSVpFIC0gMikgewotCQkvKiBTYW1lIHNldHVwIHJlY2VudGx5IHF1ZXVlZCwgd2UgbmVlZCBub3QgYWRkIGl0LiAqLwotCQkvKiBYWFg6IEh1aD8gQWxsIGl0IG1lYW5zIGlzIHRoYXQgdGhlIFR4IGxpc3QgaXMgZnVsbC4uLiovCi0JfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJdW5zaWduZWQgaW50IGVudHJ5OwotCQlpbnQgZHVtbXkgPSAtMTsKLQotCQlzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7Ci0JCWVudHJ5ID0gdHAtPmN1cl90eCsrICUgVFhfUklOR19TSVpFOwotCi0JCWlmIChlbnRyeSAhPSAwKSB7Ci0JCQkvKiBBdm9pZCBhIGNoaXAgZXJyYXRhIGJ5IHByZWZpeGluZyBhIGR1bW15IGVudHJ5LiAqLwotCQkJdHAtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwotCQkJdHAtPnR4X3JpbmdbZW50cnldLmxlbmd0aCA9Ci0JCQkJKGVudHJ5ID09IFRYX1JJTkdfU0laRSAtIDEpID8gVHgxUmluZ1dyYXAgOiAwOwotCQkJdHAtPnR4X3JpbmdbZW50cnldLmJ1ZmZlcjEgPSAwOwotCQkJLyogcmFjZSB3aXRoIGNoaXAsIHNldCBUeDBEZXNjT3duZWQgbGF0ZXIgKi8KLQkJCWR1bW15ID0gZW50cnk7Ci0JCQllbnRyeSA9IHRwLT5jdXJfdHgrKyAlIFRYX1JJTkdfU0laRTsKLQkJfQotCi0JCXRwLT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKLQkJLyogUHV0IHRoZSBzZXR1cCBmcmFtZSBvbiB0aGUgVHggbGlzdC4gKi8KLQkJaWYgKGVudHJ5ID09IFRYX1JJTkdfU0laRSAtIDEpCi0JCQl0eF9mbGFncyB8PSBUeDFSaW5nV3JhcDsJCS8qIFdyYXAgcmluZy4gKi8KLQkJdHAtPnR4X3JpbmdbZW50cnldLmxlbmd0aCA9IHR4X2ZsYWdzOwotCQl0cC0+dHhfcmluZ1tlbnRyeV0uYnVmZmVyMSA9IHZpcnRfdG9fYnVzKHRwLT5zZXR1cF9mcmFtZSk7Ci0JCXRwLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMgPSBUeDBEZXNjT3duZWQ7Ci0JCWlmICh0cC0+Y3VyX3R4IC0gdHAtPmRpcnR5X3R4ID49IFRYX1JJTkdfU0laRSAtIDIpIHsKLQkJCXRwLT50eF9mdWxsID0gMTsKLQkJCW5ldGlmX3N0b3BfcXVldWUgKGRldik7Ci0JCX0KLQkJaWYgKGR1bW15ID49IDApCi0JCQl0cC0+dHhfcmluZ1tkdW1teV0uc3RhdHVzID0gVHgwRGVzY093bmVkOwotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLQkJLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUgdHJhbnNtaXQgZGVtYW5kLiAqLwotCQlvdXRsKDAsIGlvYWRkciArIENTUjEpOwotCX0KLQotb3V0OgotCW91dGxfQ1NSNihjc3I2LCBpb2FkZHIpOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4aXJjb21fcGNpX3RhYmxlW10gPSB7Ci0gIHsgMHgxMTVELCAweDAwMDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFgzMjAxXzMgfSwKLSAgezB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB4aXJjb21fcGNpX3RhYmxlKTsKLQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHhpcmNvbV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcmludGsoS0VSTl9JTkZPICJ4aXJjb21fc3VzcGVuZCglcylcbiIsIGRldi0+bmFtZSk7Ci0JaWYgKHRwLT5vcGVuKQotCQl4aXJjb21fZG93bihkZXYpOwotCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHhpcmNvbV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcmludGsoS0VSTl9JTkZPICJ4aXJjb21fcmVzdW1lKCVzKVxuIiwgZGV2LT5uYW1lKTsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwwKTsKLQlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQotCS8qIEJyaW5nIHRoZSBjaGlwIG91dCBvZiBzbGVlcCBtb2RlLgotCSAgIENhdXRpb246IFNub296ZSBtb2RlIGRvZXMgbm90IHdvcmsgd2l0aCBzb21lIGJvYXJkcyEgKi8KLQlpZiAoeGlyY29tX3RibFt0cC0+Y2hpcF9pZF0uZmxhZ3MgJiBIQVNfQUNQSSkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgUENJX1BPV0VSTUdNVCwgMCk7Ci0KLQl0cmFuc2NlaXZlcl92b29kb28oZGV2KTsKLQlpZiAoeGlyY29tX3RibFt0cC0+Y2hpcF9pZF0uZmxhZ3MgJiBIQVNfTUlJKQotCQljaGVja19kdXBsZXgoZGV2KTsKLQotCWlmICh0cC0+b3BlbikKLQkJeGlyY29tX3VwKGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IHhpcmNvbV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJ4aXJjb21fcmVtb3ZlX29uZSglcylcbiIsIGRldi0+bmFtZSk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCWZyZWVfbmV0ZGV2KGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB4aXJjb21fZHJpdmVyID0gewotCS5uYW1lCQk9IERSVl9OQU1FLAotCS5pZF90YWJsZQk9IHhpcmNvbV9wY2lfdGFibGUsCi0JLnByb2JlCQk9IHhpcmNvbV9pbml0X29uZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHhpcmNvbV9yZW1vdmVfb25lKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHhpcmNvbV9zdXNwZW5kLAotCS5yZXN1bWUJCT0geGlyY29tX3Jlc3VtZQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotfTsKLQotCi1zdGF0aWMgaW50IF9faW5pdCB4aXJjb21faW5pdCh2b2lkKQotewotLyogd2hlbiBhIG1vZHVsZSwgdGhpcyBpcyBwcmludGVkIHdoZXRoZXIgb3Igbm90IGRldmljZXMgYXJlIGZvdW5kIGluIHByb2JlICovCi0jaWZkZWYgTU9EVUxFCi0JcHJpbnRrKHZlcnNpb24pOwotI2VuZGlmCi0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnhpcmNvbV9kcml2ZXIpOwotfQotCi0KLXN0YXRpYyB2b2lkIF9fZXhpdCB4aXJjb21fZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmeGlyY29tX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHhpcmNvbV9pbml0KQotbW9kdWxlX2V4aXQoeGlyY29tX2V4aXQpCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiAgYy1pbmRlbnQtbGV2ZWw6IDQKLSAqICBjLWJhc2ljLW9mZnNldDogNAotICogIHRhYi13aWR0aDogNAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDAzOGMxZWYuLmQ5MTg1NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC02MiwxOCArNjIsNTcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisvKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGRlYnVnZ2luZyAqLworLyogI2RlZmluZSBUVU5fREVCVUcgMSAqLworCiAjaWZkZWYgVFVOX0RFQlVHCiBzdGF0aWMgaW50IGRlYnVnOworCisjZGVmaW5lIERCRyAgaWYodHVuLT5kZWJ1ZylwcmludGsKKyNkZWZpbmUgREJHMSBpZihkZWJ1Zz09MilwcmludGsKKyNlbHNlCisjZGVmaW5lIERCRyggYS4uLiApCisjZGVmaW5lIERCRzEoIGEuLi4gKQogI2VuZGlmCiAKK3N0cnVjdCB0dW5fc3RydWN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0OworCXVuc2lnbmVkIGxvbmcgCQlmbGFnczsKKwlpbnQJCQlhdHRhY2hlZDsKKwl1aWRfdAkJCW93bmVyOworCWdpZF90CQkJZ3JvdXA7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWFkcTsKKworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAgICAqZmFzeW5jOworCisJdW5zaWduZWQgbG9uZyBpZl9mbGFnczsKKwl1OCBkZXZfYWRkcltFVEhfQUxFTl07CisJdTMyIGNocl9maWx0ZXJbMl07CisJdTMyIG5ldF9maWx0ZXJbMl07CisKKyNpZmRlZiBUVU5fREVCVUcKKwlpbnQgZGVidWc7CisjZW5kaWYKK307CisKIC8qIE5ldHdvcmsgZGV2aWNlIHBhcnQgb2YgdGhlIGRyaXZlciAqLwogCi1zdGF0aWMgTElTVF9IRUFEKHR1bl9kZXZfbGlzdCk7CitzdGF0aWMgdW5zaWduZWQgaW50IHR1bl9uZXRfaWQ7CitzdHJ1Y3QgdHVuX25ldCB7CisJc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzOwogCiAvKiBOZXQgZGV2aWNlIG9wZW4uICovCkBAIC0yNTMsOCArMjkyLDExIEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlpZiAoKHR1bi0+ZmxhZ3MgJiBUVU5fVFlQRV9NQVNLKSA9PSBUVU5fVEFQX0RFVikKKwlpZiAoKHR1bi0+ZmxhZ3MgJiBUVU5fVFlQRV9NQVNLKSA9PSBUVU5fVEFQX0RFVikgewogCQlhbGlnbiA9IE5FVF9JUF9BTElHTjsKKwkJaWYgKHVubGlrZWx5KGxlbiA8IEVUSF9ITEVOKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmICghKHNrYiA9IGFsbG9jX3NrYihsZW4gKyBhbGlnbiwgR0ZQX0tFUk5FTCkpKSB7CiAJCXR1bi0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CkBAIC00MzUsMTQgKzQ3NywxNSBAQAogCWRldi0+c3RvcCA9IHR1bl9uZXRfY2xvc2U7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ0dW5fZXRodG9vbF9vcHM7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogfQogCi1zdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bl9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHN0cnVjdCB0dW5fc3RydWN0ICp0dW5fZ2V0X2J5X25hbWUoc3RydWN0IHR1bl9uZXQgKnRuLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CiAKIAlBU1NFUlRfUlROTCgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodHVuLCAmdHVuX2Rldl9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dW4sICZ0bi0+ZGV2X2xpc3QsIGxpc3QpIHsKIAkJaWYgKCFzdHJuY21wKHR1bi0+ZGV2LT5uYW1lLCBuYW1lLCBJRk5BTVNJWikpCiAJCSAgICByZXR1cm4gdHVuOwogCX0KQEAgLTQ1MCwxMyArNDkzLDE1IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQorc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIHsKKwlzdHJ1Y3QgdHVuX25ldCAqdG47CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnI7CiAKLQl0dW4gPSB0dW5fZ2V0X2J5X25hbWUoaWZyLT5pZnJfbmFtZSk7CisJdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQpOworCXR1biA9IHR1bl9nZXRfYnlfbmFtZSh0biwgaWZyLT5pZnJfbmFtZSk7CiAJaWYgKHR1bikgewogCQlpZiAodHVuLT5hdHRhY2hlZCkKIAkJCXJldHVybiAtRUJVU1k7CkBAIC00NjksNyArNTE0LDcgQEAKIAkJICAgICAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAJfQotCWVsc2UgaWYgKF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgaWZyLT5pZnJfbmFtZSkpCisJZWxzZSBpZiAoX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnItPmlmcl9uYW1lKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZWxzZSB7CiAJCWNoYXIgKm5hbWU7CkBAIC01MDAsNiArNTQ1LDcgQEAKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAorCQlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAJCXR1biA9IG5ldGRldl9wcml2KGRldik7CiAJCXR1bi0+ZGV2ID0gZGV2OwogCQl0dW4tPmZsYWdzID0gZmxhZ3M7CkBAIC01MjIsNyArNTY4LDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCQlsaXN0X2FkZCgmdHVuLT5saXN0LCAmdHVuX2Rldl9saXN0KTsKKwkJbGlzdF9hZGQoJnR1bi0+bGlzdCwgJnRuLT5kZXZfbGlzdCk7CiAJfQogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9zZXRfaWZmXG4iLCB0dW4tPmRldi0+bmFtZSk7CkBAIC01MzksNiArNTg1LDcgQEAKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHR1bjsKIAl0dW4tPmF0dGFjaGVkID0gMTsKKwlnZXRfbmV0KGRldl9uZXQodHVuLT5kZXYpKTsKIAogCXN0cmNweShpZnItPmlmcl9uYW1lLCB0dW4tPmRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CkBAIC01NjcsNyArNjE0LDcgQEAKIAkJaWZyLmlmcl9uYW1lW0lGTkFNU0laLTFdID0gJ1wwJzsKIAogCQlydG5sX2xvY2soKTsKLQkJZXJyID0gdHVuX3NldF9pZmYoZmlsZSwgJmlmcik7CisJCWVyciA9IHR1bl9zZXRfaWZmKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgZmlsZSwgJmlmcik7CiAJCXJ0bmxfdW5sb2NrKCk7CiAKIAkJaWYgKGVycikKQEAgLTY2Myw3ICs3MTAsMTEgQEAKIAljYXNlIFNJT0NTSUZIV0FERFI6CiAJewogCQkvKiB0cnkgdG8gc2V0IHRoZSBhY3R1YWwgbmV0IGRldmljZSdzIGh3IGFkZHJlc3MgKi8KLQkJaW50IHJldCA9IGRldl9zZXRfbWFjX2FkZHJlc3ModHVuLT5kZXYsICZpZnIuaWZyX2h3YWRkcik7CisJCWludCByZXQ7CisKKwkJcnRubF9sb2NrKCk7CisJCXJldCA9IGRldl9zZXRfbWFjX2FkZHJlc3ModHVuLT5kZXYsICZpZnIuaWZyX2h3YWRkcik7CisJCXJ0bmxfdW5sb2NrKCk7CiAKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQkvKiogU2V0IHRoZSBjaGFyYWN0ZXIgZGV2aWNlJ3MgaGFyZHdhcmUgYWRkcmVzcy4gVGhpcyBpcyB1c2VkIHdoZW4KQEAgLTc1MCw2ICs4MDEsNyBAQAogCS8qIERldGFjaCBmcm9tIG5ldCBkZXZpY2UgKi8KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCXR1bi0+YXR0YWNoZWQgPSAwOworCXB1dF9uZXQoZGV2X25ldCh0dW4tPmRldikpOwogCiAJLyogRHJvcCByZWFkIHF1ZXVlICovCiAJc2tiX3F1ZXVlX3B1cmdlKCZ0dW4tPnJlYWRxKTsKQEAgLTg2OSw2ICs5MjEsNDYgQEAKIAkuc2V0X3J4X2NzdW0JPSB0dW5fc2V0X3J4X2NzdW0KIH07CiAKK3N0YXRpYyBpbnQgdHVuX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgdHVuX25ldCAqdG47CisKKwl0biA9IGttYWxsb2Moc2l6ZW9mKCp0biksIEdGUF9LRVJORUwpOworCWlmICh0biA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZ0bi0+ZGV2X2xpc3QpOworCisJaWYgKG5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQsIHRuKSkgeworCQlrZnJlZSh0bik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0dW5fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCB0dW5fbmV0ICp0bjsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCAqbnh0OworCisJdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHR1bl9uZXRfaWQpOworCisJcnRubF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR1biwgbnh0LCAmdG4tPmRldl9saXN0LCBsaXN0KSB7CisJCURCRyhLRVJOX0lORk8gIiVzIGNsZWFuZWQgdXBcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOworCX0KKwlydG5sX3VubG9jaygpOworCisJa2ZyZWUodG4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHR1bl9uZXRfb3BzID0geworCS5pbml0ID0gdHVuX2luaXRfbmV0LAorCS5leGl0ID0gdHVuX2V4aXRfbmV0LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgdHVuX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTg3NiwyNSArOTY4LDI5IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidHVuOiAlcywgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCXByaW50ayhLRVJOX0lORk8gInR1bjogJXNcbiIsIERSVl9DT1BZUklHSFQpOwogCisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnR1bl9uZXRfaWQsICZ0dW5fbmV0X29wcyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInR1bjogQ2FuJ3QgcmVnaXN0ZXIgcGVybmV0IG9wc1xuIik7CisJCWdvdG8gZXJyX3Blcm5ldDsKKwl9CisKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ0dW5fbWlzY2Rldik7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAidHVuOiBDYW4ndCByZWdpc3RlciBtaXNjIGRldmljZSAlZFxuIiwgVFVOX01JTk9SKTsKKwkJZ290byBlcnJfbWlzYzsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9taXNjOgorCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UodHVuX25ldF9pZCwgJnR1bl9uZXRfb3BzKTsKK2Vycl9wZXJuZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdHVuX2NsZWFudXAodm9pZCkKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCAqbnh0OwotCiAJbWlzY19kZXJlZ2lzdGVyKCZ0dW5fbWlzY2Rldik7Ci0KLQlydG5sX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHVuLCBueHQsICZ0dW5fZGV2X2xpc3QsIGxpc3QpIHsKLQkJREJHKEtFUk5fSU5GTyAiJXMgY2xlYW5lZCB1cFxuIiwgdHVuLT5kZXYtPm5hbWUpOwotCQl1bnJlZ2lzdGVyX25ldGRldmljZSh0dW4tPmRldik7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7Ci0KKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHR1bl9uZXRfaWQsICZ0dW5fbmV0X29wcyk7CiB9CiAKIG1vZHVsZV9pbml0KHR1bl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCmluZGV4IGZiYTA4MTEuLjJmMTEyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwpAQCAtMTU0LDggKzE1NCw4IEBACiAJLnJ4UW9TTW9kZSA9IFVDQ19HRVRIX1FPU19NT0RFX0RFRkFVTFQsCiAJLmF1ZmMgPSBVUFNNUl9BVVRPTUFUSUNfRkxPV19DT05UUk9MX01PREVfTk9ORSwKIAkucGFkQW5kQ3JjID0gTUFDQ0ZHMl9QQURfQU5EX0NSQ19NT0RFX1BBRF9BTkRfQ1JDLAotCS5udW1UaHJlYWRzVHggPSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU180LAotCS5udW1UaHJlYWRzUnggPSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU180LAorCS5udW1UaHJlYWRzVHggPSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU18xLAorCS5udW1UaHJlYWRzUnggPSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU18xLAogCS5yaXNjVHggPSBRRV9SSVNDX0FMTE9DQVRJT05fUklTQzFfQU5EX1JJU0MyLAogCS5yaXNjUnggPSBRRV9SSVNDX0FMTE9DQVRJT05fUklTQzFfQU5EX1JJU0MyLAogfTsKQEAgLTM4MzMsNiArMzgzMyw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaHk7CiAJaW50IGVyciwgdWNjX251bSwgbWF4X3NwZWVkID0gMDsKIAljb25zdCBwaGFuZGxlICpwaDsKKwljb25zdCB1MzIgKmZpeGVkX2xpbms7CiAJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOwogCWNvbnN0IGNoYXIgKnNwcm9wOwogCWNvbnN0IHZvaWQgKm1hY19hZGRyOwpAQCAtMzg1Miw3ICszODUzLDEzIEBACiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCi0JcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRldmljZS1pZCIsIE5VTEwpOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjZWxsLWluZGV4IiwgTlVMTCk7CisJaWYgKCFwcm9wKSB7CisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJaWYgKCFwcm9wKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJdWNjX251bSA9ICpwcm9wIC0gMTsKIAlpZiAoKHVjY19udW0gPCAwKSB8fCAodWNjX251bSA+IDcpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM5MjMsMTggKzM5MzAsMzggQEAKIAogCXVnX2luZm8tPnVmX2luZm8ucmVncyA9IHJlcy5zdGFydDsKIAl1Z19pbmZvLT51Zl9pbmZvLmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwlmaXhlZF9saW5rID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZml4ZWQtbGluayIsIE5VTEwpOworCWlmIChmaXhlZF9saW5rKSB7CisJCXVnX2luZm8tPm1kaW9fYnVzID0gMDsKKwkJdWdfaW5mby0+cGh5X2FkZHJlc3MgPSBmaXhlZF9saW5rWzBdOworCQlwaHkgPSBOVUxMOworCX0gZWxzZSB7CisJCXBoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWhhbmRsZSIsIE5VTEwpOworCQlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwogCi0JcGggPSBvZl9nZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7Ci0JcGh5ID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoKTsKKwkJaWYgKHBoeSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAocGh5ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOworCQkvKiBzZXQgdGhlIFBIWSBhZGRyZXNzICovCisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7CisJCWlmIChwcm9wID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisJCXVnX2luZm8tPnBoeV9hZGRyZXNzID0gKnByb3A7CiAKLQkvKiBzZXQgdGhlIFBIWSBhZGRyZXNzICovCi0JcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShwaHksICJyZWciLCBOVUxMKTsKLQlpZiAocHJvcCA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0JdWdfaW5mby0+cGh5X2FkZHJlc3MgPSAqcHJvcDsKKwkJLyogU2V0IHRoZSBidXMgaWQgKi8KKwkJbWRpbyA9IG9mX2dldF9wYXJlbnQocGh5KTsKKworCQlpZiAobWRpbyA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCisJCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobWRpbywgMCwgJnJlcyk7CisJCW9mX25vZGVfcHV0KG1kaW8pOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisKKwkJc25wcmludGYodWdfaW5mby0+bWRpb19idXMsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcmVzLnN0YXJ0KTsKKwl9CiAKIAkvKiBnZXQgdGhlIHBoeSBpbnRlcmZhY2UgdHlwZSwgb3IgZGVmYXVsdCB0byBNSUkgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWNvbm5lY3Rpb24tdHlwZSIsIE5VTEwpOwpAQCAtMzk3NSwyMiArNDAwMiwxMCBAQAogCQl1Z19pbmZvLT51Zl9pbmZvLnV0ZnMgPSBVQ0NfR0VUSF9VVEZTX0dJR0FfSU5JVDsKIAkJdWdfaW5mby0+dWZfaW5mby51dGZldCA9IFVDQ19HRVRIX1VURkVUX0dJR0FfSU5JVDsKIAkJdWdfaW5mby0+dWZfaW5mby51dGZ0dCA9IFVDQ19HRVRIX1VURlRUX0dJR0FfSU5JVDsKKwkJdWdfaW5mby0+bnVtVGhyZWFkc1R4ID0gVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfNDsKKwkJdWdfaW5mby0+bnVtVGhyZWFkc1J4ID0gVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfNDsKIAl9CiAKLQkvKiBTZXQgdGhlIGJ1cyBpZCAqLwotCW1kaW8gPSBvZl9nZXRfcGFyZW50KHBoeSk7Ci0KLQlpZiAobWRpbyA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG1kaW8sIDAsICZyZXMpOwotCW9mX25vZGVfcHV0KG1kaW8pOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIC0xOwotCi0JdWdfaW5mby0+bWRpb19idXMgPSByZXMuc3RhcnQ7Ci0KIAlpZiAobmV0aWZfbXNnX3Byb2JlKCZkZWJ1ZykpCiAJCXByaW50ayhLRVJOX0lORk8gInVjY19nZXRoOiBVQ0MlMWQgYXQgMHglOHggKGlycSA9ICVkKSBcbiIsCiAJCQl1Z19pbmZvLT51Zl9pbmZvLnVjY19udW0gKyAxLCB1Z19pbmZvLT51Zl9pbmZvLnJlZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCA0ZmI5NWIzLi45ZjhiNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTExNTYsNyArMTE1Niw3IEBACiAJdTE2IHBhdXNlUGVyaW9kOwogCXUxNiBleHRlbnNpb25GaWVsZDsKIAl1OCBwaHlfYWRkcmVzczsKLQl1MzIgbWRpb19idXM7CisJY2hhciBtZGlvX2J1c1tNSUlfQlVTX0lEX1NJWkVdOwogCXU4IHdlaWdodGZhY3RvcltOVU1fVFhfUVVFVUVTXTsKIAl1OCBpbnRlcnJ1cHRjb2FsZXNjaW5nbWF4dmFsdWVbTlVNX1JYX1FVRVVFU107CiAJdTggbDJxdFtVQ0NfR0VUSF9WTEFOX1BSSU9SSVRZX01BWF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCmluZGV4IGM2OWU2NTQuLjJhZjQ5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIHJlZ19tYXBfZmFpbDsKIAotCW5ld19idXMtPmlkID0gcmVzLnN0YXJ0OworCXNucHJpbnRmKG5ld19idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHJlcy5zdGFydCk7CiAKIAluZXdfYnVzLT5pcnEgPSBrbWFsbG9jKDMyICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwogCkBAIC0yMDMsOSArMjAzLDE0IEBACiAJCWlmICgocmVzLnN0YXJ0ID49IHRlbXByZXMuc3RhcnQpICYmCiAJCSAgICAocmVzLmVuZCA8PSB0ZW1wcmVzLmVuZCkpIHsKIAkJCS8qIHNldCB0aGlzIFVDQyB0byBiZSB0aGUgTUlJIG1hc3RlciAqLwotCQkJY29uc3QgdTMyICppZCA9IG9mX2dldF9wcm9wZXJ0eSh0ZW1wbnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKLQkJCWlmIChpZCA9PSBOVUxMKQotCQkJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7CisJCQljb25zdCB1MzIgKmlkOworCisJCQlpZCA9IG9mX2dldF9wcm9wZXJ0eSh0ZW1wbnAsICJjZWxsLWluZGV4IiwgTlVMTCk7CisJCQlpZiAoIWlkKSB7CisJCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkodGVtcG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCQkJaWYgKCFpZCkKKwkJCQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKKwkJCX0KIAogCQkJdWNjX3NldF9xZV9tdXhfbWlpX21uZygqaWQgLSAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwppbmRleCBhMTJjOWM0Li4wNjA0ZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwpAQCAtMTI5LDcgKzEyOSw3IEBACiAKIGNvbmZpZyBVU0JfTkVUX0FYODgxN1gKIAl0cmlzdGF0ZSAiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnMiCi0JZGVwZW5kcyBvbiBVU0JfVVNCTkVUICYmIE5FVF9FVEhFUk5FVAorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAogCXNlbGVjdCBDUkMzMgogCWRlZmF1bHQgeQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwppbmRleCA0YjEzMWE2Li5mNzMxOWQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJZG1fd3JpdGVfYXN5bmNfaGVscGVyKGRldiwgcmVnLCB2YWx1ZSwgMCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgZG1fcmVhZF9zaGFyZWRfd29yZChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHksIHU4IHJlZywgdTE2ICp2YWx1ZSkKK3N0YXRpYyBpbnQgZG1fcmVhZF9zaGFyZWRfd29yZChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHksIHU4IHJlZywgX19sZTE2ICp2YWx1ZSkKIHsKIAlpbnQgcmV0LCBpOwogCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRtX3dyaXRlX3NoYXJlZF93b3JkKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHBoeSwgdTggcmVnLCB1MTYgdmFsdWUpCitzdGF0aWMgaW50IGRtX3dyaXRlX3NoYXJlZF93b3JkKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHBoeSwgdTggcmVnLCBfX2xlMTYgdmFsdWUpCiB7CiAJaW50IHJldCwgaTsKIApAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCQkgICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqIGRhdGEpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQl1MTYgKmVidWYgPSAodTE2ICopIGRhdGE7CisJX19sZTE2ICplYnVmID0gKF9fbGUxNiAqKSBkYXRhOwogCWludCBpOwogCiAJLyogYWNjZXNzIGlzIDE2Yml0ICovCkBAIC0yNjgsNyArMjY4LDcgQEAKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JdTE2IHJlczsKKwlfX2xlMTYgcmVzOwogCiAJaWYgKHBoeV9pZCkgewogCQlkZXZkYmcoZGV2LCAiT25seSBpbnRlcm5hbCBwaHkgc3VwcG9ydGVkIik7CkBAIC0yODgsNyArMjg4LDcgQEAKIAkJCSAgICAgIGludCB2YWwpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1MTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTsKKwlfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTsKIAogCWlmIChwaHlfaWQpIHsKIAkJZGV2ZGJnKGRldiwgIk9ubHkgaW50ZXJuYWwgcGh5IHN1cHBvcnRlZCIpOwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJLyogV2UgdXNlIHRoZSAyMCBieXRlIGRldi0+ZGF0YSBmb3Igb3VyIDggYnl0ZSBmaWx0ZXIgYnVmZmVyCiAJICogdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgdGhhdCBpcyB0cmlja3kgdG8gZnJlZSBsYXRlciAqLwogCXU4ICpoYXNoZXMgPSAodTggKikgJiBkZXYtPmRhdGE7Ci0JdTggcnhfY3RsID0gMHgwMTsKKwl1OCByeF9jdGwgPSAweDMxOwogCiAJbWVtc2V0KGhhc2hlcywgMHgwMCwgRE1fTUNBU1RfU0laRSk7CiAJaGFzaGVzW0RNX01DQVNUX1NJWkUgLSAxXSB8PSAweDgwOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwpAQCAtMzU0LDcgKzM1NCw3IEBACiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IG5ldC0+bWNfbGlzdDsKIAkJaW50IGk7CiAKLQkJZm9yIChpID0gMDsgaSA8IG5ldC0+bWNfY291bnQ7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgbmV0LT5tY19jb3VudDsgaSsrLCBtY19saXN0ID0gbWNfbGlzdC0+bmV4dCkgewogCQkJdTMyIGNyYyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNfbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCQkJaGFzaGVzW2NyYyA+PiAzXSB8PSAxIDw8IChjcmMgJiAweDcpOwogCQl9CkBAIC01NjIsNiArNTYyLDEwIEBACiAJIFVTQl9ERVZJQ0UoMHgwYTQ2LCAweDg1MTUpLAkvKiBBRE10ZWsgQURNODUxNSBVU0IgTklDICovCiAJIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZkbTk2MDFfaW5mbywKIAkgfSwKKwl7CisJVVNCX0RFVklDRSgweDBhNDcsIDB4OTYwMSksCS8qIEhpcm9zZSBVU0ItMTAwICovCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAorCSB9LAogCXt9LAkJCS8vIEVORAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IDU2OWFkOGIuLjBkY2ZjMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTU4LDcgKzU4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICN1bmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKaW5kZXggZDFlZDY4YS4uYjU4OGM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCkBAIC0xMTI4LDEyICsxMTI4LDggQEAKIHsKIAlwZWdhc3VzX3QgKnBlZ2FzdXM7CiAKLQlpZiAoaW5fYXRvbWljKCkpCi0JCXJldHVybiAwOwotCiAJcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CiAJbWlpX2V0aHRvb2xfZ3NldCgmcGVnYXN1cy0+bWlpLCBlY21kKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCBhNjEzMjQ3Li4yMWE3Nzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKQEAgLTE2LDEwICsxNiw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0KLS8vICNkZWZpbmUJREVCVUcJCQkvLyBlcnJvciBwYXRoIG1lc3NhZ2VzLCBleHRyYSBpbmZvCi0vLyAjZGVmaW5lCVZFUkJPU0UJCQkvLyBtb3JlOyBzdWNjZXNzIG1lc3NhZ2VzCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0yMjIsNyArMjE4LDcgQEAKICAqIEFjdGl2ZVN5bmMgNC4xIFdpbmRvd3MgZHJpdmVyLgogICovCiBzdGF0aWMgaW50IHJuZGlzX3F1ZXJ5KHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCXZvaWQgKmJ1ZiwgdTMyIG9pZCwgdTMyIGluX2xlbiwKKwkJdm9pZCAqYnVmLCBfX2xlMzIgb2lkLCB1MzIgaW5fbGVuLAogCQl2b2lkICoqcmVwbHksIGludCAqcmVwbHlfbGVuKQogewogCWludCByZXR2YWw7CkBAIC0yODcsNyArMjgzLDggQEAKIAkJc3RydWN0IHJuZGlzX3NldF9jCSpzZXRfYzsKIAkJc3RydWN0IHJuZGlzX2hhbHQJKmhhbHQ7CiAJfSB1OwotCXUzMgkJCXRtcCwgKnBoeW07CisJdTMyCQkJdG1wLCBwaHltX3Vuc3BlYzsKKwlfX2xlMzIJCQkqcGh5bTsKIAlpbnQJCQlyZXBseV9sZW47CiAJdW5zaWduZWQgY2hhcgkJKmJwOwogCkBAIC0zMTgsNiArMzE1LDE0IEBACiAJbmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfZGF0YV9oZHIpOwogCWRldi0+aGFyZF9tdHUgPSBuZXQtPm10dSArIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCisJZGV2LT5tYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KGRldi0+dWRldiwgZGV2LT5vdXQsIDEpOworCWlmIChkZXYtPm1heHBhY2tldCA9PSAwKSB7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUoZGV2KSkKKwkJCWRldl9kYmcoJmludGYtPmRldiwgImRldi0+bWF4cGFja2V0IGNhbid0IGJlIDBcbiIpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxfYW5kX3JlbGVhc2U7CisJfQorCiAJZGV2LT5yeF91cmJfc2l6ZSA9IGRldi0+aGFyZF9tdHUgKyAoZGV2LT5tYXhwYWNrZXQgKyAxKTsKIAlkZXYtPnJ4X3VyYl9zaXplICY9IH4oZGV2LT5tYXhwYWNrZXQgLSAxKTsKIAl1LmluaXQtPm1heF90cmFuc2Zlcl9zaXplID0gY3B1X3RvX2xlMzIoZGV2LT5yeF91cmJfc2l6ZSk7CkBAIC0zNTksMTIgKzM2NCwxNSBAQAogCQlnb3RvIGhhbHRfZmFpbF9hbmRfcmVsZWFzZTsKIAogCS8qIENoZWNrIHBoeXNpY2FsIG1lZGl1bSAqLworCXBoeW0gPSBOVUxMOwogCXJlcGx5X2xlbiA9IHNpemVvZiAqcGh5bTsKIAlyZXR2YWwgPSBybmRpc19xdWVyeShkZXYsIGludGYsIHUuYnVmLCBPSURfR0VOX1BIWVNJQ0FMX01FRElVTSwKIAkJCTAsICh2b2lkICoqKSAmcGh5bSwgJnJlcGx5X2xlbik7Ci0JaWYgKHJldHZhbCAhPSAwKQorCWlmIChyZXR2YWwgIT0gMCB8fCAhcGh5bSkgewogCQkvKiBPSUQgaXMgb3B0aW9uYWwgc28gZG9uJ3QgZmFpbCBoZXJlLiAqLwotCQkqcGh5bSA9IFJORElTX1BIWVNJQ0FMX01FRElVTV9VTlNQRUNJRklFRDsKKwkJcGh5bV91bnNwZWMgPSBSTkRJU19QSFlTSUNBTF9NRURJVU1fVU5TUEVDSUZJRUQ7CisJCXBoeW0gPSAmcGh5bV91bnNwZWM7CisJfQogCWlmICgoZmxhZ3MgJiBGTEFHX1JORElTX1BIWU1fV0lSRUxFU1MpICYmCiAJCQkqcGh5bSAhPSBSTkRJU19QSFlTSUNBTF9NRURJVU1fV0lSRUxFU1NfTEFOKSB7CiAJCWlmIChuZXRpZl9tc2dfcHJvYmUoZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IDdlMWYwMDEuLmRmNTZhNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJCXJldHVybiAwOwogCX0KIAlkZXYtPmN0cmxfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldi0+aW50cl91cmIpIHsKKwlpZiAoIWRldi0+Y3RybF91cmIpIHsKIAkJdXNiX2ZyZWVfdXJiKGRldi0+cnhfdXJiKTsKIAkJdXNiX2ZyZWVfdXJiKGRldi0+dHhfdXJiKTsKIAkJdXNiX2ZyZWVfdXJiKGRldi0+aW50cl91cmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDNmNjdhMjkuLjMxY2Q4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTI0NCwxOCArMjQ0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZXRoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKLQotCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPnBlZXIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2ZXRoX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKQEAgLTI4NiwxMyArMjc0LDUwIEBACiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2ZXRoX3htaXQ7CiAJZGV2LT5nZXRfc3RhdHMgPSB2ZXRoX2dldF9zdGF0czsKIAlkZXYtPm9wZW4gPSB2ZXRoX29wZW47Ci0JZGV2LT5zdG9wID0gdmV0aF9jbG9zZTsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZldGhfZXRodG9vbF9vcHM7CiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CiAJZGV2LT5pbml0ID0gdmV0aF9kZXZfaW5pdDsKIAlkZXYtPmRlc3RydWN0b3IgPSB2ZXRoX2Rldl9mcmVlOwogfQogCitzdGF0aWMgdm9pZCB2ZXRoX2NoYW5nZV9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpwZWVyOworCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwZWVyID0gcHJpdi0+cGVlcjsKKworCWlmIChuZXRpZl9jYXJyaWVyX29rKHBlZXIpKSB7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCX0gZWxzZSB7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCX0KK30KKworc3RhdGljIGludCB2ZXRoX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CisKKwlpZiAoZGV2LT5vcGVuICE9IHZldGhfb3BlbikKKwkJZ290byBvdXQ7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBORVRERVZfQ0hBTkdFOgorCQl2ZXRoX2NoYW5nZV9zdGF0ZShkZXYpOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHZldGhfbm90aWZpZXJfYmxvY2sgX19yZWFkX21vc3RseSA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHZldGhfZGV2aWNlX2V2ZW50LAorfTsKKwogLyoKICAqIG5ldGxpbmsgaW50ZXJmYWNlCiAgKi8KQEAgLTM1MCw3ICszNzUsNyBAQAogCWVsc2UKIAkJc25wcmludGYoaWZuYW1lLCBJRk5BTVNJWiwgRFJWX05BTUUgIiUlZCIpOwogCi0JcGVlciA9IHJ0bmxfY3JlYXRlX2xpbmsoZGV2LT5uZF9uZXQsIGlmbmFtZSwgJnZldGhfbGlua19vcHMsIHRicCk7CisJcGVlciA9IHJ0bmxfY3JlYXRlX2xpbmsoZGV2X25ldChkZXYpLCBpZm5hbWUsICZ2ZXRoX2xpbmtfb3BzLCB0YnApOwogCWlmIChJU19FUlIocGVlcikpCiAJCXJldHVybiBQVFJfRVJSKHBlZXIpOwogCkBAIC00NTQsMTIgKzQ3OSwxNCBAQAogCiBzdGF0aWMgX19pbml0IGludCB2ZXRoX2luaXQodm9pZCkKIHsKKwlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnZldGhfbm90aWZpZXJfYmxvY2spOwogCXJldHVybiBydG5sX2xpbmtfcmVnaXN0ZXIoJnZldGhfbGlua19vcHMpOwogfQogCiBzdGF0aWMgX19leGl0IHZvaWQgdmV0aF9leGl0KHZvaWQpCiB7CiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJnZldGhfbGlua19vcHMpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZ2ZXRoX25vdGlmaWVyX2Jsb2NrKTsKIH0KIAogbW9kdWxlX2luaXQodmV0aF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggN2M4NTFiMS4uOGM5ZDZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTE4OTMsNyArMTg5Myw3IEBACiAKIAkvKiBNYWtlIHN1cmUgd2UgdXNlIHBhdHRlcm4gMCwgMSBhbmQgbm90IDQsIDUgKi8KIAlpZiAocnAtPnF1aXJrcyAmIHJxNnBhdHRlcm5zKQotCQlpb3dyaXRlOCgweDA0LCBpb2FkZHIgKyAweEE3KTsKKwkJaW93cml0ZTgoMHgwNCwgaW9hZGRyICsgV09MY2dDbHIpOwogCiAJaWYgKHJwLT53b2xvcHRzICYgV0FLRV9NQUdJQykgewogCQlpb3dyaXRlOChXT0xtYWdpYywgaW9hZGRyICsgV09MY3JTZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCBjYzBhZGRiLi5lZDFhZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtMzQ2MCwyMSArMzQ2MCwyMiBAQAogc3RhdGljIGludCB2ZWxvY2l0eV9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBub3RpZmljYXRpb24sIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSAoc3RydWN0IGluX2lmYWRkciAqKSBwdHI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGlmYS0+aWZhX2Rldi0+ZGV2OworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaWZhKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZmEtPmlmYV9kZXYtPmRldjsKLQkJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHI7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVsb2NpdHlfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwdHIsICZ2ZWxvY2l0eV9kZXZfbGlzdCwgbGlzdCkgewotCQkJaWYgKHZwdHItPmRldiA9PSBkZXYpIHsKLQkJCQl2ZWxvY2l0eV9nZXRfaXAodnB0cik7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlbG9jaXR5X2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwdHIsICZ2ZWxvY2l0eV9kZXZfbGlzdCwgbGlzdCkgeworCQlpZiAodnB0ci0+ZGV2ID09IGRldikgeworCQkJdmVsb2NpdHlfZ2V0X2lwKHZwdHIpOworCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVsb2NpdHlfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWxvY2l0eV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBmZGMyMzY3Li41NTViNzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC0yMDMsOCArMjAzLDExIEBACiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7CiAJCW5ldGlmX3J4X2NvbXBsZXRlKHZpLT5kZXYsIG5hcGkpOwogCQlpZiAodW5saWtlbHkoIXZpLT5ydnEtPnZxX29wcy0+ZW5hYmxlX2NiKHZpLT5ydnEpKQotCQkgICAgJiYgbmV0aWZfcnhfcmVzY2hlZHVsZSh2aS0+ZGV2LCBuYXBpKSkKKwkJICAgICYmIG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKSkgeworCQkJdmktPnJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHZpLT5ydnEpOworCQkJX19uZXRpZl9yeF9zY2hlZHVsZSh2aS0+ZGV2LCBuYXBpKTsKIAkJCWdvdG8gYWdhaW47CisJCX0KIAl9CiAKIAlyZXR1cm4gcmVjZWl2ZWQ7CkBAIC0yMzEsMTEgKzIzNCwxMiBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxK01BWF9TS0JfRlJBR1NdOwogCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAoKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGEpLT5oX2Rlc3Q7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlzZ19pbml0X3RhYmxlKHNnLCAxK01BWF9TS0JfRlJBR1MpOwogCi0JcHJfZGVidWcoIiVzOiB4bWl0ICVwICVzXG4iLCBkZXYtPm5hbWUsIHNrYiwgcHJpbnRfbWFjKG1hYywgZGVzdCkpOworCXByX2RlYnVnKCIlczogeG1pdCAlcCAiIE1BQ19GTVQgIlxuIiwgZGV2LT5uYW1lLCBza2IsCisJCSBkZXN0WzBdLCBkZXN0WzFdLCBkZXN0WzJdLAorCQkgZGVzdFszXSwgZGVzdFs0XSwgZGVzdFs1XSk7CiAKIAkvKiBFbmNvZGUgbWV0YWRhdGEgaGVhZGVyIGF0IGZyb250LiAqLwogCWhkciA9IHNrYl92bmV0X2hkcihza2IpOwpAQCAtMjc4LDEwICsyODIsMTAgQEAKIAkJcHJfZGVidWcoIiVzOiB2aXJ0aW8gbm90IHByZXBhcmVkIHRvIHNlbmRcbiIsIGRldi0+bmFtZSk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCQkvKiBBY3RpdmF0ZSBjYWxsYmFjayBmb3IgdXNpbmcgc2ticzogaWYgdGhpcyBmYWlscyBpdAorCQkvKiBBY3RpdmF0ZSBjYWxsYmFjayBmb3IgdXNpbmcgc2ticzogaWYgdGhpcyByZXR1cm5zIGZhbHNlIGl0CiAJCSAqIG1lYW5zIHNvbWUgd2VyZSB1c2VkIGluIHRoZSBtZWFudGltZS4gKi8KIAkJaWYgKHVubGlrZWx5KCF2aS0+c3ZxLT52cV9vcHMtPmVuYWJsZV9jYih2aS0+c3ZxKSkpIHsKLQkJCXByaW50aygiVW5saWtlbHk6IHJlc3RhcnQgc3ZxIGZhaWxlZFxuIik7CisJCQl2aS0+c3ZxLT52cV9vcHMtPmRpc2FibGVfY2IodmktPnN2cSk7CiAJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCQkJZ290byBhZ2FpbjsKIAkJfQpAQCAtMjk0LDYgKzI5OCwxNSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIHZpcnRuZXRfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHZpcnRuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTMzNiw2ICszNDksOSBAQAogCWRldi0+c3RvcCA9IHZpcnRuZXRfY2xvc2U7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGFydF94bWl0OwogCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0hJR0hETUE7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwlkZXYtPnBvbGxfY29udHJvbGxlciA9IHZpcnRuZXRfbmV0cG9sbDsKKyNlbmRpZgogCVNFVF9ORVRERVZfREVWKGRldiwgJnZkZXYtPmRldik7CiAKIAkvKiBEbyB3ZSBzdXBwb3J0ICJoYXJkd2FyZSIgY2hlY2tzdW1zPyAqLwpAQCAtMzYxLDYgKzM3Nyw3IEBACiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdmktPm5hcGksIHZpcnRuZXRfcG9sbCwgbmFwaV93ZWlnaHQpOwogCXZpLT5kZXYgPSBkZXY7CiAJdmktPnZkZXYgPSB2ZGV2OworCXZkZXYtPnByaXYgPSB2aTsKIAogCS8qIFdlIGV4cGVjdCB0d28gdmlydHF1ZXVlcywgcmVjZWl2ZSB0aGVuIHNlbmQuICovCiAJdmktPnJ2cSA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cSh2ZGV2LCAwLCBza2JfcmVjdl9kb25lKTsKQEAgLTM5NSw3ICs0MTIsNiBAQAogCX0KIAogCXByX2RlYnVnKCJ2aXJ0bmV0OiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgZGV2LT5uYW1lKTsKLQl2ZGV2LT5wcml2ID0gdmk7CiAJcmV0dXJuIDA7CiAKIHVucmVnaXN0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCmluZGV4IGEzZGYwOWUuLjgwMDVkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCkBAIC0xNTAsOSArMTUwLDEzIEBACiAKIGNvbmZpZyBIRExDX1BQUAogCXRyaXN0YXRlICJTeW5jaHJvbm91cyBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSERMQworCWRlcGVuZHMgb24gSERMQyAmJiBCUk9LRU4KIAloZWxwCiAJICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgUFBQIG92ZXIgV0FOIGNvbm5lY3Rpb25zLgorCSAgVGhpcyBtb2R1bGUgaXMgY3VycmVudGx5IGJyb2tlbiBhbmQgd2lsbCBjYXVzZSBhIGtlcm5lbCBwYW5pYworCSAgd2hlbiBhIGRldmljZSBjb25maWd1cmVkIGluIFBQUCBtb2RlIGlzIGFjdGl2YXRlZC4KKworCSAgSXQgd2lsbCBiZSByZXBsYWNlZCBieSBuZXcgUFBQIGltcGxlbWVudGF0aW9uIGluIExpbnV4IDIuNi4yNi4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggMWQ3MDZlYS4uNDVkZGZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC05MCw2ICs5MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjdW5kZWYgQ09TQV9TTE9XX0lPCS8qIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgKi8KQEAgLTEyNyw3ICsxMjgsOCBAQAogCWludCAoKnR4X2RvbmUpKHN0cnVjdCBjaGFubmVsX2RhdGEgKmNoYW5uZWwsIGludCBzaXplKTsKIAogCS8qIENoYXJhY3RlciBkZXZpY2UgcGFydHMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHJzZW0sIHdzZW07CisJc3RydWN0IG11dGV4IHJsb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgd3NlbTsKIAljaGFyICpyeGRhdGE7CiAJaW50IHJ4c2l6ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB0eHdhaXRxLCByeHdhaXRxOwpAQCAtODA3LDcgKzgwOSw3IEBACiAKIHN0YXRpYyB2b2lkIGNoYXJkZXZfY2hhbm5lbF9pbml0KHN0cnVjdCBjaGFubmVsX2RhdGEgKmNoYW4pCiB7Ci0JaW5pdF9NVVRFWCgmY2hhbi0+cnNlbSk7CisJbXV0ZXhfaW5pdCgmY2hhbi0+cmxvY2spOwogCWluaXRfTVVURVgoJmNoYW4tPndzZW0pOwogfQogCkBAIC04MjUsMTIgKzgyNywxMiBAQAogCQkJY29zYS0+bmFtZSwgY29zYS0+ZmlybXdhcmVfc3RhdHVzKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2hhbi0+cnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2hhbi0+cmxvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQogCWlmICgoY2hhbi0+cnhkYXRhID0ga21hbGxvYyhDT1NBX01UVSwgR0ZQX0RNQXxHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogY29zYV9yZWFkKCkgLSBPT01cbiIsIGNvc2EtPm5hbWUpOwotCQl1cCgmY2hhbi0+cnNlbSk7CisJCW11dGV4X3VubG9jaygmY2hhbi0+cmxvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTg0OCw3ICs4NTAsNyBAQAogCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoYW4tPnJ4d2FpdHEsICZ3YWl0KTsKIAkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29zYS0+bG9jaywgZmxhZ3MpOwotCQkJdXAoJmNoYW4tPnJzZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZjaGFuLT5ybG9jayk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CiAJfQpAQCAtODU3LDcgKzg1OSw3IEBACiAJa2J1ZiA9IGNoYW4tPnJ4ZGF0YTsKIAljb3VudCA9IGNoYW4tPnJ4c2l6ZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3NhLT5sb2NrLCBmbGFncyk7Ci0JdXAoJmNoYW4tPnJzZW0pOworCW11dGV4X3VubG9jaygmY2hhbi0+cmxvY2spOwogCiAJaWYgKGNvcHlfdG9fdXNlcihidWYsIGtidWYsIGNvdW50KSkgewogCQlrZnJlZShrYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IDk2YjIzMjQuLmIxNDI0MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtNTE3LDcgKzUxNyw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IGNmMjdiZjQuLjU0NzM2OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMjAyNCw2ICsyMDI0LDcgQEAKIAlzdHJ1Y3QgZnN0aW9jX3dyaXRlIHdydGhkcjsKIAlzdHJ1Y3QgZnN0aW9jX2luZm8gaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmJ1ZjsKIAogCWRiZyhEQkdfSU9DVEwsICJpb2N0bDogJXgsICVwXG4iLCBjbWQsIGlmci0+aWZyX2RhdGEpOwogCkBAIC0yMDY1LDE2ICsyMDY2LDIyIEBACiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAKLQkJLyogTm93IGNvcHkgdGhlIGRhdGEgdG8gdGhlIGNhcmQuCi0JCSAqIFRoaXMgd2lsbCBwcm9iYWJseSBicmVhayBvbiBzb21lIGFyY2hpdGVjdHVyZXMuCi0JCSAqIEknbGwgZml4IGl0IHdoZW4gSSBoYXZlIHNvbWV0aGluZyB0byB0ZXN0IG9uLgotCQkgKi8KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGNhcmQtPm1lbSArIHdydGhkci5vZmZzZXQsCisJCS8qIE5vdyBjb3B5IHRoZSBkYXRhIHRvIHRoZSBjYXJkLiAqLworCisJCWJ1ZiA9IGttYWxsb2Mod3J0aGRyLnNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsCiAJCQkJICAgaWZyLT5pZnJfZGF0YSArIHNpemVvZiAoc3RydWN0IGZzdGlvY193cml0ZSksCiAJCQkJICAgd3J0aGRyLnNpemUpKSB7CisJCQlrZnJlZShidWYpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAorCQltZW1jcHlfdG9pbyhjYXJkLT5tZW0gKyB3cnRoZHIub2Zmc2V0LCBidWYsIHdydGhkci5zaXplKTsKKwkJa2ZyZWUoYnVmKTsKKwogCQkvKiBXcml0ZXMgdG8gdGhlIG1lbW9yeSBvZiBhIGNhcmQgaW4gdGhlIHJlc2V0IHN0YXRlIGNvbnN0aXR1dGUKIAkJICogYSBkb3dubG9hZAogCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCmluZGV4IDM5OTUxZDAuLjlhODNjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwpAQCAtNjgsNyArNjgsNyBAQAogewogCXN0cnVjdCBoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KSB7CisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KQEAgLTEwNSw3ICsxMDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9uOwogIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChkZXYtPmdldF9zdGF0cyAhPSBoZGxjX2dldF9zdGF0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwppbmRleCBmYjM3YjgwLi5iNTg2MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCkBAIC01OCw3ICs1OCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CQkvKiBzb21lIHN0YXRpc3RpY3MgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGxhcGJldGhfZGV2aWNlcyA9IExJU1RfSEVBRF9JTklUKGxhcGJldGhfZGV2aWNlcyk7CitzdGF0aWMgTElTVF9IRUFEKGxhcGJldGhfZGV2aWNlcyk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC05MSw3ICs5MSw3IEBACiAJaW50IGxlbiwgZXJyOwogCXN0cnVjdCBsYXBiZXRoZGV2ICpsYXBiZXRoOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJZ290byBkcm9wOwogCiAJaWYgKChza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKQEAgLTM5Myw3ICszOTMsNyBAQAogCXN0cnVjdCBsYXBiZXRoZGV2ICpsYXBiZXRoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoIWRldl9pc19ldGhkZXYoZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCmluZGV4IDE1ZDVjNTguLmU1OTI1NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwpAQCAtNzUxLDcgKzc1MSw3IEBACiB9CiAKIAotc3RhdGljIF9faW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogc2VuZF9jb21wbGV0ZSggc3RydWN0IG5ldF9sb2NhbCAgKm5sICkKIHsKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vc3luY3BwcC5jCmluZGV4IDYxZTI0YjcuLjI5YjRiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3N5bmNwcHAuYwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAKIAogc3RhdGljIGludCBzcHBwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KSB7CisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDcxNGE2Y2EuLmZkZjVhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTQ2LDEyICsxNDYsMTUgQEAKICAgICAgICAgICBjb25maWd1cmUgeW91ciBjYXJkOgogCiAgICAgICAgICAgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbD4uCisKKyAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlIChNKQorICAgICAgICAgIHJhdGhlciB0aGFuIGJ1aWx0LWluIChZKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgYXQgZGV2aWNlCisgICAgICAgICAgaW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIHdoZW4gYnVpbHQtaW4gdGhpcyB0eXBpY2FsbHkgaGFwcGVucworICAgICAgICAgIGJlZm9yZSB0aGUgZmlsZXN5c3RlbSBpcyBhY2Nlc3NpYmxlIChoZW5jZSBmaXJtd2FyZSB3aWxsIGJlCisgICAgICAgICAgdW5hdmFpbGFibGUgYW5kIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbCkuIElmIHlvdSBkbyBjaG9vc2UgdG8gYnVpbGQKKyAgICAgICAgICB0aGlzIGRyaXZlciBpbnRvIHlvdXIga2VybmVsIGltYWdlLCB5b3UgY2FuIGF2b2lkIHRoaXMgcHJvYmxlbSBieQorICAgICAgICAgIGluY2x1ZGluZyB0aGUgZmlybXdhcmUgYW5kIGEgZmlybXdhcmUgbG9hZGVyIGluIGFuIGluaXRyYW1mcy4KICAKLSAgICAgICAgICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCi0gICAgICAgICAgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLAotICAgICAgICAgIHNheSBNIGhlcmUgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQ+LgotICAgICAgICAgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXB3MjEwMC5rby4KLQkKIGNvbmZpZyBJUFcyMTAwX01PTklUT1IKICAgICAgICAgYm9vbCAiRW5hYmxlIHByb21pc2N1b3VzIG1vZGUiCiAgICAgICAgIGRlcGVuZHMgb24gSVBXMjEwMApAQCAtMjAxLDExICsyMDQsMTQgQEAKICAgICAgICAgICBjb25maWd1cmUgeW91ciBjYXJkOgogCiAgICAgICAgICAgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbD4uCi0gCi0gICAgICAgICAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoIGNhbiBiZQotICAgICAgICAgIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KSwKLSAgICAgICAgICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KLSAgICAgICAgICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlwdzIyMDAua28uCisKKyAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlIChNKQorICAgICAgICAgIHJhdGhlciB0aGFuIGJ1aWx0LWluIChZKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgYXQgZGV2aWNlCisgICAgICAgICAgaW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIHdoZW4gYnVpbHQtaW4gdGhpcyB0eXBpY2FsbHkgaGFwcGVucworICAgICAgICAgIGJlZm9yZSB0aGUgZmlsZXN5c3RlbSBpcyBhY2Nlc3NpYmxlIChoZW5jZSBmaXJtd2FyZSB3aWxsIGJlCisgICAgICAgICAgdW5hdmFpbGFibGUgYW5kIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbCkuIElmIHlvdSBkbyBjaG9vc2UgdG8gYnVpbGQKKyAgICAgICAgICB0aGlzIGRyaXZlciBpbnRvIHlvdXIga2VybmVsIGltYWdlLCB5b3UgY2FuIGF2b2lkIHRoaXMgcHJvYmxlbSBieQorICAgICAgICAgIGluY2x1ZGluZyB0aGUgZmlybXdhcmUgYW5kIGEgZmlybXdhcmUgbG9hZGVyIGluIGFuIGluaXRyYW1mcy4KIAogY29uZmlnIElQVzIyMDBfTU9OSVRPUgogICAgICAgICBib29sICJFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSIKQEAgLTI2NSw3ICsyNzEsNiBAQAogCXRyaXN0YXRlICJNYXJ2ZWxsIDh4eHggTGliZXJ0YXMgV0xBTiBkcml2ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFdMQU5fODAyMTEKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCi0Jc2VsZWN0IElFRUU4MDIxMQogCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCiAJICBBIGxpYnJhcnkgZm9yIE1hcnZlbGwgTGliZXJ0YXMgOHh4eCBkZXZpY2VzLgpAQCAtMjc4LDcgKzI4Myw3IEBACiAKIGNvbmZpZyBMSUJFUlRBU19DUwogCXRyaXN0YXRlICJNYXJ2ZWxsIExpYmVydGFzIDgzODUgQ29tcGFjdEZsYXNoIDgwMi4xMWIvZyBjYXJkcyIKLQlkZXBlbmRzIG9uIExJQkVSVEFTICYmIFBDTUNJQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIExJQkVSVEFTICYmIFBDTUNJQQogCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCiAJICBBIGRyaXZlciBmb3IgTWFydmVsbCBMaWJlcnRhcyA4Mzg1IENvbXBhY3RGbGFzaCBkZXZpY2VzLgpAQCAtNjY4LDkwICs2NzMsMTAgQEAKIAogCSAgVGhhbmtzIHRvIEluZmluZW9uLUFETXRlayBmb3IgdGhlaXIgc3VwcG9ydCBvZiB0aGlzIGRyaXZlci4KIAotY29uZmlnIFA1NF9DT01NT04KLQl0cmlzdGF0ZSAiU29mdG1hYyBQcmlzbTU0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEZXX0xPQURFUiAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4IGJhc2VkIGNhcmRzLgotCSAgVGhpcyBtb2R1bGUgZG9lcyBub3RoaW5nIGJ5IGl0c2VsZiAtIHRoZSBVU0IvUENJIGZyb250ZW5kcwotCSAgYWxzbyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBhbnkgZGV2aWNlcy4KLQotCSAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0Ci0JICBodHRwOi8vcHJpc201NC5vcmcvCi0KLQkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRjb21tb24uCi0KLWNvbmZpZyBQNTRfVVNCCi0JdHJpc3RhdGUgIlByaXNtNTQgVVNCIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQNTRfQ09NTU9OICYmIFVTQgotCXNlbGVjdCBDUkMzMgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy4KLQkgIFRoZXNlIGFyZSBVU0IgYmFzZWQgYWRhcHRlcnMgZm91bmQgaW4gZGV2aWNlcyBzdWNoIGFzOgotCi0JICAzQ09NIDNDUldFMjU0RzcyCi0JICBTTUMgMjg2MlctRwotCSAgQWNjdG9uIDgwMi4xMWcgV040NTAxIFVTQgotCSAgU2llbWVucyBHaWdhc2V0IFVTQgotCSAgTmV0Z2VhciBXRzEyMQotCSAgTmV0Z2VhciBXRzExMQotCSAgTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUKLQkgIFNodXR0bGUgUE4xNSwgQWlydmFzdCBXTTE2OGcsIElPR2VhciBHV1U1MTMKLQkgIExpbmtzeXMgV1VTQjU0RwotCSAgTGlua3N5cyBXVVNCNTRHIFBvcnRhYmxlCi0JICBETGluayBEV0wtRzEyMCBTcGlubmFrZXIKLQkgIERMaW5rIERXTC1HMTIyCi0JICBCZWxraW4gRjVENzA1MCB2ZXIgMTAwMAotCSAgQ29oaWJhIFByb3RvIGJvYXJkCi0JICBTTUMgMjg2MlctRyB2ZXJzaW9uIDIKLQkgIFUuUy4gUm9ib3RpY3MgVTUgODAyLjExZyBBZGFwdGVyCi0JICBGVUpJVFNVIEUtNTQwMCBVU0IgRDE3MDAKLQkgIFNhZ2VtIFhHNzAzQQotCSAgRExpbmsgRFdMLUcxMjAgQ29oaWJhCi0JICBTcGlubmFrZXIgUHJvdG8gYm9hcmQKLQkgIExpbmtzeXMgV1VTQjU0QUcKLQkgIEludmVudGVsIFVSMDU0RwotCSAgU3Bpbm5ha2VyIERVVAotCi0JICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKLQkgIGh0dHA6Ly9wcmlzbTU0Lm9yZy8KLQotCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHVzYi4KLQotY29uZmlnIFA1NF9QQ0kKLQl0cmlzdGF0ZSAiUHJpc201NCBQQ0kgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFA1NF9DT01NT04gJiYgUENJCi0JLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSSBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLgotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbW9zdCBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUKLQkgIGZ1bGxtYWMgcHJpc201NCBkcml2ZXIgcGx1cyBtYW55IGRldmljZXMgd2hpY2ggYXJlIG5vdAotCSAgc3VwcG9ydGVkIGJ5IHRoZSBmdWxsbWFjIGRyaXZlci9maXJtd2FyZS4KLQotCSAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKLQkgIGh0dHA6Ly9wcmlzbTU0Lm9yZy8KLQotCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHBjaS4KLQotY29uZmlnIEFUSDVLCi0JdHJpc3RhdGUgIkF0aGVyb3MgNXh4eCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQotCSAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbgotCSAgQXRoZXJvcyA1eHh4IGNoaXBzZXQuCi0KLQkgIEN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGNoaXAgdmVyc2lvbnMgYXJlIHN1cHBvcnRlZDoKLQotCSAgTUFDOiBBUjUyMTEgQVI1MjEyCi0JICBQSFk6IFJGNTExMS8yMTExIFJGNTExMi8yMTEyIFJGNTQxMy8yNDEzCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIGtlcm5lbCdzIG1hYzgwMjExIHN1YnN5c3RlbS4KLQotCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDVrLiBTYXkgTSBpZgotCSAgdW5zdXJlLgotCitzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9LY29uZmlnIgotc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKaW5kZXggMDkxZGZlMi4uNzAwOTIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTM1LDcgKzM1LDYgQEAKIG9iai0kKENPTkZJR19QUklTTTU0KQkJKz0gcHJpc201NC8KIAogb2JqLSQoQ09ORklHX0hPU1RBUCkJCSs9IGhvc3RhcC8KLW9iai0kKENPTkZJR19CQ000M1hYKQkJKz0gYmNtNDN4eC8KIG9iai0kKENPTkZJR19CNDMpCQkrPSBiNDMvCiBvYmotJChDT05GSUdfQjQzTEVHQUNZKQkJKz0gYjQzbGVnYWN5Lwogb2JqLSQoQ09ORklHX1pEMTIxMVJXKQkJKz0gemQxMjExcncvCkBAIC02MSw4ICs2MCw2IEBACiBvYmotJChDT05GSUdfSVdMNDk2NSkJKz0gaXdsd2lmaS8KIG9iai0kKENPTkZJR19SVDJYMDApCSs9IHJ0MngwMC8KIAotb2JqLSQoQ09ORklHX1A1NF9DT01NT04pCSs9IHA1NGNvbW1vbi5vCi1vYmotJChDT05GSUdfUDU0X1VTQikJCSs9IHA1NHVzYi5vCi1vYmotJChDT05GSUdfUDU0X1BDSSkJCSs9IHA1NHBjaS5vCitvYmotJChDT05GSUdfUDU0X0NPTU1PTikJKz0gcDU0LwogCiBvYmotJChDT05GSUdfQVRINUspCSs9IGF0aDVrLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCmluZGV4IDc5Nzk2MTguLjVjMGQyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKQEAgLTQ4LDYgKzQ4LDMyIEBACiAJeyAwIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYWRtODIxMV9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDIyMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgLyogWFggPz8gKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYWRtODIxMV9jaGFubmVsc1tdID0geworCXsgLmNlbnRlcl9mcmVxID0gMjQxMn0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3fSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjJ9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyN30sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0Mzd9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0Mn0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3fSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTJ9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1N30sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDYyfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0Njd9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDg0fSwKK307CisKKwogc3RhdGljIHZvaWQgYWRtODIxMV9lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCiB7CiAJc3RydWN0IGFkbTgyMTFfcHJpdiAqcHJpdiA9IGVlcHJvbS0+ZGF0YTsKQEAgLTE1NSwxNyArMTgxLDE3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzIChhZG04MjExKTogQ2hhbm5lbCByYW5nZTogJWQgLSAlZFxuIiwKIAkgICAgICAgcGNpX25hbWUocHJpdi0+cGRldiksIChpbnQpY2hhbl9yYW5nZS5taW4sIChpbnQpY2hhbl9yYW5nZS5tYXgpOwogCi0JcHJpdi0+bW9kZXNbMF0ubnVtX2NoYW5uZWxzID0gY2hhbl9yYW5nZS5tYXggLSBjaGFuX3JhbmdlLm1pbiArIDE7Ci0JcHJpdi0+bW9kZXNbMF0uY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmNoYW5uZWxzKSAhPSBzaXplb2YoYWRtODIxMV9jaGFubmVscykpOwogCi0JbWVtY3B5KHByaXYtPmNoYW5uZWxzLCBhZG04MjExX2NoYW5uZWxzLCBzaXplb2YoYWRtODIxMV9jaGFubmVscykpOworCW1lbWNweShwcml2LT5jaGFubmVscywgYWRtODIxMV9jaGFubmVscywgc2l6ZW9mKHByaXYtPmNoYW5uZWxzKSk7CisJcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOworCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUoYWRtODIxMV9jaGFubmVscyk7CisJcHJpdi0+YmFuZC5iaXRyYXRlcyA9IGFkbTgyMTFfcmF0ZXM7CisJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShhZG04MjExX3JhdGVzKTsKIAogCWZvciAoaSA9IDE7IGkgPD0gQVJSQVlfU0laRShhZG04MjExX2NoYW5uZWxzKTsgaSsrKQotCQlpZiAoaSA+PSBjaGFuX3JhbmdlLm1pbiAmJiBpIDw9IGNoYW5fcmFuZ2UubWF4KQotCQkJcHJpdi0+Y2hhbm5lbHNbaSAtIDFdLmZsYWcgPQotCQkJCUlFRUU4MDIxMV9DSEFOX1dfU0NBTiB8Ci0JCQkJSUVFRTgwMjExX0NIQU5fV19BQ1RJVkVfU0NBTiB8Ci0JCQkJSUVFRTgwMjExX0NIQU5fV19JQlNTOworCQlpZiAoaSA8IGNoYW5fcmFuZ2UubWluIHx8IGkgPiBjaGFuX3JhbmdlLm1heCkKKwkJCXByaXYtPmNoYW5uZWxzW2kgLSAxXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKIAogCXN3aXRjaCAocHJpdi0+ZWVwcm9tLT5zcGVjaWZpY19iYnB0eXBlKSB7CiAJY2FzZSBBRE04MjExX0JCUF9SRk1EMzAwMDoKQEAgLTM0Nyw3ICszNzMsNiBAQAogCXVuc2lnbmVkIGludCBwa3RsZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld3NrYjsKIAl1bnNpZ25lZCBpbnQgbGltaXQgPSBwcml2LT5yeF9yaW5nX3NpemU7Ci0Jc3RhdGljIGNvbnN0IHU4IHJhdGVfdGJsW10gPSB7MTAsIDIwLCA1NSwgMTEwLCAyMjB9OwogCXU4IHJzc2ksIHJhdGU7CiAKIAl3aGlsZSAoIShwcml2LT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihSREVTMF9TVEFUVVNfT1dOKSkpIHsKQEAgLTQyNSwxMiArNDUwLDEwIEBACiAJCQllbHNlCiAJCQkJcnhfc3RhdHVzLnNzaSA9IDEwMCAtIHJzc2k7CiAKLQkJCWlmIChyYXRlIDw9IDQpCi0JCQkJcnhfc3RhdHVzLnJhdGUgPSByYXRlX3RibFtyYXRlXTsKKwkJCXJ4X3N0YXR1cy5yYXRlX2lkeCA9IHJhdGU7CiAKLQkJCXJ4X3N0YXR1cy5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKLQkJCXJ4X3N0YXR1cy5mcmVxID0gYWRtODIxMV9jaGFubmVsc1twcml2LT5jaGFubmVsIC0gMV0uZnJlcTsKLQkJCXJ4X3N0YXR1cy5waHltb2RlID0gTU9ERV9JRUVFODAyMTFCOworCQkJcnhfc3RhdHVzLmZyZXEgPSBhZG04MjExX2NoYW5uZWxzW3ByaXYtPmNoYW5uZWwgLSAxXS5jZW50ZXJfZnJlcTsKKwkJCXJ4X3N0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAogCQkJaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LCBza2IsICZyeF9zdGF0dXMpOwogCQl9CkBAIC00NjUsOSArNDg4LDYgQEAKIAlpZiAoc3RzciAmIEFETTgyMTFfU1RTUl9UQ0kpCiAJCWFkbTgyMTFfaW50ZXJydXB0X3RjaShkZXYpOwogCi0JLypBRE04MjExX0lOVChMaW5rT24pOyovCi0JLypBRE04MjExX0lOVChMaW5rT2ZmKTsqLwotCiAJQURNODIxMV9JTlQoUENGKTsKIAlBRE04MjExX0lOVChCQ05UQyk7CiAJQURNODIxMV9JTlQoR1BJTlQpOwpAQCAtNDc3LDcgKzQ5Nyw2IEBACiAJQURNODIxMV9JTlQoU1FMKTsKIAlBRE04MjExX0lOVChXRVBURCk7CiAJQURNODIxMV9JTlQoQVRJTUUpOwotCS8qQURNODIxMV9JTlQoVEJUVCk7Ki8KIAlBRE04MjExX0lOVChURUlTKTsKIAlBRE04MjExX0lOVChGQkUpOwogCUFETTgyMTFfSU5UKFJFSVMpOwpAQCAtNDg1LDkgKzUwNCw2IEBACiAJQURNODIxMV9JTlQoUlBTKTsKIAlBRE04MjExX0lOVChSRFUpOwogCUFETTgyMTFfSU5UKFRVRik7Ci0JLypBRE04MjExX0lOVChUUlQpOyovCi0JLypBRE04MjExX0lOVChUTFQpOyovCi0JLypBRE04MjExX0lOVChURFUpOyovCiAJQURNODIxMV9JTlQoVFBTKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTEwNTQsNyArMTA3MCw3IEBACiAJaWYgKHByaXYtPnBkZXYtPnJldmlzaW9uICE9IEFETTgyMTFfUkVWX0JBKSB7CiAJCXJhdGVfYnVmWzBdID0gQVJSQVlfU0laRShhZG04MjExX3JhdGVzKTsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRtODIxMV9yYXRlcyk7IGkrKykKLQkJCXJhdGVfYnVmW2kgKyAxXSA9IChhZG04MjExX3JhdGVzW2ldLnJhdGUgLyA1KSB8IDB4ODA7CisJCQlyYXRlX2J1ZltpICsgMV0gPSAoYWRtODIxMV9yYXRlc1tpXS5iaXRyYXRlIC8gNSkgfCAweDgwOwogCX0gZWxzZSB7CiAJCS8qIHdvcmthcm91bmQgZm9yIHJldiBCQSBzcGVjaWZpYyBidWcgKi8KIAkJcmF0ZV9idWZbMF0gPSAweDA0OwpAQCAtMTA4Niw3ICsxMTAyLDcgQEAKIAl1MzIgcmVnOwogCXU4IGNsaW5lOwogCi0JcmVnID0gbGUzMl90b19jcHUoQURNODIxMV9DU1JfUkVBRChQQVIpKTsKKwlyZWcgPSBBRE04MjExX0NTUl9SRUFEKFBBUik7CiAJcmVnIHw9IEFETTgyMTFfUEFSX01STEUgfCBBRE04MjExX1BBUl9NUk1FOwogCXJlZyAmPSB+KEFETTgyMTFfUEFSX0JBUiB8IEFETTgyMTFfUEFSX0NBTCk7CiAKQEAgLTEzMDMsOSArMTMxOSwxMCBAQAogc3RhdGljIGludCBhZG04MjExX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKIHsKIAlzdHJ1Y3QgYWRtODIxMV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBjaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCWlmIChjb25mLT5jaGFubmVsICE9IHByaXYtPmNoYW5uZWwpIHsKLQkJcHJpdi0+Y2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJaWYgKGNoYW5uZWwgIT0gcHJpdi0+Y2hhbm5lbCkgeworCQlwcml2LT5jaGFubmVsID0gY2hhbm5lbDsKIAkJYWRtODIxMV9yZl9zZXRfY2hhbm5lbChkZXYsIHByaXYtPmNoYW5uZWwpOwogCX0KIApAQCAtMTY3OCwxMyArMTY5NSw5IEBACiAJaW50IHBsY3AsIGR1ciwgbGVuLCBwbGNwX3NpZ25hbCwgc2hvcnRfcHJlYW1ibGU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAotCWlmIChjb250cm9sLT50eF9yYXRlIDwgMCkgewotCQlzaG9ydF9wcmVhbWJsZSA9IDE7Ci0JCXBsY3Bfc2lnbmFsID0gLWNvbnRyb2wtPnR4X3JhdGU7Ci0JfSBlbHNlIHsKLQkJc2hvcnRfcHJlYW1ibGUgPSAwOwotCQlwbGNwX3NpZ25hbCA9IGNvbnRyb2wtPnR4X3JhdGU7Ci0JfQorCXNob3J0X3ByZWFtYmxlID0gISEoY29udHJvbC0+dHhfcmF0ZS0+ZmxhZ3MgJgorCQkJCQlJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEUpOworCXBsY3Bfc2lnbmFsID0gY29udHJvbC0+dHhfcmF0ZS0+Yml0cmF0ZTsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkgJiB+SUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwpAQCAtMTg4MCwxOCArMTg5MywxMSBAQAogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgcGVybV9hZGRyKTsKIAogCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFkbTgyMTFfdHhfaGRyKTsKLQlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX0RFRkFVTFRfUkVHX0RPTUFJTl9DT05GSUdVUkVEOwotCS8qIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgaW4gcHJvbWlzYyBtb2RlICovCisJLyogZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgaW4gcHJvbWlzYyBtb2RlICovCiAKIAlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwogCWRldi0+bWF4X3Jzc2kgPSAxMDA7CS8qIEZJWE1FOiBmaW5kIGJldHRlciB2YWx1ZSAqLwogCi0JcHJpdi0+bW9kZXNbMF0ubW9kZSA9IE1PREVfSUVFRTgwMjExQjsKLQkvKiBjaGFubmVsIGluZm8gZmlsbGVkIGluIGJ5IGFkbTgyMTFfcmVhZF9lZXByb20gKi8KLQltZW1jcHkocHJpdi0+cmF0ZXMsIGFkbTgyMTFfcmF0ZXMsIHNpemVvZihhZG04MjExX3JhdGVzKSk7Ci0JcHJpdi0+bW9kZXNbMF0ubnVtX3JhdGVzID0gQVJSQVlfU0laRShhZG04MjExX3JhdGVzKTsKLQlwcml2LT5tb2Rlc1swXS5yYXRlcyA9IHByaXYtPnJhdGVzOwotCiAJZGV2LT5xdWV1ZXMgPSAxOyAvKiBBRE04MjExQyBzdXBwb3J0cyBtb3JlLCBtYXliZSBBRE04MjExQiB0b28gKi8KIAogCXByaXYtPnJldHJ5X2xpbWl0ID0gMzsKQEAgLTE5MTcsMTQgKzE5MjMsOSBAQAogCQlnb3RvIGVycl9mcmVlX2Rlc2M7CiAJfQogCi0JcHJpdi0+Y2hhbm5lbCA9IHByaXYtPm1vZGVzWzBdLmNoYW5uZWxzWzBdLmNoYW47CisJcHJpdi0+Y2hhbm5lbCA9IDE7CiAKLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKGRldiwgJnByaXYtPm1vZGVzWzBdKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKGFkbTgyMTEpOiBDYW4ndCByZWdpc3RlciBod21vZGVcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCWdvdG8gZXJyX2ZyZWVfZGVzYzsKLQl9CisJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKIAogCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaAppbmRleCBlZjMyNmZlLi44ZDdjNTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5oCkBAIC01MzQsNjEgKzUzNCw2IEBACiAJdTgJY2lzX2RhdGFbMF07CQkvKiAweDgwLCAzODQgYnl0ZXMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGFkbTgyMTFfcmF0ZXNbXSA9IHsKLQl7IC5yYXRlID0gMTAsCi0JICAudmFsID0gMTAsCi0JICAudmFsMiA9IC0xMCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0sCi0JeyAucmF0ZSA9IDIwLAotCSAgLnZhbCA9IDIwLAotCSAgLnZhbDIgPSAtMjAsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0tfMiB9LAotCXsgLnJhdGUgPSA1NSwKLQkgIC52YWwgPSA1NSwKLQkgIC52YWwyID0gLTU1LAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSwKLQl7IC5yYXRlID0gMTEwLAotCSAgLnZhbCA9IDExMCwKLQkgIC52YWwyID0gLTExMCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0KLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbl9yYW5nZSB7Ci0JdTggbWluOwotCXU4IG1heDsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYWRtODIxMV9jaGFubmVsc1tdID0gewotCXsgLmNoYW4gPSAxLAotCSAgLmZyZXEgPSAyNDEyfSwKLQl7IC5jaGFuID0gMiwKLQkgIC5mcmVxID0gMjQxN30sCi0JeyAuY2hhbiA9IDMsCi0JICAuZnJlcSA9IDI0MjJ9LAotCXsgLmNoYW4gPSA0LAotCSAgLmZyZXEgPSAyNDI3fSwKLQl7IC5jaGFuID0gNSwKLQkgIC5mcmVxID0gMjQzMn0sCi0JeyAuY2hhbiA9IDYsCi0JICAuZnJlcSA9IDI0Mzd9LAotCXsgLmNoYW4gPSA3LAotCSAgLmZyZXEgPSAyNDQyfSwKLQl7IC5jaGFuID0gOCwKLQkgIC5mcmVxID0gMjQ0N30sCi0JeyAuY2hhbiA9IDksCi0JICAuZnJlcSA9IDI0NTJ9LAotCXsgLmNoYW4gPSAxMCwKLQkgIC5mcmVxID0gMjQ1N30sCi0JeyAuY2hhbiA9IDExLAotCSAgLmZyZXEgPSAyNDYyfSwKLQl7IC5jaGFuID0gMTIsCi0JICAuZnJlcSA9IDI0Njd9LAotCXsgLmNoYW4gPSAxMywKLQkgIC5mcmVxID0gMjQ3Mn0sCi0JeyAuY2hhbiA9IDE0LAotCSAgLmZyZXEgPSAyNDg0fSwKLX07Ci0KIHN0cnVjdCBhZG04MjExX3ByaXYgewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTYwMyw5ICs1NDgsOCBAQAogCXVuc2lnbmVkIGludCBjdXJfdHgsIGRpcnR5X3R4LCBjdXJfcng7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyBzdGF0czsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgbW9kZXNbMV07Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzW0FSUkFZX1NJWkUoYWRtODIxMV9jaGFubmVscyldOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1tBUlJBWV9TSVpFKGFkbTgyMTFfcmF0ZXMpXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKIAlpbnQgbW9kZTsKIAogCWludCBjaGFubmVsOwpAQCAtNjQzLDYgKzU4NywxMSBAQAogCX0gdHJhbnNjZWl2ZXJfdHlwZTsKIH07CiAKK3N0cnVjdCBpZWVlODAyMTFfY2hhbl9yYW5nZSB7CisJdTggbWluOworCXU4IG1heDsKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5fcmFuZ2UgY3Jhbmdlc1tdID0gewogCXsxLCAgMTF9LAkvKiBGQ0MgKi8KIAl7MSwgIDExfSwJLyogSUMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLXByb2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLXByb2MuYwppbmRleCBjNmU3MGRiLi4yYWIxZDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1wcm9jLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tcHJvYy5jCkBAIC0xMjAyLDEzICsxMjAyLDYgQEAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKICNlbmRpZgotI2Vsc2UKLQotc3RhdGljIGN0bF90YWJsZSBhcmxhbl90YWJsZVtNQVhfQVJMQU5TICsgMV0gPQotewotCXsgLmN0bF9uYW1lID0gMCB9Ci19OwotI2VuZGlmCiAKIAogLy8gc3RhdGljIGludCBtbXR1ID0gMTIzNDsKQEAgLTEyMzMsNyArMTIyNiw2IEBACiAvL307CiAKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmFybGFuX2RldmljZV9zeXNjdGxfaGVhZGVyOwogCiBpbnQgX19pbml0IGluaXRfYXJsYW5fcHJvYyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmMmFlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL0tjb25maWcKQEAgLTAsMCArMSwzNyBAQAorY29uZmlnIEFUSDVLCisJdHJpc3RhdGUgIkF0aGVyb3MgNXh4eCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbgorCSAgQXRoZXJvcyA1eHh4IGNoaXBzZXQuCisKKwkgIEN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGNoaXAgdmVyc2lvbnMgYXJlIHN1cHBvcnRlZDoKKworCSAgTUFDOiBBUjUyMTEgQVI1MjEyCisJICBQSFk6IFJGNTExMS8yMTExIFJGNTExMi8yMTEyIFJGNTQxMy8yNDEzCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIGtlcm5lbCdzIG1hYzgwMjExIHN1YnN5c3RlbS4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDVrLiBTYXkgTSBpZgorCSAgdW5zdXJlLgorCitjb25maWcgQVRINUtfREVCVUcKKwlib29sICJBdGhlcm9zIDV4eHggZGVidWdnaW5nIgorCWRlcGVuZHMgb24gQVRINUsKKwktLS1oZWxwLS0tCisJICBBdGhlcm9zIDV4eHggZGVidWdnaW5nIG1lc3NhZ2VzLgorCisJICBTYXkgWSwgaWYgYW5kIHlvdSB3aWxsIGdldCBkZWJ1ZyBvcHRpb25zIGZvciBhdGg1ay4KKwkgIFRvIHVzZSB0aGlzLCB5b3UgbmVlZCB0byBtb3VudCBkZWJ1Z2ZzOgorCisJICBta2RpciAvZGVidWcvCisJICBtb3VudCAtdCBkZWJ1Z2ZzIGRlYnVnIC9kZWJ1Zy8KKworCSAgWW91IHdpbGwgZ2V0IGFjY2VzcyB0byBmaWxlcyB1bmRlcjoKKwkgIC9kZWJ1Zy9hdGg1ay9waHkwLworCisJICBUbyBlbmFibGUgZGVidWcsIHBhc3MgdGhlIGRlYnVnIGxldmVsIHRvIHRoZSBkZWJ1ZyBtb2R1bGUKKwkgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGU6CisKKwkgIG1vZHByb2JlIGF0aDVrIGRlYnVnPTB4MDAwMDA0MDAKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZQppbmRleCAzMjE2NDFmLi41NjRlY2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZQpAQCAtMSwyICsxLDYgQEAKLWF0aDVrLW9ianMJCT0gYmFzZS5vIGh3Lm8gcmVnZG9tLm8gaW5pdHZhbHMubyBwaHkubyBkZWJ1Zy5vCi1vYmotJChDT05GSUdfQVRINUspCSs9IGF0aDVrLm8KK2F0aDVrLXkJCQkJKz0gYmFzZS5vCithdGg1ay15CQkJCSs9IGh3Lm8KK2F0aDVrLXkJCQkJKz0gaW5pdHZhbHMubworYXRoNWsteQkJCQkrPSBwaHkubworYXRoNWstJChDT05GSUdfQVRINUtfREVCVUcpCSs9IGRlYnVnLm8KK29iai0kKENPTkZJR19BVEg1SykJCSs9IGF0aDVrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdGg1ay5oCmluZGV4IGM3OTA2NmIuLmJhMzVjMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWdkb20uaCIKIAogLyogUENJIElEcyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjEwIAkJMHgwMDA3IC8qIEFSNTIxMCAqLwpAQCAtMTQxLDcgKzE0MCw5IEBACiAJQVI1S19SRjUxMTAJPSAwLAogCUFSNUtfUkY1MTExCT0gMSwKIAlBUjVLX1JGNTExMgk9IDIsCi0JQVI1S19SRjU0MTMJPSAzLAorCUFSNUtfUkYyNDEzCT0gMywKKwlBUjVLX1JGNTQxMwk9IDQsCisJQVI1S19SRjI0MjUJPSA1LAogfTsKIAogLyoKQEAgLTE2OSwxMiArMTcwLDE1IEBACiAjZGVmaW5lIEFSNUtfU1JFVl9WRVJfQVI1MjEyCTB4NTAKICNkZWZpbmUgQVI1S19TUkVWX1ZFUl9BUjUyMTMJMHg1NQogI2RlZmluZSBBUjVLX1NSRVZfVkVSX0FSNTIxM0EJMHg1OQotI2RlZmluZSBBUjVLX1NSRVZfVkVSX0FSMjQyNAkweGEwCi0jZGVmaW5lIEFSNUtfU1JFVl9WRVJfQVI1NDI0CTB4YTMKKyNkZWZpbmUgQVI1S19TUkVWX1ZFUl9BUjI0MTMJMHg3OAorI2RlZmluZSBBUjVLX1NSRVZfVkVSX0FSMjQxNAkweDc5CisjZGVmaW5lIEFSNUtfU1JFVl9WRVJfQVIyNDI0CTB4YTAgLyogUENJLUUgKi8KKyNkZWZpbmUgQVI1S19TUkVWX1ZFUl9BUjU0MjQJMHhhMyAvKiBQQ0ktRSAqLwogI2RlZmluZSBBUjVLX1NSRVZfVkVSX0FSNTQxMwkweGE0CiAjZGVmaW5lIEFSNUtfU1JFVl9WRVJfQVI1NDE0CTB4YTUKLSNkZWZpbmUgQVI1S19TUkVWX1ZFUl9BUjU0MTYJMHhjMAkvKiA/ICovCi0jZGVmaW5lIEFSNUtfU1JFVl9WRVJfQVI1NDE4CTB4Y2EKKyNkZWZpbmUgQVI1S19TUkVWX1ZFUl9BUjU0MTYJMHhjMCAvKiBQQ0ktRSAqLworI2RlZmluZSBBUjVLX1NSRVZfVkVSX0FSNTQxOAkweGNhIC8qIFBDSS1FICovCisjZGVmaW5lIEFSNUtfU1JFVl9WRVJfQVIyNDI1CTB4ZTIgLyogUENJLUUgKi8KIAogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzUxMTAJMHgwMAogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzUxMTEJMHgxMApAQCAtMTg0LDggKzE4OCw5IEBACiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfNTExMkEJMHgzNQogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzIxMTIJMHg0MAogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzIxMTJBCTB4NDUKKyNkZWZpbmUgQVI1S19TUkVWX1JBRF9TQzAJMHg1NgkvKiBGb3VuZCBvbiAyNDEzLzI0MTQgKi8KICNkZWZpbmUgQVI1S19TUkVWX1JBRF9TQzEJMHg2MwkvKiBGb3VuZCBvbiA1NDEzLzU0MTQgKi8KLSNkZWZpbmUgQVI1S19TUkVWX1JBRF9TQzIJMHhhMgkvKiBGb3VuZCBvbiAyNDI0LzU0MjQgKi8KKyNkZWZpbmUgQVI1S19TUkVWX1JBRF9TQzIJMHhhMgkvKiBGb3VuZCBvbiAyNDI0LTUvNTQyNCAqLwogI2RlZmluZSBBUjVLX1NSRVZfUkFEXzUxMzMJMHhjMAkvKiBNSU1PIGZvdW5kIG9uIDU0MTggKi8KIAogLyogSUVFRSBkZWZzICovCkBAIC0yNTEsMjYgKzI1NiwzMSBAQAogICovCiAjZGVmaW5lIE1PRFVMQVRJT05fVFVSQk8JMHgwMDAwMDA4MAogCi1lbnVtIGF0aDVrX3ZlbmRvcl9tb2RlIHsKLQlNT0RFX0FUSEVST1NfVFVSQk8gPSBOVU1fSUVFRTgwMjExX01PREVTKzEsCi0JTU9ERV9BVEhFUk9TX1RVUkJPRworZW51bSBhdGg1a19kcml2ZXJfbW9kZSB7CisJQVI1S19NT0RFXzExQQkJPQkwLAorCUFSNUtfTU9ERV8xMUFfVFVSQk8JPQkxLAorCUFSNUtfTU9ERV8xMUIJCT0JMiwKKwlBUjVLX01PREVfMTFHCQk9CTMsCisJQVI1S19NT0RFXzExR19UVVJCTwk9CTQsCisJQVI1S19NT0RFX1hSCQk9CTAsCisJQVI1S19NT0RFX01BWAkJPQk1CiB9OwogCi0vKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIG1hYzgwMjExIGVudW0gaWVlZTgwMjExX3BoeW1vZGUgbW9kZXMgYnkgdGhpcyBkcml2ZXIgKi8KLSNkZWZpbmUgTlVNX0RSSVZFUl9NT0RFUwkzCi0KIC8qIGFkZGluZyB0aGlzIGZsYWcgdG8gcmF0ZV9jb2RlIGVuYWJsZXMgc2hvcnQgcHJlYW1ibGUsIHNlZSBhcjUyMTJfcmVnLmggKi8KICNkZWZpbmUgQVI1S19TRVRfU0hPUlRfUFJFQU1CTEUgMHgwNAogCi0jZGVmaW5lIEhBU19TSFBSRUFNQkxFKF9peCkgKHJ0LT5yYXRlc1tfaXhdLm1vZHVsYXRpb24gPT0gSUVFRTgwMjExX1JBVEVfQ0NLXzIpCi0jZGVmaW5lIFNIUFJFQU1CTEVfRkxBRyhfaXgpIChIQVNfU0hQUkVBTUJMRShfaXgpID8gQVI1S19TRVRfU0hPUlRfUFJFQU1CTEUgOiAwKQorI2RlZmluZSBIQVNfU0hQUkVBTUJMRShfaXgpIFwKKwkocnQtPnJhdGVzW19peF0ubW9kdWxhdGlvbiA9PSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSkKKyNkZWZpbmUgU0hQUkVBTUJMRV9GTEFHKF9peCkgXAorCShIQVNfU0hQUkVBTUJMRShfaXgpID8gQVI1S19TRVRfU0hPUlRfUFJFQU1CTEUgOiAwKQorCiAKIC8qKioqKioqKioqKioqKioqXAogICBUWCBERUZJTklUSU9OUwogXCoqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBUeCBEZXNjcmlwdG9yCisgKiBUWCBTdGF0dXMKICAqLwogc3RydWN0IGF0aDVrX3R4X3N0YXR1cyB7CiAJdTE2CXRzX3NlcW51bTsKQEAgLTQxOCw3ICs0MjgsNyBAQAogXCoqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBSeCBEZXNjcmlwdG9yCisgKiBSWCBTdGF0dXMKICAqLwogc3RydWN0IGF0aDVrX3J4X3N0YXR1cyB7CiAJdTE2CXJzX2RhdGFsZW47CkBAIC00NDAsMTYgKzQ1MCw2IEBACiAjZGVmaW5lIEFSNUtfUlhLRVlJWF9JTlZBTElECSgodTgpIC0gMSkKICNkZWZpbmUgQVI1S19UWEtFWUlYX0lOVkFMSUQJKCh1MzIpIC0gMSkKIAotc3RydWN0IGF0aDVrX21pYl9zdGF0cyB7Ci0JdTMyCWFja3Jjdl9iYWQ7Ci0JdTMyCXJ0c19iYWQ7Ci0JdTMyCXJ0c19nb29kOwotCXUzMglmY3NfYmFkOwotCXUzMgliZWFjb25zOwotfTsKLQotCi0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqXAogIEJFQUNPTiBUSU1FUlMgREVGSU5JVElPTlMKQEAgLTQ5MiwyOSArNDkyLDIzIEBACiAjZGVmaW5lIFRTRl9UT19UVShfdHNmKSAodTMyKSgoX3RzZikgPj4gMTApCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKipcCiAgIENPTU1PTiBERUZJTklUSU9OUwogXCoqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQXRoZXJvcyBkZXNjcmlwdG9yCisgKiBBdGhlcm9zIGhhcmR3YXJlIGRlc2NyaXB0b3IKKyAqIFRoaXMgaXMgcmVhZCBhbmQgd3JpdHRlbiB0byBieSB0aGUgaGFyZHdhcmUKICAqLwogc3RydWN0IGF0aDVrX2Rlc2MgewotCXUzMglkc19saW5rOwotCXUzMglkc19kYXRhOwotCXUzMglkc19jdGwwOwotCXUzMglkc19jdGwxOwotCXUzMglkc19od1s0XTsKKwl1MzIJZHNfbGluazsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbmV4dCBkZXNjcmlwdG9yICovCisJdTMyCWRzX2RhdGE7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZGF0YSBidWZmZXIgKHNrYikgKi8KIAogCXVuaW9uIHsKLQkJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyByeDsKLQkJc3RydWN0IGF0aDVrX3R4X3N0YXR1cyB0eDsKLQl9IGRzX3VzOwotCi0jZGVmaW5lIGRzX3J4c3RhdCBkc191cy5yeAotI2RlZmluZSBkc190eHN0YXQgZHNfdXMudHgKLQorCQlzdHJ1Y3QgYXRoNWtfaHdfNTIxMF90eF9kZXNjCWRzX3R4NTIxMDsKKwkJc3RydWN0IGF0aDVrX2h3XzUyMTJfdHhfZGVzYwlkc190eDUyMTI7CisJCXN0cnVjdCBhdGg1a19od19hbGxfcnhfZGVzYwlkc19yeDsKKwl9IHVkOwogfSBfX3BhY2tlZDsKIAogI2RlZmluZSBBUjVLX1JYREVTQ19JTlRSRVEJMHgwMDIwCkBAIC01NjAsOCArNTU0LDggQEAKICAqIFVzZWQgaW50ZXJuYWx5IGluIE9wZW5IQUwgKGFyNTIxMS5jL2FyNTIxMi5jCiAgKiBmb3IgcmVzZXRfdHhfcXVldWUpLiBBbHNvIHNlZSBzdHJ1Y3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsLgogICovCi0jZGVmaW5lIElTX0NIQU5fWFIoX2MpCSgoX2MudmFsICYgQ0hBTk5FTF9YUikgIT0gMCkKLSNkZWZpbmUgSVNfQ0hBTl9CKF9jKQkoKF9jLnZhbCAmIENIQU5ORUxfQikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9YUihfYykJKChfYy5od192YWx1ZSAmIENIQU5ORUxfWFIpICE9IDApCisjZGVmaW5lIElTX0NIQU5fQihfYykJKChfYy5od192YWx1ZSAmIENIQU5ORUxfQikgIT0gMCkKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHdpbGwgYmUgdXNlZCB0byBtYXAgMkdIeiBjaGFubmVscyB0bwpAQCAtNTg0LDcgKzU3OCw3IEBACiAKIC8qKgogICogc3RydWN0IGF0aDVrX3JhdGUgLSByYXRlIHN0cnVjdHVyZQotICogQHZhbGlkOiBpcyB0aGlzIGEgdmFsaWQgcmF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9kZQorICogQHZhbGlkOiBpcyB0aGlzIGEgdmFsaWQgcmF0ZSBmb3IgcmF0ZSBjb250cm9sIChyZW1vdmUpCiAgKiBAbW9kdWxhdGlvbjogcmVzcGVjdGl2ZSBtYWM4MDIxMSBtb2R1bGF0aW9uCiAgKiBAcmF0ZV9rYnBzOiByYXRlIGluIGtiaXQvcwogICogQHJhdGVfY29kZTogaGFyZHdhcmUgcmF0ZSB2YWx1ZSwgdXNlZCBpbiAmc3RydWN0IGF0aDVrX2Rlc2MsIG9uIFJYIG9uCkBAIC02NDMsNDcgKzYzNyw0OCBAQAogCiAvKgogICogUmF0ZSB0YWJsZXMuLi4KKyAqIFRPRE86IENMRUFOIFRISVMgISEhCiAgKi8KICNkZWZpbmUgQVI1S19SQVRFU18xMUEgeyA4LCB7CQkJCQlcCiAJMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDYsIDQsIDIsIDAsCVwKIAk3LCA1LCAzLCAxLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwJXAogCTI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1IH0sIHsJCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDYwMDAsIDExLCAxNDAsIDAgfSwJCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDkwMDAsIDE1LCAxOCwgMCB9LAkJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgMTIwMDAsIDEwLCAxNTIsIDIgfSwJCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDE4MDAwLCAxNCwgMzYsIDIgfSwJCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDI0MDAwLCA5LCAxNzYsIDQgfSwJCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDM2MDAwLCAxMywgNzIsIDQgfSwJCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDQ4MDAwLCA4LCA5NiwgNCB9LAkJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgNTQwMDAsIDEyLCAxMDgsIDQgfSB9CQlcCisJeyAxLCAwLCA2MDAwLCAxMSwgMTQwLCAwIH0sCQlcCisJeyAxLCAwLCA5MDAwLCAxNSwgMTgsIDAgfSwJCVwKKwl7IDEsIDAsIDEyMDAwLCAxMCwgMTUyLCAyIH0sCQlcCisJeyAxLCAwLCAxODAwMCwgMTQsIDM2LCAyIH0sCQlcCisJeyAxLCAwLCAyNDAwMCwgOSwgMTc2LCA0IH0sCQlcCisJeyAxLCAwLCAzNjAwMCwgMTMsIDcyLCA0IH0sCQlcCisJeyAxLCAwLCA0ODAwMCwgOCwgOTYsIDQgfSwJCVwKKwl7IDEsIDAsIDU0MDAwLCAxMiwgMTA4LCA0IH0gfQkJXAogfQogCiAjZGVmaW5lIEFSNUtfUkFURVNfMTFCIHsgNCwgewkJCQkJCVwKIAkyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAlcCiAJMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwJXAogCTMsIDIsIDEsIDAsIDI1NSwgMjU1LCAyNTUsIDI1NSB9LCB7CQkJCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX0NDSywgMTAwMCwgMjcsIDEzMCwgMCB9LAlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9DQ0tfMiwgMjAwMCwgMjYsIDEzMiwgMSB9LAlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9DQ0tfMiwgNTUwMCwgMjUsIDEzOSwgMSB9LAlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9DQ0tfMiwgMTEwMDAsIDI0LCAxNTAsIDEgfSB9CVwKKwl7IDEsIDAsIDEwMDAsIDI3LCAxMzAsIDAgfSwJXAorCXsgMSwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUsIDIwMDAsIDI2LCAxMzIsIDEgfSwJXAorCXsgMSwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUsIDU1MDAsIDI1LCAxMzksIDEgfSwJXAorCXsgMSwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUsIDExMDAwLCAyNCwgMTUwLCAxIH0gfQlcCiB9CiAKICNkZWZpbmUgQVI1S19SQVRFU18xMUcgeyAxMiwgewkJCQkJXAogCTI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAxMCwgOCwgNiwgNCwJXAogCTExLCA5LCA3LCA1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwJXAogCTMsIDIsIDEsIDAsIDI1NSwgMjU1LCAyNTUsIDI1NSB9LCB7CQkJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfQ0NLLCAxMDAwLCAyNywgMiwgMCB9LAkJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfQ0NLXzIsIDIwMDAsIDI2LCA0LCAxIH0sCQlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9DQ0tfMiwgNTUwMCwgMjUsIDExLCAxIH0sCQlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9DQ0tfMiwgMTEwMDAsIDI0LCAyMiwgMSB9LAlcCi0JeyAwLCBJRUVFODAyMTFfUkFURV9PRkRNLCA2MDAwLCAxMSwgMTIsIDQgfSwJXAotCXsgMCwgSUVFRTgwMjExX1JBVEVfT0ZETSwgOTAwMCwgMTUsIDE4LCA0IH0sCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDEyMDAwLCAxMCwgMjQsIDYgfSwJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgMTgwMDAsIDE0LCAzNiwgNiB9LAlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9PRkRNLCAyNDAwMCwgOSwgNDgsIDggfSwJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgMzYwMDAsIDEzLCA3MiwgOCB9LAlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9PRkRNLCA0ODAwMCwgOCwgOTYsIDggfSwJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgNTQwMDAsIDEyLCAxMDgsIDggfSB9CVwKKwl7IDEsIDAsIDEwMDAsIDI3LCAyLCAwIH0sCQlcCisJeyAxLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSwgMjAwMCwgMjYsIDQsIDEgfSwJCVwKKwl7IDEsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFLCA1NTAwLCAyNSwgMTEsIDEgfSwJCVwKKwl7IDEsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFLCAxMTAwMCwgMjQsIDIyLCAxIH0sCVwKKwl7IDAsIDAsIDYwMDAsIDExLCAxMiwgNCB9LAlcCisJeyAwLCAwLCA5MDAwLCAxNSwgMTgsIDQgfSwJXAorCXsgMSwgMCwgMTIwMDAsIDEwLCAyNCwgNiB9LAlcCisJeyAxLCAwLCAxODAwMCwgMTQsIDM2LCA2IH0sCVwKKwl7IDEsIDAsIDI0MDAwLCA5LCA0OCwgOCB9LAlcCisJeyAxLCAwLCAzNjAwMCwgMTMsIDcyLCA4IH0sCVwKKwl7IDEsIDAsIDQ4MDAwLCA4LCA5NiwgOCB9LAlcCisJeyAxLCAwLCA1NDAwMCwgMTIsIDEwOCwgOCB9IH0JXAogfQogCiAjZGVmaW5lIEFSNUtfUkFURVNfVFVSQk8geyA4LCB7CQkJCQlcCkBAIC03MDgsMTQgKzcwMywxNCBAQAogCXsgMSwgTU9EVUxBVElPTl9YUiwgMTAwMCwgMiwgMTM5LCAxIH0sCQlcCiAJeyAxLCBNT0RVTEFUSU9OX1hSLCAyMDAwLCA2LCAxNTAsIDIgfSwJCVwKIAl7IDEsIE1PRFVMQVRJT05fWFIsIDMwMDAsIDEsIDE1MCwgMyB9LAkJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgNjAwMCwgMTEsIDE0MCwgNCB9LAlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9PRkRNLCA5MDAwLCAxNSwgMTgsIDQgfSwJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgMTIwMDAsIDEwLCAxNTIsIDYgfSwJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgMTgwMDAsIDE0LCAzNiwgNiB9LAlcCi0JeyAxLCBJRUVFODAyMTFfUkFURV9PRkRNLCAyNDAwMCwgOSwgMTc2LCA4IH0sCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDM2MDAwLCAxMywgNzIsIDggfSwJXAotCXsgMSwgSUVFRTgwMjExX1JBVEVfT0ZETSwgNDgwMDAsIDgsIDk2LCA4IH0sCVwKLQl7IDEsIElFRUU4MDIxMV9SQVRFX09GRE0sIDU0MDAwLCAxMiwgMTA4LCA4IH0gfQlcCisJeyAxLCAwLCA2MDAwLCAxMSwgMTQwLCA0IH0sCVwKKwl7IDEsIDAsIDkwMDAsIDE1LCAxOCwgNCB9LAlcCisJeyAxLCAwLCAxMjAwMCwgMTAsIDE1MiwgNiB9LAlcCisJeyAxLCAwLCAxODAwMCwgMTQsIDM2LCA2IH0sCVwKKwl7IDEsIDAsIDI0MDAwLCA5LCAxNzYsIDggfSwJXAorCXsgMSwgMCwgMzYwMDAsIDEzLCA3MiwgOCB9LAlcCisJeyAxLCAwLCA0ODAwMCwgOCwgOTYsIDggfSwJXAorCXsgMSwgMCwgNTQwMDAsIDEyLCAxMDgsIDggfSB9CVwKIH0KIAogLyoKQEAgLTg5MCwxMiArODg1LDE0IEBACiAJQVI1S19DQVBfUkZTSUxFTlQJCT0gMjAsCS8qIFN1cHBvcnRzIFJGc2lsZW50ICovCiB9OwogCisKKy8qIFhYWDogd2UgKm1heSogbW92ZSBjYXBfcmFuZ2Ugc3R1ZmYgdG8gc3RydWN0IHdpcGh5ICovCiBzdHJ1Y3QgYXRoNWtfY2FwYWJpbGl0aWVzIHsKIAkvKgogCSAqIFN1cHBvcnRlZCBQSFkgbW9kZXMKIAkgKiAoaWUuIENIQU5ORUxfQSwgQ0hBTk5FTF9CLCAuLi4pCiAJICovCi0JREVDTEFSRV9CSVRNQVAoY2FwX21vZGUsIE5VTV9EUklWRVJfTU9ERVMpOworCURFQ0xBUkVfQklUTUFQKGNhcF9tb2RlLCBBUjVLX01PREVfTUFYKTsKIAogCS8qCiAJICogRnJlcXVlbmN5IHJhbmdlICh3aXRob3V0IHJlZ3VsYXRpb24gcmVzdHJpY3Rpb25zKQpAQCAtOTA4LDE0ICs5MDUsNiBAQAogCX0gY2FwX3JhbmdlOwogCiAJLyoKLQkgKiBBY3RpdmUgcmVndWxhdGlvbiBkb21haW4gc2V0dGluZ3MKLQkgKi8KLQlzdHJ1Y3QgewotCQllbnVtIGF0aDVrX3JlZ2RvbSByZWdfY3VycmVudDsKLQkJZW51bSBhdGg1a19yZWdkb20gcmVnX2h3OwotCX0gY2FwX3JlZ2RvbWFpbjsKLQotCS8qCiAJICogVmFsdWVzIHN0b3JlZCBpbiB0aGUgRUVQUk9NIChzb21lIG9mIHRoZW0uLi4pCiAJICovCiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvCWNhcF9lZXByb207CkBAIC05NjMsNiArOTUyLDcgQEAKIAl1MTYJCQlhaF9waHlfcmV2aXNpb247CiAJdTE2CQkJYWhfcmFkaW9fNWdoel9yZXZpc2lvbjsKIAl1MTYJCQlhaF9yYWRpb18yZ2h6X3JldmlzaW9uOworCXUzMgkJCWFoX3BoeV9zcGVuZGluZzsKIAogCWVudW0gYXRoNWtfdmVyc2lvbglhaF92ZXJzaW9uOwogCWVudW0gYXRoNWtfcmFkaW8JYWhfcmFkaW87CkBAIC0xMDM1LDExICsxMDI1LDEzIEBACiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBlbnVtIGF0aDVrX3BrdF90eXBlLCB1bnNpZ25lZCBpbnQsCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKIAkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci0JYm9vbCAoKmFoX3NldHVwX3h0eF9kZXNjKShzdHJ1Y3QgYXRoNWtfaHcgKiwgc3RydWN0IGF0aDVrX2Rlc2MgKiwKKwlpbnQgKCphaF9zZXR1cF94dHhfZGVzYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICosCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKIAkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotCWludCAoKmFoX3Byb2NfdHhfZGVzYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICopOwotCWludCAoKmFoX3Byb2NfcnhfZGVzYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICopOworCWludCAoKmFoX3Byb2NfdHhfZGVzYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICosCisJCXN0cnVjdCBhdGg1a190eF9zdGF0dXMgKik7CisJaW50ICgqYWhfcHJvY19yeF9kZXNjKShzdHJ1Y3QgYXRoNWtfaHcgKiwgc3RydWN0IGF0aDVrX2Rlc2MgKiwKKwkJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqKTsKIH07CiAKIC8qCkBAIC0xMDcwLDYgKzEwNjIsNyBAQAogZXh0ZXJuIGJvb2wgYXRoNWtfaHdfaXNfaW50cl9wZW5kaW5nKHN0cnVjdCBhdGg1a19odyAqYWgpOwogZXh0ZXJuIGludCBhdGg1a19od19nZXRfaXNyKHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gYXRoNWtfaW50ICppbnRlcnJ1cHRfbWFzayk7CiBleHRlcm4gZW51bSBhdGg1a19pbnQgYXRoNWtfaHdfc2V0X2ludHIoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBhdGg1a19pbnQgbmV3X21hc2spOworZXh0ZXJuIHZvaWQgYXRoNWtfaHdfdXBkYXRlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwogLyogRUVQUk9NIGFjY2VzcyBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X3JlZ2RvbWFpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgcmVnZG9tYWluKTsKIC8qIFByb3RvY29sIENvbnRyb2wgVW5pdCBGdW5jdGlvbnMgKi8KQEAgLTEwOTgsNyArMTA5MSw2IEBACiBleHRlcm4gdm9pZCBhdGg1a19od19yZXNldF9iZWFjb24oc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X2JlYWNvbnFfZmluaXNoKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyKTsKICNlbmRpZgotZXh0ZXJuIHZvaWQgYXRoNWtfaHdfdXBkYXRlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgYXRoNWtfbWliX3N0YXRzICpzdGF0aXN0aWNzKTsKIC8qIEFDSyBiaXQgcmF0ZSAqLwogdm9pZCBhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBib29sIGhpZ2gpOwogLyogQUNLL0NUUyBUaW1lb3V0cyAqLwpAQCAtMTEyOSw4ICsxMTIxLDYgQEAKIGV4dGVybiB1MzIgYXRoNWtfaHdfZ2V0X2dwaW8oc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIGdwaW8pOwogZXh0ZXJuIGludCBhdGg1a19od19zZXRfZ3BpbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCk7CiBleHRlcm4gdm9pZCBhdGg1a19od19zZXRfZ3Bpb19pbnRyKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBncGlvLCB1MzIgaW50ZXJydXB0X2xldmVsKTsKLS8qIFJlZ3VsYXRvcnkgRG9tYWluL0NoYW5uZWxzIFNldHVwICovCi1leHRlcm4gdTE2IGF0aDVrX2dldF9yZWdkb21haW4oc3RydWN0IGF0aDVrX2h3ICphaCk7CiAvKiBNaXNjIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBhdGg1a19od19nZXRfY2FwYWJpbGl0eShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBlbnVtIGF0aDVrX2NhcGFiaWxpdHlfdHlwZSBjYXBfdHlwZSwgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCmluZGV4IGRkYzg3MTQuLmUxODMwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKQEAgLTgwLDcgKzgwLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgNXh4eCBzZXJpZXMgb2YgQXRoZXJvcyA4MDIuMTEgd2lyZWxlc3MgTEFOIGNhcmRzLiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkF0aGVyb3MgNXh4eCBXTEFOIGNhcmRzIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Ci1NT0RVTEVfVkVSU0lPTigiMC4xLjEgKEVYUEVSSU1FTlRBTCkiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjUuMCAoRVhQRVJJTUVOVEFMKSIpOwogCiAKIC8qIEtub3duIFBDSSBpZHMgKi8KQEAgLTExOCwxMiArMTE4LDE1IEBACiAJeyAiNTIxMiIsCUFSNUtfVkVSU0lPTl9WRVIsCUFSNUtfU1JFVl9WRVJfQVI1MjEyIH0sCiAJeyAiNTIxMyIsCUFSNUtfVkVSU0lPTl9WRVIsCUFSNUtfU1JFVl9WRVJfQVI1MjEzIH0sCiAJeyAiNTIxM0EiLAlBUjVLX1ZFUlNJT05fVkVSLAlBUjVLX1NSRVZfVkVSX0FSNTIxM0EgfSwKKwl7ICIyNDEzIiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjI0MTMgfSwKKwl7ICIyNDE0IiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjI0MTQgfSwKIAl7ICIyNDI0IiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjI0MjQgfSwKIAl7ICI1NDI0IiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjU0MjQgfSwKIAl7ICI1NDEzIiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjU0MTMgfSwKIAl7ICI1NDE0IiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjU0MTQgfSwKIAl7ICI1NDE2IiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjU0MTYgfSwKIAl7ICI1NDE4IiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjU0MTggfSwKKwl7ICIyNDI1IiwJQVI1S19WRVJTSU9OX1ZFUiwJQVI1S19TUkVWX1ZFUl9BUjI0MjUgfSwKIAl7ICJ4eHh4eCIsCUFSNUtfVkVSU0lPTl9WRVIsCUFSNUtfU1JFVl9VTktOT1dOIH0sCiAJeyAiNTExMCIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9SQURfNTExMCB9LAogCXsgIjUxMTEiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEXzUxMTEgfSwKQEAgLTEzMiw2ICsxMzUsNyBAQAogCXsgIjUxMTJBIiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1JBRF81MTEyQSB9LAogCXsgIjIxMTIiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEXzIxMTIgfSwKIAl7ICIyMTEyQSIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9SQURfMjExMkEgfSwKKwl7ICJTQ2hpcCIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9SQURfU0MwIH0sCiAJeyAiU0NoaXAiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEX1NDMSB9LAogCXsgIlNDaGlwIiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1JBRF9TQzIgfSwKIAl7ICI1MTMzIiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1JBRF81MTMzIH0sCkBAIC0yNDAsNiArMjQ0LDggQEAKIHN0YXRpYyB2b2lkCWF0aDVrX3NldGN1cm1vZGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKIAkJCQl1bnNpZ25lZCBpbnQgbW9kZSk7CiBzdGF0aWMgdm9pZAlhdGg1a19tb2RlX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworc3RhdGljIHZvaWQJYXRoNWtfc2V0X3RvdGFsX2h3X3JhdGVzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworCiAvKiBEZXNjcmlwdG9yIHNldHVwICovCiBzdGF0aWMgaW50CWF0aDVrX2Rlc2NfYWxsb2Moc3RydWN0IGF0aDVrX3NvZnRjICpzYywKIAkJCQlzdHJ1Y3QgcGNpX2RldiAqcGRldik7CkBAIC0yNzgsNyArMjg0LDggQEAKIHN0YXRpYyB2b2lkIAlhdGg1a19yeF9zdG9wKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIHVuc2lnbmVkIGludCBhdGg1a19yeF9kZWNyeXB0ZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKIAkJCQkJc3RydWN0IGF0aDVrX2Rlc2MgKmRzLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpOwogc3RhdGljIHZvaWQgCWF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKTsKIC8qIFR4IGhhbmRsaW5nICovCiBzdGF0aWMgdm9pZCAJYXRoNWtfdHhfcHJvY2Vzc3Eoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKQEAgLTUxMSwzNSArNTE4LDQ2IEBACiAJCQkJCXNjLT5haC0+YWhfbWFjX3NyZXYsCiAJCQkJCXNjLT5haC0+YWhfcGh5X3JldmlzaW9uKTsKIAotCWlmKCFzYy0+YWgtPmFoX3NpbmdsZV9jaGlwKXsKKwlpZiAoIXNjLT5haC0+YWhfc2luZ2xlX2NoaXApIHsKIAkJLyogU2luZ2xlIGNoaXAgcmFkaW8gKCFSRjUxMTEpICovCi0JCWlmKHNjLT5haC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiAmJiAhc2MtPmFoLT5haF9yYWRpb18yZ2h6X3JldmlzaW9uKSB7CisJCWlmIChzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gJiYKKwkJCSFzYy0+YWgtPmFoX3JhZGlvXzJnaHpfcmV2aXNpb24pIHsKIAkJCS8qIE5vIDVHSHogc3VwcG9ydCAtPiByZXBvcnQgMkdIeiByYWRpbyAqLwotCQkJaWYoIXRlc3RfYml0KE1PREVfSUVFRTgwMjExQSwgc2MtPmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpKXsKKwkJCWlmICghdGVzdF9iaXQoQVI1S19NT0RFXzExQSwKKwkJCQlzYy0+YWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSkpIHsKIAkJCQlBVEg1S19JTkZPKHNjLCAiUkYlcyAyR0h6IHJhZGlvIGZvdW5kICgweCV4KVxuIiwKLQkJCQkJYXRoNWtfY2hpcF9uYW1lKEFSNUtfVkVSU0lPTl9SQUQsc2MtPmFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uKSwKLQkJCQkJCQlzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pOwotCQkJLyogTm8gMkdIeiBzdXBwb3J0ICg1MTEwIGFuZCBzb21lIDVHaHogb25seSBjYXJkcykgLT4gcmVwb3J0IDVHaHogcmFkaW8gKi8KLQkJCX0gZWxzZSBpZighdGVzdF9iaXQoTU9ERV9JRUVFODAyMTFCLCBzYy0+YWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSkpeworCQkJCQlhdGg1a19jaGlwX25hbWUoQVI1S19WRVJTSU9OX1JBRCwKKwkJCQkJCXNjLT5haC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiksCisJCQkJCQlzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pOworCQkJLyogTm8gMkdIeiBzdXBwb3J0ICg1MTEwIGFuZCBzb21lCisJCQkgKiA1R2h6IG9ubHkgY2FyZHMpIC0+IHJlcG9ydCA1R2h6IHJhZGlvICovCisJCQl9IGVsc2UgaWYgKCF0ZXN0X2JpdChBUjVLX01PREVfMTFCLAorCQkJCXNjLT5haC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKSkgewogCQkJCUFUSDVLX0lORk8oc2MsICJSRiVzIDVHSHogcmFkaW8gZm91bmQgKDB4JXgpXG4iLAotCQkJCQlhdGg1a19jaGlwX25hbWUoQVI1S19WRVJTSU9OX1JBRCxzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pLAotCQkJCQkJCXNjLT5haC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbik7CisJCQkJCWF0aDVrX2NoaXBfbmFtZShBUjVLX1ZFUlNJT05fUkFELAorCQkJCQkJc2MtPmFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uKSwKKwkJCQkJCXNjLT5haC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbik7CiAJCQkvKiBNdWx0aWJhbmQgcmFkaW8gKi8KIAkJCX0gZWxzZSB7CiAJCQkJQVRINUtfSU5GTyhzYywgIlJGJXMgbXVsdGliYW5kIHJhZGlvIGZvdW5kIgogCQkJCQkiICgweCV4KVxuIiwKLQkJCQkJYXRoNWtfY2hpcF9uYW1lKEFSNUtfVkVSU0lPTl9SQUQsc2MtPmFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uKSwKLQkJCQkJCQlzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pOworCQkJCQlhdGg1a19jaGlwX25hbWUoQVI1S19WRVJTSU9OX1JBRCwKKwkJCQkJCXNjLT5haC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiksCisJCQkJCQlzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pOwogCQkJfQogCQl9Ci0JCS8qIE11bHRpIGNoaXAgcmFkaW8gKFJGNTExMSAtIFJGMjExMSkgLT4gcmVwb3J0IGJvdGggMkdIei81R0h6IHJhZGlvcyAqLwotCQllbHNlIGlmKHNjLT5haC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiAmJiBzYy0+YWgtPmFoX3JhZGlvXzJnaHpfcmV2aXNpb24peworCQkvKiBNdWx0aSBjaGlwIHJhZGlvIChSRjUxMTEgLSBSRjIxMTEpIC0+CisJCSAqIHJlcG9ydCBib3RoIDJHSHovNUdIeiByYWRpb3MgKi8KKwkJZWxzZSBpZiAoc2MtPmFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uICYmCisJCQkJc2MtPmFoLT5haF9yYWRpb18yZ2h6X3JldmlzaW9uKXsKIAkJCUFUSDVLX0lORk8oc2MsICJSRiVzIDVHSHogcmFkaW8gZm91bmQgKDB4JXgpXG4iLAotCQkJCWF0aDVrX2NoaXBfbmFtZShBUjVLX1ZFUlNJT05fUkFELHNjLT5haC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiksCi0JCQkJCQlzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pOworCQkJCWF0aDVrX2NoaXBfbmFtZShBUjVLX1ZFUlNJT05fUkFELAorCQkJCQlzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pLAorCQkJCQlzYy0+YWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24pOwogCQkJQVRINUtfSU5GTyhzYywgIlJGJXMgMkdIeiByYWRpbyBmb3VuZCAoMHgleClcbiIsCi0JCQkJYXRoNWtfY2hpcF9uYW1lKEFSNUtfVkVSU0lPTl9SQUQsc2MtPmFoLT5haF9yYWRpb18yZ2h6X3JldmlzaW9uKSwKLQkJCQkJCXNjLT5haC0+YWhfcmFkaW9fMmdoel9yZXZpc2lvbik7CisJCQkJYXRoNWtfY2hpcF9uYW1lKEFSNUtfVkVSU0lPTl9SQUQsCisJCQkJCXNjLT5haC0+YWhfcmFkaW9fMmdoel9yZXZpc2lvbiksCisJCQkJCXNjLT5haC0+YWhfcmFkaW9fMmdoel9yZXZpc2lvbik7CiAJCX0KIAl9CiAKQEAgLTY2OCw3ICs2ODYsMTAgQEAKIAkgKiByZXR1cm4gZmFsc2Ugdy9vIGRvaW5nIGFueXRoaW5nLiAgTUFDJ3MgdGhhdCBkbwogCSAqIHN1cHBvcnQgaXQgd2lsbCByZXR1cm4gdHJ1ZSB3L28gZG9pbmcgYW55dGhpbmcuCiAJICovCi0JaWYgKGFoLT5haF9zZXR1cF94dHhfZGVzYyhhaCwgTlVMTCwgMCwgMCwgMCwgMCwgMCwgMCkpCisJcmV0ID0gYWgtPmFoX3NldHVwX3h0eF9kZXNjKGFoLCBOVUxMLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHJldCA+IDApCiAJCV9fc2V0X2JpdChBVEhfU1RBVF9NUlJFVFJZLCBzYy0+c3RhdHVzKTsKIAogCS8qCkBAIC02OTAsMTEgKzcxMSwxNCBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwkvKiBTZXQgKl9yYXRlcyBzbyB3ZSBjYW4gbWFwIGh3IHJhdGUgaW5kZXggKi8KKwlhdGg1a19zZXRfdG90YWxfaHdfcmF0ZXMoc2MpOworCiAJLyogTkI6IHNldHVwIGhlcmUgc28gYXRoNWtfcmF0ZV91cGRhdGUgaXMgaGFwcHkgKi8KLQlpZiAodGVzdF9iaXQoTU9ERV9JRUVFODAyMTFBLCBhaC0+YWhfbW9kZXMpKQotCQlhdGg1a19zZXRjdXJtb2RlKHNjLCBNT0RFX0lFRUU4MDIxMUEpOworCWlmICh0ZXN0X2JpdChBUjVLX01PREVfMTFBLCBhaC0+YWhfbW9kZXMpKQorCQlhdGg1a19zZXRjdXJtb2RlKHNjLCBBUjVLX01PREVfMTFBKTsKIAllbHNlCi0JCWF0aDVrX3NldGN1cm1vZGUoc2MsIE1PREVfSUVFRTgwMjExQik7CisJCWF0aDVrX3NldGN1cm1vZGUoc2MsIEFSNUtfTU9ERV8xMUIpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSB0eCtyeCBkZXNjcmlwdG9ycyBhbmQgcG9wdWxhdGUgdGhlIGxpc3RzLgpAQCAtODM0LDEyICs4NTgsOSBAQAogCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IHJ0LT5yYXRlX2NvdW50ICYmIG1heCA+IDA7IGkrKykgewotCQlpZiAoIXJ0LT5yYXRlc1tpXS52YWxpZCkKLQkJCWNvbnRpbnVlOwotCQlyYXRlcy0+cmF0ZSA9IHJ0LT5yYXRlc1tpXS5yYXRlX2ticHMgLyAxMDA7Ci0JCXJhdGVzLT52YWwgPSBydC0+cmF0ZXNbaV0ucmF0ZV9jb2RlOwotCQlyYXRlcy0+ZmxhZ3MgPSBydC0+cmF0ZXNbaV0ubW9kdWxhdGlvbjsKLQkJcmF0ZXMrKzsKKwkJcmF0ZXNbY291bnRdLmJpdHJhdGUgPSBydC0+cmF0ZXNbaV0ucmF0ZV9rYnBzIC8gMTAwOworCQlyYXRlc1tjb3VudF0uaHdfdmFsdWUgPSBydC0+cmF0ZXNbaV0ucmF0ZV9jb2RlOworCQlyYXRlc1tjb3VudF0uZmxhZ3MgPSBydC0+cmF0ZXNbaV0ubW9kdWxhdGlvbjsKIAkJY291bnQrKzsKIAkJbWF4LS07CiAJfQpAQCAtODUzLDQzICs4NzQsMjIgQEAKIAkJdW5zaWduZWQgaW50IG1vZGUsCiAJCXVuc2lnbmVkIGludCBtYXgpCiB7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCB7IHVuc2lnbmVkIGludCBtb2RlLCBtYXNrLCBjaGFuOyB9IG1hcFtdID0gewotCQlbTU9ERV9JRUVFODAyMTFBXSA9IHsgQ0hBTk5FTF9PRkRNLCBDSEFOTkVMX09GRE0gfCBDSEFOTkVMX1RVUkJPLCBDSEFOTkVMX0EgfSwKLQkJW01PREVfQVRIRVJPU19UVVJCT10gPSB7IENIQU5ORUxfT0ZETXxDSEFOTkVMX1RVUkJPLCBDSEFOTkVMX09GRE0gfCBDSEFOTkVMX1RVUkJPLCBDSEFOTkVMX1QgfSwKLQkJW01PREVfSUVFRTgwMjExQl0gPSB7IENIQU5ORUxfQ0NLLCBDSEFOTkVMX0NDSywgQ0hBTk5FTF9CIH0sCi0JCVtNT0RFX0lFRUU4MDIxMUddID0geyBDSEFOTkVMX09GRE0sIENIQU5ORUxfT0ZETSwgQ0hBTk5FTF9HIH0sCi0JCVtNT0RFX0FUSEVST1NfVFVSQk9HXSA9IHsgQ0hBTk5FTF9PRkRNIHwgQ0hBTk5FTF9UVVJCTywgQ0hBTk5FTF9PRkRNIHwgQ0hBTk5FTF9UVVJCTywgQ0hBTk5FTF9URyB9LAotCX07Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZWdjaGFubmVsIGNoYW5zXzJnaHpbXSA9Ci0JCUlFRUU4MDIxMV9DSEFOTkVMU18yR0haOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmVnY2hhbm5lbCBjaGFuc181Z2h6W10gPQotCQlJRUVFODAyMTFfQ0hBTk5FTFNfNUdIWjsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfcmVnY2hhbm5lbCAqY2hhbnM7Ci0JZW51bSBhdGg1a19yZWdkb20gZG1uOwotCXVuc2lnbmVkIGludCBpLCBjb3VudCwgc2l6ZSwgY2hmcmVxLCBhbGwsIGYsIGNoOworCXVuc2lnbmVkIGludCBpLCBjb3VudCwgc2l6ZSwgY2hmcmVxLCBmcmVxLCBjaDsKIAogCWlmICghdGVzdF9iaXQobW9kZSwgYWgtPmFoX21vZGVzKSkKIAkJcmV0dXJuIDA7CiAKLQlhbGwgPSBhaC0+YWhfcmVnZG9tYWluID09IERNTl9ERUZBVUxUIHx8IENIQU5fREVCVUcgPT0gMTsKLQogCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTU9ERV9JRUVFODAyMTFBOgotCWNhc2UgTU9ERV9BVEhFUk9TX1RVUkJPOgorCWNhc2UgQVI1S19NT0RFXzExQToKKwljYXNlIEFSNUtfTU9ERV8xMUFfVFVSQk86CiAJCS8qIDEuLjIyMCwgYnV0IDJHSHogZnJlcXVlbmNpZXMgYXJlIGZpbHRlcmVkIGJ5IGNoZWNrX2NoYW5uZWwgKi8KLQkJc2l6ZSA9IGFsbCA/IDIyMCA6IEFSUkFZX1NJWkUoY2hhbnNfNWdoeik7Ci0JCWNoYW5zID0gY2hhbnNfNWdoejsKLQkJZG1uID0gYXRoNWtfcmVnZG9tMmZsYWcoYWgtPmFoX3JlZ2RvbWFpbiwKLQkJCQlJRUVFODAyMTFfQ0hBTk5FTFNfNUdIWl9NSU4pOworCQlzaXplID0gMjIwIDsKIAkJY2hmcmVxID0gQ0hBTk5FTF81R0haOwogCQlicmVhazsKLQljYXNlIE1PREVfSUVFRTgwMjExQjoKLQljYXNlIE1PREVfSUVFRTgwMjExRzoKLQljYXNlIE1PREVfQVRIRVJPU19UVVJCT0c6Ci0JCXNpemUgPSBhbGwgPyAyNiA6IEFSUkFZX1NJWkUoY2hhbnNfMmdoeik7Ci0JCWNoYW5zID0gY2hhbnNfMmdoejsKLQkJZG1uID0gYXRoNWtfcmVnZG9tMmZsYWcoYWgtPmFoX3JlZ2RvbWFpbiwKLQkJCQlJRUVFODAyMTFfQ0hBTk5FTFNfMkdIWl9NSU4pOworCWNhc2UgQVI1S19NT0RFXzExQjoKKwljYXNlIEFSNUtfTU9ERV8xMUc6CisJY2FzZSBBUjVLX01PREVfMTFHX1RVUkJPOgorCQlzaXplID0gMjY7CiAJCWNoZnJlcSA9IENIQU5ORUxfMkdIWjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTg5OCwyNSArODk4LDMxIEBACiAJfQogCiAJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgc2l6ZSAmJiBtYXggPiAwOyBpKyspIHsKLQkJY2ggPSBhbGwgPyBpICsgMSA6IGNoYW5zW2ldLmNoYW47Ci0JCWYgPSBhdGg1a19pZWVlMm1oeihjaCk7CisJCWNoID0gaSArIDEgOworCQlmcmVxID0gYXRoNWtfaWVlZTJtaHooY2gpOworCiAJCS8qIENoZWNrIGlmIGNoYW5uZWwgaXMgc3VwcG9ydGVkIGJ5IHRoZSBjaGlwc2V0ICovCi0JCWlmICghYXRoNWtfY2hhbm5lbF9vayhhaCwgZiwgY2hmcmVxKSkKKwkJaWYgKCFhdGg1a19jaGFubmVsX29rKGFoLCBmcmVxLCBjaGZyZXEpKQogCQkJY29udGludWU7CiAKLQkJLyogTWF0Y2ggcmVndWxhdGlvbiBkb21haW4gKi8KLQkJaWYgKCFhbGwgJiYgIShJRUVFODAyMTFfRE1OKGNoYW5zW2ldLmRvbWFpbikgJgotCQkJCQkJCUlFRUU4MDIxMV9ETU4oZG1uKSkpCi0JCQljb250aW51ZTsKKwkJLyogV3JpdGUgY2hhbm5lbCBpbmZvIGFuZCBpbmNyZW1lbnQgY291bnRlciAqLworCQljaGFubmVsc1tjb3VudF0uY2VudGVyX2ZyZXEgPSBmcmVxOworCQljaGFubmVsc1tjb3VudF0uYmFuZCA9IChjaGZyZXEgPT0gQ0hBTk5FTF8yR0haKSA/CisJCQlJRUVFODAyMTFfQkFORF8yR0haIDogSUVFRTgwMjExX0JBTkRfNUdIWjsKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgQVI1S19NT0RFXzExQToKKwkJY2FzZSBBUjVLX01PREVfMTFHOgorCQkJY2hhbm5lbHNbY291bnRdLmh3X3ZhbHVlID0gY2hmcmVxIHwgQ0hBTk5FTF9PRkRNOworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19NT0RFXzExQV9UVVJCTzoKKwkJY2FzZSBBUjVLX01PREVfMTFHX1RVUkJPOgorCQkJY2hhbm5lbHNbY291bnRdLmh3X3ZhbHVlID0gY2hmcmVxIHwKKwkJCQlDSEFOTkVMX09GRE0gfCBDSEFOTkVMX1RVUkJPOworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19NT0RFXzExQjoKKwkJCWNoYW5uZWxzW2NvdW50XS5od192YWx1ZSA9IENIQU5ORUxfQjsKKwkJfQogCi0JCWlmICghYWxsICYmIChjaGFuc1tpXS5tb2RlICYgbWFwW21vZGVdLm1hc2spICE9IG1hcFttb2RlXS5tb2RlKQotCQkJY29udGludWU7Ci0KLQkJLyogV3JpdGUgY2hhbm5lbCBhbmQgaW5jcmVtZW50IGNvdW50ZXIgKi8KLQkJY2hhbm5lbHMtPmNoYW4gPSBjaDsKLQkJY2hhbm5lbHMtPmZyZXEgPSBmOwotCQljaGFubmVscy0+dmFsID0gbWFwW21vZGVdLmNoYW47Ci0JCWNoYW5uZWxzKys7CiAJCWNvdW50Kys7CiAJCW1heC0tOwogCX0KQEAgLTkyNCw5NSArOTMwLDc4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0vKiBPbmx5IHRyaWVzIHRvIHJlZ2lzdGVyIG1vZGVzIG91ciBFRVBST00gc2F5cyBpdCBjYW4gc3VwcG9ydCAqLwotI2RlZmluZSBSRUdJU1RFUl9NT0RFKG0pIGRvIHsgXAotCXJldCA9IGF0aDVrX3JlZ2lzdGVyX21vZGUoaHcsIG0pOyBcCi0JaWYgKHJldCkgXAotCQlyZXR1cm4gcmV0OyBcCi19IHdoaWxlICgwKSBcCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1hdGg1a19yZWdpc3Rlcl9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBtKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGVzID0gc2MtPm1vZGVzOwotCXVuc2lnbmVkIGludCBpOwotCWludCByZXQ7Ci0KLQlpZiAoIXRlc3RfYml0KG0sIHNjLT5haC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKSkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RSSVZFUl9NT0RFUzsgaSsrKSB7Ci0JCWlmIChtb2Rlc1tpXS5tb2RlICE9IG0gfHwgIW1vZGVzW2ldLm51bV9jaGFubmVscykKLQkJCWNvbnRpbnVlOwotCQlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKGh3LCAmbW9kZXNbaV0pOwotCQlpZiAocmV0KSB7Ci0JCQlBVEg1S19FUlIoc2MsICJjYW4ndCByZWdpc3RlciBod21vZGUgJXVcbiIsIG0pOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JQlVHKCk7Ci19Ci0KIHN0YXRpYyBpbnQKIGF0aDVrX2dldGNoYW5uZWxzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZXMgPSBzYy0+bW9kZXM7Ci0JdW5zaWduZWQgaW50IGksIG1heF9yLCBtYXhfYzsKLQlpbnQgcmV0OworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kcyA9IHNjLT5zYmFuZHM7CisJY29uc3Qgc3RydWN0IGF0aDVrX3JhdGVfdGFibGUgKmh3X3JhdGVzOworCXVuc2lnbmVkIGludCBtYXhfciwgbWF4X2MsIGNvdW50X3IsIGNvdW50X2M7CisJaW50IG1vZGUyZyA9IEFSNUtfTU9ERV8xMUc7CiAKLQlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShzYy0+bW9kZXMpIDwgMyk7Ci0KLQkvKiBUaGUgb3JkZXIgaGVyZSBkb2VzIG5vdCBtYXR0ZXIgKi8KLQltb2Rlc1swXS5tb2RlID0gTU9ERV9JRUVFODAyMTFHOwotCW1vZGVzWzFdLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7Ci0JbW9kZXNbMl0ubW9kZSA9IE1PREVfSUVFRTgwMjExQTsKKwlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShzYy0+c2JhbmRzKSA8IElFRUU4MDIxMV9OVU1fQkFORFMpOwogCiAJbWF4X3IgPSBBUlJBWV9TSVpFKHNjLT5yYXRlcyk7CiAJbWF4X2MgPSBBUlJBWV9TSVpFKHNjLT5jaGFubmVscyk7CisJY291bnRfciA9IGNvdW50X2MgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9EUklWRVJfTU9ERVM7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUgPSAmbW9kZXNbaV07Ci0JCWNvbnN0IHN0cnVjdCBhdGg1a19yYXRlX3RhYmxlICpod19yYXRlczsKLQotCQlpZiAoaSA9PSAwKSB7Ci0JCQltb2Rlc1swXS5yYXRlcwk9IHNjLT5yYXRlczsKLQkJCW1vZGVzLT5jaGFubmVscwk9IHNjLT5jaGFubmVsczsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqcHJldl9tb2RlID0gJm1vZGVzW2ktMV07Ci0JCQlpbnQgcHJldl9udW1fcgk9IHByZXZfbW9kZS0+bnVtX3JhdGVzOwotCQkJaW50IHByZXZfbnVtX2MJPSBwcmV2X21vZGUtPm51bV9jaGFubmVsczsKLQkJCW1vZGUtPnJhdGVzCT0gJnByZXZfbW9kZS0+cmF0ZXNbcHJldl9udW1fcl07Ci0JCQltb2RlLT5jaGFubmVscwk9ICZwcmV2X21vZGUtPmNoYW5uZWxzW3ByZXZfbnVtX2NdOwotCQl9Ci0KLQkJaHdfcmF0ZXMgPSBhdGg1a19od19nZXRfcmF0ZV90YWJsZShhaCwgbW9kZS0+bW9kZSk7Ci0JCW1vZGUtPm51bV9yYXRlcyAgICA9IGF0aDVrX2NvcHlfcmF0ZXMobW9kZS0+cmF0ZXMsIGh3X3JhdGVzLAotCQkJbWF4X3IpOwotCQltb2RlLT5udW1fY2hhbm5lbHMgPSBhdGg1a19jb3B5X2NoYW5uZWxzKGFoLCBtb2RlLT5jaGFubmVscywKLQkJCW1vZGUtPm1vZGUsIG1heF9jKTsKLQkJbWF4X3IgLT0gbW9kZS0+bnVtX3JhdGVzOwotCQltYXhfYyAtPSBtb2RlLT5udW1fY2hhbm5lbHM7CisJLyogMkdIeiBiYW5kICovCisJaWYgKCF0ZXN0X2JpdChBUjVLX01PREVfMTFHLCBzYy0+YWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSkpIHsKKwkJbW9kZTJnID0gQVI1S19NT0RFXzExQjsKKwkJaWYgKCF0ZXN0X2JpdChBUjVLX01PREVfMTFCLAorCQkJc2MtPmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpKQorCQkJbW9kZTJnID0gLTE7CiAJfQogCi0JLyogV2UgdHJ5IHRvIHJlZ2lzdGVyIGFsbCBtb2RlcyB0aGlzIGRyaXZlciBzdXBwb3J0cy4gV2UgZG9uJ3QgYm90aGVyCi0JICogd2l0aCBNT0RFX0lFRUU4MDIxMUIgZm9yIEFSNTIxMiBhcyBNT0RFX0lFRUU4MDIxMUcgYWxyZWFkeSBhY2NvdW50cwotCSAqIGZvciB0aGF0IGFzIHBlciBtYWM4MDIxMS4gVGhlbiwgUkVHSVNURVJfTU9ERSgpIHdpbGwgd2lsbCBhY3R1YWxseQotCSAqIGNoZWNrIHRoZSBlZXByb20gcmVhZGluZyBmb3IgbW9yZSByZWxpYWJsZSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uLgotCSAqIE9yZGVyIG1hdHRlcnMgaGVyZSBhcyBwZXIgbWFjODAyMTEncyBsYXRlc3QgcHJlZmVyZW5jZS4gVGhpcyB3aWxsCi0JICogYWxsIGhvcGVmdWxsbHkgc29vbiBnbyBhd2F5LiAqLworCWlmIChtb2RlMmcgPiAwKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KKwkJCSZzYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CiAKLQlSRUdJU1RFUl9NT0RFKE1PREVfSUVFRTgwMjExRyk7Ci0JaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEyKQotCQlSRUdJU1RFUl9NT0RFKE1PREVfSUVFRTgwMjExQik7Ci0JUkVHSVNURVJfTU9ERShNT0RFX0lFRUU4MDIxMUEpOworCQlzYmFuZC0+Yml0cmF0ZXMgPSBzYy0+cmF0ZXM7CisJCXNiYW5kLT5jaGFubmVscyA9IHNjLT5jaGFubmVsczsKIAotCWF0aDVrX2RlYnVnX2R1bXBfbW9kZXMoc2MsIG1vZGVzKTsKKwkJc2JhbmQtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCQlzYmFuZC0+bl9jaGFubmVscyA9IGF0aDVrX2NvcHlfY2hhbm5lbHMoYWgsIHNiYW5kLT5jaGFubmVscywKKwkJCQkJbW9kZTJnLCBtYXhfYyk7CiAKLQlyZXR1cm4gcmV0OworCQlod19yYXRlcyA9IGF0aDVrX2h3X2dldF9yYXRlX3RhYmxlKGFoLCBtb2RlMmcpOworCQlzYmFuZC0+bl9iaXRyYXRlcyA9IGF0aDVrX2NvcHlfcmF0ZXMoc2JhbmQtPmJpdHJhdGVzLAorCQkJCQlod19yYXRlcywgbWF4X3IpOworCisJCWNvdW50X2MgPSBzYmFuZC0+bl9jaGFubmVsczsKKwkJY291bnRfciA9IHNiYW5kLT5uX2JpdHJhdGVzOworCisJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBzYmFuZDsKKworCQltYXhfciAtPSBjb3VudF9yOworCQltYXhfYyAtPSBjb3VudF9jOworCisJfQorCisJLyogNUdIeiBiYW5kICovCisKKwlpZiAodGVzdF9iaXQoQVI1S19NT0RFXzExQSwgc2MtPmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KKwkJCSZzYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisKKwkJc2JhbmQtPmJpdHJhdGVzID0gJnNjLT5yYXRlc1tjb3VudF9yXTsKKwkJc2JhbmQtPmNoYW5uZWxzID0gJnNjLT5jaGFubmVsc1tjb3VudF9jXTsKKworCQlzYmFuZC0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCXNiYW5kLT5uX2NoYW5uZWxzID0gYXRoNWtfY29weV9jaGFubmVscyhhaCwgc2JhbmQtPmNoYW5uZWxzLAorCQkJCQlBUjVLX01PREVfMTFBLCBtYXhfYyk7CisKKwkJaHdfcmF0ZXMgPSBhdGg1a19od19nZXRfcmF0ZV90YWJsZShhaCwgQVI1S19NT0RFXzExQSk7CisJCXNiYW5kLT5uX2JpdHJhdGVzID0gYXRoNWtfY29weV9yYXRlcyhzYmFuZC0+Yml0cmF0ZXMsCisJCQkJCWh3X3JhdGVzLCBtYXhfcik7CisKKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9IHNiYW5kOworCX0KKworCWF0aDVrX2RlYnVnX2R1bXBfYmFuZHMoc2MpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMDI3LDExICsxMDE2LDE1IEBACiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKIAlpbnQgcmV0OwogCi0JQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgIiV1ICgldSBNSHopIC0+ICV1ICgldSBNSHopXG4iLAotCQlzYy0+Y3VyY2hhbi0+Y2hhbiwgc2MtPmN1cmNoYW4tPmZyZXEsCi0JCWNoYW4tPmNoYW4sIGNoYW4tPmZyZXEpOworCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICIoJXUgTUh6KSAtPiAoJXUgTUh6KVxuIiwKKwkJc2MtPmN1cmNoYW4tPmNlbnRlcl9mcmVxLCBjaGFuLT5jZW50ZXJfZnJlcSk7CiAKLQlpZiAoY2hhbi0+ZnJlcSAhPSBzYy0+Y3VyY2hhbi0+ZnJlcSB8fCBjaGFuLT52YWwgIT0gc2MtPmN1cmNoYW4tPnZhbCkgeworCWlmIChjaGFuLT5jZW50ZXJfZnJlcSAhPSBzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEgfHwKKwkJY2hhbi0+aHdfdmFsdWUgIT0gc2MtPmN1cmNoYW4tPmh3X3ZhbHVlKSB7CisKKwkJc2MtPmN1cmNoYW4gPSBjaGFuOworCQlzYy0+Y3VyYmFuZCA9ICZzYy0+c2JhbmRzW2NoYW4tPmJhbmRdOworCiAJCS8qCiAJCSAqIFRvIHN3aXRjaCBjaGFubmVscyBjbGVhciBhbnkgcGVuZGluZyBETUEgb3BlcmF0aW9uczsKIAkJICogd2FpdCBsb25nIGVub3VnaCBmb3IgdGhlIFJYIGZpZm8gdG8gZHJhaW4sIHJlc2V0IHRoZQpAQCAtMTA0MSwxMyArMTAzNCwxMyBAQAogCQlhdGg1a19od19zZXRfaW50cihhaCwgMCk7CS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCQlhdGg1a190eHFfY2xlYW51cChzYyk7CQkvKiBjbGVhciBwZW5kaW5nIHR4IGZyYW1lcyAqLwogCQlhdGg1a19yeF9zdG9wKHNjKTsJCS8qIHR1cm4gb2ZmIGZyYW1lIHJlY3YgKi8KLQkJcmV0ID0gYXRoNWtfaHdfcmVzZXQoYWgsIHNjLT5vcG1vZGUsIGNoYW4sIHRydWUpOworCQlyZXQgPSBhdGg1a19od19yZXNldChhaCwgc2MtPm9wbW9kZSwgc2MtPmN1cmNoYW4sIHRydWUpOwogCQlpZiAocmV0KSB7Ci0JCQlBVEg1S19FUlIoc2MsICIlczogdW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgJXUgIgotCQkJCSIoJXUgTWh6KVxuIiwgX19mdW5jX18sIGNoYW4tPmNoYW4sIGNoYW4tPmZyZXEpOworCQkJQVRINUtfRVJSKHNjLCAiJXM6IHVuYWJsZSB0byByZXNldCBjaGFubmVsICIKKwkJCQkiKCV1IE1oeilcbiIsIF9fZnVuY19fLCBjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCXNjLT5jdXJjaGFuID0gY2hhbjsKKwogCQlhdGg1a19od19zZXRfdHhwb3dlcl9saW1pdChzYy0+YWgsIDApOwogCiAJCS8qCkBAIC0xMDc4LDYgKzEwNzEsOSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVE9ETzogQ0xFQU4gVEhJUyAhISEKKyAqLwogc3RhdGljIHZvaWQKIGF0aDVrX3NldGN1cm1vZGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgdW5zaWduZWQgaW50IG1vZGUpCiB7CkBAIC0xMTE4LDEwICsxMTE0LDYgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCXNjLT5od21hcFtpXS50eGZsYWdzID0gSUVFRTgwMjExX1JBRElPVEFQX0ZfREFUQVBBRDsKLQkJCWlmIChTSFBSRUFNQkxFX0ZMQUcoaXgpIHx8IHJ0LT5yYXRlc1tpeF0ubW9kdWxhdGlvbiA9PQotCQkJCQlJRUVFODAyMTFfUkFURV9PRkRNKQotCQkJCXNjLT5od21hcFtpXS50eGZsYWdzIHw9Ci0JCQkJCQlJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVFBSRTsKIAkJCS8qIHJlY2VpdmUgZnJhbWVzIGluY2x1ZGUgRkNTICovCiAJCQlzYy0+aHdtYXBbaV0ucnhmbGFncyA9IHNjLT5od21hcFtpXS50eGZsYWdzIHwKIAkJCQkJSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTOwpAQCAtMTEzOSw2ICsxMTMxLDEyIEBACiAJfQogCiAJc2MtPmN1cm1vZGUgPSBtb2RlOworCisJaWYgKG1vZGUgPT0gQVI1S19NT0RFXzExQSkgeworCQlzYy0+Y3VyYmFuZCA9ICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCX0gZWxzZSB7CisJCXNjLT5jdXJiYW5kID0gJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJfQogfQogCiBzdGF0aWMgdm9pZApAQCAtMTE2MSw2ICsxMTU5LDcyIEBACiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19NT0RFLCAiUlggZmlsdGVyIDB4JXhcbiIsIHJmaWx0KTsKIH0KIAorLyoKKyAqIE1hdGNoIHRoZSBodyBwcm92aWRlZCByYXRlIGluZGV4ICh0aHJvdWdoIGRlc2NyaXB0b3JzKQorICogdG8gYW4gaW5kZXggZm9yIHNjLT5jdXJiYW5kLT5iaXRyYXRlcywgc28gaXQgY2FuIGJlIHVzZWQKKyAqIGJ5IHRoZSBzdGFjay4KKyAqCisgKiBUaGlzIG9uZSBpcyBhIGxpdHRsZSBiaXQgdHJpY2t5IGJ1dCBpIHRoaW5rIGknbSByaWdodAorICogYWJvdXQgdGhpcy4uLgorICoKKyAqIFdlIGhhdmUgNCByYXRlIHRhYmxlcyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICogWFIgKDQgcmF0ZXMpCisgKiA4MDIuMTFhICg4IHJhdGVzKQorICogODAyLjExYiAoNCByYXRlcykKKyAqIDgwMi4xMWcgKDEyIHJhdGVzKQorICogdGhhdCBtYWtlIHRoZSBodyByYXRlIHRhYmxlLgorICoKKyAqIExldHMgdGFrZSBhIDUyMTEgZm9yIGV4YW1wbGUgdGhhdCBzdXBwb3J0cyBhIGFuZCBiIG1vZGVzIG9ubHkuCisgKiBGaXJzdCBjb21lcyB0aGUgODAyLjExYSB0YWJsZSBhbmQgdGhlbiA4MDIuMTFiICh0b3RhbCAxMiByYXRlcykuCisgKiBXaGVuIGh3IHJldHVybnMgZWcuIDExIGl0IHBvaW50cyB0byB0aGUgbGFzdCA4MDIuMTFiIHJhdGUgKDExTWJpdCksCisgKiBpZiBpdCByZXR1cm5zIDIgaXQgcG9pbnRzIHRvIHRoZSBzZWNvbmQgODAyLjExYSByYXRlIGV0Yy4KKyAqCisgKiBTYW1lIGdvZXMgZm9yIDUyMTIgd2hvIGhhcyB4ci9hL2IvZyBzdXBwb3J0ICh0b3RhbCAyOCByYXRlcykuCisgKiBGaXJzdCBjb21lcyB0aGUgWFIgdGFibGUsIHRoZW4gODAyLjExYSwgODAyLjExYiBhbmQgODAyLjExZy4KKyAqIFdoZW4gaHcgcmV0dXJucyBlZy4gMjcgaXQgcG9pbnRzIHRvIHRoZSBsYXN0IDgwMi4xMWcgcmF0ZSAoNTRNYml0cykgZXRjCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19zZXRfdG90YWxfaHdfcmF0ZXMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykgeworCisJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKKworCWlmICh0ZXN0X2JpdChBUjVLX01PREVfMTFBLCBhaC0+YWhfbW9kZXMpKQorCQlzYy0+YV9yYXRlcyA9IDg7CisKKwlpZiAodGVzdF9iaXQoQVI1S19NT0RFXzExQiwgYWgtPmFoX21vZGVzKSkKKwkJc2MtPmJfcmF0ZXMgPSA0OworCisJaWYgKHRlc3RfYml0KEFSNUtfTU9ERV8xMUcsIGFoLT5haF9tb2RlcykpCisJCXNjLT5nX3JhdGVzID0gMTI7CisKKwkvKiBYWFg6IE5lZWQgdG8gc2VlIHdoYXQgd2hhdCBoYXBwZW5zIHdoZW4KKwkJeHIgZGlzYWJsZSBiaXRzIGluIGVlcHJvbSBhcmUgc2V0ICovCisJaWYgKGFoLT5haF92ZXJzaW9uID49IEFSNUtfQVI1MjEyKQorCQlzYy0+eHJfcmF0ZXMgPSA0OworCit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGg1a19od190b19kcml2ZXJfcml4KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGludCBod19yaXgpIHsKKworCWludCBtYWM4MDIxMV9yaXg7CisKKwlpZihzYy0+Y3VyYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCS8qIFdlIHNldHVwIGEgZyByYXRldGFibGUgZm9yIGJvdGggYi9nIG1vZGVzICovCisJCW1hYzgwMjExX3JpeCA9CisJCQlod19yaXggLSBzYy0+Yl9yYXRlcyAtIHNjLT5hX3JhdGVzIC0gc2MtPnhyX3JhdGVzOworCX0gZWxzZSB7CisJCW1hYzgwMjExX3JpeCA9IGh3X3JpeCAtIHNjLT54cl9yYXRlczsKKwl9CisKKwkvKiBTb21ldGhpbmcgd2VudCB3cm9uZywgZmFsbGJhY2sgdG8gYmFzaWMgcmF0ZSBmb3IgdGhpcyBiYW5kICovCisJaWYgKChtYWM4MDIxMV9yaXggPj0gc2MtPmN1cmJhbmQtPm5fYml0cmF0ZXMpIHx8CisJCShtYWM4MDIxMV9yaXggPD0gMCApKQorCQltYWM4MDIxMV9yaXggPSAxOworCisJcmV0dXJuIG1hYzgwMjExX3JpeDsKK30KKwogCiAKIApAQCAtMTI1Niw3ICsxMzIwLDcgQEAKIAlpZiAoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spCiAJCWZsYWdzIHw9IEFSNUtfVFhERVNDX05PQUNLOwogCi0JcGt0bGVuID0gc2tiLT5sZW4gKyBGQ1NfTEVOOworCXBrdGxlbiA9IHNrYi0+bGVuOwogCiAJaWYgKCEoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9ET19OT1RfRU5DUllQVCkpIHsKIAkJa2V5aWR4ID0gY3RsLT5rZXlfaWR4OwpAQCAtMTI2NSw3ICsxMzI5LDggQEAKIAogCXJldCA9IGFoLT5haF9zZXR1cF90eF9kZXNjKGFoLCBkcywgcGt0bGVuLAogCQlpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpLCBBUjVLX1BLVF9UWVBFX05PUk1BTCwKLQkJKGN0bC0+cG93ZXJfbGV2ZWwgKiAyKSwgY3RsLT50eF9yYXRlLCBjdGwtPnJldHJ5X2xpbWl0LCBrZXlpZHgsIDAsIGZsYWdzLCAwLCAwKTsKKwkJKHNjLT5wb3dlcl9sZXZlbCAqIDIpLCBjdGwtPnR4X3JhdGUtPmh3X3ZhbHVlLAorCQljdGwtPnJldHJ5X2xpbWl0LCBrZXlpZHgsIDAsIGZsYWdzLCAwLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bm1hcDsKIApAQCAtMTUwMCw4ICsxNTY1LDcgQEAKIAkgKi8KIAlzcGluX2xvY2tfYmgoJnR4cS0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJmLCBiZjAsICZ0eHEtPnEsIGxpc3QpIHsKLQkJYXRoNWtfZGVidWdfcHJpbnR0eGJ1ZihzYywgYmYsICFzYy0+YWgtPmFoX3Byb2NfdHhfZGVzYyhzYy0+YWgsCi0JCQkJCWJmLT5kZXNjKSk7CisJCWF0aDVrX2RlYnVnX3ByaW50dHhidWYoc2MsIGJmKTsKIAogCQlhdGg1a190eGJ1Zl9mcmVlKHNjLCBiZik7CiAKQEAgLTE2MjYsMjAgKzE2OTAsMjAgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludAogYXRoNWtfcnhfZGVjcnlwdGVkKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19kZXNjICpkcywKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLT5kYXRhOwogCXVuc2lnbmVkIGludCBrZXlpeCwgaGxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CiAKLQlpZiAoIShkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfREVDUllQVCkgJiYKLQkJCWRzLT5kc19yeHN0YXQucnNfa2V5aXggIT0gQVI1S19SWEtFWUlYX0lOVkFMSUQpCisJaWYgKCEocnMtPnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfREVDUllQVCkgJiYKKwkJCXJzLT5yc19rZXlpeCAhPSBBUjVLX1JYS0VZSVhfSU5WQUxJRCkKIAkJcmV0dXJuIFJYX0ZMQUdfREVDUllQVEVEOwogCiAJLyogQXBwYXJlbnRseSB3aGVuIGEgZGVmYXVsdCBrZXkgaXMgdXNlZCB0byBkZWNyeXB0IHRoZSBwYWNrZXQKIAkgICB0aGUgaHcgZG9lcyBub3Qgc2V0IHRoZSBpbmRleCB1c2VkIHRvIGRlY3J5cHQuICBJbiBzdWNoIGNhc2VzCiAJICAgZ2V0IHRoZSBpbmRleCBmcm9tIHRoZSBwYWNrZXQuICovCiAJaWYgKChsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSAmJgotCQkJIShkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfREVDUllQVCkgJiYKKwkJCSEocnMtPnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfREVDUllQVCkgJiYKIAkJCXNrYi0+bGVuID49IGhsZW4gKyA0KSB7CiAJCWtleWl4ID0gc2tiLT5kYXRhW2hsZW4gKyAzXSA+PiA2OwogCkBAIC0xNjUyLDI4ICsxNzE2LDYyIEBACiAKIAogc3RhdGljIHZvaWQKLWF0aDVrX2NoZWNrX2lic3NfaHdfbWVyZ2Uoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2F0aDVrX2NoZWNrX2lic3NfdHNmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4cykKIHsKKwl1NjQgdHNmLCBiY190c3RhbXA7CiAJdTMyIGh3X3R1OwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGE7CiAKLQlpZiAoKG1nbXQtPmZyYW1lX2NvbnRyb2wgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0KKwlpZiAoKGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09CiAJCUlFRUU4MDIxMV9GVFlQRV9NR01UICYmCi0JICAgIChtZ210LT5mcmFtZV9jb250cm9sICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09CisJICAgIChsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PQogCQlJRUVFODAyMTFfU1RZUEVfQkVBQ09OICYmCi0JICAgIG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gJiBXTEFOX0NBUEFCSUxJVFlfSUJTUyAmJgorCSAgICBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvKSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTICYmCiAJICAgIG1lbWNtcChtZ210LT5ic3NpZCwgc2MtPmFoLT5haF9ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKIAkJLyoKLQkJICogUmVjZWl2ZWQgYW4gSUJTUyBiZWFjb24gd2l0aCB0aGUgc2FtZSBCU1NJRC4gSGFyZHdhcmUgbWlnaHQKLQkJICogaGF2ZSB1cGRhdGVkIHRoZSBUU0YsIGNoZWNrIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRpbWVycy4KKwkJICogUmVjZWl2ZWQgYW4gSUJTUyBiZWFjb24gd2l0aCB0aGUgc2FtZSBCU1NJRC4gSGFyZHdhcmUgKm11c3QqCisJCSAqIGhhdmUgdXBkYXRlZCB0aGUgbG9jYWwgVFNGLiBXZSBoYXZlIHRvIHdvcmsgYXJvdW5kIHZhcmlvdXMKKwkJICogaGFyZHdhcmUgYnVncywgdGhvdWdoLi4uCiAJCSAqLwotCQlod190dSA9IFRTRl9UT19UVShhdGg1a19od19nZXRfdHNmNjQoc2MtPmFoKSk7Ci0JCWlmIChod190dSA+PSBzYy0+bmV4dHRidHQpIHsKLQkJCWF0aDVrX2JlYWNvbl91cGRhdGVfdGltZXJzKHNjLAotCQkJCW1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCk7CisJCXRzZiA9IGF0aDVrX2h3X2dldF90c2Y2NChzYy0+YWgpOworCQliY190c3RhbXAgPSBsZTY0X3RvX2NwdShtZ210LT51LmJlYWNvbi50aW1lc3RhbXApOworCQlod190dSA9IFRTRl9UT19UVSh0c2YpOworCisJCUFUSDVLX0RCR19VTkxJTUlUKHNjLCBBVEg1S19ERUJVR19CRUFDT04sCisJCQkiYmVhY29uICVsbHggbWFjdGltZSAlbGx4IChkaWZmICVsbGQpIHRzZiBub3cgJWxseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYmNfdHN0YW1wLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeHMtPm1hY3RpbWUsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKShyeHMtPm1hY3RpbWUgLSBiY190c3RhbXApLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0c2YpOworCisJCS8qCisJCSAqIFNvbWV0aW1lcyB0aGUgSFcgd2lsbCBnaXZlIHVzIGEgd3JvbmcgdHN0YW1wIGluIHRoZSByeAorCQkgKiBzdGF0dXMsIGNhdXNpbmcgdGhlIHRpbWVzdGFtcCBleHRlbnNpb24gdG8gZ28gd3JvbmcuCisJCSAqIChUaGlzIHNlZW1zIHRvIGhhcHBlbiBlc3BlY2lhbGx5IHdpdGggYmVhY29uIGZyYW1lcyBiaWdnZXIKKwkJICogdGhhbiA3OCBieXRlIChpbmNsLiBGQ1MpKQorCQkgKiBCdXQgd2Uga25vdyB0aGF0IHRoZSByZWNlaXZlIHRpbWVzdGFtcCBtdXN0IGJlIGxhdGVyIHRoYW4gdGhlCisJCSAqIHRpbWVzdGFtcCBvZiB0aGUgYmVhY29uIHNpbmNlIEhXIG11c3QgaGF2ZSBzeW5jZWQgdG8gdGhhdC4KKwkJICoKKwkJICogTk9URTogaGVyZSB3ZSBhc3N1bWUgbWFjdGltZSB0byBiZSBhZnRlciB0aGUgZnJhbWUgd2FzCisJCSAqIHJlY2VpdmVkLCBub3QgbGlrZSBtYWM4MDIxMSB3aGljaCBkZWZpbmVzIGl0IGF0IHRoZSBzdGFydC4KKwkJICovCisJCWlmIChiY190c3RhbXAgPiByeHMtPm1hY3RpbWUpIHsKIAkJCUFUSDVLX0RCR19VTkxJTUlUKHNjLCBBVEg1S19ERUJVR19CRUFDT04sCi0JCQkJImRldGVjdGVkIEhXIG1lcmdlIGZyb20gcmVjZWl2ZWQgYmVhY29uXG4iKTsKKwkJCQkiZml4aW5nIG1hY3RpbWUgZnJvbSAlbGx4IHRvICVsbHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeHMtPm1hY3RpbWUsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0c2YpOworCQkJcnhzLT5tYWN0aW1lID0gdHNmOwogCQl9CisKKwkJLyoKKwkJICogTG9jYWwgVFNGIG1pZ2h0IGhhdmUgbW92ZWQgaGlnaGVyIHRoYW4gb3VyIGJlYWNvbiB0aW1lcnMsCisJCSAqIGluIHRoYXQgY2FzZSB3ZSBoYXZlIHRvIHVwZGF0ZSB0aGVtIHRvIGNvbnRpbnVlIHNlbmRpbmcKKwkJICogYmVhY29ucy4gVGhpcyBhbHNvIHRha2VzIGNhcmUgb2Ygc3luY2hyb25pemluZyBiZWFjb24gc2VuZGluZworCQkgKiB0aW1lcyB3aXRoIG90aGVyIHN0YXRpb25zLgorCQkgKi8KKwkJaWYgKGh3X3R1ID49IHNjLT5uZXh0dGJ0dCkKKwkJCWF0aDVrX2JlYWNvbl91cGRhdGVfdGltZXJzKHNjLCBiY190c3RhbXApOwogCX0KIH0KIApAQCAtMTY4MiwxMiArMTc4MCwxMSBAQAogYXRoNWtfdGFza2xldF9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhzID0ge307CisJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyBycyA9IHt9OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9ICh2b2lkICopZGF0YTsKIAlzdHJ1Y3QgYXRoNWtfYnVmICpiZjsKIAlzdHJ1Y3QgYXRoNWtfZGVzYyAqZHM7Ci0JdTE2IGxlbjsKLQl1OCBzdGF0OwogCWludCByZXQ7CiAJaW50IGhkcmxlbjsKIAlpbnQgcGFkOwpAQCAtMTcxMCwyNCArMTgwNywyNCBAQAogCQlpZiAodW5saWtlbHkoZHMtPmRzX2xpbmsgPT0gYmYtPmRhZGRyKSkgLyogdGhpcyBpcyB0aGUgZW5kICovCiAJCQlicmVhazsKIAotCQlyZXQgPSBzYy0+YWgtPmFoX3Byb2NfcnhfZGVzYyhzYy0+YWgsIGRzKTsKKwkJcmV0ID0gc2MtPmFoLT5haF9wcm9jX3J4X2Rlc2Moc2MtPmFoLCBkcywgJnJzKTsKIAkJaWYgKHVubGlrZWx5KHJldCA9PSAtRUlOUFJPR1JFU1MpKQogCQkJYnJlYWs7CiAJCWVsc2UgaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJCUFUSDVLX0VSUihzYywgImVycm9yIGluIHByb2Nlc3NpbmcgcnggZGVzY3JpcHRvclxuIik7CisJCQlzcGluX3VubG9jaygmc2MtPnJ4YnVmbG9jayk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAodW5saWtlbHkoZHMtPmRzX3J4c3RhdC5yc19tb3JlKSkgeworCQlpZiAodW5saWtlbHkocnMucnNfbW9yZSkpIHsKIAkJCUFUSDVLX1dBUk4oc2MsICJ1bnN1cHBvcnRlZCBqdW1ib1xuIik7CiAJCQlnb3RvIG5leHQ7CiAJCX0KIAotCQlzdGF0ID0gZHMtPmRzX3J4c3RhdC5yc19zdGF0dXM7Ci0JCWlmICh1bmxpa2VseShzdGF0KSkgewotCQkJaWYgKHN0YXQgJiBBUjVLX1JYRVJSX1BIWSkKKwkJaWYgKHVubGlrZWx5KHJzLnJzX3N0YXR1cykpIHsKKwkJCWlmIChycy5yc19zdGF0dXMgJiBBUjVLX1JYRVJSX1BIWSkKIAkJCQlnb3RvIG5leHQ7Ci0JCQlpZiAoc3RhdCAmIEFSNUtfUlhFUlJfREVDUllQVCkgeworCQkJaWYgKHJzLnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfREVDUllQVCkgewogCQkJCS8qCiAJCQkJICogRGVjcnlwdCBlcnJvci4gIElmIHRoZSBlcnJvciBvY2N1cnJlZAogCQkJCSAqIGJlY2F1c2UgdGhlcmUgd2FzIG5vIGhhcmR3YXJlIGtleSwgdGhlbgpAQCAtMTczOCwzMCArMTgzNSwyOSBAQAogCQkJCSAqCiAJCQkJICogWFhYIGRvIGtleSBjYWNoZSBmYXVsdGluZwogCQkJCSAqLwotCQkJCWlmIChkcy0+ZHNfcnhzdGF0LnJzX2tleWl4ID09Ci0JCQkJCQlBUjVLX1JYS0VZSVhfSU5WQUxJRCAmJgotCQkJCQkJIShzdGF0ICYgQVI1S19SWEVSUl9DUkMpKQorCQkJCWlmIChycy5yc19rZXlpeCA9PSBBUjVLX1JYS0VZSVhfSU5WQUxJRCAmJgorCQkJCSAgICAhKHJzLnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfQ1JDKSkKIAkJCQkJZ290byBhY2NlcHQ7CiAJCQl9Ci0JCQlpZiAoc3RhdCAmIEFSNUtfUlhFUlJfTUlDKSB7CisJCQlpZiAocnMucnNfc3RhdHVzICYgQVI1S19SWEVSUl9NSUMpIHsKIAkJCQlyeHMuZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CiAJCQkJZ290byBhY2NlcHQ7CiAJCQl9CiAKIAkJCS8qIGxldCBjcnlwdG8tZXJyb3IgcGFja2V0cyBmYWxsIHRocm91Z2ggaW4gTU5UUiAqLwotCQkJaWYgKChzdGF0ICYgfihBUjVLX1JYRVJSX0RFQ1JZUFR8QVI1S19SWEVSUl9NSUMpKSB8fAorCQkJaWYgKChycy5yc19zdGF0dXMgJgorCQkJCX4oQVI1S19SWEVSUl9ERUNSWVBUfEFSNUtfUlhFUlJfTUlDKSkgfHwKIAkJCQkJc2MtPm9wbW9kZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKQogCQkJCWdvdG8gbmV4dDsKIAkJfQogYWNjZXB0OgotCQlsZW4gPSBkcy0+ZHNfcnhzdGF0LnJzX2RhdGFsZW47Ci0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzYy0+cGRldiwgYmYtPnNrYmFkZHIsIGxlbiwKLQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2MtPnBkZXYsIGJmLT5za2JhZGRyLAorCQkJCXJzLnJzX2RhdGFsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5za2JhZGRyLCBzYy0+cnhidWZzaXplLAogCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWJmLT5za2IgPSBOVUxMOwogCi0JCXNrYl9wdXQoc2tiLCBsZW4pOworCQlza2JfcHV0KHNrYiwgcnMucnNfZGF0YWxlbik7CiAKIAkJLyoKIAkJICogdGhlIGhhcmR3YXJlIGFkZHMgYSBwYWRkaW5nIHRvIDQgYnl0ZSBib3VuZGFyaWVzIGJldHdlZW4KQEAgLTE3ODMsMTMgKzE4NzksMjMgQEAKIAkJICogMTViaXQgb25seS4gdGhhdCBtZWFucyBUU0YgZXh0ZW5zaW9uIGhhcyB0byBiZSBkb25lIHdpdGhpbgogCQkgKiAzMjc2OHVzZWMgKGFib3V0IDMybXMpLiBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gbW92ZSB0aGlzIHRvCiAJCSAqIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgbGlrZSBpdCBpcyBkb25lIGluIG1hZHdpZmkuCisJCSAqCisJCSAqIFVuZm9ydHVuYXRlbHkgd2UgZG9uJ3Qga25vdyB3aGVuIHRoZSBoYXJkd2FyZSB0YWtlcyB0aGUgcngKKwkJICogdGltZXN0YW1wIChiZWdpbm5pbmcgb2YgcGh5IGZyYW1lLCBkYXRhIGZyYW1lLCBlbmQgb2Ygcng/KS4KKwkJICogVGhlIG9ubHkgdGhpbmcgd2Uga25vdyBpcyB0aGF0IGl0IGlzIGhhcmR3YXJlIHNwZWNpZmljLi4uCisJCSAqIE9uIEFSNTIxMyBpdCBzZWVtcyB0aGUgcnggdGltZXN0YW1wIGlzIGF0IHRoZSBlbmQgb2YgdGhlCisJCSAqIGZyYW1lLCBidXQgaSdtIG5vdCBzdXJlLgorCQkgKgorCQkgKiBOT1RFOiBtYWM4MDIxMSBkZWZpbmVzIG1hY3RpbWUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QKKwkJICogZGF0YSBzeW1ib2wuIFNpbmNlIHdlIGRvbid0IGhhdmUgYW55IHRpbWUgcmVmZXJlbmNlcyBpdCdzCisJCSAqIGltcG9zc2libGUgdG8gY29tcGx5IHRvIHRoYXQuIFRoaXMgYWZmZWN0cyBJQlNTIG1lcmdlIG9ubHkKKwkJICogcmlnaHQgbm93LCBzbyBpdCdzIG5vdCB0b28gYmFkLi4uCiAJCSAqLwotCQlyeHMubWFjdGltZSA9IGF0aDVrX2V4dGVuZF90c2Yoc2MtPmFoLCBkcy0+ZHNfcnhzdGF0LnJzX3RzdGFtcCk7CisJCXJ4cy5tYWN0aW1lID0gYXRoNWtfZXh0ZW5kX3RzZihzYy0+YWgsIHJzLnJzX3RzdGFtcCk7CiAJCXJ4cy5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsKIAotCQlyeHMuZnJlcSA9IHNjLT5jdXJjaGFuLT5mcmVxOwotCQlyeHMuY2hhbm5lbCA9IHNjLT5jdXJjaGFuLT5jaGFuOwotCQlyeHMucGh5bW9kZSA9IHNjLT5jdXJtb2RlOworCQlyeHMuZnJlcSA9IHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcTsKKwkJcnhzLmJhbmQgPSBzYy0+Y3VyYmFuZC0+YmFuZDsKIAogCQkvKgogCQkgKiBzaWduYWwgcXVhbGl0eToKQEAgLTE3OTksMjUgKzE5MDUsMjUgQEAKIAkJLyogbm9pc2UgZmxvb3IgaW4gZEJtLCBmcm9tIHRoZSBsYXN0IG5vaXNlIGNhbGlicmF0aW9uICovCiAJCXJ4cy5ub2lzZSA9IHNjLT5haC0+YWhfbm9pc2VfZmxvb3I7CiAJCS8qIHNpZ25hbCBsZXZlbCBpbiBkQm0gKi8KLQkJcnhzLnNzaSA9IHJ4cy5ub2lzZSArIGRzLT5kc19yeHN0YXQucnNfcnNzaTsKKwkJcnhzLnNzaSA9IHJ4cy5ub2lzZSArIHJzLnJzX3Jzc2k7CiAJCS8qCiAJCSAqICJzaWduYWwiIGlzIGFjdHVhbGx5IGRpc3BsYXllZCBhcyBMaW5rIFF1YWxpdHkgYnkgaXdjb25maWcKIAkJICogd2UgcHJvdmlkZSBhIHBlcmNlbnRhZ2UgYmFzZWQgb24gcnNzaSAoYXNzdW1pbmcgbWF4IHJzc2kgNjQpCiAJCSAqLwotCQlyeHMuc2lnbmFsID0gZHMtPmRzX3J4c3RhdC5yc19yc3NpICogMTAwIC8gNjQ7CisJCXJ4cy5zaWduYWwgPSBycy5yc19yc3NpICogMTAwIC8gNjQ7CiAKLQkJcnhzLmFudGVubmEgPSBkcy0+ZHNfcnhzdGF0LnJzX2FudGVubmE7Ci0JCXJ4cy5yYXRlID0gZHMtPmRzX3J4c3RhdC5yc19yYXRlOwotCQlyeHMuZmxhZyB8PSBhdGg1a19yeF9kZWNyeXB0ZWQoc2MsIGRzLCBza2IpOworCQlyeHMuYW50ZW5uYSA9IHJzLnJzX2FudGVubmE7CisJCXJ4cy5yYXRlX2lkeCA9IGF0aDVrX2h3X3RvX2RyaXZlcl9yaXgoc2MsIHJzLnJzX3JhdGUpOworCQlyeHMuZmxhZyB8PSBhdGg1a19yeF9kZWNyeXB0ZWQoc2MsIGRzLCBza2IsICZycyk7CiAKIAkJYXRoNWtfZGVidWdfZHVtcF9za2Ioc2MsIHNrYiwgIlJYICAiLCAwKTsKIAogCQkvKiBjaGVjayBiZWFjb25zIGluIElCU1MgbW9kZSAqLwogCQlpZiAoc2MtPm9wbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQotCQkJYXRoNWtfY2hlY2tfaWJzc19od19tZXJnZShzYywgc2tiKTsKKwkJCWF0aDVrX2NoZWNrX2lic3NfdHNmKHNjLCBza2IsICZyeHMpOwogCiAJCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCAmcnhzKTsKLQkJc2MtPmxlZF9yeHJhdGUgPSBkcy0+ZHNfcnhzdGF0LnJzX3JhdGU7CisJCXNjLT5sZWRfcnhyYXRlID0gcnMucnNfcmF0ZTsKIAkJYXRoNWtfbGVkX2V2ZW50KHNjLCBBVEhfTEVEX1JYKTsKIG5leHQ6CiAJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJnNjLT5yeGJ1Zik7CkBAIC0xODM2LDYgKzE5NDIsNyBAQAogYXRoNWtfdHhfcHJvY2Vzc3Eoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX3R4cSAqdHhxKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHR4cyA9IHt9OworCXN0cnVjdCBhdGg1a190eF9zdGF0dXMgdHMgPSB7fTsKIAlzdHJ1Y3QgYXRoNWtfYnVmICpiZiwgKmJmMDsKIAlzdHJ1Y3QgYXRoNWtfZGVzYyAqZHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE4NDgsNyArMTk1NSw3IEBACiAJCS8qIFRPRE8gb25seSBvbmUgc2VnbWVudCAqLwogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2MtPnBkZXYsIHNjLT5kZXNjX2RhZGRyLAogCQkJCXNjLT5kZXNjX2xlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJcmV0ID0gc2MtPmFoLT5haF9wcm9jX3R4X2Rlc2Moc2MtPmFoLCBkcyk7CisJCXJldCA9IHNjLT5haC0+YWhfcHJvY190eF9kZXNjKHNjLT5haCwgZHMsICZ0cyk7CiAJCWlmICh1bmxpa2VseShyZXQgPT0gLUVJTlBST0dSRVNTKSkKIAkJCWJyZWFrOwogCQllbHNlIGlmICh1bmxpa2VseShyZXQpKSB7CkBAIC0xODYzLDE3ICsxOTcwLDE2IEBACiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAKIAkJdHhzLmNvbnRyb2wgPSBiZi0+Y3RsOwotCQl0eHMucmV0cnlfY291bnQgPSBkcy0+ZHNfdHhzdGF0LnRzX3Nob3J0cmV0cnkgKwotCQkJZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnkgLyA2OwotCQlpZiAodW5saWtlbHkoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMpKSB7CisJCXR4cy5yZXRyeV9jb3VudCA9IHRzLnRzX3Nob3J0cmV0cnkgKyB0cy50c19sb25ncmV0cnkgLyA2OworCQlpZiAodW5saWtlbHkodHMudHNfc3RhdHVzKSkgewogCQkJc2MtPmxsX3N0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50Kys7Ci0JCQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBUjVLX1RYRVJSX1hSRVRSWSkKKwkJCWlmICh0cy50c19zdGF0dXMgJiBBUjVLX1RYRVJSX1hSRVRSWSkKIAkJCQl0eHMuZXhjZXNzaXZlX3JldHJpZXMgPSAxOwotCQkJZWxzZSBpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBUjVLX1RYRVJSX0ZJTFQpCisJCQllbHNlIGlmICh0cy50c19zdGF0dXMgJiBBUjVLX1RYRVJSX0ZJTFQpCiAJCQkJdHhzLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfVFhfRklMVEVSRUQ7CiAJCX0gZWxzZSB7CiAJCQl0eHMuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7Ci0JCQl0eHMuYWNrX3NpZ25hbCA9IGRzLT5kc190eHN0YXQudHNfcnNzaTsKKwkJCXR4cy5hY2tfc2lnbmFsID0gdHMudHNfcnNzaTsKIAkJfQogCiAJCWllZWU4MDIxMV90eF9zdGF0dXMoc2MtPmh3LCBza2IsICZ0eHMpOwpAQCAtMTk1MiwxMCArMjA1OCwxMSBAQAogCX0KIAogCWRzLT5kc19kYXRhID0gYmYtPnNrYmFkZHI7Ci0JcmV0ID0gYWgtPmFoX3NldHVwX3R4X2Rlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCisJcmV0ID0gYWgtPmFoX3NldHVwX3R4X2Rlc2MoYWgsIGRzLCBza2ItPmxlbiwKIAkJCWllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYiksCi0JCQlBUjVLX1BLVF9UWVBFX0JFQUNPTiwgKGN0bC0+cG93ZXJfbGV2ZWwgKiAyKSwgY3RsLT50eF9yYXRlLCAxLAotCQkJQVI1S19UWEtFWUlYX0lOVkFMSUQsIGFudGVubmEsIGZsYWdzLCAwLCAwKTsKKwkJCUFSNUtfUEtUX1RZUEVfQkVBQ09OLCAoc2MtPnBvd2VyX2xldmVsICogMiksCisJCQljdGwtPnR4X3JhdGUtPmh3X3ZhbHVlLCAxLCBBUjVLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCWFudGVubmEsIGZsYWdzLCAwLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bm1hcDsKIApAQCAtMjA0Niw3ICsyMTUzLDcgQEAKICAqIGJlYWNvbiB0aW1lciByZWdpc3RlcnMuCiAgKgogICogVGhpcyBpcyBjYWxsZWQgaW4gYSB2YXJpZXR5IG9mIHNpdHVhdGlvbnMsIGUuZy4gd2hlbiBhIGJlYWNvbiBpcyByZWNlaXZlZCwKLSAqIHdoZW4gYSBIVyBtZXJnZSBoYXMgYmVlbiBkZXRlY3RlZCwgYnV0IGFsc28gd2hlbiBhbiBuZXcgSUJTUyBpcyBjcmVhdGVkIG9yCisgKiB3aGVuIGEgVFNGIHVwZGF0ZSBoYXMgYmVlbiBkZXRlY3RlZCwgYnV0IGFsc28gd2hlbiBhbiBuZXcgSUJTUyBpcyBjcmVhdGVkIG9yCiAgKiB3aGVuIHdlIG90aGVyd2lzZSBrbm93IHdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0aW1lcnMsIGJ1dCB3ZSBrZWVwIGl0IGluIHRoaXMKICAqIGZ1bmN0aW9uIHRvIGhhdmUgaXQgYWxsIHRvZ2V0aGVyIGluIG9uZSBwbGFjZS4KICAqLwpAQCAtMjEyNiw4ICsyMjMzLDkgQEAKIAkJCSJ1cGRhdGVkIHRpbWVycyBiYXNlZCBvbiBiZWFjb24gVFNGXG4iKTsKIAogCUFUSDVLX0RCR19VTkxJTUlUKHNjLCBBVEg1S19ERUJVR19CRUFDT04sCi0JCSJiY190c2YgJWxseCBod190c2YgJWxseCBiY190dSAldSBod190dSAldSBuZXh0dGJ0dCAldVxuIiwKLQkJYmNfdHNmLCBod190c2YsIGJjX3R1LCBod190dSwgbmV4dHRidHQpOworCQkJICAiYmNfdHNmICVsbHggaHdfdHNmICVsbHggYmNfdHUgJXUgaHdfdHUgJXUgbmV4dHRidHQgJXVcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJjX3RzZiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaHdfdHNmLCBiY190dSwgaHdfdHUsIG5leHR0YnR0KTsKIAlBVEg1S19EQkdfVU5MSU1JVChzYywgQVRINUtfREVCVUdfQkVBQ09OLCAiaW50dmFsICV1ICVzICVzXG4iLAogCQlpbnR2YWwgJiBBUjVLX0JFQUNPTl9QRVJJT0QsCiAJCWludHZhbCAmIEFSNUtfQkVBQ09OX0VOQSA/ICJBUjVLX0JFQUNPTl9FTkEiIDogIiIsCkBAIC0yMTQ1LDcgKzIyNTMsNyBAQAogICogYW5vdGhlciBBUCB0byBhc3NvY2lhdGUgd2l0aC4KICAqCiAgKiBJbiBJQlNTIG1vZGUgd2UgdXNlIGEgc2VsZi1saW5rZWQgdHggZGVzY3JpcHRvciBpZiBwb3NzaWJsZS4gV2UgZW5hYmxlIFNXQkEKLSAqIGludGVycnVwdHMgdG8gZGV0ZWN0IEhXIG1lcmdlcyBvbmx5LgorICogaW50ZXJydXB0cyB0byBkZXRlY3QgVFNGIHVwZGF0ZXMgb25seS4KICAqCiAgKiBBUCBtb2RlIGlzIG1pc3NpbmcuCiAgKi8KQEAgLTIxNjUsNyArMjI3Myw3IEBACiAJCSAqIGhhcmR3YXJlIHNlbmQgdGhlIGJlYWNvbnMgYXV0b21hdGljYWxseS4gV2UgaGF2ZSB0byBsb2FkIGl0CiAJCSAqIG9ubHkgb25jZSBoZXJlLgogCQkgKiBXZSB1c2UgdGhlIFNXQkEgaW50ZXJydXB0IG9ubHkgdG8ga2VlcCB0cmFjayBvZiB0aGUgYmVhY29uCi0JCSAqIHRpbWVycyBpbiBvcmRlciB0byBkZXRlY3QgSFcgbWVyZ2VzIChhdXRvbWF0aWMgVFNGIHVwZGF0ZXMpLgorCQkgKiB0aW1lcnMgaW4gb3JkZXIgdG8gZGV0ZWN0IGF1dG9tYXRpYyBUU0YgdXBkYXRlcy4KIAkJICovCiAJCWF0aDVrX2JlYWNvbnFfY29uZmlnKHNjKTsKIApAQCAtMjIwNiw3ICsyMzE0LDggQEAKIAkgKiBiZSBmb2xsb3dlZCBieSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYXBwcm9wcmlhdGUgYml0cwogCSAqIGFuZCB0aGVuIHNldHVwIG9mIHRoZSBpbnRlcnJ1cHQgbWFzay4KIAkgKi8KLQlzYy0+Y3VyY2hhbiA9IHNjLT5ody0+Y29uZi5jaGFuOworCXNjLT5jdXJjaGFuID0gc2MtPmh3LT5jb25mLmNoYW5uZWw7CisJc2MtPmN1cmJhbmQgPSAmc2MtPnNiYW5kc1tzYy0+Y3VyY2hhbi0+YmFuZF07CiAJcmV0ID0gYXRoNWtfaHdfcmVzZXQoc2MtPmFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgZmFsc2UpOwogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKHNjLCAidW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOiAlZFxuIiwgcmV0KTsKQEAgLTIyMzMsNyArMjM0Miw4IEBACiAJICogRW5hYmxlIGludGVycnVwdHMuCiAJICovCiAJc2MtPmltYXNrID0gQVI1S19JTlRfUlggfCBBUjVLX0lOVF9UWCB8IEFSNUtfSU5UX1JYRU9MIHwKLQkJQVI1S19JTlRfUlhPUk4gfCBBUjVLX0lOVF9GQVRBTCB8IEFSNUtfSU5UX0dMT0JBTDsKKwkJQVI1S19JTlRfUlhPUk4gfCBBUjVLX0lOVF9GQVRBTCB8IEFSNUtfSU5UX0dMT0JBTCB8CisJCUFSNUtfSU5UX01JQjsKIAogCWF0aDVrX2h3X3NldF9pbnRyKHNjLT5haCwgc2MtPmltYXNrKTsKIAkvKiBTZXQgYWNrIHRvIGJlIHNlbnQgYXQgbG93IGJpdC1yYXRlcyAqLwpAQCAtMjM3NywxOCArMjQ4NywxOSBAQAogCQkJCSoKIAkJCQkqIEluIElCU1MgbW9kZSB3ZSB1c2UgdGhpcyBpbnRlcnJ1cHQganVzdCB0bwogCQkJCSoga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBUQlRUICh0YXJnZXQgYmVhY29uCi0JCQkJKiB0cmFuc21pc3Npb24gdGltZSkgaW4gb3JkZXIgdG8gZGV0ZWN0IGhhcmR3YXJlCi0JCQkJKiBtZXJnZXMgKFRTRiB1cGRhdGVzKS4KKwkJCQkqIHRyYW5zbWlzc2lvbiB0aW1lKSBpbiBvcmRlciB0byBkZXRlY3Qgd2V0aGVyCisJCQkJKiBhdXRvbWF0aWMgVFNGIHVwZGF0ZXMgaGFwcGVuZWQuCiAJCQkJKi8KIAkJCQlpZiAoc2MtPm9wbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7CiAJCQkJCSAvKiBYWFg6IG9ubHkgaWYgVkVPTCBzdXBwcG9ydGVkICovCiAJCQkJCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoYWgpOwogCQkJCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7CiAJCQkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAotCQkJCQkJIlNXQkEgbmV4dHRidHQ6ICV4IGh3X3R1OiAleCAiCi0JCQkJCQkiVFNGOiAlbGx4XG4iLAotCQkJCQkJc2MtPm5leHR0YnR0LAotCQkJCQkJVFNGX1RPX1RVKHRzZiksIHRzZik7CisJCQkJCQkgICJTV0JBIG5leHR0YnR0OiAleCBod190dTogJXggIgorCQkJCQkJICAiVFNGOiAlbGx4XG4iLAorCQkJCQkJICBzYy0+bmV4dHRidHQsCisJCQkJCQkgIFRTRl9UT19UVSh0c2YpLAorCQkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOwogCQkJCX0gZWxzZSB7CiAJCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKIAkJCQl9CkBAIC0yNDEyLDcgKzI1MjMsMTEgQEAKIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9CTUlTUykgewogCQkJfQogCQkJaWYgKHN0YXR1cyAmIEFSNUtfSU5UX01JQikgewotCQkJCS8qIFRPRE8gKi8KKwkJCQkvKgorCQkJCSAqIFRoZXNlIHN0YXRzIGFyZSBhbHNvIHVzZWQgZm9yIEFOSSBpIHRoaW5rCisJCQkJICogc28gaG93IGFib3V0IHVwZGF0aW5nIHRoZW0gbW9yZSBvZnRlbiA/CisJCQkJICovCisJCQkJYXRoNWtfaHdfdXBkYXRlX21pYl9jb3VudGVycyhhaCwgJnNjLT5sbF9zdGF0cyk7CiAJCQl9CiAJCX0KIAl9IHdoaWxlIChhdGg1a19od19pc19pbnRyX3BlbmRpbmcoYWgpICYmIGNvdW50ZXItLSA+IDApOwpAQCAtMjQ0Miw3ICsyNTU3LDggQEAKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19DQUxJQlJBVEUsICJjaGFubmVsICV1LyV4XG4iLAotCQlzYy0+Y3VyY2hhbi0+Y2hhbiwgc2MtPmN1cmNoYW4tPnZhbCk7CisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEpLAorCQlzYy0+Y3VyY2hhbi0+aHdfdmFsdWUpOwogCiAJaWYgKGF0aDVrX2h3X2dldF9yZl9nYWluKGFoKSA9PSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRSkgewogCQkvKgpAQCAtMjQ1NCw3ICsyNTcwLDggQEAKIAl9CiAJaWYgKGF0aDVrX2h3X3BoeV9jYWxpYnJhdGUoYWgsIHNjLT5jdXJjaGFuKSkKIAkJQVRINUtfRVJSKHNjLCAiY2FsaWJyYXRpb24gb2YgY2hhbm5lbCAldSBmYWlsZWRcbiIsCi0JCQkJc2MtPmN1cmNoYW4tPmNoYW4pOworCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAorCQkJCXNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSkpOwogCiAJbW9kX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhhdGg1a19jYWxpbnRlcnZhbCAqIDEwMDApKSk7CkBAIC0yNTUyLDcgKzI2NjksNyBAQAogCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhK3BhZCwgaGRybGVuKTsKIAl9CiAKLQlzYy0+bGVkX3R4cmF0ZSA9IGN0bC0+dHhfcmF0ZTsKKwlzYy0+bGVkX3R4cmF0ZSA9IGN0bC0+dHhfcmF0ZS0+aHdfdmFsdWU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPnR4YnVmbG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZzYy0+dHhidWYpKSB7CkBAIC0yNTkxLDExICsyNzA4LDYgQEAKIAlpbnQgcmV0OwogCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgInJlc2V0dGluZ1xuIik7Ci0JLyoKLQkgKiBDb252ZXJ0IHRvIGEgaHcgY2hhbm5lbCBkZXNjcmlwdGlvbiB3aXRoIHRoZSBmbGFncwotCSAqIGNvbnN0cmFpbmVkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUuCi0JICovCi0Jc2MtPmN1cmNoYW4gPSBody0+Y29uZi5jaGFuOwogCiAJYXRoNWtfaHdfc2V0X2ludHIoYWgsIDApOwogCWF0aDVrX3R4cV9jbGVhbnVwKHNjKTsKQEAgLTI2ODYsNiArMjc5OCw5IEBACiAJbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7CiB9CiAKKy8qCisgKiBUT0RPOiBQaHkgZGlzYWJsZS9kaXZlcnNpdHkgZXRjCisgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKQEAgLTI2OTMsOSArMjgwOCw5IEBACiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCiAJc2MtPmJpbnR2YWwgPSBjb25mLT5iZWFjb25faW50OwotCWF0aDVrX3NldGN1cm1vZGUoc2MsIGNvbmYtPnBoeW1vZGUpOworCXNjLT5wb3dlcl9sZXZlbCA9IGNvbmYtPnBvd2VyX2xldmVsOwogCi0JcmV0dXJuIGF0aDVrX2NoYW5fc2V0KHNjLCBjb25mLT5jaGFuKTsKKwlyZXR1cm4gYXRoNWtfY2hhbl9zZXQoc2MsIGNvbmYtPmNoYW5uZWwpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yODYzLDcgKzI5NzgsOSBAQAogCiAJc3dpdGNoKGtleS0+YWxnKSB7CiAJY2FzZSBBTEdfV0VQOgotCQlicmVhazsKKwkvKiBYWFg6IGZpeCBoYXJkd2FyZSBlbmNyeXB0aW9uLCBpdHMgbm90IHdvcmtpbmcuIEZvciBub3cKKwkgKiBhbGxvdyBzb2Z0d2FyZSBlbmNyeXB0aW9uICovCisJCS8qIGJyZWFrOyAqLwogCWNhc2UgQUxHX1RLSVA6CiAJY2FzZSBBTEdfQ0NNUDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMjkwMyw2ICszMDIwLDEwIEBACiAJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKKworCS8qIEZvcmNlIHVwZGF0ZSAqLworCWF0aDVrX2h3X3VwZGF0ZV9taWJfY291bnRlcnMoYWgsICZzYy0+bGxfc3RhdHMpOwogCiAJbWVtY3B5KHN0YXRzLCAmc2MtPmxsX3N0YXRzLCBzaXplb2Yoc2MtPmxsX3N0YXRzKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaAppbmRleCA4Mjg3YWU3Li4zYTk3NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCkBAIC04Myw3ICs4Myw3IEBACiAjaWYgQ0hBTl9ERUJVRwogI2RlZmluZSBBVEhfQ0hBTl9NQVgJKDI2KzI2KzI2KzIwMCsyMDApCiAjZWxzZQotI2RlZmluZSBBVEhfQ0hBTl9NQVgJKDE0KzE0KzE0KzI1MisyMCkJLyogWFhYIHdoYXQncyB0aGUgbWF4PyAqLworI2RlZmluZSBBVEhfQ0hBTl9NQVgJKDE0KzE0KzE0KzI1MisyMCkKICNlbmRpZgogCiAvKiBTb2Z0d2FyZSBDYXJyaWVyLCBrZWVwcyB0cmFjayBvZiB0aGUgZHJpdmVyIHN0YXRlCkBAIC05NSwxNSArOTUsMjIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIGxsX3N0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfaHcJKmh3OwkJLyogSUVFRSA4MDIuMTEgY29tbW9uICovCi0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlIG1vZGVzW05VTV9EUklWRVJfTU9ERVNdOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBVEhfQ0hBTl9NQVhdOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZQlyYXRlc1tBUjVLX01BWF9SQVRFUyAqIE5VTV9EUklWRVJfTU9ERVNdOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZQlyYXRlc1tBUjVLX01BWF9SQVRFUyAqIElFRUU4MDIxMV9OVU1fQkFORFNdOwogCWVudW0gaWVlZTgwMjExX2lmX3R5cGVzCW9wbW9kZTsKIAlzdHJ1Y3QgYXRoNWtfaHcJCSphaDsJCS8qIEF0aGVyb3MgSFcgKi8KIAotI2lmIEFUSDVLX0RFQlVHCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZAkJKmN1cmJhbmQ7CisKKwl1OAkJCWFfcmF0ZXM7CisJdTgJCQliX3JhdGVzOworCXU4CQkJZ19yYXRlczsKKwl1OAkJCXhyX3JhdGVzOworCisjaWZkZWYgQ09ORklHX0FUSDVLX0RFQlVHCiAJc3RydWN0IGF0aDVrX2RiZ19pbmZvCWRlYnVnOwkJLyogZGVidWcgaW5mbyAqLwotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0FUSDVLX0RFQlVHICovCiAKIAlzdHJ1Y3QgYXRoNWtfYnVmCSpidWZwdHI7CS8qIGFsbG9jYXRlZCBidWZmZXIgcHRyICovCiAJc3RydWN0IGF0aDVrX2Rlc2MJKmRlc2M7CQkvKiBUWC9SWCBkZXNjcmlwdG9ycyAqLwpAQCAtMTY5LDYgKzE3Niw3IEBACiAJdW5zaWduZWQgaW50CQluZXh0dGJ0dDsJLyogbmV4dCBiZWFjb24gdGltZSBpbiBUVSAqLwogCiAJc3RydWN0IHRpbWVyX2xpc3QJY2FsaWJfdGltOwkvKiBjYWxpYnJhdGlvbiB0aW1lciAqLworCWludCAJCQlwb3dlcl9sZXZlbDsJLyogUmVxdWVzdGVkIHR4IHBvd2VyIGluIGRibSAqLwogfTsKIAogI2RlZmluZSBhdGg1a19od19oYXNic3NpZG1hc2soX2FoKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYwppbmRleCBiYjU4MWVmLi40MWQ1ZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmMKQEAgLTY1LDcgKzY1LDcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoNWtfZGVidWcsIHVpbnQsIDApOwogCiAKLSNpZiBBVEg1S19ERUJVRworI2lmZGVmIENPTkZJR19BVEg1S19ERUJVRwogCiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJyZWcuaCIKQEAgLTIwMCw3ICsyMDAsOCBAQAogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbMTAwXTsKLQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDE2bGx4XG4iLCBhdGg1a19od19nZXRfdHNmNjQoc2MtPmFoKSk7CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JTAxNmxseFxuIiwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYXRoNWtfaHdfZ2V0X3RzZjY0KHNjLT5haCkpOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMTkpOwogfQogCkBAIC0yNzEsNyArMjcyLDggQEAKIAogCXRzZiA9IGF0aDVrX2h3X2dldF90c2Y2NChzYy0+YWgpOwogCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sCi0JCSJUU0ZcdFx0MHglMDE2bGx4XHRUVTogJTA4eFxuIiwgdHNmLCBUU0ZfVE9fVFUodHNmKSk7CisJCSJUU0ZcdFx0MHglMDE2bGx4XHRUVTogJTA4eFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0c2YsIFRTRl9UT19UVSh0c2YpKTsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KQEAgLTM0MCw3ICszNDIsNyBAQAogCXsgQVRINUtfREVCVUdfTEVELAkibGVkIiwJCSJMRUQgbWFtYWdlbWVudCIgfSwKIAl7IEFUSDVLX0RFQlVHX0RVTVBfUlgsCSJkdW1wcngiLAkicHJpbnQgcmVjZWl2ZWQgc2tiIGNvbnRlbnQiIH0sCiAJeyBBVEg1S19ERUJVR19EVU1QX1RYLAkiZHVtcHR4IiwJInByaW50IHRyYW5zbWl0IHNrYiBjb250ZW50IiB9LAotCXsgQVRINUtfREVCVUdfRFVNUE1PREVTLCAiZHVtcG1vZGVzIiwJImR1bXAgbW9kZXMiIH0sCisJeyBBVEg1S19ERUJVR19EVU1QQkFORFMsICJkdW1wYmFuZHMiLAkiZHVtcCBiYW5kcyIgfSwKIAl7IEFUSDVLX0RFQlVHX1RSQUNFLAkidHJhY2UiLAkidHJhY2UgZnVuY3Rpb24gY2FsbHMiIH0sCiAJeyBBVEg1S19ERUJVR19BTlksCSJhbGwiLAkJInNob3cgYWxsIGRlYnVnIGxldmVscyIgfSwKIH07CkBAIC00NTIsNDMgKzQ1NCw2MyBAQAogLyogZnVuY3Rpb25zIHVzZWQgaW4gb3RoZXIgcGxhY2VzICovCiAKIHZvaWQKLWF0aDVrX2RlYnVnX2R1bXBfbW9kZXMoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlcykKK2F0aDVrX2RlYnVnX2R1bXBfYmFuZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKLQl1bnNpZ25lZCBpbnQgbSwgaTsKKwl1bnNpZ25lZCBpbnQgYiwgaTsKIAotCWlmIChsaWtlbHkoIShzYy0+ZGVidWcubGV2ZWwgJiBBVEg1S19ERUJVR19EVU1QTU9ERVMpKSkKKwlpZiAobGlrZWx5KCEoc2MtPmRlYnVnLmxldmVsICYgQVRINUtfREVCVUdfRFVNUEJBTkRTKSkpCiAJCXJldHVybjsKIAotCWZvciAobSA9IDA7IG0gPCBOVU1fRFJJVkVSX01PREVTOyBtKyspIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIk1vZGUgJXU6IGNoYW5uZWxzICVkLCByYXRlcyAlZFxuIiwgbSwKLQkJCQltb2Rlc1ttXS5udW1fY2hhbm5lbHMsIG1vZGVzW21dLm51bV9yYXRlcyk7CisJQlVHX09OKCFzYy0+c2JhbmRzKTsKKworCWZvciAoYiA9IDA7IGIgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiKyspIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZCA9ICZzYy0+c2JhbmRzW2JdOworCQljaGFyIGJuYW1lWzVdOworCQlzd2l0Y2ggKGJhbmQtPmJhbmQpIHsKKwkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgorCQkJc3RyY3B5KGJuYW1lLCAiMiBHSHoiKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCQlzdHJjcHkoYm5hbWUsICI1IEdIeiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQmFuZCBub3Qgc3VwcG9ydGVkOiAlZFxuIiwKKwkJCQliYW5kLT5iYW5kKTsKKwkJCXJldHVybjsKKwkJfQorCQlwcmludGsoS0VSTl9ERUJVRyAiQmFuZCAlczogY2hhbm5lbHMgJWQsIHJhdGVzICVkXG4iLCBibmFtZSwKKwkJCQliYW5kLT5uX2NoYW5uZWxzLCBiYW5kLT5uX2JpdHJhdGVzKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiBjaGFubmVsczpcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbW9kZXNbbV0ubnVtX2NoYW5uZWxzOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBiYW5kLT5uX2NoYW5uZWxzOyBpKyspCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiICAlM2QgJWQgJS40eCAlLjR4XG4iLAotCQkJCQltb2Rlc1ttXS5jaGFubmVsc1tpXS5jaGFuLAotCQkJCQltb2Rlc1ttXS5jaGFubmVsc1tpXS5mcmVxLAotCQkJCQltb2Rlc1ttXS5jaGFubmVsc1tpXS52YWwsCi0JCQkJCW1vZGVzW21dLmNoYW5uZWxzW2ldLmZsYWcpOworCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJCQliYW5kLT5jaGFubmVsc1tpXS5jZW50ZXJfZnJlcSksCisJCQkJCWJhbmQtPmNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxLAorCQkJCQliYW5kLT5jaGFubmVsc1tpXS5od192YWx1ZSwKKwkJCQkJYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiIHJhdGVzOlxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBtb2Rlc1ttXS5udW1fcmF0ZXM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGJhbmQtPm5fYml0cmF0ZXM7IGkrKykKIAkJCXByaW50ayhLRVJOX0RFQlVHICIgICU0ZCAlLjR4ICUuNHggJS40eFxuIiwKLQkJCQkJbW9kZXNbbV0ucmF0ZXNbaV0ucmF0ZSwKLQkJCQkJbW9kZXNbbV0ucmF0ZXNbaV0udmFsLAotCQkJCQltb2Rlc1ttXS5yYXRlc1tpXS5mbGFncywKLQkJCQkJbW9kZXNbbV0ucmF0ZXNbaV0udmFsMik7CisJCQkJCWJhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUsCisJCQkJCWJhbmQtPmJpdHJhdGVzW2ldLmh3X3ZhbHVlLAorCQkJCQliYW5kLT5iaXRyYXRlc1tpXS5mbGFncywKKwkJCQkJYmFuZC0+Yml0cmF0ZXNbaV0uaHdfdmFsdWVfc2hvcnQpOwogCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1hdGg1a19kZWJ1Z19wcmludHJ4YnVmKHN0cnVjdCBhdGg1a19idWYgKmJmLCBpbnQgZG9uZSkKK2F0aDVrX2RlYnVnX3ByaW50cnhidWYoc3RydWN0IGF0aDVrX2J1ZiAqYmYsIGludCBkb25lLAorCQkgICAgICAgc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpCiB7CiAJc3RydWN0IGF0aDVrX2Rlc2MgKmRzID0gYmYtPmRlc2M7CisJc3RydWN0IGF0aDVrX2h3X2FsbF9yeF9kZXNjICpyZCA9ICZkcy0+dWQuZHNfcng7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiUiAoJXAgJWxseCkgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJWNcbiIsCiAJCWRzLCAodW5zaWduZWQgbG9uZyBsb25nKWJmLT5kYWRkciwKLQkJZHMtPmRzX2xpbmssIGRzLT5kc19kYXRhLCBkcy0+ZHNfY3RsMCwgZHMtPmRzX2N0bDEsCi0JCWRzLT5kc19od1swXSwgZHMtPmRzX2h3WzFdLAotCQkhZG9uZSA/ICcgJyA6IChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyA9PSAwKSA/ICcqJyA6ICchJyk7CisJCWRzLT5kc19saW5rLCBkcy0+ZHNfZGF0YSwKKwkJcmQtPnJ4X2N0bC5yeF9jb250cm9sXzAsIHJkLT5yeF9jdGwucnhfY29udHJvbF8xLAorCQlyZC0+dS5yeF9zdGF0LnJ4X3N0YXR1c18wLCByZC0+dS5yeF9zdGF0LnJ4X3N0YXR1c18wLAorCQkhZG9uZSA/ICcgJyA6IChycy0+cnNfc3RhdHVzID09IDApID8gJyonIDogJyEnKTsKIH0KIAogdm9pZApAQCAtNDk2LDYgKzUxOCw3IEBACiB7CiAJc3RydWN0IGF0aDVrX2Rlc2MgKmRzOwogCXN0cnVjdCBhdGg1a19idWYgKmJmOworCXN0cnVjdCBhdGg1a19yeF9zdGF0dXMgcnMgPSB7fTsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKGxpa2VseSghKHNjLT5kZWJ1Zy5sZXZlbCAmIEFUSDVLX0RFQlVHX1JFU0VUKSkpCkBAIC01MDcsOSArNTMwLDkgQEAKIAlzcGluX2xvY2tfYmgoJnNjLT5yeGJ1ZmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cnhidWYsIGxpc3QpIHsKIAkJZHMgPSBiZi0+ZGVzYzsKLQkJc3RhdHVzID0gYWgtPmFoX3Byb2NfcnhfZGVzYyhhaCwgZHMpOworCQlzdGF0dXMgPSBhaC0+YWhfcHJvY19yeF9kZXNjKGFoLCBkcywgJnJzKTsKIAkJaWYgKCFzdGF0dXMpCi0JCQlhdGg1a19kZWJ1Z19wcmludHJ4YnVmKGJmLCBzdGF0dXMgPT0gMCk7CisJCQlhdGg1a19kZWJ1Z19wcmludHJ4YnVmKGJmLCBzdGF0dXMgPT0gMCwgJnJzKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnNjLT5yeGJ1ZmxvY2spOwogfQpAQCAtNTMzLDE5ICs1NTYsMjQgQEAKIH0KIAogdm9pZAotYXRoNWtfZGVidWdfcHJpbnR0eGJ1ZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAotCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYsIGludCBkb25lKQorYXRoNWtfZGVidWdfcHJpbnR0eGJ1ZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfYnVmICpiZikKIHsKIAlzdHJ1Y3QgYXRoNWtfZGVzYyAqZHMgPSBiZi0+ZGVzYzsKKwlzdHJ1Y3QgYXRoNWtfaHdfNTIxMl90eF9kZXNjICp0ZCA9ICZkcy0+dWQuZHNfdHg1MjEyOworCXN0cnVjdCBhdGg1a190eF9zdGF0dXMgdHMgPSB7fTsKKwlpbnQgZG9uZTsKIAogCWlmIChsaWtlbHkoIShzYy0+ZGVidWcubGV2ZWwgJiBBVEg1S19ERUJVR19SRVNFVCkpKQogCQlyZXR1cm47CiAKKwlkb25lID0gc2MtPmFoLT5haF9wcm9jX3R4X2Rlc2Moc2MtPmFoLCBiZi0+ZGVzYywgJnRzKTsKKwogCXByaW50ayhLRVJOX0RFQlVHICJUICglcCAlbGx4KSAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICIKIAkJIiUwOHggJWNcbiIsIGRzLCAodW5zaWduZWQgbG9uZyBsb25nKWJmLT5kYWRkciwgZHMtPmRzX2xpbmssCi0JCWRzLT5kc19kYXRhLCBkcy0+ZHNfY3RsMCwgZHMtPmRzX2N0bDEsCi0JCWRzLT5kc19od1swXSwgZHMtPmRzX2h3WzFdLCBkcy0+ZHNfaHdbMl0sIGRzLT5kc19od1szXSwKLQkJIWRvbmUgPyAnICcgOiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCkgPyAnKicgOiAnIScpOworCQlkcy0+ZHNfZGF0YSwgdGQtPnR4X2N0bC50eF9jb250cm9sXzAsIHRkLT50eF9jdGwudHhfY29udHJvbF8xLAorCQl0ZC0+dHhfY3RsLnR4X2NvbnRyb2xfMiwgdGQtPnR4X2N0bC50eF9jb250cm9sXzMsCisJCXRkLT50eF9zdGF0LnR4X3N0YXR1c18wLCB0ZC0+dHhfc3RhdC50eF9zdGF0dXNfMSwKKwkJZG9uZSA/ICcgJyA6ICh0cy50c19zdGF0dXMgPT0gMCkgPyAnKicgOiAnIScpOwogfQogCi0jZW5kaWYgLyogaWYgQVRINUtfREVCVUcgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVRINUtfREVCVUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oCmluZGV4IGM0ZmQ4YzQuLjJjZjhkMThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmgKQEAgLTYxLDExICs2MSw2IEBACiAjaWZuZGVmIF9BVEg1S19ERUJVR19ICiAjZGVmaW5lIF9BVEg1S19ERUJVR19ICiAKLS8qIHNldCB0aGlzIHRvIDEgZm9yIGRlYnVnZ2luZyBvdXRwdXQgKi8KLSNpZm5kZWYgQVRINUtfREVCVUcKLSNkZWZpbmUgQVRINUtfREVCVUcJMAotI2VuZGlmCi0KIHN0cnVjdCBhdGg1a19zb2Z0YzsKIHN0cnVjdCBhdGg1a19odzsKIHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZTsKQEAgLTk2LDcgKzkxLDcgQEAKICAqIEBBVEg1S19ERUJVR19MRUQ6IGxlZCBtYW5hZ2VtZW50CiAgKiBAQVRINUtfREVCVUdfRFVNUF9SWDogcHJpbnQgcmVjZWl2ZWQgc2tiIGNvbnRlbnQKICAqIEBBVEg1S19ERUJVR19EVU1QX1RYOiBwcmludCB0cmFuc21pdCBza2IgY29udGVudAotICogQEFUSDVLX0RFQlVHX0RVTVBNT0RFUzogZHVtcCBtb2RlcworICogQEFUSDVLX0RFQlVHX0RVTVBCQU5EUzogZHVtcCBiYW5kcwogICogQEFUSDVLX0RFQlVHX1RSQUNFOiB0cmFjZSBmdW5jdGlvbiBjYWxscwogICogQEFUSDVLX0RFQlVHX0FOWTogc2hvdyBhdCBhbnkgZGVidWcgbGV2ZWwKICAqCkBAIC0xMTgsMTIgKzExMywxMiBAQAogCUFUSDVLX0RFQlVHX0xFRAkJPSAweDAwMDAwMDgwLAogCUFUSDVLX0RFQlVHX0RVTVBfUlgJPSAweDAwMDAwMTAwLAogCUFUSDVLX0RFQlVHX0RVTVBfVFgJPSAweDAwMDAwMjAwLAotCUFUSDVLX0RFQlVHX0RVTVBNT0RFUwk9IDB4MDAwMDA0MDAsCisJQVRINUtfREVCVUdfRFVNUEJBTkRTCT0gMHgwMDAwMDQwMCwKIAlBVEg1S19ERUJVR19UUkFDRQk9IDB4MDAwMDEwMDAsCiAJQVRINUtfREVCVUdfQU5ZCQk9IDB4ZmZmZmZmZmYKIH07CiAKLSNpZiBBVEg1S19ERUJVRworI2lmZGVmIENPTkZJR19BVEg1S19ERUJVRwogCiAjZGVmaW5lIEFUSDVLX1RSQUNFKF9zYykgZG8geyBcCiAJaWYgKHVubGlrZWx5KChfc2MpLT5kZWJ1Zy5sZXZlbCAmIEFUSDVLX0RFQlVHX1RSQUNFKSkgXApAQCAtMTU4LDIwICsxNTMsMjAgQEAKIGF0aDVrX2RlYnVnX3ByaW50cnhidWZmcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAogdm9pZAotYXRoNWtfZGVidWdfZHVtcF9tb2RlcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAotCQkJc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2Rlcyk7CithdGg1a19kZWJ1Z19kdW1wX2JhbmRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogCiB2b2lkCiBhdGg1a19kZWJ1Z19kdW1wX3NrYihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgdHgpOwogCiB2b2lkCi1hdGg1a19kZWJ1Z19wcmludHR4YnVmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCi0JCQlzdHJ1Y3QgYXRoNWtfYnVmICpiZiwgaW50IGRvbmUpOworYXRoNWtfZGVidWdfcHJpbnR0eGJ1ZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfYnVmICpiZik7CiAKICNlbHNlIC8qIG5vIGRlYnVnZ2luZyAqLwogCi0jZGVmaW5lIEFUSDVLX1RSQUNFKF9zYykgLyogZW1wdHkgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjZGVmaW5lIEFUSDVLX1RSQUNFKF9zYykgdHlwZWNoZWNrKHN0cnVjdCBhdGg1a19zb2Z0YyAqLCAoX3NjKSkKIAogc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQogQVRINUtfREJHKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBtLCBjb25zdCBjaGFyICpmbXQsIC4uLikge30KQEAgLTE5NiwxNyArMTkxLDE1IEBACiBhdGg1a19kZWJ1Z19wcmludHJ4YnVmZnMoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2h3ICphaCkge30KIAogc3RhdGljIGlubGluZSB2b2lkCi1hdGg1a19kZWJ1Z19kdW1wX21vZGVzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGVzKSB7fQorYXRoNWtfZGVidWdfZHVtcF9iYW5kcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGF0aDVrX2RlYnVnX2R1bXBfc2tiKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCB0eCkge30KIAogc3RhdGljIGlubGluZSB2b2lkCi1hdGg1a19kZWJ1Z19wcmludHR4YnVmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCi0JCQlzdHJ1Y3QgYXRoNWtfYnVmICpiZiwgaW50IGRvbmUpIHt9CithdGg1a19kZWJ1Z19wcmludHR4YnVmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmKSB7fQogCi0jZW5kaWYgLyogaWYgQVRINUtfREVCVUcgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVRINUtfREVCVUcgKi8KIAogI2VuZGlmIC8qIGlmbmRlZiBfQVRINUtfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2h3LmMKaW5kZXggM2E0YmY0MDMuLjg3ZTc4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaHcuYwpAQCAtMSw0ICsxLDQgQEAKLSAvKgorLyoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA3IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KICAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAwNyBNYXR0aGV3IFcuIFMuIEJlbGwgIDxtZW50b3JAbWFkd2lmaS5vcmc+CkBAIC00NSwxNyArNDUsMjEgQEAKIAl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgZW51bSBhdGg1a19wa3RfdHlwZSwgdW5zaWduZWQgaW50LAogCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAogCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBib29sIGF0aDVrX2h3X3NldHVwX3hyX3R4X2Rlc2Moc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICosCitzdGF0aWMgaW50IGF0aDVrX2h3X3NldHVwX3hyX3R4X2Rlc2Moc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICosCiAJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCiAJdW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY180d29yZF90eF9zdGF0dXMoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICopOworc3RhdGljIGludCBhdGg1a19od19wcm9jXzR3b3JkX3R4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKiwgc3RydWN0IGF0aDVrX2Rlc2MgKiwKKwkJCQkJIHN0cnVjdCBhdGg1a190eF9zdGF0dXMgKik7CiBzdGF0aWMgaW50IGF0aDVrX2h3X3NldHVwXzJ3b3JkX3R4X2Rlc2Moc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICosCiAJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIGVudW0gYXRoNWtfcGt0X3R5cGUsIHVuc2lnbmVkIGludCwKIAl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKIAl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgaW50IGF0aDVrX2h3X3Byb2NfMndvcmRfdHhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqKTsKLXN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY19uZXdfcnhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqKTsKLXN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY19vbGRfcnhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqKTsKK3N0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY18yd29yZF90eF9zdGF0dXMoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBhdGg1a19kZXNjICosCisJCQkJCSBzdHJ1Y3QgYXRoNWtfdHhfc3RhdHVzICopOworc3RhdGljIGludCBhdGg1a19od19wcm9jXzUyMTJfcnhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqLAorCQkJCQlzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICopOworc3RhdGljIGludCBhdGg1a19od19wcm9jXzUyMTBfcnhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqLAorCQkJCQlzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICopOwogc3RhdGljIGludCBhdGg1a19od19nZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBhdGg1a19odyAqKTsKIAogc3RhdGljIGludCBhdGg1a19lZXByb21faW5pdChzdHJ1Y3QgYXRoNWtfaHcgKik7CkBAIC04MSwxMiArODUsMTIgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfaHRvY2xvY2sodW5zaWduZWQgaW50IHVzZWMsIGJvb2wgdHVyYm8pCiB7Ci0JcmV0dXJuIHR1cmJvID09IHRydWUgPyAodXNlYyAqIDgwKSA6ICh1c2VjICogNDApOworCXJldHVybiB0dXJibyA/ICh1c2VjICogODApIDogKHVzZWMgKiA0MCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0aDVrX2h3X2Nsb2NrdG9oKHVuc2lnbmVkIGludCBjbG9jaywgYm9vbCB0dXJibykKIHsKLQlyZXR1cm4gdHVyYm8gPT0gdHJ1ZSA/IChjbG9jayAvIDgwKSA6IChjbG9jayAvIDQwKTsKKwlyZXR1cm4gdHVyYm8gPyAoY2xvY2sgLyA4MCkgOiAoY2xvY2sgLyA0MCk7CiB9CiAKIC8qCkBAIC0xMDAsNyArMTA0LDcgQEAKIAogCWZvciAoaSA9IEFSNUtfVFVORV9SRUdJU1RFUl9USU1FT1VUOyBpID4gMDsgaS0tKSB7CiAJCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgcmVnKTsKLQkJaWYgKChpc19zZXQgPT0gdHJ1ZSkgJiYgKGRhdGEgJiBmbGFnKSkKKwkJaWYgKGlzX3NldCAmJiAoZGF0YSAmIGZsYWcpKQogCQkJYnJlYWs7CiAJCWVsc2UgaWYgKChkYXRhICYgZmxhZykgPT0gdmFsKQogCQkJYnJlYWs7CkBAIC0xMTYsMTEgKzEyMCw2OSBAQAogXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKKyAqIFBvd2VyIE9uIFNlbGYgVGVzdCBoZWxwZXIgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCBhdGg1a19od19wb3N0KHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisKKwlpbnQgaSwgYzsKKwl1MTYgY3VyX3JlZzsKKwl1MTYgcmVnc1syXSA9IHtBUjVLX1NUQV9JRDAsIEFSNUtfUEhZKDgpfTsKKwl1MzIgdmFyX3BhdHRlcm47CisJdTMyIHN0YXRpY19wYXR0ZXJuWzRdID0geworCQkweDU1NTU1NTU1LAkweGFhYWFhYWFhLAorCQkweDY2NjY2NjY2LAkweDk5OTk5OTk5CisJfTsKKwl1MzIgaW5pdF92YWw7CisJdTMyIGN1cl92YWw7CisKKwlmb3IgKGMgPSAwOyBjIDwgMjsgYysrKSB7CisKKwkJY3VyX3JlZyA9IHJlZ3NbY107CisJCWluaXRfdmFsID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIGN1cl9yZWcpOworCisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJdmFyX3BhdHRlcm4gPSBpIDw8IDE2IHwgaTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdmFyX3BhdHRlcm4sIGN1cl9yZWcpOworCQkJY3VyX3ZhbCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBjdXJfcmVnKTsKKworCQkJaWYgKGN1cl92YWwgIT0gdmFyX3BhdHRlcm4pIHsKKwkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiUE9TVCBGYWlsZWQgISEhXG4iKTsKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKwkJCX0KKworCQkJLyogRm91bmQgb24gbmRpc3dyYXBwZXIgZHVtcHMgKi8KKwkJCXZhcl9wYXR0ZXJuID0gMHgwMDM5MDgwZjsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdmFyX3BhdHRlcm4sIGN1cl9yZWcpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJdmFyX3BhdHRlcm4gPSBzdGF0aWNfcGF0dGVybltpXTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdmFyX3BhdHRlcm4sIGN1cl9yZWcpOworCQkJY3VyX3ZhbCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBjdXJfcmVnKTsKKworCQkJaWYgKGN1cl92YWwgIT0gdmFyX3BhdHRlcm4pIHsKKwkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiUE9TVCBGYWlsZWQgISEhXG4iKTsKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKwkJCX0KKworCQkJLyogRm91bmQgb24gbmRpc3dyYXBwZXIgZHVtcHMgKi8KKwkJCXZhcl9wYXR0ZXJuID0gMHgwMDNiMDgwZjsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdmFyX3BhdHRlcm4sIGN1cl9yZWcpOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK30KKworLyoKICAqIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgc3VwcG9ydGVkIGFuZCBpbml0aWFsaXplIHRoZSBuZWVkZWQgc3RydWN0cwogICovCiBzdHJ1Y3QgYXRoNWtfaHcgKmF0aDVrX2h3X2F0dGFjaChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1OCBtYWNfdmVyc2lvbikKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7CiAJdTggbWFjW0VUSF9BTEVOXTsKIAlpbnQgcmV0OwogCXUzMiBzcmV2OwpAQCAtMTQwLDkgKzIwMiw2IEBACiAJICogSFcgaW5mb3JtYXRpb24KIAkgKi8KIAotCS8qIEdldCByZWcgZG9tYWluIGZyb20gZWVwcm9tICovCi0JYXRoNWtfZ2V0X3JlZ2RvbWFpbihhaCk7Ci0KIAlhaC0+YWhfb3BfbW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX1NUQTsKIAlhaC0+YWhfcmFkYXIucl9lbmFibGVkID0gQVI1S19UVU5FX1JBREFSX0FMRVJUOwogCWFoLT5haF90dXJibyA9IGZhbHNlOwpAQCAtMTc3LDkgKzIzNiw5IEBACiAJfQogCiAJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQotCQlhaC0+YWhfcHJvY19yeF9kZXNjID0gYXRoNWtfaHdfcHJvY19uZXdfcnhfc3RhdHVzOworCQlhaC0+YWhfcHJvY19yeF9kZXNjID0gYXRoNWtfaHdfcHJvY181MjEyX3J4X3N0YXR1czsKIAllbHNlIGlmIChhaC0+YWhfdmVyc2lvbiA8PSBBUjVLX0FSNTIxMSkKLQkJYWgtPmFoX3Byb2NfcnhfZGVzYyA9IGF0aDVrX2h3X3Byb2Nfb2xkX3J4X3N0YXR1czsKKwkJYWgtPmFoX3Byb2NfcnhfZGVzYyA9IGF0aDVrX2h3X3Byb2NfNTIxMF9yeF9zdGF0dXM7CiAKIAkvKiBCcmluZyBkZXZpY2Ugb3V0IG9mIHNsZWVwIGFuZCByZXNldCBpdCdzIHVuaXRzICovCiAJcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgQVI1S19JTklUX01PREUsIHRydWUpOwpAQCAtMjAzLDE1ICsyNjIsMTkgQEAKIAkJCQlDSEFOTkVMXzJHSFopOwogCiAJLyogUmV0dXJuIG9uIHVuc3Vwb3J0ZWQgY2hpcHMgKHVuc3VwcG9ydGVkIGVlcHJvbSBldGMpICovCi0JaWYoc3JldiA+PSBBUjVLX1NSRVZfVkVSX0FSNTQxNil7CisJaWYgKChzcmV2ID49IEFSNUtfU1JFVl9WRVJfQVI1NDE2KSAmJgorCShzcmV2IDwgQVI1S19TUkVWX1ZFUl9BUjI0MjUpKSB7CiAJCUFUSDVLX0VSUihzYywgIkRldmljZSBub3QgeWV0IHN1cHBvcnRlZC5cbiIpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9mcmVlOworCX0gZWxzZSBpZiAoc3JldiA9PSBBUjVLX1NSRVZfVkVSX0FSMjQyNSkgeworCQlBVEg1S19XQVJOKHNjLCAiU3VwcG9ydCBmb3IgUkYyNDI1IGlzIHVuZGVyIGRldmVsb3BtZW50LlxuIik7CiAJfQogCiAJLyogSWRlbnRpZnkgc2luZ2xlIGNoaXAgc29sdXRpb25zICovCi0JaWYoKHNyZXYgPD0gQVI1S19TUkVWX1ZFUl9BUjU0MTQpICYmCi0JKHNyZXYgPj0gQVI1S19TUkVWX1ZFUl9BUjI0MjQpKSB7CisJaWYgKCgoc3JldiA8PSBBUjVLX1NSRVZfVkVSX0FSNTQxNCkgJiYKKwkoc3JldiA+PSBBUjVLX1NSRVZfVkVSX0FSMjQxMykpIHx8CisJKHNyZXYgPT0gQVI1S19TUkVWX1ZFUl9BUjI0MjUpKSB7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gZmFsc2U7CkBAIC0yMjYsMTUgKzI4OSw4MSBAQAogCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTExMDsKIAl9IGVsc2UgaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwgQVI1S19TUkVWX1JBRF81MTEyKSB7CiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1MTExOwotCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPCBBUjVLX1NSRVZfUkFEX1NDMSkgeworCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExOworCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPCBBUjVLX1NSRVZfUkFEX1NDMCkgeworCiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1MTEyOwotCX0gZWxzZSB7CisKKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwgQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMjsKKwkJfSBlbHNlIHsKKwkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjUxMTJBOworCQl9CisKKwl9IGVsc2UgaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwgQVI1S19TUkVWX1JBRF9TQzEpIHsKKwkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CisJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjUxMTJBOworCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPCBBUjVLX1NSRVZfUkFEX1NDMikgeworCiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1NDEzOworCisJCWlmIChhaC0+YWhfbWFjX3NyZXYgPD0gQVI1S19TUkVWX1ZFUl9BUjU0MjQgJiYKKwkJCWFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfVkVSX0FSMjQyNCkKKwkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjU0MjQ7CisJCWVsc2UKKwkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjUxMTJBOworCS8qCisJICogUmVnaXN0ZXIgcmV0dXJucyAweDQgZm9yIHJhZGlvIHJldmlzaW9uCisJICogc28gYXRoNWtfaHdfcmFkaW9fcmV2aXNpb24gZG9lc24ndCBwYXJzZSB0aGUgdmFsdWUKKwkgKiBjb3JyZWN0bHkuIEZvciBub3cgd2UgYXJlIGJhc2VkIG9uIG1hYydzIHNyZXYgdG8KKwkgKiBpZGVudGlmeSBSRjI0MjUgcmFkaW8uCisJICovCisJfSBlbHNlIGlmIChzcmV2ID09IEFSNUtfU1JFVl9WRVJfQVIyNDI1KSB7CisJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkYyNDI1OworCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyOwogCX0KIAogCWFoLT5haF9waHkgPSBBUjVLX1BIWSgwKTsKIAogCS8qCisJICogSWRlbnRpZnkgQVI1MjEyLWJhc2VkIFBDSS1FIGNhcmRzCisJICogQW5kIHdyaXRlIHNvbWUgaW5pdGlhbCBzZXR0aW5ncy4KKwkgKgorCSAqIChkb2luZyBhICJzdHJpbmdzIiBvbiBuZGlzIGRyaXZlcgorCSAqIC1hcjUyMTEuc3lzLSByZXZlYWxzIHRoZSBmb2xsb3dpbmcKKwkgKiBwY2ktZSByZWxhdGVkIGZ1bmN0aW9uczoKKwkgKgorCSAqIHBjaWVDbG9ja1JlcQorCSAqIHBjaWVSeEVyck5vdGlmeQorCSAqIHBjaWVMMVNLUEVuYWJsZQorCSAqIHBjaWVBc3BtCisJICogcGNpZURpc2FibGVBc3BtT25SZldha2UKKwkgKiBwY2llUG93ZXJTYXZlRW5hYmxlCisJICoKKwkgKiBJIGd1ZXNzIHRoZXNlIHBvaW50IHRvIENsb2NrUmVxIGJ1dAorCSAqIGknbSBub3Qgc3VyZS4pCisJICovCisJaWYgKChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgJiYgKHBkZXYtPmlzX3BjaWUpKSB7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHg5MjQ4ZmMwMCwgMHg0MDgwKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDI0OTI0OTI0LCAweDQwODApOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjgwMDAwMzksIDB4NDA4MCk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHg1MzE2MDgyNCwgMHg0MDgwKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGU1OTgwNTc5LCAweDQwODApOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAxZGVmZmYsIDB4NDA4MCk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgxYWFhYmU0MCwgMHg0MDgwKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGJlMTA1NTU0LCAweDQwODApOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwZTMwMDcsIDB4NDA4MCk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgMHg0MDg0KTsKKwl9CisKKwkvKgorCSAqIFBPU1QKKwkgKi8KKwlyZXQgPSBhdGg1a19od19wb3N0KGFoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJLyoKIAkgKiBHZXQgY2FyZCBjYXBhYmlsaXRpZXMsIHZhbHVlcywgLi4uCiAJICovCiAKQEAgLTI4MCw3ICs0MDksOCBAQAogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpCiB7Ci0JdTMyIHR1cmJvLCBtb2RlLCBjbG9jazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFoLT5haF9zYy0+cGRldjsKKwl1MzIgdHVyYm8sIG1vZGUsIGNsb2NrLCBidXNfZmxhZ3M7CiAJaW50IHJldDsKIAogCXR1cmJvID0gMDsKQEAgLTM1NywxMCArNDg3LDE2IEBACiAJCQkJCUFSNUtfUEhZX1RVUkJPKTsKIAl9CiAKLQkvKiAuLi5yZXNldCBjaGlwc2V0IGFuZCBQQ0kgZGV2aWNlICovCi0JaWYgKGFoLT5haF9zaW5nbGVfY2hpcCA9PSBmYWxzZSAmJiBhdGg1a19od19uaWNfcmVzZXQoYWgsCi0JCQkJQVI1S19SRVNFVF9DVExfQ0hJUCB8IEFSNUtfUkVTRVRfQ1RMX1BDSSkpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXNldCB0aGUgTUFDIENoaXAgKyBQQ0lcbiIpOworCS8qIHJlc2V0aW5nIFBDSSBvbiBQQ0ktRSBjYXJkcyByZXN1bHRzIGNhcmQgdG8gaGFuZworCSAqIGFuZCBhbHdheXMgcmV0dXJuIDB4ZmZmZi4uLiBzbyB3ZSBpbmdvcmUgdGhhdCBmbGFnCisJICogZm9yIFBDSS1FIGNhcmRzICovCisJYnVzX2ZsYWdzID0gKHBkZXYtPmlzX3BjaWUpID8gMCA6IEFSNUtfUkVTRVRfQ1RMX1BDSTsKKworCS8qIFJlc2V0IGNoaXBzZXQgKi8KKwlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8CisJCUFSNUtfUkVTRVRfQ1RMX0JBU0VCQU5EIHwgYnVzX2ZsYWdzKTsKKwlpZiAocmV0KSB7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJmYWlsZWQgdG8gcmVzZXQgdGhlIE1BQyBDaGlwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC00MDUsMTUgKzU0MSwxNSBAQAogCiAJLyogR2V0IHJhdGUgdGFibGVzICovCiAJc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUE6CisJY2FzZSBBUjVLX01PREVfMTFBOgogCQlyZXR1cm4gJmF0aDVrX3J0XzExYTsKLQljYXNlIE1PREVfQVRIRVJPU19UVVJCTzoKKwljYXNlIEFSNUtfTU9ERV8xMUFfVFVSQk86CiAJCXJldHVybiAmYXRoNWtfcnRfdHVyYm87Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUI6CisJY2FzZSBBUjVLX01PREVfMTFCOgogCQlyZXR1cm4gJmF0aDVrX3J0XzExYjsKLQljYXNlIE1PREVfSUVFRTgwMjExRzoKKwljYXNlIEFSNUtfTU9ERV8xMUc6CiAJCXJldHVybiAmYXRoNWtfcnRfMTFnOwotCWNhc2UgTU9ERV9BVEhFUk9TX1RVUkJPRzoKKwljYXNlIEFSNUtfTU9ERV8xMUdfVFVSQk86CiAJCXJldHVybiAmYXRoNWtfcnRfeHI7CiAJfQogCkBAIC00MjcsNiArNTYzLDggQEAKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCisJX19zZXRfYml0KEFUSF9TVEFUX0lOVkFMSUQsIGFoLT5haF9zYy0+c3RhdHVzKTsKKwogCWlmIChhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKIAkJa2ZyZWUoYWgtPmFoX3JmX2JhbmtzKTsKIApAQCAtNDU3LDE1ICs1OTUsMTUgQEAKIAkJZHNfY29lZl9leHAsIGRzX2NvZWZfbWFuLCBjbG9jazsKIAogCWlmICghKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB8fAotCQkhKGNoYW5uZWwtPnZhbCAmIENIQU5ORUxfT0ZETSkpCisJCSEoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pKQogCQlCVUcoKTsKIAogCS8qIFNlZW1zIHRoZXJlIGFyZSB0d28gUExMcywgb25lIGZvciBiYXNlYmFuZCBzYW1wbGluZyBhbmQgb25lCiAJICogZm9yIHR1bmluZy4gVHVuaW5nIGJhc2ViYW5kcyBhcmUgNDAgTUh6IG9yIDgwTUh6IHdoZW4gaW4KIAkgKiB0dXJiby4gKi8KLQljbG9jayA9IGNoYW5uZWwtPnZhbCAmIENIQU5ORUxfVFVSQk8gPyA4MCA6IDQwOworCWNsb2NrID0gY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPID8gODAgOiA0MDsKIAljb2VmX3NjYWxlZCA9ICgoNSAqIChjbG9jayA8PCAyNCkpIC8gMikgLwotCWNoYW5uZWwtPmZyZXE7CisJY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAKIAlmb3IgKGNvZWZfZXhwID0gMzE7IGNvZWZfZXhwID4gMDsgY29lZl9leHAtLSkKIAkJaWYgKChjb2VmX3NjYWxlZCA+PiBjb2VmX2V4cCkgJiAweDEpCkBAIC00OTIsOCArNjMwLDcgQEAKICAqIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24gLSBzZXQgcmF0ZSBkdXJhdGlvbiBkdXJpbmcgaHcgcmVzZXRzCiAgKgogICogQGFoOiB0aGUgJnN0cnVjdCBhdGg1a19odwotICogQGRyaXZlcl9tb2RlOiBvbmUgb2YgZW51bSBpZWVlODAyMTFfcGh5bW9kZSBvciBvdXIgb25lIG9mIG91ciBvd24KLSAqICAgICB2ZW5kb3IgbW9kZXMKKyAqIEBtb2RlOiBvbmUgb2YgZW51bSBhdGg1a19kcml2ZXJfbW9kZQogICoKICAqIFdyaXRlIHRoZSByYXRlIGR1cmF0aW9uIHRhYmxlIGZvciB0aGUgY3VycmVudCBtb2RlIHVwb24gaHcgcmVzZXQuIFRoaXMKICAqIGlzIGEgaGVscGVyIGZvciBhdGg1a19od19yZXNldCgpLiBJdCBzZWVtcyBhbGwgdGhpcyBpcyBkb2luZyBpcyBzZXR0aW5nCkBAIC01MDQsMTkgKzY0MSwyMCBAQAogICoKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oc3RydWN0IGF0aDVrX2h3ICphaCwKLSAgICAgICB1bnNpZ25lZCBpbnQgZHJpdmVyX21vZGUpCisgICAgICAgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKIAljb25zdCBzdHJ1Y3QgYXRoNWtfcmF0ZV90YWJsZSAqcnQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHNyYXRlID0ge307CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBHZXQgcmF0ZSB0YWJsZSBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUgKi8KLQlydCA9IGF0aDVrX2h3X2dldF9yYXRlX3RhYmxlKGFoLAotCQlkcml2ZXJfbW9kZSk7CisJcnQgPSBhdGg1a19od19nZXRfcmF0ZV90YWJsZShhaCwgbW9kZSk7CiAKIAkvKiBXcml0ZSByYXRlIGR1cmF0aW9uIHRhYmxlICovCiAJZm9yIChpID0gMDsgaSA8IHJ0LT5yYXRlX2NvdW50OyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IGF0aDVrX3JhdGUgKnJhdGUsICpjb250cm9sX3JhdGU7CisKIAkJdTMyIHJlZzsKIAkJdTE2IHR4X3RpbWU7CiAKQEAgLTUyNiwxNCArNjY0LDE2IEBACiAJCS8qIFNldCBBQ0sgdGltZW91dCAqLwogCQlyZWcgPSBBUjVLX1JBVEVfRFVSKHJhdGUtPnJhdGVfY29kZSk7CiAKKwkJc3JhdGUuYml0cmF0ZSA9IGNvbnRyb2xfcmF0ZS0+cmF0ZV9rYnBzLzEwMDsKKwogCQkvKiBBbiBBQ0sgZnJhbWUgY29uc2lzdHMgb2YgMTAgYnl0ZXMuIElmIHlvdSBhZGQgdGhlIEZDUywKIAkJICogd2hpY2ggaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oKSBhZGRzLAogCQkgKiBpdHMgMTQgYnl0ZXMuIE5vdGUgd2UgdXNlIHRoZSBjb250cm9sIHJhdGUgYW5kIG5vdCB0aGUKIAkJICogYWN0dWFsIHJhdGUgZm9yIHRoaXMgcmF0ZS4gU2VlIG1hYzgwMjExIHR4LmMKIAkJICogaWVlZTgwMjExX2R1cmF0aW9uKCkgZm9yIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YKIAkJICogd2hhdCByYXRlIHdlIHNob3VsZCBjaG9vc2UgdG8gVFggQUNLcy4gKi8KLQkJdHhfdGltZSA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKHNjLT5odywKLQkJCXNjLT52aWYsIDEwLCBjb250cm9sX3JhdGUtPnJhdGVfa2Jwcy8xMDApOworCQl0eF90aW1lID0gbGUxNl90b19jcHUoaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc2MtPmh3LAorCQkJCQkJCXNjLT52aWYsIDEwLCAmc3JhdGUpKTsKIAogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsIHJlZyk7CiAKQEAgLTU2Niw4ICs3MDYsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKLQl1MzIgZGF0YSwgc19zZXEsIHNfYW50LCBzX2xlZFszXTsKLQl1bnNpZ25lZCBpbnQgaSwgbW9kZSwgZnJlcSwgZWVfbW9kZSwgYW50WzJdLCBkcml2ZXJfbW9kZSA9IC0xOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWgtPmFoX3NjLT5wZGV2OworCXUzMiBkYXRhLCBzX3NlcSwgc19hbnQsIHNfbGVkWzNdLCBkbWFfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaSwgbW9kZSwgZnJlcSwgZWVfbW9kZSwgYW50WzJdOwogCWludCByZXQ7CiAKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwpAQCAtNTgzLDcgKzcyNCw3IEBACiAJICovCiAJLypEQ1UvQW50ZW5uYSBzZWxlY3Rpb24gbm90IGF2YWlsYWJsZSBvbiA1MjEwKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJaWYgKGNoYW5nZV9jaGFubmVsID09IHRydWUpIHsKKwkJaWYgKGNoYW5nZV9jaGFubmVsKSB7CiAJCQkvKiBTZXEgbnVtYmVyIGZvciBxdWV1ZSAwIC1kbyB0aGlzIGZvciBhbGwgcXVldWVzID8gKi8KIAkJCXNfc2VxID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsCiAJCQkJCUFSNUtfUVVFVUVfREZTX1NFUU5VTSgwKSk7CkBAIC01OTcsMTIgKzczOCwxMiBAQAogCXNfbGVkWzFdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0NSKTsKIAlzX2xlZFsyXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0dQSU9ETyk7CiAKLQlpZiAoY2hhbmdlX2NoYW5uZWwgPT0gdHJ1ZSAmJiBhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKKwlpZiAoY2hhbmdlX2NoYW5uZWwgJiYgYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCiAJCWF0aDVrX2h3X2dldF9yZl9nYWluKGFoKTsKIAogCiAJLypXYWtldXAgdGhlIGRldmljZSovCi0JcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgY2hhbm5lbC0+dmFsLCBmYWxzZSk7CisJcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgY2hhbm5lbC0+aHdfdmFsdWUsIGZhbHNlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC02MTgsNDMgKzc1OSw0MCBAQAogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewogCQlpZiAoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTExICYmCiAJCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjUxMTIgJiYKLQkJCWFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTQxMykgeworCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1NDEzICYmCisJCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjI0MTMgJiYKKwkJCWFoLT5haF9yYWRpbyAhPSBBUjVLX1JGMjQyNSkgewogCQkJQVRINUtfRVJSKGFoLT5haF9zYywKIAkJCQkiaW52YWxpZCBwaHkgcmFkaW86ICV1XG4iLCBhaC0+YWhfcmFkaW8pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlzd2l0Y2ggKGNoYW5uZWwtPnZhbCAmIENIQU5ORUxfTU9ERVMpIHsKKwkJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKIAkJY2FzZSBDSEFOTkVMX0E6Ci0JCQltb2RlID0gQVI1S19JTklfVkFMXzExQTsKKwkJCW1vZGUgPSBBUjVLX01PREVfMTFBOwogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl81R0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQkJZHJpdmVyX21vZGUgPSBNT0RFX0lFRUU4MDIxMUE7CiAJCQlicmVhazsKIAkJY2FzZSBDSEFOTkVMX0c6Ci0JCQltb2RlID0gQVI1S19JTklfVkFMXzExRzsKKwkJCW1vZGUgPSBBUjVLX01PREVfMTFHOwogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl8yR0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOwotCQkJZHJpdmVyX21vZGUgPSBNT0RFX0lFRUU4MDIxMUc7CiAJCQlicmVhazsKIAkJY2FzZSBDSEFOTkVMX0I6Ci0JCQltb2RlID0gQVI1S19JTklfVkFMXzExQjsKKwkJCW1vZGUgPSBBUjVLX01PREVfMTFCOwogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl8yR0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQkJZHJpdmVyX21vZGUgPSBNT0RFX0lFRUU4MDIxMUI7CiAJCQlicmVhazsKIAkJY2FzZSBDSEFOTkVMX1Q6Ci0JCQltb2RlID0gQVI1S19JTklfVkFMXzExQV9UVVJCTzsKKwkJCW1vZGUgPSBBUjVLX01PREVfMTFBX1RVUkJPOwogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl81R0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQkJZHJpdmVyX21vZGUgPSBNT0RFX0FUSEVST1NfVFVSQk87CiAJCQlicmVhazsKIAkJLypJcyB0aGlzIG9rIG9uIDUyMTEgdG9vID8qLwogCQljYXNlIENIQU5ORUxfVEc6Ci0JCQltb2RlID0gQVI1S19JTklfVkFMXzExR19UVVJCTzsKKwkJCW1vZGUgPSBBUjVLX01PREVfMTFHX1RVUkJPOwogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl8yR0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOwotCQkJZHJpdmVyX21vZGUgPSBNT0RFX0FUSEVST1NfVFVSQk9HOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0hBTk5FTF9YUjoKIAkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgewpAQCAtNjYyLDE0ICs4MDAsMTMgQEAKIAkJCQkJIlhSIG1vZGUgbm90IGF2YWlsYWJsZSBvbiA1MjExIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQltb2RlID0gQVI1S19JTklfVkFMX1hSOworCQkJbW9kZSA9IEFSNUtfTU9ERV9YUjsKIAkJCWZyZXEgPSBBUjVLX0lOSV9SRkdBSU5fNUdIWjsKIAkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJCWRyaXZlcl9tb2RlID0gTU9ERV9JRUVFODAyMTFBOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIGNoYW5uZWw6ICVkXG4iLCBjaGFubmVsLT5mcmVxKTsKKwkJCQkiaW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtNjk5LDE1ICs4MzYsMjYgQEAKIAkJLyoKIAkJICogV3JpdGUgc29tZSBtb3JlIGluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MKIAkJICovCi0JCWlmIChhaC0+YWhfdmVyc2lvbiA+IEFSNUtfQVI1MjExKXsgLyogZm91bmQgb24gNTIxMysgKi8KKwkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7CiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMmEwMDIsIEFSNUtfUEhZKDExKSk7CiAKLQkJCWlmIChjaGFubmVsLT52YWwgPT0gQ0hBTk5FTF9HKQotCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGY4MGQ4MCwgQVI1S19QSFkoODMpKTsgLyogMHgwMGZjMGVjMCAqLworCQkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlID09IENIQU5ORUxfRykKKwkJCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX1ZFUl9BUjI0MTMpCisJCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGY4MGQ4MCwKKwkJCQkJCUFSNUtfUEhZKDgzKSk7CisJCQkJZWxzZSBpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX1ZFUl9BUjI0MjQpCisJCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDM4MDE0MCwKKwkJCQkJCUFSNUtfUEhZKDgzKSk7CisJCQkJZWxzZSBpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX1ZFUl9BUjI0MjUpCisJCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGZjMGVjMCwKKwkJCQkJCUFSNUtfUEhZKDgzKSk7CisJCQkJZWxzZSAvKiAyNDI1ICovCisJCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGZjMGZjMCwKKwkJCQkJCUFSNUtfUEhZKDgzKSk7CiAJCQllbHNlCi0JCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDAwLCBBUjVLX1BIWSg4MykpOworCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwKKwkJCQkJQVI1S19QSFkoODMpKTsKIAotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMWI1LCAweGEyMjgpOyAvKiAweDAwMDAwOWI1ICovCiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDA5YjUsIDB4YTIyOCk7CiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMGYsIDB4ODA2MCk7CiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMDAsIDB4YTI1NCk7CkBAIC03MjAsNyArODY4LDcgQEAKIAkJCQlBUjVLX1NSRVZfUkFEXzUxMTJBKSB7CiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0NDS1RYQ1RMX1dPUkxELAogCQkJCQlBUjVLX1BIWV9DQ0tUWENUTCk7Ci0JCQlpZiAoY2hhbm5lbC0+dmFsICYgQ0hBTk5FTF81R0haKQorCQkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKQogCQkJCWRhdGEgPSAweGZmYjgxMDIwOwogCQkJZWxzZQogCQkJCWRhdGEgPSAweGZmYjgwZDIwOwpAQCAtNzQwLDcgKzg4OCw3IEBACiAJCSAqIG1hYzgwMjExIGFyZSBpbnRlZ3JhdGVkICovCiAJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgogCQkJYWgtPmFoX3NjLT52aWYgIT0gTlVMTCkKLQkJCWF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oYWgsIGRyaXZlcl9tb2RlKTsKKwkJCWF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oYWgsIG1vZGUpOwogCiAJCS8qCiAJCSAqIFdyaXRlIFJGIHJlZ2lzdGVycwpAQCAtNzU2LDcgKzkwNCw3IEBACiAKIAkJLyogV3JpdGUgT0ZETSB0aW1pbmdzIG9uIDUyMTIqLwogCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKLQkJCWNoYW5uZWwtPnZhbCAmIENIQU5ORUxfT0ZETSkgeworCQkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKIAkJCXJldCA9IGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyhhaCwgY2hhbm5lbCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC03NjUsNyArOTEzLDcgQEAKIAkJLypFbmFibGUvZGlzYWJsZSA4MDIuMTFiIG1vZGUgb24gNTExMQogCQkoZW5hYmxlIDIxMTEgZnJlcXVlbmN5IGNvbnZlcnRlciArIENDSykqLwogCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7Ci0JCQlpZiAoZHJpdmVyX21vZGUgPT0gTU9ERV9JRUVFODAyMTFCKQorCQkJaWYgKG1vZGUgPT0gQVI1S19NT0RFXzExQikKIAkJCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19UWENGRywKIAkJCQkgICAgQVI1S19UWENGR19CX01PREUpOwogCQkJZWxzZQpAQCAtODgzLDEzICsxMDMxLDI0IEBACiAKIAkvKgogCSAqIFNldCBSeC9UeCBETUEgQ29uZmlndXJhdGlvbgotCSAqKHBhc3NpbmcgZG1hIHNpemUgbm90IGF2YWlsYWJsZSBvbiA1MjEwKQorCSAqCisJICogU2V0IG1heGltdW0gRE1BIHNpemUgKDUxMikgZXhjZXB0IGZvciBQQ0ktRSBjYXJkcyBzaW5jZQorCSAqIGl0IGNhdXNlcyByeCBvdmVycnVucyBhbmQgdHggZXJyb3JzICh0ZXN0ZWQgb24gNTQyNCBidXQgc2luY2UKKwkgKiByeCBvdmVycnVucyBhbHNvIG9jY3VyIG9uIDU0MTYvNTQxOCB3aXRoIG1hZHdpZmkgd2Ugc2V0IDEyOAorCSAqIGZvciBhbGwgUENJLUUgY2FyZHMgdG8gYmUgc2FmZSkuCisJICoKKwkgKiBJbiBkdW1wcyB0aGlzIGlzIDEyOCBmb3IgYWxsY2hpcHMuCisJICoKKwkgKiBYWFg6IG5lZWQgdG8gY2hlY2sgNTIxMCBmb3IgdGhpcworCSAqIFRPRE86IENoZWNrIG91dCB0eCB0cmlnZXIgbGV2ZWwsIGl0J3MgYWx3YXlzIDY0IG9uIGR1bXBzIGJ1dCBJCisJICogZ3Vlc3Mgd2UgY2FuIHR3ZWFrIGl0IGFuZCBzZWUgaG93IGl0IGdvZXMgOy0pCiAJICovCisJZG1hX3NpemUgPSAocGRldi0+aXNfcGNpZSkgPyBBUjVLX0RNQVNJWkVfMTI4QiA6IEFSNUtfRE1BU0laRV81MTJCOwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLCBBUjVLX1RYQ0ZHX1NETUFNUiwKLQkJCQlBUjVLX0RNQVNJWkVfNTEyQiB8IEFSNUtfVFhDRkdfRE1BU0laRSk7Ci0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUlhDRkcsIEFSNUtfUlhDRkdfU0RNQU1XLAotCQkJCUFSNUtfRE1BU0laRV81MTJCKTsKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UWENGRywKKwkJCUFSNUtfVFhDRkdfU0RNQU1SLCBkbWFfc2l6ZSk7CisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUlhDRkcsCisJCQlBUjVLX1JYQ0ZHX1NETUFNVywgZG1hX3NpemUpOwogCX0KIAogCS8qCkBAIC05MDMsNyArMTA2Miw3IEBACiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CiAJCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKIAkJCUFSNUtfUEhZX1JYX0RFTEFZX007Ci0JCWRhdGEgPSAoY2hhbm5lbC0+dmFsICYgQ0hBTk5FTF9DQ0spID8KKwkJZGF0YSA9IChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKSA/CiAJCQkoKGRhdGEgPDwgMikgLyAyMikgOiAoZGF0YSAvIDEwKTsKIAogCQl1ZGVsYXkoMTAwICsgZGF0YSk7CkBAIC05MjAsMTEgKzEwNzksMTEgQEAKIAlpZiAoYXRoNWtfaHdfcmVnaXN0ZXJfdGltZW91dChhaCwgQVI1S19QSFlfQUdDQ1RMLAogCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCwgMCwgZmFsc2UpKSB7CiAJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJjYWxpYnJhdGlvbiB0aW1lb3V0ICgldU1IeilcbiIsCi0JCQljaGFubmVsLT5mcmVxKTsKKwkJCWNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JcmV0ID0gYXRoNWtfaHdfbm9pc2VfZmxvb3JfY2FsaWJyYXRpb24oYWgsIGNoYW5uZWwtPmZyZXEpOworCXJldCA9IGF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtOTMyLDcgKzEwOTEsNyBAQAogCiAJLyogQSBhbmQgRyBtb2RlcyBjYW4gdXNlIFFBTSBtb2R1bGF0aW9uIHdoaWNoIHJlcXVpcmVzIGVuYWJsaW5nCiAJICogSSBhbmQgUSBjYWxpYnJhdGlvbi4gRG9uJ3QgYm90aGVyIGluIEIgbW9kZS4gKi8KLQlpZiAoIShkcml2ZXJfbW9kZSA9PSBNT0RFX0lFRUU4MDIxMUIpKSB7CisJaWYgKCEobW9kZSA9PSBBUjVLX01PREVfMTFCKSkgewogCQlhaC0+YWhfY2FsaWJyYXRpb24gPSB0cnVlOwogCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9JUSwKIAkJCQlBUjVLX1BIWV9JUV9DQUxfTlVNX0xPR19NQVgsIDE1KTsKQEAgLTk3OSw2ICsxMTM4LDggQEAKIAogCS8qCiAJICogU2V0IHRoZSAzMk1IeiByZWZlcmVuY2UgY2xvY2sgb24gNTIxMiBwaHkgY2xvY2sgc2xlZXAgcmVnaXN0ZXIKKwkgKgorCSAqIFRPRE86IEZpbmQgb3V0IGhvdyB0byBzd2l0Y2ggdG8gZXh0ZXJuYWwgMzJLaHogY2xvY2sgdG8gc2F2ZSBwb3dlcgogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDUl8zMk1IWiwgQVI1S19QSFlfU0NSKTsKQEAgLTk4Niw5ICsxMTQ3LDE1IEBACiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NBTF8zMk1IWiwgQVI1S19QSFlfU0NBTCk7CiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NMT0NLXzMyTUhaLCBBUjVLX1BIWV9TQ0xPQ0spOwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NERUxBWV8zMk1IWiwgQVI1S19QSFlfU0RFTEFZKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEgPwotCQkJQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExIDogQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyLAotCQkJQVI1S19QSFlfU1BFTkRJTkcpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF9waHlfc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKKwl9CisKKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDEwMGFhLCAweDgxMTgpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDMyMTAsIDB4ODExYyk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDA1MiwgMHg4MTA4KTsKKwkJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfVkVSX0FSMjQxMykKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwNCwgMHg4MTIwKTsKIAl9CiAKIAkvKgpAQCAtMTA2Myw3ICsxMjMwLDcgQEAKIAkJc3RhaWQgJj0gfkFSNUtfU1RBX0lEMV9ERUZBVUxUX0FOVEVOTkE7CiAJCS8qIGZhbGx0aHJvdWdoICovCiAJY2FzZSBBUjVLX1BNX05FVFdPUktfU0xFRVA6Ci0JCWlmIChzZXRfY2hpcCA9PSB0cnVlKQorCQlpZiAoc2V0X2NoaXApCiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCiAJCQkJQVI1S19TTEVFUF9DVExfU0xFIHwgc2xlZXBfZHVyYXRpb24sCiAJCQkJQVI1S19TTEVFUF9DVEwpOwpAQCAtMTA3Miw3ICsxMjM5LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEFSNUtfUE1fRlVMTF9TTEVFUDoKLQkJaWYgKHNldF9jaGlwID09IHRydWUpCisJCWlmIChzZXRfY2hpcCkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19TTEVFUF9DVExfU0xFX1NMUCwKIAkJCQlBUjVLX1NMRUVQX0NUTCk7CiAKQEAgLTEwODAsNyArMTI0Nyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBBUjVLX1BNX0FXQUtFOgotCQlpZiAoc2V0X2NoaXAgPT0gZmFsc2UpCisJCWlmICghc2V0X2NoaXApCiAJCQlnb3RvIGNvbW1pdDsKIAogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfU0xFRVBfQ1RMX1NMRV9XQUtFLApAQCAtMTM4Nyw3ICsxNTU0LDcgQEAKIAl0cmlnZ2VyX2xldmVsID0gQVI1S19SRUdfTVMoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVFhDRkcpLAogCQkJQVI1S19UWENGR19UWEZVTEwpOwogCi0JaWYgKGluY3JlYXNlID09IGZhbHNlKSB7CisJaWYgKCFpbmNyZWFzZSkgewogCQlpZiAoLS10cmlnZ2VyX2xldmVsIDwgQVI1S19UVU5FX01JTl9UWF9GSUZPX1RIUkVTKQogCQkJZ290byBkb25lOwogCX0gZWxzZQpAQCAtMTU5MCw5ICsxNzU3LDEwIEBACiAvKgogICogV3JpdGUgdG8gZWVwcm9tIC0gY3VycmVudGx5IGRpc2FibGVkLCB1c2UgYXQgeW91ciBvd24gcmlzawogICovCisjaWYgMAogc3RhdGljIGludCBhdGg1a19od19lZXByb21fd3JpdGUoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIG9mZnNldCwgdTE2IGRhdGEpCiB7Ci0jaWYgMAorCiAJdTMyIHN0YXR1cywgdGltZW91dDsKIAogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CkBAIC0xNjM0LDEwICsxODAyLDExIEBACiAJCX0KIAkJdWRlbGF5KDE1KTsKIAl9Ci0jZW5kaWYKKwogCUFUSDVLX0VSUihhaC0+YWhfc2MsICJFRVBST00gV3JpdGUgaXMgZGlzYWJsZWQhIik7CiAJcmV0dXJuIC1FSU87CiB9CisjZW5kaWYKIAogLyoKICAqIFRyYW5zbGF0ZSBiaW5hcnkgY2hhbm5lbCByZXByZXNlbnRhdGlvbiBpbiBFRVBST00gdG8gZnJlcXVlbmN5CkBAIC0yMDQzLDUwICsyMjEyLDYgQEAKIH0KIAogLyoKLSAqIFJlYWQvV3JpdGUgcmVndWxhdG9yeSBkb21haW4KLSAqLwotc3RhdGljIGJvb2wgYXRoNWtfZWVwcm9tX3JlZ3VsYXRpb25fZG9tYWluKHN0cnVjdCBhdGg1a19odyAqYWgsIGJvb2wgd3JpdGUsCi0JZW51bSBhdGg1a19yZWdkb20gKnJlZ2RvbWFpbikKLXsKLQl1MTYgZWVfcmVnZG9tYWluOwotCi0JLyogUmVhZCBjdXJyZW50IHZhbHVlICovCi0JaWYgKHdyaXRlICE9IHRydWUpIHsKLQkJZWVfcmVnZG9tYWluID0gYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX3JlZ2RvbWFpbjsKLQkJKnJlZ2RvbWFpbiA9IGF0aDVrX3JlZ2RvbV90b19pZWVlKGVlX3JlZ2RvbWFpbik7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCWVlX3JlZ2RvbWFpbiA9IGF0aDVrX3JlZ2RvbV9mcm9tX2llZWUoKnJlZ2RvbWFpbik7Ci0KLQkvKiBUcnkgdG8gd3JpdGUgYSBuZXcgdmFsdWUgKi8KLQlpZiAoYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX3Byb3RlY3QgJgotCQkJQVI1S19FRVBST01fUFJPVEVDVF9XUl8xMjhfMTkxKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGF0aDVrX2h3X2VlcHJvbV93cml0ZShhaCwgQVI1S19FRVBST01fUkVHX0RPTUFJTiwgZWVfcmVnZG9tYWluKSE9MCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX3JlZ2RvbWFpbiA9IGVlX3JlZ2RvbWFpbjsKLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogVXNlIHRoZSBhYm92ZSB0byB3cml0ZSBhIG5ldyByZWd1bGF0b3J5IGRvbWFpbgotICovCi1pbnQgYXRoNWtfaHdfc2V0X3JlZ2RvbWFpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgcmVnZG9tYWluKQotewotCWVudW0gYXRoNWtfcmVnZG9tIGllZWVfcmVnZG9tYWluOwotCi0JaWVlZV9yZWdkb21haW4gPSBhdGg1a19yZWdkb21fdG9faWVlZShyZWdkb21haW4pOwotCi0JaWYgKGF0aDVrX2VlcHJvbV9yZWd1bGF0aW9uX2RvbWFpbihhaCwgdHJ1ZSwgJmllZWVfcmVnZG9tYWluKSA9PSB0cnVlKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlPOwotfQotCi0vKgogICogRmlsbCB0aGUgY2FwYWJpbGl0aWVzIHN0cnVjdAogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X2dldF9jYXBhYmlsaXRpZXMoc3RydWN0IGF0aDVrX2h3ICphaCkKQEAgLTIxMDgsOCArMjIzMyw4IEBACiAJCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JhbmdlLnJhbmdlXzJnaHpfbWF4ID0gMDsKIAogCQkvKiBTZXQgc3VwcG9ydGVkIG1vZGVzICovCi0JCV9fc2V0X2JpdChNT0RFX0lFRUU4MDIxMUEsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwotCQlfX3NldF9iaXQoTU9ERV9BVEhFUk9TX1RVUkJPLCBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKTsKKwkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUEsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOworCQlfX3NldF9iaXQoQVI1S19NT0RFXzExQV9UVVJCTywgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogWFhYIFRoZSB0cmFuY2VpdmVyIHN1cHBvcnRzIGZyZXF1ZW5jaWVzIGZyb20gNDkyMCB0byA2MTAwR0h6CkBAIC0yMTMxLDEyICsyMjU2LDEyIEBACiAJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV81Z2h6X21heCA9IDYxMDA7CiAKIAkJCS8qIFNldCBzdXBwb3J0ZWQgbW9kZXMgKi8KLQkJCV9fc2V0X2JpdChNT0RFX0lFRUU4MDIxMUEsCisJCQlfX3NldF9iaXQoQVI1S19NT0RFXzExQSwKIAkJCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7Ci0JCQlfX3NldF9iaXQoTU9ERV9BVEhFUk9TX1RVUkJPLAorCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUFfVFVSQk8sCiAJCQkJCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwogCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQotCQkJCV9fc2V0X2JpdChNT0RFX0FUSEVST1NfVFVSQk9HLAorCQkJCV9fc2V0X2JpdChBUjVLX01PREVfMTFHX1RVUkJPLAogCQkJCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CiAJCX0KIApAQCAtMjE0OCwxMSArMjI3MywxMSBAQAogCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9tYXggPSAyNzMyOwogCiAJCQlpZiAoQVI1S19FRVBST01fSERSXzExQihlZV9oZWFkZXIpKQotCQkJCV9fc2V0X2JpdChNT0RFX0lFRUU4MDIxMUIsCisJCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUIsCiAJCQkJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKTsKIAogCQkJaWYgKEFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSkKLQkJCQlfX3NldF9iaXQoTU9ERV9JRUVFODAyMTFHLAorCQkJCV9fc2V0X2JpdChBUjVLX01PREVfMTFHLAogCQkJCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CiAJCX0KIAl9CkBAIC0yMjc3LDggKzI0MDIsOCBAQAogCSAqIFNldCBzaW1wbGUgQlNTSUQgbWFzayBvbiA1MjEyCiAJICovCiAJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHhmZmZmZmZmLCBBUjVLX0JTU19JRE0wKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGZmZmZmZmYsIEFSNUtfQlNTX0lETTEpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4ZmZmZmZmZmYsIEFSNUtfQlNTX0lETTApOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4ZmZmZmZmZmYsIEFSNUtfQlNTX0lETTEpOwogCX0KIAogCS8qCkBAIC0yNDIzLDYgKzI1NDgsOCBAQAogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX0RJQUdfU1csIEFSNUtfRElBR19TV19ESVNfUlgpOworCisJLyogVE9ETzogQU5JIFN1cHBvcnQgKi8KIH0KIAogLyoKQEAgLTI0MzIsNiArMjU1OSw4IEBACiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19ESUFHX1NXLCBBUjVLX0RJQUdfU1dfRElTX1JYKTsKKworCS8qIFRPRE86IEFOSSBTdXBwb3J0ICovCiB9CiAKIC8qCkBAIC0yODI2LDE1ICsyOTU1LDE5IEBACiAgKiBVcGRhdGUgbWliIGNvdW50ZXJzIChzdGF0aXN0aWNzKQogICovCiB2b2lkIGF0aDVrX2h3X3VwZGF0ZV9taWJfY291bnRlcnMoc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGF0aDVrX21pYl9zdGF0cyAqc3RhdGlzdGljcykKKwkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgICpzdGF0cykKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOworCiAJLyogUmVhZC1BbmQtQ2xlYXIgKi8KLQlzdGF0aXN0aWNzLT5hY2tyY3ZfYmFkICs9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0FDS19GQUlMKTsKLQlzdGF0aXN0aWNzLT5ydHNfYmFkICs9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1JUU19GQUlMKTsKLQlzdGF0aXN0aWNzLT5ydHNfZ29vZCArPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19SVFNfT0spOwotCXN0YXRpc3RpY3MtPmZjc19iYWQgKz0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfRkNTX0ZBSUwpOwotCXN0YXRpc3RpY3MtPmJlYWNvbnMgKz0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfQkVBQ09OX0NOVCk7CisJc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ICs9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0FDS19GQUlMKTsKKwlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291bnQgKz0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUlRTX0ZBSUwpOworCXN0YXRzLT5kb3QxMVJUU1N1Y2Nlc3NDb3VudCArPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19SVFNfT0spOworCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgKz0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfRkNTX0ZBSUwpOworCisJLyogWFhYOiBTaG91bGQgd2UgdXNlIHRoaXMgdG8gdHJhY2sgYmVhY29uIGNvdW50ID8KKwkgKiAtd2UgcmVhZCBpdCBhbnl3YXkgdG8gY2xlYXIgdGhlIHJlZ2lzdGVyICovCisJYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfQkVBQ09OX0NOVCk7CiAKIAkvKiBSZXNldCBwcm9maWxlIGNvdW50IHJlZ2lzdGVycyBvbiA1MjEyKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKQEAgLTI5MzUsOCArMzA2OCwxNiBAQAogCWZvciAoaSA9IDA7IGkgPCBBUjVLX0tFWUNBQ0hFX1NJWkU7IGkrKykKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAwLCBBUjVLX0tFWVRBQkxFX09GRihlbnRyeSwgaSkpOwogCi0JLyogU2V0IE5VTEwgZW5jcnlwdGlvbiBvbiBub24tNTIxMCovCi0JaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKQorCS8qCisJICogU2V0IE5VTEwgZW5jcnlwdGlvbiBvbiBBUjUyMTIrCisJICoKKwkgKiBOb3RlOiBBUjVLX0tFWVRBQkxFX1RZUEUgLT4gQVI1S19LRVlUQUJMRV9PRkYoZW50cnksIDUpCisJICogICAgICAgQVI1S19LRVlUQUJMRV9UWVBFX05VTEwgLT4gMHgwMDAwMDAwNworCSAqCisJICogTm90ZTI6IFdpbmRvd3MgZHJpdmVyIChuZGlzd3JhcHBlcikgc2V0cyB0aGlzIHRvCisJICogICAgICAgIDB4MDAwMDA3MTQgaW5zdGVhZCBvZiAweDAwMDAwMDA3CisJICovCisJaWYgKGFoLT5haF92ZXJzaW9uID4gQVI1S19BUjUyMTEpCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19LRVlUQUJMRV9UWVBFX05VTEwsCiAJCQkJQVI1S19LRVlUQUJMRV9UWVBFKGVudHJ5KSk7CiAKQEAgLTMxODQsMTkgKzMzMjUsMTkgQEAKIAkJCXJldHVybiAwOwogCiAJCS8qIFNldCBTbG90IHRpbWUgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfdHVyYm8gPT0gdHJ1ZSA/CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3R1cmJvID8KIAkJCUFSNUtfSU5JVF9TTE9UX1RJTUVfVFVSQk8gOiBBUjVLX0lOSVRfU0xPVF9USU1FLAogCQkJQVI1S19TTE9UX1RJTUUpOwogCQkvKiBTZXQgQUNLX0NUUyB0aW1lb3V0ICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3R1cmJvID09IHRydWUgPworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF90dXJibyA/CiAJCQlBUjVLX0lOSVRfQUNLX0NUU19USU1FT1VUX1RVUkJPIDoKIAkJCUFSNUtfSU5JVF9BQ0tfQ1RTX1RJTUVPVVQsIEFSNUtfU0xPVF9USU1FKTsKIAkJLyogU2V0IFRyYW5zbWl0IExhdGVuY3kgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfdHVyYm8gPT0gdHJ1ZSA/CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3R1cmJvID8KIAkJCUFSNUtfSU5JVF9UUkFOU01JVF9MQVRFTkNZX1RVUkJPIDoKIAkJCUFSNUtfSU5JVF9UUkFOU01JVF9MQVRFTkNZLCBBUjVLX1VTRUNfNTIxMCk7CiAJCS8qIFNldCBJRlMwICovCi0JCWlmIChhaC0+YWhfdHVyYm8gPT0gdHJ1ZSkKKwkJaWYgKGFoLT5haF90dXJibykKIAkJCSBhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19JTklUX1NJRlNfVFVSQk8gKwogCQkJCShhaC0+YWhfYWlmcyArIHRxLT50cWlfYWlmcykgKgogCQkJCUFSNUtfSU5JVF9TTE9UX1RJTUVfVFVSQk8pIDw8CkBAIC0zMjA5LDE2ICszMzUwLDE2IEBACiAJCQkJQVI1S19JTklUX1NJRlMsIEFSNUtfSUZTMCk7CiAKIAkJLyogU2V0IElGUzEgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfdHVyYm8gPT0gdHJ1ZSA/CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3R1cmJvID8KIAkJCUFSNUtfSU5JVF9QUk9UT19USU1FX0NOVFJMX1RVUkJPIDoKIAkJCUFSNUtfSU5JVF9QUk9UT19USU1FX0NOVFJMLCBBUjVLX0lGUzEpOwogCQkvKiBTZXQgUEhZIHJlZ2lzdGVyIDB4OTg0NCAoPz8pICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3R1cmJvID09IHRydWUgPworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF90dXJibyA/CiAJCQkoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZKDE3KSkgJiB+MHg3RikgfCAweDM4IDoKIAkJCShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFkoMTcpKSAmIH4weDdGKSB8IDB4MUMsCiAJCQlBUjVLX1BIWSgxNykpOwogCQkvKiBTZXQgRnJhbWUgQ29udHJvbCBSZWdpc3RlciAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF90dXJibyA9PSB0cnVlID8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfdHVyYm8gPwogCQkJKEFSNUtfUEhZX0ZSQU1FX0NUTF9JTkkgfCBBUjVLX1BIWV9UVVJCT19NT0RFIHwKIAkJCUFSNUtfUEhZX1RVUkJPX1NIT1JUIHwgMHgyMDIwKSA6CiAJCQkoQVI1S19QSFlfRlJBTUVfQ1RMX0lOSSB8IDB4MTAyMCksCkBAIC0zMjU3LDcgKzMzOTgsNyBAQAogCS8qCiAJICogQ2FsY3VsYXRlIGFuZCBzZXQgcmV0cnkgbGltaXRzCiAJICovCi0JaWYgKGFoLT5haF9zb2Z0d2FyZV9yZXRyeSA9PSB0cnVlKSB7CisJaWYgKGFoLT5haF9zb2Z0d2FyZV9yZXRyeSkgewogCQkvKiBYWFggTmVlZCB0byB0ZXN0IHRoaXMgKi8KIAkJcmV0cnlfbGcgPSBhaC0+YWhfbGltaXRfdHhfcmV0cmllczsKIAkJcmV0cnlfc2ggPSByZXRyeV9sZyA9IHJldHJ5X2xnID4gQVI1S19EQ1VfUkVUUllfTE1UX1NIX1JFVFJZID8KQEAgLTM1MDUsMTAgKzM2NDYsMTAgQEAKIAl1bnNpZ25lZCBpbnQgcnRzY3RzX3JhdGUsIHVuc2lnbmVkIGludCBydHNjdHNfZHVyYXRpb24pCiB7CiAJdTMyIGZyYW1lX3R5cGU7Ci0Jc3RydWN0IGF0aDVrX2h3XzJ3X3R4X2Rlc2MgKnR4X2Rlc2M7Ci0JdW5zaWduZWQgaW50IGJ1ZmZfbGVuOworCXN0cnVjdCBhdGg1a19od18yd190eF9jdGwgKnR4X2N0bDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfbGVuOwogCi0JdHhfZGVzYyA9IChzdHJ1Y3QgYXRoNWtfaHdfMndfdHhfZGVzYyAqKSZkZXNjLT5kc19jdGwwOworCXR4X2N0bCA9ICZkZXNjLT51ZC5kc190eDUyMTAudHhfY3RsOwogCiAJLyoKIAkgKiBWYWxpZGF0ZSBpbnB1dApAQCAtMzUyNywzMiArMzY2OCwzMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBDbGVhciBzdGF0dXMgZGVzY3JpcHRvciAqLwotCW1lbXNldChkZXNjLT5kc19odywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19od190eF9zdGF0dXMpKTsKLQotCS8qIEluaXRpYWxpemUgY29udHJvbCBkZXNjcmlwdG9yICovCi0JdHhfZGVzYy0+dHhfY29udHJvbF8wID0gMDsKLQl0eF9kZXNjLT50eF9jb250cm9sXzEgPSAwOworCS8qIENsZWFyIGRlc2NyaXB0b3IgKi8KKwltZW1zZXQoJmRlc2MtPnVkLmRzX3R4NTIxMCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19od181MjEwX3R4X2Rlc2MpKTsKIAogCS8qIFNldHVwIGNvbnRyb2wgZGVzY3JpcHRvciAqLwogCiAJLyogVmVyaWZ5IGFuZCBzZXQgZnJhbWUgbGVuZ3RoICovCi0JaWYgKHBrdF9sZW4gJiB+QVI1S18yV19UWF9ERVNDX0NUTDBfRlJBTUVfTEVOKQorCisJLyogcmVtb3ZlIHBhZGRpbmcgd2UgbWlnaHQgaGF2ZSBhZGRlZCBiZWZvcmUgKi8KKwlmcmFtZV9sZW4gPSBwa3RfbGVuIC0gKGhkcl9sZW4gJiAzKSArIEZDU19MRU47CisKKwlpZiAoZnJhbWVfbGVuICYgfkFSNUtfMldfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eF9kZXNjLT50eF9jb250cm9sXzAgPSBwa3RfbGVuICYgQVI1S18yV19UWF9ERVNDX0NUTDBfRlJBTUVfTEVOOworCXR4X2N0bC0+dHhfY29udHJvbF8wID0gZnJhbWVfbGVuICYgQVI1S18yV19UWF9ERVNDX0NUTDBfRlJBTUVfTEVOOwogCiAJLyogVmVyaWZ5IGFuZCBzZXQgYnVmZmVyIGxlbmd0aCAqLwotCWJ1ZmZfbGVuID0gcGt0X2xlbiAtIEZDU19MRU47CiAKIAkvKiBOQjogYmVhY29uJ3MgQnVmTGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCiAJaWYodHlwZSA9PSBBUjVLX1BLVF9UWVBFX0JFQUNPTikKLQkJYnVmZl9sZW4gPSByb3VuZHVwKGJ1ZmZfbGVuLCA0KTsKKwkJcGt0X2xlbiA9IHJvdW5kdXAocGt0X2xlbiwgNCk7CiAKLQlpZiAoYnVmZl9sZW4gJiB+QVI1S18yV19UWF9ERVNDX0NUTDFfQlVGX0xFTikKKwlpZiAocGt0X2xlbiAmIH5BUjVLXzJXX1RYX0RFU0NfQ1RMMV9CVUZfTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMSA9IGJ1ZmZfbGVuICYgQVI1S18yV19UWF9ERVNDX0NUTDFfQlVGX0xFTjsKKwl0eF9jdGwtPnR4X2NvbnRyb2xfMSA9IHBrdF9sZW4gJiBBUjVLXzJXX1RYX0RFU0NfQ1RMMV9CVUZfTEVOOwogCiAJLyoKIAkgKiBWZXJpZnkgYW5kIHNldCBoZWFkZXIgbGVuZ3RoCkBAIC0zNTYxLDcgKzM3MDEsNyBAQAogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewogCQlpZiAoaGRyX2xlbiAmIH5BUjVLXzJXX1RYX0RFU0NfQ1RMMF9IRUFERVJfTEVOKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMCB8PQorCQl0eF9jdGwtPnR4X2NvbnRyb2xfMCB8PQogCQkJQVI1S19SRUdfU00oaGRyX2xlbiwgQVI1S18yV19UWF9ERVNDX0NUTDBfSEVBREVSX0xFTik7CiAJfQogCkBAIC0zNTc3LDE5ICszNzE3LDE5IEBACiAJCQlmcmFtZV90eXBlID0gdHlwZSAvKjw8IDIgPyovOwogCQl9CiAKLQkJdHhfZGVzYy0+dHhfY29udHJvbF8wIHw9CisJCXR4X2N0bC0+dHhfY29udHJvbF8wIHw9CiAJCQlBUjVLX1JFR19TTShmcmFtZV90eXBlLCBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9GUkFNRV9UWVBFKSB8CiAJCQlBUjVLX1JFR19TTSh0eF9yYXRlMCwgQVI1S18yV19UWF9ERVNDX0NUTDBfWE1JVF9SQVRFKTsKIAl9IGVsc2UgewotCQl0eF9kZXNjLT50eF9jb250cm9sXzAgfD0KKwkJdHhfY3RsLT50eF9jb250cm9sXzAgfD0KIAkJCUFSNUtfUkVHX1NNKHR4X3JhdGUwLCBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9YTUlUX1JBVEUpIHwKIAkJCUFSNUtfUkVHX1NNKGFudGVubmFfbW9kZSwgQVI1S18yV19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVCk7Ci0JCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMSB8PQorCQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PQogCQkJQVI1S19SRUdfU00odHlwZSwgQVI1S18yV19UWF9ERVNDX0NUTDFfRlJBTUVfVFlQRSk7CiAJfQogI2RlZmluZSBfVFhfRkxBR1MoX2MsIF9mbGFnKQkJCQkJCVwKIAlpZiAoZmxhZ3MgJiBBUjVLX1RYREVTQ18jI19mbGFnKQkJCQlcCi0JCXR4X2Rlc2MtPnR4X2NvbnRyb2xfIyNfYyB8PQkJCQlcCisJCXR4X2N0bC0+dHhfY29udHJvbF8jI19jIHw9CQkJCVwKIAkJCUFSNUtfMldfVFhfREVTQ19DVEwjI19jIyNfIyNfZmxhZwogCiAJX1RYX0ZMQUdTKDAsIENMUkRNQVNLKTsKQEAgLTM2MDQsOSArMzc0NCw5IEBACiAJICogV0VQIGNyYXAKIAkgKi8KIAlpZiAoa2V5X2luZGV4ICE9IEFSNUtfVFhLRVlJWF9JTlZBTElEKSB7Ci0JCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMCB8PQorCQl0eF9jdGwtPnR4X2NvbnRyb2xfMCB8PQogCQkJQVI1S18yV19UWF9ERVNDX0NUTDBfRU5DUllQVF9LRVlfVkFMSUQ7Ci0JCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMSB8PQorCQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PQogCQkJQVI1S19SRUdfU00oa2V5X2luZGV4LAogCQkJQVI1S18yV19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSU5ERVgpOwogCX0KQEAgLTM2MTYsNyArMzc1Niw3IEBACiAJICovCiAJaWYgKChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgJiYKIAkJCShmbGFncyAmIChBUjVLX1RYREVTQ19SVFNFTkEgfCBBUjVLX1RYREVTQ19DVFNFTkEpKSkKLQkJdHhfZGVzYy0+dHhfY29udHJvbF8xIHw9IHJ0c2N0c19kdXJhdGlvbiAmCisJCXR4X2N0bC0+dHhfY29udHJvbF8xIHw9IHJ0c2N0c19kdXJhdGlvbiAmCiAJCQkJQVI1S18yV19UWF9ERVNDX0NUTDFfUlRTX0RVUkFUSU9OOwogCiAJcmV0dXJuIDA7CkBAIC0zNjMyLDEzICszNzcyLDExIEBACiAJdW5zaWduZWQgaW50IGFudGVubmFfbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgcnRzY3RzX3JhdGUsCiAJdW5zaWduZWQgaW50IHJ0c2N0c19kdXJhdGlvbikKIHsKLQlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfZGVzYyAqdHhfZGVzYzsKLQlzdHJ1Y3QgYXRoNWtfaHdfdHhfc3RhdHVzICp0eF9zdGF0dXM7Ci0JdW5zaWduZWQgaW50IGJ1ZmZfbGVuOworCXN0cnVjdCBhdGg1a19od180d190eF9jdGwgKnR4X2N0bDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfbGVuOwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQl0eF9kZXNjID0gKHN0cnVjdCBhdGg1a19od180d190eF9kZXNjICopJmRlc2MtPmRzX2N0bDA7Ci0JdHhfc3RhdHVzID0gKHN0cnVjdCBhdGg1a19od190eF9zdGF0dXMgKikmZGVzYy0+ZHNfaHdbMl07CisJdHhfY3RsID0gJmRlc2MtPnVkLmRzX3R4NTIxMi50eF9jdGw7CiAKIAkvKgogCSAqIFZhbGlkYXRlIGlucHV0CkBAIC0zNjU3LDQ3ICszNzk1LDQ0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIENsZWFyIHN0YXR1cyBkZXNjcmlwdG9yICovCi0JbWVtc2V0KHR4X3N0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19od190eF9zdGF0dXMpKTsKLQotCS8qIEluaXRpYWxpemUgY29udHJvbCBkZXNjcmlwdG9yICovCi0JdHhfZGVzYy0+dHhfY29udHJvbF8wID0gMDsKLQl0eF9kZXNjLT50eF9jb250cm9sXzEgPSAwOwotCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMiA9IDA7Ci0JdHhfZGVzYy0+dHhfY29udHJvbF8zID0gMDsKKwkvKiBDbGVhciBkZXNjcmlwdG9yICovCisJbWVtc2V0KCZkZXNjLT51ZC5kc190eDUyMTIsIDAsIHNpemVvZihzdHJ1Y3QgYXRoNWtfaHdfNTIxMl90eF9kZXNjKSk7CiAKIAkvKiBTZXR1cCBjb250cm9sIGRlc2NyaXB0b3IgKi8KIAogCS8qIFZlcmlmeSBhbmQgc2V0IGZyYW1lIGxlbmd0aCAqLwotCWlmIChwa3RfbGVuICYgfkFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTikKKworCS8qIHJlbW92ZSBwYWRkaW5nIHdlIG1pZ2h0IGhhdmUgYWRkZWQgYmVmb3JlICovCisJZnJhbWVfbGVuID0gcGt0X2xlbiAtIChoZHJfbGVuICYgMykgKyBGQ1NfTEVOOworCisJaWYgKGZyYW1lX2xlbiAmIH5BUjVLXzRXX1RYX0RFU0NfQ1RMMF9GUkFNRV9MRU4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdHhfZGVzYy0+dHhfY29udHJvbF8wID0gcGt0X2xlbiAmIEFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTjsKKwl0eF9jdGwtPnR4X2NvbnRyb2xfMCA9IGZyYW1lX2xlbiAmIEFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTjsKIAogCS8qIFZlcmlmeSBhbmQgc2V0IGJ1ZmZlciBsZW5ndGggKi8KLQlidWZmX2xlbiA9IHBrdF9sZW4gLSBGQ1NfTEVOOwogCiAJLyogTkI6IGJlYWNvbidzIEJ1ZkxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcyAqLwogCWlmKHR5cGUgPT0gQVI1S19QS1RfVFlQRV9CRUFDT04pCi0JCWJ1ZmZfbGVuID0gcm91bmR1cChidWZmX2xlbiwgNCk7CisJCXBrdF9sZW4gPSByb3VuZHVwKHBrdF9sZW4sIDQpOwogCi0JaWYgKGJ1ZmZfbGVuICYgfkFSNUtfNFdfVFhfREVTQ19DVEwxX0JVRl9MRU4pCisJaWYgKHBrdF9sZW4gJiB+QVI1S180V19UWF9ERVNDX0NUTDFfQlVGX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eF9kZXNjLT50eF9jb250cm9sXzEgPSBidWZmX2xlbiAmIEFSNUtfNFdfVFhfREVTQ19DVEwxX0JVRl9MRU47CisJdHhfY3RsLT50eF9jb250cm9sXzEgPSBwa3RfbGVuICYgQVI1S180V19UWF9ERVNDX0NUTDFfQlVGX0xFTjsKIAotCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMCB8PQorCXR4X2N0bC0+dHhfY29udHJvbF8wIHw9CiAJCUFSNUtfUkVHX1NNKHR4X3Bvd2VyLCBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9YTUlUX1BPV0VSKSB8CiAJCUFSNUtfUkVHX1NNKGFudGVubmFfbW9kZSwgQVI1S180V19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVCk7Ci0JdHhfZGVzYy0+dHhfY29udHJvbF8xIHw9IEFSNUtfUkVHX1NNKHR5cGUsCisJdHhfY3RsLT50eF9jb250cm9sXzEgfD0gQVI1S19SRUdfU00odHlwZSwKIAkJCQkJQVI1S180V19UWF9ERVNDX0NUTDFfRlJBTUVfVFlQRSk7Ci0JdHhfZGVzYy0+dHhfY29udHJvbF8yID0gQVI1S19SRUdfU00odHhfdHJpZXMwICsgQVI1S19UVU5FX0hXVFhUUklFUywKKwl0eF9jdGwtPnR4X2NvbnRyb2xfMiA9IEFSNUtfUkVHX1NNKHR4X3RyaWVzMCArIEFSNUtfVFVORV9IV1RYVFJJRVMsCiAJCQkJCUFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMwKTsKLQl0eF9kZXNjLT50eF9jb250cm9sXzMgPSB0eF9yYXRlMCAmIEFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTA7CisJdHhfY3RsLT50eF9jb250cm9sXzMgPSB0eF9yYXRlMCAmIEFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTA7CiAKICNkZWZpbmUgX1RYX0ZMQUdTKF9jLCBfZmxhZykJCQlcCiAJaWYgKGZsYWdzICYgQVI1S19UWERFU0NfIyNfZmxhZykJXAotCQl0eF9kZXNjLT50eF9jb250cm9sXyMjX2MgfD0JXAorCQl0eF9jdGwtPnR4X2NvbnRyb2xfIyNfYyB8PQlcCiAJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMIyNfYyMjXyMjX2ZsYWcKIAogCV9UWF9GTEFHUygwLCBDTFJETUFTSyk7CkBAIC0zNzEzLDggKzM4NDgsOCBAQAogCSAqIFdFUCBjcmFwCiAJICovCiAJaWYgKGtleV9pbmRleCAhPSBBUjVLX1RYS0VZSVhfSU5WQUxJRCkgewotCQl0eF9kZXNjLT50eF9jb250cm9sXzAgfD0gQVI1S180V19UWF9ERVNDX0NUTDBfRU5DUllQVF9LRVlfVkFMSUQ7Ci0JCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMSB8PSBBUjVLX1JFR19TTShrZXlfaW5kZXgsCisJCXR4X2N0bC0+dHhfY29udHJvbF8wIHw9IEFSNUtfNFdfVFhfREVTQ19DVEwwX0VOQ1JZUFRfS0VZX1ZBTElEOworCQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PSBBUjVLX1JFR19TTShrZXlfaW5kZXgsCiAJCQkJQVI1S180V19UWF9ERVNDX0NUTDFfRU5DUllQVF9LRVlfSU5ERVgpOwogCX0KIApAQCAtMzcyNSw5ICszODYwLDkgQEAKIAkJaWYgKChmbGFncyAmIEFSNUtfVFhERVNDX1JUU0VOQSkgJiYKIAkJCQkoZmxhZ3MgJiBBUjVLX1RYREVTQ19DVFNFTkEpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXR4X2Rlc2MtPnR4X2NvbnRyb2xfMiB8PSBydHNjdHNfZHVyYXRpb24gJgorCQl0eF9jdGwtPnR4X2NvbnRyb2xfMiB8PSBydHNjdHNfZHVyYXRpb24gJgogCQkJCUFSNUtfNFdfVFhfREVTQ19DVEwyX1JUU19EVVJBVElPTjsKLQkJdHhfZGVzYy0+dHhfY29udHJvbF8zIHw9IEFSNUtfUkVHX1NNKHJ0c2N0c19yYXRlLAorCQl0eF9jdGwtPnR4X2NvbnRyb2xfMyB8PSBBUjVLX1JFR19TTShydHNjdHNfcmF0ZSwKIAkJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMM19SVFNfQ1RTX1JBVEUpOwogCX0KIApAQCAtMzczNywxMiArMzg3MiwxMiBAQAogLyoKICAqIEluaXRpYWxpemUgYSA0LXdvcmQgbXVsdGlyYXRlIHR4IGRlc2NyaXB0b3Igb24gNTIxMgogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogYXRoNWtfaHdfc2V0dXBfeHJfdHhfZGVzYyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywKIAl1bnNpZ25lZCBpbnQgdHhfcmF0ZTEsIHVfaW50IHR4X3RyaWVzMSwgdV9pbnQgdHhfcmF0ZTIsIHVfaW50IHR4X3RyaWVzMiwKIAl1bnNpZ25lZCBpbnQgdHhfcmF0ZTMsIHVfaW50IHR4X3RyaWVzMykKIHsKLQlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfZGVzYyAqdHhfZGVzYzsKKwlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsICp0eF9jdGw7CiAKIAkvKgogCSAqIFJhdGVzIGNhbiBiZSAwIGFzIGxvbmcgYXMgdGhlIHJldHJ5IGNvdW50IGlzIDAgdG9vLgpAQCAtMzc1OSwxNCArMzg5NCwxNCBAQAogCX0KIAogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewotCQl0eF9kZXNjID0gKHN0cnVjdCBhdGg1a19od180d190eF9kZXNjICopJmRlc2MtPmRzX2N0bDA7CisJCXR4X2N0bCA9ICZkZXNjLT51ZC5kc190eDUyMTIudHhfY3RsOwogCiAjZGVmaW5lIF9YVFhfVFJJRVMoX24pCQkJCQkJCVwKIAlpZiAodHhfdHJpZXMjI19uKSB7CQkJCQkJXAotCQl0eF9kZXNjLT50eF9jb250cm9sXzIgfD0JCQkJXAorCQl0eF9jdGwtPnR4X2NvbnRyb2xfMiB8PQkJCQlcCiAJCSAgICBBUjVLX1JFR19TTSh0eF90cmllcyMjX24sCQkJCVwKIAkJICAgIEFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMjI19uKTsJCVwKLQkJdHhfZGVzYy0+dHhfY29udHJvbF8zIHw9CQkJCVwKKwkJdHhfY3RsLT50eF9jb250cm9sXzMgfD0JCQkJXAogCQkgICAgQVI1S19SRUdfU00odHhfcmF0ZSMjX24sCQkJCVwKIAkJICAgIEFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURSMjX24pOwkJXAogCX0KQEAgLTM3NzcsMjMgKzM5MTIsMjUgQEAKIAogI3VuZGVmIF9YVFhfVFJJRVMKIAotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDE7CiAJfQogCi0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiAvKgogICogUHJvY2Nlc3MgdGhlIHR4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTAvNTIxMQogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X3Byb2NfMndvcmRfdHhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBhdGg1a19kZXNjICpkZXNjKQorCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywgc3RydWN0IGF0aDVrX3R4X3N0YXR1cyAqdHMpCiB7CisJc3RydWN0IGF0aDVrX2h3XzJ3X3R4X2N0bCAqdHhfY3RsOwogCXN0cnVjdCBhdGg1a19od190eF9zdGF0dXMgKnR4X3N0YXR1czsKLQlzdHJ1Y3QgYXRoNWtfaHdfMndfdHhfZGVzYyAqdHhfZGVzYzsKIAotCXR4X2Rlc2MgPSAoc3RydWN0IGF0aDVrX2h3XzJ3X3R4X2Rlc2MgKikmZGVzYy0+ZHNfY3RsMDsKLQl0eF9zdGF0dXMgPSAoc3RydWN0IGF0aDVrX2h3X3R4X3N0YXR1cyAqKSZkZXNjLT5kc19od1swXTsKKwlBVEg1S19UUkFDRShhaC0+YWhfc2MpOworCisJdHhfY3RsID0gJmRlc2MtPnVkLmRzX3R4NTIxMC50eF9jdGw7CisJdHhfc3RhdHVzID0gJmRlc2MtPnVkLmRzX3R4NTIxMC50eF9zdGF0OwogCiAJLyogTm8gZnJhbWUgaGFzIGJlZW4gc2VuZCBvciBlcnJvciAqLwogCWlmICh1bmxpa2VseSgodHhfc3RhdHVzLT50eF9zdGF0dXNfMSAmIEFSNUtfREVTQ19UWF9TVEFUVVMxX0RPTkUpID09IDApKQpAQCAtMzgwMiwzMiArMzkzOSwzMiBAQAogCS8qCiAJICogR2V0IGRlc2NyaXB0b3Igc3RhdHVzCiAJICovCi0JZGVzYy0+ZHNfdXMudHgudHNfdHN0YW1wID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMCwKKwl0cy0+dHNfdHN0YW1wID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMCwKIAkJQVI1S19ERVNDX1RYX1NUQVRVUzBfU0VORF9USU1FU1RBTVApOwotCWRlc2MtPmRzX3VzLnR4LnRzX3Nob3J0cmV0cnkgPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18wLAorCXRzLT50c19zaG9ydHJldHJ5ID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMCwKIAkJQVI1S19ERVNDX1RYX1NUQVRVUzBfU0hPUlRfUkVUUllfQ09VTlQpOwotCWRlc2MtPmRzX3VzLnR4LnRzX2xvbmdyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX2xvbmdyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX0xPTkdfUkVUUllfQ09VTlQpOwotCS8qVE9ETzogZGVzYy0+ZHNfdXMudHgudHNfdmlydGNvbCArIHRlc3QqLwotCWRlc2MtPmRzX3VzLnR4LnRzX3NlcW51bSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEsCisJLypUT0RPOiB0cy0+dHNfdmlydGNvbCArIHRlc3QqLworCXRzLT50c19zZXFudW0gPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMV9TRVFfTlVNKTsKLQlkZXNjLT5kc191cy50eC50c19yc3NpID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMSwKKwl0cy0+dHNfcnNzaSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMxX0FDS19TSUdfU1RSRU5HVEgpOwotCWRlc2MtPmRzX3VzLnR4LnRzX2FudGVubmEgPSAxOwotCWRlc2MtPmRzX3VzLnR4LnRzX3N0YXR1cyA9IDA7Ci0JZGVzYy0+ZHNfdXMudHgudHNfcmF0ZSA9IEFSNUtfUkVHX01TKHR4X2Rlc2MtPnR4X2NvbnRyb2xfMCwKKwl0cy0+dHNfYW50ZW5uYSA9IDE7CisJdHMtPnRzX3N0YXR1cyA9IDA7CisJdHMtPnRzX3JhdGUgPSBBUjVLX1JFR19NUyh0eF9jdGwtPnR4X2NvbnRyb2xfMCwKIAkJQVI1S18yV19UWF9ERVNDX0NUTDBfWE1JVF9SQVRFKTsKIAogCWlmICgodHhfc3RhdHVzLT50eF9zdGF0dXNfMCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZSQU1FX1hNSVRfT0spID09IDApewogCQlpZiAodHhfc3RhdHVzLT50eF9zdGF0dXNfMCAmCiAJCQkJQVI1S19ERVNDX1RYX1NUQVRVUzBfRVhDRVNTSVZFX1JFVFJJRVMpCi0JCQlkZXNjLT5kc191cy50eC50c19zdGF0dXMgfD0gQVI1S19UWEVSUl9YUkVUUlk7CisJCQl0cy0+dHNfc3RhdHVzIHw9IEFSNUtfVFhFUlJfWFJFVFJZOwogCiAJCWlmICh0eF9zdGF0dXMtPnR4X3N0YXR1c18wICYgQVI1S19ERVNDX1RYX1NUQVRVUzBfRklGT19VTkRFUlJVTikKLQkJCWRlc2MtPmRzX3VzLnR4LnRzX3N0YXR1cyB8PSBBUjVLX1RYRVJSX0ZJRk87CisJCQl0cy0+dHNfc3RhdHVzIHw9IEFSNUtfVFhFUlJfRklGTzsKIAogCQlpZiAodHhfc3RhdHVzLT50eF9zdGF0dXNfMCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZJTFRFUkVEKQotCQkJZGVzYy0+ZHNfdXMudHgudHNfc3RhdHVzIHw9IEFSNUtfVFhFUlJfRklMVDsKKwkJCXRzLT50c19zdGF0dXMgfD0gQVI1S19UWEVSUl9GSUxUOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzgzNywxNCArMzk3NCwxNSBAQAogICogUHJvY2Nlc3MgYSB0eCBkZXNjcmlwdG9yIG9uIDUyMTIKICAqLwogc3RhdGljIGludCBhdGg1a19od19wcm9jXzR3b3JkX3R4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYykKKwkJc3RydWN0IGF0aDVrX2Rlc2MgKmRlc2MsIHN0cnVjdCBhdGg1a190eF9zdGF0dXMgKnRzKQogeworCXN0cnVjdCBhdGg1a19od180d190eF9jdGwgKnR4X2N0bDsKIAlzdHJ1Y3QgYXRoNWtfaHdfdHhfc3RhdHVzICp0eF9zdGF0dXM7Ci0Jc3RydWN0IGF0aDVrX2h3XzR3X3R4X2Rlc2MgKnR4X2Rlc2M7CiAKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCXR4X2Rlc2MgPSAoc3RydWN0IGF0aDVrX2h3XzR3X3R4X2Rlc2MgKikmZGVzYy0+ZHNfY3RsMDsKLQl0eF9zdGF0dXMgPSAoc3RydWN0IGF0aDVrX2h3X3R4X3N0YXR1cyAqKSZkZXNjLT5kc19od1syXTsKKworCXR4X2N0bCA9ICZkZXNjLT51ZC5kc190eDUyMTIudHhfY3RsOworCXR4X3N0YXR1cyA9ICZkZXNjLT51ZC5kc190eDUyMTIudHhfc3RhdDsKIAogCS8qIE5vIGZyYW1lIGhhcyBiZWVuIHNlbmQgb3IgZXJyb3IgKi8KIAlpZiAodW5saWtlbHkoKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMV9ET05FKSA9PSAwKSkKQEAgLTM4NTMsNDIgKzM5OTEsNDIgQEAKIAkvKgogCSAqIEdldCBkZXNjcmlwdG9yIHN0YXR1cwogCSAqLwotCWRlc2MtPmRzX3VzLnR4LnRzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NFTkRfVElNRVNUQU1QKTsKLQlkZXNjLT5kc191cy50eC50c19zaG9ydHJldHJ5ID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMCwKKwl0cy0+dHNfc2hvcnRyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NIT1JUX1JFVFJZX0NPVU5UKTsKLQlkZXNjLT5kc191cy50eC50c19sb25ncmV0cnkgPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18wLAorCXRzLT50c19sb25ncmV0cnkgPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18wLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9MT05HX1JFVFJZX0NPVU5UKTsKLQlkZXNjLT5kc191cy50eC50c19zZXFudW0gPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAorCXRzLT50c19zZXFudW0gPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMV9TRVFfTlVNKTsKLQlkZXNjLT5kc191cy50eC50c19yc3NpID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMSwKKwl0cy0+dHNfcnNzaSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMxX0FDS19TSUdfU1RSRU5HVEgpOwotCWRlc2MtPmRzX3VzLnR4LnRzX2FudGVubmEgPSAodHhfc3RhdHVzLT50eF9zdGF0dXNfMSAmCisJdHMtPnRzX2FudGVubmEgPSAodHhfc3RhdHVzLT50eF9zdGF0dXNfMSAmCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMxX1hNSVRfQU5URU5OQSkgPyAyIDogMTsKLQlkZXNjLT5kc191cy50eC50c19zdGF0dXMgPSAwOworCXRzLT50c19zdGF0dXMgPSAwOwogCiAJc3dpdGNoIChBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAogCQkJQVI1S19ERVNDX1RYX1NUQVRVUzFfRklOQUxfVFNfSU5ERVgpKSB7CiAJY2FzZSAwOgotCQlkZXNjLT5kc191cy50eC50c19yYXRlID0gdHhfZGVzYy0+dHhfY29udHJvbF8zICYKKwkJdHMtPnRzX3JhdGUgPSB0eF9jdGwtPnR4X2NvbnRyb2xfMyAmCiAJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUwOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWRlc2MtPmRzX3VzLnR4LnRzX3JhdGUgPSBBUjVLX1JFR19NUyh0eF9kZXNjLT50eF9jb250cm9sXzMsCisJCXRzLT50c19yYXRlID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzMsCiAJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUxKTsKLQkJZGVzYy0+ZHNfdXMudHgudHNfbG9uZ3JldHJ5ICs9QVI1S19SRUdfTVModHhfZGVzYy0+dHhfY29udHJvbF8yLAorCQl0cy0+dHNfbG9uZ3JldHJ5ICs9IEFSNUtfUkVHX01TKHR4X2N0bC0+dHhfY29udHJvbF8yLAogCQkJQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzEpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWRlc2MtPmRzX3VzLnR4LnRzX3JhdGUgPSBBUjVLX1JFR19NUyh0eF9kZXNjLT50eF9jb250cm9sXzMsCisJCXRzLT50c19yYXRlID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzMsCiAJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUyKTsKLQkJZGVzYy0+ZHNfdXMudHgudHNfbG9uZ3JldHJ5ICs9QVI1S19SRUdfTVModHhfZGVzYy0+dHhfY29udHJvbF8yLAorCQl0cy0+dHNfbG9uZ3JldHJ5ICs9IEFSNUtfUkVHX01TKHR4X2N0bC0+dHhfY29udHJvbF8yLAogCQkJQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzIpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCWRlc2MtPmRzX3VzLnR4LnRzX3JhdGUgPSBBUjVLX1JFR19NUyh0eF9kZXNjLT50eF9jb250cm9sXzMsCisJCXRzLT50c19yYXRlID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzMsCiAJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUzKTsKLQkJZGVzYy0+ZHNfdXMudHgudHNfbG9uZ3JldHJ5ICs9QVI1S19SRUdfTVModHhfZGVzYy0+dHhfY29udHJvbF8yLAorCQl0cy0+dHNfbG9uZ3JldHJ5ICs9IEFSNUtfUkVHX01TKHR4X2N0bC0+dHhfY29udHJvbF8yLAogCQkJQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzMpOwogCQlicmVhazsKIAl9CkBAIC0zODk2LDEzICs0MDM0LDEzIEBACiAJaWYgKCh0eF9zdGF0dXMtPnR4X3N0YXR1c18wICYgQVI1S19ERVNDX1RYX1NUQVRVUzBfRlJBTUVfWE1JVF9PSykgPT0gMCl7CiAJCWlmICh0eF9zdGF0dXMtPnR4X3N0YXR1c18wICYKIAkJCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9FWENFU1NJVkVfUkVUUklFUykKLQkJCWRlc2MtPmRzX3VzLnR4LnRzX3N0YXR1cyB8PSBBUjVLX1RYRVJSX1hSRVRSWTsKKwkJCXRzLT50c19zdGF0dXMgfD0gQVI1S19UWEVSUl9YUkVUUlk7CiAKIAkJaWYgKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMF9GSUZPX1VOREVSUlVOKQotCQkJZGVzYy0+ZHNfdXMudHgudHNfc3RhdHVzIHw9IEFSNUtfVFhFUlJfRklGTzsKKwkJCXRzLT50c19zdGF0dXMgfD0gQVI1S19UWEVSUl9GSUZPOwogCiAJCWlmICh0eF9zdGF0dXMtPnR4X3N0YXR1c18wICYgQVI1S19ERVNDX1RYX1NUQVRVUzBfRklMVEVSRUQpCi0JCQlkZXNjLT5kc191cy50eC50c19zdGF0dXMgfD0gQVI1S19UWEVSUl9GSUxUOworCQkJdHMtPnRzX3N0YXR1cyB8PSBBUjVLX1RYRVJSX0ZJTFQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zOTE4LDMxICs0MDU2LDI3IEBACiBpbnQgYXRoNWtfaHdfc2V0dXBfcnhfZGVzYyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywKIAkJCXUzMiBzaXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGF0aDVrX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJc3RydWN0IGF0aDVrX2h3X3J4X2N0bCAqcnhfY3RsOwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlyeF9kZXNjID0gKHN0cnVjdCBhdGg1a19yeF9kZXNjICopJmRlc2MtPmRzX2N0bDA7CisJcnhfY3RsID0gJmRlc2MtPnVkLmRzX3J4LnJ4X2N0bDsKIAogCS8qCi0JICpDbGVhciBkc19odworCSAqIENsZWFyIHRoZSBkZXNjcmlwdG9yCiAJICogSWYgd2UgZG9uJ3QgY2xlYW4gdGhlIHN0YXR1cyBkZXNjcmlwdG9yLAogCSAqIHdoaWxlIHNjYW5uaW5nIHdlIGdldCB0b28gbWFueSByZXN1bHRzLAogCSAqIG1vc3Qgb2YgdGhlbSB2aXJ0dWFsLCBhZnRlciBzb21lIHNlY3MKIAkgKiBvZiBzY2FubmluZyBzeXN0ZW0gaGFuZ3MuIE0uRi4KIAkqLwotCW1lbXNldChkZXNjLT5kc19odywgMCwgc2l6ZW9mKGRlc2MtPmRzX2h3KSk7Ci0KLQkvKkluaXRpYWxpemUgcnggZGVzY3JpcHRvciovCi0JcnhfZGVzYy0+cnhfY29udHJvbF8wID0gMDsKLQlyeF9kZXNjLT5yeF9jb250cm9sXzEgPSAwOworCW1lbXNldCgmZGVzYy0+dWQuZHNfcngsIDAsIHNpemVvZihzdHJ1Y3QgYXRoNWtfaHdfYWxsX3J4X2Rlc2MpKTsKIAogCS8qIFNldHVwIGRlc2NyaXB0b3IgKi8KLQlyeF9kZXNjLT5yeF9jb250cm9sXzEgPSBzaXplICYgQVI1S19ERVNDX1JYX0NUTDFfQlVGX0xFTjsKLQlpZiAodW5saWtlbHkocnhfZGVzYy0+cnhfY29udHJvbF8xICE9IHNpemUpKQorCXJ4X2N0bC0+cnhfY29udHJvbF8xID0gc2l6ZSAmIEFSNUtfREVTQ19SWF9DVEwxX0JVRl9MRU47CisJaWYgKHVubGlrZWx5KHJ4X2N0bC0+cnhfY29udHJvbF8xICE9IHNpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncyAmIEFSNUtfUlhERVNDX0lOVFJFUSkKLQkJcnhfZGVzYy0+cnhfY29udHJvbF8xIHw9IEFSNUtfREVTQ19SWF9DVEwxX0lOVFJFUTsKKwkJcnhfY3RsLT5yeF9jb250cm9sXzEgfD0gQVI1S19ERVNDX1JYX0NUTDFfSU5UUkVROwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTUwLDY3ICs0MDg0LDY4IEBACiAvKgogICogUHJvY2Nlc3MgdGhlIHJ4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTAvNTIxMQogICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3Byb2Nfb2xkX3J4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYykKK3N0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY181MjEwX3J4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywgc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpCiB7Ci0Jc3RydWN0IGF0aDVrX2h3X29sZF9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzICpyeF9zdGF0dXM7CiAKLQlyeF9zdGF0dXMgPSAoc3RydWN0IGF0aDVrX2h3X29sZF9yeF9zdGF0dXMgKikmZGVzYy0+ZHNfaHdbMF07CisJcnhfc3RhdHVzID0gJmRlc2MtPnVkLmRzX3J4LnUucnhfc3RhdDsKIAogCS8qIE5vIGZyYW1lIHJlY2VpdmVkIC8gbm90IHJlYWR5ICovCi0JaWYgKHVubGlrZWx5KChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S19PTERfUlhfREVTQ19TVEFUVVMxX0RPTkUpCisJaWYgKHVubGlrZWx5KChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9ET05FKQogCQkJCT09IDApKQogCQlyZXR1cm4gLUVJTlBST0dSRVNTOwogCiAJLyoKIAkgKiBGcmFtZSByZWNlaXZlIHN0YXR1cwogCSAqLwotCWRlc2MtPmRzX3VzLnJ4LnJzX2RhdGFsZW4gPSByeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKLQkJQVI1S19PTERfUlhfREVTQ19TVEFUVVMwX0RBVEFfTEVOOwotCWRlc2MtPmRzX3VzLnJ4LnJzX3Jzc2kgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18wLAotCQlBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwpOwotCWRlc2MtPmRzX3VzLnJ4LnJzX3JhdGUgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18wLAotCQlBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFKTsKLQlkZXNjLT5kc191cy5yeC5yc19hbnRlbm5hID0gcnhfc3RhdHVzLT5yeF9zdGF0dXNfMCAmCi0JCUFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX0FOVEVOTkE7Ci0JZGVzYy0+ZHNfdXMucngucnNfbW9yZSA9IHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAgJgotCQlBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzBfTU9SRTsKLQlkZXNjLT5kc191cy5yeC5yc190c3RhbXAgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18xLAotCQlBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVApOwotCWRlc2MtPmRzX3VzLnJ4LnJzX3N0YXR1cyA9IDA7CisJcnMtPnJzX2RhdGFsZW4gPSByeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKKwkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9EQVRBX0xFTjsKKwlycy0+cnNfcnNzaSA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAsCisJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwpOworCXJzLT5yc19yYXRlID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMCwKKwkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1JBVEUpOworCXJzLT5yc19hbnRlbm5hID0gcnhfc3RhdHVzLT5yeF9zdGF0dXNfMCAmCisJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRFTk5BOworCXJzLT5yc19tb3JlID0gcnhfc3RhdHVzLT5yeF9zdGF0dXNfMCAmCisJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfTU9SRTsKKwkvKiBUT0RPOiB0aGlzIHRpbWVzdGFtcCBpcyAxMyBiaXQsIGxhdGVyIG9uIHdlIGFzc3VtZSAxNSBiaXQgKi8KKwlycy0+cnNfdHN0YW1wID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSwKKwkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9SRUNFSVZFX1RJTUVTVEFNUCk7CisJcnMtPnJzX3N0YXR1cyA9IDA7CiAKIAkvKgogCSAqIEtleSB0YWJsZSBzdGF0dXMKIAkgKi8KLQlpZiAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQpCi0JCWRlc2MtPmRzX3VzLnJ4LnJzX2tleWl4ID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSwKLQkJCUFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVgpOworCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQpCisJCXJzLT5yc19rZXlpeCA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCisJCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWCk7CiAJZWxzZQotCQlkZXNjLT5kc191cy5yeC5yc19rZXlpeCA9IEFSNUtfUlhLRVlJWF9JTlZBTElEOworCQlycy0+cnNfa2V5aXggPSBBUjVLX1JYS0VZSVhfSU5WQUxJRDsKIAogCS8qCiAJICogUmVjZWl2ZS9kZXNjcmlwdG9yIGVycm9ycwogCSAqLwotCWlmICgocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LKQotCQkJPT0gMCkgewotCQlpZiAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9DUkNfRVJST1IpCi0JCQlkZXNjLT5kc191cy5yeC5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9DUkM7CisJaWYgKChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKKwkJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfRlJBTUVfUkVDRUlWRV9PSykgPT0gMCkgeworCQlpZiAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCisJCQkJQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9DUkNfRVJST1IpCisJCQlycy0+cnNfc3RhdHVzIHw9IEFSNUtfUlhFUlJfQ1JDOwogCiAJCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfRklGT19PVkVSUlVOKQotCQkJZGVzYy0+ZHNfdXMucngucnNfc3RhdHVzIHw9IEFSNUtfUlhFUlJfRklGTzsKKwkJCQlBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0ZJRk9fT1ZFUlJVTikKKwkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9GSUZPOwogCiAJCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SKSB7Ci0JCQlkZXNjLT5kc191cy5yeC5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9QSFk7Ci0JCQlkZXNjLT5kc191cy5yeC5yc19waHllcnIgPQotCQkJCUFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCi0JCQkJCUFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IpOworCQkJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SKSB7CisJCQlycy0+cnNfc3RhdHVzIHw9IEFSNUtfUlhFUlJfUEhZOworCQkJcnMtPnJzX3BoeWVyciA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCisJCQkJCSAgIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SKTsKIAkJfQogCiAJCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IpCi0JCQlkZXNjLT5kc191cy5yeC5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9ERUNSWVBUOworCQkJCUFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IpCisJCQlycy0+cnNfc3RhdHVzIHw9IEFSNUtfUlhFUlJfREVDUllQVDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQwMTksNzEgKzQxNTQsNzIgQEAKIC8qCiAgKiBQcm9jY2VzcyB0aGUgcnggc3RhdHVzIGRlc2NyaXB0b3Igb24gNTIxMgogICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3Byb2NfbmV3X3J4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYykKK3N0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY181MjEyX3J4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywgc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpCiB7Ci0Jc3RydWN0IGF0aDVrX2h3X25ld19yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzICpyeF9zdGF0dXM7CiAJc3RydWN0IGF0aDVrX2h3X3J4X2Vycm9yICpyeF9lcnI7CiAKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgYXRoNWtfaHdfbmV3X3J4X3N0YXR1cyAqKSZkZXNjLT5kc19od1swXTsKKwlyeF9zdGF0dXMgPSAmZGVzYy0+dWQuZHNfcngudS5yeF9zdGF0OwogCiAJLyogT3ZlcmxheSBvbiBlcnJvciAqLwotCXJ4X2VyciA9IChzdHJ1Y3QgYXRoNWtfaHdfcnhfZXJyb3IgKikmZGVzYy0+ZHNfaHdbMF07CisJcnhfZXJyID0gJmRlc2MtPnVkLmRzX3J4LnUucnhfZXJyOwogCiAJLyogTm8gZnJhbWUgcmVjZWl2ZWQgLyBub3QgcmVhZHkgKi8KLQlpZiAodW5saWtlbHkoKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJiBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfRE9ORSkKKwlpZiAodW5saWtlbHkoKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0RPTkUpCiAJCQkJPT0gMCkpCiAJCXJldHVybiAtRUlOUFJPR1JFU1M7CiAKIAkvKgogCSAqIEZyYW1lIHJlY2VpdmUgc3RhdHVzCiAJICovCi0JZGVzYy0+ZHNfdXMucngucnNfZGF0YWxlbiA9IHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAgJgotCQlBUjVLX05FV19SWF9ERVNDX1NUQVRVUzBfREFUQV9MRU47Ci0JZGVzYy0+ZHNfdXMucngucnNfcnNzaSA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAsCi0JCUFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1NJR05BTCk7Ci0JZGVzYy0+ZHNfdXMucngucnNfcmF0ZSA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAsCi0JCUFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1JBVEUpOwotCWRlc2MtPmRzX3VzLnJ4LnJzX2FudGVubmEgPSByeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKLQkJQVI1S19ORVdfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQTsKLQlkZXNjLT5kc191cy5yeC5yc19tb3JlID0gcnhfc3RhdHVzLT5yeF9zdGF0dXNfMCAmCi0JCUFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMF9NT1JFOwotCWRlc2MtPmRzX3VzLnJ4LnJzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCi0JCUFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9SRUNFSVZFX1RJTUVTVEFNUCk7Ci0JZGVzYy0+ZHNfdXMucngucnNfc3RhdHVzID0gMDsKKwlycy0+cnNfZGF0YWxlbiA9IHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAgJgorCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX0RBVEFfTEVOOworCXJzLT5yc19yc3NpID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMCwKKwkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1NJR05BTCk7CisJcnMtPnJzX3JhdGUgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18wLAorCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfUkFURSk7CisJcnMtPnJzX2FudGVubmEgPSByeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKKwkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX0FOVEVOTkE7CisJcnMtPnJzX21vcmUgPSByeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKKwkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9NT1JFOworCXJzLT5yc190c3RhbXAgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18xLAorCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QKTsKKwlycy0+cnNfc3RhdHVzID0gMDsKIAogCS8qCiAJICogS2V5IHRhYmxlIHN0YXR1cwogCSAqLwotCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S19ORVdfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWF9WQUxJRCkKLQkJZGVzYy0+ZHNfdXMucngucnNfa2V5aXggPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18xLAotCQkJCUFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVgpOworCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQpCisJCXJzLT5yc19rZXlpeCA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCisJCQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVgpOwogCWVsc2UKLQkJZGVzYy0+ZHNfdXMucngucnNfa2V5aXggPSBBUjVLX1JYS0VZSVhfSU5WQUxJRDsKKwkJcnMtPnJzX2tleWl4ID0gQVI1S19SWEtFWUlYX0lOVkFMSUQ7CiAKIAkvKgogCSAqIFJlY2VpdmUvZGVzY3JpcHRvciBlcnJvcnMKIAkgKi8KIAlpZiAoKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCQkJQVI1S19ORVdfUlhfREVTQ19TVEFUVVMxX0ZSQU1FX1JFQ0VJVkVfT0spID09IDApIHsKLQkJaWYgKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJiBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfQ1JDX0VSUk9SKQotCQkJZGVzYy0+ZHNfdXMucngucnNfc3RhdHVzIHw9IEFSNUtfUlhFUlJfQ1JDOworCQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LKSA9PSAwKSB7CisJCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKKwkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0NSQ19FUlJPUikKKwkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9DUkM7CiAKIAkJaWYgKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCQkJCUFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IpIHsKLQkJCWRlc2MtPmRzX3VzLnJ4LnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX1BIWTsKLQkJCWRlc2MtPmRzX3VzLnJ4LnJzX3BoeWVyciA9Ci0JCQkJQVI1S19SRUdfTVMocnhfZXJyLT5yeF9lcnJvcl8xLAotCQkJCQlBUjVLX1JYX0RFU0NfRVJST1IxX1BIWV9FUlJPUl9DT0RFKTsKKwkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUikgeworCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX1BIWTsKKwkJCXJzLT5yc19waHllcnIgPSBBUjVLX1JFR19NUyhyeF9lcnItPnJ4X2Vycm9yXzEsCisJCQkJCSAgIEFSNUtfUlhfREVTQ19FUlJPUjFfUEhZX0VSUk9SX0NPREUpOwogCQl9CiAKIAkJaWYgKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCQkJCUFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9ERUNSWVBUX0NSQ19FUlJPUikKLQkJCWRlc2MtPmRzX3VzLnJ4LnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX0RFQ1JZUFQ7CisJCQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9ERUNSWVBUX0NSQ19FUlJPUikKKwkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9ERUNSWVBUOwogCi0JCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S19ORVdfUlhfREVTQ19TVEFUVVMxX01JQ19FUlJPUikKLQkJCWRlc2MtPmRzX3VzLnJ4LnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX01JQzsKKwkJaWYgKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgorCQkJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfTUlDX0VSUk9SKQorCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX01JQzsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQyNDIsMzUgKzQzNzgsNiBAQAogfQogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi0gUmVndWxhdG9yeSBEb21haW4vQ2hhbm5lbHMgU2V0dXAKLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXUxNiBhdGg1a19nZXRfcmVnZG9tYWluKHN0cnVjdCBhdGg1a19odyAqYWgpCi17Ci0JdTE2IHJlZ2RvbWFpbjsKLQllbnVtIGF0aDVrX3JlZ2RvbSBpZWVlX3JlZ2RvbWFpbjsKLSNpZmRlZiBDT1VOVFJZQ09ERQotCXUxNiBjb2RlOwotI2VuZGlmCi0KLQlhdGg1a19lZXByb21fcmVndWxhdGlvbl9kb21haW4oYWgsIGZhbHNlLCAmaWVlZV9yZWdkb21haW4pOwotCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JlZ2RvbWFpbi5yZWdfaHcgPSBpZWVlX3JlZ2RvbWFpbjsKLQotI2lmZGVmIENPVU5UUllDT0RFCi0JLyoKLQkgKiBHZXQgdGhlIHJlZ3VsYXRpb24gZG9tYWluIGJ5IGNvdW50cnkgY29kZS4gVGhpcyB3aWxsIGlnbm9yZQotCSAqIHRoZSBzZXR0aW5ncyBmb3VuZCBpbiB0aGUgRUVQUk9NLgotCSAqLwotCWNvZGUgPSBpZWVlODAyMTFfbmFtZTJjb3VudHJ5Y29kZShDT1VOVFJZQ09ERSk7Ci0JaWVlZV9yZWdkb21haW4gPSBpZWVlODAyMTFfY291bnRyeWNvZGUycmVnZG9tYWluKGNvZGUpOwotI2VuZGlmCi0KLQlyZWdkb21haW4gPSBhdGg1a19yZWdkb21fZnJvbV9pZWVlKGllZWVfcmVnZG9tYWluKTsKLQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yZWdkb21haW4ucmVnX2N1cnJlbnQgPSByZWdkb21haW47Ci0KLQlyZXR1cm4gcmVnZG9tYWluOwotfQogCiAKIC8qKioqKioqKioqKioqKioqXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2h3LmgKaW5kZXggZDlhN2MwOS4uNjRmY2E4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ody5oCkBAIC0xNzMsNyArMTczLDEwIEBACiAgKiAoclg6IHJlc2VydmVkIGZpZWxkcyBwb3NzaWJpbHkgdXNlZCBieSBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGFyNWsgY2hpcHNldCkKICAqLwogCi1zdHJ1Y3QgYXRoNWtfcnhfZGVzYyB7CisvKgorICogY29tbW9uIGhhcmR3YXJlIFJYIGNvbnRyb2wgZGVzY3JpcHRvcgorICovCitzdHJ1Y3QgYXRoNWtfaHdfcnhfY3RsIHsKIAl1MzIJcnhfY29udHJvbF8wOyAvKiBSWCBjb250cm9sIHdvcmQgMCAqLwogCiAjZGVmaW5lIEFSNUtfREVTQ19SWF9DVEwwCQkJMHgwMDAwMDAwMApAQCAtMTg1LDY5ICsxODgsNjMgQEAKIH0gX19wYWNrZWQ7CiAKIC8qCi0gKiA1MjEwLzUyMTEgcnggc3RhdHVzIGRlc2NyaXB0b3IKKyAqIGNvbW1vbiBoYXJkd2FyZSBSWCBzdGF0dXMgZGVzY3JpcHRvcgorICogNTIxMC8xMSBhbmQgNTIxMiBkaWZmZXIgb25seSBpbiB0aGUgZmxhZ3MgZGVmaW5lZCBiZWxvdwogICovCi1zdHJ1Y3QgYXRoNWtfaHdfb2xkX3J4X3N0YXR1cyB7CitzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzIHsKIAl1MzIJcnhfc3RhdHVzXzA7IC8qIFJYIHN0YXR1cyB3b3JkIDAgKi8KLQotI2RlZmluZSBBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzBfREFUQV9MRU4JCTB4MDAwMDBmZmYKLSNkZWZpbmUgQVI1S19PTERfUlhfREVTQ19TVEFUVVMwX01PUkUJCQkweDAwMDAxMDAwCi0jZGVmaW5lIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1JBVEUJCTB4MDAwNzgwMDAKLSNkZWZpbmUgQVI1S19PTERfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfUkFURV9TCQkxNQotI2RlZmluZSBBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwJCTB4MDdmODAwMDAKLSNkZWZpbmUgQVI1S19PTERfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfU0lHTkFMX1MJMTkKLSNkZWZpbmUgQVI1S19PTERfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQQkweDM4MDAwMDAwCi0jZGVmaW5lIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX0FOVEVOTkFfUwkyNwotCiAJdTMyCXJ4X3N0YXR1c18xOyAvKiBSWCBzdGF0dXMgd29yZCAxICovCi0KLSNkZWZpbmUgQVI1S19PTERfUlhfREVTQ19TVEFUVVMxX0RPTkUJCQkweDAwMDAwMDAxCi0jZGVmaW5lIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LCTB4MDAwMDAwMDIKLSNkZWZpbmUgQVI1S19PTERfUlhfREVTQ19TVEFUVVMxX0NSQ19FUlJPUgkJMHgwMDAwMDAwNAotI2RlZmluZSBBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfRklGT19PVkVSUlVOCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9ERUNSWVBUX0NSQ19FUlJPUgkweDAwMDAwMDEwCi0jZGVmaW5lIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IJCTB4MDAwMDAwZTAKLSNkZWZpbmUgQVI1S19PTERfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUl9TCQk1Ci0jZGVmaW5lIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQJMHgwMDAwMDEwMAotI2RlZmluZSBBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfS0VZX0lOREVYCQkweDAwMDA3ZTAwCi0jZGVmaW5lIEFSNUtfT0xEX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfUwkJOQotI2RlZmluZSBBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVAJMHgwZmZmODAwMAotI2RlZmluZSBBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVBfUwkxNQotI2RlZmluZSBBUjVLX09MRF9SWF9ERVNDX1NUQVRVUzFfS0VZX0NBQ0hFX01JU1MJCTB4MTAwMDAwMDAKIH0gX19wYWNrZWQ7CiAKKy8qIDUyMTAvNTIxMSAqLworI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX0RBVEFfTEVOCQkweDAwMDAwZmZmCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfTU9SRQkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1JBVEUJCTB4MDAwNzgwMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1JBVEVfUwkxNQorI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfU0lHTkFMCTB4MDdmODAwMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1NJR05BTF9TCTE5CisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRFTk5BCTB4MzgwMDAwMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX0FOVEVOTkFfUwkyNworI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX0RPTkUJCQkweDAwMDAwMDAxCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfRlJBTUVfUkVDRUlWRV9PSwkweDAwMDAwMDAyCisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfQ1JDX0VSUk9SCQkweDAwMDAwMDA0CisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfRklGT19PVkVSUlVOCQkweDAwMDAwMDA4CisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IJMHgwMDAwMDAxMAorI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUgkJMHgwMDAwMDBlMAorI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUl9TCQk1CisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfS0VZX0lOREVYX1ZBTElECTB4MDAwMDAxMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVgJCTB4MDAwMDdlMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfUwkJOQorI2RlZmluZSBBUjVLXzUyMTBfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QCTB4MGZmZjgwMDAKKyNkZWZpbmUgQVI1S181MjEwX1JYX0RFU0NfU1RBVFVTMV9SRUNFSVZFX1RJTUVTVEFNUF9TCTE1CisjZGVmaW5lIEFSNUtfNTIxMF9SWF9ERVNDX1NUQVRVUzFfS0VZX0NBQ0hFX01JU1MJMHgxMDAwMDAwMAorCisvKiA1MjEyICovCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfREFUQV9MRU4JCTB4MDAwMDBmZmYKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9NT1JFCQkJMHgwMDAwMTAwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX0RFQ09NUF9DUkNfRVJST1IJMHgwMDAwMjAwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfUkFURQkJMHgwMDBmODAwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfUkFURV9TCTE1CisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwJMHgwZmYwMDAwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfU0lHTkFMX1MJMjAKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX0FOVEVOTkEJMHhmMDAwMDAwMAorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQV9TCTI4CisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfRE9ORQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LCTB4MDAwMDAwMDIKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9DUkNfRVJST1IJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9ERUNSWVBUX0NSQ19FUlJPUgkweDAwMDAwMDA4CisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfUEhZX0VSUk9SCQkweDAwMDAwMDEwCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfTUlDX0VSUk9SCQkweDAwMDAwMDIwCisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfS0VZX0lOREVYX1ZBTElECTB4MDAwMDAxMDAKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVgJCTB4MDAwMGZlMDAKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfUwkJOQorI2RlZmluZSBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QCTB4N2ZmZjAwMDAKKyNkZWZpbmUgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9SRUNFSVZFX1RJTUVTVEFNUF9TCTE2CisjZGVmaW5lIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfS0VZX0NBQ0hFX01JU1MJMHg4MDAwMDAwMAorCiAvKgotICogNTIxMiByeCBzdGF0dXMgZGVzY3JpcHRvcgorICogY29tbW9uIGhhcmR3YXJlIFJYIGVycm9yIGRlc2NyaXB0b3IKICAqLwotc3RydWN0IGF0aDVrX2h3X25ld19yeF9zdGF0dXMgewotCXUzMglyeF9zdGF0dXNfMDsgLyogUlggc3RhdHVzIHdvcmQgMCAqLwotCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMF9EQVRBX0xFTgkJMHgwMDAwMGZmZgotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzBfTU9SRQkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgQVI1S19ORVdfUlhfREVTQ19TVEFUVVMwX0RFQ09NUF9DUkNfRVJST1IJMHgwMDAwMjAwMAotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFCQkweDAwMGY4MDAwCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1JBVEVfUwkJMTUKLSNkZWZpbmUgQVI1S19ORVdfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfU0lHTkFMCQkweDBmZjAwMDAwCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX1NJR05BTF9TCTIwCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMF9SRUNFSVZFX0FOVEVOTkEJMHhmMDAwMDAwMAotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9BTlRFTk5BX1MJMjgKLQotCXUzMglyeF9zdGF0dXNfMTsgLyogUlggc3RhdHVzIHdvcmQgMSAqLwotCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9ET05FCQkJMHgwMDAwMDAwMQotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfRlJBTUVfUkVDRUlWRV9PSwkweDAwMDAwMDAyCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9DUkNfRVJST1IJCTB4MDAwMDAwMDQKLSNkZWZpbmUgQVI1S19ORVdfUlhfREVTQ19TVEFUVVMxX0RFQ1JZUFRfQ1JDX0VSUk9SCTB4MDAwMDAwMDgKLSNkZWZpbmUgQVI1S19ORVdfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUgkJMHgwMDAwMDAxMAotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfTUlDX0VSUk9SCQkweDAwMDAwMDIwCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQJMHgwMDAwMDEwMAotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfS0VZX0lOREVYCQkweDAwMDBmZTAwCi0jZGVmaW5lIEFSNUtfTkVXX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfUwkJOQotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVAJMHg3ZmZmMDAwMAotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfUkVDRUlWRV9USU1FU1RBTVBfUwkxNgotI2RlZmluZSBBUjVLX05FV19SWF9ERVNDX1NUQVRVUzFfS0VZX0NBQ0hFX01JU1MJCTB4ODAwMDAwMDAKLX0gX19wYWNrZWQ7Ci0KIHN0cnVjdCBhdGg1a19od19yeF9lcnJvciB7CiAJdTMyCXJ4X2Vycm9yXzA7IC8qIFJYIGVycm9yIHdvcmQgMCAqLwogCkBAIC0yNjgsNyArMjY1LDEwIEBACiAjZGVmaW5lIEFSNUtfREVTQ19SWF9QSFlfRVJST1JfU0VSVklDRQkJMHhjMAogI2RlZmluZSBBUjVLX0RFU0NfUlhfUEhZX0VSUk9SX1RSQU5TTUlUT1ZSCTB4ZTAKIAotc3RydWN0IGF0aDVrX2h3XzJ3X3R4X2Rlc2MgeworLyoKKyAqIDUyMTAvNTIxMSBoYXJkd2FyZSAyLXdvcmQgVFggY29udHJvbCBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBhdGg1a19od18yd190eF9jdGwgewogCXUzMgl0eF9jb250cm9sXzA7IC8qIFRYIGNvbnRyb2wgd29yZCAwICovCiAKICNkZWZpbmUgQVI1S18yV19UWF9ERVNDX0NUTDBfRlJBTUVfTEVOCQkweDAwMDAwZmZmCkBAIC0zMTQsOSArMzE0LDkgQEAKICNkZWZpbmUgQVI1S19BUjUyMTBfVFhfREVTQ19GUkFNRV9UWVBFX1BJRlMgICAgIDB4MTAKIAogLyoKLSAqIDUyMTIgNC13b3JkIHR4IGNvbnRyb2wgZGVzY3JpcHRvcgorICogNTIxMiBoYXJkd2FyZSA0LXdvcmQgVFggY29udHJvbCBkZXNjcmlwdG9yCiAgKi8KLXN0cnVjdCBhdGg1a19od180d190eF9kZXNjIHsKK3N0cnVjdCBhdGg1a19od180d190eF9jdGwgewogCXUzMgl0eF9jb250cm9sXzA7IC8qIFRYIGNvbnRyb2wgd29yZCAwICovCiAKICNkZWZpbmUgQVI1S180V19UWF9ERVNDX0NUTDBfRlJBTUVfTEVOCQkweDAwMDAwZmZmCkBAIC0zNzQsNyArMzc0LDcgQEAKIH0gX19wYWNrZWQ7CiAKIC8qCi0gKiBDb21tb24gdHggc3RhdHVzIGRlc2NyaXB0b3IKKyAqIENvbW1vbiBUWCBzdGF0dXMgZGVzY3JpcHRvcgogICovCiBzdHJ1Y3QgYXRoNWtfaHdfdHhfc3RhdHVzIHsKIAl1MzIJdHhfc3RhdHVzXzA7IC8qIFRYIHN0YXR1cyB3b3JkIDAgKi8KQEAgLTQxNSw2ICs0MTUsMzQgQEAKIAogCiAvKgorICogNTIxMC81MjExIGhhcmR3YXJlIFRYIGRlc2NyaXB0b3IKKyAqLworc3RydWN0IGF0aDVrX2h3XzUyMTBfdHhfZGVzYyB7CisJc3RydWN0IGF0aDVrX2h3XzJ3X3R4X2N0bAl0eF9jdGw7CisJc3RydWN0IGF0aDVrX2h3X3R4X3N0YXR1cwl0eF9zdGF0OworfSBfX3BhY2tlZDsKKworLyoKKyAqIDUyMTIgaGFyZHdhcmUgVFggZGVzY3JpcHRvcgorICovCitzdHJ1Y3QgYXRoNWtfaHdfNTIxMl90eF9kZXNjIHsKKwlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsCXR4X2N0bDsKKwlzdHJ1Y3QgYXRoNWtfaHdfdHhfc3RhdHVzCXR4X3N0YXQ7Cit9IF9fcGFja2VkOworCisvKgorICogY29tbW9uIGhhcmR3YXJlIFJYIGRlc2NyaXB0b3IKKyAqLworc3RydWN0IGF0aDVrX2h3X2FsbF9yeF9kZXNjIHsKKwlzdHJ1Y3QgYXRoNWtfaHdfcnhfY3RsCQkJcnhfY3RsOworCXVuaW9uIHsKKwkJc3RydWN0IGF0aDVrX2h3X3J4X3N0YXR1cwlyeF9zdGF0OworCQlzdHJ1Y3QgYXRoNWtfaHdfcnhfZXJyb3IJcnhfZXJyOworCX0gdTsKK30gX19wYWNrZWQ7CisKKworLyoKICAqIEFSNUsgUkVHSVNURVIgQUNDRVNTCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMKaW5kZXggMmMyMmYxZC4uMDRjODRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jCkBAIC02NzgsOCArNjc4LDggQEAKIAl7IEFSNUtfUEhZKDY0NCksIDB4MDA4MDYzMzMgfSwKIAl7IEFSNUtfUEhZKDY0NSksIDB4MDAxMDZjMTAgfSwKIAl7IEFSNUtfUEhZKDY0NiksIDB4MDA5YzQwNjAgfSwKLQkvKnsgQVI1S19QSFkoNjQ3KSwgMHgxNDgzODAwYSB9LCovIC8qIE9sZCB2YWx1ZSAqLwogCXsgQVI1S19QSFkoNjQ3KSwgMHgxNDgzODAwYSB9LAorCS8qIHsgQVI1S19QSFkoNjQ4KSwgMHgwMTg4MzBjNiB9LCovIC8qIDI0MTMgKi8KIAl7IEFSNUtfUEhZKDY0OCksIDB4MDE4MzEwNjEgfSwKIAl7IEFSNUtfUEhZKDY0OSksIDB4MDAwMDA0MDAgfSwKIAkvKnsgQVI1S19QSFkoNjUwKSwgMHgwMDAwMDFiNSB9LCovCkBAIC0xMDgxLDYgKzEwODEsNDE0IEBACiAJCXsgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCB9IH0sCiB9OwogCisvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIFJGMjQxMy8yNDE0IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCisvKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBzbyB0dXJib2cgaXMgdGhlIHNhbWUgd2l0aCBnIGhlcmUgd2l0aCBzb21lCisgKiBtaW5vciB0d2Vha2luZyBiYXNlZCBvbiBkdW1wcyBmcm9tIG90aGVyIGNoaXBzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmMjQxM19pbmlfbW9kZV9lbmRbXSA9IHsKKwl7IEFSNUtfVFhDRkcsCisJLyoJICAgICAgYgkJZwkgICAgZ1R1cmJvICovCisJCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJeyBBUjVLX1VTRUNfNTIxMSwKKwkJeyAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwl7IEFSNUtfUEhZKDEwKSwKKwkJeyAweDA1MDIwMDAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZKDEzKSwKKwkJeyAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDAwZTAwIH0gfSwKKwl7IEFSNUtfUEhZKDE0KSwKKwkJeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDBhIH0gfSwKKwl7IEFSNUtfUEhZKDE4KSwKKwkJeyAweDAwMWE2YTY0LCAweDAwMWE2YTY0LCAweDAwMWE2YTY0IH0gfSwKKwl7IEFSNUtfUEhZKDIwKSwKKwkJeyAweDBkZThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKKwl7IEFSNUtfUEhZX1NJRywKKwkJeyAweDdlZTgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKKwl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKKwkJeyAweDMxMzc2NjVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKKwl7IEFSNUtfUEhZKDI3KSwKKwkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwl7IEFSNUtfUEhZX1JYX0RFTEFZLAorCQl7IDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAorCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCisJCXsgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tUWENUTCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZKDY0MiksCisJCXsgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJeyBBUjVLX1BIWV9HQUlOXzJHSFosCisJCXsgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCB9IH0sCisJeyAweGEyMWMsCisJCXsgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCisJeyBBUjVLX0RDVV9GUCwKKwkJeyAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwIH0gfSwKKwl7IDB4ODA2MCwKKwkJeyAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmIH0gfSwKKwl7IDB4ODExOCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODExYywKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEyMCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEyNCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEyOCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEyYywKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEzMCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEzNCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEzOCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODEzYywKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4ODE0MCwKKwkJeyAweDgwMDAwMGE4LCAweDgwMDAwMGE4LCAweDgwMDAwMGE4IH0gfSwKKwl7IDB4ODE0NCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0FHQywKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZKDExKSwKKwkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKKwl7IEFSNUtfUEhZKDE1KSwKKwkJeyAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwIH0gfSwKKwl7IEFSNUtfUEhZKDE5KSwKKwkJeyAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjIH0gfSwKKwl7IEFSNUtfUEhZX1NDUiwKKwkJeyAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmIH0gfSwKKwl7IEFSNUtfUEhZX1NMTVQsCisJCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1BIWV9TQ0FMLAorCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorCXsgQVI1S19QSFkoODYpLAorCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAorCXsgQVI1S19QSFkoOTYpLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFkoOTcpLAorCQl7IDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAgfSB9LAorCXsgQVI1S19QSFkoMTA0KSwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZKDEyMCksCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1BIWSgxMjEpLAorCQl7IDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEgfSB9LAorCXsgQVI1S19QSFkoMTIyKSwKKwkJeyAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4IH0gfSwKKwl7IEFSNUtfUEhZKDEyMyksCisJCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSB9IH0sCisJeyBBUjVLX1BIWV9TQ0xPQ0ssCisJCXsgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYyB9IH0sCisJeyBBUjVLX1BIWV9TREVMQVksCisJCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCisJeyBBUjVLX1BIWV9TUEVORElORywKKwkJeyAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0IH0gfSwKKwl7IDB4YTIyOCwKKwkJeyAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1IH0gfSwKKwl7IDB4YTIzYywKKwkJeyAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmIH0gfSwKKwl7IDB4YTI0YywKKwkJeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKKwl7IDB4YTI1MCwKKwkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKKwl7IDB4YTI1NCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4YTI1OCwKKwkJeyAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwIH0gfSwKKwl7IDB4YTI1YywKKwkJeyAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxIH0gfSwKKwl7IDB4YTI2MCwKKwkJeyAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxIH0gfSwKKwl7IDB4YTI2NCwKKwkJeyAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExIH0gfSwKKwl7IDB4YTI2OCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4YTI2YywKKwkJeyAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhIH0gfSwKKwl7IDB4YTI3MCwKKwkJeyAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwIH0gfSwKKwl7IDB4YTI3NCwKKwkJeyAweDAwMWI3Y2FhLCAweDAwMWI3Y2FhLCAweDAwMWI3Y2FhIH0gfSwKKwl7IDB4YTI3OCwKKwkJeyAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0gfSwKKwl7IDB4YTI3YywKKwkJeyAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlIH0gfSwKKwl7IDB4YTMwMCwKKwkJeyAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwIH0gfSwKKwl7IDB4YTMwNCwKKwkJeyAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyIH0gfSwKKwl7IDB4YTMwOCwKKwkJeyAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2IH0gfSwKKwl7IDB4YTMwYywKKwkJeyAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhIH0gfSwKKwl7IDB4YTMxMCwKKwkJeyAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmIH0gfSwKKwl7IDB4YTMxNCwKKwkJeyAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiIH0gfSwKKwl7IDB4YTMxOCwKKwkJeyAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhIH0gfSwKKwl7IDB4YTMxYywKKwkJeyAweDhlY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViIH0gfSwKKwl7IDB4YTMyMCwKKwkJeyAweDlkNGY5NzBmLCAweDlkNGY5NzBmLCAweDlkNGY5NzBmIH0gfSwKKwl7IDB4YTMyNCwKKwkJeyAweGE1Y2ZhMThmLCAweGE1Y2ZhMThmLCAweGE1Y2ZhMThmIH0gfSwKKwl7IDB4YTMyOCwKKwkJeyAweGI1NWZhZjFmLCAweGI1NWZhZjFmLCAweGI1NWZhZjFmIH0gfSwKKwl7IDB4YTMyYywKKwkJeyAweGJkZGZiOTlmLCAweGJkZGZiOTlmLCAweGJkZGZiOTlmIH0gfSwKKwl7IDB4YTMzMCwKKwkJeyAweGNkN2ZjNzNmLCAweGNkN2ZjNzNmLCAweGNkN2ZjNzNmIH0gfSwKKwl7IDB4YTMzNCwKKwkJeyAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmIH0gfSwKKwl7IDB4YTMzOCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4YTMzYywKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4YTM0MCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4YTM0NCwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDB4YTM0OCwKKwkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKKwl7IDB4YTM0YywKKwkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKKwl7IDB4YTM1MCwKKwkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKKwl7IDB4YTM1NCwKKwkJeyAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmIH0gfSwKKwl7IDB4YTM1OCwKKwkJeyAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmIH0gfSwKKwl7IDB4YTM1YywKKwkJeyAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmIH0gfSwKKwl7IDB4YTM2MCwKKwkJeyAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3IH0gfSwKKwl7IDB4YTM2NCwKKwkJeyAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1IH0gfSwKKwl7IDB4YTM2OCwKKwkJeyAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0IH0gfSwKKwl7IDB4YTM2YywKKwkJeyAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzIH0gfSwKKwl7IDB4YTM3MCwKKwkJeyAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzIH0gfSwKKwl7IDB4YTM3NCwKKwkJeyAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzIH0gfSwKKwl7IDB4YTM3OCwKKwkJeyAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyIH0gfSwKKwl7IDB4YTM3YywKKwkJeyAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyIH0gfSwKKwl7IDB4YTM4MCwKKwkJeyAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhIH0gfSwKKwl7IDB4YTM4NCwKKwkJeyAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwIH0gfSwKK307CisKKy8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgUkYyNDI1IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCisvKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBzbyB0dXJib2cgaXMgdGhlIHNhbWUgd2l0aCBnIGhlcmUgd2l0aCBzb21lCisgKiBtaW5vciB0d2Vha2luZyBiYXNlZCBvbiBkdW1wcyBmcm9tIG90aGVyIGNoaXBzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmMjQyNV9pbmlfbW9kZV9lbmRbXSA9IHsKKwl7IEFSNUtfVFhDRkcsCisJLyoJICAgICAgIGcJZ1R1cmJvICovCisJCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJeyBBUjVLX1VTRUNfNTIxMSwKKwkJeyAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwl7IEFSNUtfUEhZX1RVUkJPLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSB9LAorCXsgQVI1S19QSFkoMTApLAorCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFkoMTMpLAorCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFkoMTQpLAorCQl7IDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFkoMTcpLAorCQl7IDB4MTM3MjE0MjIsIDB4MTM3MjE0MjIgfSB9LAorCXsgQVI1S19QSFkoMTgpLAorCQl7IDB4MDAxOTlhNjUsIDB4MDAxOTlhNjUgfSB9LAorCXsgQVI1S19QSFkoMjApLAorCQl7IDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAorCXsgQVI1S19QSFlfU0lHLAorCQl7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCXsgQVI1S19QSFlfQUdDQ09BUlNFLAorCQl7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAorCXsgQVI1S19QSFkoMjcpLAorCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCXsgQVI1S19QSFlfUlhfREVMQVksCisJCXsgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKKwkJeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS1RYQ1RMLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFkoNjQyKSwKKwkJeyAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKKwkJeyAweDAwNTJjMTQwLCAweDAwNTJjMTQwIH0gfSwKKwl7IDB4YTIxYywKKwkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKKwl7IDB4YTMyNCwKKwkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwl7IDB4YTMyOCwKKwkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwl7IDB4YTMyYywKKwkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwl7IDB4YTMzMCwKKwkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwl7IDB4YTMzNCwKKwkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwl7IEFSNUtfRENVX0ZQLAorCQl7IDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAgfSB9LAorCXsgMHg4MDYwLAorCQl7IDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYgfSB9LAorCXsgMHg4MDljLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MGEwLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTE4LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTFjLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTIwLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTI0LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTI4LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTJjLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTMwLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTM0LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTM4LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTNjLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHg4MTQwLAorCQl7IDB4ODAwMDAzZjksIDB4ODAwMDAzZjkgfSB9LAorCXsgMHg4MTQ0LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFlfQUdDLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFkoMTEpLAorCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAorCXsgQVI1S19QSFkoMTUpLAorCQl7IDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAgfSB9LAorCXsgQVI1S19QSFkoMTkpLAorCQl7IDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MgfSB9LAorCXsgQVI1S19QSFlfU0NSLAorCQl7IDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYgfSB9LAorCXsgQVI1S19QSFlfU0xNVCwKKwkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUEhZX1NDQUwsCisJCXsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCisJeyBBUjVLX1BIWSg4NiksCisJCXsgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiB9IH0sCisJeyBBUjVLX1BIWSg5NiksCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1BIWSg5NyksCisJCXsgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCB9IH0sCisJeyBBUjVLX1BIWSgxMDQpLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFkoMTE5KSwKKwkJeyAweGZlYmFkYmU4LCAweGZlYmFkYmU4IH0gfSwKKwl7IEFSNUtfUEhZKDEyMCksCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1BIWSgxMjEpLAorCQl7IDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEgfSB9LAorCXsgQVI1S19QSFkoMTIyKSwKKwkJeyAweDNjNDY2NDc4LCAweDNjNDY2NDc4IH0gfSwKKwl7IEFSNUtfUEhZKDEyMyksCisJCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSB9IH0sCisJeyBBUjVLX1BIWV9TQ0xPQ0ssCisJCXsgMHgwMDAwMDAwYywgMHgwMDAwMDAwYyB9IH0sCisJeyBBUjVLX1BIWV9TREVMQVksCisJCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCisJeyBBUjVLX1BIWV9TUEVORElORywKKwkJeyAweDAwMDAwMDE0LCAweDAwMDAwMDE0IH0gfSwKKwl7IDB4YTIyOCwKKwkJeyAweDAwMDAwOWI1LCAweDAwMDAwOWI1IH0gfSwKKwl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTMsCisJCXsgMHgyMDIwMjAyMCwgMHgyMDIwMjAyMCB9IH0sCisJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEU0LAorCQl7IDB4MjAyMDIwMjAsIDB4MjAyMDIwMjAgfSB9LAorCXsgMHhhMjNjLAorCQl7IDB4OTNjODg5YWYsIDB4OTNjODg5YWYgfSB9LAorCXsgMHhhMjRjLAorCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgMHhhMjUwLAorCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAorCXsgMHhhMjU0LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHhhMjU4LAorCQl7IDB4MGNjNzUzODAsIDB4MGNjNzUzODAgfSB9LAorCXsgMHhhMjVjLAorCQl7IDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEgfSB9LAorCXsgMHhhMjYwLAorCQl7IDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEgfSB9LAorCXsgMHhhMjY0LAorCQl7IDB4MDA0MThhMTEsIDB4MDA0MThhMTEgfSB9LAorCXsgMHhhMjY4LAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMHhhMjZjLAorCQl7IDB4MGMzMGMxNjYsIDB4MGMzMGMxNjYgfSB9LAorCXsgMHhhMjcwLAorCQl7IDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAgfSB9LAorCXsgMHhhMjc0LAorCQl7IDB4MDgxYTNjYWEsIDB4MDgxYTNjYWEgfSB9LAorCXsgMHhhMjc4LAorCQl7IDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSB9LAorCXsgMHhhMjdjLAorCQl7IDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UgfSB9LAorCXsgMHhhMzAwLAorCQl7IDB4MTYwMTAwMDAsIDB4MTYwMTAwMDAgfSB9LAorCXsgMHhhMzA0LAorCQl7IDB4MmMwMzI0MDIsIDB4MmMwMzI0MDIgfSB9LAorCXsgMHhhMzA4LAorCQl7IDB4NDg0MzNlNDIsIDB4NDg0MzNlNDIgfSB9LAorCXsgMHhhMzBjLAorCQl7IDB4NWEwZjUwMGIsIDB4NWEwZjUwMGIgfSB9LAorCXsgMHhhMzEwLAorCQl7IDB4NmM0YjYyNGEsIDB4NmM0YjYyNGEgfSB9LAorCXsgMHhhMzE0LAorCQl7IDB4N2U4Yjc0OGEsIDB4N2U4Yjc0OGEgfSB9LAorCXsgMHhhMzE4LAorCQl7IDB4OTZjZjhjY2IsIDB4OTZjZjhjY2IgfSB9LAorCXsgMHhhMzFjLAorCQl7IDB4YTM0ZjlkMGYsIDB4YTM0ZjlkMGYgfSB9LAorCXsgMHhhMzIwLAorCQl7IDB4YTdjZmE1OGYsIDB4YTdjZmE1OGYgfSB9LAorCXsgMHhhMzQ4LAorCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAorCXsgMHhhMzRjLAorCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAorCXsgMHhhMzUwLAorCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAorCXsgMHhhMzU0LAorCQl7IDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYgfSB9LAorCXsgMHhhMzU4LAorCQl7IDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYgfSB9LAorCXsgMHhhMzVjLAorCQl7IDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYgfSB9LAorCXsgMHhhMzYwLAorCQl7IDB4MGYyODIyMDcsIDB4MGYyODIyMDcgfSB9LAorCXsgMHhhMzY0LAorCQl7IDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUgfSB9LAorCXsgMHhhMzY4LAorCQl7IDB4MWY4MDExMDQsIDB4MWY4MDExMDQgfSB9LAorCXsgMHhhMzZjLAorCQl7IDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMgfSB9LAorCXsgMHhhMzcwLAorCQl7IDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMgfSB9LAorCXsgMHhhMzc0LAorCQl7IDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMgfSB9LAorCXsgMHhhMzc4LAorCQl7IDB4NWZkODA2ODIsIDB4NWZkODA2ODIgfSB9LAorCXsgMHhhMzdjLAorCQl7IDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIgfSB9LAorCXsgMHhhMzgwLAorCQl7IDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEgfSB9LAorCXsgMHhhMzg0LAorCQl7IDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAgfSB9LAorfTsKKwogLyoKICAqIEluaXRpYWwgQmFzZUJhbmQgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTExLzUxMTIgKEFSNTIxMCBjb21lcyB3aXRoCiAgKiBSRjUxMTAgb25seSBzbyBpbml0aWFsIEJCIEdhaW4gc2V0dGluZ3MgYXJlIGluY2x1ZGVkIGluIEFSNUtfQVI1MjEwX0lOSSkKQEAgLTEyOTAsMzUgKzE2OTgsOTIgQEAKIAogCQkvKiBTZWNvbmQgc2V0IG9mIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgKi8KIAkJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSl7CisKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShhcjUyMTJfcmY1MTExX2luaV9tb2RlX2VuZCksCiAJCQkJCWFyNTIxMl9yZjUxMTFfaW5pX21vZGVfZW5kLCBtb2RlKTsKKwogCQkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLwogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTFfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMV9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisKIAkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpeworCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUoYXI1MjEyX3JmNTExMl9pbmlfbW9kZV9lbmQpLAogCQkJCQlhcjUyMTJfcmY1MTEyX2luaV9tb2RlX2VuZCwgbW9kZSk7Ci0JCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCisKIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTJfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOworCiAJCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKXsKKwogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTQxM19pbmlfbW9kZV9lbmQpLAogCQkJCQlyZjU0MTNfaW5pX21vZGVfZW5kLCBtb2RlKTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCisJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisKKwkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MTMpIHsKKworCQkJaWYgKG1vZGUgPCAyKSB7CisJCQkJQVRINUtfRVJSKGFoLT5haF9zYywKKwkJCQkJInVuc3VwcG9ydGVkIGNoYW5uZWwgbW9kZTogJWRcbiIsIG1vZGUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJbW9kZSA9IG1vZGUgLSAyOworCisJCQkvKiBPdmVycmlkZSBhIHNldHRpbmcgZnJvbSBhcjUyMTJfaW5pICovCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDE4ODMwYzYsIEFSNUtfUEhZKDY0OCkpOworCisJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmYyNDEzX2luaV9tb2RlX2VuZCksCisJCQkJCXJmMjQxM19pbmlfbW9kZV9lbmQsIG1vZGUpOworCiAJCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKKworCQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjQyNSkgeworCisJCQlpZiAobW9kZSA8IDIpIHsKKwkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCQkidW5zdXBwb3J0ZWQgY2hhbm5lbCBtb2RlOiAlZFxuIiwgbW9kZSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCS8qIE1hcCBiIHRvIGcgKi8KKwkJCWlmIChtb2RlID09IDIpCisJCQkJbW9kZSA9IDA7CisJCQllbHNlCisJCQkJbW9kZSA9IG1vZGUgLSAzOworCisJCQkvKiBPdmVycmlkZSBhIHNldHRpbmcgZnJvbSBhcjUyMTJfaW5pICovCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDE4ODMwYzYsIEFSNUtfUEhZKDY0OCkpOworCisJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmYyNDI1X2luaV9tb2RlX2VuZCksCisJCQkJCXJmMjQyNV9pbmlfbW9kZV9lbmQsIG1vZGUpOworCisJCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKKwkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKKwogCQl9CisKIAkvKiBGb3IgQVI1MjExICovCiAJfSBlbHNlIGlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgewogCi0JCWlmKG1vZGUgPiAyKXsgLyogQVI1S19JTklfVkFMXzExQiAqLwotCQkJQVRINUtfRVJSKGFoLT5haF9zYywidW5zdXBwb3J0ZWQgY2hhbm5lbCBtb2RlOiAlZFxuIiwgbW9kZSk7CisJCS8qIEFSNUtfTU9ERV8xMUIgKi8KKwkJaWYgKG1vZGUgPiAyKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCSJ1bnN1cHBvcnRlZCBjaGFubmVsIG1vZGU6ICVkXG4iLCBtb2RlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKaW5kZXggYjk1OTQxNy4uYWZkODY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKQEAgLTY2Niw2ICs2NjYsMTUzIEBACiAJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCiB9OwogCisvKiBSRjI0MTMvMjQxNCBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjQxM1tdID0geworCXsgMSwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAorCS8qIAkgICBtb2RlIGIgICAgICBtb2RlIGcgICAgIG1vZGUgZ1R1cmJvICovCisJCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCisJCXsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCisJCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMzAwMDAwMCwgMHgwMzAwMDAwMCwgMHgwMzAwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHg0MDQwMDAwMCwgMHg0MDQwMDAwMCwgMHg0MDQwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAzMDAwMCwgMHgwMDAzMDAwMCwgMHgwMDAzMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDIyMDAwMCwgMHgwMDIyMDAwMCwgMHgwMDIyMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTggfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDI4MDA1MCwgMHgwMDI4MDA1MCwgMHgwMDI4MDA1MCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwNTAwMGMzLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwMDQ1OCwgMHgwMDAwMDQ1OCwgMHgwMDAwMDQ1OCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF81LAorCQl7IDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAgfSB9LAorCXsgNywgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMiwKKwkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKy8qIFJGMjQyNSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjQyNVtdID0geworCXsgMSwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAorCS8qIAkgICBtb2RlIGcgICAgIG1vZGUgZ1R1cmJvICovCisJCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCisJCXsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCisJCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDIwMDAwLCAweDAwMDIwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwZTcwMDAwLCAweDAwZTcwMDAwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDcwMDFhLCAweDAwMDcwMDFhIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDIwODAzLCAweDAwMDIwODAzIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAxNjYwLCAweDAwMDAxNjYwIH0gfSwKKwl7IDYsIEFSNUtfUkZfQlVGRkVSLAorCQl7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAorCXsgNiwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8xLAorCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNywgQVI1S19SRl9CVUZGRVIsCisJCXsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCBBUjVLX1JGX0JVRkZFUiwKKwkJeyAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMiwKKwkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CiAKIC8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTEyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTJbXSA9IHsKQEAgLTgwNSw2ICs5NTIsNzQgQEAKIAl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCiB9OwogCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGMjQxMyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl8yNDEzW10gPSB7CisJeyBBUjVLX1JGX0dBSU4oMCksIHsgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMSksIHsgMHgwMDAwMDA0MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMiksIHsgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMyksIHsgMHgwMDAwMDE4MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNCksIHsgMHgwMDAwMDFjMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNSksIHsgMHgwMDAwMDAwMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNiksIHsgMHgwMDAwMDA0MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNyksIHsgMHgwMDAwMDA4MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOCksIHsgMHgwMDAwMDE2OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOSksIHsgMHgwMDAwMDFhOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTApLCB7IDB4MDAwMDAxZTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDExKSwgeyAweDAwMDAwMDI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMiksIHsgMHgwMDAwMDA2OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTMpLCB7IDB4MDAwMDAxODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE0KSwgeyAweDAwMDAwMWM5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNSksIHsgMHgwMDAwMDAwOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTYpLCB7IDB4MDAwMDAwNDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE3KSwgeyAweDAwMDAwMDg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOCksIHsgMHgwMDAwMDE5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTkpLCB7IDB4MDAwMDAxZDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIwKSwgeyAweDAwMDAwMDEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMSksIHsgMHgwMDAwMDA1MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjIpLCB7IDB4MDAwMDAwOTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIzKSwgeyAweDAwMDAwMTkxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNCksIHsgMHgwMDAwMDFkMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjUpLCB7IDB4MDAwMDAwMTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI2KSwgeyAweDAwMDAwMDUxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNyksIHsgMHgwMDAwMDA5MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjgpLCB7IDB4MDAwMDAxNzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDI5KSwgeyAweDAwMDAwMWI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMCksIHsgMHgwMDAwMDFmOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzEpLCB7IDB4MDAwMDAwMzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMyKSwgeyAweDAwMDAwMDc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMyksIHsgMHgwMDAwMDE5OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzQpLCB7IDB4MDAwMDAxZDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM1KSwgeyAweDAwMDAwMDE5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNiksIHsgMHgwMDAwMDA1OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzcpLCB7IDB4MDAwMDAwOTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM4KSwgeyAweDAwMDAwMGQ5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOSksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDApLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQxKSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MiksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDMpLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ0KSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NSksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDYpLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ3KSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OCksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDkpLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUwKSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MSksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTIpLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUzKSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NCksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTUpLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU2KSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NyksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTgpLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU5KSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MCksIHsgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjEpLCB7IDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYyKSwgeyAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MyksIHsgMHgwMDAwMDBmOSB9IH0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0IHJmZ2Fpbl9vcHRfNTExMiA9IHsKIAkxLAogCTgsCkBAIC04NDQsMTQgKzEwNTksMTQgQEAKIAllbnRyeSA9ICgoZmlyc3QgLSAxKSAvIDgpICsgb2Zmc2V0OwogCXBvc2l0aW9uID0gKGZpcnN0IC0gMSkgJSA4OwogCi0JaWYgKHNldCA9PSB0cnVlKQorCWlmIChzZXQpCiAJCWRhdGEgPSBhdGg1a19od19iaXRzd2FwKHJlZywgYml0cyk7CiAKIAlmb3IgKGkgPSBzaGlmdCA9IDAsIGxlZnQgPSBiaXRzOyBsZWZ0ID4gMDsgcG9zaXRpb24gPSAwLCBlbnRyeSsrLCBpKyspIHsKIAkJbGFzdCA9IChwb3NpdGlvbiArIGxlZnQgPiA4KSA/IDggOiBwb3NpdGlvbiArIGxlZnQ7CiAJCW1hc2sgPSAoKCgxIDw8IGxhc3QpIC0gMSkgXiAoKDEgPDwgcG9zaXRpb24pIC0gMSkpIDw8IChjb2wgKiA4KTsKIAotCQlpZiAoc2V0ID09IHRydWUpIHsKKwkJaWYgKHNldCkgewogCQkJcmZbZW50cnldICY9IH5tYXNrOwogCQkJcmZbZW50cnldIHw9ICgoZGF0YSA8PCBwb3NpdGlvbikgPDwgKGNvbCAqIDgpKSAmIG1hc2s7CiAJCQlkYXRhID4+PSAoOCAtIHBvc2l0aW9uKTsKQEAgLTg2NCw3ICsxMDc5LDcgQEAKIAkJbGVmdCAtPSA4IC0gcG9zaXRpb247CiAJfQogCi0JZGF0YSA9IHNldCA9PSB0cnVlID8gMSA6IGF0aDVrX2h3X2JpdHN3YXAoZGF0YSwgYml0cyk7CisJZGF0YSA9IHNldCA/IDEgOiBhdGg1a19od19iaXRzd2FwKGRhdGEsIGJpdHMpOwogCiAJcmV0dXJuIGRhdGE7CiB9CkBAIC05NTUsNyArMTE3MCw2IEBACiAJCWdvID0gJnJmZ2Fpbl9vcHRfNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1JGNTExMjoKLQljYXNlIEFSNUtfUkY1NDEzOiAvKiA/Pz8gKi8KIAkJZ28gPSAmcmZnYWluX29wdF81MTEyOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTAxOCw3ICsxMjMyLDcgQEAKIAlpbnQgb2JkYiA9IC0xLCBiYW5rID0gLTE7CiAJdTMyIGVlX21vZGU7CiAKLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX0lOSV9WQUxfTUFYKTsKKwlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKIAogCXJmID0gYWgtPmFoX3JmX2JhbmtzOwogCkBAIC0xMDM4LDggKzEyNTIsOCBAQAogCX0KIAogCS8qIE1vZGlmeSBiYW5rIDAgKi8KLQlpZiAoY2hhbm5lbC0+dmFsICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChjaGFubmVsLT52YWwgJiBDSEFOTkVMX0NDSykKKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spCiAJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUI7CiAJCWVsc2UKIAkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKQEAgLTEwNTgsMTAgKzEyNzIsMTAgQEAKIAl9IGVsc2UgewogCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgKi8KIAkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlvYmRiID0JIGNoYW5uZWwtPmZyZXEgPj0gNTcyNSA/IDMgOgotCQkJKGNoYW5uZWwtPmZyZXEgPj0gNTUwMCA/IDIgOgotCQkJKGNoYW5uZWwtPmZyZXEgPj0gNTI2MCA/IDEgOgotCQkJIChjaGFubmVsLT5mcmVxID4gNDAwMCA/IDAgOiAtMSkpKTsKKwkJb2JkYiA9CSBjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NzI1ID8gMyA6CisJCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTUwMCA/IDIgOgorCQkJKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDUyNjAgPyAxIDoKKwkJCSAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPiA0MDAwID8gMCA6IC0xKSkpOwogCiAJCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAogCQkJCWVlLT5lZV9wd2RfODQsIDEsIDUxLCAzLCB0cnVlKSkKQEAgLTExMTksMTIgKzEzMzMsMTIgQEAKIAlpbnQgb2JkYiA9IC0xLCBiYW5rID0gLTE7CiAJdTMyIGVlX21vZGU7CiAKLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX0lOSV9WQUxfTUFYKTsKKwlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKIAogCXJmID0gYWgtPmFoX3JmX2JhbmtzOwogCiAJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfMjExMkEKLQkJJiYgIXRlc3RfYml0KE1PREVfSUVFRTgwMjExQSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSkpeworCQkmJiAhdGVzdF9iaXQoQVI1S19NT0RFXzExQSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSkpIHsKIAkJcmZfaW5pID0gcmZyZWdzXzIxMTJhOwogCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTExMmEpOwogCQlpZiAobW9kZSA8IDIpIHsKQEAgLTExNTYsOCArMTM3MCw4IEBACiAJfQogCiAJLyogTW9kaWZ5IGJhbmsgNiAqLwotCWlmIChjaGFubmVsLT52YWwgJiBDSEFOTkVMXzJHSFopIHsKLQkJaWYgKGNoYW5uZWwtPnZhbCAmIENIQU5ORUxfT0ZETSkKKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKQogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOwogCQllbHNlCiAJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUI7CkBAIC0xMTczLDEwICsxMzg3LDEzIEBACiAJfSBlbHNlIHsKIAkJLyogRm9yIDExYSwgVHVyYm8gYW5kIFhSICovCiAJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJb2JkYiA9IGNoYW5uZWwtPmZyZXEgPj0gNTcyNSA/IDMgOgotCQkgICAgKGNoYW5uZWwtPmZyZXEgPj0gNTUwMCA/IDIgOgotCQkJKGNoYW5uZWwtPmZyZXEgPj0gNTI2MCA/IDEgOgotCQkJICAgIChjaGFubmVsLT5mcmVxID4gNDAwMCA/IDAgOiAtMSkpKTsKKwkJb2JkYiA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKKwkJICAgIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6CisJCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgorCQkJICAgIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7CisKKwkJaWYgKG9iZGIgPT0gLTEpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKIAkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI3OSwgMCwgdHJ1ZSkpCkBAIC0xMjA5LDcgKzE0MjYsOCBAQAogfQogCiAvKgotICogSW5pdGlhbGl6ZSBSRjU0MTMvNTQxNAorICogSW5pdGlhbGl6ZSBSRjU0MTMvNTQxNCBhbmQgZnV0dXJlIGNoaXBzCisgKiAodW50aWwgd2UgY29tZSB1cCB3aXRoIGEgYmV0dGVyIHNvbHV0aW9uKQogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKIAkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTEyMTksMTIgKzE0MzcsNDcgQEAKIAl1bnNpZ25lZCBpbnQgcmZfc2l6ZSwgaTsKIAlpbnQgYmFuayA9IC0xOwogCi0JQVI1S19BU1NFUlRfRU5UUlkobW9kZSwgQVI1S19JTklfVkFMX01BWCk7CisJQVI1S19BU1NFUlRfRU5UUlkobW9kZSwgQVI1S19NT0RFX01BWCk7CiAKIAlyZiA9IGFoLT5haF9yZl9iYW5rczsKIAotCXJmX2luaSA9IHJmcmVnc181NDEzOwotCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181NDEzKTsKKwlzd2l0Y2ggKGFoLT5haF9yYWRpbykgeworCWNhc2UgQVI1S19SRjU0MTM6CisJCXJmX2luaSA9IHJmcmVnc181NDEzOworCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTQxMyk7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MTM6CisJCXJmX2luaSA9IHJmcmVnc18yNDEzOworCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQxMyk7CisKKwkJaWYgKG1vZGUgPCAyKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltb2RlID0gbW9kZSAtIDI7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MjU6CisJCXJmX2luaSA9IHJmcmVnc18yNDI1OworCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQyNSk7CisKKwkJaWYgKG1vZGUgPCAyKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBNYXAgYiB0byBnICovCisJCWlmIChtb2RlID09IDIpCisJCQltb2RlID0gMDsKKwkJZWxzZQorCQkJbW9kZSA9IG1vZGUgLSAzOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIENvcHkgdmFsdWVzIHRvIG1vZGlmeSB0aGVtICovCiAJZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykgewpAQCAtMTI4Myw2ICsxNTM2LDE0IEBACiAJCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181NDEzKTsKIAkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7CiAJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MTM6CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc18yNDEzKTsKKwkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MjU6CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc18yNDI1KTsKKwkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEzMjEsNiArMTU4MiwxNiBAQAogCQlhdGg1a19yZmcgPSByZmdhaW5fNTQxMzsKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzU0MTMpOwogCQlicmVhazsKKwljYXNlIEFSNUtfUkYyNDEzOgorCQlhdGg1a19yZmcgPSByZmdhaW5fMjQxMzsKKwkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzI0MTMpOworCQlmcmVxID0gMDsgLyogb25seSAyR2h6ICovCisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MjU6CisJCWF0aDVrX3JmZyA9IHJmZ2Fpbl8yNDEzOworCQlzaXplID0gQVJSQVlfU0laRShyZmdhaW5fMjQxMyk7CisJCWZyZXEgPSAwOyAvKiBvbmx5IDJHaHogKi8KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTM5NSw3ICsxNjY2LDYgQEAKIAkJYWgtPmFoX2dhaW4uZ19hY3RpdmUgPSAxOwogCQlicmVhazsKIAljYXNlIEFSNUtfUkY1MTEyOgotCWNhc2UgQVI1S19SRjU0MTM6IC8qID8/PyAqLwogCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4ID0gcmZnYWluX29wdF81MTEyLmdvX2RlZmF1bHQ7CiAJCWFoLT5haF9nYWluLmdfc3RlcCA9CiAJCSAgICAmcmZnYWluX29wdF81MTEyLmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CkBAIC0xNDQ1LDkgKzE3MTUsMTAgQEAKIAkgKiBuZXdlciBjaGlwc2V0cyBsaWtlIHRoZSBBUjUyMTJBIHdobyBoYXZlIGEgY29tcGxldGVseQogCSAqIGRpZmZlcmVudCBSRi9QSFkgcGFydC4KIAkgKi8KLQlhdGhjaGFuID0gKGF0aDVrX2h3X2JpdHN3YXAoKGNoYW5uZWwtPmNoYW4gLSAyNCkgLyAyLCA1KSA8PCAxKSB8Ci0JCSgxIDw8IDYpIHwgMHgxOwotCisJYXRoY2hhbiA9IChhdGg1a19od19iaXRzd2FwKAorCQkJKGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJCQljaGFubmVsLT5jZW50ZXJfZnJlcSkgLSAyNCkgLyAyLCA1KQorCQkJCTw8IDEpIHwgKDEgPDwgNikgfCAweDE7CiAJcmV0dXJuIGF0aGNoYW47CiB9CiAKQEAgLTE1MDYsNyArMTc3Nyw4IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgYXRoNWtfYXRoY2hhbl8yZ2h6IGF0aDVrX2NoYW5uZWxfMmdoejsKLQl1bnNpZ25lZCBpbnQgYXRoNWtfY2hhbm5lbCA9IGNoYW5uZWwtPmNoYW47CisJdW5zaWduZWQgaW50IGF0aDVrX2NoYW5uZWwgPQorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCXUzMiBkYXRhMCwgZGF0YTEsIGNsb2NrOwogCWludCByZXQ7CiAKQEAgLTE1MTUsMTAgKzE3ODcsMTEgQEAKIAkgKi8KIAlkYXRhMCA9IGRhdGExID0gMDsKIAotCWlmIChjaGFubmVsLT52YWwgJiBDSEFOTkVMXzJHSFopIHsKKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKIAkJLyogTWFwIDJHSHogY2hhbm5lbCB0byA1R0h6IEF0aGVyb3MgY2hhbm5lbCBJRCAqLwotCQlyZXQgPSBhdGg1a19od19yZjUxMTFfY2hhbjJhdGhjaGFuKGNoYW5uZWwtPmNoYW4sCi0JCQkJJmF0aDVrX2NoYW5uZWxfMmdoeik7CisJCXJldCA9IGF0aDVrX2h3X3JmNTExMV9jaGFuMmF0aGNoYW4oCisJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbm5lbC0+Y2VudGVyX2ZyZXEpLAorCQkJJmF0aDVrX2NoYW5uZWxfMmdoeik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0xNTU1LDcgKzE4MjgsNyBAQAogCXUxNiBjOwogCiAJZGF0YSA9IGRhdGEwID0gZGF0YTEgPSBkYXRhMiA9IDA7Ci0JYyA9IGNoYW5uZWwtPmZyZXE7CisJYyA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCiAJLyoKIAkgKiBTZXQgdGhlIGNoYW5uZWwgb24gdGhlIFJGNTExMiBvciBuZXdlcgpAQCAtMTU5OSwxOSArMTg3MiwxNyBAQAogaW50IGF0aDVrX2h3X2NoYW5uZWwoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQogewogCWludCByZXQ7Ci0KIAkvKgotCSAqIENoZWNrIGJvdW5kcyBzdXBwb3J0ZWQgYnkgdGhlIFBIWQotCSAqIChkb24ndCBjYXJlIGFib3V0IHJlZ3VsYXRpb24gcmVzdHJpY3Rpb25zIGF0IHRoaXMgcG9pbnQpCi0JICovCi0JaWYgKChjaGFubmVsLT5mcmVxIDwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9taW4gfHwKLQkgICAgY2hhbm5lbC0+ZnJlcSA+IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JhbmdlLnJhbmdlXzJnaHpfbWF4KSAmJgotCSAgICAoY2hhbm5lbC0+ZnJlcSA8IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JhbmdlLnJhbmdlXzVnaHpfbWluIHx8Ci0JICAgIGNoYW5uZWwtPmZyZXEgPiBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV81Z2h6X21heCkpIHsKKwkgKiBDaGVjayBib3VuZHMgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgKHdlIGRvbid0IGNhcmUgYWJvdXQgcmVndWx0b3J5CisJICogcmVzdHJpY3Rpb25zIGF0IHRoaXMgcG9pbnQpLiBOb3RlOiBod192YWx1ZSBhbHJlYWR5IGhhcyB0aGUgYmFuZAorCSAqIChDSEFOTkVMXzJHSFosIG9yIENIQU5ORUxfNUdIWikgc28gd2UgaW5mb3JtIGF0aDVrX2NoYW5uZWxfb2soKQorCSAqIG9mIHRoZSBiYW5kIGJ5IHRoYXQgKi8KKwlpZiAoIWF0aDVrX2NoYW5uZWxfb2soYWgsIGNoYW5uZWwtPmNlbnRlcl9mcmVxLCBjaGFubmVsLT5od192YWx1ZSkpIHsKIAkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCSJjaGFubmVsIG91dCBvZiBzdXBwb3J0ZWQgcmFuZ2UgKCV1IE1IeilcbiIsCi0JCQljaGFubmVsLT5mcmVxKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCQkiY2hhbm5lbCBmcmVxdWVuY3kgKCV1IE1Ieikgb3V0IG9mIHN1cHBvcnRlZCAiCisJCQkiYmFuZCByYW5nZVxuIiwKKwkJCWNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qCkBAIC0xNjMyLDkgKzE5MDMsOSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlhaC0+YWhfY3VycmVudF9jaGFubmVsLmZyZXEgPSBjaGFubmVsLT5mcmVxOwotCWFoLT5haF9jdXJyZW50X2NoYW5uZWwudmFsID0gY2hhbm5lbC0+dmFsOwotCWFoLT5haF90dXJibyA9IGNoYW5uZWwtPnZhbCA9PSBDSEFOTkVMX1QgPyB0cnVlIDogZmFsc2U7CisJYWgtPmFoX2N1cnJlbnRfY2hhbm5lbC5jZW50ZXJfZnJlcSA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCWFoLT5haF9jdXJyZW50X2NoYW5uZWwuaHdfdmFsdWUgPSBjaGFubmVsLT5od192YWx1ZTsKKwlhaC0+YWhfdHVyYm8gPSBjaGFubmVsLT5od192YWx1ZSA9PSBDSEFOTkVMX1QgPyB0cnVlIDogZmFsc2U7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3OTcsMTEgKzIwNjgsMTEgQEAKIAogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKGFoLT5haF9zYywgImNhbGlicmF0aW9uIHRpbWVvdXQgKCV1TUh6KVxuIiwKLQkJCQljaGFubmVsLT5mcmVxKTsKKwkJCQljaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gYXRoNWtfaHdfbm9pc2VfZmxvb3JfY2FsaWJyYXRpb24oYWgsIGNoYW5uZWwtPmZyZXEpOworCXJldCA9IGF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTgyNSw3ICsyMDk2LDcgQEAKIAlzMzIgaXFfY29yciwgaV9jb2ZmLCBpX2NvZmZkLCBxX2NvZmYsIHFfY29mZmQ7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAotCWlmIChhaC0+YWhfY2FsaWJyYXRpb24gPT0gZmFsc2UgfHwKKwlpZiAoIWFoLT5haF9jYWxpYnJhdGlvbiB8fAogCQkJYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0lRKSAmIEFSNUtfUEhZX0lRX1JVTikKIAkJZ290byBkb25lOwogCkBAIC0xODQ4LDEwICsyMTE5LDEwIEBACiAJCSgodTMyKXFfY29mZikgfCAoKHUzMilpX2NvZmYgPDwgQVI1S19QSFlfSVFfQ09SUl9RX0lfQ09GRl9TKSk7CiAKIGRvbmU6Ci0JYXRoNWtfaHdfbm9pc2VfZmxvb3JfY2FsaWJyYXRpb24oYWgsIGNoYW5uZWwtPmZyZXEpOworCWF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKIAkvKiBSZXF1ZXN0IFJGIGdhaW4gKi8KLQlpZiAoY2hhbm5lbC0+dmFsICYgQ0hBTk5FTF81R0haKSB7CisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKSB7CiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cG93ZXIudHhwX21heCwKIAkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhQT1dFUikgfAogCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhULCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKQEAgLTIwMTUsNiArMjI4NiwxOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKgorCSAqIFJGMjQxMyBmb3Igc29tZSByZWFzb24gY2FuJ3QKKwkgKiB0cmFuc21pdCBhbnl0aGluZyBpZiB3ZSBjYWxsCisJICogdGhpcyBmdW50aW9uLCBzbyB3ZSBza2lwIGl0CisJICogdW50aWwgd2UgZml4IHR4cG93ZXIuCisJICoKKwkgKiBYWFg6IEFzc3VtZSBzYW1lIGZvciBSRjI0MjUKKwkgKiB0byBiZSBzYWZlLgorCSAqLworCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyNDEzKSB8fCAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyNDI1KSkKKwkJcmV0dXJuIDA7CisKIAkvKiBSZXNldCBUWCBwb3dlciB2YWx1ZXMgKi8KIAltZW1zZXQoJmFoLT5haF90eHBvd2VyLCAwLCBzaXplb2YoYWgtPmFoX3R4cG93ZXIpKTsKIAlhaC0+YWhfdHhwb3dlci50eHBfdHBjID0gdHBjOwpAQCAtMjA0OCw3ICsyMzMxLDcgQEAKIAkJQVI1S19UWFBPV0VSX0NDSygxMywgMTYpIHwgQVI1S19UWFBPV0VSX0NDSygxMiwgOCkgfAogCQlBUjVLX1RYUE9XRVJfQ0NLKDExLCAwKSwgQVI1S19QSFlfVFhQT1dFUl9SQVRFNCk7CiAKLQlpZiAoYWgtPmFoX3R4cG93ZXIudHhwX3RwYyA9PSB0cnVlKQorCWlmIChhaC0+YWhfdHhwb3dlci50eHBfdHBjKQogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVhfVFBDX0VOQUJMRSB8CiAJCQlBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVgpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKaW5kZXggMmY0MWM4My4uMzA2MjliMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKQEAgLTE5MjMsNyArMTkyMyw5IEBACiAjZGVmaW5lIEFSNUtfUEhZX1NERUxBWV8zMk1IWgkJMHgwMDAwMDBmZgogI2RlZmluZSBBUjVLX1BIWV9TUEVORElORwkJMHg5OWY4CiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMQkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMgkweDAwMDAwMDE0CisjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMgkweDAwMDAwMDE0IC8qIDwtIGkgJ3ZlIG9ubHkgc2VlbiB0aGlzIG9uIDI0MjUgZHVtcHMgISAqLworI2RlZmluZSBBUjVLX1BIWV9TUEVORElOR19SRjUxMTJBCTB4MDAwMDAwMGUgLyogYnV0IHNpbmNlIGkgb25seSBoYXZlIDUxMTJBLWJhc2VkIGNoaXBzICovCisjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQyNAkweDAwMDAwMDEyIC8qIHRvIHRlc3QgaXQgbWlnaHQgYmUgYWxzbyBmb3Igb2xkIDUxMTIuICAqLwogCiAvKgogICogTWlzYyBQSFkvcmFkaW8gcmVnaXN0ZXJzIFs1MTEwIC0gNTExMV0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JlZ2RvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnZG9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NTE5NTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnZG9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBSZXlrIEZsb2V0ZXIgPHJleWtAdmFudHJvbml4Lm5ldD4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogQmFzaWMgcmVndWxhdGlvbiBkb21haW4gZXh0ZW5zaW9ucyBmb3IgdGhlIElFRUUgODAyLjExIHN0YWNrCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi0jaW5jbHVkZSAicmVnZG9tLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmVnZG9tbWFwIHsKLQllbnVtIGF0aDVrX3JlZ2RvbSBkbW47Ci0JZW51bSBhdGg1a19yZWdkb20gZG1uNTsKLQllbnVtIGF0aDVrX3JlZ2RvbSBkbW4yOwotfSByX21hcFtdID0gewotCXsgRE1OX0RFRkFVTFQsCQlETU5fREVCVUcsCURNTl9ERUJVRyB9LAotCXsgRE1OX05VTExfV09STEQsCURNTl9OVUxMLAlETU5fV09STEQgfSwKLQl7IERNTl9OVUxMX0VUU0lCLAlETU5fTlVMTCwJRE1OX0VUU0lCIH0sCi0JeyBETU5fTlVMTF9FVFNJQywJRE1OX05VTEwsCURNTl9FVFNJQyB9LAotCXsgRE1OX0ZDQzFfRkNDQSwJRE1OX0ZDQzEsCURNTl9GQ0NBIH0sCi0JeyBETU5fRkNDMV9XT1JMRCwJRE1OX0ZDQzEsCURNTl9XT1JMRCB9LAotCXsgRE1OX0ZDQzJfRkNDQSwJRE1OX0ZDQzIsCURNTl9GQ0NBIH0sCi0JeyBETU5fRkNDMl9XT1JMRCwJRE1OX0ZDQzIsCURNTl9XT1JMRCB9LAotCXsgRE1OX0ZDQzJfRVRTSUMsCURNTl9GQ0MyLAlETU5fRVRTSUMgfSwKLQl7IERNTl9GUkFOQ0VfTlVMTCwJRE1OX0VUU0kzLAlETU5fRVRTSTMgfSwKLQl7IERNTl9GQ0MzX0ZDQ0EsCURNTl9GQ0MzLAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJMV9XT1JMRCwJRE1OX0VUU0kxLAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJM19FVFNJQSwJRE1OX0VUU0kzLAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJMl9XT1JMRCwJRE1OX0VUU0kyLAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJM19XT1JMRCwJRE1OX0VUU0kzLAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJNF9XT1JMRCwJRE1OX0VUU0k0LAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJNF9FVFNJQywJRE1OX0VUU0k0LAlETU5fRVRTSUMgfSwKLQl7IERNTl9FVFNJNV9XT1JMRCwJRE1OX0VUU0k1LAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJNl9XT1JMRCwJRE1OX0VUU0k2LAlETU5fV09STEQgfSwKLQl7IERNTl9FVFNJX05VTEwsCURNTl9FVFNJMSwJRE1OX0VUU0kxIH0sCi0JeyBETU5fTUtLMV9NS0tBLAlETU5fTUtLMSwJRE1OX01LS0EgfSwKLQl7IERNTl9NS0sxX01LS0IsCURNTl9NS0sxLAlETU5fTUtLQSB9LAotCXsgRE1OX0FQTDRfV09STEQsCURNTl9BUEw0LAlETU5fV09STEQgfSwKLQl7IERNTl9NS0syX01LS0EsCURNTl9NS0syLAlETU5fTUtLQSB9LAotCXsgRE1OX0FQTF9OVUxMLAkJRE1OX0FQTDEsCURNTl9OVUxMIH0sCi0JeyBETU5fQVBMMl9XT1JMRCwJRE1OX0FQTDIsCURNTl9XT1JMRCB9LAotCXsgRE1OX0FQTDJfQVBMQywJRE1OX0FQTDIsCURNTl9XT1JMRCB9LAotCXsgRE1OX0FQTDNfV09STEQsCURNTl9BUEwzLAlETU5fV09STEQgfSwKLQl7IERNTl9NS0sxX0ZDQ0EsCURNTl9NS0sxLAlETU5fRkNDQSB9LAotCXsgRE1OX0FQTDJfQVBMRCwJRE1OX0FQTDIsCURNTl9BUExEIH0sCi0JeyBETU5fTUtLMV9NS0tBMSwJRE1OX01LSzEsCURNTl9NS0tBIH0sCi0JeyBETU5fTUtLMV9NS0tBMiwJRE1OX01LSzEsCURNTl9NS0tBIH0sCi0JeyBETU5fQVBMMV9XT1JMRCwJRE1OX0FQTDEsCURNTl9XT1JMRCB9LAotCXsgRE1OX0FQTDFfRkNDQSwJRE1OX0FQTDEsCURNTl9GQ0NBIH0sCi0JeyBETU5fQVBMMV9BUExBLAlETU5fQVBMMSwJRE1OX1dPUkxEIH0sCi0JeyBETU5fQVBMMV9FVFNJQywJRE1OX0FQTDEsCURNTl9FVFNJQyB9LAotCXsgRE1OX0FQTDJfRVRTSUMsCURNTl9BUEwyLAlETU5fRVRTSUMgfSwKLQl7IERNTl9BUEw1X1dPUkxELAlETU5fQVBMNSwJRE1OX1dPUkxEIH0sCi0JeyBETU5fV09SMF9XT1JMRCwJRE1OX1dPUkxELAlETU5fV09STEQgfSwKLQl7IERNTl9XT1IxX1dPUkxELAlETU5fV09STEQsCURNTl9XT1JMRCB9LAotCXsgRE1OX1dPUjJfV09STEQsCURNTl9XT1JMRCwJRE1OX1dPUkxEIH0sCi0JeyBETU5fV09SM19XT1JMRCwJRE1OX1dPUkxELAlETU5fV09STEQgfSwKLQl7IERNTl9XT1I0X1dPUkxELAlETU5fV09STEQsCURNTl9XT1JMRCB9LAotCXsgRE1OX1dPUjVfRVRTSUMsCURNTl9XT1JMRCwJRE1OX1dPUkxEIH0sCi0JeyBETU5fV09SMDFfV09STEQsCURNTl9XT1JMRCwJRE1OX1dPUkxEIH0sCi0JeyBETU5fV09SMDJfV09STEQsCURNTl9XT1JMRCwJRE1OX1dPUkxEIH0sCi0JeyBETU5fRVUxX1dPUkxELAlETU5fRVRTSTEsCURNTl9XT1JMRCB9LAotCXsgRE1OX1dPUjlfV09STEQsCURNTl9XT1JMRCwJRE1OX1dPUkxEIH0sCi0JeyBETU5fV09SQV9XT1JMRCwJRE1OX1dPUkxELAlETU5fV09STEQgfSwKLX07Ci0KLWVudW0gYXRoNWtfcmVnZG9tIGF0aDVrX3JlZ2RvbTJmbGFnKGVudW0gYXRoNWtfcmVnZG9tIGRtbiwgdTE2IG1oeikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJfbWFwKTsgaSsrKSB7Ci0JCWlmIChyX21hcFtpXS5kbW4gPT0gZG1uKSB7Ci0JCQlpZiAobWh6ID49IDIwMDAgJiYgbWh6IDw9IDMwMDApCi0JCQkJcmV0dXJuIHJfbWFwW2ldLmRtbjI7Ci0JCQlpZiAobWh6ID49IElFRUU4MDIxMV9DSEFOTkVMU181R0haX01JTiAmJgotCQkJCQltaHogPD0gSUVFRTgwMjExX0NIQU5ORUxTXzVHSFpfTUFYKQotCQkJCXJldHVybiByX21hcFtpXS5kbW41OwotCQl9Ci0JfQotCi0JcmV0dXJuIERNTl9ERUJVRzsKLX0KLQotdTE2IGF0aDVrX3JlZ2RvbV9mcm9tX2llZWUoZW51bSBhdGg1a19yZWdkb20gaWVlZSkKLXsKLQl1MzIgcmVnZG9tYWluID0gKHUzMilpZWVlOwotCi0JLyoKLQkgKiBVc2UgdGhlIGRlZmF1bHQgcmVndWxhdGlvbiBkb21haW4gaWYgdGhlIHZhbHVlIGlzIGVtcHR5Ci0JICogb3Igbm90IHN1cHBvcnRlZCBieSB0aGUgbmV0ODAyMTEgcmVndWxhdGlvbiBjb2RlLgotCSAqLwotCWlmIChhdGg1a19yZWdkb20yZmxhZyhyZWdkb21haW4sIElFRUU4MDIxMV9DSEFOTkVMU181R0haX01JTikgPT0KLQkJCURNTl9ERUJVRykKLQkJcmV0dXJuICh1MTYpQVI1S19UVU5FX1JFR0RPTUFJTjsKLQotCS8qIEl0IGlzIHN1cHBvcnRlZCwganVzdCByZXR1cm4gdGhlIHZhbHVlICovCi0JcmV0dXJuIHJlZ2RvbWFpbjsKLX0KLQotZW51bSBhdGg1a19yZWdkb20gYXRoNWtfcmVnZG9tX3RvX2llZWUodTE2IHJlZ2RvbWFpbikKLXsKLQllbnVtIGF0aDVrX3JlZ2RvbSBpZWVlID0gKGVudW0gYXRoNWtfcmVnZG9tKXJlZ2RvbWFpbjsKLQotCXJldHVybiBpZWVlOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZWdkb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JlZ2RvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2QzYzY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JlZ2RvbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgX0lFRUU4MDIxMV9SRUdET01BSU5fSF8KLSNkZWZpbmUgX0lFRUU4MDIxMV9SRUdET01BSU5fSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qIERlZmF1bHQgcmVndWxhdGlvbiBkb21haW4gaWYgc3RvcmVkIHZhbHVlIEVFUFJPTSB2YWx1ZSBpcyBpbnZhbGlkICovCi0jZGVmaW5lIEFSNUtfVFVORV9SRUdET01BSU4JRE1OX0ZDQzJfRkNDQQkvKiBDYW5hZGEgKi8KLSNkZWZpbmUgQVI1S19UVU5FX0NUUlkJCUNUUllfREVGQVVMVAotCi0KLWVudW0gYXRoNWtfcmVnZG9tIHsKLQlETU5fREVGQVVMVAkJPSAweDAwLAotCURNTl9OVUxMX1dPUkxECQk9IDB4MDMsCi0JRE1OX05VTExfRVRTSUIJCT0gMHgwNywKLQlETU5fTlVMTF9FVFNJQwkJPSAweDA4LAotCURNTl9GQ0MxX0ZDQ0EJCT0gMHgxMCwKLQlETU5fRkNDMV9XT1JMRAkJPSAweDExLAotCURNTl9GQ0MyX0ZDQ0EJCT0gMHgyMCwKLQlETU5fRkNDMl9XT1JMRAkJPSAweDIxLAotCURNTl9GQ0MyX0VUU0lDCQk9IDB4MjIsCi0JRE1OX0ZSQU5DRV9OVUxMCQk9IDB4MzEsCi0JRE1OX0ZDQzNfRkNDQQkJPSAweDNBLAotCURNTl9FVFNJMV9XT1JMRAkJPSAweDM3LAotCURNTl9FVFNJM19FVFNJQQkJPSAweDMyLAotCURNTl9FVFNJMl9XT1JMRAkJPSAweDM1LAotCURNTl9FVFNJM19XT1JMRAkJPSAweDM2LAotCURNTl9FVFNJNF9XT1JMRAkJPSAweDMwLAotCURNTl9FVFNJNF9FVFNJQwkJPSAweDM4LAotCURNTl9FVFNJNV9XT1JMRAkJPSAweDM5LAotCURNTl9FVFNJNl9XT1JMRAkJPSAweDM0LAotCURNTl9FVFNJX05VTEwJCT0gMHgzMywKLQlETU5fTUtLMV9NS0tBCQk9IDB4NDAsCi0JRE1OX01LSzFfTUtLQgkJPSAweDQxLAotCURNTl9BUEw0X1dPUkxECQk9IDB4NDIsCi0JRE1OX01LSzJfTUtLQQkJPSAweDQzLAotCURNTl9BUExfTlVMTAkJPSAweDQ0LAotCURNTl9BUEwyX1dPUkxECQk9IDB4NDUsCi0JRE1OX0FQTDJfQVBMQwkJPSAweDQ2LAotCURNTl9BUEwzX1dPUkxECQk9IDB4NDcsCi0JRE1OX01LSzFfRkNDQQkJPSAweDQ4LAotCURNTl9BUEwyX0FQTEQJCT0gMHg0OSwKLQlETU5fTUtLMV9NS0tBMQkJPSAweDRBLAotCURNTl9NS0sxX01LS0EyCQk9IDB4NEIsCi0JRE1OX0FQTDFfV09STEQJCT0gMHg1MiwKLQlETU5fQVBMMV9GQ0NBCQk9IDB4NTMsCi0JRE1OX0FQTDFfQVBMQQkJPSAweDU0LAotCURNTl9BUEwxX0VUU0lDCQk9IDB4NTUsCi0JRE1OX0FQTDJfRVRTSUMJCT0gMHg1NiwKLQlETU5fQVBMNV9XT1JMRAkJPSAweDU4LAotCURNTl9XT1IwX1dPUkxECQk9IDB4NjAsCi0JRE1OX1dPUjFfV09STEQJCT0gMHg2MSwKLQlETU5fV09SMl9XT1JMRAkJPSAweDYyLAotCURNTl9XT1IzX1dPUkxECQk9IDB4NjMsCi0JRE1OX1dPUjRfV09STEQJCT0gMHg2NCwKLQlETU5fV09SNV9FVFNJQwkJPSAweDY1LAotCURNTl9XT1IwMV9XT1JMRAkJPSAweDY2LAotCURNTl9XT1IwMl9XT1JMRAkJPSAweDY3LAotCURNTl9FVTFfV09STEQJCT0gMHg2OCwKLQlETU5fV09SOV9XT1JMRAkJPSAweDY5LAotCURNTl9XT1JBX1dPUkxECQk9IDB4NkEsCi0KLQlETU5fQVBMMQkJPSAweGYwMDAwMDAxLAotCURNTl9BUEwyCQk9IDB4ZjAwMDAwMDIsCi0JRE1OX0FQTDMJCT0gMHhmMDAwMDAwNCwKLQlETU5fQVBMNAkJPSAweGYwMDAwMDA4LAotCURNTl9BUEw1CQk9IDB4ZjAwMDAwMTAsCi0JRE1OX0VUU0kxCQk9IDB4ZjAwMDAwMjAsCi0JRE1OX0VUU0kyCQk9IDB4ZjAwMDAwNDAsCi0JRE1OX0VUU0kzCQk9IDB4ZjAwMDAwODAsCi0JRE1OX0VUU0k0CQk9IDB4ZjAwMDAxMDAsCi0JRE1OX0VUU0k1CQk9IDB4ZjAwMDAyMDAsCi0JRE1OX0VUU0k2CQk9IDB4ZjAwMDA0MDAsCi0JRE1OX0VUU0lBCQk9IDB4ZjAwMDA4MDAsCi0JRE1OX0VUU0lCCQk9IDB4ZjAwMDEwMDAsCi0JRE1OX0VUU0lDCQk9IDB4ZjAwMDIwMDAsCi0JRE1OX0ZDQzEJCT0gMHhmMDAwNDAwMCwKLQlETU5fRkNDMgkJPSAweGYwMDA4MDAwLAotCURNTl9GQ0MzCQk9IDB4ZjAwMTAwMDAsCi0JRE1OX0ZDQ0EJCT0gMHhmMDAyMDAwMCwKLQlETU5fQVBMRAkJPSAweGYwMDQwMDAwLAotCURNTl9NS0sxCQk9IDB4ZjAwODAwMDAsCi0JRE1OX01LSzIJCT0gMHhmMDEwMDAwMCwKLQlETU5fTUtLQQkJPSAweGYwMjAwMDAwLAotCURNTl9OVUxMCQk9IDB4ZjA0MDAwMDAsCi0JRE1OX1dPUkxECQk9IDB4ZjA4MDAwMDAsCi0JRE1OX0RFQlVHICAgICAgICAgICAgICAgPSAweGYxMDAwMDAwCS8qIHVzZWQgZm9yIGRlYnVnZ2luZyAqLwotfTsKLQotI2RlZmluZSBJRUVFODAyMTFfRE1OKF9kKQkoKF9kKSAmIH4weGYwMDAwMDAwKQotCi1lbnVtIGF0aDVrX2NvdW50cnljb2RlIHsKLQlDVFJZX0RFRkFVTFQgICAgICAgICAgICA9IDAsICAgLyogRGVmYXVsdCBkb21haW4gKE5BKSAqLwotCUNUUllfQUxCQU5JQSAgICAgICAgICAgID0gOCwgICAvKiBBbGJhbmlhICovCi0JQ1RSWV9BTEdFUklBICAgICAgICAgICAgPSAxMiwgIC8qIEFsZ2VyaWEgKi8KLQlDVFJZX0FSR0VOVElOQSAgICAgICAgICA9IDMyLCAgLyogQXJnZW50aW5hICovCi0JQ1RSWV9BUk1FTklBICAgICAgICAgICAgPSA1MSwgIC8qIEFybWVuaWEgKi8KLQlDVFJZX0FVU1RSQUxJQSAgICAgICAgICA9IDM2LCAgLyogQXVzdHJhbGlhICovCi0JQ1RSWV9BVVNUUklBICAgICAgICAgICAgPSA0MCwgIC8qIEF1c3RyaWEgKi8KLQlDVFJZX0FaRVJCQUlKQU4gICAgICAgICA9IDMxLCAgLyogQXplcmJhaWphbiAqLwotCUNUUllfQkFIUkFJTiAgICAgICAgICAgID0gNDgsICAvKiBCYWhyYWluICovCi0JQ1RSWV9CRUxBUlVTICAgICAgICAgICAgPSAxMTIsIC8qIEJlbGFydXMgKi8KLQlDVFJZX0JFTEdJVU0gICAgICAgICAgICA9IDU2LCAgLyogQmVsZ2l1bSAqLwotCUNUUllfQkVMSVpFICAgICAgICAgICAgID0gODQsICAvKiBCZWxpemUgKi8KLQlDVFJZX0JPTElWSUEgICAgICAgICAgICA9IDY4LCAgLyogQm9saXZpYSAqLwotCUNUUllfQlJBWklMICAgICAgICAgICAgID0gNzYsICAvKiBCcmF6aWwgKi8KLQlDVFJZX0JSVU5FSV9EQVJVU1NBTEFNICA9IDk2LCAgLyogQnJ1bmVpIERhcnVzc2FsYW0gKi8KLQlDVFJZX0JVTEdBUklBICAgICAgICAgICA9IDEwMCwgLyogQnVsZ2FyaWEgKi8KLQlDVFJZX0NBTkFEQSAgICAgICAgICAgICA9IDEyNCwgLyogQ2FuYWRhICovCi0JQ1RSWV9DSElMRSAgICAgICAgICAgICAgPSAxNTIsIC8qIENoaWxlICovCi0JQ1RSWV9DSElOQSAgICAgICAgICAgICAgPSAxNTYsIC8qIFBlb3BsZSdzIFJlcHVibGljIG9mIENoaW5hICovCi0JQ1RSWV9DT0xPTUJJQSAgICAgICAgICAgPSAxNzAsIC8qIENvbG9tYmlhICovCi0JQ1RSWV9DT1NUQV9SSUNBICAgICAgICAgPSAxODgsIC8qIENvc3RhIFJpY2EgKi8KLQlDVFJZX0NST0FUSUEgICAgICAgICAgICA9IDE5MSwgLyogQ3JvYXRpYSAqLwotCUNUUllfQ1lQUlVTICAgICAgICAgICAgID0gMTk2LCAvKiBDeXBydXMgKi8KLQlDVFJZX0NaRUNIICAgICAgICAgICAgICA9IDIwMywgLyogQ3plY2ggUmVwdWJsaWMgKi8KLQlDVFJZX0RFTk1BUksgICAgICAgICAgICA9IDIwOCwgLyogRGVubWFyayAqLwotCUNUUllfRE9NSU5JQ0FOX1JFUFVCTElDID0gMjE0LCAvKiBEb21pbmljYW4gUmVwdWJsaWMgKi8KLQlDVFJZX0VDVUFET1IgICAgICAgICAgICA9IDIxOCwgLyogRWN1YWRvciAqLwotCUNUUllfRUdZUFQgICAgICAgICAgICAgID0gODE4LCAvKiBFZ3lwdCAqLwotCUNUUllfRUxfU0FMVkFET1IgICAgICAgID0gMjIyLCAvKiBFbCBTYWx2YWRvciAqLwotCUNUUllfRVNUT05JQSAgICAgICAgICAgID0gMjMzLCAvKiBFc3RvbmlhICovCi0JQ1RSWV9GQUVST0VfSVNMQU5EUyAgICAgPSAyMzQsIC8qIEZhZXJvZSBJc2xhbmRzICovCi0JQ1RSWV9GSU5MQU5EICAgICAgICAgICAgPSAyNDYsIC8qIEZpbmxhbmQgKi8KLQlDVFJZX0ZSQU5DRSAgICAgICAgICAgICA9IDI1MCwgLyogRnJhbmNlICovCi0JQ1RSWV9GUkFOQ0UyICAgICAgICAgICAgPSAyNTUsIC8qIEZyYW5jZTIgKi8KLQlDVFJZX0dFT1JHSUEgICAgICAgICAgICA9IDI2OCwgLyogR2VvcmdpYSAqLwotCUNUUllfR0VSTUFOWSAgICAgICAgICAgID0gMjc2LCAvKiBHZXJtYW55ICovCi0JQ1RSWV9HUkVFQ0UgICAgICAgICAgICAgPSAzMDAsIC8qIEdyZWVjZSAqLwotCUNUUllfR1VBVEVNQUxBICAgICAgICAgID0gMzIwLCAvKiBHdWF0ZW1hbGEgKi8KLQlDVFJZX0hPTkRVUkFTICAgICAgICAgICA9IDM0MCwgLyogSG9uZHVyYXMgKi8KLQlDVFJZX0hPTkdfS09ORyAgICAgICAgICA9IDM0NCwgLyogSG9uZyBLb25nIFMuQS5SLiwgUC5SLkMuICovCi0JQ1RSWV9IVU5HQVJZICAgICAgICAgICAgPSAzNDgsIC8qIEh1bmdhcnkgKi8KLQlDVFJZX0lDRUxBTkQgICAgICAgICAgICA9IDM1MiwgLyogSWNlbGFuZCAqLwotCUNUUllfSU5ESUEgICAgICAgICAgICAgID0gMzU2LCAvKiBJbmRpYSAqLwotCUNUUllfSU5ET05FU0lBICAgICAgICAgID0gMzYwLCAvKiBJbmRvbmVzaWEgKi8KLQlDVFJZX0lSQU4gICAgICAgICAgICAgICA9IDM2NCwgLyogSXJhbiAqLwotCUNUUllfSVJBUSAgICAgICAgICAgICAgID0gMzY4LCAvKiBJcmFxICovCi0JQ1RSWV9JUkVMQU5EICAgICAgICAgICAgPSAzNzIsIC8qIElyZWxhbmQgKi8KLQlDVFJZX0lTUkFFTCAgICAgICAgICAgICA9IDM3NiwgLyogSXNyYWVsICovCi0JQ1RSWV9JVEFMWSAgICAgICAgICAgICAgPSAzODAsIC8qIEl0YWx5ICovCi0JQ1RSWV9KQU1BSUNBICAgICAgICAgICAgPSAzODgsIC8qIEphbWFpY2EgKi8KLQlDVFJZX0pBUEFOICAgICAgICAgICAgICA9IDM5MiwgLyogSmFwYW4gKi8KLQlDVFJZX0pBUEFOMSAgICAgICAgICAgICA9IDM5MywgLyogSmFwYW4gKEpQMSkgKi8KLQlDVFJZX0pBUEFOMiAgICAgICAgICAgICA9IDM5NCwgLyogSmFwYW4gKEpQMCkgKi8KLQlDVFJZX0pBUEFOMyAgICAgICAgICAgICA9IDM5NSwgLyogSmFwYW4gKEpQMS0xKSAqLwotCUNUUllfSkFQQU40ICAgICAgICAgICAgID0gMzk2LCAvKiBKYXBhbiAoSkUxKSAqLwotCUNUUllfSkFQQU41ICAgICAgICAgICAgID0gMzk3LCAvKiBKYXBhbiAoSkUyKSAqLwotCUNUUllfSk9SREFOICAgICAgICAgICAgID0gNDAwLCAvKiBKb3JkYW4gKi8KLQlDVFJZX0tBWkFLSFNUQU4gICAgICAgICA9IDM5OCwgLyogS2F6YWtoc3RhbiAqLwotCUNUUllfS0VOWUEgICAgICAgICAgICAgID0gNDA0LCAvKiBLZW55YSAqLwotCUNUUllfS09SRUFfTk9SVEggICAgICAgID0gNDA4LCAvKiBOb3J0aCBLb3JlYSAqLwotCUNUUllfS09SRUFfUk9DICAgICAgICAgID0gNDEwLCAvKiBTb3V0aCBLb3JlYSAqLwotCUNUUllfS09SRUFfUk9DMiAgICAgICAgID0gNDExLCAvKiBTb3V0aCBLb3JlYSAqLwotCUNUUllfS1VXQUlUICAgICAgICAgICAgID0gNDE0LCAvKiBLdXdhaXQgKi8KLQlDVFJZX0xBVFZJQSAgICAgICAgICAgICA9IDQyOCwgLyogTGF0dmlhICovCi0JQ1RSWV9MRUJBTk9OICAgICAgICAgICAgPSA0MjIsIC8qIExlYmFub24gKi8KLQlDVFJZX0xJQllBICAgICAgICAgICAgICA9IDQzNCwgLyogTGlieWEgKi8KLQlDVFJZX0xJRUNIVEVOU1RFSU4gICAgICA9IDQzOCwgLyogTGllY2h0ZW5zdGVpbiAqLwotCUNUUllfTElUSFVBTklBICAgICAgICAgID0gNDQwLCAvKiBMaXRodWFuaWEgKi8KLQlDVFJZX0xVWEVNQk9VUkcgICAgICAgICA9IDQ0MiwgLyogTHV4ZW1ib3VyZyAqLwotCUNUUllfTUFDQVUgICAgICAgICAgICAgID0gNDQ2LCAvKiBNYWNhdSAqLwotCUNUUllfTUFDRURPTklBICAgICAgICAgID0gODA3LCAvKiBSZXB1YmxpYyBvZiBNYWNlZG9uaWEgKi8KLQlDVFJZX01BTEFZU0lBICAgICAgICAgICA9IDQ1OCwgLyogTWFsYXlzaWEgKi8KLQlDVFJZX01FWElDTyAgICAgICAgICAgICA9IDQ4NCwgLyogTWV4aWNvICovCi0JQ1RSWV9NT05BQ08gICAgICAgICAgICAgPSA0OTIsIC8qIFByaW5jaXBhbGl0eSBvZiBNb25hY28gKi8KLQlDVFJZX01PUk9DQ08gICAgICAgICAgICA9IDUwNCwgLyogTW9yb2NjbyAqLwotCUNUUllfTkVUSEVSTEFORFMgICAgICAgID0gNTI4LCAvKiBOZXRoZXJsYW5kcyAqLwotCUNUUllfTkVXX1pFQUxBTkQgICAgICAgID0gNTU0LCAvKiBOZXcgWmVhbGFuZCAqLwotCUNUUllfTklDQVJBR1VBICAgICAgICAgID0gNTU4LCAvKiBOaWNhcmFndWEgKi8KLQlDVFJZX05PUldBWSAgICAgICAgICAgICA9IDU3OCwgLyogTm9yd2F5ICovCi0JQ1RSWV9PTUFOICAgICAgICAgICAgICAgPSA1MTIsIC8qIE9tYW4gKi8KLQlDVFJZX1BBS0lTVEFOICAgICAgICAgICA9IDU4NiwgLyogSXNsYW1pYyBSZXB1YmxpYyBvZiBQYWtpc3RhbiAqLwotCUNUUllfUEFOQU1BICAgICAgICAgICAgID0gNTkxLCAvKiBQYW5hbWEgKi8KLQlDVFJZX1BBUkFHVUFZICAgICAgICAgICA9IDYwMCwgLyogUGFyYWd1YXkgKi8KLQlDVFJZX1BFUlUgICAgICAgICAgICAgICA9IDYwNCwgLyogUGVydSAqLwotCUNUUllfUEhJTElQUElORVMgICAgICAgID0gNjA4LCAvKiBSZXB1YmxpYyBvZiB0aGUgUGhpbGlwcGluZXMgKi8KLQlDVFJZX1BPTEFORCAgICAgICAgICAgICA9IDYxNiwgLyogUG9sYW5kICovCi0JQ1RSWV9QT1JUVUdBTCAgICAgICAgICAgPSA2MjAsIC8qIFBvcnR1Z2FsICovCi0JQ1RSWV9QVUVSVE9fUklDTyAgICAgICAgPSA2MzAsIC8qIFB1ZXJ0byBSaWNvICovCi0JQ1RSWV9RQVRBUiAgICAgICAgICAgICAgPSA2MzQsIC8qIFFhdGFyICovCi0JQ1RSWV9ST01BTklBICAgICAgICAgICAgPSA2NDIsIC8qIFJvbWFuaWEgKi8KLQlDVFJZX1JVU1NJQSAgICAgICAgICAgICA9IDY0MywgLyogUnVzc2lhICovCi0JQ1RSWV9TQVVESV9BUkFCSUEgICAgICAgPSA2ODIsIC8qIFNhdWRpIEFyYWJpYSAqLwotCUNUUllfU0lOR0FQT1JFICAgICAgICAgID0gNzAyLCAvKiBTaW5nYXBvcmUgKi8KLQlDVFJZX1NMT1ZBS0lBICAgICAgICAgICA9IDcwMywgLyogU2xvdmFrIFJlcHVibGljICovCi0JQ1RSWV9TTE9WRU5JQSAgICAgICAgICAgPSA3MDUsIC8qIFNsb3ZlbmlhICovCi0JQ1RSWV9TT1VUSF9BRlJJQ0EgICAgICAgPSA3MTAsIC8qIFNvdXRoIEFmcmljYSAqLwotCUNUUllfU1BBSU4gICAgICAgICAgICAgID0gNzI0LCAvKiBTcGFpbiAqLwotCUNUUllfU1JJX0xBTktBICAgICAgICAgID0gNzI4LCAvKiBTcmkgTGFua2EgKi8KLQlDVFJZX1NXRURFTiAgICAgICAgICAgICA9IDc1MiwgLyogU3dlZGVuICovCi0JQ1RSWV9TV0lUWkVSTEFORCAgICAgICAgPSA3NTYsIC8qIFN3aXR6ZXJsYW5kICovCi0JQ1RSWV9TWVJJQSAgICAgICAgICAgICAgPSA3NjAsIC8qIFN5cmlhICovCi0JQ1RSWV9UQUlXQU4gICAgICAgICAgICAgPSAxNTgsIC8qIFRhaXdhbiAqLwotCUNUUllfVEhBSUxBTkQgICAgICAgICAgID0gNzY0LCAvKiBUaGFpbGFuZCAqLwotCUNUUllfVFJJTklEQURfWV9UT0JBR08gID0gNzgwLCAvKiBUcmluaWRhZCB5IFRvYmFnbyAqLwotCUNUUllfVFVOSVNJQSAgICAgICAgICAgID0gNzg4LCAvKiBUdW5pc2lhICovCi0JQ1RSWV9UVVJLRVkgICAgICAgICAgICAgPSA3OTIsIC8qIFR1cmtleSAqLwotCUNUUllfVUFFICAgICAgICAgICAgICAgID0gNzg0LCAvKiBVLkEuRS4gKi8KLQlDVFJZX1VLUkFJTkUgICAgICAgICAgICA9IDgwNCwgLyogVWtyYWluZSAqLwotCUNUUllfVU5JVEVEX0tJTkdET00gICAgID0gODI2LCAvKiBVbml0ZWQgS2luZ2RvbSAqLwotCUNUUllfVU5JVEVEX1NUQVRFUyAgICAgID0gODQwLCAvKiBVbml0ZWQgU3RhdGVzICovCi0JQ1RSWV9VUlVHVUFZICAgICAgICAgICAgPSA4NTgsIC8qIFVydWd1YXkgKi8KLQlDVFJZX1VaQkVLSVNUQU4gICAgICAgICA9IDg2MCwgLyogVXpiZWtpc3RhbiAqLwotCUNUUllfVkVORVpVRUxBICAgICAgICAgID0gODYyLCAvKiBWZW5lenVlbGEgKi8KLQlDVFJZX1ZJRVRfTkFNICAgICAgICAgICA9IDcwNCwgLyogVmlldCBOYW0gKi8KLQlDVFJZX1lFTUVOICAgICAgICAgICAgICA9IDg4NywgLyogWWVtZW4gKi8KLQlDVFJZX1pJTUJBQldFICAgICAgICAgICA9IDcxNiwgLyogWmltYmFid2UgKi8KLX07Ci0KLSNkZWZpbmUgSUVFRTgwMjExX0NIQU5ORUxTXzJHSFpfTUlOCTI0MTIJLyogMkdIeiBjaGFubmVsIDEgKi8KLSNkZWZpbmUgSUVFRTgwMjExX0NIQU5ORUxTXzJHSFpfTUFYCTI3MzIJLyogMkdIeiBjaGFubmVsIDI2ICovCi0jZGVmaW5lIElFRUU4MDIxMV9DSEFOTkVMU181R0haX01JTgk1MDA1CS8qIDVHSHogY2hhbm5lbCAxICovCi0jZGVmaW5lIElFRUU4MDIxMV9DSEFOTkVMU181R0haX01BWAk2MTAwCS8qIDVHSHogY2hhbm5lbCAyMjAgKi8KLQotc3RydWN0IGF0aDVrX3JlZ2NoYW5uZWwgewotCXUxNiBjaGFuOwotCWVudW0gYXRoNWtfcmVnZG9tIGRvbWFpbjsKLQl1MzIgbW9kZTsKLX07Ci0KLSNkZWZpbmUgSUVFRTgwMjExX0NIQU5ORUxTXzJHSFogewkJCQkJXAotLyoyNDEyKi8geyAgIDEsIERNTl9BUExELCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MTcqLyB7ICAgMiwgRE1OX0FQTEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQyMiovIHsgICAzLCBETU5fQVBMRCwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDI3Ki8geyAgIDQsIERNTl9BUExELCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MzIqLyB7ICAgNSwgRE1OX0FQTEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQzNyovIHsgICA2LCBETU5fQVBMRCwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDQyKi8geyAgIDcsIERNTl9BUExELCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NDcqLyB7ICAgOCwgRE1OX0FQTEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ1MiovIHsgICA5LCBETU5fQVBMRCwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDU3Ki8geyAgMTAsIERNTl9BUExELCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NjIqLyB7ICAxMSwgRE1OX0FQTEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ2NyovIHsgIDEyLCBETU5fQVBMRCwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDcyKi8geyAgMTMsIERNTl9BUExELCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0JCQkJCQkJCQlcCi0vKjI0MzIqLyB7ICAgNSwgRE1OX0VUU0lCLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MzcqLyB7ICAgNiwgRE1OX0VUU0lCLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTyB9LAlcCi0vKjI0NDIqLyB7ICAgNywgRE1OX0VUU0lCLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0JCQkJCQkJCQlcCi0vKjI0MTIqLyB7ICAgMSwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MTcqLyB7ICAgMiwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MjIqLyB7ICAgMywgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MjcqLyB7ICAgNCwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MzIqLyB7ICAgNSwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MzcqLyB7ICAgNiwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTyB9LAlcCi0vKjI0NDIqLyB7ICAgNywgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NDcqLyB7ICAgOCwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NTIqLyB7ICAgOSwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NTcqLyB7ICAxMCwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NjIqLyB7ICAxMSwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NjcqLyB7ICAxMiwgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NzIqLyB7ICAxMywgRE1OX0VUU0lDLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0JCQkJCQkJCQlcCi0vKjI0MTIqLyB7ICAgMSwgRE1OX0ZDQ0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQxNyovIHsgICAyLCBETU5fRkNDQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDIyKi8geyAgIDMsIERNTl9GQ0NBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MjcqLyB7ICAgNCwgRE1OX0ZDQ0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQzMiovIHsgICA1LCBETU5fRkNDQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDM3Ki8geyAgIDYsIERNTl9GQ0NBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTyB9LAlcCi0vKjI0NDIqLyB7ICAgNywgRE1OX0ZDQ0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ0NyovIHsgICA4LCBETU5fRkNDQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDUyKi8geyAgIDksIERNTl9GQ0NBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NTcqLyB7ICAxMCwgRE1OX0ZDQ0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ2MiovIHsgIDExLCBETU5fRkNDQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotCQkJCQkJCQkJXAotLyoyNDEyKi8geyAgIDEsIERNTl9NS0tBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MTcqLyB7ICAgMiwgRE1OX01LS0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQyMiovIHsgICAzLCBETU5fTUtLQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDI3Ki8geyAgIDQsIERNTl9NS0tBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0MzIqLyB7ICAgNSwgRE1OX01LS0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQzNyovIHsgICA2LCBETU5fTUtLQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDQyKi8geyAgIDcsIERNTl9NS0tBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NDcqLyB7ICAgOCwgRE1OX01LS0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ1MiovIHsgICA5LCBETU5fTUtLQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDU3Ki8geyAgMTAsIERNTl9NS0tBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0NjIqLyB7ICAxMSwgRE1OX01LS0EsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ2NyovIHsgIDEyLCBETU5fTUtLQSwgQ0hBTk5FTF9DQ0t8Q0hBTk5FTF9PRkRNIH0sCQkJXAotLyoyNDcyKi8geyAgMTMsIERNTl9NS0tBLCBDSEFOTkVMX0NDS3xDSEFOTkVMX09GRE0gfSwJCQlcCi0vKjI0ODQqLyB7ICAxNCwgRE1OX01LS0EsIENIQU5ORUxfQ0NLIH0sCQkJCVwKLQkJCQkJCQkJCVwKLS8qMjQxMiovIHsgICAxLCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQxNyovIHsgICAyLCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQyMiovIHsgICAzLCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQyNyovIHsgICA0LCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQzMiovIHsgICA1LCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQzNyovIHsgICA2LCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETXxDSEFOTkVMX1RVUkJPIH0sCVwKLS8qMjQ0MiovIHsgICA3LCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ0NyovIHsgICA4LCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ1MiovIHsgICA5LCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ1NyovIHsgIDEwLCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ2MiovIHsgIDExLCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ2NyovIHsgIDEyLCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLS8qMjQ3MiovIHsgIDEzLCBETU5fV09STEQsIENIQU5ORUxfQ0NLfENIQU5ORUxfT0ZETSB9LAkJCVwKLX0KLQotI2RlZmluZSBJRUVFODAyMTFfQ0hBTk5FTFNfNUdIWiB7CQkJXAotLyo1NzQ1Ki8geyAxNDksIERNTl9BUEwxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTc2NSovIHsgMTUzLCBETU5fQVBMMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3ODUqLyB7IDE1NywgRE1OX0FQTDEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1ODA1Ki8geyAxNjEsIERNTl9BUEwxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTgyNSovIHsgMTY1LCBETU5fQVBMMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0JCQkJCQkJXAotLyo1NzQ1Ki8geyAxNDksIERNTl9BUEwyLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTc2NSovIHsgMTUzLCBETU5fQVBMMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3ODUqLyB7IDE1NywgRE1OX0FQTDIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1ODA1Ki8geyAxNjEsIERNTl9BUEwyLCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjUyODAqLyB7ICA1NiwgRE1OX0FQTDMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MzAwKi8geyAgNjAsIERNTl9BUEwzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTMyMCovIHsgIDY0LCBETU5fQVBMMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3NDUqLyB7IDE0OSwgRE1OX0FQTDMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NzY1Ki8geyAxNTMsIERNTl9BUEwzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTc4NSovIHsgMTU3LCBETU5fQVBMMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU4MDUqLyB7IDE2MSwgRE1OX0FQTDMsIENIQU5ORUxfT0ZETSB9LAkJXAotCQkJCQkJCVwKLS8qNTE4MCovIHsgIDM2LCBETU5fQVBMNCwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMDAqLyB7ICA0MCwgRE1OX0FQTDQsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjIwKi8geyAgNDQsIERNTl9BUEw0LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI0MCovIHsgIDQ4LCBETU5fQVBMNCwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3NDUqLyB7IDE0OSwgRE1OX0FQTDQsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NzY1Ki8geyAxNTMsIERNTl9BUEw0LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTc4NSovIHsgMTU3LCBETU5fQVBMNCwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU4MDUqLyB7IDE2MSwgRE1OX0FQTDQsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1ODI1Ki8geyAxNjUsIERNTl9BUEw0LCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjU3NDUqLyB7IDE0OSwgRE1OX0FQTDUsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NzY1Ki8geyAxNTMsIERNTl9BUEw1LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTc4NSovIHsgMTU3LCBETU5fQVBMNSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU4MDUqLyB7IDE2MSwgRE1OX0FQTDUsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1ODI1Ki8geyAxNjUsIERNTl9BUEw1LCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjUxODAqLyB7ICAzNiwgRE1OX0VUU0kxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIwMCovIHsgIDQwLCBETU5fRVRTSTEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjIwKi8geyAgNDQsIERNTl9FVFNJMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyNDAqLyB7ICA0OCwgRE1OX0VUU0kxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI2MCovIHsgIDUyLCBETU5fRVRTSTEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjgwKi8geyAgNTYsIERNTl9FVFNJMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUzMDAqLyB7ICA2MCwgRE1OX0VUU0kxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTMyMCovIHsgIDY0LCBETU5fRVRTSTEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NTAwKi8geyAxMDAsIERNTl9FVFNJMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU1MjAqLyB7IDEwNCwgRE1OX0VUU0kxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTU0MCovIHsgMTA4LCBETU5fRVRTSTEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NTYwKi8geyAxMTIsIERNTl9FVFNJMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU1ODAqLyB7IDExNiwgRE1OX0VUU0kxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTYwMCovIHsgMTIwLCBETU5fRVRTSTEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NjIwKi8geyAxMjQsIERNTl9FVFNJMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU2NDAqLyB7IDEyOCwgRE1OX0VUU0kxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTY2MCovIHsgMTMyLCBETU5fRVRTSTEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NjgwKi8geyAxMzYsIERNTl9FVFNJMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3MDAqLyB7IDE0MCwgRE1OX0VUU0kxLCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjUxODAqLyB7ICAzNiwgRE1OX0VUU0kyLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIwMCovIHsgIDQwLCBETU5fRVRTSTIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjIwKi8geyAgNDQsIERNTl9FVFNJMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyNDAqLyB7ICA0OCwgRE1OX0VUU0kyLCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjUxODAqLyB7ICAzNiwgRE1OX0VUU0kzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIwMCovIHsgIDQwLCBETU5fRVRTSTMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjIwKi8geyAgNDQsIERNTl9FVFNJMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyNDAqLyB7ICA0OCwgRE1OX0VUU0kzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI2MCovIHsgIDUyLCBETU5fRVRTSTMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjgwKi8geyAgNTYsIERNTl9FVFNJMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUzMDAqLyB7ICA2MCwgRE1OX0VUU0kzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTMyMCovIHsgIDY0LCBETU5fRVRTSTMsIENIQU5ORUxfT0ZETSB9LAkJXAotCQkJCQkJCVwKLS8qNTE4MCovIHsgIDM2LCBETU5fRVRTSTQsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjAwKi8geyAgNDAsIERNTl9FVFNJNCwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMjAqLyB7ICA0NCwgRE1OX0VUU0k0LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI0MCovIHsgIDQ4LCBETU5fRVRTSTQsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjYwKi8geyAgNTIsIERNTl9FVFNJNCwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyODAqLyB7ICA1NiwgRE1OX0VUU0k0LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTMwMCovIHsgIDYwLCBETU5fRVRTSTQsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MzIwKi8geyAgNjQsIERNTl9FVFNJNCwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0JCQkJCQkJXAotLyo1MTgwKi8geyAgMzYsIERNTl9FVFNJNSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMDAqLyB7ICA0MCwgRE1OX0VUU0k1LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIyMCovIHsgIDQ0LCBETU5fRVRTSTUsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjQwKi8geyAgNDgsIERNTl9FVFNJNSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0JCQkJCQkJXAotLyo1MTgwKi8geyAgMzYsIERNTl9FVFNJNiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMDAqLyB7ICA0MCwgRE1OX0VUU0k2LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIyMCovIHsgIDQ0LCBETU5fRVRTSTYsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjQwKi8geyAgNDgsIERNTl9FVFNJNiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyNjAqLyB7ICA1MiwgRE1OX0VUU0k2LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI4MCovIHsgIDU2LCBETU5fRVRTSTYsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NTAwKi8geyAxMDAsIERNTl9FVFNJNiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU1MjAqLyB7IDEwNCwgRE1OX0VUU0k2LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTU0MCovIHsgMTA4LCBETU5fRVRTSTYsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NTYwKi8geyAxMTIsIERNTl9FVFNJNiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU1ODAqLyB7IDExNiwgRE1OX0VUU0k2LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTYwMCovIHsgMTIwLCBETU5fRVRTSTYsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NjIwKi8geyAxMjQsIERNTl9FVFNJNiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU2NDAqLyB7IDEyOCwgRE1OX0VUU0k2LCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTY2MCovIHsgMTMyLCBETU5fRVRTSTYsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NjgwKi8geyAxMzYsIERNTl9FVFNJNiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3MDAqLyB7IDE0MCwgRE1OX0VUU0k2LCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjUxODAqLyB7ICAzNiwgRE1OX0ZDQzEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjAwKi8geyAgNDAsIERNTl9GQ0MxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIxMCovIHsgIDQyLCBETU5fRkNDMSwgQ0hBTk5FTF9PRkRNfENIQU5ORUxfVFVSQk8gfSwJXAotLyo1MjIwKi8geyAgNDQsIERNTl9GQ0MxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI0MCovIHsgIDQ4LCBETU5fRkNDMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyNTAqLyB7ICA1MCwgRE1OX0ZDQzEsIENIQU5ORUxfT0ZETXxDSEFOTkVMX1RVUkJPIH0sCVwKLS8qNTI2MCovIHsgIDUyLCBETU5fRkNDMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyODAqLyB7ICA1NiwgRE1OX0ZDQzEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjkwKi8geyAgNTgsIERNTl9GQ0MxLCBDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTyB9LAlcCi0vKjUzMDAqLyB7ICA2MCwgRE1OX0ZDQzEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MzIwKi8geyAgNjQsIERNTl9GQ0MxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTc0NSovIHsgMTQ5LCBETU5fRkNDMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3NjAqLyB7IDE1MiwgRE1OX0ZDQzEsIENIQU5ORUxfT0ZETXxDSEFOTkVMX1RVUkJPIH0sCVwKLS8qNTc2NSovIHsgMTUzLCBETU5fRkNDMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3ODUqLyB7IDE1NywgRE1OX0ZDQzEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1ODAwKi8geyAxNjAsIERNTl9GQ0MxLCBDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTyB9LAlcCi0vKjU4MDUqLyB7IDE2MSwgRE1OX0ZDQzEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1ODI1Ki8geyAxNjUsIERNTl9GQ0MxLCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjUxODAqLyB7ICAzNiwgRE1OX0ZDQzIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjAwKi8geyAgNDAsIERNTl9GQ0MyLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIyMCovIHsgIDQ0LCBETU5fRkNDMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyNDAqLyB7ICA0OCwgRE1OX0ZDQzIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjYwKi8geyAgNTIsIERNTl9GQ0MyLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI4MCovIHsgIDU2LCBETU5fRkNDMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUzMDAqLyB7ICA2MCwgRE1OX0ZDQzIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MzIwKi8geyAgNjQsIERNTl9GQ0MyLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTc0NSovIHsgMTQ5LCBETU5fRkNDMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3NjUqLyB7IDE1MywgRE1OX0ZDQzIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1Nzg1Ki8geyAxNTcsIERNTl9GQ0MyLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTgwNSovIHsgMTYxLCBETU5fRkNDMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU4MjUqLyB7IDE2NSwgRE1OX0ZDQzIsIENIQU5ORUxfT0ZETSB9LAkJXAotCQkJCQkJCVwKLS8qNTE4MCovIHsgIDM2LCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMDAqLyB7ICA0MCwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjEwKi8geyAgNDIsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTyB9LAlcCi0vKjUyMjAqLyB7ICA0NCwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjQwKi8geyAgNDgsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI1MCovIHsgIDUwLCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNfENIQU5ORUxfVFVSQk8gfSwJXAotLyo1MjYwKi8geyAgNTIsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI4MCovIHsgIDU2LCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyOTAqLyB7ICA1OCwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETXxDSEFOTkVMX1RVUkJPIH0sCVwKLS8qNTMwMCovIHsgIDYwLCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUzMjAqLyB7ICA2NCwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NTAwKi8geyAxMDAsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTUyMCovIHsgMTA0LCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU1NDAqLyB7IDEwOCwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NTYwKi8geyAxMTIsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTU4MCovIHsgMTE2LCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU2MDAqLyB7IDEyMCwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NjIwKi8geyAxMjQsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTY0MCovIHsgMTI4LCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU2NjAqLyB7IDEzMiwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NjgwKi8geyAxMzYsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTcwMCovIHsgMTQwLCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjU3NDUqLyB7IDE0OSwgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1NzYwKi8geyAxNTIsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTyB9LAlcCi0vKjU3NjUqLyB7IDE1MywgRE1OX0ZDQzMsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1Nzg1Ki8geyAxNTcsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTgwMCovIHsgMTYwLCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNfENIQU5ORUxfVFVSQk8gfSwJXAotLyo1ODA1Ki8geyAxNjEsIERNTl9GQ0MzLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTgyNSovIHsgMTY1LCBETU5fRkNDMywgQ0hBTk5FTF9PRkRNIH0sCQlcCi0JCQkJCQkJXAotLyo1MTcwKi8geyAgMzQsIERNTl9NS0sxLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTE5MCovIHsgIDM4LCBETU5fTUtLMSwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMTAqLyB7ICA0MiwgRE1OX01LSzEsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjMwKi8geyAgNDYsIERNTl9NS0sxLCBDSEFOTkVMX09GRE0gfSwJCVwKLQkJCQkJCQlcCi0vKjUwNDAqLyB7ICAgOCwgRE1OX01LSzIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MDYwKi8geyAgMTIsIERNTl9NS0syLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTA4MCovIHsgIDE2LCBETU5fTUtLMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUxNzAqLyB7ICAzNCwgRE1OX01LSzIsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MTkwKi8geyAgMzgsIERNTl9NS0syLCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTIxMCovIHsgIDQyLCBETU5fTUtLMiwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMzAqLyB7ICA0NiwgRE1OX01LSzIsIENIQU5ORUxfT0ZETSB9LAkJXAotCQkJCQkJCVwKLS8qNTE4MCovIHsgIDM2LCBETU5fV09STEQsIENIQU5ORUxfT0ZETSB9LAkJXAotLyo1MjAwKi8geyAgNDAsIERNTl9XT1JMRCwgQ0hBTk5FTF9PRkRNIH0sCQlcCi0vKjUyMjAqLyB7ICA0NCwgRE1OX1dPUkxELCBDSEFOTkVMX09GRE0gfSwJCVwKLS8qNTI0MCovIHsgIDQ4LCBETU5fV09STEQsIENIQU5ORUxfT0ZETSB9LAkJXAotfQotCi1lbnVtIGF0aDVrX3JlZ2RvbSBhdGg1a19yZWdkb20yZmxhZyhlbnVtIGF0aDVrX3JlZ2RvbSwgdTE2KTsKLXUxNiBhdGg1a19yZWdkb21fZnJvbV9pZWVlKGVudW0gYXRoNWtfcmVnZG9tIGllZWUpOwotZW51bSBhdGg1a19yZWdkb20gYXRoNWtfcmVnZG9tX3RvX2llZWUodTE2IHJlZ2RvbWFpbik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggNjNlYzdhNy4uZWYyZGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSAiYXRtZWwuaCIKIApAQCAtNTE2LDcgKzUxNyw3IEBACiAJCVNJVEVfU1VSVkVZX0lOX1BST0dSRVNTLAogCQlTSVRFX1NVUlZFWV9DT01QTEVURUQKIAl9IHNpdGVfc3VydmV5X3N0YXRlOwotCXRpbWVfdCBsYXN0X3N1cnZleTsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfc3VydmV5OwogCiAJaW50IHN0YXRpb25fd2FzX2Fzc29jaWF0ZWQsIHN0YXRpb25faXNfYXNzb2NpYXRlZDsKIAlpbnQgZmFzdF9zY2FuOwpAQCAtMjI4Myw3ICsyMjg0LDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAkvKiBUaW1lb3V0IG9sZCBzdXJ2ZXlzLiAqLwotCWlmICgoamlmZmllcyAtIHByaXYtPmxhc3Rfc3VydmV5KSA+ICgyMCAqIEhaKSkKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBwcml2LT5sYXN0X3N1cnZleSArIDIwICogSFopKQogCQlwcml2LT5zaXRlX3N1cnZleV9zdGF0ZSA9IFNJVEVfU1VSVkVZX0lETEU7CiAJcHJpdi0+bGFzdF9zdXJ2ZXkgPSBqaWZmaWVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCmluZGV4IDFhMjE0MWQuLmY1MWIyZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCkBAIC0zMiw2ICszMiw3IEBACiAJYm9vbAogCWRlcGVuZHMgb24gQjQzICYmIFNTQl9QQ0lIT1NUX1BPU1NJQkxFCiAJc2VsZWN0IFNTQl9QQ0lIT1NUCisJc2VsZWN0IFNTQl9CNDNfUENJX0JSSURHRQogCWRlZmF1bHQgeQogCiAjIEF1dG8tc2VsZWN0IFNTQiBQQ0lDT1JFIGRyaXZlciwgaWYgcG9zc2libGUKQEAgLTYxLDYgKzYyLDE0IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKKyMgRGF0YSB0cmFuc2ZlcnMgdG8gdGhlIGRldmljZSB2aWEgUElPCisjIFRoaXMgaXMgb25seSBuZWVkZWQgb24gUENNQ0lBIGRldmljZXMuIEFsbCBvdGhlcnMgY2FuIGRvIERNQSBwcm9wZXJseS4KK2NvbmZpZyBCNDNfUElPCisJYm9vbAorCWRlcGVuZHMgb24gQjQzICYmIChCNDNfUENNQ0lBIHx8IEI0M19GT1JDRV9QSU8pCisJc2VsZWN0IFNTQl9CTE9DS0lPCisJZGVmYXVsdCB5CisKIGNvbmZpZyBCNDNfTlBIWQogCWJvb2wgIlByZSBJRUVFIDgwMi4xMW4gc3VwcG9ydCAoQlJPS0VOKSIKIAlkZXBlbmRzIG9uIEI0MyAmJiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCkBAIC05MywzICsxMDIsMTMgQEAKIAogCSAgU2F5IFksIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHdoeSB0aGUgZHJpdmVyIGRvZXMgbm90CiAJICB3b3JrIGZvciB5b3UuCisKK2NvbmZpZyBCNDNfRk9SQ0VfUElPCisJYm9vbCAiRm9yY2UgdXNhZ2Ugb2YgUElPIGluc3RlYWQgb2YgRE1BIgorCWRlcGVuZHMgb24gQjQzICYmIEI0M19ERUJVRworCS0tLWhlbHAtLS0KKwkgIFRoaXMgd2lsbCBkaXNhYmxlIERNQSBhbmQgYWx3YXlzIGVuYWJsZSBQSU8gaW5zdGVhZC4KKworCSAgU2F5IE4hCisJICBUaGlzIGlzIG9ubHkgZm9yIGRlYnVnZ2luZyB0aGUgUElPIGVuZ2luZSBjb2RlLiBZb3UgZG8KKwkgIF9OT1RfIHdhbnQgdG8gZW5hYmxlIHRoaXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKaW5kZXggYWMxMzI5ZC4uOGM1MmIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQpAQCAtMSwxMyArMSwxNCBAQAogYjQzLXkJCQkJKz0gbWFpbi5vCiBiNDMteQkJCQkrPSB0YWJsZXMubwotYjQzLXkJCQkJKz0gdGFibGVzX25waHkubworYjQzLSQoQ09ORklHX0I0M19OUEhZKQkJKz0gdGFibGVzX25waHkubwogYjQzLXkJCQkJKz0gcGh5Lm8KLWI0My15CQkJCSs9IG5waHkubworYjQzLSQoQ09ORklHX0I0M19OUEhZKQkJKz0gbnBoeS5vCiBiNDMteQkJCQkrPSBzeXNmcy5vCiBiNDMteQkJCQkrPSB4bWl0Lm8KIGI0My15CQkJCSs9IGxvLm8KIGI0My15CQkJCSs9IHdhLm8KIGI0My15CQkJCSs9IGRtYS5vCitiNDMtJChDT05GSUdfQjQzX1BJTykJCSs9IHBpby5vCiBiNDMtJChDT05GSUdfQjQzX1JGS0lMTCkJKz0gcmZraWxsLm8KIGI0My0kKENPTkZJR19CNDNfTEVEUykJCSs9IGxlZHMubwogYjQzLSQoQ09ORklHX0I0M19QQ01DSUEpCSs9IHBjbWNpYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggMDhhMDExZi4uZWZmMmExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtMTQsNiArMTQsMTIgQEAKICNpbmNsdWRlICJsby5oIgogI2luY2x1ZGUgInBoeS5oIgogCisKKy8qIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZmlybXdhcmUgdGhhdCdzIG9mZmljaWFsbHkgc3VwcG9ydGVkIGJ5CisgKiB0aGlzIGRyaXZlciB2ZXJzaW9uLiAqLworI2RlZmluZSBCNDNfU1VQUE9SVEVEX0ZJUk1XQVJFX0lECSJGVzEzIgorCisKICNpZmRlZiBDT05GSUdfQjQzX0RFQlVHCiAjIGRlZmluZSBCNDNfREVCVUcJMQogI2Vsc2UKQEAgLTY5LDYgKzc1LDIzIEBACiAjZGVmaW5lIEI0M19NTUlPX0RNQTY0X0JBU0U0CQkweDMwMAogI2RlZmluZSBCNDNfTU1JT19ETUE2NF9CQVNFNQkJMHgzNDAKIAorLyogUElPIG9uIGNvcmUgcmV2IDwgMTEgKi8KKyNkZWZpbmUgQjQzX01NSU9fUElPX0JBU0UwCQkweDMwMAorI2RlZmluZSBCNDNfTU1JT19QSU9fQkFTRTEJCTB4MzEwCisjZGVmaW5lIEI0M19NTUlPX1BJT19CQVNFMgkJMHgzMjAKKyNkZWZpbmUgQjQzX01NSU9fUElPX0JBU0UzCQkweDMzMAorI2RlZmluZSBCNDNfTU1JT19QSU9fQkFTRTQJCTB4MzQwCisjZGVmaW5lIEI0M19NTUlPX1BJT19CQVNFNQkJMHgzNTAKKyNkZWZpbmUgQjQzX01NSU9fUElPX0JBU0U2CQkweDM2MAorI2RlZmluZSBCNDNfTU1JT19QSU9fQkFTRTcJCTB4MzcwCisvKiBQSU8gb24gY29yZSByZXYgPj0gMTEgKi8KKyNkZWZpbmUgQjQzX01NSU9fUElPMTFfQkFTRTAJCTB4MjAwCisjZGVmaW5lIEI0M19NTUlPX1BJTzExX0JBU0UxCQkweDI0MAorI2RlZmluZSBCNDNfTU1JT19QSU8xMV9CQVNFMgkJMHgyODAKKyNkZWZpbmUgQjQzX01NSU9fUElPMTFfQkFTRTMJCTB4MkMwCisjZGVmaW5lIEI0M19NTUlPX1BJTzExX0JBU0U0CQkweDMwMAorI2RlZmluZSBCNDNfTU1JT19QSU8xMV9CQVNFNQkJMHgzNDAKKwogI2RlZmluZSBCNDNfTU1JT19QSFlfVkVSCQkweDNFMAogI2RlZmluZSBCNDNfTU1JT19QSFlfUkFESU8JCTB4M0UyCiAjZGVmaW5lIEI0M19NTUlPX1BIWTAJCQkweDNFNgpAQCAtODgsMTEgKzExMSwxNCBAQAogI2RlZmluZSBCNDNfTU1JT19HUElPX01BU0sJCTB4NDlFCiAjZGVmaW5lIEI0M19NTUlPX1RTRl9DRlBfU1RBUlRfTE9XCTB4NjA0CiAjZGVmaW5lIEI0M19NTUlPX1RTRl9DRlBfU1RBUlRfSElHSAkweDYwNgorI2RlZmluZSBCNDNfTU1JT19UU0ZfQ0ZQX1BSRVRCVFQJMHg2MTIKICNkZWZpbmUgQjQzX01NSU9fVFNGXzAJCQkweDYzMgkvKiBjb3JlIHJldiA8IDMgb25seSAqLwogI2RlZmluZSBCNDNfTU1JT19UU0ZfMQkJCTB4NjM0CS8qIGNvcmUgcmV2IDwgMyBvbmx5ICovCiAjZGVmaW5lIEI0M19NTUlPX1RTRl8yCQkJMHg2MzYJLyogY29yZSByZXYgPCAzIG9ubHkgKi8KICNkZWZpbmUgQjQzX01NSU9fVFNGXzMJCQkweDYzOAkvKiBjb3JlIHJldiA8IDMgb25seSAqLwogI2RlZmluZSBCNDNfTU1JT19STkcJCQkweDY1QQorI2RlZmluZSBCNDNfTU1JT19JRlNDVEwJCQkweDY4OCAvKiBJbnRlcmZyYW1lIHNwYWNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgIEI0M19NTUlPX0lGU0NUTF9VU0VfRURDRgkweDAwMDQKICNkZWZpbmUgQjQzX01NSU9fUE9XRVJVUF9ERUxBWQkJMHg2QTgKIAogLyogU1BST00gYm9hcmRmbGFnc19sbyB2YWx1ZXMgKi8KQEAgLTEzOCw3ICsxNjQsOCBAQAogI2RlZmluZSBCNDNfU0hNX1NIX1BIWVRZUEUJCTB4MDA1MgkvKiBQSFkgdHlwZSAqLwogI2RlZmluZSBCNDNfU0hNX1NIX0FOVFNXQVAJCTB4MDA1QwkvKiBBbnRlbm5hIHN3YXAgdGhyZXNob2xkICovCiAjZGVmaW5lIEI0M19TSE1fU0hfSE9TVEZMTwkJMHgwMDVFCS8qIEhvc3RmbGFncyBmb3IgdWNvZGUgb3B0aW9ucyAobG93KSAqLwotI2RlZmluZSBCNDNfU0hNX1NIX0hPU1RGSEkJCTB4MDA2MAkvKiBIb3N0ZmxhZ3MgZm9yIHVjb2RlIG9wdGlvbnMgKGhpZ2gpICovCisjZGVmaW5lIEI0M19TSE1fU0hfSE9TVEZNSQkJMHgwMDYwCS8qIEhvc3RmbGFncyBmb3IgdWNvZGUgb3B0aW9ucyAobWlkZGxlKSAqLworI2RlZmluZSBCNDNfU0hNX1NIX0hPU1RGSEkJCTB4MDA2MgkvKiBIb3N0ZmxhZ3MgZm9yIHVjb2RlIG9wdGlvbnMgKGhpZ2gpICovCiAjZGVmaW5lIEI0M19TSE1fU0hfUkZBVFQJCTB4MDA2NAkvKiBDdXJyZW50IHJhZGlvIGF0dGVudWF0aW9uIHZhbHVlICovCiAjZGVmaW5lIEI0M19TSE1fU0hfUkFEQVIJCTB4MDA2NgkvKiBSYWRhciByZWdpc3RlciAqLwogI2RlZmluZSBCNDNfU0hNX1NIX1BIWVRYTk9JCQkweDAwNkUJLyogUEhZIG5vaXNlIGRpcmVjdGx5IGFmdGVyIFRYIChsb3dlciA4Yml0IG9ubHkpICovCkBAIC0yMjYsMzEgKzI1Myw0MSBAQAogI2RlZmluZSBCNDNfTU1JT19SQURJT19IV0VOQUJMRURfTE9fTUFTSyAoMSA8PCA0KQogCiAvKiBIb3N0RmxhZ3MuIFNlZSBiNDNfaGZfcmVhZC93cml0ZSgpICovCi0jZGVmaW5lIEI0M19IRl9BTlRESVZIRUxQCQkweDAwMDAwMDAxCS8qIHVjb2RlIGFudGVubmEgZGl2IGhlbHBlciAqLwotI2RlZmluZSBCNDNfSEZfU1lNVwkJCTB4MDAwMDAwMDIJLyogRy1QSFkgU1lNIHdvcmthcm91bmQgKi8KLSNkZWZpbmUgQjQzX0hGX1JYUFVMTFcJCQkweDAwMDAwMDA0CS8qIFJYIHB1bGx1cCB3b3JrYXJvdW5kICovCi0jZGVmaW5lIEI0M19IRl9DQ0tCT09TVAkJCTB4MDAwMDAwMDgJLyogNGRCIENDSyBwb3dlciBib29zdCAoZXhjbHVzaXZlIHdpdGggT0ZETSBib29zdCkgKi8KLSNkZWZpbmUgQjQzX0hGX0JUQ09FWAkJCTB4MDAwMDAwMTAJLyogQmx1ZXRvb3RoIGNvZXhpc3RhbmNlICovCi0jZGVmaW5lIEI0M19IRl9HRENXCQkJMHgwMDAwMDAyMAkvKiBHLVBIWSBEViBjYW5jZWxsZXIgZmlsdGVyIGJ3IHdvcmthcm91bmQgKi8KLSNkZWZpbmUgQjQzX0hGX09GRE1QQUJPT1NUCQkweDAwMDAwMDQwCS8qIEVuYWJsZSBQQSBnYWluIGJvb3N0IGZvciBPRkRNICovCi0jZGVmaW5lIEI0M19IRl9BQ1BSCQkJMHgwMDAwMDA4MAkvKiBEaXNhYmxlIGZvciBKYXBhbiwgY2hhbm5lbCAxNCAqLwotI2RlZmluZSBCNDNfSEZfRURDRgkJCTB4MDAwMDAxMDAJLyogb24gaWYgV01FIGFuZCBNQUMgc3VzcGVuZGVkICovCi0jZGVmaW5lIEI0M19IRl9UU1NJUlBTTVcJCTB4MDAwMDAyMDAJLyogVFNTSSByZXNldCBQU00gdWNvZGUgd29ya2Fyb3VuZCAqLwotI2RlZmluZSBCNDNfSEZfRFNDUlEJCQkweDAwMDAwNDAwCS8qIERpc2FibGUgc2xvdyBjbG9jayByZXF1ZXN0IGluIHVjb2RlICovCi0jZGVmaW5lIEI0M19IRl9BQ0lXCQkJMHgwMDAwMDgwMAkvKiBBQ0kgd29ya2Fyb3VuZDogc2hpZnQgYml0cyBieSAyIG9uIFBIWSBDUlMgKi8KLSNkZWZpbmUgQjQzX0hGXzIwNjBXCQkJMHgwMDAwMTAwMAkvKiAyMDYwIHJhZGlvIHdvcmthcm91bmQgKi8KLSNkZWZpbmUgQjQzX0hGX1JBREFSVwkJCTB4MDAwMDIwMDAJLyogUmFkYXIgd29ya2Fyb3VuZCAqLwotI2RlZmluZSBCNDNfSEZfVVNFREVGS0VZUwkJMHgwMDAwNDAwMAkvKiBFbmFibGUgdXNlIG9mIGRlZmF1bHQga2V5cyAqLwotI2RlZmluZSBCNDNfSEZfQlQ0UFJJT0NPRVgJCTB4MDAwMTAwMDAJLyogQmx1ZXRvb3RoIDItcHJpb3JpdHkgY29leGlzdGFuY2UgKi8KLSNkZWZpbmUgQjQzX0hGX0ZXS1VQCQkJMHgwMDAyMDAwMAkvKiBGYXN0IHdha2UtdXAgdWNvZGUgKi8KLSNkZWZpbmUgQjQzX0hGX1ZDT1JFQ0FMQwkJMHgwMDA0MDAwMAkvKiBGb3JjZSBWQ08gcmVjYWxjdWxhdGlvbiB3aGVuIHBvd2VyaW5nIHVwIHN5bnRocHUgKi8KLSNkZWZpbmUgQjQzX0hGX1BDSVNDVwkJCTB4MDAwODAwMDAJLyogUENJIHNsb3cgY2xvY2sgd29ya2Fyb3VuZCAqLwotI2RlZmluZSBCNDNfSEZfNDMxOFRTU0kJCQkweDAwMjAwMDAwCS8qIDQzMTggVFNTSSAqLwotI2RlZmluZSBCNDNfSEZfRkJDTUNGSUZPCQkweDAwNDAwMDAwCS8qIEZsdXNoIGJjYXN0L21jYXN0IEZJRk8gaW1tZWRpYXRlbHkgKi8KLSNkZWZpbmUgQjQzX0hGX0hXUENUTAkJCTB4MDA4MDAwMDAJLyogRW5hYmxlIGhhcmR3YXJyZSBwb3dlciBjb250cm9sICovCi0jZGVmaW5lIEI0M19IRl9CVENPRVhBTFQJCTB4MDEwMDAwMDAJLyogQmx1ZXRvb3RoIGNvZXhpc3RhbmNlIGluIGFsdGVybmF0ZSBwaW5zICovCi0jZGVmaW5lIEI0M19IRl9UWEJUQ0hFQ0sJCTB4MDIwMDAwMDAJLyogQmx1ZXRvb3RoIGNoZWNrIGR1cmluZyB0cmFuc21pc3Npb24gKi8KLSNkZWZpbmUgQjQzX0hGX1NLQ0ZQVVAJCQkweDA0MDAwMDAwCS8qIFNraXAgQ0ZQIHVwZGF0ZSAqLworI2RlZmluZSBCNDNfSEZfQU5URElWSEVMUAkweDAwMDAwMDAwMDAwMVVMTCAvKiB1Y29kZSBhbnRlbm5hIGRpdiBoZWxwZXIgKi8KKyNkZWZpbmUgQjQzX0hGX1NZTVcJCTB4MDAwMDAwMDAwMDAyVUxMIC8qIEctUEhZIFNZTSB3b3JrYXJvdW5kICovCisjZGVmaW5lIEI0M19IRl9SWFBVTExXCQkweDAwMDAwMDAwMDAwNFVMTCAvKiBSWCBwdWxsdXAgd29ya2Fyb3VuZCAqLworI2RlZmluZSBCNDNfSEZfQ0NLQk9PU1QJCTB4MDAwMDAwMDAwMDA4VUxMIC8qIDRkQiBDQ0sgcG93ZXIgYm9vc3QgKGV4Y2x1c2l2ZSB3aXRoIE9GRE0gYm9vc3QpICovCisjZGVmaW5lIEI0M19IRl9CVENPRVgJCTB4MDAwMDAwMDAwMDEwVUxMIC8qIEJsdWV0b290aCBjb2V4aXN0YW5jZSAqLworI2RlZmluZSBCNDNfSEZfR0RDVwkJMHgwMDAwMDAwMDAwMjBVTEwgLyogRy1QSFkgREMgY2FuY2VsbGVyIGZpbHRlciBidyB3b3JrYXJvdW5kICovCisjZGVmaW5lIEI0M19IRl9PRkRNUEFCT09TVAkweDAwMDAwMDAwMDA0MFVMTCAvKiBFbmFibGUgUEEgZ2FpbiBib29zdCBmb3IgT0ZETSAqLworI2RlZmluZSBCNDNfSEZfQUNQUgkJMHgwMDAwMDAwMDAwODBVTEwgLyogRGlzYWJsZSBmb3IgSmFwYW4sIGNoYW5uZWwgMTQgKi8KKyNkZWZpbmUgQjQzX0hGX0VEQ0YJCTB4MDAwMDAwMDAwMTAwVUxMIC8qIG9uIGlmIFdNRSBhbmQgTUFDIHN1c3BlbmRlZCAqLworI2RlZmluZSBCNDNfSEZfVFNTSVJQU01XCTB4MDAwMDAwMDAwMjAwVUxMIC8qIFRTU0kgcmVzZXQgUFNNIHVjb2RlIHdvcmthcm91bmQgKi8KKyNkZWZpbmUgQjQzX0hGXzIwSU40MElRVwkweDAwMDAwMDAwMDIwMFVMTCAvKiAyMCBpbiA0MCBNSHogSS9RIHdvcmthcm91bmQgKHJldiA+PSAxMyBvbmx5KSAqLworI2RlZmluZSBCNDNfSEZfRFNDUlEJCTB4MDAwMDAwMDAwNDAwVUxMIC8qIERpc2FibGUgc2xvdyBjbG9jayByZXF1ZXN0IGluIHVjb2RlICovCisjZGVmaW5lIEI0M19IRl9BQ0lXCQkweDAwMDAwMDAwMDgwMFVMTCAvKiBBQ0kgd29ya2Fyb3VuZDogc2hpZnQgYml0cyBieSAyIG9uIFBIWSBDUlMgKi8KKyNkZWZpbmUgQjQzX0hGXzIwNjBXCQkweDAwMDAwMDAwMTAwMFVMTCAvKiAyMDYwIHJhZGlvIHdvcmthcm91bmQgKi8KKyNkZWZpbmUgQjQzX0hGX1JBREFSVwkJMHgwMDAwMDAwMDIwMDBVTEwgLyogUmFkYXIgd29ya2Fyb3VuZCAqLworI2RlZmluZSBCNDNfSEZfVVNFREVGS0VZUwkweDAwMDAwMDAwNDAwMFVMTCAvKiBFbmFibGUgdXNlIG9mIGRlZmF1bHQga2V5cyAqLworI2RlZmluZSBCNDNfSEZfQUZURVJCVVJORVIJMHgwMDAwMDAwMDgwMDBVTEwgLyogQWZ0ZXJidXJuZXIgZW5hYmxlZCAqLworI2RlZmluZSBCNDNfSEZfQlQ0UFJJT0NPRVgJMHgwMDAwMDAwMTAwMDBVTEwgLyogQmx1ZXRvb3RoIDQtcHJpb3JpdHkgY29leGlzdGFuY2UgKi8KKyNkZWZpbmUgQjQzX0hGX0ZXS1VQCQkweDAwMDAwMDAyMDAwMFVMTCAvKiBGYXN0IHdha2UtdXAgdWNvZGUgKi8KKyNkZWZpbmUgQjQzX0hGX1ZDT1JFQ0FMQwkweDAwMDAwMDA0MDAwMFVMTCAvKiBGb3JjZSBWQ08gcmVjYWxjdWxhdGlvbiB3aGVuIHBvd2VyaW5nIHVwIHN5bnRocHUgKi8KKyNkZWZpbmUgQjQzX0hGX1BDSVNDVwkJMHgwMDAwMDAwODAwMDBVTEwgLyogUENJIHNsb3cgY2xvY2sgd29ya2Fyb3VuZCAqLworI2RlZmluZSBCNDNfSEZfNDMxOFRTU0kJCTB4MDAwMDAwMjAwMDAwVUxMIC8qIDQzMTggVFNTSSAqLworI2RlZmluZSBCNDNfSEZfRkJDTUNGSUZPCTB4MDAwMDAwNDAwMDAwVUxMIC8qIEZsdXNoIGJjYXN0L21jYXN0IEZJRk8gaW1tZWRpYXRlbHkgKi8KKyNkZWZpbmUgQjQzX0hGX0hXUENUTAkJMHgwMDAwMDA4MDAwMDBVTEwgLyogRW5hYmxlIGhhcmR3YXJyZSBwb3dlciBjb250cm9sICovCisjZGVmaW5lIEI0M19IRl9CVENPRVhBTFQJMHgwMDAwMDEwMDAwMDBVTEwgLyogQmx1ZXRvb3RoIGNvZXhpc3RhbmNlIGluIGFsdGVybmF0ZSBwaW5zICovCisjZGVmaW5lIEI0M19IRl9UWEJUQ0hFQ0sJMHgwMDAwMDIwMDAwMDBVTEwgLyogQmx1ZXRvb3RoIGNoZWNrIGR1cmluZyB0cmFuc21pc3Npb24gKi8KKyNkZWZpbmUgQjQzX0hGX1NLQ0ZQVVAJCTB4MDAwMDA0MDAwMDAwVUxMIC8qIFNraXAgQ0ZQIHVwZGF0ZSAqLworI2RlZmluZSBCNDNfSEZfTjQwVwkJMHgwMDAwMDgwMDAwMDBVTEwgLyogTiBQSFkgNDAgTUh6IHdvcmthcm91bmQgKHJldiA+PSAxMyBvbmx5KSAqLworI2RlZmluZSBCNDNfSEZfQU5UU0VMCQkweDAwMDAyMDAwMDAwMFVMTCAvKiBBbnRlbm5hIHNlbGVjdGlvbiAoZm9yIHRlc3RpbmcgYW50ZW5uYSBkaXYuKSAqLworI2RlZmluZSBCNDNfSEZfQlQzQ09FWFQJCTB4MDAwMDIwMDAwMDAwVUxMIC8qIEJsdWV0b290aCAzLXdpcmUgY29leGlzdGVuY2UgKHJldiA+PSAxMyBvbmx5KSAqLworI2RlZmluZSBCNDNfSEZfQlRDQU5UCQkweDAwMDA0MDAwMDAwMFVMTCAvKiBCbHVldG9vdGggY29leGlzdGVuY2UgKGFudGVubmEgbW9kZSkgKHJldiA+PSAxMyBvbmx5KSAqLworI2RlZmluZSBCNDNfSEZfQU5UU0VMRU4JCTB4MDAwMTAwMDAwMDAwVUxMIC8qIEFudGVubmEgc2VsZWN0aW9uIGVuYWJsZWQgKHJldiA+PSAxMyBvbmx5KSAqLworI2RlZmluZSBCNDNfSEZfQU5UU0VMTU9ERQkweDAwMDIwMDAwMDAwMFVMTCAvKiBBbnRlbm5hIHNlbGVjdGlvbiBtb2RlIChyZXYgPj0gMTMgb25seSkgKi8KKyNkZWZpbmUgQjQzX0hGX01MQURWVwkJMHgwMDEwMDAwMDAwMDBVTEwgLyogTiBQSFkgTUwgQURWIHdvcmthcm91bmQgKHJldiA+PSAxMyBvbmx5KSAqLworI2RlZmluZSBCNDNfSEZfUFI0NTk2MFcJCTB4MDgwMDAwMDAwMDAwVUxMIC8qIFBSIDQ1OTYwIHdvcmthcm91bmQgKHJldiA+PSAxMyBvbmx5KSAqLwogCiAvKiBNYWNGaWx0ZXIgb2Zmc2V0cy4gKi8KICNkZWZpbmUgQjQzX01BQ0ZJTFRFUl9TRUxGCQkweDAwMDAKQEAgLTM3NCw3ICs0MTEsNiBAQAogCiAjZGVmaW5lIEI0M19JUlFfQUxMCQkJMHhGRkZGRkZGRgogI2RlZmluZSBCNDNfSVJRX01BU0tURU1QTEFURQkJKEI0M19JUlFfTUFDX1NVU1BFTkRFRCB8IFwKLQkJCQkJIEI0M19JUlFfQkVBQ09OIHwgXAogCQkJCQkgQjQzX0lSUV9UQlRUX0lOREkgfCBcCiAJCQkJCSBCNDNfSVJRX0FUSU1fRU5EIHwgXAogCQkJCQkgQjQzX0lSUV9QTVEgfCBcCkBAIC00MjMsNyArNDU5LDYgQEAKIH07CiAKIHN0cnVjdCBiNDNfZG1hcmluZzsKLXN0cnVjdCBiNDNfcGlvcXVldWU7CiAKIC8qIFRoZSBmaXJtd2FyZSBmaWxlIGhlYWRlciAqLwogI2RlZmluZSBCNDNfRldfVFlQRV9VQ09ERQkndScKQEAgLTQ1MiwyMCArNDg3LDEzIEBACiB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKIAogCi0jZGVmaW5lIEI0M19QSFlNT0RFKHBoeXR5cGUpCQkoMSA8PCAocGh5dHlwZSkpCi0jZGVmaW5lIEI0M19QSFlNT0RFX0EJCQlCNDNfUEhZTU9ERShCNDNfUEhZVFlQRV9BKQotI2RlZmluZSBCNDNfUEhZTU9ERV9CCQkJQjQzX1BIWU1PREUoQjQzX1BIWVRZUEVfQikKLSNkZWZpbmUgQjQzX1BIWU1PREVfRwkJCUI0M19QSFlNT0RFKEI0M19QSFlUWVBFX0cpCi0KIHN0cnVjdCBiNDNfcGh5IHsKLQkvKiBQb3NzaWJsZSBQSFlNT0RFcyBvbiB0aGlzIFBIWSAqLwotCXU4IHBvc3NpYmxlX3BoeW1vZGVzOworCS8qIEJhbmQgc3VwcG9ydCBmbGFncy4gKi8KKwlib29sIHN1cHBvcnRzXzJnaHo7CisJYm9vbCBzdXBwb3J0c181Z2h6OworCiAJLyogR01PREUgYml0IGVuYWJsZWQ/ICovCiAJYm9vbCBnbW9kZTsKLQkvKiBQb3NzaWJsZSBpZWVlODAyMTEgc3Vic3lzdGVtIGh3bW9kZXMgZm9yIHRoaXMgUEhZLgotCSAqIFdoaWNoIG1vZGUgaXMgc2VsZWN0ZWQsIGRlcGVuZHMgb24gdGhyIEdNT0RFIGVuYWJsZWQgYml0ICovCi0jZGVmaW5lIEI0M19NQVhfUEhZSFdNT0RFUwkyCi0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlIGh3bW9kZXNbQjQzX01BWF9QSFlIV01PREVTXTsKIAogCS8qIEFuYWxvZyBUeXBlICovCiAJdTggYW5hbG9nOwpAQCAtNTc3LDE1ICs2MDUsMjcgQEAKIAogLyogRGF0YSBzdHJ1Y3R1cmVzIGZvciBETUEgdHJhbnNtaXNzaW9uLCBwZXIgODAyMTEgY29yZS4gKi8KIHN0cnVjdCBiNDNfZG1hIHsKLQlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnR4X3JpbmcwOwotCXN0cnVjdCBiNDNfZG1hcmluZyAqdHhfcmluZzE7Ci0Jc3RydWN0IGI0M19kbWFyaW5nICp0eF9yaW5nMjsKLQlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnR4X3JpbmczOwotCXN0cnVjdCBiNDNfZG1hcmluZyAqdHhfcmluZzQ7Ci0Jc3RydWN0IGI0M19kbWFyaW5nICp0eF9yaW5nNTsKKwlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnR4X3JpbmdfQUNfQks7IC8qIEJhY2tncm91bmQgKi8KKwlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnR4X3JpbmdfQUNfQkU7IC8qIEJlc3QgRWZmb3J0ICovCisJc3RydWN0IGI0M19kbWFyaW5nICp0eF9yaW5nX0FDX1ZJOyAvKiBWaWRlbyAqLworCXN0cnVjdCBiNDNfZG1hcmluZyAqdHhfcmluZ19BQ19WTzsgLyogVm9pY2UgKi8KKwlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnR4X3JpbmdfbWNhc3Q7IC8qIE11bHRpY2FzdCAqLwogCi0Jc3RydWN0IGI0M19kbWFyaW5nICpyeF9yaW5nMDsKLQlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJ4X3JpbmczOwkvKiBvbmx5IGF2YWlsYWJsZSBvbiBjb3JlLnJldiA8IDUgKi8KKwlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJ4X3Jpbmc7Cit9OworCitzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlOworc3RydWN0IGI0M19waW9fcnhxdWV1ZTsKKworLyogRGF0YSBzdHJ1Y3R1cmVzIGZvciBQSU8gdHJhbnNtaXNzaW9uLCBwZXIgODAyMTEgY29yZS4gKi8KK3N0cnVjdCBiNDNfcGlvIHsKKwlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICp0eF9xdWV1ZV9BQ19CSzsgLyogQmFja2dyb3VuZCAqLworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnR4X3F1ZXVlX0FDX0JFOyAvKiBCZXN0IEVmZm9ydCAqLworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnR4X3F1ZXVlX0FDX1ZJOyAvKiBWaWRlbyAqLworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnR4X3F1ZXVlX0FDX1ZPOyAvKiBWb2ljZSAqLworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnR4X3F1ZXVlX21jYXN0OyAvKiBNdWx0aWNhc3QgKi8KKworCXN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnJ4X3F1ZXVlOwogfTsKIAogLyogQ29udGV4dCBpbmZvcm1hdGlvbiBmb3IgYSBub2lzZSBjYWxjdWxhdGlvbiAoTGluayBRdWFsaXR5KS4gKi8KQEAgLTYxMSw2ICs2NTEsMzUgQEAKIAl1OCBhbGdvcml0aG07CiB9OwogCisvKiBTSE0gb2Zmc2V0cyB0byB0aGUgUU9TIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIDQgZGlmZmVyZW50IHF1ZXVlcy4gKi8KKyNkZWZpbmUgQjQzX1FPU19QQVJBTVMocXVldWUpCShCNDNfU0hNX1NIX0VEQ0ZRICsgXAorCQkJCSAoQjQzX05SX1FPU1BBUkFNUyAqIHNpemVvZih1MTYpICogKHF1ZXVlKSkpCisjZGVmaW5lIEI0M19RT1NfQkFDS0dST1VORAlCNDNfUU9TX1BBUkFNUygwKQorI2RlZmluZSBCNDNfUU9TX0JFU1RFRkZPUlQJQjQzX1FPU19QQVJBTVMoMSkKKyNkZWZpbmUgQjQzX1FPU19WSURFTwkJQjQzX1FPU19QQVJBTVMoMikKKyNkZWZpbmUgQjQzX1FPU19WT0lDRQkJQjQzX1FPU19QQVJBTVMoMykKKworLyogUU9TIHBhcmFtZXRlciBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZSBvZmZzZXRzLiAqLworI2RlZmluZSBCNDNfTlJfUU9TUEFSQU1TCTIyCitlbnVtIHsKKwlCNDNfUU9TUEFSQU1fVFhPUCA9IDAsCisJQjQzX1FPU1BBUkFNX0NXTUlOLAorCUI0M19RT1NQQVJBTV9DV01BWCwKKwlCNDNfUU9TUEFSQU1fQ1dDVVIsCisJQjQzX1FPU1BBUkFNX0FJRlMsCisJQjQzX1FPU1BBUkFNX0JTTE9UUywKKwlCNDNfUU9TUEFSQU1fUkVHR0FQLAorCUI0M19RT1NQQVJBTV9TVEFUVVMsCit9OworCisvKiBRT1MgcGFyYW1ldGVycyBmb3IgYSBxdWV1ZS4gKi8KK3N0cnVjdCBiNDNfcW9zX3BhcmFtcyB7CisJLyogVGhlIFFPUyBwYXJhbWV0ZXJzICovCisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcDsKKwkvKiBEb2VzIHRoaXMgbmVlZCB0byBnZXQgdXBsb2FkZWQgdG8gaGFyZHdhcmU/ICovCisJYm9vbCBuZWVkX2h3X3VwZGF0ZTsKK307CisKIHN0cnVjdCBiNDNfd2xkZXY7CiAKIC8qIERhdGEgc3RydWN0dXJlIGZvciB0aGUgV0xBTiBwYXJ0cyAoODAyLjExIGNvcmVzKSBvZiB0aGUgYjQzIGNoaXAuICovCkBAIC02NjEsOCArNzMwLDE2IEBACiAJLyogVGhlIGJlYWNvbiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIChBUCBvciBJQlNTIG1vZGUpLgogCSAqIFRoaXMgYmVhY29uIHN0dWZmIGlzIHByb3RlY3RlZCBieSB0aGUgaXJxX2xvY2suICovCiAJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfYmVhY29uOworCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBiZWFjb25fdHhjdGw7CiAJYm9vbCBiZWFjb24wX3VwbG9hZGVkOwogCWJvb2wgYmVhY29uMV91cGxvYWRlZDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZV90cmlnZ2VyOworCisJLyogVGhlIGN1cnJlbnQgUU9TIHBhcmFtZXRlcnMgZm9yIHRoZSA0IHF1ZXVlcy4KKwkgKiBUaGlzIGlzIHByb3RlY3RlZCBieSB0aGUgaXJxX2xvY2suICovCisJc3RydWN0IGI0M19xb3NfcGFyYW1zIHFvc19wYXJhbXNbNF07CisJLyogV29ya3F1ZXVlIGZvciB1cGRhdGluZyBRT1MgcGFyYW1ldGVycyBpbiBoYXJkd2FyZS4gKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcW9zX3VwZGF0ZV93b3JrOwogfTsKIAogLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIGEgY2FjaGVkIG1pY3JvY29kZSBmaWxlLiAqLwpAQCAtNzIxLDcgKzc5OCw2IEBACiAKIAlib29sIGJhZF9mcmFtZXNfcHJlZW1wdDsJLyogVXNlICJCYWQgRnJhbWVzIFByZWVtcHRpb24iIChkZWZhdWx0IG9mZikgKi8KIAlib29sIGRmcV92YWxpZDsJCS8qIERpcmVjdGVkIGZyYW1lIHF1ZXVlIHZhbGlkIChJQlNTIFBTIG1vZGUsIEFUSU0pICovCi0JYm9vbCBzaG9ydF9wcmVhbWJsZTsJLyogVFJVRSwgaWYgc2hvcnQgcHJlYW1ibGUgaXMgZW5hYmxlZC4gKi8KIAlib29sIHNob3J0X3Nsb3Q7CS8qIFRSVUUsIGlmIHNob3J0IHNsb3QgdGltaW5nIGlzIGVuYWJsZWQuICovCiAJYm9vbCByYWRpb19od19lbmFibGU7CS8qIHNhdmVkIHN0YXRlIG9mIHJhZGlvIGhhcmR3YXJlIGVuYWJsZWQgc3RhdGUgKi8KIAlib29sIHN1c3BlbmRfaW5fcHJvZ3Jlc3M7CS8qIFRSVUUsIGlmIHdlIGFyZSBpbiBhIHN1c3BlbmQvcmVzdW1lIGN5Y2xlICovCkBAIC03MjksOCArODA1LDE1IEBACiAJLyogUEhZL1JhZGlvIGRldmljZS4gKi8KIAlzdHJ1Y3QgYjQzX3BoeSBwaHk7CiAKLQkvKiBETUEgZW5naW5lcy4gKi8KLQlzdHJ1Y3QgYjQzX2RtYSBkbWE7CisJdW5pb24geworCQkvKiBETUEgZW5naW5lcy4gKi8KKwkJc3RydWN0IGI0M19kbWEgZG1hOworCQkvKiBQSU8gZW5naW5lcy4gKi8KKwkJc3RydWN0IGI0M19waW8gcGlvOworCX07CisJLyogVXNlIGI0M191c2luZ19waW9fdHJhbnNmZXJzKCkgdG8gY2hlY2sgd2hldGhlciB3ZSBhcmUgdXNpbmcKKwkgKiBETUEgb3IgUElPIGRhdGEgdHJhbnNmZXJzLiAqLworCWJvb2wgX191c2luZ19waW9fdHJhbnNmZXJzOwogCiAJLyogVmFyaW91cyBzdGF0aXN0aWNzIGFib3V0IHRoZSBwaHlzaWNhbCBkZXZpY2UuICovCiAJc3RydWN0IGI0M19zdGF0cyBzdGF0czsKQEAgLTgxNCw2ICs4OTcsMjIgQEAKIAlzc2Jfd3JpdGUzMihkZXYtPmRldiwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisjaWZkZWYgQ09ORklHX0I0M19QSU8KKwlyZXR1cm4gZGV2LT5fX3VzaW5nX3Bpb190cmFuc2ZlcnM7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfQjQzX0ZPUkNFX1BJTworIyBkZWZpbmUgQjQzX0ZPUkNFX1BJTwkxCisjZWxzZQorIyBkZWZpbmUgQjQzX0ZPUkNFX1BJTwkwCisjZW5kaWYKKworCiAvKiBNZXNzYWdlIHByaW50aW5nICovCiB2b2lkIGI0M2luZm8oc3RydWN0IGI0M193bCAqd2wsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKaW5kZXggZTM4ZWQwZi4uN2ZjYTJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCkBAIC02MTgsNiArNjE4LDcgQEAKIAlrZnJlZShlKTsKIH0KIAorLyogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZC4gKi8KIHZvaWQgYjQzX2RlYnVnZnNfbG9nX3R4c3RhdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKQogewpAQCAtNjI5LDggKzYzMCw3IEBACiAJaWYgKCFlKQogCQlyZXR1cm47CiAJbG9nID0gJmUtPnR4c3RhdGxvZzsKLQlCNDNfV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKLQlzcGluX2xvY2soJmxvZy0+bG9jayk7CisJc3Bpbl9sb2NrKCZsb2ctPmxvY2spOyAvKiBJUlFzIGFyZSBhbHJlYWR5IGRpc2FibGVkLiAqLwogCWkgPSBsb2ctPmVuZCArIDE7CiAJaWYgKGkgPT0gQjQzX05SX0xPR0dFRF9UWFNUQVRVUykKIAkJaSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggM2RmYjI4YS4uMjFjODg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogCiAvKiAzMmJpdCBETUEgb3BzLiAqLwpAQCAtMjkxLDUyICsyOTIsNiBAQAogCXJldHVybiBzbG90OwogfQogCi0vKiBNYWM4MDIxMS1xdWV1ZSB0byBiNDMtcmluZyBtYXBwaW5nICovCi1zdGF0aWMgc3RydWN0IGI0M19kbWFyaW5nICpwcmlvcml0eV90b190eHJpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgICAgICBpbnQgcXVldWVfcHJpb3JpdHkpCi17Ci0Jc3RydWN0IGI0M19kbWFyaW5nICpyaW5nOwotCi0vKkZJWE1FOiBGb3Igbm93IHdlIGFsd2F5cyBydW4gb24gVFgtcmluZy0xICovCi0JcmV0dXJuIGRldi0+ZG1hLnR4X3JpbmcxOwotCi0JLyogMCA9IGhpZ2hlc3QgcHJpb3JpdHkgKi8KLQlzd2l0Y2ggKHF1ZXVlX3ByaW9yaXR5KSB7Ci0JZGVmYXVsdDoKLQkJQjQzX1dBUk5fT04oMSk7Ci0JCS8qIGZhbGx0aHJvdWdoICovCi0JY2FzZSAwOgotCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZzM7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcmluZyA9IGRldi0+ZG1hLnR4X3JpbmcyOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXJpbmcgPSBkZXYtPmRtYS50eF9yaW5nMTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZzA7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByaW5nOwotfQotCi0vKiBiNDMtcmluZyB0byBtYWM4MDIxMS1xdWV1ZSBtYXBwaW5nICovCi1zdGF0aWMgaW5saW5lIGludCB0eHJpbmdfdG9fcHJpb3JpdHkoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nKQotewotCXN0YXRpYyBjb25zdCB1OCBpZHhfdG9fcHJpb1tdID0geyAzLCAyLCAxLCAwLCB9OwotCXVuc2lnbmVkIGludCBpbmRleDsKLQotLypGSVhNRTogaGF2ZSBvbmx5IG9uZSBxdWV1ZSwgZm9yIG5vdyAqLwotCXJldHVybiAwOwotCi0JaW5kZXggPSByaW5nLT5pbmRleDsKLQlpZiAoQjQzX1dBUk5fT04oaW5kZXggPj0gQVJSQVlfU0laRShpZHhfdG9fcHJpbykpKQotCQlpbmRleCA9IDA7Ci0JcmV0dXJuIGlkeF90b19wcmlvW2luZGV4XTsKLX0KLQogc3RhdGljIHUxNiBiNDNfZG1hY29udHJvbGxlcl9iYXNlKGVudW0gYjQzX2RtYXR5cGUgdHlwZSwgaW50IGNvbnRyb2xsZXJfaWR4KQogewogCXN0YXRpYyBjb25zdCB1MTYgbWFwNjRbXSA9IHsKQEAgLTM3MywxMCArMzI4LDEwIEBACiAJZG1hX2FkZHJfdCBkbWFhZGRyOwogCiAJaWYgKHR4KSB7Ci0JCWRtYWFkZHIgPSBkbWFfbWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZGV2LAorCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJCSBidWYsIGxlbiwgRE1BX1RPX0RFVklDRSk7CiAJfSBlbHNlIHsKLQkJZG1hYWRkciA9IGRtYV9tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LT5kZXYsCisJCWRtYWFkZHIgPSBkbWFfbWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKIAkJCQkJIGJ1ZiwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogCX0KIApAQCAtMzg4LDkgKzM0MywxMCBAQAogCQkJICBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBsZW4sIGludCB0eCkKIHsKIAlpZiAodHgpIHsKLQkJZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZGV2LCBhZGRyLCBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAorCQkJCSBhZGRyLCBsZW4sIERNQV9UT19ERVZJQ0UpOwogCX0gZWxzZSB7Ci0JCWRtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRldiwKKwkJZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKIAkJCQkgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogCX0KIH0KQEAgLTQwMCw3ICszNTYsNyBAQAogCQkJCSBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBsZW4pCiB7CiAJQjQzX1dBUk5fT04ocmluZy0+dHgpOwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPmRldi0+ZGV2LT5kZXYsCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogfQogCkBAIC00MDksNyArMzY1LDcgQEAKIAkJCQkgICAgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuKQogewogCUI0M19XQVJOX09OKHJpbmctPnR4KTsKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShyaW5nLT5kZXYtPmRldi0+ZGV2LAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAogCQkJCSAgIGFkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIH0KIApAQCAtNDI1LDcgKzM4MSw3IEBACiAKIHN0YXRpYyBpbnQgYWxsb2NfcmluZ21lbW9yeShzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gcmluZy0+ZGV2LT5kZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcmluZy0+ZGV2LT5kZXYtPmRtYV9kZXY7CiAJZ2ZwX3QgZmxhZ3MgPSBHRlBfS0VSTkVMOwogCiAJLyogVGhlIHNwZWNzIGNhbGwgZm9yIDRLIGJ1ZmZlcnMgZm9yIDMwLSBhbmQgMzItYml0IERNQSB3aXRoIDRLCkBAIC00MzksNyArMzk1LDcgQEAKIAkgKi8KIAlpZiAocmluZy0+dHlwZSA9PSBCNDNfRE1BXzY0QklUKQogCQlmbGFncyB8PSBHRlBfRE1BOwotCXJpbmctPmRlc2NiYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgQjQzX0RNQV9SSU5HTUVNU0laRSwKKwlyaW5nLT5kZXNjYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudChkbWFfZGV2LCBCNDNfRE1BX1JJTkdNRU1TSVpFLAogCQkJCQkgICAgJihyaW5nLT5kbWFiYXNlKSwgZmxhZ3MpOwogCWlmICghcmluZy0+ZGVzY2Jhc2UpIHsKIAkJYjQzZXJyKHJpbmctPmRldi0+d2wsICJETUEgcmluZ21lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CkBAIC00NTIsOSArNDA4LDkgQEAKIAogc3RhdGljIHZvaWQgZnJlZV9yaW5nbWVtb3J5KHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZykKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nLT5kZXYtPmRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSByaW5nLT5kZXYtPmRldi0+ZG1hX2RldjsKIAotCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgQjQzX0RNQV9SSU5HTUVNU0laRSwKKwlkbWFfZnJlZV9jb2hlcmVudChkbWFfZGV2LCBCNDNfRE1BX1JJTkdNRU1TSVpFLAogCQkJICByaW5nLT5kZXNjYmFzZSwgcmluZy0+ZG1hYmFzZSk7CiB9CiAKQEAgLTU2MCw3ICs1MTYsNyBAQAogLyogQ2hlY2sgaWYgYSBETUEgbWFwcGluZyBhZGRyZXNzIGlzIGludmFsaWQuICovCiBzdGF0aWMgYm9vbCBiNDNfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLAogCQkJCSAgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgc2l6ZV90IGJ1ZmZlcnNpemUpCisJCQkJICBzaXplX3QgYnVmZmVyc2l6ZSwgYm9vbCBkbWFfdG9fZGV2aWNlKQogewogCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihhZGRyKSkpCiAJCXJldHVybiAxOwpAQCAtNTY4LDExICs1MjQsMTEgQEAKIAlzd2l0Y2ggKHJpbmctPnR5cGUpIHsKIAljYXNlIEI0M19ETUFfMzBCSVQ6CiAJCWlmICgodTY0KWFkZHIgKyBidWZmZXJzaXplID4gKDFVTEwgPDwgMzApKQotCQkJcmV0dXJuIDE7CisJCQlnb3RvIGFkZHJlc3NfZXJyb3I7CiAJCWJyZWFrOwogCWNhc2UgQjQzX0RNQV8zMkJJVDoKIAkJaWYgKCh1NjQpYWRkciArIGJ1ZmZlcnNpemUgPiAoMVVMTCA8PCAzMikpCi0JCQlyZXR1cm4gMTsKKwkJCWdvdG8gYWRkcmVzc19lcnJvcjsKIAkJYnJlYWs7CiAJY2FzZSBCNDNfRE1BXzY0QklUOgogCQkvKiBDdXJyZW50bHkgd2UgY2FuJ3QgaGF2ZSBhZGRyZXNzZXMgYmV5b25kCkBAIC01ODIsNiArNTM4LDEyIEBACiAKIAkvKiBUaGUgYWRkcmVzcyBpcyBPSy4gKi8KIAlyZXR1cm4gMDsKKworYWRkcmVzc19lcnJvcjoKKwkvKiBXZSBjYW4ndCBzdXBwb3J0IHRoaXMgYWRkcmVzcy4gVW5tYXAgaXQgYWdhaW4uICovCisJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBhZGRyLCBidWZmZXJzaXplLCBkbWFfdG9fZGV2aWNlKTsKKworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IHNldHVwX3J4X2Rlc2NidWZmZXIoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLApAQCAtNTg5LDcgKzU1MSw2IEBACiAJCQkgICAgICAgc3RydWN0IGI0M19kbWFkZXNjX21ldGEgKm1ldGEsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgYjQzX3J4aGRyX2Z3NCAqcnhoZHI7Ci0Jc3RydWN0IGI0M19od3R4c3RhdHVzICp0eHN0YXQ7CiAJZG1hX2FkZHJfdCBkbWFhZGRyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTU5OSw3ICs1NjAsNyBAQAogCWlmICh1bmxpa2VseSghc2tiKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCk7Ci0JaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplKSkgeworCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCkpIHsKIAkJLyogdWdoLiB0cnkgdG8gcmVhbGxvYyBpbiB6b25lX2RtYSAqLwogCQlnZnBfZmxhZ3MgfD0gR0ZQX0RNQTsKIApAQCAtNjEyLDcgKzU3Myw4IEBACiAJCQkJCSByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKIAl9CiAKLQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUpKSB7CisJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplLCAwKSkgeworCQliNDNlcnIocmluZy0+ZGV2LT53bCwgIlJYIERNQSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC02MjQsOCArNTg2LDYgQEAKIAogCXJ4aGRyID0gKHN0cnVjdCBiNDNfcnhoZHJfZnc0ICopKHNrYi0+ZGF0YSk7CiAJcnhoZHItPmZyYW1lX2xlbiA9IDA7Ci0JdHhzdGF0ID0gKHN0cnVjdCBiNDNfaHd0eHN0YXR1cyAqKShza2ItPmRhdGEpOwotCXR4c3RhdC0+Y29va2llID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtODE0LDYgKzc3NCwxOCBAQAogCXJldHVybiBETUFfMzBCSVRfTUFTSzsKIH0KIAorc3RhdGljIGVudW0gYjQzX2RtYXR5cGUgZG1hX21hc2tfdG9fZW5naW5lX3R5cGUodTY0IGRtYW1hc2spCit7CisJaWYgKGRtYW1hc2sgPT0gRE1BXzMwQklUX01BU0spCisJCXJldHVybiBCNDNfRE1BXzMwQklUOworCWlmIChkbWFtYXNrID09IERNQV8zMkJJVF9NQVNLKQorCQlyZXR1cm4gQjQzX0RNQV8zMkJJVDsKKwlpZiAoZG1hbWFzayA9PSBETUFfNjRCSVRfTUFTSykKKwkJcmV0dXJuIEI0M19ETUFfNjRCSVQ7CisJQjQzX1dBUk5fT04oMSk7CisJcmV0dXJuIEI0M19ETUFfMzBCSVQ7Cit9CisKIC8qIE1haW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICovCiBzdGF0aWMKIHN0cnVjdCBiNDNfZG1hcmluZyAqYjQzX3NldHVwX2RtYXJpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtODQ3LDEyICs4MTksMTMgQEAKIAkJCWdvdG8gZXJyX2tmcmVlX21ldGE7CiAKIAkJLyogdGVzdCBmb3IgYWJpbGl0eSB0byBkbWEgdG8gdHhoZHJfY2FjaGUgKi8KLQkJZG1hX3Rlc3QgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi0+ZGV2LAorCQlkbWFfdGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LAogCQkJCQkgIHJpbmctPnR4aGRyX2NhY2hlLAogCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksCiAJCQkJCSAgRE1BX1RPX0RFVklDRSk7CiAKLQkJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFfdGVzdCwgYjQzX3R4aGRyX3NpemUoZGV2KSkpIHsKKwkJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFfdGVzdCwKKwkJCQkJICBiNDNfdHhoZHJfc2l6ZShkZXYpLCAxKSkgewogCQkJLyogdWdoIHJlYWxsb2MgKi8KIAkJCWtmcmVlKHJpbmctPnR4aGRyX2NhY2hlKTsKIAkJCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhucl9zbG90cywKQEAgLTg2MSwxNyArODM0LDIxIEBACiAJCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQogCQkJCWdvdG8gZXJyX2tmcmVlX21ldGE7CiAKLQkJCWRtYV90ZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYtPmRldiwKKwkJCWRtYV90ZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJCQkgIHJpbmctPnR4aGRyX2NhY2hlLAogCQkJCQkJICBiNDNfdHhoZHJfc2l6ZShkZXYpLAogCQkJCQkJICBETUFfVE9fREVWSUNFKTsKIAogCQkJaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFfdGVzdCwKLQkJCQkJCSAgYjQzX3R4aGRyX3NpemUoZGV2KSkpCisJCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksIDEpKSB7CisKKwkJCQliNDNlcnIoZGV2LT53bCwKKwkJCQkgICAgICAgIlRYSERSIERNQSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnJfa2ZyZWVfdHhoZHJfY2FjaGU7CisJCQl9CiAJCX0KIAotCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LT5kZXYsCisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJIGRtYV90ZXN0LCBiNDNfdHhoZHJfc2l6ZShkZXYpLAogCQkJCSBETUFfVE9fREVWSUNFKTsKIAl9CkBAIC05MjQsMTYgKzkwMSw1MiBAQAogCWdvdG8gb3V0OwogfQogCisjZGVmaW5lIGRpdmlkZShhLCBiKQkoewlcCisJdHlwZW9mKGEpIF9fYSA9IGE7CVwKKwlkb19kaXYoX19hLCBiKTsJCVwKKwlfX2E7CQkJXAorICB9KQorCisjZGVmaW5lIG1vZHVsbyhhLCBiKQkoewlcCisJdHlwZW9mKGEpIF9fYSA9IGE7CVwKKwlkb19kaXYoX19hLCBiKTsJCVwKKyAgfSkKKwogLyogTWFpbiBjbGVhbnVwIGZ1bmN0aW9uLiAqLwotc3RhdGljIHZvaWQgYjQzX2Rlc3Ryb3lfZG1hcmluZyhzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCitzdGF0aWMgdm9pZCBiNDNfZGVzdHJveV9kbWFyaW5nKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywKKwkJCQljb25zdCBjaGFyICpyaW5nbmFtZSkKIHsKIAlpZiAoIXJpbmcpCiAJCXJldHVybjsKIAotCWI0M2RiZyhyaW5nLT5kZXYtPndsLCAiRE1BLSV1IDB4JTA0WCAoJXMpIG1heCB1c2VkIHNsb3RzOiAlZC8lZFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGludCkocmluZy0+dHlwZSksCi0JICAgICAgIHJpbmctPm1taW9fYmFzZSwKLQkgICAgICAgKHJpbmctPnR4KSA/ICJUWCIgOiAiUlgiLCByaW5nLT5tYXhfdXNlZF9zbG90cywgcmluZy0+bnJfc2xvdHMpOworI2lmZGVmIENPTkZJR19CNDNfREVCVUcKKwl7CisJCS8qIFByaW50IHNvbWUgc3RhdGlzdGljcy4gKi8KKwkJdTY0IGZhaWxlZF9wYWNrZXRzID0gcmluZy0+bnJfZmFpbGVkX3R4X3BhY2tldHM7CisJCXU2NCBzdWNjZWVkX3BhY2tldHMgPSByaW5nLT5ucl9zdWNjZWVkX3R4X3BhY2tldHM7CisJCXU2NCBucl9wYWNrZXRzID0gZmFpbGVkX3BhY2tldHMgKyBzdWNjZWVkX3BhY2tldHM7CisJCXU2NCBwZXJtaWxsZV9mYWlsZWQgPSAwLCBhdmVyYWdlX3RyaWVzID0gMDsKKworCQlpZiAobnJfcGFja2V0cykKKwkJCXBlcm1pbGxlX2ZhaWxlZCA9IGRpdmlkZShmYWlsZWRfcGFja2V0cyAqIDEwMDAsIG5yX3BhY2tldHMpOworCQlpZiAobnJfcGFja2V0cykKKwkJCWF2ZXJhZ2VfdHJpZXMgPSBkaXZpZGUocmluZy0+bnJfdG90YWxfcGFja2V0X3RyaWVzICogMTAwLCBucl9wYWNrZXRzKTsKKworCQliNDNkYmcocmluZy0+ZGV2LT53bCwgIkRNQS0ldSAlczogIgorCQkgICAgICAgIlVzZWQgc2xvdHMgJWQvJWQsIEZhaWxlZCBmcmFtZXMgJWxsdS8lbGx1ID0gJWxsdS4lMDFsbHUlJSwgIgorCQkgICAgICAgIkF2ZXJhZ2UgdHJpZXMgJWxsdS4lMDJsbHVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KShyaW5nLT50eXBlKSwgcmluZ25hbWUsCisJCSAgICAgICByaW5nLT5tYXhfdXNlZF9zbG90cywKKwkJICAgICAgIHJpbmctPm5yX3Nsb3RzLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylmYWlsZWRfcGFja2V0cywKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnJfcGFja2V0cywKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGl2aWRlKHBlcm1pbGxlX2ZhaWxlZCwgMTApLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltb2R1bG8ocGVybWlsbGVfZmFpbGVkLCAxMCksCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpdmlkZShhdmVyYWdlX3RyaWVzLCAxMDApLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltb2R1bG8oYXZlcmFnZV90cmllcywgMTAwKSk7CisJfQorI2VuZGlmIC8qIERFQlVHICovCisKIAkvKiBEZXZpY2UgSVJRcyBhcmUgZGlzYWJsZWQgcHJpb3IgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbiwKIAkgKiBzbyBubyBuZWVkIHRvIHRha2UgY2FyZSBvZiBjb25jdXJyZW5jeSB3aXRoIHJ4IGhhbmRsZXIgc3R1ZmYuCiAJICovCkBAIC05NDYsNTEgKzk1OSwzNiBAQAogCWtmcmVlKHJpbmcpOwogfQogCisjZGVmaW5lIGRlc3Ryb3lfcmluZyhkbWEsIHJpbmcpIGRvIHsJCQkJXAorCWI0M19kZXN0cm95X2RtYXJpbmcoKGRtYSktPnJpbmcsIF9fc3RyaW5naWZ5KHJpbmcpKTsJXAorCShkbWEpLT5yaW5nID0gTlVMTDsJCQkJCVwKKyAgICB9IHdoaWxlICgwKQorCiB2b2lkIGI0M19kbWFfZnJlZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGI0M19kbWEgKmRtYSA9ICZkZXYtPmRtYTsKKwlzdHJ1Y3QgYjQzX2RtYSAqZG1hOwogCi0JYjQzX2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnJ4X3JpbmczKTsKLQlkbWEtPnJ4X3JpbmczID0gTlVMTDsKLQliNDNfZGVzdHJveV9kbWFyaW5nKGRtYS0+cnhfcmluZzApOwotCWRtYS0+cnhfcmluZzAgPSBOVUxMOworCWlmIChiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQorCQlyZXR1cm47CisJZG1hID0gJmRldi0+ZG1hOwogCi0JYjQzX2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3Jpbmc1KTsKLQlkbWEtPnR4X3Jpbmc1ID0gTlVMTDsKLQliNDNfZGVzdHJveV9kbWFyaW5nKGRtYS0+dHhfcmluZzQpOwotCWRtYS0+dHhfcmluZzQgPSBOVUxMOwotCWI0M19kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMyk7Ci0JZG1hLT50eF9yaW5nMyA9IE5VTEw7Ci0JYjQzX2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmcyKTsKLQlkbWEtPnR4X3JpbmcyID0gTlVMTDsKLQliNDNfZGVzdHJveV9kbWFyaW5nKGRtYS0+dHhfcmluZzEpOwotCWRtYS0+dHhfcmluZzEgPSBOVUxMOwotCWI0M19kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMCk7Ci0JZG1hLT50eF9yaW5nMCA9IE5VTEw7CisJZGVzdHJveV9yaW5nKGRtYSwgcnhfcmluZyk7CisJZGVzdHJveV9yaW5nKGRtYSwgdHhfcmluZ19BQ19CSyk7CisJZGVzdHJveV9yaW5nKGRtYSwgdHhfcmluZ19BQ19CRSk7CisJZGVzdHJveV9yaW5nKGRtYSwgdHhfcmluZ19BQ19WSSk7CisJZGVzdHJveV9yaW5nKGRtYSwgdHhfcmluZ19BQ19WTyk7CisJZGVzdHJveV9yaW5nKGRtYSwgdHhfcmluZ19tY2FzdCk7CiB9CiAKIGludCBiNDNfZG1hX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfZG1hICpkbWEgPSAmZGV2LT5kbWE7Ci0Jc3RydWN0IGI0M19kbWFyaW5nICpyaW5nOwogCWludCBlcnI7CiAJdTY0IGRtYW1hc2s7CiAJZW51bSBiNDNfZG1hdHlwZSB0eXBlOwogCiAJZG1hbWFzayA9IHN1cHBvcnRlZF9kbWFfbWFzayhkZXYpOwotCXN3aXRjaCAoZG1hbWFzaykgewotCWRlZmF1bHQ6Ci0JCUI0M19XQVJOX09OKDEpOwotCWNhc2UgRE1BXzMwQklUX01BU0s6Ci0JCXR5cGUgPSBCNDNfRE1BXzMwQklUOwotCQlicmVhazsKLQljYXNlIERNQV8zMkJJVF9NQVNLOgotCQl0eXBlID0gQjQzX0RNQV8zMkJJVDsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfNjRCSVRfTUFTSzoKLQkJdHlwZSA9IEI0M19ETUFfNjRCSVQ7Ci0JCWJyZWFrOwotCX0KKwl0eXBlID0gZG1hX21hc2tfdG9fZW5naW5lX3R5cGUoZG1hbWFzayk7CiAJZXJyID0gc3NiX2RtYV9zZXRfbWFzayhkZXYtPmRldiwgZG1hbWFzayk7CiAJaWYgKGVycikgewogCQliNDNlcnIoZGV2LT53bCwgIlRoZSBtYWNoaW5lL2tlcm5lbCBkb2VzIG5vdCBzdXBwb3J0ICIKQEAgLTEwMDIsODMgKzEwMDAsNTcgQEAKIAogCWVyciA9IC1FTk9NRU07CiAJLyogc2V0dXAgVFggRE1BIGNoYW5uZWxzLiAqLwotCXJpbmcgPSBiNDNfc2V0dXBfZG1hcmluZyhkZXYsIDAsIDEsIHR5cGUpOwotCWlmICghcmluZykKKwlkbWEtPnR4X3JpbmdfQUNfQksgPSBiNDNfc2V0dXBfZG1hcmluZyhkZXYsIDAsIDEsIHR5cGUpOworCWlmICghZG1hLT50eF9yaW5nX0FDX0JLKQogCQlnb3RvIG91dDsKLQlkbWEtPnR4X3JpbmcwID0gcmluZzsKIAotCXJpbmcgPSBiNDNfc2V0dXBfZG1hcmluZyhkZXYsIDEsIDEsIHR5cGUpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDA7Ci0JZG1hLT50eF9yaW5nMSA9IHJpbmc7CisJZG1hLT50eF9yaW5nX0FDX0JFID0gYjQzX3NldHVwX2RtYXJpbmcoZGV2LCAxLCAxLCB0eXBlKTsKKwlpZiAoIWRtYS0+dHhfcmluZ19BQ19CRSkKKwkJZ290byBlcnJfZGVzdHJveV9iazsKIAotCXJpbmcgPSBiNDNfc2V0dXBfZG1hcmluZyhkZXYsIDIsIDEsIHR5cGUpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDE7Ci0JZG1hLT50eF9yaW5nMiA9IHJpbmc7CisJZG1hLT50eF9yaW5nX0FDX1ZJID0gYjQzX3NldHVwX2RtYXJpbmcoZGV2LCAyLCAxLCB0eXBlKTsKKwlpZiAoIWRtYS0+dHhfcmluZ19BQ19WSSkKKwkJZ290byBlcnJfZGVzdHJveV9iZTsKIAotCXJpbmcgPSBiNDNfc2V0dXBfZG1hcmluZyhkZXYsIDMsIDEsIHR5cGUpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDI7Ci0JZG1hLT50eF9yaW5nMyA9IHJpbmc7CisJZG1hLT50eF9yaW5nX0FDX1ZPID0gYjQzX3NldHVwX2RtYXJpbmcoZGV2LCAzLCAxLCB0eXBlKTsKKwlpZiAoIWRtYS0+dHhfcmluZ19BQ19WTykKKwkJZ290byBlcnJfZGVzdHJveV92aTsKIAotCXJpbmcgPSBiNDNfc2V0dXBfZG1hcmluZyhkZXYsIDQsIDEsIHR5cGUpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDM7Ci0JZG1hLT50eF9yaW5nNCA9IHJpbmc7CisJZG1hLT50eF9yaW5nX21jYXN0ID0gYjQzX3NldHVwX2RtYXJpbmcoZGV2LCA0LCAxLCB0eXBlKTsKKwlpZiAoIWRtYS0+dHhfcmluZ19tY2FzdCkKKwkJZ290byBlcnJfZGVzdHJveV92bzsKIAotCXJpbmcgPSBiNDNfc2V0dXBfZG1hcmluZyhkZXYsIDUsIDEsIHR5cGUpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDQ7Ci0JZG1hLT50eF9yaW5nNSA9IHJpbmc7CisJLyogc2V0dXAgUlggRE1BIGNoYW5uZWwuICovCisJZG1hLT5yeF9yaW5nID0gYjQzX3NldHVwX2RtYXJpbmcoZGV2LCAwLCAwLCB0eXBlKTsKKwlpZiAoIWRtYS0+cnhfcmluZykKKwkJZ290byBlcnJfZGVzdHJveV9tY2FzdDsKIAotCS8qIHNldHVwIFJYIERNQSBjaGFubmVscy4gKi8KLQlyaW5nID0gYjQzX3NldHVwX2RtYXJpbmcoZGV2LCAwLCAwLCB0eXBlKTsKLQlpZiAoIXJpbmcpCi0JCWdvdG8gZXJyX2Rlc3Ryb3lfdHg1OwotCWRtYS0+cnhfcmluZzAgPSByaW5nOwotCi0JaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8IDUpIHsKLQkJcmluZyA9IGI0M19zZXR1cF9kbWFyaW5nKGRldiwgMywgMCwgdHlwZSk7Ci0JCWlmICghcmluZykKLQkJCWdvdG8gZXJyX2Rlc3Ryb3lfcngwOwotCQlkbWEtPnJ4X3JpbmczID0gcmluZzsKLQl9CisJLyogTm8gc3VwcG9ydCBmb3IgdGhlIFRYIHN0YXR1cyBETUEgcmluZy4gKi8KKwlCNDNfV0FSTl9PTihkZXYtPmRldi0+aWQucmV2aXNpb24gPCA1KTsKIAogCWI0M2RiZyhkZXYtPndsLCAiJXUtYml0IERNQSBpbml0aWFsaXplZFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGludCl0eXBlKTsKIAllcnIgPSAwOwotICAgICAgb3V0Ogorb3V0OgogCXJldHVybiBlcnI7CiAKLSAgICAgIGVycl9kZXN0cm95X3J4MDoKLQliNDNfZGVzdHJveV9kbWFyaW5nKGRtYS0+cnhfcmluZzApOwotCWRtYS0+cnhfcmluZzAgPSBOVUxMOwotICAgICAgZXJyX2Rlc3Ryb3lfdHg1OgotCWI0M19kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nNSk7Ci0JZG1hLT50eF9yaW5nNSA9IE5VTEw7Ci0gICAgICBlcnJfZGVzdHJveV90eDQ6Ci0JYjQzX2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3Jpbmc0KTsKLQlkbWEtPnR4X3Jpbmc0ID0gTlVMTDsKLSAgICAgIGVycl9kZXN0cm95X3R4MzoKLQliNDNfZGVzdHJveV9kbWFyaW5nKGRtYS0+dHhfcmluZzMpOwotCWRtYS0+dHhfcmluZzMgPSBOVUxMOwotICAgICAgZXJyX2Rlc3Ryb3lfdHgyOgotCWI0M19kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMik7Ci0JZG1hLT50eF9yaW5nMiA9IE5VTEw7Ci0gICAgICBlcnJfZGVzdHJveV90eDE6Ci0JYjQzX2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmcxKTsKLQlkbWEtPnR4X3JpbmcxID0gTlVMTDsKLSAgICAgIGVycl9kZXN0cm95X3R4MDoKLQliNDNfZGVzdHJveV9kbWFyaW5nKGRtYS0+dHhfcmluZzApOwotCWRtYS0+dHhfcmluZzAgPSBOVUxMOwotCWdvdG8gb3V0OworZXJyX2Rlc3Ryb3lfbWNhc3Q6CisJZGVzdHJveV9yaW5nKGRtYSwgdHhfcmluZ19tY2FzdCk7CitlcnJfZGVzdHJveV92bzoKKwlkZXN0cm95X3JpbmcoZG1hLCB0eF9yaW5nX0FDX1ZPKTsKK2Vycl9kZXN0cm95X3ZpOgorCWRlc3Ryb3lfcmluZyhkbWEsIHR4X3JpbmdfQUNfVkkpOworZXJyX2Rlc3Ryb3lfYmU6CisJZGVzdHJveV9yaW5nKGRtYSwgdHhfcmluZ19BQ19CRSk7CitlcnJfZGVzdHJveV9iazoKKwlkZXN0cm95X3JpbmcoZG1hLCB0eF9yaW5nX0FDX0JLKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBHZW5lcmF0ZSBhIGNvb2tpZSBmb3IgdGhlIFRYIGhlYWRlci4gKi8KIHN0YXRpYyB1MTYgZ2VuZXJhdGVfY29va2llKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywgaW50IHNsb3QpCiB7Ci0JdTE2IGNvb2tpZSA9IDB4MTAwMDsKKwl1MTYgY29va2llOwogCiAJLyogVXNlIHRoZSB1cHBlciA0IGJpdHMgb2YgdGhlIGNvb2tpZSBhcwogCSAqIERNQSBjb250cm9sbGVyIElEIGFuZCBzdG9yZSB0aGUgc2xvdCBudW1iZXIKQEAgLTEwODgsMzAgKzEwNjAsOSBAQAogCSAqIEl0IGNhbiBhbHNvIG5vdCBiZSAweEZGRkYgYmVjYXVzZSB0aGF0IGlzIHNwZWNpYWwKIAkgKiBmb3IgbXVsdGljYXN0IGZyYW1lcy4KIAkgKi8KLQlzd2l0Y2ggKHJpbmctPmluZGV4KSB7Ci0JY2FzZSAwOgotCQljb29raWUgPSAweDEwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJY29va2llID0gMHgyMDAwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWNvb2tpZSA9IDB4MzAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQljb29raWUgPSAweDQwMDA7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJY29va2llID0gMHg1MDAwOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWNvb2tpZSA9IDB4NjAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQjQzX1dBUk5fT04oMSk7Ci0JfQorCWNvb2tpZSA9ICgoKHUxNilyaW5nLT5pbmRleCArIDEpIDw8IDEyKTsKIAlCNDNfV0FSTl9PTihzbG90ICYgfjB4MEZGRik7Ci0JY29va2llIHw9ICh1MTYpIHNsb3Q7CisJY29va2llIHw9ICh1MTYpc2xvdDsKIAogCXJldHVybiBjb29raWU7CiB9CkBAIC0xMTI1LDIyICsxMDc2LDE5IEBACiAKIAlzd2l0Y2ggKGNvb2tpZSAmIDB4RjAwMCkgewogCWNhc2UgMHgxMDAwOgotCQlyaW5nID0gZG1hLT50eF9yaW5nMDsKKwkJcmluZyA9IGRtYS0+dHhfcmluZ19BQ19CSzsKIAkJYnJlYWs7CiAJY2FzZSAweDIwMDA6Ci0JCXJpbmcgPSBkbWEtPnR4X3JpbmcxOworCQlyaW5nID0gZG1hLT50eF9yaW5nX0FDX0JFOwogCQlicmVhazsKIAljYXNlIDB4MzAwMDoKLQkJcmluZyA9IGRtYS0+dHhfcmluZzI7CisJCXJpbmcgPSBkbWEtPnR4X3JpbmdfQUNfVkk7CiAJCWJyZWFrOwogCWNhc2UgMHg0MDAwOgotCQlyaW5nID0gZG1hLT50eF9yaW5nMzsKKwkJcmluZyA9IGRtYS0+dHhfcmluZ19BQ19WTzsKIAkJYnJlYWs7CiAJY2FzZSAweDUwMDA6Ci0JCXJpbmcgPSBkbWEtPnR4X3Jpbmc0OwotCQlicmVhazsKLQljYXNlIDB4NjAwMDoKLQkJcmluZyA9IGRtYS0+dHhfcmluZzU7CisJCXJpbmcgPSBkbWEtPnR4X3JpbmdfbWNhc3Q7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUI0M19XQVJOX09OKDEpOwpAQCAtMTE2Nyw3ICsxMTE1LDYgQEAKIAlzaXplX3QgaGRyc2l6ZSA9IGI0M190eGhkcl9zaXplKHJpbmctPmRldik7CiAKICNkZWZpbmUgU0xPVFNfUEVSX1BBQ0tFVCAgMgotCUI0M19XQVJOX09OKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpOwogCiAJb2xkX3RvcF9zbG90ID0gcmluZy0+Y3VycmVudF9zbG90OwogCW9sZF91c2VkX3Nsb3RzID0gcmluZy0+dXNlZF9zbG90czsKQEAgLTExODksNyArMTEzNiw3IEBACiAKIAltZXRhX2hkci0+ZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsICh1bnNpZ25lZCBjaGFyICopaGVhZGVyLAogCQkJCQkgICBoZHJzaXplLCAxKTsKLQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIG1ldGFfaGRyLT5kbWFhZGRyLCBoZHJzaXplKSkgeworCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YV9oZHItPmRtYWFkZHIsIGhkcnNpemUsIDEpKSB7CiAJCXJpbmctPmN1cnJlbnRfc2xvdCA9IG9sZF90b3Bfc2xvdDsKIAkJcmluZy0+dXNlZF9zbG90cyA9IG9sZF91c2VkX3Nsb3RzOwogCQlyZXR1cm4gLUVJTzsKQEAgLTEyMDgsNyArMTE1NSw3IEBACiAKIAltZXRhLT5kbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLCBza2ItPmxlbiwgMSk7CiAJLyogY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBpbiB6b25lX2RtYSBvbiBtYXBwaW5nIGZhaWx1cmUuICovCi0JaWYgKGI0M19kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBtZXRhLT5kbWFhZGRyLCBza2ItPmxlbikpIHsKKwlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIG1ldGEtPmRtYWFkZHIsIHNrYi0+bGVuLCAxKSkgewogCQlib3VuY2Vfc2tiID0gX19kZXZfYWxsb2Nfc2tiKHNrYi0+bGVuLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CiAJCWlmICghYm91bmNlX3NrYikgewogCQkJcmluZy0+Y3VycmVudF9zbG90ID0gb2xkX3RvcF9zbG90OwpAQCAtMTIyMiw3ICsxMTY5LDcgQEAKIAkJc2tiID0gYm91bmNlX3NrYjsKIAkJbWV0YS0+c2tiID0gc2tiOwogCQltZXRhLT5kbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLCBza2ItPmxlbiwgMSk7Ci0JCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4pKSB7CisJCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4sIDEpKSB7CiAJCQlyaW5nLT5jdXJyZW50X3Nsb3QgPSBvbGRfdG9wX3Nsb3Q7CiAJCQlyaW5nLT51c2VkX3Nsb3RzID0gb2xkX3VzZWRfc2xvdHM7CiAJCQllcnIgPSAtRUlPOwpAQCAtMTI3Miw2ICsxMjE5LDM3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgRE1BIHJpbmdzLiAqLworc3RhdGljIHN0cnVjdCBiNDNfZG1hcmluZyAqIHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJCSAgICB1OCBxdWV1ZV9wcmlvKQoreworCXN0cnVjdCBiNDNfZG1hcmluZyAqcmluZzsKKworCWlmIChiNDNfbW9kcGFyYW1fcW9zKSB7CisJCS8qIDAgPSBoaWdoZXN0IHByaW9yaXR5ICovCisJCXN3aXRjaCAocXVldWVfcHJpbykgeworCQlkZWZhdWx0OgorCQkJQjQzX1dBUk5fT04oMSk7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIDA6CisJCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZ19BQ19WTzsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZ19BQ19WSTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZ19BQ19CRTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZ19BQ19CSzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCXJpbmcgPSBkZXYtPmRtYS50eF9yaW5nX0FDX0JFOworCisJcmV0dXJuIHJpbmc7Cit9CisKIGludCBiNDNfZG1hX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCiB7CkBAIC0xMjgwLDIxICsxMjU4LDE2IEBACiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICh1bmxpa2VseShza2ItPmxlbiA8IDIgKyAyICsgNikpIHsKLQkJLyogVG9vIHNob3J0LCB0aGlzIGNhbid0IGJlIGEgdmFsaWQgZnJhbWUuICovCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlpZiAoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TRU5EX0FGVEVSX0RUSU0pIHsKIAkJLyogVGhlIG11bHRpY2FzdCByaW5nIHdpbGwgYmUgc2VudCBhZnRlciB0aGUgRFRJTSAqLwotCQlyaW5nID0gZGV2LT5kbWEudHhfcmluZzQ7CisJCXJpbmcgPSBkZXYtPmRtYS50eF9yaW5nX21jYXN0OwogCQkvKiBTZXQgdGhlIG1vcmUtZGF0YSBiaXQuIFVjb2RlIHdpbGwgY2xlYXIgaXQgb24KIAkJICogdGhlIGxhc3QgZnJhbWUgZm9yIHVzLiAqLwogCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOwogCX0gZWxzZSB7CiAJCS8qIERlY2lkZSBieSBwcmlvcml0eSB3aGVyZSB0byBwdXQgdGhpcyBmcmFtZS4gKi8KLQkJcmluZyA9IHByaW9yaXR5X3RvX3R4cmluZyhkZXYsIGN0bC0+cXVldWUpOworCQlyaW5nID0gc2VsZWN0X3JpbmdfYnlfcHJpb3JpdHkoZGV2LCBjdGwtPnF1ZXVlKTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOwpAQCAtMTMwOSw2ICsxMjgyLDExIEBACiAJICogVGhhdCB3b3VsZCBiZSBhIG1hYzgwMjExIGJ1Zy4gKi8KIAlCNDNfV0FSTl9PTihyaW5nLT5zdG9wcGVkKTsKIAorCS8qIEFzc2lnbiB0aGUgcXVldWUgbnVtYmVyIHRvIHRoZSByaW5nIChpZiBub3QgYWxyZWFkeSBkb25lIGJlZm9yZSkKKwkgKiBzbyBUWCBzdGF0dXMgaGFuZGxpbmcgY2FuIHVzZSBpdC4gVGhlIHF1ZXVlIHRvIHJpbmcgbWFwcGluZyBpcworCSAqIHN0YXRpYywgc28gd2UgZG9uJ3QgbmVlZCB0byBzdG9yZSBpdCBwZXIgZnJhbWUuICovCisJcmluZy0+cXVldWVfcHJpbyA9IGN0bC0+cXVldWU7CisKIAllcnIgPSBkbWFfdHhfZnJhZ21lbnQocmluZywgc2tiLCBjdGwpOwogCWlmICh1bmxpa2VseShlcnIgPT0gLUVOT0tFWSkpIHsKIAkJLyogRHJvcCB0aGlzIHBhY2tldCwgYXMgd2UgZG9uJ3QgaGF2ZSB0aGUgZW5jcnlwdGlvbiBrZXkKQEAgLTEzMjUsNyArMTMwMyw3IEBACiAJaWYgKChmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkgfHwKIAkgICAgc2hvdWxkX2luamVjdF9vdmVyZmxvdyhyaW5nKSkgewogCQkvKiBUaGlzIFRYIHJpbmcgaXMgZnVsbC4gKi8KLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LT53bC0+aHcsIHR4cmluZ190b19wcmlvcml0eShyaW5nKSk7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldi0+d2wtPmh3LCBjdGwtPnF1ZXVlKTsKIAkJcmluZy0+c3RvcHBlZCA9IDE7CiAJCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX0RNQVZFUkJPU0UpKSB7CiAJCQliNDNkYmcoZGV2LT53bCwgIlN0b3BwZWQgVFggcmluZyAlZFxuIiwgcmluZy0+aW5kZXgpOwpAQCAtMTMzNyw2ICsxMzE1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLiAqLwogdm9pZCBiNDNfZG1hX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cykKIHsKQEAgLTEzNDUsMTIgKzEzMjQsMTMgQEAKIAlzdHJ1Y3QgYjQzX2RtYWRlc2NfZ2VuZXJpYyAqZGVzYzsKIAlzdHJ1Y3QgYjQzX2RtYWRlc2NfbWV0YSAqbWV0YTsKIAlpbnQgc2xvdDsKKwlib29sIGZyYW1lX3N1Y2NlZWQ7CiAKIAlyaW5nID0gcGFyc2VfY29va2llKGRldiwgc3RhdHVzLT5jb29raWUsICZzbG90KTsKIAlpZiAodW5saWtlbHkoIXJpbmcpKQogCQlyZXR1cm47Ci0JQjQzX1dBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7Ci0Jc3Bpbl9sb2NrKCZyaW5nLT5sb2NrKTsKKworCXNwaW5fbG9jaygmcmluZy0+bG9jayk7IC8qIElSUXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuICovCiAKIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwogCW9wcyA9IHJpbmctPm9wczsKQEAgLTEzNzEsMTggKzEzNTEsMTUgQEAKIAkJCSAqIHN0YXR1cyBvZiB0aGUgdHJhbnNtaXNzaW9uLgogCQkJICogU29tZSBmaWVsZHMgb2YgdHhzdGF0IGFyZSBhbHJlYWR5IGZpbGxlZCBpbiBkbWFfdHgoKS4KIAkJCSAqLwotCQkJaWYgKHN0YXR1cy0+YWNrZWQpIHsKLQkJCQltZXRhLT50eHN0YXQuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7Ci0JCQl9IGVsc2UgewotCQkJCWlmICghKG1ldGEtPnR4c3RhdC5jb250cm9sLmZsYWdzCi0JCQkJICAgICAgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSkKLQkJCQkJbWV0YS0+dHhzdGF0LmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKLQkJCX0KLQkJCWlmIChzdGF0dXMtPmZyYW1lX2NvdW50ID09IDApIHsKLQkJCQkvKiBUaGUgZnJhbWUgd2FzIG5vdCB0cmFuc21pdHRlZCBhdCBhbGwuICovCi0JCQkJbWV0YS0+dHhzdGF0LnJldHJ5X2NvdW50ID0gMDsKLQkJCX0gZWxzZQotCQkJCW1ldGEtPnR4c3RhdC5yZXRyeV9jb3VudCA9IHN0YXR1cy0+ZnJhbWVfY291bnQgLSAxOworCQkJZnJhbWVfc3VjY2VlZCA9IGI0M19maWxsX3R4c3RhdHVzX3JlcG9ydCgKKwkJCQkJCSYobWV0YS0+dHhzdGF0KSwgc3RhdHVzKTsKKyNpZmRlZiBDT05GSUdfQjQzX0RFQlVHCisJCQlpZiAoZnJhbWVfc3VjY2VlZCkKKwkJCQlyaW5nLT5ucl9zdWNjZWVkX3R4X3BhY2tldHMrKzsKKwkJCWVsc2UKKwkJCQlyaW5nLT5ucl9mYWlsZWRfdHhfcGFja2V0cysrOworCQkJcmluZy0+bnJfdG90YWxfcGFja2V0X3RyaWVzICs9IHN0YXR1cy0+ZnJhbWVfY291bnQ7CisjZW5kaWYgLyogREVCVUcgKi8KIAkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYtPndsLT5odywgbWV0YS0+c2tiLAogCQkJCQkJICAgICYobWV0YS0+dHhzdGF0KSk7CiAJCQkvKiBza2IgaXMgZnJlZWQgYnkgaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKCkgKi8KQEAgLTE0MDQsNyArMTM4MSw3IEBACiAJZGV2LT5zdGF0cy5sYXN0X3R4ID0gamlmZmllczsKIAlpZiAocmluZy0+c3RvcHBlZCkgewogCQlCNDNfV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCk7Ci0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldi0+d2wtPmh3LCB0eHJpbmdfdG9fcHJpb3JpdHkocmluZykpOworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYtPndsLT5odywgcmluZy0+cXVldWVfcHJpbyk7CiAJCXJpbmctPnN0b3BwZWQgPSAwOwogCQlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19ETUFWRVJCT1NFKSkgewogCQkJYjQzZGJnKGRldi0+d2wsICJXb2tlIHVwIFRYIHJpbmcgJWRcbiIsIHJpbmctPmluZGV4KTsKQEAgLTE0MjUsNyArMTQwMiw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcXVldWVzOyBpKyspIHsKIAkJZGF0YSA9ICYoc3RhdHMtPmRhdGFbaV0pOwotCQlyaW5nID0gcHJpb3JpdHlfdG9fdHhyaW5nKGRldiwgaSk7CisJCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eShkZXYsIGkpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJCWRhdGEtPmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwpAQCAtMTQ1MSwyNSArMTQyOCw2IEBACiAJc3luY19kZXNjYnVmZmVyX2Zvcl9jcHUocmluZywgbWV0YS0+ZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSk7CiAJc2tiID0gbWV0YS0+c2tiOwogCi0JaWYgKHJpbmctPmluZGV4ID09IDMpIHsKLQkJLyogV2UgcmVjZWl2ZWQgYW4geG1pdCBzdGF0dXMuICovCi0JCXN0cnVjdCBiNDNfaHd0eHN0YXR1cyAqaHcgPSAoc3RydWN0IGI0M19od3R4c3RhdHVzICopc2tiLT5kYXRhOwotCQlpbnQgaSA9IDA7Ci0KLQkJd2hpbGUgKGh3LT5jb29raWUgPT0gMCkgewotCQkJaWYgKGkgPiAxMDApCi0JCQkJYnJlYWs7Ci0JCQlpKys7Ci0JCQl1ZGVsYXkoMik7Ci0JCQliYXJyaWVyKCk7Ci0JCX0KLQkJYjQzX2hhbmRsZV9od3R4c3RhdHVzKHJpbmctPmRldiwgaHcpOwotCQkvKiByZWN5Y2xlIHRoZSBkZXNjcmlwdG9yIGJ1ZmZlci4gKi8KLQkJc3luY19kZXNjYnVmZmVyX2Zvcl9kZXZpY2UocmluZywgbWV0YS0+ZG1hYWRkciwKLQkJCQkJICAgcmluZy0+cnhfYnVmZmVyc2l6ZSk7Ci0KLQkJcmV0dXJuOwotCX0KIAlyeGhkciA9IChzdHJ1Y3QgYjQzX3J4aGRyX2Z3NCAqKXNrYi0+ZGF0YTsKIAlsZW4gPSBsZTE2X3RvX2NwdShyeGhkci0+ZnJhbWVfbGVuKTsKIAlpZiAobGVuID09IDApIHsKQEAgLTE1MjYsNyArMTQ4NCw3IEBACiAJc2tiX3B1bGwoc2tiLCByaW5nLT5mcmFtZW9mZnNldCk7CiAKIAliNDNfcngocmluZy0+ZGV2LCBza2IsIHJ4aGRyKTsKLSAgICAgIGRyb3A6Citkcm9wOgogCXJldHVybjsKIH0KIApAQCAtMTU3MiwyMSArMTUzMCw1NSBAQAogdm9pZCBiNDNfZG1hX3R4X3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCWI0M19wb3dlcl9zYXZpbmdfY3RsX2JpdHMoZGV2LCBCNDNfUFNfQVdBS0UpOwotCWI0M19kbWFfdHhfc3VzcGVuZF9yaW5nKGRldi0+ZG1hLnR4X3JpbmcwKTsKLQliNDNfZG1hX3R4X3N1c3BlbmRfcmluZyhkZXYtPmRtYS50eF9yaW5nMSk7Ci0JYjQzX2RtYV90eF9zdXNwZW5kX3JpbmcoZGV2LT5kbWEudHhfcmluZzIpOwotCWI0M19kbWFfdHhfc3VzcGVuZF9yaW5nKGRldi0+ZG1hLnR4X3JpbmczKTsKLQliNDNfZG1hX3R4X3N1c3BlbmRfcmluZyhkZXYtPmRtYS50eF9yaW5nNCk7Ci0JYjQzX2RtYV90eF9zdXNwZW5kX3JpbmcoZGV2LT5kbWEudHhfcmluZzUpOworCWI0M19kbWFfdHhfc3VzcGVuZF9yaW5nKGRldi0+ZG1hLnR4X3JpbmdfQUNfQkspOworCWI0M19kbWFfdHhfc3VzcGVuZF9yaW5nKGRldi0+ZG1hLnR4X3JpbmdfQUNfQkUpOworCWI0M19kbWFfdHhfc3VzcGVuZF9yaW5nKGRldi0+ZG1hLnR4X3JpbmdfQUNfVkkpOworCWI0M19kbWFfdHhfc3VzcGVuZF9yaW5nKGRldi0+ZG1hLnR4X3JpbmdfQUNfVk8pOworCWI0M19kbWFfdHhfc3VzcGVuZF9yaW5nKGRldi0+ZG1hLnR4X3JpbmdfbWNhc3QpOwogfQogCiB2b2lkIGI0M19kbWFfdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3Jpbmc1KTsKLQliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3Jpbmc0KTsKLQliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3JpbmczKTsKLQliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3JpbmcyKTsKLQliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3JpbmcxKTsKLQliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3JpbmcwKTsKKwliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3JpbmdfbWNhc3QpOworCWI0M19kbWFfdHhfcmVzdW1lX3JpbmcoZGV2LT5kbWEudHhfcmluZ19BQ19WTyk7CisJYjQzX2RtYV90eF9yZXN1bWVfcmluZyhkZXYtPmRtYS50eF9yaW5nX0FDX1ZJKTsKKwliNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKGRldi0+ZG1hLnR4X3JpbmdfQUNfQkUpOworCWI0M19kbWFfdHhfcmVzdW1lX3JpbmcoZGV2LT5kbWEudHhfcmluZ19BQ19CSyk7CiAJYjQzX3Bvd2VyX3NhdmluZ19jdGxfYml0cyhkZXYsIDApOwogfQorCisjaWZkZWYgQ09ORklHX0I0M19QSU8KK3N0YXRpYyB2b2lkIGRpcmVjdF9maWZvX3J4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZG1hdHlwZSB0eXBlLAorCQkJICAgdTE2IG1taW9fYmFzZSwgYm9vbCBlbmFibGUpCit7CisJdTMyIGN0bDsKKworCWlmICh0eXBlID09IEI0M19ETUFfNjRCSVQpIHsKKwkJY3RsID0gYjQzX3JlYWQzMihkZXYsIG1taW9fYmFzZSArIEI0M19ETUE2NF9SWENUTCk7CisJCWN0bCAmPSB+QjQzX0RNQTY0X1JYRElSRUNURklGTzsKKwkJaWYgKGVuYWJsZSkKKwkJCWN0bCB8PSBCNDNfRE1BNjRfUlhESVJFQ1RGSUZPOworCQliNDNfd3JpdGUzMihkZXYsIG1taW9fYmFzZSArIEI0M19ETUE2NF9SWENUTCwgY3RsKTsKKwl9IGVsc2UgeworCQljdGwgPSBiNDNfcmVhZDMyKGRldiwgbW1pb19iYXNlICsgQjQzX0RNQTMyX1JYQ1RMKTsKKwkJY3RsICY9IH5CNDNfRE1BMzJfUlhESVJFQ1RGSUZPOworCQlpZiAoZW5hYmxlKQorCQkJY3RsIHw9IEI0M19ETUEzMl9SWERJUkVDVEZJRk87CisJCWI0M193cml0ZTMyKGRldiwgbW1pb19iYXNlICsgQjQzX0RNQTMyX1JYQ1RMLCBjdGwpOworCX0KK30KKworLyogRW5hYmxlL0Rpc2FibGUgRGlyZWN0IEZJRk8gUmVjZWl2ZSBNb2RlIChQSU8pIG9uIGEgUlggZW5naW5lLgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBQSU8gY29kZSwgc28gRE1BIHN0cnVjdHVyZXMgYXJlIG5vdCBhdmFpbGFibGUuICovCit2b2lkIGI0M19kbWFfZGlyZWN0X2ZpZm9fcngoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICAgIHVuc2lnbmVkIGludCBlbmdpbmVfaW5kZXgsIGJvb2wgZW5hYmxlKQoreworCWVudW0gYjQzX2RtYXR5cGUgdHlwZTsKKwl1MTYgbW1pb19iYXNlOworCisJdHlwZSA9IGRtYV9tYXNrX3RvX2VuZ2luZV90eXBlKHN1cHBvcnRlZF9kbWFfbWFzayhkZXYpKTsKKworCW1taW9fYmFzZSA9IGI0M19kbWFjb250cm9sbGVyX2Jhc2UodHlwZSwgZW5naW5lX2luZGV4KTsKKwlkaXJlY3RfZmlmb19yeChkZXYsIHR5cGUsIG1taW9fYmFzZSwgZW5hYmxlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQjQzX1BJTyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGMwZDZiNjkuLjIwYWNmODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTI0NSw2ICsyNDUsOSBAQAogCWVudW0gYjQzX2RtYXR5cGUgdHlwZTsKIAkvKiBCb29sZWFuLiBJcyB0aGlzIHJpbmcgc3RvcHBlZCBhdCBpZWVlODAyMTEgbGV2ZWw/ICovCiAJYm9vbCBzdG9wcGVkOworCS8qIFRoZSBRT1MgcHJpb3JpdHkgYXNzaWduZWQgdG8gdGhpcyByaW5nLiBPbmx5IHVzZWQgZm9yIFRYIHJpbmdzLgorCSAqIFRoaXMgaXMgdGhlIG1hYzgwMjExICJxdWV1ZSIgdmFsdWUuICovCisJdTggcXVldWVfcHJpbzsKIAkvKiBMb2NrLCBvbmx5IHVzZWQgZm9yIFRYLiAqLwogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CkBAIC0yNTMsNyArMjU2LDEzIEBACiAJaW50IG1heF91c2VkX3Nsb3RzOwogCS8qIExhc3QgdGltZSB3ZSBpbmplY3RlZCBhIHJpbmcgb3ZlcmZsb3cuICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X2luamVjdGVkX292ZXJmbG93OwotI2VuZGlmCQkJCS8qIENPTkZJR19CNDNfREVCVUcgKi8KKwkvKiBTdGF0aXN0aWNzOiBOdW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIHBhY2tldHMgKi8KKwl1NjQgbnJfc3VjY2VlZF90eF9wYWNrZXRzOworCS8qIFN0YXRpc3RpY3M6IE51bWJlciBvZiBmYWlsZWQgVFggcGFja2V0cyAqLworCXU2NCBucl9mYWlsZWRfdHhfcGFja2V0czsKKwkvKiBTdGF0aXN0aWNzOiBUb3RhbCBudW1iZXIgb2YgVFggcGx1cyBhbGwgcmV0cmllcy4gKi8KKwl1NjQgbnJfdG90YWxfcGFja2V0X3RyaWVzOworI2VuZGlmIC8qIENPTkZJR19CNDNfREVCVUcgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGI0M19kbWFfcmVhZChzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcsIHUxNiBvZmZzZXQpCkBAIC0yODIsNCArMjkxLDcgQEAKIAogdm9pZCBiNDNfZG1hX3J4KHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZyk7CiAKK3ZvaWQgYjQzX2RtYV9kaXJlY3RfZmlmb19yeChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkgICAgdW5zaWduZWQgaW50IGVuZ2luZV9pbmRleCwgYm9vbCBlbmFibGUpOworCiAjZW5kaWYgLyogQjQzX0RNQV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmMKaW5kZXggMGFhYzFmZi4uMzZhOWM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5jCkBAIC0xMTYsMTAgKzExNiw3IEBACiB7CiAJaWYgKCFsZWQtPmRldikKIAkJcmV0dXJuOwotCWlmIChsZWQtPmRldi0+c3VzcGVuZF9pbl9wcm9ncmVzcykKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXJfc3VzcGVuZGVkKCZsZWQtPmxlZF9kZXYpOwotCWVsc2UKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2Rldik7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2Rldik7CiAJYjQzX2xlZF90dXJuX29mZihsZWQtPmRldiwgbGVkLT5pbmRleCwgbGVkLT5hY3RpdmVsb3cpOwogCWxlZC0+ZGV2ID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCmluZGV4IGVmNjVjNDEuLjk0M2NjODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwpAQCAtNDYsNyArNDYsOSBAQAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAibnBoeS5oIgogI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgInBpby5oIgogI2luY2x1ZGUgInN5c2ZzLmgiCiAjaW5jbHVkZSAieG1pdC5oIgogI2luY2x1ZGUgImxvLmgiCkBAIC01OCw2ICs2MCw4IEBACiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEJ1ZXNjaCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitNT0RVTEVfRklSTVdBUkUoQjQzX1NVUFBPUlRFRF9GSVJNV0FSRV9JRCk7CisKIAogc3RhdGljIGludCBtb2RwYXJhbV9iYWRfZnJhbWVzX3ByZWVtcHQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYmFkX2ZyYW1lc19wcmVlbXB0LCBtb2RwYXJhbV9iYWRfZnJhbWVzX3ByZWVtcHQsIGludCwgMDQ0NCk7CkBAIC03Niw2ICs4MCwxMSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24uIik7CiAKK2ludCBiNDNfbW9kcGFyYW1fcW9zID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChxb3MsIGI0M19tb2RwYXJhbV9xb3MsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHFvcywgIkVuYWJsZSBRT1Mgc3VwcG9ydCAoZGVmYXVsdCBvbikiKTsKKworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNzYl9kZXZpY2VfaWQgYjQzX3NzYl90YmxbXSA9IHsKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDUpLAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgNiksCkBAIC05NCwyNSArMTAzLDI5IEBACiAgKiBkYXRhIGluIHRoZXJlLiBUaGlzIGRhdGEgaXMgdGhlIHNhbWUgZm9yIGFsbCBkZXZpY2VzLCBzbyB3ZSBkb24ndAogICogZ2V0IGNvbmN1cnJlbmN5IGlzc3VlcyAqLwogI2RlZmluZSBSQVRFVEFCX0VOVChfcmF0ZWlkLCBfZmxhZ3MpIFwKLQl7CQkJCQkJCVwKLQkJLnJhdGUJPSBCNDNfUkFURV9UT19CQVNFMTAwS0JQUyhfcmF0ZWlkKSwJXAotCQkudmFsCT0gKF9yYXRlaWQpLAkJCQlcCi0JCS52YWwyCT0gKF9yYXRlaWQpLAkJCQlcCi0JCS5mbGFncwk9IChfZmxhZ3MpLAkJCQlcCisJewkJCQkJCQkJXAorCQkuYml0cmF0ZQk9IEI0M19SQVRFX1RPX0JBU0UxMDBLQlBTKF9yYXRlaWQpLAlcCisJCS5od192YWx1ZQk9IChfcmF0ZWlkKSwJCQkJXAorCQkuZmxhZ3MJCT0gKF9mbGFncyksCQkJCVwKIAl9CisKKy8qCisgKiBOT1RFOiBXaGVuIGNoYW5naW5nIHRoaXMsIHN5bmMgd2l0aCB4bWl0LmMncworICoJIGI0M19wbGNwX2dldF9iaXRyYXRlX2lkeF8qIGZ1bmN0aW9ucyEKKyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBfX2I0M19yYXRldGFibGVbXSA9IHsKLQlSQVRFVEFCX0VOVChCNDNfQ0NLX1JBVEVfMU1CLCBJRUVFODAyMTFfUkFURV9DQ0spLAotCVJBVEVUQUJfRU5UKEI0M19DQ0tfUkFURV8yTUIsIElFRUU4MDIxMV9SQVRFX0NDS18yKSwKLQlSQVRFVEFCX0VOVChCNDNfQ0NLX1JBVEVfNU1CLCBJRUVFODAyMTFfUkFURV9DQ0tfMiksCi0JUkFURVRBQl9FTlQoQjQzX0NDS19SQVRFXzExTUIsIElFRUU4MDIxMV9SQVRFX0NDS18yKSwKLQlSQVRFVEFCX0VOVChCNDNfT0ZETV9SQVRFXzZNQiwgSUVFRTgwMjExX1JBVEVfT0ZETSksCi0JUkFURVRBQl9FTlQoQjQzX09GRE1fUkFURV85TUIsIElFRUU4MDIxMV9SQVRFX09GRE0pLAotCVJBVEVUQUJfRU5UKEI0M19PRkRNX1JBVEVfMTJNQiwgSUVFRTgwMjExX1JBVEVfT0ZETSksCi0JUkFURVRBQl9FTlQoQjQzX09GRE1fUkFURV8xOE1CLCBJRUVFODAyMTFfUkFURV9PRkRNKSwKLQlSQVRFVEFCX0VOVChCNDNfT0ZETV9SQVRFXzI0TUIsIElFRUU4MDIxMV9SQVRFX09GRE0pLAotCVJBVEVUQUJfRU5UKEI0M19PRkRNX1JBVEVfMzZNQiwgSUVFRTgwMjExX1JBVEVfT0ZETSksCi0JUkFURVRBQl9FTlQoQjQzX09GRE1fUkFURV80OE1CLCBJRUVFODAyMTFfUkFURV9PRkRNKSwKLQlSQVRFVEFCX0VOVChCNDNfT0ZETV9SQVRFXzU0TUIsIElFRUU4MDIxMV9SQVRFX09GRE0pLAorCVJBVEVUQUJfRU5UKEI0M19DQ0tfUkFURV8xTUIsIDApLAorCVJBVEVUQUJfRU5UKEI0M19DQ0tfUkFURV8yTUIsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFVEFCX0VOVChCNDNfQ0NLX1JBVEVfNU1CLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURVRBQl9FTlQoQjQzX0NDS19SQVRFXzExTUIsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFVEFCX0VOVChCNDNfT0ZETV9SQVRFXzZNQiwgMCksCisJUkFURVRBQl9FTlQoQjQzX09GRE1fUkFURV85TUIsIDApLAorCVJBVEVUQUJfRU5UKEI0M19PRkRNX1JBVEVfMTJNQiwgMCksCisJUkFURVRBQl9FTlQoQjQzX09GRE1fUkFURV8xOE1CLCAwKSwKKwlSQVRFVEFCX0VOVChCNDNfT0ZETV9SQVRFXzI0TUIsIDApLAorCVJBVEVUQUJfRU5UKEI0M19PRkRNX1JBVEVfMzZNQiwgMCksCisJUkFURVRBQl9FTlQoQjQzX09GRE1fUkFURV80OE1CLCAwKSwKKwlSQVRFVEFCX0VOVChCNDNfT0ZETV9SQVRFXzU0TUIsIDApLAogfTsKIAogI2RlZmluZSBiNDNfYV9yYXRldGFibGUJCShfX2I0M19yYXRldGFibGUgKyA0KQpAQCAtMTIyLDUzICsxMzUsMTQ0IEBACiAjZGVmaW5lIGI0M19nX3JhdGV0YWJsZQkJKF9fYjQzX3JhdGV0YWJsZSArIDApCiAjZGVmaW5lIGI0M19nX3JhdGV0YWJsZV9zaXplCTEyCiAKLSNkZWZpbmUgQ0hBTlRBQl9FTlQoX2NoYW5pZCwgX2ZyZXEpIFwKLQl7CQkJCQkJCVwKLQkJLmNoYW4JPSAoX2NoYW5pZCksCQkJCVwKLQkJLmZyZXEJPSAoX2ZyZXEpLAkJCQlcCi0JCS52YWwJPSAoX2NoYW5pZCksCQkJCVwKLQkJLmZsYWcJPSBJRUVFODAyMTFfQ0hBTl9XX1NDQU4gfAkJXAotCQkJICBJRUVFODAyMTFfQ0hBTl9XX0FDVElWRV9TQ0FOIHwJXAotCQkJICBJRUVFODAyMTFfQ0hBTl9XX0lCU1MsCQlcCi0JCS5wb3dlcl9sZXZlbAk9IDB4RkYsCQkJCVwKLQkJLmFudGVubmFfbWF4CT0gMHhGRiwJCQkJXAotCX0KKyNkZWZpbmUgQ0hBTjRHKF9jaGFubmVsLCBfZnJlcSwgX2ZsYWdzKSB7CQkJXAorCS5iYW5kCQkJPSBJRUVFODAyMTFfQkFORF8yR0haLAkJXAorCS5jZW50ZXJfZnJlcQkJPSAoX2ZyZXEpLAkJCVwKKwkuaHdfdmFsdWUJCT0gKF9jaGFubmVsKSwJCQlcCisJLmZsYWdzCQkJPSAoX2ZsYWdzKSwJCQlcCisJLm1heF9hbnRlbm5hX2dhaW4JPSAwLAkJCQlcCisJLm1heF9wb3dlcgkJPSAzMCwJCQkJXAorfQogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBiNDNfMmdoel9jaGFudGFibGVbXSA9IHsKLQlDSEFOVEFCX0VOVCgxLCAyNDEyKSwKLQlDSEFOVEFCX0VOVCgyLCAyNDE3KSwKLQlDSEFOVEFCX0VOVCgzLCAyNDIyKSwKLQlDSEFOVEFCX0VOVCg0LCAyNDI3KSwKLQlDSEFOVEFCX0VOVCg1LCAyNDMyKSwKLQlDSEFOVEFCX0VOVCg2LCAyNDM3KSwKLQlDSEFOVEFCX0VOVCg3LCAyNDQyKSwKLQlDSEFOVEFCX0VOVCg4LCAyNDQ3KSwKLQlDSEFOVEFCX0VOVCg5LCAyNDUyKSwKLQlDSEFOVEFCX0VOVCgxMCwgMjQ1NyksCi0JQ0hBTlRBQl9FTlQoMTEsIDI0NjIpLAotCUNIQU5UQUJfRU5UKDEyLCAyNDY3KSwKLQlDSEFOVEFCX0VOVCgxMywgMjQ3MiksCi0JQ0hBTlRBQl9FTlQoMTQsIDI0ODQpLAorCUNIQU40RygxLCAyNDEyLCAwKSwKKwlDSEFONEcoMiwgMjQxNywgMCksCisJQ0hBTjRHKDMsIDI0MjIsIDApLAorCUNIQU40Ryg0LCAyNDI3LCAwKSwKKwlDSEFONEcoNSwgMjQzMiwgMCksCisJQ0hBTjRHKDYsIDI0MzcsIDApLAorCUNIQU40Ryg3LCAyNDQyLCAwKSwKKwlDSEFONEcoOCwgMjQ0NywgMCksCisJQ0hBTjRHKDksIDI0NTIsIDApLAorCUNIQU40RygxMCwgMjQ1NywgMCksCisJQ0hBTjRHKDExLCAyNDYyLCAwKSwKKwlDSEFONEcoMTIsIDI0NjcsIDApLAorCUNIQU40RygxMywgMjQ3MiwgMCksCisJQ0hBTjRHKDE0LCAyNDg0LCAwKSwKIH07Ci0jZGVmaW5lIGI0M18yZ2h6X2NoYW50YWJsZV9zaXplCUFSUkFZX1NJWkUoYjQzXzJnaHpfY2hhbnRhYmxlKQorI3VuZGVmIENIQU40RwogCi0jaWYgMAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBiNDNfNWdoel9jaGFudGFibGVbXSA9IHsKLQlDSEFOVEFCX0VOVCgzNiwgNTE4MCksCi0JQ0hBTlRBQl9FTlQoNDAsIDUyMDApLAotCUNIQU5UQUJfRU5UKDQ0LCA1MjIwKSwKLQlDSEFOVEFCX0VOVCg0OCwgNTI0MCksCi0JQ0hBTlRBQl9FTlQoNTIsIDUyNjApLAotCUNIQU5UQUJfRU5UKDU2LCA1MjgwKSwKLQlDSEFOVEFCX0VOVCg2MCwgNTMwMCksCi0JQ0hBTlRBQl9FTlQoNjQsIDUzMjApLAotCUNIQU5UQUJfRU5UKDE0OSwgNTc0NSksCi0JQ0hBTlRBQl9FTlQoMTUzLCA1NzY1KSwKLQlDSEFOVEFCX0VOVCgxNTcsIDU3ODUpLAotCUNIQU5UQUJfRU5UKDE2MSwgNTgwNSksCi0JQ0hBTlRBQl9FTlQoMTY1LCA1ODI1KSwKKyNkZWZpbmUgQ0hBTjVHKF9jaGFubmVsLCBfZmxhZ3MpIHsJCQkJXAorCS5iYW5kCQkJPSBJRUVFODAyMTFfQkFORF81R0haLAkJXAorCS5jZW50ZXJfZnJlcQkJPSA1MDAwICsgKDUgKiAoX2NoYW5uZWwpKSwJXAorCS5od192YWx1ZQkJPSAoX2NoYW5uZWwpLAkJCVwKKwkuZmxhZ3MJCQk9IChfZmxhZ3MpLAkJCVwKKwkubWF4X2FudGVubmFfZ2Fpbgk9IDAsCQkJCVwKKwkubWF4X3Bvd2VyCQk9IDMwLAkJCQlcCit9CitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGI0M181Z2h6X25waHlfY2hhbnRhYmxlW10gPSB7CisJQ0hBTjVHKDMyLCAwKSwJCUNIQU41RygzNCwgMCksCisJQ0hBTjVHKDM2LCAwKSwJCUNIQU41RygzOCwgMCksCisJQ0hBTjVHKDQwLCAwKSwJCUNIQU41Ryg0MiwgMCksCisJQ0hBTjVHKDQ0LCAwKSwJCUNIQU41Ryg0NiwgMCksCisJQ0hBTjVHKDQ4LCAwKSwJCUNIQU41Ryg1MCwgMCksCisJQ0hBTjVHKDUyLCAwKSwJCUNIQU41Ryg1NCwgMCksCisJQ0hBTjVHKDU2LCAwKSwJCUNIQU41Ryg1OCwgMCksCisJQ0hBTjVHKDYwLCAwKSwJCUNIQU41Ryg2MiwgMCksCisJQ0hBTjVHKDY0LCAwKSwJCUNIQU41Ryg2NiwgMCksCisJQ0hBTjVHKDY4LCAwKSwJCUNIQU41Ryg3MCwgMCksCisJQ0hBTjVHKDcyLCAwKSwJCUNIQU41Ryg3NCwgMCksCisJQ0hBTjVHKDc2LCAwKSwJCUNIQU41Ryg3OCwgMCksCisJQ0hBTjVHKDgwLCAwKSwJCUNIQU41Ryg4MiwgMCksCisJQ0hBTjVHKDg0LCAwKSwJCUNIQU41Ryg4NiwgMCksCisJQ0hBTjVHKDg4LCAwKSwJCUNIQU41Ryg5MCwgMCksCisJQ0hBTjVHKDkyLCAwKSwJCUNIQU41Ryg5NCwgMCksCisJQ0hBTjVHKDk2LCAwKSwJCUNIQU41Ryg5OCwgMCksCisJQ0hBTjVHKDEwMCwgMCksCQlDSEFONUcoMTAyLCAwKSwKKwlDSEFONUcoMTA0LCAwKSwJCUNIQU41RygxMDYsIDApLAorCUNIQU41RygxMDgsIDApLAkJQ0hBTjVHKDExMCwgMCksCisJQ0hBTjVHKDExMiwgMCksCQlDSEFONUcoMTE0LCAwKSwKKwlDSEFONUcoMTE2LCAwKSwJCUNIQU41RygxMTgsIDApLAorCUNIQU41RygxMjAsIDApLAkJQ0hBTjVHKDEyMiwgMCksCisJQ0hBTjVHKDEyNCwgMCksCQlDSEFONUcoMTI2LCAwKSwKKwlDSEFONUcoMTI4LCAwKSwJCUNIQU41RygxMzAsIDApLAorCUNIQU41RygxMzIsIDApLAkJQ0hBTjVHKDEzNCwgMCksCisJQ0hBTjVHKDEzNiwgMCksCQlDSEFONUcoMTM4LCAwKSwKKwlDSEFONUcoMTQwLCAwKSwJCUNIQU41RygxNDIsIDApLAorCUNIQU41RygxNDQsIDApLAkJQ0hBTjVHKDE0NSwgMCksCisJQ0hBTjVHKDE0NiwgMCksCQlDSEFONUcoMTQ3LCAwKSwKKwlDSEFONUcoMTQ4LCAwKSwJCUNIQU41RygxNDksIDApLAorCUNIQU41RygxNTAsIDApLAkJQ0hBTjVHKDE1MSwgMCksCisJQ0hBTjVHKDE1MiwgMCksCQlDSEFONUcoMTUzLCAwKSwKKwlDSEFONUcoMTU0LCAwKSwJCUNIQU41RygxNTUsIDApLAorCUNIQU41RygxNTYsIDApLAkJQ0hBTjVHKDE1NywgMCksCisJQ0hBTjVHKDE1OCwgMCksCQlDSEFONUcoMTU5LCAwKSwKKwlDSEFONUcoMTYwLCAwKSwJCUNIQU41RygxNjEsIDApLAorCUNIQU41RygxNjIsIDApLAkJQ0hBTjVHKDE2MywgMCksCisJQ0hBTjVHKDE2NCwgMCksCQlDSEFONUcoMTY1LCAwKSwKKwlDSEFONUcoMTY2LCAwKSwJCUNIQU41RygxNjgsIDApLAorCUNIQU41RygxNzAsIDApLAkJQ0hBTjVHKDE3MiwgMCksCisJQ0hBTjVHKDE3NCwgMCksCQlDSEFONUcoMTc2LCAwKSwKKwlDSEFONUcoMTc4LCAwKSwJCUNIQU41RygxODAsIDApLAorCUNIQU41RygxODIsIDApLAkJQ0hBTjVHKDE4NCwgMCksCisJQ0hBTjVHKDE4NiwgMCksCQlDSEFONUcoMTg4LCAwKSwKKwlDSEFONUcoMTkwLCAwKSwJCUNIQU41RygxOTIsIDApLAorCUNIQU41RygxOTQsIDApLAkJQ0hBTjVHKDE5NiwgMCksCisJQ0hBTjVHKDE5OCwgMCksCQlDSEFONUcoMjAwLCAwKSwKKwlDSEFONUcoMjAyLCAwKSwJCUNIQU41RygyMDQsIDApLAorCUNIQU41RygyMDYsIDApLAkJQ0hBTjVHKDIwOCwgMCksCisJQ0hBTjVHKDIxMCwgMCksCQlDSEFONUcoMjEyLCAwKSwKKwlDSEFONUcoMjE0LCAwKSwJCUNIQU41RygyMTYsIDApLAorCUNIQU41RygyMTgsIDApLAkJQ0hBTjVHKDIyMCwgMCksCisJQ0hBTjVHKDIyMiwgMCksCQlDSEFONUcoMjI0LCAwKSwKKwlDSEFONUcoMjI2LCAwKSwJCUNIQU41RygyMjgsIDApLAogfTsKLSNkZWZpbmUgYjQzXzVnaHpfY2hhbnRhYmxlX3NpemUJQVJSQVlfU0laRShiNDNfNWdoel9jaGFudGFibGUpCi0jZW5kaWYKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBiNDNfNWdoel9hcGh5X2NoYW50YWJsZVtdID0geworCUNIQU41RygzNCwgMCksCQlDSEFONUcoMzYsIDApLAorCUNIQU41RygzOCwgMCksCQlDSEFONUcoNDAsIDApLAorCUNIQU41Ryg0MiwgMCksCQlDSEFONUcoNDQsIDApLAorCUNIQU41Ryg0NiwgMCksCQlDSEFONUcoNDgsIDApLAorCUNIQU41Ryg1MiwgMCksCQlDSEFONUcoNTYsIDApLAorCUNIQU41Ryg2MCwgMCksCQlDSEFONUcoNjQsIDApLAorCUNIQU41RygxMDAsIDApLAkJQ0hBTjVHKDEwNCwgMCksCisJQ0hBTjVHKDEwOCwgMCksCQlDSEFONUcoMTEyLCAwKSwKKwlDSEFONUcoMTE2LCAwKSwJCUNIQU41RygxMjAsIDApLAorCUNIQU41RygxMjQsIDApLAkJQ0hBTjVHKDEyOCwgMCksCisJQ0hBTjVHKDEzMiwgMCksCQlDSEFONUcoMTM2LCAwKSwKKwlDSEFONUcoMTQwLCAwKSwJCUNIQU41RygxNDksIDApLAorCUNIQU41RygxNTMsIDApLAkJQ0hBTjVHKDE1NywgMCksCisJQ0hBTjVHKDE2MSwgMCksCQlDSEFONUcoMTY1LCAwKSwKKwlDSEFONUcoMTg0LCAwKSwJCUNIQU41RygxODgsIDApLAorCUNIQU41RygxOTIsIDApLAkJQ0hBTjVHKDE5NiwgMCksCisJQ0hBTjVHKDIwMCwgMCksCQlDSEFONUcoMjA0LCAwKSwKKwlDSEFONUcoMjA4LCAwKSwJCUNIQU41RygyMTIsIDApLAorCUNIQU41RygyMTYsIDApLAorfTsKKyN1bmRlZiBDSEFONUcKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYjQzX2JhbmRfNUdIel9ucGh5ID0geworCS5iYW5kCQk9IElFRUU4MDIxMV9CQU5EXzVHSFosCisJLmNoYW5uZWxzCT0gYjQzXzVnaHpfbnBoeV9jaGFudGFibGUsCisJLm5fY2hhbm5lbHMJPSBBUlJBWV9TSVpFKGI0M181Z2h6X25waHlfY2hhbnRhYmxlKSwKKwkuYml0cmF0ZXMJPSBiNDNfYV9yYXRldGFibGUsCisJLm5fYml0cmF0ZXMJPSBiNDNfYV9yYXRldGFibGVfc2l6ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGI0M19iYW5kXzVHSHpfYXBoeSA9IHsKKwkuYmFuZAkJPSBJRUVFODAyMTFfQkFORF81R0haLAorCS5jaGFubmVscwk9IGI0M181Z2h6X2FwaHlfY2hhbnRhYmxlLAorCS5uX2NoYW5uZWxzCT0gQVJSQVlfU0laRShiNDNfNWdoel9hcGh5X2NoYW50YWJsZSksCisJLmJpdHJhdGVzCT0gYjQzX2FfcmF0ZXRhYmxlLAorCS5uX2JpdHJhdGVzCT0gYjQzX2FfcmF0ZXRhYmxlX3NpemUsCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiNDNfYmFuZF8yR0h6ID0geworCS5iYW5kCQk9IElFRUU4MDIxMV9CQU5EXzJHSFosCisJLmNoYW5uZWxzCT0gYjQzXzJnaHpfY2hhbnRhYmxlLAorCS5uX2NoYW5uZWxzCT0gQVJSQVlfU0laRShiNDNfMmdoel9jaGFudGFibGUpLAorCS5iaXRyYXRlcwk9IGI0M19nX3JhdGV0YWJsZSwKKwkubl9iaXRyYXRlcwk9IGI0M19nX3JhdGV0YWJsZV9zaXplLAorfTsKIAogc3RhdGljIHZvaWQgYjQzX3dpcmVsZXNzX2NvcmVfZXhpdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogc3RhdGljIGludCBiNDNfd2lyZWxlc3NfY29yZV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CkBAIC0zNjgsMjQgKzQ3MiwzMCBAQAogfQogCiAvKiBSZWFkIEhvc3RGbGFncyAqLwotdTMyIGI0M19oZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKiBkZXYpCit1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqIGRldikKIHsKLQl1MzIgcmV0OworCXU2NCByZXQ7CiAKIAlyZXQgPSBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX0hPU1RGSEkpOwogCXJldCA8PD0gMTY7CisJcmV0IHw9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfSE9TVEZNSSk7CisJcmV0IDw8PSAxNjsKIAlyZXQgfD0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9IT1NURkxPKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIC8qIFdyaXRlIEhvc3RGbGFncyAqLwotdm9pZCBiNDNfaGZfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgdmFsdWUpCit2b2lkIGI0M19oZl93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB2YWx1ZSkKIHsKLQliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwKLQkJCUI0M19TSE1fU0hfSE9TVEZMTywgKHZhbHVlICYgMHgwMDAwRkZGRikpOwotCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAotCQkJQjQzX1NITV9TSF9IT1NURkhJLCAoKHZhbHVlICYgMHhGRkZGMDAwMCkgPj4gMTYpKTsKKwl1MTYgbG8sIG1pLCBoaTsKKworCWxvID0gKHZhbHVlICYgMHgwMDAwMDAwMEZGRkZVTEwpOworCW1pID0gKHZhbHVlICYgMHgwMDAwRkZGRjAwMDBVTEwpID4+IDE2OworCWhpID0gKHZhbHVlICYgMHhGRkZGMDAwMDAwMDBVTEwpID4+IDMyOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX0hPU1RGTE8sIGxvKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9IT1NURk1JLCBtaSk7CisJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfSE9TVEZISSwgaGkpOwogfQogCiB2b2lkIGI0M190c2ZfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCAqIHRzZikKQEAgLTkxMCw3ICsxMDIwLDE4IEBACiAvKiBUdXJuIHRoZSBBbmFsb2cgT04vT0ZGICovCiBzdGF0aWMgdm9pZCBiNDNfc3dpdGNoX2FuYWxvZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGludCBvbikKIHsKLQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1BIWTAsIG9uID8gMCA6IDB4RjQpOworCXN3aXRjaCAoZGV2LT5waHkudHlwZSkgeworCWNhc2UgQjQzX1BIWVRZUEVfQToKKwljYXNlIEI0M19QSFlUWVBFX0c6CisJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZMCwgb24gPyAwIDogMHhGNCk7CisJCWJyZWFrOworCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLAorCQkJICAgICAgb24gPyAwIDogMHg3RkZGKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQjQzX1dBUk5fT04oMSk7CisJfQogfQogCiB2b2lkIGI0M193aXJlbGVzc19jb3JlX3Jlc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGZsYWdzKQpAQCAtMTE2MCwyMiArMTI4MSwxMDcgQEAKIAkJCXNpemUgKyBzaXplb2Yoc3RydWN0IGI0M19wbGNwX2hkcjYpKTsKIH0KIAorLyogQ2hlY2sgaWYgdGhlIHVzZSBvZiB0aGUgYW50ZW5uYSB0aGF0IGllZWU4MDIxMSB0b2xkIHVzIHRvCisgKiB1c2UgaXMgcG9zc2libGUuIFRoaXMgd2lsbCBmYWxsIGJhY2sgdG8gREVGQVVMVC4KKyAqICJhbnRlbm5hX25yIiBpcyB0aGUgYW50ZW5uYSBpZGVudGlmaWVyIHdlIGdvdCBmcm9tIGllZWU4MDIxMS4gKi8KK3U4IGI0M19pZWVlODAyMTFfYW50ZW5uYV9zYW5pdGl6ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICB1OCBhbnRlbm5hX25yKQoreworCXU4IGFudGVubmFfbWFzazsKKworCWlmIChhbnRlbm5hX25yID09IDApIHsKKwkJLyogWmVybyBtZWFucyAidXNlIGRlZmF1bHQgYW50ZW5uYSIuIFRoYXQncyBhbHdheXMgT0suICovCisJCXJldHVybiAwOworCX0KKworCS8qIEdldCB0aGUgbWFzayBvZiBhdmFpbGFibGUgYW50ZW5uYXMuICovCisJaWYgKGRldi0+cGh5Lmdtb2RlKQorCQlhbnRlbm5hX21hc2sgPSBkZXYtPmRldi0+YnVzLT5zcHJvbS5hbnRfYXZhaWxhYmxlX2JnOworCWVsc2UKKwkJYW50ZW5uYV9tYXNrID0gZGV2LT5kZXYtPmJ1cy0+c3Byb20uYW50X2F2YWlsYWJsZV9hOworCisJaWYgKCEoYW50ZW5uYV9tYXNrICYgKDEgPDwgKGFudGVubmFfbnIgLSAxKSkpKSB7CisJCS8qIFRoaXMgYW50ZW5uYSBpcyBub3QgYXZhaWxhYmxlLiBGYWxsIGJhY2sgdG8gZGVmYXVsdC4gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGFudGVubmFfbnI7Cit9CisKK3N0YXRpYyBpbnQgYjQzX2FudGVubmFfZnJvbV9pZWVlODAyMTEoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBhbnRlbm5hKQoreworCWFudGVubmEgPSBiNDNfaWVlZTgwMjExX2FudGVubmFfc2FuaXRpemUoZGV2LCBhbnRlbm5hKTsKKwlzd2l0Y2ggKGFudGVubmEpIHsKKwljYXNlIDA6CQkvKiBkZWZhdWx0L2RpdmVyc2l0eSAqLworCQlyZXR1cm4gQjQzX0FOVEVOTkFfREVGQVVMVDsKKwljYXNlIDE6CQkvKiBBbnRlbm5hIDAgKi8KKwkJcmV0dXJuIEI0M19BTlRFTk5BMDsKKwljYXNlIDI6CQkvKiBBbnRlbm5hIDEgKi8KKwkJcmV0dXJuIEI0M19BTlRFTk5BMTsKKwljYXNlIDM6CQkvKiBBbnRlbm5hIDIgKi8KKwkJcmV0dXJuIEI0M19BTlRFTk5BMjsKKwljYXNlIDQ6CQkvKiBBbnRlbm5hIDMgKi8KKwkJcmV0dXJuIEI0M19BTlRFTk5BMzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gQjQzX0FOVEVOTkFfREVGQVVMVDsKKwl9Cit9CisKKy8qIENvbnZlcnQgYSBiNDMgYW50ZW5uYSBudW1iZXIgdmFsdWUgdG8gdGhlIFBIWSBUWCBjb250cm9sIHZhbHVlLiAqLworc3RhdGljIHUxNiBiNDNfYW50ZW5uYV90b19waHljdGwoaW50IGFudGVubmEpCit7CisJc3dpdGNoIChhbnRlbm5hKSB7CisJY2FzZSBCNDNfQU5URU5OQTA6CisJCXJldHVybiBCNDNfVFhIX1BIWV9BTlQwOworCWNhc2UgQjQzX0FOVEVOTkExOgorCQlyZXR1cm4gQjQzX1RYSF9QSFlfQU5UMTsKKwljYXNlIEI0M19BTlRFTk5BMjoKKwkJcmV0dXJuIEI0M19UWEhfUEhZX0FOVDI7CisJY2FzZSBCNDNfQU5URU5OQTM6CisJCXJldHVybiBCNDNfVFhIX1BIWV9BTlQzOworCWNhc2UgQjQzX0FOVEVOTkFfQVVUTzoKKwkJcmV0dXJuIEI0M19UWEhfUEhZX0FOVDAxQVVUTzsKKwl9CisJQjQzX1dBUk5fT04oMSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGI0M193cml0ZV9iZWFjb25fdGVtcGxhdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJCSAgICAgIHUxNiByYW1fb2Zmc2V0LAotCQkJCSAgICAgIHUxNiBzaG1fc2l6ZV9vZmZzZXQsIHU4IHJhdGUpCisJCQkJICAgICAgdTE2IHNobV9zaXplX29mZnNldCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgbGVuLCB2YXJpYWJsZV9sZW47CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9tZ210ICpiY247CiAJY29uc3QgdTggKmllOwogCWJvb2wgdGltX2ZvdW5kID0gMDsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1MTYgY3RsOworCWludCBhbnRlbm5hOwogCiAJYmNuID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKShkZXYtPndsLT5jdXJyZW50X2JlYWNvbi0+ZGF0YSk7CiAJbGVuID0gbWluKChzaXplX3QpIGRldi0+d2wtPmN1cnJlbnRfYmVhY29uLT5sZW4sCiAJCSAgMHgyMDAgLSBzaXplb2Yoc3RydWN0IGI0M19wbGNwX2hkcjYpKTsKKwlyYXRlID0gZGV2LT53bC0+YmVhY29uX3R4Y3RsLnR4X3JhdGUtPmh3X3ZhbHVlOwogCiAJYjQzX3dyaXRlX3RlbXBsYXRlX2NvbW1vbihkZXYsIChjb25zdCB1OCAqKWJjbiwKIAkJCQkgIGxlbiwgcmFtX29mZnNldCwgc2htX3NpemVfb2Zmc2V0LCByYXRlKTsKIAorCS8qIFdyaXRlIHRoZSBQSFkgVFggY29udHJvbCBwYXJhbWV0ZXJzLiAqLworCWFudGVubmEgPSBiNDNfYW50ZW5uYV9mcm9tX2llZWU4MDIxMShkZXYsCisJCQlkZXYtPndsLT5iZWFjb25fdHhjdGwuYW50ZW5uYV9zZWxfdHgpOworCWFudGVubmEgPSBiNDNfYW50ZW5uYV90b19waHljdGwoYW50ZW5uYSk7CisJY3RsID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9CRUFDUEhZQ1RMKTsKKwkvKiBXZSBjYW4ndCBzZW5kIGJlYWNvbnMgd2l0aCBzaG9ydCBwcmVhbWJsZS4gV291bGQgZ2V0IFBIWSBlcnJvcnMuICovCisJY3RsICY9IH5CNDNfVFhIX1BIWV9TSE9SVFBSTUJMOworCWN0bCAmPSB+QjQzX1RYSF9QSFlfQU5UOworCWN0bCAmPSB+QjQzX1RYSF9QSFlfRU5DOworCWN0bCB8PSBhbnRlbm5hOworCWlmIChiNDNfaXNfY2NrX3JhdGUocmF0ZSkpCisJCWN0bCB8PSBCNDNfVFhIX1BIWV9FTkNfQ0NLOworCWVsc2UKKwkJY3RsIHw9IEI0M19UWEhfUEhZX0VOQ19PRkRNOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX0JFQUNQSFlDVEwsIGN0bCk7CisKIAkvKiBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgVElNIGFuZCB0aGUgRFRJTV9wZXJpb2QgdmFsdWUKIAkgKiBhbmQgd3JpdGUgdGhlbSB0byBTSE0uICovCiAJaWUgPSBiY24tPnUuYmVhY29uLnZhcmlhYmxlOwpAQCAtMTIxNiwyMSArMTQyMiwyMyBAQAogCQliNDN3YXJuKGRldi0+d2wsICJEaWQgbm90IGZpbmQgYSB2YWxpZCBUSU0gSUUgaW4gIgogCQkJInRoZSBiZWFjb24gdGVtcGxhdGUgcGFja2V0LiBBUCBvciBJQlNTIG9wZXJhdGlvbiAiCiAJCQkibWF5IGJlIGJyb2tlbi5cbiIpOwotCX0KKwl9IGVsc2UKKwkJYjQzZGJnKGRldi0+d2wsICJVcGRhdGVkIGJlYWNvbiB0ZW1wbGF0ZVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193cml0ZV9wcm9iZV9yZXNwX3BsY3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgICAgIHUxNiBzaG1fb2Zmc2V0LCB1MTYgc2l6ZSwgdTggcmF0ZSkKKwkJCQkgICAgICB1MTYgc2htX29mZnNldCwgdTE2IHNpemUsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQogewogCXN0cnVjdCBiNDNfcGxjcF9oZHI0IHBsY3A7CiAJdTMyIHRtcDsKIAlfX2xlMTYgZHVyOwogCiAJcGxjcC5kYXRhID0gMDsKLQliNDNfZ2VuZXJhdGVfcGxjcF9oZHIoJnBsY3AsIHNpemUgKyBGQ1NfTEVOLCByYXRlKTsKKwliNDNfZ2VuZXJhdGVfcGxjcF9oZHIoJnBsY3AsIHNpemUgKyBGQ1NfTEVOLCByYXRlLT5od192YWx1ZSk7CiAJZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LT53bC0+aHcsCiAJCQkJCSAgICAgICBkZXYtPndsLT52aWYsIHNpemUsCi0JCQkJCSAgICAgICBCNDNfUkFURV9UT19CQVNFMTAwS0JQUyhyYXRlKSk7CisJCQkJCSAgICAgICByYXRlKTsKIAkvKiBXcml0ZSBQTENQIGluIHR3byBwYXJ0cyBhbmQgdGltaW5nIGZvciBwYWNrZXQgdHJhbnNmZXIgKi8KIAl0bXAgPSBsZTMyX3RvX2NwdShwbGNwLmRhdGEpOwogCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBzaG1fb2Zmc2V0LCB0bXAgJiAweEZGRkYpOwpAQCAtMTI0NSw3ICsxNDUzLDggQEAKICAqIDMpIFN0cmlwcGluZyBUSU0KICAqLwogc3RhdGljIGNvbnN0IHU4ICogYjQzX2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgIHUxNiAqZGVzdF9zaXplLCB1OCByYXRlKQorCQkJCQkgIHUxNiAqZGVzdF9zaXplLAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKIAljb25zdCB1OCAqc3JjX2RhdGE7CiAJdTggKmRlc3RfZGF0YTsKQEAgLTEyOTAsNyArMTQ5OSw3IEBACiAJCQkJCSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CiAJZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LT53bC0+aHcsCiAJCQkJCSAgICAgICBkZXYtPndsLT52aWYsICpkZXN0X3NpemUsCi0JCQkJCSAgICAgICBCNDNfUkFURV9UT19CQVNFMTAwS0JQUyhyYXRlKSk7CisJCQkJCSAgICAgICByYXRlKTsKIAloZHItPmR1cmF0aW9uX2lkID0gZHVyOwogCiAJcmV0dXJuIGRlc3RfZGF0YTsKQEAgLTEyOTgsNyArMTUwNyw4IEBACiAKIHN0YXRpYyB2b2lkIGI0M193cml0ZV9wcm9iZV9yZXNwX3RlbXBsYXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQkJICB1MTYgcmFtX29mZnNldCwKLQkJCQkJICB1MTYgc2htX3NpemVfb2Zmc2V0LCB1OCByYXRlKQorCQkJCQkgIHUxNiBzaG1fc2l6ZV9vZmZzZXQsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQogewogCWNvbnN0IHU4ICpwcm9iZV9yZXNwX2RhdGE7CiAJdTE2IHNpemU7CkBAIC0xMzExLDIwICsxNTIxLDg5IEBACiAJLyogTG9va3MgbGlrZSBQTENQIGhlYWRlcnMgcGx1cyBwYWNrZXQgdGltaW5ncyBhcmUgc3RvcmVkIGZvcgogCSAqIGFsbCBwb3NzaWJsZSBiYXNpYyByYXRlcwogCSAqLwotCWI0M193cml0ZV9wcm9iZV9yZXNwX3BsY3AoZGV2LCAweDMxQSwgc2l6ZSwgQjQzX0NDS19SQVRFXzFNQik7Ci0JYjQzX3dyaXRlX3Byb2JlX3Jlc3BfcGxjcChkZXYsIDB4MzJDLCBzaXplLCBCNDNfQ0NLX1JBVEVfMk1CKTsKLQliNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzM0UsIHNpemUsIEI0M19DQ0tfUkFURV81TUIpOwotCWI0M193cml0ZV9wcm9iZV9yZXNwX3BsY3AoZGV2LCAweDM1MCwgc2l6ZSwgQjQzX0NDS19SQVRFXzExTUIpOworCWI0M193cml0ZV9wcm9iZV9yZXNwX3BsY3AoZGV2LCAweDMxQSwgc2l6ZSwgJmI0M19iX3JhdGV0YWJsZVswXSk7CisJYjQzX3dyaXRlX3Byb2JlX3Jlc3BfcGxjcChkZXYsIDB4MzJDLCBzaXplLCAmYjQzX2JfcmF0ZXRhYmxlWzFdKTsKKwliNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzM0UsIHNpemUsICZiNDNfYl9yYXRldGFibGVbMl0pOworCWI0M193cml0ZV9wcm9iZV9yZXNwX3BsY3AoZGV2LCAweDM1MCwgc2l6ZSwgJmI0M19iX3JhdGV0YWJsZVszXSk7CiAKIAlzaXplID0gbWluKChzaXplX3QpIHNpemUsIDB4MjAwIC0gc2l6ZW9mKHN0cnVjdCBiNDNfcGxjcF9oZHI2KSk7CiAJYjQzX3dyaXRlX3RlbXBsYXRlX2NvbW1vbihkZXYsIHByb2JlX3Jlc3BfZGF0YSwKLQkJCQkgIHNpemUsIHJhbV9vZmZzZXQsIHNobV9zaXplX29mZnNldCwgcmF0ZSk7CisJCQkJICBzaXplLCByYW1fb2Zmc2V0LCBzaG1fc2l6ZV9vZmZzZXQsCisJCQkJICByYXRlLT5od192YWx1ZSk7CiAJa2ZyZWUocHJvYmVfcmVzcF9kYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgaGFuZGxlX2lycV9iZWFjb24oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKKwl1MzIgY21kLCBiZWFjb24wX3ZhbGlkLCBiZWFjb24xX3ZhbGlkOworCisJaWYgKCFiNDNfaXNfbW9kZSh3bCwgSUVFRTgwMjExX0lGX1RZUEVfQVApKQorCQlyZXR1cm47CisKKwkvKiBUaGlzIGlzIHRoZSBib3R0b20gaGFsZiBvZiB0aGUgYXN5bmNocm9ub3VzIGJlYWNvbiB1cGRhdGUuICovCisKKwkvKiBJZ25vcmUgaW50ZXJydXB0IGluIHRoZSBmdXR1cmUuICovCisJZGV2LT5pcnFfc2F2ZWRzdGF0ZSAmPSB+QjQzX0lSUV9CRUFDT047CisKKwljbWQgPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fTUFDQ01EKTsKKwliZWFjb24wX3ZhbGlkID0gKGNtZCAmIEI0M19NQUNDTURfQkVBQ09OMF9WQUxJRCk7CisJYmVhY29uMV92YWxpZCA9IChjbWQgJiBCNDNfTUFDQ01EX0JFQUNPTjFfVkFMSUQpOworCisJLyogU2NoZWR1bGUgaW50ZXJydXB0IG1hbnVhbGx5LCBpZiBidXN5LiAqLworCWlmIChiZWFjb24wX3ZhbGlkICYmIGJlYWNvbjFfdmFsaWQpIHsKKwkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX1JFQVNPTiwgQjQzX0lSUV9CRUFDT04pOworCQlkZXYtPmlycV9zYXZlZHN0YXRlIHw9IEI0M19JUlFfQkVBQ09OOworCQlyZXR1cm47CisJfQorCisJaWYgKCFiZWFjb24wX3ZhbGlkKSB7CisJCWlmICghd2wtPmJlYWNvbjBfdXBsb2FkZWQpIHsKKwkJCWI0M193cml0ZV9iZWFjb25fdGVtcGxhdGUoZGV2LCAweDY4LCAweDE4KTsKKwkJCWI0M193cml0ZV9wcm9iZV9yZXNwX3RlbXBsYXRlKGRldiwgMHgyNjgsIDB4NEEsCisJCQkJCQkgICAgICAmX19iNDNfcmF0ZXRhYmxlWzNdKTsKKwkJCXdsLT5iZWFjb24wX3VwbG9hZGVkID0gMTsKKwkJfQorCQljbWQgPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fTUFDQ01EKTsKKwkJY21kIHw9IEI0M19NQUNDTURfQkVBQ09OMF9WQUxJRDsKKwkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19NQUNDTUQsIGNtZCk7CisJfSBlbHNlIGlmICghYmVhY29uMV92YWxpZCkgeworCQlpZiAoIXdsLT5iZWFjb24xX3VwbG9hZGVkKSB7CisJCQliNDNfd3JpdGVfYmVhY29uX3RlbXBsYXRlKGRldiwgMHg0NjgsIDB4MUEpOworCQkJd2wtPmJlYWNvbjFfdXBsb2FkZWQgPSAxOworCQl9CisJCWNtZCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19NQUNDTUQpOworCQljbWQgfD0gQjQzX01BQ0NNRF9CRUFDT04xX1ZBTElEOworCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX01BQ0NNRCwgY21kKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGI0M19iZWFjb25fdXBkYXRlX3RyaWdnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGI0M193bCwKKwkJCQkJIGJlYWNvbl91cGRhdGVfdHJpZ2dlcik7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKGxpa2VseShkZXYgJiYgKGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9JTklUSUFMSVpFRCkpKSB7CisJCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJCS8qIHVwZGF0ZSBiZWFjb24gcmlnaHQgYXdheSBvciBkZWZlciB0byBpcnEgKi8KKwkJZGV2LT5pcnFfc2F2ZWRzdGF0ZSA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOworCQloYW5kbGVfaXJxX2JlYWNvbihkZXYpOworCQkvKiBUaGUgaGFuZGxlciBtaWdodCBoYXZlIHVwZGF0ZWQgdGhlIElSUSBtYXNrLiAqLworCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSywKKwkJCSAgICBkZXYtPmlycV9zYXZlZHN0YXRlKTsKKwkJbW1pb3diKCk7CisJCXNwaW5fdW5sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCiAvKiBBc3luY2hyb25vdXNseSB1cGRhdGUgdGhlIHBhY2tldCB0ZW1wbGF0ZXMgaW4gdGVtcGxhdGUgUkFNLgogICogTG9ja2luZzogUmVxdWlyZXMgd2wtPmlycV9sb2NrIHRvIGJlIGxvY2tlZC4gKi8KLXN0YXRpYyB2b2lkIGI0M191cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNfd2wgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uKQorc3RhdGljIHZvaWQgYjQzX3VwZGF0ZV90ZW1wbGF0ZXMoc3RydWN0IGI0M193bCAqd2wsIHN0cnVjdCBza19idWZmICpiZWFjb24sCisJCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqdHhjdGwpCiB7CiAJLyogVGhpcyBpcyB0aGUgdG9wIGhhbGYgb2YgdGhlIGFuc3luY2hyb25vdXMgYmVhY29uIHVwZGF0ZS4KIAkgKiBUaGUgYm90dG9tIGhhbGYgaXMgdGhlIGJlYWNvbiBJUlEuCkBAIC0xMzM1LDggKzE2MTQsMTAgQEAKIAlpZiAod2wtPmN1cnJlbnRfYmVhY29uKQogCQlkZXZfa2ZyZWVfc2tiX2FueSh3bC0+Y3VycmVudF9iZWFjb24pOwogCXdsLT5jdXJyZW50X2JlYWNvbiA9IGJlYWNvbjsKKwltZW1jcHkoJndsLT5iZWFjb25fdHhjdGwsIHR4Y3RsLCBzaXplb2Yod2wtPmJlYWNvbl90eGN0bCkpOwogCXdsLT5iZWFjb24wX3VwbG9hZGVkID0gMDsKIAl3bC0+YmVhY29uMV91cGxvYWRlZCA9IDA7CisJcXVldWVfd29yayh3bC0+aHctPndvcmtxdWV1ZSwgJndsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfc2V0X3NzaWQoc3RydWN0IGI0M193bGRldiAqZGV2LCBjb25zdCB1OCAqIHNzaWQsIHU4IHNzaWRfbGVuKQpAQCAtMTM2Miw0NCArMTY0MywxNCBAQAogewogCWI0M190aW1lX2xvY2soZGV2KTsKIAlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDMpIHsKLQkJYjQzX3dyaXRlMzIoZGV2LCAweDE4OCwgKGJlYWNvbl9pbnQgPDwgMTYpKTsKKwkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19UU0ZfQ0ZQX1JFUCwgKGJlYWNvbl9pbnQgPDwgMTYpKTsKKwkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19UU0ZfQ0ZQX1NUQVJULCAoYmVhY29uX2ludCA8PCAxMCkpOwogCX0gZWxzZSB7CiAJCWI0M193cml0ZTE2KGRldiwgMHg2MDYsIChiZWFjb25faW50ID4+IDYpKTsKIAkJYjQzX3dyaXRlMTYoZGV2LCAweDYxMCwgYmVhY29uX2ludCk7CiAJfQogCWI0M190aW1lX3VubG9jayhkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVfaXJxX2JlYWNvbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwotCXUzMiBjbWQ7Ci0KLQlpZiAoIWI0M19pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9BUCkpCi0JCXJldHVybjsKLQotCS8qIFRoaXMgaXMgdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSBhc3luY2hyb25vdXMgYmVhY29uIHVwZGF0ZS4gKi8KLQotCWNtZCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19NQUNDTUQpOwotCWlmICghKGNtZCAmIEI0M19NQUNDTURfQkVBQ09OMF9WQUxJRCkpIHsKLQkJaWYgKCF3bC0+YmVhY29uMF91cGxvYWRlZCkgewotCQkJYjQzX3dyaXRlX2JlYWNvbl90ZW1wbGF0ZShkZXYsIDB4NjgsIDB4MTgsCi0JCQkJCQkgIEI0M19DQ0tfUkFURV8xTUIpOwotCQkJYjQzX3dyaXRlX3Byb2JlX3Jlc3BfdGVtcGxhdGUoZGV2LCAweDI2OCwgMHg0QSwKLQkJCQkJCSAgICAgIEI0M19DQ0tfUkFURV8xMU1CKTsKLQkJCXdsLT5iZWFjb24wX3VwbG9hZGVkID0gMTsKLQkJfQotCQljbWQgfD0gQjQzX01BQ0NNRF9CRUFDT04wX1ZBTElEOwotCX0KLQlpZiAoIShjbWQgJiBCNDNfTUFDQ01EX0JFQUNPTjFfVkFMSUQpKSB7Ci0JCWlmICghd2wtPmJlYWNvbjFfdXBsb2FkZWQpIHsKLQkJCWI0M193cml0ZV9iZWFjb25fdGVtcGxhdGUoZGV2LCAweDQ2OCwgMHgxQSwKLQkJCQkJCSAgQjQzX0NDS19SQVRFXzFNQik7Ci0JCQl3bC0+YmVhY29uMV91cGxvYWRlZCA9IDE7Ci0JCX0KLQkJY21kIHw9IEI0M19NQUNDTURfQkVBQ09OMV9WQUxJRDsKLQl9Ci0JYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19NQUNDTUQsIGNtZCk7CisJYjQzZGJnKGRldi0+d2wsICJTZXQgYmVhY29uIGludGVydmFsIHRvICV1XG4iLCBiZWFjb25faW50KTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX2lycV91Y29kZV9kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC0xNDgxLDEyICsxNzMyLDE1IEBACiAJCWhhbmRsZV9pcnFfbm9pc2UoZGV2KTsKIAogCS8qIENoZWNrIHRoZSBETUEgcmVhc29uIHJlZ2lzdGVycyBmb3IgcmVjZWl2ZWQgZGF0YS4gKi8KLQlpZiAoZG1hX3JlYXNvblswXSAmIEI0M19ETUFJUlFfUlhfRE9ORSkKLQkJYjQzX2RtYV9yeChkZXYtPmRtYS5yeF9yaW5nMCk7Ci0JaWYgKGRtYV9yZWFzb25bM10gJiBCNDNfRE1BSVJRX1JYX0RPTkUpCi0JCWI0M19kbWFfcngoZGV2LT5kbWEucnhfcmluZzMpOworCWlmIChkbWFfcmVhc29uWzBdICYgQjQzX0RNQUlSUV9SWF9ET05FKSB7CisJCWlmIChiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQorCQkJYjQzX3Bpb19yeChkZXYtPnBpby5yeF9xdWV1ZSk7CisJCWVsc2UKKwkJCWI0M19kbWFfcngoZGV2LT5kbWEucnhfcmluZyk7CisJfQogCUI0M19XQVJOX09OKGRtYV9yZWFzb25bMV0gJiBCNDNfRE1BSVJRX1JYX0RPTkUpOwogCUI0M19XQVJOX09OKGRtYV9yZWFzb25bMl0gJiBCNDNfRE1BSVJRX1JYX0RPTkUpOworCUI0M19XQVJOX09OKGRtYV9yZWFzb25bM10gJiBCNDNfRE1BSVJRX1JYX0RPTkUpOwogCUI0M19XQVJOX09OKGRtYV9yZWFzb25bNF0gJiBCNDNfRE1BSVJRX1JYX0RPTkUpOwogCUI0M19XQVJOX09OKGRtYV9yZWFzb25bNV0gJiBCNDNfRE1BSVJRX1JYX0RPTkUpOwogCkBAIC0xODU5LDExICsyMTEzLDExIEBACiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIGVycm9yOwogCX0KLQliNDNkYmcoZGV2LT53bCwgIkxvYWRpbmcgZmlybXdhcmUgdmVyc2lvbiAldS4ldSAiCi0JICAgICAgICIoMjAlLjJpLSUuMmktJS4yaSAlLjJpOiUuMmk6JS4yaSlcbiIsCi0JICAgICAgIGZ3cmV2LCBmd3BhdGNoLAotCSAgICAgICAoZndkYXRlID4+IDEyKSAmIDB4RiwgKGZ3ZGF0ZSA+PiA4KSAmIDB4RiwgZndkYXRlICYgMHhGRiwKLQkgICAgICAgKGZ3dGltZSA+PiAxMSkgJiAweDFGLCAoZnd0aW1lID4+IDUpICYgMHgzRiwgZnd0aW1lICYgMHgxRik7CisJYjQzaW5mbyhkZXYtPndsLCAiTG9hZGluZyBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1ICIKKwkJIigyMCUuMmktJS4yaS0lLjJpICUuMmk6JS4yaTolLjJpKVxuIiwKKwkJZndyZXYsIGZ3cGF0Y2gsCisJCShmd2RhdGUgPj4gMTIpICYgMHhGLCAoZndkYXRlID4+IDgpICYgMHhGLCBmd2RhdGUgJiAweEZGLAorCQkoZnd0aW1lID4+IDExKSAmIDB4MUYsIChmd3RpbWUgPj4gNSkgJiAweDNGLCBmd3RpbWUgJiAweDFGKTsKIAogCWRldi0+ZncucmV2ID0gZndyZXY7CiAJZGV2LT5mdy5wYXRjaCA9IGZ3cGF0Y2g7CkBAIC0yMDQzLDExICsyMjk3LDEwIEBACiB9CiAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9FbmFibGVNYWMgKi8KLXZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCWRldi0+bWFjX3N1c3BlbmRlZC0tOwogCUI0M19XQVJOX09OKGRldi0+bWFjX3N1c3BlbmRlZCA8IDApOwotCUI0M19XQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJaWYgKGRldi0+bWFjX3N1c3BlbmRlZCA9PSAwKSB7CiAJCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fTUFDQ1RMLAogCQkJICAgIGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19NQUNDVEwpCkBAIC0yMDY3LDEzICsyMzIwLDEyIEBACiB9CiAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9TdXNwZW5kTUFDICovCi12b2lkIGI0M19tYWNfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCWludCBpOwogCXUzMiB0bXA7CiAKIAltaWdodF9zbGVlcCgpOwotCUI0M19XQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJQjQzX1dBUk5fT04oZGV2LT5tYWNfc3VzcGVuZGVkIDwgMCk7CiAKIAlpZiAoZGV2LT5tYWNfc3VzcGVuZGVkID09IDApIHsKQEAgLTIwOTEsNiArMjM0MywxMyBAQAogCQkJICAgICYgfkI0M19NQUNDVExfRU5BQkxFRCk7CiAJCS8qIGZvcmNlIHBjaSB0byBmbHVzaCB0aGUgd3JpdGUgKi8KIAkJYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX01BQ0NUTCk7CisJCWZvciAoaSA9IDM1OyBpOyBpLS0pIHsKKwkJCXRtcCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX1JFQVNPTik7CisJCQlpZiAodG1wICYgQjQzX0lSUV9NQUNfU1VTUEVOREVEKQorCQkJCWdvdG8gb3V0OworCQkJdWRlbGF5KDEwKTsKKwkJfQorCQkvKiBIbSwgaXQgc2VlbXMgdGhpcyB3aWxsIHRha2Ugc29tZSB0aW1lLiBVc2UgbXNsZWVwKCkuICovCiAJCWZvciAoaSA9IDQwOyBpOyBpLS0pIHsKIAkJCXRtcCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX1JFQVNPTik7CiAJCQlpZiAodG1wICYgQjQzX0lSUV9NQUNfU1VTUEVOREVEKQpAQCAtMjE5NiwzOCArMjQ1NSwyOCBAQAogCX0KIH0KIAorLyogU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFBIWSBUWCBDb250cm9sIFdvcmRzLiAqLworc3RhdGljIHZvaWQgYjQzX3NldF9waHl0eGN0bF9kZWZhdWx0cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2IGN0bCA9IDA7CisKKwljdGwgfD0gQjQzX1RYSF9QSFlfRU5DX0NDSzsKKwljdGwgfD0gQjQzX1RYSF9QSFlfQU5UMDFBVVRPOworCWN0bCB8PSBCNDNfVFhIX1BIWV9UWFBXUjsKKworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX0JFQUNQSFlDVEwsIGN0bCk7CisJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfQUNLQ1RTUEhZQ1RMLCBjdGwpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX1BSUEhZQ1RMLCBjdGwpOworfQorCiAvKiBTZXQgdGhlIFRYLUFudGVubmEgZm9yIG1hbmFnZW1lbnQgZnJhbWVzIHNlbnQgYnkgZmlybXdhcmUuICovCiBzdGF0aWMgdm9pZCBiNDNfbWdtdGZyYW1lX3R4YW50ZW5uYShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGludCBhbnRlbm5hKQogewotCXUxNiBhbnQgPSAwOworCXUxNiBhbnQ7CiAJdTE2IHRtcDsKIAotCXN3aXRjaCAoYW50ZW5uYSkgewotCWNhc2UgQjQzX0FOVEVOTkEwOgotCQlhbnQgfD0gQjQzX1RYSF9QSFlfQU5UMDsKLQkJYnJlYWs7Ci0JY2FzZSBCNDNfQU5URU5OQTE6Ci0JCWFudCB8PSBCNDNfVFhIX1BIWV9BTlQxOwotCQlicmVhazsKLQljYXNlIEI0M19BTlRFTk5BMjoKLQkJYW50IHw9IEI0M19UWEhfUEhZX0FOVDI7Ci0JCWJyZWFrOwotCWNhc2UgQjQzX0FOVEVOTkEzOgotCQlhbnQgfD0gQjQzX1RYSF9QSFlfQU5UMzsKLQkJYnJlYWs7Ci0JY2FzZSBCNDNfQU5URU5OQV9BVVRPOgotCQlhbnQgfD0gQjQzX1RYSF9QSFlfQU5UMDFBVVRPOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCNDNfV0FSTl9PTigxKTsKLQl9CisJYW50ID0gYjQzX2FudGVubmFfdG9fcGh5Y3RsKGFudGVubmEpOwogCi0JLyogRklYTUUgV2UgYWxzbyBuZWVkIHRvIHNldCB0aGUgb3RoZXIgZmxhZ3Mgb2YgdGhlIFBIWSBjb250cm9sIGZpZWxkIHNvbWV3aGVyZS4gKi8KLQotCS8qIEZvciBCZWFjb25zICovCi0JdG1wID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9CRUFDUEhZQ1RMKTsKLQl0bXAgPSAodG1wICYgfkI0M19UWEhfUEhZX0FOVCkgfCBhbnQ7Ci0JYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfQkVBQ1BIWUNUTCwgdG1wKTsKIAkvKiBGb3IgQUNLL0NUUyAqLwogCXRtcCA9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfQUNLQ1RTUEhZQ1RMKTsKIAl0bXAgPSAodG1wICYgfkI0M19UWEhfUEhZX0FOVCkgfCBhbnQ7CkBAIC0yNTU1LDEwICsyODA0LDEwIEBACiAJcmV0dXJuIChzaXplb2YodTE2KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGI0M19ybmdfZXhpdChzdHJ1Y3QgYjQzX3dsICp3bCwgYm9vbCBzdXNwZW5kZWQpCitzdGF0aWMgdm9pZCBiNDNfcm5nX2V4aXQoc3RydWN0IGI0M193bCAqd2wpCiB7CiAJaWYgKHdsLT5ybmdfaW5pdGlhbGl6ZWQpCi0JCV9faHdybmdfdW5yZWdpc3Rlcigmd2wtPnJuZywgc3VzcGVuZGVkKTsKKwkJaHdybmdfdW5yZWdpc3Rlcigmd2wtPnJuZyk7CiB9CiAKIHN0YXRpYyBpbnQgYjQzX3JuZ19pbml0KHN0cnVjdCBiNDNfd2wgKndsKQpAQCAtMjU4OSwyMiArMjgzOCwxOTkgQEAKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJaW50IGVyciA9IC1FTk9ERVY7CiAKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCAyICsgMiArIDYpKSB7CisJCS8qIFRvbyBzaG9ydCwgdGhpcyBjYW4ndCBiZSBhIHZhbGlkIGZyYW1lLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJQjQzX1dBUk5fT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7CisKIAlpZiAodW5saWtlbHkoIWRldikpCiAJCWdvdG8gb3V0OwogCWlmICh1bmxpa2VseShiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9TVEFSVEVEKSkKIAkJZ290byBvdXQ7Ci0JLyogRE1BLVRYIGlzIGRvbmUgd2l0aG91dCBhIGdsb2JhbCBsb2NrLiAqLwotCWVyciA9IGI0M19kbWFfdHgoZGV2LCBza2IsIGN0bCk7CisJLyogVFggaXMgZG9uZSB3aXRob3V0IGEgZ2xvYmFsIGxvY2suICovCisJaWYgKGI0M191c2luZ19waW9fdHJhbnNmZXJzKGRldikpCisJCWVyciA9IGI0M19waW9fdHgoZGV2LCBza2IsIGN0bCk7CisJZWxzZQorCQllcnIgPSBiNDNfZG1hX3R4KGRldiwgc2tiLCBjdGwpOwogb3V0OgogCWlmICh1bmxpa2VseShlcnIpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorLyogTG9ja2luZzogd2wtPmlycV9sb2NrICovCitzdGF0aWMgdm9pZCBiNDNfcW9zX3BhcmFtc191cGxvYWQoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnAsCisJCQkJICB1MTYgc2htX29mZnNldCkKK3sKKwl1MTYgcGFyYW1zW0I0M19OUl9RT1NQQVJBTVNdOworCWludCBjd19taW4sIGN3X21heCwgYWlmcywgYnNsb3RzLCB0bXA7CisJdW5zaWduZWQgaW50IGk7CisKKwljb25zdCB1MTYgYUNXbWluID0gMHgwMDAxOworCWNvbnN0IHUxNiBhQ1dtYXggPSAweDAzRkY7CisKKwkvKiBDYWxjdWxhdGUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcGFyYW1ldGVycywgaWYgbmVlZGVkLiAqLworCXN3aXRjaCAoc2htX29mZnNldCkgeworCWNhc2UgQjQzX1FPU19WT0lDRToKKwkJYWlmcyA9IChwLT5haWZzID09IC0xKSA/IDIgOiBwLT5haWZzOworCQljd19taW4gPSAocC0+Y3dfbWluID09IDApID8gKChhQ1dtaW4gKyAxKSAvIDQgLSAxKSA6IHAtPmN3X21pbjsKKwkJY3dfbWF4ID0gKHAtPmN3X21heCA9PSAwKSA/ICgoYUNXbWluICsgMSkgLyAyIC0gMSkgOiBwLT5jd19tYXg7CisJCWJyZWFrOworCWNhc2UgQjQzX1FPU19WSURFTzoKKwkJYWlmcyA9IChwLT5haWZzID09IC0xKSA/IDIgOiBwLT5haWZzOworCQljd19taW4gPSAocC0+Y3dfbWluID09IDApID8gKChhQ1dtaW4gKyAxKSAvIDIgLSAxKSA6IHAtPmN3X21pbjsKKwkJY3dfbWF4ID0gKHAtPmN3X21heCA9PSAwKSA/IGFDV21pbiA6IHAtPmN3X21heDsKKwkJYnJlYWs7CisJY2FzZSBCNDNfUU9TX0JFU1RFRkZPUlQ6CisJCWFpZnMgPSAocC0+YWlmcyA9PSAtMSkgPyAzIDogcC0+YWlmczsKKwkJY3dfbWluID0gKHAtPmN3X21pbiA9PSAwKSA/IGFDV21pbiA6IHAtPmN3X21pbjsKKwkJY3dfbWF4ID0gKHAtPmN3X21heCA9PSAwKSA/IGFDV21heCA6IHAtPmN3X21heDsKKwkJYnJlYWs7CisJY2FzZSBCNDNfUU9TX0JBQ0tHUk9VTkQ6CisJCWFpZnMgPSAocC0+YWlmcyA9PSAtMSkgPyA3IDogcC0+YWlmczsKKwkJY3dfbWluID0gKHAtPmN3X21pbiA9PSAwKSA/IGFDV21pbiA6IHAtPmN3X21pbjsKKwkJY3dfbWF4ID0gKHAtPmN3X21heCA9PSAwKSA/IGFDV21heCA6IHAtPmN3X21heDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQjQzX1dBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisJaWYgKGN3X21pbiA8PSAwKQorCQljd19taW4gPSBhQ1dtaW47CisJaWYgKGN3X21heCA8PSAwKQorCQljd19tYXggPSBhQ1dtaW47CisJYnNsb3RzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1JORykgJSBjd19taW47CisKKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOworCisJcGFyYW1zW0I0M19RT1NQQVJBTV9UWE9QXSA9IHAtPnR4b3AgKiAzMjsKKwlwYXJhbXNbQjQzX1FPU1BBUkFNX0NXTUlOXSA9IGN3X21pbjsKKwlwYXJhbXNbQjQzX1FPU1BBUkFNX0NXTUFYXSA9IGN3X21heDsKKwlwYXJhbXNbQjQzX1FPU1BBUkFNX0NXQ1VSXSA9IGN3X21pbjsKKwlwYXJhbXNbQjQzX1FPU1BBUkFNX0FJRlNdID0gYWlmczsKKwlwYXJhbXNbQjQzX1FPU1BBUkFNX0JTTE9UU10gPSBic2xvdHM7CisJcGFyYW1zW0I0M19RT1NQQVJBTV9SRUdHQVBdID0gYnNsb3RzICsgYWlmczsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhcmFtcyk7IGkrKykgeworCQlpZiAoaSA9PSBCNDNfUU9TUEFSQU1fU1RBVFVTKSB7CisJCQl0bXAgPSBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELAorCQkJCQkgICAgIHNobV9vZmZzZXQgKyAoaSAqIDIpKTsKKwkJCS8qIE1hcmsgdGhlIHBhcmFtZXRlcnMgYXMgdXBkYXRlZC4gKi8KKwkJCXRtcCB8PSAweDEwMDsKKwkJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAorCQkJCQlzaG1fb2Zmc2V0ICsgKGkgKiAyKSwKKwkJCQkJdG1wKTsKKwkJfSBlbHNlIHsKKwkJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAorCQkJCQlzaG1fb2Zmc2V0ICsgKGkgKiAyKSwKKwkJCQkJcGFyYW1zW2ldKTsKKwkJfQorCX0KK30KKworLyogVXBkYXRlIHRoZSBRT1MgcGFyYW1ldGVycyBpbiBoYXJkd2FyZS4gKi8KK3N0YXRpYyB2b2lkIGI0M19xb3NfdXBkYXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CisJc3RydWN0IGI0M19xb3NfcGFyYW1zICpwYXJhbXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIE1hcHBpbmcgb2YgbWFjODAyMTEgcXVldWVzIHRvIGI0MyBTSE0gb2Zmc2V0cy4gKi8KKwlzdGF0aWMgY29uc3QgdTE2IHFvc19zaG1fb2Zmc2V0c1tdID0geworCQlbMF0gPSBCNDNfUU9TX1ZPSUNFLAorCQlbMV0gPSBCNDNfUU9TX1ZJREVPLAorCQlbMl0gPSBCNDNfUU9TX0JFU1RFRkZPUlQsCisJCVszXSA9IEI0M19RT1NfQkFDS0dST1VORCwKKwl9OworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHFvc19zaG1fb2Zmc2V0cykgIT0gQVJSQVlfU0laRSh3bC0+cW9zX3BhcmFtcykpOworCisJYjQzX21hY19zdXNwZW5kKGRldik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2wtPnFvc19wYXJhbXMpOyBpKyspIHsKKwkJcGFyYW1zID0gJih3bC0+cW9zX3BhcmFtc1tpXSk7CisJCWlmIChwYXJhbXMtPm5lZWRfaHdfdXBkYXRlKSB7CisJCQliNDNfcW9zX3BhcmFtc191cGxvYWQoZGV2LCAmKHBhcmFtcy0+cCksCisJCQkJCSAgICAgIHFvc19zaG1fb2Zmc2V0c1tpXSk7CisJCQlwYXJhbXMtPm5lZWRfaHdfdXBkYXRlID0gMDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCWI0M19tYWNfZW5hYmxlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19xb3NfY2xlYXIoc3RydWN0IGI0M193bCAqd2wpCit7CisJc3RydWN0IGI0M19xb3NfcGFyYW1zICpwYXJhbXM7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bC0+cW9zX3BhcmFtcyk7IGkrKykgeworCQlwYXJhbXMgPSAmKHdsLT5xb3NfcGFyYW1zW2ldKTsKKworCQltZW1zZXQoJihwYXJhbXMtPnApLCAwLCBzaXplb2YocGFyYW1zLT5wKSk7CisJCXBhcmFtcy0+cC5haWZzID0gLTE7CisJCXBhcmFtcy0+bmVlZF9od191cGRhdGUgPSAxOworCX0KK30KKworLyogSW5pdGlhbGl6ZSB0aGUgY29yZSdzIFFPUyBjYXBhYmlsaXRpZXMgKi8KK3N0YXRpYyB2b2lkIGI0M19xb3NfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOworCXVuc2lnbmVkIGludCBpOworCisJLyogVXBsb2FkIHRoZSBjdXJyZW50IFFPUyBwYXJhbWV0ZXJzLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdsLT5xb3NfcGFyYW1zKTsgaSsrKQorCQl3bC0+cW9zX3BhcmFtc1tpXS5uZWVkX2h3X3VwZGF0ZSA9IDE7CisJYjQzX3Fvc191cGRhdGUoZGV2KTsKKworCS8qIEVuYWJsZSBRT1Mgc3VwcG9ydC4gKi8KKwliNDNfaGZfd3JpdGUoZGV2LCBiNDNfaGZfcmVhZChkZXYpIHwgQjQzX0hGX0VEQ0YpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fSUZTQ1RMLAorCQkgICAgYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX0lGU0NUTCkKKwkJICAgIHwgQjQzX01NSU9fSUZTQ1RMX1VTRV9FRENGKTsKK30KKworc3RhdGljIHZvaWQgYjQzX3Fvc191cGRhdGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGI0M193bCwgcW9zX3VwZGF0ZV93b3JrKTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAobGlrZWx5KGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkpCisJCWI0M19xb3NfdXBkYXRlKGRldik7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCiBzdGF0aWMgaW50IGI0M19vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICBpbnQgcXVldWUsCisJCQkgIGludCBfcXVldWUsCiAJCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7CisJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHF1ZXVlID0gKHVuc2lnbmVkIGludClfcXVldWU7CisJc3RydWN0IGI0M19xb3NfcGFyYW1zICpwOworCisJaWYgKHF1ZXVlID49IEFSUkFZX1NJWkUod2wtPnFvc19wYXJhbXMpKSB7CisJCS8qIFF1ZXVlIG5vdCBhdmFpbGFibGUgb3IgZG9uJ3Qgc3VwcG9ydCBzZXR0aW5nCisJCSAqIHBhcmFtcyBvbiB0aGlzIHF1ZXVlLiBSZXR1cm4gc3VjY2VzcyB0byBub3QKKwkJICogY29uZnVzZSBtYWM4MDIxMS4gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCXAgPSAmKHdsLT5xb3NfcGFyYW1zW3F1ZXVlXSk7CisJbWVtY3B5KCYocC0+cCksIHBhcmFtcywgc2l6ZW9mKHAtPnApKTsKKwlwLT5uZWVkX2h3X3VwZGF0ZSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CisKKwlxdWV1ZV93b3JrKGh3LT53b3JrcXVldWUsICZ3bC0+cW9zX3VwZGF0ZV93b3JrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNjIwLDcgKzMwNDYsMTAgQEAKIAkJZ290byBvdXQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCWlmIChsaWtlbHkoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQpKSB7Ci0JCWI0M19kbWFfZ2V0X3R4X3N0YXRzKGRldiwgc3RhdHMpOworCQlpZiAoYjQzX3VzaW5nX3Bpb190cmFuc2ZlcnMoZGV2KSkKKwkJCWI0M19waW9fZ2V0X3R4X3N0YXRzKGRldiwgc3RhdHMpOworCQllbHNlCisJCQliNDNfZG1hX2dldF90eF9zdGF0cyhkZXYsIHN0YXRzKTsKIAkJZXJyID0gMDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CkBAIC0yNjQxLDQ1ICszMDcwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnBoeW1vZGVfdG9fc3RyaW5nKHVuc2lnbmVkIGludCBwaHltb2RlKQotewotCXN3aXRjaCAocGh5bW9kZSkgewotCWNhc2UgQjQzX1BIWU1PREVfQToKLQkJcmV0dXJuICJBIjsKLQljYXNlIEI0M19QSFlNT0RFX0I6Ci0JCXJldHVybiAiQiI7Ci0JY2FzZSBCNDNfUEhZTU9ERV9HOgotCQlyZXR1cm4gIkciOwotCWRlZmF1bHQ6Ci0JCUI0M19XQVJOX09OKDEpOwotCX0KLQlyZXR1cm4gIiI7Ci19Ci0KLXN0YXRpYyBpbnQgZmluZF93bGRldl9mb3JfcGh5bW9kZShzdHJ1Y3QgYjQzX3dsICp3bCwKLQkJCQkgIHVuc2lnbmVkIGludCBwaHltb2RlLAotCQkJCSAgc3RydWN0IGI0M193bGRldiAqKmRldiwgYm9vbCAqIGdtb2RlKQotewotCXN0cnVjdCBiNDNfd2xkZXYgKmQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGQsICZ3bC0+ZGV2bGlzdCwgbGlzdCkgewotCQlpZiAoZC0+cGh5LnBvc3NpYmxlX3BoeW1vZGVzICYgcGh5bW9kZSkgewotCQkJLyogT2ssIHRoaXMgZGV2aWNlIHN1cHBvcnRzIHRoZSBQSFktbW9kZS4KLQkJCSAqIE5vdyBmaWd1cmUgb3V0IGhvdyB0aGUgZ21vZGUgYml0IGhhcyB0byBiZQotCQkJICogc2V0IHRvIHN1cHBvcnQgaXQuICovCi0JCQlpZiAocGh5bW9kZSA9PSBCNDNfUEhZTU9ERV9BKQotCQkJCSpnbW9kZSA9IDA7Ci0JCQllbHNlCi0JCQkJKmdtb2RlID0gMTsKLQkJCSpkZXYgPSBkOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXJldHVybiAtRVNSQ0g7Ci19Ci0KIHN0YXRpYyB2b2lkIGI0M19wdXRfcGh5X2ludG9fcmVzZXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBzc2JfZGV2aWNlICpzZGV2ID0gZGV2LT5kZXY7CkBAIC0yNjk5LDI4ICszMDg5LDY0IEBACiAJbXNsZWVwKDEpOwogfQogCi0vKiBFeHBlY3RzIHdsLT5tdXRleCBsb2NrZWQgKi8KLXN0YXRpYyBpbnQgYjQzX3N3aXRjaF9waHltb2RlKHN0cnVjdCBiNDNfd2wgKndsLCB1bnNpZ25lZCBpbnQgbmV3X21vZGUpCitzdGF0aWMgY29uc3QgY2hhciAqIGJhbmRfdG9fc3RyaW5nKGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKLQlzdHJ1Y3QgYjQzX3dsZGV2ICp1cF9kZXY7CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQlyZXR1cm4gIjUiOworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJcmV0dXJuICIyLjQiOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlCNDNfV0FSTl9PTigxKTsKKwlyZXR1cm4gIiI7Cit9CisKKy8qIEV4cGVjdHMgd2wtPm11dGV4IGxvY2tlZCAqLworc3RhdGljIGludCBiNDNfc3dpdGNoX2JhbmQoc3RydWN0IGI0M193bCAqd2wsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgYjQzX3dsZGV2ICp1cF9kZXYgPSBOVUxMOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRvd25fZGV2OworCXN0cnVjdCBiNDNfd2xkZXYgKmQ7CiAJaW50IGVycjsKLQlib29sIGdtb2RlID0gMDsKKwlib29sIGdtb2RlOwogCWludCBwcmV2X3N0YXR1czsKIAotCWVyciA9IGZpbmRfd2xkZXZfZm9yX3BoeW1vZGUod2wsIG5ld19tb2RlLCAmdXBfZGV2LCAmZ21vZGUpOwotCWlmIChlcnIpIHsKLQkJYjQzZXJyKHdsLCAiQ291bGQgbm90IGZpbmQgYSBkZXZpY2UgZm9yICVzLVBIWSBtb2RlXG4iLAotCQkgICAgICAgcGh5bW9kZV90b19zdHJpbmcobmV3X21vZGUpKTsKLQkJcmV0dXJuIGVycjsKKwkvKiBGaW5kIGEgZGV2aWNlIGFuZCBQSFkgd2hpY2ggc3VwcG9ydHMgdGhlIGJhbmQuICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmd2wtPmRldmxpc3QsIGxpc3QpIHsKKwkJc3dpdGNoIChjaGFuLT5iYW5kKSB7CisJCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJCWlmIChkLT5waHkuc3VwcG9ydHNfNWdoeikgeworCQkJCXVwX2RldiA9IGQ7CisJCQkJZ21vZGUgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJCWlmIChkLT5waHkuc3VwcG9ydHNfMmdoeikgeworCQkJCXVwX2RldiA9IGQ7CisJCQkJZ21vZGUgPSAxOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICh1cF9kZXYpCisJCQlicmVhazsKKwl9CisJaWYgKCF1cF9kZXYpIHsKKwkJYjQzZXJyKHdsLCAiQ291bGQgbm90IGZpbmQgYSBkZXZpY2UgZm9yICVzLUdIeiBiYW5kIG9wZXJhdGlvblxuIiwKKwkJICAgICAgIGJhbmRfdG9fc3RyaW5nKGNoYW4tPmJhbmQpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICgodXBfZGV2ID09IHdsLT5jdXJyZW50X2RldikgJiYKIAkgICAgKCEhd2wtPmN1cnJlbnRfZGV2LT5waHkuZ21vZGUgPT0gISFnbW9kZSkpIHsKIAkJLyogVGhpcyBkZXZpY2UgaXMgYWxyZWFkeSBydW5uaW5nLiAqLwogCQlyZXR1cm4gMDsKIAl9Ci0JYjQzZGJnKHdsLCAiUmVjb25maWd1cmluZyBQSFltb2RlIHRvICVzLVBIWVxuIiwKLQkgICAgICAgcGh5bW9kZV90b19zdHJpbmcobmV3X21vZGUpKTsKKwliNDNkYmcod2wsICJTd2l0Y2hpbmcgdG8gJXMtR0h6IGJhbmRcbiIsCisJICAgICAgIGJhbmRfdG9fc3RyaW5nKGNoYW4tPmJhbmQpKTsKIAlkb3duX2RldiA9IHdsLT5jdXJyZW50X2RldjsKIAogCXByZXZfc3RhdHVzID0gYjQzX3N0YXR1cyhkb3duX2Rldik7CkBAIC0yNzQyLDggKzMxNjgsOCBAQAogCQllcnIgPSBiNDNfd2lyZWxlc3NfY29yZV9pbml0KHVwX2Rldik7CiAJCWlmIChlcnIpIHsKIAkJCWI0M2Vycih3bCwgIkZhdGFsOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBkZXZpY2UgZm9yICIKLQkJCSAgICAgICAibmV3bHkgc2VsZWN0ZWQgJXMtUEhZIG1vZGVcbiIsCi0JCQkgICAgICAgcGh5bW9kZV90b19zdHJpbmcobmV3X21vZGUpKTsKKwkJCSAgICAgICAic2VsZWN0ZWQgJXMtR0h6IGJhbmRcbiIsCisJCQkgICAgICAgYmFuZF90b19zdHJpbmcoY2hhbi0+YmFuZCkpOwogCQkJZ290byBpbml0X2ZhaWx1cmU7CiAJCX0KIAl9CkBAIC0yNzUxLDggKzMxNzcsOCBAQAogCQllcnIgPSBiNDNfd2lyZWxlc3NfY29yZV9zdGFydCh1cF9kZXYpOwogCQlpZiAoZXJyKSB7CiAJCQliNDNlcnIod2wsICJGYXRhbDogQ291bHQgbm90IHN0YXJ0IGRldmljZSBmb3IgIgotCQkJICAgICAgICJuZXdseSBzZWxlY3RlZCAlcy1QSFkgbW9kZVxuIiwKLQkJCSAgICAgICBwaHltb2RlX3RvX3N0cmluZyhuZXdfbW9kZSkpOworCQkJICAgICAgICJzZWxlY3RlZCAlcy1HSHogYmFuZFxuIiwKKwkJCSAgICAgICBiYW5kX3RvX3N0cmluZyhjaGFuLT5iYW5kKSk7CiAJCQliNDNfd2lyZWxlc3NfY29yZV9leGl0KHVwX2Rldik7CiAJCQlnb3RvIGluaXRfZmFpbHVyZTsKIAkJfQpAQCAtMjc2Miw4NiArMzE4OCwyNiBAQAogCXdsLT5jdXJyZW50X2RldiA9IHVwX2RldjsKIAogCXJldHVybiAwOwotICAgICAgaW5pdF9mYWlsdXJlOgoraW5pdF9mYWlsdXJlOgogCS8qIFdob29wcywgZmFpbGVkIHRvIGluaXQgdGhlIG5ldyBjb3JlLiBObyBjb3JlIGlzIG9wZXJhdGluZyBub3cuICovCiAJd2wtPmN1cnJlbnRfZGV2ID0gTlVMTDsKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBDaGVjayBpZiB0aGUgdXNlIG9mIHRoZSBhbnRlbm5hIHRoYXQgaWVlZTgwMjExIHRvbGQgdXMgdG8KLSAqIHVzZSBpcyBwb3NzaWJsZS4gVGhpcyB3aWxsIGZhbGwgYmFjayB0byBERUZBVUxULgotICogImFudGVubmFfbnIiIGlzIHRoZSBhbnRlbm5hIGlkZW50aWZpZXIgd2UgZ290IGZyb20gaWVlZTgwMjExLiAqLwotdTggYjQzX2llZWU4MDIxMV9hbnRlbm5hX3Nhbml0aXplKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgIHU4IGFudGVubmFfbnIpCi17Ci0JdTggYW50ZW5uYV9tYXNrOwotCi0JaWYgKGFudGVubmFfbnIgPT0gMCkgewotCQkvKiBaZXJvIG1lYW5zICJ1c2UgZGVmYXVsdCBhbnRlbm5hIi4gVGhhdCdzIGFsd2F5cyBPSy4gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogR2V0IHRoZSBtYXNrIG9mIGF2YWlsYWJsZSBhbnRlbm5hcy4gKi8KLQlpZiAoZGV2LT5waHkuZ21vZGUpCi0JCWFudGVubmFfbWFzayA9IGRldi0+ZGV2LT5idXMtPnNwcm9tLmFudF9hdmFpbGFibGVfYmc7Ci0JZWxzZQotCQlhbnRlbm5hX21hc2sgPSBkZXYtPmRldi0+YnVzLT5zcHJvbS5hbnRfYXZhaWxhYmxlX2E7Ci0KLQlpZiAoIShhbnRlbm5hX21hc2sgJiAoMSA8PCAoYW50ZW5uYV9uciAtIDEpKSkpIHsKLQkJLyogVGhpcyBhbnRlbm5hIGlzIG5vdCBhdmFpbGFibGUuIEZhbGwgYmFjayB0byBkZWZhdWx0LiAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gYW50ZW5uYV9ucjsKLX0KLQotc3RhdGljIGludCBiNDNfYW50ZW5uYV9mcm9tX2llZWU4MDIxMShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGFudGVubmEpCi17Ci0JYW50ZW5uYSA9IGI0M19pZWVlODAyMTFfYW50ZW5uYV9zYW5pdGl6ZShkZXYsIGFudGVubmEpOwotCXN3aXRjaCAoYW50ZW5uYSkgewotCWNhc2UgMDoJCS8qIGRlZmF1bHQvZGl2ZXJzaXR5ICovCi0JCXJldHVybiBCNDNfQU5URU5OQV9ERUZBVUxUOwotCWNhc2UgMToJCS8qIEFudGVubmEgMCAqLwotCQlyZXR1cm4gQjQzX0FOVEVOTkEwOwotCWNhc2UgMjoJCS8qIEFudGVubmEgMSAqLwotCQlyZXR1cm4gQjQzX0FOVEVOTkExOwotCWNhc2UgMzoJCS8qIEFudGVubmEgMiAqLwotCQlyZXR1cm4gQjQzX0FOVEVOTkEyOwotCWNhc2UgNDoJCS8qIEFudGVubmEgMyAqLwotCQlyZXR1cm4gQjQzX0FOVEVOTkEzOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBCNDNfQU5URU5OQV9ERUZBVUxUOwotCX0KLX0KLQogc3RhdGljIGludCBiNDNfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG5ld19waHltb2RlID0gMHhGRkZGOwogCWludCBhbnRlbm5hOwogCWludCBlcnIgPSAwOwogCXUzMiBzYXZlZGlycXM7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCi0JLyogU3dpdGNoIHRoZSBQSFkgbW9kZSAoaWYgbmVjZXNzYXJ5KS4gKi8KLQlzd2l0Y2ggKGNvbmYtPnBoeW1vZGUpIHsKLQljYXNlIE1PREVfSUVFRTgwMjExQToKLQkJbmV3X3BoeW1vZGUgPSBCNDNfUEhZTU9ERV9BOwotCQlicmVhazsKLQljYXNlIE1PREVfSUVFRTgwMjExQjoKLQkJbmV3X3BoeW1vZGUgPSBCNDNfUEhZTU9ERV9COwotCQlicmVhazsKLQljYXNlIE1PREVfSUVFRTgwMjExRzoKLQkJbmV3X3BoeW1vZGUgPSBCNDNfUEhZTU9ERV9HOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCNDNfV0FSTl9PTigxKTsKLQl9Ci0JZXJyID0gYjQzX3N3aXRjaF9waHltb2RlKHdsLCBuZXdfcGh5bW9kZSk7CisJLyogU3dpdGNoIHRoZSBiYW5kIChpZiBuZWNlc3NhcnkpLiBUaGlzIG1pZ2h0IGNoYW5nZSB0aGUgYWN0aXZlIGNvcmUuICovCisJZXJyID0gYjQzX3N3aXRjaF9iYW5kKHdsLCBjb25mLT5jaGFubmVsKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2tfbXV0ZXg7CiAJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwpAQCAtMjg2MSw4ICszMjI3LDggQEAKIAogCS8qIFN3aXRjaCB0byB0aGUgcmVxdWVzdGVkIGNoYW5uZWwuCiAJICogVGhlIGZpcm13YXJlIHRha2VzIGNhcmUgb2YgcmFjZXMgd2l0aCB0aGUgVFggaGFuZGxlci4gKi8KLQlpZiAoY29uZi0+Y2hhbm5lbF92YWwgIT0gcGh5LT5jaGFubmVsKQotCQliNDNfcmFkaW9fc2VsZWN0Y2hhbm5lbChkZXYsIGNvbmYtPmNoYW5uZWxfdmFsLCAwKTsKKwlpZiAoY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUgIT0gcGh5LT5jaGFubmVsKQorCQliNDNfcmFkaW9fc2VsZWN0Y2hhbm5lbChkZXYsIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlLCAwKTsKIAogCS8qIEVuYWJsZS9EaXNhYmxlIFNob3J0U2xvdCB0aW1pbmcuICovCiAJaWYgKCghIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSkpICE9CkBAIC0zMDc1LDggKzM0NDEsMTAgQEAKIAkJaWYgKGI0M19pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9BUCkpIHsKIAkJCUI0M19XQVJOX09OKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVApOwogCQkJYjQzX3NldF9zc2lkKGRldiwgY29uZi0+c3NpZCwgY29uZi0+c3NpZF9sZW4pOwotCQkJaWYgKGNvbmYtPmJlYWNvbikKLQkJCQliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCwgY29uZi0+YmVhY29uKTsKKwkJCWlmIChjb25mLT5iZWFjb24pIHsKKwkJCQliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCwgY29uZi0+YmVhY29uLAorCQkJCQkJICAgICBjb25mLT5iZWFjb25fY29udHJvbCk7CisJCQl9CiAJCX0KIAkJYjQzX3dyaXRlX21hY19ic3NpZF90ZW1wbGF0ZXMoZGV2KTsKIAl9CkBAIC0zMTA2LDYgKzM0NzQsNyBAQAogCiAJYjQzX3NldF9zdGF0dXMoZGV2LCBCNDNfU1RBVF9JTklUSUFMSVpFRCk7CiAKKwliNDNfcGlvX3N0b3AoZGV2KTsKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAJLyogTXVzdCB1bmxvY2sgYXMgaXQgd291bGQgb3RoZXJ3aXNlIGRlYWRsb2NrLiBObyByYWNlcyBoZXJlLgogCSAqIENhbmNlbCB0aGUgcG9zc2libHkgcnVubmluZyBzZWxmLXJlYXJtaW5nIHBlcmlvZGljIHdvcmsuICovCkBAIC0zNDAwLDYgKzM3NjksNDEgQEAKIAkJCWxvbmdfcmV0cnkpOwogfQogCitzdGF0aWMgdm9pZCBiNDNfc2V0X3N5bnRoX3B1X2RlbGF5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCBpZGxlKQoreworCXUxNiBwdV9kZWxheTsKKworCS8qIFRoZSB0aW1lIHZhbHVlIGlzIGluIG1pY3Jvc2Vjb25kcy4gKi8KKwlpZiAoZGV2LT5waHkudHlwZSA9PSBCNDNfUEhZVFlQRV9BKQorCQlwdV9kZWxheSA9IDM3MDA7CisJZWxzZQorCQlwdV9kZWxheSA9IDEwNTA7CisJaWYgKGI0M19pc19tb2RlKGRldi0+d2wsIElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHx8IGlkbGUpCisJCXB1X2RlbGF5ID0gNTAwOworCWlmICgoZGV2LT5waHkucmFkaW9fdmVyID09IDB4MjA1MCkgJiYgKGRldi0+cGh5LnJhZGlvX3JldiA9PSA4KSkKKwkJcHVfZGVsYXkgPSBtYXgocHVfZGVsYXksICh1MTYpMjQwMCk7CisKKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9TUFVXS1VQLCBwdV9kZWxheSk7Cit9CisKKy8qIFNldCB0aGUgVFNGIENGUCBwcmUtVGFyZ2V0QmVhY29uVHJhbnNtaXNzaW9uVGltZS4gKi8KK3N0YXRpYyB2b2lkIGI0M19zZXRfcHJldGJ0dChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2IHByZXRidHQ7CisKKwkvKiBUaGUgdGltZSB2YWx1ZSBpcyBpbiBtaWNyb3NlY29uZHMuICovCisJaWYgKGI0M19pc19tb2RlKGRldi0+d2wsIElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpKSB7CisJCXByZXRidHQgPSAyOworCX0gZWxzZSB7CisJCWlmIChkZXYtPnBoeS50eXBlID09IEI0M19QSFlUWVBFX0EpCisJCQlwcmV0YnR0ID0gMTIwOworCQllbHNlCisJCQlwcmV0YnR0ID0gMjUwOworCX0KKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9QUkVUQlRULCBwcmV0YnR0KTsKKwliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1RTRl9DRlBfUFJFVEJUVCwgcHJldGJ0dCk7Cit9CisKIC8qIFNodXRkb3duIGEgd2lyZWxlc3MgY29yZSAqLwogLyogTG9ja2luZzogd2wtPm11dGV4ICovCiBzdGF0aWMgdm9pZCBiNDNfd2lyZWxlc3NfY29yZV9leGl0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTM0MjAsOSArMzgyNCwxMCBAQAogCiAJaWYgKCFkZXYtPnN1c3BlbmRfaW5fcHJvZ3Jlc3MpIHsKIAkJYjQzX2xlZHNfZXhpdChkZXYpOwotCQliNDNfcm5nX2V4aXQoZGV2LT53bCwgZmFsc2UpOworCQliNDNfcm5nX2V4aXQoZGV2LT53bCk7CiAJfQogCWI0M19kbWFfZnJlZShkZXYpOworCWI0M19waW9fZnJlZShkZXYpOwogCWI0M19jaGlwX2V4aXQoZGV2KTsKIAliNDNfcmFkaW9fdHVybl9vZmYoZGV2LCAxKTsKIAliNDNfc3dpdGNoX2FuYWxvZyhkZXYsIDApOwpAQCAtMzUxMCw2ICszOTE1LDcgQEAKIAliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9QUk1BWFRJTUUsIDEpOwogCiAJYjQzX3JhdGVfbWVtb3J5X2luaXQoZGV2KTsKKwliNDNfc2V0X3BoeXR4Y3RsX2RlZmF1bHRzKGRldik7CiAKIAkvKiBNaW5pbXVtIENvbnRlbnRpb24gV2luZG93ICovCiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CKSB7CkBAIC0zNTIwLDE4ICszOTI2LDE3IEBACiAJLyogTWF4aW11bSBDb250ZW50aW9uIFdpbmRvdyAqLwogCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0NSQVRDSCwgQjQzX1NITV9TQ19NQVhDT05ULCAweDNGRik7CiAKLQllcnIgPSBiNDNfZG1hX2luaXQoZGV2KTsKKwlpZiAoKGRldi0+ZGV2LT5idXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfUENNQ0lBKSB8fCBCNDNfRk9SQ0VfUElPKSB7CisJCWRldi0+X191c2luZ19waW9fdHJhbnNmZXJzID0gMTsKKwkJZXJyID0gYjQzX3Bpb19pbml0KGRldik7CisJfSBlbHNlIHsKKwkJZGV2LT5fX3VzaW5nX3Bpb190cmFuc2ZlcnMgPSAwOworCQllcnIgPSBiNDNfZG1hX2luaXQoZGV2KTsKKwl9CiAJaWYgKGVycikKIAkJZ290byBlcnJfY2hpcF9leGl0OwogCWI0M19xb3NfaW5pdChkZXYpOwotCi0vL0ZJWE1FCi0jaWYgMQotCWI0M193cml0ZTE2KGRldiwgMHgwNjEyLCAweDAwNTApOwotCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAweDA0MTYsIDB4MDA1MCk7Ci0JYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIDB4MDQxNCwgMHgwMUY0KTsKLSNlbmRpZgotCisJYjQzX3NldF9zeW50aF9wdV9kZWxheShkZXYsIDEpOwogCWI0M19ibHVldG9vdGhfY29leHRfZW5hYmxlKGRldik7CiAKIAlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsJLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLwpAQCAtMzU5MSw2ICszOTk2LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAliNDNfYWRqdXN0X29wbW9kZShkZXYpOworCWI0M19zZXRfcHJldGJ0dChkZXYpOworCWI0M19zZXRfc3ludGhfcHVfZGVsYXkoZGV2LCAwKTsKIAliNDNfdXBsb2FkX2NhcmRfbWFjYWRkcmVzcyhkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCkBAIC0zNjQyLDYgKzQwNDksNyBAQAogCW1lbXNldCh3bC0+bWFjX2FkZHIsIDAsIEVUSF9BTEVOKTsKIAl3bC0+ZmlsdGVyX2ZsYWdzID0gMDsKIAl3bC0+cmFkaW90YXBfZW5hYmxlZCA9IDA7CisJYjQzX3Fvc19jbGVhcih3bCk7CiAKIAkvKiBGaXJzdCByZWdpc3RlciBSRmtpbGwuCiAJICogTEVEcyB0aGF0IGFyZSByZWdpc3RlcmVkIGxhdGVyIGRlcGVuZCBvbiBpdC4gKi8KQEAgLTM2ODMsNiArNDA5MSw4IEBACiAJc3RydWN0IGI0M193bGRldiAqZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCiAJYjQzX3Jma2lsbF9leGl0KGRldik7CisJY2FuY2VsX3dvcmtfc3luYygmKHdsLT5xb3NfdXBkYXRlX3dvcmspKTsKKwljYW5jZWxfd29ya19zeW5jKCYod2wtPmJlYWNvbl91cGRhdGVfdHJpZ2dlcikpOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAlpZiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQpCkBAIC0zNzE2LDE2ICs0MTI2LDE3IEBACiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBza19idWZmICpiZWFjb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgdHhjdGw7CiAKIAkvKiBXZSBjb3VsZCBtb2RpZnkgdGhlIGV4aXN0aW5nIGJlYWNvbiBhbmQgc2V0IHRoZSBhaWQgYml0IGluCiAJICogdGhlIFRJTSBmaWVsZCwgYnV0IHRoYXQgd291bGQgcHJvYmFibHkgcmVxdWlyZSByZXNpemluZyBhbmQKIAkgKiBtb3Zpbmcgb2YgZGF0YSB3aXRoaW4gdGhlIGJlYWNvbiB0ZW1wbGF0ZS4KIAkgKiBTaW1wbHkgcmVxdWVzdCBhIG5ldyBiZWFjb24gYW5kIGxldCBtYWM4MDIxMSBkbyB0aGUgaGFyZCB3b3JrLiAqLwotCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB3bC0+dmlmLCBOVUxMKTsKKwliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgd2wtPnZpZiwgJnR4Y3RsKTsKIAlpZiAodW5saWtlbHkoIWJlYWNvbikpCiAJCXJldHVybiAtRU5PTUVNOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCwgYmVhY29uKTsKKwliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCwgYmVhY29uLCAmdHhjdGwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0zNzM5LDEyICs0MTUwLDIyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCwgYmVhY29uKTsKKwliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCwgYmVhY29uLCBjdGwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19vcF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgbm90aWZ5X2NtZCwKKwkJCSAgICAgIGNvbnN0IHU4ICphZGRyKQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKworCUI0M19XQVJOX09OKCF2aWYgfHwgd2wtPnZpZiAhPSB2aWYpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYjQzX2h3X29wcyA9IHsKIAkudHgJCQk9IGI0M19vcF90eCwKIAkuY29uZl90eAkJPSBiNDNfb3BfY29uZl90eCwKQEAgLTM3NjEsNiArNDE4Miw3IEBACiAJLnNldF9yZXRyeV9saW1pdAk9IGI0M19vcF9zZXRfcmV0cnlfbGltaXQsCiAJLnNldF90aW0JCT0gYjQzX29wX2JlYWNvbl9zZXRfdGltLAogCS5iZWFjb25fdXBkYXRlCQk9IGI0M19vcF9pYnNzX2JlYWNvbl91cGRhdGUsCisJLnN0YV9ub3RpZnkJCT0gYjQzX29wX3N0YV9ub3RpZnksCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtMzgwNCwzMSArNDIyNiwyMyBAQAogCQliNDNpbmZvKHdsLCAiQ29udHJvbGxlciByZXN0YXJ0ZWRcbiIpOwogfQogCi1zdGF0aWMgaW50IGI0M19zZXR1cF9tb2RlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCitzdGF0aWMgaW50IGI0M19zZXR1cF9iYW5kcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICBib29sIGhhdmVfMmdoel9waHksIGJvb2wgaGF2ZV81Z2h6X3BoeSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldi0+d2wtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwotCWludCBlcnI7CiAKLQkvKiBYWFg6IFRoaXMgZnVuY3Rpb24gd2lsbCBnbyBhd2F5IHNvb24sIHdoZW4gbWFjODAyMTEKLQkgKiAgICAgIGJhbmQgc3R1ZmYgaXMgcmV3cml0dGVuLiBTbyB0aGlzIGlzIGp1c3QgYSBoYWNrLgotCSAqICAgICAgRm9yIG5vdyB3ZSBhbHdheXMgY2xhaW0gR1BIWSBtb2RlLCBhcyB0aGVyZSBpcyBubwotCSAqICAgICAgc3VwcG9ydCBmb3IgTlBIWSBhbmQgQVBIWSBpbiB0aGUgZGV2aWNlLCB5ZXQuCi0JICogICAgICBUaGlzIGFzc3VtcHRpb24gaXMgT0ssIGFzIGFueSBCLCBOIG9yIEEgUEhZIHdpbGwgYWxyZWFkeQotCSAqICAgICAgaGF2ZSBkaWVkIGEgaG9ycmlibGUgc2FuaXR5IGNoZWNrIGRlYXRoIGVhcmxpZXIuICovCisJaWYgKGhhdmVfMmdoel9waHkpCisJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmYjQzX2JhbmRfMkdIejsKKwlpZiAoZGV2LT5waHkudHlwZSA9PSBCNDNfUEhZVFlQRV9OKSB7CisJCWlmIChoYXZlXzVnaHpfcGh5KQorCQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9ICZiNDNfYmFuZF81R0h6X25waHk7CisJfSBlbHNlIHsKKwkJaWYgKGhhdmVfNWdoel9waHkpCisJCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmI0M19iYW5kXzVHSHpfYXBoeTsKKwl9CiAKLQltb2RlID0gJnBoeS0+aHdtb2Rlc1swXTsKLQltb2RlLT5tb2RlID0gTU9ERV9JRUVFODAyMTFHOwotCW1vZGUtPm51bV9jaGFubmVscyA9IGI0M18yZ2h6X2NoYW50YWJsZV9zaXplOwotCW1vZGUtPmNoYW5uZWxzID0gYjQzXzJnaHpfY2hhbnRhYmxlOwotCW1vZGUtPm51bV9yYXRlcyA9IGI0M19nX3JhdGV0YWJsZV9zaXplOwotCW1vZGUtPnJhdGVzID0gYjQzX2dfcmF0ZXRhYmxlOwotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoaHcsIG1vZGUpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcGh5LT5wb3NzaWJsZV9waHltb2RlcyB8PSBCNDNfUEhZTU9ERV9HOworCWRldi0+cGh5LnN1cHBvcnRzXzJnaHogPSBoYXZlXzJnaHpfcGh5OworCWRldi0+cGh5LnN1cHBvcnRzXzVnaHogPSBoYXZlXzVnaHpfcGh5OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTEwLDcgKzQzMjQsNyBAQAogCWVyciA9IGI0M192YWxpZGF0ZV9jaGlwYWNjZXNzKGRldik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcG93ZXJkb3duOwotCWVyciA9IGI0M19zZXR1cF9tb2RlcyhkZXYsIGhhdmVfMmdoel9waHksIGhhdmVfNWdoel9waHkpOworCWVyciA9IGI0M19zZXR1cF9iYW5kcyhkZXYsIGhhdmVfMmdoel9waHksIGhhdmVfNWdoel9waHkpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3Bvd2VyZG93bjsKIApAQCAtNDA0MCw3ICs0NDU0LDcgQEAKIAlody0+bWF4X3NpZ25hbCA9IDEwMDsKIAlody0+bWF4X3Jzc2kgPSAtMTEwOwogCWh3LT5tYXhfbm9pc2UgPSAtMTEwOwotCWh3LT5xdWV1ZXMgPSAxOwkJLyogRklYTUU6IGhhcmR3YXJlIGhhcyBtb3JlIHF1ZXVlcyAqLworCWh3LT5xdWV1ZXMgPSBiNDNfbW9kcGFyYW1fcW9zID8gNCA6IDE7CiAJU0VUX0lFRUU4MDIxMV9ERVYoaHcsIGRldi0+ZGV2KTsKIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihzcHJvbS0+ZXQxbWFjKSkKIAkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIHNwcm9tLT5ldDFtYWMpOwpAQCAtNDA1Niw2ICs0NDcwLDggQEAKIAlzcGluX2xvY2tfaW5pdCgmd2wtPnNobV9sb2NrKTsKIAltdXRleF9pbml0KCZ3bC0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZ3bC0+ZGV2bGlzdCk7CisJSU5JVF9XT1JLKCZ3bC0+cW9zX3VwZGF0ZV93b3JrLCBiNDNfcW9zX3VwZGF0ZV93b3JrKTsKKwlJTklUX1dPUksoJndsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIsIGI0M19iZWFjb25fdXBkYXRlX3RyaWdnZXJfd29yayk7CiAKIAlzc2Jfc2V0X2RldnR5cGVkYXRhKGRldiwgd2wpOwogCWI0M2luZm8od2wsICJCcm9hZGNvbSAlMDRYIFdMQU4gZm91bmRcbiIsIGRldi0+YnVzLT5jaGlwX2lkKTsKQEAgLTQxNzMsNyArNDU4OSw3IEBACiAJCWVyciA9IGI0M193aXJlbGVzc19jb3JlX3N0YXJ0KHdsZGV2KTsKIAkJaWYgKGVycikgewogCQkJYjQzX2xlZHNfZXhpdCh3bGRldik7Ci0JCQliNDNfcm5nX2V4aXQod2xkZXYtPndsLCB0cnVlKTsKKwkJCWI0M19ybmdfZXhpdCh3bGRldi0+d2wpOwogCQkJYjQzX3dpcmVsZXNzX2NvcmVfZXhpdCh3bGRldik7CiAJCQliNDNlcnIod2wsICJSZXN1bWUgZmFpbGVkIGF0IGNvcmUgc3RhcnRcbiIpOwogCQkJZ290byBvdXQ7CkBAIC00MjAwLDYgKzQ2MTYsMzMgQEAKIAkucmVzdW1lCQk9IGI0M19yZXN1bWUsCiB9OwogCitzdGF0aWMgdm9pZCBiNDNfcHJpbnRfZHJpdmVyaW5mbyh2b2lkKQoreworCWNvbnN0IGNoYXIgKmZlYXRfcGNpID0gIiIsICpmZWF0X3BjbWNpYSA9ICIiLCAqZmVhdF9ucGh5ID0gIiIsCisJCSAgICpmZWF0X2xlZHMgPSAiIiwgKmZlYXRfcmZraWxsID0gIiI7CisKKyNpZmRlZiBDT05GSUdfQjQzX1BDSV9BVVRPU0VMRUNUCisJZmVhdF9wY2kgPSAiUCI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQjQzX1BDTUNJQQorCWZlYXRfcGNtY2lhID0gIk0iOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0I0M19OUEhZCisJZmVhdF9ucGh5ID0gIk4iOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0I0M19MRURTCisJZmVhdF9sZWRzID0gIkwiOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0I0M19SRktJTEwKKwlmZWF0X3Jma2lsbCA9ICJSIjsKKyNlbmRpZgorCXByaW50ayhLRVJOX0lORk8gIkJyb2FkY29tIDQzeHggZHJpdmVyIGxvYWRlZCAiCisJICAgICAgICJbIEZlYXR1cmVzOiAlcyVzJXMlcyVzLCBGaXJtd2FyZS1JRDogIgorCSAgICAgICBCNDNfU1VQUE9SVEVEX0ZJUk1XQVJFX0lEICIgXVxuIiwKKwkgICAgICAgZmVhdF9wY2ksIGZlYXRfcGNtY2lhLCBmZWF0X25waHksCisJICAgICAgIGZlYXRfbGVkcywgZmVhdF9yZmtpbGwpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBiNDNfaW5pdCh2b2lkKQogewogCWludCBlcnI7CkBAIC00MjExLDYgKzQ2NTQsNyBAQAogCWVyciA9IHNzYl9kcml2ZXJfcmVnaXN0ZXIoJmI0M19zc2JfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wY21jaWFfZXhpdDsKKwliNDNfcHJpbnRfZHJpdmVyaW5mbygpOwogCiAJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKaW5kZXggMmQ1MmQ5ZC4uNTIzMGFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCkBAIC0zOCw2ICszOCwxMCBAQAogLyogTWFnaWMgaGVscGVyIG1hY3JvIHRvIHBhZCBzdHJ1Y3R1cmVzLiBJZ25vcmUgdGhvc2UgYWJvdmUuIEl0J3MgbWFnaWMuICovCiAjZGVmaW5lIFBBRF9CWVRFUyhucl9ieXRlcykJCVA0RF9CWVRFUyggX19MSU5FX18gLCAobnJfYnl0ZXMpKQogCisKK2V4dGVybiBpbnQgYjQzX21vZHBhcmFtX3FvczsKKworCiAvKiBMaWdodHdlaWdodCBmdW5jdGlvbiB0byBjb252ZXJ0IGEgZnJlcXVlbmN5IChpbiBNaHopIHRvIGEgY2hhbm5lbCBudW1iZXIuICovCiBzdGF0aWMgaW5saW5lIHU4IGI0M19mcmVxX3RvX2NoYW5uZWxfNWdoeihpbnQgZnJlcSkKIHsKQEAgLTk1LDE2ICs5OSwxMyBAQAogdm9pZCBiNDNfc2htX3dyaXRlMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCwgdTMyIHZhbHVlKTsKIHZvaWQgYjQzX3NobV93cml0ZTE2KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSk7CiAKLXUzMiBiNDNfaGZfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwotdm9pZCBiNDNfaGZfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgdmFsdWUpOwordTY0IGI0M19oZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19oZl93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB2YWx1ZSk7CiAKIHZvaWQgYjQzX2R1bW15X3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCiB2b2lkIGI0M193aXJlbGVzc19jb3JlX3Jlc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGZsYWdzKTsKIAotdm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKLXZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKLQogdm9pZCBiNDNfY29udHJvbGxlcl9yZXN0YXJ0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgY29uc3QgY2hhciAqcmVhc29uKTsKIAogI2RlZmluZSBCNDNfUFNfRU5BQkxFRAkoMSA8PCAwKQkvKiBGb3JjZSBlbmFibGUgaGFyZHdhcmUgcG93ZXIgc2F2aW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbnBoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL25waHkuYwppbmRleCA3MDUxMzFlLi44Njk1ZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbnBoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9ucGh5LmMKQEAgLTI0MCw3ICsyNDAsNiBAQAogCiAJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9JUUZMSVAsCiAJCSAgICBCNDNfTlBIWV9JUUZMSVBfQURDMSB8IEI0M19OUEhZX0lRRkxJUF9BREMyKTsKLQkvL0ZJWE1FIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIGRpZmZlcmVudCBpbiB0aGUgc3BlY3MuCiAJaWYgKDEgLyogRklYTUUgYmFuZCBpcyAyLjRHSHogKi8pIHsKIAkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DTEFTU0NUTCwKIAkJCSAgICBCNDNfTlBIWV9DTEFTU0NUTF9DQ0tFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbnBoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL25waHkuaAppbmRleCA1ZDk1MTE4Li5mYWY0NmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbnBoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9ucGh5LmgKQEAgLTkxOSw2ICs5MTksMTAgQEAKIAogc3RydWN0IGI0M193bGRldjsKIAorCisjaWZkZWYgQ09ORklHX0I0M19OUEhZCisvKiBOLVBIWSBzdXBwb3J0IGVuYWJsZWQgKi8KKwogaW50IGI0M19waHlfaW5pdG4oc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAogdm9pZCBiNDNfbnBoeV9yYWRpb190dXJuX29uKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CkBAIC05MjksNCArOTMzLDQwIEBACiB2b2lkIGI0M19ucGh5X3htaXRwb3dlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfbnBoeV9zZXRfcnhhbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpOwogCisKKyNlbHNlIC8qIENPTkZJR19CNDNfTlBIWSAqLworLyogTi1QSFkgc3VwcG9ydCBkaXNhYmxlZCAqLworCisKK3N0YXRpYyBpbmxpbmUKK2ludCBiNDNfcGh5X2luaXRuKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgYjQzX25waHlfcmFkaW9fdHVybl9vbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lCit2b2lkIGI0M19ucGh5X3JhZGlvX3R1cm5fb2ZmKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKK30KKworc3RhdGljIGlubGluZQoraW50IGI0M19ucGh5X3NlbGVjdGNoYW5uZWwoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjaGFubmVsKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGI0M19ucGh5X3htaXRwb3dlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lCit2b2lkIGI0M19ucGh5X3NldF9yeGFudGVubmEoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgYW50ZW5uYSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19CNDNfTlBIWSAqLwogI2VuZGlmIC8qIEI0M19OUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMKaW5kZXggYjc5YTZiZC4uYjhhYTE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYwpAQCAtNDMsMTQgKzQzLDE2IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGI0M19wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2KQogewotCS8vVE9ETwotCXJldHVybiAwOworCXN0cnVjdCBzc2JfYnVzICpzc2IgPSBkZXYtPnByaXY7CisKKwlyZXR1cm4gc3NiX2J1c19zdXNwZW5kKHNzYik7CiB9CiAKIHN0YXRpYyBpbnQgYjQzX3BjbWNpYV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmRldikKIHsKLQkvL1RPRE8KLQlyZXR1cm4gMDsKKwlzdHJ1Y3Qgc3NiX2J1cyAqc3NiID0gZGV2LT5wcml2OworCisJcmV0dXJuIHNzYl9idXNfcmVzdW1lKHNzYik7CiB9CiAjZWxzZSAvKiBDT05GSUdfUE0gKi8KICMgZGVmaW5lIGI0M19wY21jaWFfc3VzcGVuZAkJTlVMTApAQCAtOTEsNiArOTMsOCBAQAogCiAJZGV2LT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKIAlkZXYtPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKwlkZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKwlkZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCiAJZGV2LT5pby5CYXNlUG9ydDIgPSAwOwogCWRldi0+aW8uTnVtUG9ydHMyID0gMDsKQEAgLTExMiw4ICsxMTYsOCBAQAogCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykKIAkJZ290byBlcnJfZGlzYWJsZTsKIAotCWRldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfRklSU1RfU0hBUkVEOwotCWRldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEIHwgSVJRX1NIQVJFX0lEOworCWRldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CisJZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJZGV2LT5pcnEuSGFuZGxlciA9IE5VTEw7IC8qIFRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgbGF0ZXIuICovCiAJZGV2LT5pcnEuSW5zdGFuY2UgPSBOVUxMOwogCXJlcyA9IHBjbWNpYV9yZXF1ZXN0X2lycShkZXYsICZkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5LmMKaW5kZXggNzE1MDdiMi4uNTc1YzU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHkuYwpAQCAtODYwLDcgKzg2MCw3IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEJCKSwKIAkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEJCKSkgJiAweEYwMDApIHwgMHgwMDUzKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNNjEsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE02MSAmIDB4RkUxRikpIHwgMHgwMTIwKTsKKwkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETTYxKSAmIDB4RkUxRikgfCAweDAxMjApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxMyksCiAJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMykpICYgMHgwRkZGKSB8IDB4MzAwMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDE0KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FjYWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCkBAIC0wLDAgKzEsODQyIEBACisvKgorCisgIEJyb2FkY29tIEI0MyB3aXJlbGVzcyBkcml2ZXIKKworICBQSU8gZGF0YSB0cmFuc2ZlcgorCisgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKworI2luY2x1ZGUgImI0My5oIgorI2luY2x1ZGUgInBpby5oIgorI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ4bWl0LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisKK3N0YXRpYyB2b2lkIGI0M19waW9fcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisKK3N0YXRpYyB1MTYgZ2VuZXJhdGVfY29va2llKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEsCisJCQkgICBzdHJ1Y3QgYjQzX3Bpb190eHBhY2tldCAqcGFjaykKK3sKKwl1MTYgY29va2llOworCisJLyogVXNlIHRoZSB1cHBlciA0IGJpdHMgb2YgdGhlIGNvb2tpZSBhcworCSAqIFBJTyBjb250cm9sbGVyIElEIGFuZCBzdG9yZSB0aGUgcGFja2V0IGluZGV4IG51bWJlcgorCSAqIGluIHRoZSBsb3dlciAxMiBiaXRzLgorCSAqIE5vdGUgdGhhdCB0aGUgY29va2llIG11c3QgbmV2ZXIgYmUgMCwgYXMgdGhpcworCSAqIGlzIGEgc3BlY2lhbCB2YWx1ZSB1c2VkIGluIFJYIHBhdGguCisJICogSXQgY2FuIGFsc28gbm90IGJlIDB4RkZGRiBiZWNhdXNlIHRoYXQgaXMgc3BlY2lhbAorCSAqIGZvciBtdWx0aWNhc3QgZnJhbWVzLgorCSAqLworCWNvb2tpZSA9ICgoKHUxNilxLT5pbmRleCArIDEpIDw8IDEyKTsKKwljb29raWUgfD0gcGFjay0+aW5kZXg7CisKKwlyZXR1cm4gY29va2llOworfQorCitzdGF0aWMKK3N0cnVjdCBiNDNfcGlvX3R4cXVldWUgKiBwYXJzZV9jb29raWUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgICAgIHUxNiBjb29raWUsCisJCQkJICAgICAgc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKipwYWNrKQoreworCXN0cnVjdCBiNDNfcGlvICpwaW8gPSAmZGV2LT5waW87CisJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSA9IE5VTEw7CisJdW5zaWduZWQgaW50IHBhY2tfaW5kZXg7CisKKwlzd2l0Y2ggKGNvb2tpZSAmIDB4RjAwMCkgeworCWNhc2UgMHgxMDAwOgorCQlxID0gcGlvLT50eF9xdWV1ZV9BQ19CSzsKKwkJYnJlYWs7CisJY2FzZSAweDIwMDA6CisJCXEgPSBwaW8tPnR4X3F1ZXVlX0FDX0JFOworCQlicmVhazsKKwljYXNlIDB4MzAwMDoKKwkJcSA9IHBpby0+dHhfcXVldWVfQUNfVkk7CisJCWJyZWFrOworCWNhc2UgMHg0MDAwOgorCQlxID0gcGlvLT50eF9xdWV1ZV9BQ19WTzsKKwkJYnJlYWs7CisJY2FzZSAweDUwMDA6CisJCXEgPSBwaW8tPnR4X3F1ZXVlX21jYXN0OworCQlicmVhazsKKwl9CisJaWYgKEI0M19XQVJOX09OKCFxKSkKKwkJcmV0dXJuIE5VTEw7CisJcGFja19pbmRleCA9IChjb29raWUgJiAweDBGRkYpOworCWlmIChCNDNfV0FSTl9PTihwYWNrX2luZGV4ID49IEFSUkFZX1NJWkUocS0+cGFja2V0cykpKQorCQlyZXR1cm4gTlVMTDsKKwkqcGFjayA9ICZxLT5wYWNrZXRzW3BhY2tfaW5kZXhdOworCisJcmV0dXJuIHE7Cit9CisKK3N0YXRpYyB1MTYgaW5kZXhfdG9fcGlvcXVldWVfYmFzZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RhdGljIGNvbnN0IHUxNiBiYXNlc1tdID0geworCQlCNDNfTU1JT19QSU9fQkFTRTAsCisJCUI0M19NTUlPX1BJT19CQVNFMSwKKwkJQjQzX01NSU9fUElPX0JBU0UyLAorCQlCNDNfTU1JT19QSU9fQkFTRTMsCisJCUI0M19NTUlPX1BJT19CQVNFNCwKKwkJQjQzX01NSU9fUElPX0JBU0U1LAorCQlCNDNfTU1JT19QSU9fQkFTRTYsCisJCUI0M19NTUlPX1BJT19CQVNFNywKKwl9OworCXN0YXRpYyBjb25zdCB1MTYgYmFzZXNfcmV2MTFbXSA9IHsKKwkJQjQzX01NSU9fUElPMTFfQkFTRTAsCisJCUI0M19NTUlPX1BJTzExX0JBU0UxLAorCQlCNDNfTU1JT19QSU8xMV9CQVNFMiwKKwkJQjQzX01NSU9fUElPMTFfQkFTRTMsCisJCUI0M19NTUlPX1BJTzExX0JBU0U0LAorCQlCNDNfTU1JT19QSU8xMV9CQVNFNSwKKwl9OworCisJaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAxMSkgeworCQlCNDNfV0FSTl9PTihpbmRleCA+PSBBUlJBWV9TSVpFKGJhc2VzX3JldjExKSk7CisJCXJldHVybiBiYXNlc19yZXYxMVtpbmRleF07CisJfQorCUI0M19XQVJOX09OKGluZGV4ID49IEFSUkFZX1NJWkUoYmFzZXMpKTsKKwlyZXR1cm4gYmFzZXNbaW5kZXhdOworfQorCitzdGF0aWMgdTE2IHBpb190eHF1ZXVlX29mZnNldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAxMSkKKwkJcmV0dXJuIDB4MTg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MTYgcGlvX3J4cXVldWVfb2Zmc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDExKQorCQlyZXR1cm4gMHgzODsKKwlyZXR1cm4gODsKK30KKworc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKiBiNDNfc2V0dXBfcGlvcXVldWVfdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7CisJc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKnA7CisJdW5zaWduZWQgaW50IGk7CisKKwlxID0ga3phbGxvYyhzaXplb2YoKnEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXEpCisJCXJldHVybiBOVUxMOworCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKKwlxLT5kZXYgPSBkZXY7CisJcS0+cmV2ID0gZGV2LT5kZXYtPmlkLnJldmlzaW9uOworCXEtPm1taW9fYmFzZSA9IGluZGV4X3RvX3Bpb3F1ZXVlX2Jhc2UoZGV2LCBpbmRleCkgKworCQkgICAgICAgcGlvX3R4cXVldWVfb2Zmc2V0KGRldik7CisJcS0+aW5kZXggPSBpbmRleDsKKworCXEtPmZyZWVfcGFja2V0X3Nsb3RzID0gQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTOworCWlmIChxLT5yZXYgPj0gOCkgeworCQlxLT5idWZmZXJfc2l6ZSA9IDE5MjA7IC8vRklYTUUgdGhpcyBjb25zdGFudCBpcyB3cm9uZy4KKwl9IGVsc2UgeworCQlxLT5idWZmZXJfc2l6ZSA9IGI0M19waW90eF9yZWFkMTYocSwgQjQzX1BJT19UWFFCVUZTSVpFKTsKKwkJcS0+YnVmZmVyX3NpemUgLT0gODA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnEtPnBhY2tldHNfbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocS0+cGFja2V0cyk7IGkrKykgeworCQlwID0gJihxLT5wYWNrZXRzW2ldKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnAtPmxpc3QpOworCQlwLT5pbmRleCA9IGk7CisJCXAtPnF1ZXVlID0gcTsKKwkJbGlzdF9hZGQoJnAtPmxpc3QsICZxLT5wYWNrZXRzX2xpc3QpOworCX0KKworCXJldHVybiBxOworfQorCitzdGF0aWMgc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqIGI0M19zZXR1cF9waW9xdWV1ZV9yeChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcTsKKworCXEgPSBremFsbG9jKHNpemVvZigqcSksIEdGUF9LRVJORUwpOworCWlmICghcSkKKwkJcmV0dXJuIE5VTEw7CisJc3Bpbl9sb2NrX2luaXQoJnEtPmxvY2spOworCXEtPmRldiA9IGRldjsKKwlxLT5yZXYgPSBkZXYtPmRldi0+aWQucmV2aXNpb247CisJcS0+bW1pb19iYXNlID0gaW5kZXhfdG9fcGlvcXVldWVfYmFzZShkZXYsIGluZGV4KSArCisJCSAgICAgICBwaW9fcnhxdWV1ZV9vZmZzZXQoZGV2KTsKKwlJTklUX1dPUksoJnEtPnJ4X3dvcmssIGI0M19waW9fcnhfd29yayk7CisKKwkvKiBFbmFibGUgRGlyZWN0IEZJRk8gUlggKFBJTykgb24gdGhlIGVuZ2luZS4gKi8KKwliNDNfZG1hX2RpcmVjdF9maWZvX3J4KGRldiwgaW5kZXgsIDEpOworCisJcmV0dXJuIHE7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19waW9fY2FuY2VsX3R4X3BhY2tldHMoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYjQzX3Bpb190eHBhY2tldCAqcGFjazsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHEtPnBhY2tldHMpOyBpKyspIHsKKwkJcGFjayA9ICYocS0+cGFja2V0c1tpXSk7CisJCWlmIChwYWNrLT5za2IpIHsKKwkJCWRldl9rZnJlZV9za2JfYW55KHBhY2stPnNrYik7CisJCQlwYWNrLT5za2IgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBiNDNfZGVzdHJveV9waW9xdWV1ZV90eChzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxLAorCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghcSkKKwkJcmV0dXJuOworCWI0M19waW9fY2FuY2VsX3R4X3BhY2tldHMocSk7CisJa2ZyZWUocSk7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19kZXN0cm95X3Bpb3F1ZXVlX3J4KHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEsCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFxKQorCQlyZXR1cm47CisJa2ZyZWUocSk7Cit9CisKKyNkZWZpbmUgZGVzdHJveV9xdWV1ZV90eChwaW8sIHF1ZXVlKSBkbyB7CQkJCVwKKwliNDNfZGVzdHJveV9waW9xdWV1ZV90eCgocGlvKS0+cXVldWUsIF9fc3RyaW5naWZ5KHF1ZXVlKSk7CVwKKwkocGlvKS0+cXVldWUgPSBOVUxMOwkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZXN0cm95X3F1ZXVlX3J4KHBpbywgcXVldWUpIGRvIHsJCQkJXAorCWI0M19kZXN0cm95X3Bpb3F1ZXVlX3J4KChwaW8pLT5xdWV1ZSwgX19zdHJpbmdpZnkocXVldWUpKTsJXAorCShwaW8pLT5xdWV1ZSA9IE5VTEw7CQkJCQkJXAorICB9IHdoaWxlICgwKQorCit2b2lkIGI0M19waW9fZnJlZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waW8gKnBpbzsKKworCWlmICghYjQzX3VzaW5nX3Bpb190cmFuc2ZlcnMoZGV2KSkKKwkJcmV0dXJuOworCXBpbyA9ICZkZXYtPnBpbzsKKworCWRlc3Ryb3lfcXVldWVfcngocGlvLCByeF9xdWV1ZSk7CisJZGVzdHJveV9xdWV1ZV90eChwaW8sIHR4X3F1ZXVlX21jYXN0KTsKKwlkZXN0cm95X3F1ZXVlX3R4KHBpbywgdHhfcXVldWVfQUNfVk8pOworCWRlc3Ryb3lfcXVldWVfdHgocGlvLCB0eF9xdWV1ZV9BQ19WSSk7CisJZGVzdHJveV9xdWV1ZV90eChwaW8sIHR4X3F1ZXVlX0FDX0JFKTsKKwlkZXN0cm95X3F1ZXVlX3R4KHBpbywgdHhfcXVldWVfQUNfQkspOworfQorCit2b2lkIGI0M19waW9fc3RvcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJaWYgKCFiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQorCQlyZXR1cm47CisJY2FuY2VsX3dvcmtfc3luYygmZGV2LT5waW8ucnhfcXVldWUtPnJ4X3dvcmspOworfQorCitpbnQgYjQzX3Bpb19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BpbyAqcGlvID0gJmRldi0+cGlvOworCWludCBlcnIgPSAtRU5PTUVNOworCisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19NQUNDVEwsIGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19NQUNDVEwpCisJCSAgICAmIH5CNDNfTUFDQ1RMX0JFKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9SWFBBRE9GRiwgMCk7CisKKwlwaW8tPnR4X3F1ZXVlX0FDX0JLID0gYjQzX3NldHVwX3Bpb3F1ZXVlX3R4KGRldiwgMCk7CisJaWYgKCFwaW8tPnR4X3F1ZXVlX0FDX0JLKQorCQlnb3RvIG91dDsKKworCXBpby0+dHhfcXVldWVfQUNfQkUgPSBiNDNfc2V0dXBfcGlvcXVldWVfdHgoZGV2LCAxKTsKKwlpZiAoIXBpby0+dHhfcXVldWVfQUNfQkUpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfYms7CisKKwlwaW8tPnR4X3F1ZXVlX0FDX1ZJID0gYjQzX3NldHVwX3Bpb3F1ZXVlX3R4KGRldiwgMik7CisJaWYgKCFwaW8tPnR4X3F1ZXVlX0FDX1ZJKQorCQlnb3RvIGVycl9kZXN0cm95X2JlOworCisJcGlvLT50eF9xdWV1ZV9BQ19WTyA9IGI0M19zZXR1cF9waW9xdWV1ZV90eChkZXYsIDMpOworCWlmICghcGlvLT50eF9xdWV1ZV9BQ19WTykKKwkJZ290byBlcnJfZGVzdHJveV92aTsKKworCXBpby0+dHhfcXVldWVfbWNhc3QgPSBiNDNfc2V0dXBfcGlvcXVldWVfdHgoZGV2LCA0KTsKKwlpZiAoIXBpby0+dHhfcXVldWVfbWNhc3QpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfdm87CisKKwlwaW8tPnJ4X3F1ZXVlID0gYjQzX3NldHVwX3Bpb3F1ZXVlX3J4KGRldiwgMCk7CisJaWYgKCFwaW8tPnJ4X3F1ZXVlKQorCQlnb3RvIGVycl9kZXN0cm95X21jYXN0OworCisJYjQzZGJnKGRldi0+d2wsICJQSU8gaW5pdGlhbGl6ZWRcbiIpOworCWVyciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKKworZXJyX2Rlc3Ryb3lfbWNhc3Q6CisJZGVzdHJveV9xdWV1ZV90eChwaW8sIHR4X3F1ZXVlX21jYXN0KTsKK2Vycl9kZXN0cm95X3ZvOgorCWRlc3Ryb3lfcXVldWVfdHgocGlvLCB0eF9xdWV1ZV9BQ19WTyk7CitlcnJfZGVzdHJveV92aToKKwlkZXN0cm95X3F1ZXVlX3R4KHBpbywgdHhfcXVldWVfQUNfVkkpOworZXJyX2Rlc3Ryb3lfYmU6CisJZGVzdHJveV9xdWV1ZV90eChwaW8sIHR4X3F1ZXVlX0FDX0JFKTsKK2Vycl9kZXN0cm95X2JrOgorCWRlc3Ryb3lfcXVldWVfdHgocGlvLCB0eF9xdWV1ZV9BQ19CSyk7CisJcmV0dXJuIGVycjsKK30KKworLyogU3RhdGljIG1hcHBpbmcgb2YgbWFjODAyMTEncyBxdWV1ZXMgKHByaW9yaXRpZXMpIHRvIGI0MyBQSU8gcXVldWVzLiAqLworc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKiBzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJCSB1OCBxdWV1ZV9wcmlvKQoreworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7CisKKwlpZiAoYjQzX21vZHBhcmFtX3FvcykgeworCQkvKiAwID0gaGlnaGVzdCBwcmlvcml0eSAqLworCQlzd2l0Y2ggKHF1ZXVlX3ByaW8pIHsKKwkJZGVmYXVsdDoKKwkJCUI0M19XQVJOX09OKDEpOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAwOgorCQkJcSA9IGRldi0+cGlvLnR4X3F1ZXVlX0FDX1ZPOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXEgPSBkZXYtPnBpby50eF9xdWV1ZV9BQ19WSTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlxID0gZGV2LT5waW8udHhfcXVldWVfQUNfQkU7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcSA9IGRldi0+cGlvLnR4X3F1ZXVlX0FDX0JLOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJcSA9IGRldi0+cGlvLnR4X3F1ZXVlX0FDX0JFOworCisJcmV0dXJuIHE7Cit9CisKK3N0YXRpYyB1MTYgdHhfd3JpdGVfMmJ5dGVfcXVldWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKKwkJCQl1MTYgY3RsLAorCQkJCWNvbnN0IHZvaWQgKl9kYXRhLAorCQkJCXVuc2lnbmVkIGludCBkYXRhX2xlbikKK3sKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBxLT5kZXY7CisJY29uc3QgdTggKmRhdGEgPSBfZGF0YTsKKworCWN0bCB8PSBCNDNfUElPX1RYQ1RMX1dSSVRFTE8gfCBCNDNfUElPX1RYQ1RMX1dSSVRFSEk7CisJYjQzX3Bpb3R4X3dyaXRlMTYocSwgQjQzX1BJT19UWENUTCwgY3RsKTsKKworCXNzYl9ibG9ja193cml0ZShkZXYtPmRldiwgZGF0YSwgKGRhdGFfbGVuICYgfjEpLAorCQkJcS0+bW1pb19iYXNlICsgQjQzX1BJT19UWERBVEEsCisJCQlzaXplb2YodTE2KSk7CisJaWYgKGRhdGFfbGVuICYgMSkgeworCQkvKiBXcml0ZSB0aGUgbGFzdCBieXRlLiAqLworCQljdGwgJj0gfkI0M19QSU9fVFhDVExfV1JJVEVISTsKKwkJYjQzX3Bpb3R4X3dyaXRlMTYocSwgQjQzX1BJT19UWENUTCwgY3RsKTsKKwkJYjQzX3Bpb3R4X3dyaXRlMTYocSwgQjQzX1BJT19UWERBVEEsIGRhdGFbZGF0YV9sZW4gLSAxXSk7CisJfQorCisJcmV0dXJuIGN0bDsKK30KKworc3RhdGljIHZvaWQgcGlvX3R4X2ZyYW1lXzJieXRlX3F1ZXVlKHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwYWNrLAorCQkJCSAgICAgY29uc3QgdTggKmhkciwgdW5zaWduZWQgaW50IGhkcmxlbikKK3sKKwlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxID0gcGFjay0+cXVldWU7CisJY29uc3QgY2hhciAqZnJhbWUgPSBwYWNrLT5za2ItPmRhdGE7CisJdW5zaWduZWQgaW50IGZyYW1lX2xlbiA9IHBhY2stPnNrYi0+bGVuOworCXUxNiBjdGw7CisKKwljdGwgPSBiNDNfcGlvdHhfcmVhZDE2KHEsIEI0M19QSU9fVFhDVEwpOworCWN0bCB8PSBCNDNfUElPX1RYQ1RMX0ZSRUFEWTsKKwljdGwgJj0gfkI0M19QSU9fVFhDVExfRU9GOworCisJLyogVHJhbnNmZXIgdGhlIGhlYWRlciBkYXRhLiAqLworCWN0bCA9IHR4X3dyaXRlXzJieXRlX3F1ZXVlKHEsIGN0bCwgaGRyLCBoZHJsZW4pOworCS8qIFRyYW5zZmVyIHRoZSBmcmFtZSBkYXRhLiAqLworCWN0bCA9IHR4X3dyaXRlXzJieXRlX3F1ZXVlKHEsIGN0bCwgZnJhbWUsIGZyYW1lX2xlbik7CisKKwljdGwgfD0gQjQzX1BJT19UWENUTF9FT0Y7CisJYjQzX3Bpb3R4X3dyaXRlMTYocSwgQjQzX1BJT19UWENUTCwgY3RsKTsKK30KKworc3RhdGljIHUzMiB0eF93cml0ZV80Ynl0ZV9xdWV1ZShzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxLAorCQkJCXUzMiBjdGwsCisJCQkJY29uc3Qgdm9pZCAqX2RhdGEsCisJCQkJdW5zaWduZWQgaW50IGRhdGFfbGVuKQoreworCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHEtPmRldjsKKwljb25zdCB1OCAqZGF0YSA9IF9kYXRhOworCisJY3RsIHw9IEI0M19QSU84X1RYQ1RMXzBfNyB8IEI0M19QSU84X1RYQ1RMXzhfMTUgfAorCSAgICAgICBCNDNfUElPOF9UWENUTF8xNl8yMyB8IEI0M19QSU84X1RYQ1RMXzI0XzMxOworCWI0M19waW90eF93cml0ZTMyKHEsIEI0M19QSU84X1RYQ1RMLCBjdGwpOworCisJc3NiX2Jsb2NrX3dyaXRlKGRldi0+ZGV2LCBkYXRhLCAoZGF0YV9sZW4gJiB+MyksCisJCQlxLT5tbWlvX2Jhc2UgKyBCNDNfUElPOF9UWERBVEEsCisJCQlzaXplb2YodTMyKSk7CisJaWYgKGRhdGFfbGVuICYgMykgeworCQl1MzIgdmFsdWUgPSAwOworCisJCS8qIFdyaXRlIHRoZSBsYXN0IGZldyBieXRlcy4gKi8KKwkJY3RsICY9IH4oQjQzX1BJTzhfVFhDVExfOF8xNSB8IEI0M19QSU84X1RYQ1RMXzE2XzIzIHwKKwkJCSBCNDNfUElPOF9UWENUTF8yNF8zMSk7CisJCWRhdGEgPSAmKGRhdGFbZGF0YV9sZW4gLSAxXSk7CisJCXN3aXRjaCAoZGF0YV9sZW4gJiAzKSB7CisJCWNhc2UgMzoKKwkJCWN0bCB8PSBCNDNfUElPOF9UWENUTF8xNl8yMzsKKwkJCXZhbHVlIHw9ICh1MzIpKCpkYXRhKSA8PCAxNjsKKwkJCWRhdGEtLTsKKwkJY2FzZSAyOgorCQkJY3RsIHw9IEI0M19QSU84X1RYQ1RMXzhfMTU7CisJCQl2YWx1ZSB8PSAodTMyKSgqZGF0YSkgPDwgODsKKwkJCWRhdGEtLTsKKwkJY2FzZSAxOgorCQkJdmFsdWUgfD0gKHUzMikoKmRhdGEpOworCQl9CisJCWI0M19waW90eF93cml0ZTMyKHEsIEI0M19QSU84X1RYQ1RMLCBjdGwpOworCQliNDNfcGlvdHhfd3JpdGUzMihxLCBCNDNfUElPOF9UWERBVEEsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gY3RsOworfQorCitzdGF0aWMgdm9pZCBwaW9fdHhfZnJhbWVfNGJ5dGVfcXVldWUoc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKnBhY2ssCisJCQkJICAgICBjb25zdCB1OCAqaGRyLCB1bnNpZ25lZCBpbnQgaGRybGVuKQoreworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEgPSBwYWNrLT5xdWV1ZTsKKwljb25zdCBjaGFyICpmcmFtZSA9IHBhY2stPnNrYi0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfbGVuID0gcGFjay0+c2tiLT5sZW47CisJdTMyIGN0bDsKKworCWN0bCA9IGI0M19waW90eF9yZWFkMzIocSwgQjQzX1BJTzhfVFhDVEwpOworCWN0bCB8PSBCNDNfUElPOF9UWENUTF9GUkVBRFk7CisJY3RsICY9IH5CNDNfUElPOF9UWENUTF9FT0Y7CisKKwkvKiBUcmFuc2ZlciB0aGUgaGVhZGVyIGRhdGEuICovCisJY3RsID0gdHhfd3JpdGVfNGJ5dGVfcXVldWUocSwgY3RsLCBoZHIsIGhkcmxlbik7CisJLyogVHJhbnNmZXIgdGhlIGZyYW1lIGRhdGEuICovCisJY3RsID0gdHhfd3JpdGVfNGJ5dGVfcXVldWUocSwgY3RsLCBmcmFtZSwgZnJhbWVfbGVuKTsKKworCWN0bCB8PSBCNDNfUElPOF9UWENUTF9FT0Y7CisJYjQzX3Bpb3R4X3dyaXRlMzIocSwgQjQzX1BJT19UWENUTCwgY3RsKTsKK30KKworc3RhdGljIGludCBwaW9fdHhfZnJhbWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKKwkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3QgYjQzX3Bpb190eHBhY2tldCAqcGFjazsKKwlzdHJ1Y3QgYjQzX3R4aGRyIHR4aGRyOworCXUxNiBjb29raWU7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgaGRybGVuOworCisJQjQzX1dBUk5fT04obGlzdF9lbXB0eSgmcS0+cGFja2V0c19saXN0KSk7CisJcGFjayA9IGxpc3RfZW50cnkocS0+cGFja2V0c19saXN0Lm5leHQsCisJCQkgIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0LCBsaXN0KTsKKwltZW1zZXQoJnBhY2stPnR4c3RhdCwgMCwgc2l6ZW9mKHBhY2stPnR4c3RhdCkpOworCW1lbWNweSgmcGFjay0+dHhzdGF0LmNvbnRyb2wsIGN0bCwgc2l6ZW9mKCpjdGwpKTsKKworCWNvb2tpZSA9IGdlbmVyYXRlX2Nvb2tpZShxLCBwYWNrKTsKKwloZHJsZW4gPSBiNDNfdHhoZHJfc2l6ZShxLT5kZXYpOworCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihxLT5kZXYsICh1OCAqKSZ0eGhkciwgc2tiLT5kYXRhLAorCQkJCSBza2ItPmxlbiwgY3RsLCBjb29raWUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TRU5EX0FGVEVSX0RUSU0pIHsKKwkJLyogVGVsbCB0aGUgZmlybXdhcmUgYWJvdXQgdGhlIGNvb2tpZSBvZiB0aGUgbGFzdAorCQkgKiBtY2FzdCBmcmFtZSwgc28gaXQgY2FuIGNsZWFyIHRoZSBtb3JlLWRhdGEgYml0IGluIGl0LiAqLworCQliNDNfc2htX3dyaXRlMTYocS0+ZGV2LCBCNDNfU0hNX1NIQVJFRCwKKwkJCQlCNDNfU0hNX1NIX01DQVNUQ09PS0lFLCBjb29raWUpOworCX0KKworCXBhY2stPnNrYiA9IHNrYjsKKwlpZiAocS0+cmV2ID49IDgpCisJCXBpb190eF9mcmFtZV80Ynl0ZV9xdWV1ZShwYWNrLCAoY29uc3QgdTggKikmdHhoZHIsIGhkcmxlbik7CisJZWxzZQorCQlwaW9fdHhfZnJhbWVfMmJ5dGVfcXVldWUocGFjaywgKGNvbnN0IHU4ICopJnR4aGRyLCBoZHJsZW4pOworCisJLyogUmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2tldCBzbG90cy4KKwkgKiBJdCB3aWxsIGJlIHB1dCBiYWNrIHdoZW4gd2UgcmVjZWl2ZSB0aGUgc3RhdHVzIHJlcG9ydC4gKi8KKwlsaXN0X2RlbCgmcGFjay0+bGlzdCk7CisKKwkvKiBVcGRhdGUgdGhlIHF1ZXVlIHN0YXRpc3RpY3MuICovCisJcS0+YnVmZmVyX3VzZWQgKz0gcm91bmR1cChza2ItPmxlbiArIGhkcmxlbiwgNCk7CisJcS0+ZnJlZV9wYWNrZXRfc2xvdHMgLT0gMTsKKworCXJldHVybiAwOworfQorCitpbnQgYjQzX3Bpb190eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBoZHJsZW4sIHRvdGFsX2xlbjsKKwlpbnQgZXJyID0gMDsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpZiAoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TRU5EX0FGVEVSX0RUSU0pIHsKKwkJLyogVGhlIG11bHRpY2FzdCBxdWV1ZSB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIERUSU0uICovCisJCXEgPSBkZXYtPnBpby50eF9xdWV1ZV9tY2FzdDsKKwkJLyogU2V0IHRoZSBmcmFtZSBNb3JlLURhdGEgYml0LiBVY29kZSB3aWxsIGNsZWFyIGl0CisJCSAqIGZvciB1cyBvbiB0aGUgbGFzdCBmcmFtZS4gKi8KKwkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKKwl9IGVsc2UgeworCQkvKiBEZWNpZGUgYnkgcHJpb3JpdHkgd2hlcmUgdG8gcHV0IHRoaXMgZnJhbWUuICovCisJCXEgPSBzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoZGV2LCBjdGwtPnF1ZXVlKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOworCisJaGRybGVuID0gYjQzX3R4aGRyX3NpemUoZGV2KTsKKwl0b3RhbF9sZW4gPSByb3VuZHVwKHNrYi0+bGVuICsgaGRybGVuLCA0KTsKKworCWlmICh1bmxpa2VseSh0b3RhbF9sZW4gPiBxLT5idWZmZXJfc2l6ZSkpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWI0M2RiZyhkZXYtPndsLCAiUElPOiBUWCBwYWNrZXQgbG9uZ2VyIHRoYW4gcXVldWUuXG4iKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwlpZiAodW5saWtlbHkocS0+ZnJlZV9wYWNrZXRfc2xvdHMgPT0gMCkpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWI0M3dhcm4oZGV2LT53bCwgIlBJTzogVFggcGFja2V0IG92ZXJmbG93LlxuIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJQjQzX1dBUk5fT04ocS0+YnVmZmVyX3VzZWQgPiBxLT5idWZmZXJfc2l6ZSk7CisKKwlpZiAodG90YWxfbGVuID4gKHEtPmJ1ZmZlcl9zaXplIC0gcS0+YnVmZmVyX3VzZWQpKSB7CisJCS8qIE5vdCBlbm91Z2ggbWVtb3J5IG9uIHRoZSBxdWV1ZS4gKi8KKwkJZXJyID0gLUVCVVNZOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYtPndsLT5odywgY3RsLT5xdWV1ZSk7CisJCXEtPnN0b3BwZWQgPSAxOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogQXNzaWduIHRoZSBxdWV1ZSBudW1iZXIgdG8gdGhlIHJpbmcgKGlmIG5vdCBhbHJlYWR5IGRvbmUgYmVmb3JlKQorCSAqIHNvIFRYIHN0YXR1cyBoYW5kbGluZyBjYW4gdXNlIGl0LiBUaGUgbWFjODAyMTEtcXVldWUgdG8gYjQzLXF1ZXVlCisJICogbWFwcGluZyBpcyBzdGF0aWMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgaXQgcGVyIGZyYW1lLiAqLworCXEtPnF1ZXVlX3ByaW8gPSBjdGwtPnF1ZXVlOworCisJZXJyID0gcGlvX3R4X2ZyYW1lKHEsIHNrYiwgY3RsKTsKKwlpZiAodW5saWtlbHkoZXJyID09IC1FTk9LRVkpKSB7CisJCS8qIERyb3AgdGhpcyBwYWNrZXQsIGFzIHdlIGRvbid0IGhhdmUgdGhlIGVuY3J5cHRpb24ga2V5CisJCSAqIGFueW1vcmUgYW5kIG11c3Qgbm90IHRyYW5zbWl0IGl0IHVuZW5jcnlwdGVkLiAqLworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQllcnIgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWI0M2VycihkZXYtPndsLCAiUElPIHRyYW5zbWlzc2lvbiBmYWlsdXJlXG4iKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwlxLT5ucl90eF9wYWNrZXRzKys7CisKKwlCNDNfV0FSTl9PTihxLT5idWZmZXJfdXNlZCA+IHEtPmJ1ZmZlcl9zaXplKTsKKwlpZiAoKChxLT5idWZmZXJfc2l6ZSAtIHEtPmJ1ZmZlcl91c2VkKSA8IHJvdW5kdXAoMiArIDIgKyA2LCA0KSkgfHwKKwkgICAgKHEtPmZyZWVfcGFja2V0X3Nsb3RzID09IDApKSB7CisJCS8qIFRoZSBxdWV1ZSBpcyBmdWxsLiAqLworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYtPndsLT5odywgY3RsLT5xdWV1ZSk7CisJCXEtPnN0b3BwZWQgPSAxOworCX0KKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLiAqLwordm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxOworCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwYWNrID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdG90YWxfbGVuOworCisJcSA9IHBhcnNlX2Nvb2tpZShkZXYsIHN0YXR1cy0+Y29va2llLCAmcGFjayk7CisJaWYgKHVubGlrZWx5KCFxKSkKKwkJcmV0dXJuOworCUI0M19XQVJOX09OKCFwYWNrKTsKKworCXNwaW5fbG9jaygmcS0+bG9jayk7IC8qIElSUXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuICovCisKKwliNDNfZmlsbF90eHN0YXR1c19yZXBvcnQoJihwYWNrLT50eHN0YXQpLCBzdGF0dXMpOworCisJdG90YWxfbGVuID0gcGFjay0+c2tiLT5sZW4gKyBiNDNfdHhoZHJfc2l6ZShkZXYpOworCXRvdGFsX2xlbiA9IHJvdW5kdXAodG90YWxfbGVuLCA0KTsKKwlxLT5idWZmZXJfdXNlZCAtPSB0b3RhbF9sZW47CisJcS0+ZnJlZV9wYWNrZXRfc2xvdHMgKz0gMTsKKworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYtPndsLT5odywgcGFjay0+c2tiLAorCQkJCSAgICAmKHBhY2stPnR4c3RhdCkpOworCXBhY2stPnNrYiA9IE5VTEw7CisJbGlzdF9hZGQoJnBhY2stPmxpc3QsICZxLT5wYWNrZXRzX2xpc3QpOworCisJaWYgKHEtPnN0b3BwZWQpIHsKKwkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LT53bC0+aHcsIHEtPnF1ZXVlX3ByaW8pOworCQlxLT5zdG9wcGVkID0gMDsKKwl9CisKKwlzcGluX3VubG9jaygmcS0+bG9jayk7Cit9CisKK3ZvaWQgYjQzX3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKK3sKKwljb25zdCBpbnQgbnJfcXVldWVzID0gZGV2LT53bC0+aHctPnF1ZXVlczsKKwlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHNfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3F1ZXVlczsgaSsrKSB7CisJCWRhdGEgPSAmKHN0YXRzLT5kYXRhW2ldKTsKKwkJcSA9IHNlbGVjdF9xdWV1ZV9ieV9wcmlvcml0eShkZXYsIGkpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJCWRhdGEtPmxlbiA9IEI0M19QSU9fTUFYX05SX1RYUEFDS0VUUyAtIHEtPmZyZWVfcGFja2V0X3Nsb3RzOworCQlkYXRhLT5saW1pdCA9IEI0M19QSU9fTUFYX05SX1RYUEFDS0VUUzsKKwkJZGF0YS0+Y291bnQgPSBxLT5ucl90eF9wYWNrZXRzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKiBSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIGZldGNoIGFub3RoZXIgZnJhbWUuICovCitzdGF0aWMgYm9vbCBwaW9fcnhfZnJhbWUoc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBxLT5kZXY7CisJc3RydWN0IGI0M19yeGhkcl9mdzQgcnhoZHI7CisJdTE2IGxlbjsKKwl1MzIgbWFjc3RhdDsKKwl1bnNpZ25lZCBpbnQgaSwgcGFkZGluZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWNvbnN0IGNoYXIgKmVycl9tc2cgPSBOVUxMOworCisJbWVtc2V0KCZyeGhkciwgMCwgc2l6ZW9mKHJ4aGRyKSk7CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGRhdGEgYW5kIHdhaXQgZm9yIGl0IHRvIGdldCByZWFkeS4gKi8KKwlpZiAocS0+cmV2ID49IDgpIHsKKwkJdTMyIGN0bDsKKworCQljdGwgPSBiNDNfcGlvcnhfcmVhZDMyKHEsIEI0M19QSU84X1JYQ1RMKTsKKwkJaWYgKCEoY3RsICYgQjQzX1BJTzhfUlhDVExfRlJBTUVSRFkpKQorCQkJcmV0dXJuIDA7CisJCWI0M19waW9yeF93cml0ZTMyKHEsIEI0M19QSU84X1JYQ1RMLAorCQkJCSAgQjQzX1BJTzhfUlhDVExfRlJBTUVSRFkpOworCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJY3RsID0gYjQzX3Bpb3J4X3JlYWQzMihxLCBCNDNfUElPOF9SWENUTCk7CisJCQlpZiAoY3RsICYgQjQzX1BJTzhfUlhDVExfREFUQVJEWSkKKwkJCQlnb3RvIGRhdGFfcmVhZHk7CisJCQl1ZGVsYXkoMTApOworCQl9CisJfSBlbHNlIHsKKwkJdTE2IGN0bDsKKworCQljdGwgPSBiNDNfcGlvcnhfcmVhZDE2KHEsIEI0M19QSU9fUlhDVEwpOworCQlpZiAoIShjdGwgJiBCNDNfUElPX1JYQ1RMX0ZSQU1FUkRZKSkKKwkJCXJldHVybiAwOworCQliNDNfcGlvcnhfd3JpdGUxNihxLCBCNDNfUElPX1JYQ1RMLAorCQkJCSAgQjQzX1BJT19SWENUTF9GUkFNRVJEWSk7CisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQljdGwgPSBiNDNfcGlvcnhfcmVhZDE2KHEsIEI0M19QSU9fUlhDVEwpOworCQkJaWYgKGN0bCAmIEI0M19QSU9fUlhDVExfREFUQVJEWSkKKwkJCQlnb3RvIGRhdGFfcmVhZHk7CisJCQl1ZGVsYXkoMTApOworCQl9CisJfQorCWI0M2RiZyhxLT5kZXYtPndsLCAiUElPIFJYIHRpbWVkIG91dFxuIik7CisJcmV0dXJuIDE7CitkYXRhX3JlYWR5OgorCisJLyogR2V0IHRoZSBwcmVhbWJsZSAoUlggaGVhZGVyKSAqLworCWlmIChxLT5yZXYgPj0gOCkgeworCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgJnJ4aGRyLCBzaXplb2YocnhoZHIpLAorCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU84X1JYREFUQSwKKwkJCSAgICAgICBzaXplb2YodTMyKSk7CisJfSBlbHNlIHsKKwkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsICZyeGhkciwgc2l6ZW9mKHJ4aGRyKSwKKwkJCSAgICAgICBxLT5tbWlvX2Jhc2UgKyBCNDNfUElPX1JYREFUQSwKKwkJCSAgICAgICBzaXplb2YodTE2KSk7CisJfQorCS8qIFNhbml0eSBjaGVja3MuICovCisJbGVuID0gbGUxNl90b19jcHUocnhoZHIuZnJhbWVfbGVuKTsKKwlpZiAodW5saWtlbHkobGVuID4gMHg3MDApKSB7CisJCWVycl9tc2cgPSAibGVuID4gMHg3MDAiOworCQlnb3RvIHJ4X2Vycm9yOworCX0KKwlpZiAodW5saWtlbHkobGVuID09IDApKSB7CisJCWVycl9tc2cgPSAibGVuID09IDAiOworCQlnb3RvIHJ4X2Vycm9yOworCX0KKworCW1hY3N0YXQgPSBsZTMyX3RvX2NwdShyeGhkci5tYWNfc3RhdHVzKTsKKwlpZiAobWFjc3RhdCAmIEI0M19SWF9NQUNfRkNTRVJSKSB7CisJCWlmICghKHEtPmRldi0+d2wtPmZpbHRlcl9mbGFncyAmIEZJRl9GQ1NGQUlMKSkgeworCQkJLyogRHJvcCBmcmFtZXMgd2l0aCBmYWlsZWQgRkNTLiAqLworCQkJZXJyX21zZyA9ICJGcmFtZSBGQ1MgZXJyb3IiOworCQkJZ290byByeF9lcnJvcjsKKwkJfQorCX0KKworCS8qIFdlIGFsd2F5cyBwYWQgMiBieXRlcywgYXMgdGhhdCdzIHdoYXQgdXBzdHJlYW0gY29kZSBleHBlY3RzCisJICogZHVlIHRvIHRoZSBSWC1oZWFkZXIgYmVpbmcgMzAgYnl0ZXMuIEluIGNhc2UgdGhlIGZyYW1lIGlzCisJICogdW5hbGlnbmVkLCB3ZSBwYWQgYW5vdGhlciAyIGJ5dGVzLiAqLworCXBhZGRpbmcgPSAobWFjc3RhdCAmIEI0M19SWF9NQUNfUEFERElORykgPyAyIDogMDsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIHBhZGRpbmcgKyAyKTsKKwlpZiAodW5saWtlbHkoIXNrYikpIHsKKwkJZXJyX21zZyA9ICJPdXQgb2YgbWVtb3J5IjsKKwkJZ290byByeF9lcnJvcjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwlza2JfcHV0KHNrYiwgbGVuICsgcGFkZGluZyk7CisJaWYgKHEtPnJldiA+PSA4KSB7CisJCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCBza2ItPmRhdGEgKyBwYWRkaW5nLCAobGVuICYgfjMpLAorCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU84X1JYREFUQSwKKwkJCSAgICAgICBzaXplb2YodTMyKSk7CisJCWlmIChsZW4gJiAzKSB7CisJCQl1MzIgdmFsdWU7CisJCQljaGFyICpkYXRhOworCisJCQkvKiBSZWFkIHRoZSBsYXN0IGZldyBieXRlcy4gKi8KKwkJCXZhbHVlID0gYjQzX3Bpb3J4X3JlYWQzMihxLCBCNDNfUElPOF9SWERBVEEpOworCQkJZGF0YSA9ICYoc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSk7CisJCQlzd2l0Y2ggKGxlbiAmIDMpIHsKKwkJCWNhc2UgMzoKKwkJCQkqZGF0YSA9ICh2YWx1ZSA+PiAxNik7CisJCQkJZGF0YS0tOworCQkJY2FzZSAyOgorCQkJCSpkYXRhID0gKHZhbHVlID4+IDgpOworCQkJCWRhdGEtLTsKKwkJCWNhc2UgMToKKwkJCQkqZGF0YSA9IHZhbHVlOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsIHNrYi0+ZGF0YSArIHBhZGRpbmcsIChsZW4gJiB+MSksCisJCQkgICAgICAgcS0+bW1pb19iYXNlICsgQjQzX1BJT19SWERBVEEsCisJCQkgICAgICAgc2l6ZW9mKHUxNikpOworCQlpZiAobGVuICYgMSkgeworCQkJdTE2IHZhbHVlOworCisJCQkvKiBSZWFkIHRoZSBsYXN0IGJ5dGUuICovCisJCQl2YWx1ZSA9IGI0M19waW9yeF9yZWFkMTYocSwgQjQzX1BJT19SWERBVEEpOworCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHZhbHVlOworCQl9CisJfQorCisJYjQzX3J4KHEtPmRldiwgc2tiLCAmcnhoZHIpOworCisJcmV0dXJuIDE7CisKK3J4X2Vycm9yOgorCWlmIChlcnJfbXNnKQorCQliNDNkYmcocS0+ZGV2LT53bCwgIlBJTyBSWCBlcnJvcjogJXNcbiIsIGVycl9tc2cpOworCWI0M19waW9yeF93cml0ZTE2KHEsIEI0M19QSU9fUlhDVEwsIEI0M19QSU9fUlhDVExfREFUQVJEWSk7CisJcmV0dXJuIDE7Cit9CisKKy8qIFJYIHdvcmtxdWV1ZS4gV2UgY2FuIHNsZWVwLCB5YXkhICovCitzdGF0aWMgdm9pZCBiNDNfcGlvX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGI0M19waW9fcnhxdWV1ZSwKKwkJCQkJCSByeF93b3JrKTsKKwl1bnNpZ25lZCBpbnQgYnVkZ2V0ID0gNTA7CisJYm9vbCBzdG9wOworCisJZG8geworCQlzcGluX2xvY2tfaXJxKCZxLT5sb2NrKTsKKwkJc3RvcCA9IChwaW9fcnhfZnJhbWUocSkgPT0gMCk7CisJCXNwaW5fdW5sb2NrX2lycSgmcS0+bG9jayk7CisJCWNvbmRfcmVzY2hlZCgpOworCQlpZiAoc3RvcCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKC0tYnVkZ2V0KTsKK30KKworLyogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZC4gKi8KK3ZvaWQgYjQzX3Bpb19yeChzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpxKQoreworCS8qIER1ZSB0byBsYXRlbmN5IGlzc3VlcyB3ZSBtdXN0IHJ1biB0aGUgUlggcGF0aCBpbgorCSAqIGEgd29ya3F1ZXVlIHRvIGJlIGFibGUgdG8gc2NoZWR1bGUgYmV0d2VlbiBwYWNrZXRzLiAqLworCXF1ZXVlX3dvcmsocS0+ZGV2LT53bC0+aHctPndvcmtxdWV1ZSwgJnEtPnJ4X3dvcmspOworfQorCitzdGF0aWMgdm9pZCBiNDNfcGlvX3R4X3N1c3BlbmRfcXVldWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAocS0+cmV2ID49IDgpIHsKKwkJYjQzX3Bpb3R4X3dyaXRlMzIocSwgQjQzX1BJTzhfVFhDVEwsCisJCQkJICBiNDNfcGlvdHhfcmVhZDMyKHEsIEI0M19QSU84X1RYQ1RMKQorCQkJCSAgfCBCNDNfUElPOF9UWENUTF9TVVNQUkVRKTsKKwl9IGVsc2UgeworCQliNDNfcGlvdHhfd3JpdGUxNihxLCBCNDNfUElPX1RYQ1RMLAorCQkJCSAgYjQzX3Bpb3R4X3JlYWQxNihxLCBCNDNfUElPX1RYQ1RMKQorCQkJCSAgfCBCNDNfUElPX1RYQ1RMX1NVU1BSRVEpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19waW9fdHhfcmVzdW1lX3F1ZXVlKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJaWYgKHEtPnJldiA+PSA4KSB7CisJCWI0M19waW90eF93cml0ZTMyKHEsIEI0M19QSU84X1RYQ1RMLAorCQkJCSAgYjQzX3Bpb3R4X3JlYWQzMihxLCBCNDNfUElPOF9UWENUTCkKKwkJCQkgICYgfkI0M19QSU84X1RYQ1RMX1NVU1BSRVEpOworCX0gZWxzZSB7CisJCWI0M19waW90eF93cml0ZTE2KHEsIEI0M19QSU9fVFhDVEwsCisJCQkJICBiNDNfcGlvdHhfcmVhZDE2KHEsIEI0M19QSU9fVFhDVEwpCisJCQkJICAmIH5CNDNfUElPX1RYQ1RMX1NVU1BSRVEpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgYjQzX3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwliNDNfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKGRldiwgQjQzX1BTX0FXQUtFKTsKKwliNDNfcGlvX3R4X3N1c3BlbmRfcXVldWUoZGV2LT5waW8udHhfcXVldWVfQUNfQkspOworCWI0M19waW9fdHhfc3VzcGVuZF9xdWV1ZShkZXYtPnBpby50eF9xdWV1ZV9BQ19CRSk7CisJYjQzX3Bpb190eF9zdXNwZW5kX3F1ZXVlKGRldi0+cGlvLnR4X3F1ZXVlX0FDX1ZJKTsKKwliNDNfcGlvX3R4X3N1c3BlbmRfcXVldWUoZGV2LT5waW8udHhfcXVldWVfQUNfVk8pOworCWI0M19waW9fdHhfc3VzcGVuZF9xdWV1ZShkZXYtPnBpby50eF9xdWV1ZV9tY2FzdCk7Cit9CisKK3ZvaWQgYjQzX3Bpb190eF9yZXN1bWUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWI0M19waW9fdHhfcmVzdW1lX3F1ZXVlKGRldi0+cGlvLnR4X3F1ZXVlX21jYXN0KTsKKwliNDNfcGlvX3R4X3Jlc3VtZV9xdWV1ZShkZXYtPnBpby50eF9xdWV1ZV9BQ19WTyk7CisJYjQzX3Bpb190eF9yZXN1bWVfcXVldWUoZGV2LT5waW8udHhfcXVldWVfQUNfVkkpOworCWI0M19waW9fdHhfcmVzdW1lX3F1ZXVlKGRldi0+cGlvLnR4X3F1ZXVlX0FDX0JFKTsKKwliNDNfcGlvX3R4X3Jlc3VtZV9xdWV1ZShkZXYtPnBpby50eF9xdWV1ZV9BQ19CSyk7CisJYjQzX3Bvd2VyX3NhdmluZ19jdGxfYml0cyhkZXYsIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWM2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmgKQEAgLTAsMCArMSwyMjAgQEAKKyNpZm5kZWYgQjQzX1BJT19IXworI2RlZmluZSBCNDNfUElPX0hfCisKKyNpbmNsdWRlICJiNDMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisKKy8qKiogUmVnaXN0ZXJzIGZvciBQSU8gcXVldWVzIHVwIHRvIHJldmlzaW9uIDcuICoqKi8KKy8qIFRYIHF1ZXVlLiAqLworI2RlZmluZSBCNDNfUElPX1RYQ1RMCQkJMHgwMAorI2RlZmluZSAgQjQzX1BJT19UWENUTF9XUklURUxPCQkweDAwMDEKKyNkZWZpbmUgIEI0M19QSU9fVFhDVExfV1JJVEVISQkJMHgwMDAyCisjZGVmaW5lICBCNDNfUElPX1RYQ1RMX0VPRgkJMHgwMDA0CisjZGVmaW5lICBCNDNfUElPX1RYQ1RMX0ZSRUFEWQkJMHgwMDA4CisjZGVmaW5lICBCNDNfUElPX1RYQ1RMX0ZMVVNIUkVRCQkweDAwMjAKKyNkZWZpbmUgIEI0M19QSU9fVFhDVExfRkxVU0hQRU5ECTB4MDA0MAorI2RlZmluZSAgQjQzX1BJT19UWENUTF9TVVNQUkVRCQkweDAwODAKKyNkZWZpbmUgIEI0M19QSU9fVFhDVExfUVNVU1AJCTB4MDEwMAorI2RlZmluZSAgQjQzX1BJT19UWENUTF9DT01NQ05UCQkweEZDMDAKKyNkZWZpbmUgIEI0M19QSU9fVFhDVExfQ09NTUNOVF9TSElGVAkxMAorI2RlZmluZSBCNDNfUElPX1RYREFUQQkJCTB4MDIKKyNkZWZpbmUgQjQzX1BJT19UWFFCVUZTSVpFCQkweDA0CisvKiBSWCBxdWV1ZS4gKi8KKyNkZWZpbmUgQjQzX1BJT19SWENUTAkJCTB4MDAKKyNkZWZpbmUgIEI0M19QSU9fUlhDVExfRlJBTUVSRFkJCTB4MDAwMQorI2RlZmluZSAgQjQzX1BJT19SWENUTF9EQVRBUkRZCQkweDAwMDIKKyNkZWZpbmUgQjQzX1BJT19SWERBVEEJCQkweDAyCisKKy8qKiogUmVnaXN0ZXJzIGZvciBQSU8gcXVldWVzIHJldmlzaW9uIDggYW5kIGxhdGVyLiAqKiovCisvKiBUWCBxdWV1ZSAqLworI2RlZmluZSBCNDNfUElPOF9UWENUTAkJCTB4MDAKKyNkZWZpbmUgIEI0M19QSU84X1RYQ1RMXzBfNwkJMHgwMDAwMDAwMQorI2RlZmluZSAgQjQzX1BJTzhfVFhDVExfOF8xNQkJMHgwMDAwMDAwMgorI2RlZmluZSAgQjQzX1BJTzhfVFhDVExfMTZfMjMJCTB4MDAwMDAwMDQKKyNkZWZpbmUgIEI0M19QSU84X1RYQ1RMXzI0XzMxCQkweDAwMDAwMDA4CisjZGVmaW5lICBCNDNfUElPOF9UWENUTF9FT0YJCTB4MDAwMDAwMTAKKyNkZWZpbmUgIEI0M19QSU84X1RYQ1RMX0ZSRUFEWQkJMHgwMDAwMDA4MAorI2RlZmluZSAgQjQzX1BJTzhfVFhDVExfU1VTUFJFUQkJMHgwMDAwMDEwMAorI2RlZmluZSAgQjQzX1BJTzhfVFhDVExfUVNVU1AJCTB4MDAwMDAyMDAKKyNkZWZpbmUgIEI0M19QSU84X1RYQ1RMX0ZMVVNIUkVRCTB4MDAwMDA0MDAKKyNkZWZpbmUgIEI0M19QSU84X1RYQ1RMX0ZMVVNIUEVORAkweDAwMDAwODAwCisjZGVmaW5lIEI0M19QSU84X1RYREFUQQkJCTB4MDQKKy8qIFJYIHF1ZXVlICovCisjZGVmaW5lIEI0M19QSU84X1JYQ1RMCQkJMHgwMAorI2RlZmluZSAgQjQzX1BJTzhfUlhDVExfRlJBTUVSRFkJMHgwMDAwMDAwMQorI2RlZmluZSAgQjQzX1BJTzhfUlhDVExfREFUQVJEWQkJMHgwMDAwMDAwMgorI2RlZmluZSBCNDNfUElPOF9SWERBVEEJCQkweDA0CisKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIFRYLXBhY2tldHMgdGhlIEhXIGNhbiBoYW5kbGUuICovCisjZGVmaW5lIEI0M19QSU9fTUFYX05SX1RYUEFDS0VUUwkzMgorCisKKyNpZmRlZiBDT05GSUdfQjQzX1BJTworCitzdHJ1Y3QgYjQzX3Bpb190eHBhY2tldCB7CisJLyogUG9pbnRlciB0byB0aGUgVFggcXVldWUgd2UgYmVsb25nIHRvLiAqLworCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnF1ZXVlOworCS8qIFRoZSBUWCBkYXRhIHBhY2tldC4gKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCS8qIFRoZSBzdGF0dXMgbWV0YSBkYXRhLiAqLworCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHR4c3RhdDsKKwkvKiBJbmRleCBpbiB0aGUgKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUpLT5wYWNrZXRzIGFycmF5LiAqLworCXU4IGluZGV4OworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGI0M19waW9fdHhxdWV1ZSB7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCXNwaW5sb2NrX3QgbG9jazsKKwl1MTYgbW1pb19iYXNlOworCisJLyogVGhlIGRldmljZSBxdWV1ZSBidWZmZXIgc2l6ZSBpbiBieXRlcy4gKi8KKwl1MTYgYnVmZmVyX3NpemU7CisJLyogVGhlIG51bWJlciBvZiB1c2VkIGJ5dGVzIGluIHRoZSBkZXZpY2UgcXVldWUgYnVmZmVyLiAqLworCXUxNiBidWZmZXJfdXNlZDsKKwkvKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBjYW4gc3RpbGwgZ2V0IHF1ZXVlZC4KKwkgKiBUaGlzIGlzIGRlY3JlbWVudGVkIG9uIHF1ZXVlaW5nIGEgcGFja2V0IGFuZCBpbmNyZW1lbnRlZAorCSAqIGFmdGVyIHJlY2VpdmluZyB0aGUgdHJhbnNtaXQgc3RhdHVzLiAqLworCXUxNiBmcmVlX3BhY2tldF9zbG90czsKKworCS8qIFRydWUsIGlmIHRoZSBtYWM4MDIxMSBxdWV1ZSB3YXMgc3RvcHBlZCBkdWUgdG8gb3ZlcmZsb3cgYXQgVFguICovCisJYm9vbCBzdG9wcGVkOworCS8qIE91ciBiNDMgcXVldWUgaW5kZXggbnVtYmVyICovCisJdTggaW5kZXg7CisJLyogVGhlIG1hYzgwMjExIFFvUyBxdWV1ZSBwcmlvcml0eS4gKi8KKwl1OCBxdWV1ZV9wcmlvOworCisJLyogQnVmZmVyIGZvciBUWCBwYWNrZXQgbWV0YSBkYXRhLiAqLworCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0IHBhY2tldHNbQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBhY2tldHNfbGlzdDsKKworCS8qIFRvdGFsIG51bWJlciBvZiB0cmFuc21pdHRlZCBwYWNrZXRzLiAqLworCXVuc2lnbmVkIGludCBucl90eF9wYWNrZXRzOworCisJLyogU2hvcnRjdXQgdG8gdGhlIDgwMi4xMSBjb3JlIHJldmlzaW9uLiBUaGlzIGlzIHRvCisJICogYXZvaWQgaG9ycmlibGUgcG9pbnRlciBkZXJlZmVyZW5jaW5nIGluIHRoZSBmYXN0cGF0aHMuICovCisJdTggcmV2OworfTsKKworc3RydWN0IGI0M19waW9fcnhxdWV1ZSB7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCXNwaW5sb2NrX3QgbG9jazsKKwl1MTYgbW1pb19iYXNlOworCisJLyogV29yayB0byByZWR1Y2UgbGF0ZW5jeSBpc3N1ZXMgb24gUlguICovCisJc3RydWN0IHdvcmtfc3RydWN0IHJ4X3dvcms7CisKKwkvKiBTaG9ydGN1dCB0byB0aGUgODAyLjExIGNvcmUgcmV2aXNpb24uIFRoaXMgaXMgdG8KKwkgKiBhdm9pZCBob3JyaWJsZSBwb2ludGVyIGRlcmVmZXJlbmNpbmcgaW4gdGhlIGZhc3RwYXRocy4gKi8KKwl1OCByZXY7Cit9OworCisKK3N0YXRpYyBpbmxpbmUgdTE2IGI0M19waW90eF9yZWFkMTYoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gYjQzX3JlYWQxNihxLT5kZXYsIHEtPm1taW9fYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGI0M19waW90eF9yZWFkMzIoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gYjQzX3JlYWQzMihxLT5kZXYsIHEtPm1taW9fYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvdHhfd3JpdGUxNihzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxLAorCQkJCSAgICAgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQoreworCWI0M193cml0ZTE2KHEtPmRldiwgcS0+bW1pb19iYXNlICsgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvdHhfd3JpdGUzMihzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxLAorCQkJCSAgICAgdTE2IG9mZnNldCwgdTMyIHZhbHVlKQoreworCWI0M193cml0ZTMyKHEtPmRldiwgcS0+bW1pb19iYXNlICsgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKKworc3RhdGljIGlubGluZSB1MTYgYjQzX3Bpb3J4X3JlYWQxNihzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpxLCB1MTYgb2Zmc2V0KQoreworCXJldHVybiBiNDNfcmVhZDE2KHEtPmRldiwgcS0+bW1pb19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgYjQzX3Bpb3J4X3JlYWQzMihzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpxLCB1MTYgb2Zmc2V0KQoreworCXJldHVybiBiNDNfcmVhZDMyKHEtPmRldiwgcS0+bW1pb19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9yeF93cml0ZTE2KHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEsCisJCQkJICAgICB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCit7CisJYjQzX3dyaXRlMTYocS0+ZGV2LCBxLT5tbWlvX2Jhc2UgKyBvZmZzZXQsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9yeF93cml0ZTMyKHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEsCisJCQkJICAgICB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJYjQzX3dyaXRlMzIocS0+ZGV2LCBxLT5tbWlvX2Jhc2UgKyBvZmZzZXQsIHZhbHVlKTsKK30KKworCitpbnQgYjQzX3Bpb19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19waW9fc3RvcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBiNDNfcGlvX2ZyZWUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKKworaW50IGI0M19waW9fdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAorCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCk7Cit2b2lkIGI0M19waW9faGFuZGxlX3R4c3RhdHVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKTsKK3ZvaWQgYjQzX3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7Cit2b2lkIGI0M19waW9fcngoc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSk7CisKK3ZvaWQgYjQzX3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19waW9fdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CisKKworI2Vsc2UgLyogQ09ORklHX0I0M19QSU8gKi8KKworCitzdGF0aWMgaW5saW5lIGludCBiNDNfcGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fZnJlZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYjQzX3Bpb19zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IGI0M19waW9fdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cykKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2dldF90eF9zdGF0cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fcngoc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX3R4X3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCisjZW5kaWYgLyogQjQzX1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYwppbmRleCBmNGZhZmY2Li4yNzUwOTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYwpAQCAtNDcsMjkgKzQ3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGdldF9ib29sZWFuKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWlmIChjb3VudCAhPSAwKSB7Ci0JCWlmIChidWZbMF0gPT0gJzEnKQotCQkJcmV0dXJuIDE7Ci0JCWlmIChidWZbMF0gPT0gJzAnKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChjb3VudCA+PSA0ICYmIG1lbWNtcChidWYsICJ0cnVlIiwgNCkgPT0gMCkKLQkJCXJldHVybiAxOwotCQlpZiAoY291bnQgPj0gNSAmJiBtZW1jbXAoYnVmLCAiZmFsc2UiLCA1KSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChjb3VudCA+PSAzICYmIG1lbWNtcChidWYsICJ5ZXMiLCAzKSA9PSAwKQotCQkJcmV0dXJuIDE7Ci0JCWlmIChjb3VudCA+PSAyICYmIG1lbWNtcChidWYsICJubyIsIDIpID09IDApCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGNvdW50ID49IDIgJiYgbWVtY21wKGJ1ZiwgIm9uIiwgMikgPT0gMCkKLQkJCXJldHVybiAxOwotCQlpZiAoY291bnQgPj0gMyAmJiBtZW1jbXAoYnVmLCAib2ZmIiwgMykgPT0gMCkKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogc3RhdGljIHNzaXplX3QgYjQzX2F0dHJfaW50ZXJmbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCWNoYXIgKmJ1ZikKQEAgLTE1NSw4MiArMTMyLDE4IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJmZXJlbmNlLCAwNjQ0LAogCQkgICBiNDNfYXR0cl9pbnRlcmZtb2RlX3Nob3csIGI0M19hdHRyX2ludGVyZm1vZGVfc3RvcmUpOwogCi1zdGF0aWMgc3NpemVfdCBiNDNfYXR0cl9wcmVhbWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBiNDNfd2xkZXYgKndsZGV2ID0gZGV2X3RvX2I0M193bGRldihkZXYpOwotCXNzaXplX3QgY291bnQ7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQltdXRleF9sb2NrKCZ3bGRldi0+d2wtPm11dGV4KTsKLQotCWlmICh3bGRldi0+c2hvcnRfcHJlYW1ibGUpCi0JCWNvdW50ID0KLQkJICAgIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMSAoU2hvcnQgUHJlYW1ibGUgZW5hYmxlZClcbiIpOwotCWVsc2UKLQkJY291bnQgPQotCQkgICAgc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwIChTaG9ydCBQcmVhbWJsZSBkaXNhYmxlZClcbiIpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3bGRldi0+d2wtPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgYjQzX2F0dHJfcHJlYW1ibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGI0M193bGRldiAqd2xkZXYgPSBkZXZfdG9fYjQzX3dsZGV2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdmFsdWU7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQl2YWx1ZSA9IGdldF9ib29sZWFuKGJ1ZiwgY291bnQpOwotCWlmICh2YWx1ZSA8IDApCi0JCXJldHVybiB2YWx1ZTsKLQltdXRleF9sb2NrKCZ3bGRldi0+d2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2xkZXYtPndsLT5pcnFfbG9jaywgZmxhZ3MpOwotCi0Jd2xkZXYtPnNob3J0X3ByZWFtYmxlID0gISF2YWx1ZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsZGV2LT53bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJndsZGV2LT53bC0+bXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoc2hvcnRwcmVhbWJsZSwgMDY0NCwKLQkJICAgYjQzX2F0dHJfcHJlYW1ibGVfc2hvdywgYjQzX2F0dHJfcHJlYW1ibGVfc3RvcmUpOwotCiBpbnQgYjQzX3N5c2ZzX3JlZ2lzdGVyKHN0cnVjdCBiNDNfd2xkZXYgKndsZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHdsZGV2LT5kZXYtPmRldjsKLQlpbnQgZXJyOwogCiAJQjQzX1dBUk5fT04oYjQzX3N0YXR1cyh3bGRldikgIT0gQjQzX1NUQVRfSU5JVElBTElaRUQpOwogCi0JZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2ludGVyZmVyZW5jZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0JZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlbW92ZV9pbnRlcmZtb2RlOwotCi0gICAgICBvdXQ6Ci0JcmV0dXJuIGVycjsKLSAgICAgIGVycl9yZW1vdmVfaW50ZXJmbW9kZToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW50ZXJmZXJlbmNlKTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2ludGVyZmVyZW5jZSk7CiB9CiAKIHZvaWQgYjQzX3N5c2ZzX3VucmVnaXN0ZXIoc3RydWN0IGI0M193bGRldiAqd2xkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2xkZXYtPmRldi0+ZGV2OwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOwogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnRlcmZlcmVuY2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwppbmRleCBlNjMyMTI1Li5kYWE5NDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwpAQCAtMjA0LDQyICsyMDQsNDMgQEAKIAkJYjQzX29mZG10YWJfd3JpdGUzMihkZXYsIEI0M19PRkRNVEFCX1JPVE9SLCBpLCBiNDNfdGFiX3JvdG9yW2ldKTsKIH0KIAorc3RhdGljIHZvaWQgYjQzX3dyaXRlX251bGxfbnN0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBCNDNfVEFCX05PSVNFU0NBTEVfU0laRTsgaSsrKQorCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTk9JU0VTQ0FMRSwgaSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGI0M193cml0ZV9uc3Qoc3RydWN0IGI0M193bGRldiAqZGV2LCBjb25zdCB1MTYgKm5zdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBCNDNfVEFCX05PSVNFU0NBTEVfU0laRTsgaSsrKQorCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTk9JU0VTQ0FMRSwgaSwgbnN0W2ldKTsKK30KKwogc3RhdGljIHZvaWQgYjQzX3dhX25zdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpIC8qIE5vaXNlIHNjYWxlIHRhYmxlICovCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQlpbnQgaTsKIAogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkgewogCQlpZiAocGh5LT5yZXYgPD0gMSkKLQkJCWZvciAoaSA9IDA7IGkgPCBCNDNfVEFCX05PSVNFU0NBTEVfU0laRTsgaSsrKQotCQkJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9OT0lTRVNDQUxFLAotCQkJCQkJCWksIDApOworCQkJYjQzX3dyaXRlX251bGxfbnN0KGRldik7CiAJCWVsc2UgaWYgKHBoeS0+cmV2ID09IDIpCi0JCQlmb3IgKGkgPSAwOyBpIDwgQjQzX1RBQl9OT0lTRVNDQUxFX1NJWkU7IGkrKykKLQkJCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTk9JU0VTQ0FMRSwKLQkJCQkJCQlpLCBiNDNfdGFiX25vaXNlc2NhbGVhMltpXSk7CisJCQliNDNfd3JpdGVfbnN0KGRldiwgYjQzX3RhYl9ub2lzZXNjYWxlYTIpOwogCQllbHNlIGlmIChwaHktPnJldiA9PSAzKQotCQkJZm9yIChpID0gMDsgaSA8IEI0M19UQUJfTk9JU0VTQ0FMRV9TSVpFOyBpKyspCi0JCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX05PSVNFU0NBTEUsCi0JCQkJCQkJaSwgYjQzX3RhYl9ub2lzZXNjYWxlYTNbaV0pOworCQkJYjQzX3dyaXRlX25zdChkZXYsIGI0M190YWJfbm9pc2VzY2FsZWEzKTsKIAkJZWxzZQotCQkJZm9yIChpID0gMDsgaSA8IEI0M19UQUJfTk9JU0VTQ0FMRV9TSVpFOyBpKyspCi0JCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX05PSVNFU0NBTEUsCi0JCQkJCQkJaSwgYjQzX3RhYl9ub2lzZXNjYWxlZzNbaV0pOworCQkJYjQzX3dyaXRlX25zdChkZXYsIGI0M190YWJfbm9pc2VzY2FsZWczKTsKIAl9IGVsc2UgewogCQlpZiAocGh5LT5yZXYgPj0gNikgewogCQkJaWYgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRU5DT1JFKSAmIEI0M19QSFlfRU5DT1JFX0VOKQotCQkJCWZvciAoaSA9IDA7IGkgPCBCNDNfVEFCX05PSVNFU0NBTEVfU0laRTsgaSsrKQotCQkJCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTk9JU0VTQ0FMRSwKLQkJCQkJCWksIGI0M190YWJfbm9pc2VzY2FsZWczW2ldKTsKKwkJCQliNDNfd3JpdGVfbnN0KGRldiwgYjQzX3RhYl9ub2lzZXNjYWxlZzMpOwogCQkJZWxzZQotCQkJCWZvciAoaSA9IDA7IGkgPCBCNDNfVEFCX05PSVNFU0NBTEVfU0laRTsgaSsrKQotCQkJCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTk9JU0VTQ0FMRSwKLQkJCQkJCWksIGI0M190YWJfbm9pc2VzY2FsZWcyW2ldKTsKKwkJCQliNDNfd3JpdGVfbnN0KGRldiwgYjQzX3RhYl9ub2lzZXNjYWxlZzIpOwogCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8IEI0M19UQUJfTk9JU0VTQ0FMRV9TSVpFOyBpKyspCi0JCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX05PSVNFU0NBTEUsCi0JCQkJCQkJaSwgYjQzX3RhYl9ub2lzZXNjYWxlZzFbaV0pOworCQkJYjQzX3dyaXRlX25zdChkZXYsIGI0M190YWJfbm9pc2VzY2FsZWcxKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCmluZGV4IDdjYWEyNmUuLjE5YWVmYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwpAQCAtMzAsNDggKzMwLDUxIEBACiAjaW5jbHVkZSAieG1pdC5oIgogI2luY2x1ZGUgInBoeS5oIgogI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgInBpby5oIgogCiAKLS8qIEV4dHJhY3QgdGhlIGJpdHJhdGUgb3V0IG9mIGEgQ0NLIFBMQ1AgaGVhZGVyLiAqLwotc3RhdGljIHU4IGI0M19wbGNwX2dldF9iaXRyYXRlX2NjayhzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCkKKy8qIEV4dHJhY3QgdGhlIGJpdHJhdGUgaW5kZXggb3V0IG9mIGEgQ0NLIFBMQ1AgaGVhZGVyLiAqLworc3RhdGljIGludCBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfY2NrKHN0cnVjdCBiNDNfcGxjcF9oZHI2ICpwbGNwKQogewogCXN3aXRjaCAocGxjcC0+cmF3WzBdKSB7CiAJY2FzZSAweDBBOgotCQlyZXR1cm4gQjQzX0NDS19SQVRFXzFNQjsKKwkJcmV0dXJuIDA7CiAJY2FzZSAweDE0OgotCQlyZXR1cm4gQjQzX0NDS19SQVRFXzJNQjsKKwkJcmV0dXJuIDE7CiAJY2FzZSAweDM3OgotCQlyZXR1cm4gQjQzX0NDS19SQVRFXzVNQjsKKwkJcmV0dXJuIDI7CiAJY2FzZSAweDZFOgotCQlyZXR1cm4gQjQzX0NDS19SQVRFXzExTUI7CisJCXJldHVybiAzOwogCX0KIAlCNDNfV0FSTl9PTigxKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gLTE7CiB9CiAKLS8qIEV4dHJhY3QgdGhlIGJpdHJhdGUgb3V0IG9mIGFuIE9GRE0gUExDUCBoZWFkZXIuICovCi1zdGF0aWMgdTggYjQzX3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbShzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCkKKy8qIEV4dHJhY3QgdGhlIGJpdHJhdGUgaW5kZXggb3V0IG9mIGFuIE9GRE0gUExDUCBoZWFkZXIuICovCitzdGF0aWMgdTggYjQzX3BsY3BfZ2V0X2JpdHJhdGVfaWR4X29mZG0oc3RydWN0IGI0M19wbGNwX2hkcjYgKnBsY3AsIGJvb2wgYXBoeSkKIHsKKwlpbnQgYmFzZSA9IGFwaHkgPyAwIDogNDsKKwogCXN3aXRjaCAocGxjcC0+cmF3WzBdICYgMHhGKSB7CiAJY2FzZSAweEI6Ci0JCXJldHVybiBCNDNfT0ZETV9SQVRFXzZNQjsKKwkJcmV0dXJuIGJhc2UgKyAwOwogCWNhc2UgMHhGOgotCQlyZXR1cm4gQjQzX09GRE1fUkFURV85TUI7CisJCXJldHVybiBiYXNlICsgMTsKIAljYXNlIDB4QToKLQkJcmV0dXJuIEI0M19PRkRNX1JBVEVfMTJNQjsKKwkJcmV0dXJuIGJhc2UgKyAyOwogCWNhc2UgMHhFOgotCQlyZXR1cm4gQjQzX09GRE1fUkFURV8xOE1COworCQlyZXR1cm4gYmFzZSArIDM7CiAJY2FzZSAweDk6Ci0JCXJldHVybiBCNDNfT0ZETV9SQVRFXzI0TUI7CisJCXJldHVybiBiYXNlICsgNDsKIAljYXNlIDB4RDoKLQkJcmV0dXJuIEI0M19PRkRNX1JBVEVfMzZNQjsKKwkJcmV0dXJuIGJhc2UgKyA1OwogCWNhc2UgMHg4OgotCQlyZXR1cm4gQjQzX09GRE1fUkFURV80OE1COworCQlyZXR1cm4gYmFzZSArIDY7CiAJY2FzZSAweEM6Ci0JCXJldHVybiBCNDNfT0ZETV9SQVRFXzU0TUI7CisJCXJldHVybiBiYXNlICsgNzsKIAl9CiAJQjQzX1dBUk5fT04oMSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC0xOwogfQogCiB1OCBiNDNfcGxjcF9nZXRfcmF0ZWNvZGVfY2NrKGNvbnN0IHU4IGJpdHJhdGUpCkBAIC0xOTEsNiArMTk0LDcgQEAKIAkgICAgKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICopZnJhZ21lbnRfZGF0YTsKIAlpbnQgdXNlX2VuY3J5cHRpb24gPSAoISh0eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQpKTsKIAl1MTYgZmN0bCA9IGxlMTZfdG9fY3B1KHdsaGRyLT5mcmFtZV9jb250cm9sKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmZicmF0ZTsKIAl1OCByYXRlLCByYXRlX2ZiOwogCWludCByYXRlX29mZG0sIHJhdGVfZmJfb2ZkbTsKIAl1bnNpZ25lZCBpbnQgcGxjcF9mcmFnbWVudF9sZW47CkBAIC0yMDAsOSArMjA0LDExIEBACiAKIAltZW1zZXQodHhoZHIsIDAsIHNpemVvZigqdHhoZHIpKTsKIAotCXJhdGUgPSB0eGN0bC0+dHhfcmF0ZTsKKwlXQVJOX09OKCF0eGN0bC0+dHhfcmF0ZSk7CisJcmF0ZSA9IHR4Y3RsLT50eF9yYXRlID8gdHhjdGwtPnR4X3JhdGUtPmh3X3ZhbHVlIDogQjQzX0NDS19SQVRFXzFNQjsKIAlyYXRlX29mZG0gPSBiNDNfaXNfb2ZkbV9yYXRlKHJhdGUpOwotCXJhdGVfZmIgPSAodHhjdGwtPmFsdF9yZXRyeV9yYXRlID09IC0xKSA/IHJhdGUgOiB0eGN0bC0+YWx0X3JldHJ5X3JhdGU7CisJZmJyYXRlID0gdHhjdGwtPmFsdF9yZXRyeV9yYXRlID8gOiB0eGN0bC0+dHhfcmF0ZTsKKwlyYXRlX2ZiID0gZmJyYXRlLT5od192YWx1ZTsKIAlyYXRlX2ZiX29mZG0gPSBiNDNfaXNfb2ZkbV9yYXRlKHJhdGVfZmIpOwogCiAJaWYgKHJhdGVfb2ZkbSkKQEAgLTIyMSwxMSArMjI3LDEwIEBACiAJCSAqIHVzZSB0aGUgb3JpZ2luYWwgZHVyX2lkIGZpZWxkLiAqLwogCQl0eGhkci0+ZHVyX2ZiID0gd2xoZHItPmR1cmF0aW9uX2lkOwogCX0gZWxzZSB7Ci0JCWludCBmYnJhdGVfYmFzZTEwMGticHMgPSBCNDNfUkFURV9UT19CQVNFMTAwS0JQUyhyYXRlX2ZiKTsKIAkJdHhoZHItPmR1cl9mYiA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKGRldi0+d2wtPmh3LAogCQkJCQkJCQkgdHhjdGwtPnZpZiwKIAkJCQkJCQkJIGZyYWdtZW50X2xlbiwKLQkJCQkJCQkJIGZicmF0ZV9iYXNlMTAwa2Jwcyk7CisJCQkJCQkJCSBmYnJhdGUpOwogCX0KIAogCXBsY3BfZnJhZ21lbnRfbGVuID0gZnJhZ21lbnRfbGVuICsgRkNTX0xFTjsKQEAgLTI4Nyw3ICsyOTIsNyBAQAogCQlwaHlfY3RsIHw9IEI0M19UWEhfUEhZX0VOQ19PRkRNOwogCWVsc2UKIAkJcGh5X2N0bCB8PSBCNDNfVFhIX1BIWV9FTkNfQ0NLOwotCWlmIChkZXYtPnNob3J0X3ByZWFtYmxlKQorCWlmICh0eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEUpCiAJCXBoeV9jdGwgfD0gQjQzX1RYSF9QSFlfU0hPUlRQUk1CTDsKIAogCXN3aXRjaCAoYjQzX2llZWU4MDIxMV9hbnRlbm5hX3Nhbml0aXplKGRldiwgdHhjdGwtPmFudGVubmFfc2VsX3R4KSkgewpAQCAtMzMyLDcgKzMzNyw4IEBACiAJCWludCBydHNfcmF0ZV9vZmRtLCBydHNfcmF0ZV9mYl9vZmRtOwogCQlzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcDsKIAotCQlydHNfcmF0ZSA9IHR4Y3RsLT5ydHNfY3RzX3JhdGU7CisJCVdBUk5fT04oIXR4Y3RsLT5ydHNfY3RzX3JhdGUpOworCQlydHNfcmF0ZSA9IHR4Y3RsLT5ydHNfY3RzX3JhdGUgPyB0eGN0bC0+cnRzX2N0c19yYXRlLT5od192YWx1ZSA6IEI0M19DQ0tfUkFURV8xTUI7CiAJCXJ0c19yYXRlX29mZG0gPSBiNDNfaXNfb2ZkbV9yYXRlKHJ0c19yYXRlKTsKIAkJcnRzX3JhdGVfZmIgPSBiNDNfY2FsY19mYWxsYmFja19yYXRlKHJ0c19yYXRlKTsKIAkJcnRzX3JhdGVfZmJfb2ZkbSA9IGI0M19pc19vZmRtX3JhdGUocnRzX3JhdGVfZmIpOwpAQCAtNTA2LDcgKzUxMiw3IEBACiAJdTE2IHBoeXN0YXQwLCBwaHlzdGF0MywgY2hhbnN0YXQsIG1hY3RpbWU7CiAJdTMyIG1hY3N0YXQ7CiAJdTE2IGNoYW5pZDsKLQl1OCBqc3NpOworCXUxNiBwaHl0eXBlOwogCWludCBwYWRkaW5nOwogCiAJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKQEAgLTUxNCwxMCArNTIwLDEwIEBACiAJLyogR2V0IG1ldGFkYXRhIGFib3V0IHRoZSBmcmFtZSBmcm9tIHRoZSBoZWFkZXIuICovCiAJcGh5c3RhdDAgPSBsZTE2X3RvX2NwdShyeGhkci0+cGh5X3N0YXR1czApOwogCXBoeXN0YXQzID0gbGUxNl90b19jcHUocnhoZHItPnBoeV9zdGF0dXMzKTsKLQlqc3NpID0gcnhoZHItPmpzc2k7CiAJbWFjc3RhdCA9IGxlMzJfdG9fY3B1KHJ4aGRyLT5tYWNfc3RhdHVzKTsKIAltYWN0aW1lID0gbGUxNl90b19jcHUocnhoZHItPm1hY190aW1lKTsKIAljaGFuc3RhdCA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5jaGFubmVsKTsKKwlwaHl0eXBlID0gY2hhbnN0YXQgJiBCNDNfUlhfQ0hBTl9QSFlUWVBFOwogCiAJaWYgKG1hY3N0YXQgJiBCNDNfUlhfTUFDX0ZDU0VSUikKIAkJZGV2LT53bC0+aWVlZV9zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQrKzsKQEAgLTU2NywyNiArNTczLDQwIEBACiAJCX0KIAl9CiAKLQlzdGF0dXMuc3NpID0gYjQzX3Jzc2lfcG9zdHByb2Nlc3MoZGV2LCBqc3NpLAotCQkJCQkgIChwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfT0ZETSksCi0JCQkJCSAgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9HQUlOQ1RMKSwKLQkJCQkJICAocGh5c3RhdDMgJiBCNDNfUlhfUEhZU1QzX1RSU1RBVEUpKTsKKwkvKiBMaW5rIHF1YWxpdHkgc3RhdGlzdGljcyAqLwogCXN0YXR1cy5ub2lzZSA9IGRldi0+c3RhdHMubGlua19ub2lzZTsKLQkvKiB0aGUgbmV4dCBsaW5lIGxvb2tzIHdyb25nLCBidXQgaXMgd2hhdCBtYWM4MDIxMSB3YW50cyAqLwotCXN0YXR1cy5zaWduYWwgPSAoanNzaSAqIDEwMCkgLyBCNDNfUlhfTUFYX1NTSTsKKwlpZiAoKGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fUEhZVFlQRSkgPT0gQjQzX1BIWVRZUEVfTikgeworLy8JCXM4IHJzc2kgPSBtYXgocnhoZHItPnBvd2VyMCwgcnhoZHItPnBvd2VyMSk7CisJCS8vVE9ETzogRmluZCBvdXQgd2hhdCB0aGUgcnNzaSB2YWx1ZSBpcyAoZEJtIG9yIHBlcmNlbnRhZ2U/KQorCQkvLyAgICAgIGFuZCBhbHNvIGZpbmQgb3V0IHdoYXQgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUgaXMuCisJCS8vICAgICAgRmlsbCBzdGF0dXMuc3NpIGFuZCBzdGF0dXMuc2lnbmFsIGZpZWxkcy4KKwl9IGVsc2UgeworCQlzdGF0dXMuc3NpID0gYjQzX3Jzc2lfcG9zdHByb2Nlc3MoZGV2LCByeGhkci0+anNzaSwKKwkJCQkJCSAgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9PRkRNKSwKKwkJCQkJCSAgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9HQUlOQ1RMKSwKKwkJCQkJCSAgKHBoeXN0YXQzICYgQjQzX1JYX1BIWVNUM19UUlNUQVRFKSk7CisJCS8qIHRoZSBuZXh0IGxpbmUgbG9va3Mgd3JvbmcsIGJ1dCBpcyB3aGF0IG1hYzgwMjExIHdhbnRzICovCisJCXN0YXR1cy5zaWduYWwgPSAocnhoZHItPmpzc2kgKiAxMDApIC8gQjQzX1JYX01BWF9TU0k7CisJfQorCiAJaWYgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9PRkRNKQotCQlzdGF0dXMucmF0ZSA9IGI0M19wbGNwX2dldF9iaXRyYXRlX29mZG0ocGxjcCk7CisJCXN0YXR1cy5yYXRlX2lkeCA9IGI0M19wbGNwX2dldF9iaXRyYXRlX2lkeF9vZmRtKHBsY3AsCisJCQkJCQlwaHl0eXBlID09IEI0M19QSFlUWVBFX0EpOwogCWVsc2UKLQkJc3RhdHVzLnJhdGUgPSBiNDNfcGxjcF9nZXRfYml0cmF0ZV9jY2socGxjcCk7CisJCXN0YXR1cy5yYXRlX2lkeCA9IGI0M19wbGNwX2dldF9iaXRyYXRlX2lkeF9jY2socGxjcCk7CiAJc3RhdHVzLmFudGVubmEgPSAhIShwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfQU5UKTsKIAogCS8qCi0JICogSWYgbW9uaXRvcnMgYXJlIHByZXNlbnQgZ2V0IGZ1bGwgNjQtYml0IHRpbWVzdGFtcC4gVGhpcwotCSAqIGNvZGUgYXNzdW1lcyB3ZSBnZXQgdG8gcHJvY2VzcyB0aGUgcGFja2V0IHdpdGhpbiAxNiBiaXRzCi0JICogb2YgdGltZXN0YW1wLCBpLmUuIGFib3V0IDY1IG1pbGxpc2Vjb25kcyBhZnRlciB0aGUgUEhZCi0JICogcmVjZWl2ZWQgdGhlIGZpcnN0IHN5bWJvbC4KKwkgKiBBbGwgZnJhbWVzIG9uIG1vbml0b3IgaW50ZXJmYWNlcyBhbmQgYmVhY29ucyBhbHdheXMgbmVlZCBhIGZ1bGwKKwkgKiA2NC1iaXQgdGltZXN0YW1wLiBNb25pdG9yIGludGVyZmFjZXMgbmVlZCBpdCBmb3IgZGlhZ25vc3RpYworCSAqIHB1cnBvc2VzIGFuZCBiZWFjb25zIGZvciBJQlNTIG1lcmdpbmcuCisJICogVGhpcyBjb2RlIGFzc3VtZXMgd2UgZ2V0IHRvIHByb2Nlc3MgdGhlIHBhY2tldCB3aXRoaW4gMTYgYml0cworCSAqIG9mIHRpbWVzdGFtcCwgaS5lLiBhYm91dCA2NSBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIFBIWSByZWNlaXZlZAorCSAqIHRoZSBmaXJzdCBzeW1ib2wuCiAJICovCi0JaWYgKGRldi0+d2wtPnJhZGlvdGFwX2VuYWJsZWQpIHsKKwlpZiAoKChmY3RsICYgKElFRUU4MDIxMV9GQ1RMX0ZUWVBFIHwgSUVFRTgwMjExX0ZDVExfU1RZUEUpKQorCSAgICA9PSAoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKSkgfHwKKwkgICAgZGV2LT53bC0+cmFkaW90YXBfZW5hYmxlZCkgewogCQl1MTYgbG93X21hY3RpbWVfbm93OwogCiAJCWI0M190c2ZfcmVhZChkZXYsICZzdGF0dXMubWFjdGltZSk7CkBAIC02MDEsMjkgKzYyMSwyOCBAQAogCWNoYW5pZCA9IChjaGFuc3RhdCAmIEI0M19SWF9DSEFOX0lEKSA+PiBCNDNfUlhfQ0hBTl9JRF9TSElGVDsKIAlzd2l0Y2ggKGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fUEhZVFlQRSkgewogCWNhc2UgQjQzX1BIWVRZUEVfQToKLQkJc3RhdHVzLnBoeW1vZGUgPSBNT0RFX0lFRUU4MDIxMUE7CisJCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIAkJQjQzX1dBUk5fT04oMSk7CiAJCS8qIEZJWE1FOiBXZSBkb24ndCByZWFsbHkga25vdyB3aGljaCB2YWx1ZSB0aGUgImNoYW5pZCIgY29udGFpbnMuCiAJCSAqICAgICAgICBTbyB0aGUgZm9sbG93aW5nIGFzc2lnbm1lbnQgbWlnaHQgYmUgd3JvbmcuICovCi0JCXN0YXR1cy5jaGFubmVsID0gY2hhbmlkOwotCQlzdGF0dXMuZnJlcSA9IGI0M19jaGFubmVsX3RvX2ZyZXFfNWdoeihzdGF0dXMuY2hhbm5lbCk7CisJCXN0YXR1cy5mcmVxID0gYjQzX2NoYW5uZWxfdG9fZnJlcV81Z2h6KGNoYW5pZCk7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfRzoKLQkJc3RhdHVzLnBoeW1vZGUgPSBNT0RFX0lFRUU4MDIxMUc7CisJCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAkJLyogY2hhbmlkIGlzIHRoZSByYWRpbyBjaGFubmVsIGNvb2tpZSB2YWx1ZSBhcyB1c2VkCiAJCSAqIHRvIHR1bmUgdGhlIHJhZGlvLiAqLwogCQlzdGF0dXMuZnJlcSA9IGNoYW5pZCArIDI0MDA7Ci0JCXN0YXR1cy5jaGFubmVsID0gYjQzX2ZyZXFfdG9fY2hhbm5lbF8yZ2h6KHN0YXR1cy5mcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBCNDNfUEhZVFlQRV9OOgotCQlzdGF0dXMucGh5bW9kZSA9IDB4REVBRCAvKkZJWE1FIE1PREVfSUVFRTgwMjExTiovOwogCQkvKiBjaGFuaWQgaXMgdGhlIFNITSBjaGFubmVsIGNvb2tpZS4gV2hpY2ggaXMgdGhlIHBsYWluCiAJCSAqIGNoYW5uZWwgbnVtYmVyIGluIGI0My4gKi8KLQkJc3RhdHVzLmNoYW5uZWwgPSBjaGFuaWQ7Ci0JCWlmIChjaGFuc3RhdCAmIEI0M19SWF9DSEFOXzVHSFopCi0JCQlzdGF0dXMuZnJlcSA9IGI0M19mcmVxX3RvX2NoYW5uZWxfNWdoeihzdGF0dXMuZnJlcSk7Ci0JCWVsc2UKLQkJCXN0YXR1cy5mcmVxID0gYjQzX2ZyZXFfdG9fY2hhbm5lbF8yZ2h6KHN0YXR1cy5mcmVxKTsKKwkJaWYgKGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fNUdIWikgeworCQkJc3RhdHVzLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOworCQkJc3RhdHVzLmZyZXEgPSBiNDNfZnJlcV90b19jaGFubmVsXzVnaHooY2hhbmlkKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwkJCXN0YXR1cy5mcmVxID0gYjQzX2ZyZXFfdG9fY2hhbm5lbF8yZ2h6KGNoYW5pZCk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQjQzX1dBUk5fT04oMSk7CkBAIC02NTcsNjcgKzY3Niw1NCBAQAogCQkJZGV2LT53bC0+aWVlZV9zdGF0cy5kb3QxMVJUU1N1Y2Nlc3NDb3VudCsrOwogCX0KIAotCWI0M19kbWFfaGFuZGxlX3R4c3RhdHVzKGRldiwgc3RhdHVzKTsKKwlpZiAoYjQzX3VzaW5nX3Bpb190cmFuc2ZlcnMoZGV2KSkKKwkJYjQzX3Bpb19oYW5kbGVfdHhzdGF0dXMoZGV2LCBzdGF0dXMpOworCWVsc2UKKwkJYjQzX2RtYV9oYW5kbGVfdHhzdGF0dXMoZGV2LCBzdGF0dXMpOwogfQogCi0vKiBIYW5kbGUgVFggc3RhdHVzIHJlcG9ydCBhcyByZWNlaXZlZCB0aHJvdWdoIERNQS9QSU8gcXVldWVzICovCi12b2lkIGI0M19oYW5kbGVfaHd0eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYjQzX2h3dHhzdGF0dXMgKmh3KQorLyogRmlsbCBvdXQgdGhlIG1hYzgwMjExIFRYc3RhdHVzIHJlcG9ydCBiYXNlZCBvbiB0aGUgYjQzLXNwZWNpZmljCisgKiB0eHN0YXR1cyByZXBvcnQgZGF0YS4gVGhpcyByZXR1cm5zIGEgYm9vbGVhbiB3aGV0aGVyIHRoZSBmcmFtZSB3YXMKKyAqIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZC4gKi8KK2Jvb2wgYjQzX2ZpbGxfdHhzdGF0dXNfcmVwb3J0KHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpyZXBvcnQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3R4c3RhdHVzICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGI0M190eHN0YXR1cyBzdGF0dXM7Ci0JdTggdG1wOworCWJvb2wgZnJhbWVfc3VjY2VzcyA9IDE7CiAKLQlzdGF0dXMuY29va2llID0gbGUxNl90b19jcHUoaHctPmNvb2tpZSk7Ci0Jc3RhdHVzLnNlcSA9IGxlMTZfdG9fY3B1KGh3LT5zZXEpOwotCXN0YXR1cy5waHlfc3RhdCA9IGh3LT5waHlfc3RhdDsKLQl0bXAgPSBody0+Y291bnQ7Ci0Jc3RhdHVzLmZyYW1lX2NvdW50ID0gKHRtcCA+PiA0KTsKLQlzdGF0dXMucnRzX2NvdW50ID0gKHRtcCAmIDB4MEYpOwotCXRtcCA9IGh3LT5mbGFnczsKLQlzdGF0dXMuc3VwcF9yZWFzb24gPSAoKHRtcCAmIDB4MUMpID4+IDIpOwotCXN0YXR1cy5wbV9pbmRpY2F0ZWQgPSAhISh0bXAgJiAweDgwKTsKLQlzdGF0dXMuaW50ZXJtZWRpYXRlID0gISEodG1wICYgMHg0MCk7Ci0Jc3RhdHVzLmZvcl9hbXBkdSA9ICEhKHRtcCAmIDB4MjApOwotCXN0YXR1cy5hY2tlZCA9ICEhKHRtcCAmIDB4MDIpOworCWlmIChzdGF0dXMtPmFja2VkKSB7CisJCS8qIFRoZSBmcmFtZSB3YXMgQUNLZWQuICovCisJCXJlcG9ydC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7CisJfSBlbHNlIHsKKwkJLyogVGhlIGZyYW1lIHdhcyBub3QgQUNLZWQuLi4gKi8KKwkJaWYgKCEocmVwb3J0LT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX05PX0FDSykpIHsKKwkJCS8qIC4uLmJ1dCB3ZSBleHBlY3RlZCBhbiBBQ0suICovCisJCQlmcmFtZV9zdWNjZXNzID0gMDsKKwkJCXJlcG9ydC0+ZXhjZXNzaXZlX3JldHJpZXMgPSAxOworCQl9CisJfQorCWlmIChzdGF0dXMtPmZyYW1lX2NvdW50ID09IDApIHsKKwkJLyogVGhlIGZyYW1lIHdhcyBub3QgdHJhbnNtaXR0ZWQgYXQgYWxsLiAqLworCQlyZXBvcnQtPnJldHJ5X2NvdW50ID0gMDsKKwl9IGVsc2UKKwkJcmVwb3J0LT5yZXRyeV9jb3VudCA9IHN0YXR1cy0+ZnJhbWVfY291bnQgLSAxOwogCi0JYjQzX2hhbmRsZV90eHN0YXR1cyhkZXYsICZzdGF0dXMpOworCXJldHVybiBmcmFtZV9zdWNjZXNzOwogfQogCiAvKiBTdG9wIGFueSBUWCBvcGVyYXRpb24gb24gdGhlIGRldmljZSAoc3VzcGVuZCB0aGUgaGFyZHdhcmUgcXVldWVzKSAqLwogdm9pZCBiNDNfdHhfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JYjQzX2RtYV90eF9zdXNwZW5kKGRldik7CisJaWYgKGI0M191c2luZ19waW9fdHJhbnNmZXJzKGRldikpCisJCWI0M19waW9fdHhfc3VzcGVuZChkZXYpOworCWVsc2UKKwkJYjQzX2RtYV90eF9zdXNwZW5kKGRldik7CiB9CiAKIC8qIFJlc3VtZSBhbnkgVFggb3BlcmF0aW9uIG9uIHRoZSBkZXZpY2UgKHJlc3VtZSB0aGUgaGFyZHdhcmUgcXVldWVzKSAqLwogdm9pZCBiNDNfdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQliNDNfZG1hX3R4X3Jlc3VtZShkZXYpOwotfQotCi0jaWYgMAotc3RhdGljIHZvaWQgdXBsb2FkX3Fvc19wYXJtcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkgICAgIGNvbnN0IHUxNiAqIHBhcm1zLCB1MTYgb2Zmc2V0KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEI0M19OUl9RT1NQQVJNUzsgaSsrKSB7Ci0JCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAotCQkJCW9mZnNldCArIChpICogMiksIHBhcm1zW2ldKTsKLQl9Ci19Ci0jZW5kaWYKLQotLyogSW5pdGlhbGl6ZSB0aGUgUW9TIHBhcmFtZXRlcnMgKi8KLXZvaWQgYjQzX3Fvc19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLQkvKiBGSVhNRTogVGhpcyBmdW5jdGlvbiBtdXN0IHByb2JhYmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWM4MDIxMQotCSAqIGNvbmZpZyBjYWxsYmFjay4gKi8KLQlyZXR1cm47Ci0KLQliNDNfaGZfd3JpdGUoZGV2LCBiNDNfaGZfcmVhZChkZXYpIHwgQjQzX0hGX0VEQ0YpOwotCS8vRklYTUUga2lsbCBtYWdpYwotCWI0M193cml0ZTE2KGRldiwgMHg2ODgsIGI0M19yZWFkMTYoZGV2LCAweDY4OCkgfCAweDQpOwotCi0JLypUT0RPOiBXZSBtaWdodCBuZWVkIHNvbWUgc3RhY2sgc3VwcG9ydCBoZXJlIHRvIGdldCB0aGUgdmFsdWVzLiAqLworCWlmIChiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQorCQliNDNfcGlvX3R4X3Jlc3VtZShkZXYpOworCWVsc2UKKwkJYjQzX2RtYV90eF9yZXN1bWUoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oCmluZGV4IDQxNzY1MDMuLmIwNWY0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuaApAQCAtMjA3LDI1ICsyMDcsMjQgQEAKIAlCNDNfVFhTVF9TVVBQX0FCTkFDSywJLyogQWZ0ZXJidXJuZXIgTkFDSyAqLwogfTsKIAotLyogVHJhbnNtaXQgU3RhdHVzIGFzIHJlY2VpdmVkIHRocm91Z2ggRE1BL1BJTyBvbiBvbGQgY2hpcHMgKi8KLXN0cnVjdCBiNDNfaHd0eHN0YXR1cyB7Ci0JUEFEX0JZVEVTKDQpOwotCV9fbGUxNiBjb29raWU7Ci0JdTggZmxhZ3M7Ci0JdTggY291bnQ7Ci0JIFBBRF9CWVRFUygyKTsKLQlfX2xlMTYgc2VxOwotCXU4IHBoeV9zdGF0OwotCSBQQURfQllURVMoMSk7Ci19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7Ci0KIC8qIFJlY2VpdmUgaGVhZGVyIGZvciB2NCBmaXJtd2FyZS4gKi8KIHN0cnVjdCBiNDNfcnhoZHJfZnc0IHsKIAlfX2xlMTYgZnJhbWVfbGVuOwkvKiBGcmFtZSBsZW5ndGggKi8KIAkgUEFEX0JZVEVTKDIpOwogCV9fbGUxNiBwaHlfc3RhdHVzMDsJLyogUEhZIFJYIFN0YXR1cyAwICovCi0JX191OCBqc3NpOwkJLyogUEhZIFJYIFN0YXR1cyAxOiBKU1NJICovCi0JX191OCBzaWdfcXVhbDsJCS8qIFBIWSBSWCBTdGF0dXMgMTogU2lnbmFsIFF1YWxpdHkgKi8KKwl1bmlvbiB7CisJCS8qIFJTU0kgZm9yIEEvQi9HLVBIWXMgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTgganNzaTsJLyogUEhZIFJYIFN0YXR1cyAxOiBKU1NJICovCisJCQlfX3U4IHNpZ19xdWFsOwkvKiBQSFkgUlggU3RhdHVzIDE6IFNpZ25hbCBRdWFsaXR5ICovCisJCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworCQkvKiBSU1NJIGZvciBOLVBIWXMgKi8KKwkJc3RydWN0IHsKKwkJCV9fczggcG93ZXIwOwkvKiBQSFkgUlggU3RhdHVzIDE6IFBvd2VyIDAgKi8KKwkJCV9fczggcG93ZXIxOwkvKiBQSFkgUlggU3RhdHVzIDE6IFBvd2VyIDEgKi8KKwkJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAlfX2xlMTYgcGh5X3N0YXR1czI7CS8qIFBIWSBSWCBTdGF0dXMgMiAqLwogCV9fbGUxNiBwaHlfc3RhdHVzMzsJLyogUEhZIFJYIFN0YXR1cyAzICovCiAJX19sZTMyIG1hY19zdGF0dXM7CS8qIE1BQyBSWCBzdGF0dXMgKi8KQEAgLTI5NSwyNSArMjk0LDEyIEBACiAKIHZvaWQgYjQzX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKTsKLQotdm9pZCBiNDNfaGFuZGxlX2h3dHhzdGF0dXMoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICAgY29uc3Qgc3RydWN0IGI0M19od3R4c3RhdHVzICpodyk7Citib29sIGI0M19maWxsX3R4c3RhdHVzX3JlcG9ydChzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqcmVwb3J0LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKTsKIAogdm9pZCBiNDNfdHhfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiAKLSNkZWZpbmUgQjQzX05SX1FPU1BBUk1TCQkyMgotZW51bSB7Ci0JQjQzX1FPU1BBUk1fVFhPUCA9IDAsCi0JQjQzX1FPU1BBUk1fQ1dNSU4sCi0JQjQzX1FPU1BBUk1fQ1dNQVgsCi0JQjQzX1FPU1BBUk1fQ1dDVVIsCi0JQjQzX1FPU1BBUk1fQUlGUywKLQlCNDNfUU9TUEFSTV9CU0xPVFMsCi0JQjQzX1FPU1BBUk1fUkVHR0FQLAotCUI0M19RT1NQQVJNX1NUQVRVUywKLX07Ci12b2lkIGI0M19xb3NfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCiAvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIHRoZSBrZXktdGFibGUgaW5kZXggZnJvbSAiZmlybXdhcmUtZm9ybWF0IgogICogdG8gInJhdy1mb3JtYXQiIGFuZCBiYWNrLiBUaGUgZmlybXdhcmUgQVBJIGNoYW5nZWQgZm9yIHRoaXMgYXQgc29tZSByZXZpc2lvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L0tjb25maWcKaW5kZXggNjc0NTU3OS4uMTNjNjVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L0tjb25maWcKQEAgLTI1LDYgKzI1LDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBCNDNMRUdBQ1kgJiYgU1NCX1BDSUhPU1RfUE9TU0lCTEUKIAlzZWxlY3QgU1NCX1BDSUhPU1QKKwlzZWxlY3QgU1NCX0I0M19QQ0lfQlJJREdFCiAJZGVmYXVsdCB5CiAKICMgQXV0by1zZWxlY3QgU1NCIFBDSUNPUkUgZHJpdmVyLCBpZiBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2I0M2xlZ2FjeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2I0M2xlZ2FjeS5oCmluZGV4IGM4MGVkZDIuLmRlZDNjZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9iNDNsZWdhY3kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvYjQzbGVnYWN5LmgKQEAgLTIzLDYgKzIzLDEwIEBACiAjaW5jbHVkZSAicGh5LmgiCiAKIAorLyogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmaXJtd2FyZSB0aGF0J3Mgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYnkgdGhpcworICogZHJpdmVyIHZlcnNpb24uICovCisjZGVmaW5lIEI0M2xlZ2FjeV9TVVBQT1JURURfRklSTVdBUkVfSUQJIkZXMTAiCisKICNkZWZpbmUgQjQzbGVnYWN5X0lSUVdBSVRfTUFYX1JFVFJJRVMJMjAKIAogI2RlZmluZSBCNDNsZWdhY3lfUlhfTUFYX1NTSQkJNjAgLyogYmVzdCBndWVzcyBhdCBtYXggc3NpICovCkBAIC05Myw2ICs5Nyw3IEBACiAjZGVmaW5lIEI0M2xlZ2FjeV9NTUlPX1JBRElPX0hXRU5BQkxFRF9MTwkweDQ5QQogI2RlZmluZSBCNDNsZWdhY3lfTU1JT19HUElPX0NPTlRST0wJMHg0OUMKICNkZWZpbmUgQjQzbGVnYWN5X01NSU9fR1BJT19NQVNLCQkweDQ5RQorI2RlZmluZSBCNDNsZWdhY3lfTU1JT19UU0ZfQ0ZQX1BSRVRCVFQJMHg2MTIKICNkZWZpbmUgQjQzbGVnYWN5X01NSU9fVFNGXzAJCTB4NjMyIC8qIGNvcmUgcmV2IDwgMyBvbmx5ICovCiAjZGVmaW5lIEI0M2xlZ2FjeV9NTUlPX1RTRl8xCQkweDYzNCAvKiBjb3JlIHJldiA8IDMgb25seSAqLwogI2RlZmluZSBCNDNsZWdhY3lfTU1JT19UU0ZfMgkJMHg2MzYgLyogY29yZSByZXYgPCAzIG9ubHkgKi8KQEAgLTEyNiwxOSArMTMxLDI3IEBACiAjZGVmaW5lIEI0M2xlZ2FjeV9TSE1fU0hfSE9TVEZISQkweDAwNjAgLyogSG9zdGZsYWdzIHVjb2RlIG9wdHMgKGhpZ2gpICovCiAvKiBTSE1fU0hBUkVEIGNyeXB0byBlbmdpbmUgKi8KICNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9LRVlJRFhCTE9DSwkweDA1RDQgLyogS2V5IGluZGV4L2FsZ29yaXRobSBibG9jayAqLwotLyogU0hNX1NIQVJFRCBiZWFjb24gdmFyaWFibGVzICovCisvKiBTSE1fU0hBUkVEIGJlYWNvbi9BUCB2YXJpYWJsZXMgKi8KKyNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9EVElNUAkJMHgwMDEyIC8qIERUSU0gcGVyaW9kICovCisjZGVmaW5lIEI0M2xlZ2FjeV9TSE1fU0hfQlRMMAkJMHgwMDE4IC8qIEJlYWNvbiB0ZW1wbGF0ZSBsZW5ndGggMCAqLworI2RlZmluZSBCNDNsZWdhY3lfU0hNX1NIX0JUTDEJCTB4MDAxQSAvKiBCZWFjb24gdGVtcGxhdGUgbGVuZ3RoIDEgKi8KKyNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9CVFNGT0ZGCTB4MDAxQyAvKiBCZWFjb24gVFNGIG9mZnNldCAqLworI2RlZmluZSBCNDNsZWdhY3lfU0hNX1NIX1RJTVBPUwkJMHgwMDFFIC8qIFRJTSBwb3NpdGlvbiBpbiBiZWFjb24gKi8KICNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9CRUFDUEhZQ1RMCTB4MDA1NCAvKiBCZWFjb24gUEhZIFRYIGNvbnRyb2wgd29yZCAqLwogLyogU0hNX1NIQVJFRCBBQ0svQ1RTIGNvbnRyb2wgKi8KICNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9BQ0tDVFNQSFlDVEwJMHgwMDIyIC8qIEFDSy9DVFMgUEhZIGNvbnRyb2wgd29yZCAqLwogLyogU0hNX1NIQVJFRCBwcm9iZSByZXNwb25zZSB2YXJpYWJsZXMgKi8KLSNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9QUlBIWUNUTAkweDAxODggLyogUHJvYmUgUmVzcCBQSFkgVFggY29udHJvbCAqLworI2RlZmluZSBCNDNsZWdhY3lfU0hNX1NIX1BSVExFTgkJMHgwMDRBIC8qIFByb2JlIFJlc3BvbnNlIHRlbXBsYXRlIGxlbmd0aCAqLwogI2RlZmluZSBCNDNsZWdhY3lfU0hNX1NIX1BSTUFYVElNRQkweDAwNzQgLyogUHJvYmUgUmVzcG9uc2UgbWF4IHRpbWUgKi8KKyNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9QUlBIWUNUTAkweDAxODggLyogUHJvYmUgUmVzcCBQSFkgVFggY29udHJvbCAqLwogLyogU0hNX1NIQVJFRCByYXRlIHRhYmxlcyAqLwogLyogU0hNX1NIQVJFRCBtaWNyb2NvZGUgc29mdCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9VQ09ERVJFVgkweDAwMDAgLyogTWljcm9jb2RlIHJldmlzaW9uICovCiAjZGVmaW5lIEI0M2xlZ2FjeV9TSE1fU0hfVUNPREVQQVRDSAkweDAwMDIgLyogTWljcm9jb2RlIHBhdGNobGV2ZWwgKi8KICNkZWZpbmUgQjQzbGVnYWN5X1NITV9TSF9VQ09ERURBVEUJMHgwMDA0IC8qIE1pY3JvY29kZSBkYXRlICovCiAjZGVmaW5lIEI0M2xlZ2FjeV9TSE1fU0hfVUNPREVUSU1FCTB4MDAwNiAvKiBNaWNyb2NvZGUgdGltZSAqLworI2RlZmluZSBCNDNsZWdhY3lfU0hNX1NIX1NQVVdLVVAJMHgwMDk0IC8qIHByZS13YWtldXAgZm9yIHN5bnRoIFBVIGluIHVzICovCisjZGVmaW5lIEI0M2xlZ2FjeV9TSE1fU0hfUFJFVEJUVAkweDAwOTYgLyogcHJlLVRCVFQgaW4gdXMgKi8KIAogI2RlZmluZSBCNDNsZWdhY3lfVUNPREVGTEFHU19PRkZTRVQgICAgIDB4MDA1RQogCkBAIC0xOTUsNiArMjA4LDEzIEBACiAjZGVmaW5lIEI0M2xlZ2FjeV9NQUNDVExfVEJUVEhPTEQJMHgxMDAwMDAwMCAvKiBUQlRUIEhvbGQgKi8KICNkZWZpbmUgQjQzbGVnYWN5X01BQ0NUTF9HTU9ERQkJMHg4MDAwMDAwMCAvKiBHIE1vZGUgKi8KIAorLyogTUFDIENvbW1hbmQgYml0ZmllbGQgKi8KKyNkZWZpbmUgQjQzbGVnYWN5X01BQ0NNRF9CRUFDT04wX1ZBTElECTB4MDAwMDAwMDEgLyogQmVhY29uIDAgaW4gdGVtcGxhdGUgUkFNIGlzIGJ1c3kvdmFsaWQgKi8KKyNkZWZpbmUgQjQzbGVnYWN5X01BQ0NNRF9CRUFDT04xX1ZBTElECTB4MDAwMDAwMDIgLyogQmVhY29uIDEgaW4gdGVtcGxhdGUgUkFNIGlzIGJ1c3kvdmFsaWQgKi8KKyNkZWZpbmUgQjQzbGVnYWN5X01BQ0NNRF9ERlFfVkFMSUQJMHgwMDAwMDAwNCAvKiBEaXJlY3RlZCBmcmFtZSBxdWV1ZSB2YWxpZCAoSUJTUyBQUyBtb2RlLCBBVElNKSAqLworI2RlZmluZSBCNDNsZWdhY3lfTUFDQ01EX0NDQQkJMHgwMDAwMDAwOCAvKiBDbGVhciBjaGFubmVsIGFzc2Vzc21lbnQgKi8KKyNkZWZpbmUgQjQzbGVnYWN5X01BQ0NNRF9CR05PSVNFCTB4MDAwMDAwMTAgLyogQmFja2dyb3VuZCBub2lzZSAqLworCiAvKiA4MDIuMTEgY29yZSBzcGVjaWZpYyBUTSBTdGF0ZSBMb3cgZmxhZ3MgKi8KICNkZWZpbmUgQjQzbGVnYWN5X1RNU0xPV19HTU9ERQkJMHgyMDAwMDAwMCAvKiBHIE1vZGUgRW5hYmxlICovCiAjZGVmaW5lIEI0M2xlZ2FjeV9UTVNMT1dfUExMUkVGU0VMCTB4MDAyMDAwMDAgLyogUExMIEZyZXEgUmVmIFNlbGVjdCAqLwpAQCAtMzEzLDE1ICszMzMsNyBAQAogIyB1bmRlZiBhc3NlcnQKICNlbmRpZgogI2lmZGVmIENPTkZJR19CNDNMRUdBQ1lfREVCVUcKLSMgZGVmaW5lIEI0M2xlZ2FjeV9XQVJOX09OKGV4cHIpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAodW5saWtlbHkoKGV4cHIpKSkgewkJCQkJXAotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRlc3QgKCVzKSBmYWlsZWQgYXQ6IglcCi0JCQkJCSAgICAgICIgJXM6JWQ6JXMoKVxuIiwJCVwKLQkJCQkJICAgICAgI2V4cHIsIF9fRklMRV9fLAkJXAotCQkJCQkgICAgICBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQorIyBkZWZpbmUgQjQzbGVnYWN5X1dBUk5fT04oeCkJV0FSTl9PTih4KQogIyBkZWZpbmUgQjQzbGVnYWN5X0JVR19PTihleHByKQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICh1bmxpa2VseSgoZXhwcikpKSB7CQkJCQlcCkBAIC0zMzIsNyArMzQ0LDkgQEAKIAl9IHdoaWxlICgwKQogIyBkZWZpbmUgQjQzbGVnYWN5X0RFQlVHCTEKICNlbHNlCi0jIGRlZmluZSBCNDNsZWdhY3lfV0FSTl9PTih4KQlkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKy8qIFRoaXMgd2lsbCBldmFsdWF0ZSB0aGUgYXJndW1lbnQgZXZlbiBpZiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuICovCitzdGF0aWMgaW5saW5lIGJvb2wgX19iNDNsZWdhY3lfd2Fybl9vbl9kdW1teShib29sIHgpIHsgcmV0dXJuIHg7IH0KKyMgZGVmaW5lIEI0M2xlZ2FjeV9XQVJOX09OKHgpCV9fYjQzbGVnYWN5X3dhcm5fb25fZHVtbXkodW5saWtlbHkoISEoeCkpKQogIyBkZWZpbmUgQjQzbGVnYWN5X0JVR19PTih4KQlkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKICMgZGVmaW5lIEI0M2xlZ2FjeV9ERUJVRwkwCiAjZW5kaWYKQEAgLTM4OCwxMCArNDAyLDYgQEAKIAl1OCBwb3NzaWJsZV9waHltb2RlczsKIAkvKiBHTU9ERSBiaXQgZW5hYmxlZCBpbiBNQUNDVEw/ICovCiAJYm9vbCBnbW9kZTsKLQkvKiBQb3NzaWJsZSBpZWVlODAyMTEgc3Vic3lzdGVtIGh3bW9kZXMgZm9yIHRoaXMgUEhZLgotCSAqIFdoaWNoIG1vZGUgaXMgc2VsZWN0ZWQsIGRlcGVuZHMgb24gdGhyIEdNT0RFIGVuYWJsZWQgYml0ICovCi0jZGVmaW5lIEI0M2xlZ2FjeV9NQVhfUEhZSFdNT0RFUwkyCi0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlIGh3bW9kZXNbQjQzbGVnYWN5X01BWF9QSFlIV01PREVTXTsKIAogCS8qIEFuYWxvZyBUeXBlICovCiAJdTggYW5hbG9nOwpAQCAtNTk0LDYgKzYwNCwxMiBAQAogCXU4IG5yX2RldnM7CiAKIAlib29sIHJhZGlvdGFwX2VuYWJsZWQ7CisKKwkvKiBUaGUgYmVhY29uIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgKEFQIG9yIElCU1MgbW9kZSkuCisJICogVGhpcyBiZWFjb24gc3R1ZmYgaXMgcHJvdGVjdGVkIGJ5IHRoZSBpcnFfbG9jay4gKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9iZWFjb247CisJYm9vbCBiZWFjb24wX3VwbG9hZGVkOworCWJvb2wgYmVhY29uMV91cGxvYWRlZDsKIH07CiAKIC8qIFBvaW50ZXJzIHRvIHRoZSBmaXJtd2FyZSBkYXRhIGFuZCBtZXRhIGluZm9ybWF0aW9uIGFib3V0IGl0LiAqLwpAQCAtNjQ1LDcgKzY2MSw3IEBACiAKIAlib29sIF9fdXNpbmdfcGlvOwkvKiBVc2luZyBwaW8gcmF0aGVyIHRoYW4gZG1hLiAqLwogCWJvb2wgYmFkX2ZyYW1lc19wcmVlbXB0Oy8qIFVzZSAiQmFkIEZyYW1lcyBQcmVlbXB0aW9uIi4gKi8KLQlib29sIHJlZzEyNF9zZXRfMHg0OwkvKiBWYXJpYWJsZSB0byBrZWVwIHRyYWNrIG9mIElSUS4gKi8KKwlib29sIGRmcV92YWxpZDsJCS8qIERpcmVjdGVkIGZyYW1lIHF1ZXVlIHZhbGlkIChJQlNTIFBTIG1vZGUsIEFUSU0pLiAqLwogCWJvb2wgc2hvcnRfcHJlYW1ibGU7CS8qIFRSVUUgaWYgdXNpbmcgc2hvcnQgcHJlYW1ibGUuICovCiAJYm9vbCBzaG9ydF9zbG90OwkvKiBUUlVFIGlmIHVzaW5nIHNob3J0IHNsb3QgdGltaW5nLiAqLwogCWJvb2wgcmFkaW9faHdfZW5hYmxlOwkvKiBTdGF0ZSBvZiByYWRpbyBoYXJkd2FyZSBlbmFibGUgYml0LiAqLwpAQCAtNjkyLDkgKzcwOCw2IEBACiAJdTggbWF4X25yX2tleXM7CiAJc3RydWN0IGI0M2xlZ2FjeV9rZXkga2V5WzU4XTsKIAotCS8qIENhY2hlZCBiZWFjb24gdGVtcGxhdGUgd2hpbGUgdXBsb2FkaW5nIHRoZSB0ZW1wbGF0ZS4gKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqY2FjaGVkX2JlYWNvbjsKLQogCS8qIEZpcm13YXJlIGRhdGEgKi8KIAlzdHJ1Y3QgYjQzbGVnYWN5X2Zpcm13YXJlIGZ3OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMKaW5kZXggNmUwODQwNS4uYzk5MGY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYwpAQCAtMzU0LDcgKzM1NCw4IEBACiB9CiAKIAotdTE2IGI0M2xlZ2FjeV9kbWFjb250cm9sbGVyX2Jhc2UoaW50IGRtYTY0Yml0LCBpbnQgY29udHJvbGxlcl9pZHgpCitzdGF0aWMgdTE2IGI0M2xlZ2FjeV9kbWFjb250cm9sbGVyX2Jhc2UoZW51bSBiNDNsZWdhY3lfZG1hdHlwZSB0eXBlLAorCQkJCQlpbnQgY29udHJvbGxlcl9pZHgpCiB7CiAJc3RhdGljIGNvbnN0IHUxNiBtYXA2NFtdID0gewogCQlCNDNsZWdhY3lfTU1JT19ETUE2NF9CQVNFMCwKQEAgLTM3Myw3ICszNzQsNyBAQAogCQlCNDNsZWdhY3lfTU1JT19ETUEzMl9CQVNFNSwKIAl9OwogCi0JaWYgKGRtYTY0Yml0KSB7CisJaWYgKHR5cGUgPT0gQjQzbGVnYWN5X0RNQV82NEJJVCkgewogCQlCNDNsZWdhY3lfV0FSTl9PTighKGNvbnRyb2xsZXJfaWR4ID49IDAgJiYKIAkJCQkgIGNvbnRyb2xsZXJfaWR4IDwgQVJSQVlfU0laRShtYXA2NCkpKTsKIAkJcmV0dXJuIG1hcDY0W2NvbnRyb2xsZXJfaWR4XTsKQEAgLTM5MiwxMSArMzkzLDExIEBACiAJZG1hX2FkZHJfdCBkbWFhZGRyOwogCiAJaWYgKHR4KQotCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRldiwKKwkJZG1hYWRkciA9IGRtYV9tYXBfc2luZ2xlKHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LAogCQkJCQkgYnVmLCBsZW4sCiAJCQkJCSBETUFfVE9fREVWSUNFKTsKIAllbHNlCi0JCWRtYWFkZHIgPSBkbWFfbWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZGV2LAorCQlkbWFhZGRyID0gZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJCSBidWYsIGxlbiwKIAkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAKQEAgLTQxMCwxMSArNDExLDExIEBACiAJCSAgICAgIGludCB0eCkKIHsKIAlpZiAodHgpCi0JCWRtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRldiwKKwkJZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKIAkJCQkgYWRkciwgbGVuLAogCQkJCSBETUFfVE9fREVWSUNFKTsKIAllbHNlCi0JCWRtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYtPmRldiwKKwkJZG1hX3VubWFwX3NpbmdsZShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKIAkJCQkgYWRkciwgbGVuLAogCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogfQpAQCAtNDI2LDcgKzQyNyw3IEBACiB7CiAJQjQzbGVnYWN5X1dBUk5fT04ocmluZy0+dHgpOwogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocmluZy0+ZGV2LT5kZXYtPmRldiwKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nLT5kZXYtPmRldi0+ZG1hX2RldiwKIAkJCQlhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CiB9CiAKQEAgLTQzNyw3ICs0MzgsNyBAQAogewogCUI0M2xlZ2FjeV9XQVJOX09OKHJpbmctPnR4KTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHJpbmctPmRldi0+ZGV2LT5kZXYsCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJICAgYWRkciwgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogfQogCkBAIC00NTcsOSArNDU4LDkgQEAKIAogc3RhdGljIGludCBhbGxvY19yaW5nbWVtb3J5KHN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqcmluZykKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nLT5kZXYtPmRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSByaW5nLT5kZXYtPmRldi0+ZG1hX2RldjsKIAotCXJpbmctPmRlc2NiYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgQjQzbGVnYWN5X0RNQV9SSU5HTUVNU0laRSwKKwlyaW5nLT5kZXNjYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudChkbWFfZGV2LCBCNDNsZWdhY3lfRE1BX1JJTkdNRU1TSVpFLAogCQkJCQkgICAgJihyaW5nLT5kbWFiYXNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyaW5nLT5kZXNjYmFzZSkgewogCQliNDNsZWdhY3llcnIocmluZy0+ZGV2LT53bCwgIkRNQSByaW5nbWVtb3J5IGFsbG9jYXRpb24iCkBAIC00NzMsMTUgKzQ3NCwxNiBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX3JpbmdtZW1vcnkoc3RydWN0IGI0M2xlZ2FjeV9kbWFyaW5nICpyaW5nKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJpbmctPmRldi0+ZGV2LT5kZXY7CisJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2OwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBCNDNsZWdhY3lfRE1BX1JJTkdNRU1TSVpFLAorCWRtYV9mcmVlX2NvaGVyZW50KGRtYV9kZXYsIEI0M2xlZ2FjeV9ETUFfUklOR01FTVNJWkUsCiAJCQkgIHJpbmctPmRlc2NiYXNlLCByaW5nLT5kbWFiYXNlKTsKIH0KIAogLyogUmVzZXQgdGhlIFJYIERNQSBjaGFubmVsICovCi1pbnQgYjQzbGVnYWN5X2RtYWNvbnRyb2xsZXJfcnhfcmVzZXQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJCSAgICAgdTE2IG1taW9fYmFzZSwgaW50IGRtYTY0KQorc3RhdGljIGludCBiNDNsZWdhY3lfZG1hY29udHJvbGxlcl9yeF9yZXNldChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCisJCQkJCSAgICB1MTYgbW1pb19iYXNlLAorCQkJCQkgICAgZW51bSBiNDNsZWdhY3lfZG1hdHlwZSB0eXBlKQogewogCWludCBpOwogCXUzMiB2YWx1ZTsKQEAgLTQ4OSwxMyArNDkxLDE0IEBACiAKIAltaWdodF9zbGVlcCgpOwogCi0Jb2Zmc2V0ID0gZG1hNjQgPyBCNDNsZWdhY3lfRE1BNjRfUlhDVEwgOiBCNDNsZWdhY3lfRE1BMzJfUlhDVEw7CisJb2Zmc2V0ID0gKHR5cGUgPT0gQjQzbGVnYWN5X0RNQV82NEJJVCkgPworCQkgQjQzbGVnYWN5X0RNQTY0X1JYQ1RMIDogQjQzbGVnYWN5X0RNQTMyX1JYQ1RMOwogCWI0M2xlZ2FjeV93cml0ZTMyKGRldiwgbW1pb19iYXNlICsgb2Zmc2V0LCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlvZmZzZXQgPSBkbWE2NCA/IEI0M2xlZ2FjeV9ETUE2NF9SWFNUQVRVUyA6Ci0JCQkgQjQzbGVnYWN5X0RNQTMyX1JYU1RBVFVTOworCQlvZmZzZXQgPSAodHlwZSA9PSBCNDNsZWdhY3lfRE1BXzY0QklUKSA/CisJCQkgQjQzbGVnYWN5X0RNQTY0X1JYU1RBVFVTIDogQjQzbGVnYWN5X0RNQTMyX1JYU1RBVFVTOwogCQl2YWx1ZSA9IGI0M2xlZ2FjeV9yZWFkMzIoZGV2LCBtbWlvX2Jhc2UgKyBvZmZzZXQpOwotCQlpZiAoZG1hNjQpIHsKKwkJaWYgKHR5cGUgPT0gQjQzbGVnYWN5X0RNQV82NEJJVCkgewogCQkJdmFsdWUgJj0gQjQzbGVnYWN5X0RNQTY0X1JYU1RBVDsKIAkJCWlmICh2YWx1ZSA9PSBCNDNsZWdhY3lfRE1BNjRfUlhTVEFUX0RJU0FCTEVEKSB7CiAJCQkJaSA9IC0xOwpAQCAtNTE5LDggKzUyMiw5IEBACiB9CiAKIC8qIFJlc2V0IHRoZSBSWCBETUEgY2hhbm5lbCAqLwotaW50IGI0M2xlZ2FjeV9kbWFjb250cm9sbGVyX3R4X3Jlc2V0KHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQkgICAgIHUxNiBtbWlvX2Jhc2UsIGludCBkbWE2NCkKK3N0YXRpYyBpbnQgYjQzbGVnYWN5X2RtYWNvbnRyb2xsZXJfdHhfcmVzZXQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAorCQkJCQkgICAgdTE2IG1taW9fYmFzZSwKKwkJCQkJICAgIGVudW0gYjQzbGVnYWN5X2RtYXR5cGUgdHlwZSkKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWU7CkBAIC01MjksMTAgKzUzMywxMCBAQAogCW1pZ2h0X3NsZWVwKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlvZmZzZXQgPSBkbWE2NCA/IEI0M2xlZ2FjeV9ETUE2NF9UWFNUQVRVUyA6Ci0JCQkgQjQzbGVnYWN5X0RNQTMyX1RYU1RBVFVTOworCQlvZmZzZXQgPSAodHlwZSA9PSBCNDNsZWdhY3lfRE1BXzY0QklUKSA/CisJCQkgQjQzbGVnYWN5X0RNQTY0X1RYU1RBVFVTIDogQjQzbGVnYWN5X0RNQTMyX1RYU1RBVFVTOwogCQl2YWx1ZSA9IGI0M2xlZ2FjeV9yZWFkMzIoZGV2LCBtbWlvX2Jhc2UgKyBvZmZzZXQpOwotCQlpZiAoZG1hNjQpIHsKKwkJaWYgKHR5cGUgPT0gQjQzbGVnYWN5X0RNQV82NEJJVCkgewogCQkJdmFsdWUgJj0gQjQzbGVnYWN5X0RNQTY0X1RYU1RBVDsKIAkJCWlmICh2YWx1ZSA9PSBCNDNsZWdhY3lfRE1BNjRfVFhTVEFUX0RJU0FCTEVEIHx8CiAJCQkgICAgdmFsdWUgPT0gQjQzbGVnYWN5X0RNQTY0X1RYU1RBVF9JRExFV0FJVCB8fApAQCAtNTQ3LDEzICs1NTEsMTQgQEAKIAkJfQogCQltc2xlZXAoMSk7CiAJfQotCW9mZnNldCA9IGRtYTY0ID8gQjQzbGVnYWN5X0RNQTY0X1RYQ1RMIDogQjQzbGVnYWN5X0RNQTMyX1RYQ1RMOworCW9mZnNldCA9ICh0eXBlID09IEI0M2xlZ2FjeV9ETUFfNjRCSVQpID8gQjQzbGVnYWN5X0RNQTY0X1RYQ1RMIDoKKwkJCQkJCSBCNDNsZWdhY3lfRE1BMzJfVFhDVEw7CiAJYjQzbGVnYWN5X3dyaXRlMzIoZGV2LCBtbWlvX2Jhc2UgKyBvZmZzZXQsIDApOwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCW9mZnNldCA9IGRtYTY0ID8gQjQzbGVnYWN5X0RNQTY0X1RYU1RBVFVTIDoKLQkJCSBCNDNsZWdhY3lfRE1BMzJfVFhTVEFUVVM7CisJCW9mZnNldCA9ICh0eXBlID09IEI0M2xlZ2FjeV9ETUFfNjRCSVQpID8KKwkJCSBCNDNsZWdhY3lfRE1BNjRfVFhTVEFUVVMgOiBCNDNsZWdhY3lfRE1BMzJfVFhTVEFUVVM7CiAJCXZhbHVlID0gYjQzbGVnYWN5X3JlYWQzMihkZXYsIG1taW9fYmFzZSArIG9mZnNldCk7Ci0JCWlmIChkbWE2NCkgeworCQlpZiAodHlwZSA9PSBCNDNsZWdhY3lfRE1BXzY0QklUKSB7CiAJCQl2YWx1ZSAmPSBCNDNsZWdhY3lfRE1BNjRfVFhTVEFUOwogCQkJaWYgKHZhbHVlID09IEI0M2xlZ2FjeV9ETUE2NF9UWFNUQVRfRElTQUJMRUQpIHsKIAkJCQlpID0gLTE7CkBAIC01NzgsNiArNTgzLDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIENoZWNrIGlmIGEgRE1BIG1hcHBpbmcgYWRkcmVzcyBpcyBpbnZhbGlkLiAqLworc3RhdGljIGJvb2wgYjQzbGVnYWN5X2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqcmluZywKKwkJCQkJIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkJIHNpemVfdCBidWZmZXJzaXplLAorCQkJCQkgYm9vbCBkbWFfdG9fZGV2aWNlKQoreworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihhZGRyKSkpCisJCXJldHVybiAxOworCisJc3dpdGNoIChyaW5nLT50eXBlKSB7CisJY2FzZSBCNDNsZWdhY3lfRE1BXzMwQklUOgorCQlpZiAoKHU2NClhZGRyICsgYnVmZmVyc2l6ZSA+ICgxVUxMIDw8IDMwKSkKKwkJCWdvdG8gYWRkcmVzc19lcnJvcjsKKwkJYnJlYWs7CisJY2FzZSBCNDNsZWdhY3lfRE1BXzMyQklUOgorCQlpZiAoKHU2NClhZGRyICsgYnVmZmVyc2l6ZSA+ICgxVUxMIDw8IDMyKSkKKwkJCWdvdG8gYWRkcmVzc19lcnJvcjsKKwkJYnJlYWs7CisJY2FzZSBCNDNsZWdhY3lfRE1BXzY0QklUOgorCQkvKiBDdXJyZW50bHkgd2UgY2FuJ3QgaGF2ZSBhZGRyZXNzZXMgYmV5b25kIDY0IGJpdHMgaW4gdGhlIGtlcm5lbC4gKi8KKwkJYnJlYWs7CisJfQorCisJLyogVGhlIGFkZHJlc3MgaXMgT0suICovCisJcmV0dXJuIDA7CisKK2FkZHJlc3NfZXJyb3I6CisJLyogV2UgY2FuJ3Qgc3VwcG9ydCB0aGlzIGFkZHJlc3MuIFVubWFwIGl0IGFnYWluLiAqLworCXVubWFwX2Rlc2NidWZmZXIocmluZywgYWRkciwgYnVmZmVyc2l6ZSwgZG1hX3RvX2RldmljZSk7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBzZXR1cF9yeF9kZXNjYnVmZmVyKHN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqcmluZywKIAkJCSAgICAgICBzdHJ1Y3QgYjQzbGVnYWN5X2RtYWRlc2NfZ2VuZXJpYyAqZGVzYywKIAkJCSAgICAgICBzdHJ1Y3QgYjQzbGVnYWN5X2RtYWRlc2NfbWV0YSAqbWV0YSwKQEAgLTU5NSw3ICs2MzMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlkbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLAogCQkJCSByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hYWRkcikpIHsKKwlpZiAoYjQzbGVnYWN5X2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApKSB7CiAJCS8qIHVnaC4gdHJ5IHRvIHJlYWxsb2MgaW4gem9uZV9kbWEgKi8KIAkJZ2ZwX2ZsYWdzIHw9IEdGUF9ETUE7CiAKQEAgLTYwOCw3ICs2NDYsNyBAQAogCQkJCQkgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCk7CiAJfQogCi0JaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYWFkZHIpKSB7CisJaWYgKGI0M2xlZ2FjeV9kbWFfbWFwcGluZ19lcnJvcihyaW5nLCBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplLCAwKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC02NzQsNyArNzEyLDcgQEAKIAl1MzIgdHJhbnMgPSBzc2JfZG1hX3RyYW5zbGF0aW9uKHJpbmctPmRldi0+ZGV2KTsKIAogCWlmIChyaW5nLT50eCkgewotCQlpZiAocmluZy0+ZG1hNjQpIHsKKwkJaWYgKHJpbmctPnR5cGUgPT0gQjQzbGVnYWN5X0RNQV82NEJJVCkgewogCQkJdTY0IHJpbmdiYXNlID0gKHU2NCkocmluZy0+ZG1hYmFzZSk7CiAKIAkJCWFkZHJleHQgPSAoKHJpbmdiYXNlID4+IDMyKSAmIFNTQl9ETUFfVFJBTlNMQVRJT05fTUFTSykKQEAgLTcwOSw3ICs3NDcsNyBAQAogCQllcnIgPSBhbGxvY19pbml0aWFsX2Rlc2NidWZmZXJzKHJpbmcpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7Ci0JCWlmIChyaW5nLT5kbWE2NCkgeworCQlpZiAocmluZy0+dHlwZSA9PSBCNDNsZWdhY3lfRE1BXzY0QklUKSB7CiAJCQl1NjQgcmluZ2Jhc2UgPSAodTY0KShyaW5nLT5kbWFiYXNlKTsKIAogCQkJYWRkcmV4dCA9ICgocmluZ2Jhc2UgPj4gMzIpICYgU1NCX0RNQV9UUkFOU0xBVElPTl9NQVNLKQpAQCAtNzYwLDE2ICs3OTgsMTYgQEAKIHsKIAlpZiAocmluZy0+dHgpIHsKIAkJYjQzbGVnYWN5X2RtYWNvbnRyb2xsZXJfdHhfcmVzZXQocmluZy0+ZGV2LCByaW5nLT5tbWlvX2Jhc2UsCi0JCQkJCQkgcmluZy0+ZG1hNjQpOwotCQlpZiAocmluZy0+ZG1hNjQpIHsKKwkJCQkJCSByaW5nLT50eXBlKTsKKwkJaWYgKHJpbmctPnR5cGUgPT0gQjQzbGVnYWN5X0RNQV82NEJJVCkgewogCQkJYjQzbGVnYWN5X2RtYV93cml0ZShyaW5nLCBCNDNsZWdhY3lfRE1BNjRfVFhSSU5HTE8sIDApOwogCQkJYjQzbGVnYWN5X2RtYV93cml0ZShyaW5nLCBCNDNsZWdhY3lfRE1BNjRfVFhSSU5HSEksIDApOwogCQl9IGVsc2UKIAkJCWI0M2xlZ2FjeV9kbWFfd3JpdGUocmluZywgQjQzbGVnYWN5X0RNQTMyX1RYUklORywgMCk7CiAJfSBlbHNlIHsKIAkJYjQzbGVnYWN5X2RtYWNvbnRyb2xsZXJfcnhfcmVzZXQocmluZy0+ZGV2LCByaW5nLT5tbWlvX2Jhc2UsCi0JCQkJCQkgcmluZy0+ZG1hNjQpOwotCQlpZiAocmluZy0+ZG1hNjQpIHsKKwkJCQkJCSByaW5nLT50eXBlKTsKKwkJaWYgKHJpbmctPnR5cGUgPT0gQjQzbGVnYWN5X0RNQV82NEJJVCkgewogCQkJYjQzbGVnYWN5X2RtYV93cml0ZShyaW5nLCBCNDNsZWdhY3lfRE1BNjRfUlhSSU5HTE8sIDApOwogCQkJYjQzbGVnYWN5X2RtYV93cml0ZShyaW5nLCBCNDNsZWdhY3lfRE1BNjRfUlhSSU5HSEksIDApOwogCQl9IGVsc2UKQEAgLTgyNCwxMSArODYyLDEwIEBACiAKIC8qIE1haW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICovCiBzdGF0aWMKLXN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqYjQzbGVnYWN5X3NldHVwX2RtYXJpbmcoCi0JCQkJCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQkJaW50IGNvbnRyb2xsZXJfaW5kZXgsCi0JCQkJCWludCBmb3JfdHgsCi0JCQkJCWludCBkbWE2NCkKK3N0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqYjQzbGVnYWN5X3NldHVwX2RtYXJpbmcoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAorCQkJCQkJICBpbnQgY29udHJvbGxlcl9pbmRleCwKKwkJCQkJCSAgaW50IGZvcl90eCwKKwkJCQkJCSAgZW51bSBiNDNsZWdhY3lfZG1hdHlwZSB0eXBlKQogewogCXN0cnVjdCBiNDNsZWdhY3lfZG1hcmluZyAqcmluZzsKIAlpbnQgZXJyOwpAQCAtODM4LDYgKzg3NSw3IEBACiAJcmluZyA9IGt6YWxsb2Moc2l6ZW9mKCpyaW5nKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyaW5nKQogCQlnb3RvIG91dDsKKwlyaW5nLT50eXBlID0gdHlwZTsKIAogCW5yX3Nsb3RzID0gQjQzbGVnYWN5X1JYUklOR19TTE9UUzsKIAlpZiAoZm9yX3R4KQpAQCAtODU1LDEyICs4OTMsMTIgQEAKIAkJCWdvdG8gZXJyX2tmcmVlX21ldGE7CiAKIAkJLyogdGVzdCBmb3IgYWJpbGl0eSB0byBkbWEgdG8gdHhoZHJfY2FjaGUgKi8KLQkJZG1hX3Rlc3QgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi0+ZGV2LAotCQkJCXJpbmctPnR4aGRyX2NhY2hlLAotCQkJCXNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksCi0JCQkJRE1BX1RPX0RFVklDRSk7CisJCWRtYV90ZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYtPmRtYV9kZXYsIHJpbmctPnR4aGRyX2NhY2hlLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksCisJCQkJCSAgRE1BX1RPX0RFVklDRSk7CiAKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYV90ZXN0KSkgeworCQlpZiAoYjQzbGVnYWN5X2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYV90ZXN0LAorCQkJCQlzaXplb2Yoc3RydWN0IGI0M2xlZ2FjeV90eGhkcl9mdzMpLCAxKSkgewogCQkJLyogdWdoIHJlYWxsb2MgKi8KIAkJCWtmcmVlKHJpbmctPnR4aGRyX2NhY2hlKTsKIAkJCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhucl9zbG90cywKQEAgLTg2OSwyNyArOTA3LDI2IEBACiAJCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQogCQkJCWdvdG8gZXJyX2tmcmVlX21ldGE7CiAKLQkJCWRtYV90ZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYtPmRldiwKKwkJCWRtYV90ZXN0ID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYtPmRtYV9kZXYsCiAJCQkJCXJpbmctPnR4aGRyX2NhY2hlLAogCQkJCQlzaXplb2Yoc3RydWN0IGI0M2xlZ2FjeV90eGhkcl9mdzMpLAogCQkJCQlETUFfVE9fREVWSUNFKTsKIAotCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYV90ZXN0KSkKKwkJCWlmIChiNDNsZWdhY3lfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hX3Rlc3QsCisJCQkJCXNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksIDEpKQogCQkJCWdvdG8gZXJyX2tmcmVlX3R4aGRyX2NhY2hlOwogCQl9CiAKLQkJZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldi0+ZGV2LAorCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LT5kbWFfZGV2LAogCQkJCSBkbWFfdGVzdCwgc2l6ZW9mKHN0cnVjdCBiNDNsZWdhY3lfdHhoZHJfZnczKSwKIAkJCQkgRE1BX1RPX0RFVklDRSk7CiAJfQogCiAJcmluZy0+ZGV2ID0gZGV2OwogCXJpbmctPm5yX3Nsb3RzID0gbnJfc2xvdHM7Ci0JcmluZy0+bW1pb19iYXNlID0gYjQzbGVnYWN5X2RtYWNvbnRyb2xsZXJfYmFzZShkbWE2NCwKLQkJCQkJCSAgICAgICBjb250cm9sbGVyX2luZGV4KTsKKwlyaW5nLT5tbWlvX2Jhc2UgPSBiNDNsZWdhY3lfZG1hY29udHJvbGxlcl9iYXNlKHR5cGUsIGNvbnRyb2xsZXJfaW5kZXgpOwogCXJpbmctPmluZGV4ID0gY29udHJvbGxlcl9pbmRleDsKLQlyaW5nLT5kbWE2NCA9ICEhZG1hNjQ7Ci0JaWYgKGRtYTY0KQorCWlmICh0eXBlID09IEI0M2xlZ2FjeV9ETUFfNjRCSVQpCiAJCXJpbmctPm9wcyA9ICZkbWE2NF9vcHM7CiAJZWxzZQogCQlyaW5nLT5vcHMgPSAmZG1hMzJfb3BzOwpAQCAtOTM5LDEwICs5NzYsMTAgQEAKIAlpZiAoIXJpbmcpCiAJCXJldHVybjsKIAotCWI0M2xlZ2FjeWRiZyhyaW5nLT5kZXYtPndsLCAiRE1BLSVzIDB4JTA0WCAoJXMpIG1heCB1c2VkIHNsb3RzOiIKLQkJICAgICAiICVkLyVkXG4iLCAocmluZy0+ZG1hNjQpID8gIjY0IiA6ICIzMiIsIHJpbmctPm1taW9fYmFzZSwKLQkJICAgICAocmluZy0+dHgpID8gIlRYIiA6ICJSWCIsCi0JCSAgICAgcmluZy0+bWF4X3VzZWRfc2xvdHMsIHJpbmctPm5yX3Nsb3RzKTsKKwliNDNsZWdhY3lkYmcocmluZy0+ZGV2LT53bCwgIkRNQS0ldSAweCUwNFggKCVzKSBtYXggdXNlZCBzbG90czoiCisJCSAgICAgIiAlZC8lZFxuIiwgKHVuc2lnbmVkIGludCkocmluZy0+dHlwZSksIHJpbmctPm1taW9fYmFzZSwKKwkJICAgICAocmluZy0+dHgpID8gIlRYIiA6ICJSWCIsIHJpbmctPm1heF91c2VkX3Nsb3RzLAorCQkgICAgIHJpbmctPm5yX3Nsb3RzKTsKIAkvKiBEZXZpY2UgSVJRcyBhcmUgZGlzYWJsZWQgcHJpb3IgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbiwKIAkgKiBzbyBubyBuZWVkIHRvIHRha2UgY2FyZSBvZiBjb25jdXJyZW5jeSB3aXRoIHJ4IGhhbmRsZXIgc3R1ZmYuCiAJICovCkBAIC05ODgsMTEgKzEwMjUsMjIgQEAKIAlzdHJ1Y3QgYjQzbGVnYWN5X2RtYXJpbmcgKnJpbmc7CiAJaW50IGVycjsKIAl1NjQgZG1hbWFzazsKLQlpbnQgZG1hNjQgPSAwOworCWVudW0gYjQzbGVnYWN5X2RtYXR5cGUgdHlwZTsKIAogCWRtYW1hc2sgPSBzdXBwb3J0ZWRfZG1hX21hc2soZGV2KTsKLQlpZiAoZG1hbWFzayA9PSBETUFfNjRCSVRfTUFTSykKLQkJZG1hNjQgPSAxOworCXN3aXRjaCAoZG1hbWFzaykgeworCWRlZmF1bHQ6CisJCUI0M2xlZ2FjeV9XQVJOX09OKDEpOworCWNhc2UgRE1BXzMwQklUX01BU0s6CisJCXR5cGUgPSBCNDNsZWdhY3lfRE1BXzMwQklUOworCQlicmVhazsKKwljYXNlIERNQV8zMkJJVF9NQVNLOgorCQl0eXBlID0gQjQzbGVnYWN5X0RNQV8zMkJJVDsKKwkJYnJlYWs7CisJY2FzZSBETUFfNjRCSVRfTUFTSzoKKwkJdHlwZSA9IEI0M2xlZ2FjeV9ETUFfNjRCSVQ7CisJCWJyZWFrOworCX0KIAogCWVyciA9IHNzYl9kbWFfc2V0X21hc2soZGV2LT5kZXYsIGRtYW1hc2spOwogCWlmIChlcnIpIHsKQEAgLTEwMTAsNTIgKzEwNTgsNTAgQEAKIAogCWVyciA9IC1FTk9NRU07CiAJLyogc2V0dXAgVFggRE1BIGNoYW5uZWxzLiAqLwotCXJpbmcgPSBiNDNsZWdhY3lfc2V0dXBfZG1hcmluZyhkZXYsIDAsIDEsIGRtYTY0KTsKKwlyaW5nID0gYjQzbGVnYWN5X3NldHVwX2RtYXJpbmcoZGV2LCAwLCAxLCB0eXBlKTsKIAlpZiAoIXJpbmcpCiAJCWdvdG8gb3V0OwogCWRtYS0+dHhfcmluZzAgPSByaW5nOwogCi0JcmluZyA9IGI0M2xlZ2FjeV9zZXR1cF9kbWFyaW5nKGRldiwgMSwgMSwgZG1hNjQpOworCXJpbmcgPSBiNDNsZWdhY3lfc2V0dXBfZG1hcmluZyhkZXYsIDEsIDEsIHR5cGUpOwogCWlmICghcmluZykKIAkJZ290byBlcnJfZGVzdHJveV90eDA7CiAJZG1hLT50eF9yaW5nMSA9IHJpbmc7CiAKLQlyaW5nID0gYjQzbGVnYWN5X3NldHVwX2RtYXJpbmcoZGV2LCAyLCAxLCBkbWE2NCk7CisJcmluZyA9IGI0M2xlZ2FjeV9zZXR1cF9kbWFyaW5nKGRldiwgMiwgMSwgdHlwZSk7CiAJaWYgKCFyaW5nKQogCQlnb3RvIGVycl9kZXN0cm95X3R4MTsKIAlkbWEtPnR4X3JpbmcyID0gcmluZzsKIAotCXJpbmcgPSBiNDNsZWdhY3lfc2V0dXBfZG1hcmluZyhkZXYsIDMsIDEsIGRtYTY0KTsKKwlyaW5nID0gYjQzbGVnYWN5X3NldHVwX2RtYXJpbmcoZGV2LCAzLCAxLCB0eXBlKTsKIAlpZiAoIXJpbmcpCiAJCWdvdG8gZXJyX2Rlc3Ryb3lfdHgyOwogCWRtYS0+dHhfcmluZzMgPSByaW5nOwogCi0JcmluZyA9IGI0M2xlZ2FjeV9zZXR1cF9kbWFyaW5nKGRldiwgNCwgMSwgZG1hNjQpOworCXJpbmcgPSBiNDNsZWdhY3lfc2V0dXBfZG1hcmluZyhkZXYsIDQsIDEsIHR5cGUpOwogCWlmICghcmluZykKIAkJZ290byBlcnJfZGVzdHJveV90eDM7CiAJZG1hLT50eF9yaW5nNCA9IHJpbmc7CiAKLQlyaW5nID0gYjQzbGVnYWN5X3NldHVwX2RtYXJpbmcoZGV2LCA1LCAxLCBkbWE2NCk7CisJcmluZyA9IGI0M2xlZ2FjeV9zZXR1cF9kbWFyaW5nKGRldiwgNSwgMSwgdHlwZSk7CiAJaWYgKCFyaW5nKQogCQlnb3RvIGVycl9kZXN0cm95X3R4NDsKIAlkbWEtPnR4X3Jpbmc1ID0gcmluZzsKIAogCS8qIHNldHVwIFJYIERNQSBjaGFubmVscy4gKi8KLQlyaW5nID0gYjQzbGVnYWN5X3NldHVwX2RtYXJpbmcoZGV2LCAwLCAwLCBkbWE2NCk7CisJcmluZyA9IGI0M2xlZ2FjeV9zZXR1cF9kbWFyaW5nKGRldiwgMCwgMCwgdHlwZSk7CiAJaWYgKCFyaW5nKQogCQlnb3RvIGVycl9kZXN0cm95X3R4NTsKIAlkbWEtPnJ4X3JpbmcwID0gcmluZzsKIAogCWlmIChkZXYtPmRldi0+aWQucmV2aXNpb24gPCA1KSB7Ci0JCXJpbmcgPSBiNDNsZWdhY3lfc2V0dXBfZG1hcmluZyhkZXYsIDMsIDAsIGRtYTY0KTsKKwkJcmluZyA9IGI0M2xlZ2FjeV9zZXR1cF9kbWFyaW5nKGRldiwgMywgMCwgdHlwZSk7CiAJCWlmICghcmluZykKIAkJCWdvdG8gZXJyX2Rlc3Ryb3lfcngwOwogCQlkbWEtPnJ4X3JpbmczID0gcmluZzsKIAl9CiAKLQliNDNsZWdhY3lkYmcoZGV2LT53bCwgIiVkLWJpdCBETUEgaW5pdGlhbGl6ZWRcbiIsCi0JICAgICAgIChkbWFtYXNrID09IERNQV82NEJJVF9NQVNLKSA/IDY0IDoKLQkgICAgICAgKGRtYW1hc2sgPT0gRE1BXzMyQklUX01BU0spID8gMzIgOiAzMCk7CisJYjQzbGVnYWN5ZGJnKGRldi0+d2wsICIldS1iaXQgRE1BIGluaXRpYWxpemVkXG4iLCAodW5zaWduZWQgaW50KXR5cGUpOwogCWVyciA9IDA7CiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTExOTQsOSArMTI0MCwxMyBAQAogCX0KIAogCW1ldGFfaGRyLT5kbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgKHVuc2lnbmVkIGNoYXIgKiloZWFkZXIsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksIDEpOwotCWlmIChkbWFfbWFwcGluZ19lcnJvcihtZXRhX2hkci0+ZG1hYWRkcikpCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksIDEpOworCWlmIChiNDNsZWdhY3lfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YV9oZHItPmRtYWFkZHIsCisJCQkJCXNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksIDEpKSB7CisJCXJpbmctPmN1cnJlbnRfc2xvdCA9IG9sZF90b3Bfc2xvdDsKKwkJcmluZy0+dXNlZF9zbG90cyA9IG9sZF91c2VkX3Nsb3RzOwogCQlyZXR1cm4gLUVJTzsKKwl9CiAJb3BzLT5maWxsX2Rlc2NyaXB0b3IocmluZywgZGVzYywgbWV0YV9oZHItPmRtYWFkZHIsCiAJCQkgICAgIHNpemVvZihzdHJ1Y3QgYjQzbGVnYWN5X3R4aGRyX2Z3MyksIDEsIDAsIDApOwogCkBAIC0xMjExLDcgKzEyNjEsNyBAQAogCiAJbWV0YS0+ZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIDEpOwogCS8qIGNyZWF0ZSBhIGJvdW5jZSBidWZmZXIgaW4gem9uZV9kbWEgb24gbWFwcGluZyBmYWlsdXJlLiAqLwotCWlmIChkbWFfbWFwcGluZ19lcnJvcihtZXRhLT5kbWFhZGRyKSkgeworCWlmIChiNDNsZWdhY3lfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4sIDEpKSB7CiAJCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2Ioc2tiLT5sZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKIAkJaWYgKCFib3VuY2Vfc2tiKSB7CiAJCQlyaW5nLT5jdXJyZW50X3Nsb3QgPSBvbGRfdG9wX3Nsb3Q7CkBAIC0xMjI1LDcgKzEyNzUsNyBAQAogCQlza2IgPSBib3VuY2Vfc2tiOwogCQltZXRhLT5za2IgPSBza2I7CiAJCW1ldGEtPmRtYWFkZHIgPSBtYXBfZGVzY2J1ZmZlcihyaW5nLCBza2ItPmRhdGEsIHNrYi0+bGVuLCAxKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1ldGEtPmRtYWFkZHIpKSB7CisJCWlmIChiNDNsZWdhY3lfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4sIDEpKSB7CiAJCQlyaW5nLT5jdXJyZW50X3Nsb3QgPSBvbGRfdG9wX3Nsb3Q7CiAJCQlyaW5nLT51c2VkX3Nsb3RzID0gb2xkX3VzZWRfc2xvdHM7CiAJCQllcnIgPSAtRUlPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5oCmluZGV4IDI2ZjZhYjAuLjJkZDQ4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmgKQEAgLTIxOCw2ICsyMTgsMTIgQEAKIAl2b2lkICgqc2V0X2N1cnJlbnRfcnhzbG90KShzdHJ1Y3QgYjQzbGVnYWN5X2RtYXJpbmcgKnJpbmcsIGludCBzbG90KTsKIH07CiAKK2VudW0gYjQzbGVnYWN5X2RtYXR5cGUgeworCUI0M2xlZ2FjeV9ETUFfMzBCSVQgPSAzMCwKKwlCNDNsZWdhY3lfRE1BXzMyQklUID0gMzIsCisJQjQzbGVnYWN5X0RNQV82NEJJVCA9IDY0LAorfTsKKwogc3RydWN0IGI0M2xlZ2FjeV9kbWFyaW5nIHsKIAkvKiBMb3dsZXZlbCBETUEgb3BzLiAqLwogCWNvbnN0IHN0cnVjdCBiNDNsZWdhY3lfZG1hX29wcyAqb3BzOwpAQCAtMjUwLDggKzI1Niw4IEBACiAJaW50IGluZGV4OwogCS8qIEJvb2xlYW4uIElzIHRoaXMgYSBUWCByaW5nPyAqLwogCWJvb2wgdHg7Ci0JLyogQm9vbGVhbi4gNjRiaXQgRE1BIGlmIHRydWUsIDMyYml0IERNQSBvdGhlcndpc2UuICovCi0JYm9vbCBkbWE2NDsKKwkvKiBUaGUgdHlwZSBvZiBETUEgZW5naW5lIHVzZWQuICovCisJZW51bSBiNDNsZWdhY3lfZG1hdHlwZSB0eXBlOwogCS8qIEJvb2xlYW4uIElzIHRoaXMgcmluZyBzdG9wcGVkIGF0IGllZWU4MDIxMSBsZXZlbD8gKi8KIAlib29sIHN0b3BwZWQ7CiAJLyogTG9jaywgb25seSB1c2VkIGZvciBUWC4gKi8KQEAgLTI4NCwxNSArMjkwLDYgQEAKIGludCBiNDNsZWdhY3lfZG1hX2luaXQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KTsKIHZvaWQgYjQzbGVnYWN5X2RtYV9mcmVlKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldik7CiAKLWludCBiNDNsZWdhY3lfZG1hY29udHJvbGxlcl9yeF9yZXNldChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCQkJICAgICB1MTYgZG1hY29udHJvbGxlcl9tbWlvX2Jhc2UsCi0JCQkJICAgICBpbnQgZG1hNjQpOwotaW50IGI0M2xlZ2FjeV9kbWFjb250cm9sbGVyX3R4X3Jlc2V0KHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQkgICAgIHUxNiBkbWFjb250cm9sbGVyX21taW9fYmFzZSwKLQkJCQkgICAgIGludCBkbWE2NCk7Ci0KLXUxNiBiNDNsZWdhY3lfZG1hY29udHJvbGxlcl9iYXNlKGludCBkbWE2NGJpdCwgaW50IGRtYWNvbnRyb2xsZXJfaWR4KTsKLQogdm9pZCBiNDNsZWdhY3lfZG1hX3R4X3N1c3BlbmQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KTsKIHZvaWQgYjQzbGVnYWN5X2RtYV90eF9yZXN1bWUoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KTsKIApAQCAtMzIwLDIwICszMTcsNiBAQAogewogfQogc3RhdGljIGlubGluZQotaW50IGI0M2xlZ2FjeV9kbWFjb250cm9sbGVyX3J4X3Jlc2V0KHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQkgICAgIHUxNiBkbWFjb250cm9sbGVyX21taW9fYmFzZSwKLQkJCQkgICAgIGludCBkbWE2NCkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUKLWludCBiNDNsZWdhY3lfZG1hY29udHJvbGxlcl90eF9yZXNldChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCQkJICAgICB1MTYgZG1hY29udHJvbGxlcl9tbWlvX2Jhc2UsCi0JCQkJICAgICBpbnQgZG1hNjQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lCiB2b2lkIGI0M2xlZ2FjeV9kbWFfZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IDUzZjdmMmUuLmVmODI5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMyw3ICszLDcgQEAKICAqICBCcm9hZGNvbSBCNDNsZWdhY3kgd2lyZWxlc3MgZHJpdmVyCiAgKgogICogIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBTdGVmYW5vIEJyaXZpbyA8c3RlZmFuby5icml2aW9AcG9saW1pLml0PgorICogIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IFN0ZWZhbm8gQnJpdmlvIDxzdGVmYW5vLmJyaXZpb0Bwb2xpbWkuaXQ+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgogICogIENvcHlyaWdodCAoYykgMjAwNSBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KQEAgLTYwLDYgKzYwLDggQEAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgQnVlc2NoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK01PRFVMRV9GSVJNV0FSRShCNDNsZWdhY3lfU1VQUE9SVEVEX0ZJUk1XQVJFX0lEKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0I0M0xFR0FDWV9ETUEpICYmIGRlZmluZWQoQ09ORklHX0I0M0xFR0FDWV9QSU8pCiBzdGF0aWMgaW50IG1vZHBhcmFtX3BpbzsKIG1vZHVsZV9wYXJhbV9uYW1lZChwaW8sIG1vZHBhcmFtX3BpbywgaW50LCAwNDQ0KTsKQEAgLTkzLDI4ICs5NSwyOSBAQAogICogZGF0YSBpbiB0aGVyZS4gVGhpcyBkYXRhIGlzIHRoZSBzYW1lIGZvciBhbGwgZGV2aWNlcywgc28gd2UgZG9uJ3QKICAqIGdldCBjb25jdXJyZW5jeSBpc3N1ZXMgKi8KICNkZWZpbmUgUkFURVRBQl9FTlQoX3JhdGVpZCwgX2ZsYWdzKSBcCi0JewkJCQkJCQlcCi0JCS5yYXRlCT0gQjQzbGVnYWN5X1JBVEVfVE9fMTAwS0JQUyhfcmF0ZWlkKSwJXAotCQkudmFsCT0gKF9yYXRlaWQpLAkJCQlcCi0JCS52YWwyCT0gKF9yYXRlaWQpLAkJCQlcCi0JCS5mbGFncwk9IChfZmxhZ3MpLAkJCQlcCisJewkJCQkJCQkJXAorCQkuYml0cmF0ZQk9IEI0M2xlZ2FjeV9SQVRFX1RPXzEwMEtCUFMoX3JhdGVpZCksCVwKKwkJLmh3X3ZhbHVlCT0gKF9yYXRlaWQpLAkJCQlcCisJCS5mbGFncwkJPSAoX2ZsYWdzKSwJCQkJXAogCX0KKy8qCisgKiBOT1RFOiBXaGVuIGNoYW5naW5nIHRoaXMsIHN5bmMgd2l0aCB4bWl0LmMncworICoJIGI0M2xlZ2FjeV9wbGNwX2dldF9iaXRyYXRlX2lkeF8qIGZ1bmN0aW9ucyEKKyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBfX2I0M2xlZ2FjeV9yYXRldGFibGVbXSA9IHsKLQlSQVRFVEFCX0VOVChCNDNsZWdhY3lfQ0NLX1JBVEVfMU1CLCBJRUVFODAyMTFfUkFURV9DQ0spLAotCVJBVEVUQUJfRU5UKEI0M2xlZ2FjeV9DQ0tfUkFURV8yTUIsIElFRUU4MDIxMV9SQVRFX0NDS18yKSwKLQlSQVRFVEFCX0VOVChCNDNsZWdhY3lfQ0NLX1JBVEVfNU1CLCBJRUVFODAyMTFfUkFURV9DQ0tfMiksCi0JUkFURVRBQl9FTlQoQjQzbGVnYWN5X0NDS19SQVRFXzExTUIsIElFRUU4MDIxMV9SQVRFX0NDS18yKSwKLQlSQVRFVEFCX0VOVChCNDNsZWdhY3lfT0ZETV9SQVRFXzZNQiwgSUVFRTgwMjExX1JBVEVfT0ZETSksCi0JUkFURVRBQl9FTlQoQjQzbGVnYWN5X09GRE1fUkFURV85TUIsIElFRUU4MDIxMV9SQVRFX09GRE0pLAotCVJBVEVUQUJfRU5UKEI0M2xlZ2FjeV9PRkRNX1JBVEVfMTJNQiwgSUVFRTgwMjExX1JBVEVfT0ZETSksCi0JUkFURVRBQl9FTlQoQjQzbGVnYWN5X09GRE1fUkFURV8xOE1CLCBJRUVFODAyMTFfUkFURV9PRkRNKSwKLQlSQVRFVEFCX0VOVChCNDNsZWdhY3lfT0ZETV9SQVRFXzI0TUIsIElFRUU4MDIxMV9SQVRFX09GRE0pLAotCVJBVEVUQUJfRU5UKEI0M2xlZ2FjeV9PRkRNX1JBVEVfMzZNQiwgSUVFRTgwMjExX1JBVEVfT0ZETSksCi0JUkFURVRBQl9FTlQoQjQzbGVnYWN5X09GRE1fUkFURV80OE1CLCBJRUVFODAyMTFfUkFURV9PRkRNKSwKLQlSQVRFVEFCX0VOVChCNDNsZWdhY3lfT0ZETV9SQVRFXzU0TUIsIElFRUU4MDIxMV9SQVRFX09GRE0pLAorCVJBVEVUQUJfRU5UKEI0M2xlZ2FjeV9DQ0tfUkFURV8xTUIsIDApLAorCVJBVEVUQUJfRU5UKEI0M2xlZ2FjeV9DQ0tfUkFURV8yTUIsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFVEFCX0VOVChCNDNsZWdhY3lfQ0NLX1JBVEVfNU1CLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURVRBQl9FTlQoQjQzbGVnYWN5X0NDS19SQVRFXzExTUIsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFVEFCX0VOVChCNDNsZWdhY3lfT0ZETV9SQVRFXzZNQiwgMCksCisJUkFURVRBQl9FTlQoQjQzbGVnYWN5X09GRE1fUkFURV85TUIsIDApLAorCVJBVEVUQUJfRU5UKEI0M2xlZ2FjeV9PRkRNX1JBVEVfMTJNQiwgMCksCisJUkFURVRBQl9FTlQoQjQzbGVnYWN5X09GRE1fUkFURV8xOE1CLCAwKSwKKwlSQVRFVEFCX0VOVChCNDNsZWdhY3lfT0ZETV9SQVRFXzI0TUIsIDApLAorCVJBVEVUQUJfRU5UKEI0M2xlZ2FjeV9PRkRNX1JBVEVfMzZNQiwgMCksCisJUkFURVRBQl9FTlQoQjQzbGVnYWN5X09GRE1fUkFURV80OE1CLCAwKSwKKwlSQVRFVEFCX0VOVChCNDNsZWdhY3lfT0ZETV9SQVRFXzU0TUIsIDApLAogfTsKLSNkZWZpbmUgYjQzbGVnYWN5X2FfcmF0ZXRhYmxlCQkoX19iNDNsZWdhY3lfcmF0ZXRhYmxlICsgNCkKLSNkZWZpbmUgYjQzbGVnYWN5X2FfcmF0ZXRhYmxlX3NpemUJOAogI2RlZmluZSBiNDNsZWdhY3lfYl9yYXRldGFibGUJCShfX2I0M2xlZ2FjeV9yYXRldGFibGUgKyAwKQogI2RlZmluZSBiNDNsZWdhY3lfYl9yYXRldGFibGVfc2l6ZQk0CiAjZGVmaW5lIGI0M2xlZ2FjeV9nX3JhdGV0YWJsZQkJKF9fYjQzbGVnYWN5X3JhdGV0YWJsZSArIDApCkBAIC0xMjIsMTQgKzEyNSw4IEBACiAKICNkZWZpbmUgQ0hBTlRBQl9FTlQoX2NoYW5pZCwgX2ZyZXEpIFwKIAl7CQkJCQkJCVwKLQkJLmNoYW4JPSAoX2NoYW5pZCksCQkJCVwKLQkJLmZyZXEJPSAoX2ZyZXEpLAkJCQlcCi0JCS52YWwJPSAoX2NoYW5pZCksCQkJCVwKLQkJLmZsYWcJPSBJRUVFODAyMTFfQ0hBTl9XX1NDQU4gfAkJXAotCQkJICBJRUVFODAyMTFfQ0hBTl9XX0FDVElWRV9TQ0FOIHwJXAotCQkJICBJRUVFODAyMTFfQ0hBTl9XX0lCU1MsCQlcCi0JCS5wb3dlcl9sZXZlbAk9IDB4MEEsCQkJCVwKLQkJLmFudGVubmFfbWF4CT0gMHhGRiwJCQkJXAorCQkuY2VudGVyX2ZyZXEJPSAoX2ZyZXEpLAkJCVwKKwkJLmh3X3ZhbHVlCT0gKF9jaGFuaWQpLAkJCVwKIAl9CiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGI0M2xlZ2FjeV9iZ19jaGFudGFibGVbXSA9IHsKIAlDSEFOVEFCX0VOVCgxLCAyNDEyKSwKQEAgLTE0Nyw3ICsxNDQsMjAgQEAKIAlDSEFOVEFCX0VOVCgxMywgMjQ3MiksCiAJQ0hBTlRBQl9FTlQoMTQsIDI0ODQpLAogfTsKLSNkZWZpbmUgYjQzbGVnYWN5X2JnX2NoYW50YWJsZV9zaXplCUFSUkFZX1NJWkUoYjQzbGVnYWN5X2JnX2NoYW50YWJsZSkKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYjQzbGVnYWN5X2JhbmRfMkdIel9CUEhZID0geworCS5jaGFubmVscyA9IGI0M2xlZ2FjeV9iZ19jaGFudGFibGUsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGI0M2xlZ2FjeV9iZ19jaGFudGFibGUpLAorCS5iaXRyYXRlcyA9IGI0M2xlZ2FjeV9iX3JhdGV0YWJsZSwKKwkubl9iaXRyYXRlcyA9IGI0M2xlZ2FjeV9iX3JhdGV0YWJsZV9zaXplLAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYjQzbGVnYWN5X2JhbmRfMkdIel9HUEhZID0geworCS5jaGFubmVscyA9IGI0M2xlZ2FjeV9iZ19jaGFudGFibGUsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGI0M2xlZ2FjeV9iZ19jaGFudGFibGUpLAorCS5iaXRyYXRlcyA9IGI0M2xlZ2FjeV9nX3JhdGV0YWJsZSwKKwkubl9iaXRyYXRlcyA9IGI0M2xlZ2FjeV9nX3JhdGV0YWJsZV9zaXplLAorfTsKIAogc3RhdGljIHZvaWQgYjQzbGVnYWN5X3dpcmVsZXNzX2NvcmVfZXhpdChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpOwogc3RhdGljIGludCBiNDNsZWdhY3lfd2lyZWxlc3NfY29yZV9pbml0KHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldik7CkBAIC03OTUsOSArODA1LDggQEAKIHsKIAliNDNsZWdhY3lfanNzaV93cml0ZShkZXYsIDB4N0Y3RjdGN0YpOwogCWI0M2xlZ2FjeV93cml0ZTMyKGRldiwgQjQzbGVnYWN5X01NSU9fTUFDQ01ELAotCQkJICBiNDNsZWdhY3lfcmVhZDMyKGRldiwKLQkJCSAgQjQzbGVnYWN5X01NSU9fTUFDQ01EKQotCQkJICB8ICgxIDw8IDQpKTsKKwkJCSAgYjQzbGVnYWN5X3JlYWQzMihkZXYsIEI0M2xlZ2FjeV9NTUlPX01BQ0NNRCkKKwkJCSAgfCBCNDNsZWdhY3lfTUFDQ01EX0JHTk9JU0UpOwogCUI0M2xlZ2FjeV9XQVJOX09OKGRldi0+bm9pc2VjYWxjLmNoYW5uZWxfYXRfc3RhcnQgIT0KIAkJCSAgICBkZXYtPnBoeS5jaGFubmVsKTsKIH0KQEAgLTg4NiwxOCArODk1LDE4IEBACiAJCWlmICgxLypGSVhNRTogdGhlIGxhc3QgUFNwb2xsIGZyYW1lIHdhcyBzZW50IHN1Y2Nlc3NmdWxseSAqLykKIAkJCWI0M2xlZ2FjeV9wb3dlcl9zYXZpbmdfY3RsX2JpdHMoZGV2LCAtMSwgLTEpOwogCX0KLQlkZXYtPnJlZzEyNF9zZXRfMHg0ID0gMDsKIAlpZiAoYjQzbGVnYWN5X2lzX21vZGUoZGV2LT53bCwgSUVFRTgwMjExX0lGX1RZUEVfSUJTUykpCi0JCWRldi0+cmVnMTI0X3NldF8weDQgPSAxOworCQlkZXYtPmRmcV92YWxpZCA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9pcnFfYXRpbV9lbmQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KQogewotCWlmICghZGV2LT5yZWcxMjRfc2V0XzB4NCkgLypGSVhNRSByZW5hbWUgdGhpcyB2YXJpYWJsZSovCi0JCXJldHVybjsKLQliNDNsZWdhY3lfd3JpdGUzMihkZXYsIEI0M2xlZ2FjeV9NTUlPX01BQ0NNRCwKLQkJCSAgYjQzbGVnYWN5X3JlYWQzMihkZXYsIEI0M2xlZ2FjeV9NTUlPX01BQ0NNRCkKLQkJCSAgfCAweDQpOworCWlmIChkZXYtPmRmcV92YWxpZCkgeworCQliNDNsZWdhY3lfd3JpdGUzMihkZXYsIEI0M2xlZ2FjeV9NTUlPX01BQ0NNRCwKKwkJCQkgIGI0M2xlZ2FjeV9yZWFkMzIoZGV2LCBCNDNsZWdhY3lfTU1JT19NQUNDTUQpCisJCQkJICB8IEI0M2xlZ2FjeV9NQUNDTURfREZRX1ZBTElEKTsKKwkJZGV2LT5kZnFfdmFsaWQgPSAwOworCX0KIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX2lycV9wbXEoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KQpAQCAtOTUzLDMyICs5NjIsNzcgQEAKIAkJCQkJICAgIHUxNiByYW1fb2Zmc2V0LAogCQkJCQkgICAgdTE2IHNobV9zaXplX29mZnNldCwgdTggcmF0ZSkKIHsKLQlpbnQgbGVuOwotCWNvbnN0IHU4ICpkYXRhOwogCi0JQjQzbGVnYWN5X1dBUk5fT04oIWRldi0+Y2FjaGVkX2JlYWNvbik7Ci0JbGVuID0gbWluKChzaXplX3QpZGV2LT5jYWNoZWRfYmVhY29uLT5sZW4sCisJdW5zaWduZWQgaW50IGksIGxlbiwgdmFyaWFibGVfbGVuOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqYmNuOworCWNvbnN0IHU4ICppZTsKKwlib29sIHRpbV9mb3VuZCA9IDA7CisKKwliY24gPSAoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9tZ210ICopKGRldi0+d2wtPmN1cnJlbnRfYmVhY29uLT5kYXRhKTsKKwlsZW4gPSBtaW4oKHNpemVfdClkZXYtPndsLT5jdXJyZW50X2JlYWNvbi0+bGVuLAogCQkgIDB4MjAwIC0gc2l6ZW9mKHN0cnVjdCBiNDNsZWdhY3lfcGxjcF9oZHI2KSk7Ci0JZGF0YSA9IChjb25zdCB1OCAqKShkZXYtPmNhY2hlZF9iZWFjb24tPmRhdGEpOwotCWI0M2xlZ2FjeV93cml0ZV90ZW1wbGF0ZV9jb21tb24oZGV2LCBkYXRhLAotCQkJCQlsZW4sIHJhbV9vZmZzZXQsCisKKwliNDNsZWdhY3lfd3JpdGVfdGVtcGxhdGVfY29tbW9uKGRldiwgKGNvbnN0IHU4ICopYmNuLCBsZW4sIHJhbV9vZmZzZXQsCiAJCQkJCXNobV9zaXplX29mZnNldCwgcmF0ZSk7CisKKwkvKiBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgVElNIGFuZCB0aGUgRFRJTV9wZXJpb2QgdmFsdWUKKwkgKiBhbmQgd3JpdGUgdGhlbSB0byBTSE0uICovCisJaWUgPSBiY24tPnUuYmVhY29uLnZhcmlhYmxlOworCXZhcmlhYmxlX2xlbiA9IGxlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOworCWZvciAoaSA9IDA7IGkgPCB2YXJpYWJsZV9sZW4gLSAyOyApIHsKKwkJdWludDhfdCBpZV9pZCwgaWVfbGVuOworCisJCWllX2lkID0gaWVbaV07CisJCWllX2xlbiA9IGllW2kgKyAxXTsKKwkJaWYgKGllX2lkID09IDUpIHsKKwkJCXUxNiB0aW1fcG9zaXRpb247CisJCQl1MTYgZHRpbV9wZXJpb2Q7CisJCQkvKiBUaGlzIGlzIHRoZSBUSU0gSW5mb3JtYXRpb24gRWxlbWVudCAqLworCisJCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBpZV9sZW4gaXMgaW4gdGhlIGJlYWNvbiBkYXRhIHJhbmdlLiAqLworCQkJaWYgKHZhcmlhYmxlX2xlbiA8IGllX2xlbiArIDIgKyBpKQorCQkJCWJyZWFrOworCQkJLyogQSB2YWxpZCBUSU0gaXMgYXQgbGVhc3QgNCBieXRlcyBsb25nLiAqLworCQkJaWYgKGllX2xlbiA8IDQpCisJCQkJYnJlYWs7CisJCQl0aW1fZm91bmQgPSAxOworCisJCQl0aW1fcG9zaXRpb24gPSBzaXplb2Yoc3RydWN0IGI0M2xlZ2FjeV9wbGNwX2hkcjYpOworCQkJdGltX3Bvc2l0aW9uICs9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkJCSB1LmJlYWNvbi52YXJpYWJsZSk7CisJCQl0aW1fcG9zaXRpb24gKz0gaTsKKworCQkJZHRpbV9wZXJpb2QgPSBpZVtpICsgM107CisKKwkJCWI0M2xlZ2FjeV9zaG1fd3JpdGUxNihkZXYsIEI0M2xlZ2FjeV9TSE1fU0hBUkVELAorCQkJCQlCNDNsZWdhY3lfU0hNX1NIX1RJTVBPUywgdGltX3Bvc2l0aW9uKTsKKwkJCWI0M2xlZ2FjeV9zaG1fd3JpdGUxNihkZXYsIEI0M2xlZ2FjeV9TSE1fU0hBUkVELAorCQkJCQlCNDNsZWdhY3lfU0hNX1NIX0RUSU1QLCBkdGltX3BlcmlvZCk7CisJCQlicmVhazsKKwkJfQorCQlpICs9IGllX2xlbiArIDI7CisJfQorCWlmICghdGltX2ZvdW5kKSB7CisJCWI0M2xlZ2FjeXdhcm4oZGV2LT53bCwgIkRpZCBub3QgZmluZCBhIHZhbGlkIFRJTSBJRSBpbiB0aGUgIgorCQkJICAgICAgImJlYWNvbiB0ZW1wbGF0ZSBwYWNrZXQuIEFQIG9yIElCU1Mgb3BlcmF0aW9uICIKKwkJCSAgICAgICJtYXkgYmUgYnJva2VuLlxuIik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJCQkJICAgIHUxNiBzaG1fb2Zmc2V0LCB1MTYgc2l6ZSwKLQkJCQkJICAgIHU4IHJhdGUpCisJCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV9wbGNwX2hkcjQgcGxjcDsKIAl1MzIgdG1wOwogCV9fbGUxNiBkdXI7CiAKIAlwbGNwLmRhdGEgPSAwOwotCWI0M2xlZ2FjeV9nZW5lcmF0ZV9wbGNwX2hkcigmcGxjcCwgc2l6ZSArIEZDU19MRU4sIHJhdGUpOworCWI0M2xlZ2FjeV9nZW5lcmF0ZV9wbGNwX2hkcigmcGxjcCwgc2l6ZSArIEZDU19MRU4sIHJhdGUtPmJpdHJhdGUpOwogCWR1ciA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKGRldi0+d2wtPmh3LAogCQkJCQkgICAgICAgZGV2LT53bC0+dmlmLAogCQkJCQkgICAgICAgc2l6ZSwKLQkJCQkJICAgICAgIEI0M2xlZ2FjeV9SQVRFX1RPXzEwMEtCUFMocmF0ZSkpOworCQkJCQkgICAgICAgcmF0ZSk7CiAJLyogV3JpdGUgUExDUCBpbiB0d28gcGFydHMgYW5kIHRpbWluZyBmb3IgcGFja2V0IHRyYW5zZmVyICovCiAJdG1wID0gbGUzMl90b19jcHUocGxjcC5kYXRhKTsKIAliNDNsZWdhY3lfc2htX3dyaXRlMTYoZGV2LCBCNDNsZWdhY3lfU0hNX1NIQVJFRCwgc2htX29mZnNldCwKQEAgLTk5NSw0NSArMTA0OSw0NCBAQAogICogMikgUGF0Y2hpbmcgZHVyYXRpb24gZmllbGQKICAqIDMpIFN0cmlwcGluZyBUSU0KICAqLwotc3RhdGljIHU4ICpiNDNsZWdhY3lfZ2VuZXJhdGVfcHJvYmVfcmVzcChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCQkJCSB1MTYgKmRlc3Rfc2l6ZSwgdTggcmF0ZSkKK3N0YXRpYyBjb25zdCB1OCAqYjQzbGVnYWN5X2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAorCQkJCQkgICAgICAgdTE2ICpkZXN0X3NpemUsCisJCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCiB7CiAJY29uc3QgdTggKnNyY19kYXRhOwogCXU4ICpkZXN0X2RhdGE7Ci0JdTE2IHNyY19zaXplOwotCXUxNiBlbGVtX3NpemU7Ci0JdTE2IHNyY19wb3M7Ci0JdTE2IGRlc3RfcG9zOworCXUxNiBzcmNfc2l6ZSwgZWxlbV9zaXplLCBzcmNfcG9zLCBkZXN0X3BvczsKIAlfX2xlMTYgZHVyOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc2l6ZV90IGllX3N0YXJ0OwogCi0JQjQzbGVnYWN5X1dBUk5fT04oIWRldi0+Y2FjaGVkX2JlYWNvbik7Ci0Jc3JjX3NpemUgPSBkZXYtPmNhY2hlZF9iZWFjb24tPmxlbjsKLQlzcmNfZGF0YSA9IChjb25zdCB1OCAqKWRldi0+Y2FjaGVkX2JlYWNvbi0+ZGF0YTsKKwlzcmNfc2l6ZSA9IGRldi0+d2wtPmN1cnJlbnRfYmVhY29uLT5sZW47CisJc3JjX2RhdGEgPSAoY29uc3QgdTggKilkZXYtPndsLT5jdXJyZW50X2JlYWNvbi0+ZGF0YTsKIAotCWlmICh1bmxpa2VseShzcmNfc2l6ZSA8IDB4MjQpKSB7Ci0JCWI0M2xlZ2FjeWRiZyhkZXYtPndsLCAiYjQzbGVnYWN5X2dlbmVyYXRlX3Byb2JlX3Jlc3A6ICIKLQkJICAgICAgICJpbnZhbGlkIGJlYWNvblxuIik7CisJLyogR2V0IHRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIHZhcmlhYmxlIElFcyBpbiB0aGUgcGFja2V0LiAqLworCWllX3N0YXJ0ID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LnByb2JlX3Jlc3AudmFyaWFibGUpOworCUI0M2xlZ2FjeV9XQVJOX09OKGllX3N0YXJ0ICE9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkJICAgICAgIHUuYmVhY29uLnZhcmlhYmxlKSk7CisKKwlpZiAoQjQzbGVnYWN5X1dBUk5fT04oc3JjX3NpemUgPCBpZV9zdGFydCkpCiAJCXJldHVybiBOVUxMOwotCX0KIAogCWRlc3RfZGF0YSA9IGttYWxsb2Moc3JjX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICh1bmxpa2VseSghZGVzdF9kYXRhKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiAweDI0IGlzIG9mZnNldCBvZiBmaXJzdCB2YXJpYWJsZS1sZW4gSW5mb3JtYXRpb24tRWxlbWVudAotCSAqIGluIGJlYWNvbiBmcmFtZS4KLQkgKi8KLQltZW1jcHkoZGVzdF9kYXRhLCBzcmNfZGF0YSwgMHgyNCk7Ci0Jc3JjX3BvcyA9IDB4MjQ7Ci0JZGVzdF9wb3MgPSAweDI0OwotCWZvciAoOyBzcmNfcG9zIDwgc3JjX3NpemUgLSAyOyBzcmNfcG9zICs9IGVsZW1fc2l6ZSkgeworCS8qIENvcHkgdGhlIHN0YXRpYyBkYXRhIGFuZCBhbGwgSW5mb3JtYXRpb24gRWxlbWVudHMsIGV4Y2VwdCB0aGUgVElNLiAqLworCW1lbWNweShkZXN0X2RhdGEsIHNyY19kYXRhLCBpZV9zdGFydCk7CisJc3JjX3BvcyA9IGllX3N0YXJ0OworCWRlc3RfcG9zID0gaWVfc3RhcnQ7CisJZm9yICggOyBzcmNfcG9zIDwgc3JjX3NpemUgLSAyOyBzcmNfcG9zICs9IGVsZW1fc2l6ZSkgewogCQllbGVtX3NpemUgPSBzcmNfZGF0YVtzcmNfcG9zICsgMV0gKyAyOwotCQlpZiAoc3JjX2RhdGFbc3JjX3Bvc10gIT0gMHgwNSkgeyAvKiBUSU0gKi8KLQkJCW1lbWNweShkZXN0X2RhdGEgKyBkZXN0X3Bvcywgc3JjX2RhdGEgKyBzcmNfcG9zLAotCQkJICAgICAgIGVsZW1fc2l6ZSk7Ci0JCQlkZXN0X3BvcyArPSBlbGVtX3NpemU7CisJCWlmIChzcmNfZGF0YVtzcmNfcG9zXSA9PSA1KSB7CisJCQkvKiBUaGlzIGlzIHRoZSBUSU0uICovCisJCQljb250aW51ZTsKIAkJfQorCQltZW1jcHkoZGVzdF9kYXRhICsgZGVzdF9wb3MsIHNyY19kYXRhICsgc3JjX3BvcywgZWxlbV9zaXplKTsKKwkJZGVzdF9wb3MgKz0gZWxlbV9zaXplOwogCX0KIAkqZGVzdF9zaXplID0gZGVzdF9wb3M7CiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZGVzdF9kYXRhOwpAQCAtMTA0NCw3ICsxMDk3LDcgQEAKIAlkdXIgPSBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbihkZXYtPndsLT5odywKIAkJCQkJICAgICAgIGRldi0+d2wtPnZpZiwKIAkJCQkJICAgICAgICpkZXN0X3NpemUsCi0JCQkJCSAgICAgICBCNDNsZWdhY3lfUkFURV9UT18xMDBLQlBTKHJhdGUpKTsKKwkJCQkJICAgICAgIHJhdGUpOwogCWhkci0+ZHVyYXRpb25faWQgPSBkdXI7CiAKIAlyZXR1cm4gZGVzdF9kYXRhOwpAQCAtMTA1MiwxMyArMTEwNSwxMyBAQAogCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfd3JpdGVfcHJvYmVfcmVzcF90ZW1wbGF0ZShzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCiAJCQkJCQl1MTYgcmFtX29mZnNldCwKLQkJCQkJCXUxNiBzaG1fc2l6ZV9vZmZzZXQsIHU4IHJhdGUpCisJCQkJCQl1MTYgc2htX3NpemVfb2Zmc2V0LAorCQkJCQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQogewotCXU4ICpwcm9iZV9yZXNwX2RhdGE7CisJY29uc3QgdTggKnByb2JlX3Jlc3BfZGF0YTsKIAl1MTYgc2l6ZTsKIAotCUI0M2xlZ2FjeV9XQVJOX09OKCFkZXYtPmNhY2hlZF9iZWFjb24pOwotCXNpemUgPSBkZXYtPmNhY2hlZF9iZWFjb24tPmxlbjsKKwlzaXplID0gZGV2LT53bC0+Y3VycmVudF9iZWFjb24tPmxlbjsKIAlwcm9iZV9yZXNwX2RhdGEgPSBiNDNsZWdhY3lfZ2VuZXJhdGVfcHJvYmVfcmVzcChkZXYsICZzaXplLCByYXRlKTsKIAlpZiAodW5saWtlbHkoIXByb2JlX3Jlc3BfZGF0YSkpCiAJCXJldHVybjsKQEAgLTEwNjcsNTkgKzExMjAsMzcgQEAKIAkgKiBhbGwgcG9zc2libGUgYmFzaWMgcmF0ZXMKIAkgKi8KIAliNDNsZWdhY3lfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzMUEsIHNpemUsCi0JCQkJCUI0M2xlZ2FjeV9DQ0tfUkFURV8xTUIpOworCQkJCQkmYjQzbGVnYWN5X2JfcmF0ZXRhYmxlWzBdKTsKIAliNDNsZWdhY3lfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzMkMsIHNpemUsCi0JCQkJCUI0M2xlZ2FjeV9DQ0tfUkFURV8yTUIpOworCQkJCQkmYjQzbGVnYWN5X2JfcmF0ZXRhYmxlWzFdKTsKIAliNDNsZWdhY3lfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzM0UsIHNpemUsCi0JCQkJCUI0M2xlZ2FjeV9DQ0tfUkFURV81TUIpOworCQkJCQkmYjQzbGVnYWN5X2JfcmF0ZXRhYmxlWzJdKTsKIAliNDNsZWdhY3lfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzNTAsIHNpemUsCi0JCQkJCUI0M2xlZ2FjeV9DQ0tfUkFURV8xMU1CKTsKKwkJCQkJJmI0M2xlZ2FjeV9iX3JhdGV0YWJsZVszXSk7CiAKIAlzaXplID0gbWluKChzaXplX3Qpc2l6ZSwKIAkJICAgMHgyMDAgLSBzaXplb2Yoc3RydWN0IGI0M2xlZ2FjeV9wbGNwX2hkcjYpKTsKIAliNDNsZWdhY3lfd3JpdGVfdGVtcGxhdGVfY29tbW9uKGRldiwgcHJvYmVfcmVzcF9kYXRhLAogCQkJCQlzaXplLCByYW1fb2Zmc2V0LAotCQkJCQlzaG1fc2l6ZV9vZmZzZXQsIHJhdGUpOworCQkJCQlzaG1fc2l6ZV9vZmZzZXQsIHJhdGUtPmJpdHJhdGUpOwogCWtmcmVlKHByb2JlX3Jlc3BfZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgYjQzbGVnYWN5X3JlZnJlc2hfY2FjaGVkX2JlYWNvbihzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpiZWFjb24pCisvKiBBc3luY2hyb25vdXNseSB1cGRhdGUgdGhlIHBhY2tldCB0ZW1wbGF0ZXMgaW4gdGVtcGxhdGUgUkFNLgorICogTG9ja2luZzogUmVxdWlyZXMgd2wtPmlycV9sb2NrIHRvIGJlIGxvY2tlZC4gKi8KK3N0YXRpYyB2b2lkIGI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2wgKndsLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uKQogewotCWlmIChkZXYtPmNhY2hlZF9iZWFjb24pCi0JCWtmcmVlX3NrYihkZXYtPmNhY2hlZF9iZWFjb24pOwotCWRldi0+Y2FjaGVkX2JlYWNvbiA9IGJlYWNvbjsKKwkvKiBUaGlzIGlzIHRoZSB0b3AgaGFsZiBvZiB0aGUgYW5zeW5jaHJvbm91cyBiZWFjb24gdXBkYXRlLiBUaGUgYm90dG9tCisJICogaGFsZiBpcyB0aGUgYmVhY29uIElSUS4gQmVhY29uIHVwZGF0ZSBtdXN0IGJlIGFzeW5jaHJvbm91cyB0byBhdm9pZAorCSAqIHNlbmRpbmcgYW4gaW52YWxpZCBiZWFjb24uIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSwgaWYgdGhlCisJICogZmlybXdhcmUgdHJhbnNtaXRzIGEgYmVhY29uIHdoaWxlIHdlIGFyZSB1cGRhdGluZyBpdC4gKi8KIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX3RlbXBsYXRlcyhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpCi17Ci0JdTMyIHN0YXR1czsKLQotCUI0M2xlZ2FjeV9XQVJOX09OKCFkZXYtPmNhY2hlZF9iZWFjb24pOwotCi0JYjQzbGVnYWN5X3dyaXRlX2JlYWNvbl90ZW1wbGF0ZShkZXYsIDB4NjgsIDB4MTgsCi0JCQkJCUI0M2xlZ2FjeV9DQ0tfUkFURV8xTUIpOwotCWI0M2xlZ2FjeV93cml0ZV9iZWFjb25fdGVtcGxhdGUoZGV2LCAweDQ2OCwgMHgxQSwKLQkJCQkJQjQzbGVnYWN5X0NDS19SQVRFXzFNQik7Ci0JYjQzbGVnYWN5X3dyaXRlX3Byb2JlX3Jlc3BfdGVtcGxhdGUoZGV2LCAweDI2OCwgMHg0QSwKLQkJCQkJICAgIEI0M2xlZ2FjeV9DQ0tfUkFURV8xMU1CKTsKLQotCXN0YXR1cyA9IGI0M2xlZ2FjeV9yZWFkMzIoZGV2LCBCNDNsZWdhY3lfTU1JT19NQUNDTUQpOwotCXN0YXR1cyB8PSAweDAzOwotCWI0M2xlZ2FjeV93cml0ZTMyKGRldiwgQjQzbGVnYWN5X01NSU9fTUFDQ01ELCBzdGF0dXMpOwotfQotCi1zdGF0aWMgdm9pZCBiNDNsZWdhY3lfcmVmcmVzaF90ZW1wbGF0ZXMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBiNDNsZWdhY3lfcmVmcmVzaF9jYWNoZWRfYmVhY29uKGRldiwgYmVhY29uKTsKLQlpZiAodW5saWtlbHkoZXJyKSkKLQkJcmV0dXJuOwotCWI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKGRldik7CisJaWYgKHdsLT5jdXJyZW50X2JlYWNvbikKKwkJZGV2X2tmcmVlX3NrYl9hbnkod2wtPmN1cnJlbnRfYmVhY29uKTsKKwl3bC0+Y3VycmVudF9iZWFjb24gPSBiZWFjb247CisJd2wtPmJlYWNvbjBfdXBsb2FkZWQgPSAwOworCXdsLT5iZWFjb24xX3VwbG9hZGVkID0gMDsKIH0KIAogc3RhdGljIHZvaWQgYjQzbGVnYWN5X3NldF9zc2lkKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKQEAgLTExNjAsMzggKzExOTEsMzcgQEAKIAogc3RhdGljIHZvaWQgaGFuZGxlX2lycV9iZWFjb24oc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KQogewotCXUzMiBzdGF0dXM7CisJc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wgPSBkZXYtPndsOworCXUzMiBjbWQ7CiAKLQlpZiAoIWI0M2xlZ2FjeV9pc19tb2RlKGRldi0+d2wsIElFRUU4MDIxMV9JRl9UWVBFX0FQKSkKKwlpZiAoIWI0M2xlZ2FjeV9pc19tb2RlKHdsLCBJRUVFODAyMTFfSUZfVFlQRV9BUCkpCiAJCXJldHVybjsKIAotCWRldi0+aXJxX3NhdmVkc3RhdGUgJj0gfkI0M2xlZ2FjeV9JUlFfQkVBQ09OOwotCXN0YXR1cyA9IGI0M2xlZ2FjeV9yZWFkMzIoZGV2LCBCNDNsZWdhY3lfTU1JT19NQUNDTUQpOworCS8qIFRoaXMgaXMgdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSBhc3luY2hyb25vdXMgYmVhY29uIHVwZGF0ZS4gKi8KIAotCWlmICghZGV2LT5jYWNoZWRfYmVhY29uIHx8ICgoc3RhdHVzICYgMHgxKSAmJiAoc3RhdHVzICYgMHgyKSkpIHsKLQkJLyogQUNLIGJlYWNvbiBJUlEuICovCi0JCWI0M2xlZ2FjeV93cml0ZTMyKGRldiwgQjQzbGVnYWN5X01NSU9fR0VOX0lSUV9SRUFTT04sCi0JCQkJICBCNDNsZWdhY3lfSVJRX0JFQUNPTik7Ci0JCWRldi0+aXJxX3NhdmVkc3RhdGUgfD0gQjQzbGVnYWN5X0lSUV9CRUFDT047Ci0JCWlmIChkZXYtPmNhY2hlZF9iZWFjb24pCi0JCQlrZnJlZV9za2IoZGV2LT5jYWNoZWRfYmVhY29uKTsKLQkJZGV2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKLQkJcmV0dXJuOworCWNtZCA9IGI0M2xlZ2FjeV9yZWFkMzIoZGV2LCBCNDNsZWdhY3lfTU1JT19NQUNDTUQpOworCWlmICghKGNtZCAmIEI0M2xlZ2FjeV9NQUNDTURfQkVBQ09OMF9WQUxJRCkpIHsKKwkJaWYgKCF3bC0+YmVhY29uMF91cGxvYWRlZCkgeworCQkJYjQzbGVnYWN5X3dyaXRlX2JlYWNvbl90ZW1wbGF0ZShkZXYsIDB4NjgsCisJCQkJCQkJQjQzbGVnYWN5X1NITV9TSF9CVEwwLAorCQkJCQkJCUI0M2xlZ2FjeV9DQ0tfUkFURV8xTUIpOworCQkJYjQzbGVnYWN5X3dyaXRlX3Byb2JlX3Jlc3BfdGVtcGxhdGUoZGV2LCAweDI2OCwKKwkJCQkJCQkgICAgQjQzbGVnYWN5X1NITV9TSF9QUlRMRU4sCisJCQkJCQkJICAgICZfX2I0M2xlZ2FjeV9yYXRldGFibGVbM10pOworCQkJd2wtPmJlYWNvbjBfdXBsb2FkZWQgPSAxOworCQl9CisJCWNtZCB8PSBCNDNsZWdhY3lfTUFDQ01EX0JFQUNPTjBfVkFMSUQ7CiAJfQotCWlmICghKHN0YXR1cyAmIDB4MSkpIHsKLQkJYjQzbGVnYWN5X3dyaXRlX2JlYWNvbl90ZW1wbGF0ZShkZXYsIDB4NjgsIDB4MTgsCi0JCQkJCQlCNDNsZWdhY3lfQ0NLX1JBVEVfMU1CKTsKLQkJc3RhdHVzIHw9IDB4MTsKLQkJYjQzbGVnYWN5X3dyaXRlMzIoZGV2LCBCNDNsZWdhY3lfTU1JT19NQUNDTUQsCi0JCQkJICBzdGF0dXMpOworCWlmICghKGNtZCAmIEI0M2xlZ2FjeV9NQUNDTURfQkVBQ09OMV9WQUxJRCkpIHsKKwkJaWYgKCF3bC0+YmVhY29uMV91cGxvYWRlZCkgeworCQkJYjQzbGVnYWN5X3dyaXRlX2JlYWNvbl90ZW1wbGF0ZShkZXYsIDB4NDY4LAorCQkJCQkJCUI0M2xlZ2FjeV9TSE1fU0hfQlRMMSwKKwkJCQkJCQlCNDNsZWdhY3lfQ0NLX1JBVEVfMU1CKTsKKwkJCXdsLT5iZWFjb24xX3VwbG9hZGVkID0gMTsKKwkJfQorCQljbWQgfD0gQjQzbGVnYWN5X01BQ0NNRF9CRUFDT04xX1ZBTElEOwogCX0KLQlpZiAoIShzdGF0dXMgJiAweDIpKSB7Ci0JCWI0M2xlZ2FjeV93cml0ZV9iZWFjb25fdGVtcGxhdGUoZGV2LCAweDQ2OCwgMHgxQSwKLQkJCQkJCUI0M2xlZ2FjeV9DQ0tfUkFURV8xTUIpOwotCQlzdGF0dXMgfD0gMHgyOwotCQliNDNsZWdhY3lfd3JpdGUzMihkZXYsIEI0M2xlZ2FjeV9NTUlPX01BQ0NNRCwKLQkJCQkgIHN0YXR1cyk7Ci0JfQorCWI0M2xlZ2FjeV93cml0ZTMyKGRldiwgQjQzbGVnYWN5X01NSU9fTUFDQ01ELCBjbWQpOwogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfaXJxX3Vjb2RlX2RlYnVnKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldikKQEAgLTE0ODYsNiArMTUxNiw3IEBACiAJfQogCWlmICghZnctPmluaXR2YWxzKSB7CiAJCXN3aXRjaCAoZGV2LT5waHkudHlwZSkgeworCQljYXNlIEI0M2xlZ2FjeV9QSFlUWVBFX0I6CiAJCWNhc2UgQjQzbGVnYWN5X1BIWVRZUEVfRzoKIAkJCWlmICgocmV2ID49IDUpICYmIChyZXYgPD0gMTApKQogCQkJCWZpbGVuYW1lID0gImIwZzBpbml0dmFsczUiOwpAQCAtMTUwMyw2ICsxNTM0LDcgQEAKIAl9CiAJaWYgKCFmdy0+aW5pdHZhbHNfYmFuZCkgewogCQlzd2l0Y2ggKGRldi0+cGh5LnR5cGUpIHsKKwkJY2FzZSBCNDNsZWdhY3lfUEhZVFlQRV9COgogCQljYXNlIEI0M2xlZ2FjeV9QSFlUWVBFX0c6CiAJCQlpZiAoKHJldiA+PSA1KSAmJiAocmV2IDw9IDEwKSkKIAkJCQlmaWxlbmFtZSA9ICJiMGcwYnNpbml0dmFsczUiOwpAQCAtMTY0MCwxMCArMTY3MiwxMSBAQAogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBlcnJvcjsKIAl9Ci0JYjQzbGVnYWN5ZGJnKGRldi0+d2wsICJMb2FkaW5nIGZpcm13YXJlIHZlcnNpb24gMHglWCwgcGF0Y2ggbGV2ZWwgJXUgIgotCSAgICAgICAiKDIwJS4yaS0lLjJpLSUuMmkgJS4yaTolLjJpOiUuMmkpXG4iLCBmd3JldiwgZndwYXRjaCwKLQkgICAgICAgKGZ3ZGF0ZSA+PiAxMikgJiAweEYsIChmd2RhdGUgPj4gOCkgJiAweEYsIGZ3ZGF0ZSAmIDB4RkYsCi0JICAgICAgIChmd3RpbWUgPj4gMTEpICYgMHgxRiwgKGZ3dGltZSA+PiA1KSAmIDB4M0YsIGZ3dGltZSAmIDB4MUYpOworCWI0M2xlZ2FjeWluZm8oZGV2LT53bCwgIkxvYWRpbmcgZmlybXdhcmUgdmVyc2lvbiAweCVYLCBwYXRjaCBsZXZlbCAldSAiCisJCSAgICAgICIoMjAlLjJpLSUuMmktJS4yaSAlLjJpOiUuMmk6JS4yaSlcbiIsIGZ3cmV2LCBmd3BhdGNoLAorCQkgICAgICAoZndkYXRlID4+IDEyKSAmIDB4RiwgKGZ3ZGF0ZSA+PiA4KSAmIDB4RiwgZndkYXRlICYgMHhGRiwKKwkJICAgICAgKGZ3dGltZSA+PiAxMSkgJiAweDFGLCAoZnd0aW1lID4+IDUpICYgMHgzRiwKKwkJICAgICAgZnd0aW1lICYgMHgxRik7CiAKIAlkZXYtPmZ3LnJldiA9IGZ3cmV2OwogCWRldi0+ZncucGF0Y2ggPSBmd3BhdGNoOwpAQCAtMjU0NywxNCArMjU4MCwxNiBAQAogCWFudGVubmFfcnggPSBiNDNsZWdhY3lfYW50ZW5uYV9mcm9tX2llZWU4MDIxMShjb25mLT5hbnRlbm5hX3NlbF9yeCk7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlwaHkgPSAmZGV2LT5waHk7CiAKIAkvKiBTd2l0Y2ggdGhlIFBIWSBtb2RlIChpZiBuZWNlc3NhcnkpLiAqLwotCXN3aXRjaCAoY29uZi0+cGh5bW9kZSkgewotCWNhc2UgTU9ERV9JRUVFODAyMTFCOgotCQluZXdfcGh5bW9kZSA9IEI0M2xlZ2FjeV9QSFlNT0RFX0I7Ci0JCWJyZWFrOwotCWNhc2UgTU9ERV9JRUVFODAyMTFHOgotCQluZXdfcGh5bW9kZSA9IEI0M2xlZ2FjeV9QSFlNT0RFX0c7CisJc3dpdGNoIChjb25mLT5jaGFubmVsLT5iYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgorCQlpZiAocGh5LT50eXBlID09IEI0M2xlZ2FjeV9QSFlUWVBFX0IpCisJCQluZXdfcGh5bW9kZSA9IEI0M2xlZ2FjeV9QSFlNT0RFX0I7CisJCWVsc2UKKwkJCW5ld19waHltb2RlID0gQjQzbGVnYWN5X1BIWU1PREVfRzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQjQzbGVnYWN5X1dBUk5fT04oMSk7CkBAIC0yNTYyLDggKzI1OTcsNiBAQAogCWVyciA9IGI0M2xlZ2FjeV9zd2l0Y2hfcGh5bW9kZSh3bCwgbmV3X3BoeW1vZGUpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9ja19tdXRleDsKLQlkZXYgPSB3bC0+Y3VycmVudF9kZXY7Ci0JcGh5ID0gJmRldi0+cGh5OwogCiAJLyogRGlzYWJsZSBJUlFzIHdoaWxlIHJlY29uZmlndXJpbmcgdGhlIGRldmljZS4KIAkgKiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRyb3AgdGhlIHNwaW5sb2NrIHRocm91Z2hvdXQKQEAgLTI1NzksOCArMjYxMiw4IEBACiAKIAkvKiBTd2l0Y2ggdG8gdGhlIHJlcXVlc3RlZCBjaGFubmVsLgogCSAqIFRoZSBmaXJtd2FyZSB0YWtlcyBjYXJlIG9mIHJhY2VzIHdpdGggdGhlIFRYIGhhbmRsZXIuICovCi0JaWYgKGNvbmYtPmNoYW5uZWxfdmFsICE9IHBoeS0+Y2hhbm5lbCkKLQkJYjQzbGVnYWN5X3JhZGlvX3NlbGVjdGNoYW5uZWwoZGV2LCBjb25mLT5jaGFubmVsX3ZhbCwgMCk7CisJaWYgKGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlICE9IHBoeS0+Y2hhbm5lbCkKKwkJYjQzbGVnYWN5X3JhZGlvX3NlbGVjdGNoYW5uZWwoZGV2LCBjb25mLT5jaGFubmVsLT5od192YWx1ZSwgMCk7CiAKIAkvKiBFbmFibGUvRGlzYWJsZSBTaG9ydFNsb3QgdGltaW5nLiAqLwogCWlmICgoISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUpKQpAQCAtMjY5Nyw3ICsyNzMwLDcgQEAKIAkJCUI0M2xlZ2FjeV9XQVJOX09OKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVApOwogCQkJYjQzbGVnYWN5X3NldF9zc2lkKGRldiwgY29uZi0+c3NpZCwgY29uZi0+c3NpZF9sZW4pOwogCQkJaWYgKGNvbmYtPmJlYWNvbikKLQkJCQliNDNsZWdhY3lfcmVmcmVzaF90ZW1wbGF0ZXMoZGV2LCBjb25mLT5iZWFjb24pOworCQkJCWI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHdsLCBjb25mLT5iZWFjb24pOwogCQl9CiAJCWI0M2xlZ2FjeV93cml0ZV9tYWNfYnNzaWRfdGVtcGxhdGVzKGRldik7CiAJfQpAQCAtMjkxNSw3ICsyOTQ4LDcgQEAKIHN0YXRpYyB2b2lkIHNldHVwX3N0cnVjdF93bGRldl9mb3JfaW5pdChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpCiB7CiAJLyogRmxhZ3MgKi8KLQlkZXYtPnJlZzEyNF9zZXRfMHg0ID0gMDsKKwlkZXYtPmRmcV92YWxpZCA9IDA7CiAKIAkvKiBTdGF0cyAqLwogCW1lbXNldCgmZGV2LT5zdGF0cywgMCwgc2l6ZW9mKGRldi0+c3RhdHMpKTsKQEAgLTI5NzQsNiArMzAwNywzNCBAQAogCWI0M2xlZ2FjeV9zaG1fd3JpdGUxNihkZXYsIEI0M2xlZ2FjeV9TSE1fV0lSRUxFU1MsIDB4MDAwNywgbG9uZ19yZXRyeSk7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M2xlZ2FjeV9zZXRfc3ludGhfcHVfZGVsYXkoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAorCQkJCQkgIGJvb2wgaWRsZSkgeworCXUxNiBwdV9kZWxheSA9IDEwNTA7CisKKwlpZiAoYjQzbGVnYWN5X2lzX21vZGUoZGV2LT53bCwgSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgfHwgaWRsZSkKKwkJcHVfZGVsYXkgPSA1MDA7CisJaWYgKChkZXYtPnBoeS5yYWRpb192ZXIgPT0gMHgyMDUwKSAmJiAoZGV2LT5waHkucmFkaW9fcmV2ID09IDgpKQorCQlwdV9kZWxheSA9IG1heChwdV9kZWxheSwgKHUxNikyNDAwKTsKKworCWI0M2xlZ2FjeV9zaG1fd3JpdGUxNihkZXYsIEI0M2xlZ2FjeV9TSE1fU0hBUkVELAorCQkJICAgICAgQjQzbGVnYWN5X1NITV9TSF9TUFVXS1VQLCBwdV9kZWxheSk7Cit9CisKKy8qIFNldCB0aGUgVFNGIENGUCBwcmUtVGFyZ2V0QmVhY29uVHJhbnNtaXNzaW9uVGltZS4gKi8KK3N0YXRpYyB2b2lkIGI0M2xlZ2FjeV9zZXRfcHJldGJ0dChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpCit7CisJdTE2IHByZXRidHQ7CisKKwkvKiBUaGUgdGltZSB2YWx1ZSBpcyBpbiBtaWNyb3NlY29uZHMuICovCisJaWYgKGI0M2xlZ2FjeV9pc19tb2RlKGRldi0+d2wsIElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpKQorCQlwcmV0YnR0ID0gMjsKKwllbHNlCisJCXByZXRidHQgPSAyNTA7CisJYjQzbGVnYWN5X3NobV93cml0ZTE2KGRldiwgQjQzbGVnYWN5X1NITV9TSEFSRUQsCisJCQkgICAgICBCNDNsZWdhY3lfU0hNX1NIX1BSRVRCVFQsIHByZXRidHQpOworCWI0M2xlZ2FjeV93cml0ZTE2KGRldiwgQjQzbGVnYWN5X01NSU9fVFNGX0NGUF9QUkVUQlRULCBwcmV0YnR0KTsKK30KKwogLyogU2h1dGRvd24gYSB3aXJlbGVzcyBjb3JlICovCiAvKiBMb2NraW5nOiB3bC0+bXV0ZXggKi8KIHN0YXRpYyB2b2lkIGI0M2xlZ2FjeV93aXJlbGVzc19jb3JlX2V4aXQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KQpAQCAtMzAxMCw2ICszMDcxLDExIEBACiAJCWtmcmVlKHBoeS0+dHNzaTJkYm0pOwogCWtmcmVlKHBoeS0+bG9fY29udHJvbCk7CiAJcGh5LT5sb19jb250cm9sID0gTlVMTDsKKwlpZiAoZGV2LT53bC0+Y3VycmVudF9iZWFjb24pIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoZGV2LT53bC0+Y3VycmVudF9iZWFjb24pOworCQlkZXYtPndsLT5jdXJyZW50X2JlYWNvbiA9IE5VTEw7CisJfQorCiAJc3NiX2RldmljZV9kaXNhYmxlKGRldi0+ZGV2LCAwKTsKIAlzc2JfYnVzX21heV9wb3dlcmRvd24oZGV2LT5kZXYtPmJ1cyk7CiB9CkBAIC0zMTU1LDkgKzMyMjEsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2NoaXBfZXhpdDsKIAotCWI0M2xlZ2FjeV93cml0ZTE2KGRldiwgMHgwNjEyLCAweDAwNTApOwotCWI0M2xlZ2FjeV9zaG1fd3JpdGUxNihkZXYsIEI0M2xlZ2FjeV9TSE1fU0hBUkVELCAweDA0MTYsIDB4MDA1MCk7Ci0JYjQzbGVnYWN5X3NobV93cml0ZTE2KGRldiwgQjQzbGVnYWN5X1NITV9TSEFSRUQsIDB4MDQxNCwgMHgwMUY0KTsKKwliNDNsZWdhY3lfc2V0X3N5bnRoX3B1X2RlbGF5KGRldiwgMSk7CiAKIAlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsgLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLwogCWI0M2xlZ2FjeV91cGxvYWRfY2FyZF9tYWNhZGRyZXNzKGRldik7CkBAIC0zMjEzLDYgKzMyNzcsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCWI0M2xlZ2FjeV9hZGp1c3Rfb3Btb2RlKGRldik7CisJYjQzbGVnYWN5X3NldF9wcmV0YnR0KGRldik7CisJYjQzbGVnYWN5X3NldF9zeW50aF9wdV9kZWxheShkZXYsIDApOwogCWI0M2xlZ2FjeV91cGxvYWRfY2FyZF9tYWNhZGRyZXNzKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKQEAgLTMzMzQsNiArMzQwMCw0MSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYjQzbGVnYWN5X29wX2JlYWNvbl9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBpbnQgYWlkLCBpbnQgc2V0KQoreworCXN0cnVjdCBiNDNsZWdhY3lfd2wgKndsID0gaHdfdG9fYjQzbGVnYWN5X3dsKGh3KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBXZSBjb3VsZCBtb2RpZnkgdGhlIGV4aXN0aW5nIGJlYWNvbiBhbmQgc2V0IHRoZSBhaWQgYml0IGluIHRoZSBUSU0KKwkgKiBmaWVsZCwgYnV0IHRoYXQgd291bGQgcHJvYmFibHkgcmVxdWlyZSByZXNpemluZyBhbmQgbW92aW5nIG9mIGRhdGEKKwkgKiB3aXRoaW4gdGhlIGJlYWNvbiB0ZW1wbGF0ZS4gU2ltcGx5IHJlcXVlc3QgYSBuZXcgYmVhY29uIGFuZCBsZXQKKwkgKiBtYWM4MDIxMSBkbyB0aGUgaGFyZCB3b3JrLiAqLworCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB3bC0+dmlmLCBOVUxMKTsKKwlpZiAodW5saWtlbHkoIWJlYWNvbikpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKwliNDNsZWdhY3lfdXBkYXRlX3RlbXBsYXRlcyh3bCwgYmVhY29uKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI0M2xlZ2FjeV9vcF9pYnNzX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpiZWFjb24sCisJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBiNDNsZWdhY3lfd2wgKndsID0gaHdfdG9fYjQzbGVnYWN5X3dsKGh3KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCWI0M2xlZ2FjeV91cGRhdGVfdGVtcGxhdGVzKHdsLCBiZWFjb24pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBiNDNsZWdhY3lfaHdfb3BzID0gewogCS50eAkJCT0gYjQzbGVnYWN5X29wX3R4LAogCS5jb25mX3R4CQk9IGI0M2xlZ2FjeV9vcF9jb25mX3R4LApAQCAtMzM0Nyw2ICszNDQ4LDggQEAKIAkuc3RhcnQJCQk9IGI0M2xlZ2FjeV9vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzbGVnYWN5X29wX3N0b3AsCiAJLnNldF9yZXRyeV9saW1pdAk9IGI0M2xlZ2FjeV9vcF9zZXRfcmV0cnlfbGltaXQsCisJLnNldF90aW0JCT0gYjQzbGVnYWN5X29wX2JlYWNvbl9zZXRfdGltLAorCS5iZWFjb25fdXBkYXRlCQk9IGI0M2xlZ2FjeV9vcF9pYnNzX2JlYWNvbl91cGRhdGUsCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtMzM5NSw0OCArMzQ5OCwxOSBAQAogCQkJCSBpbnQgaGF2ZV9ncGh5KQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gZGV2LT53bC0+aHc7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwogCXN0cnVjdCBiNDNsZWdhY3lfcGh5ICpwaHkgPSAmZGV2LT5waHk7Ci0JaW50IGNudCA9IDA7Ci0JaW50IGVycjsKIAogCXBoeS0+cG9zc2libGVfcGh5bW9kZXMgPSAwOwotCWZvciAoOyAxOyBjbnQrKykgewotCQlpZiAoaGF2ZV9icGh5KSB7Ci0JCQlCNDNsZWdhY3lfV0FSTl9PTihjbnQgPj0gQjQzbGVnYWN5X01BWF9QSFlIV01PREVTKTsKLQkJCW1vZGUgPSAmcGh5LT5od21vZGVzW2NudF07CisJaWYgKGhhdmVfYnBoeSkgeworCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCSZiNDNsZWdhY3lfYmFuZF8yR0h6X0JQSFk7CisJCXBoeS0+cG9zc2libGVfcGh5bW9kZXMgfD0gQjQzbGVnYWN5X1BIWU1PREVfQjsKKwl9CiAKLQkJCW1vZGUtPm1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7Ci0JCQltb2RlLT5udW1fY2hhbm5lbHMgPSBiNDNsZWdhY3lfYmdfY2hhbnRhYmxlX3NpemU7Ci0JCQltb2RlLT5jaGFubmVscyA9IGI0M2xlZ2FjeV9iZ19jaGFudGFibGU7Ci0JCQltb2RlLT5udW1fcmF0ZXMgPSBiNDNsZWdhY3lfYl9yYXRldGFibGVfc2l6ZTsKLQkJCW1vZGUtPnJhdGVzID0gYjQzbGVnYWN5X2JfcmF0ZXRhYmxlOwotCQkJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShodywgbW9kZSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0KLQkJCXBoeS0+cG9zc2libGVfcGh5bW9kZXMgfD0gQjQzbGVnYWN5X1BIWU1PREVfQjsKLQkJCWhhdmVfYnBoeSA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoaGF2ZV9ncGh5KSB7Ci0JCQlCNDNsZWdhY3lfV0FSTl9PTihjbnQgPj0gQjQzbGVnYWN5X01BWF9QSFlIV01PREVTKTsKLQkJCW1vZGUgPSAmcGh5LT5od21vZGVzW2NudF07Ci0KLQkJCW1vZGUtPm1vZGUgPSBNT0RFX0lFRUU4MDIxMUc7Ci0JCQltb2RlLT5udW1fY2hhbm5lbHMgPSBiNDNsZWdhY3lfYmdfY2hhbnRhYmxlX3NpemU7Ci0JCQltb2RlLT5jaGFubmVscyA9IGI0M2xlZ2FjeV9iZ19jaGFudGFibGU7Ci0JCQltb2RlLT5udW1fcmF0ZXMgPSBiNDNsZWdhY3lfZ19yYXRldGFibGVfc2l6ZTsKLQkJCW1vZGUtPnJhdGVzID0gYjQzbGVnYWN5X2dfcmF0ZXRhYmxlOwotCQkJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShodywgbW9kZSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0KLQkJCXBoeS0+cG9zc2libGVfcGh5bW9kZXMgfD0gQjQzbGVnYWN5X1BIWU1PREVfRzsKLQkJCWhhdmVfZ3BoeSA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlicmVhazsKKwlpZiAoaGF2ZV9ncGh5KSB7CisJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPQorCQkJJmI0M2xlZ2FjeV9iYW5kXzJHSHpfR1BIWTsKKwkJcGh5LT5wb3NzaWJsZV9waHltb2RlcyB8PSBCNDNsZWdhY3lfUEhZTU9ERV9HOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzgwNiw2ICszODgwLDMyIEBACiAJLnJlc3VtZQkJPSBiNDNsZWdhY3lfcmVzdW1lLAogfTsKIAorc3RhdGljIHZvaWQgYjQzbGVnYWN5X3ByaW50X2RyaXZlcmluZm8odm9pZCkKK3sKKwljb25zdCBjaGFyICpmZWF0X3BjaSA9ICIiLCAqZmVhdF9sZWRzID0gIiIsICpmZWF0X3Jma2lsbCA9ICIiLAorCQkgICAqZmVhdF9waW8gPSAiIiwgKmZlYXRfZG1hID0gIiI7CisKKyNpZmRlZiBDT05GSUdfQjQzTEVHQUNZX1BDSV9BVVRPU0VMRUNUCisJZmVhdF9wY2kgPSAiUCI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQjQzTEVHQUNZX0xFRFMKKwlmZWF0X2xlZHMgPSAiTCI7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQjQzTEVHQUNZX1JGS0lMTAorCWZlYXRfcmZraWxsID0gIlIiOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0I0M0xFR0FDWV9QSU8KKwlmZWF0X3BpbyA9ICJJIjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CNDNMRUdBQ1lfRE1BCisJZmVhdF9kbWEgPSAiRCI7CisjZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPICJCcm9hZGNvbSA0M3h4LWxlZ2FjeSBkcml2ZXIgbG9hZGVkICIKKwkgICAgICAgIlsgRmVhdHVyZXM6ICVzJXMlcyVzJXMsIEZpcm13YXJlLUlEOiAiCisJICAgICAgIEI0M2xlZ2FjeV9TVVBQT1JURURfRklSTVdBUkVfSUQgIiBdXG4iLAorCSAgICAgICBmZWF0X3BjaSwgZmVhdF9sZWRzLCBmZWF0X3Jma2lsbCwgZmVhdF9waW8sIGZlYXRfZG1hKTsKK30KKwogc3RhdGljIGludCBfX2luaXQgYjQzbGVnYWN5X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtMzgxNiw2ICszOTE2LDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9kZnNfZXhpdDsKIAorCWI0M2xlZ2FjeV9wcmludF9kcml2ZXJpbmZvKCk7CisKIAlyZXR1cm4gZXJyOwogCiBlcnJfZGZzX2V4aXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuYwppbmRleCBkODQ0MDhhLi5kY2FkMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS94bWl0LmMKQEAgLTM3LDQ1ICszNyw0OCBAQAogCiAKIC8qIEV4dHJhY3QgdGhlIGJpdHJhdGUgb3V0IG9mIGEgQ0NLIFBMQ1AgaGVhZGVyLiAqLwotc3RhdGljIHU4IGI0M2xlZ2FjeV9wbGNwX2dldF9iaXRyYXRlX2NjayhzdHJ1Y3QgYjQzbGVnYWN5X3BsY3BfaGRyNiAqcGxjcCkKK3N0YXRpYyB1OCBiNDNsZWdhY3lfcGxjcF9nZXRfYml0cmF0ZV9pZHhfY2NrKHN0cnVjdCBiNDNsZWdhY3lfcGxjcF9oZHI2ICpwbGNwKQogewogCXN3aXRjaCAocGxjcC0+cmF3WzBdKSB7CiAJY2FzZSAweDBBOgotCQlyZXR1cm4gQjQzbGVnYWN5X0NDS19SQVRFXzFNQjsKKwkJcmV0dXJuIDA7CiAJY2FzZSAweDE0OgotCQlyZXR1cm4gQjQzbGVnYWN5X0NDS19SQVRFXzJNQjsKKwkJcmV0dXJuIDE7CiAJY2FzZSAweDM3OgotCQlyZXR1cm4gQjQzbGVnYWN5X0NDS19SQVRFXzVNQjsKKwkJcmV0dXJuIDI7CiAJY2FzZSAweDZFOgotCQlyZXR1cm4gQjQzbGVnYWN5X0NDS19SQVRFXzExTUI7CisJCXJldHVybiAzOwogCX0KIAlCNDNsZWdhY3lfQlVHX09OKDEpOwotCXJldHVybiAwOworCXJldHVybiAtMTsKIH0KIAogLyogRXh0cmFjdCB0aGUgYml0cmF0ZSBvdXQgb2YgYW4gT0ZETSBQTENQIGhlYWRlci4gKi8KLXN0YXRpYyB1OCBiNDNsZWdhY3lfcGxjcF9nZXRfYml0cmF0ZV9vZmRtKHN0cnVjdCBiNDNsZWdhY3lfcGxjcF9oZHI2ICpwbGNwKQorc3RhdGljIHU4IGI0M2xlZ2FjeV9wbGNwX2dldF9iaXRyYXRlX2lkeF9vZmRtKHN0cnVjdCBiNDNsZWdhY3lfcGxjcF9oZHI2ICpwbGNwLAorCQkJCQkgICAgICBib29sIGFwaHkpCiB7CisJaW50IGJhc2UgPSBhcGh5ID8gMCA6IDQ7CisKIAlzd2l0Y2ggKHBsY3AtPnJhd1swXSAmIDB4RikgewogCWNhc2UgMHhCOgotCQlyZXR1cm4gQjQzbGVnYWN5X09GRE1fUkFURV82TUI7CisJCXJldHVybiBiYXNlICsgMDsKIAljYXNlIDB4RjoKLQkJcmV0dXJuIEI0M2xlZ2FjeV9PRkRNX1JBVEVfOU1COworCQlyZXR1cm4gYmFzZSArIDE7CiAJY2FzZSAweEE6Ci0JCXJldHVybiBCNDNsZWdhY3lfT0ZETV9SQVRFXzEyTUI7CisJCXJldHVybiBiYXNlICsgMjsKIAljYXNlIDB4RToKLQkJcmV0dXJuIEI0M2xlZ2FjeV9PRkRNX1JBVEVfMThNQjsKKwkJcmV0dXJuIGJhc2UgKyAzOwogCWNhc2UgMHg5OgotCQlyZXR1cm4gQjQzbGVnYWN5X09GRE1fUkFURV8yNE1COworCQlyZXR1cm4gYmFzZSArIDQ7CiAJY2FzZSAweEQ6Ci0JCXJldHVybiBCNDNsZWdhY3lfT0ZETV9SQVRFXzM2TUI7CisJCXJldHVybiBiYXNlICsgNTsKIAljYXNlIDB4ODoKLQkJcmV0dXJuIEI0M2xlZ2FjeV9PRkRNX1JBVEVfNDhNQjsKKwkJcmV0dXJuIGJhc2UgKyA2OwogCWNhc2UgMHhDOgotCQlyZXR1cm4gQjQzbGVnYWN5X09GRE1fUkFURV81NE1COworCQlyZXR1cm4gYmFzZSArIDc7CiAJfQogCUI0M2xlZ2FjeV9CVUdfT04oMSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC0xOwogfQogCiB1OCBiNDNsZWdhY3lfcGxjcF9nZXRfcmF0ZWNvZGVfY2NrKGNvbnN0IHU4IGJpdHJhdGUpCkBAIC0xOTIsNyArMTk1LDcgQEAKIAlpbnQgdXNlX2VuY3J5cHRpb24gPSAoISh0eGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQpKTsKIAl1MTYgZmN0bDsKIAl1OCByYXRlOwotCXU4IHJhdGVfZmI7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlX2ZiOwogCWludCByYXRlX29mZG07CiAJaW50IHJhdGVfZmJfb2ZkbTsKIAl1bnNpZ25lZCBpbnQgcGxjcF9mcmFnbWVudF9sZW47CkBAIC0yMDQsMTYgKzIwNywxNiBAQAogCiAJbWVtc2V0KHR4aGRyLCAwLCBzaXplb2YoKnR4aGRyKSk7CiAKLQlyYXRlID0gdHhjdGwtPnR4X3JhdGU7CisJcmF0ZSA9IHR4Y3RsLT50eF9yYXRlLT5od192YWx1ZTsKIAlyYXRlX29mZG0gPSBiNDNsZWdhY3lfaXNfb2ZkbV9yYXRlKHJhdGUpOwotCXJhdGVfZmIgPSAodHhjdGwtPmFsdF9yZXRyeV9yYXRlID09IC0xKSA/IHJhdGUgOiB0eGN0bC0+YWx0X3JldHJ5X3JhdGU7Ci0JcmF0ZV9mYl9vZmRtID0gYjQzbGVnYWN5X2lzX29mZG1fcmF0ZShyYXRlX2ZiKTsKKwlyYXRlX2ZiID0gdHhjdGwtPmFsdF9yZXRyeV9yYXRlID8gOiB0eGN0bC0+dHhfcmF0ZTsKKwlyYXRlX2ZiX29mZG0gPSBiNDNsZWdhY3lfaXNfb2ZkbV9yYXRlKHJhdGVfZmItPmh3X3ZhbHVlKTsKIAogCXR4aGRyLT5tYWNfZnJhbWVfY3RsID0gd2xoZHItPmZyYW1lX2NvbnRyb2w7CiAJbWVtY3B5KHR4aGRyLT50eF9yZWNlaXZlciwgd2xoZHItPmFkZHIxLCA2KTsKIAogCS8qIENhbGN1bGF0ZSBkdXJhdGlvbiBmb3IgZmFsbGJhY2sgcmF0ZSAqLwotCWlmICgocmF0ZV9mYiA9PSByYXRlKSB8fAorCWlmICgocmF0ZV9mYi0+aHdfdmFsdWUgPT0gcmF0ZSkgfHwKIAkgICAgKHdsaGRyLT5kdXJhdGlvbl9pZCAmIGNwdV90b19sZTE2KDB4ODAwMCkpIHx8CiAJICAgICh3bGhkci0+ZHVyYXRpb25faWQgPT0gY3B1X3RvX2xlMTYoMCkpKSB7CiAJCS8qIElmIHRoZSBmYWxsYmFjayByYXRlIGVxdWFscyB0aGUgbm9ybWFsIHJhdGUgb3IgdGhlCkBAIC0yMjEsMTEgKzIyNCwxMCBAQAogCQkgKiB1c2UgdGhlIG9yaWdpbmFsIGR1cl9pZCBmaWVsZC4gKi8KIAkJdHhoZHItPmR1cl9mYiA9IHdsaGRyLT5kdXJhdGlvbl9pZDsKIAl9IGVsc2UgewotCQlpbnQgZmJyYXRlX2Jhc2UxMDBrYnBzID0gQjQzbGVnYWN5X1JBVEVfVE9fMTAwS0JQUyhyYXRlX2ZiKTsKIAkJdHhoZHItPmR1cl9mYiA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKGRldi0+d2wtPmh3LAogCQkJCQkJCSB0eGN0bC0+dmlmLAogCQkJCQkJCSBmcmFnbWVudF9sZW4sCi0JCQkJCQkJIGZicmF0ZV9iYXNlMTAwa2Jwcyk7CisJCQkJCQkJIHJhdGVfZmIpOwogCX0KIAogCXBsY3BfZnJhZ21lbnRfbGVuID0gZnJhZ21lbnRfbGVuICsgRkNTX0xFTjsKQEAgLTI2Niw3ICsyNjgsNyBAQAogCQkJCSAgICByYXRlKTsKIAliNDNsZWdhY3lfZ2VuZXJhdGVfcGxjcF9oZHIoKHN0cnVjdCBiNDNsZWdhY3lfcGxjcF9oZHI0ICopCiAJCQkJICAgICgmdHhoZHItPnBsY3BfZmIpLCBwbGNwX2ZyYWdtZW50X2xlbiwKLQkJCQkgICAgcmF0ZV9mYik7CisJCQkJICAgIHJhdGVfZmItPmh3X3ZhbHVlKTsKIAogCS8qIFBIWSBUWCBDb250cm9sIHdvcmQgKi8KIAlpZiAocmF0ZV9vZmRtKQpAQCAtMzEwLDcgKzMxMiw3IEBACiAJCWludCBydHNfcmF0ZV9vZmRtOwogCQlpbnQgcnRzX3JhdGVfZmJfb2ZkbTsKIAotCQlydHNfcmF0ZSA9IHR4Y3RsLT5ydHNfY3RzX3JhdGU7CisJCXJ0c19yYXRlID0gdHhjdGwtPnJ0c19jdHNfcmF0ZS0+aHdfdmFsdWU7CiAJCXJ0c19yYXRlX29mZG0gPSBiNDNsZWdhY3lfaXNfb2ZkbV9yYXRlKHJ0c19yYXRlKTsKIAkJcnRzX3JhdGVfZmIgPSBiNDNsZWdhY3lfY2FsY19mYWxsYmFja19yYXRlKHJ0c19yYXRlKTsKIAkJcnRzX3JhdGVfZmJfb2ZkbSA9IGI0M2xlZ2FjeV9pc19vZmRtX3JhdGUocnRzX3JhdGVfZmIpOwpAQCAtNTM2LDE5ICs1MzgsMjQgQEAKIAkJCQkgICAgICAocGh5c3RhdDMgJiBCNDNsZWdhY3lfUlhfUEhZU1QzX1RSU1RBVEUpKTsKIAlzdGF0dXMubm9pc2UgPSBkZXYtPnN0YXRzLmxpbmtfbm9pc2U7CiAJc3RhdHVzLnNpZ25hbCA9IChqc3NpICogMTAwKSAvIEI0M2xlZ2FjeV9SWF9NQVhfU1NJOworCS8qIGNoYW5nZSB0byBzdXBwb3J0IEEgUEhZICovCiAJaWYgKHBoeXN0YXQwICYgQjQzbGVnYWN5X1JYX1BIWVNUMF9PRkRNKQotCQlzdGF0dXMucmF0ZSA9IGI0M2xlZ2FjeV9wbGNwX2dldF9iaXRyYXRlX29mZG0ocGxjcCk7CisJCXN0YXR1cy5yYXRlX2lkeCA9IGI0M2xlZ2FjeV9wbGNwX2dldF9iaXRyYXRlX2lkeF9vZmRtKHBsY3AsIGZhbHNlKTsKIAllbHNlCi0JCXN0YXR1cy5yYXRlID0gYjQzbGVnYWN5X3BsY3BfZ2V0X2JpdHJhdGVfY2NrKHBsY3ApOworCQlzdGF0dXMucmF0ZV9pZHggPSBiNDNsZWdhY3lfcGxjcF9nZXRfYml0cmF0ZV9pZHhfY2NrKHBsY3ApOwogCXN0YXR1cy5hbnRlbm5hID0gISEocGh5c3RhdDAgJiBCNDNsZWdhY3lfUlhfUEhZU1QwX0FOVCk7CiAKIAkvKgotCSAqIElmIG1vbml0b3JzIGFyZSBwcmVzZW50IGdldCBmdWxsIDY0LWJpdCB0aW1lc3RhbXAuIFRoaXMKLQkgKiBjb2RlIGFzc3VtZXMgd2UgZ2V0IHRvIHByb2Nlc3MgdGhlIHBhY2tldCB3aXRoaW4gMTYgYml0cwotCSAqIG9mIHRpbWVzdGFtcCwgaS5lLiBhYm91dCA2NSBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIFBIWQotCSAqIHJlY2VpdmVkIHRoZSBmaXJzdCBzeW1ib2wuCisJICogQWxsIGZyYW1lcyBvbiBtb25pdG9yIGludGVyZmFjZXMgYW5kIGJlYWNvbnMgYWx3YXlzIG5lZWQgYSBmdWxsCisJICogNjQtYml0IHRpbWVzdGFtcC4gTW9uaXRvciBpbnRlcmZhY2VzIG5lZWQgaXQgZm9yIGRpYWdub3N0aWMKKwkgKiBwdXJwb3NlcyBhbmQgYmVhY29ucyBmb3IgSUJTUyBtZXJnaW5nLgorCSAqIFRoaXMgY29kZSBhc3N1bWVzIHdlIGdldCB0byBwcm9jZXNzIHRoZSBwYWNrZXQgd2l0aGluIDE2IGJpdHMKKwkgKiBvZiB0aW1lc3RhbXAsIGkuZS4gYWJvdXQgNjUgbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBQSFkgcmVjZWl2ZWQKKwkgKiB0aGUgZmlyc3Qgc3ltYm9sLgogCSAqLwotCWlmIChkZXYtPndsLT5yYWRpb3RhcF9lbmFibGVkKSB7CisJaWYgKCgoZmN0bCAmIChJRUVFODAyMTFfRkNUTF9GVFlQRSB8IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkKKwkgICAgPT0gKElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0JFQUNPTikpIHx8CisJICAgIGRldi0+d2wtPnJhZGlvdGFwX2VuYWJsZWQpIHsKIAkJdTE2IGxvd19tYWN0aW1lX25vdzsKIAogCQliNDNsZWdhY3lfdHNmX3JlYWQoZGV2LCAmc3RhdHVzLm1hY3RpbWUpOwpAQCAtNTY0LDE0ICs1NzEsOSBAQAogCQkgIEI0M2xlZ2FjeV9SWF9DSEFOX0lEX1NISUZUOwogCXN3aXRjaCAoY2hhbnN0YXQgJiBCNDNsZWdhY3lfUlhfQ0hBTl9QSFlUWVBFKSB7CiAJY2FzZSBCNDNsZWdhY3lfUEhZVFlQRV9COgotCQlzdGF0dXMucGh5bW9kZSA9IE1PREVfSUVFRTgwMjExQjsKLQkJc3RhdHVzLmZyZXEgPSBjaGFuaWQgKyAyNDAwOwotCQlzdGF0dXMuY2hhbm5lbCA9IGI0M2xlZ2FjeV9mcmVxX3RvX2NoYW5uZWxfYmcoY2hhbmlkICsgMjQwMCk7Ci0JCWJyZWFrOwogCWNhc2UgQjQzbGVnYWN5X1BIWVRZUEVfRzoKLQkJc3RhdHVzLnBoeW1vZGUgPSBNT0RFX0lFRUU4MDIxMUc7CisJCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAkJc3RhdHVzLmZyZXEgPSBjaGFuaWQgKyAyNDAwOwotCQlzdGF0dXMuY2hhbm5lbCA9IGI0M2xlZ2FjeV9mcmVxX3RvX2NoYW5uZWxfYmcoY2hhbmlkICsgMjQwMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWI0M2xlZ2FjeXdhcm4oZGV2LT53bCwgIlVuZXhwZWN0ZWQgdmFsdWUgZm9yIGNoYW5zdGF0ICgweCVYKVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE1OTcwMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1jb25maWcgQkNNNDNYWAotCXRyaXN0YXRlICJCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gUENJICYmIElFRUU4MDIxMSAmJiBJRUVFODAyMTFfU09GVE1BQyAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBXSVJFTEVTU19FWFQKLQlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IEhXX1JBTkRPTQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIEJyb2FkY29tIDQzeHggd2lyZWxlc3MKLQkgIGNoaXAsIGZvdW5kIGluIHRoZSBBcHBsZSBBaXJwb3J0IEV4dHJlbWUgYW5kIHZhcmlvdXMgb3RoZXIKLQkgIGRldmljZXMuICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQKLQkgIGZyb20gdGhlIGtlcm5lbCBpbiB0aGUgbmVhciBmdXR1cmUuICBJdCBoYXMgYmVlbiByZXBsYWNlZAotCSAgYnkgdGhlIGI0MyBhbmQgYjQzbGVnYWN5IGRyaXZlcnMuCi0KLWNvbmZpZyBCQ000M1hYX0RFQlVHCi0JYm9vbCAiQnJvYWRjb20gQkNNNDN4eCBkZWJ1Z2dpbmcgKFJFQ09NTUVOREVEKSIKLQlkZXBlbmRzIG9uIEJDTTQzWFgKLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JICBCcm9hZGNvbSA0M3h4IGRlYnVnZ2luZyBtZXNzYWdlcy4KLQkgIFNheSBZLCBiZWNhdXNlIHRoZSBkcml2ZXIgaXMgc3RpbGwgdmVyeSBleHBlcmltZW50YWwgYW5kCi0JICB0aGlzIHdpbGwgaGVscCB5b3UgZ2V0IGl0IHJ1bm5pbmcuCi0KLWNvbmZpZyBCQ000M1hYX0RNQQotCWJvb2wKLQlkZXBlbmRzIG9uIEJDTTQzWFgKLQotY29uZmlnIEJDTTQzWFhfUElPCi0JYm9vbAotCWRlcGVuZHMgb24gQkNNNDNYWAotCi1jaG9pY2UKLQlwcm9tcHQgIkJDTTQzeHggZGF0YSB0cmFuc2ZlciBtb2RlIgotCWRlcGVuZHMgb24gQkNNNDNYWAotCWRlZmF1bHQgQkNNNDNYWF9ETUFfQU5EX1BJT19NT0RFCi0KLWNvbmZpZyBCQ000M1hYX0RNQV9BTkRfUElPX01PREUKLQlib29sICJETUEgKyBQSU8iCi0Jc2VsZWN0IEJDTTQzWFhfRE1BCi0Jc2VsZWN0IEJDTTQzWFhfUElPCi0JLS0taGVscC0tLQotCSAgSW5jbHVkZSBib3RoLCBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBhbmQgUHJvZ3JhbW1lZCBJL08gKFBJTykKLQkgIGRhdGEgdHJhbnNmZXIgbW9kZXMuCi0JICBUaGUgYWN0dWFsbHkgdXNlZCBtb2RlIGlzIHNlbGVjdGFibGUgdGhyb3VnaCB0aGUgbW9kdWxlCi0JICBwYXJhbWV0ZXIgInBpbyIuIElmIHRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHBpbz0wLCBETUEgaXMgdXNlZC4KLQkgIE90aGVyd2lzZSBQSU8gaXMgdXNlZC4gRE1BIGlzIGRlZmF1bHQuCi0KLQkgIElmIHVuc3VyZSwgY2hvb3NlIHRoaXMgb3B0aW9uLgotCi1jb25maWcgQkNNNDNYWF9ETUFfTU9ERQotCWJvb2wgIkRNQSAoRGlyZWN0IE1lbW9yeSBBY2Nlc3MpIG9ubHkiCi0Jc2VsZWN0IEJDTTQzWFhfRE1BCi0JLS0taGVscC0tLQotCSAgT25seSBpbmNsdWRlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpLgotCSAgVGhpcyByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcml2ZXIgbW9kdWxlLCBieSBvbWl0dGluZyB0aGUgUElPIGNvZGUuCi0KLWNvbmZpZyBCQ000M1hYX1BJT19NT0RFCi0JYm9vbCAiUElPIChQcm9ncmFtbWVkIEkvTykgb25seSIKLQlzZWxlY3QgQkNNNDNYWF9QSU8KLQktLS1oZWxwLS0tCi0JICBPbmx5IGluY2x1ZGUgUHJvZ3JhbW1lZCBJL08gKFBJTykuCi0JICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIGRyaXZlciBtb2R1bGUsIGJ5IG9taXR0aW5nIHRoZSBETUEgY29kZS4KLQkgIFBsZWFzZSBub3RlIHRoYXQgUElPIHRyYW5zZmVycyBhcmUgc2xvdyAoY29tcGFyZWQgdG8gRE1BKS4KLQotCSAgQWxzbyBub3RlIHRoYXQgbm90IGFsbCBkZXZpY2VzIG9mIHRoZSA0M3h4IHNlcmllcyBzdXBwb3J0IFBJTy4KLQkgIFRoZSA0MzA2IChBcHBsZSBBaXJwb3J0IEV4dHJlbWUgYW5kIG90aGVycykgc3VwcG9ydHMgUElPLCB3aGlsZQotCSAgdGhlIDQzMTggaXMga25vd24gdG8gX25vdF8gc3VwcG9ydCBQSU8uCi0KLQkgIE9ubHkgdXNlIFBJTywgaWYgRE1BIGRvZXMgbm90IHdvcmsgZm9yIHlvdS4KLQotZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1MjIwYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotb2JqLSQoQ09ORklHX0JDTTQzWFgpICs9IGJjbTQzeHgubwotYmNtNDN4eC1vYmotJChDT05GSUdfQkNNNDNYWF9ERUJVRykgKz0gYmNtNDN4eF9kZWJ1Z2ZzLm8KLQotYmNtNDN4eC1vYmotJChDT05GSUdfQkNNNDNYWF9ETUEpICs9IGJjbTQzeHhfZG1hLm8KLWJjbTQzeHgtb2JqLSQoQ09ORklHX0JDTTQzWFhfUElPKSArPSBiY200M3h4X3Bpby5vCi0KLWJjbTQzeHgtb2JqcyA6PSBiY200M3h4X21haW4ubyBiY200M3h4X2lsdC5vIFwKLQkJYmNtNDN4eF9yYWRpby5vIGJjbTQzeHhfcGh5Lm8gXAotCQliY200M3h4X3Bvd2VyLm8gYmNtNDN4eF93eC5vIFwKLQkJYmNtNDN4eF9sZWRzLm8gYmNtNDN4eF9ldGh0b29sLm8gXAotCQliY200M3h4X3htaXQubyBiY200M3h4X3N5c2ZzLm8gXAotCQkkKGJjbTQzeHgtb2JqLXkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWJkMmVkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTk3ICswLDAgQEAKLSNpZm5kZWYgQkNNNDN4eF9IXwotI2RlZmluZSBCQ000M3h4X0hfCi0KLSNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMXNvZnRtYWMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLQotI2luY2x1ZGUgImJjbTQzeHhfZGVidWdmcy5oIgotI2luY2x1ZGUgImJjbTQzeHhfbGVkcy5oIgotCi0KLSNkZWZpbmUgUEZYCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIKLQotI2RlZmluZSBCQ000M3h4X1NXSVRDSF9DT1JFX01BWF9SRVRSSUVTCTUwCi0jZGVmaW5lIEJDTTQzeHhfSVJRV0FJVF9NQVhfUkVUUklFUwkxMDAKLQotI2RlZmluZSBCQ000M3h4X0lPX1NJWkUJCQk4MTkyCi0KLS8qIEFjdGl2ZSBDb3JlIFBDSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyLiAqLwotI2RlZmluZSBCQ000M3h4X1BDSUNGR19BQ1RJVkVfQ09SRQkweDgwCi0vKiBTUFJPTSBjb250cm9sIHJlZ2lzdGVyLiAqLwotI2RlZmluZSBCQ000M3h4X1BDSUNGR19TUFJPTUNUTAkJMHg4OAotLyogSW50ZXJydXB0IENvbnRyb2wgUENJIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIuIChPbmx5IG9uIFBDSSBjb3JlcyB3aXRoIHJldiA+PSA2KSAqLwotI2RlZmluZSBCQ000M3h4X1BDSUNGR19JQ1IJCTB4OTQKLQotLyogTU1JTyBvZmZzZXRzICovCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEwX1JFQVNPTgkweDIwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEwX0lSUV9NQVNLCTB4MjQKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTFfUkVBU09OCTB4MjgKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTFfSVJRX01BU0sJMHgyQwotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMl9SRUFTT04JMHgzMAotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMl9JUlFfTUFTSwkweDM0Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEzX1JFQVNPTgkweDM4Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEzX0lSUV9NQVNLCTB4M0MKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTRfUkVBU09OCTB4NDAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTRfSVJRX01BU0sJMHg0NAotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNV9SRUFTT04JMHg0OAotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNV9JUlFfTUFTSwkweDRDCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQJMHgxMjAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1NUQVRVUzJfQklURklFTEQJMHgxMjQKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OCTB4MTI4Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19HRU5fSVJRX01BU0sJMHgxMkMKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1JBTV9DT05UUk9MCTB4MTMwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19SQU1fREFUQQkJMHgxMzQKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1BTX1NUQVRVUwkJMHgxNDAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1JBRElPX0hXRU5BQkxFRF9ISQkweDE1OAotI2RlZmluZSBCQ000M3h4X01NSU9fU0hNX0NPTlRST0wJMHgxNjAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1NITV9EQVRBCQkweDE2NAotI2RlZmluZSBCQ000M3h4X01NSU9fU0hNX0RBVEFfVU5BTElHTkVECTB4MTY2Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19YTUlUU1RBVF8wCQkweDE3MAotI2RlZmluZSBCQ000M3h4X01NSU9fWE1JVFNUQVRfMQkJMHgxNzQKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1JFVjNQTFVTX1RTRl9MT1cJMHgxODAgLyogY29yZSByZXYgPj0gMyBvbmx5ICovCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19SRVYzUExVU19UU0ZfSElHSAkweDE4NCAvKiBjb3JlIHJldiA+PSAzIG9ubHkgKi8KLQotLyogMzItYml0IERNQSAqLwotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMzJfQkFTRTAJMHgyMDAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0UxCTB4MjIwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEzMl9CQVNFMgkweDI0MAotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMzJfQkFTRTMJMHgyNjAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0U0CTB4MjgwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEzMl9CQVNFNQkweDJBMAotLyogNjQtYml0IERNQSAqLwotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNjRfQkFTRTAJMHgyMDAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0UxCTB4MjQwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE2NF9CQVNFMgkweDI4MAotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNjRfQkFTRTMJMHgyQzAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0U0CTB4MzAwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE2NF9CQVNFNQkweDM0MAotLyogUElPICovCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19QSU8xX0JBU0UJCTB4MzAwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19QSU8yX0JBU0UJCTB4MzEwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19QSU8zX0JBU0UJCTB4MzIwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19QSU80X0JBU0UJCTB4MzMwCi0KLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1BIWV9WRVIJCTB4M0UwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19QSFlfUkFESU8JCTB4M0UyCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19BTlRFTk5BCQkweDNFOAotI2RlZmluZSBCQ000M3h4X01NSU9fQ0hBTk5FTAkJMHgzRjAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhUCTB4M0Y0Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19SQURJT19DT05UUk9MCTB4M0Y2Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19SQURJT19EQVRBX0hJR0gJMHgzRjgKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1JBRElPX0RBVEFfTE9XCTB4M0ZBCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19QSFlfQ09OVFJPTAkweDNGQwotI2RlZmluZSBCQ000M3h4X01NSU9fUEhZX0RBVEEJCTB4M0ZFCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19NQUNGSUxURVJfQ09OVFJPTAkweDQyMAotI2RlZmluZSBCQ000M3h4X01NSU9fTUFDRklMVEVSX0RBVEEJMHg0MjIKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1JBRElPX0hXRU5BQkxFRF9MTwkweDQ5QQotI2RlZmluZSBCQ000M3h4X01NSU9fR1BJT19DT05UUk9MCTB4NDlDCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19HUElPX01BU0sJCTB4NDlFCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19UU0ZfMAkJMHg2MzIgLyogY29yZSByZXYgPCAzIG9ubHkgKi8KLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1RTRl8xCQkweDYzNCAvKiBjb3JlIHJldiA8IDMgb25seSAqLwotI2RlZmluZSBCQ000M3h4X01NSU9fVFNGXzIJCTB4NjM2IC8qIGNvcmUgcmV2IDwgMyBvbmx5ICovCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19UU0ZfMwkJMHg2MzggLyogY29yZSByZXYgPCAzIG9ubHkgKi8KLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1JORwkJMHg2NUEKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX1BPV0VSVVBfREVMQVkJMHg2QTgKLQotLyogU1BST00gb2Zmc2V0cy4gKi8KLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9CQVNFCQkweDEwMDAKLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9CT0FSREZMQUdTMgkweDFjCi0jZGVmaW5lIEJDTTQzeHhfU1BST01fSUwwTUFDQUREUgkweDI0Ci0jZGVmaW5lIEJDTTQzeHhfU1BST01fRVQwTUFDQUREUgkweDI3Ci0jZGVmaW5lIEJDTTQzeHhfU1BST01fRVQxTUFDQUREUgkweDJhCi0jZGVmaW5lIEJDTTQzeHhfU1BST01fRVRIUEhZCQkweDJkCi0jZGVmaW5lIEJDTTQzeHhfU1BST01fQk9BUkRSRVYJCTB4MmUKLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9QQTBCMAkJMHgyZgotI2RlZmluZSBCQ000M3h4X1NQUk9NX1BBMEIxCQkweDMwCi0jZGVmaW5lIEJDTTQzeHhfU1BST01fUEEwQjIJCTB4MzEKLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9XTDBHUElPMAkJMHgzMgotI2RlZmluZSBCQ000M3h4X1NQUk9NX1dMMEdQSU8yCQkweDMzCi0jZGVmaW5lIEJDTTQzeHhfU1BST01fTUFYUFdSCQkweDM0Ci0jZGVmaW5lIEJDTTQzeHhfU1BST01fUEExQjAJCTB4MzUKLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9QQTFCMQkJMHgzNgotI2RlZmluZSBCQ000M3h4X1NQUk9NX1BBMUIyCQkweDM3Ci0jZGVmaW5lIEJDTTQzeHhfU1BST01fSURMX1RTU0lfVEdUCTB4MzgKLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9CT0FSREZMQUdTCTB4MzkKLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9BTlRFTk5BX0dBSU4JMHgzYQotI2RlZmluZSBCQ000M3h4X1NQUk9NX1ZFUlNJT04JCTB4M2YKLQotLyogQkNNNDN4eF9TUFJPTV9CT0FSREZMQUdTIHZhbHVlcyAqLwotI2RlZmluZSBCQ000M3h4X0JGTF9CVENPRVhJU1QJCTB4MDAwMSAvKiBpbXBsZW1lbnRzIEJsdWV0b290aCBjb2V4aXN0YW5jZSAqLwotI2RlZmluZSBCQ000M3h4X0JGTF9QQUNUUkwJCTB4MDAwMiAvKiBHUElPIDkgY29udHJvbGxpbmcgdGhlIFBBICovCi0jZGVmaW5lIEJDTTQzeHhfQkZMX0FJUkxJTkVNT0RFCQkweDAwMDQgLyogaW1wbGVtZW50cyBHUElPIDEzIHJhZGlvIGRpc2FibGUgaW5kaWNhdGlvbiAqLwotI2RlZmluZSBCQ000M3h4X0JGTF9SU1NJCQkweDAwMDggLyogc29mdHdhcmUgY2FsY3VsYXRlcyBucnNzaSBzbG9wZS4gKi8KLSNkZWZpbmUgQkNNNDN4eF9CRkxfRU5FVFNQSQkJMHgwMDEwIC8qIGhhcyBlcGh5IHJvYm9zd2l0Y2ggc3BpICovCi0jZGVmaW5lIEJDTTQzeHhfQkZMX1hUQUxfTk9TTE9XCQkweDAwMjAgLyogbm8gc2xvdyBjbG9jayBhdmFpbGFibGUgKi8KLSNkZWZpbmUgQkNNNDN4eF9CRkxfQ0NLSElQV1IJCTB4MDA0MCAvKiBjYW4gZG8gaGlnaCBwb3dlciBDQ0sgdHJhbnNtaXNzaW9uICovCi0jZGVmaW5lIEJDTTQzeHhfQkZMX0VORVRBRE0JCTB4MDA4MCAvKiBoYXMgQURNdGVrIHN3aXRjaCAqLwotI2RlZmluZSBCQ000M3h4X0JGTF9FTkVUVkxBTgkJMHgwMTAwIC8qIGNhbiBkbyB2bGFuICovCi0jZGVmaW5lIEJDTTQzeHhfQkZMX0FGVEVSQlVSTkVSCQkweDAyMDAgLyogc3VwcG9ydHMgQWZ0ZXJidXJuZXIgbW9kZSAqLwotI2RlZmluZSBCQ000M3h4X0JGTF9OT1BDSQkJMHgwNDAwIC8qIGxlYXZlcyBQQ0kgZmxvYXRpbmcgKi8KLSNkZWZpbmUgQkNNNDN4eF9CRkxfRkVNCQkJMHgwODAwIC8qIHN1cHBvcnRzIHRoZSBGcm9udCBFbmQgTW9kdWxlICovCi0jZGVmaW5lIEJDTTQzeHhfQkZMX0VYVExOQQkJMHgxMDAwIC8qIGhhcyBhbiBleHRlcm5hbCBMTkEgKi8KLSNkZWZpbmUgQkNNNDN4eF9CRkxfSEdQQQkJMHgyMDAwIC8qIGhhZCBoaWdoIGdhaW4gUEEgKi8KLSNkZWZpbmUgQkNNNDN4eF9CRkxfQlRDTU9ECQkweDQwMDAgLyogQkZMX0JUQ09FWElTVCBpcyBnaXZlbiBpbiBhbHRlcm5hdGUgR1BJT3MgKi8KLSNkZWZpbmUgQkNNNDN4eF9CRkxfQUxUSVEJCTB4ODAwMCAvKiBhbHRlcm5hdGUgSS9RIHNldHRpbmdzICovCi0KLS8qIEdQSU8gcmVnaXN0ZXIgb2Zmc2V0LCBpbiBib3RoIENoaXBDb21tb24gYW5kIFBDSSBjb3JlLiAqLwotI2RlZmluZSBCQ000M3h4X0dQSU9fQ09OVFJPTAkJMHg2YwotCi0vKiBTSE0gUm91dGluZyAqLwotI2RlZmluZSBCQ000M3h4X1NITV9TSEFSRUQJCTB4MDAwMQotI2RlZmluZSBCQ000M3h4X1NITV9XSVJFTEVTUwkJMHgwMDAyCi0jZGVmaW5lIEJDTTQzeHhfU0hNX1BDTQkJCTB4MDAwMwotI2RlZmluZSBCQ000M3h4X1NITV9IV01BQwkJMHgwMDA0Ci0jZGVmaW5lIEJDTTQzeHhfU0hNX1VDT0RFCQkweDAzMDAKLQotLyogTWFjRmlsdGVyIG9mZnNldHMuICovCi0jZGVmaW5lIEJDTTQzeHhfTUFDRklMVEVSX1NFTEYJCTB4MDAwMAotI2RlZmluZSBCQ000M3h4X01BQ0ZJTFRFUl9BU1NPQwkJMHgwMDAzCi0KLS8qIENoaXBjb21tb24gcmVnaXN0ZXJzLiAqLwotI2RlZmluZSBCQ000M3h4X0NISVBDT01NT05fQ0FQQUJJTElUSUVTIAkweDA0Ci0jZGVmaW5lIEJDTTQzeHhfQ0hJUENPTU1PTl9DVEwJCQkweDI4Ci0jZGVmaW5lIEJDTTQzeHhfQ0hJUENPTU1PTl9QTExPTkRFTEFZCQkweEIwCi0jZGVmaW5lIEJDTTQzeHhfQ0hJUENPTU1PTl9GUkVGU0VMREVMQVkJCTB4QjQKLSNkZWZpbmUgQkNNNDN4eF9DSElQQ09NTU9OX1NMT1dDTEtDVEwJCTB4QjgKLSNkZWZpbmUgQkNNNDN4eF9DSElQQ09NTU9OX1NZU0NMS0NUTAkJMHhDMAotCi0vKiBQQ0kgY29yZSBzcGVjaWZpYyByZWdpc3RlcnMuICovCi0jZGVmaW5lIEJDTTQzeHhfUENJQ09SRV9CQ0FTVF9BRERSCTB4NTAKLSNkZWZpbmUgQkNNNDN4eF9QQ0lDT1JFX0JDQVNUX0RBVEEJMHg1NAotI2RlZmluZSBCQ000M3h4X1BDSUNPUkVfU0JUT1BDSTIJMHgxMDgKLQotLyogU0JUT1BDSTIgdmFsdWVzLiAqLwotI2RlZmluZSBCQ000M3h4X1NCVE9QQ0kyX1BSRUZFVENICTB4NAotI2RlZmluZSBCQ000M3h4X1NCVE9QQ0kyX0JVUlNUCQkweDgKLSNkZWZpbmUgQkNNNDN4eF9TQlRPUENJMl9NRU1SRUFEX01VTFRJCTB4MjAKLQotLyogUENJLUUgY29yZSByZWdpc3RlcnMuICovCi0jZGVmaW5lIEJDTTQzeHhfUENJRUNPUkVfUkVHX0FERFIgICAgICAweDAxMzAKLSNkZWZpbmUgQkNNNDN4eF9QQ0lFQ09SRV9SRUdfREFUQSAgICAgIDB4MDEzNAotI2RlZmluZSBCQ000M3h4X1BDSUVDT1JFX01ESU9fQ1RMICAgICAgMHgwMTI4Ci0jZGVmaW5lIEJDTTQzeHhfUENJRUNPUkVfTURJT19EQVRBICAgICAweDAxMkMKLQotLyogUENJLUUgcmVnaXN0ZXJzLiAqLwotI2RlZmluZSBCQ000M3h4X1BDSUVfVExQX1dPUktBUk9VTkQgICAgMHgwMDA0Ci0jZGVmaW5lIEJDTTQzeHhfUENJRV9ETExQX0xJTktDVEwgICAgICAweDAxMDAKLQotLyogUENJLUUgTURJTyBiaXRzLiAqLwotI2RlZmluZSBCQ000M3h4X1BDSUVfTURJT19TVCAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9QQ0lFX01ESU9fV1QgICAweDEwMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfUENJRV9NRElPX0RFViAgMjIKLSNkZWZpbmUgQkNNNDN4eF9QQ0lFX01ESU9fUkVHICAxOAotI2RlZmluZSBCQ000M3h4X1BDSUVfTURJT19UQSAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQkNNNDN4eF9QQ0lFX01ESU9fVEMgICAweDAxMDAKLQotLyogTURJTyBkZXZpY2VzLiAqLwotI2RlZmluZSBCQ000M3h4X01ESU9fU0VSREVTX1JYCTB4MUYKLQotLyogU0VSREVTIFJYIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUgQkNNNDN4eF9TRVJERVNfUlhUSU1FUgkweDIKLSNkZWZpbmUgQkNNNDN4eF9TRVJERVNfQ0RSCTB4NgotI2RlZmluZSBCQ000M3h4X1NFUkRFU19DRFJfQlcJMHg3Ci0KLS8qIENoaXBjb21tb24gY2FwYWJpbGl0aWVzLiAqLwotI2RlZmluZSBCQ000M3h4X0NBUEFCSUxJVElFU19QQ1RMCQkweDAwMDQwMDAwCi0jZGVmaW5lIEJDTTQzeHhfQ0FQQUJJTElUSUVTX1BMTE1BU0sJCTB4MDAwMzAwMDAKLSNkZWZpbmUgQkNNNDN4eF9DQVBBQklMSVRJRVNfUExMU0hJRlQJCTE2Ci0jZGVmaW5lIEJDTTQzeHhfQ0FQQUJJTElUSUVTX0ZMQVNITUFTSwkJMHgwMDAwMDcwMAotI2RlZmluZSBCQ000M3h4X0NBUEFCSUxJVElFU19GTEFTSFNISUZUCQk4Ci0jZGVmaW5lIEJDTTQzeHhfQ0FQQUJJTElUSUVTX0VYVEJVU1BSRVNFTlQJMHgwMDAwMDA0MAotI2RlZmluZSBCQ000M3h4X0NBUEFCSUxJVElFU19VQVJUR1BJTwkJMHgwMDAwMDAyMAotI2RlZmluZSBCQ000M3h4X0NBUEFCSUxJVElFU19VQVJUQ0xPQ0tNQVNLCTB4MDAwMDAwMTgKLSNkZWZpbmUgQkNNNDN4eF9DQVBBQklMSVRJRVNfVUFSVENMT0NLU0hJRlQJMwotI2RlZmluZSBCQ000M3h4X0NBUEFCSUxJVElFU19NSVBTQklHRU5ESUFOCTB4MDAwMDAwMDQKLSNkZWZpbmUgQkNNNDN4eF9DQVBBQklMSVRJRVNfTlJVQVJUU01BU0sJMHgwMDAwMDAwMwotCi0vKiBQb3dlckNvbnRyb2wgKi8KLSNkZWZpbmUgQkNNNDN4eF9QQ1RMX0lOCQkJMHhCMAotI2RlZmluZSBCQ000M3h4X1BDVExfT1VUCQkweEI0Ci0jZGVmaW5lIEJDTTQzeHhfUENUTF9PVVRFTkFCTEUJCTB4QjgKLSNkZWZpbmUgQkNNNDN4eF9QQ1RMX1hUQUxfUE9XRVJVUAkweDQwCi0jZGVmaW5lIEJDTTQzeHhfUENUTF9QTExfUE9XRVJET1dOCTB4ODAKLQotLyogUG93ZXJDb250cm9sIENsb2NrIE1vZGVzICovCi0jZGVmaW5lIEJDTTQzeHhfUENUTF9DTEtfRkFTVAkJMHgwMAotI2RlZmluZSBCQ000M3h4X1BDVExfQ0xLX1NMT1cJCTB4MDEKLSNkZWZpbmUgQkNNNDN4eF9QQ1RMX0NMS19EWU5BTUlDCTB4MDIKLQotI2RlZmluZSBCQ000M3h4X1BDVExfRk9SQ0VfU0xPVwkJMHgwODAwCi0jZGVmaW5lIEJDTTQzeHhfUENUTF9GT1JDRV9QTEwJCTB4MTAwMAotI2RlZmluZSBCQ000M3h4X1BDVExfRFlOX1hUQUwJCTB4MjAwMAotCi0vKiBDT1JFSURzICovCi0jZGVmaW5lIEJDTTQzeHhfQ09SRUlEX0NISVBDT01NT04JMHg4MDAKLSNkZWZpbmUgQkNNNDN4eF9DT1JFSURfSUxJTkUyMCAgICAgICAgICAweDgwMQotI2RlZmluZSBCQ000M3h4X0NPUkVJRF9TRFJBTSAgICAgICAgICAgIDB4ODAzCi0jZGVmaW5lIEJDTTQzeHhfQ09SRUlEX1BDSQkJMHg4MDQKLSNkZWZpbmUgQkNNNDN4eF9DT1JFSURfTUlQUyAgICAgICAgICAgICAweDgwNQotI2RlZmluZSBCQ000M3h4X0NPUkVJRF9FVEhFUk5FVCAgICAgICAgIDB4ODA2Ci0jZGVmaW5lIEJDTTQzeHhfQ09SRUlEX1Y5MAkJMHg4MDcKLSNkZWZpbmUgQkNNNDN4eF9DT1JFSURfVVNCMTFfSE9TVERFViAgICAweDgwYQotI2RlZmluZSBCQ000M3h4X0NPUkVJRF9JUFNFQyAgICAgICAgICAgIDB4ODBiCi0jZGVmaW5lIEJDTTQzeHhfQ09SRUlEX1BDTUNJQQkJMHg4MGQKLSNkZWZpbmUgQkNNNDN4eF9DT1JFSURfRVhUX0lGICAgICAgICAgICAweDgwZgotI2RlZmluZSBCQ000M3h4X0NPUkVJRF84MDIxMQkJMHg4MTIKLSNkZWZpbmUgQkNNNDN4eF9DT1JFSURfTUlQU18zMzAyICAgICAgICAweDgxNgotI2RlZmluZSBCQ000M3h4X0NPUkVJRF9VU0IxMV9IT1NUICAgICAgIDB4ODE3Ci0jZGVmaW5lIEJDTTQzeHhfQ09SRUlEX1VTQjExX0RFViAgICAgICAgMHg4MTgKLSNkZWZpbmUgQkNNNDN4eF9DT1JFSURfVVNCMjBfSE9TVCAgICAgICAweDgxOQotI2RlZmluZSBCQ000M3h4X0NPUkVJRF9VU0IyMF9ERVYgICAgICAgIDB4ODFhCi0jZGVmaW5lIEJDTTQzeHhfQ09SRUlEX1NESU9fSE9TVCAgICAgICAgMHg4MWIKLSNkZWZpbmUgQkNNNDN4eF9DT1JFSURfUENJRQkJMHg4MjAKLQotLyogQ29yZSBJbmZvcm1hdGlvbiBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgQkNNNDN4eF9DSVJfQkFTRQkJMHhmMDAKLSNkZWZpbmUgQkNNNDN4eF9DSVJfU0JUUFNGTEFHCQkoQkNNNDN4eF9DSVJfQkFTRSArIDB4MTgpCi0jZGVmaW5lIEJDTTQzeHhfQ0lSX1NCSU1TVEFURQkJKEJDTTQzeHhfQ0lSX0JBU0UgKyAweDkwKQotI2RlZmluZSBCQ000M3h4X0NJUl9TQklOVFZFQwkJKEJDTTQzeHhfQ0lSX0JBU0UgKyAweDk0KQotI2RlZmluZSBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1cJKEJDTTQzeHhfQ0lSX0JBU0UgKyAweDk4KQotI2RlZmluZSBCQ000M3h4X0NJUl9TQlRNU1RBVEVISUdICShCQ000M3h4X0NJUl9CQVNFICsgMHg5YykKLSNkZWZpbmUgQkNNNDN4eF9DSVJfU0JJTUNPTkZJR0xPVwkoQkNNNDN4eF9DSVJfQkFTRSArIDB4YTgpCi0jZGVmaW5lIEJDTTQzeHhfQ0lSX1NCX0lEX0hJCQkoQkNNNDN4eF9DSVJfQkFTRSArIDB4ZmMpCi0KLS8qIE1hc2sgdG8gZ2V0IHRoZSBCYWNrcGxhbmUgRmxhZyBOdW1iZXIgZnJvbSBTQlRQU0ZMQUcuICovCi0jZGVmaW5lIEJDTTQzeHhfQkFDS1BMQU5FX0ZMQUdfTlJfTUFTSwkweDNmCi0KLS8qIFNCSU1DT05GSUdMT1cgdmFsdWVzL21hc2tzLiAqLwotI2RlZmluZSBCQ000M3h4X1NCSU1DT05GSUdMT1dfU0VSVklDRV9UT1VUX01BU0sJCTB4MDAwMDAwMDcKLSNkZWZpbmUgQkNNNDN4eF9TQklNQ09ORklHTE9XX1NFUlZJQ0VfVE9VVF9TSElGVAkwCi0jZGVmaW5lIEJDTTQzeHhfU0JJTUNPTkZJR0xPV19SRVFVRVNUX1RPVVRfTUFTSwkJMHgwMDAwMDA3MAotI2RlZmluZSBCQ000M3h4X1NCSU1DT05GSUdMT1dfUkVRVUVTVF9UT1VUX1NISUZUCTQKLSNkZWZpbmUgQkNNNDN4eF9TQklNQ09ORklHTE9XX0NPTk5JRF9NQVNLCQkweDAwZmYwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JJTUNPTkZJR0xPV19DT05OSURfU0hJRlQJCTE2Ci0KLS8qIHNidG1zdGF0ZWxvdyBzdGF0ZSBmbGFncyAqLwotI2RlZmluZSBCQ000M3h4X1NCVE1TVEFURUxPV19SRVNFVAkJMHgwMQotI2RlZmluZSBCQ000M3h4X1NCVE1TVEFURUxPV19SRUpFQ1QJCTB4MDIKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVMT1dfQ0xPQ0sJCTB4MTAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVMT1dfRk9SQ0VfR0FURV9DTE9DSwkweDIwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFTE9XX0dfTU9ERV9FTkFCTEUJMHgyMDAwMDAwMAotCi0vKiBzYnRtc3RhdGVoaWdoIHN0YXRlIGZsYWdzICovCi0jZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9TRVJST1IJCTB4MDAwMDAwMDEKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0JVU1kJCTB4MDAwMDAwMDQKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX1RJTUVPVVQJCTB4MDAwMDAwMjAKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0dfUEhZX0FWQUlMCTB4MDAwMTAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0FfUEhZX0FWQUlMCTB4MDAwMjAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0NPUkVGTEFHUwkJMHgxRkZGMDAwMAotI2RlZmluZSBCQ000M3h4X1NCVE1TVEFURUhJR0hfRE1BNjRCSVQJCTB4MTAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0dBVEVEQ0xLCQkweDIwMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9CSVNURkFJTEVECTB4NDAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0JJU1RDT01QTEVURQkweDgwMDAwMDAwCi0KLS8qIHNiaW1zdGF0ZSBmbGFncyAqLwotI2RlZmluZSBCQ000M3h4X1NCSU1TVEFURV9JQl9FUlJPUgkJMHgyMDAwMAotI2RlZmluZSBCQ000M3h4X1NCSU1TVEFURV9USU1FT1VUCQkweDQwMDAwCi0KLS8qIFBIWVZlcnNpb25pbmcgKi8KLSNkZWZpbmUgQkNNNDN4eF9QSFlUWVBFX0EJCTB4MDAKLSNkZWZpbmUgQkNNNDN4eF9QSFlUWVBFX0IJCTB4MDEKLSNkZWZpbmUgQkNNNDN4eF9QSFlUWVBFX0cJCTB4MDIKLQotLyogUEhZUmVnaXN0ZXJzICovCi0jZGVmaW5lIEJDTTQzeHhfUEhZX0lMVF9BX0NUUkwJCTB4MDA3MgotI2RlZmluZSBCQ000M3h4X1BIWV9JTFRfQV9EQVRBMQkJMHgwMDczCi0jZGVmaW5lIEJDTTQzeHhfUEhZX0lMVF9BX0RBVEEyCQkweDAwNzQKLSNkZWZpbmUgQkNNNDN4eF9QSFlfR19MT19DT05UUk9MCTB4MDgxMAotI2RlZmluZSBCQ000M3h4X1BIWV9JTFRfR19DVFJMCQkweDA0NzIKLSNkZWZpbmUgQkNNNDN4eF9QSFlfSUxUX0dfREFUQTEJCTB4MDQ3MwotI2RlZmluZSBCQ000M3h4X1BIWV9JTFRfR19EQVRBMgkJMHgwNDc0Ci0jZGVmaW5lIEJDTTQzeHhfUEhZX0FfUENUTAkJMHgwMDdCCi0jZGVmaW5lIEJDTTQzeHhfUEhZX0dfUENUTAkJMHgwMDI5Ci0jZGVmaW5lIEJDTTQzeHhfUEhZX0FfQ1JTCQkweDAwMjkKLSNkZWZpbmUgQkNNNDN4eF9QSFlfUkFESU9fQklURklFTEQJMHgwNDAxCi0jZGVmaW5lIEJDTTQzeHhfUEhZX0dfQ1JTCQkweDA0MjkKLSNkZWZpbmUgQkNNNDN4eF9QSFlfTlJTU0lMVF9DVFJMCTB4MDgwMwotI2RlZmluZSBCQ000M3h4X1BIWV9OUlNTSUxUX0RBVEEJMHgwODA0Ci0KLS8qIFJhZGlvUmVnaXN0ZXJzICovCi0jZGVmaW5lIEJDTTQzeHhfUkFESU9DVExfSUQJCTB4MDEKLQotLyogU3RhdHVzQml0RmllbGQgKi8KLSNkZWZpbmUgQkNNNDN4eF9TQkZfTUFDX0VOQUJMRUQJCTB4MDAwMDAwMDEKLSNkZWZpbmUgQkNNNDN4eF9TQkZfMgkJCTB4MDAwMDAwMDIgLypGSVhNRTogZml4IG5hbWUqLwotI2RlZmluZSBCQ000M3h4X1NCRl9DT1JFX1JFQURZCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEJDTTQzeHhfU0JGXzQwMAkJCTB4MDAwMDA0MDAgLypGSVhNRTogZml4IG5hbWUqLwotI2RlZmluZSBCQ000M3h4X1NCRl80MDAwCQkweDAwMDA0MDAwIC8qRklYTUU6IGZpeCBuYW1lKi8KLSNkZWZpbmUgQkNNNDN4eF9TQkZfODAwMAkJMHgwMDAwODAwMCAvKkZJWE1FOiBmaXggbmFtZSovCi0jZGVmaW5lIEJDTTQzeHhfU0JGX1hGRVJfUkVHX0JZVEVTV0FQCTB4MDAwMTAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQkZfTU9ERV9OT1RBREhPQwkweDAwMDIwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JGX01PREVfQVAJCTB4MDAwNDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQkZfUkFESU9SRUdfTE9DSwkweDAwMDgwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JGX01PREVfTU9OSVRPUgkweDAwNDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JGX01PREVfUFJPTUlTQwkweDAxMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JGX1BTMQkJCTB4MDIwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQkZfUFMyCQkJMHgwNDAwMDAwMAotI2RlZmluZSBCQ000M3h4X1NCRl9OT19TU0lEX0JDQVNUCTB4MDgwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQkZfVElNRV9VUERBVEUJCTB4MTAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9TQkZfTU9ERV9HCQkweDgwMDAwMDAwCi0KLS8qIE1pY3JvY29kZSAqLwotI2RlZmluZSBCQ000M3h4X1VDT0RFX1JFVklTSU9OCQkweDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9VQ09ERV9QQVRDSExFVkVMCTB4MDAwMgotI2RlZmluZSBCQ000M3h4X1VDT0RFX0RBVEUJCTB4MDAwNAotI2RlZmluZSBCQ000M3h4X1VDT0RFX1RJTUUJCTB4MDAwNgotI2RlZmluZSBCQ000M3h4X1VDT0RFX1NUQVRVUwkJMHgwMDQwCi0KLS8qIE1pY3JvY29kZUZsYWdzQml0ZmllbGQgKGFkZHIgKyBsby13b3JkIHZhbHVlcz8pKi8KLSNkZWZpbmUgQkNNNDN4eF9VQ09ERUZMQUdTX09GRlNFVAkweDAwNUUKLQotI2RlZmluZSBCQ000M3h4X1VDT0RFRkxBR19BVVRPRElWCTB4MDAwMQotI2RlZmluZSBCQ000M3h4X1VDT0RFRkxBR19VTktCR1BIWQkweDAwMDIKLSNkZWZpbmUgQkNNNDN4eF9VQ09ERUZMQUdfVU5LQlBIWQkweDAwMDQKLSNkZWZpbmUgQkNNNDN4eF9VQ09ERUZMQUdfVU5LR1BIWQkweDAwMjAKLSNkZWZpbmUgQkNNNDN4eF9VQ09ERUZMQUdfVU5LUEFDVFJMCTB4MDA0MAotI2RlZmluZSBCQ000M3h4X1VDT0RFRkxBR19KQVBBTgkJMHgwMDgwCi0KLS8qIEhhcmR3YXJlIFJhZGlvIEVuYWJsZSBtYXNrcyAqLwotI2RlZmluZSBCQ000M3h4X01NSU9fUkFESU9fSFdFTkFCTEVEX0hJX01BU0sgKDEgPDwgMTYpCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19SQURJT19IV0VOQUJMRURfTE9fTUFTSyAoMSA8PCA0KQotCi0vKiBHZW5lcmljLUludGVycnVwdCByZWFzb25zLiAqLwotI2RlZmluZSBCQ000M3h4X0lSUV9SRUFEWQkJKDEgPDwgMCkKLSNkZWZpbmUgQkNNNDN4eF9JUlFfQkVBQ09OCQkoMSA8PCAxKQotI2RlZmluZSBCQ000M3h4X0lSUV9QUwkJCSgxIDw8IDIpCi0jZGVmaW5lIEJDTTQzeHhfSVJRX1JFRzEyNAkJKDEgPDwgNSkKLSNkZWZpbmUgQkNNNDN4eF9JUlFfUE1RCQkJKDEgPDwgNikKLSNkZWZpbmUgQkNNNDN4eF9JUlFfUElPX1dPUktBUk9VTkQJKDEgPDwgOCkKLSNkZWZpbmUgQkNNNDN4eF9JUlFfWE1JVF9FUlJPUgkJKDEgPDwgMTEpCi0jZGVmaW5lIEJDTTQzeHhfSVJRX1JYCQkJKDEgPDwgMTUpCi0jZGVmaW5lIEJDTTQzeHhfSVJRX1NDQU4JCSgxIDw8IDE2KQotI2RlZmluZSBCQ000M3h4X0lSUV9OT0lTRQkJKDEgPDwgMTgpCi0jZGVmaW5lIEJDTTQzeHhfSVJRX1hNSVRfU1RBVFVTCQkoMSA8PCAyOSkKLQotI2RlZmluZSBCQ000M3h4X0lSUV9BTEwJCQkweGZmZmZmZmZmCi0jZGVmaW5lIEJDTTQzeHhfSVJRX0lOSVRJQUwJCShCQ000M3h4X0lSUV9QUyB8CQlcCi0JCQkJCSBCQ000M3h4X0lSUV9SRUcxMjQgfAkJXAotCQkJCQkgQkNNNDN4eF9JUlFfUE1RIHwJCVwKLQkJCQkJIEJDTTQzeHhfSVJRX1hNSVRfRVJST1IgfAlcCi0JCQkJCSBCQ000M3h4X0lSUV9SWCB8CQlcCi0JCQkJCSBCQ000M3h4X0lSUV9TQ0FOIHwJCVwKLQkJCQkJIEJDTTQzeHhfSVJRX05PSVNFIHwJCVwKLQkJCQkJIEJDTTQzeHhfSVJRX1hNSVRfU1RBVFVTKQotCQkJCQkgCi0KLS8qIEluaXRpYWwgZGVmYXVsdCBpd19tb2RlICovCi0jZGVmaW5lIEJDTTQzeHhfSU5JVElBTF9JV01PREUJCQlJV19NT0RFX0lORlJBCi0KLS8qIEJ1cyB0eXBlIFBDSS4gKi8KLSNkZWZpbmUgQkNNNDN4eF9CVVNUWVBFX1BDSQkwCi0vKiBCdXMgdHlwZSBTaWxpY29uZSBCYWNrcGxhbmUgQnVzLiAqLwotI2RlZmluZSBCQ000M3h4X0JVU1RZUEVfU0IJMQotLyogQnVzIHR5cGUgUENNQ0lBLiAqLwotI2RlZmluZSBCQ000M3h4X0JVU1RZUEVfUENNQ0lBCTIKLQotLyogVGhyZXNob2xkIHZhbHVlcy4gKi8KLSNkZWZpbmUgQkNNNDN4eF9NSU5fUlRTX1RIUkVTSE9MRAkJMVUKLSNkZWZpbmUgQkNNNDN4eF9NQVhfUlRTX1RIUkVTSE9MRAkJMjMwNFUKLSNkZWZpbmUgQkNNNDN4eF9ERUZBVUxUX1JUU19USFJFU0hPTEQJCUJDTTQzeHhfTUFYX1JUU19USFJFU0hPTEQKLQotI2RlZmluZSBCQ000M3h4X0RFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQJNwotI2RlZmluZSBCQ000M3h4X0RFRkFVTFRfTE9OR19SRVRSWV9MSU1JVAk0Ci0KLS8qIEZJWE1FOiB0aGUgbmV4dCBsaW5lIGlzIGEgZ3Vlc3MgYXMgdG8gd2hhdCB0aGUgbWF4aW11bSBSU1NJIHZhbHVlIG1pZ2h0IGJlICovCi0jZGVmaW5lIFJYX1JTU0lfTUFYCQkJCTYwCi0KLS8qIE1heCBzaXplIG9mIGEgc2VjdXJpdHkga2V5ICovCi0jZGVmaW5lIEJDTTQzeHhfU0VDX0tFWVNJWkUJCQkxNgotLyogU2VjdXJpdHkgYWxnb3JpdGhtcy4gKi8KLWVudW0gewotCUJDTTQzeHhfU0VDX0FMR09fTk9ORSA9IDAsIC8qIHVuZW5jcnlwdGVkLCBhcyBvZiBUWCBoZWFkZXIuICovCi0JQkNNNDN4eF9TRUNfQUxHT19XRVAsCi0JQkNNNDN4eF9TRUNfQUxHT19VTktOT1dOLAotCUJDTTQzeHhfU0VDX0FMR09fQUVTLAotCUJDTTQzeHhfU0VDX0FMR09fV0VQMTA0LAotCUJDTTQzeHhfU0VDX0FMR09fVEtJUCwKLX07Ci0KLSNpZmRlZiBhc3NlcnQKLSMgdW5kZWYgYXNzZXJ0Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQkNNNDNYWF9ERUJVRwotI2RlZmluZSBhc3NlcnQoZXhwcikgXAotCWRvIHsJCQkJCQkJCQlcCi0JCWlmICh1bmxpa2VseSghKGV4cHIpKSkgewkJCQkJXAotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBU1NFUlRJT04gRkFJTEVEICglcykgYXQ6ICVzOiVkOiVzKClcbiIsCVwKLQkJCSNleHByLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCi0JCX0JCQkJCQkJCVwKLQl9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgYXNzZXJ0KGV4cHIpCWRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qIHJhdGUgbGltaXRlZCBwcmludGsoKS4gKi8KLSNpZmRlZiBwcmludGtsCi0jIHVuZGVmIHByaW50a2wKLSNlbmRpZgotI2RlZmluZSBwcmludGtsKGYsIHguLi4pICBkbyB7IGlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHByaW50ayhmICwjI3gpOyB9IHdoaWxlICgwKQotLyogcmF0ZSBsaW1pdGVkIHByaW50aygpIGZvciBkZWJ1Z2dpbmcgKi8KLSNpZmRlZiBkcHJpbnRrbAotIyB1bmRlZiBkcHJpbnRrbAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0JDTTQzWFhfREVCVUcKLSMgZGVmaW5lIGRwcmludGtsCQlwcmludGtsCi0jZWxzZQotIyBkZWZpbmUgZHByaW50a2woZiwgeC4uLikJZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotLyogSGVscGVyIG1hY3JvIGZvciBpZiBicmFuY2hlcy4KLSAqIEFuIGlmIGJyYW5jaCBtYXJrZWQgd2l0aCB0aGlzIG1hY3JvIGlzIG9ubHkgdGFrZW4gaW4gREVCVUcgbW9kZS4KLSAqIEV4YW1wbGU6Ci0gKglpZiAoREVCVUdfT05MWShmb28gPT0gYmFyKSkgewotICoJCWRvIHNvbWV0aGluZwotICoJfQotICoJSW4gREVCVUcgbW9kZSwgdGhlIGJyYW5jaCB3aWxsIGJlIHRha2VuIGlmIChmb28gPT0gYmFyKS4KLSAqCUluIG5vbi1ERUJVRyBtb2RlLCB0aGUgYnJhbmNoIHdpbGwgbmV2ZXIgYmUgdGFrZW4uCi0gKi8KLSNpZmRlZiBERUJVR19PTkxZCi0jIHVuZGVmIERFQlVHX09OTFkKLSNlbmRpZgotI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCi0jIGRlZmluZSBERUJVR19PTkxZKHgpCSh4KQotI2Vsc2UKLSMgZGVmaW5lIERFQlVHX09OTFkoeCkJMAotI2VuZGlmCi0KLS8qIGRlYnVnZ2luZyBwcmludGsoKSAqLwotI2lmZGVmIGRwcmludGsKLSMgdW5kZWYgZHByaW50awotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0JDTTQzWFhfREVCVUcKLSMgZGVmaW5lIGRwcmludGsoZiwgeC4uLikgIGRvIHsgcHJpbnRrKGYgLCMjeCk7IH0gd2hpbGUgKDApCi0jZWxzZQotIyBkZWZpbmUgZHByaW50ayhmLCB4Li4uKSAgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotCi1zdHJ1Y3QgbmV0X2RldmljZTsKLXN0cnVjdCBwY2lfZGV2Owotc3RydWN0IGJjbTQzeHhfZG1hcmluZzsKLXN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlOwotCi1zdHJ1Y3QgYmNtNDN4eF9pbml0dmFsIHsKLQlfX2JlMTYgb2Zmc2V0OwotCV9fYmUxNiBzaXplOwotCV9fYmUzMiB2YWx1ZTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0vKiBWYWx1ZXMgZm9yIGJjbTQzMHhfc3Byb21pbmZvLmxvY2FsZSAqLwotZW51bSB7Ci0JQkNNNDN4eF9MT0NBTEVfV09STEQgPSAwLAotCUJDTTQzeHhfTE9DQUxFX1RIQUlMQU5ELAotCUJDTTQzeHhfTE9DQUxFX0lTUkFFTCwKLQlCQ000M3h4X0xPQ0FMRV9KT1JEQU4sCi0JQkNNNDN4eF9MT0NBTEVfQ0hJTkEsCi0JQkNNNDN4eF9MT0NBTEVfSkFQQU4sCi0JQkNNNDN4eF9MT0NBTEVfVVNBX0NBTkFEQV9BTlosCi0JQkNNNDN4eF9MT0NBTEVfRVVST1BFLAotCUJDTTQzeHhfTE9DQUxFX1VTQV9MT1csCi0JQkNNNDN4eF9MT0NBTEVfSkFQQU5fSElHSCwKLQlCQ000M3h4X0xPQ0FMRV9BTEwsCi0JQkNNNDN4eF9MT0NBTEVfTk9ORSwKLX07Ci0KLSNkZWZpbmUgQkNNNDN4eF9TUFJPTV9TSVpFCTY0IC8qIGluIDE2LWJpdCB3b3Jkcy4gKi8KLXN0cnVjdCBiY200M3h4X3Nwcm9taW5mbyB7Ci0JdTE2IGJvYXJkZmxhZ3MyOwotCXU4IGlsMG1hY2FkZHJbNl07Ci0JdTggZXQwbWFjYWRkcls2XTsKLQl1OCBldDFtYWNhZGRyWzZdOwotCXU4IGV0MHBoeWFkZHI6NTsKLQl1OCBldDFwaHlhZGRyOjU7Ci0JdTggYm9hcmRyZXY7Ci0JdTggbG9jYWxlOjQ7Ci0JdTggYW50ZW5uYXNfYXBoeToyOwotCXU4IGFudGVubmFzX2JncGh5OjI7Ci0JdTE2IHBhMGIwOwotCXUxNiBwYTBiMTsKLQl1MTYgcGEwYjI7Ci0JdTggd2wwZ3BpbzA7Ci0JdTggd2wwZ3BpbzE7Ci0JdTggd2wwZ3BpbzI7Ci0JdTggd2wwZ3BpbzM7Ci0JdTggbWF4cG93ZXJfYXBoeTsKLQl1OCBtYXhwb3dlcl9iZ3BoeTsKLQl1MTYgcGExYjA7Ci0JdTE2IHBhMWIxOwotCXUxNiBwYTFiMjsKLQl1OCBpZGxlX3Rzc2lfdGd0X2FwaHk7Ci0JdTggaWRsZV90c3NpX3RndF9iZ3BoeTsKLQl1MTYgYm9hcmRmbGFnczsKLQl1MTYgYW50ZW5uYWdhaW5fYXBoeTsKLQl1MTYgYW50ZW5uYWdhaW5fYmdwaHk7Ci19OwotCi0vKiBWYWx1ZSBwYWlyIHRvIG1lYXN1cmUgdGhlIExvY2FsT3NjaWxsYXRvci4gKi8KLXN0cnVjdCBiY200M3h4X2xvcGFpciB7Ci0JczggbG93OwotCXM4IGhpZ2g7Ci0JdTggdXNlZDoxOwotfTsKLSNkZWZpbmUgQkNNNDN4eF9MT19DT1VOVAkoMTQqNCkKLQotc3RydWN0IGJjbTQzeHhfcGh5aW5mbyB7Ci0JLyogSGFyZHdhcmUgRGF0YSAqLwotCXU4IGFuYWxvZzsKLQl1OCB0eXBlOwotCXU4IHJldjsKLQl1MTYgYW50ZW5uYV9kaXZlcnNpdHk7Ci0JdTE2IHNhdmVkcGN0bHJlZzsKLQl1MTYgbWlubG93c2lnWzJdOwotCXUxNiBtaW5sb3dzaWdwb3NbMl07Ci0JdTggY29ubmVjdGVkOjEsCi0JICAgY2FsaWJyYXRlZDoxLAotCSAgIGlzX2xvY2tlZDoxLCAvKiB1c2VkIGluIGJjbTQzeHhfcGh5X3t1bn1sb2NrKCkgKi8KLQkgICBkeW5fdHNzaV90Ymw6MTsgLyogdXNlZCBpbiBiY200M3h4X3BoeV9pbml0X3Rzc2kyZGJtX3RhYmxlKCkgKi8KLQkvKiBMTyBNZWFzdXJlbWVudCBEYXRhLgotCSAqIFVzZSBiY200M3h4X2dldF9sb3BhaXIoKSB0byBnZXQgYSB2YWx1ZS4KLQkgKi8KLQlzdHJ1Y3QgYmNtNDN4eF9sb3BhaXIgKl9sb19wYWlyczsKLQotCS8qIFRTU0kgdG8gZEJtIHRhYmxlIGluIHVzZSAqLwotCWNvbnN0IHM4ICp0c3NpMmRibTsKLQkvKiBpZGxlIFRTU0kgdmFsdWUgKi8KLQlzOCBpZGxlX3Rzc2k7Ci0KLQkvKiBWYWx1ZXMgZnJvbSBiY200M3h4X2NhbGNfbG9vcGJhY2tfZ2FpbigpICovCi0JdTE2IGxvb3BiYWNrX2dhaW5bMl07Ci0KLQkvKiBQSFkgbG9jayBmb3IgY29yZS5yZXYgPCAzCi0JICogVGhpcyBsb2NrIGlzIG9ubHkgdXNlZCBieSBiY200M3h4X3BoeV97dW59bG9jaygpCi0JICovCi0Jc3BpbmxvY2tfdCBsb2NrOwotCi0JLyogRmlybXdhcmUuICovCi0JY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZTsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnBjbTsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmluaXR2YWxzMDsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmluaXR2YWxzMTsKLX07Ci0KLQotc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvIHsKLQl1MTYgbWFudWZhY3Q7Ci0JdTE2IHZlcnNpb247Ci0JdTggcmV2aXNpb247Ci0KLQkvKiBEZXNpcmVkIFRYIHBvd2VyIGluIGRCbSBRNS4yICovCi0JdTE2IHR4cG93ZXJfZGVzaXJlZDsKLQkvKiBUWCBQb3dlciBjb250cm9sIHZhbHVlcy4gKi8KLQl1bmlvbiB7Ci0JCS8qIEIvRyBQSFkgKi8KLQkJc3RydWN0IHsKLQkJCXUxNiBiYXNlYmFuZF9hdHRlbjsKLQkJCXUxNiByYWRpb19hdHRlbjsKLQkJCXUxNiB0eGN0bDE7Ci0JCQl1MTYgdHhjdGwyOwotCQl9OwotCQkvKiBBIFBIWSAqLwotCQlzdHJ1Y3QgewotCQkJdTE2IHR4cHdyX29mZnNldDsKLQkJfTsKLQl9OwotCi0JLyogQ3VycmVudCBJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbiBtb2RlICovCi0JaW50IGludGVyZm1vZGU7Ci0JLyogU3RhY2sgb2Ygc2F2ZWQgdmFsdWVzIGZyb20gdGhlIEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIGNvZGUuCi0JICogRWFjaCB2YWx1ZSBpbiB0aGUgc3RhY2sgaXMgbGF5ZWQgb3V0IGFzIGZvbGxvd3M6Ci0JICogYml0IDAtMTE6ICBvZmZzZXQKLQkgKiBiaXQgMTItMTU6IHJlZ2lzdGVyIElECi0JICogYml0IDE2LTMyOiB2YWx1ZQotCSAqIHJlZ2lzdGVyIElEIGlzOiAweDEgUEhZLCAweDIgUmFkaW8sIDB4MyBJTFQKLQkgKi8KLSNkZWZpbmUgQkNNNDN4eF9JTlRFUkZTVEFDS19TSVpFCTI2Ci0JdTMyIGludGVyZnN0YWNrW0JDTTQzeHhfSU5URVJGU1RBQ0tfU0laRV07Ci0KLQkvKiBTYXZlZCB2YWx1ZXMgZnJvbSB0aGUgTlJTU0kgU2xvcGUgY2FsY3VsYXRpb24gKi8KLQlzMTYgbnJzc2lbMl07Ci0JczMyIG5yc3Npc2xvcGU7Ci0JLyogSW4gbWVtb3J5IG5yc3NpIGxvb2t1cCB0YWJsZS4gKi8KLQlzOCBucnNzaV9sdFs2NF07Ci0KLQkvKiBjdXJyZW50IGNoYW5uZWwgKi8KLQl1OCBjaGFubmVsOwotCXU4IGluaXRpYWxfY2hhbm5lbDsKLQotCXUxNiBsb2ZjYWw7Ci0KLQl1MTYgaW5pdHZhbDsKLQotCXU4IGVuYWJsZWQ6MTsKLQkvKiBBQ0kgKGFkamFjZW50IGNoYW5uZWwgaW50ZXJmZXJlbmNlKSBmbGFncy4gKi8KLQl1OCBhY2lfZW5hYmxlOjEsCi0JICAgYWNpX3dsYW5fYXV0b21hdGljOjEsCi0JICAgYWNpX2h3X3Jzc2k6MTsKLX07Ci0KLS8qIERhdGEgc3RydWN0dXJlcyBmb3IgRE1BIHRyYW5zbWlzc2lvbiwgcGVyIDgwMjExIGNvcmUuICovCi1zdHJ1Y3QgYmNtNDN4eF9kbWEgewotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnR4X3JpbmcwOwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnR4X3JpbmcxOwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnR4X3JpbmcyOwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnR4X3JpbmczOwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnR4X3Jpbmc0OwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnR4X3Jpbmc1OwotCi0Jc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcnhfcmluZzA7Ci0Jc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcnhfcmluZzM7IC8qIG9ubHkgYXZhaWxhYmxlIG9uIGNvcmUucmV2IDwgNSAqLwotfTsKLQotLyogRGF0YSBzdHJ1Y3R1cmVzIGZvciBQSU8gdHJhbnNtaXNzaW9uLCBwZXIgODAyMTEgY29yZS4gKi8KLXN0cnVjdCBiY200M3h4X3BpbyB7Ci0Jc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlMDsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUxOwotCXN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZTI7Ci0Jc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlMzsKLX07Ci0KLSNkZWZpbmUgQkNNNDN4eF9NQVhfODAyMTFfQ09SRVMJCTIKLQotLyogR2VuZXJpYyBpbmZvcm1hdGlvbiBhYm91dCBhIGNvcmUuICovCi1zdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyB7Ci0JdTggYXZhaWxhYmxlOjEsCi0JICAgZW5hYmxlZDoxLAotCSAgIGluaXRpYWxpemVkOjE7Ci0JLyoqIGNvcmVfcmV2IHJldmlzaW9uIG51bWJlciAqLwotCXU4IHJldjsKLQkvKiogSW5kZXggbnVtYmVyIGZvciBfc3dpdGNoX2NvcmUoKSAqLwotCXU4IGluZGV4OwotCS8qKiBjb3JlX2lkIElEIG51bWJlciAqLwotCXUxNiBpZDsKLQkvKiogQ29yZS1zcGVjaWZpYyBkYXRhLiAqLwotCXZvaWQgKnByaXY7Ci19OwotCi0vKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBlYWNoIDgwMjExIGNvcmUuICovCi1zdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mb184MDIxMSB7Ci0JLyogUEhZIGRldmljZS4gKi8KLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvIHBoeTsKLQkvKiBSYWRpbyBkZXZpY2UuICovCi0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvIHJhZGlvOwotCXVuaW9uIHsKLQkJLyogRE1BIGNvbnRleHQuICovCi0JCXN0cnVjdCBiY200M3h4X2RtYSBkbWE7Ci0JCS8qIFBJTyBjb250ZXh0LiAqLwotCQlzdHJ1Y3QgYmNtNDN4eF9waW8gcGlvOwotCX07Ci19OwotCi0vKiBDb250ZXh0IGluZm9ybWF0aW9uIGZvciBhIG5vaXNlIGNhbGN1bGF0aW9uIChMaW5rIFF1YWxpdHkpLiAqLwotc3RydWN0IGJjbTQzeHhfbm9pc2VfY2FsY3VsYXRpb24gewotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpjb3JlX2F0X3N0YXJ0OwotCXU4IGNoYW5uZWxfYXRfc3RhcnQ7Ci0JdTggY2FsY3VsYXRpb25fcnVubmluZzoxOwotCXU4IG5yX3NhbXBsZXM7Ci0Jczggc2FtcGxlc1s4XVs0XTsKLX07Ci0KLXN0cnVjdCBiY200M3h4X3N0YXRzIHsKLQl1OCBub2lzZTsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7Ci0JLyogU3RvcmUgdGhlIGxhc3QgVFgvUlggdGltZXMgaGVyZSBmb3IgdXBkYXRpbmcgdGhlIGxlZHMuICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3R4OwotCXVuc2lnbmVkIGxvbmcgbGFzdF9yeDsKLX07Ci0KLXN0cnVjdCBiY200M3h4X2tleSB7Ci0JdTggZW5hYmxlZDoxOwotCXU4IGFsZ29yaXRobTsKLX07Ci0KLS8qIERyaXZlciBpbml0aWFsaXphdGlvbiBzdGF0dXMuICovCi1lbnVtIHsKLQlCQ000M3h4X1NUQVRfVU5JTklULAkJLyogVW5pbml0aWFsaXplZC4gKi8KLQlCQ000M3h4X1NUQVRfSU5JVElBTElaSU5HLAkvKiBpbml0X2JvYXJkKCkgaW4gcHJvZ3Jlc3MuICovCi0JQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVELAkvKiBGdWxseSBvcGVyYXRpb25hbC4gKi8KLQlCQ000M3h4X1NUQVRfU0hVVFRJTkdET1dOLAkvKiBmcmVlX2JvYXJkKCkgaW4gcHJvZ3Jlc3MuICovCi0JQkNNNDN4eF9TVEFUX1JFU1RBUlRJTkcsCS8qIGNvbnRyb2xsZXJfcmVzdGFydCgpIGNhbGxlZC4gKi8KLX07Ci0jZGVmaW5lIGJjbTQzeHhfc3RhdHVzKGJjbSkJCWF0b21pY19yZWFkKCYoYmNtKS0+aW5pdF9zdGF0dXMpCi0jZGVmaW5lIGJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIHN0YXQpCWRvIHsJCQlcCi0JCWF0b21pY19zZXQoJihiY20pLT5pbml0X3N0YXR1cywgKHN0YXQpKTsJXAotCQlzbXBfd21iKCk7CQkJCQlcCi0JCQkJCX0gd2hpbGUgKDApCi0KLS8qICAgICoqKiBUSEVPUlkgT0YgTE9DS0lORyAqKioKLSAqCi0gKiBXZSBoYXZlIHR3byBkaWZmZXJlbnQgbG9ja3MgaW4gdGhlIGJjbTQzeHggZHJpdmVyLgotICogPT4gYmNtLT5tdXRleDogICAgR2VuZXJhbCBzbGVlcGluZyBtdXRleC4gUHJvdGVjdHMgc3RydWN0IGJjbTQzeHhfcHJpdmF0ZQotICogICAgICAgICAgICAgICAgICAgYW5kIHRoZSBkZXZpY2UgcmVnaXN0ZXJzLiBUaGlzIG11dGV4IGRvZXMgX25vdF8gcHJvdGVjdAotICogICAgICAgICAgICAgICAgICAgYWdhaW5zdCBjb25jdXJyZW5jeSBmcm9tIHRoZSBJUlEgaGFuZGxlci4KLSAqID0+IGJjbS0+aXJxX2xvY2s6IElSUSBzcGlubG9jay4gUHJvdGVjdHMgYWdhaW5zdCBJUlEgaGFuZGxlciBjb25jdXJyZW5jeS4KLSAqCi0gKiBQbGVhc2Ugbm90ZSB0aGF0LCBpZiB5b3Ugb25seSB0YWtlIHRoZSBpcnFfbG9jaywgeW91IGFyZSBub3QgcHJvdGVjdGVkCi0gKiBhZ2FpbnN0IGNvbmN1cnJlbmN5IGZyb20gdGhlIHBlcmlvZGljIHdvcmsgaGFuZGxlcnMuCi0gKiBNb3N0IHRpbWVzIHlvdSB3YW50IHRvIHRha2UgX2JvdGhfIGxvY2tzLgotICovCi0KLXN0cnVjdCBiY200M3h4X3ByaXZhdGUgewotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc29mdG1hYzsKLQotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQl2b2lkIF9faW9tZW0gKm1taW9fYWRkcjsKLQotCXNwaW5sb2NrX3QgaXJxX2xvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JLyogRHJpdmVyIGluaXRpYWxpemF0aW9uIHN0YXR1cyBCQ000M3h4X1NUQVRfKioqICovCi0JYXRvbWljX3QgaW5pdF9zdGF0dXM7Ci0KLQl1MTYgd2FzX2luaXRpYWxpemVkOjEsCQkvKiBmb3IgUENJIHN1c3BlbmQvcmVzdW1lLiAqLwotCSAgICBfX3VzaW5nX3BpbzoxLAkJLyogSW50ZXJuYWwsIHVzZSBiY200M3h4X3VzaW5nX3BpbygpLiAqLwotCSAgICBiYWRfZnJhbWVzX3ByZWVtcHQ6MSwJLyogVXNlICJCYWQgRnJhbWVzIFByZWVtcHRpb24iIChkZWZhdWx0IG9mZikgKi8KLQkgICAgcmVnMTI0X3NldF8weDQ6MSwJCS8qIFNvbWUgdmFyaWFibGUgdG8ga2VlcCB0cmFjayBvZiBJUlEgc3R1ZmYuICovCi0JICAgIHNob3J0X3ByZWFtYmxlOjEsCQkvKiBUUlVFLCBpZiBzaG9ydCBwcmVhbWJsZSBpcyBlbmFibGVkLiAqLwotCSAgICBmaXJtd2FyZV9ub3JlbGVhc2U6MSwJLyogRG8gbm90IHJlbGVhc2UgdGhlIGZpcm13YXJlLiBVc2VkIG9uIHN1c3BlbmQuICovCi0JICAgIHJhZGlvX2h3X2VuYWJsZToxOwkJLyogVFJVRSBpZiByYWRpbyBpcyBoYXJkd2FyZSBlbmFibGVkICovCi0KLQlzdHJ1Y3QgYmNtNDN4eF9zdGF0cyBzdGF0czsKLQotCS8qIEJ1cyB0eXBlIHdlIGFyZSBjb25uZWN0ZWQgdG8uCi0JICogVGhpcyBpcyBjdXJyZW50bHkgYWx3YXlzIEJDTTQzeHhfQlVTVFlQRV9QQ0kKLQkgKi8KLQl1OCBidXN0eXBlOwotCXU2NCBkbWFfbWFzazsKLQotCXUxNiBib2FyZF92ZW5kb3I7Ci0JdTE2IGJvYXJkX3R5cGU7Ci0JdTE2IGJvYXJkX3JldmlzaW9uOwotCi0JdTE2IGNoaXBfaWQ7Ci0JdTggY2hpcF9yZXY7Ci0JdTggY2hpcF9wYWNrYWdlOwotCi0Jc3RydWN0IGJjbTQzeHhfc3Byb21pbmZvIHNwcm9tOwotI2RlZmluZSBCQ000M3h4X05SX0xFRFMJCTQKLQlzdHJ1Y3QgYmNtNDN4eF9sZWQgbGVkc1tCQ000M3h4X05SX0xFRFNdOwotCXNwaW5sb2NrX3QgbGVkc19sb2NrOwotCi0JLyogVGhlIGN1cnJlbnRseSBhY3RpdmUgY29yZS4gKi8KLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqY3VycmVudF9jb3JlOwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICphY3RpdmVfODAyMTFfY29yZTsKLQkvKiBjb3JlaW5mbyBzdHJ1Y3RzIGZvciBhbGwgcG9zc2libGUgY29yZXMgZm9sbG93LgotCSAqIE5vdGUgdGhhdCBhIGNvcmUgbWlnaHQgbm90IGV4aXN0LgotCSAqIFNvIGNoZWNrIHRoZSBjb3JlaW5mbyBmbGFncyBiZWZvcmUgdXNpbmcgaXQuCi0JICovCi0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm8gY29yZV9jaGlwY29tbW9uOwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvIGNvcmVfcGNpOwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvIGNvcmVfODAyMTFbIEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTIF07Ci0JLyogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc3BlY2lmaWMgdG8gdGhlIDgwMjExIGNvcmVzLiAqLwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvXzgwMjExIGNvcmVfODAyMTFfZXh0WyBCQ000M3h4X01BWF84MDIxMV9DT1JFUyBdOwotCS8qIE51bWJlciBvZiBhdmFpbGFibGUgODAyMTEgY29yZXMuICovCi0JaW50IG5yXzgwMjExX2F2YWlsYWJsZTsKLQotCXUzMiBjaGlwY29tbW9uX2NhcGFiaWxpdGllczsKLQotCS8qIFJlYXNvbiBjb2RlIG9mIHRoZSBsYXN0IGludGVycnVwdC4gKi8KLQl1MzIgaXJxX3JlYXNvbjsKLQl1MzIgZG1hX3JlYXNvbls2XTsKLQkvKiBzYXZlZCBpcnEgZW5hYmxlL2Rpc2FibGUgc3RhdGUgYml0ZmllbGQuICovCi0JdTMyIGlycV9zYXZlZHN0YXRlOwotCS8qIExpbmsgUXVhbGl0eSBjYWxjdWxhdGlvbiBjb250ZXh0LiAqLwotCXN0cnVjdCBiY200M3h4X25vaXNlX2NhbGN1bGF0aW9uIG5vaXNlY2FsYzsKLQkvKiBpZiA+IDAgTUFDIGlzIHN1c3BlbmRlZC4gaWYgPT0gMCBNQUMgaXMgZW5hYmxlZC4gKi8KLQlpbnQgbWFjX3N1c3BlbmRlZDsKLQotCS8qIFRocmVzaG9sZCB2YWx1ZXMuICovCi0JLy9UT0RPOiBUaGUgUlRTIHRociBoYXMgdG8gYmUgX3VzZWRfLiBDdXJyZW50bHksIGl0IGlzIG9ubHkgc2V0IHZpYSBXWC4KLQl1MzIgcnRzX3RocmVzaG9sZDsKLQotCS8qIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUgdGFza2xldCAoYm90dG9tLWhhbGYpICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGlzcl90YXNrbGV0OwotCi0JLyogUGVyaW9kaWMgdGFza3MgKi8KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHBlcmlvZGljX3dvcms7Ci0JdW5zaWduZWQgaW50IHBlcmlvZGljX3N0YXRlOwotCi0Jc3RydWN0IHdvcmtfc3RydWN0IHJlc3RhcnRfd29yazsKLQotCS8qIEluZm9ybWF0aW9uYWwgc3R1ZmYuICovCi0JY2hhciBuaWNrW0lXX0VTU0lEX01BWF9TSVpFICsgMV07Ci0KLQkvKiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gKi8KLQl1MTYgc2VjdXJpdHlfb2Zmc2V0OwotCXN0cnVjdCBiY200M3h4X2tleSBrZXlbNTRdOwotCXU4IGRlZmF1bHRfa2V5X2lkeDsKLQotCS8qIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLiAqLwotCXN0cnVjdCBod3JuZyBybmc7Ci0JY2hhciBybmdfbmFtZVsyMCArIDFdOwotCi0JLyogRGVidWdnaW5nIHN0dWZmIGZvbGxvd3MuICovCi0jaWZkZWYgQ09ORklHX0JDTTQzWFhfREVCVUcKLQlzdHJ1Y3QgYmNtNDN4eF9kZnNlbnRyeSAqZGZzZW50cnk7Ci0jZW5kaWYKLX07Ci0KLQotc3RhdGljIGlubGluZQotc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqIGJjbTQzeHhfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiBpZWVlODAyMTFzb2Z0bWFjX3ByaXYoZGV2KTsKLX0KLQotc3RydWN0IGRldmljZTsKLQotc3RhdGljIGlubGluZQotc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqIGRldl90b19iY20oc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbTsKLQotCW5ldF9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQliY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0KLQlyZXR1cm4gYmNtOwotfQotCi0KLS8qIEhlbHBlciBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyBhIGJvb2xlYW4uCi0gKiBUUlVFLCBpZiBQSU8gaXMgdXNlZDsgRkFMU0UsIGlmIERNQSBpcyB1c2VkLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfQkNNNDNYWF9ETUEpICYmIGRlZmluZWQoQ09ORklHX0JDTTQzWFhfUElPKQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfdXNpbmdfcGlvKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlyZXR1cm4gYmNtLT5fX3VzaW5nX3BpbzsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0JDTTQzWFhfRE1BKQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfdXNpbmdfcGlvKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0JDTTQzWFhfUElPKQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfdXNpbmdfcGlvKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlyZXR1cm4gMTsKLX0KLSNlbHNlCi0jIGVycm9yICJVc2luZyBuZWl0aGVyIERNQSBub3IgUElPPyBDb25mdXNlZC4uLiIKLSNlbmRpZgotCi0vKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyBkYXRhIHN0cnVjdHVyZXMgcHJpdmF0ZSB0byB0aGUgODAyMTEgY29yZXMuCi0gKiBOb3RlIHRoYXQgd2UgX211c3RfIGhhdmUgYW4gODAyMTEgY29yZSBtYXBwZWQgd2hlbiBjYWxsaW5nCi0gKiBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLgotICovCi1zdGF0aWMgaW5saW5lCi1zdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mb184MDIxMSAqCi1iY200M3h4X2N1cnJlbnRfODAyMTFfcHJpdihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JYXNzZXJ0KGJjbS0+Y3VycmVudF9jb3JlLT5pZCA9PSBCQ000M3h4X0NPUkVJRF84MDIxMSk7Ci0JcmV0dXJuIGJjbS0+Y3VycmVudF9jb3JlLT5wcml2OwotfQotc3RhdGljIGlubGluZQotc3RydWN0IGJjbTQzeHhfcGlvICogYmNtNDN4eF9jdXJyZW50X3BpbyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JYXNzZXJ0KGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpOwotCXJldHVybiAmKGJjbTQzeHhfY3VycmVudF84MDIxMV9wcml2KGJjbSktPnBpbyk7Ci19Ci1zdGF0aWMgaW5saW5lCi1zdHJ1Y3QgYmNtNDN4eF9kbWEgKiBiY200M3h4X2N1cnJlbnRfZG1hKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlhc3NlcnQoIWJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpOwotCXJldHVybiAmKGJjbTQzeHhfY3VycmVudF84MDIxMV9wcml2KGJjbSktPmRtYSk7Ci19Ci1zdGF0aWMgaW5saW5lCi1zdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICogYmNtNDN4eF9jdXJyZW50X3BoeShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JcmV0dXJuICYoYmNtNDN4eF9jdXJyZW50XzgwMjExX3ByaXYoYmNtKS0+cGh5KTsKLX0KLXN0YXRpYyBpbmxpbmUKLXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqIGJjbTQzeHhfY3VycmVudF9yYWRpbyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JcmV0dXJuICYoYmNtNDN4eF9jdXJyZW50XzgwMjExX3ByaXYoYmNtKS0+cmFkaW8pOwotfQotCi0KLXN0YXRpYyBpbmxpbmUKLXN0cnVjdCBiY200M3h4X2xvcGFpciAqIGJjbTQzeHhfZ2V0X2xvcGFpcihzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHksCi0JCQkJCSAgIHUxNiByYWRpb19hdHRlbnVhdGlvbiwKLQkJCQkJICAgdTE2IGJhc2ViYW5kX2F0dGVudWF0aW9uKQotewotCXJldHVybiBwaHktPl9sb19wYWlycyArIChyYWRpb19hdHRlbnVhdGlvbiArIDE0ICogKGJhc2ViYW5kX2F0dGVudWF0aW9uIC8gMikpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUKLXUxNiBiY200M3h4X3JlYWQxNihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQpCi17Ci0JcmV0dXJuIGlvcmVhZDE2KGJjbS0+bW1pb19hZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X3dyaXRlMTYoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCi17Ci0JaW93cml0ZTE2KHZhbHVlLCBiY20tPm1taW9fYWRkciArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXUzMiBiY200M3h4X3JlYWQzMihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQpCi17Ci0JcmV0dXJuIGlvcmVhZDMyKGJjbS0+bW1pb19hZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X3dyaXRlMzIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCi17Ci0JaW93cml0ZTMyKHZhbHVlLCBiY20tPm1taW9fYWRkciArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLWludCBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzE2KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IG9mZnNldCwgdTE2ICp2YWx1ZSkKLXsKLQlyZXR1cm4gcGNpX3JlYWRfY29uZmlnX3dvcmQoYmNtLT5wY2lfZGV2LCBvZmZzZXQsIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMzIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCBpbnQgb2Zmc2V0LCB1MzIgKnZhbHVlKQotewotCXJldHVybiBwY2lfcmVhZF9jb25maWdfZHdvcmQoYmNtLT5wY2lfZGV2LCBvZmZzZXQsIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfcGNpX3dyaXRlX2NvbmZpZzE2KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IG9mZnNldCwgdTE2IHZhbHVlKQotewotCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX3dvcmQoYmNtLT5wY2lfZGV2LCBvZmZzZXQsIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfcGNpX3dyaXRlX2NvbmZpZzMyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IG9mZnNldCwgdTMyIHZhbHVlKQotewotCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJjbS0+cGNpX2Rldiwgb2Zmc2V0LCB2YWx1ZSk7Ci19Ci0KLS8qKiBMaW1pdCBhIHZhbHVlIGJldHdlZW4gdHdvIGxpbWl0cyAqLwotI2lmZGVmIGxpbWl0X3ZhbHVlCi0jIHVuZGVmIGxpbWl0X3ZhbHVlCi0jZW5kaWYKLSNkZWZpbmUgbGltaXRfdmFsdWUodmFsdWUsIG1pbiwgbWF4KSAgXAotCSh7CQkJCQkJXAotCQl0eXBlb2YodmFsdWUpIF9fdmFsdWUgPSAodmFsdWUpOwlcCi0JIAl0eXBlb2YodmFsdWUpIF9fbWluID0gKG1pbik7CQlcCi0JIAl0eXBlb2YodmFsdWUpIF9fbWF4ID0gKG1heCk7CQlcCi0JIAlpZiAoX192YWx1ZSA8IF9fbWluKQkJCVwKLQkgCQlfX3ZhbHVlID0gX19taW47CQlcCi0JIAllbHNlIGlmIChfX3ZhbHVlID4gX19tYXgpCQlcCi0JIAkJX192YWx1ZSA9IF9fbWF4OwkJXAotCSAJX192YWx1ZTsJCQkJXAotCX0pCi0KLSNlbmRpZiAvKiBCQ000M3h4X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZlOWRkOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTU2ICswLDAgQEAKLS8qCi0KLSAgQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIKLQotICBkZWJ1Z2ZzIGRyaXZlciBkZWJ1Z2dpbmcgY29kZQotCi0gIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLQotCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAiYmNtNDN4eC5oIgotI2luY2x1ZGUgImJjbTQzeHhfbWFpbi5oIgotI2luY2x1ZGUgImJjbTQzeHhfZGVidWdmcy5oIgotI2luY2x1ZGUgImJjbTQzeHhfZG1hLmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9waW8uaCIKLSNpbmNsdWRlICJiY200M3h4X3htaXQuaCIKLQotI2RlZmluZSBSRUFMTFlfQklHX0JVRkZFUl9TSVpFCSgxMDI0KjI1NikKLQotc3RhdGljIHN0cnVjdCBiY200M3h4X2RlYnVnZnMgZnM7Ci1zdGF0aWMgY2hhciByZWFsbHlfYmlnX2J1ZmZlcltSRUFMTFlfQklHX0JVRkZFUl9TSVpFXTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGJpZ19idWZmZXJfc2VtKTsKLQotCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX2R1bW15KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBvcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIGZhcHBlbmQoZm10LCB4Li4uKQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBsZW4gLSBwb3MsIGZtdCAsICMjeCkKLQotc3RhdGljIHNzaXplX3QgZGV2aW5mb19yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljb25zdCBzaXplX3QgbGVuID0gUkVBTExZX0JJR19CVUZGRVJfU0laRTsKLQotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpidWYgPSByZWFsbHlfYmlnX2J1ZmZlcjsKLQlzaXplX3QgcG9zID0gMDsKLQlzc2l6ZV90IHJlczsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUxNiB0bXAxNjsKLQlpbnQgaTsKLQotCWRvd24oJmJpZ19idWZmZXJfc2VtKTsKLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7Ci0JCWZhcHBlbmQoIkJvYXJkIG5vdCBpbml0aWFsaXplZC5cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JbmV0X2RldiA9IGJjbS0+bmV0X2RldjsKLQlwY2lfZGV2ID0gYmNtLT5wY2lfZGV2OwotCi0JLyogVGhpcyBpcyB3aGVyZSB0aGUgaW5mb3JtYXRpb24gaXMgd3JpdHRlbiB0byB0aGUgImRldmluZm8iIGZpbGUgKi8KLQlmYXBwZW5kKCIqKiogJXMgZGV2aW5mbyAqKipcbiIsIG5ldF9kZXYtPm5hbWUpOwotCWZhcHBlbmQoInZlbmRvcjogICAgICAgICAgIDB4JTA0eCAgIGRldmljZTogICAgICAgICAgIDB4JTA0eFxuIiwKLQkJcGNpX2Rldi0+dmVuZG9yLCBwY2lfZGV2LT5kZXZpY2UpOwotCWZhcHBlbmQoInN1YnN5c3RlbV92ZW5kb3I6IDB4JTA0eCAgIHN1YnN5c3RlbV9kZXZpY2U6IDB4JTA0eFxuIiwKLQkJcGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSk7Ci0JZmFwcGVuZCgiSVJROiAlZFxuIiwgYmNtLT5pcnEpOwotCWZhcHBlbmQoIm1taW9fYWRkcjogMHglcFxuIiwgYmNtLT5tbWlvX2FkZHIpOwotCWZhcHBlbmQoImNoaXBfaWQ6IDB4JTA0eCAgIGNoaXBfcmV2OiAweCUwMnhcbiIsIGJjbS0+Y2hpcF9pZCwgYmNtLT5jaGlwX3Jldik7Ci0JaWYgKChiY20tPmNvcmVfODAyMTFbMF0ucmV2ID49IDMpICYmIChiY200M3h4X3JlYWQzMihiY20sIDB4MDE1OCkgJiAoMSA8PCAxNikpKQotCQlmYXBwZW5kKCJSYWRpbyBkaXNhYmxlZCBieSBoYXJkd2FyZSFcbiIpOwotCWlmICgoYmNtLT5jb3JlXzgwMjExWzBdLnJldiA8IDMpICYmICEoYmNtNDN4eF9yZWFkMTYoYmNtLCAweDA0OUEpICYgKDEgPDwgNCkpKQotCQlmYXBwZW5kKCJSYWRpbyBkaXNhYmxlZCBieSBoYXJkd2FyZSFcbiIpOwotCWZhcHBlbmQoImJvYXJkX3ZlbmRvcjogMHglMDR4ICAgYm9hcmRfdHlwZTogMHglMDR4XG4iLCBiY20tPmJvYXJkX3ZlbmRvciwKLQkgICAgICAgIGJjbS0+Ym9hcmRfdHlwZSk7Ci0KLQlmYXBwZW5kKCJcbkNvcmVzOlxuIik7Ci0jZGVmaW5lIGZhcHBlbmRfY29yZShuYW1lLCBpbmZvKSBmYXBwZW5kKCJjb3JlIFwiIiBuYW1lICJcIiAlcywgJXMsIGlkOiAweCUwNHgsICIJXAotCQkJCQkgInJldjogMHglMDJ4LCBpbmRleDogMHglMDJ4XG4iLAkJXAotCQkJCQkgKGluZm8pLmF2YWlsYWJsZQkJCQlcCi0JCQkJCQk/ICJhdmFpbGFibGUiIDogIm5vbmF2YWlsYWJsZSIsCQlcCi0JCQkJCSAoaW5mbykuZW5hYmxlZAkJCQkJXAotCQkJCQkJPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAkJXAotCQkJCQkgKGluZm8pLmlkLCAoaW5mbykucmV2LCAoaW5mbykuaW5kZXgpCi0JZmFwcGVuZF9jb3JlKCJDSElQQ09NTU9OIiwgYmNtLT5jb3JlX2NoaXBjb21tb24pOwotCWZhcHBlbmRfY29yZSgiUENJIiwgYmNtLT5jb3JlX3BjaSk7Ci0JZmFwcGVuZF9jb3JlKCJmaXJzdCA4MDIxMSIsIGJjbS0+Y29yZV84MDIxMVswXSk7Ci0JZmFwcGVuZF9jb3JlKCJzZWNvbmQgODAyMTEiLCBiY20tPmNvcmVfODAyMTFbMV0pOwotI3VuZGVmIGZhcHBlbmRfY29yZQotCXRtcDE2ID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fR1BJT19DT05UUk9MKTsKLQlmYXBwZW5kKCJMRURzOiAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9OUl9MRURTOyBpKyspCi0JCWZhcHBlbmQoIiVkICIsICEhKHRtcDE2ICYgKDEgPDwgaSkpKTsKLQlmYXBwZW5kKCJcbiIpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0JcmVzID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQl1cCgmYmlnX2J1ZmZlcl9zZW0pOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGRydmluZm9fcmVhZF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKLQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY29uc3Qgc2l6ZV90IGxlbiA9IFJFQUxMWV9CSUdfQlVGRkVSX1NJWkU7Ci0KLQljaGFyICpidWYgPSByZWFsbHlfYmlnX2J1ZmZlcjsKLQlzaXplX3QgcG9zID0gMDsKLQlzc2l6ZV90IHJlczsKLQotCWRvd24oJmJpZ19idWZmZXJfc2VtKTsKLQotCS8qIFRoaXMgaXMgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlICJkcml2ZXIiIGZpbGUgKi8KLQlmYXBwZW5kKEtCVUlMRF9NT0ROQU1FICIgZHJpdmVyXG4iKTsKLQlmYXBwZW5kKCJDb21waWxlZCBhdDogJXMgJXNcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7Ci0KLQlyZXMgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCXVwKCZiaWdfYnVmZmVyX3NlbSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3Byb21kdW1wX3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNvbnN0IHNpemVfdCBsZW4gPSBSRUFMTFlfQklHX0JVRkZFUl9TSVpFOwotCi0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZiA9IHJlYWxseV9iaWdfYnVmZmVyOwotCXNpemVfdCBwb3MgPSAwOwotCXNzaXplX3QgcmVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkb3duKCZiaWdfYnVmZmVyX3NlbSk7Ci0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSAhPSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpIHsKLQkJZmFwcGVuZCgiQm9hcmQgbm90IGluaXRpYWxpemVkLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFRoaXMgaXMgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlICJzcHJvbV9kdW1wIiBmaWxlICovCi0JZmFwcGVuZCgiYm9hcmRmbGFnczogMHglMDR4XG4iLCBiY20tPnNwcm9tLmJvYXJkZmxhZ3MpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0JcmVzID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQl1cCgmYmlnX2J1ZmZlcl9zZW0pOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRzZl9yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljb25zdCBzaXplX3QgbGVuID0gUkVBTExZX0JJR19CVUZGRVJfU0laRTsKLQotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpidWYgPSByZWFsbHlfYmlnX2J1ZmZlcjsKLQlzaXplX3QgcG9zID0gMDsKLQlzc2l6ZV90IHJlczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU2NCB0c2Y7Ci0KLQlkb3duKCZiaWdfYnVmZmVyX3NlbSk7Ci0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSAhPSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpIHsKLQkJZmFwcGVuZCgiQm9hcmQgbm90IGluaXRpYWxpemVkLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQliY200M3h4X3RzZl9yZWFkKGJjbSwgJnRzZik7Ci0JZmFwcGVuZCgiMHglMDh4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludCkoKHRzZiAmIDB4RkZGRkZGRkYwMDAwMDAwMFVMTCkgPj4gMzIpLAotCQkodW5zaWduZWQgaW50KSh0c2YgJiAweEZGRkZGRkZGVUxMKSk7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQlyZXMgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCXVwKCZiaWdfYnVmZmVyX3NlbSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHNzaXplX3QgdHNmX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpidWYgPSByZWFsbHlfYmlnX2J1ZmZlcjsKLQlzc2l6ZV90IGJ1Zl9zaXplOwotCXNzaXplX3QgcmVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRzZjsKLQotCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YgKHJlYWxseV9iaWdfYnVmZmVyKSAtIDEpOwotCWRvd24oJmJpZ19idWZmZXJfc2VtKTsKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKSB7Ci0JICAgICAgICByZXMgPSAtRUZBVUxUOwotCQlnb3RvIG91dF91cDsKLQl9Ci0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSAhPSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImRlYnVnZnM6IEJvYXJkIG5vdCBpbml0aWFsaXplZC5cbiIpOwotCQlyZXMgPSAtRUZBVUxUOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCWlmIChzc2NhbmYoYnVmLCAiJWxsaSIsICZ0c2YpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImRlYnVnZnM6IGludmFsaWQgdmFsdWVzIGZvciBcInRzZlwiXG4iKTsKLQkJcmVzID0gLUVJTlZBTDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQliY200M3h4X3RzZl93cml0ZShiY20sIHRzZik7Ci0JbW1pb3diKCk7Ci0JcmVzID0gYnVmX3NpemU7Ci0JCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotb3V0X3VwOgotCXVwKCZiaWdfYnVmZmVyX3NlbSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHNzaXplX3QgdHhzdGF0X3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY29uc3Qgc2l6ZV90IGxlbiA9IFJFQUxMWV9CSUdfQlVGRkVSX1NJWkU7Ci0KLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqYnVmID0gcmVhbGx5X2JpZ19idWZmZXI7Ci0Jc2l6ZV90IHBvcyA9IDA7Ci0Jc3NpemVfdCByZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYmNtNDN4eF9kZnNlbnRyeSAqZTsKLQlzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzICpzdGF0dXM7Ci0JaW50IGksIGNudCwgaiA9IDA7Ci0KLQlkb3duKCZiaWdfYnVmZmVyX3NlbSk7Ci0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCWZhcHBlbmQoIkxhc3QgJWQgbG9nZ2VkIHhtaXRzdGF0dXMgYmxvYnMgKExhdGVzdCBmaXJzdCk6XG5cbiIsCi0JCUJDTTQzeHhfTlJfTE9HR0VEX1hNSVRTVEFUVVMpOwotCWUgPSBiY20tPmRmc2VudHJ5OwotCWlmIChlLT54bWl0c3RhdHVzX3ByaW50aW5nID09IDApIHsKLQkJLyogQXQgdGhlIGJlZ2lubmluZywgbWFrZSBhIGNvcHkgb2YgYWxsIGRhdGEgdG8gYXZvaWQKLQkJICogY29uY3VycmVuY3ksIGFzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG11bHRpcGxlCi0JCSAqIHRpbWVzIGZvciBiaWcgbG9ncy4gV2l0aG91dCBjb3B5aW5nLCB0aGUgZGF0YSBtaWdodAotCQkgKiBjaGFuZ2UgYmV0d2VlbiByZWFkcy4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdG90YWwgdHJhc2guCi0JCSAqLwotCQllLT54bWl0c3RhdHVzX3ByaW50aW5nID0gMTsKLQkJZS0+c2F2ZWRfeG1pdHN0YXR1c19wdHIgPSBlLT54bWl0c3RhdHVzX3B0cjsKLQkJZS0+c2F2ZWRfeG1pdHN0YXR1c19jbnQgPSBlLT54bWl0c3RhdHVzX2NudDsKLQkJbWVtY3B5KGUtPnhtaXRzdGF0dXNfcHJpbnRfYnVmZmVyLCBlLT54bWl0c3RhdHVzX2J1ZmZlciwKLQkJICAgICAgIEJDTTQzeHhfTlJfTE9HR0VEX1hNSVRTVEFUVVMgKiBzaXplb2YoKihlLT54bWl0c3RhdHVzX2J1ZmZlcikpKTsKLQl9Ci0JaSA9IGUtPnNhdmVkX3htaXRzdGF0dXNfcHRyIC0gMTsKLQlpZiAoaSA8IDApCi0JCWkgPSBCQ000M3h4X05SX0xPR0dFRF9YTUlUU1RBVFVTIC0gMTsKLQljbnQgPSBlLT5zYXZlZF94bWl0c3RhdHVzX2NudDsKLQl3aGlsZSAoY250KSB7Ci0JCXN0YXR1cyA9IGUtPnhtaXRzdGF0dXNfcHJpbnRfYnVmZmVyICsgaTsKLQkJZmFwcGVuZCgiMHglMDJ4OiAgIGNvb2tpZTogMHglMDR4LCAgZmxhZ3M6IDB4JTAyeCwgICIKLQkJCSJjbnQxOiAweCUwMngsICBjbnQyOiAweCUwMngsICBzZXE6IDB4JTA0eCwgICIKLQkJCSJ1bms6IDB4JTA0eFxuIiwgaiwKLQkJCXN0YXR1cy0+Y29va2llLCBzdGF0dXMtPmZsYWdzLAotCQkJc3RhdHVzLT5jbnQxLCBzdGF0dXMtPmNudDIsIHN0YXR1cy0+c2VxLAotCQkJc3RhdHVzLT51bmtub3duKTsKLQkJaisrOwotCQljbnQtLTsKLQkJaS0tOwotCQlpZiAoaSA8IDApCi0JCQlpID0gQkNNNDN4eF9OUl9MT0dHRURfWE1JVFNUQVRVUyAtIDE7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCXJlcyA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAoKnBwb3MgPT0gcG9zKSB7Ci0JCS8qIERvbmUuIERyb3AgdGhlIGNvcGllZCBkYXRhLiAqLwotCQllLT54bWl0c3RhdHVzX3ByaW50aW5nID0gMDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0JdXAoJmJpZ19idWZmZXJfc2VtKTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgc3NpemVfdCByZXN0YXJ0X3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpidWYgPSByZWFsbHlfYmlnX2J1ZmZlcjsKLQlzc2l6ZV90IGJ1Zl9zaXplOwotCXNzaXplX3QgcmVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mIChyZWFsbHlfYmlnX2J1ZmZlcikgLSAxKTsKLQlkb3duKCZiaWdfYnVmZmVyX3NlbSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkgewotCSAgICAgICAgcmVzID0gLUVGQVVMVDsKLQkJZ290byBvdXRfdXA7Ci0JfQotCW11dGV4X2xvY2soJihiY20pLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJihiY20pLT5pcnFfbG9jaywgZmxhZ3MpOwotCWlmIChiY200M3h4X3N0YXR1cyhiY20pICE9IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZGVidWdmczogQm9hcmQgbm90IGluaXRpYWxpemVkLlxuIik7Ci0JCXJlcyA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0JaWYgKGNvdW50ID4gMCAmJiBidWZbMF0gPT0gJzEnKSB7Ci0JCWJjbTQzeHhfY29udHJvbGxlcl9yZXN0YXJ0KGJjbSwgIm1hbnVhbGx5IHJlc3RhcnRlZCIpOwotCQlyZXMgPSBjb3VudDsKLQl9IGVsc2UKLQkJcmVzID0gLUVJTlZBTDsKLQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoYmNtKS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJihiY20pLT5tdXRleCk7Ci1vdXRfdXA6Ci0JdXAoJmJpZ19idWZmZXJfc2VtKTsKLQlyZXR1cm4gcmVzOwotfQotCi0jdW5kZWYgZmFwcGVuZAotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldmluZm9fZm9wcyA9IHsKLQkucmVhZCA9IGRldmluZm9fcmVhZF9maWxlLAotCS53cml0ZSA9IHdyaXRlX2ZpbGVfZHVtbXksCi0JLm9wZW4gPSBvcGVuX2ZpbGVfZ2VuZXJpYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwcm9tZHVtcF9mb3BzID0gewotCS5yZWFkID0gc3Byb21kdW1wX3JlYWRfZmlsZSwKLQkud3JpdGUgPSB3cml0ZV9maWxlX2R1bW15LAotCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcnZpbmZvX2ZvcHMgPSB7Ci0JLnJlYWQgPSBkcnZpbmZvX3JlYWRfZmlsZSwKLQkud3JpdGUgPSB3cml0ZV9maWxlX2R1bW15LAotCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0c2ZfZm9wcyA9IHsKLQkucmVhZCA9IHRzZl9yZWFkX2ZpbGUsCi0JLndyaXRlID0gdHNmX3dyaXRlX2ZpbGUsCi0JLm9wZW4gPSBvcGVuX2ZpbGVfZ2VuZXJpYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR4c3RhdF9mb3BzID0gewotCS5yZWFkID0gdHhzdGF0X3JlYWRfZmlsZSwKLQkud3JpdGUgPSB3cml0ZV9maWxlX2R1bW15LAotCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXN0YXJ0X2ZvcHMgPSB7Ci0JLndyaXRlID0gcmVzdGFydF93cml0ZV9maWxlLAotCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCi19OwotCi0KLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX2FkZF9kZXZpY2Uoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X2Rmc2VudHJ5ICplOwotCWNoYXIgZGV2ZGlyW0lGTkFNU0laXTsKLQotCWFzc2VydChiY20pOwotCWUgPSBremFsbG9jKHNpemVvZigqZSksIEdGUF9LRVJORUwpOwotCWlmICghZSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQllLT5iY20gPSBiY207Ci0JZS0+eG1pdHN0YXR1c19idWZmZXIgPSBremFsbG9jKEJDTTQzeHhfTlJfTE9HR0VEX1hNSVRTVEFUVVMKLQkJCQkgICAgICAgKiBzaXplb2YoKihlLT54bWl0c3RhdHVzX2J1ZmZlcikpLAotCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWUtPnhtaXRzdGF0dXNfYnVmZmVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIm91dCBvZiBtZW1vcnlcbiIpOwotCQlrZnJlZShlKTsKLQkJcmV0dXJuOwotCX0KLQllLT54bWl0c3RhdHVzX3ByaW50X2J1ZmZlciA9IGt6YWxsb2MoQkNNNDN4eF9OUl9MT0dHRURfWE1JVFNUQVRVUwotCQkJCQkgICAgICogc2l6ZW9mKCooZS0+eG1pdHN0YXR1c19idWZmZXIpKSwKLQkJCQkJICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWUtPnhtaXRzdGF0dXNfcHJpbnRfYnVmZmVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIm91dCBvZiBtZW1vcnlcbiIpOwotCQlrZnJlZShlKTsKLQkJcmV0dXJuOwotCX0KLQotCi0JYmNtLT5kZnNlbnRyeSA9IGU7Ci0KLQlzdHJuY3B5KGRldmRpciwgYmNtLT5uZXRfZGV2LT5uYW1lLCBBUlJBWV9TSVpFKGRldmRpcikpOwotCWUtPnN1YmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZkaXIsIGZzLnJvb3QpOwotCWUtPmRlbnRyeV9kZXZpbmZvID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGV2aW5mbyIsIDA0NDQsIGUtPnN1YmRpciwKLQkJCQkJCWJjbSwgJmRldmluZm9fZm9wcyk7Ci0JaWYgKCFlLT5kZW50cnlfZGV2aW5mbykKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZGVidWdmczogY3JlYXRpbmcgXCJkZXZpbmZvXCIgZm9yIFwiJXNcIiBmYWlsZWQhXG4iLCBkZXZkaXIpOwotCWUtPmRlbnRyeV9zcHJvbWR1bXAgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzcHJvbV9kdW1wIiwgMDQ0NCwgZS0+c3ViZGlyLAotCQkJCQkJICBiY20sICZzcHJvbWR1bXBfZm9wcyk7Ci0JaWYgKCFlLT5kZW50cnlfc3Byb21kdW1wKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJkZWJ1Z2ZzOiBjcmVhdGluZyBcInNwcm9tX2R1bXBcIiBmb3IgXCIlc1wiIGZhaWxlZCFcbiIsIGRldmRpcik7Ci0JZS0+ZGVudHJ5X3RzZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRzZiIsIDA2NjYsIGUtPnN1YmRpciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiY20sICZ0c2ZfZm9wcyk7Ci0JaWYgKCFlLT5kZW50cnlfdHNmKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJkZWJ1Z2ZzOiBjcmVhdGluZyBcInRzZlwiIGZvciBcIiVzXCIgZmFpbGVkIVxuIiwgZGV2ZGlyKTsKLQllLT5kZW50cnlfdHhzdGF0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHhfc3RhdHVzIiwgMDQ0NCwgZS0+c3ViZGlyLAotCQkJCQkJYmNtLCAmdHhzdGF0X2ZvcHMpOwotCWlmICghZS0+ZGVudHJ5X3R4c3RhdCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZGVidWdmczogY3JlYXRpbmcgXCJ0eF9zdGF0dXNcIiBmb3IgXCIlc1wiIGZhaWxlZCFcbiIsIGRldmRpcik7Ci0JZS0+ZGVudHJ5X3Jlc3RhcnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZXN0YXJ0IiwgMDIyMiwgZS0+c3ViZGlyLAotCQkJCQkJYmNtLCAmcmVzdGFydF9mb3BzKTsKLQlpZiAoIWUtPmRlbnRyeV9yZXN0YXJ0KQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJkZWJ1Z2ZzOiBjcmVhdGluZyBcInJlc3RhcnRcIiBmb3IgXCIlc1wiIGZhaWxlZCFcbiIsIGRldmRpcik7Ci19Ci0KLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X2Rmc2VudHJ5ICplOwotCi0JaWYgKCFiY20pCi0JCXJldHVybjsKLQotCWUgPSBiY20tPmRmc2VudHJ5OwotCWFzc2VydChlKTsKLQlkZWJ1Z2ZzX3JlbW92ZShlLT5kZW50cnlfc3Byb21kdW1wKTsKLQlkZWJ1Z2ZzX3JlbW92ZShlLT5kZW50cnlfZGV2aW5mbyk7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZGVudHJ5X3RzZik7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZGVudHJ5X3R4c3RhdCk7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZGVudHJ5X3Jlc3RhcnQpOwotCWRlYnVnZnNfcmVtb3ZlKGUtPnN1YmRpcik7Ci0Ja2ZyZWUoZS0+eG1pdHN0YXR1c19idWZmZXIpOwotCWtmcmVlKGUtPnhtaXRzdGF0dXNfcHJpbnRfYnVmZmVyKTsKLQlrZnJlZShlKTsKLX0KLQotdm9pZCBiY200M3h4X2RlYnVnZnNfbG9nX3R4c3RhdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJc3RydWN0IGJjbTQzeHhfeG1pdHN0YXR1cyAqc3RhdHVzKQotewotCXN0cnVjdCBiY200M3h4X2Rmc2VudHJ5ICplOwotCXN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnNhdmVkc3RhdHVzOwotCi0JLyogVGhpcyBpcyBwcm90ZWN0ZWQgYnkgYmNtLT5fbG9jayAqLwotCWUgPSBiY20tPmRmc2VudHJ5OwotCWFzc2VydChlKTsKLQlzYXZlZHN0YXR1cyA9IGUtPnhtaXRzdGF0dXNfYnVmZmVyICsgZS0+eG1pdHN0YXR1c19wdHI7Ci0JbWVtY3B5KHNhdmVkc3RhdHVzLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7Ci0JZS0+eG1pdHN0YXR1c19wdHIrKzsKLQlpZiAoZS0+eG1pdHN0YXR1c19wdHIgPj0gQkNNNDN4eF9OUl9MT0dHRURfWE1JVFNUQVRVUykKLQkJZS0+eG1pdHN0YXR1c19wdHIgPSAwOwotCWlmIChlLT54bWl0c3RhdHVzX2NudCA8IEJDTTQzeHhfTlJfTE9HR0VEX1hNSVRTVEFUVVMpCi0JCWUtPnhtaXRzdGF0dXNfY250Kys7Ci19Ci0KLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX2luaXQodm9pZCkKLXsKLQltZW1zZXQoJmZzLCAwLCBzaXplb2YoZnMpKTsKLQlmcy5yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLCBOVUxMKTsKLQlpZiAoIWZzLnJvb3QpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggImRlYnVnZnM6IGNyZWF0aW5nIFwiIiBLQlVJTERfTU9ETkFNRSAiXCIgc3ViZGlyIGZhaWxlZCFcbiIpOwotCWZzLmRlbnRyeV9kcml2ZXJpbmZvID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZHJpdmVyIiwgMDQ0NCwgZnMucm9vdCwgTlVMTCwgJmRydmluZm9fZm9wcyk7Ci0JaWYgKCFmcy5kZW50cnlfZHJpdmVyaW5mbykKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZGVidWdmczogY3JlYXRpbmcgXCIiIEtCVUlMRF9NT0ROQU1FICIvZHJpdmVyXCIgZmFpbGVkIVxuIik7Ci19Ci0KLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX2V4aXQodm9pZCkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShmcy5kZW50cnlfZHJpdmVyaW5mbyk7Ci0JZGVidWdmc19yZW1vdmUoZnMucm9vdCk7Ci19Ci0KLXZvaWQgYmNtNDN4eF9wcmludGtfZHVtcChjb25zdCBjaGFyICpkYXRhLAotCQkJIHNpemVfdCBzaXplLAotCQkJIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQotewotCXNpemVfdCBpOwotCWNoYXIgYzsKLQotCXByaW50ayhLRVJOX0lORk8gUEZYICJEYXRhIGR1bXAgKCVzLCAlemQgYnl0ZXMpOiIsCi0JICAgICAgIGRlc2NyaXB0aW9uLCBzaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWMgPSBkYXRhW2ldOwotCQlpZiAoaSAlIDggPT0gMCkKLQkJCXByaW50aygiXG4iIEtFUk5fSU5GTyBQRlggIjB4JTA4eng6ICAweCUwMngsICIsIGksIGMgJiAweGZmKTsKLQkJZWxzZQotCQkJcHJpbnRrKCIweCUwMngsICIsIGMgJiAweGZmKTsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotfQotCi12b2lkIGJjbTQzeHhfcHJpbnRrX2JpdGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKLQkJCSAgICBzaXplX3QgYnl0ZXMsIGludCBtc2JfdG9fbHNiLAotCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQotewotCXNpemVfdCBpOwotCWludCBqOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiKioqIEJpdGR1bXAgKCVzLCAlemQgYnl0ZXMsICVzKSAqKioiLAotCSAgICAgICBkZXNjcmlwdGlvbiwgYnl0ZXMsIG1zYl90b19sc2IgPyAiTVNCIHRvIExTQiIgOiAiTFNCIHRvIE1TQiIpOwotCWZvciAoaSA9IDA7IGkgPCBieXRlczsgaSsrKSB7Ci0JCWQgPSBkYXRhICsgaTsKLQkJaWYgKGkgJSA4ID09IDApCi0JCQlwcmludGsoIlxuIiBLRVJOX0lORk8gUEZYICIweCUwOHp4OiAgIiwgaSk7Ci0JCWlmIChtc2JfdG9fbHNiKSB7Ci0JCQlmb3IgKGogPSA3OyBqID49IDA7IGotLSkgewotCQkJCWlmICgqZCAmICgxIDw8IGopKQotCQkJCQlwcmludGsoIjEiKTsKLQkJCQllbHNlCi0JCQkJCXByaW50aygiMCIpOwotCQkJfQotCQl9IGVsc2UgewotCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewotCQkJCWlmICgqZCAmICgxIDw8IGopKQotCQkJCQlwcmludGsoIjEiKTsKLQkJCQllbHNlCi0JCQkJCXByaW50aygiMCIpOwotCQkJfQotCQl9Ci0JCXByaW50aygiICIpOwotCX0KLQlwcmludGsoIlxuIik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQwZDFhZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLSNpZm5kZWYgQkNNNDN4eF9ERUJVR0ZTX0hfCi0jZGVmaW5lIEJDTTQzeHhfREVCVUdGU19IXwotCi1zdHJ1Y3QgYmNtNDN4eF9wcml2YXRlOwotc3RydWN0IGJjbTQzeHhfeG1pdHN0YXR1czsKLQotI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCi1zdHJ1Y3QgZGVudHJ5OwotCi0vKiBsaW1pdGVkIGJ5IHRoZSBzaXplIG9mIHRoZSAicmVhbGx5X2JpZ19idWZmZXIiICovCi0jZGVmaW5lIEJDTTQzeHhfTlJfTE9HR0VEX1hNSVRTVEFUVVMJMTAwCi0KLXN0cnVjdCBiY200M3h4X2Rmc2VudHJ5IHsKLQlzdHJ1Y3QgZGVudHJ5ICpzdWJkaXI7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5X2RldmluZm87Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5X3Nwcm9tZHVtcDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfdHNmOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeV90eHN0YXQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5X3Jlc3RhcnQ7Ci0KLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY207Ci0KLQkvKiBzYXZlZCB4bWl0c3RhdHVzLiAqLwotCXN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnhtaXRzdGF0dXNfYnVmZmVyOwotCWludCB4bWl0c3RhdHVzX3B0cjsKLQlpbnQgeG1pdHN0YXR1c19jbnQ7Ci0JLyogV2UgbmVlZCBhIHNlcGVyYXRlIGJ1ZmZlciB3aGlsZSBwcmludGluZyB0byBhdm9pZAotCSAqIGNvbmN1cnJlbmN5IGlzc3Vlcy4gKE5ldyB4bWl0c3RhdHVzIGNhbiBhcnJpdmUKLQkgKiB3aGlsZSB3ZSBhcmUgcHJpbnRpbmcpLgotCSAqLwotCXN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnhtaXRzdGF0dXNfcHJpbnRfYnVmZmVyOwotCWludCBzYXZlZF94bWl0c3RhdHVzX3B0cjsKLQlpbnQgc2F2ZWRfeG1pdHN0YXR1c19jbnQ7Ci0JaW50IHhtaXRzdGF0dXNfcHJpbnRpbmc7Ci19OwotCi1zdHJ1Y3QgYmNtNDN4eF9kZWJ1Z2ZzIHsKLQlzdHJ1Y3QgZGVudHJ5ICpyb290OwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeV9kcml2ZXJpbmZvOwotfTsKLQotdm9pZCBiY200M3h4X2RlYnVnZnNfaW5pdCh2b2lkKTsKLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX2V4aXQodm9pZCk7Ci12b2lkIGJjbTQzeHhfZGVidWdmc19hZGRfZGV2aWNlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci12b2lkIGJjbTQzeHhfZGVidWdmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci12b2lkIGJjbTQzeHhfZGVidWdmc19sb2dfdHhzdGF0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQlzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzICpzdGF0dXMpOwotCi0vKiBEZWJ1ZyBoZWxwZXI6IER1bXAgYmluYXJ5IGRhdGEgdGhyb3VnaCBwcmludGsuICovCi12b2lkIGJjbTQzeHhfcHJpbnRrX2R1bXAoY29uc3QgY2hhciAqZGF0YSwKLQkJCSBzaXplX3Qgc2l6ZSwKLQkJCSBjb25zdCBjaGFyICpkZXNjcmlwdGlvbik7Ci0vKiBEZWJ1ZyBoZWxwZXI6IER1bXAgYml0d2lzZSBiaW5hcnkgZGF0YSB0aHJvdWdoIHByaW50ay4gKi8KLXZvaWQgYmNtNDN4eF9wcmludGtfYml0ZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAotCQkJICAgIHNpemVfdCBieXRlcywgaW50IG1zYl90b19sc2IsCi0JCQkgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOwotI2RlZmluZSBiY200M3h4X3ByaW50a19iaXRkdW1wdChwb2ludGVyLCBtc2JfdG9fbHNiLCBkZXNjcmlwdGlvbikgXAotCWRvIHsJCQkJCQkJCQlcCi0JCWJjbTQzeHhfcHJpbnRrX2JpdGR1bXAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikocG9pbnRlciksCVwKLQkJCQkgICAgICAgc2l6ZW9mKCoocG9pbnRlcikpLAkJCVwKLQkJCQkgICAgICAgKG1zYl90b19sc2IpLAkJCQlcCi0JCQkJICAgICAgIChkZXNjcmlwdGlvbikpOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2Vsc2UgLyogQ09ORklHX0JDTTQzWFhfREVCVUcqLwotCi1zdGF0aWMgaW5saW5lCi12b2lkIGJjbTQzeHhfZGVidWdmc19pbml0KHZvaWQpIHsgfQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X2RlYnVnZnNfZXhpdCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX2FkZF9kZXZpY2Uoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKSB7IH0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKSB7IH0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9kZWJ1Z2ZzX2xvZ190eHN0YXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCXN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnN0YXR1cykgeyB9Ci0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9wcmludGtfZHVtcChjb25zdCBjaGFyICpkYXRhLAotCQkJIHNpemVfdCBzaXplLAotCQkJIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQotewotfQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X3ByaW50a19iaXRkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0JCQkgICAgc2l6ZV90IGJ5dGVzLCBpbnQgbXNiX3RvX2xzYiwKLQkJCSAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbikKLXsKLX0KLSNkZWZpbmUgYmNtNDN4eF9wcmludGtfYml0ZHVtcHQocG9pbnRlciwgbXNiX3RvX2xzYiwgZGVzY3JpcHRpb24pICBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX0RFQlVHKi8KLQotLyogVWdseSBoZWxwZXIgbWFjcm9zIHRvIG1ha2UgaW5jb21wbGV0ZSBjb2RlIG1vcmUgdmVyYm9zZSBvbiBydW50aW1lICovCi0jaWZkZWYgVE9ETwotIyB1bmRlZiBUT0RPCi0jZW5kaWYKLSNkZWZpbmUgVE9ETygpICBcCi0JZG8gewkJCQkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJUT0RPOiBJbmNvbXBsZXRlIGNvZGUgaW4gJXMoKSBhdCAlczolZFxuIiwJXAotCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2lmZGVmIEZJWE1FCi0jIHVuZGVmIEZJWE1FCi0jZW5kaWYKLSNkZWZpbmUgRklYTUUoKSAgXAotCWRvIHsJCQkJCQkJCQkJXAotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRklYTUU6IFBvc3NpYmx5IGJyb2tlbiBjb2RlIGluICVzKCkgYXQgJXM6JWRcbiIsCVwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBCQ000M3h4X0RFQlVHRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY3NzMxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYzICswLDAgQEAKLS8qCi0KLSAgQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIKLQotICBETUEgcmluZ2J1ZmZlciBhbmQgZGVzY3JpcHRvciBhbGxvY2F0aW9uL21hbmFnZW1lbnQKLQotICBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLQotICBTb21lIGNvZGUgaW4gdGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSB0aGUgYjQ0LmMgZHJpdmVyCi0gIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBTLiBNaWxsZXIKLSAgQ29weXJpZ2h0IChDKSBQZWtrYSBQaWV0aWthaW5lbgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLSNpbmNsdWRlICJiY200M3h4LmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9kbWEuaCIKLSNpbmNsdWRlICJiY200M3h4X21haW4uaCIKLSNpbmNsdWRlICJiY200M3h4X2RlYnVnZnMuaCIKLSNpbmNsdWRlICJiY200M3h4X3Bvd2VyLmgiCi0jaW5jbHVkZSAiYmNtNDN4eF94bWl0LmgiCi0KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0KLQotc3RhdGljIGlubGluZSBpbnQgZnJlZV9zbG90cyhzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQotewotCXJldHVybiAocmluZy0+bnJfc2xvdHMgLSByaW5nLT51c2VkX3Nsb3RzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbmV4dF9zbG90KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsIGludCBzbG90KQotewotCWFzc2VydChzbG90ID49IC0xICYmIHNsb3QgPD0gcmluZy0+bnJfc2xvdHMgLSAxKTsKLQlpZiAoc2xvdCA9PSByaW5nLT5ucl9zbG90cyAtIDEpCi0JCXJldHVybiAwOwotCXJldHVybiBzbG90ICsgMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHJldl9zbG90KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsIGludCBzbG90KQotewotCWFzc2VydChzbG90ID49IDAgJiYgc2xvdCA8PSByaW5nLT5ucl9zbG90cyAtIDEpOwotCWlmIChzbG90ID09IDApCi0JCXJldHVybiByaW5nLT5ucl9zbG90cyAtIDE7Ci0JcmV0dXJuIHNsb3QgLSAxOwotfQotCi0vKiBSZXF1ZXN0IGEgc2xvdCBmb3IgdXNhZ2UuICovCi1zdGF0aWMgaW5saW5lCi1pbnQgcmVxdWVzdF9zbG90KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci0JaW50IHNsb3Q7Ci0KLQlhc3NlcnQocmluZy0+dHgpOwotCWFzc2VydCghcmluZy0+c3VzcGVuZGVkKTsKLQlhc3NlcnQoZnJlZV9zbG90cyhyaW5nKSAhPSAwKTsKLQotCXNsb3QgPSBuZXh0X3Nsb3QocmluZywgcmluZy0+Y3VycmVudF9zbG90KTsKLQlyaW5nLT5jdXJyZW50X3Nsb3QgPSBzbG90OwotCXJpbmctPnVzZWRfc2xvdHMrKzsKLQotCS8qIENoZWNrIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHNsb3RzIGFuZCBzdXNwZW5kIFRYLAotCSAqIGlmIHdlIGFyZSBydW5uaW5nIGxvdyBvbiBmcmVlIHNsb3RzLgotCSAqLwotCWlmICh1bmxpa2VseShmcmVlX3Nsb3RzKHJpbmcpIDwgcmluZy0+c3VzcGVuZF9tYXJrKSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKHJpbmctPmJjbS0+bmV0X2Rldik7Ci0JCXJpbmctPnN1c3BlbmRlZCA9IDE7Ci0JfQotI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCi0JaWYgKHJpbmctPnVzZWRfc2xvdHMgPiByaW5nLT5tYXhfdXNlZF9zbG90cykKLQkJcmluZy0+bWF4X3VzZWRfc2xvdHMgPSByaW5nLT51c2VkX3Nsb3RzOwotI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX0RFQlVHKi8KLQotCXJldHVybiBzbG90OwotfQotCi0vKiBSZXR1cm4gYSBzbG90IHRvIHRoZSBmcmVlIHNsb3RzLiAqLwotc3RhdGljIGlubGluZQotdm9pZCByZXR1cm5fc2xvdChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLCBpbnQgc2xvdCkKLXsKLQlhc3NlcnQocmluZy0+dHgpOwotCi0JcmluZy0+dXNlZF9zbG90cy0tOwotCi0JLyogQ2hlY2sgaWYgVFggaXMgc3VzcGVuZGVkIGFuZCBjaGVjayBpZiB3ZSBoYXZlCi0JICogZW5vdWdoIGZyZWUgc2xvdHMgdG8gcmVzdW1lIGl0IGFnYWluLgotCSAqLwotCWlmICh1bmxpa2VseShyaW5nLT5zdXNwZW5kZWQpKSB7Ci0JCWlmIChmcmVlX3Nsb3RzKHJpbmcpID49IHJpbmctPnJlc3VtZV9tYXJrKSB7Ci0JCQlyaW5nLT5zdXNwZW5kZWQgPSAwOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShyaW5nLT5iY20tPm5ldF9kZXYpOwotCQl9Ci0JfQotfQotCi11MTYgYmNtNDN4eF9kbWFjb250cm9sbGVyX2Jhc2UoaW50IGRtYTY0Yml0LCBpbnQgY29udHJvbGxlcl9pZHgpCi17Ci0Jc3RhdGljIGNvbnN0IHUxNiBtYXA2NFtdID0gewotCQlCQ000M3h4X01NSU9fRE1BNjRfQkFTRTAsCi0JCUJDTTQzeHhfTU1JT19ETUE2NF9CQVNFMSwKLQkJQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0UyLAotCQlCQ000M3h4X01NSU9fRE1BNjRfQkFTRTMsCi0JCUJDTTQzeHhfTU1JT19ETUE2NF9CQVNFNCwKLQkJQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0U1LAotCX07Ci0Jc3RhdGljIGNvbnN0IHUxNiBtYXAzMltdID0gewotCQlCQ000M3h4X01NSU9fRE1BMzJfQkFTRTAsCi0JCUJDTTQzeHhfTU1JT19ETUEzMl9CQVNFMSwKLQkJQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0UyLAotCQlCQ000M3h4X01NSU9fRE1BMzJfQkFTRTMsCi0JCUJDTTQzeHhfTU1JT19ETUEzMl9CQVNFNCwKLQkJQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0U1LAotCX07Ci0KLQlpZiAoZG1hNjRiaXQpIHsKLQkJYXNzZXJ0KGNvbnRyb2xsZXJfaWR4ID49IDAgJiYKLQkJICAgICAgIGNvbnRyb2xsZXJfaWR4IDwgQVJSQVlfU0laRShtYXA2NCkpOwotCQlyZXR1cm4gbWFwNjRbY29udHJvbGxlcl9pZHhdOwotCX0KLQlhc3NlcnQoY29udHJvbGxlcl9pZHggPj0gMCAmJgotCSAgICAgICBjb250cm9sbGVyX2lkeCA8IEFSUkFZX1NJWkUobWFwMzIpKTsKLQlyZXR1cm4gbWFwMzJbY29udHJvbGxlcl9pZHhdOwotfQotCi1zdGF0aWMgaW5saW5lCi1kbWFfYWRkcl90IG1hcF9kZXNjYnVmZmVyKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCi0JCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLQkJCSAgc2l6ZV90IGxlbiwKLQkJCSAgaW50IHR4KQotewotCWRtYV9hZGRyX3QgZG1hYWRkcjsKLQlpbnQgZGlyZWN0aW9uID0gUENJX0RNQV9GUk9NREVWSUNFOwotCi0JaWYgKHR4KQotCQlkaXJlY3Rpb24gPSBQQ0lfRE1BX1RPREVWSUNFOwotCi0JZG1hYWRkciA9IHBjaV9tYXBfc2luZ2xlKHJpbmctPmJjbS0+cGNpX2RldiwKLQkJCQkJIGJ1ZiwgbGVuLAotCQkJCQkgZGlyZWN0aW9uKTsKLQotCXJldHVybiBkbWFhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lCi12b2lkIHVubWFwX2Rlc2NidWZmZXIoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKLQkJICAgICAgZG1hX2FkZHJfdCBhZGRyLAotCQkgICAgICBzaXplX3QgbGVuLAotCQkgICAgICBpbnQgdHgpCi17Ci0JaWYgKHR4KSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LAotCQkJCSBhZGRyLCBsZW4sCi0JCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCX0gZWxzZSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LAotCQkJCSBhZGRyLCBsZW4sCi0JCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lCi12b2lkIHN5bmNfZGVzY2J1ZmZlcl9mb3JfY3B1KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCi0JCQkgICAgIGRtYV9hZGRyX3QgYWRkciwKLQkJCSAgICAgc2l6ZV90IGxlbikKLXsKLQlhc3NlcnQoIXJpbmctPnR4KTsKLQotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nLT5iY20tPnBjaV9kZXYsCi0JCQkJICAgIGFkZHIsIGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLX0KLQotc3RhdGljIGlubGluZQotdm9pZCBzeW5jX2Rlc2NidWZmZXJfZm9yX2RldmljZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkJCWRtYV9hZGRyX3QgYWRkciwKLQkJCQlzaXplX3QgbGVuKQotewotCWFzc2VydCghcmluZy0+dHgpOwotCi0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPmJjbS0+cGNpX2RldiwKLQkJCQkgICAgYWRkciwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLX0KLQotLyogVW5tYXAgYW5kIGZyZWUgYSBkZXNjcmlwdG9yIGJ1ZmZlci4gKi8KLXN0YXRpYyBpbmxpbmUKLXZvaWQgZnJlZV9kZXNjcmlwdG9yX2J1ZmZlcihzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkJICAgIHN0cnVjdCBiY200M3h4X2RtYWRlc2NfbWV0YSAqbWV0YSwKLQkJCSAgICBpbnQgaXJxX2NvbnRleHQpCi17Ci0JYXNzZXJ0KG1ldGEtPnNrYik7Ci0JaWYgKGlycV9jb250ZXh0KQotCQlkZXZfa2ZyZWVfc2tiX2lycShtZXRhLT5za2IpOwotCWVsc2UKLQkJZGV2X2tmcmVlX3NrYihtZXRhLT5za2IpOwotCW1ldGEtPnNrYiA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgYWxsb2NfcmluZ21lbW9yeShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQotewotCXJpbmctPmRlc2NiYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocmluZy0+YmNtLT5wY2lfZGV2LCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKLQkJCQkJICAgICYocmluZy0+ZG1hYmFzZSkpOwotCWlmICghcmluZy0+ZGVzY2Jhc2UpIHsKLQkJLyogQWxsb2NhdGlvbiBtYXkgaGF2ZSBmYWlsZWQgZHVlIHRvIHBjaV9hbGxvY19jb25zaXN0ZW50Ci0JCSAgIGluc2lzdGluZyBvbiB1c2Ugb2YgR0ZQX0RNQSwgd2hpY2ggaXMgbW9yZSByZXN0cmljdGl2ZQotCQkgICB0aGFuIG5lY2Vzc2FyeS4uLiAgKi8KLQkJc3RydWN0IGRtYV9kZXNjICpyeF9yaW5nOwotCQlkbWFfYWRkcl90IHJ4X3JpbmdfZG1hOwotCi0JCXJ4X3JpbmcgPSBremFsbG9jKEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyeF9yaW5nKQotCQkJZ290byBvdXRfZXJyOwotCi0JCXJ4X3JpbmdfZG1hID0gcGNpX21hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LCByeF9yaW5nLAotCQkJCQkgICAgIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAotCQkJCQkgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkgfHwKLQkJICAgIHJ4X3JpbmdfZG1hICsgQkNNNDN4eF9ETUFfUklOR01FTVNJWkUgPiByaW5nLT5iY20tPmRtYV9tYXNrKSB7Ci0JCQkvKiBTaWdoLi4uICovCi0JCQlpZiAoIXBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkpCi0JCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nLT5iY20tPnBjaV9kZXYsCi0JCQkJCQkgcnhfcmluZ19kbWEsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAotCQkJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JCQlyeF9yaW5nX2RtYSA9IHBjaV9tYXBfc2luZ2xlKHJpbmctPmJjbS0+cGNpX2RldiwKLQkJCQkJCSByeF9yaW5nLCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKLQkJCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkgfHwKLQkJCSAgICByeF9yaW5nX2RtYSArIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFID4gcmluZy0+YmNtLT5kbWFfbWFzaykgewotCQkJCWFzc2VydCgwKTsKLQkJCQlpZiAoIXBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkpCi0JCQkJCXBjaV91bm1hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LAotCQkJCQkJCSByeF9yaW5nX2RtYSwgQkNNNDN4eF9ETUFfUklOR01FTVNJWkUsCi0JCQkJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JCQkJZ290byBvdXRfZXJyOwotCQkJfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJpbmctPmRlc2NiYXNlID0gcnhfcmluZzsKLSAgICAgICAgICAgICAgICByaW5nLT5kbWFiYXNlID0gcnhfcmluZ19kbWE7Ci0JfQotCW1lbXNldChyaW5nLT5kZXNjYmFzZSwgMCwgQkNNNDN4eF9ETUFfUklOR01FTVNJWkUpOwotCi0JcmV0dXJuIDA7Ci1vdXRfZXJyOgotCXByaW50ayhLRVJOX0VSUiBQRlggIkRNQSByaW5nbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9yaW5nbWVtb3J5KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJihyaW5nLT5iY20tPnBjaV9kZXYtPmRldik7Ci0KLQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAotCQkJICByaW5nLT5kZXNjYmFzZSwgcmluZy0+ZG1hYmFzZSk7Ci19Ci0KLS8qIFJlc2V0IHRoZSBSWCBETUEgY2hhbm5lbCAqLwotaW50IGJjbTQzeHhfZG1hY29udHJvbGxlcl9yeF9yZXNldChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgdTE2IG1taW9fYmFzZSwgaW50IGRtYTY0KQotewotCWludCBpOwotCXUzMiB2YWx1ZTsKLQl1MTYgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0gZG1hNjQgPyBCQ000M3h4X0RNQTY0X1JYQ1RMIDogQkNNNDN4eF9ETUEzMl9SWENUTDsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBtbWlvX2Jhc2UgKyBvZmZzZXQsIDApOwotCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJb2Zmc2V0ID0gZG1hNjQgPyBCQ000M3h4X0RNQTY0X1JYU1RBVFVTIDogQkNNNDN4eF9ETUEzMl9SWFNUQVRVUzsKLQkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIG1taW9fYmFzZSArIG9mZnNldCk7Ci0JCWlmIChkbWE2NCkgewotCQkJdmFsdWUgJj0gQkNNNDN4eF9ETUE2NF9SWFNUQVQ7Ci0JCQlpZiAodmFsdWUgPT0gQkNNNDN4eF9ETUE2NF9SWFNUQVRfRElTQUJMRUQpIHsKLQkJCQlpID0gLTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl2YWx1ZSAmPSBCQ000M3h4X0RNQTMyX1JYU1RBVEU7Ci0JCQlpZiAodmFsdWUgPT0gQkNNNDN4eF9ETUEzMl9SWFNUQVRfRElTQUJMRUQpIHsKLQkJCQlpID0gLTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJdWRlbGF5KDEwKTsKLQl9Ci0JaWYgKGkgIT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3I6IFdhaXQgb24gRE1BIFJYIHN0YXR1cyB0aW1lZCBvdXQuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJlc2V0IHRoZSBSWCBETUEgY2hhbm5lbCAqLwotaW50IGJjbTQzeHhfZG1hY29udHJvbGxlcl90eF9yZXNldChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgdTE2IG1taW9fYmFzZSwgaW50IGRtYTY0KQotewotCWludCBpOwotCXUzMiB2YWx1ZTsKLQl1MTYgb2Zmc2V0OwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewotCQlvZmZzZXQgPSBkbWE2NCA/IEJDTTQzeHhfRE1BNjRfVFhTVEFUVVMgOiBCQ000M3h4X0RNQTMyX1RYU1RBVFVTOwotCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgbW1pb19iYXNlICsgb2Zmc2V0KTsKLQkJaWYgKGRtYTY0KSB7Ci0JCQl2YWx1ZSAmPSBCQ000M3h4X0RNQTY0X1RYU1RBVDsKLQkJCWlmICh2YWx1ZSA9PSBCQ000M3h4X0RNQTY0X1RYU1RBVF9ESVNBQkxFRCB8fAotCQkJICAgIHZhbHVlID09IEJDTTQzeHhfRE1BNjRfVFhTVEFUX0lETEVXQUlUIHx8Ci0JCQkgICAgdmFsdWUgPT0gQkNNNDN4eF9ETUE2NF9UWFNUQVRfU1RPUFBFRCkKLQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCXZhbHVlICY9IEJDTTQzeHhfRE1BMzJfVFhTVEFURTsKLQkJCWlmICh2YWx1ZSA9PSBCQ000M3h4X0RNQTMyX1RYU1RBVF9ESVNBQkxFRCB8fAotCQkJICAgIHZhbHVlID09IEJDTTQzeHhfRE1BMzJfVFhTVEFUX0lETEVXQUlUIHx8Ci0JCQkgICAgdmFsdWUgPT0gQkNNNDN4eF9ETUEzMl9UWFNUQVRfU1RPUFBFRCkKLQkJCQlicmVhazsKLQkJfQotCQl1ZGVsYXkoMTApOwotCX0KLQlvZmZzZXQgPSBkbWE2NCA/IEJDTTQzeHhfRE1BNjRfVFhDVEwgOiBCQ000M3h4X0RNQTMyX1RYQ1RMOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIG1taW9fYmFzZSArIG9mZnNldCwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewotCQlvZmZzZXQgPSBkbWE2NCA/IEJDTTQzeHhfRE1BNjRfVFhTVEFUVVMgOiBCQ000M3h4X0RNQTMyX1RYU1RBVFVTOwotCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgbW1pb19iYXNlICsgb2Zmc2V0KTsKLQkJaWYgKGRtYTY0KSB7Ci0JCQl2YWx1ZSAmPSBCQ000M3h4X0RNQTY0X1RYU1RBVDsKLQkJCWlmICh2YWx1ZSA9PSBCQ000M3h4X0RNQTY0X1RYU1RBVF9ESVNBQkxFRCkgewotCQkJCWkgPSAtMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXZhbHVlICY9IEJDTTQzeHhfRE1BMzJfVFhTVEFURTsKLQkJCWlmICh2YWx1ZSA9PSBCQ000M3h4X0RNQTMyX1RYU1RBVF9ESVNBQkxFRCkgewotCQkJCWkgPSAtMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl1ZGVsYXkoMTApOwotCX0KLQlpZiAoaSAhPSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvcjogV2FpdCBvbiBETUEgVFggc3RhdHVzIHRpbWVkIG91dC5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JLyogZW5zdXJlIHRoZSByZXNldCBpcyBjb21wbGV0ZWQuICovCi0JdWRlbGF5KDMwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZmlsbF9kZXNjcmlwdG9yKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCi0JCQkgICAgc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICpkZXNjLAotCQkJICAgIGRtYV9hZGRyX3QgZG1hYWRkciwKLQkJCSAgICB1MTYgYnVmc2l6ZSwKLQkJCSAgICBpbnQgc3RhcnQsIGludCBlbmQsIGludCBpcnEpCi17Ci0JaW50IHNsb3Q7Ci0KLQlzbG90ID0gYmNtNDN4eF9kbWFfZGVzYzJpZHgocmluZywgZGVzYyk7Ci0JYXNzZXJ0KHNsb3QgPj0gMCAmJiBzbG90IDwgcmluZy0+bnJfc2xvdHMpOwotCi0JaWYgKHJpbmctPmRtYTY0KSB7Ci0JCXUzMiBjdGwwID0gMCwgY3RsMSA9IDA7Ci0JCXUzMiBhZGRybG8sIGFkZHJoaTsKLQkJdTMyIGFkZHJleHQ7Ci0KLQkJYWRkcmxvID0gKHUzMikoZG1hYWRkciAmIDB4RkZGRkZGRkYpOwotCQlhZGRyaGkgPSAoKCh1NjQpZG1hYWRkciA+PiAzMikgJiB+QkNNNDN4eF9ETUE2NF9ST1VUSU5HKTsKLQkJYWRkcmV4dCA9ICgoKHU2NClkbWFhZGRyID4+IDMyKSA+PiBCQ000M3h4X0RNQTY0X1JPVVRJTkdfU0hJRlQpOwotCQlhZGRyaGkgfD0gcmluZy0+cm91dGluZzsKLQkJaWYgKHNsb3QgPT0gcmluZy0+bnJfc2xvdHMgLSAxKQotCQkJY3RsMCB8PSBCQ000M3h4X0RNQTY0X0RDVEwwX0RUQUJMRUVORDsKLQkJaWYgKHN0YXJ0KQotCQkJY3RsMCB8PSBCQ000M3h4X0RNQTY0X0RDVEwwX0ZSQU1FU1RBUlQ7Ci0JCWlmIChlbmQpCi0JCQljdGwwIHw9IEJDTTQzeHhfRE1BNjRfRENUTDBfRlJBTUVFTkQ7Ci0JCWlmIChpcnEpCi0JCQljdGwwIHw9IEJDTTQzeHhfRE1BNjRfRENUTDBfSVJROwotCQljdGwxIHw9IChidWZzaXplIC0gcmluZy0+ZnJhbWVvZmZzZXQpCi0JCQkmIEJDTTQzeHhfRE1BNjRfRENUTDFfQllURUNOVDsKLQkJY3RsMSB8PSAoYWRkcmV4dCA8PCBCQ000M3h4X0RNQTY0X0RDVEwxX0FERFJFWFRfU0hJRlQpCi0JCQkmIEJDTTQzeHhfRE1BNjRfRENUTDFfQUREUkVYVF9NQVNLOwotCi0JCWRlc2MtPmRtYTY0LmNvbnRyb2wwID0gY3B1X3RvX2xlMzIoY3RsMCk7Ci0JCWRlc2MtPmRtYTY0LmNvbnRyb2wxID0gY3B1X3RvX2xlMzIoY3RsMSk7Ci0JCWRlc2MtPmRtYTY0LmFkZHJlc3NfbG93ID0gY3B1X3RvX2xlMzIoYWRkcmxvKTsKLQkJZGVzYy0+ZG1hNjQuYWRkcmVzc19oaWdoID0gY3B1X3RvX2xlMzIoYWRkcmhpKTsKLQl9IGVsc2UgewotCQl1MzIgY3RsOwotCQl1MzIgYWRkcjsKLQkJdTMyIGFkZHJleHQ7Ci0KLQkJYWRkciA9ICh1MzIpKGRtYWFkZHIgJiB+QkNNNDN4eF9ETUEzMl9ST1VUSU5HKTsKLQkJYWRkcmV4dCA9ICh1MzIpKGRtYWFkZHIgJiBCQ000M3h4X0RNQTMyX1JPVVRJTkcpCi0JCQkgICA+PiBCQ000M3h4X0RNQTMyX1JPVVRJTkdfU0hJRlQ7Ci0JCWFkZHIgfD0gcmluZy0+cm91dGluZzsKLQkJY3RsID0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKLQkJICAgICAgJiBCQ000M3h4X0RNQTMyX0RDVExfQllURUNOVDsKLQkJaWYgKHNsb3QgPT0gcmluZy0+bnJfc2xvdHMgLSAxKQotCQkJY3RsIHw9IEJDTTQzeHhfRE1BMzJfRENUTF9EVEFCTEVFTkQ7Ci0JCWlmIChzdGFydCkKLQkJCWN0bCB8PSBCQ000M3h4X0RNQTMyX0RDVExfRlJBTUVTVEFSVDsKLQkJaWYgKGVuZCkKLQkJCWN0bCB8PSBCQ000M3h4X0RNQTMyX0RDVExfRlJBTUVFTkQ7Ci0JCWlmIChpcnEpCi0JCQljdGwgfD0gQkNNNDN4eF9ETUEzMl9EQ1RMX0lSUTsKLQkJY3RsIHw9IChhZGRyZXh0IDw8IEJDTTQzeHhfRE1BMzJfRENUTF9BRERSRVhUX1NISUZUKQotCQkgICAgICAgJiBCQ000M3h4X0RNQTMyX0RDVExfQUREUkVYVF9NQVNLOwotCi0JCWRlc2MtPmRtYTMyLmNvbnRyb2wgPSBjcHVfdG9fbGUzMihjdGwpOwotCQlkZXNjLT5kbWEzMi5hZGRyZXNzID0gY3B1X3RvX2xlMzIoYWRkcik7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNldHVwX3J4X2Rlc2NidWZmZXIoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKLQkJCSAgICAgICBzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKmRlc2MsCi0JCQkgICAgICAgc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhICptZXRhLAotCQkJICAgICAgIGdmcF90IGdmcF9mbGFncykKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9yeGhkciAqcnhoZHI7Ci0Jc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICp4bWl0c3RhdDsKLQlkbWFfYWRkcl90IGRtYWFkZHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWFzc2VydCghcmluZy0+dHgpOwotCi0Jc2tiID0gX19kZXZfYWxsb2Nfc2tiKHJpbmctPnJ4X2J1ZmZlcnNpemUsIGdmcF9mbGFncyk7Ci0JaWYgKHVubGlrZWx5KCFza2IpKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLCByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKLQkvKiBUaGlzIGhhcmR3YXJlIGJ1ZyB3b3JrLWFyb3VuZCBhZGFwdGVkIGZyb20gdGhlIGI0NCBkcml2ZXIuCi0JICAgVGhlIGNoaXAgbWF5IGJlIHVuYWJsZSB0byBkbyBQQ0kgRE1BIHRvL2Zyb20gYW55dGhpbmcgYWJvdmUgMUdCICovCi0JaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbWFhZGRyKSB8fAotCSAgICBkbWFhZGRyICsgcmluZy0+cnhfYnVmZmVyc2l6ZSA+IHJpbmctPmJjbS0+ZG1hX21hc2spIHsKLQkJLyogVGhpcyBvbmUgaGFzIDMwLWJpdCBhZGRyZXNzaW5nLi4uICovCi0JCWlmICghcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYWFkZHIpKQotCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nLT5iY20tPnBjaV9kZXYsCi0JCQkJCSBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJc2tiID0gX19kZXZfYWxsb2Nfc2tiKHJpbmctPnJ4X2J1ZmZlcnNpemUsR0ZQX0RNQSk7Ci0JCWlmIChza2IgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlkbWFhZGRyID0gcGNpX21hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LAotCQkJCQkgc2tiLT5kYXRhLCByaW5nLT5yeF9idWZmZXJzaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbWFhZGRyKSB8fAotCQkgICAgZG1hYWRkciArIHJpbmctPnJ4X2J1ZmZlcnNpemUgPiByaW5nLT5iY20tPmRtYV9tYXNrKSB7Ci0JCQlhc3NlcnQoMCk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0JbWV0YS0+c2tiID0gc2tiOwotCW1ldGEtPmRtYWFkZHIgPSBkbWFhZGRyOwotCXNrYi0+ZGV2ID0gcmluZy0+YmNtLT5uZXRfZGV2OwotCi0JZmlsbF9kZXNjcmlwdG9yKHJpbmcsIGRlc2MsIGRtYWFkZHIsCi0JCQlyaW5nLT5yeF9idWZmZXJzaXplLCAwLCAwLCAwKTsKLQotCXJ4aGRyID0gKHN0cnVjdCBiY200M3h4X3J4aGRyICopKHNrYi0+ZGF0YSk7Ci0JcnhoZHItPmZyYW1lX2xlbmd0aCA9IDA7Ci0JcnhoZHItPmZsYWdzMSA9IDA7Ci0JeG1pdHN0YXQgPSAoc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICopKHNrYi0+ZGF0YSk7Ci0JeG1pdHN0YXQtPmNvb2tpZSA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQWxsb2NhdGUgdGhlIGluaXRpYWwgZGVzY2J1ZmZlcnMuCi0gKiBUaGlzIGlzIHVzZWQgZm9yIGFuIFJYIHJpbmcgb25seS4KLSAqLwotc3RhdGljIGludCBhbGxvY19pbml0aWFsX2Rlc2NidWZmZXJzKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci0JaW50IGksIGVyciA9IC1FTk9NRU07Ci0Jc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICpkZXNjOwotCXN0cnVjdCBiY200M3h4X2RtYWRlc2NfbWV0YSAqbWV0YTsKLQotCWZvciAoaSA9IDA7IGkgPCByaW5nLT5ucl9zbG90czsgaSsrKSB7Ci0JCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCBpLCAmbWV0YSk7Ci0KLQkJZXJyID0gc2V0dXBfcnhfZGVzY2J1ZmZlcihyaW5nLCBkZXNjLCBtZXRhLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX3Vud2luZDsKLQl9Ci0JbWIoKTsKLQlyaW5nLT51c2VkX3Nsb3RzID0gcmluZy0+bnJfc2xvdHM7Ci0JZXJyID0gMDsKLW91dDoKLQlyZXR1cm4gZXJyOwotCi1lcnJfdW53aW5kOgotCWZvciAoaS0tOyBpID49IDA7IGktLSkgewotCQlkZXNjID0gYmNtNDN4eF9kbWFfaWR4MmRlc2MocmluZywgaSwgJm1ldGEpOwotCi0JCXVubWFwX2Rlc2NidWZmZXIocmluZywgbWV0YS0+ZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCk7Ci0JCWRldl9rZnJlZV9za2IobWV0YS0+c2tiKTsKLQl9Ci0JZ290byBvdXQ7Ci19Ci0KLS8qIERvIGluaXRpYWwgc2V0dXAgb2YgdGhlIERNQSBjb250cm9sbGVyLgotICogUmVzZXQgdGhlIGNvbnRyb2xsZXIsIHdyaXRlIHRoZSByaW5nIGJ1c2FkZHJlc3MKLSAqIGFuZCBzd2l0Y2ggdGhlICJlbmFibGUiIGJpdCBvbi4KLSAqLwotc3RhdGljIGludCBkbWFjb250cm9sbGVyX3NldHVwKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci0JaW50IGVyciA9IDA7Ci0JdTMyIHZhbHVlOwotCXUzMiBhZGRyZXh0OwotCi0JaWYgKHJpbmctPnR4KSB7Ci0JCWlmIChyaW5nLT5kbWE2NCkgewotCQkJdTY0IHJpbmdiYXNlID0gKHU2NCkocmluZy0+ZG1hYmFzZSk7Ci0KLQkJCWFkZHJleHQgPSAoKHJpbmdiYXNlID4+IDMyKSA+PiBCQ000M3h4X0RNQTY0X1JPVVRJTkdfU0hJRlQpOwotCQkJdmFsdWUgPSBCQ000M3h4X0RNQTY0X1RYRU5BQkxFOwotCQkJdmFsdWUgfD0gKGFkZHJleHQgPDwgQkNNNDN4eF9ETUE2NF9UWEFERFJFWFRfU0hJRlQpCi0JCQkJJiBCQ000M3h4X0RNQTY0X1RYQUREUkVYVF9NQVNLOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9UWENUTCwgdmFsdWUpOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9UWFJJTkdMTywKLQkJCQkJKHJpbmdiYXNlICYgMHhGRkZGRkZGRikpOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9UWFJJTkdISSwKLQkJCQkJKChyaW5nYmFzZSA+PiAzMikgJiB+QkNNNDN4eF9ETUE2NF9ST1VUSU5HKQotCQkJCQl8IHJpbmctPnJvdXRpbmcpOwotCQl9IGVsc2UgewotCQkJdTMyIHJpbmdiYXNlID0gKHUzMikocmluZy0+ZG1hYmFzZSk7Ci0KLQkJCWFkZHJleHQgPSAocmluZ2Jhc2UgPj4gQkNNNDN4eF9ETUEzMl9ST1VUSU5HX1NISUZUKTsKLQkJCXZhbHVlID0gQkNNNDN4eF9ETUEzMl9UWEVOQUJMRTsKLQkJCXZhbHVlIHw9IChhZGRyZXh0IDw8IEJDTTQzeHhfRE1BMzJfVFhBRERSRVhUX1NISUZUKQotCQkJCSYgQkNNNDN4eF9ETUEzMl9UWEFERFJFWFRfTUFTSzsKLQkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BMzJfVFhDVEwsIHZhbHVlKTsKLQkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BMzJfVFhSSU5HLAotCQkJCQkocmluZ2Jhc2UgJiB+QkNNNDN4eF9ETUEzMl9ST1VUSU5HKQotCQkJCQl8IHJpbmctPnJvdXRpbmcpOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyID0gYWxsb2NfaW5pdGlhbF9kZXNjYnVmZmVycyhyaW5nKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCQlpZiAocmluZy0+ZG1hNjQpIHsKLQkJCXU2NCByaW5nYmFzZSA9ICh1NjQpKHJpbmctPmRtYWJhc2UpOwotCi0JCQlhZGRyZXh0ID0gKChyaW5nYmFzZSA+PiAzMikgPj4gQkNNNDN4eF9ETUE2NF9ST1VUSU5HX1NISUZUKTsKLQkJCXZhbHVlID0gKHJpbmctPmZyYW1lb2Zmc2V0IDw8IEJDTTQzeHhfRE1BNjRfUlhGUk9GRl9TSElGVCk7Ci0JCQl2YWx1ZSB8PSBCQ000M3h4X0RNQTY0X1JYRU5BQkxFOwotCQkJdmFsdWUgfD0gKGFkZHJleHQgPDwgQkNNNDN4eF9ETUE2NF9SWEFERFJFWFRfU0hJRlQpCi0JCQkJJiBCQ000M3h4X0RNQTY0X1JYQUREUkVYVF9NQVNLOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9SWENUTCwgdmFsdWUpOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9SWFJJTkdMTywKLQkJCQkJKHJpbmdiYXNlICYgMHhGRkZGRkZGRikpOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9SWFJJTkdISSwKLQkJCQkJKChyaW5nYmFzZSA+PiAzMikgJiB+QkNNNDN4eF9ETUE2NF9ST1VUSU5HKQotCQkJCQl8IHJpbmctPnJvdXRpbmcpOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9SWElOREVYLCAyMDApOwotCQl9IGVsc2UgewotCQkJdTMyIHJpbmdiYXNlID0gKHUzMikocmluZy0+ZG1hYmFzZSk7Ci0KLQkJCWFkZHJleHQgPSAocmluZ2Jhc2UgPj4gQkNNNDN4eF9ETUEzMl9ST1VUSU5HX1NISUZUKTsKLQkJCXZhbHVlID0gKHJpbmctPmZyYW1lb2Zmc2V0IDw8IEJDTTQzeHhfRE1BMzJfUlhGUk9GRl9TSElGVCk7Ci0JCQl2YWx1ZSB8PSBCQ000M3h4X0RNQTMyX1JYRU5BQkxFOwotCQkJdmFsdWUgfD0gKGFkZHJleHQgPDwgQkNNNDN4eF9ETUEzMl9SWEFERFJFWFRfU0hJRlQpCi0JCQkJJiBCQ000M3h4X0RNQTMyX1JYQUREUkVYVF9NQVNLOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUEzMl9SWENUTCwgdmFsdWUpOwotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUEzMl9SWFJJTkcsCi0JCQkJCShyaW5nYmFzZSAmIH5CQ000M3h4X0RNQTMyX1JPVVRJTkcpCi0JCQkJCXwgcmluZy0+cm91dGluZyk7Ci0JCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1JYSU5ERVgsIDIwMCk7Ci0JCX0KLQl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBTaHV0ZG93biB0aGUgRE1BIGNvbnRyb2xsZXIuICovCi1zdGF0aWMgdm9pZCBkbWFjb250cm9sbGVyX2NsZWFudXAoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZykKLXsKLQlpZiAocmluZy0+dHgpIHsKLQkJYmNtNDN4eF9kbWFjb250cm9sbGVyX3R4X3Jlc2V0KHJpbmctPmJjbSwgcmluZy0+bW1pb19iYXNlLCByaW5nLT5kbWE2NCk7Ci0JCWlmIChyaW5nLT5kbWE2NCkgewotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9UWFJJTkdMTywgMCk7Ci0JCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTY0X1RYUklOR0hJLCAwKTsKLQkJfSBlbHNlCi0JCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1RYUklORywgMCk7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF9kbWFjb250cm9sbGVyX3J4X3Jlc2V0KHJpbmctPmJjbSwgcmluZy0+bW1pb19iYXNlLCByaW5nLT5kbWE2NCk7Ci0JCWlmIChyaW5nLT5kbWE2NCkgewotCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9SWFJJTkdMTywgMCk7Ci0JCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTY0X1JYUklOR0hJLCAwKTsKLQkJfSBlbHNlCi0JCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1JYUklORywgMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2FsbF9kZXNjYnVmZmVycyhzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQotewotCXN0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyAqZGVzYzsKLQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEgKm1ldGE7Ci0JaW50IGk7Ci0KLQlpZiAoIXJpbmctPnVzZWRfc2xvdHMpCi0JCXJldHVybjsKLQlmb3IgKGkgPSAwOyBpIDwgcmluZy0+bnJfc2xvdHM7IGkrKykgewotCQlkZXNjID0gYmNtNDN4eF9kbWFfaWR4MmRlc2MocmluZywgaSwgJm1ldGEpOwotCi0JCWlmICghbWV0YS0+c2tiKSB7Ci0JCQlhc3NlcnQocmluZy0+dHgpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHJpbmctPnR4KSB7Ci0JCQl1bm1hcF9kZXNjYnVmZmVyKHJpbmcsIG1ldGEtPmRtYWFkZHIsCi0JCQkJCW1ldGEtPnNrYi0+bGVuLCAxKTsKLQkJfSBlbHNlIHsKLQkJCXVubWFwX2Rlc2NidWZmZXIocmluZywgbWV0YS0+ZG1hYWRkciwKLQkJCQkJcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCk7Ci0JCX0KLQkJZnJlZV9kZXNjcmlwdG9yX2J1ZmZlcihyaW5nLCBtZXRhLCAwKTsKLQl9Ci19Ci0KLS8qIE1haW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICovCi1zdGF0aWMKLXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKiBiY200M3h4X3NldHVwX2RtYXJpbmcoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCQkgICAgICAgaW50IGNvbnRyb2xsZXJfaW5kZXgsCi0JCQkJCSAgICAgICBpbnQgZm9yX3R4LAotCQkJCQkgICAgICAgaW50IGRtYTY0KQotewotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmc7Ci0JaW50IGVycjsKLQlpbnQgbnJfc2xvdHM7Ci0KLQlyaW5nID0ga3phbGxvYyhzaXplb2YoKnJpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJpbmcpCi0JCWdvdG8gb3V0OwotCi0JbnJfc2xvdHMgPSBCQ000M3h4X1JYUklOR19TTE9UUzsKLQlpZiAoZm9yX3R4KQotCQlucl9zbG90cyA9IEJDTTQzeHhfVFhSSU5HX1NMT1RTOwotCi0JcmluZy0+bWV0YSA9IGtjYWxsb2MobnJfc2xvdHMsIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEpLAotCQkJICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXJpbmctPm1ldGEpCi0JCWdvdG8gZXJyX2tmcmVlX3Jpbmc7Ci0KLQlyaW5nLT5yb3V0aW5nID0gQkNNNDN4eF9ETUEzMl9DTElFTlRUUkFOUzsKLQlpZiAoZG1hNjQpCi0JCXJpbmctPnJvdXRpbmcgPSBCQ000M3h4X0RNQTY0X0NMSUVOVFRSQU5TOwotCi0JcmluZy0+YmNtID0gYmNtOwotCXJpbmctPm5yX3Nsb3RzID0gbnJfc2xvdHM7Ci0JcmluZy0+c3VzcGVuZF9tYXJrID0gcmluZy0+bnJfc2xvdHMgKiBCQ000M3h4X1RYU1VTUEVORF9QRVJDRU5UIC8gMTAwOwotCXJpbmctPnJlc3VtZV9tYXJrID0gcmluZy0+bnJfc2xvdHMgKiBCQ000M3h4X1RYUkVTVU1FX1BFUkNFTlQgLyAxMDA7Ci0JYXNzZXJ0KHJpbmctPnN1c3BlbmRfbWFyayA8IHJpbmctPnJlc3VtZV9tYXJrKTsKLQlyaW5nLT5tbWlvX2Jhc2UgPSBiY200M3h4X2RtYWNvbnRyb2xsZXJfYmFzZShkbWE2NCwgY29udHJvbGxlcl9pbmRleCk7Ci0JcmluZy0+aW5kZXggPSBjb250cm9sbGVyX2luZGV4OwotCXJpbmctPmRtYTY0ID0gISFkbWE2NDsKLQlpZiAoZm9yX3R4KSB7Ci0JCXJpbmctPnR4ID0gMTsKLQkJcmluZy0+Y3VycmVudF9zbG90ID0gLTE7Ci0JfSBlbHNlIHsKLQkJaWYgKHJpbmctPmluZGV4ID09IDApIHsKLQkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCQ000M3h4X0RNQTBfUlhfQlVGRkVSU0laRTsKLQkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQkNNNDN4eF9ETUEwX1JYX0ZSQU1FT0ZGU0VUOwotCQl9IGVsc2UgaWYgKHJpbmctPmluZGV4ID09IDMpIHsKLQkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCQ000M3h4X0RNQTNfUlhfQlVGRkVSU0laRTsKLQkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQkNNNDN4eF9ETUEzX1JYX0ZSQU1FT0ZGU0VUOwotCQl9IGVsc2UKLQkJCWFzc2VydCgwKTsKLQl9Ci0KLQllcnIgPSBhbGxvY19yaW5nbWVtb3J5KHJpbmcpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2tmcmVlX21ldGE7Ci0JZXJyID0gZG1hY29udHJvbGxlcl9zZXR1cChyaW5nKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9mcmVlX3JpbmdtZW1vcnk7Ci0JcmV0dXJuIHJpbmc7Ci0KLW91dDoKLQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvciBpbiBiY200M3h4X3NldHVwX2RtYXJpbmdcbiIpOwotCXJldHVybiByaW5nOwotCi1lcnJfZnJlZV9yaW5nbWVtb3J5OgotCWZyZWVfcmluZ21lbW9yeShyaW5nKTsKLWVycl9rZnJlZV9tZXRhOgotCWtmcmVlKHJpbmctPm1ldGEpOwotZXJyX2tmcmVlX3Jpbmc6Ci0Ja2ZyZWUocmluZyk7Ci0JcmluZyA9IE5VTEw7Ci0JZ290byBvdXQ7Ci19Ci0KLS8qIE1haW4gY2xlYW51cCBmdW5jdGlvbi4gKi8KLXN0YXRpYyB2b2lkIGJjbTQzeHhfZGVzdHJveV9kbWFyaW5nKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci0JaWYgKCFyaW5nKQotCQlyZXR1cm47Ci0KLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRNQS0lcyAweCUwNFggKCVzKSBtYXggdXNlZCBzbG90czogJWQvJWRcbiIsCi0JCShyaW5nLT5kbWE2NCkgPyAiNjQiIDogIjMyIiwKLQkJcmluZy0+bW1pb19iYXNlLAotCQkocmluZy0+dHgpID8gIlRYIiA6ICJSWCIsCi0JCXJpbmctPm1heF91c2VkX3Nsb3RzLCByaW5nLT5ucl9zbG90cyk7Ci0JLyogRGV2aWNlIElSUXMgYXJlIGRpc2FibGVkIHByaW9yIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24sCi0JICogc28gbm8gbmVlZCB0byB0YWtlIGNhcmUgb2YgY29uY3VycmVuY3kgd2l0aCByeCBoYW5kbGVyIHN0dWZmLgotCSAqLwotCWRtYWNvbnRyb2xsZXJfY2xlYW51cChyaW5nKTsKLQlmcmVlX2FsbF9kZXNjYnVmZmVycyhyaW5nKTsKLQlmcmVlX3JpbmdtZW1vcnkocmluZyk7Ci0KLQlrZnJlZShyaW5nLT5tZXRhKTsKLQlrZnJlZShyaW5nKTsKLX0KLQotdm9pZCBiY200M3h4X2RtYV9mcmVlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9kbWEgKmRtYTsKLQotCWlmIChiY200M3h4X3VzaW5nX3BpbyhiY20pKQotCQlyZXR1cm47Ci0JZG1hID0gYmNtNDN4eF9jdXJyZW50X2RtYShiY20pOwotCi0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT5yeF9yaW5nMyk7Ci0JZG1hLT5yeF9yaW5nMyA9IE5VTEw7Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT5yeF9yaW5nMCk7Ci0JZG1hLT5yeF9yaW5nMCA9IE5VTEw7Ci0KLQliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3Jpbmc1KTsKLQlkbWEtPnR4X3Jpbmc1ID0gTlVMTDsKLQliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3Jpbmc0KTsKLQlkbWEtPnR4X3Jpbmc0ID0gTlVMTDsKLQliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmczKTsKLQlkbWEtPnR4X3JpbmczID0gTlVMTDsKLQliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmcyKTsKLQlkbWEtPnR4X3JpbmcyID0gTlVMTDsKLQliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmcxKTsKLQlkbWEtPnR4X3JpbmcxID0gTlVMTDsKLQliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmcwKTsKLQlkbWEtPnR4X3JpbmcwID0gTlVMTDsKLX0KLQotaW50IGJjbTQzeHhfZG1hX2luaXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X2RtYSAqZG1hID0gYmNtNDN4eF9jdXJyZW50X2RtYShiY20pOwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmc7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JaW50IGRtYTY0ID0gMDsKLQotCWJjbS0+ZG1hX21hc2sgPSBiY200M3h4X2dldF9zdXBwb3J0ZWRfZG1hX21hc2soYmNtKTsKLQlpZiAoYmNtLT5kbWFfbWFzayA9PSBETUFfNjRCSVRfTUFTSykKLQkJZG1hNjQgPSAxOwotCWVyciA9IHBjaV9zZXRfZG1hX21hc2soYmNtLT5wY2lfZGV2LCBiY20tPmRtYV9tYXNrKTsKLQlpZiAoZXJyKQotCQlnb3RvIG5vX2RtYTsKLQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soYmNtLT5wY2lfZGV2LCBiY20tPmRtYV9tYXNrKTsKLQlpZiAoZXJyKQotCQlnb3RvIG5vX2RtYTsKLQotCS8qIHNldHVwIFRYIERNQSBjaGFubmVscy4gKi8KLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMCwgMSwgZG1hNjQpOwotCWlmICghcmluZykKLQkJZ290byBvdXQ7Ci0JZG1hLT50eF9yaW5nMCA9IHJpbmc7Ci0KLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMSwgMSwgZG1hNjQpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDA7Ci0JZG1hLT50eF9yaW5nMSA9IHJpbmc7Ci0KLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMiwgMSwgZG1hNjQpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDE7Ci0JZG1hLT50eF9yaW5nMiA9IHJpbmc7Ci0KLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMywgMSwgZG1hNjQpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDI7Ci0JZG1hLT50eF9yaW5nMyA9IHJpbmc7Ci0KLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgNCwgMSwgZG1hNjQpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDM7Ci0JZG1hLT50eF9yaW5nNCA9IHJpbmc7Ci0KLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgNSwgMSwgZG1hNjQpOwotCWlmICghcmluZykKLQkJZ290byBlcnJfZGVzdHJveV90eDQ7Ci0JZG1hLT50eF9yaW5nNSA9IHJpbmc7Ci0KLQkvKiBzZXR1cCBSWCBETUEgY2hhbm5lbHMuICovCi0JcmluZyA9IGJjbTQzeHhfc2V0dXBfZG1hcmluZyhiY20sIDAsIDAsIGRtYTY0KTsKLQlpZiAoIXJpbmcpCi0JCWdvdG8gZXJyX2Rlc3Ryb3lfdHg1OwotCWRtYS0+cnhfcmluZzAgPSByaW5nOwotCi0JaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA1KSB7Ci0JCXJpbmcgPSBiY200M3h4X3NldHVwX2RtYXJpbmcoYmNtLCAzLCAwLCBkbWE2NCk7Ci0JCWlmICghcmluZykKLQkJCWdvdG8gZXJyX2Rlc3Ryb3lfcngwOwotCQlkbWEtPnJ4X3JpbmczID0gcmluZzsKLQl9Ci0KLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVkLWJpdCBETUEgaW5pdGlhbGl6ZWRcbiIsCi0JCShiY20tPmRtYV9tYXNrID09IERNQV82NEJJVF9NQVNLKSA/IDY0IDoKLQkJKGJjbS0+ZG1hX21hc2sgPT0gRE1BXzMyQklUX01BU0spID8gMzIgOiAzMCk7Ci0JZXJyID0gMDsKLW91dDoKLQlyZXR1cm4gZXJyOwotCi1lcnJfZGVzdHJveV9yeDA6Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT5yeF9yaW5nMCk7Ci0JZG1hLT5yeF9yaW5nMCA9IE5VTEw7Ci1lcnJfZGVzdHJveV90eDU6Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nNSk7Ci0JZG1hLT50eF9yaW5nNSA9IE5VTEw7Ci1lcnJfZGVzdHJveV90eDQ6Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nNCk7Ci0JZG1hLT50eF9yaW5nNCA9IE5VTEw7Ci1lcnJfZGVzdHJveV90eDM6Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMyk7Ci0JZG1hLT50eF9yaW5nMyA9IE5VTEw7Ci1lcnJfZGVzdHJveV90eDI6Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMik7Ci0JZG1hLT50eF9yaW5nMiA9IE5VTEw7Ci1lcnJfZGVzdHJveV90eDE6Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMSk7Ci0JZG1hLT50eF9yaW5nMSA9IE5VTEw7Ci1lcnJfZGVzdHJveV90eDA6Ci0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMCk7Ci0JZG1hLT50eF9yaW5nMCA9IE5VTEw7Ci1ub19kbWE6Ci0jaWZkZWYgQ09ORklHX0JDTTQzWFhfUElPCi0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkRNQSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLiIKLQkJCQkiIEZhbGxpbmcgYmFjayB0byBQSU8uXG4iKTsKLQliY20tPl9fdXNpbmdfcGlvID0gMTsKLQlyZXR1cm4gLUVOT1NZUzsKLSNlbHNlCi0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiRkFUQUw6IERNQSBub3Qgc3VwcG9ydGVkIGFuZCBQSU8gbm90IGNvbmZpZ3VyZWQuICIKLQkJCSAgICAiUGxlYXNlIHJlY29tcGlsZSB0aGUgZHJpdmVyIHdpdGggUElPIHN1cHBvcnQuXG4iKTsKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZiAvKiBDT05GSUdfQkNNNDNYWF9QSU8gKi8KLX0KLQotLyogR2VuZXJhdGUgYSBjb29raWUgZm9yIHRoZSBUWCBoZWFkZXIuICovCi1zdGF0aWMgdTE2IGdlbmVyYXRlX2Nvb2tpZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkJICAgaW50IHNsb3QpCi17Ci0JdTE2IGNvb2tpZSA9IDB4MTAwMDsKLQotCS8qIFVzZSB0aGUgdXBwZXIgNCBiaXRzIG9mIHRoZSBjb29raWUgYXMKLQkgKiBETUEgY29udHJvbGxlciBJRCBhbmQgc3RvcmUgdGhlIHNsb3QgbnVtYmVyCi0JICogaW4gdGhlIGxvd2VyIDEyIGJpdHMuCi0JICogTm90ZSB0aGF0IHRoZSBjb29raWUgbXVzdCBuZXZlciBiZSAwLCBhcyB0aGlzCi0JICogaXMgYSBzcGVjaWFsIHZhbHVlIHVzZWQgaW4gUlggcGF0aC4KLQkgKi8KLQlzd2l0Y2ggKHJpbmctPmluZGV4KSB7Ci0JY2FzZSAwOgotCQljb29raWUgPSAweEEwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJY29va2llID0gMHhCMDAwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWNvb2tpZSA9IDB4QzAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQljb29raWUgPSAweEQwMDA7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJY29va2llID0gMHhFMDAwOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWNvb2tpZSA9IDB4RjAwMDsKLQkJYnJlYWs7Ci0JfQotCWFzc2VydCgoKHUxNilzbG90ICYgMHhGMDAwKSA9PSAweDAwMDApOwotCWNvb2tpZSB8PSAodTE2KXNsb3Q7Ci0KLQlyZXR1cm4gY29va2llOwotfQotCi0vKiBJbnNwZWN0IGEgY29va2llIGFuZCBmaW5kIG91dCB0byB3aGljaCBjb250cm9sbGVyL3Nsb3QgaXQgYmVsb25ncy4gKi8KLXN0YXRpYwotc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqIHBhcnNlX2Nvb2tpZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgICAgdTE2IGNvb2tpZSwgaW50ICpzbG90KQotewotCXN0cnVjdCBiY200M3h4X2RtYSAqZG1hID0gYmNtNDN4eF9jdXJyZW50X2RtYShiY20pOwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcgPSBOVUxMOwotCi0Jc3dpdGNoIChjb29raWUgJiAweEYwMDApIHsKLQljYXNlIDB4QTAwMDoKLQkJcmluZyA9IGRtYS0+dHhfcmluZzA7Ci0JCWJyZWFrOwotCWNhc2UgMHhCMDAwOgotCQlyaW5nID0gZG1hLT50eF9yaW5nMTsKLQkJYnJlYWs7Ci0JY2FzZSAweEMwMDA6Ci0JCXJpbmcgPSBkbWEtPnR4X3JpbmcyOwotCQlicmVhazsKLQljYXNlIDB4RDAwMDoKLQkJcmluZyA9IGRtYS0+dHhfcmluZzM7Ci0JCWJyZWFrOwotCWNhc2UgMHhFMDAwOgotCQlyaW5nID0gZG1hLT50eF9yaW5nNDsKLQkJYnJlYWs7Ci0JY2FzZSAweEYwMDA6Ci0JCXJpbmcgPSBkbWEtPnR4X3Jpbmc1OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotCSpzbG90ID0gKGNvb2tpZSAmIDB4MEZGRik7Ci0JYXNzZXJ0KCpzbG90ID49IDAgJiYgKnNsb3QgPCByaW5nLT5ucl9zbG90cyk7Ci0KLQlyZXR1cm4gcmluZzsKLX0KLQotc3RhdGljIHZvaWQgZG1hY29udHJvbGxlcl9wb2tlX3R4KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCi0JCQkJICBpbnQgc2xvdCkKLXsKLQl1MTYgb2Zmc2V0OwotCWludCBkZXNjc2l6ZTsKLQotCS8qIEV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gc3RhcnQuIEJ1ZmZlcnMgYXJlIERNQSBtYXBwZWQgYW5kCi0JICogYXNzb2NpYXRlZCB3aXRoIHNsb3RzLgotCSAqICJzbG90IiBpcyB0aGUgbGFzdCBzbG90IG9mIHRoZSBuZXcgZnJhbWUgd2Ugd2FudCB0byB0cmFuc21pdC4KLQkgKiBDbG9zZSB5b3VyIHNlYXQgYmVsdHMgbm93LCBwbGVhc2UuCi0JICovCi0Jd21iKCk7Ci0Jc2xvdCA9IG5leHRfc2xvdChyaW5nLCBzbG90KTsKLQlvZmZzZXQgPSAocmluZy0+ZG1hNjQpID8gQkNNNDN4eF9ETUE2NF9UWElOREVYIDogQkNNNDN4eF9ETUEzMl9UWElOREVYOwotCWRlc2NzaXplID0gKHJpbmctPmRtYTY0KSA/IHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjNjQpCi0JCTogc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2MzMik7Ci0JYmNtNDN4eF9kbWFfd3JpdGUocmluZywgb2Zmc2V0LAotCQkJKHUzMikoc2xvdCAqIGRlc2NzaXplKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV90eF9mcmFnbWVudChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgdTggY3VyX2ZyYWcpCi17Ci0JaW50IHNsb3Q7Ci0Jc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICpkZXNjOwotCXN0cnVjdCBiY200M3h4X2RtYWRlc2NfbWV0YSAqbWV0YTsKLQlkbWFfYWRkcl90IGRtYWFkZHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJvdW5jZV9za2I7Ci0KLQlhc3NlcnQoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKTsKLQotCXNsb3QgPSByZXF1ZXN0X3Nsb3QocmluZyk7Ci0JZGVzYyA9IGJjbTQzeHhfZG1hX2lkeDJkZXNjKHJpbmcsIHNsb3QsICZtZXRhKTsKLQotCS8qIEFkZCBhIGRldmljZSBzcGVjaWZpYyBUWCBoZWFkZXIuICovCi0JYXNzZXJ0KHNrYl9oZWFkcm9vbShza2IpID49IHNpemVvZihzdHJ1Y3QgYmNtNDN4eF90eGhkcikpOwotCS8qIFJlc2VydmUgZW5vdWdoIGhlYWRyb29tIGZvciB0aGUgZGV2aWNlIHR4IGhlYWRlci4gKi8KLQlfX3NrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBiY200M3h4X3R4aGRyKSk7Ci0JLyogTm93IGNhbGN1bGF0ZSBhbmQgYWRkIHRoZSB0eCBoZWFkZXIuCi0JICogVGhlIHR4IGhlYWRlciBpbmNsdWRlcyB0aGUgUExDUCBoZWFkZXIuCi0JICovCi0JYmNtNDN4eF9nZW5lcmF0ZV90eGhkcihyaW5nLT5iY20sCi0JCQkgICAgICAgKHN0cnVjdCBiY200M3h4X3R4aGRyICopc2tiLT5kYXRhLAotCQkJICAgICAgIHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF90eGhkciksCi0JCQkgICAgICAgc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IGJjbTQzeHhfdHhoZHIpLAotCQkJICAgICAgIChjdXJfZnJhZyA9PSAwKSwKLQkJCSAgICAgICBnZW5lcmF0ZV9jb29raWUocmluZywgc2xvdCkpOwotCWRtYWFkZHIgPSBtYXBfZGVzY2J1ZmZlcihyaW5nLCBza2ItPmRhdGEsIHNrYi0+bGVuLCAxKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hYWRkcikgfHwgZG1hYWRkciArIHNrYi0+bGVuID4gcmluZy0+YmNtLT5kbWFfbWFzaykgewotCQkvKiBjaGlwIGNhbm5vdCBoYW5kbGUgRE1BIHRvL2Zyb20gPiAxR0IsIHVzZSBib3VuY2UgYnVmZmVyIChjb3BpZWQgZnJvbSBiNDQgZHJpdmVyKSAqLwotCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGRtYWFkZHIpKQotCQkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBkbWFhZGRyLCBza2ItPmxlbiwgMSk7Ci0JCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2Ioc2tiLT5sZW4sIEdGUF9BVE9NSUN8R0ZQX0RNQSk7Ci0JCWlmICghYm91bmNlX3NrYikKLQkJCXJldHVybjsKLQkJZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIGJvdW5jZV9za2ItPmRhdGEsIGJvdW5jZV9za2ItPmxlbiwgMSk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcihkbWFhZGRyKSB8fCBkbWFhZGRyICsgc2tiLT5sZW4gPiByaW5nLT5iY20tPmRtYV9tYXNrKSB7Ci0JCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGRtYWFkZHIpKQotCQkJCXVubWFwX2Rlc2NidWZmZXIocmluZywgZG1hYWRkciwgc2tiLT5sZW4sIDEpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkoYm91bmNlX3NrYik7Ci0JCQlhc3NlcnQoMCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHNrYl9wdXQoYm91bmNlX3NrYiwgc2tiLT5sZW4pLAotCQkJCQkgIHNrYi0+bGVuKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJc2tiID0gYm91bmNlX3NrYjsKLQl9Ci0KLQltZXRhLT5za2IgPSBza2I7Ci0JbWV0YS0+ZG1hYWRkciA9IGRtYWFkZHI7Ci0KLQlmaWxsX2Rlc2NyaXB0b3IocmluZywgZGVzYywgZG1hYWRkciwKLQkJCXNrYi0+bGVuLCAxLCAxLCAxKTsKLQotCS8qIE5vdyB0cmFuc2ZlciB0aGUgd2hvbGUgZnJhbWUuICovCi0JZG1hY29udHJvbGxlcl9wb2tlX3R4KHJpbmcsIHNsb3QpOwotfQotCi1pbnQgYmNtNDN4eF9kbWFfdHgoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiKQotewotCS8qIFdlIGp1c3QgcmVjZWl2ZWQgYSBwYWNrZXQgZnJvbSB0aGUga2VybmVsIG5ldHdvcmsgc3Vic3lzdGVtLgotCSAqIEFkZCBoZWFkZXJzIGFuZCBETUEgbWFwIHRoZSBtZW1vcnkuIFBva2UKLQkgKiB0aGUgZGV2aWNlIHRvIHNlbmQgdGhlIHN0dWZmLgotCSAqIE5vdGUgdGhhdCB0aGlzIGlzIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0LgotCSAqLwotCXN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcgPSBiY200M3h4X2N1cnJlbnRfZG1hKGJjbSktPnR4X3JpbmcxOwotCXU4IGk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWFzc2VydChyaW5nLT50eCk7Ci0JaWYgKHVubGlrZWx5KGZyZWVfc2xvdHMocmluZykgPCB0eGItPm5yX2ZyYWdzKSkgewotCQkvKiBUaGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQsCi0JCSAqIGlmIHdlIGFyZSBsb3cgb24gZnJlZSBzbG90cy4KLQkJICogSWYgdGhpcyBldmVyIHRyaWdnZXJzLCB3ZSBoYXZlIHRvIGxvd2VyIHRoZSBzdXNwZW5kX21hcmsuCi0JCSAqLwotCQlkcHJpbnRrbChLRVJOX0VSUiBQRlggIk91dCBvZiBETUEgZGVzY3JpcHRvciBzbG90cyFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdHhiLT5ucl9mcmFnczsgaSsrKSB7Ci0JCXNrYiA9IHR4Yi0+ZnJhZ21lbnRzW2ldOwotCQkvKiBUYWtlIHNrYiBmcm9tIGllZWU4MDIxMV90eGJfZnJlZSAqLwotCQl0eGItPmZyYWdtZW50c1tpXSA9IE5VTEw7Ci0JCWRtYV90eF9mcmFnbWVudChyaW5nLCBza2IsIGkpOwotCX0KLQlpZWVlODAyMTFfdHhiX2ZyZWUodHhiKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGJjbTQzeHhfZG1hX2hhbmRsZV94bWl0c3RhdHVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICBzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzICpzdGF0dXMpCi17Ci0Jc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZzsKLQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKmRlc2M7Ci0Jc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhICptZXRhOwotCWludCBpc19sYXN0X2ZyYWdtZW50OwotCWludCBzbG90OwotCXUzMiB0bXA7Ci0KLQlyaW5nID0gcGFyc2VfY29va2llKGJjbSwgc3RhdHVzLT5jb29raWUsICZzbG90KTsKLQlhc3NlcnQocmluZyk7Ci0JYXNzZXJ0KHJpbmctPnR4KTsKLQl3aGlsZSAoMSkgewotCQlhc3NlcnQoc2xvdCA+PSAwICYmIHNsb3QgPCByaW5nLT5ucl9zbG90cyk7Ci0JCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCBzbG90LCAmbWV0YSk7Ci0KLQkJaWYgKHJpbmctPmRtYTY0KSB7Ci0JCQl0bXAgPSBsZTMyX3RvX2NwdShkZXNjLT5kbWE2NC5jb250cm9sMCk7Ci0JCQlpc19sYXN0X2ZyYWdtZW50ID0gISEodG1wICYgQkNNNDN4eF9ETUE2NF9EQ1RMMF9GUkFNRUVORCk7Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPSBsZTMyX3RvX2NwdShkZXNjLT5kbWEzMi5jb250cm9sKTsKLQkJCWlzX2xhc3RfZnJhZ21lbnQgPSAhISh0bXAgJiBCQ000M3h4X0RNQTMyX0RDVExfRlJBTUVFTkQpOwotCQl9Ci0JCXVubWFwX2Rlc2NidWZmZXIocmluZywgbWV0YS0+ZG1hYWRkciwgbWV0YS0+c2tiLT5sZW4sIDEpOwotCQlmcmVlX2Rlc2NyaXB0b3JfYnVmZmVyKHJpbmcsIG1ldGEsIDEpOwotCQkvKiBFdmVyeXRoaW5nIGJlbG9uZ2luZyB0byB0aGUgc2xvdCBpcyB1bm1hcHBlZAotCQkgKiBhbmQgZnJlZWQsIHNvIHdlIGNhbiByZXR1cm4gaXQuCi0JCSAqLwotCQlyZXR1cm5fc2xvdChyaW5nLCBzbG90KTsKLQotCQlpZiAoaXNfbGFzdF9mcmFnbWVudCkKLQkJCWJyZWFrOwotCQlzbG90ID0gbmV4dF9zbG90KHJpbmcsIHNsb3QpOwotCX0KLQliY20tPnN0YXRzLmxhc3RfdHggPSBqaWZmaWVzOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfcngoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKLQkJICAgaW50ICpzbG90KQotewotCXN0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyAqZGVzYzsKLQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEgKm1ldGE7Ci0Jc3RydWN0IGJjbTQzeHhfcnhoZHIgKnJ4aGRyOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTE2IGxlbjsKLQlpbnQgZXJyOwotCWRtYV9hZGRyX3QgZG1hYWRkcjsKLQotCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCAqc2xvdCwgJm1ldGEpOwotCi0Jc3luY19kZXNjYnVmZmVyX2Zvcl9jcHUocmluZywgbWV0YS0+ZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSk7Ci0Jc2tiID0gbWV0YS0+c2tiOwotCi0JaWYgKHJpbmctPmluZGV4ID09IDMpIHsKLQkJLyogV2UgcmVjZWl2ZWQgYW4geG1pdCBzdGF0dXMuICovCi0JCXN0cnVjdCBiY200M3h4X2h3eG1pdHN0YXR1cyAqaHcgPSAoc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICopc2tiLT5kYXRhOwotCQlzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzIHN0YXQ7Ci0JCWludCBpID0gMDsKLQotCQlzdGF0LmNvb2tpZSA9IGxlMTZfdG9fY3B1KGh3LT5jb29raWUpOwotCQl3aGlsZSAoc3RhdC5jb29raWUgPT0gMCkgewotCQkJaWYgKHVubGlrZWx5KCsraSA+PSAxMDAwMCkpIHsKLQkJCQlhc3NlcnQoMCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQl1ZGVsYXkoMik7Ci0JCQliYXJyaWVyKCk7Ci0JCQlzdGF0LmNvb2tpZSA9IGxlMTZfdG9fY3B1KGh3LT5jb29raWUpOwotCQl9Ci0JCXN0YXQuZmxhZ3MgPSBody0+ZmxhZ3M7Ci0JCXN0YXQuY250MSA9IGh3LT5jbnQxOwotCQlzdGF0LmNudDIgPSBody0+Y250MjsKLQkJc3RhdC5zZXEgPSBsZTE2X3RvX2NwdShody0+c2VxKTsKLQkJc3RhdC51bmtub3duID0gbGUxNl90b19jcHUoaHctPnVua25vd24pOwotCi0JCWJjbTQzeHhfZGVidWdmc19sb2dfdHhzdGF0KHJpbmctPmJjbSwgJnN0YXQpOwotCQliY200M3h4X2RtYV9oYW5kbGVfeG1pdHN0YXR1cyhyaW5nLT5iY20sICZzdGF0KTsKLQkJLyogcmVjeWNsZSB0aGUgZGVzY3JpcHRvciBidWZmZXIuICovCi0JCXN5bmNfZGVzY2J1ZmZlcl9mb3JfZGV2aWNlKHJpbmcsIG1ldGEtPmRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUpOwotCi0JCXJldHVybjsKLQl9Ci0JcnhoZHIgPSAoc3RydWN0IGJjbTQzeHhfcnhoZHIgKilza2ItPmRhdGE7Ci0JbGVuID0gbGUxNl90b19jcHUocnhoZHItPmZyYW1lX2xlbmd0aCk7Ci0JaWYgKGxlbiA9PSAwKSB7Ci0JCWludCBpID0gMDsKLQotCQlkbyB7Ci0JCQl1ZGVsYXkoMik7Ci0JCQliYXJyaWVyKCk7Ci0JCQlsZW4gPSBsZTE2X3RvX2NwdShyeGhkci0+ZnJhbWVfbGVuZ3RoKTsKLQkJfSB3aGlsZSAobGVuID09IDAgJiYgaSsrIDwgNSk7Ci0JCWlmICh1bmxpa2VseShsZW4gPT0gMCkpIHsKLQkJCS8qIHJlY3ljbGUgdGhlIGRlc2NyaXB0b3IgYnVmZmVyLiAqLwotCQkJc3luY19kZXNjYnVmZmVyX2Zvcl9kZXZpY2UocmluZywgbWV0YS0+ZG1hYWRkciwKLQkJCQkJCSAgIHJpbmctPnJ4X2J1ZmZlcnNpemUpOwotCQkJZ290byBkcm9wOwotCQl9Ci0JfQotCWlmICh1bmxpa2VseShsZW4gPiByaW5nLT5yeF9idWZmZXJzaXplKSkgewotCQkvKiBUaGUgZGF0YSBkaWQgbm90IGZpdCBpbnRvIG9uZSBkZXNjcmlwdG9yIGJ1ZmZlcgotCQkgKiBhbmQgaXMgc3BsaXQgb3ZlciBtdWx0aXBsZSBidWZmZXJzLgotCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGFzIHdlIHRyeSB0byBhbGxvY2F0ZSBidWZmZXJzCi0JCSAqIGJpZyBlbm91Z2guIFNvIHNpbXBseSBpZ25vcmUgdGhpcyBwYWNrZXQuCi0JCSAqLwotCQlpbnQgY250ID0gMDsKLQkJczMyIHRtcCA9IGxlbjsKLQotCQl3aGlsZSAoMSkgewotCQkJZGVzYyA9IGJjbTQzeHhfZG1hX2lkeDJkZXNjKHJpbmcsICpzbG90LCAmbWV0YSk7Ci0JCQkvKiByZWN5Y2xlIHRoZSBkZXNjcmlwdG9yIGJ1ZmZlci4gKi8KLQkJCXN5bmNfZGVzY2J1ZmZlcl9mb3JfZGV2aWNlKHJpbmcsIG1ldGEtPmRtYWFkZHIsCi0JCQkJCQkgICByaW5nLT5yeF9idWZmZXJzaXplKTsKLQkJCSpzbG90ID0gbmV4dF9zbG90KHJpbmcsICpzbG90KTsKLQkJCWNudCsrOwotCQkJdG1wIC09IHJpbmctPnJ4X2J1ZmZlcnNpemU7Ci0JCQlpZiAodG1wIDw9IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQkJcHJpbnRrbChLRVJOX0VSUiBQRlggIkRNQSBSWCBidWZmZXIgdG9vIHNtYWxsICIKLQkJCSIobGVuOiAldSwgYnVmZmVyOiAldSwgbnItZHJvcHBlZDogJWQpXG4iLAotCQkJbGVuLCByaW5nLT5yeF9idWZmZXJzaXplLCBjbnQpOwotCQlnb3RvIGRyb3A7Ci0JfQotCWxlbiAtPSBJRUVFODAyMTFfRkNTX0xFTjsKLQotCWRtYWFkZHIgPSBtZXRhLT5kbWFhZGRyOwotCWVyciA9IHNldHVwX3J4X2Rlc2NidWZmZXIocmluZywgZGVzYywgbWV0YSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKLQkJZHByaW50a2woS0VSTl9FUlIgUEZYICJETUEgUlg6IHNldHVwX3J4X2Rlc2NidWZmZXIoKSBmYWlsZWRcbiIpOwotCQlzeW5jX2Rlc2NidWZmZXJfZm9yX2RldmljZShyaW5nLCBkbWFhZGRyLAotCQkJCQkgICByaW5nLT5yeF9idWZmZXJzaXplKTsKLQkJZ290byBkcm9wOwotCX0KLQotCXVubWFwX2Rlc2NidWZmZXIocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCk7Ci0Jc2tiX3B1dChza2IsIGxlbiArIHJpbmctPmZyYW1lb2Zmc2V0KTsKLQlza2JfcHVsbChza2IsIHJpbmctPmZyYW1lb2Zmc2V0KTsKLQotCWVyciA9IGJjbTQzeHhfcngocmluZy0+YmNtLCBza2IsIHJ4aGRyKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLWRyb3A6Ci0JcmV0dXJuOwotfQotCi12b2lkIGJjbTQzeHhfZG1hX3J4KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci0JdTMyIHN0YXR1czsKLQl1MTYgZGVzY3B0cjsKLQlpbnQgc2xvdCwgY3VycmVudF9zbG90OwotI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCi0JaW50IHVzZWRfc2xvdHMgPSAwOwotI2VuZGlmCi0KLQlhc3NlcnQoIXJpbmctPnR4KTsKLQlpZiAocmluZy0+ZG1hNjQpIHsKLQkJc3RhdHVzID0gYmNtNDN4eF9kbWFfcmVhZChyaW5nLCBCQ000M3h4X0RNQTY0X1JYU1RBVFVTKTsKLQkJZGVzY3B0ciA9IChzdGF0dXMgJiBCQ000M3h4X0RNQTY0X1JYU1RBVERQVFIpOwotCQljdXJyZW50X3Nsb3QgPSBkZXNjcHRyIC8gc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2M2NCk7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gYmNtNDN4eF9kbWFfcmVhZChyaW5nLCBCQ000M3h4X0RNQTMyX1JYU1RBVFVTKTsKLQkJZGVzY3B0ciA9IChzdGF0dXMgJiBCQ000M3h4X0RNQTMyX1JYRFBUUik7Ci0JCWN1cnJlbnRfc2xvdCA9IGRlc2NwdHIgLyBzaXplb2Yoc3RydWN0IGJjbTQzeHhfZG1hZGVzYzMyKTsKLQl9Ci0JYXNzZXJ0KGN1cnJlbnRfc2xvdCA+PSAwICYmIGN1cnJlbnRfc2xvdCA8IHJpbmctPm5yX3Nsb3RzKTsKLQotCXNsb3QgPSByaW5nLT5jdXJyZW50X3Nsb3Q7Ci0JZm9yICggOyBzbG90ICE9IGN1cnJlbnRfc2xvdDsgc2xvdCA9IG5leHRfc2xvdChyaW5nLCBzbG90KSkgewotCQlkbWFfcngocmluZywgJnNsb3QpOwotI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCi0JCWlmICgrK3VzZWRfc2xvdHMgPiByaW5nLT5tYXhfdXNlZF9zbG90cykKLQkJCXJpbmctPm1heF91c2VkX3Nsb3RzID0gdXNlZF9zbG90czsKLSNlbmRpZgotCX0KLQlpZiAocmluZy0+ZG1hNjQpIHsKLQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9SWElOREVYLAotCQkJCSh1MzIpKHNsb3QgKiBzaXplb2Yoc3RydWN0IGJjbTQzeHhfZG1hZGVzYzY0KSkpOwotCX0gZWxzZSB7Ci0JCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BMzJfUlhJTkRFWCwKLQkJCQkodTMyKShzbG90ICogc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2MzMikpKTsKLQl9Ci0JcmluZy0+Y3VycmVudF9zbG90ID0gc2xvdDsKLX0KLQotdm9pZCBiY200M3h4X2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci0JYXNzZXJ0KHJpbmctPnR4KTsKLQliY200M3h4X3Bvd2VyX3NhdmluZ19jdGxfYml0cyhyaW5nLT5iY20sIC0xLCAxKTsKLQlpZiAocmluZy0+ZG1hNjQpIHsKLQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9UWENUTCwKLQkJCQliY200M3h4X2RtYV9yZWFkKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhDVEwpCi0JCQkJfCBCQ000M3h4X0RNQTY0X1RYU1VTUEVORCk7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUEzMl9UWENUTCwKLQkJCQliY200M3h4X2RtYV9yZWFkKHJpbmcsIEJDTTQzeHhfRE1BMzJfVFhDVEwpCi0JCQkJfCBCQ000M3h4X0RNQTMyX1RYU1VTUEVORCk7Ci0JfQotfQotCi12b2lkIGJjbTQzeHhfZG1hX3R4X3Jlc3VtZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQotewotCWFzc2VydChyaW5nLT50eCk7Ci0JaWYgKHJpbmctPmRtYTY0KSB7Ci0JCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhDVEwsCi0JCQkJYmNtNDN4eF9kbWFfcmVhZChyaW5nLCBCQ000M3h4X0RNQTY0X1RYQ1RMKQotCQkJCSYgfkJDTTQzeHhfRE1BNjRfVFhTVVNQRU5EKTsKLQl9IGVsc2UgewotCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1RYQ1RMLAotCQkJCWJjbTQzeHhfZG1hX3JlYWQocmluZywgQkNNNDN4eF9ETUEzMl9UWENUTCkKLQkJCQkmIH5CQ000M3h4X0RNQTMyX1RYU1VTUEVORCk7Ci0JfQotCWJjbTQzeHhfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKHJpbmctPmJjbSwgLTEsIC0xKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDExMDVlNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODYgKzAsMCBAQAotI2lmbmRlZiBCQ000M3h4X0RNQV9IXwotI2RlZmluZSBCQ000M3h4X0RNQV9IXwotCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0KLS8qIERNQS1JbnRlcnJ1cHQgcmVhc29ucy4gKi8KLSNkZWZpbmUgQkNNNDN4eF9ETUFJUlFfRkFUQUxNQVNLCSgoMSA8PCAxMCkgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMikgXAotCQkJCQkgfCAoMSA8PCAxNCkgfCAoMSA8PCAxNSkpCi0jZGVmaW5lIEJDTTQzeHhfRE1BSVJRX05PTkZBVEFMTUFTSwkoMSA8PCAxMykKLSNkZWZpbmUgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORQkJKDEgPDwgMTYpCi0KLQotLyoqKiAzMi1iaXQgRE1BIEVuZ2luZS4gKioqLwotCi0vKiAzMi1iaXQgRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLiAqLwotI2RlZmluZSBCQ000M3h4X0RNQTMyX1RYQ1RMCQkJCTB4MDAKLSNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfVFhFTkFCTEUJCQkweDAwMDAwMDAxCi0jZGVmaW5lCQlCQ000M3h4X0RNQTMyX1RYU1VTUEVORAkJCTB4MDAwMDAwMDIKLSNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfVFhMT09QQkFDSwkJMHgwMDAwMDAwNAotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEZMVVNICQkJMHgwMDAwMDAxMAotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEFERFJFWFRfTUFTSwkJMHgwMDAzMDAwMAotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEFERFJFWFRfU0hJRlQJCTE2Ci0jZGVmaW5lIEJDTTQzeHhfRE1BMzJfVFhSSU5HCQkJCTB4MDQKLSNkZWZpbmUgQkNNNDN4eF9ETUEzMl9UWElOREVYCQkJCTB4MDgKLSNkZWZpbmUgQkNNNDN4eF9ETUEzMl9UWFNUQVRVUwkJCQkweDBDCi0jZGVmaW5lCQlCQ000M3h4X0RNQTMyX1RYRFBUUgkJCTB4MDAwMDBGRkYKLSNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfVFhTVEFURQkJCTB4MDAwMEYwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYU1RBVF9ESVNBQkxFRAkweDAwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWFNUQVRfQUNUSVZFCTB4MDAwMDEwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYU1RBVF9JRExFV0FJVAkweDAwMDAyMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWFNUQVRfU1RPUFBFRAkweDAwMDAzMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWFNUQVRfU1VTUAkweDAwMDA0MDAwCi0jZGVmaW5lCQlCQ000M3h4X0RNQTMyX1RYRVJST1IJCQkweDAwMEYwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWEVSUl9OT0VSUgkweDAwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWEVSUl9QUk9UCTB4MDAwMTAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYRVJSX1VOREVSUlVOCTB4MDAwMjAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYRVJSX0JVRlJFQUQJMHgwMDAzMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfVFhFUlJfREVTQ1JFQUQJMHgwMDA0MDAwMAotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEFDVElWRQkJCTB4RkZGMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUEzMl9SWENUTAkJCQkweDEwCi0jZGVmaW5lCQlCQ000M3h4X0RNQTMyX1JYRU5BQkxFCQkJMHgwMDAwMDAwMQotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWEZST0ZGX01BU0sJCTB4MDAwMDAwRkUKLSNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfUlhGUk9GRl9TSElGVAkJMQotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWERJUkVDVEZJRk8JCTB4MDAwMDAxMDAKLSNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfUlhBRERSRVhUX01BU0sJCTB4MDAwMzAwMDAKLSNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfUlhBRERSRVhUX1NISUZUCQkxNgotI2RlZmluZSBCQ000M3h4X0RNQTMyX1JYUklORwkJCQkweDE0Ci0jZGVmaW5lIEJDTTQzeHhfRE1BMzJfUlhJTkRFWAkJCQkweDE4Ci0jZGVmaW5lIEJDTTQzeHhfRE1BMzJfUlhTVEFUVVMJCQkJMHgxQwotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWERQVFIJCQkweDAwMDAwRkZGCi0jZGVmaW5lCQlCQ000M3h4X0RNQTMyX1JYU1RBVEUJCQkweDAwMDBGMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWFNUQVRfRElTQUJMRUQJMHgwMDAwMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhTVEFUX0FDVElWRQkweDAwMDAxMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWFNUQVRfSURMRVdBSVQJMHgwMDAwMjAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhTVEFUX1NUT1BQRUQJMHgwMDAwMzAwMAotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWEVSUk9SCQkJMHgwMDBGMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhFUlJfTk9FUlIJMHgwMDAwMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhFUlJfUFJPVAkweDAwMDEwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWEVSUl9PVkVSRkxPVwkweDAwMDIwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWEVSUl9CVUZXUklURQkweDAwMDMwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWEVSUl9ERVNDUkVBRAkweDAwMDQwMDAwCi0jZGVmaW5lCQlCQ000M3h4X0RNQTMyX1JYQUNUSVZFCQkJMHhGRkYwMDAwMAotCi0vKiAzMi1iaXQgRE1BIGRlc2NyaXB0b3IuICovCi1zdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIgewotCV9fbGUzMiBjb250cm9sOwotCV9fbGUzMiBhZGRyZXNzOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0jZGVmaW5lIEJDTTQzeHhfRE1BMzJfRENUTF9CWVRFQ05UCQkweDAwMDAxRkZGCi0jZGVmaW5lIEJDTTQzeHhfRE1BMzJfRENUTF9BRERSRVhUX01BU0sJCTB4MDAwMzAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUEzMl9EQ1RMX0FERFJFWFRfU0hJRlQJMTYKLSNkZWZpbmUgQkNNNDN4eF9ETUEzMl9EQ1RMX0RUQUJMRUVORAkJMHgxMDAwMDAwMAotI2RlZmluZSBCQ000M3h4X0RNQTMyX0RDVExfSVJRCQkJMHgyMDAwMDAwMAotI2RlZmluZSBCQ000M3h4X0RNQTMyX0RDVExfRlJBTUVFTkQJCTB4NDAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUEzMl9EQ1RMX0ZSQU1FU1RBUlQJCTB4ODAwMDAwMDAKLQotLyogQWRkcmVzcyBmaWVsZCBSb3V0aW5nIHZhbHVlLiAqLwotI2RlZmluZSBCQ000M3h4X0RNQTMyX1JPVVRJTkcJCQkweEMwMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfRE1BMzJfUk9VVElOR19TSElGVAkJMzAKLSNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfTk9UUkFOUwkJMHgwMDAwMDAwMAotI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9DTElFTlRUUkFOUwkweDQwMDAwMDAwCi0KLQotCi0vKioqIDY0LWJpdCBETUEgRW5naW5lLiAqKiovCi0KLS8qIDY0LWJpdCBETUEgY29udHJvbGxlciByZWdpc3RlcnMuICovCi0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfVFhDVEwJCQkJMHgwMAotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWEVOQUJMRQkJCTB4MDAwMDAwMDEKLSNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfVFhTVVNQRU5ECQkJMHgwMDAwMDAwMgotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWExPT1BCQUNLCQkweDAwMDAwMDA0Ci0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYRkxVU0gJCQkweDAwMDAwMDEwCi0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYQUREUkVYVF9NQVNLCQkweDAwMDMwMDAwCi0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYQUREUkVYVF9TSElGVAkJMTYKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9UWElOREVYCQkJCTB4MDQKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9UWFJJTkdMTwkJCQkweDA4Ci0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfVFhSSU5HSEkJCQkJMHgwQwotI2RlZmluZSBCQ000M3h4X0RNQTY0X1RYU1RBVFVTCQkJCTB4MTAKLSNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfVFhTVEFURFBUUgkJMHgwMDAwMUZGRgotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWFNUQVQJCQkweEYwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWFNUQVRfRElTQUJMRUQJMHgwMDAwMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhTVEFUX0FDVElWRQkweDEwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWFNUQVRfSURMRVdBSVQJMHgyMDAwMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhTVEFUX1NUT1BQRUQJMHgzMDAwMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhTVEFUX1NVU1AJMHg0MDAwMDAwMAotI2RlZmluZSBCQ000M3h4X0RNQTY0X1RYRVJST1IJCQkJMHgxNAotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWEVSUkRQVFIJCQkweDAwMDFGRkZGCi0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYRVJSCQkJMHhGMDAwMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhFUlJfTk9FUlIJMHgwMDAwMDAwMAotI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhFUlJfUFJPVAkweDEwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9VTkRFUlJVTgkweDIwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9UUkFOU0ZFUgkweDMwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9ERVNDUkVBRAkweDQwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9DT1JFCTB4NTAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9SWENUTAkJCQkweDIwCi0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X1JYRU5BQkxFCQkJMHgwMDAwMDAwMQotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9SWEZST0ZGX01BU0sJCTB4MDAwMDAwRkUKLSNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhGUk9GRl9TSElGVAkJMQotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9SWERJUkVDVEZJRk8JCTB4MDAwMDAxMDAKLSNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhBRERSRVhUX01BU0sJCTB4MDAwMzAwMDAKLSNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhBRERSRVhUX1NISUZUCQkxNgotI2RlZmluZSBCQ000M3h4X0RNQTY0X1JYSU5ERVgJCQkJMHgyNAotI2RlZmluZSBCQ000M3h4X0RNQTY0X1JYUklOR0xPCQkJCTB4MjgKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9SWFJJTkdISQkJCQkweDJDCi0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfUlhTVEFUVVMJCQkJMHgzMAotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9SWFNUQVREUFRSCQkweDAwMDAxRkZGCi0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X1JYU1RBVAkJCTB4RjAwMDAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYU1RBVF9ESVNBQkxFRAkweDAwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWFNUQVRfQUNUSVZFCTB4MTAwMDAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYU1RBVF9JRExFV0FJVAkweDIwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWFNUQVRfU1RPUFBFRAkweDMwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWFNUQVRfU1VTUAkweDQwMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfUlhFUlJPUgkJCQkweDM0Ci0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X1JYRVJSRFBUUgkJCTB4MDAwMUZGRkYKLSNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhFUlIJCQkweEYwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWEVSUl9OT0VSUgkweDAwMDAwMDAwCi0jZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWEVSUl9QUk9UCTB4MTAwMDAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX1VOREVSUlVOCTB4MjAwMDAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX1RSQU5TRkVSCTB4MzAwMDAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX0RFU0NSRUFECTB4NDAwMDAwMDAKLSNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX0NPUkUJMHg1MDAwMDAwMAotCi0vKiA2NC1iaXQgRE1BIGRlc2NyaXB0b3IuICovCi1zdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjNjQgewotCV9fbGUzMiBjb250cm9sMDsKLQlfX2xlMzIgY29udHJvbDE7Ci0JX19sZTMyIGFkZHJlc3NfbG93OwotCV9fbGUzMiBhZGRyZXNzX2hpZ2g7Ci19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9EQ1RMMF9EVEFCTEVFTkQJCTB4MTAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9EQ1RMMF9JUlEJCQkweDIwMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfRENUTDBfRlJBTUVFTkQJCTB4NDAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9EQ1RMMF9GUkFNRVNUQVJUCQkweDgwMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfRENUTDFfQllURUNOVAkJMHgwMDAwMUZGRgotI2RlZmluZSBCQ000M3h4X0RNQTY0X0RDVEwxX0FERFJFWFRfTUFTSwkweDAwMDMwMDAwCi0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfRENUTDFfQUREUkVYVF9TSElGVAkxNgotCi0vKiBBZGRyZXNzIGZpZWxkIFJvdXRpbmcgdmFsdWUuICovCi0jZGVmaW5lIEJDTTQzeHhfRE1BNjRfUk9VVElORwkJCTB4QzAwMDAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUE2NF9ST1VUSU5HX1NISUZUCQkzMAotI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9OT1RSQU5TCQkweDAwMDAwMDAwCi0jZGVmaW5lCQlCQ000M3h4X0RNQTY0X0NMSUVOVFRSQU5TCTB4ODAwMDAwMDAKLQotCi0KLXN0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyB7Ci0JdW5pb24gewotCQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIgZG1hMzI7Ci0JCXN0cnVjdCBiY200M3h4X2RtYWRlc2M2NCBkbWE2NDsKLQl9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLS8qIE1pc2MgRE1BIGNvbnN0YW50cyAqLwotI2RlZmluZSBCQ000M3h4X0RNQV9SSU5HTUVNU0laRQkJUEFHRV9TSVpFCi0jZGVmaW5lIEJDTTQzeHhfRE1BMF9SWF9GUkFNRU9GRlNFVAkzMAotI2RlZmluZSBCQ000M3h4X0RNQTNfUlhfRlJBTUVPRkZTRVQJMAotCi0KLS8qIERNQSBlbmdpbmUgdHVuaW5nIGtub2JzICovCi0jZGVmaW5lIEJDTTQzeHhfVFhSSU5HX1NMT1RTCQk1MTIKLSNkZWZpbmUgQkNNNDN4eF9SWFJJTkdfU0xPVFMJCTY0Ci0jZGVmaW5lIEJDTTQzeHhfRE1BMF9SWF9CVUZGRVJTSVpFCSgyMzA0ICsgMTAwKQotI2RlZmluZSBCQ000M3h4X0RNQTNfUlhfQlVGRkVSU0laRQkxNgotLyogU3VzcGVuZCB0aGUgdHggcXVldWUsIGlmIGxlc3MgdGhhbiB0aGlzIHBlcmNlbnQgc2xvdHMgYXJlIGZyZWUuICovCi0jZGVmaW5lIEJDTTQzeHhfVFhTVVNQRU5EX1BFUkNFTlQJMjAKLS8qIFJlc3VtZSB0aGUgdHggcXVldWUsIGlmIG1vcmUgdGhhbiB0aGlzIHBlcmNlbnQgc2xvdHMgYXJlIGZyZWUuICovCi0jZGVmaW5lIEJDTTQzeHhfVFhSRVNVTUVfUEVSQ0VOVAk1MAotCi0KLQotI2lmZGVmIENPTkZJR19CQ000M1hYX0RNQQotCi0KLXN0cnVjdCBza19idWZmOwotc3RydWN0IGJjbTQzeHhfcHJpdmF0ZTsKLXN0cnVjdCBiY200M3h4X3htaXRzdGF0dXM7Ci0KLQotc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhIHsKLQkvKiBUaGUga2VybmVsIERNQS1hYmxlIGJ1ZmZlci4gKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCS8qIERNQSBiYXNlIGJ1cy1hZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yIGJ1ZmZlci4gKi8KLQlkbWFfYWRkcl90IGRtYWFkZHI7Ci19OwotCi1zdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nIHsKLQkvKiBLZXJuZWwgdmlydHVhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJpbmcgbWVtb3J5LiAqLwotCXZvaWQgKmRlc2NiYXNlOwotCS8qIE1ldGEgZGF0YSBhYm91dCBhbGwgZGVzY3JpcHRvcnMuICovCi0Jc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhICptZXRhOwotCS8qIERNQSBSb3V0aW5nIHZhbHVlLiAqLwotCXUzMiByb3V0aW5nOwotCS8qIChVbmFkanVzdGVkKSBETUEgYmFzZSBidXMtYWRkcmVzcyBvZiB0aGUgcmluZyBtZW1vcnkuICovCi0JZG1hX2FkZHJfdCBkbWFiYXNlOwotCS8qIE51bWJlciBvZiBkZXNjcmlwdG9yIHNsb3RzIGluIHRoZSByaW5nLiAqLwotCWludCBucl9zbG90czsKLQkvKiBOdW1iZXIgb2YgdXNlZCBkZXNjcmlwdG9yIHNsb3RzLiAqLwotCWludCB1c2VkX3Nsb3RzOwotCS8qIEN1cnJlbnRseSB1c2VkIHNsb3QgaW4gdGhlIHJpbmcuICovCi0JaW50IGN1cnJlbnRfc2xvdDsKLQkvKiBNYXJrcyB0byBzdXNwZW5kL3Jlc3VtZSB0aGUgcXVldWUuICovCi0JaW50IHN1c3BlbmRfbWFyazsKLQlpbnQgcmVzdW1lX21hcms7Ci0JLyogRnJhbWVvZmZzZXQgaW4gb2N0ZXRzLiAqLwotCXUzMiBmcmFtZW9mZnNldDsKLQkvKiBEZXNjcmlwdG9yIGJ1ZmZlciBzaXplLiAqLwotCXUxNiByeF9idWZmZXJzaXplOwotCS8qIFRoZSBNTUlPIGJhc2UgcmVnaXN0ZXIgb2YgdGhlIERNQSBjb250cm9sbGVyLiAqLwotCXUxNiBtbWlvX2Jhc2U7Ci0JLyogRE1BIGNvbnRyb2xsZXIgaW5kZXggbnVtYmVyICgwLTUpLiAqLwotCWludCBpbmRleDsKLQkvKiBCb29sZWFuLiBJcyB0aGlzIGEgVFggcmluZz8gKi8KLQl1OCB0eDsKLQkvKiBCb29sZWFuLiA2NGJpdCBETUEgaWYgdHJ1ZSwgMzJiaXQgRE1BIG90aGVyd2lzZS4gKi8KLQl1OCBkbWE2NDsKLQkvKiBCb29sZWFuLiBBcmUgdHJhbnNmZXJzIHN1c3BlbmRlZCBvbiB0aGlzIHJpbmc/ICovCi0JdTggc3VzcGVuZGVkOwotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbTsKLSNpZmRlZiBDT05GSUdfQkNNNDNYWF9ERUJVRwotCS8qIE1heGltdW0gbnVtYmVyIG9mIHVzZWQgc2xvdHMuICovCi0JaW50IG1heF91c2VkX3Nsb3RzOwotI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX0RFQlVHKi8KLX07Ci0KLQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfZG1hX2Rlc2MyaWR4KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCi0JCQkgc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICpkZXNjKQotewotCWlmIChyaW5nLT5kbWE2NCkgewotCQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjNjQgKmRkNjQgPSByaW5nLT5kZXNjYmFzZTsKLQkJcmV0dXJuIChpbnQpKCYoZGVzYy0+ZG1hNjQpIC0gZGQ2NCk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGJjbTQzeHhfZG1hZGVzYzMyICpkZDMyID0gcmluZy0+ZGVzY2Jhc2U7Ci0JCXJldHVybiAoaW50KSgmKGRlc2MtPmRtYTMyKSAtIGRkMzIpOwotCX0KLX0KLQotc3RhdGljIGlubGluZQotc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICogYmNtNDN4eF9kbWFfaWR4MmRlc2Moc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKLQkJCQkJCSAgICAgIGludCBzbG90LAotCQkJCQkJICAgICAgc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhICoqbWV0YSkKLXsKLQkqbWV0YSA9ICYocmluZy0+bWV0YVtzbG90XSk7Ci0JaWYgKHJpbmctPmRtYTY0KSB7Ci0JCXN0cnVjdCBiY200M3h4X2RtYWRlc2M2NCAqZGQ2NCA9IHJpbmctPmRlc2NiYXNlOwotCQlyZXR1cm4gKHN0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyAqKSgmKGRkNjRbc2xvdF0pKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIgKmRkMzIgPSByaW5nLT5kZXNjYmFzZTsKLQkJcmV0dXJuIChzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKikoJihkZDMyW3Nsb3RdKSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lCi11MzIgYmNtNDN4eF9kbWFfcmVhZChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkgICAgIHUxNiBvZmZzZXQpCi17Ci0JcmV0dXJuIGJjbTQzeHhfcmVhZDMyKHJpbmctPmJjbSwgcmluZy0+bW1pb19iYXNlICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X2RtYV93cml0ZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkgICAgICAgdTE2IG9mZnNldCwgdTMyIHZhbHVlKQotewotCWJjbTQzeHhfd3JpdGUzMihyaW5nLT5iY20sIHJpbmctPm1taW9fYmFzZSArIG9mZnNldCwgdmFsdWUpOwotfQotCi0KLWludCBiY200M3h4X2RtYV9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci12b2lkIGJjbTQzeHhfZG1hX2ZyZWUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLQotaW50IGJjbTQzeHhfZG1hY29udHJvbGxlcl9yeF9yZXNldChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgdTE2IGRtYWNvbnRyb2xsZXJfbW1pb19iYXNlLAotCQkJCSAgIGludCBkbWE2NCk7Ci1pbnQgYmNtNDN4eF9kbWFjb250cm9sbGVyX3R4X3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICB1MTYgZG1hY29udHJvbGxlcl9tbWlvX2Jhc2UsCi0JCQkJICAgaW50IGRtYTY0KTsKLQotdTE2IGJjbTQzeHhfZG1hY29udHJvbGxlcl9iYXNlKGludCBkbWE2NGJpdCwgaW50IGRtYWNvbnRyb2xsZXJfaWR4KTsKLQotdm9pZCBiY200M3h4X2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpOwotdm9pZCBiY200M3h4X2RtYV90eF9yZXN1bWUoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZyk7Ci0KLXZvaWQgYmNtNDN4eF9kbWFfaGFuZGxlX3htaXRzdGF0dXMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgIHN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnN0YXR1cyk7Ci0KLWludCBiY200M3h4X2RtYV90eChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIpOwotdm9pZCBiY200M3h4X2RtYV9yeChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKTsKLQotLyogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZG1hIG1hc2sgZm9yIHRoaXMgZGV2aWNlLiAqLwotc3RhdGljIGlubGluZQotdTY0IGJjbTQzeHhfZ2V0X3N1cHBvcnRlZF9kbWFfbWFzayhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JaW50IGRtYTY0ID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVISUdIKSAmCi0JCQkJICAgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0RNQTY0QklUOwotCXUxNiBtbWlvX2Jhc2UgPSBiY200M3h4X2RtYWNvbnRyb2xsZXJfYmFzZShkbWE2NCwgMCk7Ci0JdTMyIG1hc2sgPSBCQ000M3h4X0RNQTMyX1RYQUREUkVYVF9NQVNLOwotCi0JaWYgKGRtYTY0KQotCQlyZXR1cm4gRE1BXzY0QklUX01BU0s7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgbW1pb19iYXNlICsgQkNNNDN4eF9ETUEzMl9UWENUTCwgbWFzayk7Ci0JaWYgKGJjbTQzeHhfcmVhZDMyKGJjbSwgbW1pb19iYXNlICsgQkNNNDN4eF9ETUEzMl9UWENUTCkgJiBtYXNrKQotCQlyZXR1cm4gRE1BXzMyQklUX01BU0s7Ci0JcmV0dXJuIERNQV8zMEJJVF9NQVNLOwotfQotCi0jZWxzZSAvKiBDT05GSUdfQkNNNDNYWF9ETUEgKi8KLQotCi1zdGF0aWMgaW5saW5lCi1pbnQgYmNtNDN4eF9kbWFfaW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lCi12b2lkIGJjbTQzeHhfZG1hX2ZyZWUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotfQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfZG1hY29udHJvbGxlcl9yeF9yZXNldChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgdTE2IGRtYWNvbnRyb2xsZXJfbW1pb19iYXNlLAotCQkJCSAgIGludCBkbWE2NCkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUKLWludCBiY200M3h4X2RtYWNvbnRyb2xsZXJfdHhfcmVzZXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgIHUxNiBkbWFjb250cm9sbGVyX21taW9fYmFzZSwKLQkJCQkgICBpbnQgZG1hNjQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lCi1pbnQgYmNtNDN4eF9kbWFfdHgoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X2RtYV9oYW5kbGVfeG1pdHN0YXR1cyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgc3RydWN0IGJjbTQzeHhfeG1pdHN0YXR1cyAqc3RhdHVzKQotewotfQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X2RtYV9yeChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQotewotfQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCi17Ci19Ci1zdGF0aWMgaW5saW5lCi12b2lkIGJjbTQzeHhfZG1hX3R4X3Jlc3VtZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQotewotfQotCi0jZW5kaWYgLyogQ09ORklHX0JDTTQzWFhfRE1BICovCi0jZW5kaWYgLyogQkNNNDN4eF9ETUFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZXRodG9vbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmRmNmEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9ldGh0b29sLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotCi0gIEJyb2FkY29tIEJDTTQzeHggd2lyZWxlc3MgZHJpdmVyCi0KLSAgZXRodG9vbCBzdXBwb3J0Ci0KLSAgQ29weXJpZ2h0IChjKSAyMDA2IEphc29uIEx1bnogPGx1bnpAZmFsb29sZXkub3JnPgotCi0gIFNvbWUgY29kZSBpbiB0aGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSA4MTM5dG9vLmMgZHJpdmVyCi0gIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIEdhcnppawotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLSNpbmNsdWRlICJiY200M3h4LmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9ldGh0b29sLmgiCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihkZXYpOwotCi0Jc3RybmNweShpbmZvLT5kcml2ZXIsIEtCVUlMRF9NT0ROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7Ci0Jc3RybmNweShpbmZvLT52ZXJzaW9uLCB1dHNuYW1lKCktPnJlbGVhc2UsIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYmNtLT5wY2lfZGV2KSwgRVRIVE9PTF9CVVNJTkZPX0xFTik7Ci19Ci0KLWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiY200M3h4X2V0aHRvb2xfb3BzID0gewotCS5nZXRfZHJ2aW5mbyA9IGJjbTQzeHhfZ2V0X2RydmluZm8sCi0JLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZXRodG9vbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2V0aHRvb2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY4ZDQyZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZXRodG9vbC5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaWZuZGVmIEJDTTQzeHhfRVRIVE9PTF9IXwotI2RlZmluZSBCQ000M3h4X0VUSFRPT0xfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiY200M3h4X2V0aHRvb2xfb3BzOwotCi0jZW5kaWYgLyogQkNNNDN4eF9FVEhUT09MX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfaWx0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfaWx0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYjhkYmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2lsdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUyICswLDAgQEAKLS8qCi0KLSAgQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIKLQotICBDb3B5cmlnaHQgKGMpIDIwMDUgTWFydGluIExhbmdlciA8bWFydGluLWxhbmdlckBnbXguZGU+LAotICAgICAgICAgICAgICAgICAgICAgU3RlZmFubyBCcml2aW8gPHN0M0ByaXNldXAubmV0PgotICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAgICAgICAgICAgICAgICAgICAgIERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgotICAgICAgICAgICAgICAgICAgICAgQW5kcmVhcyBKYWdnaSA8YW5kcmVhcy5qYWdnaUB3YXRlcndhdmUuY2g+Ci0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8KLQotI2luY2x1ZGUgImJjbTQzeHguaCIKLSNpbmNsdWRlICJiY200M3h4X2lsdC5oIgotI2luY2x1ZGUgImJjbTQzeHhfcGh5LmgiCi0KLQotLyoqKiogSW5pdGlhbCBJbnRlcm5hbCBMb29rdXAgVGFibGVzICoqKiovCi0KLWNvbnN0IHUzMiBiY200M3h4X2lsdF9yb3RvcltCQ000M3h4X0lMVF9ST1RPUl9TSVpFXSA9IHsKLQkweEZFQjkzRkZELCAweEZFQzYzRkZELCAvKiAwICovCi0JMHhGRUQyM0ZGRCwgMHhGRURGM0ZGRCwKLQkweEZFRUMzRkZFLCAweEZFRjgzRkZFLAotCTB4RkYwNTNGRkUsIDB4RkYxMTNGRkUsCi0JMHhGRjFFM0ZGRSwgMHhGRjJBM0ZGRiwgLyogOCAqLwotCTB4RkYzNzNGRkYsIDB4RkY0NDNGRkYsCi0JMHhGRjUwM0ZGRiwgMHhGRjVEM0ZGRiwKLQkweEZGNjkzRkZGLCAweEZGNzYzRkZGLAotCTB4RkY4MjQwMDAsIDB4RkY4RjQwMDAsIC8qIDE2ICovCi0JMHhGRjlCNDAwMCwgMHhGRkE4NDAwMCwKLQkweEZGQjU0MDAwLCAweEZGQzE0MDAwLAotCTB4RkZDRTQwMDAsIDB4RkZEQTQwMDAsCi0JMHhGRkU3NDAwMCwgMHhGRkYzNDAwMCwgLyogMjQgKi8KLQkweDAwMDA0MDAwLCAweDAwMEQ0MDAwLAotCTB4MDAxOTQwMDAsIDB4MDAyNjQwMDAsCi0JMHgwMDMyNDAwMCwgMHgwMDNGNDAwMCwKLQkweDAwNEI0MDAwLCAweDAwNTg0MDAwLCAvKiAzMiAqLwotCTB4MDA2NTQwMDAsIDB4MDA3MTQwMDAsCi0JMHgwMDdFNDAwMCwgMHgwMDhBM0ZGRiwKLQkweDAwOTczRkZGLCAweDAwQTMzRkZGLAotCTB4MDBCMDNGRkYsIDB4MDBCQzNGRkYsIC8qIDQwICovCi0JMHgwMEM5M0ZGRiwgMHgwMEQ2M0ZGRiwKLQkweDAwRTIzRkZFLCAweDAwRUYzRkZFLAotCTB4MDBGQjNGRkUsIDB4MDEwODNGRkUsCi0JMHgwMTE0M0ZGRSwgMHgwMTIxM0ZGRCwgLyogNDggKi8KLQkweDAxMkUzRkZELCAweDAxM0EzRkZELAotCTB4MDE0NzNGRkQsCi19OwotCi1jb25zdCB1MzIgYmNtNDN4eF9pbHRfcmV0YXJkW0JDTTQzeHhfSUxUX1JFVEFSRF9TSVpFXSA9IHsKLQkweERCOTNDQjg3LCAweEQ2NjZDRjY0LCAvKiAwICovCi0JMHhEMUZERDM1OCwgMHhDREE2RDgyNiwKLQkweENBMzhERDlGLCAweEM3MjlFMkI0LAotCTB4QzQ2OUU4OEUsIDB4QzI2QUVFMkIsCi0JMHhDMERFRjQ2QywgMHhDMDczRkE2MiwgLyogOCAqLwotCTB4QzAxRDAwRDUsIDB4QzA3NjA3NDMsCi0JMHhDMTU2MEQxRSwgMHhDMkU1MTM2OSwKLQkweEM0RUQxOEZGLCAweEM3QUMxRUQ3LAotCTB4Q0IyODIzQjIsIDB4Q0VGQTI4RDksIC8qIDE2ICovCi0JMHhEMkY2MkQzRiwgMHhEN0JCMzE5NywKLQkweERDRTUzNTY4LCAweEUxRkUzODc1LAotCTB4RTdEMTNCMzUsIDB4RUQ2NjNEMzUsCi0JMHhGMzlCM0VDNCwgMHhGOThFM0ZBNywgLyogMjQgKi8KLQkweDAwMDA0MDAwLCAweDA2NzIzRkE3LAotCTB4MEM2NTNFQzQsIDB4MTI5QTNEMzUsCi0JMHgxODJGM0IzNSwgMHgxRTAyMzg3NSwKLQkweDIzMUIzNTY4LCAweDI4NDUzMTk3LCAvKiAzMiAqLwotCTB4MkQwQTJEM0YsIDB4MzEwNjI4RDksCi0JMHgzNEQ4MjNCMiwgMHgzODU0MUVENywKLQkweDNCMTMxOEZGLCAweDNEMUIxMzY5LAotCTB4M0VBQTBEMUUsIDB4M0Y4QTA3NDMsIC8qIDQwICovCi0JMHgzRkUzMDBENSwgMHgzRjhERkE2MiwKLQkweDNGMjJGNDZDLCAweDNEOTZFRTJCLAotCTB4M0I5N0U4OEUsIDB4MzhEN0UyQjQsCi0JMHgzNUM4REQ5RiwgMHgzMjVBRDgyNiwgLyogNDggKi8KLQkweDJFMDNEMzU4LCAweDI5OUFDRjY0LAotCTB4MjQ2RENCODcsCi19OwotCi1jb25zdCB1MTYgYmNtNDN4eF9pbHRfZmluZWZyZXFhW0JDTTQzeHhfSUxUX0ZJTkVGUkVRQV9TSVpFXSA9IHsKLQkweDAwODIsIDB4MDA4MiwgMHgwMTAyLCAweDAxODIsIC8qIDAgKi8KLSAJMHgwMjAyLCAweDAyODIsIDB4MDMwMiwgMHgwMzgyLAotIAkweDA0MDIsIDB4MDQ4MiwgMHgwNTAyLCAweDA1ODIsCi0gCTB4MDVFMiwgMHgwNjYyLCAweDA2RTIsIDB4MDc2MiwKLSAJMHgwN0UyLCAweDA4NDIsIDB4MDhDMiwgMHgwOTQyLCAvKiAxNiAqLwotIAkweDA5QzIsIDB4MEEyMiwgMHgwQUEyLCAweDBCMDIsCi0gCTB4MEI4MiwgMHgwQkUyLCAweDBDNjIsIDB4MENDMiwKLSAJMHgwRDQyLCAweDBEQTIsIDB4MEUwMiwgMHgwRTYyLAotIAkweDBFRTIsIDB4MEY0MiwgMHgwRkEyLCAweDEwMDIsIC8qIDMyICovCi0gCTB4MTA2MiwgMHgxMEMyLCAweDExMjIsIDB4MTE4MiwKLSAJMHgxMUUyLCAweDEyNDIsIDB4MTJBMiwgMHgxMkUyLAotIAkweDEzNDIsIDB4MTNBMiwgMHgxNDAyLCAweDE0NDIsCi0gCTB4MTRBMiwgMHgxNEUyLCAweDE1NDIsIDB4MTU4MiwgLyogNDggKi8KLSAJMHgxNUUyLCAweDE2MjIsIDB4MTY2MiwgMHgxNkMxLAotIAkweDE3MDEsIDB4MTc0MSwgMHgxNzgxLCAweDE3RTEsCi0gCTB4MTgyMSwgMHgxODYxLCAweDE4QTEsIDB4MThFMSwKLSAJMHgxOTIxLCAweDE5NjEsIDB4MTlBMSwgMHgxOUUxLCAvKiA2NCAqLwotIAkweDFBMjEsIDB4MUE2MSwgMHgxQUExLCAweDFBQzEsCi0gCTB4MUIwMSwgMHgxQjQxLCAweDFCODEsIDB4MUJBMSwKLSAJMHgxQkUxLCAweDFDMjEsIDB4MUM0MSwgMHgxQzgxLAotIAkweDFDQTEsIDB4MUNFMSwgMHgxRDAxLCAweDFENDEsIC8qIDgwICovCi0gCTB4MUQ2MSwgMHgxREExLCAweDFEQzEsIDB4MUUwMSwKLSAJMHgxRTIxLCAweDFFNjEsIDB4MUU4MSwgMHgxRUExLAotIAkweDFFRTEsIDB4MUYwMSwgMHgxRjIxLCAweDFGNDEsCi0gCTB4MUY4MSwgMHgxRkExLCAweDFGQzEsIDB4MUZFMSwgLyogOTYgKi8KLSAJMHgyMDAxLCAweDIwNDEsIDB4MjA2MSwgMHgyMDgxLAotIAkweDIwQTEsIDB4MjBDMSwgMHgyMEUxLCAweDIxMDEsCi0gCTB4MjEyMSwgMHgyMTQxLCAweDIxNjEsIDB4MjE4MSwKLSAJMHgyMUExLCAweDIxQzEsIDB4MjFFMSwgMHgyMjAxLCAvKiAxMTIgKi8KLSAJMHgyMjIxLCAweDIyNDEsIDB4MjI2MSwgMHgyMjgxLAotIAkweDIyQTEsIDB4MjJDMSwgMHgyMkMxLCAweDIyRTEsCi0gCTB4MjMwMSwgMHgyMzIxLCAweDIzNDEsIDB4MjM2MSwKLSAJMHgyMzYxLCAweDIzODEsIDB4MjNBMSwgMHgyM0MxLCAvKiAxMjggKi8KLSAJMHgyM0UxLCAweDIzRTEsIDB4MjQwMSwgMHgyNDIxLAotIAkweDI0NDEsIDB4MjQ0MSwgMHgyNDYxLCAweDI0ODEsCi0gCTB4MjQ4MSwgMHgyNEExLCAweDI0QzEsIDB4MjRDMSwKLSAJMHgyNEUxLCAweDI1MDEsIDB4MjUwMSwgMHgyNTIxLCAvKiAxNDQgKi8KLSAJMHgyNTQxLCAweDI1NDEsIDB4MjU2MSwgMHgyNTYxLAotIAkweDI1ODEsIDB4MjVBMSwgMHgyNUExLCAweDI1QzEsCi0gCTB4MjVDMSwgMHgyNUUxLCAweDI2MDEsIDB4MjYwMSwKLSAJMHgyNjIxLCAweDI2MjEsIDB4MjY0MSwgMHgyNjQxLCAvKiAxNjAgKi8KLSAJMHgyNjYxLCAweDI2NjEsIDB4MjY4MSwgMHgyNjgxLAotIAkweDI2QTEsIDB4MjZBMSwgMHgyNkMxLCAweDI2QzEsCi0gCTB4MjZFMSwgMHgyNkUxLCAweDI3MDEsIDB4MjcwMSwKLSAJMHgyNzIxLCAweDI3MjEsIDB4Mjc0MCwgMHgyNzQwLCAvKiAxNzYgKi8KLSAJMHgyNzYwLCAweDI3NjAsIDB4Mjc4MCwgMHgyNzgwLAotIAkweDI3ODAsIDB4MjdBMCwgMHgyN0EwLCAweDI3QzAsCi0gCTB4MjdDMCwgMHgyN0UwLCAweDI3RTAsIDB4MjdFMCwKLSAJMHgyODAwLCAweDI4MDAsIDB4MjgyMCwgMHgyODIwLCAvKiAxOTIgKi8KLSAJMHgyODIwLCAweDI4NDAsIDB4Mjg0MCwgMHgyODQwLAotIAkweDI4NjAsIDB4Mjg2MCwgMHgyODgwLCAweDI4ODAsCi0gCTB4Mjg4MCwgMHgyOEEwLCAweDI4QTAsIDB4MjhBMCwKLSAJMHgyOEMwLCAweDI4QzAsIDB4MjhDMCwgMHgyOEUwLCAvKiAyMDggKi8KLSAJMHgyOEUwLCAweDI4RTAsIDB4MjkwMCwgMHgyOTAwLAotIAkweDI5MDAsIDB4MjkyMCwgMHgyOTIwLCAweDI5MjAsCi0gCTB4Mjk0MCwgMHgyOTQwLCAweDI5NDAsIDB4Mjk2MCwKLSAJMHgyOTYwLCAweDI5NjAsIDB4Mjk2MCwgMHgyOTgwLCAvKiAyMjQgKi8KLSAJMHgyOTgwLCAweDI5ODAsIDB4MjlBMCwgMHgyOUEwLAotIAkweDI5QTAsIDB4MjlBMCwgMHgyOUMwLCAweDI5QzAsCi0gCTB4MjlDMCwgMHgyOUUwLCAweDI5RTAsIDB4MjlFMCwKLSAJMHgyOUUwLCAweDJBMDAsIDB4MkEwMCwgMHgyQTAwLCAvKiAyNDAgKi8KLSAJMHgyQTAwLCAweDJBMjAsIDB4MkEyMCwgMHgyQTIwLAotIAkweDJBMjAsIDB4MkE0MCwgMHgyQTQwLCAweDJBNDAsCi0gCTB4MkE0MCwgMHgyQTYwLCAweDJBNjAsIDB4MkE2MCwKLX07Ci0KLWNvbnN0IHUxNiBiY200M3h4X2lsdF9maW5lZnJlcWdbQkNNNDN4eF9JTFRfRklORUZSRVFHX1NJWkVdID0gewotCTB4MDA4OSwgMHgwMkU5LCAweDA0MDksIDB4MDRFOSwgLyogMCAqLwotCTB4MDVBOSwgMHgwNjY5LCAweDA3MDksIDB4MDc4OSwKLQkweDA4MjksIDB4MDhBOSwgMHgwOTI5LCAweDA5ODksCi0JMHgwQTA5LCAweDBBNjksIDB4MEFDOSwgMHgwQjI5LAotCTB4MEJBOSwgMHgwQkU5LCAweDBDNDksIDB4MENBOSwgLyogMTYgKi8KLQkweDBEMDksIDB4MEQ2OSwgMHgwREE5LCAweDBFMDksCi0JMHgwRTY5LCAweDBFQTksIDB4MEYwOSwgMHgwRjQ5LAotCTB4MEZBOSwgMHgwRkU5LCAweDEwMjksIDB4MTA4OSwKLQkweDEwQzksIDB4MTEwOSwgMHgxMTY5LCAweDExQTksIC8qIDMyICovCi0JMHgxMUU5LCAweDEyMjksIDB4MTI4OSwgMHgxMkM5LAotCTB4MTMwOSwgMHgxMzQ5LCAweDEzODksIDB4MTNDOSwKLQkweDE0MDksIDB4MTQ0OSwgMHgxNEE5LCAweDE0RTksCi0JMHgxNTI5LCAweDE1NjksIDB4MTVBOSwgMHgxNUU5LCAvKiA0OCAqLwotCTB4MTYyOSwgMHgxNjY5LCAweDE2QTksIDB4MTZFOCwKLQkweDE3MjgsIDB4MTc2OCwgMHgxN0E4LCAweDE3RTgsCi0JMHgxODI4LCAweDE4NjgsIDB4MThBOCwgMHgxOEU4LAotCTB4MTkyOCwgMHgxOTY4LCAweDE5QTgsIDB4MTlFOCwgLyogNjQgKi8KLQkweDFBMjgsIDB4MUE2OCwgMHgxQUE4LCAweDFBRTgsCi0JMHgxQjI4LCAweDFCNjgsIDB4MUJBOCwgMHgxQkU4LAotCTB4MUMyOCwgMHgxQzY4LCAweDFDQTgsIDB4MUNFOCwKLQkweDFEMjgsIDB4MUQ2OCwgMHgxREM4LCAweDFFMDgsIC8qIDgwICovCi0JMHgxRTQ4LCAweDFFODgsIDB4MUVDOCwgMHgxRjA4LAotCTB4MUY0OCwgMHgxRjg4LCAweDFGRTgsIDB4MjAyOCwKLQkweDIwNjgsIDB4MjBBOCwgMHgyMTA4LCAweDIxNDgsCi0JMHgyMTg4LCAweDIxQzgsIDB4MjIyOCwgMHgyMjY4LCAvKiA5NiAqLwotCTB4MjJDOCwgMHgyMzA4LCAweDIzNDgsIDB4MjNBOCwKLQkweDIzRTgsIDB4MjQ0OCwgMHgyNEE4LCAweDI0RTgsCi0JMHgyNTQ4LCAweDI1QTgsIDB4MjYwOCwgMHgyNjY4LAotCTB4MjZDOCwgMHgyNzI4LCAweDI3ODcsIDB4MjdFNywgLyogMTEyICovCi0JMHgyODQ3LCAweDI4QzcsIDB4Mjk0NywgMHgyOUE3LAotCTB4MkEyNywgMHgyQUM3LCAweDJCNDcsIDB4MkJFNywKLQkweDJDQTcsIDB4MkQ2NywgMHgyRTQ3LCAweDJGNjcsCi0JMHgzMjQ3LCAweDM1MjYsIDB4MzY0NiwgMHgzNzI2LCAvKiAxMjggKi8KLQkweDM4MDYsIDB4MzhBNiwgMHgzOTQ2LCAweDM5RTYsCi0JMHgzQTY2LCAweDNBRTYsIDB4M0I2NiwgMHgzQkM2LAotCTB4M0M0NSwgMHgzQ0E1LCAweDNEMDUsIDB4M0Q4NSwKLQkweDNERTUsIDB4M0U0NSwgMHgzRUE1LCAweDNFRTUsIC8qIDE0NCAqLwotCTB4M0Y0NSwgMHgzRkE1LCAweDQwMDUsIDB4NDA0NSwKLQkweDQwQTUsIDB4NDBFNSwgMHg0MTQ1LCAweDQxODUsCi0JMHg0MUU1LCAweDQyMjUsIDB4NDI2NSwgMHg0MkM1LAotCTB4NDMwNSwgMHg0MzQ1LCAweDQzQTUsIDB4NDNFNSwgLyogMTYwICovCi0JMHg0NDI0LCAweDQ0NjQsIDB4NDRDNCwgMHg0NTA0LAotCTB4NDU0NCwgMHg0NTg0LCAweDQ1QzQsIDB4NDYwNCwKLQkweDQ2NDQsIDB4NDZBNCwgMHg0NkU0LCAweDQ3MjQsCi0JMHg0NzY0LCAweDQ3QTQsIDB4NDdFNCwgMHg0ODI0LCAvKiAxNzYgKi8KLQkweDQ4NjQsIDB4NDhBNCwgMHg0OEU0LCAweDQ5MjQsCi0JMHg0OTY0LCAweDQ5QTQsIDB4NDlFNCwgMHg0QTI0LAotCTB4NEE2NCwgMHg0QUE0LCAweDRBRTQsIDB4NEIyMywKLQkweDRCNjMsIDB4NEJBMywgMHg0QkUzLCAweDRDMjMsIC8qIDE5MiAqLwotCTB4NEM2MywgMHg0Q0EzLCAweDRDRTMsIDB4NEQyMywKLQkweDRENjMsIDB4NERBMywgMHg0REUzLCAweDRFMjMsCi0JMHg0RTYzLCAweDRFQTMsIDB4NEVFMywgMHg0RjIzLAotCTB4NEY2MywgMHg0RkMzLCAweDUwMDMsIDB4NTA0MywgLyogMjA4ICovCi0JMHg1MDgzLCAweDUwQzMsIDB4NTEwMywgMHg1MTQzLAotCTB4NTE4MywgMHg1MUUyLCAweDUyMjIsIDB4NTI2MiwKLQkweDUyQTIsIDB4NTJFMiwgMHg1MzQyLCAweDUzODIsCi0JMHg1M0MyLCAweDU0MDIsIDB4NTQ2MiwgMHg1NEEyLCAvKiAyMjQgKi8KLQkweDU1MDIsIDB4NTU0MiwgMHg1NUEyLCAweDU1RTIsCi0JMHg1NjQyLCAweDU2ODIsIDB4NTZFMiwgMHg1NzIyLAotCTB4NTc4MiwgMHg1N0UxLCAweDU4NDEsIDB4NThBMSwKLQkweDU5MDEsIDB4NTk2MSwgMHg1OUMxLCAweDVBMjEsIC8qIDI0MCAqLwotCTB4NUFBMSwgMHg1QjAxLCAweDVCODEsIDB4NUJFMSwKLQkweDVDNjEsIDB4NUQwMSwgMHg1RDgwLCAweDVFMjAsCi0JMHg1RUUwLCAweDVGQTAsIDB4NjA4MCwgMHg2MUMwLAotfTsKLQotY29uc3QgdTE2IGJjbTQzeHhfaWx0X25vaXNlYTJbQkNNNDN4eF9JTFRfTk9JU0VBMl9TSVpFXSA9IHsKLQkweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweEZGRkUsCi0JMHhGRkZFLCAweDNGRkYsIDB4MTAwMCwgMHgwMzkzLAotfTsKLQotY29uc3QgdTE2IGJjbTQzeHhfaWx0X25vaXNlYTNbQkNNNDN4eF9JTFRfTk9JU0VBM19TSVpFXSA9IHsKLQkweDRDNEMsIDB4NEM0QywgMHg0QzRDLCAweDJEMzYsCi0JMHg0QzRDLCAweDRDNEMsIDB4NEM0QywgMHgyRDM2LAotfTsKLQotY29uc3QgdTE2IGJjbTQzeHhfaWx0X25vaXNlZzFbQkNNNDN4eF9JTFRfTk9JU0VHMV9TSVpFXSA9IHsKLQkweDAxM0MsIDB4MDFGNSwgMHgwMzFBLCAweDA2MzEsCi0JMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLAotfTsKLQotY29uc3QgdTE2IGJjbTQzeHhfaWx0X25vaXNlZzJbQkNNNDN4eF9JTFRfTk9JU0VHMl9TSVpFXSA9IHsKLQkweDU0ODQsIDB4M0M0MCwgMHgwMDAwLCAweDAwMDAsCi0JMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAotfTsKLQotY29uc3QgdTE2IGJjbTQzeHhfaWx0X25vaXNlc2NhbGVnMVtCQ000M3h4X0lMVF9OT0lTRVNDQUxFR19TSVpFXSA9IHsKLQkweDZDNzcsIDB4NTE2MiwgMHgzQjQwLCAweDMzMzUsIC8qIDAgKi8KLQkweDJGMkQsIDB4MkEyQSwgMHgyNTI3LCAweDFGMjEsCi0JMHgxQTFELCAweDE3MTksIDB4MTYxNiwgMHgxNDE0LAotCTB4MTQxNCwgMHgxNDAwLCAweDE0MTQsIDB4MTYxNCwKLQkweDE3MTYsIDB4MUExOSwgMHgxRjFELCAweDI1MjEsIC8qIDE2ICovCi0JMHgyQTI3LCAweDJGMkEsIDB4MzMyRCwgMHgzQjM1LAotCTB4NTE0MCwgMHg2QzYyLCAweDAwNzcsCi19OwotCi1jb25zdCB1MTYgYmNtNDN4eF9pbHRfbm9pc2VzY2FsZWcyW0JDTTQzeHhfSUxUX05PSVNFU0NBTEVHX1NJWkVdID0gewotCTB4RDhERCwgMHhDQkQ0LCAweEJDQzAsIDBYQjZCNywgLyogMCAqLwotCTB4QjJCMCwgMHhBREFELCAweEE3QTksIDB4OUZBMSwKLQkweDk2OUIsIDB4OTE5NSwgMHg4RjhGLCAweDhBOEEsCi0JMHg4QThBLCAweDhBMDAsIDB4OEE4QSwgMHg4RjhBLAotCTB4OTE4RiwgMHg5Njk1LCAweDlGOUIsIDB4QTdBMSwgLyogMTYgKi8KLQkweEFEQTksIDB4QjJBRCwgMHhCNkIwLCAweEJDQjcsCi0JMHhDQkMwLCAweEQ4RDQsIDB4MDBERCwKLX07Ci0KLWNvbnN0IHUxNiBiY200M3h4X2lsdF9ub2lzZXNjYWxlZzNbQkNNNDN4eF9JTFRfTk9JU0VTQ0FMRUdfU0laRV0gPSB7Ci0JMHhBNEE0LCAweEE0QTQsIDB4QTRBNCwgMHhBNEE0LCAvKiAwICovCi0JMHhBNEE0LCAweEE0QTQsIDB4QTRBNCwgMHhBNEE0LAotCTB4QTRBNCwgMHhBNEE0LCAweEE0QTQsIDB4QTRBNCwKLQkweEE0QTQsIDB4QTQwMCwgMHhBNEE0LCAweEE0QTQsCi0JMHhBNEE0LCAweEE0QTQsIDB4QTRBNCwgMHhBNEE0LCAvKiAxNiAqLwotCTB4QTRBNCwgMHhBNEE0LCAweEE0QTQsIDB4QTRBNCwKLQkweEE0QTQsIDB4QTRBNCwgMHgwMEE0LAotfTsKLQotY29uc3QgdTE2IGJjbTQzeHhfaWx0X3NpZ21hc3FyMVtCQ000M3h4X0lMVF9TSUdNQVNRUl9TSVpFXSA9IHsKLQkweDAwN0EsIDB4MDA3NSwgMHgwMDcxLCAweDAwNkMsIC8qIDAgKi8KLQkweDAwNjcsIDB4MDA2MywgMHgwMDVFLCAweDAwNTksCi0JMHgwMDU0LCAweDAwNTAsIDB4MDA0QiwgMHgwMDQ2LAotCTB4MDA0MiwgMHgwMDNELCAweDAwM0QsIDB4MDAzRCwKLQkweDAwM0QsIDB4MDAzRCwgMHgwMDNELCAweDAwM0QsIC8qIDE2ICovCi0JMHgwMDNELCAweDAwM0QsIDB4MDAzRCwgMHgwMDNELAotCTB4MDAzRCwgMHgwMDNELCAweDAwMDAsIDB4MDAzRCwKLQkweDAwM0QsIDB4MDAzRCwgMHgwMDNELCAweDAwM0QsCi0JMHgwMDNELCAweDAwM0QsIDB4MDAzRCwgMHgwMDNELCAvKiAzMiAqLwotCTB4MDAzRCwgMHgwMDNELCAweDAwM0QsIDB4MDAzRCwKLQkweDAwNDIsIDB4MDA0NiwgMHgwMDRCLCAweDAwNTAsCi0JMHgwMDU0LCAweDAwNTksIDB4MDA1RSwgMHgwMDYzLAotCTB4MDA2NywgMHgwMDZDLCAweDAwNzEsIDB4MDA3NSwgLyogNDggKi8KLQkweDAwN0EsCi19OwotCi1jb25zdCB1MTYgYmNtNDN4eF9pbHRfc2lnbWFzcXIyW0JDTTQzeHhfSUxUX1NJR01BU1FSX1NJWkVdID0gewotCTB4MDBERSwgMHgwMERDLCAweDAwREEsIDB4MDBEOCwgLyogMCAqLwotCTB4MDBENiwgMHgwMEQ0LCAweDAwRDIsIDB4MDBDRiwKLQkweDAwQ0QsIDB4MDBDQSwgMHgwMEM3LCAweDAwQzQsCi0JMHgwMEMxLCAweDAwQkUsIDB4MDBCRSwgMHgwMEJFLAotCTB4MDBCRSwgMHgwMEJFLCAweDAwQkUsIDB4MDBCRSwgLyogMTYgKi8KLQkweDAwQkUsIDB4MDBCRSwgMHgwMEJFLCAweDAwQkUsCi0JMHgwMEJFLCAweDAwQkUsIDB4MDAwMCwgMHgwMEJFLAotCTB4MDBCRSwgMHgwMEJFLCAweDAwQkUsIDB4MDBCRSwKLQkweDAwQkUsIDB4MDBCRSwgMHgwMEJFLCAweDAwQkUsIC8qIDMyICovCi0JMHgwMEJFLCAweDAwQkUsIDB4MDBCRSwgMHgwMEJFLAotCTB4MDBDMSwgMHgwMEM0LCAweDAwQzcsIDB4MDBDQSwKLQkweDAwQ0QsIDB4MDBDRiwgMHgwMEQyLCAweDAwRDQsCi0JMHgwMEQ2LCAweDAwRDgsIDB4MDBEQSwgMHgwMERDLCAvKiA0OCAqLwotCTB4MDBERSwKLX07Ci0KLS8qKioqIEhlbHBlciBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBkZXZpY2UgSW50ZXJuYWwgTG9va3VwIFRhYmxlcyAqKioqLwotCi12b2lkIGJjbTQzeHhfaWx0X3dyaXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCwgdTE2IHZhbCkKLXsKLQlpZiAoYmNtNDN4eF9jdXJyZW50X3BoeShiY20pLT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfQ1RSTCwgb2Zmc2V0KTsKLQkJbW1pb3diKCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfREFUQTEsIHZhbCk7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9JTFRfR19DVFJMLCBvZmZzZXQpOwotCQltbWlvd2IoKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9JTFRfR19EQVRBMSwgdmFsKTsKLQl9Ci19Ci0KLXZvaWQgYmNtNDN4eF9pbHRfd3JpdGUzMihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQsIHUzMiB2YWwpCi17Ci0JaWYgKGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSkgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9BX0NUUkwsIG9mZnNldCk7Ci0JCW1taW93YigpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9BX0RBVEEyLCAodmFsICYgMHhGRkZGMDAwMCkgPj4gMTYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9BX0RBVEExLCB2YWwgJiAweDAwMDBGRkZGKTsKLQl9IGVsc2UgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9HX0NUUkwsIG9mZnNldCk7Ci0JCW1taW93YigpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9HX0RBVEEyLCAodmFsICYgMHhGRkZGMDAwMCkgPj4gMTYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9HX0RBVEExLCB2YWwgJiAweDAwMDBGRkZGKTsKLQl9Ci19Ci0KLXUxNiBiY200M3h4X2lsdF9yZWFkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCkKLXsKLQlpZiAoYmNtNDN4eF9jdXJyZW50X3BoeShiY20pLT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfQ1RSTCwgb2Zmc2V0KTsKLQkJcmV0dXJuIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9JTFRfQV9EQVRBMSk7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9JTFRfR19DVFJMLCBvZmZzZXQpOwotCQlyZXR1cm4gYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0lMVF9HX0RBVEExKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfaWx0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfaWx0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZWFmNWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2lsdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotI2lmbmRlZiBCQ000M3h4X0lMVF9IXwotI2RlZmluZSBCQ000M3h4X0lMVF9IXwotCi0jZGVmaW5lIEJDTTQzeHhfSUxUX1JPVE9SX1NJWkUJCTUzCi1leHRlcm4gY29uc3QgdTMyIGJjbTQzeHhfaWx0X3JvdG9yW0JDTTQzeHhfSUxUX1JPVE9SX1NJWkVdOwotI2RlZmluZSBCQ000M3h4X0lMVF9SRVRBUkRfU0laRQkJNTMKLWV4dGVybiBjb25zdCB1MzIgYmNtNDN4eF9pbHRfcmV0YXJkW0JDTTQzeHhfSUxUX1JFVEFSRF9TSVpFXTsKLSNkZWZpbmUgQkNNNDN4eF9JTFRfRklORUZSRVFBX1NJWkUJMjU2Ci1leHRlcm4gY29uc3QgdTE2IGJjbTQzeHhfaWx0X2ZpbmVmcmVxYVtCQ000M3h4X0lMVF9GSU5FRlJFUUFfU0laRV07Ci0jZGVmaW5lIEJDTTQzeHhfSUxUX0ZJTkVGUkVRR19TSVpFCTI1NgotZXh0ZXJuIGNvbnN0IHUxNiBiY200M3h4X2lsdF9maW5lZnJlcWdbQkNNNDN4eF9JTFRfRklORUZSRVFHX1NJWkVdOwotI2RlZmluZSBCQ000M3h4X0lMVF9OT0lTRUEyX1NJWkUJOAotZXh0ZXJuIGNvbnN0IHUxNiBiY200M3h4X2lsdF9ub2lzZWEyW0JDTTQzeHhfSUxUX05PSVNFQTJfU0laRV07Ci0jZGVmaW5lIEJDTTQzeHhfSUxUX05PSVNFQTNfU0laRQk4Ci1leHRlcm4gY29uc3QgdTE2IGJjbTQzeHhfaWx0X25vaXNlYTNbQkNNNDN4eF9JTFRfTk9JU0VBM19TSVpFXTsKLSNkZWZpbmUgQkNNNDN4eF9JTFRfTk9JU0VHMV9TSVpFCTgKLWV4dGVybiBjb25zdCB1MTYgYmNtNDN4eF9pbHRfbm9pc2VnMVtCQ000M3h4X0lMVF9OT0lTRUcxX1NJWkVdOwotI2RlZmluZSBCQ000M3h4X0lMVF9OT0lTRUcyX1NJWkUJOAotZXh0ZXJuIGNvbnN0IHUxNiBiY200M3h4X2lsdF9ub2lzZWcyW0JDTTQzeHhfSUxUX05PSVNFRzJfU0laRV07Ci0jZGVmaW5lIEJDTTQzeHhfSUxUX05PSVNFU0NBTEVHX1NJWkUJMjcKLWV4dGVybiBjb25zdCB1MTYgYmNtNDN4eF9pbHRfbm9pc2VzY2FsZWcxW0JDTTQzeHhfSUxUX05PSVNFU0NBTEVHX1NJWkVdOwotZXh0ZXJuIGNvbnN0IHUxNiBiY200M3h4X2lsdF9ub2lzZXNjYWxlZzJbQkNNNDN4eF9JTFRfTk9JU0VTQ0FMRUdfU0laRV07Ci1leHRlcm4gY29uc3QgdTE2IGJjbTQzeHhfaWx0X25vaXNlc2NhbGVnM1tCQ000M3h4X0lMVF9OT0lTRVNDQUxFR19TSVpFXTsKLSNkZWZpbmUgQkNNNDN4eF9JTFRfU0lHTUFTUVJfU0laRQk1MwotZXh0ZXJuIGNvbnN0IHUxNiBiY200M3h4X2lsdF9zaWdtYXNxcjFbQkNNNDN4eF9JTFRfU0lHTUFTUVJfU0laRV07Ci1leHRlcm4gY29uc3QgdTE2IGJjbTQzeHhfaWx0X3NpZ21hc3FyMltCQ000M3h4X0lMVF9TSUdNQVNRUl9TSVpFXTsKLQotCi12b2lkIGJjbTQzeHhfaWx0X3dyaXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCwgdTE2IHZhbCk7Ci12b2lkIGJjbTQzeHhfaWx0X3dyaXRlMzIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0LCB1MzIgdmFsKTsKLXUxNiBiY200M3h4X2lsdF9yZWFkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCk7Ci0KLSNlbmRpZiAvKiBCQ000M3h4X0lMVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9sZWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTFkYzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKgotCi0gIEJyb2FkY29tIEJDTTQzeHggd2lyZWxlc3MgZHJpdmVyCi0KLSAgQ29weXJpZ2h0IChjKSAyMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPiwKLSAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbm8gQnJpdmlvIDxzdDNAcmlzZXVwLm5ldD4KLSAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+Ci0gICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAgICAgICAgICAgICAgICAgICAgIEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLSNpbmNsdWRlICJiY200M3h4X2xlZHMuaCIKLSNpbmNsdWRlICJiY200M3h4X3JhZGlvLmgiCi0jaW5jbHVkZSAiYmNtNDN4eC5oIgotCi0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9sZWRfY2hhbmdlc3RhdGUoc3RydWN0IGJjbTQzeHhfbGVkICpsZWQpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gbGVkLT5iY207Ci0JY29uc3QgaW50IGluZGV4ID0gYmNtNDN4eF9sZWRfaW5kZXgobGVkKTsKLQljb25zdCB1MTYgbWFzayA9ICgxIDw8IGluZGV4KTsKLQl1MTYgbGVkY3RsOwotCi0JYXNzZXJ0KGluZGV4ID49IDAgJiYgaW5kZXggPCBCQ000M3h4X05SX0xFRFMpOwotCWFzc2VydChsZWQtPmJsaW5rX2ludGVydmFsKTsKLQlsZWRjdGwgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19HUElPX0NPTlRST0wpOwotCWxlZGN0bCA9IChsZWRjdGwgJiBtYXNrKSA/IChsZWRjdGwgJiB+bWFzaykgOiAobGVkY3RsIHwgbWFzayk7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0dQSU9fQ09OVFJPTCwgbGVkY3RsKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9sZWRfYmxpbmsodW5zaWduZWQgbG9uZyBkKQotewotCXN0cnVjdCBiY200M3h4X2xlZCAqbGVkID0gKHN0cnVjdCBiY200M3h4X2xlZCAqKWQ7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gbGVkLT5iY207Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwotCWlmIChsZWQtPmJsaW5rX2ludGVydmFsKSB7Ci0JCWJjbTQzeHhfbGVkX2NoYW5nZXN0YXRlKGxlZCk7Ci0JCW1vZF90aW1lcigmbGVkLT5ibGlua190aW1lciwgamlmZmllcyArIGxlZC0+YmxpbmtfaW50ZXJ2YWwpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2xlZF9ibGlua19zdGFydChzdHJ1Y3QgYmNtNDN4eF9sZWQgKmxlZCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCkKLXsKLQlpZiAobGVkLT5ibGlua19pbnRlcnZhbCkKLQkJcmV0dXJuOwotCWxlZC0+YmxpbmtfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKLQliY200M3h4X2xlZF9jaGFuZ2VzdGF0ZShsZWQpOwotCWxlZC0+YmxpbmtfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBpbnRlcnZhbDsKLQlhZGRfdGltZXIoJmxlZC0+YmxpbmtfdGltZXIpOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2xlZF9ibGlua19zdG9wKHN0cnVjdCBiY200M3h4X2xlZCAqbGVkLCBpbnQgc3luYykKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBsZWQtPmJjbTsKLQljb25zdCBpbnQgaW5kZXggPSBiY200M3h4X2xlZF9pbmRleChsZWQpOwotCXUxNiBsZWRjdGw7Ci0KLQlpZiAoIWxlZC0+YmxpbmtfaW50ZXJ2YWwpCi0JCXJldHVybjsKLQlpZiAodW5saWtlbHkoc3luYykpCi0JCWRlbF90aW1lcl9zeW5jKCZsZWQtPmJsaW5rX3RpbWVyKTsKLQllbHNlCi0JCWRlbF90aW1lcigmbGVkLT5ibGlua190aW1lcik7Ci0JbGVkLT5ibGlua19pbnRlcnZhbCA9IDA7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIExFRCBpcyB0dXJuZWQgb2ZmLiAqLwotCWFzc2VydChpbmRleCA+PSAwICYmIGluZGV4IDwgQkNNNDN4eF9OUl9MRURTKTsKLQlsZWRjdGwgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19HUElPX0NPTlRST0wpOwotCWlmIChsZWQtPmFjdGl2ZWxvdykKLQkJbGVkY3RsIHw9ICgxIDw8IGluZGV4KTsKLQllbHNlCi0JCWxlZGN0bCAmPSB+KDEgPDwgaW5kZXgpOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19HUElPX0NPTlRST0wsIGxlZGN0bCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfbGVkX2luaXRfaGFyZGNvZGVkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICAgICAgc3RydWN0IGJjbTQzeHhfbGVkICpsZWQsCi0JCQkJICAgICAgIGludCBsZWRfaW5kZXgpCi17Ci0JLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGlmIHRoZSBiZWhhdmlvdXIgKGFuZCBhY3RpdmVsb3cpCi0JICogaW5mb3JtYXRpb24gZm9yIGEgTEVEIGlzIG1pc3NpbmcgaW4gdGhlIFNQUk9NLgotCSAqIFdlIGhhcmRjb2RlIHRoZSBiZWhhdmlvdXIgdmFsdWVzIGZvciB2YXJpb3VzIGRldmljZXMgaGVyZS4KLQkgKiBOb3RlIHRoYXQgdGhlIEJDTTQzeHhfTEVEX1RFU1RfWFhYIGJlaGF2aW91ciB2YWx1ZXMgY2FuCi0JICogYmUgdXNlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGxlZCBpcyBtYXBwZWQgdG8gd2hpY2ggaW5kZXguCi0JICovCi0KLQlzd2l0Y2ggKGxlZF9pbmRleCkgewotCWNhc2UgMDoKLQkJbGVkLT5iZWhhdmlvdXIgPSBCQ000M3h4X0xFRF9BQ1RJVklUWTsKLQkJbGVkLT5hY3RpdmVsb3cgPSAxOwotCQlpZiAoYmNtLT5ib2FyZF92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DT01QQVEpCi0JCQlsZWQtPmJlaGF2aW91ciA9IEJDTTQzeHhfTEVEX1JBRElPX0FMTDsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlsZWQtPmJlaGF2aW91ciA9IEJDTTQzeHhfTEVEX1JBRElPX0I7Ci0JCWlmIChiY20tPmJvYXJkX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FTVVNURUspCi0JCQlsZWQtPmJlaGF2aW91ciA9IEJDTTQzeHhfTEVEX0FTU09DOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWxlZC0+YmVoYXZpb3VyID0gQkNNNDN4eF9MRURfUkFESU9fQTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlsZWQtPmJlaGF2aW91ciA9IEJDTTQzeHhfTEVEX09GRjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCX0KLX0KLQotaW50IGJjbTQzeHhfbGVkc19pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9sZWQgKmxlZDsKLQl1OCBzcHJvbVs0XTsKLQlpbnQgaTsKLQotCXNwcm9tWzBdID0gYmNtLT5zcHJvbS53bDBncGlvMDsKLQlzcHJvbVsxXSA9IGJjbS0+c3Byb20ud2wwZ3BpbzE7Ci0Jc3Byb21bMl0gPSBiY20tPnNwcm9tLndsMGdwaW8yOwotCXNwcm9tWzNdID0gYmNtLT5zcHJvbS53bDBncGlvMzsKLQotCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X05SX0xFRFM7IGkrKykgewotCQlsZWQgPSAmKGJjbS0+bGVkc1tpXSk7Ci0JCWxlZC0+YmNtID0gYmNtOwotCQlzZXR1cF90aW1lcigmbGVkLT5ibGlua190aW1lciwKLQkJCSAgICBiY200M3h4X2xlZF9ibGluaywKLQkJCSAgICAodW5zaWduZWQgbG9uZylsZWQpOwotCi0JCWlmIChzcHJvbVtpXSA9PSAweEZGKSB7Ci0JCQliY200M3h4X2xlZF9pbml0X2hhcmRjb2RlZChiY20sIGxlZCwgaSk7Ci0JCX0gZWxzZSB7Ci0JCQlsZWQtPmJlaGF2aW91ciA9IHNwcm9tW2ldICYgQkNNNDN4eF9MRURfQkVIQVZJT1VSOwotCQkJbGVkLT5hY3RpdmVsb3cgPSAhIShzcHJvbVtpXSAmIEJDTTQzeHhfTEVEX0FDVElWRUxPVyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBiY200M3h4X2xlZHNfZXhpdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfbGVkICpsZWQ7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9OUl9MRURTOyBpKyspIHsKLQkJbGVkID0gJihiY20tPmxlZHNbaV0pOwotCQliY200M3h4X2xlZF9ibGlua19zdG9wKGxlZCwgMSk7Ci0JfQotCWJjbTQzeHhfbGVkc19zd2l0Y2hfYWxsKGJjbSwgMCk7Ci19Ci0KLXZvaWQgYmNtNDN4eF9sZWRzX3VwZGF0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIGludCBhY3Rpdml0eSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9sZWQgKmxlZDsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCWNvbnN0IGludCB0cmFuc2ZlcnJpbmcgPSAoamlmZmllcyAtIGJjbS0+c3RhdHMubGFzdF90eCkgPCBCQ000M3h4X0xFRF9YRkVSX1RIUkVTOwotCWludCBpLCB0dXJuX29uOwotCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSAwOwotCXUxNiBsZWRjdGw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwotCWxlZGN0bCA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX0dQSU9fQ09OVFJPTCk7Ci0JZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfTlJfTEVEUzsgaSsrKSB7Ci0JCWxlZCA9ICYoYmNtLT5sZWRzW2ldKTsKLQotCQl0dXJuX29uID0gMDsKLQkJc3dpdGNoIChsZWQtPmJlaGF2aW91cikgewotCQljYXNlIEJDTTQzeHhfTEVEX0lOQUNUSVZFOgotCQkJY29udGludWU7Ci0JCWNhc2UgQkNNNDN4eF9MRURfT0ZGOgotCQljYXNlIEJDTTQzeHhfTEVEX0JDTTQzMDNfMzoKLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfTEVEX09OOgotCQkJdHVybl9vbiA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBCQ000M3h4X0xFRF9BQ1RJVklUWToKLQkJY2FzZSBCQ000M3h4X0xFRF9CQ000MzAzXzA6Ci0JCQl0dXJuX29uID0gYWN0aXZpdHk7Ci0JCQlicmVhazsKLQkJY2FzZSBCQ000M3h4X0xFRF9SQURJT19BTEw6Ci0JCQl0dXJuX29uID0gcmFkaW8tPmVuYWJsZWQgJiYgYmNtNDN4eF9pc19od19yYWRpb19lbmFibGVkKGJjbSk7Ci0JCQlicmVhazsKLQkJY2FzZSBCQ000M3h4X0xFRF9SQURJT19BOgotCQljYXNlIEJDTTQzeHhfTEVEX0JDTTQzMDNfMjoKLQkJCXR1cm5fb24gPSAocmFkaW8tPmVuYWJsZWQgJiYgYmNtNDN4eF9pc19od19yYWRpb19lbmFibGVkKGJjbSkgJiYKLQkJCQkgICBwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQkNNNDN4eF9MRURfUkFESU9fQjoKLQkJY2FzZSBCQ000M3h4X0xFRF9CQ000MzAzXzE6Ci0JCQl0dXJuX29uID0gKHJhZGlvLT5lbmFibGVkICYmIGJjbTQzeHhfaXNfaHdfcmFkaW9fZW5hYmxlZChiY20pICYmCi0JCQkJICAgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQiB8fAotCQkJCSAgICBwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpKTsKLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfTEVEX01PREVfQkc6Ci0JCQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HICYmIGJjbTQzeHhfaXNfaHdfcmFkaW9fZW5hYmxlZChiY20pICYmCi0JCQkgICAgMS8qRklYTUU6IHVzaW5nIEcgcmF0ZXMuKi8pCi0JCQkJdHVybl9vbiA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBCQ000M3h4X0xFRF9UUkFOU0ZFUjoKLQkJCWlmICh0cmFuc2ZlcnJpbmcpCi0JCQkJYmNtNDN4eF9sZWRfYmxpbmtfc3RhcnQobGVkLCBCQ000M3h4X0xFREJMSU5LX01FRElVTSk7Ci0JCQllbHNlCi0JCQkJYmNtNDN4eF9sZWRfYmxpbmtfc3RvcChsZWQsIDApOwotCQkJY29udGludWU7Ci0JCWNhc2UgQkNNNDN4eF9MRURfQVBUUkFOU0ZFUjoKLQkJCWlmIChiY20tPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIpIHsKLQkJCQlpZiAodHJhbnNmZXJyaW5nKSB7Ci0JCQkJCWludGVydmFsID0gQkNNNDN4eF9MRURCTElOS19GQVNUOwotCQkJCQl0dXJuX29uID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXR1cm5fb24gPSAxOwotCQkJCWlmICgwLypUT0RPOiBub3QgYXNzb2MqLykKLQkJCQkJaW50ZXJ2YWwgPSBCQ000M3h4X0xFREJMSU5LX1NMT1c7Ci0JCQkJZWxzZSBpZiAodHJhbnNmZXJyaW5nKQotCQkJCQlpbnRlcnZhbCA9IEJDTTQzeHhfTEVEQkxJTktfRkFTVDsKLQkJCQllbHNlCi0JCQkJCXR1cm5fb24gPSAwOwotCQkJfQotCQkJaWYgKHR1cm5fb24pCi0JCQkJYmNtNDN4eF9sZWRfYmxpbmtfc3RhcnQobGVkLCBpbnRlcnZhbCk7Ci0JCQllbHNlCi0JCQkJYmNtNDN4eF9sZWRfYmxpbmtfc3RvcChsZWQsIDApOwotCQkJY29udGludWU7Ci0JCWNhc2UgQkNNNDN4eF9MRURfV0VJUkQ6Ci0JCQkvL1RPRE8KLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfTEVEX0FTU09DOgotCQkJaWYgKGJjbS0+c29mdG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpCi0JCQkJdHVybl9vbiA9IDE7Ci0JCQlicmVhazsKLSNpZmRlZiBDT05GSUdfQkNNNDNYWF9ERUJVRwotCQljYXNlIEJDTTQzeHhfTEVEX1RFU1RfQkxJTktTTE9XOgotCQkJYmNtNDN4eF9sZWRfYmxpbmtfc3RhcnQobGVkLCBCQ000M3h4X0xFREJMSU5LX1NMT1cpOwotCQkJY29udGludWU7Ci0JCWNhc2UgQkNNNDN4eF9MRURfVEVTVF9CTElOS01FRElVTToKLQkJCWJjbTQzeHhfbGVkX2JsaW5rX3N0YXJ0KGxlZCwgQkNNNDN4eF9MRURCTElOS19NRURJVU0pOwotCQkJY29udGludWU7Ci0JCWNhc2UgQkNNNDN4eF9MRURfVEVTVF9CTElOS0ZBU1Q6Ci0JCQliY200M3h4X2xlZF9ibGlua19zdGFydChsZWQsIEJDTTQzeHhfTEVEQkxJTktfRkFTVCk7Ci0JCQljb250aW51ZTsKLSNlbmRpZiAvKiBDT05GSUdfQkNNNDNYWF9ERUJVRyAqLwotCQlkZWZhdWx0OgotCQkJZHByaW50a2woS0VSTl9JTkZPIFBGWCAiQmFkIHZhbHVlIGluIGxlZHNfdXBkYXRlLCIKLQkJCQkiIGxlZC0+YmVoYXZpb3VyOiAweCV4XG4iLCBsZWQtPmJlaGF2aW91cik7Ci0JCX07Ci0KLQkJaWYgKGxlZC0+YWN0aXZlbG93KQotCQkJdHVybl9vbiA9ICF0dXJuX29uOwotCQlpZiAodHVybl9vbikKLQkJCWxlZGN0bCB8PSAoMSA8PCBpKTsKLQkJZWxzZQotCQkJbGVkY3RsICY9IH4oMSA8PCBpKTsKLQl9Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0dQSU9fQ09OVFJPTCwgbGVkY3RsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIGJjbTQzeHhfbGVkc19zd2l0Y2hfYWxsKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IG9uKQotewotCXN0cnVjdCBiY200M3h4X2xlZCAqbGVkOwotCXUxNiBsZWRjdGw7Ci0JaW50IGk7Ci0JaW50IGJpdF9vbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+bGVkc19sb2NrLCBmbGFncyk7Ci0JbGVkY3RsID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fR1BJT19DT05UUk9MKTsKLQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9OUl9MRURTOyBpKyspIHsKLQkJbGVkID0gJihiY20tPmxlZHNbaV0pOwotCQlpZiAobGVkLT5iZWhhdmlvdXIgPT0gQkNNNDN4eF9MRURfSU5BQ1RJVkUpCi0JCQljb250aW51ZTsKLQkJaWYgKG9uKQotCQkJYml0X29uID0gbGVkLT5hY3RpdmVsb3cgPyAwIDogMTsKLQkJZWxzZQotCQkJYml0X29uID0gbGVkLT5hY3RpdmVsb3cgPyAxIDogMDsKLQkJaWYgKGJpdF9vbikKLQkJCWxlZGN0bCB8PSAoMSA8PCBpKTsKLQkJZWxzZQotCQkJbGVkY3RsICY9IH4oMSA8PCBpKTsKLQl9Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0dQSU9fQ09OVFJPTCwgbGVkY3RsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9sZWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMWUxNGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSNpZm5kZWYgQkNNNDN4eF9MRURTX0hfCi0jZGVmaW5lIEJDTTQzeHhfTEVEU19IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotCi0KLXN0cnVjdCBiY200M3h4X2xlZCB7Ci0JdTggYmVoYXZpb3VyOjc7Ci0JdTggYWN0aXZlbG93OjE7Ci0KLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY207Ci0Jc3RydWN0IHRpbWVyX2xpc3QgYmxpbmtfdGltZXI7Ci0JdW5zaWduZWQgbG9uZyBibGlua19pbnRlcnZhbDsKLX07Ci0jZGVmaW5lIGJjbTQzeHhfbGVkX2luZGV4KGxlZCkJKChpbnQpKChsZWQpIC0gKGxlZCktPmJjbS0+bGVkcykpCi0KLS8qIERlbGF5IGJldHdlZW4gc3RhdGUgY2hhbmdlcyB3aGVuIGJsaW5raW5nIGluIGppZmZpZXMgKi8KLSNkZWZpbmUgQkNNNDN4eF9MRURCTElOS19TTE9XCQkoSFogLyAxKQotI2RlZmluZSBCQ000M3h4X0xFREJMSU5LX01FRElVTQkJKEhaIC8gNCkKLSNkZWZpbmUgQkNNNDN4eF9MRURCTElOS19GQVNUCQkoSFogLyA4KQotCi0jZGVmaW5lIEJDTTQzeHhfTEVEX1hGRVJfVEhSRVMJCShIWiAvIDEwMCkKLQotI2RlZmluZSBCQ000M3h4X0xFRF9CRUhBVklPVVIJCTB4N0YKLSNkZWZpbmUgQkNNNDN4eF9MRURfQUNUSVZFTE9XCQkweDgwCi1lbnVtIHsgLyogTEVEIGJlaGF2aW91ciB2YWx1ZXMgKi8KLQlCQ000M3h4X0xFRF9PRkYsCi0JQkNNNDN4eF9MRURfT04sCi0JQkNNNDN4eF9MRURfQUNUSVZJVFksCi0JQkNNNDN4eF9MRURfUkFESU9fQUxMLAotCUJDTTQzeHhfTEVEX1JBRElPX0EsCi0JQkNNNDN4eF9MRURfUkFESU9fQiwKLQlCQ000M3h4X0xFRF9NT0RFX0JHLAotCUJDTTQzeHhfTEVEX1RSQU5TRkVSLAotCUJDTTQzeHhfTEVEX0FQVFJBTlNGRVIsCi0JQkNNNDN4eF9MRURfV0VJUkQsLy9GSVhNRQotCUJDTTQzeHhfTEVEX0FTU09DLAotCUJDTTQzeHhfTEVEX0lOQUNUSVZFLAotCi0JLyogQmVoYXZpb3VyIHZhbHVlcyBmb3IgdGVzdGluZy4KLQkgKiBXaXRoIHRoZXNlIHZhbHVlcyBpdCBpcyBlYXNpZXIgdG8gZmlndXJlIG91dAotCSAqIHRoZSByZWFsIGJlaGF2aW91ciBvZiBsZWRzLCBpbiBjYXNlIHRoZSBTUFJPTQotCSAqIGlzIG1pc3NpbmcgaW5mb3JtYXRpb24uCi0JICovCi0JQkNNNDN4eF9MRURfVEVTVF9CTElOS1NMT1csCi0JQkNNNDN4eF9MRURfVEVTVF9CTElOS01FRElVTSwKLQlCQ000M3h4X0xFRF9URVNUX0JMSU5LRkFTVCwKLQotCS8qIE1pc2MgdmFsdWVzIGZvciBCQ000MzAzICovCi0JQkNNNDN4eF9MRURfQkNNNDMwM18wID0gMHgyQiwKLQlCQ000M3h4X0xFRF9CQ000MzAzXzEgPSAweDc4LAotCUJDTTQzeHhfTEVEX0JDTTQzMDNfMiA9IDB4MkUsCi0JQkNNNDN4eF9MRURfQkNNNDMwM18zID0gMHgxOSwKLX07Ci0KLWludCBiY200M3h4X2xlZHNfaW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotdm9pZCBiY200M3h4X2xlZHNfZXhpdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotdm9pZCBiY200M3h4X2xlZHNfdXBkYXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGFjdGl2aXR5KTsKLXZvaWQgYmNtNDN4eF9sZWRzX3N3aXRjaF9hbGwoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCBpbnQgb24pOwotCi0jZW5kaWYgLyogQkNNNDN4eF9MRURTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk2YTMyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI4MSArMCwwIEBACi0vKgotCi0gIEJyb2FkY29tIEJDTTQzeHggd2lyZWxlc3MgZHJpdmVyCi0KLSAgQ29weXJpZ2h0IChjKSAyMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPiwKLSAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbm8gQnJpdmlvIDxzdDNAcmlzZXVwLm5ldD4KLSAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+Ci0gICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAgICAgICAgICAgICAgICAgICAgIEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgotCi0gIFNvbWUgcGFydHMgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzIyMDAKLSAgZHJpdmVyICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotI2luY2x1ZGUgImJjbTQzeHguaCIKLSNpbmNsdWRlICJiY200M3h4X21haW4uaCIKLSNpbmNsdWRlICJiY200M3h4X2RlYnVnZnMuaCIKLSNpbmNsdWRlICJiY200M3h4X3JhZGlvLmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9waHkuaCIKLSNpbmNsdWRlICJiY200M3h4X2RtYS5oIgotI2luY2x1ZGUgImJjbTQzeHhfcGlvLmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9wb3dlci5oIgotI2luY2x1ZGUgImJjbTQzeHhfd3guaCIKLSNpbmNsdWRlICJiY200M3h4X2V0aHRvb2wuaCIKLSNpbmNsdWRlICJiY200M3h4X3htaXQuaCIKLSNpbmNsdWRlICJiY200M3h4X3N5c2ZzLmgiCi0KLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiTWFydGluIExhbmdlciIpOwotTU9EVUxFX0FVVEhPUigiU3RlZmFubyBCcml2aW8iKTsKLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgQnVlc2NoIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19CQ000M1hYX0RNQSkgJiYgZGVmaW5lZChDT05GSUdfQkNNNDNYWF9QSU8pCi1zdGF0aWMgaW50IG1vZHBhcmFtX3BpbzsKLW1vZHVsZV9wYXJhbV9uYW1lZChwaW8sIG1vZHBhcmFtX3BpbywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocGlvLCAiZW5hYmxlKDEpIC8gZGlzYWJsZSgwKSBQSU8gbW9kZSIpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQkNNNDNYWF9ETUEpCi0jIGRlZmluZSBtb2RwYXJhbV9waW8JMAotI2VsaWYgZGVmaW5lZChDT05GSUdfQkNNNDNYWF9QSU8pCi0jIGRlZmluZSBtb2RwYXJhbV9waW8JMQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbW9kcGFyYW1fYmFkX2ZyYW1lc19wcmVlbXB0OwotbW9kdWxlX3BhcmFtX25hbWVkKGJhZF9mcmFtZXNfcHJlZW1wdCwgbW9kcGFyYW1fYmFkX2ZyYW1lc19wcmVlbXB0LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhiYWRfZnJhbWVzX3ByZWVtcHQsICJlbmFibGUoMSkgLyBkaXNhYmxlKDApIEJhZCBGcmFtZXMgUHJlZW1wdGlvbiIpOwotCi1zdGF0aWMgaW50IG1vZHBhcmFtX3Nob3J0X3JldHJ5ID0gQkNNNDN4eF9ERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUOwotbW9kdWxlX3BhcmFtX25hbWVkKHNob3J0X3JldHJ5LCBtb2RwYXJhbV9zaG9ydF9yZXRyeSwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc2hvcnRfcmV0cnksICJTaG9ydC1SZXRyeS1MaW1pdCAoMCAtIDE1KSIpOwotCi1zdGF0aWMgaW50IG1vZHBhcmFtX2xvbmdfcmV0cnkgPSBCQ000M3h4X0RFRkFVTFRfTE9OR19SRVRSWV9MSU1JVDsKLW1vZHVsZV9wYXJhbV9uYW1lZChsb25nX3JldHJ5LCBtb2RwYXJhbV9sb25nX3JldHJ5LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhsb25nX3JldHJ5LCAiTG9uZy1SZXRyeS1MaW1pdCAoMCAtIDE1KSIpOwotCi1zdGF0aWMgaW50IG1vZHBhcmFtX2xvY2FsZSA9IC0xOwotbW9kdWxlX3BhcmFtX25hbWVkKGxvY2FsZSwgbW9kcGFyYW1fbG9jYWxlLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjb3VudHJ5LCAiU2VsZWN0IExvY2FsZUNvZGUgMC0xMSAoRm9yIHRyYXZlbGVycykiKTsKLQotc3RhdGljIGludCBtb2RwYXJhbV9ub2xlZHM7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobm9sZWRzLCBtb2RwYXJhbV9ub2xlZHMsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vbGVkcywgIlR1cm4gb2ZmIGFsbCBMRUQgYWN0aXZpdHkiKTsKLQotc3RhdGljIGNoYXIgbW9kcGFyYW1fZndwb3N0Zml4WzY0XTsKLW1vZHVsZV9wYXJhbV9zdHJpbmcoZndwb3N0Zml4LCBtb2RwYXJhbV9md3Bvc3RmaXgsIDY0LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZndwb3N0Zml4LCAiUG9zdGZpeCBmb3IgLmZ3IGZpbGVzLiBVc2VmdWwgZm9yIHVzaW5nIG11bHRpcGxlIGZpcm13YXJlIGltYWdlIHZlcnNpb25zLiIpOwotCi0KLS8qIElmIHlvdSB3YW50IHRvIGRlYnVnIHdpdGgganVzdCBhIHNpbmdsZSBkZXZpY2UsIGVuYWJsZSB0aGlzLAotICogd2hlcmUgdGhlIHN0cmluZyBpcyB0aGUgcGNpIGRldmljZSBJRCAoYXMgZ2l2ZW4gYnkgdGhlIGtlcm5lbCdzCi0gKiBwY2lfbmFtZSBmdW5jdGlvbikgb2YgdGhlIGRldmljZSB0byBiZSB1c2VkLgotICovCi0vLyNkZWZpbmUgREVCVUdfU0lOR0xFX0RFVklDRV9PTkxZCSIwMDAxOjExOjAwLjAiCi0KLS8qIElmIHlvdSB3YW50IHRvIGVuYWJsZSBwcmludGluZyBvZiBlYWNoIE1NSU8gYWNjZXNzLCBlbmFibGUgdGhpcy4gKi8KLS8vI2RlZmluZSBERUJVR19FTkFCTEVfTU1JT19QUklOVAotCi0vKiBJZiB5b3Ugd2FudCB0byBlbmFibGUgcHJpbnRpbmcgb2YgTU1JTyBhY2Nlc3Mgd2l0aGluCi0gKiB1Y29kZS9wY20gdXBsb2FkLCBpbml0dmFscyB3cml0ZSwgZW5hYmxlIHRoaXMuCi0gKi8KLS8vI2RlZmluZSBERUJVR19FTkFCTEVfVUNPREVfTU1JT19QUklOVAotCi0vKiBJZiB5b3Ugd2FudCB0byBlbmFibGUgcHJpbnRpbmcgb2YgUENJIENvbmZpZyBTcGFjZSBhY2Nlc3MsIGVuYWJsZSB0aGlzICovCi0vLyNkZWZpbmUgREVCVUdfRU5BQkxFX1BDSUxPRwotCi0KLS8qIERldGFpbGVkIGxpc3QgbWFpbnRhaW5lZCBhdDoKLSAqIGh0dHA6Ly9vcGVuZmFjdHMuYmVybGlvcy5kZS9pbmRleC1lbi5waHRtbD90aXRsZT1CY200M3h4RGV2aWNlcwotICovCi0Jc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJjbTQzeHhfcGNpX3RibFtdID0gewotCS8qIEJyb2FkY29tIDQzMDMgODAyLjExYiAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JLyogQnJvYWRjb20gNDMwNyA4MDIuMTFiICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLQkvKiBCcm9hZGNvbSA0MzExIDgwMi4xMShhKS9iL2cgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCS8qIEJyb2FkY29tIDQzMTIgODAyLjExYS9iL2cgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCS8qIEJyb2FkY29tIDQzMTggODAyLjExYi9nICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLQkvKiBCcm9hZGNvbSA0MzE5IDgwMi4xMWEvYi9nICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLQkvKiBCcm9hZGNvbSA0MzA2IDgwMi4xMWIvZyAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JLyogQnJvYWRjb20gNDMwNiA4MDIuMTFhICovCi0vLwl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCS8qIEJyb2FkY29tIDQzMDkgODAyLjExYS9iL2cgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCS8qIEJyb2FkY29tIDQzWEcgODAyLjExYi9nICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLQl7IDAgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmNtNDN4eF9wY2lfdGJsKTsKLQotc3RhdGljIHZvaWQgYmNtNDN4eF9yYW1fd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0LCB1MzIgdmFsKQotewotCXUzMiBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpOwotCWlmICghKHN0YXR1cyAmIEJDTTQzeHhfU0JGX1hGRVJfUkVHX0JZVEVTV0FQKSkKLQkJdmFsID0gc3dhYjMyKHZhbCk7Ci0KLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fUkFNX0NPTlRST0wsIG9mZnNldCk7Ci0JbW1pb3diKCk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1JBTV9EQVRBLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lCi12b2lkIGJjbTQzeHhfc2htX2NvbnRyb2xfd29yZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkgICAgICB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKLXsKLQl1MzIgY29udHJvbDsKLQotCS8qICJvZmZzZXQiIGlzIHRoZSBXT1JEIG9mZnNldC4gKi8KLQotCWNvbnRyb2wgPSByb3V0aW5nOwotCWNvbnRyb2wgPDw9IDE2OwotCWNvbnRyb2wgfD0gb2Zmc2V0OwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TSE1fQ09OVFJPTCwgY29udHJvbCk7Ci19Ci0KLXUzMiBiY200M3h4X3NobV9yZWFkMzIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkgICAgICAgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpCi17Ci0JdTMyIHJldDsKLQotCWlmIChyb3V0aW5nID09IEJDTTQzeHhfU0hNX1NIQVJFRCkgewotCQlpZiAob2Zmc2V0ICYgMHgwMDAzKSB7Ci0JCQkvKiBVbmFsaWduZWQgYWNjZXNzICovCi0JCQliY200M3h4X3NobV9jb250cm9sX3dvcmQoYmNtLCByb3V0aW5nLCBvZmZzZXQgPj4gMik7Ci0JCQlyZXQgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19TSE1fREFUQV9VTkFMSUdORUQpOwotCQkJcmV0IDw8PSAxNjsKLQkJCWJjbTQzeHhfc2htX2NvbnRyb2xfd29yZChiY20sIHJvdXRpbmcsIChvZmZzZXQgPj4gMikgKyAxKTsKLQkJCXJldCB8PSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19TSE1fREFUQSk7Ci0KLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJb2Zmc2V0ID4+PSAyOwotCX0KLQliY200M3h4X3NobV9jb250cm9sX3dvcmQoYmNtLCByb3V0aW5nLCBvZmZzZXQpOwotCXJldCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NITV9EQVRBKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXUxNiBiY200M3h4X3NobV9yZWFkMTYoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkgICAgICAgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpCi17Ci0JdTE2IHJldDsKLQotCWlmIChyb3V0aW5nID09IEJDTTQzeHhfU0hNX1NIQVJFRCkgewotCQlpZiAob2Zmc2V0ICYgMHgwMDAzKSB7Ci0JCQkvKiBVbmFsaWduZWQgYWNjZXNzICovCi0JCQliY200M3h4X3NobV9jb250cm9sX3dvcmQoYmNtLCByb3V0aW5nLCBvZmZzZXQgPj4gMik7Ci0JCQlyZXQgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19TSE1fREFUQV9VTkFMSUdORUQpOwotCi0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCW9mZnNldCA+Pj0gMjsKLQl9Ci0JYmNtNDN4eF9zaG1fY29udHJvbF93b3JkKGJjbSwgcm91dGluZywgb2Zmc2V0KTsKLQlyZXQgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19TSE1fREFUQSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGJjbTQzeHhfc2htX3dyaXRlMzIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LAotCQkJIHUzMiB2YWx1ZSkKLXsKLQlpZiAocm91dGluZyA9PSBCQ000M3h4X1NITV9TSEFSRUQpIHsKLQkJaWYgKG9mZnNldCAmIDB4MDAwMykgewotCQkJLyogVW5hbGlnbmVkIGFjY2VzcyAqLwotCQkJYmNtNDN4eF9zaG1fY29udHJvbF93b3JkKGJjbSwgcm91dGluZywgb2Zmc2V0ID4+IDIpOwotCQkJbW1pb3diKCk7Ci0JCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fU0hNX0RBVEFfVU5BTElHTkVELAotCQkJCQkodmFsdWUgPj4gMTYpICYgMHhmZmZmKTsKLQkJCW1taW93YigpOwotCQkJYmNtNDN4eF9zaG1fY29udHJvbF93b3JkKGJjbSwgcm91dGluZywgKG9mZnNldCA+PiAyKSArIDEpOwotCQkJbW1pb3diKCk7Ci0JCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fU0hNX0RBVEEsCi0JCQkJCXZhbHVlICYgMHhmZmZmKTsKLQkJCXJldHVybjsKLQkJfQotCQlvZmZzZXQgPj49IDI7Ci0JfQotCWJjbTQzeHhfc2htX2NvbnRyb2xfd29yZChiY20sIHJvdXRpbmcsIG9mZnNldCk7Ci0JbW1pb3diKCk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NITV9EQVRBLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgYmNtNDN4eF9zaG1fd3JpdGUxNihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsCi0JCQkgdTE2IHZhbHVlKQotewotCWlmIChyb3V0aW5nID09IEJDTTQzeHhfU0hNX1NIQVJFRCkgewotCQlpZiAob2Zmc2V0ICYgMHgwMDAzKSB7Ci0JCQkvKiBVbmFsaWduZWQgYWNjZXNzICovCi0JCQliY200M3h4X3NobV9jb250cm9sX3dvcmQoYmNtLCByb3V0aW5nLCBvZmZzZXQgPj4gMik7Ci0JCQltbWlvd2IoKTsKLQkJCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19TSE1fREFUQV9VTkFMSUdORUQsCi0JCQkJCXZhbHVlKTsKLQkJCXJldHVybjsKLQkJfQotCQlvZmZzZXQgPj49IDI7Ci0JfQotCWJjbTQzeHhfc2htX2NvbnRyb2xfd29yZChiY20sIHJvdXRpbmcsIG9mZnNldCk7Ci0JbW1pb3diKCk7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX1NITV9EQVRBLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgYmNtNDN4eF90c2ZfcmVhZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHU2NCAqdHNmKQotewotCS8qIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bC4gQXMgd2UgcmVhZCB0aGUgVFNGIGZyb20gbXVsdGlwbGUKLQkgKiByZWdpc3RlcnMsIHdlIHNob3VsZCB0YWtlIGNhcmUgb2YgcmVnaXN0ZXIgb3ZlcmZsb3dzLgotCSAqIEluIHRoZW9yeSwgdGhlIHdob2xlIHRzZiByZWFkIHByb2Nlc3Mgc2hvdWxkIGJlIGF0b21pYy4KLQkgKiBXZSB0cnkgdG8gYmUgYXRvbWljIGhlcmUsIGJ5IHJlc3RhcmluZyB0aGUgcmVhZCBwcm9jZXNzLAotCSAqIGlmIGFueSBvZiB0aGUgaGlnaCByZWdpc3RlcnMgY2hhbmdlZCAob3ZlcmZsZXcpLgotCSAqLwotCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDMpIHsKLQkJdTMyIGxvdywgaGlnaCwgaGlnaDI7Ci0KLQkJZG8gewotCQkJaGlnaCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKLQkJCWxvdyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1JFVjNQTFVTX1RTRl9MT1cpOwotCQkJaGlnaDIgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19SRVYzUExVU19UU0ZfSElHSCk7Ci0JCX0gd2hpbGUgKHVubGlrZWx5KGhpZ2ggIT0gaGlnaDIpKTsKLQotCQkqdHNmID0gaGlnaDsKLQkJKnRzZiA8PD0gMzI7Ci0JCSp0c2YgfD0gbG93OwotCX0gZWxzZSB7Ci0JCXU2NCB0bXA7Ci0JCXUxNiB2MCwgdjEsIHYyLCB2MzsKLQkJdTE2IHRlc3QxLCB0ZXN0MiwgdGVzdDM7Ci0KLQkJZG8gewotCQkJdjMgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19UU0ZfMyk7Ci0JCQl2MiA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX1RTRl8yKTsKLQkJCXYxID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fVFNGXzEpOwotCQkJdjAgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19UU0ZfMCk7Ci0KLQkJCXRlc3QzID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fVFNGXzMpOwotCQkJdGVzdDIgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19UU0ZfMik7Ci0JCQl0ZXN0MSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX1RTRl8xKTsKLQkJfSB3aGlsZSAodjMgIT0gdGVzdDMgfHwgdjIgIT0gdGVzdDIgfHwgdjEgIT0gdGVzdDEpOwotCi0JCSp0c2YgPSB2MzsKLQkJKnRzZiA8PD0gNDg7Ci0JCXRtcCA9IHYyOwotCQl0bXAgPDw9IDMyOwotCQkqdHNmIHw9IHRtcDsKLQkJdG1wID0gdjE7Ci0JCXRtcCA8PD0gMTY7Ci0JCSp0c2YgfD0gdG1wOwotCQkqdHNmIHw9IHYwOwotCX0KLX0KLQotdm9pZCBiY200M3h4X3RzZl93cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHU2NCB0c2YpCi17Ci0JdTMyIHN0YXR1czsKLQotCXN0YXR1cyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7Ci0Jc3RhdHVzIHw9IEJDTTQzeHhfU0JGX1RJTUVfVVBEQVRFOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsIHN0YXR1cyk7Ci0JbW1pb3diKCk7Ci0KLQkvKiBCZSBjYXJlZnVsIHdpdGggdGhlIGluLXByb2dyZXNzIHRpbWVyLgotCSAqIEZpcnN0IHplcm8gb3V0IHRoZSBsb3cgcmVnaXN0ZXIsIHNvIHdlIGhhdmUgYSBmdWxsCi0JICogcmVnaXN0ZXItb3ZlcmZsb3cgZHVyYXRpb24gdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA+PSAzKSB7Ci0JCXUzMiBsbyA9ICh0c2YgJiAweDAwMDAwMDAwRkZGRkZGRkZVTEwpOwotCQl1MzIgaGkgPSAodHNmICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMjsKLQotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fUkVWM1BMVVNfVFNGX0xPVywgMCk7Ci0JCW1taW93YigpOwotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fUkVWM1BMVVNfVFNGX0hJR0gsIGhpKTsKLQkJbW1pb3diKCk7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19SRVYzUExVU19UU0ZfTE9XLCBsbyk7Ci0JfSBlbHNlIHsKLQkJdTE2IHYwID0gKHRzZiAmIDB4MDAwMDAwMDAwMDAwRkZGRlVMTCk7Ci0JCXUxNiB2MSA9ICh0c2YgJiAweDAwMDAwMDAwRkZGRjAwMDBVTEwpID4+IDE2OwotCQl1MTYgdjIgPSAodHNmICYgMHgwMDAwRkZGRjAwMDAwMDAwVUxMKSA+PiAzMjsKLQkJdTE2IHYzID0gKHRzZiAmIDB4RkZGRjAwMDAwMDAwMDAwMFVMTCkgPj4gNDg7Ci0KLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX1RTRl8wLCAwKTsKLQkJbW1pb3diKCk7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19UU0ZfMywgdjMpOwotCQltbWlvd2IoKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX1RTRl8yLCB2Mik7Ci0JCW1taW93YigpOwotCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fVFNGXzEsIHYxKTsKLQkJbW1pb3diKCk7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19UU0ZfMCwgdjApOwotCX0KLQotCXN0YXR1cyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7Ci0Jc3RhdHVzICY9IH5CQ000M3h4X1NCRl9USU1FX1VQREFURTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxELCBzdGF0dXMpOwotfQotCi1zdGF0aWMKLXZvaWQgYmNtNDN4eF9tYWNmaWx0ZXJfc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCSAgIHUxNiBvZmZzZXQsCi0JCQkgICBjb25zdCB1OCAqbWFjKQotewotCXUxNiBkYXRhOwotCi0Jb2Zmc2V0IHw9IDB4MDAyMDsKLQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fTUFDRklMVEVSX0NPTlRST0wsIG9mZnNldCk7Ci0KLQlkYXRhID0gbWFjWzBdOwotCWRhdGEgfD0gbWFjWzFdIDw8IDg7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX01BQ0ZJTFRFUl9EQVRBLCBkYXRhKTsKLQlkYXRhID0gbWFjWzJdOwotCWRhdGEgfD0gbWFjWzNdIDw8IDg7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX01BQ0ZJTFRFUl9EQVRBLCBkYXRhKTsKLQlkYXRhID0gbWFjWzRdOwotCWRhdGEgfD0gbWFjWzVdIDw8IDg7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX01BQ0ZJTFRFUl9EQVRBLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9tYWNmaWx0ZXJfY2xlYXIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgICB1MTYgb2Zmc2V0KQotewotCWNvbnN0IHU4IHplcm9fYWRkcltFVEhfQUxFTl0gPSB7IDAgfTsKLQotCWJjbTQzeHhfbWFjZmlsdGVyX3NldChiY20sIG9mZnNldCwgemVyb19hZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF93cml0ZV9tYWNfYnNzaWRfdGVtcGxhdGVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQljb25zdCB1OCAqbWFjID0gKGNvbnN0IHU4ICopKGJjbS0+bmV0X2Rldi0+ZGV2X2FkZHIpOwotCWNvbnN0IHU4ICpic3NpZCA9IChjb25zdCB1OCAqKShiY20tPmllZWUtPmJzc2lkKTsKLQl1OCBtYWNfYnNzaWRbRVRIX0FMRU4gKiAyXTsKLQlpbnQgaTsKLQotCW1lbWNweShtYWNfYnNzaWQsIG1hYywgRVRIX0FMRU4pOwotCW1lbWNweShtYWNfYnNzaWQgKyBFVEhfQUxFTiwgYnNzaWQsIEVUSF9BTEVOKTsKLQotCS8qIFdyaXRlIG91ciBNQUMgYWRkcmVzcyBhbmQgQlNTSUQgdG8gdGVtcGxhdGUgcmFtICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFjX2Jzc2lkKTsgaSArPSBzaXplb2YodTMyKSkKLQkJYmNtNDN4eF9yYW1fd3JpdGUoYmNtLCAweDIwICsgaSwgKigodTMyICopKG1hY19ic3NpZCArIGkpKSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFjX2Jzc2lkKTsgaSArPSBzaXplb2YodTMyKSkKLQkJYmNtNDN4eF9yYW1fd3JpdGUoYmNtLCAweDc4ICsgaSwgKigodTMyICopKG1hY19ic3NpZCArIGkpKSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFjX2Jzc2lkKTsgaSArPSBzaXplb2YodTMyKSkKLQkJYmNtNDN4eF9yYW1fd3JpdGUoYmNtLCAweDQ3OCArIGksICooKHUzMiAqKShtYWNfYnNzaWQgKyBpKSkpOwotfQotCi0vL0ZJWE1FOiBXZWxsLCB3ZSBzaG91bGQgcHJvYmFibHkgY2FsbCB0aGVtIGZyb20gc29tZXdoZXJlLgotI2lmIDAKLXN0YXRpYyB2b2lkIGJjbTQzeHhfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBzbG90X3RpbWUpCi17Ci0JLyogc2xvdF90aW1lIGlzIGluIHVzZWMuICovCi0JaWYgKGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+dHlwZSAhPSBCQ000M3h4X1BIWVRZUEVfRykKLQkJcmV0dXJuOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4Njg0LCA1MTAgKyBzbG90X3RpbWUpOwotCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDAxMCwgc2xvdF90aW1lKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9zaG9ydF9zbG90X3RpbWluZ19lbmFibGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWJjbTQzeHhfc2V0X3Nsb3RfdGltZShiY20sIDkpOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3Nob3J0X3Nsb3RfdGltaW5nX2Rpc2FibGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWJjbTQzeHhfc2V0X3Nsb3RfdGltZShiY20sIDIwKTsKLX0KLSNlbmRpZgotCi0vKiBGSVhNRTogVG8gZ2V0IHRoZSBNQUMtZmlsdGVyIHdvcmtpbmcsIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoZQotICogICAgICAgIGZvbGxvd2luZyBmdW5jdGlvbnMgKGFuZCByZW5hbWUgdGhlbSA6KQotICovCi0jaWYgMAotc3RhdGljIHZvaWQgYmNtNDN4eF9kaXNhc3NvY2lhdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWJjbTQzeHhfbWFjX3N1c3BlbmQoYmNtKTsKLQliY200M3h4X21hY2ZpbHRlcl9jbGVhcihiY20sIEJDTTQzeHhfTUFDRklMVEVSX0FTU09DKTsKLQotCWJjbTQzeHhfcmFtX3dyaXRlKGJjbSwgMHgwMDI2LCAweDAwMDApOwotCWJjbTQzeHhfcmFtX3dyaXRlKGJjbSwgMHgwMDI4LCAweDAwMDApOwotCWJjbTQzeHhfcmFtX3dyaXRlKGJjbSwgMHgwMDdFLCAweDAwMDApOwotCWJjbTQzeHhfcmFtX3dyaXRlKGJjbSwgMHgwMDgwLCAweDAwMDApOwotCWJjbTQzeHhfcmFtX3dyaXRlKGJjbSwgMHgwNDdFLCAweDAwMDApOwotCWJjbTQzeHhfcmFtX3dyaXRlKGJjbSwgMHgwNDgwLCAweDAwMDApOwotCi0JaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCAzKSB7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDYxMCwgMHg4MDAwKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNjBFLCAweDAwMDApOwotCX0gZWxzZQotCQliY200M3h4X3dyaXRlMzIoYmNtLCAweDAxODgsIDB4ODAwMDAwMDApOwotCi0JYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sIEJDTTQzeHhfU0hNX1dJUkVMRVNTLCAweDAwMDQsIDB4MDAwMDAzZmYpOwotCi0JaWYgKGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRyAmJgotCSAgICBpZWVlODAyMTFfaXNfb2ZkbV9yYXRlKGJjbS0+c29mdG1hYy0+dHhyYXRlcy5kZWZhdWx0X3JhdGUpKQotCQliY200M3h4X3Nob3J0X3Nsb3RfdGltaW5nX2VuYWJsZShiY20pOwotCi0JYmNtNDN4eF9tYWNfZW5hYmxlKGJjbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfYXNzb2NpYXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCSAgICAgIGNvbnN0IHU4ICptYWMpCi17Ci0JbWVtY3B5KGJjbS0+aWVlZS0+YnNzaWQsIG1hYywgRVRIX0FMRU4pOwotCi0JYmNtNDN4eF9tYWNfc3VzcGVuZChiY20pOwotCWJjbTQzeHhfbWFjZmlsdGVyX3NldChiY20sIEJDTTQzeHhfTUFDRklMVEVSX0FTU09DLCBtYWMpOwotCWJjbTQzeHhfd3JpdGVfbWFjX2Jzc2lkX3RlbXBsYXRlcyhiY20pOwotCWJjbTQzeHhfbWFjX2VuYWJsZShiY20pOwotfQotI2VuZGlmCi0KLS8qIEVuYWJsZSBhIEdlbmVyaWMgSVJRLiAibWFzayIgaXMgdGhlIG1hc2sgb2Ygd2hpY2ggSVJRcyB0byBlbmFibGUuCi0gKiBSZXR1cm5zIHRoZSBfcHJldmlvdXNseV8gZW5hYmxlZCBJUlEgbWFzay4KLSAqLwotc3RhdGljIGlubGluZSB1MzIgYmNtNDN4eF9pbnRlcnJ1cHRfZW5hYmxlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTMyIG1hc2spCi17Ci0JdTMyIG9sZF9tYXNrOwotCi0Jb2xkX21hc2sgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX01BU0spOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX01BU0ssIG9sZF9tYXNrIHwgbWFzayk7Ci0KLQlyZXR1cm4gb2xkX21hc2s7Ci19Ci0KLS8qIERpc2FibGUgYSBHZW5lcmljIElSUS4gIm1hc2siIGlzIHRoZSBtYXNrIG9mIHdoaWNoIElSUXMgdG8gZGlzYWJsZS4KLSAqIFJldHVybnMgdGhlIF9wcmV2aW91c2x5XyBlbmFibGVkIElSUSBtYXNrLgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBiY200M3h4X2ludGVycnVwdF9kaXNhYmxlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTMyIG1hc2spCi17Ci0JdTMyIG9sZF9tYXNrOwotCi0Jb2xkX21hc2sgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX01BU0spOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX01BU0ssIG9sZF9tYXNrICYgfm1hc2spOwotCi0JcmV0dXJuIG9sZF9tYXNrOwotfQotCi0vKiBTeW5jaHJvbml6ZSBJUlEgdG9wLSBhbmQgYm90dG9tLWhhbGYuCi0gKiBJUlFzIG11c3QgYmUgbWFza2VkIGJlZm9yZSBjYWxsaW5nIHRoaXMuCi0gKiBUaGlzIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIHRoZSBpcnFfbG9jayBoZWxkLgotICovCi1zdGF0aWMgdm9pZCBiY200M3h4X3N5bmNocm9uaXplX2lycShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3luY2hyb25pemVfaXJxKGJjbS0+aXJxKTsKLQl0YXNrbGV0X2Rpc2FibGUoJmJjbS0+aXNyX3Rhc2tsZXQpOwotfQotCi0vKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVjZWl2ZSBtb3JlIGRhdGEgZnJvbSB0aGUgZGV2aWNlLiAqLwotc3RhdGljIGludCBiY200M3h4X2Rpc2FibGVfaW50ZXJydXB0c19zeW5jKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoYmNtNDN4eF9zdGF0dXMoYmNtKSAhPSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JYmNtNDN4eF9pbnRlcnJ1cHRfZGlzYWJsZShiY20sIEJDTTQzeHhfSVJRX0FMTCk7Ci0JYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9NQVNLKTsgLyogZmx1c2ggKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JYmNtNDN4eF9zeW5jaHJvbml6ZV9pcnEoYmNtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfcmVhZF9yYWRpb2luZm8oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JdTMyIHJhZGlvX2lkOwotCXUxNiBtYW51ZmFjdDsKLQl1MTYgdmVyc2lvbjsKLQl1OCByZXZpc2lvbjsKLQotCWlmIChiY20tPmNoaXBfaWQgPT0gMHg0MzE3KSB7Ci0JCWlmIChiY20tPmNoaXBfcmV2ID09IDB4MDApCi0JCQlyYWRpb19pZCA9IDB4MzIwNTAxN0Y7Ci0JCWVsc2UgaWYgKGJjbS0+Y2hpcF9yZXYgPT0gMHgwMSkKLQkJCXJhZGlvX2lkID0gMHg0MjA1MDE3RjsKLQkJZWxzZQotCQkJcmFkaW9faWQgPSAweDUyMDUwMTdGOwotCX0gZWxzZSB7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19SQURJT19DT05UUk9MLCBCQ000M3h4X1JBRElPQ1RMX0lEKTsKLQkJcmFkaW9faWQgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19SQURJT19EQVRBX0hJR0gpOwotCQlyYWRpb19pZCA8PD0gMTY7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19SQURJT19DT05UUk9MLCBCQ000M3h4X1JBRElPQ1RMX0lEKTsKLQkJcmFkaW9faWQgfD0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fUkFESU9fREFUQV9MT1cpOwotCX0KLQotCW1hbnVmYWN0ID0gKHJhZGlvX2lkICYgMHgwMDAwMEZGRik7Ci0JdmVyc2lvbiA9IChyYWRpb19pZCAmIDB4MEZGRkYwMDApID4+IDEyOwotCXJldmlzaW9uID0gKHJhZGlvX2lkICYgMHhGMDAwMDAwMCkgPj4gMjg7Ci0KLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRldGVjdGVkIFJhZGlvOiBJRDogJXggKE1hbnVmOiAleCBWZXI6ICV4IFJldjogJXgpXG4iLAotCQlyYWRpb19pZCwgbWFudWZhY3QsIHZlcnNpb24sIHJldmlzaW9uKTsKLQotCXN3aXRjaCAocGh5LT50eXBlKSB7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQkJaWYgKCh2ZXJzaW9uICE9IDB4MjA2MCkgfHwgKHJldmlzaW9uICE9IDEpIHx8IChtYW51ZmFjdCAhPSAweDE3ZikpCi0JCQlnb3RvIGVycl91bnN1cHBvcnRlZF9yYWRpbzsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQjoKLQkJaWYgKCh2ZXJzaW9uICYgMHhGRkYwKSAhPSAweDIwNTApCi0JCQlnb3RvIGVycl91bnN1cHBvcnRlZF9yYWRpbzsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfRzoKLQkJaWYgKHZlcnNpb24gIT0gMHgyMDUwKQotCQkJZ290byBlcnJfdW5zdXBwb3J0ZWRfcmFkaW87Ci0JCWJyZWFrOwotCX0KLQotCXJhZGlvLT5tYW51ZmFjdCA9IG1hbnVmYWN0OwotCXJhZGlvLT52ZXJzaW9uID0gdmVyc2lvbjsKLQlyYWRpby0+cmV2aXNpb24gPSByZXZpc2lvbjsKLQotCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpCi0JCXJhZGlvLT50eHBvd2VyX2Rlc2lyZWQgPSBiY20tPnNwcm9tLm1heHBvd2VyX2FwaHk7Ci0JZWxzZQotCQlyYWRpby0+dHhwb3dlcl9kZXNpcmVkID0gYmNtLT5zcHJvbS5tYXhwb3dlcl9iZ3BoeTsKLQotCXJldHVybiAwOwotCi1lcnJfdW5zdXBwb3J0ZWRfcmFkaW86Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5zdXBwb3J0ZWQgUmFkaW8gY29ubmVjdGVkIHRvIHRoZSBQSFkhXG4iKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBiY200M3h4X2xvY2FsZV9pc28odTggbG9jYWxlKQotewotCS8qIElTTyAzMTY2LTEgY291bnRyeSBjb2Rlcy4KLQkgKiBOb3RlIHRoYXQgdGhlcmUgYXJlbid0IElTTyAzMTY2LTEgY29kZXMgZm9yCi0JICogYWxsIG9yIGxvY2FsZXMuIChOb3QgYWxsIGxvY2FsZXMgYXJlIGNvdW50cmllcykKLQkgKi8KLQlzd2l0Y2ggKGxvY2FsZSkgewotCWNhc2UgQkNNNDN4eF9MT0NBTEVfV09STEQ6Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9BTEw6Ci0JCXJldHVybiAiWFgiOwotCWNhc2UgQkNNNDN4eF9MT0NBTEVfVEhBSUxBTkQ6Ci0JCXJldHVybiAiVEgiOwotCWNhc2UgQkNNNDN4eF9MT0NBTEVfSVNSQUVMOgotCQlyZXR1cm4gIklMIjsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX0pPUkRBTjoKLQkJcmV0dXJuICJKTyI7Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9DSElOQToKLQkJcmV0dXJuICJDTiI7Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9KQVBBTjoKLQljYXNlIEJDTTQzeHhfTE9DQUxFX0pBUEFOX0hJR0g6Ci0JCXJldHVybiAiSlAiOwotCWNhc2UgQkNNNDN4eF9MT0NBTEVfVVNBX0NBTkFEQV9BTlo6Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9VU0FfTE9XOgotCQlyZXR1cm4gIlVTIjsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX0VVUk9QRToKLQkJcmV0dXJuICJFVSI7Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9OT05FOgotCQlyZXR1cm4gIiAgIjsKLQl9Ci0JYXNzZXJ0KDApOwotCXJldHVybiAiICAiOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqIGJjbTQzeHhfbG9jYWxlX3N0cmluZyh1OCBsb2NhbGUpCi17Ci0Jc3dpdGNoIChsb2NhbGUpIHsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX1dPUkxEOgotCQlyZXR1cm4gIldvcmxkIjsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX1RIQUlMQU5EOgotCQlyZXR1cm4gIlRoYWlsYW5kIjsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX0lTUkFFTDoKLQkJcmV0dXJuICJJc3JhZWwiOwotCWNhc2UgQkNNNDN4eF9MT0NBTEVfSk9SREFOOgotCQlyZXR1cm4gIkpvcmRhbiI7Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9DSElOQToKLQkJcmV0dXJuICJDaGluYSI7Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9KQVBBTjoKLQkJcmV0dXJuICJKYXBhbiI7Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9VU0FfQ0FOQURBX0FOWjoKLQkJcmV0dXJuICJVU0EvQ2FuYWRhL0FOWiI7Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9FVVJPUEU6Ci0JCXJldHVybiAiRXVyb3BlIjsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX1VTQV9MT1c6Ci0JCXJldHVybiAiVVNBbG93IjsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX0pBUEFOX0hJR0g6Ci0JCXJldHVybiAiSmFwYW5IaWdoIjsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX0FMTDoKLQkJcmV0dXJuICJBbGwiOwotCWNhc2UgQkNNNDN4eF9MT0NBTEVfTk9ORToKLQkJcmV0dXJuICJOb25lIjsKLQl9Ci0JYXNzZXJ0KDApOwotCXJldHVybiAiIjsKLX0KLQotc3RhdGljIGlubGluZSB1OCBiY200M3h4X2NyYzgodTggY3JjLCB1OCBkYXRhKQotewotCXN0YXRpYyBjb25zdCB1OCB0W10gPSB7Ci0JCTB4MDAsIDB4RjcsIDB4QjksIDB4NEUsIDB4MjUsIDB4RDIsIDB4OUMsIDB4NkIsCi0JCTB4NEEsIDB4QkQsIDB4RjMsIDB4MDQsIDB4NkYsIDB4OTgsIDB4RDYsIDB4MjEsCi0JCTB4OTQsIDB4NjMsIDB4MkQsIDB4REEsIDB4QjEsIDB4NDYsIDB4MDgsIDB4RkYsCi0JCTB4REUsIDB4MjksIDB4NjcsIDB4OTAsIDB4RkIsIDB4MEMsIDB4NDIsIDB4QjUsCi0JCTB4N0YsIDB4ODgsIDB4QzYsIDB4MzEsIDB4NUEsIDB4QUQsIDB4RTMsIDB4MTQsCi0JCTB4MzUsIDB4QzIsIDB4OEMsIDB4N0IsIDB4MTAsIDB4RTcsIDB4QTksIDB4NUUsCi0JCTB4RUIsIDB4MUMsIDB4NTIsIDB4QTUsIDB4Q0UsIDB4MzksIDB4NzcsIDB4ODAsCi0JCTB4QTEsIDB4NTYsIDB4MTgsIDB4RUYsIDB4ODQsIDB4NzMsIDB4M0QsIDB4Q0EsCi0JCTB4RkUsIDB4MDksIDB4NDcsIDB4QjAsIDB4REIsIDB4MkMsIDB4NjIsIDB4OTUsCi0JCTB4QjQsIDB4NDMsIDB4MEQsIDB4RkEsIDB4OTEsIDB4NjYsIDB4MjgsIDB4REYsCi0JCTB4NkEsIDB4OUQsIDB4RDMsIDB4MjQsIDB4NEYsIDB4QjgsIDB4RjYsIDB4MDEsCi0JCTB4MjAsIDB4RDcsIDB4OTksIDB4NkUsIDB4MDUsIDB4RjIsIDB4QkMsIDB4NEIsCi0JCTB4ODEsIDB4NzYsIDB4MzgsIDB4Q0YsIDB4QTQsIDB4NTMsIDB4MUQsIDB4RUEsCi0JCTB4Q0IsIDB4M0MsIDB4NzIsIDB4ODUsIDB4RUUsIDB4MTksIDB4NTcsIDB4QTAsCi0JCTB4MTUsIDB4RTIsIDB4QUMsIDB4NUIsIDB4MzAsIDB4QzcsIDB4ODksIDB4N0UsCi0JCTB4NUYsIDB4QTgsIDB4RTYsIDB4MTEsIDB4N0EsIDB4OEQsIDB4QzMsIDB4MzQsCi0JCTB4QUIsIDB4NUMsIDB4MTIsIDB4RTUsIDB4OEUsIDB4NzksIDB4MzcsIDB4QzAsCi0JCTB4RTEsIDB4MTYsIDB4NTgsIDB4QUYsIDB4QzQsIDB4MzMsIDB4N0QsIDB4OEEsCi0JCTB4M0YsIDB4QzgsIDB4ODYsIDB4NzEsIDB4MUEsIDB4RUQsIDB4QTMsIDB4NTQsCi0JCTB4NzUsIDB4ODIsIDB4Q0MsIDB4M0IsIDB4NTAsIDB4QTcsIDB4RTksIDB4MUUsCi0JCTB4RDQsIDB4MjMsIDB4NkQsIDB4OUEsIDB4RjEsIDB4MDYsIDB4NDgsIDB4QkYsCi0JCTB4OUUsIDB4NjksIDB4MjcsIDB4RDAsIDB4QkIsIDB4NEMsIDB4MDIsIDB4RjUsCi0JCTB4NDAsIDB4QjcsIDB4RjksIDB4MEUsIDB4NjUsIDB4OTIsIDB4REMsIDB4MkIsCi0JCTB4MEEsIDB4RkQsIDB4QjMsIDB4NDQsIDB4MkYsIDB4RDgsIDB4OTYsIDB4NjEsCi0JCTB4NTUsIDB4QTIsIDB4RUMsIDB4MUIsIDB4NzAsIDB4ODcsIDB4QzksIDB4M0UsCi0JCTB4MUYsIDB4RTgsIDB4QTYsIDB4NTEsIDB4M0EsIDB4Q0QsIDB4ODMsIDB4NzQsCi0JCTB4QzEsIDB4MzYsIDB4NzgsIDB4OEYsIDB4RTQsIDB4MTMsIDB4NUQsIDB4QUEsCi0JCTB4OEIsIDB4N0MsIDB4MzIsIDB4QzUsIDB4QUUsIDB4NTksIDB4MTcsIDB4RTAsCi0JCTB4MkEsIDB4REQsIDB4OTMsIDB4NjQsIDB4MEYsIDB4RjgsIDB4QjYsIDB4NDEsCi0JCTB4NjAsIDB4OTcsIDB4RDksIDB4MkUsIDB4NDUsIDB4QjIsIDB4RkMsIDB4MEIsCi0JCTB4QkUsIDB4NDksIDB4MDcsIDB4RjAsIDB4OUIsIDB4NkMsIDB4MjIsIDB4RDUsCi0JCTB4RjQsIDB4MDMsIDB4NEQsIDB4QkEsIDB4RDEsIDB4MjYsIDB4NjgsIDB4OUYsCi0JfTsKLQlyZXR1cm4gdFtjcmMgXiBkYXRhXTsKLX0KLQotc3RhdGljIHU4IGJjbTQzeHhfc3Byb21fY3JjKGNvbnN0IHUxNiAqc3Byb20pCi17Ci0JaW50IHdvcmQ7Ci0JdTggY3JjID0gMHhGRjsKLQotCWZvciAod29yZCA9IDA7IHdvcmQgPCBCQ000M3h4X1NQUk9NX1NJWkUgLSAxOyB3b3JkKyspIHsKLQkJY3JjID0gYmNtNDN4eF9jcmM4KGNyYywgc3Byb21bd29yZF0gJiAweDAwRkYpOwotCQljcmMgPSBiY200M3h4X2NyYzgoY3JjLCAoc3Byb21bd29yZF0gJiAweEZGMDApID4+IDgpOwotCX0KLQljcmMgPSBiY200M3h4X2NyYzgoY3JjLCBzcHJvbVtCQ000M3h4X1NQUk9NX1ZFUlNJT05dICYgMHgwMEZGKTsKLQljcmMgXj0gMHhGRjsKLQotCXJldHVybiBjcmM7Ci19Ci0KLWludCBiY200M3h4X3Nwcm9tX3JlYWQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgKnNwcm9tKQotewotCWludCBpOwotCXU4IGNyYywgZXhwZWN0ZWRfY3JjOwotCi0JZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfU1BST01fU0laRTsgaSsrKQotCQlzcHJvbVtpXSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9TUFJPTV9CQVNFICsgKGkgKiAyKSk7Ci0JLyogQ1JDLTggY2hlY2suICovCi0JY3JjID0gYmNtNDN4eF9zcHJvbV9jcmMoc3Byb20pOwotCWV4cGVjdGVkX2NyYyA9IChzcHJvbVtCQ000M3h4X1NQUk9NX1ZFUlNJT05dICYgMHhGRjAwKSA+PiA4OwotCWlmIChjcmMgIT0gZXhwZWN0ZWRfY3JjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXQVJOSU5HOiBJbnZhbGlkIFNQUk9NIGNoZWNrc3VtICIKLQkJCQkJIigweCUwMlgsIGV4cGVjdGVkOiAweCUwMlgpXG4iLAotCQkgICAgICAgY3JjLCBleHBlY3RlZF9jcmMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGJjbTQzeHhfc3Byb21fd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCBjb25zdCB1MTYgKnNwcm9tKQotewotCWludCBpLCBlcnI7Ci0JdTggY3JjLCBleHBlY3RlZF9jcmM7Ci0JdTMyIHNwcm9tY3RsOwotCi0JLyogQ1JDLTggdmFsaWRhdGlvbiBvZiB0aGUgaW5wdXQgZGF0YS4gKi8KLQljcmMgPSBiY200M3h4X3Nwcm9tX2NyYyhzcHJvbSk7Ci0JZXhwZWN0ZWRfY3JjID0gKHNwcm9tW0JDTTQzeHhfU1BST01fVkVSU0lPTl0gJiAweEZGMDApID4+IDg7Ci0JaWYgKGNyYyAhPSBleHBlY3RlZF9jcmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU1BST00gaW5wdXQgZGF0YTogSW52YWxpZCBDUkNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiV3JpdGluZyBTUFJPTS4gRG8gTk9UIHR1cm4gb2ZmIHRoZSBwb3dlciEgUGxlYXNlIHN0YW5kIGJ5Li4uXG4iKTsKLQllcnIgPSBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ0lDRkdfU1BST01DVEwsICZzcHJvbWN0bCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfY3RscmVnOwotCXNwcm9tY3RsIHw9IDB4MTA7IC8qIFNQUk9NIFdSSVRFIGVuYWJsZS4gKi8KLQllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWczMihiY20sIEJDTTQzeHhfUENJQ0ZHX1NQUk9NQ1RMLCBzcHJvbWN0bCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfY3RscmVnOwotCS8qIFdlIG11c3QgYnVybiBsb3RzIG9mIENQVSBjeWNsZXMgaGVyZSwgYnV0IHRoYXQgZG9lcyBub3QKLQkgKiByZWFsbHkgbWF0dGVyIGFzIG9uZSBkb2VzIG5vdCB3cml0ZSB0aGUgU1BST00gZXZlcnkgb3RoZXIgbWludXRlLi4uCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIlsgMCUlIik7Ci0JbWRlbGF5KDUwMCk7Ci0JZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfU1BST01fU0laRTsgaSsrKSB7Ci0JCWlmIChpID09IDE2KQotCQkJcHJpbnRrKCIyNSUlIik7Ci0JCWVsc2UgaWYgKGkgPT0gMzIpCi0JCQlwcmludGsoIjUwJSUiKTsKLQkJZWxzZSBpZiAoaSA9PSA0OCkKLQkJCXByaW50aygiNzUlJSIpOwotCQllbHNlIGlmIChpICUgMikKLQkJCXByaW50aygiLiIpOwotCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X1NQUk9NX0JBU0UgKyAoaSAqIDIpLCBzcHJvbVtpXSk7Ci0JCW1taW93YigpOwotCQltZGVsYXkoMjApOwotCX0KLQlzcHJvbWN0bCAmPSB+MHgxMDsgLyogU1BST00gV1JJVEUgZW5hYmxlLiAqLwotCWVyciA9IGJjbTQzeHhfcGNpX3dyaXRlX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ0lDRkdfU1BST01DVEwsIHNwcm9tY3RsKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9jdGxyZWc7Ci0JbWRlbGF5KDUwMCk7Ci0JcHJpbnRrKCIxMDAlJSBdXG4iKTsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiU1BST00gd3JpdHRlbi5cbiIpOwotCWJjbTQzeHhfY29udHJvbGxlcl9yZXN0YXJ0KGJjbSwgIlNQUk9NIHVwZGF0ZSIpOwotCi0JcmV0dXJuIDA7Ci1lcnJfY3RscmVnOgotCXByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkIG5vdCBhY2Nlc3MgU1BST00gY29udHJvbCByZWdpc3Rlci5cbiIpOwotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfc3Byb21fZXh0cmFjdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JdTE2IHZhbHVlOwotCXUxNiAqc3Byb207Ci0KLQlzcHJvbSA9IGt6YWxsb2MoQkNNNDN4eF9TUFJPTV9TSVpFICogc2l6ZW9mKHUxNiksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIXNwcm9tKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInNwcm9tX2V4dHJhY3QgT09NXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWJjbTQzeHhfc3Byb21fcmVhZChiY20sIHNwcm9tKTsKLQotCS8qIGJvYXJkZmxhZ3MyICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0JPQVJERkxBR1MyXTsKLQliY20tPnNwcm9tLmJvYXJkZmxhZ3MyID0gdmFsdWU7Ci0KLQkvKiBpbDBtYWNhZGRyICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0lMME1BQ0FERFIgKyAwXTsKLQkqKCgoX19iZTE2ICopYmNtLT5zcHJvbS5pbDBtYWNhZGRyKSArIDApID0gY3B1X3RvX2JlMTYodmFsdWUpOwotCXZhbHVlID0gc3Byb21bQkNNNDN4eF9TUFJPTV9JTDBNQUNBRERSICsgMV07Ci0JKigoKF9fYmUxNiAqKWJjbS0+c3Byb20uaWwwbWFjYWRkcikgKyAxKSA9IGNwdV90b19iZTE2KHZhbHVlKTsKLQl2YWx1ZSA9IHNwcm9tW0JDTTQzeHhfU1BST01fSUwwTUFDQUREUiArIDJdOwotCSooKChfX2JlMTYgKiliY20tPnNwcm9tLmlsMG1hY2FkZHIpICsgMikgPSBjcHVfdG9fYmUxNih2YWx1ZSk7Ci0KLQkvKiBldDBtYWNhZGRyICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0VUME1BQ0FERFIgKyAwXTsKLQkqKCgoX19iZTE2ICopYmNtLT5zcHJvbS5ldDBtYWNhZGRyKSArIDApID0gY3B1X3RvX2JlMTYodmFsdWUpOwotCXZhbHVlID0gc3Byb21bQkNNNDN4eF9TUFJPTV9FVDBNQUNBRERSICsgMV07Ci0JKigoKF9fYmUxNiAqKWJjbS0+c3Byb20uZXQwbWFjYWRkcikgKyAxKSA9IGNwdV90b19iZTE2KHZhbHVlKTsKLQl2YWx1ZSA9IHNwcm9tW0JDTTQzeHhfU1BST01fRVQwTUFDQUREUiArIDJdOwotCSooKChfX2JlMTYgKiliY20tPnNwcm9tLmV0MG1hY2FkZHIpICsgMikgPSBjcHVfdG9fYmUxNih2YWx1ZSk7Ci0KLQkvKiBldDFtYWNhZGRyICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0VUMU1BQ0FERFIgKyAwXTsKLQkqKCgoX19iZTE2ICopYmNtLT5zcHJvbS5ldDFtYWNhZGRyKSArIDApID0gY3B1X3RvX2JlMTYodmFsdWUpOwotCXZhbHVlID0gc3Byb21bQkNNNDN4eF9TUFJPTV9FVDFNQUNBRERSICsgMV07Ci0JKigoKF9fYmUxNiAqKWJjbS0+c3Byb20uZXQxbWFjYWRkcikgKyAxKSA9IGNwdV90b19iZTE2KHZhbHVlKTsKLQl2YWx1ZSA9IHNwcm9tW0JDTTQzeHhfU1BST01fRVQxTUFDQUREUiArIDJdOwotCSooKChfX2JlMTYgKiliY20tPnNwcm9tLmV0MW1hY2FkZHIpICsgMikgPSBjcHVfdG9fYmUxNih2YWx1ZSk7Ci0KLQkvKiBldGhlcm5ldCBwaHkgc2V0dGluZ3MgKi8KLQl2YWx1ZSA9IHNwcm9tW0JDTTQzeHhfU1BST01fRVRIUEhZXTsKLQliY20tPnNwcm9tLmV0MHBoeWFkZHIgPSAodmFsdWUgJiAweDAwMUYpOwotCWJjbS0+c3Byb20uZXQxcGh5YWRkciA9ICh2YWx1ZSAmIDB4MDNFMCkgPj4gNTsKLQotCS8qIGJvYXJkcmV2LCBhbnRlbm5hcywgbG9jYWxlICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0JPQVJEUkVWXTsKLQliY20tPnNwcm9tLmJvYXJkcmV2ID0gKHZhbHVlICYgMHgwMEZGKTsKLQliY20tPnNwcm9tLmxvY2FsZSA9ICh2YWx1ZSAmIDB4MEYwMCkgPj4gODsKLQliY20tPnNwcm9tLmFudGVubmFzX2FwaHkgPSAodmFsdWUgJiAweDMwMDApID4+IDEyOwotCWJjbS0+c3Byb20uYW50ZW5uYXNfYmdwaHkgPSAodmFsdWUgJiAweEMwMDApID4+IDE0OwotCWlmIChtb2RwYXJhbV9sb2NhbGUgIT0gLTEpIHsKLQkJaWYgKG1vZHBhcmFtX2xvY2FsZSA+PSAwICYmIG1vZHBhcmFtX2xvY2FsZSA8PSAxMSkgewotCQkJYmNtLT5zcHJvbS5sb2NhbGUgPSBtb2RwYXJhbV9sb2NhbGU7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiT3BlcmF0aW5nIHdpdGggbW9kaWZpZWQgIgotCQkJCQkJIkxvY2FsZUNvZGUgJXUgKCVzKVxuIiwKLQkJCSAgICAgICBiY20tPnNwcm9tLmxvY2FsZSwKLQkJCSAgICAgICBiY200M3h4X2xvY2FsZV9zdHJpbmcoYmNtLT5zcHJvbS5sb2NhbGUpKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJNb2R1bGUgcGFyYW1ldGVyIFwibG9jYWxlXCIgIgotCQkJCQkJImludmFsaWQgdmFsdWUuICgwIC0gMTEpXG4iKTsKLQkJfQotCX0KLQotCS8qIHBhMGIqICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX1BBMEIwXTsKLQliY20tPnNwcm9tLnBhMGIwID0gdmFsdWU7Ci0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX1BBMEIxXTsKLQliY20tPnNwcm9tLnBhMGIxID0gdmFsdWU7Ci0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX1BBMEIyXTsKLQliY20tPnNwcm9tLnBhMGIyID0gdmFsdWU7Ci0KLQkvKiB3bDBncGlvKiAqLwotCXZhbHVlID0gc3Byb21bQkNNNDN4eF9TUFJPTV9XTDBHUElPMF07Ci0JaWYgKHZhbHVlID09IDB4MDAwMCkKLQkJdmFsdWUgPSAweEZGRkY7Ci0JYmNtLT5zcHJvbS53bDBncGlvMCA9IHZhbHVlICYgMHgwMEZGOwotCWJjbS0+c3Byb20ud2wwZ3BpbzEgPSAodmFsdWUgJiAweEZGMDApID4+IDg7Ci0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX1dMMEdQSU8yXTsKLQlpZiAodmFsdWUgPT0gMHgwMDAwKQotCQl2YWx1ZSA9IDB4RkZGRjsKLQliY20tPnNwcm9tLndsMGdwaW8yID0gdmFsdWUgJiAweDAwRkY7Ci0JYmNtLT5zcHJvbS53bDBncGlvMyA9ICh2YWx1ZSAmIDB4RkYwMCkgPj4gODsKLQotCS8qIG1heHBvd2VyICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX01BWFBXUl07Ci0JYmNtLT5zcHJvbS5tYXhwb3dlcl9hcGh5ID0gKHZhbHVlICYgMHhGRjAwKSA+PiA4OwotCWJjbS0+c3Byb20ubWF4cG93ZXJfYmdwaHkgPSB2YWx1ZSAmIDB4MDBGRjsKLQotCS8qIHBhMWIqICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX1BBMUIwXTsKLQliY20tPnNwcm9tLnBhMWIwID0gdmFsdWU7Ci0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX1BBMUIxXTsKLQliY20tPnNwcm9tLnBhMWIxID0gdmFsdWU7Ci0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX1BBMUIyXTsKLQliY20tPnNwcm9tLnBhMWIyID0gdmFsdWU7Ci0KLQkvKiBpZGxlIHRzc2kgdGFyZ2V0ICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0lETF9UU1NJX1RHVF07Ci0JYmNtLT5zcHJvbS5pZGxlX3Rzc2lfdGd0X2FwaHkgPSB2YWx1ZSAmIDB4MDBGRjsKLQliY20tPnNwcm9tLmlkbGVfdHNzaV90Z3RfYmdwaHkgPSAodmFsdWUgJiAweEZGMDApID4+IDg7Ci0KLQkvKiBib2FyZGZsYWdzICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0JPQVJERkxBR1NdOwotCWlmICh2YWx1ZSA9PSAweEZGRkYpCi0JCXZhbHVlID0gMHgwMDAwOwotCWJjbS0+c3Byb20uYm9hcmRmbGFncyA9IHZhbHVlOwotCS8qIGJvYXJkZmxhZ3Mgd29ya2Fyb3VuZHMgKi8KLQlpZiAoYmNtLT5ib2FyZF92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9ERUxMICYmCi0JICAgIGJjbS0+Y2hpcF9pZCA9PSAweDQzMDEgJiYKLQkgICAgYmNtLT5ib2FyZF9yZXZpc2lvbiA9PSAweDc0KQotCQliY20tPnNwcm9tLmJvYXJkZmxhZ3MgfD0gQkNNNDN4eF9CRkxfQlRDT0VYSVNUOwotCWlmIChiY20tPmJvYXJkX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FQUExFICYmCi0JICAgIGJjbS0+Ym9hcmRfdHlwZSA9PSAweDRFICYmCi0JICAgIGJjbS0+Ym9hcmRfcmV2aXNpb24gPiAweDQwKQotCQliY20tPnNwcm9tLmJvYXJkZmxhZ3MgfD0gQkNNNDN4eF9CRkxfUEFDVFJMOwotCi0JLyogYW50ZW5uYSBnYWluICovCi0JdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0FOVEVOTkFfR0FJTl07Ci0JaWYgKHZhbHVlID09IDB4MDAwMCB8fCB2YWx1ZSA9PSAweEZGRkYpCi0JCXZhbHVlID0gMHgwMjAyOwotCS8qIGNvbnZlcnQgdmFsdWVzIHRvIFE1LjIgKi8KLQliY20tPnNwcm9tLmFudGVubmFnYWluX2FwaHkgPSAoKHZhbHVlICYgMHhGRjAwKSA+PiA4KSAqIDQ7Ci0JYmNtLT5zcHJvbS5hbnRlbm5hZ2Fpbl9iZ3BoeSA9ICh2YWx1ZSAmIDB4MDBGRikgKiA0OwotCi0Ja2ZyZWUoc3Byb20pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF9nZW9faW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JaW50IGhhdmVfYSA9IDAsIGhhdmVfYmcgPSAwOwotCWludCBpOwotCXU4IGNoYW5uZWw7Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5OwotCWNvbnN0IGNoYXIgKmlzb19jb3VudHJ5OwotCXU4IG1heF9iZ19jaGFubmVsOwotCi0JZ2VvID0ga3phbGxvYyhzaXplb2YoKmdlbyksIEdGUF9LRVJORUwpOwotCWlmICghZ2VvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKSB7Ci0JCXBoeSA9ICYoYmNtLT5jb3JlXzgwMjExX2V4dFtpXS5waHkpOwotCQlzd2l0Y2ggKHBoeS0+dHlwZSkgewotCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9COgotCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQkJaGF2ZV9iZyA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQkJCWhhdmVfYSA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWFzc2VydCgwKTsKLQkJfQotCX0KLQlpc29fY291bnRyeSA9IGJjbTQzeHhfbG9jYWxlX2lzbyhiY20tPnNwcm9tLmxvY2FsZSk7Ci0KLS8qIHNldCB0aGUgbWF4aW11bSBjaGFubmVsIGJhc2VkIG9uIGxvY2FsZSBzZXQgaW4gc3Byb20gb3Igd2l0bGUgbG9jYWxlIG9wdGlvbiAqLwotCXN3aXRjaCAoYmNtLT5zcHJvbS5sb2NhbGUpIHsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX1RIQUlMQU5EOgotCWNhc2UgQkNNNDN4eF9MT0NBTEVfSVNSQUVMOgotCWNhc2UgQkNNNDN4eF9MT0NBTEVfSk9SREFOOgotCWNhc2UgQkNNNDN4eF9MT0NBTEVfVVNBX0NBTkFEQV9BTlo6Ci0JY2FzZSBCQ000M3h4X0xPQ0FMRV9VU0FfTE9XOgotCQltYXhfYmdfY2hhbm5lbCA9IDExOwotCQlicmVhazsKLQljYXNlIEJDTTQzeHhfTE9DQUxFX0pBUEFOOgotCWNhc2UgQkNNNDN4eF9MT0NBTEVfSkFQQU5fSElHSDoKLQkJbWF4X2JnX2NoYW5uZWwgPSAxNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbWF4X2JnX2NoYW5uZWwgPSAxMzsKLQl9Ci0KLSAJaWYgKGhhdmVfYSkgewotCQlmb3IgKGkgPSAwLCBjaGFubmVsID0gSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMOwotCQkgICAgICBjaGFubmVsIDw9IElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTDsgY2hhbm5lbCsrKSB7Ci0JCQljaGFuID0gJmdlby0+YVtpKytdOwotCQkJY2hhbi0+ZnJlcSA9IGJjbTQzeHhfY2hhbm5lbF90b19mcmVxX2EoY2hhbm5lbCk7Ci0JCQljaGFuLT5jaGFubmVsID0gY2hhbm5lbDsKLQkJfQotCQlnZW8tPmFfY2hhbm5lbHMgPSBpOwotCX0KLQlpZiAoaGF2ZV9iZykgewotCQlmb3IgKGkgPSAwLCBjaGFubmVsID0gSUVFRTgwMjExXzI0R0haX01JTl9DSEFOTkVMOwotCQkgICAgICBjaGFubmVsIDw9IG1heF9iZ19jaGFubmVsOyBjaGFubmVsKyspIHsKLQkJCWNoYW4gPSAmZ2VvLT5iZ1tpKytdOwotCQkJY2hhbi0+ZnJlcSA9IGJjbTQzeHhfY2hhbm5lbF90b19mcmVxX2JnKGNoYW5uZWwpOwotCQkJY2hhbi0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JCX0KLQkJZ2VvLT5iZ19jaGFubmVscyA9IGk7Ci0JfQotCW1lbWNweShnZW8tPm5hbWUsIGlzb19jb3VudHJ5LCAyKTsKLQlpZiAoMCAvKlRPRE86IE91dGRvb3IgdXNlIG9ubHkgKi8pCi0JCWdlby0+bmFtZVsyXSA9ICdPJzsKLQllbHNlIGlmICgwIC8qVE9ETzogSW5kb29yIHVzZSBvbmx5ICovKQotCQlnZW8tPm5hbWVbMl0gPSAnSSc7Ci0JZWxzZQotCQlnZW8tPm5hbWVbMl0gPSAnICc7Ci0JZ2VvLT5uYW1lWzNdID0gJ1wwJzsKLQotCWllZWU4MDIxMV9zZXRfZ2VvKGJjbS0+aWVlZSwgZ2VvKTsKLQlrZnJlZShnZW8pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIER1bW15VHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBhcyBkb2N1bWVudGVkIG9uIAotICogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L0R1bW15VHJhbnNtaXNzaW9uCi0gKi8KLXZvaWQgYmNtNDN4eF9kdW1teV90cmFuc21pc3Npb24oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0JdW5zaWduZWQgaW50IGksIG1heF9sb29wOwotCXUxNiB2YWx1ZSA9IDA7Ci0JdTMyIGJ1ZmZlcls1XSA9IHsKLQkJMHgwMDAwMDAwMCwKLQkJMHgwMDAwRDQwMCwKLQkJMHgwMDAwMDAwMCwKLQkJMHgwMDAwMDAwMSwKLQkJMHgwMDAwMDAwMCwKLQl9OwotCi0Jc3dpdGNoIChwaHktPnR5cGUpIHsKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9BOgotCQltYXhfbG9vcCA9IDB4MUU7Ci0JCWJ1ZmZlclswXSA9IDB4Q0MwMTAyMDA7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0I6Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfRzoKLQkJbWF4X2xvb3AgPSAweEZBOwotCQlidWZmZXJbMF0gPSAweDZFODQwQjAwOyAKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJYmNtNDN4eF9yYW1fd3JpdGUoYmNtLCBpICogNCwgYnVmZmVyW2ldKTsKLQotCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7IC8qIGR1bW15IHJlYWQgKi8KLQotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDU2OCwgMHgwMDAwKTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDA3QzAsIDB4MDAwMCk7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNTBDLCAoKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSkgPyAxIDogMCkpOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDUwOCwgMHgwMDAwKTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDA1MEEsIDB4MDAwMCk7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNTRDLCAweDAwMDApOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDU2QSwgMHgwMDE0KTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDA1NjgsIDB4MDgyNik7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNTAwLCAweDAwMDApOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDUwMiwgMHgwMDMwKTsKLQotCWlmIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTAgJiYgcmFkaW8tPnJldmlzaW9uIDw9IDB4NSkKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLCAweDAwMTcpOwotCWZvciAoaSA9IDB4MDA7IGkgPCBtYXhfbG9vcDsgaSsrKSB7Ci0JCXZhbHVlID0gYmNtNDN4eF9yZWFkMTYoYmNtLCAweDA1MEUpOwotCQlpZiAodmFsdWUgJiAweDAwODApCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwKTsKLQl9Ci0JZm9yIChpID0gMHgwMDsgaSA8IDB4MEE7IGkrKykgewotCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgMHgwNTBFKTsKLQkJaWYgKHZhbHVlICYgMHgwNDAwKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCWZvciAoaSA9IDB4MDA7IGkgPCAweDBBOyBpKyspIHsKLQkJdmFsdWUgPSBiY200M3h4X3JlYWQxNihiY20sIDB4MDY5MCk7Ci0JCWlmICghKHZhbHVlICYgMHgwMTAwKSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTApOwotCX0KLQlpZiAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwICYmIHJhZGlvLT5yZXZpc2lvbiA8PSAweDUpCi0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MSwgMHgwMDM3KTsKLX0KLQotc3RhdGljIHZvaWQga2V5X3dyaXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJICAgICAgdTggaW5kZXgsIHU4IGFsZ29yaXRobSwgY29uc3QgX19sZTE2ICprZXkpCi17Ci0JdW5zaWduZWQgaW50IGksIGJhc2ljX3dlcCA9IDA7Ci0JdTMyIG9mZnNldDsKLQl1MTYgdmFsdWU7Ci0gCi0JLyogV3JpdGUgYXNzb2NpYXRlZCBrZXkgaW5mb3JtYXRpb24gKi8KLQliY200M3h4X3NobV93cml0ZTE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDEwMCArIChpbmRleCAqIDIpLAotCQkJICAgICgoaW5kZXggPDwgNCkgfCAoYWxnb3JpdGhtICYgMHgwRikpKTsKLSAKLQkvKiBUaGUgZmlyc3QgNCBXRVAga2V5cyBuZWVkIGV4dHJhIGxvdmUgKi8KLQlpZiAoKChhbGdvcml0aG0gPT0gQkNNNDN4eF9TRUNfQUxHT19XRVApIHx8Ci0JICAgIChhbGdvcml0aG0gPT0gQkNNNDN4eF9TRUNfQUxHT19XRVAxMDQpKSAmJiAoaW5kZXggPCA0KSkKLQkJYmFzaWNfd2VwID0gMTsKLSAKLQkvKiBXcml0ZSBrZXkgcGF5bG9hZCwgOCBsaXR0bGUgZW5kaWFuIHdvcmRzICovCi0Jb2Zmc2V0ID0gYmNtLT5zZWN1cml0eV9vZmZzZXQgKyAoaW5kZXggKiBCQ000M3h4X1NFQ19LRVlTSVpFKTsKLQlmb3IgKGkgPSAwOyBpIDwgKEJDTTQzeHhfU0VDX0tFWVNJWkUgLyBzaXplb2YodTE2KSk7IGkrKykgewotCQl2YWx1ZSA9IGxlMTZfdG9fY3B1KGtleVtpXSk7Ci0JCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJICAgIG9mZnNldCArIChpICogMiksIHZhbHVlKTsKLSAKLQkJaWYgKCFiYXNpY193ZXApCi0JCQljb250aW51ZTsKLSAKLQkJYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkgICAgb2Zmc2V0ICsgKGkgKiAyKSArIDQgKiBCQ000M3h4X1NFQ19LRVlTSVpFLAotCQkJCSAgICB2YWx1ZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBrZXltYWNfd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJIHU4IGluZGV4LCBjb25zdCBfX2JlMzIgKmFkZHIpCi17Ci0JLyogZm9yIGtleXMgMC0zIHRoZXJlIGlzIG5vIGFzc29jaWF0ZWQgbWFjIGFkZHJlc3MgKi8KLQlpZiAoaW5kZXggPCA0KQotCQlyZXR1cm47Ci0KLQlpbmRleCAtPSA0OwotCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDUpIHsKLQkJYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sCi0JCQkJICAgIEJDTTQzeHhfU0hNX0hXTUFDLAotCQkJCSAgICBpbmRleCAqIDIsCi0JCQkJICAgIGJlMzJfdG9fY3B1KCphZGRyKSk7Ci0JCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLAotCQkJCSAgICBCQ000M3h4X1NITV9IV01BQywKLQkJCQkgICAgKGluZGV4ICogMikgKyAxLAotCQkJCSAgICBiZTE2X3RvX2NwdSgqKChfX2JlMTYgKikoYWRkciArIDEpKSkpOwotCX0gZWxzZSB7Ci0JCWlmIChpbmRleCA8IDgpIHsKLQkJCVRPRE8oKTsgLyogUHV0IHRoZW0gaW4gdGhlIG1hY2FkZHJlc3MgZmlsdGVyICovCi0JCX0gZWxzZSB7Ci0JCQlUT0RPKCk7Ci0JCQkvKiBQdXQgdGhlbSBCQ000M3h4X1NITV9TSEFSRUQsIHN0YXRpbmcgaW5kZXggMHgwMTIwLgotCQkJICAgS2VlcCBpbiBtaW5kIHRvIHVwZGF0ZSB0aGUgY291bnQgb2Yga2V5bWFjcyBpbiAweDAwM0UgYXMgd2VsbCEgKi8KLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBiY200M3h4X2tleV93cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkgICAgIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sCi0JCQkgICAgIGNvbnN0IHU4ICpfa2V5LCBpbnQga2V5X2xlbiwKLQkJCSAgICAgY29uc3QgdTggKm1hY19hZGRyKQotewotCXU4IGtleVtCQ000M3h4X1NFQ19LRVlTSVpFXSA9IHsgMCB9OwotCi0JaWYgKGluZGV4ID49IEFSUkFZX1NJWkUoYmNtLT5rZXkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoa2V5X2xlbiA+IEFSUkFZX1NJWkUoa2V5KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGFsZ29yaXRobSA8IDEgfHwgYWxnb3JpdGhtID4gNSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1jcHkoa2V5LCBfa2V5LCBrZXlfbGVuKTsKLQlrZXlfd3JpdGUoYmNtLCBpbmRleCwgYWxnb3JpdGhtLCAoY29uc3QgX19sZTE2ICopa2V5KTsKLQlrZXltYWNfd3JpdGUoYmNtLCBpbmRleCwgKGNvbnN0IF9fYmUzMiAqKW1hY19hZGRyKTsKLQotCWJjbS0+a2V5W2luZGV4XS5hbGdvcml0aG0gPSBhbGdvcml0aG07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9jbGVhcl9rZXlzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdGF0aWMgY29uc3QgX19iZTMyIHplcm9fbWFjWzJdID0geyAwIH07Ci0JdW5zaWduZWQgaW50IGksaiwgbnJfa2V5cyA9IDU0OwotCXUxNiBvZmZzZXQ7Ci0KLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDUpCi0JCW5yX2tleXMgPSAxNjsKLQlhc3NlcnQobnJfa2V5cyA8PSBBUlJBWV9TSVpFKGJjbS0+a2V5KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfa2V5czsgaSsrKSB7Ci0JCWJjbS0+a2V5W2ldLmVuYWJsZWQgPSAwOwotCQkvKiByZXR1cm5zIGZvciBpIDwgNCBpbW1lZGlhdGVseSAqLwotCQlrZXltYWNfd3JpdGUoYmNtLCBpLCB6ZXJvX21hYyk7Ci0JCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJICAgIDB4MTAwICsgKGkgKiAyKSwgMHgwMDAwKTsKLQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewotCQkJb2Zmc2V0ID0gYmNtLT5zZWN1cml0eV9vZmZzZXQgKyAoaiAqIDQpICsgKGkgKiBCQ000M3h4X1NFQ19LRVlTSVpFKTsKLQkJCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJCSAgICBvZmZzZXQsIDB4MDAwMCk7Ci0JCX0KLQl9Ci0JZHByaW50ayhLRVJOX0lORk8gUEZYICJLZXlzIGNsZWFyZWRcbiIpOwotfQotCi0vKiBMb3dsZXZlbCBjb3JlLXN3aXRjaCBmdW5jdGlvbi4gVGhpcyBpcyBvbmx5IHRvIGJlIHVzZWQgaW4KLSAqIGJjbTQzeHhfc3dpdGNoX2NvcmUoKSBhbmQgYmNtNDN4eF9wcm9iZV9jb3JlcygpCi0gKi8KLXN0YXRpYyBpbnQgX3N3aXRjaF9jb3JlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGNvcmUpCi17Ci0JaW50IGVycjsKLQlpbnQgYXR0ZW1wdHMgPSAwOwotCXUzMiBjdXJyZW50X2NvcmU7Ci0KLQlhc3NlcnQoY29yZSA+PSAwKTsKLQl3aGlsZSAoMSkgewotCQllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWczMihiY20sIEJDTTQzeHhfUENJQ0ZHX0FDVElWRV9DT1JFLAotCQkJCQkJIChjb3JlICogMHgxMDAwKSArIDB4MTgwMDAwMDApOwotCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCWdvdG8gZXJyb3I7Ci0JCWVyciA9IGJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMzIoYmNtLCBCQ000M3h4X1BDSUNGR19BQ1RJVkVfQ09SRSwKLQkJCQkJCSZjdXJyZW50X2NvcmUpOwotCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCWdvdG8gZXJyb3I7Ci0JCWN1cnJlbnRfY29yZSA9IChjdXJyZW50X2NvcmUgLSAweDE4MDAwMDAwKSAvIDB4MTAwMDsKLQkJaWYgKGN1cnJlbnRfY29yZSA9PSBjb3JlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHVubGlrZWx5KGF0dGVtcHRzKysgPiBCQ000M3h4X1NXSVRDSF9DT1JFX01BWF9SRVRSSUVTKSkKLQkJCWdvdG8gZXJyb3I7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci1lcnJvcjoKLQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gc3dpdGNoIHRvIGNvcmUgJWRcbiIsIGNvcmUpOwotCXJldHVybiAtRU5PREVWOwotfQotCi1pbnQgYmNtNDN4eF9zd2l0Y2hfY29yZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpuZXdfY29yZSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKHVubGlrZWx5KCFuZXdfY29yZSkpCi0JCXJldHVybiAwOwotCWlmICghbmV3X2NvcmUtPmF2YWlsYWJsZSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGJjbS0+Y3VycmVudF9jb3JlID09IG5ld19jb3JlKQotCQlyZXR1cm4gMDsKLQllcnIgPSBfc3dpdGNoX2NvcmUoYmNtLCBuZXdfY29yZS0+aW5kZXgpOwotCWlmICh1bmxpa2VseShlcnIpKQotCQlnb3RvIG91dDsKLQotCWJjbS0+Y3VycmVudF9jb3JlID0gbmV3X2NvcmU7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X2NvcmVfZW5hYmxlZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JdTMyIHZhbHVlOwotCi0JdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7Ci0JdmFsdWUgJj0gQkNNNDN4eF9TQlRNU1RBVEVMT1dfQ0xPQ0sgfCBCQ000M3h4X1NCVE1TVEFURUxPV19SRVNFVAotCQkgfCBCQ000M3h4X1NCVE1TVEFURUxPV19SRUpFQ1Q7Ci0KLQlyZXR1cm4gKHZhbHVlID09IEJDTTQzeHhfU0JUTVNUQVRFTE9XX0NMT0NLKTsKLX0KLQotLyogZGlzYWJsZSBjdXJyZW50IGNvcmUgKi8KLXN0YXRpYyBpbnQgYmNtNDN4eF9jb3JlX2Rpc2FibGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MzIgY29yZV9mbGFncykKLXsKLQl1MzIgc2J0bXN0YXRlbG93OwotCXUzMiBzYnRtc3RhdGVoaWdoOwotCWludCBpOwotCi0JLyogZmV0Y2ggc2J0bXN0YXRlbG93IGZyb20gY29yZSBpbmZvcm1hdGlvbiByZWdpc3RlcnMgKi8KLQlzYnRtc3RhdGVsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7Ci0KLQkvKiBjb3JlIGlzIGFscmVhZHkgaW4gcmVzZXQgKi8KLQlpZiAoc2J0bXN0YXRlbG93ICYgQkNNNDN4eF9TQlRNU1RBVEVMT1dfUkVTRVQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHNidG1zdGF0ZWxvdyAmIEJDTTQzeHhfU0JUTVNUQVRFTE9XX0NMT0NLKSB7Ci0JCXNidG1zdGF0ZWxvdyA9IEJDTTQzeHhfU0JUTVNUQVRFTE9XX0NMT0NLIHwKLQkJCSAgICAgICBCQ000M3h4X1NCVE1TVEFURUxPV19SRUpFQ1Q7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVywgc2J0bXN0YXRlbG93KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0JCQlzYnRtc3RhdGVsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7Ci0JCQlpZiAoc2J0bXN0YXRlbG93ICYgQkNNNDN4eF9TQlRNU1RBVEVMT1dfUkVKRUNUKSB7Ci0JCQkJaSA9IC0xOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdWRlbGF5KDEwKTsKLQkJfQotCQlpZiAoaSAhPSAtMSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3I6IGNvcmVfZGlzYWJsZSgpIFJFSkVDVCB0aW1lb3V0IVxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewotCQkJc2J0bXN0YXRlaGlnaCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFSElHSCk7Ci0JCQlpZiAoIShzYnRtc3RhdGVoaWdoICYgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0JVU1kpKSB7Ci0JCQkJaSA9IC0xOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdWRlbGF5KDEwKTsKLQkJfQotCQlpZiAoaSAhPSAtMSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3I6IGNvcmVfZGlzYWJsZSgpIEJVU1kgdGltZW91dCFcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCi0JCXNidG1zdGF0ZWxvdyA9IEJDTTQzeHhfU0JUTVNUQVRFTE9XX0ZPUkNFX0dBVEVfQ0xPQ0sgfAotCQkJICAgICAgIEJDTTQzeHhfU0JUTVNUQVRFTE9XX1JFSkVDVCB8Ci0JCQkgICAgICAgQkNNNDN4eF9TQlRNU1RBVEVMT1dfUkVTRVQgfAotCQkJICAgICAgIEJDTTQzeHhfU0JUTVNUQVRFTE9XX0NMT0NLIHwKLQkJCSAgICAgICBjb3JlX2ZsYWdzOwotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1csIHNidG1zdGF0ZWxvdyk7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCi0Jc2J0bXN0YXRlbG93ID0gQkNNNDN4eF9TQlRNU1RBVEVMT1dfUkVTRVQgfAotCQkgICAgICAgQkNNNDN4eF9TQlRNU1RBVEVMT1dfUkVKRUNUIHwKLQkJICAgICAgIGNvcmVfZmxhZ3M7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XLCBzYnRtc3RhdGVsb3cpOwotCi1vdXQ6Ci0JYmNtLT5jdXJyZW50X2NvcmUtPmVuYWJsZWQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGVuYWJsZSAocmVzZXQpIGN1cnJlbnQgY29yZSAqLwotc3RhdGljIGludCBiY200M3h4X2NvcmVfZW5hYmxlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTMyIGNvcmVfZmxhZ3MpCi17Ci0JdTMyIHNidG1zdGF0ZWxvdzsKLQl1MzIgc2J0bXN0YXRlaGlnaDsKLQl1MzIgc2JpbXN0YXRlOwotCWludCBlcnI7Ci0KLQllcnIgPSBiY200M3h4X2NvcmVfZGlzYWJsZShiY20sIGNvcmVfZmxhZ3MpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0Jc2J0bXN0YXRlbG93ID0gQkNNNDN4eF9TQlRNU1RBVEVMT1dfQ0xPQ0sgfAotCQkgICAgICAgQkNNNDN4eF9TQlRNU1RBVEVMT1dfUkVTRVQgfAotCQkgICAgICAgQkNNNDN4eF9TQlRNU1RBVEVMT1dfRk9SQ0VfR0FURV9DTE9DSyB8Ci0JCSAgICAgICBjb3JlX2ZsYWdzOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVywgc2J0bXN0YXRlbG93KTsKLQl1ZGVsYXkoMSk7Ci0KLQlzYnRtc3RhdGVoaWdoID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVISUdIKTsKLQlpZiAoc2J0bXN0YXRlaGlnaCAmIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9TRVJST1IpIHsKLQkJc2J0bXN0YXRlaGlnaCA9IDB4MDAwMDAwMDA7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUhJR0gsIHNidG1zdGF0ZWhpZ2gpOwotCX0KLQotCXNiaW1zdGF0ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JJTVNUQVRFKTsKLQlpZiAoc2JpbXN0YXRlICYgKEJDTTQzeHhfU0JJTVNUQVRFX0lCX0VSUk9SIHwgQkNNNDN4eF9TQklNU1RBVEVfVElNRU9VVCkpIHsKLQkJc2JpbXN0YXRlICY9IH4oQkNNNDN4eF9TQklNU1RBVEVfSUJfRVJST1IgfCBCQ000M3h4X1NCSU1TVEFURV9USU1FT1VUKTsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSVJfU0JJTVNUQVRFLCBzYmltc3RhdGUpOwotCX0KLQotCXNidG1zdGF0ZWxvdyA9IEJDTTQzeHhfU0JUTVNUQVRFTE9XX0NMT0NLIHwKLQkJICAgICAgIEJDTTQzeHhfU0JUTVNUQVRFTE9XX0ZPUkNFX0dBVEVfQ0xPQ0sgfAotCQkgICAgICAgY29yZV9mbGFnczsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1csIHNidG1zdGF0ZWxvdyk7Ci0JdWRlbGF5KDEpOwotCi0Jc2J0bXN0YXRlbG93ID0gQkNNNDN4eF9TQlRNU1RBVEVMT1dfQ0xPQ0sgfCBjb3JlX2ZsYWdzOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVywgc2J0bXN0YXRlbG93KTsKLQl1ZGVsYXkoMSk7Ci0KLQliY20tPmN1cnJlbnRfY29yZS0+ZW5hYmxlZCA9IDE7Ci0JYXNzZXJ0KGVyciA9PSAwKTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvODAyMTFDb3JlUmVzZXQgKi8KLXZvaWQgYmNtNDN4eF93aXJlbGVzc19jb3JlX3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGNvbm5lY3RfcGh5KQotewotCXUzMiBmbGFncyA9IDB4MDAwNDAwMDA7Ci0KLQlpZiAoKGJjbTQzeHhfY29yZV9lbmFibGVkKGJjbSkpICYmCi0JICAgICFiY200M3h4X3VzaW5nX3BpbyhiY20pKSB7Ci0JfQotCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9TSFVUVElOR0RPV04pIHsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwKLQkJICAgICAgICAgICAgICAgIGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCkKLQkJCQkmIH4oQkNNNDN4eF9TQkZfTUFDX0VOQUJMRUQgfCAweDAwMDAwMDAyKSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGNvbm5lY3RfcGh5KQotCQkJZmxhZ3MgfD0gQkNNNDN4eF9TQlRNU1RBVEVMT1dfR19NT0RFX0VOQUJMRTsKLQkJYmNtNDN4eF9waHlfY29ubmVjdChiY20sIGNvbm5lY3RfcGh5KTsKLQkJYmNtNDN4eF9jb3JlX2VuYWJsZShiY20sIGZsYWdzKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U2LCAweDAwMDApOwotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxELAotCQkJCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCkKLQkJCQl8IEJDTTQzeHhfU0JGXzQwMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3dpcmVsZXNzX2NvcmVfZGlzYWJsZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JYmNtNDN4eF9yYWRpb190dXJuX29mZihiY20pOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFNiwgMHgwMEY0KTsKLQliY200M3h4X2NvcmVfZGlzYWJsZShiY20sIDApOwotfQotCi0vKiBNYXJrIHRoZSBjdXJyZW50IDgwMjExIGNvcmUgaW5hY3RpdmUuICovCi1zdGF0aWMgdm9pZCBiY200M3h4X3dpcmVsZXNzX2NvcmVfbWFya19pbmFjdGl2ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JdTMyIHNidG1zdGF0ZWxvdzsKLQotCWJjbTQzeHhfaW50ZXJydXB0X2Rpc2FibGUoYmNtLCBCQ000M3h4X0lSUV9BTEwpOwotCWJjbTQzeHhfcmFkaW9fdHVybl9vZmYoYmNtKTsKLQlzYnRtc3RhdGVsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7Ci0Jc2J0bXN0YXRlbG93ICY9IDB4REZGNUZGRkY7Ci0Jc2J0bXN0YXRlbG93IHw9IDB4MDAwQTAwMDA7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XLCBzYnRtc3RhdGVsb3cpOwotCXVkZWxheSgxKTsKLQlzYnRtc3RhdGVsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7Ci0Jc2J0bXN0YXRlbG93ICY9IDB4RkZGNUZGRkY7Ci0Jc2J0bXN0YXRlbG93IHw9IDB4MDAwODAwMDA7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XLCBzYnRtc3RhdGVsb3cpOwotCXVkZWxheSgxKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlX2lycV90cmFuc21pdF9zdGF0dXMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXUzMiB2MCwgdjE7Ci0JdTE2IHRtcDsKLQlzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzIHN0YXQ7Ci0KLQl3aGlsZSAoMSkgewotCQl2MCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1hNSVRTVEFUXzApOwotCQlpZiAoIXYwKQotCQkJYnJlYWs7Ci0JCXYxID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fWE1JVFNUQVRfMSk7Ci0KLQkJc3RhdC5jb29raWUgPSAodjAgPj4gMTYpICYgMHgwMDAwRkZGRjsKLQkJdG1wID0gKHUxNikoKHYwICYgMHhGRkYwKSB8ICgodjAgJiAweEYpID4+IDEpKTsKLQkJc3RhdC5mbGFncyA9IHRtcCAmIDB4RkY7Ci0JCXN0YXQuY250MSA9ICh0bXAgJiAweDBGMDApID4+IDg7Ci0JCXN0YXQuY250MiA9ICh0bXAgJiAweEYwMDApID4+IDEyOwotCQlzdGF0LnNlcSA9ICh1MTYpKHYxICYgMHhGRkZGKTsKLQkJc3RhdC51bmtub3duID0gKHUxNikoKHYxID4+IDE2KSAmIDB4RkYpOwotCi0JCWJjbTQzeHhfZGVidWdmc19sb2dfdHhzdGF0KGJjbSwgJnN0YXQpOwotCi0JCWlmIChzdGF0LmZsYWdzICYgQkNNNDN4eF9UWFNUQVRfRkxBR19BTVBEVSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3RhdC5mbGFncyAmIEJDTTQzeHhfVFhTVEFUX0ZMQUdfSU5URVIpCi0JCQljb250aW51ZTsKLQotCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKLQkJCWJjbTQzeHhfcGlvX2hhbmRsZV94bWl0c3RhdHVzKGJjbSwgJnN0YXQpOwotCQllbHNlCi0JCQliY200M3h4X2RtYV9oYW5kbGVfeG1pdHN0YXR1cyhiY20sICZzdGF0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYWluX3R4c3RhdHVzX3F1ZXVlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQl1MzIgZHVtbXk7Ci0KLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDUpCi0JCXJldHVybjsKLQkvKiBSZWFkIGFsbCBlbnRyaWVzIGZyb20gdGhlIG1pY3JvY29kZSBUWHN0YXR1cyBGSUZPCi0JICogYW5kIHRocm93IHRoZW0gYXdheS4KLQkgKi8KLQl3aGlsZSAoMSkgewotCQlkdW1teSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1hNSVRTVEFUXzApOwotCQlpZiAoIWR1bW15KQotCQkJYnJlYWs7Ci0JCWR1bW15ID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fWE1JVFNUQVRfMSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2dlbmVyYXRlX25vaXNlX3NhbXBsZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHg0MDgsIDB4N0Y3Rik7Ci0JYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHg0MEEsIDB4N0Y3Rik7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVUzJfQklURklFTEQsCi0JCQliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVMyX0JJVEZJRUxEKSB8ICgxIDw8IDQpKTsKLQlhc3NlcnQoYmNtLT5ub2lzZWNhbGMuY29yZV9hdF9zdGFydCA9PSBiY20tPmN1cnJlbnRfY29yZSk7Ci0JYXNzZXJ0KGJjbS0+bm9pc2VjYWxjLmNoYW5uZWxfYXRfc3RhcnQgPT0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSktPmNoYW5uZWwpOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2NhbGN1bGF0ZV9saW5rX3F1YWxpdHkoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCS8qIFRvcCBoYWxmIG9mIExpbmsgUXVhbGl0eSBjYWxjdWxhdGlvbi4gKi8KLQotCWlmIChiY20tPm5vaXNlY2FsYy5jYWxjdWxhdGlvbl9ydW5uaW5nKQotCQlyZXR1cm47Ci0JYmNtLT5ub2lzZWNhbGMuY29yZV9hdF9zdGFydCA9IGJjbS0+Y3VycmVudF9jb3JlOwotCWJjbS0+bm9pc2VjYWxjLmNoYW5uZWxfYXRfc3RhcnQgPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKS0+Y2hhbm5lbDsKLQliY20tPm5vaXNlY2FsYy5jYWxjdWxhdGlvbl9ydW5uaW5nID0gMTsKLQliY20tPm5vaXNlY2FsYy5ucl9zYW1wbGVzID0gMDsKLQotCWJjbTQzeHhfZ2VuZXJhdGVfbm9pc2Vfc2FtcGxlKGJjbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9pcnFfbm9pc2Uoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQl1MTYgdG1wOwotCXU4IG5vaXNlWzRdOwotCXU4IGksIGo7Ci0JczMyIGF2ZXJhZ2U7Ci0KLQkvKiBCb3R0b20gaGFsZiBvZiBMaW5rIFF1YWxpdHkgY2FsY3VsYXRpb24uICovCi0KLQlhc3NlcnQoYmNtLT5ub2lzZWNhbGMuY2FsY3VsYXRpb25fcnVubmluZyk7Ci0JaWYgKGJjbS0+bm9pc2VjYWxjLmNvcmVfYXRfc3RhcnQgIT0gYmNtLT5jdXJyZW50X2NvcmUgfHwKLQkgICAgYmNtLT5ub2lzZWNhbGMuY2hhbm5lbF9hdF9zdGFydCAhPSByYWRpby0+Y2hhbm5lbCkKLQkJZ290byBkcm9wX2NhbGN1bGF0aW9uOwotCXRtcCA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHg0MDgpOwotCW5vaXNlWzBdID0gKHRtcCAmIDB4MDBGRik7Ci0Jbm9pc2VbMV0gPSAodG1wICYgMHhGRjAwKSA+PiA4OwotCXRtcCA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHg0MEEpOwotCW5vaXNlWzJdID0gKHRtcCAmIDB4MDBGRik7Ci0Jbm9pc2VbM10gPSAodG1wICYgMHhGRjAwKSA+PiA4OwotCWlmIChub2lzZVswXSA9PSAweDdGIHx8IG5vaXNlWzFdID09IDB4N0YgfHwKLQkgICAgbm9pc2VbMl0gPT0gMHg3RiB8fCBub2lzZVszXSA9PSAweDdGKQotCQlnb3RvIGdlbmVyYXRlX25ldzsKLQotCS8qIEdldCB0aGUgbm9pc2Ugc2FtcGxlcy4gKi8KLQlhc3NlcnQoYmNtLT5ub2lzZWNhbGMubnJfc2FtcGxlcyA8IDgpOwotCWkgPSBiY20tPm5vaXNlY2FsYy5ucl9zYW1wbGVzOwotCW5vaXNlWzBdID0gbGltaXRfdmFsdWUobm9pc2VbMF0sIDAsIEFSUkFZX1NJWkUocmFkaW8tPm5yc3NpX2x0KSAtIDEpOwotCW5vaXNlWzFdID0gbGltaXRfdmFsdWUobm9pc2VbMV0sIDAsIEFSUkFZX1NJWkUocmFkaW8tPm5yc3NpX2x0KSAtIDEpOwotCW5vaXNlWzJdID0gbGltaXRfdmFsdWUobm9pc2VbMl0sIDAsIEFSUkFZX1NJWkUocmFkaW8tPm5yc3NpX2x0KSAtIDEpOwotCW5vaXNlWzNdID0gbGltaXRfdmFsdWUobm9pc2VbM10sIDAsIEFSUkFZX1NJWkUocmFkaW8tPm5yc3NpX2x0KSAtIDEpOwotCWJjbS0+bm9pc2VjYWxjLnNhbXBsZXNbaV1bMF0gPSByYWRpby0+bnJzc2lfbHRbbm9pc2VbMF1dOwotCWJjbS0+bm9pc2VjYWxjLnNhbXBsZXNbaV1bMV0gPSByYWRpby0+bnJzc2lfbHRbbm9pc2VbMV1dOwotCWJjbS0+bm9pc2VjYWxjLnNhbXBsZXNbaV1bMl0gPSByYWRpby0+bnJzc2lfbHRbbm9pc2VbMl1dOwotCWJjbS0+bm9pc2VjYWxjLnNhbXBsZXNbaV1bM10gPSByYWRpby0+bnJzc2lfbHRbbm9pc2VbM11dOwotCWJjbS0+bm9pc2VjYWxjLm5yX3NhbXBsZXMrKzsKLQlpZiAoYmNtLT5ub2lzZWNhbGMubnJfc2FtcGxlcyA9PSA4KSB7Ci0JCS8qIENhbGN1bGF0ZSB0aGUgTGluayBRdWFsaXR5IGJ5IHRoZSBub2lzZSBzYW1wbGVzLiAqLwotCQlhdmVyYWdlID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKLQkJCQlhdmVyYWdlICs9IGJjbS0+bm9pc2VjYWxjLnNhbXBsZXNbaV1bal07Ci0JCX0KLQkJYXZlcmFnZSAvPSAoOCAqIDQpOwotCQlhdmVyYWdlICo9IDEyNTsKLQkJYXZlcmFnZSArPSA2NDsKLQkJYXZlcmFnZSAvPSAxMjg7Ci0KLQkJdG1wID0gYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDQwQyk7Ci0JCXRtcCA9ICh0bXAgLyAxMjgpICYgMHgxRjsKLQkJaWYgKHRtcCA+PSA4KQotCQkJYXZlcmFnZSArPSAyOwotCQllbHNlCi0JCQlhdmVyYWdlIC09IDI1OwotCQlpZiAodG1wID09IDgpCi0JCQlhdmVyYWdlIC09IDcyOwotCQllbHNlCi0JCQlhdmVyYWdlIC09IDQ4OwotCi0JCWJjbS0+c3RhdHMubm9pc2UgPSBhdmVyYWdlOwotZHJvcF9jYWxjdWxhdGlvbjoKLQkJYmNtLT5ub2lzZWNhbGMuY2FsY3VsYXRpb25fcnVubmluZyA9IDA7Ci0JCXJldHVybjsKLQl9Ci1nZW5lcmF0ZV9uZXc6Ci0JYmNtNDN4eF9nZW5lcmF0ZV9ub2lzZV9zYW1wbGUoYmNtKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlX2lycV9wcyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JaWYgKGJjbS0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikgewotCQkvLy9UT0RPOiBQUyBUQlRUCi0JfSBlbHNlIHsKLQkJaWYgKDEvKkZJWE1FOiB0aGUgbGFzdCBQU3BvbGwgZnJhbWUgd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5ICovKQotCQkJYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMoYmNtLCAtMSwgLTEpOwotCX0KLQlpZiAoYmNtLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCi0JCWJjbS0+cmVnMTI0X3NldF8weDQgPSAxOwotCS8vRklYTUUgZWxzZSBzZXQgdG8gZmFsc2U/Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9pcnFfcmVnMTI0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpZiAoIWJjbS0+cmVnMTI0X3NldF8weDQpCi0JCXJldHVybjsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTMl9CSVRGSUVMRCwKLQkJCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVUzJfQklURklFTEQpCi0JCQl8IDB4NCk7Ci0JLy9GSVhNRTogcmVzZXQgcmVnMTI0X3NldF8weDQgdG8gZmFsc2U/Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9pcnFfcG1xKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQl1MzIgdG1wOwotCi0JLy9UT0RPOiBBUCBtb2RlLgotCi0Jd2hpbGUgKDEpIHsKLQkJdG1wID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fUFNfU1RBVFVTKTsKLQkJaWYgKCEodG1wICYgMHgwMDAwMDAwOCkpCi0JCQlicmVhazsKLQl9Ci0JLyogMTZiaXQgd3JpdGUgaXMgb2RkLCBidXQgY29ycmVjdC4gKi8KLQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fUFNfU1RBVFVTLCAweDAwMDIpOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2dlbmVyYXRlX2JlYWNvbl90ZW1wbGF0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJCSAgICAgdTE2IHJhbV9vZmZzZXQsIHUxNiBzaG1fc2l6ZV9vZmZzZXQpCi17Ci0JdTMyIHZhbHVlOwotCXUxNiBzaXplID0gMDsKLQotCS8qIFRpbWVzdGFtcC4gKi8KLQkvL0ZJWE1FOiBhc3N1bXB0aW9uOiBUaGUgY2hpcCBzZXRzIHRoZSB0aW1lc3RhbXAKLQl2YWx1ZSA9IDA7Ci0JYmNtNDN4eF9yYW1fd3JpdGUoYmNtLCByYW1fb2Zmc2V0KyssIHZhbHVlKTsKLQliY200M3h4X3JhbV93cml0ZShiY20sIHJhbV9vZmZzZXQrKywgdmFsdWUpOwotCXNpemUgKz0gODsKLQotCS8qIEJlYWNvbiBJbnRlcnZhbCAvIENhcGFiaWxpdHkgSW5mb3JtYXRpb24gKi8KLQl2YWx1ZSA9IDB4MDAwMDsvL0ZJWE1FOiBXaGljaCBpbnRlcnZhbD8KLQl2YWx1ZSB8PSAoMSA8PCAwKSA8PCAxNjsgLyogRVNTICovCi0JdmFsdWUgfD0gKDEgPDwgMikgPDwgMTY7IC8qIENGIFBvbGxhYmxlICovCS8vRklYTUU/Ci0JdmFsdWUgfD0gKDEgPDwgMykgPDwgMTY7IC8qIENGIFBvbGwgUmVxdWVzdCAqLwkvL0ZJWE1FPwotCWlmICghYmNtLT5pZWVlLT5vcGVuX3dlcCkKLQkJdmFsdWUgfD0gKDEgPDwgNCkgPDwgMTY7IC8qIFByaXZhY3kgKi8KLQliY200M3h4X3JhbV93cml0ZShiY20sIHJhbV9vZmZzZXQrKywgdmFsdWUpOwotCXNpemUgKz0gNDsKLQotCS8qIFNTSUQgKi8KLQkvL1RPRE8KLQotCS8qIEZIIFBhcmFtZXRlciBTZXQgKi8KLQkvL1RPRE8KLQotCS8qIERTIFBhcmFtZXRlciBTZXQgKi8KLQkvL1RPRE8KLQotCS8qIENGIFBhcmFtZXRlciBTZXQgKi8KLQkvL1RPRE8KLQotCS8qIFRJTSAqLwotCS8vVE9ETwotCi0JYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgc2htX3NpemVfb2Zmc2V0LCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlX2lycV9iZWFjb24oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXUzMiBzdGF0dXM7Ci0KLQliY20tPmlycV9zYXZlZHN0YXRlICY9IH5CQ000M3h4X0lSUV9CRUFDT047Ci0Jc3RhdHVzID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTMl9CSVRGSUVMRCk7Ci0KLQlpZiAoKHN0YXR1cyAmIDB4MSkgJiYgKHN0YXR1cyAmIDB4MikpIHsKLQkJLyogQUNLIGJlYWNvbiBJUlEuICovCi0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTiwKLQkJCQlCQ000M3h4X0lSUV9CRUFDT04pOwotCQliY20tPmlycV9zYXZlZHN0YXRlIHw9IEJDTTQzeHhfSVJRX0JFQUNPTjsKLQkJcmV0dXJuOwotCX0KLQlpZiAoIShzdGF0dXMgJiAweDEpKSB7Ci0JCWJjbTQzeHhfZ2VuZXJhdGVfYmVhY29uX3RlbXBsYXRlKGJjbSwgMHg2OCwgMHgxOCk7Ci0JCXN0YXR1cyB8PSAweDE7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVMyX0JJVEZJRUxELCBzdGF0dXMpOwotCX0KLQlpZiAoIShzdGF0dXMgJiAweDIpKSB7Ci0JCWJjbTQzeHhfZ2VuZXJhdGVfYmVhY29uX3RlbXBsYXRlKGJjbSwgMHg0NjgsIDB4MUEpOwotCQlzdGF0dXMgfD0gMHgyOwotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTMl9CSVRGSUVMRCwgc3RhdHVzKTsKLQl9Ci19Ci0KLS8qIEludGVycnVwdCBoYW5kbGVyIGJvdHRvbS1oYWxmICovCi1zdGF0aWMgdm9pZCBiY200M3h4X2ludGVycnVwdF90YXNrbGV0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQl1MzIgcmVhc29uOwotCXUzMiBkbWFfcmVhc29uWzZdOwotCXUzMiBtZXJnZWRfZG1hX3JlYXNvbiA9IDA7Ci0JaW50IGksIGFjdGl2aXR5ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0jaWZkZWYgQ09ORklHX0JDTTQzWFhfREVCVUcKLQl1MzIgX2hhbmRsZWQgPSAweDAwMDAwMDAwOwotIyBkZWZpbmUgYmNtaXJxX2hhbmRsZWQoaXJxKQlkbyB7IF9oYW5kbGVkIHw9IChpcnEpOyB9IHdoaWxlICgwKQotI2Vsc2UKLSMgZGVmaW5lIGJjbWlycV9oYW5kbGVkKGlycSkJZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCi0jZW5kaWYgLyogQ09ORklHX0JDTTQzWFhfREVCVUcqLwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlyZWFzb24gPSBiY20tPmlycV9yZWFzb247Ci0JZm9yIChpID0gNTsgaSA+PSAwOyBpLS0pIHsKLQkJZG1hX3JlYXNvbltpXSA9IGJjbS0+ZG1hX3JlYXNvbltpXTsKLQkJbWVyZ2VkX2RtYV9yZWFzb24gfD0gZG1hX3JlYXNvbltpXTsKLQl9Ci0KLQlpZiAodW5saWtlbHkocmVhc29uICYgQkNNNDN4eF9JUlFfWE1JVF9FUlJPUikpIHsKLQkJLyogVFggZXJyb3IuIFdlIGdldCB0aGlzIHdoZW4gVGVtcGxhdGUgUmFtIGlzIHdyaXR0ZW4gaW4gd3JvbmcgZW5kaWFuZXNzCi0JCSAqIGluIGR1bW15X3R4KCkuIFdlIGFsc28gZ2V0IHRoaXMgaWYgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIFRYIGhlYWRlcgotCQkgKiBvbiBETUEgb3IgUElPIHF1ZXVlcy4KLQkJICogTWF5YmUgd2UgZ2V0IHRoaXMgaW4gb3RoZXIgZXJyb3IgY29uZGl0aW9ucywgdG9vLgotCQkgKi8KLQkJcHJpbnRrbChLRVJOX0VSUiBQRlggIkZBVEFMIEVSUk9SOiBCQ000M3h4X0lSUV9YTUlUX0VSUk9SXG4iKTsKLQkJYmNtaXJxX2hhbmRsZWQoQkNNNDN4eF9JUlFfWE1JVF9FUlJPUik7Ci0JfQotCWlmICh1bmxpa2VseShtZXJnZWRfZG1hX3JlYXNvbiAmIEJDTTQzeHhfRE1BSVJRX0ZBVEFMTUFTSykpIHsKLQkJcHJpbnRrbChLRVJOX0VSUiBQRlggIkZBVEFMIEVSUk9SOiBGYXRhbCBETUEgZXJyb3I6ICIKLQkJCQkgICAgICIweCUwOFgsIDB4JTA4WCwgMHglMDhYLCAiCi0JCQkJICAgICAiMHglMDhYLCAweCUwOFgsIDB4JTA4WFxuIiwKLQkJICAgICAgICBkbWFfcmVhc29uWzBdLCBkbWFfcmVhc29uWzFdLAotCQkJZG1hX3JlYXNvblsyXSwgZG1hX3JlYXNvblszXSwKLQkJCWRtYV9yZWFzb25bNF0sIGRtYV9yZWFzb25bNV0pOwotCQliY200M3h4X2NvbnRyb2xsZXJfcmVzdGFydChiY20sICJETUEgZXJyb3IiKTsKLQkJbW1pb3diKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAodW5saWtlbHkobWVyZ2VkX2RtYV9yZWFzb24gJiBCQ000M3h4X0RNQUlSUV9OT05GQVRBTE1BU0spKSB7Ci0JCXByaW50a2woS0VSTl9FUlIgUEZYICJETUEgZXJyb3I6ICIKLQkJCQkgICAgICIweCUwOFgsIDB4JTA4WCwgMHglMDhYLCAiCi0JCQkJICAgICAiMHglMDhYLCAweCUwOFgsIDB4JTA4WFxuIiwKLQkJICAgICAgICBkbWFfcmVhc29uWzBdLCBkbWFfcmVhc29uWzFdLAotCQkJZG1hX3JlYXNvblsyXSwgZG1hX3JlYXNvblszXSwKLQkJCWRtYV9yZWFzb25bNF0sIGRtYV9yZWFzb25bNV0pOwotCX0KLQotCWlmIChyZWFzb24gJiBCQ000M3h4X0lSUV9QUykgewotCQloYW5kbGVfaXJxX3BzKGJjbSk7Ci0JCWJjbWlycV9oYW5kbGVkKEJDTTQzeHhfSVJRX1BTKTsKLQl9Ci0KLQlpZiAocmVhc29uICYgQkNNNDN4eF9JUlFfUkVHMTI0KSB7Ci0JCWhhbmRsZV9pcnFfcmVnMTI0KGJjbSk7Ci0JCWJjbWlycV9oYW5kbGVkKEJDTTQzeHhfSVJRX1JFRzEyNCk7Ci0JfQotCi0JaWYgKHJlYXNvbiAmIEJDTTQzeHhfSVJRX0JFQUNPTikgewotCQlpZiAoYmNtLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKQotCQkJaGFuZGxlX2lycV9iZWFjb24oYmNtKTsKLQkJYmNtaXJxX2hhbmRsZWQoQkNNNDN4eF9JUlFfQkVBQ09OKTsKLQl9Ci0KLQlpZiAocmVhc29uICYgQkNNNDN4eF9JUlFfUE1RKSB7Ci0JCWhhbmRsZV9pcnFfcG1xKGJjbSk7Ci0JCWJjbWlycV9oYW5kbGVkKEJDTTQzeHhfSVJRX1BNUSk7Ci0JfQotCi0JaWYgKHJlYXNvbiAmIEJDTTQzeHhfSVJRX1NDQU4pIHsKLQkJLypUT0RPKi8KLQkJLy9iY21pcnFfaGFuZGxlZChCQ000M3h4X0lSUV9TQ0FOKTsKLQl9Ci0KLQlpZiAocmVhc29uICYgQkNNNDN4eF9JUlFfTk9JU0UpIHsKLQkJaGFuZGxlX2lycV9ub2lzZShiY20pOwotCQliY21pcnFfaGFuZGxlZChCQ000M3h4X0lSUV9OT0lTRSk7Ci0JfQotCi0JLyogQ2hlY2sgdGhlIERNQSByZWFzb24gcmVnaXN0ZXJzIGZvciByZWNlaXZlZCBkYXRhLiAqLwotCWlmIChkbWFfcmVhc29uWzBdICYgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORSkgewotCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKLQkJCWJjbTQzeHhfcGlvX3J4KGJjbTQzeHhfY3VycmVudF9waW8oYmNtKS0+cXVldWUwKTsKLQkJZWxzZQotCQkJYmNtNDN4eF9kbWFfcngoYmNtNDN4eF9jdXJyZW50X2RtYShiY20pLT5yeF9yaW5nMCk7Ci0JCS8qIFdlIGludGVudGlvbmFsbHkgZG9uJ3Qgc2V0ICJhY3Rpdml0eSIgdG8gMSwgaGVyZS4gKi8KLQl9Ci0JYXNzZXJ0KCEoZG1hX3JlYXNvblsxXSAmIEJDTTQzeHhfRE1BSVJRX1JYX0RPTkUpKTsKLQlhc3NlcnQoIShkbWFfcmVhc29uWzJdICYgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORSkpOwotCWlmIChkbWFfcmVhc29uWzNdICYgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORSkgewotCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKLQkJCWJjbTQzeHhfcGlvX3J4KGJjbTQzeHhfY3VycmVudF9waW8oYmNtKS0+cXVldWUzKTsKLQkJZWxzZQotCQkJYmNtNDN4eF9kbWFfcngoYmNtNDN4eF9jdXJyZW50X2RtYShiY20pLT5yeF9yaW5nMyk7Ci0JCWFjdGl2aXR5ID0gMTsKLQl9Ci0JYXNzZXJ0KCEoZG1hX3JlYXNvbls0XSAmIEJDTTQzeHhfRE1BSVJRX1JYX0RPTkUpKTsKLQlhc3NlcnQoIShkbWFfcmVhc29uWzVdICYgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORSkpOwotCWJjbWlycV9oYW5kbGVkKEJDTTQzeHhfSVJRX1JYKTsKLQotCWlmIChyZWFzb24gJiBCQ000M3h4X0lSUV9YTUlUX1NUQVRVUykgewotCQloYW5kbGVfaXJxX3RyYW5zbWl0X3N0YXR1cyhiY20pOwotCQlhY3Rpdml0eSA9IDE7Ci0JCS8vVE9ETzogSW4gQVAgbW9kZSwgdGhpcyBhbHNvIGNhdXNlcyBzZW5kaW5nIG9mIHBvd2Vyc2F2ZSByZXNwb25zZXMuCi0JCWJjbWlycV9oYW5kbGVkKEJDTTQzeHhfSVJRX1hNSVRfU1RBVFVTKTsKLQl9Ci0KLQkvKiBJUlFfUElPX1dPUktBUk9VTkQgaXMgaGFuZGxlZCBpbiB0aGUgdG9wLWhhbGYuICovCi0JYmNtaXJxX2hhbmRsZWQoQkNNNDN4eF9JUlFfUElPX1dPUktBUk9VTkQpOwotI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCi0JaWYgKHVubGlrZWx5KHJlYXNvbiAmIH5faGFuZGxlZCkpIHsKLQkJcHJpbnRrbChLRVJOX1dBUk5JTkcgUEZYCi0JCQkiVW5oYW5kbGVkIElSUSEgUmVhc29uOiAweCUwOHgsICBVbmhhbmRsZWQ6IDB4JTA4eCwgICIKLQkJCSJETUE6IDB4JTA4eCwgMHglMDh4LCAweCUwOHgsIDB4JTA4eFxuIiwKLQkJCXJlYXNvbiwgKHJlYXNvbiAmIH5faGFuZGxlZCksCi0JCQlkbWFfcmVhc29uWzBdLCBkbWFfcmVhc29uWzFdLAotCQkJZG1hX3JlYXNvblsyXSwgZG1hX3JlYXNvblszXSk7Ci0JfQotI2VuZGlmCi0jdW5kZWYgYmNtaXJxX2hhbmRsZWQKLQotCWlmICghbW9kcGFyYW1fbm9sZWRzKQotCQliY200M3h4X2xlZHNfdXBkYXRlKGJjbSwgYWN0aXZpdHkpOwotCWJjbTQzeHhfaW50ZXJydXB0X2VuYWJsZShiY20sIGJjbS0+aXJxX3NhdmVkc3RhdGUpOwotCW1taW93YigpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcGlvX2lycV93b3JrYXJvdW5kKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCSAgICAgICB1MTYgYmFzZSwgaW50IHF1ZXVlaWR4KQotewotCXUxNiByeGN0bDsKLQotCXJ4Y3RsID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBiYXNlICsgQkNNNDN4eF9QSU9fUlhDVEwpOwotCWlmIChyeGN0bCAmIEJDTTQzeHhfUElPX1JYQ1RMX0RBVEFBVkFJTEFCTEUpCi0JCWJjbS0+ZG1hX3JlYXNvbltxdWV1ZWlkeF0gfD0gQkNNNDN4eF9ETUFJUlFfUlhfRE9ORTsKLQllbHNlCi0JCWJjbS0+ZG1hX3JlYXNvbltxdWV1ZWlkeF0gJj0gfkJDTTQzeHhfRE1BSVJRX1JYX0RPTkU7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfaW50ZXJydXB0X2FjayhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUzMiByZWFzb24pCi17Ci0JaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkgJiYKLQkgICAgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCAzKSAmJgotCSAgICAoIShyZWFzb24gJiBCQ000M3h4X0lSUV9QSU9fV09SS0FST1VORCkpKSB7Ci0JCS8qIEFwcGx5IGEgUElPIHNwZWNpZmljIHdvcmthcm91bmQgdG8gdGhlIGRtYV9yZWFzb25zICovCi0JCXBpb19pcnFfd29ya2Fyb3VuZChiY20sIEJDTTQzeHhfTU1JT19QSU8xX0JBU0UsIDApOwotCQlwaW9faXJxX3dvcmthcm91bmQoYmNtLCBCQ000M3h4X01NSU9fUElPMl9CQVNFLCAxKTsKLQkJcGlvX2lycV93b3JrYXJvdW5kKGJjbSwgQkNNNDN4eF9NTUlPX1BJTzNfQkFTRSwgMik7Ci0JCXBpb19pcnFfd29ya2Fyb3VuZChiY20sIEJDTTQzeHhfTU1JT19QSU80X0JBU0UsIDMpOwotCX0KLQotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTiwgcmVhc29uKTsKLQotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUEwX1JFQVNPTiwKLQkJCWJjbS0+ZG1hX3JlYXNvblswXSk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTFfUkVBU09OLAotCQkJYmNtLT5kbWFfcmVhc29uWzFdKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMl9SRUFTT04sCi0JCQliY20tPmRtYV9yZWFzb25bMl0pOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUEzX1JFQVNPTiwKLQkJCWJjbS0+ZG1hX3JlYXNvblszXSk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTRfUkVBU09OLAotCQkJYmNtLT5kbWFfcmVhc29uWzRdKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BNV9SRUFTT04sCi0JCQliY20tPmRtYV9yZWFzb25bNV0pOwotfQotCi0vKiBJbnRlcnJ1cHQgaGFuZGxlciB0b3AtaGFsZiAqLwotc3RhdGljIGlycXJldHVybl90IGJjbTQzeHhfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWlycXJldHVybl90IHJldCA9IElSUV9IQU5ETEVEOwotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl9pZDsKLQl1MzIgcmVhc29uOwotCi0JaWYgKCFiY20pCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXNwaW5fbG9jaygmYmNtLT5pcnFfbG9jayk7Ci0KLQlyZWFzb24gPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTik7Ci0JaWYgKHJlYXNvbiA9PSAweGZmZmZmZmZmKSB7Ci0JCS8qIGlycSBub3QgZm9yIHVzIChzaGFyZWQgaXJxKSAqLwotCQlyZXQgPSBJUlFfTk9ORTsKLQkJZ290byBvdXQ7Ci0JfQotCXJlYXNvbiAmPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX01BU0spOwotCWlmICghcmVhc29uKQotCQlnb3RvIG91dDsKLQotCWFzc2VydChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCk7Ci0JYXNzZXJ0KGJjbS0+Y3VycmVudF9jb3JlLT5pZCA9PSBCQ000M3h4X0NPUkVJRF84MDIxMSk7Ci0KLQliY20tPmRtYV9yZWFzb25bMF0gPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19ETUEwX1JFQVNPTikKLQkJCSAgICAgJiAweDAwMDFEQzAwOwotCWJjbS0+ZG1hX3JlYXNvblsxXSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTFfUkVBU09OKQotCQkJICAgICAmIDB4MDAwMERDMDA7Ci0JYmNtLT5kbWFfcmVhc29uWzJdID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMl9SRUFTT04pCi0JCQkgICAgICYgMHgwMDAwREMwMDsKLQliY20tPmRtYV9yZWFzb25bM10gPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19ETUEzX1JFQVNPTikKLQkJCSAgICAgJiAweDAwMDFEQzAwOwotCWJjbS0+ZG1hX3JlYXNvbls0XSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTRfUkVBU09OKQotCQkJICAgICAmIDB4MDAwMERDMDA7Ci0JYmNtLT5kbWFfcmVhc29uWzVdID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BNV9SRUFTT04pCi0JCQkgICAgICYgMHgwMDAwREMwMDsKLQotCWJjbTQzeHhfaW50ZXJydXB0X2FjayhiY20sIHJlYXNvbik7Ci0KLQkvKiBkaXNhYmxlIGFsbCBJUlFzLiBUaGV5IGFyZSBlbmFibGVkIGFnYWluIGluIHRoZSBib3R0b20gaGFsZi4gKi8KLQliY20tPmlycV9zYXZlZHN0YXRlID0gYmNtNDN4eF9pbnRlcnJ1cHRfZGlzYWJsZShiY20sIEJDTTQzeHhfSVJRX0FMTCk7Ci0JLyogc2F2ZSB0aGUgcmVhc29uIGNvZGUgYW5kIGNhbGwgb3VyIGJvdHRvbSBoYWxmLiAqLwotCWJjbS0+aXJxX3JlYXNvbiA9IHJlYXNvbjsKLQl0YXNrbGV0X3NjaGVkdWxlKCZiY20tPmlzcl90YXNrbGV0KTsKLQotb3V0OgotCW1taW93YigpOwotCXNwaW5fdW5sb2NrKCZiY20tPmlycV9sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIGludCBmb3JjZSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0KLQlpZiAoYmNtLT5maXJtd2FyZV9ub3JlbGVhc2UgJiYgIWZvcmNlKQotCQlyZXR1cm47IC8qIFN1c3BlbmRpbmcgb3IgY29udHJvbGxlciByZXNldC4gKi8KLQlyZWxlYXNlX2Zpcm13YXJlKHBoeS0+dWNvZGUpOwotCXBoeS0+dWNvZGUgPSBOVUxMOwotCXJlbGVhc2VfZmlybXdhcmUocGh5LT5wY20pOwotCXBoeS0+cGNtID0gTlVMTDsKLQlyZWxlYXNlX2Zpcm13YXJlKHBoeS0+aW5pdHZhbHMwKTsKLQlwaHktPmluaXR2YWxzMCA9IE5VTEw7Ci0JcmVsZWFzZV9maXJtd2FyZShwaHktPmluaXR2YWxzMSk7Ci0JcGh5LT5pbml0dmFsczEgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXU4IHJldiA9IGJjbS0+Y3VycmVudF9jb3JlLT5yZXY7Ci0JaW50IGVyciA9IDA7Ci0JaW50IG5yOwotCWNoYXIgYnVmWzIyICsgc2l6ZW9mKG1vZHBhcmFtX2Z3cG9zdGZpeCkgLSAxXSA9IHsgMCB9OwotCi0JaWYgKCFwaHktPnVjb2RlKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgQVJSQVlfU0laRShidWYpLCAiYmNtNDN4eF9taWNyb2NvZGUlZCVzLmZ3IiwKLQkJCSAocmV2ID49IDUgPyA1IDogcmV2KSwKLQkJCSBtb2RwYXJhbV9md3Bvc3RmaXgpOwotCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwaHktPnVjb2RlLCBidWYsICZiY20tPnBjaV9kZXYtPmRldik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggCi0JCQkgICAgICAgIkVycm9yOiBNaWNyb2NvZGUgXCIlc1wiIG5vdCBhdmFpbGFibGUgb3IgbG9hZCBmYWlsZWQuXG4iLAotCQkJICAgICAgICBidWYpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWlmICghcGh5LT5wY20pIHsKLQkJc25wcmludGYoYnVmLCBBUlJBWV9TSVpFKGJ1ZiksCi0JCQkgImJjbTQzeHhfcGNtJWQlcy5mdyIsCi0JCQkgKHJldiA8IDUgPyA0IDogNSksCi0JCQkgbW9kcGFyYW1fZndwb3N0Zml4KTsKLQkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcGh5LT5wY20sIGJ1ZiwgJmJjbS0+cGNpX2Rldi0+ZGV2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICJFcnJvcjogUENNIFwiJXNcIiBub3QgYXZhaWxhYmxlIG9yIGxvYWQgZmFpbGVkLlxuIiwKLQkJCSAgICAgICBidWYpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWlmICghcGh5LT5pbml0dmFsczApIHsKLQkJaWYgKHJldiA9PSAyIHx8IHJldiA9PSA0KSB7Ci0JCQlzd2l0Y2ggKHBoeS0+dHlwZSkgewotCQkJY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQkJCQluciA9IDM7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9COgotCQkJY2FzZSBCQ000M3h4X1BIWVRZUEVfRzoKLQkJCQluciA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWdvdG8gZXJyX25vaW5pdHZhbDsKLQkJCX0KLQkJCi0JCX0gZWxzZSBpZiAocmV2ID49IDUpIHsKLQkJCXN3aXRjaCAocGh5LT50eXBlKSB7Ci0JCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9BOgotCQkJCW5yID0gNzsKLQkJCQlicmVhazsKLQkJCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0I6Ci0JCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQkJCW5yID0gNTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZ290byBlcnJfbm9pbml0dmFsOwotCQkJfQotCQl9IGVsc2UKLQkJCWdvdG8gZXJyX25vaW5pdHZhbDsKLQkJc25wcmludGYoYnVmLCBBUlJBWV9TSVpFKGJ1ZiksICJiY200M3h4X2luaXR2YWwlMDJkJXMuZnciLAotCQkJIG5yLCBtb2RwYXJhbV9md3Bvc3RmaXgpOwotCi0JCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnBoeS0+aW5pdHZhbHMwLCBidWYsICZiY20tPnBjaV9kZXYtPmRldik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggCi0JCQkgICAgICAgIkVycm9yOiBJbml0VmFscyBcIiVzXCIgbm90IGF2YWlsYWJsZSBvciBsb2FkIGZhaWxlZC5cbiIsCi0JCQkgICAgICAgIGJ1Zik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWlmIChwaHktPmluaXR2YWxzMC0+c2l6ZSAlIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9pbml0dmFsKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW5pdFZhbHMgZmlsZWZvcm1hdCBlcnJvci5cbiIpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWlmICghcGh5LT5pbml0dmFsczEpIHsKLQkJaWYgKHJldiA+PSA1KSB7Ci0JCQl1MzIgc2J0bXN0YXRlaGlnaDsKLQotCQkJc3dpdGNoIChwaHktPnR5cGUpIHsKLQkJCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0E6Ci0JCQkJc2J0bXN0YXRlaGlnaCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFSElHSCk7Ci0JCQkJaWYgKHNidG1zdGF0ZWhpZ2ggJiAweDAwMDEwMDAwKQotCQkJCQluciA9IDk7Ci0JCQkJZWxzZQotCQkJCQluciA9IDEwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBCQ000M3h4X1BIWVRZUEVfQjoKLQkJCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0c6Ci0JCQkJCW5yID0gNjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZ290byBlcnJfbm9pbml0dmFsOwotCQkJfQotCQkJc25wcmludGYoYnVmLCBBUlJBWV9TSVpFKGJ1ZiksICJiY200M3h4X2luaXR2YWwlMDJkJXMuZnciLAotCQkJCSBuciwgbW9kcGFyYW1fZndwb3N0Zml4KTsKLQotCQkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcGh5LT5pbml0dmFsczEsIGJ1ZiwgJmJjbS0+cGNpX2Rldi0+ZGV2KTsKLQkJCWlmIChlcnIpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYIAotCQkJCSAgICAgICAiRXJyb3I6IEluaXRWYWxzIFwiJXNcIiBub3QgYXZhaWxhYmxlIG9yIGxvYWQgZmFpbGVkLlxuIiwKLQkJCSAgICAgICAgCWJ1Zik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCWlmIChwaHktPmluaXR2YWxzMS0+c2l6ZSAlIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9pbml0dmFsKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkluaXRWYWxzIGZpbGVmb3JtYXQgZXJyb3IuXG4iKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLWVycm9yOgotCWJjbTQzeHhfcmVsZWFzZV9maXJtd2FyZShiY20sIDEpOwotCWdvdG8gb3V0OwotZXJyX25vaW5pdHZhbDoKLQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvcjogTm8gSW5pdFZhbHMgYXZhaWxhYmxlIVxuIik7Ci0JZXJyID0gLUVOT0VOVDsKLQlnb3RvIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3VwbG9hZF9taWNyb2NvZGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQljb25zdCBfX2JlMzIgKmRhdGE7Ci0JdW5zaWduZWQgaW50IGksIGxlbjsKLQotCS8qIFVwbG9hZCBNaWNyb2NvZGUuICovCi0JZGF0YSA9IChfX2JlMzIgKikocGh5LT51Y29kZS0+ZGF0YSk7Ci0JbGVuID0gcGh5LT51Y29kZS0+c2l6ZSAvIHNpemVvZih1MzIpOwotCWJjbTQzeHhfc2htX2NvbnRyb2xfd29yZChiY20sIEJDTTQzeHhfU0hNX1VDT0RFLCAweDAwMDApOwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU0hNX0RBVEEsCi0JCQkJYmUzMl90b19jcHUoZGF0YVtpXSkpOwotCQl1ZGVsYXkoMTApOwotCX0KLQotCS8qIFVwbG9hZCBQQ00gZGF0YS4gKi8KLQlkYXRhID0gKF9fYmUzMiAqKShwaHktPnBjbS0+ZGF0YSk7Ci0JbGVuID0gcGh5LT5wY20tPnNpemUgLyBzaXplb2YodTMyKTsKLQliY200M3h4X3NobV9jb250cm9sX3dvcmQoYmNtLCBCQ000M3h4X1NITV9QQ00sIDB4MDFlYSk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NITV9EQVRBLCAweDAwMDA0MDAwKTsKLQliY200M3h4X3NobV9jb250cm9sX3dvcmQoYmNtLCBCQ000M3h4X1NITV9QQ00sIDB4MDFlYik7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TSE1fREFUQSwKLQkJCQliZTMyX3RvX2NwdShkYXRhW2ldKSk7Ci0JCXVkZWxheSgxMCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3JpdGVfaW5pdHZhbHMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgY29uc3Qgc3RydWN0IGJjbTQzeHhfaW5pdHZhbCAqZGF0YSwKLQkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pCi17Ci0JdTE2IG9mZnNldCwgc2l6ZTsKLQl1MzIgdmFsdWU7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJb2Zmc2V0ID0gYmUxNl90b19jcHUoZGF0YVtpXS5vZmZzZXQpOwotCQlzaXplID0gYmUxNl90b19jcHUoZGF0YVtpXS5zaXplKTsKLQkJdmFsdWUgPSBiZTMyX3RvX2NwdShkYXRhW2ldLnZhbHVlKTsKLQotCQlpZiAodW5saWtlbHkob2Zmc2V0ID49IDB4MTAwMCkpCi0JCQlnb3RvIGVycl9mb3JtYXQ7Ci0JCWlmIChzaXplID09IDIpIHsKLQkJCWlmICh1bmxpa2VseSh2YWx1ZSAmIDB4RkZGRjAwMDApKQotCQkJCWdvdG8gZXJyX2Zvcm1hdDsKLQkJCWJjbTQzeHhfd3JpdGUxNihiY20sIG9mZnNldCwgKHUxNil2YWx1ZSk7Ci0JCX0gZWxzZSBpZiAoc2l6ZSA9PSA0KSB7Ci0JCQliY200M3h4X3dyaXRlMzIoYmNtLCBvZmZzZXQsIHZhbHVlKTsKLQkJfSBlbHNlCi0JCQlnb3RvIGVycl9mb3JtYXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9mb3JtYXQ6Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW5pdFZhbHMgKGJjbTQzeHhfaW5pdHZhbFhYLmZ3KSBmaWxlLWZvcm1hdCBlcnJvci4gIgotCQkJICAgICJQbGVhc2UgZml4IHlvdXIgYmNtNDN4eCBmaXJtd2FyZSBmaWxlcy5cbiIpOwotCXJldHVybiAtRVBST1RPOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfdXBsb2FkX2luaXR2YWxzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JaW50IGVycjsKLQotCWVyciA9IGJjbTQzeHhfd3JpdGVfaW5pdHZhbHMoYmNtLCAoc3RydWN0IGJjbTQzeHhfaW5pdHZhbCAqKXBoeS0+aW5pdHZhbHMwLT5kYXRhLAotCQkJCSAgICAgcGh5LT5pbml0dmFsczAtPnNpemUgLyBzaXplb2Yoc3RydWN0IGJjbTQzeHhfaW5pdHZhbCkpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCWlmIChwaHktPmluaXR2YWxzMSkgewotCQllcnIgPSBiY200M3h4X3dyaXRlX2luaXR2YWxzKGJjbSwgKHN0cnVjdCBiY200M3h4X2luaXR2YWwgKilwaHktPmluaXR2YWxzMS0+ZGF0YSwKLQkJCQkJICAgICBwaHktPmluaXR2YWxzMS0+c2l6ZSAvIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9pbml0dmFsKSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X2luaXRpYWxpemVfaXJxKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpbnQgZXJyOwotCi0JYmNtLT5pcnEgPSBiY20tPnBjaV9kZXYtPmlycTsKLQllcnIgPSByZXF1ZXN0X2lycShiY20tPmlycSwgYmNtNDN4eF9pbnRlcnJ1cHRfaGFuZGxlciwKLQkJCSAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBiY20pOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBJUlElZFxuIiwgYmNtLT5pcnEpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogU3dpdGNoIHRvIHRoZSBjb3JlIHVzZWQgdG8gd3JpdGUgdGhlIEdQSU8gcmVnaXN0ZXIuCi0gKiBUaGlzIGlzIGVpdGhlciB0aGUgQ2hpcENvbW1vbiwgb3IgdGhlIFBDSSBjb3JlLgotICovCi1zdGF0aWMgaW50IHN3aXRjaF90b19ncGlvX2NvcmUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWludCBlcnI7Ci0KLQkvKiBXaGVyZSB0byBmaW5kIHRoZSBHUElPIHJlZ2lzdGVyIGRlcGVuZHMgb24gdGhlIGNoaXBzZXQuCi0JICogSWYgaXQgaGFzIGEgQ2hpcENvbW1vbiwgaXRzIHJlZ2lzdGVyIGF0IG9mZnNldCAweDZjIGlzIHRoZSBHUElPCi0JICogY29udHJvbCByZWdpc3Rlci4gT3RoZXJ3aXNlIHRoZSByZWdpc3RlciBhdCBvZmZzZXQgMHg2YyBpbiB0aGUKLQkgKiBQQ0kgY29yZSBpcyB0aGUgR1BJTyBjb250cm9sIHJlZ2lzdGVyLgotCSAqLwotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCAmYmNtLT5jb3JlX2NoaXBjb21tb24pOwotCWlmIChlcnIgPT0gLUVOT0RFVikgewotCQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgJmJjbS0+Y29yZV9wY2kpOwotCQlpZiAodW5saWtlbHkoZXJyID09IC1FTk9ERVYpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJncGlvIGVycm9yOiAiCi0JCQkgICAgICAgIk5laXRoZXIgQ2hpcENvbW1vbiBub3IgUENJIGNvcmUgYXZhaWxhYmxlIVxuIik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiBJbml0aWFsaXplIHRoZSBHUElPcwotICogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L0dQSU8KLSAqLwotc3RhdGljIGludCBiY200M3h4X2dwaW9faW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKm9sZF9jb3JlOwotCWludCBlcnI7Ci0JdTMyIG1hc2ssIHNldDsKLQotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsCi0JCQliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpCi0JCQkmIDB4RkZGRjNGRkYpOwotCi0JYmNtNDN4eF9sZWRzX3N3aXRjaF9hbGwoYmNtLCAwKTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fR1BJT19NQVNLLAotCQkJYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fR1BJT19NQVNLKSB8IDB4MDAwRik7Ci0KLQltYXNrID0gMHgwMDAwMDAxRjsKLQlzZXQgPSAweDAwMDAwMDBGOwotCWlmIChiY20tPmNoaXBfaWQgPT0gMHg0MzAxKSB7Ci0JCW1hc2sgfD0gMHgwMDYwOwotCQlzZXQgfD0gMHgwMDYwOwotCX0KLQlpZiAoMCAvKiBGSVhNRTogY29uZGl0aW9uYWwgdW5rbm93biAqLykgewotCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fR1BJT19NQVNLLAotCQkJCWJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX0dQSU9fTUFTSykKLQkJCQl8IDB4MDEwMCk7Ci0JCW1hc2sgfD0gMHgwMTgwOwotCQlzZXQgfD0gMHgwMTgwOwotCX0KLQlpZiAoYmNtLT5zcHJvbS5ib2FyZGZsYWdzICYgQkNNNDN4eF9CRkxfUEFDVFJMKSB7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19HUElPX01BU0ssCi0JCQkJYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fR1BJT19NQVNLKQotCQkJCXwgMHgwMjAwKTsKLQkJbWFzayB8PSAweDAyMDA7Ci0JCXNldCB8PSAweDAyMDA7Ci0JfQotCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDIpCi0JCW1hc2sgIHw9IDB4MDAxMDsgLyogRklYTUU6IFRoaXMgaXMgcmVkdW5kYW50LiAqLwotCi0Jb2xkX2NvcmUgPSBiY20tPmN1cnJlbnRfY29yZTsKLQllcnIgPSBzd2l0Y2hfdG9fZ3Bpb19jb3JlKGJjbSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9HUElPX0NPTlRST0wsCi0JICAgICAgICAgICAgICAgIChiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfR1BJT19DT05UUk9MKSAmIG1hc2spIHwgc2V0KTsKLQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgb2xkX2NvcmUpOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFR1cm4gb2ZmIGFsbCBHUElPIHN0dWZmLiBDYWxsIHRoaXMgb24gbW9kdWxlIHVubG9hZCwgZm9yIGV4YW1wbGUuICovCi1zdGF0aWMgaW50IGJjbTQzeHhfZ3Bpb19jbGVhbnVwKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqb2xkX2NvcmU7Ci0JaW50IGVycjsKLQotCW9sZF9jb3JlID0gYmNtLT5jdXJyZW50X2NvcmU7Ci0JZXJyID0gc3dpdGNoX3RvX2dwaW9fY29yZShiY20pOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9HUElPX0NPTlRST0wsIDB4MDAwMDAwMDApOwotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBvbGRfY29yZSk7Ci0JYXNzZXJ0KGVyciA9PSAwKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvRW5hYmxlTWFjICovCi12b2lkIGJjbTQzeHhfbWFjX2VuYWJsZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JYmNtLT5tYWNfc3VzcGVuZGVkLS07Ci0JYXNzZXJ0KGJjbS0+bWFjX3N1c3BlbmRlZCA+PSAwKTsKLQlpZiAoYmNtLT5tYWNfc3VzcGVuZGVkID09IDApIHsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwKLQkJICAgICAgICAgICAgICAgIGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCkKLQkJCQl8IEJDTTQzeHhfU0JGX01BQ19FTkFCTEVEKTsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OLCBCQ000M3h4X0lSUV9SRUFEWSk7Ci0JCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7IC8qIGR1bW15IHJlYWQgKi8KLQkJYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04pOyAvKiBkdW1teSByZWFkICovCi0JCWJjbTQzeHhfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKGJjbSwgLTEsIC0xKTsKLQl9Ci19Ci0KLS8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9TdXNwZW5kTUFDICovCi12b2lkIGJjbTQzeHhfbWFjX3N1c3BlbmQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWludCBpOwotCXUzMiB0bXA7Ci0KLQlhc3NlcnQoYmNtLT5tYWNfc3VzcGVuZGVkID49IDApOwotCWlmIChiY20tPm1hY19zdXNwZW5kZWQgPT0gMCkgewotCQliY200M3h4X3Bvd2VyX3NhdmluZ19jdGxfYml0cyhiY20sIC0xLCAxKTsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwKLQkJICAgICAgICAgICAgICAgIGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCkKLQkJCQkmIH5CQ000M3h4X1NCRl9NQUNfRU5BQkxFRCk7Ci0JCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OKTsgLyogZHVtbXkgcmVhZCAqLwotCQlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKSB7Ci0JCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTik7Ci0JCQlpZiAodG1wICYgQkNNNDN4eF9JUlFfUkVBRFkpCi0JCQkJZ290byBvdXQ7Ci0JCQl1ZGVsYXkoMSk7Ci0JCX0KLQkJcHJpbnRrbChLRVJOX0VSUiBQRlggIk1BQyBzdXNwZW5kIGZhaWxlZFxuIik7Ci0JfQotb3V0OgotCWJjbS0+bWFjX3N1c3BlbmRlZCsrOwotfQotCi12b2lkIGJjbTQzeHhfc2V0X2l3bW9kZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQlpbnQgaXdfbW9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gYmNtLT5uZXRfZGV2OwotCXUzMiBzdGF0dXM7Ci0JdTE2IHZhbHVlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aWVlZS0+bG9jaywgZmxhZ3MpOwotCWJjbS0+aWVlZS0+aXdfbW9kZSA9IGl3X21vZGU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pZWVlLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotCQluZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQllbHNlCi0JCW5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7Ci0KLQlzdGF0dXMgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpOwotCS8qIFJlc2V0IHN0YXR1cyB0byBpbmZyYXN0cnVjdHVyZWQgbW9kZSAqLwotCXN0YXR1cyAmPSB+KEJDTTQzeHhfU0JGX01PREVfQVAgfCBCQ000M3h4X1NCRl9NT0RFX01PTklUT1IpOwotCXN0YXR1cyAmPSB+QkNNNDN4eF9TQkZfTU9ERV9QUk9NSVNDOwotCXN0YXR1cyB8PSBCQ000M3h4X1NCRl9NT0RFX05PVEFESE9DOwotCi0vKiBGSVhNRTogQWx3YXlzIGVuYWJsZSBwcm9taXNjIG1vZGUsIHVudGlsIHdlIGdldCB0aGUgTUFDIGZpbHRlcnMgd29ya2luZyBjb3JyZWN0bHkuICovCi1zdGF0dXMgfD0gQkNNNDN4eF9TQkZfTU9ERV9QUk9NSVNDOwotCi0Jc3dpdGNoIChpd19tb2RlKSB7Ci0JY2FzZSBJV19NT0RFX01PTklUT1I6Ci0JCXN0YXR1cyB8PSBCQ000M3h4X1NCRl9NT0RFX01PTklUT1I7Ci0JCXN0YXR1cyB8PSBCQ000M3h4X1NCRl9NT0RFX1BST01JU0M7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJc3RhdHVzICY9IH5CQ000M3h4X1NCRl9NT0RFX05PVEFESE9DOwotCQlicmVhazsKLQljYXNlIElXX01PREVfTUFTVEVSOgotCQlzdGF0dXMgfD0gQkNNNDN4eF9TQkZfTU9ERV9BUDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX1NFQ09ORDoKLQljYXNlIElXX01PREVfUkVQRUFUOgotCQlUT0RPKCk7IC8qIFRPRE8gKi8KLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0lORlJBOgotCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4uLiAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5rbm93biBtb2RlIGluIHNldF9pd21vZGU6ICVkXG4iLCBpd19tb2RlKTsKLQl9Ci0JaWYgKG5ldF9kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCXN0YXR1cyB8PSBCQ000M3h4X1NCRl9NT0RFX1BST01JU0M7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwgc3RhdHVzKTsKLQotCXZhbHVlID0gMHgwMDAyOwotCWlmIChpd19tb2RlICE9IElXX01PREVfQURIT0MgJiYgaXdfbW9kZSAhPSBJV19NT0RFX01BU1RFUikgewotCQlpZiAoYmNtLT5jaGlwX2lkID09IDB4NDMwNiAmJiBiY20tPmNoaXBfcmV2ID09IDMpCi0JCQl2YWx1ZSA9IDB4MDA2NDsKLQkJZWxzZQotCQkJdmFsdWUgPSAweDAwMzI7Ci0JfQotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDYxMiwgdmFsdWUpOwotfQotCi0vKiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiBiY200M3h4X2NoaXBfaW5pdCgpICovCi1zdGF0aWMgdm9pZCBiY200M3h4X2NoaXBfY2xlYW51cChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JYmNtNDN4eF9yYWRpb190dXJuX29mZihiY20pOwotCWlmICghbW9kcGFyYW1fbm9sZWRzKQotCQliY200M3h4X2xlZHNfZXhpdChiY20pOwotCWJjbTQzeHhfZ3Bpb19jbGVhbnVwKGJjbSk7Ci0JYmNtNDN4eF9yZWxlYXNlX2Zpcm13YXJlKGJjbSwgMCk7Ci19Ci0KLS8qIEluaXRpYWxpemUgdGhlIGNoaXAKLSAqIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9DaGlwSW5pdAotICovCi1zdGF0aWMgaW50IGJjbTQzeHhfY2hpcF9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCWludCBlcnI7Ci0JaW50IGksIHRtcDsKLQl1MzIgdmFsdWUzMjsKLQl1MTYgdmFsdWUxNjsKLQotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsCi0JCQlCQ000M3h4X1NCRl9DT1JFX1JFQURZCi0JCQl8IEJDTTQzeHhfU0JGXzQwMCk7Ci0KLQllcnIgPSBiY200M3h4X3JlcXVlc3RfZmlybXdhcmUoYmNtKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQliY200M3h4X3VwbG9hZF9taWNyb2NvZGUoYmNtKTsKLQotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTiwgMHhGRkZGRkZGRik7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwgMHgwMDAyMDQwMik7Ci0JaSA9IDA7Ci0Jd2hpbGUgKDEpIHsKLQkJdmFsdWUzMiA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OKTsKLQkJaWYgKHZhbHVlMzIgPT0gQkNNNDN4eF9JUlFfUkVBRFkpCi0JCQlicmVhazsKLQkJaSsrOwotCQlpZiAoaSA+PSBCQ000M3h4X0lSUVdBSVRfTUFYX1JFVFJJRVMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIklSUV9SRUFEWSB0aW1lb3V0XG4iKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycl9yZWxlYXNlX2Z3OwotCQl9Ci0JCXVkZWxheSgxMCk7Ci0JfQotCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OKTsgLyogZHVtbXkgcmVhZCAqLwotCi0JdmFsdWUxNiA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkgICAgIEJDTTQzeHhfVUNPREVfUkVWSVNJT04pOwotCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICJNaWNyb2NvZGUgcmV2IDB4JXgsIHBsIDB4JXggIgotCQkiKDIwJS4yaS0lLjJpLSUuMmkgICUuMmk6JS4yaTolLjJpKVxuIiwgdmFsdWUxNiwKLQkJYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCSAgIEJDTTQzeHhfVUNPREVfUEFUQ0hMRVZFTCksCi0JCShiY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJICAgIEJDTTQzeHhfVUNPREVfREFURSkgPj4gMTIpICYgMHhmLAotCQkoYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCSAgICBCQ000M3h4X1VDT0RFX0RBVEUpID4+IDgpICYgMHhmLAotCQliY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJICAgQkNNNDN4eF9VQ09ERV9EQVRFKSAmIDB4ZmYsCi0JCShiY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJICAgQkNNNDN4eF9VQ09ERV9USU1FKSA+PiAxMSkgJiAweDFmLAotCQkoYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCSAgIEJDTTQzeHhfVUNPREVfVElNRSkgPj4gNSkgJiAweDNmLAotCQliY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJICAgQkNNNDN4eF9VQ09ERV9USU1FKSAmIDB4MWYpOwotCi0JaWYgKCB2YWx1ZTE2ID4gMHgxMjggKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJGaXJtd2FyZTogbm8gc3VwcG9ydCBmb3IgbWljcm9jb2RlIGV4dHJhY3RlZCAiCi0JCQkiZnJvbSB2ZXJzaW9uIDQueCBiaW5hcnkgZHJpdmVycy5cbiIpOwotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBlcnJfcmVsZWFzZV9mdzsKLQl9Ci0KLQllcnIgPSBiY200M3h4X2dwaW9faW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlbGVhc2VfZnc7Ci0KLQllcnIgPSBiY200M3h4X3VwbG9hZF9pbml0dmFscyhiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2dwaW9fY2xlYW51cDsKLQliY200M3h4X3JhZGlvX3R1cm5fb24oYmNtKTsKLQliY20tPnJhZGlvX2h3X2VuYWJsZSA9IGJjbTQzeHhfaXNfaHdfcmFkaW9fZW5hYmxlZChiY20pOwotCXByaW50ayhLRVJOX0lORk8gUEZYICJSYWRpbyAlcyBieSBoYXJkd2FyZVxuIiwKLQkJKGJjbS0+cmFkaW9faHdfZW5hYmxlID09IDApID8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7Ci0KLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIDB4MDAwMCk7Ci0JZXJyID0gYmNtNDN4eF9waHlfaW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JhZGlvX29mZjsKLQotCS8qIFNlbGVjdCBpbml0aWFsIEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uLiAqLwotCXRtcCA9IHJhZGlvLT5pbnRlcmZtb2RlOwotCXJhZGlvLT5pbnRlcmZtb2RlID0gQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTkU7Ci0JYmNtNDN4eF9yYWRpb19zZXRfaW50ZXJmZXJlbmNlX21pdGlnYXRpb24oYmNtLCB0bXApOwotCi0JYmNtNDN4eF9waHlfc2V0X2FudGVubmFfZGl2ZXJzaXR5KGJjbSk7Ci0JYmNtNDN4eF9yYWRpb19zZXRfdHhhbnRlbm5hKGJjbSwgQkNNNDN4eF9SQURJT19UWEFOVEVOTkFfREVGQVVMVCk7Ci0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQikgewotCQl2YWx1ZTE2ID0gYmNtNDN4eF9yZWFkMTYoYmNtLCAweDAwNUUpOwotCQl2YWx1ZTE2IHw9IDB4MDAwNDsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwMDVFLCB2YWx1ZTE2KTsKLQl9Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgMHgwMTAwLCAweDAxMDAwMDAwKTsKLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDUpCi0JCWJjbTQzeHhfd3JpdGUzMihiY20sIDB4MDEwQywgMHgwMTAwMDAwMCk7Ci0KLQl2YWx1ZTMyID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxEKTsKLQl2YWx1ZTMyICY9IH4gQkNNNDN4eF9TQkZfTU9ERV9OT1RBREhPQzsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxELCB2YWx1ZTMyKTsKLQl2YWx1ZTMyID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxEKTsKLQl2YWx1ZTMyIHw9IEJDTTQzeHhfU0JGX01PREVfTk9UQURIT0M7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwgdmFsdWUzMik7Ci0KLQl2YWx1ZTMyID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxEKTsKLQl2YWx1ZTMyIHw9IDB4MTAwMDAwOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsIHZhbHVlMzIpOwotCi0JaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpIHsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgMHgwMjEwLCAweDAwMDAwMTAwKTsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgMHgwMjMwLCAweDAwMDAwMTAwKTsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgMHgwMjUwLCAweDAwMDAwMTAwKTsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgMHgwMjcwLCAweDAwMDAwMTAwKTsKLQkJYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDM0LCAweDAwMDApOwotCX0KLQotCS8qIFByb2JlIFJlc3BvbnNlIFRpbWVvdXQgdmFsdWUgKi8KLQkvKiBGSVhNRTogRGVmYXVsdCB0byAwLCBoYXMgdG8gYmUgc2V0IGJ5IGlvY3RsIHByb2JhYmx5Li4uIDotLyAqLwotCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDA3NCwgMHgwMDAwKTsKLQotCS8qIEluaXRpYWxseSBzZXQgdGhlIHdpcmVsZXNzIG9wZXJhdGlvbiBtb2RlLiAqLwotCWJjbTQzeHhfc2V0X2l3bW9kZShiY20sIGJjbS0+aWVlZS0+aXdfbW9kZSk7Ci0KLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDMpIHsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNjBFLCAweDAwMDApOwotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDA2MTAsIDB4ODAwMCk7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDYwNCwgMHgwMDAwKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNjA2LCAweDAyMDApOwotCX0gZWxzZSB7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIDB4MDE4OCwgMHg4MDAwMDAwMCk7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIDB4MDE4QywgMHgwMjAwMDAwMCk7Ci0JfQotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTiwgMHgwMDAwNDAwMCk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTBfSVJRX01BU0ssIDB4MDAwMURDMDApOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUExX0lSUV9NQVNLLCAweDAwMDBEQzAwKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMl9JUlFfTUFTSywgMHgwMDAwREMwMCk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTNfSVJRX01BU0ssIDB4MDAwMURDMDApOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUE0X0lSUV9NQVNLLCAweDAwMDBEQzAwKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BNV9JUlFfTUFTSywgMHgwMDAwREMwMCk7Ci0KLQl2YWx1ZTMyID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1cpOwotCXZhbHVlMzIgfD0gMHgwMDEwMDAwMDsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1csIHZhbHVlMzIpOwotCi0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX1BPV0VSVVBfREVMQVksIGJjbTQzeHhfcGN0bF9wb3dlcnVwX2RlbGF5KGJjbSkpOwotCi0JYXNzZXJ0KGVyciA9PSAwKTsKLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNoaXAgaW5pdGlhbGl6ZWRcbiIpOwotb3V0OgotCXJldHVybiBlcnI7Ci0KLWVycl9yYWRpb19vZmY6Ci0JYmNtNDN4eF9yYWRpb190dXJuX29mZihiY20pOwotZXJyX2dwaW9fY2xlYW51cDoKLQliY200M3h4X2dwaW9fY2xlYW51cChiY20pOwotZXJyX3JlbGVhc2VfZnc6Ci0JYmNtNDN4eF9yZWxlYXNlX2Zpcm13YXJlKGJjbSwgMSk7Ci0JZ290byBvdXQ7Ci19Ci0JCi0vKiBWYWxpZGF0ZSBjaGlwIGFjY2VzcwotICogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1ZhbGlkYXRlQ2hpcEFjY2VzcyAqLwotc3RhdGljIGludCBiY200M3h4X3ZhbGlkYXRlX2NoaXAoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXUzMiB2YWx1ZTsKLQl1MzIgc2htX2JhY2t1cDsKLQotCXNobV9iYWNrdXAgPSBiY200M3h4X3NobV9yZWFkMzIoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDAwMCk7Ci0JYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDAwLCAweEFBNTU1NUFBKTsKLQlpZiAoYmNtNDN4eF9zaG1fcmVhZDMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwMDApICE9IDB4QUE1NTU1QUEpCi0JCWdvdG8gZXJyb3I7Ci0JYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDAwLCAweDU1QUFBQTU1KTsKLQlpZiAoYmNtNDN4eF9zaG1fcmVhZDMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwMDApICE9IDB4NTVBQUFBNTUpCi0JCWdvdG8gZXJyb3I7Ci0JYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDAwLCBzaG1fYmFja3VwKTsKLQotCXZhbHVlID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxEKTsKLQlpZiAoKHZhbHVlIHwgMHg4MDAwMDAwMCkgIT0gMHg4MDAwMDQwMCkKLQkJZ290byBlcnJvcjsKLQotCXZhbHVlID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04pOwotCWlmICh2YWx1ZSAhPSAweDAwMDAwMDAwKQotCQlnb3RvIGVycm9yOwotCi0JcmV0dXJuIDA7Ci1lcnJvcjoKLQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gdmFsaWRhdGUgdGhlIGNoaXBhY2Nlc3NcbiIpOwotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2luaXRfc3RydWN0X3BoeWluZm8oc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5KQotewotCS8qIEluaXRpYWxpemUgYSAicGh5aW5mbyIgc3RydWN0dXJlLiBUaGUgc3RydWN0dXJlIGlzIGFscmVhZHkKLQkgKiB6ZXJvZWQgb3V0LgotCSAqIFRoaXMgaXMgY2FsbGVkIG9uIGluc21vZCB0aW1lIHRvIGluaXRpYWxpemUgbWVtYmVycy4KLQkgKi8KLQlwaHktPnNhdmVkcGN0bHJlZyA9IDB4RkZGRjsKLQlzcGluX2xvY2tfaW5pdCgmcGh5LT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9pbml0X3N0cnVjdF9yYWRpb2luZm8oc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbykKLXsKLQkvKiBJbml0aWFsaXplIGEgInJhZGlvaW5mbyIgc3RydWN0dXJlLiBUaGUgc3RydWN0dXJlIGlzIGFscmVhZHkKLQkgKiB6ZXJvZWQgb3V0LgotCSAqIFRoaXMgaXMgY2FsbGVkIG9uIGluc21vZCB0aW1lIHRvIGluaXRpYWxpemUgbWVtYmVycy4KLQkgKi8KLQlyYWRpby0+aW50ZXJmbW9kZSA9IEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05FOwotCXJhZGlvLT5jaGFubmVsID0gMHhGRjsKLQlyYWRpby0+aW5pdGlhbF9jaGFubmVsID0gMHhGRjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3Byb2JlX2NvcmVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpbnQgZXJyLCBpOwotCWludCBjdXJyZW50X2NvcmU7Ci0JdTMyIGNvcmVfdmVuZG9yLCBjb3JlX2lkLCBjb3JlX3JldjsKLQl1MzIgc2JfaWRfaGksIGNoaXBfaWRfMzIgPSAwOwotCXUxNiBwY2lfZGV2aWNlLCBjaGlwX2lkXzE2OwotCXU4IGNvcmVfY291bnQ7Ci0KLQltZW1zZXQoJmJjbS0+Y29yZV9jaGlwY29tbW9uLCAwLCBzaXplb2Yoc3RydWN0IGJjbTQzeHhfY29yZWluZm8pKTsKLQltZW1zZXQoJmJjbS0+Y29yZV9wY2ksIDAsIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbykpOwotCW1lbXNldCgmYmNtLT5jb3JlXzgwMjExLCAwLCBzaXplb2Yoc3RydWN0IGJjbTQzeHhfY29yZWluZm8pCi0JCQkJICAgICogQkNNNDN4eF9NQVhfODAyMTFfQ09SRVMpOwotCW1lbXNldCgmYmNtLT5jb3JlXzgwMjExX2V4dCwgMCwgc2l6ZW9mKHN0cnVjdCBiY200M3h4X2NvcmVpbmZvXzgwMjExKQotCQkJCQkqIEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTKTsKLQliY20tPm5yXzgwMjExX2F2YWlsYWJsZSA9IDA7Ci0JYmNtLT5jdXJyZW50X2NvcmUgPSBOVUxMOwotCWJjbS0+YWN0aXZlXzgwMjExX2NvcmUgPSBOVUxMOwotCi0JLyogbWFwIGNvcmUgMCAqLwotCWVyciA9IF9zd2l0Y2hfY29yZShiY20sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JLyogZmV0Y2ggc2JfaWRfaGkgZnJvbSBjb3JlIGluZm9ybWF0aW9uIHJlZ2lzdGVycyAqLwotCXNiX2lkX2hpID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQl9JRF9ISSk7Ci0KLQljb3JlX2lkID0gKHNiX2lkX2hpICYgMHg4RkYwKSA+PiA0OwotCWNvcmVfcmV2ID0gKHNiX2lkX2hpICYgMHg3MDAwKSA+PiA4OwotCWNvcmVfcmV2IHw9IChzYl9pZF9oaSAmIDB4Rik7Ci0JY29yZV92ZW5kb3IgPSAoc2JfaWRfaGkgJiAweEZGRkYwMDAwKSA+PiAxNjsKLQotCS8qIGlmIHByZXNlbnQsIGNoaXBjb21tb24gaXMgYWx3YXlzIGNvcmUgMDsgcmVhZCB0aGUgY2hpcGlkIGZyb20gaXQgKi8KLQlpZiAoY29yZV9pZCA9PSBCQ000M3h4X0NPUkVJRF9DSElQQ09NTU9OKSB7Ci0JCWNoaXBfaWRfMzIgPSBiY200M3h4X3JlYWQzMihiY20sIDApOwotCQljaGlwX2lkXzE2ID0gY2hpcF9pZF8zMiAmIDB4RkZGRjsKLQkJYmNtLT5jb3JlX2NoaXBjb21tb24uYXZhaWxhYmxlID0gMTsKLQkJYmNtLT5jb3JlX2NoaXBjb21tb24uaWQgPSBjb3JlX2lkOwotCQliY20tPmNvcmVfY2hpcGNvbW1vbi5yZXYgPSBjb3JlX3JldjsKLQkJYmNtLT5jb3JlX2NoaXBjb21tb24uaW5kZXggPSAwOwotCQkvKiBXaGlsZSB3ZSBhcmUgYXQgaXQsIGFsc28gcmVhZCB0aGUgY2FwYWJpbGl0aWVzLiAqLwotCQliY20tPmNoaXBjb21tb25fY2FwYWJpbGl0aWVzID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NISVBDT01NT05fQ0FQQUJJTElUSUVTKTsKLQl9IGVsc2UgewotCQkvKiB3aXRob3V0IGEgY2hpcENvbW1vbiwgdXNlIGEgaGFyZCBjb2RlZCB0YWJsZS4gKi8KLQkJcGNpX2RldmljZSA9IGJjbS0+cGNpX2Rldi0+ZGV2aWNlOwotCQlpZiAocGNpX2RldmljZSA9PSAweDQzMDEpCi0JCQljaGlwX2lkXzE2ID0gMHg0MzAxOwotCQllbHNlIGlmICgocGNpX2RldmljZSA+PSAweDQzMDUpICYmIChwY2lfZGV2aWNlIDw9IDB4NDMwNykpCi0JCQljaGlwX2lkXzE2ID0gMHg0MzA3OwotCQllbHNlIGlmICgocGNpX2RldmljZSA+PSAweDQ0MDIpICYmIChwY2lfZGV2aWNlIDw9IDB4NDQwMykpCi0JCQljaGlwX2lkXzE2ID0gMHg0NDAyOwotCQllbHNlIGlmICgocGNpX2RldmljZSA+PSAweDQ2MTApICYmIChwY2lfZGV2aWNlIDw9IDB4NDYxNSkpCi0JCQljaGlwX2lkXzE2ID0gMHg0NjEwOwotCQllbHNlIGlmICgocGNpX2RldmljZSA+PSAweDQ3MTApICYmIChwY2lfZGV2aWNlIDw9IDB4NDcxNSkpCi0JCQljaGlwX2lkXzE2ID0gMHg0NzEwOwotCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkIG5vdCBkZXRlcm1pbmUgQ2hpcCBJRFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQotCS8qIENoaXBDb21tb24gd2l0aCBDb3JlIFJldiA+PTQgZW5jb2RlcyBudW1iZXIgb2YgY29yZXMsCi0JICogb3RoZXJ3aXNlIGNvbnN1bHQgaGFyZGNvZGVkIHRhYmxlICovCi0JaWYgKChjb3JlX2lkID09IEJDTTQzeHhfQ09SRUlEX0NISVBDT01NT04pICYmIChjb3JlX3JldiA+PSA0KSkgewotCQljb3JlX2NvdW50ID0gKGNoaXBfaWRfMzIgJiAweDBGMDAwMDAwKSA+PiAyNDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGNoaXBfaWRfMTYpIHsKLQkJCWNhc2UgMHg0NjEwOgotCQkJY2FzZSAweDQ3MDQ6Ci0JCQljYXNlIDB4NDcxMDoKLQkJCQljb3JlX2NvdW50ID0gOTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg0MzEwOgotCQkJCWNvcmVfY291bnQgPSA4OwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDUzNjU6Ci0JCQkJY29yZV9jb3VudCA9IDc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDMwNjoKLQkJCQljb3JlX2NvdW50ID0gNjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg0MzAxOgotCQkJY2FzZSAweDQzMDc6Ci0JCQkJY29yZV9jb3VudCA9IDU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDQwMjoKLQkJCQljb3JlX2NvdW50ID0gMzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJLyogU09MIGlmIHdlIGdldCBoZXJlICovCi0JCQkJYXNzZXJ0KDApOwotCQkJCWNvcmVfY291bnQgPSAxOwotCQl9Ci0JfQotCi0JYmNtLT5jaGlwX2lkID0gY2hpcF9pZF8xNjsKLQliY20tPmNoaXBfcmV2ID0gKGNoaXBfaWRfMzIgJiAweDAwMEYwMDAwKSA+PiAxNjsKLQliY20tPmNoaXBfcGFja2FnZSA9IChjaGlwX2lkXzMyICYgMHgwMEYwMDAwMCkgPj4gMjA7Ci0KLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNoaXAgSUQgMHgleCwgcmV2IDB4JXhcbiIsCi0JCWJjbS0+Y2hpcF9pZCwgYmNtLT5jaGlwX3Jldik7Ci0JZHByaW50ayhLRVJOX0lORk8gUEZYICJOdW1iZXIgb2YgY29yZXM6ICVkXG4iLCBjb3JlX2NvdW50KTsKLQlpZiAoYmNtLT5jb3JlX2NoaXBjb21tb24uYXZhaWxhYmxlKSB7Ci0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiQ29yZSAwOiBJRCAweCV4LCByZXYgMHgleCwgdmVuZG9yIDB4JXhcbiIsCi0JCQljb3JlX2lkLCBjb3JlX3JldiwgY29yZV92ZW5kb3IpOwotCQljdXJyZW50X2NvcmUgPSAxOwotCX0gZWxzZQotCQljdXJyZW50X2NvcmUgPSAwOwotCWZvciAoIDsgY3VycmVudF9jb3JlIDwgY29yZV9jb3VudDsgY3VycmVudF9jb3JlKyspIHsKLQkJc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKmNvcmU7Ci0JCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvXzgwMjExICpleHRfODAyMTE7Ci0KLQkJZXJyID0gX3N3aXRjaF9jb3JlKGJjbSwgY3VycmVudF9jb3JlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCQkvKiBHYXRoZXIgaW5mb3JtYXRpb24gKi8KLQkJLyogZmV0Y2ggc2JfaWRfaGkgZnJvbSBjb3JlIGluZm9ybWF0aW9uIHJlZ2lzdGVycyAqLwotCQlzYl9pZF9oaSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JfSURfSEkpOwotCi0JCS8qIGV4dHJhY3QgY29yZV9pZCwgY29yZV9yZXYsIGNvcmVfdmVuZG9yICovCi0JCWNvcmVfaWQgPSAoc2JfaWRfaGkgJiAweDhGRjApID4+IDQ7Ci0JCWNvcmVfcmV2ID0gKChzYl9pZF9oaSAmIDB4RikgfCAoKHNiX2lkX2hpICYgMHg3MDAwKSA+PiA4KSk7Ci0JCWNvcmVfdmVuZG9yID0gKHNiX2lkX2hpICYgMHhGRkZGMDAwMCkgPj4gMTY7Ci0KLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJDb3JlICVkOiBJRCAweCV4LCByZXYgMHgleCwgdmVuZG9yIDB4JXhcbiIsCi0JCQljdXJyZW50X2NvcmUsIGNvcmVfaWQsIGNvcmVfcmV2LCBjb3JlX3ZlbmRvcik7Ci0KLQkJY29yZSA9IE5VTEw7Ci0JCXN3aXRjaCAoY29yZV9pZCkgewotCQljYXNlIEJDTTQzeHhfQ09SRUlEX1BDSToKLQkJY2FzZSBCQ000M3h4X0NPUkVJRF9QQ0lFOgotCQkJY29yZSA9ICZiY20tPmNvcmVfcGNpOwotCQkJaWYgKGNvcmUtPmF2YWlsYWJsZSkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJNdWx0aXBsZSBQQ0kgY29yZXMgZm91bmQuXG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfQ09SRUlEXzgwMjExOgotCQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTOyBpKyspIHsKLQkJCQljb3JlID0gJihiY20tPmNvcmVfODAyMTFbaV0pOwotCQkJCWV4dF84MDIxMSA9ICYoYmNtLT5jb3JlXzgwMjExX2V4dFtpXSk7Ci0JCQkJaWYgKCFjb3JlLT5hdmFpbGFibGUpCi0JCQkJCWJyZWFrOwotCQkJCWNvcmUgPSBOVUxMOwotCQkJfQotCQkJaWYgKCFjb3JlKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIk1vcmUgdGhhbiAlZCBjb3JlcyBvZiB0eXBlIDgwMi4xMSBmb3VuZC5cbiIsCi0JCQkJICAgICAgIEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChpICE9IDApIHsKLQkJCQkvKiBNb3JlIHRoYW4gb25lIDgwMjExIGNvcmUgaXMgb25seSBzdXBwb3J0ZWQKLQkJCQkgKiBieSBzcGVjaWFsIGNoaXBzLgotCQkJCSAqIFRoZXJlIGFyZSBjaGlwcyB3aXRoIHR3byA4MDIxMSBjb3JlcywgYnV0IHdpdGgKLQkJCQkgKiBkYW5nbGluZyBwaW5zIG9uIHRoZSBzZWNvbmQgY29yZS4gQmUgY2FyZWZ1bAotCQkJCSAqIGFuZCBpZ25vcmUgdGhlc2UgY29yZXMgaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoMSAvKmJjbS0+cGNpX2Rldi0+ZGV2aWNlICE9IDB4NDMyNCovICkgewotCQkJCS8qIFRPRE86IEEgUEhZICovCi0JCQkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiSWdub3JpbmcgYWRkaXRpb25hbCA4MDIuMTFhIGNvcmUuXG4iKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQkJc3dpdGNoIChjb3JlX3JldikgewotCQkJY2FzZSAyOgotCQkJY2FzZSA0OgotCQkJY2FzZSA1OgotCQkJY2FzZSA2OgotCQkJY2FzZSA3OgotCQkJY2FzZSA5OgotCQkJY2FzZSAxMDoKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCQkgICAgICAgIlVuc3VwcG9ydGVkIDgwMjExIGNvcmUgcmV2aXNpb24gJXVcbiIsCi0JCQkJICAgICAgIGNvcmVfcmV2KTsKLQkJCX0KLQkJCWJjbS0+bnJfODAyMTFfYXZhaWxhYmxlKys7Ci0JCQljb3JlLT5wcml2ID0gZXh0XzgwMjExOwotCQkJYmNtNDN4eF9pbml0X3N0cnVjdF9waHlpbmZvKCZleHRfODAyMTEtPnBoeSk7Ci0JCQliY200M3h4X2luaXRfc3RydWN0X3JhZGlvaW5mbygmZXh0XzgwMjExLT5yYWRpbyk7Ci0JCQlicmVhazsKLQkJY2FzZSBCQ000M3h4X0NPUkVJRF9DSElQQ09NTU9OOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIk11bHRpcGxlIENISVBDT01NT04gY29yZXMgZm91bmQuXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChjb3JlKSB7Ci0JCQljb3JlLT5hdmFpbGFibGUgPSAxOwotCQkJY29yZS0+aWQgPSBjb3JlX2lkOwotCQkJY29yZS0+cmV2ID0gY29yZV9yZXY7Ci0JCQljb3JlLT5pbmRleCA9IGN1cnJlbnRfY29yZTsKLQkJfQotCX0KLQotCWlmICghYmNtLT5jb3JlXzgwMjExWzBdLmF2YWlsYWJsZSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvcjogTm8gODAyMTEgY29yZSBmb3VuZCFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgJmJjbS0+Y29yZV84MDIxMVswXSk7Ci0KLQlhc3NlcnQoZXJyID09IDApOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfZ2VuX2Jzc2lkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQljb25zdCB1OCAqbWFjID0gKGNvbnN0IHU4KikoYmNtLT5uZXRfZGV2LT5kZXZfYWRkcik7Ci0JdTggKmJzc2lkID0gYmNtLT5pZWVlLT5ic3NpZDsKLQotCXN3aXRjaCAoYmNtLT5pZWVlLT5pd19tb2RlKSB7Ci0JY2FzZSBJV19NT0RFX0FESE9DOgotCQlyYW5kb21fZXRoZXJfYWRkcihic3NpZCk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9NQVNURVI6Ci0JY2FzZSBJV19NT0RFX0lORlJBOgotCWNhc2UgSVdfTU9ERV9SRVBFQVQ6Ci0JY2FzZSBJV19NT0RFX1NFQ09ORDoKLQljYXNlIElXX01PREVfTU9OSVRPUjoKLQkJbWVtY3B5KGJzc2lkLCBtYWMsIEVUSF9BTEVOKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9yYXRlX21lbW9yeV93cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgICAgdTE2IHJhdGUsCi0JCQkJICAgICAgaW50IGlzX29mZG0pCi17Ci0JdTE2IG9mZnNldDsKLQotCWlmIChpc19vZmRtKSB7Ci0JCW9mZnNldCA9IDB4NDgwOwotCQlvZmZzZXQgKz0gKGJjbTQzeHhfcGxjcF9nZXRfcmF0ZWNvZGVfb2ZkbShyYXRlKSAmIDB4MDAwRikgKiAyOwotCX0KLQllbHNlIHsKLQkJb2Zmc2V0ID0gMHg0QzA7Ci0JCW9mZnNldCArPSAoYmNtNDN4eF9wbGNwX2dldF9yYXRlY29kZV9jY2socmF0ZSkgJiAweDAwMEYpICogMjsKLQl9Ci0JYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgb2Zmc2V0ICsgMHgyMCwKLQkJCSAgICBiY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIG9mZnNldCkpOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3JhdGVfbWVtb3J5X2luaXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN3aXRjaCAoYmNtNDN4eF9jdXJyZW50X3BoeShiY20pLT50eXBlKSB7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQliY200M3h4X3JhdGVfbWVtb3J5X3dyaXRlKGJjbSwgSUVFRTgwMjExX09GRE1fUkFURV82TUIsIDEpOwotCQliY200M3h4X3JhdGVfbWVtb3J5X3dyaXRlKGJjbSwgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CLCAxKTsKLQkJYmNtNDN4eF9yYXRlX21lbW9yeV93cml0ZShiY20sIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQiwgMSk7Ci0JCWJjbTQzeHhfcmF0ZV9tZW1vcnlfd3JpdGUoYmNtLCBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIsIDEpOwotCQliY200M3h4X3JhdGVfbWVtb3J5X3dyaXRlKGJjbSwgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CLCAxKTsKLQkJYmNtNDN4eF9yYXRlX21lbW9yeV93cml0ZShiY20sIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQiwgMSk7Ci0JCWJjbTQzeHhfcmF0ZV9tZW1vcnlfd3JpdGUoYmNtLCBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUIsIDEpOwotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0I6Ci0JCWJjbTQzeHhfcmF0ZV9tZW1vcnlfd3JpdGUoYmNtLCBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CLCAwKTsKLQkJYmNtNDN4eF9yYXRlX21lbW9yeV93cml0ZShiY20sIElFRUU4MDIxMV9DQ0tfUkFURV8yTUIsIDApOwotCQliY200M3h4X3JhdGVfbWVtb3J5X3dyaXRlKGJjbSwgSUVFRTgwMjExX0NDS19SQVRFXzVNQiwgMCk7Ci0JCWJjbTQzeHhfcmF0ZV9tZW1vcnlfd3JpdGUoYmNtLCBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQiwgMCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFzc2VydCgwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfd2lyZWxlc3NfY29yZV9jbGVhbnVwKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQliY200M3h4X2NoaXBfY2xlYW51cChiY20pOwotCWJjbTQzeHhfcGlvX2ZyZWUoYmNtKTsKLQliY200M3h4X2RtYV9mcmVlKGJjbSk7Ci0KLQliY20tPmN1cnJlbnRfY29yZS0+aW5pdGlhbGl6ZWQgPSAwOwotfQotCi0vKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvODAyMTFJbml0ICovCi1zdGF0aWMgaW50IGJjbTQzeHhfd2lyZWxlc3NfY29yZV9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICAgICBpbnQgYWN0aXZlX3dsY29yZSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUzMiB1Y29kZWZsYWdzOwotCWludCBlcnI7Ci0JdTMyIHNiaW1jb25maWdsb3c7Ci0JdTggbGltaXQ7Ci0KLQlpZiAoYmNtLT5jb3JlX3BjaS5yZXYgPD0gNSAmJiBiY20tPmNvcmVfcGNpLmlkICE9IEJDTTQzeHhfQ09SRUlEX1BDSUUpIHsKLQkJc2JpbWNvbmZpZ2xvdyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JJTUNPTkZJR0xPVyk7Ci0JCXNiaW1jb25maWdsb3cgJj0gfiBCQ000M3h4X1NCSU1DT05GSUdMT1dfUkVRVUVTVF9UT1VUX01BU0s7Ci0JCXNiaW1jb25maWdsb3cgJj0gfiBCQ000M3h4X1NCSU1DT05GSUdMT1dfU0VSVklDRV9UT1VUX01BU0s7Ci0JCWlmIChiY20tPmJ1c3R5cGUgPT0gQkNNNDN4eF9CVVNUWVBFX1BDSSkKLQkJCXNiaW1jb25maWdsb3cgfD0gMHgzMjsKLQkJZWxzZQotCQkJc2JpbWNvbmZpZ2xvdyB8PSAweDUzOwotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQklNQ09ORklHTE9XLCBzYmltY29uZmlnbG93KTsKLQl9Ci0KLQliY200M3h4X3BoeV9jYWxpYnJhdGUoYmNtKTsKLQllcnIgPSBiY200M3h4X2NoaXBfaW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDE2LCBiY20tPmN1cnJlbnRfY29yZS0+cmV2KTsKLQl1Y29kZWZsYWdzID0gYmNtNDN4eF9zaG1fcmVhZDMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCBCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VUKTsKLQotCWlmICgwIC8qRklYTUU6IHdoaWNoIGNvbmRpdGlvbiBoYXMgdG8gYmUgdXNlZCBoZXJlPyAqLykKLQkJdWNvZGVmbGFncyB8PSAweDAwMDAwMDEwOwotCi0JLyogSFcgZGVjcnlwdGlvbiBuZWVkcyB0byBiZSBzZXQgbm93ICovCi0JdWNvZGVmbGFncyB8PSAweDQwMDAwMDAwOwotCQotCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpIHsKLQkJdWNvZGVmbGFncyB8PSBCQ000M3h4X1VDT0RFRkxBR19VTktCR1BIWTsKLQkJaWYgKHBoeS0+cmV2ID09IDEpCi0JCQl1Y29kZWZsYWdzIHw9IEJDTTQzeHhfVUNPREVGTEFHX1VOS0dQSFk7Ci0JCWlmIChiY20tPnNwcm9tLmJvYXJkZmxhZ3MgJiBCQ000M3h4X0JGTF9QQUNUUkwpCi0JCQl1Y29kZWZsYWdzIHw9IEJDTTQzeHhfVUNPREVGTEFHX1VOS1BBQ1RSTDsKLQl9IGVsc2UgaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQikgewotCQl1Y29kZWZsYWdzIHw9IEJDTTQzeHhfVUNPREVGTEFHX1VOS0JHUEhZOwotCQlpZiAocGh5LT5yZXYgPj0gMiAmJiByYWRpby0+dmVyc2lvbiA9PSAweDIwNTApCi0JCQl1Y29kZWZsYWdzICY9IH5CQ000M3h4X1VDT0RFRkxBR19VTktHUEhZOwotCX0KLQotCWlmICh1Y29kZWZsYWdzICE9IGJjbTQzeHhfc2htX3JlYWQzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkJICAgICBCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VUKSkgewotCQliY200M3h4X3NobV93cml0ZTMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCSAgICBCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VULCB1Y29kZWZsYWdzKTsKLQl9Ci0KLQkvKiBTaG9ydC9Mb25nIFJldHJ5IExpbWl0LgotCSAqIFRoZSByZXRyeS1saW1pdCBpcyBhIDQtYml0IGNvdW50ZXIuIEVuZm9yY2UgdGhpcyB0byBhdm9pZCBvdmVyZmxvd2luZwotCSAqIHRoZSBjaGlwLWludGVybmFsIGNvdW50ZXIuCi0JICovCi0JbGltaXQgPSBsaW1pdF92YWx1ZShtb2RwYXJhbV9zaG9ydF9yZXRyeSwgMCwgMHhGKTsKLQliY200M3h4X3NobV93cml0ZTMyKGJjbSwgQkNNNDN4eF9TSE1fV0lSRUxFU1MsIDB4MDAwNiwgbGltaXQpOwotCWxpbWl0ID0gbGltaXRfdmFsdWUobW9kcGFyYW1fbG9uZ19yZXRyeSwgMCwgMHhGKTsKLQliY200M3h4X3NobV93cml0ZTMyKGJjbSwgQkNNNDN4eF9TSE1fV0lSRUxFU1MsIDB4MDAwNywgbGltaXQpOwotCi0JYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDQ0LCAzKTsKLQliY200M3h4X3NobV93cml0ZTE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwNDYsIDIpOwotCi0JYmNtNDN4eF9yYXRlX21lbW9yeV9pbml0KGJjbSk7Ci0KLQkvKiBNaW5pbXVtIENvbnRlbnRpb24gV2luZG93ICovCi0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQikKLQkJYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sIEJDTTQzeHhfU0hNX1dJUkVMRVNTLCAweDAwMDMsIDB4MDAwMDAwMWYpOwotCWVsc2UKLQkJYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sIEJDTTQzeHhfU0hNX1dJUkVMRVNTLCAweDAwMDMsIDB4MDAwMDAwMGYpOwotCS8qIE1heGltdW0gQ29udGVudGlvbiBXaW5kb3cgKi8KLQliY200M3h4X3NobV93cml0ZTMyKGJjbSwgQkNNNDN4eF9TSE1fV0lSRUxFU1MsIDB4MDAwNCwgMHgwMDAwMDNmZik7Ci0KLQliY200M3h4X2dlbl9ic3NpZChiY20pOwotCWJjbTQzeHhfd3JpdGVfbWFjX2Jzc2lkX3RlbXBsYXRlcyhiY20pOwotCi0JaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPj0gNSkKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNDNDLCAweDAwMEMpOwotCi0JaWYgKGFjdGl2ZV93bGNvcmUpIHsKLQkJaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpIHsKLQkJCWVyciA9IGJjbTQzeHhfcGlvX2luaXQoYmNtKTsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IGJjbTQzeHhfZG1hX2luaXQoYmNtKTsKLQkJCWlmIChlcnIgPT0gLUVOT1NZUykKLQkJCQllcnIgPSBiY200M3h4X3Bpb19pbml0KGJjbSk7Ci0JCX0KLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2NoaXBfY2xlYW51cDsKLQl9Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwNjEyLCAweDAwNTApOwotCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDQxNiwgMHgwMDUwKTsKLQliY200M3h4X3NobV93cml0ZTE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDA0MTQsIDB4MDFGNCk7Ci0KLQlpZiAoYWN0aXZlX3dsY29yZSkgewotCQlpZiAocmFkaW8tPmluaXRpYWxfY2hhbm5lbCAhPSAweEZGKQotCQkJYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKGJjbSwgcmFkaW8tPmluaXRpYWxfY2hhbm5lbCwgMCk7Ci0JfQotCi0JLyogRG9uJ3QgZW5hYmxlIE1BQy9JUlEgaGVyZSwgYXMgaXQgd2lsbCByYWNlIHdpdGggdGhlIElSUSBoYW5kbGVyLgotCSAqIFdlIGVuYWJsZSBpdCBsYXRlci4KLQkgKi8KLQliY20tPmN1cnJlbnRfY29yZS0+aW5pdGlhbGl6ZWQgPSAxOwotb3V0OgotCXJldHVybiBlcnI7Ci0KLWVycl9jaGlwX2NsZWFudXA6Ci0JYmNtNDN4eF9jaGlwX2NsZWFudXAoYmNtKTsKLQlnb3RvIG91dDsKLX0KLQotc3RhdGljIGludCBiY200M3h4X2NoaXBzZXRfYXR0YWNoKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpbnQgZXJyOwotCXUxNiBwY2lfc3RhdHVzOwotCi0JZXJyID0gYmNtNDN4eF9wY3RsX3NldF9jcnlzdGFsKGJjbSwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0JZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWcxNihiY20sIFBDSV9TVEFUVVMsICZwY2lfc3RhdHVzKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWcxNihiY20sIFBDSV9TVEFUVVMsIHBjaV9zdGF0dXMgJiB+UENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUKTsKLQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfY2hpcHNldF9kZXRhY2goc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWJjbTQzeHhfcGN0bF9zZXRfY2xvY2soYmNtLCBCQ000M3h4X1BDVExfQ0xLX1NMT1cpOwotCWJjbTQzeHhfcGN0bF9zZXRfY3J5c3RhbChiY20sIDApOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3BjaWNvcmVfYnJvYWRjYXN0X3ZhbHVlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkJICAgIHUzMiBhZGRyZXNzLAotCQkJCQkgICAgdTMyIGRhdGEpCi17Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9QQ0lDT1JFX0JDQVNUX0FERFIsIGFkZHJlc3MpOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfUENJQ09SRV9CQ0FTVF9EQVRBLCBkYXRhKTsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3BjaWNvcmVfY29tbWl0X3NldHRpbmdzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWJjbS0+aXJxX3NhdmVkc3RhdGUgPSBiY200M3h4X2ludGVycnVwdF9kaXNhYmxlKGJjbSwgQkNNNDN4eF9JUlFfQUxMKTsKLQotCWlmIChiY20tPmNvcmVfY2hpcGNvbW1vbi5hdmFpbGFibGUpIHsKLQkJZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfY2hpcGNvbW1vbik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQotCQliY200M3h4X3BjaWNvcmVfYnJvYWRjYXN0X3ZhbHVlKGJjbSwgMHhmZDgsIDB4MDAwMDAwMDApOwotCi0JCS8qIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCB3aGVuIGEgUENJIGNvcmUgaXMgbWFwcGVkICovCi0JCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCAmYmNtLT5jb3JlX3BjaSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UKLQkJYmNtNDN4eF9wY2ljb3JlX2Jyb2FkY2FzdF92YWx1ZShiY20sIDB4ZmQ4LCAweDAwMDAwMDAwKTsKLQotCWJjbTQzeHhfaW50ZXJydXB0X2VuYWJsZShiY20sIGJjbS0+aXJxX3NhdmVkc3RhdGUpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHUzMiBiY200M3h4X3BjaWVfcmVnX3JlYWQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MzIgYWRkcmVzcykKLXsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUVDT1JFX1JFR19BRERSLCBhZGRyZXNzKTsKLQlyZXR1cm4gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X1BDSUVDT1JFX1JFR19EQVRBKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9wY2llX3JlZ193cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUzMiBhZGRyZXNzLAotCQkJCSAgICB1MzIgZGF0YSkKLXsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUVDT1JFX1JFR19BRERSLCBhZGRyZXNzKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUVDT1JFX1JFR19EQVRBLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9wY2llX21kaW9fd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1OCBkZXYsIHU4IHJlZywKLQkJCQkgICAgdTE2IGRhdGEpCi17Ci0JaW50IGk7Ci0KLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUVDT1JFX01ESU9fQ1RMLCAweDAwODIpOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfUENJRUNPUkVfTURJT19EQVRBLCBCQ000M3h4X1BDSUVfTURJT19TVCB8Ci0JCQlCQ000M3h4X1BDSUVfTURJT19XVCB8IChkZXYgPDwgQkNNNDN4eF9QQ0lFX01ESU9fREVWKSB8Ci0JCQkocmVnIDw8IEJDTTQzeHhfUENJRV9NRElPX1JFRykgfCBCQ000M3h4X1BDSUVfTURJT19UQSB8Ci0JCQlkYXRhKTsKLQl1ZGVsYXkoMTApOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJaWYgKGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9QQ0lFQ09SRV9NRElPX0NUTCkgJgotCQkgICAgQkNNNDN4eF9QQ0lFX01ESU9fVEMpCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0KLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUVDT1JFX01ESU9fQ1RMLCAwKTsKLX0KLQotLyogTWFrZSBhbiBJL08gQ29yZSB1c2FibGUuICJjb3JlX21hc2siIGlzIHRoZSBiaXRtYXNrIG9mIHRoZSBjb3JlcyB0byBlbmFibGUuCi0gKiBUbyBlbmFibGUgY29yZSAwLCBwYXNzIGEgY29yZV9tYXNrIG9mIDE8PDAKLSAqLwotc3RhdGljIGludCBiY200M3h4X3NldHVwX2JhY2twbGFuZV9wY2lfY29ubmVjdGlvbihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJCQkgIHUzMiBjb3JlX21hc2spCi17Ci0JdTMyIGJhY2twbGFuZV9mbGFnX25yOwotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqb2xkX2NvcmU7Ci0JaW50IGVyciA9IDA7Ci0KLQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUUFNGTEFHKTsKLQliYWNrcGxhbmVfZmxhZ19uciA9IHZhbHVlICYgQkNNNDN4eF9CQUNLUExBTkVfRkxBR19OUl9NQVNLOwotCi0Jb2xkX2NvcmUgPSBiY20tPmN1cnJlbnRfY29yZTsKLQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgJmJjbS0+Y29yZV9wY2kpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA2ICYmCi0JCWJjbS0+Y3VycmVudF9jb3JlLT5pZCA9PSBCQ000M3h4X0NPUkVJRF9QQ0kpIHsKLQkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCSU5UVkVDKTsKLQkJdmFsdWUgfD0gKDEgPDwgYmFja3BsYW5lX2ZsYWdfbnIpOwotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQklOVFZFQywgdmFsdWUpOwotCX0gZWxzZSB7Ci0JCWVyciA9IGJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMzIoYmNtLCBCQ000M3h4X1BDSUNGR19JQ1IsICZ2YWx1ZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yOiBJQ1Igc2V0dXAgZmFpbHVyZSFcbiIpOwotCQkJZ290byBvdXRfc3dpdGNoX2JhY2s7Ci0JCX0KLQkJdmFsdWUgfD0gY29yZV9tYXNrIDw8IDg7Ci0JCWVyciA9IGJjbTQzeHhfcGNpX3dyaXRlX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ0lDRkdfSUNSLCB2YWx1ZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yOiBJQ1Igc2V0dXAgZmFpbHVyZSFcbiIpOwotCQkJZ290byBvdXRfc3dpdGNoX2JhY2s7Ci0JCX0KLQl9Ci0KLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPmlkID09IEJDTTQzeHhfQ09SRUlEX1BDSSkgewotCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9QQ0lDT1JFX1NCVE9QQ0kyKTsKLQkJdmFsdWUgfD0gQkNNNDN4eF9TQlRPUENJMl9QUkVGRVRDSCB8IEJDTTQzeHhfU0JUT1BDSTJfQlVSU1Q7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfUENJQ09SRV9TQlRPUENJMiwgdmFsdWUpOwotCi0JCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgNSkgewotCQkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCSU1DT05GSUdMT1cpOwotCQkJdmFsdWUgfD0gKDIgPDwgQkNNNDN4eF9TQklNQ09ORklHTE9XX1NFUlZJQ0VfVE9VVF9TSElGVCkKLQkJCQkgJiBCQ000M3h4X1NCSU1DT05GSUdMT1dfU0VSVklDRV9UT1VUX01BU0s7Ci0JCQl2YWx1ZSB8PSAoMyA8PCBCQ000M3h4X1NCSU1DT05GSUdMT1dfUkVRVUVTVF9UT1VUX1NISUZUKQotCQkJCSAmIEJDTTQzeHhfU0JJTUNPTkZJR0xPV19SRVFVRVNUX1RPVVRfTUFTSzsKLQkJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCSU1DT05GSUdMT1csIHZhbHVlKTsKLQkJCWVyciA9IGJjbTQzeHhfcGNpY29yZV9jb21taXRfc2V0dGluZ3MoYmNtKTsKLQkJCWFzc2VydChlcnIgPT0gMCk7Ci0JCX0gZWxzZSBpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA+PSAxMSkgewotCQkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfUENJQ09SRV9TQlRPUENJMik7Ci0JCQl2YWx1ZSB8PSBCQ000M3h4X1NCVE9QQ0kyX01FTVJFQURfTVVMVEk7Ci0JCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUNPUkVfU0JUT1BDSTIsIHZhbHVlKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID09IDAgfHwgYmNtLT5jdXJyZW50X2NvcmUtPnJldiA9PSAxKSB7Ci0JCQl2YWx1ZSA9IGJjbTQzeHhfcGNpZV9yZWdfcmVhZChiY20sIEJDTTQzeHhfUENJRV9UTFBfV09SS0FST1VORCk7Ci0JCQl2YWx1ZSB8PSAweDg7Ci0JCQliY200M3h4X3BjaWVfcmVnX3dyaXRlKGJjbSwgQkNNNDN4eF9QQ0lFX1RMUF9XT1JLQVJPVU5ELAotCQkJCQkgICAgICAgdmFsdWUpOwotCQl9Ci0JCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID09IDApIHsKLQkJCWJjbTQzeHhfcGNpZV9tZGlvX3dyaXRlKGJjbSwgQkNNNDN4eF9NRElPX1NFUkRFU19SWCwKLQkJCQkJCUJDTTQzeHhfU0VSREVTX1JYVElNRVIsIDB4ODEyOCk7Ci0JCQliY200M3h4X3BjaWVfbWRpb193cml0ZShiY20sIEJDTTQzeHhfTURJT19TRVJERVNfUlgsCi0JCQkJCQlCQ000M3h4X1NFUkRFU19DRFIsIDB4MDEwMCk7Ci0JCQliY200M3h4X3BjaWVfbWRpb193cml0ZShiY20sIEJDTTQzeHhfTURJT19TRVJERVNfUlgsCi0JCQkJCQlCQ000M3h4X1NFUkRFU19DRFJfQlcsIDB4MTQ2Nik7Ci0JCX0gZWxzZSBpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA9PSAxKSB7Ci0JCQl2YWx1ZSA9IGJjbTQzeHhfcGNpZV9yZWdfcmVhZChiY20sIEJDTTQzeHhfUENJRV9ETExQX0xJTktDVEwpOwotCQkJdmFsdWUgfD0gMHg0MDsKLQkJCWJjbTQzeHhfcGNpZV9yZWdfd3JpdGUoYmNtLCBCQ000M3h4X1BDSUVfRExMUF9MSU5LQ1RMLAotCQkJCQkgICAgICAgdmFsdWUpOwotCQl9Ci0JfQotb3V0X3N3aXRjaF9iYWNrOgotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBvbGRfY29yZSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9wZXJpb2RpY19ldmVyeTEyMHNlYyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCi0JaWYgKHBoeS0+dHlwZSAhPSBCQ000M3h4X1BIWVRZUEVfRyB8fCBwaHktPnJldiA8IDIpCi0JCXJldHVybjsKLQotCWJjbTQzeHhfbWFjX3N1c3BlbmQoYmNtKTsKLQliY200M3h4X3BoeV9sb19nX21lYXN1cmUoYmNtKTsKLQliY200M3h4X21hY19lbmFibGUoYmNtKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9wZXJpb2RpY19ldmVyeTYwc2VjKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQliY200M3h4X3BoeV9sb19tYXJrX2FsbF91bnVzZWQoYmNtKTsKLQlpZiAoYmNtLT5zcHJvbS5ib2FyZGZsYWdzICYgQkNNNDN4eF9CRkxfUlNTSSkgewotCQliY200M3h4X21hY19zdXNwZW5kKGJjbSk7Ci0JCWJjbTQzeHhfY2FsY19ucnNzaV9zbG9wZShiY20pOwotCQliY200M3h4X21hY19lbmFibGUoYmNtKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcGVyaW9kaWNfZXZlcnkzMHNlYyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JLyogVXBkYXRlIGRldmljZSBzdGF0aXN0aWNzLiAqLwotCWJjbTQzeHhfY2FsY3VsYXRlX2xpbmtfcXVhbGl0eShiY20pOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3BlcmlvZGljX2V2ZXJ5MTVzZWMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWJjbTQzeHhfcGh5X3htaXRwb3dlcihiY20pOyAvL0ZJWE1FOiB1bmxlc3Mgc2Nhbm5pbmc/Ci0JLy9UT0RPIGZvciBBUEhZICh0ZW1wZXJhdHVyZT8pCi19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcGVyaW9kaWNfZXZlcnkxc2VjKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCWludCByYWRpb19od19lbmFibGU7Ci0KLQkvKiBjaGVjayBpZiByYWRpbyBoYXJkd2FyZSBlbmFibGVkIHN0YXR1cyBjaGFuZ2VkICovCi0JcmFkaW9faHdfZW5hYmxlID0gYmNtNDN4eF9pc19od19yYWRpb19lbmFibGVkKGJjbSk7Ci0JaWYgKHVubGlrZWx5KGJjbS0+cmFkaW9faHdfZW5hYmxlICE9IHJhZGlvX2h3X2VuYWJsZSkpIHsKLQkJYmNtLT5yYWRpb19od19lbmFibGUgPSByYWRpb19od19lbmFibGU7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJSYWRpbyBoYXJkd2FyZSBzdGF0dXMgY2hhbmdlZCB0byAlc1xuIiwKLQkJICAgICAgIChyYWRpb19od19lbmFibGUgPT0gMCkgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiKTsKLQkJYmNtNDN4eF9sZWRzX3VwZGF0ZShiY20sIDApOwotCX0KLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HKSB7Ci0JCS8vVE9ETzogdXBkYXRlX2FjaV9tb3ZpbmdfYXZlcmFnZQotCQlpZiAocmFkaW8tPmFjaV9lbmFibGUgJiYgcmFkaW8tPmFjaV93bGFuX2F1dG9tYXRpYykgewotCQkJYmNtNDN4eF9tYWNfc3VzcGVuZChiY20pOwotCQkJaWYgKCFyYWRpby0+YWNpX2VuYWJsZSAmJiAxIC8qVE9ETzogbm90IHNjYW5uaW5nPyAqLykgewotCQkJCWlmICgwIC8qVE9ETzogYnVuY2ggb2YgY29uZGl0aW9ucyovKSB7Ci0JCQkJCWJjbTQzeHhfcmFkaW9fc2V0X2ludGVyZmVyZW5jZV9taXRpZ2F0aW9uKGJjbSwKLQkJCQkJCQkJCQkgIEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9NQU5VQUxXTEFOKTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKDEvKlRPRE8qLykgewotCQkJCS8qCi0JCQkJaWYgKChhY2lfYXZlcmFnZSA+IDEwMDApICYmICEoYmNtNDN4eF9yYWRpb19hY2lfc2NhbihiY20pKSkgewotCQkJCQliY200M3h4X3JhZGlvX3NldF9pbnRlcmZlcmVuY2VfbWl0aWdhdGlvbihiY20sCi0JCQkJCQkJCQkJICBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9ORSk7Ci0JCQkJfQotCQkJCSovCi0JCQl9Ci0JCQliY200M3h4X21hY19lbmFibGUoYmNtKTsKLQkJfSBlbHNlIGlmIChyYWRpby0+aW50ZXJmbW9kZSA9PSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9OV0xBTiAmJgotCQkJICAgcGh5LT5yZXYgPT0gMSkgewotCQkJLy9UT0RPOiBpbXBsZW1lbnQgcmV2MSB3b3JrYXJvdW5kCi0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX3BlcmlvZGljX3dvcmsoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWlmIChiY20tPnBlcmlvZGljX3N0YXRlICUgMTIwID09IDApCi0JCWJjbTQzeHhfcGVyaW9kaWNfZXZlcnkxMjBzZWMoYmNtKTsKLQlpZiAoYmNtLT5wZXJpb2RpY19zdGF0ZSAlIDYwID09IDApCi0JCWJjbTQzeHhfcGVyaW9kaWNfZXZlcnk2MHNlYyhiY20pOwotCWlmIChiY20tPnBlcmlvZGljX3N0YXRlICUgMzAgPT0gMCkKLQkJYmNtNDN4eF9wZXJpb2RpY19ldmVyeTMwc2VjKGJjbSk7Ci0JaWYgKGJjbS0+cGVyaW9kaWNfc3RhdGUgJSAxNSA9PSAwKQotCQliY200M3h4X3BlcmlvZGljX2V2ZXJ5MTVzZWMoYmNtKTsKLQliY200M3h4X3BlcmlvZGljX2V2ZXJ5MXNlYyhiY20pOwotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZiY20tPnBlcmlvZGljX3dvcmssIEhaKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9wZXJpb2RpY193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlLCBwZXJpb2RpY193b3JrLndvcmspOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gYmNtLT5uZXRfZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHNhdmVkaXJxcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBvcmlnX3RyYW5zX3N0YXJ0ID0gMDsKLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCS8qIGtlZXAgZnJvbSBkb2luZyBhbmQgcmVhcm1pbmcgcGVyaW9kaWMgd29yayBpZiBzaHV0dGluZyBkb3duICovCi0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX1VOSU5JVCkKLQkJZ290byB1bmxvY2tfbXV0ZXg7Ci0JaWYgKHVubGlrZWx5KGJjbS0+cGVyaW9kaWNfc3RhdGUgJSA2MCA9PSAwKSkgewotCQkvKiBQZXJpb2RpYyB3b3JrIHdpbGwgdGFrZSBhIGxvbmcgdGltZSwgc28gd2Ugd2FudCBpdCB0bwotCQkgKiBiZSBwcmVlbXRpYmxlLgotCQkgKi8KLQotCQluZXRpZl90eF9sb2NrX2JoKG5ldF9kZXYpOwotCQkvKiBXZSBtdXN0IGZha2UgYSBzdGFydGVkIHRyYW5zbWlzc2lvbiBoZXJlLCBhcyB3ZSBhcmUgZ29pbmcgdG8KLQkJICogZGlzYWJsZSBUWC4gSWYgd2Ugd291bGRuJ3QgZmFrZSBhIFRYLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0bwotCQkgKiB0cmlnZ2VyIHRoZSBuZXRkZXYgd2F0Y2hkb2csIGlmIHRoZSBsYXN0IHJlYWwgVFggaXMgYWxyZWFkeQotCQkgKiBzb21lIHRpbWUgb24gdGhlIHBhc3QgKHNsaWdodGx5IGxlc3MgdGhhbiA1c2VjcykKLQkJICovCi0JCW9yaWdfdHJhbnNfc3RhcnQgPSBuZXRfZGV2LT50cmFuc19zdGFydDsKLQkJbmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOwotCQluZXRpZl90eF91bmxvY2tfYmgobmV0X2Rldik7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQkJYmNtNDN4eF9tYWNfc3VzcGVuZChiY20pOwotCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKLQkJCWJjbTQzeHhfcGlvX2ZyZWV6ZV90eHF1ZXVlcyhiY20pOwotCQlzYXZlZGlycXMgPSBiY200M3h4X2ludGVycnVwdF9kaXNhYmxlKGJjbSwgQkNNNDN4eF9JUlFfQUxMKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCQliY200M3h4X3N5bmNocm9uaXplX2lycShiY20pOwotCX0gZWxzZSB7Ci0JCS8qIFBlcmlvZGljIHdvcmsgc2hvdWxkIHRha2Ugc2hvcnQgdGltZSwgc28gd2Ugd2FudCBsb3cKLQkJICogbG9ja2luZyBvdmVyaGVhZC4KLQkJICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JfQotCi0JZG9fcGVyaW9kaWNfd29yayhiY20pOwotCi0JaWYgKHVubGlrZWx5KGJjbS0+cGVyaW9kaWNfc3RhdGUgJSA2MCA9PSAwKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCQl0YXNrbGV0X2VuYWJsZSgmYmNtLT5pc3JfdGFza2xldCk7Ci0JCWJjbTQzeHhfaW50ZXJydXB0X2VuYWJsZShiY20sIHNhdmVkaXJxcyk7Ci0JCWlmIChiY200M3h4X3VzaW5nX3BpbyhiY20pKQotCQkJYmNtNDN4eF9waW9fdGhhd190eHF1ZXVlcyhiY20pOwotCQliY200M3h4X21hY19lbmFibGUoYmNtKTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShiY20tPm5ldF9kZXYpOwotCQluZXRfZGV2LT50cmFuc19zdGFydCA9IG9yaWdfdHJhbnNfc3RhcnQ7Ci0JfQotCW1taW93YigpOwotCWJjbS0+cGVyaW9kaWNfc3RhdGUrKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci11bmxvY2tfbXV0ZXg6Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLX0KLQotdm9pZCBiY200M3h4X3BlcmlvZGljX3Rhc2tzX3NldHVwKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0gJmJjbS0+cGVyaW9kaWNfd29yazsKLQotCWFzc2VydChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksod29yaywgYmNtNDN4eF9wZXJpb2RpY193b3JrX2hhbmRsZXIpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yayh3b3JrLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9zZWN1cml0eV9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQliY20tPnNlY3VyaXR5X29mZnNldCA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkJCSAgMHgwMDU2KSAqIDI7Ci0JYmNtNDN4eF9jbGVhcl9rZXlzKGJjbSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF9ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdTMyICpkYXRhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICopcm5nLT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmKGJjbSktPmlycV9sb2NrLCBmbGFncyk7Ci0JKmRhdGEgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19STkcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihiY20pLT5pcnFfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIChzaXplb2YodTE2KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcm5nX2V4aXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWh3cm5nX3VucmVnaXN0ZXIoJmJjbS0+cm5nKTsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3JuZ19pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpbnQgZXJyOwotCi0Jc25wcmludGYoYmNtLT5ybmdfbmFtZSwgQVJSQVlfU0laRShiY20tPnJuZ19uYW1lKSwKLQkJICIlc18lcyIsIEtCVUlMRF9NT0ROQU1FLCBiY20tPm5ldF9kZXYtPm5hbWUpOwotCWJjbS0+cm5nLm5hbWUgPSBiY20tPnJuZ19uYW1lOwotCWJjbS0+cm5nLmRhdGFfcmVhZCA9IGJjbTQzeHhfcm5nX3JlYWQ7Ci0JYmNtLT5ybmcucHJpdiA9ICh1bnNpZ25lZCBsb25nKWJjbTsKLQllcnIgPSBod3JuZ19yZWdpc3RlcigmYmNtLT5ybmcpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIlJORyBpbml0IGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBiY200M3h4X2NhbmNlbF93b3JrKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQkvKiBUaGUgc3lzdGVtIG11c3QgYmUgdW5sb2NrZWQgd2hlbiB0aGlzIHJvdXRpbmUgaXMgZW50ZXJlZC4KLQkgKiBJZiBub3QsIHRoZSBuZXh0IDIgc3RlcHMgbWF5IGRlYWRsb2NrICovCi0JY2FuY2VsX3dvcmtfc3luYygmYmNtLT5yZXN0YXJ0X3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYmNtLT5wZXJpb2RpY193b3JrKTsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3NodXRkb3duX2FsbF93aXJlbGVzc19jb3JlcyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JaW50IHJldCA9IDA7Ci0JaW50IGksIGVycjsKLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqY29yZTsKLQotCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9TSFVUVElOR0RPV04pOwotCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKSB7Ci0JCWNvcmUgPSAmKGJjbS0+Y29yZV84MDIxMVtpXSk7Ci0JCWFzc2VydChjb3JlLT5hdmFpbGFibGUpOwotCQlpZiAoIWNvcmUtPmluaXRpYWxpemVkKQotCQkJY29udGludWU7Ci0JCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBjb3JlKTsKLQkJaWYgKGVycikgewotCQkJZHByaW50ayhLRVJOX0VSUiBQRlggInNodXRkb3duX2FsbF93aXJlbGVzc19jb3JlcyAiCi0JCQkJCSAgICAgInN3aXRjaF9jb3JlIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCQkJcmV0ID0gZXJyOwotCQkJY29udGludWU7Ci0JCX0KLQkJYmNtNDN4eF9pbnRlcnJ1cHRfZGlzYWJsZShiY20sIEJDTTQzeHhfSVJRX0FMTCk7Ci0JCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OKTsgLyogZHVtbXkgcmVhZCAqLwotCQliY200M3h4X3dpcmVsZXNzX2NvcmVfY2xlYW51cChiY20pOwotCQlpZiAoY29yZSA9PSBiY20tPmFjdGl2ZV84MDIxMV9jb3JlKQotCQkJYmNtLT5hY3RpdmVfODAyMTFfY29yZSA9IE5VTEw7Ci0JfQotCWZyZWVfaXJxKGJjbS0+aXJxLCBiY20pOwotCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9VTklOSVQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgYmNtNDN4eF9pbml0X2JvYXJkKCkgKi8KLXN0YXRpYyB2b2lkIGJjbTQzeHhfZnJlZV9ib2FyZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JYmNtNDN4eF9ybmdfZXhpdChiY20pOwotCWJjbTQzeHhfc3lzZnNfdW5yZWdpc3RlcihiY20pOwotCi0JbXV0ZXhfbG9jaygmKGJjbSktPm11dGV4KTsKLQliY200M3h4X3NldF9zdGF0dXMoYmNtLCBCQ000M3h4X1NUQVRfVU5JTklUKTsKLQltdXRleF91bmxvY2soJihiY20pLT5tdXRleCk7Ci0KLQliY200M3h4X2NhbmNlbF93b3JrKGJjbSk7Ci0KLQltdXRleF9sb2NrKCYoYmNtKS0+bXV0ZXgpOwotCWJjbTQzeHhfc2h1dGRvd25fYWxsX3dpcmVsZXNzX2NvcmVzKGJjbSk7Ci0JYmNtNDN4eF9wY3RsX3NldF9jcnlzdGFsKGJjbSwgMCk7Ci0JbXV0ZXhfdW5sb2NrKCYoYmNtKS0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVwYXJlX3BoeWRhdGFfZm9yX2luaXQoc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5KQotewotCXBoeS0+YW50ZW5uYV9kaXZlcnNpdHkgPSAweEZGRkY7Ci0JbWVtc2V0KHBoeS0+bWlubG93c2lnLCAweEZGLCBzaXplb2YocGh5LT5taW5sb3dzaWcpKTsKLQltZW1zZXQocGh5LT5taW5sb3dzaWdwb3MsIDAsIHNpemVvZihwaHktPm1pbmxvd3NpZ3BvcykpOwotCi0JLyogRmxhZ3MgKi8KLQlwaHktPmNhbGlicmF0ZWQgPSAwOwotCXBoeS0+aXNfbG9ja2VkID0gMDsKLQotCWlmIChwaHktPl9sb19wYWlycykgewotCQltZW1zZXQocGh5LT5fbG9fcGFpcnMsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGJjbTQzeHhfbG9wYWlyKSAqIEJDTTQzeHhfTE9fQ09VTlQpOwotCX0KLQltZW1zZXQocGh5LT5sb29wYmFja19nYWluLCAwLCBzaXplb2YocGh5LT5sb29wYmFja19nYWluKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZXBhcmVfcmFkaW9kYXRhX2Zvcl9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICAgICAgc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbykKLXsKLQlpbnQgaTsKLQotCS8qIFNldCBkZWZhdWx0IGF0dGVudWF0aW9uIHZhbHVlcy4gKi8KLQlyYWRpby0+YmFzZWJhbmRfYXR0ZW4gPSBiY200M3h4X2RlZmF1bHRfYmFzZWJhbmRfYXR0ZW51YXRpb24oYmNtKTsKLQlyYWRpby0+cmFkaW9fYXR0ZW4gPSBiY200M3h4X2RlZmF1bHRfcmFkaW9fYXR0ZW51YXRpb24oYmNtKTsKLQlyYWRpby0+dHhjdGwxID0gYmNtNDN4eF9kZWZhdWx0X3R4Y3RsMShiY20pOwotCXJhZGlvLT50eGN0bDIgPSAweEZGRkY7Ci0JcmFkaW8tPnR4cHdyX29mZnNldCA9IDA7Ci0KLQkvKiBOUlNTSSAqLwotCXJhZGlvLT5ucnNzaXNsb3BlID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpby0+bnJzc2kpOyBpKyspCi0JCXJhZGlvLT5ucnNzaVtpXSA9IC0xMDAwOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvLT5ucnNzaV9sdCk7IGkrKykKLQkJcmFkaW8tPm5yc3NpX2x0W2ldID0gaTsKLQotCXJhZGlvLT5sb2ZjYWwgPSAweEZGRkY7Ci0JcmFkaW8tPmluaXR2YWwgPSAweEZGRkY7Ci0KLQlyYWRpby0+YWNpX2VuYWJsZSA9IDA7Ci0JcmFkaW8tPmFjaV93bGFuX2F1dG9tYXRpYyA9IDA7Ci0JcmFkaW8tPmFjaV9od19yc3NpID0gMDsKLX0KLQotc3RhdGljIHZvaWQgcHJlcGFyZV9wcml2X2Zvcl9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqY29yZTsKLQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mb184MDIxMSAqd2xleHQ7Ci0KLQlhc3NlcnQoIWJjbS0+YWN0aXZlXzgwMjExX2NvcmUpOwotCi0JYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgQkNNNDN4eF9TVEFUX0lOSVRJQUxJWklORyk7Ci0KLQkvKiBGbGFncyAqLwotCWJjbS0+d2FzX2luaXRpYWxpemVkID0gMDsKLQliY20tPnJlZzEyNF9zZXRfMHg0ID0gMDsKLQotCS8qIFN0YXRzICovCi0JbWVtc2V0KCZiY20tPnN0YXRzLCAwLCBzaXplb2YoYmNtLT5zdGF0cykpOwotCi0JLyogV2lyZWxlc3MgY29yZSBkYXRhICovCi0JZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTOyBpKyspIHsKLQkJY29yZSA9ICYoYmNtLT5jb3JlXzgwMjExW2ldKTsKLQkJd2xleHQgPSBjb3JlLT5wcml2OwotCi0JCWlmICghY29yZS0+YXZhaWxhYmxlKQotCQkJY29udGludWU7Ci0JCWFzc2VydCh3bGV4dCA9PSAmKGJjbS0+Y29yZV84MDIxMV9leHRbaV0pKTsKLQotCQlwcmVwYXJlX3BoeWRhdGFfZm9yX2luaXQoJndsZXh0LT5waHkpOwotCQlwcmVwYXJlX3JhZGlvZGF0YV9mb3JfaW5pdChiY20sICZ3bGV4dC0+cmFkaW8pOwotCX0KLQotCS8qIElSUSByZWxhdGVkIGZsYWdzICovCi0JYmNtLT5pcnFfcmVhc29uID0gMDsKLQltZW1zZXQoYmNtLT5kbWFfcmVhc29uLCAwLCBzaXplb2YoYmNtLT5kbWFfcmVhc29uKSk7Ci0JYmNtLT5pcnFfc2F2ZWRzdGF0ZSA9IEJDTTQzeHhfSVJRX0lOSVRJQUw7Ci0KLQliY20tPm1hY19zdXNwZW5kZWQgPSAxOwotCi0JLyogTm9pc2UgY2FsY3VsYXRpb24gY29udGV4dCAqLwotCW1lbXNldCgmYmNtLT5ub2lzZWNhbGMsIDAsIHNpemVvZihiY20tPm5vaXNlY2FsYykpOwotCi0JLyogUGVyaW9kaWMgd29yayBjb250ZXh0ICovCi0JYmNtLT5wZXJpb2RpY19zdGF0ZSA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2lyZWxlc3NfY29yZV91cChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkgICAgaW50IGFjdGl2ZV93bGNvcmUpCi17Ci0JaW50IGVycjsKLQotCWlmICghYmNtNDN4eF9jb3JlX2VuYWJsZWQoYmNtKSkKLQkJYmNtNDN4eF93aXJlbGVzc19jb3JlX3Jlc2V0KGJjbSwgMSk7Ci0JaWYgKCFhY3RpdmVfd2xjb3JlKQotCQliY200M3h4X3dpcmVsZXNzX2NvcmVfbWFya19pbmFjdGl2ZShiY20pOwotCWVyciA9IGJjbTQzeHhfd2lyZWxlc3NfY29yZV9pbml0KGJjbSwgYWN0aXZlX3dsY29yZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0JaWYgKCFhY3RpdmVfd2xjb3JlKQotCQliY200M3h4X3JhZGlvX3R1cm5fb2ZmKGJjbSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogU2VsZWN0IGFuZCBlbmFibGUgdGhlICJ0byBiZSB1c2VkIiB3aXJlbGVzcyBjb3JlLgotICogTG9ja2luZzogYmNtLT5tdXRleCBtdXN0IGJlIGFxdWlyZWQgYmVmb3JlIGNhbGxpbmcgdGhpcy4KLSAqICAgICAgICAgIGJjbS0+aXJxX2xvY2sgbXVzdCBub3QgYmUgYXF1aXJlZC4KLSAqLwotaW50IGJjbTQzeHhfc2VsZWN0X3dpcmVsZXNzX2NvcmUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSBpbnQgcGh5dHlwZSkKLXsKLQlpbnQgaSwgZXJyOwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICphY3RpdmVfY29yZSA9IE5VTEw7Ci0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm9fODAyMTEgKmFjdGl2ZV93bGV4dCA9IE5VTEw7Ci0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKmNvcmU7Ci0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm9fODAyMTEgKndsZXh0OwotCWludCBhZGp1c3RfYWN0aXZlX3NidG1zdGF0ZWxvdyA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0JaWYgKHBoeXR5cGUgPCAwKSB7Ci0JCS8qIElmIG5vIHBoeXR5cGUgaXMgcmVxdWVzdGVkLCBzZWxlY3QgdGhlIGZpcnN0IGNvcmUuICovCi0JCWFzc2VydChiY20tPmNvcmVfODAyMTFbMF0uYXZhaWxhYmxlKTsKLQkJd2xleHQgPSBiY20tPmNvcmVfODAyMTFbMF0ucHJpdjsKLQkJcGh5dHlwZSA9IHdsZXh0LT5waHkudHlwZTsKLQl9Ci0JLyogRmluZCB0aGUgcmVxdWVzdGVkIGNvcmUuICovCi0JZm9yIChpID0gMDsgaSA8IGJjbS0+bnJfODAyMTFfYXZhaWxhYmxlOyBpKyspIHsKLQkJY29yZSA9ICYoYmNtLT5jb3JlXzgwMjExW2ldKTsKLQkJd2xleHQgPSBjb3JlLT5wcml2OwotCQlpZiAod2xleHQtPnBoeS50eXBlID09IHBoeXR5cGUpIHsKLQkJCWFjdGl2ZV9jb3JlID0gY29yZTsKLQkJCWFjdGl2ZV93bGV4dCA9IHdsZXh0OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKCFhY3RpdmVfY29yZSkKLQkJcmV0dXJuIC1FU1JDSDsgLyogTm8gc3VjaCBQSFlUWVBFIG9uIHRoaXMgYm9hcmQuICovCi0KLQlpZiAoYmNtLT5hY3RpdmVfODAyMTFfY29yZSkgewotCQkvKiBXZSBhbHJlYWR5IHNlbGVjdGVkIGEgd2wgY29yZSBpbiB0aGUgcGFzdC4KLQkJICogU28gZmlyc3QgY2xlYW4gdXAgZXZlcnl0aGluZy4KLQkJICovCi0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAic2VsZWN0X3dpcmVsZXNzX2NvcmU6IGNsZWFudXBcbiIpOwotCQlpZWVlODAyMTFzb2Z0bWFjX3N0b3AoYmNtLT5uZXRfZGV2KTsKLQkJYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKTsKLQkJZXJyID0gYmNtNDN4eF9kaXNhYmxlX2ludGVycnVwdHNfc3luYyhiY20pOwotCQlhc3NlcnQoIWVycik7Ci0JCXRhc2tsZXRfZW5hYmxlKCZiY20tPmlzcl90YXNrbGV0KTsKLQkJZXJyID0gYmNtNDN4eF9zaHV0ZG93bl9hbGxfd2lyZWxlc3NfY29yZXMoYmNtKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0JCS8qIE9rLCBldmVyeXRoaW5nIGRvd24sIGNvbnRpbnVlIHRvIHJlLWluaXRpYWxpemUuICovCi0JCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9JTklUSUFMSVpJTkcpOwotCX0KLQotCS8qIFJlc2V0IGFsbCBkYXRhIHN0cnVjdHVyZXMuICovCi0JcHJlcGFyZV9wcml2X2Zvcl9pbml0KGJjbSk7Ci0KLQllcnIgPSBiY200M3h4X3BjdGxfc2V0X2Nsb2NrKGJjbSwgQkNNNDN4eF9QQ1RMX0NMS19GQVNUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yOwotCi0JLyogTWFyayBhbGwgdW51c2VkIGNvcmVzICJpbmFjdGl2ZSIuICovCi0JZm9yIChpID0gMDsgaSA8IGJjbS0+bnJfODAyMTFfYXZhaWxhYmxlOyBpKyspIHsKLQkJY29yZSA9ICYoYmNtLT5jb3JlXzgwMjExW2ldKTsKLQkJd2xleHQgPSBjb3JlLT5wcml2OwotCi0JCWlmIChjb3JlID09IGFjdGl2ZV9jb3JlKQotCQkJY29udGludWU7Ci0JCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBjb3JlKTsKLQkJaWYgKGVycikgewotCQkJZHByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkIG5vdCBzd2l0Y2ggdG8gaW5hY3RpdmUgIgotCQkJCQkgICAgICI4MDIuMTEgY29yZSAoJWQpXG4iLCBlcnIpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQllcnIgPSB3aXJlbGVzc19jb3JlX3VwKGJjbSwgMCk7Ci0JCWlmIChlcnIpIHsKLQkJCWRwcmludGsoS0VSTl9FUlIgUEZYICJjb3JlX3VwIGZvciBpbmFjdGl2ZSA4MDIuMTEgY29yZSAiCi0JCQkJCSAgICAgImZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQlhZGp1c3RfYWN0aXZlX3NidG1zdGF0ZWxvdyA9IDE7Ci0JfQotCi0JLyogTm93IGluaXRpYWxpemUgdGhlIGFjdGl2ZSA4MDIuMTEgY29yZS4gKi8KLQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgYWN0aXZlX2NvcmUpOwotCWlmIChlcnIpIHsKLQkJZHByaW50ayhLRVJOX0VSUiBQRlggIkNvdWxkIG5vdCBzd2l0Y2ggdG8gYWN0aXZlICIKLQkJCQkgICAgICI4MDIuMTEgY29yZSAoJWQpXG4iLCBlcnIpOwotCQlnb3RvIGVycm9yOwotCX0KLQlpZiAoYWRqdXN0X2FjdGl2ZV9zYnRtc3RhdGVsb3cgJiYKLQkgICAgYWN0aXZlX3dsZXh0LT5waHkudHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykgewotCQl1MzIgc2J0bXN0YXRlbG93OwotCi0JCXNidG1zdGF0ZWxvdyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XKTsKLQkJc2J0bXN0YXRlbG93IHw9IEJDTTQzeHhfU0JUTVNUQVRFTE9XX0dfTU9ERV9FTkFCTEU7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVywgc2J0bXN0YXRlbG93KTsKLQl9Ci0JZXJyID0gd2lyZWxlc3NfY29yZV91cChiY20sIDEpOwotCWlmIChlcnIpIHsKLQkJZHByaW50ayhLRVJOX0VSUiBQRlggImNvcmVfdXAgZm9yIGFjdGl2ZSA4MDIuMTEgY29yZSAiCi0JCQkJICAgICAiZmFpbGVkICglZClcbiIsIGVycik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCWVyciA9IGJjbTQzeHhfcGN0bF9zZXRfY2xvY2soYmNtLCBCQ000M3h4X1BDVExfQ0xLX0RZTkFNSUMpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyb3I7Ci0JYmNtLT5hY3RpdmVfODAyMTFfY29yZSA9IGFjdGl2ZV9jb3JlOwotCi0JYmNtNDN4eF9tYWNmaWx0ZXJfY2xlYXIoYmNtLCBCQ000M3h4X01BQ0ZJTFRFUl9BU1NPQyk7Ci0JYmNtNDN4eF9tYWNmaWx0ZXJfc2V0KGJjbSwgQkNNNDN4eF9NQUNGSUxURVJfU0VMRiwgKHU4ICopKGJjbS0+bmV0X2Rldi0+ZGV2X2FkZHIpKTsKLQliY200M3h4X3NlY3VyaXR5X2luaXQoYmNtKTsKLQlkcmFpbl90eHN0YXR1c19xdWV1ZShiY20pOwotCWllZWU4MDIxMXNvZnRtYWNfc3RhcnQoYmNtLT5uZXRfZGV2KTsKLQotCS8qIExldCdzIGdvISBCZSBjYXJlZnVsIGFmdGVyIGVuYWJsaW5nIHRoZSBJUlFzLgotCSAqIERvbid0IHN3aXRjaCBjb3JlcywgZm9yIGV4YW1wbGUuCi0JICovCi0JYmNtNDN4eF9tYWNfZW5hYmxlKGJjbSk7Ci0JYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKTsKLQllcnIgPSBiY200M3h4X2luaXRpYWxpemVfaXJxKGJjbSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQliY200M3h4X2ludGVycnVwdF9lbmFibGUoYmNtLCBiY20tPmlycV9zYXZlZHN0YXRlKTsKLQotCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiU2VsZWN0ZWQgODAyLjExIGNvcmUgKHBoeXR5cGUgJWQpXG4iLAotCQlhY3RpdmVfd2xleHQtPnBoeS50eXBlKTsKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQliY200M3h4X3NldF9zdGF0dXMoYmNtLCBCQ000M3h4X1NUQVRfVU5JTklUKTsKLQliY200M3h4X3BjdGxfc2V0X2Nsb2NrKGJjbSwgQkNNNDN4eF9QQ1RMX0NMS19TTE9XKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfaW5pdF9ib2FyZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJihiY20pLT5tdXRleCk7Ci0KLQl0YXNrbGV0X2VuYWJsZSgmYmNtLT5pc3JfdGFza2xldCk7Ci0JZXJyID0gYmNtNDN4eF9wY3RsX3NldF9jcnlzdGFsKGJjbSwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdGFza2xldDsKLQllcnIgPSBiY200M3h4X3BjdGxfaW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2NyeXN0YWxfb2ZmOwotCWVyciA9IGJjbTQzeHhfc2VsZWN0X3dpcmVsZXNzX2NvcmUoYmNtLCAtMSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfY3J5c3RhbF9vZmY7Ci0JZXJyID0gYmNtNDN4eF9zeXNmc19yZWdpc3RlcihiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3dsc2h1dGRvd247Ci0JZXJyID0gYmNtNDN4eF9ybmdfaW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3N5c2ZzX3VucmVnOwotCWJjbTQzeHhfcGVyaW9kaWNfdGFza3Nfc2V0dXAoYmNtKTsKLQotCS8qRklYTUU6IFRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgc29mdG1hYyBpbnN0ZWFkLiAqLwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYmNtLT5zb2Z0bWFjLT5hc3NvY2luZm8ud29yaywgMCk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJihiY20pLT5tdXRleCk7Ci0KLQlyZXR1cm4gZXJyOwotCi1lcnJfc3lzZnNfdW5yZWc6Ci0JYmNtNDN4eF9zeXNmc191bnJlZ2lzdGVyKGJjbSk7Ci1lcnJfd2xzaHV0ZG93bjoKLQliY200M3h4X3NodXRkb3duX2FsbF93aXJlbGVzc19jb3JlcyhiY20pOwotZXJyX2NyeXN0YWxfb2ZmOgotCWJjbTQzeHhfcGN0bF9zZXRfY3J5c3RhbChiY20sIDApOwotZXJyX3Rhc2tsZXQ6Ci0JdGFza2xldF9kaXNhYmxlKCZiY20tPmlzcl90YXNrbGV0KTsKLQlnb3RvIG91dDsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9kZXRhY2hfYm9hcmQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gYmNtLT5wY2lfZGV2OwotCWludCBpOwotCi0JYmNtNDN4eF9jaGlwc2V0X2RldGFjaChiY20pOwotCS8qIERvIF9ub3RfIGFjY2VzcyB0aGUgY2hpcCwgYWZ0ZXIgaXQgaXMgZGV0YWNoZWQuICovCi0JcGNpX2lvdW5tYXAocGNpX2RldiwgYmNtLT5tbWlvX2FkZHIpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwotCi0JLyogRnJlZSBhbGxvY2F0ZWQgc3RydWN0dXJlcy9maWVsZHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9NQVhfODAyMTFfQ09SRVM7IGkrKykgewotCQlrZnJlZShiY20tPmNvcmVfODAyMTFfZXh0W2ldLnBoeS5fbG9fcGFpcnMpOwotCQlpZiAoYmNtLT5jb3JlXzgwMjExX2V4dFtpXS5waHkuZHluX3Rzc2lfdGJsKQotCQkJa2ZyZWUoYmNtLT5jb3JlXzgwMjExX2V4dFtpXS5waHkudHNzaTJkYm0pOwotCX0KLX0JCi0KLXN0YXRpYyBpbnQgYmNtNDN4eF9yZWFkX3BoeWluZm8oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQl1MTYgdmFsdWU7Ci0JdTggcGh5X2FuYWxvZzsKLQl1OCBwaHlfdHlwZTsKLQl1OCBwaHlfcmV2OwotCWludCBwaHlfcmV2X29rID0gMTsKLQl2b2lkICpwOwotCi0JdmFsdWUgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19QSFlfVkVSKTsKLQotCXBoeV9hbmFsb2cgPSAodmFsdWUgJiAweEYwMDApID4+IDEyOwotCXBoeV90eXBlID0gKHZhbHVlICYgMHgwRjAwKSA+PiA4OwotCXBoeV9yZXYgPSAodmFsdWUgJiAweDAwMEYpOwotCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICJEZXRlY3RlZCBQSFk6IEFuYWxvZzogJXgsIFR5cGUgJXgsIFJldmlzaW9uICV4XG4iLAotCQlwaHlfYW5hbG9nLCBwaHlfdHlwZSwgcGh5X3Jldik7Ci0KLQlzd2l0Y2ggKHBoeV90eXBlKSB7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQkJaWYgKHBoeV9yZXYgPj0gNCkKLQkJCXBoeV9yZXZfb2sgPSAwOwotCQkvKkZJWE1FOiBXZSBuZWVkIHRvIHN3aXRjaCB0aGUgaWVlZS0+bW9kdWxhdGlvbiwgZXRjLi4gZmxhZ3MsCi0JCSAqICAgICAgIGlmIHdlIHN3aXRjaCA4MDIxMSBjb3JlcyBhZnRlciBpbml0IGlzIGRvbmUuCi0JCSAqICAgICAgIEFzIHdlIGRvIG5vdCBpbXBsZW1lbnQgb24gdGhlIGZseSBzd2l0Y2hpbmcgYmV0d2VlbgotCQkgKiAgICAgICB3aXJlbGVzcyBjb3JlcywgSSB3aWxsIGxlYXZlIHRoaXMgYXMgYSBmdXR1cmUgdGFzay4KLQkJICovCi0JCWJjbS0+aWVlZS0+bW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT047Ci0JCWJjbS0+aWVlZS0+bW9kZSA9IElFRUVfQTsKLQkJYmNtLT5pZWVlLT5mcmVxX2JhbmQgPSBJRUVFODAyMTFfNTJHSFpfQkFORCB8Ci0JCQkJICAgICAgIElFRUU4MDIxMV8yNEdIWl9CQU5EOwotCQlicmVhazsKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9COgotCQlpZiAocGh5X3JldiAhPSAyICYmIHBoeV9yZXYgIT0gNCAmJiBwaHlfcmV2ICE9IDYgJiYgcGh5X3JldiAhPSA3KQotCQkJcGh5X3Jldl9vayA9IDA7Ci0JCWJjbS0+aWVlZS0+bW9kdWxhdGlvbiA9IElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTjsKLQkJYmNtLT5pZWVlLT5tb2RlID0gSUVFRV9COwotCQliY20tPmllZWUtPmZyZXFfYmFuZCA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOwotCQlicmVhazsKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQlpZiAocGh5X3JldiA+IDgpCi0JCQlwaHlfcmV2X29rID0gMDsKLQkJYmNtLT5pZWVlLT5tb2R1bGF0aW9uID0gSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiB8Ci0JCQkJCUlFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTjsKLQkJYmNtLT5pZWVlLT5tb2RlID0gSUVFRV9HOwotCQliY20tPmllZWUtPmZyZXFfYmFuZCA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvcjogVW5rbm93biBQSFkgVHlwZSAleFxuIiwKLQkJICAgICAgIHBoeV90eXBlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfTsKLQliY20tPmllZWUtPnBlcmZlY3RfcnNzaSA9IFJYX1JTU0lfTUFYOwotCWJjbS0+aWVlZS0+d29yc3RfcnNzaSA9IDA7Ci0JaWYgKCFwaHlfcmV2X29rKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJJbnZhbGlkIFBIWSBSZXZpc2lvbiAleFxuIiwKLQkJICAgICAgIHBoeV9yZXYpOwotCX0KLQotCXBoeS0+YW5hbG9nID0gcGh5X2FuYWxvZzsKLQlwaHktPnR5cGUgPSBwaHlfdHlwZTsKLQlwaHktPnJldiA9IHBoeV9yZXY7Ci0JaWYgKChwaHlfdHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQikgfHwgKHBoeV90eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HKSkgewotCQlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJjbTQzeHhfbG9wYWlyKSAqIEJDTTQzeHhfTE9fQ09VTlQsCi0JCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlwaHktPl9sb19wYWlycyA9IHA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF9hdHRhY2hfYm9hcmQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gYmNtLT5wY2lfZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gYmNtLT5uZXRfZGV2OwotCWludCBlcnI7Ci0JaW50IGk7Ci0JdTMyIGNvcmVtYXNrOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJwY2lfZW5hYmxlX2RldmljZSgpIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaV9kZXYsIEtCVUlMRF9NT0ROQU1FKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInBjaV9yZXF1ZXN0X3JlZ2lvbnMoKSBmYWlsZWRcbiIpOwotCQlnb3RvIGVycl9wY2lfZGlzYWJsZTsKLQl9Ci0JLyogZW5hYmxlIFBDSSBidXMtbWFzdGVyaW5nICovCi0JcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0JYmNtLT5tbWlvX2FkZHIgPSBwY2lfaW9tYXAocGNpX2RldiwgMCwgfjBVTCk7Ci0JaWYgKCFiY20tPm1taW9fYWRkcikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJwY2lfaW9tYXAoKSBmYWlsZWRcbiIpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9wY2lfcmVsZWFzZTsKLQl9Ci0JbmV0X2Rldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYmNtLT5tbWlvX2FkZHI7Ci0KLQllcnIgPSBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzE2KGJjbSwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAmYmNtLT5ib2FyZF92ZW5kb3IpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2lvdW5tYXA7Ci0JZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWcxNihiY20sIFBDSV9TVUJTWVNURU1fSUQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAmYmNtLT5ib2FyZF90eXBlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9pb3VubWFwOwotCi0JYmNtLT5ib2FyZF9yZXZpc2lvbiA9IGJjbS0+cGNpX2Rldi0+cmV2aXNpb247Ci0KLQllcnIgPSBiY200M3h4X2NoaXBzZXRfYXR0YWNoKGJjbSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfaW91bm1hcDsKLQllcnIgPSBiY200M3h4X3BjdGxfaW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2NoaXBzZXRfZGV0YWNoOwotCWVyciA9IGJjbTQzeHhfcHJvYmVfY29yZXMoYmNtKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9jaGlwc2V0X2RldGFjaDsKLQkKLQkvKiBBdHRhY2ggYWxsIElPIGNvcmVzIHRvIHRoZSBiYWNrcGxhbmUuICovCi0JY29yZW1hc2sgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKQotCQljb3JlbWFzayB8PSAoMSA8PCBiY20tPmNvcmVfODAyMTFbaV0uaW5kZXgpOwotCS8vRklYTUU6IEFsc28gYXR0YWNoIHNvbWUgbm9uODAyMTEgY29yZXM/Ci0JZXJyID0gYmNtNDN4eF9zZXR1cF9iYWNrcGxhbmVfcGNpX2Nvbm5lY3Rpb24oYmNtLCBjb3JlbWFzayk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJCYWNrcGxhbmUtPlBDSSBjb25uZWN0aW9uIGZhaWxlZCFcbiIpOwotCQlnb3RvIGVycl9jaGlwc2V0X2RldGFjaDsKLQl9Ci0KLQllcnIgPSBiY200M3h4X3Nwcm9tX2V4dHJhY3QoYmNtKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9jaGlwc2V0X2RldGFjaDsKLQllcnIgPSBiY200M3h4X2xlZHNfaW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2NoaXBzZXRfZGV0YWNoOwotCi0JZm9yIChpID0gMDsgaSA8IGJjbS0+bnJfODAyMTFfYXZhaWxhYmxlOyBpKyspIHsKLQkJZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfODAyMTFbaV0pOwotCQlhc3NlcnQoZXJyICE9IC1FTk9ERVYpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfODAyMTFfdW53aW5kOwotCi0JCS8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgd2lyZWxlc3MgY29yZS4KLQkJICogQ29ubmVjdCBQSFkgb25seSBvbiB0aGUgZmlyc3QgY29yZS4KLQkJICovCi0JCWJjbTQzeHhfd2lyZWxlc3NfY29yZV9yZXNldChiY20sIChpID09IDApKTsKLQotCQllcnIgPSBiY200M3h4X3JlYWRfcGh5aW5mbyhiY20pOwotCQlpZiAoZXJyICYmIChpID09IDApKQotCQkJZ290byBlcnJfODAyMTFfdW53aW5kOwotCi0JCWVyciA9IGJjbTQzeHhfcmVhZF9yYWRpb2luZm8oYmNtKTsKLQkJaWYgKGVyciAmJiAoaSA9PSAwKSkKLQkJCWdvdG8gZXJyXzgwMjExX3Vud2luZDsKLQotCQllcnIgPSBiY200M3h4X3ZhbGlkYXRlX2NoaXAoYmNtKTsKLQkJaWYgKGVyciAmJiAoaSA9PSAwKSkKLQkJCWdvdG8gZXJyXzgwMjExX3Vud2luZDsKLQotCQliY200M3h4X3JhZGlvX3R1cm5fb2ZmKGJjbSk7Ci0JCWVyciA9IGJjbTQzeHhfcGh5X2luaXRfdHNzaTJkYm1fdGFibGUoYmNtKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyXzgwMjExX3Vud2luZDsKLQkJYmNtNDN4eF93aXJlbGVzc19jb3JlX2Rpc2FibGUoYmNtKTsKLQl9Ci0JZXJyID0gYmNtNDN4eF9nZW9faW5pdChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyXzgwMjExX3Vud2luZDsKLQliY200M3h4X3BjdGxfc2V0X2NyeXN0YWwoYmNtLCAwKTsKLQotCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtICovCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYmNtLT5zcHJvbS5ldDFtYWNhZGRyKSkKLQkJbWVtY3B5KGJjbS0+bmV0X2Rldi0+ZGV2X2FkZHIsIGJjbS0+c3Byb20uZXQxbWFjYWRkciwgNik7Ci0JZWxzZQotCQltZW1jcHkoYmNtLT5uZXRfZGV2LT5kZXZfYWRkciwgYmNtLT5zcHJvbS5pbDBtYWNhZGRyLCA2KTsKLQotCXNucHJpbnRmKGJjbS0+bmljaywgSVdfRVNTSURfTUFYX1NJWkUsCi0JCSAiQnJvYWRjb20gJTA0WCIsIGJjbS0+Y2hpcF9pZCk7Ci0KLQlhc3NlcnQoZXJyID09IDApOwotb3V0OgotCXJldHVybiBlcnI7Ci0KLWVycl84MDIxMV91bndpbmQ6Ci0JZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTOyBpKyspIHsKLQkJa2ZyZWUoYmNtLT5jb3JlXzgwMjExX2V4dFtpXS5waHkuX2xvX3BhaXJzKTsKLQkJaWYgKGJjbS0+Y29yZV84MDIxMV9leHRbaV0ucGh5LmR5bl90c3NpX3RibCkKLQkJCWtmcmVlKGJjbS0+Y29yZV84MDIxMV9leHRbaV0ucGh5LnRzc2kyZGJtKTsKLQl9Ci1lcnJfY2hpcHNldF9kZXRhY2g6Ci0JYmNtNDN4eF9jaGlwc2V0X2RldGFjaChiY20pOwotZXJyX2lvdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGNpX2RldiwgYmNtLT5tbWlvX2FkZHIpOwotZXJyX3BjaV9yZWxlYXNlOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7Ci1lcnJfcGNpX2Rpc2FibGU6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBhdHRhY2ggYm9hcmRcbiIpOwotCWdvdG8gb3V0OwotfQotCi0vKiBEbyB0aGUgSGFyZHdhcmUgSU8gb3BlcmF0aW9ucyB0byBzZW5kIHRoZSB0eGIgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJjbTQzeHhfdHgoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiKQotewotCWludCBlcnIgPSAtRU5PREVWOwotCi0JaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpCi0JCWVyciA9IGJjbTQzeHhfcGlvX3R4KGJjbSwgdHhiKTsKLQllbHNlCi0JCWVyciA9IGJjbTQzeHhfZG1hX3R4KGJjbSwgdHhiKTsKLQliY20tPm5ldF9kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfaWVlZTgwMjExX3NldF9jaGFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgICAgICB1OCBjaGFubmVsKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewotCQliY200M3h4X21hY19zdXNwZW5kKGJjbSk7Ci0JCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIGNoYW5uZWwsIDApOwotCQliY200M3h4X21hY19lbmFibGUoYmNtKTsKLQl9IGVsc2UgewotCQlyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCQlyYWRpby0+aW5pdGlhbF9jaGFubmVsID0gY2hhbm5lbDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci19Ci0KLS8qIHNldF9zZWN1cml0eSgpIGNhbGxiYWNrIGluIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICovCi1zdGF0aWMgdm9pZCBiY200M3h4X2llZWU4MDIxMV9zZXRfc2VjdXJpdHkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgKnNlYykKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqc2VjaW5mbyA9ICZiY20tPmllZWUtPnNlYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBrZXlpZHg7Ci0JCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICJzZXQgc2VjdXJpdHkgY2FsbGVkIik7Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCi0JZm9yIChrZXlpZHggPSAwOyBrZXlpZHg8V0VQX0tFWVM7IGtleWlkeCsrKQotCQlpZiAoc2VjLT5mbGFncyAmICgxPDxrZXlpZHgpKSB7Ci0JCQlzZWNpbmZvLT5lbmNvZGVfYWxnW2tleWlkeF0gPSBzZWMtPmVuY29kZV9hbGdba2V5aWR4XTsKLQkJCXNlY2luZm8tPmtleV9zaXplc1trZXlpZHhdID0gc2VjLT5rZXlfc2l6ZXNba2V5aWR4XTsKLQkJCW1lbWNweShzZWNpbmZvLT5rZXlzW2tleWlkeF0sIHNlYy0+a2V5c1trZXlpZHhdLCBTQ01fS0VZX0xFTik7Ci0JCX0KLQkKLQlpZiAoc2VjLT5mbGFncyAmIFNFQ19BQ1RJVkVfS0VZKSB7Ci0JCXNlY2luZm8tPmFjdGl2ZV9rZXkgPSBzZWMtPmFjdGl2ZV9rZXk7Ci0JCWRwcmludGsoIiwgLmFjdGl2ZV9rZXkgPSAlZCIsIHNlYy0+YWN0aXZlX2tleSk7Ci0JfQotCWlmIChzZWMtPmZsYWdzICYgU0VDX1VOSUNBU1RfR1JPVVApIHsKLQkJc2VjaW5mby0+dW5pY2FzdF91c2VzX2dyb3VwID0gc2VjLT51bmljYXN0X3VzZXNfZ3JvdXA7Ci0JCWRwcmludGsoIiwgLnVuaWNhc3RfdXNlc19ncm91cCA9ICVkIiwgc2VjLT51bmljYXN0X3VzZXNfZ3JvdXApOwotCX0KLQlpZiAoc2VjLT5mbGFncyAmIFNFQ19MRVZFTCkgewotCQlzZWNpbmZvLT5sZXZlbCA9IHNlYy0+bGV2ZWw7Ci0JCWRwcmludGsoIiwgLmxldmVsID0gJWQiLCBzZWMtPmxldmVsKTsKLQl9Ci0JaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5BQkxFRCkgewotCQlzZWNpbmZvLT5lbmFibGVkID0gc2VjLT5lbmFibGVkOwotCQlkcHJpbnRrKCIsIC5lbmFibGVkID0gJWQiLCBzZWMtPmVuYWJsZWQpOwotCX0KLQlpZiAoc2VjLT5mbGFncyAmIFNFQ19FTkNSWVBUKSB7Ci0JCXNlY2luZm8tPmVuY3J5cHQgPSBzZWMtPmVuY3J5cHQ7Ci0JCWRwcmludGsoIiwgLmVuY3J5cHQgPSAlZCIsIHNlYy0+ZW5jcnlwdCk7Ci0JfQotCWlmIChzZWMtPmZsYWdzICYgU0VDX0FVVEhfTU9ERSkgewotCQlzZWNpbmZvLT5hdXRoX21vZGUgPSBzZWMtPmF1dGhfbW9kZTsKLQkJZHByaW50aygiLCAuYXV0aF9tb2RlID0gJWQiLCBzZWMtPmF1dGhfbW9kZSk7Ci0JfQotCWRwcmludGsoIlxuIik7Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEICYmCi0JICAgICFiY20tPmllZWUtPmhvc3RfZW5jcnlwdCkgewotCQlpZiAoc2VjaW5mby0+ZW5hYmxlZCkgewotCQkJLyogdXBsb2FkIFdFUCBrZXlzIHRvIGhhcmR3YXJlICovCi0JCQljaGFyIG51bGxfYWRkcmVzc1s2XSA9IHsgMCB9OwotCQkJdTggYWxnb3JpdGhtID0gMDsKLQkJCWZvciAoa2V5aWR4ID0gMDsga2V5aWR4PFdFUF9LRVlTOyBrZXlpZHgrKykgewotCQkJCWlmICghKHNlYy0+ZmxhZ3MgJiAoMTw8a2V5aWR4KSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCXN3aXRjaCAoc2VjLT5lbmNvZGVfYWxnW2tleWlkeF0pIHsKLQkJCQkJY2FzZSBTRUNfQUxHX05PTkU6IGFsZ29yaXRobSA9IEJDTTQzeHhfU0VDX0FMR09fTk9ORTsgYnJlYWs7Ci0JCQkJCWNhc2UgU0VDX0FMR19XRVA6Ci0JCQkJCQlhbGdvcml0aG0gPSBCQ000M3h4X1NFQ19BTEdPX1dFUDsKLQkJCQkJCWlmIChzZWNpbmZvLT5rZXlfc2l6ZXNba2V5aWR4XSA9PSAxMykKLQkJCQkJCQlhbGdvcml0aG0gPSBCQ000M3h4X1NFQ19BTEdPX1dFUDEwNDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFNFQ19BTEdfVEtJUDoKLQkJCQkJCUZJWE1FKCk7Ci0JCQkJCQlhbGdvcml0aG0gPSBCQ000M3h4X1NFQ19BTEdPX1RLSVA7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBTRUNfQUxHX0NDTVA6Ci0JCQkJCQlGSVhNRSgpOwotCQkJCQkJYWxnb3JpdGhtID0gQkNNNDN4eF9TRUNfQUxHT19BRVM7Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCWFzc2VydCgwKTsKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCQliY200M3h4X2tleV93cml0ZShiY20sIGtleWlkeCwgYWxnb3JpdGhtLCBzZWMtPmtleXNba2V5aWR4XSwgc2VjaW5mby0+a2V5X3NpemVzW2tleWlkeF0sICZudWxsX2FkZHJlc3NbMF0pOwotCQkJCWJjbS0+a2V5W2tleWlkeF0uZW5hYmxlZCA9IDE7Ci0JCQkJYmNtLT5rZXlba2V5aWR4XS5hbGdvcml0aG0gPSBhbGdvcml0aG07Ci0JCQl9Ci0JCX0gZWxzZQotCQkJCWJjbTQzeHhfY2xlYXJfa2V5cyhiY20pOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLX0KLQotLyogaGFyZF9zdGFydF94bWl0KCkgY2FsbGJhY2sgaW4gc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKi8KLXN0YXRpYyBpbnQgYmNtNDN4eF9pZWVlODAyMTFfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsCi0JCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJCSAgICAgaW50IHByaSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpa2VseShiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkpCi0JCWVyciA9IGJjbTQzeHhfdHgoYmNtLCB0eGIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCWlmICh1bmxpa2VseShlcnIpKQotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9uZXRfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JYmNtNDN4eF9jb250cm9sbGVyX3Jlc3RhcnQoYmNtLCAiVFggdGltZW91dCIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLX0KLQotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi1zdGF0aWMgdm9pZCBiY200M3h4X25ldF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKQotCQliY200M3h4X2ludGVycnVwdF9oYW5kbGVyKGJjbS0+aXJxLCBiY20pOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLwotCi1zdGF0aWMgaW50IGJjbTQzeHhfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCi0JcmV0dXJuIGJjbTQzeHhfaW5pdF9ib2FyZChiY20pOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCWludCBlcnI7Ci0KLQlpZWVlODAyMTFzb2Z0bWFjX3N0b3AobmV0X2Rldik7Ci0JZXJyID0gYmNtNDN4eF9kaXNhYmxlX2ludGVycnVwdHNfc3luYyhiY20pOwotCWFzc2VydCghZXJyKTsKLQliY200M3h4X2ZyZWVfYm9hcmQoYmNtKTsKLQliY200M3h4X2NhbmNlbF93b3JrKGJjbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiY200M3h4X2luaXRfcHJpdmF0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCi17Ci0JYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgQkNNNDN4eF9TVEFUX1VOSU5JVCk7Ci0JYmNtLT5pZWVlID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0JYmNtLT5zb2Z0bWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7Ci0JYmNtLT5zb2Z0bWFjLT5zZXRfY2hhbm5lbCA9IGJjbTQzeHhfaWVlZTgwMjExX3NldF9jaGFuOwotCi0JYmNtLT5pcnFfc2F2ZWRzdGF0ZSA9IEJDTTQzeHhfSVJRX0lOSVRJQUw7Ci0JYmNtLT5tYWNfc3VzcGVuZGVkID0gMTsKLQliY20tPnBjaV9kZXYgPSBwY2lfZGV2OwotCWJjbS0+bmV0X2RldiA9IG5ldF9kZXY7Ci0JYmNtLT5iYWRfZnJhbWVzX3ByZWVtcHQgPSBtb2RwYXJhbV9iYWRfZnJhbWVzX3ByZWVtcHQ7Ci0Jc3Bpbl9sb2NrX2luaXQoJmJjbS0+aXJxX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZiY20tPmxlZHNfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmYmNtLT5tdXRleCk7Ci0JdGFza2xldF9pbml0KCZiY20tPmlzcl90YXNrbGV0LAotCQkgICAgICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSliY200M3h4X2ludGVycnVwdF90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKWJjbSk7Ci0JdGFza2xldF9kaXNhYmxlX25vc3luYygmYmNtLT5pc3JfdGFza2xldCk7Ci0JaWYgKG1vZHBhcmFtX3BpbykKLQkJYmNtLT5fX3VzaW5nX3BpbyA9IDE7Ci0JYmNtLT5ydHNfdGhyZXNob2xkID0gQkNNNDN4eF9ERUZBVUxUX1JUU19USFJFU0hPTEQ7Ci0KLQkvKiBkZWZhdWx0IHRvIHN3IGVuY3J5cHRpb24gZm9yIG5vdyAqLwotCWJjbS0+aWVlZS0+aG9zdF9idWlsZF9pdiA9IDA7Ci0JYmNtLT5pZWVlLT5ob3N0X2VuY3J5cHQgPSAxOwotCWJjbS0+aWVlZS0+aG9zdF9kZWNyeXB0ID0gMTsKLQkKLQliY20tPmllZWUtPml3X21vZGUgPSBCQ000M3h4X0lOSVRJQUxfSVdNT0RFOwotCWJjbS0+aWVlZS0+dHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGJjbTQzeHhfdHhoZHIpOwotCWJjbS0+aWVlZS0+c2V0X3NlY3VyaXR5ID0gYmNtNDN4eF9pZWVlODAyMTFfc2V0X3NlY3VyaXR5OwotCWJjbS0+aWVlZS0+aGFyZF9zdGFydF94bWl0ID0gYmNtNDN4eF9pZWVlODAyMTFfaGFyZF9zdGFydF94bWl0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGJjbTQzeHhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY207Ci0JaW50IGVycjsKLQotI2lmZGVmIERFQlVHX1NJTkdMRV9ERVZJQ0VfT05MWQotCWlmIChzdHJjbXAocGNpX25hbWUocGRldiksIERFQlVHX1NJTkdMRV9ERVZJQ0VfT05MWSkpCi0JCXJldHVybiAtRU5PREVWOwotI2VuZGlmCi0KLQluZXRfZGV2ID0gYWxsb2NfaWVlZTgwMjExc29mdG1hYyhzaXplb2YoKmJjbSkpOwotCWlmICghbmV0X2RldikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIGllZWU4MDIxMSBkZXZpY2UgJXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBpbml0aWFsaXplIHRoZSBuZXRfZGV2aWNlIHN0cnVjdCAqLwotCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsICZwZGV2LT5kZXYpOwotCi0JbmV0X2Rldi0+b3BlbiA9IGJjbTQzeHhfbmV0X29wZW47Ci0JbmV0X2Rldi0+c3RvcCA9IGJjbTQzeHhfbmV0X3N0b3A7Ci0JbmV0X2Rldi0+dHhfdGltZW91dCA9IGJjbTQzeHhfbmV0X3R4X3RpbWVvdXQ7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQluZXRfZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBiY200M3h4X25ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKLQluZXRfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZiY200M3h4X3d4X2hhbmRsZXJzX2RlZjsKLQluZXRfZGV2LT5pcnEgPSBwZGV2LT5pcnE7Ci0JU0VUX0VUSFRPT0xfT1BTKG5ldF9kZXYsICZiY200M3h4X2V0aHRvb2xfb3BzKTsKLQotCS8qIGluaXRpYWxpemUgdGhlIGJjbTQzeHhfcHJpdmF0ZSBzdHJ1Y3QgKi8KLQliY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JbWVtc2V0KGJjbSwgMCwgc2l6ZW9mKCpiY20pKTsKLQllcnIgPSBiY200M3h4X2luaXRfcHJpdmF0ZShiY20sIG5ldF9kZXYsIHBkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldF9kZXYpOwotCi0JZXJyID0gYmNtNDN4eF9hdHRhY2hfYm9hcmQoYmNtKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9mcmVlX25ldGRldjsKLQotCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRfZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCAiCi0JCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfZGV0YWNoX2JvYXJkOwotCX0KLQotCWJjbTQzeHhfZGVidWdmc19hZGRfZGV2aWNlKGJjbSk7Ci0KLQlhc3NlcnQoZXJyID09IDApOwotb3V0OgotCXJldHVybiBlcnI7Ci0KLWVycl9kZXRhY2hfYm9hcmQ6Ci0JYmNtNDN4eF9kZXRhY2hfYm9hcmQoYmNtKTsKLWVycl9mcmVlX25ldGRldjoKLQlmcmVlX2llZWU4MDIxMXNvZnRtYWMobmV0X2Rldik7Ci0JZ290byBvdXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBiY200M3h4X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCi0JYmNtNDN4eF9kZWJ1Z2ZzX3JlbW92ZV9kZXZpY2UoYmNtKTsKLQl1bnJlZ2lzdGVyX25ldGRldihuZXRfZGV2KTsKLQliY200M3h4X2RldGFjaF9ib2FyZChiY20pOwotCWZyZWVfaWVlZTgwMjExc29mdG1hYyhuZXRfZGV2KTsKLX0KLQotLyogSGFyZC1yZXNldCB0aGUgY2hpcC4gRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseS4KLSAqIFVzZSBiY200M3h4X2NvbnRyb2xsZXJfcmVzdGFydCgpCi0gKi8KLXN0YXRpYyB2b2lkIGJjbTQzeHhfY2hpcF9yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiY200M3h4X3ByaXZhdGUsIHJlc3RhcnRfd29yayk7Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5OwotCWludCBlcnIgPSAtRU5PREVWOwotCi0JYmNtNDN4eF9jYW5jZWxfd29yayhiY20pOwotCW11dGV4X2xvY2soJihiY20pLT5tdXRleCk7Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7Ci0JCXBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQkJZXJyID0gYmNtNDN4eF9zZWxlY3Rfd2lyZWxlc3NfY29yZShiY20sIHBoeS0+dHlwZSk7Ci0JCWlmICghZXJyKQotCQkJYmNtNDN4eF9wZXJpb2RpY190YXNrc19zZXR1cChiY20pOwotCX0KLQltdXRleF91bmxvY2soJihiY20pLT5tdXRleCk7Ci0KLQlwcmludGsoS0VSTl9FUlIgUEZYICJDb250cm9sbGVyIHJlc3RhcnQlc1xuIiwKLQkgICAgICAgKGVyciA9PSAwKSA/ICJlZCIgOiAiIGZhaWxlZCIpOwotfQotCi0vKiBIYXJkLXJlc2V0IHRoZSBjaGlwLgotICogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IG9yIHByb2Nlc3MgY29udGV4dC4KLSAqIGJjbS0+aXJxX2xvY2sgbXVzdCBiZSBsb2NrZWQuCi0gKi8KLXZvaWQgYmNtNDN4eF9jb250cm9sbGVyX3Jlc3RhcnQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCBjb25zdCBjaGFyICpyZWFzb24pCi17Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKQotCQlyZXR1cm47Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ29udHJvbGxlciBSRVNFVCAoJXMpIC4uLlxuIiwgcmVhc29uKTsKLQlJTklUX1dPUksoJmJjbS0+cmVzdGFydF93b3JrLCBiY200M3h4X2NoaXBfcmVzZXQpOwotCXNjaGVkdWxlX3dvcmsoJmJjbS0+cmVzdGFydF93b3JrKTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IGJjbTQzeHhfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlpbnQgZXJyOwotCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICJTdXNwZW5kaW5nLi4uXG4iKTsKLQotCW5ldGlmX2RldmljZV9kZXRhY2gobmV0X2Rldik7Ci0JYmNtLT53YXNfaW5pdGlhbGl6ZWQgPSAwOwotCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewotCQliY20tPndhc19pbml0aWFsaXplZCA9IDE7Ci0JCWllZWU4MDIxMXNvZnRtYWNfc3RvcChuZXRfZGV2KTsKLQkJZXJyID0gYmNtNDN4eF9kaXNhYmxlX2ludGVycnVwdHNfc3luYyhiY20pOwotCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJZHByaW50ayhLRVJOX0VSUiBQRlggIlN1c3BlbmQgZmFpbGVkLlxuIik7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCQliY20tPmZpcm13YXJlX25vcmVsZWFzZSA9IDE7Ci0JCWJjbTQzeHhfZnJlZV9ib2FyZChiY20pOwotCQliY20tPmZpcm13YXJlX25vcmVsZWFzZSA9IDA7Ci0JfQotCWJjbTQzeHhfY2hpcHNldF9kZXRhY2goYmNtKTsKLQotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQotCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiRGV2aWNlIHN1c3BlbmRlZC5cbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCWludCBlcnIgPSAwOwotCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICJSZXN1bWluZy4uLlxuIik7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIDApOwotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFpbHVyZSB3aXRoIHBjaV9lbmFibGVfZGV2aWNlIVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCi0JYmNtNDN4eF9jaGlwc2V0X2F0dGFjaChiY20pOwotCWlmIChiY20tPndhc19pbml0aWFsaXplZCkKLQkJZXJyID0gYmNtNDN4eF9pbml0X2JvYXJkKGJjbSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJSZXN1bWUgZmFpbGVkIVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCW5ldGlmX2RldmljZV9hdHRhY2gobmV0X2Rldik7Ci0KLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRldmljZSByZXN1bWVkLlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCQkJCS8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmNtNDN4eF9wY2lfZHJpdmVyID0gewotCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCi0JLmlkX3RhYmxlID0gYmNtNDN4eF9wY2lfdGJsLAotCS5wcm9iZSA9IGJjbTQzeHhfaW5pdF9vbmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGJjbTQzeHhfcmVtb3ZlX29uZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPSBiY200M3h4X3N1c3BlbmQsCi0JLnJlc3VtZSA9IGJjbTQzeHhfcmVzdW1lLAotI2VuZGlmCQkJCS8qIENPTkZJR19QTSAqLwotfTsKLQotc3RhdGljIGludCBfX2luaXQgYmNtNDN4eF9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiIGRyaXZlclxuIik7Ci0JYmNtNDN4eF9kZWJ1Z2ZzX2luaXQoKTsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmNtNDN4eF9wY2lfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGJjbTQzeHhfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmNtNDN4eF9wY2lfZHJpdmVyKTsKLQliY200M3h4X2RlYnVnZnNfZXhpdCgpOwotfQotCi1tb2R1bGVfaW5pdChiY200M3h4X2luaXQpCi1tb2R1bGVfZXhpdChiY200M3h4X2V4aXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjZmJlYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0KLSAgQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIKLQotICBDb3B5cmlnaHQgKGMpIDIwMDUgTWFydGluIExhbmdlciA8bWFydGluLWxhbmdlckBnbXguZGU+LAotICAgICAgICAgICAgICAgICAgICAgU3RlZmFubyBCcml2aW8gPHN0M0ByaXNldXAubmV0PgotICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAgICAgICAgICAgICAgICAgICAgIERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgotICAgICAgICAgICAgICAgICAgICAgQW5kcmVhcyBKYWdnaSA8YW5kcmVhcy5qYWdnaUB3YXRlcndhdmUuY2g+Ci0KLSAgU29tZSBwYXJ0cyBvZiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3MjIwMAotICBkcml2ZXIgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdGVldCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0qLwotCi0jaWZuZGVmIEJDTTQzeHhfTUFJTl9IXwotI2RlZmluZSBCQ000M3h4X01BSU5fSF8KLQotI2luY2x1ZGUgImJjbTQzeHguaCIKLQotI2RlZmluZSBQNERfQllUM1MobWFnaWMsIG5yX2J5dGVzKQl1OCBfX3A0ZGRpbmcjI21hZ2ljW25yX2J5dGVzXQotI2RlZmluZSBQNERfQllURVMobGluZSwgbnJfYnl0ZXMpCVA0RF9CWVQzUyhsaW5lLCBucl9ieXRlcykKLS8qIE1hZ2ljIGhlbHBlciBtYWNybyB0byBwYWQgc3RydWN0dXJlcy4gSWdub3JlIHRob3NlIGFib3ZlLiBJdCdzIG1hZ2ljLiAqLwotI2RlZmluZSBQQURfQllURVMobnJfYnl0ZXMpCQlQNERfQllURVMoIF9fTElORV9fICwgKG5yX2J5dGVzKSkKLQotCi0vKiBMaWdodHdlaWdodCBmdW5jdGlvbiB0byBjb252ZXJ0IGEgZnJlcXVlbmN5IChpbiBNaHopIHRvIGEgY2hhbm5lbCBudW1iZXIuICovCi1zdGF0aWMgaW5saW5lCi11OCBiY200M3h4X2ZyZXFfdG9fY2hhbm5lbF9hKGludCBmcmVxKQotewotCXJldHVybiAoKGZyZXEgLSA1MDAwKSAvIDUpOwotfQotc3RhdGljIGlubGluZQotdTggYmNtNDN4eF9mcmVxX3RvX2NoYW5uZWxfYmcoaW50IGZyZXEpCi17Ci0JdTggY2hhbm5lbDsKLQotCWlmIChmcmVxID09IDI0ODQpCi0JCWNoYW5uZWwgPSAxNDsKLQllbHNlCi0JCWNoYW5uZWwgPSAoZnJlcSAtIDI0MDcpIC8gNTsKLQotCXJldHVybiBjaGFubmVsOwotfQotc3RhdGljIGlubGluZQotdTggYmNtNDN4eF9mcmVxX3RvX2NoYW5uZWwoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJICAgaW50IGZyZXEpCi17Ci0JaWYgKGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSkKLQkJcmV0dXJuIGJjbTQzeHhfZnJlcV90b19jaGFubmVsX2EoZnJlcSk7Ci0JcmV0dXJuIGJjbTQzeHhfZnJlcV90b19jaGFubmVsX2JnKGZyZXEpOwotfQotCi0vKiBMaWdodHdlaWdodCBmdW5jdGlvbiB0byBjb252ZXJ0IGEgY2hhbm5lbCBudW1iZXIgdG8gYSBmcmVxdWVuY3kgKGluIE1oeikuICovCi1zdGF0aWMgaW5saW5lCi1pbnQgYmNtNDN4eF9jaGFubmVsX3RvX2ZyZXFfYSh1OCBjaGFubmVsKQotewotCXJldHVybiAoNTAwMCArICg1ICogY2hhbm5lbCkpOwotfQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfY2hhbm5lbF90b19mcmVxX2JnKHU4IGNoYW5uZWwpCi17Ci0JaW50IGZyZXE7Ci0KLQlpZiAoY2hhbm5lbCA9PSAxNCkKLQkJZnJlcSA9IDI0ODQ7Ci0JZWxzZQotCQlmcmVxID0gMjQwNyArICg1ICogY2hhbm5lbCk7Ci0KLQlyZXR1cm4gZnJlcTsKLX0KLXN0YXRpYyBpbmxpbmUKLWludCBiY200M3h4X2NoYW5uZWxfdG9fZnJlcShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkgICAgdTggY2hhbm5lbCkKLXsKLQlpZiAoYmNtNDN4eF9jdXJyZW50X3BoeShiY20pLT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKQotCQlyZXR1cm4gYmNtNDN4eF9jaGFubmVsX3RvX2ZyZXFfYShjaGFubmVsKTsKLQlyZXR1cm4gYmNtNDN4eF9jaGFubmVsX3RvX2ZyZXFfYmcoY2hhbm5lbCk7Ci19Ci0KLXZvaWQgYmNtNDN4eF90c2ZfcmVhZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHU2NCAqdHNmKTsKLXZvaWQgYmNtNDN4eF90c2Zfd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1NjQgdHNmKTsKLQotdm9pZCBiY200M3h4X3NldF9pd21vZGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJaW50IGl3X21vZGUpOwotCi11MzIgYmNtNDN4eF9zaG1fcmVhZDMyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJICAgICAgIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KTsKLXUxNiBiY200M3h4X3NobV9yZWFkMTYoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkgICAgICAgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpOwotdm9pZCBiY200M3h4X3NobV93cml0ZTMyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCSB1MTYgcm91dGluZywgdTE2IG9mZnNldCwKLQkJCSB1MzIgdmFsdWUpOwotdm9pZCBiY200M3h4X3NobV93cml0ZTE2KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCSB1MTYgcm91dGluZywgdTE2IG9mZnNldCwKLQkJCSB1MTYgdmFsdWUpOwotCi12b2lkIGJjbTQzeHhfZHVtbXlfdHJhbnNtaXNzaW9uKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci0KLWludCBiY200M3h4X3N3aXRjaF9jb3JlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKm5ld19jb3JlKTsKLQotaW50IGJjbTQzeHhfc2VsZWN0X3dpcmVsZXNzX2NvcmUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSBpbnQgcGh5dHlwZSk7Ci0KLXZvaWQgYmNtNDN4eF93aXJlbGVzc19jb3JlX3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGNvbm5lY3RfcGh5KTsKLQotdm9pZCBiY200M3h4X21hY19zdXNwZW5kKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci12b2lkIGJjbTQzeHhfbWFjX2VuYWJsZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi12b2lkIGJjbTQzeHhfY2FuY2VsX3dvcmsoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLXZvaWQgYmNtNDN4eF9wZXJpb2RpY190YXNrc19zZXR1cChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi12b2lkIGJjbTQzeHhfY29udHJvbGxlcl9yZXN0YXJ0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgY29uc3QgY2hhciAqcmVhc29uKTsKLQotaW50IGJjbTQzeHhfc3Byb21fcmVhZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiAqc3Byb20pOwotaW50IGJjbTQzeHhfc3Byb21fd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCBjb25zdCB1MTYgKnNwcm9tKTsKLQotI2VuZGlmIC8qIEJDTTQzeHhfTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjNkZTMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNDYgKzAsMCBAQAotLyoKLQotICBCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlcgotCi0gIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4sCi0gICAgICAgICAgICAgICAgICAgICBTdGVmYW5vIEJyaXZpbyA8c3QzQHJpc2V1cC5uZXQ+Ci0gICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gICAgICAgICAgICAgICAgICAgICBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KLQotICBTb21lIHBhcnRzIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHcyMjAwCi0gIGRyaXZlciAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA0IEludGVsIENvcnBvcmF0aW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlICJiY200M3h4LmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9waHkuaCIKLSNpbmNsdWRlICJiY200M3h4X21haW4uaCIKLSNpbmNsdWRlICJiY200M3h4X3JhZGlvLmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9pbHQuaCIKLSNpbmNsdWRlICJiY200M3h4X3Bvd2VyLmgiCi0KLQotc3RhdGljIGNvbnN0IHM4IGJjbTQzeHhfdHNzaTJkYm1fYl90YWJsZVtdID0gewotCTB4NEQsIDB4NEMsIDB4NEIsIDB4NEEsCi0JMHg0QSwgMHg0OSwgMHg0OCwgMHg0NywKLQkweDQ3LCAweDQ2LCAweDQ1LCAweDQ1LAotCTB4NDQsIDB4NDMsIDB4NDIsIDB4NDIsCi0JMHg0MSwgMHg0MCwgMHgzRiwgMHgzRSwKLQkweDNELCAweDNDLCAweDNCLCAweDNBLAotCTB4MzksIDB4MzgsIDB4MzcsIDB4MzYsCi0JMHgzNSwgMHgzNCwgMHgzMiwgMHgzMSwKLQkweDMwLCAweDJGLCAweDJELCAweDJDLAotCTB4MkIsIDB4MjksIDB4MjgsIDB4MjYsCi0JMHgyNSwgMHgyMywgMHgyMSwgMHgxRiwKLQkweDFELCAweDFBLCAweDE3LCAweDE0LAotCTB4MTAsIDB4MEMsIDB4MDYsIDB4MDAsCi0JICAtNywgICAtNywgICAtNywgICAtNywKLQkgIC03LCAgIC03LCAgIC03LCAgIC03LAotCSAgLTcsICAgLTcsICAgLTcsICAgLTcsCi19OwotCi1zdGF0aWMgY29uc3QgczggYmNtNDN4eF90c3NpMmRibV9nX3RhYmxlW10gPSB7Ci0JIDc3LCAgNzcsICA3NywgIDc2LAotCSA3NiwgIDc2LCAgNzUsICA3NSwKLQkgNzQsICA3NCwgIDczLCAgNzMsCi0JIDczLCAgNzIsICA3MiwgIDcxLAotCSA3MSwgIDcwLCAgNzAsICA2OSwKLQkgNjgsICA2OCwgIDY3LCAgNjcsCi0JIDY2LCAgNjUsICA2NSwgIDY0LAotCSA2MywgIDYzLCAgNjIsICA2MSwKLQkgNjAsICA1OSwgIDU4LCAgNTcsCi0JIDU2LCAgNTUsICA1NCwgIDUzLAotCSA1MiwgIDUwLCAgNDksICA0NywKLQkgNDUsICA0MywgIDQwLCAgMzcsCi0JIDMzLCAgMjgsICAyMiwgIDE0LAotCSAgNSwgIC03LCAtMjAsIC0yMCwKLQktMjAsIC0yMCwgLTIwLCAtMjAsCi0JLTIwLCAtMjAsIC0yMCwgLTIwLAotfTsKLQotc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfaW5pdGcoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLQotCi1zdGF0aWMgaW5saW5lCi12b2lkIGJjbTQzeHhfdm9sdW50YXJ5X3ByZWVtcHQodm9pZCkKLXsKLQlhc3NlcnQoIWluX2F0b21pYygpICYmICFpbl9pcnEoKSAmJgotCSAgICAgICAhaW5faW50ZXJydXB0KCkgJiYgIWlycXNfZGlzYWJsZWQoKSk7Ci0jaWZuZGVmIENPTkZJR19QUkVFTVBUCi0JY29uZF9yZXNjaGVkKCk7Ci0jZW5kaWYgLyogQ09ORklHX1BSRUVNUFQgKi8KLX0KLQotdm9pZCBiY200M3h4X3Jhd19waHlfbG9jayhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCi0JYXNzZXJ0KGlycXNfZGlzYWJsZWQoKSk7Ci0JaWYgKGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCkgPT0gMHgwMDAwMDAwMCkgewotCQlwaHktPmlzX2xvY2tlZCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCAzKSB7Ci0JCWJjbTQzeHhfbWFjX3N1c3BlbmQoYmNtKTsKLQkJc3Bpbl9sb2NrKCZwaHktPmxvY2spOwotCX0gZWxzZSB7Ci0JCWlmIChiY20tPmllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9NQVNURVIpCi0JCQliY200M3h4X3Bvd2VyX3NhdmluZ19jdGxfYml0cyhiY20sIC0xLCAxKTsKLQl9Ci0JcGh5LT5pc19sb2NrZWQgPSAxOwotfQotCi12b2lkIGJjbTQzeHhfcmF3X3BoeV91bmxvY2soc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQotCWFzc2VydChpcnFzX2Rpc2FibGVkKCkpOwotCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgMykgewotCQlpZiAocGh5LT5pc19sb2NrZWQpIHsKLQkJCXNwaW5fdW5sb2NrKCZwaHktPmxvY2spOwotCQkJYmNtNDN4eF9tYWNfZW5hYmxlKGJjbSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoYmNtLT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTUFTVEVSKQotCQkJYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMoYmNtLCAtMSwgLTEpOwotCX0KLQlwaHktPmlzX2xvY2tlZCA9IDA7Ci19Ci0KLXUxNiBiY200M3h4X3BoeV9yZWFkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCkKLXsKLQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fUEhZX0NPTlRST0wsIG9mZnNldCk7Ci0JcmV0dXJuIGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX1BIWV9EQVRBKTsKLX0KLQotdm9pZCBiY200M3h4X3BoeV93cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQsIHUxNiB2YWwpCi17Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX1BIWV9DT05UUk9MLCBvZmZzZXQpOwotCW1taW93YigpOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19QSFlfREFUQSwgdmFsKTsKLX0KLQotdm9pZCBiY200M3h4X3BoeV9jYWxpYnJhdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQotCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7IC8qIER1bW15IHJlYWQuICovCi0JaWYgKHBoeS0+Y2FsaWJyYXRlZCkKLQkJcmV0dXJuOwotCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cgJiYgcGh5LT5yZXYgPT0gMSkgewotCQliY200M3h4X3dpcmVsZXNzX2NvcmVfcmVzZXQoYmNtLCAwKTsKLQkJYmNtNDN4eF9waHlfaW5pdGcoYmNtKTsKLQkJYmNtNDN4eF93aXJlbGVzc19jb3JlX3Jlc2V0KGJjbSwgMSk7Ci0JfQotCXBoeS0+Y2FsaWJyYXRlZCA9IDE7Ci19Ci0KLS8qIENvbm5lY3QgdGhlIFBIWSAKLSAqIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9TZXRQSFkKLSAqLwotaW50IGJjbTQzeHhfcGh5X2Nvbm5lY3Qoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCBpbnQgY29ubmVjdCkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JdTMyIGZsYWdzOwotCi0JaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA1KQotCQlnb3RvIG91dDsKLQotCWZsYWdzID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVISUdIKTsKLQlpZiAoY29ubmVjdCkgewotCQlpZiAoIShmbGFncyAmIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9HX1BIWV9BVkFJTCkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJZmxhZ3MgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7Ci0JCWZsYWdzIHw9IEJDTTQzeHhfU0JUTVNUQVRFTE9XX0dfTU9ERV9FTkFCTEU7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCWlmICghKGZsYWdzICYgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0FfUEhZX0FWQUlMKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlmbGFncyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XKTsKLQkJZmxhZ3MgJj0gfkJDTTQzeHhfU0JUTVNUQVRFTE9XX0dfTU9ERV9FTkFCTEU7Ci0JCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVywgZmxhZ3MpOwotCX0KLW91dDoKLQlwaHktPmNvbm5lY3RlZCA9IGNvbm5lY3Q7Ci0JaWYgKGNvbm5lY3QpCi0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiUEhZIGNvbm5lY3RlZFxuIik7Ci0JZWxzZQotCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBIWSBkaXNjb25uZWN0ZWRcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGludGlhbGl6ZSBCIFBIWSBwb3dlciBjb250cm9sCi0gKiBhcyBkZXNjcmliZWQgaW4gaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L0luaXRQb3dlckNvbnRyb2wKLSAqLwotc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfaW5pdF9wY3RsKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBzYXZlZF9iYXR0ID0gMCwgc2F2ZWRfcmF0dCA9IDAsIHNhdmVkX3R4Y3RsMSA9IDA7Ci0JaW50IG11c3RfcmVzZXRfdHhwb3dlciA9IDA7Ci0KLQlhc3NlcnQocGh5LT50eXBlICE9IEJDTTQzeHhfUEhZVFlQRV9BKTsKLQlpZiAoKGJjbS0+Ym9hcmRfdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQlJPQURDT00pICYmCi0JICAgIChiY20tPmJvYXJkX3R5cGUgPT0gMHgwNDE2KSkKLQkJcmV0dXJuOwotCi0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjgsIDB4ODAxOCk7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U2LCBiY200M3h4X3JlYWQxNihiY20sIDB4MDNFNikgJiAweEZGREYpOwotCi0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykgewotCQlpZiAoIXBoeS0+Y29ubmVjdGVkKQotCQkJcmV0dXJuOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ3QSwgMHhDMTExKTsKLQl9Ci0JaWYgKHBoeS0+c2F2ZWRwY3RscmVnICE9IDB4RkZGRikKLQkJcmV0dXJuOwotCi0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQiAmJgotCSAgICBwaHktPnJldiA+PSAyICYmCi0JICAgIHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzYsCi0JCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNzYpIHwgMHgwMDg0KTsKLQl9IGVsc2UgewotCQlzYXZlZF9iYXR0ID0gcmFkaW8tPmJhc2ViYW5kX2F0dGVuOwotCQlzYXZlZF9yYXR0ID0gcmFkaW8tPnJhZGlvX2F0dGVuOwotCQlzYXZlZF90eGN0bDEgPSByYWRpby0+dHhjdGwxOwotCQlpZiAoKHJhZGlvLT5yZXZpc2lvbiA+PSA2KSAmJiAocmFkaW8tPnJldmlzaW9uIDw9IDgpCi0JCSAgICAmJiAvKkZJWE1FOiBpbmNvbXBsZXRlIHNwZWNzIGZvciA1IDwgcmV2aXNpb24gPCA5ICovIDApCi0JCQliY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2JnKGJjbSwgMHhCLCAweDFGLCAwKTsKLQkJZWxzZQotCQkJYmNtNDN4eF9yYWRpb19zZXRfdHhwb3dlcl9iZyhiY20sIDB4QiwgOSwgMCk7Ci0JCW11c3RfcmVzZXRfdHhwb3dlciA9IDE7Ci0JfQotCWJjbTQzeHhfZHVtbXlfdHJhbnNtaXNzaW9uKGJjbSk7Ci0KLQlwaHktPnNhdmVkcGN0bHJlZyA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9HX1BDVEwpOwotCi0JaWYgKG11c3RfcmVzZXRfdHhwb3dlcikKLQkJYmNtNDN4eF9yYWRpb19zZXRfdHhwb3dlcl9iZyhiY20sIHNhdmVkX2JhdHQsIHNhdmVkX3JhdHQsIHNhdmVkX3R4Y3RsMSk7Ci0JZWxzZQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzYsIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDc2KSAmIDB4RkY3Qik7Ci0JYmNtNDN4eF9yYWRpb19jbGVhcl90c3NpKGJjbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcGh5X2FnY3NldHVwKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JdTE2IG9mZnNldCA9IDB4MDAwMDsKLQotCWlmIChwaHktPnJldiA9PSAxKQotCQlvZmZzZXQgPSAweDRDMDA7Ci0KLQliY200M3h4X2lsdF93cml0ZShiY20sIG9mZnNldCwgMHgwMEZFKTsKLQliY200M3h4X2lsdF93cml0ZShiY20sIG9mZnNldCArIDEsIDB4MDAwRCk7Ci0JYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCBvZmZzZXQgKyAyLCAweDAwMTMpOwotCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgb2Zmc2V0ICsgMywgMHgwMDE5KTsKLQotCWlmIChwaHktPnJldiA9PSAxKSB7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxODAwLCAweDI3MTApOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MTgwMSwgMHg5QjgzKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDE4MDIsIDB4OUI4Myk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxODAzLCAweDBGOEQpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ1NSwgMHgwMDA0KTsKLQl9Ci0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBNSwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTUpICYgMHgwMEZGKSB8IDB4NTcwMCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MUEsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDFBKSAmIDB4RkY4MCkgfCAweDAwMEYpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDFBLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQxQSkgJiAweEMwN0YpIHwgMHgyQjgwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4QywgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEMpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKSB8IDB4MDAwOCk7Ci0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBMCwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTApICYgMHhGRkYwKSB8IDB4MDAwOCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTEsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEExKSAmIDB4RjBGRikgfCAweDA2MDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEEyLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBMikgJiAweEYwRkYpIHwgMHgwNzAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBMCwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTApICYgMHhGMEZGKSB8IDB4MDEwMCk7Ci0KLQlpZiAocGh5LT5yZXYgPT0gMSkKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTIsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEEyKSAmIDB4RkZGMCkgfCAweDAwMDcpOwotCi0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0ODgsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDg4KSAmIDB4RkYwMCkgfCAweDAwMUMpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDg4LCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ4OCkgJiAweEMwRkYpIHwgMHgwMjAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ5NiwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OTYpICYgMHhGRjAwKSB8IDB4MDAxQyk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0ODksIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDg5KSAmIDB4RkYwMCkgfCAweDAwMjApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDg5LCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ4OSkgJiAweEMwRkYpIHwgMHgwMjAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4MiwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0ODIpICYgMHhGRjAwKSB8IDB4MDAyRSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0OTYsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDk2KSAmIDB4MDBGRikgfCAweDFBMDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDgxLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ4MSkgJiAweEZGMDApIHwgMHgwMDI4KTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4MSwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0ODEpICYgMHgwMEZGKSB8IDB4MkMwMCk7Ci0KLQlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQzMCwgMHgwOTJCKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MUIsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDFCKSAmIDB4RkZFMSkgfCAweDAwMDIpOwotCX0gZWxzZSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDFCLCBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDFCKSAmIDB4RkZFMSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDFGLCAweDI4N0EpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyMCwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MjApICYgMHhGRkYwKSB8IDB4MDAwNCk7Ci0JfQotCi0JaWYgKHBoeS0+cmV2ID4gMikgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyMiwgMHgyODdBKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MjAsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDIwKQotCQkJCSAgJiAweDBGRkYpIHwgMHgzMDAwKTsKLQl9Ci0JCQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEE4LCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBOCkgJiAweDgwODApCi0JCQkJCXwgMHg3ODc0KTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4RSwgMHgxQzAwKTsKLQotCWlmIChwaHktPnJldiA9PSAxKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEFCLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBQikKLQkJCQkgICYgMHhGMEZGKSB8IDB4MDYwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDhCLCAweDAwNUUpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4QywgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEMpCi0JCQkJICAmIDB4RkYwMCkgfCAweDAwMUUpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4RCwgMHgwMDAyKTsKLQl9Ci0KLQliY200M3h4X2lsdF93cml0ZShiY20sIG9mZnNldCArIDB4MDgwMCwgMCk7Ci0JYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCBvZmZzZXQgKyAweDA4MDEsIDcpOwotCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgb2Zmc2V0ICsgMHgwODAyLCAxNik7Ci0JYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCBvZmZzZXQgKyAweDA4MDMsIDI4KTsKLQotCWlmIChwaHktPnJldiA+PSA2KSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDI2LCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQyNikKLQkJCQkgICYgMHhGRkZDKSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDI2LCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQyNikKLQkJCQkgICYgMHhFRkZGKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3BoeV9zZXR1cGcoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQl1MTYgaTsKLQotCWFzc2VydChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpOwotCWlmIChwaHktPnJldiA9PSAxKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDA2LCAweDRGMTkpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0dfQ1JTLAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9HX0NSUykKLQkJCQkgICYgMHhGQzNGKSB8IDB4MDM0MCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDJDLCAweDAwNUEpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyNywgMHgwMDFBKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfRklORUZSRVFHX1NJWkU7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHg1ODAwICsgaSwgYmNtNDN4eF9pbHRfZmluZWZyZXFnW2ldKTsKLQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX05PSVNFRzFfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDE4MDAgKyBpLCBiY200M3h4X2lsdF9ub2lzZWcxW2ldKTsKLQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX1JPVE9SX1NJWkU7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlMzIoYmNtLCAweDIwMDAgKyBpLCBiY200M3h4X2lsdF9yb3RvcltpXSk7Ci0JfSBlbHNlIHsKLQkJLyogbnJzc2kgdmFsdWVzIGFyZSBzaWduZWQgNi1iaXQgdmFsdWVzLiBOb3Qgc3VyZSB3aHkgd2Ugd3JpdGUgMHg3NjU0IGhlcmUuLi4gKi8KLQkJYmNtNDN4eF9ucnNzaV9od193cml0ZShiY20sIDB4QkE5OCwgKHMxNikweDc2NTQpOwotCi0JCWlmIChwaHktPnJldiA9PSAyKSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMCwgMHgxODYxKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEMxLCAweDAyNzEpOwotCQl9IGVsc2UgaWYgKHBoeS0+cmV2ID4gMikgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QzAsIDB4MDA5OCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMSwgMHgwMDcwKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEM5LCAweDAwODApOwotCQl9Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDJCLCBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDJCKSB8IDB4ODAwKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHg0MDAwICsgaSwgaSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9OT0lTRUcyX1NJWkU7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxODAwICsgaSwgYmNtNDN4eF9pbHRfbm9pc2VnMltpXSk7Ci0JfQotCQotCWlmIChwaHktPnJldiA8PSAyKQotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfTk9JU0VTQ0FMRUdfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDE0MDAgKyBpLCBiY200M3h4X2lsdF9ub2lzZXNjYWxlZzFbaV0pOwotCWVsc2UgaWYgKChwaHktPnJldiA+PSA3KSAmJiAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ0OSkgJiAweDAyMDApKQotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfTk9JU0VTQ0FMRUdfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDE0MDAgKyBpLCBiY200M3h4X2lsdF9ub2lzZXNjYWxlZzNbaV0pOwotCWVsc2UKLQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX05PSVNFU0NBTEVHX1NJWkU7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxNDAwICsgaSwgYmNtNDN4eF9pbHRfbm9pc2VzY2FsZWcyW2ldKTsKLQkKLQlpZiAocGh5LT5yZXYgPT0gMikKLQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX1NJR01BU1FSX1NJWkU7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHg1MDAwICsgaSwgYmNtNDN4eF9pbHRfc2lnbWFzcXIxW2ldKTsKLQllbHNlIGlmICgocGh5LT5yZXYgPiAyKSAmJiAocGh5LT5yZXYgPD0gOCkpCi0JCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9TSUdNQVNRUl9TSVpFOyBpKyspCi0JCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4NTAwMCArIGksIGJjbTQzeHhfaWx0X3NpZ21hc3FyMltpXSk7Ci0JCi0JaWYgKHBoeS0+cmV2ID09IDEpIHsKLQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX1JFVEFSRF9TSVpFOyBpKyspCi0JCQliY200M3h4X2lsdF93cml0ZTMyKGJjbSwgMHgyNDAwICsgaSwgYmNtNDN4eF9pbHRfcmV0YXJkW2ldKTsKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDU0MDQgKyBpLCAweDAwMjApOwotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDU0MDggKyBpLCAweDAwMjApOwotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDU0MEMgKyBpLCAweDAwMjApOwotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDU0MTAgKyBpLCAweDAwMjApOwotCQl9Ci0JCWJjbTQzeHhfcGh5X2FnY3NldHVwKGJjbSk7Ci0KLQkJaWYgKChiY20tPmJvYXJkX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NKSAmJgotCQkgICAgKGJjbS0+Ym9hcmRfdHlwZSA9PSAweDA0MTYpICYmCi0JCSAgICAoYmNtLT5ib2FyZF9yZXZpc2lvbiA9PSAweDAwMTcpKQotCQkJcmV0dXJuOwotCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHg1MDAxLCAweDAwMDIpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4NTAwMiwgMHgwMDAxKTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDw9IDB4MkY7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxMDAwICsgaSwgMHgwODIwKTsKLQkJYmNtNDN4eF9waHlfYWdjc2V0dXAoYmNtKTsKLQkJYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQwMCk7IC8qIGR1bW15IHJlYWQgKi8KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MDMsIDB4MTAwMCk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzQzAyLCAweDAwMEYpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4M0MwMywgMHgwMDE0KTsKLQotCQlpZiAoKGJjbS0+Ym9hcmRfdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQlJPQURDT00pICYmCi0JCSAgICAoYmNtLT5ib2FyZF90eXBlID09IDB4MDQxNikgJiYKLQkJICAgIChiY20tPmJvYXJkX3JldmlzaW9uID09IDB4MDAxNykpCi0JCQlyZXR1cm47Ci0KLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDA0MDEsIDB4MDAwMik7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwNDAyLCAweDAwMDEpOwotCX0KLX0KLQotLyogSW5pdGlhbGl6ZSB0aGUgbm9pc2VzY2FsZXRhYmxlIGZvciBBUEhZICovCi1zdGF0aWMgdm9pZCBiY200M3h4X3BoeV9pbml0X25vaXNlc2NhbGV0Ymwoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQlpbnQgaTsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfQ1RSTCwgMHgxNDAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgewotCQlpZiAocGh5LT5yZXYgPT0gMikKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfREFUQTEsIDB4Njc2Nyk7Ci0JCWVsc2UKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfREFUQTEsIDB4MjMyMyk7Ci0JfQotCWlmIChwaHktPnJldiA9PSAyKQotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9BX0RBVEExLCAweDY3MDApOwotCWVsc2UKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9JTFRfQV9EQVRBMSwgMHgyMzAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewotCQlpZiAocGh5LT5yZXYgPT0gMikKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfREFUQTEsIDB4Njc2Nyk7Ci0JCWVsc2UKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfREFUQTEsIDB4MjMyMyk7Ci0JfQotCWlmIChwaHktPnJldiA9PSAyKQotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0lMVF9BX0RBVEExLCAweDAwNjcpOwotCWVsc2UKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9JTFRfQV9EQVRBMSwgMHgwMDIzKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfc2V0dXBhKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JdTE2IGk7Ci0KLQlhc3NlcnQocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKTsKLQlzd2l0Y2ggKHBoeS0+cmV2KSB7Ci0JY2FzZSAyOgotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA4RSwgMHgzODAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzUsIDB4MDNGRik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM2LCAweDA0MDApOwotCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzODA3LCAweDAwNTEpOwotCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDFDLCAweDBGRjkpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMCwgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyMCkgJiAweEZGMEYpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4M0MwQywgMHgwN0JGKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDAyLCAweDA3QkYpOwotCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDI0LCAweDQ2ODApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMCwgMHgwMDAzKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMUQsIDB4MEY0MCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDFGLCAweDFDMDApOwotCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJBLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgwNDAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkIsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkIpICYgMHhGQkZGKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwOEUsIDB4NThDMSk7Ci0KLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDA4MDMsIDB4MDAwRik7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwODA0LCAweDAwMUYpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDgwNSwgMHgwMDJBKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDA4MDUsIDB4MDAzMCk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwODA3LCAweDAwM0EpOwotCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwMDAwLCAweDAwMTMpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDAwMSwgMHgwMDEzKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDAwMDIsIDB4MDAxMyk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwMDAzLCAweDAwMTMpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDAwNCwgMHgwMDE1KTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDAwMDUsIDB4MDAxNSk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwMDA2LCAweDAwMTkpOwotCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwNDA0LCAweDAwMDMpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDQwNSwgMHgwMDAzKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDA0MDYsIDB4MDAwNyk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4NDAwMCArIGksICgweDggKyBpKSAmIDB4MDAwRik7Ci0KLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDMwMDMsIDB4MTA0NCk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzMDA0LCAweDcyMDEpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MzAwNiwgMHgwMDQwKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDMwMDEsIChiY200M3h4X2lsdF9yZWFkKGJjbSwgMHgzMDAxKSAmIDB4MDAxMCkgfCAweDAwMDgpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9GSU5FRlJFUUFfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDU4MDAgKyBpLCBiY200M3h4X2lsdF9maW5lZnJlcWFbaV0pOwotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfTk9JU0VBMl9TSVpFOyBpKyspCi0JCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MTgwMCArIGksIGJjbTQzeHhfaWx0X25vaXNlYTJbaV0pOwotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfUk9UT1JfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUzMihiY20sIDB4MjAwMCArIGksIGJjbTQzeHhfaWx0X3JvdG9yW2ldKTsKLQkJYmNtNDN4eF9waHlfaW5pdF9ub2lzZXNjYWxldGJsKGJjbSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9SRVRBUkRfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUzMihiY20sIDB4MjQwMCArIGksIGJjbTQzeHhfaWx0X3JldGFyZFtpXSk7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCi0JCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4NDAwMCArIGksIGkpOwotCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzODA3LCAweDAwNTEpOwotCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDFDLCAweDBGRjkpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMCwgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyMCkgJiAweEZGMEYpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDIsIDB4MDdCRik7Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjQsIDB4NDY4MCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDIwLCAweDAwMDMpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxRCwgMHgwRjQwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMUYsIDB4MUMwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJBLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgwNDAwKTsKLQotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MzAwMSwgKGJjbTQzeHhfaWx0X3JlYWQoYmNtLCAweDMwMDEpICYgMHgwMDEwKSB8IDB4MDAwOCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9OT0lTRUEzX1NJWkU7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxODAwICsgaSwgYmNtNDN4eF9pbHRfbm9pc2VhM1tpXSk7Ci0JCWJjbTQzeHhfcGh5X2luaXRfbm9pc2VzY2FsZXRibChiY20pOwotCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfU0lHTUFTUVJfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDUwMDAgKyBpLCBiY200M3h4X2lsdF9zaWdtYXNxcjFbaV0pOwotCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDAzLCAweDE4MDgpOwotCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwODAzLCAweDAwMEYpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDgwNCwgMHgwMDFGKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDA4MDUsIDB4MDAyQSk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwODA1LCAweDAwMzApOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDgwNywgMHgwMDNBKTsKLQotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDAwMCwgMHgwMDEzKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDAwMDEsIDB4MDAxMyk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwMDAyLCAweDAwMTMpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDAwMywgMHgwMDEzKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDAwMDQsIDB4MDAxNSk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwMDA1LCAweDAwMTUpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDAwNiwgMHgwMDE5KTsKLQotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MDQwNCwgMHgwMDAzKTsKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDA0MDUsIDB4MDAwMyk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgwNDA2LCAweDAwMDcpOwotCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzQzAyLCAweDAwMEYpOwotCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4M0MwMywgMHgwMDE0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCX0KLX0KLQotLyogSW5pdGlhbGl6ZSBBUEhZLiBUaGlzIGlzIGFsc28gY2FsbGVkIGZvciB0aGUgR1BIWSBpbiBzb21lIGNhc2VzLiAqLwotc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfaW5pdGEoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0JdTE2IHR2YWw7Ci0KLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKSB7Ci0JCWJjbTQzeHhfcGh5X3NldHVwYShiY20pOwotCX0gZWxzZSB7Ci0JCWJjbTQzeHhfcGh5X3NldHVwZyhiY20pOwotCQlpZiAoYmNtLT5zcHJvbS5ib2FyZGZsYWdzICYgQkNNNDN4eF9CRkxfUEFDVFJMKQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0NkUsIDB4MDNDRik7Ci0JCXJldHVybjsKLQl9Ci0KLQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0FfQ1JTLAotCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgQkNNNDN4eF9QSFlfQV9DUlMpICYgMHhGODNDKSB8IDB4MDM0MCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzQsIDB4MDAwMSk7Ci0KLQlUT0RPKCk7Ly9UT0RPOiBSU1NJIEFHQwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfQV9DUlMsCi0JICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0FfQ1JTKSB8ICgxIDw8IDE0KSk7Ci0JYmNtNDN4eF9yYWRpb19pbml0MjA2MChiY20pOwotCi0JaWYgKChiY20tPmJvYXJkX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NKQotCSAgICAmJiAoKGJjbS0+Ym9hcmRfdHlwZSA9PSAweDA0MTYpIHx8IChiY20tPmJvYXJkX3R5cGUgPT0gMHgwNDBBKSkpIHsKLQkJaWYgKHJhZGlvLT5sb2ZjYWwgPT0gMHhGRkZGKSB7Ci0JCQlUT0RPKCk7Ly9UT0RPOiBMT0YgQ2FsCi0JCQliY200M3h4X3JhZGlvX3NldF90eF9pcShiY20pOwotCQl9IGVsc2UKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAxRSwgcmFkaW8tPmxvZmNhbCk7Ci0JfQotCi0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwN0EsIDB4RjExMSk7Ci0KLQlpZiAocGh5LT5zYXZlZHBjdGxyZWcgPT0gMHhGRkZGKSB7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAxOSwgMHgwMDAwKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDE3LCAweDAwMjApOwotCi0JCXR2YWwgPSBiY200M3h4X2lsdF9yZWFkKGJjbSwgMHgzMDAxKTsKLQkJaWYgKHBoeS0+cmV2ID09IDEpIHsKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzMDAxLAotCQkJCQkgIChiY200M3h4X2lsdF9yZWFkKGJjbSwgMHgzMDAxKSAmIDB4RkY4NykKLQkJCQkJICB8IDB4MDA1OCk7Ci0JCX0gZWxzZSB7Ci0JCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MzAwMSwKLQkJCQkJICAoYmNtNDN4eF9pbHRfcmVhZChiY20sIDB4MzAwMSkgJiAweEZGQzMpCi0JCQkJCSAgfCAweDAwMkMpOwotCQl9Ci0JCWJjbTQzeHhfZHVtbXlfdHJhbnNtaXNzaW9uKGJjbSk7Ci0JCXBoeS0+c2F2ZWRwY3RscmVnID0gYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0FfUENUTCk7Ci0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzMDAxLCB0dmFsKTsKLQotCQliY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2EoYmNtLCAweDAwMTgpOwotCX0KLQliY200M3h4X3JhZGlvX2NsZWFyX3Rzc2koYmNtKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfaW5pdGIyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0JdTE2IG9mZnNldCwgdmFsOwotCi0JYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0VDLCAweDNGMjIpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDIwLCAweDMwMUMpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDI2LCAweDAwMDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDMwLCAweDAwQzYpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDg4LCAweDNFMDApOwotCXZhbCA9IDB4M0MzRDsKLQlmb3IgKG9mZnNldCA9IDB4MDA4OTsgb2Zmc2V0IDwgMHgwMEE3OyBvZmZzZXQrKykgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIG9mZnNldCwgdmFsKTsKLQkJdmFsIC09IDB4MDIwMjsKLQl9Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAzRTQsIDB4MzAwMCk7Ci0JaWYgKHJhZGlvLT5jaGFubmVsID09IDB4RkYpCi0JCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIEJDTTQzeHhfUkFESU9fREVGQVVMVF9DSEFOTkVMX0JHLCAwKTsKLQllbHNlCi0JCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIHJhZGlvLT5jaGFubmVsLCAwKTsKLQlpZiAocmFkaW8tPnZlcnNpb24gIT0gMHgyMDUwKSB7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3NSwgMHgwMDgwKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDc5LCAweDAwODEpOwotCX0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTAsIDB4MDAyMCk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUwLCAweDAwMjMpOwotCWlmIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTApIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUwLCAweDAwMjApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA3MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QiwgMHgwMDdCKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVDLCAweDAwQjApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsIDB4MDAwRik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM4LCAweDA2NzcpOwotCQliY200M3h4X3JhZGlvX2luaXQyMDUwKGJjbSk7Ci0JfQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE0LCAweDAwODApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDMyLCAweDAwQ0EpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDMyLCAweDAwQ0MpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM1LCAweDA3QzIpOwotCWJjbTQzeHhfcGh5X2xvX2JfbWVhc3VyZShiY20pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDI2LCAweENDMDApOwotCWlmIChyYWRpby0+dmVyc2lvbiAhPSAweDIwNTApCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDI2LCAweENFMDApOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19DSEFOTkVMX0VYVCwgMHgxMDAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyQSwgMHg4OEEzKTsKLQlpZiAocmFkaW8tPnZlcnNpb24gIT0gMHgyMDUwKQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyQSwgMHg4OEMyKTsKLQliY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2JnKGJjbSwgMHhGRkZGLCAweEZGRkYsIDB4RkZGRik7Ci0JYmNtNDN4eF9waHlfaW5pdF9wY3RsKGJjbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcGh5X2luaXRiNChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBvZmZzZXQsIHZhbDsKLQotCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFQywgMHgzRjIyKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMCwgMHgzMDFDKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyNiwgMHgwMDAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzMCwgMHgwMEM2KTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA4OCwgMHgzRTAwKTsKLQl2YWwgPSAweDNDM0Q7Ci0JZm9yIChvZmZzZXQgPSAweDAwODk7IG9mZnNldCA8IDB4MDBBNzsgb2Zmc2V0KyspIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBvZmZzZXQsIHZhbCk7Ci0JCXZhbCAtPSAweDAyMDI7Ci0JfQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwM0U0LCAweDMwMDApOwotCWlmIChyYWRpby0+Y2hhbm5lbCA9PSAweEZGKQotCQliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCBCQ000M3h4X1JBRElPX0RFRkFVTFRfQ0hBTk5FTF9CRywgMCk7Ci0JZWxzZQotCQliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCByYWRpby0+Y2hhbm5lbCwgMCk7Ci0JaWYgKHJhZGlvLT52ZXJzaW9uICE9IDB4MjA1MCkgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzUsIDB4MDA4MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3OSwgMHgwMDgxKTsKLQl9Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUwLCAweDAwMjApOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MCwgMHgwMDIzKTsKLQlpZiAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwKSB7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MCwgMHgwMDIwKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVBLCAweDAwNzApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUIsIDB4MDA3Qik7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QywgMHgwMEIwKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLCAweDAwMEYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzOCwgMHgwNjc3KTsKLQkJYmNtNDN4eF9yYWRpb19pbml0MjA1MChiY20pOwotCX0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNCwgMHgwMDgwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzMiwgMHgwMENBKTsKLQlpZiAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwKQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzMiwgMHgwMEUwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzNSwgMHgwN0MyKTsKLQotCWJjbTQzeHhfcGh5X2xvX2JfbWVhc3VyZShiY20pOwotCi0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjYsIDB4Q0MwMCk7Ci0JaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjYsIDB4Q0UwMCk7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhULCAweDExMDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJBLCAweDg4QTMpOwotCWlmIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTApCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJBLCAweDg4QzIpOwotCWJjbTQzeHhfcmFkaW9fc2V0X3R4cG93ZXJfYmcoYmNtLCAweEZGRkYsIDB4RkZGRiwgMHhGRkZGKTsKLQlpZiAoYmNtLT5zcHJvbS5ib2FyZGZsYWdzICYgQkNNNDN4eF9CRkxfUlNTSSkgewotCQliY200M3h4X2NhbGNfbnJzc2lfc2xvcGUoYmNtKTsKLQkJYmNtNDN4eF9jYWxjX25yc3NpX3RocmVzaG9sZChiY20pOwotCX0KLQliY200M3h4X3BoeV9pbml0X3BjdGwoYmNtKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfaW5pdGI1KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBvZmZzZXQ7Ci0JdTE2IHZhbHVlOwotCXU4IG9sZF9jaGFubmVsOwotCi0JaWYgKHBoeS0+YW5hbG9nID09IDEpCi0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwKLQkJCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkKLQkJCQkgICAgICB8IDB4MDA1MCk7Ci0JaWYgKChiY20tPmJvYXJkX3ZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NKSAmJgotCSAgICAoYmNtLT5ib2FyZF90eXBlICE9IDB4MDQxNikpIHsKLQkJdmFsdWUgPSAweDIxMjA7Ci0JCWZvciAob2Zmc2V0ID0gMHgwMEE4IDsgb2Zmc2V0IDwgMHgwMEM3OyBvZmZzZXQrKykgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBvZmZzZXQsIHZhbHVlKTsKLQkJCXZhbHVlICs9IDB4MDIwMjsKLQkJfQotCX0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzNSwKLQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMzUpICYgMHhGMEZGKQotCQkJICB8IDB4MDcwMCk7Ci0JaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzgsIDB4MDY2Nyk7Ci0KLQlpZiAocGh5LT5jb25uZWN0ZWQpIHsKLQkJaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgewotCQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLAotCQkJCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkKLQkJCQkJICAgICAgfCAweDAwMjApOwotCQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLAotCQkJCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA1MSkKLQkJCQkJICAgICAgfCAweDAwMDQpOwotCQl9Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19QSFlfUkFESU8sIDB4MDAwMCk7Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MDIsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MDIpIHwgMHgwMTAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MkIsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MkIpIHwgMHgyMDAwKTsKLQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxQywgMHgxODZBKTsKLQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxMywgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTMpICYgMHgwMEZGKSB8IDB4MTkwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM1LCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAzNSkgJiAweEZGQzApIHwgMHgwMDY0KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNUQsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDVEKSAmIDB4RkY4MCkgfCAweDAwMEEpOwotCX0KLQotCWlmIChiY20tPmJhZF9mcmFtZXNfcHJlZW1wdCkgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX1JBRElPX0JJVEZJRUxELAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX1JBRElPX0JJVEZJRUxEKSB8ICgxIDw8IDExKSk7Ci0JfQotCi0JaWYgKHBoeS0+YW5hbG9nID09IDEpIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjYsIDB4Q0UwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDIxLCAweDM3NjMpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMiwgMHgxQkMzKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjMsIDB4MDZGOSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDI0LCAweDAzN0UpOwotCX0gZWxzZQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyNiwgMHhDQzAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzMCwgMHgwMEM2KTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRUMsIDB4M0YyMik7Ci0KLQlpZiAocGh5LT5hbmFsb2cgPT0gMSkKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjAsIDB4M0UxQyk7Ci0JZWxzZQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMCwgMHgzMDFDKTsKLQotCWlmIChwaHktPmFuYWxvZyA9PSAwKQotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTQsIDB4MzAwMCk7Ci0KLQlvbGRfY2hhbm5lbCA9IHJhZGlvLT5jaGFubmVsOwotCS8qIEZvcmNlIHRvIGNoYW5uZWwgNywgZXZlbiBpZiBub3Qgc3VwcG9ydGVkLiAqLwotCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIDcsIDApOwotCi0JaWYgKHJhZGlvLT52ZXJzaW9uICE9IDB4MjA1MCkgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzUsIDB4MDA4MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3OSwgMHgwMDgxKTsKLQl9Ci0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTAsIDB4MDAyMCk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUwLCAweDAwMjMpOwotCi0JaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTAsIDB4MDAyMCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QSwgMHgwMDcwKTsKLQl9Ci0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUIsIDB4MDA3Qik7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVDLCAweDAwQjApOwotCi0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLCBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgfCAweDAwMDcpOwotCi0JYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKGJjbSwgb2xkX2NoYW5uZWwsIDApOwotCi0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTQsIDB4MDA4MCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzIsIDB4MDBDQSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIDB4ODhBMyk7Ci0KLQliY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2JnKGJjbSwgMHhGRkZGLCAweEZGRkYsIDB4RkZGRik7Ci0KLQlpZiAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwKQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUQsIDB4MDAwRCk7Ci0KLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTQsIChiY200M3h4X3JlYWQxNihiY20sIDB4MDNFNCkgJiAweEZGQzApIHwgMHgwMDA0KTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfaW5pdGI2KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBvZmZzZXQsIHZhbDsKLQl1OCBvbGRfY2hhbm5lbDsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDNFLCAweDgxN0EpOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwKLQkgICAgICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKSB8IDB4MDA1OCkpOwotCWlmIChyYWRpby0+cmV2aXNpb24gPT0gNCB8fAotCSAgICAgcmFkaW8tPnJldmlzaW9uID09IDUpIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLCAweDAwMzcpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIDB4MDA3MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MywgMHgwMEIzKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDU0LCAweDAwOUIpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA4OCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QiwgMHgwMDg4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVELCAweDAwODgpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUUsIDB4MDA4OCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3RCwgMHgwMDg4KTsKLQkJYmNtNDN4eF9zaG1fd3JpdGUzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkgICAgQkNNNDN4eF9VQ09ERUZMQUdTX09GRlNFVCwKLQkJCQkgICAgKGJjbTQzeHhfc2htX3JlYWQzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkgICAgQkNNNDN4eF9VQ09ERUZMQUdTX09GRlNFVCkKLQkJCQkgICAgfCAweDAwMDAwMjAwKSk7Ci0JfQotCWlmIChyYWRpby0+cmV2aXNpb24gPT0gOCkgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTEsIDB4MDAwMCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwgMHgwMDQwKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUzLCAweDAwQjcpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTQsIDB4MDA5OCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QSwgMHgwMDg4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVCLCAweDAwNkIpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUMsIDB4MDAwRik7Ci0JCWlmIChiY20tPnNwcm9tLmJvYXJkZmxhZ3MgJiAweDgwMDApIHsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1RCwgMHgwMEZBKTsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1RSwgMHgwMEQ4KTsKLQkJfSBlbHNlIHsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1RCwgMHgwMEY1KTsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1RSwgMHgwMEI4KTsKLQkJfQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzMsIDB4MDAwMyk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3RCwgMHgwMEE4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdDLCAweDAwMDEpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0UsIDB4MDAwOCk7Ci0JfQotCXZhbCA9IDB4MUUxRjsKLQlmb3IgKG9mZnNldCA9IDB4MDA4ODsgb2Zmc2V0IDwgMHgwMDk4OyBvZmZzZXQrKykgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIG9mZnNldCwgdmFsKTsKLQkJdmFsIC09IDB4MDIwMjsKLQl9Ci0JdmFsID0gMHgzRTNGOwotCWZvciAob2Zmc2V0ID0gMHgwMDk4OyBvZmZzZXQgPCAweDAwQTg7IG9mZnNldCsrKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgb2Zmc2V0LCB2YWwpOwotCQl2YWwgLT0gMHgwMjAyOwotCX0KLQl2YWwgPSAweDIxMjA7Ci0JZm9yIChvZmZzZXQgPSAweDAwQTg7IG9mZnNldCA8IDB4MDBDODsgb2Zmc2V0KyspIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBvZmZzZXQsICh2YWwgJiAweDNGM0YpKTsKLQkJdmFsICs9IDB4MDIwMjsKLQl9Ci0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCSAgICAgICAgICAgICAgICAgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgfCAweDAwMjApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTEsCi0JCSAgICAgICAgICAgICAgICAgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA1MSkgfCAweDAwMDQpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMiwKLQkJICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMikgfCAweDAxMDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyQiwKLQkJICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQyQikgfCAweDIwMDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4NUIsIDB4MDAwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHg1QywgMHgwMDAwKTsKLQl9Ci0KLQlvbGRfY2hhbm5lbCA9IHJhZGlvLT5jaGFubmVsOwotCWlmIChvbGRfY2hhbm5lbCA+PSA4KQotCQliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCAxLCAwKTsKLQllbHNlCi0JCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIDEzLCAwKTsKLQotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MCwgMHgwMDIwKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTAsIDB4MDAyMyk7Ci0JdWRlbGF5KDQwKTsKLQlpZiAocmFkaW8tPnJldmlzaW9uIDwgNiB8fCByYWRpby0+IHJldmlzaW9uID09IDgpIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdDLCAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0MpCi0JCQkJICAgICAgfCAweDAwMDIpKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUwLCAweDAwMjApOwotCX0KLQlpZiAocmFkaW8tPnJldmlzaW9uIDw9IDIpIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdDLCAweDAwMjApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA3MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QiwgMHgwMDdCKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVDLCAweDAwQjApOwotCX0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JICAgICAgICAgICAgICAgICAgICAgIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgJiAweDAwRjgpIHwgMHgwMDA3KTsKLQotCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIG9sZF9jaGFubmVsLCAwKTsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE0LCAweDAyMDApOwotCWlmIChyYWRpby0+cmV2aXNpb24gPj0gNikKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIDB4ODhDMik7Ci0JZWxzZQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyQSwgMHg4QUMwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzOCwgMHgwNjY4KTsKLQliY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2JnKGJjbSwgMHhGRkZGLCAweEZGRkYsIDB4RkZGRik7Ci0JaWYgKHJhZGlvLT5yZXZpc2lvbiA8PSA1KQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1RCwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNUQpCi0JCQkgICAgICAgICAgJiAweEZGODApIHwgMHgwMDAzKTsKLQlpZiAocmFkaW8tPnJldmlzaW9uIDw9IDIpCi0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1RCwgMHgwMDBEKTsKLQkKLQlpZiAocGh5LT5hbmFsb2cgPT0gNCl7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFNCwgMHgwMDA5KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDYxLCBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHg2MSkgJiAweEZGRik7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDIsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDAyKSAmIDB4RkZDMCkgfCAweDAwMDQpOwotCX0KLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HKQotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIDB4MCk7Ci0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQikgewotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIDB4ODE0MCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE2LCAweDA0MTApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNywgMHgwODIwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNjIsIDB4MDAwNyk7Ci0JCWJjbTQzeHhfcmFkaW9faW5pdDIwNTAoYmNtKTsKLQkJYmNtNDN4eF9waHlfbG9fZ19tZWFzdXJlKGJjbSk7Ci0JCWlmIChiY20tPnNwcm9tLmJvYXJkZmxhZ3MgJiBCQ000M3h4X0JGTF9SU1NJKSB7Ci0JCQliY200M3h4X2NhbGNfbnJzc2lfc2xvcGUoYmNtKTsKLQkJCWJjbTQzeHhfY2FsY19ucnNzaV90aHJlc2hvbGQoYmNtKTsKLQkJfQotCQliY200M3h4X3BoeV9pbml0X3BjdGwoYmNtKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfY2FsY19sb29wYmFja19nYWluKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBiYWNrdXBfcGh5WzE1XSA9IHswfTsKLQl1MTYgYmFja3VwX3JhZGlvWzNdOwotCXUxNiBiYWNrdXBfYmJhbmQ7Ci0JdTE2IGk7Ci0JdTE2IGxvb3AxX2NudCwgbG9vcDFfZG9uZSwgbG9vcDFfb21pdHRlZDsKLQl1MTYgbG9vcDJfZG9uZTsKLQotCWJhY2t1cF9waHlbMF0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDI5KTsKLQliYWNrdXBfcGh5WzFdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAwMSk7Ci0JYmFja3VwX3BoeVsyXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTEpOwotCWJhY2t1cF9waHlbM10gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKTsKLQlpZiAocGh5LT5yZXYgIT0gMSkgewotCQliYWNrdXBfcGh5WzRdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxNCk7Ci0JCWJhY2t1cF9waHlbNV0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODE1KTsKLQl9Ci0JYmFja3VwX3BoeVs2XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNUEpOwotCWJhY2t1cF9waHlbN10gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDU5KTsKLQliYWNrdXBfcGh5WzhdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA1OCk7Ci0JYmFja3VwX3BoeVs5XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMEEpOwotCWJhY2t1cF9waHlbMTBdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAwMyk7Ci0JYmFja3VwX3BoeVsxMV0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODBGKTsKLQliYWNrdXBfcGh5WzEyXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTApOwotCWJhY2t1cF9waHlbMTNdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyQik7Ci0JYmFja3VwX3BoeVsxNF0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDE1KTsKLQliY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDJEKTsgLyogZHVtbXkgcmVhZCAqLwotCWJhY2t1cF9iYmFuZCA9IHJhZGlvLT5iYXNlYmFuZF9hdHRlbjsKLQliYWNrdXBfcmFkaW9bMF0gPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA1Mik7Ci0JYmFja3VwX3JhZGlvWzFdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNDMpOwotCWJhY2t1cF9yYWRpb1syXSA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKTsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDI5LAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDI5KSAmIDB4M0ZGRik7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDEsCi0JCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMDEpICYgMHg4MDAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMSwKLQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMSkgfCAweDAwMDIpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKSAmIDB4RkZGRCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsCi0JCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTEpIHwgMHgwMDAxKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMikgJiAweEZGRkUpOwotCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE0LAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxNCkgfCAweDAwMDEpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNSwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTUpICYgMHhGRkZFKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTQsCi0JCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODE0KSB8IDB4MDAwMik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE1LAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxNSkgJiAweEZGRkQpOwotCX0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMSwKLQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMSkgfCAweDAwMEMpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKSB8IDB4MDAwQyk7Ci0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMSwKLQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTEpCi0JCQkgICAmIDB4RkZDRikgfCAweDAwMzApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMikKLQkJCSAgICYgMHhGRkNGKSB8IDB4MDAxMCk7Ci0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1QSwgMHgwNzgwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OSwgMHhDODEwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OCwgMHgwMDBEKTsKLQlpZiAocGh5LT5hbmFsb2cgPT0gMCkgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAwMywgMHgwMTIyKTsKLQl9IGVsc2UgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAwQSwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMEEpCi0JCQkJICB8IDB4MjAwMCk7Ci0JfQotCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE0LAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxNCkgfCAweDAwMDQpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNSwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTUpICYgMHhGRkZCKTsKLQl9Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDMsCi0JCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDAzKQotCQkJICAgJiAweEZGOUYpIHwgMHgwMDQwKTsKLQlpZiAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwICYmIHJhZGlvLT5yZXZpc2lvbiA9PSAyKSB7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwgMHgwMDAwKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDQzLAotCQkJCSAgICAgIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA0MykKLQkJCQkgICAgICAgJiAweEZGRjApIHwgMHgwMDA5KTsKLQkJbG9vcDFfY250ID0gOTsKLQl9IGVsc2UgaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSA4KSB7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywgMHgwMDBGKTsKLQkJbG9vcDFfY250ID0gMTU7Ci0JfSBlbHNlCi0JCWxvb3AxX2NudCA9IDA7Ci0KLQliY200M3h4X3BoeV9zZXRfYmFzZWJhbmRfYXR0ZW51YXRpb24oYmNtLCAxMSk7Ci0KLQlpZiAocGh5LT5yZXYgPj0gMykKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MEYsIDB4QzAyMCk7Ci0JZWxzZQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwRiwgMHg4MDIwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMCwgMHgwMDAwKTsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJCLAotCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyQikKLQkJCSAgICYgMHhGRkMwKSB8IDB4MDAwMSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkIsCi0JCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDJCKQotCQkJICAgJiAweEMwRkYpIHwgMHgwODAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMSwKLQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMSkgfCAweDAxMDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKSAmIDB4Q0ZGRik7Ci0JaWYgKGJjbS0+c3Byb20uYm9hcmRmbGFncyAmIEJDTTQzeHhfQkZMX0VYVExOQSkgewotCQlpZiAocGh5LT5yZXYgPj0gNykgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsCi0JCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMSkKLQkJCQkJICB8IDB4MDgwMCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKQotCQkJCQkgIHwgMHg4MDAwKTsKLQkJfQotCX0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkKLQkJCSAgICAgICYgMHgwMEY3KTsKLQotCWZvciAoaSA9IDA7IGkgPCBsb29wMV9jbnQ7IGkrKykgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNDMsIGxvb3AxX2NudCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTIpCi0JCQkJICAgJiAweEYwRkYpIHwgKGkgPDwgOCkpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwKLQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDE1KQotCQkJCSAgICYgMHgwRkZGKSB8IDB4QTAwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTUpCi0JCQkJICAgJiAweDBGRkYpIHwgMHhGMDAwKTsKLQkJdWRlbGF5KDIwKTsKLQkJaWYgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkQpID49IDB4MERGQykKLQkJCWJyZWFrOwotCX0KLQlsb29wMV9kb25lID0gaTsKLQlsb29wMV9vbWl0dGVkID0gbG9vcDFfY250IC0gbG9vcDFfZG9uZTsKLQotCWxvb3AyX2RvbmUgPSAwOwotCWlmIChsb29wMV9kb25lID49IDgpIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsCi0JCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKQotCQkJCSAgfCAweDAwMzApOwotCQlmb3IgKGkgPSBsb29wMV9kb25lIC0gODsgaSA8IDE2OyBpKyspIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKQotCQkJCQkgICAmIDB4RjBGRikgfCAoaSA8PCA4KSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwKLQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAxNSkKLQkJCQkJICAgJiAweDBGRkYpIHwgMHhBMDAwKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LAotCQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDE1KQotCQkJCQkgICAmIDB4MEZGRikgfCAweEYwMDApOwotCQkJdWRlbGF5KDIwKTsKLQkJCWlmIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDJEKSA+PSAweDBERkMpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocGh5LT5yZXYgIT0gMSkgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNCwgYmFja3VwX3BoeVs0XSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE1LCBiYWNrdXBfcGh5WzVdKTsKLQl9Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNUEsIGJhY2t1cF9waHlbNl0pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU5LCBiYWNrdXBfcGh5WzddKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OCwgYmFja3VwX3BoeVs4XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMEEsIGJhY2t1cF9waHlbOV0pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDAzLCBiYWNrdXBfcGh5WzEwXSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MEYsIGJhY2t1cF9waHlbMTFdKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMCwgYmFja3VwX3BoeVsxMl0pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJCLCBiYWNrdXBfcGh5WzEzXSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIGJhY2t1cF9waHlbMTRdKTsKLQotCWJjbTQzeHhfcGh5X3NldF9iYXNlYmFuZF9hdHRlbnVhdGlvbihiY20sIGJhY2t1cF9iYmFuZCk7Ci0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIGJhY2t1cF9yYWRpb1swXSk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDQzLCBiYWNrdXBfcmFkaW9bMV0pOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwgYmFja3VwX3JhZGlvWzJdKTsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLCBiYWNrdXBfcGh5WzJdIHwgMHgwMDAzKTsKLQl1ZGVsYXkoMTApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLCBiYWNrdXBfcGh5WzJdKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwgYmFja3VwX3BoeVszXSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MjksIGJhY2t1cF9waHlbMF0pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDAxLCBiYWNrdXBfcGh5WzFdKTsKLQotCXBoeS0+bG9vcGJhY2tfZ2FpblswXSA9ICgobG9vcDFfZG9uZSAqIDYpIC0gKGxvb3AxX29taXR0ZWQgKiA0KSkgLSAxMTsKLQlwaHktPmxvb3BiYWNrX2dhaW5bMV0gPSAoMjQgLSAoMyAqIGxvb3AyX2RvbmUpKSAqIDI7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcGh5X2luaXRnKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiB0bXA7Ci0KLQlpZiAocGh5LT5yZXYgPT0gMSkKLQkJYmNtNDN4eF9waHlfaW5pdGI1KGJjbSk7Ci0JZWxzZQotCQliY200M3h4X3BoeV9pbml0YjYoYmNtKTsKLQlpZiAocGh5LT5yZXYgPj0gMiB8fCBwaHktPmNvbm5lY3RlZCkKLQkJYmNtNDN4eF9waHlfaW5pdGEoYmNtKTsKLQotCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE0LCAweDAwMDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNSwgMHgwMDAwKTsKLQl9Ci0JaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsIDB4MDAwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweDAwQzApOwotCX0KLQlpZiAocGh5LT5yZXYgPiA1KSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLCAweDA0MDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHgwMEMwKTsKLQl9Ci0JaWYgKHBoeS0+cmV2ID49IDIgJiYgcGh5LT5jb25uZWN0ZWQpIHsKLQkJdG1wID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQwMCkgJiAweEZGOwotCQlpZiAodG1wID09MyB8fCB0bXAgPT0gNSkgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QzIsIDB4MTgxNik7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMywgMHg4MDA2KTsKLQkJCWlmICh0bXAgPT0gNSkgewotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNENDLAotCQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRDQykKLQkJCQkJCSAgICYgMHgwMEZGKSB8IDB4MUYwMCk7Ci0JCQl9Ci0JCX0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0N0UsIDB4MDA3OCk7Ci0JfQotCWlmIChyYWRpby0+cmV2aXNpb24gPT0gOCkgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMSwgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMSkgfCAweDAwODApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQzRSwgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQzRSkgfCAweDAwMDQpOwotCX0KLQlpZiAocGh5LT5yZXYgPj0gMiAmJiBwaHktPmNvbm5lY3RlZCkKLQkJYmNtNDN4eF9jYWxjX2xvb3BiYWNrX2dhaW4oYmNtKTsKLQlpZiAocmFkaW8tPnJldmlzaW9uICE9IDgpIHsKLQkJaWYgKHJhZGlvLT5pbml0dmFsID09IDB4RkZGRikKLQkJCXJhZGlvLT5pbml0dmFsID0gYmNtNDN4eF9yYWRpb19pbml0MjA1MChiY20pOwotCQllbHNlCi0JCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzgsIHJhZGlvLT5pbml0dmFsKTsKLQl9Ci0JaWYgKHJhZGlvLT50eGN0bDIgPT0gMHhGRkZGKSB7Ci0JCWJjbTQzeHhfcGh5X2xvX2dfbWVhc3VyZShiY20pOwotCX0gZWxzZSB7Ci0JCWlmIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTAgJiYgcmFkaW8tPnJldmlzaW9uID09IDgpIHsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwKLQkJCQkJICAgICAgKHJhZGlvLT50eGN0bDEgPDwgNCkgfCByYWRpby0+dHhjdGwyKTsKLQkJfSBlbHNlIHsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwKLQkJCQkJICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDUyKQotCQkJCQkgICAgICAgJiAweEZGRjApIHwgcmFkaW8tPnR4Y3RsMSk7Ci0JCX0KLQkJaWYgKHBoeS0+cmV2ID49IDYpIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM2LAotCQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDM2KQotCQkJCQkgICAmIDB4MEZGRikgfCAocmFkaW8tPnR4Y3RsMiA8PCAxMikpOwotCQl9Ci0JCWlmIChiY20tPnNwcm9tLmJvYXJkZmxhZ3MgJiBCQ000M3h4X0JGTF9QQUNUUkwpCi0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyRSwgMHg4MDc1KTsKLQkJZWxzZQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkUsIDB4ODA3Rik7Ci0JCWlmIChwaHktPnJldiA8IDIpCi0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyRiwgMHgwMTAxKTsKLQkJZWxzZQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkYsIDB4MDIwMik7Ci0JfQotCWlmIChwaHktPmNvbm5lY3RlZCB8fCBwaHktPnJldiA+PSAyKSB7Ci0JCWJjbTQzeHhfcGh5X2xvX2FkanVzdChiY20sIDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwRiwgMHg4MDc4KTsKLQl9Ci0KLQlpZiAoIShiY20tPnNwcm9tLmJvYXJkZmxhZ3MgJiBCQ000M3h4X0JGTF9SU1NJKSkgewotCQkvKiBUaGUgc3BlY3Mgc3RhdGUgdG8gdXBkYXRlIHRoZSBOUlNTSSBMVCB3aXRoCi0JCSAqIHRoZSB2YWx1ZSAweDdGRkZGRkZGIGhlcmUuIEkgdGhpbmsgdGhhdCBpcyBzb21lIHdlaXJkCi0JCSAqIGNvbXBpbGVyIG9wdGltaXphdGlvbiBpbiB0aGUgb3JpZ2luYWwgZHJpdmVyLgotCQkgKiBFc3NlbnRpYWxseSwgd2hhdCB3ZSBkbyBoZXJlIGlzIHJlc2V0dGluZyBhbGwgTlJTU0kgTFQKLQkJICogZW50cmllcyB0byAtMzIgKHNlZSB0aGUgbGltaXRfdmFsdWUoKSBpbiBucnNzaV9od191cGRhdGUoKSkKLQkJICovCi0JCWJjbTQzeHhfbnJzc2lfaHdfdXBkYXRlKGJjbSwgMHhGRkZGKTsKLQkJYmNtNDN4eF9jYWxjX25yc3NpX3RocmVzaG9sZChiY20pOwotCX0gZWxzZSBpZiAocGh5LT5jb25uZWN0ZWQgfHwgcGh5LT5yZXYgPj0gMikgewotCQlpZiAocmFkaW8tPm5yc3NpWzBdID09IC0xMDAwKSB7Ci0JCQlhc3NlcnQocmFkaW8tPm5yc3NpWzFdID09IC0xMDAwKTsKLQkJCWJjbTQzeHhfY2FsY19ucnNzaV9zbG9wZShiY20pOwotCQl9IGVsc2UgewotCQkJYXNzZXJ0KHJhZGlvLT5ucnNzaVsxXSAhPSAtMTAwMCk7Ci0JCQliY200M3h4X2NhbGNfbnJzc2lfdGhyZXNob2xkKGJjbSk7Ci0JCX0KLQl9Ci0JaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSA4KQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwNSwgMHgzMjMwKTsKLQliY200M3h4X3BoeV9pbml0X3BjdGwoYmNtKTsKLQlpZiAoYmNtLT5jaGlwX2lkID09IDB4NDMwNiAmJiBiY20tPmNoaXBfcGFja2FnZSA9PSAyKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDI5LAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQyOSkgJiAweEJGRkYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMywKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QzMpICYgMHg3RkZGKTsKLQl9Ci19Ci0KLXN0YXRpYyB1MTYgYmNtNDN4eF9waHlfbG9fYl9yMTVfbG9vcChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JaW50IGk7Ci0JdTE2IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKyl7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEFGQTApOwotCQl1ZGVsYXkoMSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEVGQTApOwotCQl1ZGVsYXkoMTApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHhGRkEwKTsKLQkJdWRlbGF5KDQwKTsKLQkJcmV0ICs9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkMpOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JYmNtNDN4eF92b2x1bnRhcnlfcHJlZW1wdCgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBiY200M3h4X3BoeV9sb19iX21lYXN1cmUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JdTE2IHJlZ3N0YWNrWzEyXSA9IHsgMCB9OwotCXUxNiBtbHM7Ci0JdTE2IGZ2YWw7Ci0JaW50IGksIGo7Ci0KLQlyZWdzdGFja1swXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTUpOwotCXJlZ3N0YWNrWzFdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNTIpICYgMHhGRkYwOwotCi0JaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MykgewotCQlyZWdzdGFja1syXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMEEpOwotCQlyZWdzdGFja1szXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkEpOwotCQlyZWdzdGFja1s0XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMzUpOwotCQlyZWdzdGFja1s1XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMDMpOwotCQlyZWdzdGFja1s2XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMDEpOwotCQlyZWdzdGFja1s3XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMzApOwotCi0JCXJlZ3N0YWNrWzhdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNDMpOwotCQlyZWdzdGFja1s5XSA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKTsKLQkJcmVnc3RhY2tbMTBdID0gYmNtNDN4eF9yZWFkMTYoYmNtLCAweDAzRUMpOwotCQlyZWdzdGFja1sxMV0gPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA1MikgJiAweDAwRjA7Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzAsIDB4MDBGRik7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFQywgMHgzRjNGKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzUsIHJlZ3N0YWNrWzRdICYgMHhGRjdGKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLCByZWdzdGFja1s5XSAmIDB4RkZGMCk7Ci0JfQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEIwMDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJCLCAweDAwMDQpOwotCi0JaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MykgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyQiwgMHgwMjAzKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIDB4MDhBMyk7Ci0JfQotCi0JcGh5LT5taW5sb3dzaWdbMF0gPSAweEZGRkY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwgcmVnc3RhY2tbMV0gfCBpKTsKLQkJYmNtNDN4eF9waHlfbG9fYl9yMTVfbG9vcChiY20pOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIHJlZ3N0YWNrWzFdIHwgaSk7Ci0JCW1scyA9IGJjbTQzeHhfcGh5X2xvX2JfcjE1X2xvb3AoYmNtKSAvIDEwOwotCQlpZiAobWxzIDwgcGh5LT5taW5sb3dzaWdbMF0pIHsKLQkJCXBoeS0+bWlubG93c2lnWzBdID0gbWxzOwotCQkJcGh5LT5taW5sb3dzaWdwb3NbMF0gPSBpOwotCQl9Ci0JfQotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwgcmVnc3RhY2tbMV0gfCBwaHktPm1pbmxvd3NpZ3Bvc1swXSk7Ci0KLQlwaHktPm1pbmxvd3NpZ1sxXSA9IDB4RkZGRjsKLQotCWZvciAoaSA9IC00OyBpIDwgNTsgaSArPSAyKSB7Ci0JCWZvciAoaiA9IC00OyBqIDwgNTsgaiArPSAyKSB7Ci0JCQlpZiAoaiA8IDApCi0JCQkJZnZhbCA9ICgweDAxMDAgKiBpKSArIGogKyAweDAxMDA7Ci0JCQllbHNlCi0JCQkJZnZhbCA9ICgweDAxMDAgKiBpKSArIGo7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyRiwgZnZhbCk7Ci0JCQltbHMgPSBiY200M3h4X3BoeV9sb19iX3IxNV9sb29wKGJjbSkgLyAxMDsKLQkJCWlmIChtbHMgPCBwaHktPm1pbmxvd3NpZ1sxXSkgewotCQkJCXBoeS0+bWlubG93c2lnWzFdID0gbWxzOwotCQkJCXBoeS0+bWlubG93c2lncG9zWzFdID0gZnZhbDsKLQkJCX0KLQkJfQotCX0KLQlwaHktPm1pbmxvd3NpZ3Bvc1sxXSArPSAweDAxMDE7Ci0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyRiwgcGh5LT5taW5sb3dzaWdwb3NbMV0pOwotCWlmIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTMpIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMEEsIHJlZ3N0YWNrWzJdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIHJlZ3N0YWNrWzNdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzUsIHJlZ3N0YWNrWzRdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDMsIHJlZ3N0YWNrWzVdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDEsIHJlZ3N0YWNrWzZdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzAsIHJlZ3N0YWNrWzddKTsKLQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNDMsIHJlZ3N0YWNrWzhdKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLCByZWdzdGFja1s5XSk7Ci0KLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUyLAotCQkgICAgICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDUyKSAmIDB4MDAwRikKLQkJCQkgICAgICB8IHJlZ3N0YWNrWzExXSk7Ci0KLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0VDLCByZWdzdGFja1sxMF0pOwotCX0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgcmVnc3RhY2tbMF0pOwotfQotCi1zdGF0aWMgaW5saW5lCi11MTYgYmNtNDN4eF9waHlfbG9fZ19kZXZpYXRpb25fc3VidmFsKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IGNvbnRyb2wpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXUxNiByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAocGh5LT5jb25uZWN0ZWQpIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDE1LCAweEUzMDApOwotCQljb250cm9sIDw8PSA4OwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwgY29udHJvbCB8IDB4MDBCMCk7Ci0JCXVkZWxheSg1KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsIGNvbnRyb2wgfCAweDAwQjIpOwotCQl1ZGVsYXkoMik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLCBjb250cm9sIHwgMHgwMEIzKTsKLQkJdWRlbGF5KDQpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHhGMzAwKTsKLQkJdWRlbGF5KDgpOwotCX0gZWxzZSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCBjb250cm9sIHwgMHhFRkEwKTsKLQkJdWRlbGF5KDIpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgY29udHJvbCB8IDB4RUZFMCk7Ci0JCXVkZWxheSg0KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIGNvbnRyb2wgfCAweEZGRTApOwotCQl1ZGVsYXkoOCk7Ci0JfQotCXJldCA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkQpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQliY200M3h4X3ZvbHVudGFyeV9wcmVlbXB0KCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTMyIGJjbTQzeHhfcGh5X2xvX2dfc2luZ2xlZGV2aWF0aW9uKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IGNvbnRyb2wpCi17Ci0JaW50IGk7Ci0JdTMyIHJldCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlyZXQgKz0gYmNtNDN4eF9waHlfbG9fZ19kZXZpYXRpb25fc3VidmFsKGJjbSwgY29udHJvbCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBXcml0ZSB0aGUgTG9jYWxPc2NpbGxhdG9yIENPTlRST0wgKi8KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9sb193cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCSAgICAgIHN0cnVjdCBiY200M3h4X2xvcGFpciAqcGFpcikKLXsKLQl1MTYgdmFsdWU7Ci0KLQl2YWx1ZSA9ICh1OCkocGFpci0+bG93KTsKLQl2YWx1ZSB8PSAoKHU4KShwYWlyLT5oaWdoKSkgPDwgODsKLQotI2lmZGVmIENPTkZJR19CQ000M1hYX0RFQlVHCi0JLyogU2FuaXR5IGNoZWNrLiAqLwotCWlmIChwYWlyLT5sb3cgPCAtOCB8fCBwYWlyLT5sb3cgPiA4IHx8Ci0JICAgIHBhaXItPmhpZ2ggPCAtOCB8fCBwYWlyLT5oaWdoID4gOCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkgICAgICAgIldBUk5JTkc6IFdyaXRpbmcgaW52YWxpZCBMT3BhaXIgIgotCQkgICAgICAgIihsb3c6ICVkLCBoaWdoOiAlZCwgaW5kZXg6ICVsdSlcbiIsCi0JCSAgICAgICBwYWlyLT5sb3csIHBhaXItPmhpZ2gsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZykocGFpciAtIGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+X2xvX3BhaXJzKSk7Ci0JCWR1bXBfc3RhY2soKTsKLQl9Ci0jZW5kaWYKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfR19MT19DT05UUk9MLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXN0cnVjdCBiY200M3h4X2xvcGFpciAqIGJjbTQzeHhfZmluZF9sb3BhaXIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCQkgICAgdTE2IGJhc2ViYW5kX2F0dGVudWF0aW9uLAotCQkJCQkgICAgdTE2IHJhZGlvX2F0dGVudWF0aW9uLAotCQkJCQkgICAgdTE2IHR4KQotewotCXN0YXRpYyBjb25zdCB1OCBkaWN0WzEwXSA9IHsgMTEsIDEwLCAxMSwgMTIsIDEzLCAxMiwgMTMsIDEyLCAxMywgMTIgfTsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0KLQlpZiAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPiA2KQotCQliYXNlYmFuZF9hdHRlbnVhdGlvbiA9IDY7Ci0JYXNzZXJ0KHJhZGlvX2F0dGVudWF0aW9uIDwgMTApOwotCi0JaWYgKHR4ID09IDMpIHsKLQkJcmV0dXJuIGJjbTQzeHhfZ2V0X2xvcGFpcihwaHksCi0JCQkJCSAgcmFkaW9fYXR0ZW51YXRpb24sCi0JCQkJCSAgYmFzZWJhbmRfYXR0ZW51YXRpb24pOwotCX0KLQlyZXR1cm4gYmNtNDN4eF9nZXRfbG9wYWlyKHBoeSwgZGljdFtyYWRpb19hdHRlbnVhdGlvbl0sIGJhc2ViYW5kX2F0dGVudWF0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZQotc3RydWN0IGJjbTQzeHhfbG9wYWlyICogYmNtNDN4eF9jdXJyZW50X2xvcGFpcihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCi0JcmV0dXJuIGJjbTQzeHhfZmluZF9sb3BhaXIoYmNtLAotCQkJCSAgIHJhZGlvLT5iYXNlYmFuZF9hdHRlbiwKLQkJCQkgICByYWRpby0+cmFkaW9fYXR0ZW4sCi0JCQkJICAgcmFkaW8tPnR4Y3RsMSk7Ci19Ci0KLS8qIEFkanVzdCBCL0cgTE8gKi8KLXZvaWQgYmNtNDN4eF9waHlfbG9fYWRqdXN0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGZpeGVkKQotewotCXN0cnVjdCBiY200M3h4X2xvcGFpciAqcGFpcjsKLQotCWlmIChmaXhlZCkgewotCQkvKiBVc2UgZml4ZWQgdmFsdWVzLiBPbmx5IGZvciBpbml0aWFsaXphdGlvbi4gKi8KLQkJcGFpciA9IGJjbTQzeHhfZmluZF9sb3BhaXIoYmNtLCAyLCAzLCAwKTsKLQl9IGVsc2UKLQkJcGFpciA9IGJjbTQzeHhfY3VycmVudF9sb3BhaXIoYmNtKTsKLQliY200M3h4X2xvX3dyaXRlKGJjbSwgcGFpcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfcGh5X2xvX2dfbWVhc3VyZV90eGN0bDIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQl1MTYgdHhjdGwyID0gMCwgaTsKLQl1MzIgc21hbGxlc3QsIHRtcDsKLQotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwgMHgwMDAwKTsKLQl1ZGVsYXkoMTApOwotCXNtYWxsZXN0ID0gYmNtNDN4eF9waHlfbG9fZ19zaW5nbGVkZXZpYXRpb24oYmNtLCAwKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIGkpOwotCQl1ZGVsYXkoMTApOwotCQl0bXAgPSBiY200M3h4X3BoeV9sb19nX3NpbmdsZWRldmlhdGlvbihiY20sIDApOwotCQlpZiAodG1wIDwgc21hbGxlc3QpIHsKLQkJCXNtYWxsZXN0ID0gdG1wOwotCQkJdHhjdGwyID0gaTsKLQkJfQotCX0KLQlyYWRpby0+dHhjdGwyID0gdHhjdGwyOwotfQotCi1zdGF0aWMKLXZvaWQgYmNtNDN4eF9waHlfbG9fZ19zdGF0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkgICAgY29uc3Qgc3RydWN0IGJjbTQzeHhfbG9wYWlyICppbl9wYWlyLAotCQkJICAgIHN0cnVjdCBiY200M3h4X2xvcGFpciAqb3V0X3BhaXIsCi0JCQkgICAgdTE2IHIyNykKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGJjbTQzeHhfbG9wYWlyIHRyYW5zaXRpb25zWzhdID0gewotCQl7IC5oaWdoID0gIDEsICAubG93ID0gIDEsIH0sCi0JCXsgLmhpZ2ggPSAgMSwgIC5sb3cgPSAgMCwgfSwKLQkJeyAuaGlnaCA9ICAxLCAgLmxvdyA9IC0xLCB9LAotCQl7IC5oaWdoID0gIDAsICAubG93ID0gLTEsIH0sCi0JCXsgLmhpZ2ggPSAtMSwgIC5sb3cgPSAtMSwgfSwKLQkJeyAuaGlnaCA9IC0xLCAgLmxvdyA9ICAwLCB9LAotCQl7IC5oaWdoID0gLTEsICAubG93ID0gIDEsIH0sCi0JCXsgLmhpZ2ggPSAgMCwgIC5sb3cgPSAgMSwgfSwKLQl9OwotCXN0cnVjdCBiY200M3h4X2xvcGFpciBsb3dlc3RfdHJhbnNpdGlvbiA9IHsKLQkJLmhpZ2ggPSBpbl9wYWlyLT5oaWdoLAotCQkubG93ID0gaW5fcGFpci0+bG93LAotCX07Ci0Jc3RydWN0IGJjbTQzeHhfbG9wYWlyIHRtcF9wYWlyOwotCXN0cnVjdCBiY200M3h4X2xvcGFpciB0cmFuc2l0aW9uOwotCWludCBpID0gMTI7Ci0JaW50IHN0YXRlID0gMDsKLQlpbnQgZm91bmRfbG93ZXI7Ci0JaW50IGosIGJlZ2luLCBlbmQ7Ci0JdTMyIGxvd2VzdF9kZXZpYXRpb247Ci0JdTMyIHRtcDsKLQotCS8qIE5vdGUgdGhhdCBpbl9wYWlyIGFuZCBvdXRfcGFpciBjYW4gcG9pbnQgdG8gdGhlIHNhbWUgcGFpci4gQmUgY2FyZWZ1bC4gKi8KLQotCWJjbTQzeHhfbG9fd3JpdGUoYmNtLCAmbG93ZXN0X3RyYW5zaXRpb24pOwotCWxvd2VzdF9kZXZpYXRpb24gPSBiY200M3h4X3BoeV9sb19nX3NpbmdsZWRldmlhdGlvbihiY20sIHIyNyk7Ci0JZG8gewotCQlmb3VuZF9sb3dlciA9IDA7Ci0JCWFzc2VydChzdGF0ZSA+PSAwICYmIHN0YXRlIDw9IDgpOwotCQlpZiAoc3RhdGUgPT0gMCkgewotCQkJYmVnaW4gPSAxOwotCQkJZW5kID0gODsKLQkJfSBlbHNlIGlmIChzdGF0ZSAlIDIgPT0gMCkgewotCQkJYmVnaW4gPSBzdGF0ZSAtIDE7Ci0JCQllbmQgPSBzdGF0ZSArIDE7Ci0JCX0gZWxzZSB7Ci0JCQliZWdpbiA9IHN0YXRlIC0gMjsKLQkJCWVuZCA9IHN0YXRlICsgMjsKLQkJfQotCQlpZiAoYmVnaW4gPCAxKQotCQkJYmVnaW4gKz0gODsKLQkJaWYgKGVuZCA+IDgpCi0JCQllbmQgLT0gODsKLQotCQlqID0gYmVnaW47Ci0JCXRtcF9wYWlyLmhpZ2ggPSBsb3dlc3RfdHJhbnNpdGlvbi5oaWdoOwotCQl0bXBfcGFpci5sb3cgPSBsb3dlc3RfdHJhbnNpdGlvbi5sb3c7Ci0JCXdoaWxlICgxKSB7Ci0JCQlhc3NlcnQoaiA+PSAxICYmIGogPD0gOCk7Ci0JCQl0cmFuc2l0aW9uLmhpZ2ggPSB0bXBfcGFpci5oaWdoICsgdHJhbnNpdGlvbnNbaiAtIDFdLmhpZ2g7Ci0JCQl0cmFuc2l0aW9uLmxvdyA9IHRtcF9wYWlyLmxvdyArIHRyYW5zaXRpb25zW2ogLSAxXS5sb3c7Ci0JCQlpZiAoKGFicyh0cmFuc2l0aW9uLmxvdykgPCA5KSAmJiAoYWJzKHRyYW5zaXRpb24uaGlnaCkgPCA5KSkgewotCQkJCWJjbTQzeHhfbG9fd3JpdGUoYmNtLCAmdHJhbnNpdGlvbik7Ci0JCQkJdG1wID0gYmNtNDN4eF9waHlfbG9fZ19zaW5nbGVkZXZpYXRpb24oYmNtLCByMjcpOwotCQkJCWlmICh0bXAgPCBsb3dlc3RfZGV2aWF0aW9uKSB7Ci0JCQkJCWxvd2VzdF9kZXZpYXRpb24gPSB0bXA7Ci0JCQkJCXN0YXRlID0gajsKLQkJCQkJZm91bmRfbG93ZXIgPSAxOwotCi0JCQkJCWxvd2VzdF90cmFuc2l0aW9uLmhpZ2ggPSB0cmFuc2l0aW9uLmhpZ2g7Ci0JCQkJCWxvd2VzdF90cmFuc2l0aW9uLmxvdyA9IHRyYW5zaXRpb24ubG93OwotCQkJCX0KLQkJCX0KLQkJCWlmIChqID09IGVuZCkKLQkJCQlicmVhazsKLQkJCWlmIChqID09IDgpCi0JCQkJaiA9IDE7Ci0JCQllbHNlCi0JCQkJaisrOwotCQl9Ci0JfSB3aGlsZSAoaS0tICYmIGZvdW5kX2xvd2VyKTsKLQotCW91dF9wYWlyLT5oaWdoID0gbG93ZXN0X3RyYW5zaXRpb24uaGlnaDsKLQlvdXRfcGFpci0+bG93ID0gbG93ZXN0X3RyYW5zaXRpb24ubG93OwotfQotCi0vKiBTZXQgdGhlIGJhc2ViYW5kIGF0dGVudWF0aW9uIHZhbHVlIG9uIGNoaXAuICovCi12b2lkIGJjbTQzeHhfcGh5X3NldF9iYXNlYmFuZF9hdHRlbnVhdGlvbihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJCSAgdTE2IGJhc2ViYW5kX2F0dGVudWF0aW9uKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQl1MTYgdmFsdWU7Ci0KLQlpZiAocGh5LT5hbmFsb2cgPT0gMCkgewotCQl2YWx1ZSA9IChiY200M3h4X3JlYWQxNihiY20sIDB4MDNFNikgJiAweEZGRjApOwotCQl2YWx1ZSB8PSAoYmFzZWJhbmRfYXR0ZW51YXRpb24gJiAweDAwMEYpOwotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIHZhbHVlKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwaHktPmFuYWxvZyA+IDEpIHsKLQkJdmFsdWUgPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDYwKSAmIH4weDAwM0M7Ci0JCXZhbHVlIHw9IChiYXNlYmFuZF9hdHRlbnVhdGlvbiA8PCAyKSAmIDB4MDAzQzsKLQl9IGVsc2UgewotCQl2YWx1ZSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNjApICYgfjB4MDA3ODsKLQkJdmFsdWUgfD0gKGJhc2ViYW5kX2F0dGVudWF0aW9uIDw8IDMpICYgMHgwMDc4OwotCX0KLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA2MCwgdmFsdWUpOwotfQotCi0vKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvTG9jYWxPc2NpbGxhdG9yL01lYXN1cmUgKi8KLXZvaWQgYmNtNDN4eF9waHlfbG9fZ19tZWFzdXJlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdGF0aWMgY29uc3QgdTggcGFpcm9yZGVyWzEwXSA9IHsgMywgMSwgNSwgNywgOSwgMiwgMCwgNCwgNiwgOCB9OwotCWNvbnN0IGludCBpc19pbml0aWFsaXppbmcgPSAoYmNtNDN4eF9zdGF0dXMoYmNtKSA9PSBCQ000M3h4X1NUQVRfSU5JVElBTElaSU5HKTsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBoLCBpLCBvbGRpID0gMCwgajsKLQlzdHJ1Y3QgYmNtNDN4eF9sb3BhaXIgY29udHJvbDsKLQlzdHJ1Y3QgYmNtNDN4eF9sb3BhaXIgKnRtcF9jb250cm9sOwotCXUxNiB0bXA7Ci0JdTE2IHJlZ3N0YWNrWzE2XSA9IHsgMCB9OwotCXU4IG9sZGNoYW5uZWw7Ci0KLQkvL1hYWDogV2hhdCBhcmUgdGhlc2U/Ci0JdTggcjI3ID0gMCwgcjMxOwotCi0Jb2xkY2hhbm5lbCA9IHJhZGlvLT5jaGFubmVsOwotCS8qIFNldHVwICovCi0JaWYgKHBoeS0+Y29ubmVjdGVkKSB7Ci0JCXJlZ3N0YWNrWzBdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0dfQ1JTKTsKLQkJcmVnc3RhY2tbMV0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODAyKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9HX0NSUywgcmVnc3RhY2tbMF0gJiAweDdGRkYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMiwgcmVnc3RhY2tbMV0gJiAweEZGRkMpOwotCX0KLQlyZWdzdGFja1szXSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgMHgwM0UyKTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTIsIHJlZ3N0YWNrWzNdIHwgMHg4MDAwKTsKLQlyZWdzdGFja1s0XSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhUKTsKLQlyZWdzdGFja1s1XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDE1KTsKLQlyZWdzdGFja1s2XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDJBKTsKLQlyZWdzdGFja1s3XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDM1KTsKLQlyZWdzdGFja1s4XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDYwKTsKLQlyZWdzdGFja1s5XSA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHg0Myk7Ci0JcmVnc3RhY2tbMTBdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDdBKTsKLQlyZWdzdGFja1sxMV0gPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4NTIpOwotCWlmIChwaHktPmNvbm5lY3RlZCkgewotCQlyZWdzdGFja1sxMl0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODExKTsKLQkJcmVnc3RhY2tbMTNdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMik7Ci0JCXJlZ3N0YWNrWzE0XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTQpOwotCQlyZWdzdGFja1sxNV0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODE1KTsKLQl9Ci0JYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKGJjbSwgNiwgMCk7Ci0JaWYgKHBoeS0+Y29ubmVjdGVkKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMsIHJlZ3N0YWNrWzBdICYgMHg3RkZGKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MDIsIHJlZ3N0YWNrWzFdICYgMHhGRkZDKTsKLQkJYmNtNDN4eF9kdW1teV90cmFuc21pc3Npb24oYmNtKTsKLQl9Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDQzLCAweDAwMDYpOwotCi0JYmNtNDN4eF9waHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGJjbSwgMik7Ci0KLQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQsIDB4MDAwMCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkUsIDB4MDA3Rik7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MEYsIDB4MDA3OCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzUsIHJlZ3N0YWNrWzddICYgfigxIDw8IDcpKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsIHJlZ3N0YWNrWzEwXSAmIDB4RkZGMCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkIsIDB4MDIwMyk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIDB4MDhBMyk7Ci0JaWYgKHBoeS0+Y29ubmVjdGVkKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE0LCByZWdzdGFja1sxNF0gfCAweDAwMDMpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNSwgcmVnc3RhY2tbMTVdICYgMHhGRkZDKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsIDB4MDFCMyk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLCAweDAwQjIpOwotCX0KLQlpZiAoaXNfaW5pdGlhbGl6aW5nKQotCQliY200M3h4X3BoeV9sb19nX21lYXN1cmVfdHhjdGwyKGJjbSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MEYsIDB4ODA3OCk7Ci0KLQkvKiBNZWFzdXJlICovCi0JY29udHJvbC5sb3cgPSAwOwotCWNvbnRyb2wuaGlnaCA9IDA7Ci0JZm9yIChoID0gMDsgaCA8IDEwOyBoKyspIHsKLQkJLyogTG9vcCBvdmVyIGVhY2ggcG9zc2libGUgUmFkaW9BdHRlbnVhdGlvbiAoMC05KSAqLwotCQlpID0gcGFpcm9yZGVyW2hdOwotCQlpZiAoaXNfaW5pdGlhbGl6aW5nKSB7Ci0JCQlpZiAoaSA9PSAzKSB7Ci0JCQkJY29udHJvbC5sb3cgPSAwOwotCQkJCWNvbnRyb2wuaGlnaCA9IDA7Ci0JCQl9IGVsc2UgaWYgKCgoaSAlIDIgPT0gMSkgJiYgKG9sZGkgJSAyID09IDEpKSB8fAotCQkJCSAgKChpICUgMiA9PSAwKSAmJiAob2xkaSAlIDIgPT0gMCkpKSB7Ci0JCQkJdG1wX2NvbnRyb2wgPSBiY200M3h4X2dldF9sb3BhaXIocGh5LCBvbGRpLCAwKTsKLQkJCQltZW1jcHkoJmNvbnRyb2wsIHRtcF9jb250cm9sLCBzaXplb2YoY29udHJvbCkpOwotCQkJfSBlbHNlIHsKLQkJCQl0bXBfY29udHJvbCA9IGJjbTQzeHhfZ2V0X2xvcGFpcihwaHksIDMsIDApOwotCQkJCW1lbWNweSgmY29udHJvbCwgdG1wX2NvbnRyb2wsIHNpemVvZihjb250cm9sKSk7Ci0JCQl9Ci0JCX0KLQkJLyogTG9vcCBvdmVyIGVhY2ggcG9zc2libGUgQmFzZWJhbmRBdHRlbnVhdGlvbi8yICovCi0JCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLQkJCWlmIChpc19pbml0aWFsaXppbmcpIHsKLQkJCQl0bXAgPSBpICogMiArIGo7Ci0JCQkJcjI3ID0gMDsKLQkJCQlyMzEgPSAwOwotCQkJCWlmICh0bXAgPiAxNCkgewotCQkJCQlyMzEgPSAxOwotCQkJCQlpZiAodG1wID4gMTcpCi0JCQkJCQlyMjcgPSAxOwotCQkJCQlpZiAodG1wID4gMTkpCi0JCQkJCQlyMjcgPSAyOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJdG1wX2NvbnRyb2wgPSBiY200M3h4X2dldF9sb3BhaXIocGh5LCBpLCBqICogMik7Ci0JCQkJaWYgKCF0bXBfY29udHJvbC0+dXNlZCkKLQkJCQkJY29udGludWU7Ci0JCQkJbWVtY3B5KCZjb250cm9sLCB0bXBfY29udHJvbCwgc2l6ZW9mKGNvbnRyb2wpKTsKLQkJCQlyMjcgPSAzOwotCQkJCXIzMSA9IDA7Ci0JCQl9Ci0JCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDQzLCBpKTsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4NTIsIHJhZGlvLT50eGN0bDIpOwotCQkJdWRlbGF5KDEwKTsKLQkJCWJjbTQzeHhfdm9sdW50YXJ5X3ByZWVtcHQoKTsKLQotCQkJYmNtNDN4eF9waHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGJjbSwgaiAqIDIpOwotCi0JCQl0bXAgPSAocmVnc3RhY2tbMTBdICYgMHhGRkYwKTsKLQkJCWlmIChyMzEpCi0JCQkJdG1wIHw9IDB4MDAwODsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwgdG1wKTsKLQotCQkJdG1wX2NvbnRyb2wgPSBiY200M3h4X2dldF9sb3BhaXIocGh5LCBpLCBqICogMik7Ci0JCQliY200M3h4X3BoeV9sb19nX3N0YXRlKGJjbSwgJmNvbnRyb2wsIHRtcF9jb250cm9sLCByMjcpOwotCQl9Ci0JCW9sZGkgPSBpOwotCX0KLQkvKiBMb29wIG92ZXIgZWFjaCBwb3NzaWJsZSBSYWRpb0F0dGVudWF0aW9uICgxMC0xMykgKi8KLQlmb3IgKGkgPSAxMDsgaSA8IDE0OyBpKyspIHsKLQkJLyogTG9vcCBvdmVyIGVhY2ggcG9zc2libGUgQmFzZWJhbmRBdHRlbnVhdGlvbi8yICovCi0JCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLQkJCWlmIChpc19pbml0aWFsaXppbmcpIHsKLQkJCQl0bXBfY29udHJvbCA9IGJjbTQzeHhfZ2V0X2xvcGFpcihwaHksIGkgLSA5LCBqICogMik7Ci0JCQkJbWVtY3B5KCZjb250cm9sLCB0bXBfY29udHJvbCwgc2l6ZW9mKGNvbnRyb2wpKTsKLQkJCQl0bXAgPSAoaSAtIDkpICogMiArIGogLSA1Oy8vRklYTUU6IFRoaXMgaXMgd3JvbmcsIGFzIHRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50IGNhbiBuZXZlciB0cmlnZ2VyLgotCQkJCXIyNyA9IDA7Ci0JCQkJcjMxID0gMDsKLQkJCQlpZiAodG1wID4gMTQpIHsKLQkJCQkJcjMxID0gMTsKLQkJCQkJaWYgKHRtcCA+IDE3KQotCQkJCQkJcjI3ID0gMTsKLQkJCQkJaWYgKHRtcCA+IDE5KQotCQkJCQkJcjI3ID0gMjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXRtcF9jb250cm9sID0gYmNtNDN4eF9nZXRfbG9wYWlyKHBoeSwgaSAtIDksIGogKiAyKTsKLQkJCQlpZiAoIXRtcF9jb250cm9sLT51c2VkKQotCQkJCQljb250aW51ZTsKLQkJCQltZW1jcHkoJmNvbnRyb2wsIHRtcF9jb250cm9sLCBzaXplb2YoY29udHJvbCkpOwotCQkJCXIyNyA9IDM7Ci0JCQkJcjMxID0gMDsKLQkJCX0KLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4NDMsIGkgLSA5KTsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4NTIsCi0JCQkJCSAgICAgIHJhZGlvLT50eGN0bDIKLQkJCQkJICAgICAgfCAoMy8qdHhjdGwxKi8gPDwgNCkpOy8vRklYTUU6IHNob3VsZG4ndCB0eGN0bDEgYmUgemVybyBoZXJlIGFuZCAzIGluIHRoZSBsb29wIGFib3ZlPwotCQkJdWRlbGF5KDEwKTsKLQkJCWJjbTQzeHhfdm9sdW50YXJ5X3ByZWVtcHQoKTsKLQotCQkJYmNtNDN4eF9waHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGJjbSwgaiAqIDIpOwotCi0JCQl0bXAgPSAocmVnc3RhY2tbMTBdICYgMHhGRkYwKTsKLQkJCWlmIChyMzEpCi0JCQkJdG1wIHw9IDB4MDAwODsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4N0EsIHRtcCk7Ci0KLQkJCXRtcF9jb250cm9sID0gYmNtNDN4eF9nZXRfbG9wYWlyKHBoeSwgaSwgaiAqIDIpOwotCQkJYmNtNDN4eF9waHlfbG9fZ19zdGF0ZShiY20sICZjb250cm9sLCB0bXBfY29udHJvbCwgcjI3KTsKLQkJfQotCX0KLQotCS8qIFJlc3RvcmF0aW9uICovCi0JaWYgKHBoeS0+Y29ubmVjdGVkKSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEUzMDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwgKHIyNyA8PCA4KSB8IDB4QTApOwotCQl1ZGVsYXkoNSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLCAocjI3IDw8IDgpIHwgMHhBMik7Ci0JCXVkZWxheSgyKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsIChyMjcgPDwgOCkgfCAweEEzKTsKLQkJYmNtNDN4eF92b2x1bnRhcnlfcHJlZW1wdCgpOwotCX0gZWxzZQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgcjI3IHwgMHhFRkEwKTsKLQliY200M3h4X3BoeV9sb19hZGp1c3QoYmNtLCBpc19pbml0aWFsaXppbmcpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJFLCAweDgwN0YpOwotCWlmIChwaHktPmNvbm5lY3RlZCkKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkYsIDB4MDIwMik7Ci0JZWxzZQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyRiwgMHgwMTAxKTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQsIHJlZ3N0YWNrWzRdKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgcmVnc3RhY2tbNV0pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJBLCByZWdzdGFja1s2XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzUsIHJlZ3N0YWNrWzddKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA2MCwgcmVnc3RhY2tbOF0pOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywgcmVnc3RhY2tbOV0pOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwgcmVnc3RhY2tbMTBdKTsKLQlyZWdzdGFja1sxMV0gJj0gMHgwMEYwOwotCXJlZ3N0YWNrWzExXSB8PSAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDUyKSAmIDB4MDAwRik7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHg1MiwgcmVnc3RhY2tbMTFdKTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTIsIHJlZ3N0YWNrWzNdKTsKLQlpZiAocGh5LT5jb25uZWN0ZWQpIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsIHJlZ3N0YWNrWzEyXSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLCByZWdzdGFja1sxM10pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNCwgcmVnc3RhY2tbMTRdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTUsIHJlZ3N0YWNrWzE1XSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMsIHJlZ3N0YWNrWzBdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MDIsIHJlZ3N0YWNrWzFdKTsKLQl9Ci0JYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKGJjbSwgb2xkY2hhbm5lbCwgMSk7Ci0KLSNpZmRlZiBDT05GSUdfQkNNNDNYWF9ERUJVRwotCXsKLQkJLyogU2FuaXR5IGNoZWNrIGZvciBhbGwgbG9wYWlycy4gKi8KLQkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfTE9fQ09VTlQ7IGkrKykgewotCQkJdG1wX2NvbnRyb2wgPSBwaHktPl9sb19wYWlycyArIGk7Ci0JCQlpZiAodG1wX2NvbnRyb2wtPmxvdyA8IC04IHx8IHRtcF9jb250cm9sLT5sb3cgPiA4IHx8Ci0JCQkgICAgdG1wX2NvbnRyb2wtPmhpZ2ggPCAtOCB8fCB0bXBfY29udHJvbC0+aGlnaCA+IDgpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJCSAgICAgICAiV0FSTklORzogSW52YWxpZCBMT3BhaXIgKGxvdzogJWQsIGhpZ2g6ICVkLCBpbmRleDogJWQpXG4iLAotCQkJCSAgICAgICB0bXBfY29udHJvbC0+bG93LCB0bXBfY29udHJvbC0+aGlnaCwgaSk7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYgLyogQ09ORklHX0JDTTQzWFhfREVCVUcgKi8KLX0KLQotc3RhdGljCi12b2lkIGJjbTQzeHhfcGh5X2xvX21hcmtfY3VycmVudF91c2VkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9sb3BhaXIgKnBhaXI7Ci0KLQlwYWlyID0gYmNtNDN4eF9jdXJyZW50X2xvcGFpcihiY20pOwotCXBhaXItPnVzZWQgPSAxOwotfQotCi12b2lkIGJjbTQzeHhfcGh5X2xvX21hcmtfYWxsX3VudXNlZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXN0cnVjdCBiY200M3h4X2xvcGFpciAqcGFpcjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0xPX0NPVU5UOyBpKyspIHsKLQkJcGFpciA9IHBoeS0+X2xvX3BhaXJzICsgaTsKLQkJcGFpci0+dXNlZCA9IDA7Ci0JfQotfQotCi0vKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvRXN0aW1hdGVQb3dlck91dAotICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIFRTU0kgdmFsdWUgdG8gZEJtIGluIFE1LjIKLSAqLwotc3RhdGljIHM4IGJjbTQzeHhfcGh5X2VzdGltYXRlX3Bvd2VyX291dChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHM4IHRzc2kpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXM4IGRibSA9IDA7Ci0JczMyIHRtcDsKLQotCXRtcCA9IHBoeS0+aWRsZV90c3NpOwotCXRtcCArPSB0c3NpOwotCXRtcCAtPSBwaHktPnNhdmVkcGN0bHJlZzsKLQotCXN3aXRjaCAocGh5LT50eXBlKSB7Ci0JCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0E6Ci0JCQl0bXAgKz0gMHg4MDsKLQkJCXRtcCA9IGxpbWl0X3ZhbHVlKHRtcCwgMHgwMCwgMHhGRik7Ci0JCQlkYm0gPSBwaHktPnRzc2kyZGJtW3RtcF07Ci0JCQlUT0RPKCk7IC8vVE9ETzogVGhlcmUncyBhIEZJWE1FIG9uIHRoZSBzcGVjcwotCQkJYnJlYWs7Ci0JCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0I6Ci0JCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0c6Ci0JCQl0bXAgPSBsaW1pdF92YWx1ZSh0bXAsIDB4MDAsIDB4M0YpOwotCQkJZGJtID0gcGh5LT50c3NpMmRibVt0bXBdOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQoMCk7Ci0JfQotCi0JcmV0dXJuIGRibTsKLX0KLQotLyogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1JlY2FsY3VsYXRlVHJhbnNtaXNzaW9uUG93ZXIgKi8KLXZvaWQgYmNtNDN4eF9waHlfeG1pdHBvd2VyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCQotCWlmIChwaHktPnNhdmVkcGN0bHJlZyA9PSAweEZGRkYpCi0JCXJldHVybjsKLQlpZiAoKGJjbS0+Ym9hcmRfdHlwZSA9PSAweDA0MTYpICYmCi0JICAgIChiY20tPmJvYXJkX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NKSkKLQkJcmV0dXJuOwotCQotCXN3aXRjaCAocGh5LT50eXBlKSB7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQTogewotCi0JCVRPRE8oKTsgLy9UT0RPOiBOb3RoaW5nIGZvciBBIFBIWXMgeWV0IDotLwotCi0JCWJyZWFrOwotCX0KLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9COgotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0c6IHsKLQkJdTE2IHRtcDsKLQkJdTE2IHR4cG93ZXI7Ci0JCXM4IHYwLCB2MSwgdjIsIHYzOwotCQlzOCBhdmVyYWdlOwotCQl1OCBtYXhfcHdyOwotCQlzMTYgZGVzaXJlZF9wd3IsIGVzdGltYXRlZF9wd3IsIHB3cl9hZGp1c3Q7Ci0JCXMxNiByYWRpb19hdHRfZGVsdGEsIGJhc2ViYW5kX2F0dF9kZWx0YTsKLQkJczE2IHJhZGlvX2F0dGVudWF0aW9uLCBiYXNlYmFuZF9hdHRlbnVhdGlvbjsKLQkJdW5zaWduZWQgbG9uZyBwaHlsb2NrX2ZsYWdzOwotCi0JCXRtcCA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDU4KTsKLQkJdjAgPSAoczgpKHRtcCAmIDB4MDBGRik7Ci0JCXYxID0gKHM4KSgodG1wICYgMHhGRjAwKSA+PiA4KTsKLQkJdG1wID0gYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwNUEpOwotCQl2MiA9IChzOCkodG1wICYgMHgwMEZGKTsKLQkJdjMgPSAoczgpKCh0bXAgJiAweEZGMDApID4+IDgpOwotCQl0bXAgPSAwOwotCi0JCWlmICh2MCA9PSAweDdGIHx8IHYxID09IDB4N0YgfHwgdjIgPT0gMHg3RiB8fCB2MyA9PSAweDdGKSB7Ci0JCQl0bXAgPSBiY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDA3MCk7Ci0JCQl2MCA9IChzOCkodG1wICYgMHgwMEZGKTsKLQkJCXYxID0gKHM4KSgodG1wICYgMHhGRjAwKSA+PiA4KTsKLQkJCXRtcCA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDcyKTsKLQkJCXYyID0gKHM4KSh0bXAgJiAweDAwRkYpOwotCQkJdjMgPSAoczgpKCh0bXAgJiAweEZGMDApID4+IDgpOwotCQkJaWYgKHYwID09IDB4N0YgfHwgdjEgPT0gMHg3RiB8fCB2MiA9PSAweDdGIHx8IHYzID09IDB4N0YpCi0JCQkJcmV0dXJuOwotCQkJdjAgPSAodjAgKyAweDIwKSAmIDB4M0Y7Ci0JCQl2MSA9ICh2MSArIDB4MjApICYgMHgzRjsKLQkJCXYyID0gKHYyICsgMHgyMCkgJiAweDNGOwotCQkJdjMgPSAodjMgKyAweDIwKSAmIDB4M0Y7Ci0JCQl0bXAgPSAxOwotCQl9Ci0JCWJjbTQzeHhfcmFkaW9fY2xlYXJfdHNzaShiY20pOwotCi0JCWF2ZXJhZ2UgPSAodjAgKyB2MSArIHYyICsgdjMgKyAyKSAvIDQ7Ci0KLQkJaWYgKHRtcCAmJiAoYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwNUUpICYgMHg4KSkKLQkJCWF2ZXJhZ2UgLT0gMTM7Ci0KLQkJZXN0aW1hdGVkX3B3ciA9IGJjbTQzeHhfcGh5X2VzdGltYXRlX3Bvd2VyX291dChiY20sIGF2ZXJhZ2UpOwotCi0JCW1heF9wd3IgPSBiY20tPnNwcm9tLm1heHBvd2VyX2JncGh5OwotCi0JCWlmICgoYmNtLT5zcHJvbS5ib2FyZGZsYWdzICYgQkNNNDN4eF9CRkxfUEFDVFJMKSAmJgotCQkgICAgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykpCi0JCQltYXhfcHdyIC09IDB4MzsKLQotCQkvKlRPRE86Ci0JCW1heF9wd3IgPSBtaW4oUkVHIC0gYmNtLT5zcHJvbS5hbnRlbm5hZ2Fpbl9iZ3BoeSAtIDB4NiwgbWF4X3B3cikKLQkJCXdoZXJlIFJFRyBpcyB0aGUgbWF4IHBvd2VyIGFzIHBlciB0aGUgcmVndWxhdG9yeSBkb21haW4KLQkJKi8KLQotCQlkZXNpcmVkX3B3ciA9IGxpbWl0X3ZhbHVlKHJhZGlvLT50eHBvd2VyX2Rlc2lyZWQsIDAsIG1heF9wd3IpOwotCQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgY3VycmVudCBwb3dlci4gKi8KLQkJcHdyX2FkanVzdCA9IGRlc2lyZWRfcHdyIC0gZXN0aW1hdGVkX3B3cjsKLQkJcmFkaW9fYXR0X2RlbHRhID0gLShwd3JfYWRqdXN0ICsgNykgPj4gMzsKLQkJYmFzZWJhbmRfYXR0X2RlbHRhID0gLShwd3JfYWRqdXN0ID4+IDEpIC0gKDQgKiByYWRpb19hdHRfZGVsdGEpOwotCQlpZiAoKHJhZGlvX2F0dF9kZWx0YSA9PSAwKSAmJiAoYmFzZWJhbmRfYXR0X2RlbHRhID09IDApKSB7Ci0JCQliY200M3h4X3BoeV9sb19tYXJrX2N1cnJlbnRfdXNlZChiY20pOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogQ2FsY3VsYXRlIHRoZSBuZXcgYXR0ZW51YXRpb24gdmFsdWVzLiAqLwotCQliYXNlYmFuZF9hdHRlbnVhdGlvbiA9IHJhZGlvLT5iYXNlYmFuZF9hdHRlbjsKLQkJYmFzZWJhbmRfYXR0ZW51YXRpb24gKz0gYmFzZWJhbmRfYXR0X2RlbHRhOwotCQlyYWRpb19hdHRlbnVhdGlvbiA9IHJhZGlvLT5yYWRpb19hdHRlbjsKLQkJcmFkaW9fYXR0ZW51YXRpb24gKz0gcmFkaW9fYXR0X2RlbHRhOwotCi0JCS8qIEdldCBiYXNlYmFuZCBhbmQgcmFkaW8gYXR0ZW51YXRpb24gdmFsdWVzIGludG8gdGhlaXIgcGVybWl0dGVkIHJhbmdlcy4KLQkJICogYmFzZWJhbmQgMC0xMSwgcmFkaW8gMC05LgotCQkgKiBSYWRpbyBhdHRlbnVhdGlvbiBhZmZlY3RzIHBvd2VyIGxldmVsIDQgdGltZXMgYXMgbXVjaCBhcyBiYXNlYmFuZC4KLQkJICovCi0JCWlmIChyYWRpb19hdHRlbnVhdGlvbiA8IDApIHsKLQkJCWJhc2ViYW5kX2F0dGVudWF0aW9uIC09ICg0ICogLXJhZGlvX2F0dGVudWF0aW9uKTsKLQkJCXJhZGlvX2F0dGVudWF0aW9uID0gMDsKLQkJfSBlbHNlIGlmIChyYWRpb19hdHRlbnVhdGlvbiA+IDkpIHsKLQkJCWJhc2ViYW5kX2F0dGVudWF0aW9uICs9ICg0ICogKHJhZGlvX2F0dGVudWF0aW9uIC0gOSkpOwotCQkJcmFkaW9fYXR0ZW51YXRpb24gPSA5OwotCQl9IGVsc2UgewotCQkJd2hpbGUgKGJhc2ViYW5kX2F0dGVudWF0aW9uIDwgMCAmJiByYWRpb19hdHRlbnVhdGlvbiA+IDApIHsKLQkJCQliYXNlYmFuZF9hdHRlbnVhdGlvbiArPSA0OwotCQkJCXJhZGlvX2F0dGVudWF0aW9uLS07Ci0JCQl9Ci0JCQl3aGlsZSAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPiAxMSAmJiByYWRpb19hdHRlbnVhdGlvbiA8IDkpIHsKLQkJCQliYXNlYmFuZF9hdHRlbnVhdGlvbiAtPSA0OwotCQkJCXJhZGlvX2F0dGVudWF0aW9uKys7Ci0JCQl9Ci0JCX0KLQkJYmFzZWJhbmRfYXR0ZW51YXRpb24gPSBsaW1pdF92YWx1ZShiYXNlYmFuZF9hdHRlbnVhdGlvbiwgMCwgMTEpOwotCi0JCXR4cG93ZXIgPSByYWRpby0+dHhjdGwxOwotCQlpZiAoKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgJiYgKHJhZGlvLT5yZXZpc2lvbiA9PSAyKSkgewotCQkJaWYgKHJhZGlvX2F0dGVudWF0aW9uIDw9IDEpIHsKLQkJCQlpZiAodHhwb3dlciA9PSAwKSB7Ci0JCQkJCXR4cG93ZXIgPSAzOwotCQkJCQlyYWRpb19hdHRlbnVhdGlvbiArPSAyOwotCQkJCQliYXNlYmFuZF9hdHRlbnVhdGlvbiArPSAyOwotCQkJCX0gZWxzZSBpZiAoYmNtLT5zcHJvbS5ib2FyZGZsYWdzICYgQkNNNDN4eF9CRkxfUEFDVFJMKSB7Ci0JCQkJCWJhc2ViYW5kX2F0dGVudWF0aW9uICs9IDQgKiAocmFkaW9fYXR0ZW51YXRpb24gLSAyKTsKLQkJCQkJcmFkaW9fYXR0ZW51YXRpb24gPSAyOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAocmFkaW9fYXR0ZW51YXRpb24gPiA0ICYmIHR4cG93ZXIgIT0gMCkgewotCQkJCXR4cG93ZXIgPSAwOwotCQkJCWlmIChiYXNlYmFuZF9hdHRlbnVhdGlvbiA8IDMpIHsKLQkJCQkJcmFkaW9fYXR0ZW51YXRpb24gLT0gMzsKLQkJCQkJYmFzZWJhbmRfYXR0ZW51YXRpb24gKz0gMjsKLQkJCQl9IGVsc2UgewotCQkJCQlyYWRpb19hdHRlbnVhdGlvbiAtPSAyOwotCQkJCQliYXNlYmFuZF9hdHRlbnVhdGlvbiAtPSAyOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyYWRpby0+dHhjdGwxID0gdHhwb3dlcjsKLQkJYmFzZWJhbmRfYXR0ZW51YXRpb24gPSBsaW1pdF92YWx1ZShiYXNlYmFuZF9hdHRlbnVhdGlvbiwgMCwgMTEpOwotCQlyYWRpb19hdHRlbnVhdGlvbiA9IGxpbWl0X3ZhbHVlKHJhZGlvX2F0dGVudWF0aW9uLCAwLCA5KTsKLQotCQliY200M3h4X3BoeV9sb2NrKGJjbSwgcGh5bG9ja19mbGFncyk7Ci0JCWJjbTQzeHhfcmFkaW9fbG9jayhiY20pOwotCQliY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2JnKGJjbSwgYmFzZWJhbmRfYXR0ZW51YXRpb24sCi0JCQkJCSAgICAgcmFkaW9fYXR0ZW51YXRpb24sIHR4cG93ZXIpOwotCQliY200M3h4X3BoeV9sb19tYXJrX2N1cnJlbnRfdXNlZChiY20pOwotCQliY200M3h4X3JhZGlvX3VubG9jayhiY20pOwotCQliY200M3h4X3BoeV91bmxvY2soYmNtLCBwaHlsb2NrX2ZsYWdzKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCWFzc2VydCgwKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXMzMiBiY200M3h4X3Rzc2kyZGJtX2FkKHMzMiBudW0sIHMzMiBkZW4pCi17Ci0JaWYgKG51bSA8IDApCi0JCXJldHVybiBudW0vZGVuOwotCWVsc2UKLQkJcmV0dXJuIChudW0rZGVuLzIpL2RlbjsKLX0KLQotc3RhdGljIGlubGluZQotczggYmNtNDN4eF90c3NpMmRibV9lbnRyeShzOCBlbnRyeSBbXSwgdTggaW5kZXgsIHMxNiBwYWIwLCBzMTYgcGFiMSwgczE2IHBhYjIpCi17Ci0JczMyIG0xLCBtMiwgZiA9IDI1NiwgcSwgZGVsdGE7Ci0JczggaSA9IDA7Ci0JCi0JbTEgPSBiY200M3h4X3Rzc2kyZGJtX2FkKDE2ICogcGFiMCArIGluZGV4ICogcGFiMSwgMzIpOwotCW0yID0gbWF4KGJjbTQzeHhfdHNzaTJkYm1fYWQoMzI3NjggKyBpbmRleCAqIHBhYjIsIDI1NiksIDEpOwotCWRvIHsKLQkJaWYgKGkgPiAxNSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlxID0gYmNtNDN4eF90c3NpMmRibV9hZChmICogNDA5NiAtCi0JCQkJCWJjbTQzeHhfdHNzaTJkYm1fYWQobTIgKiBmLCAxNikgKiBmLCAyMDQ4KTsKLQkJZGVsdGEgPSBhYnMocSAtIGYpOwotCQlmID0gcTsKLQkJaSsrOwotCX0gd2hpbGUgKGRlbHRhID49IDIpOwotCWVudHJ5W2luZGV4XSA9IGxpbWl0X3ZhbHVlKGJjbTQzeHhfdHNzaTJkYm1fYWQobTEgKiBmLCA4MTkyKSwgLTEyNywgMTI4KTsKLQlyZXR1cm4gMDsKLX0KLQotLyogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1RTU0lfdG9fREJNX1RhYmxlICovCi1pbnQgYmNtNDN4eF9waHlfaW5pdF90c3NpMmRibV90YWJsZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQlzMTYgcGFiMCwgcGFiMSwgcGFiMjsKLQl1OCBpZHg7Ci0JczggKmR5bl90c3NpMmRibTsKLQkKLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKSB7Ci0JCXBhYjAgPSAoczE2KShiY20tPnNwcm9tLnBhMWIwKTsKLQkJcGFiMSA9IChzMTYpKGJjbS0+c3Byb20ucGExYjEpOwotCQlwYWIyID0gKHMxNikoYmNtLT5zcHJvbS5wYTFiMik7Ci0JfSBlbHNlIHsKLQkJcGFiMCA9IChzMTYpKGJjbS0+c3Byb20ucGEwYjApOwotCQlwYWIxID0gKHMxNikoYmNtLT5zcHJvbS5wYTBiMSk7Ci0JCXBhYjIgPSAoczE2KShiY20tPnNwcm9tLnBhMGIyKTsKLQl9Ci0KLQlpZiAoKGJjbS0+Y2hpcF9pZCA9PSAweDQzMDEpICYmIChyYWRpby0+dmVyc2lvbiAhPSAweDIwNTApKSB7Ci0JCXBoeS0+aWRsZV90c3NpID0gMHgzNDsKLQkJcGh5LT50c3NpMmRibSA9IGJjbTQzeHhfdHNzaTJkYm1fYl90YWJsZTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHBhYjAgIT0gMCAmJiBwYWIxICE9IDAgJiYgcGFiMiAhPSAwICYmCi0JICAgIHBhYjAgIT0gLTEgJiYgcGFiMSAhPSAtMSAmJiBwYWIyICE9IC0xKSB7Ci0JCS8qIFRoZSBwYWJYIHZhbHVlcyBhcmUgc2V0IGluIFNQUk9NLiBVc2UgdGhlbS4gKi8KLQkJaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSkgewotCQkJaWYgKChzOCliY20tPnNwcm9tLmlkbGVfdHNzaV90Z3RfYXBoeSAhPSAwICYmCi0JCQkgICAgKHM4KWJjbS0+c3Byb20uaWRsZV90c3NpX3RndF9hcGh5ICE9IC0xKQotCQkJCXBoeS0+aWRsZV90c3NpID0gKHM4KShiY20tPnNwcm9tLmlkbGVfdHNzaV90Z3RfYXBoeSk7Ci0JCQllbHNlCi0JCQkJcGh5LT5pZGxlX3Rzc2kgPSA2MjsKLQkJfSBlbHNlIHsKLQkJCWlmICgoczgpYmNtLT5zcHJvbS5pZGxlX3Rzc2lfdGd0X2JncGh5ICE9IDAgJiYKLQkJCSAgICAoczgpYmNtLT5zcHJvbS5pZGxlX3Rzc2lfdGd0X2JncGh5ICE9IC0xKQotCQkJCXBoeS0+aWRsZV90c3NpID0gKHM4KShiY20tPnNwcm9tLmlkbGVfdHNzaV90Z3RfYmdwaHkpOwotCQkJZWxzZQotCQkJCXBoeS0+aWRsZV90c3NpID0gNjI7Ci0JCX0KLQkJZHluX3Rzc2kyZGJtID0ga21hbGxvYyg2NCwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChkeW5fdHNzaTJkYm0gPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSAiCi0JCQkJCSAgICAiZm9yIHRzc2kyZGJtIHRhYmxlXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWZvciAoaWR4ID0gMDsgaWR4IDwgNjQ7IGlkeCsrKQotCQkJaWYgKGJjbTQzeHhfdHNzaTJkYm1fZW50cnkoZHluX3Rzc2kyZGJtLCBpZHgsIHBhYjAsIHBhYjEsIHBhYjIpKSB7Ci0JCQkJcGh5LT50c3NpMmRibSA9IE5VTEw7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IGdlbmVyYXRlICIKLQkJCQkJCSAgICAidHNzaTJkQm0gdGFibGVcbiIpOwotCQkJCWtmcmVlKGR5bl90c3NpMmRibSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCXBoeS0+dHNzaTJkYm0gPSBkeW5fdHNzaTJkYm07Ci0JCXBoeS0+ZHluX3Rzc2lfdGJsID0gMTsKLQl9IGVsc2UgewotCQkvKiBwYWJYIHZhbHVlcyBub3Qgc2V0IGluIFNQUk9NLiAqLwotCQlzd2l0Y2ggKHBoeS0+dHlwZSkgewotCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9BOgotCQkJLyogQVBIWSBuZWVkcyBhIGdlbmVyYXRlZCB0YWJsZS4gKi8KLQkJCXBoeS0+dHNzaTJkYm0gPSBOVUxMOwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IGdlbmVyYXRlIHRzc2kyZEJtICIKLQkJCQkJICAgICJ0YWJsZSAod3JvbmcgU1BST00gaW5mbykhXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9COgotCQkJcGh5LT5pZGxlX3Rzc2kgPSAweDM0OwotCQkJcGh5LT50c3NpMmRibSA9IGJjbTQzeHhfdHNzaTJkYm1fYl90YWJsZTsKLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQkJcGh5LT5pZGxlX3Rzc2kgPSAweDM0OwotCQkJcGh5LT50c3NpMmRibSA9IGJjbTQzeHhfdHNzaTJkYm1fZ190YWJsZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBiY200M3h4X3BoeV9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0KLQlzd2l0Y2ggKHBoeS0+dHlwZSkgewotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0E6Ci0JCWlmIChwaHktPnJldiA9PSAyIHx8IHBoeS0+cmV2ID09IDMpIHsKLQkJCWJjbTQzeHhfcGh5X2luaXRhKGJjbSk7Ci0JCQllcnIgPSAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0I6Ci0JCXN3aXRjaCAocGh5LT5yZXYpIHsKLQkJY2FzZSAyOgotCQkJYmNtNDN4eF9waHlfaW5pdGIyKGJjbSk7Ci0JCQllcnIgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWJjbTQzeHhfcGh5X2luaXRiNChiY20pOwotCQkJZXJyID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDU6Ci0JCQliY200M3h4X3BoeV9pbml0YjUoYmNtKTsKLQkJCWVyciA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSA2OgotCQkJYmNtNDN4eF9waHlfaW5pdGI2KGJjbSk7Ci0JCQllcnIgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfRzoKLQkJYmNtNDN4eF9waHlfaW5pdGcoYmNtKTsKLQkJZXJyID0gMDsKLQkJYnJlYWs7Ci0JfQotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbmtub3duIFBIWVRZUEUgZm91bmQhXG4iKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgYmNtNDN4eF9waHlfc2V0X2FudGVubmFfZGl2ZXJzaXR5KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JdTE2IGFudGVubmFkaXY7Ci0JdTE2IG9mZnNldDsKLQl1MTYgdmFsdWU7Ci0JdTMyIHVjb2RlZmxhZ3M7Ci0KLQlhbnRlbm5hZGl2ID0gcGh5LT5hbnRlbm5hX2RpdmVyc2l0eTsKLQotCWlmIChhbnRlbm5hZGl2ID09IDB4RkZGRikKLQkJYW50ZW5uYWRpdiA9IDM7Ci0JYXNzZXJ0KGFudGVubmFkaXYgPD0gMyk7Ci0KLQl1Y29kZWZsYWdzID0gYmNtNDN4eF9zaG1fcmVhZDMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCQlCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VUKTsKLQliY200M3h4X3NobV93cml0ZTMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJICAgIEJDTTQzeHhfVUNPREVGTEFHU19PRkZTRVQsCi0JCQkgICAgdWNvZGVmbGFncyAmIH5CQ000M3h4X1VDT0RFRkxBR19BVVRPRElWKTsKLQotCXN3aXRjaCAocGh5LT50eXBlKSB7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKQotCQkJb2Zmc2V0ID0gMHgwMDAwOwotCQllbHNlCi0JCQlvZmZzZXQgPSAweDA0MDA7Ci0KLQkJaWYgKGFudGVubmFkaXYgPT0gMikKLQkJCXZhbHVlID0gKDMvKmF1dG9tYXRpYyovIDw8IDcpOwotCQllbHNlCi0JCQl2YWx1ZSA9IChhbnRlbm5hZGl2IDw8IDcpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIG9mZnNldCArIDEsCi0JCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIG9mZnNldCArIDEpCi0JCQkJICAgJiAweDdFN0YpIHwgdmFsdWUpOwotCi0JCWlmIChhbnRlbm5hZGl2ID49IDIpIHsKLQkJCWlmIChhbnRlbm5hZGl2ID09IDIpCi0JCQkJdmFsdWUgPSAoYW50ZW5uYWRpdiA8PCA3KTsKLQkJCWVsc2UKLQkJCQl2YWx1ZSA9ICgwLypmb3JjZTAqLyA8PCA3KTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgb2Zmc2V0ICsgMHgyQiwKLQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIG9mZnNldCArIDB4MkIpCi0JCQkJCSAgICYgMHhGRUZGKSB8IHZhbHVlKTsKLQkJfQotCi0JCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpIHsKLQkJCWlmIChhbnRlbm5hZGl2ID49IDIpCi0JCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0OEMsCi0JCQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEMpCi0JCQkJCQkgICB8IDB4MjAwMCk7Ci0JCQllbHNlCi0JCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0OEMsCi0JCQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEMpCi0JCQkJCQkgICAmIH4weDIwMDApOwotCQkJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ2MSwKLQkJCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ2MSkKLQkJCQkJCSAgIHwgMHgwMDEwKTsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBRCwKLQkJCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QUQpCi0JCQkJCQkgICAmIDB4MDBGRikgfCAweDAwMTUpOwotCQkJCWlmIChwaHktPnJldiA9PSAyKQotCQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyNywgMHgwMDA4KTsKLQkJCQllbHNlCi0JCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDI3LAotCQkJCQkJKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MjcpCi0JCQkJCQkgJiAweDAwRkYpIHwgMHgwMDA4KTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBoeS0+cmV2ID49IDYpCi0JCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0OUIsIDB4MDBEQyk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGh5LT5yZXYgPCAzKQotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJCLAotCQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyQikKLQkJCQkJCSAgICYgMHgwMEZGKSB8IDB4MDAyNCk7Ci0JCQllbHNlIHsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA2MSwKLQkJCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA2MSkKLQkJCQkJCSAgIHwgMHgwMDEwKTsKLQkJCQlpZiAocGh5LT5yZXYgPT0gMykgewotCQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA5MywgMHgwMDFEKTsKLQkJCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjcsIDB4MDAwOCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwOTMsIDB4MDAzQSk7Ci0JCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDI3LAotCQkJCQkJKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMjcpCi0JCQkJCQkgJiAweDAwRkYpIHwgMHgwMDA4KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQjoKLQkJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPT0gMikKLQkJCXZhbHVlID0gKDMvKmF1dG9tYXRpYyovIDw8IDcpOwotCQllbHNlCi0JCQl2YWx1ZSA9IChhbnRlbm5hZGl2IDw8IDcpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDNFMiwKLQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwM0UyKQotCQkJCSAgICYgMHhGRTdGKSB8IHZhbHVlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCX0KLQotCWlmIChhbnRlbm5hZGl2ID49IDIpIHsKLQkJdWNvZGVmbGFncyA9IGJjbTQzeHhfc2htX3JlYWQzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkJCUJDTTQzeHhfVUNPREVGTEFHU19PRkZTRVQpOwotCQliY200M3h4X3NobV93cml0ZTMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCSAgICBCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VULAotCQkJCSAgICB1Y29kZWZsYWdzIHwgQkNNNDN4eF9VQ09ERUZMQUdfQVVUT0RJVik7Ci0JfQotCi0JcGh5LT5hbnRlbm5hX2RpdmVyc2l0eSA9IGFudGVubmFkaXY7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMTE4MzYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLQotICBCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlcgotCi0gIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4sCi0gICAgICAgICAgICAgICAgICAgICBTdGVmYW5vIEJyaXZpbyA8c3QzQHJpc2V1cC5uZXQ+Ci0gICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gICAgICAgICAgICAgICAgICAgICBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KLQotICBTb21lIHBhcnRzIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHcyMjAwCi0gIGRyaXZlciAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA0IEludGVsIENvcnBvcmF0aW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLSNpZm5kZWYgQkNNNDN4eF9QSFlfSF8KLSNkZWZpbmUgQkNNNDN4eF9QSFlfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCBiY200M3h4X3ByaXZhdGU7Ci0KLXZvaWQgYmNtNDN4eF9yYXdfcGh5X2xvY2soc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLSNkZWZpbmUgYmNtNDN4eF9waHlfbG9jayhiY20sIGZsYWdzKSBcCi0JZG8gewkJCQkJXAotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQlcCi0JCWJjbTQzeHhfcmF3X3BoeV9sb2NrKGJjbSk7CVwKLQl9IHdoaWxlICgwKQotdm9pZCBiY200M3h4X3Jhd19waHlfdW5sb2NrKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci0jZGVmaW5lIGJjbTQzeHhfcGh5X3VubG9jayhiY20sIGZsYWdzKSBcCi0JZG8gewkJCQkJXAotCQliY200M3h4X3Jhd19waHlfdW5sb2NrKGJjbSk7CVwKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwlcCi0JfSB3aGlsZSAoMCkKLQotLyogQ2FyZCB1c2VzIHRoZSBsb29wYmFjayBnYWluIHN0dWZmICovCi0jZGVmaW5lIGhhc19sb29wYmFja19nYWluKHBoeSkgXAotICAgICAgICAoKChwaHkpLT5yZXYgPiAxKSB8fCAoKHBoeSktPmNvbm5lY3RlZCkpCi0KLXUxNiBiY200M3h4X3BoeV9yZWFkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCk7Ci12b2lkIGJjbTQzeHhfcGh5X3dyaXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCwgdTE2IHZhbCk7Ci0KLWludCBiY200M3h4X3BoeV9pbml0X3Rzc2kyZGJtX3RhYmxlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci1pbnQgYmNtNDN4eF9waHlfaW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi12b2lkIGJjbTQzeHhfcGh5X3NldF9hbnRlbm5hX2RpdmVyc2l0eShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotdm9pZCBiY200M3h4X3BoeV9jYWxpYnJhdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLWludCBiY200M3h4X3BoeV9jb25uZWN0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGNvbm5lY3QpOwotCi12b2lkIGJjbTQzeHhfcGh5X2xvX2JfbWVhc3VyZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotdm9pZCBiY200M3h4X3BoeV9sb19nX21lYXN1cmUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLXZvaWQgYmNtNDN4eF9waHlfeG1pdHBvd2VyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci0KLS8qIEFkanVzdCB0aGUgTG9jYWxPc2NpbGxhdG9yIHRvIHRoZSBzYXZlZCB2YWx1ZXMuCi0gKiAiZml4ZWQiIGlzIG9ubHkgc2V0IHRvIDEgb25jZSBpbiBpbml0aWFsaXphdGlvbi4gU2V0IHRvIDAgb3RoZXJ3aXNlLgotICovCi12b2lkIGJjbTQzeHhfcGh5X2xvX2FkanVzdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIGludCBmaXhlZCk7Ci12b2lkIGJjbTQzeHhfcGh5X2xvX21hcmtfYWxsX3VudXNlZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi12b2lkIGJjbTQzeHhfcGh5X3NldF9iYXNlYmFuZF9hdHRlbnVhdGlvbihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJCSAgdTE2IGJhc2ViYW5kX2F0dGVudWF0aW9uKTsKLQotI2VuZGlmIC8qIEJDTTQzeHhfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWIxMDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNjc0ICswLDAgQEAKLS8qCi0KLSAgQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIKLQotICBQSU8gVHJhbnNtaXNzaW9uCi0KLSAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+Ci0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8KLQotI2luY2x1ZGUgImJjbTQzeHguaCIKLSNpbmNsdWRlICJiY200M3h4X3Bpby5oIgotI2luY2x1ZGUgImJjbTQzeHhfbWFpbi5oIgotI2luY2x1ZGUgImJjbTQzeHhfeG1pdC5oIgotI2luY2x1ZGUgImJjbTQzeHhfcG93ZXIuaCIKLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLQotc3RhdGljIHZvaWQgdHhfc3RhcnQoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQotewotCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCwKLQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfSU5JVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4X29jdGV0KHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSwKLQkJICAgICB1OCBvY3RldCkKLXsKLQlpZiAocXVldWUtPm5lZWRfd29ya2Fyb3VuZHMpIHsKLQkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYREFUQSwKLQkJCQkgIG9jdGV0KTsKLQkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAotCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTyk7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAotCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTyk7Ci0JCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWERBVEEsCi0JCQkJICBvY3RldCk7Ci0JfQotfQotCi1zdGF0aWMgdTE2IHR4X2dldF9uZXh0X3dvcmQoc3RydWN0IGJjbTQzeHhfdHhoZHIgKnR4aGRyLAotCQkJICAgIGNvbnN0IHU4ICpwYWNrZXQsCi0JCQkgICAgdW5zaWduZWQgaW50ICpwb3MpCi17Ci0JY29uc3QgdTggKnNvdXJjZTsKLQl1bnNpZ25lZCBpbnQgaSA9ICpwb3M7Ci0JdTE2IHJldDsKLQotCWlmIChpIDwgc2l6ZW9mKCp0eGhkcikpIHsKLQkJc291cmNlID0gKGNvbnN0IHU4ICopdHhoZHI7Ci0JfSBlbHNlIHsKLQkJc291cmNlID0gcGFja2V0OwotCQlpIC09IHNpemVvZigqdHhoZHIpOwotCX0KLQlyZXQgPSBsZTE2X3RvX2NwdSggKigoX19sZTE2ICopKHNvdXJjZSArIGkpKSApOwotCSpwb3MgKz0gMjsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4X2RhdGEoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlLAotCQkgICAgc3RydWN0IGJjbTQzeHhfdHhoZHIgKnR4aGRyLAotCQkgICAgY29uc3QgdTggKnBhY2tldCwKLQkJICAgIHVuc2lnbmVkIGludCBvY3RldHMpCi17Ci0JdTE2IGRhdGE7Ci0JdW5zaWduZWQgaW50IGkgPSAwOwotCi0JaWYgKHF1ZXVlLT5uZWVkX3dvcmthcm91bmRzKSB7Ci0JCWRhdGEgPSB0eF9nZXRfbmV4dF93b3JkKHR4aGRyLCBwYWNrZXQsICZpKTsKLQkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYREFUQSwgZGF0YSk7Ci0JfQotCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCwKLQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTyB8Ci0JCQkgIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFSEkpOwotCXdoaWxlIChpIDwgb2N0ZXRzIC0gMSkgewotCQlkYXRhID0gdHhfZ2V0X25leHRfd29yZCh0eGhkciwgcGFja2V0LCAmaSk7Ci0JCWJjbTQzeHhfcGlvX3dyaXRlKHF1ZXVlLCBCQ000M3h4X1BJT19UWERBVEEsIGRhdGEpOwotCX0KLQlpZiAob2N0ZXRzICUgMikKLQkJdHhfb2N0ZXQocXVldWUsIHBhY2tldFtvY3RldHMgLSBzaXplb2YoKnR4aGRyKSAtIDFdKTsKLX0KLQotc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlLAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpZiAocXVldWUtPm5lZWRfd29ya2Fyb3VuZHMpIHsKLQkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYREFUQSwKLQkJCQkgIHNrYi0+ZGF0YVtza2ItPmxlbiAtIDFdKTsKLQkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAotCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVMTyB8Ci0JCQkJICBCQ000M3h4X1BJT19UWENUTF9DT01QTEVURSk7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAotCQkJCSAgQkNNNDN4eF9QSU9fVFhDVExfQ09NUExFVEUpOwotCX0KLX0KLQotc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlLAotCQkJICAgc3RydWN0IGJjbTQzeHhfcGlvX3R4cGFja2V0ICpwYWNrZXQpCi17Ci0JdTE2IGNvb2tpZSA9IDB4MDAwMDsKLQlpbnQgcGFja2V0aW5kZXg7Ci0KLQkvKiBXZSB1c2UgdGhlIHVwcGVyIDQgYml0cyBmb3IgdGhlIFBJTwotCSAqIGNvbnRyb2xsZXIgSUQgYW5kIHRoZSBsb3dlciAxMiBiaXRzCi0JICogZm9yIHRoZSBwYWNrZXQgaW5kZXggKGluIHRoZSBjYWNoZSkuCi0JICovCi0Jc3dpdGNoIChxdWV1ZS0+bW1pb19iYXNlKSB7Ci0JY2FzZSBCQ000M3h4X01NSU9fUElPMV9CQVNFOgotCQlicmVhazsKLQljYXNlIEJDTTQzeHhfTU1JT19QSU8yX0JBU0U6Ci0JCWNvb2tpZSA9IDB4MTAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X01NSU9fUElPM19CQVNFOgotCQljb29raWUgPSAweDIwMDA7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDN4eF9NTUlPX1BJTzRfQkFTRToKLQkJY29va2llID0gMHgzMDAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotCXBhY2tldGluZGV4ID0gcGlvX3R4cGFja2V0X2dldGluZGV4KHBhY2tldCk7Ci0JYXNzZXJ0KCgodTE2KXBhY2tldGluZGV4ICYgMHhGMDAwKSA9PSAweDAwMDApOwotCWNvb2tpZSB8PSAodTE2KXBhY2tldGluZGV4OwotCi0JcmV0dXJuIGNvb2tpZTsKLX0KLQotc3RhdGljCi1zdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqIHBhcnNlX2Nvb2tpZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgICAgIHUxNiBjb29raWUsCi0JCQkJICAgICAgIHN0cnVjdCBiY200M3h4X3Bpb190eHBhY2tldCAqKnBhY2tldCkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW8gKnBpbyA9IGJjbTQzeHhfY3VycmVudF9waW8oYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUgPSBOVUxMOwotCWludCBwYWNrZXRpbmRleDsKLQotCXN3aXRjaCAoY29va2llICYgMHhGMDAwKSB7Ci0JY2FzZSAweDAwMDA6Ci0JCXF1ZXVlID0gcGlvLT5xdWV1ZTA7Ci0JCWJyZWFrOwotCWNhc2UgMHgxMDAwOgotCQlxdWV1ZSA9IHBpby0+cXVldWUxOwotCQlicmVhazsKLQljYXNlIDB4MjAwMDoKLQkJcXVldWUgPSBwaW8tPnF1ZXVlMjsKLQkJYnJlYWs7Ci0JY2FzZSAweDMwMDA6Ci0JCXF1ZXVlID0gcGlvLT5xdWV1ZTM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFzc2VydCgwKTsKLQl9Ci0JcGFja2V0aW5kZXggPSAoY29va2llICYgMHgwRkZGKTsKLQlhc3NlcnQocGFja2V0aW5kZXggPj0gMCAmJiBwYWNrZXRpbmRleCA8IEJDTTQzeHhfUElPX01BWFRYUEFDS0VUUyk7Ci0JKnBhY2tldCA9ICYocXVldWUtPnR4X3BhY2tldHNfY2FjaGVbcGFja2V0aW5kZXhdKTsKLQotCXJldHVybiBxdWV1ZTsKLX0KLQotc3RhdGljIHZvaWQgcGlvX3R4X3dyaXRlX2ZyYWdtZW50KHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSwKLQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICBzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgKnBhY2tldCkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF90eGhkciB0eGhkcjsKLQl1bnNpZ25lZCBpbnQgb2N0ZXRzOwotCi0JYXNzZXJ0KHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCk7Ci0JYmNtNDN4eF9nZW5lcmF0ZV90eGhkcihxdWV1ZS0+YmNtLAotCQkJICAgICAgICZ0eGhkciwgc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCSAgICAgICAocGFja2V0LT54bWl0dGVkX2ZyYWdzID09IDApLAotCQkJICAgICAgIGdlbmVyYXRlX2Nvb2tpZShxdWV1ZSwgcGFja2V0KSk7Ci0KLQl0eF9zdGFydChxdWV1ZSk7Ci0Jb2N0ZXRzID0gc2tiLT5sZW4gKyBzaXplb2YodHhoZHIpOwotCWlmIChxdWV1ZS0+bmVlZF93b3JrYXJvdW5kcykKLQkJb2N0ZXRzLS07Ci0JdHhfZGF0YShxdWV1ZSwgJnR4aGRyLCAodTggKilza2ItPmRhdGEsIG9jdGV0cyk7Ci0JdHhfY29tcGxldGUocXVldWUsIHNrYik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfdHhwYWNrZXQoc3RydWN0IGJjbTQzeHhfcGlvX3R4cGFja2V0ICpwYWNrZXQsCi0JCQkgIGludCBpcnFfY29udGV4dCkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUgPSBwYWNrZXQtPnF1ZXVlOwotCi0JaWVlZTgwMjExX3R4Yl9mcmVlKHBhY2tldC0+dHhiKTsKLQlsaXN0X21vdmUoJnBhY2tldC0+bGlzdCwgJnF1ZXVlLT50eGZyZWUpOwotCXF1ZXVlLT5ucl90eGZyZWUrKzsKLQotCWFzc2VydChxdWV1ZS0+dHhfZGV2cV91c2VkID49IHBhY2tldC0+eG1pdHRlZF9vY3RldHMpOwotCWFzc2VydChxdWV1ZS0+dHhfZGV2cV9wYWNrZXRzID49IHBhY2tldC0+eG1pdHRlZF9mcmFncyk7Ci0JcXVldWUtPnR4X2RldnFfdXNlZCAtPSBwYWNrZXQtPnhtaXR0ZWRfb2N0ZXRzOwotCXF1ZXVlLT50eF9kZXZxX3BhY2tldHMgLT0gcGFja2V0LT54bWl0dGVkX2ZyYWdzOwotfQotCi1zdGF0aWMgaW50IHBpb190eF9wYWNrZXQoc3RydWN0IGJjbTQzeHhfcGlvX3R4cGFja2V0ICpwYWNrZXQpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlID0gcGFja2V0LT5xdWV1ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiID0gcGFja2V0LT50eGI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MTYgb2N0ZXRzOwotCWludCBpOwotCi0JZm9yIChpID0gcGFja2V0LT54bWl0dGVkX2ZyYWdzOyBpIDwgdHhiLT5ucl9mcmFnczsgaSsrKSB7Ci0JCXNrYiA9IHR4Yi0+ZnJhZ21lbnRzW2ldOwotCi0JCW9jdGV0cyA9ICh1MTYpc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IGJjbTQzeHhfdHhoZHIpOwotCQlhc3NlcnQocXVldWUtPnR4X2RldnFfc2l6ZSA+PSBvY3RldHMpOwotCQlhc3NlcnQocXVldWUtPnR4X2RldnFfcGFja2V0cyA8PSBCQ000M3h4X1BJT19NQVhUWERFVlFQQUNLRVRTKTsKLQkJYXNzZXJ0KHF1ZXVlLT50eF9kZXZxX3VzZWQgPD0gcXVldWUtPnR4X2RldnFfc2l6ZSk7Ci0JCS8qIENoZWNrIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgZnJlZSBzcGFjZSBvbiB0aGUgZGV2aWNlCi0JCSAqIFRYIHF1ZXVlLiBJZiBub3QsIHJldHVybiBhbmQgbGV0IHRoZSBUWCB0YXNrbGV0Ci0JCSAqIHJldHJ5IGxhdGVyLgotCQkgKi8KLQkJaWYgKHF1ZXVlLT50eF9kZXZxX3BhY2tldHMgPT0gQkNNNDN4eF9QSU9fTUFYVFhERVZRUEFDS0VUUykKLQkJCXJldHVybiAtRUJVU1k7Ci0JCWlmIChxdWV1ZS0+dHhfZGV2cV91c2VkICsgb2N0ZXRzID4gcXVldWUtPnR4X2RldnFfc2l6ZSkKLQkJCXJldHVybiAtRUJVU1k7Ci0JCS8qIE5vdyBwb2tlIHRoZSBkZXZpY2UuICovCi0JCXBpb190eF93cml0ZV9mcmFnbWVudChxdWV1ZSwgc2tiLCBwYWNrZXQpOwotCi0JCS8qIEFjY291bnQgZm9yIHRoZSBwYWNrZXQgc2l6ZS4KLQkJICogKFdlIG11c3Qgbm90IG92ZXJmbG93IHRoZSBkZXZpY2UgVFggcXVldWUpCi0JCSAqLwotCQlxdWV1ZS0+dHhfZGV2cV9wYWNrZXRzKys7Ci0JCXF1ZXVlLT50eF9kZXZxX3VzZWQgKz0gb2N0ZXRzOwotCi0JCWFzc2VydChwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MgPCBwYWNrZXQtPnR4Yi0+bnJfZnJhZ3MpOwotCQlwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MrKzsKLQkJcGFja2V0LT54bWl0dGVkX29jdGV0cyArPSBvY3RldHM7Ci0JfQotCWxpc3RfbW92ZV90YWlsKCZwYWNrZXQtPmxpc3QsICZxdWV1ZS0+dHhydW5uaW5nKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZCkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUgPSAoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKilkOwotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IHF1ZXVlLT5iY207Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgKnBhY2tldCwgKnRtcF9wYWNrZXQ7Ci0JaW50IGVycjsKLQl1MTYgdHhjdGw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHF1ZXVlLT50eF9mcm96ZW4pCi0JCWdvdG8gb3V0X3VubG9jazsKLQl0eGN0bCA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMKTsKLQlpZiAodHhjdGwgJiBCQ000M3h4X1BJT19UWENUTF9TVVNQRU5EKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0LCB0bXBfcGFja2V0LCAmcXVldWUtPnR4cXVldWUsIGxpc3QpIHsKLQkJYXNzZXJ0KHBhY2tldC0+eG1pdHRlZF9mcmFncyA8IHBhY2tldC0+dHhiLT5ucl9mcmFncyk7Ci0JCWlmIChwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MgPT0gMCkgewotCQkJaW50IGk7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JCQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIHF1ZXVlIGlzIGJpZwotCQkJICogZW5vdWdoIGZvciBldmVyeSBmcmFnbWVudC4gSWYgbm90LCBkcm9wIHRoZQotCQkJICogd2hvbGUgcGFja2V0LgotCQkJICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgcGFja2V0LT50eGItPm5yX2ZyYWdzOyBpKyspIHsKLQkJCQlza2IgPSBwYWNrZXQtPnR4Yi0+ZnJhZ21lbnRzW2ldOwotCQkJCWlmICh1bmxpa2VseShza2ItPmxlbiA+IHF1ZXVlLT50eF9kZXZxX3NpemUpKSB7Ci0JCQkJCWRwcmludGtsKEtFUk5fRVJSIFBGWCAiUElPIFRYIGRldmljZSBxdWV1ZSB0b28gc21hbGwuICIKLQkJCQkJCQkgICAgICAiRHJvcHBpbmcgcGFja2V0LlxuIik7Ci0JCQkJCWZyZWVfdHhwYWNrZXQocGFja2V0LCAxKTsKLQkJCQkJZ290byBuZXh0X3BhY2tldDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLyogVHJ5IHRvIHRyYW5zbWl0IHRoZSBwYWNrZXQuCi0JCSAqIFRoaXMgbWF5IG5vdCBjb21wbGV0ZWx5IHN1Y2NlZWQuCi0JCSAqLwotCQllcnIgPSBwaW9fdHhfcGFja2V0KHBhY2tldCk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQluZXh0X3BhY2tldDoKLQkJY29udGludWU7Ci0JfQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwX3R4cXVldWVzKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgKnBhY2tldDsKLQlpbnQgaTsKLQotCXF1ZXVlLT5ucl90eGZyZWUgPSBCQ000M3h4X1BJT19NQVhUWFBBQ0tFVFM7Ci0JZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfUElPX01BWFRYUEFDS0VUUzsgaSsrKSB7Ci0JCXBhY2tldCA9ICYocXVldWUtPnR4X3BhY2tldHNfY2FjaGVbaV0pOwotCi0JCXBhY2tldC0+cXVldWUgPSBxdWV1ZTsKLQkJSU5JVF9MSVNUX0hFQUQoJnBhY2tldC0+bGlzdCk7Ci0KLQkJbGlzdF9hZGQoJnBhY2tldC0+bGlzdCwgJnF1ZXVlLT50eGZyZWUpOwotCX0KLX0KLQotc3RhdGljCi1zdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqIGJjbTQzeHhfc2V0dXBfcGlvcXVldWUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCQkJIHUxNiBwaW9fbW1pb19iYXNlKQotewotCXN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZTsKLQl1MzIgdmFsdWU7Ci0JdTE2IHFzaXplOwotCi0JcXVldWUgPSBremFsbG9jKHNpemVvZigqcXVldWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXF1ZXVlKQotCQlnb3RvIG91dDsKLQotCXF1ZXVlLT5iY20gPSBiY207Ci0JcXVldWUtPm1taW9fYmFzZSA9IHBpb19tbWlvX2Jhc2U7Ci0JcXVldWUtPm5lZWRfd29ya2Fyb3VuZHMgPSAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDMpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT50eGZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS0+dHhxdWV1ZSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT50eHJ1bm5pbmcpOwotCXRhc2tsZXRfaW5pdCgmcXVldWUtPnR4dGFzaywgdHhfdGFza2xldCwKLQkJICAgICAodW5zaWduZWQgbG9uZylxdWV1ZSk7Ci0KLQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7Ci0JdmFsdWUgJj0gfkJDTTQzeHhfU0JGX1hGRVJfUkVHX0JZVEVTV0FQOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsIHZhbHVlKTsKLQotCXFzaXplID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBxdWV1ZS0+bW1pb19iYXNlICsgQkNNNDN4eF9QSU9fVFhRQlVGU0laRSk7Ci0JaWYgKHFzaXplID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1I6IFRoaXMgY2FyZCBkb2VzIG5vdCBzdXBwb3J0IFBJTyAiCi0JCQkJICAgICJvcGVyYXRpb24gbW9kZS4gUGxlYXNlIHVzZSBETUEgbW9kZSAiCi0JCQkJICAgICIobW9kdWxlIHBhcmFtZXRlciBwaW89MCkuXG4iKTsKLQkJZ290byBlcnJfZnJlZXF1ZXVlOwotCX0KLQlpZiAocXNpemUgPD0gQkNNNDN4eF9QSU9fVFhRQURKVVNUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlBJTyB0eCBkZXZpY2UtcXVldWUgdG9vIHNtYWxsICgldSlcbiIsCi0JCSAgICAgICBxc2l6ZSk7Ci0JCWdvdG8gZXJyX2ZyZWVxdWV1ZTsKLQl9Ci0JcXNpemUgLT0gQkNNNDN4eF9QSU9fVFhRQURKVVNUOwotCXF1ZXVlLT50eF9kZXZxX3NpemUgPSBxc2l6ZTsKLQotCXNldHVwX3R4cXVldWVzKHF1ZXVlKTsKLQotb3V0OgotCXJldHVybiBxdWV1ZTsKLQotZXJyX2ZyZWVxdWV1ZToKLQlrZnJlZShxdWV1ZSk7Ci0JcXVldWUgPSBOVUxMOwotCWdvdG8gb3V0OwotfQotCi1zdGF0aWMgdm9pZCBjYW5jZWxfdHJhbnNmZXJzKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgKnBhY2tldCwgKnRtcF9wYWNrZXQ7Ci0KLQluZXRpZl90eF9kaXNhYmxlKHF1ZXVlLT5iY20tPm5ldF9kZXYpOwotCXRhc2tsZXRfZGlzYWJsZSgmcXVldWUtPnR4dGFzayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0LCB0bXBfcGFja2V0LCAmcXVldWUtPnR4cnVubmluZywgbGlzdCkKLQkJZnJlZV90eHBhY2tldChwYWNrZXQsIDApOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWNrZXQsIHRtcF9wYWNrZXQsICZxdWV1ZS0+dHhxdWV1ZSwgbGlzdCkKLQkJZnJlZV90eHBhY2tldChwYWNrZXQsIDApOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2Rlc3Ryb3lfcGlvcXVldWUoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQotewotCWlmICghcXVldWUpCi0JCXJldHVybjsKLQotCWNhbmNlbF90cmFuc2ZlcnMocXVldWUpOwotCWtmcmVlKHF1ZXVlKTsKLX0KLQotdm9pZCBiY200M3h4X3Bpb19mcmVlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW8gKnBpbzsKLQotCWlmICghYmNtNDN4eF91c2luZ19waW8oYmNtKSkKLQkJcmV0dXJuOwotCXBpbyA9IGJjbTQzeHhfY3VycmVudF9waW8oYmNtKTsKLQotCWJjbTQzeHhfZGVzdHJveV9waW9xdWV1ZShwaW8tPnF1ZXVlMyk7Ci0JcGlvLT5xdWV1ZTMgPSBOVUxMOwotCWJjbTQzeHhfZGVzdHJveV9waW9xdWV1ZShwaW8tPnF1ZXVlMik7Ci0JcGlvLT5xdWV1ZTIgPSBOVUxMOwotCWJjbTQzeHhfZGVzdHJveV9waW9xdWV1ZShwaW8tPnF1ZXVlMSk7Ci0JcGlvLT5xdWV1ZTEgPSBOVUxMOwotCWJjbTQzeHhfZGVzdHJveV9waW9xdWV1ZShwaW8tPnF1ZXVlMCk7Ci0JcGlvLT5xdWV1ZTAgPSBOVUxMOwotfQotCi1pbnQgYmNtNDN4eF9waW9faW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGlvICpwaW8gPSBiY200M3h4X2N1cnJlbnRfcGlvKGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JcXVldWUgPSBiY200M3h4X3NldHVwX3Bpb3F1ZXVlKGJjbSwgQkNNNDN4eF9NTUlPX1BJTzFfQkFTRSk7Ci0JaWYgKCFxdWV1ZSkKLQkJZ290byBvdXQ7Ci0JcGlvLT5xdWV1ZTAgPSBxdWV1ZTsKLQotCXF1ZXVlID0gYmNtNDN4eF9zZXR1cF9waW9xdWV1ZShiY20sIEJDTTQzeHhfTU1JT19QSU8yX0JBU0UpOwotCWlmICghcXVldWUpCi0JCWdvdG8gZXJyX2Rlc3Ryb3kwOwotCXBpby0+cXVldWUxID0gcXVldWU7Ci0KLQlxdWV1ZSA9IGJjbTQzeHhfc2V0dXBfcGlvcXVldWUoYmNtLCBCQ000M3h4X01NSU9fUElPM19CQVNFKTsKLQlpZiAoIXF1ZXVlKQotCQlnb3RvIGVycl9kZXN0cm95MTsKLQlwaW8tPnF1ZXVlMiA9IHF1ZXVlOwotCi0JcXVldWUgPSBiY200M3h4X3NldHVwX3Bpb3F1ZXVlKGJjbSwgQkNNNDN4eF9NTUlPX1BJTzRfQkFTRSk7Ci0JaWYgKCFxdWV1ZSkKLQkJZ290byBlcnJfZGVzdHJveTI7Ci0JcGlvLT5xdWV1ZTMgPSBxdWV1ZTsKLQotCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgMykKLQkJYmNtLT5pcnFfc2F2ZWRzdGF0ZSB8PSBCQ000M3h4X0lSUV9QSU9fV09SS0FST1VORDsKLQotCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiUElPIGluaXRpYWxpemVkXG4iKTsKLQllcnIgPSAwOwotb3V0OgotCXJldHVybiBlcnI7Ci0KLWVycl9kZXN0cm95MjoKLQliY200M3h4X2Rlc3Ryb3lfcGlvcXVldWUocGlvLT5xdWV1ZTIpOwotCXBpby0+cXVldWUyID0gTlVMTDsKLWVycl9kZXN0cm95MToKLQliY200M3h4X2Rlc3Ryb3lfcGlvcXVldWUocGlvLT5xdWV1ZTEpOwotCXBpby0+cXVldWUxID0gTlVMTDsKLWVycl9kZXN0cm95MDoKLQliY200M3h4X2Rlc3Ryb3lfcGlvcXVldWUocGlvLT5xdWV1ZTApOwotCXBpby0+cXVldWUwID0gTlVMTDsKLQlnb3RvIG91dDsKLX0KLQotaW50IGJjbTQzeHhfcGlvX3R4KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJICAgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YikKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUgPSBiY200M3h4X2N1cnJlbnRfcGlvKGJjbSktPnF1ZXVlMTsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgKnBhY2tldDsKLQotCWFzc2VydCghcXVldWUtPnR4X3N1c3BlbmRlZCk7Ci0JYXNzZXJ0KCFsaXN0X2VtcHR5KCZxdWV1ZS0+dHhmcmVlKSk7Ci0KLQlwYWNrZXQgPSBsaXN0X2VudHJ5KHF1ZXVlLT50eGZyZWUubmV4dCwgc3RydWN0IGJjbTQzeHhfcGlvX3R4cGFja2V0LCBsaXN0KTsKLQlwYWNrZXQtPnR4YiA9IHR4YjsKLQlwYWNrZXQtPnhtaXR0ZWRfZnJhZ3MgPSAwOwotCXBhY2tldC0+eG1pdHRlZF9vY3RldHMgPSAwOwotCWxpc3RfbW92ZV90YWlsKCZwYWNrZXQtPmxpc3QsICZxdWV1ZS0+dHhxdWV1ZSk7Ci0JcXVldWUtPm5yX3R4ZnJlZS0tOwotCWFzc2VydChxdWV1ZS0+bnJfdHhmcmVlIDwgQkNNNDN4eF9QSU9fTUFYVFhQQUNLRVRTKTsKLQotCS8qIFN1c3BlbmQgVFgsIGlmIHdlIGFyZSBvdXQgb2YgcGFja2V0cyBpbiB0aGUgImZyZWUiIHF1ZXVlLiAqLwotCWlmIChsaXN0X2VtcHR5KCZxdWV1ZS0+dHhmcmVlKSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKHF1ZXVlLT5iY20tPm5ldF9kZXYpOwotCQlxdWV1ZS0+dHhfc3VzcGVuZGVkID0gMTsKLQl9Ci0KLQl0YXNrbGV0X3NjaGVkdWxlKCZxdWV1ZS0+dHh0YXNrKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGJjbTQzeHhfcGlvX2hhbmRsZV94bWl0c3RhdHVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICBzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzICpzdGF0dXMpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlOwotCXN0cnVjdCBiY200M3h4X3Bpb190eHBhY2tldCAqcGFja2V0OwotCi0JcXVldWUgPSBwYXJzZV9jb29raWUoYmNtLCBzdGF0dXMtPmNvb2tpZSwgJnBhY2tldCk7Ci0JYXNzZXJ0KHF1ZXVlKTsKLQotCWZyZWVfdHhwYWNrZXQocGFja2V0LCAxKTsKLQlpZiAocXVldWUtPnR4X3N1c3BlbmRlZCkgewotCQlxdWV1ZS0+dHhfc3VzcGVuZGVkID0gMDsKLQkJbmV0aWZfd2FrZV9xdWV1ZShxdWV1ZS0+YmNtLT5uZXRfZGV2KTsKLQl9Ci0JLyogSWYgdGhlcmUgYXJlIHBhY2tldHMgb24gdGhlIHR4cXVldWUsIHBva2UgdGhlIHRhc2tsZXQKLQkgKiB0byB0cmFuc21pdCB0aGVtLgotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmcXVldWUtPnR4cXVldWUpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZxdWV1ZS0+dHh0YXNrKTsKLX0KLQotc3RhdGljIHZvaWQgcGlvX3J4X2Vycm9yKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSwKLQkJCSBpbnQgY2xlYXJfYnVmZmVycywKLQkJCSBjb25zdCBjaGFyICplcnJvcikKLXsKLQlpbnQgaTsKLQotCXByaW50a2woIlBJTyBSWCBlcnJvcjogJXNcbiIsIGVycm9yKTsKLQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fUlhDVEwsCi0JCQkgIEJDTTQzeHhfUElPX1JYQ1RMX1JFQURZKTsKLQlpZiAoY2xlYXJfYnVmZmVycykgewotCQlhc3NlcnQocXVldWUtPm1taW9fYmFzZSA9PSBCQ000M3h4X01NSU9fUElPMV9CQVNFKTsKLQkJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKLQkJCS8qIER1bW15IHJlYWQuICovCi0JCQliY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19SWERBVEEpOwotCQl9Ci0JfQotfQotCi12b2lkIGJjbTQzeHhfcGlvX3J4KHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKLXsKLQlfX2xlMTYgcHJlYW1ibGVbMjFdID0geyAwIH07Ci0Jc3RydWN0IGJjbTQzeHhfcnhoZHIgKnJ4aGRyOwotCXUxNiB0bXAsIGxlbiwgcnhmbGFnczI7Ci0JaW50IGksIHByZWFtYmxlX3JlYWR3b3JkczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JdG1wID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhDVEwpOwotCWlmICghKHRtcCAmIEJDTTQzeHhfUElPX1JYQ1RMX0RBVEFBVkFJTEFCTEUpKQotCQlyZXR1cm47Ci0JYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1JYQ1RMLAotCQkJICBCQ000M3h4X1BJT19SWENUTF9EQVRBQVZBSUxBQkxFKTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXRtcCA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1JYQ1RMKTsKLQkJaWYgKHRtcCAmIEJDTTQzeHhfUElPX1JYQ1RMX1JFQURZKQotCQkJZ290byBkYXRhX3JlYWR5OwotCQl1ZGVsYXkoMTApOwotCX0KLQlkcHJpbnRrbChLRVJOX0VSUiBQRlggIlBJTyBSWCB0aW1lZCBvdXRcbiIpOwotCXJldHVybjsKLWRhdGFfcmVhZHk6Ci0KLQlsZW4gPSBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19SWERBVEEpOwotCWlmICh1bmxpa2VseShsZW4gPiAweDcwMCkpIHsKLQkJcGlvX3J4X2Vycm9yKHF1ZXVlLCAwLCAibGVuID4gMHg3MDAiKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAodW5saWtlbHkobGVuID09IDAgJiYgcXVldWUtPm1taW9fYmFzZSAhPSBCQ000M3h4X01NSU9fUElPNF9CQVNFKSkgewotCQlwaW9fcnhfZXJyb3IocXVldWUsIDAsICJsZW4gPT0gMCIpOwotCQlyZXR1cm47Ci0JfQotCXByZWFtYmxlWzBdID0gY3B1X3RvX2xlMTYobGVuKTsKLQlpZiAocXVldWUtPm1taW9fYmFzZSA9PSBCQ000M3h4X01NSU9fUElPNF9CQVNFKQotCQlwcmVhbWJsZV9yZWFkd29yZHMgPSAxNCAvIHNpemVvZih1MTYpOwotCWVsc2UKLQkJcHJlYW1ibGVfcmVhZHdvcmRzID0gMTggLyBzaXplb2YodTE2KTsKLQlmb3IgKGkgPSAwOyBpIDwgcHJlYW1ibGVfcmVhZHdvcmRzOyBpKyspIHsKLQkJdG1wID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhEQVRBKTsKLQkJcHJlYW1ibGVbaSArIDFdID0gY3B1X3RvX2xlMTYodG1wKTsKLQl9Ci0JcnhoZHIgPSAoc3RydWN0IGJjbTQzeHhfcnhoZHIgKilwcmVhbWJsZTsKLQlyeGZsYWdzMiA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5mbGFnczIpOwotCWlmICh1bmxpa2VseShyeGZsYWdzMiAmIEJDTTQzeHhfUlhIRFJfRkxBR1MyX0lOVkFMSURGUkFNRSkpIHsKLQkJcGlvX3J4X2Vycm9yKHF1ZXVlLAotCQkJICAgICAocXVldWUtPm1taW9fYmFzZSA9PSBCQ000M3h4X01NSU9fUElPMV9CQVNFKSwKLQkJCSAgICAgImludmFsaWQgZnJhbWUiKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAocXVldWUtPm1taW9fYmFzZSA9PSBCQ000M3h4X01NSU9fUElPNF9CQVNFKSB7Ci0JCS8qIFdlIHJlY2VpdmVkIGFuIHhtaXQgc3RhdHVzLiAqLwotCQlzdHJ1Y3QgYmNtNDN4eF9od3htaXRzdGF0dXMgKmh3OwotCQlzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzIHN0YXQ7Ci0KLQkJaHcgPSAoc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICopKHByZWFtYmxlICsgMSk7Ci0JCXN0YXQuY29va2llID0gbGUxNl90b19jcHUoaHctPmNvb2tpZSk7Ci0JCXN0YXQuZmxhZ3MgPSBody0+ZmxhZ3M7Ci0JCXN0YXQuY250MSA9IGh3LT5jbnQxOwotCQlzdGF0LmNudDIgPSBody0+Y250MjsKLQkJc3RhdC5zZXEgPSBsZTE2X3RvX2NwdShody0+c2VxKTsKLQkJc3RhdC51bmtub3duID0gbGUxNl90b19jcHUoaHctPnVua25vd24pOwotCi0JCWJjbTQzeHhfZGVidWdmc19sb2dfdHhzdGF0KHF1ZXVlLT5iY20sICZzdGF0KTsKLQkJYmNtNDN4eF9waW9faGFuZGxlX3htaXRzdGF0dXMocXVldWUtPmJjbSwgJnN0YXQpOwotCi0JCXJldHVybjsKLQl9Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7Ci0JaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCXBpb19yeF9lcnJvcihxdWV1ZSwgMSwgIk9PTSIpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9wdXQoc2tiLCBsZW4pOwotCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpICs9IDIpIHsKLQkJdG1wID0gYmNtNDN4eF9waW9fcmVhZChxdWV1ZSwgQkNNNDN4eF9QSU9fUlhEQVRBKTsKLQkJKigoX19sZTE2ICopKHNrYi0+ZGF0YSArIGkpKSA9IGNwdV90b19sZTE2KHRtcCk7Ci0JfQotCWlmIChsZW4gJSAyKSB7Ci0JCXRtcCA9IGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1JYREFUQSk7Ci0JCXNrYi0+ZGF0YVtsZW4gLSAxXSA9ICh0bXAgJiAweDAwRkYpOwotLyogVGhlIHNwZWNzIHNheSB0aGUgZm9sbG93aW5nIGlzIHJlcXVpcmVkLCBidXQKLSAqIGl0IGlzIHdyb25nIGFuZCBjb3JydXB0cyB0aGUgUExDUC4gSWYgd2UgZG9uJ3QgZG8KLSAqIHRoaXMsIHRoZSBQTENQIHNlZW1zIHRvIGJlIGNvcnJlY3QuIFNvIGlmZGVmIGl0IG91dCBmb3Igbm93LgotICovCi0jaWYgMAotCQlpZiAocnhmbGFnczIgJiBCQ000M3h4X1JYSERSX0ZMQUdTMl9UWVBFMkZSQU1FKQotCQkJc2tiLT5kYXRhWzJdID0gKHRtcCAmIDB4RkYwMCkgPj4gODsKLQkJZWxzZQotCQkJc2tiLT5kYXRhWzBdID0gKHRtcCAmIDB4RkYwMCkgPj4gODsKLSNlbmRpZgotCX0KLQlza2JfdHJpbShza2IsIGxlbiAtIElFRUU4MDIxMV9GQ1NfTEVOKTsKLQliY200M3h4X3J4KHF1ZXVlLT5iY20sIHNrYiwgcnhoZHIpOwotfQotCi12b2lkIGJjbTQzeHhfcGlvX3R4X3N1c3BlbmQoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQotewotCWJjbTQzeHhfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKHF1ZXVlLT5iY20sIC0xLCAxKTsKLQliY200M3h4X3Bpb193cml0ZShxdWV1ZSwgQkNNNDN4eF9QSU9fVFhDVEwsCi0JCQkgIGJjbTQzeHhfcGlvX3JlYWQocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMKQotCQkJICB8IEJDTTQzeHhfUElPX1RYQ1RMX1NVU1BFTkQpOwotfQotCi12b2lkIGJjbTQzeHhfcGlvX3R4X3Jlc3VtZShzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUpCi17Ci0JYmNtNDN4eF9waW9fd3JpdGUocXVldWUsIEJDTTQzeHhfUElPX1RYQ1RMLAotCQkJICBiY200M3h4X3Bpb19yZWFkKHF1ZXVlLCBCQ000M3h4X1BJT19UWENUTCkKLQkJCSAgJiB+QkNNNDN4eF9QSU9fVFhDVExfU1VTUEVORCk7Ci0JYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMocXVldWUtPmJjbSwgLTEsIC0xKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnF1ZXVlLT50eHF1ZXVlKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmcXVldWUtPnR4dGFzayk7Ci19Ci0KLXZvaWQgYmNtNDN4eF9waW9fZnJlZXplX3R4cXVldWVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waW8gKnBpbzsKLQotCWFzc2VydChiY200M3h4X3VzaW5nX3BpbyhiY20pKTsKLQlwaW8gPSBiY200M3h4X2N1cnJlbnRfcGlvKGJjbSk7Ci0JcGlvLT5xdWV1ZTAtPnR4X2Zyb3plbiA9IDE7Ci0JcGlvLT5xdWV1ZTEtPnR4X2Zyb3plbiA9IDE7Ci0JcGlvLT5xdWV1ZTItPnR4X2Zyb3plbiA9IDE7Ci0JcGlvLT5xdWV1ZTMtPnR4X2Zyb3plbiA9IDE7Ci19Ci0KLXZvaWQgYmNtNDN4eF9waW9fdGhhd190eHF1ZXVlcyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGlvICpwaW87Ci0KLQlhc3NlcnQoYmNtNDN4eF91c2luZ19waW8oYmNtKSk7Ci0JcGlvID0gYmNtNDN4eF9jdXJyZW50X3BpbyhiY20pOwotCXBpby0+cXVldWUwLT50eF9mcm96ZW4gPSAwOwotCXBpby0+cXVldWUxLT50eF9mcm96ZW4gPSAwOwotCXBpby0+cXVldWUyLT50eF9mcm96ZW4gPSAwOwotCXBpby0+cXVldWUzLT50eF9mcm96ZW4gPSAwOwotCWlmICghbGlzdF9lbXB0eSgmcGlvLT5xdWV1ZTAtPnR4cXVldWUpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwaW8tPnF1ZXVlMC0+dHh0YXNrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnBpby0+cXVldWUxLT50eHF1ZXVlKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmcGlvLT5xdWV1ZTEtPnR4dGFzayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZwaW8tPnF1ZXVlMi0+dHhxdWV1ZSkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnBpby0+cXVldWUyLT50eHRhc2spOwotCWlmICghbGlzdF9lbXB0eSgmcGlvLT5xdWV1ZTMtPnR4cXVldWUpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwaW8tPnF1ZXVlMy0+dHh0YXNrKTsKLX0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNzhhM2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLSNpZm5kZWYgQkNNNDN4eF9QSU9fSF8KLSNkZWZpbmUgQkNNNDN4eF9QSU9fSF8KLQotI2luY2x1ZGUgImJjbTQzeHguaCIKLQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotCi0jZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMCQkweDAwCi0jZGVmaW5lIEJDTTQzeHhfUElPX1RYREFUQQkJMHgwMgotI2RlZmluZSBCQ000M3h4X1BJT19UWFFCVUZTSVpFCQkweDA0Ci0jZGVmaW5lIEJDTTQzeHhfUElPX1JYQ1RMCQkweDA4Ci0jZGVmaW5lIEJDTTQzeHhfUElPX1JYREFUQQkJMHgwQQotCi0jZGVmaW5lIEJDTTQzeHhfUElPX1RYQ1RMX1dSSVRFTE8JKDEgPDwgMCkKLSNkZWZpbmUgQkNNNDN4eF9QSU9fVFhDVExfV1JJVEVISQkoMSA8PCAxKQotI2RlZmluZSBCQ000M3h4X1BJT19UWENUTF9DT01QTEVURQkoMSA8PCAyKQotI2RlZmluZSBCQ000M3h4X1BJT19UWENUTF9JTklUCQkoMSA8PCAzKQotI2RlZmluZSBCQ000M3h4X1BJT19UWENUTF9TVVNQRU5ECSgxIDw8IDcpCi0KLSNkZWZpbmUgQkNNNDN4eF9QSU9fUlhDVExfREFUQUFWQUlMQUJMRQkoMSA8PCAwKQotI2RlZmluZSBCQ000M3h4X1BJT19SWENUTF9SRUFEWQkJKDEgPDwgMSkKLQotLyogUElPIGNvbnN0YW50cyAqLwotI2RlZmluZSBCQ000M3h4X1BJT19NQVhUWERFVlFQQUNLRVRTCTMxCi0jZGVmaW5lIEJDTTQzeHhfUElPX1RYUUFESlVTVAkJODAKLQotLyogUElPIHR1bmluZyBrbm9icyAqLwotI2RlZmluZSBCQ000M3h4X1BJT19NQVhUWFBBQ0tFVFMJMjU2Ci0KLQotCi0jaWZkZWYgQ09ORklHX0JDTTQzWFhfUElPCi0KLQotc3RydWN0IGJjbTQzeHhfcGlvcXVldWU7Ci1zdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzOwotCi1zdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgewotCXN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCXU4IHhtaXR0ZWRfZnJhZ3M7Ci0JdTE2IHhtaXR0ZWRfb2N0ZXRzOwotfTsKLQotI2RlZmluZSBwaW9fdHhwYWNrZXRfZ2V0aW5kZXgocGFja2V0KSAoKGludCkoKHBhY2tldCkgLSAocGFja2V0KS0+cXVldWUtPnR4X3BhY2tldHNfY2FjaGUpKSAKLQotc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbTsKLQl1MTYgbW1pb19iYXNlOwotCi0JdTggdHhfc3VzcGVuZGVkOjEsCi0JICAgdHhfZnJvemVuOjEsCi0JICAgbmVlZF93b3JrYXJvdW5kczoxOyAvKiBXb3JrYXJvdW5kcyBuZWVkZWQgZm9yIGNvcmUucmV2IDwgMyAqLwotCi0JLyogQWRqdXN0ZWQgc2l6ZSBvZiB0aGUgZGV2aWNlIGludGVybmFsIFRYIGJ1ZmZlci4gKi8KLQl1MTYgdHhfZGV2cV9zaXplOwotCS8qIFVzZWQgb2N0ZXRzIG9mIHRoZSBkZXZpY2UgaW50ZXJuYWwgVFggYnVmZmVyLiAqLwotCXUxNiB0eF9kZXZxX3VzZWQ7Ci0JLyogVXNlZCBwYWNrZXQgc2xvdHMgaW4gdGhlIGRldmljZSBpbnRlcm5hbCBUWCBidWZmZXIuICovCi0JdTggdHhfZGV2cV9wYWNrZXRzOwotCS8qIFBhY2tldHMgZnJvbSB0aGUgdHhmcmVlIGxpc3QgY2FuCi0JICogYmUgdGFrZW4gb24gaW5jb21pbmcgVFggcmVxdWVzdHMuCi0JICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eGZyZWU7Ci0JdW5zaWduZWQgaW50IG5yX3R4ZnJlZTsKLQkvKiBQYWNrZXRzIG9uIHRoZSB0eHF1ZXVlIGFyZSBxdWV1ZWQsCi0JICogYnV0IG5vdCBjb21wbGV0ZWx5IHdyaXR0ZW4gdG8gdGhlIGNoaXAsIHlldC4KLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4cXVldWU7Ci0JLyogUGFja2V0cyBvbiB0aGUgdHhydW5uaW5nIHF1ZXVlIGFyZSBjb21wbGV0ZWx5Ci0JICogcG9zdGVkIHRvIHRoZSBkZXZpY2UuIFdlIGFyZSB3YWl0aW5nIGZvciB0aGUgdHhzdGF0dXMuCi0JICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eHJ1bm5pbmc7Ci0JLyogVG90YWwgbnVtYmVyIG9yIHBhY2tldHMgc2VudC4KLQkgKiAoVGhpcyBjb3VudGVyIGNhbiBvYnZpb3VzbHkgd3JhcCkuCi0JICovCi0JdW5zaWduZWQgaW50IG5yX3R4X3BhY2tldHM7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHR4dGFzazsKLQlzdHJ1Y3QgYmNtNDN4eF9waW9fdHhwYWNrZXQgdHhfcGFja2V0c19jYWNoZVtCQ000M3h4X1BJT19NQVhUWFBBQ0tFVFNdOwotfTsKLQotc3RhdGljIGlubGluZQotdTE2IGJjbTQzeHhfcGlvX3JlYWQoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlLAotCQkgICAgIHUxNiBvZmZzZXQpCi17Ci0JcmV0dXJuIGJjbTQzeHhfcmVhZDE2KHF1ZXVlLT5iY20sIHF1ZXVlLT5tbWlvX2Jhc2UgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lCi12b2lkIGJjbTQzeHhfcGlvX3dyaXRlKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSwKLQkJICAgICAgIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKLXsKLQliY200M3h4X3dyaXRlMTYocXVldWUtPmJjbSwgcXVldWUtPm1taW9fYmFzZSArIG9mZnNldCwgdmFsdWUpOwotCW1taW93YigpOwotfQotCi0KLWludCBiY200M3h4X3Bpb19pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci12b2lkIGJjbTQzeHhfcGlvX2ZyZWUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLQotaW50IGJjbTQzeHhfcGlvX3R4KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJICAgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4Yik7Ci12b2lkIGJjbTQzeHhfcGlvX2hhbmRsZV94bWl0c3RhdHVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICBzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzICpzdGF0dXMpOwotdm9pZCBiY200M3h4X3Bpb19yeChzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUpOwotCi0vKiBTdXNwZW5kIGEgVFggcXVldWUgb24gaGFyZHdhcmUgbGV2ZWwuICovCi12b2lkIGJjbTQzeHhfcGlvX3R4X3N1c3BlbmQoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKTsKLXZvaWQgYmNtNDN4eF9waW9fdHhfcmVzdW1lKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSk7Ci0vKiBTdXNwZW5kIChmcmVlemUpIHRoZSBUWCB0YXNrbGV0IChzb2Z0d2FyZSBsZXZlbCkuICovCi12b2lkIGJjbTQzeHhfcGlvX2ZyZWV6ZV90eHF1ZXVlcyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotdm9pZCBiY200M3h4X3Bpb190aGF3X3R4cXVldWVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci0KLSNlbHNlIC8qIENPTkZJR19CQ000M1hYX1BJTyAqLwotCi1zdGF0aWMgaW5saW5lCi1pbnQgYmNtNDN4eF9waW9faW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lCi12b2lkIGJjbTQzeHhfcGlvX2ZyZWUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotfQotc3RhdGljIGlubGluZQotaW50IGJjbTQzeHhfcGlvX3R4KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJICAgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9waW9faGFuZGxlX3htaXRzdGF0dXMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgIHN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnN0YXR1cykKLXsKLX0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9waW9fcngoc3RydWN0IGJjbTQzeHhfcGlvcXVldWUgKnF1ZXVlKQotewotfQotc3RhdGljIGlubGluZQotdm9pZCBiY200M3h4X3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKLXsKLX0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9waW9fdHhfcmVzdW1lKHN0cnVjdCBiY200M3h4X3Bpb3F1ZXVlICpxdWV1ZSkKLXsKLX0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9waW9fZnJlZXplX3R4cXVldWVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLX0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgYmNtNDN4eF9waW9fdGhhd190eHF1ZXVlcyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfQkNNNDNYWF9QSU8gKi8KLSNlbmRpZiAvKiBCQ000M3h4X1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U3NzRmNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcG93ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi0vKgotCi0gIEJyb2FkY29tIEJDTTQzeHggd2lyZWxlc3MgZHJpdmVyCi0KLSAgQ29weXJpZ2h0IChjKSAyMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPiwKLSAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbm8gQnJpdmlvIDxzdDNAcmlzZXVwLm5ldD4KLSAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+Ci0gICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAgICAgICAgICAgICAgICAgICAgIEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgotCi0gIFNvbWUgcGFydHMgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzIyMDAKLSAgZHJpdmVyICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlICJiY200M3h4LmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9wb3dlci5oIgotI2luY2x1ZGUgImJjbTQzeHhfbWFpbi5oIgotCi0KLS8qIEdldCB0aGUgU2xvdyBDbG9jayBTb3VyY2UgKi8KLXN0YXRpYyBpbnQgYmNtNDN4eF9wY3RsX2dldF9zbG93Y2xrc3JjKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQl1MzIgdG1wOwotCWludCBlcnI7Ci0KLQlhc3NlcnQoYmNtLT5jdXJyZW50X2NvcmUgPT0gJmJjbS0+Y29yZV9jaGlwY29tbW9uKTsKLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDYpIHsKLQkJaWYgKGJjbS0+YnVzdHlwZSA9PSBCQ000M3h4X0JVU1RZUEVfUENNQ0lBIHx8Ci0JCSAgICBiY20tPmJ1c3R5cGUgPT0gQkNNNDN4eF9CVVNUWVBFX1NCKQotCQkJcmV0dXJuIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOwotCQlpZiAoYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9QQ0kpIHsKLQkJCWVyciA9IGJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMzIoYmNtLCBCQ000M3h4X1BDVExfT1VULCAmdG1wKTsKLQkJCWFzc2VydCghZXJyKTsKLQkJCWlmICh0bXAgJiAweDEwKQotCQkJCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSTsKLQkJCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzsKLQkJfQotCX0KLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDEwKSB7Ci0JCXRtcCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NMT1dDTEtDVEwpOwotCQl0bXAgJj0gMHg3OwotCQlpZiAodG1wID09IDApCi0JCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19MT1BXUk9TOwotCQlpZiAodG1wID09IDEpCi0JCQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1M7Ci0JCWlmICh0bXAgPT0gMikKLQkJCXJldHVybiBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSTsKLQl9Ci0KLQlyZXR1cm4gQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1M7Ci19Ci0KLS8qIEdldCBtYXgvbWluIHNsb3djbG9jayBmcmVxdWVuY3kKLSAqIGFzIGRlc2NyaWJlZCBpbiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvUG93ZXJDb250cm9sCi0gKi8KLXN0YXRpYyBpbnQgYmNtNDN4eF9wY3RsX2Nsb2NrZnJlcWxpbWl0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICAgICAgaW50IGdldF9tYXgpCi17Ci0JaW50IGxpbWl0OwotCWludCBjbG9ja3NyYzsKLQlpbnQgZGl2aXNvcjsKLQl1MzIgdG1wOwotCi0JYXNzZXJ0KGJjbS0+Y2hpcGNvbW1vbl9jYXBhYmlsaXRpZXMgJiBCQ000M3h4X0NBUEFCSUxJVElFU19QQ1RMKTsKLQlhc3NlcnQoYmNtLT5jdXJyZW50X2NvcmUgPT0gJmJjbS0+Y29yZV9jaGlwY29tbW9uKTsKLQotCWNsb2Nrc3JjID0gYmNtNDN4eF9wY3RsX2dldF9zbG93Y2xrc3JjKGJjbSk7Ci0JaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA2KSB7Ci0JCXN3aXRjaCAoY2xvY2tzcmMpIHsKLQkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1BDSToKLQkJCWRpdmlzb3IgPSA2NDsKLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOgotCQkJZGl2aXNvciA9IDMyOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQoMCk7Ci0JCQlkaXZpc29yID0gMTsKLQkJfQotCX0gZWxzZSBpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDEwKSB7Ci0JCXN3aXRjaCAoY2xvY2tzcmMpIHsKLQkJY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX0xPUFdST1M6Ci0JCQlkaXZpc29yID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfWFRBTE9TOgotCQljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfUENJOgotCQkJdG1wID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NISVBDT01NT05fU0xPV0NMS0NUTCk7Ci0JCQlkaXZpc29yID0gKCh0bXAgJiAweEZGRkYwMDAwKSA+PiAxNikgKyAxOwotCQkJZGl2aXNvciAqPSA0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhc3NlcnQoMCk7Ci0JCQlkaXZpc29yID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCXRtcCA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NZU0NMS0NUTCk7Ci0JCWRpdmlzb3IgPSAoKHRtcCAmIDB4RkZGRjAwMDApID4+IDE2KSArIDE7Ci0JCWRpdmlzb3IgKj0gNDsKLQl9Ci0KLQlzd2l0Y2ggKGNsb2Nrc3JjKSB7Ci0JY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX0xPUFdST1M6Ci0JCWlmIChnZXRfbWF4KQotCQkJbGltaXQgPSA0MzAwMDsKLQkJZWxzZQotCQkJbGltaXQgPSAyNTAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BDVExfQ0xLU1JDX1hUQUxPUzoKLQkJaWYgKGdldF9tYXgpCi0JCQlsaW1pdCA9IDIwMjAwMDAwOwotCQllbHNlCi0JCQlsaW1pdCA9IDE5ODAwMDAwOwotCQlicmVhazsKLQljYXNlIEJDTTQzeHhfUENUTF9DTEtTUkNfUENJOgotCQlpZiAoZ2V0X21heCkKLQkJCWxpbWl0ID0gMzQwMDAwMDA7Ci0JCWVsc2UKLQkJCWxpbWl0ID0gMjUwMDAwMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFzc2VydCgwKTsKLQkJbGltaXQgPSAwOwotCX0KLQlsaW1pdCAvPSBkaXZpc29yOwotCi0JcmV0dXJuIGxpbWl0OwotfQotCi0KLS8qIGluaXQgcG93ZXIgY29udHJvbAotICogYXMgZGVzY3JpYmVkIGluIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9Qb3dlckNvbnRyb2wKLSAqLwotaW50IGJjbTQzeHhfcGN0bF9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlpbnQgZXJyLCBtYXhmcmVxOwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpvbGRfY29yZTsKLQotCW9sZF9jb3JlID0gYmNtLT5jdXJyZW50X2NvcmU7Ci0JZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfY2hpcGNvbW1vbik7Ci0JaWYgKGVyciA9PSAtRU5PREVWKQotCQlyZXR1cm4gMDsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWlmIChiY20tPmNoaXBfaWQgPT0gMHg0MzIxKSB7Ci0JCWlmIChiY20tPmNoaXBfcmV2ID09IDApCi0JCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NISVBDT01NT05fQ1RMLCAweDAzQTQpOwotCQlpZiAoYmNtLT5jaGlwX3JldiA9PSAxKQotCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX0NUTCwgMHgwMEE0KTsKLQl9Ci0KLQlpZiAoYmNtLT5jaGlwY29tbW9uX2NhcGFiaWxpdGllcyAmIEJDTTQzeHhfQ0FQQUJJTElUSUVTX1BDVEwpIHsKLQkJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPj0gMTApIHsKLQkJCS8qIFNldCBJZGxlIFBvd2VyIGNsb2NrIHJhdGUgdG8gMU1oeiAqLwotCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NZU0NMS0NUTCwKLQkJCQkgICAgICAgKGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NZU0NMS0NUTCkKLQkJCQkgICAgICAgJiAweDAwMDBGRkZGKSB8IDB4NDAwMDApOwotCQl9IGVsc2UgewotCQkJbWF4ZnJlcSA9IGJjbTQzeHhfcGN0bF9jbG9ja2ZyZXFsaW1pdChiY20sIDEpOwotCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1BMTE9OREVMQVksCi0JCQkJICAgICAgIChtYXhmcmVxICogMTUwICsgOTk5OTk5KSAvIDEwMDAwMDApOwotCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX0ZSRUZTRUxERUxBWSwKLQkJCQkgICAgICAgKG1heGZyZXEgKiAxNSArIDk5OTk5OSkgLyAxMDAwMDAwKTsKLQkJfQotCX0KLQotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBvbGRfY29yZSk7Ci0JYXNzZXJ0KGVyciA9PSAwKTsKLQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXUxNiBiY200M3h4X3BjdGxfcG93ZXJ1cF9kZWxheShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0JdTE2IGRlbGF5ID0gMDsKLQlpbnQgZXJyOwotCXUzMiBwbGxfb25fZGVsYXk7Ci0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKm9sZF9jb3JlOwotCWludCBtaW5mcmVxOwotCi0JaWYgKGJjbS0+YnVzdHlwZSAhPSBCQ000M3h4X0JVU1RZUEVfUENJKQotCQlnb3RvIG91dDsKLQlpZiAoIShiY20tPmNoaXBjb21tb25fY2FwYWJpbGl0aWVzICYgQkNNNDN4eF9DQVBBQklMSVRJRVNfUENUTCkpCi0JCWdvdG8gb3V0OwotCW9sZF9jb3JlID0gYmNtLT5jdXJyZW50X2NvcmU7Ci0JZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfY2hpcGNvbW1vbik7Ci0JaWYgKGVyciA9PSAtRU5PREVWKQotCQlnb3RvIG91dDsKLQotCW1pbmZyZXEgPSBiY200M3h4X3BjdGxfY2xvY2tmcmVxbGltaXQoYmNtLCAwKTsKLQlwbGxfb25fZGVsYXkgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9QTExPTkRFTEFZKTsKLQlkZWxheSA9ICgoKHBsbF9vbl9kZWxheSArIDIpICogMTAwMDAwMCkgKyAobWluZnJlcSAtIDEpKSAvIG1pbmZyZXE7Ci0KLQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgb2xkX2NvcmUpOwotCWFzc2VydChlcnIgPT0gMCk7Ci0KLW91dDoKLQlyZXR1cm4gZGVsYXk7Ci19Ci0KLS8qIHNldCB0aGUgcG93ZXJjb250cm9sIGNsb2NrCi0gKiBhcyBkZXNjcmliZWQgaW4gaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1Bvd2VyQ29udHJvbAotICovCi1pbnQgYmNtNDN4eF9wY3RsX3NldF9jbG9jayhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBtb2RlKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKm9sZF9jb3JlOwotCXUzMiB0bXA7Ci0KLQlvbGRfY29yZSA9IGJjbS0+Y3VycmVudF9jb3JlOwotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCAmYmNtLT5jb3JlX2NoaXBjb21tb24pOwotCWlmIChlcnIgPT0gLUVOT0RFVikKLQkJcmV0dXJuIDA7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0JCi0JaWYgKGJjbS0+Y29yZV9jaGlwY29tbW9uLnJldiA8IDYpIHsKLQkJaWYgKG1vZGUgPT0gQkNNNDN4eF9QQ1RMX0NMS19GQVNUKSB7Ci0JCQllcnIgPSBiY200M3h4X3BjdGxfc2V0X2NyeXN0YWwoYmNtLCAxKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoKGJjbS0+Y2hpcGNvbW1vbl9jYXBhYmlsaXRpZXMgJiBCQ000M3h4X0NBUEFCSUxJVElFU19QQ1RMKSAmJgotCQkJKGJjbS0+Y29yZV9jaGlwY29tbW9uLnJldiA8IDEwKSkgewotCQkJc3dpdGNoIChtb2RlKSB7Ci0JCQljYXNlIEJDTTQzeHhfUENUTF9DTEtfRkFTVDoKLQkJCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKLQkJCQl0bXAgPSAodG1wICYgfkJDTTQzeHhfUENUTF9GT1JDRV9TTE9XKSB8IEJDTTQzeHhfUENUTF9GT1JDRV9QTEw7Ci0JCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NMT1dDTEtDVEwsIHRtcCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJDTTQzeHhfUENUTF9DTEtfU0xPVzoKLQkJCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKLQkJCQl0bXAgfD0gQkNNNDN4eF9QQ1RMX0ZPUkNFX1NMT1c7Ci0JCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1NMT1dDTEtDVEwsIHRtcCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJDTTQzeHhfUENUTF9DTEtfRFlOQU1JQzoKLQkJCQl0bXAgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMKTsKLQkJCQl0bXAgJj0gfkJDTTQzeHhfUENUTF9GT1JDRV9TTE9XOwotCQkJCXRtcCB8PSBCQ000M3h4X1BDVExfRk9SQ0VfUExMOwotCQkJCXRtcCAmPSB+QkNNNDN4eF9QQ1RMX0RZTl9YVEFMOwotCQkJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TTE9XQ0xLQ1RMLCB0bXApOwotCQkJfQotCQl9Ci0JfQotCQotCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBvbGRfY29yZSk7Ci0JYXNzZXJ0KGVyciA9PSAwKTsKLQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLWludCBiY200M3h4X3BjdGxfc2V0X2NyeXN0YWwoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCBpbnQgb24pCi17Ci0JaW50IGVycjsKLQl1MzIgaW4sIG91dCwgb3V0ZW5hYmxlOwotCi0JZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9JTiwgJmluKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9wY2k7Ci0JZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9PVVQsICZvdXQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3BjaTsKLQllcnIgPSBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ1RMX09VVEVOQUJMRSwgJm91dGVuYWJsZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcGNpOwotCi0Jb3V0ZW5hYmxlIHw9IChCQ000M3h4X1BDVExfWFRBTF9QT1dFUlVQIHwgQkNNNDN4eF9QQ1RMX1BMTF9QT1dFUkRPV04pOwotCi0JaWYgKG9uKSB7Ci0JCWlmIChpbiAmIDB4NDApCi0JCQlyZXR1cm4gMDsKLQotCQlvdXQgfD0gKEJDTTQzeHhfUENUTF9YVEFMX1BPV0VSVVAgfCBCQ000M3h4X1BDVExfUExMX1BPV0VSRE9XTik7Ci0KLQkJZXJyID0gYmNtNDN4eF9wY2lfd3JpdGVfY29uZmlnMzIoYmNtLCBCQ000M3h4X1BDVExfT1VULCBvdXQpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfcGNpOwotCQllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9PVVRFTkFCTEUsIG91dGVuYWJsZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9wY2k7Ci0JCXVkZWxheSgxMDAwKTsKLQotCQlvdXQgJj0gfkJDTTQzeHhfUENUTF9QTExfUE9XRVJET1dOOwotCQllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9PVVQsIG91dCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9wY2k7Ci0JCXVkZWxheSg1MDAwKTsKLQl9IGVsc2UgewotCQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDUpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGJjbS0+c3Byb20uYm9hcmRmbGFncyAmIEJDTTQzeHhfQkZMX1hUQUxfTk9TTE9XKQotCQkJcmV0dXJuIDA7Ci0KLS8qCQlYWFg6IFdoeSBCQ000M3h4X01NSU9fUkFESU9fSFdFTkFCTEVEX3h4IGNhbid0IGJlIHJlYWQgYXQgdGhpcyB0aW1lPwotICoJCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBiY20tPmFjdGl2ZV84MDIxMV9jb3JlKTsKLSAqCQlpZiAoZXJyKQotICoJCQlyZXR1cm4gZXJyOwotICoJCWlmICgoKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPj0gMykgJiYKLSAqCQkJKGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1JBRElPX0hXRU5BQkxFRF9ISSkgJiAoMSA8PCAxNikpKSB8fAotICoJCSAgICAgICgoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDMpICYmCi0gKgkJCSEoYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fUkFESU9fSFdFTkFCTEVEX0xPKSAmICgxIDw8IDQpKSkpCi0gKgkJCXJldHVybiAwOwotICoJCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCAmYmNtLT5jb3JlX2NoaXBjb21tb24pOwotICoJCWlmIChlcnIpCi0gKgkJCXJldHVybiBlcnI7Ci0gKi8KLQkJCi0JCWVyciA9IGJjbTQzeHhfcGN0bF9zZXRfY2xvY2soYmNtLCBCQ000M3h4X1BDVExfQ0xLX1NMT1cpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JCW91dCAmPSB+QkNNNDN4eF9QQ1RMX1hUQUxfUE9XRVJVUDsKLQkJb3V0IHw9IEJDTTQzeHhfUENUTF9QTExfUE9XRVJET1dOOwotCQllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWczMihiY20sIEJDTTQzeHhfUENUTF9PVVQsIG91dCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9wY2k7Ci0JCWVyciA9IGJjbTQzeHhfcGNpX3dyaXRlX2NvbmZpZzMyKGJjbSwgQkNNNDN4eF9QQ1RMX09VVEVOQUJMRSwgb3V0ZW5hYmxlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX3BjaTsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyOwotCi1lcnJfcGNpOgotCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yOiBwY3RsX3NldF9jbG9jaygpIGNvdWxkIG5vdCBhY2Nlc3MgUENJIGNvbmZpZyBzcGFjZSFcbiIpOwotCWVyciA9IC1FQlVTWTsKLQlnb3RvIG91dDsKLX0KLQotLyogU2V0IHRoZSBQb3dlclNhdmluZ0NvbnRyb2xCaXRzLgotICogQml0dmFsdWVzOgotICogICAwICA9PiB1bnNldCB0aGUgYml0Ci0gKiAgIDEgID0+IHNldCB0aGUgYml0Ci0gKiAgIC0xID0+IGNhbGN1bGF0ZSB0aGUgYml0Ci0gKi8KLXZvaWQgYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgIGludCBiaXQyNSwgaW50IGJpdDI2KQotewotCWludCBpOwotCXUzMiBzdGF0dXM7Ci0KLS8vRklYTUU6IEZvcmNlIDI1IHRvIG9mZiBhbmQgMjYgdG8gb24gZm9yIG5vdzoKLWJpdDI1ID0gMDsKLWJpdDI2ID0gMTsKLQotCWlmIChiaXQyNSA9PSAtMSkgewotCQkvL1RPRE86IElmIHBvd2Vyc2F2ZSBpcyBub3Qgb2ZmIGFuZCBGSVhNRSBpcyBub3Qgc2V0IGFuZCB3ZSBhcmUgbm90IGluIGFkaG9jCi0JCS8vCWFuZCB0aHVzIGlzIG5vdCBhbiBBUCBhbmQgd2UgYXJlIGFzc29jaWF0ZWQsIHNldCBiaXQgMjUKLQl9Ci0JaWYgKGJpdDI2ID09IC0xKSB7Ci0JCS8vVE9ETzogSWYgdGhlIGRldmljZSBpcyBhd2FrZSBvciB0aGlzIGlzIGFuIEFQLCBvciB3ZSBhcmUgc2Nhbm5pbmcsIG9yIEZJWE1FLAotCQkvLwlvciB3ZSBhcmUgYXNzb2NpYXRlZCwgb3IgRklYTUUsIG9yIHRoZSBsYXRlc3QgUFMtUG9sbCBwYWNrZXQgc2VudCB3YXMKLQkJLy8Jc3VjY2Vzc2Z1bCwgc2V0IGJpdDI2Ci0JfQotCXN0YXR1cyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7Ci0JaWYgKGJpdDI1KQotCQlzdGF0dXMgfD0gQkNNNDN4eF9TQkZfUFMxOwotCWVsc2UKLQkJc3RhdHVzICY9IH5CQ000M3h4X1NCRl9QUzE7Ci0JaWYgKGJpdDI2KQotCQlzdGF0dXMgfD0gQkNNNDN4eF9TQkZfUFMyOwotCWVsc2UKLQkJc3RhdHVzICY9IH5CQ000M3h4X1NCRl9QUzI7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwgc3RhdHVzKTsKLQlpZiAoYml0MjYgJiYgYmNtLT5jdXJyZW50X2NvcmUtPnJldiA+PSA1KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQkJaWYgKGJjbTQzeHhfc2htX3JlYWQzMihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDQwKSAhPSA0KQotCQkJCWJyZWFrOwotCQkJdWRlbGF5KDEwKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjZhYjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotCi0gIEJyb2FkY29tIEJDTTQzeHggd2lyZWxlc3MgZHJpdmVyCi0KLSAgQ29weXJpZ2h0IChjKSAyMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPiwKLSAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbm8gQnJpdmlvIDxzdDNAcmlzZXVwLm5ldD4KLSAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+Ci0gICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAgICAgICAgICAgICAgICAgICAgIEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgotCi0gIFNvbWUgcGFydHMgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzIyMDAKLSAgZHJpdmVyICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8KLQotI2lmbmRlZiBCQ000M3h4X1BPV0VSX0hfCi0jZGVmaW5lIEJDTTQzeHhfUE9XRVJfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qIENsb2NrIHNvdXJjZXMgKi8KLWVudW0gewotCS8qIFBDSSBjbG9jayAqLwotCUJDTTQzeHhfUENUTF9DTEtTUkNfUENJLAotCS8qIENyeXN0YWwgc2xvdyBjbG9jayBvc2NpbGxhdG9yICovCi0JQkNNNDN4eF9QQ1RMX0NMS1NSQ19YVEFMT1MsCi0JLyogTG93IHBvd2VyIG9zY2lsbGF0b3IgKi8KLQlCQ000M3h4X1BDVExfQ0xLU1JDX0xPUFdST1MsCi19OwotCi1zdHJ1Y3QgYmNtNDN4eF9wcml2YXRlOwotCi1pbnQgYmNtNDN4eF9wY3RsX2luaXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLWludCBiY200M3h4X3BjdGxfc2V0X2Nsb2NrKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG1vZGUpOwotaW50IGJjbTQzeHhfcGN0bF9zZXRfY3J5c3RhbChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIGludCBvbik7Ci11MTYgYmNtNDN4eF9wY3RsX3Bvd2VydXBfZGVsYXkoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLQotdm9pZCBiY200M3h4X3Bvd2VyX3NhdmluZ19jdGxfYml0cyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgaW50IGJpdDI1LCBpbnQgYml0MjYpOwotCi0jZW5kaWYgLyogQkNNNDN4eF9QT1dFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3JhZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcmFkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYwNTA5OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcmFkaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDIxNzAgKzAsMCBAQAotLyoKLQotICBCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlcgotCi0gIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4sCi0gICAgICAgICAgICAgICAgICAgICBTdGVmYW5vIEJyaXZpbyA8c3QzQHJpc2V1cC5uZXQ+Ci0gICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gICAgICAgICAgICAgICAgICAgICBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KLQotICBTb21lIHBhcnRzIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHcyMjAwCi0gIGRyaXZlciAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA0IEludGVsIENvcnBvcmF0aW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSAiYmNtNDN4eC5oIgotI2luY2x1ZGUgImJjbTQzeHhfbWFpbi5oIgotI2luY2x1ZGUgImJjbTQzeHhfcGh5LmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9yYWRpby5oIgotI2luY2x1ZGUgImJjbTQzeHhfaWx0LmgiCi0KLQotLyogVGFibGUgZm9yIGJjbTQzeHhfcmFkaW9fY2FsaWJyYXRpb252YWx1ZSgpICovCi1zdGF0aWMgY29uc3QgdTE2IHJjY190YWJsZVsxNl0gPSB7Ci0JMHgwMDAyLCAweDAwMDMsIDB4MDAwMSwgMHgwMDBGLAotCTB4MDAwNiwgMHgwMDA3LCAweDAwMDUsIDB4MDAwRiwKLQkweDAwMEEsIDB4MDAwQiwgMHgwMDA5LCAweDAwMEYsCi0JMHgwMDBFLCAweDAwMEYsIDB4MDAwRCwgMHgwMDBGLAotfTsKLQotLyogUmV2ZXJzZSB0aGUgYml0cyBvZiBhIDRiaXQgdmFsdWUuCi0gKiBFeGFtcGxlOiAgMTEwMSBpcyBmbGlwcGVkIDEwMTEKLSAqLwotc3RhdGljIHUxNiBmbGlwXzRiaXQodTE2IHZhbHVlKQotewotCXUxNiBmbGlwcGVkID0gMHgwMDAwOwotCi0JYXNzZXJ0KCh2YWx1ZSAmIH4weDAwMEYpID09IDB4MDAwMCk7Ci0KLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwMSkgPDwgMzsKLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwMikgPDwgMTsKLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwNCkgPj4gMTsKLQlmbGlwcGVkIHw9ICh2YWx1ZSAmIDB4MDAwOCkgPj4gMzsKLQotCXJldHVybiBmbGlwcGVkOwotfQotCi0vKiBHZXQgdGhlIGZyZXEsIGFzIGl0IGhhcyB0byBiZSB3cml0dGVuIHRvIHRoZSBkZXZpY2UuICovCi1zdGF0aWMgaW5saW5lCi11MTYgY2hhbm5lbDJmcmVxX2JnKHU4IGNoYW5uZWwpCi17Ci0JLyogRnJlcXVlbmNpZXMgYXJlIGdpdmVuIGFzIGZyZXF1ZW5jaWVzX2JnW2luZGV4XSArIDIuNEdIegotCSAqIFN0YXJ0aW5nIHdpdGggY2hhbm5lbCAxCi0JICovCi0Jc3RhdGljIGNvbnN0IHUxNiBmcmVxdWVuY2llc19iZ1sxNF0gPSB7Ci0JCTEyLCAxNywgMjIsIDI3LAotCQkzMiwgMzcsIDQyLCA0NywKLQkJNTIsIDU3LCA2MiwgNjcsCi0JCTcyLCA4NCwKLQl9OwotCi0JYXNzZXJ0KGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KTsKLQotCXJldHVybiBmcmVxdWVuY2llc19iZ1tjaGFubmVsIC0gMV07Ci19Ci0KLS8qIEdldCB0aGUgZnJlcSwgYXMgaXQgaGFzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGRldmljZS4gKi8KLXN0YXRpYyBpbmxpbmUKLXUxNiBjaGFubmVsMmZyZXFfYSh1OCBjaGFubmVsKQotewotCWFzc2VydChjaGFubmVsIDw9IDIwMCk7Ci0KLQlyZXR1cm4gKDUwMDAgKyA1ICogY2hhbm5lbCk7Ci19Ci0KLXZvaWQgYmNtNDN4eF9yYWRpb19sb2NrKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQl1MzIgc3RhdHVzOwotCi0Jc3RhdHVzID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxEKTsKLQlzdGF0dXMgfD0gQkNNNDN4eF9TQkZfUkFESU9SRUdfTE9DSzsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxELCBzdGF0dXMpOwotCW1taW93YigpOwotCXVkZWxheSgxMCk7Ci19Ci0KLXZvaWQgYmNtNDN4eF9yYWRpb191bmxvY2soc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXUzMiBzdGF0dXM7Ci0KLQliY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19QSFlfVkVSKTsgLyogZHVtbXkgcmVhZCAqLwotCXN0YXR1cyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7Ci0Jc3RhdHVzICY9IH5CQ000M3h4X1NCRl9SQURJT1JFR19MT0NLOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsIHN0YXR1cyk7Ci0JbW1pb3diKCk7Ci19Ci0KLXUxNiBiY200M3h4X3JhZGlvX3JlYWQxNihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQotCXN3aXRjaCAocGh5LT50eXBlKSB7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQkJb2Zmc2V0IHw9IDB4MDA0MDsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQjoKLQkJaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MykgewotCQkJaWYgKG9mZnNldCA8IDB4NzApCi0JCQkJb2Zmc2V0ICs9IDB4ODA7Ci0JCQllbHNlIGlmIChvZmZzZXQgPCAweDgwKQotCQkJCW9mZnNldCArPSAweDcwOwotCQl9IGVsc2UgaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgewotCQkJb2Zmc2V0IHw9IDB4ODA7Ci0JCX0gZWxzZQotCQkJYXNzZXJ0KDApOwotCQlicmVhazsKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQlvZmZzZXQgfD0gMHg4MDsKLQkJYnJlYWs7Ci0JfQotCi0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX1JBRElPX0NPTlRST0wsIG9mZnNldCk7Ci0JcmV0dXJuIGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX1JBRElPX0RBVEFfTE9XKTsKLX0KLQotdm9pZCBiY200M3h4X3JhZGlvX3dyaXRlMTYoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0LCB1MTYgdmFsKQotewotCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19SQURJT19DT05UUk9MLCBvZmZzZXQpOwotCW1taW93YigpOwotCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19SQURJT19EQVRBX0xPVywgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9zZXRfYWxsX2dhaW5zKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgIHMxNiBmaXJzdCwgczE2IHNlY29uZCwgczE2IHRoaXJkKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQl1MTYgaTsKLQl1MTYgc3RhcnQgPSAweDA4LCBlbmQgPSAweDE4OwotCXUxNiBvZmZzZXQgPSAweDA0MDA7Ci0JdTE2IHRtcDsKLQotCWlmIChwaHktPnJldiA8PSAxKSB7Ci0JCW9mZnNldCA9IDB4NTAwMDsKLQkJc3RhcnQgPSAweDEwOwotCQllbmQgPSAweDIwOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgb2Zmc2V0ICsgaSwgZmlyc3QpOwotCi0JZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCBvZmZzZXQgKyBpLCBzZWNvbmQpOwotCi0JaWYgKHRoaXJkICE9IC0xKSB7Ci0JCXRtcCA9ICgodTE2KXRoaXJkIDw8IDE0KSB8ICgodTE2KXRoaXJkIDw8IDYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBMCwKLQkJICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTApICYgMHhCRkJGKSB8IHRtcCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEExLAotCQkgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBMSkgJiAweEJGQkYpIHwgdG1wKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTIsCi0JCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEEyKSAmIDB4QkZCRikgfCB0bXApOwotCX0KLQliY200M3h4X2R1bW15X3RyYW5zbWlzc2lvbihiY20pOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X3NldF9vcmlnaW5hbF9nYWlucyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXUxNiBpLCB0bXA7Ci0JdTE2IG9mZnNldCA9IDB4MDQwMDsKLQl1MTYgc3RhcnQgPSAweDAwMDgsIGVuZCA9IDB4MDAxODsKLQotCWlmIChwaHktPnJldiA8PSAxKSB7Ci0JCW9mZnNldCA9IDB4NTAwMDsKLQkJc3RhcnQgPSAweDAwMTA7Ci0JCWVuZCA9IDB4MDAyMDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXRtcCA9IChpICYgMHhGRkZDKTsKLQkJdG1wIHw9IChpICYgMHgwMDAxKSA8PCAxOwotCQl0bXAgfD0gKGkgJiAweDAwMDIpID4+IDE7Ci0KLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCBvZmZzZXQgKyBpLCB0bXApOwotCX0KLQotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0JCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgb2Zmc2V0ICsgaSwgaSAtIHN0YXJ0KTsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEEwLAotCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEEwKSAmIDB4QkZCRikgfCAweDQwNDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEExLAotCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEExKSAmIDB4QkZCRikgfCAweDQwNDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEEyLAotCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEEyKSAmIDB4QkZCRikgfCAweDQwMDApOwotCWJjbTQzeHhfZHVtbXlfdHJhbnNtaXNzaW9uKGJjbSk7Ci19Ci0KLS8qIFN5bnRoZXRpYyBQVSB3b3JrYXJvdW5kICovCi1zdGF0aWMgdm9pZCBiY200M3h4X3N5bnRoX3B1X3dvcmthcm91bmQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1OCBjaGFubmVsKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQkKLQlpZiAocmFkaW8tPnZlcnNpb24gIT0gMHgyMDUwIHx8IHJhZGlvLT5yZXZpc2lvbiA+PSA2KSB7Ci0JCS8qIFdlIGRvIG5vdCBuZWVkIHRoZSB3b3JrYXJvdW5kLiAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNoYW5uZWwgPD0gMTApIHsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUwsCi0JCQkJY2hhbm5lbDJmcmVxX2JnKGNoYW5uZWwgKyA0KSk7Ci0JfSBlbHNlIHsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUwsCi0JCQkJY2hhbm5lbDJmcmVxX2JnKDEpKTsKLQl9Ci0JdWRlbGF5KDEwMCk7Ci0JYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUwsCi0JCQljaGFubmVsMmZyZXFfYmcoY2hhbm5lbCkpOwotfQotCi11OCBiY200M3h4X3JhZGlvX2FjaV9kZXRlY3Qoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1OCBjaGFubmVsKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQl1OCByZXQgPSAwOwotCXUxNiBzYXZlZCwgcnNzaSwgdGVtcDsKLQlpbnQgaSwgaiA9IDA7Ci0KLQlzYXZlZCA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MDMpOwotCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIGNoYW5uZWwsIDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDAzLCAoc2F2ZWQgJiAweEZGRjgpIHwgNSk7Ci0JaWYgKHJhZGlvLT5hY2lfaHdfcnNzaSkKLQkJcnNzaSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEEpICYgMHgzRjsKLQllbHNlCi0JCXJzc2kgPSBzYXZlZCAmIDB4M0Y7Ci0JLyogY2xhbXAgdGVtcCB0byBzaWduZWQgNWJpdCAqLwotCWlmIChyc3NpID4gMzIpCi0JCXJzc2kgLT0gNjQ7Ci0JZm9yIChpID0gMDtpIDwgMTAwOyBpKyspIHsKLQkJdGVtcCA9IChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDdGKSA+PiA4KSAmIDB4M0Y7Ci0JCWlmICh0ZW1wID4gMzIpCi0JCQl0ZW1wIC09IDY0OwotCQlpZiAodGVtcCA8IHJzc2kpCi0JCQlqKys7Ci0JCWlmIChqID49IDIwKQotCQkJcmV0ID0gMTsKLQl9Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MDMsIHNhdmVkKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXU4IGJjbTQzeHhfcmFkaW9fYWNpX3NjYW4oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0JdTggcmV0WzEzXTsKLQl1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IHJhZGlvLT5jaGFubmVsOwotCXVuc2lnbmVkIGludCBpLCBqLCBzdGFydCwgZW5kOwotCXVuc2lnbmVkIGxvbmcgcGh5bG9ja19mbGFnczsKLQotCWlmICghKChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpICYmIChwaHktPnJldiA+IDApKSkKLQkJcmV0dXJuIDA7Ci0KLQliY200M3h4X3BoeV9sb2NrKGJjbSwgcGh5bG9ja19mbGFncyk7Ci0JYmNtNDN4eF9yYWRpb19sb2NrKGJjbSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MDIsCi0JICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMikgJiAweEZGRkMpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMsCi0JICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0dfQ1JTKSAmIDB4N0ZGRik7Ci0JYmNtNDN4eF9zZXRfYWxsX2dhaW5zKGJjbSwgMywgOCwgMSk7Ci0KLQlzdGFydCA9IChjaGFubmVsIC0gNSA+IDApID8gY2hhbm5lbCAtIDUgOiAxOwotCWVuZCA9IChjaGFubmVsICsgNSA8IDE0KSA/IGNoYW5uZWwgKyA1IDogMTM7Ci0KLQlmb3IgKGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykgewotCQlpZiAoYWJzKGNoYW5uZWwgLSBpKSA+IDIpCi0JCQlyZXRbaS0xXSA9IGJjbTQzeHhfcmFkaW9fYWNpX2RldGVjdChiY20sIGkpOwotCX0KLQliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCBjaGFubmVsLCAwKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMiwKLQkgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMikgJiAweEZGRkMpIHwgMHgwMDAzKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQwMywKLQkgICAgICAgICAgICAgICAgICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDAzKSAmIDB4RkZGOCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9HX0NSUywKLQkgICAgICAgICAgICAgICAgICBiY200M3h4X3BoeV9yZWFkKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMpIHwgMHg4MDAwKTsKLQliY200M3h4X3NldF9vcmlnaW5hbF9nYWlucyhiY20pOwotCWZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKSB7Ci0JCWlmICghcmV0W2ldKQotCQkJY29udGludWU7Ci0JCWVuZCA9IChpICsgNSA8IDEzKSA/IGkgKyA1IDogMTM7Ci0JCWZvciAoaiA9IGk7IGogPCBlbmQ7IGorKykKLQkJCXJldFtqXSA9IDE7Ci0JfQotCWJjbTQzeHhfcmFkaW9fdW5sb2NrKGJjbSk7Ci0JYmNtNDN4eF9waHlfdW5sb2NrKGJjbSwgcGh5bG9ja19mbGFncyk7Ci0KLQlyZXR1cm4gcmV0W2NoYW5uZWwgLSAxXTsKLX0KLQotLyogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L05SU1NJTG9va3VwVGFibGUgKi8KLXZvaWQgYmNtNDN4eF9ucnNzaV9od193cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQsIHMxNiB2YWwpCi17Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9OUlNTSUxUX0NUUkwsIG9mZnNldCk7Ci0JbW1pb3diKCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9OUlNTSUxUX0RBVEEsICh1MTYpdmFsKTsKLX0KLQotLyogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L05SU1NJTG9va3VwVGFibGUgKi8KLXMxNiBiY200M3h4X25yc3NpX2h3X3JlYWQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0KQotewotCXUxNiB2YWw7Ci0KLQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX05SU1NJTFRfQ1RSTCwgb2Zmc2V0KTsKLQl2YWwgPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgQkNNNDN4eF9QSFlfTlJTU0lMVF9EQVRBKTsKLQotCXJldHVybiAoczE2KXZhbDsKLX0KLQotLyogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L05SU1NJTG9va3VwVGFibGUgKi8KLXZvaWQgYmNtNDN4eF9ucnNzaV9od191cGRhdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgdmFsKQotewotCXUxNiBpOwotCXMxNiB0bXA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQl0bXAgPSBiY200M3h4X25yc3NpX2h3X3JlYWQoYmNtLCBpKTsKLQkJdG1wIC09IHZhbDsKLQkJdG1wID0gbGltaXRfdmFsdWUodG1wLCAtMzIsIDMxKTsKLQkJYmNtNDN4eF9ucnNzaV9od193cml0ZShiY20sIGksIHRtcCk7Ci0JfQotfQotCi0vKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvTlJTU0lMb29rdXBUYWJsZSAqLwotdm9pZCBiY200M3h4X25yc3NpX21lbV91cGRhdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQlzMTYgaSwgZGVsdGE7Ci0JczMyIHRtcDsKLQotCWRlbHRhID0gMHgxRiAtIHJhZGlvLT5ucnNzaVswXTsKLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQl0bXAgPSAoaSAtIGRlbHRhKSAqIHJhZGlvLT5ucnNzaXNsb3BlOwotCQl0bXAgLz0gMHgxMDAwMDsKLQkJdG1wICs9IDB4M0E7Ci0JCXRtcCA9IGxpbWl0X3ZhbHVlKHRtcCwgMCwgMHgzRik7Ci0JCXJhZGlvLT5ucnNzaV9sdFtpXSA9IHRtcDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJjbTQzeHhfY2FsY19ucnNzaV9vZmZzZXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQl1MTYgYmFja3VwWzIwXSA9IHsgMCB9OwotCXMxNiB2NDdGOwotCXUxNiBpOwotCXUxNiBzYXZlZCA9IDB4RkZGRjsKLQotCWJhY2t1cFswXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMDEpOwotCWJhY2t1cFsxXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTEpOwotCWJhY2t1cFsyXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTIpOwotCWJhY2t1cFszXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTQpOwotCWJhY2t1cFs0XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTUpOwotCWJhY2t1cFs1XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNUEpOwotCWJhY2t1cFs2XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNTkpOwotCWJhY2t1cFs3XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNTgpOwotCWJhY2t1cFs4XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMEEpOwotCWJhY2t1cFs5XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMDMpOwotCWJhY2t1cFsxMF0gPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSk7Ci0JYmFja3VwWzExXSA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDQzKTsKLQotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDI5LAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDI5KSAmIDB4N0ZGRik7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDEsCi0JCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDAxKSAmIDB4M0ZGRikgfCAweDQwMDApOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODExKSB8IDB4MDAwQyk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsCi0JCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKSAmIDB4RkZGMykgfCAweDAwMDQpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODAyLAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODAyKSAmIH4oMHgxIHwgMHgyKSk7Ci0JaWYgKHBoeS0+cmV2ID49IDYpIHsKLQkJYmFja3VwWzEyXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkUpOwotCQliYWNrdXBbMTNdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyRik7Ci0JCWJhY2t1cFsxNF0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODBGKTsKLQkJYmFja3VwWzE1XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTApOwotCQliYWNrdXBbMTZdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMSk7Ci0JCWJhY2t1cFsxN10gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDYwKTsKLQkJYmFja3VwWzE4XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTQpOwotCQliYWNrdXBbMTldID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ3OCk7Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkUsIDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyRiwgMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODBGLCAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTAsIDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ3OCwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0NzgpIHwgMHgwMTAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MDEsCi0JCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODAxKSB8IDB4MDA0MCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDYwLAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA2MCkgfCAweDAwNDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNCwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTQpIHwgMHgwMjAwKTsKLQl9Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLAotCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpIHwgMHgwMDcwKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgfCAweDAwODApOwotCXVkZWxheSgzMCk7Ci0KLQl2NDdGID0gKHMxNikoKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKLQlpZiAodjQ3RiA+PSAweDIwKQotCQl2NDdGIC09IDB4NDA7Ci0JaWYgKHY0N0YgPT0gMzEpIHsKLQkJZm9yIChpID0gNzsgaSA+PSA0OyBpLS0pIHsKLQkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QiwgaSk7Ci0JCQl1ZGVsYXkoMjApOwotCQkJdjQ3RiA9IChzMTYpKChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7Ci0JCQlpZiAodjQ3RiA+PSAweDIwKQotCQkJCXY0N0YgLT0gMHg0MDsKLQkJCWlmICh2NDdGIDwgMzEgJiYgc2F2ZWQgPT0gMHhGRkZGKQotCQkJCXNhdmVkID0gaTsKLQkJfQotCQlpZiAoc2F2ZWQgPT0gMHhGRkZGKQotCQkJc2F2ZWQgPSA0OwotCX0gZWxzZSB7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwKLQkJCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgJiAweDAwN0YpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNCwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTQpIHwgMHgwMDAxKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTUsCi0JCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODE1KSAmIDB4RkZGRSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMSkgfCAweDAwMEMpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTIpIHwgMHgwMDBDKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsCi0JCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODExKSB8IDB4MDAzMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMikgfCAweDAwMzApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1QSwgMHgwNDgwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTksIDB4MDgxMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCAweDAwMEQpOwotCQlpZiAocGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDMsIDB4MDEyMik7Ci0JCX0gZWxzZSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAwQSwKLQkJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDBBKQotCQkJCQkgIHwgMHgyMDAwKTsKLQkJfQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNCwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTQpIHwgMHgwMDA0KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTUsCi0JCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODE1KSAmIDB4RkZGQik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDAzLAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMDMpICYgMHhGRjlGKQotCQkJCSAgfCAweDAwNDApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpIHwgMHgwMDBGKTsKLQkJYmNtNDN4eF9zZXRfYWxsX2dhaW5zKGJjbSwgMywgMCwgMSk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywKLQkJCQkgICAgICAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNDMpCi0JCQkJICAgICAgICYgMHgwMEYwKSB8IDB4MDAwRik7Ci0JCXVkZWxheSgzMCk7Ci0JCXY0N0YgPSAoczE2KSgoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ3RikgPj4gOCkgJiAweDAwM0YpOwotCQlpZiAodjQ3RiA+PSAweDIwKQotCQkJdjQ3RiAtPSAweDQwOwotCQlpZiAodjQ3RiA9PSAtMzIpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0IsIGkpOwotCQkJCXVkZWxheSgyMCk7Ci0JCQkJdjQ3RiA9IChzMTYpKChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7Ci0JCQkJaWYgKHY0N0YgPj0gMHgyMCkKLQkJCQkJdjQ3RiAtPSAweDQwOwotCQkJCWlmICh2NDdGID4gLTMxICYmIHNhdmVkID09IDB4RkZGRikKLQkJCQkJc2F2ZWQgPSBpOwotCQkJfQotCQkJaWYgKHNhdmVkID09IDB4RkZGRikKLQkJCQlzYXZlZCA9IDM7Ci0JCX0gZWxzZQotCQkJc2F2ZWQgPSAwOwotCX0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0IsIHNhdmVkKTsKLQotCWlmIChwaHktPnJldiA+PSA2KSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJFLCBiYWNrdXBbMTJdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkYsIGJhY2t1cFsxM10pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwRiwgYmFja3VwWzE0XSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEwLCBiYWNrdXBbMTVdKTsKLQl9Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTQsIGJhY2t1cFszXSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTUsIGJhY2t1cFs0XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNUEsIGJhY2t1cFs1XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTksIGJhY2t1cFs2XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTgsIGJhY2t1cFs3XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMEEsIGJhY2t1cFs4XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDMsIGJhY2t1cFs5XSk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDQzLCBiYWNrdXBbMTFdKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsIGJhY2t1cFsxMF0pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODAyLAotCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODAyKSB8IDB4MSB8IDB4Mik7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MjksCi0JCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MjkpIHwgMHg4MDAwKTsKLQliY200M3h4X3NldF9vcmlnaW5hbF9nYWlucyhiY20pOwotCWlmIChwaHktPnJldiA+PSA2KSB7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODAxLCBiYWNrdXBbMTZdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNjAsIGJhY2t1cFsxN10pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNCwgYmFja3VwWzE4XSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDc4LCBiYWNrdXBbMTldKTsKLQl9Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDEsIGJhY2t1cFswXSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsIGJhY2t1cFsyXSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsIGJhY2t1cFsxXSk7Ci19Ci0KLXZvaWQgYmNtNDN4eF9jYWxjX25yc3NpX3Nsb3BlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBiYWNrdXBbMThdID0geyAwIH07Ci0JdTE2IHRtcDsKLQlzMTYgbnJzc2kwLCBucnNzaTE7Ci0KLQlzd2l0Y2ggKHBoeS0+dHlwZSkgewotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0I6Ci0JCWJhY2t1cFswXSA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKTsKLQkJYmFja3VwWzFdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNTIpOwotCQliYWNrdXBbMl0gPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA0Myk7Ci0JCWJhY2t1cFszXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMzApOwotCQliYWNrdXBbNF0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDI2KTsKLQkJYmFja3VwWzVdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAxNSk7Ci0JCWJhY2t1cFs2XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkEpOwotCQliYWNrdXBbN10gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDIwKTsKLQkJYmFja3VwWzhdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA1QSk7Ci0JCWJhY2t1cFs5XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNTkpOwotCQliYWNrdXBbMTBdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA1OCk7Ci0JCWJhY2t1cFsxMV0gPSBiY200M3h4X3JlYWQxNihiY20sIDB4MDNFMik7Ci0JCWJhY2t1cFsxMl0gPSBiY200M3h4X3JlYWQxNihiY20sIDB4MDNFNik7Ci0JCWJhY2t1cFsxM10gPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19DSEFOTkVMX0VYVCk7Ci0KLQkJdG1wICA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKTsKLQkJdG1wICY9IChwaHktPnJldiA+PSA1KSA/IDB4MDA3RiA6IDB4MDAwRjsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLCB0bXApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzMCwgMHgwMEZGKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0VDLCAweDdGN0YpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyNiwgMHgwMDAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsCi0JCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDE1KSB8IDB4MDAyMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJBLCAweDA4QTMpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpIHwgMHgwMDgwKTsKLQotCQlucnNzaTAgPSAoczE2KWJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMjcpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpICYgMHgwMDdGKTsKLQkJaWYgKHBoeS0+YW5hbG9nID49IDIpIHsKLQkJCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFNiwgMHgwMDQwKTsKLQkJfSBlbHNlIGlmIChwaHktPmFuYWxvZyA9PSAwKSB7Ci0JCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIDB4MDEyMik7Ci0JCX0gZWxzZSB7Ci0JCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQsCi0JCQkJCWJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhUKSAmIDB4MjAwMCk7Ci0JCX0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjAsIDB4M0YzRik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEYzMzApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA2MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywKLQkJCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA0MykgJiAweDAwRjApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1QSwgMHgwNDgwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTksIDB4MDgxMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCAweDAwMEQpOwotCQl1ZGVsYXkoMjApOwotCi0JCW5yc3NpMSA9IChzMTYpYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAyNyk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDMwLCBiYWNrdXBbM10pOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsIGJhY2t1cFswXSk7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFMiwgYmFja3VwWzExXSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDI2LCBiYWNrdXBbNF0pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgYmFja3VwWzVdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIGJhY2t1cFs2XSk7Ci0JCWJjbTQzeHhfc3ludGhfcHVfd29ya2Fyb3VuZChiY20sIHJhZGlvLT5jaGFubmVsKTsKLQkJaWYgKHBoeS0+YW5hbG9nICE9IDApCi0JCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRjQsIGJhY2t1cFsxM10pOwotCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDIwLCBiYWNrdXBbN10pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1QSwgYmFja3VwWzhdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTksIGJhY2t1cFs5XSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCBiYWNrdXBbMTBdKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUyLCBiYWNrdXBbMV0pOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNDMsIGJhY2t1cFsyXSk7Ci0KLQkJaWYgKG5yc3NpMCA9PSBucnNzaTEpCi0JCQlyYWRpby0+bnJzc2lzbG9wZSA9IDB4MDAwMTAwMDA7Ci0JCWVsc2UgCi0JCQlyYWRpby0+bnJzc2lzbG9wZSA9IDB4MDA0MDAwMDAgLyAobnJzc2kwIC0gbnJzc2kxKTsKLQotCQlpZiAobnJzc2kwIDw9IC00KSB7Ci0JCQlyYWRpby0+bnJzc2lbMF0gPSBucnNzaTA7Ci0JCQlyYWRpby0+bnJzc2lbMV0gPSBucnNzaTE7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfRzoKLQkJaWYgKHJhZGlvLT5yZXZpc2lvbiA+PSA5KQotCQkJcmV0dXJuOwotCQlpZiAocmFkaW8tPnJldmlzaW9uID09IDgpCi0JCQliY200M3h4X2NhbGNfbnJzc2lfb2Zmc2V0KGJjbSk7Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9HX0NSUywKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9HX0NSUykgJiAweDdGRkYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMiwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MDIpICYgMHhGRkZDKTsKLQkJYmFja3VwWzddID0gYmNtNDN4eF9yZWFkMTYoYmNtLCAweDAzRTIpOwotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTIsCi0JCQkJYmNtNDN4eF9yZWFkMTYoYmNtLCAweDAzRTIpIHwgMHg4MDAwKTsKLQkJYmFja3VwWzBdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpOwotCQliYWNrdXBbMV0gPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA1Mik7Ci0JCWJhY2t1cFsyXSA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDQzKTsKLQkJYmFja3VwWzNdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAxNSk7Ci0JCWJhY2t1cFs0XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNUEpOwotCQliYWNrdXBbNV0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDU5KTsKLQkJYmFja3VwWzZdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA1OCk7Ci0JCWJhY2t1cFs4XSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgMHgwM0U2KTsKLQkJYmFja3VwWzldID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQpOwotCQlpZiAocGh5LT5yZXYgPj0gMykgewotCQkJYmFja3VwWzEwXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkUpOwotCQkJYmFja3VwWzExXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkYpOwotCQkJYmFja3VwWzEyXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MEYpOwotCQkJYmFja3VwWzEzXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9HX0xPX0NPTlRST0wpOwotCQkJYmFja3VwWzE0XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MDEpOwotCQkJYmFja3VwWzE1XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNjApOwotCQkJYmFja3VwWzE2XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTQpOwotCQkJYmFja3VwWzE3XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0NzgpOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkUsIDApOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9HX0xPX0NPTlRST0wsIDApOwotCQkJc3dpdGNoIChwaHktPnJldikgewotCQkJY2FzZSA0OiBjYXNlIDY6IGNhc2UgNzoKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ3OCwKLQkJCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ3OCkKLQkJCQkJCSAgfCAweDAxMDApOwotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODAxLAotCQkJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODAxKQotCQkJCQkJICB8IDB4MDA0MCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6IGNhc2UgNToKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMSwKLQkJCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMSkKLQkJCQkJCSAgJiAweEZGQkYpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNjAsCi0JCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA2MCkKLQkJCQkJICB8IDB4MDA0MCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNCwKLQkJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDE0KQotCQkJCQkgIHwgMHgwMjAwKTsKLQkJfQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpIHwgMHgwMDcwKTsKLQkJYmNtNDN4eF9zZXRfYWxsX2dhaW5zKGJjbSwgMCwgOCwgMCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwKLQkJCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgJiAweDAwRjcpOwotCQlpZiAocGh5LT5yZXYgPj0gMikgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsCi0JCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTEpICYgMHhGRkNGKSB8IDB4MDAzMCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxMikgJiAweEZGQ0YpIHwgMHgwMDEwKTsKLQkJfQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCi0JCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpIHwgMHgwMDgwKTsKLQkJdWRlbGF5KDIwKTsKLQotCQlucnNzaTAgPSAoczE2KSgoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ3RikgPj4gOCkgJiAweDAwM0YpOwotCQlpZiAobnJzc2kwID49IDB4MDAyMCkKLQkJCW5yc3NpMCAtPSAweDAwNDA7Ci0KLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdBLAotCQkJCSAgICAgIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKSAmIDB4MDA3Rik7Ci0JCWlmIChwaHktPmFuYWxvZyA+PSAyKSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAwMywKLQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAwMykKLQkJCQkJICAgJiAweEZGOUYpIHwgMHgwMDQwKTsKLQkJfQotCi0JCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19DSEFOTkVMX0VYVCwKLQkJCQliY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19DSEFOTkVMX0VYVCkKLQkJCQl8IDB4MjAwMCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwKLQkJCQkgICAgICBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgfCAweDAwMEYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHhGMzMwKTsKLQkJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKSAmIDB4RkZDRikgfCAweDAwMjApOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsCi0JCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTEpICYgMHhGRkNGKSB8IDB4MDAyMCk7Ci0JCX0KLQotCQliY200M3h4X3NldF9hbGxfZ2FpbnMoYmNtLCAzLCAwLCAxKTsKLQkJaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSA4KSB7Ci0JCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNDMsIDB4MDAxRik7Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA1MikgJiAweEZGMEY7Ci0JCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIHRtcCB8IDB4MDA2MCk7Ci0JCQl0bXAgPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA0MykgJiAweEZGRjA7Ci0JCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNDMsIHRtcCB8IDB4MDAwOSk7Ci0JCX0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNUEsIDB4MDQ4MCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU5LCAweDA4MTApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OCwgMHgwMDBEKTsKLQkJdWRlbGF5KDIwKTsKLQkJbnJzc2kxID0gKHMxNikoKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKLQkJaWYgKG5yc3NpMSA+PSAweDAwMjApCi0JCQlucnNzaTEgLT0gMHgwMDQwOwotCQlpZiAobnJzc2kwID09IG5yc3NpMSkKLQkJCXJhZGlvLT5ucnNzaXNsb3BlID0gMHgwMDAxMDAwMDsKLQkJZWxzZQotCQkJcmFkaW8tPm5yc3Npc2xvcGUgPSAweDAwNDAwMDAwIC8gKG5yc3NpMCAtIG5yc3NpMSk7Ci0JCWlmIChucnNzaTAgPj0gLTQpIHsKLQkJCXJhZGlvLT5ucnNzaVswXSA9IG5yc3NpMTsKLQkJCXJhZGlvLT5ucnNzaVsxXSA9IG5yc3NpMDsKLQkJfQotCQlpZiAocGh5LT5yZXYgPj0gMykgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkUsIGJhY2t1cFsxMF0pOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkYsIGJhY2t1cFsxMV0pOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MEYsIGJhY2t1cFsxMl0pOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9HX0xPX0NPTlRST0wsIGJhY2t1cFsxM10pOwotCQl9Ci0JCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODEyKSAmIDB4RkZDRik7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMSwKLQkJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODExKSAmIDB4RkZDRik7Ci0JCX0KLQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsIGJhY2t1cFswXSk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwgYmFja3VwWzFdKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDQzLCBiYWNrdXBbMl0pOwotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTIsIGJhY2t1cFs3XSk7Ci0JCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFNiwgYmFja3VwWzhdKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhULCBiYWNrdXBbOV0pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgYmFja3VwWzNdKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNUEsIGJhY2t1cFs0XSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU5LCBiYWNrdXBbNV0pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OCwgYmFja3VwWzZdKTsKLQkJYmNtNDN4eF9zeW50aF9wdV93b3JrYXJvdW5kKGJjbSwgcmFkaW8tPmNoYW5uZWwpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMiwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MDIpIHwgKDB4MDAwMSB8IDB4MDAwMikpOwotCQliY200M3h4X3NldF9vcmlnaW5hbF9nYWlucyhiY20pOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0dfQ1JTLAotCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0dfQ1JTKSB8IDB4ODAwMCk7Ci0JCWlmIChwaHktPnJldiA+PSAzKSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMSwgYmFja3VwWzE0XSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA2MCwgYmFja3VwWzE1XSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNCwgYmFja3VwWzE2XSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ3OCwgYmFja3VwWzE3XSk7Ci0JCX0KLQkJYmNtNDN4eF9ucnNzaV9tZW1fdXBkYXRlKGJjbSk7Ci0JCWJjbTQzeHhfY2FsY19ucnNzaV90aHJlc2hvbGQoYmNtKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCX0KLX0KLQotdm9pZCBiY200M3h4X2NhbGNfbnJzc2lfdGhyZXNob2xkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXMzMiB0aHJlc2hvbGQ7Ci0JczMyIGEsIGI7Ci0JczE2IHRtcDE2OwotCXUxNiB0bXBfdTE2OwotCi0Jc3dpdGNoIChwaHktPnR5cGUpIHsKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9COiB7Ci0JCWlmIChyYWRpby0+dmVyc2lvbiAhPSAweDIwNTApCi0JCQlyZXR1cm47Ci0JCWlmICghKGJjbS0+c3Byb20uYm9hcmRmbGFncyAmIEJDTTQzeHhfQkZMX1JTU0kpKQotCQkJcmV0dXJuOwotCi0JCWlmIChyYWRpby0+cmV2aXNpb24gPj0gNikgewotCQkJdGhyZXNob2xkID0gKHJhZGlvLT5ucnNzaVsxXSAtIHJhZGlvLT5ucnNzaVswXSkgKiAzMjsKLQkJCXRocmVzaG9sZCArPSAyMCAqIChyYWRpby0+bnJzc2lbMF0gKyAxKTsKLQkJCXRocmVzaG9sZCAvPSA0MDsKLQkJfSBlbHNlCi0JCQl0aHJlc2hvbGQgPSByYWRpby0+bnJzc2lbMV0gLSA1OwotCi0JCXRocmVzaG9sZCA9IGxpbWl0X3ZhbHVlKHRocmVzaG9sZCwgMCwgMHgzRSk7Ci0JCWJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMjApOyAvKiBkdW1teSByZWFkICovCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDIwLCAoKCh1MTYpdGhyZXNob2xkKSA8PCA4KSB8IDB4MDAxQyk7Ci0KLQkJaWYgKHJhZGlvLT5yZXZpc2lvbiA+PSA2KSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA4NywgMHgwRTBEKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDg2LCAweDBDMEIpOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwODUsIDB4MEEwOSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA4NCwgMHgwODA4KTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDgzLCAweDA4MDgpOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwODIsIDB4MDYwNCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA4MSwgMHgwMzAyKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDgwLCAweDAxMDApOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQlpZiAoIXBoeS0+Y29ubmVjdGVkIHx8Ci0JCSAgICAhKGJjbS0+c3Byb20uYm9hcmRmbGFncyAmIEJDTTQzeHhfQkZMX1JTU0kpKSB7Ci0JCQl0bXAxNiA9IGJjbTQzeHhfbnJzc2lfaHdfcmVhZChiY20sIDB4MjApOwotCQkJaWYgKHRtcDE2ID49IDB4MjApCi0JCQkJdG1wMTYgLT0gMHg0MDsKLQkJCWlmICh0bXAxNiA8IDMpIHsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4QSwKLQkJCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEEpCi0JCQkJCQkgICAmIDB4RjAwMCkgfCAweDA5RUIpOwotCQkJfSBlbHNlIHsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4QSwKLQkJCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEEpCi0JCQkJCQkgICAmIDB4RjAwMCkgfCAweDBBRUQpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHJhZGlvLT5pbnRlcmZtb2RlID09IEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05XTEFOKSB7Ci0JCQkJYSA9IDB4RTsKLQkJCQliID0gMHhBOwotCQkJfSBlbHNlIGlmICghcmFkaW8tPmFjaV93bGFuX2F1dG9tYXRpYyAmJiByYWRpby0+YWNpX2VuYWJsZSkgewotCQkJCWEgPSAweDEzOwotCQkJCWIgPSAweDEyOwotCQkJfSBlbHNlIHsKLQkJCQlhID0gMHhFOwotCQkJCWIgPSAweDExOwotCQkJfQotCi0JCQlhID0gYSAqIChyYWRpby0+bnJzc2lbMV0gLSByYWRpby0+bnJzc2lbMF0pOwotCQkJYSArPSAocmFkaW8tPm5yc3NpWzBdIDw8IDYpOwotCQkJaWYgKGEgPCAzMikKLQkJCQlhICs9IDMxOwotCQkJZWxzZQotCQkJCWEgKz0gMzI7Ci0JCQlhID0gYSA+PiA2OwotCQkJYSA9IGxpbWl0X3ZhbHVlKGEsIC0zMSwgMzEpOwotCi0JCQliID0gYiAqIChyYWRpby0+bnJzc2lbMV0gLSByYWRpby0+bnJzc2lbMF0pOwotCQkJYiArPSAocmFkaW8tPm5yc3NpWzBdIDw8IDYpOwotCQkJaWYgKGIgPCAzMikKLQkJCQliICs9IDMxOwotCQkJZWxzZQotCQkJCWIgKz0gMzI7Ci0JCQliID0gYiA+PiA2OwotCQkJYiA9IGxpbWl0X3ZhbHVlKGIsIC0zMSwgMzEpOwotCi0JCQl0bXBfdTE2ID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ4QSkgJiAweEYwMDA7Ci0JCQl0bXBfdTE2IHw9ICgodTMyKWIgJiAweDAwMDAwMDNGKTsKLQkJCXRtcF91MTYgfD0gKCgodTMyKWEgJiAweDAwMDAwMDNGKSA8PCA2KTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDhBLCB0bXBfdTE2KTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotfQotCi0vKiBTdGFjayBpbXBsZW1lbnRhdGlvbiB0byBzYXZlL3Jlc3RvcmUgdmFsdWVzIGZyb20gdGhlCi0gKiBpbnRlcmZlcmVuY2UgbWl0aWdhdGlvbiBjb2RlLgotICogSXQgaXMgc2F2ZSB0byByZXN0b3JlIHZhbHVlcyBpbiByYW5kb20gb3JkZXIuCi0gKi8KLXN0YXRpYyB2b2lkIF9zdGFja19zYXZlKHUzMiAqX3N0YWNrcHRyLCBzaXplX3QgKnN0YWNraWR4LAotCQkJdTggaWQsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKLXsKLQl1MzIgKnN0YWNrcHRyID0gJihfc3RhY2twdHJbKnN0YWNraWR4XSk7Ci0KLQlhc3NlcnQoKG9mZnNldCAmIDB4RTAwMCkgPT0gMHgwMDAwKTsKLQlhc3NlcnQoKGlkICYgMHhGOCkgPT0gMHgwMCk7Ci0JKnN0YWNrcHRyID0gb2Zmc2V0OwotCSpzdGFja3B0ciB8PSAoKHUzMilpZCkgPDwgMTM7Ci0JKnN0YWNrcHRyIHw9ICgodTMyKXZhbHVlKSA8PCAxNjsKLQkoKnN0YWNraWR4KSsrOwotCWFzc2VydCgqc3RhY2tpZHggPCBCQ000M3h4X0lOVEVSRlNUQUNLX1NJWkUpOwotfQotCi1zdGF0aWMgdTE2IF9zdGFja19yZXN0b3JlKHUzMiAqc3RhY2twdHIsCi0JCQkgIHU4IGlkLCB1MTYgb2Zmc2V0KQotewotCXNpemVfdCBpOwotCi0JYXNzZXJ0KChvZmZzZXQgJiAweEUwMDApID09IDB4MDAwMCk7Ci0JYXNzZXJ0KChpZCAmIDB4RjgpID09IDB4MDApOwotCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lOVEVSRlNUQUNLX1NJWkU7IGkrKywgc3RhY2twdHIrKykgewotCQlpZiAoKCpzdGFja3B0ciAmIDB4MDAwMDFGRkYpICE9IG9mZnNldCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKCgqc3RhY2twdHIgJiAweDAwMDA3MDAwKSA+PiAxMykgIT0gaWQpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuICgoKnN0YWNrcHRyICYgMHhGRkZGMDAwMCkgPj4gMTYpOwotCX0KLQlhc3NlcnQoMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBwaHlfc3RhY2tzYXZlKG9mZnNldCkJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJX3N0YWNrX3NhdmUoc3RhY2ssICZzdGFja2lkeCwgMHgxLCAob2Zmc2V0KSwJXAotCQkJICAgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAob2Zmc2V0KSkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGh5X3N0YWNrcmVzdG9yZShvZmZzZXQpCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAob2Zmc2V0KSwJCVwKLQkJCQkgIF9zdGFja19yZXN0b3JlKHN0YWNrLCAweDEsCVwKLQkJCQkJICAJIChvZmZzZXQpKSk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSByYWRpb19zdGFja3NhdmUob2Zmc2V0KQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCV9zdGFja19zYXZlKHN0YWNrLCAmc3RhY2tpZHgsIDB4MiwgKG9mZnNldCksCQlcCi0JCQkgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAob2Zmc2V0KSkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgcmFkaW9fc3RhY2tyZXN0b3JlKG9mZnNldCkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIChvZmZzZXQpLAkJCVwKLQkJCQkgICAgICBfc3RhY2tfcmVzdG9yZShzdGFjaywgMHgyLAlcCi0JCQkJCQkgICAgIChvZmZzZXQpKSk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBpbHRfc3RhY2tzYXZlKG9mZnNldCkJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJX3N0YWNrX3NhdmUoc3RhY2ssICZzdGFja2lkeCwgMHgzLCAob2Zmc2V0KSwJXAotCQkJICAgIGJjbTQzeHhfaWx0X3JlYWQoYmNtLCAob2Zmc2V0KSkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgaWx0X3N0YWNrcmVzdG9yZShvZmZzZXQpCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAob2Zmc2V0KSwJCVwKLQkJCQkgIF9zdGFja19yZXN0b3JlKHN0YWNrLCAweDMsCVwKLQkJCQkJCSAob2Zmc2V0KSkpOwlcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIHZvaWQKLWJjbTQzeHhfcmFkaW9faW50ZXJmZXJlbmNlX21pdGlnYXRpb25fZW5hYmxlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkJICAgICBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiB0bXAsIGZsaXBwZWQ7Ci0JdTMyIHRtcDMyOwotCXNpemVfdCBzdGFja2lkeCA9IDA7Ci0JdTMyICpzdGFjayA9IHJhZGlvLT5pbnRlcmZzdGFjazsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTldMQU46Ci0JCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyQiwKLQkJCSAgICAgICAgICAgICAgICAgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MkIpIHwgMHgwODAwKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMsCi0JCQkgICAgICAgICAgICAgICAgICBiY200M3h4X3BoeV9yZWFkKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMpICYgfjB4NDAwMCk7Ci0JCQlicmVhazsKLQkJfQotCQlyYWRpb19zdGFja3NhdmUoMHgwMDc4KTsKLQkJdG1wID0gKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDc4KSAmIDB4MDAxRSk7Ci0JCWZsaXBwZWQgPSBmbGlwXzRiaXQodG1wKTsKLQkJaWYgKGZsaXBwZWQgPCAxMCAmJiBmbGlwcGVkID49IDgpCi0JCQlmbGlwcGVkID0gNzsKLQkJZWxzZSBpZiAoZmxpcHBlZCA+PSAxMCkKLQkJCWZsaXBwZWQgLT0gMzsKLQkJZmxpcHBlZCA9IGZsaXBfNGJpdChmbGlwcGVkKTsKLQkJZmxpcHBlZCA9IChmbGlwcGVkIDw8IDEpIHwgMHgwMDIwOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzgsIGZsaXBwZWQpOwotCi0JCWJjbTQzeHhfY2FsY19ucnNzaV90aHJlc2hvbGQoYmNtKTsKLQotCQlwaHlfc3RhY2tzYXZlKDB4MDQwNik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDA2LCAweDdFMjgpOwotCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDJCLAotCQkgICAgICAgICAgICAgICAgICBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDJCKSB8IDB4MDgwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfUkFESU9fQklURklFTEQsCi0JCSAgICAgICAgICAgICAgICAgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9SQURJT19CSVRGSUVMRCkgfCAweDEwMDApOwotCi0JCXBoeV9zdGFja3NhdmUoMHgwNEEwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTAsCi0JCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEEwKSAmIDB4QzBDMCkgfCAweDAwMDgpOwotCQlwaHlfc3RhY2tzYXZlKDB4MDRBMSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEExLAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTEpICYgMHhDMEMwKSB8IDB4MDYwNSk7Ci0JCXBoeV9zdGFja3NhdmUoMHgwNEEyKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTIsCi0JCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBMikgJiAweEMwQzApIHwgMHgwMjA0KTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QTgpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBOCwKLQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEE4KSAmIDB4QzBDMCkgfCAweDA4MDMpOwotCQlwaHlfc3RhY2tzYXZlKDB4MDRBQik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEFCLAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QUIpICYgMHhDMEMwKSB8IDB4MDYwNSk7Ci0KLQkJcGh5X3N0YWNrc2F2ZSgweDA0QTcpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBNywgMHgwMDAyKTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QTMpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBMywgMHgyODdBKTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QTkpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBOSwgMHgyMDI3KTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0OTMpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ5MywgMHgzMkY1KTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QUEpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBQSwgMHgyMDI3KTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QUMpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBQywgMHgzMkY1KTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTUFOVUFMV0xBTjoKLQkJaWYgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMzMpICYgMHgwODAwKQotCQkJYnJlYWs7Ci0KLQkJcmFkaW8tPmFjaV9lbmFibGUgPSAxOwotCi0JCXBoeV9zdGFja3NhdmUoQkNNNDN4eF9QSFlfUkFESU9fQklURklFTEQpOwotCQlwaHlfc3RhY2tzYXZlKEJDTTQzeHhfUEhZX0dfQ1JTKTsKLQkJaWYgKHBoeS0+cmV2IDwgMikgewotCQkJcGh5X3N0YWNrc2F2ZSgweDA0MDYpOwotCQl9IGVsc2UgewotCQkJcGh5X3N0YWNrc2F2ZSgweDA0QzApOwotCQkJcGh5X3N0YWNrc2F2ZSgweDA0QzEpOwotCQl9Ci0JCXBoeV9zdGFja3NhdmUoMHgwMDMzKTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QTcpOwotCQlwaHlfc3RhY2tzYXZlKDB4MDRBMyk7Ci0JCXBoeV9zdGFja3NhdmUoMHgwNEE5KTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QUEpOwotCQlwaHlfc3RhY2tzYXZlKDB4MDRBQyk7Ci0JCXBoeV9zdGFja3NhdmUoMHgwNDkzKTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0QTEpOwotCQlwaHlfc3RhY2tzYXZlKDB4MDRBMCk7Ci0JCXBoeV9zdGFja3NhdmUoMHgwNEEyKTsKLQkJcGh5X3N0YWNrc2F2ZSgweDA0OEEpOwotCQlwaHlfc3RhY2tzYXZlKDB4MDRBOCk7Ci0JCXBoeV9zdGFja3NhdmUoMHgwNEFCKTsKLQkJaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJCXBoeV9zdGFja3NhdmUoMHgwNEFEKTsKLQkJCXBoeV9zdGFja3NhdmUoMHgwNEFFKTsKLQkJfSBlbHNlIGlmIChwaHktPnJldiA+PSAzKSB7Ci0JCQlwaHlfc3RhY2tzYXZlKDB4MDRBRCk7Ci0JCQlwaHlfc3RhY2tzYXZlKDB4MDQxNSk7Ci0JCQlwaHlfc3RhY2tzYXZlKDB4MDQxNik7Ci0JCQlwaHlfc3RhY2tzYXZlKDB4MDQxNyk7Ci0JCQlpbHRfc3RhY2tzYXZlKDB4MUEwMCArIDB4Mik7Ci0JCQlpbHRfc3RhY2tzYXZlKDB4MUEwMCArIDB4Myk7Ci0JCX0KLQkJcGh5X3N0YWNrc2F2ZSgweDA0MkIpOwotCQlwaHlfc3RhY2tzYXZlKDB4MDQ4Qyk7Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9SQURJT19CSVRGSUVMRCkKLQkJCQkgICYgfjB4MTAwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMsCi0JCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0dfQ1JTKQotCQkJCSAgICYgMHhGRkZDKSB8IDB4MDAwMik7Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzMsIDB4MDgwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEEzLCAweDIwMjcpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBOSwgMHgxQ0E4KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0OTMsIDB4Mjg3QSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEFBLCAweDFDQTgpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBQywgMHgyODdBKTsKLQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBMCwKLQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEEwKQotCQkJCSAgICYgMHhGRkMwKSB8IDB4MDAxQSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEE3LCAweDAwMEQpOwotCi0JCWlmIChwaHktPnJldiA8IDIpIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDA2LCAweEZGMEQpOwotCQl9IGVsc2UgaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEMwLCAweEZGRkYpOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QzEsIDB4MDBBOSk7Ci0JCX0gZWxzZSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMCwgMHgwMEMxKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEMxLCAweDAwNTkpOwotCQl9Ci0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTEsCi0JCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEExKQotCQkJCSAgICYgMHhDMEZGKSB8IDB4MTgwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEExLAotCQkgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBMSkKLQkJCQkgICAmIDB4RkZDMCkgfCAweDAwMTUpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBOCwKLQkJICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTgpCi0JCQkJICAgJiAweENGRkYpIHwgMHgxMDAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTgsCi0JCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEE4KQotCQkJCSAgICYgMHhGMEZGKSB8IDB4MEEwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEFCLAotCQkgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBQikKLQkJCQkgICAmIDB4Q0ZGRikgfCAweDEwMDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBQiwKLQkJICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QUIpCi0JCQkJICAgJiAweEYwRkYpIHwgMHgwODAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QUIsCi0JCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEFCKQotCQkJCSAgICYgMHhGRkNGKSB8IDB4MDAxMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEFCLAotCQkgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBQikKLQkJCQkgICAmIDB4RkZGMCkgfCAweDAwMDUpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBOCwKLQkJICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTgpCi0JCQkJICAgJiAweEZGQ0YpIHwgMHgwMDEwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QTgsCi0JCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEE4KQotCQkJCSAgICYgMHhGRkYwKSB8IDB4MDAwNik7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEEyLAotCQkgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRBMikKLQkJCQkgICAmIDB4RjBGRikgfCAweDA4MDApOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRBMCwKLQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEEwKQotCQkJCSAgICYgMHhGMEZGKSB8IDB4MDUwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEEyLAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QTIpCi0JCQkJICAgJiAweEZGRjApIHwgMHgwMDBCKTsKLQotCQlpZiAocGh5LT5yZXYgPj0gMykgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0OEEsCi0JCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ4QSkKLQkJCQkJICAmIH4weDgwMDApOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0MTUsCi0JCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MTUpCi0JCQkJCSAgICYgMHg4MDAwKSB8IDB4MzZEOCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQxNiwKLQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQxNikKLQkJCQkJICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDE3LAotCQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNDE3KQotCQkJCQkgICAmIDB4RkUwMCkgfCAweDAxNkQpOwotCQl9IGVsc2UgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0OEEsCi0JCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ4QSkKLQkJCQkJICB8IDB4MTAwMCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQ4QSwKLQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQ4QSkKLQkJCQkJICAgJiAweDlGRkYpIHwgMHgyMDAwKTsKLQkJCXRtcDMyID0gYmNtNDN4eF9zaG1fcmVhZDMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCQkJICAgQkNNNDN4eF9VQ09ERUZMQUdTX09GRlNFVCk7Ci0JCQlpZiAoISh0bXAzMiAmIDB4ODAwKSkgewotCQkJCXRtcDMyIHw9IDB4ODAwOwotCQkJCWJjbTQzeHhfc2htX3dyaXRlMzIoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJCQkgICAgQkNNNDN4eF9VQ09ERUZMQUdTX09GRlNFVCwKLQkJCQkJCSAgICB0bXAzMik7Ci0JCQl9Ci0JCX0KLQkJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDJCLAotCQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MkIpCi0JCQkJCSAgfCAweDA4MDApOwotCQl9Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNDhDLAotCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0OEMpCi0JCQkJICAgJiAweEYwRkYpIHwgMHgwMjAwKTsKLQkJaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEFFLAotCQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwNEFFKQotCQkJCQkgICAmIDB4RkYwMCkgfCAweDAwN0YpOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QUQsCi0JCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QUQpCi0JCQkJCSAgICYgMHgwMEZGKSB8IDB4MTMwMCk7Ci0JCX0gZWxzZSBpZiAocGh5LT5yZXYgPj0gNikgewotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDFBMDAgKyAweDMsIDB4MDA3Rik7Ci0JCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MUEwMCArIDB4MiwgMHgwMDdGKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNEFELAotCQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0QUQpCi0JCQkJCSAgJiAweDAwRkYpOwotCQl9Ci0JCWJjbTQzeHhfY2FsY19ucnNzaV9zbG9wZShiY20pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYmNtNDN4eF9yYWRpb19pbnRlcmZlcmVuY2VfbWl0aWdhdGlvbl9kaXNhYmxlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkJICAgICAgaW50IG1vZGUpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQl1MzIgdG1wMzI7Ci0JdTMyICpzdGFjayA9IHJhZGlvLT5pbnRlcmZzdGFjazsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTldMQU46Ci0JCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyQiwKLQkJCSAgICAgICAgICAgICAgICAgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MkIpICYgfjB4MDgwMCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIEJDTTQzeHhfUEhZX0dfQ1JTLAotCQkJICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7Ci0JCQlicmVhazsKLQkJfQotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDA3OCk7Ci0JCWJjbTQzeHhfY2FsY19ucnNzaV90aHJlc2hvbGQoYmNtKTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0MDYpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyQiwKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MkIpICYgfjB4MDgwMCk7Ci0JCWlmICghYmNtLT5iYWRfZnJhbWVzX3ByZWVtcHQpIHsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfUkFESU9fQklURklFTEQsCi0JCQkJCSAgYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX1JBRElPX0JJVEZJRUxEKQotCQkJCQkgICYgfigxIDw8IDExKSk7Ci0JCX0KLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9HX0NSUywKLQkJCQkgIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9HX0NSUykgfCAweDQwMDApOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMCk7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEExKTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTIpOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBOCk7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEFCKTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTcpOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMyk7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEE5KTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0OTMpOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBQSk7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEFDKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTUFOVUFMV0xBTjoKLQkJaWYgKCEoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAzMykgJiAweDA4MDApKQotCQkJYnJlYWs7Ci0KLQkJcmFkaW8tPmFjaV9lbmFibGUgPSAwOwotCi0JCXBoeV9zdGFja3Jlc3RvcmUoQkNNNDN4eF9QSFlfUkFESU9fQklURklFTEQpOwotCQlwaHlfc3RhY2tyZXN0b3JlKEJDTTQzeHhfUEhZX0dfQ1JTKTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDAwMzMpOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMyk7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEE5KTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0OTMpOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBQSk7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEFDKTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTApOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBNyk7Ci0JCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRDMCk7Ci0JCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRDMSk7Ci0JCX0gZWxzZQotCQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0MDYpOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMSk7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEFCKTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTgpOwotCQlpZiAocGh5LT5yZXYgPT0gMikgewotCQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QUQpOwotCQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QUUpOwotCQl9IGVsc2UgaWYgKHBoeS0+cmV2ID49IDMpIHsKLQkJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEFEKTsKLQkJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNDE1KTsKLQkJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNDE2KTsKLQkJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNDE3KTsKLQkJCWlsdF9zdGFja3Jlc3RvcmUoMHgxQTAwICsgMHgyKTsKLQkJCWlsdF9zdGFja3Jlc3RvcmUoMHgxQTAwICsgMHgzKTsKLQkJfQotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMik7Ci0JCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEE4KTsKLQkJcGh5X3N0YWNrcmVzdG9yZSgweDA0MkIpOwotCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDQ4Qyk7Ci0JCXRtcDMyID0gYmNtNDN4eF9zaG1fcmVhZDMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCQkgICBCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VUKTsKLQkJaWYgKHRtcDMyICYgMHg4MDApIHsKLQkJCXRtcDMyICY9IH4weDgwMDsKLQkJCWJjbTQzeHhfc2htX3dyaXRlMzIoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJCSAgICBCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VULAotCQkJCQkgICAgdG1wMzIpOwotCQl9Ci0JCWJjbTQzeHhfY2FsY19ucnNzaV9zbG9wZShiY20pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotfQotCi0jdW5kZWYgcGh5X3N0YWNrc2F2ZQotI3VuZGVmIHBoeV9zdGFja3Jlc3RvcmUKLSN1bmRlZiByYWRpb19zdGFja3NhdmUKLSN1bmRlZiByYWRpb19zdGFja3Jlc3RvcmUKLSN1bmRlZiBpbHRfc3RhY2tzYXZlCi0jdW5kZWYgaWx0X3N0YWNrcmVzdG9yZQotCi1pbnQgYmNtNDN4eF9yYWRpb19zZXRfaW50ZXJmZXJlbmNlX21pdGlnYXRpb24oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCQkgICAgICBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCWludCBjdXJyZW50bW9kZTsKLQotCWlmICgocGh5LT50eXBlICE9IEJDTTQzeHhfUEhZVFlQRV9HKSB8fAotCSAgICAocGh5LT5yZXYgPT0gMCkgfHwKLQkgICAgKCFwaHktPmNvbm5lY3RlZCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmFkaW8tPmFjaV93bGFuX2F1dG9tYXRpYyA9IDA7Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfQVVUT1dMQU46Ci0JCXJhZGlvLT5hY2lfd2xhbl9hdXRvbWF0aWMgPSAxOwotCQlpZiAocmFkaW8tPmFjaV9lbmFibGUpCi0JCQltb2RlID0gQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX01BTlVBTFdMQU47Ci0JCWVsc2UKLQkJCW1vZGUgPSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9ORTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9ORToKLQljYXNlIEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05XTEFOOgotCWNhc2UgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX01BTlVBTFdMQU46Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWN1cnJlbnRtb2RlID0gcmFkaW8tPmludGVyZm1vZGU7Ci0JaWYgKGN1cnJlbnRtb2RlID09IG1vZGUpCi0JCXJldHVybiAwOwotCWlmIChjdXJyZW50bW9kZSAhPSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9ORSkKLQkJYmNtNDN4eF9yYWRpb19pbnRlcmZlcmVuY2VfbWl0aWdhdGlvbl9kaXNhYmxlKGJjbSwgY3VycmVudG1vZGUpOwotCi0JaWYgKG1vZGUgPT0gQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTkUpIHsKLQkJcmFkaW8tPmFjaV9lbmFibGUgPSAwOwotCQlyYWRpby0+YWNpX2h3X3Jzc2kgPSAwOwotCX0gZWxzZQotCQliY200M3h4X3JhZGlvX2ludGVyZmVyZW5jZV9taXRpZ2F0aW9uX2VuYWJsZShiY20sIG1vZGUpOwotCXJhZGlvLT5pbnRlcmZtb2RlID0gbW9kZTsKLQotCXJldHVybiAwOwotfQotCi11MTYgYmNtNDN4eF9yYWRpb19jYWxpYnJhdGlvbnZhbHVlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQl1MTYgcmVnLCBpbmRleCwgcmV0OwotCi0JcmVnID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNjApOwotCWluZGV4ID0gKHJlZyAmIDB4MDAxRSkgPj4gMTsKLQlyZXQgPSByY2NfdGFibGVbaW5kZXhdIDw8IDE7Ci0JcmV0IHw9IChyZWcgJiAweDAwMDEpOwotCXJldCB8PSAweDAwMjA7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIExQRChMLCBQLCBEKSAgICAoKChMKSA8PCAyKSB8ICgoUCkgPDwgMSkgfCAoKEQpIDw8IDApKQotc3RhdGljIHUxNiBiY200M3h4X2dldF84MTJfdmFsdWUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1OCBscGQpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQl1MTYgbG9vcF9vciA9IDA7Ci0JdTE2IGFkal9sb29wYmFja19nYWluID0gcGh5LT5sb29wYmFja19nYWluWzBdOwotCXU4IGxvb3A7Ci0JdTE2IGV4dGVybl9sbmFfY29udHJvbDsKLQotCWlmICghcGh5LT5jb25uZWN0ZWQpCi0JCXJldHVybiAwOwotCWlmICghaGFzX2xvb3BiYWNrX2dhaW4ocGh5KSkgewotCQlpZiAocGh5LT5yZXYgPCA3IHx8ICEoYmNtLT5zcHJvbS5ib2FyZGZsYWdzCi0JCSAgICAmIEJDTTQzeHhfQkZMX0VYVExOQSkpIHsKLQkJCXN3aXRjaCAobHBkKSB7Ci0JCQljYXNlIExQRCgwLCAxLCAxKToKLQkJCQlyZXR1cm4gMHgwRkIyOwotCQkJY2FzZSBMUEQoMCwgMCwgMSk6Ci0JCQkJcmV0dXJuIDB4MDBCMjsKLQkJCWNhc2UgTFBEKDEsIDAsIDEpOgotCQkJCXJldHVybiAweDMwQjI7Ci0JCQljYXNlIExQRCgxLCAwLCAwKToKLQkJCQlyZXR1cm4gMHgzMEIzOwotCQkJZGVmYXVsdDoKLQkJCQlhc3NlcnQoMCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGxwZCkgewotCQkJY2FzZSBMUEQoMCwgMSwgMSk6Ci0JCQkJcmV0dXJuIDB4OEZCMjsKLQkJCWNhc2UgTFBEKDAsIDAsIDEpOgotCQkJCXJldHVybiAweDgwQjI7Ci0JCQljYXNlIExQRCgxLCAwLCAxKToKLQkJCQlyZXR1cm4gMHgyMEIyOwotCQkJY2FzZSBMUEQoMSwgMCwgMCk6Ci0JCQkJcmV0dXJuIDB4MjBCMzsKLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0KDApOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSA4KQotCQkJYWRqX2xvb3BiYWNrX2dhaW4gKz0gMHgwMDNFOwotCQllbHNlCi0JCQlhZGpfbG9vcGJhY2tfZ2FpbiArPSAweDAwMjY7Ci0JCWlmIChhZGpfbG9vcGJhY2tfZ2FpbiA+PSAweDQ2KSB7Ci0JCQlhZGpfbG9vcGJhY2tfZ2FpbiAtPSAweDQ2OwotCQkJZXh0ZXJuX2xuYV9jb250cm9sID0gMHgzMDAwOwotCQl9IGVsc2UgaWYgKGFkal9sb29wYmFja19nYWluID49IDB4M0EpIHsKLQkJCWFkal9sb29wYmFja19nYWluIC09IDB4M0E7Ci0JCQlleHRlcm5fbG5hX2NvbnRyb2wgPSAweDIwMDA7Ci0JCX0gZWxzZSBpZiAoYWRqX2xvb3BiYWNrX2dhaW4gPj0gMHgyRSkgewotCQkJYWRqX2xvb3BiYWNrX2dhaW4gLT0gMHgyRTsKLQkJCWV4dGVybl9sbmFfY29udHJvbCA9IDB4MTAwMDsKLQkJfSBlbHNlIHsKLQkJCWFkal9sb29wYmFja19nYWluIC09IDB4MTA7Ci0JCQlleHRlcm5fbG5hX2NvbnRyb2wgPSAweDAwMDA7Ci0JCX0KLQkJZm9yIChsb29wID0gMDsgbG9vcCA8IDE2OyBsb29wKyspIHsKLQkJCXUxNiB0bXAgPSBhZGpfbG9vcGJhY2tfZ2FpbiAtIDYgKiBsb29wOwotCQkJaWYgKHRtcCA8IDYpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlsb29wX29yID0gKGxvb3AgPDwgOCkgfCBleHRlcm5fbG5hX2NvbnRyb2w7Ci0JCWlmIChwaHktPnJldiA+PSA3ICYmIGJjbS0+c3Byb20uYm9hcmRmbGFncwotCQkgICAgJiBCQ000M3h4X0JGTF9FWFRMTkEpIHsKLQkJCWlmIChleHRlcm5fbG5hX2NvbnRyb2wpCi0JCQkJbG9vcF9vciB8PSAweDgwMDA7Ci0JCQlzd2l0Y2ggKGxwZCkgewotCQkJY2FzZSBMUEQoMCwgMSwgMSk6Ci0JCQkJcmV0dXJuIDB4OEY5MjsKLQkJCWNhc2UgTFBEKDAsIDAsIDEpOgotCQkJCXJldHVybiAoMHg4MDkyIHwgbG9vcF9vcik7Ci0JCQljYXNlIExQRCgxLCAwLCAxKToKLQkJCQlyZXR1cm4gKDB4MjA5MiB8IGxvb3Bfb3IpOwotCQkJY2FzZSBMUEQoMSwgMCwgMCk6Ci0JCQkJcmV0dXJuICgweDIwOTMgfCBsb29wX29yKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJYXNzZXJ0KDApOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3dpdGNoIChscGQpIHsKLQkJCWNhc2UgTFBEKDAsIDEsIDEpOgotCQkJCXJldHVybiAweDBGOTI7Ci0JCQljYXNlIExQRCgwLCAwLCAxKToKLQkJCWNhc2UgTFBEKDEsIDAsIDEpOgotCQkJCXJldHVybiAoMHgwMDkyIHwgbG9vcF9vcik7Ci0JCQljYXNlIExQRCgxLCAwLCAwKToKLQkJCQlyZXR1cm4gKDB4MDA5MyB8IGxvb3Bfb3IpOwotCQkJZGVmYXVsdDoKLQkJCQlhc3NlcnQoMCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXUxNiBiY200M3h4X3JhZGlvX2luaXQyMDUwKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXUxNiBiYWNrdXBbMjFdID0geyAwIH07Ci0JdTE2IHJldDsKLQl1MTYgaSwgajsKLQl1MzIgdG1wMSA9IDAsIHRtcDIgPSAwOwotCi0JYmFja3VwWzBdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNDMpOwotCWJhY2t1cFsxNF0gPSBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA1MSk7Ci0JYmFja3VwWzE1XSA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDUyKTsKLQliYWNrdXBbMV0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDE1KTsKLQliYWNrdXBbMTZdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDA1QSk7Ci0JYmFja3VwWzE3XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwNTkpOwotCWJhY2t1cFsxOF0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDU4KTsKLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9CKSB7Ci0JCWJhY2t1cFsyXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMzApOwotCQliYWNrdXBbM10gPSBiY200M3h4X3JlYWQxNihiY20sIDB4MDNFQyk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDMwLCAweDAwRkYpOwotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRUMsIDB4M0YzRik7Ci0JfSBlbHNlIHsKLQkJaWYgKHBoeS0+Y29ubmVjdGVkKSB7Ci0JCQliYWNrdXBbNF0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODExKTsKLQkJCWJhY2t1cFs1XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTIpOwotCQkJYmFja3VwWzZdID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgxNCk7Ci0JCQliYWNrdXBbN10gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODE1KTsKLQkJCWJhY2t1cFs4XSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCBCQ000M3h4X1BIWV9HX0NSUyk7Ci0JCQliYWNrdXBbOV0gPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODAyKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE0LAotCQkJICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTQpCi0JCQkJCSAgfCAweDAwMDMpKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE1LAotCQkJICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTUpCi0JCQkJCSAgJiAweEZGRkMpKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfR19DUlMsCi0JCQkgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9waHlfcmVhZChiY20sIEJDTTQzeHhfUEhZX0dfQ1JTKQotCQkJCQkgICYgMHg3RkZGKSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMiwKLQkJCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwODAyKSAmIDB4RkZGQykpOwotCQkJaWYgKHBoeS0+cmV2ID4gMSkgeyAvKiBsb29wYmFjayBnYWluIGVuYWJsZWQgKi8KLQkJCQliYWNrdXBbMTldID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwRik7Ci0JCQkJYmFja3VwWzIwXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTApOwotCQkJCWlmIChwaHktPnJldiA+PSAzKQotCQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwRiwgMHhDMDIwKTsKLQkJCQllbHNlCi0JCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODBGLCAweDgwMjApOwotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEwLCAweDAwMDApOwotCQkJfQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsCi0JCQkJCSAgYmNtNDN4eF9nZXRfODEyX3ZhbHVlKGJjbSwgTFBEKDAsIDEsIDEpKSk7Ci0JCQlpZiAocGh5LT5yZXYgPCA3IHx8ICEoYmNtLT5zcHJvbS5ib2FyZGZsYWdzCi0JCQkgICAgJiBCQ000M3h4X0JGTF9FWFRMTkEpKQotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLCAweDAxQjMpOwotCQkJZWxzZQotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLCAweDA5QjMpOwotCQl9Ci0JfQotCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19QSFlfUkFESU8sCi0JICAgICAgICAgICAgICAgIChiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19QSFlfUkFESU8pIHwgMHg4MDAwKSk7Ci0JYmFja3VwWzEwXSA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMzUpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM1LAotCSAgICAgICAgICAgICAgICAgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDM1KSAmIDB4RkY3RikpOwotCWJhY2t1cFsxMV0gPSBiY200M3h4X3JlYWQxNihiY20sIDB4MDNFNik7Ci0JYmFja3VwWzEyXSA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhUKTsKLQotCS8vIEluaXRpYWxpemF0aW9uCi0JaWYgKHBoeS0+YW5hbG9nID09IDApIHsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U2LCAweDAxMjIpOwotCX0gZWxzZSB7Ci0JCWlmIChwaHktPmFuYWxvZyA+PSAyKQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDMsCi0JCQkJCSAgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMDMpCi0JCQkJCSAgJiAweEZGQkYpIHwgMHgwMDQwKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhULAotCQkgICAgICAgICAgICAgICAgKGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhUKQotCQkJCXwgMHgyMDAwKSk7Ci0JfQotCi0JcmV0ID0gYmNtNDN4eF9yYWRpb19jYWxpYnJhdGlvbnZhbHVlKGJjbSk7Ci0KLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9CKQotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzgsIDB4MDAyNik7Ci0KLQlpZiAocGh5LT5jb25uZWN0ZWQpCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCSAgYmNtNDN4eF9nZXRfODEyX3ZhbHVlKGJjbSwgTFBEKDAsIDEsIDEpKSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIDB4QkZBRik7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkIsIDB4MTQwMyk7Ci0JaWYgKHBoeS0+Y29ubmVjdGVkKQotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCQkgIGJjbTQzeHhfZ2V0XzgxMl92YWx1ZShiY20sIExQRCgwLCAwLCAxKSkpOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEJGQTApOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MSwKLQkgICAgICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDUxKSB8IDB4MDAwNCkpOwotCWlmIChyYWRpby0+cmV2aXNpb24gPT0gOCkKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDQzLCAweDAwMUYpOwotCWVsc2UgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIDB4MDAwMCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywKLQkJCQkgICAgICAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNDMpICYgMHhGRkYwKQotCQkJCSAgICAgIHwgMHgwMDA5KTsKLQl9Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTgsIDB4MDAwMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1QSwgMHgwNDgwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTksIDB4QzgxMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCAweDAwMEQpOwotCQlpZiAocGh5LT5jb25uZWN0ZWQpCi0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCQkJICBiY200M3h4X2dldF84MTJfdmFsdWUoYmNtLCBMUEQoMSwgMCwgMSkpKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIDB4QUZCMCk7Ci0JCXVkZWxheSgxMCk7Ci0JCWlmIChwaHktPmNvbm5lY3RlZCkKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCQkgIGJjbTQzeHhfZ2V0XzgxMl92YWx1ZShiY20sIExQRCgxLCAwLCAxKSkpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHhFRkIwKTsKLQkJdWRlbGF5KDEwKTsKLQkJaWYgKHBoeS0+Y29ubmVjdGVkKQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsCi0JCQkJCSAgYmNtNDN4eF9nZXRfODEyX3ZhbHVlKGJjbSwgTFBEKDEsIDAsIDApKSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEZGRjApOwotCQl1ZGVsYXkoMjApOwotCQl0bXAxICs9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkQpOwotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OCwgMHgwMDAwKTsKLQkJaWYgKHBoeS0+Y29ubmVjdGVkKQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsCi0JCQkJCSAgYmNtNDN4eF9nZXRfODEyX3ZhbHVlKGJjbSwgTFBEKDEsIDAsIDEpKSk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEFGQjApOwotCX0KLQotCXRtcDErKzsKLQl0bXAxID4+PSA5OwotCXVkZWxheSgxMCk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTgsIDB4MDAwMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNzgsIChmbGlwXzRiaXQoaSkgPDwgMSkgfCAweDAwMjApOwotCQliYWNrdXBbMTNdID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNzgpOwotCQl1ZGVsYXkoMTApOwotCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgewotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNUEsIDB4MEQ4MCk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OSwgMHhDODEwKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCAweDAwMEQpOwotCQkJaWYgKHBoeS0+Y29ubmVjdGVkKQotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCQkJICBiY200M3h4X2dldF84MTJfdmFsdWUoYmNtLAotCQkJCQkJICBMUEQoMSwgMCwgMSkpKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEFGQjApOwotCQkJdWRlbGF5KDEwKTsKLQkJCWlmIChwaHktPmNvbm5lY3RlZCkKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwKLQkJCQkJCSAgYmNtNDN4eF9nZXRfODEyX3ZhbHVlKGJjbSwKLQkJCQkJCSAgTFBEKDEsIDAsIDEpKSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHhFRkIwKTsKLQkJCXVkZWxheSgxMCk7Ci0JCQlpZiAocGh5LT5jb25uZWN0ZWQpCi0JCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsCi0JCQkJCQkgIGJjbTQzeHhfZ2V0XzgxMl92YWx1ZShiY20sCi0JCQkJCQkgIExQRCgxLCAwLCAwKSkpOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIDB4RkZGMCk7Ci0JCQl1ZGVsYXkoMTApOwotCQkJdG1wMiArPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDJEKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCAweDAwMDApOwotCQkJaWYgKHBoeS0+Y29ubmVjdGVkKQotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLAotCQkJCQkJICBiY200M3h4X2dldF84MTJfdmFsdWUoYmNtLAotCQkJCQkJICBMUEQoMSwgMCwgMSkpKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweEFGQjApOwotCQl9Ci0JCXRtcDIrKzsKLQkJdG1wMiA+Pj0gODsKLQkJaWYgKHRtcDEgPCB0bXAyKQotCQkJYnJlYWs7Ci0JfQotCi0JLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzICovCi0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIGJhY2t1cFsxXSk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLCBiYWNrdXBbMTRdKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIGJhY2t1cFsxNV0pOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywgYmFja3VwWzBdKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1QSwgYmFja3VwWzE2XSk7Ci0JYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTksIGJhY2t1cFsxN10pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCBiYWNrdXBbMThdKTsKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIGJhY2t1cFsxMV0pOwotCWlmIChwaHktPmFuYWxvZyAhPSAwKQotCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQsIGJhY2t1cFsxMl0pOwotCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM1LCBiYWNrdXBbMTBdKTsKLQliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCByYWRpby0+Y2hhbm5lbCwgMSk7Ci0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQikgewotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzMCwgYmFja3VwWzJdKTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0VDLCBiYWNrdXBbM10pOwotCX0gZWxzZSB7Ci0JCWlmIChwaHktPmNvbm5lY3RlZCkgewotCQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX1BIWV9SQURJTywKLQkJCQkJKGJjbTQzeHhfcmVhZDE2KGJjbSwKLQkJCQkJQkNNNDN4eF9NTUlPX1BIWV9SQURJTykgJiAweDdGRkYpKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLCBiYWNrdXBbNF0pOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsIGJhY2t1cFs1XSk7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNCwgYmFja3VwWzZdKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE1LCBiYWNrdXBbN10pOwotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBCQ000M3h4X1BIWV9HX0NSUywgYmFja3VwWzhdKTsKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODAyLCBiYWNrdXBbOV0pOwotCQkJaWYgKHBoeS0+cmV2ID4gMSkgewotCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODBGLCBiYWNrdXBbMTldKTsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMCwgYmFja3VwWzIwXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGkgPj0gMTUpCi0JCXJldCA9IGJhY2t1cFsxM107Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGJjbTQzeHhfcmFkaW9faW5pdDIwNjAoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWludCBlcnI7Ci0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDQsIDB4MDBDMCk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDA1LCAweDAwMDgpOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAwOSwgMHgwMDQwKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDUsIDB4MDBBQSk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDMyLCAweDAwOEYpOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAwNiwgMHgwMDhGKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMzQsIDB4MDA4Rik7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDJDLCAweDAwMDcpOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA4MiwgMHgwMDgwKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwODAsIDB4MDAwMCk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDNGLCAweDAwREEpOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAwNSwgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwMDUpICYgfjB4MDAwOCk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDgxLCBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA4MSkgJiB+MHgwMDEwKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwODEsIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDgxKSAmIH4weDAwMjApOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA4MSwgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwODEpICYgfjB4MDAyMCk7Ci0JdWRlbGF5KDQwMCk7Ci0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwODEsIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA4MSkgJiB+MHgwMDIwKSB8IDB4MDAxMCk7Ci0JdWRlbGF5KDQwMCk7Ci0KLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDUsIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDAwNSkgJiB+MHgwMDA4KSB8IDB4MDAwOCk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDg1LCBiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA4NSkgJiB+MHgwMDEwKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDUsIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDA1KSAmIH4weDAwMDgpOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA4MSwgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwODEpICYgfjB4MDA0MCk7Ci0JYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDgxLCAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwODEpICYgfjB4MDA0MCkgfCAweDAwNDApOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAwNSwgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDgxKSAmIH4weDAwMDgpIHwgMHgwMDA4KTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA2MywgMHhEREM2KTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA2OSwgMHgwN0JFKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA2QSwgMHgwMDAwKTsKLQotCWVyciA9IGJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIEJDTTQzeHhfUkFESU9fREVGQVVMVF9DSEFOTkVMX0EsIDApOwotCWFzc2VydChlcnIgPT0gMCk7Ci0JdWRlbGF5KDEwMDApOwotfQotCi1zdGF0aWMgaW5saW5lCi11MTYgZnJlcV9yM0FfdmFsdWUodTE2IGZyZXF1ZW5jeSkKLXsKLQl1MTYgdmFsdWU7Ci0KLQlpZiAoZnJlcXVlbmN5IDwgNTA5MSkKLQkJdmFsdWUgPSAweDAwNDA7Ci0JZWxzZSBpZiAoZnJlcXVlbmN5IDwgNTMyMSkKLQkJdmFsdWUgPSAweDAwMDA7Ci0JZWxzZSBpZiAoZnJlcXVlbmN5IDwgNTgwNikKLQkJdmFsdWUgPSAweDAwODA7Ci0JZWxzZQotCQl2YWx1ZSA9IDB4MDA0MDsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBiY200M3h4X3JhZGlvX3NldF90eF9pcShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RhdGljIGNvbnN0IHU4IGRhdGFfaGlnaFs1XSA9IHsgMHgwMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHhEMCB9OwotCXN0YXRpYyBjb25zdCB1OCBkYXRhX2xvd1s1XSAgPSB7IDB4MDAsIDB4MDEsIDB4MDUsIDB4MDYsIDB4MEEgfTsKLQl1MTYgdG1wID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwMUUpOwotCWludCBpLCBqOwotCQotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgewotCQkJaWYgKHRtcCA9PSAoZGF0YV9oaWdoW2ldIHwgZGF0YV9sb3dbal0pKSB7Ci0JCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNjksIChpIC0gaikgPDwgOCB8IDB4MDBDMCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotfQotCi1pbnQgYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQl1OCBjaGFubmVsLAotCQkJCWludCBzeW50aGV0aWNfcHVfd29ya2Fyb3VuZCkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0JdTE2IHI4LCB0bXA7Ci0JdTE2IGZyZXE7Ci0KLQlpZiAoIWllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKGJjbS0+aWVlZSwgY2hhbm5lbCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgocmFkaW8tPm1hbnVmYWN0ID09IDB4MTdGKSAmJgotCSAgICAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDYwKSAmJgotCSAgICAocmFkaW8tPnJldmlzaW9uID09IDEpKSB7Ci0JCWZyZXEgPSBjaGFubmVsMmZyZXFfYShjaGFubmVsKTsKLQotCQlyOCA9IGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDA4KTsKLQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0YwLCBmcmVxKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDA4LCByOCk7Ci0KLQkJVE9ETygpOy8vVE9ETzogd3JpdGUgbWF4IGNoYW5uZWwgVFggcG93ZXI/IHRvIFJhZGlvIDB4MkQKLQkJdG1wID0gYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwMkUpOwotCQl0bXAgJj0gMHgwMDgwOwotCQlUT0RPKCk7Ly9UT0RPOiBPUiB0bXAgd2l0aCB0aGUgUG93ZXIgb3V0IGVzdGltYXRpb24gZm9yIHRoaXMgY2hhbm5lbD8KLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDJFLCB0bXApOwotCi0JCWlmIChmcmVxID49IDQ5MjAgJiYgZnJlcSA8PSA1NTAwKSB7Ci0JCQkvKiAKLQkJCSAqIHI4ID0gKCgoZnJlcSAqIDE1ICogMHhFMUZDNzgwRikgPj4gMzIpIC8gMjkpICYgMHgwRjsKLQkJCSAqICAgID0gKGZyZXEgKiAwLjAyNTg2MjA2OQotCQkJICovCi0JCQlyOCA9IDMgKiBmcmVxIC8gMTE2OyAvKiBpcyBlcXVhbCB0byByOCA9IGZyZXEgKiAwLjAyNTg2MiAqLwotCQl9Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAwNywgKHI4IDw8IDQpIHwgcjgpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMjAsIChyOCA8PCA0KSB8IHI4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDIxLCAocjggPDwgNCkgfCByOCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAyMiwKLQkJCQkgICAgICAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwMjIpCi0JCQkJICAgICAgICYgMHgwMDBGKSB8IChyOCA8PCA0KSk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAyQSwgKHI4IDw8IDQpKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDJCLCAocjggPDwgNCkpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDgsCi0JCQkJICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDA4KQotCQkJCSAgICAgICAmIDB4MDBGMCkgfCAocjggPDwgNCkpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMjksCi0JCQkJICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDI5KQotCQkJCSAgICAgICAmIDB4RkYwRikgfCAweDAwQjApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMzUsIDB4MDBBQSk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAzNiwgMHgwMDg1KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDNBLAotCQkJCSAgICAgIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDAzQSkKLQkJCQkgICAgICAgJiAweEZGMjApIHwgZnJlcV9yM0FfdmFsdWUoZnJlcSkpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwM0QsCi0JCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwM0QpICYgMHgwMEZGKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDgxLAotCQkJCSAgICAgIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA4MSkKLQkJCQkgICAgICAgJiAweEZGN0YpIHwgMHgwMDgwKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDM1LAotCQkJCSAgICAgIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDM1KSAmIDB4RkZFRik7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAzNSwKLQkJCQkgICAgICAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwMzUpCi0JCQkJICAgICAgICYgMHhGRkVGKSB8IDB4MDAxMCk7Ci0JCWJjbTQzeHhfcmFkaW9fc2V0X3R4X2lxKGJjbSk7Ci0JCVRPRE8oKTsJLy9UT0RPOglUU1NJMmRibSB3b3JrYXJvdW5kCi0JCWJjbTQzeHhfcGh5X3htaXRwb3dlcihiY20pOy8vRklYTUUgY29ycmVjdD8KLQl9IGVsc2UgewotCQlpZiAoc3ludGhldGljX3B1X3dvcmthcm91bmQpCi0JCQliY200M3h4X3N5bnRoX3B1X3dvcmthcm91bmQoYmNtLCBjaGFubmVsKTsKLQotCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTCwKLQkJCQljaGFubmVsMmZyZXFfYmcoY2hhbm5lbCkpOwotCi0JCWlmIChjaGFubmVsID09IDE0KSB7Ci0JCQlpZiAoYmNtLT5zcHJvbS5sb2NhbGUgPT0gQkNNNDN4eF9MT0NBTEVfSkFQQU4pIHsKLQkJCQliY200M3h4X3NobV93cml0ZTMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCQkJICAgIEJDTTQzeHhfVUNPREVGTEFHU19PRkZTRVQsCi0JCQkJCQkgICAgYmNtNDN4eF9zaG1fcmVhZDMyKGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAotCQkJCQkJCQkgICAgICAgQkNNNDN4eF9VQ09ERUZMQUdTX09GRlNFVCkKLQkJCQkJCSAgICAmIH4oMSA8PCA3KSk7Ci0JCQl9IGVsc2UgewotCQkJCWJjbTQzeHhfc2htX3dyaXRlMzIoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJCQkgICAgQkNNNDN4eF9VQ09ERUZMQUdTX09GRlNFVCwKLQkJCQkJCSAgICBiY200M3h4X3NobV9yZWFkMzIoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCi0JCQkJCQkJCSAgICAgICBCQ000M3h4X1VDT0RFRkxBR1NfT0ZGU0VUKQotCQkJCQkJICAgIHwgKDEgPDwgNykpOwotCQkJfQotCQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhULAotCQkJCQliY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19DSEFOTkVMX0VYVCkKLQkJCQkJfCAoMSA8PCAxMSkpOwotCQl9IGVsc2UgewotCQkJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0NIQU5ORUxfRVhULAotCQkJCQliY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19DSEFOTkVMX0VYVCkKLQkJCQkJJiAweEY3QkYpOwotCQl9Ci0JfQotCi0JcmFkaW8tPmNoYW5uZWwgPSBjaGFubmVsOwotCS8vWFhYOiBVc2luZyB0aGUgbG9uZ2VyIG9mIDIgdGltZW91dHMgKDgwMDAgdnMgMjAwMCB1c2VjcykuIFNwZWNzIHN0YXRlcwotCS8vICAgICB0aGF0IDIwMDAgdXNlY3MgbWlnaHQgc3VmZmljZS4KLQl1ZGVsYXkoODAwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBiY200M3h4X3JhZGlvX3NldF90eGFudGVubmEoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MzIgdmFsKQotewotCXUxNiB0bXA7Ci0KLQl2YWwgPDw9IDg7Ci0JdG1wID0gYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwMjIpICYgMHhGQ0ZGOwotCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDAyMiwgdG1wIHwgdmFsKTsKLQl0bXAgPSBiY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDNBOCkgJiAweEZDRkY7Ci0JYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwM0E4LCB0bXAgfCB2YWwpOwotCXRtcCA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDU0KSAmIDB4RkNGRjsKLQliY200M3h4X3NobV93cml0ZTE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwNTQsIHRtcCB8IHZhbCk7Ci19Ci0KLS8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9UWF9HYWluX0Jhc2VfQmFuZCAqLwotc3RhdGljIHUxNiBiY200M3h4X2dldF90eGdhaW5fYmFzZV9iYW5kKHUxNiB0eHBvd2VyKQotewotCXUxNiByZXQ7Ci0KLQlhc3NlcnQodHhwb3dlciA8PSA2Myk7Ci0KLQlpZiAodHhwb3dlciA+PSA1NCkKLQkJcmV0ID0gMjsKLQllbHNlIGlmICh0eHBvd2VyID49IDQ5KQotCQlyZXQgPSA0OwotCWVsc2UgaWYgKHR4cG93ZXIgPj0gNDQpCi0JCXJldCA9IDU7Ci0JZWxzZQotCQlyZXQgPSA2OwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0L1RYX0dhaW5fUmFkaW9fRnJlcXVlbmN5X1Bvd2VyX0FtcGxpZmllciAqLwotc3RhdGljIHUxNiBiY200M3h4X2dldF90eGdhaW5fZnJlcV9wb3dlcl9hbXAodTE2IHR4cG93ZXIpCi17Ci0JdTE2IHJldDsKLQotCWFzc2VydCh0eHBvd2VyIDw9IDYzKTsKLQotCWlmICh0eHBvd2VyID49IDMyKQotCQlyZXQgPSAwOwotCWVsc2UgaWYgKHR4cG93ZXIgPj0gMjUpCi0JCXJldCA9IDE7Ci0JZWxzZSBpZiAodHhwb3dlciA+PSAyMCkKLQkJcmV0ID0gMjsKLQllbHNlIGlmICh0eHBvd2VyID49IDEyKQotCQlyZXQgPSAzOwotCWVsc2UKLQkJcmV0ID0gNDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9UWF9HYWluX0RpZ2l0YWxfQW5hbG9nX0NvbnZlcnRlciAqLwotc3RhdGljIHUxNiBiY200M3h4X2dldF90eGdhaW5fZGFjKHUxNiB0eHBvd2VyKQotewotCXUxNiByZXQ7Ci0KLQlhc3NlcnQodHhwb3dlciA8PSA2Myk7Ci0KLQlpZiAodHhwb3dlciA+PSA1NCkKLQkJcmV0ID0gdHhwb3dlciAtIDUzOwotCWVsc2UgaWYgKHR4cG93ZXIgPj0gNDkpCi0JCXJldCA9IHR4cG93ZXIgLSA0MjsKLQllbHNlIGlmICh0eHBvd2VyID49IDQ0KQotCQlyZXQgPSB0eHBvd2VyIC0gMzc7Ci0JZWxzZSBpZiAodHhwb3dlciA+PSAzMikKLQkJcmV0ID0gdHhwb3dlciAtIDMyOwotCWVsc2UgaWYgKHR4cG93ZXIgPj0gMjUpCi0JCXJldCA9IHR4cG93ZXIgLSAyMDsKLQllbHNlIGlmICh0eHBvd2VyID49IDIwKQotCQlyZXQgPSB0eHBvd2VyIC0gMTM7Ci0JZWxzZSBpZiAodHhwb3dlciA+PSAxMikKLQkJcmV0ID0gdHhwb3dlciAtIDg7Ci0JZWxzZQotCQlyZXQgPSB0eHBvd2VyOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBiY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2Eoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgdHhwb3dlcikKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0JdTE2IHBhbXAsIGJhc2UsIGRhYywgaWx0OwotCi0JdHhwb3dlciA9IGxpbWl0X3ZhbHVlKHR4cG93ZXIsIDAsIDYzKTsKLQotCXBhbXAgPSBiY200M3h4X2dldF90eGdhaW5fZnJlcV9wb3dlcl9hbXAodHhwb3dlcik7Ci0JcGFtcCA8PD0gNTsKLQlwYW1wICY9IDB4MDBFMDsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxOSwgcGFtcCk7Ci0KLQliYXNlID0gYmNtNDN4eF9nZXRfdHhnYWluX2Jhc2VfYmFuZCh0eHBvd2VyKTsKLQliYXNlICY9IDB4MDAwRjsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNywgYmFzZSB8IDB4MDAyMCk7Ci0KLQlpbHQgPSBiY200M3h4X2lsdF9yZWFkKGJjbSwgMHgzMDAxKTsKLQlpbHQgJj0gMHgwMDA3OwotCi0JZGFjID0gYmNtNDN4eF9nZXRfdHhnYWluX2RhYyh0eHBvd2VyKTsKLQlkYWMgPDw9IDM7Ci0JZGFjIHw9IGlsdDsKLQotCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgzMDAxLCBkYWMpOwotCi0JcmFkaW8tPnR4cHdyX29mZnNldCA9IHR4cG93ZXI7Ci0KLQlUT0RPKCk7Ci0JLy9UT0RPOiBGdW5jUGxhY2Vob2xkZXIgKEFkanVzdCBCQiBsb2Z0IGNhbmNlbCkKLX0KLQotdm9pZCBiY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2JnKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBiYXNlYmFuZF9hdHRlbnVhdGlvbiwgdTE2IHJhZGlvX2F0dGVudWF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHR4cG93ZXIpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQotCWlmIChiYXNlYmFuZF9hdHRlbnVhdGlvbiA9PSAweEZGRkYpCi0JCWJhc2ViYW5kX2F0dGVudWF0aW9uID0gcmFkaW8tPmJhc2ViYW5kX2F0dGVuOwotCWlmIChyYWRpb19hdHRlbnVhdGlvbiA9PSAweEZGRkYpCi0JCXJhZGlvX2F0dGVudWF0aW9uID0gcmFkaW8tPnJhZGlvX2F0dGVuOwotCWlmICh0eHBvd2VyID09IDB4RkZGRikKLQkJdHhwb3dlciA9IHJhZGlvLT50eGN0bDE7Ci0JcmFkaW8tPmJhc2ViYW5kX2F0dGVuID0gYmFzZWJhbmRfYXR0ZW51YXRpb247Ci0JcmFkaW8tPnJhZGlvX2F0dGVuID0gcmFkaW9fYXR0ZW51YXRpb247Ci0JcmFkaW8tPnR4Y3RsMSA9IHR4cG93ZXI7Ci0KLQlhc3NlcnQoLypiYXNlYmFuZF9hdHRlbnVhdGlvbiA+PSAwICYmKi8gYmFzZWJhbmRfYXR0ZW51YXRpb24gPD0gMTEpOwotCWlmIChyYWRpby0+cmV2aXNpb24gPCA2KQotCQlhc3NlcnQoLypyYWRpb19hdHRlbnVhdGlvbiA+PSAwICYmKi8gcmFkaW9fYXR0ZW51YXRpb24gPD0gOSk7Ci0JZWxzZQotCQlhc3NlcnQoLyogcmFkaW9fYXR0ZW51YXRpb24gPj0gMCAmJiovIHJhZGlvX2F0dGVudWF0aW9uIDw9IDMxKTsKLQlhc3NlcnQoLyp0eHBvd2VyID49IDAgJiYqLyB0eHBvd2VyIDw9IDcpOwotCi0JYmNtNDN4eF9waHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGJjbSwgYmFzZWJhbmRfYXR0ZW51YXRpb24pOwotCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywgcmFkaW9fYXR0ZW51YXRpb24pOwotCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDA2NCwgcmFkaW9fYXR0ZW51YXRpb24pOwotCWlmIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTApIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUyLAotCQkgICAgICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDUyKSAmIH4weDAwNzApCi0JCQkJICAgICAgIHwgKCh0eHBvd2VyIDw8IDQpICYgMHgwMDcwKSk7Ci0JfQotCS8vRklYTUU6IFRoZSBzcGVjIGlzIHZlcnkgd2VpcmQgYW5kIHVuY2xlYXIgaGVyZS4KLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HKQotCQliY200M3h4X3BoeV9sb19hZGp1c3QoYmNtLCAwKTsKLX0KLQotdTE2IGJjbTQzeHhfZGVmYXVsdF9iYXNlYmFuZF9hdHRlbnVhdGlvbihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCi0JaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCAmJiByYWRpby0+cmV2aXNpb24gPCA2KQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMjsKLX0KLQotdTE2IGJjbTQzeHhfZGVmYXVsdF9yYWRpb19hdHRlbnVhdGlvbihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQl1MTYgYXR0ID0gMHhGRkZGOwotCi0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSkKLQkJcmV0dXJuIDB4NjA7Ci0KLQlzd2l0Y2ggKHJhZGlvLT52ZXJzaW9uKSB7Ci0JY2FzZSAweDIwNTM6Ci0JCXN3aXRjaCAocmFkaW8tPnJldmlzaW9uKSB7Ci0JCWNhc2UgMToKLQkJCWF0dCA9IDY7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4MjA1MDoKLQkJc3dpdGNoIChyYWRpby0+cmV2aXNpb24pIHsKLQkJY2FzZSAwOgotCQkJYXR0ID0gNTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HKSB7Ci0JCQkJaWYgKGJjbS0+Ym9hcmRfdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQlJPQURDT00gJiYKLQkJCQkgICAgYmNtLT5ib2FyZF90eXBlID09IDB4NDIxICYmCi0JCQkJICAgIGJjbS0+Ym9hcmRfcmV2aXNpb24gPj0gMzApCi0JCQkJCWF0dCA9IDM7Ci0JCQkJZWxzZSBpZiAoYmNtLT5ib2FyZF92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSAmJgotCQkJCQkgYmNtLT5ib2FyZF90eXBlID09IDB4NDE2KQotCQkJCQlhdHQgPSAzOwotCQkJCWVsc2UKLQkJCQkJYXR0ID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGJjbS0+Ym9hcmRfdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQlJPQURDT00gJiYKLQkJCQkgICAgYmNtLT5ib2FyZF90eXBlID09IDB4NDIxICYmCi0JCQkJICAgIGJjbS0+Ym9hcmRfcmV2aXNpb24gPj0gMzApCi0JCQkJCWF0dCA9IDc7Ci0JCQkJZWxzZQotCQkJCQlhdHQgPSA2OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpIHsKLQkJCQlpZiAoYmNtLT5ib2FyZF92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSAmJgotCQkJCSAgICBiY20tPmJvYXJkX3R5cGUgPT0gMHg0MjEgJiYKLQkJCQkgICAgYmNtLT5ib2FyZF9yZXZpc2lvbiA+PSAzMCkKLQkJCQkJYXR0ID0gMzsKLQkJCQllbHNlIGlmIChiY20tPmJvYXJkX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NICYmCi0JCQkJCSBiY20tPmJvYXJkX3R5cGUgPT0gMHg0MTYpCi0JCQkJCWF0dCA9IDU7Ci0JCQkJZWxzZSBpZiAoYmNtLT5jaGlwX2lkID09IDB4NDMyMCkKLQkJCQkJYXR0ID0gNDsKLQkJCQllbHNlCi0JCQkJCWF0dCA9IDM7Ci0JCQl9IGVsc2UKLQkJCQlhdHQgPSA2OwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWF0dCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQljYXNlIDU6Ci0JCQlhdHQgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJY2FzZSA3OgotCQkJYXR0ID0gNTsKLQkJCWJyZWFrOwotCQljYXNlIDg6Ci0JCQlhdHQgPSAweDFBOwotCQkJYnJlYWs7Ci0JCWNhc2UgOToKLQkJZGVmYXVsdDoKLQkJCWF0dCA9IDU7Ci0JCX0KLQl9Ci0JaWYgKGJjbS0+Ym9hcmRfdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQlJPQURDT00gJiYKLQkgICAgYmNtLT5ib2FyZF90eXBlID09IDB4NDIxKSB7Ci0JCWlmIChiY20tPmJvYXJkX3JldmlzaW9uIDwgMHg0MykKLQkJCWF0dCA9IDI7Ci0JCWVsc2UgaWYgKGJjbS0+Ym9hcmRfcmV2aXNpb24gPCAweDUxKQotCQkJYXR0ID0gMzsKLQl9Ci0JaWYgKGF0dCA9PSAweEZGRkYpCi0JCWF0dCA9IDU7Ci0KLQlyZXR1cm4gYXR0OwotfQotCi11MTYgYmNtNDN4eF9kZWZhdWx0X3R4Y3RsMShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCi0JaWYgKHJhZGlvLT52ZXJzaW9uICE9IDB4MjA1MCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSAxKQotCQlyZXR1cm4gMzsKLQlpZiAocmFkaW8tPnJldmlzaW9uIDwgNikKLQkJcmV0dXJuIDI7Ci0JaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSA4KQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBiY200M3h4X3JhZGlvX3R1cm5fb24oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSk7Ci0JaW50IGVycjsKLQotCWlmIChyYWRpby0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChwaHktPnR5cGUpIHsKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9BOgotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDQsIDB4MDBDMCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAwNSwgMHgwMDA4KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTAsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTApICYgMHhGRkY3KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTEsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTEpICYgMHhGRkY3KTsKLQkJYmNtNDN4eF9yYWRpb19pbml0MjA2MChiY20pOwkKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQjoKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHg4MDAwKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIDB4Q0MwMCk7Ci0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAocGh5LT5jb25uZWN0ZWQgPyAweDAwQzAgOiAweDAwMDApKTsKLQkJZXJyID0gYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKGJjbSwgQkNNNDN4eF9SQURJT19ERUZBVUxUX0NIQU5ORUxfQkcsIDEpOwotCQlhc3NlcnQoZXJyID09IDApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotCXJhZGlvLT5lbmFibGVkID0gMTsKLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIlJhZGlvIHR1cm5lZCBvblxuIik7Ci0JYmNtNDN4eF9sZWRzX3VwZGF0ZShiY20sIDApOwotfQotCQotdm9pZCBiY200M3h4X3JhZGlvX3R1cm5fb2ZmKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCi0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSkgewotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwMDQsIDB4MDBGRik7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDAwNSwgMHgwMEZCKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTAsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTApIHwgMHgwMDA4KTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTEsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMTEpIHwgMHgwMDA4KTsKLQl9Ci0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRyAmJiBiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDUpIHsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTEpIHwgMHgwMDhDKTsKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTIsIGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA4MTIpICYgMHhGRjczKTsKLQl9IGVsc2UKLQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIDB4QUEwMCk7Ci0JcmFkaW8tPmVuYWJsZWQgPSAwOwotCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiUmFkaW8gaW5pdGlhbGl6ZWRcbiIpOwotCWJjbTQzeHhfbGVkc191cGRhdGUoYmNtLCAwKTsKLX0KLQotdm9pZCBiY200M3h4X3JhZGlvX2NsZWFyX3Rzc2koc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQotCXN3aXRjaCAocGh5LT50eXBlKSB7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKLQkJYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDY4LCAweDdGN0YpOwotCQliY200M3h4X3NobV93cml0ZTE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwNmEsIDB4N0Y3Rik7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0I6Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfRzoKLQkJYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDU4LCAweDdGN0YpOwotCQliY200M3h4X3NobV93cml0ZTE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDAwNWEsIDB4N0Y3Rik7Ci0JCWJjbTQzeHhfc2htX3dyaXRlMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsIDB4MDA3MCwgMHg3RjdGKTsKLQkJYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwMDcyLCAweDdGN0YpOwotCQlicmVhazsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcmFkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9yYWRpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2E5OGE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9yYWRpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0KLSAgQnJvYWRjb20gQkNNNDN4eCB3aXJlbGVzcyBkcml2ZXIKLQotICBDb3B5cmlnaHQgKGMpIDIwMDUgTWFydGluIExhbmdlciA8bWFydGluLWxhbmdlckBnbXguZGU+LAotICAgICAgICAgICAgICAgICAgICAgU3RlZmFubyBCcml2aW8gPHN0M0ByaXNldXAubmV0PgotICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAgICAgICAgICAgICAgICAgICAgIERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgotICAgICAgICAgICAgICAgICAgICAgQW5kcmVhcyBKYWdnaSA8YW5kcmVhcy5qYWdnaUB3YXRlcndhdmUuY2g+Ci0KLSAgU29tZSBwYXJ0cyBvZiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3MjIwMAotICBkcml2ZXIgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdGVldCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0qLwotCi0jaWZuZGVmIEJDTTQzeHhfUkFESU9fSF8KLSNkZWZpbmUgQkNNNDN4eF9SQURJT19IXwotCi0jaW5jbHVkZSAiYmNtNDN4eC5oIgotCi0KLSNkZWZpbmUgQkNNNDN4eF9SQURJT19ERUZBVUxUX0NIQU5ORUxfQQkJMzYKLSNkZWZpbmUgQkNNNDN4eF9SQURJT19ERUZBVUxUX0NIQU5ORUxfQkcJNgotCi0vKiBGb3JjZSBhbnRlbm5hIDAuICovCi0jZGVmaW5lIEJDTTQzeHhfUkFESU9fVFhBTlRFTk5BXzAJCTAKLS8qIEZvcmNlIGFudGVubmEgMS4gKi8KLSNkZWZpbmUgQkNNNDN4eF9SQURJT19UWEFOVEVOTkFfMQkJMQotLyogVXNlIHRoZSBSWCBhbnRlbm5hLCB0aGF0IHdhcyBzZWxlY3RlZCBmb3IgdGhlIG1vc3QgcmVjZW50bHkKLSAqIHJlY2VpdmVkIGdvb2QgUExDUCBoZWFkZXIuCi0gKi8KLSNkZWZpbmUgQkNNNDN4eF9SQURJT19UWEFOVEVOTkFfTEFTVFBMQ1AJMwotI2RlZmluZSBCQ000M3h4X1JBRElPX1RYQU5URU5OQV9ERUZBVUxUCQlCQ000M3h4X1JBRElPX1RYQU5URU5OQV9MQVNUUExDUAotCi0jZGVmaW5lIEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05FCQkwCi0jZGVmaW5lIEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05XTEFOCTEKLSNkZWZpbmUgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX01BTlVBTFdMQU4JMgotI2RlZmluZSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfQVVUT1dMQU4JMwotCi0KLXZvaWQgYmNtNDN4eF9yYWRpb19sb2NrKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci12b2lkIGJjbTQzeHhfcmFkaW9fdW5sb2NrKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci0KLXUxNiBiY200M3h4X3JhZGlvX3JlYWQxNihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQpOwotdm9pZCBiY200M3h4X3JhZGlvX3dyaXRlMTYoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0LCB1MTYgdmFsKTsKLQotdTE2IGJjbTQzeHhfcmFkaW9faW5pdDIwNTAoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLXZvaWQgYmNtNDN4eF9yYWRpb19pbml0MjA2MChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi12b2lkIGJjbTQzeHhfcmFkaW9fdHVybl9vbihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotdm9pZCBiY200M3h4X3JhZGlvX3R1cm5fb2ZmKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci0KLXN0YXRpYyBpbmxpbmUKLWludCBiY200M3h4X2lzX2h3X3JhZGlvX2VuYWJsZWQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCS8qIGZ1bmN0aW9uIHRvIHJldHVybiBzdGF0ZSBvZiBoYXJkd2FyZSBlbmFibGUgb2YgcmFkaW8KLQkgKiByZXR1cm5zIDAgaWYgcmFkaW8gZGlzYWJsZWQsIDEgaWYgcmFkaW8gZW5hYmxlZAotCSAqLwotCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDMpCi0JCXJldHVybiAoKGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1JBRElPX0hXRU5BQkxFRF9ISSkKLQkJCQkJJiBCQ000M3h4X01NSU9fUkFESU9fSFdFTkFCTEVEX0hJX01BU0spCi0JCQkJCT09IDApID8gMSA6IDA7Ci0JZWxzZQotCQlyZXR1cm4gKChiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19SQURJT19IV0VOQUJMRURfTE8pCi0JCQkJCSYgQkNNNDN4eF9NTUlPX1JBRElPX0hXRU5BQkxFRF9MT19NQVNLKQotCQkJCQk9PSAwKSA/IDAgOiAxOwotfQotCi1pbnQgYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTggY2hhbm5lbCwKLQkJCQlpbnQgc3ludGhldGljX3B1X3dvcmthcm91bmQpOwotCi12b2lkIGJjbTQzeHhfcmFkaW9fc2V0X3R4cG93ZXJfYShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiB0eHBvd2VyKTsKLXZvaWQgYmNtNDN4eF9yYWRpb19zZXRfdHhwb3dlcl9iZyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGJhc2ViYW5kX2F0dGVudWF0aW9uLCB1MTYgYXR0ZW51YXRpb24sCi0JCQkgICAgICAgdTE2IHR4cG93ZXIpOwotCi11MTYgYmNtNDN4eF9kZWZhdWx0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci11MTYgYmNtNDN4eF9kZWZhdWx0X3JhZGlvX2F0dGVudWF0aW9uKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci11MTYgYmNtNDN4eF9kZWZhdWx0X3R4Y3RsMShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi12b2lkIGJjbTQzeHhfcmFkaW9fc2V0X3R4YW50ZW5uYShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUzMiB2YWwpOwotCi12b2lkIGJjbTQzeHhfcmFkaW9fY2xlYXJfdHNzaShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi11OCBiY200M3h4X3JhZGlvX2FjaV9kZXRlY3Qoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1OCBjaGFubmVsKTsKLXU4IGJjbTQzeHhfcmFkaW9fYWNpX3NjYW4oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLQotaW50IGJjbTQzeHhfcmFkaW9fc2V0X2ludGVyZmVyZW5jZV9taXRpZ2F0aW9uKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IG1vZGUpOwotCi12b2lkIGJjbTQzeHhfY2FsY19ucnNzaV9zbG9wZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotdm9pZCBiY200M3h4X2NhbGNfbnJzc2lfdGhyZXNob2xkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci1zMTYgYmNtNDN4eF9ucnNzaV9od19yZWFkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCk7Ci12b2lkIGJjbTQzeHhfbnJzc2lfaHdfd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0LCBzMTYgdmFsKTsKLXZvaWQgYmNtNDN4eF9ucnNzaV9od191cGRhdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgdmFsKTsKLXZvaWQgYmNtNDN4eF9ucnNzaV9tZW1fdXBkYXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci0KLXZvaWQgYmNtNDN4eF9yYWRpb19zZXRfdHhfaXEoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLXUxNiBiY200M3h4X3JhZGlvX2NhbGlicmF0aW9udmFsdWUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKLQotI2VuZGlmIC8qIEJDTTQzeHhfUkFESU9fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3N5c2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYjVmOTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3N5c2ZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyoKLQotICBCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlcgotCi0gIFNZU0ZTIHN1cHBvcnQgcm91dGluZXMKLQotICBDb3B5cmlnaHQgKGMpIDIwMDYgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLQotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdGVldCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0qLwotCi0jaW5jbHVkZSAiYmNtNDN4eF9zeXNmcy5oIgotI2luY2x1ZGUgImJjbTQzeHguaCIKLSNpbmNsdWRlICJiY200M3h4X21haW4uaCIKLSNpbmNsdWRlICJiY200M3h4X3JhZGlvLmgiCi0KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0KLQotI2RlZmluZSBHRU5FUklDX0ZJTEVTSVpFCTY0Ci0KLQotc3RhdGljIGludCBnZXRfaW50ZWdlcihjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQljaGFyIHRtcFsxMCArIDFdID0geyAwIH07Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoY291bnQgPT0gMCkKLQkJZ290byBvdXQ7Ci0JY291bnQgPSBtaW4oY291bnQsIChzaXplX3QpMTApOwotCW1lbWNweSh0bXAsIGJ1ZiwgY291bnQpOwotCXJldCA9IHNpbXBsZV9zdHJ0b2wodG1wLCBOVUxMLCAxMCk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnZXRfYm9vbGVhbihjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpZiAoY291bnQgIT0gMCkgewotCQlpZiAoYnVmWzBdID09ICcxJykKLQkJCXJldHVybiAxOwotCQlpZiAoYnVmWzBdID09ICcwJykKLQkJCXJldHVybiAwOwotCQlpZiAoY291bnQgPj0gNCAmJiBtZW1jbXAoYnVmLCAidHJ1ZSIsIDQpID09IDApCi0JCQlyZXR1cm4gMTsKLQkJaWYgKGNvdW50ID49IDUgJiYgbWVtY21wKGJ1ZiwgImZhbHNlIiwgNSkgPT0gMCkKLQkJCXJldHVybiAwOwotCQlpZiAoY291bnQgPj0gMyAmJiBtZW1jbXAoYnVmLCAieWVzIiwgMykgPT0gMCkKLQkJCXJldHVybiAxOwotCQlpZiAoY291bnQgPj0gMiAmJiBtZW1jbXAoYnVmLCAibm8iLCAyKSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChjb3VudCA+PSAyICYmIG1lbWNtcChidWYsICJvbiIsIDIpID09IDApCi0JCQlyZXR1cm4gMTsKLQkJaWYgKGNvdW50ID49IDMgJiYgbWVtY21wKGJ1ZiwgIm9mZiIsIDMpID09IDApCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgc3Byb20yaGV4KGNvbnN0IHUxNiAqc3Byb20sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCi17Ci0JaW50IGksIHBvcyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9TUFJPTV9TSVpFOyBpKyspIHsKLQkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgYnVmX2xlbiAtIHBvcyAtIDEsCi0JCQkJIiUwNFgiLCBzd2FiMTYoc3Byb21baV0pICYgMHhGRkZGKTsKLQl9Ci0JcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgYnVmX2xlbiAtIHBvcyAtIDEsICJcbiIpOwotCi0JcmV0dXJuIHBvcyArIDE7Ci19Ci0KLXN0YXRpYyBpbnQgaGV4MnNwcm9tKHUxNiAqc3Byb20sIGNvbnN0IGNoYXIgKmR1bXAsIHNpemVfdCBsZW4pCi17Ci0JY2hhciB0bXBbNV0gPSB7IDAgfTsKLQlpbnQgY250ID0gMDsKLQl1bnNpZ25lZCBsb25nIHBhcnNlZDsKLQotCWlmIChsZW4gPCBCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YodTE2KSAqIDIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd2hpbGUgKGNudCA8IEJDTTQzeHhfU1BST01fU0laRSkgewotCQltZW1jcHkodG1wLCBkdW1wLCA0KTsKLQkJZHVtcCArPSA0OwotCQlwYXJzZWQgPSBzaW1wbGVfc3RydG91bCh0bXAsIE5VTEwsIDE2KTsKLQkJc3Byb21bY250KytdID0gc3dhYjE2KCh1MTYpcGFyc2VkKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgYmNtNDN4eF9hdHRyX3Nwcm9tX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKLQl1MTYgKnNwcm9tOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWFzc2VydChCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YodTE2KSA8PSBQQUdFX1NJWkUpOwotCXNwcm9tID0ga21hbGxvYyhCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YoKnNwcm9tKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghc3Byb20pCi0JCXJldHVybiAtRU5PTUVNOwotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JZXJyID0gYmNtNDN4eF9zcHJvbV9yZWFkKGJjbSwgc3Byb20pOwotCWlmICghZXJyKQotCQllcnIgPSBzcHJvbTJoZXgoc3Byb20sIGJ1ZiwgUEFHRV9TSVpFKTsKLQltbWlvd2IoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQlrZnJlZShzcHJvbSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfc3Byb21fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwotCXUxNiAqc3Byb207Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwotCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0Jc3Byb20gPSBrbWFsbG9jKEJDTTQzeHhfU1BST01fU0laRSAqIHNpemVvZigqc3Byb20pLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcHJvbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZXJyID0gaGV4MnNwcm9tKHNwcm9tLCBidWYsIGNvdW50KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9rZnJlZTsKLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCXNwaW5fbG9jaygmYmNtLT5sZWRzX2xvY2spOwotCWVyciA9IGJjbTQzeHhfc3Byb21fd3JpdGUoYmNtLCBzcHJvbSk7Ci0JbW1pb3diKCk7Ci0Jc3Bpbl91bmxvY2soJmJjbS0+bGVkc19sb2NrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLW91dF9rZnJlZToKLQlrZnJlZShzcHJvbSk7Ci0KLQlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7Ci0KLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHNwcm9tLCAwNjAwLAotCQkgICBiY200M3h4X2F0dHJfc3Byb21fc2hvdywKLQkJICAgYmNtNDN4eF9hdHRyX3Nwcm9tX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QgYmNtNDN4eF9hdHRyX2ludGVyZm1vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZfdG9fYmNtKGRldik7Ci0Jc3NpemVfdCBjb3VudCA9IDA7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQotCXN3aXRjaCAoYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSktPmludGVyZm1vZGUpIHsKLQljYXNlIEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05FOgotCQljb3VudCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMCAoTm8gSW50ZXJmZXJlbmNlIE1pdGlnYXRpb24pXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9OV0xBTjoKLQkJY291bnQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjEgKE5vbi1XTEFOIEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uKVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX01BTlVBTFdMQU46Ci0JCWNvdW50ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIyIChXTEFOIEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uKVxuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFzc2VydCgwKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotCi19Ci0KLXN0YXRpYyBzc2l6ZV90IGJjbTQzeHhfYXR0cl9pbnRlcmZtb2RlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZfdG9fYmNtKGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOwotCWludCBtb2RlOwotCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JbW9kZSA9IGdldF9pbnRlZ2VyKGJ1ZiwgY291bnQpOwotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgMDoKLQkJbW9kZSA9IEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05FOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCW1vZGUgPSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9OV0xBTjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQltb2RlID0gQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX01BTlVBTFdMQU47Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJbW9kZSA9IEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9BVVRPV0xBTjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCWVyciA9IGJjbTQzeHhfcmFkaW9fc2V0X2ludGVyZmVyZW5jZV9taXRpZ2F0aW9uKGJjbSwgbW9kZSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbiBub3QgIgotCQkJCSAgICAic3VwcG9ydGVkIGJ5IGRldmljZVxuIik7Ci0JfQotCW1taW93YigpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJmZXJlbmNlLCAwNjQ0LAotCQkgICBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zaG93LAotCQkgICBiY200M3h4X2F0dHJfaW50ZXJmbW9kZV9zdG9yZSk7Ci0KLXN0YXRpYyBzc2l6ZV90IGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwotCXNzaXplX3QgY291bnQ7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQotCWlmIChiY20tPnNob3J0X3ByZWFtYmxlKQotCQljb3VudCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMSAoU2hvcnQgUHJlYW1ibGUgZW5hYmxlZClcbiIpOwotCWVsc2UKLQkJY291bnQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjAgKFNob3J0IFByZWFtYmxlIGRpc2FibGVkKVxuIik7Ci0KLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfcHJlYW1ibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHZhbHVlOwotCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JdmFsdWUgPSBnZXRfYm9vbGVhbihidWYsIGNvdW50KTsKLQlpZiAodmFsdWUgPCAwKQotCQlyZXR1cm4gdmFsdWU7Ci0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCWJjbS0+c2hvcnRfcHJlYW1ibGUgPSAhIXZhbHVlOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihzaG9ydHByZWFtYmxlLCAwNjQ0LAotCQkgICBiY200M3h4X2F0dHJfcHJlYW1ibGVfc2hvdywKLQkJICAgYmNtNDN4eF9hdHRyX3ByZWFtYmxlX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QgYmNtNDN4eF9hdHRyX3BoeW1vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKLQlpbnQgcGh5dHlwZTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWlmIChjb3VudCA8IDEpCi0JCWdvdG8gb3V0OwotCXN3aXRjaCAoYnVmWzBdKSB7Ci0JY2FzZSAnYSc6ICBjYXNlICdBJzoKLQkJcGh5dHlwZSA9IEJDTTQzeHhfUEhZVFlQRV9BOwotCQlicmVhazsKLQljYXNlICdiJzogIGNhc2UgJ0InOgotCQlwaHl0eXBlID0gQkNNNDN4eF9QSFlUWVBFX0I7Ci0JCWJyZWFrOwotCWNhc2UgJ2cnOiAgY2FzZSAnRyc6Ci0JCXBoeXR5cGUgPSBCQ000M3h4X1BIWVRZUEVfRzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZ290byBvdXQ7Ci0JfQotCi0JYmNtNDN4eF9jYW5jZWxfd29yayhiY20pOwotCW11dGV4X2xvY2soJihiY20pLT5tdXRleCk7Ci0JZXJyID0gYmNtNDN4eF9zZWxlY3Rfd2lyZWxlc3NfY29yZShiY20sIHBoeXR5cGUpOwotCWlmICghZXJyKQotCQliY200M3h4X3BlcmlvZGljX3Rhc2tzX3NldHVwKGJjbSk7Ci0JbXV0ZXhfdW5sb2NrKCYoYmNtKS0+bXV0ZXgpOwotCWlmIChlcnIgPT0gLUVTUkNIKQotCQllcnIgPSAtRU5PREVWOwotCi1vdXQ6Ci0JcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfcGh5bW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgY2hhciAqYnVmKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKLQlzc2l6ZV90IGNvdW50ID0gMDsKLQotCW11dGV4X2xvY2soJihiY20pLT5tdXRleCk7Ci0Jc3dpdGNoIChiY200M3h4X2N1cnJlbnRfcGh5KGJjbSktPnR5cGUpIHsKLQljYXNlIEJDTTQzeHhfUEhZVFlQRV9BOgotCQlzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIkEiKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1BIWVRZUEVfQjoKLQkJc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJCIik7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0c6Ci0JCXNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiRyIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotCW11dGV4X3VubG9jaygmKGJjbSktPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHBoeW1vZGUsIDA2NDQsCi0JCSAgIGJjbTQzeHhfYXR0cl9waHltb2RlX3Nob3csCi0JCSAgIGJjbTQzeHhfYXR0cl9waHltb2RlX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QgYmNtNDN4eF9hdHRyX21pY3JvY29kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCSAgIGNoYXIgKmJ1ZikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGRldl90b19iY20oZGV2KTsKLQlzc2l6ZV90IGNvdW50ID0gMDsKLQl1MTYgc3RhdHVzOwotCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JbXV0ZXhfbG9jaygmKGJjbSktPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCXN0YXR1cyA9IGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKLQkJCQkgICAgQkNNNDN4eF9VQ09ERV9TVEFUVVMpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmKGJjbSktPm11dGV4KTsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgMHgwMDAwOgotCQljb3VudCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglLjR4IChpbnZhbGlkKVxuIiwKLQkJCQkgc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwMDE6Ci0JCWNvdW50ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuNHggKGluaXQpXG4iLAotCQkJCSBzdGF0dXMpOwotCQlicmVhazsKLQljYXNlIDB4MDAwMjoKLQkJY291bnQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JS40eCAoYWN0aXZlKVxuIiwKLQkJCQkgc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwMDM6Ci0JCWNvdW50ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuNHggKHN1c3BlbmRlZClcbiIsCi0JCQkJIHN0YXR1cyk7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMDA0OgotCQljb3VudCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglLjR4IChhc2xlZXApXG4iLAotCQkJCSBzdGF0dXMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQljb3VudCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglLjR4ICh1bmtub3duKVxuIiwKLQkJCQkgc3RhdHVzKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobWljcm9jb2Rlc3RhdHVzLCAwNDQ0LAotCQkgICBiY200M3h4X2F0dHJfbWljcm9jb2RlX3Nob3csCi0JCSAgIE5VTEwpOwotCi1pbnQgYmNtNDN4eF9zeXNmc19yZWdpc3RlcihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmJjbS0+cGNpX2Rldi0+ZGV2OwotCWludCBlcnI7Ci0KLQlhc3NlcnQoYmNtNDN4eF9zdGF0dXMoYmNtKSA9PSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpOwotCi0JZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nwcm9tKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW50ZXJmZXJlbmNlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZW1vdmVfc3Byb207Ci0JZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlbW92ZV9pbnRlcmZtb2RlOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waHltb2RlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZW1vdmVfc2hvcnRwcmVhbWJsZTsKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWljcm9jb2Rlc3RhdHVzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZW1vdmVfcGh5bW9kZTsKLQotb3V0OgotCXJldHVybiBlcnI7Ci1lcnJfcmVtb3ZlX3BoeW1vZGU6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BoeW1vZGUpOwotZXJyX3JlbW92ZV9zaG9ydHByZWFtYmxlOgotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zaG9ydHByZWFtYmxlKTsKLWVycl9yZW1vdmVfaW50ZXJmbW9kZToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW50ZXJmZXJlbmNlKTsKLWVycl9yZW1vdmVfc3Byb206Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nwcm9tKTsKLQlnb3RvIG91dDsKLX0KLQotdm9pZCBiY200M3h4X3N5c2ZzX3VucmVnaXN0ZXIoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZiY20tPnBjaV9kZXYtPmRldjsKLQotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taWNyb2NvZGVzdGF0dXMpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waHltb2RlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2hvcnRwcmVhbWJsZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2ludGVyZmVyZW5jZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nwcm9tKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3N5c2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNzAxZGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3N5c2ZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgQkNNNDN4eF9TWVNGU19IXwotI2RlZmluZSBCQ000M3h4X1NZU0ZTX0hfCi0KLXN0cnVjdCBiY200M3h4X3ByaXZhdGU7Ci0KLWludCBiY200M3h4X3N5c2ZzX3JlZ2lzdGVyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Ci12b2lkIGJjbTQzeHhfc3lzZnNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwotCi0jZW5kaWYgLyogQkNNNDN4eF9TWVNGU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfd3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFjZmRjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfd3guYworKysgL2Rldi9udWxsCkBAIC0xLDEwMzUgKzAsMCBAQAotLyoKLQotICBCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlcgotCi0gIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4sCi0gICAgICAgICAgICAgICAgICAgICBTdGVmYW5vIEJyaXZpbyA8c3QzQHJpc2V1cC5uZXQ+Ci0gICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gICAgICAgICAgICAgICAgICAgICBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KLQotICBTb21lIHBhcnRzIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHcyMjAwCi0gIGRyaXZlciAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA0IEludGVsIENvcnBvcmF0aW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMXNvZnRtYWMuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExc29mdG1hY193eC5oPgotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSAiYmNtNDN4eC5oIgotI2luY2x1ZGUgImJjbTQzeHhfd3guaCIKLSNpbmNsdWRlICJiY200M3h4X21haW4uaCIKLSNpbmNsdWRlICJiY200M3h4X3JhZGlvLmgiCi0jaW5jbHVkZSAiYmNtNDN4eF9waHkuaCIKLQotCi0vKiBUaGUgV0lSRUxFU1NfRVhUIHZlcnNpb24sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHRoaXMgZHJpdmVyLiAqLwotI2RlZmluZSBCQ000M3h4X1dYX1ZFUlNJT04JMTgKLQotI2RlZmluZSBNQVhfV1hfU1RSSU5HCQk4MAotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlpbnQgaTsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHk7Ci0JY2hhciBzdWZmaXhbN10gPSB7IDAgfTsKLQlpbnQgaGF2ZV9hID0gMCwgaGF2ZV9iID0gMCwgaGF2ZV9nID0gMDsKLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKSB7Ci0JCXBoeSA9ICYoYmNtLT5jb3JlXzgwMjExX2V4dFtpXS5waHkpOwotCQlzd2l0Y2ggKHBoeS0+dHlwZSkgewotCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9BOgotCQkJaGF2ZV9hID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9HOgotCQkJaGF2ZV9nID0gMTsKLQkJY2FzZSBCQ000M3h4X1BIWVRZUEVfQjoKLQkJCWhhdmVfYiA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWFzc2VydCgwKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JaSA9IDA7Ci0JaWYgKGhhdmVfYSkgewotCQlzdWZmaXhbaSsrXSA9ICdhJzsKLQkJc3VmZml4W2krK10gPSAnLyc7Ci0JfQotCWlmIChoYXZlX2IpIHsKLQkJc3VmZml4W2krK10gPSAnYic7Ci0JCXN1ZmZpeFtpKytdID0gJy8nOwotCX0KLQlpZiAoaGF2ZV9nKSB7Ci0JCXN1ZmZpeFtpKytdID0gJ2cnOwotCQlzdWZmaXhbaSsrXSA9ICcvJzsKLQl9Ci0JaWYgKGkgIT0gMCkgCi0JCXN1ZmZpeFtpIC0gMV0gPSAnXDAnOwotCi0Jc25wcmludGYoZGF0YS0+bmFtZSwgSUZOQU1TSVosICJJRUVFIDgwMi4xMSVzIiwgc3VmZml4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfc2V0X2NoYW5uZWxmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBjaGFubmVsOwotCXM4IGV4cG9uOwotCWludCBmcmVxOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCWlmICgoZGF0YS0+ZnJlcS5lID09IDApICYmCi0JICAgIChkYXRhLT5mcmVxLm0gPj0gMCkgJiYgKGRhdGEtPmZyZXEubSA8PSAxMDAwKSkgewotCQljaGFubmVsID0gZGF0YS0+ZnJlcS5tOwotCQlmcmVxID0gYmNtNDN4eF9jaGFubmVsX3RvX2ZyZXEoYmNtLCBjaGFubmVsKTsKLQl9IGVsc2UgewotCQlmcmVxID0gZGF0YS0+ZnJlcS5tOwotCQlleHBvbiA9IDYgLSBkYXRhLT5mcmVxLmU7Ci0JCXdoaWxlICgtLWV4cG9uID49IDApICAgIC8qIHNjYWxlIGRvd24gdGhlIGZyZXF1ZW5jeSB0byBNSHogKi8KLQkJCWZyZXEgLz0gMTA7Ci0JCWFzc2VydChmcmVxID4gMTAwMCk7Ci0JCWNoYW5uZWwgPSBiY200M3h4X2ZyZXFfdG9fY2hhbm5lbChiY20sIGZyZXEpOwotCX0KLQlpZiAoIWllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKGJjbS0+aWVlZSwgY2hhbm5lbCkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSA9PSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpIHsKLQkJLy9pZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKHNvZnRtYWMsICRSRUFTT04pOwotCQliY200M3h4X21hY19zdXNwZW5kKGJjbSk7Ci0JCWVyciA9IGJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIGNoYW5uZWwsIDApOwotCQliY200M3h4X21hY19lbmFibGUoYmNtKTsKLQl9IGVsc2UgewotCQliY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKS0+aW5pdGlhbF9jaGFubmVsID0gY2hhbm5lbDsKLQkJZXJyID0gMDsKLQl9Ci1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X2dldF9jaGFubmVsZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW87Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0JdTE2IGNoYW5uZWw7Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwotCWNoYW5uZWwgPSByYWRpby0+Y2hhbm5lbDsKLQlpZiAoY2hhbm5lbCA9PSAweEZGKSB7Ci0JCWNoYW5uZWwgPSByYWRpby0+aW5pdGlhbF9jaGFubmVsOwotCQlpZiAoY2hhbm5lbCA9PSAweEZGKQotCQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQlhc3NlcnQoY2hhbm5lbCA+IDAgJiYgY2hhbm5lbCA8PSAxMDAwKTsKLQlkYXRhLT5mcmVxLmUgPSAxOwotCWRhdGEtPmZyZXEubSA9IGJjbTQzeHhfY2hhbm5lbF90b19mcmVxKGJjbSwgY2hhbm5lbCkgKiAxMDAwMDA7Ci0JZGF0YS0+ZnJlcS5mbGFncyA9IDE7Ci0KLQllcnIgPSAwOwotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbW9kZTsKLQotCW1vZGUgPSBkYXRhLT5tb2RlOwotCWlmIChtb2RlID09IElXX01PREVfQVVUTykKLQkJbW9kZSA9IEJDTTQzeHhfSU5JVElBTF9JV01PREU7Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewotCQlpZiAoYmNtLT5pZWVlLT5pd19tb2RlICE9IG1vZGUpCi0JCQliY200M3h4X3NldF9pd21vZGUoYmNtLCBtb2RlKTsKLQl9IGVsc2UKLQkJYmNtLT5pZWVlLT5pd19tb2RlID0gbW9kZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCWRhdGEtPm1vZGUgPSBiY20tPmllZWUtPml3X21vZGU7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X3JhbmdlcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvOwotCWludCBpLCBqOwotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeTsKLQotCWRhdGEtPmRhdGEubGVuZ3RoID0gc2l6ZW9mKCpyYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YoKnJhbmdlKSk7Ci0KLQkvL1RPRE86IFdoYXQgYWJvdXQgODAyLjExYj8KLQkvKiA1NE1iL3MgPT0gfjI3TWIvcyBwYXlsb2FkIHRocm91Z2hwdXQgKDgwMi4xMWcpICovCi0JcmFuZ2UtPnRocm91Z2hwdXQgPSAyNyAqIDEwMDAgKiAxMDAwOwotCi0JcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7Ci0JcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTQ2OyAvKiBzZXQgZmxvb3IgYXQgLTExMCBkQm0gKDE0NiAtIDI1NikgKi8KLQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAxNDY7Ci0JcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEOwotCi0JcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKLQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAwOwotCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7Ci0JcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEOwotCi0JcmFuZ2UtPm1pbl9ydHMgPSBCQ000M3h4X01JTl9SVFNfVEhSRVNIT0xEOwotCXJhbmdlLT5tYXhfcnRzID0gQkNNNDN4eF9NQVhfUlRTX1RIUkVTSE9MRDsKLQlyYW5nZS0+bWluX2ZyYWcgPSBNSU5fRlJBR19USFJFU0hPTEQ7Ci0JcmFuZ2UtPm1heF9mcmFnID0gTUFYX0ZSQUdfVEhSRVNIT0xEOwotCi0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OwotCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7Ci0JcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7Ci0JcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBXRVBfS0VZUzsKLQotCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IEJDTTQzeHhfV1hfVkVSU0lPTjsKLQotCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8Ci0JCQkgIElXX0VOQ19DQVBBX1dQQTIgfAotCQkJICBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8Ci0JCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0JcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwotCi0JcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7Ci0JaSA9IDA7Ci0JaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfQSB8fAotCSAgICBwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpIHsKLQkJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDg7Ci0JCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQiAqIDUwMDAwMDsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CICogNTAwMDAwOwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV8xMk1CICogNTAwMDAwOwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV8xOE1CICogNTAwMDAwOwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1CICogNTAwMDAwOwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV8zNk1CICogNTAwMDAwOwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV80OE1CICogNTAwMDAwOwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1CICogNTAwMDAwOwotCX0KLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9CIHx8Ci0JICAgIHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykgewotCQlyYW5nZS0+bnVtX2JpdHJhdGVzICs9IDQ7Ci0JCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CICogNTAwMDAwOwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX0NDS19SQVRFXzJNQiAqIDUwMDAwMDsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV81TUIgKiA1MDAwMDA7Ci0JCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQiAqIDUwMDAwMDsKLQl9Ci0KLQlnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhiY20tPmllZWUpOwotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBnZW8tPmFfY2hhbm5lbHMgKyBnZW8tPmJnX2NoYW5uZWxzOwotCWogPSAwOwotCWZvciAoaSA9IDA7IGkgPCBnZW8tPmFfY2hhbm5lbHM7IGkrKykgewotCQlpZiAoaiA9PSBJV19NQVhfRlJFUVVFTkNJRVMpCi0JCQlicmVhazsKLQkJcmFuZ2UtPmZyZXFbal0uaSA9IGogKyAxOwotCQlyYW5nZS0+ZnJlcVtqXS5tID0gZ2VvLT5hW2ldLmZyZXEgKiAxMDAwMDA7Ci0JCXJhbmdlLT5mcmVxW2pdLmUgPSAxOwotCQlqKys7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBnZW8tPmJnX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGogPT0gSVdfTUFYX0ZSRVFVRU5DSUVTKQotCQkJYnJlYWs7Ci0JCXJhbmdlLT5mcmVxW2pdLmkgPSBqICsgMTsKLQkJcmFuZ2UtPmZyZXFbal0ubSA9IGdlby0+YmdbaV0uZnJlcSAqIDEwMDAwMDsKLQkJcmFuZ2UtPmZyZXFbal0uZSA9IDE7Ci0JCWorKzsKLQl9Ci0JcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBqOwotCi0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfc2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlzaXplX3QgbGVuOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0JbGVuID0gIG1pbigoc2l6ZV90KWRhdGEtPmRhdGEubGVuZ3RoLCAoc2l6ZV90KUlXX0VTU0lEX01BWF9TSVpFKTsKLQltZW1jcHkoYmNtLT5uaWNrLCBleHRyYSwgbGVuKTsKLQliY20tPm5pY2tbbGVuXSA9ICdcMCc7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlzaXplX3QgbGVuOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0JbGVuID0gc3RybGVuKGJjbS0+bmljayk7Ci0JbWVtY3B5KGV4dHJhLCBiY20tPm5pY2ssIGxlbik7Ci0JZGF0YS0+ZGF0YS5sZW5ndGggPSAoX191MTYpbGVuOwotCWRhdGEtPmRhdGEuZmxhZ3MgPSAxOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X3NldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCSAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAoZGF0YS0+cnRzLmRpc2FibGVkKSB7Ci0JCWJjbS0+cnRzX3RocmVzaG9sZCA9IEJDTTQzeHhfTUFYX1JUU19USFJFU0hPTEQ7Ci0JCWVyciA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKGRhdGEtPnJ0cy52YWx1ZSA+PSBCQ000M3h4X01JTl9SVFNfVEhSRVNIT0xEICYmCi0JCSAgICBkYXRhLT5ydHMudmFsdWUgPD0gQkNNNDN4eF9NQVhfUlRTX1RIUkVTSE9MRCkgewotCQkJYmNtLT5ydHNfdGhyZXNob2xkID0gZGF0YS0+cnRzLnZhbHVlOwotCQkJZXJyID0gMDsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF93eF9nZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlkYXRhLT5ydHMudmFsdWUgPSBiY20tPnJ0c190aHJlc2hvbGQ7Ci0JZGF0YS0+cnRzLmZpeGVkID0gMDsKLQlkYXRhLT5ydHMuZGlzYWJsZWQgPSAoYmNtLT5ydHNfdGhyZXNob2xkID09IEJDTTQzeHhfTUFYX1JUU19USFJFU0hPTEQpOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X3NldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JaWYgKGRhdGEtPmZyYWcuZGlzYWJsZWQpIHsKLQkJYmNtLT5pZWVlLT5mdHMgPSBNQVhfRlJBR19USFJFU0hPTEQ7Ci0JCWVyciA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKGRhdGEtPmZyYWcudmFsdWUgPj0gTUlOX0ZSQUdfVEhSRVNIT0xEICYmCi0JCSAgICBkYXRhLT5mcmFnLnZhbHVlIDw9IE1BWF9GUkFHX1RIUkVTSE9MRCkgewotCQkJYmNtLT5pZWVlLT5mdHMgPSBkYXRhLT5mcmFnLnZhbHVlICYgfjB4MTsKLQkJCWVyciA9IDA7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJICAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCWRhdGEtPmZyYWcudmFsdWUgPSBiY20tPmllZWUtPmZ0czsKLQlkYXRhLT5mcmFnLmZpeGVkID0gMDsKLQlkYXRhLT5mcmFnLmRpc2FibGVkID0gKGJjbS0+aWVlZS0+ZnRzID09IE1BWF9GUkFHX1RIUkVTSE9MRCk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfc2V0X3htaXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW87Ci0Jc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0JdTE2IG1heHBvd2VyOwotCi0JaWYgKChkYXRhLT50eHBvd2VyLmZsYWdzICYgSVdfVFhQT1dfVFlQRSkgIT0gSVdfVFhQT1dfREJNKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlRYIHBvd2VyIG5vdCBpbiBkQm0uXG4iKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKQotCQlnb3RvIG91dF91bmxvY2s7Ci0JcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQlwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JaWYgKGRhdGEtPnR4cG93ZXIuZGlzYWJsZWQgIT0gKCEocmFkaW8tPmVuYWJsZWQpKSkgewotCQlpZiAoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCkKLQkJCWJjbTQzeHhfcmFkaW9fdHVybl9vZmYoYmNtKTsKLQkJZWxzZQotCQkJYmNtNDN4eF9yYWRpb190dXJuX29uKGJjbSk7Ci0JfQotCWlmIChkYXRhLT50eHBvd2VyLnZhbHVlID4gMCkgewotCQkvKiBkZXNpcmVkIGFuZCBtYXhwb3dlciBkQm0gdmFsdWVzIGFyZSBpbiBRNS4yICovCi0JCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpCi0JCQltYXhwb3dlciA9IGJjbS0+c3Byb20ubWF4cG93ZXJfYXBoeTsKLQkJZWxzZQotCQkJbWF4cG93ZXIgPSBiY20tPnNwcm9tLm1heHBvd2VyX2JncGh5OwotCQlyYWRpby0+dHhwb3dlcl9kZXNpcmVkID0gbGltaXRfdmFsdWUoZGF0YS0+dHhwb3dlci52YWx1ZSA8PCAyLAotCQkJCQkJICAgICAwLCBtYXhwb3dlcik7Ci0JCWJjbTQzeHhfcGh5X3htaXRwb3dlcihiY20pOwotCX0KLQllcnIgPSAwOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X2dldF94bWl0cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvOwotCWludCBlcnIgPSAtRU5PREVWOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKQotCQlnb3RvIG91dF91bmxvY2s7Ci0JcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQkvKiBkZXNpcmVkIGRCbSB2YWx1ZSBpcyBpbiBRNS4yICovCi0JZGF0YS0+dHhwb3dlci52YWx1ZSA9IHJhZGlvLT50eHBvd2VyX2Rlc2lyZWQgPj4gMjsKLQlkYXRhLT50eHBvd2VyLmZpeGVkID0gMTsKLQlkYXRhLT50eHBvd2VyLmZsYWdzID0gSVdfVFhQT1dfREJNOwotCWRhdGEtPnR4cG93ZXIuZGlzYWJsZWQgPSAhKHJhZGlvLT5lbmFibGVkKTsKLQotCWVyciA9IDA7Ci1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfc2V0X2VuY29kaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JaW50IGVycjsKLQotCWVyciA9IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKGJjbS0+aWVlZSwgaW5mbywgZGF0YSwgZXh0cmEpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X3NldF9lbmNvZGluZ2V4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLSAgICAgICAgaW50IGVycjsKLQotICAgICAgICBlcnIgPSBpZWVlODAyMTFfd3hfc2V0X2VuY29kZWV4dChiY20tPmllZWUsIGluZm8sIGRhdGEsIGV4dHJhKTsKLQotICAgICAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X2VuY29kaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JaW50IGVycjsKLQotCWVyciA9IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKGJjbS0+aWVlZSwgaW5mbywgZGF0YSwgZXh0cmEpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X2dldF9lbmNvZGluZ2V4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLSAgICAgICAgaW50IGVycjsKLQotICAgICAgICBlcnIgPSBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZWV4dChiY20tPmllZWUsIGluZm8sIGRhdGEsIGV4dHJhKTsKLQotICAgICAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfc2V0X2ludGVyZm1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtb2RlLCBlcnIgPSAwOwotCi0JbW9kZSA9ICooKGludCAqKWV4dHJhKTsKLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIDA6Ci0JCW1vZGUgPSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9ORTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQltb2RlID0gQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTldMQU47Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbW9kZSA9IEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9NQU5VQUxXTEFOOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCW1vZGUgPSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfQVVUT1dMQU47Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInNldF9pbnRlcmZtb2RlIGFsbG93ZWQgcGFyYW1ldGVycyBhcmU6ICIKLQkJCQkgICAgIjAgPT4gTm9uZSwgIDEgPT4gTm9uLVdMQU4sICAyID0+IFdMQU4sICAiCi0JCQkJICAgICIzID0+IEF1dG8tV0xBTlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7Ci0JCWVyciA9IGJjbTQzeHhfcmFkaW9fc2V0X2ludGVyZmVyZW5jZV9taXRpZ2F0aW9uKGJjbSwgbW9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIG5vdCAiCi0JCQkJCSAgICAic3VwcG9ydGVkIGJ5IGRldmljZVxuIik7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobW9kZSA9PSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfQVVUT1dMQU4pIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIG1vZGUgQXV0by1XTEFOICIKLQkJCQkJICAgICJub3Qgc3VwcG9ydGVkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZG93bi5cbiIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJfSBlbHNlCi0JCQliY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKS0+aW50ZXJmbW9kZSA9IG1vZGU7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X2dldF9pbnRlcmZtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JaW50IG1vZGU7Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQltb2RlID0gYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSktPmludGVyZm1vZGU7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTkU6Ci0JCXN0cm5jcHkoZXh0cmEsICIwIChObyBJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbikiLCBNQVhfV1hfU1RSSU5HKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X1JBRElPX0lOVEVSRk1PREVfTk9OV0xBTjoKLQkJc3RybmNweShleHRyYSwgIjEgKE5vbi1XTEFOIEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uKSIsIE1BWF9XWF9TVFJJTkcpOwotCQlicmVhazsKLQljYXNlIEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9NQU5VQUxXTEFOOgotCQlzdHJuY3B5KGV4dHJhLCAiMiAoV0xBTiBJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbikiLCBNQVhfV1hfU1RSSU5HKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCX0KLQlkYXRhLT5kYXRhLmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF93eF9zZXRfc2hvcnRwcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9uOwotCi0Jb24gPSAqKChpbnQgKilleHRyYSk7Ci0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQliY20tPnNob3J0X3ByZWFtYmxlID0gISFvbjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X3Nob3J0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJCXVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlpbnQgb247Ci0KLQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlvbiA9IGJjbS0+c2hvcnRfcHJlYW1ibGU7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQotCWlmIChvbikKLQkJc3RybmNweShleHRyYSwgIjEgKFNob3J0IFByZWFtYmxlIGVuYWJsZWQpIiwgTUFYX1dYX1NUUklORyk7Ci0JZWxzZQotCQlzdHJuY3B5KGV4dHJhLCAiMCAoU2hvcnQgUHJlYW1ibGUgZGlzYWJsZWQpIiwgTUFYX1dYX1NUUklORyk7Ci0JZGF0YS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzeHhfd3hfc2V0X3N3ZW5jcnlwdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9uOwotCQotCW9uID0gKigoaW50ICopZXh0cmEpOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQliY20tPmllZWUtPmhvc3RfZW5jcnlwdCA9ICEhb247Ci0JYmNtLT5pZWVlLT5ob3N0X2RlY3J5cHQgPSAhIW9uOwotCWJjbS0+aWVlZS0+aG9zdF9idWlsZF9pdiA9ICFvbjsKLQliY20tPmllZWUtPmhvc3Rfc3RyaXBfaXZfaWN2ID0gIW9uOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF93eF9nZXRfc3dlbmNyeXB0aW9uKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JaW50IG9uOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jb24gPSBiY20tPmllZWUtPmhvc3RfZW5jcnlwdDsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotCi0JaWYgKG9uKQotCQlzdHJuY3B5KGV4dHJhLCAiMSAoU1cgZW5jcnlwdGlvbiBlbmFibGVkKSAiLCBNQVhfV1hfU1RSSU5HKTsKLQllbHNlCi0JCXN0cm5jcHkoZXh0cmEsICIwIChTVyBlbmNyeXB0aW9uIGRpc2FibGVkKSAiLCBNQVhfV1hfU1RSSU5HKTsKLQlkYXRhLT5kYXRhLmxlbmd0aCA9IHN0cmxlbihleHRyYSArIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEVub3VnaCBidWZmZXIgdG8gaG9sZCBhIGhleGR1bXAgb2YgdGhlIHNwcm9tIGRhdGEuICovCi0jZGVmaW5lIFNQUk9NX0JVRkZFUlNJWkUJNTEyCi0KLXN0YXRpYyBpbnQgc3Byb20yaGV4KGNvbnN0IHUxNiAqc3Byb20sIGNoYXIgKmR1bXApCi17Ci0JaW50IGksIHBvcyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9TUFJPTV9TSVpFOyBpKyspIHsKLQkJcG9zICs9IHNucHJpbnRmKGR1bXAgKyBwb3MsIFNQUk9NX0JVRkZFUlNJWkUgLSBwb3MgLSAxLAotCQkJCSIlMDRYIiwgc3dhYjE2KHNwcm9tW2ldKSAmIDB4RkZGRik7Ci0JfQotCi0JcmV0dXJuIHBvcyArIDE7Ci19Ci0KLXN0YXRpYyBpbnQgaGV4MnNwcm9tKHUxNiAqc3Byb20sIGNvbnN0IGNoYXIgKmR1bXAsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JY2hhciB0bXBbNV0gPSB7IDAgfTsKLQlpbnQgY250ID0gMDsKLQl1bnNpZ25lZCBsb25nIHBhcnNlZDsKLQotCWlmIChsZW4gPCBCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YodTE2KSAqIDIpCi0JCXJldHVybiAtRUlOVkFMOwotCXdoaWxlIChjbnQgPCBCQ000M3h4X1NQUk9NX1NJWkUpIHsKLQkJbWVtY3B5KHRtcCwgZHVtcCwgNCk7Ci0JCWR1bXAgKz0gNDsKLQkJcGFyc2VkID0gc2ltcGxlX3N0cnRvdWwodG1wLCBOVUxMLCAxNik7Ci0JCXNwcm9tW2NudCsrXSA9IHN3YWIxNigodTE2KXBhcnNlZCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmNtNDN4eF93eF9zcHJvbV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JaW50IGVyciA9IC1FUEVSTTsKLQl1MTYgKnNwcm9tOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gLUVOT01FTTsKLQlzcHJvbSA9IGttYWxsb2MoQkNNNDN4eF9TUFJPTV9TSVpFICogc2l6ZW9mKCpzcHJvbSksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIXNwcm9tKQotCQlnb3RvIG91dDsKLQotCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JZXJyID0gLUVOT0RFVjsKLQlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSA9PSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpCi0JCWVyciA9IGJjbTQzeHhfc3Byb21fcmVhZChiY20sIHNwcm9tKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKLQlpZiAoIWVycikKLQkJZGF0YS0+ZGF0YS5sZW5ndGggPSBzcHJvbTJoZXgoc3Byb20sIGV4dHJhKTsKLQlrZnJlZShzcHJvbSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBiY200M3h4X3d4X3Nwcm9tX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JaW50IGVyciA9IC1FUEVSTTsKLQl1MTYgKnNwcm9tOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqaW5wdXQ7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQotCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRU5PTUVNOwotCXNwcm9tID0ga21hbGxvYyhCQ000M3h4X1NQUk9NX1NJWkUgKiBzaXplb2YoKnNwcm9tKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghc3Byb20pCi0JCWdvdG8gb3V0OwotCi0JbGVuID0gZGF0YS0+ZGF0YS5sZW5ndGg7Ci0JZXh0cmFbbGVuIC0gMV0gPSAnXDAnOwotCWlucHV0ID0gc3RyY2hyKGV4dHJhLCAnOicpOwotCWlmIChpbnB1dCkgewotCQlpbnB1dCsrOwotCQlsZW4gLT0gaW5wdXQgLSBleHRyYTsKLQl9IGVsc2UKLQkJaW5wdXQgPSBleHRyYTsKLQllcnIgPSBoZXgyc3Byb20oc3Byb20sIGlucHV0LCBsZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0JbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJmJjbS0+bGVkc19sb2NrKTsKLQllcnIgPSAtRU5PREVWOwotCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkKLQkJZXJyID0gYmNtNDN4eF9zcHJvbV93cml0ZShiY20sIHNwcm9tKTsKLQlzcGluX3VubG9jaygmYmNtLT5sZWRzX2xvY2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwotb3V0X2tmcmVlOgotCWtmcmVlKHNwcm9tKTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBHZXQgd2lyZWxlc3Mgc3RhdGlzdGljcy4gIENhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgYW5kIGJ5IFNJT0NHSVdTVEFUUyAqLwotCi1zdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmJjbTQzeHhfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQotewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKLQlzdGF0aWMgaW50IHRtcF9sZXZlbCA9IDA7Ci0Jc3RhdGljIGludCB0bXBfcXVhbCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdzdGF0cyA9ICZiY20tPnN0YXRzLndzdGF0czsKLQlpZiAoIW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpIHsKLQkJd3N0YXRzLT5taXNzLmJlYWNvbiA9IDA7Ci0vLwkJYmNtLT5pZWVlLT5pZWVlX3N0YXRzLnR4X3JldHJ5X2xpbWl0X2V4Y2VlZGVkID0gMDsgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGNsZWFyZWQgaGVyZT8KLQkJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSAwOwotLy8JCWJjbS0+aWVlZS0+aWVlZV9zdGF0cy50eF9kaXNjYXJkc193cm9uZ19zYSA9IDA7IC8vIEZJWE1FOiBzYW1lIHF1ZXN0aW9uCi0JCXdzdGF0cy0+ZGlzY2FyZC5ud2lkID0gMDsKLS8vCQliY20tPmllZWUtPmllZWVfc3RhdHMucnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZSA9IDA7IC8vIEZJWE1FOiBkaXR0bwotCQl3c3RhdHMtPmRpc2NhcmQuY29kZSA9IDA7Ci0vLwkJYmNtLT5pZWVlLT5pZWVlX3N0YXRzLnJ4X2ZyYWdtZW50cyA9IDA7ICAvLyBGSVhNRTogc2FtZSBoZXJlCi0JCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKLQkJd3N0YXRzLT5xdWFsLnF1YWwgPSAwOwotCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAwOwotCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOwotCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IDc7Ci0JCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKLQkJcmV0dXJuIHdzdGF0czsKLQl9Ci0JLyogZmlsbCBpbiB0aGUgcmVhbCBzdGF0aXN0aWNzIHdoZW4gaWZhY2UgYXNzb2NpYXRlZCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmllZWUtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldHdvcmssICZtYWMtPmllZWUtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAoIW1lbWNtcChtYWMtPmFzc29jaW5mby5ic3NpZCwgbmV0d29yay0+YnNzaWQsIEVUSF9BTEVOKSkgewotCQkJaWYgKCF0bXBfbGV2ZWwpCXsJLyogZ2V0IGluaXRpYWwgdmFsdWVzICovCi0JCQkJdG1wX2xldmVsID0gbmV0d29yay0+c3RhdHMuc2lnbmFsOwotCQkJCXRtcF9xdWFsID0gbmV0d29yay0+c3RhdHMucnNzaTsKLQkJCX0gZWxzZSB7CQkvKiBzbW9vdGggcmVzdWx0cyAqLwotCQkJCXRtcF9sZXZlbCA9ICgxNSAqIHRtcF9sZXZlbCArIG5ldHdvcmstPnN0YXRzLnNpZ25hbCkvMTY7Ci0JCQkJdG1wX3F1YWwgPSAoMTUgKiB0bXBfcXVhbCArIG5ldHdvcmstPnN0YXRzLnJzc2kpLzE2OwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5pZWVlLT5sb2NrLCBmbGFncyk7Ci0Jd3N0YXRzLT5xdWFsLmxldmVsID0gdG1wX2xldmVsOwotCXdzdGF0cy0+cXVhbC5xdWFsID0gMTAwICogdG1wX3F1YWwgLyBSWF9SU1NJX01BWDsKLQl3c3RhdHMtPnF1YWwubm9pc2UgPSBiY20tPnN0YXRzLm5vaXNlOwotCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwotCXdzdGF0cy0+ZGlzY2FyZC5jb2RlID0gYmNtLT5pZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGU7Ci0Jd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSBiY20tPmllZWUtPmllZWVfc3RhdHMudHhfcmV0cnlfbGltaXRfZXhjZWVkZWQ7Ci0Jd3N0YXRzLT5kaXNjYXJkLm53aWQgPSBiY20tPmllZWUtPmllZWVfc3RhdHMudHhfZGlzY2FyZHNfd3Jvbmdfc2E7Ci0Jd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ID0gYmNtLT5pZWVlLT5pZWVlX3N0YXRzLnJ4X2ZyYWdtZW50czsKLQl3c3RhdHMtPmRpc2NhcmQubWlzYyA9IDA7CS8vIEZJWE1FCi0Jd3N0YXRzLT5taXNzLmJlYWNvbiA9IDA7CS8vIEZJWE1FCi0JcmV0dXJuIHdzdGF0czsKLX0KLQotCi0jaWZkZWYgV1gKLSMgdW5kZWYgV1gKLSNlbmRpZgotI2RlZmluZSBXWChpb2N0bCkgIFsoaW9jdGwpIC0gU0lPQ1NJV0NPTU1JVF0KLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyIGJjbTQzeHhfd3hfaGFuZGxlcnNbXSA9IHsKLQkvKiBXaXJlbGVzcyBJZGVudGlmaWNhdGlvbiAqLwotCVdYKFNJT0NHSVdOQU1FKQkJPSBiY200M3h4X3d4X2dldF9uYW1lLAotCS8qIEJhc2ljIG9wZXJhdGlvbnMgKi8KLQlXWChTSU9DU0lXRlJFUSkJCT0gYmNtNDN4eF93eF9zZXRfY2hhbm5lbGZyZXEsCi0JV1goU0lPQ0dJV0ZSRVEpCQk9IGJjbTQzeHhfd3hfZ2V0X2NoYW5uZWxmcmVxLAotCVdYKFNJT0NTSVdNT0RFKQkJPSBiY200M3h4X3d4X3NldF9tb2RlLAotCVdYKFNJT0NHSVdNT0RFKQkJPSBiY200M3h4X3d4X2dldF9tb2RlLAotCS8qIEluZm9ybWF0aXZlIHN0dWZmICovCi0JV1goU0lPQ0dJV1JBTkdFKQk9IGJjbTQzeHhfd3hfZ2V0X3JhbmdlcGFyYW1zLAotCS8qIEFjY2VzcyBQb2ludCBtYW5pcHVsYXRpb24gKi8KLQlXWChTSU9DU0lXQVApICAgICAgICAgICA9IGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X3dhcCwKLQlXWChTSU9DR0lXQVApICAgICAgICAgICA9IGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3dhcCwKLQlXWChTSU9DU0lXU0NBTikJCT0gaWVlZTgwMjExc29mdG1hY193eF90cmlnZ2VyX3NjYW4sCi0JV1goU0lPQ0dJV1NDQU4pCQk9IGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3NjYW5fcmVzdWx0cywKLQkvKiA4MDIuMTEgc3BlY2lmaWMgc3VwcG9ydCAqLwotCVdYKFNJT0NTSVdFU1NJRCkJPSBpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9lc3NpZCwKLQlXWChTSU9DR0lXRVNTSUQpCT0gaWVlZTgwMjExc29mdG1hY193eF9nZXRfZXNzaWQsCi0JV1goU0lPQ1NJV05JQ0tOKQk9IGJjbTQzeHhfd3hfc2V0X25pY2ssCi0JV1goU0lPQ0dJV05JQ0tOKQk9IGJjbTQzeHhfd3hfZ2V0X25pY2ssCi0JLyogT3RoZXIgcGFyYW1ldGVycyAqLwotCVdYKFNJT0NTSVdSQVRFKQkJPSBpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9yYXRlLAotCVdYKFNJT0NHSVdSQVRFKQkJPSBpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9yYXRlLAotCVdYKFNJT0NTSVdSVFMpCQk9IGJjbTQzeHhfd3hfc2V0X3J0cywKLQlXWChTSU9DR0lXUlRTKQkJPSBiY200M3h4X3d4X2dldF9ydHMsCi0JV1goU0lPQ1NJV0ZSQUcpCQk9IGJjbTQzeHhfd3hfc2V0X2ZyYWcsCi0JV1goU0lPQ0dJV0ZSQUcpCQk9IGJjbTQzeHhfd3hfZ2V0X2ZyYWcsCi0JV1goU0lPQ1NJV1RYUE9XKQk9IGJjbTQzeHhfd3hfc2V0X3htaXRwb3dlciwKLQlXWChTSU9DR0lXVFhQT1cpCT0gYmNtNDN4eF93eF9nZXRfeG1pdHBvd2VyLAotLy9UT0RPCVdYKFNJT0NTSVdSRVRSWSkJPSBiY200M3h4X3d4X3NldF9yZXRyeSwKLS8vVE9ETwlXWChTSU9DR0lXUkVUUlkpCT0gYmNtNDN4eF93eF9nZXRfcmV0cnksCi0JLyogRW5jb2RpbmcgKi8KLQlXWChTSU9DU0lXRU5DT0RFKQk9IGJjbTQzeHhfd3hfc2V0X2VuY29kaW5nLAotCVdYKFNJT0NHSVdFTkNPREUpCT0gYmNtNDN4eF93eF9nZXRfZW5jb2RpbmcsCi0JV1goU0lPQ1NJV0VOQ09ERUVYVCkJPSBiY200M3h4X3d4X3NldF9lbmNvZGluZ2V4dCwKLQlXWChTSU9DR0lXRU5DT0RFRVhUKQk9IGJjbTQzeHhfd3hfZ2V0X2VuY29kaW5nZXh0LAotCS8qIFBvd2VyIHNhdmluZyAqLwotLy9UT0RPCVdYKFNJT0NTSVdQT1dFUikJPSBiY200M3h4X3d4X3NldF9wb3dlciwKLS8vVE9ETwlXWChTSU9DR0lXUE9XRVIpCT0gYmNtNDN4eF93eF9nZXRfcG93ZXIsCi0JV1goU0lPQ1NJV0dFTklFKQk9IGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2dlbmllLAotCVdYKFNJT0NHSVdHRU5JRSkJPSBpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9nZW5pZSwKLQlXWChTSU9DU0lXQVVUSCkJCT0gaWVlZTgwMjExX3d4X3NldF9hdXRoLAotCVdYKFNJT0NHSVdBVVRIKQkJPSBpZWVlODAyMTFfd3hfZ2V0X2F1dGgsCi19OwotI3VuZGVmIFdYCi0KLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyIGJjbTQzeHhfcHJpdl93eF9oYW5kbGVyc1tdID0gewotCS8qIFNldCBJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbiBNb2RlLiAqLwotCWJjbTQzeHhfd3hfc2V0X2ludGVyZm1vZGUsCi0JLyogR2V0IEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIE1vZGUuICovCi0JYmNtNDN4eF93eF9nZXRfaW50ZXJmbW9kZSwKLQkvKiBFbmFibGUvRGlzYWJsZSBTaG9ydCBQcmVhbWJsZSBtb2RlLiAqLwotCWJjbTQzeHhfd3hfc2V0X3Nob3J0cHJlYW1ibGUsCi0JLyogR2V0IFNob3J0IFByZWFtYmxlIG1vZGUuICovCi0JYmNtNDN4eF93eF9nZXRfc2hvcnRwcmVhbWJsZSwKLQkvKiBFbmFibGUvRGlzYWJsZSBTb2Z0d2FyZSBFbmNyeXB0aW9uIG1vZGUgKi8KLQliY200M3h4X3d4X3NldF9zd2VuY3J5cHRpb24sCi0JLyogR2V0IFNvZnR3YXJlIEVuY3J5cHRpb24gbW9kZSAqLwotCWJjbTQzeHhfd3hfZ2V0X3N3ZW5jcnlwdGlvbiwKLQkvKiBXcml0ZSBTUlBST00gZGF0YS4gKi8KLQliY200M3h4X3d4X3Nwcm9tX3dyaXRlLAotCS8qIFJlYWQgU1BST00gZGF0YS4gKi8KLQliY200M3h4X3d4X3Nwcm9tX3JlYWQsCi19OwotCi0jZGVmaW5lIFBSSVZfV1hfU0VUX0lOVEVSRk1PREUJCShTSU9DSVdGSVJTVFBSSVYgKyAwKQotI2RlZmluZSBQUklWX1dYX0dFVF9JTlRFUkZNT0RFCQkoU0lPQ0lXRklSU1RQUklWICsgMSkKLSNkZWZpbmUgUFJJVl9XWF9TRVRfU0hPUlRQUkVBTUJMRQkoU0lPQ0lXRklSU1RQUklWICsgMikKLSNkZWZpbmUgUFJJVl9XWF9HRVRfU0hPUlRQUkVBTUJMRQkoU0lPQ0lXRklSU1RQUklWICsgMykKLSNkZWZpbmUgUFJJVl9XWF9TRVRfU1dFTkNSWVBUSU9OCShTSU9DSVdGSVJTVFBSSVYgKyA0KQotI2RlZmluZSBQUklWX1dYX0dFVF9TV0VOQ1JZUFRJT04JKFNJT0NJV0ZJUlNUUFJJViArIDUpCi0jZGVmaW5lIFBSSVZfV1hfU1BST01fV1JJVEUJCShTSU9DSVdGSVJTVFBSSVYgKyA2KQotI2RlZmluZSBQUklWX1dYX1NQUk9NX1JFQUQJCShTSU9DSVdGSVJTVFBSSVYgKyA3KQotCi0jZGVmaW5lIFBSSVZfV1hfRFVNTVkoaW9jdGwpCVwKLQl7CQkJCQlcCi0JCS5jbWQJCT0gKGlvY3RsKSwJXAotCQkubmFtZQkJPSAiX191bnVzZWQiCVwKLQl9Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIGJjbTQzeHhfcHJpdl93eF9hcmdzW10gPSB7Ci0JewotCQkuY21kCQk9IFBSSVZfV1hfU0VUX0lOVEVSRk1PREUsCi0JCS5zZXRfYXJncwk9IElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCQkubmFtZQkJPSAic2V0X2ludGVyZm1vZGUiLAotCX0sCi0JewotCQkuY21kCQk9IFBSSVZfV1hfR0VUX0lOVEVSRk1PREUsCi0JCS5nZXRfYXJncwk9IElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1dYX1NUUklORywKLQkJLm5hbWUJCT0gImdldF9pbnRlcmZtb2RlIiwKLQl9LAotCXsKLQkJLmNtZAkJPSBQUklWX1dYX1NFVF9TSE9SVFBSRUFNQkxFLAotCQkuc2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkJLm5hbWUJCT0gInNldF9zaG9ydHByZWFtYiIsCi0JfSwKLQl7Ci0JCS5jbWQJCT0gUFJJVl9XWF9HRVRfU0hPUlRQUkVBTUJMRSwKLQkJLmdldF9hcmdzCT0gSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCBNQVhfV1hfU1RSSU5HLAotCQkubmFtZQkJPSAiZ2V0X3Nob3J0cHJlYW1iIiwKLQl9LAotCXsKLQkJLmNtZAkJPSBQUklWX1dYX1NFVF9TV0VOQ1JZUFRJT04sCi0JCS5zZXRfYXJncwk9IElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCQkubmFtZQkJPSAic2V0X3N3ZW5jcnlwdCIsCi0JfSwKLQl7Ci0JCS5jbWQJCT0gUFJJVl9XWF9HRVRfU1dFTkNSWVBUSU9OLAotCQkuZ2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IE1BWF9XWF9TVFJJTkcsCi0JCS5uYW1lCQk9ICJnZXRfc3dlbmNyeXB0IiwKLQl9LAotCXsKLQkJLmNtZAkJPSBQUklWX1dYX1NQUk9NX1dSSVRFLAotCQkuc2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfQ0hBUiB8IFNQUk9NX0JVRkZFUlNJWkUsCi0JCS5uYW1lCQk9ICJ3cml0ZV9zcHJvbSIsCi0JfSwKLQl7Ci0JCS5jbWQJCT0gUFJJVl9XWF9TUFJPTV9SRUFELAotCQkuZ2V0X2FyZ3MJPSBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IFNQUk9NX0JVRkZFUlNJWkUsCi0JCS5uYW1lCQk9ICJyZWFkX3Nwcm9tIiwKLQl9LAotfTsKLQotY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGJjbTQzeHhfd3hfaGFuZGxlcnNfZGVmID0gewotCS5zdGFuZGFyZAkJPSBiY200M3h4X3d4X2hhbmRsZXJzLAotCS5udW1fc3RhbmRhcmQJCT0gQVJSQVlfU0laRShiY200M3h4X3d4X2hhbmRsZXJzKSwKLQkubnVtX3ByaXZhdGUJCT0gQVJSQVlfU0laRShiY200M3h4X3ByaXZfd3hfaGFuZGxlcnMpLAotCS5udW1fcHJpdmF0ZV9hcmdzCT0gQVJSQVlfU0laRShiY200M3h4X3ByaXZfd3hfYXJncyksCi0JLnByaXZhdGUJCT0gYmNtNDN4eF9wcml2X3d4X2hhbmRsZXJzLAotCS5wcml2YXRlX2FyZ3MJCT0gYmNtNDN4eF9wcml2X3d4X2FyZ3MsCi0JLmdldF93aXJlbGVzc19zdGF0cwk9IGJjbTQzeHhfZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjlmZjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotCi0gIEJyb2FkY29tIEJDTTQzeHggd2lyZWxlc3MgZHJpdmVyCi0KLSAgQ29weXJpZ2h0IChjKSAyMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPiwKLSAgICAgICAgICAgICAgICAgICAgIFN0ZWZhbm8gQnJpdmlvIDxzdDNAcmlzZXVwLm5ldD4KLSAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+Ci0gICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAgICAgICAgICAgICAgICAgICAgIEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgotCi0gIFNvbWUgcGFydHMgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzIyMDAKLSAgZHJpdmVyICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8KLQotI2lmbmRlZiBCQ000M3h4X1dYX0hfCi0jZGVmaW5lIEJDTTQzeHhfV1hfSF8KLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBiY200M3h4X3d4X2hhbmRsZXJzX2RlZjsKLQotI2VuZGlmIC8qIEJDTTQzeHhfV1hfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzlmZTExLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjUgKzAsMCBAQAotLyoKLQotICBCcm9hZGNvbSBCQ000M3h4IHdpcmVsZXNzIGRyaXZlcgotCi0gIFRyYW5zbWlzc2lvbiAoVFgvUlgpIHJlbGF0ZWQgZnVuY3Rpb25zLgotCi0gIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4sCi0gICAgICAgICAgICAgICAgICAgICBTdGVmYW5vIEJyaXZpbyA8c3QzQHJpc2V1cC5uZXQ+Ci0gICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gICAgICAgICAgICAgICAgICAgICBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KLQotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdGVldCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0qLwotCi0jaW5jbHVkZSAiYmNtNDN4eF94bWl0LmgiCi0KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi0KLS8qIEV4dHJhY3QgdGhlIGJpdHJhdGUgb3V0IG9mIGEgQ0NLIFBMQ1AgaGVhZGVyLiAqLwotc3RhdGljIHU4IGJjbTQzeHhfcGxjcF9nZXRfYml0cmF0ZV9jY2soc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI0ICpwbGNwKQotewotCXN3aXRjaCAocGxjcC0+cmF3WzBdKSB7Ci0JY2FzZSAweDBBOgotCQlyZXR1cm4gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKLQljYXNlIDB4MTQ6Ci0JCXJldHVybiBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COwotCWNhc2UgMHgzNzoKLQkJcmV0dXJuIElFRUU4MDIxMV9DQ0tfUkFURV81TUI7Ci0JY2FzZSAweDZFOgotCQlyZXR1cm4gSUVFRTgwMjExX0NDS19SQVRFXzExTUI7Ci0JfQotCWFzc2VydCgwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogRXh0cmFjdCB0aGUgYml0cmF0ZSBvdXQgb2YgYW4gT0ZETSBQTENQIGhlYWRlci4gKi8KLXN0YXRpYyB1OCBiY200M3h4X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbShzdHJ1Y3QgYmNtNDN4eF9wbGNwX2hkcjQgKnBsY3ApCi17Ci0Jc3dpdGNoIChwbGNwLT5yYXdbMF0gJiAweEYpIHsKLQljYXNlIDB4QjoKLQkJcmV0dXJuIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COwotCWNhc2UgMHhGOgotCQlyZXR1cm4gSUVFRTgwMjExX09GRE1fUkFURV85TUI7Ci0JY2FzZSAweEE6Ci0JCXJldHVybiBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUI7Ci0JY2FzZSAweEU6Ci0JCXJldHVybiBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI7Ci0JY2FzZSAweDk6Ci0JCXJldHVybiBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI7Ci0JY2FzZSAweEQ6Ci0JCXJldHVybiBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI7Ci0JY2FzZSAweDg6Ci0JCXJldHVybiBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI7Ci0JY2FzZSAweEM6Ci0JCXJldHVybiBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI7Ci0JfQotCWFzc2VydCgwKTsKLQlyZXR1cm4gMDsKLX0KLQotdTggYmNtNDN4eF9wbGNwX2dldF9yYXRlY29kZV9jY2soY29uc3QgdTggYml0cmF0ZSkKLXsKLQlzd2l0Y2ggKGJpdHJhdGUpIHsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xTUI6Ci0JCXJldHVybiAweDBBOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKLQkJcmV0dXJuIDB4MTQ7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCQlyZXR1cm4gMHgzNzsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COgotCQlyZXR1cm4gMHg2RTsKLQl9Ci0JYXNzZXJ0KDApOwotCXJldHVybiAwOwotfQotCi11OCBiY200M3h4X3BsY3BfZ2V0X3JhdGVjb2RlX29mZG0oY29uc3QgdTggYml0cmF0ZSkKLXsKLQlzd2l0Y2ggKGJpdHJhdGUpIHsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COgotCQlyZXR1cm4gMHhCOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV85TUI6Ci0JCXJldHVybiAweEY7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUI6Ci0JCXJldHVybiAweEE7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6Ci0JCXJldHVybiAweEU7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI6Ci0JCXJldHVybiAweDk7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI6Ci0JCXJldHVybiAweEQ7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6Ci0JCXJldHVybiAweDg7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI6Ci0JCXJldHVybiAweEM7Ci0JfQotCWFzc2VydCgwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYmNtNDN4eF9nZW5lcmF0ZV9wbGNwX2hkcihzdHJ1Y3QgYmNtNDN4eF9wbGNwX2hkcjQgKnBsY3AsCi0JCQkJICAgICAgY29uc3QgdTE2IG9jdGV0cywgY29uc3QgdTggYml0cmF0ZSwKLQkJCQkgICAgICBjb25zdCBpbnQgb2ZkbV9tb2R1bGF0aW9uKQotewotCV9fbGUzMiAqZGF0YSA9ICYocGxjcC0+ZGF0YSk7Ci0JX191OCAqcmF3ID0gcGxjcC0+cmF3OwotCi0JaWYgKG9mZG1fbW9kdWxhdGlvbikgewotCQl1MzIgdmFsID0gYmNtNDN4eF9wbGNwX2dldF9yYXRlY29kZV9vZmRtKGJpdHJhdGUpOwotCQlhc3NlcnQoIShvY3RldHMgJiAweEYwMDApKTsKLQkJdmFsIHw9IChvY3RldHMgPDwgNSk7Ci0JCSpkYXRhID0gY3B1X3RvX2xlMzIodmFsKTsKLQl9IGVsc2UgewotCQl1MzIgcGxlbjsKLQotCQlwbGVuID0gb2N0ZXRzICogMTYgLyBiaXRyYXRlOwotCQlpZiAoKG9jdGV0cyAqIDE2ICUgYml0cmF0ZSkgPiAwKSB7Ci0JCQlwbGVuKys7Ci0JCQlpZiAoKGJpdHJhdGUgPT0gSUVFRTgwMjExX0NDS19SQVRFXzExTUIpCi0JCQkgICAgJiYgKChvY3RldHMgKiA4ICUgMTEpIDwgNCkpIHsKLQkJCQlyYXdbMV0gPSAweDg0OwotCQkJfSBlbHNlCi0JCQkJcmF3WzFdID0gMHgwNDsKLQkJfSBlbHNlCi0JCQlyYXdbMV0gPSAweDA0OwotCQkqZGF0YSB8PSBjcHVfdG9fbGUzMihwbGVuIDw8IDE2KTsKLQkJcmF3WzBdID0gYmNtNDN4eF9wbGNwX2dldF9yYXRlY29kZV9jY2soYml0cmF0ZSk7Ci0JfQotfQotCi1zdGF0aWMgdTggYmNtNDN4eF9jYWxjX2ZhbGxiYWNrX3JhdGUodTggYml0cmF0ZSkKLXsKLQlzd2l0Y2ggKGJpdHJhdGUpIHsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xTUI6Ci0JCXJldHVybiBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKLQkJcmV0dXJuIElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCQlyZXR1cm4gSUVFRTgwMjExX0NDS19SQVRFXzJNQjsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COgotCQlyZXR1cm4gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COgotCQlyZXR1cm4gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgotCQlyZXR1cm4gSUVFRTgwMjExX09GRE1fUkFURV82TUI7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUI6Ci0JCXJldHVybiBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjoKLQkJcmV0dXJuIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKLQkJcmV0dXJuIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjoKLQkJcmV0dXJuIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjoKLQkJcmV0dXJuIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKLQkJcmV0dXJuIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKLQl9Ci0JYXNzZXJ0KDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMKLV9fbGUxNiBiY200M3h4X2NhbGNfZHVyYXRpb25faWQoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKndpcmVsZXNzX2hlYWRlciwKLQkJCQl1OCBiaXRyYXRlKQotewotCWNvbnN0IHUxNiBmcmFtZV9jdGwgPSBsZTE2X3RvX2NwdSh3aXJlbGVzc19oZWFkZXItPmZyYW1lX2N0bCk7Ci0JX19sZTE2IGR1cmF0aW9uX2lkID0gd2lyZWxlc3NfaGVhZGVyLT5kdXJhdGlvbl9pZDsKLQotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmcmFtZV9jdGwpKSB7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgotCQkvL1RPRE86IFN0ZWFsIHRoZSBjb2RlIGZyb20gaWVlZTgwMjExLCBvbmNlIGl0IGlzIGNvbXBsZXRlZCB0aGVyZS4KLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQkvKiBVc2UgdGhlIG9yaWdpbmFsIGR1cmF0aW9uL2lkLiAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhc3NlcnQoMCk7Ci0JfQotCi0JcmV0dXJuIGR1cmF0aW9uX2lkOwotfQotCi1zdGF0aWMgaW5saW5lCi11MTYgY2VpbGluZ19kaXYodTE2IGRpdmlkZW5kLCB1MTYgZGl2aXNvcikKLXsKLQlyZXR1cm4gKChkaXZpZGVuZCArIGRpdmlzb3IgLSAxKSAvIGRpdmlzb3IpOwotfQotCi1zdGF0aWMgdm9pZCBiY200M3h4X2dlbmVyYXRlX3J0cyhjb25zdCBzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHksCi0JCQkJIHN0cnVjdCBiY200M3h4X3R4aGRyICp0eGhkciwKLQkJCQkgdTE2ICpmbGFncywKLQkJCQkgdTggYml0cmF0ZSwKLQkJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKndsaGRyKQotewotCXUxNiBmY3RsOwotCXUxNiBkdXI7Ci0JdTggZmFsbGJhY2tfYml0cmF0ZTsKLQlpbnQgb2ZkbV9tb2R1bGF0aW9uOwotCWludCBmYWxsYmFja19vZmRtX21vZHVsYXRpb247Ci0vLwl1OCAqc2EsICpkYTsKLQl1MTYgZmxlbjsKLQotLy9GSVhNRQlzYSA9IGllZWU4MDIxMV9nZXRfU0EoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopd2xoZHIpOwotLy9GSVhNRQlkYSA9IGllZWU4MDIxMV9nZXRfREEoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopd2xoZHIpOwotCWZhbGxiYWNrX2JpdHJhdGUgPSBiY200M3h4X2NhbGNfZmFsbGJhY2tfcmF0ZShiaXRyYXRlKTsKLQlvZmRtX21vZHVsYXRpb24gPSAhKGllZWU4MDIxMV9pc19jY2tfcmF0ZShiaXRyYXRlKSk7Ci0JZmFsbGJhY2tfb2ZkbV9tb2R1bGF0aW9uID0gIShpZWVlODAyMTFfaXNfY2NrX3JhdGUoZmFsbGJhY2tfYml0cmF0ZSkpOwotCi0JZmxlbiA9IHNpemVvZih1MTYpICsgc2l6ZW9mKHUxNikgKyBFVEhfQUxFTiArIEVUSF9BTEVOICsgSUVFRTgwMjExX0ZDU19MRU4sCi0JYmNtNDN4eF9nZW5lcmF0ZV9wbGNwX2hkcigoc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI0ICopKCZ0eGhkci0+cnRzX2N0c19wbGNwKSwKLQkJCQkgIGZsZW4sIGJpdHJhdGUsCi0JCQkJICAhaWVlZTgwMjExX2lzX2Nja19yYXRlKGJpdHJhdGUpKTsKLQliY200M3h4X2dlbmVyYXRlX3BsY3BfaGRyKChzdHJ1Y3QgYmNtNDN4eF9wbGNwX2hkcjQgKikoJnR4aGRyLT5ydHNfY3RzX2ZhbGxiYWNrX3BsY3ApLAotCQkJCSAgZmxlbiwgZmFsbGJhY2tfYml0cmF0ZSwKLQkJCQkgICFpZWVlODAyMTFfaXNfY2NrX3JhdGUoZmFsbGJhY2tfYml0cmF0ZSkpOwotCWZjdGwgPSBJRUVFODAyMTFfRlRZUEVfQ1RMOwotCWZjdGwgfD0gSUVFRTgwMjExX1NUWVBFX1JUUzsKLQlkdXIgPSBsZTE2X3RvX2NwdSh3bGhkci0+ZHVyYXRpb25faWQpOwotLypGSVhNRTogc2hvdWxkIHdlIHRlc3QgZm9yIGR1cj09MCBoZXJlIGFuZCBsZXQgaXQgdW5tb2RpZmllZCBpbiB0aGlzIGNhc2U/Ci0gKiAgICAgICBUaGUgZm9sbG93aW5nIGFzc2VydCBjaGVja3MgZm9yIHRoaXMgY2FzZS4uLgotICovCi1hc3NlcnQoZHVyKTsKLS8qRklYTUU6IFRoZSBkdXJhdGlvbiBjYWxjdWxhdGlvbiBpcyBub3QgcmVhbGx5IGNvcnJlY3QuCi0gKiAgICAgICBJIGFtIG5vdCAxMDAlIHN1cmUgd2hpY2ggYml0cmF0ZSB0byB1c2UuIFdlIHVzZSB0aGUgUlRTIHJhdGUgaGVyZSwKLSAqICAgICAgIGJ1dCB0aGlzIGlzIGxpa2VseSB0byBiZSB3cm9uZy4KLSAqLwotCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpIHsKLQkJLyogVGhyZWUgdGltZXMgU0lGUyAqLwotCQlkdXIgKz0gMTYgKiAzOwotCQkvKiBBZGQgQUNLIGR1cmF0aW9uLiAqLwotCQlkdXIgKz0gY2VpbGluZ19kaXYoKDE2ICsgOCAqICgxNCAvKmJ5dGVzKi8pICsgNikgKiAxMCwKLQkJCQkgICBiaXRyYXRlICogNCk7Ci0JCS8qIEFkZCBDVFMgZHVyYXRpb24uICovCi0JCWR1ciArPSBjZWlsaW5nX2RpdigoMTYgKyA4ICogKDE0IC8qYnl0ZXMqLykgKyA2KSAqIDEwLAotCQkJCSAgIGJpdHJhdGUgKiA0KTsKLQl9IGVsc2UgewotCQkvKiBUaHJlZSB0aW1lcyBTSUZTICovCi0JCWR1ciArPSAxMCAqIDM7Ci0JCS8qIEFkZCBBQ0sgZHVyYXRpb24uICovCi0JCWR1ciArPSBjZWlsaW5nX2Rpdig4ICogKDE0IC8qYnl0ZXMqLykgKiAxMCwKLQkJCQkgICBiaXRyYXRlKTsKLQkJLyogQWRkIENUUyBkdXJhdGlvbi4gKi8KLQkJZHVyICs9IGNlaWxpbmdfZGl2KDggKiAoMTQgLypieXRlcyovKSAqIDEwLAotCQkJCSAgIGJpdHJhdGUpOwotCX0KLQotCXR4aGRyLT5ydHNfY3RzX2ZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmY3RsKTsKLQl0eGhkci0+cnRzX2N0c19kdXIgPSBjcHVfdG9fbGUxNihkdXIpOwotLy9wcmludGsoQkNNNDN4eF9NQUNGTVQgIiAgIiBCQ000M3h4X01BQ0ZNVCAiICAiIEJDTTQzeHhfTUFDRk1UICJcbiIsIEJDTTQzeHhfTUFDQVJHKHdsaGRyLT5hZGRyMSksIEJDTTQzeHhfTUFDQVJHKHdsaGRyLT5hZGRyMiksIEJDTTQzeHhfTUFDQVJHKHdsaGRyLT5hZGRyMykpOwotLy9wcmludGsoQkNNNDN4eF9NQUNGTVQgIiAgIiBCQ000M3h4X01BQ0ZNVCAiXG4iLCBCQ000M3h4X01BQ0FSRyhzYSksIEJDTTQzeHhfTUFDQVJHKGRhKSk7Ci0JbWVtY3B5KHR4aGRyLT5ydHNfY3RzX21hYzEsIHdsaGRyLT5hZGRyMSwgRVRIX0FMRU4pOy8vRklYTUUhCi0vLwltZW1jcHkodHhoZHItPnJ0c19jdHNfbWFjMiwgc2EsIEVUSF9BTEVOKTsKLQotCSpmbGFncyB8PSBCQ000M3h4X1RYSERSRkxBR19SVFNDVFM7Ci0JKmZsYWdzIHw9IEJDTTQzeHhfVFhIRFJGTEFHX1JUUzsKLQlpZiAob2ZkbV9tb2R1bGF0aW9uKQotCQkqZmxhZ3MgfD0gQkNNNDN4eF9UWEhEUkZMQUdfUlRTQ1RTX09GRE07Ci0JaWYgKGZhbGxiYWNrX29mZG1fbW9kdWxhdGlvbikKLQkJKmZsYWdzIHw9IEJDTTQzeHhfVFhIRFJGTEFHX1JUU0NUU0ZBTExCQUNLX09GRE07Ci19Ci0JCQkJIAotdm9pZCBiY200M3h4X2dlbmVyYXRlX3R4aGRyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCSAgICBzdHJ1Y3QgYmNtNDN4eF90eGhkciAqdHhoZHIsCi0JCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJhZ21lbnRfZGF0YSwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbGVuLAotCQkJICAgIGNvbnN0IGludCBpc19maXJzdF9mcmFnbWVudCwKLQkJCSAgICBjb25zdCB1MTYgY29va2llKQotewotCWNvbnN0IHN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqd2lyZWxlc3NfaGVhZGVyID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopZnJhZ21lbnRfZGF0YTsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5ICpzZWNpbmZvID0gJmJjbS0+aWVlZS0+c2VjOwotCXU4IGJpdHJhdGU7Ci0JdTggZmFsbGJhY2tfYml0cmF0ZTsKLQlpbnQgb2ZkbV9tb2R1bGF0aW9uOwotCWludCBmYWxsYmFja19vZmRtX21vZHVsYXRpb247Ci0JdTE2IHBsY3BfZnJhZ21lbnRfbGVuID0gZnJhZ21lbnRfbGVuOwotCXUxNiBmbGFncyA9IDA7Ci0JdTE2IGNvbnRyb2wgPSAwOwotCXUxNiB3c2VjX3JhdGUgPSAwOwotCXUxNiBlbmNyeXB0X2ZyYW1lOwotCWNvbnN0IHUxNiBmdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUobGUxNl90b19jcHUod2lyZWxlc3NfaGVhZGVyLT5mcmFtZV9jdGwpKTsKLQljb25zdCBpbnQgaXNfbWd0ID0gKGZ0eXBlID09IElFRUU4MDIxMV9GVFlQRV9NR01UKTsKLQotCS8qIE5vdyBjb25zdHJ1Y3QgdGhlIFRYIGhlYWRlci4gKi8KLQltZW1zZXQodHhoZHIsIDAsIHNpemVvZigqdHhoZHIpKTsKLQotCWJpdHJhdGUgPSBpZWVlODAyMTFzb2Z0bWFjX3N1Z2dlc3RfdHhyYXRlKGJjbS0+c29mdG1hYywKLQkJaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIod2lyZWxlc3NfaGVhZGVyLT5hZGRyMSksIGlzX21ndCk7Ci0Jb2ZkbV9tb2R1bGF0aW9uID0gIShpZWVlODAyMTFfaXNfY2NrX3JhdGUoYml0cmF0ZSkpOwotCWZhbGxiYWNrX2JpdHJhdGUgPSBiY200M3h4X2NhbGNfZmFsbGJhY2tfcmF0ZShiaXRyYXRlKTsKLQlmYWxsYmFja19vZmRtX21vZHVsYXRpb24gPSAhKGllZWU4MDIxMV9pc19jY2tfcmF0ZShmYWxsYmFja19iaXRyYXRlKSk7Ci0KLQkvKiBTZXQgRnJhbWUgQ29udHJvbCBmcm9tIDgwMjExIGhlYWRlci4gKi8KLQl0eGhkci0+ZnJhbWVfY29udHJvbCA9IHdpcmVsZXNzX2hlYWRlci0+ZnJhbWVfY3RsOwotCS8qIENvcHkgYWRkcmVzczEgZnJvbSA4MDIxMSBoZWFkZXIuICovCi0JbWVtY3B5KHR4aGRyLT5tYWMxLCB3aXJlbGVzc19oZWFkZXItPmFkZHIxLCA2KTsKLQkvKiBTZXQgdGhlIGZhbGxiYWNrIGR1cmF0aW9uIElELiAqLwotCXR4aGRyLT5mYWxsYmFja19kdXJfaWQgPSBiY200M3h4X2NhbGNfZHVyYXRpb25faWQoKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICopd2lyZWxlc3NfaGVhZGVyLAotCQkJCQkJCSAgZmFsbGJhY2tfYml0cmF0ZSk7Ci0JLyogU2V0IHRoZSBjb29raWUgKHVzZWQgYXMgZHJpdmVyIGludGVybmFsIElEIGZvciB0aGUgZnJhbWUpICovCi0JdHhoZHItPmNvb2tpZSA9IGNwdV90b19sZTE2KGNvb2tpZSk7Ci0KLQkvKiBIYXJkd2FyZSBhcHBlbmRzIEZDUy4gKi8KLQlwbGNwX2ZyYWdtZW50X2xlbiArPSBJRUVFODAyMTFfRkNTX0xFTjsKLQotCS8qIEhhcmR3YXJlIGVuY3J5cHRpb24uICovCi0JZW5jcnlwdF9mcmFtZSA9IGxlMTZfdG9fY3B1cCgmd2lyZWxlc3NfaGVhZGVyLT5mcmFtZV9jdGwpICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwotCWlmIChlbmNyeXB0X2ZyYW1lICYmICFiY20tPmllZWUtPmhvc3RfZW5jcnlwdCkgewotCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopd2lyZWxlc3NfaGVhZGVyOwotCQltZW1jcHkodHhoZHItPndlcF9pdiwgaGRyLT5wYXlsb2FkLCA0KTsKLQkJLyogSGFyZHdhcmUgYXBwZW5kcyBJQ1YuICovCi0JCXBsY3BfZnJhZ21lbnRfbGVuICs9IDQ7Ci0KLQkJd3NlY19yYXRlIHw9IChiY20tPmtleVtzZWNpbmZvLT5hY3RpdmVfa2V5XS5hbGdvcml0aG0gPDwgQkNNNDN4eF9UWEhEUl9XU0VDX0FMR09fU0hJRlQpCi0JCQkgICAgICYgQkNNNDN4eF9UWEhEUl9XU0VDX0FMR09fTUFTSzsKLQkJd3NlY19yYXRlIHw9IChzZWNpbmZvLT5hY3RpdmVfa2V5IDw8IEJDTTQzeHhfVFhIRFJfV1NFQ19LRVlJTkRFWF9TSElGVCkKLQkJCSAgICAgJiBCQ000M3h4X1RYSERSX1dTRUNfS0VZSU5ERVhfTUFTSzsKLQl9Ci0KLQkvKiBHZW5lcmF0ZSB0aGUgUExDUCBoZWFkZXIgYW5kIHRoZSBmYWxsYmFjayBQTENQIGhlYWRlci4gKi8KLQliY200M3h4X2dlbmVyYXRlX3BsY3BfaGRyKChzdHJ1Y3QgYmNtNDN4eF9wbGNwX2hkcjQgKikoJnR4aGRyLT5wbGNwKSwKLQkJCQkgIHBsY3BfZnJhZ21lbnRfbGVuLAotCQkJCSAgYml0cmF0ZSwgb2ZkbV9tb2R1bGF0aW9uKTsKLQliY200M3h4X2dlbmVyYXRlX3BsY3BfaGRyKCZ0eGhkci0+ZmFsbGJhY2tfcGxjcCwgcGxjcF9mcmFnbWVudF9sZW4sCi0JCQkJICBmYWxsYmFja19iaXRyYXRlLCBmYWxsYmFja19vZmRtX21vZHVsYXRpb24pOwotCi0JLyogU2V0IHRoZSBDT05UUk9MIGZpZWxkICovCi0JaWYgKG9mZG1fbW9kdWxhdGlvbikKLQkJY29udHJvbCB8PSBCQ000M3h4X1RYSERSQ1RMX09GRE07Ci0JaWYgKGJjbS0+c2hvcnRfcHJlYW1ibGUpIC8vRklYTUU6IGNvdWxkIGJlIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBwbGVhc2UgdGVzdAotCQljb250cm9sIHw9IEJDTTQzeHhfVFhIRFJDVExfU0hPUlRfUFJFQU1CTEU7Ci0JY29udHJvbCB8PSAocGh5LT5hbnRlbm5hX2RpdmVyc2l0eSA8PCBCQ000M3h4X1RYSERSQ1RMX0FOVEVOTkFESVZfU0hJRlQpCi0JCSAgICYgQkNNNDN4eF9UWEhEUkNUTF9BTlRFTk5BRElWX01BU0s7Ci0KLQkvKiBTZXQgdGhlIEZMQUdTIGZpZWxkICovCi0JaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aXJlbGVzc19oZWFkZXItPmFkZHIxKSAmJgotCSAgICAhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2lyZWxlc3NfaGVhZGVyLT5hZGRyMSkpCi0JCWZsYWdzIHw9IEJDTTQzeHhfVFhIRFJGTEFHX0VYUEVDVEFDSzsKLQlpZiAoMSAvKiBGSVhNRTogUFMgcG9sbD8/ICovKQotCQlmbGFncyB8PSAweDEwOyAvLyBGSVhNRTogdW5rbm93biBtZWFuaW5nLgotCWlmIChmYWxsYmFja19vZmRtX21vZHVsYXRpb24pCi0JCWZsYWdzIHw9IEJDTTQzeHhfVFhIRFJGTEFHX0ZBTExCQUNLT0ZETTsKLQlpZiAoaXNfZmlyc3RfZnJhZ21lbnQpCi0JCWZsYWdzIHw9IEJDTTQzeHhfVFhIRFJGTEFHX0ZJUlNURlJBR01FTlQ7Ci0KLQkvKiBTZXQgV1NFQy9SQVRFIGZpZWxkICovCi0Jd3NlY19yYXRlIHw9ICh0eGhkci0+cGxjcC5yYXdbMF0gPDwgQkNNNDN4eF9UWEhEUl9SQVRFX1NISUZUKQotCQkgICAgICYgQkNNNDN4eF9UWEhEUl9SQVRFX01BU0s7Ci0KLQkvKiBHZW5lcmF0ZSB0aGUgUlRTL0NUUyBwYWNrZXQsIGlmIHJlcXVpcmVkLiAqLwotCS8qIEZJWE1FOiBXZSBzaG91bGQgZmlyc3QgdHJ5IHdpdGggQ1RTLXRvLXNlbGYsCi0JICogICAgICAgIGlmIHdlIGFyZSBvbiA4MDIxMWcuIElmIHdlIGdldCB0b28gbWFueQotCSAqICAgICAgICBmYWlsdXJlcyAoaGlkZGVuIG5vZGVzKSwgd2Ugc2hvdWxkIHN3aXRjaCBiYWNrIHRvIFJUUy9DVFMuCi0JICovCi0JaWYgKDAvKkZJWE1FIHR4Y3RsLT51c2VfcnRzX2N0cyovKSB7Ci0JCWJjbTQzeHhfZ2VuZXJhdGVfcnRzKHBoeSwgdHhoZHIsICZmbGFncywKLQkJCQkgICAgIDAvKkZJWE1FIHR4Y3RsLT5ydHNfY3RzX3JhdGUqLywKLQkJCQkgICAgIHdpcmVsZXNzX2hlYWRlcik7Ci0JfQotCi0JdHhoZHItPmZsYWdzID0gY3B1X3RvX2xlMTYoZmxhZ3MpOwotCXR4aGRyLT5jb250cm9sID0gY3B1X3RvX2xlMTYoY29udHJvbCk7Ci0JdHhoZHItPndzZWNfcmF0ZSA9IGNwdV90b19sZTE2KHdzZWNfcmF0ZSk7Ci19Ci0KLXN0YXRpYyBzOCBiY200M3h4X3Jzc2lfcG9zdHByb2Nlc3Moc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgIHU4IGluX3Jzc2ksIGludCBvZmRtLAotCQkJCSAgIGludCBhZGp1c3RfMjA1MywgaW50IGFkanVzdF8yMDUwKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JczMyIHRtcDsKLQotCXN3aXRjaCAocmFkaW8tPnZlcnNpb24pIHsKLQljYXNlIDB4MjA1MDoKLQkJaWYgKG9mZG0pIHsKLQkJCXRtcCA9IGluX3Jzc2k7Ci0JCQlpZiAodG1wID4gMTI3KQotCQkJCXRtcCAtPSAyNTY7Ci0JCQl0bXAgKj0gNzM7Ci0JCQl0bXAgLz0gNjQ7Ci0JCQlpZiAoYWRqdXN0XzIwNTApCi0JCQkJdG1wICs9IDI1OwotCQkJZWxzZQotCQkJCXRtcCAtPSAzOwotCQl9IGVsc2UgewotCQkJaWYgKGJjbS0+c3Byb20uYm9hcmRmbGFncyAmIEJDTTQzeHhfQkZMX1JTU0kpIHsKLQkJCQlpZiAoaW5fcnNzaSA+IDYzKQotCQkJCQlpbl9yc3NpID0gNjM7Ci0JCQkJdG1wID0gcmFkaW8tPm5yc3NpX2x0W2luX3Jzc2ldOwotCQkJCXRtcCA9IDMxIC0gdG1wOwotCQkJCXRtcCAqPSAtMTMxOwotCQkJCXRtcCAvPSAxMjg7Ci0JCQkJdG1wIC09IDU3OwotCQkJfSBlbHNlIHsKLQkJCQl0bXAgPSBpbl9yc3NpOwotCQkJCXRtcCA9IDMxIC0gdG1wOwotCQkJCXRtcCAqPSAtMTQ5OwotCQkJCXRtcCAvPSAxMjg7Ci0JCQkJdG1wIC09IDY4OwotCQkJfQotCQkJaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRyAmJgotCQkJICAgIGFkanVzdF8yMDUwKQotCQkJCXRtcCArPSAyNTsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4MjA2MDoKLQkJaWYgKGluX3Jzc2kgPiAxMjcpCi0JCQl0bXAgPSBpbl9yc3NpIC0gMjU2OwotCQllbHNlCi0JCQl0bXAgPSBpbl9yc3NpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl0bXAgPSBpbl9yc3NpOwotCQl0bXAgLT0gMTE7Ci0JCXRtcCAqPSAxMDM7Ci0JCXRtcCAvPSA2NDsKLQkJaWYgKGFkanVzdF8yMDUzKQotCQkJdG1wIC09IDEwOTsKLQkJZWxzZQotCQkJdG1wIC09IDgzOwotCX0KLQotCXJldHVybiAoczgpdG1wOwotfQotCi0vL1RPRE8KLSNpZiAwCi1zdGF0aWMgczggYmNtNDN4eF9yc3Npbm9pc2VfcG9zdHByb2Nlc3Moc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCQl1OCBpbl9yc3NpKQotewotCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKLQlzOCByZXQ7Ci0KLQlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKSB7Ci0JCS8vVE9ETzogSW5jb21wbGV0ZSBzcGVjcy4KLQkJcmV0ID0gMDsKLQl9IGVsc2UKLQkJcmV0ID0gYmNtNDN4eF9yc3NpX3Bvc3Rwcm9jZXNzKGJjbSwgaW5fcnNzaSwgMCwgMSwgMSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLWludCBiY200M3h4X3J4KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgICAgICAgc3RydWN0IGJjbTQzeHhfcnhoZHIgKnJ4aGRyKQotewotCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKLQlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0Jc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI0ICpwbGNwOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKndsaGRyOwotCXUxNiBmcmFtZV9jdGw7Ci0JaW50IGlzX3BhY2tldF9mb3JfdXMgPSAwOwotCWludCBlcnIgPSAtRUlOVkFMOwotCWNvbnN0IHUxNiByeGZsYWdzMSA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5mbGFnczEpOwotCWNvbnN0IHUxNiByeGZsYWdzMiA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5mbGFnczIpOwotCWNvbnN0IHUxNiByeGZsYWdzMyA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5mbGFnczMpOwotCWNvbnN0IGludCBpc19vZmRtID0gISEocnhmbGFnczEgJiBCQ000M3h4X1JYSERSX0ZMQUdTMV9PRkRNKTsKLQotCWlmIChyeGZsYWdzMiAmIEJDTTQzeHhfUlhIRFJfRkxBR1MyX1RZUEUyRlJBTUUpIHsKLQkJcGxjcCA9IChzdHJ1Y3QgYmNtNDN4eF9wbGNwX2hkcjQgKikoc2tiLT5kYXRhICsgMik7Ci0JCS8qIFNraXAgdHdvIHVua25vd24gYnl0ZXMgYW5kIHRoZSBQTENQIGhlYWRlci4gKi8KLQkJc2tiX3B1bGwoc2tiLCAyICsgc2l6ZW9mKHN0cnVjdCBiY200M3h4X3BsY3BfaGRyNikpOwotCX0gZWxzZSB7Ci0JCXBsY3AgPSAoc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI0ICopKHNrYi0+ZGF0YSk7Ci0JCS8qIFNraXAgdGhlIFBMQ1AgaGVhZGVyLiAqLwotCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9wbGNwX2hkcjYpKTsKLQl9Ci0JLyogVGhlIFNLQiBjb250YWlucyB0aGUgUEFZTE9BRCAod2lyZWxlc3MgaGVhZGVyICsgZGF0YSkKLQkgKiBhdCB0aGlzIHBvaW50LiBUaGUgRkNTIGF0IHRoZSBlbmQgaXMgc3RyaXBwZWQuCi0JICovCi0KLQltZW1zZXQoJnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsKLQlzdGF0cy5tYWNfdGltZSA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5tYWN0aW1lKTsKLQlzdGF0cy5yc3NpID0gcnhoZHItPnJzc2k7Ci0Jc3RhdHMuc2lnbmFsID0gYmNtNDN4eF9yc3NpX3Bvc3Rwcm9jZXNzKGJjbSwgcnhoZHItPnJzc2ksIGlzX29mZG0sCi0JCQkJCSAgICAgICEhKHJ4ZmxhZ3MxICYgQkNNNDN4eF9SWEhEUl9GTEFHUzFfMjA1M1JTU0lBREopLAotCQkJCQkgICAgICAhIShyeGZsYWdzMyAmIEJDTTQzeHhfUlhIRFJfRkxBR1MzXzIwNTBSU1NJQURKKSk7Ci0Jc3RhdHMubm9pc2UgPSBiY20tPnN0YXRzLm5vaXNlOwotCWlmIChpc19vZmRtKQotCQlzdGF0cy5yYXRlID0gYmNtNDN4eF9wbGNwX2dldF9iaXRyYXRlX29mZG0ocGxjcCk7Ci0JZWxzZQotCQlzdGF0cy5yYXRlID0gYmNtNDN4eF9wbGNwX2dldF9iaXRyYXRlX2NjayhwbGNwKTsKLQlzdGF0cy5yZWNlaXZlZF9jaGFubmVsID0gcmFkaW8tPmNoYW5uZWw7Ci0Jc3RhdHMubWFzayA9IElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgfAotCQkgICAgIElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRSB8Ci0JCSAgICAgSUVFRTgwMjExX1NUQVRNQVNLX1JBVEUgfAotCQkgICAgIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJOwotCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpCi0JCXN0YXRzLmZyZXEgPSBJRUVFODAyMTFfNTJHSFpfQkFORDsKLQllbHNlCi0JCXN0YXRzLmZyZXEgPSBJRUVFODAyMTFfMjRHSFpfQkFORDsKLQlzdGF0cy5sZW4gPSBza2ItPmxlbjsKLQotCWJjbS0+c3RhdHMubGFzdF9yeCA9IGppZmZpZXM7Ci0JaWYgKGJjbS0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJZXJyID0gaWVlZTgwMjExX3J4KGJjbS0+aWVlZSwgc2tiLCAmc3RhdHMpOwotCQlyZXR1cm4gKGVyciA9PSAwKSA/IC1FSU5WQUwgOiAwOwotCX0KLQotCXdsaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopKHNrYi0+ZGF0YSk7Ci0KLQlzd2l0Y2ggKGJjbS0+aWVlZS0+aXdfbW9kZSkgewotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJaWYgKG1lbWNtcCh3bGhkci0+YWRkcjEsIGJjbS0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwIHx8Ci0JCSAgICBtZW1jbXAod2xoZHItPmFkZHIzLCBiY20tPmllZWUtPmJzc2lkLCBFVEhfQUxFTikgPT0gMCB8fAotCQkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2xoZHItPmFkZHIxKSB8fAotCQkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIod2xoZHItPmFkZHIxKSB8fAotCQkgICAgYmNtLT5uZXRfZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotCQkJaXNfcGFja2V0X2Zvcl91cyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9JTkZSQToKLQlkZWZhdWx0OgotCQkvKiBXaGVuIHJlY2VpdmluZyBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0IHBhY2tldHMsIGZpbHRlciBvdXQKLQkJICAgdGhlIHBhY2tldHMgd2Ugc2VuZCBvdXJzZWxmOyB3ZSBzaG91bGRuJ3Qgc2VlIHRob3NlICovCi0JCWlmIChtZW1jbXAod2xoZHItPmFkZHIzLCBiY20tPmllZWUtPmJzc2lkLCBFVEhfQUxFTikgPT0gMCB8fAotCQkgICAgbWVtY21wKHdsaGRyLT5hZGRyMSwgYmNtLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDAgfHwKLQkJICAgIChtZW1jbXAod2xoZHItPmFkZHIzLCBiY20tPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgJiYKLQkJICAgICAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2xoZHItPmFkZHIxKSB8fAotCQkgICAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3bGhkci0+YWRkcjEpIHx8Ci0JCSAgICAgIGJjbS0+bmV0X2Rldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpKQotCQkJaXNfcGFja2V0X2Zvcl91cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWZyYW1lX2N0bCA9IGxlMTZfdG9fY3B1KHdsaGRyLT5mcmFtZV9jdGwpOwotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmcmFtZV9jdGwpKSB7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJaWVlZTgwMjExX3J4X21ndChiY20tPmllZWUsIHdsaGRyLCAmc3RhdHMpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoaXNfcGFja2V0X2Zvcl91cykgewotCQkJZXJyID0gaWVlZTgwMjExX3J4KGJjbS0+aWVlZSwgc2tiLCAmc3RhdHMpOwotCQkJZXJyID0gKGVyciA9PSAwKSA/IC1FSU5WQUwgOiAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YzEzNWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0jaWZuZGVmIEJDTTQzeHhfWE1JVF9IXwotI2RlZmluZSBCQ000M3h4X1hNSVRfSF8KLQotI2luY2x1ZGUgImJjbTQzeHhfbWFpbi5oIgotCi0KLSNkZWZpbmUgX2JjbTQzeHhfZGVjbGFyZV9wbGNwX2hkcihzaXplKSBcCi0Jc3RydWN0IGJjbTQzeHhfcGxjcF9oZHIjI3NpemUgewkJXAotCQl1bmlvbiB7CQkJCVwKLQkJCV9fbGUzMiBkYXRhOwkJXAotCQkJX191OCByYXdbc2l6ZV07CQlcCi0JCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwlcCi0JfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkKLQotLyogc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI0ICovCi1fYmNtNDN4eF9kZWNsYXJlX3BsY3BfaGRyKDQpOwotLyogc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI2ICovCi1fYmNtNDN4eF9kZWNsYXJlX3BsY3BfaGRyKDYpOwotCi0jdW5kZWYgX2JjbTQzeHhfZGVjbGFyZV9wbGNwX2hkcgotCi0vKiBEZXZpY2Ugc3BlY2lmaWMgVFggaGVhZGVyLiBUbyBiZSBwcmVwZW5kZWQgdG8gVFggZnJhbWVzLiAqLwotc3RydWN0IGJjbTQzeHhfdHhoZHIgewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBmbGFnczsKLQkJCV9fbGUxNiB3c2VjX3JhdGU7Ci0JCQlfX2xlMTYgZnJhbWVfY29udHJvbDsKLQkJCXUxNiB1bmtub3duX3plcm9lZF8wOwotCQkJX19sZTE2IGNvbnRyb2w7Ci0JCQl1OCB3ZXBfaXZbMTBdOwotCQkJdTggdW5rbm93bl93c2VjX3RraXBfZGF0YVszXTsgLy9GSVhNRQotCQkJUEFEX0JZVEVTKDMpOwotCQkJdTggbWFjMVs2XTsKLQkJCXUxNiB1bmtub3duX3plcm9lZF8xOwotCQkJc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI0IHJ0c19jdHNfZmFsbGJhY2tfcGxjcDsKLQkJCV9fbGUxNiBydHNfY3RzX2R1cl9mYWxsYmFjazsKLQkJCXN0cnVjdCBiY200M3h4X3BsY3BfaGRyNCBmYWxsYmFja19wbGNwOwotCQkJX19sZTE2IGZhbGxiYWNrX2R1cl9pZDsKLQkJCVBBRF9CWVRFUygyKTsKLQkJCV9fbGUxNiBjb29raWU7Ci0JCQlfX2xlMTYgdW5rbm93bl9zY2Jfc3R1ZmY7IC8vRklYTUUKLQkJCXN0cnVjdCBiY200M3h4X3BsY3BfaGRyNiBydHNfY3RzX3BsY3A7Ci0JCQlfX2xlMTYgcnRzX2N0c19mcmFtZV9jb250cm9sOwotCQkJX19sZTE2IHJ0c19jdHNfZHVyOwotCQkJdTggcnRzX2N0c19tYWMxWzZdOwotCQkJdTggcnRzX2N0c19tYWMyWzZdOwotCQkJUEFEX0JZVEVTKDIpOwotCQkJc3RydWN0IGJjbTQzeHhfcGxjcF9oZHI2IHBsY3A7Ci0JCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCQl1OCByYXdbODJdOwotCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLS8qIFZhbHVlcy9NYXNrcyBmb3IgdGhlIGRldmljZSBUWCBoZWFkZXIgKi8KLSNkZWZpbmUgQkNNNDN4eF9UWEhEUkZMQUdfRVhQRUNUQUNLCQkweDAwMDEKLSNkZWZpbmUgQkNNNDN4eF9UWEhEUkZMQUdfUlRTQ1RTCQkweDAwMDIKLSNkZWZpbmUgQkNNNDN4eF9UWEhEUkZMQUdfUlRTCQkJMHgwMDA0Ci0jZGVmaW5lIEJDTTQzeHhfVFhIRFJGTEFHX0ZJUlNURlJBR01FTlQJCTB4MDAwOAotI2RlZmluZSBCQ000M3h4X1RYSERSRkxBR19ERVNUUFNNT0RFCQkweDAwMjAKLSNkZWZpbmUgQkNNNDN4eF9UWEhEUkZMQUdfUlRTQ1RTX09GRE0JCTB4MDA4MAotI2RlZmluZSBCQ000M3h4X1RYSERSRkxBR19GQUxMQkFDS09GRE0JCTB4MDEwMAotI2RlZmluZSBCQ000M3h4X1RYSERSRkxBR19SVFNDVFNGQUxMQkFDS19PRkRNCTB4MDIwMAotI2RlZmluZSBCQ000M3h4X1RYSERSRkxBR19DVFMJCQkweDA0MDAKLSNkZWZpbmUgQkNNNDN4eF9UWEhEUkZMQUdfRlJBTUVCVVJTVAkJMHgwODAwCi0KLSNkZWZpbmUgQkNNNDN4eF9UWEhEUkNUTF9PRkRNCQkJMHgwMDAxCi0jZGVmaW5lIEJDTTQzeHhfVFhIRFJDVExfU0hPUlRfUFJFQU1CTEUJCTB4MDAxMAotI2RlZmluZSBCQ000M3h4X1RYSERSQ1RMX0FOVEVOTkFESVZfTUFTSwkweDAwMzAKLSNkZWZpbmUgQkNNNDN4eF9UWEhEUkNUTF9BTlRFTk5BRElWX1NISUZUCTgKLQotI2RlZmluZSBCQ000M3h4X1RYSERSX1JBVEVfTUFTSwkJCTB4MEYwMAotI2RlZmluZSBCQ000M3h4X1RYSERSX1JBVEVfU0hJRlQJCTgKLSNkZWZpbmUgQkNNNDN4eF9UWEhEUl9SVFNSQVRFX01BU0sJCTB4RjAwMAotI2RlZmluZSBCQ000M3h4X1RYSERSX1JUU1JBVEVfU0hJRlQJCTEyCi0jZGVmaW5lIEJDTTQzeHhfVFhIRFJfV1NFQ19LRVlJTkRFWF9NQVNLCTB4MDBGMAotI2RlZmluZSBCQ000M3h4X1RYSERSX1dTRUNfS0VZSU5ERVhfU0hJRlQJNAotI2RlZmluZSBCQ000M3h4X1RYSERSX1dTRUNfQUxHT19NQVNLCQkweDAwMDMKLSNkZWZpbmUgQkNNNDN4eF9UWEhEUl9XU0VDX0FMR09fU0hJRlQJCTAKLQotdm9pZCBiY200M3h4X2dlbmVyYXRlX3R4aGRyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCSAgICBzdHJ1Y3QgYmNtNDN4eF90eGhkciAqdHhoZHIsCi0JCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJhZ21lbnRfZGF0YSwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbGVuLAotCQkJICAgIGNvbnN0IGludCBpc19maXJzdF9mcmFnbWVudCwKLQkJCSAgICBjb25zdCB1MTYgY29va2llKTsKLQotLyogUlggaGVhZGVyIGFzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLiAqLwotc3RydWN0IGJjbTQzeHhfcnhoZHIgewotCS8qIEZyYW1lIExlbmd0aC4gTXVzdCBiZSBnZW5lcmF0ZWQgZXhwbGljaXRseSBpbiBQSU8gbW9kZS4gKi8KLQlfX2xlMTYgZnJhbWVfbGVuZ3RoOwotCVBBRF9CWVRFUygyKTsKLQkvKiBGbGFncyBmaWVsZCAxICovCi0JX19sZTE2IGZsYWdzMTsKLQl1OCByc3NpOwotCXU4IHNpZ25hbF9xdWFsaXR5OwotCVBBRF9CWVRFUygyKTsKLQkvKiBGbGFncyBmaWVsZCAzICovCi0JX19sZTE2IGZsYWdzMzsKLQkvKiBGbGFncyBmaWVsZCAyICovCi0JX19sZTE2IGZsYWdzMjsKLQkvKiBMb3dlciAxNmJpdHMgb2YgdGhlIFRTRiBhdCB0aGUgdGltZSB0aGUgZnJhbWUgc3RhcnRlZC4gKi8KLQlfX2xlMTYgbWFjdGltZTsKLQlQQURfQllURVMoMTQpOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLSNkZWZpbmUgQkNNNDN4eF9SWEhEUl9GTEFHUzFfT0ZETQkJKDEgPDwgMCkKLS8qI2RlZmluZSBCQ000M3h4X1JYSERSX0ZMQUdTMV9TSUdOQUw/Pz8JKDEgPDwgMykgRklYTUUgKi8KLSNkZWZpbmUgQkNNNDN4eF9SWEhEUl9GTEFHUzFfU0hPUlRQUkVBTUJMRQkoMSA8PCA3KQotI2RlZmluZSBCQ000M3h4X1JYSERSX0ZMQUdTMV8yMDUzUlNTSUFESgkoMSA8PCAxNCkKLQotI2RlZmluZSBCQ000M3h4X1JYSERSX0ZMQUdTMl9JTlZBTElERlJBTUUJKDEgPDwgMCkKLSNkZWZpbmUgQkNNNDN4eF9SWEhEUl9GTEFHUzJfVFlQRTJGUkFNRQkJKDEgPDwgMikKLS8qRklYTUU6IFdFUCByZWxhdGVkIGZsYWdzICovCi0KLSNkZWZpbmUgQkNNNDN4eF9SWEhEUl9GTEFHUzNfMjA1MFJTU0lBREoJKDEgPDwgMTApCi0KLS8qIFRyYW5zbWl0IFN0YXR1cyBhcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS4gKi8KLXN0cnVjdCBiY200M3h4X2h3eG1pdHN0YXR1cyB7Ci0JUEFEX0JZVEVTKDQpOwotCV9fbGUxNiBjb29raWU7Ci0JdTggZmxhZ3M7Ci0JdTggY250MTo0LAotCSAgIGNudDI6NDsKLQlQQURfQllURVMoMik7Ci0JX19sZTE2IHNlcTsKLQlfX2xlMTYgdW5rbm93bjsgLy9GSVhNRQotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLS8qIFRyYW5zbWl0IFN0YXR1cyBpbiBDUFUgYnl0ZW9yZGVyLiAqLwotc3RydWN0IGJjbTQzeHhfeG1pdHN0YXR1cyB7Ci0JdTE2IGNvb2tpZTsKLQl1OCBmbGFnczsKLQl1OCBjbnQxOjQsCi0JICAgY250Mjo0OwotCXUxNiBzZXE7Ci0JdTE2IHVua25vd247IC8vRklYTUUKLX07Ci0KLSNkZWZpbmUgQkNNNDN4eF9UWFNUQVRfRkxBR19BTVBEVQkweDEwCi0jZGVmaW5lIEJDTTQzeHhfVFhTVEFUX0ZMQUdfSU5URVIJMHgyMAotCi11OCBiY200M3h4X3BsY3BfZ2V0X3JhdGVjb2RlX2Njayhjb25zdCB1OCBiaXRyYXRlKTsKLXU4IGJjbTQzeHhfcGxjcF9nZXRfcmF0ZWNvZGVfb2ZkbShjb25zdCB1OCBiaXRyYXRlKTsKLQotaW50IGJjbTQzeHhfcngoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCSAgICAgICBzdHJ1Y3QgYmNtNDN4eF9yeGhkciAqcnhoZHIpOwotCi0jZW5kaWYgLyogQkNNNDN4eF9YTUlUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKaW5kZXggNDk5NzhiZC4uNGZkNzM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYwpAQCAtNjM1LDcgKzYzNSw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21wZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC02NDcsOCArNjQ2LDEwIEBACiAJICAgIHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiVEtJUCIpID09IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICVzXG4iLAotCQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UICJcbiIsCisJCQkgICAgICAgbG9jYWwtPmRldi0+bmFtZSwKKwkJCSAgICAgICBoZHItPmFkZHIyWzBdLCBoZHItPmFkZHIyWzFdLCBoZHItPmFkZHIyWzJdLAorCQkJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0pOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CkBAIC02NTcsOSArNjU4LDEyIEBACiAJcmVzID0gY3J5cHQtPm9wcy0+ZGVjcnlwdF9tcGR1KHNrYiwgaGRybGVuLCBjcnlwdC0+cHJpdik7CiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWNyeXB0aW9uIGZhaWxlZCAoU0E9JXMiCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVjcnlwdGlvbiBmYWlsZWQgKFNBPSIgTUFDX0ZNVAogCQkgICAgICAgIikgcmVzPSVkXG4iLAotCQkgICAgICAgbG9jYWwtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksIHJlcyk7CisJCSAgICAgICBsb2NhbC0+ZGV2LT5uYW1lLAorCQkgICAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwgaGRyLT5hZGRyMlsyXSwKKwkJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0sCisJCSAgICAgICByZXMpOwogCQlsb2NhbC0+Y29tbV90YWxsaWVzLnJ4X2Rpc2NhcmRzX3dlcF91bmRlY3J5cHRhYmxlKys7CiAJCXJldHVybiAtMTsKIAl9CkBAIC03MjEsNyArNzI1LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gTlVMTDsKIAl2b2lkICpzdGEgPSBOVUxMOwogCWludCBrZXlpZHggPSAwOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtNzk4LDggKzgwMSwxMCBAQAogCQkJICogZnJhbWVzIHNpbGVudGx5IGluc3RlYWQgb2YgZmlsbGluZyBzeXN0ZW0gbG9nIHdpdGgKIAkJCSAqIHRoZXNlIHJlcG9ydHMuICovCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdFUCBkZWNyeXB0aW9uIGZhaWxlZCAobm90IHNldCkiCi0JCQkgICAgICAgIiAoU0E9JXMpXG4iLAotCQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiIChTQT0iIE1BQ19GTVQgIilcbiIsCisJCQkgICAgICAgbG9jYWwtPmRldi0+bmFtZSwKKwkJCSAgICAgICBoZHItPmFkZHIyWzBdLCBoZHItPmFkZHIyWzFdLCBoZHItPmFkZHIyWzJdLAorCQkJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0pOwogI2VuZGlmCiAJCQlsb2NhbC0+Y29tbV90YWxsaWVzLnJ4X2Rpc2NhcmRzX3dlcF91bmRlY3J5cHRhYmxlKys7CiAJCQlnb3RvIHJ4X2Ryb3BwZWQ7CkBAIC04MTMsOCArODE4LDkgQEAKIAkJICAgIChrZXlpZHggPSBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdChsb2NhbCwgc2tiLCBjcnlwdCkpIDwgMCkKIAkJewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gZGVjcnlwdCBtZ210OjphdXRoICIKLQkJCSAgICAgICAiZnJvbSAlc1xuIiwgZGV2LT5uYW1lLAotCQkJICAgICAgIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiZnJvbSAiIE1BQ19GTVQgIlxuIiwgZGV2LT5uYW1lLAorCQkJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJCQkgICAgICAgaGRyLT5hZGRyMlszXSwgaGRyLT5hZGRyMls0XSwgaGRyLT5hZGRyMls1XSk7CiAJCQkvKiBUT0RPOiBjb3VsZCBpbmZvcm0gaG9zdGFwZCBhYm91dCB0aGlzIHNvIHRoYXQgaXQKIAkJCSAqIGNvdWxkIHNlbmQgYXV0aCBmYWlsdXJlIHJlcG9ydCAqLwogCQkJZ290byByeF9kcm9wcGVkOwpAQCAtOTgyLDggKzk4OCwxMCBAQAogCQkJICAgICAgICJ1bmVuY3J5cHRlZCBFQVBPTCBmcmFtZVxuIiwgbG9jYWwtPmRldi0+bmFtZSk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVuY3J5cHRpb24gY29uZmlndXJlZCwgYnV0IFJYICIKLQkJCSAgICAgICAiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXMpXG4iLAotCQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9IiBNQUNfRk1UICIpXG4iLAorCQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsCisJCQkgICAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwgaGRyLT5hZGRyMlsyXSwKKwkJCSAgICAgICBoZHItPmFkZHIyWzNdLCBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCX0KQEAgLTk5Miw5ICsxMDAwLDEwIEBACiAJICAgICFob3N0YXBfaXNfZWFwb2xfZnJhbWUobG9jYWwsIHNrYikpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIHVuZW5jcnlwdGVkIFJYIGRhdGEgIgotCQkJICAgICAgICJmcmFtZSBmcm9tICVzIgotCQkJICAgICAgICIgKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSk7CisJCQkgICAgICAgImZyYW1lIGZyb20gIiBNQUNfRk1UICIgKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLAorCQkJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJCQkgICAgICAgaGRyLT5hZGRyMlszXSwgaGRyLT5hZGRyMls0XSwgaGRyLT5hZGRyMls1XSk7CiAJCX0KIAkJZ290byByeF9kcm9wcGVkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYwppbmRleCBlN2FmYzNlLi45MjFjOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCkBAIC0zMTQsNyArMzE0LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCXUxNiBmYzsKIAlpbnQgcHJlZml4X2xlbiwgcG9zdGZpeF9sZW4sIGhkcl9sZW4sIHJlczsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtMzI5LDggKzMyOCwxMCBAQAogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRLSVAgY291bnRlcm1lYXN1cmVzOiBkcm9wcGVkICIKLQkJCSAgICAgICAiVFggcGFja2V0IHRvICVzXG4iLAotCQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjEpKTsKKwkJCSAgICAgICAiVFggcGFja2V0IHRvICIgTUFDX0ZNVCAiXG4iLAorCQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsCisJCQkgICAgICAgaGRyLT5hZGRyMVswXSwgaGRyLT5hZGRyMVsxXSwgaGRyLT5hZGRyMVsyXSwKKwkJCSAgICAgICBoZHItPmFkZHIxWzNdLCBoZHItPmFkZHIxWzRdLCBoZHItPmFkZHIxWzVdKTsKIAkJfQogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKaW5kZXggYWQwNDBhMy4uMGFjZDk1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwpAQCAtNjMyLDcgKzYzMiw2IEBACiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCWNoYXIgKnR4dCA9IE5VTEw7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlpZiAoYXAtPmxvY2FsLT5ob3N0YXBkKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTY4NCwxMCArNjgzLDEyIEBACiAJaWYgKHN0YSkKIAkJYXRvbWljX2RlYygmc3RhLT51c2Vycyk7CiAJaWYgKHR4dCkgewotCQlQREVCVUcoREVCVUdfQVAsICIlczogJXMgYXV0aF9jYiAtIGFsZz0lZCAiCisJCVBERUJVRyhERUJVR19BUCwgIiVzOiAiIE1BQ19GTVQgIiBhdXRoX2NiIC0gYWxnPSVkICIKIAkJICAgICAgICJ0cmFucyM9JWQgc3RhdHVzPSVkIC0gJXNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjEpLCBhdXRoX2FsZywKLQkJICAgICAgIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1cywgdHh0KTsKKwkJICAgICAgIGRldi0+bmFtZSwKKwkJICAgICAgIGhkci0+YWRkcjFbMF0sIGhkci0+YWRkcjFbMV0sIGhkci0+YWRkcjFbMl0sCisJCSAgICAgICBoZHItPmFkZHIxWzNdLCBoZHItPmFkZHIxWzRdLCBoZHItPmFkZHIxWzVdLAorCQkgICAgICAgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1cywgdHh0KTsKIAl9CiAJZGV2X2tmcmVlX3NrYihza2IpOwogfQpAQCAtNzAzLDcgKzcwNCw2IEBACiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCWNoYXIgKnR4dCA9IE5VTEw7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlpZiAoYXAtPmxvY2FsLT5ob3N0YXBkKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTc1NCw4ICs3NTQsMTEgQEAKIAlpZiAoc3RhKQogCQlhdG9taWNfZGVjKCZzdGEtPnVzZXJzKTsKIAlpZiAodHh0KSB7Ci0JCVBERUJVRyhERUJVR19BUCwgIiVzOiAlcyBhc3NvY19jYiAtICVzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSwgdHh0KTsKKwkJUERFQlVHKERFQlVHX0FQLCAiJXM6ICIgTUFDX0ZNVCAiIGFzc29jX2NiIC0gJXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsCisJCSAgICAgICBoZHItPmFkZHIxWzBdLCBoZHItPmFkZHIxWzFdLCBoZHItPmFkZHIxWzJdLAorCQkgICAgICAgaGRyLT5hZGRyMVszXSwgaGRyLT5hZGRyMVs0XSwgaGRyLT5hZGRyMVs1XSwKKwkJICAgICAgIHR4dCk7CiAJfQogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KQEAgLTc2Nyw3ICs3NzAsNiBAQAogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmIChza2ItPmxlbiA8IDI0KQogCQlnb3RvIGZhaWw7CkBAIC03NzksOSArNzgxLDExIEBACiAJCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9QRU5ESU5HX1BPTEw7CiAJCXNwaW5fdW5sb2NrKCZhcC0+c3RhX3RhYmxlX2xvY2spOwogCX0gZWxzZSB7Ci0JCVBERUJVRyhERUJVR19BUCwgIiVzOiBTVEEgJXMiCisJCVBERUJVRyhERUJVR19BUCwgIiVzOiBTVEEgIiBNQUNfRk1UCiAJCSAgICAgICAiIGRpZCBub3QgQUNLIGFjdGl2aXR5IHBvbGwgZnJhbWVcbiIsCi0JCSAgICAgICBhcC0+bG9jYWwtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSkpOworCQkgICAgICAgYXAtPmxvY2FsLT5kZXYtPm5hbWUsCisJCSAgICAgICBoZHItPmFkZHIxWzBdLCBoZHItPmFkZHIxWzFdLCBoZHItPmFkZHIxWzJdLAorCQkgICAgICAgaGRyLT5hZGRyMVszXSwgaGRyLT5hZGRyMVs0XSwgaGRyLT5hZGRyMVs1XSk7CiAJfQogCiAgZmFpbDoKQEAgLTEzMDYsNyArMTMxMCw2IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7CiAJY2hhciAqdHh0ID0gIiI7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlsZW4gPSBza2ItPmxlbiAtIElFRUU4MDIxMV9NR01UX0hEUl9MRU47CiAKQEAgLTEzMTUsOCArMTMxOCw5IEBACiAKIAlpZiAobGVuIDwgNikgewogCQlQREVCVUcoREVCVUdfQVAsICIlczogaGFuZGxlX2F1dGhlbiAtIHRvbyBzaG9ydCBwYXlsb2FkICIKLQkJICAgICAgICIobGVuPSVkKSBmcm9tICVzXG4iLCBkZXYtPm5hbWUsIGxlbiwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpKTsKKwkJICAgICAgICIobGVuPSVkKSBmcm9tICIgTUFDX0ZNVCAiXG4iLCBkZXYtPm5hbWUsIGxlbiwKKwkJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJCSAgICAgICBoZHItPmFkZHIyWzNdLCBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTM4MSw4ICsxMzg1LDEwIEBACiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YS0+dS5hcC5sYXN0X2JlYWNvbiArCiAJCQkgICAgICAgKDEwICogc3RhLT5saXN0ZW5faW50ZXJ2YWwgKiBIWikgLyAxMDI0KSkgewogCQkJUERFQlVHKERFQlVHX0FQLCAiJXM6IG5vIGJlYWNvbnMgcmVjZWl2ZWQgZm9yIGEgd2hpbGUsIgotCQkJICAgICAgICIgYXNzdW1pbmcgQVAgJXMgaXMgbm93IFNUQVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOworCQkJICAgICAgICIgYXNzdW1pbmcgQVAgIiBNQUNfRk1UICIgaXMgbm93IFNUQVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsCisJCQkgICAgICAgc3RhLT5hZGRyWzBdLCBzdGEtPmFkZHJbMV0sIHN0YS0+YWRkclsyXSwKKwkJCSAgICAgICBzdGEtPmFkZHJbM10sIHN0YS0+YWRkcls0XSwgc3RhLT5hZGRyWzVdKTsKIAkJCXN0YS0+YXAgPSAwOwogCQkJc3RhLT5mbGFncyA9IDA7CiAJCQlzdGEtPnUuc3RhLmNoYWxsZW5nZSA9IE5VTEw7CkBAIC0xNDk3LDEwICsxNTAzLDEzIEBACiAJfQogCiAJaWYgKHJlc3ApIHsKLQkJUERFQlVHKERFQlVHX0FQLCAiJXM6ICVzIGF1dGggKGFsZz0lZCAiCisJCVBERUJVRyhERUJVR19BUCwgIiVzOiAiIE1BQ19GTVQgIiBhdXRoIChhbGc9JWQgIgogCQkgICAgICAgInRyYW5zIz0lZCBzdGF0PSVkIGxlbj0lZCBmYz0lMDR4KSA9PT4gJWQgKCVzKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksIGF1dGhfYWxnLAotCQkgICAgICAgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGUsIGxlbiwgZmMsIHJlc3AsIHR4dCk7CisJCSAgICAgICBkZXYtPm5hbWUsCisJCSAgICAgICBoZHItPmFkZHIyWzBdLCBoZHItPmFkZHIyWzFdLCBoZHItPmFkZHIyWzJdLAorCQkgICAgICAgaGRyLT5hZGRyMlszXSwgaGRyLT5hZGRyMls0XSwgaGRyLT5hZGRyMls1XSwKKwkJICAgICAgIGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZSwgbGVuLAorCQkgICAgICAgZmMsIHJlc3AsIHR4dCk7CiAJfQogfQogCkBAIC0xNTE5LDE0ICsxNTI4LDE1IEBACiAJaW50IHNlbmRfZGVhdXRoID0gMDsKIAljaGFyICp0eHQgPSAiIjsKIAl1OCBwcmV2X2FwW0VUSF9BTEVOXTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWxlZnQgPSBsZW4gPSBza2ItPmxlbiAtIElFRUU4MDIxMV9NR01UX0hEUl9MRU47CiAKIAlpZiAobGVuIDwgKHJlYXNzb2MgPyAxMCA6IDQpKSB7CiAJCVBERUJVRyhERUJVR19BUCwgIiVzOiBoYW5kbGVfYXNzb2MgLSB0b28gc2hvcnQgcGF5bG9hZCAiCi0JCSAgICAgICAiKGxlbj0lZCwgcmVhc3NvYz0lZCkgZnJvbSAlc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCByZWFzc29jLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSk7CisJCSAgICAgICAiKGxlbj0lZCwgcmVhc3NvYz0lZCkgZnJvbSAiIE1BQ19GTVQgIlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbGVuLCByZWFzc29jLAorCQkgICAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwgaGRyLT5hZGRyMlsyXSwKKwkJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjAzLDkgKzE2MTMsMTIgQEAKIAkJfQogCiAJCWlmIChsZWZ0ID4gMCkgewotCQkJUERFQlVHKERFQlVHX0FQLCAiJXM6IGFzc29jIGZyb20gJXMiCisJCQlQREVCVUcoREVCVUdfQVAsICIlczogYXNzb2MgZnJvbSAiIE1BQ19GTVQKIAkJCSAgICAgICAiIHdpdGggZXh0cmEgZGF0YSAoJWQgYnl0ZXMpIFsiLAotCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksIGxlZnQpOworCQkJICAgICAgIGRldi0+bmFtZSwKKwkJCSAgICAgICBoZHItPmFkZHIyWzBdLCBoZHItPmFkZHIyWzFdLCBoZHItPmFkZHIyWzJdLAorCQkJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0sCisJCQkgICAgICAgbGVmdCk7CiAJCQl3aGlsZSAobGVmdCA+IDApIHsKIAkJCQlQREVCVUcyKERFQlVHX0FQLCAiPCUwMng+IiwgKnUpOwogCQkJCXUrKzsgbGVmdC0tOwpAQCAtMTcwNCwxMCArMTcxNywxNSBAQAogCX0KIAogI2lmIDAKLQlQREVCVUcoREVCVUdfQVAsICIlczogJXMgJXNhc3NvYyAobGVuPSVkICIKLQkgICAgICAgInByZXZfYXA9JXMpID0+ICVkKCVkKSAoJXMpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpLCByZWFzc29jID8gInJlIiA6ICIiLCBsZW4sCi0JICAgICAgIHByaW50X21hYyhtYWMsIHByZXZfYXApLCByZXNwLCBzZW5kX2RlYXV0aCwgdHh0KTsKKwlQREVCVUcoREVCVUdfQVAsICIlczogIiBNQUNfRk1UIiAlc2Fzc29jIChsZW49JWQgIgorCSAgICAgICAicHJldl9hcD0iIE1BQ19GTVQiKSA9PiAlZCglZCkgKCVzKVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLAorCSAgICAgICBoZHItPmFkZHIyWzBdLCBoZHItPmFkZHIyWzFdLCBoZHItPmFkZHIyWzJdLAorCSAgICAgICBoZHItPmFkZHIyWzNdLCBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdLAorCSAgICAgICByZWFzc29jID8gInJlIiA6ICIiLCBsZW4sCisJICAgICAgIHByZXZfYXBbMF0sIHByZXZfYXBbMV0sIHByZXZfYXBbMl0sCisJICAgICAgIHByZXZfYXBbM10sIHByZXZfYXBbNF0sIHByZXZfYXBbNV0sCisJICAgICAgIHJlc3AsIHNlbmRfZGVhdXRoLCB0eHQpOwogI2VuZGlmCiB9CiAKQEAgLTE3MzUsOSArMTc1MywxMSBAQAogCXBvcyA9IChfX2xlMTYgKikgYm9keTsKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KCpwb3MpOwogCi0JUERFQlVHKERFQlVHX0FQLCAiJXM6IGRlYXV0aGVudGljYXRpb246ICVzIGxlbj0lZCwgIgotCSAgICAgICAicmVhc29uX2NvZGU9JWRcbiIsIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksIGxlbiwKLQkgICAgICAgcmVhc29uX2NvZGUpOworCVBERUJVRyhERUJVR19BUCwgIiVzOiBkZWF1dGhlbnRpY2F0aW9uOiAiIE1BQ19GTVQgIiBsZW49JWQsICIKKwkgICAgICAgInJlYXNvbl9jb2RlPSVkXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0sCisJICAgICAgIGxlbiwgcmVhc29uX2NvZGUpOwogCiAJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YXAtPnN0YV90YWJsZV9sb2NrKTsKIAlzdGEgPSBhcF9nZXRfc3RhKGxvY2FsLT5hcCwgaGRyLT5hZGRyMik7CkBAIC0xNzQ4LDkgKzE3NjgsMTEgQEAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwogCWlmIChzdGEgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBkZWF1dGhlbnRpY2F0aW9uIGZyb20gJXMsICIKKwkJcHJpbnRrKCIlczogZGVhdXRoZW50aWNhdGlvbiBmcm9tICIgTUFDX0ZNVCAiLCAiCiAJICAgICAgICJyZWFzb25fY29kZT0lZCwgYnV0IFNUQSBub3QgYXV0aGVudGljYXRlZFxuIiwgZGV2LT5uYW1lLAotCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksIHJlYXNvbl9jb2RlKTsKKwkJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJCSAgICAgICBoZHItPmFkZHIyWzNdLCBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdLAorCQkgICAgICAgcmVhc29uX2NvZGUpOwogCX0KIH0KIApAQCAtMTc2Niw3ICsxNzg4LDYgQEAKIAl1MTYgcmVhc29uX2NvZGU7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJbGVuID0gc2tiLT5sZW4gLSBJRUVFODAyMTFfTUdNVF9IRFJfTEVOOwogCkBAIC0xNzc4LDkgKzE3OTksMTEgQEAKIAlwb3MgPSAoX19sZTE2ICopIGJvZHk7CiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdSgqcG9zKTsKIAotCVBERUJVRyhERUJVR19BUCwgIiVzOiBkaXNhc3NvY2lhdGlvbjogJXMgbGVuPSVkLCAiCi0JICAgICAgICJyZWFzb25fY29kZT0lZFxuIiwgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSwgbGVuLAotCSAgICAgICByZWFzb25fY29kZSk7CisJUERFQlVHKERFQlVHX0FQLCAiJXM6IGRpc2Fzc29jaWF0aW9uOiAiIE1BQ19GTVQgIiBsZW49JWQsICIKKwkgICAgICAgInJlYXNvbl9jb2RlPSVkXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0sCisJICAgICAgIGxlbiwgcmVhc29uX2NvZGUpOwogCiAJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YXAtPnN0YV90YWJsZV9sb2NrKTsKIAlzdGEgPSBhcF9nZXRfc3RhKGxvY2FsLT5hcCwgaGRyLT5hZGRyMik7CkBAIC0xNzkxLDkgKzE4MTQsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwogCWlmIChzdGEgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBkaXNhc3NvY2lhdGlvbiBmcm9tICVzLCAiCisJCXByaW50aygiJXM6IGRpc2Fzc29jaWF0aW9uIGZyb20gIiBNQUNfRk1UICIsICIKIAkJICAgICAgICJyZWFzb25fY29kZT0lZCwgYnV0IFNUQSBub3QgYXV0aGVudGljYXRlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksIHJlYXNvbl9jb2RlKTsKKwkJICAgICAgIGRldi0+bmFtZSwKKwkJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJCSAgICAgICBoZHItPmFkZHIyWzNdLCBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdLAorCQkgICAgICAgcmVhc29uX2NvZGUpOwogCX0KIH0KIApAQCAtMTg4MiwxNiArMTkwOCwyMCBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUxNiBhaWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotCVBERUJVRyhERUJVR19QUzIsICJoYW5kbGVfcHNwb2xsOiBCU1NJRD0lcyIKLQkgICAgICAgIiwgVEE9JXMgUFdSTUdUPSVkXG4iLAotCSAgICAgICBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksCisJUERFQlVHKERFQlVHX1BTMiwgImhhbmRsZV9wc3BvbGw6IEJTU0lEPSIgTUFDX0ZNVAorCSAgICAgICAiLCBUQT0iIE1BQ19GTVQgIiBQV1JNR1Q9JWRcbiIsCisJICAgICAgIGhkci0+YWRkcjFbMF0sIGhkci0+YWRkcjFbMV0sIGhkci0+YWRkcjFbMl0sCisJICAgICAgIGhkci0+YWRkcjFbM10sIGhkci0+YWRkcjFbNF0sIGhkci0+YWRkcjFbNV0sCisJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sIGhkci0+YWRkcjJbMl0sCisJICAgICAgIGhkci0+YWRkcjJbM10sIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0sCiAJICAgICAgICEhKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX1BNKSk7CiAKIAlpZiAobWVtY21wKGhkci0+YWRkcjEsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkgewotCQlQREVCVUcoREVCVUdfQVAsICJoYW5kbGVfcHNwb2xsIC0gYWRkcjEoQlNTSUQpPSVzIgotCQkgICAgICAgIiBub3Qgb3duIE1BQ1xuIiwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSkpOworCQlQREVCVUcoREVCVUdfQVAsICJoYW5kbGVfcHNwb2xsIC0gYWRkcjEoQlNTSUQpPSIgTUFDX0ZNVAorCQkgICAgICAgIiBub3Qgb3duIE1BQ1xuIiwKKwkJICAgICAgIGhkci0+YWRkcjFbMF0sIGhkci0+YWRkcjFbMV0sIGhkci0+YWRkcjFbMl0sCisJCSAgICAgICBoZHItPmFkZHIxWzNdLCBoZHItPmFkZHIxWzRdLCBoZHItPmFkZHIxWzVdKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTk2OSw3ICsxOTk5LDYgQEAKIAkJCQkJICB3ZHNfb3Blcl9xdWV1ZSk7CiAJbG9jYWxfaW5mb190ICpsb2NhbCA9IGFwLT5sb2NhbDsKIAlzdHJ1Y3Qgd2RzX29wZXJfZGF0YSAqZW50cnksICpwcmV2OwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+bG9jayk7CiAJZW50cnkgPSBsb2NhbC0+YXAtPndkc19vcGVyX2VudHJpZXM7CkBAIC0xOTc4LDEwICsyMDA3LDExIEBACiAKIAl3aGlsZSAoZW50cnkpIHsKIAkJUERFQlVHKERFQlVHX0FQLCAiJXM6ICVzIGF1dG9tYXRpYyBXRFMgY29ubmVjdGlvbiAiCi0JCSAgICAgICAidG8gQVAgJXNcbiIsCisJCSAgICAgICAidG8gQVAgIiBNQUNfRk1UICJcbiIsCiAJCSAgICAgICBsb2NhbC0+ZGV2LT5uYW1lLAogCQkgICAgICAgZW50cnktPnR5cGUgPT0gV0RTX0FERCA/ICJhZGRpbmciIDogInJlbW92aW5nIiwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIGVudHJ5LT5hZGRyKSk7CisJCSAgICAgICBlbnRyeS0+YWRkclswXSwgZW50cnktPmFkZHJbMV0sIGVudHJ5LT5hZGRyWzJdLAorCQkgICAgICAgZW50cnktPmFkZHJbM10sIGVudHJ5LT5hZGRyWzRdLCBlbnRyeS0+YWRkcls1XSk7CiAJCWlmIChlbnRyeS0+dHlwZSA9PSBXRFNfQUREKQogCQkJcHJpc20yX3dkc19hZGQobG9jYWwsIGVudHJ5LT5hZGRyLCAwKTsKIAkJZWxzZSBpZiAoZW50cnktPnR5cGUgPT0gV0RTX0RFTCkKQEAgLTIxNTgsNyArMjE4OCw2IEBACiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwogCXUxNiBmYywgdHlwZSwgc3R5cGU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCS8qIEZJWDogc2hvdWxkIGdpdmUgc2tiLT5sZW4gdG8gaGFuZGxlciBmdW5jdGlvbnMgYW5kIGNoZWNrIHRoYXQgdGhlCiAJICogYnVmZmVyIGlzIGxvbmcgZW5vdWdoICovCkBAIC0yMTg3LDggKzIyMTYsOSBAQAogCiAJCWlmIChtZW1jbXAoaGRyLT5hZGRyMSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKSB7CiAJCQlQREVCVUcoREVCVUdfQVAsICJoYW5kbGVfYXBfaXRlbSAtIGFkZHIxKEJTU0lEKT0iCi0JCQkgICAgICAgIiVzIG5vdCBvd24gTUFDXG4iLAotCQkJICAgICAgIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjEpKTsKKwkJCSAgICAgICBNQUNfRk1UICIgbm90IG93biBNQUNcbiIsCisJCQkgICAgICAgaGRyLT5hZGRyMVswXSwgaGRyLT5hZGRyMVsxXSwgaGRyLT5hZGRyMVsyXSwKKwkJCSAgICAgICBoZHItPmFkZHIxWzNdLCBoZHItPmFkZHIxWzRdLCBoZHItPmFkZHIxWzVdKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0yMjI0LDE0ICsyMjU0LDE4IEBACiAJfQogCiAJaWYgKG1lbWNtcChoZHItPmFkZHIxLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpIHsKLQkJUERFQlVHKERFQlVHX0FQLCAiaGFuZGxlX2FwX2l0ZW0gLSBhZGRyMShEQSk9JXMiCi0JCSAgICAgICAiIG5vdCBvd24gTUFDXG4iLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSk7CisJCVBERUJVRyhERUJVR19BUCwgImhhbmRsZV9hcF9pdGVtIC0gYWRkcjEoREEpPSIgTUFDX0ZNVAorCQkgICAgICAgIiBub3Qgb3duIE1BQ1xuIiwKKwkJICAgICAgIGhkci0+YWRkcjFbMF0sIGhkci0+YWRkcjFbMV0sIGhkci0+YWRkcjFbMl0sCisJCSAgICAgICBoZHItPmFkZHIxWzNdLCBoZHItPmFkZHIxWzRdLCBoZHItPmFkZHIxWzVdKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmIChtZW1jbXAoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKSB7Ci0JCVBERUJVRyhERUJVR19BUCwgImhhbmRsZV9hcF9pdGVtIC0gYWRkcjMoQlNTSUQpPSVzIgotCQkgICAgICAgIiBub3Qgb3duIE1BQ1xuIiwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMykpOworCQlQREVCVUcoREVCVUdfQVAsICJoYW5kbGVfYXBfaXRlbSAtIGFkZHIzKEJTU0lEKT0iIE1BQ19GTVQKKwkJICAgICAgICIgbm90IG93biBNQUNcbiIsCisJCSAgICAgICBoZHItPmFkZHIzWzBdLCBoZHItPmFkZHIzWzFdLCBoZHItPmFkZHIzWzJdLAorCQkgICAgICAgaGRyLT5hZGRyM1szXSwgaGRyLT5hZGRyM1s0XSwgaGRyLT5hZGRyM1s1XSk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTIzMTIsNyArMjM0Niw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXRzOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc3RhLT50eF9idWYpKQogCQlyZXR1cm47CkBAIC0yMzM0LDcgKzIzNjcsOSBAQAogCWhkci0+ZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNihzdGEtPmFpZCB8IEJJVCgxNSkgfCBCSVQoMTQpKTsKIAogCVBERUJVRyhERUJVR19QUzIsICIlczogU2NoZWR1bGluZyBidWZmZXJlZCBwYWNrZXQgZGVsaXZlcnkgZm9yIFNUQSAiCi0JICAgICAgICIlc1xuIiwgbG9jYWwtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CisJICAgICAgIE1BQ19GTVQgIlxuIiwgbG9jYWwtPmRldi0+bmFtZSwKKwkgICAgICAgc3RhLT5hZGRyWzBdLCBzdGEtPmFkZHJbMV0sIHN0YS0+YWRkclsyXSwKKwkgICAgICAgc3RhLT5hZGRyWzNdLCBzdGEtPmFkZHJbNF0sIHN0YS0+YWRkcls1XSk7CiAKIAlza2ItPmRldiA9IGxvY2FsLT5kZXY7CiAKQEAgLTI2NjEsNyArMjY5Niw2IEBACiAJaW50IHJldCA9IHN0YS0+dHhfcmF0ZTsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTI2ODksOSArMjcyMywxMiBAQAogCQkJY2FzZSAzOiBzdGEtPnR4X3JhdGUgPSAxMTA7IGJyZWFrOwogCQkJZGVmYXVsdDogc3RhLT50eF9yYXRlID0gMDsgYnJlYWs7CiAJCQl9Ci0JCQlQREVCVUcoREVCVUdfQVAsICIlczogU1RBICVzIgorCQkJUERFQlVHKERFQlVHX0FQLCAiJXM6IFNUQSAiIE1BQ19GTVQKIAkJCSAgICAgICAiIFRYIHJhdGUgcmFpc2VkIHRvICVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSwgc3RhLT50eF9yYXRlKTsKKwkJCSAgICAgICBkZXYtPm5hbWUsCisJCQkgICAgICAgc3RhLT5hZGRyWzBdLCBzdGEtPmFkZHJbMV0sIHN0YS0+YWRkclsyXSwKKwkJCSAgICAgICBzdGEtPmFkZHJbM10sIHN0YS0+YWRkcls0XSwgc3RhLT5hZGRyWzVdLAorCQkJICAgICAgIHN0YS0+dHhfcmF0ZSk7CiAJCX0KIAkJc3RhLT50eF9zaW5jZV9sYXN0X2ZhaWx1cmUgPSAwOwogCX0KQEAgLTI3MDksNyArMjc0Niw2IEBACiAJaW50IHNldF90aW0sIHJldDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKIAlyZXQgPSBBUF9UWF9DT05USU5VRTsKQEAgLTI3NDUsOCArMjc4MSw5IEBACiAJCSAqIHByaW50IG91dCBhbnkgZXJyb3JzIGhlcmUuICovCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJBUDogZHJvcCBwYWNrZXQgdG8gbm9uLWFzc29jaWF0ZWQgIgotCQkJICAgICAgICJTVEEgJXNcbiIsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMSkpOworCQkJICAgICAgICJTVEEgIiBNQUNfRk1UICJcbiIsCisJCQkgICAgICAgaGRyLT5hZGRyMVswXSwgaGRyLT5hZGRyMVsxXSwgaGRyLT5hZGRyMVsyXSwKKwkJCSAgICAgICBoZHItPmFkZHIxWzNdLCBoZHItPmFkZHIxWzRdLCBoZHItPmFkZHIxWzVdKTsKIAkJfQogI2VuZGlmCiAJCWxvY2FsLT5hcC0+dHhfZHJvcF9ub25hc3NvYysrOwpAQCAtMjc4NCw5ICsyODIxLDExIEBACiAJfQogCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJnN0YS0+dHhfYnVmKSA+PSBTVEFfTUFYX1RYX0JVRkZFUikgewotCQlQREVCVUcoREVCVUdfUFMsICIlczogTm8gbW9yZSBzcGFjZSBpbiBTVEEgKCVzIgorCQlQREVCVUcoREVCVUdfUFMsICIlczogTm8gbW9yZSBzcGFjZSBpbiBTVEEgKCIgTUFDX0ZNVAogCQkgICAgICAgIikncyBQUyBtb2RlIGJ1ZmZlclxuIiwKLQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOworCQkgICAgICAgbG9jYWwtPmRldi0+bmFtZSwKKwkJICAgICAgIHN0YS0+YWRkclswXSwgc3RhLT5hZGRyWzFdLCBzdGEtPmFkZHJbMl0sCisJCSAgICAgICBzdGEtPmFkZHJbM10sIHN0YS0+YWRkcls0XSwgc3RhLT5hZGRyWzVdKTsKIAkJLyogTWFrZSBzdXJlIHRoYXQgVElNIGlzIHNldCBmb3IgdGhlIHN0YXRpb24gKGl0IG1pZ2h0IG5vdCBiZQogCQkgKiBhZnRlciBBUCB3bGFuIGh3IHJlc2V0KS4gKi8KIAkJLyogRklYOiBzaG91bGQgZml4IGh3IHJlc2V0IHRvIHJlc3RvcmUgYml0cyBiYXNlZCBvbiBTVEEKQEAgLTI4NTAsNyArMjg4OSw2IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKQEAgLTI4NTksOSArMjg5NywxMiBAQAogCXN0YSA9IGFwX2dldF9zdGEobG9jYWwtPmFwLCBoZHItPmFkZHIxKTsKIAlpZiAoIXN0YSkgewogCQlzcGluX3VubG9jaygmbG9jYWwtPmFwLT5zdGFfdGFibGVfbG9jayk7Ci0JCVBERUJVRyhERUJVR19BUCwgIiVzOiBDb3VsZCBub3QgZmluZCBTVEEgJXMiCisJCVBERUJVRyhERUJVR19BUCwgIiVzOiBDb3VsZCBub3QgZmluZCBTVEEgIiBNQUNfRk1UCiAJCSAgICAgICAiIGZvciB0aGlzIFRYIGVycm9yIChAJWx1KVxuIiwKLQkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjEpLCBqaWZmaWVzKTsKKwkJICAgICAgIGxvY2FsLT5kZXYtPm5hbWUsCisJCSAgICAgICBoZHItPmFkZHIxWzBdLCBoZHItPmFkZHIxWzFdLCBoZHItPmFkZHIxWzJdLAorCQkgICAgICAgaGRyLT5hZGRyMVszXSwgaGRyLT5hZGRyMVs0XSwgaGRyLT5hZGRyMVs1XSwKKwkJICAgICAgIGppZmZpZXMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yODg4LDkgKzI5MjksMTEgQEAKIAkJCWNhc2UgMzogc3RhLT50eF9yYXRlID0gMTEwOyBicmVhazsKIAkJCWRlZmF1bHQ6IHN0YS0+dHhfcmF0ZSA9IDA7IGJyZWFrOwogCQkJfQotCQkJUERFQlVHKERFQlVHX0FQLCAiJXM6IFNUQSAlcyIKKwkJCVBERUJVRyhERUJVR19BUCwgIiVzOiBTVEEgIiBNQUNfRk1UCiAJCQkgICAgICAgIiBUWCByYXRlIGxvd2VyZWQgdG8gJWRcbiIsCi0JCQkgICAgICAgbG9jYWwtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSwKKwkJCSAgICAgICBsb2NhbC0+ZGV2LT5uYW1lLAorCQkJICAgICAgIHN0YS0+YWRkclswXSwgc3RhLT5hZGRyWzFdLCBzdGEtPmFkZHJbMl0sCisJCQkgICAgICAgc3RhLT5hZGRyWzNdLCBzdGEtPmFkZHJbNF0sIHN0YS0+YWRkcls1XSwKIAkJCSAgICAgICBzdGEtPnR4X3JhdGUpOwogCQl9CiAJCXN0YS0+dHhfY29uc2VjdXRpdmVfZXhjID0gMDsKQEAgLTI5NTYsNyArMjk5OSw2IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IGZjLCB0eXBlLCBzdHlwZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWYgKGxvY2FsLT5hcCA9PSBOVUxMKQogCQlyZXR1cm4gQVBfUlhfQ09OVElOVUU7CkBAIC0yOTg4LDkgKzMwMzAsMTIgQEAKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIHJlY2VpdmVkIHBhY2tldCIKIAkJCQkgICAgICAgIiBmcm9tIG5vbi1hc3NvY2lhdGVkIFNUQSAiCi0JCQkJICAgICAgICIlcyIKKwkJCQkgICAgICAgTUFDX0ZNVAogCQkJCSAgICAgICAiICh0eXBlPTB4JTAyeCwgc3VidHlwZT0weCUwMngpXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpLAorCQkJCSAgICAgICBkZXYtPm5hbWUsCisJCQkJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sCisJCQkJICAgICAgIGhkci0+YWRkcjJbMl0sIGhkci0+YWRkcjJbM10sCisJCQkJICAgICAgIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0sCiAJCQkJICAgICAgIHR5cGUgPj4gMiwgc3R5cGUgPj4gNCk7CiAJCQkJaG9zdGFwX3J4KGRldiwgc2tiLCByeF9zdGF0cyk7CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwpAQCAtMzAyNSw4ICszMDcwLDExIEBACiAJCQkgKiBiZWluZyBhc3NvY2lhdGVkLiAqLwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWplY3RlZCByZWNlaXZlZCBudWxsZnVuYyAiCiAJCQkgICAgICAgImZyYW1lIHdpdGhvdXQgVG9EUyBmcm9tIG5vdCBhc3NvY2lhdGVkIFNUQSAiCi0JCQkgICAgICAgIiVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMikpOworCQkJICAgICAgIE1BQ19GTVQgIlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsCisJCQkgICAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwKKwkJCSAgICAgICBoZHItPmFkZHIyWzJdLCBoZHItPmFkZHIyWzNdLAorCQkJICAgICAgIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0pOwogCQkJaG9zdGFwX3J4KGRldiwgc2tiLCByeF9zdGF0cyk7CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwogCQl9CkBAIC0zMDQzLDkgKzMwOTEsMTIgQEAKIAkJICogSWYgQlNTSUQgaXMgb3duLCByZXBvcnQgdGhlIGRyb3BwaW5nIG9mIHRoaXMgZnJhbWUuICovCiAJCWlmIChtZW1jbXAoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCByZWNlaXZlZCBwYWNrZXQgZnJvbSAiCi0JCQkgICAgICAgIiVzIHdpdGggbm8gVG9EUyBmbGFnICIKKwkJCSAgICAgICBNQUNfRk1UICIgd2l0aCBubyBUb0RTIGZsYWcgIgogCQkJICAgICAgICIodHlwZT0weCUwMngsIHN1YnR5cGU9MHglMDJ4KVxuIiwgZGV2LT5uYW1lLAotCQkJICAgICAgIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpLCB0eXBlID4+IDIsIHN0eXBlID4+IDQpOworCQkJICAgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sCisJCQkgICAgICAgaGRyLT5hZGRyMlsyXSwgaGRyLT5hZGRyMlszXSwKKwkJCSAgICAgICBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdLAorCQkJICAgICAgIHR5cGUgPj4gMiwgc3R5cGUgPj4gNCk7CiAJCQlob3N0YXBfZHVtcF9yeF84MDIxMShkZXYtPm5hbWUsIHNrYiwgcnhfc3RhdHMpOwogCQl9CiAJCXJldCA9IEFQX1JYX0RST1A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggM2U2YWQ3Yi4uZmE4N2M1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtMzM2NSw3ICszMzY1LDYgQEAKIAkvKiBTZXQgdXMgc28gdGhhdCB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgdXNlZCBhbGwgYnVmZmVycywgYnV0IGhhdmUKIAkgKiBub3QgcmVzdG9ja2VkIHRoZSBSeCBxdWV1ZSB3aXRoIGZyZXNoIGJ1ZmZlcnMgKi8KIAlyeHEtPnJlYWQgPSByeHEtPndyaXRlID0gMDsKLQlyeHEtPnByb2Nlc3NlZCA9IFJYX1FVRVVFX1NJWkUgLSAxOwogCXJ4cS0+ZnJlZV9jb3VudCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0zNjA3LDcgKzM2MDYsMjIgQEAKICAqIERyaXZlciBhbGxvY2F0ZXMgYnVmZmVycyBvZiB0aGlzIHNpemUgZm9yIFJ4CiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgaXB3X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBjbHgyX3F1ZXVlICpxKQorLyoqCisgKiBpcHdfcnhfcXVldWVfc3BhY2UgLSBSZXR1cm4gbnVtYmVyIG9mIGZyZWUgc2xvdHMgYXZhaWxhYmxlIGluIHF1ZXVlLgorICovCitzdGF0aWMgaW50IGlwd19yeF9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXB3X3J4X3F1ZXVlICpxKQoreworCWludCBzID0gcS0+cmVhZCAtIHEtPndyaXRlOworCWlmIChzIDw9IDApCisJCXMgKz0gUlhfUVVFVUVfU0laRTsKKwkvKiBrZWVwIHNvbWUgYnVmZmVyIHRvIG5vdCBjb25mdXNlIGZ1bGwgYW5kIGVtcHR5IHF1ZXVlICovCisJcyAtPSAyOworCWlmIChzIDwgMCkKKwkJcyA9IDA7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwd190eF9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgY2x4Ml9xdWV1ZSAqcSkKIHsKIAlpbnQgcyA9IHEtPmxhc3RfdXNlZCAtIHEtPmZpcnN0X2VtcHR5OwogCWlmIChzIDw9IDApCkBAIC00NDgxLDkgKzQ0OTUsOSBAQAogCQkJCQkJCQkgICAgICAgcHJpdi0+CiAJCQkJCQkJCSAgICAgICBlc3NpZF9sZW4pLAogCQkJCQkJCSAgcHJpbnRfbWFjKG1hYywgcHJpdi0+YnNzaWQpLAotCQkJCQkJCSAgbnRvaHMoYXV0aC0+c3RhdHVzKSwKKwkJCQkJCQkgIGxlMTZfdG9fY3B1KGF1dGgtPnN0YXR1cyksCiAJCQkJCQkJICBpcHdfZ2V0X3N0YXR1c19jb2RlCi0JCQkJCQkJICAobnRvaHMKKwkJCQkJCQkgIChsZTE2X3RvX2NwdQogCQkJCQkJCSAgIChhdXRoLT5zdGF0dXMpKSk7CiAKIAkJCQkJCXByaXYtPnN0YXR1cyAmPQpAQCAtNDUxOCw5ICs0NTMyLDkgQEAKIAkJCQkJCQkgIElQV19ETF9TVEFURSB8CiAJCQkJCQkJICBJUFdfRExfQVNTT0MsCiAJCQkJCQkJICAiYXNzb2NpYXRpb24gZmFpbGVkICgweCUwNFgpOiAlc1xuIiwKLQkJCQkJCQkgIG50b2hzKHJlc3AtPnN0YXR1cyksCisJCQkJCQkJICBsZTE2X3RvX2NwdShyZXNwLT5zdGF0dXMpLAogCQkJCQkJCSAgaXB3X2dldF9zdGF0dXNfY29kZQotCQkJCQkJCSAgKG50b2hzCisJCQkJCQkJICAobGUxNl90b19jcHUKIAkJCQkJCQkgICAocmVzcC0+c3RhdHVzKSkpOwogCQkJCQl9CiAKQEAgLTQ1NzcsOCArNDU5MSw4IEBACiAJCQkJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfCBJUFdfRExfU1RBVEUgfAogCQkJCQkJICBJUFdfRExfQVNTT0MsCiAJCQkJCQkgICJhdXRoZW50aWNhdGlvbiBmYWlsZWQgKDB4JTA0WCk6ICVzXG4iLAotCQkJCQkJICBudG9ocyhhdXRoLT5zdGF0dXMpLAotCQkJCQkJICBpcHdfZ2V0X3N0YXR1c19jb2RlKG50b2hzCisJCQkJCQkgIGxlMTZfdG9fY3B1KGF1dGgtPnN0YXR1cyksCisJCQkJCQkgIGlwd19nZXRfc3RhdHVzX2NvZGUobGUxNl90b19jcHUKIAkJCQkJCQkJICAgICAgKGF1dGgtPgogCQkJCQkJCQkgICAgICAgc3RhdHVzKSkpOwogCQkJCX0KQEAgLTQ5NDcsNyArNDk2MSw3IEBACiAJCXByaXYtPnR4X3BhY2tldHMrKzsKIAl9CiAgICAgICBkb25lOgotCWlmICgoaXB3X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmspICYmCisJaWYgKChpcHdfdHhfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyaykgJiYKIAkgICAgKHFpbmRleCA+PSAwKSAmJgogCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpCiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0X2Rldik7CkBAIC00OTY1LDcgKzQ5NzksNyBAQAogCXN0cnVjdCBjbHgyX3F1ZXVlICpxID0gJnR4cS0+cTsKIAlzdHJ1Y3QgdGZkX2ZyYW1lICp0ZmQ7CiAKLQlpZiAoaXB3X3F1ZXVlX3NwYWNlKHEpIDwgKHN5bmMgPyAxIDogMikpIHsKKwlpZiAoaXB3X3R4X3F1ZXVlX3NwYWNlKHEpIDwgKHN5bmMgPyAxIDogMikpIHsKIAkJSVBXX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTUwNzAsNyArNTA4NCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJd3JpdGUgPSByeHEtPndyaXRlOwotCXdoaWxlICgocnhxLT53cml0ZSAhPSByeHEtPnByb2Nlc3NlZCkgJiYgKHJ4cS0+ZnJlZV9jb3VudCkpIHsKKwl3aGlsZSAoKGlwd19yeF9xdWV1ZV9zcGFjZShyeHEpID4gMCkgJiYgKHJ4cS0+ZnJlZV9jb3VudCkpIHsKIAkJZWxlbWVudCA9IHJ4cS0+cnhfZnJlZS5uZXh0OwogCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfZGVsKGVsZW1lbnQpOwpAQCAtNTE4Nyw3ICs1MjAxLDYgQEAKIAkvKiBTZXQgdXMgc28gdGhhdCB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgdXNlZCBhbGwgYnVmZmVycywgYnV0IGhhdmUKIAkgKiBub3QgcmVzdG9ja2VkIHRoZSBSeCBxdWV1ZSB3aXRoIGZyZXNoIGJ1ZmZlcnMgKi8KIAlyeHEtPnJlYWQgPSByeHEtPndyaXRlID0gMDsKLQlyeHEtPnByb2Nlc3NlZCA9IFJYX1FVRVVFX1NJWkUgLSAxOwogCXJ4cS0+ZnJlZV9jb3VudCA9IDA7CiAKIAlyZXR1cm4gcnhxOwpAQCAtODIyMywxMyArODIzNiwxNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXI7CiAJdTMyIHIsIHcsIGk7CiAJdTggbmV0d29ya19wYWNrZXQ7CisJdTggZmlsbF9yeCA9IDA7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAJREVDTEFSRV9NQUNfQlVGKG1hYzIpOwogCURFQ0xBUkVfTUFDX0JVRihtYWMzKTsKIAogCXIgPSBpcHdfcmVhZDMyKHByaXYsIElQV19SWF9SRUFEX0lOREVYKTsKIAl3ID0gaXB3X3JlYWQzMihwcml2LCBJUFdfUlhfV1JJVEVfSU5ERVgpOwotCWkgPSAocHJpdi0+cnhxLT5wcm9jZXNzZWQgKyAxKSAlIFJYX1FVRVVFX1NJWkU7CisJaSA9IHByaXYtPnJ4cS0+cmVhZDsKKworCWlmIChpcHdfcnhfcXVldWVfc3BhY2UgKHByaXYtPnJ4cSkgPiAoUlhfUVVFVUVfU0laRSAvIDIpKQorCQlmaWxsX3J4ID0gMTsKIAogCXdoaWxlIChpICE9IHIpIHsKIAkJcnhiID0gcHJpdi0+cnhxLT5xdWV1ZVtpXTsKQEAgLTg0MDQsMTEgKzg0MjEsMTcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcHJpdi0+cnhxLT5yeF91c2VkKTsKIAogCQlpID0gKGkgKyAxKSAlIFJYX1FVRVVFX1NJWkU7CisKKwkJLyogSWYgdGhlcmUgYXJlIGEgbG90IG9mIHVuc3VlZCBmcmFtZXMsIHJlc3RvY2sgdGhlIFJ4IHF1ZXVlCisJCSAqIHNvIHRoZSB1Y29kZSB3b24ndCBhc3NlcnQgKi8KKwkJaWYgKGZpbGxfcngpIHsKKwkJCXByaXYtPnJ4cS0+cmVhZCA9IGk7CisJCQlpcHdfcnhfcXVldWVfcmVwbGVuaXNoKHByaXYpOworCQl9CiAJfQogCiAJLyogQmFja3RyYWNrIG9uZSBlbnRyeSAqLwotCXByaXYtPnJ4cS0+cHJvY2Vzc2VkID0gKGkgPyBpIDogUlhfUVVFVUVfU0laRSkgLSAxOwotCisJcHJpdi0+cnhxLT5yZWFkID0gaTsKIAlpcHdfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKIH0KIApAQCAtMTAxNjksNyArMTAxOTIsNiBAQAogCXU4IGlkLCBoZHJfbGVuLCB1bmljYXN0OwogCXUxNiByZW1haW5pbmdfYnl0ZXM7CiAJaW50IGZjOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CiAJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7CkBAIC0xMDE4MCw4ICsxMDIwMiwxMCBAQAogCQkJaWQgPSBpcHdfYWRkX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7CiAJCQlpZiAoaWQgPT0gSVBXX0lOVkFMSURfU1RBVElPTikgewogCQkJCUlQV19XQVJOSU5HKCJBdHRlbXB0IHRvIHNlbmQgZGF0YSB0byAiCi0JCQkJCSAgICAiaW52YWxpZCBjZWxsOiAlc1xuIiwKLQkJCQkJICAgIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjEpKTsKKwkJCQkJICAgICJpbnZhbGlkIGNlbGw6ICIgTUFDX0ZNVCAiXG4iLAorCQkJCQkgICAgaGRyLT5hZGRyMVswXSwgaGRyLT5hZGRyMVsxXSwKKwkJCQkJICAgIGhkci0+YWRkcjFbMl0sIGhkci0+YWRkcjFbM10sCisJCQkJCSAgICBoZHItPmFkZHIxWzRdLCBoZHItPmFkZHIxWzVdKTsKIAkJCQlnb3RvIGRyb3A7CiAJCQl9CiAJCX0KQEAgLTEwMzI2LDkgKzEwMzUwLDcgQEAKIAkJCQkJIHJlbWFpbmluZ19ieXRlcywKIAkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpKTsKIAotCQkJdGZkLT51LmRhdGEubnVtX2NodW5rcyA9Ci0JCQkgICAgY3B1X3RvX2xlMzIobGUzMl90b19jcHUodGZkLT51LmRhdGEubnVtX2NodW5rcykgKwotCQkJCQkxKTsKKwkJCWxlMzJfYWRkX2NwdSgmdGZkLT51LmRhdGEubnVtX2NodW5rcywgMSk7CiAJCX0KIAl9CiAKQEAgLTEwMzM2LDcgKzEwMzU4LDcgQEAKIAlxLT5maXJzdF9lbXB0eSA9IGlwd19xdWV1ZV9pbmNfd3JhcChxLT5maXJzdF9lbXB0eSwgcS0+bl9iZCk7CiAJaXB3X3dyaXRlMzIocHJpdiwgcS0+cmVnX3csIHEtPmZpcnN0X2VtcHR5KTsKIAotCWlmIChpcHdfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCisJaWYgKGlwd190eF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykKIAkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRfZGV2KTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0xMDM1Nyw3ICsxMDM3OSw3IEBACiAJc3RydWN0IGNseDJfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbMF07CiAjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKLQlpZiAoaXB3X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpIDwgdHhxLT5xLmhpZ2hfbWFyaykKKwlpZiAoaXB3X3R4X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpIDwgdHhxLT5xLmhpZ2hfbWFyaykKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKQEAgLTExNTUzLDYgKzExNTc1LDcgQEAKIAlwcml2LT5wcm9tX3ByaXYtPnByaXYgPSBwcml2OwogCiAJc3RyY3B5KHByaXYtPnByb21fbmV0X2Rldi0+bmFtZSwgInJ0YXAlZCIpOworCW1lbWNweShwcml2LT5wcm9tX25ldF9kZXYtPmRldl9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCiAJcHJpdi0+cHJvbV9uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKIAlwcml2LT5wcm9tX25ldF9kZXYtPm9wZW4gPSBpcHdfcHJvbV9vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCmluZGV4IGZkYzE4N2UuLmNkMzI5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKQEAgLTM4NSw3MyArMzg1LDczIEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsJCS8qKjwgcGh5c2ljYWwgYWRkciBmb3IgQkQncyAqLwogCWludCBsb3dfbWFyazsJCSAgICAgICAvKio8IGxvdyB3YXRlcm1hcmssIHJlc3VtZSBxdWV1ZSBpZiBmcmVlIHNwYWNlIG1vcmUgdGhhbiB0aGlzICovCiAJaW50IGhpZ2hfbWFyazsJCSAgICAgICAvKio8IGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHF1ZXVlIGlmIGZyZWUgc3BhY2UgbGVzcyB0aGFuIHRoaXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IC8qIFhYWCAqLwogCiBzdHJ1Y3QgbWFjaGRyMzIgewogCV9fbGUxNiBmcmFtZV9jdGw7Ci0JdTE2IGR1cmF0aW9uOwkJLy8gd2F0Y2ggb3V0IGZvciBlbmRpYW5zIQorCV9fbGUxNiBkdXJhdGlvbjsJCS8vIHdhdGNoIG91dCBmb3IgZW5kaWFucyEKIAl1OCBhZGRyMVtNQUNBRFJSX0JZVEVfTEVOXTsKIAl1OCBhZGRyMltNQUNBRFJSX0JZVEVfTEVOXTsKIAl1OCBhZGRyM1tNQUNBRFJSX0JZVEVfTEVOXTsKLQl1MTYgc2VxX2N0cmw7CQkvLyBtb3JlIGVuZGlhbnMhCisJX19sZTE2IHNlcV9jdHJsOwkJLy8gbW9yZSBlbmRpYW5zIQogCXU4IGFkZHI0W01BQ0FEUlJfQllURV9MRU5dOwogCV9fbGUxNiBxb3NfY3RybDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbWFjaGRyMzAgewogCV9fbGUxNiBmcmFtZV9jdGw7Ci0JdTE2IGR1cmF0aW9uOwkJLy8gd2F0Y2ggb3V0IGZvciBlbmRpYW5zIQorCV9fbGUxNiBkdXJhdGlvbjsJCS8vIHdhdGNoIG91dCBmb3IgZW5kaWFucyEKIAl1OCBhZGRyMVtNQUNBRFJSX0JZVEVfTEVOXTsKIAl1OCBhZGRyMltNQUNBRFJSX0JZVEVfTEVOXTsKIAl1OCBhZGRyM1tNQUNBRFJSX0JZVEVfTEVOXTsKLQl1MTYgc2VxX2N0cmw7CQkvLyBtb3JlIGVuZGlhbnMhCisJX19sZTE2IHNlcV9jdHJsOwkJLy8gbW9yZSBlbmRpYW5zIQogCXU4IGFkZHI0W01BQ0FEUlJfQllURV9MRU5dOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBtYWNoZHIyNiB7CiAJX19sZTE2IGZyYW1lX2N0bDsKLQl1MTYgZHVyYXRpb247CQkvLyB3YXRjaCBvdXQgZm9yIGVuZGlhbnMhCisJX19sZTE2IGR1cmF0aW9uOwkJLy8gd2F0Y2ggb3V0IGZvciBlbmRpYW5zIQogCXU4IGFkZHIxW01BQ0FEUlJfQllURV9MRU5dOwogCXU4IGFkZHIyW01BQ0FEUlJfQllURV9MRU5dOwogCXU4IGFkZHIzW01BQ0FEUlJfQllURV9MRU5dOwotCXUxNiBzZXFfY3RybDsJCS8vIG1vcmUgZW5kaWFucyEKKwlfX2xlMTYgc2VxX2N0cmw7CQkvLyBtb3JlIGVuZGlhbnMhCiAJX19sZTE2IHFvc19jdHJsOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBtYWNoZHIyNCB7CiAJX19sZTE2IGZyYW1lX2N0bDsKLQl1MTYgZHVyYXRpb247CQkvLyB3YXRjaCBvdXQgZm9yIGVuZGlhbnMhCisJX19sZTE2IGR1cmF0aW9uOwkJLy8gd2F0Y2ggb3V0IGZvciBlbmRpYW5zIQogCXU4IGFkZHIxW01BQ0FEUlJfQllURV9MRU5dOwogCXU4IGFkZHIyW01BQ0FEUlJfQllURV9MRU5dOwogCXU4IGFkZHIzW01BQ0FEUlJfQllURV9MRU5dOwotCXUxNiBzZXFfY3RybDsJCS8vIG1vcmUgZW5kaWFucyEKKwlfX2xlMTYgc2VxX2N0cmw7CQkvLyBtb3JlIGVuZGlhbnMhCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLy8gVFggVEZEIHdpdGggMzIgYnl0ZSBNQUMgSGVhZGVyCiBzdHJ1Y3QgdHhfdGZkXzMyIHsKIAlzdHJ1Y3QgbWFjaGRyMzIgbWNoZHI7CS8vIDMyCi0JdTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CisJX19sZTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLy8gVFggVEZEIHdpdGggMzAgYnl0ZSBNQUMgSGVhZGVyCiBzdHJ1Y3QgdHhfdGZkXzMwIHsKIAlzdHJ1Y3QgbWFjaGRyMzAgbWNoZHI7CS8vIDMwCiAJdTggcmVzZXJ2ZWRbMl07CQkvLyAyCi0JdTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CisJX19sZTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLy8gdHggdGZkIHdpdGggMjYgYnl0ZSBtYWMgaGVhZGVyCiBzdHJ1Y3QgdHhfdGZkXzI2IHsKIAlzdHJ1Y3QgbWFjaGRyMjYgbWNoZHI7CS8vIDI2CiAJdTggcmVzZXJ2ZWQxWzJdOwkvLyAyCi0JdTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CisJX19sZTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CiAJdTggcmVzZXJ2ZWQyWzRdOwkvLyA0CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLy8gdHggdGZkIHdpdGggMjQgYnl0ZSBtYWMgaGVhZGVyCiBzdHJ1Y3QgdHhfdGZkXzI0IHsKIAlzdHJ1Y3QgbWFjaGRyMjQgbWNoZHI7CS8vIDI0Ci0JdTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CisJX19sZTMyIHVpdnBsYWNlaG9sZGVyWzJdOwkvLyA4CiAJdTggcmVzZXJ2ZWRbOF07CQkvLyA4CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtNDYwLDcgKzQ2MCw3IEBACiBzdHJ1Y3QgdGZkX2NvbW1hbmQgewogCXU4IGluZGV4OwogCXU4IGxlbmd0aDsKLQl1MTYgcmVzZXJ2ZWQ7CisJX19sZTE2IHJlc2VydmVkOwogCXU4IHBheWxvYWRbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtNTYyLDI3ICs1NjIsMjcgQEAKIHN0cnVjdCBpcHdfY21kX3N0YXRzIHsKIAl1OCBjbWRfaWQ7CiAJdTggc2VxX251bTsKLQl1MTYgZ29vZF9zZmQ7Ci0JdTE2IGJhZF9wbGNwOwotCXUxNiB3cm9uZ19ic3NpZDsKLQl1MTYgdmFsaWRfbXBkdTsKLQl1MTYgYmFkX21hY19oZWFkZXI7Ci0JdTE2IHJlc2VydmVkX2ZyYW1lX3R5cGVzOwotCXUxNiByeF9pbmE7Ci0JdTE2IGJhZF9jcmMzMjsKLQl1MTYgaW52YWxpZF9jdHM7Ci0JdTE2IGludmFsaWRfYWNrczsKLQl1MTYgbG9uZ19kaXN0YW5jZV9pbmFfZmluYTsKLQl1MTYgZHNwX3NpbGVuY2VfdW5yZWFjaGFibGU7Ci0JdTE2IGFjY3VtdWxhdGVkX3Jzc2k7Ci0JdTE2IHJ4X292ZmxfZnJhbWVfdG9zc2VkOwotCXUxNiByc3NpX3NpbGVuY2VfdGhyZXNob2xkOwotCXUxNiByeF9vdmZsX2ZyYW1lX3N1cHBsaWVkOwotCXUxNiBsYXN0X3J4X2ZyYW1lX3NpZ25hbDsKLQl1MTYgbGFzdF9yeF9mcmFtZV9ub2lzZTsKLQl1MTYgcnhfYXV0b2RldGVjX25vX29mZG07Ci0JdTE2IHJ4X2F1dG9kZXRlY19ub19iYXJrZXI7Ci0JdTE2IHJlc2VydmVkOworCV9fbGUxNiBnb29kX3NmZDsKKwlfX2xlMTYgYmFkX3BsY3A7CisJX19sZTE2IHdyb25nX2Jzc2lkOworCV9fbGUxNiB2YWxpZF9tcGR1OworCV9fbGUxNiBiYWRfbWFjX2hlYWRlcjsKKwlfX2xlMTYgcmVzZXJ2ZWRfZnJhbWVfdHlwZXM7CisJX19sZTE2IHJ4X2luYTsKKwlfX2xlMTYgYmFkX2NyYzMyOworCV9fbGUxNiBpbnZhbGlkX2N0czsKKwlfX2xlMTYgaW52YWxpZF9hY2tzOworCV9fbGUxNiBsb25nX2Rpc3RhbmNlX2luYV9maW5hOworCV9fbGUxNiBkc3Bfc2lsZW5jZV91bnJlYWNoYWJsZTsKKwlfX2xlMTYgYWNjdW11bGF0ZWRfcnNzaTsKKwlfX2xlMTYgcnhfb3ZmbF9mcmFtZV90b3NzZWQ7CisJX19sZTE2IHJzc2lfc2lsZW5jZV90aHJlc2hvbGQ7CisJX19sZTE2IHJ4X292ZmxfZnJhbWVfc3VwcGxpZWQ7CisJX19sZTE2IGxhc3RfcnhfZnJhbWVfc2lnbmFsOworCV9fbGUxNiBsYXN0X3J4X2ZyYW1lX25vaXNlOworCV9fbGUxNiByeF9hdXRvZGV0ZWNfbm9fb2ZkbTsKKwlfX2xlMTYgcnhfYXV0b2RldGVjX25vX2JhcmtlcjsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5vdGlmX2NoYW5uZWxfcmVzdWx0IHsKQEAgLTYzNyw3ICs2MzcsNyBAQAogc3RydWN0IG5vdGlmX2F1dGhlbnRpY2F0ZSB7CiAJdTggc3RhdGU7CiAJc3RydWN0IG1hY2hkcjI0IGFkZHI7Ci0JdTE2IHN0YXR1czsKKwlfX2xlMTYgc3RhdHVzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBub3RpZl9jYWxpYnJhdGlvbiB7CkBAIC03MzIsMTQgKzczMiwxNCBAQAogc3RydWN0IGFsaXZlX2NvbW1hbmRfcmVzcG9uY2UgewogCXU4IGFsaXZlX2NvbW1hbmQ7CiAJdTggc2VxdWVuY2VfbnVtYmVyOwotCXUxNiBzb2Z0d2FyZV9yZXZpc2lvbjsKKwlfX2xlMTYgc29mdHdhcmVfcmV2aXNpb247CiAJdTggZGV2aWNlX2lkZW50aWZpZXI7CiAJdTggcmVzZXJ2ZWQxWzVdOwotCXUxNiByZXNlcnZlZDI7Ci0JdTE2IHJlc2VydmVkMzsKLQl1MTYgY2xvY2tfc2V0dGxlX3RpbWU7Ci0JdTE2IHBvd2VydXBfc2V0dGxlX3RpbWU7Ci0JdTE2IHJlc2VydmVkNDsKKwlfX2xlMTYgcmVzZXJ2ZWQyOworCV9fbGUxNiByZXNlcnZlZDM7CisJX19sZTE2IGNsb2NrX3NldHRsZV90aW1lOworCV9fbGUxNiBwb3dlcnVwX3NldHRsZV90aW1lOworCV9fbGUxNiByZXNlcnZlZDQ7CiAJdTggdGltZV9zdGFtcFs1XTsJLyogbW9udGgsIGRheSwgeWVhciwgaG91cnMsIG1pbnV0ZXMgKi8KIAl1OCB1Y29kZV92YWxpZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtODc4LDcgKzg3OCwxMSBAQAogCiBzdHJ1Y3QgaXB3X2Fzc29jaWF0ZSB7CiAJdTggY2hhbm5lbDsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKIAl1OCBhdXRoX3R5cGU6NCwgYXV0aF9rZXk6NDsKKyNlbHNlCisJdTggYXV0aF9rZXk6NCwgYXV0aF90eXBlOjQ7CisjZW5kaWYKIAl1OCBhc3NvY190eXBlOwogCXU4IHJlc2VydmVkOwogCV9fbGUxNiBwb2xpY3lfc3VwcG9ydDsKQEAgLTkxOCwxMiArOTIyLDEyIEBACiBzdHJ1Y3QgaXB3X3JldHJ5X2xpbWl0IHsKIAl1OCBzaG9ydF9yZXRyeV9saW1pdDsKIAl1OCBsb25nX3JldHJ5X2xpbWl0OwotCXUxNiByZXNlcnZlZDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGlwd19kaW5vX2NvbmZpZyB7Ci0JdTMyIGRpbm9fY29uZmlnX2FkZHI7Ci0JdTE2IGRpbm9fY29uZmlnX3NpemU7CisJX19sZTMyIGRpbm9fY29uZmlnX2FkZHI7CisJX19sZTE2IGRpbm9fY29uZmlnX3NpemU7CiAJdTggZGlub19yZXNwb25zZTsKIAl1OCByZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtOTk4LDcgKzEwMDIsNyBAQAogICogLSBcYSBzdGF0dXMgY29udGFpbnMgc3RhdHVzOwogICogLSBcYSBwYXJhbSBmaWxsZWQgd2l0aCBzdGF0dXMgcGFyYW1ldGVycy4KICAqLwotc3RydWN0IGlwd19jbWQgeworc3RydWN0IGlwd19jbWQgewkgLyogWFhYICovCiAJdTMyIGNtZDsgICAvKio8IEhvc3QgY29tbWFuZCAqLwogCXUzMiBzdGF0dXM7LyoqPCBTdGF0dXMgKi8KIAl1MzIgc3RhdHVzX2xlbjsKQEAgLTEwOTIsNyArMTA5Niw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotc3RydWN0IGlwd19lcnJvcl9lbGVtIHsKK3N0cnVjdCBpcHdfZXJyb3JfZWxlbSB7CSAvKiBYWFggKi8KIAl1MzIgZGVzYzsKIAl1MzIgdGltZTsKIAl1MzIgYmxpbmsxOwpAQCAtMTEwMiwxMyArMTEwNiwxMyBAQAogCXUzMiBkYXRhOwogfTsKIAotc3RydWN0IGlwd19ldmVudCB7CitzdHJ1Y3QgaXB3X2V2ZW50IHsJIC8qIFhYWCAqLwogCXUzMiBldmVudDsKIAl1MzIgdGltZTsKIAl1MzIgZGF0YTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgaXB3X2Z3X2Vycm9yIHsKK3N0cnVjdCBpcHdfZndfZXJyb3IgewkgLyogWFhYICovCiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzOwogCXUzMiBzdGF0dXM7CiAJdTMyIGNvbmZpZzsKQEAgLTExNTMsNyArMTE1Nyw3IEBACiAgKi8KIHN0cnVjdCBpcHdfcnRfaGRyIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBydF9oZHI7Ci0JdTY0IHJ0X3RzZjsgICAgICAvKiBUU0YgKi8KKwl1NjQgcnRfdHNmOyAgICAgIC8qIFRTRiAqLwkvKiBYWFggKi8KIAl1OCBydF9mbGFnczsJLyogcmFkaW90YXAgcGFja2V0IGZsYWdzICovCiAJdTggcnRfcmF0ZTsJLyogcmF0ZSBpbiA1MDBrYi9zICovCiAJX19sZTE2IHJ0X2NoYW5uZWw7CS8qIGNoYW5uZWwgaW4gbWh6ICovCkBAIC0xOTQwLDggKzE5NDQsOCBAQAogI2RlZmluZSBJUFdfTUVNX0ZJWEVEX09WRVJSSURFICAgICAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg0MUMpCiAKIHN0cnVjdCBpcHdfZml4ZWRfcmF0ZSB7Ci0JdTE2IHR4X3JhdGVzOwotCXUxNiByZXNlcnZlZDsKKwlfX2xlMTYgdHhfcmF0ZXM7CisJX19sZTE2IHJlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgSVBXX0lORElSRUNUX0FERFJfTUFTSyAofjB4M3VsKQpAQCAtMTk1MSwxMiArMTk1NSwxMiBAQAogCXU4IGxlbjsKIAl1MTYgcmVzZXJ2ZWQ7CiAJdTMyICpwYXJhbTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CS8qIFhYWCAqLwogCiBzdHJ1Y3QgY21kbG9nX2hvc3RfY21kIHsKIAl1OCBjbWQ7CiAJdTggbGVuOwotCXUxNiByZXNlcnZlZDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiAJY2hhciBwYXJhbVsxMjRdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwppbmRleCBkMWFmOTM4Li5mODQ0YjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCkBAIC0xLDcgKzEsMjIgQEAKK2NvbmZpZyBJV0xDT1JFCisJdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpZmkgQ29yZSIKKwlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCitjb25maWcgSVdMV0lGSV9MRURTCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgSVdMV0lGSV9SRktJTEwKKwlib29sZWFuICJJV0xXSUZJIFJGIGtpbGwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElXTENPUkUKKwlzZWxlY3QgUkZLSUxMCisJc2VsZWN0IFJGS0lMTF9JTlBVVAorCiBjb25maWcgSVdMNDk2NQogCXRyaXN0YXRlICJJbnRlbCBXaXJlbGVzcyBXaUZpIDQ5NjVBR04iCiAJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IElXTENPUkUKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToKIApAQCAtMjAsMjYgKzM1LDI2IEBACiAJICBydW5zLgogCiAJICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCi0JICBpbnNlcnRlZCBpbiBhbmQgcmVtdm9lZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksCisJICBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksCiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bDQ5NjUua28uCiAKLWNvbmZpZyBJV0w0OTY1X1FPUwotCWJvb2wgIkVuYWJsZSBXaXJlbGVzcyBRb1MgaW4gaXdsNDk2NSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0w0OTY1Ci0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgd2lyZWxlc3MgcXVhbGl0eSBvZiBzZXJ2aWNlIChRb1MpIGZvciB0aGUKLQkgIGl3bDQ5NjUgZHJpdmVyLgotCiBjb25maWcgSVdMNDk2NV9IVAogCWJvb2wgIkVuYWJsZSA4MDIuMTFuIEhUIGZlYXR1cmVzIGluIGl3bDQ5NjUgZHJpdmVyIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVwZW5kcyBvbiBJV0w0OTY1ICYmIElXTDQ5NjVfUU9TCi0JZGVwZW5kcyBvbiBuCisJZGVwZW5kcyBvbiBJV0w0OTY1CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBJRUVFIDgwMi4xMW4gSGlnaCBUaHJvdWdocHV0IGZlYXR1cmVzCiAJICBmb3IgdGhlIGl3bDQ5NjUgZHJpdmVyLgogCitjb25maWcgSVdMNDk2NV9MRURTCisJYm9vbCAiRW5hYmxlIExFRFMgZmVhdHVyZXMgaW4gaXdsNDk2NSBkcml2ZXIiCisJZGVwZW5kcyBvbiBJV0w0OTY1ICYmIE1BQzgwMjExX0xFRFMgJiYgTEVEU19DTEFTUworCXNlbGVjdCBJV0xXSUZJX0xFRFMKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIExFRFMgZm9yIHRoZSBpd2x3aWZpIGRyaXZlcnMKKworCiBjb25maWcgSVdMNDk2NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2w0OTY1IGRyaXZlciIKIAlkZXBlbmRzIG9uIElXTDQ5NjUKQEAgLTUzLDcgKzY4LDcgQEAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHNlbnNpdGl2aXR5IGNhbGlicmF0aW9uIGZvciB0aGUgaXdsNDk2NQogCSAgZHJpdmVyLgogCi1jb25maWcgSVdMNDk2NV9ERUJVRworY29uZmlnIElXTFdJRklfREVCVUcKIAlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bDQ5NjUgZHJpdmVyIgogCWRlcGVuZHMgb24gSVdMNDk2NQogCS0tLWhlbHAtLS0KQEAgLTc5LDYgKzk0LDEyIEBACiAJICBhcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gY2FuIGFzc2lzdCBvdGhlcnMgaW4gaGVscGluZyB5b3UgcmVzb2x2ZQogCSAgYW55IHByb2JsZW1zIHlvdSBtYXkgZW5jb3VudGVyLgogCitjb25maWcgSVdMV0lGSV9ERUJVR0ZTCisgICAgICAgIGJvb2wgIkl3bHdpZmkgZGVidWdmcyBzdXBwb3J0IgorICAgICAgICBkZXBlbmRzIG9uIElXTENPUkUgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCisgICAgICAgIC0tLWhlbHAtLS0KKwkgIEVuYWJsZSBjcmVhdGlvbiBvZiBkZWJ1Z2ZzIGZpbGVzIGZvciB0aGUgaXdsd2lmaSBkcml2ZXJzLgorCiBjb25maWcgSVdMMzk0NQogCXRyaXN0YXRlICJJbnRlbCBQUk8vV2lyZWxlc3MgMzk0NUFCRy9CRyBOZXR3b3JrIENvbm5lY3Rpb24iCiAJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKQEAgLTEwMSwyMyArMTIyLDIyIEBACiAJICBydW5zLgogCiAJICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCi0JICBpbnNlcnRlZCBpbiBhbmQgcmVtdm9lZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksCisJICBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksCiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bDM5NDUua28uCiAKLWNvbmZpZyBJV0wzOTQ1X1FPUwotCWJvb2wgIkVuYWJsZSBXaXJlbGVzcyBRb1MgaW4gaXdsMzk0NSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJV0wzOTQ1Ci0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgd2lyZWxlc3MgcXVhbGl0eSBvZiBzZXJ2aWNlIChRb1MpIGZvciB0aGUKLQkgIGl3bDM5NDUgZHJpdmVyLgotCiBjb25maWcgSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2wzOTQ1IGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBJV0wzOTQ1CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2wzOTQ1IGRyaXZlci4KIAorY29uZmlnIElXTDM5NDVfTEVEUworCWJvb2wgIkVuYWJsZSBMRURTIGZlYXR1cmVzIGluIGl3bDM5NDUgZHJpdmVyIgorCWRlcGVuZHMgb24gSVdMMzk0NSAmJiBNQUM4MDIxMV9MRURTICYmIExFRFNfQ0xBU1MKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIExFRFMgZm9yIHRoZSBpd2wzOTQ1IGRyaXZlci4KKwogY29uZmlnIElXTDM5NDVfREVCVUcKIAlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bDM5NDUgZHJpdmVyIgogCWRlcGVuZHMgb24gSVdMMzk0NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKaW5kZXggM2JiZDM4My4uNGYzZTg4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCkBAIC0xLDUgKzEsMTMgQEAKK29iai0kKENPTkZJR19JV0xDT1JFKQk6PSBpd2xjb3JlLm8KK2l3bGNvcmUtb2JqcyAJCTo9IGl3bC1jb3JlLm8gaXdsLWVlcHJvbS5vIGl3bC1oY21kLm8KK2l3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9ERUJVR0ZTKSArPSBpd2wtZGVidWdmcy5vCitpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfTEVEUykgKz0gaXdsLWxlZC5vCitpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfUkZLSUxMKSArPSBpd2wtcmZraWxsLm8KKwogb2JqLSQoQ09ORklHX0lXTDM5NDUpCSs9IGl3bDM5NDUubwotaXdsMzk0NS1vYmpzCQk9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubworaXdsMzk0NS1vYmpzCQk6PSBpd2wzOTQ1LWJhc2UubyBpd2wtMzk0NS5vIGl3bC0zOTQ1LXJzLm8KK2l3bDM5NDUtJChDT05GSUdfSVdMMzk0NV9MRURTKSArPSBpd2wtMzk0NS1sZWQubwogCiBvYmotJChDT05GSUdfSVdMNDk2NSkJKz0gaXdsNDk2NS5vCi1pd2w0OTY1LW9ianMJCT0gaXdsNDk2NS1iYXNlLm8gaXdsLTQ5NjUubyBpd2wtNDk2NS1ycy5vCitpd2w0OTY1LW9ianMJCTo9IGl3bDQ5NjUtYmFzZS5vIGl3bC00OTY1Lm8gaXdsLTQ5NjUtcnMubyBpd2wtc3RhLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oCmluZGV4IDQ2YmIyYzcuLjgxN2VjZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29tbWFuZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWNvbW1hbmRzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01MTUsMTQgKzUxNSwyMCBAQAogI2RlZmluZSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLCQkweDAxCiAKIC8qIGtleSBmbGFncyBfX2xlMTYqLwotI2RlZmluZSBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4NykKLSNkZWZpbmUgU1RBX0tFWV9GTEdfTk9fRU5DCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwKQotI2RlZmluZSBTVEFfS0VZX0ZMR19XRVAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgxKQotI2RlZmluZSBTVEFfS0VZX0ZMR19DQ01QCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgyKQotI2RlZmluZSBTVEFfS0VZX0ZMR19US0lQCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgzKQorI2RlZmluZSBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNykKKyNkZWZpbmUgU1RBX0tFWV9GTEdfTk9fRU5DCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBTVEFfS0VZX0ZMR19XRVAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBTVEFfS0VZX0ZMR19DQ01QCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAyKQorI2RlZmluZSBTVEFfS0VZX0ZMR19US0lQCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAzKQogCiAjZGVmaW5lIFNUQV9LRVlfRkxHX0tFWUlEX1BPUwk4CiAjZGVmaW5lIFNUQV9LRVlfRkxHX0lOVkFMSUQgCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwODAwKQorLyogd2VwIGtleSBpcyBlaXRoZXIgZnJvbSBnbG9iYWwga2V5ICgwKSBvciBmcm9tIHN0YXRpb24gaW5mbyBhcnJheSAoMSkgKi8KKyNkZWZpbmUgU1RBX0tFWV9GTEdfV0VQX0tFWV9NQVBfTVNLICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwOCkKKworLyogd2VwIGtleSBpbiBTVEE6IDUtYnl0ZXMgKDApIG9yIDEzLWJ5dGVzICgxKSAqLworI2RlZmluZSBTVEFfS0VZX0ZMR19LRVlfU0laRV9NU0sgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgxMDAwKQorI2RlZmluZSBTVEFfS0VZX01VTFRJQ0FTVF9NU0sgICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg0MDAwKQogCiAvKiBGbGFncyBpbmRpY2F0ZSB3aGV0aGVyIHRvIG1vZGlmeSB2cy4gZG9uJ3QgY2hhbmdlIHZhcmlvdXMgc3RhdGlvbiBwYXJhbXMgKi8KICNkZWZpbmUJU1RBX01PRElGWV9LRVlfTUFTSwkJMHgwMQpAQCAtNTQ2LDcgKzU1Miw4IEBACiAJdTggdGtpcF9yeF90c2NfYnl0ZTI7CS8qIFRTQ1syXSBmb3Iga2V5IG1peCBwaDEgZGV0ZWN0aW9uICovCiAJdTggcmVzZXJ2ZWQxOwogCV9fbGUxNiB0a2lwX3J4X3R0YWtbNV07CS8qIDEwLWJ5dGUgdW5pY2FzdCBUS0lQIFRUQUsgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQyOworCXU4IGtleV9vZmZzZXQ7CisJdTggcmVzZXJ2ZWQyOwogCXU4IGtleVsxNl07CQkvKiAxNi1ieXRlIHVuaWNhc3QgZGVjcnlwdGlvbiBrZXkgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC02NTksMjYgKzY2NiwyNiBAQAogCXU4IHBheWxvYWRbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZQlSWF9SRVNfU1RBVFVTX05PX0NSQzMyX0VSUk9SCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSA8PCAwKQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDEgPDwgMSkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUglfX2NvbnN0YW50X2NwdV90b19sZTMyKDEgPDwgMCkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT19SWEVfT1ZFUkZMT1cJX19jb25zdGFudF9jcHVfdG9fbGUzMigxIDw8IDEpCiAKLSNkZWZpbmUJUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMCkKLSNkZWZpbmUJUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigxIDw8IDEpCi0jZGVmaW5lCVJYX1JFU19QSFlfRkxBR1NfU0hPUlRfUFJFQU1CTEVfTVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSA8PCAyKQotI2RlZmluZQlSWF9SRVNfUEhZX0ZMQUdTX05BUlJPV19CQU5EX01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMykKLSNkZWZpbmUJUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweGYwKQorI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSA8PCAwKQorI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX01PRF9DQ0tfTVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMSkKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19TSE9SVF9QUkVBTUJMRV9NU0sJX19jb25zdGFudF9jcHVfdG9fbGUxNigxIDw8IDIpCisjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSA8PCAzKQorI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ZjApCiAKLSNkZWZpbmUJUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0sJKDB4NyA8PCA4KQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX05PTkUJKDB4MCA8PCA4KQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1dFUAkoMHgxIDw8IDgpCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUAkoMHgyIDw8IDgpCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUAkoMHgzIDw8IDgpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLCSgweDcgPDwgOCkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9OT05FCSgweDAgPDwgOCkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9XRVAJKDB4MSA8PCA4KQorI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX0NDTVAJKDB4MiA8PCA4KQorI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1RLSVAJKDB4MyA8PCA4KQogCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSwkoMHgzIDw8IDExKQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX05PVF9ERUNSWVBUCSgweDAgPDwgMTEpCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfREVDUllQVF9PSwkoMHgzIDw8IDExKQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX0JBRF9JQ1ZfTUlDCSgweDEgPDwgMTEpCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfQkFEX0tFWV9UVEFLCSgweDIgPDwgMTEpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSwkoMHgzIDw8IDExKQorI2RlZmluZSBSWF9SRVNfU1RBVFVTX05PVF9ERUNSWVBUCSgweDAgPDwgMTEpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfREVDUllQVF9PSwkoMHgzIDw8IDExKQorI2RlZmluZSBSWF9SRVNfU1RBVFVTX0JBRF9JQ1ZfTUlDCSgweDEgPDwgMTEpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfQkFEX0tFWV9UVEFLCSgweDIgPDwgMTEpCiAKIHN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2VuZCB7CiAJX19sZTMyIHN0YXR1czsKQEAgLTcwMCw0NSArNzA3LDYgQEAKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgZW5kOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qIEZpeGVkIChub24tY29uZmlndXJhYmxlKSByeCBkYXRhIGZyb20gcGh5ICovCi0jZGVmaW5lIFJYX1BIWV9GTEFHU19BTlRFTk5BRV9PRkZTRVQJCSg0KQotI2RlZmluZSBSWF9QSFlfRkxBR1NfQU5URU5OQUVfTUFTSwkJKDB4NzApCi0jZGVmaW5lIElXTF9BR0NfREJfTUFTSyAJKDB4M2Y4MCkJLyogTUFTSyg3LDEzKSAqLwotI2RlZmluZSBJV0xfQUdDX0RCX1BPUwkJKDcpCi1zdHJ1Y3QgaXdsNDk2NV9yeF9ub25fY2ZnX3BoeSB7Ci0JX19sZTE2IGFudF9zZWxlY3Rpb247CS8qIGFudCBBIGJpdCA0LCBhbnQgQiBiaXQgNSwgYW50IEMgYml0IDYgKi8KLQlfX2xlMTYgYWdjX2luZm87CS8qIGFnYyBjb2RlIDA6NiwgYWdjIGRCIDc6MTMsIHJlc2VydmVkIDE0OjE1ICovCi0JdTggcnNzaV9pbmZvWzZdOwkvKiB3ZSB1c2UgZXZlbiBlbnRyaWVzLCAwLzIvNCBmb3IgQS9CL0MgcnNzaSAqLwotCXU4IHBhZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfNDk2NV9SWCA9IDB4YzMgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKiBVc2VkIG9ubHkgZm9yIGxlZ2FjeSAobm9uIDExbikgZnJhbWVzLgotICovCi0jZGVmaW5lIFJYX1JFU19QSFlfQ05UIDE0Ci1zdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzIHsKLQl1OCBub25fY2ZnX3BoeV9jbnQ7ICAgICAvKiBub24gY29uZmlndXJhYmxlIERTUCBwaHkgZGF0YSBieXRlIGNvdW50ICovCi0JdTggY2ZnX3BoeV9jbnQ7CQkvKiBjb25maWd1cmFibGUgRFNQIHBoeSBkYXRhIGJ5dGUgY291bnQgKi8KLQl1OCBzdGF0X2lkOwkJLyogY29uZmlndXJhYmxlIERTUCBwaHkgZGF0YSBzZXQgSUQgKi8KLQl1OCByZXNlcnZlZDE7Ci0JX19sZTY0IHRpbWVzdGFtcDsJLyogVFNGIGF0IG9uIGFpciByaXNlICovCi0JX19sZTMyIGJlYWNvbl90aW1lX3N0YW1wOyAvKiBiZWFjb24gYXQgb24tYWlyIHJpc2UgKi8KLQlfX2xlMTYgcGh5X2ZsYWdzOwkvKiBnZW5lcmFsIHBoeSBmbGFnczogYmFuZCwgbW9kdWxhdGlvbiwgLi4uICovCi0JX19sZTE2IGNoYW5uZWw7CQkvKiBjaGFubmVsIG51bWJlciAqLwotCV9fbGUxNiBub25fY2ZnX3BoeVtSWF9SRVNfUEhZX0NOVF07CS8qIHVwdG8gMTQgcGh5IGVudHJpZXMgKi8KLQlfX2xlMzIgcmVzZXJ2ZWQyOwotCV9fbGUzMiByYXRlX25fZmxhZ3M7Ci0JX19sZTE2IGJ5dGVfY291bnQ7CQkvKiBmcmFtZSdzIGJ5dGUtY291bnQgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0IHsKLQlfX2xlMTYgYnl0ZV9jb3VudDsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoNSkKICAqIFR4IENvbW1hbmRzICYgUmVzcG9uc2VzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzEyZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb3JlLmgKQEAgLTAsMCArMSw4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBUb21hcyBXaW5rbGVyIDx0b21hcy53aW5rbGVyQGludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19pd2xfMzk0NV9kZXZfaF9fCisjZGVmaW5lIF9faXdsXzM5NDVfZGV2X2hfXworCisjZGVmaW5lIElXTF9QQ0lfREVWSUNFKGRldiwgc3ViZGV2LCBjZmcpIFwKKwkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwgIC5kZXZpY2UgPSAoZGV2KSwgXAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELCAuc3ViZGV2aWNlID0gKHN1YmRldiksIFwKKwkuZHJpdmVyX2RhdGEgPSAoa2VybmVsX3Vsb25nX3QpJihjZmcpCisKKyNkZWZpbmUgSVdMX1NLVV9HICAgICAgIDB4MQorI2RlZmluZSBJV0xfU0tVX0EgICAgICAgMHgyCisKK3N0cnVjdCBpd2xfMzk0NV9jZmcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZndfbmFtZTsKKwl1bnNpZ25lZCBpbnQgc2t1OworfTsKKworI2VuZGlmIC8qIF9faXdsX2Rldl9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZGVidWcuaAppbmRleCBmODUzYzZiLi5mMWQwMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Zy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgogICoKQEAgLTQwLDYgKzQwLDE1IEBACiBkbyB7IGlmICgoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpICYmIG5ldF9yYXRlbGltaXQoKSkgXAogICBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAogCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19GVU5DVElPTl9fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKK3sKKwlpZiAoIShpd2wzOTQ1X2RlYnVnX2xldmVsICYgbGV2ZWwpKQorCQlyZXR1cm47CisKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiaXdsIGRhdGE6ICIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCisJCQlwLCBsZW4sIDEpOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUcoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKQEAgLTQ3LDcgKzU2LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHX0xJTUlUKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiB9Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lXTDM5NDVfREVCVUcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKK3sKK30KKyNlbmRpZgkvKiBDT05GSUdfSVdMMzk0NV9ERUJVRyAqLworCisKIAogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwpAQCAtMTQzLDYgKzE1Nyw3IEBACiAJSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfSFQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IVCwgZiwgIyMgYSkKICNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfU1RBVFMsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19TVEFUU19MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKICNkZWZpbmUgSVdMX0RFQlVHX1FPUyhmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfUU9TLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfUkFESU8oZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUkFESU8sIGYsICMjIGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKaW5kZXggNTcxODE1ZC4uYWQ2MTJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE5OCw0MyArMTk4LDI3IEBACiAgKi8KIHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSB7CiAJdTggcmVzZXJ2ZWQwWzE2XTsKLSNkZWZpbmUgRUVQUk9NX0RFVklDRV9JRCAgICAgICAgICAgICAgICAgICAgKDIqMHgwOCkJLyogMiBieXRlcyAqLwogCXUxNiBkZXZpY2VfaWQ7CS8qIGFicy5vZnM6IDE2ICovCiAJdTggcmVzZXJ2ZWQxWzJdOwotI2RlZmluZSBFRVBST01fUE1DICAgICAgICAgICAgICAgICAgICAgICAgICAoMioweDBBKQkvKiAyIGJ5dGVzICovCiAJdTE2IHBtYzsJCS8qIGFicy5vZnM6IDIwICovCiAJdTggcmVzZXJ2ZWQyWzIwXTsKLSNkZWZpbmUgRUVQUk9NX01BQ19BRERSRVNTICAgICAgICAgICAgICAgICAgKDIqMHgxNSkJLyogNiAgYnl0ZXMgKi8KIAl1OCBtYWNfYWRkcmVzc1s2XTsJLyogYWJzLm9mczogNDIgKi8KIAl1OCByZXNlcnZlZDNbNThdOwotI2RlZmluZSBFRVBST01fQk9BUkRfUkVWSVNJT04gICAgICAgICAgICAgICAoMioweDM1KQkvKiAyICBieXRlcyAqLwogCXUxNiBib2FyZF9yZXZpc2lvbjsJLyogYWJzLm9mczogMTA2ICovCiAJdTggcmVzZXJ2ZWQ0WzExXTsKLSNkZWZpbmUgRUVQUk9NX0JPQVJEX1BCQV9OVU1CRVIgICAgICAgICAgICAgKDIqMHgzQisxKQkvKiA5ICBieXRlcyAqLwogCXU4IGJvYXJkX3BiYV9udW1iZXJbOV07CS8qIGFicy5vZnM6IDExOSAqLwogCXU4IHJlc2VydmVkNVs4XTsKLSNkZWZpbmUgRUVQUk9NX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NCkJLyogMiAgYnl0ZXMgKi8KIAl1MTYgdmVyc2lvbjsJCS8qIGFicy5vZnM6IDEzNiAqLwotI2RlZmluZSBFRVBST01fU0tVX0NBUCAgICAgICAgICAgICAgICAgICAgICAoMioweDQ1KQkvKiAxICBieXRlcyAqLwogCXU4IHNrdV9jYXA7CQkvKiBhYnMub2ZzOiAxMzggKi8KLSNkZWZpbmUgRUVQUk9NX0xFRFNfTU9ERSAgICAgICAgICAgICAgICAgICAgKDIqMHg0NSsxKQkvKiAxICBieXRlcyAqLwogCXU4IGxlZHNfbW9kZTsJCS8qIGFicy5vZnM6IDEzOSAqLwotI2RlZmluZSBFRVBST01fT0VNX01PREUgICAgICAgICAgICAgICAgICAgICAoMioweDQ2KQkvKiAyICBieXRlcyAqLwogCXUxNiBvZW1fbW9kZTsKLSNkZWZpbmUgRUVQUk9NX1dPV0xBTl9NT0RFICAgICAgICAgICAgICAgICAgKDIqMHg0NykJLyogMiAgYnl0ZXMgKi8KIAl1MTYgd293bGFuX21vZGU7CS8qIGFicy5vZnM6IDE0MiAqLwotI2RlZmluZSBFRVBST01fTEVEU19USU1FX0lOVEVSVkFMICAgICAgICAgICAoMioweDQ4KQkvKiAyICBieXRlcyAqLwogCXUxNiBsZWRzX3RpbWVfaW50ZXJ2YWw7CS8qIGFicy5vZnM6IDE0NCAqLwotI2RlZmluZSBFRVBST01fTEVEU19PRkZfVElNRSAgICAgICAgICAgICAgICAoMioweDQ5KQkvKiAxICBieXRlcyAqLwogCXU4IGxlZHNfb2ZmX3RpbWU7CS8qIGFicy5vZnM6IDE0NiAqLwotI2RlZmluZSBFRVBST01fTEVEU19PTl9USU1FICAgICAgICAgICAgICAgICAoMioweDQ5KzEpCS8qIDEgIGJ5dGVzICovCiAJdTggbGVkc19vbl90aW1lOwkvKiBhYnMub2ZzOiAxNDcgKi8KLSNkZWZpbmUgRUVQUk9NX0FMTUdPUl9NX1ZFUlNJT04gICAgICAgICAgICAgKDIqMHg0QSkJLyogMSAgYnl0ZXMgKi8KIAl1OCBhbG1nb3JfbV92ZXJzaW9uOwkvKiBhYnMub2ZzOiAxNDggKi8KLSNkZWZpbmUgRUVQUk9NX0FOVEVOTkFfU1dJVENIX1RZUEUgICAgICAgICAgKDIqMHg0QSsxKQkvKiAxICBieXRlcyAqLwogCXU4IGFudGVubmFfc3dpdGNoX3R5cGU7CS8qIGFicy5vZnM6IDE0OSAqLwogCXU4IHJlc2VydmVkNls0Ml07Ci0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX1NLVV9JRCAgICAgICAgICAgICgyKjB4NjApCS8qIDQgIGJ5dGVzICovCiAJdTggc2t1X2lkWzRdOwkJLyogYWJzLm9mczogMTkyICovCiAKIC8qCkBAIC0yNDksOSArMjMzLDcgQEAKICAqCiAgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNAogICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMSAgICAgICAgICAgICgyKjB4NjIpCS8qIDIgIGJ5dGVzICovCiAJdTE2IGJhbmRfMV9jb3VudDsJLyogYWJzLm9mczogMTk2ICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMV9DSEFOTkVMUyAgICgyKjB4NjMpCS8qIDI4IGJ5dGVzICovCiAJc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF8xX2NoYW5uZWxzWzE0XTsgIC8qIGFicy5vZnM6IDE5NiAqLwogCiAvKgpAQCAtMjU5LDM2ICsyNDEsMjggQEAKICAqIDUuMCBHSHogY2hhbm5lbHMgNywgOCwgMTEsIDEyLCAxNgogICogKDQ5MTUtNTA4ME1IeikgKG5vbmUgb2YgdGhlc2UgaXMgZXZlciBzdXBwb3J0ZWQpCiAgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yICAgICAgICAgICAgKDIqMHg3MSkJLyogMiAgYnl0ZXMgKi8KIAl1MTYgYmFuZF8yX2NvdW50OwkvKiBhYnMub2ZzOiAyMjYgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yX0NIQU5ORUxTICAgKDIqMHg3MikJLyogMjYgYnl0ZXMgKi8KIAlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAgLyogYWJzLm9mczogMjI4ICovCiAKIC8qCiAgKiA1LjIgR0h6IGNoYW5uZWxzIDM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKICAqICg1MTcwLTUzMjBNSHopCiAgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8zICAgICAgICAgICAgKDIqMHg3RikJLyogMiAgYnl0ZXMgKi8KIAl1MTYgYmFuZF8zX2NvdW50OwkvKiBhYnMub2ZzOiAyNTQgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8zX0NIQU5ORUxTICAgKDIqMHg4MCkJLyogMjQgYnl0ZXMgKi8KIAlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAgLyogYWJzLm9mczogMjU2ICovCiAKIC8qCiAgKiA1LjUgR0h6IGNoYW5uZWxzIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwCiAgKiAoNTUwMC01NzAwTUh6KQogICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNCAgICAgICAgICAgICgyKjB4OEMpCS8qIDIgIGJ5dGVzICovCiAJdTE2IGJhbmRfNF9jb3VudDsJLyogYWJzLm9mczogMjgwICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNF9DSEFOTkVMUyAgICgyKjB4OEQpCS8qIDIyIGJ5dGVzICovCiAJc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgIC8qIGFicy5vZnM6IDI4MiAqLwogCiAvKgogICogNS43IEdIeiBjaGFubmVscyAxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CiAgKiAoNTcyNS01ODI1TUh6KQogICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNSAgICAgICAgICAgICgyKjB4OTgpCS8qIDIgIGJ5dGVzICovCiAJdTE2IGJhbmRfNV9jb3VudDsJLyogYWJzLm9mczogMzA0ICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNV9DSEFOTkVMUyAgICgyKjB4OTkpCS8qIDEyIGJ5dGVzICovCiAJc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF81X2NoYW5uZWxzWzZdOyAgLyogYWJzLm9mczogMzA2ICovCiAKIAl1OCByZXNlcnZlZDlbMTk0XTsKQEAgLTI5NiwxNSArMjcwLDkgQEAKIC8qCiAgKiAzOTQ1IFR4cG93ZXIgY2FsaWJyYXRpb24gZGF0YS4KICAqLwotI2RlZmluZSBFRVBST01fVFhQT1dFUl9DQUxJQl9HUk9VUDAgMHgyMDAKLSNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQ0FMSUJfR1JPVVAxIDB4MjQwCi0jZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0NBTElCX0dST1VQMiAweDI4MAotI2RlZmluZSBFRVBST01fVFhQT1dFUl9DQUxJQl9HUk9VUDMgMHgyYzAKLSNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQ0FMSUJfR1JPVVA0IDB4MzAwCiAjZGVmaW5lIElXTF9OVU1fVFhfQ0FMSUJfR1JPVVBTIDUKIAlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fdHhwb3dlcl9ncm91cCBncm91cHNbSVdMX05VTV9UWF9DQUxJQl9HUk9VUFNdOwogLyogYWJzLm9mczogNTEyICovCi0jZGVmaW5lIEVFUFJPTV9DQUxJQl9URU1QRVJBVFVSRV9DT1JSRUNUIDB4MzQwCiAJc3RydWN0IGl3bDM5NDVfZWVwcm9tX3RlbXBlcmF0dXJlX2NvcnIgY29ycmVjdGlvbnM7ICAvKiBhYnMub2ZzOiA4MzIgKi8KIAl1OCByZXNlcnZlZDE2WzE3Ml07CS8qIGZpbGwgb3V0IHRvIGZ1bGwgMTAyNCBieXRlIGJsb2NrICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTMyMSwxODEgKzI4OSw2IEBACiAjZGVmaW5lIFBDSV9SRUdfV1VNOCAgICAgICAweDBFOAogI2RlZmluZSBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCAgICAgICAgICgweDgwMDAwMDAwKQogCi0vKj09PSBDU1IgKGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMpID09PSovCi0jZGVmaW5lIENTUl9CQVNFICAgICgweDAwMCkKLQotI2RlZmluZSBDU1JfU1dfVkVSICAgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwMDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHICAgIChDU1JfQkFTRSsweDAwMCkgLyogaGFyZHdhcmUgaW50ZXJmYWNlIGNvbmZpZyAqLwotI2RlZmluZSBDU1JfSU5UX0NPQUxFU0NJTkcgICAgICAoQ1NSX0JBU0UrMHgwMDQpIC8qIGFjY3VtIGludHMsIDMyLXVzZWMgdW5pdHMgKi8KLSNkZWZpbmUgQ1NSX0lOVCAgICAgICAgICAgICAgICAgKENTUl9CQVNFKzB4MDA4KSAvKiBob3N0IGludGVycnVwdCBzdGF0dXMvYWNrICovCi0jZGVmaW5lIENTUl9JTlRfTUFTSyAgICAgICAgICAgIChDU1JfQkFTRSsweDAwYykgLyogaG9zdCBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lIENTUl9GSF9JTlRfU1RBVFVTICAgICAgIChDU1JfQkFTRSsweDAxMCkgLyogYnVzbWFzdGVyIGludCBzdGF0dXMvYWNrKi8KLSNkZWZpbmUgQ1NSX0dQSU9fSU4gICAgICAgICAgICAgKENTUl9CQVNFKzB4MDE4KSAvKiByZWFkIGV4dGVybmFsIGNoaXAgcGlucyAqLwotI2RlZmluZSBDU1JfUkVTRVQgICAgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwMjApIC8qIGJ1c21hc3RlciBlbmFibGUsIE5NSSwgZXRjKi8KLSNkZWZpbmUgQ1NSX0dQX0NOVFJMICAgICAgICAgICAgKENTUl9CQVNFKzB4MDI0KQotCi0vKgotICogSGFyZHdhcmUgcmV2aXNpb24gaW5mbwotICogQml0IGZpZWxkczoKLSAqIDMxLTg6ICBSZXNlcnZlZAotICogIDctNDogIFR5cGUgb2YgZGV2aWNlOiAgMHgwID0gNDk2NSwgMHhkID0gMzk0NQotICogIDMtMjogIFJldmlzaW9uIHN0ZXA6ICAwID0gQSwgMSA9IEIsIDIgPSBDLCAzID0gRAotICogIDEtMDogICJEYXNoIiB2YWx1ZSwgYXMgaW4gQS0xLCBldGMuCi0gKi8KLSNkZWZpbmUgQ1NSX0hXX1JFViAgICAgICAgICAgICAgKENTUl9CQVNFKzB4MDI4KQotCi0vKiBFRVBST00gcmVhZHMgKi8KLSNkZWZpbmUgQ1NSX0VFUFJPTV9SRUcgICAgICAgICAgKENTUl9CQVNFKzB4MDJjKQotI2RlZmluZSBDU1JfRUVQUk9NX0dQICAgICAgICAgICAoQ1NSX0JBU0UrMHgwMzApCi0jZGVmaW5lIENTUl9HUF9VQ09ERQkJKENTUl9CQVNFKzB4MDQ0KQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMSAgICAgICAoQ1NSX0JBU0UrMHgwNTQpCi0jZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxX1NFVCAgIChDU1JfQkFTRSsweDA1OCkKLSNkZWZpbmUgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSICAgKENTUl9CQVNFKzB4MDVjKQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMiAgICAgICAoQ1NSX0JBU0UrMHgwNjApCi0jZGVmaW5lIENTUl9HSU9fQ0hJQ0tFTl9CSVRTICAgIChDU1JfQkFTRSsweDEwMCkKLQotLyogQW5hbG9nIHBoYXNlLWxvY2stbG9vcCBjb25maWd1cmF0aW9uICgzOTQ1IG9ubHkpCi0gKiBTZXQgYml0IDI0LiAqLwotI2RlZmluZSBDU1JfQU5BX1BMTF9DRkcgICAgICAgICAoQ1NSX0JBU0UrMHgyMGMpCi0KLS8qIEJpdHMgZm9yIENTUl9IV19JRl9DT05GSUdfUkVHICovCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9BTE1BR09SX01CICAgICAgICAgKDB4MDAwMDAxMDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9BTE1BR09SX01NICAgICAgICAgKDB4MDAwMDAyMDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9TS1VfTVJDICAgICAgICAgICAgKDB4MDAwMDA0MDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFICAgICAgICAgKDB4MDAwMDA4MDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0EgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0IgICAgKDB4MDAwMDEwMDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSAgICAgKDB4MDAyMDAwMDApCi0KLS8qIGludGVycnVwdCBmbGFncyBpbiBJTlRBLCBzZXQgYnkgdUNvZGUgb3IgaGFyZHdhcmUgKGUuZy4gZG1hKSwKLSAqIGFja25vd2xlZGdlZCAocmVzZXQpIGJ5IGhvc3Qgd3JpdGluZyAiMSIgdG8gZmxhZ2dlZCBiaXRzLiAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9GSF9SWCAgICAgICAgKDEgPDwgMzEpIC8qIFJ4IERNQSwgY21kIHJlc3BvbnNlcywgRkhfSU5UWzE3OjE2XSAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9IV19FUlIgICAgICAgKDEgPDwgMjkpIC8qIERNQSBoYXJkd2FyZSBlcnJvciBGSF9JTlRbMzFdICovCi0jZGVmaW5lIENTUl9JTlRfQklUX0ROTEQgICAgICAgICAoMSA8PCAyOCkgLyogdUNvZGUgRG93bmxvYWQgKi8KLSNkZWZpbmUgQ1NSX0lOVF9CSVRfRkhfVFggICAgICAgICgxIDw8IDI3KSAvKiBUeCBETUEgRkhfSU5UWzE6MF0gKi8KLSNkZWZpbmUgQ1NSX0lOVF9CSVRfU0NEICAgICAgICAgICgxIDw8IDI2KSAvKiBUWFEgcG9pbnRlciBhZHZhbmNlZCAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9TV19FUlIgICAgICAgKDEgPDwgMjUpIC8qIHVDb2RlIGVycm9yICovCi0jZGVmaW5lIENTUl9JTlRfQklUX1JGX0tJTEwgICAgICAoMSA8PCA3KSAgLyogSFcgUkZLSUxMIHN3aXRjaCBHUF9DTlRSTFsyN10gdG9nZ2xlZCAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9DVF9LSUxMICAgICAgKDEgPDwgNikgIC8qIENyaXRpY2FsIHRlbXAgKGNoaXAgdG9vIGhvdCkgcmZraWxsICovCi0jZGVmaW5lIENTUl9JTlRfQklUX1NXX1JYICAgICAgICAoMSA8PCAzKSAgLyogUngsIGNvbW1hbmQgcmVzcG9uc2VzLCAzOTQ1ICovCi0jZGVmaW5lIENTUl9JTlRfQklUX1dBS0VVUCAgICAgICAoMSA8PCAxKSAgLyogTklDIGNvbnRyb2xsZXIgd2FraW5nIHVwIChwd3IgbWdtdCkgKi8KLSNkZWZpbmUgQ1NSX0lOVF9CSVRfQUxJVkUgICAgICAgICgxIDw8IDApICAvKiB1Q29kZSBpbnRlcnJ1cHRzIG9uY2UgaXQgaW5pdGlhbGl6ZXMgKi8KLQotI2RlZmluZSBDU1JfSU5JX1NFVF9NQVNLCShDU1JfSU5UX0JJVF9GSF9SWCAgIHwgXAotCQkJCSBDU1JfSU5UX0JJVF9IV19FUlIgIHwgXAotCQkJCSBDU1JfSU5UX0JJVF9GSF9UWCAgIHwgXAotCQkJCSBDU1JfSU5UX0JJVF9TV19FUlIgIHwgXAotCQkJCSBDU1JfSU5UX0JJVF9SRl9LSUxMIHwgXAotCQkJCSBDU1JfSU5UX0JJVF9TV19SWCAgIHwgXAotCQkJCSBDU1JfSU5UX0JJVF9XQUtFVVAgIHwgXAotCQkJCSBDU1JfSU5UX0JJVF9BTElWRSkKLQotLyogaW50ZXJydXB0IGZsYWdzIGluIEZIIChmbG93IGhhbmRsZXIpIChQQ0kgYnVzbWFzdGVyIERNQSkgKi8KLSNkZWZpbmUgQ1NSX0ZIX0lOVF9CSVRfRVJSICAgICAgICgxIDw8IDMxKSAvKiBFcnJvciAqLwotI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9ISV9QUklPUiAgKDEgPDwgMzApIC8qIEhpZ2ggcHJpb3JpdHkgUngsIGJ5cGFzcyBjb2FsZXNjaW5nICovCi0jZGVmaW5lIENTUl9GSF9JTlRfQklUX1JYX0NITkwyICAoMSA8PCAxOCkgLyogUnggY2hhbm5lbCAyICgzOTQ1IG9ubHkpICovCi0jZGVmaW5lIENTUl9GSF9JTlRfQklUX1JYX0NITkwxICAoMSA8PCAxNykgLyogUnggY2hhbm5lbCAxICovCi0jZGVmaW5lIENTUl9GSF9JTlRfQklUX1JYX0NITkwwICAoMSA8PCAxNikgLyogUnggY2hhbm5lbCAwICovCi0jZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkw2ICAoMSA8PCA2KSAgLyogVHggY2hhbm5lbCA2ICgzOTQ1IG9ubHkpICovCi0jZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwxICAoMSA8PCAxKSAgLyogVHggY2hhbm5lbCAxICovCi0jZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwwICAoMSA8PCAwKSAgLyogVHggY2hhbm5lbCAwICovCi0KLSNkZWZpbmUgQ1NSX0ZIX0lOVF9SWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9ISV9QUklPUiB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDIgfCBcCi0JCQkJIENTUl9GSF9JTlRfQklUX1JYX0NITkwxIHwgXAotCQkJCSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMCkKLQotI2RlZmluZSBDU1JfRkhfSU5UX1RYX01BU0sJKENTUl9GSF9JTlRfQklUX1RYX0NITkw2IHwgXAotCQkJCSBDU1JfRkhfSU5UX0JJVF9UWF9DSE5MMSB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDApCi0KLQotLyogUkVTRVQgKi8KLSNkZWZpbmUgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0jZGVmaW5lIENTUl9SRVNFVF9SRUdfRkxBR19GT1JDRV9OTUkgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKLSNkZWZpbmUgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCAgICAgICAgICAgKDB4MDAwMDAxMDApCi0jZGVmaW5lIENTUl9SRVNFVF9SRUdfRkxBR19TVE9QX01BU1RFUiAgICAgICAgICAgICAgICgweDAwMDAwMjAwKQotCi0vKiBHUCAoZ2VuZXJhbCBwdXJwb3NlKSBDT05UUk9MICovCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKLSNkZWZpbmUgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRICAgICAgICAgKDB4MDAwMDAwMDgpCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCAgICAgICAgICgweDAwMDAwMDEwKQotCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfVkFMX01BQ19BQ0NFU1NfRU4gICAgICAgICAgICgweDAwMDAwMDAxKQotCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfTVNLX1BPV0VSX1NBVkVfVFlQRSAgICAgICAgICgweDA3MDAwMDAwKQotI2RlZmluZSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX1BPV0VSX1NBVkUgICAgICAgICAoMHgwNDAwMDAwMCkKLSNkZWZpbmUgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cgICAgICAgICAgKDB4MDgwMDAwMDApCi0KLQotLyogRUVQUk9NIFJFRyAqLwotI2RlZmluZSBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSwkoMHgwMDAwMDAwMSkKLSNkZWZpbmUgQ1NSX0VFUFJPTV9SRUdfQklUX0NNRAkJKDB4MDAwMDAwMDIpCi0KLS8qIEVFUFJPTSBHUCAqLwotI2RlZmluZSBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSwkJKDB4MDAwMDAwMDYpCi0jZGVmaW5lIENTUl9FRVBST01fR1BfQkFEX1NJR05BVFVSRQkoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQ1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0sJKDB4MDAwMDAxODApCi0KLS8qIFVDT0RFIERSViBHUCAqLwotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQICAgICAgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQgICAgICAgICAgICgweDAwMDAwMDA0KQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9SRUdfQklUX0NUX0tJTExfRVhJVCAgICAgICgweDAwMDAwMDA4KQotCi0vKiBHUElPICovCi0jZGVmaW5lIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDApCi0jZGVmaW5lIENTUl9HUElPX0lOX1ZBTF9WQVVYX1BXUl9TUkMgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIENTUl9HUElPX0lOX1ZBTF9WTUFJTl9QV1JfU1JDCQlDU1JfR1BJT19JTl9CSVRfQVVYX1BPV0VSCi0KLS8qIEdJIENoaWNrZW4gQml0cyAqLwotI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlggICgweDAwODAwMDAwKQotI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUiAgKDB4MjAwMDAwMDApCi0KLS8qIENTUl9BTkFfUExMX0NGRyAqLwotI2RlZmluZSBDU1JfQU5BX1BMTF9DRkdfU0gJCSgweDAwODgwMzAwKQotCi0vKj09PSBIQlVTIChIb3N0LXNpZGUgQnVzKSA9PT0qLwotI2RlZmluZSBIQlVTX0JBU0UJKDB4NDAwKQotCi0vKgotICogUmVnaXN0ZXJzIGZvciBhY2Nlc3NpbmcgZGV2aWNlJ3MgaW50ZXJuYWwgU1JBTSBtZW1vcnkgKGUuZy4gU0NEIFNSQU0KLSAqIHN0cnVjdHVyZXMsIGVycm9yIGxvZywgZXZlbnQgbG9nLCB2ZXJpZnlpbmcgdUNvZGUgbG9hZCkuCi0gKiBGaXJzdCB3cml0ZSB0byBhZGRyZXNzIHJlZ2lzdGVyLCB0aGVuIHJlYWQgZnJvbSBvciB3cml0ZSB0byBkYXRhIHJlZ2lzdGVyCi0gKiB0byBjb21wbGV0ZSB0aGUgam9iLiAgT25jZSB0aGUgYWRkcmVzcyByZWdpc3RlciBpcyBzZXQgdXAsIGFjY2Vzc2VzIHRvCi0gKiBkYXRhIHJlZ2lzdGVycyBhdXRvLWluY3JlbWVudCB0aGUgYWRkcmVzcyBieSBvbmUgZHdvcmQuCi0gKiBCaXQgdXNhZ2UgZm9yIGFkZHJlc3MgcmVnaXN0ZXJzIChyZWFkIG9yIHdyaXRlKToKLSAqICAwLTMxOiAgbWVtb3J5IGFkZHJlc3Mgd2l0aGluIGRldmljZQotICovCi0jZGVmaW5lIEhCVVNfVEFSR19NRU1fUkFERFIgICAgIChIQlVTX0JBU0UrMHgwMGMpCi0jZGVmaW5lIEhCVVNfVEFSR19NRU1fV0FERFIgICAgIChIQlVTX0JBU0UrMHgwMTApCi0jZGVmaW5lIEhCVVNfVEFSR19NRU1fV0RBVCAgICAgIChIQlVTX0JBU0UrMHgwMTgpCi0jZGVmaW5lIEhCVVNfVEFSR19NRU1fUkRBVCAgICAgIChIQlVTX0JBU0UrMHgwMWMpCi0KLS8qCi0gKiBSZWdpc3RlcnMgZm9yIGFjY2Vzc2luZyBkZXZpY2UncyBpbnRlcm5hbCBwZXJpcGhlcmFsIHJlZ2lzdGVycwotICogKGUuZy4gU0NELCBCU00sIGV0Yy4pLiAgRmlyc3Qgd3JpdGUgdG8gYWRkcmVzcyByZWdpc3RlciwKLSAqIHRoZW4gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGRhdGEgcmVnaXN0ZXIgdG8gY29tcGxldGUgdGhlIGpvYi4KLSAqIEJpdCB1c2FnZSBmb3IgYWRkcmVzcyByZWdpc3RlcnMgKHJlYWQgb3Igd3JpdGUpOgotICogIDAtMTU6ICByZWdpc3RlciBhZGRyZXNzIChvZmZzZXQpIHdpdGhpbiBkZXZpY2UKLSAqIDI0LTI1OiAgKCMgYnl0ZXMgLSAxKSB0byByZWFkIG9yIHdyaXRlIChlLmcuIDMgZm9yIGR3b3JkKQotICovCi0jZGVmaW5lIEhCVVNfVEFSR19QUlBIX1dBRERSICAgIChIQlVTX0JBU0UrMHgwNDQpCi0jZGVmaW5lIEhCVVNfVEFSR19QUlBIX1JBRERSICAgIChIQlVTX0JBU0UrMHgwNDgpCi0jZGVmaW5lIEhCVVNfVEFSR19QUlBIX1dEQVQgICAgIChIQlVTX0JBU0UrMHgwNGMpCi0jZGVmaW5lIEhCVVNfVEFSR19QUlBIX1JEQVQgICAgIChIQlVTX0JBU0UrMHgwNTApCi0KLS8qCi0gKiBQZXItVHgtcXVldWUgd3JpdGUgcG9pbnRlciAoaW5kZXgsIHJlYWxseSEpICgzOTQ1IGFuZCA0OTY1KS4KLSAqIEluZGljYXRlcyBpbmRleCB0byBuZXh0IFRGRCB0aGF0IGRyaXZlciB3aWxsIGZpbGwgKDEgcGFzdCBsYXRlc3QgZmlsbGVkKS4KLSAqIEJpdCB1c2FnZToKLSAqICAwLTc6ICBxdWV1ZSB3cml0ZSBpbmRleAotICogMTEtODogIHF1ZXVlIHNlbGVjdG9yCi0gKi8KLSNkZWZpbmUgSEJVU19UQVJHX1dSUFRSICAgICAgICAgKEhCVVNfQkFTRSsweDA2MCkKLQogLyogU0NEICgzOTQ1IFR4IEZyYW1lIFNjaGVkdWxlcikgKi8KICNkZWZpbmUgU0NEX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAoQ1NSX0JBU0UgKyAweDJFMDApCiAKQEAgLTY2Myw3ICs0NTYsNyBAQAogLyogU2l6ZSBvZiB1Q29kZSBpbnN0cnVjdGlvbiBtZW1vcnkgaW4gYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUgKi8KICNkZWZpbmUgSVdMX01BWF9CU01fU0laRSBBTE1fUlRDX0lOU1RfU0laRQogCi0jZGVmaW5lIElXTF9NQVhfTlVNX1FVRVVFUwk4CisjZGVmaW5lIElXTDM5X01BWF9OVU1fUVVFVUVTCTgKIAogc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1pby5oCmluZGV4IDc1ZTIwZDAuLjBiOTQ3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtNTksMjggKzU5LDI4IEBACiAgKgogICovCiAKLSNkZWZpbmUgX2l3bDM5NDVfd3JpdGUzMihpd2wsIG9mcywgdmFsKSB3cml0ZWwoKHZhbCksIChpd2wpLT5od19iYXNlICsgKG9mcykpCisjZGVmaW5lIF9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpIHdyaXRlbCgodmFsKSwgKHByaXYpLT5od19iYXNlICsgKG9mcykpCiAjaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfd3JpdGUzMihjb25zdCBjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bDM5NDVfcHJpdiAqaXdsLAorc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV93cml0ZTMyKGNvbnN0IGNoYXIgKmYsIHUzMiBsLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAogCQkJCSB1MzIgb2ZzLCB1MzIgdmFsKQogewogCUlXTF9ERUJVR19JTygid3JpdGUzMigweCUwOFgsIDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCB2YWwsIGYsIGwpOwotCV9pd2wzOTQ1X3dyaXRlMzIoaXdsLCBvZnMsIHZhbCk7CisJX2l3bDM5NDVfd3JpdGUzMihwcml2LCBvZnMsIHZhbCk7CiB9Ci0jZGVmaW5lIGl3bDM5NDVfd3JpdGUzMihpd2wsIG9mcywgdmFsKSBcCi0JX19pd2wzOTQ1X3dyaXRlMzIoX19GSUxFX18sIF9fTElORV9fLCBpd2wsIG9mcywgdmFsKQorI2RlZmluZSBpd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpIFwKKwlfX2l3bDM5NDVfd3JpdGUzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIG9mcywgdmFsKQogI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV93cml0ZTMyKGl3bCwgb2ZzLCB2YWwpIF9pd2wzOTQ1X3dyaXRlMzIoaXdsLCBvZnMsIHZhbCkKKyNkZWZpbmUgaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBfaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKQogI2VuZGlmCiAKLSNkZWZpbmUgX2l3bDM5NDVfcmVhZDMyKGl3bCwgb2ZzKSByZWFkbCgoaXdsKS0+aHdfYmFzZSArIChvZnMpKQorI2RlZmluZSBfaXdsMzk0NV9yZWFkMzIocHJpdiwgb2ZzKSByZWFkbCgocHJpdiktPmh3X2Jhc2UgKyAob2ZzKSkKICNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB1MzIgX19pd2wzOTQ1X3JlYWQzMihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bDM5NDVfcHJpdiAqaXdsLCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1MzIgX19pd2wzOTQ1X3JlYWQzMihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIG9mcykKIHsKIAlJV0xfREVCVUdfSU8oInJlYWRfZGlyZWN0MzIoMHglMDhYKSAtICVzICVkXG4iLCBvZnMsIGYsIGwpOwotCXJldHVybiBfaXdsMzk0NV9yZWFkMzIoaXdsLCBvZnMpOworCXJldHVybiBfaXdsMzk0NV9yZWFkMzIocHJpdiwgb2ZzKTsKIH0KLSNkZWZpbmUgaXdsMzk0NV9yZWFkMzIoaXdsLCBvZnMpIF9faXdsMzk0NV9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBpd2wsIG9mcykKKyNkZWZpbmUgaXdsMzk0NV9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bDM5NDVfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdiwgb2ZzKQogI2Vsc2UKICNkZWZpbmUgaXdsMzk0NV9yZWFkMzIocCwgbykgX2l3bDM5NDVfcmVhZDMyKHAsIG8pCiAjZW5kaWYKQEAgLTEwNSwxOCArMTA1LDEzIEBACiAJCQkJIHUzMiBiaXRzLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCiB7CiAJaW50IHJldCA9IF9pd2wzOTQ1X3BvbGxfYml0KHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpOwotCWlmICh1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpKQotCQlJV0xfREVCVUdfSU8KLQkJICAgICgicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSB0aW1lZG91dCAtICVzICVkXG4iLAotCQkgICAgIGFkZHIsIGJpdHMsIG1hc2ssIGYsIGwpOwotCWVsc2UKLQkJSVdMX0RFQlVHX0lPCi0JCSAgICAoInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpID0gMHglMDhYIC0gJXMgJWRcbiIsCi0JCSAgICAgYWRkciwgYml0cywgbWFzaywgcmV0LCBmLCBsKTsKKwlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAorCQkgICAgICBhZGRyLCBiaXRzLCBtYXNrLAorCQkgICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpPyJ0aW1lb3V0IjoiIiwgZiwgbCk7CiAJcmV0dXJuIHJldDsKIH0KLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2JpdChpd2wsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpIFwKLQlfX2l3bDM5NDVfcG9sbF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBpd2wsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpCisjZGVmaW5lIGl3bDM5NDVfcG9sbF9iaXQocHJpdiwgYWRkciwgYml0cywgbWFzaywgdGltZW91dCkgXAorCV9faXdsMzk0NV9wb2xsX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpCiAjZWxzZQogI2RlZmluZSBpd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpCiAjZW5kaWYKQEAgLTMyMSw4ICszMTYsOCBAQAogCQkJICAgICAiLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgcmV0LCBmLCBsKTsKIAlyZXR1cm4gcmV0OwogfQotI2RlZmluZSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChpd2wsIGFkZHIsIG1hc2ssIHRpbWVvdXQpIFwKLQlfX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgaXdsLCBhZGRyLCBtYXNrLCB0aW1lb3V0KQorI2RlZmluZSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KSBcCisJX19pd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIG1hc2ssIHRpbWVvdXQpCiAjZWxzZQogI2RlZmluZSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdCBfaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwMGQwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKQEAgLTAsMCArMSw0MzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiaXdsLTM5NDUuaCIKKyNpbmNsdWRlICJpd2wtaGVscGVycy5oIgorCisjZGVmaW5lIElXTF8xTUJfUkFURSAoMTI4ICogMTAyNCkKKyNkZWZpbmUgSVdMX0xFRF9USFJFU0hPTEQgKDE2KQorI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoMTApCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUxNiBicmlnaHRuZXNzOworCXU4IG9uX3RpbWU7CisJdTggb2ZfdGltZTsKK30gYmxpbmtfdGJsW10gPQoreworCXszMDAsIDI1LCAyNX0sCisJezIwMCwgNDAsIDQwfSwKKwl7MTAwLCA1NSwgNTV9LAorCXs3MCwgNjUsIDY1fSwKKwl7NTAsIDc1LCA3NX0sCisJezIwLCA4NSwgODV9LAorCXsxNSwgOTUsIDk1IH0sCisJezEwLCAxMTAsIDExMH0sCisJezUsIDEzMCwgMTMwfSwKKwl7MCwgMTY3LCAxNjd9Cit9OworCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gMTsKK30KKworCisvKiBTZW5kIGxlZCBjb21tYW5kICovCitzdGF0aWMgaW50IGl3bF9zZW5kX2xlZF9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9sZWRfY21kICpsZWRfY21kKQoreworCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gUkVQTFlfTEVEU19DTUQsCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfbGVkX2NtZCksCisJCS5kYXRhID0gbGVkX2NtZCwKKwkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCisJCS5tZXRhLnUuY2FsbGJhY2sgPSBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2sKKwl9OworCisJcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CisKKworLyogU2V0IGxlZCBvbiBjb21tYW5kICovCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX29uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCit7CisJc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCQkuaWQgPSBsZWRfaWQsCisJCS5vbiA9IElXTF9MRURfU09MSUQsCisJCS5vZmYgPSAwLAorCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKKwl9OworCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKK30KKworLyogU2V0IGxlZCBvbiBjb21tYW5kICovCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCwKKwkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCQkuaWQgPSBsZWRfaWQsCisJCS5vbiA9IGJyaWdodG5lc3MsCisJCS5vZmYgPSBicmlnaHRuZXNzLAorCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKKwl9OworCWlmIChicmlnaHRuZXNzID09IExFRF9GVUxMKSB7CisJCWxlZF9jbWQub24gPSBJV0xfTEVEX1NPTElEOworCQlsZWRfY21kLm9mZiA9IDA7CisJfQorCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKK30KKworLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb25fcmVnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCit7CisJSVdMX0RFQlVHX0xFRCgibGVkIG9uICVkXG4iLCBsZWRfaWQpOworCXJldHVybiBpd2wzOTQ1X2xlZF9vbihwcml2LCBsZWRfaWQpOworfQorCisvKiBTZXQgbGVkIG9mZiBjb21tYW5kICovCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX29mZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQoreworCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkX2NtZCA9IHsKKwkJLmlkID0gbGVkX2lkLAorCQkub24gPSAwLAorCQkub2ZmID0gMCwKKwkJLmludGVydmFsID0gSVdMX0RFRl9MRURfSU5UUlZMCisJfTsKKwlJV0xfREVCVUdfTEVEKCJsZWQgb2ZmICVkXG4iLCBsZWRfaWQpOworCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKK30KKworLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb2ZmX3JlZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQoreworCWl3bDM5NDVfbGVkX29mZihwcml2LCBsZWRfaWQpOworCXJldHVybiAwOworfQorCisvKiBTZXQgbGVkIGJsaW5rIGNvbW1hbmQgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfbm90X3NvbGlkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQsCisJCQkgICAgICAgdTggYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgaXdsMzk0NV9sZWRfY21kIGxlZF9jbWQgPSB7CisJCS5pZCA9IGxlZF9pZCwKKwkJLm9uID0gYnJpZ2h0bmVzcywKKwkJLm9mZiA9IGJyaWdodG5lc3MsCisJCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAorCX07CisKKwlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7Cit9CisKKworLyoKKyAqIGJyaWdodG5lc3MgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvciBUeC9SeCBMRUQKKyAqLworc3RhdGljIGludCBpd2wzOTQ1X2xlZF9hc3NvY2lhdGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCit7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CisJICAgICF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm4gMDsKKworCisJLyogc3RhcnQgY291bnRpbmcgVHgvUnggYnl0ZXMgKi8KKwlpZiAoIXByaXYtPmxhc3RfYmxpbmtfdGltZSAmJiBwcml2LT5hbGxvd19ibGlua2luZykKKwkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gamlmZmllczsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGJyaWdodG5lc3MgY2FsbCBiYWNrIGZvciBhc3NvY2lhdGlvbiBhbmQgcmFkaW8KKyAqLworc3RhdGljIHZvaWQgaXdsMzk0NV9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBpd2wzOTQ1X2xlZCAqbGVkID0gY29udGFpbmVyX29mKGxlZF9jZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfbGVkLCBsZWRfZGV2KTsKKwlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gbGVkLT5wcml2OworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJyaWdodG5lc3MpIHsKKwljYXNlIExFRF9GVUxMOgorCQlpZiAobGVkLT50eXBlID09IElXTF9MRURfVFJHX0FTU09DKSB7CisJCQlwcml2LT5hbGxvd19ibGlua2luZyA9IDE7CisJCQlJV0xfREVCVUdfTEVEKCJNQUMgaXMgIGFzc29jaWF0ZWRcbiIpOworCQl9CisJCWlmIChsZWQtPmxlZF9vbikKKwkJCWxlZC0+bGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CisJCWJyZWFrOworCWNhc2UgTEVEX09GRjoKKwkJaWYgKGxlZC0+dHlwZSA9PSBJV0xfTEVEX1RSR19BU1NPQykgeworCQkJcHJpdi0+YWxsb3dfYmxpbmtpbmcgPSAwOworCQkJSVdMX0RFQlVHX0xFRCgiTUFDIGlzIGRpc2Fzc29jaWF0ZWRcbiIpOworCQl9CisJCWlmIChsZWQtPmxlZF9vZmYpCisJCQlsZWQtPmxlZF9vZmYocHJpdiwgSVdMX0xFRF9MSU5LKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKGxlZC0+bGVkX3BhdHRlcm4pCisJCQlsZWQtPmxlZF9wYXR0ZXJuKHByaXYsIElXTF9MRURfTElOSywgYnJpZ2h0bmVzcyk7CisJCWJyZWFrOworCX0KK30KKworCisKKy8qCisgKiBSZWdpc3RlciBsZWQgY2xhc3Mgd2l0aCB0aGUgc3lzdGVtCisgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bDM5NDVfbGVkICpsZWQsCisJCQkJICAgZW51bSBsZWRfdHlwZSB0eXBlLCB1OCBzZXRfbGVkLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gd2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSk7CisJaW50IHJldDsKKworCWxlZC0+bGVkX2Rldi5uYW1lID0gbmFtZTsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBpd2wzOTQ1X2xlZF9icmlnaHRuZXNzX3NldDsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihkZXZpY2UsICZsZWQtPmxlZF9kZXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUk9SKCJFcnJvcjogZmFpbGVkIHRvIHJlZ2lzdGVyIGxlZCBoYW5kbGVyLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbGVkLT5wcml2ID0gcHJpdjsKKwlsZWQtPnR5cGUgPSB0eXBlOworCWxlZC0+cmVnaXN0ZXJlZCA9IDE7CisKKwlpZiAoc2V0X2xlZCAmJiBsZWQtPmxlZF9vbikKKwkJbGVkLT5sZWRfb24ocHJpdiwgSVdMX0xFRF9MSU5LKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3QgMiBzZWMgVHgvUnggYWN0aXZpdGllcworICovCitzdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit7CisJaW50IGluZGV4OworCXU4IGJsaW5rX3JhdGU7CisKKwlpZiAocHJpdi0+cnh0eHBhY2tldHMgPCBJV0xfTEVEX1RIUkVTSE9MRCkKKwkJaW5kZXggPSAxMDsKKwllbHNlIHsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSVdMX01BWF9CTElOS19UQkw7IGluZGV4KyspIHsKKwkJCWlmIChwcml2LT5yeHR4cGFja2V0cyA+IChibGlua190YmxbaW5kZXhdLmJyaWdodG5lc3MgKgorCQkJCQkJIElXTF8xTUJfUkFURSkpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJLyogaWYgMCBmcmFtZSBpcyB0cmFuc2ZlcmVkICovCisJaWYgKChpbmRleCA9PSBJV0xfTUFYX0JMSU5LX1RCTCkgfHwgIXByaXYtPmFsbG93X2JsaW5raW5nKQorCQlibGlua19yYXRlID0gSVdMX0xFRF9TT0xJRDsKKwllbHNlCisJCWJsaW5rX3JhdGUgPSBibGlua190YmxbaW5kZXhdLm9uX3RpbWU7CisKKwlyZXR1cm4gYmxpbmtfcmF0ZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfcmZfa2lsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoreworCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBoYW5kbGVyLiBTaW5jZSBzZXR0aW5nIExlZCBjb21tYW5kIGNhbgorICogaGFwcGVuIHZlcnkgZnJlcXVlbnQgd2UgcG9zdHBvbmUgbGVkIGNvbW1hbmQgdG8gYmUgY2FsbGVkIGZyb20KKyAqIFJFUExZIGhhbmRsZXIgc28gd2Uga25vdyB1Y29kZSBpcyB1cAorICovCit2b2lkIGl3bDM5NDVfbGVkX2JhY2tncm91bmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3sKKwl1OCBibGlua19yYXRlOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IDA7CisJCXJldHVybjsKKwl9CisJaWYgKGlzX3JmX2tpbGwocHJpdikpIHsKKwkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICghcHJpdi0+YWxsb3dfYmxpbmtpbmcpIHsKKwkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gMDsKKwkJaWYgKHByaXYtPmxhc3RfYmxpbmtfcmF0ZSAhPSBJV0xfTEVEX1NPTElEKSB7CisJCQlwcml2LT5sYXN0X2JsaW5rX3JhdGUgPSBJV0xfTEVEX1NPTElEOworCQkJaXdsMzk0NV9sZWRfb24ocHJpdiwgSVdMX0xFRF9MSU5LKTsKKwkJfQorCQlyZXR1cm47CisJfQorCWlmICghcHJpdi0+bGFzdF9ibGlua190aW1lIHx8CisJICAgICF0aW1lX2FmdGVyKGppZmZpZXMsIHByaXYtPmxhc3RfYmxpbmtfdGltZSArCisJCQltc2Vjc190b19qaWZmaWVzKDEwMDApKSkKKwkJcmV0dXJuOworCisJYmxpbmtfcmF0ZSA9IGdldF9ibGlua19yYXRlKHByaXYpOworCisJLyogY2FsbCBvbmx5IGlmIGJsaW5rIHJhdGUgY2hhbmdlICovCisJaWYgKGJsaW5rX3JhdGUgIT0gcHJpdi0+bGFzdF9ibGlua19yYXRlKSB7CisJCWlmIChibGlua19yYXRlICE9IElXTF9MRURfU09MSUQpIHsKKwkJCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IGppZmZpZXMgKworCQkJCQkJbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwkJCWl3bDM5NDVfbGVkX25vdF9zb2xpZChwcml2LCBJV0xfTEVEX0xJTkssIGJsaW5rX3JhdGUpOworCQl9IGVsc2UgeworCQkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gMDsKKwkJCWl3bDM5NDVfbGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CisJCX0KKwl9CisKKwlwcml2LT5sYXN0X2JsaW5rX3JhdGUgPSBibGlua19yYXRlOworCXByaXYtPnJ4dHhwYWNrZXRzID0gMDsKK30KKworCisvKiBSZWdpc3RlciBhbGwgbGVkIGhhbmRsZXIgKi8KK2ludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoreworCWNoYXIgKnRyaWdnZXI7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgcmV0OworCisJcHJpdi0+bGFzdF9ibGlua19yYXRlID0gMDsKKwlwcml2LT5yeHR4cGFja2V0cyA9IDA7CisJcHJpdi0+bGFzdF9ibGlua190aW1lID0gMDsKKwlwcml2LT5hbGxvd19ibGlua2luZyA9IDA7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShwcml2LT5odyk7CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaXdsLSVzOnJhZGlvIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bDM5NDVfbGVkX29uX3JlZzsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vZmYgPSBpd2wzOTQ1X2xlZF9vZmZfcmVnOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubGVkX3BhdHRlcm4gPSBOVUxMOworCisJcmV0ID0gaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHByaXYsCisJCQkJICAgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10sCisJCQkJICAgSVdMX0xFRF9UUkdfUkFESU8sIDEsCisJCQkJICAgbmFtZSwgdHJpZ2dlcik7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2ZhaWw7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShwcml2LT5odyk7CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisKKwlyZXQgPSBpd2wzOTQ1X2xlZF9yZWdpc3Rlcl9sZWQocHJpdiwKKwkJCQkgICAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwKKwkJCQkgICBJV0xfTEVEX1RSR19BU1NPQywgMCwKKwkJCQkgICBuYW1lLCB0cmlnZ2VyKTsKKwkvKiBmb3IgYXNzb2MgYWx3YXlzIHR1cm4gbGVkIG9uICovCisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9vbl9yZWc7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXS5sZWRfb2ZmID0gaXdsMzk0NV9sZWRfb25fcmVnOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX3BhdHRlcm4gPSBOVUxMOworCisJaWYgKHJldCkKKwkJZ290byBleGl0X2ZhaWw7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShwcml2LT5odyk7CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaXdsLSVzOlJYIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisKKworCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LAorCQkJCSAgICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLAorCQkJCSAgIElXTF9MRURfVFJHX1JYLCAwLAorCQkJCSAgIG5hbWUsIHRyaWdnZXIpOworCisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX29mZiA9IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQ7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfcGF0dGVybiA9IGl3bDM5NDVfbGVkX3BhdHRlcm47CisKKwlpZiAocmV0KQorCQlnb3RvIGV4aXRfZmFpbDsKKworCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJpd2wtJXM6VFgiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwlyZXQgPSBpd2wzOTQ1X2xlZF9yZWdpc3Rlcl9sZWQocHJpdiwKKwkJCQkgICAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXSwKKwkJCQkgICBJV0xfTEVEX1RSR19UWCwgMCwKKwkJCQkgICBuYW1lLCB0cmlnZ2VyKTsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLmxlZF9vbiA9IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQ7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfb2ZmID0gaXdsMzk0NV9sZWRfYXNzb2NpYXRlZDsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLmxlZF9wYXR0ZXJuID0gaXdsMzk0NV9sZWRfcGF0dGVybjsKKworCWlmIChyZXQpCisJCWdvdG8gZXhpdF9mYWlsOworCisJcmV0dXJuIDA7CisKK2V4aXRfZmFpbDoKKwlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyKHByaXYpOworCXJldHVybiByZXQ7Cit9CisKKworLyogdW5yZWdpc3RlciBsZWQgY2xhc3MgKi8KK3N0YXRpYyB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2wzOTQ1X2xlZCAqbGVkLCB1OCBzZXRfbGVkKQoreworCWlmICghbGVkLT5yZWdpc3RlcmVkKQorCQlyZXR1cm47CisKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKKworCWlmIChzZXRfbGVkKQorCQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQoJmxlZC0+bGVkX2RldiwgTEVEX09GRik7CisJbGVkLT5yZWdpc3RlcmVkID0gMDsKK30KKworLyogVW5yZWdpc3RlciBhbGwgbGVkIGhhbmRsZXJzICovCit2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3sKKwlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CisJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOworCWl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKCZwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLCAwKTsKKwlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXSwgMSk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZDJmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIElXTDM5NDVfTEVEU19ICisjZGVmaW5lIElXTDM5NDVfTEVEU19ICisKK3N0cnVjdCBpd2wzOTQ1X3ByaXY7CisKKyNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisjZGVmaW5lIElXTF9MRURfU09MSUQgMTEKKyNkZWZpbmUgSVdMX0xFRF9OQU1FX0xFTiAzMQorI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgX19jb25zdGFudF9jcHVfdG9fbGUzMigxMDAwKQorCisjZGVmaW5lIElXTF9MRURfQUNUSVZJVFkgICAgICAgKDA8PDEpCisjZGVmaW5lIElXTF9MRURfTElOSyAgICAgICAgICAgKDE8PDEpCisKK2VudW0gbGVkX3R5cGUgeworCUlXTF9MRURfVFJHX1RYLAorCUlXTF9MRURfVFJHX1JYLAorCUlXTF9MRURfVFJHX0FTU09DLAorCUlXTF9MRURfVFJHX1JBRElPLAorCUlXTF9MRURfVFJHX01BWCwKK307CisKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKK3N0cnVjdCBpd2wzOTQ1X2xlZCB7CisJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9kZXY7CisKKwlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKKwlpbnQgKCpsZWRfb2ZmKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCk7CisJaW50ICgqbGVkX3BhdHRlcm4pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAorCQkJICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcyk7CisKKwllbnVtIGxlZF90eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7Cit9OworCitleHRlcm4gaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfbGVkX2JhY2tncm91bmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7fQorc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfbGVkX2JhY2tncm91bmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KKyNlbmRpZiAvKiBDT05GSUdfSVdMMzk0NV9MRURTICovCisKKyNlbmRpZiAvKiBJV0wzOTQ1X0xFRFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCmluZGV4IDgwZDMxYWUuLjg1YzIyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzcsNyArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKLSNpbmNsdWRlICIuLi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3JhdGUuaCIKKyNpbmNsdWRlICIuLi9uZXQvbWFjODAyMTEvcmF0ZS5oIgogCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKIApAQCAtMTAwLDE0ICsxMDAsNiBAQAogCXstODksIElXTF9SQVRFXzZNX0lOREVYfQogfTsKIAotc3RhdGljIHN0cnVjdCBpd2wzOTQ1X3RwdF9lbnRyeSBpd2wzOTQ1X3RwdF90YWJsZV9iW10gPSB7Ci0Jey04NiwgSVdMX1JBVEVfMTFNX0lOREVYfSwKLQl7LTg4LCBJV0xfUkFURV81TV9JTkRFWH0sCi0Jey05MCwgSVdMX1JBVEVfMk1fSU5ERVh9LAotCXstOTIsIElXTF9SQVRFXzFNX0lOREVYfQotCi19OwotCiBzdGF0aWMgc3RydWN0IGl3bDM5NDVfdHB0X2VudHJ5IGl3bDM5NDVfdHB0X3RhYmxlX2dbXSA9IHsKIAl7LTYwLCBJV0xfUkFURV81NE1fSU5ERVh9LAogCXstNjQsIElXTF9SQVRFXzQ4TV9JTkRFWH0sCkBAIC0xMjksNyArMTIxLDcgQEAKICNkZWZpbmUgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEggICAgICAgOAogI2RlZmluZSBJV0xfUkFURV9ERUNSRUFTRV9USCAgICAgICAxOTIwCiAKLXN0YXRpYyB1OCBpd2wzOTQ1X2dldF9yYXRlX2luZGV4X2J5X3Jzc2koczMyIHJzc2ksIHU4IG1vZGUpCitzdGF0aWMgdTggaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHMzMiByc3NpLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJdTMyIGluZGV4ID0gMDsKIAl1MzIgdGFibGVfc2l6ZSA9IDA7CkBAIC0xMzgsMjEgKzEzMCwxOSBAQAogCWlmICgocnNzaSA8IElXTF9NSU5fUlNTSV9WQUwpIHx8IChyc3NpID4gSVdMX01BWF9SU1NJX1ZBTCkpCiAJCXJzc2kgPSBJV0xfTUlOX1JTU0lfVkFMOwogCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUc6CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQl0cHRfdGFibGUgPSBpd2wzOTQ1X3RwdF90YWJsZV9nOwogCQl0YWJsZV9zaXplID0gQVJSQVlfU0laRShpd2wzOTQ1X3RwdF90YWJsZV9nKTsKIAkJYnJlYWs7CiAKLQljYXNlIE1PREVfSUVFRTgwMjExQToKKwljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CiAJCXRwdF90YWJsZSA9IGl3bDM5NDVfdHB0X3RhYmxlX2E7CiAJCXRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGl3bDM5NDVfdHB0X3RhYmxlX2EpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUI6Ci0JCXRwdF90YWJsZSA9IGl3bDM5NDVfdHB0X3RhYmxlX2I7Ci0JCXRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGl3bDM5NDVfdHB0X3RhYmxlX2IpOworCQlCVUcoKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNjgsOSArMTU4LDkgQEAKIHsKIAl3aW5kb3ctPmRhdGEgPSAwOwogCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID0gMDsKLQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSAtMTsKIAl3aW5kb3ctPmNvdW50ZXIgPSAwOwotCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVl9UUFQ7CiAJd2luZG93LT5zdGFtcCA9IDA7CiB9CiAKQEAgLTM0MCwxNyArMzMwLDE3IEBACiAJICogYWZ0ZXIgYXNzb2MuLiAqLwogCiAJZm9yIChpID0gSVdMX1JBVEVfQ09VTlQgLSAxOyBpID49IDA7IGktLSkgewotCQlpZiAoc3RhLT5zdXBwX3JhdGVzICYgKDEgPDwgaSkpIHsKLQkJCXN0YS0+dHhyYXRlID0gaTsKKwkJaWYgKHN0YS0+c3VwcF9yYXRlc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSAmICgxIDw8IGkpKSB7CisJCQlzdGEtPnR4cmF0ZV9pZHggPSBpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlzdGEtPmxhc3RfdHhyYXRlID0gc3RhLT50eHJhdGU7CisJc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSBzdGEtPnR4cmF0ZV9pZHg7CiAKLQkvKiBGb3IgTU9ERV9JRUVFODAyMTFBIG1vZGUgaXQgc3RhcnQgYXQgSVdMX0ZJUlNUX09GRE1fUkFURSAqLwotICAgICAgICBpZiAobG9jYWwtPmh3LmNvbmYucGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpCi0gICAgICAgICAgICAgICAgc3RhLT5sYXN0X3R4cmF0ZSArPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCS8qIEZvciA1IEdIeiBiYW5kIGl0IHN0YXJ0IGF0IElXTF9GSVJTVF9PRkRNX1JBVEUgKi8KKwlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQlzdGEtPmxhc3RfdHhyYXRlX2lkeCArPSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCiAJSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKIH0KQEAgLTQyOSwxNyArNDE5LDE5IEBACiB7CiAJaW50IG5leHRfcmF0ZSA9IGl3bDM5NDVfZ2V0X3ByZXZfaWVlZV9yYXRlKHJhdGUpOwogCi0Jc3dpdGNoIChwcml2LT5waHltb2RlKSB7Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUE6CisJc3dpdGNoIChwcml2LT5iYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgogCQlpZiAocmF0ZSA9PSBJV0xfUkFURV8xMk1fSU5ERVgpCiAJCQluZXh0X3JhdGUgPSBJV0xfUkFURV85TV9JTkRFWDsKIAkJZWxzZSBpZiAocmF0ZSA9PSBJV0xfUkFURV82TV9JTkRFWCkKIAkJCW5leHRfcmF0ZSA9IElXTF9SQVRFXzZNX0lOREVYOwogCQlicmVhazsKKy8qIFhYWCBjYW5ub3QgYmUgaW52b2tlZCBpbiBjdXJyZW50IG1hYzgwMjExIHNvIG5vdCBhIHJlZ3Jlc3Npb24KIAljYXNlIE1PREVfSUVFRTgwMjExQjoKIAkJaWYgKHJhdGUgPT0gSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFKQogCQkJbmV4dF9yYXRlID0gSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEU7CiAJCWJyZWFrOworICovCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNDY1LDIyICs0NTcsMjUgQEAKIAlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilwcml2X3JhdGU7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAogCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CiAKLQlyZXRyaWVzID0gdHhfcmVzcC0+cmV0cnlfY291bnQ7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCi0JZmlyc3RfaW5kZXggPSB0eF9yZXNwLT5jb250cm9sLnR4X3JhdGU7CisKKwlyZXRyaWVzID0gdHhfcmVzcC0+cmV0cnlfY291bnQ7CisJZmlyc3RfaW5kZXggPSB0eF9yZXNwLT5jb250cm9sLnR4X3JhdGUtPmh3X3ZhbHVlOwogCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlQpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogUmF0ZSBvdXQgb2YgYm91bmRzOiAlMHggZm9yICVkXG4iLAotCQkJICAgICAgIHR4X3Jlc3AtPmNvbnRyb2wudHhfcmF0ZSwgZmlyc3RfaW5kZXgpOworCQlJV0xfREVCVUdfUkFURSgibGVhdmU6IFJhdGUgb3V0IG9mIGJvdW5kczogJWRcbiIsIGZpcnN0X2luZGV4KTsKIAkJcmV0dXJuOwogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CiAJaWYgKCFzdGEgfHwgIXN0YS0+cmF0ZV9jdHJsX3ByaXYpIHsKLQkJaWYgKHN0YSkKLQkJCXN0YV9pbmZvX3B1dChzdGEpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNTUzLDcgKzU0OCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCXN0YV9pbmZvX3B1dChzdGEpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKIApAQCAtNTYxLDE0ICs1NTYsMTQgQEAKIH0KIAogc3RhdGljIHUxNiBpd2wzOTQ1X2dldF9hZGphY2VudF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhLAotCQkJCSB1OCBpbmRleCwgdTE2IHJhdGVfbWFzaywgaW50IHBoeW1vZGUpCisJCQkJIHU4IGluZGV4LCB1MTYgcmF0ZV9tYXNrLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJdTggaGlnaCA9IElXTF9SQVRFX0lOVkFMSUQ7CiAJdTggbG93ID0gSVdMX1JBVEVfSU5WQUxJRDsKIAogCS8qIDgwMi4xMUEgd2Fsa3MgdG8gdGhlIG5leHQgbGl0ZXJhbCBhZGphY2VudCByYXRlIGluCiAJICogdGhlIHJhdGUgdGFibGUgKi8KLQlpZiAodW5saWtlbHkocGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpKSB7CisJaWYgKHVubGlrZWx5KGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikpIHsKIAkJaW50IGk7CiAJCXUzMiBtYXNrOwogCkBAIC02MzksNyArNjM0LDggQEAKICAqCiAgKi8KIHN0YXRpYyB2b2lkIHJzX2dldF9yYXRlKHZvaWQgKnByaXZfcmF0ZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCByYXRlX3NlbGVjdGlvbiAqc2VsKQogewogCXU4IGxvdyA9IElXTF9SQVRFX0lOVkFMSUQ7CkBAIC02NDgsOSArNjQ0LDkgQEAKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CiAJc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsZV9kYXRhICp3aW5kb3cgPSBOVUxMOwotCWludCBjdXJyZW50X3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOwotCWludCBsb3dfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7Ci0JaW50IGhpZ2hfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CisJaW50IGN1cnJlbnRfdHB0ID0gSVdMX0lOVl9UUFQ7CisJaW50IGxvd190cHQgPSBJV0xfSU5WX1RQVDsKKwlpbnQgaGlnaF90cHQgPSBJV0xfSU5WX1RQVDsKIAl1MzIgZmFpbF9jb3VudDsKIAlzOCBzY2FsZV9hY3Rpb24gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02NjMsNiArNjU5LDggQEAKIAogCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nIGxvd2VzdApAQCAtNjcyLDE2ICs2NzAsMTUgQEAKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKIAkgICAgIXN0YSB8fCAhc3RhLT5yYXRlX2N0cmxfcHJpdikgewogCQlJV0xfREVCVUdfUkFURSgibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7Ci0JCXNlbC0+cmF0ZSA9IHJhdGVfbG93ZXN0KGxvY2FsLCBsb2NhbC0+b3Blcl9od19tb2RlLCBzdGEpOwotCQlpZiAoc3RhKQotCQkJc3RhX2luZm9fcHV0KHN0YSk7CisJCXNlbC0+cmF0ZSA9IHJhdGVfbG93ZXN0KGxvY2FsLCBzYmFuZCwgc3RhKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKLQlyYXRlX21hc2sgPSBzdGEtPnN1cHBfcmF0ZXM7Ci0JaW5kZXggPSBtaW4oc3RhLT5sYXN0X3R4cmF0ZSAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKKwlyYXRlX21hc2sgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOworCWluZGV4ID0gbWluKHN0YS0+bGFzdF90eHJhdGVfaWR4ICYgMHhmZmZmLCBJV0xfUkFURV9DT1VOVCAtIDEpOwogCi0JaWYgKHByaXYtPnBoeW1vZGUgPT0gKHU4KSBNT0RFX0lFRUU4MDIxMUEpCisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJhdGVfbWFzayA9IHJhdGVfbWFzayA8PCBJV0xfRklSU1RfT0ZETV9SQVRFOwogCiAJcnNfc3RhID0gKHZvaWQgKilzdGEtPnJhdGVfY3RybF9wcml2OwpAQCAtNzEzLDcgKzcxMCw3IEBACiAKIAlpZiAoKChmYWlsX2NvdW50IDw9IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgogCSAgICAgKHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyIDwgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKSkgewotCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CisJCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WX1RQVDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7CiAKIAkJSVdMX0RFQlVHX1JBVEUoIkludmFsaWQgYXZlcmFnZV90cHQgb24gcmF0ZSAlZDogIgpAQCAtNzMyLDcgKzcyOSw3IEBACiAJY3VycmVudF90cHQgPSB3aW5kb3ctPmF2ZXJhZ2VfdHB0OwogCiAJaGlnaF9sb3cgPSBpd2wzOTQ1X2dldF9hZGphY2VudF9yYXRlKHJzX3N0YSwgaW5kZXgsIHJhdGVfbWFzaywKLQkJCQkJIGxvY2FsLT5ody5jb25mLnBoeW1vZGUpOworCQkJCQkgICAgIHNiYW5kLT5iYW5kKTsKIAlsb3cgPSBoaWdoX2xvdyAmIDB4ZmY7CiAJaGlnaCA9IChoaWdoX2xvdyA+PiA4KSAmIDB4ZmY7CiAKQEAgLTc0OSwxOSArNzQ2LDE2IEBACiAJaWYgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPCBJV0xfUkFURV9ERUNSRUFTRV9USCkgfHwgIWN1cnJlbnRfdHB0KSB7CiAJCUlXTF9ERUJVR19SQVRFKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOwogCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQl9IGVsc2UgaWYgKChsb3dfdHB0ID09IElXTF9JTlZBTElEX1ZBTFVFKSAmJgotCQkgICAoaGlnaF90cHQgPT0gSVdMX0lOVkFMSURfVkFMVUUpKQorCX0gZWxzZSBpZiAoKGxvd190cHQgPT0gSVdMX0lOVl9UUFQpICYmIChoaWdoX3RwdCA9PSBJV0xfSU5WX1RQVCkpCiAJCXNjYWxlX2FjdGlvbiA9IDE7Ci0JZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCi0JCSAgIChoaWdoX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkKLQkJICAgJiYgKGxvd190cHQgPCBjdXJyZW50X3RwdCkKLQkJICAgJiYgKGhpZ2hfdHB0IDwgY3VycmVudF90cHQpKSB7CisJZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVl9UUFQpICYmIChoaWdoX3RwdCAhPSBJV0xfSU5WX1RQVCkgJiYKKwkJIChsb3dfdHB0IDwgY3VycmVudF90cHQpICYmIChoaWdoX3RwdCA8IGN1cnJlbnRfdHB0KSkgewogCQlJV0xfREVCVUdfUkFURSgiTm8gYWN0aW9uIC0tIGxvdyBbJWRdICYgaGlnaCBbJWRdIDwgIgogCQkJICAgICAgICJjdXJyZW50X3RwdCBbJWRdXG4iLAogCQkJICAgICAgIGxvd190cHQsIGhpZ2hfdHB0LCBjdXJyZW50X3RwdCk7CiAJCXNjYWxlX2FjdGlvbiA9IDA7CiAJfSBlbHNlIHsKLQkJaWYgKGhpZ2hfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CisJCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WX1RQVCkgewogCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQpCiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCWVsc2UgewpAQCAtNzY5LDcgKzc2Myw3IEBACiAJCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAkJCX0KLQkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CisJCX0gZWxzZSBpZiAobG93X3RwdCAhPSBJV0xfSU5WX1RQVCkgewogCQkJaWYgKGxvd190cHQgPiBjdXJyZW50X3RwdCkgewogCQkJCUlXTF9ERUJVR19SQVRFCiAJCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyB0cHRcbiIpOwpAQCAtODEwLDE3ICs4MDQsMTcgQEAKIAogIG91dDoKIAotCXN0YS0+bGFzdF90eHJhdGUgPSBpbmRleDsKLQlpZiAocHJpdi0+cGh5bW9kZSA9PSAodTgpIE1PREVfSUVFRTgwMjExQSkKLQkJc3RhLT50eHJhdGUgPSBzdGEtPmxhc3RfdHhyYXRlIC0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwlzdGEtPmxhc3RfdHhyYXRlX2lkeCA9IGluZGV4OworCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQlzdGEtPnR4cmF0ZV9pZHggPSBzdGEtPmxhc3RfdHhyYXRlX2lkeCAtIElXTF9GSVJTVF9PRkRNX1JBVEU7CiAJZWxzZQotCQlzdGEtPnR4cmF0ZSA9IHN0YS0+bGFzdF90eHJhdGU7CisJCXN0YS0+dHhyYXRlX2lkeCA9IHN0YS0+bGFzdF90eHJhdGVfaWR4OwogCi0Jc3RhX2luZm9fcHV0KHN0YSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlJV0xfREVCVUdfUkFURSgibGVhdmU6ICVkXG4iLCBpbmRleCk7CiAKLQlzZWwtPnJhdGUgPSAmcHJpdi0+aWVlZV9yYXRlc1tpbmRleF07CisJc2VsLT5yYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tzdGEtPnR4cmF0ZV9pZHhdOwogfQogCiBzdGF0aWMgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgcnNfb3BzID0gewpAQCAtODQ4LDEzICs4NDIsMTUgQEAKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJdTMyIG1heF90aW1lID0gMDsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhIHx8ICFzdGEtPnJhdGVfY3RybF9wcml2KSB7Ci0JCWlmIChzdGEpIHsKLQkJCXN0YV9pbmZvX3B1dChzdGEpOworCQlpZiAoc3RhKQogCQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlIC0gbm8gcHJpdmF0ZSByYXRlIGRhdGEhXG4iKTsKLQkJfSBlbHNlCisJCWVsc2UKIAkJCUlXTF9ERUJVR19SQVRFKCJsZWF2ZSAtIG5vIHN0YXRpb24hXG4iKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInN0YXRpb24gJWQgbm90IGZvdW5kXG4iLCBzdGFfaWQpOwogCX0KIApAQCAtODk1LDcgKzg5MSw3IEBACiAJCWkgPSBqOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKLQlzdGFfaW5mb19wdXQoc3RhKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIERpc3BsYXkgdGhlIGF2ZXJhZ2UgcmF0ZSBvZiBhbGwgc2FtcGxlcyB0YWtlbi4KIAkgKgpAQCAtOTMyLDExICs5MjgsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhIHx8ICFzdGEtPnJhdGVfY3RybF9wcml2KSB7Ci0JCWlmIChzdGEpCi0JCQlzdGFfaW5mb19wdXQoc3RhKTsKIAkJSVdMX0RFQlVHX1JBVEUoImxlYXZlIC0gbm8gcHJpdmF0ZSByYXRlIGRhdGEhXG4iKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk0NSw4ICs5NDIsOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAogCXJzX3N0YS0+dGdnID0gMDsKLQlzd2l0Y2ggKHByaXYtPnBoeW1vZGUpIHsKLQljYXNlIE1PREVfSUVFRTgwMjExRzoKKwlzd2l0Y2ggKHByaXYtPmJhbmQpIHsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCS8qIFRPRE86IHRoaXMgYWx3YXlzIGRvZXMgRywgbm90IGEgcmVncmVzc2lvbiAqLwogCQlpZiAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spIHsKIAkJCXJzX3N0YS0+dGdnID0gMTsKIAkJCXJzX3N0YS0+ZXhwZWN0ZWRfdHB0ID0gaXdsMzk0NV9leHBlY3RlZF90cHRfZ19wcm90OwpAQCAtOTU0LDE4ICs5NTIsMTUgQEAKIAkJCXJzX3N0YS0+ZXhwZWN0ZWRfdHB0ID0gaXdsMzk0NV9leHBlY3RlZF90cHRfZzsKIAkJYnJlYWs7CiAKLQljYXNlIE1PREVfSUVFRTgwMjExQToKKwljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CiAJCXJzX3N0YS0+ZXhwZWN0ZWRfdHB0ID0gaXdsMzk0NV9leHBlY3RlZF90cHRfYTsKIAkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlJV0xfV0FSTklORygiSW52YWxpZCBwaHltb2RlLiAgRGVmYXVsdGluZyB0byA4MDIuMTFiXG4iKTsKLQljYXNlIE1PREVfSUVFRTgwMjExQjoKLQkJcnNfc3RhLT5leHBlY3RlZF90cHQgPSBpd2wzOTQ1X2V4cGVjdGVkX3RwdF9iOworCWNhc2UgSUVFRTgwMjExX05VTV9CQU5EUzoKKwkJQlVHKCk7CiAJCWJyZWFrOwogCX0KIAotCXN0YV9pbmZvX3B1dChzdGEpOworCXJjdV9yZWFkX3VubG9jaygpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCiAJcnNzaSA9IHByaXYtPmxhc3RfcnhfcnNzaTsKQEAgLTk3NCwyMCArOTY5LDE5IEBACiAKIAlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfUkFURSwgIk5ldHdvcmsgUlNTSTogJWRcbiIsIHJzc2kpOwogCi0JcnNfc3RhLT5zdGFydF9yYXRlID0KLQkJCWl3bDM5NDVfZ2V0X3JhdGVfaW5kZXhfYnlfcnNzaShyc3NpLCBwcml2LT5waHltb2RlKTsKKwlyc19zdGEtPnN0YXJ0X3JhdGUgPSBpd2wzOTQ1X2dldF9yYXRlX2luZGV4X2J5X3Jzc2kocnNzaSwgcHJpdi0+YmFuZCk7CiAKIAlJV0xfREVCVUdfUkFURSgibGVhdmU6IHJzc2kgJWQgYXNzaWduIHJhdGUgaW5kZXg6ICIKIAkJICAgICAgICIlZCAocGxjcCAweCV4KVxuIiwgcnNzaSwgcnNfc3RhLT5zdGFydF9yYXRlLAogCQkgICAgICAgaXdsMzk0NV9yYXRlc1tyc19zdGEtPnN0YXJ0X3JhdGVdLnBsY3ApOwogfQogCi12b2lkIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoraW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmcnNfb3BzKTsKKwlyZXR1cm4gaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmcnNfb3BzKTsKIH0KIAotdm9pZCBpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQordm9pZCBpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpCiB7CiAJaWVlZTgwMjExX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCZyc19vcHMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5oCmluZGV4IGQ1ZTkyMjAuLmYwODVkMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzYsOCArMzYsOCBAQAogCXU4IG5leHRfcnM7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBycyBhbGdvICovCiAJdTggcHJldl9yc190Z2c7CQkvKiBwcmV2aW91cyByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KIAl1OCBuZXh0X3JzX3RnZzsJCS8qIG5leHQgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCi0gICAgICAgIHU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLwotICAgICAgICB1OCBwcmV2X3RhYmxlX3JzOwkvKiBwcmV2IGluIHJhdGUgdGFibGUgY21kICovCisJdTggdGFibGVfcnNfaW5kZXg7CS8qIGluZGV4IGluIHJhdGUgc2NhbGUgdGFibGUgY21kICovCisJdTggcHJldl90YWJsZV9yczsJLyogcHJldiBpbiByYXRlIHRhYmxlIGNtZCAqLwogfTsKIAogLyoKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAjZGVmaW5lIElXTF9SQVRFU19NQVNLICgoMSA8PCBJV0xfUkFURV9DT1VOVCkgLSAxKQogCi0jZGVmaW5lIElXTF9JTlZBTElEX1ZBTFVFICAgIC0xCisjZGVmaW5lIElXTF9JTlZfVFBUICAgIC0xCiAKICNkZWZpbmUgSVdMX01JTl9SU1NJX1ZBTCAgICAgICAgICAgICAgICAgLTEwMAogI2RlZmluZSBJV0xfTUFYX1JTU0lfVkFMICAgICAgICAgICAgICAgICAgICAwCkBAIC0yMDIsNyArMjAyLDcgQEAKICAqIGllZWU4MDIxMV9yZWdpc3Rlcl9odwogICoKICAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIGludCBpd2wzOTQ1X3JhdGVfY29udHJvbF9yZWdpc3Rlcih2b2lkKTsKIAogLyoqCiAgKiBpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGNhbGxiYWNrcwpAQCAtMjEwLDYgKzIxMCw2IEBACiAgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odywgYnV0IGJlZm9yZQogICogdGhlIGRyaXZlciBpcyB1bmxvYWRlZC4KICAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitleHRlcm4gdm9pZCBpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCA4ZDRkOTFkLi41OThlNGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKKyNpbmNsdWRlICJpd2wtMzk0NS1jb3JlLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCkBAIC0xODMsNiArMTg0LDE2IEBACiAKIH0KIAorc3RhdGljIGludCBpd2wzOTQ1X2h3cmF0ZV90b19wbGNwX2lkeCh1OCBwbGNwKQoreworCWludCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IElXTF9SQVRFX0NPVU5UOyBpZHgrKykKKwkJaWYgKGl3bDM5NDVfcmF0ZXNbaWR4XS5wbGNwID09IHBsY3ApCisJCQlyZXR1cm4gaWR4OworCXJldHVybiAtMTsKK30KKwogLyoqCiAgKiBpd2wzOTQ1X2dldF9hbnRlbm5hX2ZsYWdzIC0gR2V0IGFudGVubmEgZmxhZ3MgZm9yIFJYT04gY29tbWFuZAogICogQHByaXY6IGVlcHJvbSBhbmQgYW50ZW5uYSBmaWVsZHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGFudGVubmEgZmxhZ3MKQEAgLTIxNiwxNCArMjI3LDEyNiBAQAogCXJldHVybiAwOwkJLyogImRpdmVyc2l0eSIgaXMgZGVmYXVsdCBpZiBlcnJvciAqLwogfQogCisjaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKKyNkZWZpbmUgVFhfU1RBVFVTX0VOVFJZKHgpIGNhc2UgVFhfU1RBVFVTX0ZBSUxfICMjIHg6IHJldHVybiAjeAorCitzdGF0aWMgY29uc3QgY2hhciAqaXdsMzk0NV9nZXRfdHhfZmFpbF9yZWFzb24odTMyIHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cyAmIFRYX1NUQVRVU19NU0spIHsKKwljYXNlIFRYX1NUQVRVU19TVUNDRVNTOgorCQlyZXR1cm4gIlNVQ0NFU1MiOworCQlUWF9TVEFUVVNfRU5UUlkoU0hPUlRfTElNSVQpOworCQlUWF9TVEFUVVNfRU5UUlkoTE9OR19MSU1JVCk7CisJCVRYX1NUQVRVU19FTlRSWShGSUZPX1VOREVSUlVOKTsKKwkJVFhfU1RBVFVTX0VOVFJZKE1HTU5UX0FCT1JUKTsKKwkJVFhfU1RBVFVTX0VOVFJZKE5FWFRfRlJBRyk7CisJCVRYX1NUQVRVU19FTlRSWShMSUZFX0VYUElSRSk7CisJCVRYX1NUQVRVU19FTlRSWShERVNUX1BTKTsKKwkJVFhfU1RBVFVTX0VOVFJZKEFCT1JURUQpOworCQlUWF9TVEFUVVNfRU5UUlkoQlRfUkVUUlkpOworCQlUWF9TVEFUVVNfRU5UUlkoU1RBX0lOVkFMSUQpOworCQlUWF9TVEFUVVNfRU5UUlkoRlJBR19EUk9QUEVEKTsKKwkJVFhfU1RBVFVTX0VOVFJZKFRJRF9ESVNBQkxFKTsKKwkJVFhfU1RBVFVTX0VOVFJZKEZSQU1FX0ZMVVNIRUQpOworCQlUWF9TVEFUVVNfRU5UUlkoSU5TVUZGSUNJRU5UX0NGX1BPTEwpOworCQlUWF9TVEFUVVNfRU5UUlkoVFhfTE9DS0VEKTsKKwkJVFhfU1RBVFVTX0VOVFJZKE5PX0JFQUNPTl9PTl9SQURBUik7CisJfQorCisJcmV0dXJuICJVTktOT1dOIjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKml3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpCit7CisJcmV0dXJuICIiOworfQorI2VuZGlmCisKKworLyoqCisgKiBpd2wzOTQ1X3R4X3F1ZXVlX3JlY2xhaW0gLSBSZWNsYWltIFR4IHF1ZXVlIGVudHJpZXMgYWxyZWFkeSBUeCdkCisgKgorICogV2hlbiBGVyBhZHZhbmNlcyAnUicgaW5kZXgsIGFsbCBlbnRyaWVzIGJldHdlZW4gb2xkIGFuZCBuZXcgJ1InIGluZGV4CisgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gQXMgcmVzdWx0LCBzb21lIGZyZWUgc3BhY2UgZm9ybXMuIElmIHRoZXJlIGlzCisgKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCisgKi8KK3N0YXRpYyB2b2lkIGl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorCQkJCSAgICAgaW50IHR4cV9pZCwgaW50IGluZGV4KQoreworCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CisJc3RydWN0IGl3bDM5NDVfcXVldWUgKnEgPSAmdHhxLT5xOworCXN0cnVjdCBpd2wzOTQ1X3R4X2luZm8gKnR4X2luZm87CisKKwlCVUdfT04odHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKTsKKworCWZvciAoaW5kZXggPSBpd2xfcXVldWVfaW5jX3dyYXAoaW5kZXgsIHEtPm5fYmQpOyBxLT5yZWFkX3B0ciAhPSBpbmRleDsKKwkJcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CisKKwkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYlswXSwKKwkJCQkJICAgICZ0eF9pbmZvLT5zdGF0dXMpOworCQl0eF9pbmZvLT5za2JbMF0gPSBOVUxMOworCQlpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChwcml2LCB0eHEpOworCX0KKworCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgorCQkJKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgJiYKKwkJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOworfQorCisvKioKKyAqIGl3bDM5NDVfcnhfcmVwbHlfdHggLSBIYW5kbGUgVHggcmVzcG9uc2UKKyAqLworc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV90eChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorCQkJICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJdTE2IHNlcXVlbmNlID0gbGUxNl90b19jcHUocGt0LT5oZHIuc2VxdWVuY2UpOworCWludCB0eHFfaWQgPSBTRVFfVE9fUVVFVUUoc2VxdWVuY2UpOworCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7CisJc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqdHhfc3RhdHVzOworCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgKnR4X3Jlc3AgPSAodm9pZCAqKSZwa3QtPnUucmF3WzBdOworCXUzMiAgc3RhdHVzID0gbGUzMl90b19jcHUodHhfcmVzcC0+c3RhdHVzKTsKKwlpbnQgcmF0ZV9pZHg7CisKKwlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoaXdsMzk0NV94Ml9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgeworCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCisJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkXG4iLCB0eHFfaWQsCisJCQkgIGluZGV4LCB0eHEtPnEubl9iZCwgdHhxLT5xLndyaXRlX3B0ciwKKwkJCSAgdHhxLT5xLnJlYWRfcHRyKTsKKwkJcmV0dXJuOworCX0KKworCXR4X3N0YXR1cyA9ICYodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5zdGF0dXMpOworCisJdHhfc3RhdHVzLT5yZXRyeV9jb3VudCA9IHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWU7CisJLyogdHhfc3RhdHVzLT5ydHNfcmV0cnlfY291bnQgPSB0eF9yZXNwLT5mYWlsdXJlX3J0czsgKi8KKwl0eF9zdGF0dXMtPmZsYWdzID0gKChzdGF0dXMgJiBUWF9TVEFUVVNfTVNLKSA9PSBUWF9TVEFUVVNfU1VDQ0VTUykgPworCQkJCUlFRUU4MDIxMV9UWF9TVEFUVVNfQUNLIDogMDsKKworCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAorCQkJdHhxX2lkLCBpd2wzOTQ1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCisJCQl0eF9yZXNwLT5yYXRlLCB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKKworCXJhdGVfaWR4ID0gaXdsMzk0NV9od3JhdGVfdG9fcGxjcF9pZHgodHhfcmVzcC0+cmF0ZSk7CisJdHhfc3RhdHVzLT5jb250cm9sLnR4X3JhdGUgPSAmcHJpdi0+aWVlZV9yYXRlc1tyYXRlX2lkeF07CisJSVdMX0RFQlVHX1RYX1JFUExZKCJUeCBxdWV1ZSByZWNsYWltICVkXG4iLCBpbmRleCk7CisJaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOworCisJaWYgKGl3bF9jaGVja19iaXRzKHN0YXR1cywgVFhfQUJPUlRfUkVRVUlSRURfTVNLKSkKKwkJSVdMX0VSUk9SKCJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKK30KKworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEludGVsIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbgogICoKICAqICBSWCBoYW5kbGVyIGltcGxlbWVudGF0aW9ucwogICoKLSAqICBVc2VkIGJ5IGl3bC1iYXNlLmMKLSAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKQEAgLTIzNSw5ICszNTgsMTYxIEBACiAKIAltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3MsIHBrdC0+dS5yYXcsIHNpemVvZihwcml2LT5zdGF0aXN0aWNzKSk7CiAKKwlpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHByaXYpOworCiAJcHJpdi0+bGFzdF9zdGF0aXN0aWNzX3RpbWUgPSBqaWZmaWVzOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWlzYy4gaW50ZXJuYWwgc3RhdGUgYW5kIGhlbHBlciBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisKKy8qKgorICogaXdsMzk0NV9yZXBvcnRfZnJhbWUgLSBkdW1wIGZyYW1lIHRvIHN5c2xvZyBkdXJpbmcgZGVidWcgc2Vzc2lvbnMKKyAqCisgKiBZb3UgbWF5IGhhY2sgdGhpcyBmdW5jdGlvbiB0byBzaG93IGRpZmZlcmVudCBhc3BlY3RzIG9mIHJlY2VpdmVkIGZyYW1lcywKKyAqIGluY2x1ZGluZyBzZWxlY3RpdmUgZnJhbWUgZHVtcHMuCisgKiBncm91cDEwMCBwYXJhbWV0ZXIgc2VsZWN0cyB3aGV0aGVyIHRvIHNob3cgMSBvdXQgb2YgMTAwIGdvb2QgZnJhbWVzLgorICovCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKKwkJICAgICAgc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKK3sKKwl1MzIgdG9fdXM7CisJdTMyIHByaW50X3N1bW1hcnkgPSAwOworCXUzMiBwcmludF9kdW1wID0gMDsJLyogc2V0IHRvIDEgdG8gZHVtcCBhbGwgZnJhbWVzJyBjb250ZW50cyAqLworCXUzMiBodW5kcmVkID0gMDsKKwl1MzIgZGF0YWZyYW1lID0gMDsKKwl1MTYgZmM7CisJdTE2IHNlcV9jdGw7CisJdTE2IGNoYW5uZWw7CisJdTE2IHBoeV9mbGFnczsKKwl1MTYgbGVuZ3RoOworCXUxNiBzdGF0dXM7CisJdTE2IGJjbl90bXI7CisJdTMyIHRzZl9sb3c7CisJdTY0IHRzZjsKKwl1OCByc3NpOworCXU4IGFnYzsKKwl1MTYgc2lnX2F2ZzsKKwl1MTYgbm9pc2VfZGlmZjsKKwlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyAqcnhfc3RhdHMgPSBJV0xfUlhfU1RBVFMocGt0KTsKKwlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKKwlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgKnJ4X2VuZCA9IElXTF9SWF9FTkQocGt0KTsKKwl1OCAqZGF0YSA9IElXTF9SWF9EQVRBKHBrdCk7CisKKwkvKiBNQUMgaGVhZGVyICovCisJZmMgPSBsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2NvbnRyb2wpOworCXNlcV9jdGwgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNlcV9jdHJsKTsKKworCS8qIG1ldGFkYXRhICovCisJY2hhbm5lbCA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+Y2hhbm5lbCk7CisJcGh5X2ZsYWdzID0gbGUxNl90b19jcHUocnhfaGRyLT5waHlfZmxhZ3MpOworCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+bGVuKTsKKworCS8qIGVuZC1vZi1mcmFtZSBzdGF0dXMgYW5kIHRpbWVzdGFtcCAqLworCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+c3RhdHVzKTsKKwliY25fdG1yID0gbGUzMl90b19jcHUocnhfZW5kLT5iZWFjb25fdGltZXN0YW1wKTsKKwl0c2ZfbG93ID0gbGU2NF90b19jcHUocnhfZW5kLT50aW1lc3RhbXApICYgMHgwZmZmZmZmZmY7CisJdHNmID0gbGU2NF90b19jcHUocnhfZW5kLT50aW1lc3RhbXApOworCisJLyogc2lnbmFsIHN0YXRpc3RpY3MgKi8KKwlyc3NpID0gcnhfc3RhdHMtPnJzc2k7CisJYWdjID0gcnhfc3RhdHMtPmFnYzsKKwlzaWdfYXZnID0gbGUxNl90b19jcHUocnhfc3RhdHMtPnNpZ19hdmcpOworCW5vaXNlX2RpZmYgPSBsZTE2X3RvX2NwdShyeF9zdGF0cy0+bm9pc2VfZGlmZik7CisKKwl0b191cyA9ICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSwgcHJpdi0+bWFjX2FkZHIpOworCisJLyogaWYgZGF0YSBmcmFtZSBpcyB0byB1cyBhbmQgYWxsIGlzIGdvb2QsCisJICogICAob3B0aW9uYWxseSkgcHJpbnQgc3VtbWFyeSBmb3Igb25seSAxIG91dCBvZiBldmVyeSAxMDAgKi8KKwlpZiAodG9fdXMgJiYgKGZjICYgfklFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgPT0KKwkgICAgKElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkgeworCQlkYXRhZnJhbWUgPSAxOworCQlpZiAoIWdyb3VwMTAwKQorCQkJcHJpbnRfc3VtbWFyeSA9IDE7CS8qIHByaW50IGVhY2ggZnJhbWUgKi8KKwkJZWxzZSBpZiAocHJpdi0+ZnJhbWVjbnRfdG9fdXMgPCAxMDApIHsKKwkJCXByaXYtPmZyYW1lY250X3RvX3VzKys7CisJCQlwcmludF9zdW1tYXJ5ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmZyYW1lY250X3RvX3VzID0gMDsKKwkJCXByaW50X3N1bW1hcnkgPSAxOworCQkJaHVuZHJlZCA9IDE7CisJCX0KKwl9IGVsc2UgeworCQkvKiBwcmludCBzdW1tYXJ5IGZvciBhbGwgb3RoZXIgZnJhbWVzICovCisJCXByaW50X3N1bW1hcnkgPSAxOworCX0KKworCWlmIChwcmludF9zdW1tYXJ5KSB7CisJCWNoYXIgKnRpdGxlOworCQl1MzIgcmF0ZTsKKworCQlpZiAoaHVuZHJlZCkKKwkJCXRpdGxlID0gIjEwMEZyYW1lcyI7CisJCWVsc2UgaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfUkVUUlkpCisJCQl0aXRsZSA9ICJSZXRyeSI7CisJCWVsc2UgaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXNwb25zZShmYykpCisJCQl0aXRsZSA9ICJBc2NSc3AiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwb25zZShmYykpCisJCQl0aXRsZSA9ICJSYXNSc3AiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcG9uc2UoZmMpKSB7CisJCQl0aXRsZSA9ICJQcmJSc3AiOworCQkJcHJpbnRfZHVtcCA9IDE7CS8qIGR1bXAgZnJhbWUgY29udGVudHMgKi8KKwkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkgeworCQkJdGl0bGUgPSAiQmVhY29uIjsKKwkJCXByaW50X2R1bXAgPSAxOwkvKiBkdW1wIGZyYW1lIGNvbnRlbnRzICovCisJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F0aW0oZmMpKQorCQkJdGl0bGUgPSAiQVRJTSI7CisJCWVsc2UgaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKKwkJCXRpdGxlID0gIkF1dGgiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfZGVhdXRoKGZjKSkKKwkJCXRpdGxlID0gIkRlQXV0aCI7CisJCWVsc2UgaWYgKGllZWU4MDIxMV9pc19kaXNhc3NvYyhmYykpCisJCQl0aXRsZSA9ICJEaXNBc3NvYyI7CisJCWVsc2UKKwkJCXRpdGxlID0gIkZyYW1lIjsKKworCQlyYXRlID0gaXdsMzk0NV9od3JhdGVfdG9fcGxjcF9pZHgocnhfaGRyLT5yYXRlKTsKKwkJaWYgKHJhdGUgPT0gLTEpCisJCQlyYXRlID0gMDsKKwkJZWxzZQorCQkJcmF0ZSA9IGl3bDM5NDVfcmF0ZXNbcmF0ZV0uaWVlZSAvIDI7CisKKwkJLyogcHJpbnQgZnJhbWUgc3VtbWFyeS4KKwkJICogTUFDIGFkZHJlc3NlcyBzaG93IGp1c3QgdGhlIGxhc3QgYnl0ZSAoZm9yIGJyZXZpdHkpLAorCQkgKiAgICBidXQgeW91IGNhbiBoYWNrIGl0IHRvIHNob3cgbW9yZSwgaWYgeW91J2QgbGlrZSB0by4gKi8KKwkJaWYgKGRhdGFmcmFtZSkKKwkJCUlXTF9ERUJVR19SWCgiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKKwkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIGNobmw9JWQsIHJhdGU9JXUsIFxuIiwKKwkJCQkgICAgIHRpdGxlLCBmYywgaGVhZGVyLT5hZGRyMVs1XSwKKwkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgcmF0ZSk7CisJCWVsc2UgeworCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLworCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCisJCQkJICAgICAic3JjPTB4JTAyeCwgcnNzaT0ldSwgdGltPSVsdSB1c2VjLCAiCisJCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKKwkJCQkgICAgIHRpdGxlLCBmYywgaGVhZGVyLT5hZGRyMVs1XSwKKwkJCQkgICAgIGhlYWRlci0+YWRkcjNbNV0sIHJzc2ksCisJCQkJICAgICB0c2ZfbG93IC0gcHJpdi0+c2Nhbl9zdGFydF90c2YsCisJCQkJICAgICBwaHlfZmxhZ3MsIGNoYW5uZWwpOworCQl9CisJfQorCWlmIChwcmludF9kdW1wKQorCQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCisJCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0LAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCit7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2FkZF9yYWRpb3RhcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciwKQEAgLTI0Nyw5ICs1MjIsOSBAQAogCSAqIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiB0aGUgc2tiIGZyb20gdGhlIGhhcmR3YXJlICovCiAJczggc2lnbmFsID0gc3RhdHMtPnNzaTsKIAlzOCBub2lzZSA9IDA7Ci0JaW50IHJhdGUgPSBzdGF0cy0+cmF0ZTsKKwlpbnQgcmF0ZSA9IHN0YXRzLT5yYXRlX2lkeDsKIAl1NjQgdHNmID0gc3RhdHMtPm1hY3RpbWU7Ci0JX19sZTE2IHBoeV9mbGFnc19odyA9IHJ4X2hkci0+cGh5X2ZsYWdzOworCV9fbGUxNiBwaHlfZmxhZ3NfaHcgPSByeF9oZHItPnBoeV9mbGFncywgYW50ZW5uYTsKIAogCXN0cnVjdCBpd2wzOTQ1X3J0X3J4X2hkciB7CiAJCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHJ0X2hkcjsKQEAgLTMxNSwxNSArNTkwLDE0IEBACiAJCQkJCSAgSUVFRTgwMjExX0NIQU5fMkdIWiksCiAJCQkgICAgICAmaXdsMzk0NV9ydC0+cnRfY2hiaXRtYXNrKTsKIAotCXJhdGUgPSBpd2wzOTQ1X3JhdGVfaW5kZXhfZnJvbV9wbGNwKHJhdGUpOwogCWlmIChyYXRlID09IC0xKQogCQlpd2wzOTQ1X3J0LT5ydF9yYXRlID0gMDsKIAllbHNlCiAJCWl3bDM5NDVfcnQtPnJ0X3JhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVdLmllZWU7CiAKIAkvKiBhbnRlbm5hIG51bWJlciAqLwotCWl3bDM5NDVfcnQtPnJ0X2FudGVubmEgPQotCQlsZTE2X3RvX2NwdShwaHlfZmxhZ3NfaHcgJiBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLKSA+PiA0OworCWFudGVubmEgPSBwaHlfZmxhZ3NfaHcgJiBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLOworCWl3bDM5NDVfcnQtPnJ0X2FudGVubmEgPSBsZTE2X3RvX2NwdShhbnRlbm5hKSA+PiA0OwogCiAJLyogc2V0IHRoZSBwcmVhbWJsZSBmbGFnIGlmIHdlIGhhdmUgaXQgKi8KIAlpZiAocGh5X2ZsYWdzX2h3ICYgUlhfUkVTX1BIWV9GTEFHU19TSE9SVF9QUkVBTUJMRV9NU0spCkBAIC0zNjgsNiArNjQyLDEwIEBACiAJaWYgKHByaXYtPmFkZF9yYWRpb3RhcCkKIAkJaXdsMzk0NV9hZGRfcmFkaW90YXAocHJpdiwgcnhiLT5za2IsIHJ4X2hkciwgc3RhdHMpOwogCisjaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworCWlmIChpc19kYXRhKQorCQlwcml2LT5yeHR4cGFja2V0cyArPSBsZW47CisjZW5kaWYKIAlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgcnhiLT5za2IsIHN0YXRzKTsKIAlyeGItPnNrYiA9IE5VTEw7CiB9CkBAIC0zNzcsMjUgKzY1NSwyOCBAQAogc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfc3RhdHMgKnJ4X3N0YXRzID0gSVdMX1JYX1NUQVRTKHBrdCk7CiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyICpyeF9oZHIgPSBJV0xfUlhfSERSKHBrdCk7CiAJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kICpyeF9lbmQgPSBJV0xfUlhfRU5EKHBrdCk7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcjsKKwlpbnQgc25yOwogCXUxNiByeF9zdGF0c19zaWdfYXZnID0gbGUxNl90b19jcHUocnhfc3RhdHMtPnNpZ19hdmcpOwogCXUxNiByeF9zdGF0c19ub2lzZV9kaWZmID0gbGUxNl90b19jcHUocnhfc3RhdHMtPm5vaXNlX2RpZmYpOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXRzID0gewotCQkubWFjdGltZSA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKSwKLQkJLmZyZXEgPSBpZWVlODAyMTFjaGFuMm1oeihsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpKSwKLQkJLmNoYW5uZWwgPSBsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpLAotCQkucGh5bW9kZSA9IChyeF9oZHItPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfQkFORF8yNF9NU0spID8KLQkJTU9ERV9JRUVFODAyMTFHIDogTU9ERV9JRUVFODAyMTFBLAotCQkuYW50ZW5uYSA9IDAsCi0JCS5yYXRlID0gcnhfaGRyLT5yYXRlLAotCQkuZmxhZyA9IDAsCi0JfTsKIAl1OCBuZXR3b3JrX3BhY2tldDsKLQlpbnQgc25yOworCisJcnhfc3RhdHVzLmFudGVubmEgPSAwOworCXJ4X3N0YXR1cy5mbGFnID0gMDsKKwlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKTsKKwlyeF9zdGF0dXMuZnJlcSA9CisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpKTsKKwlyeF9zdGF0dXMuYmFuZCA9IChyeF9oZHItPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfQkFORF8yNF9NU0spID8KKwkJCQlJRUVFODAyMTFfQkFORF8yR0haIDogSUVFRTgwMjExX0JBTkRfNUdIWjsKKworCXJ4X3N0YXR1cy5yYXRlX2lkeCA9IGl3bDM5NDVfaHdyYXRlX3RvX3BsY3BfaWR4KHJ4X2hkci0+cmF0ZSk7CisJaWYgKHJ4X3N0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXJ4X3N0YXR1cy5yYXRlX2lkeCAtPSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCiAJaWYgKCh1bmxpa2VseShyeF9zdGF0cy0+cGh5X2NvdW50ID4gMjApKSkgewogCQlJV0xfREVCVUdfRFJPUApAQCAtNDExLDEyICs2OTIsMTIgQEAKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKSB7Ci0JCWl3bDM5NDVfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIDEsIHJ4YiwgJnN0YXRzKTsKKwkJaXdsMzk0NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMSwgcnhiLCAmcnhfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIENvbnZlcnQgMzk0NSdzIHJzc2kgaW5kaWNhdG9yIHRvIGRCbSAqLwotCXN0YXRzLnNzaSA9IHJ4X3N0YXRzLT5yc3NpIC0gSVdMX1JTU0lfT0ZGU0VUOworCXJ4X3N0YXR1cy5zc2kgPSByeF9zdGF0cy0+cnNzaSAtIElXTF9SU1NJX09GRlNFVDsKIAogCS8qIFNldCBkZWZhdWx0IG5vaXNlIHZhbHVlIHRvIC0xMjcgKi8KIAlpZiAocHJpdi0+bGFzdF9yeF9ub2lzZSA9PSAwKQpAQCAtNDMyLDUxICs3MTMsNDcgQEAKIAkgKiAgIHNpZ25hbC10by1ub2lzZSByYXRpbyAoU05SKSBpcyAoc2lnX2F2ZyAvIG5vaXNlX2RpZmYpLgogCSAqIENvbnZlcnQgbGluZWFyIFNOUiB0byBkQiBTTlIsIHRoZW4gc3VidHJhY3QgdGhhdCBmcm9tIHJzc2kgZEJtCiAJICogICB0byBvYnRhaW4gbm9pc2UgbGV2ZWwgaW4gZEJtLgotCSAqIENhbGN1bGF0ZSBzdGF0cy5zaWduYWwgKHF1YWxpdHkgaW5kaWNhdG9yIGluICUpIGJhc2VkIG9uIFNOUi4gKi8KKwkgKiBDYWxjdWxhdGUgcnhfc3RhdHVzLnNpZ25hbCAocXVhbGl0eSBpbmRpY2F0b3IgaW4gJSkgYmFzZWQgb24gU05SLiAqLwogCWlmIChyeF9zdGF0c19ub2lzZV9kaWZmKSB7CiAJCXNuciA9IHJ4X3N0YXRzX3NpZ19hdmcgLyByeF9zdGF0c19ub2lzZV9kaWZmOwotCQlzdGF0cy5ub2lzZSA9IHN0YXRzLnNzaSAtIGl3bDM5NDVfY2FsY19kYl9mcm9tX3JhdGlvKHNucik7Ci0JCXN0YXRzLnNpZ25hbCA9IGl3bDM5NDVfY2FsY19zaWdfcXVhbChzdGF0cy5zc2ksIHN0YXRzLm5vaXNlKTsKKwkJcnhfc3RhdHVzLm5vaXNlID0gcnhfc3RhdHVzLnNzaSAtCisJCQkJCWl3bDM5NDVfY2FsY19kYl9mcm9tX3JhdGlvKHNucik7CisJCXJ4X3N0YXR1cy5zaWduYWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNzaSwKKwkJCQkJCQkgcnhfc3RhdHVzLm5vaXNlKTsKIAogCS8qIElmIG5vaXNlIGluZm8gbm90IGF2YWlsYWJsZSwgY2FsY3VsYXRlIHNpZ25hbCBxdWFsaXR5IGluZGljYXRvciAoJSkKIAkgKiAgIHVzaW5nIGp1c3QgdGhlIGRCbSBzaWduYWwgbGV2ZWwuICovCiAJfSBlbHNlIHsKLQkJc3RhdHMubm9pc2UgPSBwcml2LT5sYXN0X3J4X25vaXNlOwotCQlzdGF0cy5zaWduYWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwoc3RhdHMuc3NpLCAwKTsKKwkJcnhfc3RhdHVzLm5vaXNlID0gcHJpdi0+bGFzdF9yeF9ub2lzZTsKKwkJcnhfc3RhdHVzLnNpZ25hbCA9IGl3bDM5NDVfY2FsY19zaWdfcXVhbChyeF9zdGF0dXMuc3NpLCAwKTsKIAl9CiAKIAogCUlXTF9ERUJVR19TVEFUUygiUnNzaSAlZCBub2lzZSAlZCBxdWFsICVkIHNpZ19hdmcgJWQgbm9pc2VfZGlmZiAlZFxuIiwKLQkJCXN0YXRzLnNzaSwgc3RhdHMubm9pc2UsIHN0YXRzLnNpZ25hbCwKKwkJCXJ4X3N0YXR1cy5zc2ksIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnNpZ25hbCwKIAkJCXJ4X3N0YXRzX3NpZ19hdmcsIHJ4X3N0YXRzX25vaXNlX2RpZmYpOwogCi0Jc3RhdHMuZnJlcSA9IGllZWU4MDIxMWNoYW4ybWh6KHN0YXRzLmNoYW5uZWwpOwotCi0JLyogY2FuIGJlIGNvdmVyZWQgYnkgaXdsMzk0NV9yZXBvcnRfZnJhbWUoKSBpbiBtb3N0IGNhc2VzICovCi0vKiAgICAgIElXTF9ERUJVR19SWCgiUlggc3RhdHVzOiAweCUwOFhcbiIsIHJ4X2VuZC0+c3RhdHVzKTsgKi8KLQogCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7CiAKIAluZXR3b3JrX3BhY2tldCA9IGl3bDM5NDVfaXNfbmV0d29ya19wYWNrZXQocHJpdiwgaGVhZGVyKTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiBJV0xfRExfU1RBVFMgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlJV0xfREVCVUdfU1RBVFMKLQkJICAgICgiWyVjXSAlZCBSU1NJOiAlZCBTaWduYWw6ICV1LCBOb2lzZTogJXUsIFJhdGU6ICV1XG4iLAotCQkgICAgIG5ldHdvcmtfcGFja2V0ID8gJyonIDogJyAnLAotCQkgICAgIHN0YXRzLmNoYW5uZWwsIHN0YXRzLnNzaSwgc3RhdHMuc3NpLAotCQkgICAgIHN0YXRzLnNzaSwgc3RhdHMucmF0ZSk7CisJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJbJWNdICVkIFJTU0k6JWQgU2lnbmFsOiV1LCBOb2lzZToldSwgUmF0ZToldVxuIiwKKwkJCSAgICAgIG5ldHdvcmtfcGFja2V0ID8gJyonIDogJyAnLAorCQkJICAgICAgbGUxNl90b19jcHUocnhfaGRyLT5jaGFubmVsKSwKKwkJCSAgICAgIHJ4X3N0YXR1cy5zc2ksIHJ4X3N0YXR1cy5zc2ksCisJCQkgICAgICByeF9zdGF0dXMuc3NpLCByeF9zdGF0dXMucmF0ZV9pZHgpOwogCisjaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKIAlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfUlgpKQogCQkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KLQkJaXdsMzk0NV9yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIDEpOworCQlpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIDEpOwogI2VuZGlmCiAKIAlpZiAobmV0d29ya19wYWNrZXQpIHsKIAkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7CiAJCXByaXYtPmxhc3RfdHNmID0gbGU2NF90b19jcHUocnhfZW5kLT50aW1lc3RhbXApOwotCQlwcml2LT5sYXN0X3J4X3Jzc2kgPSBzdGF0cy5zc2k7Ci0JCXByaXYtPmxhc3Rfcnhfbm9pc2UgPSBzdGF0cy5ub2lzZTsKKwkJcHJpdi0+bGFzdF9yeF9yc3NpID0gcnhfc3RhdHVzLnNzaTsKKwkJcHJpdi0+bGFzdF9yeF9ub2lzZSA9IHJ4X3N0YXR1cy5ub2lzZTsKIAl9CiAKIAlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgewpAQCAtNTYzLDcgKzg0MCw3IEBACiAJCQl9CiAJCX0KIAotCQlpd2wzOTQ1X2hhbmRsZV9kYXRhX3BhY2tldChwcml2LCAwLCByeGIsICZzdGF0cyk7CisJCWl3bDM5NDVfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIDAsIHJ4YiwgJnJ4X3N0YXR1cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgpAQCAtNTgwLDcgKzg1Nyw3IEBACiAJCQkJICAgICAgIHByaW50X21hYyhtYWMyLCBoZWFkZXItPmFkZHIyKSwKIAkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzMsIGhlYWRlci0+YWRkcjMpKTsKIAkJZWxzZQotCQkJaXdsMzk0NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMSwgcnhiLCAmc3RhdHMpOworCQkJaXdsMzk0NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMSwgcnhiLCAmcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQogCX0KQEAgLTY4OSw3ICs5NjYsNyBAQAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTE2IHJhdGVfaW5kZXggPSBtaW4oY3RybC0+dHhfcmF0ZSAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKKwl1MTYgcmF0ZV9pbmRleCA9IG1pbihjdHJsLT50eF9yYXRlLT5od192YWx1ZSAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKIAl1MTYgcmF0ZV9tYXNrOwogCWludCByYXRlOwogCXU4IHJ0c19yZXRyeV9saW1pdDsKQEAgLTcwOSw3ICs5ODYsNyBAQAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uY3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyA9IHJhdGU7CiAKIAlpZiAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgJiYKLQkgICAgKHN0YV9pZCAhPSBJV0wzOTQ1X0JST0FEQ0FTVF9JRCkgJiYKKwkgICAgKHN0YV9pZCAhPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZCkgJiYKIAkJKHN0YV9pZCAhPSBJV0xfTVVMVElDQVNUX0lEKSkKIAkJcHJpdi0+c3RhdGlvbnNbSVdMX1NUQV9JRF0uY3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyA9IHJhdGU7CiAKQEAgLTk5NiwxOSArMTI3MywxOSBAQAogCWlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfUlRQKQogCQlJV0xfREVCVUdfSU5GTygiUlRQIHR5cGUgXG4iKTsKIAllbHNlIGlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfQkFTSUNfU0tVKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJBTE0tTUIgdHlwZVxuIik7CisJCUlXTF9ERUJVR19JTkZPKCIzOTQ1IFJBRElPLU1CIHR5cGVcbiIpOwogCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0FMTUFHT1JfTUIpOworCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTUIpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJBTE0tTU0gdHlwZVxuIik7CisJCUlXTF9ERUJVR19JTkZPKCIzOTQ1IFJBRElPLU1NIHR5cGVcbiIpOwogCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0FMTUFHT1JfTU0pOworCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOwogCX0KIAogCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBwcml2LT5lZXByb20uc2t1X2NhcCkgewogCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKIAkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9TS1VfTVJDKTsKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9TS1VfTVJDKTsKIAl9IGVsc2UKIAkJSVdMX0RFQlVHX0lORk8oIlNLVSBPUCBtb2RlIGlzIGJhc2ljXG4iKTsKIApAQCAtMTAxNiwyNCArMTI5MywyNCBAQAogCQlJV0xfREVCVUdfSU5GTygiMzk0NUFCRyByZXZpc2lvbiBpcyAweCVYXG4iLAogCQkJICAgICAgIHByaXYtPmVlcHJvbS5ib2FyZF9yZXZpc2lvbik7CiAJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfQk9BUkRfVFlQRSk7CisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfQk9BUkRfVFlQRSk7CiAJfSBlbHNlIHsKIAkJSVdMX0RFQlVHX0lORk8oIjM5NDVBQkcgcmV2aXNpb24gaXMgMHglWFxuIiwKIAkJCSAgICAgICBwcml2LT5lZXByb20uYm9hcmRfcmV2aXNpb24pOwogCQlpd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICAgIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKKwkJCSAgICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOwogCX0KIAogCWlmIChwcml2LT5lZXByb20uYWxtZ29yX21fdmVyc2lvbiA8PSAxKSB7CiAJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0EpOwogCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBNIHR5cGUgQSB2ZXJzaW9uIGlzIDB4JVhcbiIsCiAJCQkgICAgICAgcHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24pOwogCX0gZWxzZSB7CiAJCUlXTF9ERUJVR19JTkZPKCJDYXJkIE0gdHlwZSBCIHZlcnNpb24gaXMgMHglWFxuIiwKIAkJCSAgICAgICBwcml2LT5lZXByb20uYWxtZ29yX21fdmVyc2lvbik7CiAJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9CKTsKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0IpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTE1NTIsMTQgKzE4MjksMTQgQEAKIAkJLmNoYW5uZWwgPSBwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsLAogCX07CiAKLQl0eHBvd2VyLmJhbmQgPSAocHJpdi0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpID8gMCA6IDE7CisJdHhwb3dlci5iYW5kID0gKHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPyAwIDogMTsKIAljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCi0JCQkJICAgICAgIHByaXYtPnBoeW1vZGUsCisJCQkJICAgICAgIHByaXYtPmJhbmQsCiAJCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKIAlpZiAoIWNoX2luZm8pIHsKIAkJSVdMX0VSUk9SCiAJCSAgICAoIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBpbmZvIGZvciBjaGFubmVsICVkIFslZF1cbiIsCi0JCSAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCksIHByaXYtPnBoeW1vZGUpOworCQkgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpLCBwcml2LT5iYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMjQxLDggKzI1MTgsOCBAQAogCQl0YWJsZVtpbmRleF0ubmV4dF9yYXRlX2luZGV4ID0gaXdsMzk0NV9yYXRlc1twcmV2X2luZGV4XS50YWJsZV9yc19pbmRleDsKIAl9CiAKLQlzd2l0Y2ggKHByaXYtPnBoeW1vZGUpIHsKLQljYXNlIE1PREVfSUVFRTgwMjExQToKKwlzd2l0Y2ggKHByaXYtPmJhbmQpIHsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CiAJCUlXTF9ERUJVR19SQVRFKCJTZWxlY3QgQSBtb2RlIHJhdGUgc2NhbGVcbiIpOwogCQkvKiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBDQ0sgcmF0ZXMgaXMgdXNlZCwKIAkJICogaGF2ZSBpdCBmYWxsIGJhY2sgdG8gdGhlIDZNIE9GRE0gcmF0ZSAqLwpAQCAtMjI1Nyw4ICsyNTM0LDggQEAKIAkJICAgIGl3bDM5NDVfcmF0ZXNbSVdMX0ZJUlNUX09GRE1fUkFURV0udGFibGVfcnNfaW5kZXg7CiAJCWJyZWFrOwogCi0JY2FzZSBNT0RFX0lFRUU4MDIxMUI6Ci0JCUlXTF9ERUJVR19SQVRFKCJTZWxlY3QgQiBtb2RlIHJhdGUgc2NhbGVcbiIpOworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJSVdMX0RFQlVHX1JBVEUoIlNlbGVjdCBCL0cgbW9kZSByYXRlIHNjYWxlXG4iKTsKIAkJLyogSWYgYW4gT0ZETSByYXRlIGlzIHVzZWQsIGhhdmUgaXQgZmFsbCBiYWNrIHRvIHRoZQogCQkgKiAxTSBDQ0sgcmF0ZXMgKi8KIAkJZm9yIChpID0gSVdMX1JBVEVfNk1fSU5ERVhfVEFCTEU7IGkgPD0gSVdMX1JBVEVfNTRNX0lOREVYX1RBQkxFOyBpKyspCkBAIC0yMjY5LDcgKzI1NDYsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19SQVRFKCJTZWxlY3QgRyBtb2RlIHJhdGUgc2NhbGVcbiIpOworCQlXQVJOX09OKDEpOwogCQlicmVhazsKIAl9CiAKQEAgLTIzMDMsNyArMjU4MCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXByaXYtPmh3X3NldHRpbmcuYWNfcXVldWVfY291bnQgPSBBQ19OVU07CiAJcHJpdi0+aHdfc2V0dGluZy5yeF9idWZfc2l6ZSA9IElXTF9SWF9CVUZfU0laRTsKIAlwcml2LT5od19zZXR0aW5nLm1heF9wa3Rfc2l6ZSA9IDIzNDI7CiAJcHJpdi0+aHdfc2V0dGluZy50eF9jbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCk7CkBAIC0yMzExLDYgKzI1ODcsOCBAQAogCXByaXYtPmh3X3NldHRpbmcubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKIAlwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9ucyA9IElXTDM5NDVfU1RBVElPTl9DT1VOVDsKIAlwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZCA9IElXTDM5NDVfQlJPQURDQVNUX0lEOworCisJcHJpdi0+aHdfc2V0dGluZy50eF9hbnRfbnVtID0gMjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMyMyw3ICsyNjAxLDcgQEAKIAl0eF9iZWFjb25fY21kID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgKikmZnJhbWUtPnU7CiAJbWVtc2V0KHR4X2JlYWNvbl9jbWQsIDAsIHNpemVvZigqdHhfYmVhY29uX2NtZCkpOwogCi0JdHhfYmVhY29uX2NtZC0+dHguc3RhX2lkID0gSVdMMzk0NV9CUk9BRENBU1RfSUQ7CisJdHhfYmVhY29uX2NtZC0+dHguc3RhX2lkID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CiAJdHhfYmVhY29uX2NtZC0+dHguc3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CiAKIAlmcmFtZV9zaXplID0gaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShwcml2LApAQCAtMjM1MCw2ICsyNjI4LDcgQEAKIAogdm9pZCBpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKIHsKKwlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9UWF0gPSBpd2wzOTQ1X3J4X3JlcGx5X3R4OwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZXzM5NDVfUlhdID0gaXdsMzk0NV9yeF9yZXBseV9yeDsKIH0KIApAQCAtMjM2NCw5ICsyNjQzLDI1IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+dGhlcm1hbF9wZXJpb2RpYyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaXdsXzM5NDVfY2ZnIGl3bDM5NDVfYmdfY2ZnID0geworCS5uYW1lID0gIjM5NDVCRyIsCisJLmZ3X25hbWUgPSAiaXdsd2lmaS0zOTQ1IiBJV0wzOTQ1X1VDT0RFX0FQSSAiLnVjb2RlIiwKKwkuc2t1ID0gSVdMX1NLVV9HLAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfMzk0NV9jZmcgaXdsMzk0NV9hYmdfY2ZnID0geworCS5uYW1lID0gIjM5NDVBQkciLAorCS5md19uYW1lID0gIml3bHdpZmktMzk0NSIgSVdMMzk0NV9VQ09ERV9BUEkgIi51Y29kZSIsCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCit9OworCiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW10gPSB7Ci0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIyKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjI3KX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIyMiwgMHgxMDA1LCBpd2wzOTQ1X2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDQyMjIsIDB4MTAzNCwgaXdsMzk0NV9iZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjIyLCAweDEwNDQsIGl3bDM5NDVfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIyNywgMHgxMDE0LCBpd2wzOTQ1X2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDQyMjIsIFBDSV9BTllfSUQsIGl3bDM5NDVfYWJnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDQyMjcsIFBDSV9BTllfSUQsIGl3bDM5NDVfYWJnX2NmZyl9LAogCXswfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCmluZGV4IDFkYTE0ZjkuLjQ1YzFjNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDAsOSArNDAsMTcgQEAKIGV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW107CiAKICNkZWZpbmUgRFJWX05BTUUJIml3bDM5NDUiCi0jaW5jbHVkZSAiaXdsLTM5NDUtaHcuaCIKKyNpbmNsdWRlICJpd2wtY3NyLmgiCiAjaW5jbHVkZSAiaXdsLXBycGguaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1ody5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LWRlYnVnLmgiCisjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCisKKy8qIENoYW5nZSBmaXJtd2FyZSBmaWxlIG5hbWUsIHVzaW5nICItIiBhbmQgaW5jcmVtZW50aW5nIG51bWJlciwKKyAqICAgKm9ubHkqIHdoZW4gdUNvZGUgaW50ZXJmYWNlIG9yIGFyY2hpdGVjdHVyZSBjaGFuZ2VzIHNvIHRoYXQgaXQKKyAqICAgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIGRyaXZlcnMuCisgKiBUaGlzIG51bWJlciB3aWxsIGFsc28gYXBwZWFyIGluIDw8IDggcG9zaXRpb24gb2YgMXN0IGR3b3JkIG9mIHVDb2RlIGZpbGUgKi8KKyNkZWZpbmUgSVdMMzk0NV9VQ09ERV9BUEkgIi0xIgogCiAvKiBEZWZhdWx0IG5vaXNlIGxldmVsIHRvIHJlcG9ydCB3aGVuIG5vaXNlIG1lYXN1cmVtZW50IGlzIG5vdCBhdmFpbGFibGUuCiAgKiAgIFRoaXMgbWF5IGJlIGJlY2F1c2Ugd2UncmU6CkBAIC0xMDksNiArMTE3LDkgQEAKIAkJCQkqIHNwYWNlIGxlc3MgdGhhbiB0aGlzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAoraW50IGl3bDM5NDVfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcXVldWUgKnEpOworaW50IGl3bDM5NDVfeDJfcXVldWVfdXNlZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwgaW50IGkpOworCiAjZGVmaW5lIE1BWF9OVU1fT0ZfVEJTICAgICAgICAgICgyMCkKIAogLyogT25lIGZvciBlYWNoIFRGRCAqLwpAQCAtMTk1LDcgKzIwNiw3IEBACiAKIAl1OCBncm91cF9pbmRleDsJICAvKiAwLTQsIG1hcHMgY2hhbm5lbCB0byBncm91cDEvMi8zLzQvNSAqLwogCXU4IGJhbmRfaW5kZXg7CSAgLyogMC00LCBtYXBzIGNoYW5uZWwgdG8gYmFuZDEvMi8zLzQvNSAqLwotCXU4IHBoeW1vZGU7CSAgLyogTU9ERV9JRUVFODAyMTF7QSxCLEd9ICovCisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCiAJLyogUmFkaW8vRFNQIGdhaW4gc2V0dGluZ3MgZm9yIGVhY2ggIm5vcm1hbCIgZGF0YSBUeCByYXRlLgogCSAqIFRoZXNlIGluY2x1ZGUsIGluIGFkZGl0aW9uIHRvIFJGIGFuZCBEU1AgZ2FpbiwgYSBmZXcgZmllbGRzIGZvcgpAQCAtMjY5LDggKzI4MCw4IEBACiAKICNkZWZpbmUgU0VRX1RPX1FVRVVFKHgpICAoKHggPj4gOCkgJiAweGJmKQogI2RlZmluZSBRVUVVRV9UT19TRVEoeCkgICgoeCAmIDB4YmYpIDw8IDgpCi0jZGVmaW5lIFNFUV9UT19JTkRFWCh4KSAoeCAmIDB4ZmYpCi0jZGVmaW5lIElOREVYX1RPX1NFUSh4KSAoeCAmIDB4ZmYpCisjZGVmaW5lIFNFUV9UT19JTkRFWCh4KSAoKHU4KSh4ICYgMHhmZikpCisjZGVmaW5lIElOREVYX1RPX1NFUSh4KSAoKHU4KSh4ICYgMHhmZikpCiAjZGVmaW5lIFNFUV9IVUdFX0ZSQU1FICAoMHg0MDAwKQogI2RlZmluZSBTRVFfUlhfRlJBTUUgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCiAjZGVmaW5lIFNFUV9UT19TTihzZXEpICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCkBAIC0zOTAsMjMgKzQwMSwyNCBAQAogI2RlZmluZSBNSU5fQl9DSEFOTkVMUyAgMQogCiAjZGVmaW5lIFNUQVRVU19IQ01EX0FDVElWRQkwCS8qIGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSBTVEFUVVNfSU5UX0VOQUJMRUQJMQotI2RlZmluZSBTVEFUVVNfUkZfS0lMTF9IVwkyCi0jZGVmaW5lIFNUQVRVU19SRl9LSUxMX1NXCTMKLSNkZWZpbmUgU1RBVFVTX0lOSVQJCTQKLSNkZWZpbmUgU1RBVFVTX0FMSVZFCQk1Ci0jZGVmaW5lIFNUQVRVU19SRUFEWQkJNgotI2RlZmluZSBTVEFUVVNfVEVNUEVSQVRVUkUJNwotI2RlZmluZSBTVEFUVVNfR0VPX0NPTkZJR1VSRUQJOAotI2RlZmluZSBTVEFUVVNfRVhJVF9QRU5ESU5HCTkKLSNkZWZpbmUgU1RBVFVTX0lOX1NVU1BFTkQJMTAKLSNkZWZpbmUgU1RBVFVTX1NUQVRJU1RJQ1MJMTEKLSNkZWZpbmUgU1RBVFVTX1NDQU5OSU5HCQkxMgotI2RlZmluZSBTVEFUVVNfU0NBTl9BQk9SVElORwkxMwotI2RlZmluZSBTVEFUVVNfU0NBTl9IVwkJMTQKLSNkZWZpbmUgU1RBVFVTX1BPV0VSX1BNSQkxNQotI2RlZmluZSBTVEFUVVNfRldfRVJST1IJCTE2Ci0jZGVmaW5lIFNUQVRVU19DT05GX1BFTkRJTkcJMTcKKyNkZWZpbmUgU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUJMQkvKiBzeW5jIGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBTVEFUVVNfSU5UX0VOQUJMRUQJMgorI2RlZmluZSBTVEFUVVNfUkZfS0lMTF9IVwkzCisjZGVmaW5lIFNUQVRVU19SRl9LSUxMX1NXCTQKKyNkZWZpbmUgU1RBVFVTX0lOSVQJCTUKKyNkZWZpbmUgU1RBVFVTX0FMSVZFCQk2CisjZGVmaW5lIFNUQVRVU19SRUFEWQkJNworI2RlZmluZSBTVEFUVVNfVEVNUEVSQVRVUkUJOAorI2RlZmluZSBTVEFUVVNfR0VPX0NPTkZJR1VSRUQJOQorI2RlZmluZSBTVEFUVVNfRVhJVF9QRU5ESU5HCTEwCisjZGVmaW5lIFNUQVRVU19JTl9TVVNQRU5ECTExCisjZGVmaW5lIFNUQVRVU19TVEFUSVNUSUNTCTEyCisjZGVmaW5lIFNUQVRVU19TQ0FOTklORwkJMTMKKyNkZWZpbmUgU1RBVFVTX1NDQU5fQUJPUlRJTkcJMTQKKyNkZWZpbmUgU1RBVFVTX1NDQU5fSFcJCTE1CisjZGVmaW5lIFNUQVRVU19QT1dFUl9QTUkJMTYKKyNkZWZpbmUgU1RBVFVTX0ZXX0VSUk9SCQkxNworI2RlZmluZSBTVEFUVVNfQ09ORl9QRU5ESU5HCTE4CiAKICNkZWZpbmUgTUFYX1RJRF9DT1VOVCAgICAgICAgOQogCkBAIC00MzEsOCArNDQzLDYgQEAKIAl9OwogfTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1FPUwotCiB1bmlvbiBpd2wzOTQ1X3Fvc19jYXBhYml0eSB7CiAJc3RydWN0IHsKIAkJdTggZWRjYV9jb3VudDo0OwkvKiBiaXQgMC0zICovCkBAIC00NjAsNyArNDcwLDYgQEAKIAl1bmlvbiBpd2wzOTQ1X3Fvc19jYXBhYml0eSBxb3NfY2FwOwogCXN0cnVjdCBpd2wzOTQ1X3Fvc3BhcmFtX2NtZCBkZWZfcW9zX3Bhcm07CiB9OwotI2VuZGlmIC8qQ09ORklHX0lXTDM5NDVfUU9TICovCiAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19XQUtFICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19TTEVFUCAgICAgICAgICAgIDEKQEAgLTUxMSw4ICs1MjAsOCBAQAogLyoqCiAgKiBzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbwogICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCi0gKiBAYWNfcXVldWVfY291bnQ6ICMgVHggcXVldWVzIGZvciBFRENBIEFjY2VzcyBDYXRlZ29yaWVzIChBQykKICAqIEB0eF9jbWRfbGVuOiBTaXplIG9mIFR4IGNvbW1hbmQgKGJ1dCBub3QgaW5jbHVkaW5nIGZyYW1lIGl0c2VsZikKKyAqIEB0eF9hbnRfbnVtOiBOdW1iZXIgb2YgVFggYW50ZW5uYXMKICAqIEBtYXhfcnhxX3NpemU6IE1heCAjIFJ4IGZyYW1lcyBpbiBSeCBxdWV1ZSAobXVzdCBiZSBwb3dlci1vZi0yKQogICogQHJ4X2J1Zl9zaXplOgogICogQG1heF9wa3Rfc2l6ZToKQEAgLTUyNCw4ICs1MzMsOCBAQAogICovCiBzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbyB7CiAJdTE2IG1heF90eHFfbnVtOwotCXUxNiBhY19xdWV1ZV9jb3VudDsKIAl1MTYgdHhfY21kX2xlbjsKKwl1MTYgdHhfYW50X251bTsKIAl1MTYgbWF4X3J4cV9zaXplOwogCXUzMiByeF9idWZfc2l6ZTsKIAl1MzIgbWF4X3BrdF9zaXplOwpAQCAtNTYxLDE2ICs1NzAsNiBAQAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKIGV4dGVybiBpbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yZXBvcnRfZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0LAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLAotCQkJCSAgICBpbnQgZ3JvdXAxMDApIHt9Ci0jZW5kaWYKIGV4dGVybiB2b2lkIGl3bDM5NDVfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3Ioc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKIAkJCQkJICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiLAogCQkJCQkgICB2b2lkICpkYXRhLCBzaG9ydCBsZW4sCkBAIC02ODgsMjUgKzY4NywyOCBAQAogCiAjZW5kaWYKIAorI2RlZmluZSBJV0xfTUFYX05VTV9RVUVVRVMgSVdMMzlfTUFYX05VTV9RVUVVRVMKKwogc3RydWN0IGl3bDM5NDVfcHJpdiB7CiAKIAkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWVfY2hhbm5lbHM7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICppZWVlX3JhdGVzOworCXN0cnVjdCBpd2xfMzk0NV9jZmcgKmNmZzsgLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KIAogCS8qIHRlbXBvcmFyeSBmcmFtZSBzdG9yYWdlIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfZnJhbWVzOwogCWludCBmcmFtZXNfY291bnQ7CiAKLQl1OCBwaHltb2RlOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlpbnQgYWxsb2NfcnhiX3NrYjsKIAlib29sIGFkZF9yYWRpb3RhcDsKIAogCXZvaWQgKCpyeF9oYW5kbGVyc1tSRVBMWV9NQVhdKShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAogCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpOwogCi0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCiAjaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAkvKiBzcGVjdHJ1bSBtZWFzdXJlbWVudCByZXBvcnQgY2FjaGluZyAqLwpAQCAtNzc5LDEzICs3ODEsMTUgQEAKIAlzdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZV9pbml0OwogCXN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZTsKIAotI2lmZGVmIExFRAotCS8qIExFRCByZWxhdGVkIHZhcmlhYmxlcyAqLwotCXN0cnVjdCBpd2wzOTQ1X2FjdGl2aXR5X2JsaW5rIGFjdGl2aXR5OwotCXVuc2lnbmVkIGxvbmcgbGVkX3BhY2tldHM7Ci0JaW50IGxlZF9zdGF0ZTsKKyNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisJc3RydWN0IGl3bDM5NDVfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOworCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOworCXU4IGxhc3RfYmxpbmtfcmF0ZTsKKwl1OCBhbGxvd19ibGlua2luZzsKKwl1bnNpZ25lZCBpbnQgcnh0eHBhY2tldHM7CiAjZW5kaWYKIAorCiAJdTE2IGFjdGl2ZV9yYXRlOwogCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKIApAQCAtODAzLDcgKzgwNyw2IEBACiAJc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgdHhxW0lXTF9NQVhfTlVNX1FVRVVFU107CiAKIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKLQl1MzIgY29uZmlnOwogCiAJaW50IGxhc3RfcnhfcnNzaTsJLyogRnJvbSBSeCBwYWNrZXQgc3RhdGlzaXRpY3MgKi8KIAlpbnQgbGFzdF9yeF9ub2lzZTsJLyogRnJvbSBiZWFjb24gc3RhdGlzdGljcyAqLwpAQCAtODMwLDEwICs4MzMsOSBAQAogCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgc3RhdGlvbnNbSVdMX1NUQVRJT05fQ09VTlRdOwogCiAJLyogSW5kaWNhdGlvbiBpZiBpZWVlODAyMTFfb3BzLT5vcGVuIGhhcyBiZWVuIGNhbGxlZCAqLwotCWludCBpc19vcGVuOworCXU4IGlzX29wZW47CiAKIAl1OCBtYWM4MDIxMV9yZWdpc3RlcmVkOwotCWludCBpc19hYmc7CiAKIAl1MzIgbm90aWZfbWlzc2VkX2JlYWNvbnM7CiAKQEAgLTg1Miw3ICs4NTQsNyBAQAogCS8qIGVlcHJvbSAqLwogCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSBlZXByb207CiAKLQlpbnQgaXdfbW9kZTsKKwllbnVtIGllZWU4MDIxMV9pZl90eXBlcyBpd19tb2RlOwogCiAJc3RydWN0IHNrX2J1ZmYgKmlic3NfYmVhY29uOwogCkBAIC04NjksOSArODcxLDcgQEAKIAl1MTYgYXNzb2NfY2FwYWJpbGl0eTsKIAl1OCBwc19tb2RlOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfUU9TCiAJc3RydWN0IGl3bDM5NDVfcW9zX2luZm8gcW9zX2RhdGE7Ci0jZW5kaWYgLypDT05GSUdfSVdMMzk0NV9RT1MgKi8KIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAKQEAgLTkzNywxMyArOTM3LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9hX2JhbmQoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewotCXJldHVybiBjaF9pbmZvLT5waHltb2RlID09IE1PREVfSUVFRTgwMjExQTsKKwlyZXR1cm4gY2hfaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haOwogfQogCiBzdGF0aWMgaW5saW5lIHU4IGlzX2NoYW5uZWxfYmdfYmFuZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7Ci0JcmV0dXJuICgoY2hfaW5mby0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUIpIHx8Ci0JCShjaF9pbmZvLT5waHltb2RlID09IE1PREVfSUVFRTgwMjExRykpOworCXJldHVybiBjaF9pbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFo7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfcGFzc2l2ZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoKQpAQCAtOTU2LDE4ICs5NTUsOCBAQAogCXJldHVybiAoKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKSA/IDEgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X3JhdGVfaW5kZXhfZnJvbV9wbGNwKGludCBwbGNwKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCi0JCWlmIChpd2wzOTQ1X3JhdGVzW2ldLnBsY3AgPT0gcGxjcCkKLQkJCXJldHVybiBpOwotCXJldHVybiAtMTsKLX0KLQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKAotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBwaHltb2RlLCB1MTYgY2hhbm5lbCk7CisJY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCk7CiAKIC8qIFJlcXVpcmVzIGZ1bGwgZGVjbGFyYXRpb24gb2YgaXdsMzk0NV9wcml2IGJlZm9yZSBpbmNsdWRpbmcgKi8KICNpbmNsdWRlICJpd2wtMzk0NS1pby5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1jb21tYW5kcy5oCmluZGV4IGYzNDcwYzguLjNiY2QxMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtY29tbWFuZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWNvbW1hbmRzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04NCw2ICs4NCw5IEBACiAJUkVQTFlfUkVNT1ZFX1NUQSA9IDB4MTksCS8qIG5vdCB1c2VkICovCiAJUkVQTFlfUkVNT1ZFX0FMTF9TVEEgPSAweDFhLAkvKiBub3QgdXNlZCAqLwogCisJLyogU2VjdXJpdHkgKi8KKwlSRVBMWV9XRVBLRVkgPSAweDIwLAorCiAJLyogUlgsIFRYLCBMRURzICovCiAJUkVQTFlfVFggPSAweDFjLAogCVJFUExZX1JBVEVfU0NBTEUgPSAweDQ3LAkvKiAzOTQ1IG9ubHkgKi8KQEAgLTEzOSw3ICsxNDIsNyBAQAogCVJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQgPSAweGIwLAogCVJFUExZX1JYX1BIWV9DTUQgPSAweGMwLAogCVJFUExZX1JYX01QRFVfQ01EID0gMHhjMSwKLQlSRVBMWV80OTY1X1JYID0gMHhjMywKKwlSRVBMWV9SWCA9IDB4YzMsCiAJUkVQTFlfQ09NUFJFU1NFRF9CQSA9IDB4YzUsCiAJUkVQTFlfTUFYID0gMHhmZgogfTsKQEAgLTE1MSwxNiArMTU0LDE2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBpd2w0OTY1X2NtZF9oZWFkZXIgZmxhZ3MgdmFsdWUgKi8KKy8qIGl3bF9jbWRfaGVhZGVyIGZsYWdzIHZhbHVlICovCiAjZGVmaW5lIElXTF9DTURfRkFJTEVEX01TSyAweDQwCiAKIC8qKgotICogc3RydWN0IGl3bDQ5NjVfY21kX2hlYWRlcgorICogc3RydWN0IGl3bF9jbWRfaGVhZGVyCiAgKgogICogVGhpcyBoZWFkZXIgZm9ybWF0IGFwcGVhcnMgaW4gdGhlIGJlZ2lubmluZyBvZiBlYWNoIGNvbW1hbmQgc2VudCBmcm9tIHRoZQogICogZHJpdmVyLCBhbmQgZWFjaCByZXNwb25zZS9ub3RpZmljYXRpb24gcmVjZWl2ZWQgZnJvbSB1Q29kZS4KICAqLwotc3RydWN0IGl3bDQ5NjVfY21kX2hlYWRlciB7CitzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIgewogCXU4IGNtZDsJCS8qIENvbW1hbmQgSUQ6ICBSRVBMWV9SWE9OLCBldGMuICovCiAJdTggZmxhZ3M7CS8qIElXTF9DTURfKiAqLwogCS8qCkBAIC0xOTQsNyArMTk3LDcgQEAKICAqIDQ5NjUgcmF0ZV9uX2ZsYWdzIGJpdCBmaWVsZHMKICAqCiAgKiByYXRlX25fZmxhZ3MgZm9ybWF0IGlzIHVzZWQgaW4gZm9sbG93aW5nIDQ5NjUgY29tbWFuZHM6Ci0gKiAgUkVQTFlfNDk2NV9SWCAocmVzcG9uc2Ugb25seSkKKyAqICBSRVBMWV9SWCAocmVzcG9uc2Ugb25seSkKICAqICBSRVBMWV9UWCAoYm90aCBjb21tYW5kIGFuZCByZXNwb25zZSkKICAqICBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ECiAgKgpAQCAtMjY2LDExICsyNjksMTAgQEAKICAqICAgICAgICAgIDEwIEIgYWN0aXZlLCBBIGluYWN0aXZlCiAgKiAgICAgICAgICAxMSBCb3RoIGFjdGl2ZQogICovCi0jZGVmaW5lIFJBVEVfTUNTX0FOVF9BX1BPUwkxNAotI2RlZmluZSBSQVRFX01DU19BTlRfQl9QT1MJMTUKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfTVNLCTB4NDAwMAotI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sJMHg4MDAwCi0jZGVmaW5lIFJBVEVfTUNTX0FOVF9BQl9NU0sJMHhjMDAwCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9QT1MgICAgICAgMTQKKyNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfTVNLICAgICAweDA0MDAwCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9CX01TSyAgICAgMHgwODAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLICAgIDB4MEMwMDAKIAogCiAvKioKQEAgLTcyNywxNCArNzI5LDIxIEBACiAjZGVmaW5lIFNUQV9DT05UUk9MX01PRElGWV9NU0sJCTB4MDEKIAogLyoga2V5IGZsYWdzIF9fbGUxNiovCi0jZGVmaW5lIFNUQV9LRVlfRkxHX0VOQ1JZUFRfTVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg3KQotI2RlZmluZSBTVEFfS0VZX0ZMR19OT19FTkMJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDApCi0jZGVmaW5lIFNUQV9LRVlfRkxHX1dFUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDEpCi0jZGVmaW5lIFNUQV9LRVlfRkxHX0NDTVAJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDIpCi0jZGVmaW5lIFNUQV9LRVlfRkxHX1RLSVAJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDMpCisjZGVmaW5lIFNUQV9LRVlfRkxHX0VOQ1JZUFRfTVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA3KQorI2RlZmluZSBTVEFfS0VZX0ZMR19OT19FTkMJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFNUQV9LRVlfRkxHX1dFUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFNUQV9LRVlfRkxHX0NDTVAJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFNUQV9LRVlfRkxHX1RLSVAJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDMpCiAKICNkZWZpbmUgU1RBX0tFWV9GTEdfS0VZSURfUE9TCTgKICNkZWZpbmUgU1RBX0tFWV9GTEdfSU5WQUxJRCAJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA4MDApCisvKiB3ZXAga2V5IGlzIGVpdGhlciBmcm9tIGdsb2JhbCBrZXkgKDApIG9yIGZyb20gc3RhdGlvbiBpbmZvIGFycmF5ICgxKSAqLworI2RlZmluZSBTVEFfS0VZX0ZMR19NQVBfS0VZX01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwOCkKKworLyogd2VwIGtleSBpbiBTVEE6IDUtYnl0ZXMgKDApIG9yIDEzLWJ5dGVzICgxKSAqLworI2RlZmluZSBTVEFfS0VZX0ZMR19LRVlfU0laRV9NU0sgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgxMDAwKQorI2RlZmluZSBTVEFfS0VZX01VTFRJQ0FTVF9NU0sgICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg0MDAwKQorI2RlZmluZSBTVEFfS0VZX01BWF9OVU0JCTgKIAogLyogRmxhZ3MgaW5kaWNhdGUgd2hldGhlciB0byBtb2RpZnkgdnMuIGRvbid0IGNoYW5nZSB2YXJpb3VzIHN0YXRpb24gcGFyYW1zICovCiAjZGVmaW5lCVNUQV9NT0RJRllfS0VZX01BU0sJCTB4MDEKQEAgLTc1Miw3ICs3NjEsOCBAQAogCXU4IHRraXBfcnhfdHNjX2J5dGUyOwkvKiBUU0NbMl0gZm9yIGtleSBtaXggcGgxIGRldGVjdGlvbiAqLwogCXU4IHJlc2VydmVkMTsKIAlfX2xlMTYgdGtpcF9yeF90dGFrWzVdOwkvKiAxMC1ieXRlIHVuaWNhc3QgVEtJUCBUVEFLICovCi0JX19sZTE2IHJlc2VydmVkMjsKKwl1OCBrZXlfb2Zmc2V0OworCXU4IHJlc2VydmVkMjsKIAl1OCBrZXlbMTZdOwkJLyogMTYtYnl0ZSB1bmljYXN0IGRlY3J5cHRpb24ga2V5ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtODQyLDYgKzg1MiwzMCBAQAogCXU4IHN0YXR1czsJLyogQUREX1NUQV8qICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIFJFUExZX1dFUF9LRVkgPSAweDIwCisgKi8KK3N0cnVjdCBpd2xfd2VwX2tleSB7CisJdTgga2V5X2luZGV4OworCXU4IGtleV9vZmZzZXQ7CisJdTggcmVzZXJ2ZWQxWzJdOworCXU4IGtleV9zaXplOworCXU4IHJlc2VydmVkMlszXTsKKwl1OCBrZXlbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpd2xfd2VwX2NtZCB7CisJdTggbnVtX2tleXM7CisJdTggZ2xvYmFsX2tleV90eXBlOworCXU4IGZsYWdzOworCXU4IHJlc2VydmVkOworCXN0cnVjdCBpd2xfd2VwX2tleSBrZXlbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBXRVBfS0VZX1dFUF9UWVBFIDEKKyNkZWZpbmUgV0VQX0tFWVNfTUFYIDQKKyNkZWZpbmUgV0VQX0lOVkFMSURfT0ZGU0VUIDB4ZmYKKyNkZWZpbmUgV0VQX0tFWV9MRU5fMTI4IDEzCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICg0KQpAQCAtODY4LDI2ICs5MDIsMzUgQEAKIAl1OCBwYXlsb2FkWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUJUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUglfX2NvbnN0YW50X2NwdV90b19sZTMyKDEgPDwgMCkKLSNkZWZpbmUJUlhfUkVTX1NUQVRVU19OT19SWEVfT1ZFUkZMT1cJX19jb25zdGFudF9jcHVfdG9fbGUzMigxIDw8IDEpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IJX19jb25zdGFudF9jcHVfdG9fbGUzMigxIDw8IDApCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSA8PCAxKQogCi0jZGVmaW5lCVJYX1JFU19QSFlfRkxBR1NfQkFORF8yNF9NU0sJX19jb25zdGFudF9jcHVfdG9fbGUxNigxIDw8IDApCi0jZGVmaW5lCVJYX1JFU19QSFlfRkxBR1NfTU9EX0NDS19NU0sJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSA8PCAxKQotI2RlZmluZQlSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMikKLSNkZWZpbmUJUlhfUkVTX1BIWV9GTEFHU19OQVJST1dfQkFORF9NU0sJX19jb25zdGFudF9jcHVfdG9fbGUxNigxIDw8IDMpCi0jZGVmaW5lCVJYX1JFU19QSFlfRkxBR1NfQU5URU5OQV9NU0sJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhmMCkKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMCkKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigxIDw8IDEpCisjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfU0hPUlRfUFJFQU1CTEVfTVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSA8PCAyKQorI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX05BUlJPV19CQU5EX01TSwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDEgPDwgMykKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweGYwKQogCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLCSgweDcgPDwgOCkKLSNkZWZpbmUJUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9OT05FCSgweDAgPDwgOCkKLSNkZWZpbmUJUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9XRVAJKDB4MSA8PCA4KQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX0NDTVAJKDB4MiA8PCA4KQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1RLSVAJKDB4MyA8PCA4KQorI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSwkoMHg3IDw8IDgpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTk9ORQkoMHgwIDw8IDgpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQCSgweDEgPDwgOCkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QCSgweDIgPDwgOCkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQCSgweDMgPDwgOCkKKyNkZWZpbmUJUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9FUlIJKDB4NyA8PCA4KQogCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSwkoMHgzIDw8IDExKQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX05PVF9ERUNSWVBUCSgweDAgPDwgMTEpCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfREVDUllQVF9PSwkoMHgzIDw8IDExKQotI2RlZmluZQlSWF9SRVNfU1RBVFVTX0JBRF9JQ1ZfTUlDCSgweDEgPDwgMTEpCi0jZGVmaW5lCVJYX1JFU19TVEFUVVNfQkFEX0tFWV9UVEFLCSgweDIgPDwgMTEpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfU1RBVElPTl9GT1VORAkoMTw8NikKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT19TVEFUSU9OX0lORk9fTUlTTUFUQ0gJKDE8PDcpCisKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLCSgweDMgPDwgMTEpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9UX0RFQ1JZUFQJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LCSgweDMgPDwgMTEpCisjZGVmaW5lIFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUMJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlhfUkVTX1NUQVRVU19CQURfS0VZX1RUQUsJKDB4MiA8PCAxMSkKKworI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfSUNWX09LCSgweDIwKQorI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfTUlDX09LCSgweDQwKQorI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfVFRBS19PSwkoMSA8PCA3KQorI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLCSgweDgwMCkKIAogc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfZW5kIHsKIAlfX2xlMzIgc3RhdHVzOwpAQCAtOTIyLDcgKzk2NSw3IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoKLSAqIFJFUExZXzQ5NjVfUlggPSAweGMzIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQorICogUkVQTFlfUlggPSAweGMzIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQogICogVXNlZCBvbmx5IGZvciBsZWdhY3kgKG5vbiAxMW4pIGZyYW1lcy4KICAqLwogI2RlZmluZSBSWF9SRVNfUEhZX0NOVCAxNApAQCAtMTAzOCw2ICsxMDgxLDEwIEBACiAgKiBNQUMgaGVhZGVyKSB0byBEV09SRCBib3VuZGFyeS4gKi8KICNkZWZpbmUgVFhfQ01EX0ZMR19NSF9QQURfTVNLIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSA8PCAyMCkKIAorLyogYWNjZWxlcmF0ZSBhZ2dyZWdhdGlvbiBzdXBwb3J0CisgKiAwIC0gbm8gQ0NNUCBlbmNyeXB0aW9uOyAxIC0gQ0NNUCBlbmNyeXB0aW9uICovCisjZGVmaW5lIFRYX0NNRF9GTEdfQUdHX0NDTVBfTVNLIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSA8PCAyMikKKwogLyogSENDQS1BUCAtIGRpc2FibGUgZHVyYXRpb24gb3ZlcndyaXRpbmcuICovCiAjZGVmaW5lIFRYX0NNRF9GTEdfRFVSX01TSyBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEgPDwgMjUpCiAKQEAgLTEzMDAsNiArMTM0NywyNSBAQAogCV9fbGUzMiBzdGF0dXM7CS8qIFRYIHN0YXR1cyAoZm9yIGFnZ3JlZ2F0aW9uIHN0YXR1cyBvZiAxc3QgZnJhbWUpICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGFnZ190eF9zdGF0dXMgeworCV9fbGUxNiBzdGF0dXM7CisJX19sZTE2IHNlcXVlbmNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpd2w0OTY1X3R4X3Jlc3BfYWdnIHsKKwl1OCBmcmFtZV9jb3VudDsgICAgICAgICAvKiAxIG5vIGFnZ3JlZ2F0aW9uLCA+MSBhZ2dyZWdhdGlvbiAqLworCXU4IHJlc2VydmVkMTsKKwl1OCBmYWlsdXJlX3J0czsKKwl1OCBmYWlsdXJlX2ZyYW1lOworCV9fbGUzMiByYXRlX25fZmxhZ3M7CisJX19sZTE2IHdpcmVsZXNzX21lZGlhX3RpbWU7CisJX19sZTE2IHJlc2VydmVkMzsKKwlfX2xlMzIgcGFfcG93ZXIxOworCV9fbGUzMiBwYV9wb3dlcjI7CisJc3RydWN0IGFnZ190eF9zdGF0dXMgc3RhdHVzOyAgICAvKiBUWCBzdGF0dXMgKGZvciBhZ2dyZWdhdGlvbiBzdGF0dXMgKi8KKwkJCQkJLyogb2YgMXN0IGZyYW1lKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qCiAgKiBSRVBMWV9DT01QUkVTU0VEX0JBID0gMHhjNSAocmVzcG9uc2Ugb25seSwgbm90IGEgY29tbWFuZCkKICAqCkBAIC0xMzEzLDkgKzEzNzksOCBAQAogCS8qIEluZGV4IG9mIHJlY2lwaWVudCAoQkEtc2VuZGluZykgc3RhdGlvbiBpbiB1Q29kZSdzIHN0YXRpb24gdGFibGUgKi8KIAl1OCBzdGFfaWQ7CiAJdTggdGlkOwotCV9fbGUxNiBiYV9zZXFfY3RsOwotCV9fbGUzMiBiYV9iaXRtYXAwOwotCV9fbGUzMiBiYV9iaXRtYXAxOworCV9fbGUxNiBzZXFfY3RsOworCV9fbGU2NCBiaXRtYXA7CiAJX19sZTE2IHNjZF9mbG93OwogCV9fbGUxNiBzY2Rfc3NuOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0xMzQ4LDExICsxNDEzLDExIEBACiAKIAogLyoqCi0gKiBzdHJ1Y3QgaXdsNDk2NV9saW5rX3F1YWxfZ2VuZXJhbF9wYXJhbXMKKyAqIHN0cnVjdCBpd2xfbGlua19xdWFsX2dlbmVyYWxfcGFyYW1zCiAgKgogICogVXNlZCBpbiBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ECiAgKi8KLXN0cnVjdCBpd2w0OTY1X2xpbmtfcXVhbF9nZW5lcmFsX3BhcmFtcyB7CitzdHJ1Y3QgaXdsX2xpbmtfcXVhbF9nZW5lcmFsX3BhcmFtcyB7CiAJdTggZmxhZ3M7CiAKIAkvKiBObyBlbnRyaWVzIGF0IG9yIGFib3ZlIHRoaXMgKGRyaXZlciBjaG9zZW4pIGluZGV4IGNvbnRhaW4gTUlNTyAqLwpAQCAtMTM3OSwxMSArMTQ0NCwxMSBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgotICogc3RydWN0IGl3bDQ5NjVfbGlua19xdWFsX2FnZ19wYXJhbXMKKyAqIHN0cnVjdCBpd2xfbGlua19xdWFsX2FnZ19wYXJhbXMKICAqCiAgKiBVc2VkIGluIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQKICAqLwotc3RydWN0IGl3bDQ5NjVfbGlua19xdWFsX2FnZ19wYXJhbXMgeworc3RydWN0IGl3bF9saW5rX3F1YWxfYWdnX3BhcmFtcyB7CiAKIAkvKiBNYXhpbXVtIG51bWJlciBvZiB1U2VjIGluIGFnZ3JlZ2F0aW9uLgogCSAqIERyaXZlciBzaG91bGQgc2V0IHRoaXMgdG8gNDAwMCAoNCBtaWxsaXNlY29uZHMpLiAqLwpAQCAtMTU5MywxNCArMTY1OCwxNCBAQAogICogbGVnYWN5KSwgYW5kIHRoZW4gcmVwZWF0IHRoZSBzZWFyY2ggcHJvY2Vzcy4KICAqCiAgKi8KLXN0cnVjdCBpd2w0OTY1X2xpbmtfcXVhbGl0eV9jbWQgeworc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kIHsKIAogCS8qIEluZGV4IG9mIGRlc3RpbmF0aW9uL3JlY2lwaWVudCBzdGF0aW9uIGluIHVDb2RlJ3Mgc3RhdGlvbiB0YWJsZSAqLwogCXU4IHN0YV9pZDsKIAl1OCByZXNlcnZlZDE7CiAJX19sZTE2IGNvbnRyb2w7CQkvKiBub3QgdXNlZCAqLwotCXN0cnVjdCBpd2w0OTY1X2xpbmtfcXVhbF9nZW5lcmFsX3BhcmFtcyBnZW5lcmFsX3BhcmFtczsKLQlzdHJ1Y3QgaXdsNDk2NV9saW5rX3F1YWxfYWdnX3BhcmFtcyBhZ2dfcGFyYW1zOworCXN0cnVjdCBpd2xfbGlua19xdWFsX2dlbmVyYWxfcGFyYW1zIGdlbmVyYWxfcGFyYW1zOworCXN0cnVjdCBpd2xfbGlua19xdWFsX2FnZ19wYXJhbXMgYWdnX3BhcmFtczsKIAogCS8qCiAJICogUmF0ZSBpbmZvOyB3aGVuIHVzaW5nIHJhdGUtc2NhbGluZywgVHggY29tbWFuZCdzIGluaXRpYWxfcmF0ZV9pbmRleApAQCAtMjYyNSw3ICsyNjkwLDcgQEAKIAogc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0IHsKIAlfX2xlMzIgbGVuOwotCXN0cnVjdCBpd2w0OTY1X2NtZF9oZWFkZXIgaGRyOworCXN0cnVjdCBpd2xfY21kX2hlYWRlciBoZHI7CiAJdW5pb24gewogCQlzdHJ1Y3QgaXdsNDk2NV9hbGl2ZV9yZXNwIGFsaXZlX2ZyYW1lOwogCQlzdHJ1Y3QgaXdsNDk2NV9yeF9mcmFtZSByeF9mcmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2OTZiYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWRlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2l3bDQ5NjVfZGVidWdfaF9fCi0jZGVmaW5lIF9faXdsNDk2NV9kZWJ1Z19oX18KLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi1leHRlcm4gdTMyIGl3bDQ5NjVfZGVidWdfbGV2ZWw7Ci0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7IGlmIChpd2w0OTY1X2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAotICBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAotCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19GVU5DVElPTl9fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKChpd2w0OTY1X2RlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCi0gIHByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSI6ICVjICVzICIgZm10LCBcCi0JIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHX0xJTUlUKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lXTDQ5NjVfREVCVUcgKi8KLQotLyoKLSAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwotICoKLSAqIElmIHlvdSBhcmUgZGVmaW5pbmcgYSBuZXcgZGVidWcgY2xhc3NpZmljYXRpb24sIHNpbXBseSBhZGQgaXQgdG8gdGhlICNkZWZpbmUKLSAqIGxpc3QgaGVyZSBpbiB0aGUgZm9ybSBvZjoKLSAqCi0gKiAjZGVmaW5lIElXTF9ETF94eHh4IFZBTFVFCi0gKgotICogc2hpZnRpbmcgdmFsdWUgdG8gdGhlIGxlZnQgb25lIGJpdCBmcm9tIHRoZSBwcmV2aW91cyBlbnRyeS4gIHh4eHggc2hvdWxkIGJlCi0gKiB0aGUgbmFtZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gKGZvciBleGFtcGxlLCBXRVApCi0gKgotICogWW91IHRoZW4gbmVlZCB0byBlaXRoZXIgYWRkIGEgSVdMX3h4eHhfREVCVUcoKSBtYWNybyBkZWZpbml0aW9uIGZvciB5b3VyCi0gKiBjbGFzc2lmaWNhdGlvbiwgb3IgdXNlIElXTF9ERUJVRyhJV0xfRExfeHh4eCwgLi4uKSB3aGVuZXZlciB5b3Ugd2FudAotICogdG8gc2VuZCBvdXRwdXQgdG8gdGhhdCBjbGFzc2lmaWNhdGlvbi4KLSAqCi0gKiBUbyBhZGQgeW91ciBkZWJ1ZyBsZXZlbCB0byB0aGUgbGlzdCBvZiBsZXZlbHMgc2VlbiB3aGVuIHlvdSBwZXJmb3JtCi0gKgotICogJSBjYXQgL3Byb2MvbmV0L2l3bC9kZWJ1Z19sZXZlbAotICoKLSAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaXdsNDk2NV9kZWJ1Z19sZXZlbHMgYXJyYXkuCi0gKgotICogSWYgeW91IGRvIG5vdCBzZWUgZGVidWdfbGV2ZWwgaW4gL3Byb2MvbmV0L2l3bCB0aGVuIHlvdSBkbyBub3QgaGF2ZQotICogQ09ORklHX0lXTDQ5NjVfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCi0gKgotICovCi0KLSNkZWZpbmUgSVdMX0RMX0lORk8gICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSVdMX0RMX01BQzgwMjExICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSVdMX0RMX0hPU1RfQ09NTUFORCAgKDEgPDwgMikKLSNkZWZpbmUgSVdMX0RMX1NUQVRFICAgICAgICAgKDEgPDwgMykKLQotI2RlZmluZSBJV0xfRExfUkFESU8gICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJV0xfRExfUE9XRVIgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJV0xfRExfVEVNUCAgICAgICAgICAoMSA8PCA5KQotCi0jZGVmaW5lIElXTF9ETF9OT1RJRiAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBJV0xfRExfU0NBTiAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSVdMX0RMX0FTU09DICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElXTF9ETF9EUk9QICAgICAgICAgICgxIDw8IDEzKQotCi0jZGVmaW5lIElXTF9ETF9UWFBPV0VSICAgICAgICgxIDw8IDE0KQotCi0jZGVmaW5lIElXTF9ETF9BUCAgICAgICAgICAgICgxIDw8IDE1KQotCi0jZGVmaW5lIElXTF9ETF9GVyAgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBJV0xfRExfUkZfS0lMTCAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgSVdMX0RMX0ZXX0VSUk9SUyAgICAgKDEgPDwgMTgpCi0KLSNkZWZpbmUgSVdMX0RMX0xFRCAgICAgICAgICAgKDEgPDwgMTkpCi0KLSNkZWZpbmUgSVdMX0RMX1JBVEUgICAgICAgICAgKDEgPDwgMjApCi0KLSNkZWZpbmUgSVdMX0RMX0NBTElCICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIElXTF9ETF9XRVAgICAgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBJV0xfRExfVFggICAgICAgICAgICAoMSA8PCAyMykKLSNkZWZpbmUgSVdMX0RMX1JYICAgICAgICAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIElXTF9ETF9JU1IgICAgICAgICAgICgxIDw8IDI1KQotI2RlZmluZSBJV0xfRExfSFQgICAgICAgICAgICAoMSA8PCAyNikKLSNkZWZpbmUgSVdMX0RMX0lPICAgICAgICAgICAgKDEgPDwgMjcpCi0jZGVmaW5lIElXTF9ETF8xMUggICAgICAgICAgICgxIDw8IDI4KQotCi0jZGVmaW5lIElXTF9ETF9TVEFUUyAgICAgICAgICgxIDw8IDI5KQotI2RlZmluZSBJV0xfRExfVFhfUkVQTFkgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSVdMX0RMX1FPUyAgICAgICAgICAgKDEgPDwgMzEpCi0KLSNkZWZpbmUgSVdMX0VSUk9SKGYsIGEuLi4pIHByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAiIGYsICMjIGEpCi0jZGVmaW5lIElXTF9XQVJOSU5HKGYsIGEuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSU5GTyhmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lORk8sIGYsICMjIGEpCi0KLSNkZWZpbmUgSVdMX0RFQlVHX01BQzgwMjExKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX01BQzgwMjExLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVEVNUChmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfVEVNUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NDQU4oZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1NDQU4sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RYKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX1RYLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSVNSKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfSVNSLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTEVEKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTEVELCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfV0VQKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfV0VQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSEMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IT1NUX0NPTU1BTkQsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19DQUxJQihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0NBTElCLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRlcoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9GVywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JGX0tJTEwoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19EUk9QX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FQKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lPKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9SQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTk9USUYoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IVChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hULCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU1RBVFMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9TVEFUUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19RT1MoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1FPUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1JBRElPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUE9XRVIoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR18xMUgoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfMTFILCBmLCAjIyBhKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAppbmRleCBmZmUxZTlkLi4xYTY2YjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOTIsMzE2ICs5Miw2IEBACiAvKiBSU1NJIHRvIGRCbSAqLwogI2RlZmluZSBJV0xfUlNTSV9PRkZTRVQJNDQKIAotLyoKLSAqIEVFUFJPTSByZWxhdGVkIGNvbnN0YW50cywgZW51bXMsIGFuZCBzdHJ1Y3R1cmVzLgotICovCi0KLS8qCi0gKiBFRVBST00gYWNjZXNzIHRpbWUgdmFsdWVzOgotICoKLSAqIERyaXZlciBpbml0aWF0ZXMgRUVQUk9NIHJlYWQgYnkgd3JpdGluZyBieXRlIGFkZHJlc3MgPDwgMSB0byBDU1JfRUVQUk9NX1JFRywKLSAqICAgdGhlbiBjbGVhcmluZyAod2l0aCBzdWJzZXF1ZW50IHJlYWQvbW9kaWZ5L3dyaXRlKSBDU1JfRUVQUk9NX1JFRyBiaXQKLSAqICAgQ1NSX0VFUFJPTV9SRUdfQklUX0NNRCAoMHgyKS4KLSAqIERyaXZlciB0aGVuIHBvbGxzIENTUl9FRVBST01fUkVHIGZvciBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSyAoMHgxKS4KLSAqIFdoZW4gcG9sbGluZywgd2FpdCAxMCB1U2VjIGJldHdlZW4gcG9sbGluZyBsb29wcywgdXAgdG8gYSBtYXhpbXVtIDUwMDAgdVNlYy4KLSAqIERyaXZlciByZWFkcyAxNi1iaXQgdmFsdWUgZnJvbSBiaXRzIDMxLTE2IG9mIENTUl9FRVBST01fUkVHLgotICovCi0jZGVmaW5lIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQJNTAwMCAvKiB1U2VjICovCi0jZGVmaW5lIElXTF9FRVBST01fQUNDRVNTX0RFTEFZCQkxMCAgIC8qIHVTZWMgKi8KLQotLyoKLSAqIFJlZ3VsYXRvcnkgY2hhbm5lbCB1c2FnZSBmbGFncyBpbiBFRVBST00gc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwuZmxhZ3MuCi0gKgotICogSUJTUyBhbmQvb3IgQVAgb3BlcmF0aW9uIGlzIGFsbG93ZWQgKm9ubHkqIG9uIHRob3NlIGNoYW5uZWxzIHdpdGgKLSAqIChWQUxJRCAmJiBJQlNTICYmIEFDVElWRSAmJiAhUkFEQVIpLiAgVGhpcyByZXN0cmljdGlvbiBpcyBpbiBwbGFjZSBiZWNhdXNlCi0gKiBSQURBUiBkZXRlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgNDk2NSBkcml2ZXIsIGJ1dCBpcyBhCi0gKiByZXF1aXJlbWVudCBmb3IgZXN0YWJsaXNoaW5nIGEgbmV3IG5ldHdvcmsgZm9yIGxlZ2FsIG9wZXJhdGlvbiBvbiBjaGFubmVscwotICogcmVxdWlyaW5nIFJBREFSIGRldGVjdGlvbiBvciByZXN0cmljdGluZyBBQ1RJVkUgc2Nhbm5pbmcuCi0gKgotICogTk9URTogICJXSURFIiBmbGFnIGRvZXMgbm90IGluZGljYXRlIGFueXRoaW5nIGFib3V0ICJGQVQiIDQwIE1IeiBjaGFubmVscy4KLSAqICAgICAgICBJdCBvbmx5IGluZGljYXRlcyB0aGF0IDIwIE1IeiBjaGFubmVsIHVzZSBpcyBzdXBwb3J0ZWQ7IEZBVCBjaGFubmVsCi0gKiAgICAgICAgdXNhZ2UgaXMgaW5kaWNhdGVkIGJ5IGEgc2VwYXJhdGUgc2V0IG9mIHJlZ3VsYXRvcnkgZmxhZ3MgZm9yIGVhY2gKLSAqICAgICAgICBGQVQgY2hhbm5lbCBwYWlyLgotICoKLSAqIE5PVEU6ICBVc2luZyBhIGNoYW5uZWwgaW5hcHByb3ByaWF0ZWx5IHdpbGwgcmVzdWx0IGluIGEgdUNvZGUgZXJyb3IhCi0gKi8KLWVudW0gewotCUVFUFJPTV9DSEFOTkVMX1ZBTElEID0gKDEgPDwgMCksCS8qIHVzYWJsZSBmb3IgdGhpcyBTS1UvZ2VvICovCi0JRUVQUk9NX0NIQU5ORUxfSUJTUyA9ICgxIDw8IDEpLAkJLyogdXNhYmxlIGFzIGFuIElCU1MgY2hhbm5lbCAqLwotCS8qIEJpdCAyIFJlc2VydmVkICovCi0JRUVQUk9NX0NIQU5ORUxfQUNUSVZFID0gKDEgPDwgMyksCS8qIGFjdGl2ZSBzY2FubmluZyBhbGxvd2VkICovCi0JRUVQUk9NX0NIQU5ORUxfUkFEQVIgPSAoMSA8PCA0KSwJLyogcmFkYXIgZGV0ZWN0aW9uIHJlcXVpcmVkICovCi0JRUVQUk9NX0NIQU5ORUxfV0lERSA9ICgxIDw8IDUpLAkJLyogMjAgTUh6IGNoYW5uZWwgb2theSAqLwotCUVFUFJPTV9DSEFOTkVMX05BUlJPVyA9ICgxIDw8IDYpLAkvKiAxMCBNSHogY2hhbm5lbCAobm90IHVzZWQpICovCi0JRUVQUk9NX0NIQU5ORUxfREZTID0gKDEgPDwgNyksCS8qIGR5bmFtaWMgZnJlcSBzZWxlY3Rpb24gY2FuZGlkYXRlICovCi19OwotCi0vKiBTS1UgQ2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIEVFUFJPTV9TS1VfQ0FQX1NXX1JGX0tJTExfRU5BQkxFICAgICAgICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFICAgICAgICAgICAgICAgICgxIDw8IDEpCi0KLS8qICpyZWd1bGF0b3J5KiBjaGFubmVsIGRhdGEgZm9ybWF0IGluIGVlcHJvbSwgb25lIGZvciBlYWNoIGNoYW5uZWwuCi0gKiBUaGVyZSBhcmUgc2VwYXJhdGUgZW50cmllcyBmb3IgRkFUICg0MCBNSHopIHZzLiBub3JtYWwgKDIwIE1IeikgY2hhbm5lbHMuICovCi1zdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCB7Ci0JdTggZmxhZ3M7CQkvKiBFRVBST01fQ0hBTk5FTF8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwotCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogNDk2NSBoYXMgdHdvIHJhZGlvIHRyYW5zbWl0dGVycyAoYW5kIDMgcmFkaW8gcmVjZWl2ZXJzKSAqLwotI2RlZmluZSBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TICAgICAgKDIpCi0KLS8qIDQ5NjUgaGFzIHJvb20gZm9yIHVwIHRvIDggc2V0cyBvZiB0eHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KLSNkZWZpbmUgRUVQUk9NX1RYX1BPV0VSX0JBTkRTICAgICAgICAgICg4KQotCi0vKiA0OTY1IGZhY3RvcnkgY2FsaWJyYXRpb24gbWVhc3VyZXMgdHhwb3dlciBnYWluIHNldHRpbmdzIGZvcgotICogZWFjaCBvZiAzIHRhcmdldCBvdXRwdXQgbGV2ZWxzICovCi0jZGVmaW5lIEVFUFJPTV9UWF9QT1dFUl9NRUFTVVJFTUVOVFMgICAoMykKLQotLyogNDk2NSBkcml2ZXIgZG9lcyBub3Qgd29yayB3aXRoIHR4cG93ZXIgY2FsaWJyYXRpb24gdmVyc2lvbiA8IDUuCi0gKiBMb29rIGZvciB0aGlzIGluIGNhbGliX3ZlcnNpb24gbWVtYmVyIG9mIHN0cnVjdCBpd2w0OTY1X2VlcHJvbS4gKi8KLSNkZWZpbmUgRUVQUk9NX1RYX1BPV0VSX1ZFUlNJT05fTkVXICAgICg1KQotCi0KLS8qCi0gKiA0OTY1IGZhY3RvcnkgY2FsaWJyYXRpb24gZGF0YSBmb3Igb25lIHR4cG93ZXIgbGV2ZWwsIG9uIG9uZSBjaGFubmVsLAotICogbWVhc3VyZWQgb24gb25lIG9mIHRoZSAyIHR4IGNoYWlucyAocmFkaW8gdHJhbnNtaXR0ZXIgYW5kIGFzc29jaWF0ZWQKLSAqIGFudGVubmEpLiAgRUVQUk9NIGNvbnRhaW5zOgotICoKLSAqIDEpICBUZW1wZXJhdHVyZSAoZGVncmVlcyBDZWxzaXVzKSBvZiBkZXZpY2Ugd2hlbiBtZWFzdXJlbWVudCB3YXMgbWFkZS4KLSAqCi0gKiAyKSAgR2FpbiB0YWJsZSBpbmRleCB1c2VkIHRvIGFjaGlldmUgdGhlIHRhcmdldCBtZWFzdXJlbWVudCBwb3dlci4KLSAqICAgICBUaGlzIHJlZmVycyB0byB0aGUgIndlbGwta25vd24iIGdhaW4gdGFibGVzIChzZWUgaXdsLTQ5NjUtaHcuaCkuCi0gKgotICogMykgIEFjdHVhbCBtZWFzdXJlZCBvdXRwdXQgcG93ZXIsIGluIGhhbGYtZEJtICgiMzQiID0gMTcgZEJtKS4KLSAqCi0gKiA0KSAgUkYgcG93ZXIgYW1wbGlmaWVyIGRldGVjdG9yIGxldmVsIG1lYXN1cmVtZW50IChub3QgdXNlZCkuCi0gKi8KLXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9tZWFzdXJlIHsKLQl1OCB0ZW1wZXJhdHVyZTsJCS8qIERldmljZSB0ZW1wZXJhdHVyZSAoQ2Vsc2l1cykgKi8KLQl1OCBnYWluX2lkeDsJCS8qIEluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXU4IGFjdHVhbF9wb3c7CQkvKiBNZWFzdXJlZCBSRiBvdXRwdXQgcG93ZXIsIGhhbGYtZEJtICovCi0JczggcGFfZGV0OwkJLyogUG93ZXIgYW1wIGRldGVjdG9yIGxldmVsIChub3QgdXNlZCkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qCi0gKiA0OTY1IG1lYXN1cmVtZW50IHNldCBmb3Igb25lIGNoYW5uZWwuICBFRVBST00gY29udGFpbnM6Ci0gKgotICogMSkgIENoYW5uZWwgbnVtYmVyIG1lYXN1cmVkCi0gKgotICogMikgIE1lYXN1cmVtZW50cyBmb3IgZWFjaCBvZiAzIHBvd2VyIGxldmVscyBmb3IgZWFjaCBvZiAyIHJhZGlvIHRyYW5zbWl0dGVycwotICogICAgIChhLmsuYS4gInR4IGNoYWlucyIpICg2IG1lYXN1cmVtZW50cyBhbHRvZ2V0aGVyKQotICovCi1zdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfY2hfaW5mbyB7Ci0JdTggY2hfbnVtOwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9tZWFzdXJlIG1lYXN1cmVtZW50c1tFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TXQotCQlbRUVQUk9NX1RYX1BPV0VSX01FQVNVUkVNRU5UU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIDQ5NjUgdHhwb3dlciBzdWJiYW5kIGluZm8uCi0gKgotICogRm9yIGVhY2ggZnJlcXVlbmN5IHN1YmJhbmQsIEVFUFJPTSBjb250YWlucyB0aGUgZm9sbG93aW5nOgotICoKLSAqIDEpICBGaXJzdCBhbmQgbGFzdCBjaGFubmVscyB3aXRoaW4gcmFuZ2Ugb2YgdGhlIHN1YmJhbmQuICAiMCIgdmFsdWVzCi0gKiAgICAgaW5kaWNhdGUgdGhhdCB0aGlzIHNhbXBsZSBzZXQgaXMgbm90IGJlaW5nIHVzZWQuCi0gKgotICogMikgIFNhbXBsZSBtZWFzdXJlbWVudCBzZXRzIGZvciAyIGNoYW5uZWxzIGNsb3NlIHRvIHRoZSByYW5nZSBlbmRwb2ludHMuCi0gKi8KLXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9zdWJiYW5kX2luZm8gewotCXU4IGNoX2Zyb207CS8qIGNoYW5uZWwgbnVtYmVyIG9mIGxvd2VzdCBjaGFubmVsIGluIHN1YmJhbmQgKi8KLQl1OCBjaF90bzsJLyogY2hhbm5lbCBudW1iZXIgb2YgaGlnaGVzdCBjaGFubmVsIGluIHN1YmJhbmQgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfY2hfaW5mbyBjaDE7Ci0Jc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX2NoX2luZm8gY2gyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotLyoKLSAqIDQ5NjUgdHhwb3dlciBjYWxpYnJhdGlvbiBpbmZvLiAgRUVQUk9NIGNvbnRhaW5zOgotICoKLSAqIDEpICBGYWN0b3J5LW1lYXN1cmVkIHNhdHVyYXRpb24gcG93ZXIgbGV2ZWxzIChtYXhpbXVtIGxldmVscyBhdCB3aGljaAotICogICAgIHR4IHBvd2VyIGFtcGxpZmllciBjYW4gb3V0cHV0IGEgc2lnbmFsIHdpdGhvdXQgdG9vIG11Y2ggZGlzdG9ydGlvbikuCi0gKiAgICAgVGhlcmUgaXMgb25lIGxldmVsIGZvciAyLjQgR0h6IGJhbmQgYW5kIG9uZSBmb3IgNSBHSHogYmFuZC4gIFRoZXNlCi0gKiAgICAgdmFsdWVzIGFwcGx5IHRvIGFsbCBjaGFubmVscyB3aXRoaW4gZWFjaCBvZiB0aGUgYmFuZHMuCi0gKgotICogMikgIEZhY3RvcnktbWVhc3VyZWQgcG93ZXIgc3VwcGx5IHZvbHRhZ2UgbGV2ZWwuICBUaGlzIGlzIGFzc3VtZWQgdG8gYmUKLSAqICAgICBjb25zdGFudCAoaS5lLiBzYW1lIHZhbHVlIGFwcGxpZXMgdG8gYWxsIGNoYW5uZWxzL2JhbmRzKSB3aGlsZSB0aGUKLSAqICAgICBmYWN0b3J5IG1lYXN1cmVtZW50cyBhcmUgYmVpbmcgbWFkZS4KLSAqCi0gKiAzKSAgVXAgdG8gOCBzZXRzIG9mIGZhY3RvcnktbWVhc3VyZWQgdHhwb3dlciBjYWxpYnJhdGlvbiB2YWx1ZXMuCi0gKiAgICAgVGhlc2UgYXJlIGZvciBkaWZmZXJlbnQgZnJlcXVlbmN5IHJhbmdlcywgc2luY2UgdHhwb3dlciBnYWluCi0gKiAgICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBhbmFsb2cgcmFkaW8gY2lyY3VpdHJ5IHZhcnkgd2l0aCBmcmVxdWVuY3kuCi0gKgotICogICAgIE5vdCBhbGwgc2V0cyBuZWVkIHRvIGJlIGZpbGxlZCB3aXRoIGRhdGE7Ci0gKiAgICAgc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyBjb250YWlucyByYW5nZSBvZiBjaGFubmVscwotICogICAgICgwIGlmIHVudXNlZCkgZm9yIGVhY2ggc2V0IG9mIGRhdGEuCi0gKi8KLXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9pbmZvIHsKLQl1OCBzYXR1cmF0aW9uX3Bvd2VyMjQ7CS8qIGhhbGYtZEJtIChlLmcuICIzNCIgPSAxNyBkQm0pICovCi0JdTggc2F0dXJhdGlvbl9wb3dlcjUyOwkvKiBoYWxmLWRCbSAqLwotCXMxNiB2b2x0YWdlOwkJLyogc2lnbmVkICovCi0Jc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyBiYW5kX2luZm9bRUVQUk9NX1RYX1BPV0VSX0JBTkRTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qCi0gKiA0OTY1IEVFUFJPTSBtYXAKLSAqLwotc3RydWN0IGl3bDQ5NjVfZWVwcm9tIHsKLQl1OCByZXNlcnZlZDBbMTZdOwotI2RlZmluZSBFRVBST01fREVWSUNFX0lEICAgICAgICAgICAgICAgICAgICAoMioweDA4KQkvKiAyIGJ5dGVzICovCi0JdTE2IGRldmljZV9pZDsJCS8qIGFicy5vZnM6IDE2ICovCi0JdTggcmVzZXJ2ZWQxWzJdOwotI2RlZmluZSBFRVBST01fUE1DICAgICAgICAgICAgICAgICAgICAgICAgICAoMioweDBBKQkvKiAyIGJ5dGVzICovCi0JdTE2IHBtYzsJCS8qIGFicy5vZnM6IDIwICovCi0JdTggcmVzZXJ2ZWQyWzIwXTsKLSNkZWZpbmUgRUVQUk9NX01BQ19BRERSRVNTICAgICAgICAgICAgICAgICAgKDIqMHgxNSkJLyogNiAgYnl0ZXMgKi8KLQl1OCBtYWNfYWRkcmVzc1s2XTsJLyogYWJzLm9mczogNDIgKi8KLQl1OCByZXNlcnZlZDNbNThdOwotI2RlZmluZSBFRVBST01fQk9BUkRfUkVWSVNJT04gICAgICAgICAgICAgICAoMioweDM1KQkvKiAyICBieXRlcyAqLwotCXUxNiBib2FyZF9yZXZpc2lvbjsJLyogYWJzLm9mczogMTA2ICovCi0JdTggcmVzZXJ2ZWQ0WzExXTsKLSNkZWZpbmUgRUVQUk9NX0JPQVJEX1BCQV9OVU1CRVIgICAgICAgICAgICAgKDIqMHgzQisxKQkvKiA5ICBieXRlcyAqLwotCXU4IGJvYXJkX3BiYV9udW1iZXJbOV07CS8qIGFicy5vZnM6IDExOSAqLwotCXU4IHJlc2VydmVkNVs4XTsKLSNkZWZpbmUgRUVQUk9NX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NCkJLyogMiAgYnl0ZXMgKi8KLQl1MTYgdmVyc2lvbjsJCS8qIGFicy5vZnM6IDEzNiAqLwotI2RlZmluZSBFRVBST01fU0tVX0NBUCAgICAgICAgICAgICAgICAgICAgICAoMioweDQ1KQkvKiAxICBieXRlcyAqLwotCXU4IHNrdV9jYXA7CQkvKiBhYnMub2ZzOiAxMzggKi8KLSNkZWZpbmUgRUVQUk9NX0xFRFNfTU9ERSAgICAgICAgICAgICAgICAgICAgKDIqMHg0NSsxKQkvKiAxICBieXRlcyAqLwotCXU4IGxlZHNfbW9kZTsJCS8qIGFicy5vZnM6IDEzOSAqLwotI2RlZmluZSBFRVBST01fT0VNX01PREUgICAgICAgICAgICAgICAgICAgICAoMioweDQ2KQkvKiAyICBieXRlcyAqLwotCXUxNiBvZW1fbW9kZTsKLSNkZWZpbmUgRUVQUk9NX1dPV0xBTl9NT0RFICAgICAgICAgICAgICAgICAgKDIqMHg0NykJLyogMiAgYnl0ZXMgKi8KLQl1MTYgd293bGFuX21vZGU7CS8qIGFicy5vZnM6IDE0MiAqLwotI2RlZmluZSBFRVBST01fTEVEU19USU1FX0lOVEVSVkFMICAgICAgICAgICAoMioweDQ4KQkvKiAyICBieXRlcyAqLwotCXUxNiBsZWRzX3RpbWVfaW50ZXJ2YWw7CS8qIGFicy5vZnM6IDE0NCAqLwotI2RlZmluZSBFRVBST01fTEVEU19PRkZfVElNRSAgICAgICAgICAgICAgICAoMioweDQ5KQkvKiAxICBieXRlcyAqLwotCXU4IGxlZHNfb2ZmX3RpbWU7CS8qIGFicy5vZnM6IDE0NiAqLwotI2RlZmluZSBFRVBST01fTEVEU19PTl9USU1FICAgICAgICAgICAgICAgICAoMioweDQ5KzEpCS8qIDEgIGJ5dGVzICovCi0JdTggbGVkc19vbl90aW1lOwkvKiBhYnMub2ZzOiAxNDcgKi8KLSNkZWZpbmUgRUVQUk9NX0FMTUdPUl9NX1ZFUlNJT04gICAgICAgICAgICAgKDIqMHg0QSkJLyogMSAgYnl0ZXMgKi8KLQl1OCBhbG1nb3JfbV92ZXJzaW9uOwkvKiBhYnMub2ZzOiAxNDggKi8KLSNkZWZpbmUgRUVQUk9NX0FOVEVOTkFfU1dJVENIX1RZUEUgICAgICAgICAgKDIqMHg0QSsxKQkvKiAxICBieXRlcyAqLwotCXU4IGFudGVubmFfc3dpdGNoX3R5cGU7CS8qIGFicy5vZnM6IDE0OSAqLwotCXU4IHJlc2VydmVkNls4XTsKLSNkZWZpbmUgRUVQUk9NXzQ5NjVfQk9BUkRfUkVWSVNJT04gICAgICAgICAgKDIqMHg0RikJLyogMiBieXRlcyAqLwotCXUxNiBib2FyZF9yZXZpc2lvbl80OTY1OwkvKiBhYnMub2ZzOiAxNTggKi8KLQl1OCByZXNlcnZlZDdbMTNdOwotI2RlZmluZSBFRVBST01fNDk2NV9CT0FSRF9QQkEgICAgICAgICAgICAgICAoMioweDU2KzEpCS8qIDkgYnl0ZXMgKi8KLQl1OCBib2FyZF9wYmFfbnVtYmVyXzQ5NjVbOV07CS8qIGFicy5vZnM6IDE3MyAqLwotCXU4IHJlc2VydmVkOFsxMF07Ci0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX1NLVV9JRCAgICAgICAgICAgICgyKjB4NjApCS8qIDQgIGJ5dGVzICovCi0JdTggc2t1X2lkWzRdOwkJLyogYWJzLm9mczogMTkyICovCi0KLS8qCi0gKiBQZXItY2hhbm5lbCByZWd1bGF0b3J5IGRhdGEuCi0gKgotICogRWFjaCBjaGFubmVsIHRoYXQgKm1pZ2h0KiBiZSBzdXBwb3J0ZWQgYnkgMzk0NSBvciA0OTY1IGhhcyBhIGZpeGVkIGxvY2F0aW9uCi0gKiBpbiBFRVBST00gY29udGFpbmluZyBFRVBST01fQ0hBTk5FTF8qIHVzYWdlIGZsYWdzIChMU0IpIGFuZCBtYXggcmVndWxhdG9yeQotICogdHhwb3dlciAoTVNCKS4KLSAqCi0gKiBFbnRyaWVzIGltbWVkaWF0ZWx5IGJlbG93IGFyZSBmb3IgMjAgTUh6IGNoYW5uZWwgd2lkdGguICBGQVQgKDQwIE1IeikKLSAqIGNoYW5uZWxzIChvbmx5IGZvciA0OTY1LCBub3Qgc3VwcG9ydGVkIGJ5IDM5NDUpIGFwcGVhciBsYXRlciBpbiB0aGUgRUVQUk9NLgotICoKLSAqIDIuNCBHSHogY2hhbm5lbHMgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0Ci0gKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8xICAgICAgICAgICAgKDIqMHg2MikJLyogMiAgYnl0ZXMgKi8KLQl1MTYgYmFuZF8xX2NvdW50OwkvKiBhYnMub2ZzOiAxOTYgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8xX0NIQU5ORUxTICAgKDIqMHg2MykJLyogMjggYnl0ZXMgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBiYW5kXzFfY2hhbm5lbHNbMTRdOyAvKiBhYnMub2ZzOiAxOTYgKi8KLQotLyoKLSAqIDQuOSBHSHogY2hhbm5lbHMgMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYsCi0gKiA1LjAgR0h6IGNoYW5uZWxzIDcsIDgsIDExLCAxMiwgMTYKLSAqICg0OTE1LTUwODBNSHopIChub25lIG9mIHRoZXNlIGlzIGV2ZXIgc3VwcG9ydGVkKQotICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMiAgICAgICAgICAgICgyKjB4NzEpCS8qIDIgIGJ5dGVzICovCi0JdTE2IGJhbmRfMl9jb3VudDsJLyogYWJzLm9mczogMjI2ICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMl9DSEFOTkVMUyAgICgyKjB4NzIpCS8qIDI2IGJ5dGVzICovCi0Jc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgYmFuZF8yX2NoYW5uZWxzWzEzXTsgLyogYWJzLm9mczogMjI4ICovCi0KLS8qCi0gKiA1LjIgR0h6IGNoYW5uZWxzIDM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKLSAqICg1MTcwLTUzMjBNSHopCi0gKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8zICAgICAgICAgICAgKDIqMHg3RikJLyogMiAgYnl0ZXMgKi8KLQl1MTYgYmFuZF8zX2NvdW50OwkvKiBhYnMub2ZzOiAyNTQgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8zX0NIQU5ORUxTICAgKDIqMHg4MCkJLyogMjQgYnl0ZXMgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAvKiBhYnMub2ZzOiAyNTYgKi8KLQotLyoKLSAqIDUuNSBHSHogY2hhbm5lbHMgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKLSAqICg1NTAwLTU3MDBNSHopCi0gKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF80ICAgICAgICAgICAgKDIqMHg4QykJLyogMiAgYnl0ZXMgKi8KLQl1MTYgYmFuZF80X2NvdW50OwkvKiBhYnMub2ZzOiAyODAgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF80X0NIQU5ORUxTICAgKDIqMHg4RCkJLyogMjIgYnl0ZXMgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBiYW5kXzRfY2hhbm5lbHNbMTFdOyAvKiBhYnMub2ZzOiAyODIgKi8KLQotLyoKLSAqIDUuNyBHSHogY2hhbm5lbHMgMTQ1LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQotICogKDU3MjUtNTgyNU1IeikKLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzUgICAgICAgICAgICAoMioweDk4KQkvKiAyICBieXRlcyAqLwotCXUxNiBiYW5kXzVfY291bnQ7CS8qIGFicy5vZnM6IDMwNCAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzVfQ0hBTk5FTFMgICAoMioweDk5KQkvKiAxMiBieXRlcyAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfNV9jaGFubmVsc1s2XTsgLyogYWJzLm9mczogMzA2ICovCi0KLQl1OCByZXNlcnZlZDEwWzJdOwotCi0KLS8qCi0gKiAyLjQgR0h6IEZBVCBjaGFubmVscyAxICg1KSwgMiAoNiksIDMgKDcpLCA0ICg4KSwgNSAoOSksIDYgKDEwKSwgNyAoMTEpCi0gKgotICogVGhlIGNoYW5uZWwgbGlzdGVkIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGxvd2VyIDIwIE1IeiBoYWxmIG9mIHRoZSBjaGFubmVsLgotICogVGhlIG92ZXJhbGwgY2VudGVyIGZyZXF1ZW5jeSBpcyBhY3R1YWxseSAyIGNoYW5uZWxzICgxMCBNSHopIGFib3ZlIHRoYXQsCi0gKiBhbmQgdGhlIHVwcGVyIGhhbGYgb2YgZWFjaCBGQVQgY2hhbm5lbCBpcyBjZW50ZXJlZCA0IGNoYW5uZWxzICgyMCBNSHopIGF3YXkKLSAqIGZyb20gdGhlIGxvd2VyIGhhbGY7IGUuZy4gdGhlIHVwcGVyIGhhbGYgb2YgRkFUIGNoYW5uZWwgMSBpcyBjaGFubmVsIDUsCi0gKiBhbmQgdGhlIG92ZXJhbGwgRkFUIGNoYW5uZWwgd2lkdGggY2VudGVycyBvbiBjaGFubmVsIDMuCi0gKgotICogTk9URTogIFRoZSBSWE9OIGNvbW1hbmQgdXNlcyAyMCBNSHogY2hhbm5lbCBudW1iZXJzIHRvIHNwZWNpZnkgdGhlCi0gKiAgICAgICAgY29udHJvbCBjaGFubmVsIHRvIHdoaWNoIHRvIHR1bmUuICBSWE9OIGFsc28gc3BlY2lmaWVzIHdoZXRoZXIgdGhlCi0gKiAgICAgICAgY29udHJvbCBjaGFubmVsIGlzIHRoZSB1cHBlciBvciBsb3dlciBoYWxmIG9mIGEgRkFUIGNoYW5uZWwuCi0gKgotICogTk9URTogIDQ5NjUgZG9lcyBub3Qgc3VwcG9ydCBGQVQgY2hhbm5lbHMgb24gMi40IEdIei4KLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzI0X0ZBVF9DSEFOTkVMUyAoMioweEEwKQkvKiAxNCBieXRlcyAqLwotCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfMjRfY2hhbm5lbHNbN107IC8qIGFicy5vZnM6IDMyMCAqLwotCXU4IHJlc2VydmVkMTFbMl07Ci0KLS8qCi0gKiA1LjIgR0h6IEZBVCBjaGFubmVscyAzNiAoNDApLCA0NCAoNDgpLCA1MiAoNTYpLCA2MCAoNjQpLAotICogMTAwICgxMDQpLCAxMDggKDExMiksIDExNiAoMTIwKSwgMTI0ICgxMjgpLCAxMzIgKDEzNiksIDE0OSAoMTUzKSwgMTU3ICgxNjEpCi0gKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF81Ml9GQVRfQ0hBTk5FTFMgKDIqMHhBOCkJLyogMjIgYnl0ZXMgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBiYW5kXzUyX2NoYW5uZWxzWzExXTsgLyogYWJzLm9mczogMzM2ICovCi0JdTggcmVzZXJ2ZWQxMls2XTsKLQotLyoKLSAqIDQ5NjUgZHJpdmVyIHJlcXVpcmVzIHR4cG93ZXIgY2FsaWJyYXRpb24gZm9ybWF0IHZlcnNpb24gNSBvciBncmVhdGVyLgotICogRHJpdmVyIGRvZXMgbm90IHdvcmsgd2l0aCB0eHBvd2VyIGNhbGlicmF0aW9uIHZlcnNpb24gPCA1LgotICogVGhpcyB2YWx1ZSBpcyBzaW1wbHkgYSAxNi1iaXQgbnVtYmVyLCBubyBtYWpvci9taW5vciB2ZXJzaW9ucyBoZXJlLgotICovCi0jZGVmaW5lIEVFUFJPTV9DQUxJQl9WRVJTSU9OX09GRlNFVCAgICAgICAgICAgICgyKjB4QjYpCS8qIDIgYnl0ZXMgKi8KLQl1MTYgY2FsaWJfdmVyc2lvbjsJLyogYWJzLm9mczogMzY0ICovCi0JdTggcmVzZXJ2ZWQxM1syXTsKLQl1OCByZXNlcnZlZDE0Wzk2XTsJLyogYWJzLm9mczogMzY4ICovCi0KLS8qCi0gKiA0OTY1IFR4cG93ZXIgY2FsaWJyYXRpb24gZGF0YS4KLSAqLwotI2RlZmluZSBFRVBST01fSVdMX0NBTElCX1RYUE9XRVJfT0ZGU0VUICAgICAgICAoMioweEU4KQkvKiA0OCAgYnl0ZXMgKi8KLQlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfaW5mbyBjYWxpYl9pbmZvOwkvKiBhYnMub2ZzOiA0NjQgKi8KLQotCXU4IHJlc2VydmVkMTZbMTQwXTsJLyogZmlsbCBvdXQgdG8gZnVsbCAxMDI0IGJ5dGUgYmxvY2sgKi8KLQotCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBJV0xfRUVQUk9NX0lNQUdFX1NJWkUgMTAyNAotCi0vKiBFbmQgb2YgRUVQUk9NICovCiAKICNpbmNsdWRlICJpd2wtNDk2NS1jb21tYW5kcy5oIgogCkBAIC00MTAsMTgyICsxMDAsNiBAQAogI2RlZmluZSBQQ0lfUkVHX1dVTTggICAgICAgMHgwRTgKICNkZWZpbmUgUENJX0NGR19QTUNfUE1FX0ZST01fRDNDT0xEX1NVUFBPUlQgICAgICAgICAoMHg4MDAwMDAwMCkKIAotLyo9PT0gQ1NSIChjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzKSA9PT0qLwotI2RlZmluZSBDU1JfQkFTRSAgICAoMHgwMDApCi0KLSNkZWZpbmUgQ1NSX1NXX1ZFUiAgICAgICAgICAgICAgKENTUl9CQVNFKzB4MDAwKQotI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFRyAgICAoQ1NSX0JBU0UrMHgwMDApIC8qIGhhcmR3YXJlIGludGVyZmFjZSBjb25maWcgKi8KLSNkZWZpbmUgQ1NSX0lOVF9DT0FMRVNDSU5HICAgICAgKENTUl9CQVNFKzB4MDA0KSAvKiBhY2N1bSBpbnRzLCAzMi11c2VjIHVuaXRzICovCi0jZGVmaW5lIENTUl9JTlQgICAgICAgICAgICAgICAgIChDU1JfQkFTRSsweDAwOCkgLyogaG9zdCBpbnRlcnJ1cHQgc3RhdHVzL2FjayAqLwotI2RlZmluZSBDU1JfSU5UX01BU0sgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwMGMpIC8qIGhvc3QgaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBDU1JfRkhfSU5UX1NUQVRVUyAgICAgICAoQ1NSX0JBU0UrMHgwMTApIC8qIGJ1c21hc3RlciBpbnQgc3RhdHVzL2FjayovCi0jZGVmaW5lIENTUl9HUElPX0lOICAgICAgICAgICAgIChDU1JfQkFTRSsweDAxOCkgLyogcmVhZCBleHRlcm5hbCBjaGlwIHBpbnMgKi8KLSNkZWZpbmUgQ1NSX1JFU0VUICAgICAgICAgICAgICAgKENTUl9CQVNFKzB4MDIwKSAvKiBidXNtYXN0ZXIgZW5hYmxlLCBOTUksIGV0YyovCi0jZGVmaW5lIENTUl9HUF9DTlRSTCAgICAgICAgICAgIChDU1JfQkFTRSsweDAyNCkKLQotLyoKLSAqIEhhcmR3YXJlIHJldmlzaW9uIGluZm8KLSAqIEJpdCBmaWVsZHM6Ci0gKiAzMS04OiAgUmVzZXJ2ZWQKLSAqICA3LTQ6ICBUeXBlIG9mIGRldmljZTogIDB4MCA9IDQ5NjUsIDB4ZCA9IDM5NDUKLSAqICAzLTI6ICBSZXZpc2lvbiBzdGVwOiAgMCA9IEEsIDEgPSBCLCAyID0gQywgMyA9IEQKLSAqICAxLTA6ICAiRGFzaCIgdmFsdWUsIGFzIGluIEEtMSwgZXRjLgotICoKLSAqIE5PVEU6ICBSZXZpc2lvbiBzdGVwIGFmZmVjdHMgY2FsY3VsYXRpb24gb2YgQ0NLIHR4cG93ZXIgZm9yIDQ5NjUuCi0gKi8KLSNkZWZpbmUgQ1NSX0hXX1JFViAgICAgICAgICAgICAgKENTUl9CQVNFKzB4MDI4KQotCi0vKiBFRVBST00gcmVhZHMgKi8KLSNkZWZpbmUgQ1NSX0VFUFJPTV9SRUcgICAgICAgICAgKENTUl9CQVNFKzB4MDJjKQotI2RlZmluZSBDU1JfRUVQUk9NX0dQICAgICAgICAgICAoQ1NSX0JBU0UrMHgwMzApCi0jZGVmaW5lIENTUl9HUF9VQ09ERQkJKENTUl9CQVNFKzB4MDQ0KQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMSAgICAgICAoQ1NSX0JBU0UrMHgwNTQpCi0jZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxX1NFVCAgIChDU1JfQkFTRSsweDA1OCkKLSNkZWZpbmUgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSICAgKENTUl9CQVNFKzB4MDVjKQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMiAgICAgICAoQ1NSX0JBU0UrMHgwNjApCi0jZGVmaW5lIENTUl9HSU9fQ0hJQ0tFTl9CSVRTICAgIChDU1JfQkFTRSsweDEwMCkKLQotLyoKLSAqIEluZGljYXRlcyBoYXJkd2FyZSByZXYsIHRvIGRldGVybWluZSBDQ0sgYmFja29mZiBmb3IgdHhwb3dlciBjYWxjdWxhdGlvbi4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAgMy0yOiAgMCA9IEEsIDEgPSBCLCAyID0gQywgMyA9IEQgc3RlcAotICovCi0jZGVmaW5lIENTUl9IV19SRVZfV0FfUkVHCShDU1JfQkFTRSsweDIyQykKLQotLyogSGFyZHdhcmUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gYml0cyAqLwotI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfS0VEUk9OX1IJKDB4MDAwMDAwMTApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX01TS19CT0FSRF9WRVIJKDB4MDAwMDBDMDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9NQUNfU0kJCSgweDAwMDAwMTAwKQotI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfUkFESU9fU0kJKDB4MDAwMDAyMDApCi0jZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSAoMHgwMDIwMDAwMCkKLQotLyogaW50ZXJydXB0IGZsYWdzIGluIElOVEEsIHNldCBieSB1Q29kZSBvciBoYXJkd2FyZSAoZS5nLiBkbWEpLAotICogYWNrbm93bGVkZ2VkIChyZXNldCkgYnkgaG9zdCB3cml0aW5nICIxIiB0byBmbGFnZ2VkIGJpdHMuICovCi0jZGVmaW5lIENTUl9JTlRfQklUX0ZIX1JYICAgICAgICAoMSA8PCAzMSkgLyogUnggRE1BLCBjbWQgcmVzcG9uc2VzLCBGSF9JTlRbMTc6MTZdICovCi0jZGVmaW5lIENTUl9JTlRfQklUX0hXX0VSUiAgICAgICAoMSA8PCAyOSkgLyogRE1BIGhhcmR3YXJlIGVycm9yIEZIX0lOVFszMV0gKi8KLSNkZWZpbmUgQ1NSX0lOVF9CSVRfRE5MRCAgICAgICAgICgxIDw8IDI4KSAvKiB1Q29kZSBEb3dubG9hZCAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9GSF9UWCAgICAgICAgKDEgPDwgMjcpIC8qIFR4IERNQSBGSF9JTlRbMTowXSAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9TQ0QgICAgICAgICAgKDEgPDwgMjYpIC8qIFRYUSBwb2ludGVyIGFkdmFuY2VkICovCi0jZGVmaW5lIENTUl9JTlRfQklUX1NXX0VSUiAgICAgICAoMSA8PCAyNSkgLyogdUNvZGUgZXJyb3IgKi8KLSNkZWZpbmUgQ1NSX0lOVF9CSVRfUkZfS0lMTCAgICAgICgxIDw8IDcpICAvKiBIVyBSRktJTEwgc3dpdGNoIEdQX0NOVFJMWzI3XSB0b2dnbGVkICovCi0jZGVmaW5lIENTUl9JTlRfQklUX0NUX0tJTEwgICAgICAoMSA8PCA2KSAgLyogQ3JpdGljYWwgdGVtcCAoY2hpcCB0b28gaG90KSByZmtpbGwgKi8KLSNkZWZpbmUgQ1NSX0lOVF9CSVRfU1dfUlggICAgICAgICgxIDw8IDMpICAvKiBSeCwgY29tbWFuZCByZXNwb25zZXMsIDM5NDUgKi8KLSNkZWZpbmUgQ1NSX0lOVF9CSVRfV0FLRVVQICAgICAgICgxIDw8IDEpICAvKiBOSUMgY29udHJvbGxlciB3YWtpbmcgdXAgKHB3ciBtZ210KSAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9BTElWRSAgICAgICAgKDEgPDwgMCkgIC8qIHVDb2RlIGludGVycnVwdHMgb25jZSBpdCBpbml0aWFsaXplcyAqLwotCi0jZGVmaW5lIENTUl9JTklfU0VUX01BU0sJKENTUl9JTlRfQklUX0ZIX1JYICAgfCBcCi0JCQkJIENTUl9JTlRfQklUX0hXX0VSUiAgfCBcCi0JCQkJIENTUl9JTlRfQklUX0ZIX1RYICAgfCBcCi0JCQkJIENTUl9JTlRfQklUX1NXX0VSUiAgfCBcCi0JCQkJIENTUl9JTlRfQklUX1JGX0tJTEwgfCBcCi0JCQkJIENTUl9JTlRfQklUX1NXX1JYICAgfCBcCi0JCQkJIENTUl9JTlRfQklUX1dBS0VVUCAgfCBcCi0JCQkJIENTUl9JTlRfQklUX0FMSVZFKQotCi0vKiBpbnRlcnJ1cHQgZmxhZ3MgaW4gRkggKGZsb3cgaGFuZGxlcikgKFBDSSBidXNtYXN0ZXIgRE1BKSAqLwotI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9FUlIgICAgICAgKDEgPDwgMzEpIC8qIEVycm9yICovCi0jZGVmaW5lIENTUl9GSF9JTlRfQklUX0hJX1BSSU9SICAoMSA8PCAzMCkgLyogSGlnaCBwcmlvcml0eSBSeCwgYnlwYXNzIGNvYWxlc2NpbmcgKi8KLSNkZWZpbmUgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDEgICgxIDw8IDE3KSAvKiBSeCBjaGFubmVsIDEgKi8KLSNkZWZpbmUgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDAgICgxIDw8IDE2KSAvKiBSeCBjaGFubmVsIDAgKi8KLSNkZWZpbmUgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDEgICgxIDw8IDEpICAvKiBUeCBjaGFubmVsIDEgKi8KLSNkZWZpbmUgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDAgICgxIDw8IDApICAvKiBUeCBjaGFubmVsIDAgKi8KLQotI2RlZmluZSBDU1JfRkhfSU5UX1JYX01BU0sJKENTUl9GSF9JTlRfQklUX0hJX1BSSU9SIHwgXAotCQkJCSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMSB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDApCi0KLSNkZWZpbmUgQ1NSX0ZIX0lOVF9UWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9UWF9DSE5MMSB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDApCi0KLQotLyogUkVTRVQgKi8KLSNkZWZpbmUgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0jZGVmaW5lIENTUl9SRVNFVF9SRUdfRkxBR19GT1JDRV9OTUkgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKLSNkZWZpbmUgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCAgICAgICAgICAgKDB4MDAwMDAxMDApCi0jZGVmaW5lIENTUl9SRVNFVF9SRUdfRkxBR19TVE9QX01BU1RFUiAgICAgICAgICAgICAgICgweDAwMDAwMjAwKQotCi0vKiBHUCAoZ2VuZXJhbCBwdXJwb3NlKSBDT05UUk9MICovCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKLSNkZWZpbmUgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRICAgICAgICAgKDB4MDAwMDAwMDgpCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCAgICAgICAgICgweDAwMDAwMDEwKQotCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfVkFMX01BQ19BQ0NFU1NfRU4gICAgICAgICAgICgweDAwMDAwMDAxKQotCi0jZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfTVNLX1BPV0VSX1NBVkVfVFlQRSAgICAgICAgICgweDA3MDAwMDAwKQotI2RlZmluZSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX1BPV0VSX1NBVkUgICAgICAgICAoMHgwNDAwMDAwMCkKLSNkZWZpbmUgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cgICAgICAgICAgKDB4MDgwMDAwMDApCi0KLQotLyogRUVQUk9NIFJFRyAqLwotI2RlZmluZSBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSwkoMHgwMDAwMDAwMSkKLSNkZWZpbmUgQ1NSX0VFUFJPTV9SRUdfQklUX0NNRAkJKDB4MDAwMDAwMDIpCi0KLS8qIEVFUFJPTSBHUCAqLwotI2RlZmluZSBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSwkJKDB4MDAwMDAwMDYpCi0jZGVmaW5lIENTUl9FRVBST01fR1BfQkFEX1NJR05BVFVSRQkoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQ1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0sJKDB4MDAwMDAxODApCi0KLS8qIFVDT0RFIERSViBHUCAqLwotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQICAgICAgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQgICAgICAgICAgICgweDAwMDAwMDA0KQotI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9SRUdfQklUX0NUX0tJTExfRVhJVCAgICAgICgweDAwMDAwMDA4KQotCi0vKiBHUElPICovCi0jZGVmaW5lIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDApCi0jZGVmaW5lIENTUl9HUElPX0lOX1ZBTF9WQVVYX1BXUl9TUkMgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIENTUl9HUElPX0lOX1ZBTF9WTUFJTl9QV1JfU1JDCQlDU1JfR1BJT19JTl9CSVRfQVVYX1BPV0VSCi0KLS8qIEdJIENoaWNrZW4gQml0cyAqLwotI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlggICgweDAwODAwMDAwKQotI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUiAgKDB4MjAwMDAwMDApCi0KLS8qPT09IEhCVVMgKEhvc3Qtc2lkZSBCdXMpID09PSovCi0jZGVmaW5lIEhCVVNfQkFTRQkoMHg0MDApCi0KLS8qCi0gKiBSZWdpc3RlcnMgZm9yIGFjY2Vzc2luZyBkZXZpY2UncyBpbnRlcm5hbCBTUkFNIG1lbW9yeSAoZS5nLiBTQ0QgU1JBTQotICogc3RydWN0dXJlcywgZXJyb3IgbG9nLCBldmVudCBsb2csIHZlcmlmeWluZyB1Q29kZSBsb2FkKS4KLSAqIEZpcnN0IHdyaXRlIHRvIGFkZHJlc3MgcmVnaXN0ZXIsIHRoZW4gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGRhdGEgcmVnaXN0ZXIKLSAqIHRvIGNvbXBsZXRlIHRoZSBqb2IuICBPbmNlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGlzIHNldCB1cCwgYWNjZXNzZXMgdG8KLSAqIGRhdGEgcmVnaXN0ZXJzIGF1dG8taW5jcmVtZW50IHRoZSBhZGRyZXNzIGJ5IG9uZSBkd29yZC4KLSAqIEJpdCB1c2FnZSBmb3IgYWRkcmVzcyByZWdpc3RlcnMgKHJlYWQgb3Igd3JpdGUpOgotICogIDAtMzE6ICBtZW1vcnkgYWRkcmVzcyB3aXRoaW4gZGV2aWNlCi0gKi8KLSNkZWZpbmUgSEJVU19UQVJHX01FTV9SQUREUiAgICAgKEhCVVNfQkFTRSsweDAwYykKLSNkZWZpbmUgSEJVU19UQVJHX01FTV9XQUREUiAgICAgKEhCVVNfQkFTRSsweDAxMCkKLSNkZWZpbmUgSEJVU19UQVJHX01FTV9XREFUICAgICAgKEhCVVNfQkFTRSsweDAxOCkKLSNkZWZpbmUgSEJVU19UQVJHX01FTV9SREFUICAgICAgKEhCVVNfQkFTRSsweDAxYykKLQotLyoKLSAqIFJlZ2lzdGVycyBmb3IgYWNjZXNzaW5nIGRldmljZSdzIGludGVybmFsIHBlcmlwaGVyYWwgcmVnaXN0ZXJzCi0gKiAoZS5nLiBTQ0QsIEJTTSwgZXRjLikuICBGaXJzdCB3cml0ZSB0byBhZGRyZXNzIHJlZ2lzdGVyLAotICogdGhlbiByZWFkIGZyb20gb3Igd3JpdGUgdG8gZGF0YSByZWdpc3RlciB0byBjb21wbGV0ZSB0aGUgam9iLgotICogQml0IHVzYWdlIGZvciBhZGRyZXNzIHJlZ2lzdGVycyAocmVhZCBvciB3cml0ZSk6Ci0gKiAgMC0xNTogIHJlZ2lzdGVyIGFkZHJlc3MgKG9mZnNldCkgd2l0aGluIGRldmljZQotICogMjQtMjU6ICAoIyBieXRlcyAtIDEpIHRvIHJlYWQgb3Igd3JpdGUgKGUuZy4gMyBmb3IgZHdvcmQpCi0gKi8KLSNkZWZpbmUgSEJVU19UQVJHX1BSUEhfV0FERFIgICAgKEhCVVNfQkFTRSsweDA0NCkKLSNkZWZpbmUgSEJVU19UQVJHX1BSUEhfUkFERFIgICAgKEhCVVNfQkFTRSsweDA0OCkKLSNkZWZpbmUgSEJVU19UQVJHX1BSUEhfV0RBVCAgICAgKEhCVVNfQkFTRSsweDA0YykKLSNkZWZpbmUgSEJVU19UQVJHX1BSUEhfUkRBVCAgICAgKEhCVVNfQkFTRSsweDA1MCkKLQotLyoKLSAqIFBlci1UeC1xdWV1ZSB3cml0ZSBwb2ludGVyIChpbmRleCwgcmVhbGx5ISkgKDM5NDUgYW5kIDQ5NjUpLgotICogRHJpdmVyIHNldHMgdGhpcyB0byBpbmRpY2F0ZSBpbmRleCB0byBuZXh0IFRGRCB0aGF0IGRyaXZlciB3aWxsIGZpbGwKLSAqICgxIHBhc3QgbGF0ZXN0IGZpbGxlZCkuCi0gKiBCaXQgdXNhZ2U6Ci0gKiAgMC03OiAgcXVldWUgd3JpdGUgaW5kZXggKDAtMjU1KQotICogMTEtODogIHF1ZXVlIHNlbGVjdG9yICgwLTE1KQotICovCi0jZGVmaW5lIEhCVVNfVEFSR19XUlBUUiAgICAgICAgIChIQlVTX0JBU0UrMHgwNjApCi0KLSNkZWZpbmUgSEJVU19UQVJHX01CWF9DICAgICAgICAgKEhCVVNfQkFTRSsweDAzMCkKLQotI2RlZmluZSBIQlVTX1RBUkdfTUJYX0NfUkVHX0JJVF9DTURfQkxPQ0tFRCAgICAgICAgICgweDAwMDAwMDA0KQotCiAjZGVmaW5lIFRGRF9RVUVVRV9TSVpFX01BWCAgICAgICgyNTYpCiAKICNkZWZpbmUgSVdMX05VTV9TQ0FOX1JBVEVTICAgICAgICAgKDIpCkBAIC01OTksOSArMTEzLDYgQEAKICNkZWZpbmUgVEZEX1RYX0NNRF9TTE9UUyAyNTYKICNkZWZpbmUgVEZEX0NNRF9TTE9UUyAzMgogCi0jZGVmaW5lIFRGRF9NQVhfUEFZTE9BRF9TSVpFIChzaXplb2Yoc3RydWN0IGl3bDQ5NjVfY21kKSAtIFwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9jbWRfbWV0YSkpCi0KIC8qCiAgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwogICovCkBAIC02MTUsMTYgKzEyNiwxOCBAQAogLyogU2l6ZXMgYW5kIGFkZHJlc3NlcyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgbWVtb3J5IChTUkFNKSBpbgogICogNDk2NSdzIGVtYmVkZGVkIHByb2Nlc3Nvci4gIERyaXZlciBhY2Nlc3MgaXMgdmlhIEhCVVNfVEFSR19NRU1fKiByZWdzLiAqLwogI2RlZmluZSBSVENfSU5TVF9MT1dFUl9CT1VORAkJCSgweDAwMDAwMCkKLSNkZWZpbmUgS0RSX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTgwMDApCisjZGVmaW5lIElXTDQ5X1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTgwMDApCiAKICNkZWZpbmUgUlRDX0RBVEFfTE9XRVJfQk9VTkQJCQkoMHg4MDAwMDApCi0jZGVmaW5lIEtEUl9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODBBMDAwKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODBBMDAwKQogCi0jZGVmaW5lIEtEUl9SVENfSU5TVF9TSVpFICAgIChLRFJfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgS0RSX1JUQ19EQVRBX1NJWkUgICAgKEtEUl9SVENfREFUQV9VUFBFUl9CT1VORCAtIFJUQ19EQVRBX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w0OV9SVENfSU5TVF9TSVpFCVwKKwkJCShJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFJUQ19JTlNUX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFCVwKKwkJCShJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORCAtIFJUQ19EQVRBX0xPV0VSX0JPVU5EKQogCi0jZGVmaW5lIElXTF9NQVhfSU5TVF9TSVpFIEtEUl9SVENfSU5TVF9TSVpFCi0jZGVmaW5lIElXTF9NQVhfREFUQV9TSVpFIEtEUl9SVENfREFUQV9TSVpFCisjZGVmaW5lIElXTF9NQVhfSU5TVF9TSVpFIElXTDQ5X1JUQ19JTlNUX1NJWkUKKyNkZWZpbmUgSVdMX01BWF9EQVRBX1NJWkUgSVdMNDlfUlRDX0RBVEFfU0laRQogCiAvKiBTaXplIG9mIHVDb2RlIGluc3RydWN0aW9uIG1lbW9yeSBpbiBib290c3RyYXAgc3RhdGUgbWFjaGluZSAqLwogI2RlZmluZSBJV0xfTUFYX0JTTV9TSVpFIEJTTV9TUkFNX1NJWkUKQEAgLTYzMiw3ICsxNDUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgaXdsNDk2NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQogewogCXJldHVybiAoYWRkciA+PSBSVENfREFUQV9MT1dFUl9CT1VORCkgJiYKLQkgICAgICAgKGFkZHIgPCBLRFJfUlRDX0RBVEFfVVBQRVJfQk9VTkQpOworCSAgICAgICAoYWRkciA8IElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiBTVEFSVCBURU1QRVJBVFVSRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTg3MiwxMCArMTM4NSwxMCBAQAogICogdXAgdG8gNyBETUEgY2hhbm5lbHMgKEZJRk9zKS4gIEVhY2ggVHggcXVldWUgaXMgc3VwcG9ydGVkIGJ5IGEgY2lyY3VsYXIgYXJyYXkKICAqIGluIERSQU0gY29udGFpbmluZyAyNTYgVHJhbnNtaXQgRnJhbWUgRGVzY3JpcHRvcnMgKFRGRHMpLgogICovCi0jZGVmaW5lIElXTDQ5NjVfTUFYX1dJTl9TSVpFICAgICAgICAgICAgICA2NAotI2RlZmluZSBJV0w0OTY1X1FVRVVFX1NJWkUgICAgICAgICAgICAgICAyNTYKLSNkZWZpbmUgSVdMNDk2NV9OVU1fRklGT1MgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIElXTF9NQVhfTlVNX1FVRVVFUyAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJV0w0OTY1X01BWF9XSU5fU0laRQk2NAorI2RlZmluZSBJV0w0OTY1X1FVRVVFX1NJWkUJMjU2CisjZGVmaW5lIElXTDQ5NjVfTlVNX0ZJRk9TCTcKKyNkZWZpbmUgSVdMNDk2NV9NQVhfTlVNX1FVRVVFUwkxNgogCiAKIC8qKgpAQCAtMjA0MCwzMCArMTU1MywzMCBAQAogICovCiBzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQgewogCXN0cnVjdCBpd2w0OTY1X3NjaGVkX3F1ZXVlX2J5dGVfY250X3RibAotCSBxdWV1ZXNfYnl0ZV9jbnRfdGJsc1tJV0xfTUFYX05VTV9RVUVVRVNdOwotCV9fbGUzMiB2YWwwOworCSBxdWV1ZXNfYnl0ZV9jbnRfdGJsc1tJV0w0OTY1X01BWF9OVU1fUVVFVUVTXTsKKwlfX2xlMzIgcmJfY2xvc2VkOwogCiAJLyogX19sZTMyIHJiX2Nsb3NlZF9zdHRzX3JiX251bToxMjsgKi8KICNkZWZpbmUgSVdMX3JiX2Nsb3NlZF9zdHRzX3JiX251bV9QT1MgMAogI2RlZmluZSBJV0xfcmJfY2xvc2VkX3N0dHNfcmJfbnVtX0xFTiAxMgotI2RlZmluZSBJV0xfcmJfY2xvc2VkX3N0dHNfcmJfbnVtX1NZTSB2YWwwCisjZGVmaW5lIElXTF9yYl9jbG9zZWRfc3R0c19yYl9udW1fU1lNIHJiX2Nsb3NlZAogCS8qIF9fbGUzMiByc3J2MTo0OyAqLwogCS8qIF9fbGUzMiByYl9jbG9zZWRfc3R0c19yeF9mcmFtZV9udW06MTI7ICovCiAjZGVmaW5lIElXTF9yYl9jbG9zZWRfc3R0c19yeF9mcmFtZV9udW1fUE9TIDE2CiAjZGVmaW5lIElXTF9yYl9jbG9zZWRfc3R0c19yeF9mcmFtZV9udW1fTEVOIDEyCi0jZGVmaW5lIElXTF9yYl9jbG9zZWRfc3R0c19yeF9mcmFtZV9udW1fU1lNIHZhbDAKKyNkZWZpbmUgSVdMX3JiX2Nsb3NlZF9zdHRzX3J4X2ZyYW1lX251bV9TWU0gcmJfY2xvc2VkCiAJLyogX19sZTMyIHJzcnYyOjQ7ICovCiAKLQlfX2xlMzIgdmFsMTsKKwlfX2xlMzIgZnJtX2ZpbmlzaGVkOwogCS8qIF9fbGUzMiBmcmFtZV9maW5pc2hlZF9zdHRzX3JiX251bToxMjsgKi8KICNkZWZpbmUgSVdMX2ZyYW1lX2ZpbmlzaGVkX3N0dHNfcmJfbnVtX1BPUyAwCiAjZGVmaW5lIElXTF9mcmFtZV9maW5pc2hlZF9zdHRzX3JiX251bV9MRU4gMTIKLSNkZWZpbmUgSVdMX2ZyYW1lX2ZpbmlzaGVkX3N0dHNfcmJfbnVtX1NZTSB2YWwxCisjZGVmaW5lIElXTF9mcmFtZV9maW5pc2hlZF9zdHRzX3JiX251bV9TWU0gZnJtX2ZpbmlzaGVkCiAJLyogX19sZTMyIHJzcnYzOjQ7ICovCiAJLyogX19sZTMyIGZyYW1lX2ZpbmlzaGVkX3N0dHNfcnhfZnJhbWVfbnVtOjEyOyAqLwogI2RlZmluZSBJV0xfZnJhbWVfZmluaXNoZWRfc3R0c19yeF9mcmFtZV9udW1fUE9TIDE2CiAjZGVmaW5lIElXTF9mcmFtZV9maW5pc2hlZF9zdHRzX3J4X2ZyYW1lX251bV9MRU4gMTIKLSNkZWZpbmUgSVdMX2ZyYW1lX2ZpbmlzaGVkX3N0dHNfcnhfZnJhbWVfbnVtX1NZTSB2YWwxCisjZGVmaW5lIElXTF9mcmFtZV9maW5pc2hlZF9zdHRzX3J4X2ZyYW1lX251bV9TWU0gZnJtX2ZpbmlzaGVkCiAJLyogX19sZTMyIHJzcnY0OjQ7ICovCiAKIAlfX2xlMzIgcGFkZGluZzE7ICAvKiBzbyB0aGF0IGFsbG9jYXRpb24gd2lsbCBiZSBhbGlnbmVkIHRvIDE2QiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGEwYjU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9faXdsNDk2NV9pb19oX18KLSNkZWZpbmUgX19pd2w0OTY1X2lvX2hfXwotCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgIml3bC00OTY1LWRlYnVnLmgiCi0KLS8qCi0gKiBJTywgcmVnaXN0ZXIsIGFuZCBOSUMgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKLSAqCi0gKiBOT1RFIG9uIG5hbWluZyBjb252ZW50aW9uIGFuZCBtYWNybyB1c2FnZSBmb3IgdGhlc2UKLSAqCi0gKiBBIHNpbmdsZSBfIHByZWZpeCBiZWZvcmUgYSBhbiBhY2Nlc3MgZnVuY3Rpb24gbWVhbnMgdGhhdCBubyBzdGF0ZQotICogY2hlY2sgb3IgZGVidWcgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCB3aGVuIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLgotICoKLSAqIEEgZG91YmxlIF9fIHByZWZpeCBiZWZvcmUgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgc3RhdGUgaXMgY2hlY2tlZAotICogYW5kIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIGlzIHByaW50ZWQgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGRlYnVnIG91dHB1dC4KLSAqCi0gKiBUaGUgbm9uLXByZWZpeGVkIG5hbWUgaXMgdGhlICNkZWZpbmUgdGhhdCBtYXBzIHRoZSBjYWxsZXIgaW50byBhCi0gKiAjZGVmaW5lIHRoYXQgcHJvdmlkZXMgdGhlIGNhbGxlcidzIF9fTElORV9fIHRvIHRoZSBkb3VibGUgcHJlZml4IHZlcnNpb24uCi0gKgotICogSWYgeW91IHdpc2ggdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aG91dCBhbnkgZGVidWcgb3Igc3RhdGUgY2hlY2tpbmcsCi0gKiB5b3Ugc2hvdWxkIHVzZSB0aGUgc2luZ2xlIF8gcHJlZml4IHZlcnNpb24gKGFzIGlzIHVzZWQgYnkgZGVwZW5kZW50IElPCi0gKiByb3V0aW5lcywgZm9yIGV4YW1wbGUgX2l3bDQ5NjVfcmVhZF9kaXJlY3QzMiBjYWxscyB0aGUgbm9uLWNoZWNrIHZlcnNpb24gb2YKLSAqIF9pd2w0OTY1X3JlYWQzMi4pCi0gKgotICogVGhlc2UgZGVjbGFyYXRpb25zIGFyZSAqZXh0cmVtZWx5KiB1c2VmdWwgaW4gcXVpY2tseSBpc29sYXRpbmcgY29kZSBkZWx0YXMKLSAqIHdoaWNoIHJlc3VsdCBpbiBtaXNjb25maWd1cmluZyBvZiB0aGUgaGFyZHdhcmUgSS9PLiAgSW4gY29tYmluYXRpb24gd2l0aAotICogZ2l0LWJpc2VjdCBhbmQgdGhlIElPIGRlYnVnIGxldmVsIHlvdSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljCi0gKiBjb21taXQgd2hpY2ggYnJlYWtzIHRoZSBJTyBzZXF1ZW5jZSB0byB0aGUgaGFyZHdhcmUuCi0gKgotICovCi0KLSNkZWZpbmUgX2l3bDQ5NjVfd3JpdGUzMihpd2wsIG9mcywgdmFsKSB3cml0ZWwoKHZhbCksIChpd2wpLT5od19iYXNlICsgKG9mcykpCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDQ5NjVfd3JpdGUzMihjb25zdCBjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bDQ5NjVfcHJpdiAqaXdsLAotCQkJCSB1MzIgb2ZzLCB1MzIgdmFsKQotewotCUlXTF9ERUJVR19JTygid3JpdGUzMigweCUwOFgsIDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCB2YWwsIGYsIGwpOwotCV9pd2w0OTY1X3dyaXRlMzIoaXdsLCBvZnMsIHZhbCk7Ci19Ci0jZGVmaW5lIGl3bDQ5NjVfd3JpdGUzMihpd2wsIG9mcywgdmFsKSBcCi0JX19pd2w0OTY1X3dyaXRlMzIoX19GSUxFX18sIF9fTElORV9fLCBpd2wsIG9mcywgdmFsKQotI2Vsc2UKLSNkZWZpbmUgaXdsNDk2NV93cml0ZTMyKGl3bCwgb2ZzLCB2YWwpIF9pd2w0OTY1X3dyaXRlMzIoaXdsLCBvZnMsIHZhbCkKLSNlbmRpZgotCi0jZGVmaW5lIF9pd2w0OTY1X3JlYWQzMihpd2wsIG9mcykgcmVhZGwoKGl3bCktPmh3X2Jhc2UgKyAob2ZzKSkKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotc3RhdGljIGlubGluZSB1MzIgX19pd2w0OTY1X3JlYWQzMihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bDQ5NjVfcHJpdiAqaXdsLCB1MzIgb2ZzKQotewotCUlXTF9ERUJVR19JTygicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7Ci0JcmV0dXJuIF9pd2w0OTY1X3JlYWQzMihpd2wsIG9mcyk7Ci19Ci0jZGVmaW5lIGl3bDQ5NjVfcmVhZDMyKGl3bCwgb2ZzKSBfX2l3bDQ5NjVfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgaXdsLCBvZnMpCi0jZWxzZQotI2RlZmluZSBpd2w0OTY1X3JlYWQzMihwLCBvKSBfaXdsNDk2NV9yZWFkMzIocCwgbykKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBfaXdsNDk2NV9wb2xsX2JpdChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgYWRkciwKLQkJCQl1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCBpID0gMDsKLQotCWRvIHsKLQkJaWYgKChfaXdsNDk2NV9yZWFkMzIocHJpdiwgYWRkcikgJiBtYXNrKSA9PSAoYml0cyAmIG1hc2spKQotCQkJcmV0dXJuIGk7Ci0JCW1kZWxheSgxMCk7Ci0JCWkgKz0gMTA7Ci0JfSB3aGlsZSAoaSA8IHRpbWVvdXQpOwotCi0JcmV0dXJuIC1FVElNRURPVVQ7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsNDk2NV9wb2xsX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJIHUzMiBiaXRzLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCi17Ci0JaW50IHJldCA9IF9pd2w0OTY1X3BvbGxfYml0KHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpOwotCWlmICh1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpKQotCQlJV0xfREVCVUdfSU8KLQkJICAgICgicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSB0aW1lZG91dCAtICVzICVkXG4iLAotCQkgICAgIGFkZHIsIGJpdHMsIG1hc2ssIGYsIGwpOwotCWVsc2UKLQkJSVdMX0RFQlVHX0lPCi0JCSAgICAoInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpID0gMHglMDhYIC0gJXMgJWRcbiIsCi0JCSAgICAgYWRkciwgYml0cywgbWFzaywgcmV0LCBmLCBsKTsKLQlyZXR1cm4gcmV0OwotfQotI2RlZmluZSBpd2w0OTY1X3BvbGxfYml0KGl3bCwgYWRkciwgYml0cywgbWFzaywgdGltZW91dCkgXAotCV9faXdsNDk2NV9wb2xsX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIGl3bCwgYWRkciwgYml0cywgbWFzaywgdGltZW91dCkKLSNlbHNlCi0jZGVmaW5lIGl3bDQ5NjVfcG9sbF9iaXQocCwgYSwgYiwgbSwgdCkgX2l3bDQ5NjVfcG9sbF9iaXQocCwgYSwgYiwgbSwgdCkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2l3bDQ5NjVfc2V0X2JpdChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlfaXdsNDk2NV93cml0ZTMyKHByaXYsIHJlZywgX2l3bDQ5NjVfcmVhZDMyKHByaXYsIHJlZykgfCBtYXNrKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsNDk2NV9zZXRfYml0KGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCSBzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDQ5NjVfcmVhZDMyKHByaXYsIHJlZykgfCBtYXNrOwotCUlXTF9ERUJVR19JTygic2V0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKLQlfaXdsNDk2NV93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLSNkZWZpbmUgaXdsNDk2NV9zZXRfYml0KHAsIHIsIG0pIF9faXdsNDk2NV9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSkKLSNlbHNlCi0jZGVmaW5lIGl3bDQ5NjVfc2V0X2JpdChwLCByLCBtKSBfaXdsNDk2NV9zZXRfYml0KHAsIHIsIG0pCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2w0OTY1X2NsZWFyX2JpdChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlfaXdsNDk2NV93cml0ZTMyKHByaXYsIHJlZywgX2l3bDQ5NjVfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzayk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDQ5NjVfY2xlYXJfYml0KGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCSAgIHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXUzMiB2YWwgPSBfaXdsNDk2NV9yZWFkMzIocHJpdiwgcmVnKSAmIH5tYXNrOwotCUlXTF9ERUJVR19JTygiY2xlYXJfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WFxuIiwgcmVnLCBtYXNrLCB2YWwpOwotCV9pd2w0OTY1X3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwotfQotI2RlZmluZSBpd2w0OTY1X2NsZWFyX2JpdChwLCByLCBtKSBfX2l3bDQ5NjVfY2xlYXJfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSkKLSNlbHNlCi0jZGVmaW5lIGl3bDQ5NjVfY2xlYXJfYml0KHAsIHIsIG0pIF9pd2w0OTY1X2NsZWFyX2JpdChwLCByLCBtKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9pd2w0OTY1X2dyYWJfbmljX2FjY2VzcyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQotewotCWludCByZXQ7Ci0JdTMyIGdwX2N0bDsKLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi0JaWYgKGF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKLQkgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJXQVJOSU5HOiBSZXF1ZXN0aW5nIE1BQyBhY2Nlc3MgZHVyaW5nIFJGS0lMTCAiCi0JCQkid2FrZXMgdXAgTklDXG4iKTsKLQotCQkvKiAxMCBtc2VjIGFsbG93cyB0aW1lIGZvciBOSUMgdG8gY29tcGxldGUgaXRzIGRhdGEgc2F2ZSAqLwotCQlncF9jdGwgPSBfaXdsNDk2NV9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKLQkJaWYgKGdwX2N0bCAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkpIHsKLQkJCUlXTF9ERUJVR19SRl9LSUxMKCJXYWl0IGZvciBjb21wbGV0ZSBwb3dlci1kb3duLCAiCi0JCQkJImdwY3RsID0gMHglMDh4XG4iLCBncF9jdGwpOwotCQkJbWRlbGF5KDEwKTsKLQkJfSBlbHNlCi0JCQlJV0xfREVCVUdfUkZfS0lMTCgicG93ZXItZG93biBjb21wbGV0ZSwgIgotCQkJCQkgICJncGN0bCA9IDB4JTA4eFxuIiwgZ3BfY3RsKTsKLQl9Ci0KLQkvKiB0aGlzIGJpdCB3YWtlcyB1cCB0aGUgTklDICovCi0JX2l3bDQ5NjVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JcmV0ID0gX2l3bDQ5NjVfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKLQkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCA1MCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJSVdMX0VSUk9SKCJNQUMgaXMgaW4gZGVlcCBzbGVlcCFcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotCWF0b21pY19pbmMoJnByaXYtPnJlc3RyaWN0X3JlZmNudCk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi1zdGF0aWMgaW5saW5lIGludCBfX2l3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCQkgICAgICAgc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9ERUJVR19JTkZPKCJHcmFiYmluZyBhY2Nlc3Mgd2hpbGUgYWxyZWFkeSBoZWxkIGF0ICIKLQkJCSAgICAgICAibGluZSAlZC5cbiIsIGwpOwotCi0JSVdMX0RFQlVHX0lPKCJncmFiYmluZyBuaWMgYWNjZXNzIC0gJXMgJWRcbiIsIGYsIGwpOwotCXJldHVybiBfaXdsNDk2NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKLQlfX2l3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdikKLSNlbHNlCi0jZGVmaW5lIGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsNDk2NV9ncmFiX25pY19hY2Nlc3MocHJpdikKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2l3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLSNlbmRpZgotCQlfaXdsNDk2NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJICAgICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCQkgICAgc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkgPD0gMCkKLQkJSVdMX0VSUk9SKCJSZWxlYXNlIHVuaGVsZCBuaWMgYWNjZXNzIGF0IGxpbmUgJWQuXG4iLCBsKTsKLQotCUlXTF9ERUJVR19JTygicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7Ci0JX2l3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotfQotI2RlZmluZSBpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCi0JX19pd2w0OTY1X3JlbGVhc2VfbmljX2FjY2VzcyhfX0ZJTEVfXywgX19MSU5FX18sIHByaXYpCi0jZWxzZQotI2RlZmluZSBpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCi0JX2l3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bDQ5NjVfcmVhZF9kaXJlY3QzMihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCXJldHVybiBfaXdsNDk2NV9yZWFkMzIocHJpdiwgcmVnKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotc3RhdGljIGlubGluZSB1MzIgX19pd2w0OTY1X3JlYWRfZGlyZWN0MzIoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JdTMyIHZhbHVlID0gX2l3bDQ5NjVfcmVhZF9kaXJlY3QzMihwcml2LCByZWcpOwotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzICVkXG4iLCBmLCBsKTsKLQlJV0xfREVCVUdfSU8oInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWQgXG4iLCByZWcsIHZhbHVlLAotCQkgICAgIGYsIGwpOwotCXJldHVybiB2YWx1ZTsKLX0KLSNkZWZpbmUgaXdsNDk2NV9yZWFkX2RpcmVjdDMyKHByaXYsIHJlZykgXAotCV9faXdsNDk2NV9yZWFkX2RpcmVjdDMyKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdiwgcmVnKQotI2Vsc2UKLSNkZWZpbmUgaXdsNDk2NV9yZWFkX2RpcmVjdDMyIF9pd2w0OTY1X3JlYWRfZGlyZWN0MzIKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2l3bDQ5NjVfd3JpdGVfZGlyZWN0MzIoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQkJIHUzMiByZWcsIHUzMiB2YWx1ZSkKLXsKLQlfaXdsNDk2NV93cml0ZTMyKHByaXYsIHJlZywgdmFsdWUpOwotfQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi1zdGF0aWMgdm9pZCBfX2l3bDQ5NjVfd3JpdGVfZGlyZWN0MzIodTMyIGxpbmUsCi0JCQkJICAgc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tIGxpbmUgJWRcbiIsIGxpbmUpOwotCV9pd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpOwotfQotI2RlZmluZSBpd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpIFwKLQlfX2l3bDQ5NjVfd3JpdGVfZGlyZWN0MzIoX19MSU5FX18sIHByaXYsIHJlZywgdmFsdWUpCi0jZWxzZQotI2RlZmluZSBpd2w0OTY1X3dyaXRlX2RpcmVjdDMyIF9pd2w0OTY1X3dyaXRlX2RpcmVjdDMyCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIGl3bDQ5NjVfd3JpdGVfcmVnX2J1ZihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCQkgICAgICAgdTMyIHJlZywgdTMyIGxlbiwgdTMyICp2YWx1ZXMpCi17Ci0JdTMyIGNvdW50ID0gc2l6ZW9mKHUzMik7Ci0KLQlpZiAoKHByaXYgIT0gTlVMTCkgJiYgKHZhbHVlcyAhPSBOVUxMKSkgewotCQlmb3IgKDsgMCA8IGxlbjsgbGVuIC09IGNvdW50LCByZWcgKz0gY291bnQsIHZhbHVlcysrKQotCQkJX2l3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCAqdmFsdWVzKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9pd2w0OTY1X3BvbGxfZGlyZWN0X2JpdChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCQkgICB1MzIgYWRkciwgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCBpID0gMDsKLQotCWRvIHsKLQkJaWYgKChfaXdsNDk2NV9yZWFkX2RpcmVjdDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gbWFzaykKLQkJCXJldHVybiBpOwotCQltZGVsYXkoMTApOwotCQlpICs9IDEwOwotCX0gd2hpbGUgKGkgPCB0aW1lb3V0KTsKLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsNDk2NV9wb2xsX2RpcmVjdF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCQkgICAgdTMyIGFkZHIsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmV0ICA9IF9pd2w0OTY1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKLQotCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKLQkJCSAgICAgInRpbWVkb3V0IC0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIGYsIGwpOwotCWVsc2UKLQkJSVdMX0RFQlVHX0lPKCJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYICIKLQkJCSAgICAgIi0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIHJldCwgZiwgbCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNkZWZpbmUgaXdsNDk2NV9wb2xsX2RpcmVjdF9iaXQoaXdsLCBhZGRyLCBtYXNrLCB0aW1lb3V0KSBcCi0JX19pd2w0OTY1X3BvbGxfZGlyZWN0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIGl3bCwgYWRkciwgbWFzaywgdGltZW91dCkKLSNlbHNlCi0jZGVmaW5lIGl3bDQ5NjVfcG9sbF9kaXJlY3RfYml0IF9pd2w0OTY1X3BvbGxfZGlyZWN0X2JpdAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdTMyIF9pd2w0OTY1X3JlYWRfcHJwaChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCV9pd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1JBRERSLCByZWcgfCAoMyA8PCAyNCkpOwotCXJldHVybiBfaXdsNDk2NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1JEQVQpOwotfQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHUzMiBfX2l3bDQ5NjVfcmVhZF9wcnBoKHUzMiBsaW5lLCBzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tIGxpbmUgJWRcbiIsIGxpbmUpOwotCXJldHVybiBfaXdsNDk2NV9yZWFkX3BycGgocHJpdiwgcmVnKTsKLX0KLQotI2RlZmluZSBpd2w0OTY1X3JlYWRfcHJwaChwcml2LCByZWcpIFwKLQlfX2l3bDQ5NjVfcmVhZF9wcnBoKF9fTElORV9fLCBwcml2LCByZWcpCi0jZWxzZQotI2RlZmluZSBpd2w0OTY1X3JlYWRfcHJwaCBfaXdsNDk2NV9yZWFkX3BycGgKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2l3bDQ5NjVfd3JpdGVfcHJwaChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCQkgICAgIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCV9pd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1dBRERSLAotCQkJICAgICAgKChhZGRyICYgMHgwMDAwRkZGRikgfCAoMyA8PCAyNCkpKTsKLQlfaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9XREFULCB2YWwpOwotfQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2w0OTY1X3dyaXRlX3BycGgodTMyIGxpbmUsIHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBmcm9tIGxpbmUgJWRcbiIsIGxpbmUpOwotCV9pd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKLX0KLQotI2RlZmluZSBpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKSBcCi0JX19pd2w0OTY1X3dyaXRlX3BycGgoX19MSU5FX18sIHByaXYsIGFkZHIsIHZhbCk7Ci0jZWxzZQotI2RlZmluZSBpd2w0OTY1X3dyaXRlX3BycGggX2l3bDQ5NjVfd3JpdGVfcHJwaAotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDQ5NjVfc2V0X2JpdHNfcHJwaChwcml2LCByZWcsIG1hc2spIFwKLQlfaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIHJlZywgKF9pd2w0OTY1X3JlYWRfcHJwaChwcml2LCByZWcpIHwgbWFzaykpCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDQ5NjVfc2V0X2JpdHNfcHJwaCh1MzIgbGluZSwgc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQkJdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0KLQlfaXdsNDk2NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzayk7Ci19Ci0jZGVmaW5lIGl3bDQ5NjVfc2V0X2JpdHNfcHJwaChwcml2LCByZWcsIG1hc2spIFwKLQlfX2l3bDQ5NjVfc2V0X2JpdHNfcHJwaChfX0xJTkVfXywgcHJpdiwgcmVnLCBtYXNrKQotI2Vsc2UKLSNkZWZpbmUgaXdsNDk2NV9zZXRfYml0c19wcnBoIF9pd2w0OTY1X3NldF9iaXRzX3BycGgKLSNlbmRpZgotCi0jZGVmaW5lIF9pd2w0OTY1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spIFwKLQlfaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIHJlZywgKChfaXdsNDk2NV9yZWFkX3BycGgocHJpdiwgcmVnKSAmIG1hc2spIHwgYml0cykpCi0KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsNDk2NV9zZXRfYml0c19tYXNrX3BycGgodTMyIGxpbmUsCi0JCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBiaXRzLCB1MzIgbWFzaykKLXsKLQlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSBsaW5lICVkXG4iLCBsaW5lKTsKLQlfaXdsNDk2NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKTsKLX0KLSNkZWZpbmUgaXdsNDk2NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCi0JX19pd2w0OTY1X3NldF9iaXRzX21hc2tfcHJwaChfX0xJTkVfXywgcHJpdiwgcmVnLCBiaXRzLCBtYXNrKQotI2Vsc2UKLSNkZWZpbmUgaXdsNDk2NV9zZXRfYml0c19tYXNrX3BycGggX2l3bDQ5NjVfc2V0X2JpdHNfbWFza19wcnBoCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIGl3bDQ5NjVfY2xlYXJfYml0c19wcnBoKHN0cnVjdCBpd2w0OTY1X3ByaXYKLQkJCQkJCSAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JdTMyIHZhbCA9IF9pd2w0OTY1X3JlYWRfcHJwaChwcml2LCByZWcpOwotCV9pd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAodmFsICYgfm1hc2spKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgaXdsNDk2NV9yZWFkX3RhcmdfbWVtKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUzMiBhZGRyKQotewotCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgYWRkcik7Ci0JcmV0dXJuIGl3bDQ5NjVfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsNDk2NV93cml0ZV90YXJnX21lbShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQlpd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9XREFULCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsNDk2NV93cml0ZV90YXJnX21lbV9idWYoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJCSAgdTMyIGxlbiwgdTMyICp2YWx1ZXMpCi17Ci0JaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dBRERSLCBhZGRyKTsKLQlmb3IgKDsgMCA8IGxlbjsgbGVuIC09IHNpemVvZih1MzIpLCB2YWx1ZXMrKykKLQkJaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsICp2YWx1ZXMpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmMKaW5kZXggZDA2NDYyMi4uYjYwOGUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiw5ICszNiwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKLSNpbmNsdWRlICIuLi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3JhdGUuaCIKKyNpbmNsdWRlICIuLi9uZXQvbWFjODAyMTEvcmF0ZS5oIgogCiAjaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAKICNkZWZpbmUgUlNfTkFNRSAiaXdsLTQ5NjUtcnMiCkBAIC04Myw3ICs4NCw3IEBACiAvKioKICAqIHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvIC0tIHR4IHBhcmFtcyBhbmQgc3VjY2VzcyBoaXN0b3J5IGZvciBhbGwgcmF0ZXMKICAqCi0gKiBUaGVyZSBhcmUgdHdvIG9mIHRoZXNlIGluIHN0cnVjdCBpd2xfcmF0ZV9zY2FsZV9wcml2LAorICogVGhlcmUgYXJlIHR3byBvZiB0aGVzZSBpbiBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEsCiAgKiBvbmUgZm9yICJhY3RpdmUiLCBhbmQgb25lIGZvciAic2VhcmNoIi4KICAqLwogc3RydWN0IGl3bDQ5NjVfc2NhbGVfdGJsX2luZm8gewpAQCAtOTgsOCArOTksMjMgQEAKIAlzdHJ1Y3QgaXdsNDk2NV9yYXRlX3NjYWxlX2RhdGEgd2luW0lXTF9SQVRFX0NPVU5UXTsgLyogcmF0ZSBoaXN0b3JpZXMgKi8KIH07CiAKKyNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAorCitzdHJ1Y3QgaXdsNDk2NV90cmFmZmljX2xvYWQgeworCXVuc2lnbmVkIGxvbmcgdGltZV9zdGFtcDsJLyogYWdlIG9mIHRoZSBvbGRlc3Qgc3RhdGlzdGljcyAqLworCXUzMiBwYWNrZXRfY291bnRbVElEX1FVRVVFX01BWF9TSVpFXTsgICAvKiBwYWNrZXQgY291bnQgaW4gdGhpcyB0aW1lCisJCQkJCQkgKiBzbGljZSAqLworCXUzMiB0b3RhbDsJCQkvKiB0b3RhbCBudW0gb2YgcGFja2V0cyBkdXJpbmcgdGhlCisJCQkJCSAqIGxhc3QgVElEX01BWF9USU1FX0RJRkYgKi8KKwl1OCBxdWV1ZV9jb3VudDsJCQkvKiBudW1iZXIgb2YgcXVldWVzIHRoYXQgaGFzCisJCQkJCSAqIGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdCBjbGVhbnVwICovCisJdTggaGVhZDsJCQkvKiBzdGFydCBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyICovCit9OworCisjZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KKwogLyoqCi0gKiBzdHJ1Y3QgaXdsX3JhdGVfc2NhbGVfcHJpdiAtLSBkcml2ZXIncyByYXRlIHNjYWxpbmcgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAtLSBkcml2ZXIncyByYXRlIHNjYWxpbmcgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCiAgKiBQb2ludGVyIHRvIHRoaXMgZ2V0cyBwYXNzZWQgYmFjayBhbmQgZm9ydGggYmV0d2VlbiBkcml2ZXIgYW5kIG1hYzgwMjExLgogICovCkBAIC0xMjQsNyArMTQwLDcgQEAKIAl1OCB2YWxpZF9hbnRlbm5hOwogCXU4IGlzX2dyZWVuOwogCXU4IGlzX2R1cDsKLQl1OCBwaHltb2RlOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAl1OCBpYnNzX3N0YV9hZGRlZDsKIAogCS8qIFRoZSBmb2xsb3dpbmcgYXJlIGJpdG1hcHMgb2YgcmF0ZXM7IElXTF9SQVRFXzZNX01BU0ssIGV0Yy4gKi8KQEAgLTEzNCwyMyArMTUwLDMwIEBACiAJdTE2IGFjdGl2ZV9taW1vX3JhdGU7CiAJdTE2IGFjdGl2ZV9yYXRlX2Jhc2ljOwogCi0Jc3RydWN0IGl3bDQ5NjVfbGlua19xdWFsaXR5X2NtZCBscTsKKwlzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgbHE7CiAJc3RydWN0IGl3bDQ5NjVfc2NhbGVfdGJsX2luZm8gbHFfaW5mb1tMUV9TSVpFXTsgLyogImFjdGl2ZSIsICJzZWFyY2giICovCisjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKKwlzdHJ1Y3QgaXdsNDk2NV90cmFmZmljX2xvYWQgbG9hZFtUSURfTUFYX0xPQURfQ09VTlRdOworCXU4IHR4X2FnZ190aWRfZW47CisjZW5kaWYKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogCXN0cnVjdCBkZW50cnkgKnJzX3N0YV9kYmdmc19zY2FsZV90YWJsZV9maWxlOwogCXN0cnVjdCBkZW50cnkgKnJzX3N0YV9kYmdmc19zdGF0c190YWJsZV9maWxlOworI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJc3RydWN0IGRlbnRyeSAqcnNfc3RhX2RiZ2ZzX3R4X2FnZ190aWRfZW5fZmlsZTsKKyNlbmRpZgogCXN0cnVjdCBpd2w0OTY1X3JhdGUgZGJnX2ZpeGVkOwotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKmRydjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKmRydjsKICNlbmRpZgogfTsKIAotc3RhdGljIHZvaWQgcnNfcmF0ZV9zY2FsZV9wZXJmb3JtKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCByc19yYXRlX3NjYWxlX3BlcmZvcm0oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiBzdGF0aWMgdm9pZCByc19maWxsX2xpbmtfY21kKHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhLAogCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9yYXRlICp0eF9tY3MsCi0JCQkgICAgIHN0cnVjdCBpd2w0OTY1X2xpbmtfcXVhbGl0eV9jbWQgKnRibCk7CisJCQkgICAgIHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqdGJsKTsKIAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKQEAgLTIwNyw1OCArMjMwLDExIEBACiAJMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDE5MSwgMjIyLCAyNDIsIDI3MCwgMjg0LCAyODksIDI5MwogfTsKIAotc3RhdGljIGludCBpd2w0OTY1X2xxX3N5bmNfY2FsbGJhY2soc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsNDk2NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKldlIGRpZG4ndCBjYWNoZSB0aGUgU0tCOyBsZXQgdGhlIGNhbGxlciBmcmVlIGl0ICovCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTggaXdsNDk2NV9yYXRlX2dldF9yYXRlKHUzMiByYXRlX25fZmxhZ3MpCiB7CiAJcmV0dXJuICh1OCkocmF0ZV9uX2ZsYWdzICYgMHhGRik7CiB9CiAKLXN0YXRpYyBpbnQgcnNfc2VuZF9scV9jbWQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCSAgc3RydWN0IGl3bDQ5NjVfbGlua19xdWFsaXR5X2NtZCAqbHEsIHU4IGZsYWdzKQotewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi0JaW50IGk7Ci0jZW5kaWYKLQlzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfbGlua19xdWFsaXR5X2NtZCksCi0JCS5tZXRhLmZsYWdzID0gZmxhZ3MsCi0JCS5kYXRhID0gbHEsCi0JfTsKLQotCWlmICgobHEtPnN0YV9pZCA9PSAweEZGKSAmJgotCSAgICAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobHEtPnN0YV9pZCA9PSAweEZGKQotCQlscS0+c3RhX2lkID0gSVdMX0FQX0lEOwotCi0JSVdMX0RFQlVHX1JBVEUoImxxIHN0YXRpb24gaWQgMHgleFxuIiwgbHEtPnN0YV9pZCk7Ci0JSVdMX0RFQlVHX1JBVEUoImxxIGR0YSAweCVYIDB4JVhcbiIsCi0JCSAgICAgICBscS0+Z2VuZXJhbF9wYXJhbXMuc2luZ2xlX3N0cmVhbV9hbnRfbXNrLAotCQkgICAgICAgbHEtPmdlbmVyYWxfcGFyYW1zLmR1YWxfc3RyZWFtX2FudF9tc2spOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi0JZm9yIChpID0gMDsgaSA8IExJTktfUVVBTF9NQVhfUkVUUllfTlVNOyBpKyspCi0JCUlXTF9ERUJVR19SQVRFKCJscSBpbmRleCAlZCAweCVYXG4iLAotCQkJCWksIGxxLT5yc190YWJsZVtpXS5yYXRlX25fZmxhZ3MpOwotI2VuZGlmCi0KLQlpZiAoZmxhZ3MgJiBDTURfQVNZTkMpCi0JCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBpd2w0OTY1X2xxX3N5bmNfY2FsbGJhY2s7Ci0KLQlpZiAoaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgJiYKLQkgICAgcHJpdi0+bHFfbW5nci5scV9yZWFkeSkKLQkJcmV0dXJuICBpd2w0OTY1X3NlbmRfY21kKHByaXYsICZjbWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KHN0cnVjdCBpd2w0OTY1X3JhdGVfc2NhbGVfZGF0YSAqd2luZG93KQogewogCXdpbmRvdy0+ZGF0YSA9IDA7CkBAIC0yNjksNiArMjQ1LDEzNSBAQAogCXdpbmRvdy0+c3RhbXAgPSAwOwogfQogCisjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKKy8qCisgKglyZW1vdmVzIHRoZSBvbGQgZGF0YSBmcm9tIHRoZSBzdGF0aXN0aWNzLiBBbGwgZGF0YSB0aGF0IGlzIG9sZGVyIHRoYW4KKyAqCVRJRF9NQVhfVElNRV9ESUZGLCB3aWxsIGJlIGRlbGV0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHJzX3RsX3JtX29sZF9zdGF0cyhzdHJ1Y3QgaXdsNDk2NV90cmFmZmljX2xvYWQgKnRsLCB1MzIgY3Vycl90aW1lKQoreworCS8qIFRoZSBvbGRlc3QgYWdlIHdlIHdhbnQgdG8ga2VlcCAqLworCXUzMiBvbGRlc3RfdGltZSA9IGN1cnJfdGltZSAtIFRJRF9NQVhfVElNRV9ESUZGOworCisJd2hpbGUgKHRsLT5xdWV1ZV9jb3VudCAmJgorCSAgICAgICAodGwtPnRpbWVfc3RhbXAgPCBvbGRlc3RfdGltZSkpIHsKKwkJdGwtPnRvdGFsIC09IHRsLT5wYWNrZXRfY291bnRbdGwtPmhlYWRdOworCQl0bC0+cGFja2V0X2NvdW50W3RsLT5oZWFkXSA9IDA7CisJCXRsLT50aW1lX3N0YW1wICs9IFRJRF9RVUVVRV9DRUxMX1NQQUNJTkc7CisJCXRsLT5xdWV1ZV9jb3VudC0tOworCQl0bC0+aGVhZCsrOworCQlpZiAodGwtPmhlYWQgPj0gVElEX1FVRVVFX01BWF9TSVpFKQorCQkJdGwtPmhlYWQgPSAwOworCX0KK30KKworLyoKKyAqCWluY3JlbWVudCB0cmFmZmljIGxvYWQgdmFsdWUgZm9yIHRpZCBhbmQgYWxzbyByZW1vdmUKKyAqCWFueSBvbGQgdmFsdWVzIGlmIHBhc3NlZCB0aGUgY2VydGFpbiB0aW1lIHBlcmlvZAorICovCitzdGF0aWMgdm9pZCByc190bF9hZGRfcGFja2V0KHN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfZGF0YSwgdTggdGlkKQoreworCXUzMiBjdXJyX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOworCXUzMiB0aW1lX2RpZmY7CisJczMyIGluZGV4OworCXN0cnVjdCBpd2w0OTY1X3RyYWZmaWNfbG9hZCAqdGwgPSBOVUxMOworCisJaWYgKHRpZCA+PSBUSURfTUFYX0xPQURfQ09VTlQpCisJCXJldHVybjsKKworCXRsID0gJmxxX2RhdGEtPmxvYWRbdGlkXTsKKworCWN1cnJfdGltZSAtPSBjdXJyX3RpbWUgJSBUSURfUk9VTkRfVkFMVUU7CisKKwkvKiBIYXBwZW5zIG9ubHkgZm9yIHRoZSBmaXJzdCBwYWNrZXQuIEluaXRpYWxpemUgdGhlIGRhdGEgKi8KKwlpZiAoISh0bC0+cXVldWVfY291bnQpKSB7CisJCXRsLT50b3RhbCA9IDE7CisJCXRsLT50aW1lX3N0YW1wID0gY3Vycl90aW1lOworCQl0bC0+cXVldWVfY291bnQgPSAxOworCQl0bC0+aGVhZCA9IDA7CisJCXRsLT5wYWNrZXRfY291bnRbMF0gPSAxOworCQlyZXR1cm47CisJfQorCisJdGltZV9kaWZmID0gVElNRV9XUkFQX0FST1VORCh0bC0+dGltZV9zdGFtcCwgY3Vycl90aW1lKTsKKwlpbmRleCA9IHRpbWVfZGlmZiAvIFRJRF9RVUVVRV9DRUxMX1NQQUNJTkc7CisKKwkvKiBUaGUgaGlzdG9yeSBpcyB0b28gbG9uZzogcmVtb3ZlIGRhdGEgdGhhdCBpcyBvbGRlciB0aGFuICovCisJLyogVElEX01BWF9USU1FX0RJRkYgKi8KKwlpZiAoaW5kZXggPj0gVElEX1FVRVVFX01BWF9TSVpFKQorCQlyc190bF9ybV9vbGRfc3RhdHModGwsIGN1cnJfdGltZSk7CisKKwlpbmRleCA9ICh0bC0+aGVhZCArIGluZGV4KSAlIFRJRF9RVUVVRV9NQVhfU0laRTsKKwl0bC0+cGFja2V0X2NvdW50W2luZGV4XSA9IHRsLT5wYWNrZXRfY291bnRbaW5kZXhdICsgMTsKKwl0bC0+dG90YWwgPSB0bC0+dG90YWwgKyAxOworCisJaWYgKChpbmRleCArIDEpID4gdGwtPnF1ZXVlX2NvdW50KQorCQl0bC0+cXVldWVfY291bnQgPSBpbmRleCArIDE7Cit9CisKKy8qCisJZ2V0IHRoZSB0cmFmZmljIGxvYWQgdmFsdWUgZm9yIHRpZAorKi8KK3N0YXRpYyB1MzIgcnNfdGxfZ2V0X2xvYWQoc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9kYXRhLCB1OCB0aWQpCit7CisJdTMyIGN1cnJfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CisJdTMyIHRpbWVfZGlmZjsKKwlzMzIgaW5kZXg7CisJc3RydWN0IGl3bDQ5NjVfdHJhZmZpY19sb2FkICp0bCA9IE5VTEw7CisKKwlpZiAodGlkID49IFRJRF9NQVhfTE9BRF9DT1VOVCkKKwkJcmV0dXJuIDA7CisKKwl0bCA9ICYobHFfZGF0YS0+bG9hZFt0aWRdKTsKKworCWN1cnJfdGltZSAtPSBjdXJyX3RpbWUgJSBUSURfUk9VTkRfVkFMVUU7CisKKwlpZiAoISh0bC0+cXVldWVfY291bnQpKQorCQlyZXR1cm4gMDsKKworCXRpbWVfZGlmZiA9IFRJTUVfV1JBUF9BUk9VTkQodGwtPnRpbWVfc3RhbXAsIGN1cnJfdGltZSk7CisJaW5kZXggPSB0aW1lX2RpZmYgLyBUSURfUVVFVUVfQ0VMTF9TUEFDSU5HOworCisJLyogVGhlIGhpc3RvcnkgaXMgdG9vIGxvbmc6IHJlbW92ZSBkYXRhIHRoYXQgaXMgb2xkZXIgdGhhbiAqLworCS8qIFRJRF9NQVhfVElNRV9ESUZGICovCisJaWYgKGluZGV4ID49IFRJRF9RVUVVRV9NQVhfU0laRSkKKwkJcnNfdGxfcm1fb2xkX3N0YXRzKHRsLCBjdXJyX3RpbWUpOworCisJcmV0dXJuIHRsLT50b3RhbDsKK30KKworc3RhdGljIHZvaWQgcnNfdGxfdHVybl9vbl9hZ2dfZm9yX3RpZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9kYXRhLCB1OCB0aWQsCisJCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlzdGF0ZSA9IHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKworCWlmIChzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfSURMRSAmJgorCSAgICByc190bF9nZXRfbG9hZChscV9kYXRhLCB0aWQpID4gSVdMX0FHR19MT0FEX1RIUkVTSE9MRCkgeworCQlJV0xfREVCVUdfSFQoIlN0YXJ0aW5nIFR4IGFnZzogU1RBOiAlcyB0aWQ6ICVkXG4iLAorCQkJCXByaW50X21hYyhtYWMsIHN0YS0+YWRkciksIHRpZCk7CisJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHByaXYtPmh3LCBzdGEtPmFkZHIsIHRpZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByc190bF90dXJuX29uX2FnZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHRpZCwKKwkJCQlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX2RhdGEsCisJCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJaWYgKCh0aWQgPCBUSURfTUFYX0xPQURfQ09VTlQpKQorCQlyc190bF90dXJuX29uX2FnZ19mb3JfdGlkKHByaXYsIGxxX2RhdGEsIHRpZCwgc3RhKTsKKwllbHNlIGlmICh0aWQgPT0gSVdMX0FHR19BTExfVElEKQorCQlmb3IgKHRpZCA9IDA7IHRpZCA8IFRJRF9NQVhfTE9BRF9DT1VOVDsgdGlkKyspCisJCQlyc190bF90dXJuX29uX2FnZ19mb3JfdGlkKHByaXYsIGxxX2RhdGEsIHRpZCwgc3RhKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0hUICovCisKIC8qKgogICogcnNfY29sbGVjdF90eF9kYXRhIC0gVXBkYXRlIHRoZSBzdWNjZXNzL2ZhaWx1cmUgc2xpZGluZyB3aW5kb3cKICAqCkBAIC0yNzcsNyArMzgyLDggQEAKICAqIHBhY2tldHMuCiAgKi8KIHN0YXRpYyBpbnQgcnNfY29sbGVjdF90eF9kYXRhKHN0cnVjdCBpd2w0OTY1X3JhdGVfc2NhbGVfZGF0YSAqd2luZG93cywKLQkJCSAgICAgIGludCBzY2FsZV9pbmRleCwgczMyIHRwdCwgdTMyIHN0YXR1cykKKwkJCSAgICAgIGludCBzY2FsZV9pbmRleCwgczMyIHRwdCwgaW50IHJldHJpZXMsCisJCQkgICAgICBpbnQgc3VjY2Vzc2VzKQogewogCXN0cnVjdCBpd2w0OTY1X3JhdGVfc2NhbGVfZGF0YSAqd2luZG93ID0gTlVMTDsKIAl1NjQgbWFzazsKQEAgLTI5OCwyNiArNDA0LDMzIEBACiAJICogc3VidHJhY3QgIjEiIGZyb20gdGhlIHN1Y2Nlc3MgY291bnRlciAodGhpcyBpcyB0aGUgbWFpbiByZWFzb24KIAkgKiB3ZSBrZWVwIHRoZXNlIGJpdG1hcHMhKS4KIAkgKi8KLQlpZiAod2luZG93LT5jb3VudGVyID49IHdpbl9zaXplKSB7Ci0JCXdpbmRvdy0+Y291bnRlciA9IHdpbl9zaXplIC0gMTsKLQkJbWFzayA9IDE7Ci0JCW1hc2sgPSAobWFzayA8PCAod2luX3NpemUgLSAxKSk7Ci0JCWlmICgod2luZG93LT5kYXRhICYgbWFzaykpIHsKLQkJCXdpbmRvdy0+ZGF0YSAmPSB+bWFzazsKLQkJCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgLSAxOworCXdoaWxlIChyZXRyaWVzID4gMCkgeworCQlpZiAod2luZG93LT5jb3VudGVyID49IHdpbl9zaXplKSB7CisJCQl3aW5kb3ctPmNvdW50ZXIgPSB3aW5fc2l6ZSAtIDE7CisJCQltYXNrID0gMTsKKwkJCW1hc2sgPSAobWFzayA8PCAod2luX3NpemUgLSAxKSk7CisJCQlpZiAod2luZG93LT5kYXRhICYgbWFzaykgeworCQkJCXdpbmRvdy0+ZGF0YSAmPSB+bWFzazsKKwkJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA9CisJCQkJCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyIC0gMTsKKwkJCX0KIAkJfQotCX0KIAotCS8qIEluY3JlbWVudCBmcmFtZXMtYXR0ZW1wdGVkIGNvdW50ZXIgKi8KLQl3aW5kb3ctPmNvdW50ZXIgPSB3aW5kb3ctPmNvdW50ZXIgKyAxOworCQkvKiBJbmNyZW1lbnQgZnJhbWVzLWF0dGVtcHRlZCBjb3VudGVyICovCisJCXdpbmRvdy0+Y291bnRlcisrOwogCi0JLyogU2hpZnQgYml0bWFwIGJ5IG9uZSBmcmFtZSAodGhyb3cgYXdheSBvbGRlc3QgaGlzdG9yeSksCi0JICogT1IgaW4gIjEiLCBhbmQgaW5jcmVtZW50ICJzdWNjZXNzIiBpZiB0aGlzIGZyYW1lIHdhcyBzdWNjZXNzZnVsLiAqLwotCW1hc2sgPSB3aW5kb3ctPmRhdGE7Ci0Jd2luZG93LT5kYXRhID0gKG1hc2sgPDwgMSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgKyAxOwotCQl3aW5kb3ctPmRhdGEgfD0gMHgxOworCQkvKiBTaGlmdCBiaXRtYXAgYnkgb25lIGZyYW1lICh0aHJvdyBhd2F5IG9sZGVzdCBoaXN0b3J5KSwKKwkJICogT1IgaW4gIjEiLCBhbmQgaW5jcmVtZW50ICJzdWNjZXNzIiBpZiB0aGlzCisJCSAqIGZyYW1lIHdhcyBzdWNjZXNzZnVsLiAqLworCQltYXNrID0gd2luZG93LT5kYXRhOworCQl3aW5kb3ctPmRhdGEgPSAobWFzayA8PCAxKTsKKwkJaWYgKHN1Y2Nlc3NlcyA+IDApIHsKKwkJCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgKyAxOworCQkJd2luZG93LT5kYXRhIHw9IDB4MTsKKwkJCXN1Y2Nlc3Nlcy0tOworCQl9CisKKwkJcmV0cmllcy0tOwogCX0KIAogCS8qIENhbGN1bGF0ZSBjdXJyZW50IHN1Y2Nlc3MgcmF0aW8sIGF2b2lkIGRpdmlkZS1ieS0wISAqLwpAQCAtNDA0LDEzICs1MTcsMTQgQEAKICAqIGZpbGwgInNlYXJjaCIgb3IgImFjdGl2ZSIgdHggbW9kZSB0YWJsZS4KICAqLwogc3RhdGljIGludCByc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoY29uc3Qgc3RydWN0IGl3bDQ5NjVfcmF0ZSAqbWNzX3JhdGUsCi0JCQkJICAgIGludCBwaHltb2RlLCBzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsLAorCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICAgIHN0cnVjdCBpd2w0OTY1X3NjYWxlX3RibF9pbmZvICp0YmwsCiAJCQkJICAgIGludCAqcmF0ZV9pZHgpCiB7CiAJaW50IGluZGV4OwogCXUzMiBhbnRfbXNrOwogCi0JaW5kZXggPSBpd2w0OTY1X3JhdGVfaW5kZXhfZnJvbV9wbGNwKG1jc19yYXRlLT5yYXRlX25fZmxhZ3MpOworCWluZGV4ID0gaXdsNDk2NV9od3JhdGVfdG9fcGxjcF9pZHgobWNzX3JhdGUtPnJhdGVfbl9mbGFncyk7CiAKIAlpZiAoaW5kZXggID09IElXTF9SQVRFX0lOVkFMSUQpIHsKIAkJKnJhdGVfaWR4ID0gLTE7CkBAIC00MjksNyArNTQzLDcgQEAKIAkJCXRibC0+bHFfdHlwZSA9IExRX05PTkU7CiAJCWVsc2UgewogCi0JCQlpZiAocGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpCisJCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJCXRibC0+bHFfdHlwZSA9IExRX0E7CiAJCQllbHNlCiAJCQkJdGJsLT5scV90eXBlID0gTFFfRzsKQEAgLTQ5OCw3ICs2MTIsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB1OCByc191c2VfZ3JlZW4oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbmxpbmUgdTggcnNfdXNlX2dyZWVuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKIHsKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVApAQCAtNjA3LDcgKzcyMSw3IEBACiAJaWYgKCFpc19sZWdhY3kodGJsLT5scV90eXBlKSAmJiAoIWh0X3Bvc3NpYmxlIHx8ICFzY2FsZV9pbmRleCkpIHsKIAkJc3dpdGNoX3RvX2xlZ2FjeSA9IDE7CiAJCXNjYWxlX2luZGV4ID0gcnNfaHRfdG9fbGVnYWN5W3NjYWxlX2luZGV4XTsKLQkJaWYgKGxxX3N0YS0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpCisJCWlmIChscV9zdGEtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXRibC0+bHFfdHlwZSA9IExRX0E7CiAJCWVsc2UKIAkJCXRibC0+bHFfdHlwZSA9IExRX0c7CkBAIC02MjUsNyArNzM5LDcgQEAKIAkvKiBNYXNrIHdpdGggc3RhdGlvbiByYXRlIHJlc3RyaWN0aW9uICovCiAJaWYgKGlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKSB7CiAJCS8qIHN1cHBfcmF0ZXMgaGFzIG5vIENDSyBiaXRzIGluIEEgbW9kZSAqLwotCQlpZiAobHFfc3RhLT5waHltb2RlID09ICh1OCkgTU9ERV9JRUVFODAyMTFBKQorCQlpZiAobHFfc3RhLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCQlyYXRlX21hc2sgID0gKHUxNikocmF0ZV9tYXNrICYKIAkJCSAgIChscV9zdGEtPnN1cHBfcmF0ZXMgPDwgSVdMX0ZJUlNUX09GRE1fUkFURSkpOwogCQllbHNlCkBAIC02NTgsMTEgKzc3MiwxMiBAQAogCXU4IHJldHJpZXM7CiAJaW50IHJzX2luZGV4LCBpbmRleCA9IDA7CiAJc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9zdGE7Ci0Jc3RydWN0IGl3bDQ5NjVfbGlua19xdWFsaXR5X2NtZCAqdGFibGU7CisJc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICp0YWJsZTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDQ5NjVfcHJpdiAqKXByaXZfcmF0ZTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBsb2NhbF90b19odyhsb2NhbCk7CiAJc3RydWN0IGl3bDQ5NjVfcmF0ZV9zY2FsZV9kYXRhICp3aW5kb3cgPSBOVUxMOwogCXN0cnVjdCBpd2w0OTY1X3JhdGVfc2NhbGVfZGF0YSAqc2VhcmNoX3dpbiA9IE5VTEw7CiAJc3RydWN0IGl3bDQ5NjVfcmF0ZSB0eF9tY3M7CkBAIC02NzcsMjggKzc5MiwzMiBAQAogCWlmICghaWVlZTgwMjExX2lzX2RhdGEoZmMpIHx8IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQogCQlyZXR1cm47CiAKKwkvKiBUaGlzIHBhY2tldCB3YXMgYWdncmVnYXRlZCBidXQgZG9lc24ndCBjYXJyeSByYXRlIHNjYWxlIGluZm8gKi8KKwlpZiAoKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfQU1QRFUpICYmCisJICAgICEodHhfcmVzcC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVFVTX0FNUERVKSkKKwkJcmV0dXJuOworCiAJcmV0cmllcyA9IHR4X3Jlc3AtPnJldHJ5X2NvdW50OwogCiAJaWYgKHJldHJpZXMgPiAxNSkKIAkJcmV0cmllcyA9IDE1OwogCisJcmN1X3JlYWRfbG9jaygpOwogCiAJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKIAotCWlmICghc3RhIHx8ICFzdGEtPnJhdGVfY3RybF9wcml2KSB7Ci0JCWlmIChzdGEpCi0JCQlzdGFfaW5mb19wdXQoc3RhKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoIXN0YSB8fCAhc3RhLT5yYXRlX2N0cmxfcHJpdikKKwkJZ290byBvdXQ7CisKIAogCWxxX3N0YSA9IChzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKilzdGEtPnJhdGVfY3RybF9wcml2OwogCiAJaWYgKCFwcml2LT5scV9tbmdyLmxxX3JlYWR5KQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJaWYgKChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpICYmCiAJICAgICFscV9zdGEtPmlic3Nfc3RhX2FkZGVkKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJdGFibGUgPSAmbHFfc3RhLT5scTsKIAlhY3RpdmVfaW5kZXggPSBscV9zdGEtPmFjdGl2ZV90Ymw7CkBAIC03MTksMTcgKzgzOCw2IEBACiAJc2VhcmNoX3dpbiA9IChzdHJ1Y3QgaXdsNDk2NV9yYXRlX3NjYWxlX2RhdGEgKikKIAkgICAgJihzZWFyY2hfdGJsLT53aW5bMF0pOwogCi0JdHhfbWNzLnJhdGVfbl9mbGFncyA9IHR4X3Jlc3AtPmNvbnRyb2wudHhfcmF0ZTsKLQotCXJzX2dldF90YmxfaW5mb19mcm9tX21jcygmdHhfbWNzLCBwcml2LT5waHltb2RlLAotCQkJCSAgJnRibF90eXBlLCAmcnNfaW5kZXgpOwotCWlmICgocnNfaW5kZXggPCAwKSB8fCAocnNfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlQpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJiYWQgcmF0ZSBpbmRleCBhdDogJWQgcmF0ZSAweCVYXG4iLAotCQkJICAgICByc19pbmRleCwgdHhfbWNzLnJhdGVfbl9mbGFncyk7Ci0JCXN0YV9pbmZvX3B1dChzdGEpOwotCQlyZXR1cm47Ci0JfQotCiAJLyoKIAkgKiBJZ25vcmUgdGhpcyBUeCBmcmFtZSByZXNwb25zZSBpZiBpdHMgaW5pdGlhbCByYXRlIGRvZXNuJ3QgbWF0Y2gKIAkgKiB0aGF0IG9mIGxhdGVzdCBMaW5rIFF1YWxpdHkgY29tbWFuZC4gIFRoZXJlIG1heSBiZSBzdHJhZ2dsZXJzCkBAIC03MzgsMTQgKzg0NiwyOSBAQAogCSAqIHRvIGNoZWNrICJzZWFyY2giIG1vZGUsIG9yIGEgcHJpb3IgInNlYXJjaCIgbW9kZSBhZnRlciB3ZSd2ZSBtb3ZlZAogCSAqIHRvIGEgbmV3ICJzZWFyY2giIG1vZGUgKHdoaWNoIG1pZ2h0IGJlY29tZSB0aGUgbmV3ICJhY3RpdmUiIG1vZGUpLgogCSAqLwotCWlmIChyZXRyaWVzICYmCi0JICAgICh0eF9tY3MucmF0ZV9uX2ZsYWdzICE9Ci0JCQkJbGUzMl90b19jcHUodGFibGUtPnJzX3RhYmxlWzBdLnJhdGVfbl9mbGFncykpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleCAweCV4XG4iLAotCQkJCXR4X21jcy5yYXRlX25fZmxhZ3MsCi0JCQkJbGUzMl90b19jcHUodGFibGUtPnJzX3RhYmxlWzBdLnJhdGVfbl9mbGFncykpOwotCQlzdGFfaW5mb19wdXQoc3RhKTsKLQkJcmV0dXJuOworCXR4X21jcy5yYXRlX25fZmxhZ3MgPSBsZTMyX3RvX2NwdSh0YWJsZS0+cnNfdGFibGVbMF0ucmF0ZV9uX2ZsYWdzKTsKKwlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJnR4X21jcywgcHJpdi0+YmFuZCwgJnRibF90eXBlLCAmcnNfaW5kZXgpOworCWlmIChwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXJzX2luZGV4IC09IElXTF9GSVJTVF9PRkRNX1JBVEU7CisKKwlpZiAoKHR4X3Jlc3AtPmNvbnRyb2wudHhfcmF0ZSA9PSBOVUxMKSB8fAorCSAgICAodGJsX3R5cGUuaXNfU0dJIF4KKwkJISEodHhfcmVzcC0+Y29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TSE9SVF9HSSkpIHx8CisJICAgICh0YmxfdHlwZS5pc19mYXQgXgorCQkhISh0eF9yZXNwLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMXzQwX01IWl9XSURUSCkpIHx8CisJICAgICh0YmxfdHlwZS5pc19kdXAgXgorCQkhISh0eF9yZXNwLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RVUF9EQVRBKSkgfHwKKwkgICAgKHRibF90eXBlLmFudGVubmFfdHlwZSBeCisJCXR4X3Jlc3AtPmNvbnRyb2wuYW50ZW5uYV9zZWxfdHgpIHx8CisJICAgICghISh0eF9tY3MucmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfSFRfTVNLKSBeCisJCSEhKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfT0ZETV9IVCkpIHx8CisJICAgICghISh0eF9tY3MucmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfR0ZfTVNLKSBeCisJCSEhKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfR1JFRU5fRklFTEQpKSB8fAorCSAgICAoaHctPndpcGh5LT5iYW5kc1twcml2LT5iYW5kXS0+Yml0cmF0ZXNbcnNfaW5kZXhdLmJpdHJhdGUgIT0KKwkJdHhfcmVzcC0+Y29udHJvbC50eF9yYXRlLT5iaXRyYXRlKSkgeworCQlJV0xfREVCVUdfUkFURSgiaW5pdGlhbCByYXRlIGRvZXMgbm90IG1hdGNoIDB4JXhcbiIsCisJCQkJdHhfbWNzLnJhdGVfbl9mbGFncyk7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFVwZGF0ZSBmcmFtZSBoaXN0b3J5IHdpbmRvdyB3aXRoICJmYWlsdXJlIiBmb3IgZWFjaCBUeCByZXRyeS4gKi8KQEAgLTc1NCw3ICs4NzcsNyBAQAogCQkgKiBFYWNoIHR4IGF0dGVtcHQgc3RlcHMgb25lIGVudHJ5IGRlZXBlciBpbiB0aGUgcmF0ZSB0YWJsZS4gKi8KIAkJdHhfbWNzLnJhdGVfbl9mbGFncyA9CiAJCSAgICBsZTMyX3RvX2NwdSh0YWJsZS0+cnNfdGFibGVbaW5kZXhdLnJhdGVfbl9mbGFncyk7Ci0JCXJzX2dldF90YmxfaW5mb19mcm9tX21jcygmdHhfbWNzLCBwcml2LT5waHltb2RlLAorCQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJnR4X21jcywgcHJpdi0+YmFuZCwKIAkJCQkJICAmdGJsX3R5cGUsICZyc19pbmRleCk7CiAKIAkJLyogSWYgdHlwZSBtYXRjaGVzICJzZWFyY2giIHRhYmxlLApAQCAtNzY2LDcgKzg4OSw3IEBACiAJCQkJdHB0ID0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJCWVsc2UKIAkJCQl0cHQgPSAwOwotCQkJcnNfY29sbGVjdF90eF9kYXRhKHNlYXJjaF93aW4sIHJzX2luZGV4LCB0cHQsIDApOworCQkJcnNfY29sbGVjdF90eF9kYXRhKHNlYXJjaF93aW4sIHJzX2luZGV4LCB0cHQsIDEsIDApOwogCiAJCS8qIEVsc2UgaWYgdHlwZSBtYXRjaGVzICJjdXJyZW50L2FjdGl2ZSIgdGFibGUsCiAJCSAqIGFkZCBmYWlsdXJlIHRvICJjdXJyZW50L2FjdGl2ZSIgaGlzdG9yeSAqLwpAQCAtNzc3LDcgKzkwMCw3IEBACiAJCQkJdHB0ID0gY3Vycl90YmwtPmV4cGVjdGVkX3RwdFtyc19pbmRleF07CiAJCQllbHNlCiAJCQkJdHB0ID0gMDsKLQkJCXJzX2NvbGxlY3RfdHhfZGF0YSh3aW5kb3csIHJzX2luZGV4LCB0cHQsIDApOworCQkJcnNfY29sbGVjdF90eF9kYXRhKHdpbmRvdywgcnNfaW5kZXgsIHRwdCwgMSwgMCk7CiAJCX0KIAogCQkvKiBJZiBub3Qgc2VhcmNoaW5nIGZvciBhIG5ldyBtb2RlLCBpbmNyZW1lbnQgZmFpbGVkIGNvdW50ZXIKQEAgLTc5NCwxNCArOTE3LDggQEAKIAkgKiBpZiBUeCB3YXMgc3VjY2Vzc2Z1bCBmaXJzdCB0cnksIHVzZSBvcmlnaW5hbCByYXRlLAogCSAqIGVsc2UgbG9vayB1cCB0aGUgcmF0ZSB0aGF0IHdhcywgZmluYWxseSwgc3VjY2Vzc2Z1bC4KIAkgKi8KLQlpZiAoIXR4X3Jlc3AtPnJldHJ5X2NvdW50KQotCQl0eF9tY3MucmF0ZV9uX2ZsYWdzID0gdHhfcmVzcC0+Y29udHJvbC50eF9yYXRlOwotCWVsc2UKLQkJdHhfbWNzLnJhdGVfbl9mbGFncyA9Ci0JCQlsZTMyX3RvX2NwdSh0YWJsZS0+cnNfdGFibGVbaW5kZXhdLnJhdGVfbl9mbGFncyk7Ci0KLQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJnR4X21jcywgcHJpdi0+cGh5bW9kZSwKLQkJCQkgICZ0YmxfdHlwZSwgJnJzX2luZGV4KTsKKwl0eF9tY3MucmF0ZV9uX2ZsYWdzID0gbGUzMl90b19jcHUodGFibGUtPnJzX3RhYmxlW2luZGV4XS5yYXRlX25fZmxhZ3MpOworCXJzX2dldF90YmxfaW5mb19mcm9tX21jcygmdHhfbWNzLCBwcml2LT5iYW5kLCAmdGJsX3R5cGUsICZyc19pbmRleCk7CiAKIAkvKiBVcGRhdGUgZnJhbWUgaGlzdG9yeSB3aW5kb3cgd2l0aCAic3VjY2VzcyIgaWYgVHggZ290IEFDS2VkIC4uLiAqLwogCWlmICh0eF9yZXNwLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLKQpAQCAtODE4LDkgKzkzNSwxMyBAQAogCQkJdHB0ID0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJcnNfY29sbGVjdF90eF9kYXRhKHNlYXJjaF93aW4sCi0JCQkJICAgIHJzX2luZGV4LCB0cHQsIHN0YXR1cyk7Ci0KKwkJaWYgKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfQU1QRFUpCisJCQlyc19jb2xsZWN0X3R4X2RhdGEoc2VhcmNoX3dpbiwgcnNfaW5kZXgsIHRwdCwKKwkJCQkJICAgdHhfcmVzcC0+YW1wZHVfYWNrX2xlbiwKKwkJCQkJICAgdHhfcmVzcC0+YW1wZHVfYWNrX21hcCk7CisJCWVsc2UKKwkJCXJzX2NvbGxlY3RfdHhfZGF0YShzZWFyY2hfd2luLCByc19pbmRleCwgdHB0LAorCQkJCQkgICAxLCBzdGF0dXMpOwogCS8qIEVsc2UgaWYgdHlwZSBtYXRjaGVzICJjdXJyZW50L2FjdGl2ZSIgdGFibGUsCiAJICogYWRkIGZpbmFsIHR4IHN0YXR1cyB0byAiY3VycmVudC9hY3RpdmUiIGhpc3RvcnkgKi8KIAl9IGVsc2UgaWYgKCh0YmxfdHlwZS5scV90eXBlID09IGN1cnJfdGJsLT5scV90eXBlKSAmJgpAQCAtODMwLDIxICs5NTEsMzQgQEAKIAkJCXRwdCA9IGN1cnJfdGJsLT5leHBlY3RlZF90cHRbcnNfaW5kZXhdOwogCQllbHNlCiAJCQl0cHQgPSAwOwotCQlyc19jb2xsZWN0X3R4X2RhdGEod2luZG93LCByc19pbmRleCwgdHB0LCBzdGF0dXMpOworCQlpZiAodHhfcmVzcC0+Y29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9BTVBEVSkKKwkJCXJzX2NvbGxlY3RfdHhfZGF0YSh3aW5kb3csIHJzX2luZGV4LCB0cHQsCisJCQkJCSAgIHR4X3Jlc3AtPmFtcGR1X2Fja19sZW4sCisJCQkJCSAgIHR4X3Jlc3AtPmFtcGR1X2Fja19tYXApOworCQllbHNlCisJCQlyc19jb2xsZWN0X3R4X2RhdGEod2luZG93LCByc19pbmRleCwgdHB0LAorCQkJCQkgICAxLCBzdGF0dXMpOwogCX0KIAogCS8qIElmIG5vdCBzZWFyY2hpbmcgZm9yIG5ldyBtb2RlLCBpbmNyZW1lbnQgc3VjY2Vzcy9mYWlsZWQgY291bnRlcgogCSAqIC4uLiB0aGVzZSBoZWxwIGRldGVybWluZSB3aGVuIHRvIHN0YXJ0IHNlYXJjaGluZyBhZ2FpbiAqLwogCWlmIChscV9zdGEtPnN0YXlfaW5fdGJsKSB7Ci0JCWlmIChzdGF0dXMpCi0JCQlscV9zdGEtPnRvdGFsX3N1Y2Nlc3MrKzsKLQkJZWxzZQotCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQrKzsKKwkJaWYgKHR4X3Jlc3AtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfQU1QRFUpIHsKKwkJCWxxX3N0YS0+dG90YWxfc3VjY2VzcyArPSB0eF9yZXNwLT5hbXBkdV9hY2tfbWFwOworCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQgKz0KKwkJCSAgICAgKHR4X3Jlc3AtPmFtcGR1X2Fja19sZW4gLSB0eF9yZXNwLT5hbXBkdV9hY2tfbWFwKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdGF0dXMpCisJCQkJbHFfc3RhLT50b3RhbF9zdWNjZXNzKys7CisJCQllbHNlCisJCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQrKzsKKwkJfQogCX0KIAogCS8qIFNlZSBpZiB0aGVyZSdzIGEgYmV0dGVyIHJhdGUgb3IgbW9kdWxhdGlvbiBtb2RlIHRvIHRyeS4gKi8KIAlyc19yYXRlX3NjYWxlX3BlcmZvcm0ocHJpdiwgZGV2LCBoZHIsIHN0YSk7Ci0Jc3RhX2luZm9fcHV0KHN0YSk7CitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuOwogfQogCkBAIC05NDgsNyArMTA4Miw3IEBACiAgKiB0byBkZWNyZWFzZSB0byBtYXRjaCAiYWN0aXZlIiB0aHJvdWdocHV0LiAgV2hlbiBtb3ZpbmcgZnJvbSBNSU1PIHRvIFNJU08sCiAgKiBiaXQgcmF0ZSB3aWxsIHR5cGljYWxseSBuZWVkIHRvIGluY3JlYXNlLCBidXQgbm90IGlmIHBlcmZvcm1hbmNlIHdhcyBiYWQuCiAgKi8KLXN0YXRpYyBzMzIgcnNfZ2V0X2Jlc3RfcmF0ZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHMzMiByc19nZXRfYmVzdF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKIAkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9zY2FsZV90YmxfaW5mbyAqdGJsLAkvKiAic2VhcmNoIiAqLwogCQkJICAgIHUxNiByYXRlX21hc2ssIHM4IGluZGV4LCBzOCByYXRlKQpAQCAtMTA0Niw3ICsxMTgwLDcgQEAKIC8qCiAgKiBTZXQgdXAgc2VhcmNoIHRhYmxlIGZvciBNSU1PCiAgKi8KLXN0YXRpYyBpbnQgcnNfc3dpdGNoX3RvX21pbW8oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgcnNfc3dpdGNoX3RvX21pbW8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLAogCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKQEAgLTExMDUsMTMgKzEyMzksMTMgQEAKIAlyZXR1cm4gMDsKICNlbHNlCiAJcmV0dXJuIC0xOwotI2VuZGlmCQkJCS8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KKyNlbmRpZgkvKkNPTkZJR19JV0w0OTY1X0hUICovCiB9CiAKIC8qCiAgKiBTZXQgdXAgc2VhcmNoIHRhYmxlIGZvciBTSVNPCiAgKi8KLXN0YXRpYyBpbnQgcnNfc3dpdGNoX3RvX3Npc28oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgcnNfc3dpdGNoX3RvX3Npc28oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLAogCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKQEAgLTExNjgsMTMgKzEzMDIsMTMgQEAKICNlbHNlCiAJcmV0dXJuIC0xOwogCi0jZW5kaWYJCQkJLypDT05GSUdfSVdMNDk2NV9IVCAqLworI2VuZGlmCS8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KIH0KIAogLyoKICAqIFRyeSB0byBzd2l0Y2ggdG8gbmV3IG1vZHVsYXRpb24gbW9kZSBmcm9tIGxlZ2FjeQogICovCi1zdGF0aWMgaW50IHJzX21vdmVfbGVnYWN5X290aGVyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IHJzX21vdmVfbGVnYWN5X290aGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYsCiAJCQkJc3RydWN0IHN0YV9pbmZvICpzdGEsCkBAIC0xMjcyLDcgKzE0MDYsNyBAQAogLyoKICAqIFRyeSB0byBzd2l0Y2ggdG8gbmV3IG1vZHVsYXRpb24gbW9kZSBmcm9tIFNJU08KICAqLwotc3RhdGljIGludCByc19tb3ZlX3Npc29fdG9fb3RoZXIoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgcnNfbW92ZV9zaXNvX3RvX290aGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9zdGEsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwKIAkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsCkBAIC0xMzI1LDYgKzE0NTksNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0dJOgogCQkJSVdMX0RFQlVHX0hUKCJMUTogU0lTTyBTV0lUQ0ggVE8gR0lcbiIpOworCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlzZWFyY2hfdGJsLT5hY3Rpb24gPSAwOwogCQkJaWYgKHNlYXJjaF90YmwtPmlzX1NHSSkKQEAgLTEzNjcsNyArMTUwMiw3IEBACiAvKgogICogVHJ5IHRvIHN3aXRjaCB0byBuZXcgbW9kdWxhdGlvbiBtb2RlIGZyb20gTUlNTwogICovCi1zdGF0aWMgaW50IHJzX21vdmVfbWltb190b19vdGhlcihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIGludCByc19tb3ZlX21pbW9fdG9fb3RoZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLAogCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKQEAgLTEzOTAsNiArMTUyNSw3IEBACiAJCWNhc2UgSVdMX01JTU9fU1dJVENIX0FOVEVOTkFfQjoKIAkJCUlXTF9ERUJVR19IVCgiTFE6IE1JTU8gU1dJVENIIFRPIFNJU09cbiIpOwogCisKIAkJCS8qIFNldCB1cCBuZXcgc2VhcmNoIHRhYmxlIGZvciBTSVNPICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlzZWFyY2hfdGJsLT5scV90eXBlID0gTFFfU0lTTzsKQEAgLTE1NDYsNyArMTY4Miw3IEBACiAvKgogICogRG8gcmF0ZSBzY2FsaW5nIGFuZCBzZWFyY2ggZm9yIG5ldyBtb2R1bGF0aW9uIG1vZGUuCiAgKi8KLXN0YXRpYyB2b2lkIHJzX3JhdGVfc2NhbGVfcGVyZm9ybShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgcnNfcmF0ZV9zY2FsZV9wZXJmb3JtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEpCkBAIC0xNTc0LDYgKzE3MTAsMTAgQEAKIAl1OCBhY3RpdmVfdGJsID0gMDsKIAl1OCBkb25lX3NlYXJjaCA9IDA7CiAJdTE2IGhpZ2hfbG93OworI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJdTggdGlkID0gTUFYX1RJRF9DT1VOVDsKKwlfX2xlMTYgKnFjOworI2VuZGlmCiAKIAlJV0xfREVCVUdfUkFURSgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CiAKQEAgLTE1OTQsNiArMTczNCwxMyBAQAogCX0KIAlscV9zdGEgPSAoc3RydWN0IGl3bDQ5NjVfbHFfc3RhICopc3RhLT5yYXRlX2N0cmxfcHJpdjsKIAorI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdHJsKGhkcik7CisJaWYgKHFjKSB7CisJCXRpZCA9ICh1OCkobGUxNl90b19jcHUoKnFjKSAmIDB4Zik7CisJCXJzX3RsX2FkZF9wYWNrZXQobHFfc3RhLCB0aWQpOworCX0KKyNlbmRpZgogCS8qCiAJICogU2VsZWN0IHJhdGUtc2NhbGUgLyBtb2R1bGF0aW9uLW1vZGUgdGFibGUgdG8gd29yayB3aXRoIGluCiAJICogdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbjogICJzZWFyY2giIGlmIHNlYXJjaGluZyBmb3IgYmV0dGVyCkBAIC0xNjA4LDcgKzE3NTUsNyBAQAogCWlzX2dyZWVuID0gbHFfc3RhLT5pc19ncmVlbjsKIAogCS8qIGN1cnJlbnQgdHggcmF0ZSAqLwotCWluZGV4ID0gc3RhLT5sYXN0X3R4cmF0ZTsKKwlpbmRleCA9IHN0YS0+bGFzdF90eHJhdGVfaWR4OwogCiAJSVdMX0RFQlVHX1JBVEUoIlJhdGUgc2NhbGUgaW5kZXggJWQgZm9yIHR5cGUgJWRcbiIsIGluZGV4LAogCQkgICAgICAgdGJsLT5scV90eXBlKTsKQEAgLTE2MjEsNyArMTc2OCw3IEBACiAKIAkvKiBtYXNrIHdpdGggc3RhdGlvbiByYXRlIHJlc3RyaWN0aW9uICovCiAJaWYgKGlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmIChscV9zdGEtPnBoeW1vZGUgPT0gKHU4KSBNT0RFX0lFRUU4MDIxMUEpCisJCWlmIChscV9zdGEtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCS8qIHN1cHBfcmF0ZXMgaGFzIG5vIENDSyBiaXRzIGluIEEgbW9kZSAqLwogCQkJcmF0ZV9zY2FsZV9pbmRleF9tc2sgPSAodTE2KSAocmF0ZV9tYXNrICYKIAkJCQkobHFfc3RhLT5zdXBwX3JhdGVzIDw8IElXTF9GSVJTVF9PRkRNX1JBVEUpKTsKQEAgLTE2ODUsNyArMTgzMiw3IEBACiAJCWlmICh1cGRhdGVfbHEpIHsKIAkJCXJzX21jc19mcm9tX3RibCgmbWNzX3JhdGUsIHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKIAkJCXJzX2ZpbGxfbGlua19jbWQobHFfc3RhLCAmbWNzX3JhdGUsICZscV9zdGEtPmxxKTsKLQkJCXJzX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOworCQkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogCQl9CiAJCWdvdG8gb3V0OwogCkBAIC0xNzI3LDcgKzE4NzQsNyBAQAogCQkJdGJsID0gJihscV9zdGEtPmxxX2luZm9bYWN0aXZlX3RibF0pOwogCiAJCQkvKiBSZXZlcnQgdG8gImFjdGl2ZSIgcmF0ZSBhbmQgdGhyb3VnaHB1dCBpbmZvICovCi0JCQlpbmRleCA9IGl3bDQ5NjVfcmF0ZV9pbmRleF9mcm9tX3BsY3AoCisJCQlpbmRleCA9IGl3bDQ5NjVfaHdyYXRlX3RvX3BsY3BfaWR4KAogCQkJCXRibC0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyk7CiAJCQljdXJyZW50X3RwdCA9IGxxX3N0YS0+bGFzdF90cHQ7CiAKQEAgLTE4NTAsNyArMTk5Nyw3IEBACiAJaWYgKHVwZGF0ZV9scSkgewogCQlyc19tY3NfZnJvbV90YmwoJm1jc19yYXRlLCB0YmwsIGluZGV4LCBpc19ncmVlbik7CiAJCXJzX2ZpbGxfbGlua19jbWQobHFfc3RhLCAmbWNzX3JhdGUsICZscV9zdGEtPmxxKTsKLQkJcnNfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CisJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKIAl9CiAKIAkvKiBTaG91bGQgd2Ugc3RheSB3aXRoIHRoaXMgbW9kdWxhdGlvbiBtb2RlLCBvciBzZWFyY2ggZm9yIGEgbmV3IG9uZT8gKi8KQEAgLTE4ODMsMTQgKzIwMzAsMTQgQEAKIAkJCQlyc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdygmKHRibC0+d2luW2ldKSk7CiAKIAkJCS8qIFVzZSBuZXcgInNlYXJjaCIgc3RhcnQgcmF0ZSAqLwotCQkJaW5kZXggPSBpd2w0OTY1X3JhdGVfaW5kZXhfZnJvbV9wbGNwKAorCQkJaW5kZXggPSBpd2w0OTY1X2h3cmF0ZV90b19wbGNwX2lkeCgKIAkJCQkJdGJsLT5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzKTsKIAogCQkJSVdMX0RFQlVHX0hUKCJTd2l0Y2ggY3VycmVudCAgbWNzOiAlWCBpbmRleDogJWRcbiIsCiAJCQkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MsIGluZGV4KTsKIAkJCXJzX2ZpbGxfbGlua19jbWQobHFfc3RhLCAmdGJsLT5jdXJyZW50X3JhdGUsCiAJCQkJCSAmbHFfc3RhLT5scSk7Ci0JCQlyc19zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwkJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKIAkJfQogCiAJCS8qIElmIHRoZSAiYWN0aXZlIiAobm9uLXNlYXJjaCkgbW9kZSB3YXMgbGVnYWN5LApAQCAtMTkxNCwxNSArMjA2MSwxNCBAQAogCQkgKiBtb2RlIGZvciBhIHdoaWxlIGJlZm9yZSBuZXh0IHJvdW5kIG9mIG1vZGUgY29tcGFyaXNvbnMuICovCiAJCWlmIChscV9zdGEtPmVuYWJsZV9jb3VudGVyICYmCiAJCSAgICAobHFfc3RhLT5hY3Rpb25fY291bnRlciA+PSBJV0xfQUNUSU9OX0xJTUlUKSkgewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotCQkJLyogSWYgYXBwcm9wcmlhdGUsIHNldCB1cCBhZ2dyZWdhdGlvbiEgKi8KLQkJCWlmICgobHFfc3RhLT5sYXN0X3RwdCA+IFRJRF9BR0dfVFBUX1RIUkVIT0xEKSAmJgotCQkJICAgIChwcml2LT5scV9tbmdyLmFnZ19jdHJsLmF1dG9fYWdnKSkgewotCQkJCXByaXYtPmxxX21uZ3IuYWdnX2N0cmwudGlkX3JldHJ5ID0KLQkJCQkgICAgVElEX0FMTF9TUEVDSUZJRUQ7Ci0JCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+YWdnX3dvcmspOworI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJCQlpZiAoKGxxX3N0YS0+bGFzdF90cHQgPiBJV0xfQUdHX1RQVF9USFJFSE9MRCkgJiYKKwkJCSAgICAobHFfc3RhLT50eF9hZ2dfdGlkX2VuICYgKDEgPDwgdGlkKSkgJiYKKwkJCSAgICAodGlkICE9IE1BWF9USURfQ09VTlQpKSB7CisJCQkJSVdMX0RFQlVHX0hUKCJ0cnkgdG8gYWdncmVnYXRlIHRpZCAlZFxuIiwgdGlkKTsKKwkJCQlyc190bF90dXJuX29uX2FnZyhwcml2LCB0aWQsIGxxX3N0YSwgc3RhKTsKIAkJCX0KLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUX0FHRyAqLworI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPSAwOwogCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUoMCwgbHFfc3RhKTsKIAkJfQpAQCAtMTk0MiwyMSArMjA4OCwyMSBAQAogb3V0OgogCXJzX21jc19mcm9tX3RibCgmdGJsLT5jdXJyZW50X3JhdGUsIHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKIAlpID0gaW5kZXg7Ci0Jc3RhLT5sYXN0X3R4cmF0ZSA9IGk7CisJc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSBpOwogCi0JLyogc3RhLT50eHJhdGUgaXMgYW4gaW5kZXggdG8gQSBtb2RlIHJhdGVzIHdoaWNoIHN0YXJ0CisJLyogc3RhLT50eHJhdGVfaWR4IGlzIGFuIGluZGV4IHRvIEEgbW9kZSByYXRlcyB3aGljaCBzdGFydAogCSAqIGF0IElXTF9GSVJTVF9PRkRNX1JBVEUKIAkgKi8KLQlpZiAobHFfc3RhLT5waHltb2RlID09ICh1OCkgTU9ERV9JRUVFODAyMTFBKQotCQlzdGEtPnR4cmF0ZSA9IGkgLSBJV0xfRklSU1RfT0ZETV9SQVRFOworCWlmIChscV9zdGEtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJc3RhLT50eHJhdGVfaWR4ID0gaSAtIElXTF9GSVJTVF9PRkRNX1JBVEU7CiAJZWxzZQotCQlzdGEtPnR4cmF0ZSA9IGk7CisJCXN0YS0+dHhyYXRlX2lkeCA9IGk7CiAKIAlyZXR1cm47CiB9CiAKIAotc3RhdGljIHZvaWQgcnNfaW5pdGlhbGl6ZV9scShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgcnNfaW5pdGlhbGl6ZV9scShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwKIAkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CkBAIC0xOTcyLDcgKzIxMTgsNyBAQAogCQlnb3RvIG91dDsKIAogCWxxX3N0YSA9IChzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKilzdGEtPnJhdGVfY3RybF9wcml2OwotCWkgPSBzdGEtPmxhc3RfdHhyYXRlOworCWkgPSBzdGEtPmxhc3RfdHhyYXRlX2lkeDsKIAogCWlmICgobHFfc3RhLT5scS5zdGFfaWQgPT0gMHhmZikgJiYKIAkgICAgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykpCkBAIC0xOTk2LDcgKzIxNDIsNyBAQAogCQltY3NfcmF0ZS5yYXRlX25fZmxhZ3MgfD0gUkFURV9NQ1NfQ0NLX01TSzsKIAogCXRibC0+YW50ZW5uYV90eXBlID0gQU5UX0FVWDsKLQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJm1jc19yYXRlLCBwcml2LT5waHltb2RlLCB0YmwsICZyYXRlX2lkeCk7CisJcnNfZ2V0X3RibF9pbmZvX2Zyb21fbWNzKCZtY3NfcmF0ZSwgcHJpdi0+YmFuZCwgdGJsLCAmcmF0ZV9pZHgpOwogCWlmICghcnNfaXNfYW50X2Nvbm5lY3RlZChwcml2LT52YWxpZF9hbnRlbm5hLCB0YmwtPmFudGVubmFfdHlwZSkpCiAJICAgIHJzX3RvZ2dsZV9hbnRlbm5hKCZtY3NfcmF0ZSwgdGJsKTsKIApAQCAtMjAwNCwxMyArMjE1MCwxNCBAQAogCXRibC0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyA9IG1jc19yYXRlLnJhdGVfbl9mbGFnczsKIAlyc19nZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKIAlyc19maWxsX2xpbmtfY21kKGxxX3N0YSwgJm1jc19yYXRlLCAmbHFfc3RhLT5scSk7Ci0JcnNfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CisJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogIG91dDoKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIHJzX2dldF9yYXRlKHZvaWQgKnByaXZfcmF0ZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCByYXRlX3NlbGVjdGlvbiAqc2VsKQogewogCkBAIC0yMDIwLDExICsyMTY3LDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgZmM7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsNDk2NV9wcml2ICopcHJpdl9yYXRlOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3JhdGU7CiAJc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9zdGE7CiAKIAlJV0xfREVCVUdfUkFURV9MSU1JVCgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nIGxvd2VzdApAQCAtMjAzMiwxNCArMjE4MSwxMiBAQAogCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSB8fCBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSB8fAogCSAgICAhc3RhIHx8ICFzdGEtPnJhdGVfY3RybF9wcml2KSB7Ci0JCXNlbC0+cmF0ZSA9IHJhdGVfbG93ZXN0KGxvY2FsLCBsb2NhbC0+b3Blcl9od19tb2RlLCBzdGEpOwotCQlpZiAoc3RhKQotCQkJc3RhX2luZm9fcHV0KHN0YSk7Ci0JCXJldHVybjsKKwkJc2VsLT5yYXRlID0gcmF0ZV9sb3dlc3QobG9jYWwsIHNiYW5kLCBzdGEpOworCQlnb3RvIG91dDsKIAl9CiAKIAlscV9zdGEgPSAoc3RydWN0IGl3bDQ5NjVfbHFfc3RhICopc3RhLT5yYXRlX2N0cmxfcHJpdjsKLQlpID0gc3RhLT5sYXN0X3R4cmF0ZTsKKwlpID0gc3RhLT5sYXN0X3R4cmF0ZV9pZHg7CiAKIAlpZiAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgJiYKIAkgICAgIWxxX3N0YS0+aWJzc19zdGFfYWRkZWQpIHsKQEAgLTIwNjIsMTQgKzIyMDksMTUgQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLSBkb25lOgorZG9uZToKIAlpZiAoKGkgPCAwKSB8fCAoaSA+IElXTF9SQVRFX0NPVU5UKSkgewotCQlzZWwtPnJhdGUgPSByYXRlX2xvd2VzdChsb2NhbCwgbG9jYWwtPm9wZXJfaHdfbW9kZSwgc3RhKTsKLQkJcmV0dXJuOworCQlzZWwtPnJhdGUgPSByYXRlX2xvd2VzdChsb2NhbCwgc2JhbmQsIHN0YSk7CisJCWdvdG8gb3V0OwogCX0KLQlzdGFfaW5mb19wdXQoc3RhKTsKIAogCXNlbC0+cmF0ZSA9ICZwcml2LT5pZWVlX3JhdGVzW2ldOworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCAqcnNfYWxsb2Nfc3RhKHZvaWQgKnByaXYsIGdmcF90IGdmcCkKQEAgLTIwOTksMTMgKzIyNDcsMTUgQEAKIHsKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWwtPmh3LmNvbmY7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlID0gbG9jYWwtPm9wZXJfaHdfbW9kZTsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2w0OTY1X3ByaXYgKilwcml2X3JhdGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKXByaXZfcmF0ZTsKIAlzdHJ1Y3QgaXdsNDk2NV9scV9zdGEgKmxxX3N0YSA9IHByaXZfc3RhOwogCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCiAJbHFfc3RhLT5mbHVzaF90aW1lciA9IDA7Ci0JbHFfc3RhLT5zdXBwX3JhdGVzID0gc3RhLT5zdXBwX3JhdGVzOwotCXN0YS0+dHhyYXRlID0gMzsKKwlscV9zdGEtPnN1cHBfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOworCXN0YS0+dHhyYXRlX2lkeCA9IDM7CiAJZm9yIChqID0gMDsgaiA8IExRX1NJWkU7IGorKykKIAkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQlyc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdygmKGxxX3N0YS0+bHFfaW5mb1tqXS53aW5baV0pKTsKQEAgLTIxNDAsMTUgKzIyOTAsMTUgQEAKIAl9CiAKIAkvKiBGaW5kIGhpZ2hlc3QgdHggcmF0ZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgYW5kIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbW9kZS0+bnVtX3JhdGVzOyBpKyspIHsKLQkJaWYgKChzdGEtPnN1cHBfcmF0ZXMgJiBCSVQoaSkpICYmCi0JCSAgICAobW9kZS0+cmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TVVBQT1JURUQpKQotCQkJc3RhLT50eHJhdGUgPSBpOwotCX0KLQlzdGEtPmxhc3RfdHhyYXRlID0gc3RhLT50eHJhdGU7CisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspCisJCWlmIChzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdICYgQklUKGkpKQorCQkJc3RhLT50eHJhdGVfaWR4ID0gaTsKKworCXN0YS0+bGFzdF90eHJhdGVfaWR4ID0gc3RhLT50eHJhdGVfaWR4OworCS8qIFdURiBpcyB3aXRoIHRoaXMgYm9ndXMgY29tbWVudD8gQSBkb2Vzbid0IGhhdmUgY2NrIHJhdGVzICovCiAJLyogRm9yIE1PREVfSUVFRTgwMjExQSwgY2NrIHJhdGVzIGFyZSBhdCBlbmQgb2YgcmF0ZSB0YWJsZSAqLwotCWlmIChsb2NhbC0+aHcuY29uZi5waHltb2RlID09IE1PREVfSUVFRTgwMjExQSkKLQkJc3RhLT5sYXN0X3R4cmF0ZSArPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXN0YS0+bGFzdF90eHJhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKIAlscV9zdGEtPmlzX2R1cCA9IDA7CiAJbHFfc3RhLT52YWxpZF9hbnRlbm5hID0gcHJpdi0+dmFsaWRfYW50ZW5uYTsKQEAgLTIxNTcsNyArMjMwNyw3IEBACiAJbHFfc3RhLT5hY3RpdmVfcmF0ZSA9IHByaXYtPmFjdGl2ZV9yYXRlOwogCWxxX3N0YS0+YWN0aXZlX3JhdGUgJj0gfigweDEwMDApOwogCWxxX3N0YS0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYzsKLQlscV9zdGEtPnBoeW1vZGUgPSBwcml2LT5waHltb2RlOworCWxxX3N0YS0+YmFuZCA9IHByaXYtPmJhbmQ7CiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAkvKgogCSAqIGFjdGl2ZV9zaXNvX3JhdGUgbWFzayBpbmNsdWRlcyA5IE1CaXRzIChiaXQgNSksIGFuZCBDQ0sgKGJpdHMgMC0zKSwKQEAgLTIxODAsNiArMjMzMCw4IEBACiAJSVdMX0RFQlVHX0hUKCJTSVNPIFJBVEUgMHglWCBNSU1PIFJBVEUgMHglWFxuIiwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfbWltb19yYXRlKTsKKwkvKiBhcyBkZWZhdWx0IGFsbG93IGFnZ3JlZ2F0aW9uIGZvciBhbGwgdGlkcyAqLworCWxxX3N0YS0+dHhfYWdnX3RpZF9lbiA9IElXTF9BR0dfQUxMX1RJRDsKICNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUKi8KICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogCWxxX3N0YS0+ZHJ2ID0gcHJpdjsKQEAgLTIxOTMsNyArMjM0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHJzX2ZpbGxfbGlua19jbWQoc3RydWN0IGl3bDQ5NjVfbHFfc3RhICpscV9zdGEsCiAJCQkgICAgc3RydWN0IGl3bDQ5NjVfcmF0ZSAqdHhfbWNzLAotCQkJICAgIHN0cnVjdCBpd2w0OTY1X2xpbmtfcXVhbGl0eV9jbWQgKmxxX2NtZCkKKwkJCSAgICBzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgKmxxX2NtZCkKIHsKIAlpbnQgaW5kZXggPSAwOwogCWludCByYXRlX2lkeDsKQEAgLTIyMDcsNyArMjM1OSw3IEBACiAJcnNfZGJnZnNfc2V0X21jcyhscV9zdGEsIHR4X21jcywgaW5kZXgpOwogCiAJLyogSW50ZXJwcmV0IHJhdGVfbl9mbGFncyAqLwotCXJzX2dldF90YmxfaW5mb19mcm9tX21jcyh0eF9tY3MsIGxxX3N0YS0+cGh5bW9kZSwKKwlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3ModHhfbWNzLCBscV9zdGEtPmJhbmQsCiAJCQkJICAmdGJsX3R5cGUsICZyYXRlX2lkeCk7CiAKIAkvKiBIb3cgbWFueSB0aW1lcyBzaG91bGQgd2UgcmVwZWF0IHRoZSBpbml0aWFsIHJhdGU/ICovCkBAIC0yMjYxLDcgKzI0MTMsNyBAQAogCQkJaW5kZXgrKzsKIAkJfQogCi0JCXJzX2dldF90YmxfaW5mb19mcm9tX21jcygmbmV3X3JhdGUsIGxxX3N0YS0+cGh5bW9kZSwgJnRibF90eXBlLAorCQlyc19nZXRfdGJsX2luZm9fZnJvbV9tY3MoJm5ld19yYXRlLCBscV9zdGEtPmJhbmQsICZ0YmxfdHlwZSwKIAkJCQkJCSZyYXRlX2lkeCk7CiAKIAkJLyogSW5kaWNhdGUgdG8gdUNvZGUgd2hpY2ggZW50cmllcyBtaWdodCBiZSBNSU1PLgpAQCAtMjMxOCwxNyArMjQ3MCwxMSBAQAogCiBzdGF0aWMgdm9pZCByc19jbGVhcih2b2lkICpwcml2X3JhdGUpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsNDk2NV9wcml2ICopIHByaXZfcmF0ZTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopIHByaXZfcmF0ZTsKIAogCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CiAKIAlwcml2LT5scV9tbmdyLmxxX3JlYWR5ID0gMDsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotCWlmIChwcml2LT5scV9tbmdyLmFnZ19jdHJsLmdyYW50ZWRfYmEpCi0JCWl3bDQ5NjVfdHVybl9vZmZfYWdnKHByaXYsIFRJRF9BTExfU1BFQ0lGSUVEKTsKLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUX0FHRyAqLwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAKIAlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOwogfQpAQCAtMjM1NCw3ICsyNTAwLDcgQEAKIHsKIAl1MzIgYmFzZV9yYXRlOwogCi0JaWYgKGxxX3N0YS0+cGh5bW9kZSA9PSAodTgpIE1PREVfSUVFRTgwMjExQSkKKwlpZiAobHFfc3RhLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCWJhc2VfcmF0ZSA9IDB4ODAwRDsKIAllbHNlCiAJCWJhc2VfcmF0ZSA9IDB4ODIwQTsKQEAgLTIzOTgsNyArMjU0NCw3IEBACiAKIAlpZiAobHFfc3RhLT5kYmdfZml4ZWQucmF0ZV9uX2ZsYWdzKSB7CiAJCXJzX2ZpbGxfbGlua19jbWQobHFfc3RhLCAmbHFfc3RhLT5kYmdfZml4ZWQsICZscV9zdGEtPmxxKTsKLQkJcnNfc2VuZF9scV9jbWQobHFfc3RhLT5kcnYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOworCQlpd2xfc2VuZF9scV9jbWQobHFfc3RhLT5kcnYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTI0OTUsNiArMjY0MSwxMiBAQAogCWxxX3N0YS0+cnNfc3RhX2RiZ2ZzX3N0YXRzX3RhYmxlX2ZpbGUgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyYXRlX3N0YXRzX3RhYmxlIiwgMDYwMCwgZGlyLAogCQkJbHFfc3RhLCAmcnNfc3RhX2RiZ2ZzX3N0YXRzX3RhYmxlX29wcyk7CisjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKKwlscV9zdGEtPnJzX3N0YV9kYmdmc190eF9hZ2dfdGlkX2VuX2ZpbGUgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91OCgidHhfYWdnX3RpZF9lbmFibGUiLCAwNjAwLCBkaXIsCisJCSZscV9zdGEtPnR4X2FnZ190aWRfZW4pOworI2VuZGlmCisKIH0KIAogc3RhdGljIHZvaWQgcnNfcmVtb3ZlX2RlYnVnZnModm9pZCAqcHJpdiwgdm9pZCAqcHJpdl9zdGEpCkBAIC0yNTAyLDYgKzI2NTQsOSBAQAogCXN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7CiAJZGVidWdmc19yZW1vdmUobHFfc3RhLT5yc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfZmlsZSk7CiAJZGVidWdmc19yZW1vdmUobHFfc3RhLT5yc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfZmlsZSk7CisjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKKwlkZWJ1Z2ZzX3JlbW92ZShscV9zdGEtPnJzX3N0YV9kYmdmc190eF9hZ2dfdGlkX2VuX2ZpbGUpOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMjUyNSw3ICsyNjgwLDcgQEAKIGludCBpd2w0OTY1X2ZpbGxfcnNfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY2hhciAqYnVmLCB1OCBzdGFfaWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBpd2w0OTY1X2xxX3N0YSAqbHFfc3RhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCBjbnQgPSAwLCBpOwpAQCAtMjUzNCwxMyArMjY4OSwxNSBAQAogCXUzMiBtYXhfdGltZSA9IDA7CiAJdTggbHFfdHlwZSwgYW50ZW5uYTsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhIHx8ICFzdGEtPnJhdGVfY3RybF9wcml2KSB7Ci0JCWlmIChzdGEpIHsKLQkJCXN0YV9pbmZvX3B1dChzdGEpOworCQlpZiAoc3RhKQogCQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlIC0gbm8gcHJpdmF0ZSByYXRlIGRhdGEhXG4iKTsKLQkJfSBlbHNlCisJCWVsc2UKIAkJCUlXTF9ERUJVR19SQVRFKCJsZWF2ZSAtIG5vIHN0YXRpb24hXG4iKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInN0YXRpb24gJWQgbm90IGZvdW5kXG4iLCBzdGFfaWQpOwogCX0KIApAQCAtMjYwNSwyNSArMjc2MiwyNSBAQAogCiAJY250ICs9IHNwcmludGYoJmJ1ZltjbnRdLCAiXG5yYXRlIHNjYWxlIHR5cGUgJWQgYW50ZW5uYSAlZCAiCiAJCQkgImFjdGl2ZV9zZWFyY2ggJWQgcmF0ZSBpbmRleCAlZFxuIiwgbHFfdHlwZSwgYW50ZW5uYSwKLQkJCSBscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsLCBzdGEtPmxhc3RfdHhyYXRlKTsKKwkJCSBscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsLCBzdGEtPmxhc3RfdHhyYXRlX2lkeCk7CiAKLQlzdGFfaW5mb19wdXQoc3RhKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gY250OwogfQogCiB2b2lkIGl3bDQ5NjVfcmF0ZV9zY2FsZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzMzIgc3RhX2lkKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAogCXByaXYtPmxxX21uZ3IubHFfcmVhZHkgPSAxOwogfQogCi12b2lkIGl3bDQ5NjVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoraW50IGl3bDQ5NjVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmcnNfb3BzKTsKKwlyZXR1cm4gaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmcnNfb3BzKTsKIH0KIAotdm9pZCBpd2w0OTY1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQordm9pZCBpd2w0OTY1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpCiB7CiAJaWVlZTgwMjExX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCZyc19vcHMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ycy5oCmluZGV4IDU1ZjcwNzMuLjg2NmUzNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjEyLDYgKzIxMiwxOCBAQAogCiAjZGVmaW5lIExRX1NJWkUJCTIJLyogMiBtb2RlIHRhYmxlczogICJBY3RpdmUiIGFuZCAiU2VhcmNoIiAqLwogCisvKiBsb2FkIHBlciB0aWQgZGVmaW5lcyBmb3IgQS1NUERVIGFjdGl2YXRpb24gKi8KKyNkZWZpbmUgSVdMX0FHR19UUFRfVEhSRUhPTEQJMAorI2RlZmluZSBJV0xfQUdHX0xPQURfVEhSRVNIT0xECTEwCisjZGVmaW5lIElXTF9BR0dfQUxMX1RJRAkJMHhmZgorI2RlZmluZSBUSURfUVVFVUVfQ0VMTF9TUEFDSU5HCTUwCS8qbVMgKi8KKyNkZWZpbmUgVElEX1FVRVVFX01BWF9TSVpFCTIwCisjZGVmaW5lIFRJRF9ST1VORF9WQUxVRQkJNQkvKiBtUyAqLworI2RlZmluZSBUSURfTUFYX0xPQURfQ09VTlQJOAorCisjZGVmaW5lIFRJRF9NQVhfVElNRV9ESUZGICgoVElEX1FVRVVFX01BWF9TSVpFIC0gMSkgKiBUSURfUVVFVUVfQ0VMTF9TUEFDSU5HKQorI2RlZmluZSBUSU1FX1dSQVBfQVJPVU5EKHgsIHkpICgoKHkpID4gKHgpKSA/ICh5KSAtICh4KSA6ICgwLSh4KSkgKyAoeSkpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsNDk2NV9yYXRlX2luZm8gaXdsNDk2NV9yYXRlc1tJV0xfUkFURV9DT1VOVF07CiAKIGVudW0gaXdsNDk2NV90YWJsZV90eXBlIHsKQEAgLTI0Nyw3ICsyNTksNyBAQAogCXJldHVybiByYXRlOwogfQogCi1leHRlcm4gaW50IGl3bDQ5NjVfcmF0ZV9pbmRleF9mcm9tX3BsY3AoaW50IHBsY3ApOworZXh0ZXJuIGludCBpd2w0OTY1X2h3cmF0ZV90b19wbGNwX2lkeCh1MzIgcmF0ZV9uX2ZsYWdzKTsKIAogLyoqCiAgKiBpd2w0OTY1X2ZpbGxfcnNfaW5mbyAtIEZpbGwgYW4gb3V0cHV0IHRleHQgYnVmZmVyIHdpdGggdGhlIHJhdGUgcmVwcmVzZW50YXRpb24KQEAgLTI3Niw3ICsyODgsNyBAQAogICogaWVlZTgwMjExX3JlZ2lzdGVyX2h3CiAgKgogICovCi1leHRlcm4gdm9pZCBpd2w0OTY1X3JhdGVfY29udHJvbF9yZWdpc3RlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitleHRlcm4gaW50IGl3bDQ5NjVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwogCiAvKioKICAqIGl3bDQ5NjVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCkBAIC0yODQsNiArMjk2LDYgQEAKICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBjYWxsaW5nIGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3LCBidXQgYmVmb3JlCiAgKiB0aGUgZHJpdmVyIGlzIHVubG9hZGVkLgogICovCi1leHRlcm4gdm9pZCBpd2w0OTY1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiB2b2lkIGl3bDQ5NjVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IGQ3MjdkZTguLjE3ZjYyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzgsMTAgKzM4LDIxIEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCiAjaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfaHdfY2FyZF9zaG93X2luZm8oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7CisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w0OTY1X21vZF9wYXJhbXMgPSB7CisJLm51bV9vZl9xdWV1ZXMgPSBJV0w0OTY1X01BWF9OVU1fUVVFVUVTLAorCS5lbmFibGVfcW9zID0gMSwKKwkuYW1zZHVfc2l6ZV84SyA9IDEsCisJLyogdGhlIHJlc3QgYXJlIDAgYnkgZGVmYXVsdCAqLworfTsKKworc3RhdGljIHZvaWQgaXdsNDk2NV9od19jYXJkX3Nob3dfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAjZGVmaW5lIElXTF9ERUNMQVJFX1JBVEVfSU5GTyhyLCBzLCBpcCwgaW4sIHJwLCBybiwgcHAsIG5wKSAgICBcCiAJW0lXTF9SQVRFXyMjciMjTV9JTkRFWF0gPSB7IElXTF9SQVRFXyMjciMjTV9QTENQLCAgICAgIFwKQEAgLTc5LDEzICs5MCwyNzcgQEAKIAlJV0xfREVDTEFSRV9SQVRFX0lORk8oNjAsIDYwLCA0OCwgSU5WLCA0OCwgSU5WLCA0OCwgSU5WKSwvKiA2MG1icHMgKi8KIH07CiAKKyNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAorCitzdGF0aWMgY29uc3QgdTE2IGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm9bXSA9IHsKKwlJV0xfVFhfRklGT19BQzEsCisJSVdMX1RYX0ZJRk9fQUMwLAorCUlXTF9UWF9GSUZPX0FDMCwKKwlJV0xfVFhfRklGT19BQzEsCisJSVdMX1RYX0ZJRk9fQUMyLAorCUlXTF9UWF9GSUZPX0FDMiwKKwlJV0xfVFhfRklGT19BQzMsCisJSVdMX1RYX0ZJRk9fQUMzLAorCUlXTF9UWF9GSUZPX05PTkUsCisJSVdMX1RYX0ZJRk9fTk9ORSwKKwlJV0xfVFhfRklGT19OT05FLAorCUlXTF9UWF9GSUZPX05PTkUsCisJSVdMX1RYX0ZJRk9fTk9ORSwKKwlJV0xfVFhfRklGT19OT05FLAorCUlXTF9UWF9GSUZPX05PTkUsCisJSVdMX1RYX0ZJRk9fTk9ORSwKKwlJV0xfVFhfRklGT19BQzMKK307CisKKyNlbmRpZgkvKkNPTkZJR19JV0w0OTY1X0hUICovCisKKy8qIGNoZWNrIGNvbnRlbnRzIG9mIHNwZWNpYWwgYm9vdHN0cmFwIHVDb2RlIFNSQU0gKi8KK3N0YXRpYyBpbnQgaXdsNDk2NV92ZXJpZnlfYnNtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCXUzMiByZWc7CisJdTMyIHZhbDsKKworCUlXTF9ERUJVR19JTkZPKCJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKKworCS8qIHZlcmlmeSBCU00gU1JBTSBjb250ZW50cyAqLworCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHKTsKKwlmb3IgKHJlZyA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOworCSAgICAgcmVnIDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47CisJICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKKwkJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKKwkJCUlXTF9FUlJPUigiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgorCQkJCSAgImFkZHIgMHglMDhYKyV1IChvZiAldSksIGlzIDB4JXgsIHMvYiAweCV4XG4iLAorCQkJCSAgQlNNX1NSQU1fTE9XRVJfQk9VTkQsCisJCQkJICByZWcgLSBCU01fU1JBTV9MT1dFUl9CT1VORCwgbGVuLAorCQkJCSAgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJSVdMX0RFQlVHX0lORk8oIkJTTSBib290c3RyYXAgdUNvZGUgaW1hZ2UgT0tcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXdsNDk2NV9sb2FkX2JzbSAtIExvYWQgYm9vdHN0cmFwIGluc3RydWN0aW9ucworICoKKyAqIEJTTSBvcGVyYXRpb246CisgKgorICogVGhlIEJvb3RzdHJhcCBTdGF0ZSBNYWNoaW5lIChCU00pIHN0b3JlcyBhIHNob3J0IGJvb3RzdHJhcCB1Q29kZSBwcm9ncmFtCisgKiBpbiBzcGVjaWFsIFNSQU0gdGhhdCBkb2VzIG5vdCBwb3dlciBkb3duIGR1cmluZyBSRktJTEwuICBXaGVuIHBvd2VyaW5nIGJhY2sKKyAqIHVwIGFmdGVyIHBvd2VyLXNhdmluZyBzbGVlcHMgKG9yIGR1cmluZyBpbml0aWFsIHVDb2RlIGxvYWQpLCB0aGUgQlNNIGxvYWRzCisgKiB0aGUgYm9vdHN0cmFwIHByb2dyYW0gaW50byB0aGUgb24tYm9hcmQgcHJvY2Vzc29yLCBhbmQgc3RhcnRzIGl0LgorICoKKyAqIFRoZSBib290c3RyYXAgcHJvZ3JhbSBsb2FkcyAodmlhIERNQSkgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGZvciBhIG5ldworICogcHJvZ3JhbSBmcm9tIGhvc3QgRFJBTSBsb2NhdGlvbnMgaW5kaWNhdGVkIGJ5IHRoZSBob3N0IGRyaXZlciBpbiB0aGUKKyAqIEJTTV9EUkFNXyogcmVnaXN0ZXJzLiAgT25jZSB0aGUgbmV3IHByb2dyYW0gaXMgbG9hZGVkLCBpdCBzdGFydHMKKyAqIGF1dG9tYXRpY2FsbHkuCisgKgorICogV2hlbiBpbml0aWFsaXppbmcgdGhlIE5JQywgdGhlIGhvc3QgZHJpdmVyIHBvaW50cyB0aGUgQlNNIHRvIHRoZQorICogImluaXRpYWxpemUiIHVDb2RlIGltYWdlLiAgVGhpcyB1Q29kZSBzZXRzIHVwIHNvbWUgaW50ZXJuYWwgZGF0YSwgdGhlbgorICogbm90aWZpZXMgaG9zdCB2aWEgImluaXRpYWxpemUgYWxpdmUiIHRoYXQgaXQgaXMgY29tcGxldGUuCisgKgorICogVGhlIGhvc3QgdGhlbiByZXBsYWNlcyB0aGUgQlNNX0RSQU1fKiBwb2ludGVyIHZhbHVlcyB0byBwb2ludCB0byB0aGUKKyAqIG5vcm1hbCBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgYSBiYWNrdXAgdUNvZGUgZGF0YSBjYWNoZSBidWZmZXIKKyAqIChmaWxsZWQgaW5pdGlhbGx5IHdpdGggc3RhcnRpbmcgZGF0YSB2YWx1ZXMgZm9yIHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IpLAorICogdGhlbiB0cmlnZ2VycyB0aGUgImluaXRpYWxpemUiIHVDb2RlIHRvIGxvYWQgYW5kIGxhdW5jaCB0aGUgcnVudGltZSB1Q29kZSwKKyAqIHdoaWNoIGJlZ2lucyBub3JtYWwgb3BlcmF0aW9uLgorICoKKyAqIFdoZW4gZG9pbmcgYSBwb3dlci1zYXZlIHNodXRkb3duLCBydW50aW1lIHVDb2RlIHNhdmVzIGRhdGEgU1JBTSBpbnRvCisgKiB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW4gRFJBTSBiZWZvcmUgU1JBTSBpcyBwb3dlcmVkIGRvd24uCisgKgorICogV2hlbiBwb3dlcmluZyBiYWNrIHVwLCB0aGUgQlNNIGxvYWRzIHRoZSBib290c3RyYXAgcHJvZ3JhbS4gIFRoaXMgcmVsb2FkcworICogdGhlIHJ1bnRpbWUgdUNvZGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW50byBTUkFNLAorICogYW5kIHJlLWxhdW5jaGVzIHRoZSBydW50aW1lIHVDb2RlIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYuCisgKi8KK3N0YXRpYyBpbnQgaXdsNDk2NV9sb2FkX2JzbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJX19sZTMyICppbWFnZSA9IHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOworCXUzMiBsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKKwlkbWFfYWRkcl90IHBpbnN0OworCWRtYV9hZGRyX3QgcGRhdGE7CisJdTMyIGluc3RfbGVuOworCXUzMiBkYXRhX2xlbjsKKwlpbnQgaTsKKwl1MzIgZG9uZTsKKwl1MzIgcmVnX29mZnNldDsKKwlpbnQgcmV0OworCisJSVdMX0RFQlVHX0lORk8oIkJlZ2luIGxvYWQgYnNtXG4iKTsKKworCS8qIG1ha2Ugc3VyZSBib290c3RyYXAgcHJvZ3JhbSBpcyBubyBsYXJnZXIgdGhhbiBCU00ncyBTUkFNIHNpemUgKi8KKwlpZiAobGVuID4gSVdMX01BWF9CU01fU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIHRoZSAiSW5pdGlhbGl6ZSIgdUNvZGUKKwkgKiAgIGluIGhvc3QgRFJBTSAuLi4gaG9zdCBEUkFNIHBoeXNpY2FsIGFkZHJlc3MgYml0cyAzNTo0IGZvciA0OTY1LgorCSAqIE5PVEU6ICBpd2w0OTY1X2luaXRpYWxpemVfYWxpdmVfc3RhcnQoKSB3aWxsIHJlcGxhY2UgdGhlc2UgdmFsdWVzLAorCSAqICAgICAgICBhZnRlciB0aGUgImluaXRpYWxpemUiIHVDb2RlIGhhcyBydW4sIHRvIHBvaW50IHRvCisJICogICAgICAgIHJ1bnRpbWUvcHJvdG9jb2wgaW5zdHJ1Y3Rpb25zIGFuZCBiYWNrdXAgZGF0YSBjYWNoZS4gKi8KKwlwaW5zdCA9IHByaXYtPnVjb2RlX2luaXQucF9hZGRyID4+IDQ7CisJcGRhdGEgPSBwcml2LT51Y29kZV9pbml0X2RhdGEucF9hZGRyID4+IDQ7CisJaW5zdF9sZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKKwlkYXRhX2xlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47CisKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX0JZVEVDT1VOVF9SRUcsIGluc3RfbGVuKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsIGRhdGFfbGVuKTsKKworCS8qIEZpbGwgQlNNIG1lbW9yeSB3aXRoIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KKwlmb3IgKHJlZ19vZmZzZXQgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKKwkgICAgIHJlZ19vZmZzZXQgPCBCU01fU1JBTV9MT1dFUl9CT1VORCArIGxlbjsKKwkgICAgIHJlZ19vZmZzZXQgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspCisJCV9pd2xfd3JpdGVfcHJwaChwcml2LCByZWdfb2Zmc2V0LCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKKworCXJldCA9IGl3bDQ5NjVfdmVyaWZ5X2JzbShwcml2KTsKKwlpZiAocmV0KSB7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fU1JDX1JFRywgMHgwKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX0RTVF9SRUcsIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKKworCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKKwkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpOworCisJLyogV2FpdCBmb3IgbG9hZCBvZiBib290c3RyYXAgdUNvZGUgdG8gZmluaXNoICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWRvbmUgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRyk7CisJCWlmICghKGRvbmUgJiBCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAoaSA8IDEwMCkKKwkJSVdMX0RFQlVHX0lORk8oIkJTTSB3cml0ZSBjb21wbGV0ZSwgcG9sbCAlZCBpdGVyYXRpb25zXG4iLCBpKTsKKwllbHNlIHsKKwkJSVdMX0VSUk9SKCJCU00gd3JpdGUgZGlkIG5vdCBjb21wbGV0ZSFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBFbmFibGUgZnV0dXJlIGJvb3QgbG9hZHMgd2hlbmV2ZXIgcG93ZXIgbWFuYWdlbWVudCB1bml0IHRyaWdnZXJzIGl0CisJICogICAoZS5nLiB3aGVuIHBvd2VyaW5nIGJhY2sgdXAgYWZ0ZXIgcG93ZXItc2F2ZSBzaHV0ZG93bikgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlRfRU4pOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl3bDQ5NjVfaW5pdF9kcnYoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlwcml2LT5hbnRlbm5hID0gKGVudW0gaXdsNDk2NV9hbnRlbm5hKXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+YW50ZW5uYTsKKwlwcml2LT5yZXRyeV9yYXRlID0gMTsKKwlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bHFfbW5nci5sb2NrKTsKKworCXByaXYtPnNoYXJlZF92aXJ0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NoYXJlZCksCisJCQkJCSZwcml2LT5zaGFyZWRfcGh5cyk7CisKKwlpZiAoIXByaXYtPnNoYXJlZF92aXJ0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCW1lbXNldChwcml2LT5zaGFyZWRfdmlydCwgMCwgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NoYXJlZCkpOworCisKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX0lCU1NfTUFDX0hBU0hfU0laRTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+aWJzc19tYWNfaGFzaFtpXSk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZV9mcmFtZXMpOworCisJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOworCisJLyogQ2xlYXIgdGhlIGRyaXZlcidzIChub3QgZGV2aWNlJ3MpIHN0YXRpb24gdGFibGUgKi8KKwlpd2xjb3JlX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOworCisJcHJpdi0+ZGF0YV9yZXRyeV9saW1pdCA9IC0xOworCXByaXYtPmllZWVfY2hhbm5lbHMgPSBOVUxMOworCXByaXYtPmllZWVfcmF0ZXMgPSBOVUxMOworCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCisJcHJpdi0+aXdfbW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX1NUQTsKKworCXByaXYtPnVzZV9hbnRfYl9mb3JfbWFuYWdlbWVudF9mcmFtZSA9IDE7IC8qIHN0YXJ0IHdpdGggYW50IEIgKi8KKwlwcml2LT52YWxpZF9hbnRlbm5hID0gMHg3OwkvKiBhc3N1bWUgYWxsIDMgY29ubmVjdGVkICovCisJcHJpdi0+cHNfbW9kZSA9IElXTF9NSU1PX1BTX05PTkU7CisKKwkvKiBDaG9vc2Ugd2hpY2ggcmVjZWl2ZXJzL2FudGVubmFzIHRvIHVzZSAqLworCWl3bDQ5NjVfc2V0X3J4b25fY2hhaW4ocHJpdik7CisKKwlpd2xjb3JlX3Jlc2V0X3Fvcyhwcml2KTsKKworCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOworCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKKworCWl3bGNvcmVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBJRUVFODAyMTFfQkFORF8yR0haLCA2KTsKKworCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKKwkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBQyBtb2RlICovCisJcHJpdi0+cG93ZXJfbW9kZSA9IElXTF9QT1dFUl9BQzsKKwlwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPSBJV0xfREVGQVVMVF9UWF9QT1dFUjsKKworCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBpd2w0OTY1X2luaXRfZ2Vvcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKKwl9CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKGVycm9yICVkKVxuIiwKKwkJCQlyZXQpOworCQlnb3RvIGVycl9mcmVlX2dlb3M7CisJfQorCisJcHJpdi0+aHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKKwlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9nZW9zOgorCWl3bDQ5NjVfZnJlZV9nZW9zKHByaXYpOworZXJyX2ZyZWVfY2hhbm5lbF9tYXA6CisJaXdsX2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBpc19mYXRfY2hhbm5lbChfX2xlMzIgcnhvbl9mbGFncykKIHsKIAlyZXR1cm4gKHJ4b25fZmxhZ3MgJiBSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spIHx8CiAJCShyeG9uX2ZsYWdzICYgUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01JWEVEX01TSyk7CiB9CiAKLXN0YXRpYyB1OCBpc19zaW5nbGVfc3RyZWFtKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdTggaXNfc2luZ2xlX3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAlpZiAoIXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0IHx8CkBAIC05OCwxMyArMzczLDcxIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBpd2w0OTY1X2h3cmF0ZV90b19wbGNwX2lkeCh1MzIgcmF0ZV9uX2ZsYWdzKQoreworCWludCBpZHggPSAwOworCisJLyogNDk2NSBIVCByYXRlIGZvcm1hdCAqLworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVF9NU0spIHsKKwkJaWR4ID0gKHJhdGVfbl9mbGFncyAmIDB4ZmYpOworCisJCWlmIChpZHggPj0gSVdMX1JBVEVfTUlNT182TV9QTENQKQorCQkJaWR4ID0gaWR4IC0gSVdMX1JBVEVfTUlNT182TV9QTENQOworCisJCWlkeCArPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCQkvKiBza2lwIDlNIG5vdCBzdXBwb3J0ZWQgaW4gaHQqLworCQlpZiAoaWR4ID49IElXTF9SQVRFXzlNX0lOREVYKQorCQkJaWR4ICs9IDE7CisJCWlmICgoaWR4ID49IElXTF9GSVJTVF9PRkRNX1JBVEUpICYmIChpZHggPD0gSVdMX0xBU1RfT0ZETV9SQVRFKSkKKwkJCXJldHVybiBpZHg7CisKKwkvKiA0OTY1IGxlZ2FjeSByYXRlIGZvcm1hdCwgc2VhcmNoIGZvciBtYXRjaCBpbiB0YWJsZSAqLworCX0gZWxzZSB7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShpd2w0OTY1X3JhdGVzKTsgaWR4KyspCisJCQlpZiAoaXdsNDk2NV9yYXRlc1tpZHhdLnBsY3AgPT0gKHJhdGVfbl9mbGFncyAmIDB4RkYpKQorCQkJCXJldHVybiBpZHg7CisJfQorCisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIHRyYW5zbGF0ZSB1Y29kZSByZXNwb25zZSB0byBtYWM4MDIxMSB0eCBzdGF0dXMgY29udHJvbCB2YWx1ZXMKKyAqLwordm9pZCBpd2w0OTY1X2h3cmF0ZV90b190eF9jb250cm9sKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJhdGVfbl9mbGFncywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK3sKKwlpbnQgcmF0ZV9pbmRleDsKKworCWNvbnRyb2wtPmFudGVubmFfc2VsX3R4ID0KKwkJKChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19BTlRfQUJfTVNLKSA+PiBSQVRFX01DU19BTlRfUE9TKTsKKwlpZiAocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfSFRfTVNLKQorCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfT0ZETV9IVDsKKwlpZiAocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfR0ZfTVNLKQorCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfR1JFRU5fRklFTEQ7CisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0ZBVF9NU0spCisJCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF80MF9NSFpfV0lEVEg7CisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0RVUF9NU0spCisJCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9EVVBfREFUQTsKKwlpZiAocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfU0dJX01TSykKKwkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX1NIT1JUX0dJOworCS8qIHNpbmNlIGl3bDQ5NjVfaHdyYXRlX3RvX3BsY3BfaWR4IGlzIGJhbmQgaW5kaWZmZXJlbnQsIHdlIGFsd2F5cyB1c2UKKwkgKiBJRUVFODAyMTFfQkFORF8yR0haIGJhbmQgYXMgaXQgY29udGFpbnMgYWxsIHRoZSByYXRlcyAqLworCXJhdGVfaW5kZXggPSBpd2w0OTY1X2h3cmF0ZV90b19wbGNwX2lkeChyYXRlX25fZmxhZ3MpOworCWlmIChyYXRlX2luZGV4ID09IC0xKQorCQljb250cm9sLT50eF9yYXRlID0gTlVMTDsKKwllbHNlCisJCWNvbnRyb2wtPnR4X3JhdGUgPQorCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzW3JhdGVfaW5kZXhdOworfQorCiAvKgogICogRGV0ZXJtaW5lIGhvdyBtYW55IHJlY2VpdmVyL2FudGVubmEgY2hhaW5zIHRvIHVzZS4KICAqIE1vcmUgcHJvdmlkZXMgYmV0dGVyIHJlY2VwdGlvbiB2aWEgZGl2ZXJzaXR5LiAgRmV3ZXIgc2F2ZXMgcG93ZXIuCiAgKiBNSU1PIChkdWFsIHN0cmVhbSkgcmVxdWlyZXMgYXQgbGVhc3QgMiwgYnV0IHdvcmtzIGJldHRlciB3aXRoIDMuCiAgKiBUaGlzIGRvZXMgbm90IGRldGVybWluZSAqd2hpY2gqIGNoYWlucyB0byB1c2UsIGp1c3QgaG93IG1hbnkuCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9nZXRfcnhfY2hhaW5fY291bnRlcihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2w0OTY1X2dldF9yeF9jaGFpbl9jb3VudGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJdTggKmlkbGVfc3RhdGUsIHU4ICpyeF9zdGF0ZSkKIHsKIAl1OCBpc19zaW5nbGUgPSBpc19zaW5nbGVfc3RyZWFtKHByaXYpOwpAQCAtMTMzLDMyICs0NjYsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl3bDQ5NjVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK2ludCBpd2w0OTY1X2h3X3J4cV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIHN0b3AgUnggRE1BICovCi0JaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHLCAwKTsKLQlyYyA9IGl3bDQ5NjVfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIX01FTV9SU1NSX1JYX1NUQVRVU19SRUcsCisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcsIDApOworCXJjID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSF9NRU1fUlNTUl9SWF9TVEFUVVNfUkVHLAogCQkJCSAgICAgKDEgPDwgMjQpLCAxMDAwKTsKIAlpZiAocmMgPCAwKQogCQlJV0xfRVJST1IoIkNhbid0IHN0b3AgUnggRE1BLlxuIik7CiAKLQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCi11OCBpd2w0OTY1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKK3U4IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIpCiB7CiAJaW50IGk7CiAJaW50IHN0YXJ0ID0gMDsKQEAgLTE3MSwxMCArNTA0LDEwIEBACiAJCXN0YXJ0ID0gSVdMX1NUQV9JRDsKIAogCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJcmV0dXJuIElXTDQ5NjVfQlJPQURDQVNUX0lEOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IHN0YXJ0OyBpIDwgcHJpdi0+aHdfc2V0dGluZy5tYXhfc3RhdGlvbnM7IGkrKykKKwlmb3IgKGkgPSBzdGFydDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7IGkrKykKIAkJaWYgKChwcml2LT5zdGF0aW9uc1tpXS51c2VkKSAmJgogCQkgICAgKCFjb21wYXJlX2V0aGVyX2FkZHIKIAkJICAgICAocHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyLCBhZGRyKSkpIHsKQEAgLTE5MCwxMyArNTIzLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X25pY19zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgcHdyX21heCkKK3N0YXRpYyBpbnQgaXdsNDk2NV9uaWNfc2V0X3B3cl9zcmMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgcHdyX21heCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJldCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByZXQ7CkBAIC0yMDksOTIgKzU0Miw5MiBAQAogCQkJCQkgICAmdmFsKTsKIAogCQlpZiAodmFsICYgUENJX0NGR19QTUNfUE1FX0ZST01fRDNDT0xEX1NVUFBPUlQpCi0JCQlpd2w0OTY1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAorCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUFdSX1NSQ19WQVVYLAogCQkJCX5BUE1HX1BTX0NUUkxfTVNLX1BXUl9TUkMpOwogCX0gZWxzZQotCQlpd2w0OTY1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAorCQlpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCiAJCQlBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVk1BSU4sCiAJCQl+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKIAotCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X3J4X2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnJ4cSkKK3N0YXRpYyBpbnQgaXdsNDk2NV9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnJ4cSkKIHsKLQlpbnQgcmM7CisJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByYl9zaXplOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykgeworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiByYzsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoaXdsNDk2NV9wYXJhbV9hbXNkdV9zaXplXzhLKQorCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmFtc2R1X3NpemVfOEspCiAJCXJiX3NpemUgPSBGSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JCX1NJWkVfOEs7CiAJZWxzZQogCQlyYl9zaXplID0gRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SQl9TSVpFXzRLOwogCiAJLyogU3RvcCBSeCBETUEgKi8KLQlpd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcsIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHLCAwKTsKIAogCS8qIFJlc2V0IGRyaXZlcidzIFJ4IHF1ZXVlIHdyaXRlIGluZGV4ICovCi0JaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9SQkRDQl9XUFRSX1JFRywgMCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHLCAwKTsKIAogCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgUkJEIGNpcmN1bGFyIGJ1ZmZlciBpbiBEUkFNICovCi0JaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9SQkRDQl9CQVNFX1JFRywKLQkJCSAgICAgcnhxLT5kbWFfYWRkciA+PiA4KTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcsCisJCQkgICByeHEtPmRtYV9hZGRyID4+IDgpOwogCiAJLyogVGVsbCBkZXZpY2Ugd2hlcmUgaW4gRFJBTSB0byB1cGRhdGUgaXRzIFJ4IHN0YXR1cyAqLwotCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfU1RUU19XUFRSX1JFRywKLQkJCSAgICAgKHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMgKwotCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bDQ5NjVfc2hhcmVkLCB2YWwwKSkgPj4gNCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1NUVFNfV1BUUl9SRUcsCisJCQkgICAocHJpdi0+c2hhcmVkX3BoeXMgKworCQkJICAgIG9mZnNldG9mKHN0cnVjdCBpd2w0OTY1X3NoYXJlZCwgcmJfY2xvc2VkKSkgPj4gNCk7CiAKIAkvKiBFbmFibGUgUnggRE1BLCBlbmFibGUgaG9zdCBpbnRlcnJ1cHQsIFJ4IGJ1ZmZlciBzaXplIDRrLCAyNTYgUkJEcyAqLwotCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRywKLQkJCSAgICAgRkhfUkNTUl9SWF9DT05GSUdfQ0hOTF9FTl9FTkFCTEVfVkFMIHwKLQkJCSAgICAgRkhfUkNTUl9DSE5MMF9SWF9DT05GSUdfSVJRX0RFU1RfSU5UX0hPU1RfVkFMIHwKLQkJCSAgICAgcmJfc2l6ZSB8Ci0JCQkgICAgIC8qMHgxMCA8PCA0IHwgKi8KLQkJCSAgICAgKFJYX1FVRVVFX1NJWkVfTE9HIDw8CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX01FTV9SQ1NSX0NITkwwX0NPTkZJR19SRUcsCisJCQkgICBGSF9SQ1NSX1JYX0NPTkZJR19DSE5MX0VOX0VOQUJMRV9WQUwgfAorCQkJICAgRkhfUkNTUl9DSE5MMF9SWF9DT05GSUdfSVJRX0RFU1RfSU5UX0hPU1RfVkFMIHwKKwkJCSAgIHJiX3NpemUgfAorCQkJICAgICAvKiAweDEwIDw8IDQgfCAqLworCQkJICAgKFJYX1FVRVVFX1NJWkVfTE9HIDw8CiAJCQkgICAgICBGSF9SQ1NSX1JYX0NPTkZJR19SQkRDQl9TSVpFX0JJVFNISUZUKSk7CiAKIAkvKgotCSAqIGl3bDQ5NjVfd3JpdGUzMihwcml2LENTUl9JTlRfQ09BTF9SRUcsMCk7CisJICogaXdsX3dyaXRlMzIocHJpdixDU1JfSU5UX0NPQUxfUkVHLDApOwogCSAqLwogCi0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogVGVsbCA0OTY1IHdoZXJlIHRvIGZpbmQgdGhlICJrZWVwIHdhcm0iIGJ1ZmZlciAqLwotc3RhdGljIGludCBpd2w0OTY1X2t3X2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsNDk2NV9rd19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIAotCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSVdMX0ZIX0tXX01FTV9BRERSX1JFRywKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSVdMX0ZIX0tXX01FTV9BRERSX1JFRywKIAkJCSAgICAgcHJpdi0+a3cuZG1hX2FkZHIgPj4gNCk7Ci0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfa3dfYWxsb2Moc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsNDk2NV9rd19hbGxvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CiAJc3RydWN0IGl3bDQ5NjVfa3cgKmt3ID0gJnByaXYtPmt3OwpAQCAtMzA3LDU4ICs2NDAsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBDSEVDS19BTkRfUFJJTlQoeCkgKChlZXByb21fY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfIyN4KSBcCi0JCQkgICAgPyAjIHggIiAiIDogIiIpCi0KLS8qKgotICogaXdsNDk2NV9zZXRfZmF0X2NoYW5faW5mbyAtIENvcHkgZmF0IGNoYW5uZWwgaW5mbyBpbnRvIGRyaXZlcidzIHByaXYuCi0gKgotICogRG9lcyBub3Qgc2V0IHVwIGEgY29tbWFuZCwgb3IgdG91Y2ggaGFyZHdhcmUuCi0gKi8KLWludCBpd2w0OTY1X3NldF9mYXRfY2hhbl9pbmZvKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCBwaHltb2RlLCB1MTYgY2hhbm5lbCwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsICplZXByb21fY2gsCi0JCQkgICAgICB1OCBmYXRfZXh0ZW5zaW9uX2NoYW5uZWwpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JY2hfaW5mbyA9IChzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKikKLQkJCWl3bDQ5NjVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwaHltb2RlLCBjaGFubmVsKTsKLQotCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKLQkJcmV0dXJuIC0xOwotCi0JSVdMX0RFQlVHX0lORk8oIkZBVCBDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMoMHglMDJ4IgotCQkJIiAlZGRCbSk6IEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKLQkJCWNoX2luZm8tPmNoYW5uZWwsCi0JCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/Ci0JCQkiNS4yIiA6ICIyLjQiLAotCQkJQ0hFQ0tfQU5EX1BSSU5UKElCU1MpLAotCQkJQ0hFQ0tfQU5EX1BSSU5UKEFDVElWRSksCi0JCQlDSEVDS19BTkRfUFJJTlQoUkFEQVIpLAotCQkJQ0hFQ0tfQU5EX1BSSU5UKFdJREUpLAotCQkJQ0hFQ0tfQU5EX1BSSU5UKE5BUlJPVyksCi0JCQlDSEVDS19BTkRfUFJJTlQoREZTKSwKLQkJCWVlcHJvbV9jaC0+ZmxhZ3MsCi0JCQllZXByb21fY2gtPm1heF9wb3dlcl9hdmcsCi0JCQkoKGVlcHJvbV9jaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9JQlNTKQotCQkJICYmICEoZWVwcm9tX2NoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSkgPwotCQkJIiIgOiAibm90ICIpOwotCi0JY2hfaW5mby0+ZmF0X2VlcHJvbSA9ICplZXByb21fY2g7Ci0JY2hfaW5mby0+ZmF0X21heF9wb3dlcl9hdmcgPSBlZXByb21fY2gtPm1heF9wb3dlcl9hdmc7Ci0JY2hfaW5mby0+ZmF0X2N1cnJfdHhwb3cgPSBlZXByb21fY2gtPm1heF9wb3dlcl9hdmc7Ci0JY2hfaW5mby0+ZmF0X21pbl9wb3dlciA9IDA7Ci0JY2hfaW5mby0+ZmF0X3NjYW5fcG93ZXIgPSBlZXByb21fY2gtPm1heF9wb3dlcl9hdmc7Ci0JY2hfaW5mby0+ZmF0X2ZsYWdzID0gZWVwcm9tX2NoLT5mbGFnczsKLQljaF9pbmZvLT5mYXRfZXh0ZW5zaW9uX2NoYW5uZWwgPSBmYXRfZXh0ZW5zaW9uX2NoYW5uZWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2w0OTY1X2t3X2ZyZWUgLSBGcmVlIHRoZSAia2VlcCB3YXJtIiBidWZmZXIKICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9rd19mcmVlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2t3X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwogCXN0cnVjdCBpd2w0OTY1X2t3ICprdyA9ICZwcml2LT5rdzsKQEAgLTM3Niw3ICs2NjEsNyBAQAogICogQHBhcmFtIHByaXYKICAqIEByZXR1cm4gZXJyb3IgY29kZQogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdHhxX2N0eF9yZXNldChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X3R4cV9jdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYyA9IDA7CiAJaW50IHR4cV9pZCwgc2xvdHNfbnVtOwpAQCAtMzk2LDcgKzY4MSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JcmMgPSBpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHVubGlrZWx5KHJjKSkgewogCQlJV0xfRVJST1IoIlRYIHJlc2V0IGZhaWxlZCIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC00MDQsOCArNjg5LDggQEAKIAl9CiAKIAkvKiBUdXJuIG9mZiBhbGwgVHggRE1BIGNoYW5uZWxzICovCi0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEtEUl9TQ0RfVFhGQUNULCAwKTsKLQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w0OV9TQ0RfVFhGQUNULCAwKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFRlbGwgNDk2NSB3aGVyZSB0byBmaW5kIHRoZSBrZWVwLXdhcm0gYnVmZmVyICovCkBAIC00MTcsNyArNzAyLDcgQEAKIAogCS8qIEFsbG9jIGFuZCBpbml0IGFsbCAoZGVmYXVsdCAxNikgVHggcXVldWVzLAogCSAqIGluY2x1ZGluZyB0aGUgY29tbWFuZCBxdWV1ZSAoIzQpICovCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19zZXR0aW5nLm1heF90eHFfbnVtOyB0eHFfaWQrKykgeworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtOyB0eHFfaWQrKykgewogCQlzbG90c19udW0gPSAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKSA/CiAJCQkJCVRGRF9DTURfU0xPVFMgOiBURkRfVFhfQ01EX1NMT1RTOwogCQlyYyA9IGl3bDQ5NjVfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKQEAgLTQzOCw3ICs3MjMsNyBAQAogCXJldHVybiByYzsKIH0KIAotaW50IGl3bDQ5NjVfaHdfbmljX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK2ludCBpd2w0OTY1X2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ1MiwxMSArNzM3LDExIEBACiAJLyogbmljX2luaXQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaXdsNDk2NV9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAorCWl3bF9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAogCQkgICAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9ESVNfTDBTX0VYSVRfVElNRVIpOwogCi0JaXdsNDk2NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7Ci0JcmMgPSBpd2w0OTY1X3BvbGxfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCXJjID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwKIAkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCWlmIChyYyA8IDApIHsKQEAgLTQ2NSwyNiArNzUwLDI1IEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsNDk2NV9yZWFkX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcpOworCWl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcpOwogCi0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHLAotCQkJCSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAotCQkJCSBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwotCWl3bDQ5NjVfcmVhZF9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19DVFJMX1JFRywKKwkJCUFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8IEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7CisJaXdsX3JlYWRfcHJwaChwcml2LCBBUE1HX0NMS19DVFJMX1JFRyk7CiAKIAl1ZGVsYXkoMjApOwogCi0JaXdsNDk2NV9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUENJREVWX1NUVF9SRUcsCi0JCQkJICAgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7CisJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKKwkJCQlBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOwogCi0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0JaXdsNDk2NV93cml0ZTMyKHByaXYsIENTUl9JTlRfQ09BTEVTQ0lORywgNTEyIC8gMzIpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9DT0FMRVNDSU5HLCA1MTIgLyAzMik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogRGV0ZXJtaW5lIEhXIHR5cGUgKi8KQEAgLTUyMCwyNSArODA0LDI0IEBACiAKIAkvKiBzZXQgQ1NSX0hXX0NPTkZJR19SRUcgZm9yIHVDb2RlIHVzZSAqLwogCi0JaXdsNDk2NV9zZXRfYml0KHByaXYsIENTUl9TV19WRVIsIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9LRURST05fUiB8Ci0JCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfUkFESU9fU0kgfAotCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX01BQ19TSSk7CisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCSAgICBDU1I0OV9IV19JRl9DT05GSUdfUkVHX0JJVF80OTY1X1IgfAorCQkgICAgQ1NSNDlfSFdfSUZfQ09ORklHX1JFR19CSVRfUkFESU9fU0kgfAorCQkgICAgQ1NSNDlfSFdfSUZfQ09ORklHX1JFR19CSVRfTUFDX1NJKTsKIAotCXJjID0gaXdsNDk2NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYyA8IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsNDk2NV9yZWFkX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRyk7Ci0JaXdsNDk2NV9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCi0JCQkJICAgIEFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKTsKKwlpd2xfcmVhZF9wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcpOworCWl3bF9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsIEFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKTsKIAl1ZGVsYXkoNSk7Ci0JaXdsNDk2NV9jbGVhcl9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKLQkJCQkgICAgICBBUE1HX1BTX0NUUkxfVkFMX1JFU0VUX1JFUSk7CisJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLCBBUE1HX1BTX0NUUkxfVkFMX1JFU0VUX1JFUSk7CiAKLQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWl3bDQ5NjVfaHdfY2FyZF9zaG93X2luZm8ocHJpdik7CkBAIC01ODIsNyArODY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl3bDQ5NjVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitpbnQgaXdsNDk2NV9od19uaWNfc3RvcF9tYXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYyA9IDA7CiAJdTMyIHJlZ192YWw7CkBAIC01OTEsMTYgKzg3NCwxNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBzZXQgc3RvcCBtYXN0ZXIgYml0ICovCi0JaXdsNDk2NV9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NUT1BfTUFTVEVSKTsKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TVE9QX01BU1RFUik7CiAKLQlyZWdfdmFsID0gaXdsNDk2NV9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKKwlyZWdfdmFsID0gaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpOwogCiAJaWYgKENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfUE9XRVJfU0FWRSA9PQogCSAgICAocmVnX3ZhbCAmIENTUl9HUF9DTlRSTF9SRUdfTVNLX1BPV0VSX1NBVkVfVFlQRSkpCiAJCUlXTF9ERUJVR19JTkZPKCJDYXJkIGluIHBvd2VyIHNhdmUsIG1hc3RlciBpcyBhbHJlYWR5ICIKIAkJCSAgICAgICAic3RvcHBlZFxuIik7CiAJZWxzZSB7Ci0JCXJjID0gaXdsNDk2NV9wb2xsX2JpdChwcml2LCBDU1JfUkVTRVQsCisJCXJjID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9SRVNFVCwKIAkJCQkgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsCiAJCQkJICBDU1JfUkVTRVRfUkVHX0ZMQUdfTUFTVEVSX0RJU0FCTEVELCAxMDApOwogCQlpZiAocmMgPCAwKSB7CkBAIC02MTgsMjcgKzkwMSwyNiBAQAogLyoqCiAgKiBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcCAtIFN0b3AgYWxsIFR4IERNQSBjaGFubmVscywgZnJlZSBUeCBxdWV1ZSBtZW1vcnkKICAqLwotdm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQordm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAKIAlpbnQgdHhxX2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBTdG9wIGVhY2ggVHggRE1BIGNoYW5uZWwsIGFuZCB3YWl0IGZvciBpdCB0byBiZSBpZGxlICovCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19zZXR0aW5nLm1heF90eHFfbnVtOyB0eHFfaWQrKykgeworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtOyB0eHFfaWQrKykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlpZiAoaXdsNDk2NV9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJaWYgKGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LAotCQkJCSAgICAgSVdMX0ZIX1RDU1JfQ0hOTF9UWF9DT05GSUdfUkVHKHR4cV9pZCksCi0JCQkJICAgICAweDApOwotCQlpd2w0OTY1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBJV0xfRkhfVFNTUl9UWF9TVEFUVVNfUkVHLAotCQkJCQlJV0xfRkhfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUKLQkJCQkJKHR4cV9pZCksIDIwMCk7Ci0JCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwKKwkJCQkgICBJV0xfRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcodHhxX2lkKSwgMHgwKTsKKwkJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBJV0xfRkhfVFNTUl9UWF9TVEFUVVNfUkVHLAorCQkJCSAgICBJV0xfRkhfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUKKwkJCQkgICAgKHR4cV9pZCksIDIwMCk7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTY0Niw3ICs5MjgsNyBAQAogCWl3bDQ5NjVfaHdfdHhxX2N0eF9mcmVlKHByaXYpOwogfQogCi1pbnQgaXdsNDk2NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK2ludCBpd2w0OTY1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjU1LDI5ICs5MzcsMjkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpd2w0OTY1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKIAogCXVkZWxheSgxMCk7CiAKLQlpd2w0OTY1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQlyYyA9IGl3bDQ5NjVfcG9sbF9iaXQocHJpdiwgQ1NSX1JFU0VULAorCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CisJcmMgPSBpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX1JFU0VULAogCQkJICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLAogCQkJICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNSk7CiAKIAl1ZGVsYXkoMTApOwogCi0JcmMgPSBpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKCFyYykgewotCQlpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAotCQkJCQkgQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUIHwKLQkJCQkJIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7CisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0VOX1JFRywKKwkJCQlBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAorCQkJCUFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7CiAKIAkJdWRlbGF5KDEwKTsKIAotCQlpd2w0OTY1X3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKLQkJCQlBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOworCQlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BDSURFVl9TVFRfUkVHLAorCQkJCQlBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOwogCi0JCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0KIAogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwpAQCAtNjk0LDU2ICs5NzYsMzcgQEAKIC8qKgogICogaXdsNDk2NV9iZ19zdGF0aXN0aWNzX3BlcmlvZGljIC0gVGltZXIgY2FsbGJhY2sgdG8gcXVldWUgc3RhdGlzdGljcwogICoKLSAqIFRoaXMgY2FsbGJhY2sgaXMgcHJvdmlkZWQgaW4gb3JkZXIgdG8gcXVldWUgdGhlIHN0YXRpc3RpY3Nfd29yawotICogaW4gd29ya19xdWV1ZSBjb250ZXh0ICh2LiBzb2Z0aXJxKQorICogVGhpcyBjYWxsYmFjayBpcyBwcm92aWRlZCBpbiBvcmRlciB0byBzZW5kIGEgc3RhdGlzdGljcyByZXF1ZXN0LgogICoKICAqIFRoaXMgdGltZXIgZnVuY3Rpb24gaXMgY29udGludWFsbHkgcmVzZXQgdG8gZXhlY3V0ZSB3aXRoaW4KICAqIFJFR19SRUNBTElCX1BFUklPRCBzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OCiAgKiB3YXMgcmVjZWl2ZWQuICBXZSBuZWVkIHRvIGVuc3VyZSB3ZSByZWNlaXZlIHRoZSBzdGF0aXN0aWNzIGluIG9yZGVyCi0gKiB0byB1cGRhdGUgdGhlIHRlbXBlcmF0dXJlIHVzZWQgZm9yIGNhbGlicmF0aW5nIHRoZSBUWFBPV0VSLiAgSG93ZXZlciwKLSAqIHdlIGNhbid0IHNlbmQgdGhlIHN0YXRpc3RpY3MgY29tbWFuZCBmcm9tIHNvZnRpcnEgY29udGV4dCAod2hpY2gKLSAqIGlzIHRoZSBjb250ZXh0IHdoaWNoIHRpbWVycyBydW4gYXQpIHNvIHdlIGhhdmUgdG8gcXVldWUgb2ZmIHRoZQotICogc3RhdGlzdGljc193b3JrIHRvIGFjdHVhbGx5IHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIGhhcmR3YXJlLgorICogdG8gdXBkYXRlIHRoZSB0ZW1wZXJhdHVyZSB1c2VkIGZvciBjYWxpYnJhdGluZyB0aGUgVFhQT1dFUi4KICAqLwogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19zdGF0aXN0aWNzX3BlcmlvZGljKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2w0OTY1X3ByaXYgKilkYXRhOwotCi0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zdGF0aXN0aWNzX3dvcmspOwotfQotCi0vKioKLSAqIGl3bDQ5NjVfYmdfc3RhdGlzdGljc193b3JrIC0gU2VuZCB0aGUgc3RhdGlzdGljcyByZXF1ZXN0IHRvIHRoZSBoYXJkd2FyZS4KLSAqCi0gKiBUaGlzIGlzIHF1ZXVlZCBieSBpd2w0OTY1X2JnX3N0YXRpc3RpY3NfcGVyaW9kaWMuCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfYmdfc3RhdGlzdGljc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2w0OTY1X3ByaXYsCi0JCQkJCSAgICAgc3RhdGlzdGljc193b3JrKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZGF0YTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bDQ5NjVfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdik7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9BU1lOQyk7CiB9CiAKICNkZWZpbmUgQ1RfTElNSVRfQ09OU1QJCTI1OQogI2RlZmluZSBUTV9DVF9LSUxMX1RIUkVTSE9MRAkxMTAKIAotdm9pZCBpd2w0OTY1X3JmX2tpbGxfY3RfY29uZmlnKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCit2b2lkIGl3bDQ5NjVfcmZfa2lsbF9jdF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2w0OTY1X2N0X2tpbGxfY29uZmlnIGNtZDsKIAl1MzIgUjEsIFIyLCBSMzsKIAl1MzIgdGVtcF90aDsKIAl1MzIgY3JpdF90ZW1wZXJhdHVyZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYyA9IDA7CisJaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAogCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfUkVHX0JJVF9DVF9LSUxMX0VYSVQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtNzYxLDkgKzEwMjQsOSBAQAogCiAJY3JpdF90ZW1wZXJhdHVyZSA9ICgodGVtcF90aCAqIChSMy1SMSkpL0NUX0xJTUlUX0NPTlNUKSArIFIyOwogCWNtZC5jcml0aWNhbF90ZW1wZXJhdHVyZV9SID0gIGNwdV90b19sZTMyKGNyaXRfdGVtcGVyYXR1cmUpOwotCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9wZHUocHJpdiwKLQkJCSAgICAgIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwgc2l6ZW9mKGNtZCksICZjbWQpOwotCWlmIChyYykKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKKwkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7CisJaWYgKHJldCkKIAkJSVdMX0VSUk9SKCJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKIAllbHNlCiAJCUlXTF9ERUJVR19JTkZPKCJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgc3VjY2VlZGVkXG4iKTsKQEAgLTc3OSw3ICsxMDQyLDcgQEAKICAqICAgZW5vdWdoIHRvIHJlY2VpdmUgYWxsIG9mIG91ciBvd24gbmV0d29yayB0cmFmZmljLCBidXQgbm90IHNvCiAgKiAgIGhpZ2ggdGhhdCBvdXIgRFNQIGdldHMgdG9vIGJ1c3kgdHJ5aW5nIHRvIGxvY2sgb250byBub24tbmV0d29yawogICogICBhY3Rpdml0eS9ub2lzZS4gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9zZW5zX2VuZXJneV9jY2soc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsNDk2NV9zZW5zX2VuZXJneV9jY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgIHUzMiBub3JtX2ZhLAogCQkJCSAgIHUzMiByeF9lbmFibGVfdGltZSwKIAkJCQkgICBzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2RhdGEgKnJ4X2luZm8pCkBAIC05NzAsNyArMTIzMyw3IEBACiB9CiAKIAotc3RhdGljIGludCBpd2w0OTY1X3NlbnNfYXV0b19jb3JyX29mZG0oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsNDk2NV9zZW5zX2F1dG9fY29ycl9vZmRtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgdTMyIG5vcm1fZmEsCiAJCQkJICAgICAgIHUzMiByeF9lbmFibGVfdGltZSkKIHsKQEAgLTEwMzUsMjUgKzEyOTgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X3NlbnNpdGl2aXR5X2NhbGxiYWNrKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2w0OTY1X2NtZCAqY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBpd2w0OTY1X3NlbnNpdGl2aXR5X2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBXZSBkaWRuJ3QgY2FjaGUgdGhlIFNLQjsgbGV0IHRoZSBjYWxsZXIgZnJlZSBpdCAqLwogCXJldHVybiAxOwogfQogCiAvKiBQcmVwYXJlIGEgU0VOU0lUSVZJVFlfQ01ELCBzZW5kIHRvIHVDb2RlIGlmIHZhbHVlcyBoYXZlIGNoYW5nZWQgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9zZW5zaXRpdml0eV93cml0ZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCBmbGFncykKK3N0YXRpYyBpbnQgaXdsNDk2NV9zZW5zaXRpdml0eV93cml0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzKQogewotCWludCByYyA9IDA7CiAJc3RydWN0IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY21kIGNtZCA7CiAJc3RydWN0IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YSA9IE5VTEw7Ci0Jc3RydWN0IGl3bDQ5NjVfaG9zdF9jbWQgY21kX291dCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZF9vdXQgPSB7CiAJCS5pZCA9IFNFTlNJVElWSVRZX0NNRCwKIAkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zZW5zaXRpdml0eV9jbWQpLAogCQkubWV0YS5mbGFncyA9IGZsYWdzLAogCQkuZGF0YSA9ICZjbWQsCiAJfTsKKwlpbnQgcmV0OwogCiAJZGF0YSA9ICYocHJpdi0+c2Vuc2l0aXZpdHlfZGF0YSk7CiAKQEAgLTExMTEsMjAgKzEzNzQsMTggQEAKIAltZW1jcHkoJihwcml2LT5zZW5zaXRpdml0eV90YmxbMF0pLCAmKGNtZC50YWJsZVswXSksCiAJICAgICAgIHNpemVvZih1MTYpKkhEX1RBQkxFX1NJWkUpOwogCi0JcmMgPSBpd2w0OTY1X3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKLQlpZiAoIXJjKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiU0VOU0lUSVZJVFlfQ01EIHN1Y2NlZWRlZFxuIik7Ci0JCXJldHVybiByYzsKLQl9CisJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKKwlpZiAocmV0KQorCQlJV0xfRVJST1IoIlNFTlNJVElWSVRZX0NNRCBmYWlsZWRcbiIpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTggZmxhZ3MsIHU4IGZvcmNlKQordm9pZCBpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmbGFncywgdTggZm9yY2UpCiB7Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKIAlzdHJ1Y3QgaXdsNDk2NV9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKKwlpbnQgaTsKKwlpbnQgcmV0ICA9IDA7CiAKIAlJV0xfREVCVUdfQ0FMSUIoIlN0YXJ0IGl3bDQ5NjVfaW5pdF9zZW5zaXRpdml0eVxuIik7CiAKQEAgLTExNjgsOCArMTQyOSw4IEBACiAJCW1lbXNldCgmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksIDAsCiAJCSAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKTsKIAotCXJjIHw9IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfd3JpdGUocHJpdiwgZmxhZ3MpOwotCUlXTF9ERUJVR19DQUxJQigiPDxyZXR1cm4gMHglWFxuIiwgcmMpOworCXJldCB8PSBpd2w0OTY1X3NlbnNpdGl2aXR5X3dyaXRlKHByaXYsIGZsYWdzKTsKKwlJV0xfREVCVUdfQ0FMSUIoIjw8cmV0dXJuIDB4JVhcbiIsIHJldCk7CiAKIAlyZXR1cm47CiB9CkBAIC0xMTc4LDEzICsxNDM5LDEyIEBACiAvKiBSZXNldCBkaWZmZXJlbnRpYWwgUnggZ2FpbnMgaW4gTklDIHRvIHByZXBhcmUgZm9yIGNoYWluIG5vaXNlIGNhbGlicmF0aW9uLgogICogQ2FsbGVkIGFmdGVyIGV2ZXJ5IGFzc29jaWF0aW9uLCBidXQgdGhpcyBydW5zIG9ubHkgb25jZSEKICAqICAuLi4gb25jZSBjaGFpbiBub2lzZSBpcyBjYWxpYnJhdGVkIHRoZSBmaXJzdCB0aW1lLCBpdCdzIGdvb2QgZm9yZXZlci4gICovCi12b2lkIGl3bDQ5NjVfY2hhaW5fbm9pc2VfcmVzZXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNDk2NV9jaGFpbl9ub2lzZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfY2hhaW5fbm9pc2VfZGF0YSAqZGF0YSA9IE5VTEw7Ci0JaW50IHJjID0gMDsKIAogCWRhdGEgPSAmKHByaXYtPmNoYWluX25vaXNlX2RhdGEpOwotCWlmICgoZGF0YS0+c3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFKSAmJiBpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoKGRhdGEtPnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRSkgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJc3RydWN0IGl3bDQ5NjVfY2FsaWJyYXRpb25fY21kIGNtZDsKIAogCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwpAQCAtMTE5Miw4ICsxNDUyLDggQEAKIAkJY21kLmRpZmZfZ2Fpbl9hID0gMDsKIAkJY21kLmRpZmZfZ2Fpbl9iID0gMDsKIAkJY21kLmRpZmZfZ2Fpbl9jID0gMDsKLQkJcmMgPSBpd2w0OTY1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01ELAotCQkJCSBzaXplb2YoY21kKSwgJmNtZCk7CisJCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKKwkJCQkgc2l6ZW9mKGNtZCksICZjbWQsIE5VTEwpOwogCQltc2xlZXAoNCk7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEU7CiAJCUlXTF9ERUJVR19DQUxJQigiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CkBAIC0xMjA3LDExICsxNDY3LDExIEBACiAgKiAxKSAgV2hpY2ggYW50ZW5uYXMgYXJlIGNvbm5lY3RlZC4KICAqIDIpICBEaWZmZXJlbnRpYWwgcnggZ2FpbiBzZXR0aW5ncyB0byBiYWxhbmNlIHRoZSAzIHJlY2VpdmVycy4KICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IGl3bDQ5NjVfbm90aWZfc3RhdGlzdGljcyAqc3RhdF9yZXNwKQogewogCXN0cnVjdCBpd2w0OTY1X2NoYWluX25vaXNlX2RhdGEgKmRhdGEgPSBOVUxMOwotCWludCByYyA9IDA7CisJaW50IHJldCA9IDA7CiAKIAl1MzIgY2hhaW5fbm9pc2VfYTsKIAl1MzIgY2hhaW5fbm9pc2VfYjsKQEAgLTE0MTcsOSArMTY3Nyw5IEBACiAJCQljbWQuZGlmZl9nYWluX2EgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMF07CiAJCQljbWQuZGlmZl9nYWluX2IgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMV07CiAJCQljbWQuZGlmZl9nYWluX2MgPSBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMl07Ci0JCQlyYyA9IGl3bDQ5NjVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCisJCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCiAJCQkJCSAgICAgIHNpemVvZihjbWQpLCAmY21kKTsKLQkJCWlmIChyYykKKwkJCWlmIChyZXQpCiAJCQkJSVdMX0RFQlVHX0NBTElCKCJmYWlsIHNlbmRpbmcgY21kICIKIAkJCQkJICAgICAiUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCBcbiIpOwogCkBAIC0xNDQwLDEwICsxNzAwLDkgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgICAgc3RydWN0IGl3bDQ5NjVfbm90aWZfc3RhdGlzdGljcyAqcmVzcCkKIHsKLQlpbnQgcmMgPSAwOwogCXUzMiByeF9lbmFibGVfdGltZTsKIAl1MzIgZmFfY2NrOwogCXUzMiBmYV9vZmRtOwpAQCAtMTQ1NiwxMCArMTcxNSwxMSBAQAogCXN0cnVjdCBzdGF0aXN0aWNzX3J4ICpzdGF0aXN0aWNzID0gJihyZXNwLT5yeCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2RhdGEgc3RhdGlzOworCWludCByZXQ7CiAKIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKIAotCWlmICghaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJaWYgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCQlJV0xfREVCVUdfQ0FMSUIoIjw8IC0gbm90IGFzc29jaWF0ZWRcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTU0MCwxNCArMTgwMCwxNCBAQAogCiAJaXdsNDk2NV9zZW5zX2F1dG9fY29ycl9vZmRtKHByaXYsIG5vcm1fZmFfb2ZkbSwgcnhfZW5hYmxlX3RpbWUpOwogCWl3bDQ5NjVfc2Vuc19lbmVyZ3lfY2NrKHByaXYsIG5vcm1fZmFfY2NrLCByeF9lbmFibGVfdGltZSwgJnN0YXRpcyk7Ci0JcmMgfD0gaXdsNDk2NV9zZW5zaXRpdml0eV93cml0ZShwcml2LCBDTURfQVNZTkMpOworCXJldCA9IGl3bDQ5NjVfc2Vuc2l0aXZpdHlfd3JpdGUocHJpdiwgQ01EX0FTWU5DKTsKIAogCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19zZW5zaXRpdml0eV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2w0OTY1X3ByaXYsCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwKIAkJCXNlbnNpdGl2aXR5X3dvcmspOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMTU3Nyw3ICsxODM3LDcgQEAKIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ190eHBvd2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDQ5NjVfcHJpdiwKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LAogCQkJdHhwb3dlcl93b3JrKTsKIAogCS8qIElmIGEgc2NhbiBoYXBwZW5lZCB0byBzdGFydCBiZWZvcmUgd2UgZ290IGhlcmUKQEAgLTE2MDUsMTEgKzE4NjUsMTEgQEAKIC8qCiAgKiBBY3F1aXJlIHByaXYtPmxvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAhCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0X3dyX3B0cnMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgdTMyIGluZGV4KQorc3RhdGljIHZvaWQgaXdsNDk2NV9zZXRfd3JfcHRycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIHUzMiBpbmRleCkKIHsKLQlpd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAogCQkJICAgICAoaW5kZXggJiAweGZmKSB8ICh0eHFfaWQgPDwgOCkpOwotCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBLRFJfU0NEX1FVRVVFX1JEUFRSKHR4cV9pZCksIGluZGV4KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w0OV9TQ0RfUVVFVUVfUkRQVFIodHhxX2lkKSwgaW5kZXgpOwogfQogCiAvKioKQEAgLTE2MTksNyArMTg3OSw3IEBACiAgKgogICogTk9URTogIEFjcXVpcmUgcHJpdi0+bG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uICEKICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV90eF9xdWV1ZV9zZXRfc3RhdHVzKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3R4X3F1ZXVlX3NldF9zdGF0dXMoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQlzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLAogCQkJCQlpbnQgdHhfZmlmb19pZCwgaW50IHNjZF9yZXRyeSkKIHsKQEAgLTE2MjksNyArMTg4OSw3IEBACiAJaW50IGFjdGl2ZSA9IHRlc3RfYml0KHR4cV9pZCwgJnByaXYtPnR4cV9jdHhfYWN0aXZlX21zayk/MTowOwogCiAJLyogU2V0IHVwIGFuZCBhY3RpdmF0ZSAqLwotCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBLRFJfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHR4cV9pZCksCisJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNDlfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHR4cV9pZCksCiAJCQkJIChhY3RpdmUgPDwgU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19BQ1RJVkUpIHwKIAkJCQkgKHR4X2ZpZm9faWQgPDwgU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19UWEYpIHwKIAkJCQkgKHNjZF9yZXRyeSA8PCBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1dTTCkgfApAQCAtMTY1MywyMiArMTkxMywyMiBAQAogCUlXTF9UWF9GSUZPX0hDQ0FfMgogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGl3bDQ5NjVfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgdHhxX2lkKQorc3RhdGljIGlubGluZSB2b2lkIGl3bDQ5NjVfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCiB7CiAJc2V0X2JpdCh0eHFfaWQsICZwcml2LT50eHFfY3R4X2FjdGl2ZV9tc2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsNDk2NV90eHFfY3R4X2RlYWN0aXZhdGUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2w0OTY1X3R4cV9jdHhfZGVhY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCiB7CiAJY2xlYXJfYml0KHR4cV9pZCwgJnByaXYtPnR4cV9jdHhfYWN0aXZlX21zayk7CiB9CiAKLWludCBpd2w0OTY1X2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQoraW50IGl3bDQ5NjVfYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgYTsKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTE2ODEsNDYgKzE5NDEsNDYgQEAKIAkJcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5kZWx0YV9nYWluX2NvZGVbaV0gPQogCQkJCUNIQUlOX05PSVNFX0RFTFRBX0dBSU5fSU5JVF9WQUw7CiAjZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkqLwotCXJjID0gaXdsNDk2NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIENsZWFyIDQ5NjUncyBpbnRlcm5hbCBUeCBTY2hlZHVsZXIgZGF0YSBiYXNlICovCi0JcHJpdi0+c2NkX2Jhc2VfYWRkciA9IGl3bDQ5NjVfcmVhZF9wcnBoKHByaXYsIEtEUl9TQ0RfU1JBTV9CQVNFX0FERFIpOworCXByaXYtPnNjZF9iYXNlX2FkZHIgPSBpd2xfcmVhZF9wcnBoKHByaXYsIElXTDQ5X1NDRF9TUkFNX0JBU0VfQUREUik7CiAJYSA9IHByaXYtPnNjZF9iYXNlX2FkZHIgKyBTQ0RfQ09OVEVYVF9EQVRBX09GRlNFVDsKIAlmb3IgKDsgYSA8IHByaXYtPnNjZF9iYXNlX2FkZHIgKyBTQ0RfVFhfU1RUU19CSVRNQVBfT0ZGU0VUOyBhICs9IDQpCi0JCWl3bDQ5NjVfd3JpdGVfdGFyZ19tZW0ocHJpdiwgYSwgMCk7CisJCWl3bF93cml0ZV90YXJnX21lbShwcml2LCBhLCAwKTsKIAlmb3IgKDsgYSA8IHByaXYtPnNjZF9iYXNlX2FkZHIgKyBTQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVQ7IGEgKz0gNCkKLQkJaXdsNDk2NV93cml0ZV90YXJnX21lbShwcml2LCBhLCAwKTsKLQlmb3IgKDsgYSA8IHNpemVvZih1MTYpICogcHJpdi0+aHdfc2V0dGluZy5tYXhfdHhxX251bTsgYSArPSA0KQotCQlpd2w0OTY1X3dyaXRlX3RhcmdfbWVtKHByaXYsIGEsIDApOworCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwgYSwgMCk7CisJZm9yICg7IGEgPCBzaXplb2YodTE2KSAqIHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgYSArPSA0KQorCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwgYSwgMCk7CiAKIAkvKiBUZWwgNDk2NSB3aGVyZSB0byBmaW5kIFR4IGJ5dGUgY291bnQgdGFibGVzICovCi0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEtEUl9TQ0RfRFJBTV9CQVNFX0FERFIsCi0JCShwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzICsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBJV0w0OV9TQ0RfRFJBTV9CQVNFX0FERFIsCisJCShwcml2LT5zaGFyZWRfcGh5cyArCiAJCSBvZmZzZXRvZihzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQsIHF1ZXVlc19ieXRlX2NudF90YmxzKSkgPj4gMTApOwogCiAJLyogRGlzYWJsZSBjaGFpbiBtb2RlIGZvciBhbGwgcXVldWVzICovCi0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEtEUl9TQ0RfUVVFVUVDSEFJTl9TRUwsIDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIElXTDQ5X1NDRF9RVUVVRUNIQUlOX1NFTCwgMCk7CiAKIAkvKiBJbml0aWFsaXplIGVhY2ggVHggcXVldWUgKGluY2x1ZGluZyB0aGUgY29tbWFuZCBxdWV1ZSkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+aHdfc2V0dGluZy5tYXhfdHhxX251bTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgaSsrKSB7CiAKIAkJLyogVEZEIGNpcmN1bGFyIGJ1ZmZlciByZWFkL3dyaXRlIGluZGV4ZXMgKi8KLQkJaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEtEUl9TQ0RfUVVFVUVfUkRQVFIoaSksIDApOwotCQlpd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwgMCB8IChpIDw8IDgpKTsKKwkJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNDlfU0NEX1FVRVVFX1JEUFRSKGkpLCAwKTsKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwgMCB8IChpIDw8IDgpKTsKIAogCQkvKiBNYXggVHggV2luZG93IHNpemUgZm9yIFNjaGVkdWxlci1BQ0sgbW9kZSAqLwotCQlpd2w0OTY1X3dyaXRlX3RhcmdfbWVtKHByaXYsIHByaXYtPnNjZF9iYXNlX2FkZHIgKworCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwgcHJpdi0+c2NkX2Jhc2VfYWRkciArCiAJCQkJCVNDRF9DT05URVhUX1FVRVVFX09GRlNFVChpKSwKIAkJCQkJKFNDRF9XSU5fU0laRSA8PAogCQkJCQlTQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfUE9TKSAmCiAJCQkJCVNDRF9RVUVVRV9DVFhfUkVHMV9XSU5fU0laRV9NU0spOwogCiAJCS8qIEZyYW1lIGxpbWl0ICovCi0JCWl3bDQ5NjVfd3JpdGVfdGFyZ19tZW0ocHJpdiwgcHJpdi0+c2NkX2Jhc2VfYWRkciArCisJCWl3bF93cml0ZV90YXJnX21lbShwcml2LCBwcml2LT5zY2RfYmFzZV9hZGRyICsKIAkJCQkJU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKGkpICsKIAkJCQkJc2l6ZW9mKHUzMiksCiAJCQkJCShTQ0RfRlJBTUVfTElNSVQgPDwKQEAgLTE3MjgsMTEgKzE5ODgsMTEgQEAKIAkJCQkJU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX01TSyk7CiAKIAl9Ci0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEtEUl9TQ0RfSU5URVJSVVBUX01BU0ssCi0JCQkJICgxIDw8IHByaXYtPmh3X3NldHRpbmcubWF4X3R4cV9udW0pIC0gMSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNDlfU0NEX0lOVEVSUlVQVF9NQVNLLAorCQkJCSAoMSA8PCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0pIC0gMSk7CiAKIAkvKiBBY3RpdmF0ZSBhbGwgVHggRE1BL0ZJRk8gY2hhbm5lbHMgKi8KLQlpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgS0RSX1NDRF9UWEZBQ1QsCisJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNDlfU0NEX1RYRkFDVCwKIAkJCQkgU0NEX1RYRkFDVF9SRUdfVFhGSUZPX01BU0soMCwgNykpOwogCiAJaXdsNDk2NV9zZXRfd3JfcHRycyhwcml2LCBJV0xfQ01EX1FVRVVFX05VTSwgMCk7CkBAIC0xNzQ0LDQyICsyMDA0LDQ3IEBACiAJCWl3bDQ5NjVfdHhfcXVldWVfc2V0X3N0YXR1cyhwcml2LCAmcHJpdi0+dHhxW2ldLCBhYywgMCk7CiAJfQogCi0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwkvKiBBc2sgZm9yIHN0YXRpc3RpY3Mgbm93LCB0aGUgdUNvZGUgd2lsbCBzZW5kIHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uCisJICogcGVyaW9kaWNhbGx5IGFmdGVyIGFzc29jaWF0aW9uICovCisJaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9BU1lOQyk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiBpd2w0OTY1X2h3X3NldF9od19zZXR0aW5nCisgKiBpd2w0OTY1X2h3X3NldF9od19wYXJhbXMKICAqCiAgKiBDYWxsZWQgd2hlbiBpbml0aWFsaXppbmcgZHJpdmVyCiAgKi8KLWludCBpd2w0OTY1X2h3X3NldF9od19zZXR0aW5nKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitpbnQgaXdsNDk2NV9od19zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQkvKiBBbGxvY2F0ZSBhcmVhIGZvciBUeCBieXRlIGNvdW50IHRhYmxlcyBhbmQgUnggcXVldWUgc3RhdHVzICovCi0JcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCA9Ci0JICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCi0JCQkJIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQpLAotCQkJCSAmcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfcGh5cyk7CiAKLQlpZiAoIXByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQpCi0JCXJldHVybiAtMTsKKwlpZiAoKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+IElXTDQ5NjVfTUFYX05VTV9RVUVVRVMpIHx8CisJICAgIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7CisJCUlXTF9FUlJPUigiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCisJCQkgIElXTF9NSU5fTlVNX1FVRVVFUywgSVdMNDk2NV9NQVhfTlVNX1FVRVVFUyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotCW1lbXNldChwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0LCAwLCBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2hhcmVkKSk7Ci0KLQlwcml2LT5od19zZXR0aW5nLm1heF90eHFfbnVtID0gaXdsNDk2NV9wYXJhbV9xdWV1ZXNfbnVtOwotCXByaXYtPmh3X3NldHRpbmcuYWNfcXVldWVfY291bnQgPSBBQ19OVU07Ci0JcHJpdi0+aHdfc2V0dGluZy50eF9jbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3R4X2NtZCk7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfcnhxX3NpemUgPSBSWF9RVUVVRV9TSVpFOwotCXByaXYtPmh3X3NldHRpbmcubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKLQlpZiAoaXdsNDk2NV9wYXJhbV9hbXNkdV9zaXplXzhLKQotCQlwcml2LT5od19zZXR0aW5nLnJ4X2J1Zl9zaXplID0gSVdMX1JYX0JVRl9TSVpFXzhLOworCXByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSA9IHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKKwlwcml2LT5od19wYXJhbXMudHhfY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXdsNDk2NV90eF9jbWQpOworCXByaXYtPmh3X3BhcmFtcy5tYXhfcnhxX3NpemUgPSBSWF9RVUVVRV9TSVpFOworCXByaXYtPmh3X3BhcmFtcy5tYXhfcnhxX2xvZyA9IFJYX1FVRVVFX1NJWkVfTE9HOworCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmFtc2R1X3NpemVfOEspCisJCXByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSA9IElXTF9SWF9CVUZfU0laRV84SzsKIAllbHNlCi0JCXByaXYtPmh3X3NldHRpbmcucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkVfNEs7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfcGt0X3NpemUgPSBwcml2LT5od19zZXR0aW5nLnJ4X2J1Zl9zaXplIC0gMjU2OwotCXByaXYtPmh3X3NldHRpbmcubWF4X3N0YXRpb25zID0gSVdMNDk2NV9TVEFUSU9OX0NPVU5UOwotCXByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkID0gSVdMNDk2NV9CUk9BRENBU1RfSUQ7CisJCXByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSA9IElXTF9SWF9CVUZfU0laRV80SzsKKwlwcml2LT5od19wYXJhbXMubWF4X3BrdF9zaXplID0gcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplIC0gMjU2OworCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w0OTY1X1NUQVRJT05fQ09VTlQ7CisJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDQ5NjVfQlJPQURDQVNUX0lEOworCisJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAyOworCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gMjsKKwlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gKElXTF9BTlRFTk5BX01BSU4gfCBJV0xfQU5URU5OQV9BVVgpOworCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSAoSVdMX0FOVEVOTkFfTUFJTiB8IElXTF9BTlRFTk5BX0FVWCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc4OCwxMiArMjA1MywxMiBAQAogICoKICAqIERlc3Ryb3kgYWxsIFRYIERNQSBxdWV1ZXMgYW5kIHN0cnVjdHVyZXMKICAqLwotdm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQordm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgcHJpdi0+aHdfc2V0dGluZy5tYXhfdHhxX251bTsgdHhxX2lkKyspCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKQogCQlpd2w0OTY1X3R4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdKTsKIAogCS8qIEtlZXAtd2FybSBidWZmZXIgKi8KQEAgLTE4MDYsNyArMjA3MSw3IEBACiAgKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcwogICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKICAqLwotaW50IGl3bDQ5NjVfaHdfdHhxX2ZyZWVfdGZkKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEpCitpbnQgaXdsNDk2NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKQogewogCXN0cnVjdCBpd2w0OTY1X3RmZF9mcmFtZSAqYmRfdG1wID0gKHN0cnVjdCBpd2w0OTY1X3RmZF9mcmFtZSAqKSZ0eHEtPmJkWzBdOwogCXN0cnVjdCBpd2w0OTY1X3RmZF9mcmFtZSAqYmQgPSAmYmRfdG1wW3R4cS0+cS5yZWFkX3B0cl07CkBAIC0xODU5LDcgKzIxMjQsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXdsNDk2NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgczggcG93ZXIpCitpbnQgaXdsNDk2NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzOCBwb3dlcikKIHsKIAlJV0xfRVJST1IoIlRPRE86IEltcGxlbWVudCBpd2w0OTY1X2h3X3JlZ19zZXRfdHhwb3dlciFcbiIpOwogCXJldHVybiAtRUlOVkFMOwpAQCAtMTkxNCwxMiArMjE3OSwxMyBAQAogCXJldHVybiBjb21wOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICoKLWl3bDQ5NjVfZ2V0X2NoYW5uZWxfdHhwb3dlcl9pbmZvKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IHBoeW1vZGUsIHUxNiBjaGFubmVsKQorc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICoKK2l3bDQ5NjVfZ2V0X2NoYW5uZWxfdHhwb3dlcl9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCkKIHsKLQljb25zdCBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAKLQljaF9pbmZvID0gaXdsNDk2NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHBoeW1vZGUsIGNoYW5uZWwpOworCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKTsKIAogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xOTUzLDcgKzIyMTksNyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHUzMiBpd2w0OTY1X2dldF9zdWJfYmFuZChjb25zdCBzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MzIgY2hhbm5lbCkKK3N0YXRpYyB1MzIgaXdsNDk2NV9nZXRfc3ViX2JhbmQoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgY2hhbm5lbCkKIHsKIAlzMzIgYiA9IC0xOwogCkBAIC0xOTg5LDcgKzIyNTUsNyBAQAogICogZGlmZmVyZW5jZXMgaW4gY2hhbm5lbCBmcmVxdWVuY2llcywgd2hpY2ggaXMgcHJvcG9ydGlvbmFsIHRvIGRpZmZlcmVuY2VzCiAgKiBpbiBjaGFubmVsIG51bWJlci4KICAqLwotc3RhdGljIGludCBpd2w0OTY1X2ludGVycG9sYXRlX2NoYW4oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTMyIGNoYW5uZWwsCitzdGF0aWMgaW50IGl3bDQ5NjVfaW50ZXJwb2xhdGVfY2hhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBjaGFubmVsLAogCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfY2hfaW5mbyAqY2hhbl9pbmZvKQogewogCXMzMiBzID0gLTE7CkBAIC0yMzIyLDcgKzI1ODgsNyBAQAogCSB9CiB9OwogCi1zdGF0aWMgaW50IGl3bDQ5NjVfZmlsbF90eHBvd2VyX3RibChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCBiYW5kLCB1MTYgY2hhbm5lbCwKK3N0YXRpYyBpbnQgaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYmFuZCwgdTE2IGNoYW5uZWwsCiAJCQkJICAgIHU4IGlzX2ZhdCwgdTggY3RybF9jaGFuX2hpZ2gsCiAJCQkJICAgIHN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiICp0eF9wb3dlcl90YmwpCiB7CkBAIC0yMzM2LDcgKzI2MDIsNyBAQAogCXMzMiB0eGF0dGVuX2dycCA9IENBTElCX0NIX0dST1VQX01BWDsKIAlpbnQgaTsKIAlpbnQgYzsKLQljb25zdCBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKIAlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfY2hfaW5mbyBjaF9lZXByb21faW5mbzsKIAljb25zdCBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfbWVhc3VyZSAqbWVhc3VyZW1lbnQ7CiAJczE2IHZvbHRhZ2U7CkBAIC0yMzY4LDcgKzI2MzQsNyBAQAogCiAJLyogR2V0IGN1cnJlbnQgKFJYT04pIGNoYW5uZWwsIGJhbmQsIHdpZHRoICovCiAJY2hfaW5mbyA9Ci0JCWl3bDQ5NjVfZ2V0X2NoYW5uZWxfdHhwb3dlcl9pbmZvKHByaXYsIHByaXYtPnBoeW1vZGUsIGNoYW5uZWwpOworCQlpd2w0OTY1X2dldF9jaGFubmVsX3R4cG93ZXJfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKIAogCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFuICVkIGJhbmQgJWQgaXNfZmF0ICVkXG4iLCBjaGFubmVsLCBiYW5kLAogCQkJICBpc19mYXQpOwpAQCAtMjU3OSwxMCArMjg0NSwxMCBAQAogICogVXNlcyB0aGUgYWN0aXZlIFJYT04gZm9yIGNoYW5uZWwsIGJhbmQsIGFuZCBjaGFyYWN0ZXJpc3RpY3MgKGZhdCwgaGlnaCkKICAqIFRoZSBwb3dlciBsaW1pdCBpcyB0YWtlbiBmcm9tIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdC4KICAqLwotaW50IGl3bDQ5NjVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQoraW50IGl3bDQ5NjVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCBjbWQgPSB7IDAgfTsKLQlpbnQgcmMgPSAwOworCWludCByZXQ7CiAJdTggYmFuZCA9IDA7CiAJdTggaXNfZmF0ID0gMDsKIAl1OCBjdHJsX2NoYW5faGlnaCA9IDA7CkBAIC0yNTk1LDggKzI4NjEsNyBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQliYW5kID0gKChwcml2LT5waHltb2RlID09IE1PREVfSUVFRTgwMjExQikgfHwKLQkJKHByaXYtPnBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFHKSk7CisJYmFuZCA9IHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAogCWlzX2ZhdCA9ICBpc19mYXRfY2hhbm5lbChwcml2LT5hY3RpdmVfcnhvbi5mbGFncyk7CiAKQEAgLTI2MDcsMjkgKzI4NzIsNzAgQEAKIAljbWQuYmFuZCA9IGJhbmQ7CiAJY21kLmNoYW5uZWwgPSBwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsOwogCi0JcmMgPSBpd2w0OTY1X2ZpbGxfdHhwb3dlcl90YmwocHJpdiwgYmFuZCwKKwlyZXQgPSBpd2w0OTY1X2ZpbGxfdHhwb3dlcl90YmwocHJpdiwgYmFuZCwKIAkJCQlsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwKIAkJCQlpc19mYXQsIGN0cmxfY2hhbl9oaWdoLCAmY21kLnR4X3Bvd2VyKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAotCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCwgc2l6ZW9mKGNtZCksICZjbWQpOwotCXJldHVybiByYzsKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIHNpemVvZihjbWQpLCAmY21kKTsKKworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKLWludCBpd2w0OTY1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKQorc3RhdGljIGludCBpd2w0OTY1X3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgcnhvbl9hc3NvYzsKKwljb25zdCBzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqcnhvbjEgPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCWNvbnN0IHN0cnVjdCBpd2w0OTY1X3J4b25fY21kICpyeG9uMiA9ICZwcml2LT5hY3RpdmVfcnhvbjsKKworCWlmICgocnhvbjEtPmZsYWdzID09IHJ4b24yLT5mbGFncykgJiYKKwkgICAgKHJ4b24xLT5maWx0ZXJfZmxhZ3MgPT0gcnhvbjItPmZpbHRlcl9mbGFncykgJiYKKwkgICAgKHJ4b24xLT5jY2tfYmFzaWNfcmF0ZXMgPT0gcnhvbjItPmNja19iYXNpY19yYXRlcykgJiYKKwkgICAgKHJ4b24xLT5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPT0KKwkgICAgIHJ4b24yLT5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCisJICAgIChyeG9uMS0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyA9PQorCSAgICAgcnhvbjItPm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCisJICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgorCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7CisJCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCXJldHVybiAwOworCX0KKworCXJ4b25fYXNzb2MuZmxhZ3MgPSBwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3M7CisJcnhvbl9hc3NvYy5maWx0ZXJfZmxhZ3MgPSBwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOworCXJ4b25fYXNzb2Mub2ZkbV9iYXNpY19yYXRlcyA9IHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzOworCXJ4b25fYXNzb2MuY2NrX2Jhc2ljX3JhdGVzID0gcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlczsKKwlyeG9uX2Fzc29jLnJlc2VydmVkID0gMDsKKwlyeG9uX2Fzc29jLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcyA9CisJICAgIHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7CisJcnhvbl9hc3NvYy5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0KKwkgICAgcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7CisJcnhvbl9hc3NvYy5yeF9jaGFpbl9zZWxlY3RfZmxhZ3MgPSBwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW47CisKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1JYT05fQVNTT0MsCisJCQkJICAgICBzaXplb2Yocnhvbl9hc3NvYyksICZyeG9uX2Fzc29jLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJldDsKK30KKworCitpbnQgaXdsNDk2NV9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKQogewogCWludCByYzsKIAl1OCBiYW5kID0gMDsKIAl1OCBpc19mYXQgPSAwOwogCXU4IGN0cmxfY2hhbl9oaWdoID0gMDsKIAlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3N3aXRjaF9jbWQgY21kID0geyAwIH07Ci0JY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCi0JYmFuZCA9ICgocHJpdi0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUIpIHx8Ci0JCShwcml2LT5waHltb2RlID09IE1PREVfSUVFRTgwMjExRykpOworCWJhbmQgPSBwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAKLQljaF9pbmZvID0gaXdsNDk2NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPnBoeW1vZGUsIGNoYW5uZWwpOworCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKIAogCWlzX2ZhdCA9IGlzX2ZhdF9jaGFubmVsKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyk7CiAKQEAgLTI2NTUsMTUgKzI5NjEsMTUgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQ0hBTk5FTF9TV0lUQ0gsIHNpemVvZihjbWQpLCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQ0hBTk5FTF9TV0lUQ0gsIHNpemVvZihjbWQpLCAmY21kKTsKIAlyZXR1cm4gcmM7CiB9CiAKICNkZWZpbmUgUlRTX0hDQ0FfUkVUUllfTElNSVQJCTMKICNkZWZpbmUgUlRTX0RGQVVMVF9SRVRSWV9MSU1JVAkJNjAKIAotdm9pZCBpd2w0OTY1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV9jbWQgKmNtZCwKK3ZvaWQgaXdsNDk2NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdHJsLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwKIAkJCSAgICAgIGludCBpc19oY2NhKQpAQCAtMjY3NCw3ICsyOTgwLDcgQEAKIAl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXU4IHJhdGVfcGxjcDsKIAl1MTYgcmF0ZV9mbGFncyA9IDA7Ci0JaW50IHJhdGVfaWR4ID0gbWluKGN0cmwtPnR4X3JhdGUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CisJaW50IHJhdGVfaWR4ID0gbWluKGN0cmwtPnR4X3JhdGUtPmh3X3ZhbHVlICYgMHhmZmZmLCBJV0xfUkFURV9DT1VOVCAtIDEpOwogCiAJcmF0ZV9wbGNwID0gaXdsNDk2NV9yYXRlc1tyYXRlX2lkeF0ucGxjcDsKIApAQCAtMjcyOSwxOSArMzAzNSwxOCBAQAogCXR4LT5yYXRlX25fZmxhZ3MgPSBpd2w0OTY1X2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZV9wbGNwLCByYXRlX2ZsYWdzKTsKIH0KIAotaW50IGl3bDQ5NjVfaHdfZ2V0X3J4X3JlYWQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK2ludCBpd2w0OTY1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQgKnNoYXJlZF9kYXRhID0gcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydDsKLQotCXJldHVybiBJV0xfR0VUX0JJVFMoKnNoYXJlZF9kYXRhLCByYl9jbG9zZWRfc3R0c19yYl9udW0pOworCXN0cnVjdCBpd2w0OTY1X3NoYXJlZCAqcyA9IHByaXYtPnNoYXJlZF92aXJ0OworCXJldHVybiBsZTMyX3RvX2NwdShzLT5yYl9jbG9zZWQpICYgMHhGRkY7CiB9CiAKLWludCBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQoraW50IGl3bDQ5NjVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlyZXR1cm4gcHJpdi0+dGVtcGVyYXR1cmU7CiB9CiAKLXVuc2lnbmVkIGludCBpd2w0OTY1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCit1bnNpZ25lZCBpbnQgaXdsNDk2NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgIHN0cnVjdCBpd2w0OTY1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSkKIHsKIAlzdHJ1Y3QgaXdsNDk2NV90eF9iZWFjb25fY21kICp0eF9iZWFjb25fY21kOwpAQCAtMjc1MCw3ICszMDU1LDcgQEAKIAl0eF9iZWFjb25fY21kID0gJmZyYW1lLT51LmJlYWNvbjsKIAltZW1zZXQodHhfYmVhY29uX2NtZCwgMCwgc2l6ZW9mKCp0eF9iZWFjb25fY21kKSk7CiAKLQl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBJV0w0OTY1X0JST0FEQ0FTVF9JRDsKKwl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCXR4X2JlYWNvbl9jbWQtPnR4LnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOwogCiAJZnJhbWVfc2l6ZSA9IGl3bDQ5NjVfZmlsbF9iZWFjb25fZnJhbWUocHJpdiwKQEAgLTI3ODAsMzUgKzMwODUsMzUgQEAKICAqIDQ5NjUgc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQogICogY2hhbm5lbHMgc3VwcG9ydGVkIGluIGhhcmR3YXJlLgogICovCi1pbnQgaXdsNDk2NV9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEpCitpbnQgaXdsNDk2NV9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSkKIHsKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogQ2lyY3VsYXIgYnVmZmVyIChURkQgcXVldWUgaW4gRFJBTSkgcGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCi0JaXdsNDk2NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fQ0JCQ19RVUVVRSh0eHFfaWQpLAorCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fQ0JCQ19RVUVVRSh0eHFfaWQpLAogCQkJICAgICB0eHEtPnEuZG1hX2FkZHIgPj4gOCk7CiAKIAkvKiBFbmFibGUgRE1BIGNoYW5uZWwsIHVzaW5nIHNhbWUgaWQgYXMgZm9yIFRGRCBxdWV1ZSAqLwotCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIoCisJaXdsX3dyaXRlX2RpcmVjdDMyKAogCQlwcml2LCBJV0xfRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcodHhxX2lkKSwKIAkJSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFIHwKIAkJSVdMX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMKTsKLQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgaXdsNDk2NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdm9pZCAqcHRyLAoraW50IGl3bDQ5NjVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqcHRyLAogCQkJCSBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pCiB7CiAJaW50IGluZGV4LCBpc19vZGQ7CkBAIC0yODQyLDcgKzMxNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2h3X2NhcmRfc2hvd19pbmZvKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2h3X2NhcmRfc2hvd19pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MTYgaHdfdmVyc2lvbiA9IHByaXYtPmVlcHJvbS5ib2FyZF9yZXZpc2lvbl80OTY1OwogCkBAIC0yODU4LDE3ICszMTYzLDE1IEBACiAjZGVmaW5lIElXTF9UWF9ERUxJTUlURVJfU0laRQk0CiAKIC8qKgotICogaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JfcHRyIC0gU2V0IHVwIGVudHJ5IGluIFR4IGJ5dGUtY291bnQgYXJyYXkKKyAqIGl3bDQ5NjVfdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgLSBTZXQgdXAgZW50cnkgaW4gVHggYnl0ZS1jb3VudCBhcnJheQogICovCi1pbnQgaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JfcHRyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSwgdTE2IGJ5dGVfY250KQorc3RhdGljIHZvaWQgaXdsNDk2NV90eHFfdXBkYXRlX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLAorCQkJCQkgICAgdTE2IGJ5dGVfY250KQogewogCWludCBsZW47CiAJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKLQlzdHJ1Y3QgaXdsNDk2NV9zaGFyZWQgKnNoYXJlZF9kYXRhID0gcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydDsKLQotCWlmICh0eHEtPm5lZWRfdXBkYXRlID09IDApCi0JCXJldHVybiAwOworCXN0cnVjdCBpd2w0OTY1X3NoYXJlZCAqc2hhcmVkX2RhdGEgPSBwcml2LT5zaGFyZWRfdmlydDsKIAogCWxlbiA9IGJ5dGVfY250ICsgSVdMX1RYX0NSQ19TSVpFICsgSVdMX1RYX0RFTElNSVRFUl9TSVpFOwogCkBAIC0yODgxLDggKzMxODQsNiBAQAogCQlJV0xfU0VUX0JJVFMxNihzaGFyZWRfZGF0YS0+cXVldWVzX2J5dGVfY250X3RibHNbdHhxX2lkXS4KIAkJCXRmZF9vZmZzZXRbSVdMNDk2NV9RVUVVRV9TSVpFICsgdHhxLT5xLndyaXRlX3B0cl0sCiAJCQlieXRlX2NudCwgbGVuKTsKLQotCXJldHVybiAwOwogfQogCiAvKioKQEAgLTI4OTEsNyArMzE5Miw3IEBACiAgKiBTZWxlY3RzIGhvdyBtYW55IGFuZCB3aGljaCBSeCByZWNlaXZlcnMvYW50ZW5uYXMvY2hhaW5zIHRvIHVzZS4KICAqIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBzY2FuIGNvbW1hbmQgLi4uIGl0IHB1dHMgZGF0YSBpbiB3cm9uZyBwbGFjZS4KICAqLwotdm9pZCBpd2w0OTY1X3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCit2b2lkIGl3bDQ5NjVfc2V0X3J4b25fY2hhaW4oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXU4IGlzX3NpbmdsZSA9IGlzX3NpbmdsZV9zdHJlYW0ocHJpdik7CiAJdTggaWRsZV9zdGF0ZSwgcnhfc3RhdGU7CkBAIC0yOTIyLDM3OCArMzIyMyw2IEBACiAJSVdMX0RFQlVHX0FTU09DKCJyeCBjaGFpbiAlWFxuIiwgcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluKTsKIH0KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFRfQUdHCi0vKgotCWdldCB0aGUgdHJhZmZpYyBsb2FkIHZhbHVlIGZvciB0aWQKLSovCi1zdGF0aWMgdTMyIGl3bDQ5NjVfdGxfZ2V0X2xvYWQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTggdGlkKQotewotCXUzMiBsb2FkID0gMDsKLQl1MzIgY3VycmVudF90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQl1MzIgdGltZV9kaWZmOwotCXMzMiBpbmRleDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2w0OTY1X3RyYWZmaWNfbG9hZCAqdGlkX3B0ciA9IE5VTEw7Ci0KLQlpZiAodGlkID49IFRJRF9NQVhfTE9BRF9DT1VOVCkKLQkJcmV0dXJuIDA7Ci0KLQl0aWRfcHRyID0gJihwcml2LT5scV9tbmdyLmFnZ19jdHJsLnRyYWZmaWNfbG9hZFt0aWRdKTsKLQotCWN1cnJlbnRfdGltZSAtPSBjdXJyZW50X3RpbWUgJSBUSURfUk9VTkRfVkFMVUU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bHFfbW5nci5sb2NrLCBmbGFncyk7Ci0JaWYgKCEodGlkX3B0ci0+cXVldWVfY291bnQpKQotCQlnb3RvIG91dDsKLQotCXRpbWVfZGlmZiA9IFRJTUVfV1JBUF9BUk9VTkQodGlkX3B0ci0+dGltZV9zdGFtcCwgY3VycmVudF90aW1lKTsKLQlpbmRleCA9IHRpbWVfZGlmZiAvIFRJRF9RVUVVRV9DRUxMX1NQQUNJTkc7Ci0KLQlpZiAoaW5kZXggPj0gVElEX1FVRVVFX01BWF9TSVpFKSB7Ci0JCXUzMiBvbGRlc3RfdGltZSA9IGN1cnJlbnRfdGltZSAtIFRJRF9NQVhfVElNRV9ESUZGOwotCi0JCXdoaWxlICh0aWRfcHRyLT5xdWV1ZV9jb3VudCAmJgotCQkgICAgICAgKHRpZF9wdHItPnRpbWVfc3RhbXAgPCBvbGRlc3RfdGltZSkpIHsKLQkJCXRpZF9wdHItPnRvdGFsIC09IHRpZF9wdHItPnBhY2tldF9jb3VudFt0aWRfcHRyLT5oZWFkXTsKLQkJCXRpZF9wdHItPnBhY2tldF9jb3VudFt0aWRfcHRyLT5oZWFkXSA9IDA7Ci0JCQl0aWRfcHRyLT50aW1lX3N0YW1wICs9IFRJRF9RVUVVRV9DRUxMX1NQQUNJTkc7Ci0JCQl0aWRfcHRyLT5xdWV1ZV9jb3VudC0tOwotCQkJdGlkX3B0ci0+aGVhZCsrOwotCQkJaWYgKHRpZF9wdHItPmhlYWQgPj0gVElEX1FVRVVFX01BWF9TSVpFKQotCQkJCXRpZF9wdHItPmhlYWQgPSAwOwotCQl9Ci0JfQotCWxvYWQgPSB0aWRfcHRyLT50b3RhbDsKLQotIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbG9hZDsKLX0KLQotLyoKLQlpbmNyZW1lbnQgdHJhZmZpYyBsb2FkIHZhbHVlIGZvciB0aWQgYW5kIGFsc28gcmVtb3ZlCi0JYW55IG9sZCB2YWx1ZXMgaWYgcGFzc2VkIHRoZSBjZXJ0aWFuIHRpbWUgcGVyaW9kCi0qLwotc3RhdGljIHZvaWQgaXdsNDk2NV90bF9hZGRfcGFja2V0KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IHRpZCkKLXsKLQl1MzIgY3VycmVudF90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQl1MzIgdGltZV9kaWZmOwotCXMzMiBpbmRleDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2w0OTY1X3RyYWZmaWNfbG9hZCAqdGlkX3B0ciA9IE5VTEw7Ci0KLQlpZiAodGlkID49IFRJRF9NQVhfTE9BRF9DT1VOVCkKLQkJcmV0dXJuOwotCi0JdGlkX3B0ciA9ICYocHJpdi0+bHFfbW5nci5hZ2dfY3RybC50cmFmZmljX2xvYWRbdGlkXSk7Ci0KLQljdXJyZW50X3RpbWUgLT0gY3VycmVudF90aW1lICUgVElEX1JPVU5EX1ZBTFVFOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCWlmICghKHRpZF9wdHItPnF1ZXVlX2NvdW50KSkgewotCQl0aWRfcHRyLT50b3RhbCA9IDE7Ci0JCXRpZF9wdHItPnRpbWVfc3RhbXAgPSBjdXJyZW50X3RpbWU7Ci0JCXRpZF9wdHItPnF1ZXVlX2NvdW50ID0gMTsKLQkJdGlkX3B0ci0+aGVhZCA9IDA7Ci0JCXRpZF9wdHItPnBhY2tldF9jb3VudFswXSA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXRpbWVfZGlmZiA9IFRJTUVfV1JBUF9BUk9VTkQodGlkX3B0ci0+dGltZV9zdGFtcCwgY3VycmVudF90aW1lKTsKLQlpbmRleCA9IHRpbWVfZGlmZiAvIFRJRF9RVUVVRV9DRUxMX1NQQUNJTkc7Ci0KLQlpZiAoaW5kZXggPj0gVElEX1FVRVVFX01BWF9TSVpFKSB7Ci0JCXUzMiBvbGRlc3RfdGltZSA9IGN1cnJlbnRfdGltZSAtIFRJRF9NQVhfVElNRV9ESUZGOwotCi0JCXdoaWxlICh0aWRfcHRyLT5xdWV1ZV9jb3VudCAmJgotCQkgICAgICAgKHRpZF9wdHItPnRpbWVfc3RhbXAgPCBvbGRlc3RfdGltZSkpIHsKLQkJCXRpZF9wdHItPnRvdGFsIC09IHRpZF9wdHItPnBhY2tldF9jb3VudFt0aWRfcHRyLT5oZWFkXTsKLQkJCXRpZF9wdHItPnBhY2tldF9jb3VudFt0aWRfcHRyLT5oZWFkXSA9IDA7Ci0JCQl0aWRfcHRyLT50aW1lX3N0YW1wICs9IFRJRF9RVUVVRV9DRUxMX1NQQUNJTkc7Ci0JCQl0aWRfcHRyLT5xdWV1ZV9jb3VudC0tOwotCQkJdGlkX3B0ci0+aGVhZCsrOwotCQkJaWYgKHRpZF9wdHItPmhlYWQgPj0gVElEX1FVRVVFX01BWF9TSVpFKQotCQkJCXRpZF9wdHItPmhlYWQgPSAwOwotCQl9Ci0JfQotCi0JaW5kZXggPSAodGlkX3B0ci0+aGVhZCArIGluZGV4KSAlIFRJRF9RVUVVRV9NQVhfU0laRTsKLQl0aWRfcHRyLT5wYWNrZXRfY291bnRbaW5kZXhdID0gdGlkX3B0ci0+cGFja2V0X2NvdW50W2luZGV4XSArIDE7Ci0JdGlkX3B0ci0+dG90YWwgPSB0aWRfcHRyLT50b3RhbCArIDE7Ci0KLQlpZiAoKGluZGV4ICsgMSkgPiB0aWRfcHRyLT5xdWV1ZV9jb3VudCkKLQkJdGlkX3B0ci0+cXVldWVfY291bnQgPSBpbmRleCArIDE7Ci0gb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCi19Ci0KLSNkZWZpbmUgTU1BQ19TQ0hFRF9NQVhfTlVNQkVSX09GX0hUX0JBQ0tfRkxPV1MgICA3Ci1lbnVtIEhUX1NUQVRVUyB7Ci0JQkFfU1RBVFVTX0ZBSUxVUkUgPSAwLAotCUJBX1NUQVRVU19JTklUSUFUT1JfREVMQkEsCi0JQkFfU1RBVFVTX1JFQ0lQSUVOVF9ERUxCQSwKLQlCQV9TVEFUVVNfUkVORVdfQUREQkFfUkVRVUVTVCwKLQlCQV9TVEFUVVNfQUNUSVZFLAotfTsKLQotLyoqCi0gKiBpd2w0OTY0X3RsX2JhX2F2YWlsIC0gRmluZCBvdXQgaWYgYW4gdW51c2VkIGFnZ3JlZ2F0aW9uIHF1ZXVlIGlzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgdTggaXdsNDk2NF90bF9iYV9hdmFpbChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQotewotCWludCBpOwotCXN0cnVjdCBpd2w0OTY1X2xxX21uZ3IgKmxxOwotCXU4IGNvdW50ID0gMDsKLQl1MTYgbXNrOwotCi0JbHEgPSAoc3RydWN0IGl3bDQ5NjVfbHFfbW5nciAqKSYocHJpdi0+bHFfbW5ncik7Ci0KLQkvKiBGaW5kIG91dCBob3cgbWFueSBhZ2cgcXVldWVzIGFyZSBpbiB1c2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVElEX01BWF9MT0FEX0NPVU5UIDsgaSsrKSB7Ci0JCW1zayA9IDEgPDwgaTsKLQkJaWYgKChscS0+YWdnX2N0cmwuZ3JhbnRlZF9iYSAmIG1zaykgfHwKLQkJICAgIChscS0+YWdnX2N0cmwud2FpdF9mb3JfYWdnX3N0YXR1cyAmIG1zaykpCi0JCQljb3VudCsrOwotCX0KLQotCWlmIChjb3VudCA8IE1NQUNfU0NIRURfTUFYX05VTUJFUl9PRl9IVF9CQUNLX0ZMT1dTKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2JhX3N0YXR1cyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJICAgICAgdTggdGlkLCBlbnVtIEhUX1NUQVRVUyBzdGF0dXMpOwotCi1zdGF0aWMgaW50IGl3bDQ5NjVfcGVyZm9ybV9hZGRiYShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCB0aWQsIHUzMiBsZW5ndGgsCi0JCQkJIHUzMiBiYV90aW1lb3V0KQotewotCWludCByYzsKLQotCXJjID0gaWVlZTgwMjExX3N0YXJ0X0JBX3Nlc3Npb24ocHJpdi0+aHcsIHByaXYtPmJzc2lkLCB0aWQpOwotCWlmIChyYykKLQkJaXdsNDk2NV9iYV9zdGF0dXMocHJpdiwgdGlkLCBCQV9TVEFUVVNfRkFJTFVSRSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV9wZXJmb3JtX2RlbGJhKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IHRpZCkKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGllZWU4MDIxMV9zdG9wX0JBX3Nlc3Npb24ocHJpdi0+aHcsIHByaXYtPmJzc2lkLCB0aWQpOwotCWlmIChyYykKLQkJaXdsNDk2NV9iYV9zdGF0dXMocHJpdiwgdGlkLCBCQV9TVEFUVVNfRkFJTFVSRSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfdHVybl9vbl9hZ2dfZm9yX3RpZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsNDk2NV9scV9tbmdyICpscSwKLQkJCQkJdTggYXV0b19hZ2csIHU4IHRpZCkKLXsKLQl1MzIgdGlkX21zayA9ICgxIDw8IHRpZCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLS8qCi0JaWYgKChhdXRvX2FnZykgJiYgKCFscS0+ZW5hYmxlX2NvdW50ZXIpKXsKLQkJbHEtPmFnZ19jdHJsLm5leHRfcmV0cnkgPSAwOwotCQlscS0+YWdnX2N0cmwudGlkX3JldHJ5ID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bHFfbW5nci5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0qLwotCWlmICghKGxxLT5hZ2dfY3RybC5ncmFudGVkX2JhICYgdGlkX21zaykgJiYKLQkgICAgKGxxLT5hZ2dfY3RybC5yZXF1ZXN0ZWRfYmEgJiB0aWRfbXNrKSkgewotCQl1OCBhdmFpbGFibGVfcXVldWVzOwotCQl1MzIgbG9hZDsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQkJYXZhaWxhYmxlX3F1ZXVlcyA9IGl3bDQ5NjRfdGxfYmFfYXZhaWwocHJpdik7Ci0JCWxvYWQgPSBpd2w0OTY1X3RsX2dldF9sb2FkKHByaXYsIHRpZCk7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCQlpZiAoIWF2YWlsYWJsZV9xdWV1ZXMpIHsKLQkJCWlmIChhdXRvX2FnZykKLQkJCQlscS0+YWdnX2N0cmwudGlkX3JldHJ5IHw9IHRpZF9tc2s7Ci0JCQllbHNlIHsKLQkJCQlscS0+YWdnX2N0cmwucmVxdWVzdGVkX2JhICY9IH50aWRfbXNrOwotCQkJCWxxLT5hZ2dfY3RybC53YWl0X2Zvcl9hZ2dfc3RhdHVzICY9IH50aWRfbXNrOwotCQkJfQotCQl9IGVsc2UgaWYgKChhdXRvX2FnZykgJiYKLQkJCSAgICgobG9hZCA8PSBscS0+YWdnX2N0cmwudGlkX3RyYWZmaWNfbG9hZF90aHJlc2hvbGQpIHx8Ci0JCQkgICAgKChscS0+YWdnX2N0cmwud2FpdF9mb3JfYWdnX3N0YXR1cyAmIHRpZF9tc2spKSkpCi0JCQlscS0+YWdnX2N0cmwudGlkX3JldHJ5IHw9IHRpZF9tc2s7Ci0JCWVsc2UgewotCQkJbHEtPmFnZ19jdHJsLndhaXRfZm9yX2FnZ19zdGF0dXMgfD0gdGlkX21zazsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCQkJaXdsNDk2NV9wZXJmb3JtX2FkZGJhKHByaXYsIHRpZCwgMHg0MCwKLQkJCQkJICAgICAgbHEtPmFnZ19jdHJsLmJhX3RpbWVvdXQpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3R1cm5fb25fYWdnKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IHRpZCkKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9scV9tbmdyICpscTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbHEgPSAoc3RydWN0IGl3bDQ5NjVfbHFfbW5nciAqKSYocHJpdi0+bHFfbW5ncik7Ci0KLQlpZiAoKHRpZCA8IFRJRF9NQVhfTE9BRF9DT1VOVCkpCi0JCWl3bDQ5NjVfdHVybl9vbl9hZ2dfZm9yX3RpZChwcml2LCBscSwgbHEtPmFnZ19jdHJsLmF1dG9fYWdnLAotCQkJCQkgICAgdGlkKTsKLQllbHNlIGlmICh0aWQgPT0gVElEX0FMTF9TUEVDSUZJRUQpIHsKLQkJaWYgKGxxLT5hZ2dfY3RybC5yZXF1ZXN0ZWRfYmEpIHsKLQkJCWZvciAodGlkID0gMDsgdGlkIDwgVElEX01BWF9MT0FEX0NPVU5UOyB0aWQrKykKLQkJCQlpd2w0OTY1X3R1cm5fb25fYWdnX2Zvcl90aWQocHJpdiwgbHEsCi0JCQkJCWxxLT5hZ2dfY3RybC5hdXRvX2FnZywgdGlkKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQkJCWxxLT5hZ2dfY3RybC50aWRfcmV0cnkgPSAwOwotCQkJbHEtPmFnZ19jdHJsLm5leHRfcmV0cnkgPSAwOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bHFfbW5nci5sb2NrLCBmbGFncyk7Ci0JCX0KLQl9Ci0KLX0KLQotdm9pZCBpd2w0OTY1X3R1cm5fb2ZmX2FnZyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCB0aWQpCi17Ci0JdTMyIHRpZF9tc2s7Ci0Jc3RydWN0IGl3bDQ5NjVfbHFfbW5nciAqbHE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxxID0gKHN0cnVjdCBpd2w0OTY1X2xxX21uZ3IgKikmKHByaXYtPmxxX21uZ3IpOwotCi0JaWYgKCh0aWQgPCBUSURfTUFYX0xPQURfQ09VTlQpKSB7Ci0JCXRpZF9tc2sgPSAxIDw8IHRpZDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCQlscS0+YWdnX2N0cmwud2FpdF9mb3JfYWdnX3N0YXR1cyB8PSB0aWRfbXNrOwotCQlscS0+YWdnX2N0cmwucmVxdWVzdGVkX2JhICY9IH50aWRfbXNrOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQkJaXdsNDk2NV9wZXJmb3JtX2RlbGJhKHByaXYsIHRpZCk7Ci0JfSBlbHNlIGlmICh0aWQgPT0gVElEX0FMTF9TUEVDSUZJRUQpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCQlmb3IgKHRpZCA9IDA7IHRpZCA8IFRJRF9NQVhfTE9BRF9DT1VOVDsgdGlkKyspIHsKLQkJCXRpZF9tc2sgPSAxIDw8IHRpZDsKLQkJCWxxLT5hZ2dfY3RybC53YWl0X2Zvcl9hZ2dfc3RhdHVzIHw9IHRpZF9tc2s7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQkJCWl3bDQ5NjVfcGVyZm9ybV9kZWxiYShwcml2LCB0aWQpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCQl9Ci0JCWxxLT5hZ2dfY3RybC5yZXF1ZXN0ZWRfYmEgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQl9Ci19Ci0KLS8qKgotICogaXdsNDk2NV9iYV9zdGF0dXMgLSBVcGRhdGUgZHJpdmVyJ3MgbGluayBxdWFsaXR5IG1nciB3aXRoIHRpZCdzIEhUIHN0YXR1cwotICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2JhX3N0YXR1cyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCXU4IHRpZCwgZW51bSBIVF9TVEFUVVMgc3RhdHVzKQotewotCXN0cnVjdCBpd2w0OTY1X2xxX21uZ3IgKmxxOwotCXUzMiB0aWRfbXNrID0gKDEgPDwgdGlkKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbHEgPSAoc3RydWN0IGl3bDQ5NjVfbHFfbW5nciAqKSYocHJpdi0+bHFfbW5ncik7Ci0KLQlpZiAoKHRpZCA+PSBUSURfTUFYX0xPQURfQ09VTlQpKQotCQlnb3RvIG91dDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgQkFfU1RBVFVTX0FDVElWRToKLQkJaWYgKCEobHEtPmFnZ19jdHJsLmdyYW50ZWRfYmEgJiB0aWRfbXNrKSkKLQkJCWxxLT5hZ2dfY3RybC5ncmFudGVkX2JhIHw9IHRpZF9tc2s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlmICgobHEtPmFnZ19jdHJsLmdyYW50ZWRfYmEgJiB0aWRfbXNrKSkKLQkJCWxxLT5hZ2dfY3RybC5ncmFudGVkX2JhICY9IH50aWRfbXNrOwotCQlicmVhazsKLQl9Ci0KLQlscS0+YWdnX2N0cmwud2FpdF9mb3JfYWdnX3N0YXR1cyAmPSB+dGlkX21zazsKLQlpZiAoc3RhdHVzICE9IEJBX1NUQVRVU19BQ1RJVkUpIHsKLQkJaWYgKGxxLT5hZ2dfY3RybC5hdXRvX2FnZykgewotCQkJbHEtPmFnZ19jdHJsLnRpZF9yZXRyeSB8PSB0aWRfbXNrOwotCQkJbHEtPmFnZ19jdHJsLm5leHRfcmV0cnkgPQotCQkJICAgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCk7Ci0JCX0gZWxzZQotCQkJbHEtPmFnZ19jdHJsLnJlcXVlc3RlZF9iYSAmPSB+dGlkX21zazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bHFfbW5nci5sb2NrLCBmbGFncyk7Ci0gb3V0OgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19hZ2dfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsNDk2NV9wcml2LAotCQkJCQlhZ2dfd29yayk7Ci0KLQl1MzIgdGlkOwotCXUzMiByZXRyeV90aWQ7Ci0JdTMyIHRpZF9tc2s7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXdsNDk2NV9scV9tbmdyICpscSA9IChzdHJ1Y3QgaXdsNDk2NV9scV9tbmdyICopJihwcml2LT5scV9tbmdyKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQlyZXRyeV90aWQgPSBscS0+YWdnX2N0cmwudGlkX3JldHJ5OwotCWxxLT5hZ2dfY3RybC50aWRfcmV0cnkgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCi0JaWYgKHJldHJ5X3RpZCA9PSBUSURfQUxMX1NQRUNJRklFRCkKLQkJaXdsNDk2NV90dXJuX29uX2FnZyhwcml2LCBUSURfQUxMX1NQRUNJRklFRCk7Ci0JZWxzZSB7Ci0JCWZvciAodGlkID0gMDsgdGlkIDwgVElEX01BWF9MT0FEX0NPVU5UOyB0aWQrKykgewotCQkJdGlkX21zayA9ICgxIDw8IHRpZCk7Ci0JCQlpZiAocmV0cnlfdGlkICYgdGlkX21zaykKLQkJCQlpd2w0OTY1X3R1cm5fb25fYWdnKHByaXYsIHRpZCk7Ci0JCX0KLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bHFfbW5nci5sb2NrLCBmbGFncyk7Ci0JaWYgKGxxLT5hZ2dfY3RybC50aWRfcmV0cnkpCi0JCWxxLT5hZ2dfY3RybC5uZXh0X3JldHJ5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQlyZXR1cm47Ci19Ci0KLS8qIFRPRE86IG1vdmUgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIHJhdGUgc2NhbGluZyAqLwotdm9pZCBpd2w0OTY1X3RsX2dldF9zdGF0cyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQotewotCV9fbGUxNiAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdHJsKGhkcik7Ci0KLQlpZiAocWMgJiYKLQkgICAgKHByaXYtPml3X21vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykpIHsKLQkJdTggdGlkID0gMDsKLQkJdGlkID0gKHU4KSAobGUxNl90b19jcHUoKnFjKSAmIDB4Rik7Ci0JCWlmICh0aWQgPCBUSURfTUFYX0xPQURfQ09VTlQpCi0JCQlpd2w0OTY1X3RsX2FkZF9wYWNrZXQocHJpdiwgdGlkKTsKLQl9Ci0KLQlpZiAocHJpdi0+bHFfbW5nci5hZ2dfY3RybC5uZXh0X3JldHJ5ICYmCi0JICAgICh0aW1lX2FmdGVyKHByaXYtPmxxX21uZ3IuYWdnX2N0cmwubmV4dF9yZXRyeSwgamlmZmllcykpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxxX21uZ3IubG9jaywgZmxhZ3MpOwotCQlwcml2LT5scV9tbmdyLmFnZ19jdHJsLm5leHRfcmV0cnkgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5scV9tbmdyLmxvY2ssIGZsYWdzKTsKLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+YWdnX3dvcmspOwotCX0KLX0KLQotI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCi0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KLQogLyoqCiAgKiBzaWduX2V4dGVuZCAtIFNpZ24gZXh0ZW5kIGEgdmFsdWUgdXNpbmcgc3BlY2lmaWVkIGJpdCBhcyBzaWduLWJpdAogICoKQEAgLTMzMTYsNyArMzI0NSw3IEBACiAgKgogICogQSByZXR1cm4gb2YgPDAgaW5kaWNhdGVzIGJvZ3VzIGRhdGEgaW4gdGhlIHN0YXRpc3RpY3MKICAqLwotaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitpbnQgaXdsNDk2NV9nZXRfdGVtcGVyYXR1cmUoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXMzMiB0ZW1wZXJhdHVyZTsKIAlzMzIgdnQ7CkBAIC0zMzg0LDcgKzMzMTMsNyBAQAogICogQXNzdW1lcyBjYWxsZXIgd2lsbCByZXBsYWNlIHByaXYtPmxhc3RfdGVtcGVyYXR1cmUgb25jZSBjYWxpYnJhdGlvbgogICogZXhlY3V0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9pc190ZW1wX2NhbGliX25lZWRlZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X2lzX3RlbXBfY2FsaWJfbmVlZGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgdGVtcF9kaWZmOwogCkBAIC0zNDE3LDcgKzMzNDYsNyBAQAogLyogQ2FsY3VsYXRlIG5vaXNlIGxldmVsLCBiYXNlZCBvbiBtZWFzdXJlbWVudHMgZHVyaW5nIG5ldHdvcmsgc2lsZW5jZSBqdXN0CiAgKiAgIGJlZm9yZSBhcnJpdmluZyBiZWFjb24uICBUaGlzIG1lYXN1cmVtZW50IGNhbiBiZSBkb25lIG9ubHkgaWYgd2Uga25vdwogICogICBleGFjdGx5IHdoZW4gdG8gZXhwZWN0IGJlYWNvbnMsIHRoZXJlZm9yZSBvbmx5IHdoZW4gd2UncmUgYXNzb2NpYXRlZC4gKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfY2FsY19ub2lzZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9jYWxjX25vaXNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvCiAJCQkJPSAmKHByaXYtPnN0YXRpc3RpY3MucnguZ2VuZXJhbCk7CkBAIC0zNDU0LDcgKzMzODMsNyBAQAogCQkJcHJpdi0+bGFzdF9yeF9ub2lzZSk7CiB9CiAKLXZvaWQgaXdsNDk2NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKK3ZvaWQgaXdsNDk2NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlpbnQgY2hhbmdlOwpAQCAtMzQ4OCw2ICszNDE3LDggQEAKICNlbmRpZgogCX0KIAorCWl3bF9sZWRzX2JhY2tncm91bmQocHJpdik7CisKIAkvKiBJZiB0aGUgaGFyZHdhcmUgaGFzbid0IHJlcG9ydGVkIGEgY2hhbmdlIGluCiAJICogdGVtcGVyYXR1cmUgdGhlbiBkb24ndCBib3RoZXIgY29tcHV0aW5nIGEKIAkgKiBjYWxpYnJhdGVkIHRlbXBlcmF0dXJlIHZhbHVlICovCkBAIC0zNTE4LDcgKzM0NDksNyBAQAogCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnR4cG93ZXJfd29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfYWRkX3JhZGlvdGFwKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X2FkZF9yYWRpb3RhcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKnJ4X3N0YXJ0LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMsCkBAIC0zNTI2LDggKzM0NTcsOSBAQAogewogCXM4IHNpZ25hbCA9IHN0YXRzLT5zc2k7CiAJczggbm9pc2UgPSAwOwotCWludCByYXRlID0gc3RhdHMtPnJhdGU7CisJaW50IHJhdGUgPSBzdGF0cy0+cmF0ZV9pZHg7CiAJdTY0IHRzZiA9IHN0YXRzLT5tYWN0aW1lOworCV9fbGUxNiBhbnRlbm5hOwogCV9fbGUxNiBwaHlfZmxhZ3NfaHcgPSByeF9zdGFydC0+cGh5X2ZsYWdzOwogCXN0cnVjdCBpd2w0OTY1X3J0X3J4X2hkciB7CiAJCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHJ0X2hkcjsKQEAgLTM1OTQsNyArMzUyNiw2IEBACiAJCQkJCSAgSUVFRTgwMjExX0NIQU5fMkdIWiksCiAJCQkgICAgICAmaXdsNDk2NV9ydC0+cnRfY2hiaXRtYXNrKTsKIAotCXJhdGUgPSBpd2w0OTY1X3JhdGVfaW5kZXhfZnJvbV9wbGNwKHJhdGUpOwogCWlmIChyYXRlID09IC0xKQogCQlpd2w0OTY1X3J0LT5ydF9yYXRlID0gMDsKIAllbHNlCkBAIC0zNjEzLDggKzM1NDQsOCBAQAogCSAqIG5ldyA4MDIuMTFuIHJhZGlvdGFwIGZpZWxkICJSWCBjaGFpbnMiIHRoYXQgaXMgZGVmaW5lZAogCSAqIGFzIGEgYml0bWFzay4KIAkgKi8KLQlpd2w0OTY1X3J0LT5ydF9hbnRlbm5hID0KLQkJbGUxNl90b19jcHUocGh5X2ZsYWdzX2h3ICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSykgPj4gNDsKKwlhbnRlbm5hID0gcGh5X2ZsYWdzX2h3ICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSzsKKwlpd2w0OTY1X3J0LT5ydF9hbnRlbm5hID0gbGUxNl90b19jcHUoYW50ZW5uYSkgPj4gNDsKIAogCS8qIHNldCB0aGUgcHJlYW1ibGUgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwogCWlmIChwaHlfZmxhZ3NfaHcgJiBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSykKQEAgLTM2MjMsNyArMzU1NCw3NCBAQAogCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfUkFESU9UQVA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfaGFuZGxlX2RhdGFfcGFja2V0KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCBpc19kYXRhLAorc3RhdGljIHZvaWQgaXdsX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmYywgdTE2IGxlbikKK3sKKwkvKiAwIC0gbWdtdCwgMSAtIGNudCwgMiAtIGRhdGEgKi8KKwlpbnQgaWR4ID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDI7CisJcHJpdi0+cnhfc3RhdHNbaWR4XS5jbnQrKzsKKwlwcml2LT5yeF9zdGF0c1tpZHhdLmJ5dGVzICs9IGxlbjsKK30KKworc3RhdGljIHUzMiBpd2w0OTY1X3RyYW5zbGF0ZV9yeF9zdGF0dXModTMyIGRlY3J5cHRfaW4pCit7CisJdTMyIGRlY3J5cHRfb3V0ID0gMDsKKworCWlmICgoZGVjcnlwdF9pbiAmIFJYX1JFU19TVEFUVVNfU1RBVElPTl9GT1VORCkgPT0KKwkJCQkJUlhfUkVTX1NUQVRVU19TVEFUSU9OX0ZPVU5EKQorCQlkZWNyeXB0X291dCB8PSAoUlhfUkVTX1NUQVRVU19TVEFUSU9OX0ZPVU5EIHwKKwkJCQlSWF9SRVNfU1RBVFVTX05PX1NUQVRJT05fSU5GT19NSVNNQVRDSCk7CisKKwlkZWNyeXB0X291dCB8PSAoZGVjcnlwdF9pbiAmIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLKTsKKworCS8qIHBhY2tldCB3YXMgbm90IGVuY3J5cHRlZCAqLworCWlmICgoZGVjcnlwdF9pbiAmIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLKSA9PQorCQkJCQlSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX05PTkUpCisJCXJldHVybiBkZWNyeXB0X291dDsKKworCS8qIHBhY2tldCB3YXMgZW5jcnlwdGVkIHdpdGggdW5rbm93biBhbGcgKi8KKwlpZiAoKGRlY3J5cHRfaW4gJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgPT0KKwkJCQkJUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9FUlIpCisJCXJldHVybiBkZWNyeXB0X291dDsKKworCS8qIGRlY3J5cHRpb24gd2FzIG5vdCBkb25lIGluIEhXICovCisJaWYgKChkZWNyeXB0X2luICYgUlhfTVBEVV9SRVNfU1RBVFVTX0RFQ19ET05FX01TSykgIT0KKwkJCQkJUlhfTVBEVV9SRVNfU1RBVFVTX0RFQ19ET05FX01TSykKKwkJcmV0dXJuIGRlY3J5cHRfb3V0OworCisJc3dpdGNoIChkZWNyeXB0X2luICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spIHsKKworCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QOgorCQkvKiBhbGcgaXMgQ0NNOiBjaGVjayBNSUMgb25seSAqLworCQlpZiAoIShkZWNyeXB0X2luICYgUlhfTVBEVV9SRVNfU1RBVFVTX01JQ19PSykpCisJCQkvKiBCYWQgTUlDICovCisJCQlkZWNyeXB0X291dCB8PSBSWF9SRVNfU1RBVFVTX0JBRF9JQ1ZfTUlDOworCQllbHNlCisJCQlkZWNyeXB0X291dCB8PSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfT0s7CisKKwkJYnJlYWs7CisKKwljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUDoKKwkJaWYgKCEoZGVjcnlwdF9pbiAmIFJYX01QRFVfUkVTX1NUQVRVU19UVEFLX09LKSkgeworCQkJLyogQmFkIFRUQUsgKi8KKwkJCWRlY3J5cHRfb3V0IHw9IFJYX1JFU19TVEFUVVNfQkFEX0tFWV9UVEFLOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoIGlmIFRUQUsgT0sgKi8KKwlkZWZhdWx0OgorCQlpZiAoIShkZWNyeXB0X2luICYgUlhfTVBEVV9SRVNfU1RBVFVTX0lDVl9PSykpCisJCQlkZWNyeXB0X291dCB8PSBSWF9SRVNfU1RBVFVTX0JBRF9JQ1ZfTUlDOworCQllbHNlCisJCQlkZWNyeXB0X291dCB8PSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfT0s7CisJCWJyZWFrOworCX07CisKKwlJV0xfREVCVUdfUlgoImRlY3J5cHRfaW46MHgleCAgZGVjcnlwdF9vdXQgPSAweCV4XG4iLAorCQkJCQlkZWNyeXB0X2luLCBkZWNyeXB0X291dCk7CisKKwlyZXR1cm4gZGVjcnlwdF9vdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfaGFuZGxlX2RhdGFfcGFja2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGlzX2RhdGEsCiAJCQkJICAgICAgIGludCBpbmNsdWRlX3BoeSwKIAkJCQkgICAgICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCkBAIC0zNjM2LDYgKzM2MzQsNyBAQAogCV9fbGUzMiAqcnhfZW5kOwogCXVuc2lnbmVkIGludCBza2JsZW47CiAJdTMyIGFtcGR1X3N0YXR1czsKKwl1MzIgYW1wZHVfc3RhdHVzX2xlZ2FjeTsKIAogCWlmICghaW5jbHVkZV9waHkgJiYgcHJpdi0+bGFzdF9waHlfcmVzWzBdKQogCQlyeF9zdGFydCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKQEAgLTM2NjQsNyArMzY2Myw3IEBACiAJCXJ4X3N0YXJ0LT5ieXRlX2NvdW50ID0gYW1zZHUtPmJ5dGVfY291bnQ7CiAJCXJ4X2VuZCA9IChfX2xlMzIgKikgKCgodTggKikgaGRyKSArIGxlbik7CiAJfQotCWlmIChsZW4gPiBwcml2LT5od19zZXR0aW5nLm1heF9wa3Rfc2l6ZSB8fCBsZW4gPCAxNikgeworCWlmIChsZW4gPiBwcml2LT5od19wYXJhbXMubWF4X3BrdF9zaXplIHx8IGxlbiA8IDE2KSB7CiAJCUlXTF9XQVJOSU5HKCJieXRlIGNvdW50IG91dCBvZiByYW5nZSBbMTYsNEtdIDogJWRcbiIsIGxlbik7CiAJCXJldHVybjsKIAl9CkBAIC0zNjcyLDYgKzM2NzEsMTIgQEAKIAlhbXBkdV9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqcnhfZW5kKTsKIAlza2JsZW4gPSAoKHU4ICopIHJ4X2VuZCAtICh1OCAqKSAmIHBrdC0+dS5yYXdbMF0pICsgc2l6ZW9mKHUzMik7CiAKKwlpZiAoIWluY2x1ZGVfcGh5KSB7CisJCS8qIE5ldyBzdGF0dXMgc2NoZW1lLCBuZWVkIHRvIHRyYW5zbGF0ZSAqLworCQlhbXBkdV9zdGF0dXNfbGVnYWN5ID0gYW1wZHVfc3RhdHVzOworCQlhbXBkdV9zdGF0dXMgPSBpd2w0OTY1X3RyYW5zbGF0ZV9yeF9zdGF0dXMoYW1wZHVfc3RhdHVzKTsKKwl9CisKIAkvKiBzdGFydCBmcm9tIE1BQyAqLwogCXNrYl9yZXNlcnZlKHJ4Yi0+c2tiLCAodm9pZCAqKWhkciAtICh2b2lkICopcGt0KTsKIAlza2JfcHV0KHJ4Yi0+c2tiLCBsZW4pOwkvKiBlbmQgd2hlcmUgZGF0YSBlbmRzICovCkBAIC0zNjg2LDE5ICszNjkxLDE2IEBACiAJc3RhdHMtPmZsYWcgPSAwOwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4Yi0+c2tiLT5kYXRhOwogCi0JaWYgKGl3bDQ5NjVfcGFyYW1faHdjcnlwdG8pCisJaWYgKCFwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0bykKIAkJaXdsNDk2NV9zZXRfZGVjcnlwdGVkX2ZsYWcocHJpdiwgcnhiLT5za2IsIGFtcGR1X3N0YXR1cywgc3RhdHMpOwogCiAJaWYgKHByaXYtPmFkZF9yYWRpb3RhcCkKIAkJaXdsNDk2NV9hZGRfcmFkaW90YXAocHJpdiwgcnhiLT5za2IsIHJ4X3N0YXJ0LCBzdGF0cywgYW1wZHVfc3RhdHVzKTsKIAorCWl3bF91cGRhdGVfcnhfc3RhdHMocHJpdiwgbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSwgbGVuKTsKIAlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgcnhiLT5za2IsIHN0YXRzKTsKIAlwcml2LT5hbGxvY19yeGJfc2tiLS07CiAJcnhiLT5za2IgPSBOVUxMOwotI2lmZGVmIExFRAotCXByaXYtPmxlZF9wYWNrZXRzICs9IGxlbjsKLQlpd2w0OTY1X3NldHVwX2FjdGl2aXR5X3RpbWVyKHByaXYpOwotI2VuZGlmCiB9CiAKIC8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwpAQCAtMzczNyw4NSArMzczOSwxNiBAQAogCiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKIAotLyogUGFyc2VkIEluZm9ybWF0aW9uIEVsZW1lbnRzICovCi1zdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyB7Ci0JdTggKmRzX3BhcmFtczsKLQl1OCBkc19wYXJhbXNfbGVuOwotCXU4ICp0aW07Ci0JdTggdGltX2xlbjsKLQl1OCAqaWJzc19wYXJhbXM7Ci0JdTggaWJzc19wYXJhbXNfbGVuOwotCXU4ICplcnBfaW5mbzsKLQl1OCBlcnBfaW5mb19sZW47Ci0JdTggKmh0X2NhcF9wYXJhbTsKLQl1OCBodF9jYXBfcGFyYW1fbGVuOwotCXU4ICpodF9leHRyYV9wYXJhbTsKLQl1OCBodF9leHRyYV9wYXJhbV9sZW47Ci19OwotCi1zdGF0aWMgaW50IHBhcnNlX2VsZW1zKHU4ICpzdGFydCwgc2l6ZV90IGxlbiwgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zKQotewotCXNpemVfdCBsZWZ0ID0gbGVuOwotCXU4ICpwb3MgPSBzdGFydDsKLQlpbnQgdW5rbm93biA9IDA7Ci0KLQltZW1zZXQoZWxlbXMsIDAsIHNpemVvZigqZWxlbXMpKTsKLQotCXdoaWxlIChsZWZ0ID49IDIpIHsKLQkJdTggaWQsIGVsZW47Ci0KLQkJaWQgPSAqcG9zKys7Ci0JCWVsZW4gPSAqcG9zKys7Ci0JCWxlZnQgLT0gMjsKLQotCQlpZiAoZWxlbiA+IGxlZnQpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJc3dpdGNoIChpZCkgewotCQljYXNlIFdMQU5fRUlEX0RTX1BBUkFNUzoKLQkJCWVsZW1zLT5kc19wYXJhbXMgPSBwb3M7Ci0JCQllbGVtcy0+ZHNfcGFyYW1zX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9USU06Ci0JCQllbGVtcy0+dGltID0gcG9zOwotCQkJZWxlbXMtPnRpbV9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6Ci0JCQllbGVtcy0+aWJzc19wYXJhbXMgPSBwb3M7Ci0JCQllbGVtcy0+aWJzc19wYXJhbXNfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgotCQkJZWxlbXMtPmVycF9pbmZvID0gcG9zOwotCQkJZWxlbXMtPmVycF9pbmZvX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgotCQkJZWxlbXMtPmh0X2NhcF9wYXJhbSA9IHBvczsKLQkJCWVsZW1zLT5odF9jYXBfcGFyYW1fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0hUX0VYVFJBX0lORk86Ci0JCQllbGVtcy0+aHRfZXh0cmFfcGFyYW0gPSBwb3M7Ci0JCQllbGVtcy0+aHRfZXh0cmFfcGFyYW1fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdW5rbm93bisrOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlsZWZ0IC09IGVsZW47Ci0JCXBvcyArPSBlbGVuOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGl3bDQ5NjVfaW5pdF9odF9od19jYXBhYihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8sIGludCBtb2RlKQordm9pZCBpd2w0OTY1X2luaXRfaHRfaHdfY2FwYWIoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvLAorCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCWh0X2luZm8tPmNhcCA9IDA7CiAJbWVtc2V0KGh0X2luZm8tPnN1cHBfbWNzX3NldCwgMCwgMTYpOwogCiAJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gMTsKIAotCWlmIChtb2RlID09IE1PREVfSUVFRTgwMjExQSkgeworCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJaHRfaW5mby0+Y2FwIHw9ICh1MTYpSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEg7CiAJCWh0X2luZm8tPmNhcCB8PSAodTE2KUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOwogCQlodF9pbmZvLT5zdXBwX21jc19zZXRbNF0gPSAweDAxOwpAQCAtMzgyNCwxMCArMzc1Nyw5IEBACiAJaHRfaW5mby0+Y2FwIHw9ICh1MTYpSUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7CiAJaHRfaW5mby0+Y2FwIHw9ICh1MTYpKElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUyAmCiAJCQkgICAgIChJV0xfTUlNT19QU19OT05FIDw8IDIpKTsKLQlpZiAoaXdsNDk2NV9wYXJhbV9hbXNkdV9zaXplXzhLKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpd2w0OTY1IGluIEEtTVNEVSA4SyBzdXBwb3J0IG1vZGVcbiIpOworCisJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+YW1zZHVfc2l6ZV84SykKIAkJaHRfaW5mby0+Y2FwIHw9ICh1MTYpSUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFU7Ci0JfQogCiAJaHRfaW5mby0+YW1wZHVfZmFjdG9yID0gQ0ZHX0hUX1JYX0FNUERVX0ZBQ1RPUl9ERUY7CiAJaHRfaW5mby0+YW1wZHVfZGVuc2l0eSA9IENGR19IVF9NUERVX0RFTlNJVFlfREVGOwpAQCAtMzgzNyw3ICszNzY5LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3N0YV9tb2RpZnlfcHNfd2FrZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgc3RhX2lkKQorc3RhdGljIHZvaWQgaXdsNDk2NV9zdGFfbW9kaWZ5X3BzX3dha2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM4NTEsNyArMzc4Myw3IEBACiAJaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV91cGRhdGVfcHNfbW9kZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MTYgcHNfYml0LCB1OCAqYWRkcikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfdXBkYXRlX3BzX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgcHNfYml0LCB1OCAqYWRkcikKIHsKIAkvKiBGSVhNRTogbmVlZCBsb2NraW5nIG92ZXIgcHNfc3RhdHVzID8/PyAqLwogCXU4IHN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwpAQCAtMzg2OCw0NCArMzgwMCwyMDEgQEAKIAkJfQogCX0KIH0KKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCi0jZGVmaW5lIElXTF9ERUxBWV9ORVhUX1NDQU5fQUZURVJfQVNTT0MgKEhaKjYpCisvKioKKyAqIGl3bDQ5NjVfZGJnX3JlcG9ydF9mcmFtZSAtIGR1bXAgZnJhbWUgdG8gc3lzbG9nIGR1cmluZyBkZWJ1ZyBzZXNzaW9ucworICoKKyAqIFlvdSBtYXkgaGFjayB0aGlzIGZ1bmN0aW9uIHRvIHNob3cgZGlmZmVyZW50IGFzcGVjdHMgb2YgcmVjZWl2ZWQgZnJhbWVzLAorICogaW5jbHVkaW5nIHNlbGVjdGl2ZSBmcmFtZSBkdW1wcy4KKyAqIGdyb3VwMTAwIHBhcmFtZXRlciBzZWxlY3RzIHdoZXRoZXIgdG8gc2hvdyAxIG91dCBvZiAxMDAgZ29vZCBmcmFtZXMuCisgKgorICogVE9ETzogIFRoaXMgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgMzk0NSwgbmVlZCB0byBhdWRpdCBmb3IKKyAqICAgICAgICBwcm9wZXIgb3BlcmF0aW9uIHdpdGggNDk2NS4KKyAqLworc3RhdGljIHZvaWQgaXdsNDk2NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICAgc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKK3sKKwl1MzIgdG9fdXM7CisJdTMyIHByaW50X3N1bW1hcnkgPSAwOworCXUzMiBwcmludF9kdW1wID0gMDsJLyogc2V0IHRvIDEgdG8gZHVtcCBhbGwgZnJhbWVzJyBjb250ZW50cyAqLworCXUzMiBodW5kcmVkID0gMDsKKwl1MzIgZGF0YWZyYW1lID0gMDsKKwl1MTYgZmM7CisJdTE2IHNlcV9jdGw7CisJdTE2IGNoYW5uZWw7CisJdTE2IHBoeV9mbGFnczsKKwlpbnQgcmF0ZV9zeW07CisJdTE2IGxlbmd0aDsKKwl1MTYgc3RhdHVzOworCXUxNiBiY25fdG1yOworCXUzMiB0c2ZfbG93OworCXU2NCB0c2Y7CisJdTggcnNzaTsKKwl1OCBhZ2M7CisJdTE2IHNpZ19hdmc7CisJdTE2IG5vaXNlX2RpZmY7CisJc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfc3RhdHMgKnJ4X3N0YXRzID0gSVdMX1JYX1NUQVRTKHBrdCk7CisJc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfaGRyICpyeF9oZHIgPSBJV0xfUlhfSERSKHBrdCk7CisJc3RydWN0IGl3bDQ5NjVfcnhfZnJhbWVfZW5kICpyeF9lbmQgPSBJV0xfUlhfRU5EKHBrdCk7CisJdTggKmRhdGEgPSBJV0xfUlhfREFUQShwa3QpOwogCi0vKiBDYWxsZWQgZm9yIFJFUExZXzQ5NjVfUlggKGxlZ2FjeSBBQkcgZnJhbWVzKSwgb3IKKwlpZiAobGlrZWx5KCEoaXdsX2RlYnVnX2xldmVsICYgSVdMX0RMX1JYKSkpCisJCXJldHVybjsKKworCS8qIE1BQyBoZWFkZXIgKi8KKwlmYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCk7CisJc2VxX2N0bCA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2VxX2N0cmwpOworCisJLyogbWV0YWRhdGEgKi8KKwljaGFubmVsID0gbGUxNl90b19jcHUocnhfaGRyLT5jaGFubmVsKTsKKwlwaHlfZmxhZ3MgPSBsZTE2X3RvX2NwdShyeF9oZHItPnBoeV9mbGFncyk7CisJcmF0ZV9zeW0gPSByeF9oZHItPnJhdGU7CisJbGVuZ3RoID0gbGUxNl90b19jcHUocnhfaGRyLT5sZW4pOworCisJLyogZW5kLW9mLWZyYW1lIHN0YXR1cyBhbmQgdGltZXN0YW1wICovCisJc3RhdHVzID0gbGUzMl90b19jcHUocnhfZW5kLT5zdGF0dXMpOworCWJjbl90bXIgPSBsZTMyX3RvX2NwdShyeF9lbmQtPmJlYWNvbl90aW1lc3RhbXApOworCXRzZl9sb3cgPSBsZTY0X3RvX2NwdShyeF9lbmQtPnRpbWVzdGFtcCkgJiAweDBmZmZmZmZmZjsKKwl0c2YgPSBsZTY0X3RvX2NwdShyeF9lbmQtPnRpbWVzdGFtcCk7CisKKwkvKiBzaWduYWwgc3RhdGlzdGljcyAqLworCXJzc2kgPSByeF9zdGF0cy0+cnNzaTsKKwlhZ2MgPSByeF9zdGF0cy0+YWdjOworCXNpZ19hdmcgPSBsZTE2X3RvX2NwdShyeF9zdGF0cy0+c2lnX2F2Zyk7CisJbm9pc2VfZGlmZiA9IGxlMTZfdG9fY3B1KHJ4X3N0YXRzLT5ub2lzZV9kaWZmKTsKKworCXRvX3VzID0gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxLCBwcml2LT5tYWNfYWRkcik7CisKKwkvKiBpZiBkYXRhIGZyYW1lIGlzIHRvIHVzIGFuZCBhbGwgaXMgZ29vZCwKKwkgKiAgIChvcHRpb25hbGx5KSBwcmludCBzdW1tYXJ5IGZvciBvbmx5IDEgb3V0IG9mIGV2ZXJ5IDEwMCAqLworCWlmICh0b191cyAmJiAoZmMgJiB+SUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSA9PQorCSAgICAoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZUWVBFX0RBVEEpKSB7CisJCWRhdGFmcmFtZSA9IDE7CisJCWlmICghZ3JvdXAxMDApCisJCQlwcmludF9zdW1tYXJ5ID0gMTsJLyogcHJpbnQgZWFjaCBmcmFtZSAqLworCQllbHNlIGlmIChwcml2LT5mcmFtZWNudF90b191cyA8IDEwMCkgeworCQkJcHJpdi0+ZnJhbWVjbnRfdG9fdXMrKzsKKwkJCXByaW50X3N1bW1hcnkgPSAwOworCQl9IGVsc2UgeworCQkJcHJpdi0+ZnJhbWVjbnRfdG9fdXMgPSAwOworCQkJcHJpbnRfc3VtbWFyeSA9IDE7CisJCQlodW5kcmVkID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHByaW50IHN1bW1hcnkgZm9yIGFsbCBvdGhlciBmcmFtZXMgKi8KKwkJcHJpbnRfc3VtbWFyeSA9IDE7CisJfQorCisJaWYgKHByaW50X3N1bW1hcnkpIHsKKwkJY2hhciAqdGl0bGU7CisJCWludCByYXRlX2lkeDsKKwkJdTMyIGJpdHJhdGU7CisKKwkJaWYgKGh1bmRyZWQpCisJCQl0aXRsZSA9ICIxMDBGcmFtZXMiOworCQllbHNlIGlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1JFVFJZKQorCQkJdGl0bGUgPSAiUmV0cnkiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcG9uc2UoZmMpKQorCQkJdGl0bGUgPSAiQXNjUnNwIjsKKwkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVzcG9uc2UoZmMpKQorCQkJdGl0bGUgPSAiUmFzUnNwIjsKKwkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3BvbnNlKGZjKSkgeworCQkJdGl0bGUgPSAiUHJiUnNwIjsKKwkJCXByaW50X2R1bXAgPSAxOwkvKiBkdW1wIGZyYW1lIGNvbnRlbnRzICovCisJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpIHsKKwkJCXRpdGxlID0gIkJlYWNvbiI7CisJCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLworCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19hdGltKGZjKSkKKwkJCXRpdGxlID0gIkFUSU0iOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpCisJCQl0aXRsZSA9ICJBdXRoIjsKKwkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RlYXV0aChmYykpCisJCQl0aXRsZSA9ICJEZUF1dGgiOworCQllbHNlIGlmIChpZWVlODAyMTFfaXNfZGlzYXNzb2MoZmMpKQorCQkJdGl0bGUgPSAiRGlzQXNzb2MiOworCQllbHNlCisJCQl0aXRsZSA9ICJGcmFtZSI7CisKKwkJcmF0ZV9pZHggPSBpd2w0OTY1X2h3cmF0ZV90b19wbGNwX2lkeChyYXRlX3N5bSk7CisJCWlmICh1bmxpa2VseShyYXRlX2lkeCA9PSAtMSkpCisJCQliaXRyYXRlID0gMDsKKwkJZWxzZQorCQkJYml0cmF0ZSA9IGl3bDQ5NjVfcmF0ZXNbcmF0ZV9pZHhdLmllZWUgLyAyOworCisJCS8qIHByaW50IGZyYW1lIHN1bW1hcnkuCisJCSAqIE1BQyBhZGRyZXNzZXMgc2hvdyBqdXN0IHRoZSBsYXN0IGJ5dGUgKGZvciBicmV2aXR5KSwKKwkJICogICAgYnV0IHlvdSBjYW4gaGFjayBpdCB0byBzaG93IG1vcmUsIGlmIHlvdSdkIGxpa2UgdG8uICovCisJCWlmIChkYXRhZnJhbWUpCisJCQlJV0xfREVCVUdfUlgoIiVzOiBtaGQ9MHglMDR4LCBkc3Q9MHglMDJ4LCAiCisJCQkJICAgICAibGVuPSV1LCByc3NpPSVkLCBjaG5sPSVkLCByYXRlPSV1LCBcbiIsCisJCQkJICAgICB0aXRsZSwgZmMsIGhlYWRlci0+YWRkcjFbNV0sCisJCQkJICAgICBsZW5ndGgsIHJzc2ksIGNoYW5uZWwsIGJpdHJhdGUpOworCQllbHNlIHsKKwkJCS8qIHNyYy9kc3QgYWRkcmVzc2VzIGFzc3VtZSBtYW5hZ2VkIG1vZGUgKi8KKwkJCUlXTF9ERUJVR19SWCgiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJCSAgICAgInNyYz0weCUwMngsIHJzc2k9JXUsIHRpbT0lbHUgdXNlYywgIgorCQkJCSAgICAgInBoeT0weCUwMngsIGNobmw9JWRcbiIsCisJCQkJICAgICB0aXRsZSwgZmMsIGhlYWRlci0+YWRkcjFbNV0sCisJCQkJICAgICBoZWFkZXItPmFkZHIzWzVdLCByc3NpLAorCQkJCSAgICAgdHNmX2xvdyAtIHByaXYtPnNjYW5fc3RhcnRfdHNmLAorCQkJCSAgICAgcGh5X2ZsYWdzLCBjaGFubmVsKTsKKwkJfQorCX0KKwlpZiAocHJpbnRfZHVtcCkKKwkJaXdsX3ByaW50X2hleF9kdW1wKElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsNDk2NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0LAorCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlciwKKwkJCQkJICAgIGludCBncm91cDEwMCkKK3sKK30KKyNlbmRpZgorCisKKworLyogQ2FsbGVkIGZvciBSRVBMWV9SWCAobGVnYWN5IEFCRyBmcmFtZXMpLCBvcgogICogUkVQTFlfUlhfTVBEVV9DTUQgKEhUIGhpZ2gtdGhyb3VnaHB1dCBOIGZyYW1lcykuICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X3J4KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X3J4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7CiAJc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCS8qIFVzZSBwaHkgZGF0YSAoUnggc2lnbmFsIHN0cmVuZ3RoLCBldGMuKSBjb250YWluZWQgd2l0aGluCiAJICogICB0aGlzIHJ4IHBhY2tldCBmb3IgbGVnYWN5IGZyYW1lcywKIAkgKiAgIG9yIHBoeSBkYXRhIGNhY2hlZCBmcm9tIFJFUExZX1JYX1BIWV9DTUQgZm9yIEhUIGZyYW1lcy4gKi8KLQlpbnQgaW5jbHVkZV9waHkgPSAocGt0LT5oZHIuY21kID09IFJFUExZXzQ5NjVfUlgpOworCWludCBpbmNsdWRlX3BoeSA9IChwa3QtPmhkci5jbWQgPT0gUkVQTFlfUlgpOwogCXN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKnJ4X3N0YXJ0ID0gKGluY2x1ZGVfcGh5KSA/CiAJCShzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICopJihwa3QtPnUucmF3WzBdKSA6CiAJCShzdHJ1Y3QgaXdsNDk2NV9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKIAlfX2xlMzIgKnJ4X2VuZDsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyOwogCXUxNiBmYzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0cyA9IHsKLQkJLm1hY3RpbWUgPSBsZTY0X3RvX2NwdShyeF9zdGFydC0+dGltZXN0YW1wKSwKLQkJLmNoYW5uZWwgPSBsZTE2X3RvX2NwdShyeF9zdGFydC0+Y2hhbm5lbCksCi0JCS5waHltb2RlID0KLQkJCShyeF9zdGFydC0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSykgPwotCQkJTU9ERV9JRUVFODAyMTFHIDogTU9ERV9JRUVFODAyMTFBLAotCQkuYW50ZW5uYSA9IDAsCi0JCS5yYXRlID0gaXdsNDk2NV9od19nZXRfcmF0ZShyeF9zdGFydC0+cmF0ZV9uX2ZsYWdzKSwKLQkJLmZsYWcgPSAwLAotCX07CiAJdTggbmV0d29ya19wYWNrZXQ7CiAKKwlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KHJ4X3N0YXJ0LT50aW1lc3RhbXApOworCXJ4X3N0YXR1cy5mcmVxID0KKwkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGxlMTZfdG9fY3B1KHJ4X3N0YXJ0LT5jaGFubmVsKSk7CisJcnhfc3RhdHVzLmJhbmQgPSAocnhfc3RhcnQtPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfQkFORF8yNF9NU0spID8KKwkJCQlJRUVFODAyMTFfQkFORF8yR0haIDogSUVFRTgwMjExX0JBTkRfNUdIWjsKKwlyeF9zdGF0dXMucmF0ZV9pZHggPQorCQlpd2w0OTY1X2h3cmF0ZV90b19wbGNwX2lkeChsZTMyX3RvX2NwdShyeF9zdGFydC0+cmF0ZV9uX2ZsYWdzKSk7CisJaWYgKHJ4X3N0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXJ4X3N0YXR1cy5yYXRlX2lkeCAtPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCisJcnhfc3RhdHVzLmFudGVubmEgPSAwOworCXJ4X3N0YXR1cy5mbGFnID0gMDsKKwogCWlmICgodW5saWtlbHkocnhfc3RhcnQtPmNmZ19waHlfY250ID4gMjApKSkgewotCQlJV0xfREVCVUdfRFJPUAotCQkJKCJkc3Agc2l6ZSBvdXQgb2YgcmFuZ2UgWzAsMjBdOiAiCi0JCQkgIiVkL24iLCByeF9zdGFydC0+Y2ZnX3BoeV9jbnQpOworCQlJV0xfREVCVUdfRFJPUCgiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCisJCQkJcnhfc3RhcnQtPmNmZ19waHlfY250KTsKIAkJcmV0dXJuOwogCX0KKwogCWlmICghaW5jbHVkZV9waHkpIHsKIAkJaWYgKHByaXYtPmxhc3RfcGh5X3Jlc1swXSkKIAkJCXJ4X3N0YXJ0ID0gKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMgKikKQEAgLTM5MjQsNyArNDAxMyw3IEBACiAJCQkJCQkgICsgcnhfc3RhcnQtPmNmZ19waHlfY250KTsKIAogCQlsZW4gPSBsZTE2X3RvX2NwdShyeF9zdGFydC0+Ynl0ZV9jb3VudCk7Ci0JCXJ4X2VuZCA9IChfX2xlMzIgKikgKHBrdC0+dS5yYXcgKyByeF9zdGFydC0+Y2ZnX3BoeV9jbnQgKworCQlyeF9lbmQgPSAoX19sZTMyICopKHBrdC0+dS5yYXcgKyByeF9zdGFydC0+Y2ZnX3BoeV9jbnQgKwogCQkJCSAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMpICsgbGVuKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaXdsNDk2NV9yeF9tcGR1X3Jlc19zdGFydCAqYW1zZHUgPQpAQCAtMzk0Niw0MyArNDAzNSwzOCBAQAogCiAJcHJpdi0+dWNvZGVfYmVhY29uX3RpbWUgPSBsZTMyX3RvX2NwdShyeF9zdGFydC0+YmVhY29uX3RpbWVfc3RhbXApOwogCi0Jc3RhdHMuZnJlcSA9IGllZWU4MDIxMWNoYW4ybWh6KHN0YXRzLmNoYW5uZWwpOwotCiAJLyogRmluZCBtYXggc2lnbmFsIHN0cmVuZ3RoIChkQm0pIGFtb25nIDMgYW50ZW5uYS9yZWNlaXZlciBjaGFpbnMgKi8KLQlzdGF0cy5zc2kgPSBpd2w0OTY1X2NhbGNfcnNzaShyeF9zdGFydCk7CisJcnhfc3RhdHVzLnNzaSA9IGl3bDQ5NjVfY2FsY19yc3NpKHJ4X3N0YXJ0KTsKIAogCS8qIE1lYW5pbmdmdWwgbm9pc2UgdmFsdWVzIGFyZSBhdmFpbGFibGUgb25seSBmcm9tIGJlYWNvbiBzdGF0aXN0aWNzLAogCSAqICAgd2hpY2ggYXJlIGdhdGhlcmVkIG9ubHkgd2hlbiBhc3NvY2lhdGVkLCBhbmQgaW5kaWNhdGUgbm9pc2UKIAkgKiAgIG9ubHkgZm9yIHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgY2hhbm5lbCAuLi4KIAkgKiBJZ25vcmUgdGhlc2Ugbm9pc2UgdmFsdWVzIHdoaWxlIHNjYW5uaW5nIChvdGhlciBjaGFubmVscykgKi8KLQlpZiAoaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpICYmCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCiAJICAgICF0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCXN0YXRzLm5vaXNlID0gcHJpdi0+bGFzdF9yeF9ub2lzZTsKLQkJc3RhdHMuc2lnbmFsID0gaXdsNDk2NV9jYWxjX3NpZ19xdWFsKHN0YXRzLnNzaSwgc3RhdHMubm9pc2UpOworCQlyeF9zdGF0dXMubm9pc2UgPSBwcml2LT5sYXN0X3J4X25vaXNlOworCQlyeF9zdGF0dXMuc2lnbmFsID0gaXdsNDk2NV9jYWxjX3NpZ19xdWFsKHJ4X3N0YXR1cy5zc2ksCisJCQkJCQkJIHJ4X3N0YXR1cy5ub2lzZSk7CiAJfSBlbHNlIHsKLQkJc3RhdHMubm9pc2UgPSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFOwotCQlzdGF0cy5zaWduYWwgPSBpd2w0OTY1X2NhbGNfc2lnX3F1YWwoc3RhdHMuc3NpLCAwKTsKKwkJcnhfc3RhdHVzLm5vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKKwkJcnhfc3RhdHVzLnNpZ25hbCA9IGl3bDQ5NjVfY2FsY19zaWdfcXVhbChyeF9zdGF0dXMuc3NpLCAwKTsKIAl9CiAKIAkvKiBSZXNldCBiZWFjb24gbm9pc2UgbGV2ZWwgaWYgbm90IGFzc29jaWF0ZWQuICovCi0JaWYgKCFpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpCisJaWYgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKIAkJcHJpdi0+bGFzdF9yeF9ub2lzZSA9IElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEU7CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotCS8qIFRPRE86ICBQYXJ0cyBvZiBpd2w0OTY1X3JlcG9ydF9mcmFtZSBhcmUgYnJva2VuIGZvciA0OTY1ICovCi0JaWYgKGl3bDQ5NjVfZGVidWdfbGV2ZWwgJiAoSVdMX0RMX1JYKSkKLQkJLyogU2V0ICIxIiB0byByZXBvcnQgZ29vZCBkYXRhIGZyYW1lcyBpbiBncm91cHMgb2YgMTAwICovCi0JCWl3bDQ5NjVfcmVwb3J0X2ZyYW1lKHByaXYsIHBrdCwgaGVhZGVyLCAxKTsKKwkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KKwkvKiBGSVhNRTogbmVlZCB0byBvcHRpbXplIHRoZSBjYWxsOiAqLworCWl3bDQ5NjVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7CiAKLQlpZiAoaXdsNDk2NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfUlggfCBJV0xfRExfU1RBVFMpKQotCUlXTF9ERUJVR19SWCgiUnNzaSAlZCwgbm9pc2UgJWQsIHF1YWwgJWQsIFRTRiAlbHVcbiIsCi0JCXN0YXRzLnNzaSwgc3RhdHMubm9pc2UsIHN0YXRzLnNpZ25hbCwKLQkJIChsb25nIHVuc2lnbmVkIGludClsZTY0X3RvX2NwdShyeF9zdGFydC0+dGltZXN0YW1wKSk7Ci0jZW5kaWYKKwlJV0xfREVCVUdfU1RBVFNfTElNSVQoIlJzc2kgJWQsIG5vaXNlICVkLCBxdWFsICVkLCBUU0YgJWxsdVxuIiwKKwkJCSAgICAgIHJ4X3N0YXR1cy5zc2ksIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnNpZ25hbCwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfc3RhdHVzLm1hY3RpbWUpOwogCiAJbmV0d29ya19wYWNrZXQgPSBpd2w0OTY1X2lzX25ldHdvcmtfcGFja2V0KHByaXYsIGhlYWRlcik7CiAJaWYgKG5ldHdvcmtfcGFja2V0KSB7Ci0JCXByaXYtPmxhc3RfcnhfcnNzaSA9IHN0YXRzLnNzaTsKKwkJcHJpdi0+bGFzdF9yeF9yc3NpID0gcnhfc3RhdHVzLnNzaTsKIAkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9ICBwcml2LT51Y29kZV9iZWFjb25fdGltZTsKIAkJcHJpdi0+bGFzdF90c2YgPSBsZTY0X3RvX2NwdShyeF9zdGFydC0+dGltZXN0YW1wKTsKIAl9CkBAIC0zOTkwLDEwMiArNDA3NCwxMCBAQAogCWZjID0gbGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jb250cm9sKTsKIAlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpIHsKIAljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgotCiAJCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKQogCQkJaXdsNDk2NV91cGRhdGVfcHNfbW9kZShwcml2LCBmYyAgJiBJRUVFODAyMTFfRkNUTF9QTSwKIAkJCQkJCWhlYWRlci0+YWRkcjIpOwotCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQkJaWYgKChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgotCQkJICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjIsIHByaXYtPmJzc2lkKSkgfHwKLQkJCSAgICAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCi0JCQkgICAgICFjb21wYXJlX2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMywgcHJpdi0+YnNzaWQpKSkgewotCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9Ci0JCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKiloZWFkZXI7Ci0JCQkJdTY0IHRpbWVzdGFtcCA9Ci0JCQkJCWxlNjRfdG9fY3B1KG1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCk7Ci0KLQkJCQlwcml2LT50aW1lc3RhbXAwID0gdGltZXN0YW1wICYgMHhGRkZGRkZGRjsKLQkJCQlwcml2LT50aW1lc3RhbXAxID0KLQkJCQkJKHRpbWVzdGFtcCA+PiAzMikgJiAweEZGRkZGRkZGOwotCQkJCXByaXYtPmJlYWNvbl9pbnQgPSBsZTE2X3RvX2NwdSgKLQkJCQkgICAgbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCk7Ci0JCQkJaWYgKHByaXYtPmNhbGxfcG9zdF9hc3NvY19mcm9tX2JlYWNvbiAmJgotCQkJCSAgICAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpKSB7Ci0JCQkJCXByaXYtPmNhbGxfcG9zdF9hc3NvY19mcm9tX2JlYWNvbiA9IDA7Ci0JCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkgICAgJnByaXYtPnBvc3RfYXNzb2NpYXRlLndvcmspOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJCWJyZWFrOwotCi0JCQkvKgotCQkJICogVE9ETzogVXNlIHRoZSBuZXcgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbQotCQkJICogbWFjODAyMTEgaW5zdGVhZCBvZiBzbmlmZmluZyB0aGVzZSBwYWNrZXRzLgotCQkJICovCi0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJCWlmIChuZXR3b3JrX3BhY2tldCkgewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JCQkJdTggKnBvcyA9IE5VTEw7Ci0JCQkJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7Ci0jZW5kaWYJCQkJLypDT05GSUdfSVdMNDk2NV9IVCAqLwotCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdudCA9Ci0JCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKiloZWFkZXI7Ci0KLQkJCQkvKiBXZSBoYXZlIGp1c3QgYXNzb2NpYXRlZCwgZ2l2ZSBzb21lCi0JCQkJICogdGltZSBmb3IgdGhlIDQtd2F5IGhhbmRzaGFrZSBpZgotCQkJCSAqIGFueS4gRG9uJ3Qgc3RhcnQgc2NhbiB0b28gZWFybHkuICovCi0JCQkJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzICsKLQkJCQkJSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQzsKLQotCQkJCXByaXYtPmFzc29jX2lkID0gKH4oKDEgPDwgMTUpIHwgKDEgPDwgMTQpKQotCQkJCQkmIGxlMTZfdG9fY3B1KG1nbnQtPnUuYXNzb2NfcmVzcC5haWQpKTsKLQkJCQlwcml2LT5hc3NvY19jYXBhYmlsaXR5ID0KLQkJCQkJbGUxNl90b19jcHUoCi0JCQkJCQltZ250LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQkJCQlwb3MgPSBtZ250LT51LmFzc29jX3Jlc3AudmFyaWFibGU7Ci0JCQkJaWYgKCFwYXJzZV9lbGVtcyhwb3MsCi0JCQkJCQkgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ250KSwKLQkJCQkJCSAmZWxlbXMpKSB7Ci0JCQkJCWlmIChlbGVtcy5odF9leHRyYV9wYXJhbSAmJgotCQkJCQkgICAgZWxlbXMuaHRfY2FwX3BhcmFtKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotI2VuZGlmCQkJCS8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KLQkJCQkvKiBhc3NvY19pZCBpcyAwIG5vIGFzc29jaWF0aW9uICovCi0JCQkJaWYgKCFwcml2LT5hc3NvY19pZCkKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHByaXYtPmJlYWNvbl9pbnQpCi0JCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkgICAgJnByaXYtPnBvc3RfYXNzb2NpYXRlLndvcmspOwotCQkJCWVsc2UKLQkJCQkJcHJpdi0+Y2FsbF9wb3N0X2Fzc29jX2Zyb21fYmVhY29uID0gMTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQkJaWYgKChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpICYmCi0JCQkgICAgIWl3bDQ5NjVfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQkJCURFQ0xBUkVfTUFDX0JVRihtYWMxKTsKLQkJCQlERUNMQVJFX01BQ19CVUYobWFjMik7Ci0JCQkJREVDTEFSRV9NQUNfQlVGKG1hYzMpOwotCi0JCQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIChub24gbmV0d29yayk6ICIKLQkJCQkJICAgICAgICIlcywgJXMsICVzXG4iLAotCQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzEsIGhlYWRlci0+YWRkcjEpLAotCQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzIsIGhlYWRlci0+YWRkcjIpLAotCQkJCQkgICAgICAgcHJpbnRfbWFjKG1hYzMsIGhlYWRlci0+YWRkcjMpKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJaXdsNDk2NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMCwgaW5jbHVkZV9waHksIHJ4YiwgJnN0YXRzKTsKKwkJaXdsNDk2NV9oYW5kbGVfZGF0YV9wYWNrZXQocHJpdiwgMCwgaW5jbHVkZV9waHksIHJ4YiwgJnJ4X3N0YXR1cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgpAQCAtNDA5NCw3ICs0MDg2LDcgQEAKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVE6CiAJCQlJV0xfREVCVUdfSFQoIklFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSBhcnJpdmVkXG4iKTsKIAkJCWl3bDQ5NjVfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIDAsIGluY2x1ZGVfcGh5LAotCQkJCQkJcnhiLCAmc3RhdHMpOworCQkJCQkJcnhiLCAmcnhfc3RhdHVzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC00MTI0LDcgKzQxMTYsNyBAQAogCQkJCSAgICAgICBwcmludF9tYWMobWFjMywgaGVhZGVyLT5hZGRyMykpOwogCQllbHNlCiAJCQlpd2w0OTY1X2hhbmRsZV9kYXRhX3BhY2tldChwcml2LCAxLCBpbmNsdWRlX3BoeSwgcnhiLAotCQkJCQkJICAgJnN0YXRzKTsKKwkJCQkJCSAgICZyeF9zdGF0dXMpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTQxMzUsNyArNDEyNyw3IEBACiAKIC8qIENhY2hlIHBoeSBkYXRhIChSeCBzaWduYWwgc3RyZW5ndGgsIGV0YykgZm9yIEhUIGZyYW1lIChSRVBMWV9SWF9QSFlfQ01EKS4KICAqIFRoaXMgd2lsbCBiZSB1c2VkIGxhdGVyIGluIGl3bDQ5NjVfcnhfcmVwbHlfcngoKSBmb3IgUkVQTFlfUlhfTVBEVV9DTUQuICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X3J4X3BoeShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9yZXBseV9yeF9waHkoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CiAJc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwpAQCAtNDE0Myw4ICs0MTM1LDcgQEAKIAltZW1jcHkoJnByaXYtPmxhc3RfcGh5X3Jlc1sxXSwgJihwa3QtPnUucmF3WzBdKSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X3BoeV9yZXMpKTsKIH0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9taXNzZWRfYmVhY29uX25vdGlmKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X21pc3NlZF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiAKIHsKQEAgLTQxNjUsMzEgKzQxNTYsMTIgQEAKIAl9CiAjZW5kaWYgLypDT05GSUdfSVdMNDk2NV9TRU5TSVRJVklUWSovCiB9Ci0KICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotCi0vKioKLSAqIGl3bDQ5NjVfc2V0X3R4X3N0YXR1cyAtIFVwZGF0ZSBkcml2ZXIncyByZWNvcmQgb2Ygb25lIFR4IGZyYW1lJ3Mgc3RhdHVzCi0gKgotICogVGhpcyB3aWxsIGdldCBzZW50IHRvIG1hYzgwMjExLgotICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3NldF90eF9zdGF0dXMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgaW50IGlkeCwKLQkJCQkgIHUzMiBzdGF0dXMsIHUzMiByZXRyeV9jb3VudCwgdTMyIHJhdGUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1cyA9Ci0JCSYocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc3RhdHVzKTsKLQotCXR4X3N0YXR1cy0+ZmxhZ3MgPSBzdGF0dXMgPyBJRUVFODAyMTFfVFhfU1RBVFVTX0FDSyA6IDA7Ci0JdHhfc3RhdHVzLT5yZXRyeV9jb3VudCArPSByZXRyeV9jb3VudDsKLQl0eF9zdGF0dXMtPmNvbnRyb2wudHhfcmF0ZSA9IHJhdGU7Ci19Ci0KIAogLyoqCiAgKiBpd2w0OTY1X3N0YV9tb2RpZnlfZW5hYmxlX3RpZF90eCAtIEVuYWJsZSBUeCBmb3IgdGhpcyBUSUQgaW4gc3RhdGlvbiB0YWJsZQogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3N0YV9tb2RpZnlfZW5hYmxlX3RpZF90eChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9zdGFfbW9kaWZ5X2VuYWJsZV90aWRfdHgoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgaW50IHN0YV9pZCwgaW50IHRpZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDIwNCwyNCArNDE3NiwyNCBAQAogCWl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CiB9CiAKLQogLyoqCiAgKiBpd2w0OTY1X3R4X3N0YXR1c19yZXBseV9jb21wcmVzc2VkX2JhIC0gVXBkYXRlIHR4IHN0YXR1cyBmcm9tIGJsb2NrLWFjawogICoKICAqIEdvIHRocm91Z2ggYmxvY2stYWNrJ3MgYml0bWFwIG9mIEFDSydkIGZyYW1lcywgdXBkYXRlIGRyaXZlcidzIHJlY29yZCBvZgogICogQUNLIHZzLiBub3QuICBUaGlzIGdldHMgc2VudCB0byBtYWM4MDIxMSwgdGhlbiB0byByYXRlIHNjYWxpbmcgYWxnby4KICAqLwotc3RhdGljIGludCBpd2w0OTY1X3R4X3N0YXR1c19yZXBseV9jb21wcmVzc2VkX2JhKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDQ5NjVfdHhfc3RhdHVzX3JlcGx5X2NvbXByZXNzZWRfYmEoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkJIHN0cnVjdCBpd2w0OTY1X2h0X2FnZyAqYWdnLAogCQkJCQkJIHN0cnVjdCBpd2w0OTY1X2NvbXByZXNzZWRfYmFfcmVzcCoKIAkJCQkJCSBiYV9yZXNwKQogCiB7CiAJaW50IGksIHNoLCBhY2s7Ci0JdTE2IGJhX3NlcV9jdGwgPSBsZTE2X3RvX2NwdShiYV9yZXNwLT5iYV9zZXFfY3RsKTsKLQl1MzIgYml0bWFwMCwgYml0bWFwMTsKLQl1MzIgcmVzcF9iaXRtYXAwID0gbGUzMl90b19jcHUoYmFfcmVzcC0+YmFfYml0bWFwMCk7Ci0JdTMyIHJlc3BfYml0bWFwMSA9IGxlMzJfdG9fY3B1KGJhX3Jlc3AtPmJhX2JpdG1hcDEpOworCXUxNiBzZXFfY3RsID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2VxX2N0bCk7CisJdTE2IHNjZF9mbG93ID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX2Zsb3cpOworCXU2NCBiaXRtYXA7CisJaW50IHN1Y2Nlc3NlcyA9IDA7CisJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1czsKIAogCWlmICh1bmxpa2VseSghYWdnLT53YWl0X2Zvcl9iYSkpICB7CiAJCUlXTF9FUlJPUigiUmVjZWl2ZWQgQkEgd2hlbiBub3QgZXhwZWN0ZWRcbiIpOwpAQCAtNDIzMCwxNyArNDIwMiwxNSBAQAogCiAJLyogTWFyayB0aGF0IHRoZSBleHBlY3RlZCBibG9jay1hY2sgcmVzcG9uc2UgYXJyaXZlZCAqLwogCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiQkEgJWQgJWRcbiIsIGFnZy0+c3RhcnRfaWR4LCBiYV9yZXNwLT5iYV9zZXFfY3RsKTsKKwlJV0xfREVCVUdfVFhfUkVQTFkoIkJBICVkICVkXG4iLCBhZ2ctPnN0YXJ0X2lkeCwgYmFfcmVzcC0+c2VxX2N0bCk7CiAKIAkvKiBDYWxjdWxhdGUgc2hpZnQgdG8gYWxpZ24gYmxvY2stYWNrIGJpdHMgd2l0aCBvdXIgVHggd2luZG93IGJpdHMgKi8KLQlzaCA9IGFnZy0+c3RhcnRfaWR4IC0gU0VRX1RPX0lOREVYKGJhX3NlcV9jdGwgPj4gNCk7CisJc2ggPSBhZ2ctPnN0YXJ0X2lkeCAtIFNFUV9UT19JTkRFWChzZXFfY3RsPj40KTsKIAlpZiAoc2ggPCAwKSAvKiB0Yncgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggaW5kaWNlcyAqLwogCQlzaCArPSAweDEwMDsKIAogCS8qIGRvbid0IHVzZSA2NC1iaXQgdmFsdWVzIGZvciBub3cgKi8KLQliaXRtYXAwID0gcmVzcF9iaXRtYXAwID4+IHNoOwotCWJpdG1hcDEgPSByZXNwX2JpdG1hcDEgPj4gc2g7Ci0JYml0bWFwMCB8PSAocmVzcF9iaXRtYXAxICYgKCgxIDw8IHNoKSB8ICgoMSA8PCBzaCkgLSAxKSkpIDw8ICgzMiAtIHNoKTsKKwliaXRtYXAgPSBsZTY0X3RvX2NwdShiYV9yZXNwLT5iaXRtYXApID4+IHNoOwogCiAJaWYgKGFnZy0+ZnJhbWVfY291bnQgPiAoNjQgLSBzaCkpIHsKIAkJSVdMX0RFQlVHX1RYX1JFUExZKCJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7CkBAIC00MjQ5LDIzICs0MjE5LDExMyBAQAogCiAJLyogY2hlY2sgZm9yIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBhY2NvcmRpbmcgdG8gdGhlCiAJICogdHJhbnNtaXR0ZWQgYml0bWFwIGFuZCBibG9jay1hY2sgYml0bWFwICovCi0JYml0bWFwMCAmPSBhZ2ctPmJpdG1hcDA7Ci0JYml0bWFwMSAmPSBhZ2ctPmJpdG1hcDE7CisJYml0bWFwICY9IGFnZy0+Yml0bWFwOwogCiAJLyogRm9yIGVhY2ggZnJhbWUgYXR0ZW1wdGVkIGluIGFnZ3JlZ2F0aW9uLAogCSAqIHVwZGF0ZSBkcml2ZXIncyByZWNvcmQgb2YgdHggZnJhbWUncyBzdGF0dXMuICovCiAJZm9yIChpID0gMDsgaSA8IGFnZy0+ZnJhbWVfY291bnQgOyBpKyspIHsKLQkJaW50IGlkeCA9IChhZ2ctPnN0YXJ0X2lkeCArIGkpICYgMHhmZjsKLQkJYWNrID0gYml0bWFwMCAmICgxIDw8IGkpOworCQlhY2sgPSBiaXRtYXAgJiAoMSA8PCBpKTsKKwkJc3VjY2Vzc2VzICs9ICEhYWNrOwogCQlJV0xfREVCVUdfVFhfUkVQTFkoIiVzIE9OIGk9JWQgaWR4PSVkIHJhdz0lZFxuIiwKLQkJCWFjaz8gIkFDSyI6Ik5BQ0siLCBpLCBpZHgsIGFnZy0+c3RhcnRfaWR4ICsgaSk7Ci0JCWl3bDQ5NjVfc2V0X3R4X3N0YXR1cyhwcml2LCBhZ2ctPnR4cV9pZCwgaWR4LCBhY2ssIDAsCi0JCQlhZ2ctPnJhdGVfbl9mbGFncyk7Ci0KKwkJCWFjaz8gIkFDSyI6Ik5BQ0siLCBpLCAoYWdnLT5zdGFydF9pZHggKyBpKSAmIDB4ZmYsCisJCQlhZ2ctPnN0YXJ0X2lkeCArIGkpOwogCX0KIAotCUlXTF9ERUJVR19UWF9SRVBMWSgiQml0bWFwICV4JXhcbiIsIGJpdG1hcDAsIGJpdG1hcDEpOworCXR4X3N0YXR1cyA9ICZwcml2LT50eHFbc2NkX2Zsb3ddLnR4YlthZ2ctPnN0YXJ0X2lkeF0uc3RhdHVzOworCXR4X3N0YXR1cy0+ZmxhZ3MgPSBJRUVFODAyMTFfVFhfU1RBVFVTX0FDSzsKKwl0eF9zdGF0dXMtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFU7CisJdHhfc3RhdHVzLT5hbXBkdV9hY2tfbWFwID0gc3VjY2Vzc2VzOworCXR4X3N0YXR1cy0+YW1wZHVfYWNrX2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7CisJaXdsNDk2NV9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LCBhZ2ctPnJhdGVfbl9mbGFncywKKwkJCQkgICAgICZ0eF9zdGF0dXMtPmNvbnRyb2wpOwogCisJSVdMX0RFQlVHX1RYX1JFUExZKCJCaXRtYXAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXdsNDk2NV90eF9xdWV1ZV9zdG9wX3NjaGVkdWxlciAtIFN0b3AgcXVldWUsIGJ1dCBrZWVwIGNvbmZpZ3VyYXRpb24KKyAqLworc3RhdGljIHZvaWQgaXdsNDk2NV90eF9xdWV1ZV9zdG9wX3NjaGVkdWxlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgICB1MTYgdHhxX2lkKQoreworCS8qIFNpbXBseSBzdG9wIHRoZSBxdWV1ZSwgYnV0IGRvbid0IGNoYW5nZSBhbnkgY29uZmlndXJhdGlvbjsKKwkgKiB0aGUgU0NEX0FDVF9FTiBiaXQgaXMgdGhlIHdyaXRlLWVuYWJsZSBtYXNrIGZvciB0aGUgQUNUSVZFIGJpdC4gKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LAorCQlJV0w0OV9TQ0RfUVVFVUVfU1RBVFVTX0JJVFModHhxX2lkKSwKKwkJKDAgPDwgU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19BQ1RJVkUpfAorCQkoMSA8PCBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1NDRF9BQ1RfRU4pKTsKK30KKworLyoqCisgKiB0eHFfaWQgbXVzdCBiZSBncmVhdGVyIHRoYW4gSVdMX0JBQ0tfUVVFVUVfRklSU1RfSUQKKyAqIHByaXYtPmxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIKKyAqLworc3RhdGljIGludCBpd2w0OTY1X3R4X3F1ZXVlX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwKKwkJCQkJdTE2IHNzbl9pZHgsIHU4IHR4X2ZpZm8pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoSVdMX0JBQ0tfUVVFVUVfRklSU1RfSUQgPiB0eHFfaWQpIHsKKwkJSVdMX1dBUk5JTkcoInF1ZXVlIG51bWJlciB0b28gc21hbGw6ICVkLCBtdXN0IGJlID4gJWRcbiIsCisJCQkJdHhxX2lkLCBJV0xfQkFDS19RVUVVRV9GSVJTVF9JRCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWl3bDQ5NjVfdHhfcXVldWVfc3RvcF9zY2hlZHVsZXIocHJpdiwgdHhxX2lkKTsKKworCWl3bF9jbGVhcl9iaXRzX3BycGgocHJpdiwgSVdMNDlfU0NEX1FVRVVFQ0hBSU5fU0VMLCAoMSA8PCB0eHFfaWQpKTsKKworCXByaXYtPnR4cVt0eHFfaWRdLnEucmVhZF9wdHIgPSAoc3NuX2lkeCAmIDB4ZmYpOworCXByaXYtPnR4cVt0eHFfaWRdLnEud3JpdGVfcHRyID0gKHNzbl9pZHggJiAweGZmKTsKKwkvKiBzdXBwb3NlcyB0aGF0IHNzbl9pZHggaXMgdmFsaWQgKCE9IDB4RkZGKSAqLworCWl3bDQ5NjVfc2V0X3dyX3B0cnMocHJpdiwgdHhxX2lkLCBzc25faWR4KTsKKworCWl3bF9jbGVhcl9iaXRzX3BycGgocHJpdiwgSVdMNDlfU0NEX0lOVEVSUlVQVF9NQVNLLCAoMSA8PCB0eHFfaWQpKTsKKwlpd2w0OTY1X3R4cV9jdHhfZGVhY3RpdmF0ZShwcml2LCB0eHFfaWQpOworCWl3bDQ5NjVfdHhfcXVldWVfc2V0X3N0YXR1cyhwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHR4X2ZpZm8sIDApOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKworCXJldHVybiAwOworfQorCitpbnQgaXdsNDk2NV9jaGVja19lbXB0eV9od19xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCisJCQkJCSB1OCB0aWQsIGludCB0eHFfaWQpCit7CisJc3RydWN0IGl3bDQ5NjVfcXVldWUgKnEgPSAmcHJpdi0+dHhxW3R4cV9pZF0ucTsKKwl1OCAqYWRkciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5hZGRyOworCXN0cnVjdCBpd2w0OTY1X3RpZF9kYXRhICp0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOworCisJc3dpdGNoIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSkgeworCWNhc2UgSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBOgorCQkvKiBXZSBhcmUgcmVjbGFpbWluZyB0aGUgbGFzdCBwYWNrZXQgb2YgdGhlICovCisJCS8qIGFnZ3JlZ2F0ZWQgSFcgcXVldWUgKi8KKwkJaWYgKHR4cV9pZCAgPT0gdGlkX2RhdGEtPmFnZy50eHFfaWQgJiYKKwkJICAgIHEtPnJlYWRfcHRyID09IHEtPndyaXRlX3B0cikgeworCQkJdTE2IHNzbiA9IFNFUV9UT19TTih0aWRfZGF0YS0+c2VxX251bWJlcik7CisJCQlpbnQgdHhfZmlmbyA9IGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm9bdGlkXTsKKwkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIERFTEJBIGZsb3dcbiIpOworCQkJaXdsNDk2NV90eF9xdWV1ZV9hZ2dfZGlzYWJsZShwcml2LCB0eHFfaWQsCisJCQkJCQkgICAgIHNzbiwgdHhfZmlmbyk7CisJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PRkY7CisJCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHByaXYtPmh3LCBhZGRyLCB0aWQpOworCQl9CisJCWJyZWFrOworCWNhc2UgSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0FEREJBOgorCQkvKiBXZSBhcmUgcmVjbGFpbWluZyB0aGUgbGFzdCBwYWNrZXQgb2YgdGhlIHF1ZXVlICovCisJCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7CisJCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGVtcHR5OiBjb250aW51ZSBBRERCQSBmbG93XG4iKTsKKwkJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09OOworCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUocHJpdi0+aHcsIGFkZHIsIHRpZCk7CisJCX0KKwkJYnJlYWs7CisJfQogCXJldHVybiAwOwogfQogCkBAIC00Mjg1LDcgKzQzNDUsNyBAQAogICogSGFuZGxlcyBibG9jay1hY2tub3dsZWRnZSBub3RpZmljYXRpb24gZnJvbSBkZXZpY2UsIHdoaWNoIHJlcG9ydHMgc3VjY2VzcwogICogb2YgZnJhbWVzIHNlbnQgdmlhIGFnZ3JlZ2F0aW9uLgogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X2NvbXByZXNzZWRfYmEoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcmVwbHlfY29tcHJlc3NlZF9iYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSAgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CkBAIC00MjkzLDQ4ICs0MzUzLDQzIEBACiAJaW50IGluZGV4OwogCXN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEgPSBOVUxMOwogCXN0cnVjdCBpd2w0OTY1X2h0X2FnZyAqYWdnOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJLyogImZsb3ciIGNvcnJlc3BvbmRzIHRvIFR4IHF1ZXVlICovCi0JdTE2IGJhX3Jlc3Bfc2NkX2Zsb3cgPSBsZTE2X3RvX2NwdShiYV9yZXNwLT5zY2RfZmxvdyk7CisJdTE2IHNjZF9mbG93ID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX2Zsb3cpOwogCiAJLyogInNzbiIgaXMgc3RhcnQgb2YgYmxvY2stYWNrIFR4IHdpbmRvdywgY29ycmVzcG9uZHMgdG8gaW5kZXgKIAkgKiAoaW4gVHggcXVldWUncyBjaXJjdWxhciBidWZmZXIpIG9mIGZpcnN0IFRGRC9mcmFtZSBpbiB3aW5kb3cgKi8KIAl1MTYgYmFfcmVzcF9zY2Rfc3NuID0gbGUxNl90b19jcHUoYmFfcmVzcC0+c2NkX3Nzbik7CiAKLQlpZiAoYmFfcmVzcF9zY2RfZmxvdyA+PSBBUlJBWV9TSVpFKHByaXYtPnR4cSkpIHsKKwlpZiAoc2NkX2Zsb3cgPj0gcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtKSB7CiAJCUlXTF9FUlJPUigiQlVHX09OIHNjZF9mbG93IGlzIGJpZ2dlciB0aGFuIG51bWJlciBvZiBxdWV1ZXMiKTsKIAkJcmV0dXJuOwogCX0KIAotCXR4cSA9ICZwcml2LT50eHFbYmFfcmVzcF9zY2RfZmxvd107CisJdHhxID0gJnByaXYtPnR4cVtzY2RfZmxvd107CiAJYWdnID0gJnByaXYtPnN0YXRpb25zW2JhX3Jlc3AtPnN0YV9pZF0udGlkW2JhX3Jlc3AtPnRpZF0uYWdnOwogCiAJLyogRmluZCBpbmRleCBqdXN0IGJlZm9yZSBibG9jay1hY2sgd2luZG93ICovCiAJaW5kZXggPSBpd2w0OTY1X3F1ZXVlX2RlY193cmFwKGJhX3Jlc3Bfc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKIAogCS8qIFRPRE86IE5lZWQgdG8gZ2V0IHRoaXMgY29weSBtb3JlIHNhZmVseSAtIG5vdyBnb29kIGZvciBkZWJ1ZyAqLwotLyoKLQl7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKIAlJV0xfREVCVUdfVFhfUkVQTFkoIlJFUExZX0NPTVBSRVNTRURfQkEgWyVkXVJlY2VpdmVkIGZyb20gJXMsICIKIAkJCSAgICJzdGFfaWQgPSAlZFxuIiwKIAkJCSAgIGFnZy0+d2FpdF9mb3JfYmEsCiAJCQkgICBwcmludF9tYWMobWFjLCAodTgqKSAmYmFfcmVzcC0+c3RhX2FkZHJfbG8zMiksCiAJCQkgICBiYV9yZXNwLT5zdGFfaWQpOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiVElEID0gJWQsIFNlcUN0bCA9ICVkLCBiaXRtYXAgPSAweCVYJVgsIHNjZF9mbG93ID0gIgorCUlXTF9ERUJVR19UWF9SRVBMWSgiVElEID0gJWQsIFNlcUN0bCA9ICVkLCBiaXRtYXAgPSAweCVsbHgsIHNjZF9mbG93ID0gIgogCQkJICAgIiVkLCBzY2Rfc3NuID0gJWRcbiIsCiAJCQkgICBiYV9yZXNwLT50aWQsCi0JCQkgICBiYV9yZXNwLT5iYV9zZXFfY3RsLAotCQkJICAgYmFfcmVzcC0+YmFfYml0bWFwMSwKLQkJCSAgIGJhX3Jlc3AtPmJhX2JpdG1hcDAsCisJCQkgICBiYV9yZXNwLT5zZXFfY3RsLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShiYV9yZXNwLT5iaXRtYXApLAogCQkJICAgYmFfcmVzcC0+c2NkX2Zsb3csCiAJCQkgICBiYV9yZXNwLT5zY2Rfc3NuKTsKLQlJV0xfREVCVUdfVFhfUkVQTFkoIkRBVCBzdGFydF9pZHggPSAlZCwgYml0bWFwID0gMHglWCVYIFxuIiwKKwlJV0xfREVCVUdfVFhfUkVQTFkoIkRBVCBzdGFydF9pZHggPSAlZCwgYml0bWFwID0gMHglbGx4IFxuIiwKIAkJCSAgIGFnZy0+c3RhcnRfaWR4LAotCQkJICAgYWdnLT5iaXRtYXAxLAotCQkJICAgYWdnLT5iaXRtYXAwKTsKLQl9Ci0qLworCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZ2ctPmJpdG1hcCk7CiAKIAkvKiBVcGRhdGUgZHJpdmVyJ3MgcmVjb3JkIG9mIEFDSyB2cy4gbm90IGZvciBlYWNoIGZyYW1lIGluIHdpbmRvdyAqLwogCWl3bDQ5NjVfdHhfc3RhdHVzX3JlcGx5X2NvbXByZXNzZWRfYmEocHJpdiwgYWdnLCBiYV9yZXNwKTsKQEAgLTQzNDIsMjkgKzQzOTcsMjMgQEAKIAkvKiBSZWxlYXNlIGFsbCBURkRzIGJlZm9yZSB0aGUgU1NOLCBpLmUuIGFsbCBURkRzIGluIGZyb250IG9mCiAJICogYmxvY2stYWNrIHdpbmRvdyAod2UgYXNzdW1lIHRoYXQgdGhleSd2ZSBiZWVuIHN1Y2Nlc3NmdWxseQogCSAqIHRyYW5zbWl0dGVkIC4uLiBpZiBub3QsIGl0J3MgdG9vIGxhdGUgYW55d2F5KS4gKi8KLQlpZiAodHhxLT5xLnJlYWRfcHRyICE9IChiYV9yZXNwX3NjZF9zc24gJiAweGZmKSkKLQkJaXdsNDk2NV90eF9xdWV1ZV9yZWNsYWltKHByaXYsIGJhX3Jlc3Bfc2NkX2Zsb3csIGluZGV4KTsKLQotfQotCi0KLS8qKgotICogaXdsNDk2NV90eF9xdWV1ZV9zdG9wX3NjaGVkdWxlciAtIFN0b3AgcXVldWUsIGJ1dCBrZWVwIGNvbmZpZ3VyYXRpb24KLSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV90eF9xdWV1ZV9zdG9wX3NjaGVkdWxlcihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1MTYgdHhxX2lkKQotewotCS8qIFNpbXBseSBzdG9wIHRoZSBxdWV1ZSwgYnV0IGRvbid0IGNoYW5nZSBhbnkgY29uZmlndXJhdGlvbjsKLQkgKiB0aGUgU0NEX0FDVF9FTiBiaXQgaXMgdGhlIHdyaXRlLWVuYWJsZSBtYXNrIGZvciB0aGUgQUNUSVZFIGJpdC4gKi8KLQlpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwKLQkJS0RSX1NDRF9RVUVVRV9TVEFUVVNfQklUUyh0eHFfaWQpLAotCQkoMCA8PCBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX0FDVElWRSl8Ci0JCSgxIDw8IFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDVF9FTikpOworCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKGJhX3Jlc3Bfc2NkX3NzbiAmIDB4ZmYpKSB7CisJCWludCBmcmVlZCA9IGl3bDQ5NjVfdHhfcXVldWVfcmVjbGFpbShwcml2LCBzY2RfZmxvdywgaW5kZXgpOworCQlwcml2LT5zdGF0aW9uc1tiYV9yZXNwLT5zdGFfaWRdLgorCQkJdGlkW2JhX3Jlc3AtPnRpZF0udGZkc19pbl9xdWV1ZSAtPSBmcmVlZDsKKwkJaWYgKGl3bDQ5NjVfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmsgJiYKKwkJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKKwkJCWFnZy0+c3RhdGUgIT0gSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBKQorCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHNjZF9mbG93KTsKKwkJaXdsNDk2NV9jaGVja19lbXB0eV9od19xdWV1ZShwcml2LCBiYV9yZXNwLT5zdGFfaWQsCisJCQliYV9yZXNwLT50aWQsIHNjZF9mbG93KTsKKwl9CiB9CiAKIC8qKgogICogaXdsNDk2NV90eF9xdWV1ZV9zZXRfcTJyYXRpZCAtIE1hcCB1bmlxdWUgcmVjZWl2ZXIvdGlkIGNvbWJpbmF0aW9uIHRvIGEgcXVldWUKICAqLwotc3RhdGljIGludCBpd2w0OTY1X3R4X3F1ZXVlX3NldF9xMnJhdGlkKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUxNiByYV90aWQsCitzdGF0aWMgaW50IGl3bDQ5NjVfdHhfcXVldWVfc2V0X3EycmF0aWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgcmFfdGlkLAogCQkJCQl1MTYgdHhxX2lkKQogewogCXUzMiB0YmxfZHdfYWRkcjsKQEAgLTQzNzYsMjUgKzQ0MjUsMjYgQEAKIAl0YmxfZHdfYWRkciA9IHByaXYtPnNjZF9iYXNlX2FkZHIgKwogCQkJU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUX1FVRVVFKHR4cV9pZCk7CiAKLQl0YmxfZHcgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgdGJsX2R3X2FkZHIpOworCXRibF9kdyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHRibF9kd19hZGRyKTsKIAogCWlmICh0eHFfaWQgJiAweDEpCiAJCXRibF9kdyA9IChzY2RfcTJyYXRpZCA8PCAxNikgfCAodGJsX2R3ICYgMHgwMDAwRkZGRik7CiAJZWxzZQogCQl0YmxfZHcgPSBzY2RfcTJyYXRpZCB8ICh0YmxfZHcgJiAweEZGRkYwMDAwKTsKIAotCWl3bDQ5NjVfd3JpdGVfdGFyZ19tZW0ocHJpdiwgdGJsX2R3X2FkZHIsIHRibF9kdyk7CisJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIHRibF9kd19hZGRyLCB0YmxfZHcpOwogCiAJcmV0dXJuIDA7CiB9CiAKKwogLyoqCiAgKiBpd2w0OTY1X3R4X3F1ZXVlX2FnZ19lbmFibGUgLSBTZXQgdXAgJiBlbmFibGUgYWdncmVnYXRpb24gZm9yIHNlbGVjdGVkIHF1ZXVlCiAgKgogICogTk9URTogIHR4cV9pZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBJV0xfQkFDS19RVUVVRV9GSVJTVF9JRCwKICAqICAgICAgICBpLmUuIGl0IG11c3QgYmUgb25lIG9mIHRoZSBoaWdoZXIgcXVldWVzIHVzZWQgZm9yIGFnZ3JlZ2F0aW9uCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9xdWV1ZV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCB0eHFfaWQsCitzdGF0aWMgaW50IGl3bDQ5NjVfdHhfcXVldWVfYWdnX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsCiAJCQkJICAgICAgIGludCB0eF9maWZvLCBpbnQgc3RhX2lkLCBpbnQgdGlkLAogCQkJCSAgICAgICB1MTYgc3NuX2lkeCkKIHsKQEAgLTQ0MTIsNyArNDQ2Miw3IEBACiAJaXdsNDk2NV9zdGFfbW9kaWZ5X2VuYWJsZV90aWRfdHgocHJpdiwgc3RhX2lkLCB0aWQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CkBAIC00NDI1LDcgKzQ0NzUsNyBAQAogCWl3bDQ5NjVfdHhfcXVldWVfc2V0X3EycmF0aWQocHJpdiwgcmFfdGlkLCB0eHFfaWQpOwogCiAJLyogU2V0IHRoaXMgcXVldWUgYXMgYSBjaGFpbi1idWlsZGluZyBxdWV1ZSAqLwotCWl3bDQ5NjVfc2V0X2JpdHNfcHJwaChwcml2LCBLRFJfU0NEX1FVRVVFQ0hBSU5fU0VMLCAoMSA8PCB0eHFfaWQpKTsKKwlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBJV0w0OV9TQ0RfUVVFVUVDSEFJTl9TRUwsICgxIDw8IHR4cV9pZCkpOwogCiAJLyogUGxhY2UgZmlyc3QgVEZEIGF0IGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gc3RhcnQgc2VxdWVuY2UgbnVtYmVyLgogCSAqIEFzc3VtZXMgdGhhdCBzc25faWR4IGlzIHZhbGlkICghPSAweEZGRikgKi8KQEAgLTQ0MzQsNjkgKzQ0ODQsMjcgQEAKIAlpd2w0OTY1X3NldF93cl9wdHJzKHByaXYsIHR4cV9pZCwgc3NuX2lkeCk7CiAKIAkvKiBTZXQgdXAgVHggd2luZG93IHNpemUgYW5kIGZyYW1lIGxpbWl0IGZvciB0aGlzIHF1ZXVlICovCi0JaXdsNDk2NV93cml0ZV90YXJnX21lbShwcml2LAorCWl3bF93cml0ZV90YXJnX21lbShwcml2LAogCQkJcHJpdi0+c2NkX2Jhc2VfYWRkciArIFNDRF9DT05URVhUX1FVRVVFX09GRlNFVCh0eHFfaWQpLAogCQkJKFNDRF9XSU5fU0laRSA8PCBTQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfUE9TKSAmCiAJCQlTQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfTVNLKTsKIAotCWl3bDQ5NjVfd3JpdGVfdGFyZ19tZW0ocHJpdiwgcHJpdi0+c2NkX2Jhc2VfYWRkciArCisJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIHByaXYtPnNjZF9iYXNlX2FkZHIgKwogCQkJU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKHR4cV9pZCkgKyBzaXplb2YodTMyKSwKIAkJCShTQ0RfRlJBTUVfTElNSVQgPDwgU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX1BPUykKIAkJCSYgU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX01TSyk7CiAKLQlpd2w0OTY1X3NldF9iaXRzX3BycGgocHJpdiwgS0RSX1NDRF9JTlRFUlJVUFRfTUFTSywgKDEgPDwgdHhxX2lkKSk7CisJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgSVdMNDlfU0NEX0lOVEVSUlVQVF9NQVNLLCAoMSA8PCB0eHFfaWQpKTsKIAogCS8qIFNldCB1cCBTdGF0dXMgYXJlYSBpbiBTUkFNLCBtYXAgdG8gVHggRE1BL0ZJRk8sIGFjdGl2YXRlIHRoZSBxdWV1ZSAqLwogCWl3bDQ5NjVfdHhfcXVldWVfc2V0X3N0YXR1cyhwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHR4X2ZpZm8sIDEpOwogCi0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiB0eHFfaWQgbXVzdCBiZSBncmVhdGVyIHRoYW4gSVdMX0JBQ0tfUVVFVUVfRklSU1RfSUQKLSAqLwotc3RhdGljIGludCBpd2w0OTY1X3R4X3F1ZXVlX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUxNiB0eHFfaWQsCi0JCQkJCXUxNiBzc25faWR4LCB1OCB0eF9maWZvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwotCi0JaWYgKElXTF9CQUNLX1FVRVVFX0ZJUlNUX0lEID4gdHhxX2lkKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgdG9vIHNtYWxsOiAlZCwgbXVzdCBiZSA+ICVkXG4iLAotCQkJCXR4cV9pZCwgSVdMX0JBQ0tfUVVFVUVfRklSU1RfSUQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsNDk2NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWl3bDQ5NjVfdHhfcXVldWVfc3RvcF9zY2hlZHVsZXIocHJpdiwgdHhxX2lkKTsKLQotCWl3bDQ5NjVfY2xlYXJfYml0c19wcnBoKHByaXYsIEtEUl9TQ0RfUVVFVUVDSEFJTl9TRUwsICgxIDw8IHR4cV9pZCkpOwotCi0JcHJpdi0+dHhxW3R4cV9pZF0ucS5yZWFkX3B0ciA9IChzc25faWR4ICYgMHhmZik7Ci0JcHJpdi0+dHhxW3R4cV9pZF0ucS53cml0ZV9wdHIgPSAoc3NuX2lkeCAmIDB4ZmYpOwotCS8qIHN1cHBvc2VzIHRoYXQgc3NuX2lkeCBpcyB2YWxpZCAoIT0gMHhGRkYpICovCi0JaXdsNDk2NV9zZXRfd3JfcHRycyhwcml2LCB0eHFfaWQsIHNzbl9pZHgpOwotCi0JaXdsNDk2NV9jbGVhcl9iaXRzX3BycGgocHJpdiwgS0RSX1NDRF9JTlRFUlJVUFRfTUFTSywgKDEgPDwgdHhxX2lkKSk7Ci0JaXdsNDk2NV90eHFfY3R4X2RlYWN0aXZhdGUocHJpdiwgdHhxX2lkKTsKLQlpd2w0OTY1X3R4X3F1ZXVlX3NldF9zdGF0dXMocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdLCB0eF9maWZvLCAwKTsKLQotCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYvKiBDT05GSUdfSVdMNDk2NV9IVF9BR0cgKi8KICNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwogCiAvKioKQEAgLTQ1MTMsMTAgKzQ1MjEsMTAgQEAKICAqICAgICAgIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAod2hpY2ggcnVucyBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAogICogICAgICAgd2hpY2ggcmVxdWlyZXMgc3RhdGlvbiB0YWJsZSBlbnRyeSB0byBleGlzdCkuCiAgKi8KLXZvaWQgaXdsNDk2NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQordm9pZCBpd2w0OTY1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCkKIHsKIAlpbnQgaSwgcjsKLQlzdHJ1Y3QgaXdsNDk2NV9saW5rX3F1YWxpdHlfY21kIGxpbmtfY21kID0geworCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCBsaW5rX2NtZCA9IHsKIAkJLnJlc2VydmVkMSA9IDAsCiAJfTsKIAl1MTYgcmF0ZV9mbGFnczsKQEAgLTQ1MjUsNyArNDUzMyw3IEBACiAJICogYWxsIHRoZSB3YXkgZG93biB0byAxTSBpbiBJRUVFIG9yZGVyLCBhbmQgdGhlbiBzcGluIG9uIDFNICovCiAJaWYgKGlzX2FwKQogCQlyID0gSVdMX1JBVEVfNTRNX0lOREVYOwotCWVsc2UgaWYgKHByaXYtPnBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFBKQorCWVsc2UgaWYgKHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJciA9IElXTF9SQVRFXzZNX0lOREVYOwogCWVsc2UKIAkJciA9IElXTF9SQVRFXzFNX0lOREVYOwpAQCAtNDU1MCwyNCArNDU1OCwyNSBAQAogCWxpbmtfY21kLmFnZ19wYXJhbXMuYWdnX3RpbWVfbGltaXQgPSBjcHVfdG9fbGUxNig0MDAwKTsKIAogCS8qIFVwZGF0ZSB0aGUgcmF0ZSBzY2FsaW5nIGZvciBjb250cm9sIGZyYW1lIFR4IHRvIEFQICovCi0JbGlua19jbWQuc3RhX2lkID0gaXNfYXAgPyBJV0xfQVBfSUQgOiBJV0w0OTY1X0JST0FEQ0FTVF9JRDsKKwlsaW5rX2NtZC5zdGFfaWQgPSBpc19hcCA/IElXTF9BUF9JRCA6IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAKLQlpd2w0OTY1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELCBzaXplb2YobGlua19jbWQpLAotCQkJICZsaW5rX2NtZCk7CisJaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAorCQkJICAgICAgIHNpemVvZihsaW5rX2NtZCksICZsaW5rX2NtZCwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCi1zdGF0aWMgdTggaXdsNDk2NV9pc19jaGFubmVsX2V4dGVuc2lvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgcGh5bW9kZSwKLQkJCQkgICB1MTYgY2hhbm5lbCwgdTggZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0KQorc3RhdGljIHU4IGl3bDQ5NjVfaXNfY2hhbm5lbF9leHRlbnNpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICAgICAgIHUxNiBjaGFubmVsLCB1OCBleHRlbnNpb25fY2hhbl9vZmZzZXQpCiB7Ci0JY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCi0JY2hfaW5mbyA9IGl3bDQ5NjVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwaHltb2RlLCBjaGFubmVsKTsKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCk7CiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKQogCQlyZXR1cm4gMDsKIAotCWlmIChleHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9BVVRPKQorCWlmIChleHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9OT05FKQogCQlyZXR1cm4gMDsKIAogCWlmICgoY2hfaW5mby0+ZmF0X2V4dGVuc2lvbl9jaGFubmVsID09IGV4dGVuc2lvbl9jaGFuX29mZnNldCkgfHwKQEAgLTQ1NzcsMjggKzQ1ODYsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHU4IGl3bDQ5NjVfaXNfZmF0X3R4X2FsbG93ZWQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB1OCBpd2w0OTY1X2lzX2ZhdF90eF9hbGxvd2VkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKnN0YV9odF9pbmYpCiB7CiAJc3RydWN0IGl3bF9odF9pbmZvICppd2xfaHRfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKIAogCWlmICgoIWl3bF9odF9jb25mLT5pc19odCkgfHwKIAkgICAoaXdsX2h0X2NvbmYtPnN1cHBvcnRlZF9jaGFuX3dpZHRoICE9IElXTF9DSEFOTkVMX1dJRFRIXzQwTUhaKSB8fAotCSAgIChpd2xfaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID09IElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQVVUTykpCisJICAgKGl3bF9odF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9OT05FKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoc3RhX2h0X2luZikgewogCQlpZiAoKCFzdGFfaHRfaW5mLT5odF9zdXBwb3J0ZWQpIHx8Ci0JCSAgICghc3RhX2h0X2luZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEgpKQorCQkgICAoIShzdGFfaHRfaW5mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSCkpKQogCQkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIChpd2w0OTY1X2lzX2NoYW5uZWxfZXh0ZW5zaW9uKHByaXYsIHByaXYtPnBoeW1vZGUsCisJcmV0dXJuIChpd2w0OTY1X2lzX2NoYW5uZWxfZXh0ZW5zaW9uKHByaXYsIHByaXYtPmJhbmQsCiAJCQkJCSBpd2xfaHRfY29uZi0+Y29udHJvbF9jaGFubmVsLAogCQkJCQkgaXdsX2h0X2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCkpOwogfQogCi12b2lkIGl3bDQ5NjVfc2V0X3J4b25faHQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKQordm9pZCBpd2w0OTY1X3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKQogewogCXN0cnVjdCBpd2w0OTY1X3J4b25fY21kICpyeG9uID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKIAl1MzIgdmFsOwpAQCAtNDYyOSw5ICs0NjM4LDcgQEAKIAljYXNlIElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQkVMT1c6CiAJCXJ4b24tPmZsYWdzIHw9IFJYT05fRkxHX0NUUkxfQ0hBTk5FTF9MT0NfSElfTVNLOwogCQlicmVhazsKLQljYXNlIElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQVVUTzoKLQkJcnhvbi0+ZmxhZ3MgJj0gflJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0s7Ci0JCWJyZWFrOworCWNhc2UgSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9OT05FOgogCWRlZmF1bHQ6CiAJCXJ4b24tPmZsYWdzICY9IH5SWE9OX0ZMR19DSEFOTkVMX01PREVfTUlYRURfTVNLOwogCQlicmVhazsKQEAgLTQ2NTQsNyArNDY2MSw3IEBACiAJcmV0dXJuOwogfQogCi12b2lkIGl3bDQ5NjVfc2V0X2h0X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IGluZGV4LAordm9pZCBpd2w0OTY1X3NldF9odF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGluZGV4LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqc3RhX2h0X2luZikKIHsKIAlfX2xlMzIgc3RhX2ZsYWdzOwpAQCAtNDY5OSw3ICs0NzA2LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc3RhX21vZGlmeV9hZGRfYmFfdGlkKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3N0YV9tb2RpZnlfYWRkX2JhX3RpZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSAgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDcxNSw3ICs0NzIyLDcgQEAKIAlpd2w0OTY1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCBDTURfQVNZTkMpOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3N0YV9tb2RpZnlfZGVsX2JhX3RpZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9zdGFfbW9kaWZ5X2RlbF9iYV90aWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgIGludCBzdGFfaWQsIGludCB0aWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ3MzAsMTM2ICs0NzM3LDk0IEBACiAJaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKIH0KIAotaW50IGl3bDQ5NjVfbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAotCQkJICAgICBjb25zdCB1OCAqYWRkciwgdTE2IHRpZCwgdTE2IHNzbikKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHN0YV9pZDsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCUlXTF9ERUJVR19IVCgiQS1NUERVIGFjdGlvbiBvbiBkYT0lcyB0aWQ9JWQgIiwKLQkJCXByaW50X21hYyhtYWMsIGFkZHIpLCB0aWQpOwotCXN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6Ci0JCUlXTF9ERUJVR19IVCgic3RhcnQgUnhcbiIpOwotCQlpd2w0OTY1X3N0YV9tb2RpZnlfYWRkX2JhX3RpZChwcml2LCBzdGFfaWQsIHRpZCwgc3NuKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKLQkJSVdMX0RFQlVHX0hUKCJzdG9wIFJ4XG4iKTsKLQkJaXdsNDk2NV9zdGFfbW9kaWZ5X2RlbF9iYV90aWQocHJpdiwgc3RhX2lkLCB0aWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfREVCVUdfSFQoInVua25vd25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFRfQUdHCi0KLXN0YXRpYyBjb25zdCB1MTYgZGVmYXVsdF90aWRfdG9fdHhfZmlmb1tdID0gewotCUlXTF9UWF9GSUZPX0FDMSwKLQlJV0xfVFhfRklGT19BQzAsCi0JSVdMX1RYX0ZJRk9fQUMwLAotCUlXTF9UWF9GSUZPX0FDMSwKLQlJV0xfVFhfRklGT19BQzIsCi0JSVdMX1RYX0ZJRk9fQUMyLAotCUlXTF9UWF9GSUZPX0FDMywKLQlJV0xfVFhfRklGT19BQzMsCi0JSVdMX1RYX0ZJRk9fTk9ORSwKLQlJV0xfVFhfRklGT19OT05FLAotCUlXTF9UWF9GSUZPX05PTkUsCi0JSVdMX1RYX0ZJRk9fTk9ORSwKLQlJV0xfVFhfRklGT19OT05FLAotCUlXTF9UWF9GSUZPX05PTkUsCi0JSVdMX1RYX0ZJRk9fTk9ORSwKLQlJV0xfVFhfRklGT19OT05FLAotCUlXTF9UWF9GSUZPX0FDMwotfTsKLQogLyoKICAqIEZpbmQgZmlyc3QgYXZhaWxhYmxlIChsb3dlc3QgdW51c2VkKSBUeCBRdWV1ZSwgbWFyayBpdCAiYWN0aXZlIi4KICAqIENhbGxlZCBvbmx5IHdoZW4gZmluZGluZyBxdWV1ZSBmb3IgYWdncmVnYXRpb24uCiAgKiBTaG91bGQgbmV2ZXIgcmV0dXJuIGFueXRoaW5nIDwgNywgYmVjYXVzZSB0aGV5IHNob3VsZCBhbHJlYWR5CiAgKiBiZSBpbiB1c2UgYXMgRURDQSBBQyAoMC0zKSwgQ29tbWFuZCAoNCksIEhDQ0EgKDUsIDYpLgogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdHhxX2N0eF9hY3RpdmF0ZV9mcmVlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfdHhxX2N0eF9hY3RpdmF0ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgdHhxX2lkOwogCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19zZXR0aW5nLm1heF90eHFfbnVtOyB0eHFfaWQrKykKKwlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspCiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdCh0eHFfaWQsICZwcml2LT50eHFfY3R4X2FjdGl2ZV9tc2spKQogCQkJcmV0dXJuIHR4cV9pZDsKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBpd2w0OTY1X21hY19odF90eF9hZ2dfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpkYSwgdTE2IHRpZCwKLQkJCSAgICB1MTYgKnN0YXJ0X3NlcV9udW0pCitzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX2h0X3R4X2FnZ19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmRhLAorCQkJCSAgICAgICB1MTYgdGlkLCB1MTYgKnN0YXJ0X3NlcV9udW0pCiB7Ci0KLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHN0YV9pZDsKIAlpbnQgdHhfZmlmbzsKIAlpbnQgdHhxX2lkOwogCWludCBzc24gPSAtMTsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpd2w0OTY1X3RpZF9kYXRhICp0aWRfZGF0YTsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotCS8qIERldGVybWluZSBUeCBETUEvRklGTyBjaGFubmVsIGZvciB0aGlzIFRyYWZmaWMgSUQgKi8KIAlpZiAobGlrZWx5KHRpZCA8IEFSUkFZX1NJWkUoZGVmYXVsdF90aWRfdG9fdHhfZmlmbykpKQogCQl0eF9maWZvID0gZGVmYXVsdF90aWRfdG9fdHhfZmlmb1t0aWRdOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlJV0xfV0FSTklORygiaXdsLUFHRyBpd2w0OTY1X21hY19odF90eF9hZ2dfc3RhcnQgb24gZGE9JXMiCi0JCSAgICAiIHRpZD0lZFxuIiwgcHJpbnRfbWFjKG1hYywgZGEpLCB0aWQpOworCUlXTF9XQVJOSU5HKCIlcyBvbiBkYSA9ICVzIHRpZCA9ICVkXG4iLAorCQkJX19mdW5jX18sIHByaW50X21hYyhtYWMsIGRhKSwgdGlkKTsKIAotCS8qIEdldCBpbmRleCBpbnRvIHN0YXRpb24gdGFibGUgKi8KIAlzdGFfaWQgPSBpd2w0OTY1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBkYSk7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQlyZXR1cm4gLUVOWElPOwogCi0JLyogRmluZCBhdmFpbGFibGUgVHggcXVldWUgZm9yIGFnZ3JlZ2F0aW9uICovCisJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnN0YXRlICE9IElXTF9BR0dfT0ZGKSB7CisJCUlXTF9FUlJPUigiU3RhcnQgQUdHIHdoZW4gc3RhdGUgaXMgbm90IElXTF9BR0dfT0ZGICFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwogCXR4cV9pZCA9IGl3bDQ5NjVfdHhxX2N0eF9hY3RpdmF0ZV9mcmVlKHByaXYpOwogCWlmICh0eHFfaWQgPT0gLTEpCiAJCXJldHVybiAtRU5YSU87CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOwotCi0JLyogR2V0IHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciBmb3IgMXN0IGZyYW1lIGluIGJsb2NrIGFjayB3aW5kb3cuCi0JICogV2UnbGwgdXNlIGxlYXN0IHNpZ25pZiBieXRlIGFzIDFzdCBmcmFtZSdzIGluZGV4IGludG8gVHggcXVldWUuICovCiAJc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKIAl0aWRfZGF0YS0+YWdnLnR4cV9pZCA9IHR4cV9pZDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJKnN0YXJ0X3NlcV9udW0gPSBzc247CisJcmV0ID0gaXdsNDk2NV90eF9xdWV1ZV9hZ2dfZW5hYmxlKHByaXYsIHR4cV9pZCwgdHhfZmlmbywKKwkJCQkJICBzdGFfaWQsIHRpZCwgc3NuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JLyogVXBkYXRlIGRyaXZlcidzIGxpbmsgcXVhbGl0eSBtYW5hZ2VyICovCi0JaXdsNDk2NV9iYV9zdGF0dXMocHJpdiwgdGlkLCBCQV9TVEFUVVNfQUNUSVZFKTsKLQotCS8qIFNldCB1cCBhbmQgZW5hYmxlIGFnZ3JlZ2F0aW9uIGZvciBzZWxlY3RlZCBUeCBxdWV1ZSBhbmQgRklGTyAqLwotCXJldHVybiBpd2w0OTY1X3R4X3F1ZXVlX2FnZ19lbmFibGUocHJpdiwgdHhxX2lkLCB0eF9maWZvLAotCQkJCQkgICBzdGFfaWQsIHRpZCwgc3NuKTsKKwlyZXQgPSAwOworCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSFcgcXVldWUgaXMgZW1wdHlcbiIpOworCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PTjsKKwkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoaHcsIGRhLCB0aWQpOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgaXMgTk9UIGVtcHR5OiAlZCBwYWNrZXRzIGluIEhXIHF1ZXVlXG4iLAorCQkJCXRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlKTsKKwkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAotCi1pbnQgaXdsNDk2NV9tYWNfaHRfdHhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpkYSwgdTE2IHRpZCwKLQkJCSAgIGludCBnZW5lcmF0b3IpCitzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX2h0X3R4X2FnZ19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqZGEsCisJCQkJICAgICAgdTE2IHRpZCkKIHsKIAotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgdHhfZmlmb19pZCwgdHhxX2lkLCBzdGFfaWQsIHNzbiA9IC0xOwogCXN0cnVjdCBpd2w0OTY1X3RpZF9kYXRhICp0aWRfZGF0YTsKLQlpbnQgcmM7CisJaW50IHJldCwgd3JpdGVfcHRyLCByZWFkX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWYgKCFkYSkgewotCQlJV0xfRVJST1IoIiVzOiBkYSA9IE5VTExcbiIsIF9fZnVuY19fKTsKKwkJSVdMX0VSUk9SKCJkYSA9IE5VTExcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ4NzMsMzEgKzQ4MzgsODIgQEAKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCXJldHVybiAtRU5YSU87CiAKKwlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PTikKKwkJSVdMX1dBUk5JTkcoIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgSVdMX0FHR19PTlxuIik7CisKIAl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOwogCXNzbiA9ICh0aWRfZGF0YS0+c2VxX251bWJlciAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKIAl0eHFfaWQgPSB0aWRfZGF0YS0+YWdnLnR4cV9pZDsKKwl3cml0ZV9wdHIgPSBwcml2LT50eHFbdHhxX2lkXS5xLndyaXRlX3B0cjsKKwlyZWFkX3B0ciA9IHByaXYtPnR4cVt0eHFfaWRdLnEucmVhZF9wdHI7CiAKLQlyYyA9IGl3bDQ5NjVfdHhfcXVldWVfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sIHR4X2ZpZm9faWQpOwotCS8qIEZJWE1FOiBuZWVkIG1vcmUgc2FmZSB3YXkgdG8gaGFuZGxlIGVycm9yIGNvbmRpdGlvbiAqLwotCWlmIChyYykKLQkJcmV0dXJuIHJjOworCS8qIFRoZSBxdWV1ZSBpcyBub3QgZW1wdHkgKi8KKwlpZiAod3JpdGVfcHRyICE9IHJlYWRfcHRyKSB7CisJCUlXTF9ERUJVR19IVCgiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPQorCQkJCUlXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQTsKKwkJcmV0dXJuIDA7CisJfQogCi0JaXdsNDk2NV9iYV9zdGF0dXMocHJpdiwgdGlkLCBCQV9TVEFUVVNfSU5JVElBVE9SX0RFTEJBKTsKKwlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGVtcHR5XG4iKTs7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gaXdsNDk2NV90eF9xdWV1ZV9hZ2dfZGlzYWJsZShwcml2LCB0eHFfaWQsIHNzbiwgdHhfZmlmb19pZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUocHJpdi0+aHcsIGRhLCB0aWQpOworCiAJSVdMX0RFQlVHX0lORk8oIml3bDQ5NjVfbWFjX2h0X3R4X2FnZ19zdG9wIG9uIGRhPSVzIHRpZD0lZFxuIiwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIGRhKSwgdGlkKTsKKwkJCXByaW50X21hYyhtYWMsIGRhKSwgdGlkKTsKIAogCXJldHVybiAwOwogfQogCitpbnQgaXdsNDk2NV9tYWNfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCisJCQkgICAgIGNvbnN0IHU4ICphZGRyLCB1MTYgdGlkLCB1MTYgKnNzbikKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgc3RhX2lkOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCisJSVdMX0RFQlVHX0hUKCJBLU1QRFUgYWN0aW9uIG9uIGRhPSVzIHRpZD0lZCAiLAorCQkJcHJpbnRfbWFjKG1hYywgYWRkciksIHRpZCk7CisJc3RhX2lkID0gaXdsNDk2NV9od19maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKKwkJSVdMX0RFQlVHX0hUKCJzdGFydCBSeFxuIik7CisJCWl3bDQ5NjVfc3RhX21vZGlmeV9hZGRfYmFfdGlkKHByaXYsIHN0YV9pZCwgdGlkLCAqc3NuKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKKwkJSVdMX0RFQlVHX0hUKCJzdG9wIFJ4XG4iKTsKKwkJaXdsNDk2NV9zdGFfbW9kaWZ5X2RlbF9iYV90aWQocHJpdiwgc3RhX2lkLCB0aWQpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKKwkJSVdMX0RFQlVHX0hUKCJzdGFydCBUeFxuIik7CisJCXJldHVybiBpd2w0OTY1X21hY19odF90eF9hZ2dfc3RhcnQoaHcsIGFkZHIsIHRpZCwgc3NuKTsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgorCQlJV0xfREVCVUdfSFQoInN0b3AgVHhcbiIpOworCQlyZXR1cm4gaXdsNDk2NV9tYWNfaHRfdHhfYWdnX3N0b3AoaHcsIGFkZHIsIHRpZCk7CisJZGVmYXVsdDoKKwkJSVdMX0RFQlVHX0hUKCJ1bmtub3duXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAKIC8qIFNldCB1cCA0OTY1LXNwZWNpZmljIFJ4IGZyYW1lIHJlcGx5IGhhbmRsZXJzICovCi12b2lkIGl3bDQ5NjVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQordm9pZCBpd2w0OTY1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIExlZ2FjeSBSeCBmcmFtZXMgKi8KLQlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV80OTY1X1JYXSA9IGl3bDQ5NjVfcnhfcmVwbHlfcng7CisJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfUlhdID0gaXdsNDk2NV9yeF9yZXBseV9yeDsKIAogCS8qIEhpZ2gtdGhyb3VnaHB1dCAoSFQpIFJ4IGZyYW1lcyAqLwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1JYX1BIWV9DTURdID0gaXdsNDk2NV9yeF9yZXBseV9yeF9waHk7CkBAIC00OTA3LDcxICs0OTIzLDg1IEBACiAJICAgIGl3bDQ5NjVfcnhfbWlzc2VkX2JlYWNvbl9ub3RpZjsKIAogI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFRfQUdHCiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfQ09NUFJFU1NFRF9CQV0gPSBpd2w0OTY1X3J4X3JlcGx5X2NvbXByZXNzZWRfYmE7Ci0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCiAjZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KIH0KIAotdm9pZCBpd2w0OTY1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNDk2NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlJTklUX1dPUksoJnByaXYtPnR4cG93ZXJfd29yaywgaXdsNDk2NV9iZ190eHBvd2VyX3dvcmspOwotCUlOSVRfV09SSygmcHJpdi0+c3RhdGlzdGljc193b3JrLCBpd2w0OTY1X2JnX3N0YXRpc3RpY3Nfd29yayk7CiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkKIAlJTklUX1dPUksoJnByaXYtPnNlbnNpdGl2aXR5X3dvcmssIGl3bDQ5NjVfYmdfc2Vuc2l0aXZpdHlfd29yayk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotCUlOSVRfV09SSygmcHJpdi0+YWdnX3dvcmssIGl3bDQ5NjVfYmdfYWdnX3dvcmspOwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUX0FHRyAqLwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAJaW5pdF90aW1lcigmcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYyk7CiAJcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKIAlwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljLmZ1bmN0aW9uID0gaXdsNDk2NV9iZ19zdGF0aXN0aWNzX3BlcmlvZGljOwogfQogCi12b2lkIGl3bDQ5NjVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNDk2NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCk7CiB9CiAKLXN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDQ5NjVfaHdfY2FyZF9pZHNbXSA9IHsKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDQyMjkpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDQyMzApfSwKLQl7MH0KKworc3RhdGljIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsNDk2NV9oY21kID0geworCS5yeG9uX2Fzc29jID0gaXdsNDk2NV9zZW5kX3J4b25fYXNzb2MsCiB9OwogCi0vKgotICogVGhlIGRldmljZSdzIEVFUFJPTSBzZW1hcGhvcmUgcHJldmVudHMgY29uZmxpY3RzIGJldHdlZW4gZHJpdmVyIGFuZCB1Q29kZQotICogd2hlbiBhY2Nlc3NpbmcgdGhlIEVFUFJPTTsgZWFjaCBhY2Nlc3MgaXMgYSBzZXJpZXMgb2YgcHVsc2VzIHRvL2Zyb20gdGhlCi0gKiBFRVBST00gY2hpcCwgbm90IGEgc2luZ2xlIGV2ZW50LCBzbyBldmVuIHJlYWRzIGNvdWxkIGNvbmZsaWN0IGlmIHRoZXkKLSAqIHdlcmVuJ3QgYXJiaXRyYXRlZCBieSB0aGUgc2VtYXBob3JlLgotICovCi1pbnQgaXdsNDk2NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQl1MTYgY291bnQ7Ci0JaW50IHJjOworc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNDk2NV9oY21kX3V0aWxzID0geworCS5lbnF1ZXVlX2hjbWQgPSBpd2w0OTY1X2VucXVldWVfaGNtZCwKK307CiAKLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBFRVBST01fU0VNX1JFVFJZX0xJTUlUOyBjb3VudCsrKSB7Ci0JCS8qIFJlcXVlc3Qgc2VtYXBob3JlICovCi0JCWl3bDQ5NjVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSk7CitzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDQ5NjVfbGliID0geworCS5pbml0X2RydiA9IGl3bDQ5NjVfaW5pdF9kcnYsCisJLnNldF9od19wYXJhbXMgPSBpd2w0OTY1X2h3X3NldF9od19wYXJhbXMsCisJLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsNDk2NV90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKKwkuaHdfbmljX2luaXQgPSBpd2w0OTY1X2h3X25pY19pbml0LAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNDk2NV9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorCS5hbGl2ZV9ub3RpZnkgPSBpd2w0OTY1X2FsaXZlX25vdGlmeSwKKwkubG9hZF91Y29kZSA9IGl3bDQ5NjVfbG9hZF9ic20sCisJLmVlcHJvbV9vcHMgPSB7CisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwl9LAorCS5yYWRpb19raWxsX3N3ID0gaXdsNDk2NV9yYWRpb19raWxsX3N3LAorfTsKIAotCQkvKiBTZWUgaWYgd2UgZ290IGl0ICovCi0JCXJjID0gaXdsNDk2NV9wb2xsX2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNLAotCQkJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0sCi0JCQkJCUVFUFJPTV9TRU1fVElNRU9VVCk7Ci0JCWlmIChyYyA+PSAwKSB7Ci0JCQlJV0xfREVCVUdfSU8oIkFjcXVpcmVkIHNlbWFwaG9yZSBhZnRlciAlZCB0cmllcy5cbiIsCi0JCQkJY291bnQrMSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9CitzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNDk2NV9vcHMgPSB7CisJLmxpYiA9ICZpd2w0OTY1X2xpYiwKKwkuaGNtZCA9ICZpd2w0OTY1X2hjbWQsCisJLnV0aWxzID0gJml3bDQ5NjVfaGNtZF91dGlscywKK307CiAKLQlyZXR1cm4gcmM7Ci19CitzdHJ1Y3QgaXdsX2NmZyBpd2w0OTY1X2Fnbl9jZmcgPSB7CisJLm5hbWUgPSAiNDk2NUFHTiIsCisJLmZ3X25hbWUgPSAiaXdsd2lmaS00OTY1IiBJV0w0OTY1X1VDT0RFX0FQSSAiLnVjb2RlIiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w0OTY1X29wcywKKwkubW9kX3BhcmFtcyA9ICZpd2w0OTY1X21vZF9wYXJhbXMsCit9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXdsNDk2NV9od19jYXJkX2lkcyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYW50ZW5uYSwgaXdsNDk2NV9tb2RfcGFyYW1zLmFudGVubmEsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGFudGVubmEsICJzZWxlY3QgYW50ZW5uYSAoMT1NYWluLCAyPUF1eCwgZGVmYXVsdCAwIFtib3RoXSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlLCBpd2w0OTY1X21vZF9wYXJhbXMuZGlzYWJsZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZSwgIm1hbnVhbGx5IGRpc2FibGUgdGhlIHJhZGlvIChkZWZhdWx0IDAgW3JhZGlvIG9uXSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChzd2NyeXB0bywgaXdsNDk2NV9tb2RfcGFyYW1zLnN3X2NyeXB0bywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3djcnlwdG8sICJ1c2luZyBjcnlwdG8gaW4gc29mdHdhcmUgKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDQ5NjVfbW9kX3BhcmFtcy5kZWJ1ZywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOworbW9kdWxlX3BhcmFtX25hbWVkKAorCWRpc2FibGVfaHdfc2NhbiwgaXdsNDk2NV9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9od19zY2FuLCAiZGlzYWJsZSBoYXJkd2FyZSBzY2FubmluZyAoZGVmYXVsdCAwKSIpOworCittb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bSwgaXdsNDk2NV9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW0sICJudW1iZXIgb2YgaHcgcXVldWVzLiIpOworCisvKiBRb1MgKi8KK21vZHVsZV9wYXJhbV9uYW1lZChxb3NfZW5hYmxlLCBpd2w0OTY1X21vZF9wYXJhbXMuZW5hYmxlX3FvcywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocW9zX2VuYWJsZSwgImVuYWJsZSBhbGwgUW9TIGZ1bmN0aW9uYWxpdHkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChhbXNkdV9zaXplXzhLLCBpd2w0OTY1X21vZF9wYXJhbXMuYW1zZHVfc2l6ZV84SywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYW1zZHVfc2l6ZV84SywgImVuYWJsZSA4SyBhbXNkdSBzaXplIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuaAppbmRleCA5Y2I4MmJlLi45ZWQxM2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM2LDEzICszNiwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KIAotLyogSGFyZHdhcmUgc3BlY2lmaWMgZmlsZSBkZWZpbmVzIHRoZSBQQ0kgSURzIHRhYmxlIGZvciB0aGF0IGhhcmR3YXJlIG1vZHVsZSAqLwotZXh0ZXJuIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDQ5NjVfaHdfY2FyZF9pZHNbXTsKLQogI2RlZmluZSBEUlZfTkFNRSAgICAgICAgIml3bDQ5NjUiCisjaW5jbHVkZSAiaXdsLXJma2lsbC5oIgorI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtNDk2NS1ody5oIgorI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgotI2luY2x1ZGUgIml3bC00OTY1LWRlYnVnLmgiCisjaW5jbHVkZSAiaXdsLWRlYnVnLmgiCisjaW5jbHVkZSAiaXdsLWxlZC5oIgorCisvKiBjb25maWd1cmF0aW9uIGZvciB0aGUgaXdsNDk2NSAqLworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDQ5NjVfYWduX2NmZzsKKworLyogQ2hhbmdlIGZpcm13YXJlIGZpbGUgbmFtZSwgdXNpbmcgIi0iIGFuZCBpbmNyZW1lbnRpbmcgbnVtYmVyLAorICogICAqb25seSogd2hlbiB1Q29kZSBpbnRlcmZhY2Ugb3IgYXJjaGl0ZWN0dXJlIGNoYW5nZXMgc28gdGhhdCBpdAorICogICBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgZHJpdmVycy4KKyAqIFRoaXMgbnVtYmVyIHdpbGwgYWxzbyBhcHBlYXIgaW4gPDwgOCBwb3NpdGlvbiBvZiAxc3QgZHdvcmQgb2YgdUNvZGUgZmlsZSAqLworI2RlZmluZSBJV0w0OTY1X1VDT0RFX0FQSSAiLTEiCisKIAogLyogRGVmYXVsdCBub2lzZSBsZXZlbCB0byByZXBvcnQgd2hlbiBub2lzZSBtZWFzdXJlbWVudCBpcyBub3QgYXZhaWxhYmxlLgogICogICBUaGlzIG1heSBiZSBiZWNhdXNlIHdlJ3JlOgpAQCAtNTcsMTEgKzY4LDYgQEAKICAqICAgYXZlcmFnZXMgd2l0aGluIGFuIHM4J3MgKHVzZWQgaW4gc29tZSBhcHBzKSByYW5nZSBvZiBuZWdhdGl2ZSB2YWx1ZXMuICovCiAjZGVmaW5lIElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEUgKC0xMjcpCiAKLS8qIE1vZHVsZSBwYXJhbWV0ZXJzIGFjY2Vzc2libGUgZnJvbSBpd2wtKi5jICovCi1leHRlcm4gaW50IGl3bDQ5NjVfcGFyYW1faHdjcnlwdG87Ci1leHRlcm4gaW50IGl3bDQ5NjVfcGFyYW1fcXVldWVzX251bTsKLWV4dGVybiBpbnQgaXdsNDk2NV9wYXJhbV9hbXNkdV9zaXplXzhLOwotCiBlbnVtIGl3bDQ5NjVfYW50ZW5uYSB7CiAJSVdMX0FOVEVOTkFfRElWRVJTSVRZLAogCUlXTF9BTlRFTk5BX01BSU4sCkBAIC0xMzMsNyArMTM5LDcgQEAKIHN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlIHsKIAlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSBxOwogCXN0cnVjdCBpd2w0OTY1X3RmZF9mcmFtZSAqYmQ7Ci0Jc3RydWN0IGl3bDQ5NjVfY21kICpjbWQ7CisJc3RydWN0IGl3bF9jbWQgKmNtZDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyX2NtZDsKIAlzdHJ1Y3QgaXdsNDk2NV90eF9pbmZvICp0eGI7CiAJaW50IG5lZWRfdXBkYXRlOwpAQCAtMTkwLDcgKzE5Niw3IEBACiAgKi8KICNkZWZpbmUgSVdMNDk2NV9NQVhfUkFURSAoMzMpCiAKLXN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfaW5mbyB7CitzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyB7CiAJc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF90Z2RfaW5mbyB0Z2Q7CiAJc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF90Z2hfaW5mbyB0Z2g7CiAJc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgZWVwcm9tOwkgIC8qIEVFUFJPTSByZWd1bGF0b3J5IGxpbWl0ICovCkBAIC0yMDYsNyArMjEyLDcgQEAKIAogCXU4IGdyb3VwX2luZGV4OwkgIC8qIDAtNCwgbWFwcyBjaGFubmVsIHRvIGdyb3VwMS8yLzMvNC81ICovCiAJdTggYmFuZF9pbmRleDsJICAvKiAwLTQsIG1hcHMgY2hhbm5lbCB0byBiYW5kMS8yLzMvNC81ICovCi0JdTggcGh5bW9kZTsJICAvKiBNT0RFX0lFRUU4MDIxMXtBLEIsR30gKi8KKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKIAkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCAibm9ybWFsIiBkYXRhIFR4IHJhdGUuCiAJICogVGhlc2UgaW5jbHVkZSwgaW4gYWRkaXRpb24gdG8gUkYgYW5kIERTUCBnYWluLCBhIGZldyBmaWVsZHMgZm9yCkBAIC0yODgsOCArMjk0LDggQEAKIAogI2RlZmluZSBTRVFfVE9fUVVFVUUoeCkgICgoeCA+PiA4KSAmIDB4YmYpCiAjZGVmaW5lIFFVRVVFX1RPX1NFUSh4KSAgKCh4ICYgMHhiZikgPDwgOCkKLSNkZWZpbmUgU0VRX1RPX0lOREVYKHgpICh4ICYgMHhmZikKLSNkZWZpbmUgSU5ERVhfVE9fU0VRKHgpICh4ICYgMHhmZikKKyNkZWZpbmUgU0VRX1RPX0lOREVYKHgpICgodTgpKHggJiAweGZmKSkKKyNkZWZpbmUgSU5ERVhfVE9fU0VRKHgpICgodTgpKHggJiAweGZmKSkKICNkZWZpbmUgU0VRX0hVR0VfRlJBTUUgICgweDQwMDApCiAjZGVmaW5lIFNFUV9SWF9GUkFNRSAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKICNkZWZpbmUgU0VRX1RPX1NOKHNlcSkgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKQEAgLTMwNSwxNSArMzExLDE1IEBACiAJQ01EX1dBTlRfU0tCID0gKDEgPDwgMiksCiB9OwogCi1zdHJ1Y3QgaXdsNDk2NV9jbWQ7Ci1zdHJ1Y3QgaXdsNDk2NV9wcml2Oworc3RydWN0IGl3bF9jbWQ7CitzdHJ1Y3QgaXdsX3ByaXY7CiAKLXN0cnVjdCBpd2w0OTY1X2NtZF9tZXRhIHsKLQlzdHJ1Y3QgaXdsNDk2NV9jbWRfbWV0YSAqc291cmNlOworc3RydWN0IGl3bF9jbWRfbWV0YSB7CisJc3RydWN0IGl3bF9jbWRfbWV0YSAqc291cmNlOwogCXVuaW9uIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJaW50ICgqY2FsbGJhY2spKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDQ5NjVfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpOworCQlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpOwogCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHU7CiAKIAkvKiBUaGUgQ01EX1NJWkVfSFVHRSBmbGFnIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZApAQCAtMzIzLDE1ICszMjksMTUgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKLSAqIHN0cnVjdCBpd2w0OTY1X2NtZAorICogc3RydWN0IGl3bF9jbWQKICAqCiAgKiBGb3IgYWxsb2NhdGlvbiBvZiB0aGUgY29tbWFuZCBhbmQgdHggcXVldWVzLCB0aGlzIGVzdGFibGlzaGVzIHRoZSBvdmVyYWxsCiAgKiBzaXplIG9mIHRoZSBsYXJnZXN0IGNvbW1hbmQgd2Ugc2VuZCB0byB1Q29kZSwgZXhjZXB0IGZvciBhIHNjYW4gY29tbWFuZAogICogKHdoaWNoIGlzIHJlbGF0aXZlbHkgaHVnZTsgc3BhY2UgaXMgYWxsb2NhdGVkIHNlcGFyYXRlbHkpLgogICovCi1zdHJ1Y3QgaXdsNDk2NV9jbWQgewotCXN0cnVjdCBpd2w0OTY1X2NtZF9tZXRhIG1ldGE7CS8qIGRyaXZlciBkYXRhICovCi0Jc3RydWN0IGl3bDQ5NjVfY21kX2hlYWRlciBoZHI7CS8qIHVDb2RlIEFQSSAqLworc3RydWN0IGl3bF9jbWQgeworCXN0cnVjdCBpd2xfY21kX21ldGEgbWV0YTsJLyogZHJpdmVyIGRhdGEgKi8KKwlzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIgaGRyOwkvKiB1Q29kZSBBUEkgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQgYWRkc3RhOwogCQlzdHJ1Y3QgaXdsNDk2NV9sZWRfY21kIGxlZDsKQEAgLTM1MSwxNSArMzU3LDE1IEBACiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY21kOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBpd2w0OTY1X2hvc3RfY21kIHsKK3N0cnVjdCBpd2xfaG9zdF9jbWQgewogCXU4IGlkOwogCXUxNiBsZW47Ci0Jc3RydWN0IGl3bDQ5NjVfY21kX21ldGEgbWV0YTsKKwlzdHJ1Y3QgaXdsX2NtZF9tZXRhIG1ldGE7CiAJY29uc3Qgdm9pZCAqZGF0YTsKIH07CiAKLSNkZWZpbmUgVEZEX01BWF9QQVlMT0FEX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9jbWQpIC0gXAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2NtZF9tZXRhKSkKKyNkZWZpbmUgVEZEX01BWF9QQVlMT0FEX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgLSBcCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9jbWRfbWV0YSkpCiAKIC8qCiAgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwpAQCAtNDA4LDMyICs0MTQsMTIgQEAKICNkZWZpbmUgTUFYX0JfQ0hBTk5FTFMgIDE0CiAjZGVmaW5lIE1JTl9CX0NIQU5ORUxTICAxCiAKLSNkZWZpbmUgU1RBVFVTX0hDTURfQUNUSVZFCTAJLyogaG9zdCBjb21tYW5kIGluIHByb2dyZXNzICovCi0jZGVmaW5lIFNUQVRVU19JTlRfRU5BQkxFRAkxCi0jZGVmaW5lIFNUQVRVU19SRl9LSUxMX0hXCTIKLSNkZWZpbmUgU1RBVFVTX1JGX0tJTExfU1cJMwotI2RlZmluZSBTVEFUVVNfSU5JVAkJNAotI2RlZmluZSBTVEFUVVNfQUxJVkUJCTUKLSNkZWZpbmUgU1RBVFVTX1JFQURZCQk2Ci0jZGVmaW5lIFNUQVRVU19URU1QRVJBVFVSRQk3Ci0jZGVmaW5lIFNUQVRVU19HRU9fQ09ORklHVVJFRAk4Ci0jZGVmaW5lIFNUQVRVU19FWElUX1BFTkRJTkcJOQotI2RlZmluZSBTVEFUVVNfSU5fU1VTUEVORAkxMAotI2RlZmluZSBTVEFUVVNfU1RBVElTVElDUwkxMQotI2RlZmluZSBTVEFUVVNfU0NBTk5JTkcJCTEyCi0jZGVmaW5lIFNUQVRVU19TQ0FOX0FCT1JUSU5HCTEzCi0jZGVmaW5lIFNUQVRVU19TQ0FOX0hXCQkxNAotI2RlZmluZSBTVEFUVVNfUE9XRVJfUE1JCTE1Ci0jZGVmaW5lIFNUQVRVU19GV19FUlJPUgkJMTYKLSNkZWZpbmUgU1RBVFVTX0NPTkZfUEVORElORwkxNwotCiAjZGVmaW5lIE1BWF9USURfQ09VTlQgICAgICAgIDkKIAogI2RlZmluZSBJV0xfSU5WQUxJRF9SQVRFICAgICAweEZGCiAjZGVmaW5lIElXTF9JTlZBTElEX1ZBTFVFICAgIC0xCiAKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwogLyoqCiAgKiBzdHJ1Y3QgaXdsNDk2NV9odF9hZ2cgLS0gYWdncmVnYXRpb24gc3RhdHVzIHdoaWxlIHdhaXRpbmcgZm9yIGJsb2NrLWFjawogICogQHR4cV9pZDogVHggcXVldWUgdXNlZCBmb3IgVHggYXR0ZW1wdApAQCAtNDUzLDI1ICs0MzksMzAgQEAKIAl1MTYgZnJhbWVfY291bnQ7CiAJdTE2IHdhaXRfZm9yX2JhOwogCXUxNiBzdGFydF9pZHg7Ci0JdTMyIGJpdG1hcDA7Ci0JdTMyIGJpdG1hcDE7CisJdTY0IGJpdG1hcDsKIAl1MzIgcmF0ZV9uX2ZsYWdzOworI2RlZmluZSBJV0xfQUdHX09GRiAwCisjZGVmaW5lIElXTF9BR0dfT04gMQorI2RlZmluZSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkEgMgorI2RlZmluZSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEgMworCXU4IHN0YXRlOwogfTsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVF9BR0cgKi8KKwogI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAKIHN0cnVjdCBpd2w0OTY1X3RpZF9kYXRhIHsKIAl1MTYgc2VxX251bWJlcjsKKwl1MTYgdGZkc19pbl9xdWV1ZTsKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwogCXN0cnVjdCBpd2w0OTY1X2h0X2FnZyBhZ2c7Ci0jZW5kaWYJLyogQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCiAjZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KIH07CiAKIHN0cnVjdCBpd2w0OTY1X2h3X2tleSB7CiAJZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGc7CiAJaW50IGtleWxlbjsKKwl1OCBrZXlpZHg7CisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqY29uZjsKIAl1OCBrZXlbMzJdOwogfTsKIApAQCAtNTA4LDggKzQ5OSw2IEBACiB9OwogI2VuZGlmCQkJCS8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X1FPUwotCiB1bmlvbiBpd2w0OTY1X3Fvc19jYXBhYml0eSB7CiAJc3RydWN0IHsKIAkJdTggZWRjYV9jb3VudDo0OwkvKiBiaXQgMC0zICovCkBAIC01MzcsNyArNTI2LDYgQEAKIAl1bmlvbiBpd2w0OTY1X3Fvc19jYXBhYml0eSBxb3NfY2FwOwogCXN0cnVjdCBpd2w0OTY1X3Fvc3BhcmFtX2NtZCBkZWZfcW9zX3Bhcm07CiB9OwotI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfUU9TICovCiAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19XQUtFICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19TTEVFUCAgICAgICAgICAgIDEKQEAgLTU3OSwzMCArNTY3LDI5IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBpd2w0OTY1X2RyaXZlcl9od19pbmZvCisgKiBzdHJ1Y3QgaXdsX2h3X3BhcmFtcwogICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCi0gKiBAYWNfcXVldWVfY291bnQ6ICMgVHggcXVldWVzIGZvciBFRENBIEFjY2VzcyBDYXRlZ29yaWVzIChBQykKICAqIEB0eF9jbWRfbGVuOiBTaXplIG9mIFR4IGNvbW1hbmQgKGJ1dCBub3QgaW5jbHVkaW5nIGZyYW1lIGl0c2VsZikKKyAqIEB0eF9hbnRfbnVtOiBOdW1iZXIgb2YgVFggYW50ZW5uYXMKICAqIEBtYXhfcnhxX3NpemU6IE1heCAjIFJ4IGZyYW1lcyBpbiBSeCBxdWV1ZSAobXVzdCBiZSBwb3dlci1vZi0yKQogICogQHJ4X2J1ZmZlcl9zaXplOgogICogQG1heF9yeHFfbG9nOiBMb2ctYmFzZS0yIG9mIG1heF9yeHFfc2l6ZQogICogQG1heF9zdGF0aW9uczoKICAqIEBiY2FzdF9zdGFfaWQ6Ci0gKiBAc2hhcmVkX3ZpcnQ6IFBvaW50ZXIgdG8gZHJpdmVyL3VDb2RlIHNoYXJlZCBUeCBCeXRlIENvdW50cyBhbmQgUnggc3RhdHVzCi0gKiBAc2hhcmVkX3BoeXM6IFBoeXNpY2FsIFBvaW50ZXIgdG8gVHggQnl0ZSBDb3VudHMgYW5kIFJ4IHN0YXR1cwogICovCi1zdHJ1Y3QgaXdsNDk2NV9kcml2ZXJfaHdfaW5mbyB7CitzdHJ1Y3QgaXdsX2h3X3BhcmFtcyB7CiAJdTE2IG1heF90eHFfbnVtOwotCXUxNiBhY19xdWV1ZV9jb3VudDsKIAl1MTYgdHhfY21kX2xlbjsKKwl1OCAgdHhfY2hhaW5zX251bTsKKwl1OCAgcnhfY2hhaW5zX251bTsKKwl1OCAgdmFsaWRfdHhfYW50OworCXU4ICB2YWxpZF9yeF9hbnQ7CiAJdTE2IG1heF9yeHFfc2l6ZTsKKwl1MTYgbWF4X3J4cV9sb2c7CiAJdTMyIHJ4X2J1Zl9zaXplOwogCXUzMiBtYXhfcGt0X3NpemU7Ci0JdTE2IG1heF9yeHFfbG9nOwogCXU4ICBtYXhfc3RhdGlvbnM7CiAJdTggIGJjYXN0X3N0YV9pZDsKLQl2b2lkICpzaGFyZWRfdmlydDsKLQlkbWFfYWRkcl90IHNoYXJlZF9waHlzOwogfTsKIAogI2RlZmluZSBIVF9TSE9SVF9HSV8yME1IWl9PTkxZICAgICAgICAgICgxIDw8IDApCkBAIC02MjYsNjIgKzYxMyw0OSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQ7Ci1leHRlcm4gaW50IGl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorZXh0ZXJuIGludCBpd2w0OTY1X3NlbmRfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpOwotZXh0ZXJuIHU4IGl3bDQ5NjVfYWRkX3N0YXRpb25fZmxhZ3Moc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsCitleHRlcm4gdTggaXdsNDk2NV9hZGRfc3RhdGlvbl9mbGFncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLAogCQkJICBpbnQgaXNfYXAsIHU4IGZsYWdzLCB2b2lkICpodF9kYXRhKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorZXh0ZXJuIGludCBpd2w0OTY1X2lzX25ldHdvcmtfcGFja2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfZWVwcm9tX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLWV4dGVybiB2b2lkIGl3bDQ5NjVfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkgICAgIHN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2w0OTY1X3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlciwKLQkJCQkgICAgaW50IGdyb3VwMTAwKSB7fQotI2VuZGlmCi1leHRlcm4gdm9pZCBpd2w0OTY1X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitleHRlcm4gaW50IGl3bDQ5NjVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDQ5NjVfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIsCiAJCQkJCSAgIHZvaWQgKmRhdGEsIHNob3J0IGxlbiwKIAkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzLAogCQkJCQkgICB1MTYgcGh5X2ZsYWdzKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9pc19kdXBsaWNhdGVfcGFja2V0KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitleHRlcm4gaW50IGl3bDQ5NjVfaXNfZHVwbGljYXRlX3BhY2tldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpOwotZXh0ZXJuIGludCBpd2w0OTY1X3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorZXh0ZXJuIGludCBpd2w0OTY1X3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAqcnhxKTsKIGV4dGVybiBpbnQgaXdsNDk2NV9jYWxjX2RiX2Zyb21fcmF0aW8oaW50IHNpZ19yYXRpbyk7CiBleHRlcm4gaW50IGl3bDQ5NjVfY2FsY19zaWdfcXVhbChpbnQgcnNzaV9kYm0sIGludCBub2lzZV9kYm0pOwotZXh0ZXJuIGludCBpd2w0OTY1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsNDk2NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSwgaW50IGNvdW50LCB1MzIgaWQpOwogZXh0ZXJuIHZvaWQgaXdsNDk2NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSk7Ci1leHRlcm4gaW50IGl3bDQ5NjVfc2VuZF9jbWRfcGR1KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IGlkLCB1MTYgbGVuLAotCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaXdsNDk2NV9zZW5kX2NtZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQlzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCAqY21kKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXdsNDk2NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorZXh0ZXJuIHZvaWQgaXdsNDk2NV90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gdW5zaWduZWQgaW50IGl3bDQ5NjVfZmlsbF9iZWFjb25fZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCQljb25zdCB1OCAqZGVzdCwgaW50IGxlZnQpOwotZXh0ZXJuIGludCBpd2w0OTY1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsNDk2NV9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJIHN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpxKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gdm9pZCBpd2w0OTY1X3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgdTMyIGRlY3J5cHRfcmVzLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7CiBleHRlcm4gX19sZTE2ICppZWVlODAyMTFfZ2V0X3Fvc19jdHJsKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOworaW50IGl3bDQ5NjVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bDQ5NjVfZnJlZV9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIGV4dGVybiBjb25zdCB1OCBpd2w0OTY1X2Jyb2FkY2FzdF9hZGRyW0VUSF9BTEVOXTsKK2ludCBpd2w0OTY1X2VucXVldWVfaGNtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCk7CiAKIC8qCiAgKiBDdXJyZW50bHkgdXNlZCBieSBpd2wtMzk0NS1ycy4uLiBsb29rIGF0IHJlc3RydWN0dXJpbmcgc28gdGhhdCBpdCBkb2Vzbid0CiAgKiBjYWxsIHRoaXMuLi4gdG9kby4uLiBmaXggdGhhdC4KICovCi1leHRlcm4gdTggaXdsNDk2NV9zeW5jX3N0YXRpb24oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKK2V4dGVybiB1OCBpd2w0OTY1X3N5bmNfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCiAJCQkgICB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03MDAsMzYgKzY3NCwzNiBAQAogICogaXdsNDk2NV9tYWNfICAgICA8LS0gbWFjODAyMTEgY2FsbGJhY2sKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWV4dGVybiB2b2lkIGl3bDQ5NjVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfbmljX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHZvaWQgKnRmZCwKK2V4dGVybiB2b2lkIGl3bDQ5NjVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsNDk2NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDQ5NjVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsNDk2NV9od19zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDQ5NjVfaHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsNDk2NV9od19uaWNfc3RvcF9tYXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDQ5NjVfaHdfdHhxX2N0eF9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w0OTY1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w0OTY1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnRmZCwKIAkJCQkJZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSk7Ci1leHRlcm4gaW50IGl3bDQ5NjVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsNDk2NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKTsKK2V4dGVybiBpbnQgaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsNDk2NV9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXdsNDk2NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorZXh0ZXJuIHVuc2lnbmVkIGludCBpd2w0OTY1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGl3bDQ5NjVfZnJhbWUgKmZyYW1lLCB1OCByYXRlKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od19nZXRfcnhfcmVhZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQkgICAgIHN0cnVjdCBpd2w0OTY1X2NtZCAqY21kLAorZXh0ZXJuIGludCBpd2w0OTY1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0cmwsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCSAgICAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKLWV4dGVybiBpbnQgaXdsNDk2NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2h3X3JlZ19zZXRfdHhwb3dlcihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBzOCBwb3dlcik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsNDk2NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDQ5NjVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpOworZXh0ZXJuIHZvaWQgaXdsNDk2NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfZGlzYWJsZV9ldmVudHMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsNDk2NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKioKICAqIGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uIC0gRmluZCBzdGF0aW9uIGlkIGZvciBhIGdpdmVuIEJTU0lECkBAIC03MzksNTQgKzcxMyw1MSBAQAogICogbm90IHlldCBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGNvbW1vbiBsYXllciBmb3IgbWFuYWdpbmcgdGhlCiAgKiBzdGF0aW9uIHRhYmxlcy4KICAqLwotZXh0ZXJuIHU4IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCk7CitleHRlcm4gdTggaXdsNDk2NV9od19maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwogCi1leHRlcm4gaW50IGl3bDQ5NjVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOwotZXh0ZXJuIGludCBpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgaW50IGluZGV4KTsKK2V4dGVybiBpbnQgaXdsNDk2NV9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKTsKK2V4dGVybiBpbnQgaXdsNDk2NV90eF9xdWV1ZV9yZWNsYWltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgaW50IGluZGV4KTsKK2V4dGVybiBpbnQgaXdsNDk2NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSk7CitzdHJ1Y3QgaXdsX3ByaXY7CiAKLXN0cnVjdCBpd2w0OTY1X3ByaXY7Ci0KK2V4dGVybiB2b2lkIGl3bDQ5NjVfcmFkaW9fa2lsbF9zdyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKTsKIC8qCiAgKiBGb3J3YXJkIGRlY2xhcmUgaXdsLTQ5NjUuYyBmdW5jdGlvbnMgZm9yIGl3bC1iYXNlLmMKICAqLwotZXh0ZXJuIGludCBpd2w0OTY1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KTsKLQotZXh0ZXJuIGludCBpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cl9wdHIoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLAogCQkJCQkgIHUxNiBieXRlX2NudCk7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLAorZXh0ZXJuIHZvaWQgaXdsNDk2NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLAogCQkJCWludCBpc19hcCk7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfdXBkYXRlX3JhdGVfc2NhbGluZyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCBtb2RlKTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfY2hhaW5fbm9pc2VfcmVzZXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTggZmxhZ3MsCitleHRlcm4gdm9pZCBpd2w0OTY1X3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDQ5NjVfYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X3VwZGF0ZV9yYXRlX3NjYWxpbmcoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBtb2RlKTsKK2V4dGVybiB2b2lkIGl3bDQ5NjVfY2hhaW5fbm9pc2VfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDQ5NjVfaW5pdF9zZW5zaXRpdml0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzLAogCQkJCSAgICAgdTggZm9yY2UpOwotZXh0ZXJuIGludCBpd2w0OTY1X3NldF9mYXRfY2hhbl9pbmZvKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCBwaHltb2RlLAotCQkJCXUxNiBjaGFubmVsLAotCQkJCWNvbnN0IHN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsICplZXByb21fY2gsCi0JCQkJdTggZmF0X2V4dGVuc2lvbl9jaGFubmVsKTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfcmZfa2lsbF9jdF9jb25maWcoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X3JmX2tpbGxfY3RfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2w0OTY1X2h3cmF0ZV90b190eF9jb250cm9sKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJIHUzMiByYXRlX25fZmxhZ3MsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpOwogCiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLWV4dGVybiB2b2lkIGl3bDQ5NjVfaW5pdF9odF9od19jYXBhYihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8sCi0JCQkJCWludCBtb2RlKTsKLWV4dGVybiB2b2lkIGl3bDQ5NjVfc2V0X3J4b25faHQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV9zZXRfaHRfYWRkX3N0YXRpb24oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTggaW5kZXgsCit2b2lkIGl3bDQ5NjVfaW5pdF9odF9od19jYXBhYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8sCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwordm9pZCBpd2w0OTY1X3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pOwordm9pZCBpd2w0OTY1X3NldF9odF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGluZGV4LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqc3RhX2h0X2luZik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK2ludCBpd2w0OTY1X21hY19hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKLQkJCQkgICAgY29uc3QgdTggKmFkZHIsIHUxNiB0aWQsIHUxNiBzc24pOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotZXh0ZXJuIGludCBpd2w0OTY1X21hY19odF90eF9hZ2dfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpkYSwKLQkJCQkgICB1MTYgdGlkLCB1MTYgKnN0YXJ0X3NlcV9udW0pOwotZXh0ZXJuIGludCBpd2w0OTY1X21hY19odF90eF9hZ2dfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmRhLAotCQkJCSAgdTE2IHRpZCwgaW50IGdlbmVyYXRvcik7Ci1leHRlcm4gdm9pZCBpd2w0OTY1X3R1cm5fb2ZmX2FnZyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCB0aWQpOwotZXh0ZXJuIHZvaWQgaXdsNDk2NV90bF9nZXRfc3RhdHMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKTsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVF9BR0cgKi8KKwkJCQkgICAgY29uc3QgdTggKmFkZHIsIHUxNiB0aWQsIHUxNiAqc3NuKTsKK2ludCBpd2w0OTY1X2NoZWNrX2VtcHR5X2h3X3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKKwkJCQkJdTggdGlkLCBpbnQgdHhxX2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsNDk2NV9pbml0X2h0X2h3X2NhcGFiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbywKKwkJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkge30KKwogI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfSFQgKi8KIC8qIFN0cnVjdHVyZXMsIGVudW0sIGFuZCBkZWZpbmVzIHNwZWNpZmljIHRvIHRoZSA0OTY1ICovCiAKQEAgLTc5OCwxOCArNzY5LDYgQEAKIAlzaXplX3Qgc2l6ZTsKIH07CiAKLSNkZWZpbmUgVElEX1FVRVVFX0NFTExfU1BBQ0lORyA1MAkvKm1TICovCi0jZGVmaW5lIFRJRF9RVUVVRV9NQVhfU0laRSAgICAgMjAKLSNkZWZpbmUgVElEX1JPVU5EX1ZBTFVFICAgICAgICA1CS8qIG1TICovCi0jZGVmaW5lIFRJRF9NQVhfTE9BRF9DT1VOVCAgICAgOAotCi0jZGVmaW5lIFRJRF9NQVhfVElNRV9ESUZGICgoVElEX1FVRVVFX01BWF9TSVpFIC0gMSkgKiBUSURfUVVFVUVfQ0VMTF9TUEFDSU5HKQotI2RlZmluZSBUSU1FX1dSQVBfQVJPVU5EKHgsIHkpICgoKHkpID4gKHgpKSA/ICh5KSAtICh4KSA6ICgwLSh4KSkgKyAoeSkpCi0KLSNkZWZpbmUgVElEX0FMTF9FTkFCTEVECQkweDdmCi0jZGVmaW5lIFRJRF9BTExfU1BFQ0lGSUVEICAgICAgIDB4ZmYKLSNkZWZpbmUgVElEX0FHR19UUFRfVEhSRUhPTEQgICAgMHgwCi0KICNkZWZpbmUgSVdMX0NIQU5ORUxfV0lEVEhfMjBNSFogICAwCiAjZGVmaW5lIElXTF9DSEFOTkVMX1dJRFRIXzQwTUhaICAgMQogCkBAIC04MjMsNDggKzc4MiwxNyBAQAogI2RlZmluZSBJV0xfT1BFUkFUSU9OX01PREVfTUlYRUQgICAgMgogI2RlZmluZSBJV0xfT1BFUkFUSU9OX01PREVfMjBNSFogICAgMwogCi0jZGVmaW5lIElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQVVUTyAgIDAKLSNkZWZpbmUgSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9BQk9WRSAgMQotI2RlZmluZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUXyAgICAgICAyCi0jZGVmaW5lIElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQkVMT1cgIDMKLSNkZWZpbmUgSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9NQVggICAgNAorI2RlZmluZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUX05PTkUgICAgICAwCisjZGVmaW5lIElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQUJPVkUgICAgIDEKKyNkZWZpbmUgSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9SRVNFUlZFMSAgMgorI2RlZmluZSBJV0xfRVhUX0NIQU5ORUxfT0ZGU0VUX0JFTE9XICAgICAzCiAKICNkZWZpbmUgTlJHX05VTV9QUkVWX1NUQVRfTCAgICAgMjAKICNkZWZpbmUgTlVNX1JYX0NIQUlOUyAgICAgICAgICAgKDMpCiAKICNkZWZpbmUgVFhfUE9XRVJfSVdMX0lMTEVHQUxfVk9MVEFHRSAtMTAwMDAKIAotc3RydWN0IGl3bDQ5NjVfdHJhZmZpY19sb2FkIHsKLQl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7Ci0JdTMyIHBhY2tldF9jb3VudFtUSURfUVVFVUVfTUFYX1NJWkVdOwotCXU4IHF1ZXVlX2NvdW50OwotCXU4IGhlYWQ7Ci0JdTMyIHRvdGFsOwotfTsKLQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotLyoqCi0gKiBzdHJ1Y3QgaXdsNDk2NV9hZ2dfY29udHJvbAotICogQHJlcXVlc3RlZF9iYTogYml0IG1hcCBvZiB0aWRzIHJlcXVlc3RpbmcgYWdncmVnYXRpb24vYmxvY2stYWNrCi0gKiBAZ3JhbnRlZF9iYTogYml0IG1hcCBvZiB0aWRzIGdyYW50ZWQgYWdncmVnYXRpb24vYmxvY2stYWNrCi0gKi8KLXN0cnVjdCBpd2w0OTY1X2FnZ19jb250cm9sIHsKLQl1bnNpZ25lZCBsb25nIG5leHRfcmV0cnk7Ci0JdTMyIHdhaXRfZm9yX2FnZ19zdGF0dXM7Ci0JdTMyIHRpZF9yZXRyeTsKLQl1MzIgcmVxdWVzdGVkX2JhOwotCXUzMiBncmFudGVkX2JhOwotCXU4IGF1dG9fYWdnOwotCXUzMiB0aWRfdHJhZmZpY19sb2FkX3RocmVzaG9sZDsKLQl1MzIgYmFfdGltZW91dDsKLQlzdHJ1Y3QgaXdsNDk2NV90cmFmZmljX2xvYWQgdHJhZmZpY19sb2FkW1RJRF9NQVhfTE9BRF9DT1VOVF07Ci19OwotI2VuZGlmCQkJCS8qQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCi0KIHN0cnVjdCBpd2w0OTY1X2xxX21uZ3IgewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotCXN0cnVjdCBpd2w0OTY1X2FnZ19jb250cm9sIGFnZ19jdHJsOwotI2VuZGlmCiAJc3BpbmxvY2tfdCBsb2NrOwogCXMzMiBtYXhfd2luZG93X3NpemU7CiAJczMyICpleHBlY3RlZF90cHQ7CkBAIC04NzcsNyArODA1LDYgQEAKIAl1OCBscV9yZWFkeTsKIH07CiAKLQogLyogU2Vuc2l0aXZpdHkgYW5kIGNoYWluIG5vaXNlIGNhbGlicmF0aW9uICovCiAjZGVmaW5lIElOVEVSRkVSRU5DRV9EQVRBX0FWQUlMQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpCiAjZGVmaW5lIElOSVRJQUxJWkFUSU9OX1ZBTFVFCQkweEZGRkYKQEAgLTEwMTQsMjUgKzk0MSwyOCBAQAogCiAjZW5kaWYKIAotc3RydWN0IGl3bDQ5NjVfcHJpdiB7CisjZGVmaW5lIElXTF9NQVhfTlVNX1FVRVVFUwkyMCAvKiBGSVhNRTogZG8gZHluYW1pYyBhbGxvY2F0aW9uICovCisKK3N0cnVjdCBpd2xfcHJpdiB7CiAKIAkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWVfY2hhbm5lbHM7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICppZWVlX3JhdGVzOworCXN0cnVjdCBpd2xfY2ZnICpjZmc7CiAKIAkvKiB0ZW1wb3JhcnkgZnJhbWUgc3RvcmFnZSBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2ZyYW1lczsKIAlpbnQgZnJhbWVzX2NvdW50OwogCi0JdTggcGh5bW9kZTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJaW50IGFsbG9jX3J4Yl9za2I7CiAJYm9vbCBhZGRfcmFkaW90YXA7CiAKLQl2b2lkICgqcnhfaGFuZGxlcnNbUkVQTFlfTUFYXSkoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKKwl2b2lkICgqcnhfaGFuZGxlcnNbUkVQTFlfTUFYXSkoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpOwogCi0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAkvKiBzcGVjdHJ1bSBtZWFzdXJlbWVudCByZXBvcnQgY2FjaGluZyAqLwpAQCAtMTA0NCw3ICs5NzQsNyBAQAogCiAJLyogd2UgYWxsb2NhdGUgYXJyYXkgb2YgaXdsNDk2NV9jaGFubmVsX2luZm8gZm9yIE5JQydzIHZhbGlkIGNoYW5uZWxzLgogCSAqICAgIEFjY2VzcyB2aWEgY2hhbm5lbCAjIHVzaW5nIGluZGlyZWN0IGluZGV4IGFycmF5ICovCi0Jc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaGFubmVsX2luZm87CS8qIGNoYW5uZWwgaW5mbyBhcnJheSAqLworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaGFubmVsX2luZm87CS8qIGNoYW5uZWwgaW5mbyBhcnJheSAqLwogCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgb2YgY2hhbm5lbHMgKi8KIAogCS8qIGVhY2ggY2FsaWJyYXRpb24gY2hhbm5lbCBncm91cCBpbiB0aGUgRUVQUk9NIGhhcyBhIGRlcml2ZWQKQEAgLTExMDQsMTggKzEwMzQsMjEgQEAKIAkgKiA0OTY1J3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCiAJc3RydWN0IGl3bDQ5NjVfaW5pdF9hbGl2ZV9yZXNwIGNhcmRfYWxpdmVfaW5pdDsKIAlzdHJ1Y3QgaXdsNDk2NV9hbGl2ZV9yZXNwIGNhcmRfYWxpdmU7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfUkZLSUxMCisJc3RydWN0IGl3bF9yZmtpbGxfbW5nciByZmtpbGxfbW5ncjsKKyNlbmRpZgogCi0jaWZkZWYgTEVECi0JLyogTEVEIHJlbGF0ZWQgdmFyaWFibGVzICovCi0Jc3RydWN0IGl3bDQ5NjVfYWN0aXZpdHlfYmxpbmsgYWN0aXZpdHk7Ci0JdW5zaWduZWQgbG9uZyBsZWRfcGFja2V0czsKLQlpbnQgbGVkX3N0YXRlOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKKwlzdHJ1Y3QgaXdsNDk2NV9sZWQgbGVkW0lXTF9MRURfVFJHX01BWF07CisJdW5zaWduZWQgbG9uZyBsYXN0X2JsaW5rX3RpbWU7CisJdTggbGFzdF9ibGlua19yYXRlOworCXU4IGFsbG93X2JsaW5raW5nOworCXU2NCBsZWRfdHB0OwogI2VuZGlmCiAKIAl1MTYgYWN0aXZlX3JhdGU7CiAJdTE2IGFjdGl2ZV9yYXRlX2Jhc2ljOwogCi0JdTggY2FsbF9wb3N0X2Fzc29jX2Zyb21fYmVhY29uOwogCXU4IGFzc29jX3N0YXRpb25fYWRkZWQ7CiAJdTggdXNlX2FudF9iX2Zvcl9tYW5hZ2VtZW50X2ZyYW1lOwkvKiBUeCBhbnRlbm5hIHNlbGVjdGlvbiAqLwogCXU4IHZhbGlkX2FudGVubmE7CS8qIEJpdCBtYXNrIG9mIGFudGVubmFzIGFjdHVhbGx5IGNvbm5lY3RlZCAqLwpAQCAtMTE1MCwxMSArMTA4MywxNiBAQAogCXUzMiBzY2RfYmFzZV9hZGRyOwkvKiBzY2hlZHVsZXIgc3JhbSBiYXNlIGFkZHJlc3MgKi8KIAogCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwotCXUzMiBjb25maWc7CiAKIAlpbnQgbGFzdF9yeF9yc3NpOwkvKiBGcm9tIFJ4IHBhY2tldCBzdGF0aXNpdGljcyAqLwogCWludCBsYXN0X3J4X25vaXNlOwkvKiBGcm9tIGJlYWNvbiBzdGF0aXN0aWNzICovCiAKKwkvKiBjb3VudHMgbWdtdCwgY3RsLCBhbmQgZGF0YSBwYWNrZXRzICovCisJc3RydWN0IHRyYWZmaWNfc3RhdHMgeworCQl1MzIgY250OworCQl1NjQgYnl0ZXM7CisJfSB0eF9zdGF0c1szXSwgcnhfc3RhdHNbM107CisKIAlzdHJ1Y3QgaXdsNDk2NV9wb3dlcl9tZ3IgcG93ZXJfZGF0YTsKIAogCXN0cnVjdCBpd2w0OTY1X25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKQEAgLTExNzUsMTIgKzExMTMsMTUgQEAKIAlzcGlubG9ja190IHN0YV9sb2NrOwogCWludCBudW1fc3RhdGlvbnM7CiAJc3RydWN0IGl3bDQ5NjVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc1tJV0xfU1RBVElPTl9DT1VOVF07CisJc3RydWN0IGl3bF93ZXBfa2V5IHdlcF9rZXlzW1dFUF9LRVlTX01BWF07CisJdTggZGVmYXVsdF93ZXBfa2V5OworCXU4IGtleV9tYXBwaW5nX2tleTsKKwl1bnNpZ25lZCBsb25nIHVjb2RlX2tleV90YWJsZTsKIAogCS8qIEluZGljYXRpb24gaWYgaWVlZTgwMjExX29wcy0+b3BlbiBoYXMgYmVlbiBjYWxsZWQgKi8KLQlpbnQgaXNfb3BlbjsKKwl1OCBpc19vcGVuOwogCiAJdTggbWFjODAyMTFfcmVnaXN0ZXJlZDsKLQlpbnQgaXNfYWJnOwogCiAJdTMyIG5vdGlmX21pc3NlZF9iZWFjb25zOwogCkBAIC0xMTk5LDI2ICsxMTQwLDI4IEBACiAJLyogZWVwcm9tICovCiAJc3RydWN0IGl3bDQ5NjVfZWVwcm9tIGVlcHJvbTsKIAotCWludCBpd19tb2RlOworCWVudW0gaWVlZTgwMjExX2lmX3R5cGVzIGl3X21vZGU7CiAKIAlzdHJ1Y3Qgc2tfYnVmZiAqaWJzc19iZWFjb247CiAKIAkvKiBMYXN0IFJ4J2QgYmVhY29uIHRpbWVzdGFtcCAqLwotCXUzMiB0aW1lc3RhbXAwOwotCXUzMiB0aW1lc3RhbXAxOworCXU2NCB0aW1lc3RhbXA7CiAJdTE2IGJlYWNvbl9pbnQ7Ci0Jc3RydWN0IGl3bDQ5NjVfZHJpdmVyX2h3X2luZm8gaHdfc2V0dGluZzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCisJc3RydWN0IGl3bF9od19wYXJhbXMgaHdfcGFyYW1zOworCS8qIGRyaXZlci91Q29kZSBzaGFyZWQgVHggQnl0ZSBDb3VudHMgYW5kIFJ4IHN0YXR1cyAqLworCXZvaWQgKnNoYXJlZF92aXJ0OworCS8qIFBoeXNpY2FsIFBvaW50ZXIgdG8gVHggQnl0ZSBDb3VudHMgYW5kIFJ4IHN0YXR1cyAqLworCWRtYV9hZGRyX3Qgc2hhcmVkX3BoeXM7CisKIAkvKiBDdXJyZW50IGFzc29jaWF0aW9uIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25maWd1cmUgdGhlCiAJICogaGFyZHdhcmUgKi8KIAl1MTYgYXNzb2NfaWQ7CiAJdTE2IGFzc29jX2NhcGFiaWxpdHk7CiAJdTggcHNfbW9kZTsKIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X1FPUwogCXN0cnVjdCBpd2w0OTY1X3Fvc19pbmZvIHFvc19kYXRhOwotI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfUU9TICovCiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOwogCkBAIC0xMjUzLDcxICsxMTk2LDY4IEBACiAJdTMyIHBtX3N0YXRlWzE2XTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCS8qIGRlYnVnZ2luZyBpbmZvICovCiAJdTMyIGZyYW1lY250X3RvX3VzOwogCWF0b21pY190IHJlc3RyaWN0X3JlZmNudDsKLSNlbmRpZgorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKwkvKiBkZWJ1Z2ZzICovCisJc3RydWN0IGl3bF9kZWJ1Z2ZzICpkYmdmczsKKyNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTICovCisjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KIAogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eHBvd2VyX3dvcms7CiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Vuc2l0aXZpdHlfd29yazsKICNlbmRpZgotCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGF0aXN0aWNzX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdGlzdGljc19wZXJpb2RpYzsKK307IC8qaXdsX3ByaXYgKi8KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhZ2dfd29yazsKLSNlbmRpZgotfTsJCQkJLyppd2w0OTY1X3ByaXYgKi8KLQotc3RhdGljIGlubGluZSBpbnQgaXdsNDk2NV9pc19hc3NvY2lhdGVkKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJcmV0dXJuIChwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spID8gMSA6IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfdmFsaWQoY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF92YWxpZChjb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKIHsKIAlpZiAoY2hfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKGNoX2luZm8tPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfVkFMSUQpID8gMSA6IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfbmFycm93KGNvbnN0IHN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfbmFycm93KGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewogCXJldHVybiAoY2hfaW5mby0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9OQVJST1cpID8gMSA6IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfcmFkYXIoY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9yYWRhcihjb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKIHsKIAlyZXR1cm4gKGNoX2luZm8tPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpID8gMSA6IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9hX2JhbmQoY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIGlubGluZSB1OCBpc19jaGFubmVsX2FfYmFuZChjb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKIHsKLQlyZXR1cm4gY2hfaW5mby0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUE7CisJcmV0dXJuIGNoX2luZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIH0KIAotc3RhdGljIGlubGluZSB1OCBpc19jaGFubmVsX2JnX2JhbmQoY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIGlubGluZSB1OCBpc19jaGFubmVsX2JnX2JhbmQoY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7Ci0JcmV0dXJuICgoY2hfaW5mby0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUIpIHx8Ci0JCShjaF9pbmZvLT5waHltb2RlID09IE1PREVfSUVFRTgwMjExRykpOworCXJldHVybiBjaF9pbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFo7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfcGFzc2l2ZShjb25zdCBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKmNoKQorc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9wYXNzaXZlKGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaCkKIHsKIAlyZXR1cm4gKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkgPyAxIDogMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9pYnNzKGNvbnN0IHN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfaW5mbyAqY2gpCitzdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX2lic3MoY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoKQogewogCXJldHVybiAoKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKSA/IDEgOiAwOwogfQogCi1leHRlcm4gY29uc3Qgc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICppd2w0OTY1X2dldF9jaGFubmVsX2luZm8oCi0JY29uc3Qgc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgaW50IHBoeW1vZGUsIHUxNiBjaGFubmVsKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqaXdsX2dldF9jaGFubmVsX2luZm8oCisJY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKTsKIAotLyogUmVxdWlyZXMgZnVsbCBkZWNsYXJhdGlvbiBvZiBpd2w0OTY1X3ByaXYgYmVmb3JlIGluY2x1ZGluZyAqLwotI2luY2x1ZGUgIml3bC00OTY1LWlvLmgiCisvKiBSZXF1aXJlcyBmdWxsIGRlY2xhcmF0aW9uIG9mIGl3bF9wcml2IGJlZm9yZSBpbmNsdWRpbmcgKi8KIAogI2VuZGlmCQkJCS8qIF9faXdsNDk2NV80OTY1X2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZmQ5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIFRvbWFzIFdpbmtsZXIgPHRvbWFzLndpbmtsZXJAaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCitzdHJ1Y3QgaXdsX3ByaXY7IC8qIEZJWE1FOiByZW1vdmUgKi8KKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLTQ5NjUuaCIgLyogRklYTUU6IHJlbW92ZSAqLworI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLXJma2lsbC5oIgorCisKK01PRFVMRV9ERVNDUklQVElPTigiaXdsIGNvcmUiKTsKK01PRFVMRV9WRVJTSU9OKElXTFdJRklfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKERSVl9DT1BZUklHSFQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK3UzMiBpd2xfZGVidWdfbGV2ZWw7CitFWFBPUlRfU1lNQk9MKGl3bF9kZWJ1Z19sZXZlbCk7CisjZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiBib3RoIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgaHcgYW5kIHByaXYuICovCitzdHJ1Y3QgaWVlZTgwMjExX2h3ICppd2xfYWxsb2NfYWxsKHN0cnVjdCBpd2xfY2ZnICpjZmcsCisJCXN0cnVjdCBpZWVlODAyMTFfb3BzICpod19vcHMpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2OworCisJLyogbWFjODAyMTEgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UgaW5zdGFuY2UsIGluY2x1ZGluZworCSAqICAgc3BhY2UgZm9yIHRoaXMgZHJpdmVyJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9CisJCWllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bF9wcml2KSwgaHdfb3BzKTsKKwlpZiAoaHcgPT0gTlVMTCkgeworCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcml2ID0gaHctPnByaXY7CisJcHJpdi0+aHcgPSBodzsKKworb3V0OgorCXJldHVybiBodzsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2FsbG9jX2FsbCk7CisKKy8qKgorICogaXdsY29yZV9jbGVhcl9zdGF0aW9uc190YWJsZSAtIENsZWFyIHRoZSBkcml2ZXIncyBzdGF0aW9uIHRhYmxlCisgKgorICogTk9URTogIFRoaXMgZG9lcyBub3QgY2xlYXIgb3Igb3RoZXJ3aXNlIGFsdGVyIHRoZSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlLgorICovCit2b2lkIGl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKworCXByaXYtPm51bV9zdGF0aW9ucyA9IDA7CisJbWVtc2V0KHByaXYtPnN0YXRpb25zLCAwLCBzaXplb2YocHJpdi0+c3RhdGlvbnMpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUpOworCit2b2lkIGl3bGNvcmVfcmVzZXRfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MTYgY3dfbWluID0gMTU7CisJdTE2IGN3X21heCA9IDEwMjM7CisJdTggYWlmcyA9IDI7CisJdTggaXNfbGVnYWN5ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKKworCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwkJaWYgKHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpCisJCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMTsKKwkJaWYgKCEocHJpdi0+YWN0aXZlX3JhdGUgJiAweGZmZjApKSB7CisJCQljd19taW4gPSAzMTsKKwkJCWlzX2xlZ2FjeSA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKKwkJaWYgKHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpCisJCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMTsKKwl9IGVsc2UgaWYgKCEocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKSB7CisJCWN3X21pbiA9IDMxOworCQlpc19sZWdhY3kgPSAxOworCX0KKworCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQorCQlhaWZzID0gMzsKKworCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5jd19taW4gPSBjcHVfdG9fbGUxNihjd19taW4pOworCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5jd19tYXggPSBjcHVfdG9fbGUxNihjd19tYXgpOworCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5haWZzbiA9IGFpZnM7CisJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmVkY2FfdHhvcCA9IDA7CisJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLnJlc2VydmVkMSA9IDA7CisKKwlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkgeworCQlpID0gMTsKKwkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9IGNwdV90b19sZTE2KGN3X21pbik7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPSBjcHVfdG9fbGUxNihjd19tYXgpOworCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSA3OworCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0gMDsKKwkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7CisKKwkJaSA9IDI7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQorCQkJY3B1X3RvX2xlMTYoKGN3X21pbiArIDEpIC8gMiAtIDEpOworCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KKwkJCWNwdV90b19sZTE2KGN3X21heCk7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDI7CisJCWlmIChpc19sZWdhY3kpCisJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KKwkJCQljcHVfdG9fbGUxNig2MDE2KTsKKwkJZWxzZQorCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9CisJCQkJY3B1X3RvX2xlMTYoMzAwOCk7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOworCisJCWkgPSAzOworCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0KKwkJCWNwdV90b19sZTE2KChjd19taW4gKyAxKSAvIDQgLSAxKTsKKwkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9CisJCQljcHVfdG9fbGUxNigoY3dfbWF4ICsgMSkgLyAyIC0gMSk7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDI7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOworCQlpZiAoaXNfbGVnYWN5KQorCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9CisJCQkJY3B1X3RvX2xlMTYoMzI2NCk7CisJCWVsc2UKKwkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQorCQkJCWNwdV90b19sZTE2KDE1MDQpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQorCQkJCWNwdV90b19sZTE2KGN3X21pbik7CisJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KKwkJCQljcHVfdG9fbGUxNihjd19tYXgpOworCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gYWlmczsKKwkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPSAwOworCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7CisJCX0KKwl9CisJSVdMX0RFQlVHX1FPUygic2V0IFFvUyB0byBkZWZhdWx0IFxuIik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bGNvcmVfcmVzZXRfcW9zKTsKKworLyoqCisgKiBpd2xjb3JlX3NldF9yeG9uX2NoYW5uZWwgLSBTZXQgdGhlIHBoeW1vZGUgYW5kIGNoYW5uZWwgdmFsdWVzIGluIHN0YWdpbmcgUlhPTgorICogQHBoeW1vZGU6IE1PREVfSUVFRTgwMjExQSBzZXRzIHRvIDUuMkdIejsgYWxsIGVsc2Ugc2V0IHRvIDIuNEdIegorICogQGNoYW5uZWw6IEFueSBjaGFubmVsIHZhbGlkIGZvciB0aGUgcmVxdWVzdGVkIHBoeW1vZGUKKworICogSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgc3RhZ2luZyBSWE9OLCBwcml2LT5waHltb2RlIGlzIGFsc28gc2V0LgorICoKKyAqIE5PVEU6ICBEb2VzIG5vdCBjb21taXQgdG8gdGhlIGhhcmR3YXJlOyBpdCBzZXRzIGFwcHJvcHJpYXRlIGJpdCBmaWVsZHMKKyAqIGluIHRoZSBzdGFnaW5nIFJYT04gZmxhZyBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIHBoeW1vZGUKKyAqLworaW50IGl3bGNvcmVfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJCXUxNiBjaGFubmVsKQoreworCWlmICghaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCkpIHsKKwkJSVdMX0RFQlVHX0lORk8oIkNvdWxkIG5vdCBzZXQgY2hhbm5lbCB0byAlZCBbJWRdXG4iLAorCQkJICAgICAgIGNoYW5uZWwsIGJhbmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSA9PSBjaGFubmVsKSAmJgorCSAgICAocHJpdi0+YmFuZCA9PSBiYW5kKSkKKwkJcmV0dXJuIDA7CisKKwlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOworCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfQkFORF8yNEdfTVNLOworCWVsc2UKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKKworCXByaXYtPmJhbmQgPSBiYW5kOworCisJSVdMX0RFQlVHX0lORk8oIlN0YWdpbmcgY2hhbm5lbCBzZXQgdG8gJWQgWyVkXVxuIiwgY2hhbm5lbCwgYmFuZCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsY29yZV9zZXRfcnhvbl9jaGFubmVsKTsKKworc3RhdGljIHZvaWQgaXdsY29yZV9pbml0X2h3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHByaXYtPmh3OworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gIml3bC00OTY1LXJzIjsKKworCS8qIFRlbGwgbWFjODAyMTEgYW5kIGl0cyBjbGllbnRzIChlLmcuIFdpcmVsZXNzIEV4dGVuc2lvbnMpCisJICoJIHRoZSByYW5nZSBvZiBzaWduYWwgcXVhbGl0eSB2YWx1ZXMgdGhhdCB3ZSdsbCBwcm92aWRlLgorCSAqIE5lZ2F0aXZlIHZhbHVlcyBmb3IgbGV2ZWwvbm9pc2UgaW5kaWNhdGUgdGhhdCB3ZSdsbCBwcm92aWRlIGRCbS4KKwkgKiBGb3IgV0UsIGF0IGxlYXN0LCBub24tMCB2YWx1ZXMgaGVyZSAqZW5hYmxlKiBkaXNwbGF5IG9mIHZhbHVlcworCSAqCSBpbiBhcHAgKGl3Y29uZmlnKS4gKi8KKwlody0+bWF4X3Jzc2kgPSAtMjA7IC8qIHNpZ25hbCBsZXZlbCwgbmVnYXRpdmUgaW5kaWNhdGVzIGRCbSAqLworCWh3LT5tYXhfbm9pc2UgPSAtMjA7CS8qIG5vaXNlIGxldmVsLCBuZWdhdGl2ZSBpbmRpY2F0ZXMgZEJtICovCisJaHctPm1heF9zaWduYWwgPSAxMDA7CS8qIGxpbmsgcXVhbGl0eSBpbmRpY2F0aW9uICglKSAqLworCisJLyogVGVsbCBtYWM4MDIxMSBvdXIgVHggY2hhcmFjdGVyaXN0aWNzICovCisJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfR0VOX0JFQUNPTl9URU1QTEFURTsKKworCS8qIERlZmF1bHQgdmFsdWU7IDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLworCWh3LT5xdWV1ZXMgPSA0OworI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJLyogRW5oYW5jZWQgdmFsdWU7IG1vcmUgcXVldWVzLCB0byBzdXBwb3J0IDExbiBhZ2dyZWdhdGlvbiAqLworCWh3LT5xdWV1ZXMgPSAxNjsKKyNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLworfQorCitpbnQgaXdsX3NldHVwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpd2xjb3JlX2luaXRfaHcocHJpdik7CisJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aW5pdF9kcnYocHJpdik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldHVwKTsKKworLyogTG93IGxldmVsIGRyaXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdXBkYXRlIGl3bGNvcmUgd2l0aAorICogZHJpdmVyIHN0YXR1cy4KKyAqLworaW50IGl3bGNvcmVfbG93X2xldmVsX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBlbnVtIGl3bGNvcmVfY2FyZF9ub3RpZnkgbm90aWZ5KQoreworCWludCByZXQ7CisJc3dpdGNoIChub3RpZnkpIHsKKwljYXNlIElXTENPUkVfSU5JVF9FVlQ6CisJCXJldCA9IGl3bF9yZmtpbGxfaW5pdChwcml2KTsKKwkJaWYgKHJldCkKKwkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQkJCSAgIklnbm9yaW5nIGVycm9yOiAlZFxuIiwgcmV0KTsKKwkJYnJlYWs7CisJY2FzZSBJV0xDT1JFX1NUQVJUX0VWVDoKKwkJYnJlYWs7CisJY2FzZSBJV0xDT1JFX1NUT1BfRVZUOgorCQlicmVhazsKKwljYXNlIElXTENPUkVfUkVNT1ZFX0VWVDoKKwkJaXdsX3Jma2lsbF91bnJlZ2lzdGVyKHByaXYpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsY29yZV9sb3dfbGV2ZWxfbm90aWZ5KTsKKworaW50IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzKQoreworCXUzMiBzdGF0X2ZsYWdzID0gMDsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gUkVQTFlfU1RBVElTVElDU19DTUQsCisJCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5sZW4gPSBzaXplb2Yoc3RhdF9mbGFncyksCisJCS5kYXRhID0gKHU4ICopICZzdGF0X2ZsYWdzLAorCX07CisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTNkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTAsMCArMSwyNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogVG9tYXMgV2lua2xlciA8dG9tYXMud2lua2xlckBpbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICogQlNEIExJQ0VOU0UKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9faXdsX2NvcmVfaF9fCisjZGVmaW5lIF9faXdsX2NvcmVfaF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zICoKKyAqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgaXdsX2hvc3RfY21kOworc3RydWN0IGl3bF9jbWQ7CisKKworI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gIjEuMi4yNmsiCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDggSW50ZWwgQ29ycG9yYXRpb24iCisKKyNkZWZpbmUgSVdMX1BDSV9ERVZJQ0UoZGV2LCBzdWJkZXYsIGNmZykgXAorCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLCAgLmRldmljZSA9IChkZXYpLCBcCisJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsIC5zdWJkZXZpY2UgPSAoc3ViZGV2KSwgXAorCS5kcml2ZXJfZGF0YSA9IChrZXJuZWxfdWxvbmdfdCkmKGNmZykKKworI2RlZmluZSBJV0xfU0tVX0cgICAgICAgMHgxCisjZGVmaW5lIElXTF9TS1VfQSAgICAgICAweDIKKyNkZWZpbmUgSVdMX1NLVV9OICAgICAgIDB4OAorCitzdHJ1Y3QgaXdsX2hjbWRfb3BzIHsKKwlpbnQgKCpyeG9uX2Fzc29jKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworfTsKK3N0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgeworCWludCAoKmVucXVldWVfaGNtZCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOworfTsKKworc3RydWN0IGl3bF9saWJfb3BzIHsKKwkvKiBpd2x3aWZpIGRyaXZlciAocHJpdikgaW5pdCAqLworCWludCAoKmluaXRfZHJ2KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCS8qIHNldCBodyBkZXBlbmRhbnQgcGVyYW1ldGVycyAqLworCWludCAoKnNldF9od19wYXJhbXMpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKKwl2b2lkICgqdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSwKKwkJCQkJdTE2IGJ5dGVfY250KTsKKwkvKiBuaWMgaW5pdCAqLworCWludCAoKmh3X25pY19pbml0KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCS8qIGFsaXZlIG5vdGlmaWNhdGlvbiAqLworCWludCAoKmFsaXZlX25vdGlmeSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkvKiBjaGVjayB2YWxpZGl0eSBvZiBydGMgZGF0YSBhZGRyZXNzICovCisJaW50ICgqaXNfdmFsaWRfcnRjX2RhdGFfYWRkcikodTMyIGFkZHIpOworCS8qIDFzdCB1Y29kZSBsb2FkICovCisJaW50ICgqbG9hZF91Y29kZSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkvKiByZmtpbGwgKi8KKwl2b2lkICgqcmFkaW9fa2lsbF9zdykoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgZGlzYWJsZV9yYWRpbyk7CisJLyogZWVwcm9tIG9wZXJhdGlvbnMgKGFzIGRlZmluZWQgaW4gaXdsLWVlcHJvbS5oKSAqLworCXN0cnVjdCBpd2xfZWVwcm9tX29wcyBlZXByb21fb3BzOworfTsKKworc3RydWN0IGl3bF9vcHMgeworCWNvbnN0IHN0cnVjdCBpd2xfbGliX29wcyAqbGliOworCWNvbnN0IHN0cnVjdCBpd2xfaGNtZF9vcHMgKmhjbWQ7CisJY29uc3Qgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyAqdXRpbHM7Cit9OworCitzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgeworCWludCBkaXNhYmxlOwkJLyogZGVmOiAwID0gZW5hYmxlIHJhZGlvICovCisJaW50IHN3X2NyeXB0bzsJCS8qIGRlZjogMCA9IHVzaW5nIGhhcmR3YXJlIGVuY3J5cHRpb24gKi8KKwlpbnQgZGVidWc7CQkvKiBkZWY6IDAgPSBtaW5pbWFsIGRlYnVnIGxvZyBtZXNzYWdlcyAqLworCWludCBkaXNhYmxlX2h3X3NjYW47CS8qIGRlZjogMCA9IHVzZSBoL3cgc2NhbiAqLworCWludCBudW1fb2ZfcXVldWVzOwkvKiBkZWY6IEhXIGRlcGVuZGVudCAqLworCWludCBlbmFibGVfcW9zOwkJLyogZGVmOiAxID0gdXNlIHF1YWxpdHkgb2Ygc2VydmljZSAqLworCWludCBhbXNkdV9zaXplXzhLOwkvKiBkZWY6IDEgPSBlbmFibGUgOEsgYW1zZHUgc2l6ZSAqLworCWludCBhbnRlbm5hOyAgCQkvKiBkZWY6IDAgPSBib3RoIGFudGVubmFzICh1c2UgZGl2ZXJzaXR5KSAqLworfTsKKworc3RydWN0IGl3bF9jZmcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZndfbmFtZTsKKwl1bnNpZ25lZCBpbnQgc2t1OworCWNvbnN0IHN0cnVjdCBpd2xfb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IGl3bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBMIGkgYiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGllZWU4MDIxMV9odyAqaXdsX2FsbG9jX2FsbChzdHJ1Y3QgaXdsX2NmZyAqY2ZnLAorCQlzdHJ1Y3QgaWVlZTgwMjExX29wcyAqaHdfb3BzKTsKKwordm9pZCBpd2xjb3JlX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bGNvcmVfcmVzZXRfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsY29yZV9zZXRfcnhvbl9jaGFubmVsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJdTE2IGNoYW5uZWwpOworCitpbnQgaXdsX3NldHVwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBTIGUgbiBkIGkgbiBnICAgICBIIG8gcyB0ICAgICBDIG8gbSBtIGEgbiBkIHMgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NvbnN0IGNoYXIgKmdldF9jbWRfc3RyaW5nKHU4IGNtZCk7CitpbnQgX19tdXN0X2NoZWNrIGl3bF9zZW5kX2NtZF9zeW5jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOworaW50IGl3bF9zZW5kX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCk7CitpbnQgX19tdXN0X2NoZWNrIGl3bF9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpZCwKKwkJCQkgIHUxNiBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpOworaW50IGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwKKwkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICBpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7CisvKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCisKKyNkZWZpbmUgU1RBVFVTX0hDTURfQUNUSVZFCTAJLyogaG9zdCBjb21tYW5kIGluIHByb2dyZXNzICovCisjZGVmaW5lIFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFCTEJLyogc3luYyBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgU1RBVFVTX0lOVF9FTkFCTEVECTIKKyNkZWZpbmUgU1RBVFVTX1JGX0tJTExfSFcJMworI2RlZmluZSBTVEFUVVNfUkZfS0lMTF9TVwk0CisjZGVmaW5lIFNUQVRVU19JTklUCQk1CisjZGVmaW5lIFNUQVRVU19BTElWRQkJNgorI2RlZmluZSBTVEFUVVNfUkVBRFkJCTcKKyNkZWZpbmUgU1RBVFVTX1RFTVBFUkFUVVJFCTgKKyNkZWZpbmUgU1RBVFVTX0dFT19DT05GSUdVUkVECTkKKyNkZWZpbmUgU1RBVFVTX0VYSVRfUEVORElORwkxMAorI2RlZmluZSBTVEFUVVNfSU5fU1VTUEVORAkxMQorI2RlZmluZSBTVEFUVVNfU1RBVElTVElDUwkxMgorI2RlZmluZSBTVEFUVVNfU0NBTk5JTkcJCTEzCisjZGVmaW5lIFNUQVRVU19TQ0FOX0FCT1JUSU5HCTE0CisjZGVmaW5lIFNUQVRVU19TQ0FOX0hXCQkxNQorI2RlZmluZSBTVEFUVVNfUE9XRVJfUE1JCTE2CisjZGVmaW5lIFNUQVRVU19GV19FUlJPUgkJMTcKKyNkZWZpbmUgU1RBVFVTX0NPTkZfUEVORElORwkxOAorCisKK3N0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19yZWFkeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogVGhlIGFkYXB0ZXIgaXMgJ3JlYWR5JyBpZiBSRUFEWSBhbmQgR0VPX0NPTkZJR1VSRUQgYml0cyBhcmUKKwkgKiBzZXQgYnV0IEVYSVRfUEVORElORyBpcyBub3QgKi8KKwlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSAmJgorCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpICYmCisJICAgICAgICF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXdsX2lzX2FsaXZlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX0FMSVZFLCAmcHJpdi0+c3RhdHVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXdsX2lzX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19yZmtpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKKwkgICAgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpd2xfaXNfcmVhZHlfcmYoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCisJCXJldHVybiAwOworCisJcmV0dXJuIGl3bF9pc19yZWFkeShwcml2KTsKK30KKworCitlbnVtIGl3bGNvcmVfY2FyZF9ub3RpZnkgeworCUlXTENPUkVfSU5JVF9FVlQgPSAwLAorCUlXTENPUkVfU1RBUlRfRVZUID0gMSwKKwlJV0xDT1JFX1NUT1BfRVZUID0gMiwKKwlJV0xDT1JFX1JFTU9WRV9FVlQgPSAzLAorfTsKKworaW50IGl3bGNvcmVfbG93X2xldmVsX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIGVudW0gaXdsY29yZV9jYXJkX25vdGlmeSBub3RpZnkpOworZXh0ZXJuIGludCBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmbGFncyk7CitpbnQgaXdsX3NlbmRfbHFfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgIHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqbHEsIHU4IGZsYWdzKTsKKworc3RhdGljIGlubGluZSBpbnQgaXdsX3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHByaXYtPmNmZy0+b3BzLT5oY21kLT5yeG9uX2Fzc29jKHByaXYpOworfQorCisjZW5kaWYgLyogX19pd2xfY29yZV9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3MjU3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCkBAIC0wLDAgKzEsMjY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAqIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICogQlNEIExJQ0VOU0UKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qPT09IENTUiAoY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycykgPT09Ki8KKyNkZWZpbmUgQ1NSX0JBU0UgICAgKDB4MDAwKQorCisjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHICAgIChDU1JfQkFTRSsweDAwMCkgLyogaGFyZHdhcmUgaW50ZXJmYWNlIGNvbmZpZyAqLworI2RlZmluZSBDU1JfSU5UX0NPQUxFU0NJTkcgICAgICAoQ1NSX0JBU0UrMHgwMDQpIC8qIGFjY3VtIGludHMsIDMyLXVzZWMgdW5pdHMgKi8KKyNkZWZpbmUgQ1NSX0lOVCAgICAgICAgICAgICAgICAgKENTUl9CQVNFKzB4MDA4KSAvKiBob3N0IGludGVycnVwdCBzdGF0dXMvYWNrICovCisjZGVmaW5lIENTUl9JTlRfTUFTSyAgICAgICAgICAgIChDU1JfQkFTRSsweDAwYykgLyogaG9zdCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIENTUl9GSF9JTlRfU1RBVFVTICAgICAgIChDU1JfQkFTRSsweDAxMCkgLyogYnVzbWFzdGVyIGludCBzdGF0dXMvYWNrKi8KKyNkZWZpbmUgQ1NSX0dQSU9fSU4gICAgICAgICAgICAgKENTUl9CQVNFKzB4MDE4KSAvKiByZWFkIGV4dGVybmFsIGNoaXAgcGlucyAqLworI2RlZmluZSBDU1JfUkVTRVQgICAgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwMjApIC8qIGJ1c21hc3RlciBlbmFibGUsIE5NSSwgZXRjKi8KKyNkZWZpbmUgQ1NSX0dQX0NOVFJMICAgICAgICAgICAgKENTUl9CQVNFKzB4MDI0KQorCisvKgorICogSGFyZHdhcmUgcmV2aXNpb24gaW5mbworICogQml0IGZpZWxkczoKKyAqIDMxLTg6ICBSZXNlcnZlZAorICogIDctNDogIFR5cGUgb2YgZGV2aWNlOiAgMHgwID0gNDk2NSwgMHhkID0gMzk0NQorICogIDMtMjogIFJldmlzaW9uIHN0ZXA6ICAwID0gQSwgMSA9IEIsIDIgPSBDLCAzID0gRAorICogIDEtMDogICJEYXNoIiB2YWx1ZSwgYXMgaW4gQS0xLCBldGMuCisgKgorICogTk9URTogIFJldmlzaW9uIHN0ZXAgYWZmZWN0cyBjYWxjdWxhdGlvbiBvZiBDQ0sgdHhwb3dlciBmb3IgNDk2NS4KKyAqLworI2RlZmluZSBDU1JfSFdfUkVWICAgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwMjgpCisKKy8qIEVFUFJPTSByZWFkcyAqLworI2RlZmluZSBDU1JfRUVQUk9NX1JFRyAgICAgICAgICAoQ1NSX0JBU0UrMHgwMmMpCisjZGVmaW5lIENTUl9FRVBST01fR1AgICAgICAgICAgIChDU1JfQkFTRSsweDAzMCkKKyNkZWZpbmUgQ1NSX0dQX1VDT0RFCQkoQ1NSX0JBU0UrMHgwNDQpCisjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxICAgICAgIChDU1JfQkFTRSsweDA1NCkKKyNkZWZpbmUgQ1NSX1VDT0RFX0RSVl9HUDFfU0VUICAgKENTUl9CQVNFKzB4MDU4KQorI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9DTFIgICAoQ1NSX0JBU0UrMHgwNWMpCisjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AyICAgICAgIChDU1JfQkFTRSsweDA2MCkKKyNkZWZpbmUgQ1NSX0dJT19DSElDS0VOX0JJVFMgICAgKENTUl9CQVNFKzB4MTAwKQorI2RlZmluZSBDU1JfTEVEX1JFRyAgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwOTQpCisKKy8qIEFuYWxvZyBwaGFzZS1sb2NrLWxvb3AgY29uZmlndXJhdGlvbiAoMzk0NSBvbmx5KQorICogU2V0IGJpdCAyNC4gKi8KKyNkZWZpbmUgQ1NSX0FOQV9QTExfQ0ZHICAgICAgICAgKENTUl9CQVNFKzB4MjBjKQorLyoKKyAqIEluZGljYXRlcyBoYXJkd2FyZSByZXYsIHRvIGRldGVybWluZSBDQ0sgYmFja29mZiBmb3IgdHhwb3dlciBjYWxjdWxhdGlvbi4KKyAqIEJpdCBmaWVsZHM6CisgKiAgMy0yOiAgMCA9IEEsIDEgPSBCLCAyID0gQywgMyA9IEQgc3RlcAorICovCisjZGVmaW5lIENTUl9IV19SRVZfV0FfUkVHCShDU1JfQkFTRSsweDIyQykKKworLyogQml0cyBmb3IgQ1NSX0hXX0lGX0NPTkZJR19SRUcgKi8KKyNkZWZpbmUgQ1NSNDlfSFdfSUZfQ09ORklHX1JFR19CSVRfNDk2NV9SCSgweDAwMDAwMDEwKQorI2RlZmluZSBDU1I0OV9IV19JRl9DT05GSUdfUkVHX01TS19CT0FSRF9WRVIJKDB4MDAwMDBDMDApCisjZGVmaW5lIENTUjQ5X0hXX0lGX0NPTkZJR19SRUdfQklUX01BQ19TSQkJKDB4MDAwMDAxMDApCisjZGVmaW5lIENTUjQ5X0hXX0lGX0NPTkZJR19SRUdfQklUX1JBRElPX1NJCSgweDAwMDAwMjAwKQorCisjZGVmaW5lIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTUIgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NTSAgICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9TS1VfTVJDICAgICAgICAgICAgKDB4MDAwMDA0MDApCisjZGVmaW5lIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUgICAgICAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0IgICAgKDB4MDAwMDEwMDApCisKKyNkZWZpbmUgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNICAgICAoMHgwMDIwMDAwMCkKKworLyogaW50ZXJydXB0IGZsYWdzIGluIElOVEEsIHNldCBieSB1Q29kZSBvciBoYXJkd2FyZSAoZS5nLiBkbWEpLAorICogYWNrbm93bGVkZ2VkIChyZXNldCkgYnkgaG9zdCB3cml0aW5nICIxIiB0byBmbGFnZ2VkIGJpdHMuICovCisjZGVmaW5lIENTUl9JTlRfQklUX0ZIX1JYICAgICAgICAoMSA8PCAzMSkgLyogUnggRE1BLCBjbWQgcmVzcG9uc2VzLCBGSF9JTlRbMTc6MTZdICovCisjZGVmaW5lIENTUl9JTlRfQklUX0hXX0VSUiAgICAgICAoMSA8PCAyOSkgLyogRE1BIGhhcmR3YXJlIGVycm9yIEZIX0lOVFszMV0gKi8KKyNkZWZpbmUgQ1NSX0lOVF9CSVRfRE5MRCAgICAgICAgICgxIDw8IDI4KSAvKiB1Q29kZSBEb3dubG9hZCAqLworI2RlZmluZSBDU1JfSU5UX0JJVF9GSF9UWCAgICAgICAgKDEgPDwgMjcpIC8qIFR4IERNQSBGSF9JTlRbMTowXSAqLworI2RlZmluZSBDU1JfSU5UX0JJVF9TQ0QgICAgICAgICAgKDEgPDwgMjYpIC8qIFRYUSBwb2ludGVyIGFkdmFuY2VkICovCisjZGVmaW5lIENTUl9JTlRfQklUX1NXX0VSUiAgICAgICAoMSA8PCAyNSkgLyogdUNvZGUgZXJyb3IgKi8KKyNkZWZpbmUgQ1NSX0lOVF9CSVRfUkZfS0lMTCAgICAgICgxIDw8IDcpICAvKiBIVyBSRktJTEwgc3dpdGNoIEdQX0NOVFJMWzI3XSB0b2dnbGVkICovCisjZGVmaW5lIENTUl9JTlRfQklUX0NUX0tJTEwgICAgICAoMSA8PCA2KSAgLyogQ3JpdGljYWwgdGVtcCAoY2hpcCB0b28gaG90KSByZmtpbGwgKi8KKyNkZWZpbmUgQ1NSX0lOVF9CSVRfU1dfUlggICAgICAgICgxIDw8IDMpICAvKiBSeCwgY29tbWFuZCByZXNwb25zZXMsIDM5NDUgKi8KKyNkZWZpbmUgQ1NSX0lOVF9CSVRfV0FLRVVQICAgICAgICgxIDw8IDEpICAvKiBOSUMgY29udHJvbGxlciB3YWtpbmcgdXAgKHB3ciBtZ210KSAqLworI2RlZmluZSBDU1JfSU5UX0JJVF9BTElWRSAgICAgICAgKDEgPDwgMCkgIC8qIHVDb2RlIGludGVycnVwdHMgb25jZSBpdCBpbml0aWFsaXplcyAqLworCisjZGVmaW5lIENTUl9JTklfU0VUX01BU0sJKENTUl9JTlRfQklUX0ZIX1JYICAgfCBcCisJCQkJIENTUl9JTlRfQklUX0hXX0VSUiAgfCBcCisJCQkJIENTUl9JTlRfQklUX0ZIX1RYICAgfCBcCisJCQkJIENTUl9JTlRfQklUX1NXX0VSUiAgfCBcCisJCQkJIENTUl9JTlRfQklUX1JGX0tJTEwgfCBcCisJCQkJIENTUl9JTlRfQklUX1NXX1JYICAgfCBcCisJCQkJIENTUl9JTlRfQklUX1dBS0VVUCAgfCBcCisJCQkJIENTUl9JTlRfQklUX0FMSVZFKQorCisvKiBpbnRlcnJ1cHQgZmxhZ3MgaW4gRkggKGZsb3cgaGFuZGxlcikgKFBDSSBidXNtYXN0ZXIgRE1BKSAqLworI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9FUlIgICAgICAgKDEgPDwgMzEpIC8qIEVycm9yICovCisjZGVmaW5lIENTUl9GSF9JTlRfQklUX0hJX1BSSU9SICAoMSA8PCAzMCkgLyogSGlnaCBwcmlvcml0eSBSeCwgYnlwYXNzIGNvYWxlc2NpbmcgKi8KKyNkZWZpbmUgQ1NSMzlfRkhfSU5UX0JJVF9SWF9DSE5MMiAgKDEgPDwgMTgpIC8qIFJ4IGNoYW5uZWwgMiAoMzk0NSBvbmx5KSAqLworI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMSAgKDEgPDwgMTcpIC8qIFJ4IGNoYW5uZWwgMSAqLworI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMCAgKDEgPDwgMTYpIC8qIFJ4IGNoYW5uZWwgMCAqLworI2RlZmluZSBDU1IzOV9GSF9JTlRfQklUX1RYX0NITkw2ICAoMSA8PCA2KSAgLyogVHggY2hhbm5lbCA2ICgzOTQ1IG9ubHkpICovCisjZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwxICAoMSA8PCAxKSAgLyogVHggY2hhbm5lbCAxICovCisjZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwwICAoMSA8PCAwKSAgLyogVHggY2hhbm5lbCAwICovCisKKyNkZWZpbmUgQ1NSMzlfRkhfSU5UX1JYX01BU0sJKENTUl9GSF9JTlRfQklUX0hJX1BSSU9SIHwgXAorCQkJCSBDU1IzOV9GSF9JTlRfQklUX1JYX0NITkwyIHwgXAorCQkJCSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMSB8IFwKKwkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDApCisKKworI2RlZmluZSBDU1IzOV9GSF9JTlRfVFhfTUFTSwkoQ1NSMzlfRkhfSU5UX0JJVF9UWF9DSE5MNiB8IFwKKwkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDEgfCBcCisJCQkJIENTUl9GSF9JTlRfQklUX1RYX0NITkwwKQorCisjZGVmaW5lIENTUjQ5X0ZIX0lOVF9SWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9ISV9QUklPUiB8IFwKKwkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDEgfCBcCisJCQkJIENTUl9GSF9JTlRfQklUX1JYX0NITkwwKQorCisjZGVmaW5lIENTUjQ5X0ZIX0lOVF9UWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9UWF9DSE5MMSB8IFwKKwkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDApCisKKworLyogUkVTRVQgKi8KKyNkZWZpbmUgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIENTUl9SRVNFVF9SRUdfRkxBR19GT1JDRV9OTUkgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCAgICAgICAgICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIENTUl9SRVNFVF9SRUdfRkxBR19TVE9QX01BU1RFUiAgICAgICAgICAgICAgICgweDAwMDAwMjAwKQorCisvKiBHUCAoZ2VuZXJhbCBwdXJwb3NlKSBDT05UUk9MICovCisjZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRICAgICAgICAgKDB4MDAwMDAwMDgpCisjZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCAgICAgICAgICgweDAwMDAwMDEwKQorCisjZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfVkFMX01BQ19BQ0NFU1NfRU4gICAgICAgICAgICgweDAwMDAwMDAxKQorCisjZGVmaW5lIENTUl9HUF9DTlRSTF9SRUdfTVNLX1BPV0VSX1NBVkVfVFlQRSAgICAgICAgICgweDA3MDAwMDAwKQorI2RlZmluZSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX1BPV0VSX1NBVkUgICAgICAgICAoMHgwNDAwMDAwMCkKKyNkZWZpbmUgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cgICAgICAgICAgKDB4MDgwMDAwMDApCisKKworLyogRUVQUk9NIFJFRyAqLworI2RlZmluZSBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSwkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgQ1NSX0VFUFJPTV9SRUdfQklUX0NNRAkJKDB4MDAwMDAwMDIpCisKKy8qIEVFUFJPTSBHUCAqLworI2RlZmluZSBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSwkJKDB4MDAwMDAwMDYpCisjZGVmaW5lIENTUl9FRVBST01fR1BfQkFEX1NJR05BVFVSRQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgQ1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0sJKDB4MDAwMDAxODApCisKKy8qIFVDT0RFIERSViBHUCAqLworI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQICAgICAgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQgICAgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9SRUdfQklUX0NUX0tJTExfRVhJVCAgICAgICgweDAwMDAwMDA4KQorCisvKiBHUElPICovCisjZGVmaW5lIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDApCisjZGVmaW5lIENTUl9HUElPX0lOX1ZBTF9WQVVYX1BXUl9TUkMgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIENTUl9HUElPX0lOX1ZBTF9WTUFJTl9QV1JfU1JDCQlDU1JfR1BJT19JTl9CSVRfQVVYX1BPV0VSCisKKy8qIEdJIENoaWNrZW4gQml0cyAqLworI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlggICgweDAwODAwMDAwKQorI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUiAgKDB4MjAwMDAwMDApCisKKy8qIExFRCAqLworI2RlZmluZSBDU1JfTEVEX0JTTV9DVFJMX01TSyAoMHhGRkZGRkZERikKKyNkZWZpbmUgQ1NSX0xFRF9SRUdfVFJVTl9PTiAoMHg3OCkKKyNkZWZpbmUgQ1NSX0xFRF9SRUdfVFJVTl9PRkYgKDB4MzgpCisKKy8qPT09IEhCVVMgKEhvc3Qtc2lkZSBCdXMpID09PSovCisjZGVmaW5lIEhCVVNfQkFTRQkoMHg0MDApCisvKgorICogUmVnaXN0ZXJzIGZvciBhY2Nlc3NpbmcgZGV2aWNlJ3MgaW50ZXJuYWwgU1JBTSBtZW1vcnkgKGUuZy4gU0NEIFNSQU0KKyAqIHN0cnVjdHVyZXMsIGVycm9yIGxvZywgZXZlbnQgbG9nLCB2ZXJpZnlpbmcgdUNvZGUgbG9hZCkuCisgKiBGaXJzdCB3cml0ZSB0byBhZGRyZXNzIHJlZ2lzdGVyLCB0aGVuIHJlYWQgZnJvbSBvciB3cml0ZSB0byBkYXRhIHJlZ2lzdGVyCisgKiB0byBjb21wbGV0ZSB0aGUgam9iLiAgT25jZSB0aGUgYWRkcmVzcyByZWdpc3RlciBpcyBzZXQgdXAsIGFjY2Vzc2VzIHRvCisgKiBkYXRhIHJlZ2lzdGVycyBhdXRvLWluY3JlbWVudCB0aGUgYWRkcmVzcyBieSBvbmUgZHdvcmQuCisgKiBCaXQgdXNhZ2UgZm9yIGFkZHJlc3MgcmVnaXN0ZXJzIChyZWFkIG9yIHdyaXRlKToKKyAqICAwLTMxOiAgbWVtb3J5IGFkZHJlc3Mgd2l0aGluIGRldmljZQorICovCisjZGVmaW5lIEhCVVNfVEFSR19NRU1fUkFERFIgICAgIChIQlVTX0JBU0UrMHgwMGMpCisjZGVmaW5lIEhCVVNfVEFSR19NRU1fV0FERFIgICAgIChIQlVTX0JBU0UrMHgwMTApCisjZGVmaW5lIEhCVVNfVEFSR19NRU1fV0RBVCAgICAgIChIQlVTX0JBU0UrMHgwMTgpCisjZGVmaW5lIEhCVVNfVEFSR19NRU1fUkRBVCAgICAgIChIQlVTX0JBU0UrMHgwMWMpCisKKy8qCisgKiBSZWdpc3RlcnMgZm9yIGFjY2Vzc2luZyBkZXZpY2UncyBpbnRlcm5hbCBwZXJpcGhlcmFsIHJlZ2lzdGVycworICogKGUuZy4gU0NELCBCU00sIGV0Yy4pLiAgRmlyc3Qgd3JpdGUgdG8gYWRkcmVzcyByZWdpc3RlciwKKyAqIHRoZW4gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGRhdGEgcmVnaXN0ZXIgdG8gY29tcGxldGUgdGhlIGpvYi4KKyAqIEJpdCB1c2FnZSBmb3IgYWRkcmVzcyByZWdpc3RlcnMgKHJlYWQgb3Igd3JpdGUpOgorICogIDAtMTU6ICByZWdpc3RlciBhZGRyZXNzIChvZmZzZXQpIHdpdGhpbiBkZXZpY2UKKyAqIDI0LTI1OiAgKCMgYnl0ZXMgLSAxKSB0byByZWFkIG9yIHdyaXRlIChlLmcuIDMgZm9yIGR3b3JkKQorICovCisjZGVmaW5lIEhCVVNfVEFSR19QUlBIX1dBRERSICAgIChIQlVTX0JBU0UrMHgwNDQpCisjZGVmaW5lIEhCVVNfVEFSR19QUlBIX1JBRERSICAgIChIQlVTX0JBU0UrMHgwNDgpCisjZGVmaW5lIEhCVVNfVEFSR19QUlBIX1dEQVQgICAgIChIQlVTX0JBU0UrMHgwNGMpCisjZGVmaW5lIEhCVVNfVEFSR19QUlBIX1JEQVQgICAgIChIQlVTX0JBU0UrMHgwNTApCisKKy8qCisgKiBQZXItVHgtcXVldWUgd3JpdGUgcG9pbnRlciAoaW5kZXgsIHJlYWxseSEpICgzOTQ1IGFuZCA0OTY1KS4KKyAqIEluZGljYXRlcyBpbmRleCB0byBuZXh0IFRGRCB0aGF0IGRyaXZlciB3aWxsIGZpbGwgKDEgcGFzdCBsYXRlc3QgZmlsbGVkKS4KKyAqIEJpdCB1c2FnZToKKyAqICAwLTc6ICBxdWV1ZSB3cml0ZSBpbmRleAorICogMTEtODogIHF1ZXVlIHNlbGVjdG9yCisgKi8KKyNkZWZpbmUgSEJVU19UQVJHX1dSUFRSICAgICAgICAgKEhCVVNfQkFTRSsweDA2MCkKKyNkZWZpbmUgSEJVU19UQVJHX01CWF9DICAgICAgICAgKEhCVVNfQkFTRSsweDAzMCkKKworI2RlZmluZSBIQlVTX1RBUkdfTUJYX0NfUkVHX0JJVF9DTURfQkxPQ0tFRCAgICAgICAgICgweDAwMDAwMDA0KQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwNzI0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19pd2xfZGVidWdfaF9fCisjZGVmaW5lIF9faXdsX2RlYnVnX2hfXworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK2V4dGVybiB1MzIgaXdsX2RlYnVnX2xldmVsOworI2RlZmluZSBJV0xfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAorZG8geyBpZiAoaXdsX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAorICBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAorCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19GVU5DVElPTl9fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKK2RvIHsgaWYgKChpd2xfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSAmJiBuZXRfcmF0ZWxpbWl0KCkpIFwKKyAgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKKwkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKK3sKKwlpZiAoIShpd2xfZGVidWdfbGV2ZWwgJiBsZXZlbCkpCisJCXJldHVybjsKKworCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJpd2wgZGF0YTogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKKwkJCXAsIGxlbiwgMSk7Cit9CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCitzdHJ1Y3QgaXdsX2RlYnVnZnMgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGRlbnRyeSAqZGlyX2RydjsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGF0YTsKKwlzdHJ1Y3QgZGlyX2RhdGFfZmlsZXN7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3JhbTsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0aW9uczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9yeF9zdGF0aXN0aWNzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3R4X3N0YXRpc3RpY3M7CisJfSBkYmdmc19kYXRhX2ZpbGVzOworCXUzMiBzcmFtX29mZnNldDsKKwl1MzIgc3JhbV9sZW47Cit9OworCitpbnQgaXdsX2RiZ2ZzX3JlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIGl3bF9kYmdmc191bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisjZW5kaWYKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUcoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUdfTElNSVQoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfcHJpbnRfaGV4X2R1bXAoaW50IGxldmVsLCB2b2lkICpwLCB1MzIgbGVuKQoreworfQorI2VuZGlmCQkJCS8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCisKKworCisjaWZuZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKK3N0YXRpYyBpbmxpbmUgaW50IGl3bF9kYmdmc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2RiZ2ZzX3VucmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworfQorI2VuZGlmCQkJCS8qIENPTkZJR19JV0xXSUZJX0RFQlVHRlMgKi8KKworLyoKKyAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOworICoKKyAqIElmIHlvdSBhcmUgZGVmaW5pbmcgYSBuZXcgZGVidWcgY2xhc3NpZmljYXRpb24sIHNpbXBseSBhZGQgaXQgdG8gdGhlICNkZWZpbmUKKyAqIGxpc3QgaGVyZSBpbiB0aGUgZm9ybSBvZjoKKyAqCisgKiAjZGVmaW5lIElXTF9ETF94eHh4IFZBTFVFCisgKgorICogc2hpZnRpbmcgdmFsdWUgdG8gdGhlIGxlZnQgb25lIGJpdCBmcm9tIHRoZSBwcmV2aW91cyBlbnRyeS4gIHh4eHggc2hvdWxkIGJlCisgKiB0aGUgbmFtZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gKGZvciBleGFtcGxlLCBXRVApCisgKgorICogWW91IHRoZW4gbmVlZCB0byBlaXRoZXIgYWRkIGEgSVdMX3h4eHhfREVCVUcoKSBtYWNybyBkZWZpbml0aW9uIGZvciB5b3VyCisgKiBjbGFzc2lmaWNhdGlvbiwgb3IgdXNlIElXTF9ERUJVRyhJV0xfRExfeHh4eCwgLi4uKSB3aGVuZXZlciB5b3Ugd2FudAorICogdG8gc2VuZCBvdXRwdXQgdG8gdGhhdCBjbGFzc2lmaWNhdGlvbi4KKyAqCisgKiBUbyBhZGQgeW91ciBkZWJ1ZyBsZXZlbCB0byB0aGUgbGlzdCBvZiBsZXZlbHMgc2VlbiB3aGVuIHlvdSBwZXJmb3JtCisgKgorICogJSBjYXQgL3Byb2MvbmV0L2l3bC9kZWJ1Z19sZXZlbAorICoKKyAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaXdsX2RlYnVnX2xldmVscyBhcnJheS4KKyAqCisgKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaXdsIHRoZW4geW91IGRvIG5vdCBoYXZlCisgKiBDT05GSUdfSVdMV0lGSV9ERUJVRyBkZWZpbmVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KKworI2RlZmluZSBJV0xfRExfSU5GTyAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBJV0xfRExfTUFDODAyMTEgICAgICAoMSA8PCAxKQorI2RlZmluZSBJV0xfRExfSE9TVF9DT01NQU5EICAoMSA8PCAyKQorI2RlZmluZSBJV0xfRExfU1RBVEUgICAgICAgICAoMSA8PCAzKQorCisjZGVmaW5lIElXTF9ETF9SQURJTyAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElXTF9ETF9QT1dFUiAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElXTF9ETF9URU1QICAgICAgICAgICgxIDw8IDkpCisKKyNkZWZpbmUgSVdMX0RMX05PVElGICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElXTF9ETF9TQ0FOICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBJV0xfRExfQVNTT0MgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSVdMX0RMX0RST1AgICAgICAgICAgKDEgPDwgMTMpCisKKyNkZWZpbmUgSVdMX0RMX1RYUE9XRVIgICAgICAgKDEgPDwgMTQpCisKKyNkZWZpbmUgSVdMX0RMX0FQICAgICAgICAgICAgKDEgPDwgMTUpCisKKyNkZWZpbmUgSVdMX0RMX0ZXICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIElXTF9ETF9SRl9LSUxMICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBJV0xfRExfRldfRVJST1JTICAgICAoMSA8PCAxOCkKKworI2RlZmluZSBJV0xfRExfTEVEICAgICAgICAgICAoMSA8PCAxOSkKKworI2RlZmluZSBJV0xfRExfUkFURSAgICAgICAgICAoMSA8PCAyMCkKKworI2RlZmluZSBJV0xfRExfQ0FMSUIgICAgICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgSVdMX0RMX1dFUCAgICAgICAgICAgKDEgPDwgMjIpCisjZGVmaW5lIElXTF9ETF9UWCAgICAgICAgICAgICgxIDw8IDIzKQorI2RlZmluZSBJV0xfRExfUlggICAgICAgICAgICAoMSA8PCAyNCkKKyNkZWZpbmUgSVdMX0RMX0lTUiAgICAgICAgICAgKDEgPDwgMjUpCisjZGVmaW5lIElXTF9ETF9IVCAgICAgICAgICAgICgxIDw8IDI2KQorI2RlZmluZSBJV0xfRExfSU8gICAgICAgICAgICAoMSA8PCAyNykKKyNkZWZpbmUgSVdMX0RMXzExSCAgICAgICAgICAgKDEgPDwgMjgpCisKKyNkZWZpbmUgSVdMX0RMX1NUQVRTICAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIElXTF9ETF9UWF9SRVBMWSAgICAgICgxIDw8IDMwKQorI2RlZmluZSBJV0xfRExfUU9TICAgICAgICAgICAoMSA8PCAzMSkKKworI2RlZmluZSBJV0xfRVJST1IoZiwgYS4uLikgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX1dBUk5JTkcoZiwgYS4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAiIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19JTkZPKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfSU5GTywgZiwgIyMgYSkKKworI2RlZmluZSBJV0xfREVCVUdfTUFDODAyMTEoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfTUFDODAyMTEsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19URU1QKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9URU1QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfU0NBTihmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfU0NBTiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JYKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX1JYLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVFgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfVFgsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19JU1IoZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JU1IsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19MRUQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9MRUQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19XRVAoZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9XRVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hPU1RfQ09NTUFORCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0NBTElCKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQ0FMSUIsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19GVyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0ZXLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUkZfS0lMTChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1JGX0tJTEwsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19EUk9QKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0RST1BfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9EUk9QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVAoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9BUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYUE9XRVIoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9UWFBPV0VSLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSU8oZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9JTywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBVEUoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9SQVRFLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUkFURV9MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX1JBVEUsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19OT1RJRihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX05PVElGLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVNTT0MoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVNTT0NfTElNSVQoZiwgYS4uLikgXAorCUlXTF9ERUJVR19MSU1JVChJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0hUKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSFQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19TVEFUUyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfU1RBVFNfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9TVEFUUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19RT1MoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1FPUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1JBRElPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUE9XRVIoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUE9XRVIsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR18xMUgoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfMTFILCBmLCAjIyBhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTMwZTFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCkBAIC0wLDAgKzEsMzQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBUb21hcyBXaW5rbGVyIDx0b21hcy53aW5rbGVyQGludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisKKyNpbmNsdWRlICJpd2wtNDk2NS5oIgorI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWlvLmgiCisKKworLyogY3JlYXRlIGFuZCByZW1vdmUgb2YgZmlsZXMgKi8KKyNkZWZpbmUgREVCVUdGU19BRERfRElSKG5hbWUsIHBhcmVudCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkYmdmcy0+ZGlyXyMjbmFtZSA9IGRlYnVnZnNfY3JlYXRlX2RpcigjbmFtZSwgcGFyZW50KTsgICAgICAgICAgXAorCWlmICghKGRiZ2ZzLT5kaXJfIyNuYW1lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWdvdG8gZXJyOyAJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERFQlVHRlNfQUREX0ZJTEUobmFtZSwgcGFyZW50KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNjQ0LCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwcml2LCAgICAgXAorCQkJCSZpd2xfZGJnZnNfIyNuYW1lIyNfb3BzKTsgICAgICAgICAgICAgICBcCisJaWYgKCEoZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpKSAgICAgICAgICAgICAgIFwKKwkJZ290byBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERFQlVHRlNfUkVNT1ZFKG5hbWUpICBkbyB7ICAgICAgICAgICAgICBcCisJZGVidWdmc19yZW1vdmUobmFtZSk7ICAgICAgICAgICAgICAgICAgIFwKKwluYW1lID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCk7CisKKy8qIGZpbGUgb3BlcmF0aW9uICovCisjZGVmaW5lIERFQlVHRlNfUkVBRF9GVU5DKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfIyNuYW1lIyNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgICAgICAgICAgICAgICBcCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwgICAgICAgICAgXAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CisKKyNkZWZpbmUgREVCVUdGU19XUklURV9GVU5DKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc18jI25hbWUjI193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgICAgICAgICAgICAgIFwKKwkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCAgICBcCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKKworCitzdGF0aWMgaW50IGl3bF9kYmdmc19vcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCisjZGVmaW5lIERFQlVHRlNfUkVBRF9GSUxFX09QUyhuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJREVCVUdGU19SRUFEX0ZVTkMobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bF9kYmdmc18jI25hbWUjI19vcHMgPSB7ICAgICAgICAgIFwKKwkucmVhZCA9IGl3bF9kYmdmc18jI25hbWUjI19yZWFkLCAgICAgICAgICAgICAgICAgICAgICAgCQlcCisJLm9wZW4gPSBpd2xfZGJnZnNfb3Blbl9maWxlX2dlbmVyaWMsICAgICAgICAgICAgICAgICAgICAJXAorfTsKKworI2RlZmluZSBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCURFQlVHRlNfUkVBRF9GVU5DKG5hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJREVCVUdGU19XUklURV9GVU5DKG5hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bF9kYmdmc18jI25hbWUjI19vcHMgPSB7ICAgICAgICAgIFwKKwkud3JpdGUgPSBpd2xfZGJnZnNfIyNuYW1lIyNfd3JpdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5yZWFkID0gaXdsX2RiZ2ZzXyMjbmFtZSMjX3JlYWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLm9wZW4gPSBpd2xfZGJnZnNfb3Blbl9maWxlX2dlbmVyaWMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3R4X3N0YXRpc3RpY3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzI1Nl07CisJaW50IHBvcyA9IDA7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJtZ210OiAldVxuIiwKKwkJCQkJCXByaXYtPnR4X3N0YXRzWzBdLmNudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3RybDogJXVcbiIsCisJCQkJCQlwcml2LT50eF9zdGF0c1sxXS5jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRhdGE6ICV1XG4iLAorCQkJCQkJcHJpdi0+dHhfc3RhdHNbMl0uY250KTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3J4X3N0YXRpc3RpY3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzI1Nl07CisJaW50IHBvcyA9IDA7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJtZ210OiAldVxuIiwKKwkJCQkJCXByaXYtPnJ4X3N0YXRzWzBdLmNudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3RybDogJXVcbiIsCisJCQkJCQlwcml2LT5yeF9zdGF0c1sxXS5jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRhdGE6ICV1XG4iLAorCQkJCQkJcHJpdi0+cnhfc3RhdHNbMl0uY250KTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KKworI2RlZmluZSBCWVRFMV9NQVNLIDB4MDAwMDAwZmY7CisjZGVmaW5lIEJZVEUyX01BU0sgMHgwMDAwZmZmZjsKKyNkZWZpbmUgQllURTNfTUFTSyAweDAwZmZmZmZmOworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3NyYW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1MzIgdmFsOworCWNoYXIgYnVmWzEwMjRdOworCXNzaXplX3QgcmV0OworCWludCBpOworCWludCBwb3MgPSAwOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisKKwlwcmludGsoS0VSTl9ERUJVRyAib2Zmc2V0IGlzOiAweCV4XHRsZW4gaXM6IDB4JXhcbiIsCisJcHJpdi0+ZGJnZnMtPnNyYW1fb2Zmc2V0LCBwcml2LT5kYmdmcy0+c3JhbV9sZW4pOworCisJaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlmb3IgKGkgPSBwcml2LT5kYmdmcy0+c3JhbV9sZW47IGkgPiAwOyBpIC09IDQpIHsKKwkJdmFsID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHJpdi0+ZGJnZnMtPnNyYW1fb2Zmc2V0ICsgXAorCQkJCQlwcml2LT5kYmdmcy0+c3JhbV9sZW4gLSBpKTsKKwkJaWYgKGkgPCA0KSB7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgMToKKwkJCQl2YWwgJj0gQllURTFfTUFTSzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQl2YWwgJj0gQllURTJfTUFTSzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQl2YWwgJj0gQllURTNfTUFTSzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIweCUwOHggIiwgdmFsKTsKKwl9CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiXG4iKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3NyYW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzY0XTsKKwlpbnQgYnVmX3NpemU7CisJdTMyIG9mZnNldCwgbGVuOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzc2NhbmYoYnVmLCAiJXgsJXgiLCAmb2Zmc2V0LCAmbGVuKSA9PSAyKSB7CisJCXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCA9IG9mZnNldDsKKwkJcHJpdi0+ZGJnZnMtPnNyYW1fbGVuID0gbGVuOworCX0gZWxzZSB7CisJCXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCA9IDA7CisJCXByaXYtPmRiZ2ZzLT5zcmFtX2xlbiA9IDA7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc3RhdGlvbnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2w0OTY1X3N0YXRpb25fZW50cnkgKnN0YXRpb247CisJaW50IG1heF9zdGEgPSBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOworCWNoYXIgKmJ1ZjsKKwlpbnQgaSwgaiwgcG9zID0gMDsKKwlzc2l6ZV90IHJldDsKKwkvKiBBZGQgMzAgZm9yIGluaXRpYWwgc3RyaW5nICovCisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gMzAgKyBzaXplb2YoY2hhcikgKiA1MDAgKiAocHJpdi0+bnVtX3N0YXRpb25zKTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWJ1ZiA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibnVtIG9mIHN0YXRpb25zOiAlZFxuXG4iLAorCQkJcHJpdi0+bnVtX3N0YXRpb25zKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhfc3RhOyBpKyspIHsKKwkJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc1tpXTsKKwkJaWYgKHN0YXRpb24tPnVzZWQpIHsKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJInN0YXRpb24gJWQ6XG5nZW5lcmFsIGRhdGE6XG4iLCBpKzEpOworCQkJcHJpbnRfbWFjKG1hYywgc3RhdGlvbi0+c3RhLnN0YS5hZGRyKTsKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImlkOiAldVxuIiwKKwkJCQkJc3RhdGlvbi0+c3RhLnN0YS5zdGFfaWQpOworCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibW9kZTogJXVcbiIsCisJCQkJCXN0YXRpb24tPnN0YS5tb2RlKTsKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJImZsYWdzOiAweCV4XG4iLAorCQkJCQlzdGF0aW9uLT5zdGEuc3RhdGlvbl9mbGFnc19tc2spOworCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCQkicHNfc3RhdHVzOiAldVxuIiwgc3RhdGlvbi0+cHNfc3RhdHVzKTsKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInRpZCBkYXRhOlxuIik7CisJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCSJzZXFfbnVtXHRcdHR4cV9pZCIpOworI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCSJcdGZyYW1lX2NvdW50XHR3YWl0X2Zvcl9iYVx0Iik7CisJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCSJzdGFydF9pZHhcdGJpdG1hcDBcdCIpOworCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCQkiYml0bWFwMVx0cmF0ZV9uX2ZsYWdzIik7CisjZW5kaWYKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlxuIik7CisKKwkJCWZvciAoaiA9IDA7IGogPCBNQVhfVElEX0NPVU5UOyBqKyspIHsKKwkJCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCQkiWyVkXTpcdFx0JXUiLCBqLAorCQkJCQkJc3RhdGlvbi0+dGlkW2pdLnNlcV9udW1iZXIpOworI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCisJCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCQkJIlx0JXVcdFx0JXVcdFx0JXVcdFx0IiwKKwkJCQkJCXN0YXRpb24tPnRpZFtqXS5hZ2cudHhxX2lkLAorCQkJCQkJc3RhdGlvbi0+dGlkW2pdLmFnZy5mcmFtZV9jb3VudCwKKwkJCQkJCXN0YXRpb24tPnRpZFtqXS5hZ2cud2FpdF9mb3JfYmEpOworCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIldVx0JWxsdVx0JXUiLAorCQkJCQkJc3RhdGlvbi0+dGlkW2pdLmFnZy5zdGFydF9pZHgsCisJCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXN0YXRpb24tPnRpZFtqXS5hZ2cuYml0bWFwLAorCQkJCQkJc3RhdGlvbi0+dGlkW2pdLmFnZy5yYXRlX25fZmxhZ3MpOworI2VuZGlmCisJCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiXG4iKTsKKwkJCX0KKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlxuIik7CisJCX0KKwl9CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKworREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHNyYW0pOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHN0YXRpb25zKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhyeF9zdGF0aXN0aWNzKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyh0eF9zdGF0aXN0aWNzKTsKKworLyoKKyAqIENyZWF0ZSB0aGUgZGVidWdmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKKyAqCisgKi8KK2ludCBpd2xfZGJnZnNfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBpd2xfZGVidWdmcyAqZGJnZnM7CisKKwlkYmdmcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfZGVidWdmcyksIEdGUF9LRVJORUwpOworCWlmICghZGJnZnMpIHsKKwkJZ290byBlcnI7CisJfQorCisJcHJpdi0+ZGJnZnMgPSBkYmdmczsKKwlkYmdmcy0+bmFtZSA9IG5hbWU7CisJZGJnZnMtPmRpcl9kcnYgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgTlVMTCk7CisJaWYgKCFkYmdmcy0+ZGlyX2RydiB8fCBJU19FUlIoZGJnZnMtPmRpcl9kcnYpKXsKKwkJZ290byBlcnI7CisJfQorCisJREVCVUdGU19BRERfRElSKGRhdGEsIGRiZ2ZzLT5kaXJfZHJ2KTsKKwlERUJVR0ZTX0FERF9GSUxFKHNyYW0sIGRhdGEpOworCURFQlVHRlNfQUREX0ZJTEUoc3RhdGlvbnMsIGRhdGEpOworCURFQlVHRlNfQUREX0ZJTEUocnhfc3RhdGlzdGljcywgZGF0YSk7CisJREVCVUdGU19BRERfRklMRSh0eF9zdGF0aXN0aWNzLCBkYXRhKTsKKworCXJldHVybiAwOworCitlcnI6CisJSVdMX0VSUk9SKCJDYW4ndCBvcGVuIHRoZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CisJaXdsX2RiZ2ZzX3VucmVnaXN0ZXIocHJpdik7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kYmdmc19yZWdpc3Rlcik7CisKKy8qKgorICogUmVtb3ZlIHRoZSBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcworICoKKyAqLwordm9pZCBpd2xfZGJnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKCEocHJpdi0+ZGJnZnMpKQorCQlyZXR1cm47CisKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3J4X3N0YXRpc3RpY3MpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfdHhfc3RhdGlzdGljcyk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9zcmFtKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3N0YXRpb25zKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX2RhdGEpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZHJ2KTsKKwlrZnJlZShwcml2LT5kYmdmcyk7CisJcHJpdi0+ZGJnZnMgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTChpd2xfZGJnZnNfdW5yZWdpc3Rlcik7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDdkNWRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKQEAgLTAsMCArMSw1NjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogVG9tYXMgV2lua2xlciA8dG9tYXMud2lua2xlckBpbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICogQlNEIExJQ0VOU0UKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJpd2wtNDk2NS1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC00OTY1LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWlvLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFRVBST00gQkFORFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoZSBpd2xfZWVwcm9tX2JhbmQgZGVmaW5pdGlvbnMgYmVsb3cgcHJvdmlkZSB0aGUgbWFwcGluZyBmcm9tIHRoZQorICogRUVQUk9NIGNvbnRlbnRzIHRvIHRoZSBzcGVjaWZpYyBjaGFubmVsIG51bWJlciBzdXBwb3J0ZWQgZm9yIGVhY2gKKyAqIGJhbmQuCisgKgorICogRm9yIGV4YW1wbGUsIGl3bF9wcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzWzRdIGZyb20gdGhlIGJhbmRfMworICogZGVmaW5pdGlvbiBiZWxvdyBtYXBzIHRvIHBoeXNpY2FsIGNoYW5uZWwgNDIgaW4gdGhlIDUuMkdIeiBzcGVjdHJ1bS4KKyAqIFRoZSBzcGVjaWZpYyBnZW9ncmFwaHkgYW5kIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGF0IGNoYW5uZWwKKyAqIGlzIGNvbnRhaW5lZCBpbiB0aGUgZWVwcm9tIG1hcCBpdHNlbGYuCisgKgorICogRHVyaW5nIGluaXQsIHdlIGNvcHkgdGhlIGVlcHJvbSBpbmZvcm1hdGlvbiBhbmQgY2hhbm5lbCBtYXAKKyAqIGluZm9ybWF0aW9uIGludG8gcHJpdi0+Y2hhbm5lbF9pbmZvXzI0LzUyIGFuZCBwcml2LT5jaGFubmVsX21hcF8yNC81MgorICoKKyAqIGNoYW5uZWxfbWFwXzI0LzUyIHByb3ZpZGVzIHRoZSBpbmRleCBpbiB0aGUgY2hhbm5lbF9pbmZvIGFycmF5IGZvciBhCisgKiBnaXZlbiBjaGFubmVsLiAgV2UgaGF2ZSB0byBoYXZlIHR3byBzZXBhcmF0ZSBtYXBzIGFzIHRoZXJlIGlzIGNoYW5uZWwKKyAqIG92ZXJsYXAgd2l0aCB0aGUgMi40R0h6IGFuZCA1LjJHSHogc3BlY3RydW0gYXMgc2VlbiBpbiBiYW5kXzEgYW5kCisgKiBiYW5kXzIKKyAqCisgKiBBIHZhbHVlIG9mIDB4ZmYgc3RvcmVkIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbAorICogaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgYXQgYWxsLgorICoKKyAqIEEgdmFsdWUgb2YgMHhmZSBpbiB0aGUgY2hhbm5lbF9tYXAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90CisgKiB2YWxpZCBmb3IgVHggd2l0aCB0aGUgY3VycmVudCBoYXJkd2FyZS4gIFRoaXMgbWVhbnMgdGhhdAorICogd2hpbGUgdGhlIHN5c3RlbSBjYW4gdHVuZSBhbmQgcmVjZWl2ZSBvbiBhIGdpdmVuIGNoYW5uZWwsIGl0IG1heSBub3QKKyAqIGJlIGFibGUgdG8gYXNzb2NpYXRlIG9yIHRyYW5zbWl0IGFueSBmcmFtZXMgb24gdGhhdAorICogY2hhbm5lbC4gIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBpbmZvcm1hdGlvbiBmb3IgdGhhdAorICogZW50cnkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogMi40IEdIeiAqLworY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzFbMTRdID0geworCTEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNAorfTsKKworLyogNS4yIEdIeiBiYW5kcyAqLworc3RhdGljIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF8yW10gPSB7CS8qIDQ5MTUtNTA4ME1IeiAqLworCTE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODksIDE5MiwgMTk2LCA3LCA4LCAxMSwgMTIsIDE2Cit9OworCitzdGF0aWMgY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzNbXSA9IHsJLyogNTE3MC01MzIwTUh6ICovCisJMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAorfTsKKworc3RhdGljIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF80W10gPSB7CS8qIDU1MDAtNTcwME1IeiAqLworCTEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwCit9OworCitzdGF0aWMgY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzVbXSA9IHsJLyogNTcyNS01ODI1TUh6ICovCisJMTQ1LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQorfTsKKworc3RhdGljIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF82W10gPSB7ICAgICAgIC8qIDIuNCBGQVQgY2hhbm5lbCAqLworCTEsIDIsIDMsIDQsIDUsIDYsIDcKK307CisKK3N0YXRpYyBjb25zdCB1OCBpd2xfZWVwcm9tX2JhbmRfN1tdID0geyAgICAgICAvKiA1LjIgRkFUIGNoYW5uZWwgKi8KKwkzNiwgNDQsIDUyLCA2MCwgMTAwLCAxMDgsIDExNiwgMTI0LCAxMzIsIDE0OSwgMTU3Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRUVQUk9NIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTMyIGdwID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX0dQKTsKKwlpZiAoKGdwICYgQ1NSX0VFUFJPTV9HUF9WQUxJRF9NU0spID09IENTUl9FRVBST01fR1BfQkFEX1NJR05BVFVSRSkgeworCQlJV0xfRVJST1IoIkVFUFJPTSBub3QgZm91bmQsIEVFUFJPTV9HUD0weCUwOHgiLCBncCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZSk7CisKKy8qCisgKiBUaGUgZGV2aWNlJ3MgRUVQUk9NIHNlbWFwaG9yZSBwcmV2ZW50cyBjb25mbGljdHMgYmV0d2VlbiBkcml2ZXIgYW5kIHVDb2RlCisgKiB3aGVuIGFjY2Vzc2luZyB0aGUgRUVQUk9NOyBlYWNoIGFjY2VzcyBpcyBhIHNlcmllcyBvZiBwdWxzZXMgdG8vZnJvbSB0aGUKKyAqIEVFUFJPTSBjaGlwLCBub3QgYSBzaW5nbGUgZXZlbnQsIHNvIGV2ZW4gcmVhZHMgY291bGQgY29uZmxpY3QgaWYgdGhleQorICogd2VyZW4ndCBhcmJpdHJhdGVkIGJ5IHRoZSBzZW1hcGhvcmUuCisgKi8KK2ludCBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTE2IGNvdW50OworCWludCByZXQ7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBFRVBST01fU0VNX1JFVFJZX0xJTUlUOyBjb3VudCsrKSB7CisJCS8qIFJlcXVlc3Qgc2VtYXBob3JlICovCisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSk7CisKKwkJLyogU2VlIGlmIHdlIGdvdCBpdCAqLworCQlyZXQgPSBpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkJICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNLAorCQkJCSAgIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSwKKwkJCQkgICBFRVBST01fU0VNX1RJTUVPVVQpOworCQlpZiAocmV0ID49IDApIHsKKwkJCUlXTF9ERUJVR19JTygiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKKwkJCQljb3VudCsxKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSk7CisKK3ZvaWQgaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSk7CisKK30KK0VYUE9SVF9TWU1CT0woaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUpOworCisKKy8qKgorICogaXdsX2VlcHJvbV9pbml0IC0gcmVhZCBFRVBST00gY29udGVudHMKKyAqCisgKiBMb2FkIHRoZSBFRVBST00gY29udGVudHMgZnJvbSBhZGFwdGVyIGludG8gcHJpdi0+ZWVwcm9tCisgKgorICogTk9URTogIFRoaXMgcm91dGluZSB1c2VzIHRoZSBub24tZGVidWcgSU8gYWNjZXNzIGZ1bmN0aW9ucy4KKyAqLworaW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTE2ICplID0gKHUxNiAqKSZwcml2LT5lZXByb207CisJdTMyIGdwID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX0dQKTsKKwl1MzIgcjsKKwlpbnQgc3ogPSBzaXplb2YocHJpdi0+ZWVwcm9tKTsKKwlpbnQgcmV0OworCWludCBpOworCXUxNiBhZGRyOworCisJLyogVGhlIEVFUFJPTSBzdHJ1Y3R1cmUgaGFzIHNldmVyYWwgcGFkZGluZyBidWZmZXJzIHdpdGhpbiBpdAorCSAqIGFuZCB3aGVuIGFkZGluZyBuZXcgRUVQUk9NIG1hcHMgaXMgc3ViamVjdCB0byBwcm9ncmFtbWVyIGVycm9ycworCSAqIHdoaWNoIG1heSBiZSB2ZXJ5IGRpZmZpY3VsdCB0byBpZGVudGlmeSB3aXRob3V0IGV4cGxpY2l0bHkKKwkgKiBjaGVja2luZyB0aGUgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGVlcHJvbSBtYXAuICovCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5lZXByb20pICE9IElXTF9FRVBST01fSU1BR0VfU0laRSk7CisKKwlpZiAoKGdwICYgQ1NSX0VFUFJPTV9HUF9WQUxJRF9NU0spID09IENTUl9FRVBST01fR1BfQkFEX1NJR05BVFVSRSkgeworCQlJV0xfRVJST1IoIkVFUFJPTSBub3QgZm91bmQsIEVFUFJPTV9HUD0weCUwOHgiLCBncCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KKwlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwkvKiBlZXByb20gaXMgYW4gYXJyYXkgb2YgMTZiaXQgdmFsdWVzICovCisJZm9yIChhZGRyID0gMDsgYWRkciA8IHN6OyBhZGRyICs9IHNpemVvZih1MTYpKSB7CisJCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywgYWRkciA8PCAxKTsKKwkJX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9SRUcsIENTUl9FRVBST01fUkVHX0JJVF9DTUQpOworCisJCWZvciAoaSA9IDA7IGkgPCBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUOworCQkJCQlpICs9IElXTF9FRVBST01fQUNDRVNTX0RFTEFZKSB7CisJCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKKwkJCWlmIChyICYgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0spCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoSVdMX0VFUFJPTV9BQ0NFU1NfREVMQVkpOworCQl9CisKKwkJaWYgKCEociAmIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLKSkgeworCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF0iLCBhZGRyKTsKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZVthZGRyIC8gMl0gPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpKHIgPj4gMTYpKTsKKwl9CisJcmV0ID0gMDsKKworZG9uZToKKwlwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnJlbGVhc2Vfc2VtYXBob3JlKHByaXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9lZXByb21faW5pdCk7CisKKwordm9pZCBpd2xfZWVwcm9tX2dldF9tYWMoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCAqbWFjKQoreworCW1lbWNweShtYWMsIHByaXYtPmVlcHJvbS5tYWNfYWRkcmVzcywgNik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9lZXByb21fZ2V0X21hYyk7CisKK3N0YXRpYyB2b2lkIGl3bF9pbml0X2JhbmRfcmVmZXJlbmNlKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgaW50IGJhbmQsCisJCQkJICAgIGludCAqZWVwcm9tX2NoX2NvdW50LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbAorCQkJCSAgICAqKmVlcHJvbV9jaF9pbmZvLAorCQkJCSAgICBjb25zdCB1OCAqKmVlcHJvbV9jaF9pbmRleCkKK3sKKwlzd2l0Y2ggKGJhbmQpIHsKKwljYXNlIDE6CQkvKiAyLjRHSHogYmFuZCAqLworCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfMSk7CisJCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzFfY2hhbm5lbHM7CisJCSplZXByb21fY2hfaW5kZXggPSBpd2xfZWVwcm9tX2JhbmRfMTsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLyogNC45R0h6IGJhbmQgKi8KKwkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzIpOworCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8yX2NoYW5uZWxzOworCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsX2VlcHJvbV9iYW5kXzI7CisJCWJyZWFrOworCWNhc2UgMzoJCS8qIDUuMkdIeiBiYW5kICovCisJCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8zKTsKKwkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfM19jaGFubmVsczsKKwkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bF9lZXByb21fYmFuZF8zOworCQlicmVhazsKKwljYXNlIDQ6CQkvKiA1LjVHSHogYmFuZCAqLworCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfNCk7CisJCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzRfY2hhbm5lbHM7CisJCSplZXByb21fY2hfaW5kZXggPSBpd2xfZWVwcm9tX2JhbmRfNDsKKwkJYnJlYWs7CisJY2FzZSA1OgkJLyogNS43R0h6IGJhbmQgKi8KKwkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzUpOworCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF81X2NoYW5uZWxzOworCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsX2VlcHJvbV9iYW5kXzU7CisJCWJyZWFrOworCWNhc2UgNjoJCS8qIDIuNEdIeiBGQVQgY2hhbm5lbHMgKi8KKwkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzYpOworCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8yNF9jaGFubmVsczsKKwkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bF9lZXByb21fYmFuZF82OworCQlicmVhazsKKwljYXNlIDc6CQkvKiA1IEdIeiBGQVQgY2hhbm5lbHMgKi8KKwkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzcpOworCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF81Ml9jaGFubmVsczsKKwkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bF9lZXByb21fYmFuZF83OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KK30KKworI2RlZmluZSBDSEVDS19BTkRfUFJJTlQoeCkgKChlZXByb21fY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfIyN4KSBcCisJCQkgICAgPyAjIHggIiAiIDogIiIpCisKKy8qKgorICogaXdsNDk2NV9zZXRfZmF0X2NoYW5faW5mbyAtIENvcHkgZmF0IGNoYW5uZWwgaW5mbyBpbnRvIGRyaXZlcidzIHByaXYuCisgKgorICogRG9lcyBub3Qgc2V0IHVwIGEgY29tbWFuZCwgb3IgdG91Y2ggaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBpbnQgaXdsNDk2NV9zZXRfZmF0X2NoYW5faW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaCwKKwkJCSAgICAgIHU4IGZhdF9leHRlbnNpb25fY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKworCWNoX2luZm8gPSAoc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKikKKwkJCWl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIGNoYW5uZWwpOworCisJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKQorCQlyZXR1cm4gLTE7CisKKwlJV0xfREVCVUdfSU5GTygiRkFUIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcygweCUwMngiCisJCQkiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAorCQkJY2hfaW5mby0+Y2hhbm5lbCwKKwkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KKwkJCSI1LjIiIDogIjIuNCIsCisJCQlDSEVDS19BTkRfUFJJTlQoSUJTUyksCisJCQlDSEVDS19BTkRfUFJJTlQoQUNUSVZFKSwKKwkJCUNIRUNLX0FORF9QUklOVChSQURBUiksCisJCQlDSEVDS19BTkRfUFJJTlQoV0lERSksCisJCQlDSEVDS19BTkRfUFJJTlQoTkFSUk9XKSwKKwkJCUNIRUNLX0FORF9QUklOVChERlMpLAorCQkJZWVwcm9tX2NoLT5mbGFncywKKwkJCWVlcHJvbV9jaC0+bWF4X3Bvd2VyX2F2ZywKKwkJCSgoZWVwcm9tX2NoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpCisJCQkgJiYgIShlZXByb21fY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKSA/CisJCQkiIiA6ICJub3QgIik7CisKKwljaF9pbmZvLT5mYXRfZWVwcm9tID0gKmVlcHJvbV9jaDsKKwljaF9pbmZvLT5mYXRfbWF4X3Bvd2VyX2F2ZyA9IGVlcHJvbV9jaC0+bWF4X3Bvd2VyX2F2ZzsKKwljaF9pbmZvLT5mYXRfY3Vycl90eHBvdyA9IGVlcHJvbV9jaC0+bWF4X3Bvd2VyX2F2ZzsKKwljaF9pbmZvLT5mYXRfbWluX3Bvd2VyID0gMDsKKwljaF9pbmZvLT5mYXRfc2Nhbl9wb3dlciA9IGVlcHJvbV9jaC0+bWF4X3Bvd2VyX2F2ZzsKKwljaF9pbmZvLT5mYXRfZmxhZ3MgPSBlZXByb21fY2gtPmZsYWdzOworCWNoX2luZm8tPmZhdF9leHRlbnNpb25fY2hhbm5lbCA9IGZhdF9leHRlbnNpb25fY2hhbm5lbDsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIENIRUNLX0FORF9QUklOVF9JKHgpICgoZWVwcm9tX2NoX2luZm9bY2hdLmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfIyN4KSBcCisJCQkgICAgPyAjIHggIiAiIDogIiIpCisKKy8qKgorICogaXdsX2luaXRfY2hhbm5lbF9tYXAgLSBTZXQgdXAgZHJpdmVyJ3MgaW5mbyBmb3IgYWxsIHBvc3NpYmxlIGNoYW5uZWxzCisgKi8KK2ludCBpd2xfaW5pdF9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGVlcHJvbV9jaF9jb3VudCA9IDA7CisJY29uc3QgdTggKmVlcHJvbV9jaF9pbmRleCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaF9pbmZvID0gTlVMTDsKKwlpbnQgYmFuZCwgY2g7CisJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisKKwlpZiAocHJpdi0+Y2hhbm5lbF9jb3VudCkgeworCQlJV0xfREVCVUdfSU5GTygiQ2hhbm5lbCBtYXAgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJpdi0+ZWVwcm9tLnZlcnNpb24gPCAweDJmKSB7CisJCUlXTF9XQVJOSU5HKCJVbnN1cHBvcnRlZCBFRVBST00gdmVyc2lvbjogMHglMDRYXG4iLAorCQkJICAgIHByaXYtPmVlcHJvbS52ZXJzaW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemluZyByZWd1bGF0b3J5IGluZm8gZnJvbSBFRVBST01cbiIpOworCisJcHJpdi0+Y2hhbm5lbF9jb3VudCA9CisJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzEpICsKKwkgICAgQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfMikgKworCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8zKSArCisJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzQpICsKKwkgICAgQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfNSk7CisKKwlJV0xfREVCVUdfSU5GTygiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOworCisJcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9jaGFubmVsX2luZm8pICoKKwkJCQkgICAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+Y2hhbm5lbF9pbmZvKSB7CisJCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWxfaW5mb1xuIik7CisJCXByaXYtPmNoYW5uZWxfY291bnQgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljaF9pbmZvID0gcHJpdi0+Y2hhbm5lbF9pbmZvOworCisJLyogTG9vcCB0aHJvdWdoIHRoZSA1IEVFUFJPTSBiYW5kcyBhZGRpbmcgdGhlbSBpbiBvcmRlciB0byB0aGUKKwkgKiBjaGFubmVsIG1hcCB3ZSBtYWludGFpbiAodGhhdCBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRoYW4KKwkgKiB3aGF0IGp1c3QgaW4gdGhlIEVFUFJPTSkgKi8KKwlmb3IgKGJhbmQgPSAxOyBiYW5kIDw9IDU7IGJhbmQrKykgeworCisJCWl3bF9pbml0X2JhbmRfcmVmZXJlbmNlKHByaXYsIGJhbmQsICZlZXByb21fY2hfY291bnQsCisJCQkJCSZlZXByb21fY2hfaW5mbywgJmVlcHJvbV9jaF9pbmRleCk7CisKKwkJLyogTG9vcCB0aHJvdWdoIGVhY2ggYmFuZCBhZGRpbmcgZWFjaCBvZiB0aGUgY2hhbm5lbHMgKi8KKwkJZm9yIChjaCA9IDA7IGNoIDwgZWVwcm9tX2NoX2NvdW50OyBjaCsrKSB7CisJCQljaF9pbmZvLT5jaGFubmVsID0gZWVwcm9tX2NoX2luZGV4W2NoXTsKKwkJCWNoX2luZm8tPmJhbmQgPSAoYmFuZCA9PSAxKSA/IElFRUU4MDIxMV9CQU5EXzJHSFogOgorCQkJICAgIElFRUU4MDIxMV9CQU5EXzVHSFo7CisKKwkJCS8qIHBlcm1hbmVudGx5IHN0b3JlIEVFUFJPTSdzIGNoYW5uZWwgcmVndWxhdG9yeSBmbGFncworCQkJICogICBhbmQgbWF4IHBvd2VyIGluIGNoYW5uZWwgaW5mbyBkYXRhYmFzZS4gKi8KKwkJCWNoX2luZm8tPmVlcHJvbSA9IGVlcHJvbV9jaF9pbmZvW2NoXTsKKworCQkJLyogQ29weSB0aGUgcnVuLXRpbWUgZmxhZ3Mgc28gdGhleSBhcmUgdGhlcmUgZXZlbiBvbgorCQkJICogaW52YWxpZCBjaGFubmVscyAqLworCQkJY2hfaW5mby0+ZmxhZ3MgPSBlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3M7CisKKwkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7CisJCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgorCQkJCQkgICAgICAgIk5vIHRyYWZmaWNcbiIsCisJCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAorCQkJCQkgICAgICAgY2hfaW5mby0+ZmxhZ3MsCisJCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CisJCQkJCSAgICAgICAiNS4yIiA6ICIyLjQiKTsKKwkJCQljaF9pbmZvKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIEluaXRpYWxpemUgcmVndWxhdG9yeS1iYXNlZCBydW4tdGltZSBkYXRhICovCisJCQljaF9pbmZvLT5tYXhfcG93ZXJfYXZnID0gY2hfaW5mby0+Y3Vycl90eHBvdyA9CisJCQkgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CisJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CisJCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOworCisJCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzJXMoMHglMDJ4IgorCQkJCSAgICAgICAiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAorCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAorCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CisJCQkJICAgICAgICI1LjIiIDogIjIuNCIsCisJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKFZBTElEKSwKKwkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UX0koSUJTUyksCisJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKEFDVElWRSksCisJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKFJBREFSKSwKKwkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UX0koV0lERSksCisJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKE5BUlJPVyksCisJCQkJICAgICAgIENIRUNLX0FORF9QUklOVF9JKERGUyksCisJCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFncywKKwkJCQkgICAgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcsCisJCQkJICAgICAgICgoZWVwcm9tX2NoX2luZm9bY2hdLgorCQkJCQkgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9JQlNTKQorCQkJCQkmJiAhKGVlcHJvbV9jaF9pbmZvW2NoXS4KKwkJCQkJICAgICBmbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSkKKwkJCQkgICAgICAgPyAiIiA6ICJub3QgIik7CisKKwkJCS8qIFNldCB0aGUgdXNlcl90eHBvd2VyX2xpbWl0IHRvIHRoZSBoaWdoZXN0IHBvd2VyCisJCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KKwkJCWlmIChlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZyA+CisJCQkgICAgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KQorCQkJCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9CisJCQkJICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOworCisJCQljaF9pbmZvKys7CisJCX0KKwl9CisKKwkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCisJZm9yIChiYW5kID0gNjsgYmFuZCA8PSA3OyBiYW5kKyspIHsKKwkJZW51bSBpZWVlODAyMTFfYmFuZCBpZWVlYmFuZDsKKwkJdTggZmF0X2V4dGVuc2lvbl9jaGFuOworCisJCWl3bF9pbml0X2JhbmRfcmVmZXJlbmNlKHByaXYsIGJhbmQsICZlZXByb21fY2hfY291bnQsCisJCQkJCSZlZXByb21fY2hfaW5mbywgJmVlcHJvbV9jaF9pbmRleCk7CisKKwkJLyogRUVQUk9NIGJhbmQgNiBpcyAyLjQsIGJhbmQgNyBpcyA1IEdIeiAqLworCQlpZWVlYmFuZCA9CisJCQkoYmFuZCA9PSA2KSA/IElFRUU4MDIxMV9CQU5EXzJHSFogOiBJRUVFODAyMTFfQkFORF81R0haOworCisJCS8qIExvb3AgdGhyb3VnaCBlYWNoIGJhbmQgYWRkaW5nIGVhY2ggb2YgdGhlIGNoYW5uZWxzICovCisJCWZvciAoY2ggPSAwOyBjaCA8IGVlcHJvbV9jaF9jb3VudDsgY2grKykgeworCisJCQlpZiAoKGJhbmQgPT0gNikgJiYKKwkJCSAgICAoKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNSkgfHwKKwkJCSAgICAoZWVwcm9tX2NoX2luZGV4W2NoXSA9PSA2KSB8fAorCQkJICAgIChlZXByb21fY2hfaW5kZXhbY2hdID09IDcpKSkKKwkJCSAgICAgICBmYXRfZXh0ZW5zaW9uX2NoYW4gPSBIVF9JRV9FWFRfQ0hBTk5FTF9NQVg7CisJCQllbHNlCisJCQkJZmF0X2V4dGVuc2lvbl9jaGFuID0gSFRfSUVfRVhUX0NIQU5ORUxfQUJPVkU7CisKKwkJCS8qIFNldCB1cCBkcml2ZXIncyBpbmZvIGZvciBsb3dlciBoYWxmICovCisJCQlpd2w0OTY1X3NldF9mYXRfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAorCQkJCQkJICBlZXByb21fY2hfaW5kZXhbY2hdLAorCQkJCQkJICAmKGVlcHJvbV9jaF9pbmZvW2NoXSksCisJCQkJCQkgIGZhdF9leHRlbnNpb25fY2hhbik7CisKKwkJCS8qIFNldCB1cCBkcml2ZXIncyBpbmZvIGZvciB1cHBlciBoYWxmICovCisJCQlpd2w0OTY1X3NldF9mYXRfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAorCQkJCQkJICAoZWVwcm9tX2NoX2luZGV4W2NoXSArIDQpLAorCQkJCQkJICAmKGVlcHJvbV9jaF9pbmZvW2NoXSksCisJCQkJCQkgIEhUX0lFX0VYVF9DSEFOTkVMX0JFTE9XKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfaW5pdF9jaGFubmVsX21hcCk7CisKKy8qCisgKiBpd2xfZnJlZV9jaGFubmVsX21hcCAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsNDk2NV9pbml0X2NoYW5uZWxfbWFwCisgKi8KK3ZvaWQgaXdsX2ZyZWVfY2hhbm5lbF9tYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7CisJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX2NoYW5uZWxfbWFwKTsKKworLyoqCisgKiBpd2xfZ2V0X2NoYW5uZWxfaW5mbyAtIEZpbmQgZHJpdmVyJ3MgcHJpdmF0ZSBjaGFubmVsIGluZm8KKyAqCisgKiBCYXNlZCBvbiBiYW5kIGFuZCBjaGFubmVsIG51bWJlci4KKyAqLworY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bF9nZXRfY2hhbm5lbF9pbmZvKAorCQljb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpCit7CisJaW50IGk7CisKKwlzd2l0Y2ggKGJhbmQpIHsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCWZvciAoaSA9IDE0OyBpIDwgcHJpdi0+Y2hhbm5lbF9jb3VudDsgaSsrKSB7CisJCQlpZiAocHJpdi0+Y2hhbm5lbF9pbmZvW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKKwkJCQlyZXR1cm4gJnByaXYtPmNoYW5uZWxfaW5mb1tpXTsKKwkJfQorCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCWlmIChjaGFubmVsID49IDEgJiYgY2hhbm5lbCA8PSAxNCkKKwkJCXJldHVybiAmcHJpdi0+Y2hhbm5lbF9pbmZvW2NoYW5uZWwgLSAxXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfY2hhbm5lbF9pbmZvKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBhMDQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTAsMCArMSwzNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogVG9tYXMgV2lua2xlciA8dG9tYXMud2lua2xlckBpbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICogQlNEIExJQ0VOU0UKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9faXdsX2VlcHJvbV9oX18KKyNkZWZpbmUgX19pd2xfZWVwcm9tX2hfXworCitzdHJ1Y3QgaXdsX3ByaXY7CisKKy8qCisgKiBFRVBST00gYWNjZXNzIHRpbWUgdmFsdWVzOgorICoKKyAqIERyaXZlciBpbml0aWF0ZXMgRUVQUk9NIHJlYWQgYnkgd3JpdGluZyBieXRlIGFkZHJlc3MgPDwgMSB0byBDU1JfRUVQUk9NX1JFRywKKyAqICAgdGhlbiBjbGVhcmluZyAod2l0aCBzdWJzZXF1ZW50IHJlYWQvbW9kaWZ5L3dyaXRlKSBDU1JfRUVQUk9NX1JFRyBiaXQKKyAqICAgQ1NSX0VFUFJPTV9SRUdfQklUX0NNRCAoMHgyKS4KKyAqIERyaXZlciB0aGVuIHBvbGxzIENTUl9FRVBST01fUkVHIGZvciBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSyAoMHgxKS4KKyAqIFdoZW4gcG9sbGluZywgd2FpdCAxMCB1U2VjIGJldHdlZW4gcG9sbGluZyBsb29wcywgdXAgdG8gYSBtYXhpbXVtIDUwMDAgdVNlYy4KKyAqIERyaXZlciByZWFkcyAxNi1iaXQgdmFsdWUgZnJvbSBiaXRzIDMxLTE2IG9mIENTUl9FRVBST01fUkVHLgorICovCisjZGVmaW5lIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQJNTAwMCAvKiB1U2VjICovCisjZGVmaW5lIElXTF9FRVBST01fQUNDRVNTX0RFTEFZCQkxMCAgIC8qIHVTZWMgKi8KKworI2RlZmluZSBJV0xfRUVQUk9NX1NFTV9USU1FT1VUIAkJMTAgICAvKiBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgSVdMX0VFUFJPTV9TRU1fUkVUUllfTElNSVQJMTAwMCAvKiBudW1iZXIgb2YgYXR0ZW1wdHMgKG5vdCB0aW1lKSAqLworCisKKy8qCisgKiBSZWd1bGF0b3J5IGNoYW5uZWwgdXNhZ2UgZmxhZ3MgaW4gRUVQUk9NIHN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsLmZsYWdzLgorICoKKyAqIElCU1MgYW5kL29yIEFQIG9wZXJhdGlvbiBpcyBhbGxvd2VkICpvbmx5KiBvbiB0aG9zZSBjaGFubmVscyB3aXRoCisgKiAoVkFMSUQgJiYgSUJTUyAmJiBBQ1RJVkUgJiYgIVJBREFSKS4gIFRoaXMgcmVzdHJpY3Rpb24gaXMgaW4gcGxhY2UgYmVjYXVzZQorICogUkFEQVIgZGV0ZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIDQ5NjUgZHJpdmVyLCBidXQgaXMgYQorICogcmVxdWlyZW1lbnQgZm9yIGVzdGFibGlzaGluZyBhIG5ldyBuZXR3b3JrIGZvciBsZWdhbCBvcGVyYXRpb24gb24gY2hhbm5lbHMKKyAqIHJlcXVpcmluZyBSQURBUiBkZXRlY3Rpb24gb3IgcmVzdHJpY3RpbmcgQUNUSVZFIHNjYW5uaW5nLgorICoKKyAqIE5PVEU6ICAiV0lERSIgZmxhZyBkb2VzIG5vdCBpbmRpY2F0ZSBhbnl0aGluZyBhYm91dCAiRkFUIiA0MCBNSHogY2hhbm5lbHMuCisgKiAgICAgICAgSXQgb25seSBpbmRpY2F0ZXMgdGhhdCAyMCBNSHogY2hhbm5lbCB1c2UgaXMgc3VwcG9ydGVkOyBGQVQgY2hhbm5lbAorICogICAgICAgIHVzYWdlIGlzIGluZGljYXRlZCBieSBhIHNlcGFyYXRlIHNldCBvZiByZWd1bGF0b3J5IGZsYWdzIGZvciBlYWNoCisgKiAgICAgICAgRkFUIGNoYW5uZWwgcGFpci4KKyAqCisgKiBOT1RFOiAgVXNpbmcgYSBjaGFubmVsIGluYXBwcm9wcmlhdGVseSB3aWxsIHJlc3VsdCBpbiBhIHVDb2RlIGVycm9yIQorICovCisjZGVmaW5lIElXTF9OVU1fVFhfQ0FMSUJfR1JPVVBTIDUKK2VudW0geworCUVFUFJPTV9DSEFOTkVMX1ZBTElEID0gKDEgPDwgMCksCS8qIHVzYWJsZSBmb3IgdGhpcyBTS1UvZ2VvICovCisJRUVQUk9NX0NIQU5ORUxfSUJTUyA9ICgxIDw8IDEpLAkJLyogdXNhYmxlIGFzIGFuIElCU1MgY2hhbm5lbCAqLworCS8qIEJpdCAyIFJlc2VydmVkICovCisJRUVQUk9NX0NIQU5ORUxfQUNUSVZFID0gKDEgPDwgMyksCS8qIGFjdGl2ZSBzY2FubmluZyBhbGxvd2VkICovCisJRUVQUk9NX0NIQU5ORUxfUkFEQVIgPSAoMSA8PCA0KSwJLyogcmFkYXIgZGV0ZWN0aW9uIHJlcXVpcmVkICovCisJRUVQUk9NX0NIQU5ORUxfV0lERSA9ICgxIDw8IDUpLAkJLyogMjAgTUh6IGNoYW5uZWwgb2theSAqLworCUVFUFJPTV9DSEFOTkVMX05BUlJPVyA9ICgxIDw8IDYpLAkvKiAxMCBNSHogY2hhbm5lbCAobm90IHVzZWQpICovCisJRUVQUk9NX0NIQU5ORUxfREZTID0gKDEgPDwgNyksCS8qIGR5bmFtaWMgZnJlcSBzZWxlY3Rpb24gY2FuZGlkYXRlICovCit9OworCisvKiBTS1UgQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lIEVFUFJPTV9TS1VfQ0FQX1NXX1JGX0tJTExfRU5BQkxFICAgICAgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFICAgICAgICAgICAgICAgICgxIDw8IDEpCisKKy8qICpyZWd1bGF0b3J5KiBjaGFubmVsIGRhdGEgZm9ybWF0IGluIGVlcHJvbSwgb25lIGZvciBlYWNoIGNoYW5uZWwuCisgKiBUaGVyZSBhcmUgc2VwYXJhdGUgZW50cmllcyBmb3IgRkFUICg0MCBNSHopIHZzLiBub3JtYWwgKDIwIE1IeikgY2hhbm5lbHMuICovCitzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCB7CisJdTggZmxhZ3M7CQkvKiBFRVBST01fQ0hBTk5FTF8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLworCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogNDk2NSBoYXMgdHdvIHJhZGlvIHRyYW5zbWl0dGVycyAoYW5kIDMgcmFkaW8gcmVjZWl2ZXJzKSAqLworI2RlZmluZSBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TICAgICAgKDIpCisKKy8qIDQ5NjUgaGFzIHJvb20gZm9yIHVwIHRvIDggc2V0cyBvZiB0eHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KKyNkZWZpbmUgRUVQUk9NX1RYX1BPV0VSX0JBTkRTICAgICAgICAgICg4KQorCisvKiA0OTY1IGZhY3RvcnkgY2FsaWJyYXRpb24gbWVhc3VyZXMgdHhwb3dlciBnYWluIHNldHRpbmdzIGZvcgorICogZWFjaCBvZiAzIHRhcmdldCBvdXRwdXQgbGV2ZWxzICovCisjZGVmaW5lIEVFUFJPTV9UWF9QT1dFUl9NRUFTVVJFTUVOVFMgICAoMykKKworI2RlZmluZSBFRVBST01fNDk2NV9UWF9QT1dFUl9WRVJTSU9OICAgICAgICAoMikKKworLyogNDk2NSBkcml2ZXIgZG9lcyBub3Qgd29yayB3aXRoIHR4cG93ZXIgY2FsaWJyYXRpb24gdmVyc2lvbiA8IDUuCisgKiBMb29rIGZvciB0aGlzIGluIGNhbGliX3ZlcnNpb24gbWVtYmVyIG9mIHN0cnVjdCBpd2w0OTY1X2VlcHJvbS4gKi8KKyNkZWZpbmUgRUVQUk9NX1RYX1BPV0VSX1ZFUlNJT05fTkVXICAgICg1KQorCisvKiAyLjQgR0h6ICovCitleHRlcm4gY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzFbMTRdOworCisvKgorICogNDk2NSBmYWN0b3J5IGNhbGlicmF0aW9uIGRhdGEgZm9yIG9uZSB0eHBvd2VyIGxldmVsLCBvbiBvbmUgY2hhbm5lbCwKKyAqIG1lYXN1cmVkIG9uIG9uZSBvZiB0aGUgMiB0eCBjaGFpbnMgKHJhZGlvIHRyYW5zbWl0dGVyIGFuZCBhc3NvY2lhdGVkCisgKiBhbnRlbm5hKS4gIEVFUFJPTSBjb250YWluczoKKyAqCisgKiAxKSAgVGVtcGVyYXR1cmUgKGRlZ3JlZXMgQ2Vsc2l1cykgb2YgZGV2aWNlIHdoZW4gbWVhc3VyZW1lbnQgd2FzIG1hZGUuCisgKgorICogMikgIEdhaW4gdGFibGUgaW5kZXggdXNlZCB0byBhY2hpZXZlIHRoZSB0YXJnZXQgbWVhc3VyZW1lbnQgcG93ZXIuCisgKiAgICAgVGhpcyByZWZlcnMgdG8gdGhlICJ3ZWxsLWtub3duIiBnYWluIHRhYmxlcyAoc2VlIGl3bC00OTY1LWh3LmgpLgorICoKKyAqIDMpICBBY3R1YWwgbWVhc3VyZWQgb3V0cHV0IHBvd2VyLCBpbiBoYWxmLWRCbSAoIjM0IiA9IDE3IGRCbSkuCisgKgorICogNCkgIFJGIHBvd2VyIGFtcGxpZmllciBkZXRlY3RvciBsZXZlbCBtZWFzdXJlbWVudCAobm90IHVzZWQpLgorICovCitzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfbWVhc3VyZSB7CisJdTggdGVtcGVyYXR1cmU7CQkvKiBEZXZpY2UgdGVtcGVyYXR1cmUgKENlbHNpdXMpICovCisJdTggZ2Fpbl9pZHg7CQkvKiBJbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KKwl1OCBhY3R1YWxfcG93OwkJLyogTWVhc3VyZWQgUkYgb3V0cHV0IHBvd2VyLCBoYWxmLWRCbSAqLworCXM4IHBhX2RldDsJCS8qIFBvd2VyIGFtcCBkZXRlY3RvciBsZXZlbCAobm90IHVzZWQpICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogNDk2NSBtZWFzdXJlbWVudCBzZXQgZm9yIG9uZSBjaGFubmVsLiAgRUVQUk9NIGNvbnRhaW5zOgorICoKKyAqIDEpICBDaGFubmVsIG51bWJlciBtZWFzdXJlZAorICoKKyAqIDIpICBNZWFzdXJlbWVudHMgZm9yIGVhY2ggb2YgMyBwb3dlciBsZXZlbHMgZm9yIGVhY2ggb2YgMiByYWRpbyB0cmFuc21pdHRlcnMKKyAqICAgICAoYS5rLmEuICJ0eCBjaGFpbnMiKSAoNiBtZWFzdXJlbWVudHMgYWx0b2dldGhlcikKKyAqLworc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX2NoX2luZm8geworCXU4IGNoX251bTsKKwlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfbWVhc3VyZQorCQltZWFzdXJlbWVudHNbRUVQUk9NX1RYX1BPV0VSX1RYX0NIQUlOU10KKwkJCVtFRVBST01fVFhfUE9XRVJfTUVBU1VSRU1FTlRTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogNDk2NSB0eHBvd2VyIHN1YmJhbmQgaW5mby4KKyAqCisgKiBGb3IgZWFjaCBmcmVxdWVuY3kgc3ViYmFuZCwgRUVQUk9NIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgKgorICogMSkgIEZpcnN0IGFuZCBsYXN0IGNoYW5uZWxzIHdpdGhpbiByYW5nZSBvZiB0aGUgc3ViYmFuZC4gICIwIiB2YWx1ZXMKKyAqICAgICBpbmRpY2F0ZSB0aGF0IHRoaXMgc2FtcGxlIHNldCBpcyBub3QgYmVpbmcgdXNlZC4KKyAqCisgKiAyKSAgU2FtcGxlIG1lYXN1cmVtZW50IHNldHMgZm9yIDIgY2hhbm5lbHMgY2xvc2UgdG8gdGhlIHJhbmdlIGVuZHBvaW50cy4KKyAqLworc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyB7CisJdTggY2hfZnJvbTsJLyogY2hhbm5lbCBudW1iZXIgb2YgbG93ZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLworCXU4IGNoX3RvOwkvKiBjaGFubmVsIG51bWJlciBvZiBoaWdoZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLworCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jYWxpYl9jaF9pbmZvIGNoMTsKKwlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfY2hfaW5mbyBjaDI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogNDk2NSB0eHBvd2VyIGNhbGlicmF0aW9uIGluZm8uICBFRVBST00gY29udGFpbnM6CisgKgorICogMSkgIEZhY3RvcnktbWVhc3VyZWQgc2F0dXJhdGlvbiBwb3dlciBsZXZlbHMgKG1heGltdW0gbGV2ZWxzIGF0IHdoaWNoCisgKiAgICAgdHggcG93ZXIgYW1wbGlmaWVyIGNhbiBvdXRwdXQgYSBzaWduYWwgd2l0aG91dCB0b28gbXVjaCBkaXN0b3J0aW9uKS4KKyAqICAgICBUaGVyZSBpcyBvbmUgbGV2ZWwgZm9yIDIuNCBHSHogYmFuZCBhbmQgb25lIGZvciA1IEdIeiBiYW5kLiAgVGhlc2UKKyAqICAgICB2YWx1ZXMgYXBwbHkgdG8gYWxsIGNoYW5uZWxzIHdpdGhpbiBlYWNoIG9mIHRoZSBiYW5kcy4KKyAqCisgKiAyKSAgRmFjdG9yeS1tZWFzdXJlZCBwb3dlciBzdXBwbHkgdm9sdGFnZSBsZXZlbC4gIFRoaXMgaXMgYXNzdW1lZCB0byBiZQorICogICAgIGNvbnN0YW50IChpLmUuIHNhbWUgdmFsdWUgYXBwbGllcyB0byBhbGwgY2hhbm5lbHMvYmFuZHMpIHdoaWxlIHRoZQorICogICAgIGZhY3RvcnkgbWVhc3VyZW1lbnRzIGFyZSBiZWluZyBtYWRlLgorICoKKyAqIDMpICBVcCB0byA4IHNldHMgb2YgZmFjdG9yeS1tZWFzdXJlZCB0eHBvd2VyIGNhbGlicmF0aW9uIHZhbHVlcy4KKyAqICAgICBUaGVzZSBhcmUgZm9yIGRpZmZlcmVudCBmcmVxdWVuY3kgcmFuZ2VzLCBzaW5jZSB0eHBvd2VyIGdhaW4KKyAqICAgICBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGFuYWxvZyByYWRpbyBjaXJjdWl0cnkgdmFyeSB3aXRoIGZyZXF1ZW5jeS4KKyAqCisgKiAgICAgTm90IGFsbCBzZXRzIG5lZWQgdG8gYmUgZmlsbGVkIHdpdGggZGF0YTsKKyAqICAgICBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvIGNvbnRhaW5zIHJhbmdlIG9mIGNoYW5uZWxzCisgKiAgICAgKDAgaWYgdW51c2VkKSBmb3IgZWFjaCBzZXQgb2YgZGF0YS4KKyAqLworc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX2luZm8geworCXU4IHNhdHVyYXRpb25fcG93ZXIyNDsJLyogaGFsZi1kQm0gKGUuZy4gIjM0IiA9IDE3IGRCbSkgKi8KKwl1OCBzYXR1cmF0aW9uX3Bvd2VyNTI7CS8qIGhhbGYtZEJtICovCisJczE2IHZvbHRhZ2U7CQkvKiBzaWduZWQgKi8KKwlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvCisJCWJhbmRfaW5mb1tFRVBST01fVFhfUE9XRVJfQkFORFNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworCisvKgorICogNDk2NSBFRVBST00gbWFwCisgKi8KK3N0cnVjdCBpd2w0OTY1X2VlcHJvbSB7CisJdTggcmVzZXJ2ZWQwWzE2XTsKKwl1MTYgZGV2aWNlX2lkOwkJLyogYWJzLm9mczogMTYgKi8KKwl1OCByZXNlcnZlZDFbMl07CisJdTE2IHBtYzsJCS8qIGFicy5vZnM6IDIwICovCisJdTggcmVzZXJ2ZWQyWzIwXTsKKwl1OCBtYWNfYWRkcmVzc1s2XTsJLyogYWJzLm9mczogNDIgKi8KKwl1OCByZXNlcnZlZDNbNThdOworCXUxNiBib2FyZF9yZXZpc2lvbjsJLyogYWJzLm9mczogMTA2ICovCisJdTggcmVzZXJ2ZWQ0WzExXTsKKwl1OCBib2FyZF9wYmFfbnVtYmVyWzldOwkvKiBhYnMub2ZzOiAxMTkgKi8KKwl1OCByZXNlcnZlZDVbOF07CisJdTE2IHZlcnNpb247CQkvKiBhYnMub2ZzOiAxMzYgKi8KKwl1OCBza3VfY2FwOwkJLyogYWJzLm9mczogMTM4ICovCisJdTggbGVkc19tb2RlOwkJLyogYWJzLm9mczogMTM5ICovCisJdTE2IG9lbV9tb2RlOworCXUxNiB3b3dsYW5fbW9kZTsJLyogYWJzLm9mczogMTQyICovCisJdTE2IGxlZHNfdGltZV9pbnRlcnZhbDsJLyogYWJzLm9mczogMTQ0ICovCisJdTggbGVkc19vZmZfdGltZTsJLyogYWJzLm9mczogMTQ2ICovCisJdTggbGVkc19vbl90aW1lOwkvKiBhYnMub2ZzOiAxNDcgKi8KKwl1OCBhbG1nb3JfbV92ZXJzaW9uOwkvKiBhYnMub2ZzOiAxNDggKi8KKwl1OCBhbnRlbm5hX3N3aXRjaF90eXBlOwkvKiBhYnMub2ZzOiAxNDkgKi8KKwl1OCByZXNlcnZlZDZbOF07CisJdTE2IGJvYXJkX3JldmlzaW9uXzQ5NjU7CS8qIGFicy5vZnM6IDE1OCAqLworCXU4IHJlc2VydmVkN1sxM107CisJdTggYm9hcmRfcGJhX251bWJlcl80OTY1WzldOwkvKiBhYnMub2ZzOiAxNzMgKi8KKwl1OCByZXNlcnZlZDhbMTBdOworCXU4IHNrdV9pZFs0XTsJCS8qIGFicy5vZnM6IDE5MiAqLworCisvKgorICogUGVyLWNoYW5uZWwgcmVndWxhdG9yeSBkYXRhLgorICoKKyAqIEVhY2ggY2hhbm5lbCB0aGF0ICptaWdodCogYmUgc3VwcG9ydGVkIGJ5IDM5NDUgb3IgNDk2NSBoYXMgYSBmaXhlZCBsb2NhdGlvbgorICogaW4gRUVQUk9NIGNvbnRhaW5pbmcgRUVQUk9NX0NIQU5ORUxfKiB1c2FnZSBmbGFncyAoTFNCKSBhbmQgbWF4IHJlZ3VsYXRvcnkKKyAqIHR4cG93ZXIgKE1TQikuCisgKgorICogRW50cmllcyBpbW1lZGlhdGVseSBiZWxvdyBhcmUgZm9yIDIwIE1IeiBjaGFubmVsIHdpZHRoLiAgRkFUICg0MCBNSHopCisgKiBjaGFubmVscyAob25seSBmb3IgNDk2NSwgbm90IHN1cHBvcnRlZCBieSAzOTQ1KSBhcHBlYXIgbGF0ZXIgaW4gdGhlIEVFUFJPTS4KKyAqCisgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNAorICovCisJdTE2IGJhbmRfMV9jb3VudDsJLyogYWJzLm9mczogMTk2ICovCisJc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgYmFuZF8xX2NoYW5uZWxzWzE0XTsgLyogYWJzLm9mczogMTk2ICovCisKKy8qCisgKiA0LjkgR0h6IGNoYW5uZWxzIDE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODksIDE5MiwgMTk2LAorICogNS4wIEdIeiBjaGFubmVscyA3LCA4LCAxMSwgMTIsIDE2CisgKiAoNDkxNS01MDgwTUh6KSAobm9uZSBvZiB0aGVzZSBpcyBldmVyIHN1cHBvcnRlZCkKKyAqLworCXUxNiBiYW5kXzJfY291bnQ7CS8qIGFicy5vZnM6IDIyNiAqLworCXN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsIGJhbmRfMl9jaGFubmVsc1sxM107IC8qIGFicy5vZnM6IDIyOCAqLworCisvKgorICogNS4yIEdIeiBjaGFubmVscyAzNCwgMzYsIDM4LCA0MCwgNDIsIDQ0LCA0NiwgNDgsIDUyLCA1NiwgNjAsIDY0CisgKiAoNTE3MC01MzIwTUh6KQorICovCisJdTE2IGJhbmRfM19jb3VudDsJLyogYWJzLm9mczogMjU0ICovCisJc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgYmFuZF8zX2NoYW5uZWxzWzEyXTsgLyogYWJzLm9mczogMjU2ICovCisKKy8qCisgKiA1LjUgR0h6IGNoYW5uZWxzIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwCisgKiAoNTUwMC01NzAwTUh6KQorICovCisJdTE2IGJhbmRfNF9jb3VudDsJLyogYWJzLm9mczogMjgwICovCisJc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgLyogYWJzLm9mczogMjgyICovCisKKy8qCisgKiA1LjcgR0h6IGNoYW5uZWxzIDE0NSwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUKKyAqICg1NzI1LTU4MjVNSHopCisgKi8KKwl1MTYgYmFuZF81X2NvdW50OwkvKiBhYnMub2ZzOiAzMDQgKi8KKwlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBiYW5kXzVfY2hhbm5lbHNbNl07IC8qIGFicy5vZnM6IDMwNiAqLworCisJdTggcmVzZXJ2ZWQxMFsyXTsKKworCisvKgorICogMi40IEdIeiBGQVQgY2hhbm5lbHMgMSAoNSksIDIgKDYpLCAzICg3KSwgNCAoOCksIDUgKDkpLCA2ICgxMCksIDcgKDExKQorICoKKyAqIFRoZSBjaGFubmVsIGxpc3RlZCBpcyB0aGUgY2VudGVyIG9mIHRoZSBsb3dlciAyMCBNSHogaGFsZiBvZiB0aGUgY2hhbm5lbC4KKyAqIFRoZSBvdmVyYWxsIGNlbnRlciBmcmVxdWVuY3kgaXMgYWN0dWFsbHkgMiBjaGFubmVscyAoMTAgTUh6KSBhYm92ZSB0aGF0LAorICogYW5kIHRoZSB1cHBlciBoYWxmIG9mIGVhY2ggRkFUIGNoYW5uZWwgaXMgY2VudGVyZWQgNCBjaGFubmVscyAoMjAgTUh6KSBhd2F5CisgKiBmcm9tIHRoZSBsb3dlciBoYWxmOyBlLmcuIHRoZSB1cHBlciBoYWxmIG9mIEZBVCBjaGFubmVsIDEgaXMgY2hhbm5lbCA1LAorICogYW5kIHRoZSBvdmVyYWxsIEZBVCBjaGFubmVsIHdpZHRoIGNlbnRlcnMgb24gY2hhbm5lbCAzLgorICoKKyAqIE5PVEU6ICBUaGUgUlhPTiBjb21tYW5kIHVzZXMgMjAgTUh6IGNoYW5uZWwgbnVtYmVycyB0byBzcGVjaWZ5IHRoZQorICogICAgICAgIGNvbnRyb2wgY2hhbm5lbCB0byB3aGljaCB0byB0dW5lLiAgUlhPTiBhbHNvIHNwZWNpZmllcyB3aGV0aGVyIHRoZQorICogICAgICAgIGNvbnRyb2wgY2hhbm5lbCBpcyB0aGUgdXBwZXIgb3IgbG93ZXIgaGFsZiBvZiBhIEZBVCBjaGFubmVsLgorICoKKyAqIE5PVEU6ICA0OTY1IGRvZXMgbm90IHN1cHBvcnQgRkFUIGNoYW5uZWxzIG9uIDIuNCBHSHouCisgKi8KKwlzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBiYW5kXzI0X2NoYW5uZWxzWzddOyAvKiBhYnMub2ZzOiAzMjAgKi8KKwl1OCByZXNlcnZlZDExWzJdOworCisvKgorICogNS4yIEdIeiBGQVQgY2hhbm5lbHMgMzYgKDQwKSwgNDQgKDQ4KSwgNTIgKDU2KSwgNjAgKDY0KSwKKyAqIDEwMCAoMTA0KSwgMTA4ICgxMTIpLCAxMTYgKDEyMCksIDEyNCAoMTI4KSwgMTMyICgxMzYpLCAxNDkgKDE1MyksIDE1NyAoMTYxKQorICovCisJc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NoYW5uZWwgYmFuZF81Ml9jaGFubmVsc1sxMV07IC8qIGFicy5vZnM6IDMzNiAqLworCXU4IHJlc2VydmVkMTJbNl07CisKKy8qCisgKiA0OTY1IGRyaXZlciByZXF1aXJlcyB0eHBvd2VyIGNhbGlicmF0aW9uIGZvcm1hdCB2ZXJzaW9uIDUgb3IgZ3JlYXRlci4KKyAqIERyaXZlciBkb2VzIG5vdCB3b3JrIHdpdGggdHhwb3dlciBjYWxpYnJhdGlvbiB2ZXJzaW9uIDwgNS4KKyAqIFRoaXMgdmFsdWUgaXMgc2ltcGx5IGEgMTYtYml0IG51bWJlciwgbm8gbWFqb3IvbWlub3IgdmVyc2lvbnMgaGVyZS4KKyAqLworCXUxNiBjYWxpYl92ZXJzaW9uOwkvKiBhYnMub2ZzOiAzNjQgKi8KKwl1OCByZXNlcnZlZDEzWzJdOworCXU4IHJlc2VydmVkMTRbOTZdOwkvKiBhYnMub2ZzOiAzNjggKi8KKworLyoKKyAqIDQ5NjUgVHhwb3dlciBjYWxpYnJhdGlvbiBkYXRhLgorICovCisJc3RydWN0IGl3bDQ5NjVfZWVwcm9tX2NhbGliX2luZm8gY2FsaWJfaW5mbzsJLyogYWJzLm9mczogNDY0ICovCisKKwl1OCByZXNlcnZlZDE2WzE0MF07CS8qIGZpbGwgb3V0IHRvIGZ1bGwgMTAyNCBieXRlIGJsb2NrICovCisKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgSVdMX0VFUFJPTV9JTUFHRV9TSVpFIDEwMjQKKworLyogRW5kIG9mIEVFUFJPTSAqLworCitzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgeworCWludCAoKnZlcmlmeV9zaWduYXR1cmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCWludCAoKmFjcXVpcmVfc2VtYXBob3JlKSAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwl2b2lkICgqcmVsZWFzZV9zZW1hcGhvcmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworfTsKKworCit2b2lkIGl3bF9lZXByb21fZ2V0X21hYyhjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4ICptYWMpOworaW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCitpbnQgaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKK2ludCBpd2xfaW5pdF9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfZnJlZV9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bF9nZXRfY2hhbm5lbF9pbmZvKAorCQljb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpOworCisjZW5kaWYgIC8qIF9faXdsX2VlcHJvbV9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGIyN2YxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0wLDAgKzEsMjc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBUb21hcyBXaW5rbGVyIDx0b21hcy53aW5rbGVyQGludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgIml3bC00OTY1LmgiIC8qIEZJWE1FOiByZW1vdmUgKi8KKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKworCisjZGVmaW5lIElXTF9DTUQoeCkgY2FzZSB4IDogcmV0dXJuICN4CisKK2NvbnN0IGNoYXIgKmdldF9jbWRfc3RyaW5nKHU4IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCQlJV0xfQ01EKFJFUExZX0FMSVZFKTsKKwkJSVdMX0NNRChSRVBMWV9FUlJPUik7CisJCUlXTF9DTUQoUkVQTFlfUlhPTik7CisJCUlXTF9DTUQoUkVQTFlfUlhPTl9BU1NPQyk7CisJCUlXTF9DTUQoUkVQTFlfUU9TX1BBUkFNKTsKKwkJSVdMX0NNRChSRVBMWV9SWE9OX1RJTUlORyk7CisJCUlXTF9DTUQoUkVQTFlfQUREX1NUQSk7CisJCUlXTF9DTUQoUkVQTFlfUkVNT1ZFX1NUQSk7CisJCUlXTF9DTUQoUkVQTFlfUkVNT1ZFX0FMTF9TVEEpOworCQlJV0xfQ01EKFJFUExZX1dFUEtFWSk7CisJCUlXTF9DTUQoUkVQTFlfVFgpOworCQlJV0xfQ01EKFJFUExZX1JBVEVfU0NBTEUpOworCQlJV0xfQ01EKFJFUExZX0xFRFNfQ01EKTsKKwkJSVdMX0NNRChSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01EKTsKKwkJSVdMX0NNRChSQURBUl9OT1RJRklDQVRJT04pOworCQlJV0xfQ01EKFJFUExZX1FVSUVUX0NNRCk7CisJCUlXTF9DTUQoUkVQTFlfQ0hBTk5FTF9TV0lUQ0gpOworCQlJV0xfQ01EKENIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTik7CisJCUlXTF9DTUQoUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01EKTsKKwkJSVdMX0NNRChTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTik7CisJCUlXTF9DTUQoUE9XRVJfVEFCTEVfQ01EKTsKKwkJSVdMX0NNRChQTV9TTEVFUF9OT1RJRklDQVRJT04pOworCQlJV0xfQ01EKFBNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDKTsKKwkJSVdMX0NNRChSRVBMWV9TQ0FOX0NNRCk7CisJCUlXTF9DTUQoUkVQTFlfU0NBTl9BQk9SVF9DTUQpOworCQlJV0xfQ01EKFNDQU5fU1RBUlRfTk9USUZJQ0FUSU9OKTsKKwkJSVdMX0NNRChTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OKTsKKwkJSVdMX0NNRChTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTik7CisJCUlXTF9DTUQoQkVBQ09OX05PVElGSUNBVElPTik7CisJCUlXTF9DTUQoUkVQTFlfVFhfQkVBQ09OKTsKKwkJSVdMX0NNRChXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OKTsKKwkJSVdMX0NNRChRVUlFVF9OT1RJRklDQVRJT04pOworCQlJV0xfQ01EKFJFUExZX1RYX1BXUl9UQUJMRV9DTUQpOworCQlJV0xfQ01EKE1FQVNVUkVfQUJPUlRfTk9USUZJQ0FUSU9OKTsKKwkJSVdMX0NNRChSRVBMWV9CVF9DT05GSUcpOworCQlJV0xfQ01EKFJFUExZX1NUQVRJU1RJQ1NfQ01EKTsKKwkJSVdMX0NNRChTVEFUSVNUSUNTX05PVElGSUNBVElPTik7CisJCUlXTF9DTUQoUkVQTFlfQ0FSRF9TVEFURV9DTUQpOworCQlJV0xfQ01EKENBUkRfU1RBVEVfTk9USUZJQ0FUSU9OKTsKKwkJSVdMX0NNRChNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04pOworCQlJV0xfQ01EKFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCk7CisJCUlXTF9DTUQoU0VOU0lUSVZJVFlfQ01EKTsKKwkJSVdMX0NNRChSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EKTsKKwkJSVdMX0NNRChSRVBMWV9SWF9QSFlfQ01EKTsKKwkJSVdMX0NNRChSRVBMWV9SWF9NUERVX0NNRCk7CisJCUlXTF9DTUQoUkVQTFlfUlgpOworCQlJV0xfQ01EKFJFUExZX0NPTVBSRVNTRURfQkEpOworCWRlZmF1bHQ6CisJCXJldHVybiAiVU5LTk9XTiI7CisKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGdldF9jbWRfc3RyaW5nKTsKKworI2RlZmluZSBIT1NUX0NPTVBMRVRFX1RJTUVPVVQgKEhaIC8gMikKKworc3RhdGljIGludCBpd2xfZ2VuZXJpY19jbWRfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKKworCWlmICghc2tiKSB7CisJCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJXMuXG4iLAorCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCkpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwa3QgPSAoc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICopc2tiLT5kYXRhOworCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgeworCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSAlcyAoMHglMDhYKVxuIiwKKwkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJSVdMX0RFQlVHX0hDKCJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CisKKwkvKiBMZXQgaXdsX3R4X2NvbXBsZXRlIGZyZWUgdGhlIHJlc3BvbnNlIHNrYiAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGl3bF9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCkKK3sKKwlpbnQgcmV0OworCisJQlVHX09OKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSk7CisKKwkvKiBBbiBhc3luY2hyb25vdXMgY29tbWFuZCBjYW4gbm90IGV4cGVjdCBhbiBTS0IgdG8gYmUgc2V0LiAqLworCUJVR19PTihjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpOworCisJLyogQXNzaWduIGEgZ2VuZXJpYyBjYWxsYmFjayBpZiBvbmUgaXMgbm90IHByb3ZpZGVkICovCisJaWYgKCFjbWQtPm1ldGEudS5jYWxsYmFjaykKKwkJY21kLT5tZXRhLnUuY2FsbGJhY2sgPSBpd2xfZ2VuZXJpY19jbWRfY2FsbGJhY2s7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBwcml2LT5jZmctPm9wcy0+dXRpbHMtPmVucXVldWVfaGNtZChwcml2LCBjbWQpOworCWlmIChyZXQgPCAwKSB7CisJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCisJCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGl3bF9zZW5kX2NtZF9zeW5jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9ob3N0X2NtZCAqY21kKQoreworCWludCBjbWRfaWR4OworCWludCByZXQ7CisKKwlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKTsKKworCSAvKiBBIHN5bmNocm9ub3VzIGNvbW1hbmQgY2FuIG5vdCBoYXZlIGEgY2FsbGJhY2sgc2V0LiAqLworCUJVR19PTihjbWQtPm1ldGEudS5jYWxsYmFjayAhPSBOVUxMKTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKKwkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXNldF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKKworCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpCisJCWNtZC0+bWV0YS5zb3VyY2UgPSAmY21kLT5tZXRhOworCisJY21kX2lkeCA9IHByaXYtPmNmZy0+b3BzLT51dGlscy0+ZW5xdWV1ZV9oY21kKHByaXYsIGNtZCk7CisJaWYgKGNtZF9pZHggPCAwKSB7CisJCXJldCA9IGNtZF9pZHg7CisJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCisJCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCisJCQkhdGVzdF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSwKKwkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7CisJaWYgKCFyZXQpIHsKKwkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKKwkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCisJCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKKwkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CisKKwkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gY2FuY2VsOworCQl9CisJfQorCisJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKKwkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7CisJCXJldCA9IC1FQ0FOQ0VMRUQ7CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKHRlc3RfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHX0lORk8oIkNvbW1hbmQgJXMgZmFpbGVkOiBGVyBFcnJvclxuIiwKKwkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPm1ldGEudS5za2IpIHsKKwkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAnJXMnXG4iLAorCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IDA7CisJZ290byBvdXQ7CisKK2NhbmNlbDoKKwlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7CisJCXN0cnVjdCBpd2xfY21kICpxY21kOworCisJCS8qIENhbmNlbCB0aGUgQ01EX1dBTlRfU0tCIGZsYWcgZm9yIHRoZSBjbWQgaW4gdGhlCisJCSAqIFRYIGNtZCBxdWV1ZS4gT3RoZXJ3aXNlIGluIGNhc2UgdGhlIGNtZCBjb21lcworCQkgKiBpbiBsYXRlciwgaXQgd2lsbCBwb3NzaWJseSBzZXQgYW4gaW52YWxpZAorCQkgKiBhZGRyZXNzIChjbWQtPm1ldGEuc291cmNlKS4gKi8KKwkJcWNtZCA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dLmNtZFtjbWRfaWR4XTsKKwkJcWNtZC0+bWV0YS5mbGFncyAmPSB+Q01EX1dBTlRfU0tCOworCX0KK2ZhaWw6CisJaWYgKGNtZC0+bWV0YS51LnNrYikgeworCQlkZXZfa2ZyZWVfc2tiX2FueShjbWQtPm1ldGEudS5za2IpOworCQljbWQtPm1ldGEudS5za2IgPSBOVUxMOworCX0KK291dDoKKwljbGVhcl9iaXQoU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NtZF9zeW5jKTsKKworaW50IGl3bF9zZW5kX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCkKK3sKKwlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKQorCQlyZXR1cm4gaXdsX3NlbmRfY21kX2FzeW5jKHByaXYsIGNtZCk7CisKKwlyZXR1cm4gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgY21kKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfY21kKTsKKworaW50IGl3bF9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gaWQsCisJCS5sZW4gPSBsZW4sCisJCS5kYXRhID0gZGF0YSwKKwl9OworCisJcmV0dXJuIGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworfQorRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9jbWRfcGR1KTsKKworaW50IGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgdTggaWQsIHUxNiBsZW4sIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICBpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKK3sKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gaWQsCisJCS5sZW4gPSBsZW4sCisJCS5kYXRhID0gZGF0YSwKKwl9OworCisJY21kLm1ldGEuZmxhZ3MgfD0gQ01EX0FTWU5DOworCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBjYWxsYmFjazsKKworCXJldHVybiBpd2xfc2VuZF9jbWRfYXN5bmMocHJpdiwgJmNtZCk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCmluZGV4IDg5OTNjY2EuLmE0NDM0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTI1NCw2ICsyNTQsMjYgQEAKIAlyZXR1cm4gc2l6ZW9mKGFkZHIpID4gc2l6ZW9mKHUzMikgPyAoYWRkciA+PiAxNikgPj4gMTYgOiAwOwogfQogCisvKioKKyAqIGl3bF9xdWV1ZV9pbmNfd3JhcCAtIGluY3JlbWVudCBxdWV1ZSBpbmRleCwgd3JhcCBiYWNrIHRvIGJlZ2lubmluZworICogQGluZGV4IC0tIGN1cnJlbnQgaW5kZXgKKyAqIEBuX2JkIC0tIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXVlIChtdXN0IGJlIHBvd2VyIG9mIDIpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGl3bF9xdWV1ZV9pbmNfd3JhcChpbnQgaW5kZXgsIGludCBuX2JkKQoreworCXJldHVybiArK2luZGV4ICYgKG5fYmQgLSAxKTsKK30KKworLyoqCisgKiBpd2xfcXVldWVfZGVjX3dyYXAgLSBkZWNyZW1lbnQgcXVldWUgaW5kZXgsIHdyYXAgYmFjayB0byBlbmQKKyAqIEBpbmRleCAtLSBjdXJyZW50IGluZGV4CisgKiBAbl9iZCAtLSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiBxdWV1ZSAobXVzdCBiZSBwb3dlciBvZiAyKQorICovCitzdGF0aWMgaW5saW5lIGludCBpd2xfcXVldWVfZGVjX3dyYXAoaW50IGluZGV4LCBpbnQgbl9iZCkKK3sKKwlyZXR1cm4gLS1pbmRleCAmIChuX2JkIC0gMSk7Cit9CisKIC8qIFRPRE86IE1vdmUgZndfZGVzYyBmdW5jdGlvbnMgdG8gaXdsLXBjaS5rbyAqLwogc3RhdGljIGlubGluZSB2b2lkIGl3bF9mcmVlX2Z3X2Rlc2Moc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkJICAgIHN0cnVjdCBmd19kZXNjICpkZXNjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjM2RmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTAsMCArMSw0MjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19pd2xfaW9faF9fCisjZGVmaW5lIF9faXdsX2lvX2hfXworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgorCisvKgorICogSU8sIHJlZ2lzdGVyLCBhbmQgTklDIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCisgKgorICogTk9URSBvbiBuYW1pbmcgY29udmVudGlvbiBhbmQgbWFjcm8gdXNhZ2UgZm9yIHRoZXNlCisgKgorICogQSBzaW5nbGUgXyBwcmVmaXggYmVmb3JlIGEgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgbm8gc3RhdGUKKyAqIGNoZWNrIG9yIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBBIGRvdWJsZSBfXyBwcmVmaXggYmVmb3JlIGFuIGFjY2VzcyBmdW5jdGlvbiBtZWFucyB0aGF0IHN0YXRlIGlzIGNoZWNrZWQKKyAqIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBhbmQgY2FsbGVyIGZ1bmN0aW9uIG5hbWUgYXJlIHByaW50ZWQgaW4gYWRkaXRpb24KKyAqIHRvIGFueSBvdGhlciBkZWJ1ZyBvdXRwdXQuCisgKgorICogVGhlIG5vbi1wcmVmaXhlZCBuYW1lIGlzIHRoZSAjZGVmaW5lIHRoYXQgbWFwcyB0aGUgY2FsbGVyIGludG8gYQorICogI2RlZmluZSB0aGF0IHByb3ZpZGVzIHRoZSBjYWxsZXIncyBuYW1lIGFuZCBfX0xJTkVfXyB0byB0aGUgZG91YmxlCisgKiBwcmVmaXggdmVyc2lvbi4KKyAqCisgKiBJZiB5b3Ugd2lzaCB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRob3V0IGFueSBkZWJ1ZyBvciBzdGF0ZSBjaGVja2luZywKKyAqIHlvdSBzaG91bGQgdXNlIHRoZSBzaW5nbGUgXyBwcmVmaXggdmVyc2lvbiAoYXMgaXMgdXNlZCBieSBkZXBlbmRlbnQgSU8KKyAqIHJvdXRpbmVzLCBmb3IgZXhhbXBsZSBfaXdsX3JlYWRfZGlyZWN0MzIgY2FsbHMgdGhlIG5vbi1jaGVjayB2ZXJzaW9uIG9mCisgKiBfaXdsX3JlYWQzMi4pCisgKgorICogVGhlc2UgZGVjbGFyYXRpb25zIGFyZSAqZXh0cmVtZWx5KiB1c2VmdWwgaW4gcXVpY2tseSBpc29sYXRpbmcgY29kZSBkZWx0YXMKKyAqIHdoaWNoIHJlc3VsdCBpbiBtaXNjb25maWd1cmluZyBvZiB0aGUgaGFyZHdhcmUgSS9PLiAgSW4gY29tYmluYXRpb24gd2l0aAorICogZ2l0LWJpc2VjdCBhbmQgdGhlIElPIGRlYnVnIGxldmVsIHlvdSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljCisgKiBjb21taXQgd2hpY2ggYnJlYWtzIHRoZSBJTyBzZXF1ZW5jZSB0byB0aGUgaGFyZHdhcmUuCisgKgorICovCisKKyNkZWZpbmUgX2l3bF93cml0ZTMyKHByaXYsIG9mcywgdmFsKSB3cml0ZWwoKHZhbCksIChwcml2KS0+aHdfYmFzZSArIChvZnMpKQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitzdGF0aWMgaW5saW5lIHZvaWQgX19pd2xfd3JpdGUzMihjb25zdCBjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSB1MzIgb2ZzLCB1MzIgdmFsKQoreworCUlXTF9ERUJVR19JTygid3JpdGUzMigweCUwOFgsIDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCB2YWwsIGYsIGwpOworCV9pd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCk7Cit9CisjZGVmaW5lIGl3bF93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBcCisJX19pd2xfd3JpdGUzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIG9mcywgdmFsKQorI2Vsc2UKKyNkZWZpbmUgaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpIF9pd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkKKyNlbmRpZgorCisjZGVmaW5lIF9pd2xfcmVhZDMyKHByaXYsIG9mcykgcmVhZGwoKHByaXYpLT5od19iYXNlICsgKG9mcykpCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK3N0YXRpYyBpbmxpbmUgdTMyIF9faXdsX3JlYWQzMihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzKQoreworCUlXTF9ERUJVR19JTygicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7CisJcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7Cit9CisjZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCisjZWxzZQorI2RlZmluZSBpd2xfcmVhZDMyKHAsIG8pIF9pd2xfcmVhZDMyKHAsIG8pCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgX2l3bF9wb2xsX2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLAorCQkJCXUzMiBiaXRzLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCit7CisJaW50IGkgPSAwOworCisJZG8geworCQlpZiAoKF9pd2xfcmVhZDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gKGJpdHMgJiBtYXNrKSkKKwkJCXJldHVybiBpOworCQltZGVsYXkoMTApOworCQlpICs9IDEwOworCX0gd2hpbGUgKGkgPCB0aW1lb3V0KTsKKworCXJldHVybiAtRVRJTUVET1VUOworfQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitzdGF0aWMgaW5saW5lIGludCBfX2l3bF9wb2xsX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKKwkJCQkgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKKwkJCQkgdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgcmV0ID0gX2l3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKKwlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAorCQkgICAgIGFkZHIsIGJpdHMsIG1hc2ssCisJCSAgICAgdW5saWtlbHkocmV0ICA9PSAtRVRJTUVET1VUKT8idGltZW91dCI6IiIsIGYsIGwpOworCXJldHVybiByZXQ7Cit9CisjZGVmaW5lIGl3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KSBcCisJX19pd2xfcG9sbF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KQorI2Vsc2UKKyNkZWZpbmUgaXdsX3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2xfcG9sbF9iaXQocCwgYSwgYiwgbSwgdCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX2l3bF9zZXRfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJX2l3bF93cml0ZTMyKHByaXYsIHJlZywgX2l3bF9yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2spOworfQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitzdGF0aWMgaW5saW5lIHZvaWQgX19pd2xfc2V0X2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKKwkJCQkgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKK3sKKwl1MzIgdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2s7CisJSVdMX0RFQlVHX0lPKCJzZXRfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WFxuIiwgcmVnLCBtYXNrLCB2YWwpOworCV9pd2xfd3JpdGUzMihwcml2LCByZWcsIHZhbCk7Cit9CisjZGVmaW5lIGl3bF9zZXRfYml0KHAsIHIsIG0pIF9faXdsX3NldF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwLCByLCBtKQorI2Vsc2UKKyNkZWZpbmUgaXdsX3NldF9iaXQocCwgciwgbSkgX2l3bF9zZXRfYml0KHAsIHIsIG0pCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIF9pd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJX2l3bF93cml0ZTMyKHByaXYsIHJlZywgX2l3bF9yZWFkMzIocHJpdiwgcmVnKSAmIH5tYXNrKTsKK30KKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIGlubGluZSB2b2lkIF9faXdsX2NsZWFyX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKKwkJCQkgICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCXUzMiB2YWwgPSBfaXdsX3JlYWQzMihwcml2LCByZWcpICYgfm1hc2s7CisJSVdMX0RFQlVHX0lPKCJjbGVhcl9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7CisJX2l3bF93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKK30KKyNkZWZpbmUgaXdsX2NsZWFyX2JpdChwLCByLCBtKSBfX2l3bF9jbGVhcl9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwLCByLCBtKQorI2Vsc2UKKyNkZWZpbmUgaXdsX2NsZWFyX2JpdChwLCByLCBtKSBfaXdsX2NsZWFyX2JpdChwLCByLCBtKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXUzMiBncF9jdGw7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKwlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpIHx8CisJICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfV0FSTklORygiV0FSTklORzogUmVxdWVzdGluZyBNQUMgYWNjZXNzIGR1cmluZyBSRktJTEwgIgorCQkJIndha2VzIHVwIE5JQ1xuIik7CisKKwkJLyogMTAgbXNlYyBhbGxvd3MgdGltZSBmb3IgTklDIHRvIGNvbXBsZXRlIGl0cyBkYXRhIHNhdmUgKi8KKwkJZ3BfY3RsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKKwkJaWYgKGdwX2N0bCAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkpIHsKKwkJCUlXTF9ERUJVR19SRl9LSUxMKCJXYWl0IGZvciBjb21wbGV0ZSBwb3dlci1kb3duLCAiCisJCQkJImdwY3RsID0gMHglMDh4XG4iLCBncF9jdGwpOworCQkJbWRlbGF5KDEwKTsKKwkJfSBlbHNlCisJCQlJV0xfREVCVUdfUkZfS0lMTCgicG93ZXItZG93biBjb21wbGV0ZSwgIgorCQkJCQkgICJncGN0bCA9IDB4JTA4eFxuIiwgZ3BfY3RsKTsKKwl9CisKKwkvKiB0aGlzIGJpdCB3YWtlcyB1cCB0aGUgTklDICovCisJX2l3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKwlyZXQgPSBfaXdsX3BvbGxfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwkJCSAgIENTUl9HUF9DTlRSTF9SRUdfVkFMX01BQ19BQ0NFU1NfRU4sCisJCQkgICAoQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSB8CisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0dPSU5HX1RPX1NMRUVQKSwgNTApOworCWlmIChyZXQgPCAwKSB7CisJCUlXTF9FUlJPUigiTUFDIGlzIGluIGRlZXAgc2xlZXAhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlhdG9taWNfaW5jKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIGlubGluZSBpbnQgX19pd2xfZ3JhYl9uaWNfYWNjZXNzKGNvbnN0IGNoYXIgKmYsIHUzMiBsLAorCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKKwkJSVdMX0VSUk9SKCJHcmFiYmluZyBhY2Nlc3Mgd2hpbGUgYWxyZWFkeSBoZWxkICVzICVkLlxuIiwgZiwgbCk7CisKKwlJV0xfREVCVUdfSU8oImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CisJcmV0dXJuIF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworfQorI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKKwlfX2l3bF9ncmFiX25pY19hY2Nlc3MoX19GSUxFX18sIF9fTElORV9fLCBwcml2KQorI2Vsc2UKKyNkZWZpbmUgaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSBcCisJX2l3bF9ncmFiX25pY19hY2Nlc3MocHJpdikKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX2l3bF9yZWxlYXNlX25pY19hY2Nlc3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCisjZW5kaWYKKwkJX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkJICAgICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Cit9CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF9yZWxlYXNlX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCisJCQkJCSAgICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKGF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpIDw9IDApCisJCUlXTF9FUlJPUigiUmVsZWFzZSB1bmhlbGQgbmljIGFjY2VzcyBhdCBsaW5lICVzICVkLlxuIiwgZiwgbCk7CisKKwlJV0xfREVCVUdfSU8oInJlbGVhc2luZyBuaWMgYWNjZXNzIC0gJXMgJWRcbiIsIGYsIGwpOworCV9pd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworfQorI2RlZmluZSBpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKKwlfX2l3bF9yZWxlYXNlX25pY19hY2Nlc3MoX19GSUxFX18sIF9fTElORV9fLCBwcml2KQorI2Vsc2UKKyNkZWZpbmUgaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCisJX2l3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdikKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHUzMiBfaXdsX3JlYWRfZGlyZWN0MzIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQoreworCXJldHVybiBfaXdsX3JlYWQzMihwcml2LCByZWcpOworfQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitzdGF0aWMgaW5saW5lIHUzMiBfX2l3bF9yZWFkX2RpcmVjdDMyKGNvbnN0IGNoYXIgKmYsIHUzMiBsLAorCQkJCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCit7CisJdTMyIHZhbHVlID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIHJlZyk7CisJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKKwkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgJWRcbiIsIGYsIGwpOworCUlXTF9ERUJVR19JTygicmVhZF9kaXJlY3QzMigweCU0WCkgPSAweCUwOHggLSAlcyAlZCBcbiIsIHJlZywgdmFsdWUsCisJCSAgICAgZiwgbCk7CisJcmV0dXJuIHZhbHVlOworfQorI2RlZmluZSBpd2xfcmVhZF9kaXJlY3QzMihwcml2LCByZWcpIFwKKwlfX2l3bF9yZWFkX2RpcmVjdDMyKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdiwgcmVnKQorI2Vsc2UKKyNkZWZpbmUgaXdsX3JlYWRfZGlyZWN0MzIgX2l3bF9yZWFkX2RpcmVjdDMyCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIF9pd2xfd3JpdGVfZGlyZWN0MzIoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgdTMyIHJlZywgdTMyIHZhbHVlKQoreworCV9pd2xfd3JpdGUzMihwcml2LCByZWcsIHZhbHVlKTsKK30KKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIHZvaWQgX19pd2xfd3JpdGVfZGlyZWN0MzIoY29uc3QgY2hhciAqZiAsIHUzMiBsaW5lLAorCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQoreworCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCisJCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCV9pd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSk7Cit9CisjZGVmaW5lIGl3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsIHZhbHVlKSBcCisJX19pd2xfd3JpdGVfZGlyZWN0MzIoX19mdW5jX18sIF9fTElORV9fLCBwcml2LCByZWcsIHZhbHVlKQorI2Vsc2UKKyNkZWZpbmUgaXdsX3dyaXRlX2RpcmVjdDMyIF9pd2xfd3JpdGVfZGlyZWN0MzIKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX3JlZ19idWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgICAgdTMyIHJlZywgdTMyIGxlbiwgdTMyICp2YWx1ZXMpCit7CisJdTMyIGNvdW50ID0gc2l6ZW9mKHUzMik7CisKKwlpZiAoKHByaXYgIT0gTlVMTCkgJiYgKHZhbHVlcyAhPSBOVUxMKSkgeworCQlmb3IgKDsgMCA8IGxlbjsgbGVuIC09IGNvdW50LCByZWcgKz0gY291bnQsIHZhbHVlcysrKQorCQkJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsICp2YWx1ZXMpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgX2l3bF9wb2xsX2RpcmVjdF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICB1MzIgYWRkciwgdTMyIG1hc2ssIGludCB0aW1lb3V0KQoreworCWludCBpID0gMDsKKworCWRvIHsKKwkJaWYgKChfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgYWRkcikgJiBtYXNrKSA9PSBtYXNrKQorCQkJcmV0dXJuIGk7CisJCW1kZWxheSgxMCk7CisJCWkgKz0gMTA7CisJfSB3aGlsZSAoaSA8IHRpbWVvdXQpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIGlubGluZSBpbnQgX19pd2xfcG9sbF9kaXJlY3RfYml0KGNvbnN0IGNoYXIgKmYsIHUzMiBsLAorCQkJCQkgICAgc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgdTMyIGFkZHIsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgcmV0ICA9IF9pd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIGFkZHIsIG1hc2ssIHRpbWVvdXQpOworCisJaWYgKHVubGlrZWx5KHJldCA9PSAtRVRJTUVET1VUKSkKKwkJSVdMX0RFQlVHX0lPKCJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpIC0gIgorCQkJICAgICAidGltZWRvdXQgLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgZiwgbCk7CisJZWxzZQorCQlJV0xfREVCVUdfSU8oInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgorCQkJICAgICAiLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgcmV0LCBmLCBsKTsKKwlyZXR1cm4gcmV0OworfQorI2RlZmluZSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIGFkZHIsIG1hc2ssIHRpbWVvdXQpIFwKKwlfX2l3bF9wb2xsX2RpcmVjdF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KQorI2Vsc2UKKyNkZWZpbmUgaXdsX3BvbGxfZGlyZWN0X2JpdCBfaXdsX3BvbGxfZGlyZWN0X2JpdAorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdTMyIF9pd2xfcmVhZF9wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKK3sKKwlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1JBRERSLCByZWcgfCAoMyA8PCAyNCkpOworCXJldHVybiBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkRBVCk7Cit9CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK3N0YXRpYyBpbmxpbmUgdTMyIF9faXdsX3JlYWRfcHJwaChjb25zdCBjaGFyICpmLCB1MzIgbGluZSwKKwkJCQkgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKK3sKKwlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQorCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKKwlyZXR1cm4gX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKK30KKworI2RlZmluZSBpd2xfcmVhZF9wcnBoKHByaXYsIHJlZykgXAorCV9faXdsX3JlYWRfcHJwaChfX2Z1bmNfXywgX19MSU5FX18sIHByaXYsIHJlZykKKyNlbHNlCisjZGVmaW5lIGl3bF9yZWFkX3BycGggX2l3bF9yZWFkX3BycGgKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX2l3bF93cml0ZV9wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgICB1MzIgYWRkciwgdTMyIHZhbCkKK3sKKwlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1dBRERSLAorCQkJICAgICAgKChhZGRyICYgMHgwMDAwRkZGRikgfCAoMyA8PCAyNCkpKTsKKwlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1dEQVQsIHZhbCk7Cit9CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF93cml0ZV9wcnBoKGNvbnN0IGNoYXIgKmYsIHUzMiBsaW5lLAorCQkJCSAgICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQoreworCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCisJCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCV9pd2xfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpOworfQorCisjZGVmaW5lIGl3bF93cml0ZV9wcnBoKHByaXYsIGFkZHIsIHZhbCkgXAorCV9faXdsX3dyaXRlX3BycGgoX19mdW5jX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCB2YWwpOworI2Vsc2UKKyNkZWZpbmUgaXdsX3dyaXRlX3BycGggX2l3bF93cml0ZV9wcnBoCisjZW5kaWYKKworI2RlZmluZSBfaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKSBcCisJX2l3bF93cml0ZV9wcnBoKHByaXYsIHJlZywgKF9pd2xfcmVhZF9wcnBoKHByaXYsIHJlZykgfCBtYXNrKSkKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3NldF9iaXRzX3BycGgoY29uc3QgY2hhciAqZiwgdTMyIGxpbmUsCisJCQkJICAgICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgdTMyIHJlZywgdTMyIG1hc2spCit7CisJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKKwkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisKKwlfaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKK30KKyNkZWZpbmUgaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKSBcCisJX19pd2xfc2V0X2JpdHNfcHJwaChfX2Z1bmNfXywgX19MSU5FX18sIHByaXYsIHJlZywgbWFzaykKKyNlbHNlCisjZGVmaW5lIGl3bF9zZXRfYml0c19wcnBoIF9pd2xfc2V0X2JpdHNfcHJwaAorI2VuZGlmCisKKyNkZWZpbmUgX2l3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCisJX2l3bF93cml0ZV9wcnBoKHByaXYsIHJlZywgKChfaXdsX3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKSkKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitzdGF0aWMgaW5saW5lIHZvaWQgX19pd2xfc2V0X2JpdHNfbWFza19wcnBoKGNvbnN0IGNoYXIgKmYsIHUzMiBsaW5lLAorCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBiaXRzLCB1MzIgbWFzaykKK3sKKwlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQorCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKKwlfaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spOworfQorI2RlZmluZSBpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzaykgXAorCV9faXdsX3NldF9iaXRzX21hc2tfcHJwaChfX2Z1bmNfXywgX19MSU5FX18sIHByaXYsIHJlZywgYml0cywgbWFzaykKKyNlbHNlCisjZGVmaW5lIGl3bF9zZXRfYml0c19tYXNrX3BycGggX2l3bF9zZXRfYml0c19tYXNrX3BycGgKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2NsZWFyX2JpdHNfcHJwaChzdHJ1Y3QgaXdsX3ByaXYKKwkJCQkJCSAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJdTMyIHZhbCA9IF9pd2xfcmVhZF9wcnBoKHByaXYsIHJlZyk7CisJX2l3bF93cml0ZV9wcnBoKHByaXYsIHJlZywgKHZhbCAmIH5tYXNrKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGl3bF9yZWFkX3RhcmdfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCit7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIGFkZHIpOworCXJldHVybiBpd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX3RhcmdfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiB2YWwpCit7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfd3JpdGVfdGFyZ19tZW1fYnVmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCisJCQkJCSAgdTMyIGxlbiwgdTMyICp2YWx1ZXMpCit7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOworCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gc2l6ZW9mKHUzMiksIHZhbHVlcysrKQorCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9XREFULCAqdmFsdWVzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2ZkZjViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisKKyNkZWZpbmUgSVdMXzFNQl9SQVRFICgxMjggKiAxMDI0KQorI2RlZmluZSBJV0xfTEVEX1RIUkVTSE9MRCAoMTYpCisjZGVmaW5lIElXTF9NQVhfQkxJTktfVEJMICgxMCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdTE2IHRwdDsKKwl1OCBvbl90aW1lOworCXU4IG9mX3RpbWU7Cit9IGJsaW5rX3RibFtdID0KK3sKKwl7MzAwLCAyNSwgMjV9LAorCXsyMDAsIDQwLCA0MH0sCisJezEwMCwgNTUsIDU1fSwKKwl7NzAsIDY1LCA2NX0sCisJezUwLCA3NSwgNzV9LAorCXsyMCwgODUsIDg1fSwKKwl7MTUsIDk1LCA5NSB9LAorCXsxMCwgMTEwLCAxMTB9LAorCXs1LCAxMzAsIDEzMH0sCisJezAsIDE2NywgMTY3fQorfTsKKworc3RhdGljIGludCBpd2xfbGVkX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gMTsKK30KKworCisvKiBTZW5kIGxlZCBjb21tYW5kICovCitzdGF0aWMgaW50IGl3bF9zZW5kX2xlZF9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgIHN0cnVjdCBpd2w0OTY1X2xlZF9jbWQgKmxlZF9jbWQpCit7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX0xFRFNfQ01ELAorCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2xlZF9jbWQpLAorCQkuZGF0YSA9IGxlZF9jbWQsCisJCS5tZXRhLmZsYWdzID0gQ01EX0FTWU5DLAorCQkubWV0YS51LmNhbGxiYWNrID0gaXdsX2xlZF9jbWRfY2FsbGJhY2sKKwl9OworCXUzMiByZWc7CisKKwlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9MRURfUkVHKTsKKwlpZiAocmVnICE9IChyZWcgJiBDU1JfTEVEX0JTTV9DVFJMX01TSykpCisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCByZWcgJiBDU1JfTEVEX0JTTV9DVFJMX01TSyk7CisKKwlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOworfQorCisKKy8qIFNldCBsZWQgb24gY29tbWFuZCAqLworc3RhdGljIGludCBpd2w0OTY1X2xlZF9vbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCit7CisJc3RydWN0IGl3bDQ5NjVfbGVkX2NtZCBsZWRfY21kID0geworCQkuaWQgPSBsZWRfaWQsCisJCS5vbiA9IElXTF9MRURfU09MSUQsCisJCS5vZmYgPSAwLAorCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKKwl9OworCXJldHVybiBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKK30KKworLyogU2V0IGxlZCBvbiBjb21tYW5kICovCitzdGF0aWMgaW50IGl3bDQ5NjVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAorCQkJICAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgaXdsNDk2NV9sZWRfY21kIGxlZF9jbWQgPSB7CisJCS5pZCA9IGxlZF9pZCwKKwkJLm9uID0gYnJpZ2h0bmVzcywKKwkJLm9mZiA9IGJyaWdodG5lc3MsCisJCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAorCX07CisJaWYgKGJyaWdodG5lc3MgPT0gTEVEX0ZVTEwpIHsKKwkJbGVkX2NtZC5vbiA9IElXTF9MRURfU09MSUQ7CisJCWxlZF9jbWQub2ZmID0gMDsKKwl9CisJcmV0dXJuIGl3bF9zZW5kX2xlZF9jbWQocHJpdiwgJmxlZF9jbWQpOworfQorCisvKiBTZXQgbGVkIHJlZ2lzdGVyIG9mZiAqLworc3RhdGljIGludCBpd2w0OTY1X2xlZF9vbl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQoreworCUlXTF9ERUJVR19MRUQoImxlZCBvbiAlZFxuIiwgbGVkX2lkKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfTEVEX1JFRywgQ1NSX0xFRF9SRUdfVFJVTl9PTik7CisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCisvKiBTZXQgbGVkIG9mZiBjb21tYW5kICovCitpbnQgaXdsNDk2NV9sZWRfb2ZmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3sKKwlzdHJ1Y3QgaXdsNDk2NV9sZWRfY21kIGxlZF9jbWQgPSB7CisJCS5pZCA9IGxlZF9pZCwKKwkJLm9uID0gMCwKKwkJLm9mZiA9IDAsCisJCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAorCX07CisJSVdMX0RFQlVHX0xFRCgibGVkIG9mZiAlZFxuIiwgbGVkX2lkKTsKKwlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7Cit9CisjZW5kaWYKKworCisvKiBTZXQgbGVkIHJlZ2lzdGVyIG9mZiAqLworc3RhdGljIGludCBpd2w0OTY1X2xlZF9vZmZfcmVnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3sKKwlJV0xfREVCVUdfTEVEKCJyYWRpbyBvZmZcbiIpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09GRik7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBsZWQgYmxpbmsgY29tbWFuZCAqLworc3RhdGljIGludCBpd2w0OTY1X2xlZF9ub3Rfc29saWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAorCQkJICAgICAgIHU4IGJyaWdodG5lc3MpCit7CisJc3RydWN0IGl3bDQ5NjVfbGVkX2NtZCBsZWRfY21kID0geworCQkuaWQgPSBsZWRfaWQsCisJCS5vbiA9IGJyaWdodG5lc3MsCisJCS5vZmYgPSBicmlnaHRuZXNzLAorCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKKwl9OworCisJcmV0dXJuIGl3bF9zZW5kX2xlZF9jbWQocHJpdiwgJmxlZF9jbWQpOworfQorCisKKy8qCisgKiBicmlnaHRuZXNzIGNhbGwgYmFjayBmdW5jdGlvbiBmb3IgVHgvUnggTEVECisgKi8KK3N0YXRpYyBpbnQgaXdsNDk2NV9sZWRfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCit7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CisJICAgICF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm4gMDsKKworCisJLyogc3RhcnQgY291bnRpbmcgVHgvUnggYnl0ZXMgKi8KKwlpZiAoIXByaXYtPmxhc3RfYmxpbmtfdGltZSAmJiBwcml2LT5hbGxvd19ibGlua2luZykKKwkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gamlmZmllczsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGJyaWdodG5lc3MgY2FsbCBiYWNrIGZvciBhc3NvY2lhdGlvbiBhbmQgcmFkaW8KKyAqLworc3RhdGljIHZvaWQgaXdsNDk2NV9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJICAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgaXdsNDk2NV9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCBpd2w0OTY1X2xlZCwgbGVkX2Rldik7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gbGVkLT5wcml2OworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJyaWdodG5lc3MpIHsKKwljYXNlIExFRF9GVUxMOgorCQlpZiAobGVkLT50eXBlID09IElXTF9MRURfVFJHX0FTU09DKQorCQkJcHJpdi0+YWxsb3dfYmxpbmtpbmcgPSAxOworCisJCWlmIChsZWQtPmxlZF9vbikKKwkJCWxlZC0+bGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CisJCWJyZWFrOworCWNhc2UgTEVEX09GRjoKKwkJaWYgKGxlZC0+dHlwZSA9PSBJV0xfTEVEX1RSR19BU1NPQykKKwkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMDsKKworCQlpZiAobGVkLT5sZWRfb2ZmKQorCQkJbGVkLT5sZWRfb2ZmKHByaXYsIElXTF9MRURfTElOSyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChsZWQtPmxlZF9wYXR0ZXJuKQorCQkJbGVkLT5sZWRfcGF0dGVybihwcml2LCBJV0xfTEVEX0xJTkssIGJyaWdodG5lc3MpOworCQlicmVhazsKKwl9Cit9CisKKworCisvKgorICogUmVnaXN0ZXIgbGVkIGNsYXNzIHdpdGggdGhlIHN5c3RlbQorICovCitzdGF0aWMgaW50IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bDQ5NjVfbGVkICpsZWQsCisJCQkJICAgZW51bSBsZWRfdHlwZSB0eXBlLCB1OCBzZXRfbGVkLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gd2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSk7CisJaW50IHJldDsKKworCWxlZC0+bGVkX2Rldi5uYW1lID0gbmFtZTsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBpd2w0OTY1X2xlZF9icmlnaHRuZXNzX3NldDsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKworCWxlZC0+cHJpdiA9IHByaXY7CisJbGVkLT50eXBlID0gdHlwZTsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihkZXZpY2UsICZsZWQtPmxlZF9kZXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUk9SKCJFcnJvcjogZmFpbGVkIHRvIHJlZ2lzdGVyIGxlZCBoYW5kbGVyLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbGVkLT5yZWdpc3RlcmVkID0gMTsKKworCWlmIChzZXRfbGVkICYmIGxlZC0+bGVkX29uKQorCQlsZWQtPmxlZF9vbihwcml2LCBJV0xfTEVEX0xJTkspOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGNhbGN1bGF0ZSBibGluayByYXRlIGFjY29yZGluZyB0byBsYXN0IDIgc2VjIFR4L1J4IGFjdGl2aXRpZXMKKyAqLworc3RhdGljIGlubGluZSB1OCBnZXRfYmxpbmtfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJdTggYmxpbmtfcmF0ZTsKKwl1NjQgY3VycmVudF90cHQgPSBwcml2LT50eF9zdGF0c1syXS5ieXRlcyArIHByaXYtPnJ4X3N0YXRzWzJdLmJ5dGVzOworCXM2NCB0cHQgPSBjdXJyZW50X3RwdCAtIHByaXYtPmxlZF90cHQ7CisKKwlpZiAodHB0IDwgMCkgLyogd3JhcHBhcm91bmQgKi8KKwkJdHB0ID0gLXRwdDsKKworCXByaXYtPmxlZF90cHQgPSBjdXJyZW50X3RwdDsKKworCWlmICh0cHQgPCBJV0xfTEVEX1RIUkVTSE9MRCkgeworCQlpID0gSVdMX01BWF9CTElOS19UQkw7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IElXTF9NQVhfQkxJTktfVEJMOyBpKyspCisJCQlpZiAodHB0ICA+IChibGlua190YmxbaV0udHB0ICogSVdMXzFNQl9SQVRFKSkKKwkJCQlicmVhazsKKwl9CisJLyogaWYgMCBmcmFtZSBpcyB0cmFuc2ZlcmVkICovCisJaWYgKChpID09IElXTF9NQVhfQkxJTktfVEJMKSB8fCAhcHJpdi0+YWxsb3dfYmxpbmtpbmcpCisJCWJsaW5rX3JhdGUgPSBJV0xfTEVEX1NPTElEOworCWVsc2UKKwkJYmxpbmtfcmF0ZSA9IGJsaW5rX3RibFtpXS5vbl90aW1lOworCisJcmV0dXJuIGJsaW5rX3JhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBoYW5kbGVyLiBTaW5jZSBzZXR0aW5nIExlZCBjb21tYW5kIGNhbgorICogaGFwcGVuIHZlcnkgZnJlcXVlbnQgd2UgcG9zdHBvbmUgbGVkIGNvbW1hbmQgdG8gYmUgY2FsbGVkIGZyb20KKyAqIFJFUExZIGhhbmRsZXIgc28gd2Uga25vdyB1Y29kZSBpcyB1cAorICovCit2b2lkIGl3bF9sZWRzX2JhY2tncm91bmQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXU4IGJsaW5rX3JhdGU7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gMDsKKwkJcmV0dXJuOworCX0KKwlpZiAoaXNfcmZfa2lsbChwcml2KSkgeworCQlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCFwcml2LT5hbGxvd19ibGlua2luZykgeworCQlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSAwOworCQlpZiAocHJpdi0+bGFzdF9ibGlua19yYXRlICE9IElXTF9MRURfU09MSUQpIHsKKwkJCXByaXYtPmxhc3RfYmxpbmtfcmF0ZSA9IElXTF9MRURfU09MSUQ7CisJCQlpd2w0OTY1X2xlZF9vbihwcml2LCBJV0xfTEVEX0xJTkspOworCQl9CisJCXJldHVybjsKKwl9CisJaWYgKCFwcml2LT5sYXN0X2JsaW5rX3RpbWUgfHwKKwkgICAgIXRpbWVfYWZ0ZXIoamlmZmllcywgcHJpdi0+bGFzdF9ibGlua190aW1lICsKKwkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKQorCQlyZXR1cm47CisKKwlibGlua19yYXRlID0gZ2V0X2JsaW5rX3JhdGUocHJpdik7CisKKwkvKiBjYWxsIG9ubHkgaWYgYmxpbmsgcmF0ZSBjaGFuZ2UgKi8KKwlpZiAoYmxpbmtfcmF0ZSAhPSBwcml2LT5sYXN0X2JsaW5rX3JhdGUpIHsKKwkJaWYgKGJsaW5rX3JhdGUgIT0gSVdMX0xFRF9TT0xJRCkgeworCQkJcHJpdi0+bGFzdF9ibGlua190aW1lID0gamlmZmllcyArCisJCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMDApOworCQkJaXdsNDk2NV9sZWRfbm90X3NvbGlkKHByaXYsIElXTF9MRURfTElOSywgYmxpbmtfcmF0ZSk7CisJCX0gZWxzZSB7CisJCQlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSAwOworCQkJaXdsNDk2NV9sZWRfb24ocHJpdiwgSVdMX0xFRF9MSU5LKTsKKwkJfQorCX0KKworCXByaXYtPmxhc3RfYmxpbmtfcmF0ZSA9IGJsaW5rX3JhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9sZWRzX2JhY2tncm91bmQpOworCisvKiBSZWdpc3RlciBhbGwgbGVkIGhhbmRsZXIgKi8KK2ludCBpd2xfbGVkc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJY2hhciAqdHJpZ2dlcjsKKwljaGFyIG5hbWVbMzJdOworCWludCByZXQ7CisKKwlwcml2LT5sYXN0X2JsaW5rX3JhdGUgPSAwOworCXByaXYtPmxlZF90cHQgPSAwOworCXByaXYtPmxhc3RfYmxpbmtfdGltZSA9IDA7CisJcHJpdi0+YWxsb3dfYmxpbmtpbmcgPSAwOworCisJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIml3bC0lczpyYWRpbyIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2w0OTY1X2xlZF9vbl9yZWc7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb2ZmID0gaXdsNDk2NV9sZWRfb2ZmX3JlZzsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9wYXR0ZXJuID0gTlVMTDsKKworCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LAorCQkJCSAgICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLAorCQkJCSAgIElXTF9MRURfVFJHX1JBRElPLCAxLAorCQkJCSAgIG5hbWUsIHRyaWdnZXIpOworCWlmIChyZXQpCisJCWdvdG8gZXhpdF9mYWlsOworCisJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIml3bC0lczphc3NvYyIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCisJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsCisJCQkJICAgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10sCisJCQkJICAgSVdMX0xFRF9UUkdfQVNTT0MsIDAsCisJCQkJICAgbmFtZSwgdHJpZ2dlcik7CisJLyogZm9yIGFzc29jIGFsd2F5cyB0dXJuIGxlZCBvbiAqLworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX29uID0gaXdsNDk2NV9sZWRfb25fcmVnOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubGVkX29mZiA9IGl3bDQ5NjVfbGVkX29uX3JlZzsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLmxlZF9wYXR0ZXJuID0gTlVMTDsKKworCWlmIChyZXQpCisJCWdvdG8gZXhpdF9mYWlsOworCisJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUocHJpdi0+aHcpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIml3bC0lczpSWCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCisKKwlyZXQgPSBpd2xfbGVkc19yZWdpc3Rlcl9sZWQocHJpdiwKKwkJCQkgICAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXSwKKwkJCQkgICBJV0xfTEVEX1RSR19SWCwgMCwKKwkJCQkgICBuYW1lLCB0cmlnZ2VyKTsKKworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX29uID0gaXdsNDk2NV9sZWRfYXNzb2NpYXRlZDsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLmxlZF9vZmYgPSBpd2w0OTY1X2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX3BhdHRlcm4gPSBpd2w0OTY1X2xlZF9wYXR0ZXJuOworCisJaWYgKHJldCkKKwkJZ290byBleGl0X2ZhaWw7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShwcml2LT5odyk7CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaXdsLSVzOlRYIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsCisJCQkJICAgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0sCisJCQkJICAgSVdMX0xFRF9UUkdfVFgsIDAsCisJCQkJICAgbmFtZSwgdHJpZ2dlcik7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfb24gPSBpd2w0OTY1X2xlZF9hc3NvY2lhdGVkOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX29mZiA9IGl3bDQ5NjVfbGVkX2Fzc29jaWF0ZWQ7CisJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfcGF0dGVybiA9IGl3bDQ5NjVfbGVkX3BhdHRlcm47CisKKwlpZiAocmV0KQorCQlnb3RvIGV4aXRfZmFpbDsKKworCXJldHVybiAwOworCitleGl0X2ZhaWw6CisJaXdsX2xlZHNfdW5yZWdpc3Rlcihwcml2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfbGVkc19yZWdpc3Rlcik7CisKKy8qIHVucmVnaXN0ZXIgbGVkIGNsYXNzICovCitzdGF0aWMgdm9pZCBpd2xfbGVkc191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsNDk2NV9sZWQgKmxlZCwgdTggc2V0X2xlZCkKK3sKKwlpZiAoIWxlZC0+cmVnaXN0ZXJlZCkKKwkJcmV0dXJuOworCisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2Rldik7CisKKwlpZiAoc2V0X2xlZCkKKwkJbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0KCZsZWQtPmxlZF9kZXYsIExFRF9PRkYpOworCWxlZC0+cmVnaXN0ZXJlZCA9IDA7Cit9CisKKy8qIFVucmVnaXN0ZXIgYWxsIGxlZCBoYW5kbGVycyAqLwordm9pZCBpd2xfbGVkc191bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpd2xfbGVkc191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CisJaXdsX2xlZHNfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOworCWl3bF9sZWRzX3VucmVnaXN0ZXJfbGVkKCZwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLCAwKTsKKwlpd2xfbGVkc191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9sZWRzX3VucmVnaXN0ZXIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjA0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaApAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX2l3bF9sZWRzX2hfXworI2RlZmluZSBfX2l3bF9sZWRzX2hfXworCisKK3N0cnVjdCBpd2xfcHJpdjsKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQorI2RlZmluZSBJV0xfTEVEX05BTUVfTEVOIDMxCisjZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEwMDApCisKKyNkZWZpbmUgSVdMX0xFRF9BQ1RJVklUWSAgICAgICAoMDw8MSkKKyNkZWZpbmUgSVdMX0xFRF9MSU5LICAgICAgICAgICAoMTw8MSkKKworZW51bSBsZWRfdHlwZSB7CisJSVdMX0xFRF9UUkdfVFgsCisJSVdMX0xFRF9UUkdfUlgsCisJSVdMX0xFRF9UUkdfQVNTT0MsCisJSVdMX0xFRF9UUkdfUkFESU8sCisJSVdMX0xFRF9UUkdfTUFYLAorfTsKKworCitzdHJ1Y3QgaXdsNDk2NV9sZWQgeworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9kZXY7CisKKwlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpOworCWludCAoKmxlZF9vZmYpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpOworCWludCAoKmxlZF9wYXR0ZXJuKSAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAorCQkJICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcyk7CisKKwllbnVtIGxlZF90eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7Cit9OworCitpbnQgaXdsX2xlZHNfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfbGVkc19iYWNrZ3JvdW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpd2xfbGVkc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2xlZHNfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9MRURTICovCisjZW5kaWYgLyogX19pd2xfbGVkc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAppbmRleCA0YmExMjE2Li5jOWNmOGVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0Myw0NCArMjQzLDQ4IEBACiAgKiA0OTY1IFR4IFNjaGVkdWxlciByZWdpc3RlcnMuCiAgKiBEZXRhaWxzIGFyZSBkb2N1bWVudGVkIGluIGl3bC00OTY1LWh3LmgKICAqLwotI2RlZmluZSBLRFJfU0NEX0JBU0UJCShQUlBIX0JBU0UgKyAweGEwMmMwMCkKKyNkZWZpbmUgSVdMNDlfU0NEX0JBU0UJCShQUlBIX0JBU0UgKyAweGEwMmMwMCkKIAotI2RlZmluZSBLRFJfU0NEX1NSQU1fQkFTRV9BRERSICAgICAgICAgKEtEUl9TQ0RfQkFTRSArIDB4MCkKLSNkZWZpbmUgS0RSX1NDRF9FTVBUWV9CSVRTICAgICAgICAgICAgIChLRFJfU0NEX0JBU0UgKyAweDQpCi0jZGVmaW5lIEtEUl9TQ0RfRFJBTV9CQVNFX0FERFIgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHgxMCkKLSNkZWZpbmUgS0RSX1NDRF9BSVQgICAgICAgICAgICAgICAgICAgIChLRFJfU0NEX0JBU0UgKyAweDE4KQotI2RlZmluZSBLRFJfU0NEX1RYRkFDVCAgICAgICAgICAgICAgICAgKEtEUl9TQ0RfQkFTRSArIDB4MWMpCi0jZGVmaW5lIEtEUl9TQ0RfUVVFVUVfV1JQVFIoeCkgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHgyNCArICh4KSAqIDQpCi0jZGVmaW5lIEtEUl9TQ0RfUVVFVUVfUkRQVFIoeCkgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHg2NCArICh4KSAqIDQpCi0jZGVmaW5lIEtEUl9TQ0RfU0VUUVVFVUVOVU0gICAgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHhhNCkKLSNkZWZpbmUgS0RSX1NDRF9TRVRfVFhTVEFUX1RYRUQgICAgICAgIChLRFJfU0NEX0JBU0UgKyAweGE4KQotI2RlZmluZSBLRFJfU0NEX1NFVF9UWFNUQVRfRE9ORSAgICAgICAgKEtEUl9TQ0RfQkFTRSArIDB4YWMpCi0jZGVmaW5lIEtEUl9TQ0RfU0VUX1RYU1RBVF9OT1RfU0NIRCAgICAoS0RSX1NDRF9CQVNFICsgMHhiMCkKLSNkZWZpbmUgS0RSX1NDRF9ERUNSRUFTRV9DUkVESVQgICAgICAgIChLRFJfU0NEX0JBU0UgKyAweGI0KQotI2RlZmluZSBLRFJfU0NEX0RFQ1JFQVNFX1NDUkVESVQgICAgICAgKEtEUl9TQ0RfQkFTRSArIDB4YjgpCi0jZGVmaW5lIEtEUl9TQ0RfTE9BRF9DUkVESVQgICAgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHhiYykKLSNkZWZpbmUgS0RSX1NDRF9MT0FEX1NDUkVESVQgICAgICAgICAgIChLRFJfU0NEX0JBU0UgKyAweGMwKQotI2RlZmluZSBLRFJfU0NEX0JBUiAgICAgICAgICAgICAgICAgICAgKEtEUl9TQ0RfQkFTRSArIDB4YzQpCi0jZGVmaW5lIEtEUl9TQ0RfQkFSX0RXMCAgICAgICAgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHhjOCkKLSNkZWZpbmUgS0RSX1NDRF9CQVJfRFcxICAgICAgICAgICAgICAgIChLRFJfU0NEX0JBU0UgKyAweGNjKQotI2RlZmluZSBLRFJfU0NEX1FVRVVFQ0hBSU5fU0VMICAgICAgICAgKEtEUl9TQ0RfQkFTRSArIDB4ZDApCi0jZGVmaW5lIEtEUl9TQ0RfUVVFUllfUkVRICAgICAgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHhkOCkKLSNkZWZpbmUgS0RSX1NDRF9RVUVSWV9SRVMgICAgICAgICAgICAgIChLRFJfU0NEX0JBU0UgKyAweGRjKQotI2RlZmluZSBLRFJfU0NEX1BFTkRJTkdfRlJBTUVTICAgICAgICAgKEtEUl9TQ0RfQkFTRSArIDB4ZTApCi0jZGVmaW5lIEtEUl9TQ0RfSU5URVJSVVBUX01BU0sgICAgICAgICAoS0RSX1NDRF9CQVNFICsgMHhlNCkKLSNkZWZpbmUgS0RSX1NDRF9JTlRFUlJVUFRfVEhSRVNIT0xEICAgIChLRFJfU0NEX0JBU0UgKyAweGU4KQotI2RlZmluZSBLRFJfU0NEX1FVRVJZX01JTl9GUkFNRV9TSVpFICAgKEtEUl9TQ0RfQkFTRSArIDB4MTAwKQotI2RlZmluZSBLRFJfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHgpICAgKEtEUl9TQ0RfQkFTRSArIDB4MTA0ICsgKHgpICogNCkKKyNkZWZpbmUgSVdMNDlfU0NEX1NSQU1fQkFTRV9BRERSICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHgwKQorI2RlZmluZSBJV0w0OV9TQ0RfRU1QVFlfQklUUyAgICAgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweDQpCisjZGVmaW5lIElXTDQ5X1NDRF9EUkFNX0JBU0VfQUREUiAgICAgICAgIChJV0w0OV9TQ0RfQkFTRSArIDB4MTApCisjZGVmaW5lIElXTDQ5X1NDRF9BSVQgICAgICAgICAgICAgICAgICAgIChJV0w0OV9TQ0RfQkFTRSArIDB4MTgpCisjZGVmaW5lIElXTDQ5X1NDRF9UWEZBQ1QgICAgICAgICAgICAgICAgIChJV0w0OV9TQ0RfQkFTRSArIDB4MWMpCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9XUlBUUih4KSAgICAgICAgIChJV0w0OV9TQ0RfQkFTRSArIDB4MjQgKyAoeCkgKiA0KQorI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfUkRQVFIoeCkgICAgICAgICAoSVdMNDlfU0NEX0JBU0UgKyAweDY0ICsgKHgpICogNCkKKyNkZWZpbmUgSVdMNDlfU0NEX1NFVFFVRVVFTlVNICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhhNCkKKyNkZWZpbmUgSVdMNDlfU0NEX1NFVF9UWFNUQVRfVFhFRCAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhhOCkKKyNkZWZpbmUgSVdMNDlfU0NEX1NFVF9UWFNUQVRfRE9ORSAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhhYykKKyNkZWZpbmUgSVdMNDlfU0NEX1NFVF9UWFNUQVRfTk9UX1NDSEQgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhiMCkKKyNkZWZpbmUgSVdMNDlfU0NEX0RFQ1JFQVNFX0NSRURJVCAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhiNCkKKyNkZWZpbmUgSVdMNDlfU0NEX0RFQ1JFQVNFX1NDUkVESVQgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhiOCkKKyNkZWZpbmUgSVdMNDlfU0NEX0xPQURfQ1JFRElUICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhiYykKKyNkZWZpbmUgSVdMNDlfU0NEX0xPQURfU0NSRURJVCAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhjMCkKKyNkZWZpbmUgSVdMNDlfU0NEX0JBUiAgICAgICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhjNCkKKyNkZWZpbmUgSVdMNDlfU0NEX0JBUl9EVzAgICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhjOCkKKyNkZWZpbmUgSVdMNDlfU0NEX0JBUl9EVzEgICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhjYykKKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFQ0hBSU5fU0VMICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhkMCkKKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVJZX1JFUSAgICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhkOCkKKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVJZX1JFUyAgICAgICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhkYykKKyNkZWZpbmUgSVdMNDlfU0NEX1BFTkRJTkdfRlJBTUVTICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhlMCkKKyNkZWZpbmUgSVdMNDlfU0NEX0lOVEVSUlVQVF9NQVNLICAgICAgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhlNCkKKyNkZWZpbmUgSVdMNDlfU0NEX0lOVEVSUlVQVF9USFJFU0hPTEQgICAgKElXTDQ5X1NDRF9CQVNFICsgMHhlOCkKKyNkZWZpbmUgSVdMNDlfU0NEX1FVRVJZX01JTl9GUkFNRV9TSVpFICAgKElXTDQ5X1NDRF9CQVNFICsgMHgxMDApCisjZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVEFUVVNfQklUUyh4KSAgIChJV0w0OV9TQ0RfQkFTRSArIDB4MTA0ICsgKHgpICogNCkKIAogLyogU1AgU0NEICovCi0jZGVmaW5lIFNITF9TQ0RfQkFTRQkJCShQUlBIX0JBU0UgKyAweGEwMmMwMCkKKyNkZWZpbmUgSVdMNTBfU0NEX0JBU0UJCQkoUFJQSF9CQVNFICsgMHhhMDJjMDApCiAKLSNkZWZpbmUgU0hMX1NDRF9BSVQgICAgICAgICAgICAgICAgICAgIChTSExfU0NEX0JBU0UgKyAweDBjKQotI2RlZmluZSBTSExfU0NEX1RYRkFDVCAgICAgICAgICAgICAgICAgKFNITF9TQ0RfQkFTRSArIDB4MTApCi0jZGVmaW5lIFNITF9TQ0RfUVVFVUVfV1JQVFIoeCkgICAgICAgICAoU0hMX1NDRF9CQVNFICsgMHgxOCArICh4KSAqIDQpCi0jZGVmaW5lIFNITF9TQ0RfUVVFVUVfUkRQVFIoeCkgICAgICAgICAoU0hMX1NDRF9CQVNFICsgMHg2OCArICh4KSAqIDQpCi0jZGVmaW5lIFNITF9TQ0RfUVVFVUVDSEFJTl9TRUwgICAgICAgICAoU0hMX1NDRF9CQVNFICsgMHhlOCkKLSNkZWZpbmUgU0hMX1NDRF9BR0dSX1NFTAkgICAgICAgKFNITF9TQ0RfQkFTRSArIDB4MjQ4KQotI2RlZmluZSBTSExfU0NEX0lOVEVSUlVQVF9NQVNLICAgICAgICAgKFNITF9TQ0RfQkFTRSArIDB4MTA4KQorI2RlZmluZSBJV0w1MF9TQ0RfU1JBTV9CQVNFX0FERFIgICAgICAgICAoSVdMNTBfU0NEX0JBU0UgKyAweDApCisjZGVmaW5lIElXTDUwX1NDRF9EUkFNX0JBU0VfQUREUgkgKElXTDUwX1NDRF9CQVNFICsgMHg4KQorI2RlZmluZSBJV0w1MF9TQ0RfQUlUICAgICAgICAgICAgICAgICAgICAoSVdMNTBfU0NEX0JBU0UgKyAweDBjKQorI2RlZmluZSBJV0w1MF9TQ0RfVFhGQUNUICAgICAgICAgICAgICAgICAoSVdMNTBfU0NEX0JBU0UgKyAweDEwKQorI2RlZmluZSBJV0w1MF9TQ0RfQUNUSVZFCQkgKElXTDUwX1NDRF9CQVNFICsgMHgxNCkKKyNkZWZpbmUgSVdMNTBfU0NEX1FVRVVFX1dSUFRSKHgpICAgICAgICAgKElXTDUwX1NDRF9CQVNFICsgMHgxOCArICh4KSAqIDQpCisjZGVmaW5lIElXTDUwX1NDRF9RVUVVRV9SRFBUUih4KSAgICAgICAgIChJV0w1MF9TQ0RfQkFTRSArIDB4NjggKyAoeCkgKiA0KQorI2RlZmluZSBJV0w1MF9TQ0RfUVVFVUVDSEFJTl9TRUwgICAgICAgICAoSVdMNTBfU0NEX0JBU0UgKyAweGU4KQorI2RlZmluZSBJV0w1MF9TQ0RfQUdHUl9TRUwJICAgICAJIChJV0w1MF9TQ0RfQkFTRSArIDB4MjQ4KQorI2RlZmluZSBJV0w1MF9TQ0RfSU5URVJSVVBUX01BU0sgICAgICAgICAoSVdMNTBfU0NEX0JBU0UgKyAweDEwOCkKKyNkZWZpbmUgSVdMNTBfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHgpICAgKElXTDUwX1NDRF9CQVNFICsgMHgxMGMgKyAoeCkgKiA0KQogCiAjZW5kaWYJCQkJLyogX19pd2xfcHJwaF9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4MGE1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCkBAIC0wLDAgKzEsMTczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKKyAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisKKworLyogc29mdHdhcmUgcmYta2lsbCBmcm9tIHVzZXIgKi8KK3N0YXRpYyBpbnQgaXdsX3Jma2lsbF9zb2Z0X3JmX2tpbGwodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWlmICghcHJpdi0+cmZraWxsX21uZ3IucmZraWxsKQorCQlyZXR1cm4gMDsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuIDA7CisKKwlJV0xfREVCVUdfUkZfS0lMTCgid2UgcmVjaWV2ZWQgc29mdCBSRktJTEwgc2V0IHRvIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUkZLSUxMX1NUQVRFX09OOgorCQlwcml2LT5jZmctPm9wcy0+bGliLT5yYWRpb19raWxsX3N3KHByaXYsIDApOworCQkvKiBpZiBIVyByZi1raWxsIGlzIHNldCBkb250IGFsbG93IE9OIHN0YXRlICovCisJCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQorCQkJZXJyID0gLUVCVVNZOworCQlicmVhazsKKwljYXNlIFJGS0lMTF9TVEFURV9PRkY6CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnJhZGlvX2tpbGxfc3cocHJpdiwgMSk7CisJCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSkKKwkJCWVyciA9IC1FQlVTWTsKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGl3bF9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gd2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSk7CisJaW50IHJldCA9IDA7CisKKwlCVUdfT04oZGV2aWNlID09IE5VTEwpOworCisJSVdMX0RFQlVHX1JGX0tJTEwoIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKKwlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2aWNlLCBSRktJTExfVFlQRV9XTEFOKTsKKwlpZiAoIXByaXYtPnJma2lsbF9tbmdyLnJma2lsbCkgeworCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSByZmtpbGwgZGV2aWNlLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJcHJpdi0+cmZraWxsX21uZ3IucmZraWxsLT5uYW1lID0gcHJpdi0+Y2ZnLT5uYW1lOworCXByaXYtPnJma2lsbF9tbmdyLnJma2lsbC0+ZGF0YSA9IHByaXY7CisJcHJpdi0+cmZraWxsX21uZ3IucmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9PTjsKKwlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IGl3bF9yZmtpbGxfc29mdF9yZl9raWxsOworCXByaXYtPnJma2lsbF9tbmdyLnJma2lsbC0+dXNlcl9jbGFpbV91bnN1cHBvcnRlZCA9IDE7CisKKwlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwtPmRldi5jbGFzcy0+c3VzcGVuZCA9IE5VTEw7CisJcHJpdi0+cmZraWxsX21uZ3IucmZraWxsLT5kZXYuY2xhc3MtPnJlc3VtZSA9IE5VTEw7CisKKwlwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXByaXYtPnJma2lsbF9tbmdyLmlucHV0X2RldikgeworCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSByZmtpbGwgaW5wdXQgZGV2aWNlLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZWRfcmZraWxsOworCX0KKworCXByaXYtPnJma2lsbF9tbmdyLmlucHV0X2Rldi0+bmFtZSA9IHByaXYtPmNmZy0+bmFtZTsKKwlwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYtPnBoeXMgPSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSk7CisJcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBwcml2LT5wY2lfZGV2LT52ZW5kb3I7CisJcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gZGV2aWNlOworCXByaXYtPnJma2lsbF9tbmdyLmlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlzZXRfYml0KEtFWV9XTEFOLCBwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYtPmtleWJpdCk7CisKKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIocHJpdi0+cmZraWxsX21uZ3IucmZraWxsKTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJma2lsbDogJWRcbiIsIHJldCk7CisJCWdvdG8gZnJlZV9pbnB1dF9kZXY7CisJfQorCisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHByaXYtPnJma2lsbF9tbmdyLmlucHV0X2Rldik7CisJaWYgKHJldCkgeworCQlJV0xfRVJST1IoIlVuYWJsZSB0byByZWdpc3RlciByZmtpbGwgaW5wdXQgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJZ290byB1bnJlZ2lzdGVyX3Jma2lsbDsKKwl9CisKKwlJV0xfREVCVUdfUkZfS0lMTCgiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CisJcmV0dXJuIHJldDsKKwordW5yZWdpc3Rlcl9yZmtpbGw6CisJcmZraWxsX3VucmVnaXN0ZXIocHJpdi0+cmZraWxsX21uZ3IucmZraWxsKTsKKwlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwgPSBOVUxMOworCitmcmVlX2lucHV0X2RldjoKKwlpbnB1dF9mcmVlX2RldmljZShwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYpOworCXByaXYtPnJma2lsbF9tbmdyLmlucHV0X2RldiA9IE5VTEw7CisKK2ZyZWVkX3Jma2lsbDoKKwlpZiAocHJpdi0+cmZraWxsX21uZ3IucmZraWxsICE9IE5VTEwpCisJCXJma2lsbF9mcmVlKHByaXYtPnJma2lsbF9tbmdyLnJma2lsbCk7CisJcHJpdi0+cmZraWxsX21uZ3IucmZraWxsID0gTlVMTDsKKworZXJyb3I6CisJSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yZmtpbGxfaW5pdCk7CisKK3ZvaWQgaXdsX3Jma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKworCWlmIChwcml2LT5yZmtpbGxfbW5nci5pbnB1dF9kZXYpCisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHByaXYtPnJma2lsbF9tbmdyLmlucHV0X2Rldik7CisKKwlpZiAocHJpdi0+cmZraWxsX21uZ3IucmZraWxsKQorCQlyZmtpbGxfdW5yZWdpc3Rlcihwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwpOworCisJcHJpdi0+cmZraWxsX21uZ3IuaW5wdXRfZGV2ID0gTlVMTDsKKwlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTChpd2xfcmZraWxsX3VucmVnaXN0ZXIpOworCisvKiBzZXQgcmYta2lsbCB0byB0aGUgcmlnaHQgc3RhdGUuICovCit2b2lkIGl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKworCWlmICghcHJpdi0+cmZraWxsX21uZ3IucmZraWxsKQorCQlyZXR1cm47CisKKwlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikpCisJCXByaXYtPnJma2lsbF9tbmdyLnJma2lsbC0+c3RhdGUgPSBSRktJTExfU1RBVEVfT047CisJZWxzZQorCQlwcml2LT5yZmtpbGxfbW5nci5yZmtpbGwtPnN0YXRlID0gUkZLSUxMX1NUQVRFX09GRjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2YwNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCisgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9faXdsX3JmX2tpbGxfaF9fCisjZGVmaW5lIF9faXdsX3JmX2tpbGxfaF9fCisKK3N0cnVjdCBpd2xfcHJpdjsKKworI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX1JGS0lMTAorc3RydWN0IGl3bF9yZmtpbGxfbW5nciB7CisJc3RydWN0IHJma2lsbCAqcmZraWxsOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKK307CisKK3ZvaWQgaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3Jma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX3Jma2lsbF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7fQorc3RhdGljIGlubGluZSBpbnQgaXdsX3Jma2lsbF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKworCisjZW5kaWYgIC8qIF9faXdsX3JmX2tpbGxfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaAppbmRleCBiNTc2ZmYyLi5hNDBhMjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZmRmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCisgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1zdGEuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtaGVscGVycy5oIgorI2luY2x1ZGUgIml3bC00OTY1LmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorCitpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1RBX0tFWV9NQVhfTlVNOyBpKyspCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCitpbnQgaXdsX3NlbmRfc3RhdGljX3dlcGtleV9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBzZW5kX2lmX2VtcHR5KQoreworCWludCBpLCBub3RfZW1wdHkgPSAwOworCXU4IGJ1ZmZbc2l6ZW9mKHN0cnVjdCBpd2xfd2VwX2NtZCkgKworCQlzaXplb2Yoc3RydWN0IGl3bF93ZXBfa2V5KSAqIFdFUF9LRVlTX01BWF07CisJc3RydWN0IGl3bF93ZXBfY21kICp3ZXBfY21kID0gKHN0cnVjdCBpd2xfd2VwX2NtZCAqKWJ1ZmY7CisJc2l6ZV90IGNtZF9zaXplICA9IHNpemVvZihzdHJ1Y3QgaXdsX3dlcF9jbWQpOworCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0geworCQkuaWQgPSBSRVBMWV9XRVBLRVksCisJCS5kYXRhID0gd2VwX2NtZCwKKwkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCisJfTsKKworCW1lbXNldCh3ZXBfY21kLCAwLCBjbWRfc2l6ZSArCisJCQkoc2l6ZW9mKHN0cnVjdCBpd2xfd2VwX2tleSkgKiBXRVBfS0VZU19NQVgpKTsKKworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZU19NQVggOyBpKyspIHsKKwkJd2VwX2NtZC0+a2V5W2ldLmtleV9pbmRleCA9IGk7CisJCWlmIChwcml2LT53ZXBfa2V5c1tpXS5rZXlfc2l6ZSkgeworCQkJd2VwX2NtZC0+a2V5W2ldLmtleV9vZmZzZXQgPSBpOworCQkJbm90X2VtcHR5ID0gMTsKKwkJfSBlbHNlIHsKKwkJCXdlcF9jbWQtPmtleVtpXS5rZXlfb2Zmc2V0ID0gV0VQX0lOVkFMSURfT0ZGU0VUOworCQl9CisKKwkJd2VwX2NtZC0+a2V5W2ldLmtleV9zaXplID0gcHJpdi0+d2VwX2tleXNbaV0ua2V5X3NpemU7CisJCW1lbWNweSgmd2VwX2NtZC0+a2V5W2ldLmtleVszXSwgcHJpdi0+d2VwX2tleXNbaV0ua2V5LAorCQkJCXByaXYtPndlcF9rZXlzW2ldLmtleV9zaXplKTsKKwl9CisKKwl3ZXBfY21kLT5nbG9iYWxfa2V5X3R5cGUgPSBXRVBfS0VZX1dFUF9UWVBFOworCXdlcF9jbWQtPm51bV9rZXlzID0gV0VQX0tFWVNfTUFYOworCisJY21kX3NpemUgKz0gc2l6ZW9mKHN0cnVjdCBpd2xfd2VwX2tleSkgKiBXRVBfS0VZU19NQVg7CisKKwljbWQubGVuID0gY21kX3NpemU7CisKKwlpZiAobm90X2VtcHR5IHx8IHNlbmRfaWZfZW1wdHkpCisJCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworaW50IGl3bF9yZW1vdmVfZGVmYXVsdF93ZXBfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoa2V5Y29uZi0+a2V5aWR4LCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKKwkJSVdMX0VSUk9SKCJpbmRleCAlZCBub3QgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAorCQkJICBrZXljb25mLT5rZXlpZHgpOworCisJcHJpdi0+ZGVmYXVsdF93ZXBfa2V5LS07CisJbWVtc2V0KCZwcml2LT53ZXBfa2V5c1trZXljb25mLT5rZXlpZHhdLCAwLCBzaXplb2YocHJpdi0+d2VwX2tleXNbMF0pKTsKKwlyZXQgPSBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGl3bF9zZXRfZGVmYXVsdF93ZXBfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWtleWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleWNvbmYtPmtleWlkeDsKKwlwcml2LT5zdGF0aW9uc1tJV0xfQVBfSURdLmtleWluZm8uYWxnID0gQUxHX1dFUDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCXByaXYtPmRlZmF1bHRfd2VwX2tleSsrOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoa2V5Y29uZi0+a2V5aWR4LCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKKwkJSVdMX0VSUk9SKCJpbmRleCAlZCBhbHJlYWR5IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKKwkJCWtleWNvbmYtPmtleWlkeCk7CisKKwlwcml2LT53ZXBfa2V5c1trZXljb25mLT5rZXlpZHhdLmtleV9zaXplID0ga2V5Y29uZi0+a2V5bGVuOworCW1lbWNweSgmcHJpdi0+d2VwX2tleXNba2V5Y29uZi0+a2V5aWR4XS5rZXksICZrZXljb25mLT5rZXksCisJCQkJCQkJa2V5Y29uZi0+a2V5bGVuKTsKKworCXJldCA9IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bF9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJdTggc3RhX2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX19sZTE2IGtleV9mbGFncyA9IDA7CisJaW50IHJldDsKKworCWtleWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleWNvbmYtPmtleWlkeDsKKworCWtleV9mbGFncyB8PSAoU1RBX0tFWV9GTEdfV0VQIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOworCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKKwlrZXlfZmxhZ3MgJj0gflNUQV9LRVlfRkxHX0lOVkFMSUQ7CisKKwlpZiAoa2V5Y29uZi0+a2V5bGVuID09IFdFUF9LRVlfTEVOXzEyOCkKKwkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfRkxHX0tFWV9TSVpFX01TSzsKKworCWlmIChzdGFfaWQgPT0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCkKKwkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfTVVMVElDQVNUX01TSzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmFsZyA9IGtleWNvbmYtPmFsZzsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8ua2V5bGVuID0ga2V5Y29uZi0+a2V5bGVuOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXlpZHggPSBrZXljb25mLT5rZXlpZHg7CisKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleSwKKwkJCQlrZXljb25mLT5rZXksIGtleWNvbmYtPmtleWxlbik7CisKKwltZW1jcHkoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlbM10sCisJCQkJa2V5Y29uZi0+a2V5LCBrZXljb25mLT5rZXlsZW4pOworCisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPQorCQkJCSBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHByaXYpOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7CisKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOworCisJcmV0ID0gaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsCisJCSZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bF9zZXRfY2NtcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgIHU4IHN0YV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fbGUxNiBrZXlfZmxhZ3MgPSAwOworCisJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19DQ01QIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOworCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKKwlrZXlfZmxhZ3MgJj0gflNUQV9LRVlfRkxHX0lOVkFMSUQ7CisKKwlpZiAoc3RhX2lkID09IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQpCisJCWtleV9mbGFncyB8PSBTVEFfS0VZX01VTFRJQ0FTVF9NU0s7CisKKwlrZXljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleWNvbmYtPmtleWlkeDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKKworCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8ua2V5LCBrZXljb25mLT5rZXksCisJICAgICAgIGtleWNvbmYtPmtleWxlbik7CisKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleSwga2V5Y29uZi0+a2V5LAorCSAgICAgICBrZXljb25mLT5rZXlsZW4pOworCisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPQorCQkJCWl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgocHJpdik7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKworCUlXTF9ERUJVR19JTkZPKCJod2NyeXB0bzogbW9kaWZ5IHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOworCXJldHVybiBpd2w0OTY1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwKKwkJCQkmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7Cit9CisKK3N0YXRpYyBpbnQgaXdsX3NldF90a2lwX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICAgdTggc3RhX2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlrZXljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJa2V5Y29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7CisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleWNvbmYtPmtleWlkeDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmFsZyA9IGtleWNvbmYtPmFsZzsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8uY29uZiA9IGtleWNvbmY7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IDE2OworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID0KKwkJCQkgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChwcml2KTsKKworCS8qIFRoaXMgY29weSBpcyBhY3V0YWxseSBub3QgbmVlZGVkOiB3ZSBnZXQgdGhlIGtleSB3aXRoIGVhY2ggVFggKi8KKwltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LCAxNik7CisKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleSwga2V5Y29uZi0+a2V5LCAxNik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGl3bF9yZW1vdmVfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBzdGFfaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByaXYtPmtleV9tYXBwaW5nX2tleSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCwKKwkJJnByaXYtPnVjb2RlX2tleV90YWJsZSkpCisJCUlXTF9FUlJPUigiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKKwkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0KTsKKwltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2h3X2tleSkpOworCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LCAwLAorCQkJCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfa2V5aW5mbykpOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBTVEFfS0VZX0ZMR19OT19FTkM7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJSVdMX0RFQlVHX0lORk8oImh3Y3J5cHRvOiBjbGVhciB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKKwlyZXR1cm4gaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgMCk7Cit9CisKK2ludCBpd2xfc2V0X2R5bmFtaWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksIHU4IHN0YV9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJpdi0+a2V5X21hcHBpbmdfa2V5ID0gMTsKKworCXN3aXRjaCAoa2V5LT5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlyZXQgPSBpd2xfc2V0X2NjbXBfZHluYW1pY19rZXlfaW5mbyhwcml2LCBrZXksIHN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUxHX1RLSVA6CisJCXJldCA9IGl3bF9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleSwgc3RhX2lkKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfV0VQOgorCQlyZXQgPSBpd2xfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleSwgc3RhX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0VSUk9SKCJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXktPmFsZyk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitzdGF0aWMgdm9pZCBpd2xfZHVtcF9scV9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICpscSkKK3sKKwlpbnQgaTsKKwlJV0xfREVCVUdfUkFURSgibHEgc3RhdGlvbiBpZCAweCV4XG4iLCBscS0+c3RhX2lkKTsKKwlJV0xfREVCVUdfUkFURSgibHEgZHRhIDB4JVggMHglWFxuIiwKKwkJICAgICAgIGxxLT5nZW5lcmFsX3BhcmFtcy5zaW5nbGVfc3RyZWFtX2FudF9tc2ssCisJCSAgICAgICBscS0+Z2VuZXJhbF9wYXJhbXMuZHVhbF9zdHJlYW1fYW50X21zayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElOS19RVUFMX01BWF9SRVRSWV9OVU07IGkrKykKKwkJSVdMX0RFQlVHX1JBVEUoImxxIGluZGV4ICVkIDB4JVhcbiIsCisJCQkgICAgICAgaSwgbHEtPnJzX3RhYmxlW2ldLnJhdGVfbl9mbGFncyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9kdW1wX2xxX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICpscSkKK3sKK30KKyNlbmRpZgorCitpbnQgaXdsX3NlbmRfbHFfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgIHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqbHEsIHU4IGZsYWdzKQoreworCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0geworCQkuaWQgPSBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAorCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCksCisJCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5kYXRhID0gbHEsCisJfTsKKworCWlmICgobHEtPnN0YV9pZCA9PSAweEZGKSAmJgorCSAgICAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobHEtPnN0YV9pZCA9PSAweEZGKQorCQlscS0+c3RhX2lkID0gSVdMX0FQX0lEOworCisJaXdsX2R1bXBfbHFfY21kKHByaXYsbHEpOworCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgJiYKKwkgICAgcHJpdi0+bHFfbW5nci5scV9yZWFkeSkKKwkJcmV0dXJuICBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfbHFfY21kKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGYyNzJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCisgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX2l3bF9zdGFfaF9fCisjZGVmaW5lIF9faXdsX3N0YV9oX18KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtaGVscGVycy5oIgorCitpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc2VuZF9pZl9lbXB0eSk7CitpbnQgaXdsX3JlbW92ZV9kZWZhdWx0X3dlcF9rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CitpbnQgaXdsX3NldF9kZWZhdWx0X3dlcF9rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CitpbnQgaXdsX3JlbW92ZV9keW5hbWljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHN0YV9pZCk7CitpbnQgaXdsX3NldF9keW5hbWljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCB1OCBzdGFfaWQpOworI2VuZGlmIC8qIF9faXdsX3N0YV9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCmluZGV4IDVlZTFhZDYuLjFhNTY3OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNDYsNiArNDYsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKKyNpbmNsdWRlICJpd2wtMzk0NS1jb3JlLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogCkBAIC02OSw3ICs3MCw3IEBACiBzdGF0aWMgaW50IGl3bDM5NDVfcGFyYW1fYW50ZW5uYTsgIC8qIGRlZjogMCA9IGJvdGggYW50ZW5uYXMgKHVzZSBkaXZlcnNpdHkpICovCiBpbnQgaXdsMzk0NV9wYXJhbV9od2NyeXB0bzsgICAgICAgIC8qIGRlZjogMCA9IHVzZSBzb2Z0d2FyZSBlbmNyeXB0aW9uICovCiBzdGF0aWMgaW50IGl3bDM5NDVfcGFyYW1fcW9zX2VuYWJsZSA9IDE7IC8qIGRlZjogMSA9IHVzZSBxdWFsaXR5IG9mIHNlcnZpY2UgKi8KLWludCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPSBJV0xfTUFYX05VTV9RVUVVRVM7IC8qIGRlZjogOCBUeCBxdWV1ZXMgKi8KK2ludCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPSBJV0wzOV9NQVhfTlVNX1FVRVVFUzsgLyogZGVmOiA4IFR4IHF1ZXVlcyAqLwogCiAvKgogICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgpAQCAtOTEsMTUgKzkyLDEwIEBACiAjZGVmaW5lIFZTCiAjZW5kaWYKIAotI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gIjEuMi4yM2siIFZEIFZTCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDcgSW50ZWwgQ29ycG9yYXRpb24iCisjZGVmaW5lIElXTFdJRklfVkVSU0lPTiAiMS4yLjI2ayIgVkQgVlMKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTFdJRklfVkVSU0lPTgogCi0vKiBDaGFuZ2UgZmlybXdhcmUgZmlsZSBuYW1lLCB1c2luZyAiLSIgYW5kIGluY3JlbWVudGluZyBudW1iZXIsCi0gKiAgICpvbmx5KiB3aGVuIHVDb2RlIGludGVyZmFjZSBvciBhcmNoaXRlY3R1cmUgY2hhbmdlcyBzbyB0aGF0IGl0Ci0gKiAgIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZWFybGllciBkcml2ZXJzLgotICogVGhpcyBudW1iZXIgd2lsbCBhbHNvIGFwcGVhciBpbiA8PCA4IHBvc2l0aW9uIG9mIDFzdCBkd29yZCBvZiB1Q29kZSBmaWxlICovCi0jZGVmaW5lIElXTDM5NDVfVUNPREVfQVBJICItMSIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CkBAIC0xMTYsMTYgKzExMiwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICppd2wzOTQ1X2dldF9od19tb2RlKAotCQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbW9kZSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICppd2wzOTQ1X2dldF9iYW5kKAorCQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlpZiAocHJpdi0+bW9kZXNbaV0ubW9kZSA9PSBtb2RlKQotCQkJcmV0dXJuICZwcml2LT5tb2Rlc1tpXTsKLQotCXJldHVybiBOVUxMOworCXJldHVybiBwcml2LT5ody0+d2lwaHktPmJhbmRzW2JhbmRdOwogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfaXNfZW1wdHlfZXNzaWQoY29uc3QgY2hhciAqZXNzaWQsIGludCBlc3NpZF9sZW4pCkBAIC0xNjgsMTcgKzE1OCw2IEBACiAJcmV0dXJuIGVzY2FwZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoaW50IGxldmVsLCB2b2lkICpwLCB1MzIgbGVuKQotewotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKCEoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIGxldmVsKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIml3bCBkYXRhOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAotCQkJcCwgbGVuLCAxKTsKLSNlbmRpZgotfQotCiAvKioqKioqKioqKioqKioqIERNQS1RVUVVRS1HRU5FUkFMLUZVTkNUSU9OUyAgKioqKioKICAqIERNQSBzZXJ2aWNlcwogICoKQEAgLTIwNCw3ICsxODMsNyBAQAogICogKCMwLTMpIGZvciBkYXRhIHR4IHZpYSBFRENBLiAgQW4gYWRkaXRpb25hbCAyIEhDQ0EgcXVldWVzIGFyZSB1bnVzZWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGl3bDM5NDVfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcXVldWUgKnEpCitpbnQgaXdsMzk0NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSkKIHsKIAlpbnQgcyA9IHEtPnJlYWRfcHRyIC0gcS0+d3JpdGVfcHRyOwogCkBAIC0yMjAsMzMgKzE5OSwxNCBAQAogCXJldHVybiBzOwogfQogCi0vKioKLSAqIGl3bDM5NDVfcXVldWVfaW5jX3dyYXAgLSBpbmNyZW1lbnQgcXVldWUgaW5kZXgsIHdyYXAgYmFjayB0byBiZWdpbm5pbmcKLSAqIEBpbmRleCAtLSBjdXJyZW50IGluZGV4Ci0gKiBAbl9iZCAtLSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiBxdWV1ZSAobXVzdCBiZSBwb3dlciBvZiAyKQotICovCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X3F1ZXVlX2luY193cmFwKGludCBpbmRleCwgaW50IG5fYmQpCi17Ci0JcmV0dXJuICsraW5kZXggJiAobl9iZCAtIDEpOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcXVldWVfZGVjX3dyYXAgLSBpbmNyZW1lbnQgcXVldWUgaW5kZXgsIHdyYXAgYmFjayB0byBlbmQKLSAqIEBpbmRleCAtLSBjdXJyZW50IGluZGV4Ci0gKiBAbl9iZCAtLSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiBxdWV1ZSAobXVzdCBiZSBwb3dlciBvZiAyKQotICovCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X3F1ZXVlX2RlY193cmFwKGludCBpbmRleCwgaW50IG5fYmQpCi17Ci0JcmV0dXJuIC0taW5kZXggJiAobl9iZCAtIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB4Ml9xdWV1ZV91c2VkKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCBpbnQgaSkKK2ludCBpd2wzOTQ1X3gyX3F1ZXVlX3VzZWQoY29uc3Qgc3RydWN0IGl3bDM5NDVfcXVldWUgKnEsIGludCBpKQogewogCXJldHVybiBxLT53cml0ZV9wdHIgPiBxLT5yZWFkX3B0ciA/CiAJCShpID49IHEtPnJlYWRfcHRyICYmIGkgPCBxLT53cml0ZV9wdHIpIDoKIAkJIShpIDwgcS0+cmVhZF9wdHIgJiYgaSA+PSBxLT53cml0ZV9wdHIpOwogfQogCisKIHN0YXRpYyBpbmxpbmUgdTggZ2V0X2NtZF9pbmRleChzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwgdTMyIGluZGV4LCBpbnQgaXNfaHVnZSkKIHsKIAkvKiBUaGlzIGlzIGZvciBzY2FuIGNvbW1hbmQsIHRoZSBiaWcgYnVmZmVyIGF0IGVuZCBvZiBjb21tYW5kIGFycmF5ICovCkBAIC0yNjcsOCArMjI3LDggQEAKIAlxLT5uX3dpbmRvdyA9IHNsb3RzX251bTsKIAlxLT5pZCA9IGlkOwogCi0JLyogY291bnQgbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlIGl3bDM5NDVfcXVldWVfaW5jX3dyYXAKLQkgKiBhbmQgaXdsMzk0NV9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLworCS8qIGNvdW50IG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZSBpd2xfcXVldWVfaW5jX3dyYXAKKwkgKiBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCiAJQlVHX09OKCFpc19wb3dlcl9vZl8yKGNvdW50KSk7CiAKIAkvKiBzbG90c19udW0gbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlCkBAIC0zNjgsNyArMzI4LDcgQEAKIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKIAogCS8qIFRGRF9RVUVVRV9TSVpFX01BWCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKLQkgKiBpd2wzOTQ1X3F1ZXVlX2luY193cmFwIGFuZCBpd2wzOTQ1X3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCisJICogaXdsX3F1ZXVlX2luY193cmFwIGFuZCBpd2xfcXVldWVfZGVjX3dyYXAgYXJlIGJyb2tlbi4gKi8KIAlCVUlMRF9CVUdfT04oVEZEX1FVRVVFX1NJWkVfTUFYICYgKFRGRF9RVUVVRV9TSVpFX01BWCAtIDEpKTsKIAogCS8qIEluaXRpYWxpemUgcXVldWUgaGlnaC9sb3ctd2F0ZXIsIGhlYWQvdGFpbCBpbmRleGVzICovCkBAIC0zOTksNyArMzU5LDcgQEAKIAogCS8qIGZpcnN0LCBlbXB0eSBhbGwgQkQncyAqLwogCWZvciAoOyBxLT53cml0ZV9wdHIgIT0gcS0+cmVhZF9wdHI7Ci0JICAgICBxLT5yZWFkX3B0ciA9IGl3bDM5NDVfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQorCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQogCQlpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgKiBxLT5uX3dpbmRvdzsKQEAgLTU0Nyw3ICs1MDcsNyBAQAogCXN0YXRpb24tPnN0YS5zdGEuc3RhX2lkID0gaW5kZXg7CiAJc3RhdGlvbi0+c3RhLnN0YXRpb25fZmxhZ3MgPSAwOwogCi0JaWYgKHByaXYtPnBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFBKQorCWlmIChwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJhdGUgPSBJV0xfUkFURV82TV9QTENQOwogCWVsc2UKIAkJcmF0ZSA9CUlXTF9SQVRFXzFNX1BMQ1A7CkBAIC02ODcsNiArNjQ3LDEyIEBACiAJQlVHX09OKChmaXhfc2l6ZSA+IFRGRF9NQVhfUEFZTE9BRF9TSVpFKSAmJgogCSAgICAgICAhKGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpKTsKIAorCisJaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19JTkZPKCJOb3Qgc2VuZGluZyBjb21tYW5kIC0gUkYgS0lMTCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKIAlpZiAoaXdsMzk0NV9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSA/IDIgOiAxKSkgewogCQlJV0xfRVJST1IoIk5vIHNwYWNlIGZvciBUeFxuIik7CiAJCXJldHVybiAtRU5PU1BDOwpAQCAtNzMyLDcgKzY5OCw3IEBACiAJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAKIAkvKiBJbmNyZW1lbnQgYW5kIHVwZGF0ZSBxdWV1ZSdzIHdyaXRlIGluZGV4ICovCi0JcS0+d3JpdGVfcHRyID0gaXdsMzk0NV9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOworCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwogCXJldCA9IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CkBAIC03NjcsMTcgKzczMywxNyBAQAogewogCWludCBjbWRfaWR4OwogCWludCByZXQ7Ci0Jc3RhdGljIGF0b21pY190IGVudHJ5ID0gQVRPTUlDX0lOSVQoMCk7IC8qIHJlZW50cmFuY2UgcHJvdGVjdGlvbiAqLwogCiAJQlVHX09OKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQyk7CiAKIAkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KIAlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CiAKLQlpZiAoYXRvbWljX3hjaGcoJmVudHJ5LCAxKSkgeworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSkgewogCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OwogCX0KIAogCXNldF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTg0Nyw3ICs4MTMsNyBAQAogCQljbWQtPm1ldGEudS5za2IgPSBOVUxMOwogCX0KIG91dDoKLQlhdG9taWNfc2V0KCZlbnRyeSwgMCk7CisJY2xlYXJfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04ODgsMzUgKzg1NCwzNyBAQAogCiAvKioKICAqIGl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbCAtIFNldCB0aGUgcGh5bW9kZSBhbmQgY2hhbm5lbCB2YWx1ZXMgaW4gc3RhZ2luZyBSWE9OCi0gKiBAcGh5bW9kZTogTU9ERV9JRUVFODAyMTFBIHNldHMgdG8gNS4yR0h6OyBhbGwgZWxzZSBzZXQgdG8gMi40R0h6Ci0gKiBAY2hhbm5lbDogQW55IGNoYW5uZWwgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgcGh5bW9kZQorICogQGJhbmQ6IDIuNCBvciA1IEdIeiBiYW5kCisgKiBAY2hhbm5lbDogQW55IGNoYW5uZWwgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgYmFuZAogCi0gKiBJbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSBzdGFnaW5nIFJYT04sIHByaXYtPnBoeW1vZGUgaXMgYWxzbyBzZXQuCisgKiBJbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSBzdGFnaW5nIFJYT04sIHByaXYtPmJhbmQgaXMgYWxzbyBzZXQuCiAgKgogICogTk9URTogIERvZXMgbm90IGNvbW1pdCB0byB0aGUgaGFyZHdhcmU7IGl0IHNldHMgYXBwcm9wcmlhdGUgYml0IGZpZWxkcwotICogaW4gdGhlIHN0YWdpbmcgUlhPTiBmbGFnIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgcGh5bW9kZQorICogaW4gdGhlIHN0YWdpbmcgUlhPTiBmbGFnIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgYmFuZAogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBwaHltb2RlLCB1MTYgY2hhbm5lbCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCisJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCQkgICAgdTE2IGNoYW5uZWwpCiB7Ci0JaWYgKCFpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgcGh5bW9kZSwgY2hhbm5lbCkpIHsKKwlpZiAoIWl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewogCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCi0JCQkgICAgICAgY2hhbm5lbCwgcGh5bW9kZSk7CisJCQkgICAgICAgY2hhbm5lbCwgYmFuZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpID09IGNoYW5uZWwpICYmCi0JICAgIChwcml2LT5waHltb2RlID09IHBoeW1vZGUpKQorCSAgICAocHJpdi0+YmFuZCA9PSBiYW5kKSkKIAkJcmV0dXJuIDA7CiAKIAlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOwotCWlmIChwaHltb2RlID09IE1PREVfSUVFRTgwMjExQSkKKwlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0JBTkRfMjRHX01TSzsKIAllbHNlCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19CQU5EXzI0R19NU0s7CiAKLQlwcml2LT5waHltb2RlID0gcGh5bW9kZTsKKwlwcml2LT5iYW5kID0gYmFuZDsKIAotCUlXTF9ERUJVR19JTkZPKCJTdGFnaW5nIGNoYW5uZWwgc2V0IHRvICVkIFslZF1cbiIsIGNoYW5uZWwsIHBoeW1vZGUpOworCUlXTF9ERUJVR19JTkZPKCJTdGFnaW5nIGNoYW5uZWwgc2V0IHRvICVkIFslZF1cbiIsIGNoYW5uZWwsIGJhbmQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjA0LDggKzExNzIsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAotCS8qIEluaXQgdGhlIGhhcmR3YXJlJ3MgcmF0ZSBmYWxsYmFjayBvcmRlciBiYXNlZCBvbiB0aGUKLQkgKiBwaHltb2RlICovCisJLyogSW5pdCB0aGUgaGFyZHdhcmUncyByYXRlIGZhbGxiYWNrIG9yZGVyIGJhc2VkIG9uIHRoZSBiYW5kICovCiAJcmMgPSBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShwcml2KTsKIAlpZiAocmMpIHsKIAkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIEhXIHJhdGUgdGFibGU6ICUwMlhcbiIsIHJjKTsKQEAgLTE1ODAsNyArMTU0Nyw3IEBACiAgKi8KIGludCBpd2wzOTQ1X2VlcHJvbV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCiB7Ci0JX19sZTE2ICplID0gKF9fbGUxNiAqKSZwcml2LT5lZXByb207CisJdTE2ICplID0gKHUxNiAqKSZwcml2LT5lZXByb207CiAJdTMyIGdwID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCk7CiAJdTMyIHI7CiAJaW50IHN6ID0gc2l6ZW9mKHByaXYtPmVlcHJvbSk7CkBAIC0xNjIzLDE1NyArMTU5MCwxMiBAQAogCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF0iLCBhZGRyKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9Ci0JCWVbYWRkciAvIDJdID0gY3B1X3RvX2xlMTYociA+PiAxNik7CisJCWVbYWRkciAvIDJdID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KShyID4+IDE2KSk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBNaXNjLiBpbnRlcm5hbCBzdGF0ZSBhbmQgaGVscGVyIGZ1bmN0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQotLyoqCi0gKiBpd2wzOTQ1X3JlcG9ydF9mcmFtZSAtIGR1bXAgZnJhbWUgdG8gc3lzbG9nIGR1cmluZyBkZWJ1ZyBzZXNzaW9ucwotICoKLSAqIFlvdSBtYXkgaGFjayB0aGlzIGZ1bmN0aW9uIHRvIHNob3cgZGlmZmVyZW50IGFzcGVjdHMgb2YgcmVjZWl2ZWQgZnJhbWVzLAotICogaW5jbHVkaW5nIHNlbGVjdGl2ZSBmcmFtZSBkdW1wcy4KLSAqIGdyb3VwMTAwIHBhcmFtZXRlciBzZWxlY3RzIHdoZXRoZXIgdG8gc2hvdyAxIG91dCBvZiAxMDAgZ29vZCBmcmFtZXMuCi0gKi8KLXZvaWQgaXdsMzk0NV9yZXBvcnRfZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QsCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKLXsKLQl1MzIgdG9fdXM7Ci0JdTMyIHByaW50X3N1bW1hcnkgPSAwOwotCXUzMiBwcmludF9kdW1wID0gMDsJLyogc2V0IHRvIDEgdG8gZHVtcCBhbGwgZnJhbWVzJyBjb250ZW50cyAqLwotCXUzMiBodW5kcmVkID0gMDsKLQl1MzIgZGF0YWZyYW1lID0gMDsKLQl1MTYgZmM7Ci0JdTE2IHNlcV9jdGw7Ci0JdTE2IGNoYW5uZWw7Ci0JdTE2IHBoeV9mbGFnczsKLQlpbnQgcmF0ZV9zeW07Ci0JdTE2IGxlbmd0aDsKLQl1MTYgc3RhdHVzOwotCXUxNiBiY25fdG1yOwotCXUzMiB0c2ZfbG93OwotCXU2NCB0c2Y7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JdTE2IHNpZ19hdmc7Ci0JdTE2IG5vaXNlX2RpZmY7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfc3RhdHMgKnJ4X3N0YXRzID0gSVdMX1JYX1NUQVRTKHBrdCk7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyICpyeF9oZHIgPSBJV0xfUlhfSERSKHBrdCk7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kICpyeF9lbmQgPSBJV0xfUlhfRU5EKHBrdCk7Ci0JdTggKmRhdGEgPSBJV0xfUlhfREFUQShwa3QpOwotCi0JLyogTUFDIGhlYWRlciAqLwotCWZjID0gbGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jb250cm9sKTsKLQlzZXFfY3RsID0gbGUxNl90b19jcHUoaGVhZGVyLT5zZXFfY3RybCk7Ci0KLQkvKiBtZXRhZGF0YSAqLwotCWNoYW5uZWwgPSBsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpOwotCXBoeV9mbGFncyA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+cGh5X2ZsYWdzKTsKLQlyYXRlX3N5bSA9IHJ4X2hkci0+cmF0ZTsKLQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9oZHItPmxlbik7Ci0KLQkvKiBlbmQtb2YtZnJhbWUgc3RhdHVzIGFuZCB0aW1lc3RhbXAgKi8KLQlzdGF0dXMgPSBsZTMyX3RvX2NwdShyeF9lbmQtPnN0YXR1cyk7Ci0JYmNuX3RtciA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7Ci0JdHNmX2xvdyA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKSAmIDB4MGZmZmZmZmZmOwotCXRzZiA9IGxlNjRfdG9fY3B1KHJ4X2VuZC0+dGltZXN0YW1wKTsKLQotCS8qIHNpZ25hbCBzdGF0aXN0aWNzICovCi0JcnNzaSA9IHJ4X3N0YXRzLT5yc3NpOwotCWFnYyA9IHJ4X3N0YXRzLT5hZ2M7Ci0Jc2lnX2F2ZyA9IGxlMTZfdG9fY3B1KHJ4X3N0YXRzLT5zaWdfYXZnKTsKLQlub2lzZV9kaWZmID0gbGUxNl90b19jcHUocnhfc3RhdHMtPm5vaXNlX2RpZmYpOwotCi0JdG9fdXMgPSAhY29tcGFyZV9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEsIHByaXYtPm1hY19hZGRyKTsKLQotCS8qIGlmIGRhdGEgZnJhbWUgaXMgdG8gdXMgYW5kIGFsbCBpcyBnb29kLAotCSAqICAgKG9wdGlvbmFsbHkpIHByaW50IHN1bW1hcnkgZm9yIG9ubHkgMSBvdXQgb2YgZXZlcnkgMTAwICovCi0JaWYgKHRvX3VzICYmIChmYyAmIH5JRUVFODAyMTFfRkNUTF9QUk9URUNURUQpID09Ci0JICAgIChJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRlRZUEVfREFUQSkpIHsKLQkJZGF0YWZyYW1lID0gMTsKLQkJaWYgKCFncm91cDEwMCkKLQkJCXByaW50X3N1bW1hcnkgPSAxOwkvKiBwcmludCBlYWNoIGZyYW1lICovCi0JCWVsc2UgaWYgKHByaXYtPmZyYW1lY250X3RvX3VzIDwgMTAwKSB7Ci0JCQlwcml2LT5mcmFtZWNudF90b191cysrOwotCQkJcHJpbnRfc3VtbWFyeSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5mcmFtZWNudF90b191cyA9IDA7Ci0JCQlwcmludF9zdW1tYXJ5ID0gMTsKLQkJCWh1bmRyZWQgPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogcHJpbnQgc3VtbWFyeSBmb3IgYWxsIG90aGVyIGZyYW1lcyAqLwotCQlwcmludF9zdW1tYXJ5ID0gMTsKLQl9Ci0KLQlpZiAocHJpbnRfc3VtbWFyeSkgewotCQljaGFyICp0aXRsZTsKLQkJdTMyIHJhdGU7Ci0KLQkJaWYgKGh1bmRyZWQpCi0JCQl0aXRsZSA9ICIxMDBGcmFtZXMiOwotCQllbHNlIGlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1JFVFJZKQotCQkJdGl0bGUgPSAiUmV0cnkiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcG9uc2UoZmMpKQotCQkJdGl0bGUgPSAiQXNjUnNwIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVzcG9uc2UoZmMpKQotCQkJdGl0bGUgPSAiUmFzUnNwIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3BvbnNlKGZjKSkgewotCQkJdGl0bGUgPSAiUHJiUnNwIjsKLQkJCXByaW50X2R1bXAgPSAxOwkvKiBkdW1wIGZyYW1lIGNvbnRlbnRzICovCi0JCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpIHsKLQkJCXRpdGxlID0gIkJlYWNvbiI7Ci0JCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19hdGltKGZjKSkKLQkJCXRpdGxlID0gIkFUSU0iOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpCi0JCQl0aXRsZSA9ICJBdXRoIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RlYXV0aChmYykpCi0JCQl0aXRsZSA9ICJEZUF1dGgiOwotCQllbHNlIGlmIChpZWVlODAyMTFfaXNfZGlzYXNzb2MoZmMpKQotCQkJdGl0bGUgPSAiRGlzQXNzb2MiOwotCQllbHNlCi0JCQl0aXRsZSA9ICJGcmFtZSI7Ci0KLQkJcmF0ZSA9IGl3bDM5NDVfcmF0ZV9pbmRleF9mcm9tX3BsY3AocmF0ZV9zeW0pOwotCQlpZiAocmF0ZSA9PSAtMSkKLQkJCXJhdGUgPSAwOwotCQllbHNlCi0JCQlyYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlXS5pZWVlIC8gMjsKLQotCQkvKiBwcmludCBmcmFtZSBzdW1tYXJ5LgotCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCi0JCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLwotCQlpZiAoZGF0YWZyYW1lKQotCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgotCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0ldSwgXG4iLAotCQkJCSAgICAgdGl0bGUsIGZjLCBoZWFkZXItPmFkZHIxWzVdLAotCQkJCSAgICAgbGVuZ3RoLCByc3NpLCBjaGFubmVsLCByYXRlKTsKLQkJZWxzZSB7Ci0JCQkvKiBzcmMvZHN0IGFkZHJlc3NlcyBhc3N1bWUgbWFuYWdlZCBtb2RlICovCi0JCQlJV0xfREVCVUdfUlgoIiVzOiAweCUwNHgsIGRzdD0weCUwMngsICIKLQkJCQkgICAgICJzcmM9MHglMDJ4LCByc3NpPSV1LCB0aW09JWx1IHVzZWMsICIKLQkJCQkgICAgICJwaHk9MHglMDJ4LCBjaG5sPSVkXG4iLAotCQkJCSAgICAgdGl0bGUsIGZjLCBoZWFkZXItPmFkZHIxWzVdLAotCQkJCSAgICAgaGVhZGVyLT5hZGRyM1s1XSwgcnNzaSwKLQkJCQkgICAgIHRzZl9sb3cgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZiwKLQkJCQkgICAgIHBoeV9mbGFncywgY2hhbm5lbCk7Ci0JCX0KLQl9Ci0JaWYgKHByaW50X2R1bXApCi0JCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JYLCBkYXRhLCBsZW5ndGgpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGl3bDM5NDVfdW5zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQogewogCWlmIChwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0KQpAQCAtMTkwOSw3ICsxNzMxLDYgQEAKIC8qCiAgKiBRb1MgIHN1cHBvcnQKICovCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfUU9TCiBzdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9xb3NfcGFyYW1zX2NvbW1hbmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kICpxb3MpCiB7CkBAIC0yMDM4LDcgKzE4NTksNiBAQAogCX0KIH0KIAotI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X1FPUyAqLwogLyoKICAqIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlciEpIGZ1bmN0aW9ucwogICovCkBAIC0yMjM4LDM5ICsyMDU4LDEzIEBACiAJCQlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIyLCBwcml2LT5ic3NpZCk7CiAJCS8qIHBhY2tldHMgdG8gb3VyIGFkYXB0ZXIgZ28gdGhyb3VnaCAqLwogCQlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxLCBwcml2LT5tYWNfYWRkcik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDE7CiB9CiAKLSNkZWZpbmUgVFhfU1RBVFVTX0VOVFJZKHgpIGNhc2UgVFhfU1RBVFVTX0ZBSUxfICMjIHg6IHJldHVybiAjeAotCi1zdGF0aWMgY29uc3QgY2hhciAqaXdsMzk0NV9nZXRfdHhfZmFpbF9yZWFzb24odTMyIHN0YXR1cykKLXsKLQlzd2l0Y2ggKHN0YXR1cyAmIFRYX1NUQVRVU19NU0spIHsKLQljYXNlIFRYX1NUQVRVU19TVUNDRVNTOgotCQlyZXR1cm4gIlNVQ0NFU1MiOwotCQlUWF9TVEFUVVNfRU5UUlkoU0hPUlRfTElNSVQpOwotCQlUWF9TVEFUVVNfRU5UUlkoTE9OR19MSU1JVCk7Ci0JCVRYX1NUQVRVU19FTlRSWShGSUZPX1VOREVSUlVOKTsKLQkJVFhfU1RBVFVTX0VOVFJZKE1HTU5UX0FCT1JUKTsKLQkJVFhfU1RBVFVTX0VOVFJZKE5FWFRfRlJBRyk7Ci0JCVRYX1NUQVRVU19FTlRSWShMSUZFX0VYUElSRSk7Ci0JCVRYX1NUQVRVU19FTlRSWShERVNUX1BTKTsKLQkJVFhfU1RBVFVTX0VOVFJZKEFCT1JURUQpOwotCQlUWF9TVEFUVVNfRU5UUlkoQlRfUkVUUlkpOwotCQlUWF9TVEFUVVNfRU5UUlkoU1RBX0lOVkFMSUQpOwotCQlUWF9TVEFUVVNfRU5UUlkoRlJBR19EUk9QUEVEKTsKLQkJVFhfU1RBVFVTX0VOVFJZKFRJRF9ESVNBQkxFKTsKLQkJVFhfU1RBVFVTX0VOVFJZKEZSQU1FX0ZMVVNIRUQpOwotCQlUWF9TVEFUVVNfRU5UUlkoSU5TVUZGSUNJRU5UX0NGX1BPTEwpOwotCQlUWF9TVEFUVVNfRU5UUlkoVFhfTE9DS0VEKTsKLQkJVFhfU1RBVFVTX0VOVFJZKE5PX0JFQUNPTl9PTl9SQURBUik7Ci0JfQotCi0JcmV0dXJuICJVTktOT1dOIjsKLX0KLQogLyoqCiAgKiBpd2wzOTQ1X3NjYW5fY2FuY2VsIC0gQ2FuY2VsIGFueSBjdXJyZW50bHkgZXhlY3V0aW5nIEhXIHNjYW4KICAqCkBAIC0yNDU1LDkgKzIyNDksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggcGh5bW9kZSkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCisJCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewotCWlmIChwaHltb2RlID09IE1PREVfSUVFRTgwMjExQSkgeworCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CiAJCSAgICB+KFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSwogCQkgICAgICB8IFJYT05fRkxHX0NDS19NU0spOwpAQCAtMjUwOSw2ICsyMzA0LDkgQEAKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLIHwKIAkJICAgIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyB8IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlJV0xfRVJST1IoIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBwcml2LT5pd19tb2RlKTsKKwkJYnJlYWs7CiAJfQogCiAjaWYgMApAQCAtMjUyMCw3ICsyMzE4LDcgQEAKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKICNlbmRpZgogCi0JY2hfaW5mbyA9IGl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5waHltb2RlLAorCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKIAkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKTsKIAogCWlmICghY2hfaW5mbykKQEAgLTI1MzYsMTEgKzIzMzQsMTEgQEAKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7CiAJaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pKQotCQlwcml2LT5waHltb2RlID0gTU9ERV9JRUVFODAyMTFBOworCQlwcml2LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIAllbHNlCi0JCXByaXYtPnBoeW1vZGUgPSBNT0RFX0lFRUU4MDIxMUc7CisJCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCi0JaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgcHJpdi0+cGh5bW9kZSk7CisJaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgcHJpdi0+YmFuZCk7CiAKIAlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9CiAJICAgIChJV0xfT0ZETV9SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKQEAgLTI1NTQsNyArMjM1Miw3IEBACiAJCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAogCQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCi0JCQlwcml2LT5waHltb2RlLAorCQkJcHJpdi0+YmFuZCwKIAkJCWxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSk7CiAKIAkJaWYgKCFjaF9pbmZvIHx8ICFpc19jaGFubmVsX2lic3MoY2hfaW5mbykpIHsKQEAgLTI2ODgsOCArMjQ4NiwxMiBAQAogCQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMyk7CiAJCWVsc2UKIAkJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDIpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IDA7CisjaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworCQlwcml2LT5yeHR4cGFja2V0cyArPSBsZTE2X3RvX2NwdShjbWQtPmNtZC50eC5sZW4pOworI2VuZGlmCisJfQogCiAJY21kLT5jbWQudHguZHJpdmVyX3R4b3AgPSAwOwogCWNtZC0+Y21kLnR4LnR4X2ZsYWdzID0gdHhfZmxhZ3M7CkBAIC0yNzg2LDcgKzI1ODgsNyBAQAogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIAotCWlmICgoY3RsLT50eF9yYXRlICYgMHhGRikgPT0gSVdMX0lOVkFMSURfUkFURSkgeworCWlmICgoY3RsLT50eF9yYXRlLT5od192YWx1ZSAmIDB4RkYpID09IElXTF9JTlZBTElEX1JBVEUpIHsKIAkJSVdMX0VSUk9SKCJFUlJPUjogTm8gVFggcmF0ZSBhdmFpbGFibGUuXG4iKTsKIAkJZ290byBkcm9wX3VubG9jazsKIAl9CkBAIC0yODA2LDcgKzI2MDgsOCBAQAogI2VuZGlmCiAKIAkvKiBkcm9wIGFsbCBkYXRhIGZyYW1lIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLwotCWlmICgoIWl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSB8fCAhcHJpdi0+YXNzb2NfaWQpICYmCisJaWYgKCghaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpIHx8CisJICAgICAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKSAmJiAhcHJpdi0+YXNzb2NfaWQpKSAmJgogCSAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkgewogCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsMzk0NV9pc19hc3NvY2lhdGVkXG4iKTsKIAkJZ290byBkcm9wX3VubG9jazsKQEAgLTI5NTYsNyArMjc1OSw3IEBACiAJCQkgICBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYykpOwogCiAJLyogVGVsbCBkZXZpY2UgdGhlIHdyaXRlIGluZGV4ICpqdXN0IHBhc3QqIHRoaXMgbGF0ZXN0IGZpbGxlZCBURkQgKi8KLQlxLT53cml0ZV9wdHIgPSBpd2wzOTQ1X3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7CisJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7CiAJcmMgPSBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTI5ODUsMTIgKzI3ODgsMTIgQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9zZXRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQogewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqaHcgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CiAJaW50IGk7CiAKLQlodyA9IGl3bDM5NDVfZ2V0X2h3X21vZGUocHJpdiwgcHJpdi0+cGh5bW9kZSk7Ci0JaWYgKCFodykgeworCXNiYW5kID0gaXdsMzk0NV9nZXRfYmFuZChwcml2LCBwcml2LT5iYW5kKTsKKwlpZiAoIXNiYW5kKSB7CiAJCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjk5OCwyNCArMjgwMSwxNyBAQAogCXByaXYtPmFjdGl2ZV9yYXRlID0gMDsKIAlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyA9IDA7CiAKLQlJV0xfREVCVUdfUkFURSgiU2V0dGluZyByYXRlcyBmb3IgODAyLjExJWNcbiIsCi0JCSAgICAgICBody0+bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEgPwotCQkgICAgICAgJ2EnIDogKChody0+bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUIpID8gJ2InIDogJ2cnKSk7CisJSVdMX0RFQlVHX1JBVEUoIlNldHRpbmcgcmF0ZXMgZm9yICVzIEdIelxuIiwKKwkJICAgICAgIHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogPyAiMi40IiA6ICI1Iik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaHctPm51bV9yYXRlczsgaSsrKSB7Ci0JCXJhdGUgPSAmKGh3LT5yYXRlc1tpXSk7Ci0JCWlmICgocmF0ZS0+dmFsIDwgSVdMX1JBVEVfQ09VTlQpICYmCi0JCSAgICAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TVVBQT1JURUQpKSB7Ci0JCQlJV0xfREVCVUdfUkFURSgiQWRkaW5nIHJhdGUgaW5kZXggJWQgKHBsY3AgJWQpJXNcbiIsCi0JCQkJICAgICAgIHJhdGUtPnZhbCwgaXdsMzk0NV9yYXRlc1tyYXRlLT52YWxdLnBsY3AsCi0JCQkJICAgICAgIChyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0JBU0lDKSA/Ci0JCQkJICAgICAgICIqIiA6ICIiKTsKLQkJCXByaXYtPmFjdGl2ZV9yYXRlIHw9ICgxIDw8IHJhdGUtPnZhbCk7Ci0JCQlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9CQVNJQykKLQkJCQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyB8PSAoMSA8PCByYXRlLT52YWwpOwotCQl9IGVsc2UKLQkJCUlXTF9ERUJVR19SQVRFKCJOb3QgYWRkaW5nIHJhdGUgJWQgKHBsY3AgJWQpXG4iLAotCQkJCSAgICAgICByYXRlLT52YWwsIGl3bDM5NDVfcmF0ZXNbcmF0ZS0+dmFsXS5wbGNwKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwkJaWYgKChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKSAmJgorCQkgICAgIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgeworCQkJSVdMX0RFQlVHX1JBVEUoIkFkZGluZyByYXRlIGluZGV4ICVkIChwbGNwICVkKVxuIiwKKwkJCQkgICAgICAgcmF0ZS0+aHdfdmFsdWUsIGl3bDM5NDVfcmF0ZXNbcmF0ZS0+aHdfdmFsdWVdLnBsY3ApOworCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOworCQl9CiAJfQogCiAJSVdMX0RFQlVHX1JBVEUoIlNldCBhY3RpdmVfcmF0ZSA9ICUweCwgYWN0aXZlX3JhdGVfYmFzaWMgPSAlMHhcbiIsCkBAIC0zMzIzLDEyNyArMzExOSw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaXdsMzk0NV90eHN0YXR1c190b19pZWVlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3R4X2luZm8gKnR4X3N0YSkKLXsKLQotCXR4X3N0YS0+c3RhdHVzLmFja19zaWduYWwgPSAwOwotCXR4X3N0YS0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKLQl0eF9zdGEtPnN0YXR1cy5xdWV1ZV9sZW5ndGggPSAwOwotCXR4X3N0YS0+c3RhdHVzLnF1ZXVlX251bWJlciA9IDA7Ci0KLQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywKLQkJCQkJICAgIHR4X3N0YS0+c2tiWzBdLCAmKHR4X3N0YS0+c3RhdHVzKSk7Ci0JZWxzZQotCQlpZWVlODAyMTFfdHhfc3RhdHVzKHByaXYtPmh3LAotCQkJCSAgICB0eF9zdGEtPnNrYlswXSwgJih0eF9zdGEtPnN0YXR1cykpOwotCi0JdHhfc3RhLT5za2JbMF0gPSBOVUxMOwotfQotCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbSAtIFJlY2xhaW0gVHggcXVldWUgZW50cmllcyBhbHJlYWR5IFR4J2QKLSAqCi0gKiBXaGVuIEZXIGFkdmFuY2VzICdSJyBpbmRleCwgYWxsIGVudHJpZXMgYmV0d2VlbiBvbGQgYW5kIG5ldyAnUicgaW5kZXgKLSAqIG5lZWQgdG8gYmUgcmVjbGFpbWVkLiBBcyByZXN1bHQsIHNvbWUgZnJlZSBzcGFjZSBmb3Jtcy4gSWYgdGhlcmUgaXMKLSAqIGVub3VnaCBmcmVlIHNwYWNlICg+IGxvdyBtYXJrKSwgd2FrZSB0aGUgc3RhY2sgdGhhdCBmZWVkcyB1cy4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgaW50IGluZGV4KQotewotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgKnEgPSAmdHhxLT5xOwotCWludCBuZnJlZWQgPSAwOwotCi0JaWYgKChpbmRleCA+PSBxLT5uX2JkKSB8fCAoeDJfcXVldWVfdXNlZChxLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCi0JCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAotCQkJICBpbmRleCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCXJldHVybiAwOwotCX0KLQotCWZvciAoaW5kZXggPSBpd2wzOTQ1X3F1ZXVlX2luY193cmFwKGluZGV4LCBxLT5uX2JkKTsKLQkJcS0+cmVhZF9wdHIgIT0gaW5kZXg7Ci0JCXEtPnJlYWRfcHRyID0gaXdsMzk0NV9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKLQkJaWYgKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQkJaXdsMzk0NV90eHN0YXR1c190b19pZWVlKHByaXYsCi0JCQkJCSYodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXSkpOwotCQkJaXdsMzk0NV9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKLQkJfSBlbHNlIGlmIChuZnJlZWQgPiAxKSB7Ci0JCQlJV0xfRVJST1IoIkhDTUQgc2tpcHBlZDogaW5kZXggKCVkKSAlZCAlZFxuIiwgaW5kZXgsCi0JCQkJCXEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQkJfQotCQluZnJlZWQrKzsKLQl9Ci0KLQlpZiAoaXdsMzk0NV9xdWV1ZV9zcGFjZShxKSA+IHEtPmxvd19tYXJrICYmICh0eHFfaWQgPj0gMCkgJiYKLQkJCSh0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pICYmCi0JCQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgdHhxX2lkKTsKLQotCi0JcmV0dXJuIG5mcmVlZDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2lzX3R4X3N1Y2Nlc3ModTMyIHN0YXR1cykKLXsKLQlyZXR1cm4gKHN0YXR1cyAmIDB4RkYpID09IDB4MTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEdlbmVyaWMgUlggaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBpd2wzOTQ1X3J4X3JlcGx5X3R4IC0gSGFuZGxlIFR4IHJlc3BvbnNlCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfdHgoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXUxNiBzZXF1ZW5jZSA9IGxlMTZfdG9fY3B1KHBrdC0+aGRyLnNlcXVlbmNlKTsKLQlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKLQlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1czsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwICp0eF9yZXNwID0gKHZvaWQgKikmcGt0LT51LnJhd1swXTsKLQl1MzIgIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cyk7Ci0KLQlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoeDJfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgotCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAotCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCi0JCQkgIHR4cS0+cS5yZWFkX3B0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQl0eF9zdGF0dXMgPSAmKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc3RhdHVzKTsKLQotCXR4X3N0YXR1cy0+cmV0cnlfY291bnQgPSB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lOwotCXR4X3N0YXR1cy0+cXVldWVfbnVtYmVyID0gc3RhdHVzOwotCXR4X3N0YXR1cy0+cXVldWVfbGVuZ3RoID0gdHhfcmVzcC0+YnRfa2lsbF9jb3VudDsKLQl0eF9zdGF0dXMtPnF1ZXVlX2xlbmd0aCB8PSB0eF9yZXNwLT5mYWlsdXJlX3J0czsKLQotCXR4X3N0YXR1cy0+ZmxhZ3MgPQotCSAgICBpd2wzOTQ1X2lzX3R4X3N1Y2Nlc3Moc3RhdHVzKSA/IElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLIDogMDsKLQotCXR4X3N0YXR1cy0+Y29udHJvbC50eF9yYXRlID0gaXdsMzk0NV9yYXRlX2luZGV4X2Zyb21fcGxjcCh0eF9yZXNwLT5yYXRlKTsKLQotCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAotCQkJdHhxX2lkLCBpd2wzOTQ1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCi0JCQl0eF9yZXNwLT5yYXRlLCB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKLQotCUlXTF9ERUJVR19UWF9SRVBMWSgiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOwotCWlmIChpbmRleCAhPSAtMSkKLQkJaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwotCi0JaWYgKGl3bF9jaGVja19iaXRzKHN0YXR1cywgVFhfQUJPUlRfUkVRVUlSRURfTVNLKSkKLQkJSVdMX0VSUk9SKCJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKLX0KLQotCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewpAQCAtMzc5MCwxMyArMzQ2NSw0NCBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1NDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OXSA9CiAJICAgIGl3bDM5NDVfcnhfc2Nhbl9jb21wbGV0ZV9ub3RpZjsKIAlwcml2LT5yeF9oYW5kbGVyc1tDQVJEX1NUQVRFX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X2NhcmRfc3RhdGVfbm90aWY7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfVFhdID0gaXdsMzk0NV9yeF9yZXBseV90eDsKIAogCS8qIFNldCB1cCBoYXJkd2FyZSBzcGVjaWZpYyBSeCBoYW5kbGVycyAqLwogCWl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChwcml2KTsKIH0KIAogLyoqCisgKiBpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltIC0gUmVjbGFpbSBDTUQgcXVldWUgZW50cmllcworICogV2hlbiBGVyBhZHZhbmNlcyAnUicgaW5kZXgsIGFsbCBlbnRyaWVzIGJldHdlZW4gb2xkIGFuZCBuZXcgJ1InIGluZGV4CisgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4KKyAqLworc3RhdGljIHZvaWQgaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorCQkJCSAgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOworCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKKwlpbnQgbmZyZWVkID0gMDsKKworCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bDM5NDVfeDJfcXVldWVfdXNlZChxLCBpbmRleCkgPT0gMCkpIHsKKwkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCisJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAorCQkJICBpbmRleCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGluZGV4ID0gaXdsX3F1ZXVlX2luY193cmFwKGluZGV4LCBxLT5uX2JkKTsgcS0+cmVhZF9wdHIgIT0gaW5kZXg7CisJCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgeworCQlpZiAobmZyZWVkID4gMSkgeworCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGluZGV4LAorCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJCQlicmVhazsKKwkJfQorCQluZnJlZWQrKzsKKwl9Cit9CisKKworLyoqCiAgKiBpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZSAtIFB1bGwgdW51c2VkIGJ1ZmZlcnMgb2ZmIHRoZSBxdWV1ZSBhbmQgcmVjbGFpbSB0aGVtCiAgKiBAcnhiOiBSeCBidWZmZXIgdG8gcmVjbGFpbQogICoKQEAgLTM4MTUsMTIgKzM1MjEsNiBAQAogCWludCBjbWRfaW5kZXg7CiAJc3RydWN0IGl3bDM5NDVfY21kICpjbWQ7CiAKLQkvKiBJZiBhIFR4IGNvbW1hbmQgaXMgYmVpbmcgaGFuZGxlZCBhbmQgaXQgaXNuJ3QgaW4gdGhlIGFjdHVhbAotCSAqIGNvbW1hbmQgcXVldWUgdGhlbiB0aGVyZSBhIGNvbW1hbmQgcm91dGluZyBidWcgaGFzIGJlZW4gaW50cm9kdWNlZAotCSAqIGluIHRoZSBxdWV1ZSBtYW5hZ2VtZW50IGNvZGUuICovCi0JaWYgKHR4cV9pZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJSVdMX0VSUk9SKCJFcnJvciB3cm9uZyBjb21tYW5kIHF1ZXVlICVkIGNvbW1hbmQgaWQgMHglWFxuIiwKLQkJCSAgdHhxX2lkLCBwa3QtPmhkci5jbWQpOwogCUJVR19PTih0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pOwogCiAJY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7CkBAIC0zODM0LDcgKzM1MzQsNyBAQAogCQkgICAhY21kLT5tZXRhLnUuY2FsbGJhY2socHJpdiwgY21kLCByeGItPnNrYikpCiAJCXJ4Yi0+c2tiID0gTlVMTDsKIAotCWl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKKwlpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwogCiAJaWYgKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSkgewogCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTQyODEsNyArMzk4MSw3IEBACiAJaW50IHJlY2xhaW07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBmaWxsX3J4ID0gMDsKLQl1MzIgY291bnQgPSAwOworCXUzMiBjb3VudCA9IDg7CiAKIAkvKiB1Q29kZSdzIHJlYWQgaW5kZXggKHN0b3JlZCBpbiBzaGFyZWQgRFJBTSkgaW5kaWNhdGVzIHRoZSBsYXN0IFJ4CiAJICogYnVmZmVyIHRoYXQgdGhlIGRyaXZlciBtYXkgcHJvY2VzcyAobGFzdCBidWZmZXIgZmlsbGVkIGJ5IHVjb2RlKS4gKi8KQEAgLTQ0NTMsNiArNDE1MywxNiBAQAogCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIENTUl9JTklfU0VUX01BU0spOwogfQogCisKKy8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmbHVzaCBhbnkgc2NoZWR1bGVkIHRhc2tsZXQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit7CisJLyogd2FpdCB0byBtYWtlIHN1cmUgd2UgZmx1c2ggcGVkZGluZyB0YXNrbGV0Ki8KKwlzeW5jaHJvbml6ZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPmlycV90YXNrbGV0KTsKK30KKworCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKIHsKIAljbGVhcl9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKQEAgLTQ1MTQsOCArNDIyNCw3IEBACiAKIAlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7CiAJCUlXTF9FUlJPUigiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlJPUigiU3RhdHVzOiAweCUwOGxYLCBDb25maWc6ICUwOFggY291bnQ6ICVkXG4iLAotCQkJICBwcml2LT5zdGF0dXMsIHByaXYtPmNvbmZpZywgY291bnQpOworCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKIAl9CiAKIAlJV0xfRVJST1IoIkRlc2MgICAgICAgVGltZSAgICAgICBhc3J0UEMgIGJsaW5rMiAiCkBAIC00NzM1LDkgKzQ0NDQsOSBAQAogCSAqIGF0b21pYywgbWFrZSBzdXJlIHRoYXQgaW50YSBjb3ZlcnMgYWxsIHRoZSBpbnRlcnJ1cHRzIHRoYXQKIAkgKiB3ZSd2ZSBkaXNjb3ZlcmVkLCBldmVuIGlmIEZIIGludGVycnVwdCBjYW1lIGluIGp1c3QgYWZ0ZXIKIAkgKiByZWFkaW5nIENTUl9JTlQuICovCi0JaWYgKGludGFfZmggJiBDU1JfRkhfSU5UX1JYX01BU0spCisJaWYgKGludGFfZmggJiBDU1IzOV9GSF9JTlRfUlhfTUFTSykKIAkJaW50YSB8PSBDU1JfSU5UX0JJVF9GSF9SWDsKLQlpZiAoaW50YV9maCAmIENTUl9GSF9JTlRfVFhfTUFTSykKKwlpZiAoaW50YV9maCAmIENTUjM5X0ZIX0lOVF9UWF9NQVNLKQogCQlpbnRhIHw9IENTUl9JTlRfQklUX0ZIX1RYOwogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCkBAIC00Nzg1LDcgKzQ0OTQsNyBAQAogCQkvKiBRdWV1ZSByZXN0YXJ0IG9ubHkgaWYgUkZfS0lMTCBzd2l0Y2ggd2FzIHNldCB0byAia2lsbCIKIAkJICogICB3aGVuIHdlIGxvYWRlZCBkcml2ZXIsIGFuZCBpcyBub3cgc2V0IHRvICJlbmFibGUiLgogCQkgKiBBZnRlciB3ZSdyZSBBbGl2ZSwgUkZfS0lMTCBnZXRzIGhhbmRsZWQgYnkKLQkJICogICBpd2xfcnhfY2FyZF9zdGF0ZV9ub3RpZigpICovCisJCSAqICAgaXdsMzk0NV9yeF9jYXJkX3N0YXRlX25vdGlmKCkgKi8KIAkJaWYgKCFod19yZl9raWxsICYmICF0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKSB7CiAJCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKQEAgLTQ4NTMsNyArNDU2Miw5IEBACiAJfQogCiAJLyogUmUtZW5hYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KKwlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKKwkJaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCiAJaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKQEAgLTQ5MTcsNyArNDYyOCw5IEBACiAKICBub25lOgogCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCWl3bDM5NDVfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCisJCWl3bDM5NDVfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogCXJldHVybiBJUlFfTk9ORTsKIH0KQEAgLTUwMTksMjQgKzQ3MzIsMjQgQEAKICAqIEJhc2VkIG9uIGJhbmQgYW5kIGNoYW5uZWwgbnVtYmVyLgogICovCiBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkJICAgIGludCBwaHltb2RlLCB1MTYgY2hhbm5lbCkKKwkJCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKQogewogCWludCBpOwogCi0Jc3dpdGNoIChwaHltb2RlKSB7Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUE6CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgogCQlmb3IgKGkgPSAxNDsgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgewogCQkJaWYgKHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsID09IGNoYW5uZWwpCiAJCQkJcmV0dXJuICZwcml2LT5jaGFubmVsX2luZm9baV07CiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIE1PREVfSUVFRTgwMjExQjoKLQljYXNlIE1PREVfSUVFRTgwMjExRzoKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CiAJCWlmIChjaGFubmVsID49IDEgJiYgY2hhbm5lbCA8PSAxNCkKIAkJCXJldHVybiAmcHJpdi0+Y2hhbm5lbF9pbmZvW2NoYW5uZWwgLSAxXTsKIAkJYnJlYWs7Ci0KKwljYXNlIElFRUU4MDIxMV9OVU1fQkFORFM6CisJCVdBUk5fT04oMSk7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC01MDk5LDggKzQ4MTIsOCBAQAogCQkvKiBMb29wIHRocm91Z2ggZWFjaCBiYW5kIGFkZGluZyBlYWNoIG9mIHRoZSBjaGFubmVscyAqLwogCQlmb3IgKGNoID0gMDsgY2ggPCBlZXByb21fY2hfY291bnQ7IGNoKyspIHsKIAkJCWNoX2luZm8tPmNoYW5uZWwgPSBlZXByb21fY2hfaW5kZXhbY2hdOwotCQkJY2hfaW5mby0+cGh5bW9kZSA9IChiYW5kID09IDEpID8gTU9ERV9JRUVFODAyMTFCIDoKLQkJCSAgICBNT0RFX0lFRUU4MDIxMUE7CisJCQljaF9pbmZvLT5iYW5kID0gKGJhbmQgPT0gMSkgPyBJRUVFODAyMTFfQkFORF8yR0haIDoKKwkJCSAgICBJRUVFODAyMTFfQkFORF81R0haOwogCiAJCQkvKiBwZXJtYW5lbnRseSBzdG9yZSBFRVBST00ncyBjaGFubmVsIHJlZ3VsYXRvcnkgZmxhZ3MKIAkJCSAqICAgYW5kIG1heCBwb3dlciBpbiBjaGFubmVsIGluZm8gZGF0YWJhc2UuICovCkBAIC01MTI3LDExICs0ODQwLDEyIEBACiAJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CiAJCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwogCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCIKKwkJCUlXTF9ERUJVR19JTkZPKCJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMlcygweCUwMngiCiAJCQkJICAgICAgICIgJWRkQm0pOiBBZC1Ib2MgJXNzdXBwb3J0ZWRcbiIsCiAJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCiAJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KIAkJCQkgICAgICAgIjUuMiIgOiAiMi40IiwKKwkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKFZBTElEKSwKIAkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKElCU1MpLAogCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoQUNUSVZFKSwKIAkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKFJBREFSKSwKQEAgLTUxOTYsMTggKzQ5MTAsMjAgQEAKICNkZWZpbmUgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSAgICAgICgxMDApCiAjZGVmaW5lIElXTF9DSEFOTkVMX1RVTkVfVElNRSAgICAgICA1CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGl3bDM5NDVfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBwaHltb2RlKQorc3RhdGljIGlubGluZSB1MTYgaXdsMzk0NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKKwkJCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKLQlpZiAocGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpCisJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJcmV0dXJuIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MjsKIAllbHNlCiAJCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQ7CiB9CiAKLXN0YXRpYyB1MTYgaXdsMzk0NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBwaHltb2RlKQorc3RhdGljIHUxNiBpd2wzOTQ1X2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKKwkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7Ci0JdTE2IGFjdGl2ZSA9IGl3bDM5NDVfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIHBoeW1vZGUpOwotCXUxNiBwYXNzaXZlID0gKHBoeW1vZGUgIT0gTU9ERV9JRUVFODAyMTFBKSA/CisJdTE2IGFjdGl2ZSA9IGl3bDM5NDVfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOworCXUxNiBwYXNzaXZlID0gKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwogCSAgICBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICsgSVdMX1BBU1NJVkVfRFdFTExfVElNRV8yNCA6CiAJICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzUyOwogCkBAIC01MjI3LDI4ICs0OTQzLDMyIEBACiAJcmV0dXJuIHBhc3NpdmU7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHBoeW1vZGUsCitzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCisJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJICAgICB1OCBpc19hY3RpdmUsIHU4IGRpcmVjdF9tYXNrLAogCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsICpzY2FuX2NoKQogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHMgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqaHdfbW9kZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwogCXUxNiBhY3RpdmVfZHdlbGwgPSAwOwogCWludCBhZGRlZCwgaTsKIAotCWh3X21vZGUgPSBpd2wzOTQ1X2dldF9od19tb2RlKHByaXYsIHBoeW1vZGUpOwotCWlmICghaHdfbW9kZSkKKwlzYmFuZCA9IGl3bDM5NDVfZ2V0X2JhbmQocHJpdiwgYmFuZCk7CisJaWYgKCFzYmFuZCkKIAkJcmV0dXJuIDA7CiAKLQljaGFubmVscyA9IGh3X21vZGUtPmNoYW5uZWxzOworCWNoYW5uZWxzID0gc2JhbmQtPmNoYW5uZWxzOwogCi0JYWN0aXZlX2R3ZWxsID0gaXdsMzk0NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgcGh5bW9kZSk7Ci0JcGFzc2l2ZV9kd2VsbCA9IGl3bDM5NDVfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShwcml2LCBwaHltb2RlKTsKKwlhY3RpdmVfZHdlbGwgPSBpd2wzOTQ1X2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kKTsKKwlwYXNzaXZlX2R3ZWxsID0gaXdsMzk0NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwogCi0JZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgaHdfbW9kZS0+bnVtX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGNoYW5uZWxzW2ldLmNoYW4gPT0KKwlmb3IgKGkgPSAwLCBhZGRlZCA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisJCWlmIChjaGFubmVsc1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJY29udGludWU7CisKKwkJaWYgKGNoYW5uZWxzW2ldLmh3X3ZhbHVlID09CiAJCSAgICBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSkgewogCQkJaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCQkJCUlXTF9ERUJVR19TQ0FOCkBAIC01MjU5LDkgKzQ5NzksOSBAQAogCQl9IGVsc2UgaWYgKHByaXYtPm9ubHlfYWN0aXZlX2NoYW5uZWwpCiAJCQljb250aW51ZTsKIAotCQlzY2FuX2NoLT5jaGFubmVsID0gY2hhbm5lbHNbaV0uY2hhbjsKKwkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNoYW5uZWxzW2ldLmh3X3ZhbHVlOwogCi0JCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgcGh5bW9kZSwgc2Nhbl9jaC0+Y2hhbm5lbCk7CisJCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgc2Nhbl9jaC0+Y2hhbm5lbCk7CiAJCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgewogCQkJSVdMX0RFQlVHX1NDQU4oIkNoYW5uZWwgJWQgaXMgSU5WQUxJRCBmb3IgdGhpcyBTS1UuXG4iLAogCQkJCSAgICAgICBzY2FuX2NoLT5jaGFubmVsKTsKQEAgLTUyNjksNyArNDk4OSw3IEBACiAJCX0KIAogCQlpZiAoIWlzX2FjdGl2ZSB8fCBpc19jaGFubmVsX3Bhc3NpdmUoY2hfaW5mbykgfHwKLQkJICAgICEoY2hhbm5lbHNbaV0uZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU4pKQorCQkgICAgKGNoYW5uZWxzW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSkKIAkJCXNjYW5fY2gtPnR5cGUgPSAwOwkvKiBwYXNzaXZlICovCiAJCWVsc2UKIAkJCXNjYW5fY2gtPnR5cGUgPSAxOwkvKiBhY3RpdmUgKi8KQEAgLTUyODgsNyArNTAwOCw3IEBACiAJCS8qIHNjYW5fcHdyX2luZm8tPnRwYy5kc3BfYXR0ZW47ICovCiAKIAkJLypzY2FuX3B3cl9pbmZvLT50cGMudHhfZ2FpbjsgKi8KLQkJaWYgKHBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFBKQorCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJc2Nhbl9jaC0+dHBjLnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoMyA8PCAzKSkgfCAzOwogCQllbHNlIHsKIAkJCXNjYW5fY2gtPnRwYy50eF9nYWluID0gKCgxIDw8IDUpIHwgKDUgPDwgMykpOwpAQCAtNTMxMiw0MSArNTAzMiwyMyBAQAogCXJldHVybiBhZGRlZDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yZXNldF9jaGFubmVsX2ZsYWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgaSwgajsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqaHdfbW9kZSA9ICh2b2lkICopJnByaXYtPm1vZGVzW2ldOwotCQlmb3IgKGogPSAwOyBqIDwgaHdfbW9kZS0+bnVtX2NoYW5uZWxzOyBqKyspCi0JCQlod19tb2RlLT5jaGFubmVsc1tqXS5mbGFnID0gaHdfbW9kZS0+Y2hhbm5lbHNbal0udmFsOwotCX0KLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2h3X3JhdGVzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspIHsKLQkJcmF0ZXNbaV0ucmF0ZSA9IGl3bDM5NDVfcmF0ZXNbaV0uaWVlZSAqIDU7Ci0JCXJhdGVzW2ldLnZhbCA9IGk7IC8qIFJhdGUgc2NhbGluZyB3aWxsIHdvcmsgb24gaW5kZXhlcyAqLwotCQlyYXRlc1tpXS52YWwyID0gaTsKLQkJcmF0ZXNbaV0uZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TVVBQT1JURUQ7Ci0JCS8qIE9ubHkgT0ZETSBoYXZlIHRoZSBiaXRzLXBlci1zeW1ib2wgc2V0ICovCi0JCWlmICgoaSA8PSBJV0xfTEFTVF9PRkRNX1JBVEUpICYmIChpID49IElXTF9GSVJTVF9PRkRNX1JBVEUpKQotCQkJcmF0ZXNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVfT0ZETTsKLQkJZWxzZSB7CisJCXJhdGVzW2ldLmJpdHJhdGUgPSBpd2wzOTQ1X3JhdGVzW2ldLmllZWUgKiA1OworCQlyYXRlc1tpXS5od192YWx1ZSA9IGk7IC8qIFJhdGUgc2NhbGluZyB3aWxsIHdvcmsgb24gaW5kZXhlcyAqLworCQlyYXRlc1tpXS5od192YWx1ZV9zaG9ydCA9IGk7CisJCXJhdGVzW2ldLmZsYWdzID0gMDsKKwkJaWYgKChpID4gSVdMX0xBU1RfT0ZETV9SQVRFKSB8fCAoaSA8IElXTF9GSVJTVF9PRkRNX1JBVEUpKSB7CiAJCQkvKgotCQkJICogSWYgQ0NLIDFNIHRoZW4gc2V0IHJhdGUgZmxhZyB0byBDQ0sgZWxzZSBDQ0tfMgotCQkJICogd2hpY2ggaXMgQ0NLIHwgUFJFQU1CTEUyCisJCQkgKiBJZiBDQ0sgIT0gMU0gdGhlbiBzZXQgc2hvcnQgcHJlYW1ibGUgcmF0ZSBmbGFnLgogCQkJICovCiAJCQlyYXRlc1tpXS5mbGFncyB8PSAoaXdsMzk0NV9yYXRlc1tpXS5wbGNwID09IDEwKSA/Ci0JCQkJSUVFRTgwMjExX1JBVEVfQ0NLIDogSUVFRTgwMjExX1JBVEVfQ0NLXzI7CisJCQkJMCA6IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFOwogCQl9Ci0KLQkJLyogU2V0IHVwIHdoaWNoIG9uZXMgYXJlIGJhc2ljIHJhdGVzLi4uICovCi0JCWlmIChJV0xfQkFTSUNfUkFURVNfTUFTSyAmICgxIDw8IGkpKQotCQkJcmF0ZXNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVfQkFTSUM7CiAJfQogfQogCkBAIC01MzU2LDE0MyArNTA1OCwxMTcgQEAKIHN0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2dlb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZXM7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmdlb19jaDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzOwogCWludCBpID0gMDsKLQllbnVtIHsKLQkJQSA9IDAsCi0JCUIgPSAxLAotCQlHID0gMiwKLQl9OwotCWludCBtb2RlX2NvdW50ID0gMzsKIAotCWlmIChwcml2LT5tb2RlcykgeworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8CisJICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKIAkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7CiAJCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JbW9kZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUpICogbW9kZV9jb3VudCwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghbW9kZXMpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJY2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpICoKIAkJCSAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwotCWlmICghY2hhbm5lbHMpIHsKLQkJa2ZyZWUobW9kZXMpOworCWlmICghY2hhbm5lbHMpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCXJhdGVzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmF0ZSkgKiAoSVdMX01BWF9SQVRFUyArIDEpKSwKKwlyYXRlcyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JhdGUpICogKElXTF9SQVRFX0NPVU5UICsgMSkpLAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYXRlcykgewotCQlrZnJlZShtb2Rlcyk7CiAJCWtmcmVlKGNoYW5uZWxzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JLyogMCA9IDgwMi4xMWEKLQkgKiAxID0gODAyLjExYgotCSAqIDIgPSA4MDIuMTFnCi0JICovCi0KIAkvKiA1LjJHSHogY2hhbm5lbHMgc3RhcnQgYWZ0ZXIgdGhlIDIuNEdIeiBjaGFubmVscyAqLwotCW1vZGVzW0FdLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUE7Ci0JbW9kZXNbQV0uY2hhbm5lbHMgPSAmY2hhbm5lbHNbQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpXTsKLQltb2Rlc1tBXS5yYXRlcyA9ICZyYXRlc1s0XTsKLQltb2Rlc1tBXS5udW1fcmF0ZXMgPSA4OwkvKiBqdXN0IE9GRE0gKi8KLQltb2Rlc1tBXS5udW1fY2hhbm5lbHMgPSAwOworCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCXNiYW5kLT5jaGFubmVscyA9ICZjaGFubmVsc1tBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMSldOworCS8qIGp1c3QgT0ZETSAqLworCXNiYW5kLT5iaXRyYXRlcyA9ICZyYXRlc1tJV0xfRklSU1RfT0ZETV9SQVRFXTsKKwlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UIC0gSVdMX0ZJUlNUX09GRE1fUkFURTsKIAotCW1vZGVzW0JdLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7Ci0JbW9kZXNbQl0uY2hhbm5lbHMgPSBjaGFubmVsczsKLQltb2Rlc1tCXS5yYXRlcyA9IHJhdGVzOwotCW1vZGVzW0JdLm51bV9yYXRlcyA9IDQ7CS8qIGp1c3QgQ0NLICovCi0JbW9kZXNbQl0ubnVtX2NoYW5uZWxzID0gMDsKLQotCW1vZGVzW0ddLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUc7Ci0JbW9kZXNbR10uY2hhbm5lbHMgPSBjaGFubmVsczsKLQltb2Rlc1tHXS5yYXRlcyA9IHJhdGVzOwotCW1vZGVzW0ddLm51bV9yYXRlcyA9IDEyOwkvKiBPRkRNICYgQ0NLICovCi0JbW9kZXNbR10ubnVtX2NoYW5uZWxzID0gMDsKKwlzYmFuZCA9ICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwlzYmFuZC0+Y2hhbm5lbHMgPSBjaGFubmVsczsKKwkvKiBPRkRNICYgQ0NLICovCisJc2JhbmQtPmJpdHJhdGVzID0gcmF0ZXM7CisJc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVDsKIAogCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKIAlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7CiAKIAlpd2wzOTQ1X2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwogCi0JZm9yIChpID0gMCwgZ2VvX2NoID0gY2hhbm5lbHM7IGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyAgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgewogCQljaCA9ICZwcml2LT5jaGFubmVsX2luZm9baV07CiAKLQkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoKSkgewotCQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgJWQgWyVzR0h6XSBpcyByZXN0cmljdGVkIC0tICIKLQkJCQkgICAgInNraXBwaW5nLlxuIiwKLQkJCQkgICAgY2gtPmNoYW5uZWwsIGlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/Ci0JCQkJICAgICI1LjIiIDogIjIuNCIpOworCQkvKiBGSVhNRTogbWlnaHQgYmUgcmVtb3ZlZCBpZiBzY2FuIGlzIE9LKi8KKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoKSkKIAkJCWNvbnRpbnVlOwotCQl9CiAKIAkJaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoKSkKLQkJCWdlb19jaCA9ICZtb2Rlc1tBXS5jaGFubmVsc1ttb2Rlc1tBXS5udW1fY2hhbm5lbHMrK107Ci0JCWVsc2UgewotCQkJZ2VvX2NoID0gJm1vZGVzW0JdLmNoYW5uZWxzW21vZGVzW0JdLm51bV9jaGFubmVscysrXTsKLQkJCW1vZGVzW0ddLm51bV9jaGFubmVscysrOwotCQl9CisJCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJCWVsc2UKKwkJCXNiYW5kID0gICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKIAotCQlnZW9fY2gtPmZyZXEgPSBpZWVlODAyMTFjaGFuMm1oeihjaC0+Y2hhbm5lbCk7Ci0JCWdlb19jaC0+Y2hhbiA9IGNoLT5jaGFubmVsOwotCQlnZW9fY2gtPnBvd2VyX2xldmVsID0gY2gtPm1heF9wb3dlcl9hdmc7Ci0JCWdlb19jaC0+YW50ZW5uYV9tYXggPSAweGZmOworCQlnZW9fY2ggPSAmc2JhbmQtPmNoYW5uZWxzW3NiYW5kLT5uX2NoYW5uZWxzKytdOworCisJCWdlb19jaC0+Y2VudGVyX2ZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koY2gtPmNoYW5uZWwpOworCQlnZW9fY2gtPm1heF9wb3dlciA9IGNoLT5tYXhfcG93ZXJfYXZnOworCQlnZW9fY2gtPm1heF9hbnRlbm5hX2dhaW4gPSAweGZmOworCQlnZW9fY2gtPmh3X3ZhbHVlID0gY2gtPmNoYW5uZWw7CiAKIAkJaWYgKGlzX2NoYW5uZWxfdmFsaWQoY2gpKSB7Ci0JCQlnZW9fY2gtPmZsYWcgPSBJRUVFODAyMTFfQ0hBTl9XX1NDQU47Ci0JCQlpZiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykKLQkJCQlnZW9fY2gtPmZsYWcgfD0gSUVFRTgwMjExX0NIQU5fV19JQlNTOworCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpCisJCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JQlNTOwogCi0JCQlpZiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKQotCQkJCWdlb19jaC0+ZmxhZyB8PSBJRUVFODAyMTFfQ0hBTl9XX0FDVElWRV9TQ0FOOworCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkKKwkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKIAogCQkJaWYgKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKQotCQkJCWdlb19jaC0+ZmxhZyB8PSBJRUVFODAyMTFfQ0hBTl9XX1JBREFSX0RFVEVDVDsKKwkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1JBREFSOwogCiAJCQlpZiAoY2gtPm1heF9wb3dlcl9hdmcgPiBwcml2LT5tYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0KQogCQkJCXByaXYtPm1heF9jaGFubmVsX3R4cG93ZXJfbGltaXQgPQogCQkJCSAgICBjaC0+bWF4X3Bvd2VyX2F2ZzsKKwkJfSBlbHNlIHsKKwkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CiAJCX0KIAotCQlnZW9fY2gtPnZhbCA9IGdlb19jaC0+ZmxhZzsKKwkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLworCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOworCisJCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MCVYXG4iLAorCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAorCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAorCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/CisJCQkJInJlc3RyaWN0ZWQiIDogInZhbGlkIiwKKwkJCQkgZ2VvX2NoLT5mbGFncyk7CiAJfQogCi0JaWYgKChtb2Rlc1tBXS5udW1fY2hhbm5lbHMgPT0gMCkgJiYgcHJpdi0+aXNfYWJnKSB7CisJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCisJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewogCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCiAJCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKIAkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAogCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKLQkJcHJpdi0+aXNfYWJnID0gMDsKKwkJIHByaXYtPmNmZy0+c2t1ICY9IH5JV0xfU0tVX0E7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCSAgICAgICAiOiBUdW5hYmxlIGNoYW5uZWxzOiAlZCA4MDIuMTFiZywgJWQgODAyLjExYSBjaGFubmVsc1xuIiwKLQkgICAgICAgbW9kZXNbR10ubnVtX2NoYW5uZWxzLCBtb2Rlc1tBXS5udW1fY2hhbm5lbHMpOworCSAgICAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzLAorCSAgICAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKTsKIAotCS8qCi0JICogTk9URTogIFdlIHJlZ2lzdGVyIHRoZXNlIGluIHByZWZlcmVuY2Ugb2Ygb3JkZXIgLS0gdGhlCi0JICogc3RhY2sgZG9lc24ndCBjdXJyZW50bHkgKGFzIG9mIDcuMC42IC8gQXByIDI0ICcwNykgcGljawotCSAqIGEgcGh5bW9kZSBiYXNlZCBvbiByYXRlcyBvciBBUCBjYXBhYmlsaXRpZXMgYnV0IHNlZW1zIHRvCi0JICogY29uZmlndXJlIGl0IHB1cmVseSBvbiBpZiB0aGUgY2hhbm5lbCBiZWluZyBjb25maWd1cmVkCi0JICogaXMgc3VwcG9ydGVkIGJ5IGEgbW9kZSAtLSBhbmQgdGhlIGZpcnN0IG1hdGNoIGlzIHRha2VuCi0JICovCisJaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMpCisJCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPQorCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKIAotCWlmIChtb2Rlc1tHXS5udW1fY2hhbm5lbHMpCi0JCWllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUocHJpdi0+aHcsICZtb2Rlc1tHXSk7Ci0JaWYgKG1vZGVzW0JdLm51bV9jaGFubmVscykKLQkJaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShwcml2LT5odywgJm1vZGVzW0JdKTsKLQlpZiAobW9kZXNbQV0ubnVtX2NoYW5uZWxzKQotCQlpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKHByaXYtPmh3LCAmbW9kZXNbQV0pOwotCi0JcHJpdi0+bW9kZXMgPSBtb2RlczsKIAlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1MDMsNyArNTE3OSw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9nZW9zKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCiB7Ci0Ja2ZyZWUocHJpdi0+bW9kZXMpOwogCWtmcmVlKHByaXYtPmllZWVfY2hhbm5lbHMpOwogCWtmcmVlKHByaXYtPmllZWVfcmF0ZXMpOwogCWNsZWFyX2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwpAQCAtNTgzMCw3ICs1NTA1LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX3JhdzsKIAkvKiBmaXJtd2FyZSBmaWxlIG5hbWUgY29udGFpbnMgdUNvZGUvZHJpdmVyIGNvbXBhdGliaWxpdHkgdmVyc2lvbiAqLwotCWNvbnN0IGNoYXIgKm5hbWUgPSAiaXdsd2lmaS0zOTQ1IiBJV0wzOTQ1X1VDT0RFX0FQSSAiLnVjb2RlIjsKKwljb25zdCBjaGFyICpuYW1lID0gcHJpdi0+Y2ZnLT5md19uYW1lOwogCXU4ICpzcmM7CiAJc2l6ZV90IGxlbjsKIAl1MzIgdmVyLCBpbnN0X3NpemUsIGRhdGFfc2l6ZSwgaW5pdF9zaXplLCBpbml0X2RhdGFfc2l6ZSwgYm9vdF9zaXplOwpAQCAtNjE5OSwxNiArNTg3NCwxOSBAQAogCiAJLyogQXQgdGhpcyBwb2ludCwgdGhlIE5JQyBpcyBpbml0aWFsaXplZCBhbmQgb3BlcmF0aW9uYWwgKi8KIAlwcml2LT5ub3RpZl9taXNzZWRfYmVhY29ucyA9IDA7Ci0Jc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCiAJaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhwcml2KTsKIAorCWl3bDM5NDVfbGVkX3JlZ2lzdGVyKHByaXYpOworCiAJSVdMX0RFQlVHX0lORk8oIkFMSVZFIHByb2Nlc3NpbmcgY29tcGxldGUuXG4iKTsKKwlzZXRfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCiAJaWYgKHByaXYtPmVycm9yX3JlY292ZXJpbmcpCiAJCWl3bDM5NDVfZXJyb3JfcmVjb3ZlcnkocHJpdik7CiAKKwlpZWVlODAyMTFfbm90aWZ5X21hYyhwcml2LT5odywgSUVFRTgwMjExX05PVElGWV9SRV9BU1NPQyk7CiAJcmV0dXJuOwogCiAgcmVzdGFydDoKQEAgLTYyMzAsNiArNTkwOCw3IEBACiAJaWYgKCFleGl0X3BlbmRpbmcpCiAJCXNldF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKKwlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyKHByaXYpOwogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBVbmJsb2NrIGFueSB3YWl0aW5nIGNhbGxzICovCkBAIC02MjQ0LDcgKzU5MjMsMTAgQEAKIAlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CiAKIAkvKiB0ZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCiAJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhwcml2LT5odyk7CkBAIC02MjU2LDYgKzU5MzgsOCBAQAogCQkJCQlTVEFUVVNfUkZfS0lMTF9IVyB8CiAJCQkgICAgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJCVNUQVRVU19SRl9LSUxMX1NXIHwKKwkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpIDw8CisJCQkJCVNUQVRVU19HRU9fQ09ORklHVVJFRCB8CiAJCQkgICAgICAgdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJCVNUQVRVU19JTl9TVVNQRU5EOwogCQlnb3RvIGV4aXQ7CkBAIC02MjY3LDYgKzU5NTEsOCBAQAogCQkJCVNUQVRVU19SRl9LSUxMX0hXIHwKIAkJCXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSA8PAogCQkJCVNUQVRVU19SRl9LSUxMX1NXIHwKKwkJCXRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgPDwKKwkJCQlTVEFUVVNfR0VPX0NPTkZJR1VSRUQgfAogCQkJdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJU1RBVFVTX0lOX1NVU1BFTkQgfAogCQkJdGVzdF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKSA8PApAQCAtNjUwOCw3ICs2MTk0LDcgQEAKIAlzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCAqc2NhbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSBOVUxMOwogCXU4IGRpcmVjdF9tYXNrOwotCWludCBwaHltb2RlOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCkBAIC02NjQwLDEzICs2MzI2LDEzIEBACiAJCXNjYW4tPmZsYWdzID0gUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOwogCQlzY2FuLT50eF9jbWQucmF0ZSA9IElXTF9SQVRFXzFNX1BMQ1A7CiAJCXNjYW4tPmdvb2RfQ1JDX3RoID0gMDsKLQkJcGh5bW9kZSA9IE1PREVfSUVFRTgwMjExRzsKKwkJYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJCWJyZWFrOwogCiAJY2FzZSAxOgogCQlzY2FuLT50eF9jbWQucmF0ZSA9IElXTF9SQVRFXzZNX1BMQ1A7CiAJCXNjYW4tPmdvb2RfQ1JDX3RoID0gSVdMX0dPT0RfQ1JDX1RIOwotCQlwaHltb2RlID0gTU9ERV9JRUVFODAyMTFBOworCQliYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNjY2MCwxOCArNjM0NiwyMyBAQAogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX01OVFIpCiAJCXNjYW4tPmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLOwogCi0JaWYgKGRpcmVjdF9tYXNrKQorCWlmIChkaXJlY3RfbWFzaykgewogCQlJV0xfREVCVUdfU0NBTgogCQkgICAgKCJJbml0aWF0aW5nIGRpcmVjdCBzY2FuIGZvciAlcy5cbiIsCiAJCSAgICAgaXdsMzk0NV9lc2NhcGVfZXNzaWQocHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbikpOwotCWVsc2UKKwkJc2Nhbi0+Y2hhbm5lbF9jb3VudCA9CisJCQlpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbigKKwkJCQlwcml2LCBiYW5kLCAxLCAvKiBhY3RpdmUgKi8KKwkJCQlkaXJlY3RfbWFzaywKKwkJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7CisJfSBlbHNlIHsKIAkJSVdMX0RFQlVHX1NDQU4oIkluaXRpYXRpbmcgaW5kaXJlY3Qgc2Nhbi5cbiIpOwotCi0Jc2Nhbi0+Y2hhbm5lbF9jb3VudCA9Ci0JCWl3bDM5NDVfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKAotCQkJcHJpdiwgcGh5bW9kZSwgMSwgLyogYWN0aXZlICovCi0JCQlkaXJlY3RfbWFzaywKLQkJCSh2b2lkICopJnNjYW4tPmRhdGFbbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbildKTsKKwkJc2Nhbi0+Y2hhbm5lbF9jb3VudCA9CisJCQlpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbigKKwkJCQlwcml2LCBiYW5kLCAwLCAvKiBwYXNzaXZlICovCisJCQkJZGlyZWN0X21hc2ssCisJCQkJKHZvaWQgKikmc2Nhbi0+ZGF0YVtsZTE2X3RvX2NwdShzY2FuLT50eF9jbWQubGVuKV0pOworCX0KIAogCWNtZC5sZW4gKz0gbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbikgKwogCSAgICBzY2FuLT5jaGFubmVsX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCk7CkBAIC02ODE0LDcgKzY1MDUsNyBAQAogCQlpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIDAsIDApOwogCQlpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIHByaXYtPmJzc2lkLCAwLCAwKTsKIAkJaXdsMzk0NV9zeW5jX3N0YShwcml2LCBJV0xfU1RBX0lELAotCQkJCSAocHJpdi0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpPworCQkJCSAocHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/CiAJCQkJIElXTF9SQVRFXzZNX1BMQ1AgOiBJV0xfUkFURV8xTV9QTENQLAogCQkJCSBDTURfQVNZTkMpOwogCQlpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdChwcml2LT5odywgSVdMX1NUQV9JRCk7CkBAIC02ODMwLDkgKzY1MjEsOCBAQAogCiAJaXdsMzk0NV9zZXF1ZW5jZV9yZXNldChwcml2KTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1FPUwogCWl3bDM5NDVfYWN0aXZhdGVfcW9zKHByaXYsIDApOwotI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X1FPUyAqLworCiAJLyogd2UgaGF2ZSBqdXN0IGFzc29jaWF0ZWQsIGRvbid0IHN0YXJ0IHNjYW4gdG9vIGVhcmx5ICovCiAJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTjsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKQEAgLTcwMDksNyArNjY5OSw3IEBACiAJfQogCiAJSVdMX0RFQlVHX1RYKCJkZXYtPnhtaXQoJWQgYnl0ZXMpIGF0IHJhdGUgMHglMDJ4XG4iLCBza2ItPmxlbiwKLQkJICAgICBjdGwtPnR4X3JhdGUpOworCQkgICAgIGN0bC0+dHhfcmF0ZS0+Yml0cmF0ZSk7CiAKIAlpZiAoaXdsMzk0NV90eF9za2IocHJpdiwgc2tiLCBjdGwpKQogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtNzA2OCw3ICs2NzU4LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsIGNvbmYtPmNoYW5uZWwpOworCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXIgdG8gY2hhbm5lbCAlZFxuIiwgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCiAJcHJpdi0+YWRkX3JhZGlvdGFwID0gISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9SQURJT1RBUCk7CiAKQEAgLTcwODgsMTkgKzY3NzgsMjAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNvbmYtPnBoeW1vZGUsIGNvbmYtPmNoYW5uZWwpOworCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwKKwkJCQkJICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgewogCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBbJWRdIGlzIElOVkFMSUQgZm9yIHRoaXMgU0tVLlxuIiwKLQkJCSAgICAgICBjb25mLT5jaGFubmVsLCBjb25mLT5waHltb2RlKTsKKwkJCSAgICAgICBjb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CiAJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBjb25mLT5waHltb2RlLCBjb25mLT5jaGFubmVsKTsKKwlpd2wzOTQ1X3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCi0JaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgY29uZi0+cGh5bW9kZSk7CisJaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CiAKIAkvKiBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmF0ZXMgYW5kIHJhdGUgbWFzayBjYW4gYmUgZGlmZmVyZW50CiAJICogZm9yIGVhY2ggcGh5bW9kZTsgc2luY2UgdGhlIHBoeW1vZGUgbWF5IGhhdmUgY2hhbmdlZCwgcmVzZXQKQEAgLTcyMTQsNiArNjkwNSwxMiBAQAogCWlmIChjb25mID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCisJaWYgKHByaXYtPnZpZiAhPSB2aWYpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogWFhYOiB0aGlzIE1VU1QgdXNlIGNvbmYtPm1hY19hZGRyICovCiAKIAlpZiAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApICYmCkBAIC03MjM4LDE3ICs2OTM1LDYgQEAKIAlpZiAodW5saWtlbHkodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgJiYKIAkgICAgIShwcml2LT5ody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9fUFJPQkVfRklMVEVSSU5HKSkgewogICovCi0JaWYgKHVubGlrZWx5KHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBzY2FubmluZ1xuIik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocHJpdi0+dmlmICE9IHZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm4gMDsKLQl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkgewogCQlpZiAoIWNvbmYtPmJzc2lkKSB7CkBAIC03NDc2LDEwICs3MTYyLDggQEAKIAkJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1FPUwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHE7Ci0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfUU9TICovCiAKIAlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKIApAQCAtNzQ5Myw3ICs3MTc3LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfUU9TCiAJaWYgKCFwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlKSB7CiAJCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOwogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcW9zIG5vdCBlbmFibGVkXG4iKTsKQEAgLTc1MDcsNyArNzE5MCw3IEBACiAJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmN3X21heCA9IGNwdV90b19sZTE2KHBhcmFtcy0+Y3dfbWF4KTsKIAlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbcV0uYWlmc24gPSBwYXJhbXMtPmFpZnM7CiAJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmVkY2FfdHhvcCA9Ci0JCQljcHVfdG9fbGUxNigocGFyYW1zLT5idXJzdF90aW1lICogMTAwKSk7CisJCQljcHVfdG9fbGUxNigocGFyYW1zLT50eG9wICogMzIpKTsKIAogCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1txXS5yZXNlcnZlZDEgPSAwOwogCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAxOwpAQCAtNzUyMiw4ICs3MjA1LDYgQEAKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0jZW5kaWYgLypDT05GSUdfSVdMMzk0NV9RT1MgKi8KLQogCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwogCXJldHVybiAwOwogfQpAQCAtNzU4OCw5ICs3MjY5LDggQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9RT1MKIAlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKLSNlbmRpZgorCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cG9zdF9hc3NvY2lhdGUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTc2NzgsOSArNzM1OCw3IEBACiAJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfUU9TCiAJaXdsMzk0NV9yZXNldF9xb3MocHJpdik7Ci0jZW5kaWYKIAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cG9zdF9hc3NvY2lhdGUud29yayk7CiAKQEAgLTc4ODEsNjUgKzc1NTksNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGZpbHRlcl9mbGFncywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmlsdGVyX2ZsYWdzLAogCQkgICBzdG9yZV9maWx0ZXJfZmxhZ3MpOwogCi1zdGF0aWMgc3NpemVfdCBzaG93X3R1bmUoc3RydWN0IGRldmljZSAqZCwKLQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDRYXG4iLAotCQkgICAgICAgKHByaXYtPnBoeW1vZGUgPDwgOCkgfAotCQkJbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldF9mbGFnc19mb3JfcGh5bW9kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBwaHltb2RlKTsKLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfdHVuZShzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqcCA9IChjaGFyICopYnVmOwotCXUxNiB0dW5lID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDApOwotCXU4IHBoeW1vZGUgPSAodHVuZSA+PiA4KSAmIDB4ZmY7Ci0JdTE2IGNoYW5uZWwgPSB0dW5lICYgMHhmZjsKLQotCUlXTF9ERUJVR19JTkZPKCJUdW5lIHJlcXVlc3QgdG86JWQgY2hhbm5lbDolZFxuIiwgcGh5bW9kZSwgY2hhbm5lbCk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKChsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkgIT0gY2hhbm5lbCkgfHwKLQkgICAgKHByaXYtPnBoeW1vZGUgIT0gcGh5bW9kZSkpIHsKLQkJY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgcGh5bW9kZSwgY2hhbm5lbCk7Ci0JCWlmICghY2hfaW5mbykgewotCQkJSVdMX1dBUk5JTkcoIlJlcXVlc3RlZCBpbnZhbGlkIHBoeW1vZGUvY2hhbm5lbCAiCi0JCQkJICAgICJjb21iaW5hdGlvbjogJWQgJWRcbiIsIHBoeW1vZGUsIGNoYW5uZWwpOwotCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qIENhbmNlbCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2NhbnMuLi4gKi8KLQkJaWYgKGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwotCQllbHNlIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJDb21taXR0aW5nIHBoeW1vZGUgYW5kICIKLQkJCQkgICAgICAgInJ4b24uY2hhbm5lbCA9ICVkICVkXG4iLAotCQkJCSAgICAgICBwaHltb2RlLCBjaGFubmVsKTsKLQotCQkJaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIHBoeW1vZGUsIGNoYW5uZWwpOwotCQkJaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgcGh5bW9kZSk7Ci0KLQkJCWl3bDM5NDVfc2V0X3JhdGUocHJpdik7Ci0JCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIodHVuZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdHVuZSwgc3RvcmVfdHVuZSk7Ci0KICNpZmRlZiBDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogCiBzdGF0aWMgc3NpemVfdCBzaG93X21lYXN1cmVtZW50KHN0cnVjdCBkZXZpY2UgKmQsCkBAIC04MDEzLDMxICs3NjMyLDYgQEAKIAkJICAgc2hvd19tZWFzdXJlbWVudCwgc3RvcmVfbWVhc3VyZW1lbnQpOwogI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UICovCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkLAotCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQotCQlpID0gcHJpdi0+c3RhdGlvbnNbSVdMX0FQX0lEXS5jdXJyZW50X3JhdGUucy5yYXRlOwotCWVsc2UKLQkJaSA9IHByaXYtPnN0YXRpb25zW0lXTF9TVEFfSURdLmN1cnJlbnRfcmF0ZS5zLnJhdGU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQotCWkgPSBpd2wzOTQ1X3JhdGVfaW5kZXhfZnJvbV9wbGNwKGkpOwotCWlmIChpID09IC0xKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkJXNcbiIsCi0JCSAgICAgICAoaXdsMzk0NV9yYXRlc1tpXS5pZWVlID4+IDEpLAotCQkgICAgICAgKGl3bDM5NDVfcmF0ZXNbaV0uaWVlZSAmIDB4MSkgPyAiLjUiIDogIiIpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocmF0ZSwgU19JUlVTUiwgc2hvd19yYXRlLCBOVUxMKTsKLQogc3RhdGljIHNzaXplX3Qgc3RvcmVfcmV0cnlfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtODE1NCw3MyArNzc0OCw4IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgbGVuID0gMCwgaTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKmh3X21vZGUgPSBOVUxMOwotCWludCBjb3VudCA9IDA7Ci0KLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHkocHJpdikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JaHdfbW9kZSA9IGl3bDM5NDVfZ2V0X2h3X21vZGUocHJpdiwgTU9ERV9JRUVFODAyMTFHKTsKLQlpZiAoIWh3X21vZGUpCi0JCWh3X21vZGUgPSBpd2wzOTQ1X2dldF9od19tb2RlKHByaXYsIE1PREVfSUVFRTgwMjExQik7Ci0JaWYgKGh3X21vZGUpIHsKLQkJY2hhbm5lbHMgPSBod19tb2RlLT5jaGFubmVsczsKLQkJY291bnQgPSBod19tb2RlLT5udW1fY2hhbm5lbHM7Ci0JfQotCi0JbGVuICs9Ci0JICAgIHNwcmludGYoJmJ1ZltsZW5dLAotCQkgICAgIkRpc3BsYXlpbmcgJWQgY2hhbm5lbHMgaW4gMi40R0h6IGJhbmQgIgotCQkgICAgIig4MDIuMTFiZyk6XG4iLCBjb3VudCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJWQ6ICVkZEJtOiBCU1MlcyVzLCAlcy5cbiIsCi0JCQkgICAgICAgY2hhbm5lbHNbaV0uY2hhbiwKLQkJCSAgICAgICBjaGFubmVsc1tpXS5wb3dlcl9sZXZlbCwKLQkJCSAgICAgICBjaGFubmVsc1tpXS4KLQkJCSAgICAgICBmbGFnICYgSUVFRTgwMjExX0NIQU5fV19SQURBUl9ERVRFQ1QgPwotCQkJICAgICAgICIgKElFRUUgODAyLjExaCByZXF1aXJlZCkiIDogIiIsCi0JCQkgICAgICAgKCEoY2hhbm5lbHNbaV0uZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfSUJTUykKLQkJCQl8fCAoY2hhbm5lbHNbaV0uCi0JCQkJICAgIGZsYWcgJgotCQkJCSAgICBJRUVFODAyMTFfQ0hBTl9XX1JBREFSX0RFVEVDVCkpID8gIiIgOgotCQkJICAgICAgICIsIElCU1MiLAotCQkJICAgICAgIGNoYW5uZWxzW2ldLgotCQkJICAgICAgIGZsYWcgJiBJRUVFODAyMTFfQ0hBTl9XX0FDVElWRV9TQ0FOID8KLQkJCSAgICAgICAiYWN0aXZlL3Bhc3NpdmUiIDogInBhc3NpdmUgb25seSIpOwotCi0JaHdfbW9kZSA9IGl3bDM5NDVfZ2V0X2h3X21vZGUocHJpdiwgTU9ERV9JRUVFODAyMTFBKTsKLQlpZiAoaHdfbW9kZSkgewotCQljaGFubmVscyA9IGh3X21vZGUtPmNoYW5uZWxzOwotCQljb3VudCA9IGh3X21vZGUtPm51bV9jaGFubmVsczsKLQl9IGVsc2UgewotCQljaGFubmVscyA9IE5VTEw7Ci0JCWNvdW50ID0gMDsKLQl9Ci0KLQlsZW4gKz0gc3ByaW50ZigmYnVmW2xlbl0sICJEaXNwbGF5aW5nICVkIGNoYW5uZWxzIGluIDUuMkdIeiBiYW5kICIKLQkJICAgICAgICIoODAyLjExYSk6XG4iLCBjb3VudCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJWQ6ICVkZEJtOiBCU1MlcyVzLCAlcy5cbiIsCi0JCQkgICAgICAgY2hhbm5lbHNbaV0uY2hhbiwKLQkJCSAgICAgICBjaGFubmVsc1tpXS5wb3dlcl9sZXZlbCwKLQkJCSAgICAgICBjaGFubmVsc1tpXS4KLQkJCSAgICAgICBmbGFnICYgSUVFRTgwMjExX0NIQU5fV19SQURBUl9ERVRFQ1QgPwotCQkJICAgICAgICIgKElFRUUgODAyLjExaCByZXF1aXJlZCkiIDogIiIsCi0JCQkgICAgICAgKCEoY2hhbm5lbHNbaV0uZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfSUJTUykKLQkJCQl8fCAoY2hhbm5lbHNbaV0uCi0JCQkJICAgIGZsYWcgJgotCQkJCSAgICBJRUVFODAyMTFfQ0hBTl9XX1JBREFSX0RFVEVDVCkpID8gIiIgOgotCQkJICAgICAgICIsIElCU1MiLAotCQkJICAgICAgIGNoYW5uZWxzW2ldLgotCQkJICAgICAgIGZsYWcgJiBJRUVFODAyMTFfQ0hBTl9XX0FDVElWRV9TQ0FOID8KLQkJCSAgICAgICAiYWN0aXZlL3Bhc3NpdmUiIDogInBhc3NpdmUgb25seSIpOwotCi0JcmV0dXJuIGxlbjsKKwkvKiBhbGwgdGhpcyBzaGl0IGRvZXNuJ3QgYmVsb25nIGludG8gc3lzZnMgYW55d2F5ICovCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjaGFubmVscywgU19JUlVTUiwgc2hvd19jaGFubmVscywgTlVMTCk7CkBAIC04MzkzLDE0ICs3OTIyLDEyIEBACiAJJmRldl9hdHRyX21lYXN1cmVtZW50LmF0dHIsCiAjZW5kaWYKIAkmZGV2X2F0dHJfcG93ZXJfbGV2ZWwuYXR0ciwKLQkmZGV2X2F0dHJfcmF0ZS5hdHRyLAogCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3JmX2tpbGwuYXR0ciwKIAkmZGV2X2F0dHJfcnNfd2luZG93LmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX3RlbXBlcmF0dXJlLmF0dHIsCi0JJmRldl9hdHRyX3R1bmUuYXR0ciwKIAkmZGV2X2F0dHJfdHhfcG93ZXIuYXR0ciwKIAogCU5VTEwKQEAgLTg0MzMsMTAgKzc5NjAsMTEgQEAKIHN0YXRpYyBpbnQgaXdsMzk0NV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGVyciA9IDA7Ci0JdTMyIHBjaV9pZDsKIAlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2OwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBpd2xfMzk0NV9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsXzM5NDVfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOwogCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAkvKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucwpAQCAtODQ0NiwxMCArNzk3NCwxMCBAQAogCQlpd2wzOTQ1X2h3X29wcy5od19zY2FuID0gTlVMTDsKIAl9CiAKLQlpZiAoKGl3bDM5NDVfcGFyYW1fcXVldWVzX251bSA+IElXTF9NQVhfTlVNX1FVRVVFUykgfHwKKwlpZiAoKGl3bDM5NDVfcGFyYW1fcXVldWVzX251bSA+IElXTDM5X01BWF9OVU1fUVVFVUVTKSB8fAogCSAgICAoaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewogCQlJV0xfRVJST1IoImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJICBJV0xfTUlOX05VTV9RVUVVRVMsIElXTF9NQVhfTlVNX1FVRVVFUyk7CisJCQkgIElXTF9NSU5fTlVNX1FVRVVFUywgSVdMMzlfTUFYX05VTV9RVUVVRVMpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC04NDcxLDYgKzc5OTksNyBAQAogCXByaXYtPmh3ID0gaHc7CiAKIAlwcml2LT5wY2lfZGV2ID0gcGRldjsKKwlwcml2LT5jZmcgPSBjZmc7CiAKIAkvKiBTZWxlY3QgYW50ZW5uYSAobWF5IGJlIGhlbHBmdWwgaWYgb25seSBvbmUgYW50ZW5uYSBpcyBjb25uZWN0ZWQpICovCiAJcHJpdi0+YW50ZW5uYSA9IChlbnVtIGl3bDM5NDVfYW50ZW5uYSlpd2wzOTQ1X3BhcmFtX2FudGVubmE7CkBAIC04NTIxLDcgKzgwNTAsNyBAQAogCXByaXYtPmRhdGFfcmV0cnlfbGltaXQgPSAtMTsKIAlwcml2LT5pZWVlX2NoYW5uZWxzID0gTlVMTDsKIAlwcml2LT5pZWVlX3JhdGVzID0gTlVMTDsKLQlwcml2LT5waHltb2RlID0gLTE7CisJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAKIAllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKIAlpZiAoIWVycikKQEAgLTg1NjAsMzIgKzgwODksOCBAQAogCiAJcHJpdi0+aXdfbW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX1NUQTsKIAotCXBjaV9pZCA9Ci0JICAgIChwcml2LT5wY2lfZGV2LT5kZXZpY2UgPDwgMTYpIHwgcHJpdi0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZTsKLQotCXN3aXRjaCAocGNpX2lkKSB7Ci0JY2FzZSAweDQyMjIxMDA1OgkvKiAweDQyMjIgMHg4MDg2IDB4MTAwNSBpcyBCRyBTS1UgKi8KLQljYXNlIDB4NDIyMjEwMzQ6CS8qIDB4NDIyMiAweDgwODYgMHgxMDM0IGlzIEJHIFNLVSAqLwotCWNhc2UgMHg0MjI3MTAxNDoJLyogMHg0MjI3IDB4ODA4NiAweDEwMTQgaXMgQkcgU0tVICovCi0JY2FzZSAweDQyMjIxMDQ0OgkvKiAweDQyMjIgMHg4MDg2IDB4MTA0NCBpcyBCRyBTS1UgKi8KLQkJcHJpdi0+aXNfYWJnID0gMDsKLQkJYnJlYWs7Ci0KLQkvKgotCSAqIFJlc3QgYXJlIGFzc3VtZWQgQUJHIFNLVSAtLSBpZiB0aGlzIGlzIG5vdCB0aGUKLQkgKiBjYXNlIHRoZW4gdGhlIGNhcmQgd2lsbCBnZXQgdGhlIHdyb25nICdEZXRlY3RlZCcKLQkgKiBsaW5lIGluIHRoZSBrZXJuZWwgbG9nIGhvd2V2ZXIgdGhlIGNvZGUgdGhhdAotCSAqIGluaXRpYWxpemVzIHRoZSBHRU8gdGFibGUgd2lsbCBkZXRlY3Qgbm8gQS1iYW5kCi0JICogY2hhbm5lbHMgYW5kIHJlbW92ZSB0aGUgaXNfYWJnIG1hc2suCi0JICovCi0JZGVmYXVsdDoKLQkJcHJpdi0+aXNfYWJnID0gMTsKLQkJYnJlYWs7Ci0JfQotCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCSAgICAgICAiOiBEZXRlY3RlZCBJbnRlbCBQUk8vV2lyZWxlc3MgMzk0NSVzQkcgTmV0d29yayBDb25uZWN0aW9uXG4iLAotCSAgICAgICBwcml2LT5pc19hYmcgPyAiQSIgOiAiIik7CisJCSI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlc1xuIiwgcHJpdi0+Y2ZnLT5uYW1lKTsKIAogCS8qIERldmljZS1zcGVjaWZpYyBzZXR1cCAqLwogCWlmIChpd2wzOTQ1X2h3X3NldF9od19zZXR0aW5nKHByaXYpKSB7CkBAIC04NTkzLDcgKzgwOTgsNiBAQAogCQlnb3RvIG91dF9pb3VubWFwOwogCX0KIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1FPUwogCWlmIChpd2wzOTQ1X3BhcmFtX3Fvc19lbmFibGUpCiAJCXByaXYtPnFvc19kYXRhLnFvc19lbmFibGUgPSAxOwogCkBAIC04NjAxLDkgKzgxMDUsOCBAQAogCiAJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7CiAJcHJpdi0+cW9zX2RhdGEucW9zX2NhcC52YWwgPSAwOwotI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X1FPUyAqLwogCi0JaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIE1PREVfSUVFRTgwMjExRywgNik7CisJaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIElFRUU4MDIxMV9CQU5EXzJHSFosIDYpOwogCWl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOwogCkBAIC04NjEyLDcgKzgxMTUsOSBAQAogCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfQUM7CiAJcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2wzOTQ1X2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewpAQCAtODY1NCw5ICs4MTU5LDcgQEAKIAkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgZ2VvcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOwogCQlnb3RvIG91dF9mcmVlX2NoYW5uZWxfbWFwOwogCX0KLQlpd2wzOTQ1X3Jlc2V0X2NoYW5uZWxfZmxhZyhwcml2KTsKIAotCWl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHByaXYtPmh3KTsKIAllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOwogCWlmIChlcnIpIHsKIAkJSVdMX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKGVycm9yICVkKVxuIiwgZXJyKTsKQEAgLTg2OTUsMTEgKzgxOTgsMTIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXdsMzk0NV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7CiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcHJpdikKIAkJcmV0dXJuOwpAQCAtODcxMCw2ICs4MjE0LDE1IEBACiAKIAlpd2wzOTQ1X2Rvd24ocHJpdik7CiAKKwkvKiBtYWtlIHN1cmUgd2UgZmx1c2ggYW55IHBlbmRpbmcgaXJxIG9yCisJICogdGFza2xldCBmb3IgdGhlIGRyaXZlcgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaXdsX3N5bmNocm9uaXplX2lycShwcml2KTsKKwogCS8qIEZyZWUgTUFDIGhhc2ggbGlzdCBmb3IgQURIT0MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSVdMX0lCU1NfTUFDX0hBU0hfU0laRTsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmcHJpdi0+aWJzc19tYWNfaGFzaFtpXSkgewpAQCAtODczMSw3ICs4MjQ0LDYgQEAKIAogCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKSB7CiAJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHByaXYtPmh3KTsKLQkJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3Rlcihwcml2LT5odyk7CiAJfQogCiAJLypuZXRpZl9zdG9wX3F1ZXVlKGRldik7ICovCkBAIC04ODEyLDIxICs4MzI0LDM1IEBACiAJaW50IHJldDsKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgRFJWX0RFU0NSSVBUSU9OICIsICIgRFJWX1ZFUlNJT04gIlxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9DT1BZUklHSFQgIlxuIik7CisKKwlyZXQgPSBpd2wzOTQ1X3JhdGVfY29udHJvbF9yZWdpc3RlcigpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXdsMzk0NV9kcml2ZXIpOwogCWlmIChyZXQpIHsKIAkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBQQ0kgbW9kdWxlXG4iKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJvcl9yZWdpc3RlcjsKIAl9CiAjaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKIAlyZXQgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJml3bDM5NDVfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX2RlYnVnX2xldmVsKTsKIAlpZiAocmV0KSB7CiAJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBkcml2ZXIgc3lzZnMgZmlsZVxuIik7Ci0JCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXdsMzk0NV9kcml2ZXIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycm9yX2RlYnVnOwogCX0KICNlbmRpZgogCiAJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCitlcnJvcl9kZWJ1ZzoKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKKyNlbmRpZgorZXJyb3JfcmVnaXN0ZXI6CisJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpd2wzOTQ1X2V4aXQodm9pZCkKQEAgLTg4MzUsNiArODM2MSw3IEBACiAJZHJpdmVyX3JlbW92ZV9maWxlKCZpd2wzOTQ1X2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7CiAjZW5kaWYKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKKwlpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiB9CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChhbnRlbm5hLCBpd2wzOTQ1X3BhcmFtX2FudGVubmEsIGludCwgMDQ0NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDQ5NjUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2w0OTY1LWJhc2UuYwppbmRleCBmNDIzMjQxLi5kN2UyMzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDQ5NjUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsNDk2NS1iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTQ1LDE0ICs0NSwxNCBAQAogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCiAjaW5jbHVkZSAiaXdsLTQ5NjUuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLXUzMiBpd2w0OTY1X2RlYnVnX2xldmVsOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDQ5NjVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjEsMTYgKzYxLDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBtb2R1bGUgcGFyYW1ldGVycyAqLwotc3RhdGljIGludCBpd2w0OTY1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbjsgLyogZGVmOiAwID0gdXNlIDQ5NjUncyBoL3cgc2NhbiAqLwotc3RhdGljIGludCBpd2w0OTY1X3BhcmFtX2RlYnVnOyAgICAvKiBkZWY6IDAgPSBtaW5pbWFsIGRlYnVnIGxvZyBtZXNzYWdlcyAqLwotc3RhdGljIGludCBpd2w0OTY1X3BhcmFtX2Rpc2FibGU7ICAvKiBkZWY6IGVuYWJsZSByYWRpbyAqLwotc3RhdGljIGludCBpd2w0OTY1X3BhcmFtX2FudGVubmE7ICAvKiBkZWY6IDAgPSBib3RoIGFudGVubmFzICh1c2UgZGl2ZXJzaXR5KSAqLwotaW50IGl3bDQ5NjVfcGFyYW1faHdjcnlwdG87ICAgICAgICAvKiBkZWY6IHVzaW5nIHNvZnR3YXJlIGVuY3J5cHRpb24gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9wYXJhbV9xb3NfZW5hYmxlID0gMTsgLyogZGVmOiAxID0gdXNlIHF1YWxpdHkgb2Ygc2VydmljZSAqLwotaW50IGl3bDQ5NjVfcGFyYW1fcXVldWVzX251bSA9IElXTF9NQVhfTlVNX1FVRVVFUzsgLyogZGVmOiAxNiBUeCBxdWV1ZXMgKi8KLWludCBpd2w0OTY1X3BhcmFtX2Ftc2R1X3NpemVfOEs7ICAgLyogZGVmOiBlbmFibGUgOEsgYW1zZHUgc2l6ZSAqLwotCiAvKgogICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgogICogTk9URTogRFJWX05BTUUgaXMgZGVmaW5lZCBpbiBpd2x3aWZpLmggZm9yIHVzZSBieSBpd2wtZGVidWcuaCBhbmQgcHJpbnRrCkBAIC03OCw3ICs2OCw3IEBACiAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBXaXJlbGVzcyBXaUZpIExpbmsgNDk2NUFHTiBkcml2ZXIgZm9yIExpbnV4IgogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogI2RlZmluZSBWRCAiZCIKICNlbHNlCiAjZGVmaW5lIFZECkBAIC05MCwxNSArODAsOCBAQAogI2RlZmluZSBWUwogI2VuZGlmCiAKLSNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICIxLjIuMjNrIiBWRCBWUwotI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA3IEludGVsIENvcnBvcmF0aW9uIgotI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgSVdMV0lGSV9WRVJTSU9OCisjZGVmaW5lIERSVl9WRVJTSU9OICAgICBJV0xXSUZJX1ZFUlNJT04gVkQgVlMKIAotLyogQ2hhbmdlIGZpcm13YXJlIGZpbGUgbmFtZSwgdXNpbmcgIi0iIGFuZCBpbmNyZW1lbnRpbmcgbnVtYmVyLAotICogICAqb25seSogd2hlbiB1Q29kZSBpbnRlcmZhY2Ugb3IgYXJjaGl0ZWN0dXJlIGNoYW5nZXMgc28gdGhhdCBpdAotICogICBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgZHJpdmVycy4KLSAqIFRoaXMgbnVtYmVyIHdpbGwgYWxzbyBhcHBlYXIgaW4gPDwgOCBwb3NpdGlvbiBvZiAxc3QgZHdvcmQgb2YgdUNvZGUgZmlsZSAqLwotI2RlZmluZSBJV0w0OTY1X1VDT0RFX0FQSSAiLTEiCiAKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwpAQCAtMTE1LDE2ICs5OCwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICppd2w0OTY1X2dldF9od19tb2RlKAotCQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgbW9kZSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICppd2w0OTY1X2dldF9od19tb2RlKAorCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWlmIChwcml2LT5tb2Rlc1tpXS5tb2RlID09IG1vZGUpCi0JCQlyZXR1cm4gJnByaXYtPm1vZGVzW2ldOwotCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHByaXYtPmh3LT53aXBoeS0+YmFuZHNbYmFuZF07CiB9CiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9pc19lbXB0eV9lc3NpZChjb25zdCBjaGFyICplc3NpZCwgaW50IGVzc2lkX2xlbikKQEAgLTE2NywxNyArMTQ0LDYgQEAKIAlyZXR1cm4gZXNjYXBlZDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9wcmludF9oZXhfZHVtcChpbnQgbGV2ZWwsIHZvaWQgKnAsIHUzMiBsZW4pCi17Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLQlpZiAoIShpd2w0OTY1X2RlYnVnX2xldmVsICYgbGV2ZWwpKQotCQlyZXR1cm47Ci0KLQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiaXdsIGRhdGE6ICIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCi0JCQlwLCBsZW4sIDEpOwotI2VuZGlmCi19Ci0KIC8qKioqKioqKioqKioqKiogRE1BLVFVRVVFLUdFTkVSQUwtRlVOQ1RJT05TICAqKioqKgogICogRE1BIHNlcnZpY2VzCiAgKgpAQCAtMjA1LDcgKzE3MSw3IEBACiAgKiBTZWUgbW9yZSBkZXRhaWxlZCBpbmZvIGluIGl3bC00OTY1LWh3LmguCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGl3bDQ5NjVfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDQ5NjVfcXVldWUgKnEpCitpbnQgaXdsNDk2NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSkKIHsKIAlpbnQgcyA9IHEtPnJlYWRfcHRyIC0gcS0+d3JpdGVfcHRyOwogCkBAIC0yMjEsMjUgKzE4Nyw2IEBACiAJcmV0dXJuIHM7CiB9CiAKLS8qKgotICogaXdsNDk2NV9xdWV1ZV9pbmNfd3JhcCAtIGluY3JlbWVudCBxdWV1ZSBpbmRleCwgd3JhcCBiYWNrIHRvIGJlZ2lubmluZwotICogQGluZGV4IC0tIGN1cnJlbnQgaW5kZXgKLSAqIEBuX2JkIC0tIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXVlIChtdXN0IGJlIHBvd2VyIG9mIDIpCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfcXVldWVfaW5jX3dyYXAoaW50IGluZGV4LCBpbnQgbl9iZCkKLXsKLQlyZXR1cm4gKytpbmRleCAmIChuX2JkIC0gMSk7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9xdWV1ZV9kZWNfd3JhcCAtIGRlY3JlbWVudCBxdWV1ZSBpbmRleCwgd3JhcCBiYWNrIHRvIGVuZAotICogQGluZGV4IC0tIGN1cnJlbnQgaW5kZXgKLSAqIEBuX2JkIC0tIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXVlIChtdXN0IGJlIHBvd2VyIG9mIDIpCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfcXVldWVfZGVjX3dyYXAoaW50IGluZGV4LCBpbnQgbl9iZCkKLXsKLQlyZXR1cm4gLS1pbmRleCAmIChuX2JkIC0gMSk7Ci19CiAKIHN0YXRpYyBpbmxpbmUgaW50IHgyX3F1ZXVlX3VzZWQoY29uc3Qgc3RydWN0IGl3bDQ5NjVfcXVldWUgKnEsIGludCBpKQogewpAQCAtMjYxLDE1ICsyMDgsMTUgQEAKIC8qKgogICogaXdsNDk2NV9xdWV1ZV9pbml0IC0gSW5pdGlhbGl6ZSBxdWV1ZSdzIGhpZ2gvbG93LXdhdGVyIGFuZCByZWFkL3dyaXRlIGluZGV4ZXMKICAqLwotc3RhdGljIGludCBpd2w0OTY1X3F1ZXVlX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcXVldWUgKnEsCitzdGF0aWMgaW50IGl3bDQ5NjVfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3F1ZXVlICpxLAogCQkJICBpbnQgY291bnQsIGludCBzbG90c19udW0sIHUzMiBpZCkKIHsKIAlxLT5uX2JkID0gY291bnQ7CiAJcS0+bl93aW5kb3cgPSBzbG90c19udW07CiAJcS0+aWQgPSBpZDsKIAotCS8qIGNvdW50IG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZSBpd2w0OTY1X3F1ZXVlX2luY193cmFwCi0JICogYW5kIGl3bDQ5NjVfcXVldWVfZGVjX3dyYXAgYXJlIGJyb2tlbi4gKi8KKwkvKiBjb3VudCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UgaXdsX3F1ZXVlX2luY193cmFwCisJICogYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwogCUJVR19PTighaXNfcG93ZXJfb2ZfMihjb3VudCkpOwogCiAJLyogc2xvdHNfbnVtIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQpAQCAtMjkyLDcgKzIzOSw3IEBACiAvKioKICAqIGl3bDQ5NjVfdHhfcXVldWVfYWxsb2MgLSBBbGxvYyBkcml2ZXIgZGF0YSBhbmQgVEZEIENCIGZvciBvbmUgVHgvY21kIHF1ZXVlCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2w0OTY1X3R4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEsIHUzMiBpZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKQEAgLTMzNyw3ICsyODQsNyBAQAogLyoqCiAgKiBpd2w0OTY1X3R4X3F1ZXVlX2luaXQgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgdHgvY21kIHF1ZXVlCiAgKi8KLWludCBpd2w0OTY1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK2ludCBpd2w0OTY1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxLCBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwpAQCAtMzUyLDcgKzI5OSw3IEBACiAJICogRm9yIG5vcm1hbCBUeCBxdWV1ZXMgKGFsbCBvdGhlciBxdWV1ZXMpLCBubyBzdXBlci1zaXplIGNvbW1hbmQKIAkgKiBzcGFjZSBpcyBuZWVkZWQuCiAJICovCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2NtZCkgKiBzbG90c19udW07CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSAqIHNsb3RzX251bTsKIAlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQogCQlsZW4gKz0gIElXTF9NQVhfU0NBTl9TSVpFOwogCXR4cS0+Y21kID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBsZW4sICZ0eHEtPmRtYV9hZGRyX2NtZCk7CkBAIC0zNjksNyArMzE2LDcgQEAKIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKIAogCS8qIFRGRF9RVUVVRV9TSVpFX01BWCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKLQkgKiBpd2w0OTY1X3F1ZXVlX2luY193cmFwIGFuZCBpd2w0OTY1X3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCisJICogaXdsX3F1ZXVlX2luY193cmFwIGFuZCBpd2xfcXVldWVfZGVjX3dyYXAgYXJlIGJyb2tlbi4gKi8KIAlCVUlMRF9CVUdfT04oVEZEX1FVRVVFX1NJWkVfTUFYICYgKFRGRF9RVUVVRV9TSVpFX01BWCAtIDEpKTsKIAogCS8qIEluaXRpYWxpemUgcXVldWUncyBoaWdoL2xvdy13YXRlciBtYXJrcywgYW5kIGhlYWQvdGFpbCBpbmRleGVzICovCkBAIC0zODksNyArMzM2LDcgQEAKICAqIEZyZWUgYWxsIGJ1ZmZlcnMuCiAgKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqLwotdm9pZCBpd2w0OTY1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSkKK3ZvaWQgaXdsNDk2NV90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSkKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CkBAIC00MDAsMTAgKzM0NywxMCBAQAogCiAJLyogZmlyc3QsIGVtcHR5IGFsbCBCRCdzICovCiAJZm9yICg7IHEtPndyaXRlX3B0ciAhPSBxLT5yZWFkX3B0cjsKLQkgICAgIHEtPnJlYWRfcHRyID0gaXdsNDk2NV9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpCisJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpCiAJCWl3bDQ5NjVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAKLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfY21kKSAqIHEtPm5fd2luZG93OworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBxLT5uX3dpbmRvdzsKIAlpZiAocS0+aWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCWxlbiArPSBJV0xfTUFYX1NDQU5fU0laRTsKIApAQCAtNDQwLDcgKzM4Nyw3IEBACiAgKgogICogTk9URTogIFRoaXMgZG9lcyBub3QgcmVtb3ZlIHN0YXRpb24gZnJvbSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlLgogICovCi1zdGF0aWMgdTggaXdsNDk2NV9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQorc3RhdGljIHU4IGl3bDQ5NjVfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQogewogCWludCBpbmRleCA9IElXTF9JTlZBTElEX1NUQVRJT047CiAJaW50IGk7CkBAIC00NTEsOSArMzk4LDkgQEAKIAlpZiAoaXNfYXApCiAJCWluZGV4ID0gSVdMX0FQX0lEOwogCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlpbmRleCA9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlpbmRleCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJZWxzZQotCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfc2V0dGluZy5tYXhfc3RhdGlvbnM7IGkrKykKKwkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7IGkrKykKIAkJCWlmIChwcml2LT5zdGF0aW9uc1tpXS51c2VkICYmCiAJCQkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCiAJCQkJCQlhZGRyKSkgewpAQCAtNDc4LDI2ICs0MjUsOSBAQAogI2VuZGlmCiAKIC8qKgotICogaXdsNDk2NV9jbGVhcl9zdGF0aW9uc190YWJsZSAtIENsZWFyIHRoZSBkcml2ZXIncyBzdGF0aW9uIHRhYmxlCi0gKgotICogTk9URTogIFRoaXMgZG9lcyBub3QgY2xlYXIgb3Igb3RoZXJ3aXNlIGFsdGVyIHRoZSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlLgotICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCi0JcHJpdi0+bnVtX3N0YXRpb25zID0gMDsKLQltZW1zZXQocHJpdi0+c3RhdGlvbnMsIDAsIHNpemVvZihwcml2LT5zdGF0aW9ucykpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoqCiAgKiBpd2w0OTY1X2FkZF9zdGF0aW9uX2ZsYWdzIC0gQWRkIHN0YXRpb24gdG8gdGFibGVzIGluIGRyaXZlciBhbmQgZGV2aWNlCiAgKi8KLXU4IGl3bDQ5NjVfYWRkX3N0YXRpb25fZmxhZ3Moc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsCit1OCBpd2w0OTY1X2FkZF9zdGF0aW9uX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsCiAJCQkJaW50IGlzX2FwLCB1OCBmbGFncywgdm9pZCAqaHRfZGF0YSkKIHsKIAlpbnQgaTsKQEAgLTUxMCw5ICs0NDAsOSBAQAogCWlmIChpc19hcCkKIAkJaW5kZXggPSBJV0xfQVBfSUQ7CiAJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCWluZGV4ID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWluZGV4ID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAllbHNlCi0JCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKSB7CisJCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspIHsKIAkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwKIAkJCQkJCWFkZHIpKSB7CiAJCQkJaW5kZXggPSBpOwpAQCAtNTUzLDcgKzQ4Myw3IEBACiAKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAogCS8qIEJDQVNUIHN0YXRpb24gYW5kIElCU1Mgc3RhdGlvbnMgZG8gbm90IHdvcmsgaW4gSFQgbW9kZSAqLwotCWlmIChpbmRleCAhPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZCAmJgorCWlmIChpbmRleCAhPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkICYmCiAJICAgIHByaXYtPml3X21vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykKIAkJaXdsNDk2NV9zZXRfaHRfYWRkX3N0YXRpb24ocHJpdiwgaW5kZXgsCiAJCQkJIChzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikgaHRfZGF0YSk7CkBAIC01NjcsMTAzICs0OTcsMTAgQEAKIAogfQogCi0vKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfaXNfcmVhZHkoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQkvKiBUaGUgYWRhcHRlciBpcyAncmVhZHknIGlmIFJFQURZIGFuZCBHRU9fQ09ORklHVVJFRCBiaXRzIGFyZQotCSAqIHNldCBidXQgRVhJVF9QRU5ESU5HIGlzIG5vdCAqLwotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpICYmCi0JICAgICAgIHRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgJiYKLQkgICAgICAgIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2w0OTY1X2lzX2FsaXZlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfaXNfaW5pdChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfaXNfcmZraWxsKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfaXNfcmVhZHlfcmYoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQotCWlmIChpd2w0OTY1X2lzX3Jma2lsbChwcml2KSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gaXdsNDk2NV9pc19yZWFkeShwcml2KTsKLX0KIAogLyoqKioqKioqKioqKioqKiBIT1NUIENPTU1BTkQgUVVFVUUgRlVOQ1RJT05TICAgKioqKiovCiAKLSNkZWZpbmUgSVdMX0NNRCh4KSBjYXNlIHggOiByZXR1cm4gI3gKLQotc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jbWRfc3RyaW5nKHU4IGNtZCkKLXsKLQlzd2l0Y2ggKGNtZCkgewotCQlJV0xfQ01EKFJFUExZX0FMSVZFKTsKLQkJSVdMX0NNRChSRVBMWV9FUlJPUik7Ci0JCUlXTF9DTUQoUkVQTFlfUlhPTik7Ci0JCUlXTF9DTUQoUkVQTFlfUlhPTl9BU1NPQyk7Ci0JCUlXTF9DTUQoUkVQTFlfUU9TX1BBUkFNKTsKLQkJSVdMX0NNRChSRVBMWV9SWE9OX1RJTUlORyk7Ci0JCUlXTF9DTUQoUkVQTFlfQUREX1NUQSk7Ci0JCUlXTF9DTUQoUkVQTFlfUkVNT1ZFX1NUQSk7Ci0JCUlXTF9DTUQoUkVQTFlfUkVNT1ZFX0FMTF9TVEEpOwotCQlJV0xfQ01EKFJFUExZX1RYKTsKLQkJSVdMX0NNRChSRVBMWV9SQVRFX1NDQUxFKTsKLQkJSVdMX0NNRChSRVBMWV9MRURTX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCk7Ci0JCUlXTF9DTUQoUkFEQVJfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9RVUlFVF9DTUQpOwotCQlJV0xfQ01EKFJFUExZX0NIQU5ORUxfU1dJVENIKTsKLQkJSVdMX0NNRChDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCk7Ci0JCUlXTF9DTUQoU1BFQ1RSVU1fTUVBU1VSRV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFBPV0VSX1RBQkxFX0NNRCk7Ci0JCUlXTF9DTUQoUE1fU0xFRVBfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChQTV9ERUJVR19TVEFUSVNUSUNfTk9USUZJQyk7Ci0JCUlXTF9DTUQoUkVQTFlfU0NBTl9DTUQpOwotCQlJV0xfQ01EKFJFUExZX1NDQU5fQUJPUlRfQ01EKTsKLQkJSVdMX0NNRChTQ0FOX1NUQVJUX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKEJFQUNPTl9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX1RYX0JFQUNPTik7Ci0JCUlXTF9DTUQoV0hPX0lTX0FXQUtFX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUVVJRVRfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9UWF9QV1JfVEFCTEVfQ01EKTsKLQkJSVdMX0NNRChNRUFTVVJFX0FCT1JUX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfQlRfQ09ORklHKTsKLQkJSVdMX0NNRChSRVBMWV9TVEFUSVNUSUNTX0NNRCk7Ci0JCUlXTF9DTUQoU1RBVElTVElDU19OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX0NBUkRfU1RBVEVfQ01EKTsKLQkJSVdMX0NNRChDQVJEX1NUQVRFX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoTUlTU0VEX0JFQUNPTlNfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQpOwotCQlJV0xfQ01EKFNFTlNJVElWSVRZX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfUlhfUEhZX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfUlhfTVBEVV9DTUQpOwotCQlJV0xfQ01EKFJFUExZXzQ5NjVfUlgpOwotCQlJV0xfQ01EKFJFUExZX0NPTVBSRVNTRURfQkEpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiVU5LTk9XTiI7Ci0KLQl9Ci19Ci0KLSNkZWZpbmUgSE9TVF9DT01QTEVURV9USU1FT1VUIChIWiAvIDIpCi0KIC8qKgogICogaXdsNDk2NV9lbnF1ZXVlX2hjbWQgLSBlbnF1ZXVlIGEgdUNvZGUgY29tbWFuZAogICogQHByaXY6IGRldmljZSBwcml2YXRlIGRhdGEgcG9pbnQKQEAgLTY3MywxMyArNTEwLDEzIEBACiAgKiBmYWlsZWQuIE9uIHN1Y2Nlc3MsIGl0IHR1cm5zIHRoZSBpbmRleCAoPiAwKSBvZiBjb21tYW5kIGluIHRoZQogICogY29tbWFuZCBxdWV1ZS4KICAqLwotc3RhdGljIGludCBpd2w0OTY1X2VucXVldWVfaGNtZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCAqY21kKQoraW50IGl3bDQ5NjVfZW5xdWV1ZV9oY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9ob3N0X2NtZCAqY21kKQogewogCXN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKIAlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7CiAJc3RydWN0IGl3bDQ5NjVfdGZkX2ZyYW1lICp0ZmQ7CiAJdTMyICpjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2w0OTY1X2NtZCAqb3V0X2NtZDsKKwlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZDsKIAl1MzIgaWR4OwogCXUxNiBmaXhfc2l6ZSA9ICh1MTYpKGNtZC0+bGVuICsgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwpAQCAtNjkyLDYgKzUyOSwxMSBAQAogCUJVR19PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKIAkgICAgICAgIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7CiAKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfSU5GTygiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJaWYgKGl3bDQ5NjVfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKIAkJSVdMX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOwogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTcyMSw3ICs1NjMsNyBAQAogCQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgfD0gY3B1X3RvX2xlMTYoU0VRX0hVR0VfRlJBTUUpOwogCiAJcGh5c19hZGRyID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2YodHhxLT5jbWRbMF0pICogaWR4ICsKLQkJCW9mZnNldG9mKHN0cnVjdCBpd2w0OTY1X2NtZCwgaGRyKTsKKwkJCW9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwogCWl3bDQ5NjVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBmaXhfc2l6ZSk7CiAKIAlJV0xfREVCVUdfSEMoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKQEAgLTczMywxNjEgKzU3NSwyNSBAQAogCXR4cS0+bmVlZF91cGRhdGUgPSAxOwogCiAJLyogU2V0IHVwIGVudHJ5IGluIHF1ZXVlJ3MgYnl0ZSBjb3VudCBjaXJjdWxhciBidWZmZXIgKi8KLQlyZXQgPSBpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cl9wdHIocHJpdiwgdHhxLCAwKTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsIDApOwogCiAJLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwotCXEtPndyaXRlX3B0ciA9IGl3bDQ5NjVfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKwlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKKwlyZXQgPSBpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQgPyByZXQgOiBpZHg7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCAqY21kKQorc3RhdGljIHZvaWQgaXdsNDk2NV9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQogewotCWludCByZXQ7CisJc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwogCi0JQlVHX09OKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSk7CisJaWYgKGh3X2RlY3J5cHQpCisJCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOworCWVsc2UKKwkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKIAotCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgZXhwZWN0IGFuIFNLQiB0byBiZSBzZXQuICovCi0JQlVHX09OKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQik7Ci0KLQkvKiBBbiBhc3luY2hyb25vdXMgY29tbWFuZCBNVVNUIGhhdmUgYSBjYWxsYmFjay4gKi8KLQlCVUdfT04oIWNtZC0+bWV0YS51LmNhbGxiYWNrKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJldCA9IGl3bDQ5NjVfZW5xdWV1ZV9oY21kKHByaXYsIGNtZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBpd2w0OTY1X2VucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX2NtZF9zeW5jKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X2hvc3RfY21kICpjbWQpCi17Ci0JaW50IGNtZF9pZHg7Ci0JaW50IHJldDsKLQlzdGF0aWMgYXRvbWljX3QgZW50cnkgPSBBVE9NSUNfSU5JVCgwKTsgLyogcmVlbnRyYW5jZSBwcm90ZWN0aW9uICovCi0KLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKTsKLQotCSAvKiBBIHN5bmNocm9ub3VzIGNvbW1hbmQgY2FuIG5vdCBoYXZlIGEgY2FsbGJhY2sgc2V0LiAqLwotCUJVR19PTihjbWQtPm1ldGEudS5jYWxsYmFjayAhPSBOVUxMKTsKLQotCWlmIChhdG9taWNfeGNoZygmZW50cnksIDEpKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogQWxyZWFkeSBzZW5kaW5nIGEgaG9zdCBjb21tYW5kXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0Jc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCi0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikKLQkJY21kLT5tZXRhLnNvdXJjZSA9ICZjbWQtPm1ldGE7Ci0KLQljbWRfaWR4ID0gaXdsNDk2NV9lbnF1ZXVlX2hjbWQocHJpdiwgY21kKTsKLQlpZiAoY21kX2lkeCA8IDApIHsKLQkJcmV0ID0gY21kX2lkeDsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBpd2w0OTY1X2VucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAotCQkJIXRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyksCi0JCQlIT1NUX0NPTVBMRVRFX1RJTUVPVVQpOwotCWlmICghcmV0KSB7Ci0JCWlmICh0ZXN0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAotCQkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKEhPU1RfQ09NUExFVEVfVElNRU9VVCkpOwotCi0JCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIGNhbmNlbDsKLQkJfQotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCi0JCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUNBTkNFTEVEOwotCQlnb3RvIGZhaWw7Ci0JfQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCi0JCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGZhaWw7Ci0JfQotCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKLQkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSAwOwotCWdvdG8gb3V0OwotCi1jYW5jZWw6Ci0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikgewotCQlzdHJ1Y3QgaXdsNDk2NV9jbWQgKnFjbWQ7Ci0KLQkJLyogQ2FuY2VsIHRoZSBDTURfV0FOVF9TS0IgZmxhZyBmb3IgdGhlIGNtZCBpbiB0aGUKLQkJICogVFggY21kIHF1ZXVlLiBPdGhlcndpc2UgaW4gY2FzZSB0aGUgY21kIGNvbWVzCi0JCSAqIGluIGxhdGVyLCBpdCB3aWxsIHBvc3NpYmx5IHNldCBhbiBpbnZhbGlkCi0JCSAqIGFkZHJlc3MgKGNtZC0+bWV0YS5zb3VyY2UpLiAqLwotCQlxY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pZHhdOwotCQlxY21kLT5tZXRhLmZsYWdzICY9IH5DTURfV0FOVF9TS0I7Ci0JfQotZmFpbDoKLQlpZiAoY21kLT5tZXRhLnUuc2tiKSB7Ci0JCWRldl9rZnJlZV9za2JfYW55KGNtZC0+bWV0YS51LnNrYik7Ci0JCWNtZC0+bWV0YS51LnNrYiA9IE5VTEw7Ci0JfQotb3V0OgotCWF0b21pY19zZXQoJmVudHJ5LCAwKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaXdsNDk2NV9zZW5kX2NtZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCAqY21kKQotewotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpCi0JCXJldHVybiBpd2w0OTY1X3NlbmRfY21kX2FzeW5jKHByaXYsIGNtZCk7Ci0KLQlyZXR1cm4gaXdsNDk2NV9zZW5kX2NtZF9zeW5jKHByaXYsIGNtZCk7Ci19Ci0KLWludCBpd2w0OTY1X3NlbmRfY21kX3BkdShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IGlkLAotCQkubGVuID0gbGVuLAotCQkuZGF0YSA9IGRhdGEsCi0JfTsKLQotCXJldHVybiBpd2w0OTY1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGl3bDQ5NjVfc2VuZF9jbWRfdTMyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IGlkLCB1MzIgdmFsKQotewotCXN0cnVjdCBpd2w0OTY1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gaWQsCi0JCS5sZW4gPSBzaXplb2YodmFsKSwKLQkJLmRhdGEgPSAmdmFsLAotCX07Ci0KLQlyZXR1cm4gaXdsNDk2NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotfQotCi1pbnQgaXdsNDk2NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQotewotCXJldHVybiBpd2w0OTY1X3NlbmRfY21kX3UzMihwcml2LCBSRVBMWV9TVEFUSVNUSUNTX0NNRCwgMCk7CiB9CiAKIC8qKgpAQCAtODk2LDcgKzYwMiw3IEBACiAgKiB0aGVyZSBpcyBvbmx5IG9uZSBBUCBzdGF0aW9uIHdpdGggaWQ9IElXTF9BUF9JRAogICogTk9URTogbXV0ZXggbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZm5jdGlvbgogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2w0OTY1X3J4b25fYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCWNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApCiB7CiAJdTggc3RhX2lkOwpAQCAtOTIzLDQyICs2MjksNiBAQAogfQogCiAvKioKLSAqIGl3bDQ5NjVfc2V0X3J4b25fY2hhbm5lbCAtIFNldCB0aGUgcGh5bW9kZSBhbmQgY2hhbm5lbCB2YWx1ZXMgaW4gc3RhZ2luZyBSWE9OCi0gKiBAcGh5bW9kZTogTU9ERV9JRUVFODAyMTFBIHNldHMgdG8gNS4yR0h6OyBhbGwgZWxzZSBzZXQgdG8gMi40R0h6Ci0gKiBAY2hhbm5lbDogQW55IGNoYW5uZWwgdmFsaWQgZm9yIHRoZSByZXF1ZXN0ZWQgcGh5bW9kZQotCi0gKiBJbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSBzdGFnaW5nIFJYT04sIHByaXYtPnBoeW1vZGUgaXMgYWxzbyBzZXQuCi0gKgotICogTk9URTogIERvZXMgbm90IGNvbW1pdCB0byB0aGUgaGFyZHdhcmU7IGl0IHNldHMgYXBwcm9wcmlhdGUgYml0IGZpZWxkcwotICogaW4gdGhlIHN0YWdpbmcgUlhPTiBmbGFnIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgcGh5bW9kZQotICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCBwaHltb2RlLAotCQkJCSB1MTYgY2hhbm5lbCkKLXsKLQlpZiAoIWl3bDQ5NjVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwaHltb2RlLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCi0JCQkgICAgICAgY2hhbm5lbCwgcGh5bW9kZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpID09IGNoYW5uZWwpICYmCi0JICAgIChwcml2LT5waHltb2RlID09IHBoeW1vZGUpKQotCQlyZXR1cm4gMDsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbm5lbCk7Ci0JaWYgKHBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFBKQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQllbHNlCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19CQU5EXzI0R19NU0s7Ci0KLQlwcml2LT5waHltb2RlID0gcGh5bW9kZTsKLQotCUlXTF9ERUJVR19JTkZPKCJTdGFnaW5nIGNoYW5uZWwgc2V0IHRvICVkIFslZF1cbiIsIGNoYW5uZWwsIHBoeW1vZGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogaXdsNDk2NV9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCiAgKgogICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKQEAgLTEwMzksNyArNzA5LDcgQEAKICAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAogICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KICAqLwotc3RhdGljIGludCBpd2w0OTY1X2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAKIAkvKiBUaGVzZSBpdGVtcyBhcmUgb25seSBzZXR0YWJsZSBmcm9tIHRoZSBmdWxsIFJYT04gY29tbWFuZCAqLwpAQCAtMTA3OSw2MCArNzQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCXN0cnVjdCBpd2w0OTY1X3J4b25fYXNzb2NfY21kIHJ4b25fYXNzb2M7Ci0Jc3RydWN0IGl3bDQ5NjVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9SWE9OX0FTU09DLAotCQkubGVuID0gc2l6ZW9mKHJ4b25fYXNzb2MpLAotCQkubWV0YS5mbGFncyA9IENNRF9XQU5UX1NLQiwKLQkJLmRhdGEgPSAmcnhvbl9hc3NvYywKLQl9OwotCWNvbnN0IHN0cnVjdCBpd2w0OTY1X3J4b25fY21kICpyeG9uMSA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0JY29uc3Qgc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgKnJ4b24yID0gJnByaXYtPmFjdGl2ZV9yeG9uOwotCi0JaWYgKChyeG9uMS0+ZmxhZ3MgPT0gcnhvbjItPmZsYWdzKSAmJgotCSAgICAocnhvbjEtPmZpbHRlcl9mbGFncyA9PSByeG9uMi0+ZmlsdGVyX2ZsYWdzKSAmJgotCSAgICAocnhvbjEtPmNja19iYXNpY19yYXRlcyA9PSByeG9uMi0+Y2NrX2Jhc2ljX3JhdGVzKSAmJgotCSAgICAocnhvbjEtPm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcyA9PQotCSAgICAgcnhvbjItPm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKLQkgICAgKHJ4b24xLT5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID09Ci0JICAgICByeG9uMi0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKLQkgICAgKHJ4b24xLT5yeF9jaGFpbiA9PSByeG9uMi0+cnhfY2hhaW4pICYmCi0JICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jcnhvbl9hc3NvYy5mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5mbGFnczsKLQlyeG9uX2Fzc29jLmZpbHRlcl9mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7Ci0Jcnhvbl9hc3NvYy5vZmRtX2Jhc2ljX3JhdGVzID0gcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXM7Ci0Jcnhvbl9hc3NvYy5jY2tfYmFzaWNfcmF0ZXMgPSBwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzOwotCXJ4b25fYXNzb2MucmVzZXJ2ZWQgPSAwOwotCXJ4b25fYXNzb2Mub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID0KLQkgICAgcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKLQlyeG9uX2Fzc29jLm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMgPQotCSAgICBwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlczsKLQlyeG9uX2Fzc29jLnJ4X2NoYWluX3NlbGVjdF9mbGFncyA9IHByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbjsKLQotCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmVzID0gKHN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWE9OX0FTU09DIGNvbW1hbmRcbiIpOwotCQlyYyA9IC1FSU87Ci0JfQotCi0JcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKLQotCXJldHVybiByYzsKLX0KLQogLyoqCiAgKiBpd2w0OTY1X2NvbW1pdF9yeG9uIC0gY29tbWl0IHN0YWdpbmdfcnhvbiB0byBoYXJkd2FyZQogICoKQEAgLTExNDEsMTQgKzc1NywxNCBAQAogICogZnVuY3Rpb24gY29ycmVjdGx5IHRyYW5zaXRpb25zIG91dCBvZiB0aGUgUlhPTl9BU1NPQ19NU0sgc3RhdGUgaWYKICAqIGEgSFcgdHVuZSBpcyByZXF1aXJlZCBiYXNlZCBvbiB0aGUgUlhPTiBzdHJ1Y3R1cmUgY2hhbmdlcy4KICAqLwotc3RhdGljIGludCBpd2w0OTY1X2NvbW1pdF9yeG9uKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIGNhc3QgYXdheSB0aGUgY29uc3QgZm9yIGFjdGl2ZV9yeG9uIGluIHRoaXMgZnVuY3Rpb24gKi8KIAlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqYWN0aXZlX3J4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKCFpd2w0OTY1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBhbHdheXMgZ2V0IHRpbWVzdGFtcCB3aXRoIFJ4IGZyYW1lICovCkBAIC0xMTY0LDcgKzc4MCw3IEBACiAJICogaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCB3aGljaCBpcyB1c2VkIHRvIHJlY29uZmlndXJlIGZpbHRlcgogCSAqIGFuZCBvdGhlciBmbGFncyBmb3IgdGhlIGN1cnJlbnQgcmFkaW8gY29uZmlndXJhdGlvbi4gKi8KIAlpZiAoIWl3bDQ5NjVfZnVsbF9yeG9uX3JlcXVpcmVkKHByaXYpKSB7Ci0JCXJjID0gaXdsNDk2NV9zZW5kX3J4b25fYXNzb2MocHJpdik7CisJCXJjID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2KTsKIAkJaWYgKHJjKSB7CiAJCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAiCiAJCQkJICAiY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwpAQCAtMTE5MSwxMiArODA3LDEyIEBACiAJICogYW4gUlhPTl9BU1NPQyBhbmQgdGhlIG5ldyBjb25maWcgd2FudHMgdGhlIGFzc29jaWF0ZWQgbWFzayBlbmFibGVkLAogCSAqIHdlIG11c3QgY2xlYXIgdGhlIGFzc29jaWF0ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24KIAkgKiBiZWZvcmUgd2UgYXBwbHkgdGhlIG5ldyBjb25maWcgKi8KLQlpZiAoaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpICYmCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCiAJICAgIChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkgewogCQlJV0xfREVCVUdfSU5GTygiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCi0JCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKKwkJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCiAJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4b25fY21kKSwKIAkJCQkgICAgICAmcHJpdi0+YWN0aXZlX3J4b24pOwogCkBAIC0xMjE5LDE1ICs4MzUsMTYgQEAKIAkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSwKIAkJICAgICAgIHByaW50X21hYyhtYWMsIHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyKSk7CiAKKwlpd2w0OTY1X3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsICFwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0byk7CiAJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCi0JcmMgPSBpd2w0OTY1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4b25fY21kKSwgJnByaXYtPnN0YWdpbmdfcnhvbik7CiAJaWYgKHJjKSB7CiAJCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBuZXcgY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsNDk2NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKKwlpd2xjb3JlX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfU0VOU0lUSVZJVFkKIAlpZiAoIXByaXYtPmVycm9yX3JlY292ZXJpbmcpCkBAIC0xMjU2LDcgKzg3Myw3IEBACiAKIAkvKiBJZiB3ZSBoYXZlIHNldCB0aGUgQVNTT0NfTVNLIGFuZCB3ZSBhcmUgaW4gQlNTIG1vZGUgdGhlbgogCSAqIGFkZCB0aGUgSVdMX0FQX0lEIHRvIHRoZSBzdGF0aW9uIHJhdGUgdGFibGUgKi8KLQlpZiAoaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpICYmCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmCiAJICAgIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkpIHsKIAkJaWYgKGl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihwcml2LCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyLCAxKQogCQkgICAgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewpAQCAtMTI2NCwxMiArODgxLDE1IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkID0gMTsKKwkJaWYgKHByaXYtPmRlZmF1bHRfd2VwX2tleSAmJgorCQkgICAgaXdsX3NlbmRfc3RhdGljX3dlcGtleV9jbWQocHJpdiwgMCkpCisJCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBzZW5kIFdFUCBzdGF0aWMga2V5LlxuIik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9idF9jbWQgYnRfY21kID0gewogCQkuZmxhZ3MgPSAzLApAQCAtMTI3OSwxNSArODk5LDE1IEBACiAJCS5raWxsX2N0c19tYXNrID0gMCwKIAl9OwogCi0JcmV0dXJuIGl3bDQ5NjVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPTkZJRywKKwlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9CVF9DT05GSUcsCiAJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2J0X2NtZCksICZidF9jbWQpOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcmVzOwotCXN0cnVjdCBpd2w0OTY1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU0NBTl9BQk9SVF9DTUQsCiAJCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAogCX07CkBAIC0xMzAwLDcgKzkyMCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKSB7CiAJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CiAJCXJldHVybiByYzsKQEAgLTEzMjQsOCArOTQ0LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9jYXJkX3N0YXRlX3N5bmNfY2FsbGJhY2soc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQkJc3RydWN0IGl3bDQ5NjVfY21kICpjbWQsCitzdGF0aWMgaW50IGl3bDQ5NjVfY2FyZF9zdGF0ZV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJc3RydWN0IGl3bF9jbWQgKmNtZCwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gMTsKQEAgLTEzNDEsOSArOTYxLDkgQEAKICAqIFdoZW4gaW4gdGhlICdoYWx0JyBzdGF0ZSwgdGhlIGNhcmQgaXMgc2h1dCBkb3duIGFuZCBtdXN0IGJlIGZ1bGx5CiAgKiByZXN0YXJ0ZWQgdG8gY29tZSBiYWNrIG9uLgogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF9jYXJkX3N0YXRlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUzMiBmbGFncywgdTggbWV0YV9mbGFnKQorc3RhdGljIGludCBpd2w0OTY1X3NlbmRfY2FyZF9zdGF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBmbGFncywgdTggbWV0YV9mbGFnKQogewotCXN0cnVjdCBpd2w0OTY1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCiAJCS5sZW4gPSBzaXplb2YodTMyKSwKIAkJLmRhdGEgPSAmZmxhZ3MsCkBAIC0xMzUzLDExICs5NzMsMTEgQEAKIAlpZiAobWV0YV9mbGFnICYgQ01EX0FTWU5DKQogCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsNDk2NV9jYXJkX3N0YXRlX3N5bmNfY2FsbGJhY2s7CiAKLQlyZXR1cm4gaXdsNDk2NV9zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfYWRkX3N0YV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgaXdsNDk2NV9hZGRfc3RhX3N5bmNfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CiAKQEAgLTEzODQsMTIgKzEwMDQsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotaW50IGl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAoraW50IGl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncykKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CiAJaW50IHJjID0gMDsKLQlzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX0FERF9TVEEsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCksCiAJCS5tZXRhLmZsYWdzID0gZmxhZ3MsCkBAIC0xNDAxLDcgKzEwMjEsNyBAQAogCWVsc2UKIAkJY21kLm1ldGEuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOwogCi0JcmMgPSBpd2w0OTY1X3NlbmRfY21kKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwogCiAJaWYgKHJjIHx8IChmbGFncyAmIENNRF9BU1lOQykpCiAJCXJldHVybiByYzsKQEAgLTE0MzEsNjIgKzEwNTEsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X3VwZGF0ZV9zdGFfa2V5X2luZm8oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAotCQkJCSAgIHU4IHN0YV9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCV9fbGUxNiBrZXlfZmxhZ3MgPSAwOwotCi0Jc3dpdGNoIChrZXljb25mLT5hbGcpIHsKLQljYXNlIEFMR19DQ01QOgotCQlrZXlfZmxhZ3MgfD0gU1RBX0tFWV9GTEdfQ0NNUDsKLQkJa2V5X2ZsYWdzIHw9IGNwdV90b19sZTE2KAotCQkJCWtleWNvbmYtPmtleWlkeCA8PCBTVEFfS0VZX0ZMR19LRVlJRF9QT1MpOwotCQlrZXlfZmxhZ3MgJj0gflNUQV9LRVlfRkxHX0lOVkFMSUQ7Ci0JCWJyZWFrOwotCWNhc2UgQUxHX1RLSVA6Ci0JY2FzZSBBTEdfV0VQOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8uYWxnID0ga2V5Y29uZi0+YWxnOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXlsZW4gPSBrZXljb25mLT5rZXlsZW47Ci0JbWVtY3B5KHByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXksIGtleWNvbmYtPmtleSwKLQkgICAgICAga2V5Y29uZi0+a2V5bGVuKTsKLQotCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5LCBrZXljb25mLT5rZXksCi0JICAgICAgIGtleWNvbmYtPmtleWxlbik7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQotCUlXTF9ERUJVR19JTkZPKCJod2NyeXB0bzogbW9kaWZ5IHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOwotCWl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDQ5NjVfY2xlYXJfc3RhX2tleV9pbmZvKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9od19rZXkpKTsKLQltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2tleWluZm8pKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0gU1RBX0tFWV9GTEdfTk9fRU5DOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQotCUlXTF9ERUJVR19JTkZPKCJod2NyeXB0bzogY2xlYXIgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7Ci0JaXdsNDk2NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAKQEAgLTE1MDcsNyArMTA3Miw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGl3bDQ5NjVfZnJhbWUgKml3bDQ5NjVfZ2V0X2ZyZWVfZnJhbWUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyBzdHJ1Y3QgaXdsNDk2NV9mcmFtZSAqaXdsNDk2NV9nZXRfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfZnJhbWUgKmZyYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CkBAIC0xNTI3LDE4ICsxMDkyLDE4IEBACiAJcmV0dXJuIGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDQ5NjVfZnJhbWUsIGxpc3QpOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2ZyZWVfZnJhbWUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfZnJhbWUgKmZyYW1lKQorc3RhdGljIHZvaWQgaXdsNDk2NV9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfZnJhbWUgKmZyYW1lKQogewogCW1lbXNldChmcmFtZSwgMCwgc2l6ZW9mKCpmcmFtZSkpOwogCWxpc3RfYWRkKCZmcmFtZS0+bGlzdCwgJnByaXYtPmZyZWVfZnJhbWVzKTsKIH0KIAotdW5zaWduZWQgaW50IGl3bDQ5NjVfZmlsbF9iZWFjb25fZnJhbWUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3Vuc2lnbmVkIGludCBpd2w0OTY1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCWNvbnN0IHU4ICpkZXN0LCBpbnQgbGVmdCkKIHsKIAotCWlmICghaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpIHx8ICFwcml2LT5pYnNzX2JlYWNvbiB8fAorCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwgIXByaXYtPmlic3NfYmVhY29uIHx8CiAJICAgICgocHJpdi0+aXdfbW9kZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSAmJgogCSAgICAgKHByaXYtPml3X21vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVApKSkKIAkJcmV0dXJuIDA7CkBAIC0xNTUxLDM0ICsxMTE2LDYgQEAKIAlyZXR1cm4gcHJpdi0+aWJzc19iZWFjb24tPmxlbjsKIH0KIAotaW50IGl3bDQ5NjVfcmF0ZV9pbmRleF9mcm9tX3BsY3AoaW50IHBsY3ApCi17Ci0JaW50IGkgPSAwOwotCi0JLyogNDk2NSBIVCByYXRlIGZvcm1hdCAqLwotCWlmIChwbGNwICYgUkFURV9NQ1NfSFRfTVNLKSB7Ci0JCWkgPSAocGxjcCAmIDB4ZmYpOwotCi0JCWlmIChpID49IElXTF9SQVRFX01JTU9fNk1fUExDUCkKLQkJCWkgPSBpIC0gSVdMX1JBVEVfTUlNT182TV9QTENQOwotCi0JCWkgKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQkJLyogc2tpcCA5TSBub3Qgc3VwcG9ydGVkIGluIGh0Ki8KLQkJaWYgKGkgPj0gSVdMX1JBVEVfOU1fSU5ERVgpCi0JCQlpICs9IDE7Ci0JCWlmICgoaSA+PSBJV0xfRklSU1RfT0ZETV9SQVRFKSAmJgotCQkgICAgKGkgPD0gSVdMX0xBU1RfT0ZETV9SQVRFKSkKLQkJCXJldHVybiBpOwotCi0JLyogNDk2NSBsZWdhY3kgcmF0ZSBmb3JtYXQsIHNlYXJjaCBmb3IgbWF0Y2ggaW4gdGFibGUgKi8KLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpd2w0OTY1X3JhdGVzKTsgaSsrKQotCQkJaWYgKGl3bDQ5NjVfcmF0ZXNbaV0ucGxjcCA9PSAocGxjcCAmMHhGRikpCi0JCQkJcmV0dXJuIGk7Ci0JfQotCXJldHVybiAtMTsKLX0KLQogc3RhdGljIHU4IGl3bDQ5NjVfcmF0ZV9nZXRfbG93ZXN0X3BsY3AoaW50IHJhdGVfbWFzaykKIHsKIAl1OCBpOwpAQCAtMTU5Miw3ICsxMTI5LDcgQEAKIAlyZXR1cm4gSVdMX1JBVEVfSU5WQUxJRDsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfZnJhbWUgKmZyYW1lOwogCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwpAQCAtMTYyMCw3ICsxMTU3LDcgQEAKIAogCWZyYW1lX3NpemUgPSBpd2w0OTY1X2h3X2dldF9iZWFjb25fY21kKHByaXYsIGZyYW1lLCByYXRlKTsKIAotCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfQkVBQ09OLCBmcmFtZV9zaXplLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9UWF9CRUFDT04sIGZyYW1lX3NpemUsCiAJCQkgICAgICAmZnJhbWUtPnUuY21kWzBdKTsKIAogCWl3bDQ5NjVfZnJlZV9mcmFtZShwcml2LCBmcmFtZSk7CkBAIC0xNjMwLDIzOCArMTE2NywxNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRUVQUk9NIHJlbGF0ZWQgZnVuY3Rpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgZ2V0X2VlcHJvbV9tYWMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTggKm1hYykKLXsKLQltZW1jcHkobWFjLCBwcml2LT5lZXByb20ubWFjX2FkZHJlc3MsIDYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsNDk2NV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQlpd2w0OTY1X2NsZWFyX2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNKTsKLX0KLQotLyoqCi0gKiBpd2w0OTY1X2VlcHJvbV9pbml0IC0gcmVhZCBFRVBST00gY29udGVudHMKLSAqCi0gKiBMb2FkIHRoZSBFRVBST00gY29udGVudHMgZnJvbSBhZGFwdGVyIGludG8gcHJpdi0+ZWVwcm9tCi0gKgotICogTk9URTogIFRoaXMgcm91dGluZSB1c2VzIHRoZSBub24tZGVidWcgSU8gYWNjZXNzIGZ1bmN0aW9ucy4KLSAqLwotaW50IGl3bDQ5NjVfZWVwcm9tX2luaXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQlfX2xlMTYgKmUgPSAoX19sZTE2ICopJnByaXYtPmVlcHJvbTsKLQl1MzIgZ3AgPSBpd2w0OTY1X3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX0dQKTsKLQl1MzIgcjsKLQlpbnQgc3ogPSBzaXplb2YocHJpdi0+ZWVwcm9tKTsKLQlpbnQgcmM7Ci0JaW50IGk7Ci0JdTE2IGFkZHI7Ci0KLQkvKiBUaGUgRUVQUk9NIHN0cnVjdHVyZSBoYXMgc2V2ZXJhbCBwYWRkaW5nIGJ1ZmZlcnMgd2l0aGluIGl0Ci0JICogYW5kIHdoZW4gYWRkaW5nIG5ldyBFRVBST00gbWFwcyBpcyBzdWJqZWN0IHRvIHByb2dyYW1tZXIgZXJyb3JzCi0JICogd2hpY2ggbWF5IGJlIHZlcnkgZGlmZmljdWx0IHRvIGlkZW50aWZ5IHdpdGhvdXQgZXhwbGljaXRseQotCSAqIGNoZWNraW5nIHRoZSByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgZWVwcm9tIG1hcC4gKi8KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmVlcHJvbSkgIT0gSVdMX0VFUFJPTV9JTUFHRV9TSVpFKTsKLQotCWlmICgoZ3AgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSykgPT0gQ1NSX0VFUFJPTV9HUF9CQURfU0lHTkFUVVJFKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eCIsIGdwKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogTWFrZSBzdXJlIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSkgaXMgYWxsb3dlZCB0byByZWFkIEVFUFJPTSAqLwotCXJjID0gaXdsNDk2NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUocHJpdik7Ci0JaWYgKHJjIDwgMCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byBhY3F1aXJlIEVFUFJPTSBzZW1hcGhvcmUuXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogZWVwcm9tIGlzIGFuIGFycmF5IG9mIDE2Yml0IHZhbHVlcyAqLwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzejsgYWRkciArPSBzaXplb2YodTE2KSkgewotCQlfaXdsNDk2NV93cml0ZTMyKHByaXYsIENTUl9FRVBST01fUkVHLCBhZGRyIDw8IDEpOwotCQlfaXdsNDk2NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9SRUcsIENTUl9FRVBST01fUkVHX0JJVF9DTUQpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUOwotCQkJCQlpICs9IElXTF9FRVBST01fQUNDRVNTX0RFTEFZKSB7Ci0JCQlyID0gX2l3bDQ5NjVfcmVhZF9kaXJlY3QzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7Ci0JCQlpZiAociAmIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLKQotCQkJCWJyZWFrOwotCQkJdWRlbGF5KElXTF9FRVBST01fQUNDRVNTX0RFTEFZKTsKLQkJfQotCi0JCWlmICghKHIgJiBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSykpIHsKLQkJCUlXTF9FUlJPUigiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdIiwgYWRkcik7Ci0JCQlyYyA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQkJZVthZGRyIC8gMl0gPSBjcHVfdG9fbGUxNihyID4+IDE2KTsKLQl9Ci0JcmMgPSAwOwotCi1kb25lOgotCWl3bDQ5NjVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHByaXYpOwotCXJldHVybiByYzsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKICAqIE1pc2MuIGludGVybmFsIHN0YXRlIGFuZCBoZWxwZXIgZnVuY3Rpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwogCi0vKioKLSAqIGl3bDQ5NjVfcmVwb3J0X2ZyYW1lIC0gZHVtcCBmcmFtZSB0byBzeXNsb2cgZHVyaW5nIGRlYnVnIHNlc3Npb25zCi0gKgotICogWW91IG1heSBoYWNrIHRoaXMgZnVuY3Rpb24gdG8gc2hvdyBkaWZmZXJlbnQgYXNwZWN0cyBvZiByZWNlaXZlZCBmcmFtZXMsCi0gKiBpbmNsdWRpbmcgc2VsZWN0aXZlIGZyYW1lIGR1bXBzLgotICogZ3JvdXAxMDAgcGFyYW1ldGVyIHNlbGVjdHMgd2hldGhlciB0byBzaG93IDEgb3V0IG9mIDEwMCBnb29kIGZyYW1lcy4KLSAqCi0gKiBUT0RPOiAgVGhpcyB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciAzOTQ1LCBuZWVkIHRvIGF1ZGl0IGZvcgotICogICAgICAgIHByb3BlciBvcGVyYXRpb24gd2l0aCA0OTY1LgotICovCi12b2lkIGl3bDQ5NjVfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0LAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCitzdGF0aWMgdm9pZCBpd2w0OTY1X3Vuc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JdTMyIHRvX3VzOwotCXUzMiBwcmludF9zdW1tYXJ5ID0gMDsKLQl1MzIgcHJpbnRfZHVtcCA9IDA7CS8qIHNldCB0byAxIHRvIGR1bXAgYWxsIGZyYW1lcycgY29udGVudHMgKi8KLQl1MzIgaHVuZHJlZCA9IDA7Ci0JdTMyIGRhdGFmcmFtZSA9IDA7Ci0JdTE2IGZjOwotCXUxNiBzZXFfY3RsOwotCXUxNiBjaGFubmVsOwotCXUxNiBwaHlfZmxhZ3M7Ci0JaW50IHJhdGVfc3ltOwotCXUxNiBsZW5ndGg7Ci0JdTE2IHN0YXR1czsKLQl1MTYgYmNuX3RtcjsKLQl1MzIgdHNmX2xvdzsKLQl1NjQgdHNmOwotCXU4IHJzc2k7Ci0JdTggYWdjOwotCXUxNiBzaWdfYXZnOwotCXUxNiBub2lzZV9kaWZmOwotCXN0cnVjdCBpd2w0OTY1X3J4X2ZyYW1lX3N0YXRzICpyeF9zdGF0cyA9IElXTF9SWF9TVEFUUyhwa3QpOwotCXN0cnVjdCBpd2w0OTY1X3J4X2ZyYW1lX2hkciAqcnhfaGRyID0gSVdMX1JYX0hEUihwa3QpOwotCXN0cnVjdCBpd2w0OTY1X3J4X2ZyYW1lX2VuZCAqcnhfZW5kID0gSVdMX1JYX0VORChwa3QpOwotCXU4ICpkYXRhID0gSVdMX1JYX0RBVEEocGt0KTsKLQotCS8qIE1BQyBoZWFkZXIgKi8KLQlmYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCk7Ci0Jc2VxX2N0bCA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2VxX2N0cmwpOwotCi0JLyogbWV0YWRhdGEgKi8KLQljaGFubmVsID0gbGUxNl90b19jcHUocnhfaGRyLT5jaGFubmVsKTsKLQlwaHlfZmxhZ3MgPSBsZTE2X3RvX2NwdShyeF9oZHItPnBoeV9mbGFncyk7Ci0JcmF0ZV9zeW0gPSByeF9oZHItPnJhdGU7Ci0JbGVuZ3RoID0gbGUxNl90b19jcHUocnhfaGRyLT5sZW4pOwotCi0JLyogZW5kLW9mLWZyYW1lIHN0YXR1cyBhbmQgdGltZXN0YW1wICovCi0Jc3RhdHVzID0gbGUzMl90b19jcHUocnhfZW5kLT5zdGF0dXMpOwotCWJjbl90bXIgPSBsZTMyX3RvX2NwdShyeF9lbmQtPmJlYWNvbl90aW1lc3RhbXApOwotCXRzZl9sb3cgPSBsZTY0X3RvX2NwdShyeF9lbmQtPnRpbWVzdGFtcCkgJiAweDBmZmZmZmZmZjsKLQl0c2YgPSBsZTY0X3RvX2NwdShyeF9lbmQtPnRpbWVzdGFtcCk7Ci0KLQkvKiBzaWduYWwgc3RhdGlzdGljcyAqLwotCXJzc2kgPSByeF9zdGF0cy0+cnNzaTsKLQlhZ2MgPSByeF9zdGF0cy0+YWdjOwotCXNpZ19hdmcgPSBsZTE2X3RvX2NwdShyeF9zdGF0cy0+c2lnX2F2Zyk7Ci0Jbm9pc2VfZGlmZiA9IGxlMTZfdG9fY3B1KHJ4X3N0YXRzLT5ub2lzZV9kaWZmKTsKLQotCXRvX3VzID0gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxLCBwcml2LT5tYWNfYWRkcik7Ci0KLQkvKiBpZiBkYXRhIGZyYW1lIGlzIHRvIHVzIGFuZCBhbGwgaXMgZ29vZCwKLQkgKiAgIChvcHRpb25hbGx5KSBwcmludCBzdW1tYXJ5IGZvciBvbmx5IDEgb3V0IG9mIGV2ZXJ5IDEwMCAqLwotCWlmICh0b191cyAmJiAoZmMgJiB+SUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSA9PQotCSAgICAoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZUWVBFX0RBVEEpKSB7Ci0JCWRhdGFmcmFtZSA9IDE7Ci0JCWlmICghZ3JvdXAxMDApCi0JCQlwcmludF9zdW1tYXJ5ID0gMTsJLyogcHJpbnQgZWFjaCBmcmFtZSAqLwotCQllbHNlIGlmIChwcml2LT5mcmFtZWNudF90b191cyA8IDEwMCkgewotCQkJcHJpdi0+ZnJhbWVjbnRfdG9fdXMrKzsKLQkJCXByaW50X3N1bW1hcnkgPSAwOwotCQl9IGVsc2UgewotCQkJcHJpdi0+ZnJhbWVjbnRfdG9fdXMgPSAwOwotCQkJcHJpbnRfc3VtbWFyeSA9IDE7Ci0JCQlodW5kcmVkID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIHByaW50IHN1bW1hcnkgZm9yIGFsbCBvdGhlciBmcmFtZXMgKi8KLQkJcHJpbnRfc3VtbWFyeSA9IDE7Ci0JfQotCi0JaWYgKHByaW50X3N1bW1hcnkpIHsKLQkJY2hhciAqdGl0bGU7Ci0JCXUzMiByYXRlOwotCi0JCWlmIChodW5kcmVkKQotCQkJdGl0bGUgPSAiMTAwRnJhbWVzIjsKLQkJZWxzZSBpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9SRVRSWSkKLQkJCXRpdGxlID0gIlJldHJ5IjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3BvbnNlKGZjKSkKLQkJCXRpdGxlID0gIkFzY1JzcCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3BvbnNlKGZjKSkKLQkJCXRpdGxlID0gIlJhc1JzcCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwb25zZShmYykpIHsKLQkJCXRpdGxlID0gIlByYlJzcCI7Ci0JCQlwcmludF9kdW1wID0gMTsJLyogZHVtcCBmcmFtZSBjb250ZW50cyAqLwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSB7Ci0JCQl0aXRsZSA9ICJCZWFjb24iOwotCQkJcHJpbnRfZHVtcCA9IDE7CS8qIGR1bXAgZnJhbWUgY29udGVudHMgKi8KLQkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYXRpbShmYykpCi0JCQl0aXRsZSA9ICJBVElNIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKQotCQkJdGl0bGUgPSAiQXV0aCI7Ci0JCWVsc2UgaWYgKGllZWU4MDIxMV9pc19kZWF1dGgoZmMpKQotCQkJdGl0bGUgPSAiRGVBdXRoIjsKLQkJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Rpc2Fzc29jKGZjKSkKLQkJCXRpdGxlID0gIkRpc0Fzc29jIjsKLQkJZWxzZQotCQkJdGl0bGUgPSAiRnJhbWUiOwotCi0JCXJhdGUgPSBpd2w0OTY1X3JhdGVfaW5kZXhfZnJvbV9wbGNwKHJhdGVfc3ltKTsKLQkJaWYgKHJhdGUgPT0gLTEpCi0JCQlyYXRlID0gMDsKLQkJZWxzZQotCQkJcmF0ZSA9IGl3bDQ5NjVfcmF0ZXNbcmF0ZV0uaWVlZSAvIDI7Ci0KLQkJLyogcHJpbnQgZnJhbWUgc3VtbWFyeS4KLQkJICogTUFDIGFkZHJlc3NlcyBzaG93IGp1c3QgdGhlIGxhc3QgYnl0ZSAoZm9yIGJyZXZpdHkpLAotCQkgKiAgICBidXQgeW91IGNhbiBoYWNrIGl0IHRvIHNob3cgbW9yZSwgaWYgeW91J2QgbGlrZSB0by4gKi8KLQkJaWYgKGRhdGFmcmFtZSkKLQkJCUlXTF9ERUJVR19SWCgiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKLQkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIGNobmw9JWQsIHJhdGU9JXUsIFxuIiwKLQkJCQkgICAgIHRpdGxlLCBmYywgaGVhZGVyLT5hZGRyMVs1XSwKLQkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgcmF0ZSk7Ci0JCWVsc2UgewotCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLwotCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCi0JCQkJICAgICAic3JjPTB4JTAyeCwgcnNzaT0ldSwgdGltPSVsdSB1c2VjLCAiCi0JCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKLQkJCQkgICAgIHRpdGxlLCBmYywgaGVhZGVyLT5hZGRyMVs1XSwKLQkJCQkgICAgIGhlYWRlci0+YWRkcjNbNV0sIHJzc2ksCi0JCQkJICAgICB0c2ZfbG93IC0gcHJpdi0+c2Nhbl9zdGFydF90c2YsCi0JCQkJICAgICBwaHlfZmxhZ3MsIGNoYW5uZWwpOwotCQl9Ci0JfQotCWlmIChwcmludF9kdW1wKQotCQlpd2w0OTY1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3Vuc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQlpZiAocHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCkKKwlpZiAocHJpdi0+c2hhcmVkX3ZpcnQpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NoYXJlZCksCi0JCQkJICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQsCi0JCQkJICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCQkJCSAgICBwcml2LT5zaGFyZWRfdmlydCwKKwkJCQkgICAgcHJpdi0+c2hhcmVkX3BoeXMpOwogfQogCiAvKioKQEAgLTE4OTMsMjQgKzEyMDksMjAgQEAKIAlyZXR1cm4gcmV0X3JhdGVzOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLXZvaWQgc3RhdGljIGl3bDQ5NjVfc2V0X2h0X2NhcGFiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqaHRfY2FwLAotCQkJICAgICB1OCB1c2VfY3VycmVudF9jb25maWcpOwotI2VuZGlmCi0KIC8qKgogICogaXdsNDk2NV9maWxsX3Byb2JlX3JlcSAtIGZpbGwgaW4gYWxsIHJlcXVpcmVkIGZpZWxkcyBhbmQgSUUgZm9yIHByb2JlIHJlcXVlc3QKICAqLwotc3RhdGljIHUxNiBpd2w0OTY1X2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLAotCQkJICAgICAgaW50IGxlZnQsIGludCBpc19kaXJlY3QpCitzdGF0aWMgdTE2IGl3bDQ5NjVfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKKwkJCQkgIGludCBsZWZ0LCBpbnQgaXNfZGlyZWN0KQogewogCWludCBsZW4gPSAwOwogCXU4ICpwb3MgPSBOVUxMOwogCXUxNiBhY3RpdmVfcmF0ZXMsIHJldF9yYXRlcywgY2NrX3JhdGVzLCBhY3RpdmVfcmF0ZV9iYXNpYzsKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CisJCQkJCQlpd2w0OTY1X2dldF9od19tb2RlKHByaXYsIGJhbmQpOwogI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgcHJvYmUgcmVxdWVzdCwKQEAgLTE5OTUsMTMgKzEzMDcsMTggQEAKIAkJbGVuICs9IDIgKyAqcG9zOwogCiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLQltb2RlID0gcHJpdi0+aHctPmNvbmYubW9kZTsKLQlpZiAobW9kZS0+aHRfaW5mby5odF9zdXBwb3J0ZWQpIHsKKwlpZiAoc2JhbmQgJiYgc2JhbmQtPmh0X2luZm8uaHRfc3VwcG9ydGVkKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpodF9jYXA7CiAJCXBvcyArPSAoKnBvcykgKyAxOwogCQkqcG9zKysgPSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOwogCQkqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOwotCQlpd2w0OTY1X3NldF9odF9jYXBhYihwcml2LT5odywKLQkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKilwb3MsIDApOworCQlodF9jYXAgPSAoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKilwb3M7CisJCWh0X2NhcC0+Y2FwX2luZm8gPSBjcHVfdG9fbGUxNihzYmFuZC0+aHRfaW5mby5jYXApOworCQltZW1jcHkoaHRfY2FwLT5zdXBwX21jc19zZXQsIHNiYW5kLT5odF9pbmZvLnN1cHBfbWNzX3NldCwgMTYpOworCQlodF9jYXAtPmFtcGR1X3BhcmFtc19pbmZvID0oc2JhbmQtPmh0X2luZm8uYW1wZHVfZmFjdG9yICYKKwkJCQkJICAgIElFRUU4MDIxMV9IVF9DQVBfQU1QRFVfRkFDVE9SKSB8CisJCQkJCSAgICAoKHNiYW5kLT5odF9pbmZvLmFtcGR1X2RlbnNpdHkgPDwgMikgJgorCQkJCQkgICAgSUVFRTgwMjExX0hUX0NBUF9BTVBEVV9ERU5TSVRZKTsKIAkJbGVuICs9IDIgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOwogCX0KICNlbmRpZiAgLypDT05GSUdfSVdMNDk2NV9IVCAqLwpAQCAtMjAxMywxMDMgKzEzMzAsMTUgQEAKIC8qCiAgKiBRb1MgIHN1cHBvcnQKICovCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfUU9TCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF9xb3NfcGFyYW1zX2NvbW1hbmQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpd2w0OTY1X3Fvc3BhcmFtX2NtZCAqcW9zKQogewogCi0JcmV0dXJuIGl3bDQ5NjVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1FPU19QQVJBTSwKKwlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9RT1NfUEFSQU0sCiAJCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3Fvc3BhcmFtX2NtZCksIHFvcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcmVzZXRfcW9zKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0JdTE2IGN3X21pbiA9IDE1OwotCXUxNiBjd19tYXggPSAxMDIzOwotCXU4IGFpZnMgPSAyOwotCXU4IGlzX2xlZ2FjeSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7Ci0JCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlKQotCQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDE7Ci0JCWlmICghKHByaXYtPmFjdGl2ZV9yYXRlICYgMHhmZmYwKSkgewotCQkJY3dfbWluID0gMzE7Ci0JCQlpc19sZWdhY3kgPSAxOwotCQl9Ci0JfSBlbHNlIGlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7Ci0JCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlKQotCQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDE7Ci0JfSBlbHNlIGlmICghKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSkgewotCQljd19taW4gPSAzMTsKLQkJaXNfbGVnYWN5ID0gMTsKLQl9Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKLQkJYWlmcyA9IDM7Ci0KLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uY3dfbWluID0gY3B1X3RvX2xlMTYoY3dfbWluKTsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uY3dfbWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uYWlmc24gPSBhaWZzOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5lZGNhX3R4b3AgPSAwOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5yZXNlcnZlZDEgPSAwOwotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpIHsKLQkJaSA9IDE7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPSBjcHVfdG9fbGUxNihjd19taW4pOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gNzsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9IDA7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCi0JCWkgPSAyOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0KLQkJCWNwdV90b19sZTE2KChjd19taW4gKyAxKSAvIDIgLSAxKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9Ci0JCQljcHVfdG9fbGUxNihjd19tYXgpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSAyOwotCQlpZiAoaXNfbGVnYWN5KQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoNjAxNik7Ci0JCWVsc2UKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDMwMDgpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQotCQlpID0gMzsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9Ci0JCQljcHVfdG9fbGUxNigoY3dfbWluICsgMSkgLyA0IC0gMSk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPQotCQkJY3B1X3RvX2xlMTYoKGN3X21heCArIDEpIC8gMiAtIDEpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSAyOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQkJaWYgKGlzX2xlZ2FjeSkKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDMyNjQpOwotCQllbHNlCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNigxNTA0KTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0KLQkJCQljcHVfdG9fbGUxNihjd19taW4pOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9Ci0JCQkJY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IGFpZnM7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0gMDsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCQl9Ci0JfQotCUlXTF9ERUJVR19RT1MoInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCB1OCBmb3JjZSkKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjEzNyw3ICsxMzY2LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChmb3JjZSB8fCBpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoZm9yY2UgfHwgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJSVdMX0RFQlVHX1FPUygic2VuZCBRb1MgY21kIHdpdGggUW9zIGFjdGl2ZT0lZCBGTEFHUz0weCVYXG4iLAogCQkJCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUsCiAJCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyk7CkBAIC0yMTQ3LDcgKzEzNzYsNiBAQAogCX0KIH0KIAotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X1FPUyAqLwogLyoKICAqIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlciEpIGZ1bmN0aW9ucwogICovCkBAIC0yMTg4LDcgKzE0MTYsNyBAQAogCQkgU0xQX1ZFQyg0LCA3LCAxMCwgMTAsIDB4RkYpfSwgMH0KIH07CiAKLWludCBpd2w0OTY1X3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitpbnQgaXdsNDk2NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMCwgaTsKIAlzdHJ1Y3QgaXdsNDk2NV9wb3dlcl9tZ3IgKnBvd19kYXRhOwpAQCAtMjIyNyw3ICsxNDU1LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV91cGRhdGVfcG93ZXJfY21kKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDQ5NjVfdXBkYXRlX3Bvd2VyX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IGl3bDQ5NjVfcG93ZXJ0YWJsZV9jbWQgKmNtZCwgdTMyIG1vZGUpCiB7CiAJaW50IHJjID0gMCwgaTsKQEAgLTIyOTEsNyArMTUxOSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2VuZF9wb3dlcl9tb2RlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUzMiBtb2RlKQorc3RhdGljIGludCBpd2w0OTY1X3NlbmRfcG93ZXJfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBtb2RlKQogewogCXUzMiB1bmluaXRpYWxpemVkX3ZhcihmaW5hbF9tb2RlKTsKIAlpbnQgcmM7CkBAIC0yMzE2LDcgKzE1NDQsNyBAQAogCiAJaXdsNDk2NV91cGRhdGVfcG93ZXJfY21kKHByaXYsICZjbWQsIGZpbmFsX21vZGUpOwogCi0JcmMgPSBpd2w0OTY1X3NlbmRfY21kX3BkdShwcml2LCBQT1dFUl9UQUJMRV9DTUQsIHNpemVvZihjbWQpLCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUE9XRVJfVEFCTEVfQ01ELCBzaXplb2YoY21kKSwgJmNtZCk7CiAKIAlpZiAoZmluYWxfbW9kZSA9PSBJV0xfUE9XRVJfTU9ERV9DQU0pCiAJCWNsZWFyX2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTIzMjYsNyArMTU1NCw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgaXdsNDk2NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoraW50IGl3bDQ5NjVfaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQogewogCS8qIEZpbHRlciBpbmNvbWluZyBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSB0YXJnZXRlZCB0b3dhcmQKIAkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KQEAgLTIzNDksNiArMTU3Nyw4IEBACiAJCQlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIyLCBwcml2LT5ic3NpZCk7CiAJCS8qIHBhY2tldHMgdG8gb3VyIGFkYXB0ZXIgZ28gdGhyb3VnaCAqLwogCQlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxLCBwcml2LT5tYWNfYWRkcik7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC0yMzg3LDcgKzE2MTcsNyBAQAogICoKICAqIE5PVEU6IHByaXYtPm11dGV4IGlzIG5vdCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X3NjYW5fY2FuY2VsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewogCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTI0MTUsNyArMTY0NSw3IEBACiAgKgogICogTk9URTogcHJpdi0+bXV0ZXggbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KICAqLwotc3RhdGljIGludCBpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcykKK3N0YXRpYyBpbnQgaXdsNDk2NV9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcykKIHsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJaW50IHJldDsKQEAgLTI0MzQsNyArMTY2NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9zZXF1ZW5jZV9yZXNldChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9zZXF1ZW5jZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogUmVzZXQgaWVlZSBzdGF0cyAqLwogCkBAIC0yNDY0LDcgKzE2OTQsNyBAQAogCXJldHVybiBjcHVfdG9fbGUxNihuZXdfdmFsKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTY0IGludGVydmFsX3RtX3VuaXQ7CiAJdTY0IHRzZiwgcmVzdWx0OwpAQCAtMjQ3NSwxMyArMTcwNSwxMyBAQAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlwcml2LT5yeG9uX3RpbWluZy50aW1lc3RhbXAuZHdbMV0gPSBjcHVfdG9fbGUzMihwcml2LT50aW1lc3RhbXAxKTsKLQlwcml2LT5yeG9uX3RpbWluZy50aW1lc3RhbXAuZHdbMF0gPSBjcHVfdG9fbGUzMihwcml2LT50aW1lc3RhbXAwKTsKKwlwcml2LT5yeG9uX3RpbWluZy50aW1lc3RhbXAuZHdbMV0gPSBjcHVfdG9fbGUzMihwcml2LT50aW1lc3RhbXAgPj4gMzIpOworCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcC5kd1swXSA9CisJCQkJY3B1X3RvX2xlMzIocHJpdi0+dGltZXN0YW1wICYgMHhGRkZGRkZGRik7CiAKIAlwcml2LT5yeG9uX3RpbWluZy5saXN0ZW5faW50ZXJ2YWwgPSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTDsKIAotCXRzZiA9IHByaXYtPnRpbWVzdGFtcDE7Ci0JdHNmID0gKCh0c2YgPDwgMzIpIHwgcHJpdi0+dGltZXN0YW1wMCk7CisJdHNmID0gcHJpdi0+dGltZXN0YW1wOwogCiAJYmVhY29uX2ludCA9IHByaXYtPmJlYWNvbl9pbnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMjUyMCwxNCArMTc1MCwxNCBAQAogCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdykpOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CiAJCUlXTF9FUlJPUigiQVBzIGRvbid0IHNjYW4uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFpd2w0OTY1X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKIAkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vdCByZWFkeS5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0yNTU0LDI3ICsxNzg0LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdsNDk2NV9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCkKKworc3RhdGljIHZvaWQgaXdsNDk2NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0KLQlpZiAoaHdfZGVjcnlwdCkKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0JZWxzZQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHU4IHBoeW1vZGUpCi17Ci0JaWYgKHBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFBKSB7CisJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KIAkJICAgIH4oUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLCiAJCSAgICAgIHwgUlhPTl9GTEdfQ0NLX01TSyk7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKIAl9IGVsc2UgewotCQkvKiBDb3BpZWQgZnJvbSBpd2w0OTY1X2JnX3Bvc3RfYXNzb2NpYXRlKCkgKi8KKwkJLyogQ29waWVkIGZyb20gaXdsNDk2NV9wb3N0X2Fzc29jaWF0ZSgpICovCiAJCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKIAkJZWxzZQpAQCAtMjU5Miw5ICsxODEyLDkgQEAKIC8qCiAgKiBpbml0aWFsaXplIHJ4b24gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMgZnJvbSBlZXByb20KICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWNvbnN0IHN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAogCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSk7CiAKQEAgLTI2MjAsNiArMTg0MCw5IEBACiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyB8CiAJCSAgICBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgfCBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSAlZFxuIiwgcHJpdi0+aXdfbW9kZSk7CisJCWJyZWFrOwogCX0KIAogI2lmIDAKQEAgLTI2MzEsNyArMTg1NCw3IEBACiAJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CiAjZW5kaWYKIAotCWNoX2luZm8gPSBpd2w0OTY1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+cGh5bW9kZSwKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKIAkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKTsKIAogCWlmICghY2hfaW5mbykKQEAgLTI2NDYsMTIgKzE4NjksOSBAQAogCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7Ci0JaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pKQotCQlwcml2LT5waHltb2RlID0gTU9ERV9JRUVFODAyMTFBOwotCWVsc2UKLQkJcHJpdi0+cGh5bW9kZSA9IE1PREVfSUVFRTgwMjExRzsKKwlwcml2LT5iYW5kID0gY2hfaW5mby0+YmFuZDsKIAotCWl3bDQ5NjVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHByaXYsIHByaXYtPnBoeW1vZGUpOworCWl3bDQ5NjVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHByaXYsIHByaXYtPmJhbmQpOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQogCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CkBAIC0yNjY3LDEzICsxODg3LDEzIEBACiAJaXdsNDk2NV9zZXRfcnhvbl9jaGFpbihwcml2KTsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X3NldF9tb2RlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCBtb2RlKQorc3RhdGljIGludCBpd2w0OTY1X3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7CiAJaWYgKG1vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQljb25zdCBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCi0JCWNoX2luZm8gPSBpd2w0OTY1X2dldF9jaGFubmVsX2luZm8ocHJpdiwKLQkJCXByaXYtPnBoeW1vZGUsCisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAorCQkJcHJpdi0+YmFuZCwKIAkJCWxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSk7CiAKIAkJaWYgKCFjaF9pbmZvIHx8ICFpc19jaGFubmVsX2lic3MoY2hfaW5mbykpIHsKQEAgLTI2ODgsMTAgKzE5MDgsMTAgQEAKIAlpd2w0OTY1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdik7CiAJbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKLQlpd2w0OTY1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOworCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBkb250IGNvbW1pdCByeG9uIGlmIHJmLWtpbGwgaXMgb24qLwotCWlmICghaXdsNDk2NV9pc19yZWFkeV9yZihwcml2KSkKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKQEAgLTI3MDYsNDQgKzE5MjYsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9idWlsZF90eF9jbWRfaHdjcnlwdG8oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmN0bCwKLQkJCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV9jbWQgKmNtZCwKKwkJCQkgICAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2JfZnJhZywKLQkJCQkgICAgICBpbnQgbGFzdF9mcmFnKQorCQkJCSAgICAgIGludCBzdGFfaWQpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfaHdfa2V5ICprZXlpbmZvID0gJnByaXYtPnN0YXRpb25zW2N0bC0+a2V5X2lkeF0ua2V5aW5mbzsKKwlzdHJ1Y3QgaXdsNDk2NV9od19rZXkgKmtleWluZm8gPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvOworCXN0cnVjdCBpd2xfd2VwX2tleSAqd2Vwa2V5OworCWludCBrZXlpZHggPSAwOworCisJQlVHX09OKGN0bC0+a2V5X2lkeCA+IDMpOwogCiAJc3dpdGNoIChrZXlpbmZvLT5hbGcpIHsKIAljYXNlIEFMR19DQ01QOgogCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19DQ007CiAJCW1lbWNweShjbWQtPmNtZC50eC5rZXksIGtleWluZm8tPmtleSwga2V5aW5mby0+a2V5bGVuKTsKKwkJaWYgKGN0bC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfQU1QRFUpCisJCQljbWQtPmNtZC50eC50eF9mbGFncyB8PSBUWF9DTURfRkxHX0FHR19DQ01QX01TSzsKIAkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCBhZXMgaHdjcnlwdG9cbiIpOwogCQlicmVhazsKIAogCWNhc2UgQUxHX1RLSVA6Ci0jaWYgMAogCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwotCi0JCWlmIChsYXN0X2ZyYWcpCi0JCQltZW1jcHkoY21kLT5jbWQudHgudGtpcF9taWMuYnl0ZSwgc2tiX2ZyYWctPnRhaWwgLSA4LAotCQkJICAgICAgIDgpOwotCQllbHNlCi0JCQltZW1zZXQoY21kLT5jbWQudHgudGtpcF9taWMuYnl0ZSwgMCwgOCk7Ci0jZW5kaWYKKwkJaWVlZTgwMjExX2dldF90a2lwX2tleShrZXlpbmZvLT5jb25mLCBza2JfZnJhZywKKwkJCUlFRUU4MDIxMV9US0lQX1AyX0tFWSwgY21kLT5jbWQudHgua2V5KTsKKwkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCB0a2lwIGh3Y3J5cHRvXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFMR19XRVA6Ci0JCWNtZC0+Y21kLnR4LnNlY19jdGwgPSBUWF9DTURfU0VDX1dFUCB8Ci0JCQkoY3RsLT5rZXlfaWR4ICYgVFhfQ01EX1NFQ19NU0spIDw8IFRYX0NNRF9TRUNfU0hJRlQ7CisJCXdlcGtleSA9ICZwcml2LT53ZXBfa2V5c1tjdGwtPmtleV9pZHhdOworCQljbWQtPmNtZC50eC5zZWNfY3RsID0gMDsKKwkJaWYgKHByaXYtPmRlZmF1bHRfd2VwX2tleSkgeworCQkJLyogdGhlIFdFUCBrZXkgd2FzIHNlbnQgYXMgc3RhdGljICovCisJCQlrZXlpZHggPSBjdGwtPmtleV9pZHg7CisJCQltZW1jcHkoJmNtZC0+Y21kLnR4LmtleVszXSwgd2Vwa2V5LT5rZXksCisJCQkJCQkJd2Vwa2V5LT5rZXlfc2l6ZSk7CisJCQlpZiAod2Vwa2V5LT5rZXlfc2l6ZSA9PSBXRVBfS0VZX0xFTl8xMjgpCisJCQkJY21kLT5jbWQudHguc2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKKwkJfSBlbHNlIHsKKwkJCS8qIHRoZSBXRVAga2V5IHdhcyBzZW50IGFzIGR5bmFtaWMgKi8KKwkJCWtleWlkeCA9IGtleWluZm8tPmtleWlkeDsKKwkJCW1lbWNweSgmY21kLT5jbWQudHgua2V5WzNdLCBrZXlpbmZvLT5rZXksCisJCQkJCQkJa2V5aW5mby0+a2V5bGVuKTsKKwkJCWlmIChrZXlpbmZvLT5rZXlsZW4gPT0gV0VQX0tFWV9MRU5fMTI4KQorCQkJCWNtZC0+Y21kLnR4LnNlY19jdGwgfD0gVFhfQ01EX1NFQ19LRVkxMjg7CisJCX0KIAotCQlpZiAoa2V5aW5mby0+a2V5bGVuID09IDEzKQotCQkJY21kLT5jbWQudHguc2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKLQotCQltZW1jcHkoJmNtZC0+Y21kLnR4LmtleVszXSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOworCQljbWQtPmNtZC50eC5zZWNfY3RsIHw9IChUWF9DTURfU0VDX1dFUCB8CisJCQkoa2V5aWR4ICYgVFhfQ01EX1NFQ19NU0spIDw8IFRYX0NNRF9TRUNfU0hJRlQpOwogCiAJCUlXTF9ERUJVR19UWCgiQ29uZmlndXJpbmcgcGFja2V0IGZvciBXRVAgZW5jcnlwdGlvbiAiCi0JCQkgICAgICJ3aXRoIGtleSAlZFxuIiwgY3RsLT5rZXlfaWR4KTsKKwkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBrZXlpZHgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yNzU1LDggKzE5ODksOCBAQAogLyoKICAqIGhhbmRsZSBidWlsZCBSRVBMWV9UWCBjb21tYW5kIG5vdGlmaWNhdGlvbi4KICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9idWlsZF90eF9jbWRfYmFzaWMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2w0OTY1X2NtZCAqY21kLAorc3RhdGljIHZvaWQgaXdsNDk2NV9idWlsZF90eF9jbWRfYmFzaWMoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGl3bF9jbWQgKmNtZCwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RybCwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkJICBpbnQgaXNfdW5pY2FzdCwgdTggc3RkX2lkKQpAQCAtMjgxMSwyMCArMjA0NSwyNyBAQAogCQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMyk7CiAJCWVsc2UKIAkJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDIpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IDA7CisJfQogCiAJY21kLT5jbWQudHguZHJpdmVyX3R4b3AgPSAwOwogCWNtZC0+Y21kLnR4LnR4X2ZsYWdzID0gdHhfZmxhZ3M7CiAJY21kLT5jbWQudHgubmV4dF9mcmFtZV9sZW4gPSAwOwogfQotCitzdGF0aWMgdm9pZCBpd2xfdXBkYXRlX3R4X3N0YXRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGZjLCB1MTYgbGVuKQoreworCS8qIDAgLSBtZ210LCAxIC0gY250LCAyIC0gZGF0YSAqLworCWludCBpZHggPSAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMjsKKwlwcml2LT50eF9zdGF0c1tpZHhdLmNudCsrOworCXByaXYtPnR4X3N0YXRzW2lkeF0uYnl0ZXMgKz0gbGVuOworfQogLyoqCiAgKiBpd2w0OTY1X2dldF9zdGFfaWQgLSBGaW5kIHN0YXRpb24ncyBpbmRleCB3aXRoaW4gc3RhdGlvbiB0YWJsZQogICoKICAqIElmIG5ldyBJQlNTIHN0YXRpb24sIGNyZWF0ZSBuZXcgZW50cnkgaW4gc3RhdGlvbiB0YWJsZQogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2w0OTY1X2dldF9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJaW50IHN0YV9pZDsKQEAgLTI4MzQsNyArMjA3NSw3IEBACiAJLyogSWYgdGhpcyBmcmFtZSBpcyBicm9hZGNhc3Qgb3IgbWFuYWdlbWVudCwgdXNlIGJyb2FkY2FzdCBzdGF0aW9uIGlkICovCiAJaWYgKCgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3dpdGNoIChwcml2LT5pd19tb2RlKSB7CiAKQEAgLTI4NDgsNyArMjA4OSw3IEBACiAJCXN0YV9pZCA9IGl3bDQ5NjVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQlyZXR1cm4gc3RhX2lkOwotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJLyogSWYgdGhpcyBmcmFtZSBpcyBnb2luZyBvdXQgdG8gYW4gSUJTUyBuZXR3b3JrLCBmaW5kIHRoZSBzdGF0aW9uLAogCSAqIG9yIGNyZWF0ZSBhIG5ldyBzdGF0aW9uIHRhYmxlIGVudHJ5ICovCkBAIC0yODY3LDE5ICsyMTA4LDE5IEBACiAJCUlXTF9ERUJVR19EUk9QKCJTdGF0aW9uICVzIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgogCQkJICAgICAgICJEZWZhdWx0aW5nIHRvIGJyb2FkY2FzdC4uLlxuIiwKIAkJCSAgICAgICBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSk7Ci0JCWl3bDQ5NjVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX0RST1AsICh1OCAqKSBoZHIsIHNpemVvZigqaGRyKSk7Ci0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJaXdsX3ByaW50X2hleF9kdW1wKElXTF9ETF9EUk9QLCAodTggKikgaGRyLCBzaXplb2YoKmhkcikpOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCWRlZmF1bHQ6CiAJCUlXTF9XQVJOSU5HKCJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZCIsIHByaXYtPml3X21vZGUpOwotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCX0KIH0KIAogLyoKICAqIHN0YXJ0IFJFUExZX1RYIGNvbW1hbmQgcHJvY2VzcwogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfdHhfc2tiKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDQ5NjVfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjdGwpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKQEAgLTI4OTEsNyArMjEzMiw3IEBACiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJZG1hX2FkZHJfdCB0eGNtZF9waHlzOwogCWRtYV9hZGRyX3Qgc2NyYXRjaF9waHlzOwotCXN0cnVjdCBpd2w0OTY1X2NtZCAqb3V0X2NtZCA9IE5VTEw7CisJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQgPSBOVUxMOwogCXUxNiBsZW4sIGlkeCwgbGVuX29yZzsKIAl1OCBpZCwgaGRyX2xlbiwgdW5pY2FzdDsKIAl1OCBzdGFfaWQ7CkBAIC0yOTAzLDcgKzIxNDQsNyBAQAogCWludCByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3bDQ5NjVfaXNfcmZraWxsKHByaXYpKSB7CisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKIAkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQpAQCAtMjkxMyw3ICsyMTU0LDcgQEAKIAkJZ290byBkcm9wX3VubG9jazsKIAl9CiAKLQlpZiAoKGN0bC0+dHhfcmF0ZSAmIDB4RkYpID09IElXTF9JTlZBTElEX1JBVEUpIHsKKwlpZiAoKGN0bC0+dHhfcmF0ZS0+aHdfdmFsdWUgJiAweEZGKSA9PSBJV0xfSU5WQUxJRF9SQVRFKSB7CiAJCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQpAQCAtMjkyMyw3ICsyMTY0LDcgQEAKIAogCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKQogCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcXVlc3QoZmMpKQpAQCAtMjkzNCwxMCArMjE3NSwxMCBAQAogCiAJLyogZHJvcCBhbGwgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgJiYKLQkgICAoIWl3bDQ5NjVfaXNfYXNzb2NpYXRlZChwcml2KSB8fAotCSAgICAhcHJpdi0+YXNzb2NfaWQgfHwKKwkgICAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8CisJICAgICgocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpICYmICFwcml2LT5hc3NvY19pZCkgfHwKIAkgICAgIXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtICFpd2w0OTY1X2lzX2Fzc29jaWF0ZWRcbiIpOworCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtMjk2NywxMSArMjIwOCwxMCBAQAogCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpOwogCQlzZXFfbnVtYmVyICs9IDB4MTA7CiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVF9BR0cKIAkJLyogYWdncmVnYXRpb24gaXMgb24gZm9yIHRoaXMgPHN0YSx0aWQ+ICovCi0JCWlmIChjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0hUX01QRFVfQUdHKQorCQlpZiAoY3RsLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9BTVBEVSkKIAkJCXR4cV9pZCA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnR4cV9pZDsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVF9BR0cgKi8KKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlKys7CiAjZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KIAl9CiAKQEAgLTMwMjAsOCArMjI2MCw4IEBACiAJICogb2YgdGhlIE1BQyBoZWFkZXIgKGRldmljZSByZWFkcyBvbiBkd29yZCBib3VuZGFyaWVzKS4KIAkgKiBXZSdsbCB0ZWxsIGRldmljZSBhYm91dCB0aGlzIHBhZGRpbmcgbGF0ZXIuCiAJICovCi0JbGVuID0gcHJpdi0+aHdfc2V0dGluZy50eF9jbWRfbGVuICsKLQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKKwlsZW4gPSBwcml2LT5od19wYXJhbXMudHhfY21kX2xlbiArCisJCXNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKIAogCWxlbl9vcmcgPSBsZW47CiAJbGVuID0gKGxlbiArIDMpICYgfjM7CkBAIC0zMDMzLDE1ICsyMjczLDE1IEBACiAKIAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgVHggY29tbWFuZCdzIGhlYWRlciAobm90IE1BQyBoZWFkZXIhKSwKIAkgKiB3aXRoaW4gY29tbWFuZCBidWZmZXIgYXJyYXkuICovCi0JdHhjbWRfcGh5cyA9IHR4cS0+ZG1hX2FkZHJfY21kICsgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2NtZCkgKiBpZHggKwotCQkgICAgIG9mZnNldG9mKHN0cnVjdCBpd2w0OTY1X2NtZCwgaGRyKTsKKwl0eGNtZF9waHlzID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2Yoc3RydWN0IGl3bF9jbWQpICogaWR4ICsKKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaXdsX2NtZCwgaGRyKTsKIAogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KIAlpd2w0OTY1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHR4Y21kX3BoeXMsIGxlbik7CiAKIAlpZiAoIShjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUKSkKLQkJaXdsNDk2NV9idWlsZF90eF9jbWRfaHdjcnlwdG8ocHJpdiwgY3RsLCBvdXRfY21kLCBza2IsIDApOworCQlpd2w0OTY1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhwcml2LCBjdGwsIG91dF9jbWQsIHNrYiwgc3RhX2lkKTsKIAogCS8qIFNldCB1cCBURkQncyAybmQgZW50cnkgdG8gcG9pbnQgZGlyZWN0bHkgdG8gcmVtYWluZGVyIG9mIHNrYiwKIAkgKiBpZiBhbnkgKDgwMi4xMSBudWxsIGZyYW1lcyBoYXZlIG5vIHBheWxvYWQpLiAqLwpAQCAtMzA2NiwxOSArMjMwNiwxMyBAQAogCS8qIHNldCBpc19oY2NhIHRvIDA7IGl0IHByb2JhYmx5IHdpbGwgbmV2ZXIgYmUgaW1wbGVtZW50ZWQgKi8KIAlpd2w0OTY1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHByaXYsIG91dF9jbWQsIGN0bCwgaGRyLCBzdGFfaWQsIDApOwogCi0Jc2NyYXRjaF9waHlzID0gdHhjbWRfcGh5cyArIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9jbWRfaGVhZGVyKSArCisJaXdsX3VwZGF0ZV90eF9zdGF0cyhwcml2LCBmYywgbGVuKTsKKworCXNjcmF0Y2hfcGh5cyA9IHR4Y21kX3BoeXMgKyBzaXplb2Yoc3RydWN0IGl3bF9jbWRfaGVhZGVyKSArCiAJCW9mZnNldG9mKHN0cnVjdCBpd2w0OTY1X3R4X2NtZCwgc2NyYXRjaCk7CiAJb3V0X2NtZC0+Y21kLnR4LmRyYW1fbHNiX3B0ciA9IGNwdV90b19sZTMyKHNjcmF0Y2hfcGh5cyk7CiAJb3V0X2NtZC0+Y21kLnR4LmRyYW1fbXNiX3B0ciA9IGl3bF9nZXRfZG1hX2hpX2FkZHJlc3Moc2NyYXRjaF9waHlzKTsKIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JLyogVE9ETzogbW92ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gcmF0ZSBzY2FsaW5nICovCi0JaXdsNDk2NV90bF9nZXRfc3RhdHMocHJpdiwgaGRyKTsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVF9BR0cgKi8KLSNlbmRpZiAvKkNPTkZJR19JV0w0OTY1X0hUICovCi0KLQogCWlmICghaWVlZTgwMjExX2dldF9tb3JlZnJhZyhoZHIpKSB7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAxOwogCQlpZiAocWMpIHsKQEAgLTMwOTAsMTcgKzIzMjQsMTcgQEAKIAkJdHhxLT5uZWVkX3VwZGF0ZSA9IDA7CiAJfQogCi0JaXdsNDk2NV9wcmludF9oZXhfZHVtcChJV0xfRExfVFgsIG91dF9jbWQtPmNtZC5wYXlsb2FkLAorCWl3bF9wcmludF9oZXhfZHVtcChJV0xfRExfVFgsIG91dF9jbWQtPmNtZC5wYXlsb2FkLAogCQkJICAgc2l6ZW9mKG91dF9jbWQtPmNtZC50eCkpOwogCi0JaXdsNDk2NV9wcmludF9oZXhfZHVtcChJV0xfRExfVFgsICh1OCAqKW91dF9jbWQtPmNtZC50eC5oZHIsCisJaXdsX3ByaW50X2hleF9kdW1wKElXTF9ETF9UWCwgKHU4ICopb3V0X2NtZC0+Y21kLnR4LmhkciwKIAkJCSAgIGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKSk7CiAKIAkvKiBTZXQgdXAgZW50cnkgZm9yIHRoaXMgVEZEIGluIFR4IGJ5dGUtY291bnQgYXJyYXkgKi8KLQlpd2w0OTY1X3R4X3F1ZXVlX3VwZGF0ZV93cl9wdHIocHJpdiwgdHhxLCBsZW4pOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgbGVuKTsKIAogCS8qIFRlbGwgZGV2aWNlIHRoZSB3cml0ZSBpbmRleCAqanVzdCBwYXN0KiB0aGlzIGxhdGVzdCBmaWxsZWQgVEZEICovCi0JcS0+d3JpdGVfcHRyID0gaXdsNDk2NV9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOworCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwogCXJjID0gaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC0zMTI3LDEzICsyMzYxLDEzIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3NldF9yYXRlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X3NldF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKmh3ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpodyA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCWludCBpOwogCi0JaHcgPSBpd2w0OTY1X2dldF9od19tb2RlKHByaXYsIHByaXYtPnBoeW1vZGUpOworCWh3ID0gaXdsNDk2NV9nZXRfaHdfbW9kZShwcml2LCBwcml2LT5iYW5kKTsKIAlpZiAoIWh3KSB7CiAJCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwogCQlyZXR1cm47CkBAIC0zMTQyLDI0ICsyMzc2LDEwIEBACiAJcHJpdi0+YWN0aXZlX3JhdGUgPSAwOwogCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKIAotCUlXTF9ERUJVR19SQVRFKCJTZXR0aW5nIHJhdGVzIGZvciA4MDIuMTElY1xuIiwKLQkJICAgICAgIGh3LT5tb2RlID09IE1PREVfSUVFRTgwMjExQSA/Ci0JCSAgICAgICAnYScgOiAoKGh3LT5tb2RlID09IE1PREVfSUVFRTgwMjExQikgPyAnYicgOiAnZycpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBody0+bnVtX3JhdGVzOyBpKyspIHsKLQkJcmF0ZSA9ICYoaHctPnJhdGVzW2ldKTsKLQkJaWYgKChyYXRlLT52YWwgPCBJV0xfUkFURV9DT1VOVCkgJiYKLQkJICAgIChyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1NVUFBPUlRFRCkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJBZGRpbmcgcmF0ZSBpbmRleCAlZCAocGxjcCAlZCklc1xuIiwKLQkJCQkgICAgICAgcmF0ZS0+dmFsLCBpd2w0OTY1X3JhdGVzW3JhdGUtPnZhbF0ucGxjcCwKLQkJCQkgICAgICAgKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfQkFTSUMpID8KLQkJCQkgICAgICAgIioiIDogIiIpOwotCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+dmFsKTsKLQkJCWlmIChyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0JBU0lDKQotCQkJCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljIHw9ICgxIDw8IHJhdGUtPnZhbCk7Ci0JCX0gZWxzZQotCQkJSVdMX0RFQlVHX1JBVEUoIk5vdCBhZGRpbmcgcmF0ZSAlZCAocGxjcCAlZClcbiIsCi0JCQkJICAgICAgIHJhdGUtPnZhbCwgaXdsNDk2NV9yYXRlc1tyYXRlLT52YWxdLnBsY3ApOworCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7CisJCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQorCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOwogCX0KIAogCUlXTF9ERUJVR19SQVRFKCJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLApAQCAtMzE4OCw3ICsyNDA4LDcgQEAKIAkJICAgKElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3JhZGlvX2tpbGxfc3coc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgaW50IGRpc2FibGVfcmFkaW8pCit2b2lkIGl3bDQ5NjVfcmFkaW9fa2lsbF9zdyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTMyMDMsMTcgKzI0MjMsMjYgQEAKIAkJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwogCQlpZiAocHJpdi0+aXdfbW9kZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCisJCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCiAJCQkJICAgIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDQ5NjVfc2VuZF9jYXJkX3N0YXRlKHByaXYsIENBUkRfU1RBVEVfQ01EX0RJU0FCTEUsIDApOworCQkJLyogY2FsbCB0aGUgaG9zdCBjb21tYW5kIG9ubHkgaWYgbm8gaHcgcmYta2lsbCBzZXQgKi8KKwkJCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpICYmCisJCQkgICAgaXdsX2lzX3JlYWR5KHByaXYpKQorCQkJCWl3bDQ5NjVfc2VuZF9jYXJkX3N0YXRlKHByaXYsCisJCQkJCQkJQ0FSRF9TVEFURV9DTURfRElTQUJMRSwKKwkJCQkJCQkwKTsKIAkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOworCisJCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCisJCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKKwkJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOwogCQl9CiAJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKIAogCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMzIyMiw5ICsyNDUxLDkgQEAKIAltc2xlZXAoMTApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2w0OTY1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0JaWYgKCFpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KSkKLQkJaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7CisJaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKQorCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKQEAgLTMyMzcsNyArMjQ2Niw3IEBACiAJcmV0dXJuOwogfQogCi12b2lkIGl3bDQ5NjVfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCit2b2lkIGl3bDQ5NjVfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICB1MzIgZGVjcnlwdF9yZXMsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKIHsKIAl1MTYgZmMgPQpAQCAtMzI1Miw2ICsyNDgxLDEyIEBACiAJSVdMX0RFQlVHX1JYKCJkZWNyeXB0X3JlczoweCV4XG4iLCBkZWNyeXB0X3Jlcyk7CiAJc3dpdGNoIChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLKSB7CiAJY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1RLSVA6CisJCS8qIFRoZSB1Q29kZSBoYXMgZ290IGEgYmFkIHBoYXNlIDEgS2V5LCBwdXNoZXMgdGhlIHBhY2tldC4KKwkJICogRGVjcnlwdGlvbiB3aWxsIGJlIGRvbmUgaW4gU1cuICovCisJCWlmICgoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfVFlQRV9NU0spID09CisJCSAgICBSWF9SRVNfU1RBVFVTX0JBRF9LRVlfVFRBSykKKwkJCWJyZWFrOworCiAJCWlmICgoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfVFlQRV9NU0spID09CiAJCSAgICBSWF9SRVNfU1RBVFVTX0JBRF9JQ1ZfTUlDKQogCQkJc3RhdHMtPmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOwpAQCAtMzI3Miw3ICsyNTA3LDcgQEAKIAogI2RlZmluZSBJV0xfUEFDS0VUX1JFVFJZX1RJTUUgSFoKIAotaW50IGl3bDQ5NjVfaXNfZHVwbGljYXRlX3BhY2tldChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoraW50IGl3bDQ5NjVfaXNfZHVwbGljYXRlX3BhY2tldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCiB7CiAJdTE2IHNjID0gbGUxNl90b19jcHUoaGVhZGVyLT5zZXFfY3RybCk7CiAJdTE2IHNlcSA9IChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKQEAgLTMzODksMTMgKzI2MjQsMTMgQEAKIAlyZXR1cm4gY3B1X3RvX2xlMzIocmVzKTsKIH0KIAotc3RhdGljIGludCBpd2w0OTY1X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2w0OTY1X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgKnBhcmFtcywKIAkJCSAgICAgICB1OCB0eXBlKQogewogCXN0cnVjdCBpd2w0OTY1X3NwZWN0cnVtX2NtZCBzcGVjdHJ1bTsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnJlczsKLQlzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCwKIAkJLmRhdGEgPSAodm9pZCAqKSZzcGVjdHJ1bSwKIAkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCkBAIC0zNDA1LDcgKzI2NDAsNyBAQAogCWludCBzcGVjdHJ1bV9yZXNwX3N0YXR1czsKIAlpbnQgZHVyYXRpb24gPSBsZTE2X3RvX2NwdShwYXJhbXMtPmR1cmF0aW9uKTsKIAotCWlmIChpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQogCQlhZGRfdGltZSA9CiAJCSAgICBpd2w0OTY1X3VzZWNzX3RvX2JlYWNvbnMoCiAJCQlsZTY0X3RvX2NwdShwYXJhbXMtPnN0YXJ0X3RpbWUpIC0gcHJpdi0+bGFzdF90c2YsCkBAIC0zNDIwLDcgKzI2NTUsNyBAQAogCWNtZC5sZW4gPSBzaXplb2Yoc3BlY3RydW0pOwogCXNwZWN0cnVtLmxlbiA9IGNwdV90b19sZTE2KGNtZC5sZW4gLSBzaXplb2Yoc3BlY3RydW0ubGVuKSk7CiAKLQlpZiAoaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpKQorCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKIAkJc3BlY3RydW0uc3RhcnRfdGltZSA9CiAJCSAgICBpd2w0OTY1X2FkZF9iZWFjb25fdGltZShwcml2LT5sYXN0X2JlYWNvbl90aW1lLAogCQkJCWFkZF90aW1lLApAQCAtMzQzNSw3ICsyNjcwLDcgQEAKIAkJc3BlY3RydW0uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwKIAkJICAgIFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8IFJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKIAotCXJjID0gaXdsNDk2NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTM0NjksNyArMjcwNCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaXdsNDk2NV90eHN0YXR1c190b19pZWVlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3R4c3RhdHVzX3RvX2llZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaXdsNDk2NV90eF9pbmZvICp0eF9zdGEpCiB7CiAKQEAgLTM0OTUsNyArMjczMCw3IEBACiAgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gQXMgcmVzdWx0LCBzb21lIGZyZWUgc3BhY2UgZm9ybXMuICBJZiB0aGVyZSBpcwogICogZW5vdWdoIGZyZWUgc3BhY2UgKD4gbG93IG1hcmspLCB3YWtlIHRoZSBzdGFjayB0aGF0IGZlZWRzIHVzLgogICovCi1pbnQgaXdsNDk2NV90eF9xdWV1ZV9yZWNsYWltKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCBpbmRleCkKK2ludCBpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlzdHJ1Y3QgaXdsNDk2NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7CkBAIC0zNTA4LDkgKzI3NDMsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlmb3IgKGluZGV4ID0gaXdsNDk2NV9xdWV1ZV9pbmNfd3JhcChpbmRleCwgcS0+bl9iZCk7CisJZm9yIChpbmRleCA9IGl3bF9xdWV1ZV9pbmNfd3JhcChpbmRleCwgcS0+bl9iZCk7CiAJCXEtPnJlYWRfcHRyICE9IGluZGV4OwotCQlxLT5yZWFkX3B0ciA9IGl3bDQ5NjVfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CisJCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgewogCQlpZiAodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKSB7CiAJCQlpd2w0OTY1X3R4c3RhdHVzX3RvX2llZWUocHJpdiwKIAkJCQkJJih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdKSk7CkBAIC0zNTIzLDEwICsyNzU4LDEwIEBACiAJCW5mcmVlZCsrOwogCX0KIAotCWlmIChpd2w0OTY1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgorLyoJaWYgKGl3bDQ5NjVfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyayAmJiAodHhxX2lkID49IDApICYmCiAJCQkodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKSAmJgogCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOyAqLwogCiAKIAlyZXR1cm4gbmZyZWVkOwpAQCAtMzU0NSw5ICsyNzgwLDggQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFRfQUdHCiAKLXN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfZ2V0X3JhX3N0YV9pZChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIGlubGluZSBpbnQgaXdsNDk2NV9nZXRfcmFfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCkBAIC0zNTU5LDcgKzI3OTMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9oZHIgKml3bDQ5NjVfdHhfcXVldWVfZ2V0X2hkcigKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgaWR4KQorCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgaW50IGlkeCkKIHsKIAlpZiAocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc2tiWzBdKQogCQlyZXR1cm4gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcHJpdi0+dHhxW3R4cV9pZF0uCkBAIC0zNTc4LDEzICsyODEyLDEzIEBACiAvKioKICAqIGl3bDQ5NjVfdHhfc3RhdHVzX3JlcGx5X3R4IC0gSGFuZGxlIFR4IHJzcG5zZSBmb3IgZnJhbWVzIGluIGFnZ3JlZ2F0aW9uIHF1ZXVlCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9zdGF0dXNfcmVwbHlfdHgoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsNDk2NV90eF9zdGF0dXNfcmVwbHlfdHgoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgIHN0cnVjdCBpd2w0OTY1X2h0X2FnZyAqYWdnLAotCQkJCSAgICAgIHN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgKnR4X3Jlc3AsCisJCQkJICAgICAgc3RydWN0IGl3bDQ5NjVfdHhfcmVzcF9hZ2cgKnR4X3Jlc3AsCiAJCQkJICAgICAgdTE2IHN0YXJ0X2lkeCkKIHsKLQl1MzIgc3RhdHVzOwotCV9fbGUzMiAqZnJhbWVfc3RhdHVzID0gJnR4X3Jlc3AtPnN0YXR1czsKKwl1MTYgc3RhdHVzOworCXN0cnVjdCBhZ2dfdHhfc3RhdHVzICpmcmFtZV9zdGF0dXMgPSAmdHhfcmVzcC0+c3RhdHVzOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICp0eF9zdGF0dXMgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSBOVUxMOwogCWludCBpLCBzaDsKQEAgLTM1OTcsMzAgKzI4MzEsMzAgQEAKIAlhZ2ctPmZyYW1lX2NvdW50ID0gdHhfcmVzcC0+ZnJhbWVfY291bnQ7CiAJYWdnLT5zdGFydF9pZHggPSBzdGFydF9pZHg7CiAJYWdnLT5yYXRlX25fZmxhZ3MgPSBsZTMyX3RvX2NwdSh0eF9yZXNwLT5yYXRlX25fZmxhZ3MpOwotCWFnZy0+Yml0bWFwMCA9IGFnZy0+Yml0bWFwMSA9IDA7CisJYWdnLT5iaXRtYXAgPSAwOwogCiAJLyogIyBmcmFtZXMgYXR0ZW1wdGVkIGJ5IFR4IGNvbW1hbmQgKi8KIAlpZiAoYWdnLT5mcmFtZV9jb3VudCA9PSAxKSB7CiAJCS8qIE9ubHkgb25lIGZyYW1lIHdhcyBhdHRlbXB0ZWQ7IG5vIGJsb2NrLWFjayB3aWxsIGFycml2ZSAqLwotCQlzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxIDsKLQkJc3RhdHVzID0gbGUzMl90b19jcHUoZnJhbWVfc3RhdHVzWzBdKTsKKwkJc3RhdHVzID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzWzBdLnN0YXR1cyk7CisJCXNlcSAgPSBsZTE2X3RvX2NwdShmcmFtZV9zdGF0dXNbMF0uc2VxdWVuY2UpOworCQlpZHggPSBTRVFfVE9fSU5ERVgoc2VxKTsKKwkJdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcSk7CiAKLQkJdHhxX2lkID0gYWdnLT50eHFfaWQ7Ci0JCXR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiAqLwotCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIFxuIiwKLQkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCk7CisJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAorCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LCBpZHgpOwogCi0JCXR4X3N0YXR1cyA9ICYocHJpdi0+dHhxW3R4cV9pZF0udHhiW3R4cS0+cS5yZWFkX3B0cl0uc3RhdHVzKTsKKwkJdHhfc3RhdHVzID0gJihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5zdGF0dXMpOwogCQl0eF9zdGF0dXMtPnJldHJ5X2NvdW50ID0gdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZTsKIAkJdHhfc3RhdHVzLT5xdWV1ZV9udW1iZXIgPSBzdGF0dXMgJiAweGZmOwotCQl0eF9zdGF0dXMtPnF1ZXVlX2xlbmd0aCA9IHR4X3Jlc3AtPmJ0X2tpbGxfY291bnQ7Ci0JCXR4X3N0YXR1cy0+cXVldWVfbGVuZ3RoIHw9IHR4X3Jlc3AtPmZhaWx1cmVfcnRzOwotCisJCXR4X3N0YXR1cy0+cXVldWVfbGVuZ3RoID0gdHhfcmVzcC0+ZmFpbHVyZV9ydHM7CisJCXR4X3N0YXR1cy0+Y29udHJvbC5mbGFncyAmPSB+SUVFRTgwMjExX1RYQ1RMX0FNUERVOwogCQl0eF9zdGF0dXMtPmZsYWdzID0gaXdsNDk2NV9pc190eF9zdWNjZXNzKHN0YXR1cyk/CiAJCQlJRUVFODAyMTFfVFhfU1RBVFVTX0FDSyA6IDA7Ci0JCXR4X3N0YXR1cy0+Y29udHJvbC50eF9yYXRlID0KLQkJCQlpd2w0OTY1X2h3X2dldF9yYXRlX25fZmxhZ3ModHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKTsKKwkJaXdsNDk2NV9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LAorCQkJCQkgICAgIGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCisJCQkJCSAgICAgJnR4X3N0YXR1cy0+Y29udHJvbCk7CiAJCS8qIEZJWE1FOiBjb2RlIHJlcGV0aXRpb24gZW5kICovCiAKIAkJSVdMX0RFQlVHX1RYX1JFUExZKCIxIEZyYW1lIDB4JXggZmFpbHVyZSA6JWRcbiIsCkBAIC0zNjM3LDggKzI4NzEsOCBAQAogCQkvKiBDb25zdHJ1Y3QgYml0LW1hcCBvZiBwZW5kaW5nIGZyYW1lcyB3aXRoaW4gVHggd2luZG93ICovCiAJCWZvciAoaSA9IDA7IGkgPCBhZ2ctPmZyYW1lX2NvdW50OyBpKyspIHsKIAkJCXUxNiBzYzsKLQkJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGZyYW1lX3N0YXR1c1tpXSk7Ci0JCQlzZXEgID0gc3RhdHVzID4+IDE2OworCQkJc3RhdHVzID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzW2ldLnN0YXR1cyk7CisJCQlzZXEgID0gbGUxNl90b19jcHUoZnJhbWVfc3RhdHVzW2ldLnNlcXVlbmNlKTsKIAkJCWlkeCA9IFNFUV9UT19JTkRFWChzZXEpOwogCQkJdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcSk7CiAKQEAgLTM2ODIsMTMgKzI5MTYsMTIgQEAKIAkJCQkJICAgc3RhcnQsICh1MzIpKGJpdG1hcCAmIDB4RkZGRkZGRkYpKTsKIAkJfQogCi0JCWFnZy0+Yml0bWFwMCA9IGJpdG1hcCAmIDB4RkZGRkZGRkY7Ci0JCWFnZy0+Yml0bWFwMSA9IGJpdG1hcCA+PiAzMjsKKwkJYWdnLT5iaXRtYXAgPSBiaXRtYXA7CiAJCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnQ7CiAJCWFnZy0+cmF0ZV9uX2ZsYWdzID0gbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKTsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCV4XG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lcyAlZCBzdGFydF9pZHg9JWQgYml0bWFwPTB4JWxseFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwKLQkJCQkgICBhZ2ctPmJpdG1hcDApOworCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCiAJCWlmIChiaXRtYXApCiAJCQlhZ2ctPndhaXRfZm9yX2JhID0gMTsKQEAgLTM2OTYsMTIgKzI5MjksMTEgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgotI2VuZGlmCiAKIC8qKgogICogaXdsNDk2NV9yeF9yZXBseV90eCAtIEhhbmRsZSBzdGFuZGFyZCAobm9uLWFnZ3JlZ2F0aW9uKSBUeCByZXNwb25zZQogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X3R4KHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X3R4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CiAJc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwpAQCAtMzcxMyw5ICsyOTQ1LDkgQEAKIAlzdHJ1Y3QgaXdsNDk2NV90eF9yZXNwICp0eF9yZXNwID0gKHZvaWQgKikmcGt0LT51LnJhd1swXTsKIAl1MzIgIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cyk7CiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVF9BR0cKLQlpbnQgdGlkLCBzdGFfaWQ7Ci0jZW5kaWYKKwlpbnQgdGlkID0gTUFYX1RJRF9DT1VOVCwgc3RhX2lkID0gSVdMX0lOVkFMSURfU1RBVElPTjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCV9fbGUxNiAqcWM7CiAjZW5kaWYKIAogCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8ICh4Ml9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgewpAQCAtMzcyNyw0NCArMjk1OSw1MSBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFRfQUdHCi0JaWYgKHR4cS0+c2NoZWRfcmV0cnkpIHsKLQkJY29uc3QgdTMyIHNjZF9zc24gPSBpd2w0OTY1X2dldF9zY2Rfc3NuKHR4X3Jlc3ApOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0KLQkJCWl3bDQ5NjVfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGluZGV4KTsKLQkJc3RydWN0IGl3bDQ5NjVfaHRfYWdnICphZ2cgPSBOVUxMOwotCQlfX2xlMTYgKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RybChoZHIpOworCWhkciA9IGl3bDQ5NjVfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGluZGV4KTsKKwlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0cmwoaGRyKTsKIAotCQlpZiAocWMgPT0gTlVMTCkgewotCQkJSVdMX0VSUk9SKCJCVUdfT04gcWMgaXMgbnVsbCEhISFcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0KKwlpZiAocWMpCiAJCXRpZCA9IGxlMTZfdG9fY3B1KCpxYykgJiAweGY7CiAKLQkJc3RhX2lkID0gaXdsNDk2NV9nZXRfcmFfc3RhX2lkKHByaXYsIGhkcik7Ci0JCWlmICh1bmxpa2VseShzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikpIHsKLQkJCUlXTF9FUlJPUigiU3RhdGlvbiBub3Qga25vd24gZm9yXG4iKTsKKwlzdGFfaWQgPSBpd2w0OTY1X2dldF9yYV9zdGFfaWQocHJpdiwgaGRyKTsKKwlpZiAodHhxLT5zY2hlZF9yZXRyeSAmJiB1bmxpa2VseShzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikpIHsKKwkJSVdMX0VSUk9SKCJTdGF0aW9uIG5vdCBrbm93blxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodHhxLT5zY2hlZF9yZXRyeSkgeworCQljb25zdCB1MzIgc2NkX3NzbiA9IGl3bDQ5NjVfZ2V0X3NjZF9zc24odHhfcmVzcCk7CisJCXN0cnVjdCBpd2w0OTY1X2h0X2FnZyAqYWdnID0gTlVMTDsKKworCQlpZiAoIXFjKQogCQkJcmV0dXJuOwotCQl9CiAKIAkJYWdnID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnOwogCi0JCWl3bDQ5NjVfdHhfc3RhdHVzX3JlcGx5X3R4KHByaXYsIGFnZywgdHhfcmVzcCwgaW5kZXgpOworCQlpd2w0OTY1X3R4X3N0YXR1c19yZXBseV90eChwcml2LCBhZ2csCisJCQkJKHN0cnVjdCBpd2w0OTY1X3R4X3Jlc3BfYWdnICopdHhfcmVzcCwgaW5kZXgpOwogCiAJCWlmICgodHhfcmVzcC0+ZnJhbWVfY291bnQgPT0gMSkgJiYKIAkJICAgICFpd2w0OTY1X2lzX3R4X3N1Y2Nlc3Moc3RhdHVzKSkgewogCQkJLyogVE9ETzogc2VuZCBCQVIgKi8KIAkJfQogCi0JCWlmICgodHhxLT5xLnJlYWRfcHRyICE9IChzY2Rfc3NuICYgMHhmZikpKSB7Ci0JCQlpbmRleCA9IGl3bDQ5NjVfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKKwkJaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoc2NkX3NzbiAmIDB4ZmYpKSB7CisJCQlpbnQgZnJlZWQ7CisJCQlpbmRleCA9IGl3bF9xdWV1ZV9kZWNfd3JhcChzY2Rfc3NuICYgMHhmZiwgdHhxLT5xLm5fYmQpOwogCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSBzY2Rfc3NuICIKIAkJCQkJICAgIiVkIGluZGV4ICVkXG4iLCBzY2Rfc3NuICwgaW5kZXgpOwotCQkJaXdsNDk2NV90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOworCQkJZnJlZWQgPSBpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7CisJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CisKKwkJCWlmIChpd2w0OTY1X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrICYmCisJCQkgICAgdHhxX2lkID49IDAgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgorCQkJICAgIGFnZy0+c3RhdGUgIT0gSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBKQorCQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOworCisJCQlpd2w0OTY1X2NoZWNrX2VtcHR5X2h3X3F1ZXVlKHByaXYsIHN0YV9pZCwgdGlkLCB0eHFfaWQpOwogCQl9CiAJfSBlbHNlIHsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVF9BR0cgKi8KICNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwogCXR4X3N0YXR1cyA9ICYodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5zdGF0dXMpOwogCkBAIC0zNzcyLDEyICszMDExLDEwIEBACiAJdHhfc3RhdHVzLT5xdWV1ZV9udW1iZXIgPSBzdGF0dXM7CiAJdHhfc3RhdHVzLT5xdWV1ZV9sZW5ndGggPSB0eF9yZXNwLT5idF9raWxsX2NvdW50OwogCXR4X3N0YXR1cy0+cXVldWVfbGVuZ3RoIHw9IHR4X3Jlc3AtPmZhaWx1cmVfcnRzOwotCiAJdHhfc3RhdHVzLT5mbGFncyA9CiAJICAgIGl3bDQ5NjVfaXNfdHhfc3VjY2VzcyhzdGF0dXMpID8gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0sgOiAwOwotCi0JdHhfc3RhdHVzLT5jb250cm9sLnR4X3JhdGUgPQotCQlpd2w0OTY1X2h3X2dldF9yYXRlX25fZmxhZ3ModHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKTsKKwlpd2w0OTY1X2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCisJCQkJICAgICAmdHhfc3RhdHVzLT5jb250cm9sKTsKIAogCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHJhdGVfbl9mbGFncyAweCV4ICIKIAkJICAgICAicmV0cmllcyAlZFxuIiwgdHhxX2lkLCBpd2w0OTY1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLApAQCAtMzc4NSwxMiArMzAyMiwyMSBAQAogCQkgICAgIHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWUpOwogCiAJSVdMX0RFQlVHX1RYX1JFUExZKCJUeCBxdWV1ZSByZWNsYWltICVkXG4iLCBpbmRleCk7Ci0JaWYgKGluZGV4ICE9IC0xKQotCQlpd2w0OTY1X3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7CisJaWYgKGluZGV4ICE9IC0xKSB7CisJCWludCBmcmVlZCA9IGl3bDQ5NjVfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUX0FHRworCQlpZiAodGlkICE9IE1BWF9USURfQ09VTlQpCisJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CisJCWlmIChpd2w0OTY1X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrICYmCisJCQkodHhxX2lkID49IDApICYmCisJCQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQorCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCWlmICh0aWQgIT0gTUFYX1RJRF9DT1VOVCkKKwkJCWl3bDQ5NjVfY2hlY2tfZW1wdHlfaHdfcXVldWUocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CisjZW5kaWYKIAl9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCisjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKKwl9CiAjZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCkBAIC0zNzk4LDcgKzMwNDQsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcmVwbHlfYWxpdmUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcmVwbHlfYWxpdmUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CkBAIC0zODM0LDcgKzMwODAsNyBAQAogCQlJV0xfV0FSTklORygidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcmVwbHlfYWRkX3N0YShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9yZXBseV9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKQEAgLTM4NDMsNyArMzA4OSw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CiAJc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwpAQCAtMzg1OSw3ICszMTA1LDcgQEAKIAogI2RlZmluZSBUWF9TVEFUVVNfRU5UUlkoeCkgY2FzZSBUWF9TVEFUVVNfRkFJTF8gIyMgeDogcmV0dXJuICN4CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfY3NhKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfY3NhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOwpAQCAtMzg3MCw3ICszMTE2LDcgQEAKIAlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKIHsKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9TUEVDVFJVTV9NRUFTVVJFTUVOVApAQCAtMzg4OCwxMCArMzEzNCwxMCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGl3bDQ5NjVfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKIAlJV0xfREVCVUdfUlgoInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLApAQCAtMzg5OSwyMCArMzE0NSwyMCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CiAJc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCUlXTF9ERUJVR19SQURJTygiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgogCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAogCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2w0OTY1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SQURJTywgcGt0LT51LnJhdywgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOwogfQogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X2JnX2JlYWNvbl91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDQ5NjVfcHJpdiwgYmVhY29uX3VwZGF0ZSk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgYmVhY29uX3VwZGF0ZSk7CiAJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKIAogCS8qIFB1bGwgdXBkYXRlZCBBUCBiZWFjb24gZnJvbSBtYWM4MDIxMS4gd2lsbCBmYWlsIGlmIG5vdCBpbiBBUCBtb2RlICovCkBAIC0zOTM0LDEwICszMTgwLDEwIEBACiAJaXdsNDk2NV9zZW5kX2JlYWNvbl9jbWQocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfYmVhY29uX25vdGlmKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGl3bDQ5NjVfYmVhY29uX25vdGlmICpiZWFjb24gPSAmKHBrdC0+dS5iZWFjb25fc3RhdHVzKTsKIAl1OCByYXRlID0gaXdsNDk2NV9od19nZXRfcmF0ZShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnJhdGVfbl9mbGFncyk7CkBAIC0zOTU3LDEwICszMjAzLDEwIEBACiB9CiAKIC8qIFNlcnZpY2UgcmVzcG9uc2UgdG8gUkVQTFlfU0NBTl9DTUQgKDB4ODApICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3JlcGx5X3NjYW4oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsNDk2NV9zY2FucmVxX25vdGlmaWNhdGlvbiAqbm90aWYgPQogCSAgICAoc3RydWN0IGl3bDQ5NjVfc2NhbnJlcV9ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwpAQCAtMzk3MCw3ICszMjE2LDcgQEAKIH0KIAogLyogU2VydmljZSBTQ0FOX1NUQVJUX05PVElGSUNBVElPTiAoMHg4MikgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfc2Nhbl9zdGFydF9ub3RpZihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9zY2FuX3N0YXJ0X25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKQEAgLTM5ODcsNyArMzIzMyw3IEBACiB9CiAKIC8qIFNlcnZpY2UgU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTiAoMHg4MykgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfc2Nhbl9yZXN1bHRzX25vdGlmKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3NjYW5fcmVzdWx0c19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IGl3bDQ5NjVfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpd2w0OTY1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKQEAgLTQwMTIsNyArMzI1OCw3IEBACiB9CiAKIC8qIFNlcnZpY2UgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04gKDB4ODQpICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3NjYW5fY29tcGxldGVfbm90aWYoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfc2Nhbl9jb21wbGV0ZV9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CkBAIC00MDcwLDcgKzMzMTYsNyBAQAogCiAvKiBIYW5kbGUgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUgdGhhdCBjYXJkJ3MgcG93ZXIgc3RhdGUgaXMgY2hhbmdpbmcKICAqIGR1ZSB0byBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGNyaXRpY2FsIHRlbXBlcmF0dXJlIFJGS0lMTCAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9jYXJkX3N0YXRlX25vdGlmKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3J4X2NhcmRfc3RhdGVfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CiAJc3RydWN0IGl3bDQ5NjVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwpAQCAtNDA4NCwzNSArMzMzMCwzNSBAQAogCWlmIChmbGFncyAmIChTV19DQVJEX0RJU0FCTEVEIHwgSFdfQ0FSRF9ESVNBQkxFRCB8CiAJCSAgICAgUkZfQ0FSRF9ESVNBQkxFRCkpIHsKIAotCQlpd2w0OTY1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAorCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCiAJCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX0NNRF9CTE9DS0VEKTsKIAotCQlpZiAoIWl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7Ci0JCQlpd2w0OTY1X3dyaXRlX2RpcmVjdDMyKAorCQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJCWl3bF93cml0ZV9kaXJlY3QzMigKIAkJCQlwcml2LCBIQlVTX1RBUkdfTUJYX0MsCiAJCQkJSEJVU19UQVJHX01CWF9DX1JFR19CSVRfQ01EX0JMT0NLRUQpOwogCi0JCQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCX0KIAogCQlpZiAoIShmbGFncyAmIFJYT05fQ0FSRF9ESVNBQkxFRCkpIHsKLQkJCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCiAJCQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7Ci0JCQlpZiAoIWl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7Ci0JCQkJaXdsNDk2NV93cml0ZV9kaXJlY3QzMigKKwkJCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQkJCWl3bF93cml0ZV9kaXJlY3QzMigKIAkJCQkJcHJpdiwgSEJVU19UQVJHX01CWF9DLAogCQkJCQlIQlVTX1RBUkdfTUJYX0NfUkVHX0JJVF9DTURfQkxPQ0tFRCk7CiAKLQkJCQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCQkJfQogCQl9CiAKIAkJaWYgKGZsYWdzICYgUkZfQ0FSRF9ESVNBQkxFRCkgewotCQkJaXdsNDk2NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKKwkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKIAkJCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfUkVHX0JJVF9DVF9LSUxMX0VYSVQpOwotCQkJaXdsNDk2NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCQkJaWYgKCFpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KSkKLQkJCQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCWl3bF9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOworCQkJaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKQorCQkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCX0KIAl9CiAKQEAgLTQxNDgsNyArMzM5NCw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGNoYWlucyBpbnRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBmaWxlcyBmb3IgdGhlbSB0byBzZXR1cAogICogYW55IGhhcmR3YXJlIHNwZWNpZmljIGhhbmRsZXJzIGFzIHdlbGwuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FMSVZFXSA9IGl3bDQ5NjVfcnhfcmVwbHlfYWxpdmU7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfQUREX1NUQV0gPSBpd2w0OTY1X3J4X3JlcGx5X2FkZF9zdGE7CkBAIC00MTkwLDcgKzM0MzYsNyBAQAogICogd2lsbCBiZSBleGVjdXRlZC4gIFRoZSBhdHRhY2hlZCBza2IgKGlmIHByZXNlbnQpIHdpbGwgb25seSBiZSBmcmVlZAogICogaWYgdGhlIGNhbGxiYWNrIHJldHVybnMgMQogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3R4X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV90eF9jbWRfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKQEAgLTQxOTksNyArMzQ0NSw3IEBACiAJaW50IGluZGV4ID0gU0VRX1RPX0lOREVYKHNlcXVlbmNlKTsKIAlpbnQgaHVnZSA9IHNlcXVlbmNlICYgU0VRX0hVR0VfRlJBTUU7CiAJaW50IGNtZF9pbmRleDsKLQlzdHJ1Y3QgaXdsNDk2NV9jbWQgKmNtZDsKKwlzdHJ1Y3QgaXdsX2NtZCAqY21kOwogCiAJLyogSWYgYSBUeCBjb21tYW5kIGlzIGJlaW5nIGhhbmRsZWQgYW5kIGl0IGlzbid0IGluIHRoZSBhY3R1YWwKIAkgKiBjb21tYW5kIHF1ZXVlIHRoZW4gdGhlcmUgYSBjb21tYW5kIHJvdXRpbmcgYnVnIGhhcyBiZWVuIGludHJvZHVjZWQKQEAgLTQzMTMsNyArMzU1OSw3IEBACiAvKioKICAqIGl3bDQ5NjVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlciBmb3IgdGhlIFJYIHF1ZXVlCiAgKi8KLWludCBpd2w0OTY1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnEpCitpbnQgaXdsNDk2NV9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnEpCiB7CiAJdTMyIHJlZyA9IDA7CiAJaW50IHJjID0gMDsKQEAgLTQzMjYsMjcgKzM1NzIsMjcgQEAKIAogCS8qIElmIHBvd2VyLXNhdmluZyBpcyBpbiB1c2UsIG1ha2Ugc3VyZSBkZXZpY2UgaXMgYXdha2UgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpIHsKLQkJcmVnID0gaXdsNDk2NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOworCQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKIAogCQlpZiAocmVnICYgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX01BQ19TTEVFUCkgewotCQkJaXdsNDk2NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwkJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAkJCWdvdG8gZXhpdF91bmxvY2s7CiAJCX0KIAotCQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCQlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJCWlmIChyYykKIAkJCWdvdG8gZXhpdF91bmxvY2s7CiAKIAkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1dQVFIsCiAJCQkJICAgICBxLT53cml0ZSAmIH4weDcpOwotCQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCS8qIEVsc2UgZGV2aWNlIGlzIGFzc3VtZWQgdG8gYmUgYXdha2UgKi8KIAl9IGVsc2UKIAkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLCBxLT53cml0ZSAmIH4weDcpOworCQlpd2xfd3JpdGUzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLCBxLT53cml0ZSAmIH4weDcpOwogCiAKIAlxLT5uZWVkX3VwZGF0ZSA9IDA7CkBAIC00MzU5LDcgKzM2MDUsNyBAQAogLyoqCiAgKiBpd2w0OTY1X2RtYV9hZGRyMnJiZF9wdHIgLSBjb252ZXJ0IGEgRE1BIGFkZHJlc3MgdG8gYSB1Q29kZSByZWFkIGJ1ZmZlciBwdHIKICAqLwotc3RhdGljIGlubGluZSBfX2xlMzIgaXdsNDk2NV9kbWFfYWRkcjJyYmRfcHRyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgaW5saW5lIF9fbGUzMiBpd2w0OTY1X2RtYV9hZGRyMnJiZF9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJcmV0dXJuIGNwdV90b19sZTMyKCh1MzIpKGRtYV9hZGRyID4+IDgpKTsKQEAgLTQzNzcsNyArMzYyMyw3IEBACiAgKiBhbHNvIHVwZGF0ZXMgdGhlIG1lbW9yeSBhZGRyZXNzIGluIHRoZSBmaXJtd2FyZSB0byByZWZlcmVuY2UgdGhlIG5ldwogICogdGFyZ2V0IGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBpd2w0OTY1X3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsNDk2NV9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwpAQCAtNDQyOSw3ICszNjc1LDcgQEAKICAqIEFsc28gcmVzdG9jayB0aGUgUnggcXVldWUgdmlhIGl3bDQ5NjVfcnhfcXVldWVfcmVzdG9jay4KICAqIFRoaXMgaXMgY2FsbGVkIGFzIGEgc2NoZWR1bGVkIHdvcmsgaXRlbSAoZXhjZXB0IGZvciBkdXJpbmcgaW5pdGlhbGl6YXRpb24pCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfYWxsb2NhdGUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfYWxsb2NhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CkBAIC00NDQyLDcgKzM2ODgsNyBAQAogCiAJCS8qIEFsbG9jIGEgbmV3IHJlY2VpdmUgYnVmZmVyICovCiAJCXJ4Yi0+c2tiID0KLQkJICAgIGFsbG9jX3NrYihwcml2LT5od19zZXR0aW5nLnJ4X2J1Zl9zaXplLAorCQkgICAgYWxsb2Nfc2tiKHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKIAkJCQlfX0dGUF9OT1dBUk4gfCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFyeGItPnNrYikgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKQEAgLTQ0NTksNyArMzcwNSw3IEBACiAJCS8qIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIFJCL1NLQiAqLwogCQlyeGItPmRtYV9hZGRyID0KIAkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+c2tiLT5kYXRhLAotCQkJICAgcHJpdi0+aHdfc2V0dGluZy5yeF9idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCSAgIHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcnhxLT5yeF9mcmVlKTsKIAkJcnhxLT5mcmVlX2NvdW50Kys7CiAJfQpAQCAtNDQ3MSw3ICszNzE3LDcgQEAKICovCiBzdGF0aWMgdm9pZCBfX2l3bDQ5NjVfcnhfcmVwbGVuaXNoKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGRhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKIAogCWl3bDQ5NjVfcnhfYWxsb2NhdGUocHJpdik7CiAJaXdsNDk2NV9yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOwpAQCAtNDQ4MCw3ICszNzI2LDcgQEAKIAogdm9pZCBpd2w0OTY1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWl3bDQ5NjVfcnhfYWxsb2NhdGUocHJpdik7CkBAIC00NDk1LDE0ICszNzQxLDE0IEBACiAgKiBUaGlzIGZyZWUgcm91dGluZSB3YWxrcyB0aGUgbGlzdCBvZiBQT09MIGVudHJpZXMgYW5kIGlmIFNLQiBpcyBzZXQgdG8KICAqIG5vbiBOVUxMIGl0IGlzIHVubWFwcGVkIGFuZCBmcmVlZAogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnJ4cSkKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfcnhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IFJYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlM7IGkrKykgewogCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkJCSByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCi0JCQkJCSBwcml2LT5od19zZXR0aW5nLnJ4X2J1Zl9zaXplLAorCQkJCQkgcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2IocnhxLT5wb29sW2ldLnNrYik7CiAJCX0KQEAgLTQ1MTMsNyArMzc1OSw3IEBACiAJcnhxLT5iZCA9IE5VTEw7CiB9CiAKLWludCBpd2w0OTY1X3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitpbnQgaXdsNDk2NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CkBAIC00NTQwLDcgKzM3ODYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGl3bDQ5NjVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDQ5NjVfcnhfcXVldWUgKnJ4cSkKK3ZvaWQgaXdsNDk2NV9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2w0OTY1X3J4X3F1ZXVlICpyeHEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKQEAgLTQ1NTQsNyArMzgwMCw3IEBACiAJCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKIAkJCQkJIHJ4cS0+cG9vbFtpXS5kbWFfYWRkciwKLQkJCQkJIHByaXYtPmh3X3NldHRpbmcucnhfYnVmX3NpemUsCisJCQkJCSBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwogCQkJZGV2X2tmcmVlX3NrYihyeHEtPnBvb2xbaV0uc2tiKTsKQEAgLTQ2NTUsNyArMzkwMSw3IEBACiAgKiB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMsIGluY2x1ZGluZyBjb21tYW5kIHJlc3BvbnNlcywKICAqIGZyYW1lLXJlY2VpdmVkIG5vdGlmaWNhdGlvbnMsIGFuZCBvdGhlciBub3RpZmljYXRpb25zLgogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3J4X2hhbmRsZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2w0OTY1X3J4X21lbV9idWZmZXIgKnJ4YjsKIAlzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKnBrdDsKQEAgLTQ2NjQsNyArMzkxMCw3IEBACiAJaW50IHJlY2xhaW07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBmaWxsX3J4ID0gMDsKLQl1MzIgY291bnQgPSAwOworCXUzMiBjb3VudCA9IDg7CiAKIAkvKiB1Q29kZSdzIHJlYWQgaW5kZXggKHN0b3JlZCBpbiBzaGFyZWQgRFJBTSkgaW5kaWNhdGVzIHRoZSBsYXN0IFJ4CiAJICogYnVmZmVyIHRoYXQgdGhlIGRyaXZlciBtYXkgcHJvY2VzcyAobGFzdCBidWZmZXIgZmlsbGVkIGJ5IHVjb2RlKS4gKi8KQEAgLTQ2ODksNyArMzkzNSw3IEBACiAJCXJ4cS0+cXVldWVbaV0gPSBOVUxMOwogCiAJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCByeGItPmRtYV9hZGRyLAotCQkJCQkgICAgcHJpdi0+aHdfc2V0dGluZy5yeF9idWZfc2l6ZSwKKwkJCQkJICAgIHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKIAkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCXBrdCA9IChzdHJ1Y3QgaXdsNDk2NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIApAQCAtNDcwMSw3ICszOTQ3LDcgQEAKIAkJICogICBidXQgYXBwYXJlbnRseSBhIGZldyBkb24ndCBnZXQgc2V0OyBjYXRjaCB0aGVtIGhlcmUuICovCiAJCXJlY2xhaW0gPSAhKHBrdC0+aGRyLnNlcXVlbmNlICYgU0VRX1JYX0ZSQU1FKSAmJgogCQkJKHBrdC0+aGRyLmNtZCAhPSBSRVBMWV9SWF9QSFlfQ01EKSAmJgotCQkJKHBrdC0+aGRyLmNtZCAhPSBSRVBMWV80OTY1X1JYKSAmJgorCQkJKHBrdC0+aGRyLmNtZCAhPSBSRVBMWV9SWCkgJiYKIAkJCShwa3QtPmhkci5jbWQgIT0gUkVQTFlfQ09NUFJFU1NFRF9CQSkgJiYKIAkJCShwa3QtPmhkci5jbWQgIT0gU1RBVElTVElDU19OT1RJRklDQVRJT04pICYmCiAJCQkocGt0LT5oZHIuY21kICE9IFJFUExZX1RYKTsKQEAgLTQ3MjQsNyArMzk3MCw3IEBACiAKIAkJaWYgKHJlY2xhaW0pIHsKIAkJCS8qIEludm9rZSBhbnkgY2FsbGJhY2tzLCB0cmFuc2ZlciB0aGUgc2tiIHRvIGNhbGxlciwgYW5kCi0JCQkgKiBmaXJlIG9mZiB0aGUgKHBvc3NpYmx5KSBibG9ja2luZyBpd2w0OTY1X3NlbmRfY21kKCkKKwkJCSAqIGZpcmUgb2ZmIHRoZSAocG9zc2libHkpIGJsb2NraW5nIGl3bF9zZW5kX2NtZCgpCiAJCQkgKiBhcyB3ZSByZWNsYWltIHRoZSBkcml2ZXIgY29tbWFuZCBxdWV1ZSAqLwogCQkJaWYgKHJ4YiAmJiByeGItPnNrYikKIAkJCQlpd2w0OTY1X3R4X2NtZF9jb21wbGV0ZShwcml2LCByeGIpOwpAQCAtNDc0Miw3ICszOTg4LDcgQEAKIAkJfQogCiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKLQkJCQkgcHJpdi0+aHdfc2V0dGluZy5yeF9idWZfc2l6ZSwKKwkJCQkgcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAogCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkX3RhaWwoJnJ4Yi0+bGlzdCwgJnByaXYtPnJ4cS5yeF91c2VkKTsKQEAgLTQ3NjgsNyArNDAxNCw3IEBACiAvKioKICAqIGl3bDQ5NjVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFNlbmQgbmV3IHdyaXRlIGluZGV4IHRvIGhhcmR3YXJlCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDQ5NjVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICBzdHJ1Y3QgaXdsNDk2NV90eF9xdWV1ZSAqdHhxKQogewogCXUzMiByZWcgPSAwOwpAQCAtNDc4MywyNyArNDAyOSwyNyBAQAogCQkvKiB3YWtlIHVwIG5pYyBpZiBpdCdzIHBvd2VyZWQgZG93biAuLi4KIAkJICogdUNvZGUgd2lsbCB3YWtlIHVwLCBhbmQgaW50ZXJydXB0IHVzIGFnYWluLCBzbyBuZXh0CiAJCSAqIHRpbWUgd2UnbGwgc2tpcCB0aGlzIHBhcnQuICovCi0JCXJlZyA9IGl3bDQ5NjVfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKKwkJcmVnID0gaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7CiAKIAkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKIAkJCUlXTF9ERUJVR19JTkZPKCJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKLQkJCWl3bDQ5NjVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAogCQkvKiByZXN0b3JlIHRoaXMgcXVldWUncyBwYXJhbWV0ZXJzIGluIG5pYyBoYXJkd2FyZS4gKi8KLQkJcmMgPSBpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7Ci0JCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAorCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAogCQkJCSAgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOwotCQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCS8qIGVsc2Ugbm90IGluIHBvd2VyLXNhdmUgbW9kZSwgdUNvZGUgd2lsbCBuZXZlciBzbGVlcCB3aGVuIHdlJ3JlCiAJICogdHJ5aW5nIHRvIHR4IChkdXJpbmcgUkZLSUxMLCB3ZSdyZSBub3QgdHJ5aW5nIHRvIHR4KS4gKi8KIAl9IGVsc2UKLQkJaXdsNDk2NV93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKKwkJaXdsX3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAogCQkJICAgIHR4cS0+cS53cml0ZV9wdHIgfCAodHhxX2lkIDw8IDgpKTsKIAogCXR4cS0+bmVlZF91cGRhdGUgPSAwOwpAQCAtNDgxMSwxMyArNDA1NywxMyBAQAogCXJldHVybiByYzsKIH0KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfcHJpbnRfcnhfY29uZmlnX2NtZChzdHJ1Y3QgaXdsNDk2NV9yeG9uX2NtZCAqcnhvbikKIHsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCUlXTF9ERUJVR19SQURJTygiUlggQ09ORklHOlxuIik7Ci0JaXdsNDk2NV9wcmludF9oZXhfZHVtcChJV0xfRExfUkFESU8sICh1OCAqKSByeG9uLCBzaXplb2YoKnJ4b24pKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7CiAJSVdMX0RFQlVHX1JBRElPKCJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwogCUlXTF9ERUJVR19SQURJTygidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7CiAJSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCkBAIC00ODM0LDI0ICs0MDgwLDMyIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaXdsNDk2NV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJSVdMX0RFQlVHX0lTUigiRW5hYmxpbmcgaW50ZXJydXB0c1xuIik7CiAJc2V0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIENTUl9JTklfU0VUX01BU0spOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgQ1NSX0lOSV9TRVRfTUFTSyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2w0OTY1X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorLyogY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGZsdXNoIGFueSBzY2hlZHVsZWQgdGFza2xldCAqLworc3RhdGljIGlubGluZSB2b2lkIGl3bF9zeW5jaHJvbml6ZV9pcnEoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCS8qIHdhaXQgdG8gbWFrZSBzdXJlIHdlIGZsdXNoIHBlZGRpbmcgdGFza2xldCovCisJc3luY2hyb25pemVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSk7CisJdGFza2xldF9raWxsKCZwcml2LT5pcnFfdGFza2xldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2w0OTY1X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJY2xlYXJfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgZnJvbSB1Q29kZS9OSUMgdG8gaG9zdCAqLwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7CiAKIAkvKiBhY2tub3dsZWRnZS9jbGVhci9yZXNldCBhbnkgaW50ZXJydXB0cyBzdGlsbCBwZW5kaW5nCiAJICogZnJvbSB1Q29kZSBvciBmbG93IGhhbmRsZXIgKFJ4L1R4IERNQSkgKi8KLQlpd2w0OTY1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhmZmZmZmZmZik7Ci0JaXdsNDk2NV93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAweGZmZmZmZmZmKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweGZmZmZmZmZmKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgMHhmZmZmZmZmZik7CiAJSVdMX0RFQlVHX0lTUigiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7CiB9CiAKQEAgLTQ4NzgsNyArNDEzMiw3IEBACiAjZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKICNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBkYXRhMiwgbGluZTsKIAl1MzIgZGVzYywgdGltZSwgY291bnQsIGJhc2UsIGRhdGExOwpAQCAtNDg4NywzNCArNDE0MSwzMyBAQAogCiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAotCWlmICghaXdsNDk2NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CisJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CiAJCUlXTF9FUlJPUigiTm90IHZhbGlkIGVycm9yIGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKLQljb3VudCA9IGl3bDQ5NjVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKKwljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewogCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgQ29uZmlnOiAlMDhYIGNvdW50OiAlZFxuIiwKLQkJCSAgcHJpdi0+c3RhdHVzLCBwcml2LT5jb25maWcsIGNvdW50KTsKKwkJSVdMX0VSUk9SKCJTdGF0dXM6IDB4JTA4bFgsIGNvdW50OiAlZFxuIiwgcHJpdi0+c3RhdHVzLCBjb3VudCk7CiAJfQogCi0JZGVzYyA9IGl3bDQ5NjVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMSAqIHNpemVvZih1MzIpKTsKLQlibGluazEgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDMgKiBzaXplb2YodTMyKSk7Ci0JYmxpbmsyID0gaXdsNDk2NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA0ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMSA9IGl3bDQ5NjVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNSAqIHNpemVvZih1MzIpKTsKLQlpbGluazIgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDYgKiBzaXplb2YodTMyKSk7Ci0JZGF0YTEgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDcgKiBzaXplb2YodTMyKSk7Ci0JZGF0YTIgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDggKiBzaXplb2YodTMyKSk7Ci0JbGluZSA9IGl3bDQ5NjVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOSAqIHNpemVvZih1MzIpKTsKLQl0aW1lID0gaXdsNDk2NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxMSAqIHNpemVvZih1MzIpKTsKKwlkZXNjID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDEgKiBzaXplb2YodTMyKSk7CisJYmxpbmsxID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDMgKiBzaXplb2YodTMyKSk7CisJYmxpbmsyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDQgKiBzaXplb2YodTMyKSk7CisJaWxpbmsxID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDUgKiBzaXplb2YodTMyKSk7CisJaWxpbmsyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDYgKiBzaXplb2YodTMyKSk7CisJZGF0YTEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNyAqIHNpemVvZih1MzIpKTsKKwlkYXRhMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA4ICogc2l6ZW9mKHUzMikpOworCWxpbmUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOSAqIHNpemVvZih1MzIpKTsKKwl0aW1lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDExICogc2l6ZW9mKHUzMikpOwogCiAJSVdMX0VSUk9SKCJEZXNjICAgICAgICAgICAgICAgVGltZSAgICAgICAiCiAJCSAgImRhdGExICAgICAgZGF0YTIgICAgICBsaW5lXG4iKTsKQEAgLTQ5MjQsNyArNDE3Nyw3IEBACiAJSVdMX0VSUk9SKCIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAogCQkgIGlsaW5rMSwgaWxpbmsyKTsKIAotCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiB9CiAKICNkZWZpbmUgRVZFTlRfU1RBUlRfT0ZGU0VUICAoNCAqIHNpemVvZih1MzIpKQpAQCAtNDkzMiw5ICs0MTg1LDkgQEAKIC8qKgogICogaXdsNDk2NV9wcmludF9ldmVudF9sb2cgLSBEdW1wIGVycm9yIGV2ZW50IGxvZyB0byBzeXNsb2cKICAqCi0gKiBOT1RFOiBNdXN0IGJlIGNhbGxlZCB3aXRoIGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKCkgYWxyZWFkeSBvYnRhaW5lZCEKKyAqIE5PVEU6IE11c3QgYmUgY2FsbGVkIHdpdGggaXdsX2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCitzdGF0aWMgdm9pZCBpd2w0OTY1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCiAJCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQogewogCXUzMiBpOwpAQCAtNDk1OCwyMSArNDIxMSwyMSBAQAogCS8qICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KIAkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCXRpbWUgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CiAJCXB0ciArPSBzaXplb2YodTMyKTsKIAkJaWYgKG1vZGUgPT0gMCkKIAkJCUlXTF9FUlJPUigiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7IC8qIGRhdGEsIGV2ICovCiAJCWVsc2UgewotCQkJZGF0YSA9IGl3bDQ5NjVfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQkJZGF0YSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CiAJCQlwdHIgKz0gc2l6ZW9mKHUzMik7CiAJCQlJV0xfRVJST1IoIiUwMTB1XHQweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGRhdGEsIGV2KTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmM7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTQ5ODMsMjkgKzQyMzYsMjkgQEAKIAl1MzIgc2l6ZTsgICAgICAgLyogIyBlbnRyaWVzIHRoYXQgd2UnbGwgcHJpbnQgKi8KIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwotCWlmICghaXdsNDk2NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CisJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CiAJCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCi0JcmMgPSBpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7CiAJCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogZXZlbnQgbG9nIGhlYWRlciAqLwotCWNhcGFjaXR5ID0gaXdsNDk2NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwotCW1vZGUgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKLQludW1fd3JhcHMgPSBpd2w0OTY1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgyICogc2l6ZW9mKHUzMikpKTsKLQluZXh0X2VudHJ5ID0gaXdsNDk2NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CisJY2FwYWNpdHkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKKwltb2RlID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKKwludW1fd3JhcHMgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOworCW5leHRfZW50cnkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDMgKiBzaXplb2YodTMyKSkpOwogCiAJc2l6ZSA9IG51bV93cmFwcyA/IGNhcGFjaXR5IDogbmV4dF9lbnRyeTsKIAogCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCiAJaWYgKHNpemUgPT0gMCkgewogCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwotCQlpd2w0OTY1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTAyMSwxMyArNDI3NCwxMyBAQAogCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KIAlpd2w0OTY1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLCBuZXh0X2VudHJ5LCBtb2RlKTsKIAotCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiB9CiAKIC8qKgogICogaXdsNDk2NV9pcnFfaGFuZGxlX2Vycm9yIC0gY2FsbGVkIGZvciBIVyBvciBTVyBlcnJvciBpbnRlcnJ1cHQgZnJvbSBjYXJkCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBTZXQgdGhlIEZXIGVycm9yIGZsYWcgLS0gY2xlYXJlZCBvbiBpd2w0OTY1X2Rvd24gKi8KIAlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7CkBAIC01MDM1LDggKzQyODgsOCBAQAogCS8qIENhbmNlbCBjdXJyZW50bHkgcXVldWVkIGNvbW1hbmQuICovCiAJY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotCWlmIChpd2w0OTY1X2RlYnVnX2xldmVsICYgSVdMX0RMX0ZXX0VSUk9SUykgeworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9GV19FUlJPUlMpIHsKIAkJaXdsNDk2NV9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7CiAJCWl3bDQ5NjVfZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYpOwogCQlpd2w0OTY1X3ByaW50X3J4X2NvbmZpZ19jbWQoJnByaXYtPnN0YWdpbmdfcnhvbik7CkBAIC01MDUzLDcgKzQzMDYsNyBAQAogCQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfRldfRVJST1JTLAogCQkJICAiUmVzdGFydGluZyBhZGFwdGVyIGR1ZSB0byB1Q29kZSBlcnJvci5cbiIpOwogCi0JCWlmIChpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKIAkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOwogCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7CkBAIC01MDYyLDcgKzQzMTUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9lcnJvcl9yZWNvdmVyeShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9lcnJvcl9yZWNvdmVyeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNTA3OSwxMiArNDMzMiwxMiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9pcnFfdGFza2xldChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9pcnFfdGFza2xldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTMyIGludGEsIGhhbmRsZWQgPSAwOwogCXUzMiBpbnRhX2ZoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCXUzMiBpbnRhX21hc2s7CiAjZW5kaWYKIApAQCAtNTA5MywxOSArNDM0NiwxOSBAQAogCS8qIEFjay9jbGVhci9yZXNldCBwZW5kaW5nIHVDb2RlIGludGVycnVwdHMuCiAJICogTm90ZTogIFNvbWUgYml0cyBpbiBDU1JfSU5UIGFyZSAiT1IiIG9mIGJpdHMgaW4gQ1NSX0ZIX0lOVF9TVEFUVVMsCiAJICogIGFuZCB3aWxsIGNsZWFyIG9ubHkgd2hlbiBDU1JfRkhfSU5UX1NUQVRVUyBnZXRzIGNsZWFyZWQuICovCi0JaW50YSA9IGl3bDQ5NjVfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfSU5ULCBpbnRhKTsKKwlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCBpbnRhKTsKIAogCS8qIEFjay9jbGVhci9yZXNldCBwZW5kaW5nIGZsb3ctaGFuZGxlciAoRE1BKSBpbnRlcnJ1cHRzLgogCSAqIEFueSBuZXcgaW50ZXJydXB0cyB0aGF0IGhhcHBlbiBhZnRlciB0aGlzLCBlaXRoZXIgd2hpbGUgd2UncmUKIAkgKiBpbiB0aGlzIHRhc2tsZXQsIG9yIGxhdGVyLCB3aWxsIHNob3cgdXAgaW4gbmV4dCBJU1IvdGFza2xldC4gKi8KLQlpbnRhX2ZoID0gaXdsNDk2NV9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgaW50YV9maCk7CisJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCBpbnRhX2ZoKTsKIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi0JaWYgKGl3bDQ5NjVfZGVidWdfbGV2ZWwgJiBJV0xfRExfSVNSKSB7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAoaXdsX2RlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgewogCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCQlpbnRhX21hc2sgPSBpd2w0OTY1X3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOworCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7CiAJCUlXTF9ERUJVR19JU1IoImludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAogCQkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKIAl9CkBAIC01MTE1LDkgKzQzNjgsOSBAQAogCSAqIGF0b21pYywgbWFrZSBzdXJlIHRoYXQgaW50YSBjb3ZlcnMgYWxsIHRoZSBpbnRlcnJ1cHRzIHRoYXQKIAkgKiB3ZSd2ZSBkaXNjb3ZlcmVkLCBldmVuIGlmIEZIIGludGVycnVwdCBjYW1lIGluIGp1c3QgYWZ0ZXIKIAkgKiByZWFkaW5nIENTUl9JTlQuICovCi0JaWYgKGludGFfZmggJiBDU1JfRkhfSU5UX1JYX01BU0spCisJaWYgKGludGFfZmggJiBDU1I0OV9GSF9JTlRfUlhfTUFTSykKIAkJaW50YSB8PSBDU1JfSU5UX0JJVF9GSF9SWDsKLQlpZiAoaW50YV9maCAmIENTUl9GSF9JTlRfVFhfTUFTSykKKwlpZiAoaW50YV9maCAmIENTUjQ5X0ZIX0lOVF9UWF9NQVNLKQogCQlpbnRhIHw9IENTUl9JTlRfQklUX0ZIX1RYOwogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCkBAIC01MTM2LDggKzQzODksOCBAQAogCQlyZXR1cm47CiAJfQogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLQlpZiAoaXdsNDk2NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgewogCQkvKiBOSUMgZmlyZXMgdGhpcywgYnV0IHdlIGRvbid0IHVzZSBpdCwgcmVkdW5kYW50IHdpdGggV0FLRVVQICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfU0NEKQogCQkJSVdMX0RFQlVHX0lTUigiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKQEAgLTUxNTQsNyArNDQwNyw3IEBACiAJLyogSFcgUkYgS0lMTCBzd2l0Y2ggdG9nZ2xlZCAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfUkZfS0lMTCkgewogCQlpbnQgaHdfcmZfa2lsbCA9IDA7Ci0JCWlmICghKGl3bDQ5NjVfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgorCQlpZiAoIShpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgogCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKSkKIAkJCWh3X3JmX2tpbGwgPSAxOwogCkBAIC01MTY1LDcgKzQ0MTgsNyBAQAogCQkvKiBRdWV1ZSByZXN0YXJ0IG9ubHkgaWYgUkZfS0lMTCBzd2l0Y2ggd2FzIHNldCB0byAia2lsbCIKIAkJICogICB3aGVuIHdlIGxvYWRlZCBkcml2ZXIsIGFuZCBpcyBub3cgc2V0IHRvICJlbmFibGUiLgogCQkgKiBBZnRlciB3ZSdyZSBBbGl2ZSwgUkZfS0lMTCBnZXRzIGhhbmRsZWQgYnkKLQkJICogICBpd2xfcnhfY2FyZF9zdGF0ZV9ub3RpZigpICovCisJCSAqICAgaXdsNDk2NV9yeF9jYXJkX3N0YXRlX25vdGlmKCkgKi8KIAkJaWYgKCFod19yZl9raWxsICYmICF0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKSB7CiAJCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKQEAgLTUyMjUsMTMgKzQ0NzgsMTUgQEAKIAl9CiAKIAkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KLQlpd2w0OTY1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCisJCWl3bDQ5NjVfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRwotCWlmIChpd2w0OTY1X2RlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7Ci0JCWludGEgPSBpd2w0OTY1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQkJaW50YV9tYXNrID0gaXdsNDk2NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJaW50YV9maCA9IGl3bDQ5NjVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChpd2xfZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKKwkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwogCQlJV0xfREVCVUdfSVNSKCJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKIAkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKIAl9CkBAIC01MjQxLDcgKzQ0OTYsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaXdsNDk2NV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwogCXUzMiBpbnRhLCBpbnRhX21hc2s7CiAJdTMyIGludGFfZmg7CiAJaWYgKCFwcml2KQpAQCAtNTI1MywxMiArNDUwOCwxMiBAQAogCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KIAkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgogCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLwotCWludGFfbWFzayA9IGl3bDQ5NjVfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7ICAvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOworCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKIAogCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCi0JaW50YSA9IGl3bDQ5NjVfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWludGFfZmggPSBpd2w0OTY1X3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwogCiAJLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCiAJICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKQEAgLTUyOTAsMzEzICs0NTQ1LDEzIEBACiAKICBub25lOgogCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCWl3bDQ5NjVfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJLyogb25seSBSZS1lbmFibGUgaWYgZGlhYmxlZCBieSBpcnEgKi8KKwlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKKwkJaXdsNDk2NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiAJcmV0dXJuIElSUV9OT05FOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKiogRUVQUk9NIEJBTkRTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGUgaXdsNDk2NV9lZXByb21fYmFuZCBkZWZpbml0aW9ucyBiZWxvdyBwcm92aWRlIHRoZSBtYXBwaW5nIGZyb20gdGhlCi0gKiBFRVBST00gY29udGVudHMgdG8gdGhlIHNwZWNpZmljIGNoYW5uZWwgbnVtYmVyIHN1cHBvcnRlZCBmb3IgZWFjaAotICogYmFuZC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgaXdsNDk2NV9wcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzWzRdIGZyb20gdGhlIGJhbmRfMwotICogZGVmaW5pdGlvbiBiZWxvdyBtYXBzIHRvIHBoeXNpY2FsIGNoYW5uZWwgNDIgaW4gdGhlIDUuMkdIeiBzcGVjdHJ1bS4KLSAqIFRoZSBzcGVjaWZpYyBnZW9ncmFwaHkgYW5kIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGF0IGNoYW5uZWwKLSAqIGlzIGNvbnRhaW5lZCBpbiB0aGUgZWVwcm9tIG1hcCBpdHNlbGYuCi0gKgotICogRHVyaW5nIGluaXQsIHdlIGNvcHkgdGhlIGVlcHJvbSBpbmZvcm1hdGlvbiBhbmQgY2hhbm5lbCBtYXAKLSAqIGluZm9ybWF0aW9uIGludG8gcHJpdi0+Y2hhbm5lbF9pbmZvXzI0LzUyIGFuZCBwcml2LT5jaGFubmVsX21hcF8yNC81MgotICoKLSAqIGNoYW5uZWxfbWFwXzI0LzUyIHByb3ZpZGVzIHRoZSBpbmRleCBpbiB0aGUgY2hhbm5lbF9pbmZvIGFycmF5IGZvciBhCi0gKiBnaXZlbiBjaGFubmVsLiAgV2UgaGF2ZSB0byBoYXZlIHR3byBzZXBhcmF0ZSBtYXBzIGFzIHRoZXJlIGlzIGNoYW5uZWwKLSAqIG92ZXJsYXAgd2l0aCB0aGUgMi40R0h6IGFuZCA1LjJHSHogc3BlY3RydW0gYXMgc2VlbiBpbiBiYW5kXzEgYW5kCi0gKiBiYW5kXzIKLSAqCi0gKiBBIHZhbHVlIG9mIDB4ZmYgc3RvcmVkIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbAotICogaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgYXQgYWxsLgotICoKLSAqIEEgdmFsdWUgb2YgMHhmZSBpbiB0aGUgY2hhbm5lbF9tYXAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90Ci0gKiB2YWxpZCBmb3IgVHggd2l0aCB0aGUgY3VycmVudCBoYXJkd2FyZS4gIFRoaXMgbWVhbnMgdGhhdAotICogd2hpbGUgdGhlIHN5c3RlbSBjYW4gdHVuZSBhbmQgcmVjZWl2ZSBvbiBhIGdpdmVuIGNoYW5uZWwsIGl0IG1heSBub3QKLSAqIGJlIGFibGUgdG8gYXNzb2NpYXRlIG9yIHRyYW5zbWl0IGFueSBmcmFtZXMgb24gdGhhdAotICogY2hhbm5lbC4gIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBpbmZvcm1hdGlvbiBmb3IgdGhhdAotICogZW50cnkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogMi40IEdIeiAqLwotc3RhdGljIGNvbnN0IHU4IGl3bDQ5NjVfZWVwcm9tX2JhbmRfMVsxNF0gPSB7Ci0JMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0Ci19OwotCi0vKiA1LjIgR0h6IGJhbmRzICovCi1zdGF0aWMgY29uc3QgdTggaXdsNDk2NV9lZXByb21fYmFuZF8yW10gPSB7CS8qIDQ5MTUtNTA4ME1IeiAqLwotCTE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODksIDE5MiwgMTk2LCA3LCA4LCAxMSwgMTIsIDE2Ci19OwotCi1zdGF0aWMgY29uc3QgdTggaXdsNDk2NV9lZXByb21fYmFuZF8zW10gPSB7CS8qIDUxNzAtNTMyME1IeiAqLwotCTM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2w0OTY1X2VlcHJvbV9iYW5kXzRbXSA9IHsJLyogNTUwMC01NzAwTUh6ICovCi0JMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2w0OTY1X2VlcHJvbV9iYW5kXzVbXSA9IHsJLyogNTcyNS01ODI1TUh6ICovCi0JMTQ1LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQotfTsKLQotc3RhdGljIHU4IGl3bDQ5NjVfZWVwcm9tX2JhbmRfNltdID0geyAgICAgICAvKiAyLjQgRkFUIGNoYW5uZWwgKi8KLQkxLCAyLCAzLCA0LCA1LCA2LCA3Ci19OwotCi1zdGF0aWMgdTggaXdsNDk2NV9lZXByb21fYmFuZF83W10gPSB7ICAgICAgIC8qIDUuMiBGQVQgY2hhbm5lbCAqLwotCTM2LCA0NCwgNTIsIDYwLCAxMDAsIDEwOCwgMTE2LCAxMjQsIDEzMiwgMTQ5LCAxNTcKLX07Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfaW5pdF9iYW5kX3JlZmVyZW5jZShjb25zdCBzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCSAgICBpbnQgYmFuZCwKLQkJCQkgICAgaW50ICplZXByb21fY2hfY291bnQsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBpd2w0OTY1X2VlcHJvbV9jaGFubmVsCi0JCQkJICAgICoqZWVwcm9tX2NoX2luZm8sCi0JCQkJICAgIGNvbnN0IHU4ICoqZWVwcm9tX2NoX2luZGV4KQotewotCXN3aXRjaCAoYmFuZCkgewotCWNhc2UgMToJCS8qIDIuNEdIeiBiYW5kICovCi0JCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bDQ5NjVfZWVwcm9tX2JhbmRfMSk7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzFfY2hhbm5lbHM7Ci0JCSplZXByb21fY2hfaW5kZXggPSBpd2w0OTY1X2VlcHJvbV9iYW5kXzE7Ci0JCWJyZWFrOwotCWNhc2UgMjoJCS8qIDQuOUdIeiBiYW5kICovCi0JCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bDQ5NjVfZWVwcm9tX2JhbmRfMik7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzJfY2hhbm5lbHM7Ci0JCSplZXByb21fY2hfaW5kZXggPSBpd2w0OTY1X2VlcHJvbV9iYW5kXzI7Ci0JCWJyZWFrOwotCWNhc2UgMzoJCS8qIDUuMkdIeiBiYW5kICovCi0JCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bDQ5NjVfZWVwcm9tX2JhbmRfMyk7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzNfY2hhbm5lbHM7Ci0JCSplZXByb21fY2hfaW5kZXggPSBpd2w0OTY1X2VlcHJvbV9iYW5kXzM7Ci0JCWJyZWFrOwotCWNhc2UgNDoJCS8qIDUuNUdIeiBiYW5kICovCi0JCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bDQ5NjVfZWVwcm9tX2JhbmRfNCk7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzRfY2hhbm5lbHM7Ci0JCSplZXByb21fY2hfaW5kZXggPSBpd2w0OTY1X2VlcHJvbV9iYW5kXzQ7Ci0JCWJyZWFrOwotCWNhc2UgNToJCS8qIDUuN0dIeiBiYW5kICovCi0JCSplZXByb21fY2hfY291bnQgPSBBUlJBWV9TSVpFKGl3bDQ5NjVfZWVwcm9tX2JhbmRfNSk7Ci0JCSplZXByb21fY2hfaW5mbyA9IHByaXYtPmVlcHJvbS5iYW5kXzVfY2hhbm5lbHM7Ci0JCSplZXByb21fY2hfaW5kZXggPSBpd2w0OTY1X2VlcHJvbV9iYW5kXzU7Ci0JCWJyZWFrOwotCWNhc2UgNjoJCS8qIDIuNEdIeiBGQVQgY2hhbm5lbHMgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsNDk2NV9lZXByb21fYmFuZF82KTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfMjRfY2hhbm5lbHM7Ci0JCSplZXByb21fY2hfaW5kZXggPSBpd2w0OTY1X2VlcHJvbV9iYW5kXzY7Ci0JCWJyZWFrOwotCWNhc2UgNzoJCS8qIDUgR0h6IEZBVCBjaGFubmVscyAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2w0OTY1X2VlcHJvbV9iYW5kXzcpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF81Ml9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDQ5NjVfZWVwcm9tX2JhbmRfNzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLS8qKgotICogaXdsNDk2NV9nZXRfY2hhbm5lbF9pbmZvIC0gRmluZCBkcml2ZXIncyBwcml2YXRlIGNoYW5uZWwgaW5mbwotICoKLSAqIEJhc2VkIG9uIGJhbmQgYW5kIGNoYW5uZWwgbnVtYmVyLgotICovCi1jb25zdCBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKml3bDQ5NjVfZ2V0X2NoYW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAotCQkJCQkJICAgIGludCBwaHltb2RlLCB1MTYgY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCXN3aXRjaCAocGh5bW9kZSkgewotCWNhc2UgTU9ERV9JRUVFODAyMTFBOgotCQlmb3IgKGkgPSAxNDsgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgewotCQkJaWYgKHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsID09IGNoYW5uZWwpCi0JCQkJcmV0dXJuICZwcml2LT5jaGFubmVsX2luZm9baV07Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIE1PREVfSUVFRTgwMjExQjoKLQljYXNlIE1PREVfSUVFRTgwMjExRzoKLQkJaWYgKGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KQotCQkJcmV0dXJuICZwcml2LT5jaGFubmVsX2luZm9bY2hhbm5lbCAtIDFdOwotCQlicmVhazsKLQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0jZGVmaW5lIENIRUNLX0FORF9QUklOVCh4KSAoKGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFncyAmIEVFUFJPTV9DSEFOTkVMXyMjeCkgXAotCQkJICAgID8gIyB4ICIgIiA6ICIiKQotCi0vKioKLSAqIGl3bDQ5NjVfaW5pdF9jaGFubmVsX21hcCAtIFNldCB1cCBkcml2ZXIncyBpbmZvIGZvciBhbGwgcG9zc2libGUgY2hhbm5lbHMKLSAqLwotc3RhdGljIGludCBpd2w0OTY1X2luaXRfY2hhbm5lbF9tYXAoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQlpbnQgZWVwcm9tX2NoX2NvdW50ID0gMDsKLQljb25zdCB1OCAqZWVwcm9tX2NoX2luZGV4ID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCAqZWVwcm9tX2NoX2luZm8gPSBOVUxMOwotCWludCBiYW5kLCBjaDsKLQlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKmNoX2luZm87Ci0KLQlpZiAocHJpdi0+Y2hhbm5lbF9jb3VudCkgewotCQlJV0xfREVCVUdfSU5GTygiQ2hhbm5lbCBtYXAgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocHJpdi0+ZWVwcm9tLnZlcnNpb24gPCAweDJmKSB7Ci0JCUlXTF9XQVJOSU5HKCJVbnN1cHBvcnRlZCBFRVBST00gdmVyc2lvbjogMHglMDRYXG4iLAotCQkJICAgIHByaXYtPmVlcHJvbS52ZXJzaW9uKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemluZyByZWd1bGF0b3J5IGluZm8gZnJvbSBFRVBST01cbiIpOwotCi0JcHJpdi0+Y2hhbm5lbF9jb3VudCA9Ci0JICAgIEFSUkFZX1NJWkUoaXdsNDk2NV9lZXByb21fYmFuZF8xKSArCi0JICAgIEFSUkFZX1NJWkUoaXdsNDk2NV9lZXByb21fYmFuZF8yKSArCi0JICAgIEFSUkFZX1NJWkUoaXdsNDk2NV9lZXByb21fYmFuZF8zKSArCi0JICAgIEFSUkFZX1NJWkUoaXdsNDk2NV9lZXByb21fYmFuZF80KSArCi0JICAgIEFSUkFZX1NJWkUoaXdsNDk2NV9lZXByb21fYmFuZF81KTsKLQotCUlXTF9ERUJVR19JTkZPKCJQYXJzaW5nIGRhdGEgZm9yICVkIGNoYW5uZWxzLlxuIiwgcHJpdi0+Y2hhbm5lbF9jb3VudCk7Ci0KLQlwcml2LT5jaGFubmVsX2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8pICoKLQkJCQkgICAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwotCWlmICghcHJpdi0+Y2hhbm5lbF9pbmZvKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWxfaW5mb1xuIik7Ci0JCXByaXYtPmNoYW5uZWxfY291bnQgPSAwOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljaF9pbmZvID0gcHJpdi0+Y2hhbm5lbF9pbmZvOwotCi0JLyogTG9vcCB0aHJvdWdoIHRoZSA1IEVFUFJPTSBiYW5kcyBhZGRpbmcgdGhlbSBpbiBvcmRlciB0byB0aGUKLQkgKiBjaGFubmVsIG1hcCB3ZSBtYWludGFpbiAodGhhdCBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRoYW4KLQkgKiB3aGF0IGp1c3QgaW4gdGhlIEVFUFJPTSkgKi8KLQlmb3IgKGJhbmQgPSAxOyBiYW5kIDw9IDU7IGJhbmQrKykgewotCi0JCWl3bDQ5NjVfaW5pdF9iYW5kX3JlZmVyZW5jZShwcml2LCBiYW5kLCAmZWVwcm9tX2NoX2NvdW50LAotCQkJCQkmZWVwcm9tX2NoX2luZm8sICZlZXByb21fY2hfaW5kZXgpOwotCi0JCS8qIExvb3AgdGhyb3VnaCBlYWNoIGJhbmQgYWRkaW5nIGVhY2ggb2YgdGhlIGNoYW5uZWxzICovCi0JCWZvciAoY2ggPSAwOyBjaCA8IGVlcHJvbV9jaF9jb3VudDsgY2grKykgewotCQkJY2hfaW5mby0+Y2hhbm5lbCA9IGVlcHJvbV9jaF9pbmRleFtjaF07Ci0JCQljaF9pbmZvLT5waHltb2RlID0gKGJhbmQgPT0gMSkgPyBNT0RFX0lFRUU4MDIxMUIgOgotCQkJICAgIE1PREVfSUVFRTgwMjExQTsKLQotCQkJLyogcGVybWFuZW50bHkgc3RvcmUgRUVQUk9NJ3MgY2hhbm5lbCByZWd1bGF0b3J5IGZsYWdzCi0JCQkgKiAgIGFuZCBtYXggcG93ZXIgaW4gY2hhbm5lbCBpbmZvIGRhdGFiYXNlLiAqLwotCQkJY2hfaW5mby0+ZWVwcm9tID0gZWVwcm9tX2NoX2luZm9bY2hdOwotCi0JCQkvKiBDb3B5IHRoZSBydW4tdGltZSBmbGFncyBzbyB0aGV5IGFyZSB0aGVyZSBldmVuIG9uCi0JCQkgKiBpbnZhbGlkIGNoYW5uZWxzICovCi0JCQljaF9pbmZvLT5mbGFncyA9IGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFnczsKLQotCQkJaWYgKCEoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkpIHsKLQkJCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIEZsYWdzICV4IFslc0dIel0gLSAiCi0JCQkJCSAgICAgICAiTm8gdHJhZmZpY1xuIiwKLQkJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCi0JCQkJCSAgICAgICBjaF9pbmZvLT5mbGFncywKLQkJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KLQkJCQkJICAgICAgICI1LjIiIDogIjIuNCIpOwotCQkJCWNoX2luZm8rKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogSW5pdGlhbGl6ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KLQkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBjaF9pbmZvLT5jdXJyX3R4cG93ID0KLQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPnNjYW5fcG93ZXIgPSBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPm1pbl9wb3dlciA9IDA7Ci0KLQkJCUlXTF9ERUJVR19JTkZPKCJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMoMHglMDJ4IgotCQkJCSAgICAgICAiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAotCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAotCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/Ci0JCQkJICAgICAgICI1LjIiIDogIjIuNCIsCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChJQlNTKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKEFDVElWRSksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChSQURBUiksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChXSURFKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKE5BUlJPVyksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChERlMpLAotCQkJCSAgICAgICBlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MsCi0JCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnLAotCQkJCSAgICAgICAoKGVlcHJvbV9jaF9pbmZvW2NoXS4KLQkJCQkJIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykKLQkJCQkJJiYgIShlZXByb21fY2hfaW5mb1tjaF0uCi0JCQkJCSAgICAgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikpCi0JCQkJICAgICAgID8gIiIgOiAibm90ICIpOwotCi0JCQkvKiBTZXQgdGhlIHVzZXJfdHhwb3dlcl9saW1pdCB0byB0aGUgaGlnaGVzdCBwb3dlcgotCQkJICogc3VwcG9ydGVkIGJ5IGFueSBjaGFubmVsICovCi0JCQlpZiAoZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcgPgotCQkJICAgIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCkKLQkJCQlwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPQotCQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQotCQkJY2hfaW5mbysrOwotCQl9Ci0JfQotCi0JLyogVHdvIGFkZGl0aW9uYWwgRUVQUk9NIGJhbmRzIGZvciAyLjQgYW5kIDUgR0h6IEZBVCBjaGFubmVscyAqLwotCWZvciAoYmFuZCA9IDY7IGJhbmQgPD0gNzsgYmFuZCsrKSB7Ci0JCWludCBwaHltb2RlOwotCQl1OCBmYXRfZXh0ZW5zaW9uX2NoYW47Ci0KLQkJaXdsNDk2NV9pbml0X2JhbmRfcmVmZXJlbmNlKHByaXYsIGJhbmQsICZlZXByb21fY2hfY291bnQsCi0JCQkJCSZlZXByb21fY2hfaW5mbywgJmVlcHJvbV9jaF9pbmRleCk7Ci0KLQkJLyogRUVQUk9NIGJhbmQgNiBpcyAyLjQsIGJhbmQgNyBpcyA1IEdIeiAqLwotCQlwaHltb2RlID0gKGJhbmQgPT0gNikgPyBNT0RFX0lFRUU4MDIxMUIgOiBNT0RFX0lFRUU4MDIxMUE7Ci0KLQkJLyogTG9vcCB0aHJvdWdoIGVhY2ggYmFuZCBhZGRpbmcgZWFjaCBvZiB0aGUgY2hhbm5lbHMgKi8KLQkJZm9yIChjaCA9IDA7IGNoIDwgZWVwcm9tX2NoX2NvdW50OyBjaCsrKSB7Ci0KLQkJCWlmICgoYmFuZCA9PSA2KSAmJgotCQkJICAgICgoZWVwcm9tX2NoX2luZGV4W2NoXSA9PSA1KSB8fAotCQkJICAgIChlZXByb21fY2hfaW5kZXhbY2hdID09IDYpIHx8Ci0JCQkgICAgKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNykpKQotCQkJICAgICAgIGZhdF9leHRlbnNpb25fY2hhbiA9IEhUX0lFX0VYVF9DSEFOTkVMX01BWDsKLQkJCWVsc2UKLQkJCQlmYXRfZXh0ZW5zaW9uX2NoYW4gPSBIVF9JRV9FWFRfQ0hBTk5FTF9BQk9WRTsKLQotCQkJLyogU2V0IHVwIGRyaXZlcidzIGluZm8gZm9yIGxvd2VyIGhhbGYgKi8KLQkJCWl3bDQ5NjVfc2V0X2ZhdF9jaGFuX2luZm8ocHJpdiwgcGh5bW9kZSwKLQkJCQkJCSAgZWVwcm9tX2NoX2luZGV4W2NoXSwKLQkJCQkJCSAgJihlZXByb21fY2hfaW5mb1tjaF0pLAotCQkJCQkJICBmYXRfZXh0ZW5zaW9uX2NoYW4pOwotCi0JCQkvKiBTZXQgdXAgZHJpdmVyJ3MgaW5mbyBmb3IgdXBwZXIgaGFsZiAqLwotCQkJaXdsNDk2NV9zZXRfZmF0X2NoYW5faW5mbyhwcml2LCBwaHltb2RlLAotCQkJCQkJICAoZWVwcm9tX2NoX2luZGV4W2NoXSArIDQpLAotCQkJCQkJICAmKGVlcHJvbV9jaF9pbmZvW2NoXSksCi0JCQkJCQkgIEhUX0lFX0VYVF9DSEFOTkVMX0JFTE9XKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogaXdsNDk2NV9mcmVlX2NoYW5uZWxfbWFwIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2w0OTY1X2luaXRfY2hhbm5lbF9tYXAKLSAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9mcmVlX2NoYW5uZWxfbWFwKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+Y2hhbm5lbF9pbmZvKTsKLQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKLX0KLQogLyogRm9yIGFjdGl2ZSBzY2FuLCBsaXN0ZW4gQUNUSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbCBhZnRlcgogICogc2VuZGluZyBwcm9iZSByZXEuICBUaGlzIHNob3VsZCBiZSBzZXQgbG9uZyBlbm91Z2ggdG8gaGVhciBwcm9iZSByZXNwb25zZXMKICAqIGZyb20gbW9yZSB0aGFuIG9uZSBBUC4gICovCkBAIC01NjIwLDIyICs0NTc1LDI0IEBACiAjZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgICAgICAoMTAwKQogI2RlZmluZSBJV0xfQ0hBTk5FTF9UVU5FX1RJTUUgICAgICAgNQogCi1zdGF0aWMgaW5saW5lIHUxNiBpd2w0OTY1X2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LCBpbnQgcGh5bW9kZSkKK3N0YXRpYyBpbmxpbmUgdTE2IGl3bDQ5NjVfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKLQlpZiAocGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpCisJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJcmV0dXJuIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MjsKIAllbHNlCiAJCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQ7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNDk2NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCBwaHltb2RlKQorc3RhdGljIHUxNiBpd2w0OTY1X2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKLQl1MTYgYWN0aXZlID0gaXdsNDk2NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgcGh5bW9kZSk7Ci0JdTE2IHBhc3NpdmUgPSAocGh5bW9kZSAhPSBNT0RFX0lFRUU4MDIxMUEpID8KKwl1MTYgYWN0aXZlID0gaXdsNDk2NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CisJdTE2IHBhc3NpdmUgPSAoYmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKSA/CiAJICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0IDoKIAkgICAgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSArIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTI7CiAKLQlpZiAoaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCS8qIElmIHdlJ3JlIGFzc29jaWF0ZWQsIHdlIGNsYW1wIHRoZSBtYXhpbXVtIHBhc3NpdmUKIAkJICogZHdlbGwgdGltZSB0byBiZSA5OCUgb2YgdGhlIGJlYWNvbiBpbnRlcnZhbCAobWludXMKIAkJICogMiAqIGNoYW5uZWwgdHVuZSB0aW1lKSAqLwpAQCAtNTY1MSwzMCArNDYwOCwzNCBAQAogCXJldHVybiBwYXNzaXZlOwogfQogCi1zdGF0aWMgaW50IGl3bDQ5NjVfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIGludCBwaHltb2RlLAorc3RhdGljIGludCBpd2w0OTY1X2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJICAgICB1OCBpc19hY3RpdmUsIHU4IGRpcmVjdF9tYXNrLAogCQkJCSAgICAgc3RydWN0IGl3bDQ5NjVfc2Nhbl9jaGFubmVsICpzY2FuX2NoKQogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHMgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqaHdfbW9kZTsKLQljb25zdCBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwogCXUxNiBhY3RpdmVfZHdlbGwgPSAwOwogCWludCBhZGRlZCwgaTsKIAotCWh3X21vZGUgPSBpd2w0OTY1X2dldF9od19tb2RlKHByaXYsIHBoeW1vZGUpOwotCWlmICghaHdfbW9kZSkKKwlzYmFuZCA9IGl3bDQ5NjVfZ2V0X2h3X21vZGUocHJpdiwgYmFuZCk7CisJaWYgKCFzYmFuZCkKIAkJcmV0dXJuIDA7CiAKLQljaGFubmVscyA9IGh3X21vZGUtPmNoYW5uZWxzOworCWNoYW5uZWxzID0gc2JhbmQtPmNoYW5uZWxzOwogCi0JYWN0aXZlX2R3ZWxsID0gaXdsNDk2NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgcGh5bW9kZSk7Ci0JcGFzc2l2ZV9kd2VsbCA9IGl3bDQ5NjVfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShwcml2LCBwaHltb2RlKTsKKwlhY3RpdmVfZHdlbGwgPSBpd2w0OTY1X2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kKTsKKwlwYXNzaXZlX2R3ZWxsID0gaXdsNDk2NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwogCi0JZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgaHdfbW9kZS0+bnVtX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGNoYW5uZWxzW2ldLmNoYW4gPT0KKwlmb3IgKGkgPSAwLCBhZGRlZCA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisJCWlmIChjaGFubmVsc1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJY29udGludWU7CisKKwkJaWYgKGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFubmVsc1tpXS5jZW50ZXJfZnJlcSkgPT0KIAkJICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKSB7Ci0JCQlpZiAoaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCQlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJCQlJV0xfREVCVUdfU0NBTgogCQkJCSAgICAoIlNraXBwaW5nIGN1cnJlbnQgY2hhbm5lbCAlZFxuIiwKIAkJCQkgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKQEAgLTU2ODMsOSArNDY0NCw5IEBACiAJCX0gZWxzZSBpZiAocHJpdi0+b25seV9hY3RpdmVfY2hhbm5lbCkKIAkJCWNvbnRpbnVlOwogCi0JCXNjYW5fY2gtPmNoYW5uZWwgPSBjaGFubmVsc1tpXS5jaGFuOworCQlzY2FuX2NoLT5jaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxKTsKIAotCQljaF9pbmZvID0gaXdsNDk2NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHBoeW1vZGUsCisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLAogCQkJCQkgc2Nhbl9jaC0+Y2hhbm5lbCk7CiAJCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgewogCQkJSVdMX0RFQlVHX1NDQU4oIkNoYW5uZWwgJWQgaXMgSU5WQUxJRCBmb3IgdGhpcyBTS1UuXG4iLApAQCAtNTY5NCw3ICs0NjU1LDcgQEAKIAkJfQogCiAJCWlmICghaXNfYWN0aXZlIHx8IGlzX2NoYW5uZWxfcGFzc2l2ZShjaF9pbmZvKSB8fAotCQkgICAgIShjaGFubmVsc1tpXS5mbGFnICYgSUVFRTgwMjExX0NIQU5fV19BQ1RJVkVfU0NBTikpCisJCSAgICAoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKQogCQkJc2Nhbl9jaC0+dHlwZSA9IDA7CS8qIHBhc3NpdmUgKi8KIAkJZWxzZQogCQkJc2Nhbl9jaC0+dHlwZSA9IDE7CS8qIGFjdGl2ZSAqLwpAQCAtNTcxMyw3ICs0Njc0LDcgQEAKIAkJLyogc2Nhbl9wd3JfaW5mby0+dHBjLmRzcF9hdHRlbjsgKi8KIAogCQkvKnNjYW5fcHdyX2luZm8tPnRwYy50eF9nYWluOyAqLwotCQlpZiAocGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpCisJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCQlzY2FuX2NoLT50cGMudHhfZ2FpbiA9ICgoMSA8PCA1KSB8ICgzIDw8IDMpKSB8IDM7CiAJCWVsc2UgewogCQkJc2Nhbl9jaC0+dHBjLnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoNSA8PCAzKSk7CkBAIC01NzM3LDE5NCArNDY5OCwxNDggQEAKIAlyZXR1cm4gYWRkZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcmVzZXRfY2hhbm5lbF9mbGFnKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0JaW50IGksIGo7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKmh3X21vZGUgPSAodm9pZCAqKSZwcml2LT5tb2Rlc1tpXTsKLQkJZm9yIChqID0gMDsgaiA8IGh3X21vZGUtPm51bV9jaGFubmVsczsgaisrKQotCQkJaHdfbW9kZS0+Y2hhbm5lbHNbal0uZmxhZyA9IGh3X21vZGUtPmNoYW5uZWxzW2pdLnZhbDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDQ5NjVfaW5pdF9od19yYXRlcyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsNDk2NV9pbml0X2h3X3JhdGVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZXMpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykgewotCQlyYXRlc1tpXS5yYXRlID0gaXdsNDk2NV9yYXRlc1tpXS5pZWVlICogNTsKLQkJcmF0ZXNbaV0udmFsID0gaTsgLyogUmF0ZSBzY2FsaW5nIHdpbGwgd29yayBvbiBpbmRleGVzICovCi0JCXJhdGVzW2ldLnZhbDIgPSBpOwotCQlyYXRlc1tpXS5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NVUFBPUlRFRDsKLQkJLyogT25seSBPRkRNIGhhdmUgdGhlIGJpdHMtcGVyLXN5bWJvbCBzZXQgKi8KLQkJaWYgKChpIDw9IElXTF9MQVNUX09GRE1fUkFURSkgJiYgKGkgPj0gSVdMX0ZJUlNUX09GRE1fUkFURSkpCi0JCQlyYXRlc1tpXS5mbGFncyB8PSBJRUVFODAyMTFfUkFURV9PRkRNOwotCQllbHNlIHsKKwkJcmF0ZXNbaV0uYml0cmF0ZSA9IGl3bDQ5NjVfcmF0ZXNbaV0uaWVlZSAqIDU7CisJCXJhdGVzW2ldLmh3X3ZhbHVlID0gaTsgLyogUmF0ZSBzY2FsaW5nIHdpbGwgd29yayBvbiBpbmRleGVzICovCisJCXJhdGVzW2ldLmh3X3ZhbHVlX3Nob3J0ID0gaTsKKwkJcmF0ZXNbaV0uZmxhZ3MgPSAwOworCQlpZiAoKGkgPiBJV0xfTEFTVF9PRkRNX1JBVEUpIHx8IChpIDwgSVdMX0ZJUlNUX09GRE1fUkFURSkpIHsKIAkJCS8qCi0JCQkgKiBJZiBDQ0sgMU0gdGhlbiBzZXQgcmF0ZSBmbGFnIHRvIENDSyBlbHNlIENDS18yCi0JCQkgKiB3aGljaCBpcyBDQ0sgfCBQUkVBTUJMRTIKKwkJCSAqIElmIENDSyAhPSAxTSB0aGVuIHNldCBzaG9ydCBwcmVhbWJsZSByYXRlIGZsYWcuCiAJCQkgKi8KLQkJCXJhdGVzW2ldLmZsYWdzIHw9IChpd2w0OTY1X3JhdGVzW2ldLnBsY3AgPT0gMTApID8KLQkJCQlJRUVFODAyMTFfUkFURV9DQ0sgOiBJRUVFODAyMTFfUkFURV9DQ0tfMjsKKwkJCXJhdGVzW2ldLmZsYWdzIHw9CisJCQkJKGl3bDQ5NjVfcmF0ZXNbaV0ucGxjcCA9PSBJV0xfUkFURV8xTV9QTENQKSA/CisJCQkJCTAgOiBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRTsKIAkJfQotCi0JCS8qIFNldCB1cCB3aGljaCBvbmVzIGFyZSBiYXNpYyByYXRlcy4uLiAqLwotCQlpZiAoSVdMX0JBU0lDX1JBVEVTX01BU0sgJiAoMSA8PCBpKSkKLQkJCXJhdGVzW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFX0JBU0lDOwogCX0KIH0KIAogLyoqCiAgKiBpd2w0OTY1X2luaXRfZ2VvcyAtIEluaXRpYWxpemUgbWFjODAyMTEncyBnZW8vY2hhbm5lbCBpbmZvIGJhc2VkIGZyb20gZWVwcm9tCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9pbml0X2dlb3Moc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK2ludCBpd2w0OTY1X2luaXRfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF9pbmZvICpjaDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGVzOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqZ2VvX2NoOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZXM7CiAJaW50IGkgPSAwOwotCWVudW0gewotCQlBID0gMCwKLQkJQiA9IDEsCi0JCUcgPSAyLAotCX07Ci0JaW50IG1vZGVfY291bnQgPSAzOwogCi0JaWYgKHByaXYtPm1vZGVzKSB7CisJaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fYml0cmF0ZXMgfHwKKwkgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9iaXRyYXRlcykgewogCQlJV0xfREVCVUdfSU5GTygiR2VvZ3JhcGh5IG1vZGVzIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJc2V0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQltb2RlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSkgKiBtb2RlX2NvdW50LAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2RlcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAljaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkgKgogCQkJICAgcHJpdi0+Y2hhbm5lbF9jb3VudCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGFubmVscykgewotCQlrZnJlZShtb2Rlcyk7CisJaWYgKCFjaGFubmVscykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCi0JcmF0ZXMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYXRlKSAqIChJV0xfTUFYX1JBVEVTICsgMSkpLAorCXJhdGVzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmF0ZSkgKiAoSVdMX1JBVEVfQ09VTlQgKyAxKSksCiAJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXJhdGVzKSB7Ci0JCWtmcmVlKG1vZGVzKTsKIAkJa2ZyZWUoY2hhbm5lbHMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKiAwID0gODAyLjExYQotCSAqIDEgPSA4MDIuMTFiCi0JICogMiA9IDgwMi4xMWcKLQkgKi8KLQogCS8qIDUuMkdIeiBjaGFubmVscyBzdGFydCBhZnRlciB0aGUgMi40R0h6IGNoYW5uZWxzICovCi0JbW9kZXNbQV0ubW9kZSA9IE1PREVfSUVFRTgwMjExQTsKLQltb2Rlc1tBXS5jaGFubmVscyA9ICZjaGFubmVsc1tBUlJBWV9TSVpFKGl3bDQ5NjVfZWVwcm9tX2JhbmRfMSldOwotCW1vZGVzW0FdLnJhdGVzID0gcmF0ZXM7Ci0JbW9kZXNbQV0ubnVtX3JhdGVzID0gODsJLyoganVzdCBPRkRNICovCi0JbW9kZXNbQV0ucmF0ZXMgPSAmcmF0ZXNbNF07Ci0JbW9kZXNbQV0ubnVtX2NoYW5uZWxzID0gMDsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCWl3bDQ5NjVfaW5pdF9odF9od19jYXBhYigmbW9kZXNbQV0uaHRfaW5mbywgTU9ERV9JRUVFODAyMTFBKTsKLSNlbmRpZgorCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCXNiYW5kLT5jaGFubmVscyA9ICZjaGFubmVsc1tBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8xKV07CisJLyoganVzdCBPRkRNICovCisJc2JhbmQtPmJpdHJhdGVzID0gJnJhdGVzW0lXTF9GSVJTVF9PRkRNX1JBVEVdOworCXNiYW5kLT5uX2JpdHJhdGVzID0gSVdMX1JBVEVfQ09VTlQgLSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCi0JbW9kZXNbQl0ubW9kZSA9IE1PREVfSUVFRTgwMjExQjsKLQltb2Rlc1tCXS5jaGFubmVscyA9IGNoYW5uZWxzOwotCW1vZGVzW0JdLnJhdGVzID0gcmF0ZXM7Ci0JbW9kZXNbQl0ubnVtX3JhdGVzID0gNDsJLyoganVzdCBDQ0sgKi8KLQltb2Rlc1tCXS5udW1fY2hhbm5lbHMgPSAwOworCWl3bDQ5NjVfaW5pdF9odF9od19jYXBhYihwcml2LCAmc2JhbmQtPmh0X2luZm8sIElFRUU4MDIxMV9CQU5EXzVHSFopOwogCi0JbW9kZXNbR10ubW9kZSA9IE1PREVfSUVFRTgwMjExRzsKLQltb2Rlc1tHXS5jaGFubmVscyA9IGNoYW5uZWxzOwotCW1vZGVzW0ddLnJhdGVzID0gcmF0ZXM7Ci0JbW9kZXNbR10ubnVtX3JhdGVzID0gMTI7CS8qIE9GRE0gJiBDQ0sgKi8KLQltb2Rlc1tHXS5udW1fY2hhbm5lbHMgPSAwOwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JaXdsNDk2NV9pbml0X2h0X2h3X2NhcGFiKCZtb2Rlc1tHXS5odF9pbmZvLCBNT0RFX0lFRUU4MDIxMUcpOwotI2VuZGlmCisJc2JhbmQgPSAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJc2JhbmQtPmNoYW5uZWxzID0gY2hhbm5lbHM7CisJLyogT0ZETSAmIENDSyAqLworCXNiYW5kLT5iaXRyYXRlcyA9IHJhdGVzOworCXNiYW5kLT5uX2JpdHJhdGVzID0gSVdMX1JBVEVfQ09VTlQ7CisKKwlpd2w0OTY1X2luaXRfaHRfaHdfY2FwYWIocHJpdiwgJnNiYW5kLT5odF9pbmZvLCBJRUVFODAyMTFfQkFORF8yR0haKTsKIAogCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKIAlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7CiAKIAlpd2w0OTY1X2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwogCi0JZm9yIChpID0gMCwgZ2VvX2NoID0gY2hhbm5lbHM7IGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyAgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgewogCQljaCA9ICZwcml2LT5jaGFubmVsX2luZm9baV07CiAKLQkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoKSkgewotCQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgJWQgWyVzR0h6XSBpcyByZXN0cmljdGVkIC0tICIKLQkJCQkgICAgInNraXBwaW5nLlxuIiwKLQkJCQkgICAgY2gtPmNoYW5uZWwsIGlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/Ci0JCQkJICAgICI1LjIiIDogIjIuNCIpOworCQkvKiBGSVhNRTogbWlnaHQgYmUgcmVtb3ZlZCBpZiBzY2FuIGlzIE9LICovCisJCWlmICghaXNfY2hhbm5lbF92YWxpZChjaCkpCiAJCQljb250aW51ZTsKLQkJfQogCi0JCWlmIChpc19jaGFubmVsX2FfYmFuZChjaCkpIHsKLQkJCWdlb19jaCA9ICZtb2Rlc1tBXS5jaGFubmVsc1ttb2Rlc1tBXS5udW1fY2hhbm5lbHMrK107Ci0JCX0gZWxzZSB7Ci0JCQlnZW9fY2ggPSAmbW9kZXNbQl0uY2hhbm5lbHNbbW9kZXNbQl0ubnVtX2NoYW5uZWxzKytdOwotCQkJbW9kZXNbR10ubnVtX2NoYW5uZWxzKys7Ci0JCX0KKwkJaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoKSkKKwkJCXNiYW5kID0gICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKKwkJZWxzZQorCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCi0JCWdlb19jaC0+ZnJlcSA9IGllZWU4MDIxMWNoYW4ybWh6KGNoLT5jaGFubmVsKTsKLQkJZ2VvX2NoLT5jaGFuID0gY2gtPmNoYW5uZWw7Ci0JCWdlb19jaC0+cG93ZXJfbGV2ZWwgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKLQkJZ2VvX2NoLT5hbnRlbm5hX21heCA9IDB4ZmY7CisJCWdlb19jaCA9ICZzYmFuZC0+Y2hhbm5lbHNbc2JhbmQtPm5fY2hhbm5lbHMrK107CisKKwkJZ2VvX2NoLT5jZW50ZXJfZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaC0+Y2hhbm5lbCk7CisJCWdlb19jaC0+bWF4X3Bvd2VyID0gY2gtPm1heF9wb3dlcl9hdmc7CisJCWdlb19jaC0+bWF4X2FudGVubmFfZ2FpbiA9IDB4ZmY7CisJCWdlb19jaC0+aHdfdmFsdWUgPSBjaC0+Y2hhbm5lbDsKIAogCQlpZiAoaXNfY2hhbm5lbF92YWxpZChjaCkpIHsKLQkJCWdlb19jaC0+ZmxhZyA9IElFRUU4MDIxMV9DSEFOX1dfU0NBTjsKLQkJCWlmIChjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9JQlNTKQotCQkJCWdlb19jaC0+ZmxhZyB8PSBJRUVFODAyMTFfQ0hBTl9XX0lCU1M7CisJCQlpZiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9JQlNTKSkKKwkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lCU1M7CiAKLQkJCWlmIChjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpCi0JCQkJZ2VvX2NoLT5mbGFnIHw9IElFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU47CisJCQlpZiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpKQorCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOwogCiAJCQlpZiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpCi0JCQkJZ2VvX2NoLT5mbGFnIHw9IElFRUU4MDIxMV9DSEFOX1dfUkFEQVJfREVURUNUOworCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUkFEQVI7CiAKIAkJCWlmIChjaC0+bWF4X3Bvd2VyX2F2ZyA+IHByaXYtPm1heF9jaGFubmVsX3R4cG93ZXJfbGltaXQpCiAJCQkJcHJpdi0+bWF4X2NoYW5uZWxfdHhwb3dlcl9saW1pdCA9CiAJCQkJICAgIGNoLT5tYXhfcG93ZXJfYXZnOworCQl9IGVsc2UgeworCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKIAkJfQogCi0JCWdlb19jaC0+dmFsID0gZ2VvX2NoLT5mbGFnOworCQkvKiBTYXZlIGZsYWdzIGZvciByZWcgZG9tYWluIHVzYWdlICovCisJCWdlb19jaC0+b3JpZ19mbGFncyA9IGdlb19jaC0+ZmxhZ3M7CisKKwkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgJWQgRnJlcT0lZFslc0dIel0gJXMgZmxhZz0wJVhcbiIsCisJCQkJY2gtPmNoYW5uZWwsIGdlb19jaC0+Y2VudGVyX2ZyZXEsCisJCQkJaXNfY2hhbm5lbF9hX2JhbmQoY2gpID8gICI1LjIiIDogIjIuNCIsCisJCQkJZ2VvX2NoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEID8KKwkJCQkicmVzdHJpY3RlZCIgOiAidmFsaWQiLAorCQkJCSBnZW9fY2gtPmZsYWdzKTsKIAl9CiAKLQlpZiAoKG1vZGVzW0FdLm51bV9jaGFubmVscyA9PSAwKSAmJiBwcml2LT5pc19hYmcpIHsKKwlpZiAoKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMgPT0gMCkgJiYKKwkgICAgIHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKSB7CiAJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKIAkJICAgICAgICI6IEluY29ycmVjdGx5IGRldGVjdGVkIEJHIGNhcmQgYXMgQUJHLiAgUGxlYXNlIHNlbmQgIgogCQkgICAgICAgInlvdXIgUENJIElEIDB4JTA0WDoweCUwNFggdG8gbWFpbnRhaW5lci5cbiIsCiAJCSAgICAgICBwcml2LT5wY2lfZGV2LT5kZXZpY2UsIHByaXYtPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwotCQlwcml2LT5pc19hYmcgPSAwOworCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9BOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKIAkgICAgICAgIjogVHVuYWJsZSBjaGFubmVsczogJWQgODAyLjExYmcsICVkIDgwMi4xMWEgY2hhbm5lbHNcbiIsCi0JICAgICAgIG1vZGVzW0ddLm51bV9jaGFubmVscywgbW9kZXNbQV0ubnVtX2NoYW5uZWxzKTsKKwkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscywKKwkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyk7CiAKLQkvKgotCSAqIE5PVEU6ICBXZSByZWdpc3RlciB0aGVzZSBpbiBwcmVmZXJlbmNlIG9mIG9yZGVyIC0tIHRoZQotCSAqIHN0YWNrIGRvZXNuJ3QgY3VycmVudGx5IChhcyBvZiA3LjAuNiAvIEFwciAyNCAnMDcpIHBpY2sKLQkgKiBhIHBoeW1vZGUgYmFzZWQgb24gcmF0ZXMgb3IgQVAgY2FwYWJpbGl0aWVzIGJ1dCBzZWVtcyB0bwotCSAqIGNvbmZpZ3VyZSBpdCBwdXJlbHkgb24gaWYgdGhlIGNoYW5uZWwgYmVpbmcgY29uZmlndXJlZAotCSAqIGlzIHN1cHBvcnRlZCBieSBhIG1vZGUgLS0gYW5kIHRoZSBmaXJzdCBtYXRjaCBpcyB0YWtlbgotCSAqLworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscykKKwkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiAKLQlpZiAobW9kZXNbR10ubnVtX2NoYW5uZWxzKQotCQlpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKHByaXYtPmh3LCAmbW9kZXNbR10pOwotCWlmIChtb2Rlc1tCXS5udW1fY2hhbm5lbHMpCi0JCWllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUocHJpdi0+aHcsICZtb2Rlc1tCXSk7Ci0JaWYgKG1vZGVzW0FdLm51bV9jaGFubmVscykKLQkJaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShwcml2LT5odywgJm1vZGVzW0FdKTsKLQotCXByaXYtPm1vZGVzID0gbW9kZXM7CiAJc2V0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwogCiAJcmV0dXJuIDA7CkBAIC01OTMzLDkgKzQ4NDgsOCBAQAogLyoKICAqIGl3bDQ5NjVfZnJlZV9nZW9zIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2w0OTY1X2luaXRfZ2VvcwogICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQordm9pZCBpd2w0OTY1X2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Ja2ZyZWUocHJpdi0+bW9kZXMpOwogCWtmcmVlKHByaXYtPmllZWVfY2hhbm5lbHMpOwogCWtmcmVlKHByaXYtPmllZWVfcmF0ZXMpOwogCWNsZWFyX2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwpAQCAtNTk0Nyw3ICs0ODYxLDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9jb2RlKTsKIAlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9kYXRhKTsKQEAgLTU5NjEsNyArNDg3NSw3IEBACiAgKiBpd2w0OTY1X3ZlcmlmeV9pbnN0X2Z1bGwgLSB2ZXJpZnkgcnVudGltZSB1Q29kZSBpbWFnZSBpbiBjYXJkIHZzLiBob3N0LAogICogICAgIGxvb2tpbmcgYXQgYWxsIGRhdGEuCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV92ZXJpZnlfaW5zdF9mdWxsKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsCitzdGF0aWMgaW50IGl3bDQ5NjVfdmVyaWZ5X2luc3RfZnVsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsCiAJCQkJIHUzMiBsZW4pCiB7CiAJdTMyIHZhbDsKQEAgLTU5NzEsMTggKzQ4ODUsMTggQEAKIAogCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKLQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWl3bDQ5NjVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CiAKIAllcnJjbnQgPSAwOwogCWZvciAoOyBsZW4gPiAwOyBsZW4gLT0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKIAkJLyogcmVhZCBkYXRhIGNvbWVzIHRocm91Z2ggc2luZ2xlIHBvcnQsIGF1dG8taW5jciBhZGRyICovCiAJCS8qIE5PVEU6IFVzZSB0aGUgZGVidWdsZXNzIHJlYWQgc28gd2UgZG9uJ3QgZmxvb2Qga2VybmVsIGxvZwogCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCi0JCXZhbCA9IF9pd2w0OTY1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJdmFsID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewogCQkJSVdMX0VSUk9SKCJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCiAJCQkJICAib2Zmc2V0IDB4JXgsIGlzIDB4JXgsIHMvYiAweCV4XG4iLApAQCAtNTk5NCw3ICs0OTA4LDcgQEAKIAkJfQogCX0KIAotCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoIWVycmNudCkKIAkJSVdMX0RFQlVHX0lORk8KQEAgLTYwMDksNyArNDkyMyw3IEBACiAgKiAgIHVzaW5nIHNhbXBsZSBkYXRhIDEwMCBieXRlcyBhcGFydC4gIElmIHRoZXNlIHNhbXBsZSBwb2ludHMgYXJlIGdvb2QsCiAgKiAgIGl0J3MgYSBwcmV0dHkgZ29vZCBiZXQgdGhhdCBldmVyeXRoaW5nIGJldHdlZW4gdGhlbSBpcyBnb29kLCB0b28uCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKK3N0YXRpYyBpbnQgaXdsNDk2NV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQogewogCXUzMiB2YWw7CiAJaW50IHJjID0gMDsKQEAgLTYwMTgsNyArNDkzMiw3IEBACiAKIAlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCi0JcmMgPSBpd2w0OTY1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTYwMjYsOSArNDk0MCw5IEBACiAJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQlpd2w0OTY1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAogCQkJaSArIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKLQkJdmFsID0gX2l3bDQ5NjVfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CiAjaWYgMCAvKiBFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscyAqLwogCQkJSVdMX0VSUk9SKCJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCkBAIC02MDQyLDcgKzQ5NTYsNyBAQAogCQl9CiAJfQogCi0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTYwNTIsNyArNDk2Niw3IEBACiAgKiBpd2w0OTY1X3ZlcmlmeV91Y29kZSAtIGRldGVybWluZSB3aGljaCBpbnN0cnVjdGlvbiBpbWFnZSBpcyBpbiBTUkFNLAogICogICAgYW5kIHZlcmlmeSBpdHMgY29udGVudHMKICAqLwotc3RhdGljIGludCBpd2w0OTY1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2w0OTY1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJX19sZTMyICppbWFnZTsKIAl1MzIgbGVuOwpAQCAtNjA5NywxNjAgKzUwMTEsMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotLyogY2hlY2sgY29udGVudHMgb2Ygc3BlY2lhbCBib290c3RyYXAgdUNvZGUgU1JBTSAqLwotc3RhdGljIGludCBpd2w0OTY1X3ZlcmlmeV9ic20oc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKLXsKLQlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCXUzMiByZWc7Ci0JdTMyIHZhbDsKLQotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKLQotCS8qIHZlcmlmeSBCU00gU1JBTSBjb250ZW50cyAqLwotCXZhbCA9IGl3bDQ5NjVfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7Ci0JZm9yIChyZWcgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKLQkgICAgIHJlZyA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOwotCSAgICAgcmVnICs9IHNpemVvZih1MzIpLCBpbWFnZSArKykgewotCQl2YWwgPSBpd2w0OTY1X3JlYWRfcHJwaChwcml2LCByZWcpOwotCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgotCQkJCSAgImFkZHIgMHglMDhYKyV1IChvZiAldSksIGlzIDB4JXgsIHMvYiAweCV4XG4iLAotCQkJCSAgQlNNX1NSQU1fTE9XRVJfQk9VTkQsCi0JCQkJICByZWcgLSBCU01fU1JBTV9MT1dFUl9CT1VORCwgbGVuLAotCQkJCSAgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JSVdMX0RFQlVHX0lORk8oIkJTTSBib290c3RyYXAgdUNvZGUgaW1hZ2UgT0tcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsNDk2NV9sb2FkX2JzbSAtIExvYWQgYm9vdHN0cmFwIGluc3RydWN0aW9ucwotICoKLSAqIEJTTSBvcGVyYXRpb246Ci0gKgotICogVGhlIEJvb3RzdHJhcCBTdGF0ZSBNYWNoaW5lIChCU00pIHN0b3JlcyBhIHNob3J0IGJvb3RzdHJhcCB1Q29kZSBwcm9ncmFtCi0gKiBpbiBzcGVjaWFsIFNSQU0gdGhhdCBkb2VzIG5vdCBwb3dlciBkb3duIGR1cmluZyBSRktJTEwuICBXaGVuIHBvd2VyaW5nIGJhY2sKLSAqIHVwIGFmdGVyIHBvd2VyLXNhdmluZyBzbGVlcHMgKG9yIGR1cmluZyBpbml0aWFsIHVDb2RlIGxvYWQpLCB0aGUgQlNNIGxvYWRzCi0gKiB0aGUgYm9vdHN0cmFwIHByb2dyYW0gaW50byB0aGUgb24tYm9hcmQgcHJvY2Vzc29yLCBhbmQgc3RhcnRzIGl0LgotICoKLSAqIFRoZSBib290c3RyYXAgcHJvZ3JhbSBsb2FkcyAodmlhIERNQSkgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGZvciBhIG5ldwotICogcHJvZ3JhbSBmcm9tIGhvc3QgRFJBTSBsb2NhdGlvbnMgaW5kaWNhdGVkIGJ5IHRoZSBob3N0IGRyaXZlciBpbiB0aGUKLSAqIEJTTV9EUkFNXyogcmVnaXN0ZXJzLiAgT25jZSB0aGUgbmV3IHByb2dyYW0gaXMgbG9hZGVkLCBpdCBzdGFydHMKLSAqIGF1dG9tYXRpY2FsbHkuCi0gKgotICogV2hlbiBpbml0aWFsaXppbmcgdGhlIE5JQywgdGhlIGhvc3QgZHJpdmVyIHBvaW50cyB0aGUgQlNNIHRvIHRoZQotICogImluaXRpYWxpemUiIHVDb2RlIGltYWdlLiAgVGhpcyB1Q29kZSBzZXRzIHVwIHNvbWUgaW50ZXJuYWwgZGF0YSwgdGhlbgotICogbm90aWZpZXMgaG9zdCB2aWEgImluaXRpYWxpemUgYWxpdmUiIHRoYXQgaXQgaXMgY29tcGxldGUuCi0gKgotICogVGhlIGhvc3QgdGhlbiByZXBsYWNlcyB0aGUgQlNNX0RSQU1fKiBwb2ludGVyIHZhbHVlcyB0byBwb2ludCB0byB0aGUKLSAqIG5vcm1hbCBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgYSBiYWNrdXAgdUNvZGUgZGF0YSBjYWNoZSBidWZmZXIKLSAqIChmaWxsZWQgaW5pdGlhbGx5IHdpdGggc3RhcnRpbmcgZGF0YSB2YWx1ZXMgZm9yIHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IpLAotICogdGhlbiB0cmlnZ2VycyB0aGUgImluaXRpYWxpemUiIHVDb2RlIHRvIGxvYWQgYW5kIGxhdW5jaCB0aGUgcnVudGltZSB1Q29kZSwKLSAqIHdoaWNoIGJlZ2lucyBub3JtYWwgb3BlcmF0aW9uLgotICoKLSAqIFdoZW4gZG9pbmcgYSBwb3dlci1zYXZlIHNodXRkb3duLCBydW50aW1lIHVDb2RlIHNhdmVzIGRhdGEgU1JBTSBpbnRvCi0gKiB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW4gRFJBTSBiZWZvcmUgU1JBTSBpcyBwb3dlcmVkIGRvd24uCi0gKgotICogV2hlbiBwb3dlcmluZyBiYWNrIHVwLCB0aGUgQlNNIGxvYWRzIHRoZSBib290c3RyYXAgcHJvZ3JhbS4gIFRoaXMgcmVsb2FkcwotICogdGhlIHJ1bnRpbWUgdUNvZGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW50byBTUkFNLAotICogYW5kIHJlLWxhdW5jaGVzIHRoZSBydW50aW1lIHVDb2RlIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYuCi0gKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9sb2FkX2JzbShzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQotewotCV9fbGUzMiAqaW1hZ2UgPSBwcml2LT51Y29kZV9ib290LnZfYWRkcjsKLQl1MzIgbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47Ci0JZG1hX2FkZHJfdCBwaW5zdDsKLQlkbWFfYWRkcl90IHBkYXRhOwotCXUzMiBpbnN0X2xlbjsKLQl1MzIgZGF0YV9sZW47Ci0JaW50IHJjOwotCWludCBpOwotCXUzMiBkb25lOwotCXUzMiByZWdfb2Zmc2V0OwotCi0JSVdMX0RFQlVHX0lORk8oIkJlZ2luIGxvYWQgYnNtXG4iKTsKLQotCS8qIG1ha2Ugc3VyZSBib290c3RyYXAgcHJvZ3JhbSBpcyBubyBsYXJnZXIgdGhhbiBCU00ncyBTUkFNIHNpemUgKi8KLQlpZiAobGVuID4gSVdMX01BWF9CU01fU0laRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIHRoZSAiSW5pdGlhbGl6ZSIgdUNvZGUKLQkgKiAgIGluIGhvc3QgRFJBTSAuLi4gaG9zdCBEUkFNIHBoeXNpY2FsIGFkZHJlc3MgYml0cyAzNTo0IGZvciA0OTY1LgotCSAqIE5PVEU6ICBpd2w0OTY1X2luaXRpYWxpemVfYWxpdmVfc3RhcnQoKSB3aWxsIHJlcGxhY2UgdGhlc2UgdmFsdWVzLAotCSAqICAgICAgICBhZnRlciB0aGUgImluaXRpYWxpemUiIHVDb2RlIGhhcyBydW4sIHRvIHBvaW50IHRvCi0JICogICAgICAgIHJ1bnRpbWUvcHJvdG9jb2wgaW5zdHJ1Y3Rpb25zIGFuZCBiYWNrdXAgZGF0YSBjYWNoZS4gKi8KLQlwaW5zdCA9IHByaXYtPnVjb2RlX2luaXQucF9hZGRyID4+IDQ7Ci0JcGRhdGEgPSBwcml2LT51Y29kZV9pbml0X2RhdGEucF9hZGRyID4+IDQ7Ci0JaW5zdF9sZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQlkYXRhX2xlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47Ci0KLQlyYyA9IGl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfUFRSX1JFRywgcGluc3QpOwotCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKLQlpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLCBpbnN0X2xlbik7Ci0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywgZGF0YV9sZW4pOwotCi0JLyogRmlsbCBCU00gbWVtb3J5IHdpdGggYm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLwotCWZvciAocmVnX29mZnNldCA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOwotCSAgICAgcmVnX29mZnNldCA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOwotCSAgICAgcmVnX29mZnNldCArPSBzaXplb2YodTMyKSwgaW1hZ2UrKykKLQkJX2l3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCByZWdfb2Zmc2V0LAotCQkJCQkgIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCi0JcmMgPSBpd2w0OTY1X3ZlcmlmeV9ic20ocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCWl3bDQ5NjVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLwotCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7Ci0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywKLQkJCQkgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKLQotCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKLQkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQlpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAotCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKTsKLQotCS8qIFdhaXQgZm9yIGxvYWQgb2YgYm9vdHN0cmFwIHVDb2RlIHRvIGZpbmlzaCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlkb25lID0gaXdsNDk2NV9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHKTsKLQkJaWYgKCEoZG9uZSAmIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCWlmIChpIDwgMTAwKQotCQlJV0xfREVCVUdfSU5GTygiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwotCWVsc2UgewotCQlJV0xfRVJST1IoIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBwb3dlciBtYW5hZ2VtZW50IHVuaXQgdHJpZ2dlcnMgaXQKLQkgKiAgIChlLmcuIHdoZW4gcG93ZXJpbmcgYmFjayB1cCBhZnRlciBwb3dlci1zYXZlIHNodXRkb3duKSAqLwotCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsCi0JCUJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlRfRU4pOwotCi0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV9uaWNfc3RhcnQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfbmljX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBSZW1vdmUgYWxsIHJlc2V0cyB0byBhbGxvdyBOSUMgdG8gb3BlcmF0ZSAqLwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgMCk7CiB9CiAKIApAQCAtNjI1OSwxMiArNTAyMywxMiBAQAogICoKICAqIENvcHkgaW50byBidWZmZXJzIGZvciBjYXJkIHRvIGZldGNoIHZpYSBidXMtbWFzdGVyaW5nCiAgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9yZWFkX3Vjb2RlKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfcmVhZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDQ5NjVfdWNvZGUgKnVjb2RlOwogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXc7Ci0JY29uc3QgY2hhciAqbmFtZSA9ICJpd2x3aWZpLTQ5NjUiIElXTDQ5NjVfVUNPREVfQVBJICIudWNvZGUiOworCWNvbnN0IGNoYXIgKm5hbWUgPSBwcml2LT5jZmctPmZ3X25hbWU7CiAJdTggKnNyYzsKIAlzaXplX3QgbGVuOwogCXUzMiB2ZXIsIGluc3Rfc2l6ZSwgZGF0YV9zaXplLCBpbml0X3NpemUsIGluaXRfZGF0YV9zaXplLCBib290X3NpemU7CkBAIC02NDYwLDcgKzUyMjQsNyBAQAogICogV2UgbmVlZCB0byByZXBsYWNlIHRoZW0gdG8gbG9hZCBydW50aW1lIHVDb2RlIGluc3QgYW5kIGRhdGEsCiAgKiBhbmQgdG8gc2F2ZSBydW50aW1lIGRhdGEgd2hlbiBwb3dlcmluZyBkb3duLgogICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfc2V0X3Vjb2RlX3B0cnMoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsNDk2NV9zZXRfdWNvZGVfcHRycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJZG1hX2FkZHJfdCBwaW5zdDsKIAlkbWFfYWRkcl90IHBkYXRhOwpAQCAtNjQ3MiwyNCArNTIzNiwyNCBAQAogCXBkYXRhID0gcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAucF9hZGRyID4+IDQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsNDk2NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIGltYWdlIHRvIGxvYWQgKi8KLQlpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7Ci0JaXdsNDk2NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfUFRSX1JFRywgcGRhdGEpOwotCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHLAogCQkJCSBwcml2LT51Y29kZV9kYXRhLmxlbik7CiAKIAkvKiBJbnN0IGJ5dGVjb3VudCBtdXN0IGJlIGxhc3QgdG8gc2V0IHVwLCBiaXQgMzEgc2lnbmFscyB1Q29kZQogCSAqICAgdGhhdCBhbGwgbmV3IHB0ci9zaXplIGluZm8gaXMgaW4gcGxhY2UgKi8KLQlpd2w0OTY1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLAorCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywKIAkJCQkgcHJpdi0+dWNvZGVfY29kZS5sZW4gfCBCU01fRFJBTV9JTlNUX0xPQUQpOwogCi0JaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtNjUwOSw3ICs1MjczLDcgQEAKICAqCiAgKiBUZWxsICJpbml0aWFsaXplIiB1Q29kZSB0byBnbyBhaGVhZCBhbmQgbG9hZCB0aGUgcnVudGltZSB1Q29kZS4KICovCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2luaXRfYWxpdmVfc3RhcnQoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogQ2hlY2sgYWxpdmUgcmVzcG9uc2UgZm9yICJ2YWxpZCIgc2lnbiBmcm9tIHVDb2RlICovCiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewpAQCAtNjU1NCw5ICs1MzE4LDkgQEAKICAqICAgICAgICAgICAgICAgICAgIGZyb20gcHJvdG9jb2wvcnVudGltZSB1Q29kZSAoaW5pdGlhbGl6YXRpb24gdUNvZGUncwogICogICAgICAgICAgICAgICAgICAgQWxpdmUgZ2V0cyBoYW5kbGVkIGJ5IGl3bDQ5NjVfaW5pdF9hbGl2ZV9zdGFydCgpKS4KICAqLwotc3RhdGljIHZvaWQgaXdsNDk2NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsNDk2NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAKQEAgLTY1NzcsMTIgKzUzNDEsMTIgQEAKIAkJZ290byByZXN0YXJ0OwogCX0KIAotCWl3bDQ5NjVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJaXdsY29yZV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAotCXJjID0gaXdsNDk2NV9hbGl2ZV9ub3RpZnkocHJpdik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOworCWlmIChyZXQpIHsKIAkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uIFtudGZdOiAlZFxuIiwKLQkJCSAgICByYyk7CisJCQkgICAgcmV0KTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNjU5Miw3ICs1MzU2LDcgQEAKIAkvKiBDbGVhciBvdXQgdGhlIHVDb2RlIGVycm9yIGJpdCBpZiBpdCBpcyBzZXQgKi8KIAljbGVhcl9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKIAotCWlmIChpd2w0OTY1X2lzX3Jma2lsbChwcml2KSkKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJcmV0dXJuOwogCiAJaWVlZTgwMjExX3N0YXJ0X3F1ZXVlcyhwcml2LT5odyk7CkBAIC02NjAyLDcgKzUzNjYsNyBAQAogCiAJaXdsNDk2NV9zZW5kX3Bvd2VyX21vZGUocHJpdiwgSVdMX1BPV0VSX0xFVkVMKHByaXYtPnBvd2VyX21vZGUpKTsKIAotCWlmIChpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgKmFjdGl2ZV9yeG9uID0KIAkJCQkoc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgKikoJnByaXYtPmFjdGl2ZV9yeG9uKTsKIApAQCAtNjYyMywyNSArNTM4NywyOSBAQAogCiAJLyogQXQgdGhpcyBwb2ludCwgdGhlIE5JQyBpcyBpbml0aWFsaXplZCBhbmQgb3BlcmF0aW9uYWwgKi8KIAlwcml2LT5ub3RpZl9taXNzZWRfYmVhY29ucyA9IDA7Ci0Jc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCiAJaXdsNDk2NV9yZl9raWxsX2N0X2NvbmZpZyhwcml2KTsKIAorCWl3bF9sZWRzX3JlZ2lzdGVyKHByaXYpOworCiAJSVdMX0RFQlVHX0lORk8oIkFMSVZFIHByb2Nlc3NpbmcgY29tcGxldGUuXG4iKTsKKwlzZXRfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCiAJaWYgKHByaXYtPmVycm9yX3JlY292ZXJpbmcpCiAJCWl3bDQ5NjVfZXJyb3JfcmVjb3ZlcnkocHJpdik7CiAKKwlpd2xjb3JlX2xvd19sZXZlbF9ub3RpZnkocHJpdiwgSVdMQ09SRV9TVEFSVF9FVlQpOworCWllZWU4MDIxMV9ub3RpZnlfbWFjKHByaXYtPmh3LCBJRUVFODAyMTFfTk9USUZZX1JFX0FTU09DKTsKIAlyZXR1cm47CiAKICByZXN0YXJ0OgogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdik7CitzdGF0aWMgdm9pZCBpd2w0OTY1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKLXN0YXRpYyB2b2lkIF9faXdsNDk2NV9kb3duKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBfX2l3bDQ5NjVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CkBAIC02NjU0LDcgKzU0MjIsMTEgQEAKIAlpZiAoIWV4aXRfcGVuZGluZykKIAkJc2V0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCWl3bDQ5NjVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJaXdsX2xlZHNfdW5yZWdpc3Rlcihwcml2KTsKKworCWl3bGNvcmVfbG93X2xldmVsX25vdGlmeShwcml2LCBJV0xDT1JFX1NUT1BfRVZUKTsKKworCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBVbmJsb2NrIGFueSB3YWl0aW5nIGNhbGxzICovCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKQEAgLTY2NjUsMjEgKzU0MzcsMjYgQEAKIAkJY2xlYXJfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCiAJLyogc3RvcCBhbmQgcmVzZXQgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciAqLwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19ORVZPX1JFU0VUKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19ORVZPX1JFU0VUKTsKIAogCS8qIHRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaXdsNDk2NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWl3bF9zeW5jaHJvbml6ZV9pcnEocHJpdik7CiAKIAlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKIAkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKIAogCS8qIElmIHdlIGhhdmUgbm90IHByZXZpb3VzbHkgY2FsbGVkIGl3bDQ5NjVfaW5pdCgpIHRoZW4KIAkgKiBjbGVhciBhbGwgYml0cyBidXQgdGhlIFJGIEtpbGwgYW5kIFNVU1BFTkQgYml0cyBhbmQgcmV0dXJuICovCi0JaWYgKCFpd2w0OTY1X2lzX2luaXQocHJpdikpIHsKKwlpZiAoIWl3bF9pc19pbml0KHByaXYpKSB7CiAJCXByaXYtPnN0YXR1cyA9IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSA8PAogCQkJCQlTVEFUVVNfUkZfS0lMTF9IVyB8CiAJCQkgICAgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJCVNUQVRVU19SRl9LSUxMX1NXIHwKKwkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpIDw8CisJCQkJCVNUQVRVU19HRU9fQ09ORklHVVJFRCB8CiAJCQkgICAgICAgdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJCVNUQVRVU19JTl9TVVNQRU5EOwogCQlnb3RvIGV4aXQ7CkBAIC02NjkxLDEzICs1NDY4LDE1IEBACiAJCQkJU1RBVFVTX1JGX0tJTExfSFcgfAogCQkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJU1RBVFVTX1JGX0tJTExfU1cgfAorCQkJdGVzdF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKSA8PAorCQkJCVNUQVRVU19HRU9fQ09ORklHVVJFRCB8CiAJCQl0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykgPDwKIAkJCQlTVEFUVVNfSU5fU1VTUEVORCB8CiAJCQl0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJU1RBVFVTX0ZXX0VSUk9SOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2w0OTY1X2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQkgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTY3MDUsMTcgKzU0ODQsMTcgQEAKIAlpd2w0OTY1X2h3X3J4cV9zdG9wKHByaXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWl3bDQ5NjVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7Ci0JCWl3bDQ5NjVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAorCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAogCQkJCQkgQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUKTsKLQkJaXdsNDk2NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXVkZWxheSg1KTsKIAogCWl3bDQ5NjVfaHdfbmljX3N0b3BfbWFzdGVyKHByaXYpOwotCWl3bDQ5NjVfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOwogCWl3bDQ5NjVfaHdfbmljX3Jlc2V0KHByaXYpOwogCiAgZXhpdDoKQEAgLTY3MjksNyArNTUwOCw3IEBACiAJaXdsNDk2NV9jbGVhcl9mcmVlX2ZyYW1lcyhwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9kb3duKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2Rvd24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlfX2l3bDQ5NjVfZG93bihwcml2KTsKQEAgLTY3NDAsOSArNTUxOSwxMCBAQAogCiAjZGVmaW5lIE1BWF9IV19SRVNUQVJUUyA1CiAKLXN0YXRpYyBpbnQgX19pd2w0OTY1X3VwKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IF9faXdsNDk2NV91cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHJjLCBpOworCWludCBpOworCWludCByZXQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKIAkJSVdMX1dBUk5JTkcoIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CkBAIC02NzUyLDYgKzU1MzIsNyBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpIHsKIAkJSVdMX1dBUk5JTkcoIlJhZGlvIGRpc2FibGVkIGJ5IFNXIFJGIGtpbGwgKG1vZHVsZSAiCiAJCQkgICAgInBhcmFtZXRlcilcbiIpOworCQlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC02NzYxLDM3ICs1NTQyLDM5IEBACiAJfQogCiAJLyogSWYgcGxhdGZvcm0ncyBSRl9LSUxMIHN3aXRjaCBpcyBOT1Qgc2V0IHRvIEtJTEwgKi8KLQlpZiAoaXdsNDk2NV9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmCisJaWYgKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmCiAJCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpCiAJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CiAJZWxzZSB7CiAJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCQlpZiAoIXRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSkgeworCQkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiAJCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpd2w0OTY1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CiAKLQlyYyA9IGl3bDQ5NjVfaHdfbmljX2luaXQocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGludCBuaWNcbiIpOwotCQlyZXR1cm4gcmM7CisJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aHdfbmljX2luaXQocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQlpd2w0OTY1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAorCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAKIAkvKiBjbGVhciAoYWdhaW4pLCB0aGVuIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KLQlpd2w0OTY1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CiAJaXdsNDk2NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogCS8qIHJlYWxseSBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCi0JaXdsNDk2NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bDQ5NjVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKIAogCS8qIENvcHkgb3JpZ2luYWwgdWNvZGUgZGF0YSBpbWFnZSBmcm9tIGRpc2sgaW50byBiYWNrdXAgY2FjaGUuCiAJICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgb24tYm9hcmQgcHJvY2Vzc29yJ3MKQEAgLTY4MDUsMTUgKzU1ODgsMTUgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdfUkVTVEFSVFM7IGkrKykgewogCi0JCWl3bDQ5NjVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisJCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkJLyogbG9hZCBib290c3RyYXAgc3RhdGUgbWFjaGluZSwKIAkJICogbG9hZCBib290c3RyYXAgcHJvZ3JhbSBpbnRvIHByb2Nlc3NvcidzIG1lbW9yeSwKIAkJICogcHJlcGFyZSB0byBsb2FkIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQkJcmMgPSBpd2w0OTY1X2xvYWRfYnNtKHByaXYpOworCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5sb2FkX3Vjb2RlKHByaXYpOwogCi0JCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsIHJjKTsKKwkJaWYgKHJldCkgeworCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsIHJldCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC02ODQzLDggKzU2MjYsOCBAQAogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X2JnX2luaXRfYWxpdmVfc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDQ5NjVfcHJpdiwgaW5pdF9hbGl2ZV9zdGFydC53b3JrKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02ODU2LDggKzU2MzksOCBAQAogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X2JnX2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2w0OTY1X3ByaXYsIGFsaXZlX3N0YXJ0LndvcmspOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIGFsaXZlX3N0YXJ0LndvcmspOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02ODY5LDcgKzU2NTIsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X2JnX3JmX2tpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDQ5NjVfcHJpdiwgcmZfa2lsbCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgcmZfa2lsbCk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTY4NzgsMTMgKzU2NjEsMTYgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsNDk2NV9pc19yZmtpbGwocHJpdikpIHsKKwlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikpIHsKIAkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1JGX0tJTEwsCiAJCQkgICJIVyBhbmQvb3IgU1cgUkYgS2lsbCBubyBsb25nZXIgYWN0aXZlLCByZXN0YXJ0aW5nICIKIAkJCSAgImRldmljZVxuIik7CiAJCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwogCX0gZWxzZSB7CisJCS8qIG1ha2Ugc3VyZSBtYWM4MDIxMSBzdG9wIHNlbmRpbmcgVHggZnJhbWUgKi8KKwkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOwogCiAJCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQogCQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgpAQCAtNjg5NCw2ICs1NjgwLDggQEAKIAkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgogCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7CiAJfQorCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOworCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTY5MDEsOCArNTY4OSw4IEBACiAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfYmdfc2Nhbl9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsNDk2NV9wcml2LCBzY2FuX2NoZWNrLndvcmspOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHNjYW5fY2hlY2sud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTY5MjIsMjQgKzU3MTAsMjUgQEAKIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19yZXF1ZXN0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDQ5NjVfcHJpdiwgcmVxdWVzdF9zY2FuKTsKLQlzdHJ1Y3QgaXdsNDk2NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVxdWVzdF9zY2FuKTsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2Nhbl9jbWQpLAogCQkubWV0YS5mbGFncyA9IENNRF9TSVpFX0hVR0UsCiAJfTsKLQlpbnQgcmMgPSAwOwogCXN0cnVjdCBpd2w0OTY1X3NjYW5fY21kICpzY2FuOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CisJdTE2IGNtZF9sZW47CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXU4IGRpcmVjdF9tYXNrOwotCWludCBwaHltb2RlOworCWludCByZXQgPSAwOwogCiAJY29uZiA9IGllZWU4MDIxMV9nZXRfaHdfY29uZihwcml2LT5odyk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpZiAoIWl3bDQ5NjVfaXNfcmVhZHkocHJpdikpIHsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgewogCQlJV0xfV0FSTklORygicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTY5NTQsNyArNTc0Myw3IEBACiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewogCQlJV0xfREVCVUdfSU5GTygiTXVsdGlwbGUgY29uY3VycmVudCBzY2FuIHJlcXVlc3RzIGluIHBhcmFsbGVsLiAiCiAJCQkgICAgICAgIklnbm9yaW5nIHNlY29uZCByZXF1ZXN0LlxuIik7Ci0JCXJjID0gLUVJTzsKKwkJcmV0ID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjk2OCw3ICs1NzU3LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChpd2w0OTY1X2lzX3Jma2lsbChwcml2KSkgeworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CiAJCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTY5ODcsNyArNTc3Niw3IEBACiAJCXByaXYtPnNjYW4gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zY2FuX2NtZCkgKwogCQkJCSAgICAgSVdMX01BWF9TQ0FOX1NJWkUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXByaXYtPnNjYW4pIHsKLQkJCXJjID0gLUVOT01FTTsKKwkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAl9CkBAIC02OTk3LDcgKzU3ODYsNyBAQAogCXNjYW4tPnF1aWV0X3BsY3BfdGggPSBJV0xfUExDUF9RVUlFVF9USFJFU0g7CiAJc2Nhbi0+cXVpZXRfdGltZSA9IElXTF9BQ1RJVkVfUVVJRVRfVElNRTsKIAotCWlmIChpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJdTE2IGludGVydmFsID0gMDsKIAkJdTMyIGV4dHJhOwogCQl1MzIgc3VzcGVuZF90aW1lID0gMTAwOwpAQCAtNzAzNCwyNiArNTgyMywxOSBAQAogCQltZW1jcHkoc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uc3NpZCwKIAkJICAgICAgIHByaXYtPmRpcmVjdF9zc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOwogCQlkaXJlY3RfbWFzayA9IDE7Ci0JfSBlbHNlIGlmICghaXdsNDk2NV9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmVzc2lkX2xlbikgeworCX0gZWxzZSBpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmVzc2lkX2xlbikgewogCQlzY2FuLT5kaXJlY3Rfc2NhblswXS5pZCA9IFdMQU5fRUlEX1NTSUQ7CiAJCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmxlbiA9IHByaXYtPmVzc2lkX2xlbjsKIAkJbWVtY3B5KHNjYW4tPmRpcmVjdF9zY2FuWzBdLnNzaWQsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4pOwogCQlkaXJlY3RfbWFzayA9IDE7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJZGlyZWN0X21hc2sgPSAwOworCX0KIAotCS8qIFdlIGRvbid0IGJ1aWxkIGEgZGlyZWN0IHNjYW4gcHJvYmUgcmVxdWVzdDsgdGhlIHVDb2RlIHdpbGwgZG8KLQkgKiB0aGF0IGJhc2VkIG9uIHRoZSBkaXJlY3RfbWFzayBhZGRlZCB0byBlYWNoIGNoYW5uZWwgZW50cnkgKi8KLQlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoCi0JCWl3bDQ5NjVfZmlsbF9wcm9iZV9yZXEocHJpdiwgKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNjYW4tPmRhdGEsCi0JCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbiksIDApKTsKIAlzY2FuLT50eF9jbWQudHhfZmxhZ3MgPSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwotCXNjYW4tPnR4X2NtZC5zdGFfaWQgPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwlzY2FuLT50eF9jbWQuc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAlzY2FuLT50eF9jbWQuc3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CiAKLQkvKiBmbGFncyArIHJhdGUgc2VsZWN0aW9uICovCi0KLQlzY2FuLT50eF9jbWQudHhfZmxhZ3MgfD0gY3B1X3RvX2xlMzIoMHgyMDApOwogCiAJc3dpdGNoIChwcml2LT5zY2FuX2JhbmRzKSB7CiAJY2FzZSAyOgpAQCAtNzA2Myw3ICs1ODQ1LDcgQEAKIAkJCQlSQVRFX01DU19BTlRfQl9NU0t8UkFURV9NQ1NfQ0NLX01TSyk7CiAKIAkJc2Nhbi0+Z29vZF9DUkNfdGggPSAwOwotCQlwaHltb2RlID0gTU9ERV9JRUVFODAyMTFHOworCQliYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIAkJYnJlYWs7CiAKIAljYXNlIDE6CkBAIC03MDcxLDcgKzU4NTMsNyBAQAogCQkJCWl3bDQ5NjVfaHdfc2V0X3JhdGVfbl9mbGFncyhJV0xfUkFURV82TV9QTENQLAogCQkJCVJBVEVfTUNTX0FOVF9CX01TSyk7CiAJCXNjYW4tPmdvb2RfQ1JDX3RoID0gSVdMX0dPT0RfQ1JDX1RIOwotCQlwaHltb2RlID0gTU9ERV9JRUVFODAyMTFBOworCQliYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNzA3OSw2ICs1ODYxLDEzIEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwkvKiBXZSBkb24ndCBidWlsZCBhIGRpcmVjdCBzY2FuIHByb2JlIHJlcXVlc3Q7IHRoZSB1Q29kZSB3aWxsIGRvCisJICogdGhhdCBiYXNlZCBvbiB0aGUgZGlyZWN0X21hc2sgYWRkZWQgdG8gZWFjaCBjaGFubmVsIGVudHJ5ICovCisJY21kX2xlbiA9IGl3bDQ5NjVfZmlsbF9wcm9iZV9yZXEocHJpdiwgYmFuZCwKKwkJCQkJKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNjYW4tPmRhdGEsCisJCQkJCUlXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSwgMCk7CisKKwlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoY21kX2xlbik7CiAJLyogc2VsZWN0IFJ4IGNoYWlucyAqLwogCiAJLyogRm9yY2UgdXNlIG9mIGNoYWlucyBCIGFuZCBDICgweDYpIGZvciBzY2FuIFJ4LgpAQCAtNzA5MiwxOCArNTg4MSwyMyBAQAogCWlmIChwcml2LT5pd19tb2RlID09IElFRUU4MDIxMV9JRl9UWVBFX01OVFIpCiAJCXNjYW4tPmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLOwogCi0JaWYgKGRpcmVjdF9tYXNrKQorCWlmIChkaXJlY3RfbWFzaykgewogCQlJV0xfREVCVUdfU0NBTgogCQkgICAgKCJJbml0aWF0aW5nIGRpcmVjdCBzY2FuIGZvciAlcy5cbiIsCiAJCSAgICAgaXdsNDk2NV9lc2NhcGVfZXNzaWQocHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbikpOwotCWVsc2UKKwkJc2Nhbi0+Y2hhbm5lbF9jb3VudCA9CisJCQlpd2w0OTY1X2dldF9jaGFubmVsc19mb3Jfc2NhbigKKwkJCQlwcml2LCBiYW5kLCAxLCAvKiBhY3RpdmUgKi8KKwkJCQlkaXJlY3RfbWFzaywKKwkJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7CisJfSBlbHNlIHsKIAkJSVdMX0RFQlVHX1NDQU4oIkluaXRpYXRpbmcgaW5kaXJlY3Qgc2Nhbi5cbiIpOwotCi0Jc2Nhbi0+Y2hhbm5lbF9jb3VudCA9Ci0JCWl3bDQ5NjVfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKAotCQkJcHJpdiwgcGh5bW9kZSwgMSwgLyogYWN0aXZlICovCi0JCQlkaXJlY3RfbWFzaywKLQkJCSh2b2lkICopJnNjYW4tPmRhdGFbbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbildKTsKKwkJc2Nhbi0+Y2hhbm5lbF9jb3VudCA9CisJCQlpd2w0OTY1X2dldF9jaGFubmVsc19mb3Jfc2NhbigKKwkJCQlwcml2LCBiYW5kLCAwLCAvKiBwYXNzaXZlICovCisJCQkJZGlyZWN0X21hc2ssCisJCQkJKHZvaWQgKikmc2Nhbi0+ZGF0YVtsZTE2X3RvX2NwdShzY2FuLT50eF9jbWQubGVuKV0pOworCX0KIAogCWNtZC5sZW4gKz0gbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbikgKwogCSAgICBzY2FuLT5jaGFubmVsX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3NjYW5fY2hhbm5lbCk7CkBAIC03MTExLDggKzU5MDUsOCBAQAogCXNjYW4tPmxlbiA9IGNwdV90b19sZTE2KGNtZC5sZW4pOwogCiAJc2V0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0JcmMgPSBpd2w0OTY1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci0JaWYgKHJjKQorCXJldCA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCWlmIChyZXQpCiAJCWdvdG8gZG9uZTsKIAogCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NoZWNrLApAQCAtNzEyOSw3ICs1OTIzLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ191cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsNDk2NV9wcml2LCB1cCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgdXApOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC03MTQxLDcgKzU5MzUsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X2JnX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDQ5NjVfcHJpdiwgcmVzdGFydCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVzdGFydCk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTcxNTIsOCArNTk0Niw4IEBACiAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfYmdfcnhfcmVwbGVuaXNoKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2w0OTY1X3ByaXYsIHJ4X3JlcGxlbmlzaCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcnhfcmVwbGVuaXNoKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNzE2NSwxMyArNTk1OSwxMCBAQAogCiAjZGVmaW5lIElXTF9ERUxBWV9ORVhUX1NDQU4gKEhaKjIpCiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfYmdfcG9zdF9hc3NvY2lhdGUoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQorc3RhdGljIHZvaWQgaXdsNDk2NV9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsNDk2NV9wcml2LAotCQkJCQkgICAgIHBvc3RfYXNzb2NpYXRlLndvcmspOwotCi0JaW50IHJjID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSBOVUxMOworCWludCByZXQgPSAwOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKQEAgLTcxODcsMTIgKzU5NzgsMTAgQEAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghcHJpdi0+dmlmIHx8ICFwcml2LT5pc19vcGVuKSB7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCWlmICghcHJpdi0+dmlmIHx8ICFwcml2LT5pc19vcGVuKQogCQlyZXR1cm47Ci0JfQorCiAJaXdsNDk2NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CiAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKQEAgLTcyMDIsOSArNTk5MSw5IEBACiAKIAltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhvbl90aW1lX2NtZCkpOwogCWl3bDQ5NjVfc2V0dXBfcnhvbl90aW1pbmcocHJpdik7Ci0JcmMgPSBpd2w0OTY1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAogCQkJICAgICAgc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwgJnByaXYtPnJ4b25fdGltaW5nKTsKLQlpZiAocmMpCisJaWYgKHJldCkKIAkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKIAkJCSAgICAiQXR0ZW1wdGluZyB0byBjb250aW51ZS5cbiIpOwogCkBAIC03MjQ2LDcgKzYwMzUsNyBAQAogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKIAogCQkvKiBjbGVhciBvdXQgdGhlIHN0YXRpb24gdGFibGUgKi8KLQkJaXdsNDk2NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKKwkJaXdsY29yZV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAogCQlpd2w0OTY1X3J4b25fYWRkX3N0YXRpb24ocHJpdiwgaXdsNDk2NV9icm9hZGNhc3RfYWRkciwgMCk7CiAJCWl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihwcml2LCBwcml2LT5ic3NpZCwgMCk7CkBAIC03MjcyLDE5ICs2MDYxLDI5IEBACiAJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykKIAkJcHJpdi0+YXNzb2Nfc3RhdGlvbl9hZGRlZCA9IDE7CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9RT1MKIAlpd2w0OTY1X2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9RT1MgKi8KKwogCS8qIHdlIGhhdmUganVzdCBhc3NvY2lhdGVkLCBkb24ndCBzdGFydCBzY2FuIHRvbyBlYXJseSAqLwogCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU47Cit9CisKKworc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19wb3N0X2Fzc29jaWF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwKKwkJCQkJICAgICBwb3N0X2Fzc29jaWF0ZS53b3JrKTsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlpd2w0OTY1X3Bvc3RfYXNzb2NpYXRlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCiB9CiAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsNDk2NV9wcml2LCBhYm9ydF9zY2FuKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCBhYm9ydF9zY2FuKTsKIAotCWlmICghaXdsNDk2NV9pc19yZWFkeShwcml2KSkKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtNzI5OSw4ICs2MDk4LDggQEAKIAogc3RhdGljIHZvaWQgaXdsNDk2NV9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsNDk2NV9wcml2LCBzY2FuX2NvbXBsZXRlZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgc2Nhbl9jb21wbGV0ZWQpOwogCiAJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1NDQU4sICJTQ0FOIGNvbXBsZXRlIHNjYW5cbiIpOwogCkBAIC03MzI5LDcgKzYxMjgsNyBAQAogCiBzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmV0OwogCiAJSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CkBAIC03NDA2LDcgKzYyMDUsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2w0OTY1X21hY19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwogCkBAIC03NDE3LDcgKzYyMTYsNyBAQAogCiAJcHJpdi0+aXNfb3BlbiA9IDA7CiAKLQlpZiAoaXdsNDk2NV9pc19yZWFkeV9yZihwcml2KSkgeworCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKIAkJLyogc3RvcCBtYWMsIGNhbmNlbCBhbnkgc2NhbiByZXF1ZXN0IGFuZCBjbGVhcgogCQkgKiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgQklUCiAJCSAqLwpAQCAtNzQ0MSw3ICs2MjQwLDcgQEAKIHN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY3RsKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwogCkBAIC03NDUxLDcgKzYyNTAsNyBAQAogCX0KIAogCUlXTF9ERUJVR19UWCgiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCi0JCSAgICAgY3RsLT50eF9yYXRlKTsKKwkJICAgICBjdGwtPnR4X3JhdGUtPmJpdHJhdGUpOwogCiAJaWYgKGl3bDQ5NjVfdHhfc2tiKHByaXYsIHNrYiwgY3RsKSkKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTc0NjMsNyArNjI2Miw3IEBACiBzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCkBAIC03NDg2LDcgKzYyODUsNyBAQAogCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCi0JaWYgKGl3bDQ5NjVfaXNfcmVhZHkocHJpdikpCisJaWYgKGl3bF9pc19yZWFkeShwcml2KSkKIAkJaXdsNDk2NV9zZXRfbW9kZShwcml2LCBjb25mLT50eXBlKTsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtNzUwNCwyMyArNjMwMywyMyBAQAogICovCiBzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQljb25zdCBzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsIGNvbmYtPmNoYW5uZWwpOworCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXIgdG8gY2hhbm5lbCAlZFxuIiwgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCiAJcHJpdi0+YWRkX3JhZGlvdGFwID0gISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9SQURJT1RBUCk7CiAKLQlpZiAoIWl3bDQ5NjVfaXNfcmVhZHkocHJpdikpIHsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgewogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KCFpd2w0OTY1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbiAmJgorCWlmICh1bmxpa2VseSghcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5kaXNhYmxlX2h3X3NjYW4gJiYKIAkJICAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSkgewogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2Nhbm5pbmdcbiIpOwogCQlzZXRfYml0KFNUQVRVU19DT05GX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwpAQCAtNzUzMCwxMCArNjMyOSw5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JY2hfaW5mbyA9IGl3bDQ5NjVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBjb25mLT5waHltb2RlLCBjb25mLT5jaGFubmVsKTsKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwKKwkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSkpOwogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgewotCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBbJWRdIGlzIElOVkFMSUQgZm9yIHRoaXMgU0tVLlxuIiwKLQkJCSAgICAgICBjb25mLT5jaGFubmVsLCBjb25mLT5waHltb2RlKTsKIAkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGludmFsaWQgY2hhbm5lbFxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTc1NDEsMTAgKzYzMzksMTAgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCS8qIGlmIHdlIGFyZSBzd2l0Y2hpbmcgZnJvbiBodCB0byAyLjQgY2xlYXIgZmxhZ3MKKwkvKiBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gaHQgdG8gMi40IGNsZWFyIGZsYWdzCiAJICogZnJvbSBhbnkgaHQgcmVsYXRlZCBpbmZvIHNpbmNlIDIuNCBkb2VzIG5vdAogCSAqIHN1cHBvcnQgaHQgKi8KLQlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSAhPSBjb25mLT5jaGFubmVsKQorCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpICE9IGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKQogI2lmZGVmIElFRUU4MDIxMV9DT05GX0NIQU5ORUxfU1dJVENICiAJICAgICYmICEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOTkVMX1NXSVRDSCkKICNlbmRpZgpAQCAtNzU1MiwxMiArNjM1MCwxMyBAQAogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOwogI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAKLQlpd2w0OTY1X3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+cGh5bW9kZSwgY29uZi0+Y2hhbm5lbCk7CisJaXdsY29yZV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsCisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSkpOwogCi0JaXdsNDk2NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgY29uZi0+cGh5bW9kZSk7CisJaXdsNDk2NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CiAKIAkvKiBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmF0ZXMgYW5kIHJhdGUgbWFzayBjYW4gYmUgZGlmZmVyZW50Ci0JICogZm9yIGVhY2ggcGh5bW9kZTsgc2luY2UgdGhlIHBoeW1vZGUgbWF5IGhhdmUgY2hhbmdlZCwgcmVzZXQKKwkgKiBmb3IgZWFjaCBiYW5kOyBzaW5jZSB0aGUgYmFuZCBtYXkgaGF2ZSBjaGFuZ2VkLCByZXNldAogCSAqIHRoZSByYXRlIG1hc2sgdG8gd2hhdCBtYWM4MDIxMSBsaXN0cyAqLwogCWl3bDQ5NjVfc2V0X3JhdGUocHJpdik7CiAKQEAgLTc1NzAsMTQgKzYzNjksMTUgQEAKIAl9CiAjZW5kaWYKIAotCWl3bDQ5NjVfcmFkaW9fa2lsbF9zdyhwcml2LCAhY29uZi0+cmFkaW9fZW5hYmxlZCk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnJhZGlvX2tpbGxfc3cpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPnJhZGlvX2tpbGxfc3cocHJpdiwgIWNvbmYtPnJhZGlvX2VuYWJsZWQpOwogCiAJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChpd2w0OTY1X2lzX3Jma2lsbChwcml2KSkgeworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBraWxsXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CkBAIC03NTk5LDkgKzYzOTksOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfY29uZmlnX2FwKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2NvbmZpZ19hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNzYxNiw5ICs2NDE2LDkgQEAKIAkJLyogUlhPTiBUaW1pbmcgKi8KIAkJbWVtc2V0KCZwcml2LT5yeG9uX3RpbWluZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4b25fdGltZV9jbWQpKTsKIAkJaXdsNDk2NV9zZXR1cF9yeG9uX3RpbWluZyhwcml2KTsKLQkJcmMgPSBpd2w0OTY1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKKwkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCQlzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwotCQlpZiAocmMpCisJCWlmIChyZXQpCiAJCQlJV0xfV0FSTklORygiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgogCQkJCQkiQXR0ZW1wdGluZyB0byBjb250aW51ZS5cbiIpOwogCkBAIC03NjQ5LDkgKzY0NDksNyBAQAogCQkvKiByZXN0b3JlIFJYT04gYXNzb2MgKi8KIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDQ5NjVfY29tbWl0X3J4b24ocHJpdik7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfUU9TCiAJCWl3bDQ5NjVfYWN0aXZhdGVfcW9zKHByaXYsIDEpOwotI2VuZGlmCiAJCWl3bDQ5NjVfcnhvbl9hZGRfc3RhdGlvbihwcml2LCBpd2w0OTY1X2Jyb2FkY2FzdF9hZGRyLCAwKTsKIAl9CiAJaXdsNDk2NV9zZW5kX2JlYWNvbl9jbWQocHJpdik7CkBAIC03NjY1LDcgKzY0NjMsNyBAQAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwpAQCAtNzY3Myw2ICs2NDcxLDEyIEBACiAJaWYgKGNvbmYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CiAKKwlpZiAocHJpdi0+dmlmICE9IHZpZikgeworCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApICYmCiAJICAgICghY29uZi0+YmVhY29uIHx8ICFjb25mLT5zc2lkX2xlbikpIHsKIAkJSVdMX0RFQlVHX01BQzgwMjExCkBAIC03NjgwLDcgKzY0ODQsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIWl3bDQ5NjVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtNzY5NSwxNyArNjQ5OSw2IEBACiAJaWYgKHVubGlrZWx5KHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpICYmCiAJICAgICEocHJpdi0+aHctPmZsYWdzICYgSUVFRTgwMjExX0hXX05PX1BST0JFX0ZJTFRFUklORykpIHsKICAqLwotCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2Nhbm5pbmdcbiIpOwotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHByaXYtPnZpZiAhPSB2aWYpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOwotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJcmV0dXJuIDA7Ci0JfQogCiAJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKIAkJaWYgKCFjb25mLT5ic3NpZCkgewpAQCAtNzcyMCw3ICs2NTEzLDcgQEAKIAkJcHJpdi0+aWJzc19iZWFjb24gPSBjb25mLT5iZWFjb247CiAJfQogCi0JaWYgKGl3bDQ5NjVfaXNfcmZraWxsKHByaXYpKQorCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlnb3RvIGRvbmU7CiAKIAlpZiAoY29uZi0+YnNzaWQgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihjb25mLT5ic3NpZCkgJiYKQEAgLTc3ODgsMTMgKzY1ODEsMTMgQEAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmIChpd2w0OTY1X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSkgewogCQlpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cG9zdF9hc3NvY2lhdGUpOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CkBAIC03ODEyLDE0ICs2NjA1LDc3IEBACiAKIH0KIAorCisjaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFQKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfaHRfY29uZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9jb25mID0gYnNzX2NvbmYtPmh0X2NvbmY7CisJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqaHRfYnNzX2NvbmYgPSBic3NfY29uZi0+aHRfYnNzX2NvbmY7CisJc3RydWN0IGl3bF9odF9pbmZvICppd2xfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKKworCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IFxuIik7CisKKwlpd2xfY29uZi0+aXNfaHQgPSBic3NfY29uZi0+YXNzb2NfaHQ7CisKKwlpZiAoIWl3bF9jb25mLT5pc19odCkKKwkJcmV0dXJuOworCisJcHJpdi0+cHNfbW9kZSA9ICh1OCkoKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUykgPj4gMik7CisKKwlpZiAoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApCisJCWl3bF9jb25mLT5zZ2YgfD0gMHgxOworCWlmIChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkKKwkJaXdsX2NvbmYtPnNnZiB8PSAweDI7CisKKwlpd2xfY29uZi0+aXNfZ3JlZW5fZmllbGQgPSAhIShodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpOworCWl3bF9jb25mLT5tYXhfYW1zZHVfc2l6ZSA9CisJCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKTsKKworCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9CisJCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIKTsKKwlpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KKwkJaHRfYnNzX2NvbmYtPmJzc19jYXAgJiBJRUVFODAyMTFfSFRfSUVfQ0hBX1NFQ19PRkZTRVQ7CisJLyogSWYgbm8gYWJvdmUgb3IgYmVsb3cgY2hhbm5lbCBzdXBwbGllZCBkaXNhYmxlIEZBVCBjaGFubmVsICovCisJaWYgKGl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgIT0gSVdMX0VYVF9DSEFOTkVMX09GRlNFVF9BQk9WRSAmJgorCSAgICBpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ICE9IElXTF9FWFRfQ0hBTk5FTF9PRkZTRVRfQkVMT1cpCisJCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9IDA7CisKKwlpd2xfY29uZi0+dHhfbWltb19wc19tb2RlID0KKwkJKHU4KSgoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTKSA+PiAyKTsKKwltZW1jcHkoaXdsX2NvbmYtPnN1cHBfbWNzX3NldCwgaHRfY29uZi0+c3VwcF9tY3Nfc2V0LCAxNik7CisKKwlpd2xfY29uZi0+Y29udHJvbF9jaGFubmVsID0gaHRfYnNzX2NvbmYtPnByaW1hcnlfY2hhbm5lbDsKKwlpd2xfY29uZi0+dHhfY2hhbl93aWR0aCA9CisJCSEhKGh0X2Jzc19jb25mLT5ic3NfY2FwICYgSUVFRTgwMjExX0hUX0lFX0NIQV9XSURUSCk7CisJaXdsX2NvbmYtPmh0X3Byb3RlY3Rpb24gPQorCQlodF9ic3NfY29uZi0+YnNzX29wX21vZGUgJiBJRUVFODAyMTFfSFRfSUVfSFRfUFJPVEVDVElPTjsKKwlpd2xfY29uZi0+bm9uX0dGX1NUQV9wcmVzZW50ID0KKwkJISEoaHRfYnNzX2NvbmYtPmJzc19vcF9tb2RlICYgSUVFRTgwMjExX0hUX0lFX05PTl9HRl9TVEFfUFJTTlQpOworCisJSVdMX0RFQlVHX01BQzgwMjExKCJjb250cm9sIGNoYW5uZWwgJWRcbiIsIGl3bF9jb25mLT5jb250cm9sX2NoYW5uZWwpOworCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2w0OTY1X2h0X2NvbmYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKQoreworfQorI2VuZGlmCisKKyNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQyAoSFoqNikKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJCQkgICAgIHUzMiBjaGFuZ2VzKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCUlXTF9ERUJVR19NQUM4MDIxMSgiY2hhbmdlcyA9IDB4JVhcbiIsIGNoYW5nZXMpOwogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfUFJFQU1CTEUgJWRcbiIsCisJCQkJICAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAkJZWxzZQpAQCAtNzgyNywzNSArNjY4Myw1OCBAQAogCX0KIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7Ci0JCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90ICYmIChwcml2LT5waHltb2RlICE9IE1PREVfSUVFRTgwMjExQSkpCisJCUlXTF9ERUJVR19NQUM4MDIxMSgiRVJQX0NUUyAlZFxuIiwgYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCk7CisJCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90ICYmIChwcml2LT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzVHSFopKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKIAkJZWxzZQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CiAJfQogCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQkvKgotCQkgKiBUT0RPOgotCQkgKiBkbyBzdHVmZiBpbnN0ZWFkIG9mIHNuaWZmaW5nIGFzc29jIHJlc3AKLQkJICovCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9IVCkgeworCQlJV0xfREVCVUdfTUFDODAyMTEoIkhUICVkXG4iLCBic3NfY29uZi0+YXNzb2NfaHQpOworCQlpd2w0OTY1X2h0X2NvbmYocHJpdiwgYnNzX2NvbmYpOworCQlpd2w0OTY1X3NldF9yeG9uX2NoYWluKHByaXYpOwogCX0KIAotCWlmIChpd2w0OTY1X2lzX2Fzc29jaWF0ZWQocHJpdikpCi0JCWl3bDQ5NjVfc2VuZF9yeG9uX2Fzc29jKHByaXYpOworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKCJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHRoaXMgZnVuY3Rpb24gc2hvdWxkCisJCSAqIG5ldmVyIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiAqLworCQlpZiAoV0FSTl9PTl9PTkNFKGluX2ludGVycnVwdCgpKSkKKwkJCXJldHVybjsKKwkJaWYgKGJzc19jb25mLT5hc3NvYykgeworCQkJcHJpdi0+YXNzb2NfaWQgPSBic3NfY29uZi0+YWlkOworCQkJcHJpdi0+YmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OworCQkJcHJpdi0+dGltZXN0YW1wID0gYnNzX2NvbmYtPnRpbWVzdGFtcDsKKwkJCXByaXYtPmFzc29jX2NhcGFiaWxpdHkgPSBic3NfY29uZi0+YXNzb2NfY2FwYWJpbGl0eTsKKwkJCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArCisJCQkJCUlXTF9ERUxBWV9ORVhUX1NDQU5fQUZURVJfQVNTT0M7CisJCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCQlpd2w0OTY1X3Bvc3RfYXNzb2NpYXRlKHByaXYpOworCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJCX0gZWxzZSB7CisJCQlwcml2LT5hc3NvY19pZCA9IDA7CisJCQlJV0xfREVCVUdfTUFDODAyMTEoIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOworCQl9CisJfSBlbHNlIGlmIChjaGFuZ2VzICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX2lkKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEoIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CisJCQlpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYpOworCX0KKwogfQogCiBzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzc2lkLCBzaXplX3QgbGVuKQogewogCWludCByYyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKCFpd2w0OTY1X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKIAkJcmMgPSAtRUlPOwogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTc5MDEsMTggKzY3ODAsNjcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfbWFjX3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIGNvbnN0IHU4ICphZGRyLAorCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXU4IHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlfX2xlMTYga2V5X2ZsYWdzID0gMDsKKwlpbnQgaTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCisJc3RhX2lkID0gaXdsNDk2NV9od19maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7CisJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSAlcyBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQkJCSAgIHByaW50X21hYyhtYWMsIGFkZHIpKTsKKwkJcmV0dXJuOworCX0KKworCWl3bDQ5NjVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCisJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19US0lQIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOworCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKKwlrZXlfZmxhZ3MgJj0gflNUQV9LRVlfRkxHX0lOVkFMSUQ7CisKKwlpZiAoc3RhX2lkID09IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQpCisJCWtleV9mbGFncyB8PSBTVEFfS0VZX01VTFRJQ0FTVF9NU0s7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7CisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LnRraXBfcnhfdHNjX2J5dGUyID0gKHU4KSBpdjMyOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LnRraXBfcnhfdHRha1tpXSA9CisJCQljcHVfdG9fbGUxNihwaGFzZTFrZXlbaV0pOworCisJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKKwlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKworCWl3bDQ5NjVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Cit9CisKIHN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCiAJCQkgICBjb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCWludCByYyA9IDA7Ci0JdTggc3RhX2lkOworCWludCByZXQgPSAwOworCXU4IHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047CisJdTggaXNfZGVmYXVsdF93ZXBfa2V5ID0gMDsKIAogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2w0OTY1X3BhcmFtX2h3Y3J5cHRvKSB7CisJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC03OTI2LDUzICs2ODU0LDYxIEBACiAJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSAlcyBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAogCQkJCSAgIHByaW50X21hYyhtYWMsIGFkZHIpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisKIAl9CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KIAlpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCS8qIElmIHdlIGFyZSBnZXR0aW5nIFdFUCBncm91cCBrZXkgYW5kIHdlIGRpZG4ndCByZWNlaXZlIGFueSBrZXkgbWFwcGluZworCSAqIHNvIGZhciwgd2UgYXJlIGluIGxlZ2FjeSB3ZXAgbW9kZSAoZ3JvdXAga2V5IG9ubHkpLCBvdGhlcndpc2Ugd2UgYXJlCisJICogaW4gMVggbW9kZS4KKwkgKiBJbiBsZWdhY3kgd2VwIG1vZGUsIHdlIHVzZSBhbm90aGVyIGhvc3QgY29tbWFuZCB0byB0aGUgdUNvZGUgKi8KKwlpZiAoa2V5LT5hbGcgPT0gQUxHX1dFUCAmJiBzdGFfaWQgPT0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCAmJgorCQlwcml2LT5pd19tb2RlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CisJCWlmIChjbWQgPT0gU0VUX0tFWSkKKwkJCWlzX2RlZmF1bHRfd2VwX2tleSA9ICFwcml2LT5rZXlfbWFwcGluZ19rZXk7CisJCWVsc2UKKwkJCWlzX2RlZmF1bHRfd2VwX2tleSA9IHByaXYtPmRlZmF1bHRfd2VwX2tleTsKKwl9CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgIFNFVF9LRVk6Ci0JCXJjID0gaXdsNDk2NV91cGRhdGVfc3RhX2tleV9pbmZvKHByaXYsIGtleSwgc3RhX2lkKTsKLQkJaWYgKCFyYykgewotCQkJaXdsNDk2NV9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAxKTsKLQkJCWl3bDQ5NjVfY29tbWl0X3J4b24ocHJpdik7Ci0JCQlrZXktPmh3X2tleV9pZHggPSBzdGFfaWQ7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoInNldF9rZXkgc3VjY2VzcywgdXNpbmcgaHdjcnlwdG9cbiIpOwotCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0JCX0KKwljYXNlIFNFVF9LRVk6CisJCWlmIChpc19kZWZhdWx0X3dlcF9rZXkpCisJCQlyZXQgPSBpd2xfc2V0X2RlZmF1bHRfd2VwX2tleShwcml2LCBrZXkpOworCQllbHNlCisJCQlyZXQgPSBpd2xfc2V0X2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKKworCQlJV0xfREVCVUdfTUFDODAyMTEoImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOgotCQlyYyA9IGl3bDQ5NjVfY2xlYXJfc3RhX2tleV9pbmZvKHByaXYsIHN0YV9pZCk7Ci0JCWlmICghcmMpIHsKLQkJCWl3bDQ5NjVfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgMCk7Ci0JCQlpd2w0OTY1X2NvbW1pdF9yeG9uKHByaXYpOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7Ci0JCX0KKwkJaWYgKGlzX2RlZmF1bHRfd2VwX2tleSkKKwkJCXJldCA9IGl3bF9yZW1vdmVfZGVmYXVsdF93ZXBfa2V5KHByaXYsIGtleSk7CisJCWVsc2UKKwkJCXJldCA9IGl3bF9yZW1vdmVfZHluYW1pY19rZXkocHJpdiwgc3RhX2lkKTsKKworCQlJV0xfREVCVUdfTUFDODAyMTEoImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmMgPSAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAogCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfUU9TCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcTsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9RT1MgKi8KIAogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2w0OTY1X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKIAkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTc5ODIsNyArNjkxOCw2IEBACiAJCXJldHVybiAwOwogCX0KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X1FPUwogCWlmICghcHJpdi0+cW9zX2RhdGEucW9zX2VuYWJsZSkgewogCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKIAkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHFvcyBub3QgZW5hYmxlZFxuIik7CkBAIC03OTk2LDcgKzY5MzEsNyBAQAogCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1txXS5jd19tYXggPSBjcHVfdG9fbGUxNihwYXJhbXMtPmN3X21heCk7CiAJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmFpZnNuID0gcGFyYW1zLT5haWZzOwogCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1txXS5lZGNhX3R4b3AgPQotCQkJY3B1X3RvX2xlMTYoKHBhcmFtcy0+YnVyc3RfdGltZSAqIDEwMCkpOworCQkJY3B1X3RvX2xlMTYoKHBhcmFtcy0+dHhvcCAqIDMyKSk7CiAKIAlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbcV0ucmVzZXJ2ZWQxID0gMDsKIAlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMTsKQEAgLTgwMDYsMTMgKzY5NDEsMTEgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCiAJCWl3bDQ5NjVfYWN0aXZhdGVfcW9zKHByaXYsIDEpOwotCWVsc2UgaWYgKHByaXYtPmFzc29jX2lkICYmIGl3bDQ5NjVfaXNfYXNzb2NpYXRlZChwcml2KSkKKwllbHNlIGlmIChwcml2LT5hc3NvY19pZCAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKIAkJaXdsNDk2NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfUU9TICovCi0KIAlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgwMjAsNyArNjk1Myw3IEBACiBzdGF0aWMgaW50IGl3bDQ5NjVfbWFjX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IGksIGF2YWlsOwogCXN0cnVjdCBpd2w0OTY1X3R4X3F1ZXVlICp0eHE7CiAJc3RydWN0IGl3bDQ5NjVfcXVldWUgKnE7CkBAIC04MDI4LDcgKzY5NjEsNyBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDQ5NjVfaXNfcmVhZHlfcmYocHJpdikpIHsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtODA3MSw3ICs3MDA0LDcgQEAKIAogc3RhdGljIHZvaWQgaXdsNDk2NV9tYWNfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtODA4MiwzMCArNzAxNSwxNSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJbWVtc2V0KCZwcml2LT5jdXJyZW50X2h0X2NvbmZpZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfaHRfaW5mbykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVF9BR0cKLS8qCWlmIChwcml2LT5scV9tbmdyLmFnZ19jdHJsLmdyYW50ZWRfYmEpCi0JCWl3bDQ5NjVfdHVybl9vZmZfYWdnKHByaXYsIFRJRF9BTExfU1BFQ0lGSUVEKTsqLwotCi0JbWVtc2V0KCYocHJpdi0+bHFfbW5nci5hZ2dfY3RybCksIDAsIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9hZ2dfY29udHJvbCkpOwotCXByaXYtPmxxX21uZ3IuYWdnX2N0cmwudGlkX3RyYWZmaWNfbG9hZF90aHJlc2hvbGQgPSAxMDsKLQlwcml2LT5scV9tbmdyLmFnZ19jdHJsLmJhX3RpbWVvdXQgPSA1MDAwOwotCXByaXYtPmxxX21uZ3IuYWdnX2N0cmwuYXV0b19hZ2cgPSAxOwotCi0JaWYgKHByaXYtPmxxX21uZ3IuYWdnX2N0cmwuYXV0b19hZ2cpCi0JCXByaXYtPmxxX21uZ3IuYWdnX2N0cmwucmVxdWVzdGVkX2JhID0gVElEX0FMTF9FTkFCTEVEOwotI2VuZGlmIC8qQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCiAjZW5kaWYgLyogQ09ORklHX0lXTDQ5NjVfSFQgKi8KIAotI2lmZGVmIENPTkZJR19JV0w0OTY1X1FPUwotCWl3bDQ5NjVfcmVzZXRfcW9zKHByaXYpOwotI2VuZGlmCisJaXdsY29yZV9yZXNldF9xb3MocHJpdik7CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5wb3N0X2Fzc29jaWF0ZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPmFzc29jX2lkID0gMDsKIAlwcml2LT5hc3NvY19jYXBhYmlsaXR5ID0gMDsKLQlwcml2LT5jYWxsX3Bvc3RfYXNzb2NfZnJvbV9iZWFjb24gPSAwOwogCXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgPSAwOwogCiAJLyogbmV3IGFzc29jaWF0aW9uIGdldCByaWQgb2YgaWJzcyBiZWFjb24gc2tiICovCkBAIC04MTE1LDE0ICs3MDMzLDEzIEBACiAJcHJpdi0+aWJzc19iZWFjb24gPSBOVUxMOwogCiAJcHJpdi0+YmVhY29uX2ludCA9IHByaXYtPmh3LT5jb25mLmJlYWNvbl9pbnQ7Ci0JcHJpdi0+dGltZXN0YW1wMSA9IDA7Ci0JcHJpdi0+dGltZXN0YW1wMCA9IDA7CisJcHJpdi0+dGltZXN0YW1wID0gMDsKIAlpZiAoKHByaXYtPml3X21vZGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKSkKIAkJcHJpdi0+YmVhY29uX2ludCA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWl3bDQ5NjVfaXNfcmVhZHlfcmYocHJpdikpIHsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewogCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybjsKQEAgLTgxNTcsMTMgKzcwNzQsMTMgQEAKIHN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2w0OTY1X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKIAkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTgxODcsOSArNzEwNCw3IEBACiAJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfUU9TCi0JaXdsNDk2NV9yZXNldF9xb3MocHJpdik7Ci0jZW5kaWYKKwlpd2xjb3JlX3Jlc2V0X3Fvcyhwcml2KTsKIAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cG9zdF9hc3NvY2lhdGUud29yayk7CiAKQEAgLTgxOTgsMTExICs3MTEzLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9IVAotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2h0X2luZm9fZmlsbChzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYsCi0JCQkJIHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bF9odF9pbmZvICppd2xfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2NvbmYgPSAmY29uZi0+aHRfY29uZjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvICpodF9ic3NfY29uZiA9ICZjb25mLT5odF9ic3NfY29uZjsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IFxuIik7Ci0KLQlpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERSkpIHsKLQkJaXdsX2NvbmYtPmlzX2h0ID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWl3bF9jb25mLT5pc19odCA9IDE7Ci0JcHJpdi0+cHNfbW9kZSA9ICh1OCkoKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUykgPj4gMik7Ci0KLQlpZiAoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApCi0JCWl3bF9jb25mLT5zZ2YgfD0gMHgxOwotCWlmIChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkKLQkJaXdsX2NvbmYtPnNnZiB8PSAweDI7Ci0KLQlpd2xfY29uZi0+aXNfZ3JlZW5fZmllbGQgPSAhIShodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpOwotCWl3bF9jb25mLT5tYXhfYW1zZHVfc2l6ZSA9Ci0JCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKTsKLQlpd2xfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggPQotCQkhIShodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSCk7Ci0JaXdsX2NvbmYtPnR4X21pbW9fcHNfbW9kZSA9Ci0JCSh1OCkoKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUlNT19QUykgPj4gMik7Ci0JbWVtY3B5KGl3bF9jb25mLT5zdXBwX21jc19zZXQsIGh0X2NvbmYtPnN1cHBfbWNzX3NldCwgMTYpOwotCi0JaXdsX2NvbmYtPmNvbnRyb2xfY2hhbm5lbCA9IGh0X2Jzc19jb25mLT5wcmltYXJ5X2NoYW5uZWw7Ci0JaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9Ci0JCWh0X2Jzc19jb25mLT5ic3NfY2FwICYgSUVFRTgwMjExX0hUX0lFX0NIQV9TRUNfT0ZGU0VUOwotCWl3bF9jb25mLT50eF9jaGFuX3dpZHRoID0KLQkJISEoaHRfYnNzX2NvbmYtPmJzc19jYXAgJiBJRUVFODAyMTFfSFRfSUVfQ0hBX1dJRFRIKTsKLQlpd2xfY29uZi0+aHRfcHJvdGVjdGlvbiA9Ci0JCWh0X2Jzc19jb25mLT5ic3Nfb3BfbW9kZSAmIElFRUU4MDIxMV9IVF9JRV9IVF9QUk9URUNUSU9OOwotCWl3bF9jb25mLT5ub25fR0ZfU1RBX3ByZXNlbnQgPQotCQkhIShodF9ic3NfY29uZi0+YnNzX29wX21vZGUgJiBJRUVFODAyMTFfSFRfSUVfTk9OX0dGX1NUQV9QUlNOVCk7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImNvbnRyb2wgY2hhbm5lbCAlZFxuIiwKLQkJaXdsX2NvbmYtPmNvbnRyb2xfY2hhbm5lbCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsNDk2NV9tYWNfY29uZl9odChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlcjogXG4iKTsKLQotCWl3bDQ5NjVfaHRfaW5mb19maWxsKGNvbmYsIHByaXYpOwotCWl3bDQ5NjVfc2V0X3J4b25fY2hhaW4ocHJpdik7Ci0KLQlpZiAocHJpdiAmJiBwcml2LT5hc3NvY19pZCAmJgotCSAgICAocHJpdi0+aXdfbW9kZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKHByaXYtPmJlYWNvbl9pbnQpCi0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnBvc3RfYXNzb2NpYXRlLndvcmspOwotCQllbHNlCi0JCQlwcml2LT5jYWxsX3Bvc3RfYXNzb2NfZnJvbV9iZWFjb24gPSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZTpcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpd2w0OTY1X3NldF9odF9jYXBhYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpodF9jYXAsCi0JCQl1OCB1c2VfY3VycmVudF9jb25maWcpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSA9IGNvbmYtPm1vZGU7Ci0KLQlpZiAodXNlX2N1cnJlbnRfY29uZmlnKSB7Ci0JCWh0X2NhcC0+Y2FwX2luZm8gPSBjcHVfdG9fbGUxNihjb25mLT5odF9jb25mLmNhcCk7Ci0JCW1lbWNweShodF9jYXAtPnN1cHBfbWNzX3NldCwKLQkJCQljb25mLT5odF9jb25mLnN1cHBfbWNzX3NldCwgMTYpOwotCX0gZWxzZSB7Ci0JCWh0X2NhcC0+Y2FwX2luZm8gPSBjcHVfdG9fbGUxNihtb2RlLT5odF9pbmZvLmNhcCk7Ci0JCW1lbWNweShodF9jYXAtPnN1cHBfbWNzX3NldCwKLQkJCQltb2RlLT5odF9pbmZvLnN1cHBfbWNzX3NldCwgMTYpOwotCX0KLQlodF9jYXAtPmFtcGR1X3BhcmFtc19pbmZvID0KLQkJKG1vZGUtPmh0X2luZm8uYW1wZHVfZmFjdG9yICYgSUVFRTgwMjExX0hUX0NBUF9BTVBEVV9GQUNUT1IpIHwKLQkJKChtb2RlLT5odF9pbmZvLmFtcGR1X2RlbnNpdHkgPDwgMikgJgotCQkJCQlJRUVFODAyMTFfSFRfQ0FQX0FNUERVX0RFTlNJVFkpOwotfQotCi0jZW5kaWYgLypDT05GSUdfSVdMNDk2NV9IVCovCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHN5c2ZzIGF0dHJpYnV0ZXMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBDT05GSUdfSVdMNDk2NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGFkZHMgYSBuZXcgYXR0cmlidXRlIHRvIHRoZSBzeXNmcyByZXByZXNlbnRhdGlvbgpAQCAtODMxNCw3ICs3MTMxLDcgQEAKIAogc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgaXdsNDk2NV9kZWJ1Z19sZXZlbCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBpd2xfZGVidWdfbGV2ZWwpOwogfQogc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtODMyNyw3ICs3MTQ0LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCQkgICAgICAgIjogJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKLQkJaXdsNDk2NV9kZWJ1Z19sZXZlbCA9IHZhbDsKKwkJaXdsX2RlYnVnX2xldmVsID0gdmFsOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC04MzM1LDQ1ICs3MTUyLDE1IEBACiBzdGF0aWMgRFJJVkVSX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBzaG93X2RlYnVnX2xldmVsLCBzdG9yZV9kZWJ1Z19sZXZlbCk7CiAKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9ERUJVRyAqLworI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfcmZfa2lsbChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JLyoKLQkgKiAwIC0gUkYga2lsbCBub3QgZW5hYmxlZAotCSAqIDEgLSBTVyBiYXNlZCBSRiBraWxsIGFjdGl2ZSAoc3lzZnMpCi0JICogMiAtIEhXIGJhc2VkIFJGIGtpbGwgYWN0aXZlCi0JICogMyAtIEJvdGggSFcgYW5kIFNXIGJhc2VkIFJGIGtpbGwgYWN0aXZlCi0JICovCi0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsNDk2NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHZhbCA9ICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykgPyAweDEgOiAweDApIHwKLQkJICAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpID8gMHgyIDogMHgwKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCB2YWwpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9yZl9raWxsKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2w0OTY1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpd2w0OTY1X3JhZGlvX2tpbGxfc3cocHJpdiwgYnVmWzBdID09ICcxJyk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihyZl9raWxsLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19yZl9raWxsLCBzdG9yZV9yZl9raWxsKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wZXJhdHVyZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsNDk2NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCi0JaWYgKCFpd2w0OTY1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZShwcml2KSk7CkBAIC04Mzg1LDcgKzcxNzIsNyBAQAogCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOwogCXJldHVybiBpd2w0OTY1X2ZpbGxfcnNfaW5mbyhwcml2LT5odywgYnVmLCBJV0xfQVBfSUQpOwogfQogc3RhdGljIERFVklDRV9BVFRSKHJzX3dpbmRvdywgU19JUlVHTywgc2hvd19yc193aW5kb3csIE5VTEwpOwpAQCAtODM5Myw3ICs3MTgwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdHhfcG93ZXIoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2w0OTY1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCk7CiB9CiAKQEAgLTg0MDEsNyArNzE4OCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDQ5NjVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAJdTMyIHZhbDsKIApAQCAtODQyMCw3ICs3MjA3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZmxhZ3Moc3RydWN0IGRldmljZSAqZCwKIAkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2w0OTY1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNFhcbiIsIHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzKTsKIH0KQEAgLTg0MjksNyArNzIxNiw3IEBACiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDQ5NjVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAl1MzIgZmxhZ3MgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtODQ1NCw3ICs3MjQxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZmlsdGVyX2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsNDk2NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDRYXG4iLAogCQlsZTMyX3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MpKTsKQEAgLTg0NjQsNyArNzI1MSw3IEBACiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDQ5NjVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAl1MzIgZmlsdGVyX2ZsYWdzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTg0ODgsNzEgKzcyNzUsMTIgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihmaWx0ZXJfZmxhZ3MsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ZpbHRlcl9mbGFncywKIAkJICAgc3RvcmVfZmlsdGVyX2ZsYWdzKTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd190dW5lKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2w0OTY1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0WFxuIiwKLQkJICAgICAgIChwcml2LT5waHltb2RlIDw8IDgpIHwKLQkJCWxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsNDk2NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUoc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiwgdTggcGh5bW9kZSk7Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3R1bmUoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDQ5NjVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwotCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKLQl1MTYgdHVuZSA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKTsKLQl1OCBwaHltb2RlID0gKHR1bmUgPj4gOCkgJiAweGZmOwotCXUxNiBjaGFubmVsID0gdHVuZSAmIDB4ZmY7Ci0KLQlJV0xfREVCVUdfSU5GTygiVHVuZSByZXF1ZXN0IHRvOiVkIGNoYW5uZWw6JWRcbiIsIHBoeW1vZGUsIGNoYW5uZWwpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpICE9IGNoYW5uZWwpIHx8Ci0JICAgIChwcml2LT5waHltb2RlICE9IHBoeW1vZGUpKSB7Ci0JCWNvbnN0IHN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQotCQljaF9pbmZvID0gaXdsNDk2NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHBoeW1vZGUsIGNoYW5uZWwpOwotCQlpZiAoIWNoX2luZm8pIHsKLQkJCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgaW52YWxpZCBwaHltb2RlL2NoYW5uZWwgIgotCQkJCSAgICAiY29tYmluYXRpb246ICVkICVkXG4iLCBwaHltb2RlLCBjaGFubmVsKTsKLQkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCi0JCWlmIChpd2w0OTY1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKLQkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyBwaHltb2RlIGFuZCAiCi0JCQkJICAgICAgICJyeG9uLmNoYW5uZWwgPSAlZCAlZFxuIiwKLQkJCQkgICAgICAgcGh5bW9kZSwgY2hhbm5lbCk7Ci0KLQkJCWl3bDQ5NjVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBwaHltb2RlLCBjaGFubmVsKTsKLQkJCWl3bDQ5NjVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHByaXYsIHBoeW1vZGUpOwotCi0JCQlpd2w0OTY1X3NldF9yYXRlKHByaXYpOwotCQkJaXdsNDk2NV9jb21taXRfcnhvbihwcml2KTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHR1bmUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3R1bmUsIHN0b3JlX3R1bmUpOwotCiAjaWZkZWYgQ09ORklHX0lXTDQ5NjVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAogc3RhdGljIHNzaXplX3Qgc2hvd19tZWFzdXJlbWVudChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJc3RydWN0IGl3bDQ5NjVfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwogCXUzMiBzaXplID0gc2l6ZW9mKG1lYXN1cmVfcmVwb3J0KSwgbGVuID0gMCwgb2ZzID0gMDsKIAl1OCAqZGF0YSA9ICh1OCAqKSAmIG1lYXN1cmVfcmVwb3J0OwpAQCAtODU4NSw3ICs3MzEzLDcgQEAKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtcyA9IHsKIAkJLmNoYW5uZWwgPSBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwKIAkJLnN0YXJ0X3RpbWUgPSBjcHVfdG9fbGU2NChwcml2LT5sYXN0X3RzZiksCkBAIC04NjI0LDcgKzczNTIsNyBAQAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCiAJcHJpdi0+cmV0cnlfcmF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAJaWYgKHByaXYtPnJldHJ5X3JhdGUgPD0gMCkKQEAgLTg2MzYsNyArNzM2NCw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cmV0cnlfcmF0ZSk7CiB9CiAKQEAgLTg2NDcsMTQgKzczNzUsMTQgQEAKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCWludCByYzsKIAlpbnQgbW9kZTsKIAogCW1vZGUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsNDk2NV9pc19yZWFkeShwcml2KSkgeworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CiAJCXJjID0gLUVBR0FJTjsKIAkJZ290byBvdXQ7CiAJfQpAQCAtODcwMSw3ICs3NDI5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCWludCBsZXZlbCA9IElXTF9QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKIAljaGFyICpwID0gYnVmOwogCkBAIC04NzM2LDczICs3NDY0LDggQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWludCBsZW4gPSAwLCBpOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHMgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqaHdfbW9kZSA9IE5VTEw7Ci0JaW50IGNvdW50ID0gMDsKLQotCWlmICghaXdsNDk2NV9pc19yZWFkeShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlod19tb2RlID0gaXdsNDk2NV9nZXRfaHdfbW9kZShwcml2LCBNT0RFX0lFRUU4MDIxMUcpOwotCWlmICghaHdfbW9kZSkKLQkJaHdfbW9kZSA9IGl3bDQ5NjVfZ2V0X2h3X21vZGUocHJpdiwgTU9ERV9JRUVFODAyMTFCKTsKLQlpZiAoaHdfbW9kZSkgewotCQljaGFubmVscyA9IGh3X21vZGUtPmNoYW5uZWxzOwotCQljb3VudCA9IGh3X21vZGUtPm51bV9jaGFubmVsczsKLQl9Ci0KLQlsZW4gKz0KLQkgICAgc3ByaW50ZigmYnVmW2xlbl0sCi0JCSAgICAiRGlzcGxheWluZyAlZCBjaGFubmVscyBpbiAyLjRHSHogYmFuZCAiCi0JCSAgICAiKDgwMi4xMWJnKTpcbiIsIGNvdW50KTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQlsZW4gKz0gc3ByaW50ZigmYnVmW2xlbl0sICIlZDogJWRkQm06IEJTUyVzJXMsICVzLlxuIiwKLQkJCSAgICAgICBjaGFubmVsc1tpXS5jaGFuLAotCQkJICAgICAgIGNoYW5uZWxzW2ldLnBvd2VyX2xldmVsLAotCQkJICAgICAgIGNoYW5uZWxzW2ldLgotCQkJICAgICAgIGZsYWcgJiBJRUVFODAyMTFfQ0hBTl9XX1JBREFSX0RFVEVDVCA/Ci0JCQkgICAgICAgIiAoSUVFRSA4MDIuMTFoIHJlcXVpcmVkKSIgOiAiIiwKLQkJCSAgICAgICAoIShjaGFubmVsc1tpXS5mbGFnICYgSUVFRTgwMjExX0NIQU5fV19JQlNTKQotCQkJCXx8IChjaGFubmVsc1tpXS4KLQkJCQkgICAgZmxhZyAmCi0JCQkJICAgIElFRUU4MDIxMV9DSEFOX1dfUkFEQVJfREVURUNUKSkgPyAiIiA6Ci0JCQkgICAgICAgIiwgSUJTUyIsCi0JCQkgICAgICAgY2hhbm5lbHNbaV0uCi0JCQkgICAgICAgZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU4gPwotCQkJICAgICAgICJhY3RpdmUvcGFzc2l2ZSIgOiAicGFzc2l2ZSBvbmx5Iik7Ci0KLQlod19tb2RlID0gaXdsNDk2NV9nZXRfaHdfbW9kZShwcml2LCBNT0RFX0lFRUU4MDIxMUEpOwotCWlmIChod19tb2RlKSB7Ci0JCWNoYW5uZWxzID0gaHdfbW9kZS0+Y2hhbm5lbHM7Ci0JCWNvdW50ID0gaHdfbW9kZS0+bnVtX2NoYW5uZWxzOwotCX0gZWxzZSB7Ci0JCWNoYW5uZWxzID0gTlVMTDsKLQkJY291bnQgPSAwOwotCX0KLQotCWxlbiArPSBzcHJpbnRmKCZidWZbbGVuXSwgIkRpc3BsYXlpbmcgJWQgY2hhbm5lbHMgaW4gNS4yR0h6IGJhbmQgIgotCQkgICAgICAgIig4MDIuMTFhKTpcbiIsIGNvdW50KTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQlsZW4gKz0gc3ByaW50ZigmYnVmW2xlbl0sICIlZDogJWRkQm06IEJTUyVzJXMsICVzLlxuIiwKLQkJCSAgICAgICBjaGFubmVsc1tpXS5jaGFuLAotCQkJICAgICAgIGNoYW5uZWxzW2ldLnBvd2VyX2xldmVsLAotCQkJICAgICAgIGNoYW5uZWxzW2ldLgotCQkJICAgICAgIGZsYWcgJiBJRUVFODAyMTFfQ0hBTl9XX1JBREFSX0RFVEVDVCA/Ci0JCQkgICAgICAgIiAoSUVFRSA4MDIuMTFoIHJlcXVpcmVkKSIgOiAiIiwKLQkJCSAgICAgICAoIShjaGFubmVsc1tpXS5mbGFnICYgSUVFRTgwMjExX0NIQU5fV19JQlNTKQotCQkJCXx8IChjaGFubmVsc1tpXS4KLQkJCQkgICAgZmxhZyAmCi0JCQkJICAgIElFRUU4MDIxMV9DSEFOX1dfUkFEQVJfREVURUNUKSkgPyAiIiA6Ci0JCQkgICAgICAgIiwgSUJTUyIsCi0JCQkgICAgICAgY2hhbm5lbHNbaV0uCi0JCQkgICAgICAgZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU4gPwotCQkJICAgICAgICJhY3RpdmUvcGFzc2l2ZSIgOiAicGFzc2l2ZSBvbmx5Iik7Ci0KLQlyZXR1cm4gbGVuOworCS8qIGFsbCB0aGlzIHNoaXQgZG9lc24ndCBiZWxvbmcgaW50byBzeXNmcyBhbnl3YXkgKi8KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGNoYW5uZWxzLCBTX0lSVVNSLCBzaG93X2NoYW5uZWxzLCBOVUxMKTsKQEAgLTg4MTAsMTcgKzc0NzMsMTcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdGlzdGljcyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfbm90aWZfc3RhdGlzdGljcyk7CiAJdTMyIGxlbiA9IDAsIG9mcyA9IDA7CiAJdTggKmRhdGEgPSAodTggKikgJiBwcml2LT5zdGF0aXN0aWNzOwogCWludCByYyA9IDA7CiAKLQlpZiAoIWl3bDQ5NjVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXJjID0gaXdsNDk2NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2KTsKKwlyYyA9IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCAwKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChyYykgewpAQCAtODg0OCw5ICs3NTExLDkgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYW50ZW5uYShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAKLQlpZiAoIWl3bDQ5NjVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPmFudGVubmEpOwpAQCAtODg2MSw3ICs3NTI0LDcgQEAKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IGFudDsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAogCWlmIChjb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTg4ODYsOCArNzU0OSw4IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2w0OTY1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bDQ5NjVfaXNfYWxpdmUocHJpdikpCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIChpbnQpcHJpdi0+c3RhdHVzKTsKIH0KQEAgLTg5MDEsNyArNzU2NCw3IEBACiAJY2hhciAqcCA9IChjaGFyICopYnVmOwogCiAJaWYgKHBbMF0gPT0gJzEnKQotCQlpd2w0OTY1X2R1bXBfbmljX2Vycm9yX2xvZygoc3RydWN0IGl3bDQ5NjVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKKwkJaXdsNDk2NV9kdW1wX25pY19lcnJvcl9sb2coKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQpAQCAtODkxNSw3ICs3NTc4LDcgQEAKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAKIAlpZiAocFswXSA9PSAnMScpCi0JCWl3bDQ5NjVfZHVtcF9uaWNfZXZlbnRfbG9nKChzdHJ1Y3QgaXdsNDk2NV9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOworCQlpd2w0OTY1X2R1bXBfbmljX2V2ZW50X2xvZygoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC04OTI4LDcgKzc1OTEsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgaXdsNDk2NV9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOwogCkBAIC04OTUzLDcgKzc2MTYsNyBAQAogCQkgICAgIGl3bDQ5NjVfaXJxX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2w0OTY1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2w0OTY1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2w0OTY1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpOwogCkBAIC04OTc2LDEyICs3NjM5LDEwIEBACiAjZW5kaWYKIAkmZGV2X2F0dHJfcG93ZXJfbGV2ZWwuYXR0ciwKIAkmZGV2X2F0dHJfcmV0cnlfcmF0ZS5hdHRyLAotCSZkZXZfYXR0cl9yZl9raWxsLmF0dHIsCiAJJmRldl9hdHRyX3JzX3dpbmRvdy5hdHRyLAogCSZkZXZfYXR0cl9zdGF0aXN0aWNzLmF0dHIsCiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl90ZW1wZXJhdHVyZS5hdHRyLAotCSZkZXZfYXR0cl90dW5lLmF0dHIsCiAJJmRldl9hdHRyX3R4X3Bvd2VyLmF0dHIsCiAKIAlOVUxMCkBAIC05MDAyLDYgKzc2NjMsNyBAQAogCS5jb25maWdfaW50ZXJmYWNlID0gaXdsNDk2NV9tYWNfY29uZmlnX2ludGVyZmFjZSwKIAkuY29uZmlndXJlX2ZpbHRlciA9IGl3bDQ5NjVfY29uZmlndXJlX2ZpbHRlciwKIAkuc2V0X2tleSA9IGl3bDQ5NjVfbWFjX3NldF9rZXksCisJLnVwZGF0ZV90a2lwX2tleSA9IGl3bDQ5NjVfbWFjX3VwZGF0ZV90a2lwX2tleSwKIAkuZ2V0X3N0YXRzID0gaXdsNDk2NV9tYWNfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMgPSBpd2w0OTY1X21hY19nZXRfdHhfc3RhdHMsCiAJLmNvbmZfdHggPSBpd2w0OTY1X21hY19jb25mX3R4LApAQCAtOTAxMCwxMiArNzY3Miw3IEBACiAJLmJlYWNvbl91cGRhdGUgPSBpd2w0OTY1X21hY19iZWFjb25fdXBkYXRlLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gaXdsNDk2NV9ic3NfaW5mb19jaGFuZ2VkLAogI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0JLmNvbmZfaHQgPSBpd2w0OTY1X21hY19jb25mX2h0LAogCS5hbXBkdV9hY3Rpb24gPSBpd2w0OTY1X21hY19hbXBkdV9hY3Rpb24sCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFRfQUdHCi0JLmh0X3R4X2FnZ19zdGFydCA9IGl3bDQ5NjVfbWFjX2h0X3R4X2FnZ19zdGFydCwKLQkuaHRfdHhfYWdnX3N0b3AgPSBpd2w0OTY1X21hY19odF90eF9hZ2dfc3RvcCwKLSNlbmRpZiAgLyogQ09ORklHX0lXTDQ5NjVfSFRfQUdHICovCiAjZW5kaWYgIC8qIENPTkZJR19JV0w0OTY1X0hUICovCiAJLmh3X3NjYW4gPSBpd2w0OTY1X21hY19od19zY2FuCiB9OwpAQCAtOTAyMyw4NSArNzY4MCw0NSBAQAogc3RhdGljIGludCBpd2w0OTY1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaXdsNDk2NV9wcml2ICpwcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlpbnQgaTsKKwlzdHJ1Y3QgaXdsX2NmZyAqY2ZnID0gKHN0cnVjdCBpd2xfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKKwkvKioqKioqKioqKioqKioqKioqKioqKioqCisJICogMS4gQWxsb2NhdGluZyBIVyBkYXRhCisJICoqKioqKioqKioqKioqKioqKioqKioqKi8KKwogCS8qIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCiAJICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uICovCi0JaWYgKGl3bDQ5NjVfcGFyYW1fZGlzYWJsZV9od19zY2FuKSB7CisJaWYgKGNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV9od19zY2FuKSB7CiAJCUlXTF9ERUJVR19JTkZPKCJEaXNhYmxpbmcgaHdfc2NhblxuIik7CiAJCWl3bDQ5NjVfaHdfb3BzLmh3X3NjYW4gPSBOVUxMOwogCX0KIAotCWlmICgoaXdsNDk2NV9wYXJhbV9xdWV1ZXNfbnVtID4gSVdMX01BWF9OVU1fUVVFVUVTKSB8fAotCSAgICAoaXdsNDk2NV9wYXJhbV9xdWV1ZXNfbnVtIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewotCQlJV0xfRVJST1IoImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJICBJV0xfTUlOX05VTV9RVUVVRVMsIElXTF9NQVhfTlVNX1FVRVVFUyk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIG1hYzgwMjExIGFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoaXMgZGV2aWNlIGluc3RhbmNlLCBpbmNsdWRpbmcKLQkgKiAgIHNwYWNlIGZvciB0aGlzIGRyaXZlcidzIHByaXZhdGUgc3RydWN0dXJlICovCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3ByaXYpLCAmaXdsNDk2NV9od19vcHMpOwotCWlmIChodyA9PSBOVUxMKSB7Ci0JCUlXTF9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CisJaHcgPSBpd2xfYWxsb2NfYWxsKGNmZywgJml3bDQ5NjVfaHdfb3BzKTsKKwlpZiAoIWh3KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KKwlwcml2ID0gaHctPnByaXY7CisJLyogQXQgdGhpcyBwb2ludCBib3RoIGh3IGFuZCBwcml2IGFyZSBhbGxvY2F0ZWQuICovCisKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CiAKLQlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJpd2wtNDk2NS1ycyI7Ci0KIAlJV0xfREVCVUdfSU5GTygiKioqIExPQUQgRFJJVkVSICoqKlxuIik7Ci0JcHJpdiA9IGh3LT5wcml2OwotCXByaXYtPmh3ID0gaHc7Ci0KKwlwcml2LT5jZmcgPSBjZmc7CiAJcHJpdi0+cGNpX2RldiA9IHBkZXY7Ci0JcHJpdi0+YW50ZW5uYSA9IChlbnVtIGl3bDQ5NjVfYW50ZW5uYSlpd2w0OTY1X3BhcmFtX2FudGVubmE7Ci0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfREVCVUcKLQlpd2w0OTY1X2RlYnVnX2xldmVsID0gaXdsNDk2NV9wYXJhbV9kZWJ1ZzsKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaXdsX2RlYnVnX2xldmVsID0gcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5kZWJ1ZzsKIAlhdG9taWNfc2V0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQsIDApOwogI2VuZGlmCi0JcHJpdi0+cmV0cnlfcmF0ZSA9IDE7CiAKLQlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7Ci0KLQkvKiBUZWxsIG1hYzgwMjExIGFuZCBpdHMgY2xpZW50cyAoZS5nLiBXaXJlbGVzcyBFeHRlbnNpb25zKQotCSAqICAgdGhlIHJhbmdlIG9mIHNpZ25hbCBxdWFsaXR5IHZhbHVlcyB0aGF0IHdlJ2xsIHByb3ZpZGUuCi0JICogTmVnYXRpdmUgdmFsdWVzIGZvciBsZXZlbC9ub2lzZSBpbmRpY2F0ZSB0aGF0IHdlJ2xsIHByb3ZpZGUgZEJtLgotCSAqIEZvciBXRSwgYXQgbGVhc3QsIG5vbi0wIHZhbHVlcyBoZXJlICplbmFibGUqIGRpc3BsYXkgb2YgdmFsdWVzCi0JICogICBpbiBhcHAgKGl3Y29uZmlnKS4gKi8KLQlody0+bWF4X3Jzc2kgPSAtMjA7CS8qIHNpZ25hbCBsZXZlbCwgbmVnYXRpdmUgaW5kaWNhdGVzIGRCbSAqLwotCWh3LT5tYXhfbm9pc2UgPSAtMjA7CS8qIG5vaXNlIGxldmVsLCBuZWdhdGl2ZSBpbmRpY2F0ZXMgZEJtICovCi0JaHctPm1heF9zaWduYWwgPSAxMDA7CS8qIGxpbmsgcXVhbGl0eSBpbmRpY2F0aW9uICglKSAqLwotCi0JLyogVGVsbCBtYWM4MDIxMSBvdXIgVHggY2hhcmFjdGVyaXN0aWNzICovCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfR0VOX0JFQUNPTl9URU1QTEFURTsKLQotCS8qIERlZmF1bHQgdmFsdWU7IDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLwotCWh3LT5xdWV1ZXMgPSA0OwotI2lmZGVmIENPTkZJR19JV0w0OTY1X0hUCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfSFRfQUdHCi0JLyogRW5oYW5jZWQgdmFsdWU7IG1vcmUgcXVldWVzLCB0byBzdXBwb3J0IDExbiBhZ2dyZWdhdGlvbiAqLwotCWh3LT5xdWV1ZXMgPSAxNjsKLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVF9BR0cgKi8KLSNlbmRpZiAvKiBDT05GSUdfSVdMNDk2NV9IVCAqLwotCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5wb3dlcl9kYXRhLmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5zdGFfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmhjbWRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxxX21uZ3IubG9jayk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX0lCU1NfTUFDX0hBU0hfU0laRTsgaSsrKQotCQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+aWJzc19tYWNfaGFzaFtpXSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZV9mcmFtZXMpOwotCi0JbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIDIuIEluaXRpYWxpemluZyBQQ0kgYnVzCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqLwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9pZWVlODAyMTFfZnJlZV9odzsKQEAgLTkxMDksMzEgKzc3MjYsMjggQEAKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JLyogQ2xlYXIgdGhlIGRyaXZlcidzIChub3QgZGV2aWNlJ3MpIHN0YXRpb24gdGFibGUgKi8KLQlpd2w0OTY1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwotCi0JcHJpdi0+ZGF0YV9yZXRyeV9saW1pdCA9IC0xOwotCXByaXYtPmllZWVfY2hhbm5lbHMgPSBOVUxMOwotCXByaXYtPmllZWVfcmF0ZXMgPSBOVUxMOwotCXByaXYtPnBoeW1vZGUgPSAtMTsKLQogCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwogCWlmICghZXJyKQogCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7Ci0JCWdvdG8gb3V0X3BjaV9kaXNhYmxlX2RldmljZTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkJCSI6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iKTsKKwkJCWdvdG8gb3V0X3BjaV9kaXNhYmxlX2RldmljZTsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcGNpX2Rpc2FibGVfZGV2aWNlOwogCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOworCiAJLyogV2UgZGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAogCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMHgwMCk7CiAKKwkvKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAzLiBSZWFkIFJFViByZWdpc3RlcgorCSAqKioqKioqKioqKioqKioqKioqKioqKi8KIAlwcml2LT5od19iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwogCWlmICghcHJpdi0+aHdfYmFzZSkgewogCQllcnIgPSAtRU5PREVWOwpAQCAtOTE0MSwxNTMgKzc3NTUsMTQ4IEBACiAJfQogCiAJSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIAlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CiAKLQkvKiBJbml0aWFsaXplIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWVzIGhlcmUgKi8KKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCSI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlc1xuIiwgcHJpdi0+Y2ZnLT5uYW1lKTsKKworCS8qKioqKioqKioqKioqKioqKgorCSAqIDQuIFJlYWQgRUVQUk9NCisJICoqKioqKioqKioqKioqKioqLworCS8qIG5pYyBpbml0ICovCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCisJCUNTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfRElTX0wwU19FWElUX1RJTUVSKTsKKworCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CisJZXJyID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwKKwkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCWlmIChlcnIgPCAwKSB7CisJCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCS8qIFJlYWQgdGhlIEVFUFJPTSAqLworCWVyciA9IGl3bF9lZXByb21faW5pdChwcml2KTsKKwlpZiAoZXJyKSB7CisJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXQgRUVQUk9NXG4iKTsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisJLyogTUFDIEFkZHJlc3MgbG9jYXRpb24gaW4gRUVQUk9NIHNhbWUgZm9yIDM5NDUvNDk2NSAqLworCWl3bF9lZXByb21fZ2V0X21hYyhwcml2LCBwcml2LT5tYWNfYWRkcik7CisJSVdMX0RFQlVHX0lORk8oIk1BQyBhZGRyZXNzOiAlc1xuIiwgcHJpbnRfbWFjKG1hYywgcHJpdi0+bWFjX2FkZHIpKTsKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIDUuIFNldHVwIEhXIGNvbnN0YW50cworCSAqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGV2aWNlLXNwZWNpZmljIHNldHVwICovCisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9od19wYXJhbXMocHJpdikpIHsKKwkJSVdMX0VSUk9SKCJmYWlsZWQgdG8gc2V0IGh3IHBhcmFtZXRlcnNcbiIpOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqCisJICogNi4gU2V0dXAgaHcvcHJpdgorCSAqKioqKioqKioqKioqKioqKioqLworCisJZXJyID0gaXdsX3NldHVwKHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3Vuc2V0X2h3X3BhcmFtczsKKwkvKiBBdCB0aGlzIHBvaW50IGJvdGggaHcgYW5kIHByaXYgYXJlIGluaXRpYWxpemVkLiAqLworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiA3LiBJbml0aWFsaXplIG1vZHVsZSBwYXJhbWV0ZXJzCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAkvKiBEaXNhYmxlIHJhZGlvIChTVyBSRiBLSUxMKSB2aWEgcGFyYW1ldGVyIHdoZW4gbG9hZGluZyBkcml2ZXIgKi8KLQlpZiAoaXdsNDk2NV9wYXJhbV9kaXNhYmxlKSB7CisJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZSkgewogCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKIAkJSVdMX0RFQlVHX0lORk8oIlJhZGlvIGRpc2FibGVkLlxuIik7CiAJfQogCi0JcHJpdi0+aXdfbW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX1NUQTsKLQotCXByaXYtPnBzX21vZGUgPSAwOwotCXByaXYtPnVzZV9hbnRfYl9mb3JfbWFuYWdlbWVudF9mcmFtZSA9IDE7IC8qIHN0YXJ0IHdpdGggYW50IEIgKi8KLQlwcml2LT52YWxpZF9hbnRlbm5hID0gMHg3OwkvKiBhc3N1bWUgYWxsIDMgY29ubmVjdGVkICovCi0JcHJpdi0+cHNfbW9kZSA9IElXTF9NSU1PX1BTX05PTkU7Ci0KLQkvKiBDaG9vc2Ugd2hpY2ggcmVjZWl2ZXJzL2FudGVubmFzIHRvIHVzZSAqLwotCWl3bDQ5NjVfc2V0X3J4b25fY2hhaW4ocHJpdik7Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JICAgICAgICI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayA0OTY1QUdOXG4iKTsKLQotCS8qIERldmljZS1zcGVjaWZpYyBzZXR1cCAqLwotCWlmIChpd2w0OTY1X2h3X3NldF9od19zZXR0aW5nKHByaXYpKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIHNldCBodyBzZXR0aW5nc1xuIik7Ci0JCWdvdG8gb3V0X2lvdW5tYXA7Ci0JfQotCi0jaWZkZWYgQ09ORklHX0lXTDQ5NjVfUU9TCi0JaWYgKGl3bDQ5NjVfcGFyYW1fcW9zX2VuYWJsZSkKKwlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5lbmFibGVfcW9zKQogCQlwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlID0gMTsKIAotCWl3bDQ5NjVfcmVzZXRfcW9zKHByaXYpOwotCi0JcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7Ci0JcHJpdi0+cW9zX2RhdGEucW9zX2NhcC52YWwgPSAwOwotI2VuZGlmIC8qIENPTkZJR19JV0w0OTY1X1FPUyAqLwotCi0JaXdsNDk2NV9zZXRfcnhvbl9jaGFubmVsKHByaXYsIE1PREVfSUVFRTgwMjExRywgNik7Ci0JaXdsNDk2NV9zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOwotCWl3bDQ5NjVfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7Ci0KLQlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7Ci0JLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQUMgbW9kZSAqLwotCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfQUM7Ci0JcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7Ci0KKwkvKioqKioqKioqKioqKioqKioqKioKKwkgKiA4LiBTZXR1cCBzZXJ2aWNlcworCSAqKioqKioqKioqKioqKioqKioqKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bDQ5NjVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2w0OTY1X2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewogCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOwotCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKKwkJZ290byBvdXRfdW5zZXRfaHdfcGFyYW1zOwogCX0KIAotCS8qIG5pYyBpbml0ICovCi0JaXdsNDk2NV9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAotICAgICAgICAgICAgICAgICAgICBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUik7Ci0KLSAgICAgICAgaXdsNDk2NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7Ci0gICAgICAgIGVyciA9IGl3bDQ5NjVfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKLQkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwotICAgICAgICB9Ci0JLyogUmVhZCB0aGUgRUVQUk9NICovCi0JZXJyID0gaXdsNDk2NV9lZXByb21faW5pdChwcml2KTsKKwllcnIgPSBpd2xfZGJnZnNfcmVnaXN0ZXIocHJpdiwgRFJWX05BTUUpOwogCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOwotCQlnb3RvIG91dF9yZW1vdmVfc3lzZnM7Ci0JfQotCS8qIE1BQyBBZGRyZXNzIGxvY2F0aW9uIGluIEVFUFJPTSBzYW1lIGZvciAzOTQ1LzQ5NjUgKi8KLQlnZXRfZWVwcm9tX21hYyhwcml2LCBwcml2LT5tYWNfYWRkcik7Ci0JSVdMX0RFQlVHX0lORk8oIk1BQyBhZGRyZXNzOiAlc1xuIiwgcHJpbnRfbWFjKG1hYywgcHJpdi0+bWFjX2FkZHIpKTsKLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOwotCi0JZXJyID0gaXdsNDk2NV9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwotCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CiAJCWdvdG8gb3V0X3JlbW92ZV9zeXNmczsKIAl9CiAKLQllcnIgPSBpd2w0OTY1X2luaXRfZ2Vvcyhwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgZXJyKTsKLQkJZ290byBvdXRfZnJlZV9jaGFubmVsX21hcDsKLQl9Ci0JaXdsNDk2NV9yZXNldF9jaGFubmVsX2ZsYWcocHJpdik7CisJaXdsNDk2NV9zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOworCWl3bDQ5NjVfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7CiAKLQlpd2w0OTY1X3JhdGVfY29udHJvbF9yZWdpc3Rlcihwcml2LT5odyk7Ci0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHByaXYtPmh3KTsKLQlpZiAoZXJyKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlIChlcnJvciAlZClcbiIsIGVycik7Ci0JCWdvdG8gb3V0X2ZyZWVfZ2VvczsKLQl9Ci0KLQlwcml2LT5ody0+Y29uZi5iZWFjb25faW50ID0gMTAwOwotCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOworCS8qKioqKioqKioqKioqKioqKioqKgorCSAqIDkuIENvbmNsdWRlCisJICoqKioqKioqKioqKioqKioqKioqLwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAorCS8qIG5vdGlmeSBpd2xjb3JlIHRvIGluaXQgKi8KKwlpd2xjb3JlX2xvd19sZXZlbF9ub3RpZnkocHJpdiwgSVdMQ09SRV9JTklUX0VWVCk7CiAJcmV0dXJuIDA7CiAKLSBvdXRfZnJlZV9nZW9zOgotCWl3bDQ5NjVfZnJlZV9nZW9zKHByaXYpOwotIG91dF9mcmVlX2NoYW5uZWxfbWFwOgotCWl3bDQ5NjVfZnJlZV9jaGFubmVsX21hcChwcml2KTsKICBvdXRfcmVtb3ZlX3N5c2ZzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2w0OTY1X2F0dHJpYnV0ZV9ncm91cCk7Ci0KLSBvdXRfcmVsZWFzZV9pcnE6Ci0JZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKLQlwcml2LT53b3JrcXVldWUgPSBOVUxMOwotCWl3bDQ5NjVfdW5zZXRfaHdfc2V0dGluZyhwcml2KTsKLQorIG91dF91bnNldF9od19wYXJhbXM6CisJaXdsNDk2NV91bnNldF9od19wYXJhbXMocHJpdik7CiAgb3V0X2lvdW5tYXA6CiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+aHdfYmFzZSk7CiAgb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAgb3V0X3BjaV9kaXNhYmxlX2RldmljZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogIG91dF9pZWVlODAyMTFfZnJlZV9odzoKIAlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CiAgb3V0OgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDQ5NjVfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpd2w0OTY1X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7CiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCiAJSVdMX0RFQlVHX0lORk8oIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CiAKKwlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgeworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAwOworCX0KKwogCXNldF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKIAlpd2w0OTY1X2Rvd24ocHJpdik7CiAKKwkvKiBtYWtlIHN1cmUgd2UgZmx1c2ggYW55IHBlbmRpbmcgaXJxIG9yCisJICogdGFza2xldCBmb3IgdGhlIGRyaXZlcgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaXdsNDk2NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaXdsX3N5bmNocm9uaXplX2lycShwcml2KTsKKwogCS8qIEZyZWUgTUFDIGhhc2ggbGlzdCBmb3IgQURIT0MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSVdMX0lCU1NfTUFDX0hBU0hfU0laRTsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmcHJpdi0+aWJzc19tYWNfaGFzaFtpXSkgewpAQCAtOTI5Niw2ICs3OTA1LDggQEAKIAkJfQogCX0KIAorCWl3bGNvcmVfbG93X2xldmVsX25vdGlmeShwcml2LCBJV0xDT1JFX1JFTU9WRV9FVlQpOworCWl3bF9kYmdmc191bnJlZ2lzdGVyKHByaXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2w0OTY1X2F0dHJpYnV0ZV9ncm91cCk7CiAKIAlpd2w0OTY1X2RlYWxsb2NfdWNvZGVfcGNpKHByaXYpOwpAQCAtOTMwNCwxMyArNzkxNSw5IEBACiAJCWl3bDQ5NjVfcnhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+cnhxKTsKIAlpd2w0OTY1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKIAotCWl3bDQ5NjVfdW5zZXRfaHdfc2V0dGluZyhwcml2KTsKLQlpd2w0OTY1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOworCWl3bDQ5NjVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOworCWl3bGNvcmVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKLQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgewotCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7Ci0JCWl3bDQ5NjVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIocHJpdi0+aHcpOwotCX0KIAogCS8qbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqLwogCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwpAQCAtOTMyNiw3ICs3OTMzLDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JaXdsNDk2NV9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOworCWl3bF9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOwogCWl3bDQ5NjVfZnJlZV9nZW9zKHByaXYpOwogCiAJaWYgKHByaXYtPmlic3NfYmVhY29uKQpAQCAtOTMzOSw3ICs3OTQ2LDcgQEAKIAogc3RhdGljIGludCBpd2w0OTY1X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGl3bDQ5NjVfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAocHJpdi0+aXNfb3BlbikgewogCQlzZXRfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKTsKQEAgLTkzNTQsNyArNzk2MSw3IEBACiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBpd2w0OTY1X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCkBAIC05MzczLDkgKzc5ODAsMTcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpd2w0OTY1X2RyaXZlciA9IHsKKy8qIEhhcmR3YXJlIHNwZWNpZmljIGZpbGUgZGVmaW5lcyB0aGUgUENJIElEcyB0YWJsZSBmb3IgdGhhdCBoYXJkd2FyZSBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2xfaHdfY2FyZF9pZHNbXSA9IHsKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjI5LCBQQ0lfQU5ZX0lELCBpd2w0OTY1X2Fnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjMwLCBQQ0lfQU5ZX0lELCBpd2w0OTY1X2Fnbl9jZmcpfSwKKwl7MH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXdsX2h3X2NhcmRfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGl3bF9kcml2ZXIgPSB7CiAJLm5hbWUgPSBEUlZfTkFNRSwKLQkuaWRfdGFibGUgPSBpd2w0OTY1X2h3X2NhcmRfaWRzLAorCS5pZF90YWJsZSA9IGl3bF9od19jYXJkX2lkcywKIAkucHJvYmUgPSBpd2w0OTY1X3BjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoaXdsNDk2NV9wY2lfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KQEAgLTkzOTAsNTEgKzgwMDUsNDUgQEAKIAlpbnQgcmV0OwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfREVTQ1JJUFRJT04gIiwgIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgRFJWX0NPUFlSSUdIVCAiXG4iKTsKLQlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpd2w0OTY1X2RyaXZlcik7CisKKwlyZXQgPSBpd2w0OTY1X3JhdGVfY29udHJvbF9yZWdpc3RlcigpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBQQ0kgbW9kdWxlXG4iKTsKKwkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi0JcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZpd2w0OTY1X2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpd2xfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CisJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CisJfQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZpd2xfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX2RlYnVnX2xldmVsKTsKIAlpZiAocmV0KSB7CiAJCUlXTF9FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBkcml2ZXIgc3lzZnMgZmlsZVxuIik7Ci0JCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXdsNDk2NV9kcml2ZXIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycm9yX2RlYnVnOwogCX0KICNlbmRpZgogCiAJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCitlcnJvcl9kZWJ1ZzoKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml3bF9kcml2ZXIpOworI2VuZGlmCitlcnJvcl9yZWdpc3RlcjoKKwlpd2w0OTY1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl3bDQ5NjVfZXhpdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JV0w0OTY1X0RFQlVHCi0JZHJpdmVyX3JlbW92ZV9maWxlKCZpd2w0OTY1X2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJml3bF9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwpOwogI2VuZGlmCi0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpd2w0OTY1X2RyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpd2xfZHJpdmVyKTsKKwlpd2w0OTY1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiB9CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChhbnRlbm5hLCBpd2w0OTY1X3BhcmFtX2FudGVubmEsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFudGVubmEsICJzZWxlY3QgYW50ZW5uYSAoMT1NYWluLCAyPUF1eCwgZGVmYXVsdCAwIFtib3RoXSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlLCBpd2w0OTY1X3BhcmFtX2Rpc2FibGUsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGUsICJtYW51YWxseSBkaXNhYmxlIHRoZSByYWRpbyAoZGVmYXVsdCAwIFtyYWRpbyBvbl0pIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoaHdjcnlwdG8sIGl3bDQ5NjVfcGFyYW1faHdjcnlwdG8sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGh3Y3J5cHRvLAotCQkgInVzaW5nIGhhcmR3YXJlIGNyeXB0byBlbmdpbmUgKGRlZmF1bHQgMCBbc29mdHdhcmVdKVxuIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDQ5NjVfcGFyYW1fZGVidWcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX2h3X3NjYW4sIGl3bDQ5NjVfcGFyYW1fZGlzYWJsZV9od19zY2FuLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2h3X3NjYW4sICJkaXNhYmxlIGhhcmR3YXJlIHNjYW5uaW5nIChkZWZhdWx0IDApIik7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZXNfbnVtLCBpd2w0OTY1X3BhcmFtX3F1ZXVlc19udW0sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW0sICJudW1iZXIgb2YgaHcgcXVldWVzLiIpOwotCi0vKiBRb1MgKi8KLW1vZHVsZV9wYXJhbV9uYW1lZChxb3NfZW5hYmxlLCBpd2w0OTY1X3BhcmFtX3Fvc19lbmFibGUsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHFvc19lbmFibGUsICJlbmFibGUgYWxsIFFvUyBmdW5jdGlvbmFsaXR5Iik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoYW1zZHVfc2l6ZV84SywgaXdsNDk2NV9wYXJhbV9hbXNkdV9zaXplXzhLLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhhbXNkdV9zaXplXzhLLCAiZW5hYmxlIDhLIGFtc2R1IHNpemUiKTsKLQogbW9kdWxlX2V4aXQoaXdsNDk2NV9leGl0KTsKIG1vZHVsZV9pbml0KGl3bDQ5NjVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy8xMWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzLzExZC5jCmluZGV4IDVlMTBjZTAuLjRiYzQ2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzLzExZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzLzExZC5jCkBAIC03OSw3ICs3OSw3IEBACiAgKiAgQHBhcmFtIG5yY2hhbiAgIG51bWJlciBvZiBjaGFubmVscwogICogIEByZXR1cm4gCSAgICAgIHRoZSBucmNoYW4tdGggY2hhbiBudW1iZXIKICovCi1zdGF0aWMgdTggbGJzX2dldF9jaGFuXzExZCh1OCBiYW5kLCB1OCBmaXJzdGNoYW4sIHU4IG5yY2hhbiwgdTggKmNoYW4pCitzdGF0aWMgdTggbGJzX2dldF9jaGFuXzExZCh1OCBmaXJzdGNoYW4sIHU4IG5yY2hhbiwgdTggKmNoYW4pCiAvKmZpbmQgdGhlIG5yY2hhbi10aCBjaGFuIGFmdGVyIHRoZSBmaXJzdGNoYW4qLwogewogCXU4IGk7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdTMyIGxic19jaGFuXzJfZnJlcSh1OCBjaGFuLCB1OCBiYW5kKQordTMyIGxic19jaGFuXzJfZnJlcSh1OCBjaGFuKQogewogCXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmNmOwogCXUxNiBpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgKiAgQHBhcmFtIGNoYW4gICAgICAgICAgICAgICAgIGNoYW4KICAqICBAcmV0dXJuIAkgICAgICAgICAgICAgICAgVFJVRTtGQUxTRQogKi8KLXN0YXRpYyB1OCBsYnNfcmVnaW9uX2NoYW5fc3VwcG9ydGVkXzExZCh1OCByZWdpb24sIHU4IGJhbmQsIHU4IGNoYW4pCitzdGF0aWMgdTggbGJzX3JlZ2lvbl9jaGFuX3N1cHBvcnRlZF8xMWQodTggcmVnaW9uLCB1OCBjaGFuKQogewogCXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmNmcDsKIAlpbnQgY2ZwX25vOwpAQCAtMjczLDcgKzI3Myw3IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfMTFEKTsKIAotCWNmcCA9IGxic19nZXRfcmVnaW9uX2NmcF90YWJsZShyZWdpb24sIGJhbmQsICZjZnBfbm8pOworCWNmcCA9IGxic19nZXRfcmVnaW9uX2NmcF90YWJsZShyZWdpb24sICZjZnBfbm8pOwogCWlmIChjZnAgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQlmb3IgKGkgPSAwOyBpZHggPCBNQVhfTk9fT0ZfQ0hBTiAmJiBpIDwgbnJjaGFuOyBpKyspIHsKIAkJCS8qc3RlcDQ6IGNoYW5uZWwgaXMgc3VwcG9ydGVkPyAqLwogCi0JCQlpZiAoIWxic19nZXRfY2hhbl8xMWQoYmFuZCwgZmlyc3RjaGFuLCBpLCAmY3VyY2hhbikpIHsKKwkJCWlmICghbGJzX2dldF9jaGFuXzExZChmaXJzdGNoYW4sIGksICZjdXJjaGFuKSkgewogCQkJCS8qIENoYW4gaXMgbm90IGZvdW5kIGluIFVOIHRhYmxlICovCiAJCQkJbGJzX2RlYl8xMWQoImNoYW4gaXMgbm90IHN1cHBvcnRlZDogJWQgXG4iLCBpKTsKIAkJCQlicmVhazsKQEAgLTM3NSw4ICszNzUsNyBAQAogCiAJCQlsYXN0Y2hhbiA9IGN1cmNoYW47CiAKLQkJCWlmIChsYnNfcmVnaW9uX2NoYW5fc3VwcG9ydGVkXzExZAotCQkJICAgIChyZWdpb24sIGJhbmQsIGN1cmNoYW4pKSB7CisJCQlpZiAobGJzX3JlZ2lvbl9jaGFuX3N1cHBvcnRlZF8xMWQocmVnaW9uLCBjdXJjaGFuKSkgewogCQkJCS8qc3RlcDU6IENoZWNrIGlmIGN1cmNoYW4gaXMgc3VwcG9ydGVkIGJ5IG1ydmwgaW4gcmVnaW9uICovCiAJCQkJcGFyc2VkX3JlZ2lvbl9jaGFuLT5jaGFucHdyW2lkeF0uY2hhbiA9IGN1cmNoYW47CiAJCQkJcGFyc2VkX3JlZ2lvbl9jaGFuLT5jaGFucHdyW2lkeF0ucHdyID0KQEAgLTU1NCw4ICs1NTMsNyBAQAogICogIEBwYXJhbSByZXNwICAgIHBvaW50ZXIgdG8gY29tbWFuZCByZXNwb25zZSBidWZmZXIKICAqICBAcmV0dXJuIAkgICAwOyAtMQogICovCi1pbnQgbGJzX3JldF84MDJfMTFkX2RvbWFpbl9pbmZvKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQoraW50IGxic19yZXRfODAyXzExZF9kb21haW5faW5mbyhzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApCiB7CiAJc3RydWN0IGNtZF9kc184MDJfMTFkX2RvbWFpbl9pbmZvICpkb21haW5pbmZvID0gJnJlc3AtPnBhcmFtcy5kb21haW5pbmZvcmVzcDsKIAlzdHJ1Y3QgbXJ2bGlldHlwZXNfZG9tYWlucGFyYW1zZXQgKmRvbWFpbiA9ICZkb21haW5pbmZvLT5kb21haW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy8xMWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzLzExZC5oCmluZGV4IDgxMWVlYTIuLjRmNGY0N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzLzExZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzLzExZC5oCkBAIC04Myw3ICs4Myw3IEBACiB1OCBsYnNfZ2V0X3NjYW5fdHlwZV8xMWQodTggY2hhbiwKIAkJCSAgc3RydWN0IHBhcnNlZF9yZWdpb25fY2hhbl8xMWQgKnBhcnNlZF9yZWdpb25fY2hhbik7CiAKLXUzMiBsYnNfY2hhbl8yX2ZyZXEodTggY2hhbiwgdTggYmFuZCk7Cit1MzIgbGJzX2NoYW5fMl9mcmVxKHU4IGNoYW4pOwogCiB2b2lkIGxic19pbml0XzExZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogCkBAIC05Myw4ICs5Myw3IEBACiAJCQkJIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLCB1MTYgY21kbm8sCiAJCQkJIHUxNiBjbWRPcHRpb24pOwogCi1pbnQgbGJzX3JldF84MDJfMTFkX2RvbWFpbl9pbmZvKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKTsKK2ludCBsYnNfcmV0XzgwMl8xMWRfZG9tYWluX2luZm8oc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKTsKIAogc3RydWN0IGJzc19kZXNjcmlwdG9yOwogaW50IGxic19wYXJzZV9kbmxkX2NvdW50cnlpbmZvXzExZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCmluZGV4IDBlMjc4NzYuLmYwNzI0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogbGliZXJ0YXMtb2JqcyA6PSBtYWluLm8gd2V4dC5vIFwKIAkJcngubyB0eC5vIGNtZC5vIAkgIFwKIAkJY21kcmVzcC5vIHNjYW4ubwkgIFwKLQkJam9pbi5vIDExZC5vIAkJICBcCisJCTExZC5vIAkJICBcCiAJCWRlYnVnZnMubwkgIFwKIAkJZXRodG9vbC5vIGFzc29jLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKaW5kZXggODdlMTQ1Zi4uYzljMzY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCkBAIC0xLDE0ICsxLDExIEBACiAvKiBDb3B5cmlnaHQgKEMpIDIwMDYsIFJlZCBIYXQsIEluYy4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCiAjaW5jbHVkZSAiYXNzb2MuaCIKLSNpbmNsdWRlICJqb2luLmgiCiAjaW5jbHVkZSAiZGVjbC5oIgotI2luY2x1ZGUgImhvc3RjbWQuaCIKICNpbmNsdWRlICJob3N0LmgiCisjaW5jbHVkZSAic2Nhbi5oIgogI2luY2x1ZGUgImNtZC5oIgogCiAKQEAgLTE3LDYgKzE0LDQyOCBAQAogc3RhdGljIGNvbnN0IHU4IGJzc2lkX29mZltFVEhfQUxFTl0gIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgyKSkpID0KIAl7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAorLyogVGhlIGZpcm13YXJlIG5lZWRzIGNlcnRhaW4gYml0cyBtYXNrZWQgb3V0IG9mIHRoZSBiZWFjb24tZGVydmljZWQgY2FwYWJpbGl0eQorICogZmllbGQgd2hlbiBhc3NvY2lhdGluZy9qb2luaW5nIHRvIEJTU3MuCisgKi8KKyNkZWZpbmUgQ0FQSU5GT19NQVNLCSh+KDB4ZGEwMCkpCisKKworCisvKioKKyAqICBAYnJpZWYgQXNzb2NpYXRlIHRvIGEgc3BlY2lmaWMgQlNTIGRpc2NvdmVyZWQgaW4gYSBzY2FuCisgKgorICogIEBwYXJhbSBwcml2ICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAcGFyYW0gcGJzc2Rlc2MgIFBvaW50ZXIgdG8gdGhlIEJTUyBkZXNjcmlwdG9yIHRvIGFzc29jaWF0ZSB3aXRoLgorICoKKyAqICBAcmV0dXJuICAgICAgICAgIDAtc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWwKKyAqLworc3RhdGljIGludCBsYnNfYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2NfcmVxKQoreworCWludCByZXQ7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOworCisJcmV0ID0gbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBDTURfODAyXzExX0FVVEhFTlRJQ0FURSwKKwkJCQkgICAgMCwgQ01EX09QVElPTl9XQUlURk9SUlNQLAorCQkJCSAgICAwLCBhc3NvY19yZXEtPmJzcy5ic3NpZCk7CisKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwkvKiBzZXQgcHJlYW1ibGUgdG8gZmlybXdhcmUgKi8KKwlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpICYmCisJICAgIChhc3NvY19yZXEtPmJzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSkKKwkJcHJpdi0+cHJlYW1ibGUgPSBDTURfVFlQRV9TSE9SVF9QUkVBTUJMRTsKKwllbHNlCisJCXByaXYtPnByZWFtYmxlID0gQ01EX1RZUEVfTE9OR19QUkVBTUJMRTsKKworCWxic19zZXRfcmFkaW9fY29udHJvbChwcml2KTsKKworCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9BU1NPQ0lBVEUsCisJCQkJICAgIDAsIENNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgYXNzb2NfcmVxKTsKKworZG9uZToKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9BU1NPQywgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiAgQGJyaWVmIEpvaW4gYW4gYWRob2MgbmV0d29yayBmb3VuZCBpbiBhIHByZXZpb3VzIHNjYW4KKyAqCisgKiAgQHBhcmFtIHByaXYgICAgICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBwYXJhbSBwYnNzZGVzYyAgICAgUG9pbnRlciB0byBhIEJTUyBkZXNjcmlwdG9yIGZvdW5kIGluIGEgcHJldmlvdXMgc2NhbgorICogICAgICAgICAgICAgICAgICAgICAgdG8gYXR0ZW1wdCB0byBqb2luCisgKgorICogIEByZXR1cm4gICAgICAgICAgICAgMC0tc3VjY2VzcywgLTEtLWZhaWwKKyAqLworc3RhdGljIGludCBsYnNfam9pbl9hZGhvY19uZXR3b3JrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2NfcmVxKQoreworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzID0gJmFzc29jX3JlcS0+YnNzOworCWludCByZXQgPSAwOworCisJbGJzX2RlYl9qb2luKCJjdXJyZW50IFNTSUQgJyVzJywgc3NpZCBsZW5ndGggJXVcbiIsCisJCWVzY2FwZV9lc3NpZChwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwKKwkJcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuKSwKKwkJcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuKTsKKwlsYnNfZGViX2pvaW4oInJlcXVlc3RlZCBzc2lkICclcycsIHNzaWQgbGVuZ3RoICV1XG4iLAorCQllc2NhcGVfZXNzaWQoYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSwKKwkJYnNzLT5zc2lkX2xlbik7CisKKwkvKiBjaGVjayBpZiB0aGUgcmVxdWVzdGVkIFNTSUQgaXMgYWxyZWFkeSBqb2luZWQgKi8KKwlpZiAocHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuICYmCisJICAgICFsYnNfc3NpZF9jbXAocHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWQsCisJCQlwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW4sCisJCQlic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pICYmCisJICAgIChwcml2LT5tb2RlID09IElXX01PREVfQURIT0MpICYmCisJICAgIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSkgeworCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwkJbGJzX2RlYl9qb2luKCJBREhPQ19KX0NNRDogTmV3IGFkLWhvYyBTU0lEIGlzIHRoZSBzYW1lIGFzICIKKwkJCSJjdXJyZW50LCBub3QgYXR0ZW1wdGluZyB0byByZS1qb2luIik7CisKKwkJLyogU2VuZCB0aGUgcmUtYXNzb2NpYXRpb24gZXZlbnQgdGhvdWdoLCBiZWNhdXNlIHRoZSBhc3NvY2lhdGlvbgorCQkgKiByZXF1ZXN0IHJlYWxseSB3YXMgc3VjY2Vzc2Z1bCwgZXZlbiBpZiBqdXN0IGEgbnVsbC1vcC4KKwkJICovCisJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsCisJCSAgICAgICBFVEhfQUxFTik7CisJCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVXNlIHNob3J0cHJlYW1ibGUgb25seSB3aGVuIGJvdGggY3JlYXRvciBhbmQgY2FyZCBzdXBwb3J0cworCSAgIHNob3J0IHByZWFtYmxlICovCisJaWYgKCEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSB8fAorCSAgICAhKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpKSB7CisJCWxic19kZWJfam9pbigiQWRob2NKb2luOiBMb25nIHByZWFtYmxlXG4iKTsKKwkJcHJpdi0+cHJlYW1ibGUgPSBDTURfVFlQRV9MT05HX1BSRUFNQkxFOworCX0gZWxzZSB7CisJCWxic19kZWJfam9pbigiQWRob2NKb2luOiBTaG9ydCBwcmVhbWJsZVxuIik7CisJCXByaXYtPnByZWFtYmxlID0gQ01EX1RZUEVfU0hPUlRfUFJFQU1CTEU7CisJfQorCisJbGJzX3NldF9yYWRpb19jb250cm9sKHByaXYpOworCisJbGJzX2RlYl9qb2luKCJBZGhvY0pvaW46IGNoYW5uZWwgPSAlZFxuIiwgYXNzb2NfcmVxLT5jaGFubmVsKTsKKwlsYnNfZGViX2pvaW4oIkFkaG9jSm9pbjogYmFuZCA9ICVjXG4iLCBhc3NvY19yZXEtPmJhbmQpOworCisJcHJpdi0+YWRob2NjcmVhdGUgPSAwOworCisJcmV0ID0gbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBDTURfODAyXzExX0FEX0hPQ19KT0lOLAorCQkJCSAgICAwLCBDTURfT1BUSU9OX1dBSVRGT1JSU1AsCisJCQkJICAgIE9JRF84MDJfMTFfU1NJRCwgYXNzb2NfcmVxKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogIEBicmllZiBTdGFydCBhbiBBZGhvYyBOZXR3b3JrCisgKgorICogIEBwYXJhbSBwcml2ICAgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAcGFyYW0gYWRob2Nzc2lkICAgIFRoZSBzc2lkIG9mIHRoZSBBZGhvYyBOZXR3b3JrCisgKiAgQHJldHVybiAgICAgICAgICAgICAwLS1zdWNjZXNzLCAtMS0tZmFpbAorICovCitzdGF0aWMgaW50IGxic19zdGFydF9hZGhvY19uZXR3b3JrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2NfcmVxKQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+YWRob2NjcmVhdGUgPSAxOworCisJaWYgKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpIHsKKwkJbGJzX2RlYl9qb2luKCJBZGhvY1N0YXJ0OiBTaG9ydCBwcmVhbWJsZVxuIik7CisJCXByaXYtPnByZWFtYmxlID0gQ01EX1RZUEVfU0hPUlRfUFJFQU1CTEU7CisJfSBlbHNlIHsKKwkJbGJzX2RlYl9qb2luKCJBZGhvY1N0YXJ0OiBMb25nIHByZWFtYmxlXG4iKTsKKwkJcHJpdi0+cHJlYW1ibGUgPSBDTURfVFlQRV9MT05HX1BSRUFNQkxFOworCX0KKworCWxic19zZXRfcmFkaW9fY29udHJvbChwcml2KTsKKworCWxic19kZWJfam9pbigiQWRob2NTdGFydDogY2hhbm5lbCA9ICVkXG4iLCBhc3NvY19yZXEtPmNoYW5uZWwpOworCWxic19kZWJfam9pbigiQWRob2NTdGFydDogYmFuZCA9ICVkXG4iLCBhc3NvY19yZXEtPmJhbmQpOworCisJcmV0ID0gbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBDTURfODAyXzExX0FEX0hPQ19TVEFSVCwKKwkJCQkgICAgMCwgQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLCBhc3NvY19yZXEpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGxic19zdG9wX2FkaG9jX25ldHdvcmsoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoreworCXJldHVybiBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIENNRF84MDJfMTFfQURfSE9DX1NUT1AsCisJCQkJICAgICAwLCBDTURfT1BUSU9OX1dBSVRGT1JSU1AsIDAsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfbm9fc2VjdXJpdHkoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCisJCQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQoreworCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgICYmICFzZWNpbmZvLT5XUEFlbmFibGVkCisJICAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAorCSAgICAmJiBtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBNRklFX1RZUEVfR0VORVJJQworCSAgICAmJiBtYXRjaF9ic3MtPnJzbl9pZVswXSAhPSBNRklFX1RZUEVfUlNOCisJICAgICYmICEobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfc3RhdGljX3dlcChzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKKwkJCQkgICAgICAgc3RydWN0IGJzc19kZXNjcmlwdG9yICptYXRjaF9ic3MpCit7CisJaWYgKHNlY2luZm8tPndlcF9lbmFibGVkICYmICFzZWNpbmZvLT5XUEFlbmFibGVkCisJICAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAorCSAgICAmJiAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfd3BhKHN0cnVjdCBsYnNfODAyXzExX3NlY3VyaXR5ICpzZWNpbmZvLAorCQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQoreworCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgJiYgc2VjaW5mby0+V1BBZW5hYmxlZAorCSAgICAmJiAobWF0Y2hfYnNzLT53cGFfaWVbMF0gPT0gTUZJRV9UWVBFX0dFTkVSSUMpCisJICAgIC8qIHByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UgTGlua1N5cyBXUlQ1NEcKKwkgICAgJiYgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSAqLworCSAgICkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX3dwYTIoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCisJCQkJIHN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQoreworCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgJiYgc2VjaW5mby0+V1BBMmVuYWJsZWQgJiYKKwkgICAgKG1hdGNoX2Jzcy0+cnNuX2llWzBdID09IE1GSUVfVFlQRV9SU04pCisJICAgIC8qIHByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UgTGlua1N5cyBXUlQ1NEcKKwkgICAgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSAqLworCSAgICkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX2R5bmFtaWNfd2VwKHN0cnVjdCBsYnNfODAyXzExX3NlY3VyaXR5ICpzZWNpbmZvLAorCQkJCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKm1hdGNoX2JzcykKK3sKKwlpZiAoIXNlY2luZm8tPndlcF9lbmFibGVkICYmICFzZWNpbmZvLT5XUEFlbmFibGVkCisJICAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAorCSAgICAmJiAobWF0Y2hfYnNzLT53cGFfaWVbMF0gIT0gTUZJRV9UWVBFX0dFTkVSSUMpCisJICAgICYmIChtYXRjaF9ic3MtPnJzbl9pZVswXSAhPSBNRklFX1RZUEVfUlNOKQorCSAgICAmJiAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKKyAqICBAYnJpZWYgQ2hlY2sgaWYgYSBzY2FubmVkIG5ldHdvcmsgY29tcGF0aWJsZSB3aXRoIHRoZSBkcml2ZXIgc2V0dGluZ3MKKyAqCisgKiAgIFdFUCAgICAgV1BBICAgICBXUEEyICAgIGFkLWhvYyAgZW5jcnlwdCAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrCisgKiBlbmFibGVkIGVuYWJsZWQgIGVuYWJsZWQgICBBRVMgICAgIG1vZGUgICBwcml2YWN5ICBXUEEgIFdQQTIgIENvbXBhdGlibGUKKyAqICAgIDAgICAgICAgMCAgICAgICAgMCAgICAgICAwICAgICAgTk9ORSAgICAgIDAgICAgICAwICAgIDAgICB5ZXMgTm8gc2VjdXJpdHkKKyAqICAgIDEgICAgICAgMCAgICAgICAgMCAgICAgICAwICAgICAgTk9ORSAgICAgIDEgICAgICAwICAgIDAgICB5ZXMgU3RhdGljIFdFUAorICogICAgMCAgICAgICAxICAgICAgICAwICAgICAgIDAgICAgICAgeCAgICAgICAgMXggICAgIDEgICAgeCAgIHllcyBXUEEKKyAqICAgIDAgICAgICAgMCAgICAgICAgMSAgICAgICAwICAgICAgIHggICAgICAgIDF4ICAgICB4ICAgIDEgICB5ZXMgV1BBMgorICogICAgMCAgICAgICAwICAgICAgICAwICAgICAgIDEgICAgICBOT05FICAgICAgMSAgICAgIDAgICAgMCAgIHllcyBBZC1ob2MgQUVTCisgKiAgICAwICAgICAgIDAgICAgICAgIDAgICAgICAgMCAgICAgIT1OT05FICAgICAxICAgICAgMCAgICAwICAgeWVzIER5bmFtaWMgV0VQCisgKgorICoKKyAqICBAcGFyYW0gcHJpdiBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCisgKiAgQHBhcmFtIGluZGV4ICAgSW5kZXggaW4gc2NhbnRhYmxlIHRvIGNoZWNrIGFnYWluc3QgY3VycmVudCBkcml2ZXIgc2V0dGluZ3MKKyAqICBAcGFyYW0gbW9kZSAgICBOZXR3b3JrIG1vZGU6IEluZnJhc3RydWN0dXJlIG9yIElCU1MKKyAqCisgKiAgQHJldHVybiAgICAgICAgSW5kZXggaW4gc2NhbnRhYmxlLCBvciBlcnJvciBjb2RlIGlmIG5lZ2F0aXZlCisgKi8KK3N0YXRpYyBpbnQgaXNfbmV0d29ya19jb21wYXRpYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MsIHVpbnQ4X3QgbW9kZSkKK3sKKwlpbnQgbWF0Y2hlZCA9IDA7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7CisKKwlpZiAoYnNzLT5tb2RlICE9IG1vZGUpCisJCWdvdG8gZG9uZTsKKworCW1hdGNoZWQgPSBtYXRjaF9ic3Nfbm9fc2VjdXJpdHkoJnByaXYtPnNlY2luZm8sIGJzcyk7CisJaWYgKG1hdGNoZWQpCisJCWdvdG8gZG9uZTsKKwltYXRjaGVkID0gbWF0Y2hfYnNzX3N0YXRpY193ZXAoJnByaXYtPnNlY2luZm8sIGJzcyk7CisJaWYgKG1hdGNoZWQpCisJCWdvdG8gZG9uZTsKKwltYXRjaGVkID0gbWF0Y2hfYnNzX3dwYSgmcHJpdi0+c2VjaW5mbywgYnNzKTsKKwlpZiAobWF0Y2hlZCkgeworCQlsYnNfZGViX3NjYW4oImlzX25ldHdvcmtfY29tcGF0aWJsZSgpIFdQQTogd3BhX2llIDB4JXggIgorCQkJICAgICAid3BhMl9pZSAweCV4IFdFUCAlcyBXUEEgJXMgV1BBMiAlcyAiCisJCQkgICAgICJwcml2YWN5IDB4JXhcbiIsIGJzcy0+d3BhX2llWzBdLCBic3MtPnJzbl9pZVswXSwKKwkJCSAgICAgcHJpdi0+c2VjaW5mby53ZXBfZW5hYmxlZCA/ICJlIiA6ICJkIiwKKwkJCSAgICAgcHJpdi0+c2VjaW5mby5XUEFlbmFibGVkID8gImUiIDogImQiLAorCQkJICAgICBwcml2LT5zZWNpbmZvLldQQTJlbmFibGVkID8gImUiIDogImQiLAorCQkJICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKKwkJZ290byBkb25lOworCX0KKwltYXRjaGVkID0gbWF0Y2hfYnNzX3dwYTIoJnByaXYtPnNlY2luZm8sIGJzcyk7CisJaWYgKG1hdGNoZWQpIHsKKwkJbGJzX2RlYl9zY2FuKCJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBXUEEyOiB3cGFfaWUgMHgleCAiCisJCQkgICAgICJ3cGEyX2llIDB4JXggV0VQICVzIFdQQSAlcyBXUEEyICVzICIKKwkJCSAgICAgInByaXZhY3kgMHgleFxuIiwgYnNzLT53cGFfaWVbMF0sIGJzcy0+cnNuX2llWzBdLAorCQkJICAgICBwcml2LT5zZWNpbmZvLndlcF9lbmFibGVkID8gImUiIDogImQiLAorCQkJICAgICBwcml2LT5zZWNpbmZvLldQQWVuYWJsZWQgPyAiZSIgOiAiZCIsCisJCQkgICAgIHByaXYtPnNlY2luZm8uV1BBMmVuYWJsZWQgPyAiZSIgOiAiZCIsCisJCQkgICAgIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpOworCQlnb3RvIGRvbmU7CisJfQorCW1hdGNoZWQgPSBtYXRjaF9ic3NfZHluYW1pY193ZXAoJnByaXYtPnNlY2luZm8sIGJzcyk7CisJaWYgKG1hdGNoZWQpIHsKKwkJbGJzX2RlYl9zY2FuKCJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBkeW5hbWljIFdFUDogIgorCQkJICAgICAid3BhX2llIDB4JXggd3BhMl9pZSAweCV4IHByaXZhY3kgMHgleFxuIiwKKwkJCSAgICAgYnNzLT53cGFfaWVbMF0sIGJzcy0+cnNuX2llWzBdLAorCQkJICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIGJzcyBzZWN1cml0eSBzZXR0aW5ncyBkb24ndCBtYXRjaCB0aG9zZSBjb25maWd1cmVkIG9uIGNhcmQgKi8KKwlsYnNfZGViX3NjYW4oImlzX25ldHdvcmtfY29tcGF0aWJsZSgpIEZBSUxFRDogd3BhX2llIDB4JXggIgorCQkgICAgICJ3cGEyX2llIDB4JXggV0VQICVzIFdQQSAlcyBXUEEyICVzIHByaXZhY3kgMHgleFxuIiwKKwkJICAgICBic3MtPndwYV9pZVswXSwgYnNzLT5yc25faWVbMF0sCisJCSAgICAgcHJpdi0+c2VjaW5mby53ZXBfZW5hYmxlZCA/ICJlIiA6ICJkIiwKKwkJICAgICBwcml2LT5zZWNpbmZvLldQQWVuYWJsZWQgPyAiZSIgOiAiZCIsCisJCSAgICAgcHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCA/ICJlIiA6ICJkIiwKKwkJICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKKworZG9uZToKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAibWF0Y2hlZDogJWQiLCBtYXRjaGVkKTsKKwlyZXR1cm4gbWF0Y2hlZDsKK30KKworLyoqCisgKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBzcGVjaWZpYyBjb21wYXRpYmxlIEJTU0lEIGluIHRoZSBzY2FuIGxpc3QKKyAqCisgKiAgVXNlZCBpbiBhc3NvY2lhdGlvbiBjb2RlCisgKgorICogIEBwYXJhbSBwcml2ICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCisgKiAgQHBhcmFtIGJzc2lkICAgIEJTU0lEIHRvIGZpbmQgaW4gdGhlIHNjYW4gbGlzdAorICogIEBwYXJhbSBtb2RlICAgICBOZXR3b3JrIG1vZGU6IEluZnJhc3RydWN0dXJlIG9yIElCU1MKKyAqCisgKiAgQHJldHVybiAgICAgICAgIGluZGV4IGluIEJTU0lEIGxpc3QsIG9yIGVycm9yIHJldHVybiBjb2RlICg8IDApCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmxic19maW5kX2Jzc2lkX2luX2xpc3Qoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCQkgICAgICB1aW50OF90ICpic3NpZCwgdWludDhfdCBtb2RlKQoreworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqaXRlcl9ic3M7CisJc3RydWN0IGJzc19kZXNjcmlwdG9yICpmb3VuZF9ic3MgPSBOVUxMOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOworCisJaWYgKCFic3NpZCkKKwkJZ290byBvdXQ7CisKKwlsYnNfZGViX2hleChMQlNfREVCX1NDQU4sICJsb29raW5nIGZvciIsIGJzc2lkLCBFVEhfQUxFTik7CisKKwkvKiBMb29rIHRocm91Z2ggdGhlIHNjYW4gdGFibGUgZm9yIGEgY29tcGF0aWJsZSBtYXRjaC4gIFRoZSBsb29wIHdpbGwKKwkgKiAgIGNvbnRpbnVlIHBhc3QgYSBtYXRjaGVkIGJzc2lkIHRoYXQgaXMgbm90IGNvbXBhdGlibGUgaW4gY2FzZSB0aGVyZQorCSAqICAgaXMgYW4gQVAgd2l0aCBtdWx0aXBsZSBTU0lEcyBhc3NpZ25lZCB0byB0aGUgc2FtZSBCU1NJRAorCSAqLworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlcl9ic3MsICZwcml2LT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihpdGVyX2Jzcy0+YnNzaWQsIGJzc2lkKSkKKwkJCWNvbnRpbnVlOyAvKiBic3NpZCBkb2Vzbid0IG1hdGNoICovCisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIElXX01PREVfSU5GUkE6CisJCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJCWlmICghaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGl0ZXJfYnNzLCBtb2RlKSkKKwkJCQlicmVhazsKKwkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmb3VuZF9ic3MgPSBpdGVyX2JzczsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKK291dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiZm91bmRfYnNzICVwIiwgZm91bmRfYnNzKTsKKwlyZXR1cm4gZm91bmRfYnNzOworfQorCisvKioKKyAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBmaW5kcyBzc2lkIGluIHNzaWQgbGlzdC4KKyAqCisgKiAgVXNlZCBpbiBhc3NvY2lhdGlvbiBjb2RlCisgKgorICogIEBwYXJhbSBwcml2ICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCisgKiAgQHBhcmFtIHNzaWQgICAgIFNTSUQgdG8gZmluZCBpbiB0aGUgbGlzdAorICogIEBwYXJhbSBic3NpZCAgICBCU1NJRCB0byBxdWFsaWZ5IHRoZSBTU0lEIHNlbGVjdGlvbiAoaWYgcHJvdmlkZWQpCisgKiAgQHBhcmFtIG1vZGUgICAgIE5ldHdvcmsgbW9kZTogSW5mcmFzdHJ1Y3R1cmUgb3IgSUJTUworICoKKyAqICBAcmV0dXJuICAgICAgICAgaW5kZXggaW4gQlNTSUQgbGlzdAorICovCitzdGF0aWMgc3RydWN0IGJzc19kZXNjcmlwdG9yICpsYnNfZmluZF9zc2lkX2luX2xpc3Qoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCQkgICAgIHVpbnQ4X3QgKnNzaWQsIHVpbnQ4X3Qgc3NpZF9sZW4sCisJCQkJCSAgICAgdWludDhfdCAqYnNzaWQsIHVpbnQ4X3QgbW9kZSwKKwkJCQkJICAgICBpbnQgY2hhbm5lbCkKK3sKKwl1MzIgYmVzdHJzc2kgPSAwOworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqaXRlcl9ic3MgPSBOVUxMOworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqZm91bmRfYnNzID0gTlVMTDsKKwlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKnRtcF9vbGRlc3QgPSBOVUxMOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXJfYnNzLCAmcHJpdi0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCWlmICghdG1wX29sZGVzdCB8fAorCQkgICAgKGl0ZXJfYnNzLT5sYXN0X3NjYW5uZWQgPCB0bXBfb2xkZXN0LT5sYXN0X3NjYW5uZWQpKQorCQkJdG1wX29sZGVzdCA9IGl0ZXJfYnNzOworCisJCWlmIChsYnNfc3NpZF9jbXAoaXRlcl9ic3MtPnNzaWQsIGl0ZXJfYnNzLT5zc2lkX2xlbiwKKwkJCQkgc3NpZCwgc3NpZF9sZW4pICE9IDApCisJCQljb250aW51ZTsgLyogc3NpZCBkb2Vzbid0IG1hdGNoICovCisJCWlmIChic3NpZCAmJiBjb21wYXJlX2V0aGVyX2FkZHIoaXRlcl9ic3MtPmJzc2lkLCBic3NpZCkgIT0gMCkKKwkJCWNvbnRpbnVlOyAvKiBic3NpZCBkb2Vzbid0IG1hdGNoICovCisJCWlmICgoY2hhbm5lbCA+IDApICYmIChpdGVyX2Jzcy0+Y2hhbm5lbCAhPSBjaGFubmVsKSkKKwkJCWNvbnRpbnVlOyAvKiBjaGFubmVsIGRvZXNuJ3QgbWF0Y2ggKi8KKworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBJV19NT0RFX0lORlJBOgorCQljYXNlIElXX01PREVfQURIT0M6CisJCQlpZiAoIWlzX25ldHdvcmtfY29tcGF0aWJsZShwcml2LCBpdGVyX2JzcywgbW9kZSkpCisJCQkJYnJlYWs7CisKKwkJCWlmIChic3NpZCkgeworCQkJCS8qIEZvdW5kIHJlcXVlc3RlZCBCU1NJRCAqLworCQkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlpZiAoU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKSA+IGJlc3Ryc3NpKSB7CisJCQkJYmVzdHJzc2kgPSBTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpOworCQkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSVdfTU9ERV9BVVRPOgorCQlkZWZhdWx0OgorCQkJaWYgKFNDQU5fUlNTSShpdGVyX2Jzcy0+cnNzaSkgPiBiZXN0cnNzaSkgeworCQkJCWJlc3Ryc3NpID0gU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKTsKKwkJCQlmb3VuZF9ic3MgPSBpdGVyX2JzczsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiZm91bmRfYnNzICVwIiwgZm91bmRfYnNzKTsKKwlyZXR1cm4gZm91bmRfYnNzOworfQogCiBzdGF0aWMgaW50IGFzc29jX2hlbHBlcl9lc3NpZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGFzc29jX3JlcSkKQEAgLTM4LDcgKzQ1Nyw3IEBACiAJICAgICAgICAgICAgICBlc2NhcGVfZXNzaWQoYXNzb2NfcmVxLT5zc2lkLCBhc3NvY19yZXEtPnNzaWRfbGVuKSk7CiAJaWYgKGFzc29jX3JlcS0+bW9kZSA9PSBJV19NT0RFX0lORlJBKSB7CiAJCWxic19zZW5kX3NwZWNpZmljX3NzaWRfc2Nhbihwcml2LCBhc3NvY19yZXEtPnNzaWQsCi0JCQlhc3NvY19yZXEtPnNzaWRfbGVuLCAwKTsKKwkJCWFzc29jX3JlcS0+c3NpZF9sZW4pOwogCiAJCWJzcyA9IGxic19maW5kX3NzaWRfaW5fbGlzdChwcml2LCBhc3NvY19yZXEtPnNzaWQsCiAJCQkJYXNzb2NfcmVxLT5zc2lkX2xlbiwgTlVMTCwgSVdfTU9ERV9JTkZSQSwgY2hhbm5lbCk7CkBAIC01Myw3ICs0NzIsNyBAQAogCQkgKiAgIHNjYW4gZGF0YSB3aWxsIGNhdXNlIHVzIHRvIGpvaW4gYSBub24tZXhpc3RhbnQgYWRob2MgbmV0d29yawogCQkgKi8KIAkJbGJzX3NlbmRfc3BlY2lmaWNfc3NpZF9zY2FuKHByaXYsIGFzc29jX3JlcS0+c3NpZCwKLQkJCWFzc29jX3JlcS0+c3NpZF9sZW4sIDEpOworCQkJYXNzb2NfcmVxLT5zc2lkX2xlbik7CiAKIAkJLyogU2VhcmNoIGZvciB0aGUgcmVxdWVzdGVkIFNTSUQgaW4gdGhlIHNjYW4gdGFibGUgKi8KIAkJYnNzID0gbGJzX2ZpbmRfc3NpZF9pbl9saXN0KHByaXYsIGFzc29jX3JlcS0+c3NpZCwKQEAgLTE2NCwzNCArNTgzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLWludCBsYnNfdXBkYXRlX2NoYW5uZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2KQotewotCWludCByZXQ7Ci0KLQkvKiB0aGUgY2hhbm5lbCBpbiBmL3cgY291bGQgYmUgb3V0IG9mIHN5bmM7IGdldCB0aGUgY3VycmVudCBjaGFubmVsICovCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQotCXJldCA9IGxic19nZXRfY2hhbm5lbChwcml2KTsKLQlpZiAocmV0ID4gMCkgewotCQlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCA9IHJldDsKLQkJcmV0ID0gMDsKLQl9Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQVNTT0MsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgbGJzX3N5bmNfY2hhbm5lbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsYnNfcHJpdmF0ZSwKLQkJc3luY19jaGFubmVsKTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7Ci0JaWYgKGxic191cGRhdGVfY2hhbm5lbChwcml2KSkKLQkJbGJzX3ByX2luZm8oIkNoYW5uZWwgc3luY2hyb25pemF0aW9uIGZhaWxlZC4iKTsKLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQVNTT0MpOwotfQotCiBzdGF0aWMgaW50IGFzc29jX2hlbHBlcl9jaGFubmVsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpCiB7CkBAIC0yNzksMTMgKzY3MCwxMSBAQAogCiAJLyogZW5hYmxlL2Rpc2FibGUgdGhlIE1BQydzIFdFUCBwYWNrZXQgZmlsdGVyICovCiAJaWYgKGFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZCkKLQkJcHJpdi0+Y3VycmVudHBhY2tldGZpbHRlciB8PSBDTURfQUNUX01BQ19XRVBfRU5BQkxFOworCQlwcml2LT5tYWNfY29udHJvbCB8PSBDTURfQUNUX01BQ19XRVBfRU5BQkxFOwogCWVsc2UKLQkJcHJpdi0+Y3VycmVudHBhY2tldGZpbHRlciAmPSB+Q01EX0FDVF9NQUNfV0VQX0VOQUJMRTsKKwkJcHJpdi0+bWFjX2NvbnRyb2wgJj0gfkNNRF9BQ1RfTUFDX1dFUF9FTkFCTEU7CiAKLQlyZXQgPSBsYnNfc2V0X21hY19wYWNrZXRfZmlsdGVyKHByaXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCWxic19zZXRfbWFjX2NvbnRyb2wocHJpdik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKIApAQCAtMzE1LDkgKzcwNCw3IEBACiAJbWVtY3B5KCZwcml2LT5zZWNpbmZvLCAmYXNzb2NfcmVxLT5zZWNpbmZvLAogCQlzaXplb2Yoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkpKTsKIAotCXJldCA9IGxic19zZXRfbWFjX3BhY2tldF9maWx0ZXIocHJpdik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7CisJbGJzX3NldF9tYWNfY29udHJvbChwcml2KTsKIAogCS8qIElmIFJTTiBpcyBhbHJlYWR5IGVuYWJsZWQsIGRvbid0IHRyeSB0byBlbmFibGUgaXQgYWdhaW4sIHNpbmNlCiAJICogRU5BQkxFX1JTTiByZXNldHMgaW50ZXJuYWwgc3RhdGUgbWFjaGluZXMgYW5kIHdpbGwgY2xvYmJlciB0aGUKQEAgLTM2MCwxMSArNzQ3LDcgQEAKIAogCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX1dQQV9VQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKSkgewogCQljbGVhcl9iaXQoQVNTT0NfRkxBR19XUEFfTUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncyk7Ci0JCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwsCi0JCQkJCUNNRF9BQ1RfU0VULAotCQkJCQlDTURfT1BUSU9OX1dBSVRGT1JSU1AsCi0JCQkJCTAsIGFzc29jX3JlcSk7CisJCXJldCA9IGxic19jbWRfODAyXzExX2tleV9tYXRlcmlhbChwcml2LCBDTURfQUNUX1NFVCwgYXNzb2NfcmVxKTsKIAkJYXNzb2NfcmVxLT5mbGFncyA9IGZsYWdzOwogCX0KIApAQCAtMzc0LDExICs3NTcsNyBAQAogCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX1dQQV9NQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKSkgewogCQljbGVhcl9iaXQoQVNTT0NfRkxBR19XUEFfVUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncyk7CiAKLQkJcmV0ID0gbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAotCQkJCQlDTURfODAyXzExX0tFWV9NQVRFUklBTCwKLQkJCQkJQ01EX0FDVF9TRVQsCi0JCQkJCUNNRF9PUFRJT05fV0FJVEZPUlJTUCwKLQkJCQkJMCwgYXNzb2NfcmVxKTsKKwkJcmV0ID0gbGJzX2NtZF84MDJfMTFfa2V5X21hdGVyaWFsKHByaXYsIENNRF9BQ1RfU0VULCBhc3NvY19yZXEpOwogCQlhc3NvY19yZXEtPmZsYWdzID0gZmxhZ3M7CiAJfQogCkBAIC00MTMsMTEgKzc5MiwxMCBAQAogewogCWludCByZXQgPSAwOwogCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQogCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKQogCQlyZXR1cm4gMDsKIAorCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7CiAJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CiAJCWxic19kZWJfYXNzb2MoIkRlYXV0aGVudGljYXRpbmcgZHVlIHRvIG5ldyBTU0lEXG4iKTsKIAkJcmV0ID0gMTsKQEAgLTQ1Niw3ICs4MzQsNyBAQAogCiBvdXQ6CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQVNTT0MsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtNDg5LDYgKzg2Nyw5MSBAQAogfQogCiAKKy8qKgorICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBiZXN0IFNTSUQgaW4gdGhlIFNjYW4gTGlzdAorICoKKyAqICBTZWFyY2ggdGhlIHNjYW4gdGFibGUgZm9yIHRoZSBiZXN0IFNTSUQgdGhhdCBhbHNvIG1hdGNoZXMgdGhlIGN1cnJlbnQKKyAqICAgYWRhcHRlciBuZXR3b3JrIHByZWZlcmVuY2UgKGluZnJhc3RydWN0dXJlIG9yIGFkaG9jKQorICoKKyAqICBAcGFyYW0gcHJpdiAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQorICoKKyAqICBAcmV0dXJuICAgICAgICAgaW5kZXggaW4gQlNTSUQgbGlzdAorICovCitzdGF0aWMgc3RydWN0IGJzc19kZXNjcmlwdG9yICpsYnNfZmluZF9iZXN0X3NzaWRfaW5fbGlzdCgKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQ4X3QgbW9kZSkKK3sKKwl1aW50OF90IGJlc3Ryc3NpID0gMDsKKwlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKml0ZXJfYnNzOworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYmVzdF9ic3MgPSBOVUxMOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXJfYnNzLCAmcHJpdi0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIElXX01PREVfSU5GUkE6CisJCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJCWlmICghaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGl0ZXJfYnNzLCBtb2RlKSkKKwkJCQlicmVhazsKKwkJCWlmIChTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpIDw9IGJlc3Ryc3NpKQorCQkJCWJyZWFrOworCQkJYmVzdHJzc2kgPSBTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpOworCQkJYmVzdF9ic3MgPSBpdGVyX2JzczsKKwkJCWJyZWFrOworCQljYXNlIElXX01PREVfQVVUTzoKKwkJZGVmYXVsdDoKKwkJCWlmIChTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpIDw9IGJlc3Ryc3NpKQorCQkJCWJyZWFrOworCQkJYmVzdHJzc2kgPSBTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpOworCQkJYmVzdF9ic3MgPSBpdGVyX2JzczsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiYmVzdF9ic3MgJXAiLCBiZXN0X2Jzcyk7CisJcmV0dXJuIGJlc3RfYnNzOworfQorCisvKioKKyAqICBAYnJpZWYgRmluZCB0aGUgYmVzdCBBUAorICoKKyAqICBVc2VkIGZyb20gYXNzb2NpYXRpb24gd29ya2VyLgorICoKKyAqICBAcGFyYW0gcHJpdiAgICAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHBhcmFtIHBTU0lEICAgICAgICBBIHBvaW50ZXIgdG8gQVAncyBzc2lkCisgKgorICogIEByZXR1cm4gICAgICAgICAgICAgMC0tc3VjY2Vzcywgb3RoZXJ3aXNlLS1mYWlsCisgKi8KK3N0YXRpYyBpbnQgbGJzX2ZpbmRfYmVzdF9uZXR3b3JrX3NzaWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCXVpbnQ4X3QgKm91dF9zc2lkLCB1aW50OF90ICpvdXRfc3NpZF9sZW4sIHVpbnQ4X3QgcHJlZmVycmVkX21vZGUsCisJdWludDhfdCAqb3V0X21vZGUpCit7CisJaW50IHJldCA9IC0xOworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqZm91bmQ7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7CisKKwlwcml2LT5zY2FuX3NzaWRfbGVuID0gMDsKKwlsYnNfc2Nhbl9uZXR3b3Jrcyhwcml2LCAxKTsKKwlpZiAocHJpdi0+c3VycHJpc2VyZW1vdmVkKQorCQlnb3RvIG91dDsKKworCWZvdW5kID0gbGJzX2ZpbmRfYmVzdF9zc2lkX2luX2xpc3QocHJpdiwgcHJlZmVycmVkX21vZGUpOworCWlmIChmb3VuZCAmJiAoZm91bmQtPnNzaWRfbGVuID4gMCkpIHsKKwkJbWVtY3B5KG91dF9zc2lkLCAmZm91bmQtPnNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwkJKm91dF9zc2lkX2xlbiA9IGZvdW5kLT5zc2lkX2xlbjsKKwkJKm91dF9tb2RlID0gZm91bmQtPm1vZGU7CisJCXJldCA9IDA7CisJfQorCitvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0NBTiwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworCiB2b2lkIGxic19hc3NvY2lhdGlvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGJzX3ByaXZhdGUsCkBAIC01NDEsNyArMTAwNCw3IEBACiAJfQogCiAJaWYgKGZpbmRfYW55X3NzaWQpIHsKLQkJdTggbmV3X21vZGU7CisJCXU4IG5ld19tb2RlID0gYXNzb2NfcmVxLT5tb2RlOwogCiAJCXJldCA9IGxic19maW5kX2Jlc3RfbmV0d29ya19zc2lkKHByaXYsIGFzc29jX3JlcS0+c3NpZCwKIAkJCQkmYXNzb2NfcmVxLT5zc2lkX2xlbiwgYXNzb2NfcmVxLT5tb2RlLCAmbmV3X21vZGUpOwpAQCAtNjQzLDE3ICsxMTA2LDExIEBACiAJCX0KIAogCQlpZiAoc3VjY2VzcykgewotCQkJbGJzX2RlYl9hc3NvYygiQVNTT0M6IGFzc29jaWF0ZWQgdG8gJyVzJywgJXNcbiIsCi0JCQkJZXNjYXBlX2Vzc2lkKHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAotCQkJCSAgICAgICAgICAgICBwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW4pLAorCQkJbGJzX2RlYl9hc3NvYygiYXNzb2NpYXRlZCB0byAlc1xuIiwKIAkJCQlwcmludF9tYWMobWFjLCBwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQpKTsKIAkJCWxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKIAkJCQlDTURfODAyXzExX1JTU0ksCiAJCQkJMCwgQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLCBOVUxMKTsKLQotCQkJbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAotCQkJCUNNRF84MDJfMTFfR0VUX0xPRywKLQkJCQkwLCBDTURfT1BUSU9OX1dBSVRGT1JSU1AsIDAsIE5VTEwpOwogCQl9IGVsc2UgewogCQkJcmV0ID0gLTE7CiAJCX0KQEAgLTc1MiwzICsxMjA5LDcwNSBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9BU1NPQyk7CiAJcmV0dXJuIGFzc29jX3JlcTsKIH0KKworCisvKioKKyAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBmaW5kcyBjb21tb24gcmF0ZXMgYmV0d2VlbiByYXRlMSBhbmQgY2FyZCByYXRlcy4KKyAqCisgKiBJdCB3aWxsIGZpbGwgY29tbW9uIHJhdGVzIGluIHJhdGUxIGFzIG91dHB1dCBpZiBmb3VuZC4KKyAqCisgKiBOT1RFOiBTZXR0aW5nIHRoZSBNU0Igb2YgdGhlIGJhc2ljIHJhdGVzIG5lZWQgdG8gYmUgdGFrZW4KKyAqICAgY2FyZSwgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqCisgKiAgQHBhcmFtIHByaXYgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHBhcmFtIHJhdGUxICAgICAgIHRoZSBidWZmZXIgd2hpY2gga2VlcHMgaW5wdXQgYW5kIG91dHB1dAorICogIEBwYXJhbSByYXRlMV9zaXplICB0aGUgc2l6ZSBvZiByYXRlMSBidWZmZXI7IG5ldyBzaXplIG9mIGJ1ZmZlciBvbiByZXR1cm4KKyAqCisgKiAgQHJldHVybiAgICAgICAgICAgIDAgb3IgLTEKKyAqLworc3RhdGljIGludCBnZXRfY29tbW9uX3JhdGVzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwl1OCAqcmF0ZXMsCisJdTE2ICpyYXRlc19zaXplKQoreworCXU4ICpjYXJkX3JhdGVzID0gbGJzX2JnX3JhdGVzOworCXNpemVfdCBudW1fY2FyZF9yYXRlcyA9IHNpemVvZihsYnNfYmdfcmF0ZXMpOworCWludCByZXQgPSAwLCBpLCBqOworCXU4IHRtcFszMF07CisJc2l6ZV90IHRtcF9zaXplID0gMDsKKworCS8qIEZvciBlYWNoIHJhdGUgaW4gY2FyZF9yYXRlcyB0aGF0IGV4aXN0cyBpbiByYXRlMSwgY29weSB0byB0bXAgKi8KKwlmb3IgKGkgPSAwOyBjYXJkX3JhdGVzW2ldICYmIChpIDwgbnVtX2NhcmRfcmF0ZXMpOyBpKyspIHsKKwkJZm9yIChqID0gMDsgcmF0ZXNbal0gJiYgKGogPCAqcmF0ZXNfc2l6ZSk7IGorKykgeworCQkJaWYgKHJhdGVzW2pdID09IGNhcmRfcmF0ZXNbaV0pCisJCQkJdG1wW3RtcF9zaXplKytdID0gY2FyZF9yYXRlc1tpXTsKKwkJfQorCX0KKworCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgIkFQIHJhdGVzICAgICIsIHJhdGVzLCAqcmF0ZXNfc2l6ZSk7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY2FyZCByYXRlcyAgIiwgY2FyZF9yYXRlcywgbnVtX2NhcmRfcmF0ZXMpOworCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgImNvbW1vbiByYXRlcyIsIHRtcCwgdG1wX3NpemUpOworCWxic19kZWJfam9pbigiVFggZGF0YSByYXRlIDB4JTAyeFxuIiwgcHJpdi0+Y3VyX3JhdGUpOworCisJaWYgKCFwcml2LT5hdXRvX3JhdGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRtcF9zaXplOyBpKyspIHsKKwkJCWlmICh0bXBbaV0gPT0gcHJpdi0+Y3VyX3JhdGUpCisJCQkJZ290byBkb25lOworCQl9CisJCWxic19wcl9hbGVydCgiUHJldmlvdXNseSBzZXQgZml4ZWQgZGF0YSByYXRlICUjeCBpc24ndCAiCisJCSAgICAgICAiY29tcGF0aWJsZSB3aXRoIHRoZSBuZXR3b3JrLlxuIiwgcHJpdi0+Y3VyX3JhdGUpOworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwlyZXQgPSAwOworCitkb25lOgorCW1lbXNldChyYXRlcywgMCwgKnJhdGVzX3NpemUpOworCSpyYXRlc19zaXplID0gbWluX3QoaW50LCB0bXBfc2l6ZSwgKnJhdGVzX3NpemUpOworCW1lbWNweShyYXRlcywgdG1wLCAqcmF0ZXNfc2l6ZSk7CisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqICBAYnJpZWYgU2V0cyB0aGUgTVNCIG9uIGJhc2ljIHJhdGVzIGFzIHRoZSBmaXJtd2FyZSByZXF1aXJlcworICoKKyAqIFNjYW4gdGhyb3VnaCBhbiBhcnJheSBhbmQgc2V0IHRoZSBNU0IgZm9yIGJhc2ljIGRhdGEgcmF0ZXMuCisgKgorICogIEBwYXJhbSByYXRlcyAgICAgYnVmZmVyIG9mIGRhdGEgcmF0ZXMKKyAqICBAcGFyYW0gbGVuICAgICAgIHNpemUgb2YgYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkIGxic19zZXRfYmFzaWNfcmF0ZV9mbGFncyh1OCAqcmF0ZXMsIHNpemVfdCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHJhdGVzW2ldID09IDB4MDIgfHwgcmF0ZXNbaV0gPT0gMHgwNCB8fAorCQkgICAgcmF0ZXNbaV0gPT0gMHgwYiB8fCByYXRlc1tpXSA9PSAweDE2KQorCQkJcmF0ZXNbaV0gfD0gMHg4MDsKKwl9Cit9CisKKy8qKgorICogIEBicmllZiBTZW5kIERlYXV0aGVudGljYXRpb24gUmVxdWVzdAorICoKKyAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHJldHVybiAgICAgICAgICAwLS1zdWNjZXNzLCAtMS0tZmFpbAorICovCitpbnQgbGJzX3NlbmRfZGVhdXRoZW50aWNhdGlvbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit7CisJcmV0dXJuIGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURSwKKwkJCQkgICAgIDAsIENNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgTlVMTCk7Cit9CisKKy8qKgorICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgb2YgYXV0aGVudGljYXRlLgorICoKKyAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHBhcmFtIGNtZCAgICAgICBBIHBvaW50ZXIgdG8gY21kX2RzX2NvbW1hbmQgc3RydWN0dXJlCisgKiAgQHBhcmFtIHBkYXRhX2J1ZiBWb2lkIGNhc3Qgb2YgcG9pbnRlciB0byBhIEJTU0lEIHRvIGF1dGhlbnRpY2F0ZSB3aXRoCisgKgorICogIEByZXR1cm4gICAgICAgICAwIG9yIC0xCisgKi8KK2ludCBsYnNfY21kXzgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSB2b2lkICpwZGF0YV9idWYpCit7CisJc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlICpwYXV0aGVudGljYXRlID0gJmNtZC0+cGFyYW1zLmF1dGg7CisJaW50IHJldCA9IC0xOworCXU4ICpic3NpZCA9IHBkYXRhX2J1ZjsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9KT0lOKTsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfQVVUSEVOVElDQVRFKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlKQorCQkJKyBTX0RTX0dFTik7CisKKwkvKiB0cmFuc2xhdGUgYXV0aCBtb2RlIHRvIDgwMi4xMSBkZWZpbmVkIHdpcmUgdmFsdWUgKi8KKwlzd2l0Y2ggKHByaXYtPnNlY2luZm8uYXV0aF9tb2RlKSB7CisJY2FzZSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTToKKwkJcGF1dGhlbnRpY2F0ZS0+YXV0aHR5cGUgPSAweDAwOworCQlicmVhazsKKwljYXNlIElXX0FVVEhfQUxHX1NIQVJFRF9LRVk6CisJCXBhdXRoZW50aWNhdGUtPmF1dGh0eXBlID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0FMR19MRUFQOgorCQlwYXV0aGVudGljYXRlLT5hdXRodHlwZSA9IDB4ODA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19kZWJfam9pbigiQVVUSF9DTUQ6IGludmFsaWQgYXV0aCBhbGcgMHglWFxuIiwKKwkJCXByaXYtPnNlY2luZm8uYXV0aF9tb2RlKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHBhdXRoZW50aWNhdGUtPm1hY2FkZHIsIGJzc2lkLCBFVEhfQUxFTik7CisKKwlsYnNfZGViX2pvaW4oIkFVVEhfQ01EOiBCU1NJRCAlcywgYXV0aCAweCV4XG4iLAorCQlwcmludF9tYWMobWFjLCBic3NpZCksIHBhdXRoZW50aWNhdGUtPmF1dGh0eXBlKTsKKwlyZXQgPSAwOworCitvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfSk9JTiwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGxic19jbWRfODAyMTFfZGVhdXRoZW50aWNhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kKQoreworCXN0cnVjdCBjbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlICpkYXV0aCA9ICZjbWQtPnBhcmFtcy5kZWF1dGg7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfSk9JTik7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0RFQVVUSEVOVElDQVRFKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfZGVhdXRoZW50aWNhdGUpICsKKwkJCSAgICAgU19EU19HRU4pOworCisJLyogc2V0IEFQIE1BQyBhZGRyZXNzICovCisJbWVtbW92ZShkYXV0aC0+bWFjYWRkciwgcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkLCBFVEhfQUxFTik7CisKKwkvKiBSZWFzb24gY29kZSAzID0gU3RhdGlvbiBpcyBsZWF2aW5nICovCisjZGVmaW5lIFJFQVNPTl9DT0RFX1NUQV9MRUFWSU5HIDMKKwlkYXV0aC0+cmVhc29uY29kZSA9IGNwdV90b19sZTE2KFJFQVNPTl9DT0RFX1NUQV9MRUFWSU5HKTsKKworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9KT0lOKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGxic19jbWRfODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpwZGF0YV9idWYpCit7CisJc3RydWN0IGNtZF9kc184MDJfMTFfYXNzb2NpYXRlICpwYXNzbyA9ICZjbWQtPnBhcmFtcy5hc3NvY2lhdGU7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSA9IHBkYXRhX2J1ZjsKKwlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmJzcyA9ICZhc3NvY19yZXEtPmJzczsKKwl1OCAqcG9zOworCXUxNiB0bXBjYXAsIHRtcGxlbjsKKwlzdHJ1Y3QgbXJ2bGlldHlwZXNfc3NpZHBhcmFtc2V0ICpzc2lkOworCXN0cnVjdCBtcnZsaWV0eXBlc19waHlwYXJhbXNldCAqcGh5OworCXN0cnVjdCBtcnZsaWV0eXBlc19zc3BhcmFtc2V0ICpzczsKKwlzdHJ1Y3QgbXJ2bGlldHlwZXNfcmF0ZXNwYXJhbXNldCAqcmF0ZXM7CisJc3RydWN0IG1ydmxpZXR5cGVzX3JzbnBhcmFtc2V0ICpyc247CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOworCisJcG9zID0gKHU4ICopIHBhc3NvOworCisJaWYgKCFwcml2KSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9BU1NPQ0lBVEUpOworCisJbWVtY3B5KHBhc3NvLT5wZWVyc3RhYWRkciwgYnNzLT5ic3NpZCwgc2l6ZW9mKHBhc3NvLT5wZWVyc3RhYWRkcikpOworCXBvcyArPSBzaXplb2YocGFzc28tPnBlZXJzdGFhZGRyKTsKKworCS8qIHNldCB0aGUgbGlzdGVuIGludGVydmFsICovCisJcGFzc28tPmxpc3RlbmludGVydmFsID0gY3B1X3RvX2xlMTYoTVJWRFJWX0RFRkFVTFRfTElTVEVOX0lOVEVSVkFMKTsKKworCXBvcyArPSBzaXplb2YocGFzc28tPmNhcGFiaWxpdHkpOworCXBvcyArPSBzaXplb2YocGFzc28tPmxpc3RlbmludGVydmFsKTsKKwlwb3MgKz0gc2l6ZW9mKHBhc3NvLT5iY25wZXJpb2QpOworCXBvcyArPSBzaXplb2YocGFzc28tPmR0aW1wZXJpb2QpOworCisJc3NpZCA9IChzdHJ1Y3QgbXJ2bGlldHlwZXNfc3NpZHBhcmFtc2V0ICopIHBvczsKKwlzc2lkLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1NTSUQpOworCXRtcGxlbiA9IGJzcy0+c3NpZF9sZW47CisJc3NpZC0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHRtcGxlbik7CisJbWVtY3B5KHNzaWQtPnNzaWQsIGJzcy0+c3NpZCwgdG1wbGVuKTsKKwlwb3MgKz0gc2l6ZW9mKHNzaWQtPmhlYWRlcikgKyB0bXBsZW47CisKKwlwaHkgPSAoc3RydWN0IG1ydmxpZXR5cGVzX3BoeXBhcmFtc2V0ICopIHBvczsKKwlwaHktPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUEhZX0RTKTsKKwl0bXBsZW4gPSBzaXplb2YocGh5LT5maF9kcy5kc3BhcmFtc2V0KTsKKwlwaHktPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNih0bXBsZW4pOworCW1lbWNweSgmcGh5LT5maF9kcy5kc3BhcmFtc2V0LAorCSAgICAgICAmYnNzLT5waHlwYXJhbXNldC5kc3BhcmFtc2V0LmN1cnJlbnRjaGFuLAorCSAgICAgICB0bXBsZW4pOworCXBvcyArPSBzaXplb2YocGh5LT5oZWFkZXIpICsgdG1wbGVuOworCisJc3MgPSAoc3RydWN0IG1ydmxpZXR5cGVzX3NzcGFyYW1zZXQgKikgcG9zOworCXNzLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NGKTsKKwl0bXBsZW4gPSBzaXplb2Yoc3MtPmNmX2lic3MuY2ZwYXJhbXNldCk7CisJc3MtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNih0bXBsZW4pOworCXBvcyArPSBzaXplb2Yoc3MtPmhlYWRlcikgKyB0bXBsZW47CisKKwlyYXRlcyA9IChzdHJ1Y3QgbXJ2bGlldHlwZXNfcmF0ZXNwYXJhbXNldCAqKSBwb3M7CisJcmF0ZXMtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUkFURVMpOworCW1lbWNweSgmcmF0ZXMtPnJhdGVzLCAmYnNzLT5yYXRlcywgTUFYX1JBVEVTKTsKKwl0bXBsZW4gPSBNQVhfUkFURVM7CisJaWYgKGdldF9jb21tb25fcmF0ZXMocHJpdiwgcmF0ZXMtPnJhdGVzLCAmdG1wbGVuKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwlwb3MgKz0gc2l6ZW9mKHJhdGVzLT5oZWFkZXIpICsgdG1wbGVuOworCXJhdGVzLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYodG1wbGVuKTsKKwlsYnNfZGViX2Fzc29jKCJBU1NPQ19DTUQ6IG51bSByYXRlcyAldVxuIiwgdG1wbGVuKTsKKworCS8qIENvcHkgdGhlIGluZnJhLiBhc3NvY2lhdGlvbiByYXRlcyBpbnRvIEN1cnJlbnQgQlNTIHN0YXRlIHN0cnVjdHVyZSAqLworCW1lbXNldCgmcHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzLCAwLCBzaXplb2YocHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzKSk7CisJbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsICZyYXRlcy0+cmF0ZXMsIHRtcGxlbik7CisKKwkvKiBTZXQgTVNCIG9uIGJhc2ljIHJhdGVzIGFzIHRoZSBmaXJtd2FyZSByZXF1aXJlcywgYnV0IF9hZnRlcl8KKwkgKiBjb3B5aW5nIHRvIGN1cnJlbnQgYnNzIHJhdGVzLgorCSAqLworCWxic19zZXRfYmFzaWNfcmF0ZV9mbGFncyhyYXRlcy0+cmF0ZXMsIHRtcGxlbik7CisKKwlpZiAoYXNzb2NfcmVxLT5zZWNpbmZvLldQQWVuYWJsZWQgfHwgYXNzb2NfcmVxLT5zZWNpbmZvLldQQTJlbmFibGVkKSB7CisJCXJzbiA9IChzdHJ1Y3QgbXJ2bGlldHlwZXNfcnNucGFyYW1zZXQgKikgcG9zOworCQkvKiBXUEFfSUUgb3IgV1BBMl9JRSAqLworCQlyc24tPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoKHUxNikgYXNzb2NfcmVxLT53cGFfaWVbMF0pOworCQl0bXBsZW4gPSAodTE2KSBhc3NvY19yZXEtPndwYV9pZVsxXTsKKwkJcnNuLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYodG1wbGVuKTsKKwkJbWVtY3B5KHJzbi0+cnNuaWUsICZhc3NvY19yZXEtPndwYV9pZVsyXSwgdG1wbGVuKTsKKwkJbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiQVNTT0NfQ01EOiBSU04gSUUiLCAodTggKikgcnNuLAorCQkJc2l6ZW9mKHJzbi0+aGVhZGVyKSArIHRtcGxlbik7CisJCXBvcyArPSBzaXplb2YocnNuLT5oZWFkZXIpICsgdG1wbGVuOworCX0KKworCS8qIHVwZGF0ZSBjdXJic3NwYXJhbXMgKi8KKwlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCA9IGJzcy0+cGh5cGFyYW1zZXQuZHNwYXJhbXNldC5jdXJyZW50Y2hhbjsKKworCWlmIChsYnNfcGFyc2VfZG5sZF9jb3VudHJ5aW5mb18xMWQocHJpdiwgYnNzKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpIChwb3MgLSAodTggKikgcGFzc28pICsgU19EU19HRU4pOworCisJLyogc2V0IHRoZSBjYXBhYmlsaXR5IGluZm8gKi8KKwl0bXBjYXAgPSAoYnNzLT5jYXBhYmlsaXR5ICYgQ0FQSU5GT19NQVNLKTsKKwlpZiAoYnNzLT5tb2RlID09IElXX01PREVfSU5GUkEpCisJCXRtcGNhcCB8PSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCXBhc3NvLT5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYodG1wY2FwKTsKKwlsYnNfZGViX2Fzc29jKCJBU1NPQ19DTUQ6IGNhcGFiaWxpdHkgMHglMDR4XG4iLCB0bXBjYXApOworCitkb25lOgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbGJzX2NtZF84MDIxMV9hZF9ob2Nfc3RhcnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCSBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqcGRhdGFfYnVmKQoreworCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCAqYWRocyA9ICZjbWQtPnBhcmFtcy5hZHM7CisJaW50IHJldCA9IDA7CisJaW50IGNtZGFwcGVuZHNpemUgPSAwOworCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvY19yZXEgPSBwZGF0YV9idWY7CisJdTE2IHRtcGNhcCA9IDA7CisJc2l6ZV90IHJhdGVzaXplID0gMDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9KT0lOKTsKKworCWlmICghcHJpdikgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfQURfSE9DX1NUQVJUKTsKKworCS8qCisJICogRmlsbCBpbiB0aGUgcGFyYW1ldGVycyBmb3IgMiBkYXRhIHN0cnVjdHVyZXM6CisJICogICAxLiBjbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCBjb21tYW5kCisJICogICAyLiBwcml2LT5zY2FudGFibGVbaV0KKwkgKgorCSAqIERyaXZlciB3aWxsIGZpbGwgdXAgU1NJRCwgYnNzdHlwZSxJQlNTIHBhcmFtLCBQaHlzaWNhbCBQYXJhbSwKKwkgKiAgIHByb2JlIGRlbGF5LCBhbmQgY2FwIGluZm8uCisJICoKKwkgKiBGaXJtd2FyZSB3aWxsIGZpbGwgdXAgYmVhY29uIHBlcmlvZCwgRFRJTSwgQmFzaWMgcmF0ZXMKKwkgKiAgIGFuZCBvcGVyYXRpb25hbCByYXRlcy4KKwkgKi8KKworCW1lbXNldChhZGhzLT5zc2lkLCAwLCBJV19FU1NJRF9NQVhfU0laRSk7CisJbWVtY3B5KGFkaHMtPnNzaWQsIGFzc29jX3JlcS0+c3NpZCwgYXNzb2NfcmVxLT5zc2lkX2xlbik7CisKKwlsYnNfZGViX2pvaW4oIkFESE9DX1NfQ01EOiBTU0lEICclcycsIHNzaWQgbGVuZ3RoICV1XG4iLAorCQllc2NhcGVfZXNzaWQoYXNzb2NfcmVxLT5zc2lkLCBhc3NvY19yZXEtPnNzaWRfbGVuKSwKKwkJYXNzb2NfcmVxLT5zc2lkX2xlbik7CisKKwkvKiBzZXQgdGhlIEJTUyB0eXBlICovCisJYWRocy0+YnNzdHlwZSA9IENNRF9CU1NfVFlQRV9JQlNTOworCXByaXYtPm1vZGUgPSBJV19NT0RFX0FESE9DOworCWlmIChwcml2LT5iZWFjb25fcGVyaW9kID09IDApCisJCXByaXYtPmJlYWNvbl9wZXJpb2QgPSBNUlZEUlZfQkVBQ09OX0lOVEVSVkFMOworCWFkaHMtPmJlYWNvbnBlcmlvZCA9IGNwdV90b19sZTE2KHByaXYtPmJlYWNvbl9wZXJpb2QpOworCisJLyogc2V0IFBoeXNpY2FsIHBhcmFtIHNldCAqLworI2RlZmluZSBEU19QQVJBX0lFX0lEICAgMworI2RlZmluZSBEU19QQVJBX0lFX0xFTiAgMQorCisJYWRocy0+cGh5cGFyYW1zZXQuZHNwYXJhbXNldC5lbGVtZW50aWQgPSBEU19QQVJBX0lFX0lEOworCWFkaHMtPnBoeXBhcmFtc2V0LmRzcGFyYW1zZXQubGVuID0gRFNfUEFSQV9JRV9MRU47CisKKwlXQVJOX09OKCFhc3NvY19yZXEtPmNoYW5uZWwpOworCisJbGJzX2RlYl9qb2luKCJBREhPQ19TX0NNRDogQ3JlYXRpbmcgQURIT0Mgb24gY2hhbm5lbCAlZFxuIiwKKwkJICAgICBhc3NvY19yZXEtPmNoYW5uZWwpOworCisJYWRocy0+cGh5cGFyYW1zZXQuZHNwYXJhbXNldC5jdXJyZW50Y2hhbiA9IGFzc29jX3JlcS0+Y2hhbm5lbDsKKworCS8qIHNldCBJQlNTIHBhcmFtIHNldCAqLworI2RlZmluZSBJQlNTX1BBUkFfSUVfSUQgICA2CisjZGVmaW5lIElCU1NfUEFSQV9JRV9MRU4gIDIKKworCWFkaHMtPnNzcGFyYW1zZXQuaWJzc3BhcmFtc2V0LmVsZW1lbnRpZCA9IElCU1NfUEFSQV9JRV9JRDsKKwlhZGhzLT5zc3BhcmFtc2V0Lmlic3NwYXJhbXNldC5sZW4gPSBJQlNTX1BBUkFfSUVfTEVOOworCWFkaHMtPnNzcGFyYW1zZXQuaWJzc3BhcmFtc2V0LmF0aW13aW5kb3cgPSAwOworCisJLyogc2V0IGNhcGFiaWxpdHkgaW5mbyAqLworCXRtcGNhcCA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOworCWlmIChhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQpIHsKKwkJbGJzX2RlYl9qb2luKCJBREhPQ19TX0NNRDogV0VQIGVuYWJsZWQsICIKKwkJCSJzZXR0aW5nIHByaXZhY3kgb25cbiIpOworCQl0bXBjYXAgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisJfSBlbHNlIHsKKwkJbGJzX2RlYl9qb2luKCJBREhPQ19TX0NNRDogV0VQIGRpc2FibGVkLCAiCisJCQkic2V0dGluZyBwcml2YWN5IG9mZlxuIik7CisJfQorCWFkaHMtPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNih0bXBjYXApOworCisJLyogcHJvYmVkZWxheSAqLworCWFkaHMtPnByb2JlZGVsYXkgPSBjcHVfdG9fbGUxNihDTURfU0NBTl9QUk9CRV9ERUxBWV9USU1FKTsKKworCW1lbXNldChhZGhzLT5yYXRlcywgMCwgc2l6ZW9mKGFkaHMtPnJhdGVzKSk7CisJcmF0ZXNpemUgPSBtaW4oc2l6ZW9mKGFkaHMtPnJhdGVzKSwgc2l6ZW9mKGxic19iZ19yYXRlcykpOworCW1lbWNweShhZGhzLT5yYXRlcywgbGJzX2JnX3JhdGVzLCByYXRlc2l6ZSk7CisKKwkvKiBDb3B5IHRoZSBhZC1ob2MgY3JlYXRpbmcgcmF0ZXMgaW50byBDdXJyZW50IEJTUyBzdGF0ZSBzdHJ1Y3R1cmUgKi8KKwltZW1zZXQoJnByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcywgMCwgc2l6ZW9mKHByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcykpOworCW1lbWNweSgmcHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzLCAmYWRocy0+cmF0ZXMsIHJhdGVzaXplKTsKKworCS8qIFNldCBNU0Igb24gYmFzaWMgcmF0ZXMgYXMgdGhlIGZpcm13YXJlIHJlcXVpcmVzLCBidXQgX2FmdGVyXworCSAqIGNvcHlpbmcgdG8gY3VycmVudCBic3MgcmF0ZXMuCisJICovCisJbGJzX3NldF9iYXNpY19yYXRlX2ZsYWdzKGFkaHMtPnJhdGVzLCByYXRlc2l6ZSk7CisKKwlsYnNfZGViX2pvaW4oIkFESE9DX1NfQ01EOiByYXRlcz0lMDJ4ICUwMnggJTAyeCAlMDJ4IFxuIiwKKwkgICAgICAgYWRocy0+cmF0ZXNbMF0sIGFkaHMtPnJhdGVzWzFdLCBhZGhzLT5yYXRlc1syXSwgYWRocy0+cmF0ZXNbM10pOworCisJbGJzX2RlYl9qb2luKCJBREhPQ19TX0NNRDogQUQgSE9DIFN0YXJ0IGNvbW1hbmQgaXMgcmVhZHlcbiIpOworCisJaWYgKGxic19jcmVhdGVfZG5sZF9jb3VudHJ5aW5mb18xMWQocHJpdikpIHsKKwkJbGJzX2RlYl9qb2luKCJBREhPQ19TX0NNRDogZG5sZF9jb3VudHJ5aW5mb18xMWQgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3N0YXJ0KSArCisJCQkJU19EU19HRU4gKyBjbWRhcHBlbmRzaXplKTsKKworCXJldCA9IDA7Citkb25lOgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0pPSU4sICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBsYnNfY21kXzgwMjExX2FkX2hvY19zdG9wKHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kKQoreworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfQURfSE9DX1NUT1ApOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOKTsKKworCXJldHVybiAwOworfQorCitpbnQgbGJzX2NtZF84MDIxMV9hZF9ob2Nfam9pbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsIHZvaWQgKnBkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbiAqam9pbl9jbWQgPSAmY21kLT5wYXJhbXMuYWRqOworCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvY19yZXEgPSBwZGF0YV9idWY7CisJc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MgPSAmYXNzb2NfcmVxLT5ic3M7CisJaW50IGNtZGFwcGVuZHNpemUgPSAwOworCWludCByZXQgPSAwOworCXUxNiByYXRlc2l6ZSA9IDA7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfSk9JTik7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0FEX0hPQ19KT0lOKTsKKworCWpvaW5fY21kLT5ic3MudHlwZSA9IENNRF9CU1NfVFlQRV9JQlNTOworCWpvaW5fY21kLT5ic3MuYmVhY29ucGVyaW9kID0gY3B1X3RvX2xlMTYoYnNzLT5iZWFjb25wZXJpb2QpOworCisJbWVtY3B5KCZqb2luX2NtZC0+YnNzLmJzc2lkLCAmYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweSgmam9pbl9jbWQtPmJzcy5zc2lkLCAmYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKTsKKworCW1lbWNweSgmam9pbl9jbWQtPmJzcy5waHlwYXJhbXNldCwgJmJzcy0+cGh5cGFyYW1zZXQsCisJICAgICAgIHNpemVvZih1bmlvbiBpZWVldHlwZXNfcGh5cGFyYW1zZXQpKTsKKworCW1lbWNweSgmam9pbl9jbWQtPmJzcy5zc3BhcmFtc2V0LCAmYnNzLT5zc3BhcmFtc2V0LAorCSAgICAgICBzaXplb2YodW5pb24gSUVFRXR5cGVzX3NzcGFyYW1zZXQpKTsKKworCWpvaW5fY21kLT5ic3MuY2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KGJzcy0+Y2FwYWJpbGl0eSAmIENBUElORk9fTUFTSyk7CisJbGJzX2RlYl9qb2luKCJBREhPQ19KX0NNRDogdG1wY2FwPSU0WCBDQVBJTkZPX01BU0s9JTRYXG4iLAorCSAgICAgICBic3MtPmNhcGFiaWxpdHksIENBUElORk9fTUFTSyk7CisKKwkvKiBpbmZvcm1hdGlvbiBvbiBCU1NJRCBkZXNjcmlwdG9yIHBhc3NlZCB0byBGVyAqLworCWxic19kZWJfam9pbigKKwkgICAgICAgIkFESE9DX0pfQ01EOiBCU1NJRCA9ICVzLCBTU0lEID0gJyVzJ1xuIiwKKwkgICAgICAgcHJpbnRfbWFjKG1hYywgam9pbl9jbWQtPmJzcy5ic3NpZCksCisJICAgICAgIGpvaW5fY21kLT5ic3Muc3NpZCk7CisKKwkvKiBmYWlsdGltZW91dCAqLworCWpvaW5fY21kLT5mYWlsdGltZW91dCA9IGNwdV90b19sZTE2KE1SVkRSVl9BU1NPQ0lBVElPTl9USU1FX09VVCk7CisKKwkvKiBwcm9iZWRlbGF5ICovCisJam9pbl9jbWQtPnByb2JlZGVsYXkgPSBjcHVfdG9fbGUxNihDTURfU0NBTl9QUk9CRV9ERUxBWV9USU1FKTsKKworCXByaXYtPmN1cmJzc3BhcmFtcy5jaGFubmVsID0gYnNzLT5jaGFubmVsOworCisJLyogQ29weSBEYXRhIHJhdGVzIGZyb20gdGhlIHJhdGVzIHJlY29yZGVkIGluIHNjYW4gcmVzcG9uc2UgKi8KKwltZW1zZXQoam9pbl9jbWQtPmJzcy5yYXRlcywgMCwgc2l6ZW9mKGpvaW5fY21kLT5ic3MucmF0ZXMpKTsKKwlyYXRlc2l6ZSA9IG1pbl90KHUxNiwgc2l6ZW9mKGpvaW5fY21kLT5ic3MucmF0ZXMpLCBNQVhfUkFURVMpOworCW1lbWNweShqb2luX2NtZC0+YnNzLnJhdGVzLCBic3MtPnJhdGVzLCByYXRlc2l6ZSk7CisJaWYgKGdldF9jb21tb25fcmF0ZXMocHJpdiwgam9pbl9jbWQtPmJzcy5yYXRlcywgJnJhdGVzaXplKSkgeworCQlsYnNfZGViX2pvaW4oIkFESE9DX0pfQ01EOiBnZXRfY29tbW9uX3JhdGVzIHJldHVybnMgZXJyb3IuXG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDb3B5IHRoZSBhZC1ob2MgY3JlYXRpbmcgcmF0ZXMgaW50byBDdXJyZW50IEJTUyBzdGF0ZSBzdHJ1Y3R1cmUgKi8KKwltZW1zZXQoJnByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcywgMCwgc2l6ZW9mKHByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcykpOworCW1lbWNweSgmcHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzLCBqb2luX2NtZC0+YnNzLnJhdGVzLCByYXRlc2l6ZSk7CisKKwkvKiBTZXQgTVNCIG9uIGJhc2ljIHJhdGVzIGFzIHRoZSBmaXJtd2FyZSByZXF1aXJlcywgYnV0IF9hZnRlcl8KKwkgKiBjb3B5aW5nIHRvIGN1cnJlbnQgYnNzIHJhdGVzLgorCSAqLworCWxic19zZXRfYmFzaWNfcmF0ZV9mbGFncyhqb2luX2NtZC0+YnNzLnJhdGVzLCByYXRlc2l6ZSk7CisKKwlqb2luX2NtZC0+YnNzLnNzcGFyYW1zZXQuaWJzc3BhcmFtc2V0LmF0aW13aW5kb3cgPQorCSAgICBjcHVfdG9fbGUxNihic3MtPmF0aW13aW5kb3cpOworCisJaWYgKGFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZCkgeworCQl1MTYgdG1wID0gbGUxNl90b19jcHUoam9pbl9jbWQtPmJzcy5jYXBhYmlsaXR5KTsKKwkJdG1wIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCQlqb2luX2NtZC0+YnNzLmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNih0bXApOworCX0KKworCWlmIChwcml2LT5wc21vZGUgPT0gTEJTODAyXzExUE9XRVJNT0RFTUFYX1BTUCkgeworCQkvKiB3YWtlIHVwIGZpcnN0ICovCisJCV9fbGUzMiBMb2NhbHBzbW9kZTsKKworCQlMb2NhbHBzbW9kZSA9IGNwdV90b19sZTMyKExCUzgwMl8xMVBPV0VSTU9ERUNBTSk7CisJCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKKwkJCQkJICAgIENNRF84MDJfMTFfUFNfTU9ERSwKKwkJCQkJICAgIENNRF9BQ1RfU0VULAorCQkJCQkgICAgMCwgMCwgJkxvY2FscHNtb2RlKTsKKworCQlpZiAocmV0KSB7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlmIChsYnNfcGFyc2VfZG5sZF9jb3VudHJ5aW5mb18xMWQocHJpdiwgYnNzKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbikgKworCQkJCVNfRFNfR0VOICsgY21kYXBwZW5kc2l6ZSk7CisKK2RvbmU6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfSk9JTiwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGxic19yZXRfODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJc3RydWN0IGllZWV0eXBlc19hc3NvY3JzcCAqcGFzc29jcnNwOworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzOworCXUxNiBzdGF0dXNfY29kZTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7CisKKwlpZiAoIXByaXYtPmluX3Byb2dyZXNzX2Fzc29jX3JlcSkgeworCQlsYnNfZGViX2Fzc29jKCJBU1NPQ19SRVNQOiBubyBpbi1wcm9ncmVzcyBhc3NvYyByZXF1ZXN0XG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisJYnNzID0gJnByaXYtPmluX3Byb2dyZXNzX2Fzc29jX3JlcS0+YnNzOworCisJcGFzc29jcnNwID0gKHN0cnVjdCBpZWVldHlwZXNfYXNzb2Nyc3AgKikgJnJlc3AtPnBhcmFtczsKKworCS8qCisJICogT2xkZXIgRlcgdmVyc2lvbnMgbWFwIHRoZSBJRUVFIDgwMi4xMSBTdGF0dXMgQ29kZSBpbiB0aGUgYXNzb2NpYXRpb24KKwkgKiByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIHZhbHVlcyByZXR1cm5lZCBpbiBwYXNzb2Nyc3AtPnN0YXR1c2NvZGU6CisJICoKKwkgKiAgICBJRUVFIFN0YXR1cyBDb2RlICAgICAgICAgICAgICAgIE1hcnZlbGwgU3RhdHVzIENvZGUKKwkgKiAgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwMCBBU1NPQ19SRVNVTFRfU1VDQ0VTUworCSAqICAgIDEzICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgMHgwMDA0IEFTU09DX1JFU1VMVF9BVVRIX1JFRlVTRUQKKwkgKiAgICAxNCAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwNCBBU1NPQ19SRVNVTFRfQVVUSF9SRUZVU0VECisJICogICAgMTUgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAweDAwMDQgQVNTT0NfUkVTVUxUX0FVVEhfUkVGVVNFRAorCSAqICAgIDE2ICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgMHgwMDA0IEFTU09DX1JFU1VMVF9BVVRIX1JFRlVTRUQKKwkgKiAgICBvdGhlcnMgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwMyBBU1NPQ19SRVNVTFRfUkVGVVNFRAorCSAqCisJICogT3RoZXIgcmVzcG9uc2UgY29kZXM6CisJICogICAgMHgwMDAxIC0+IEFTU09DX1JFU1VMVF9JTlZBTElEX1BBUkFNRVRFUlMgKHVudXNlZCkKKwkgKiAgICAweDAwMDIgLT4gQVNTT0NfUkVTVUxUX1RJTUVPVVQgKGludGVybmFsIHRpbWVyIGV4cGlyZWQgd2FpdGluZyBmb3IKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uIHJlc3BvbnNlIGZyb20gdGhlIEFQKQorCSAqLworCisJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShwYXNzb2Nyc3AtPnN0YXR1c2NvZGUpOworCXN3aXRjaCAoc3RhdHVzX2NvZGUpIHsKKwljYXNlIDB4MDA6CisJCWJyZWFrOworCWNhc2UgMHgwMToKKwkJbGJzX2RlYl9hc3NvYygiQVNTT0NfUkVTUDogaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQlsYnNfZGViX2Fzc29jKCJBU1NPQ19SRVNQOiBpbnRlcm5hbCB0aW1lciAiCisJCQkiZXhwaXJlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgQVBcbiIpOworCQlicmVhazsKKwljYXNlIDB4MDM6CisJCWxic19kZWJfYXNzb2MoIkFTU09DX1JFU1A6IGFzc29jaWF0aW9uICIKKwkJCSJyZWZ1c2VkIGJ5IEFQXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAweDA0OgorCQlsYnNfZGViX2Fzc29jKCJBU1NPQ19SRVNQOiBhdXRoZW50aWNhdGlvbiAiCisJCQkicmVmdXNlZCBieSBBUFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19kZWJfYXNzb2MoIkFTU09DX1JFU1A6IGZhaWx1cmUgcmVhc29uIDB4JTAyeCAiCisJCQkiIHVua25vd25cbiIsIHN0YXR1c19jb2RlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0YXR1c19jb2RlKSB7CisJCWxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHByaXYpOworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWxic19kZWJfaGV4KExCU19ERUJfQVNTT0MsICJBU1NPQ19SRVNQIiwgKHZvaWQgKikmcmVzcC0+cGFyYW1zLAorCQlsZTE2X3RvX2NwdShyZXNwLT5zaXplKSAtIFNfRFNfR0VOKTsKKworCS8qIFNlbmQgYSBNZWRpYSBDb25uZWN0ZWQgZXZlbnQsIGFjY29yZGluZyB0byB0aGUgU3BlYyAqLworCXByaXYtPmNvbm5lY3Rfc3RhdHVzID0gTEJTX0NPTk5FQ1RFRDsKKworCS8qIFVwZGF0ZSBjdXJyZW50IFNTSUQgYW5kIEJTU0lEICovCisJbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwgJmJzcy0+c3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCXByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiA9IGJzcy0+c3NpZF9sZW47CisJbWVtY3B5KHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCisJcHJpdi0+U05SW1RZUEVfUlhQRF1bVFlQRV9BVkddID0gMDsKKwlwcml2LT5ORltUWVBFX1JYUERdW1RZUEVfQVZHXSA9IDA7CisKKwltZW1zZXQocHJpdi0+cmF3U05SLCAweDAwLCBzaXplb2YocHJpdi0+cmF3U05SKSk7CisJbWVtc2V0KHByaXYtPnJhd05GLCAweDAwLCBzaXplb2YocHJpdi0+cmF3TkYpKTsKKwlwcml2LT5uZXh0U05STkYgPSAwOworCXByaXYtPm51bVNOUk5GID0gMDsKKworCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKKwlpZiAoIXByaXYtPnR4X3BlbmRpbmdfbGVuKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CisKKwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgRVRIX0FMRU4pOworCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCitkb25lOgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbGJzX3JldF84MDIxMV9kaXNhc3NvY2lhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9KT0lOKTsKKworCWxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHByaXYpOworCisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0pPSU4pOworCXJldHVybiAwOworfQorCitpbnQgbGJzX3JldF84MDIxMV9hZF9ob2Nfc3RhcnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCSBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJaW50IHJldCA9IDA7CisJdTE2IGNvbW1hbmQgPSBsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKTsKKwl1MTYgcmVzdWx0ID0gbGUxNl90b19jcHUocmVzcC0+cmVzdWx0KTsKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2NfcmVzdWx0ICpwYWRob2NyZXN1bHQ7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0pPSU4pOworCisJcGFkaG9jcmVzdWx0ID0gJnJlc3AtPnBhcmFtcy5yZXN1bHQ7CisKKwlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IHNpemUgPSAlZFxuIiwgbGUxNl90b19jcHUocmVzcC0+c2l6ZSkpOworCWxic19kZWJfam9pbigiQURIT0NfUkVTUDogY29tbWFuZCA9ICV4XG4iLCBjb21tYW5kKTsKKwlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IHJlc3VsdCA9ICV4XG4iLCByZXN1bHQpOworCisJaWYgKCFwcml2LT5pbl9wcm9ncmVzc19hc3NvY19yZXEpIHsKKwkJbGJzX2RlYl9qb2luKCJBREhPQ19SRVNQOiBubyBpbi1wcm9ncmVzcyBhc3NvY2lhdGlvbiAiCisJCQkicmVxdWVzdFxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCWJzcyA9ICZwcml2LT5pbl9wcm9ncmVzc19hc3NvY19yZXEtPmJzczsKKworCS8qCisJICogSm9pbiByZXN1bHQgY29kZSAwIC0tPiBTVUNDRVNTCisJICovCisJaWYgKHJlc3VsdCkgeworCQlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IGZhaWxlZFxuIik7CisJCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKQorCQkJbGJzX21hY19ldmVudF9kaXNjb25uZWN0ZWQocHJpdik7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBOb3cgdGhlIGpvaW4gY21kIHNob3VsZCBiZSBzdWNjZXNzZnVsCisJICogSWYgQlNTSUQgaGFzIGNoYW5nZWQgdXNlIFNTSUQgdG8gY29tcGFyZSBpbnN0ZWFkIG9mIEJTU0lECisJICovCisJbGJzX2RlYl9qb2luKCJBREhPQ19SRVNQOiBhc3NvY2lhdGVkIHRvICclcydcbiIsCisJCWVzY2FwZV9lc3NpZChic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pKTsKKworCS8qIFNlbmQgYSBNZWRpYSBDb25uZWN0ZWQgZXZlbnQsIGFjY29yZGluZyB0byB0aGUgU3BlYyAqLworCXByaXYtPmNvbm5lY3Rfc3RhdHVzID0gTEJTX0NPTk5FQ1RFRDsKKworCWlmIChjb21tYW5kID09IENNRF9SRVQoQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQpKSB7CisJCS8qIFVwZGF0ZSB0aGUgY3JlYXRlZCBuZXR3b3JrIGRlc2NyaXB0b3Igd2l0aCB0aGUgbmV3IEJTU0lEICovCisJCW1lbWNweShic3MtPmJzc2lkLCBwYWRob2NyZXN1bHQtPmJzc2lkLCBFVEhfQUxFTik7CisJfQorCisJLyogU2V0IHRoZSBCU1NJRCBmcm9tIHRoZSBqb2luZWQvc3RhcnRlZCBkZXNjcmlwdG9yICovCisJbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKworCS8qIFNldCB0aGUgbmV3IFNTSUQgdG8gY3VycmVudCBTU0lEICovCisJbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwgJmJzcy0+c3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCXByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiA9IGJzcy0+c3NpZF9sZW47CisKKwluZXRpZl9jYXJyaWVyX29uKHByaXYtPmRldik7CisJaWYgKCFwcml2LT50eF9wZW5kaW5nX2xlbikKKwkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOworCisJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkLCBFVEhfQUxFTik7CisJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisKKwlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IC0gSm9pbmVkL1N0YXJ0ZWQgQWQgSG9jXG4iKTsKKwlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IGNoYW5uZWwgPSAlZFxuIiwgcHJpdi0+Y3VyYnNzcGFyYW1zLmNoYW5uZWwpOworCWxic19kZWJfam9pbigiQURIT0NfUkVTUDogQlNTSUQgPSAlc1xuIiwKKwkJICAgICBwcmludF9tYWMobWFjLCBwYWRob2NyZXN1bHQtPmJzc2lkKSk7CisKK2RvbmU6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfSk9JTiwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGxic19yZXRfODAyMTFfYWRfaG9jX3N0b3Aoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9KT0lOKTsKKworCWxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHByaXYpOworCisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0pPSU4pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmgKaW5kZXggMDgzNzJiYi4uYzUxNmZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5oCkBAIC03LDYgKzcsMzMgQEAKIAogdm9pZCBsYnNfYXNzb2NpYXRpb25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqbGJzX2dldF9hc3NvY2lhdGlvbl9yZXF1ZXN0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Ci12b2lkIGxic19zeW5jX2NoYW5uZWwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RydWN0IGNtZF9kc19jb21tYW5kOworaW50IGxic19jbWRfODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCisJCQkJCXZvaWQgKnBkYXRhX2J1Zik7CitpbnQgbGJzX2NtZF84MDIxMV9hZF9ob2Nfam9pbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSAgICAgICB2b2lkICpwZGF0YV9idWYpOworaW50IGxic19jbWRfODAyMTFfYWRfaG9jX3N0b3Aoc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQpOworaW50IGxic19jbWRfODAyMTFfYWRfaG9jX3N0YXJ0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCisJCQkJCXZvaWQgKnBkYXRhX2J1Zik7CitpbnQgbGJzX2NtZF84MDIxMV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJCSAgc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQpOworaW50IGxic19jbWRfODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSAgICAgdm9pZCAqcGRhdGFfYnVmKTsKKworaW50IGxic19yZXRfODAyMTFfYWRfaG9jX3N0YXJ0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKTsKK2ludCBsYnNfcmV0XzgwMjExX2FkX2hvY19zdG9wKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CitpbnQgbGJzX3JldF84MDIxMV9kaXNhc3NvY2lhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKK2ludCBsYnNfcmV0XzgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApOworCitpbnQgbGJzX3N0b3BfYWRob2NfbmV0d29yayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOworCitpbnQgbGJzX3NlbmRfZGVhdXRoZW50aWNhdGlvbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogCiAjZW5kaWYgLyogX0xCU19BU1NPQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IGVhYjAyMDMuLjYzMjhiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC00LDE5ICs0LDU3IEBACiAgICovCiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSAiaG9zdC5oIgogI2luY2x1ZGUgImhvc3RjbWQuaCIKICNpbmNsdWRlICJkZWNsLmgiCiAjaW5jbHVkZSAiZGVmcy5oIgogI2luY2x1ZGUgImRldi5oIgotI2luY2x1ZGUgImpvaW4uaCIKKyNpbmNsdWRlICJhc3NvYy5oIgogI2luY2x1ZGUgIndleHQuaCIKICNpbmNsdWRlICJjbWQuaCIKIAogc3RhdGljIHN0cnVjdCBjbWRfY3RybF9ub2RlICpsYnNfZ2V0X2NtZF9jdHJsX25vZGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKLXN0YXRpYyB2b2lkIGxic19zZXRfY21kX2N0cmxfbm9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCSAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqcHRlbXBub2RlLAotCQkgICAgdm9pZCAqcGRhdGFfYnVmKTsKKworCisvKioKKyAqICBAYnJpZWYgU2ltcGxlIGNhbGxiYWNrIHRoYXQgY29waWVzIHJlc3BvbnNlIGJhY2sgaW50byBjb21tYW5kCisgKgorICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBwYXJhbSBleHRyYSAgCUEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoCisgKiAgICAgICAgICAgICAgICAgICAgICAncmVzcCcgaXMgYSByZXNwb25zZQorICogIEBwYXJhbSByZXNwICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIHJlc3BvbnNlCisgKgorICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqLworaW50IGxic19jbWRfY29weWJhY2soc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1bnNpZ25lZCBsb25nIGV4dHJhLAorCQkgICAgIHN0cnVjdCBjbWRfaGVhZGVyICpyZXNwKQoreworCXN0cnVjdCBjbWRfaGVhZGVyICpidWYgPSAodm9pZCAqKWV4dHJhOworCXVpbnQxNl90IGNvcHlfbGVuOworCisJY29weV9sZW4gPSBtaW4obGUxNl90b19jcHUoYnVmLT5zaXplKSwgbGUxNl90b19jcHUocmVzcC0+c2l6ZSkpOworCW1lbWNweShidWYsIHJlc3AsIGNvcHlfbGVuKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxic19jbWRfY29weWJhY2spOworCisvKioKKyAqICBAYnJpZWYgU2ltcGxlIGNhbGxiYWNrIHRoYXQgaWdub3JlcyB0aGUgcmVzdWx0LiBVc2UgdGhpcyBpZgorICogIHlvdSBqdXN0IHdhbnQgdG8gc2VuZCBhIGNvbW1hbmQgdG8gdGhlIGhhcmR3YXJlLCBidXQgZG9uJ3QKKyAqICBjYXJlIGZvciB0aGUgcmVzdWx0LgorICoKKyAqICBAcGFyYW0gcHJpdiAgICAgICAgIGlnbm9yZWQKKyAqICBAcGFyYW0gZXh0cmEgICAgICAgIGlnbm9yZWQKKyAqICBAcGFyYW0gcmVzcCAgICAgICAgIGlnbm9yZWQKKyAqCisgKiAgQHJldHVybiAJICAgCTAgZm9yIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBsYnNfY21kX2FzeW5jX2NhbGxiYWNrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgbG9uZyBleHRyYSwKKwkJICAgICBzdHJ1Y3QgY21kX2hlYWRlciAqcmVzcCkKK3sKKwlyZXR1cm4gMDsKK30KIAogCiAvKioKQEAgLTE0Myw4ICsxODEsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2hvc3Rfc2xlZXBfY2ZnKTsKIAotc3RhdGljIGludCBsYnNfY21kXzgwMl8xMV9wc19tb2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKK3N0YXRpYyBpbnQgbGJzX2NtZF84MDJfMTFfcHNfbW9kZShzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKIAkJCQkgICB1MTYgY21kX2FjdGlvbikKIHsKIAlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9wc19tb2RlICpwc20gPSAmY21kLT5wYXJhbXMucHNtb2RlOwpAQCAtMjU5LDYgKzI5Niw3IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKIAorCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJY21kLmhkci5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9TRVRfV0VQKTsKIAljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CiAKQEAgLTMyMiw3ICszNjAsOSBAQAogCWNtZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWQpKTsKIAljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CiAKLQlpZiAoY21kX2FjdGlvbiA9PSBDTURfQUNUX1NFVCkgeworCWlmIChjbWRfYWN0aW9uID09IENNRF9BQ1RfR0VUKQorCQljbWQuZW5hYmxlID0gMDsKKwllbHNlIHsKIAkJaWYgKCplbmFibGUpCiAJCQljbWQuZW5hYmxlID0gY3B1X3RvX2xlMTYoQ01EX0VOQUJMRV9SU04pOwogCQllbHNlCkBAIC0zMzgsODEgKzM3OCwxMDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBzZXRfb25lX3dwYV9rZXkoc3RydWN0IE1ydmxJRXR5cGVfa2V5UGFyYW1TZXQgKiBwa2V5cGFyYW1zZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGVuY19rZXkgKiBwa2V5KQorc3RhdGljIHZvaWQgc2V0X29uZV93cGFfa2V5KHN0cnVjdCBNcnZsSUV0eXBlX2tleVBhcmFtU2V0ICprZXlwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZW5jX2tleSAqa2V5KQogewogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwogCi0JaWYgKHBrZXktPmZsYWdzICYgS0VZX0lORk9fV1BBX0VOQUJMRUQpIHsKLQkJcGtleXBhcmFtc2V0LT5rZXlpbmZvIHw9IGNwdV90b19sZTE2KEtFWV9JTkZPX1dQQV9FTkFCTEVEKTsKLQl9Ci0JaWYgKHBrZXktPmZsYWdzICYgS0VZX0lORk9fV1BBX1VOSUNBU1QpIHsKLQkJcGtleXBhcmFtc2V0LT5rZXlpbmZvIHw9IGNwdV90b19sZTE2KEtFWV9JTkZPX1dQQV9VTklDQVNUKTsKLQl9Ci0JaWYgKHBrZXktPmZsYWdzICYgS0VZX0lORk9fV1BBX01DQVNUKSB7Ci0JCXBrZXlwYXJhbXNldC0+a2V5aW5mbyB8PSBjcHVfdG9fbGUxNihLRVlfSU5GT19XUEFfTUNBU1QpOwotCX0KKwlpZiAoa2V5LT5mbGFncyAmIEtFWV9JTkZPX1dQQV9FTkFCTEVEKQorCQlrZXlwYXJhbS0+a2V5aW5mbyB8PSBjcHVfdG9fbGUxNihLRVlfSU5GT19XUEFfRU5BQkxFRCk7CisJaWYgKGtleS0+ZmxhZ3MgJiBLRVlfSU5GT19XUEFfVU5JQ0FTVCkKKwkJa2V5cGFyYW0tPmtleWluZm8gfD0gY3B1X3RvX2xlMTYoS0VZX0lORk9fV1BBX1VOSUNBU1QpOworCWlmIChrZXktPmZsYWdzICYgS0VZX0lORk9fV1BBX01DQVNUKQorCQlrZXlwYXJhbS0+a2V5aW5mbyB8PSBjcHVfdG9fbGUxNihLRVlfSU5GT19XUEFfTUNBU1QpOwogCi0JcGtleXBhcmFtc2V0LT50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfS0VZX01BVEVSSUFMKTsKLQlwa2V5cGFyYW1zZXQtPmtleXR5cGVpZCA9IGNwdV90b19sZTE2KHBrZXktPnR5cGUpOwotCXBrZXlwYXJhbXNldC0+a2V5bGVuID0gY3B1X3RvX2xlMTYocGtleS0+bGVuKTsKLQltZW1jcHkocGtleXBhcmFtc2V0LT5rZXksIHBrZXktPmtleSwgcGtleS0+bGVuKTsKLQlwa2V5cGFyYW1zZXQtPmxlbmd0aCA9IGNwdV90b19sZTE2KCAgc2l6ZW9mKHBrZXlwYXJhbXNldC0+a2V5dHlwZWlkKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZihwa2V5cGFyYW1zZXQtPmtleWluZm8pCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2l6ZW9mKHBrZXlwYXJhbXNldC0+a2V5bGVuKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZihwa2V5cGFyYW1zZXQtPmtleSkpOworCWtleXBhcmFtLT50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfS0VZX01BVEVSSUFMKTsKKwlrZXlwYXJhbS0+a2V5dHlwZWlkID0gY3B1X3RvX2xlMTYoa2V5LT50eXBlKTsKKwlrZXlwYXJhbS0+a2V5bGVuID0gY3B1X3RvX2xlMTYoa2V5LT5sZW4pOworCW1lbWNweShrZXlwYXJhbS0+a2V5LCBrZXktPmtleSwga2V5LT5sZW4pOworCisJLyogTGVuZ3RoIGZpZWxkIGRvZXNuJ3QgaW5jbHVkZSB0aGUge3R5cGUsbGVuZ3RofSBoZWFkZXIgKi8KKwlrZXlwYXJhbS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCprZXlwYXJhbSkgLSA0KTsKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKIH0KIAotc3RhdGljIGludCBsYnNfY21kXzgwMl8xMV9rZXlfbWF0ZXJpYWwoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCQlzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKLQkJCQkJdTE2IGNtZF9hY3Rpb24sCi0JCQkJCXUzMiBjbWRfb2lkLCB2b2lkICpwZGF0YV9idWYpCitpbnQgbGJzX2NtZF84MDJfMTFfa2V5X21hdGVyaWFsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwKKwkJCQlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqYXNzb2MpCiB7Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsICpwa2V5bWF0ZXJpYWwgPQotCSAgICAmY21kLT5wYXJhbXMua2V5bWF0ZXJpYWw7Ci0Jc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEgPSBwZGF0YV9idWY7CisJc3RydWN0IGNtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsIGNtZDsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaW5kZXggPSAwOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CiAKLQljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0tFWV9NQVRFUklBTCk7Ci0JcGtleW1hdGVyaWFsLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwljbWQuYWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOwogCiAJaWYgKGNtZF9hY3Rpb24gPT0gQ01EX0FDVF9HRVQpIHsKLQkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoU19EU19HRU4gKyBzaXplb2YgKHBrZXltYXRlcmlhbC0+YWN0aW9uKSk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gZG9uZTsKKwkJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoU19EU19HRU4gKyAyKTsKKwl9IGVsc2UgeworCQltZW1zZXQoY21kLmtleVBhcmFtU2V0LCAwLCBzaXplb2YoY21kLmtleVBhcmFtU2V0KSk7CisKKwkJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX1VDQVNUX0tFWSwgJmFzc29jLT5mbGFncykpIHsKKwkJCXNldF9vbmVfd3BhX2tleSgmY21kLmtleVBhcmFtU2V0W2luZGV4XSwKKwkJCQkJJmFzc29jLT53cGFfdW5pY2FzdF9rZXkpOworCQkJaW5kZXgrKzsKKwkJfQorCisJCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX1dQQV9NQ0FTVF9LRVksICZhc3NvYy0+ZmxhZ3MpKSB7CisJCQlzZXRfb25lX3dwYV9rZXkoJmNtZC5rZXlQYXJhbVNldFtpbmRleF0sCisJCQkJCSZhc3NvYy0+d3BhX21jYXN0X2tleSk7CisJCQlpbmRleCsrOworCQl9CisKKwkJLyogVGhlIGNvbW1vbiBoZWFkZXIgYW5kIGFzIG1hbnkga2V5cyBhcyB3ZSBpbmNsdWRlZCAqLworCQljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihvZmZzZXRvZih0eXBlb2YoY21kKSwKKwkJCQkJCSAgICBrZXlQYXJhbVNldFtpbmRleF0pKTsKKwl9CisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfS0VZX01BVEVSSUFMLCAmY21kKTsKKwkvKiBDb3B5IHRoZSByZXR1cm5lZCBrZXkgdG8gZHJpdmVyIHByaXZhdGUgZGF0YSAqLworCWlmICghcmV0ICYmIGNtZF9hY3Rpb24gPT0gQ01EX0FDVF9HRVQpIHsKKwkJdm9pZCAqYnVmX3B0ciA9IGNtZC5rZXlQYXJhbVNldDsKKwkJdm9pZCAqcmVzcF9lbmQgPSAmKCZjbWQpWzFdOworCisJCXdoaWxlIChidWZfcHRyIDwgcmVzcF9lbmQpIHsKKwkJCXN0cnVjdCBNcnZsSUV0eXBlX2tleVBhcmFtU2V0ICprZXlwYXJhbSA9IGJ1Zl9wdHI7CisJCQlzdHJ1Y3QgZW5jX2tleSAqa2V5OworCQkJdWludDE2X3QgcGFyYW1fc2V0X2xlbiA9IGxlMTZfdG9fY3B1KGtleXBhcmFtLT5sZW5ndGgpOworCQkJdWludDE2X3Qga2V5X2xlbiA9IGxlMTZfdG9fY3B1KGtleXBhcmFtLT5rZXlsZW4pOworCQkJdWludDE2X3Qga2V5X2ZsYWdzID0gbGUxNl90b19jcHUoa2V5cGFyYW0tPmtleWluZm8pOworCQkJdWludDE2X3Qga2V5X3R5cGUgPSBsZTE2X3RvX2NwdShrZXlwYXJhbS0+a2V5dHlwZWlkKTsKKwkJCXZvaWQgKmVuZDsKKworCQkJZW5kID0gKHZvaWQgKilrZXlwYXJhbSArIHNpemVvZihrZXlwYXJhbS0+dHlwZSkKKwkJCQkrIHNpemVvZihrZXlwYXJhbS0+bGVuZ3RoKSArIHBhcmFtX3NldF9sZW47CisKKwkJCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBhY2Nlc3MgcGFzdCB0aGUgZW5kIG9mIHRoZSBJRXMgKi8KKwkJCWlmIChlbmQgPiByZXNwX2VuZCkKKwkJCQlicmVhazsKKworCQkJaWYgKGtleV9mbGFncyAmIEtFWV9JTkZPX1dQQV9VTklDQVNUKQorCQkJCWtleSA9ICZwcml2LT53cGFfdW5pY2FzdF9rZXk7CisJCQllbHNlIGlmIChrZXlfZmxhZ3MgJiBLRVlfSU5GT19XUEFfTUNBU1QpCisJCQkJa2V5ID0gJnByaXYtPndwYV9tY2FzdF9rZXk7CisJCQllbHNlCisJCQkJYnJlYWs7CisKKwkJCS8qIENvcHkgcmV0dXJuZWQga2V5IGludG8gZHJpdmVyICovCisJCQltZW1zZXQoa2V5LCAwLCBzaXplb2Yoc3RydWN0IGVuY19rZXkpKTsKKwkJCWlmIChrZXlfbGVuID4gc2l6ZW9mKGtleS0+a2V5KSkKKwkJCQlicmVhazsKKwkJCWtleS0+dHlwZSA9IGtleV90eXBlOworCQkJa2V5LT5mbGFncyA9IGtleV9mbGFnczsKKwkJCWtleS0+bGVuID0ga2V5X2xlbjsKKwkJCW1lbWNweShrZXktPmtleSwga2V5cGFyYW0tPmtleSwga2V5LT5sZW4pOworCisJCQlidWZfcHRyID0gZW5kICsgMTsKKwkJfQogCX0KIAotCW1lbXNldCgmcGtleW1hdGVyaWFsLT5rZXlQYXJhbVNldCwgMCwgc2l6ZW9mKHBrZXltYXRlcmlhbC0+a2V5UGFyYW1TZXQpKTsKLQotCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX1dQQV9VQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKSkgewotCQlzZXRfb25lX3dwYV9rZXkoJnBrZXltYXRlcmlhbC0+a2V5UGFyYW1TZXRbaW5kZXhdLAotCQkgICAgICAgICAgICAgICAgJmFzc29jX3JlcS0+d3BhX3VuaWNhc3Rfa2V5KTsKLQkJaW5kZXgrKzsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfTUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJc2V0X29uZV93cGFfa2V5KCZwa2V5bWF0ZXJpYWwtPmtleVBhcmFtU2V0W2luZGV4XSwKLQkJICAgICAgICAgICAgICAgICZhc3NvY19yZXEtPndwYV9tY2FzdF9rZXkpOwotCQlpbmRleCsrOwotCX0KLQotCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KCAgU19EU19HRU4KLQkgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZiAocGtleW1hdGVyaWFsLT5hY3Rpb24pCi0JICAgICAgICAgICAgICAgICAgICAgICAgKyAoaW5kZXggKiBzaXplb2Yoc3RydWN0IE1ydmxJRXR5cGVfa2V5UGFyYW1TZXQpKSk7Ci0KLQlyZXQgPSAwOwotCi1kb25lOgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NNRCwgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsYnNfY21kXzgwMl8xMV9yZXNldChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLCBpbnQgY21kX2FjdGlvbikKK3N0YXRpYyBpbnQgbGJzX2NtZF84MDJfMTFfcmVzZXQoc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsIGludCBjbWRfYWN0aW9uKQogewogCXN0cnVjdCBjbWRfZHNfODAyXzExX3Jlc2V0ICpyZXNldCA9ICZjbWQtPnBhcmFtcy5yZXNldDsKIApAQCAtNDI2LDMwICs0OTMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxic19jbWRfODAyXzExX2dldF9sb2coc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kKQotewotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwotCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfR0VUX0xPRyk7Ci0JY21kLT5zaXplID0KLQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX2dldF9sb2cpICsgU19EU19HRU4pOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGJzX2NtZF84MDJfMTFfZ2V0X3N0YXQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCkKLXsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0dFVF9TVEFUKTsKLQljbWQtPnNpemUgPQotCSAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfZ2V0X3N0YXQpICsgU19EU19HRU4pOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbGJzX2NtZF84MDJfMTFfc25tcF9taWIoc3RydWN0IGxic19wcml2YXRlICpwcml2LAogCQkJCSAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKIAkJCQkgICAgaW50IGNtZF9hY3Rpb24sCkBAIC01NzAsOCArNjEzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsYnNfY21kXzgwMl8xMV9yZl90eF9wb3dlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAorc3RhdGljIGludCBsYnNfY21kXzgwMl8xMV9yZl90eF9wb3dlcihzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKIAkJCQkgICAgICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1ZikKIHsKIApAQCAtNjE0LDggKzY1Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX2NtZF84MDJfMTFfbW9uaXRvcl9tb2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKK3N0YXRpYyBpbnQgbGJzX2NtZF84MDJfMTFfbW9uaXRvcl9tb2RlKHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAogCQkJCSAgICAgIHUxNiBjbWRfYWN0aW9uLCB2b2lkICpwZGF0YV9idWYpCiB7CiAJc3RydWN0IGNtZF9kc184MDJfMTFfbW9uaXRvcl9tb2RlICptb25pdG9yID0gJmNtZC0+cGFyYW1zLm1vbml0b3I7CkBAIC03NzMsNiArODE0LDcgQEAKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwogCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CiAJY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9PUFRfODAyXzExX1JGX0NIQU5ORUxfR0VUKTsKIApAQCAtNzg4LDYgKzgzMCwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBsYnNfdXBkYXRlX2NoYW5uZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoreworCWludCByZXQ7CisKKwkvKiB0aGUgY2hhbm5lbCBpbiBmL3cgY291bGQgYmUgb3V0IG9mIHN5bmM7IGdldCB0aGUgY3VycmVudCBjaGFubmVsICovCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKKworCXJldCA9IGxic19nZXRfY2hhbm5lbChwcml2KTsKKwlpZiAocmV0ID4gMCkgeworCQlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCA9IHJldDsKKwkJcmV0ID0gMDsKKwl9CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQVNTT0MsICJyZXQgJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogIEBicmllZiBTZXQgdGhlIHJhZGlvIGNoYW5uZWwKICAqCkBAIC04MDQsNiArODYyLDcgQEAKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwogCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CiAJY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9PUFRfODAyXzExX1JGX0NIQU5ORUxfU0VUKTsKIAljbWQuY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOwpAQCAtODQyLDggKzkwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX2NtZF9yZWdfYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZHB0ciwKK3N0YXRpYyBpbnQgbGJzX2NtZF9yZWdfYWNjZXNzKHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kcHRyLAogCQkJICAgICAgIHU4IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1ZikKIHsKIAlzdHJ1Y3QgbGJzX29mZnNldF92YWx1ZSAqb2ZmdmFsOwpAQCAtOTE3LDUzICs5NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxic19jbWRfODAyXzExX21hY19hZGRyZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCi0JCQkJICAgICAgIHUxNiBjbWRfYWN0aW9uKQotewotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9NQUNfQUREUkVTUyk7Ci0JY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX21hY19hZGRyZXNzKSArCi0JCQkgICAgIFNfRFNfR0VOKTsKLQljbWQtPnJlc3VsdCA9IDA7Ci0KLQljbWQtPnBhcmFtcy5tYWNhZGQuYWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7Ci0KLQlpZiAoY21kX2FjdGlvbiA9PSBDTURfQUNUX1NFVCkgewotCQltZW1jcHkoY21kLT5wYXJhbXMubWFjYWRkLm1hY2FkZCwKLQkJICAgICAgIHByaXYtPmN1cnJlbnRfYWRkciwgRVRIX0FMRU4pOwotCQlsYnNfZGViX2hleChMQlNfREVCX0NNRCwgIlNFVF9DTUQ6IE1BQyBhZGRyIiwgcHJpdi0+Y3VycmVudF9hZGRyLCA2KTsKLQl9Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYnNfY21kXzgwMl8xMV9lZXByb21fYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkJIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAotCQkJCQkgaW50IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1ZikKLXsKLQlzdHJ1Y3QgbGJzX2lvY3RsX3JlZ3Jkd3IgKmVhID0gcGRhdGFfYnVmOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0VFUFJPTV9BQ0NFU1MpOwotCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV9lZXByb21fYWNjZXNzKSArCi0JCQkJU19EU19HRU4pOwotCWNtZC0+cmVzdWx0ID0gMDsKLQotCWNtZC0+cGFyYW1zLnJkZWVwcm9tLmFjdGlvbiA9IGNwdV90b19sZTE2KGVhLT5hY3Rpb24pOwotCWNtZC0+cGFyYW1zLnJkZWVwcm9tLm9mZnNldCA9IGNwdV90b19sZTE2KGVhLT5vZmZzZXQpOwotCWNtZC0+cGFyYW1zLnJkZWVwcm9tLmJ5dGVjb3VudCA9IGNwdV90b19sZTE2KGVhLT5OT0IpOwotCWNtZC0+cGFyYW1zLnJkZWVwcm9tLnZhbHVlID0gMDsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxic19jbWRfYnRfYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKK3N0YXRpYyBpbnQgbGJzX2NtZF9idF9hY2Nlc3Moc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCiAJCQkgICAgICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1ZikKIHsKIAlzdHJ1Y3QgY21kX2RzX2J0X2FjY2VzcyAqYnRfYWNjZXNzID0gJmNtZC0+cGFyYW1zLmJ0OwpAQCAtMTAwMCw4ICsxMDEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsYnNfY21kX2Z3dF9hY2Nlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAorc3RhdGljIGludCBsYnNfY21kX2Z3dF9hY2Nlc3Moc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCiAJCQkgICAgICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1ZikKIHsKIAlzdHJ1Y3QgY21kX2RzX2Z3dF9hY2Nlc3MgKmZ3dF9hY2Nlc3MgPSAmY21kLT5wYXJhbXMuZnd0OwpAQCAtMTA0MCw3ICsxMDUxLDYgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwobGJzX21lc2hfYWNjZXNzKTsKIAogaW50IGxic19tZXNoX2NvbmZpZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGVuYWJsZSwgdWludDE2X3QgY2hhbikKIHsKQEAgLTExNTQsOSArMTE2NCw5IEBACiAJICAgIGNvbW1hbmQgPT0gQ01EXzgwMl8xMV9BVVRIRU5USUNBVEUpCiAJCXRpbWVvID0gMTAgKiBIWjsKIAotCWxic19kZWJfaG9zdCgiRE5MRF9DTUQ6IGNvbW1hbmQgMHglMDR4LCBzZXEgJWQsIHNpemUgJWQsIGppZmZpZXMgJWx1XG4iLAotCQkgICAgIGNvbW1hbmQsIGxlMTZfdG9fY3B1KGNtZC0+c2VxbnVtKSwgY21kc2l6ZSwgamlmZmllcyk7Ci0JbGJzX2RlYl9oZXgoTEJTX0RFQl9IT1NULCAiRE5MRF9DTUQiLCAodm9pZCAqKSBjbWRub2RlLT5jbWRidWYsIGNtZHNpemUpOworCWxic19kZWJfY21kKCJETkxEX0NNRDogY29tbWFuZCAweCUwNHgsIHNlcSAlZCwgc2l6ZSAlZFxuIiwKKwkJICAgICBjb21tYW5kLCBsZTE2X3RvX2NwdShjbWQtPnNlcW51bSksIGNtZHNpemUpOworCWxic19kZWJfaGV4KExCU19ERUJfQ01ELCAiRE5MRF9DTUQiLCAodm9pZCAqKSBjbWRub2RlLT5jbWRidWYsIGNtZHNpemUpOwogCiAJcmV0ID0gcHJpdi0+aHdfaG9zdF90b19jYXJkKHByaXYsIE1WTVNfQ01ELCAodTggKikgY21kLCBjbWRzaXplKTsKIApAQCAtMTE2NSw5ICsxMTc1LDcgQEAKIAkJLyogTGV0IHRoZSB0aW1lciBraWNrIGluIGFuZCByZXRyeSwgYW5kIHBvdGVudGlhbGx5IHJlc2V0CiAJCSAgIHRoZSB3aG9sZSB0aGluZyBpZiB0aGUgY29uZGl0aW9uIHBlcnNpc3RzICovCiAJCXRpbWVvID0gSFo7Ci0JfSBlbHNlCi0JCWxic19kZWJfY21kKCJETkxEX0NNRDogc2VudCBjb21tYW5kIDB4JTA0eCwgamlmZmllcyAlbHVcbiIsCi0JCQkgICAgY29tbWFuZCwgamlmZmllcyk7CisJfQogCiAJLyogU2V0dXAgdGhlIHRpbWVyIGFmdGVyIHRyYW5zbWl0IGNvbW1hbmQgKi8KIAltb2RfdGltZXIoJnByaXYtPmNvbW1hbmRfdGltZXIsIGppZmZpZXMgKyB0aW1lbyk7CkBAIC0xMTc1LDI0ICsxMTgzLDYgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfSE9TVCk7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX2NtZF9tYWNfY29udHJvbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQpCi17Ci0Jc3RydWN0IGNtZF9kc19tYWNfY29udHJvbCAqbWFjID0gJmNtZC0+cGFyYW1zLm1hY2N0cmw7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQotCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF9NQUNfQ09OVFJPTCk7Ci0JY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfbWFjX2NvbnRyb2wpICsgU19EU19HRU4pOwotCW1hYy0+YWN0aW9uID0gY3B1X3RvX2xlMTYocHJpdi0+Y3VycmVudHBhY2tldGZpbHRlcik7Ci0KLQlsYnNfZGViX2NtZCgiTUFDX0NPTlRST0w6IGFjdGlvbiAweCV4LCBzaXplICVkXG4iLAotCQkgICAgbGUxNl90b19jcHUobWFjLT5hY3Rpb24pLCBsZTE2X3RvX2NwdShjbWQtPnNpemUpKTsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOwotCXJldHVybiAwOwotfQotCiAvKioKICAqICBUaGlzIGZ1bmN0aW9uIGluc2VydHMgY29tbWFuZCBub2RlIHRvIGNtZGZyZWVxCiAgKiAgYWZ0ZXIgY2xlYW5zIGl0LiBSZXF1aXJlcyBwcml2LT5kcml2ZXJfbG9jayBoZWxkLgpAQCAtMTIzNSw3ICsxMjI1LDcgQEAKIAljbWQtPmNtZHdhaXRxd29rZW4gPSAxOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY21kLT5jbWR3YWl0X3EpOwogCi0JaWYgKCFjbWQtPmNhbGxiYWNrKQorCWlmICghY21kLT5jYWxsYmFjayB8fCBjbWQtPmNhbGxiYWNrID09IGxic19jbWRfYXN5bmNfY2FsbGJhY2spCiAJCV9fbGJzX2NsZWFudXBfYW5kX2luc2VydF9jbWQocHJpdiwgY21kKTsKIAlwcml2LT5jdXJfY21kID0gTlVMTDsKIH0KQEAgLTEyNzksMTggKzEyNjksMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgbGJzX3NldF9tYWNfcGFja2V0X2ZpbHRlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit2b2lkIGxic19zZXRfbWFjX2NvbnRyb2woc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewotCWludCByZXQgPSAwOworCXN0cnVjdCBjbWRfZHNfbWFjX2NvbnRyb2wgY21kOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7CiAKLQkvKiBTZW5kIE1BQyBjb250cm9sIGNvbW1hbmQgdG8gc3RhdGlvbiAqLwotCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkgICAgQ01EX01BQ19DT05UUk9MLCAwLCAwLCAwLCBOVUxMKTsKKwljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CisJY21kLmFjdGlvbiA9IGNwdV90b19sZTE2KHByaXYtPm1hY19jb250cm9sKTsKKwljbWQucmVzZXJ2ZWQgPSAwOwogCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OworCWxic19jbWRfYXN5bmMocHJpdiwgQ01EX01BQ19DT05UUk9MLAorCQkmY21kLmhkciwgc2l6ZW9mKGNtZCkpOworCisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7CiB9CiAKIC8qKgpAQCAtMTMzOSw3ICsxMzMxLDggQEAKIAkJZ290byBkb25lOwogCX0KIAotCWxic19zZXRfY21kX2N0cmxfbm9kZShwcml2LCBjbWRub2RlLCBwZGF0YV9idWYpOworCWNtZG5vZGUtPmNhbGxiYWNrID0gTlVMTDsKKwljbWRub2RlLT5jYWxsYmFja19hcmcgPSAodW5zaWduZWQgbG9uZylwZGF0YV9idWY7CiAKIAljbWRwdHIgPSAoc3RydWN0IGNtZF9kc19jb21tYW5kICopY21kbm9kZS0+Y21kYnVmOwogCkBAIC0xMzU0LDE1ICsxMzQ3LDcgQEAKIAogCXN3aXRjaCAoY21kX25vKSB7CiAJY2FzZSBDTURfODAyXzExX1BTX01PREU6Ci0JCXJldCA9IGxic19jbWRfODAyXzExX3BzX21vZGUocHJpdiwgY21kcHRyLCBjbWRfYWN0aW9uKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENNRF84MDJfMTFfU0NBTjoKLQkJcmV0ID0gbGJzX2NtZF84MDIxMV9zY2FuKHByaXYsIGNtZHB0ciwgcGRhdGFfYnVmKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENNRF9NQUNfQ09OVFJPTDoKLQkJcmV0ID0gbGJzX2NtZF9tYWNfY29udHJvbChwcml2LCBjbWRwdHIpOworCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9wc19tb2RlKGNtZHB0ciwgY21kX2FjdGlvbik7CiAJCWJyZWFrOwogCiAJY2FzZSBDTURfODAyXzExX0FTU09DSUFURToKQEAgLTEzNzcsMjUgKzEzNjIsMTUgQEAKIAljYXNlIENNRF84MDJfMTFfQURfSE9DX1NUQVJUOgogCQlyZXQgPSBsYnNfY21kXzgwMjExX2FkX2hvY19zdGFydChwcml2LCBjbWRwdHIsIHBkYXRhX2J1Zik7CiAJCWJyZWFrOwotCWNhc2UgQ01EX0NPREVfRE5MRDoKLQkJYnJlYWs7CiAKIAljYXNlIENNRF84MDJfMTFfUkVTRVQ6Ci0JCXJldCA9IGxic19jbWRfODAyXzExX3Jlc2V0KHByaXYsIGNtZHB0ciwgY21kX2FjdGlvbik7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfODAyXzExX0dFVF9MT0c6Ci0JCXJldCA9IGxic19jbWRfODAyXzExX2dldF9sb2cocHJpdiwgY21kcHRyKTsKKwkJcmV0ID0gbGJzX2NtZF84MDJfMTFfcmVzZXQoY21kcHRyLCBjbWRfYWN0aW9uKTsKIAkJYnJlYWs7CiAKIAljYXNlIENNRF84MDJfMTFfQVVUSEVOVElDQVRFOgogCQlyZXQgPSBsYnNfY21kXzgwMjExX2F1dGhlbnRpY2F0ZShwcml2LCBjbWRwdHIsIHBkYXRhX2J1Zik7CiAJCWJyZWFrOwogCi0JY2FzZSBDTURfODAyXzExX0dFVF9TVEFUOgotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9nZXRfc3RhdChwcml2LCBjbWRwdHIpOwotCQlicmVhazsKLQogCWNhc2UgQ01EXzgwMl8xMV9TTk1QX01JQjoKIAkJcmV0ID0gbGJzX2NtZF84MDJfMTFfc25tcF9taWIocHJpdiwgY21kcHRyLAogCQkJCQkgICAgICAgY21kX2FjdGlvbiwgY21kX29pZCwgcGRhdGFfYnVmKTsKQEAgLTE0MDQsMTIgKzEzNzksMTIgQEAKIAljYXNlIENNRF9NQUNfUkVHX0FDQ0VTUzoKIAljYXNlIENNRF9CQlBfUkVHX0FDQ0VTUzoKIAljYXNlIENNRF9SRl9SRUdfQUNDRVNTOgotCQlyZXQgPSBsYnNfY21kX3JlZ19hY2Nlc3MocHJpdiwgY21kcHRyLCBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOworCQlyZXQgPSBsYnNfY21kX3JlZ19hY2Nlc3MoY21kcHRyLCBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwogCQlicmVhazsKIAogCWNhc2UgQ01EXzgwMl8xMV9SRl9UWF9QT1dFUjoKLQkJcmV0ID0gbGJzX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIocHJpdiwgY21kcHRyLAotCQkJCQkJICBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOworCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9yZl90eF9wb3dlcihjbWRwdHIsCisJCQkJCQkgY21kX2FjdGlvbiwgcGRhdGFfYnVmKTsKIAkJYnJlYWs7CiAKIAljYXNlIENNRF84MDJfMTFfUkFURV9BREFQVF9SQVRFU0VUOgpAQCAtMTQyMiw3ICsxMzk3LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENNRF84MDJfMTFfTU9OSVRPUl9NT0RFOgotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9tb25pdG9yX21vZGUocHJpdiwgY21kcHRyLAorCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9tb25pdG9yX21vZGUoY21kcHRyLAogCQkJCSAgICAgICAgICBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwogCQlicmVhazsKIApAQCAtMTQzNSwyNiArMTQxMCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBDTURfODAyXzExX0FEX0hPQ19TVE9QOgotCQlyZXQgPSBsYnNfY21kXzgwMjExX2FkX2hvY19zdG9wKHByaXYsIGNtZHB0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfODAyXzExX0tFWV9NQVRFUklBTDoKLQkJcmV0ID0gbGJzX2NtZF84MDJfMTFfa2V5X21hdGVyaWFsKHByaXYsIGNtZHB0ciwgY21kX2FjdGlvbiwKLQkJCQljbWRfb2lkLCBwZGF0YV9idWYpOwotCQlicmVhazsKLQotCWNhc2UgQ01EXzgwMl8xMV9QQUlSV0lTRV9UU0M6Ci0JCWJyZWFrOwotCWNhc2UgQ01EXzgwMl8xMV9HUk9VUF9UU0M6Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfODAyXzExX01BQ19BRERSRVNTOgotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9tYWNfYWRkcmVzcyhwcml2LCBjbWRwdHIsIGNtZF9hY3Rpb24pOwotCQlicmVhazsKLQotCWNhc2UgQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTOgotCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9lZXByb21fYWNjZXNzKHByaXYsIGNtZHB0ciwKLQkJCQkJCSAgICBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOworCQlyZXQgPSBsYnNfY21kXzgwMjExX2FkX2hvY19zdG9wKGNtZHB0cik7CiAJCWJyZWFrOwogCiAJY2FzZSBDTURfODAyXzExX1NFVF9BRkM6CkBAIC0xNTEwLDIyICsxNDY2LDEyIEBACiAJCQlicmVhazsKIAkJfQogCi0JY2FzZSBDTURfODAyXzExX1BXUl9DRkc6Ci0JCWNtZHB0ci0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfUFdSX0NGRyk7Ci0JCWNtZHB0ci0+c2l6ZSA9Ci0JCSAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfcHdyX2NmZykgKwotCQkJCSAgICAgU19EU19HRU4pOwotCQltZW1tb3ZlKCZjbWRwdHItPnBhcmFtcy5wd3JjZmcsIHBkYXRhX2J1ZiwKLQkJCXNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV9wd3JfY2ZnKSk7Ci0KLQkJcmV0ID0gMDsKLQkJYnJlYWs7CiAJY2FzZSBDTURfQlRfQUNDRVNTOgotCQlyZXQgPSBsYnNfY21kX2J0X2FjY2Vzcyhwcml2LCBjbWRwdHIsIGNtZF9hY3Rpb24sIHBkYXRhX2J1Zik7CisJCXJldCA9IGxic19jbWRfYnRfYWNjZXNzKGNtZHB0ciwgY21kX2FjdGlvbiwgcGRhdGFfYnVmKTsKIAkJYnJlYWs7CiAKIAljYXNlIENNRF9GV1RfQUNDRVNTOgotCQlyZXQgPSBsYnNfY21kX2Z3dF9hY2Nlc3MocHJpdiwgY21kcHRyLCBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOworCQlyZXQgPSBsYnNfY21kX2Z3dF9hY2Nlc3MoY21kcHRyLCBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwogCQlicmVhazsKIAogCWNhc2UgQ01EX0dFVF9UU0Y6CkBAIC0xNTc2LDcgKzE1MjIsNiBAQAogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0hPU1QsICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKTsKIAogLyoqCiAgKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgbGluawpAQCAtMTY5OSwzNiArMTY0NCw2IEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNsZWFucyBjb21tYW5kIG5vZGUuCi0gKgotICogIEBwYXJhbSBwdGVtcG5vZGUJQSBwb2ludGVyIHRvIGNtZEN0cmxOb2RlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCQluL2EKLSAqLwotCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY29tbWFuZCBub2RlLgotICoKLSAqICBAcGFyYW0gcHJpdgkJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gcHRlbXBub2RlCUEgcG9pbnRlciB0byBjbWRfY3RybF9ub2RlIHN0cnVjdHVyZQotICogIEBwYXJhbSBwZGF0YV9idWYJQSBwb2ludGVyIHRvIGluZm9ybWFpb24gYnVmZmVyCi0gKiAgQHJldHVybiAJCTAgb3IgLTEKLSAqLwotc3RhdGljIHZvaWQgbGJzX3NldF9jbWRfY3RybF9ub2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgIHN0cnVjdCBjbWRfY3RybF9ub2RlICpwdGVtcG5vZGUsCi0JCQkJICB2b2lkICpwZGF0YV9idWYpCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0hPU1QpOwotCi0JaWYgKCFwdGVtcG5vZGUpCi0JCXJldHVybjsKLQotCXB0ZW1wbm9kZS0+Y2FsbGJhY2sgPSBOVUxMOwotCXB0ZW1wbm9kZS0+Y2FsbGJhY2tfYXJnID0gKHVuc2lnbmVkIGxvbmcpcGRhdGFfYnVmOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0hPU1QpOwotfQotCi0vKioKICAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBuZXh0IGNvbW1hbmQgaW4gY29tbWFuZAogICogIHBlbmRpbmcgcXVldWUuIEl0IHdpbGwgcHV0IGZpbXdhcmUgYmFjayB0byBQUyBtb2RlCiAgKiAgaWYgYXBwbGljYWJsZS4KQEAgLTE3NDMsOSArMTY1OCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCS8vIERlYnVnIGdyb3VwIGlzIExCU19ERUJfVEhSRUFEIGFuZCBub3QgTEJTX0RFQl9IT1NULCBiZWNhdXNlIHRoZQotCS8vIG9ubHkgY2FsbGVyIHRvIHVzIGlzIGxic190aHJlYWQoKSBhbmQgd2UgZ2V0IGV2ZW4gd2hlbiBhCi0JLy8gZGF0YSBwYWNrZXQgaXMgcmVjZWl2ZWQKKwkvKiBEZWJ1ZyBncm91cCBpcyBMQlNfREVCX1RIUkVBRCBhbmQgbm90IExCU19ERUJfSE9TVCwgYmVjYXVzZSB0aGUKKwkgKiBvbmx5IGNhbGxlciB0byB1cyBpcyBsYnNfdGhyZWFkKCkgYW5kIHdlIGdldCBldmVuIHdoZW4gYQorCSAqIGRhdGEgcGFja2V0IGlzIHJlY2VpdmVkICovCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1RIUkVBRCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKQEAgLTE5MDksNDQgKzE4MjQsMzIgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VuZGNvbmZpcm1zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4ICpjbWRwdHIsIHUxNiBzaXplKQorc3RhdGljIHZvaWQgbGJzX3NlbmRfY29uZmlybXNsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfSE9TVCk7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9IT1NULCAic2xlZXAgY29uZmlybSIsICh1OCAqKSAmY29uZmlybV9zbGVlcCwKKwkJc2l6ZW9mKGNvbmZpcm1fc2xlZXApKTsKIAotCWxic19kZWJfaG9zdCgiU0VORF9TTEVFUENfQ01EOiBiZWZvcmUgZG93bmxvYWQsIGNtZCBzaXplICVkXG4iLAotCSAgICAgICBzaXplKTsKLQotCWxic19kZWJfaGV4KExCU19ERUJfSE9TVCwgInNsZWVwIGNvbmZpcm0gY29tbWFuZCIsIGNtZHB0ciwgc2l6ZSk7Ci0KLQlyZXQgPSBwcml2LT5od19ob3N0X3RvX2NhcmQocHJpdiwgTVZNU19DTUQsIGNtZHB0ciwgc2l6ZSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQlpZiAocHJpdi0+aW50Y291bnRlciB8fCBwcml2LT5jdXJyZW50dHhza2IpCi0JCWxic19kZWJfaG9zdCgiU0VORF9TTEVFUENfQ01EOiBpbnRjb3VudGVyICVkLCBjdXJyZW50dHhza2IgJXBcbiIsCi0JCSAgICAgICBwcml2LT5pbnRjb3VudGVyLCBwcml2LT5jdXJyZW50dHhza2IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0KKwlyZXQgPSBwcml2LT5od19ob3N0X3RvX2NhcmQocHJpdiwgTVZNU19DTUQsICh1OCAqKSAmY29uZmlybV9zbGVlcCwKKwkJc2l6ZW9mKGNvbmZpcm1fc2xlZXApKTsKIAlpZiAocmV0KSB7Ci0JCWxic19wcl9hbGVydCgKLQkJICAgICAgICJTRU5EX1NMRUVQQ19DTUQ6IEhvc3QgdG8gQ2FyZCBmYWlsZWQgZm9yIENvbmZpcm0gU2xlZXBcbiIpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwotCQlpZiAoIXByaXYtPmludGNvdW50ZXIpIHsKLQkJCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9TTEVFUDsKLQkJfSBlbHNlIHsKLQkJCWxic19kZWJfaG9zdCgiU0VORF9TTEVFUENfQ01EOiBhZnRlciBzZW50LCBpbnRjb3VudGVyICVkXG4iLAotCQkJICAgICAgIHByaXYtPmludGNvdW50ZXIpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0KLQkJbGJzX2RlYl9ob3N0KCJTRU5EX1NMRUVQQ19DTUQ6IHNlbnQgY29uZmlybSBzbGVlcFxuIik7CisJCWxic19wcl9hbGVydCgiY29uZmlybV9zbGVlcCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKIAl9CiAKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9IT1NULCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCisJLyogSWYgbm90aGluZyB0byBkbywgZ28gYmFjayB0byBzbGVlcCAoPykgKi8KKwlpZiAoIV9fa2ZpZm9fbGVuKHByaXYtPmV2ZW50X2ZpZm8pICYmICFwcml2LT5yZXNwX2xlbltwcml2LT5yZXNwX2lkeF0pCisJCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9TTEVFUDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfSE9TVCk7CiB9CiAKIHZvaWQgbGJzX3BzX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHdhaXRfb3B0aW9uKQpAQCAtMTk5NCwxMCArMTg5NywxMCBAQAogICogIEBwYXJhbSBwc21vZGUgIAlQb3dlciBTYXZpbmcgbW9kZQogICogIEByZXR1cm4gCSAgIAluL2EKICAqLwotdm9pZCBsYnNfcHNfY29uZmlybV9zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiBwc21vZGUpCit2b2lkIGxic19wc19jb25maXJtX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0wOwotCXU4IGFsbG93ZWQgPSAxOworCWludCBhbGxvd2VkID0gMTsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9IT1NUKTsKIApAQCAtMjAwNywyMCArMTkxMCwyMiBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCS8qIEluLXByb2dyZXNzIGNvbW1hbmQ/ICovCiAJaWYgKHByaXYtPmN1cl9jbWQpIHsKIAkJYWxsb3dlZCA9IDA7CiAJCWxic19kZWJfaG9zdCgiY3VyX2NtZCB3YXMgc2V0XG4iKTsKIAl9Ci0JaWYgKHByaXYtPmludGNvdW50ZXIgPiAwKSB7CisKKwkvKiBQZW5kaW5nIGV2ZW50cyBvciBjb21tYW5kIHJlc3BvbnNlcz8gKi8KKwlpZiAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykgfHwgcHJpdi0+cmVzcF9sZW5bcHJpdi0+cmVzcF9pZHhdKSB7CiAJCWFsbG93ZWQgPSAwOwotCQlsYnNfZGViX2hvc3QoImludGNvdW50ZXIgJWRcbiIsIHByaXYtPmludGNvdW50ZXIpOworCQlsYnNfZGViX2hvc3QoInBlbmRpbmcgZXZlbnRzIG9yIGNvbW1hbmQgcmVzcG9uc2VzXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAogCWlmIChhbGxvd2VkKSB7CiAJCWxic19kZWJfaG9zdCgic2VuZGluZyBsYnNfcHNfY29uZmlybV9zbGVlcFxuIik7Ci0JCXNlbmRjb25maXJtc2xlZXAocHJpdiwgKHU4ICopICYgcHJpdi0+bGJzX3BzX2NvbmZpcm1fc2xlZXAsCi0JCQkJIHNpemVvZihzdHJ1Y3QgUFNfQ01EX0NvbmZpcm1TbGVlcCkpOworCQlsYnNfc2VuZF9jb25maXJtc2xlZXAocHJpdik7CiAJfSBlbHNlIHsKIAkJbGJzX2RlYl9ob3N0KCJzbGVlcCBjb25maXJtIGhhcyBiZWVuIGRlbGF5ZWRcbiIpOwogCX0KQEAgLTIwMjksMzkgKzE5MzQsMTAgQEAKIH0KIAogCi0vKioKLSAqICBAYnJpZWYgU2ltcGxlIGNhbGxiYWNrIHRoYXQgY29waWVzIHJlc3BvbnNlIGJhY2sgaW50byBjb21tYW5kCi0gKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBleHRyYSAgCUEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoCi0gKiAgICAgICAgICAgICAgICAgICAgICAncmVzcCcgaXMgYSByZXNwb25zZQotICogIEBwYXJhbSByZXNwICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIHJlc3BvbnNlCi0gKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKLSAqLwotaW50IGxic19jbWRfY29weWJhY2soc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1bnNpZ25lZCBsb25nIGV4dHJhLAotCQkgICAgIHN0cnVjdCBjbWRfaGVhZGVyICpyZXNwKQotewotCXN0cnVjdCBjbWRfaGVhZGVyICpidWYgPSAodm9pZCAqKWV4dHJhOwotCXVpbnQxNl90IGNvcHlfbGVuOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQljb3B5X2xlbiA9IG1pbihsZTE2X3RvX2NwdShidWYtPnNpemUpLCBsZTE2X3RvX2NwdShyZXNwLT5zaXplKSk7Ci0JbGJzX2RlYl9jbWQoIkNvcHlpbmcgYmFjayAldSBieXRlczsgY29tbWFuZCByZXNwb25zZSB3YXMgJXUgYnl0ZXMsICIKLQkJICAgICJjb3B5IGJhY2sgYnVmZmVyIHdhcyAldSBieXRlc1xuIiwgY29weV9sZW4sCi0JCSAgICBsZTE2X3RvX2NwdShyZXNwLT5zaXplKSwgbGUxNl90b19jcHUoYnVmLT5zaXplKSk7Ci0JbWVtY3B5KGJ1ZiwgcmVzcCwgY29weV9sZW4pOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChsYnNfY21kX2NvcHliYWNrKTsKLQotc3RydWN0IGNtZF9jdHJsX25vZGUgKl9fbGJzX2NtZF9hc3luYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNvbW1hbmQsCi0JCQkJICAgICAgc3RydWN0IGNtZF9oZWFkZXIgKmluX2NtZCwgaW50IGluX2NtZF9zaXplLAotCQkJCSAgICAgIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgbGJzX3ByaXZhdGUgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGNtZF9oZWFkZXIgKiksCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjYWxsYmFja19hcmcpCitzdGF0aWMgc3RydWN0IGNtZF9jdHJsX25vZGUgKl9fbGJzX2NtZF9hc3luYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJdWludDE2X3QgY29tbWFuZCwgc3RydWN0IGNtZF9oZWFkZXIgKmluX2NtZCwgaW50IGluX2NtZF9zaXplLAorCWludCAoKmNhbGxiYWNrKShzdHJ1Y3QgbGJzX3ByaXZhdGUgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGNtZF9oZWFkZXIgKiksCisJdW5zaWduZWQgbG9uZyBjYWxsYmFja19hcmcpCiB7CiAJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZG5vZGU7CiAKQEAgLTIwOTgsOSArMTk3NCw2IEBACiAKIAlsYnNfZGViX2hvc3QoIlBSRVBfQ01EOiBjb21tYW5kIDB4JTA0eFxuIiwgY29tbWFuZCk7CiAKLQkvKiBoZXJlIHdhcyB0aGUgYmlnIG9sZCBzd2l0Y2goKSBzdGF0ZW1lbnQsIHdoaWNoIGlzIG5vdyBvYnNvbGV0ZSwKLQkgKiBiZWNhdXNlIHRoZSBjYWxsZXIgb2YgbGJzX2NtZCgpIHNldHMgdXAgYWxsIG9mICpjbWQgZm9yIHVzLiAqLwotCiAJY21kbm9kZS0+Y21kd2FpdHF3b2tlbiA9IDA7CiAJbGJzX3F1ZXVlX2NtZChwcml2LCBjbWRub2RlKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRxKTsKQEAgLTIxMTAsNiArMTk4MywxNSBAQAogCXJldHVybiBjbWRub2RlOwogfQogCit2b2lkIGxic19jbWRfYXN5bmMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjb21tYW5kLAorCXN0cnVjdCBjbWRfaGVhZGVyICppbl9jbWQsIGludCBpbl9jbWRfc2l6ZSkKK3sKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKKwlfX2xic19jbWRfYXN5bmMocHJpdiwgY29tbWFuZCwgaW5fY21kLCBpbl9jbWRfc2l6ZSwKKwkJbGJzX2NtZF9hc3luY19jYWxsYmFjaywgMCk7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Cit9CisKIGludCBfX2xic19jbWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjb21tYW5kLAogCSAgICAgIHN0cnVjdCBjbWRfaGVhZGVyICppbl9jbWQsIGludCBpbl9jbWRfc2l6ZSwKIAkgICAgICBpbnQgKCpjYWxsYmFjaykoc3RydWN0IGxic19wcml2YXRlICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBjbWRfaGVhZGVyICopLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaAppbmRleCBiOWFiODVjLi4zZGZjMmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaApAQCAtMTgsMTIgKzE4LDkgQEAKICNkZWZpbmUgbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIGNtZG5yLCBjbWQpCVwKIAlsYnNfY21kKHByaXYsIGNtZG5yLCBjbWQsIGxic19jbWRfY29weWJhY2ssICh1bnNpZ25lZCBsb25nKSAoY21kKSkKIAotLyogX19sYnNfY21kKCkgd2lsbCBmcmVlIHRoZSBjbWRub2RlIGFuZCByZXR1cm4gc3VjY2Vzcy9mYWlsdXJlLgotICAgX19sYnNfY21kX2FzeW5jKCkgcmVxdWlyZXMgdGhhdCB0aGUgY2FsbGJhY2sgZnJlZSB0aGUgY21kbm9kZSAqLwotc3RydWN0IGNtZF9jdHJsX25vZGUgKl9fbGJzX2NtZF9hc3luYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNvbW1hbmQsCi0JCQkJICAgICAgc3RydWN0IGNtZF9oZWFkZXIgKmluX2NtZCwgaW50IGluX2NtZF9zaXplLAotCQkJCSAgICAgIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgbGJzX3ByaXZhdGUgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGNtZF9oZWFkZXIgKiksCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjYWxsYmFja19hcmcpOwordm9pZCBsYnNfY21kX2FzeW5jKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY29tbWFuZCwKKwlzdHJ1Y3QgY21kX2hlYWRlciAqaW5fY21kLCBpbnQgaW5fY21kX3NpemUpOworCiBpbnQgX19sYnNfY21kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY29tbWFuZCwKIAkgICAgICBzdHJ1Y3QgY21kX2hlYWRlciAqaW5fY21kLCBpbnQgaW5fY21kX3NpemUsCiAJICAgICAgaW50ICgqY2FsbGJhY2spKHN0cnVjdCBsYnNfcHJpdmF0ZSAqLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgY21kX2hlYWRlciAqKSwKQEAgLTU3LDUgKzU0LDcgQEAKIAkJCSAgIHN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvYyk7CiBpbnQgbGJzX2NtZF84MDJfMTFfZW5hYmxlX3JzbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9hY3Rpb24sCiAJCQkgICAgICB1aW50MTZfdCAqZW5hYmxlKTsKK2ludCBsYnNfY21kXzgwMl8xMV9rZXlfbWF0ZXJpYWwoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfYWN0aW9uLAorCQkJCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvYyk7CiAKICNlbmRpZiAvKiBfTEJTX0NNRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKaW5kZXggMTU5MjE2YS4uNWFiZWNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgImRlY2wuaCIKICNpbmNsdWRlICJkZWZzLmgiCiAjaW5jbHVkZSAiZGV2LmgiCi0jaW5jbHVkZSAiam9pbi5oIgorI2luY2x1ZGUgImFzc29jLmgiCiAjaW5jbHVkZSAid2V4dC5oIgogCiAvKioKQEAgLTc0LDcgKzc0LDcgQEAKIAkJbGJzX2RlYl9jbWQoImRpc2Nvbm5lY3RlZCwgc28gZXhpdCBQUyBtb2RlXG4iKTsKIAkJbGJzX3BzX3dha2V1cChwcml2LCAwKTsKIAl9Ci0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0FTU09DKTsKIH0KIAogLyoqCkBAIC0xNDYsMjIgKzE0Niw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBsYnNfcmV0XzgwMl8xMV9zdGF0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQlzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0vKgljdXJyZW50bHkgcHJpdi0+d2xhbjgwMl8xMVN0YXQgaXMgdW51c2VkCi0KLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9nZXRfc3RhdCAqcDExU3RhdCA9ICZyZXNwLT5wYXJhbXMuZ3N0YXQ7Ci0KLQkvLyBUT0RPIENvbnZlcnQgaXQgdG8gQmlnIGVuZGlhbiBiZWZvciBjb3B5Ci0JbWVtY3B5KCZwcml2LT53bGFuODAyXzExU3RhdCwKLQkgICAgICAgcDExU3RhdCwgc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX2dldF9zdGF0KSk7Ci0qLwotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGxic19yZXRfODAyXzExX3NubXBfbWliKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQogewpAQCAtMjA0LDc0ICsxODgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxic19yZXRfODAyXzExX2tleV9tYXRlcmlhbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCkKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwgKnBrZXltYXRlcmlhbCA9Ci0JICAgICZyZXNwLT5wYXJhbXMua2V5bWF0ZXJpYWw7Ci0JdTE2IGFjdGlvbiA9IGxlMTZfdG9fY3B1KHBrZXltYXRlcmlhbC0+YWN0aW9uKTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQpOwotCi0JLyogQ29weSB0aGUgcmV0dXJuZWQga2V5IHRvIGRyaXZlciBwcml2YXRlIGRhdGEgKi8KLQlpZiAoYWN0aW9uID09IENNRF9BQ1RfR0VUKSB7Ci0JCXU4ICogYnVmX3B0ciA9ICh1OCAqKSAmcGtleW1hdGVyaWFsLT5rZXlQYXJhbVNldDsKLQkJdTggKiByZXNwX2VuZCA9ICh1OCAqKSAocmVzcCArIGxlMTZfdG9fY3B1KHJlc3AtPnNpemUpKTsKLQotCQl3aGlsZSAoYnVmX3B0ciA8IHJlc3BfZW5kKSB7Ci0JCQlzdHJ1Y3QgTXJ2bElFdHlwZV9rZXlQYXJhbVNldCAqIHBrZXlwYXJhbXNldCA9Ci0JCQkgICAgKHN0cnVjdCBNcnZsSUV0eXBlX2tleVBhcmFtU2V0ICopIGJ1Zl9wdHI7Ci0JCQlzdHJ1Y3QgZW5jX2tleSAqIHBrZXk7Ci0JCQl1MTYgcGFyYW1fc2V0X2xlbiA9IGxlMTZfdG9fY3B1KHBrZXlwYXJhbXNldC0+bGVuZ3RoKTsKLQkJCXUxNiBrZXlfbGVuID0gbGUxNl90b19jcHUocGtleXBhcmFtc2V0LT5rZXlsZW4pOwotCQkJdTE2IGtleV9mbGFncyA9IGxlMTZfdG9fY3B1KHBrZXlwYXJhbXNldC0+a2V5aW5mbyk7Ci0JCQl1MTYga2V5X3R5cGUgPSBsZTE2X3RvX2NwdShwa2V5cGFyYW1zZXQtPmtleXR5cGVpZCk7Ci0JCQl1OCAqIGVuZDsKLQotCQkJZW5kID0gKHU4ICopIHBrZXlwYXJhbXNldCArIHNpemVvZiAocGtleXBhcmFtc2V0LT50eXBlKQotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZiAocGtleXBhcmFtc2V0LT5sZW5ndGgpCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGFyYW1fc2V0X2xlbjsKLQkJCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBhY2Nlc3MgcGFzdCB0aGUgZW5kIG9mIHRoZSBJRXMgKi8KLQkJCWlmIChlbmQgPiByZXNwX2VuZCkKLQkJCQlicmVhazsKLQotCQkJaWYgKGtleV9mbGFncyAmIEtFWV9JTkZPX1dQQV9VTklDQVNUKQotCQkJCXBrZXkgPSAmcHJpdi0+d3BhX3VuaWNhc3Rfa2V5OwotCQkJZWxzZSBpZiAoa2V5X2ZsYWdzICYgS0VZX0lORk9fV1BBX01DQVNUKQotCQkJCXBrZXkgPSAmcHJpdi0+d3BhX21jYXN0X2tleTsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQotCQkJLyogQ29weSByZXR1cm5lZCBrZXkgaW50byBkcml2ZXIgKi8KLQkJCW1lbXNldChwa2V5LCAwLCBzaXplb2Yoc3RydWN0IGVuY19rZXkpKTsKLQkJCWlmIChrZXlfbGVuID4gc2l6ZW9mKHBrZXktPmtleSkpCi0JCQkJYnJlYWs7Ci0JCQlwa2V5LT50eXBlID0ga2V5X3R5cGU7Ci0JCQlwa2V5LT5mbGFncyA9IGtleV9mbGFnczsKLQkJCXBrZXktPmxlbiA9IGtleV9sZW47Ci0JCQltZW1jcHkocGtleS0+a2V5LCBwa2V5cGFyYW1zZXQtPmtleSwgcGtleS0+bGVuKTsKLQotCQkJYnVmX3B0ciA9IGVuZCArIDE7Ci0JCX0KLQl9Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYnNfcmV0XzgwMl8xMV9tYWNfYWRkcmVzcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCkKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9tYWNfYWRkcmVzcyAqbWFjYWRkID0gJnJlc3AtPnBhcmFtcy5tYWNhZGQ7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQotCW1lbWNweShwcml2LT5jdXJyZW50X2FkZHIsIG1hY2FkZC0+bWFjYWRkLCBFVEhfQUxFTik7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBsYnNfcmV0XzgwMl8xMV9yZl90eF9wb3dlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCkKIHsKQEAgLTMzMyw0NSArMjQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsYnNfcmV0XzgwMl8xMV9lZXByb21fYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCkKLXsKLQlzdHJ1Y3QgbGJzX2lvY3RsX3JlZ3Jkd3IgKnBidWY7Ci0JcGJ1ZiA9IChzdHJ1Y3QgbGJzX2lvY3RsX3JlZ3Jkd3IgKikgcHJpdi0+cHJkZWVwcm9tOwotCi0JbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfQ01ELCAibGVuICVkIiwKLQkgICAgICAgbGUxNl90b19jcHUocmVzcC0+cGFyYW1zLnJkZWVwcm9tLmJ5dGVjb3VudCkpOwotCWlmIChwYnVmLT5OT0IgPCBsZTE2X3RvX2NwdShyZXNwLT5wYXJhbXMucmRlZXByb20uYnl0ZWNvdW50KSkgewotCQlwYnVmLT5OT0IgPSAwOwotCQlsYnNfZGViX2NtZCgiRUVQUk9NIHJlYWQgbGVuZ3RoIHRvbyBiaWdcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXBidWYtPk5PQiA9IGxlMTZfdG9fY3B1KHJlc3AtPnBhcmFtcy5yZGVlcHJvbS5ieXRlY291bnQpOwotCWlmIChwYnVmLT5OT0IgPiAwKSB7Ci0KLQkJbWVtY3B5KCZwYnVmLT52YWx1ZSwgKHU4ICopICYgcmVzcC0+cGFyYW1zLnJkZWVwcm9tLnZhbHVlLAotCQkgICAgICAgbGUxNl90b19jcHUocmVzcC0+cGFyYW1zLnJkZWVwcm9tLmJ5dGVjb3VudCkpOwotCQlsYnNfZGViX2hleChMQlNfREVCX0NNRCwgIkVFUFJPTSIsIChjaGFyICopJnBidWYtPnZhbHVlLAotCQkJbGUxNl90b19jcHUocmVzcC0+cGFyYW1zLnJkZWVwcm9tLmJ5dGVjb3VudCkpOwotCX0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfQ01EKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYnNfcmV0X2dldF9sb2coc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCkKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9nZXRfbG9nICpsb2dtZXNzYWdlID0gJnJlc3AtPnBhcmFtcy5nbG9nOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NNRCk7Ci0KLQkvKiBTdG9yZWQgbGl0dGxlLWVuZGlhbiAqLwotCW1lbWNweSgmcHJpdi0+bG9nbXNnLCBsb2dtZXNzYWdlLCBzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfZ2V0X2xvZykpOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbGJzX3JldF84MDJfMTFfYmNuX2N0cmwoc3RydWN0IGxic19wcml2YXRlICogcHJpdiwKIAkJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQogewpAQCAtMzkwLDcgKzI2Nyw2IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGhhbmRsZV9jbWRfcmVzcG9uc2Uoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZHVtbXksCiAJCQkJICAgICAgc3RydWN0IGNtZF9oZWFkZXIgKmNtZF9yZXNwb25zZSkKIHsKIAlzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3AgPSAoc3RydWN0IGNtZF9kc19jb21tYW5kICopIGNtZF9yZXNwb25zZTsKQEAgLTQwNywxNCArMjgzLDYgQEAKIAkJcmV0ID0gbGJzX3JldF9yZWdfYWNjZXNzKHByaXYsIHJlc3BjbWQsIHJlc3ApOwogCQlicmVhazsKIAotCWNhc2UgQ01EX1JFVChDTURfODAyXzExX1NDQU4pOgotCQlyZXQgPSBsYnNfcmV0XzgwMjExX3NjYW4ocHJpdiwgcmVzcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTURfUkVUKENNRF84MDJfMTFfR0VUX0xPRyk6Ci0JCXJldCA9IGxic19yZXRfZ2V0X2xvZyhwcml2LCByZXNwKTsKLQkJYnJlYWs7Ci0KIAljYXNlIENNRF9SRVRfODAyXzExX0FTU09DSUFURToKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9BU1NPQ0lBVEUpOgogCWNhc2UgQ01EX1JFVChDTURfODAyXzExX1JFQVNTT0NJQVRFKToKQEAgLTQyMyw3ICsyOTEsNyBAQAogCiAJY2FzZSBDTURfUkVUKENNRF84MDJfMTFfRElTQVNTT0NJQVRFKToKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURSk6Ci0JCXJldCA9IGxic19yZXRfODAyMTFfZGlzYXNzb2NpYXRlKHByaXYsIHJlc3ApOworCQlyZXQgPSBsYnNfcmV0XzgwMjExX2Rpc2Fzc29jaWF0ZShwcml2KTsKIAkJYnJlYWs7CiAKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQpOgpAQCAtNDMxLDEwICsyOTksNiBAQAogCQlyZXQgPSBsYnNfcmV0XzgwMjExX2FkX2hvY19zdGFydChwcml2LCByZXNwKTsKIAkJYnJlYWs7CiAKLQljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9HRVRfU1RBVCk6Ci0JCXJldCA9IGxic19yZXRfODAyXzExX3N0YXQocHJpdiwgcmVzcCk7Ci0JCWJyZWFrOwotCiAJY2FzZSBDTURfUkVUKENNRF84MDJfMTFfU05NUF9NSUIpOgogCQlyZXQgPSBsYnNfcmV0XzgwMl8xMV9zbm1wX21pYihwcml2LCByZXNwKTsKIAkJYnJlYWs7CkBAIC00NTMsNyArMzE3LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENNRF9SRVQoQ01EX01BQ19NVUxUSUNBU1RfQURSKToKLQljYXNlIENNRF9SRVQoQ01EX01BQ19DT05UUk9MKToKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9SRVNFVCk6CiAJY2FzZSBDTURfUkVUKENNRF84MDJfMTFfQVVUSEVOVElDQVRFKToKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9CRUFDT05fU1RPUCk6CkBAIC00NjcsMjQgKzMzMCwxMiBAQAogCQlyZXQgPSBsYnNfcmV0XzgwMl8xMV9yc3NpKHByaXYsIHJlc3ApOwogCQlicmVhazsKIAotCWNhc2UgQ01EX1JFVChDTURfODAyXzExX01BQ19BRERSRVNTKToKLQkJcmV0ID0gbGJzX3JldF84MDJfMTFfbWFjX2FkZHJlc3MocHJpdiwgcmVzcCk7Ci0JCWJyZWFrOwotCiAJY2FzZSBDTURfUkVUKENNRF84MDJfMTFfQURfSE9DX1NUT1ApOgotCQlyZXQgPSBsYnNfcmV0XzgwMjExX2FkX2hvY19zdG9wKHByaXYsIHJlc3ApOwotCQlicmVhazsKLQotCWNhc2UgQ01EX1JFVChDTURfODAyXzExX0tFWV9NQVRFUklBTCk6Ci0JCXJldCA9IGxic19yZXRfODAyXzExX2tleV9tYXRlcmlhbChwcml2LCByZXNwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTKToKLQkJcmV0ID0gbGJzX3JldF84MDJfMTFfZWVwcm9tX2FjY2Vzcyhwcml2LCByZXNwKTsKKwkJcmV0ID0gbGJzX3JldF84MDIxMV9hZF9ob2Nfc3RvcChwcml2KTsKIAkJYnJlYWs7CiAKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMURfRE9NQUlOX0lORk8pOgotCQlyZXQgPSBsYnNfcmV0XzgwMl8xMWRfZG9tYWluX2luZm8ocHJpdiwgcmVzcCk7CisJCXJldCA9IGxic19yZXRfODAyXzExZF9kb21haW5faW5mbyhyZXNwKTsKIAkJYnJlYWs7CiAKIAljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9UUENfQ0ZHKToKQEAgLTUwMCwxNCArMzUxLDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAKLQljYXNlIENNRF9SRVQoQ01EXzgwMl8xMV9QV1JfQ0ZHKToKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0JCW1lbW1vdmUoKHZvaWQgKilwcml2LT5jdXJfY21kLT5jYWxsYmFja19hcmcsICZyZXNwLT5wYXJhbXMucHdyY2ZnLAotCQkJc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX3B3cl9jZmcpKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQotCQlicmVhazsKLQogCWNhc2UgQ01EX1JFVChDTURfR0VUX1RTRik6CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQltZW1jcHkoKHZvaWQgKilwcml2LT5jdXJfY21kLT5jYWxsYmFja19hcmcsCkBAIC01NDEsNyArMzg0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgbGJzX3Byb2Nlc3NfcnhfY29tbWFuZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCitpbnQgbGJzX3Byb2Nlc3NfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4ICpkYXRhLCB1MzIgbGVuKQogewogCXVpbnQxNl90IHJlc3BjbWQsIGN1cmNtZDsKIAlzdHJ1Y3QgY21kX2hlYWRlciAqcmVzcDsKQEAgLTU2MSwyNiArNDA0LDI0IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlyZXNwID0gKHZvaWQgKilwcml2LT51cGxkX2J1ZjsKLQotCWN1cmNtZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNvbW1hbmQpOwotCisJcmVzcCA9ICh2b2lkICopZGF0YTsKKwljdXJjbWQgPSBsZTE2X3RvX2NwdShwcml2LT5jdXJfY21kLT5jbWRidWYtPmNvbW1hbmQpOwogCXJlc3BjbWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKTsKIAlyZXN1bHQgPSBsZTE2X3RvX2NwdShyZXNwLT5yZXN1bHQpOwogCi0JbGJzX2RlYl9ob3N0KCJDTURfUkVTUDogcmVzcG9uc2UgMHglMDR4LCBzZXEgJWQsIHNpemUgJWQsIGppZmZpZXMgJWx1XG4iLAotCQkgICAgIHJlc3BjbWQsIGxlMTZfdG9fY3B1KHJlc3AtPnNlcW51bSksIHByaXYtPnVwbGRfbGVuLCBqaWZmaWVzKTsKLQlsYnNfZGViX2hleChMQlNfREVCX0hPU1QsICJDTURfUkVTUCIsICh2b2lkICopIHJlc3AsIHByaXYtPnVwbGRfbGVuKTsKKwlsYnNfZGViX2NtZCgiQ01EX1JFU1A6IHJlc3BvbnNlIDB4JTA0eCwgc2VxICVkLCBzaXplICVkXG4iLAorCQkgICAgIHJlc3BjbWQsIGxlMTZfdG9fY3B1KHJlc3AtPnNlcW51bSksIGxlbik7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9DTUQsICJDTURfUkVTUCIsICh2b2lkICopIHJlc3AsIGxlbik7CiAKLQlpZiAocmVzcC0+c2VxbnVtICE9IHJlc3AtPnNlcW51bSkgeworCWlmIChyZXNwLT5zZXFudW0gIT0gcHJpdi0+Y3VyX2NtZC0+Y21kYnVmLT5zZXFudW0pIHsKIAkJbGJzX3ByX2luZm8oIlJlY2VpdmVkIENNRF9SRVNQIHdpdGggaW52YWxpZCBzZXF1ZW5jZSAlZCAoZXhwZWN0ZWQgJWQpXG4iLAotCQkJICAgIGxlMTZfdG9fY3B1KHJlc3AtPnNlcW51bSksIGxlMTZfdG9fY3B1KHJlc3AtPnNlcW51bSkpOworCQkJICAgIGxlMTZfdG9fY3B1KHJlc3AtPnNlcW51bSksIGxlMTZfdG9fY3B1KHByaXYtPmN1cl9jbWQtPmNtZGJ1Zi0+c2VxbnVtKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCXJldCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQogCWlmIChyZXNwY21kICE9IENNRF9SRVQoY3VyY21kKSAmJgotCSAgICByZXNwY21kICE9IENNRF84MDJfMTFfQVNTT0NJQVRFICYmIGN1cmNtZCAhPSBDTURfUkVUXzgwMl8xMV9BU1NPQ0lBVEUpIHsKKwkgICAgcmVzcGNtZCAhPSBDTURfUkVUXzgwMl8xMV9BU1NPQ0lBVEUgJiYgY3VyY21kICE9IENNRF84MDJfMTFfQVNTT0NJQVRFKSB7CiAJCWxic19wcl9pbmZvKCJJbnZhbGlkIENNRF9SRVNQICV4IHRvIGNvbW1hbmQgJXghXG4iLCByZXNwY21kLCBjdXJjbWQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQlyZXQgPSAtMTsKQEAgLTY4OSw3ICs1MzAsNyBAQAogCQlyZXQgPSBwcml2LT5jdXJfY21kLT5jYWxsYmFjayhwcml2LCBwcml2LT5jdXJfY21kLT5jYWxsYmFja19hcmcsCiAJCQkJcmVzcCk7CiAJfSBlbHNlCi0JCXJldCA9IGhhbmRsZV9jbWRfcmVzcG9uc2UocHJpdiwgMCwgcmVzcCk7CisJCXJldCA9IGhhbmRsZV9jbWRfcmVzcG9uc2UocHJpdiwgcmVzcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIApAQCAtNzA3LDIxICs1NDgsMjAgQEAKIAogc3RhdGljIGludCBsYnNfc2VuZF9jb25maXJtd2FrZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IGNtZF9oZWFkZXIgKmNtZCA9ICZwcml2LT5sYnNfcHNfY29uZmlybV93YWtlOworCXN0cnVjdCBjbWRfaGVhZGVyIGNtZDsKIAlpbnQgcmV0ID0gMDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9IT1NUKTsKIAotCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfV0FLRVVQX0NPTkZJUk0pOwotCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JY21kLT5zZXFudW0gPSBjcHVfdG9fbGUxNigrK3ByaXYtPnNlcW51bSk7Ci0JY21kLT5yZXN1bHQgPSAwOworCWNtZC5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9XQUtFVVBfQ09ORklSTSk7CisJY21kLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY21kKSk7CisJY21kLnNlcW51bSA9IGNwdV90b19sZTE2KCsrcHJpdi0+c2VxbnVtKTsKKwljbWQucmVzdWx0ID0gMDsKIAotCWxic19kZWJfaG9zdCgiU0VORF9XQUtFQ19DTUQ6IGJlZm9yZSBkb3dubG9hZFxuIik7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9IT1NULCAid2FrZSBjb25maXJtIiwgKHU4ICopICZjbWQsCisJCXNpemVvZihjbWQpKTsKIAotCWxic19kZWJfaGV4KExCU19ERUJfSE9TVCwgIndha2UgY29uZmlybSBjb21tYW5kIiwgKHZvaWQgKiljbWQsIHNpemVvZigqY21kKSk7Ci0KLQlyZXQgPSBwcml2LT5od19ob3N0X3RvX2NhcmQocHJpdiwgTVZNU19DTUQsICh2b2lkICopY21kLCBzaXplb2YoKmNtZCkpOworCXJldCA9IHByaXYtPmh3X2hvc3RfdG9fY2FyZChwcml2LCBNVk1TX0NNRCwgKHU4ICopICZjbWQsIHNpemVvZihjbWQpKTsKIAlpZiAocmV0KQogCQlsYnNfcHJfYWxlcnQoIlNFTkRfV0FLRUNfQ01EOiBIb3N0IHRvIENhcmQgZmFpbGVkIGZvciBDb25maXJtIFdha2VcbiIpOwogCkBAIC03MjksMjIgKzU2OSwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBsYnNfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCitpbnQgbGJzX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgZXZlbnQpCiB7CiAJaW50IHJldCA9IDA7Ci0JdTMyIGV2ZW50Y2F1c2U7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKIAotCXNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKLQlldmVudGNhdXNlID0gcHJpdi0+ZXZlbnRjYXVzZSA+PiBTQklfRVZFTlRfQ0FVU0VfU0hJRlQ7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0KLQlsYnNfZGViX2NtZCgiZXZlbnQgY2F1c2UgJWRcbiIsIGV2ZW50Y2F1c2UpOwotCi0Jc3dpdGNoIChldmVudGNhdXNlKSB7CisJc3dpdGNoIChldmVudCkgewogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX0xJTktfU0VOU0VEOgotCQlsYnNfZGViX2NtZCgiRVZFTlQ6IE1BQ1JFR19JTlRfQ09ERV9MSU5LX1NFTlNFRFxuIik7CisJCWxic19kZWJfY21kKCJFVkVOVDogbGluayBzZW5zZWRcbiIpOwogCQlicmVhazsKIAogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX0RFQVVUSEVOVElDQVRFRDoKQEAgLTc2Myw3ICs1OTYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX1BTX1NMRUVQOgotCQlsYnNfZGViX2NtZCgiRVZFTlQ6IHNsZWVwXG4iKTsKKwkJbGJzX2RlYl9jbWQoIkVWRU5UOiBwcyBzbGVlcFxuIik7CiAKIAkJLyogaGFuZGxlIHVuZXhwZWN0ZWQgUFMgU0xFRVAgZXZlbnQgKi8KIAkJaWYgKHByaXYtPnBzc3RhdGUgPT0gUFNfU1RBVEVfRlVMTF9QT1dFUikgewpAQCAtNzczLDE3ICs2MDYsMTcgQEAKIAkJfQogCQlwcml2LT5wc3N0YXRlID0gUFNfU1RBVEVfUFJFX1NMRUVQOwogCi0JCWxic19wc19jb25maXJtX3NsZWVwKHByaXYsICh1MTYpIHByaXYtPnBzbW9kZSk7CisJCWxic19wc19jb25maXJtX3NsZWVwKHByaXYpOwogCiAJCWJyZWFrOwogCiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfSE9TVF9BV0FLRToKLQkJbGJzX2RlYl9jbWQoIkVWRU5UOiBIT1NUX0FXQUtFXG4iKTsKKwkJbGJzX2RlYl9jbWQoIkVWRU5UOiBob3N0IGF3YWtlXG4iKTsKIAkJbGJzX3NlbmRfY29uZmlybXdha2UocHJpdik7CiAJCWJyZWFrOwogCiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfUFNfQVdBS0U6Ci0JCWxic19kZWJfY21kKCJFVkVOVDogYXdha2VcbiIpOworCQlsYnNfZGViX2NtZCgiRVZFTlQ6IHBzIGF3YWtlXG4iKTsKIAkJLyogaGFuZGxlIHVuZXhwZWN0ZWQgUFMgQVdBS0UgZXZlbnQgKi8KIAkJaWYgKHByaXYtPnBzc3RhdGUgPT0gUFNfU1RBVEVfRlVMTF9QT1dFUikgewogCQkJbGJzX2RlYl9jbWQoCkBAIC04MTQsMTQgKzY0NywxNiBAQAogCQlsYnNfZGViX2NtZCgiRVZFTlQ6IE1VTFRJQ0FTVCBNSUMgRVJST1JcbiIpOwogCQloYW5kbGVfbWljX2ZhaWx1cmVldmVudChwcml2LCBNQUNSRUdfSU5UX0NPREVfTUlDX0VSUl9NVUxUSUNBU1QpOwogCQlicmVhazsKLQljYXNlIE1BQ1JFR19JTlRfQ09ERV9NSUJfQ0hBTkdFRDoKLQljYXNlIE1BQ1JFR19JTlRfQ09ERV9JTklUX0RPTkU6Ci0JCWJyZWFrOwogCisJY2FzZSBNQUNSRUdfSU5UX0NPREVfTUlCX0NIQU5HRUQ6CisJCWxic19kZWJfY21kKCJFVkVOVDogTUlCIENIQU5HRURcbiIpOworCQlicmVhazsKKwljYXNlIE1BQ1JFR19JTlRfQ09ERV9JTklUX0RPTkU6CisJCWxic19kZWJfY21kKCJFVkVOVDogSU5JVCBET05FXG4iKTsKKwkJYnJlYWs7CiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfQURIT0NfQkNOX0xPU1Q6CiAJCWxic19kZWJfY21kKCJFVkVOVDogQURIT0MgYmVhY29uIGxvc3RcbiIpOwogCQlicmVhazsKLQogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX1JTU0lfTE9XOgogCQlsYnNfcHJfYWxlcnQoIkVWRU5UOiByc3NpIGxvd1xuIik7CiAJCWJyZWFrOwpAQCAtODU2LDE0ICs2OTEsMTAgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlsYnNfcHJfYWxlcnQoIkVWRU5UOiB1bmtub3duIGV2ZW50IGlkICVkXG4iLCBldmVudGNhdXNlKTsKKwkJbGJzX3ByX2FsZXJ0KCJFVkVOVDogdW5rbm93biBldmVudCBpZCAlZFxuIiwgZXZlbnQpOwogCQlicmVhazsKIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JcHJpdi0+ZXZlbnRjYXVzZSA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0KIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DTUQsICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKaW5kZXggZmQ2N2I3Ny4uYWQyZmFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtMTksNyArMTksNyBAQAogfTsKIAogI2lmZGVmIFBST0NfREVCVUcKLXN0YXRpYyB2b2lkIGxic19kZWJ1Z19pbml0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBsYnNfZGVidWdfaW5pdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgb3Blbl9maWxlX2dlbmVyaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC03OCw3ICs3OCw3IEBACiAJCXUxNiBzcGVjdHJ1bV9tZ210ID0gKGl0ZXJfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpOwogCiAJCXBvcyArPSBzbnByaW50ZihidWYrcG9zLCBsZW4tcG9zLAotCQkJIiUwMnV8ICUwM2QgfCAlMDRsZCB8ICVzIHwiLAorCQkJIiUwMnV8ICUwM2QgfCAlMDRkIHwgJXMgfCIsCiAJCQludW1zY2Fuc2RvbmUsIGl0ZXJfYnNzLT5jaGFubmVsLCBpdGVyX2Jzcy0+cnNzaSwKIAkJCXByaW50X21hYyhtYWMsIGl0ZXJfYnNzLT5ic3NpZCkpOwogCQlwb3MgKz0gc25wcmludGYoYnVmK3BvcywgbGVuLXBvcywgIiAlMDR4LSIsIGl0ZXJfYnNzLT5jYXBhYmlsaXR5KTsKQEAgLTE2NCwxNzMgKzE2NCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgbGJzX2V4dHNjYW4oc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNzaXplX3QgcmVzLCBidWZfc2l6ZTsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKLQotCWJ1Zl9zaXplID0gbWluKGNvdW50LCBsZW4gLSAxKTsKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsKLQkJcmVzID0gLUVGQVVMVDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCWxic19zZW5kX3NwZWNpZmljX3NzaWRfc2Nhbihwcml2LCBidWYsIHN0cmxlbihidWYpLTEsIDApOwotCi0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YodW5pb24gaXdyZXFfZGF0YSkpOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwotCi1vdXRfdW5sb2NrOgotCWZyZWVfcGFnZShhZGRyKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGxic19wYXJzZV9ic3NpZChjaGFyICpidWYsIHNpemVfdCBjb3VudCwKLQlzdHJ1Y3QgbGJzX2lvY3RsX3VzZXJfc2Nhbl9jZmcgKnNjYW5fY2ZnKQotewotCWNoYXIgKmhvbGQ7Ci0JdW5zaWduZWQgaW50IG1hY1tFVEhfQUxFTl07Ci0KLQlob2xkID0gc3Ryc3RyKGJ1ZiwgImJzc2lkPSIpOwotCWlmICghaG9sZCkKLQkJcmV0dXJuOwotCWhvbGQgKz0gNjsKLQlzc2NhbmYoaG9sZCwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKLQkgICAgICAgbWFjLCBtYWMrMSwgbWFjKzIsIG1hYyszLCBtYWMrNCwgbWFjKzUpOwotCW1lbWNweShzY2FuX2NmZy0+YnNzaWQsIG1hYywgRVRIX0FMRU4pOwotfQotCi1zdGF0aWMgdm9pZCBsYnNfcGFyc2Vfc3NpZChjaGFyICpidWYsIHNpemVfdCBjb3VudCwKLQlzdHJ1Y3QgbGJzX2lvY3RsX3VzZXJfc2Nhbl9jZmcgKnNjYW5fY2ZnKQotewotCWNoYXIgKmhvbGQsICplbmQ7Ci0Jc3NpemVfdCBzaXplOwotCi0JaG9sZCA9IHN0cnN0cihidWYsICJzc2lkPSIpOwotCWlmICghaG9sZCkKLQkJcmV0dXJuOwotCWhvbGQgKz0gNTsKLQllbmQgPSBzdHJjaHIoaG9sZCwgJyAnKTsKLQlpZiAoIWVuZCkKLQkJZW5kID0gYnVmICsgY291bnQgLSAxOwotCi0Jc2l6ZSA9IG1pbigoc2l6ZV90KUlXX0VTU0lEX01BWF9TSVpFLCAoc2l6ZV90KSAoZW5kIC0gaG9sZCkpOwotCXN0cm5jcHkoc2Nhbl9jZmctPnNzaWQsIGhvbGQsIHNpemUpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGxic19wYXJzZV9jbGVhcihjaGFyICpidWYsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqdGFnKQotewotCWNoYXIgKmhvbGQ7Ci0JaW50IHZhbDsKLQotCWhvbGQgPSBzdHJzdHIoYnVmLCB0YWcpOwotCWlmICghaG9sZCkKLQkJcmV0dXJuIDA7Ci0JaG9sZCArPSBzdHJsZW4odGFnKTsKLQlzc2NhbmYoaG9sZCwgIiVkIiwgJnZhbCk7Ci0KLQlpZiAodmFsICE9IDApCi0JCXZhbCA9IDE7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW50IGxic19wYXJzZV9kdXIoY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0Jc3RydWN0IGxic19pb2N0bF91c2VyX3NjYW5fY2ZnICpzY2FuX2NmZykKLXsKLQljaGFyICpob2xkOwotCWludCB2YWw7Ci0KLQlob2xkID0gc3Ryc3RyKGJ1ZiwgImR1cj0iKTsKLQlpZiAoIWhvbGQpCi0JCXJldHVybiAwOwotCWhvbGQgKz0gNDsKLQlzc2NhbmYoaG9sZCwgIiVkIiwgJnZhbCk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9pZCBsYnNfcGFyc2VfdHlwZShjaGFyICpidWYsIHNpemVfdCBjb3VudCwKLQlzdHJ1Y3QgbGJzX2lvY3RsX3VzZXJfc2Nhbl9jZmcgKnNjYW5fY2ZnKQotewotCWNoYXIgKmhvbGQ7Ci0JaW50IHZhbDsKLQotCWhvbGQgPSBzdHJzdHIoYnVmLCAidHlwZT0iKTsKLQlpZiAoIWhvbGQpCi0JCXJldHVybjsKLQlob2xkICs9IDU7Ci0Jc3NjYW5mKGhvbGQsICIlZCIsICZ2YWwpOwotCi0JLyogdHlwZT0xLDIgb3IgMyAqLwotCWlmICh2YWwgPCAxIHx8IHZhbCA+IDMpCi0JCXJldHVybjsKLQotCXNjYW5fY2ZnLT5ic3N0eXBlID0gdmFsOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3NpemVfdCBsYnNfc2V0dXNlcnNjYW4oc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3NpemVfdCByZXMsIGJ1Zl9zaXplOwotCXN0cnVjdCBsYnNfaW9jdGxfdXNlcl9zY2FuX2NmZyAqc2Nhbl9jZmc7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWludCBkdXI7Ci0JY2hhciAqYnVmID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7Ci0JCXJlcyA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2J1ZjsKLQl9Ci0KLQlzY2FuX2NmZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsYnNfaW9jdGxfdXNlcl9zY2FuX2NmZyksIEdGUF9LRVJORUwpOwotCWlmICghc2Nhbl9jZmcpIHsKLQkJcmVzID0gLUVOT01FTTsKLQkJZ290byBvdXRfYnVmOwotCX0KLQlyZXMgPSBjb3VudDsKLQotCXNjYW5fY2ZnLT5ic3N0eXBlID0gTEJTX1NDQU5fQlNTX1RZUEVfQU5ZOwotCi0JZHVyID0gbGJzX3BhcnNlX2R1cihidWYsIGNvdW50LCBzY2FuX2NmZyk7Ci0JbGJzX3BhcnNlX2Jzc2lkKGJ1ZiwgY291bnQsIHNjYW5fY2ZnKTsKLQlzY2FuX2NmZy0+Y2xlYXJfYnNzaWQgPSBsYnNfcGFyc2VfY2xlYXIoYnVmLCBjb3VudCwgImNsZWFyX2Jzc2lkPSIpOwotCWxic19wYXJzZV9zc2lkKGJ1ZiwgY291bnQsIHNjYW5fY2ZnKTsKLQlzY2FuX2NmZy0+Y2xlYXJfc3NpZCA9IGxic19wYXJzZV9jbGVhcihidWYsIGNvdW50LCAiY2xlYXJfc3NpZD0iKTsKLQlsYnNfcGFyc2VfdHlwZShidWYsIGNvdW50LCBzY2FuX2NmZyk7Ci0KLQlsYnNfc2Nhbl9uZXR3b3Jrcyhwcml2LCBzY2FuX2NmZywgMSk7Ci0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHByaXYtPmNtZF9wZW5kaW5nLAotCQkJCSBwcml2LT5zdXJwcmlzZXJlbW92ZWQgfHwgIXByaXYtPmxhc3Rfc2Nhbm5lZF9jaGFubmVsKTsKLQotCWlmIChwcml2LT5zdXJwcmlzZXJlbW92ZWQpCi0JCWdvdG8gb3V0X3NjYW5fY2ZnOwotCi0JbWVtc2V0KCZ3cnF1LCAweDAwLCBzaXplb2YodW5pb24gaXdyZXFfZGF0YSkpOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwotCi0gb3V0X3NjYW5fY2ZnOgotCWtmcmVlKHNjYW5fY2ZnKTsKLSBvdXRfYnVmOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpOwotCXJldHVybiByZXM7Ci19Ci0KLQogLyoKICAqIFdoZW4gY2FsbGluZyBDTURfODAyXzExX1NVQlNDUklCRV9FVkVOVCB3aXRoIENNRF9BQ1RfR0VULCBtZSBtaWdodAogICogZ2V0IGEgYnVuY2ggb2YgdmVuZG9yLXNwZWNpZmljIFRMVnMgKGEuay5hLiBJRXMpIGJhY2sgZnJvbSB0aGUKQEAgLTg1Nyw4ICs2OTAsNiBAQAogCQkJCQl3cml0ZV9maWxlX2R1bW15KSwgfSwKIAl7ICJzbGVlcHBhcmFtcyIsIDA2NDQsIEZPUFMobGJzX3NsZWVwcGFyYW1zX3JlYWQsCiAJCQkJbGJzX3NsZWVwcGFyYW1zX3dyaXRlKSwgfSwKLQl7ICJleHRzY2FuIiwgMDYwMCwgRk9QUyhOVUxMLCBsYnNfZXh0c2NhbiksIH0sCi0JeyAic2V0dXNlcnNjYW4iLCAwNjAwLCBGT1BTKE5VTEwsIGxic19zZXR1c2Vyc2NhbiksIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZXZlbnRzX2ZpbGVzW10gPSB7CkBAIC05NDcsNyArNzc4LDcgQEAKIAl9CiAKICNpZmRlZiBQUk9DX0RFQlVHCi0JbGJzX2RlYnVnX2luaXQocHJpdiwgZGV2KTsKKwlsYnNfZGVidWdfaW5pdChwcml2KTsKICNlbmRpZgogZXhpdDoKIAlyZXR1cm47CkBAIC05OTMsNyArODI0LDYgQEAKIC8qIFRvIGRlYnVnIGFueSBtZW1iZXIgb2Ygc3RydWN0IGxic19wcml2YXRlLCBzaW1wbHkgYWRkIG9uZSBsaW5lIGhlcmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVidWdfZGF0YSBpdGVtc1tdID0gewotCXsiaW50Y291bnRlciIsIGl0ZW1fc2l6ZShpbnRjb3VudGVyKSwgaXRlbV9hZGRyKGludGNvdW50ZXIpfSwKIAl7InBzbW9kZSIsIGl0ZW1fc2l6ZShwc21vZGUpLCBpdGVtX2FkZHIocHNtb2RlKX0sCiAJeyJwc3N0YXRlIiwgaXRlbV9zaXplKHBzc3RhdGUpLCBpdGVtX2FkZHIocHNzdGF0ZSl9LAogfTsKQEAgLTExMjEsNyArOTUxLDcgQEAKICAqICBAcGFyYW0gZGV2ICAgICBwb2ludGVyIG5ldF9kZXZpY2UKICAqICBAcmV0dXJuIAkgICBOL0EKICAqLwotc3RhdGljIHZvaWQgbGJzX2RlYnVnX2luaXQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbGJzX2RlYnVnX2luaXQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKaW5kZXggYWFhY2Q5Yi4uYjY1MmZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaApAQCAtMTcsOSArMTcsOSBAQAogc3RydWN0IGNtZF9jdHJsX25vZGU7CiBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQ7CiAKLWludCBsYnNfc2V0X21hY19wYWNrZXRfZmlsdGVyKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Cit2b2lkIGxic19zZXRfbWFjX2NvbnRyb2woc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKIAotdm9pZCBsYnNfc2VuZF90eF9mZWVkYmFjayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwordm9pZCBsYnNfc2VuZF90eF9mZWVkYmFjayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiB0cnlfY291bnQpOwogCiBpbnQgbGJzX2ZyZWVfY21kX2J1ZmZlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogCkBAIC0zMCwxNyArMzAsMTYgQEAKIAogaW50IGxic19hbGxvY2F0ZV9jbWRfYnVmZmVyKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CiBpbnQgbGJzX2V4ZWN1dGVfbmV4dF9jb21tYW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Ci1pbnQgbGJzX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKLXZvaWQgbGJzX2ludGVycnVwdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOworaW50IGxic19wcm9jZXNzX2V2ZW50KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTMyIGV2ZW50KTsKK3ZvaWQgbGJzX3F1ZXVlX2V2ZW50KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTMyIGV2ZW50KTsKK3ZvaWQgbGJzX25vdGlmeV9jb21tYW5kX3Jlc3BvbnNlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggcmVzcF9pZHgpOworCiBpbnQgbGJzX3NldF9yYWRpb19jb250cm9sKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CiB1MzIgbGJzX2Z3X2luZGV4X3RvX2RhdGFfcmF0ZSh1OCBpbmRleCk7CiB1OCBsYnNfZGF0YV9yYXRlX3RvX2Z3X2luZGV4KHUzMiByYXRlKTsKLXZvaWQgbGJzX2dldF9md3ZlcnNpb24oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCWNoYXIgKmZ3dmVyc2lvbiwKLQlpbnQgbWF4bGVuKTsKIAogLyoqIFRoZSBwcm9jIGZzIGludGVyZmFjZSAqLwotaW50IGxic19wcm9jZXNzX3J4X2NvbW1hbmQoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKK2ludCBsYnNfcHJvY2Vzc19jb21tYW5kX3Jlc3BvbnNlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKmRhdGEsIHUzMiBsZW4pOwogdm9pZCBsYnNfY29tcGxldGVfY29tbWFuZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWQsCiAJCQkgIGludCByZXN1bHQpOwogaW50IGxic19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC00OSw3ICs0OCw3IEBACiBpbnQgbGJzX3Byb2Nlc3NfcnhlZF9wYWNrZXQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIAogdm9pZCBsYnNfcHNfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgd2FpdF9vcHRpb24pOwotdm9pZCBsYnNfcHNfY29uZmlybV9zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiBwc21vZGUpOwordm9pZCBsYnNfcHNfY29uZmlybV9zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogdm9pZCBsYnNfcHNfd2FrZXVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IHdhaXRfb3B0aW9uKTsKIAogc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqbGJzX2ZpbmRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWwoCkBAIC02MywxNCArNjIsMTcgQEAKIAogLyogbWFpbi5jICovCiBzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpsYnNfZ2V0X3JlZ2lvbl9jZnBfdGFibGUodTggcmVnaW9uLAotCXU4IGJhbmQsCiAJaW50ICpjZnBfbm8pOwogc3RydWN0IGxic19wcml2YXRlICpsYnNfYWRkX2NhcmQodm9pZCAqY2FyZCwgc3RydWN0IGRldmljZSAqZG1kZXYpOwogaW50IGxic19yZW1vdmVfY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwogaW50IGxic19zdGFydF9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CiBpbnQgbGJzX3N0b3BfY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpOwotaW50IGxic19yZXNldF9kZXZpY2Uoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKIHZvaWQgbGJzX2hvc3RfdG9fY2FyZF9kb25lKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7CiAKIGludCBsYnNfdXBkYXRlX2NoYW5uZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsKKworI2lmbmRlZiBDT05GSUdfSUVFRTgwMjExCitjb25zdCBjaGFyICplc2NhcGVfZXNzaWQoY29uc3QgY2hhciAqZXNzaWQsIHU4IGVzc2lkX2xlbik7CisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggMzA1M2NjMi4uZDM5NTIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaApAQCAtNTMsMTQgKzUzLDE0IEBACiAjZW5kaWYKIAogI2RlZmluZSBsYnNfZGViX2VudGVyKGdycCkgXAotICBMQlNfREVCX0xMKGdycCB8IExCU19ERUJfRU5URVIsICIgZW50ZXIiLCAiJXMoKTolZFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisgIExCU19ERUJfTEwoZ3JwIHwgTEJTX0RFQl9FTlRFUiwgIiBlbnRlciIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAjZGVmaW5lIGxic19kZWJfZW50ZXJfYXJncyhncnAsIGZtdCwgYXJncy4uLikgXAotICBMQlNfREVCX0xMKGdycCB8IExCU19ERUJfRU5URVIsICIgZW50ZXIiLCAiJXMoIiBmbXQgIik6JWRcbiIsIF9fRlVOQ1RJT05fXywgIyMgYXJncywgX19MSU5FX18pOworICBMQlNfREVCX0xMKGdycCB8IExCU19ERUJfRU5URVIsICIgZW50ZXIiLCAiJXMoIiBmbXQgIilcbiIsIF9fZnVuY19fLCAjIyBhcmdzKTsKICNkZWZpbmUgbGJzX2RlYl9sZWF2ZShncnApIFwKLSAgTEJTX0RFQl9MTChncnAgfCBMQlNfREVCX0xFQVZFLCAiIGxlYXZlIiwgIiVzKCk6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworICBMQlNfREVCX0xMKGdycCB8IExCU19ERUJfTEVBVkUsICIgbGVhdmUiLCAiJXMoKVxuIiwgX19mdW5jX18pOwogI2RlZmluZSBsYnNfZGViX2xlYXZlX2FyZ3MoZ3JwLCBmbXQsIGFyZ3MuLi4pIFwKLSAgTEJTX0RFQl9MTChncnAgfCBMQlNfREVCX0xFQVZFLCAiIGxlYXZlIiwgIiVzKCk6JWQsICIgZm10ICJcbiIsIFwKLSAgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNhcmdzKTsKKyAgTEJTX0RFQl9MTChncnAgfCBMQlNfREVCX0xFQVZFLCAiIGxlYXZlIiwgIiVzKCksICIgZm10ICJcbiIsIFwKKyAgX19mdW5jX18sICMjYXJncyk7CiAjZGVmaW5lIGxic19kZWJfbWFpbihmbXQsIGFyZ3MuLi4pICAgICAgTEJTX0RFQl9MTChMQlNfREVCX01BSU4sICIgbWFpbiIsIGZtdCwgIyNhcmdzKQogI2RlZmluZSBsYnNfZGViX25ldChmbXQsIGFyZ3MuLi4pICAgICAgIExCU19ERUJfTEwoTEJTX0RFQl9ORVQsICIgbmV0IiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfbWVzaChmbXQsIGFyZ3MuLi4pICAgICAgTEJTX0RFQl9MTChMQlNfREVCX01FU0gsICIgbWVzaCIsIGZtdCwgIyNhcmdzKQpAQCAtMTc3LDggKzE3Nyw2IEBACiAjZGVmaW5lIE1SVkRSVl9DTURfVVBMRF9SRFkJCTB4MDAwOAogI2RlZmluZSBNUlZEUlZfQ0FSREVWRU5UCQkweDAwMTAKIAotI2RlZmluZSBTQklfRVZFTlRfQ0FVU0VfU0hJRlQJCTMKLQogLyoqIFR4UEQgc3RhdHVzICovCiAKIC8qCVN0YXRpb24gZmlybXdhcmUgdXNlIFR4UEQgc3RhdHVzIGZpZWxkIHRvIHJlcG9ydCBmaW5hbCBUeCB0cmFuc21pdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAppbmRleCA1YTY5ZjJiLi4wZDllZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaApAQCAtMTAsOSArMTAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogCiAjaW5jbHVkZSAiZGVmcy5oIgotI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJob3N0Y21kLmgiCiAKIGV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgbGJzX2V0aHRvb2xfb3BzOwogCkBAIC0xMjgsMTAgKzEyOSw2IEBACiAJdTMyIGJicF9vZmZzZXQ7CiAJdTMyIHJmX29mZnNldDsKIAotCS8qKiBVcGxvYWQgbGVuZ3RoICovCi0JdTMyIHVwbGRfbGVuOwotCS8qIFVwbG9hZCBidWZmZXIgKi8KLQl1OCB1cGxkX2J1ZltMQlNfVVBMRF9TSVpFXTsKIAkvKiBEb3dubG9hZCBzZW50OgogCSAgIGJpdDAgMS8wPWRhdGFfc2VudC9kYXRhX3R4X2RvbmUsCiAJICAgYml0MSAxLzA9Y21kX3NlbnQvY21kX3R4X2RvbmUsCkBAIC0xNDMsMjcgKzE0MCwyNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKIAorCS8qKiBTY2FubmluZyAqLwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgYXNzb2Nfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3luY19jaGFubmVsOworCS8qIHJlbWVtYmVyIHdoaWNoIGNoYW5uZWwgd2FzIHNjYW5uZWQgbGFzdCwgIT0gMCBpZiBjdXJyZW50bHkgc2Nhbm5pbmcgKi8KKwlpbnQgc2Nhbl9jaGFubmVsOworCXU4IHNjYW5fc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCXU4IHNjYW5fc3NpZF9sZW47CiAKIAkvKiogSGFyZHdhcmUgYWNjZXNzICovCiAJaW50ICgqaHdfaG9zdF90b19jYXJkKSAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCB0eXBlLCB1OCAqcGF5bG9hZCwgdTE2IG5iKTsKLQlpbnQgKCpod19nZXRfaW50X3N0YXR1cykgKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKik7Ci0JaW50ICgqaHdfcmVhZF9ldmVudF9jYXVzZSkgKHN0cnVjdCBsYnNfcHJpdmF0ZSAqKTsKIAogCS8qIFdha2UgT24gTEFOICovCiAJdWludDMyX3Qgd29sX2NyaXRlcmlhOwogCXVpbnQ4X3Qgd29sX2dwaW87CiAJdWludDhfdCB3b2xfZ2FwOwogCi0JLyogd2FzIHN0cnVjdCBsYnNfYWRhcHRlciBmcm9tIGhlcmUuLi4gKi8KLQogCS8qKiBXbGFuIGFkYXB0ZXIgZGF0YSBzdHJ1Y3R1cmUqLwogCS8qKiBTVEFUVVMgdmFyaWFibGVzICovCiAJdTMyIGZ3cmVsZWFzZTsKIAl1MzIgZndjYXBpbmZvOwotCS8qIHByb3RlY3RlZCB3aXRoIGJpZyBsb2NrICovCiAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIApAQCAtMTc1LDcgKzE3Miw2IEBACiAKIAkvKiogY29tbWFuZC1yZWxhdGVkIHZhcmlhYmxlcyAqLwogCXUxNiBzZXFudW07Ci0JLyogcHJvdGVjdGVkIGJ5IGJpZyBsb2NrICovCiAKIAlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX2FycmF5OwogCS8qKiBDdXJyZW50IGNvbW1hbmQgKi8KQEAgLTE4OCwxMiArMTg0LDE3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBjbWRwZW5kaW5ncTsKIAogCXdhaXRfcXVldWVfaGVhZF90IGNtZF9wZW5kaW5nOwotCS8qIGNvbW1hbmQgcmVsYXRlZCB2YXJpYWJsZXMgcHJvdGVjdGVkIGJ5IHByaXYtPmRyaXZlcl9sb2NrICovCiAKLQkvKiogQXN5bmMgYW5kIFN5bmMgRXZlbnQgdmFyaWFibGVzICovCi0JdTMyIGludGNvdW50ZXI7Ci0JdTMyIGV2ZW50Y2F1c2U7Ci0JdTggbm9kZW5hbWVbMTZdOwkvKiBuaWNrbmFtZSAqLworCS8qIENvbW1hbmQgcmVzcG9uc2VzIHNlbnQgZnJvbSB0aGUgaGFyZHdhcmUgdG8gdGhlIGRyaXZlciAqLworCXU4IHJlc3BfaWR4OworCXU4IHJlc3BfYnVmWzJdW0xCU19VUExEX1NJWkVdOworCXUzMiByZXNwX2xlblsyXTsKKworCS8qIEV2ZW50cyBzZW50IGZyb20gaGFyZHdhcmUgdG8gZHJpdmVyICovCisJc3RydWN0IGtmaWZvICpldmVudF9maWZvOworCisJLyogbmlja25hbWUgKi8KKwl1OCBub2RlbmFtZVsxNl07CiAKIAkvKiogc3BpbiBsb2NrcyAqLwogCXNwaW5sb2NrX3QgZHJpdmVyX2xvY2s7CkBAIC0yMDMsOCArMjA0LDYgQEAKIAlpbnQgbnJfcmV0cmllczsKIAlpbnQgY21kX3RpbWVkX291dDsKIAotCXU4IGhpc3JlZ2NweTsKLQogCS8qKiBjdXJyZW50IHNzaWQvYnNzaWQgcmVsYXRlZCBwYXJhbWV0ZXJzKi8KIAlzdHJ1Y3QgY3VycmVudF9ic3NfcGFyYW1zIGN1cmJzc3BhcmFtczsKIApAQCAtMjQ3LDcgKzI0Niw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnR0eHNrYjsKIAogCS8qKiBOSUMgT3BlcmF0aW9uIGNoYXJhY3RlcmlzdGljcyAqLwotCXUxNiBjdXJyZW50cGFja2V0ZmlsdGVyOworCXUxNiBtYWNfY29udHJvbDsKIAl1MzIgY29ubmVjdF9zdGF0dXM7CiAJdTMyIG1lc2hfY29ubmVjdF9zdGF0dXM7CiAJdTE2IHJlZ2lvbmNvZGU7CkBAIC0yNjIsOSArMjYxLDYgQEAKIAljaGFyIHBzX3N1cHBvcnRlZDsKIAl1OCBuZWVkdG93YWtldXA7CiAKLQlzdHJ1Y3QgUFNfQ01EX0NvbmZpcm1TbGVlcCBsYnNfcHNfY29uZmlybV9zbGVlcDsKLQlzdHJ1Y3QgY21kX2hlYWRlciBsYnNfcHNfY29uZmlybV93YWtlOwotCiAJc3RydWN0IGFzc29jX3JlcXVlc3QgKiBwZW5kaW5nX2Fzc29jX3JlcTsKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGluX3Byb2dyZXNzX2Fzc29jX3JlcTsKIApAQCAtMzE1LDE2ICszMTEsNTIgQEAKIAl1MzIgZW5hYmxlMTFkOwogCiAJLyoqCU1JU0NFTExBTkVPVVMgKi8KLQl1OCAqcHJkZWVwcm9tOwogCXN0cnVjdCBsYnNfb2Zmc2V0X3ZhbHVlIG9mZnNldHZhbHVlOwogCi0Jc3RydWN0IGNtZF9kc184MDJfMTFfZ2V0X2xvZyBsb2dtc2c7Ci0KIAl1MzIgbW9uaXRvcm1vZGU7Ci0JaW50IGxhc3Rfc2Nhbm5lZF9jaGFubmVsOwogCXU4IGZ3X3JlYWR5OwogfTsKIAorZXh0ZXJuIHN0cnVjdCBjbWRfY29uZmlybV9zbGVlcCBjb25maXJtX3NsZWVwOworCisvKioKKyAqICBAYnJpZWYgU3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIGVhY2ggYmVhY29uL3Byb2JlIHJlc3BvbnNlCisgKi8KK3N0cnVjdCBic3NfZGVzY3JpcHRvciB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCXU4IHNzaWRfbGVuOworCisJdTE2IGNhcGFiaWxpdHk7CisJdTMyIHJzc2k7CisJdTMyIGNoYW5uZWw7CisJdTE2IGJlYWNvbnBlcmlvZDsKKwl1MzIgYXRpbXdpbmRvdzsKKworCS8qIElXX01PREVfQVVUTywgSVdfTU9ERV9BREhPQywgSVdfTU9ERV9JTkZSQSAqLworCXU4IG1vZGU7CisKKwkvKiB6ZXJvLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3VwcG9ydGVkIGRhdGEgcmF0ZXMgKi8KKwl1OCByYXRlc1tNQVhfUkFURVMgKyAxXTsKKworCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOworCisJdW5pb24gaWVlZXR5cGVzX3BoeXBhcmFtc2V0IHBoeXBhcmFtc2V0OworCXVuaW9uIElFRUV0eXBlc19zc3BhcmFtc2V0IHNzcGFyYW1zZXQ7CisKKwlzdHJ1Y3QgaWVlZXR5cGVzX2NvdW50cnlpbmZvZnVsbHNldCBjb3VudHJ5aW5mbzsKKworCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07CisJc2l6ZV90IHdwYV9pZV9sZW47CisJdTggcnNuX2llW01BWF9XUEFfSUVfTEVOXTsKKwlzaXplX3QgcnNuX2llX2xlbjsKKworCXU4IG1lc2g7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCiAvKiogQXNzb2NpYXRpb24gcmVxdWVzdAogICoKICAqIEVuY2Fwc3VsYXRlcyBhbGwgdGhlIG9wdGlvbnMgdGhhdCBkZXNjcmliZSBhIHNwZWNpZmljIGFzc29jYXRpb24gcmVxdWVzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCmluZGV4IDIxZTZmOTguLmRjZmRiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSAiZGVjbC5oIgogI2luY2x1ZGUgImRlZnMuaCIKICNpbmNsdWRlICJkZXYuaCIKLSNpbmNsdWRlICJqb2luLmgiCiAjaW5jbHVkZSAid2V4dC5oIgogI2luY2x1ZGUgImNtZC5oIgogCkBAIC0yNSwxMyArMjQsMTQgQEAKIAkJCQkJIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiB7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gKHN0cnVjdCBsYnNfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0JY2hhciBmd3ZlclszMl07CiAKLQlsYnNfZ2V0X2Z3dmVyc2lvbihwcml2LCBmd3Zlciwgc2l6ZW9mKGZ3dmVyKSAtIDEpOwotCisJc25wcmludGYoaW5mby0+ZndfdmVyc2lvbiwgMzIsICIldS4ldS4ldS5wJXUiLAorCQlwcml2LT5md3JlbGVhc2UgPj4gMjQgJiAweGZmLAorCQlwcml2LT5md3JlbGVhc2UgPj4gMTYgJiAweGZmLAorCQlwcml2LT5md3JlbGVhc2UgPj4gIDggJiAweGZmLAorCQlwcml2LT5md3JlbGVhc2UgICAgICAgJiAweGZmKTsKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCAibGliZXJ0YXMiKTsKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgbGJzX2RyaXZlcl92ZXJzaW9uKTsKLQlzdHJjcHkoaW5mby0+ZndfdmVyc2lvbiwgZnd2ZXIpOwogfQogCiAvKiBBbGwgODM4OCBwYXJ0cyBoYXZlIDE2S2lCIEVFUFJPTSBzaXplIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcuCkBAIC00OCw2MSArNDgsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKiBieXRlcykKIHsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IGxic19wcml2YXRlICopIGRldi0+cHJpdjsKLQlzdHJ1Y3QgbGJzX2lvY3RsX3JlZ3Jkd3IgcmVnY3RybDsKLQljaGFyICpwdHI7CisJc3RydWN0IGNtZF9kc184MDJfMTFfZWVwcm9tX2FjY2VzcyBjbWQ7CiAJaW50IHJldDsKIAotCXJlZ2N0cmwuYWN0aW9uID0gMDsKLQlyZWdjdHJsLm9mZnNldCA9IGVlcHJvbS0+b2Zmc2V0OwotCXJlZ2N0cmwuTk9CID0gZWVwcm9tLT5sZW47CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0VUSFRPT0wpOwogCi0JaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBMQlNfRUVQUk9NX0xFTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLS8vICAgICAgbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcHJpdi0+cHJkZWVwcm9tID0ga21hbGxvYyhlZXByb20tPmxlbitzaXplb2YocmVnY3RybCksIEdGUF9LRVJORUwpOwotCWlmICghcHJpdi0+cHJkZWVwcm9tKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkocHJpdi0+cHJkZWVwcm9tLCAmcmVnY3RybCwgc2l6ZW9mKHJlZ2N0cmwpKTsKLQotCS8qICsxNCBpcyBmb3IgYWN0aW9uLCBvZmZzZXQsIGFuZCBOT0IgaW4KLQkgKiByZXNwb25zZSAqLwotCWxic19kZWJfZXRodG9vbCgiYWN0aW9uOiVkIG9mZnNldDogJXggTk9COiAlMDJ4XG4iLAotCSAgICAgICByZWdjdHJsLmFjdGlvbiwgcmVnY3RybC5vZmZzZXQsIHJlZ2N0cmwuTk9CKTsKLQotCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkgICAgQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTLAotCQkJCSAgICByZWdjdHJsLmFjdGlvbiwKLQkJCQkgICAgQ01EX09QVElPTl9XQUlURk9SUlNQLCAwLAotCQkJCSAgICAmcmVnY3RybCk7Ci0KLQlpZiAocmV0KSB7Ci0JCWlmIChwcml2LT5wcmRlZXByb20pCi0JCQlrZnJlZShwcml2LT5wcmRlZXByb20pOwotCQlnb3RvIGRvbmU7CisJaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBMQlNfRUVQUk9NX0xFTiB8fAorCSAgICBlZXByb20tPmxlbiA+IExCU19FRVBST01fUkVBRF9MRU4pIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCi0JbWRlbGF5KDEwKTsKKwljbWQuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfZWVwcm9tX2FjY2VzcykgLQorCQlMQlNfRUVQUk9NX1JFQURfTEVOICsgZWVwcm9tLT5sZW4pOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX0dFVCk7CisJY21kLm9mZnNldCA9IGNwdV90b19sZTE2KGVlcHJvbS0+b2Zmc2V0KTsKKwljbWQubGVuICAgID0gY3B1X3RvX2xlMTYoZWVwcm9tLT5sZW4pOworCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0VFUFJPTV9BQ0NFU1MsICZjbWQpOworCWlmICghcmV0KQorCQltZW1jcHkoYnl0ZXMsIGNtZC52YWx1ZSwgZWVwcm9tLT5sZW4pOwogCi0JcHRyID0gKGNoYXIgKilwcml2LT5wcmRlZXByb207Ci0KLQkvKiBza2lwIHRoZSBjb21tYW5kIGhlYWRlciwgYnV0IGluY2x1ZGUgdGhlICJ2YWx1ZSIgdTMyIHZhcmlhYmxlICovCi0JcHRyID0gcHRyICsgc2l6ZW9mKHN0cnVjdCBsYnNfaW9jdGxfcmVncmR3cikgLSA0OwotCi0JLyoKLQkgKiBSZXR1cm4gdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSB1c2VyCi0JICovCi0JbWVtY3B5KGJ5dGVzLCBwdHIsIGVlcHJvbS0+bGVuKTsKLQotCWlmIChwcml2LT5wcmRlZXByb20pCi0JCWtmcmVlKHByaXYtPnByZGVlcHJvbSk7Ci0vLwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldCA9IDA7Ci0KLWRvbmU6Ci0JbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfRVRIVE9PTCwgInJldCAlZCIsIHJldCk7CitvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfRVRIVE9PTCwgInJldCAlZCIsIHJldCk7CiAgICAgICAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAppbmRleCAxYWEwNDA3Li4zOTE1YzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCkBAIC0zMyw3ICszMyw2IEBACiAjZGVmaW5lIENNRF9SRVRfODAyXzExX0FTU09DSUFURQkJMHg4MDEyCiAKIC8qIENvbW1hbmQgY29kZXMgKi8KLSNkZWZpbmUgQ01EX0NPREVfRE5MRAkJCQkweDAwMDIKICNkZWZpbmUgQ01EX0dFVF9IV19TUEVDCQkJCTB4MDAwMwogI2RlZmluZQlDTURfRUVQUk9NX1VQREFURQkJCTB4MDAwNAogI2RlZmluZSBDTURfODAyXzExX1JFU0VUCQkJMHgwMDA1CkBAIC02OCw4ICs2Nyw2IEBACiAjZGVmaW5lIENNRF84MDJfMTFfQURfSE9DX0pPSU4JCQkweDAwMmMKICNkZWZpbmUgQ01EXzgwMl8xMV9RVUVSWV9US0lQX1JFUExZX0NOVFJTCTB4MDAyZQogI2RlZmluZSBDTURfODAyXzExX0VOQUJMRV9SU04JCQkweDAwMmYKLSNkZWZpbmUgQ01EXzgwMl8xMV9QQUlSV0lTRV9UU0MJCQkweDAwMzYKLSNkZWZpbmUgQ01EXzgwMl8xMV9HUk9VUF9UU0MJCQkweDAwMzcKICNkZWZpbmUgQ01EXzgwMl8xMV9TRVRfQUZDCQkJMHgwMDNjCiAjZGVmaW5lIENNRF84MDJfMTFfR0VUX0FGQwkJCTB4MDAzZAogI2RlZmluZSBDTURfODAyXzExX0FEX0hPQ19TVE9QCQkJMHgwMDQwCkBAIC04Nyw3ICs4NCw2IEBACiAjZGVmaW5lIENNRF84MDJfMTFfSU5BQ1RJVklUWV9USU1FT1VUCQkweDAwNjcKICNkZWZpbmUgQ01EXzgwMl8xMV9TTEVFUF9QRVJJT0QJCQkweDAwNjgKICNkZWZpbmUgQ01EXzgwMl8xMV9UUENfQ0ZHCQkJMHgwMDcyCi0jZGVmaW5lIENNRF84MDJfMTFfUFdSX0NGRwkJCTB4MDA3MwogI2RlZmluZSBDTURfODAyXzExX0ZXX1dBS0VfTUVUSE9ECQkweDAwNzQKICNkZWZpbmUgQ01EXzgwMl8xMV9TVUJTQ1JJQkVfRVZFTlQJCTB4MDA3NQogI2RlZmluZSBDTURfODAyXzExX1JBVEVfQURBUFRfUkFURVNFVAkJMHgwMDc2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKaW5kZXggZDM1YjAxNS4uZjI5YmM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaApAQCAtMTc0LDkgKzE3NCwxMSBAQAogICogRGVmaW5lIGRhdGEgc3RydWN0dXJlIGZvciBDTURfODAyXzExX1NDQU4KICAqLwogc3RydWN0IGNtZF9kc184MDJfMTFfc2NhbiB7Ci0JdTggYnNzdHlwZTsKLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JdTggdGx2YnVmZmVyWzFdOworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKKworCXVpbnQ4X3QgYnNzdHlwZTsKKwl1aW50OF90IGJzc2lkW0VUSF9BTEVOXTsKKwl1aW50OF90IHRsdmJ1ZmZlclswXTsKICNpZiAwCiAJbXJ2bGlldHlwZXNfc3NpZHBhcmFtc2V0X3Qgc3NpZFBhcmFtU2V0OwogCW1ydmxpZXR5cGVzX2NoYW5saXN0cGFyYW1zZXRfdCBDaGFuTGlzdFBhcmFtU2V0OwpAQCAtMTg1LDEyICsxODcsMTYgQEAKIH07CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX3NjYW5fcnNwIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisKIAlfX2xlMTYgYnNzZGVzY3JpcHRzaXplOwotCXU4IG5yX3NldHM7Ci0JdTggYnNzZGVzY19hbmRfdGx2YnVmZmVyWzFdOworCXVpbnQ4X3QgbnJfc2V0czsKKwl1aW50OF90IGJzc2Rlc2NfYW5kX3RsdmJ1ZmZlclswXTsKIH07CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX2dldF9sb2cgeworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKKwogCV9fbGUzMiBtY2FzdHR4ZnJhbWU7CiAJX19sZTMyIGZhaWxlZDsKIAlfX2xlMzIgcmV0cnk7CkBAIC0yMDcsOCArMjEzLDkgQEAKIH07CiAKIHN0cnVjdCBjbWRfZHNfbWFjX2NvbnRyb2wgeworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKIAlfX2xlMTYgYWN0aW9uOwotCV9fbGUxNiByZXNlcnZlZDsKKwl1MTYgcmVzZXJ2ZWQ7CiB9OwogCiBzdHJ1Y3QgY21kX2RzX21hY19tdWx0aWNhc3RfYWRyIHsKQEAgLTQyMCw2ICs0MjcsOCBAQAogfTsKIAogc3RydWN0IGNtZF9kc184MDJfMTFfbWFjX2FkZHJlc3MgeworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKKwogCV9fbGUxNiBhY3Rpb247CiAJdTggbWFjYWRkW0VUSF9BTEVOXTsKIH07CkBAIC00NzEsMTQgKzQ4MCwxMSBAQAogCV9fbGUxNiBsb2NhbGxpc3RlbmludGVydmFsOwogfTsKIAotc3RydWN0IFBTX0NNRF9Db25maXJtU2xlZXAgewotCV9fbGUxNiBjb21tYW5kOwotCV9fbGUxNiBzaXplOwotCV9fbGUxNiBzZXFudW07Ci0JX19sZTE2IHJlc3VsdDsKK3N0cnVjdCBjbWRfY29uZmlybV9zbGVlcCB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCiAJX19sZTE2IGFjdGlvbjsKLQlfX2xlMTYgcmVzZXJ2ZWQxOworCV9fbGUxNiBudWxscGt0aW50ZXJ2YWw7CiAJX19sZTE2IG11bHRpcGxlZHRpbTsKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiAJX19sZTE2IGxvY2FsbGlzdGVuaW50ZXJ2YWw7CkBAIC01NzIsMTcgKzU3OCwyMCBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBjbWRfZHNfODAyXzExX2tleV9tYXRlcmlhbCB7CisJc3RydWN0IGNtZF9oZWFkZXIgaGRyOworCiAJX19sZTE2IGFjdGlvbjsKIAlzdHJ1Y3QgTXJ2bElFdHlwZV9rZXlQYXJhbVNldCBrZXlQYXJhbVNldFsyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV9lZXByb21fYWNjZXNzIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CiAJX19sZTE2IGFjdGlvbjsKLQotCS8qIG11bHRpcGxlIDQgKi8KIAlfX2xlMTYgb2Zmc2V0OwotCV9fbGUxNiBieXRlY291bnQ7Ci0JdTggdmFsdWU7CisJX19sZTE2IGxlbjsKKwkvKiBmaXJtd2FyZSBzYXlzIGl0IHJldHVybnMgYSBtYXhpbXVtIG9mIDIwIGJ5dGVzICovCisjZGVmaW5lIExCU19FRVBST01fUkVBRF9MRU4gMjAKKwl1OCB2YWx1ZVtMQlNfRUVQUk9NX1JFQURfTEVOXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgY21kX2RzXzgwMl8xMV90cGNfY2ZnIHsKQEAgLTYwMCwxNCArNjA5LDYgQEAKIAl1OCBkYXRhWzI1Nl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IGNtZF9kc184MDJfMTFfcHdyX2NmZyB7Ci0JX19sZTE2IGFjdGlvbjsKLQl1OCBlbmFibGU7Ci0JczggUEFfUDA7Ci0JczggUEFfUDE7Ci0JczggUEFfUDI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGNtZF9kc184MDJfMTFfYWZjIHsKIAlfX2xlMTYgYWZjX2F1dG87CiAJdW5pb24gewpAQCAtNjg5LDE1ICs2OTAsMTEgQEAKIAkvKiBjb21tYW5kIEJvZHkgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCBjbWRfZHNfODAyXzExX3BzX21vZGUgcHNtb2RlOwotCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zY2FuIHNjYW47Ci0JCXN0cnVjdCBjbWRfZHNfODAyXzExX3NjYW5fcnNwIHNjYW5yZXNwOwotCQlzdHJ1Y3QgY21kX2RzX21hY19jb250cm9sIG1hY2N0cmw7CiAJCXN0cnVjdCBjbWRfZHNfODAyXzExX2Fzc29jaWF0ZSBhc3NvY2lhdGU7CiAJCXN0cnVjdCBjbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlIGRlYXV0aDsKIAkJc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX3N0YXJ0IGFkczsKIAkJc3RydWN0IGNtZF9kc184MDJfMTFfcmVzZXQgcmVzZXQ7CiAJCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19yZXN1bHQgcmVzdWx0OwotCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9nZXRfbG9nIGdsb2c7CiAJCXN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSBhdXRoOwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9nZXRfc3RhdCBnc3RhdDsKIAkJc3RydWN0IGNtZF9kc184MDJfM19nZXRfc3RhdCBnc3RhdF84MDIzOwpAQCAtNzExLDE4ICs3MDgsMTQgQEAKIAkJc3RydWN0IGNtZF9kc184MDJfMTFfcnNzaSByc3NpOwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9yc3NpX3JzcCByc3NpcnNwOwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9kaXNhc3NvY2lhdGUgZGFzc29jaWF0ZTsKLQkJc3RydWN0IGNtZF9kc184MDJfMTFfbWFjX2FkZHJlc3MgbWFjYWRkOwotCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwga2V5bWF0ZXJpYWw7CiAJCXN0cnVjdCBjbWRfZHNfbWFjX3JlZ19hY2Nlc3MgbWFjcmVnOwogCQlzdHJ1Y3QgY21kX2RzX2JicF9yZWdfYWNjZXNzIGJicHJlZzsKIAkJc3RydWN0IGNtZF9kc19yZl9yZWdfYWNjZXNzIHJmcmVnOwotCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9lZXByb21fYWNjZXNzIHJkZWVwcm9tOwogCiAJCXN0cnVjdCBjbWRfZHNfODAyXzExZF9kb21haW5faW5mbyBkb21haW5pbmZvOwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMWRfZG9tYWluX2luZm8gZG9tYWluaW5mb3Jlc3A7CiAKIAkJc3RydWN0IGNtZF9kc184MDJfMTFfdHBjX2NmZyB0cGNjZmc7Ci0JCXN0cnVjdCBjbWRfZHNfODAyXzExX3B3cl9jZmcgcHdyY2ZnOwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZmMgYWZjOwogCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9sZWRfY3RybCBsZWRncGlvOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCA1YTljYWRiLi41NDI4MGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTgzLDE0ICs4MywxNCBAQAogewogCXVuc2lnbmVkIGludCB2YWwgPSBpb3JlYWQ4KGNhcmQtPmlvYmFzZSArIHJlZyk7CiAJaWYgKGRlYnVnX291dHB1dCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiIyNpbmIgJTA4eDwlMDJ4XG4iLCByZWcsIHZhbCk7CisJCXByaW50ayhLRVJOX0lORk8gImluYiAlMDh4PCUwMnhcbiIsIHJlZywgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaWZfY3NfcmVhZDE2KHN0cnVjdCBpZl9jc19jYXJkICpjYXJkLCB1aW50IHJlZykKIHsKIAl1bnNpZ25lZCBpbnQgdmFsID0gaW9yZWFkMTYoY2FyZC0+aW9iYXNlICsgcmVnKTsKIAlpZiAoZGVidWdfb3V0cHV0KQotCQlwcmludGsoS0VSTl9JTkZPICIjI2ludyAlMDh4PCUwNHhcbiIsIHJlZywgdmFsKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaW53ICUwOHg8JTA0eFxuIiwgcmVnLCB2YWwpOwogCXJldHVybiB2YWw7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWZfY3NfcmVhZDE2X3JlcCgKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJaWYgKGRlYnVnX291dHB1dCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiIyNpbnN3ICUwOHg8KDB4JWx4IHdvcmRzKVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaW5zdyAlMDh4PCgweCVseCB3b3JkcylcbiIsCiAJCQlyZWcsIGNvdW50KTsKIAlpb3JlYWQxNl9yZXAoY2FyZC0+aW9iYXNlICsgcmVnLCBidWYsIGNvdW50KTsKIH0KQEAgLTEwOCwxNCArMTA4LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWZfY3Nfd3JpdGU4KHN0cnVjdCBpZl9jc19jYXJkICpjYXJkLCB1aW50IHJlZywgdTggdmFsKQogewogCWlmIChkZWJ1Z19vdXRwdXQpCi0JCXByaW50ayhLRVJOX0lORk8gIiMjb3V0YiAlMDh4PiUwMnhcbiIsIHJlZywgdmFsKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAib3V0YiAlMDh4PiUwMnhcbiIsIHJlZywgdmFsKTsKIAlpb3dyaXRlOCh2YWwsIGNhcmQtPmlvYmFzZSArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZl9jc193cml0ZTE2KHN0cnVjdCBpZl9jc19jYXJkICpjYXJkLCB1aW50IHJlZywgdTE2IHZhbCkKIHsKIAlpZiAoZGVidWdfb3V0cHV0KQotCQlwcmludGsoS0VSTl9JTkZPICIjI291dHcgJTA4eD4lMDR4XG4iLCByZWcsIHZhbCk7CisJCXByaW50ayhLRVJOX0lORk8gIm91dHcgJTA4eD4lMDR4XG4iLCByZWcsIHZhbCk7CiAJaW93cml0ZTE2KHZhbCwgY2FyZC0+aW9iYXNlICsgcmVnKTsKIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBACiAJdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlpZiAoZGVidWdfb3V0cHV0KQotCQlwcmludGsoS0VSTl9JTkZPICIjI291dHN3ICUwOHg+KDB4JWx4IHdvcmRzKVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAib3V0c3cgJTA4eD4oMHglbHggd29yZHMpXG4iLAogCQkJcmVnLCBjb3VudCk7CiAJaW93cml0ZTE2X3JlcChjYXJkLT5pb2Jhc2UgKyByZWcsIGJ1ZiwgY291bnQpOwogfQpAQCAtMTk5LDE3ICsxOTksNiBAQAogI2RlZmluZSBJRl9DU19DX1NfQ0FSREVWRU5UCQkweDAwMTAKICNkZWZpbmUgSUZfQ1NfQ19TX01BU0sJCQkweDAwMWYKICNkZWZpbmUgSUZfQ1NfQ19TX1NUQVRVU19NQVNLCQkweDdmMDAKLS8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBNUlZEUlZfIG9uZXMgKi8KLQotI2lmIE1SVkRSVl9DTURfRE5MRF9SRFkgIT0gSUZfQ1NfQ19TX0NNRF9ETkxEX1JEWQotI2Vycm9yIE1SVkRSVl9DTURfRE5MRF9SRFkgYW5kIElGX0NTX0NfU19DTURfRE5MRF9SRFkgbm90IGluIHN5bmMKLSNlbmRpZgotI2lmIE1SVkRSVl9DTURfVVBMRF9SRFkgIT0gSUZfQ1NfQ19TX0NNRF9VUExEX1JEWQotI2Vycm9yIE1SVkRSVl9DTURfVVBMRF9SRFkgYW5kIElGX0NTX0NfU19DTURfVVBMRF9SRFkgbm90IGluIHN5bmMKLSNlbmRpZgotI2lmIE1SVkRSVl9DQVJERVZFTlQgIT0gSUZfQ1NfQ19TX0NBUkRFVkVOVAotI2Vycm9yIE1SVkRSVl9DQVJERVZFTlQgYW5kIElGX0NTX0NfU19DQVJERVZFTlQgbm90IGluIHN5bmMKLSNlbmRpZgogCiAjZGVmaW5lIElGX0NTX0NfSU5UX0NBVVNFCQkweDAwMDAwMDIyCiAjZGVmaW5lCUlGX0NTX0NfSUNfTUFTSwkJCTB4MDAxZgpAQCAtMjI2LDU1ICsyMTUsNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVycnVwdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGlmX2NzX2VuYWJsZV9pbnRzKHN0cnVjdCBpZl9jc19jYXJkICpjYXJkKQotewotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DUyk7Ci0JaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IX0lOVF9NQVNLLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlmX2NzX2Rpc2FibGVfaW50cyhzdHJ1Y3QgaWZfY3NfY2FyZCAqY2FyZCkKLXsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOwotCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSF9JTlRfTUFTSywgSUZfQ1NfSF9JTV9NQVNLKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGlmX2NzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpZl9jc19jYXJkICpjYXJkID0gZGF0YTsKLQl1MTYgaW50X2NhdXNlOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NTKTsKLQotCWludF9jYXVzZSA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DX0lOVF9DQVVTRSk7Ci0JaWYgKGludF9jYXVzZSA9PSAweDApIHsKLQkJLyogTm90IGZvciB1cyAqLwotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQl9IGVsc2UgaWYgKGludF9jYXVzZSA9PSAweGZmZmYpIHsKLQkJLyogUmVhZCBpbiBqdW5rLCB0aGUgY2FyZCBoYXMgcHJvYmFibHkgYmVlbiByZW1vdmVkICovCi0JCWNhcmQtPnByaXYtPnN1cnByaXNlcmVtb3ZlZCA9IDE7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9IGVsc2UgewotCQlpZiAoaW50X2NhdXNlICYgSUZfQ1NfSF9JQ19UWF9PVkVSKQotCQkJbGJzX2hvc3RfdG9fY2FyZF9kb25lKGNhcmQtPnByaXYpOwotCi0JCS8qIGNsZWFyIGludGVycnVwdCAqLwotCQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0NfSU5UX0NBVVNFLCBpbnRfY2F1c2UgJiBJRl9DU19DX0lDX01BU0spOwotCX0KLQlzcGluX2xvY2soJmNhcmQtPnByaXYtPmRyaXZlcl9sb2NrKTsKLQlsYnNfaW50ZXJydXB0KGNhcmQtPnByaXYpOwotCXNwaW5fdW5sb2NrKCZjYXJkLT5wcml2LT5kcml2ZXJfbG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEkvTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMzUxLDYgKzI5MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaWZfY3NfcmVjZWl2ZV9jbWRyZXMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCAqZGF0YSwgdTMyICpsZW4pCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gLTE7CiAJdTE2IHZhbDsKIApAQCAtMzc4LDYgKzMxOSwxMiBAQAogCSAqIGJ5dGVzICovCiAJKmxlbiAtPSA4OwogCXJldCA9IDA7CisKKwkvKiBDbGVhciB0aGlzIGZsYWcgYWdhaW4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwlwcml2LT5kbmxkX3NlbnQgPSBETkxEX1JFU19SRUNFSVZFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCiBvdXQ6CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ1MsICJyZXQgJWQsIGxlbiAlZCIsIHJldCwgKmxlbik7CiAJcmV0dXJuIHJldDsKQEAgLTM5NiwxMSArMzQzLDkgQEAKIAlpZiAobGVuID09IDAgfHwgbGVuID4gTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpIHsKIAkJbGJzX3ByX2VycigiY2FyZCBkYXRhIGJ1ZmZlciBoYXMgaW52YWxpZCAjIG9mIGJ5dGVzICglZClcbiIsIGxlbik7CiAJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiIyNIUyAlczolZCBUT0RPXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKIAkJZ290byBkYXRfZXJyOwogCX0KIAotCS8vVE9ETzogc2tiID0gZGV2X2FsbG9jX3NrYihsZW4rRVRIX0ZSQU1FX0xFTitNUlZEUlZfU05BUF9IRUFERVJfTEVOK0VYVFJBX0xFTik7CiAJc2tiID0gZGV2X2FsbG9jX3NrYihNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSArIDIpOwogCWlmICghc2tiKQogCQlnb3RvIG91dDsKQEAgLTQyNSw2ICszNzAsOTYgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZl9jc19lbmFibGVfaW50cyhzdHJ1Y3QgaWZfY3NfY2FyZCAqY2FyZCkKK3sKKwlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOworCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfSF9JTlRfTUFTSywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZl9jc19kaXNhYmxlX2ludHMoc3RydWN0IGlmX2NzX2NhcmQgKmNhcmQpCit7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NTKTsKKwlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hfSU5UX01BU0ssIElGX0NTX0hfSU1fTUFTSyk7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IGlmX2NzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpZl9jc19jYXJkICpjYXJkID0gZGF0YTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCXUxNiBjYXVzZTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DUyk7CisKKwljYXVzZSA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DX0lOVF9DQVVTRSk7CisJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19DX0lOVF9DQVVTRSwgY2F1c2UgJiBJRl9DU19DX0lDX01BU0spOworCisJbGJzX2RlYl9jcygiY2F1c2UgMHglMDR4XG4iLCBjYXVzZSk7CisJaWYgKGNhdXNlID09IDApIHsKKwkJLyogTm90IGZvciB1cyAqLworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKGNhdXNlID09IDB4ZmZmZikgeworCQkvKiBSZWFkIGluIGp1bmssIHRoZSBjYXJkIGhhcyBwcm9iYWJseSBiZWVuIHJlbW92ZWQgKi8KKwkJY2FyZC0+cHJpdi0+c3VycHJpc2VyZW1vdmVkID0gMTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8qIFRPRE86IEknbSBub3Qgc3VyZSB3aGF0IHRoZSBiZXN0IG9yZGVyaW5nIGlzICovCisKKwljYXVzZSA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19DX1NUQVRVUykgJiBJRl9DU19DX1NfTUFTSzsKKworCWlmIChjYXVzZSAmIElGX0NTX0NfU19SWF9VUExEX1JEWSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlsYnNfZGViX2NzKCJyeCBwYWNrZXRcbiIpOworCQlza2IgPSBpZl9jc19yZWNlaXZlX2RhdGEocHJpdik7CisJCWlmIChza2IpCisJCQlsYnNfcHJvY2Vzc19yeGVkX3BhY2tldChwcml2LCBza2IpOworCX0KKworCWlmIChjYXVzZSAmIElGX0NTX0hfSUNfVFhfT1ZFUikgeworCQlsYnNfZGViX2NzKCJ0eCBvdmVyXG4iKTsKKwkJbGJzX2hvc3RfdG9fY2FyZF9kb25lKHByaXYpOworCX0KKworCWlmIChjYXVzZSAmIElGX0NTX0NfU19DTURfVVBMRF9SRFkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdTggaTsKKworCQlsYnNfZGViX2NzKCJjbWQgdXBsb2FkIHJlYWR5XG4iKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJCWkgPSAocHJpdi0+cmVzcF9pZHggPT0gMCkgPyAxIDogMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKworCQlCVUdfT04ocHJpdi0+cmVzcF9sZW5baV0pOworCQlpZl9jc19yZWNlaXZlX2NtZHJlcyhwcml2LCBwcml2LT5yZXNwX2J1ZltpXSwKKwkJCSZwcml2LT5yZXNwX2xlbltpXSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJCWxic19ub3RpZnlfY29tbWFuZF9yZXNwb25zZShwcml2LCBpKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAoY2F1c2UgJiBJRl9DU19IX0lDX0hPU1RfRVZFTlQpIHsKKwkJdTE2IGV2ZW50ID0gaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX0NfU1RBVFVTKQorCQkJJiBJRl9DU19DX1NfU1RBVFVTX01BU0s7CisJCWlmX2NzX3dyaXRlMTYocHJpdi0+Y2FyZCwgSUZfQ1NfSF9JTlRfQ0FVU0UsCisJCQlJRl9DU19IX0lDX0hPU1RfRVZFTlQpOworCQlsYnNfZGViX2NzKCJldmVudGNhdXNlIDB4JTA0eFxuIiwgZXZlbnQpOworCQlsYnNfcXVldWVfZXZlbnQocHJpdiwgZXZlbnQgPj4gOCAmIDB4ZmYpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRmlybXdhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00NzYsOCArNTExLDYgQEAKIAogCQlpZiAocmVtYWluIDwgY291bnQpCiAJCQljb3VudCA9IHJlbWFpbjsKLQkJLyogcHJpbnRrKEtFUk5fSU5GTyAiLy9IUyAlZCBsb2FkaW5nICVkIG9mICVkIGJ5dGVzXG4iLAotCQkJX19MSU5FX18sIHNlbnQsIGZ3LT5zaXplKTsgKi8KIAogCQkvKiAid3JpdGUgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZSBzZW50IHRvIHRoZSBJL08gQ29tbWFuZAogCQkgKiB3cml0ZSBsZW5ndGggcmVnaXN0ZXIiICovCkBAIC01NDQsMTggKzU3NywxMiBAQAogCiAJcmV0ID0gaWZfY3NfcG9sbF93aGlsZV9md19kb3dubG9hZChjYXJkLCBJRl9DU19DX1NRX1JFQURfTE9XLCBJRl9DU19DX1NRX0hFTFBFUl9PSyk7CiAJaWYgKHJldCA8IDApIHsKLQkJaW50IGk7CiAJCWxic19wcl9lcnIoImhlbHBlciBmaXJtd2FyZSBkb2Vzbid0IGFuc3dlclxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAweDUwOyBpICs9IDIpCi0JCQlwcmludGsoS0VSTl9JTkZPICIjIyBIUyAlMDJ4OiAlMDR4XG4iLAotCQkJCWksIGlmX2NzX3JlYWQxNihjYXJkLCBpKSk7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCiAJZm9yIChzZW50ID0gMDsgc2VudCA8IGZ3LT5zaXplOyBzZW50ICs9IGxlbikgewogCQlsZW4gPSBpZl9jc19yZWFkMTYoY2FyZCwgSUZfQ1NfQ19TUV9SRUFEX0xPVyk7Ci0JCS8qIHByaW50ayhLRVJOX0lORk8gIi8vSFMgJWQgbG9hZGluZyAlZCBvZiAlZCBieXRlc1xuIiwKLQkJCV9fTElORV9fLCBzZW50LCBmdy0+c2l6ZSk7ICovCiAJCWlmIChsZW4gJiAxKSB7CiAJCQlyZXRyeSsrOwogCQkJbGJzX3ByX2luZm8oIm9kZCwgbmVlZCB0byByZXRyeSB0aGlzIGZpcm13YXJlIGJsb2NrXG4iKTsKQEAgLTY0Miw2NiArNjY5LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGlmX2NzX2dldF9pbnRfc3RhdHVzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKmlyZWcpCi17Ci0Jc3RydWN0IGlmX2NzX2NhcmQgKmNhcmQgPSAoc3RydWN0IGlmX2NzX2NhcmQgKilwcml2LT5jYXJkOwotCWludCByZXQgPSAwOwotCXUxNiBpbnRfY2F1c2U7Ci0JKmlyZWcgPSAwOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NTKTsKLQotCWlmIChwcml2LT5zdXJwcmlzZXJlbW92ZWQpCi0JCWdvdG8gb3V0OwotCi0JaW50X2NhdXNlID0gaWZfY3NfcmVhZDE2KGNhcmQsIElGX0NTX0NfSU5UX0NBVVNFKSAmIElGX0NTX0NfSUNfTUFTSzsKLQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0NfSU5UX0NBVVNFLCBpbnRfY2F1c2UpOwotCi0JKmlyZWcgPSBpZl9jc19yZWFkMTYoY2FyZCwgSUZfQ1NfQ19TVEFUVVMpICYgSUZfQ1NfQ19TX01BU0s7Ci0KLQlpZiAoISppcmVnKQotCQlnb3RvIHNiaV9nZXRfaW50X3N0YXR1c19leGl0OwotCi1zYmlfZ2V0X2ludF9zdGF0dXNfZXhpdDoKLQotCS8qIGlzIHRoZXJlIGEgZGF0YSBwYWNrZXQgZm9yIHVzPyAqLwotCWlmICgqaXJlZyAmIElGX0NTX0NfU19SWF9VUExEX1JEWSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWZfY3NfcmVjZWl2ZV9kYXRhKHByaXYpOwotCQlsYnNfcHJvY2Vzc19yeGVkX3BhY2tldChwcml2LCBza2IpOwotCQkqaXJlZyAmPSB+SUZfQ1NfQ19TX1JYX1VQTERfUkRZOwotCX0KLQotCWlmICgqaXJlZyAmIElGX0NTX0NfU19UWF9ETkxEX1JEWSkgewotCQlwcml2LT5kbmxkX3NlbnQgPSBETkxEX1JFU19SRUNFSVZFRDsKLQl9Ci0KLQkvKiBDYXJkIGhhcyBhIGNvbW1hbmQgcmVzdWx0IGZvciB1cyAqLwotCWlmICgqaXJlZyAmIElGX0NTX0NfU19DTURfVVBMRF9SRFkpIHsKLQkJc3Bpbl9sb2NrKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JCXJldCA9IGlmX2NzX3JlY2VpdmVfY21kcmVzKHByaXYsIHByaXYtPnVwbGRfYnVmLCAmcHJpdi0+dXBsZF9sZW4pOwotCQlzcGluX3VubG9jaygmcHJpdi0+ZHJpdmVyX2xvY2spOwotCQlpZiAocmV0IDwgMCkKLQkJCWxic19wcl9lcnIoImNvdWxkIG5vdCByZWNlaXZlIGNtZCBmcm9tIGNhcmRcbiIpOwotCX0KLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NTLCAicmV0ICVkLCBpcmVnIDB4JXgsIGhpc3JlZ2NweSAweCV4IiwgcmV0LCAqaXJlZywgcHJpdi0+aGlzcmVnY3B5KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgaWZfY3NfcmVhZF9ldmVudF9jYXVzZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0NTKTsKLQotCXByaXYtPmV2ZW50Y2F1c2UgPSAoaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX0NfU1RBVFVTKSAmIElGX0NTX0NfU19TVEFUVVNfTUFTSykgPj4gNTsKLQlpZl9jc193cml0ZTE2KHByaXYtPmNhcmQsIElGX0NTX0hfSU5UX0NBVVNFLCBJRl9DU19IX0lDX0hPU1RfRVZFTlQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBDYXJkIFNlcnZpY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04NTQsMTMgKzgyMSwxMCBAQAogCQlnb3RvIG91dDI7CiAJfQogCi0JLyogU3RvcmUgcG9pbnRlcnMgdG8gb3VyIGNhbGwtYmFjayBmdW5jdGlvbnMgKi8KKwkvKiBGaW5pc2ggc2V0dGluZyB1cCBmaWVsZHMgaW4gbGJzX3ByaXZhdGUgKi8KIAljYXJkLT5wcml2ID0gcHJpdjsKIAlwcml2LT5jYXJkID0gY2FyZDsKLQlwcml2LT5od19ob3N0X3RvX2NhcmQgICAgID0gaWZfY3NfaG9zdF90b19jYXJkOwotCXByaXYtPmh3X2dldF9pbnRfc3RhdHVzICAgPSBpZl9jc19nZXRfaW50X3N0YXR1czsKLQlwcml2LT5od19yZWFkX2V2ZW50X2NhdXNlID0gaWZfY3NfcmVhZF9ldmVudF9jYXVzZTsKLQorCXByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGlmX2NzX2hvc3RfdG9fY2FyZDsKIAlwcml2LT5md19yZWFkeSA9IDE7CiAKIAkvKiBOb3cgYWN0dWFsbHkgZ2V0IHRoZSBJUlEgKi8KQEAgLTg4Miw2ICs4NDYsOSBAQAogCQlnb3RvIG91dDM7CiAJfQogCisJLyogVGhlIGZpcm13YXJlIGZvciB0aGUgQ0YgY2FyZCBzdXBwb3J0cyBwb3dlcnNhdmUgKi8KKwlwcml2LT5wc19zdXBwb3J0ZWQgPSAxOworCiAJcmV0ID0gMDsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCmluZGV4IGVlZDczMjAuLjUxZjY2NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKQEAgLTkxLDggKzkxLDYgQEAKIAljb25zdCBjaGFyCQkqZmlybXdhcmU7CiAKIAl1OAkJCWJ1ZmZlcls2NTUzNl07Ci0JdTgJCQlpbnRfY2F1c2U7Ci0JdTMyCQkJZXZlbnQ7CiAKIAlzcGlubG9ja190CQlsb2NrOwogCXN0cnVjdCBpZl9zZGlvX3BhY2tldAkqcGFja2V0czsKQEAgLTEyOSwxMyArMTI3LDEzIEBACiBzdGF0aWMgaW50IGlmX3NkaW9faGFuZGxlX2NtZChzdHJ1Y3QgaWZfc2Rpb19jYXJkICpjYXJkLAogCQl1OCAqYnVmZmVyLCB1bnNpZ25lZCBzaXplKQogeworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmQtPnByaXY7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGk7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfU0RJTyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+cHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQogCWlmIChzaXplID4gTEJTX0NNRF9CVUZGRVJfU0laRSkgewogCQlsYnNfZGViX3NkaW8oInJlc3BvbnNlIHBhY2tldCB0b28gbGFyZ2UgKCVkIGJ5dGVzKVxuIiwKIAkJCShpbnQpc2l6ZSk7CkBAIC0xNDMsMjAgKzE0MSwyMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltZW1jcHkoY2FyZC0+cHJpdi0+dXBsZF9idWYsIGJ1ZmZlciwgc2l6ZSk7Ci0JY2FyZC0+cHJpdi0+dXBsZF9sZW4gPSBzaXplOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCi0JY2FyZC0+aW50X2NhdXNlIHw9IE1SVkRSVl9DTURfVVBMRF9SRFk7CisJaSA9IChwcml2LT5yZXNwX2lkeCA9PSAwKSA/IDEgOiAwOworCUJVR19PTihwcml2LT5yZXNwX2xlbltpXSk7CisJcHJpdi0+cmVzcF9sZW5baV0gPSBzaXplOworCW1lbWNweShwcml2LT5yZXNwX2J1ZltpXSwgYnVmZmVyLCBzaXplKTsKKwlsYnNfbm90aWZ5X2NvbW1hbmRfcmVzcG9uc2UocHJpdiwgaSk7CiAKLQlsYnNfaW50ZXJydXB0KGNhcmQtPnByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAlyZXQgPSAwOwogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAyLDcgKzIwMCw2IEBACiAJCXU4ICpidWZmZXIsIHVuc2lnbmVkIHNpemUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBldmVudDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TRElPKTsKQEAgLTIyMiwxOCArMjE5LDkgQEAKIAkJZXZlbnQgfD0gYnVmZmVyWzJdIDw8IDE2OwogCQlldmVudCB8PSBidWZmZXJbMV0gPDwgODsKIAkJZXZlbnQgfD0gYnVmZmVyWzBdIDw8IDA7Ci0JCWV2ZW50IDw8PSBTQklfRVZFTlRfQ0FVU0VfU0hJRlQ7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0KLQljYXJkLT5ldmVudCA9IGV2ZW50OwotCWNhcmQtPmludF9jYXVzZSB8PSBNUlZEUlZfQ0FSREVWRU5UOwotCi0JbGJzX2ludGVycnVwdChjYXJkLT5wcml2KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7Ci0KKwlsYnNfcXVldWVfZXZlbnQoY2FyZC0+cHJpdiwgZXZlbnQgJiAweEZGKTsKIAlyZXQgPSAwOwogCiBvdXQ6CkBAIC03NzAsMzcgKzc1OCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpZl9zZGlvX2dldF9pbnRfc3RhdHVzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggKmlyZWcpCi17Ci0Jc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TRElPKTsKLQotCWNhcmQgPSBwcml2LT5jYXJkOwotCi0JKmlyZWcgPSBjYXJkLT5pbnRfY2F1c2U7Ci0JY2FyZC0+aW50X2NhdXNlID0gMDsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TRElPKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlmX3NkaW9fcmVhZF9ldmVudF9jYXVzZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TRElPKTsKLQotCWNhcmQgPSBwcml2LT5jYXJkOwotCi0JcHJpdi0+ZXZlbnRjYXVzZSA9IGNhcmQtPmV2ZW50OwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NESU8pOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogU0RJTyBjYWxsYmFja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk1Myw4ICs5MTAsNiBAQAogCiAJcHJpdi0+Y2FyZCA9IGNhcmQ7CiAJcHJpdi0+aHdfaG9zdF90b19jYXJkID0gaWZfc2Rpb19ob3N0X3RvX2NhcmQ7Ci0JcHJpdi0+aHdfZ2V0X2ludF9zdGF0dXMgPSBpZl9zZGlvX2dldF9pbnRfc3RhdHVzOwotCXByaXYtPmh3X3JlYWRfZXZlbnRfY2F1c2UgPSBpZl9zZGlvX3JlYWRfZXZlbnRfY2F1c2U7CiAKIAlwcml2LT5md19yZWFkeSA9IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKaW5kZXggNzVhZWQ5ZC4uODAzMmRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKQEAgLTM4LDggKzM4LDYgQEAKIHN0YXRpYyBpbnQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCk7CiBzdGF0aWMgaW50IGlmX3VzYl9ob3N0X3RvX2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50OF90IHR5cGUsCiAJCQkgICAgICAgdWludDhfdCAqcGF5bG9hZCwgdWludDE2X3QgbmIpOwotc3RhdGljIGludCBpZl91c2JfZ2V0X2ludF9zdGF0dXMoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50OF90ICopOwotc3RhdGljIGludCBpZl91c2JfcmVhZF9ldmVudF9jYXVzZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKik7CiBzdGF0aWMgaW50IHVzYl90eF9ibG9jayhzdHJ1Y3QgaWZfdXNiX2NhcmQgKmNhcmRwLCB1aW50OF90ICpwYXlsb2FkLAogCQkJdWludDE2X3QgbmIpOwogc3RhdGljIHZvaWQgaWZfdXNiX2ZyZWUoc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCk7CkBAIC0yMzMsOCArMjMxLDYgQEAKIAljYXJkcC0+cHJpdi0+ZndfcmVhZHkgPSAxOwogCiAJcHJpdi0+aHdfaG9zdF90b19jYXJkID0gaWZfdXNiX2hvc3RfdG9fY2FyZDsKLQlwcml2LT5od19nZXRfaW50X3N0YXR1cyA9IGlmX3VzYl9nZXRfaW50X3N0YXR1czsKLQlwcml2LT5od19yZWFkX2V2ZW50X2NhdXNlID0gaWZfdXNiX3JlYWRfZXZlbnRfY2F1c2U7CiAJY2FyZHAtPmJvb3QyX3ZlcnNpb24gPSB1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZTsKIAogCWlmX3VzYl9zdWJtaXRfcnhfdXJiKGNhcmRwKTsKQEAgLTU4Miw3ICs1NzgsNiBAQAogCXNrYl9wdWxsKHNrYiwgTUVTU0FHRV9IRUFERVJfTEVOKTsKIAogCWxic19wcm9jZXNzX3J4ZWRfcGFja2V0KHByaXYsIHNrYik7Ci0JcHJpdi0+dXBsZF9sZW4gPSAocmVjdmxlbmd0aCAtIE1FU1NBR0VfSEVBREVSX0xFTik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2NtZHJlcXVlc3QoaW50IHJlY3ZsZW5ndGgsIHVpbnQ4X3QgKnJlY3ZidWZmLApAQCAtNTkwLDYgKzU4NSw4IEBACiAJCQkJICAgICAgc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCwKIAkJCQkgICAgICBzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CisJdTggaTsKKwogCWlmIChyZWN2bGVuZ3RoID4gTEJTX0NNRF9CVUZGRVJfU0laRSkgewogCQlsYnNfZGViX3VzYmQoJmNhcmRwLT51ZGV2LT5kZXYsCiAJCQkgICAgICJUaGUgcmVjZWl2ZSBidWZmZXIgaXMgdG9vIGxhcmdlXG4iKTsKQEAgLTYwMSwxMiArNTk4LDE1IEBACiAJCUJVRygpOwogCiAJc3Bpbl9sb2NrKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JY2FyZHAtPnVzYl9pbnRfY2F1c2UgfD0gTVJWRFJWX0NNRF9VUExEX1JEWTsKLQlwcml2LT51cGxkX2xlbiA9IChyZWN2bGVuZ3RoIC0gTUVTU0FHRV9IRUFERVJfTEVOKTsKLQltZW1jcHkocHJpdi0+dXBsZF9idWYsIHJlY3ZidWZmICsgTUVTU0FHRV9IRUFERVJfTEVOLCBwcml2LT51cGxkX2xlbik7CiAKKwlpID0gKHByaXYtPnJlc3BfaWR4ID09IDApID8gMSA6IDA7CisJQlVHX09OKHByaXYtPnJlc3BfbGVuW2ldKTsKKwlwcml2LT5yZXNwX2xlbltpXSA9IChyZWN2bGVuZ3RoIC0gTUVTU0FHRV9IRUFERVJfTEVOKTsKKwltZW1jcHkocHJpdi0+cmVzcF9idWZbaV0sIHJlY3ZidWZmICsgTUVTU0FHRV9IRUFERVJfTEVOLAorCQlwcml2LT5yZXNwX2xlbltpXSk7CiAJa2ZyZWVfc2tiKHNrYik7Ci0JbGJzX2ludGVycnVwdChwcml2KTsKKwlsYnNfbm90aWZ5X2NvbW1hbmRfcmVzcG9uc2UocHJpdiwgaSk7CisKIAlzcGluX3VubG9jaygmcHJpdi0+ZHJpdmVyX2xvY2spOwogCiAJbGJzX2RlYl91c2JkKCZjYXJkcC0+dWRldi0+ZGV2LApAQCAtNjI5LDYgKzYyOSw3IEBACiAJdWludDhfdCAqcmVjdmJ1ZmYgPSBOVUxMOwogCXVpbnQzMl90IHJlY3Z0eXBlID0gMDsKIAlfX2xlMzIgKnBrdCA9IChfX2xlMzIgKikoc2tiLT5kYXRhICsgSVBGSUVMRF9BTElHTl9PRkZTRVQpOworCXVpbnQzMl90IGV2ZW50OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1VTQik7CiAKQEAgLTY2MCwyNiArNjYxLDIwIEBACiAJCWJyZWFrOwogCiAJY2FzZSBDTURfVFlQRV9JTkRJQ0FUSU9OOgotCQkvKiBFdmVudCBjYXVzZSBoYW5kbGluZyAqLwotCQlzcGluX2xvY2soJnByaXYtPmRyaXZlcl9sb2NrKTsKLQotCQljYXJkcC0+dXNiX2V2ZW50X2NhdXNlID0gbGUzMl90b19jcHUocGt0WzFdKTsKLQotCQlsYnNfZGViX3VzYmQoJmNhcmRwLT51ZGV2LT5kZXYsIioqRVZFTlQqKiAweCVYXG4iLAotCQkJICAgICBjYXJkcC0+dXNiX2V2ZW50X2NhdXNlKTsKKwkJLyogRXZlbnQgaGFuZGxpbmcgKi8KKwkJZXZlbnQgPSBsZTMyX3RvX2NwdShwa3RbMV0pOworCQlsYnNfZGViX3VzYmQoJmNhcmRwLT51ZGV2LT5kZXYsICIqKkVWRU5UKiogMHglWFxuIiwgZXZlbnQpOworCQlrZnJlZV9za2Ioc2tiKTsKIAogCQkvKiBJY2t5IHVuZG9jdW1lbnRlZCBtYWdpYyBzcGVjaWFsIGNhc2UgKi8KLQkJaWYgKGNhcmRwLT51c2JfZXZlbnRfY2F1c2UgJiAweGZmZmYwMDAwKSB7Ci0JCQlsYnNfc2VuZF90eF9mZWVkYmFjayhwcml2KTsKLQkJCXNwaW5fdW5sb2NrKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JCQlicmVhazsKLQkJfQotCQljYXJkcC0+dXNiX2V2ZW50X2NhdXNlIDw8PSAzOwotCQljYXJkcC0+dXNiX2ludF9jYXVzZSB8PSBNUlZEUlZfQ0FSREVWRU5UOwotCQlrZnJlZV9za2Ioc2tiKTsKLQkJbGJzX2ludGVycnVwdChwcml2KTsKLQkJc3Bpbl91bmxvY2soJnByaXYtPmRyaXZlcl9sb2NrKTsKLQkJZ290byByeF9leGl0OworCQlpZiAoZXZlbnQgJiAweGZmZmYwMDAwKSB7CisJCQl1MzIgdHJ5Y291bnQgPSAoZXZlbnQgJiAweGZmZmYwMDAwKSA+PiAxNjsKKworCQkJbGJzX3NlbmRfdHhfZmVlZGJhY2socHJpdiwgdHJ5Y291bnQpOworCQl9IGVsc2UKKwkJCWxic19xdWV1ZV9ldmVudChwcml2LCBldmVudCAmIDB4RkYpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWxic19kZWJfdXNiZCgmY2FyZHAtPnVkZXYtPmRldiwgIlVua25vd24gY29tbWFuZCB0eXBlIDB4JVhcbiIsCiAJCQkgICAgIHJlY3Z0eXBlKTsKQEAgLTcyMiwzMCArNzE3LDYgQEAKIAlyZXR1cm4gdXNiX3R4X2Jsb2NrKGNhcmRwLCBjYXJkcC0+ZXBfb3V0X2J1ZiwgbmIgKyBNRVNTQUdFX0hFQURFUl9MRU4pOwogfQogCi0vKiBjYWxsZWQgd2l0aCBwcml2LT5kcml2ZXJfbG9jayBoZWxkICovCi1zdGF0aWMgaW50IGlmX3VzYl9nZXRfaW50X3N0YXR1cyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQ4X3QgKmlyZWcpCi17Ci0Jc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCA9IHByaXYtPmNhcmQ7Ci0KLQkqaXJlZyA9IGNhcmRwLT51c2JfaW50X2NhdXNlOwotCWNhcmRwLT51c2JfaW50X2NhdXNlID0gMDsKLQotCWxic19kZWJfdXNiZCgmY2FyZHAtPnVkZXYtPmRldiwgIkludCBjYXVzZSBpcyAweCVYXG4iLCAqaXJlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZl91c2JfcmVhZF9ldmVudF9jYXVzZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCA9IHByaXYtPmNhcmQ7Ci0KLQlwcml2LT5ldmVudGNhdXNlID0gY2FyZHAtPnVzYl9ldmVudF9jYXVzZTsKLQkvKiBSZS1zdWJtaXQgcnggdXJiIGhlcmUgdG8gYXZvaWQgZXZlbnQgbG9zdCBpc3N1ZSAqLwotCWlmX3VzYl9zdWJtaXRfcnhfdXJiKGNhcmRwKTsKLQotCXJldHVybiAwOwotfQotCiAvKioKICAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBpc3N1ZXMgQm9vdCBjb21tYW5kIHRvIHRoZSBCb290MiBjb2RlCiAgKiAgQHBhcmFtIGl2YWx1ZSAgIDE6Qm9vdCBmcm9tIEZXIGJ5IFVTQi1Eb3dubG9hZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaAppbmRleCBlNDgyOWEzLi41NzcxYTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaApAQCAtNDYsOCArNDYsNiBAQAogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdjsKIAogCXN0cnVjdCBza19idWZmICpyeF9za2I7Ci0JdWludDMyX3QgdXNiX2V2ZW50X2NhdXNlOwotCXVpbnQ4X3QgdXNiX2ludF9jYXVzZTsKIAogCXVpbnQ4X3QgZXBfaW47CiAJdWludDhfdCBlcF9vdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9qb2luLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9qb2luLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNDUwODAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvam9pbi5jCisrKyAvZGV2L251bGwKQEAgLTEsODk1ICswLDAgQEAKLS8qKgotICAqICBGdW5jdGlvbnMgaW1wbGVtZW50aW5nIHdsYW4gaW5mcmFzdHJ1Y3R1cmUgYW5kIGFkaG9jIGpvaW4gcm91dGluZXMsCi0gICogIElPQ1RMIGhhbmRsZXJzIGFzIHdlbGwgYXMgY29tbWFuZCBwcmVwZXJhdGlvbiBhbmQgcmVzcG9uc2Ugcm91dGluZXMKLSAgKiAgZm9yIHNlbmRpbmcgYWRob2Mgc3RhcnQsIGFkaG9jIGpvaW4sIGFuZCBhc3NvY2lhdGlvbiBjb21tYW5kcwotICAqICB0byB0aGUgZmlybXdhcmUuCi0gICovCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotI2luY2x1ZGUgImhvc3QuaCIKLSNpbmNsdWRlICJkZWNsLmgiCi0jaW5jbHVkZSAiam9pbi5oIgotI2luY2x1ZGUgImRldi5oIgotI2luY2x1ZGUgImFzc29jLmgiCi0KLS8qIFRoZSBmaXJtd2FyZSBuZWVkcyBjZXJ0YWluIGJpdHMgbWFza2VkIG91dCBvZiB0aGUgYmVhY29uLWRlcnZpY2VkIGNhcGFiaWxpdHkKLSAqIGZpZWxkIHdoZW4gYXNzb2NpYXRpbmcvam9pbmluZyB0byBCU1NzLgotICovCi0jZGVmaW5lIENBUElORk9fTUFTSwkofigweGRhMDApKQotCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBmaW5kcyBjb21tb24gcmF0ZXMgYmV0d2VlbiByYXRlMSBhbmQgY2FyZCByYXRlcy4KLSAqCi0gKiBJdCB3aWxsIGZpbGwgY29tbW9uIHJhdGVzIGluIHJhdGUxIGFzIG91dHB1dCBpZiBmb3VuZC4KLSAqCi0gKiBOT1RFOiBTZXR0aW5nIHRoZSBNU0Igb2YgdGhlIGJhc2ljIHJhdGVzIG5lZWQgdG8gYmUgdGFrZW4KLSAqICAgY2FyZSwgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHJhdGUxICAgICAgIHRoZSBidWZmZXIgd2hpY2gga2VlcHMgaW5wdXQgYW5kIG91dHB1dAotICogIEBwYXJhbSByYXRlMV9zaXplICB0aGUgc2l6ZSBvZiByYXRlMSBidWZmZXI7IG5ldyBzaXplIG9mIGJ1ZmZlciBvbiByZXR1cm4KLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgIDAgb3IgLTEKLSAqLwotc3RhdGljIGludCBnZXRfY29tbW9uX3JhdGVzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQl1OCAqcmF0ZXMsCi0JdTE2ICpyYXRlc19zaXplKQotewotCXU4ICpjYXJkX3JhdGVzID0gbGJzX2JnX3JhdGVzOwotCXNpemVfdCBudW1fY2FyZF9yYXRlcyA9IHNpemVvZihsYnNfYmdfcmF0ZXMpOwotCWludCByZXQgPSAwLCBpLCBqOwotCXU4IHRtcFszMF07Ci0Jc2l6ZV90IHRtcF9zaXplID0gMDsKLQotCS8qIEZvciBlYWNoIHJhdGUgaW4gY2FyZF9yYXRlcyB0aGF0IGV4aXN0cyBpbiByYXRlMSwgY29weSB0byB0bXAgKi8KLQlmb3IgKGkgPSAwOyBjYXJkX3JhdGVzW2ldICYmIChpIDwgbnVtX2NhcmRfcmF0ZXMpOyBpKyspIHsKLQkJZm9yIChqID0gMDsgcmF0ZXNbal0gJiYgKGogPCAqcmF0ZXNfc2l6ZSk7IGorKykgewotCQkJaWYgKHJhdGVzW2pdID09IGNhcmRfcmF0ZXNbaV0pCi0JCQkJdG1wW3RtcF9zaXplKytdID0gY2FyZF9yYXRlc1tpXTsKLQkJfQotCX0KLQotCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgIkFQIHJhdGVzICAgICIsIHJhdGVzLCAqcmF0ZXNfc2l6ZSk7Ci0JbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY2FyZCByYXRlcyAgIiwgY2FyZF9yYXRlcywgbnVtX2NhcmRfcmF0ZXMpOwotCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgImNvbW1vbiByYXRlcyIsIHRtcCwgdG1wX3NpemUpOwotCWxic19kZWJfam9pbigiVFggZGF0YSByYXRlIDB4JTAyeFxuIiwgcHJpdi0+Y3VyX3JhdGUpOwotCi0JaWYgKCFwcml2LT5hdXRvX3JhdGUpIHsKLQkJZm9yIChpID0gMDsgaSA8IHRtcF9zaXplOyBpKyspIHsKLQkJCWlmICh0bXBbaV0gPT0gcHJpdi0+Y3VyX3JhdGUpCi0JCQkJZ290byBkb25lOwotCQl9Ci0JCWxic19wcl9hbGVydCgiUHJldmlvdXNseSBzZXQgZml4ZWQgZGF0YSByYXRlICUjeCBpc24ndCAiCi0JCSAgICAgICAiY29tcGF0aWJsZSB3aXRoIHRoZSBuZXR3b3JrLlxuIiwgcHJpdi0+Y3VyX3JhdGUpOwotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQlyZXQgPSAwOwotCi1kb25lOgotCW1lbXNldChyYXRlcywgMCwgKnJhdGVzX3NpemUpOwotCSpyYXRlc19zaXplID0gbWluX3QoaW50LCB0bXBfc2l6ZSwgKnJhdGVzX3NpemUpOwotCW1lbWNweShyYXRlcywgdG1wLCAqcmF0ZXNfc2l6ZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vKioKLSAqICBAYnJpZWYgU2V0cyB0aGUgTVNCIG9uIGJhc2ljIHJhdGVzIGFzIHRoZSBmaXJtd2FyZSByZXF1aXJlcwotICoKLSAqIFNjYW4gdGhyb3VnaCBhbiBhcnJheSBhbmQgc2V0IHRoZSBNU0IgZm9yIGJhc2ljIGRhdGEgcmF0ZXMuCi0gKgotICogIEBwYXJhbSByYXRlcyAgICAgYnVmZmVyIG9mIGRhdGEgcmF0ZXMKLSAqICBAcGFyYW0gbGVuICAgICAgIHNpemUgb2YgYnVmZmVyCi0gKi8KLXN0YXRpYyB2b2lkIGxic19zZXRfYmFzaWNfcmF0ZV9mbGFncyh1OCAqcmF0ZXMsIHNpemVfdCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJaWYgKHJhdGVzW2ldID09IDB4MDIgfHwgcmF0ZXNbaV0gPT0gMHgwNCB8fAotCQkgICAgcmF0ZXNbaV0gPT0gMHgwYiB8fCByYXRlc1tpXSA9PSAweDE2KQotCQkJcmF0ZXNbaV0gfD0gMHg4MDsKLQl9Ci19Ci0KLS8qKgotICogIEBicmllZiBVbnNldHMgdGhlIE1TQiBvbiBiYXNpYyByYXRlcwotICoKLSAqIFNjYW4gdGhyb3VnaCBhbiBhcnJheSBhbmQgdW5zZXQgdGhlIE1TQiBmb3IgYmFzaWMgZGF0YSByYXRlcy4KLSAqCi0gKiAgQHBhcmFtIHJhdGVzICAgICBidWZmZXIgb2YgZGF0YSByYXRlcwotICogIEBwYXJhbSBsZW4gICAgICAgc2l6ZSBvZiBidWZmZXIKLSAqLwotdm9pZCBsYnNfdW5zZXRfYmFzaWNfcmF0ZV9mbGFncyh1OCAqcmF0ZXMsIHNpemVfdCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCXJhdGVzW2ldICY9IDB4N2Y7Ci19Ci0KLQotLyoqCi0gKiAgQGJyaWVmIEFzc29jaWF0ZSB0byBhIHNwZWNpZmljIEJTUyBkaXNjb3ZlcmVkIGluIGEgc2NhbgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHBic3NkZXNjICBQb2ludGVyIHRvIHRoZSBCU1MgZGVzY3JpcHRvciB0byBhc3NvY2lhdGUgd2l0aC4KLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAwLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLWludCBsYnNfYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSkKLXsKLQlpbnQgcmV0OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQotCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9BVVRIRU5USUNBVEUsCi0JCQkJICAgIDAsIENNRF9PUFRJT05fV0FJVEZPUlJTUCwKLQkJCQkgICAgMCwgYXNzb2NfcmVxLT5ic3MuYnNzaWQpOwotCi0JaWYgKHJldCkKLQkJZ290byBkb25lOwotCi0JLyogc2V0IHByZWFtYmxlIHRvIGZpcm13YXJlICovCi0JaWYgKCAgIChwcml2LT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKQotCSAgICAmJiAoYXNzb2NfcmVxLT5ic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkpCi0JCXByaXYtPnByZWFtYmxlID0gQ01EX1RZUEVfU0hPUlRfUFJFQU1CTEU7Ci0JZWxzZQotCQlwcml2LT5wcmVhbWJsZSA9IENNRF9UWVBFX0xPTkdfUFJFQU1CTEU7Ci0KLQlsYnNfc2V0X3JhZGlvX2NvbnRyb2wocHJpdik7Ci0KLQlyZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIENNRF84MDJfMTFfQVNTT0NJQVRFLAotCQkJCSAgICAwLCBDTURfT1BUSU9OX1dBSVRGT1JSU1AsIDAsIGFzc29jX3JlcSk7Ci0KLWRvbmU6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQVNTT0MsICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogIEBicmllZiBTdGFydCBhbiBBZGhvYyBOZXR3b3JrCi0gKgotICogIEBwYXJhbSBwcml2ICAgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gYWRob2Nzc2lkICAgIFRoZSBzc2lkIG9mIHRoZSBBZGhvYyBOZXR3b3JrCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwLS1zdWNjZXNzLCAtMS0tZmFpbAotICovCi1pbnQgbGJzX3N0YXJ0X2FkaG9jX25ldHdvcmsoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvY19yZXEpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlwcml2LT5hZGhvY2NyZWF0ZSA9IDE7Ci0KLQlpZiAocHJpdi0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgewotCQlsYnNfZGViX2pvaW4oIkFkaG9jU3RhcnQ6IFNob3J0IHByZWFtYmxlXG4iKTsKLQkJcHJpdi0+cHJlYW1ibGUgPSBDTURfVFlQRV9TSE9SVF9QUkVBTUJMRTsKLQl9IGVsc2UgewotCQlsYnNfZGViX2pvaW4oIkFkaG9jU3RhcnQ6IExvbmcgcHJlYW1ibGVcbiIpOwotCQlwcml2LT5wcmVhbWJsZSA9IENNRF9UWVBFX0xPTkdfUFJFQU1CTEU7Ci0JfQotCi0JbGJzX3NldF9yYWRpb19jb250cm9sKHByaXYpOwotCi0JbGJzX2RlYl9qb2luKCJBZGhvY1N0YXJ0OiBjaGFubmVsID0gJWRcbiIsIGFzc29jX3JlcS0+Y2hhbm5lbCk7Ci0JbGJzX2RlYl9qb2luKCJBZGhvY1N0YXJ0OiBiYW5kID0gJWRcbiIsIGFzc29jX3JlcS0+YmFuZCk7Ci0KLQlyZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIENNRF84MDJfMTFfQURfSE9DX1NUQVJULAotCQkJCSAgICAwLCBDTURfT1BUSU9OX1dBSVRGT1JSU1AsIDAsIGFzc29jX3JlcSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqICBAYnJpZWYgSm9pbiBhbiBhZGhvYyBuZXR3b3JrIGZvdW5kIGluIGEgcHJldmlvdXMgc2NhbgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHBic3NkZXNjICAgICBQb2ludGVyIHRvIGEgQlNTIGRlc2NyaXB0b3IgZm91bmQgaW4gYSBwcmV2aW91cyBzY2FuCi0gKiAgICAgICAgICAgICAgICAgICAgICB0byBhdHRlbXB0IHRvIGpvaW4KLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwLS1zdWNjZXNzLCAtMS0tZmFpbAotICovCi1pbnQgbGJzX2pvaW5fYWRob2NfbmV0d29yayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0Jc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSkKLXsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBic3MgPSAmYXNzb2NfcmVxLT5ic3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlsYnNfZGViX2pvaW4oIiVzOiBDdXJyZW50IFNTSUQgJyVzJywgc3NpZCBsZW5ndGggJXVcbiIsCi0JICAgICAgICAgICAgIF9fZnVuY19fLAotCSAgICAgICAgICAgICBlc2NhcGVfZXNzaWQocHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW4pLAotCSAgICAgICAgICAgICBwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW4pOwotCWxic19kZWJfam9pbigiJXM6IHJlcXVlc3RlZCBzc2lkICclcycsIHNzaWQgbGVuZ3RoICV1XG4iLAotCSAgICAgICAgICAgICBfX2Z1bmNfXywgZXNjYXBlX2Vzc2lkKGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbiksCi0JICAgICAgICAgICAgIGJzcy0+c3NpZF9sZW4pOwotCi0JLyogY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBTU0lEIGlzIGFscmVhZHkgam9pbmVkICovCi0JaWYgKCAgIHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbgotCSAgICAmJiAhbGJzX3NzaWRfY21wKHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKQotCSAgICAmJiAocHJpdi0+bW9kZSA9PSBJV19NT0RFX0FESE9DKQotCSAgICAmJiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkpIHsKLQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0JCWxic19kZWJfam9pbigiQURIT0NfSl9DTUQ6IE5ldyBhZC1ob2MgU1NJRCBpcyB0aGUgc2FtZSBhcyAiCi0JCSAgICAgICAgICAgICAiY3VycmVudCwgbm90IGF0dGVtcHRpbmcgdG8gcmUtam9pbiIpOwotCi0JCS8qIFNlbmQgdGhlIHJlLWFzc29jaWF0aW9uIGV2ZW50IHRob3VnaCwgYmVjYXVzZSB0aGUgYXNzb2NpYXRpb24KLQkJICogcmVxdWVzdCByZWFsbHkgd2FzIHN1Y2Nlc3NmdWwsIGV2ZW4gaWYganVzdCBhIG51bGwtb3AuCi0JCSAqLwotCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkLAotCQkgICAgICAgRVRIX0FMRU4pOwotCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFVzZSBzaG9ydHByZWFtYmxlIG9ubHkgd2hlbiBib3RoIGNyZWF0b3IgYW5kIGNhcmQgc3VwcG9ydHMKLQkgICBzaG9ydCBwcmVhbWJsZSAqLwotCWlmICggICAhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKLQkgICAgfHwgIShwcml2LT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSkgewotCQlsYnNfZGViX2pvaW4oIkFkaG9jSm9pbjogTG9uZyBwcmVhbWJsZVxuIik7Ci0JCXByaXYtPnByZWFtYmxlID0gQ01EX1RZUEVfTE9OR19QUkVBTUJMRTsKLQl9IGVsc2UgewotCQlsYnNfZGViX2pvaW4oIkFkaG9jSm9pbjogU2hvcnQgcHJlYW1ibGVcbiIpOwotCQlwcml2LT5wcmVhbWJsZSA9IENNRF9UWVBFX1NIT1JUX1BSRUFNQkxFOwotCX0KLQotCWxic19zZXRfcmFkaW9fY29udHJvbChwcml2KTsKLQotCWxic19kZWJfam9pbigiQWRob2NKb2luOiBjaGFubmVsID0gJWRcbiIsIGFzc29jX3JlcS0+Y2hhbm5lbCk7Ci0JbGJzX2RlYl9qb2luKCJBZGhvY0pvaW46IGJhbmQgPSAlY1xuIiwgYXNzb2NfcmVxLT5iYW5kKTsKLQotCXByaXYtPmFkaG9jY3JlYXRlID0gMDsKLQotCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9BRF9IT0NfSk9JTiwKLQkJCQkgICAgMCwgQ01EX09QVElPTl9XQUlURk9SUlNQLAotCQkJCSAgICBPSURfODAyXzExX1NTSUQsIGFzc29jX3JlcSk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgbGJzX3N0b3BfYWRob2NfbmV0d29yayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0JcmV0dXJuIGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9BRF9IT0NfU1RPUCwKLQkJCQkgICAgIDAsIENNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgTlVMTCk7Ci19Ci0KLS8qKgotICogIEBicmllZiBTZW5kIERlYXV0aGVudGljYXRpb24gUmVxdWVzdAotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAgICAgICAgICAwLS1zdWNjZXNzLCAtMS0tZmFpbAotICovCi1pbnQgbGJzX3NlbmRfZGVhdXRoZW50aWNhdGlvbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCi17Ci0JcmV0dXJuIGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURSwKLQkJCQkgICAgIDAsIENNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgTlVMTCk7Ci19Ci0KLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgb2YgYXV0aGVudGljYXRlLgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGNtZCAgICAgICBBIHBvaW50ZXIgdG8gY21kX2RzX2NvbW1hbmQgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHBkYXRhX2J1ZiBWb2lkIGNhc3Qgb2YgcG9pbnRlciB0byBhIEJTU0lEIHRvIGF1dGhlbnRpY2F0ZSB3aXRoCi0gKgotICogIEByZXR1cm4gICAgICAgICAwIG9yIC0xCi0gKi8KLWludCBsYnNfY21kXzgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAotCQkJCSB2b2lkICpwZGF0YV9idWYpCi17Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlICpwYXV0aGVudGljYXRlID0gJmNtZC0+cGFyYW1zLmF1dGg7Ci0JaW50IHJldCA9IC0xOwotCXU4ICpic3NpZCA9IHBkYXRhX2J1ZjsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9KT0lOKTsKLQotCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfQVVUSEVOVElDQVRFKTsKLQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlKQotCSAgICAgICAgICAgICAgICAgICAgICAgICsgU19EU19HRU4pOwotCi0JLyogdHJhbnNsYXRlIGF1dGggbW9kZSB0byA4MDIuMTEgZGVmaW5lZCB3aXJlIHZhbHVlICovCi0Jc3dpdGNoIChwcml2LT5zZWNpbmZvLmF1dGhfbW9kZSkgewotCWNhc2UgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU06Ci0JCXBhdXRoZW50aWNhdGUtPmF1dGh0eXBlID0gMHgwMDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0FMR19TSEFSRURfS0VZOgotCQlwYXV0aGVudGljYXRlLT5hdXRodHlwZSA9IDB4MDE7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9BTEdfTEVBUDoKLQkJcGF1dGhlbnRpY2F0ZS0+YXV0aHR5cGUgPSAweDgwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsYnNfZGViX2pvaW4oIkFVVEhfQ01EOiBpbnZhbGlkIGF1dGggYWxnIDB4JVhcbiIsCi0JCSAgICAgICAgICAgICBwcml2LT5zZWNpbmZvLmF1dGhfbW9kZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbWNweShwYXV0aGVudGljYXRlLT5tYWNhZGRyLCBic3NpZCwgRVRIX0FMRU4pOwotCi0JbGJzX2RlYl9qb2luKCJBVVRIX0NNRDogQlNTSUQgJXMsIGF1dGggMHgleFxuIiwKLQkgICAgICAgICAgICAgcHJpbnRfbWFjKG1hYywgYnNzaWQpLCBwYXV0aGVudGljYXRlLT5hdXRodHlwZSk7Ci0JcmV0ID0gMDsKLQotb3V0OgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0pPSU4sICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBsYnNfY21kXzgwMjExX2RlYXV0aGVudGljYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCkKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9kZWF1dGhlbnRpY2F0ZSAqZGF1dGggPSAmY21kLT5wYXJhbXMuZGVhdXRoOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0pPSU4pOwotCi0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURSk7Ci0JY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlKSArCi0JCQkgICAgIFNfRFNfR0VOKTsKLQotCS8qIHNldCBBUCBNQUMgYWRkcmVzcyAqLwotCW1lbW1vdmUoZGF1dGgtPm1hY2FkZHIsIHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgRVRIX0FMRU4pOwotCi0JLyogUmVhc29uIGNvZGUgMyA9IFN0YXRpb24gaXMgbGVhdmluZyAqLwotI2RlZmluZSBSRUFTT05fQ09ERV9TVEFfTEVBVklORyAzCi0JZGF1dGgtPnJlYXNvbmNvZGUgPSBjcHVfdG9fbGUxNihSRUFTT05fQ09ERV9TVEFfTEVBVklORyk7Ci0KLQlsYnNfZGViX2xlYXZlKExCU19ERUJfSk9JTik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBsYnNfY21kXzgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqcGRhdGFfYnVmKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX2Fzc29jaWF0ZSAqcGFzc28gPSAmY21kLT5wYXJhbXMuYXNzb2NpYXRlOwotCWludCByZXQgPSAwOwotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxID0gcGRhdGFfYnVmOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIGJzcyA9ICZhc3NvY19yZXEtPmJzczsKLQl1OCAqcG9zOwotCXUxNiB0bXBjYXAsIHRtcGxlbjsKLQlzdHJ1Y3QgbXJ2bGlldHlwZXNfc3NpZHBhcmFtc2V0ICpzc2lkOwotCXN0cnVjdCBtcnZsaWV0eXBlc19waHlwYXJhbXNldCAqcGh5OwotCXN0cnVjdCBtcnZsaWV0eXBlc19zc3BhcmFtc2V0ICpzczsKLQlzdHJ1Y3QgbXJ2bGlldHlwZXNfcmF0ZXNwYXJhbXNldCAqcmF0ZXM7Ci0Jc3RydWN0IG1ydmxpZXR5cGVzX3JzbnBhcmFtc2V0ICpyc247Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfQVNTT0MpOwotCi0JcG9zID0gKHU4ICopIHBhc3NvOwotCi0JaWYgKCFwcml2KSB7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9BU1NPQ0lBVEUpOwotCi0JbWVtY3B5KHBhc3NvLT5wZWVyc3RhYWRkciwgYnNzLT5ic3NpZCwgc2l6ZW9mKHBhc3NvLT5wZWVyc3RhYWRkcikpOwotCXBvcyArPSBzaXplb2YocGFzc28tPnBlZXJzdGFhZGRyKTsKLQotCS8qIHNldCB0aGUgbGlzdGVuIGludGVydmFsICovCi0JcGFzc28tPmxpc3RlbmludGVydmFsID0gY3B1X3RvX2xlMTYoTVJWRFJWX0RFRkFVTFRfTElTVEVOX0lOVEVSVkFMKTsKLQotCXBvcyArPSBzaXplb2YocGFzc28tPmNhcGFiaWxpdHkpOwotCXBvcyArPSBzaXplb2YocGFzc28tPmxpc3RlbmludGVydmFsKTsKLQlwb3MgKz0gc2l6ZW9mKHBhc3NvLT5iY25wZXJpb2QpOwotCXBvcyArPSBzaXplb2YocGFzc28tPmR0aW1wZXJpb2QpOwotCi0Jc3NpZCA9IChzdHJ1Y3QgbXJ2bGlldHlwZXNfc3NpZHBhcmFtc2V0ICopIHBvczsKLQlzc2lkLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1NTSUQpOwotCXRtcGxlbiA9IGJzcy0+c3NpZF9sZW47Ci0Jc3NpZC0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHRtcGxlbik7Ci0JbWVtY3B5KHNzaWQtPnNzaWQsIGJzcy0+c3NpZCwgdG1wbGVuKTsKLQlwb3MgKz0gc2l6ZW9mKHNzaWQtPmhlYWRlcikgKyB0bXBsZW47Ci0KLQlwaHkgPSAoc3RydWN0IG1ydmxpZXR5cGVzX3BoeXBhcmFtc2V0ICopIHBvczsKLQlwaHktPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUEhZX0RTKTsKLQl0bXBsZW4gPSBzaXplb2YocGh5LT5maF9kcy5kc3BhcmFtc2V0KTsKLQlwaHktPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNih0bXBsZW4pOwotCW1lbWNweSgmcGh5LT5maF9kcy5kc3BhcmFtc2V0LAotCSAgICAgICAmYnNzLT5waHlwYXJhbXNldC5kc3BhcmFtc2V0LmN1cnJlbnRjaGFuLAotCSAgICAgICB0bXBsZW4pOwotCXBvcyArPSBzaXplb2YocGh5LT5oZWFkZXIpICsgdG1wbGVuOwotCi0Jc3MgPSAoc3RydWN0IG1ydmxpZXR5cGVzX3NzcGFyYW1zZXQgKikgcG9zOwotCXNzLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NGKTsKLQl0bXBsZW4gPSBzaXplb2Yoc3MtPmNmX2lic3MuY2ZwYXJhbXNldCk7Ci0Jc3MtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNih0bXBsZW4pOwotCXBvcyArPSBzaXplb2Yoc3MtPmhlYWRlcikgKyB0bXBsZW47Ci0KLQlyYXRlcyA9IChzdHJ1Y3QgbXJ2bGlldHlwZXNfcmF0ZXNwYXJhbXNldCAqKSBwb3M7Ci0JcmF0ZXMtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUkFURVMpOwotCW1lbWNweSgmcmF0ZXMtPnJhdGVzLCAmYnNzLT5yYXRlcywgTUFYX1JBVEVTKTsKLQl0bXBsZW4gPSBNQVhfUkFURVM7Ci0JaWYgKGdldF9jb21tb25fcmF0ZXMocHJpdiwgcmF0ZXMtPnJhdGVzLCAmdG1wbGVuKSkgewotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQlwb3MgKz0gc2l6ZW9mKHJhdGVzLT5oZWFkZXIpICsgdG1wbGVuOwotCXJhdGVzLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYodG1wbGVuKTsKLQlsYnNfZGViX2Fzc29jKCJBU1NPQ19DTUQ6IG51bSByYXRlcyAldVxuIiwgdG1wbGVuKTsKLQotCS8qIENvcHkgdGhlIGluZnJhLiBhc3NvY2lhdGlvbiByYXRlcyBpbnRvIEN1cnJlbnQgQlNTIHN0YXRlIHN0cnVjdHVyZSAqLwotCW1lbXNldCgmcHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzLCAwLCBzaXplb2YocHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzKSk7Ci0JbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsICZyYXRlcy0+cmF0ZXMsIHRtcGxlbik7Ci0KLQkvKiBTZXQgTVNCIG9uIGJhc2ljIHJhdGVzIGFzIHRoZSBmaXJtd2FyZSByZXF1aXJlcywgYnV0IF9hZnRlcl8KLQkgKiBjb3B5aW5nIHRvIGN1cnJlbnQgYnNzIHJhdGVzLgotCSAqLwotCWxic19zZXRfYmFzaWNfcmF0ZV9mbGFncyhyYXRlcy0+cmF0ZXMsIHRtcGxlbik7Ci0KLQlpZiAoYXNzb2NfcmVxLT5zZWNpbmZvLldQQWVuYWJsZWQgfHwgYXNzb2NfcmVxLT5zZWNpbmZvLldQQTJlbmFibGVkKSB7Ci0JCXJzbiA9IChzdHJ1Y3QgbXJ2bGlldHlwZXNfcnNucGFyYW1zZXQgKikgcG9zOwotCQkvKiBXUEFfSUUgb3IgV1BBMl9JRSAqLwotCQlyc24tPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoKHUxNikgYXNzb2NfcmVxLT53cGFfaWVbMF0pOwotCQl0bXBsZW4gPSAodTE2KSBhc3NvY19yZXEtPndwYV9pZVsxXTsKLQkJcnNuLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYodG1wbGVuKTsKLQkJbWVtY3B5KHJzbi0+cnNuaWUsICZhc3NvY19yZXEtPndwYV9pZVsyXSwgdG1wbGVuKTsKLQkJbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiQVNTT0NfQ01EOiBSU04gSUUiLCAodTggKikgcnNuLAotCQkJc2l6ZW9mKHJzbi0+aGVhZGVyKSArIHRtcGxlbik7Ci0JCXBvcyArPSBzaXplb2YocnNuLT5oZWFkZXIpICsgdG1wbGVuOwotCX0KLQotCS8qIHVwZGF0ZSBjdXJic3NwYXJhbXMgKi8KLQlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCA9IGJzcy0+cGh5cGFyYW1zZXQuZHNwYXJhbXNldC5jdXJyZW50Y2hhbjsKLQotCWlmIChsYnNfcGFyc2VfZG5sZF9jb3VudHJ5aW5mb18xMWQocHJpdiwgYnNzKSkgewotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQotCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpIChwb3MgLSAodTggKikgcGFzc28pICsgU19EU19HRU4pOwotCi0JLyogc2V0IHRoZSBjYXBhYmlsaXR5IGluZm8gKi8KLQl0bXBjYXAgPSAoYnNzLT5jYXBhYmlsaXR5ICYgQ0FQSU5GT19NQVNLKTsKLQlpZiAoYnNzLT5tb2RlID09IElXX01PREVfSU5GUkEpCi0JCXRtcGNhcCB8PSBXTEFOX0NBUEFCSUxJVFlfRVNTOwotCXBhc3NvLT5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYodG1wY2FwKTsKLQlsYnNfZGViX2Fzc29jKCJBU1NPQ19DTUQ6IGNhcGFiaWxpdHkgMHglMDR4XG4iLCB0bXBjYXApOwotCi1kb25lOgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0FTU09DLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgbGJzX2NtZF84MDIxMV9hZF9ob2Nfc3RhcnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqcGRhdGFfYnVmKQotewotCXN0cnVjdCBjbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCAqYWRocyA9ICZjbWQtPnBhcmFtcy5hZHM7Ci0JaW50IHJldCA9IDA7Ci0JaW50IGNtZGFwcGVuZHNpemUgPSAwOwotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxID0gcGRhdGFfYnVmOwotCXUxNiB0bXBjYXAgPSAwOwotCXNpemVfdCByYXRlc2l6ZSA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfSk9JTik7Ci0KLQlpZiAoIXByaXYpIHsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX0FEX0hPQ19TVEFSVCk7Ci0KLQkvKgotCSAqIEZpbGwgaW4gdGhlIHBhcmFtZXRlcnMgZm9yIDIgZGF0YSBzdHJ1Y3R1cmVzOgotCSAqICAgMS4gY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgY29tbWFuZAotCSAqICAgMi4gcHJpdi0+c2NhbnRhYmxlW2ldCi0JICoKLQkgKiBEcml2ZXIgd2lsbCBmaWxsIHVwIFNTSUQsIGJzc3R5cGUsSUJTUyBwYXJhbSwgUGh5c2ljYWwgUGFyYW0sCi0JICogICBwcm9iZSBkZWxheSwgYW5kIGNhcCBpbmZvLgotCSAqCi0JICogRmlybXdhcmUgd2lsbCBmaWxsIHVwIGJlYWNvbiBwZXJpb2QsIERUSU0sIEJhc2ljIHJhdGVzCi0JICogICBhbmQgb3BlcmF0aW9uYWwgcmF0ZXMuCi0JICovCi0KLQltZW1zZXQoYWRocy0+c3NpZCwgMCwgSVdfRVNTSURfTUFYX1NJWkUpOwotCW1lbWNweShhZGhzLT5zc2lkLCBhc3NvY19yZXEtPnNzaWQsIGFzc29jX3JlcS0+c3NpZF9sZW4pOwotCi0JbGJzX2RlYl9qb2luKCJBREhPQ19TX0NNRDogU1NJRCAnJXMnLCBzc2lkIGxlbmd0aCAldVxuIiwKLQkgICAgICAgICAgICAgZXNjYXBlX2Vzc2lkKGFzc29jX3JlcS0+c3NpZCwgYXNzb2NfcmVxLT5zc2lkX2xlbiksCi0JICAgICAgICAgICAgIGFzc29jX3JlcS0+c3NpZF9sZW4pOwotCi0JLyogc2V0IHRoZSBCU1MgdHlwZSAqLwotCWFkaHMtPmJzc3R5cGUgPSBDTURfQlNTX1RZUEVfSUJTUzsKLQlwcml2LT5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQlpZiAocHJpdi0+YmVhY29uX3BlcmlvZCA9PSAwKQotCQlwcml2LT5iZWFjb25fcGVyaW9kID0gTVJWRFJWX0JFQUNPTl9JTlRFUlZBTDsKLQlhZGhzLT5iZWFjb25wZXJpb2QgPSBjcHVfdG9fbGUxNihwcml2LT5iZWFjb25fcGVyaW9kKTsKLQotCS8qIHNldCBQaHlzaWNhbCBwYXJhbSBzZXQgKi8KLSNkZWZpbmUgRFNfUEFSQV9JRV9JRCAgIDMKLSNkZWZpbmUgRFNfUEFSQV9JRV9MRU4gIDEKLQotCWFkaHMtPnBoeXBhcmFtc2V0LmRzcGFyYW1zZXQuZWxlbWVudGlkID0gRFNfUEFSQV9JRV9JRDsKLQlhZGhzLT5waHlwYXJhbXNldC5kc3BhcmFtc2V0LmxlbiA9IERTX1BBUkFfSUVfTEVOOwotCi0JV0FSTl9PTighYXNzb2NfcmVxLT5jaGFubmVsKTsKLQotCWxic19kZWJfam9pbigiQURIT0NfU19DTUQ6IENyZWF0aW5nIEFESE9DIG9uIGNoYW5uZWwgJWRcbiIsCi0JCSAgICAgYXNzb2NfcmVxLT5jaGFubmVsKTsKLQotCWFkaHMtPnBoeXBhcmFtc2V0LmRzcGFyYW1zZXQuY3VycmVudGNoYW4gPSBhc3NvY19yZXEtPmNoYW5uZWw7Ci0KLQkvKiBzZXQgSUJTUyBwYXJhbSBzZXQgKi8KLSNkZWZpbmUgSUJTU19QQVJBX0lFX0lEICAgNgotI2RlZmluZSBJQlNTX1BBUkFfSUVfTEVOICAyCi0KLQlhZGhzLT5zc3BhcmFtc2V0Lmlic3NwYXJhbXNldC5lbGVtZW50aWQgPSBJQlNTX1BBUkFfSUVfSUQ7Ci0JYWRocy0+c3NwYXJhbXNldC5pYnNzcGFyYW1zZXQubGVuID0gSUJTU19QQVJBX0lFX0xFTjsKLQlhZGhzLT5zc3BhcmFtc2V0Lmlic3NwYXJhbXNldC5hdGltd2luZG93ID0gMDsKLQotCS8qIHNldCBjYXBhYmlsaXR5IGluZm8gKi8KLQl0bXBjYXAgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKLQlpZiAoYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkKSB7Ci0JCWxic19kZWJfam9pbigiQURIT0NfU19DTUQ6IFdFUCBlbmFibGVkLCBzZXR0aW5nIHByaXZhY3kgb25cbiIpOwotCQl0bXBjYXAgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JfSBlbHNlIHsKLQkJbGJzX2RlYl9qb2luKCJBREhPQ19TX0NNRDogV0VQIGRpc2FibGVkLCBzZXR0aW5nIHByaXZhY3kgb2ZmXG4iKTsKLQl9Ci0JYWRocy0+Y2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KHRtcGNhcCk7Ci0KLQkvKiBwcm9iZWRlbGF5ICovCi0JYWRocy0+cHJvYmVkZWxheSA9IGNwdV90b19sZTE2KENNRF9TQ0FOX1BST0JFX0RFTEFZX1RJTUUpOwotCi0JbWVtc2V0KGFkaHMtPnJhdGVzLCAwLCBzaXplb2YoYWRocy0+cmF0ZXMpKTsKLQlyYXRlc2l6ZSA9IG1pbihzaXplb2YoYWRocy0+cmF0ZXMpLCBzaXplb2YobGJzX2JnX3JhdGVzKSk7Ci0JbWVtY3B5KGFkaHMtPnJhdGVzLCBsYnNfYmdfcmF0ZXMsIHJhdGVzaXplKTsKLQotCS8qIENvcHkgdGhlIGFkLWhvYyBjcmVhdGluZyByYXRlcyBpbnRvIEN1cnJlbnQgQlNTIHN0YXRlIHN0cnVjdHVyZSAqLwotCW1lbXNldCgmcHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzLCAwLCBzaXplb2YocHJpdi0+Y3VyYnNzcGFyYW1zLnJhdGVzKSk7Ci0JbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsICZhZGhzLT5yYXRlcywgcmF0ZXNpemUpOwotCi0JLyogU2V0IE1TQiBvbiBiYXNpYyByYXRlcyBhcyB0aGUgZmlybXdhcmUgcmVxdWlyZXMsIGJ1dCBfYWZ0ZXJfCi0JICogY29weWluZyB0byBjdXJyZW50IGJzcyByYXRlcy4KLQkgKi8KLQlsYnNfc2V0X2Jhc2ljX3JhdGVfZmxhZ3MoYWRocy0+cmF0ZXMsIHJhdGVzaXplKTsKLQotCWxic19kZWJfam9pbigiQURIT0NfU19DTUQ6IHJhdGVzPSUwMnggJTAyeCAlMDJ4ICUwMnggXG4iLAotCSAgICAgICBhZGhzLT5yYXRlc1swXSwgYWRocy0+cmF0ZXNbMV0sIGFkaHMtPnJhdGVzWzJdLCBhZGhzLT5yYXRlc1szXSk7Ci0KLQlsYnNfZGViX2pvaW4oIkFESE9DX1NfQ01EOiBBRCBIT0MgU3RhcnQgY29tbWFuZCBpcyByZWFkeVxuIik7Ci0KLQlpZiAobGJzX2NyZWF0ZV9kbmxkX2NvdW50cnlpbmZvXzExZChwcml2KSkgewotCQlsYnNfZGViX2pvaW4oIkFESE9DX1NfQ01EOiBkbmxkX2NvdW50cnlpbmZvXzExZCBmYWlsZWRcbiIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQotCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQpICsKLQkJCQlTX0RTX0dFTiArIGNtZGFwcGVuZHNpemUpOwotCi0JcmV0ID0gMDsKLWRvbmU6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfSk9JTiwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGxic19jbWRfODAyMTFfYWRfaG9jX3N0b3Aoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kKQotewotCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KENNRF84MDJfMTFfQURfSE9DX1NUT1ApOwotCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgbGJzX2NtZF84MDIxMV9hZF9ob2Nfam9pbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsIHZvaWQgKnBkYXRhX2J1ZikKLXsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbiAqam9pbl9jbWQgPSAmY21kLT5wYXJhbXMuYWRqOwotCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxID0gcGRhdGFfYnVmOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzID0gJmFzc29jX3JlcS0+YnNzOwotCWludCBjbWRhcHBlbmRzaXplID0gMDsKLQlpbnQgcmV0ID0gMDsKLQl1MTYgcmF0ZXNpemUgPSAwOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0pPSU4pOwotCi0JY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9BRF9IT0NfSk9JTik7Ci0KLQlqb2luX2NtZC0+YnNzLnR5cGUgPSBDTURfQlNTX1RZUEVfSUJTUzsKLQlqb2luX2NtZC0+YnNzLmJlYWNvbnBlcmlvZCA9IGNwdV90b19sZTE2KGJzcy0+YmVhY29ucGVyaW9kKTsKLQotCW1lbWNweSgmam9pbl9jbWQtPmJzcy5ic3NpZCwgJmJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkoJmpvaW5fY21kLT5ic3Muc3NpZCwgJmJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbik7Ci0KLQltZW1jcHkoJmpvaW5fY21kLT5ic3MucGh5cGFyYW1zZXQsICZic3MtPnBoeXBhcmFtc2V0LAotCSAgICAgICBzaXplb2YodW5pb24gaWVlZXR5cGVzX3BoeXBhcmFtc2V0KSk7Ci0KLQltZW1jcHkoJmpvaW5fY21kLT5ic3Muc3NwYXJhbXNldCwgJmJzcy0+c3NwYXJhbXNldCwKLQkgICAgICAgc2l6ZW9mKHVuaW9uIElFRUV0eXBlc19zc3BhcmFtc2V0KSk7Ci0KLQlqb2luX2NtZC0+YnNzLmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihic3MtPmNhcGFiaWxpdHkgJiBDQVBJTkZPX01BU0spOwotCWxic19kZWJfam9pbigiQURIT0NfSl9DTUQ6IHRtcGNhcD0lNFggQ0FQSU5GT19NQVNLPSU0WFxuIiwKLQkgICAgICAgYnNzLT5jYXBhYmlsaXR5LCBDQVBJTkZPX01BU0spOwotCi0JLyogaW5mb3JtYXRpb24gb24gQlNTSUQgZGVzY3JpcHRvciBwYXNzZWQgdG8gRlcgKi8KLQlsYnNfZGViX2pvaW4oCi0JICAgICAgICJBREhPQ19KX0NNRDogQlNTSUQgPSAlcywgU1NJRCA9ICclcydcbiIsCi0JICAgICAgIHByaW50X21hYyhtYWMsIGpvaW5fY21kLT5ic3MuYnNzaWQpLAotCSAgICAgICBqb2luX2NtZC0+YnNzLnNzaWQpOwotCi0JLyogZmFpbHRpbWVvdXQgKi8KLQlqb2luX2NtZC0+ZmFpbHRpbWVvdXQgPSBjcHVfdG9fbGUxNihNUlZEUlZfQVNTT0NJQVRJT05fVElNRV9PVVQpOwotCi0JLyogcHJvYmVkZWxheSAqLwotCWpvaW5fY21kLT5wcm9iZWRlbGF5ID0gY3B1X3RvX2xlMTYoQ01EX1NDQU5fUFJPQkVfREVMQVlfVElNRSk7Ci0KLQlwcml2LT5jdXJic3NwYXJhbXMuY2hhbm5lbCA9IGJzcy0+Y2hhbm5lbDsKLQotCS8qIENvcHkgRGF0YSByYXRlcyBmcm9tIHRoZSByYXRlcyByZWNvcmRlZCBpbiBzY2FuIHJlc3BvbnNlICovCi0JbWVtc2V0KGpvaW5fY21kLT5ic3MucmF0ZXMsIDAsIHNpemVvZihqb2luX2NtZC0+YnNzLnJhdGVzKSk7Ci0JcmF0ZXNpemUgPSBtaW5fdCh1MTYsIHNpemVvZihqb2luX2NtZC0+YnNzLnJhdGVzKSwgTUFYX1JBVEVTKTsKLQltZW1jcHkoam9pbl9jbWQtPmJzcy5yYXRlcywgYnNzLT5yYXRlcywgcmF0ZXNpemUpOwotCWlmIChnZXRfY29tbW9uX3JhdGVzKHByaXYsIGpvaW5fY21kLT5ic3MucmF0ZXMsICZyYXRlc2l6ZSkpIHsKLQkJbGJzX2RlYl9qb2luKCJBREhPQ19KX0NNRDogZ2V0X2NvbW1vbl9yYXRlcyByZXR1cm5zIGVycm9yLlxuIik7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyogQ29weSB0aGUgYWQtaG9jIGNyZWF0aW5nIHJhdGVzIGludG8gQ3VycmVudCBCU1Mgc3RhdGUgc3RydWN0dXJlICovCi0JbWVtc2V0KCZwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsIDAsIHNpemVvZihwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMpKTsKLQltZW1jcHkoJnByaXYtPmN1cmJzc3BhcmFtcy5yYXRlcywgam9pbl9jbWQtPmJzcy5yYXRlcywgcmF0ZXNpemUpOwotCi0JLyogU2V0IE1TQiBvbiBiYXNpYyByYXRlcyBhcyB0aGUgZmlybXdhcmUgcmVxdWlyZXMsIGJ1dCBfYWZ0ZXJfCi0JICogY29weWluZyB0byBjdXJyZW50IGJzcyByYXRlcy4KLQkgKi8KLQlsYnNfc2V0X2Jhc2ljX3JhdGVfZmxhZ3Moam9pbl9jbWQtPmJzcy5yYXRlcywgcmF0ZXNpemUpOwotCi0Jam9pbl9jbWQtPmJzcy5zc3BhcmFtc2V0Lmlic3NwYXJhbXNldC5hdGltd2luZG93ID0KLQkgICAgY3B1X3RvX2xlMTYoYnNzLT5hdGltd2luZG93KTsKLQotCWlmIChhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQpIHsKLQkJdTE2IHRtcCA9IGxlMTZfdG9fY3B1KGpvaW5fY21kLT5ic3MuY2FwYWJpbGl0eSk7Ci0JCXRtcCB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQkJam9pbl9jbWQtPmJzcy5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYodG1wKTsKLQl9Ci0KLQlpZiAocHJpdi0+cHNtb2RlID09IExCUzgwMl8xMVBPV0VSTU9ERU1BWF9QU1ApIHsKLQkJLyogd2FrZSB1cCBmaXJzdCAqLwotCQlfX2xlMzIgTG9jYWxwc21vZGU7Ci0KLQkJTG9jYWxwc21vZGUgPSBjcHVfdG9fbGUzMihMQlM4MDJfMTFQT1dFUk1PREVDQU0pOwotCQlyZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJCSAgICBDTURfODAyXzExX1BTX01PREUsCi0JCQkJCSAgICBDTURfQUNUX1NFVCwKLQkJCQkJICAgIDAsIDAsICZMb2NhbHBzbW9kZSk7Ci0KLQkJaWYgKHJldCkgewotCQkJcmV0ID0gLTE7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQl9Ci0KLQlpZiAobGJzX3BhcnNlX2RubGRfY291bnRyeWluZm9fMTFkKHByaXYsIGJzcykpIHsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGNtZF9kc184MDJfMTFfYWRfaG9jX2pvaW4pICsKLQkJCQlTX0RTX0dFTiArIGNtZGFwcGVuZHNpemUpOwotCi1kb25lOgotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0pPSU4sICJyZXQgJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBsYnNfcmV0XzgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApCi17Ci0JaW50IHJldCA9IDA7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCXN0cnVjdCBpZWVldHlwZXNfYXNzb2Nyc3AgKnBhc3NvY3JzcDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBic3M7Ci0JdTE2IHN0YXR1c19jb2RlOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0FTU09DKTsKLQotCWlmICghcHJpdi0+aW5fcHJvZ3Jlc3NfYXNzb2NfcmVxKSB7Ci0JCWxic19kZWJfYXNzb2MoIkFTU09DX1JFU1A6IG5vIGluLXByb2dyZXNzIGFzc29jIHJlcXVlc3RcbiIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQlic3MgPSAmcHJpdi0+aW5fcHJvZ3Jlc3NfYXNzb2NfcmVxLT5ic3M7Ci0KLQlwYXNzb2Nyc3AgPSAoc3RydWN0IGllZWV0eXBlc19hc3NvY3JzcCAqKSAmIHJlc3AtPnBhcmFtczsKLQotCS8qCi0JICogT2xkZXIgRlcgdmVyc2lvbnMgbWFwIHRoZSBJRUVFIDgwMi4xMSBTdGF0dXMgQ29kZSBpbiB0aGUgYXNzb2NpYXRpb24KLQkgKiByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIHZhbHVlcyByZXR1cm5lZCBpbiBwYXNzb2Nyc3AtPnN0YXR1c2NvZGU6Ci0JICoKLQkgKiAgICBJRUVFIFN0YXR1cyBDb2RlICAgICAgICAgICAgICAgIE1hcnZlbGwgU3RhdHVzIENvZGUKLQkgKiAgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwMCBBU1NPQ19SRVNVTFRfU1VDQ0VTUwotCSAqICAgIDEzICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgMHgwMDA0IEFTU09DX1JFU1VMVF9BVVRIX1JFRlVTRUQKLQkgKiAgICAxNCAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwNCBBU1NPQ19SRVNVTFRfQVVUSF9SRUZVU0VECi0JICogICAgMTUgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAweDAwMDQgQVNTT0NfUkVTVUxUX0FVVEhfUkVGVVNFRAotCSAqICAgIDE2ICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgMHgwMDA0IEFTU09DX1JFU1VMVF9BVVRIX1JFRlVTRUQKLQkgKiAgICBvdGhlcnMgICAgICAgICAgICAgICAgICAtPiAgICAgIDB4MDAwMyBBU1NPQ19SRVNVTFRfUkVGVVNFRAotCSAqCi0JICogT3RoZXIgcmVzcG9uc2UgY29kZXM6Ci0JICogICAgMHgwMDAxIC0+IEFTU09DX1JFU1VMVF9JTlZBTElEX1BBUkFNRVRFUlMgKHVudXNlZCkKLQkgKiAgICAweDAwMDIgLT4gQVNTT0NfUkVTVUxUX1RJTUVPVVQgKGludGVybmFsIHRpbWVyIGV4cGlyZWQgd2FpdGluZyBmb3IKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0aW9uIHJlc3BvbnNlIGZyb20gdGhlIEFQKQotCSAqLwotCi0Jc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShwYXNzb2Nyc3AtPnN0YXR1c2NvZGUpOwotCXN3aXRjaCAoc3RhdHVzX2NvZGUpIHsKLQljYXNlIDB4MDA6Ci0JCWJyZWFrOwotCWNhc2UgMHgwMToKLQkJbGJzX2RlYl9hc3NvYygiQVNTT0NfUkVTUDogaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyOgotCQlsYnNfZGViX2Fzc29jKCJBU1NPQ19SRVNQOiBpbnRlcm5hbCB0aW1lciAiCi0JCQkiZXhwaXJlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgQVBcbiIpOwotCQlicmVhazsKLQljYXNlIDB4MDM6Ci0JCWxic19kZWJfYXNzb2MoIkFTU09DX1JFU1A6IGFzc29jaWF0aW9uICIKLQkJCSJyZWZ1c2VkIGJ5IEFQXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDA0OgotCQlsYnNfZGViX2Fzc29jKCJBU1NPQ19SRVNQOiBhdXRoZW50aWNhdGlvbiAiCi0JCQkicmVmdXNlZCBieSBBUFxuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWxic19kZWJfYXNzb2MoIkFTU09DX1JFU1A6IGZhaWx1cmUgcmVhc29uIDB4JTAyeCAiCi0JCQkiIHVua25vd25cbiIsIHN0YXR1c19jb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHN0YXR1c19jb2RlKSB7Ci0JCWxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHByaXYpOwotCQlyZXQgPSAtMTsKLQkJZ290byBkb25lOwotCX0KLQotCWxic19kZWJfaGV4KExCU19ERUJfQVNTT0MsICJBU1NPQ19SRVNQIiwgKHZvaWQgKikmcmVzcC0+cGFyYW1zLAotCQlsZTE2X3RvX2NwdShyZXNwLT5zaXplKSAtIFNfRFNfR0VOKTsKLQotCS8qIFNlbmQgYSBNZWRpYSBDb25uZWN0ZWQgZXZlbnQsIGFjY29yZGluZyB0byB0aGUgU3BlYyAqLwotCXByaXYtPmNvbm5lY3Rfc3RhdHVzID0gTEJTX0NPTk5FQ1RFRDsKLQotCS8qIFVwZGF0ZSBjdXJyZW50IFNTSUQgYW5kIEJTU0lEICovCi0JbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwgJmJzcy0+c3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOwotCXByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiA9IGJzcy0+c3NpZF9sZW47Ci0JbWVtY3B5KHByaXYtPmN1cmJzc3BhcmFtcy5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0JbGJzX2RlYl9hc3NvYygiQVNTT0NfUkVTUDogY3VycmVudHBhY2tldGZpbHRlciBpcyAweCV4XG4iLAotCQlwcml2LT5jdXJyZW50cGFja2V0ZmlsdGVyKTsKLQotCXByaXYtPlNOUltUWVBFX1JYUERdW1RZUEVfQVZHXSA9IDA7Ci0JcHJpdi0+TkZbVFlQRV9SWFBEXVtUWVBFX0FWR10gPSAwOwotCi0JbWVtc2V0KHByaXYtPnJhd1NOUiwgMHgwMCwgc2l6ZW9mKHByaXYtPnJhd1NOUikpOwotCW1lbXNldChwcml2LT5yYXdORiwgMHgwMCwgc2l6ZW9mKHByaXYtPnJhd05GKSk7Ci0JcHJpdi0+bmV4dFNOUk5GID0gMDsKLQlwcml2LT5udW1TTlJORiA9IDA7Ci0KLQluZXRpZl9jYXJyaWVyX29uKHByaXYtPmRldik7Ci0JaWYgKCFwcml2LT50eF9wZW5kaW5nX2xlbikKLQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwotCi0JbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsIEVUSF9BTEVOKTsKLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLQotZG9uZToKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9BU1NPQywgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGxic19yZXRfODAyMTFfZGlzYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKQotewotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9KT0lOKTsKLQotCWxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHByaXYpOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX0pPSU4pOwotCXJldHVybiAwOwotfQotCi1pbnQgbGJzX3JldF84MDIxMV9hZF9ob2Nfc3RhcnQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApCi17Ci0JaW50IHJldCA9IDA7Ci0JdTE2IGNvbW1hbmQgPSBsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKTsKLQl1MTYgcmVzdWx0ID0gbGUxNl90b19jcHUocmVzcC0+cmVzdWx0KTsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2NfcmVzdWx0ICpwYWRob2NyZXN1bHQ7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX0pPSU4pOwotCi0JcGFkaG9jcmVzdWx0ID0gJnJlc3AtPnBhcmFtcy5yZXN1bHQ7Ci0KLQlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IHNpemUgPSAlZFxuIiwgbGUxNl90b19jcHUocmVzcC0+c2l6ZSkpOwotCWxic19kZWJfam9pbigiQURIT0NfUkVTUDogY29tbWFuZCA9ICV4XG4iLCBjb21tYW5kKTsKLQlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IHJlc3VsdCA9ICV4XG4iLCByZXN1bHQpOwotCi0JaWYgKCFwcml2LT5pbl9wcm9ncmVzc19hc3NvY19yZXEpIHsKLQkJbGJzX2RlYl9qb2luKCJBREhPQ19SRVNQOiBubyBpbi1wcm9ncmVzcyBhc3NvY2lhdGlvbiByZXF1ZXN0XG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JYnNzID0gJnByaXYtPmluX3Byb2dyZXNzX2Fzc29jX3JlcS0+YnNzOwotCi0JLyoKLQkgKiBKb2luIHJlc3VsdCBjb2RlIDAgLS0+IFNVQ0NFU1MKLQkgKi8KLQlpZiAocmVzdWx0KSB7Ci0JCWxic19kZWJfam9pbigiQURIT0NfUkVTUDogZmFpbGVkXG4iKTsKLQkJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKLQkJCWxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHByaXYpOwotCQl9Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyoKLQkgKiBOb3cgdGhlIGpvaW4gY21kIHNob3VsZCBiZSBzdWNjZXNzZnVsCi0JICogSWYgQlNTSUQgaGFzIGNoYW5nZWQgdXNlIFNTSUQgdG8gY29tcGFyZSBpbnN0ZWFkIG9mIEJTU0lECi0JICovCi0JbGJzX2RlYl9qb2luKCJBREhPQ19SRVNQOiBhc3NvY2lhdGVkIHRvICclcydcbiIsCi0JICAgICAgICAgICAgIGVzY2FwZV9lc3NpZChic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pKTsKLQotCS8qIFNlbmQgYSBNZWRpYSBDb25uZWN0ZWQgZXZlbnQsIGFjY29yZGluZyB0byB0aGUgU3BlYyAqLwotCXByaXYtPmNvbm5lY3Rfc3RhdHVzID0gTEJTX0NPTk5FQ1RFRDsKLQotCWlmIChjb21tYW5kID09IENNRF9SRVQoQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQpKSB7Ci0JCS8qIFVwZGF0ZSB0aGUgY3JlYXRlZCBuZXR3b3JrIGRlc2NyaXB0b3Igd2l0aCB0aGUgbmV3IEJTU0lEICovCi0JCW1lbWNweShic3MtPmJzc2lkLCBwYWRob2NyZXN1bHQtPmJzc2lkLCBFVEhfQUxFTik7Ci0JfQotCi0JLyogU2V0IHRoZSBCU1NJRCBmcm9tIHRoZSBqb2luZWQvc3RhcnRlZCBkZXNjcmlwdG9yICovCi0JbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuYnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCS8qIFNldCB0aGUgbmV3IFNTSUQgdG8gY3VycmVudCBTU0lEICovCi0JbWVtY3B5KCZwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwgJmJzcy0+c3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOwotCXByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiA9IGJzcy0+c3NpZF9sZW47Ci0KLQluZXRpZl9jYXJyaWVyX29uKHByaXYtPmRldik7Ci0JaWYgKCFwcml2LT50eF9wZW5kaW5nX2xlbikKLQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwotCi0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgcHJpdi0+Y3VyYnNzcGFyYW1zLmJzc2lkLCBFVEhfQUxFTik7Ci0Jd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0KLQlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IC0gSm9pbmVkL1N0YXJ0ZWQgQWQgSG9jXG4iKTsKLQlsYnNfZGViX2pvaW4oIkFESE9DX1JFU1A6IGNoYW5uZWwgPSAlZFxuIiwgcHJpdi0+Y3VyYnNzcGFyYW1zLmNoYW5uZWwpOwotCWxic19kZWJfam9pbigiQURIT0NfUkVTUDogQlNTSUQgPSAlc1xuIiwKLQkJICAgICBwcmludF9tYWMobWFjLCBwYWRob2NyZXN1bHQtPmJzc2lkKSk7Ci0KLWRvbmU6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfSk9JTiwgInJldCAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGxic19yZXRfODAyMTFfYWRfaG9jX3N0b3Aoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCkKLXsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfSk9JTik7Ci0KLQlsYnNfbWFjX2V2ZW50X2Rpc2Nvbm5lY3RlZChwcml2KTsKLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9KT0lOKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2pvaW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2pvaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxN2QwNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9qb2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioKLSAgKiBJbnRlcmZhY2UgZm9yIHRoZSB3bGFuIGluZnJhc3RydWN0dXJlIGFuZCBhZGhvYyBqb2luIHJvdXRpbmVzCi0gICoKLSAgKiBEcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhbmQgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBqb2luIG1vZHVsZQotICAqICAgaW1wbGVtZW50ZWQgaW4gam9pbi5jLiAgUHJvY2VzcyBhbGwgc3RhcnQvam9pbiByZXF1ZXN0cyBmb3IKLSAgKiAgIGJvdGggYWRob2MgYW5kIGluZnJhc3RydWN0dXJlIG5ldHdvcmtzCi0gICovCi0jaWZuZGVmIF9MQlNfSk9JTl9ICi0jZGVmaW5lIF9MQlNfSk9JTl9ICi0KLSNpbmNsdWRlICJkZWZzLmgiCi0jaW5jbHVkZSAiZGV2LmgiCi0KLXN0cnVjdCBjbWRfZHNfY29tbWFuZDsKLWludCBsYnNfY21kXzgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAotCQkJCQl2b2lkICpwZGF0YV9idWYpOwotaW50IGxic19jbWRfODAyMTFfYWRfaG9jX2pvaW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKmNtZCwKLQkJCQkgICAgICAgdm9pZCAqcGRhdGFfYnVmKTsKLWludCBsYnNfY21kXzgwMjExX2FkX2hvY19zdG9wKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQpOwotaW50IGxic19jbWRfODAyMTFfYWRfaG9jX3N0YXJ0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCi0JCQkJCXZvaWQgKnBkYXRhX2J1Zik7Ci1pbnQgbGJzX2NtZF84MDIxMV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJCSAgc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQpOwotaW50IGxic19jbWRfODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgIHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAotCQkJCSAgICAgdm9pZCAqcGRhdGFfYnVmKTsKLQotaW50IGxic19yZXRfODAyMTFfYWRfaG9jX3N0YXJ0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkJc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKTsKLWludCBsYnNfcmV0XzgwMjExX2FkX2hvY19zdG9wKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKTsKLWludCBsYnNfcmV0XzgwMjExX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCk7Ci1pbnQgbGJzX3JldF84MDIxMV9hc3NvY2lhdGUoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCSAgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKTsKLQotaW50IGxic19zdGFydF9hZGhvY19uZXR3b3JrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSAgICAgc3RydWN0IGFzc29jX3JlcXVlc3QgKiBhc3NvY19yZXEpOwotaW50IGxic19qb2luX2FkaG9jX25ldHdvcmsoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogYXNzb2NfcmVxKTsKLWludCBsYnNfc3RvcF9hZGhvY19uZXR3b3JrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Ci0KLWludCBsYnNfc2VuZF9kZWF1dGhlbnRpY2F0aW9uKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7Ci0KLWludCBsYnNfYXNzb2NpYXRlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSk7Ci0KLXZvaWQgbGJzX3Vuc2V0X2Jhc2ljX3JhdGVfZmxhZ3ModTggKnJhdGVzLCBzaXplX3QgbGVuKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKaW5kZXggODRmYjQ5Yy4uNDA2ZjU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CkBAIC0xOSw4ICsyMCw4IEBACiAjaW5jbHVkZSAiZGV2LmgiCiAjaW5jbHVkZSAid2V4dC5oIgogI2luY2x1ZGUgImRlYnVnZnMuaCIKKyNpbmNsdWRlICJzY2FuLmgiCiAjaW5jbHVkZSAiYXNzb2MuaCIKLSNpbmNsdWRlICJqb2luLmgiCiAjaW5jbHVkZSAiY21kLmgiCiAKICNkZWZpbmUgRFJJVkVSX1JFTEVBU0VfVkVSU0lPTiAiMzIzLnAwIgpAQCAtMzcsNiArMzgsMTEgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChsaWJlcnRhc19kZWJ1ZywgbGJzX2RlYnVnLCBpbnQsIDA2NDQpOwogCiAKKy8qIFRoaXMgZ2xvYmFsIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHNlbmQgdGhlIGNvbmZpcm1fc2xlZXAgY29tbWFuZCBhcworICogZmFzdCBhcyBwb3NzaWJsZSBkb3duIHRvIHRoZSBmaXJtd2FyZS4gKi8KK3N0cnVjdCBjbWRfY29uZmlybV9zbGVlcCBjb25maXJtX3NsZWVwOworCisKICNkZWZpbmUgTEJTX1RYX1BXUl9ERUZBVUxUCQkyMAkvKjEwMG1XICovCiAjZGVmaW5lIExCU19UWF9QV1JfVVNfREVGQVVMVAkJMjAJLyoxMDBtVyAqLwogI2RlZmluZSBMQlNfVFhfUFdSX0pQX0RFRkFVTFQJCTE2CS8qNTBtVyAqLwpAQCAtMjc3LDEwICsyODMsMTAgQEAKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB0b19uZXRfZGV2KGRldiktPnByaXY7CiAKIAlzc2NhbmYoYnVmLCAiJXgiLCAmbW9uaXRvcl9tb2RlKTsKLQlpZiAobW9uaXRvcl9tb2RlICE9IExCU19NT05JVE9SX09GRikgewotCQlpZihwcml2LT5tb25pdG9ybW9kZSA9PSBtb25pdG9yX21vZGUpCisJaWYgKG1vbml0b3JfbW9kZSkgeworCQlpZiAocHJpdi0+bW9uaXRvcm1vZGUgPT0gbW9uaXRvcl9tb2RlKQogCQkJcmV0dXJuIHN0cmxlbihidWYpOwotCQlpZiAocHJpdi0+bW9uaXRvcm1vZGUgPT0gTEJTX01PTklUT1JfT0ZGKSB7CisJCWlmICghcHJpdi0+bW9uaXRvcm1vZGUpIHsKIAkJCWlmIChwcml2LT5pbmZyYV9vcGVuIHx8IHByaXYtPm1lc2hfb3BlbikKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJaWYgKHByaXYtPm1vZGUgPT0gSVdfTU9ERV9JTkZSQSkKQEAgLTI5Myw5ICsyOTksOSBAQAogCX0KIAogCWVsc2UgewotCQlpZiAocHJpdi0+bW9uaXRvcm1vZGUgPT0gTEJTX01PTklUT1JfT0ZGKQorCQlpZiAoIXByaXYtPm1vbml0b3Jtb2RlKQogCQkJcmV0dXJuIHN0cmxlbihidWYpOwotCQlwcml2LT5tb25pdG9ybW9kZSA9IExCU19NT05JVE9SX09GRjsKKwkJcHJpdi0+bW9uaXRvcm1vZGUgPSAwOwogCQlsYnNfcmVtb3ZlX3J0YXAocHJpdik7CiAKIAkJaWYgKHByaXYtPmN1cnJlbnR0eHNrYikgewpAQCAtMzkyLDcgKzM5OCw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7CiAKLQlpZiAocHJpdi0+bW9uaXRvcm1vZGUgIT0gTEJTX01PTklUT1JfT0ZGKSB7CisJaWYgKHByaXYtPm1vbml0b3Jtb2RlKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDc1LDEwICs0ODEsOSBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlpZiAocHJpdi0+Y3VycmVudHR4c2tiKSB7Ci0JCXByaXYtPmV2ZW50Y2F1c2UgPSAweDAxMDAwMDAwOwotCQlsYnNfc2VuZF90eF9mZWVkYmFjayhwcml2KTsKLQl9CisJaWYgKHByaXYtPmN1cnJlbnR0eHNrYikKKwkJbGJzX3NlbmRfdHhfZmVlZGJhY2socHJpdiwgMCk7CisKIAkvKiBYWDogU2hvdWxkbid0IHdlIGFsc28gY2FsbCBpbnRvIHRoZSBody1zcGVjaWZpYyBkcml2ZXIKIAkgICB0byBraWNrIGl0IHNvbWVob3c/ICovCiAJbGJzX2hvc3RfdG9fY2FyZF9kb25lKHByaXYpOwpAQCAtNTMxLDM0ICs1MzYsMjcgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IGxic19wcml2YXRlICopIGRldi0+cHJpdjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnBod2FkZHIgPSBhZGRyOworCXN0cnVjdCBjbWRfZHNfODAyXzExX21hY19hZGRyZXNzIGNtZDsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOwogCiAJLyogSW4gY2FzZSBpdCB3YXMgY2FsbGVkIGZyb20gdGhlIG1lc2ggZGV2aWNlICovCi0JZGV2ID0gcHJpdi0+ZGV2IDsKKwlkZXYgPSBwcml2LT5kZXY7CiAKLQltZW1zZXQocHJpdi0+Y3VycmVudF9hZGRyLCAwLCBFVEhfQUxFTik7CisJY21kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZCkpOworCWNtZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX1NFVCk7CisJbWVtY3B5KGNtZC5tYWNhZGQsIHBod2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKIAotCS8qIGRldi0+ZGV2X2FkZHIgaXMgOCBieXRlcyAqLwotCWxic19kZWJfaGV4KExCU19ERUJfTkVULCAiZGV2LT5kZXZfYWRkciIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQotCWxic19kZWJfaGV4KExCU19ERUJfTkVULCAiYWRkciIsIHBod2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQltZW1jcHkocHJpdi0+Y3VycmVudF9hZGRyLCBwaHdhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7Ci0KLQlyZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIENNRF84MDJfMTFfTUFDX0FERFJFU1MsCi0JCQkJICAgIENNRF9BQ1RfU0VULAotCQkJCSAgICBDTURfT1BUSU9OX1dBSVRGT1JSU1AsIDAsIE5VTEwpOwotCisJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfTUFDX0FERFJFU1MsICZjbWQpOwogCWlmIChyZXQpIHsKIAkJbGJzX2RlYl9uZXQoInNldCBNQUMgYWRkcmVzcyBmYWlsZWRcbiIpOwotCQlyZXQgPSAtMTsKIAkJZ290byBkb25lOwogCX0KIAotCWxic19kZWJfaGV4KExCU19ERUJfTkVULCAicHJpdi0+bWFjYWRkciIsIHByaXYtPmN1cnJlbnRfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShkZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyZW50X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkocHJpdi0+Y3VycmVudF9hZGRyLCBwaHdhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBod2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKIAlpZiAocHJpdi0+bWVzaF9kZXYpCi0JCW1lbWNweShwcml2LT5tZXNoX2Rldi0+ZGV2X2FkZHIsIHByaXYtPmN1cnJlbnRfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkocHJpdi0+bWVzaF9kZXYtPmRldl9hZGRyLCBwaHdhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAKIGRvbmU6CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfTkVULCAicmV0ICVkIiwgcmV0KTsKQEAgLTU4MSw0NSArNTc5LDQ1IEBACiBzdGF0aWMgdm9pZCBsYnNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OwotCWludCBvbGRwYWNrZXRmaWx0ZXI7CisJaW50IG9sZF9tYWNfY29udHJvbDsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOwogCi0Jb2xkcGFja2V0ZmlsdGVyID0gcHJpdi0+Y3VycmVudHBhY2tldGZpbHRlcjsKKwlvbGRfbWFjX2NvbnRyb2wgPSBwcml2LT5tYWNfY29udHJvbDsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJbGJzX2RlYl9uZXQoImVuYWJsZSBwcm9taXNjdW91cyBtb2RlXG4iKTsKLQkJcHJpdi0+Y3VycmVudHBhY2tldGZpbHRlciB8PQorCQlwcml2LT5tYWNfY29udHJvbCB8PQogCQkgICAgQ01EX0FDVF9NQUNfUFJPTUlTQ1VPVVNfRU5BQkxFOwotCQlwcml2LT5jdXJyZW50cGFja2V0ZmlsdGVyICY9CisJCXByaXYtPm1hY19jb250cm9sICY9CiAJCSAgICB+KENNRF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFIHwKIAkJICAgICAgQ01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRSk7CiAJfSBlbHNlIHsKIAkJLyogTXVsdGljYXN0ICovCi0JCXByaXYtPmN1cnJlbnRwYWNrZXRmaWx0ZXIgJj0KKwkJcHJpdi0+bWFjX2NvbnRyb2wgJj0KIAkJICAgIH5DTURfQUNUX01BQ19QUk9NSVNDVU9VU19FTkFCTEU7CiAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+CiAJCSAgICBNUlZEUlZfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkUpIHsKIAkJCWxic19kZWJfbmV0KCAiZW5hYmxpbmcgYWxsIG11bHRpY2FzdFxuIik7Ci0JCQlwcml2LT5jdXJyZW50cGFja2V0ZmlsdGVyIHw9CisJCQlwcml2LT5tYWNfY29udHJvbCB8PQogCQkJICAgIENNRF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFOwotCQkJcHJpdi0+Y3VycmVudHBhY2tldGZpbHRlciAmPQorCQkJcHJpdi0+bWFjX2NvbnRyb2wgJj0KIAkJCSAgICB+Q01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRTsKIAkJfSBlbHNlIHsKLQkJCXByaXYtPmN1cnJlbnRwYWNrZXRmaWx0ZXIgJj0KKwkJCXByaXYtPm1hY19jb250cm9sICY9CiAJCQkgICAgfkNNRF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFOwogCiAJCQlpZiAoIWRldi0+bWNfY291bnQpIHsKIAkJCQlsYnNfZGViX25ldCgibm8gbXVsdGljYXN0IGFkZHJlc3NlcywgIgogCQkJCSAgICAgICAiZGlzYWJsaW5nIG11bHRpY2FzdFxuIik7Ci0JCQkJcHJpdi0+Y3VycmVudHBhY2tldGZpbHRlciAmPQorCQkJCXByaXYtPm1hY19jb250cm9sICY9CiAJCQkJICAgIH5DTURfQUNUX01BQ19NVUxUSUNBU1RfRU5BQkxFOwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgaTsKIAotCQkJCXByaXYtPmN1cnJlbnRwYWNrZXRmaWx0ZXIgfD0KKwkJCQlwcml2LT5tYWNfY29udHJvbCB8PQogCQkJCSAgICBDTURfQUNUX01BQ19NVUxUSUNBU1RfRU5BQkxFOwogCiAJCQkJcHJpdi0+bnJfb2ZfbXVsdGljYXN0bWFjYWRkciA9CkBAIC02NDIsOSArNjQwLDggQEAKIAkJfQogCX0KIAotCWlmIChwcml2LT5jdXJyZW50cGFja2V0ZmlsdGVyICE9IG9sZHBhY2tldGZpbHRlcikgewotCQlsYnNfc2V0X21hY19wYWNrZXRfZmlsdGVyKHByaXYpOwotCX0KKwlpZiAocHJpdi0+bWFjX2NvbnRyb2wgIT0gb2xkX21hY19jb250cm9sKQorCQlsYnNfc2V0X21hY19jb250cm9sKHByaXYpOwogCiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX05FVCk7CiB9CkBAIC02NjIsNyArNjU5LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPnByaXY7CiAJd2FpdF9xdWV1ZV90IHdhaXQ7Ci0JdTggaXJlZyA9IDA7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfVEhSRUFEKTsKIApAQCAtNjcwLDkgKzY2NiwxMCBAQAogCiAJZm9yICg7OykgewogCQlpbnQgc2hvdWxkc2xlZXA7CisJCXU4IHJlc3BfaWR4OwogCi0JCWxic19kZWJfdGhyZWFkKCAibWFpbi10aHJlYWQgMTExOiBpbnRjb3VudGVyPSVkIGN1cnJlbnR0eHNrYj0lcCBkbmxkX3NlbnQ9JWRcbiIsCi0JCQkJcHJpdi0+aW50Y291bnRlciwgcHJpdi0+Y3VycmVudHR4c2tiLCBwcml2LT5kbmxkX3NlbnQpOworCQlsYnNfZGViX3RocmVhZCgiMTogY3VycmVudHR4c2tiICVwLCBkbmxkX3NlbnQgJWRcbiIsCisJCQkJcHJpdi0+Y3VycmVudHR4c2tiLCBwcml2LT5kbmxkX3NlbnQpOwogCiAJCWFkZF93YWl0X3F1ZXVlKCZwcml2LT53YWl0cSwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtNjg0LDggKzY4MSw2IEBACiAJCQlzaG91bGRzbGVlcCA9IDE7CS8qIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB3ZSdyZSBfdG9sZF8gdG8gZGllICovCiAJCWVsc2UgaWYgKHByaXYtPnBzc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVApCiAJCQlzaG91bGRzbGVlcCA9IDE7CS8qIFNsZWVwIG1vZGUuIE5vdGhpbmcgd2UgY2FuIGRvIHRpbGwgaXQgd2FrZXMgKi8KLQkJZWxzZSBpZiAocHJpdi0+aW50Y291bnRlcikKLQkJCXNob3VsZHNsZWVwID0gMDsJLyogSW50ZXJydXB0IHBlbmRpbmcuIERlYWwgd2l0aCBpdCBub3cgKi8KIAkJZWxzZSBpZiAocHJpdi0+Y21kX3RpbWVkX291dCkKIAkJCXNob3VsZHNsZWVwID0gMDsJLyogQ29tbWFuZCB0aW1lZCBvdXQuIFJlY292ZXIgKi8KIAkJZWxzZSBpZiAoIXByaXYtPmZ3X3JlYWR5KQpAQCAtNjk4LDI5ICs2OTMsMzQgQEAKIAkJCXNob3VsZHNsZWVwID0gMTsJLyogQ2FuJ3Qgc2VuZCBhIGNvbW1hbmQ7IG9uZSBhbHJlYWR5IHJ1bm5pbmcgKi8KIAkJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmNtZHBlbmRpbmdxKSkKIAkJCXNob3VsZHNsZWVwID0gMDsJLyogV2UgaGF2ZSBhIGNvbW1hbmQgdG8gc2VuZCAqLworCQllbHNlIGlmIChfX2tmaWZvX2xlbihwcml2LT5ldmVudF9maWZvKSkKKwkJCXNob3VsZHNsZWVwID0gMDsJLyogV2UgaGF2ZSBhbiBldmVudCB0byBwcm9jZXNzICovCisJCWVsc2UgaWYgKHByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkKKwkJCXNob3VsZHNsZWVwID0gMDsJLyogV2UgaGF2ZSBhIGNvbW1hbmQgcmVzcG9uc2UgKi8KIAkJZWxzZQogCQkJc2hvdWxkc2xlZXAgPSAxOwkvKiBObyBjb21tYW5kICovCiAKIAkJaWYgKHNob3VsZHNsZWVwKSB7Ci0JCQlsYnNfZGViX3RocmVhZCgibWFpbi10aHJlYWQgc2xlZXBpbmcuLi4gQ29ubj0lZCBJbnRDPSVkIFBTX21vZGU9JWQgUFNfU3RhdGU9JWRcbiIsCi0JCQkJICAgICAgIHByaXYtPmNvbm5lY3Rfc3RhdHVzLCBwcml2LT5pbnRjb3VudGVyLAotCQkJCSAgICAgICBwcml2LT5wc21vZGUsIHByaXYtPnBzc3RhdGUpOworCQkJbGJzX2RlYl90aHJlYWQoInNsZWVwaW5nLCBjb25uZWN0X3N0YXR1cyAlZCwgIgorCQkJCSJwc19tb2RlICVkLCBwc19zdGF0ZSAlZFxuIiwKKwkJCQlwcml2LT5jb25uZWN0X3N0YXR1cywKKwkJCQlwcml2LT5wc21vZGUsIHByaXYtPnBzc3RhdGUpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7CiAJCQlzY2hlZHVsZSgpOwogCQl9IGVsc2UKIAkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwogCi0JCWxic19kZWJfdGhyZWFkKCJtYWluLXRocmVhZCAyMjIgKHdha2luZyB1cCk6IGludGNvdW50ZXI9JWQgY3VycmVudHR4c2tiPSVwIGRubGRfc2VudD0lZFxuIiwKLQkJCSAgICAgICBwcml2LT5pbnRjb3VudGVyLCBwcml2LT5jdXJyZW50dHhza2IsIHByaXYtPmRubGRfc2VudCk7CisJCWxic19kZWJfdGhyZWFkKCIyOiBjdXJyZW50dHhza2IgJXAsIGRubGRfc2VuZCAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5jdXJyZW50dHhza2IsIHByaXYtPmRubGRfc2VudCk7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnByaXYtPndhaXRxLCAmd2FpdCk7CiAKLQkJbGJzX2RlYl90aHJlYWQoIm1haW4tdGhyZWFkIDMzMzogaW50Y291bnRlcj0lZCBjdXJyZW50dHhza2I9JXAgZG5sZF9zZW50PSVkXG4iLAotCQkJICAgICAgIHByaXYtPmludGNvdW50ZXIsIHByaXYtPmN1cnJlbnR0eHNrYiwgcHJpdi0+ZG5sZF9zZW50KTsKKwkJbGJzX2RlYl90aHJlYWQoIjM6IGN1cnJlbnR0eHNrYiAlcCwgZG5sZF9zZW50ICVkXG4iLAorCQkJICAgICAgIHByaXYtPmN1cnJlbnR0eHNrYiwgcHJpdi0+ZG5sZF9zZW50KTsKIAogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCQlsYnNfZGViX3RocmVhZCgibWFpbi10aHJlYWQ6IGJyZWFrIGZyb20gbWFpbiB0aHJlYWRcbiIpOworCQkJbGJzX2RlYl90aHJlYWQoImJyZWFrIGZyb20gbWFpbiB0aHJlYWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNzI5LDM1ICs3MjksMjMgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJbGJzX2RlYl90aHJlYWQoIjQ6IGN1cnJlbnR0eHNrYiAlcCwgZG5sZF9zZW50ICVkXG4iLAorCQkgICAgICAgcHJpdi0+Y3VycmVudHR4c2tiLCBwcml2LT5kbmxkX3NlbnQpOworCiAJCXNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKLQotCQlpZiAocHJpdi0+aW50Y291bnRlcikgewotCQkJdTggaW50X3N0YXR1czsKLQotCQkJcHJpdi0+aW50Y291bnRlciA9IDA7Ci0JCQlpbnRfc3RhdHVzID0gcHJpdi0+aHdfZ2V0X2ludF9zdGF0dXMocHJpdiwgJmlyZWcpOwotCi0JCQlpZiAoaW50X3N0YXR1cykgewotCQkJCWxic19kZWJfdGhyZWFkKCJtYWluLXRocmVhZDogcmVhZGluZyBIT1NUX0lOVF9TVEFUVVNfUkVHIGZhaWxlZFxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlwcml2LT5oaXNyZWdjcHkgfD0gaXJlZzsKLQkJfQotCi0JCWxic19kZWJfdGhyZWFkKCJtYWluLXRocmVhZCA0NDQ6IGludGNvdW50ZXI9JWQgY3VycmVudHR4c2tiPSVwIGRubGRfc2VudD0lZFxuIiwKLQkJCSAgICAgICBwcml2LT5pbnRjb3VudGVyLCBwcml2LT5jdXJyZW50dHhza2IsIHByaXYtPmRubGRfc2VudCk7Ci0KLQkJLyogY29tbWFuZCByZXNwb25zZT8gKi8KLQkJaWYgKHByaXYtPmhpc3JlZ2NweSAmIE1SVkRSVl9DTURfVVBMRF9SRFkpIHsKLQkJCWxic19kZWJfdGhyZWFkKCJtYWluLXRocmVhZDogY21kIHJlc3BvbnNlIHJlYWR5XG4iKTsKLQotCQkJcHJpdi0+aGlzcmVnY3B5ICY9IH5NUlZEUlZfQ01EX1VQTERfUkRZOworCQkvKiBQcm9jZXNzIGFueSBwZW5kaW5nIGNvbW1hbmQgcmVzcG9uc2UgKi8KKwkJcmVzcF9pZHggPSBwcml2LT5yZXNwX2lkeDsKKwkJaWYgKHByaXYtPnJlc3BfbGVuW3Jlc3BfaWR4XSkgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JCQlsYnNfcHJvY2Vzc19yeF9jb21tYW5kKHByaXYpOworCQkJbGJzX3Byb2Nlc3NfY29tbWFuZF9yZXNwb25zZShwcml2LAorCQkJCXByaXYtPnJlc3BfYnVmW3Jlc3BfaWR4XSwKKwkJCQlwcml2LT5yZXNwX2xlbltyZXNwX2lkeF0pOwogCQkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOworCQkJcHJpdi0+cmVzcF9sZW5bcmVzcF9pZHhdID0gMDsKIAkJfQorCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKIAorCQkvKiBjb21tYW5kIHRpbWVvdXQgc3R1ZmYgKi8KIAkJaWYgKHByaXYtPmNtZF90aW1lZF9vdXQgJiYgcHJpdi0+Y3VyX2NtZCkgewogCQkJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZG5vZGUgPSBwcml2LT5jdXJfY21kOwogCkBAIC03NzgsMjEgKzc2NiwxOCBAQAogCQl9CiAJCXByaXYtPmNtZF90aW1lZF9vdXQgPSAwOwogCi0JCS8qIEFueSBDYXJkIEV2ZW50ICovCi0JCWlmIChwcml2LT5oaXNyZWdjcHkgJiBNUlZEUlZfQ0FSREVWRU5UKSB7Ci0JCQlsYnNfZGViX3RocmVhZCgibWFpbi10aHJlYWQ6IENhcmQgRXZlbnQgQWN0aXZpdHlcbiIpOworCQkvKiBQcm9jZXNzIGhhcmR3YXJlIGV2ZW50cywgZS5nLiBjYXJkIHJlbW92ZWQsIGxpbmsgbG9zdCAqLworCQlzcGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7CisJCXdoaWxlIChfX2tmaWZvX2xlbihwcml2LT5ldmVudF9maWZvKSkgeworCQkJdTMyIGV2ZW50OwogCi0JCQlwcml2LT5oaXNyZWdjcHkgJj0gfk1SVkRSVl9DQVJERVZFTlQ7Ci0KLQkJCWlmIChwcml2LT5od19yZWFkX2V2ZW50X2NhdXNlKHByaXYpKSB7Ci0JCQkJbGJzX3ByX2FsZXJ0KCJtYWluLXRocmVhZDogaHdfcmVhZF9ldmVudF9jYXVzZSBmYWlsZWRcbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQkJX19rZmlmb19nZXQocHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LAorCQkJCXNpemVvZihldmVudCkpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7Ci0JCQlsYnNfcHJvY2Vzc19ldmVudChwcml2KTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKKwkJCWxic19wcm9jZXNzX2V2ZW50KHByaXYsIGV2ZW50KTsKKwkJCXNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKIAogCQlpZiAoIXByaXYtPmZ3X3JlYWR5KQogCQkJY29udGludWU7CkBAIC04MDEsMTAgKzc4NiwxMiBAQAogCQlpZiAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9QUkVfU0xFRVAgJiYKIAkJICAgICFwcml2LT5kbmxkX3NlbnQgJiYgIXByaXYtPmN1cl9jbWQpIHsKIAkJCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB7Ci0JCQkJbGJzX2RlYl90aHJlYWQoIm1haW5fdGhyZWFkOiBQUkVfU0xFRVAtLWludGNvdW50ZXI9JWQgY3VycmVudHR4c2tiPSVwIGRubGRfc2VudD0lZCBjdXJfY21kPSVwLCBjb25maXJtIG5vd1xuIiwKLQkJCQkJICAgICAgIHByaXYtPmludGNvdW50ZXIsIHByaXYtPmN1cnJlbnR0eHNrYiwgcHJpdi0+ZG5sZF9zZW50LCBwcml2LT5jdXJfY21kKTsKKwkJCQlsYnNfZGViX3RocmVhZCgicHJlLXNsZWVwLCBjdXJyZW50dHhza2IgJXAsICIKKwkJCQkJImRubGRfc2VudCAlZCwgY3VyX2NtZCAlcFxuIiwKKwkJCQkJcHJpdi0+Y3VycmVudHR4c2tiLCBwcml2LT5kbmxkX3NlbnQsCisJCQkJCXByaXYtPmN1cl9jbWQpOwogCi0JCQkJbGJzX3BzX2NvbmZpcm1fc2xlZXAocHJpdiwgKHUxNikgcHJpdi0+cHNtb2RlKTsKKwkJCQlsYnNfcHNfY29uZmlybV9zbGVlcChwcml2KTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogd29ya2Fyb3VuZCBmb3IgZmlybXdhcmUgc2VuZGluZwogCQkJCSAqIGRlYXV0aC9saW5rbG9zcyBldmVudCBpbW1lZGlhdGVseQpAQCAtODEyLDcgKzc5OSw4IEBACiAJCQkJICogYWZ0ZXIgZmlybXdhcmUgZml4ZXMgaXQKIAkJCQkgKi8KIAkJCQlwcml2LT5wc3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7Ci0JCQkJbGJzX3ByX2FsZXJ0KCJtYWluLXRocmVhZDogaWdub3JlIFBTX1NsZWVwQ29uZmlybSBpbiBub24tY29ubmVjdGVkIHN0YXRlXG4iKTsKKwkJCQlsYnNfcHJfYWxlcnQoImlnbm9yZSBQU19TbGVlcENvbmZpcm0gaW4gIgorCQkJCQkibm9uLWNvbm5lY3RlZCBzdGF0ZVxuIik7CiAJCQl9CiAJCX0KIApAQCAtOTQ1LDcgKzkzMyw3IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlsYnNfc2V0X21hY19wYWNrZXRfZmlsdGVyKHByaXYpOworCWxic19zZXRfbWFjX2NvbnRyb2wocHJpdik7CiAKIAlyZXQgPSBsYnNfZ2V0X2RhdGFfcmF0ZShwcml2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtOTg1LDYgKzk3MywxOCBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9DTUQpOwogfQogCitzdGF0aWMgdm9pZCBsYnNfc3luY19jaGFubmVsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsYnNfcHJpdmF0ZSwKKwkJc3luY19jaGFubmVsKTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9NQUlOKTsKKwlpZiAobGJzX3VwZGF0ZV9jaGFubmVsKHByaXYpKQorCQlsYnNfcHJfaW5mbygiQ2hhbm5lbCBzeW5jaHJvbml6YXRpb24gZmFpbGVkLiIpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKK30KKworCiBzdGF0aWMgaW50IGxic19pbml0X2FkYXB0ZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCXNpemVfdCBidWZzaXplOwpAQCAtMTAwOSwxNCArMTAwOSw2IEBACiAJCQkgICAgICAmcHJpdi0+bmV0d29ya19mcmVlX2xpc3QpOwogCX0KIAotCXByaXYtPmxic19wc19jb25maXJtX3NsZWVwLnNlcW51bSA9IGNwdV90b19sZTE2KCsrcHJpdi0+c2VxbnVtKTsKLQlwcml2LT5sYnNfcHNfY29uZmlybV9zbGVlcC5jb21tYW5kID0KLQkgICAgY3B1X3RvX2xlMTYoQ01EXzgwMl8xMV9QU19NT0RFKTsKLQlwcml2LT5sYnNfcHNfY29uZmlybV9zbGVlcC5zaXplID0KLQkgICAgY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBQU19DTURfQ29uZmlybVNsZWVwKSk7Ci0JcHJpdi0+bGJzX3BzX2NvbmZpcm1fc2xlZXAuYWN0aW9uID0KLQkgICAgY3B1X3RvX2xlMTYoQ01EX1NVQkNNRF9TTEVFUF9DT05GSVJNRUQpOwotCiAJbWVtc2V0KHByaXYtPmN1cnJlbnRfYWRkciwgMHhmZiwgRVRIX0FMRU4pOwogCiAJcHJpdi0+Y29ubmVjdF9zdGF0dXMgPSBMQlNfRElTQ09OTkVDVEVEOwpAQCAtMTAyNCw3ICsxMDE2LDcgQEAKIAlwcml2LT5zZWNpbmZvLmF1dGhfbW9kZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwogCXByaXYtPm1vZGUgPSBJV19NT0RFX0lORlJBOwogCXByaXYtPmN1cmJzc3BhcmFtcy5jaGFubmVsID0gREVGQVVMVF9BRF9IT0NfQ0hBTk5FTDsKLQlwcml2LT5jdXJyZW50cGFja2V0ZmlsdGVyID0gQ01EX0FDVF9NQUNfUlhfT04gfCBDTURfQUNUX01BQ19UWF9PTjsKKwlwcml2LT5tYWNfY29udHJvbCA9IENNRF9BQ1RfTUFDX1JYX09OIHwgQ01EX0FDVF9NQUNfVFhfT047CiAJcHJpdi0+cmFkaW9vbiA9IFJBRElPX09OOwogCXByaXYtPmF1dG9fcmF0ZSA9IDE7CiAJcHJpdi0+Y2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKQEAgLTEwNDUsNyArMTAzNywxOCBAQAogCS8qIEFsbG9jYXRlIHRoZSBjb21tYW5kIGJ1ZmZlcnMgKi8KIAlpZiAobGJzX2FsbG9jYXRlX2NtZF9idWZmZXIocHJpdikpIHsKIAkJbGJzX3ByX2VycigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGNvbW1hbmQgYnVmZmVyc1xuIik7Ci0JCXJldCA9IC0xOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJcHJpdi0+cmVzcF9pZHggPSAwOworCXByaXYtPnJlc3BfbGVuWzBdID0gcHJpdi0+cmVzcF9sZW5bMV0gPSAwOworCisJLyogQ3JlYXRlIHRoZSBldmVudCBGSUZPICovCisJcHJpdi0+ZXZlbnRfZmlmbyA9IGtmaWZvX2FsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwsIE5VTEwpOworCWlmIChJU19FUlIocHJpdi0+ZXZlbnRfZmlmbykpIHsKKwkJbGJzX3ByX2VycigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGV2ZW50IEZJRk8gYnVmZmVyXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCiBvdXQ6CkBAIC0xMDU5LDYgKzEwNjIsOCBAQAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9NQUlOKTsKIAogCWxic19mcmVlX2NtZF9idWZmZXIocHJpdik7CisJaWYgKHByaXYtPmV2ZW50X2ZpZm8pCisJCWtmaWZvX2ZyZWUocHJpdi0+ZXZlbnRfZmlmbyk7CiAJZGVsX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyKTsKIAlrZnJlZShwcml2LT5uZXR3b3Jrcyk7CiAJcHJpdi0+bmV0d29ya3MgPSBOVUxMOwpAQCAtMTEyOCw3ICsxMTMzLDcgQEAKIAlwcml2LT53b3JrX3RocmVhZCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJsYnNfd29ya2VyIik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmFzc29jX3dvcmssIGxic19hc3NvY2lhdGlvbl93b3JrZXIpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX3dvcmssIGxic19zY2FuX3dvcmtlcik7Ci0JSU5JVF9XT1JLKCZwcml2LT5zeW5jX2NoYW5uZWwsIGxic19zeW5jX2NoYW5uZWwpOworCUlOSVRfV09SSygmcHJpdi0+c3luY19jaGFubmVsLCBsYnNfc3luY19jaGFubmVsX3dvcmtlcik7CiAKIAlzcHJpbnRmKHByaXYtPm1lc2hfc3NpZCwgIm1lc2giKTsKIAlwcml2LT5tZXNoX3NzaWRfbGVuID0gNDsKQEAgLTEzNTEsOCArMTM1Niw2IEBACiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfTUVTSCwgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGxic19hZGRfbWVzaCk7Ci0KIAogc3RhdGljIHZvaWQgbGJzX3JlbW92ZV9tZXNoKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTEzNzIsNyArMTM3NSw2IEBACiAJZnJlZV9uZXRkZXYobWVzaF9kZXYpOwogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NRVNIKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGxic19yZW1vdmVfbWVzaCk7CiAKIC8qKgogICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBDRlAgaW4KQEAgLTEzODMsNyArMTM4NSw3IEBACiAgKiAgQHBhcmFtIGNmcF9ubyAgQSBwb2ludGVyIHRvIENGUCBudW1iZXIKICAqICBAcmV0dXJuIAkgICBBIHBvaW50ZXIgdG8gQ0ZQCiAgKi8KLXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmxic19nZXRfcmVnaW9uX2NmcF90YWJsZSh1OCByZWdpb24sIHU4IGJhbmQsIGludCAqY2ZwX25vKQorc3RydWN0IGNoYW5fZnJlcV9wb3dlciAqbGJzX2dldF9yZWdpb25fY2ZwX3RhYmxlKHU4IHJlZ2lvbiwgaW50ICpjZnBfbm8pCiB7CiAJaW50IGksIGVuZDsKIApAQCAtMTQxNyw3ICsxNDE5LDcgQEAKIAogCW1lbXNldChwcml2LT5yZWdpb25fY2hhbm5lbCwgMCwgc2l6ZW9mKHByaXYtPnJlZ2lvbl9jaGFubmVsKSk7CiAKLQljZnAgPSBsYnNfZ2V0X3JlZ2lvbl9jZnBfdGFibGUocmVnaW9uLCBiYW5kLCAmY2ZwX25vKTsKKwljZnAgPSBsYnNfZ2V0X3JlZ2lvbl9jZnBfdGFibGUocmVnaW9uLCAmY2ZwX25vKTsKIAlpZiAoY2ZwICE9IE5VTEwpIHsKIAkJcHJpdi0+cmVnaW9uX2NoYW5uZWxbaV0ubnJjZnAgPSBjZnBfbm87CiAJCXByaXYtPnJlZ2lvbl9jaGFubmVsW2ldLkNGUCA9IGNmcDsKQEAgLTE0MzYsNDUgKzE0MzgsNDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbnRlcnJ1cHQuIGl0IHdpbGwgY2hhbmdlIFBTCi0gKiAgc3RhdGUgaWYgYXBwbGljYWJsZS4gaXQgd2lsbCB3YWtlIHVwIG1haW5fdGhyZWFkIHRvIGhhbmRsZQotICogIHRoZSBpbnRlcnJ1cHQgZXZlbnQgYXMgd2VsbC4KLSAqCi0gKiAgQHBhcmFtIGRldiAgICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgbi9hCi0gKi8KLXZvaWQgbGJzX2ludGVycnVwdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCit2b2lkIGxic19xdWV1ZV9ldmVudChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBldmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1RIUkVBRCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKKwlpZiAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9TTEVFUCkKKwkJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX0FXQUtFOworCisJX19rZmlmb19wdXQocHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LCBzaXplb2YodTMyKSk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRxKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1RIUkVBRCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsYnNfcXVldWVfZXZlbnQpOworCit2b2lkIGxic19ub3RpZnlfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IHJlc3BfaWR4KQogewogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9USFJFQUQpOwogCi0JbGJzX2RlYl90aHJlYWQoImxic19pbnRlcnJ1cHQ6IGludGNvdW50ZXI9JWRcbiIsIHByaXYtPmludGNvdW50ZXIpOwotCXByaXYtPmludGNvdW50ZXIrKzsKIAlpZiAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9TTEVFUCkKIAkJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX0FXQUtFOworCisJLyogU3dhcCBidWZmZXJzIGJ5IGZsaXBwaW5nIHRoZSByZXNwb25zZSBpbmRleCAqLworCUJVR19PTihyZXNwX2lkeCA+IDEpOworCXByaXYtPnJlc3BfaWR4ID0gcmVzcF9pZHg7CisKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRxKTsKIAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9USFJFQUQpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobGJzX2ludGVycnVwdCk7Ci0KLWludCBsYnNfcmVzZXRfZGV2aWNlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKLXsKLQlpbnQgcmV0OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwotCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9SRVNFVCwKLQkJCQkgICAgQ01EX0FDVF9IQUxULCAwLCAwLCBOVUxMKTsKLQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7Ci0KLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9NQUlOLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobGJzX3Jlc2V0X2RldmljZSk7CitFWFBPUlRfU1lNQk9MX0dQTChsYnNfbm90aWZ5X2NvbW1hbmRfcmVzcG9uc2UpOwogCiBzdGF0aWMgaW50IF9faW5pdCBsYnNfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CisJbWVtc2V0KCZjb25maXJtX3NsZWVwLCAwLCBzaXplb2YoY29uZmlybV9zbGVlcCkpOworCWNvbmZpcm1fc2xlZXAuaGRyLmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAyXzExX1BTX01PREUpOworCWNvbmZpcm1fc2xlZXAuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoY29uZmlybV9zbGVlcCkpOworCWNvbmZpcm1fc2xlZXAuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX1NVQkNNRF9TTEVFUF9DT05GSVJNRUQpOwogCWxic19kZWJ1Z2ZzX2luaXQoKTsKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiAJcmV0dXJuIDA7CkBAIC0xNTcxLDYgKzE1NzcsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWZuZGVmIENPTkZJR19JRUVFODAyMTEKK2NvbnN0IGNoYXIgKmVzY2FwZV9lc3NpZChjb25zdCBjaGFyICplc3NpZCwgdTggZXNzaWRfbGVuKQoreworCXN0YXRpYyBjaGFyIGVzY2FwZWRbSVdfRVNTSURfTUFYX1NJWkUgKiAyICsgMV07CisJY29uc3QgY2hhciAqcyA9IGVzc2lkOworCWNoYXIgKmQgPSBlc2NhcGVkOworCisJaWYgKGllZWU4MDIxMV9pc19lbXB0eV9lc3NpZChlc3NpZCwgZXNzaWRfbGVuKSkgeworCQltZW1jcHkoZXNjYXBlZCwgIjxoaWRkZW4+Iiwgc2l6ZW9mKCI8aGlkZGVuPiIpKTsKKwkJcmV0dXJuIGVzY2FwZWQ7CisJfQorCisJZXNzaWRfbGVuID0gbWluKGVzc2lkX2xlbiwgKHU4KSBJV19FU1NJRF9NQVhfU0laRSk7CisJd2hpbGUgKGVzc2lkX2xlbi0tKSB7CisJCWlmICgqcyA9PSAnXDAnKSB7CisJCQkqZCsrID0gJ1xcJzsKKwkJCSpkKysgPSAnMCc7CisJCQlzKys7CisJCX0gZWxzZSB7CisJCQkqZCsrID0gKnMrKzsKKwkJfQorCX0KKwkqZCA9ICdcMCc7CisJcmV0dXJuIGVzY2FwZWQ7Cit9CisjZW5kaWYKIAogbW9kdWxlX2luaXQobGJzX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGxic19leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwppbmRleCAxNDk1NTdhLi4wNWFmNzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKQEAgLTE0NSwxNyArMTQ1LDE3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKIAlzdHJ1Y3QgcnhwYWNrZXRoZHIgKnBfcnhfcGt0OwogCXN0cnVjdCByeHBkICpwX3J4X3BkOwotCiAJaW50IGhkcmNob3A7CiAJc3RydWN0IGV0aGhkciAqcF9ldGhoZHI7Ci0KIAljb25zdCB1OCByZmMxMDQyX2V0aF9oZHJbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1JYKTsKIAorCUJVR19PTighc2tiKTsKKwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAotCWlmIChwcml2LT5tb25pdG9ybW9kZSAhPSBMQlNfTU9OSVRPUl9PRkYpCisJaWYgKHByaXYtPm1vbml0b3Jtb2RlKQogCQlyZXR1cm4gcHJvY2Vzc19yeGVkXzgwMl8xMV9wYWNrZXQocHJpdiwgc2tiKTsKIAogCXBfcnhfcGt0ID0gKHN0cnVjdCByeHBhY2tldGhkciAqKSBza2ItPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKaW5kZXggNjlmOTRjOS4uZTcyYzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwpAQCAtNCwyMiArNCwxNCBAQAogICAqIElPQ1RMIGhhbmRsZXJzIGFzIHdlbGwgYXMgY29tbWFuZCBwcmVwZXJhdGlvbiBhbmQgcmVzcG9uc2Ugcm91dGluZXMKICAgKiAgZm9yIHNlbmRpbmcgc2NhbiBjb21tYW5kcyB0byB0aGUgZmlybXdhcmUuCiAgICovCi0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotCiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSAiaG9zdC5oIgogI2luY2x1ZGUgImRlY2wuaCIKICNpbmNsdWRlICJkZXYuaCIKICNpbmNsdWRlICJzY2FuLmgiCi0jaW5jbHVkZSAiam9pbi5oIgorI2luY2x1ZGUgImNtZC5oIgogCiAvLyEgQXBwcm94aW1hdGUgYW1vdW50IG9mIGRhdGEgbmVlZGVkIHRvIHBhc3MgYSBzY2FuIHJlc3VsdCBiYWNrIHRvIGl3bGlzdAogI2RlZmluZSBNQVhfU0NBTl9DRUxMX1NJWkUgIChJV19FVl9BRERSX0xFTiAgICAgICAgICAgICBcCkBAIC0zOSwxMCArMzEsOSBAQAogLy8hIE1lbW9yeSBuZWVkZWQgdG8gc3RvcmUgYSBtYXggbnVtYmVyL3NpemUgU1NJRCBUTFYgZm9yIGEgZmlybXdhcmUgc2NhbgogI2RlZmluZSBTU0lEX1RMVl9NQVhfU0laRSAgKDEgKiBzaXplb2Yoc3RydWN0IG1ydmxpZXR5cGVzX3NzaWRwYXJhbXNldCkpCiAKLS8vISBNYXhpbXVtIG1lbW9yeSBuZWVkZWQgZm9yIGEgbGJzX3NjYW5fY21kX2NvbmZpZyB3aXRoIGFsbCBUTFZzIGF0IG1heAotI2RlZmluZSBNQVhfU0NBTl9DRkdfQUxMT0MgKHNpemVvZihzdHJ1Y3QgbGJzX3NjYW5fY21kX2NvbmZpZykgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIENIQU5fVExWX01BWF9TSVpFICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTU0lEX1RMVl9NQVhfU0laRSkKKy8vISBNYXhpbXVtIG1lbW9yeSBuZWVkZWQgZm9yIGEgY21kX2RzXzgwMl8xMV9zY2FuIHdpdGggYWxsIFRMVnMgYXQgbWF4CisjZGVmaW5lIE1BWF9TQ0FOX0NGR19BTExPQyAoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX3NjYW4pCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIENIQU5fVExWX01BWF9TSVpFICsgU1NJRF9UTFZfTUFYX1NJWkUpCiAKIC8vISBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMgdGhlIGZpcm13YXJlIGNhbiBzY2FuIHBlciBjb21tYW5kCiAjZGVmaW5lIE1SVkRSVl9NQVhfQ0hBTk5FTFNfUEVSX1NDQU4gICAxNApAQCAtNjEsMTEgKzUyLDggQEAKIC8vISBTY2FuIHRpbWUgc3BlY2lmaWVkIGluIHRoZSBjaGFubmVsIFRMViBmb3IgZWFjaCBjaGFubmVsIGZvciBhY3RpdmUgc2NhbnMKICNkZWZpbmUgTVJWRFJWX0FDVElWRV9TQ0FOX0NIQU5fVElNRSAgIDEwMAogCi1zdGF0aWMgY29uc3QgdTggemVyb21hY1tFVEhfQUxFTl0gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLXN0YXRpYyBjb25zdCB1OCBiY2FzdG1hY1tFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKLQotCi0KK3N0YXRpYyBpbnQgbGJzX3JldF84MDIxMV9zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgbG9uZyBkdW1teSwKKwkJCSAgICAgIHN0cnVjdCBjbWRfaGVhZGVyICpyZXNwKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03Myw3ICs2MSwyNCBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ic3NfZGVzY3JpcHRvciAoc3RydWN0IGJzc19kZXNjcmlwdG9yICogYnNzKQorLyoqCisgKiAgQGJyaWVmIFVuc2V0cyB0aGUgTVNCIG9uIGJhc2ljIHJhdGVzCisgKgorICogU2NhbiB0aHJvdWdoIGFuIGFycmF5IGFuZCB1bnNldCB0aGUgTVNCIGZvciBiYXNpYyBkYXRhIHJhdGVzLgorICoKKyAqICBAcGFyYW0gcmF0ZXMgICAgIGJ1ZmZlciBvZiBkYXRhIHJhdGVzCisgKiAgQHBhcmFtIGxlbiAgICAgICBzaXplIG9mIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBsYnNfdW5zZXRfYmFzaWNfcmF0ZV9mbGFncyh1OCAqcmF0ZXMsIHNpemVfdCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXJhdGVzW2ldICY9IDB4N2Y7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2Jzc19kZXNjcmlwdG9yKHN0cnVjdCBic3NfZGVzY3JpcHRvciAqYnNzKQogewogCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KIAltZW1zZXQoYnNzLCAwLCBvZmZzZXRvZihzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IsIGxpc3QpKTsKQEAgLTg3LDcgKzkyLDggQEAKICAqCiAgKiAgQHJldHVybiAgICAgICAgIDA6IHNzaWQgaXMgc2FtZSwgb3RoZXJ3aXNlIGlzIGRpZmZlcmVudAogICovCi1pbnQgbGJzX3NzaWRfY21wKHU4ICpzc2lkMSwgdTggc3NpZDFfbGVuLCB1OCAqc3NpZDIsIHU4IHNzaWQyX2xlbikKK2ludCBsYnNfc3NpZF9jbXAodWludDhfdCAqc3NpZDEsIHVpbnQ4X3Qgc3NpZDFfbGVuLCB1aW50OF90ICpzc2lkMiwKKwkJIHVpbnQ4X3Qgc3NpZDJfbGVuKQogewogCWlmIChzc2lkMV9sZW4gIT0gc3NpZDJfbGVuKQogCQlyZXR1cm4gLTE7CkBAIC05NSw3NiArMTAxLDYgQEAKIAlyZXR1cm4gbWVtY21wKHNzaWQxLCBzc2lkMiwgc3NpZDFfbGVuKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX25vX3NlY3VyaXR5KHN0cnVjdCBsYnNfODAyXzExX3NlY3VyaXR5ICpzZWNpbmZvLAotCQkJc3RydWN0IGJzc19kZXNjcmlwdG9yICogbWF0Y2hfYnNzKQotewotCWlmICggICAhc2VjaW5mby0+d2VwX2VuYWJsZWQKLQkgICAgJiYgIXNlY2luZm8tPldQQWVuYWJsZWQKLQkgICAgJiYgIXNlY2luZm8tPldQQTJlbmFibGVkCi0JICAgICYmIG1hdGNoX2Jzcy0+d3BhX2llWzBdICE9IE1GSUVfVFlQRV9HRU5FUklDCi0JICAgICYmIG1hdGNoX2Jzcy0+cnNuX2llWzBdICE9IE1GSUVfVFlQRV9SU04KLQkgICAgJiYgIShtYXRjaF9ic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpIHsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfc3RhdGljX3dlcChzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKLQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIG1hdGNoX2JzcykKLXsKLQlpZiAoIHNlY2luZm8tPndlcF9lbmFibGVkCi0JICAgJiYgIXNlY2luZm8tPldQQWVuYWJsZWQKLQkgICAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQKLQkgICAmJiAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKSB7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX3dwYShzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKLQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIG1hdGNoX2JzcykKLXsKLQlpZiAoICAhc2VjaW5mby0+d2VwX2VuYWJsZWQKLQkgICAmJiBzZWNpbmZvLT5XUEFlbmFibGVkCi0JICAgJiYgKG1hdGNoX2Jzcy0+d3BhX2llWzBdID09IE1GSUVfVFlQRV9HRU5FUklDKQotCSAgIC8qIHByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UgTGlua1N5cyBXUlQ1NEcKLQkgICAgICAmJiAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKSB7Ci0JICAgICovCi0JICAgKSB7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfYnNzX3dwYTIoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCi0JCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBtYXRjaF9ic3MpCi17Ci0JaWYgKCAgIXNlY2luZm8tPndlcF9lbmFibGVkCi0JICAgJiYgc2VjaW5mby0+V1BBMmVuYWJsZWQKLQkgICAmJiAobWF0Y2hfYnNzLT5yc25faWVbMF0gPT0gTUZJRV9UWVBFX1JTTikKLQkgICAvKiBwcml2YWN5IGJpdCBtYXkgTk9UIGJlIHNldCBpbiBzb21lIEFQcyBsaWtlIExpbmtTeXMgV1JUNTRHCi0JICAgICAgJiYgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkgewotCSAgICAqLwotCSAgICkgewotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2Jzc19keW5hbWljX3dlcChzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKLQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIG1hdGNoX2JzcykKLXsKLQlpZiAoICAhc2VjaW5mby0+d2VwX2VuYWJsZWQKLQkgICAmJiAhc2VjaW5mby0+V1BBZW5hYmxlZAotCSAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAotCSAgICYmIChtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBNRklFX1RZUEVfR0VORVJJQykKLQkgICAmJiAobWF0Y2hfYnNzLT5yc25faWVbMF0gIT0gTUZJRV9UWVBFX1JTTikKLQkgICAmJiAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKSB7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaXNfc2FtZV9uZXR3b3JrKHN0cnVjdCBic3NfZGVzY3JpcHRvciAqc3JjLAogCQkJCSAgc3RydWN0IGJzc19kZXNjcmlwdG9yICpkc3QpCiB7CkBAIC0xNzcsODMgKzExMyw2IEBACiAJCSFtZW1jbXAoc3JjLT5zc2lkLCBkc3QtPnNzaWQsIHNyYy0+c3NpZF9sZW4pKTsKIH0KIAotLyoqCi0gKiAgQGJyaWVmIENoZWNrIGlmIGEgc2Nhbm5lZCBuZXR3b3JrIGNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyIHNldHRpbmdzCi0gKgotICogICBXRVAgICAgIFdQQSAgICAgV1BBMiAgICBhZC1ob2MgIGVuY3J5cHQgICAgICAgICAgICAgICAgICAgICAgTmV0d29yawotICogZW5hYmxlZCBlbmFibGVkICBlbmFibGVkICAgQUVTICAgICBtb2RlICAgcHJpdmFjeSAgV1BBICBXUEEyICBDb21wYXRpYmxlCi0gKiAgICAwICAgICAgIDAgICAgICAgIDAgICAgICAgMCAgICAgIE5PTkUgICAgICAwICAgICAgMCAgICAwICAgeWVzIE5vIHNlY3VyaXR5Ci0gKiAgICAxICAgICAgIDAgICAgICAgIDAgICAgICAgMCAgICAgIE5PTkUgICAgICAxICAgICAgMCAgICAwICAgeWVzIFN0YXRpYyBXRVAKLSAqICAgIDAgICAgICAgMSAgICAgICAgMCAgICAgICAwICAgICAgIHggICAgICAgIDF4ICAgICAxICAgIHggICB5ZXMgV1BBCi0gKiAgICAwICAgICAgIDAgICAgICAgIDEgICAgICAgMCAgICAgICB4ICAgICAgICAxeCAgICAgeCAgICAxICAgeWVzIFdQQTIKLSAqICAgIDAgICAgICAgMCAgICAgICAgMCAgICAgICAxICAgICAgTk9ORSAgICAgIDEgICAgICAwICAgIDAgICB5ZXMgQWQtaG9jIEFFUwotICogICAgMCAgICAgICAwICAgICAgICAwICAgICAgIDAgICAgICE9Tk9ORSAgICAgMSAgICAgIDAgICAgMCAgIHllcyBEeW5hbWljIFdFUAotICoKLSAqCi0gKiAgQHBhcmFtIHByaXYgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQotICogIEBwYXJhbSBpbmRleCAgIEluZGV4IGluIHNjYW50YWJsZSB0byBjaGVjayBhZ2FpbnN0IGN1cnJlbnQgZHJpdmVyIHNldHRpbmdzCi0gKiAgQHBhcmFtIG1vZGUgICAgTmV0d29yayBtb2RlOiBJbmZyYXN0cnVjdHVyZSBvciBJQlNTCi0gKgotICogIEByZXR1cm4gICAgICAgIEluZGV4IGluIHNjYW50YWJsZSwgb3IgZXJyb3IgY29kZSBpZiBuZWdhdGl2ZQotICovCi1zdGF0aWMgaW50IGlzX25ldHdvcmtfY29tcGF0aWJsZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIGJzcywgdTggbW9kZSkKLXsKLQlpbnQgbWF0Y2hlZCA9IDA7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7Ci0KLQlpZiAoYnNzLT5tb2RlICE9IG1vZGUpCi0JCWdvdG8gZG9uZTsKLQotCWlmICgobWF0Y2hlZCA9IG1hdGNoX2Jzc19ub19zZWN1cml0eSgmcHJpdi0+c2VjaW5mbywgYnNzKSkpIHsKLQkJZ290byBkb25lOwotCX0gZWxzZSBpZiAoKG1hdGNoZWQgPSBtYXRjaF9ic3Nfc3RhdGljX3dlcCgmcHJpdi0+c2VjaW5mbywgYnNzKSkpIHsKLQkJZ290byBkb25lOwotCX0gZWxzZSBpZiAoKG1hdGNoZWQgPSBtYXRjaF9ic3Nfd3BhKCZwcml2LT5zZWNpbmZvLCBic3MpKSkgewotCQlsYnNfZGViX3NjYW4oCi0JCSAgICAgICAiaXNfbmV0d29ya19jb21wYXRpYmxlKCkgV1BBOiB3cGFfaWUgMHgleCAiCi0JCSAgICAgICAid3BhMl9pZSAweCV4IFdFUCAlcyBXUEEgJXMgV1BBMiAlcyAiCi0JCSAgICAgICAicHJpdmFjeSAweCV4XG4iLCBic3MtPndwYV9pZVswXSwgYnNzLT5yc25faWVbMF0sCi0JCSAgICAgICBwcml2LT5zZWNpbmZvLndlcF9lbmFibGVkID8gImUiIDogImQiLAotCQkgICAgICAgcHJpdi0+c2VjaW5mby5XUEFlbmFibGVkID8gImUiIDogImQiLAotCQkgICAgICAgcHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkJICAgICAgIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpOwotCQlnb3RvIGRvbmU7Ci0JfSBlbHNlIGlmICgobWF0Y2hlZCA9IG1hdGNoX2Jzc193cGEyKCZwcml2LT5zZWNpbmZvLCBic3MpKSkgewotCQlsYnNfZGViX3NjYW4oCi0JCSAgICAgICAiaXNfbmV0d29ya19jb21wYXRpYmxlKCkgV1BBMjogd3BhX2llIDB4JXggIgotCQkgICAgICAgIndwYTJfaWUgMHgleCBXRVAgJXMgV1BBICVzIFdQQTIgJXMgIgotCQkgICAgICAgInByaXZhY3kgMHgleFxuIiwgYnNzLT53cGFfaWVbMF0sIGJzcy0+cnNuX2llWzBdLAotCQkgICAgICAgcHJpdi0+c2VjaW5mby53ZXBfZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkJICAgICAgIHByaXYtPnNlY2luZm8uV1BBZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkJICAgICAgIHByaXYtPnNlY2luZm8uV1BBMmVuYWJsZWQgPyAiZSIgOiAiZCIsCi0JCSAgICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKLQkJZ290byBkb25lOwotCX0gZWxzZSBpZiAoKG1hdGNoZWQgPSBtYXRjaF9ic3NfZHluYW1pY193ZXAoJnByaXYtPnNlY2luZm8sIGJzcykpKSB7Ci0JCWxic19kZWJfc2NhbigKLQkJICAgICAgICJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBkeW5hbWljIFdFUDogIgotCQkgICAgICAgIndwYV9pZSAweCV4IHdwYTJfaWUgMHgleCBwcml2YWN5IDB4JXhcbiIsCi0JCSAgICAgICBic3MtPndwYV9pZVswXSwgYnNzLT5yc25faWVbMF0sCi0JCSAgICAgICAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKTsKLQkJZ290byBkb25lOwotCX0KLQotCS8qIGJzcyBzZWN1cml0eSBzZXR0aW5ncyBkb24ndCBtYXRjaCB0aG9zZSBjb25maWd1cmVkIG9uIGNhcmQgKi8KLQlsYnNfZGViX3NjYW4oCi0JICAgICAgICJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBGQUlMRUQ6IHdwYV9pZSAweCV4ICIKLQkgICAgICAgIndwYTJfaWUgMHgleCBXRVAgJXMgV1BBICVzIFdQQTIgJXMgcHJpdmFjeSAweCV4XG4iLAotCSAgICAgICBic3MtPndwYV9pZVswXSwgYnNzLT5yc25faWVbMF0sCi0JICAgICAgIHByaXYtPnNlY2luZm8ud2VwX2VuYWJsZWQgPyAiZSIgOiAiZCIsCi0JICAgICAgIHByaXYtPnNlY2luZm8uV1BBZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkgICAgICAgcHJpdi0+c2VjaW5mby5XUEEyZW5hYmxlZCA/ICJlIiA6ICJkIiwKLQkgICAgICAgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSk7Ci0KLWRvbmU6Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0NBTiwgIm1hdGNoZWQ6ICVkIiwgbWF0Y2hlZCk7Ci0JcmV0dXJuIG1hdGNoZWQ7Ci19Ci0KIAogCiAKQEAgLTI2MywxNyArMTIyLDYgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGxic19zY2FuX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsYnNfcHJpdmF0ZSwgc2Nhbl93b3JrLndvcmspOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOwotCWxic19zY2FuX25ldHdvcmtzKHByaXYsIE5VTEwsIDApOwotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TQ0FOKTsKLX0KLQotCiAvKioKICAqICBAYnJpZWYgQ3JlYXRlIGEgY2hhbm5lbCBsaXN0IGZvciB0aGUgZHJpdmVyIHRvIHNjYW4gYmFzZWQgb24gcmVnaW9uIGluZm8KICAqCkBAIC0yODUsMjUgKzEzMywxOCBAQAogICoKICAqICBAcGFyYW0gcHJpdiAgICAgICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICogIEBwYXJhbSBzY2FuY2hhbmxpc3QgIE91dHB1dCBwYXJhbWV0ZXI6IHJlc3VsdGluZyBjaGFubmVsIGxpc3QgdG8gc2NhbgotICogIEBwYXJhbSBmaWx0ZXJlZHNjYW4gIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhIEJTU0lEIG9yIFNTSUQgZmlsdGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgaXMgYmVpbmcgc2VudCBpbiB0aGUgY29tbWFuZCB0byBmaXJtd2FyZS4gIFVzZWQgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHNlbnQgaW4gYSBzY2FuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBhbmQgdG8gZGlzYWJsZSB0aGUgZmlybXdhcmUgY2hhbm5lbCBzY2FuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLgogICoKICAqICBAcmV0dXJuICAgICAgICAgICAgICB2b2lkCiAgKi8KIHN0YXRpYyBpbnQgbGJzX3NjYW5fY3JlYXRlX2NoYW5uZWxfbGlzdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCQkJCSAgc3RydWN0IGNoYW5zY2FucGFyYW1zZXQgKiBzY2FuY2hhbmxpc3QsCi0JCQkJCSAgdTggZmlsdGVyZWRzY2FuKQorCQkJCQlzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCAqc2NhbmNoYW5saXN0KQogewotCiAJc3RydWN0IHJlZ2lvbl9jaGFubmVsICpzY2FucmVnaW9uOwogCXN0cnVjdCBjaGFuX2ZyZXFfcG93ZXIgKmNmcDsKIAlpbnQgcmduaWR4OwogCWludCBjaGFuaWR4OwogCWludCBuZXh0Y2hhbjsKLQl1OCBzY2FudHlwZTsKKwl1aW50OF90IHNjYW50eXBlOwogCiAJY2hhbmlkeCA9IDA7CiAKQEAgLTMxNCw5ICsxNTUsOCBAQAogCXNjYW50eXBlID0gQ01EX1NDQU5fVFlQRV9BQ1RJVkU7CiAKIAlmb3IgKHJnbmlkeCA9IDA7IHJnbmlkeCA8IEFSUkFZX1NJWkUocHJpdi0+cmVnaW9uX2NoYW5uZWwpOyByZ25pZHgrKykgewotCQlpZiAocHJpdi0+ZW5hYmxlMTFkICYmCi0JCSAgICAocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkgJiYKLQkJICAgIChwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzICE9IExCU19DT05ORUNURUQpKSB7CisJCWlmIChwcml2LT5lbmFibGUxMWQgJiYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzICE9IExCU19DT05ORUNURUQpCisJCSAgICAmJiAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSkgewogCQkJLyogU2NhbiBhbGwgdGhlIHN1cHBvcnRlZCBjaGFuIGZvciB0aGUgZmlyc3Qgc2NhbiAqLwogCQkJaWYgKCFwcml2LT51bml2ZXJzYWxfY2hhbm5lbFtyZ25pZHhdLnZhbGlkKQogCQkJCWNvbnRpbnVlOwpAQCAtMzMxLDUxICsxNzEsMzIgQEAKIAkJCXNjYW5yZWdpb24gPSAmcHJpdi0+cmVnaW9uX2NoYW5uZWxbcmduaWR4XTsKIAkJfQogCi0JCWZvciAobmV4dGNoYW4gPSAwOwotCQkgICAgIG5leHRjaGFuIDwgc2NhbnJlZ2lvbi0+bnJjZnA7IG5leHRjaGFuKyssIGNoYW5pZHgrKykgeworCQlmb3IgKG5leHRjaGFuID0gMDsgbmV4dGNoYW4gPCBzY2FucmVnaW9uLT5ucmNmcDsgbmV4dGNoYW4rKywgY2hhbmlkeCsrKSB7CisJCQlzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCAqY2hhbiA9ICZzY2FuY2hhbmxpc3RbY2hhbmlkeF07CiAKIAkJCWNmcCA9IHNjYW5yZWdpb24tPkNGUCArIG5leHRjaGFuOwogCi0JCQlpZiAocHJpdi0+ZW5hYmxlMTFkKSB7Ci0JCQkJc2NhbnR5cGUgPQotCQkJCSAgICBsYnNfZ2V0X3NjYW5fdHlwZV8xMWQoY2ZwLT5jaGFubmVsLAotCQkJCQkJCSAgICZwcml2LT4KLQkJCQkJCQkgICBwYXJzZWRfcmVnaW9uX2NoYW4pOwotCQkJfQorCQkJaWYgKHByaXYtPmVuYWJsZTExZCkKKwkJCQlzY2FudHlwZSA9IGxic19nZXRfc2Nhbl90eXBlXzExZChjZnAtPmNoYW5uZWwsCisJCQkJCQkJCSAmcHJpdi0+cGFyc2VkX3JlZ2lvbl9jaGFuKTsKIAotCQkJc3dpdGNoIChzY2FucmVnaW9uLT5iYW5kKSB7Ci0JCQljYXNlIEJBTkRfQjoKLQkJCWNhc2UgQkFORF9HOgotCQkJZGVmYXVsdDoKLQkJCQlzY2FuY2hhbmxpc3RbY2hhbmlkeF0ucmFkaW90eXBlID0KLQkJCQkgICAgQ01EX1NDQU5fUkFESU9fVFlQRV9CRzsKLQkJCQlicmVhazsKLQkJCX0KKwkJCWlmIChzY2FucmVnaW9uLT5iYW5kID09IEJBTkRfQiB8fCBzY2FucmVnaW9uLT5iYW5kID09IEJBTkRfRykKKwkJCQljaGFuLT5yYWRpb3R5cGUgPSBDTURfU0NBTl9SQURJT19UWVBFX0JHOwogCiAJCQlpZiAoc2NhbnR5cGUgPT0gQ01EX1NDQU5fVFlQRV9QQVNTSVZFKSB7Ci0JCQkJc2NhbmNoYW5saXN0W2NoYW5pZHhdLm1heHNjYW50aW1lID0KLQkJCQkgICAgY3B1X3RvX2xlMTYoTVJWRFJWX1BBU1NJVkVfU0NBTl9DSEFOX1RJTUUpOwotCQkJCXNjYW5jaGFubGlzdFtjaGFuaWR4XS5jaGFuc2Nhbm1vZGUucGFzc2l2ZXNjYW4gPQotCQkJCSAgICAxOworCQkJCWNoYW4tPm1heHNjYW50aW1lID0gY3B1X3RvX2xlMTYoTVJWRFJWX1BBU1NJVkVfU0NBTl9DSEFOX1RJTUUpOworCQkJCWNoYW4tPmNoYW5zY2FubW9kZS5wYXNzaXZlc2NhbiA9IDE7CiAJCQl9IGVsc2UgewotCQkJCXNjYW5jaGFubGlzdFtjaGFuaWR4XS5tYXhzY2FudGltZSA9Ci0JCQkJICAgIGNwdV90b19sZTE2KE1SVkRSVl9BQ1RJVkVfU0NBTl9DSEFOX1RJTUUpOwotCQkJCXNjYW5jaGFubGlzdFtjaGFuaWR4XS5jaGFuc2Nhbm1vZGUucGFzc2l2ZXNjYW4gPQotCQkJCSAgICAwOworCQkJCWNoYW4tPm1heHNjYW50aW1lID0gY3B1X3RvX2xlMTYoTVJWRFJWX0FDVElWRV9TQ0FOX0NIQU5fVElNRSk7CisJCQkJY2hhbi0+Y2hhbnNjYW5tb2RlLnBhc3NpdmVzY2FuID0gMDsKIAkJCX0KIAotCQkJc2NhbmNoYW5saXN0W2NoYW5pZHhdLmNoYW5udW1iZXIgPSBjZnAtPmNoYW5uZWw7Ci0KLQkJCWlmIChmaWx0ZXJlZHNjYW4pIHsKLQkJCQlzY2FuY2hhbmxpc3RbY2hhbmlkeF0uY2hhbnNjYW5tb2RlLgotCQkJCSAgICBkaXNhYmxlY2hhbmZpbHQgPSAxOwotCQkJfQorCQkJY2hhbi0+Y2hhbm51bWJlciA9IGNmcC0+Y2hhbm5lbDsKIAkJfQogCX0KIAlyZXR1cm4gY2hhbmlkeDsKIH0KIAotCiAvKgogICogQWRkIFNTSUQgVExWIG9mIHRoZSBmb3JtOgogICoKQEAgLTM4MywxNyArMjA0LDE1IEBACiAgKiBsZW5ndGggICAgICAgICAgMDYgMDAKICAqIHNzaWQgICAgICAgICAgICA0ZCA0ZSA1NCA0NSA1MyA1NAogICovCi1zdGF0aWMgaW50IGxic19zY2FuX2FkZF9zc2lkX3Rsdih1OCAqdGx2LAotCWNvbnN0IHN0cnVjdCBsYnNfaW9jdGxfdXNlcl9zY2FuX2NmZyAqdXNlcl9jZmcpCitzdGF0aWMgaW50IGxic19zY2FuX2FkZF9zc2lkX3RsdihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4ICp0bHYpCiB7Ci0Jc3RydWN0IG1ydmxpZXR5cGVzX3NzaWRwYXJhbXNldCAqc3NpZF90bHYgPQotCQkoc3RydWN0IG1ydmxpZXR5cGVzX3NzaWRwYXJhbXNldCAqKXRsdjsKLQlzc2lkX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9TU0lEKTsKLQlzc2lkX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHVzZXJfY2ZnLT5zc2lkX2xlbik7Ci0JbWVtY3B5KHNzaWRfdGx2LT5zc2lkLCB1c2VyX2NmZy0+c3NpZCwgdXNlcl9jZmctPnNzaWRfbGVuKTsKLQlyZXR1cm4gc2l6ZW9mKHNzaWRfdGx2LT5oZWFkZXIpICsgdXNlcl9jZmctPnNzaWRfbGVuOwotfQorCXN0cnVjdCBtcnZsaWV0eXBlc19zc2lkcGFyYW1zZXQgKnNzaWRfdGx2ID0gKHZvaWQgKil0bHY7CiAKKwlzc2lkX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9TU0lEKTsKKwlzc2lkX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHByaXYtPnNjYW5fc3NpZF9sZW4pOworCW1lbWNweShzc2lkX3Rsdi0+c3NpZCwgcHJpdi0+c2Nhbl9zc2lkLCBwcml2LT5zY2FuX3NzaWRfbGVuKTsKKwlyZXR1cm4gc2l6ZW9mKHNzaWRfdGx2LT5oZWFkZXIpICsgcHJpdi0+c2Nhbl9zc2lkX2xlbjsKK30KIAogLyoKICAqIEFkZCBDSEFOTElTVCBUTFYgb2YgdGhlIGZvcm0KQEAgLTQyMCwxMyArMjM5LDEyIEBACiAgKiBjaGFubmVsIDEzICAgICAgMDAgMGQgMDAgMDAgMDAgNjQgMDAKICAqCiAgKi8KLXN0YXRpYyBpbnQgbGJzX3NjYW5fYWRkX2NoYW5saXN0X3Rsdih1OCAqdGx2LAotCXN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0ICpjaGFuX2xpc3QsCi0JaW50IGNoYW5fY291bnQpCitzdGF0aWMgaW50IGxic19zY2FuX2FkZF9jaGFubGlzdF90bHYodWludDhfdCAqdGx2LAorCQkJCSAgICAgc3RydWN0IGNoYW5zY2FucGFyYW1zZXQgKmNoYW5fbGlzdCwKKwkJCQkgICAgIGludCBjaGFuX2NvdW50KQogewotCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0KSAqIGNoYW5fY291bnQ7Ci0Jc3RydWN0IG1ydmxpZXR5cGVzX2NoYW5saXN0cGFyYW1zZXQgKmNoYW5fdGx2ID0KLQkJKHN0cnVjdCBtcnZsaWV0eXBlc19jaGFubGlzdHBhcmFtc2V0ICopIHRsdjsKKwlzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCkgKmNoYW5fY291bnQ7CisJc3RydWN0IG1ydmxpZXR5cGVzX2NoYW5saXN0cGFyYW1zZXQgKmNoYW5fdGx2ID0gKHZvaWQgKil0bHY7CiAKIAljaGFuX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DSEFOTElTVCk7CiAJbWVtY3B5KGNoYW5fdGx2LT5jaGFuc2NhbnBhcmFtLCBjaGFuX2xpc3QsIHNpemUpOwpAQCAtNDM0LDcgKzI1Miw2IEBACiAJcmV0dXJuIHNpemVvZihjaGFuX3Rsdi0+aGVhZGVyKSArIHNpemU7CiB9CiAKLQogLyoKICAqIEFkZCBSQVRFUyBUTFYgb2YgdGhlIGZvcm0KICAqCkBAIC00NDUsMTEgKzI2MiwxMCBAQAogICogVGhlIHJhdGVzIGFyZSBpbiBsYnNfYmdfcmF0ZXNbXSwgYnV0IGZvciB0aGUgODAyLjExYgogICogcmF0ZXMgdGhlIGhpZ2ggYml0IGlzbid0IHNldC4KICAqLwotc3RhdGljIGludCBsYnNfc2Nhbl9hZGRfcmF0ZXNfdGx2KHU4ICp0bHYpCitzdGF0aWMgaW50IGxic19zY2FuX2FkZF9yYXRlc190bHYodWludDhfdCAqdGx2KQogewogCWludCBpOwotCXN0cnVjdCBtcnZsaWV0eXBlc19yYXRlc3BhcmFtc2V0ICpyYXRlX3RsdiA9Ci0JCShzdHJ1Y3QgbXJ2bGlldHlwZXNfcmF0ZXNwYXJhbXNldCAqKSB0bHY7CisJc3RydWN0IG1ydmxpZXR5cGVzX3JhdGVzcGFyYW1zZXQgKnJhdGVfdGx2ID0gKHZvaWQgKil0bHY7CiAKIAlyYXRlX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9SQVRFUyk7CiAJdGx2ICs9IHNpemVvZihyYXRlX3Rsdi0+aGVhZGVyKTsKQEAgLTQ3MCw4MiArMjg2LDc0IEBACiAJcmV0dXJuIHNpemVvZihyYXRlX3Rsdi0+aGVhZGVyKSArIGk7CiB9CiAKLQogLyoKICAqIEdlbmVyYXRlIHRoZSBDTURfODAyXzExX1NDQU4gY29tbWFuZCB3aXRoIHRoZSBwcm9wZXIgdGx2CiAgKiBmb3IgYSBidW5jaCBvZiBjaGFubmVscy4KICAqLwotc3RhdGljIGludCBsYnNfZG9fc2NhbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JdTggYnNzdHlwZSwKLQlzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCAqY2hhbl9saXN0LAotCWludCBjaGFuX2NvdW50LAotCWNvbnN0IHN0cnVjdCBsYnNfaW9jdGxfdXNlcl9zY2FuX2NmZyAqdXNlcl9jZmcpCitzdGF0aWMgaW50IGxic19kb19zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDhfdCBic3N0eXBlLAorCQkgICAgICAgc3RydWN0IGNoYW5zY2FucGFyYW1zZXQgKmNoYW5fbGlzdCwgaW50IGNoYW5fY291bnQpCiB7CiAJaW50IHJldCA9IC1FTk9NRU07Ci0Jc3RydWN0IGxic19zY2FuX2NtZF9jb25maWcgKnNjYW5fY21kOwotCXU4ICp0bHY7ICAgIC8qIHBvaW50ZXIgaW50byBvdXIgY3VycmVudCwgZ3Jvd2luZyBUTFYgc3RvcmFnZSBhcmVhICovCisJc3RydWN0IGNtZF9kc184MDJfMTFfc2NhbiAqc2Nhbl9jbWQ7CisJdWludDhfdCAqdGx2OwkvKiBwb2ludGVyIGludG8gb3VyIGN1cnJlbnQsIGdyb3dpbmcgVExWIHN0b3JhZ2UgYXJlYSAqLwogCi0JbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfU0NBTiwgImJzc3R5cGUgJWQsIGNoYW5saXN0W10uY2hhbiAlZCwgIgotCQkiY2hhbl9jb3VudCAlZCIsCi0JCWJzc3R5cGUsIGNoYW5fbGlzdFswXS5jaGFubnVtYmVyLCBjaGFuX2NvdW50KTsKKwlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiYnNzdHlwZSAlZCwgY2hhbmxpc3RbXS5jaGFuICVkLCBjaGFuX2NvdW50ICVkIiwKKwkJCSAgIGJzc3R5cGUsIGNoYW5fbGlzdFswXS5jaGFubnVtYmVyLCBjaGFuX2NvdW50KTsKIAogCS8qIGNyZWF0ZSB0aGUgZml4ZWQgcGFydCBmb3Igc2NhbiBjb21tYW5kICovCiAJc2Nhbl9jbWQgPSBremFsbG9jKE1BWF9TQ0FOX0NGR19BTExPQywgR0ZQX0tFUk5FTCk7CiAJaWYgKHNjYW5fY21kID09IE5VTEwpCiAJCWdvdG8gb3V0OworCiAJdGx2ID0gc2Nhbl9jbWQtPnRsdmJ1ZmZlcjsKLQlpZiAodXNlcl9jZmcpCi0JCW1lbWNweShzY2FuX2NtZC0+YnNzaWQsIHVzZXJfY2ZnLT5ic3NpZCwgRVRIX0FMRU4pOworCS8qIFRPRE86IGRvIHdlIG5lZWQgdG8gc2NhbiBmb3IgYSBzcGVjaWZpYyBCU1NJRD8KKwltZW1jcHkoc2Nhbl9jbWQtPmJzc2lkLCBwcml2LT5zY2FuX2Jzc2lkLCBFVEhfQUxFTik7ICovCiAJc2Nhbl9jbWQtPmJzc3R5cGUgPSBic3N0eXBlOwogCiAJLyogYWRkIFRMVnMgKi8KLQlpZiAodXNlcl9jZmcgJiYgdXNlcl9jZmctPnNzaWRfbGVuKQotCQl0bHYgKz0gbGJzX3NjYW5fYWRkX3NzaWRfdGx2KHRsdiwgdXNlcl9jZmcpOworCWlmIChwcml2LT5zY2FuX3NzaWRfbGVuKQorCQl0bHYgKz0gbGJzX3NjYW5fYWRkX3NzaWRfdGx2KHByaXYsIHRsdik7CiAJaWYgKGNoYW5fbGlzdCAmJiBjaGFuX2NvdW50KQogCQl0bHYgKz0gbGJzX3NjYW5fYWRkX2NoYW5saXN0X3Rsdih0bHYsIGNoYW5fbGlzdCwgY2hhbl9jb3VudCk7CiAJdGx2ICs9IGxic19zY2FuX2FkZF9yYXRlc190bHYodGx2KTsKIAogCS8qIFRoaXMgaXMgdGhlIGZpbmFsIGRhdGEgd2UgYXJlIGFib3V0IHRvIHNlbmQgKi8KLQlzY2FuX2NtZC0+dGx2YnVmZmVybGVuID0gdGx2IC0gc2Nhbl9jbWQtPnRsdmJ1ZmZlcjsKLQlsYnNfZGViX2hleChMQlNfREVCX1NDQU4sICJTQ0FOX0NNRCIsICh2b2lkICopc2Nhbl9jbWQsIDErNik7CisJc2Nhbl9jbWQtPmhkci5zaXplID0gY3B1X3RvX2xlMTYodGx2IC0gKHVpbnQ4X3QgKilzY2FuX2NtZCk7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9TQ0FOLCAiU0NBTl9DTUQiLCAodm9pZCAqKXNjYW5fY21kLAorCQkgICAgc2l6ZW9mKCpzY2FuX2NtZCkpOwogCWxic19kZWJfaGV4KExCU19ERUJfU0NBTiwgIlNDQU5fVExWIiwgc2Nhbl9jbWQtPnRsdmJ1ZmZlciwKLQkJc2Nhbl9jbWQtPnRsdmJ1ZmZlcmxlbik7CisJCSAgICB0bHYgLSBzY2FuX2NtZC0+dGx2YnVmZmVyKTsKIAotCXJldCA9IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9TQ0FOLCAwLAotCQlDTURfT1BUSU9OX1dBSVRGT1JSU1AsIDAsIHNjYW5fY21kKTsKKwlyZXQgPSBfX2xic19jbWQocHJpdiwgQ01EXzgwMl8xMV9TQ0FOLCAmc2Nhbl9jbWQtPmhkciwKKwkJCWxlMTZfdG9fY3B1KHNjYW5fY21kLT5oZHIuc2l6ZSksCisJCQlsYnNfcmV0XzgwMjExX3NjYW4sIDApOworCiBvdXQ6CiAJa2ZyZWUoc2Nhbl9jbWQpOwogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NDQU4sICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKLQogLyoqCiAgKiAgQGJyaWVmIEludGVybmFsIGZ1bmN0aW9uIHVzZWQgdG8gc3RhcnQgYSBzY2FuIGJhc2VkIG9uIGFuIGlucHV0IGNvbmZpZwogICoKLSAqICBBbHNvIHVzZWQgZnJvbSBkZWJ1Z2ZzCi0gKgogICogIFVzZSB0aGUgaW5wdXQgdXNlciBzY2FuIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gd2hlbiBwcm92aWRlZCBpbgogICogICAgb3JkZXIgdG8gc2VuZCB0aGUgYXBwcm9wcmlhdGUgc2NhbiBjb21tYW5kcyB0byBmaXJtd2FyZSB0byBwb3B1bGF0ZSBvcgogICogICAgdXBkYXRlIHRoZSBpbnRlcm5hbCBkcml2ZXIgc2NhbiB0YWJsZQogICoKICAqICBAcGFyYW0gcHJpdiAgICAgICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBwdXNlcnNjYW5pbiAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSByZXF1ZXN0ZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICBzY2FuLgorICogIEBwYXJhbSBmdWxsX3NjYW4gICAgIERvIGEgZnVsbC1zY2FuIChibG9ja2luZykKICAqCiAgKiAgQHJldHVybiAgICAgICAgICAgICAgMCBvciA8IDAgaWYgZXJyb3IKICAqLwotaW50IGxic19zY2FuX25ldHdvcmtzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQljb25zdCBzdHJ1Y3QgbGJzX2lvY3RsX3VzZXJfc2Nhbl9jZmcgKnVzZXJfY2ZnLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnVsbF9zY2FuKQoraW50IGxic19zY2FuX25ldHdvcmtzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGZ1bGxfc2NhbikKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3QgY2hhbnNjYW5wYXJhbXNldCAqY2hhbl9saXN0OwogCXN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0ICpjdXJyX2NoYW5zOwogCWludCBjaGFuX2NvdW50OwotCXU4IGJzc3R5cGUgPSBDTURfQlNTX1RZUEVfQU5ZOworCXVpbnQ4X3QgYnNzdHlwZSA9IENNRF9CU1NfVFlQRV9BTlk7CiAJaW50IG51bWNoYW5uZWxzID0gTVJWRFJWX0NIQU5ORUxTX1BFUl9TQ0FOX0NNRDsKLQlpbnQgZmlsdGVyZWRzY2FuID0gMDsKIAl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAjaWZkZWYgQ09ORklHX0xJQkVSVEFTX0RFQlVHCiAJc3RydWN0IGJzc19kZXNjcmlwdG9yICppdGVyOwpAQCAtNTUzLDggKzM2MSw3IEBACiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAjZW5kaWYKIAotCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX1NDQU4sICJmdWxsX3NjYW4gJWQiLAotCQlmdWxsX3NjYW4pOworCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX1NDQU4sICJmdWxsX3NjYW4gJWQiLCBmdWxsX3NjYW4pOwogCiAJLyogQ2FuY2VsIGFueSBwYXJ0aWFsIG91dHN0YW5kaW5nIHBhcnRpYWwgc2NhbnMgaWYgdGhpcyBzY2FuCiAJICogaXMgYSBmdWxsIHNjYW4uCkBAIC01NjIsMzAgKzM2OSwyNyBAQAogCWlmIChmdWxsX3NjYW4gJiYgZGVsYXllZF93b3JrX3BlbmRpbmcoJnByaXYtPnNjYW5fd29yaykpCiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fd29yayk7CiAKLQkvKiBEZXRlcm1pbmUgc2FtZSBzY2FuIHBhcmFtZXRlcnMgKi8KKwkvKiBVc2VyLXNwZWNpZmllZCBic3N0eXBlIG9yIGNoYW5uZWwgbGlzdAorCVRPRE86IHRoaXMgY2FuIGJlIGltcGxlbWVudGVkIGlmIHNvbWUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbgorCW5lZWQgdGhlIGZlYXR1cmUuIEZvcm1lcmx5LCBpdCB3YXMgYWNjZXNzaWJsZSBmcm9tIGRlYnVnZnMsCisJYnV0IHRoZW4gbm93aGVyZSB1c2VkLgogCWlmICh1c2VyX2NmZykgewogCQlpZiAodXNlcl9jZmctPmJzc3R5cGUpCi0JCQlic3N0eXBlID0gdXNlcl9jZmctPmJzc3R5cGU7Ci0JCWlmIChjb21wYXJlX2V0aGVyX2FkZHIodXNlcl9jZmctPmJzc2lkLCAmemVyb21hY1swXSkgIT0gMCkgewotCQkJbnVtY2hhbm5lbHMgPSBNUlZEUlZfTUFYX0NIQU5ORUxTX1BFUl9TQ0FOOwotCQkJZmlsdGVyZWRzY2FuID0gMTsKLQkJfQotCX0KLQlsYnNfZGViX3NjYW4oIm51bWNoYW5uZWxzICVkLCBic3N0eXBlICVkLCAiCi0JCSJmaWx0ZXJlZHNjYW4gJWRcbiIsCi0JCW51bWNoYW5uZWxzLCBic3N0eXBlLCBmaWx0ZXJlZHNjYW4pOworCQlic3N0eXBlID0gdXNlcl9jZmctPmJzc3R5cGU7CisJfSAqLworCisJbGJzX2RlYl9zY2FuKCJudW1jaGFubmVscyAlZCwgYnNzdHlwZSAlZFxuIiwgbnVtY2hhbm5lbHMsIGJzc3R5cGUpOwogCiAJLyogQ3JlYXRlIGxpc3Qgb2YgY2hhbm5lbHMgdG8gc2NhbiAqLwogCWNoYW5fbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGFuc2NhbnBhcmFtc2V0KSAqCi0JCQkJTEJTX0lPQ1RMX1VTRVJfU0NBTl9DSEFOX01BWCwgR0ZQX0tFUk5FTCk7CisJCQkgICAgTEJTX0lPQ1RMX1VTRVJfU0NBTl9DSEFOX01BWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGFuX2xpc3QpIHsKIAkJbGJzX3ByX2FsZXJ0KCJTQ0FOOiBjaGFuX2xpc3QgZW1wdHlcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBXZSB3YW50IHRvIHNjYW4gYWxsIGNoYW5uZWxzICovCi0JY2hhbl9jb3VudCA9IGxic19zY2FuX2NyZWF0ZV9jaGFubmVsX2xpc3QocHJpdiwgY2hhbl9saXN0LAotCQlmaWx0ZXJlZHNjYW4pOworCWNoYW5fY291bnQgPSBsYnNfc2Nhbl9jcmVhdGVfY2hhbm5lbF9saXN0KHByaXYsIGNoYW5fbGlzdCk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+ZGV2KTsKQEAgLTU5NSwxMyArMzk5LDEzIEBACiAJfQogCiAJLyogUHJlcGFyZSB0byBjb250aW51ZSBhbiBpbnRlcnJ1cHRlZCBzY2FuICovCi0JbGJzX2RlYl9zY2FuKCJjaGFuX2NvdW50ICVkLCBsYXN0X3NjYW5uZWRfY2hhbm5lbCAlZFxuIiwKLQkJICAgICBjaGFuX2NvdW50LCBwcml2LT5sYXN0X3NjYW5uZWRfY2hhbm5lbCk7CisJbGJzX2RlYl9zY2FuKCJjaGFuX2NvdW50ICVkLCBzY2FuX2NoYW5uZWwgJWRcbiIsCisJCSAgICAgY2hhbl9jb3VudCwgcHJpdi0+c2Nhbl9jaGFubmVsKTsKIAljdXJyX2NoYW5zID0gY2hhbl9saXN0OwogCS8qIGFkdmFuY2UgY2hhbm5lbCBsaXN0IGJ5IGFscmVhZHktc2Nhbm5lZC1jaGFubmVscyAqLwotCWlmIChwcml2LT5sYXN0X3NjYW5uZWRfY2hhbm5lbCA+IDApIHsKLQkJY3Vycl9jaGFucyArPSBwcml2LT5sYXN0X3NjYW5uZWRfY2hhbm5lbDsKLQkJY2hhbl9jb3VudCAtPSBwcml2LT5sYXN0X3NjYW5uZWRfY2hhbm5lbDsKKwlpZiAocHJpdi0+c2Nhbl9jaGFubmVsID4gMCkgeworCQljdXJyX2NoYW5zICs9IHByaXYtPnNjYW5fY2hhbm5lbDsKKwkJY2hhbl9jb3VudCAtPSBwcml2LT5zY2FuX2NoYW5uZWw7CiAJfQogCiAJLyogU2VuZCBzY2FuIGNvbW1hbmQocykKQEAgLTYxMiw5ICs0MTYsOSBAQAogCXdoaWxlIChjaGFuX2NvdW50KSB7CiAJCWludCB0b19zY2FuID0gbWluKG51bWNoYW5uZWxzLCBjaGFuX2NvdW50KTsKIAkJbGJzX2RlYl9zY2FuKCJzY2FubmluZyAlZCBvZiAlZCBjaGFubmVsc1xuIiwKLQkJCXRvX3NjYW4sIGNoYW5fY291bnQpOworCQkJICAgICB0b19zY2FuLCBjaGFuX2NvdW50KTsKIAkJcmV0ID0gbGJzX2RvX3NjYW4ocHJpdiwgYnNzdHlwZSwgY3Vycl9jaGFucywKLQkJCXRvX3NjYW4sIHVzZXJfY2ZnKTsKKwkJCQkgIHRvX3NjYW4pOwogCQlpZiAocmV0KSB7CiAJCQlsYnNfcHJfZXJyKCJTQ0FOX0NNRCBmYWlsZWRcbiIpOwogCQkJZ290byBvdXQyOwpAQCAtNjIzLDE3ICs0MjcsMTYgQEAKIAkJY2hhbl9jb3VudCAtPSB0b19zY2FuOwogCiAJCS8qIHNvbWVob3cgc2NoZWR1bGUgdGhlIG5leHQgcGFydCBvZiB0aGUgc2NhbiAqLwotCQlpZiAoY2hhbl9jb3VudCAmJgotCQkgICAgIWZ1bGxfc2NhbiAmJgorCQlpZiAoY2hhbl9jb3VudCAmJiAhZnVsbF9zY2FuICYmCiAJCSAgICAhcHJpdi0+c3VycHJpc2VyZW1vdmVkKSB7CiAJCQkvKiAtMSBtYXJrcyBqdXN0IHRoYXQgd2UncmUgY3VycmVudGx5IHNjYW5uaW5nICovCi0JCQlpZiAocHJpdi0+bGFzdF9zY2FubmVkX2NoYW5uZWwgPCAwKQotCQkJCXByaXYtPmxhc3Rfc2Nhbm5lZF9jaGFubmVsID0gdG9fc2NhbjsKKwkJCWlmIChwcml2LT5zY2FuX2NoYW5uZWwgPCAwKQorCQkJCXByaXYtPnNjYW5fY2hhbm5lbCA9IHRvX3NjYW47CiAJCQllbHNlCi0JCQkJcHJpdi0+bGFzdF9zY2FubmVkX2NoYW5uZWwgKz0gdG9fc2NhbjsKKwkJCQlwcml2LT5zY2FuX2NoYW5uZWwgKz0gdG9fc2NhbjsKIAkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fd29yayk7CiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya190aHJlYWQsICZwcml2LT5zY2FuX3dvcmssCi0JCQkJbXNlY3NfdG9famlmZmllcygzMDApKTsKKwkJCQkJICAgbXNlY3NfdG9famlmZmllcygzMDApKTsKIAkJCS8qIHNraXAgb3ZlciBHSVdTQ0FOIGV2ZW50ICovCiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNjQ4LDEzICs0NTEsMTMgQEAKIAlsYnNfZGViX3NjYW4oInNjYW4gdGFibGU6XG4iKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZwcml2LT5uZXR3b3JrX2xpc3QsIGxpc3QpCiAJCWxic19kZWJfc2NhbigiJTAyZDogQlNTSUQgJXMsIFJTU0kgJWQsIFNTSUQgJyVzJ1xuIiwKLQkJICAgICAgIGkrKywgcHJpbnRfbWFjKG1hYywgaXRlci0+YnNzaWQpLCAoczMyKSBpdGVyLT5yc3NpLAotCQkgICAgICAgZXNjYXBlX2Vzc2lkKGl0ZXItPnNzaWQsIGl0ZXItPnNzaWRfbGVuKSk7CisJCQkgICAgIGkrKywgcHJpbnRfbWFjKG1hYywgaXRlci0+YnNzaWQpLCBpdGVyLT5yc3NpLAorCQkJICAgICBlc2NhcGVfZXNzaWQoaXRlci0+c3NpZCwgaXRlci0+c3NpZF9sZW4pKTsKIAltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwogI2VuZGlmCiAKIG91dDI6Ci0JcHJpdi0+bGFzdF9zY2FubmVkX2NoYW5uZWwgPSAwOworCXByaXYtPnNjYW5fY2hhbm5lbCA9IDA7CiAKIG91dDoKIAlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkgewpAQCAtNjczLDcgKzQ3NiwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgbGJzX3NjYW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGxic19wcml2YXRlLCBzY2FuX3dvcmsud29yayk7CiAKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7CisJbGJzX3NjYW5fbmV0d29ya3MocHJpdiwgMCk7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NDQU4pOworfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02OTQsNyArNTA1LDcgQEAKICAqICBAcmV0dXJuICAgICAgICAgICAgIDAgb3IgLTEKICAqLwogc3RhdGljIGludCBsYnNfcHJvY2Vzc19ic3Moc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MsCi0JCQkJdTggKiogcGJlYWNvbmluZm8sIGludCAqYnl0ZXNsZWZ0KQorCQkJICAgdWludDhfdCAqKnBiZWFjb25pbmZvLCBpbnQgKmJ5dGVzbGVmdCkKIHsKIAlzdHJ1Y3QgaWVlZXR5cGVzX2ZocGFyYW1zZXQgKnBGSDsKIAlzdHJ1Y3QgaWVlZXR5cGVzX2RzcGFyYW1zZXQgKnBEUzsKQEAgLTcwMiw5ICs1MTMsOSBAQAogCXN0cnVjdCBpZWVldHlwZXNfaWJzc3BhcmFtc2V0ICpwaWJzczsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAlzdHJ1Y3QgaWVlZXR5cGVzX2NvdW50cnlpbmZvc2V0ICpwY291bnRyeWluZm87Ci0JdTggKnBvcywgKmVuZCwgKnA7Ci0JdTggbl9leF9yYXRlcyA9IDAsIGdvdF9iYXNpY19yYXRlcyA9IDAsIG5fYmFzaWNfcmF0ZXMgPSAwOwotCXUxNiBiZWFjb25zaXplID0gMDsKKwl1aW50OF90ICpwb3MsICplbmQsICpwOworCXVpbnQ4X3Qgbl9leF9yYXRlcyA9IDAsIGdvdF9iYXNpY19yYXRlcyA9IDAsIG5fYmFzaWNfcmF0ZXMgPSAwOworCXVpbnQxNl90IGJlYWNvbnNpemUgPSAwOwogCWludCByZXQ7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7CkBAIC03NzYsMTIgKzU4NywxMSBAQAogCiAJLyogcHJvY2VzcyB2YXJpYWJsZSBJRSAqLwogCXdoaWxlIChwb3MgPD0gZW5kIC0gMikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqIGVsZW0gPQotCQkJKHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICopIHBvczsKKwkJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKiBlbGVtID0gKHZvaWQgKilwb3M7CiAKIAkJaWYgKHBvcyArIGVsZW0tPmxlbiA+IGVuZCkgewogCQkJbGJzX2RlYl9zY2FuKCJwcm9jZXNzX2JzczogZXJyb3IgaW4gcHJvY2Vzc2luZyBJRSwgIgotCQkJICAgICAgICJieXRlcyBsZWZ0IDwgSUUgbGVuZ3RoXG4iKTsKKwkJCQkgICAgICJieXRlcyBsZWZ0IDwgSUUgbGVuZ3RoXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTc5NSw3ICs2MDUsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBNRklFX1RZUEVfUkFURVM6Ci0JCQluX2Jhc2ljX3JhdGVzID0gbWluX3QodTgsIE1BWF9SQVRFUywgZWxlbS0+bGVuKTsKKwkJCW5fYmFzaWNfcmF0ZXMgPSBtaW5fdCh1aW50OF90LCBNQVhfUkFURVMsIGVsZW0tPmxlbik7CiAJCQltZW1jcHkoYnNzLT5yYXRlcywgZWxlbS0+ZGF0YSwgbl9iYXNpY19yYXRlcyk7CiAJCQlnb3RfYmFzaWNfcmF0ZXMgPSAxOwogCQkJbGJzX2RlYl9zY2FuKCJnb3QgUkFURVMgSUVcbiIpOwpAQCAtODM2LDE5ICs2NDYsMTYgQEAKIAkJCWxic19kZWJfc2NhbigiZ290IENPVU5UUlkgSUVcbiIpOwogCQkJaWYgKHBjb3VudHJ5aW5mby0+bGVuIDwgc2l6ZW9mKHBjb3VudHJ5aW5mby0+Y291bnRyeWNvZGUpCiAJCQkgICAgfHwgcGNvdW50cnlpbmZvLT5sZW4gPiAyNTQpIHsKLQkJCQlsYnNfZGViX3NjYW4oInByb2Nlc3NfYnNzOiAxMUQtIEVyciAiCi0JCQkJICAgICAgICJDb3VudHJ5SW5mbyBsZW4gJWQsIG1pbiAlemQsIG1heCAyNTRcbiIsCi0JCQkJICAgICAgIHBjb3VudHJ5aW5mby0+bGVuLAotCQkJCSAgICAgICBzaXplb2YocGNvdW50cnlpbmZvLT5jb3VudHJ5Y29kZSkpOworCQkJCWxic19kZWJfc2NhbigicHJvY2Vzc19ic3M6IDExRC0gRXJyIENvdW50cnlJbmZvIGxlbiAlZCwgbWluICV6ZCwgbWF4IDI1NFxuIiwKKwkJCQkJICAgICBwY291bnRyeWluZm8tPmxlbiwgc2l6ZW9mKHBjb3VudHJ5aW5mby0+Y291bnRyeWNvZGUpKTsKIAkJCQlyZXQgPSAtMTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAKLQkJCW1lbWNweSgmYnNzLT5jb3VudHJ5aW5mbywKLQkJCSAgICAgICBwY291bnRyeWluZm8sIHBjb3VudHJ5aW5mby0+bGVuICsgMik7CisJCQltZW1jcHkoJmJzcy0+Y291bnRyeWluZm8sIHBjb3VudHJ5aW5mbywgcGNvdW50cnlpbmZvLT5sZW4gKyAyKTsKIAkJCWxic19kZWJfaGV4KExCU19ERUJfU0NBTiwgInByb2Nlc3NfYnNzOiAxMWQgY291bnRyeWluZm8iLAotCQkJCSh1OCAqKSBwY291bnRyeWluZm8sCi0JCQkJKHUzMikgKHBjb3VudHJ5aW5mby0+bGVuICsgMikpOworCQkJCSAgICAodWludDhfdCAqKSBwY291bnRyeWluZm8sCisJCQkJICAgIChpbnQpIChwY291bnRyeWluZm8tPmxlbiArIDIpKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTUZJRV9UWVBFX1JBVEVTX0VYOgpAQCAtODcyLDI2ICs2NzksMTkgQEAKIAogCQljYXNlIE1GSUVfVFlQRV9HRU5FUklDOgogCQkJaWYgKGVsZW0tPmxlbiA+PSA0ICYmCi0JCQkgICAgZWxlbS0+ZGF0YVswXSA9PSAweDAwICYmCi0JCQkgICAgZWxlbS0+ZGF0YVsxXSA9PSAweDUwICYmCi0JCQkgICAgZWxlbS0+ZGF0YVsyXSA9PSAweGYyICYmCi0JCQkgICAgZWxlbS0+ZGF0YVszXSA9PSAweDAxKSB7Ci0JCQkJYnNzLT53cGFfaWVfbGVuID0gbWluKGVsZW0tPmxlbiArIDIsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIE1BWF9XUEFfSUVfTEVOKTsKKwkJCSAgICBlbGVtLT5kYXRhWzBdID09IDB4MDAgJiYgZWxlbS0+ZGF0YVsxXSA9PSAweDUwICYmCisJCQkgICAgZWxlbS0+ZGF0YVsyXSA9PSAweGYyICYmIGVsZW0tPmRhdGFbM10gPT0gMHgwMSkgeworCQkJCWJzcy0+d3BhX2llX2xlbiA9IG1pbihlbGVtLT5sZW4gKyAyLCBNQVhfV1BBX0lFX0xFTik7CiAJCQkJbWVtY3B5KGJzcy0+d3BhX2llLCBlbGVtLCBic3MtPndwYV9pZV9sZW4pOwogCQkJCWxic19kZWJfc2NhbigiZ290IFdQQSBJRVxuIik7Ci0JCQkJbGJzX2RlYl9oZXgoTEJTX0RFQl9TQ0FOLCAiV1BBIElFIiwgYnNzLT53cGFfaWUsCi0JCQkJICAgICAgICAgICAgZWxlbS0+bGVuKTsKKwkJCQlsYnNfZGViX2hleChMQlNfREVCX1NDQU4sICJXUEEgSUUiLCBic3MtPndwYV9pZSwgZWxlbS0+bGVuKTsKIAkJCX0gZWxzZSBpZiAoZWxlbS0+bGVuID49IE1BUlZFTExfTUVTSF9JRV9MRU5HVEggJiYKLQkJCSAgICBlbGVtLT5kYXRhWzBdID09IDB4MDAgJiYKLQkJCSAgICBlbGVtLT5kYXRhWzFdID09IDB4NTAgJiYKLQkJCSAgICBlbGVtLT5kYXRhWzJdID09IDB4NDMgJiYKLQkJCSAgICBlbGVtLT5kYXRhWzNdID09IDB4MDQpIHsKKwkJCQkgICBlbGVtLT5kYXRhWzBdID09IDB4MDAgJiYgZWxlbS0+ZGF0YVsxXSA9PSAweDUwICYmCisJCQkJICAgZWxlbS0+ZGF0YVsyXSA9PSAweDQzICYmIGVsZW0tPmRhdGFbM10gPT0gMHgwNCkgewogCQkJCWxic19kZWJfc2NhbigiZ290IG1lc2ggSUVcbiIpOwogCQkJCWJzcy0+bWVzaCA9IDE7CiAJCQl9IGVsc2UgewotCQkJCWxic19kZWJfc2NhbigiZ290IGdlbmVyaWVjIElFOiAiCi0JCQkJCSIlMDJ4OiUwMng6JTAyeDolMDJ4LCBsZW4gJWRcbiIsCisJCQkJbGJzX2RlYl9zY2FuKCJnb3QgZ2VuZXJpYyBJRTogJTAyeDolMDJ4OiUwMng6JTAyeCwgbGVuICVkXG4iLAogCQkJCQllbGVtLT5kYXRhWzBdLCBlbGVtLT5kYXRhWzFdLAogCQkJCQllbGVtLT5kYXRhWzJdLCBlbGVtLT5kYXRhWzNdLAogCQkJCQllbGVtLT5sZW4pOwpAQCAtOTAzLDEyICs3MDMsMTIgQEAKIAkJCWJzcy0+cnNuX2llX2xlbiA9IG1pbihlbGVtLT5sZW4gKyAyLCBNQVhfV1BBX0lFX0xFTik7CiAJCQltZW1jcHkoYnNzLT5yc25faWUsIGVsZW0sIGJzcy0+cnNuX2llX2xlbik7CiAJCQlsYnNfZGViX2hleChMQlNfREVCX1NDQU4sICJwcm9jZXNzX2JzczogUlNOX0lFIiwKLQkJCQlic3MtPnJzbl9pZSwgZWxlbS0+bGVuKTsKKwkJCQkgICAgYnNzLT5yc25faWUsIGVsZW0tPmxlbik7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgogCQkJbGJzX2RlYl9zY2FuKCJnb3QgSUUgMHglMDR4LCBsZW4gJWRcbiIsCi0JCQkJZWxlbS0+aWQsIGVsZW0tPmxlbik7CisJCQkJICAgICBlbGVtLT5pZCwgZWxlbS0+bGVuKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTkyNywyMTMgKzcyNyw2IEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGEgc3BlY2lmaWMgY29tcGF0aWJsZSBCU1NJRCBpbiB0aGUgc2NhbiBsaXN0Ci0gKgotICogIFVzZWQgaW4gYXNzb2NpYXRpb24gY29kZQotICoKLSAqICBAcGFyYW0gcHJpdiAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQotICogIEBwYXJhbSBic3NpZCAgICBCU1NJRCB0byBmaW5kIGluIHRoZSBzY2FuIGxpc3QKLSAqICBAcGFyYW0gbW9kZSAgICAgTmV0d29yayBtb2RlOiBJbmZyYXN0cnVjdHVyZSBvciBJQlNTCi0gKgotICogIEByZXR1cm4gICAgICAgICBpbmRleCBpbiBCU1NJRCBsaXN0LCBvciBlcnJvciByZXR1cm4gY29kZSAoPCAwKQotICovCi1zdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmxic19maW5kX2Jzc2lkX2luX2xpc3Qoc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQl1OCAqIGJzc2lkLCB1OCBtb2RlKQotewotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIGl0ZXJfYnNzOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIGZvdW5kX2JzcyA9IE5VTEw7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7Ci0KLQlpZiAoIWJzc2lkKQotCQlnb3RvIG91dDsKLQotCWxic19kZWJfaGV4KExCU19ERUJfU0NBTiwgImxvb2tpbmcgZm9yIiwKLQkJYnNzaWQsIEVUSF9BTEVOKTsKLQotCS8qIExvb2sgdGhyb3VnaCB0aGUgc2NhbiB0YWJsZSBmb3IgYSBjb21wYXRpYmxlIG1hdGNoLiAgVGhlIGxvb3Agd2lsbAotCSAqICAgY29udGludWUgcGFzdCBhIG1hdGNoZWQgYnNzaWQgdGhhdCBpcyBub3QgY29tcGF0aWJsZSBpbiBjYXNlIHRoZXJlCi0JICogICBpcyBhbiBBUCB3aXRoIG11bHRpcGxlIFNTSURzIGFzc2lnbmVkIHRvIHRoZSBzYW1lIEJTU0lECi0JICovCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSAoaXRlcl9ic3MsICZwcml2LT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihpdGVyX2Jzcy0+YnNzaWQsIGJzc2lkKSkKLQkJCWNvbnRpbnVlOyAvKiBic3NpZCBkb2Vzbid0IG1hdGNoICovCi0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIElXX01PREVfSU5GUkE6Ci0JCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJCWlmICghaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGl0ZXJfYnNzLCBtb2RlKSkKLQkJCQlicmVhazsKLQkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlmb3VuZF9ic3MgPSBpdGVyX2JzczsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAiZm91bmRfYnNzICVwIiwgZm91bmRfYnNzKTsKLQlyZXR1cm4gZm91bmRfYnNzOwotfQotCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBmaW5kcyBzc2lkIGluIHNzaWQgbGlzdC4KLSAqCi0gKiAgVXNlZCBpbiBhc3NvY2lhdGlvbiBjb2RlCi0gKgotICogIEBwYXJhbSBwcml2ICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKiAgQHBhcmFtIHNzaWQgICAgIFNTSUQgdG8gZmluZCBpbiB0aGUgbGlzdAotICogIEBwYXJhbSBic3NpZCAgICBCU1NJRCB0byBxdWFsaWZ5IHRoZSBTU0lEIHNlbGVjdGlvbiAoaWYgcHJvdmlkZWQpCi0gKiAgQHBhcmFtIG1vZGUgICAgIE5ldHdvcmsgbW9kZTogSW5mcmFzdHJ1Y3R1cmUgb3IgSUJTUwotICoKLSAqICBAcmV0dXJuICAgICAgICAgaW5kZXggaW4gQlNTSUQgbGlzdAotICovCi1zdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmxic19maW5kX3NzaWRfaW5fbGlzdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JCSAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbiwgdTggKiBic3NpZCwgdTggbW9kZSwKLQkJICAgaW50IGNoYW5uZWwpCi17Ci0JdTggYmVzdHJzc2kgPSAwOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIGl0ZXJfYnNzID0gTlVMTDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBmb3VuZF9ic3MgPSBOVUxMOwotCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqIHRtcF9vbGRlc3QgPSBOVUxMOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChpdGVyX2JzcywgJnByaXYtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAoICAgIXRtcF9vbGRlc3QKLQkJICAgIHx8IChpdGVyX2Jzcy0+bGFzdF9zY2FubmVkIDwgdG1wX29sZGVzdC0+bGFzdF9zY2FubmVkKSkKLQkJCXRtcF9vbGRlc3QgPSBpdGVyX2JzczsKLQotCQlpZiAobGJzX3NzaWRfY21wKGl0ZXJfYnNzLT5zc2lkLCBpdGVyX2Jzcy0+c3NpZF9sZW4sCi0JCSAgICAgICAgICAgICAgICAgICAgICBzc2lkLCBzc2lkX2xlbikgIT0gMCkKLQkJCWNvbnRpbnVlOyAvKiBzc2lkIGRvZXNuJ3QgbWF0Y2ggKi8KLQkJaWYgKGJzc2lkICYmIGNvbXBhcmVfZXRoZXJfYWRkcihpdGVyX2Jzcy0+YnNzaWQsIGJzc2lkKSAhPSAwKQotCQkJY29udGludWU7IC8qIGJzc2lkIGRvZXNuJ3QgbWF0Y2ggKi8KLQkJaWYgKChjaGFubmVsID4gMCkgJiYgKGl0ZXJfYnNzLT5jaGFubmVsICE9IGNoYW5uZWwpKQotCQkJY29udGludWU7IC8qIGNoYW5uZWwgZG9lc24ndCBtYXRjaCAqLwotCi0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIElXX01PREVfSU5GUkE6Ci0JCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJCWlmICghaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGl0ZXJfYnNzLCBtb2RlKSkKLQkJCQlicmVhazsKLQotCQkJaWYgKGJzc2lkKSB7Ci0JCQkJLyogRm91bmQgcmVxdWVzdGVkIEJTU0lEICovCi0JCQkJZm91bmRfYnNzID0gaXRlcl9ic3M7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJCWlmIChTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpID4gYmVzdHJzc2kpIHsKLQkJCQliZXN0cnNzaSA9IFNDQU5fUlNTSShpdGVyX2Jzcy0+cnNzaSk7Ci0JCQkJZm91bmRfYnNzID0gaXRlcl9ic3M7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBJV19NT0RFX0FVVE86Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKSA+IGJlc3Ryc3NpKSB7Ci0JCQkJYmVzdHJzc2kgPSBTQ0FOX1JTU0koaXRlcl9ic3MtPnJzc2kpOwotCQkJCWZvdW5kX2JzcyA9IGl0ZXJfYnNzOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwotCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NDQU4sICJmb3VuZF9ic3MgJXAiLCBmb3VuZF9ic3MpOwotCXJldHVybiBmb3VuZF9ic3M7Ci19Ci0KLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBiZXN0IFNTSUQgaW4gdGhlIFNjYW4gTGlzdAotICoKLSAqICBTZWFyY2ggdGhlIHNjYW4gdGFibGUgZm9yIHRoZSBiZXN0IFNTSUQgdGhhdCBhbHNvIG1hdGNoZXMgdGhlIGN1cnJlbnQKLSAqICAgYWRhcHRlciBuZXR3b3JrIHByZWZlcmVuY2UgKGluZnJhc3RydWN0dXJlIG9yIGFkaG9jKQotICoKLSAqICBAcGFyYW0gcHJpdiAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQotICoKLSAqICBAcmV0dXJuICAgICAgICAgaW5kZXggaW4gQlNTSUQgbGlzdAotICovCi1zdGF0aWMgc3RydWN0IGJzc19kZXNjcmlwdG9yICpsYnNfZmluZF9iZXN0X3NzaWRfaW5fbGlzdCgKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JdTggbW9kZSkKLXsKLQl1OCBiZXN0cnNzaSA9IDA7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICogaXRlcl9ic3M7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICogYmVzdF9ic3MgPSBOVUxMOwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChpdGVyX2JzcywgJnByaXYtPm5ldHdvcmtfbGlzdCwgbGlzdCkgewotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSBJV19NT0RFX0lORlJBOgotCQljYXNlIElXX01PREVfQURIT0M6Ci0JCQlpZiAoIWlzX25ldHdvcmtfY29tcGF0aWJsZShwcml2LCBpdGVyX2JzcywgbW9kZSkpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKSA8PSBiZXN0cnNzaSkKLQkJCQlicmVhazsKLQkJCWJlc3Ryc3NpID0gU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKTsKLQkJCWJlc3RfYnNzID0gaXRlcl9ic3M7Ci0JCQlicmVhazsKLQkJY2FzZSBJV19NT0RFX0FVVE86Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKSA8PSBiZXN0cnNzaSkKLQkJCQlicmVhazsKLQkJCWJlc3Ryc3NpID0gU0NBTl9SU1NJKGl0ZXJfYnNzLT5yc3NpKTsKLQkJCWJlc3RfYnNzID0gaXRlcl9ic3M7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7Ci0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0NBTiwgImJlc3RfYnNzICVwIiwgYmVzdF9ic3MpOwotCXJldHVybiBiZXN0X2JzczsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIEZpbmQgdGhlIEFQIHdpdGggc3BlY2lmaWMgc3NpZCBpbiB0aGUgc2NhbiBsaXN0Ci0gKgotICogIFVzZWQgZnJvbSBhc3NvY2lhdGlvbiB3b3JrZXIuCi0gKgotICogIEBwYXJhbSBwcml2ICAgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gcFNTSUQgICAgICAgIEEgcG9pbnRlciB0byBBUCdzIHNzaWQKLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwLS1zdWNjZXNzLCBvdGhlcndpc2UtLWZhaWwKLSAqLwotaW50IGxic19maW5kX2Jlc3RfbmV0d29ya19zc2lkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJdTggKm91dF9zc2lkLCB1OCAqb3V0X3NzaWRfbGVuLCB1OCBwcmVmZXJyZWRfbW9kZSwgdTggKm91dF9tb2RlKQotewotCWludCByZXQgPSAtMTsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBmb3VuZDsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TQ0FOKTsKLQotCWxic19zY2FuX25ldHdvcmtzKHByaXYsIE5VTEwsIDEpOwotCWlmIChwcml2LT5zdXJwcmlzZXJlbW92ZWQpCi0JCWdvdG8gb3V0OwotCi0JZm91bmQgPSBsYnNfZmluZF9iZXN0X3NzaWRfaW5fbGlzdChwcml2LCBwcmVmZXJyZWRfbW9kZSk7Ci0JaWYgKGZvdW5kICYmIChmb3VuZC0+c3NpZF9sZW4gPiAwKSkgewotCQltZW1jcHkob3V0X3NzaWQsICZmb3VuZC0+c3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOwotCQkqb3V0X3NzaWRfbGVuID0gZm91bmQtPnNzaWRfbGVuOwotCQkqb3V0X21vZGUgPSBmb3VuZC0+bW9kZTsKLQkJcmV0ID0gMDsKLQl9Ci0KLW91dDoKLQlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAicmV0ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qKgogICogIEBicmllZiBTZW5kIGEgc2NhbiBjb21tYW5kIGZvciBhbGwgYXZhaWxhYmxlIGNoYW5uZWxzIGZpbHRlcmVkIG9uIGEgc3BlYwogICoKICAqICBVc2VkIGluIGFzc29jaWF0aW9uIGNvZGUgYW5kIGZyb20gZGVidWdmcwpAQCAtMTE0MSwyOSArNzM0LDI0IEBACiAgKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqICBAcGFyYW0gc3NpZCAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFNTSUQgdG8gc2NhbiBmb3IKICAqICBAcGFyYW0gc3NpZF9sZW4gICAgICAgICBMZW5ndGggb2YgdGhlIFNTSUQKLSAqICBAcGFyYW0gY2xlYXJfc3NpZCAgICAgICBTaG91bGQgZXhpc3Rpbmcgc2NhbiByZXN1bHRzIHdpdGggdGhpcyBTU0lECi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY2xlYXJlZD8KICAqCiAgKiAgQHJldHVybiAgICAgICAgICAgICAgICAwLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCiAgKi8KLWludCBsYnNfc2VuZF9zcGVjaWZpY19zc2lkX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJdTggKnNzaWQsIHU4IHNzaWRfbGVuLCB1OCBjbGVhcl9zc2lkKQoraW50IGxic19zZW5kX3NwZWNpZmljX3NzaWRfc2NhbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQ4X3QgKnNzaWQsCisJCQkJdWludDhfdCBzc2lkX2xlbikKIHsKLQlzdHJ1Y3QgbGJzX2lvY3RsX3VzZXJfc2Nhbl9jZmcgc2NhbmNmZzsKIAlpbnQgcmV0ID0gMDsKIAotCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX1NDQU4sICJTU0lEICclcycsIGNsZWFyICVkIiwKLQkJZXNjYXBlX2Vzc2lkKHNzaWQsIHNzaWRfbGVuKSwgY2xlYXJfc3NpZCk7CisJbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfU0NBTiwgIlNTSUQgJyVzJ1xuIiwKKwkJCSAgIGVzY2FwZV9lc3NpZChzc2lkLCBzc2lkX2xlbikpOwogCiAJaWYgKCFzc2lkX2xlbikKIAkJZ290byBvdXQ7CiAKLQltZW1zZXQoJnNjYW5jZmcsIDB4MDAsIHNpemVvZihzY2FuY2ZnKSk7Ci0JbWVtY3B5KHNjYW5jZmcuc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXNjYW5jZmcuc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQlzY2FuY2ZnLmNsZWFyX3NzaWQgPSBjbGVhcl9zc2lkOworCW1lbWNweShwcml2LT5zY2FuX3NzaWQsIHNzaWQsIHNzaWRfbGVuKTsKKwlwcml2LT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47CiAKLQlsYnNfc2Nhbl9uZXR3b3Jrcyhwcml2LCAmc2NhbmNmZywgMSk7CisJbGJzX3NjYW5fbmV0d29ya3MocHJpdiwgMSk7CiAJaWYgKHByaXYtPnN1cnByaXNlcmVtb3ZlZCkgewogCQlyZXQgPSAtMTsKIAkJZ290byBvdXQ7CkBAIC0xMTg3LDE3ICs3NzUsMTcgQEAKICNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKIAogc3RhdGljIGlubGluZSBjaGFyICpsYnNfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCQljaGFyICpzdGFydCwgY2hhciAqc3RvcCwKLQkJCQkJc3RydWN0IGJzc19kZXNjcmlwdG9yICpic3MpCisJCQkJICAgICAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLAorCQkJCSAgICAgICBzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmJzcykKIHsKIAlzdHJ1Y3QgY2hhbl9mcmVxX3Bvd2VyICpjZnA7CiAJY2hhciAqY3VycmVudF92YWw7CS8qIEZvciByYXRlcyAqLwogCXN0cnVjdCBpd19ldmVudCBpd2U7CS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KIAlpbnQgajsKLSNkZWZpbmUgUEVSRkVDVF9SU1NJICgodTgpNTApCi0jZGVmaW5lIFdPUlNUX1JTU0kgICAoKHU4KTApCi0jZGVmaW5lIFJTU0lfRElGRiAgICAoKHU4KShQRVJGRUNUX1JTU0kgLSBXT1JTVF9SU1NJKSkKLQl1OCByc3NpOworI2RlZmluZSBQRVJGRUNUX1JTU0kgKCh1aW50OF90KTUwKQorI2RlZmluZSBXT1JTVF9SU1NJICAgKCh1aW50OF90KTApCisjZGVmaW5lIFJTU0lfRElGRiAgICAoKHVpbnQ4X3QpKFBFUkZFQ1RfUlNTSSAtIFdPUlNUX1JTU0kpKQorCXVpbnQ4X3QgcnNzaTsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TQ0FOKTsKIApAQCAtMTIxNyw3ICs4MDUsNyBAQAogCS8qIFNTSUQgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwogCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gbWluKCh1MzIpIGJzcy0+c3NpZF9sZW4sICh1MzIpIElXX0VTU0lEX01BWF9TSVpFKTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IG1pbigodWludDMyX3QpIGJzcy0+c3NpZF9sZW4sICh1aW50MzJfdCkgSVdfRVNTSURfTUFYX1NJWkUpOwogCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGJzcy0+c3NpZCk7CiAKIAkvKiBNb2RlICovCkBAIC0xMjM4LDI4ICs4MjYsMjYgQEAKIAogCXJzc2kgPSBpd2UudS5xdWFsLmxldmVsIC0gTVJWRFJWX05GX0RFRkFVTFRfU0NBTl9WQUxVRTsKIAlpd2UudS5xdWFsLnF1YWwgPQotCSAgICAoMTAwICogUlNTSV9ESUZGICogUlNTSV9ESUZGIC0gKFBFUkZFQ1RfUlNTSSAtIHJzc2kpICoKLQkgICAgICgxNSAqIChSU1NJX0RJRkYpICsgNjIgKiAoUEVSRkVDVF9SU1NJIC0gcnNzaSkpKSAvCi0JICAgIChSU1NJX0RJRkYgKiBSU1NJX0RJRkYpOworCQkoMTAwICogUlNTSV9ESUZGICogUlNTSV9ESUZGIC0gKFBFUkZFQ1RfUlNTSSAtIHJzc2kpICoKKwkJICgxNSAqIChSU1NJX0RJRkYpICsgNjIgKiAoUEVSRkVDVF9SU1NJIC0gcnNzaSkpKSAvCisJCShSU1NJX0RJRkYgKiBSU1NJX0RJRkYpOwogCWlmIChpd2UudS5xdWFsLnF1YWwgPiAxMDApCiAJCWl3ZS51LnF1YWwucXVhbCA9IDEwMDsKIAogCWlmIChwcml2LT5ORltUWVBFX0JFQUNPTl1bVFlQRV9OT0FWR10gPT0gMCkgewogCQlpd2UudS5xdWFsLm5vaXNlID0gTVJWRFJWX05GX0RFRkFVTFRfU0NBTl9WQUxVRTsKIAl9IGVsc2UgewotCQlpd2UudS5xdWFsLm5vaXNlID0KLQkJICAgIENBTF9ORihwcml2LT5ORltUWVBFX0JFQUNPTl1bVFlQRV9OT0FWR10pOworCQlpd2UudS5xdWFsLm5vaXNlID0gQ0FMX05GKHByaXYtPk5GW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSk7CiAJfQogCiAJLyogTG9jYWxseSBjcmVhdGVkIGFkLWhvYyBCU1NzIHdvbid0IGhhdmUgYmVhY29ucyBpZiB0aGlzIGlzIHRoZQogCSAqIG9ubHkgc3RhdGlvbiBpbiB0aGUgYWRob2MgbmV0d29yazsgc28gZ2V0IHNpZ25hbCBzdHJlbmd0aAogCSAqIGZyb20gcmVjZWl2ZSBzdGF0aXN0aWNzLgogCSAqLwotCWlmICgocHJpdi0+bW9kZSA9PSBJV19NT0RFX0FESE9DKQotCSAgICAmJiBwcml2LT5hZGhvY2NyZWF0ZQorCWlmICgocHJpdi0+bW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiBwcml2LT5hZGhvY2NyZWF0ZQogCSAgICAmJiAhbGJzX3NzaWRfY21wKHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSkgeworCQkJICAgICBwcml2LT5jdXJic3NwYXJhbXMuc3NpZF9sZW4sCisJCQkgICAgIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikpIHsKIAkJaW50IHNuciwgbmY7CiAJCXNuciA9IHByaXYtPlNOUltUWVBFX1JYUERdW1RZUEVfQVZHXSAvIEFWR19TQ0FMRTsKIAkJbmYgPSBwcml2LT5ORltUWVBFX1JYUERdW1RZUEVfQVZHXSAvIEFWR19TQ0FMRTsKQEAgLTEyOTAsMTQgKzg3NiwxMyBAQAogCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKHN0YXJ0LCBjdXJyZW50X3ZhbCwKIAkJCQkJIHN0b3AsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAJfQotCWlmICgoYnNzLT5tb2RlID09IElXX01PREVfQURIT0MpCisJaWYgKChic3MtPm1vZGUgPT0gSVdfTU9ERV9BREhPQykgJiYgcHJpdi0+YWRob2NjcmVhdGUKIAkgICAgJiYgIWxic19zc2lkX2NtcChwcml2LT5jdXJic3NwYXJhbXMuc3NpZCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikKLQkgICAgJiYgcHJpdi0+YWRob2NjcmVhdGUpIHsKKwkJCSAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuLAorCQkJICAgICBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pKSB7CiAJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAyMiAqIDUwMDAwMDsKIAkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShzdGFydCwgY3VycmVudF92YWwsCi0JCQkJCSBzdG9wLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCQkJCQkJICAgc3RvcCwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKIAl9CiAJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCiAJaWYoKGN1cnJlbnRfdmFsIC0gc3RhcnQpID4gSVdfRVZfTENQX0xFTikKQEAgLTEzMjYsOCArOTExLDcgQEAKIAkJY2hhciAqcCA9IGN1c3RvbTsKIAogCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJcCArPSBzbnByaW50ZihwLCBNQVhfQ1VTVE9NX0xFTiAtIChwIC0gY3VzdG9tKSwKLQkJICAgICAgICAgICAgICAibWVzaC10eXBlOiBvbHBjIik7CisJCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4sICJtZXNoLXR5cGU6IG9scGMiKTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBwIC0gY3VzdG9tOwogCQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCiAJCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwpAQCAtMTM1MCwzOSArOTM0LDQ5IEBACiAgKiAgQHJldHVybiAgICAgICAgICAgICAwIC0tc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWwKICAqLwogaW50IGxic19zZXRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgIHN0cnVjdCBpd19wYXJhbSAqd3JxdSwgY2hhciAqZXh0cmEpCisJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJldCA9IDA7CiAKLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJcmV0ID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBtYWM4MDIxMSBkb2VzIHRoaXM6CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV94eHgpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSAmJgotCSAgICB3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCXJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKLQkJCXNzaWQgPSByZXEtPmVzc2lkOwotCQlzc2lkX2xlbiA9IHJlcS0+ZXNzaWRfbGVuOworCWlmIChzZGF0YS0+dHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV94eHgpIHsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OwogCX0KIAkqLwogCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpICYmCisJICAgIHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJc3RydWN0IGl3X3NjYW5fcmVxICpyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisJCXByaXYtPnNjYW5fc3NpZF9sZW4gPSByZXEtPmVzc2lkX2xlbjsKKwkJbWVtY3B5KHByaXYtPnNjYW5fc3NpZCwgcmVxLT5lc3NpZCwgcHJpdi0+c2Nhbl9zc2lkX2xlbik7CisJCWxic19kZWJfd2V4dCgic2V0X3NjYW4sIGVzc2lkICclcydcbiIsCisJCQllc2NhcGVfZXNzaWQocHJpdi0+c2Nhbl9zc2lkLCBwcml2LT5zY2FuX3NzaWRfbGVuKSk7CisJfSBlbHNlIHsKKwkJcHJpdi0+c2Nhbl9zc2lkX2xlbiA9IDA7CisJfQorCiAJaWYgKCFkZWxheWVkX3dvcmtfcGVuZGluZygmcHJpdi0+c2Nhbl93b3JrKSkKIAkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtfdGhyZWFkLCAmcHJpdi0+c2Nhbl93b3JrLAotCQkJbXNlY3NfdG9famlmZmllcyg1MCkpOworCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKIAkvKiBzZXQgbWFya2VyIHRoYXQgY3VycmVudGx5IGEgc2NhbiBpcyB0YWtpbmcgcGxhY2UgKi8KLQlwcml2LT5sYXN0X3NjYW5uZWRfY2hhbm5lbCA9IC0xOworCXByaXYtPnNjYW5fY2hhbm5lbCA9IC0xOwogCiAJaWYgKHByaXYtPnN1cnByaXNlcmVtb3ZlZCkKLQkJcmV0dXJuIC1FSU87CisJCXJldCA9IC1FSU87CiAKLQlsYnNfZGViX2xlYXZlKExCU19ERUJfU0NBTik7Ci0JcmV0dXJuIDA7CitvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0xMzk3LDMxICs5OTEsMzAgQEAKICAqICBAcmV0dXJuICAgICAgICAgICAgIDAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAogICovCiBpbnQgbGJzX2dldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKKwkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpCiB7CiAjZGVmaW5lIFNDQU5fSVRFTV9TSVpFIDEyOAogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+cHJpdjsKIAlpbnQgZXJyID0gMDsKIAljaGFyICpldiA9IGV4dHJhOwogCWNoYXIgKnN0b3AgPSBldiArIGR3cnEtPmxlbmd0aDsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBpdGVyX2JzczsKLQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBzYWZlOworCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqaXRlcl9ic3M7CisJc3RydWN0IGJzc19kZXNjcmlwdG9yICpzYWZlOwogCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1NDQU4pOworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIAogCS8qIGl3bGlzdCBzaG91bGQgd2FpdCB1bnRpbCB0aGUgY3VycmVudCBzY2FuIGlzIGZpbmlzaGVkICovCi0JaWYgKHByaXYtPmxhc3Rfc2Nhbm5lZF9jaGFubmVsKQorCWlmIChwcml2LT5zY2FuX2NoYW5uZWwpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJLyogVXBkYXRlIFJTU0kgaWYgY3VycmVudCBCU1MgaXMgYSBsb2NhbGx5IGNyZWF0ZWQgYWQtaG9jIEJTUyAqLwotCWlmICgocHJpdi0+bW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiBwcml2LT5hZGhvY2NyZWF0ZSkgeworCWlmICgocHJpdi0+bW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiBwcml2LT5hZGhvY2NyZWF0ZSkKIAkJbGJzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBDTURfODAyXzExX1JTU0ksIDAsCi0JCQkJCUNNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgTlVMTCk7Ci0JfQorCQkJCQkgICAgIENNRF9PUFRJT05fV0FJVEZPUlJTUCwgMCwgTlVMTCk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgKGl0ZXJfYnNzLCBzYWZlLCAmcHJpdi0+bmV0d29ya19saXN0LCBsaXN0KSB7Ci0JCWNoYXIgKiBuZXh0X2V2OworCQljaGFyICpuZXh0X2V2OwogCQl1bnNpZ25lZCBsb25nIHN0YWxlX3RpbWU7CiAKIAkJaWYgKHN0b3AgLSBldiA8IFNDQU5fSVRFTV9TSVpFKSB7CkBAIC0xNDM2LDggKzEwMjksNyBAQAogCQkvKiBQcnVuZSBvbGQgYW4gb2xkIHNjYW4gcmVzdWx0ICovCiAJCXN0YWxlX3RpbWUgPSBpdGVyX2Jzcy0+bGFzdF9zY2FubmVkICsgREVGQVVMVF9NQVhfU0NBTl9BR0U7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YWxlX3RpbWUpKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCAoJml0ZXJfYnNzLT5saXN0LAotCQkJICAgICAgICAgICAgICAgICZwcml2LT5uZXR3b3JrX2ZyZWVfbGlzdCk7CisJCQlsaXN0X21vdmVfdGFpbCgmaXRlcl9ic3MtPmxpc3QsICZwcml2LT5uZXR3b3JrX2ZyZWVfbGlzdCk7CiAJCQljbGVhcl9ic3NfZGVzY3JpcHRvcihpdGVyX2Jzcyk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTQ1Myw3ICsxMDQ1LDcgQEAKIAlkd3JxLT5sZW5ndGggPSAoZXYgLSBleHRyYSk7CiAJZHdycS0+ZmxhZ3MgPSAwOwogCi0JbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0NBTiwgInJldCAlZCIsIGVycik7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIGVycik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQ2OCw0NCArMTA2MCw2IEBACiAKIAogLyoqCi0gKiAgQGJyaWVmIFByZXBhcmUgYSBzY2FuIGNvbW1hbmQgdG8gYmUgc2VudCB0byB0aGUgZmlybXdhcmUKLSAqCi0gKiAgQ2FsbGVkIHZpYSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIENNRF84MDJfMTFfU0NBTiwgLi4uKQotICogIGZyb20gY21kLmMKLSAqCi0gKiAgU2VuZHMgYSBmaXhlZCBsZW5ndGggZGF0YSBwYXJ0IChzcGVjaWZ5aW5nIHRoZSBCU1MgdHlwZSBhbmQgQlNTSUQgZmlsdGVycykKLSAqICBhcyB3ZWxsIGFzIGEgdmFyaWFibGUgbnVtYmVyL2xlbmd0aCBvZiBUTFZzIHRvIHRoZSBmaXJtd2FyZS4KLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY21kICAgICAgICBBIHBvaW50ZXIgdG8gY21kX2RzX2NvbW1hbmQgc3RydWN0dXJlIHRvIGJlIHNlbnQgdG8KLSAqICAgICAgICAgICAgICAgICAgICBmaXJtd2FyZSB3aXRoIHRoZSBjbWRfRFNfODAxXzExX1NDQU4gc3RydWN0dXJlCi0gKiAgQHBhcmFtIHBkYXRhX2J1ZiAgVm9pZCBwb2ludGVyIGNhc3Qgb2YgYSBsYnNfc2Nhbl9jbWRfY29uZmlnIHN0cnVjdCB1c2VkCi0gKiAgICAgICAgICAgICAgICAgICAgdG8gc2V0IHRoZSBmaWVsZHMvVExWcyBmb3IgdGhlIGNvbW1hbmQgc2VudCB0byBmaXJtd2FyZQotICoKLSAqICBAcmV0dXJuICAgICAgICAgICAwIG9yIC0xCi0gKi8KLWludCBsYnNfY21kXzgwMjExX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpwZGF0YV9idWYpCi17Ci0Jc3RydWN0IGNtZF9kc184MDJfMTFfc2NhbiAqcHNjYW4gPSAmY21kLT5wYXJhbXMuc2NhbjsKLQlzdHJ1Y3QgbGJzX3NjYW5fY21kX2NvbmZpZyAqcHNjYW5jZmcgPSBwZGF0YV9idWY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfU0NBTik7Ci0KLQkvKiBTZXQgZml4ZWQgZmllbGQgdmFyaWFibGVzIGluIHNjYW4gY29tbWFuZCAqLwotCXBzY2FuLT5ic3N0eXBlID0gcHNjYW5jZmctPmJzc3R5cGU7Ci0JbWVtY3B5KHBzY2FuLT5ic3NpZCwgcHNjYW5jZmctPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHBzY2FuLT50bHZidWZmZXIsIHBzY2FuY2ZnLT50bHZidWZmZXIsIHBzY2FuY2ZnLT50bHZidWZmZXJsZW4pOwotCi0JLyogc2l6ZSBpcyBlcXVhbCB0byB0aGUgc2l6ZW9mKGZpeGVkIHBvcnRpb25zKSArIHRoZSBUTFYgbGVuICsgaGVhZGVyICovCi0JY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHBzY2FuLT5ic3N0eXBlKSArIEVUSF9BTEVOCi0JCQkJKyBwc2NhbmNmZy0+dGx2YnVmZmVybGVuICsgU19EU19HRU4pOwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NDQU4pOwotCXJldHVybiAwOwotfQotCi0vKioKICAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIHNjYW4KICAqCiAgKiAgQ2FsbGVkIGZyb20gaGFuZGxlX2NtZF9yZXNwb25zZSgpIGluIGNtZHJlc3BjLgpAQCAtMTUzMSwxMyArMTA4NSwxNCBAQAogICoKICAqICBAcmV0dXJuICAgICAgICAwIG9yIC0xCiAgKi8KLWludCBsYnNfcmV0XzgwMjExX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKnJlc3ApCitzdGF0aWMgaW50IGxic19yZXRfODAyMTFfc2NhbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGxvbmcgZHVtbXksCisJCQkgICAgICBzdHJ1Y3QgY21kX2hlYWRlciAqcmVzcCkKIHsKLQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zY2FuX3JzcCAqcHNjYW47Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICogaXRlcl9ic3M7Ci0Jc3RydWN0IGJzc19kZXNjcmlwdG9yICogc2FmZTsKLQl1OCAqcGJzc2luZm87Ci0JdTE2IHNjYW5yZXNwc2l6ZTsKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9zY2FuX3JzcCAqc2NhbnJlc3AgPSAodm9pZCAqKXJlc3A7CisJc3RydWN0IGJzc19kZXNjcmlwdG9yICppdGVyX2JzczsKKwlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKnNhZmU7CisJdWludDhfdCAqYnNzaW5mbzsKKwl1aW50MTZfdCBzY2FucmVzcHNpemU7CiAJaW50IGJ5dGVzbGVmdDsKIAlpbnQgaWR4OwogCWludCB0bHZidWZzaXplOwpAQCAtMTU1NCw0OCArMTEwOSw0NSBAQAogCQljbGVhcl9ic3NfZGVzY3JpcHRvcihpdGVyX2Jzcyk7CiAJfQogCi0JcHNjYW4gPSAmcmVzcC0+cGFyYW1zLnNjYW5yZXNwOwotCi0JaWYgKHBzY2FuLT5ucl9zZXRzID4gTUFYX05FVFdPUktfQ09VTlQpIHsKLQkJbGJzX2RlYl9zY2FuKAotCQkgICAgICAgIlNDQU5fUkVTUDogdG9vIG1hbnkgc2NhbiByZXN1bHRzICglZCwgbWF4ICVkKSEhXG4iLAotCQkgICAgICAgcHNjYW4tPm5yX3NldHMsIE1BWF9ORVRXT1JLX0NPVU5UKTsKKwlpZiAoc2NhbnJlc3AtPm5yX3NldHMgPiBNQVhfTkVUV09SS19DT1VOVCkgeworCQlsYnNfZGViX3NjYW4oIlNDQU5fUkVTUDogdG9vIG1hbnkgc2NhbiByZXN1bHRzICglZCwgbWF4ICVkKVxuIiwKKwkJCSAgICAgc2NhbnJlc3AtPm5yX3NldHMsIE1BWF9ORVRXT1JLX0NPVU5UKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlieXRlc2xlZnQgPSBsZTE2X3RvX2NwdShwc2Nhbi0+YnNzZGVzY3JpcHRzaXplKTsKKwlieXRlc2xlZnQgPSBsZTE2X3RvX2NwdShzY2FucmVzcC0+YnNzZGVzY3JpcHRzaXplKTsKIAlsYnNfZGViX3NjYW4oIlNDQU5fUkVTUDogYnNzZGVzY3JpcHRzaXplICVkXG4iLCBieXRlc2xlZnQpOwogCiAJc2NhbnJlc3BzaXplID0gbGUxNl90b19jcHUocmVzcC0+c2l6ZSk7Ci0JbGJzX2RlYl9zY2FuKCJTQ0FOX1JFU1A6IHNjYW4gcmVzdWx0cyAlZFxuIiwgcHNjYW4tPm5yX3NldHMpOworCWxic19kZWJfc2NhbigiU0NBTl9SRVNQOiBzY2FuIHJlc3VsdHMgJWRcbiIsIHNjYW5yZXNwLT5ucl9zZXRzKTsKIAotCXBic3NpbmZvID0gcHNjYW4tPmJzc2Rlc2NfYW5kX3RsdmJ1ZmZlcjsKKwlic3NpbmZvID0gc2NhbnJlc3AtPmJzc2Rlc2NfYW5kX3RsdmJ1ZmZlcjsKIAogCS8qIFRoZSBzaXplIG9mIHRoZSBUTFYgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSBlbnRpcmUgY29tbWFuZCByZXNwb25zZQogCSAqICAgc2l6ZSAoc2NhbnJlc3BzaXplKSBtaW51cyB0aGUgZml4ZWQgZmllbGRzIChzaXplb2YoKSdzKSwgdGhlCiAJICogICBCU1MgRGVzY3JpcHRpb25zIChic3NkZXNjcmlwdHNpemUgYXMgYnl0ZXNMZWYpIGFuZCB0aGUgY29tbWFuZAogCSAqICAgcmVzcG9uc2UgaGVhZGVyIChTX0RTX0dFTikKIAkgKi8KLQl0bHZidWZzaXplID0gc2NhbnJlc3BzaXplIC0gKGJ5dGVzbGVmdCArIHNpemVvZihwc2Nhbi0+YnNzZGVzY3JpcHRzaXplKQotCQkJCSAgICAgKyBzaXplb2YocHNjYW4tPm5yX3NldHMpCisJdGx2YnVmc2l6ZSA9IHNjYW5yZXNwc2l6ZSAtIChieXRlc2xlZnQgKyBzaXplb2Yoc2NhbnJlc3AtPmJzc2Rlc2NyaXB0c2l6ZSkKKwkJCQkgICAgICsgc2l6ZW9mKHNjYW5yZXNwLT5ucl9zZXRzKQogCQkJCSAgICAgKyBTX0RTX0dFTik7CiAKIAkvKgotCSAqICBQcm9jZXNzIGVhY2ggc2NhbiByZXNwb25zZSByZXR1cm5lZCAocHNjYW4tPm5yX3NldHMpLiAgU2F2ZQorCSAqICBQcm9jZXNzIGVhY2ggc2NhbiByZXNwb25zZSByZXR1cm5lZCAoc2NhbnJlc3AtPm5yX3NldHMpLiBTYXZlCiAJICogICAgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBuZXdic3NlbnRyeSBhbmQgdGhlbiBpbnNlcnQgaW50byB0aGUKIAkgKiAgICBkcml2ZXIgc2NhbiB0YWJsZSBlaXRoZXIgYXMgYW4gdXBkYXRlIHRvIGFuIGV4aXN0aW5nIGVudHJ5CiAJICogICAgb3IgYXMgYW4gYWRkaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgdGFibGUKIAkgKi8KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHBzY2FuLT5ucl9zZXRzICYmIGJ5dGVzbGVmdDsgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHNjYW5yZXNwLT5ucl9zZXRzICYmIGJ5dGVzbGVmdDsgaWR4KyspIHsKIAkJc3RydWN0IGJzc19kZXNjcmlwdG9yIG5ldzsKLQkJc3RydWN0IGJzc19kZXNjcmlwdG9yICogZm91bmQgPSBOVUxMOwotCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKiBvbGRlc3QgPSBOVUxMOworCQlzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IgKmZvdW5kID0gTlVMTDsKKwkJc3RydWN0IGJzc19kZXNjcmlwdG9yICpvbGRlc3QgPSBOVUxMOwogCQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCQkvKiBQcm9jZXNzIHRoZSBkYXRhIGZpZWxkcyBhbmQgSUVzIHJldHVybmVkIGZvciB0aGlzIEJTUyAqLwogCQltZW1zZXQoJm5ldywgMCwgc2l6ZW9mIChzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IpKTsKLQkJaWYgKGxic19wcm9jZXNzX2JzcygmbmV3LCAmcGJzc2luZm8sICZieXRlc2xlZnQpICE9IDApIHsKKwkJaWYgKGxic19wcm9jZXNzX2JzcygmbmV3LCAmYnNzaW5mbywgJmJ5dGVzbGVmdCkgIT0gMCkgewogCQkJLyogZXJyb3IgcGFyc2luZyB0aGUgc2NhbiByZXNwb25zZSwgc2tpcHBlZCAqLwogCQkJbGJzX2RlYl9zY2FuKCJTQ0FOX1JFU1A6IHByb2Nlc3NfYnNzIHJldHVybmVkIEVSUk9SXG4iKTsKIAkJCWNvbnRpbnVlOwpAQCAtMTYzMCw4ICsxMTgyLDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbGJzX2RlYl9zY2FuKCJTQ0FOX1JFU1A6IEJTU0lEICVzXG4iLAotCQkJICAgICBwcmludF9tYWMobWFjLCBuZXcuYnNzaWQpKTsKKwkJbGJzX2RlYl9zY2FuKCJTQ0FOX1JFU1A6IEJTU0lEICVzXG4iLCBwcmludF9tYWMobWFjLCBuZXcuYnNzaWQpKTsKIAogCQkvKiBDb3B5IHRoZSBsb2NhbGx5IGNyZWF0ZWQgbmV3YnNzZW50cnkgdG8gdGhlIHNjYW4gdGFibGUgKi8KIAkJbWVtY3B5KGZvdW5kLCAmbmV3LCBvZmZzZXRvZihzdHJ1Y3QgYnNzX2Rlc2NyaXB0b3IsIGxpc3QpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uaAppbmRleCAzMTlmNzBkLi45ZTA3YjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5oCkBAIC03LDE5OCArNywyMiBAQAogI2lmbmRlZiBfTEJTX1NDQU5fSAogI2RlZmluZSBfTEJTX1NDQU5fSAogCi0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgotI2luY2x1ZGUgImhvc3RjbWQuaCIKLQogLyoqCiAgKiAgQGJyaWVmIE1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHNlbnQgaW4gYSBzZXR1c2Vyc2NhbiBpb2N0bAotICoKLSAqICBAc2EgbGJzX2lvY3RsX3VzZXJfc2Nhbl9jZmcKICAqLwogI2RlZmluZSBMQlNfSU9DVExfVVNFUl9TQ0FOX0NIQU5fTUFYICA1MAogCi0vLyEgSW5mcmFzdHJ1Y3R1cmUgQlNTIHNjYW4gdHlwZSBpbiBsYnNfc2Nhbl9jbWRfY29uZmlnCi0jZGVmaW5lIExCU19TQ0FOX0JTU19UWVBFX0JTUyAgICAgICAgIDEKLQotLy8hIEFkaG9jIEJTUyBzY2FuIHR5cGUgaW4gbGJzX3NjYW5fY21kX2NvbmZpZwotI2RlZmluZSBMQlNfU0NBTl9CU1NfVFlQRV9JQlNTICAgICAgICAyCi0KLS8vISBBZGhvYyBvciBJbmZyYXN0cnVjdHVyZSBCU1Mgc2NhbiB0eXBlIGluIGxic19zY2FuX2NtZF9jb25maWcsIG5vIGZpbHRlcgotI2RlZmluZSBMQlNfU0NBTl9CU1NfVFlQRV9BTlkgICAgICAgICAzCi0KLS8qKgotICogQGJyaWVmIFN0cnVjdHVyZSB1c2VkIGludGVybmFsbHkgaW4gdGhlIHdsYW4gZHJpdmVyIHRvIGNvbmZpZ3VyZSBhIHNjYW4uCi0gKgotICogU2VudCB0byB0aGUgY29tbWFuZCBwcm9jZXNzaW5nIG1vZHVsZSB0byBjb25maWd1cmUgdGhlIGZpcm13YXJlCi0gKiAgIHNjYW4gY29tbWFuZCBwcmVwYXJlZCBieSBsYnNfY21kXzgwMjExX3NjYW4uCi0gKgotICogQHNhIGxic19zY2FuX25ldHdvcmtzCi0gKgotICovCi1zdHJ1Y3QgbGJzX3NjYW5fY21kX2NvbmZpZyB7Ci0gICAgLyoqCi0gICAgICogIEBicmllZiBCU1MgdHlwZSB0byBiZSBzZW50IGluIHRoZSBmaXJtd2FyZSBjb21tYW5kCi0gICAgICoKLSAgICAgKiAgRmllbGQgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHR5cGVzIG9mIG5ldHdvcmtzIHJldHVybmVkIGluIHRoZQotICAgICAqICAgIHNjYW4uICB2YWxpZCBzZXR0aW5ncyBhcmU6Ci0gICAgICoKLSAgICAgKiAgIC0gTEJTX1NDQU5fQlNTX1RZUEVfQlNTICAoaW5mcmFzdHJ1Y3R1cmUpCi0gICAgICogICAtIExCU19TQ0FOX0JTU19UWVBFX0lCU1MgKGFkaG9jKQotICAgICAqICAgLSBMQlNfU0NBTl9CU1NfVFlQRV9BTlkgICh1bnJlc3RyaWN0ZWQsIGFkaG9jIGFuZCBpbmZyYXN0cnVjdHVyZSkKLSAgICAgKi8KLQl1OCBic3N0eXBlOwotCi0gICAgLyoqCi0gICAgICogIEBicmllZiBTcGVjaWZpYyBCU1NJRCB1c2VkIHRvIGZpbHRlciBzY2FuIHJlc3VsdHMgaW4gdGhlIGZpcm13YXJlCi0gICAgICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCi0gICAgLyoqCi0gICAgICogIEBicmllZiBsZW5ndGggb2YgVExWcyBzZW50IGluIGNvbW1hbmQgc3RhcnRpbmcgYXQgdGx2QnVmZmVyCi0gICAgICovCi0JaW50IHRsdmJ1ZmZlcmxlbjsKLQotICAgIC8qKgotICAgICAqICBAYnJpZWYgU1NJRCBUTFYocykgYW5kIENoYW5MaXN0IFRMVnMgdG8gYmUgc2VudCBpbiB0aGUgZmlybXdhcmUgY29tbWFuZAotICAgICAqCi0gICAgICogIEBzYSBUTFZfVFlQRV9DSEFOTElTVCwgbXJ2bGlldHlwZXNfY2hhbmxpc3RwYXJhbXNldF90Ci0gICAgICogIEBzYSBUTFZfVFlQRV9TU0lELCBtcnZsaWV0eXBlc19zc2lkcGFyYW1zZXRfdAotICAgICAqLwotCXU4IHRsdmJ1ZmZlclsxXTsJLy8hPCBTU0lEIFRMVihzKSBhbmQgQ2hhbkxpc3QgVExWcyBhcmUgc3RvcmVkIGhlcmUKLX07Ci0KLS8qKgotICogIEBicmllZiBJT0NUTCBjaGFubmVsIHN1Yi1zdHJ1Y3R1cmUgc2VudCBpbiBsYnNfaW9jdGxfdXNlcl9zY2FuX2NmZwotICoKLSAqICBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGluY2x1ZGVkIGluIHRoZSBJT0NUTCBjb21tYW5kCi0gKiAgIHRvIGNvbmZpZ3VyZSBhIGluc3RhbmNlIG9mIGEgc2NhbiBvbiB0aGUgc3BlY2lmaWMgY2hhbm5lbC4KLSAqLwotc3RydWN0IGxic19pb2N0bF91c2VyX3NjYW5fY2hhbiB7Ci0JdTggY2hhbm51bWJlcjsJCS8vITwgY2hhbm5lbCBOdW1iZXIgdG8gc2NhbgotCXU4IHJhZGlvdHlwZTsJCS8vITwgUmFkaW8gdHlwZTogJ0IvRycgYmFuZCA9IDAsICdBJyBiYW5kID0gMQotCXU4IHNjYW50eXBlOwkJLy8hPCBTY2FuIHR5cGU6IEFjdGl2ZSA9IDAsIFBhc3NpdmUgPSAxCi0JdTE2IHNjYW50aW1lOwkJLy8hPCBTY2FuIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kczsgaWYgMCBkZWZhdWx0IHVzZWQKLX07Ci0KLS8qKgotICogIEBicmllZiBJT0NUTCBpbnB1dCBzdHJ1Y3R1cmUgdG8gY29uZmlndXJlIGFuIGltbWVkaWF0ZSBzY2FuIGNtZCB0byBmaXJtd2FyZQotICoKLSAqICBVc2VkIGluIHRoZSBzZXR1c2Vyc2NhbiAoTEJTX1NFVF9VU0VSX1NDQU4pIHByaXZhdGUgaW9jdGwuICBTcGVjaWZpZXMKLSAqICAgYSBudW1iZXIgb2YgcGFyYW1ldGVycyB0byBiZSB1c2VkIGluIGdlbmVyYWwgZm9yIHRoZSBzY2FuIGFzIHdlbGwKLSAqICAgYXMgYSBjaGFubmVsIGxpc3QgKGxic19pb2N0bF91c2VyX3NjYW5fY2hhbikgZm9yIGVhY2ggc2NhbiBwZXJpb2QKLSAqICAgZGVzaXJlZC4KLSAqCi0gKiAgQHNhIGxic19zZXRfdXNlcl9zY2FuX2lvY3RsCi0gKi8KLXN0cnVjdCBsYnNfaW9jdGxfdXNlcl9zY2FuX2NmZyB7Ci0gICAgLyoqCi0gICAgICogIEBicmllZiBCU1MgdHlwZSB0byBiZSBzZW50IGluIHRoZSBmaXJtd2FyZSBjb21tYW5kCi0gICAgICoKLSAgICAgKiAgRmllbGQgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHR5cGVzIG9mIG5ldHdvcmtzIHJldHVybmVkIGluIHRoZQotICAgICAqICAgIHNjYW4uICB2YWxpZCBzZXR0aW5ncyBhcmU6Ci0gICAgICoKLSAgICAgKiAgIC0gTEJTX1NDQU5fQlNTX1RZUEVfQlNTICAoaW5mcmFzdHJ1Y3R1cmUpCi0gICAgICogICAtIExCU19TQ0FOX0JTU19UWVBFX0lCU1MgKGFkaG9jKQotICAgICAqICAgLSBMQlNfU0NBTl9CU1NfVFlQRV9BTlkgICh1bnJlc3RyaWN0ZWQsIGFkaG9jIGFuZCBpbmZyYXN0cnVjdHVyZSkKLSAgICAgKi8KLQl1OCBic3N0eXBlOwotCi0JLyoqCi0JICogIEBicmllZiBCU1NJRCBmaWx0ZXIgc2VudCBpbiB0aGUgZmlybXdhcmUgY29tbWFuZCB0byBsaW1pdCB0aGUgcmVzdWx0cwotCSAqLwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQotCS8qIENsZWFyIGV4aXN0aW5nIHNjYW4gcmVzdWx0cyBtYXRjaGluZyB0aGlzIEJTU0lEICovCi0JdTggY2xlYXJfYnNzaWQ7Ci0KLQkvKioKLQkgKiAgQGJyaWVmIFNTSUQgZmlsdGVyIHNlbnQgaW4gdGhlIGZpcm13YXJlIGNvbW1hbmQgdG8gbGltaXQgdGhlIHJlc3VsdHMKLQkgKi8KLQljaGFyIHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwotCXU4IHNzaWRfbGVuOwotCi0JLyogQ2xlYXIgZXhpc3Rpbmcgc2NhbiByZXN1bHRzIG1hdGNoaW5nIHRoaXMgU1NJRCAqLwotCXU4IGNsZWFyX3NzaWQ7Ci19OwotCi0vKioKLSAqICBAYnJpZWYgU3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIGVhY2ggYmVhY29uL3Byb2JlIHJlc3BvbnNlCi0gKi8KLXN0cnVjdCBic3NfZGVzY3JpcHRvciB7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCi0JdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOwotCXU4IHNzaWRfbGVuOwotCi0JdTE2IGNhcGFiaWxpdHk7Ci0KLQkvKiByZWNlaXZlIHNpZ25hbCBzdHJlbmd0aCBpbiBkQm0gKi8KLQlsb25nIHJzc2k7Ci0KLQl1MzIgY2hhbm5lbDsKLQotCXUxNiBiZWFjb25wZXJpb2Q7Ci0KLQl1MzIgYXRpbXdpbmRvdzsKLQotCS8qIElXX01PREVfQVVUTywgSVdfTU9ERV9BREhPQywgSVdfTU9ERV9JTkZSQSAqLwotCXU4IG1vZGU7Ci0KLQkvKiB6ZXJvLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3VwcG9ydGVkIGRhdGEgcmF0ZXMgKi8KLQl1OCByYXRlc1tNQVhfUkFURVMgKyAxXTsKLQotCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOwotCi0JdW5pb24gaWVlZXR5cGVzX3BoeXBhcmFtc2V0IHBoeXBhcmFtc2V0OwotCXVuaW9uIElFRUV0eXBlc19zc3BhcmFtc2V0IHNzcGFyYW1zZXQ7Ci0KLQlzdHJ1Y3QgaWVlZXR5cGVzX2NvdW50cnlpbmZvZnVsbHNldCBjb3VudHJ5aW5mbzsKLQotCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07Ci0Jc2l6ZV90IHdwYV9pZV9sZW47Ci0JdTggcnNuX2llW01BWF9XUEFfSUVfTEVOXTsKLQlzaXplX3QgcnNuX2llX2xlbjsKLQotCXU4IG1lc2g7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCiBpbnQgbGJzX3NzaWRfY21wKHU4ICpzc2lkMSwgdTggc3NpZDFfbGVuLCB1OCAqc3NpZDIsIHU4IHNzaWQyX2xlbik7CiAKLXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbGJzX2ZpbmRfc3NpZF9pbl9saXN0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJdTggKnNzaWQsIHU4IHNzaWRfbGVuLCB1OCAqYnNzaWQsIHU4IG1vZGUsCi0JCWludCBjaGFubmVsKTsKLQotc3RydWN0IGJzc19kZXNjcmlwdG9yICpsYnNfZmluZF9ic3NpZF9pbl9saXN0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQl1OCAqYnNzaWQsIHU4IG1vZGUpOwotCi1pbnQgbGJzX2ZpbmRfYmVzdF9uZXR3b3JrX3NzaWQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCAqb3V0X3NzaWQsCi0JCQl1OCAqb3V0X3NzaWRfbGVuLCB1OCBwcmVmZXJyZWRfbW9kZSwgdTggKm91dF9tb2RlKTsKLQogaW50IGxic19zZW5kX3NwZWNpZmljX3NzaWRfc2NhbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4ICpzc2lkLAotCQkJCXU4IHNzaWRfbGVuLCB1OCBjbGVhcl9zc2lkKTsKKwkJCQl1OCBzc2lkX2xlbik7CiAKLWludCBsYnNfY21kXzgwMjExX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAotCQkJCXZvaWQgKnBkYXRhX2J1Zik7Ci0KLWludCBsYnNfcmV0XzgwMjExX3NjYW4oc3RydWN0IGxic19wcml2YXRlICpwcml2LAotCQkJCXN0cnVjdCBjbWRfZHNfY29tbWFuZCAqcmVzcCk7Ci0KLWludCBsYnNfc2Nhbl9uZXR3b3JrcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCi0JY29uc3Qgc3RydWN0IGxic19pb2N0bF91c2VyX3NjYW5fY2ZnICpwdXNlcnNjYW5pbiwKLSAgICAgICAgICAgICAgICBpbnQgZnVsbF9zY2FuKTsKLQotc3RydWN0IGlmcmVxOwotCi1zdHJ1Y3QgaXdfcG9pbnQ7Ci1zdHJ1Y3QgaXdfcGFyYW07Ci1zdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvOwogaW50IGxic19nZXRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwgY2hhciAqZXh0cmEpOwogaW50IGxic19zZXRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpOworCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKKworaW50IGxic19zY2FuX25ldHdvcmtzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGZ1bGxfc2Nhbik7CiAKIHZvaWQgbGJzX3NjYW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCmluZGV4IDAwZDk1ZjcuLmE0OTcyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCWlmIChwcml2LT5tb25pdG9ybW9kZSAhPSBMQlNfTU9OSVRPUl9PRkYpIHsKKwlpZiAocHJpdi0+bW9uaXRvcm1vZGUpIHsKIAkJLyogS2VlcCB0aGUgc2tiIHRvIGVjaG8gaXQgYmFjayBvbmNlIFR4IGZlZWRiYWNrIGlzCiAJCSAgIHJlY2VpdmVkIGZyb20gRlcgKi8KIAkJc2tiX29ycGhhbihza2IpOwpAQCAtMTc5LDMyICsxNzksMTcgQEAKICAqCiAgKiAgQHJldHVybnMgdm9pZAogICovCi12b2lkIGxic19zZW5kX3R4X2ZlZWRiYWNrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKK3ZvaWQgbGJzX3NlbmRfdHhfZmVlZGJhY2soc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgdHJ5X2NvdW50KQogewogCXN0cnVjdCB0eF9yYWRpb3RhcF9oZHIgKnJhZGlvdGFwX2hkcjsKLQl1MzIgc3RhdHVzID0gcHJpdi0+ZXZlbnRjYXVzZTsKLQlpbnQgdHhmYWlsOwotCWludCB0cnlfY291bnQ7CiAKLQlpZiAocHJpdi0+bW9uaXRvcm1vZGUgPT0gTEJTX01PTklUT1JfT0ZGIHx8Ci0JICAgIHByaXYtPmN1cnJlbnR0eHNrYiA9PSBOVUxMKQorCWlmICghcHJpdi0+bW9uaXRvcm1vZGUgfHwgcHJpdi0+Y3VycmVudHR4c2tiID09IE5VTEwpCiAJCXJldHVybjsKIAogCXJhZGlvdGFwX2hkciA9IChzdHJ1Y3QgdHhfcmFkaW90YXBfaGRyICopcHJpdi0+Y3VycmVudHR4c2tiLT5kYXRhOwogCi0JdHhmYWlsID0gKHN0YXR1cyA+PiAyNCk7Ci0KLSNpZiAwCi0JLyogVGhlIHZlcnNpb24gb2Ygcm9vZm5ldCB0aGF0IHdlJ3ZlIHRlc3RlZCBkb2VzIG5vdCB1c2UgdGhpcyB5ZXQKLQkgKiBCdXQgaXQgbWF5IGJlIHVzZWQgaW4gdGhlIGZ1dHVyZS4KLQkgKi8KLQlpZiAodHhmYWlsKQotCQlyYWRpb3RhcF9oZHItPmZsYWdzICY9IElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX0ZBSUw7Ci0jZW5kaWYKLQl0cnlfY291bnQgPSAoc3RhdHVzID4+IDE2KSAmIDB4ZmY7Ci0JcmFkaW90YXBfaGRyLT5kYXRhX3JldHJpZXMgPSAodHJ5X2NvdW50KSA/Ci0JICAgICgxICsgcHJpdi0+dHhyZXRyeWNvdW50IC0gdHJ5X2NvdW50KSA6IDA7Ci0KKwlyYWRpb3RhcF9oZHItPmRhdGFfcmV0cmllcyA9IHRyeV9jb3VudCA/CisJCSgxICsgcHJpdi0+dHhyZXRyeWNvdW50IC0gdHJ5X2NvdW50KSA6IDA7CiAKIAlwcml2LT5jdXJyZW50dHhza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocHJpdi0+Y3VycmVudHR4c2tiLAogCQkJCQkJICAgICAgcHJpdi0+cnRhcF9uZXRfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eXBlcy5oCmluZGV4IGYwZDU3OTUuLjQwMzFiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHlwZXMuaApAQCAtMjM5LDQgKzIzOSwxNyBAQAogCXN0cnVjdCBsZWRfcGluIGxlZHBpblsxXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgbGVkX2JodiB7CisJdWludDhfdAlmaXJtd2FyZXN0YXRlOworCXVpbnQ4X3QJbGVkOworCXVpbnQ4X3QJbGVkc3RhdGU7CisJdWludDhfdAlsZWRhcmc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgbXJ2bGlldHlwZXNfbGVkYmh2IHsKKwlzdHJ1Y3QgbXJ2bGlldHlwZXNoZWFkZXIgaGVhZGVyOworCXN0cnVjdCBsZWRfYmh2IGxlZGJodlsxXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCBlOGJmYzI2Li4wOTczZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC0xNiw4ICsxNiw4IEBACiAjaW5jbHVkZSAiZGVjbC5oIgogI2luY2x1ZGUgImRlZnMuaCIKICNpbmNsdWRlICJkZXYuaCIKLSNpbmNsdWRlICJqb2luLmgiCiAjaW5jbHVkZSAid2V4dC5oIgorI2luY2x1ZGUgInNjYW4uaCIKICNpbmNsdWRlICJhc3NvYy5oIgogI2luY2x1ZGUgImNtZC5oIgogCkBAIC01NzksNiArNTc5LDkgQEAKIAkgICAgICAgcmFuZ2UtPm51bV9iaXRyYXRlcyk7CiAKIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IDA7CisKKwlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOworCiAJaWYgKHByaXYtPmVuYWJsZTExZCAmJgogCSAgICAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCB8fAogCSAgICBwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpKSB7CkBAIC02MDIsNyArNjA1LDcgQEAKIAkJCWxic19kZWJfd2V4dCgiY2hhbl9ubyAlZFxuIiwgY2hhbl9ubyk7CiAJCQlyYW5nZS0+ZnJlcVtyYW5nZS0+bnVtX2ZyZXF1ZW5jeV0uaSA9IChsb25nKWNoYW5fbm87CiAJCQlyYW5nZS0+ZnJlcVtyYW5nZS0+bnVtX2ZyZXF1ZW5jeV0ubSA9Ci0JCQkgICAgKGxvbmcpbGJzX2NoYW5fMl9mcmVxKGNoYW5fbm8sIGJhbmQpICogMTAwMDAwOworCQkJICAgIChsb25nKWxic19jaGFuXzJfZnJlcShjaGFuX25vKSAqIDEwMDAwMDsKIAkJCXJhbmdlLT5mcmVxW3JhbmdlLT5udW1fZnJlcXVlbmN5XS5lID0gMTsKIAkJCXJhbmdlLT5udW1fZnJlcXVlbmN5Kys7CiAJCX0KQEAgLTY1MywxMyArNjU2LDEwIEBACiAJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CiAJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OwogCi0JcmFuZ2UtPm1pbl9wbXAgPSAxMDAwMDAwOwotCXJhbmdlLT5tYXhfcG1wID0gMTIwMDAwMDAwOwotCXJhbmdlLT5taW5fcG10ID0gMTAwMDsKLQlyYW5nZS0+bWF4X3BtdCA9IDEwMDAwMDA7Ci0JcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKLQlyYW5nZS0+cG10X2ZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKLQlyYW5nZS0+cG1fY2FwYSA9IElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX1RJTUVPVVQgfCBJV19QT1dFUl9BTExfUjsKKwkvKgorCSAqIFJpZ2h0IG5vdyB3ZSBzdXBwb3J0IG9ubHkgIml3Y29uZmlnIGV0aFggcG93ZXIgb258b2ZmIgorCSAqLworCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfT047CiAKIAkvKgogCSAqIE1pbmltdW0gdmVyc2lvbiB3ZSByZWNvbW1lbmQKQEAgLTc4MSwyMSArNzgxLDE0IEBACiAJCQkgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OwotCWludCBtb2RlOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwogCi0JbW9kZSA9IHByaXYtPnBzbW9kZTsKLQotCWlmICgodndycS0+ZGlzYWJsZWQgPSAobW9kZSA9PSBMQlM4MDJfMTFQT1dFUk1PREVDQU0pKQotCSAgICB8fCBwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfRElTQ09OTkVDVEVEKQotCXsKLQkJZ290byBvdXQ7Ci0JfQotCiAJdndycS0+dmFsdWUgPSAwOworCXZ3cnEtPmZsYWdzID0gMDsKKwl2d3JxLT5kaXNhYmxlZCA9IHByaXYtPnBzbW9kZSA9PSBMQlM4MDJfMTFQT1dFUk1PREVDQU0KKwkJfHwgcHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0RJU0NPTk5FQ1RFRDsKIAotb3V0OgogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgxNyw2ICs4MTAsNyBAQAogCWludCBzdGF0c192YWxpZCA9IDA7CiAJdTggcnNzaTsKIAl1MzIgdHhfcmV0cmllczsKKwlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9nZXRfbG9nIGxvZzsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIApAQCAtODYwLDcgKzg1NCwxMSBAQAogCS8qIFF1YWxpdHkgYnkgVFggZXJyb3JzICovCiAJcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IHByaXYtPnN0YXRzLnR4X2Vycm9yczsKIAotCXR4X3JldHJpZXMgPSBsZTMyX3RvX2NwdShwcml2LT5sb2dtc2cucmV0cnkpOworCW1lbXNldCgmbG9nLCAwLCBzaXplb2YobG9nKSk7CisJbG9nLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGxvZykpOworCWxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0dFVF9MT0csICZsb2cpOworCisJdHhfcmV0cmllcyA9IGxlMzJfdG9fY3B1KGxvZy5yZXRyeSk7CiAKIAlpZiAodHhfcmV0cmllcyA+IDc1KQogCQl0eF9xdWFsID0gKDkwIC0gdHhfcmV0cmllcykgKiBQT09SIC8gMTU7CkBAIC04NzYsMTAgKzg3NCw5IEBACiAJCSAgICAoUEVSRkVDVCAtIFZFUllfR09PRCkgLyA1MCArIFZFUllfR09PRDsKIAlxdWFsaXR5ID0gbWluKHF1YWxpdHksIHR4X3F1YWwpOwogCi0JcHJpdi0+d3N0YXRzLmRpc2NhcmQuY29kZSA9IGxlMzJfdG9fY3B1KHByaXYtPmxvZ21zZy53ZXB1bmRlY3J5cHRhYmxlKTsKLQlwcml2LT53c3RhdHMuZGlzY2FyZC5mcmFnbWVudCA9IGxlMzJfdG9fY3B1KHByaXYtPmxvZ21zZy5yeGZyYWcpOworCXByaXYtPndzdGF0cy5kaXNjYXJkLmNvZGUgPSBsZTMyX3RvX2NwdShsb2cud2VwdW5kZWNyeXB0YWJsZSk7CiAJcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IHR4X3JldHJpZXM7Ci0JcHJpdi0+d3N0YXRzLmRpc2NhcmQubWlzYyA9IGxlMzJfdG9fY3B1KHByaXYtPmxvZ21zZy5hY2tmYWlsdXJlKTsKKwlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjID0gbGUzMl90b19jcHUobG9nLmFja2ZhaWx1cmUpOwogCiAJLyogQ2FsY3VsYXRlIHF1YWxpdHkgKi8KIAlwcml2LT53c3RhdHMucXVhbC5xdWFsID0gbWluX3QodTgsIHF1YWxpdHksIDEwMCk7CkBAIC04ODksOCArODg2LDYgQEAKIAkvKiB1cGRhdGUgc3RhdHMgYXN5bmNocm9ub3VzbHkgZm9yIGZ1dHVyZSBjYWxscyAqLwogCWxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgQ01EXzgwMl8xMV9SU1NJLCAwLAogCQkJCQkwLCAwLCBOVUxMKTsKLQlsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIENNRF84MDJfMTFfR0VUX0xPRywgMCwKLQkJCQkJMCwgMCwgTlVMTCk7CiBvdXQ6CiAJaWYgKCFzdGF0c192YWxpZCkgewogCQlwcml2LT53c3RhdHMubWlzcy5iZWFjb24gPSAwOwpAQCAtMjA2NSwyMyArMjA2MCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBsYnNfZ2V0X2Z3dmVyc2lvbihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGNoYXIgKmZ3dmVyc2lvbiwgaW50IG1heGxlbikKLXsKLQljaGFyIGZ3dmVyWzMyXTsKLQotCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCi0Jc3ByaW50Zihmd3ZlciwgIiV1LiV1LiV1LnAldSIsCi0JCXByaXYtPmZ3cmVsZWFzZSA+PiAyNCAmIDB4ZmYsCi0JCXByaXYtPmZ3cmVsZWFzZSA+PiAxNiAmIDB4ZmYsCi0JCXByaXYtPmZ3cmVsZWFzZSA+PiAgOCAmIDB4ZmYsCi0JCXByaXYtPmZ3cmVsZWFzZSAgICAgICAmIDB4ZmYpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlzbnByaW50Zihmd3ZlcnNpb24sIG1heGxlbiwgZnd2ZXIpOwotfQotCi0KIC8qCiAgKiBpd2NvbmZpZyBzZXR0YWJsZSBjYWxsYmFja3MKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5oCmluZGV4IGE1NjNkOWEyLi40YzA4ZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5oCkBAIC00LDE5ICs0LDYgQEAKICNpZm5kZWYJX0xCU19XRVhUX0hfCiAjZGVmaW5lCV9MQlNfV0VYVF9IXwogCi0vKiogbGJzX2lvY3RsX3JlZ3Jkd3IgKi8KLXN0cnVjdCBsYnNfaW9jdGxfcmVncmR3ciB7Ci0JLyoqIFdoaWNoIHJlZ2lzdGVyIHRvIGFjY2VzcyAqLwotCXUxNiB3aGljaHJlZzsKLQkvKiogUmVhZCBvciBXcml0ZSAqLwotCXUxNiBhY3Rpb247Ci0JdTMyIG9mZnNldDsKLQl1MTYgTk9COwotCXUzMiB2YWx1ZTsKLX07Ci0KLSNkZWZpbmUgTEJTX01PTklUT1JfT0ZGCQkJMAotCiBleHRlcm4gc3RydWN0IGl3X2hhbmRsZXJfZGVmIGxic19oYW5kbGVyX2RlZjsKIGV4dGVybiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgbWVzaF9oYW5kbGVyX2RlZjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0MjI4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0MjI4MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjBlYjgzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldDIyODAuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1MiArMCwwIEBACi0jaWZuZGVmIE5FVDIyODBfSAotI2RlZmluZSBORVQyMjgwX0gKLS8qCi0gKiBOZXRDaGlwIDIyODAgaGlnaC9mdWxsIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlci4KLSAqIFVubGlrZSBtYW55IHN1Y2ggY29udHJvbGxlcnMsIHRoaXMgb25lIHRhbGtzIFBDSS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIE5ldENoaXAgVGVjaG5vbG9neSwgSW5jLiAoaHR0cDovL3d3dy5uZXRjaGlwLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBORVQyMjgwIE1FTU9SWSBNQVBQRUQgUkVHSVNURVJTCi0gKgotICogVGhlIHJlZ2lzdGVyIGxheW91dCBjYW1lIGZyb20gdGhlIGNoaXAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoZSBiaXQKLSAqIG51bWJlciBkZWZpbml0aW9ucyB3ZXJlIGV4dHJhY3RlZCBmcm9tIGNoaXAgc3BlY2lmaWNhdGlvbi4KLSAqCi0gKiBVc2UgdGhlIHNoaWZ0IG9wZXJhdG9yICgnPDwnKSB0byBidWlsZCBiaXQgbWFza3MsIHdpdGggcmVhZGwvd3JpdGVsCi0gKiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyB0aHJvdWdoIFBDSS4KLSAqLwotCi0vKiBtYWluIHJlZ2lzdGVycywgQkFSMCArIDB4MDAwMCAqLwotc3RydWN0IG5ldDIyODBfcmVncyB7Ci0JLy8gb2Zmc2V0IDB4MDAwMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGRldmluaXQ7Ci0jZGVmaW5lICAgICBMT0NBTF9DTE9DS19GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgRk9SQ0VfUENJX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIFBDSV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBQQ0lfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRklGT19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIENGR19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBQQ0lfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgVVNCX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIE04MDUxX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgZWVjdGw7Ci0jZGVmaW5lICAgICBFRVBST01fQUREUkVTU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgICAgIEVFUFJPTV9DSElQX1NFTEVDVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSAgICAgRUVQUk9NX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBFRVBST01fVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIEVFUFJPTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSAgICAgRUVQUk9NX0NISVBfU0VMRUNUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBFRVBST01fQllURV9SRUFEX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIEVFUFJPTV9CWVRFX1dSSVRFX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgRUVQUk9NX1JFQURfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIEVFUFJPTV9XUklURV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgZWVjbGtmcmVxOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIF91bnVzZWQwOwotCS8vIG9mZnNldCAweDAwMTAKLQotCV9fbGUzMiAgICAgICAgICAgICAgICAgIHBjaWlycWVuYjA7CS8qIGludGVycnVwdCBQQ0kgbWFzdGVyIC4uLiAqLwotI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgcGNpaXJxZW5iMTsKLSNkZWZpbmUgICAgIFBDSV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCi0jZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKLSNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfQVNTRVJURURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOAotI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGNwdV9pcnFlbmIwOwkvKiAuLi4gb3Igb25ib2FyZCA4MDUxICovCi0jZGVmaW5lICAgICBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgRU5EUE9JTlRfRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgRU5EUE9JTlRfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBFTkRQT0lOVF9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgRU5EUE9JTlRfMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBjcHVfaXJxZW5iMTsKLSNkZWZpbmUgICAgIENQVV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKLSNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQotI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCi0JLy8gb2Zmc2V0IDB4MDAyMAotCXUzMiAgICAgICAgICAgICAgICAgICAgIF91bnVzZWQxOwotCV9fbGUzMiAgICAgICAgICAgICAgICAgIHVzYmlycWVuYjE7Ci0jZGVmaW5lICAgICBVU0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCi0jZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBpcnFzdGF0MDsKLSNkZWZpbmUgICAgIElOVEFfQVNTRVJURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgaXJxc3RhdDE7Ci0jZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JLy8gb2Zmc2V0IDB4MDAzMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGlkeGFkZHI7Ci0JX19sZTMyICAgICAgICAgICAgICAgICAgaWR4ZGF0YTsKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBmaWZvY3RsOwotI2RlZmluZSAgICAgUENJX0JBU0UyX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBJR05PUkVfRklGT19BVkFJTEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgUENJX0JBU0UyX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIEZJRk9fQ09ORklHVVJBVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JdTMyICAgICAgICAgICAgICAgICAgICAgX3VudXNlZDI7Ci0JLy8gb2Zmc2V0IDB4MDA0MAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIG1lbWFkZHI7Ci0jZGVmaW5lICAgICBTVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgICAgIERJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSAgICAgRklGT19ESUFHTk9TVElDX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBNRU1PUllfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIG1lbWRhdGEwOwotCV9fbGUzMiAgICAgICAgICAgICAgICAgIG1lbWRhdGExOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIF91bnVzZWQzOwotCS8vIG9mZnNldCAweDAwNTAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBncGlvY3RsOwotI2RlZmluZSAgICAgR1BJTzNfTEVEX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBHUElPM19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIEdQSU8yX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBHUElPM19PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgR1BJTzJfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEdQSU8xX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBHUElPMF9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgR1BJTzNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEdQSU8yX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBHUElPMV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgR1BJTzBfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBncGlvc3RhdDsKLSNkZWZpbmUgICAgIEdQSU8zX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBHUElPMl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogdXNiIGNvbnRyb2wsIEJBUjAgKyAweDAwODAgKi8KLXN0cnVjdCBuZXQyMjgwX3VzYl9yZWdzIHsKLQkvLyBvZmZzZXQgMHgwMDgwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgc3RkcnNwOwotI2RlZmluZSAgICAgU1RBTExfVU5TVVBQT1JURURfUkVRVUVTVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBTRVRfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEdFVF9PVEhFUl9TUEVFRF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSAgICAgR0VUX0RFVklDRV9RVUFMSUZJRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lICAgICBTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgICAgIEVORFBPSU5UX1NFVF9DTEVBUl9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSAgICAgREVWSUNFX1NFVF9DTEVBUl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAgICAgICAgICAgIDExCi0jZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSAgICAgR0VUX1NFVF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgICAgIEdFVF9TRVRfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lICAgICBHRVRfQ09ORklHVVJBVElPTl9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSAgICAgR0VUX0RFVklDRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIEdFVF9FTkRQT0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBHRVRfSU5URVJGQUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgR0VUX0RFVklDRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBwcm9kdmVuZGlkOwotI2RlZmluZSAgICAgUFJPRFVDVF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBWRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIHJlbG51bTsKLQlfX2xlMzIgICAgICAgICAgICAgICAgICB1c2JjdGw7Ci0jZGVmaW5lICAgICBTRVJJQUxfTlVNQkVSX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIFBST0RVQ1RfSURfU1RSSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgVkVORE9SX0lEX1NUUklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBVU0JfUk9PVF9QT1JUX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIFZCVVNfUElOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgVElNRURfRElTQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIFNVU1BFTkRfSU1NRURJQVRFTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBTRUxGX1BPV0VSRURfVVNCX0RFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgUkVNT1RFX1dBS0VVUF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIFBNRV9QT0xBUklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBVU0JfREVURUNUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgUE1FX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIERFVklDRV9SRU1PVEVfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBTRUxGX1BPV0VSRURfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCS8vIG9mZnNldCAweDAwOTAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICB1c2JzdGF0OwotI2RlZmluZSAgICAgSElHSF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgICAgIEZVTExfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBHRU5FUkFURV9SRVNVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgR0VORVJBVEVfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgICAgICAgICAgICAgICAgICAgIDQKLQlfX2xlMzIgICAgICAgICAgICAgICAgICB4Y3ZyZGlhZzsKLSNkZWZpbmUgICAgIEZPUkNFX0hJR0hfU1BFRURfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSAgICAgRk9SQ0VfRlVMTF9TUEVFRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lICAgICBVU0JfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgICAgIExJTkVfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgVFJBTlNDRUlWRVJfT1BFUkFUSU9OX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFRSQU5TQ0VJVkVSX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBURVJNSU5BVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIHNldHVwMDEyMzsKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBzZXR1cDQ1Njc7Ci0JLy8gb2Zmc2V0IDB4MDA5MAotCXUzMiAgICAgICAgICAgICAgICAgICAgIF91bnVzZWQwOwotCV9fbGUzMiAgICAgICAgICAgICAgICAgIG91cmFkZHI7Ci0jZGVmaW5lICAgICBGT1JDRV9JTU1FRElBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgT1VSX1VTQl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBvdXJjb25maWc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogcGNpIGNvbnRyb2wsIEJBUjAgKyAweDAxMDAgKi8KLXN0cnVjdCBuZXQyMjgwX3BjaV9yZWdzIHsKLQkvLyBvZmZzZXQgMHgwMTAwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgcGNpbXN0Y3RsOwotI2RlZmluZSAgICAgUENJX0FSQklURVJfUEFSS19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBQQ0lfTVVMVEkgTEVWRUxfQVJCSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgRE1BX01FTU9SWV9XUklURV9BTkRfSU5WQUxJREFURV9FTkFCTEUgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBETUFfUkVBRF9NVUxUSVBMRV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgRE1BX1JFQURfTElORV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ09NTUFORF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICAgICAgTUVNX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBJT19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgICAgIENGR19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgUENJX01BU1RFUl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgICAgICBQQ0lfTUFTVEVSX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFBDSV9NQVNURVJfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBQQ0lfTUFTVEVSX0JZVEVfV1JJVEVfRU5BQkxFUyAgICAgICAgICAgICAgICAgICAgICAgMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIHBjaW1zdGFkZHI7Ci0JX19sZTMyICAgICAgICAgICAgICAgICAgcGNpbXN0ZGF0YTsKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBwY2ltc3RzdGF0OwotI2RlZmluZSAgICAgUENJX0FSQklURVJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIFBDSV9FWFRFUk5BTF9BUkJJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBQQ0lfSE9TVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIGRtYSBjb250cm9sLCBCQVIwICsgMHgwMTgwIC4uLiBhcnJheSBvZiBmb3VyIHN0cnVjdHMgbGlrZSB0aGlzLAotICogZm9yIGNoYW5uZWxzIDAuLjMuICBzZWUgYWxzbyBzdHJ1Y3QgbmV0MjI4MF9kbWE6ICBkZXNjcmlwdG9yCi0gKiB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycy4KLSAqLwotc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgewkvKiBbMTEuN10gKi8KLQkvLyBvZmZzZXQgMHgwMTgwLCAweDAxYTAsIDB4MDFjMCwgMHgwMWUwLAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGRtYWN0bDsKLSNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lICAgICBERVNDUklQVE9SX1BPTExJTkdfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgICAgICAgICBQT0xMX0NPTlRJTlVPVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFBPTExfMV9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICAgICAgUE9MTF8xMDBfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgICAgICBQT0xMXzFfTVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9QT0xMSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lICAgICBETUFfVkFMSURfQklUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSAgICAgRE1BX09VVF9BVVRPX1NUQVJUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIERNQV9QUkVFTVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBETUFfRklGT19WQUxJREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgRE1BX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIERNQV9BRERSRVNTX0hPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgZG1hc3RhdDsKLSNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSAgICAgRE1BX1RSQU5TQUNUSU9OX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBETUFfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgRE1BX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQl1MzIgICAgICAgICAgICAgICAgICAgICBfdW51c2VkMFsyXTsKLQkvLyBvZmZzZXQgMHgwMTkwLCAweDAxYjAsIDB4MDFkMCwgMHgwMWYwLAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGRtYWNvdW50OwotI2RlZmluZSAgICAgVkFMSURfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lICAgICBETUFfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgICAgIERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSAgICAgRU5EX09GX0NIQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lICAgICAgICAgRE1BX0JZVEVfQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoMTw8MjQpLTEpCi0jZGVmaW5lICAgICBETUFfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGRtYWFkZHI7Ci0JX19sZTMyICAgICAgICAgICAgICAgICAgZG1hZGVzYzsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBfdW51c2VkMTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBkZWRpY2F0ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzLCBCQVIwICsgMHgwMjAwICovCi0KLXN0cnVjdCBuZXQyMjgwX2RlcF9yZWdzIHsJLyogWzExLjhdICovCi0JLy8gb2Zmc2V0IDB4MDIwMCwgMHgwMjEwLCAweDIyMCwgMHgyMzAsIDB4MjQwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgZGVwX2NmZzsKLQkvLyBvZmZzZXQgMHgwMjA0LCAweDAyMTQsIDB4MjI0LCAweDIzNCwgMHgyNDQKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBkZXBfcnNwOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIF91bnVzZWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogY29uZmlndXJhYmxlIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDMwMCAuLi4gYXJyYXkgb2Ygc2V2ZW4gc3RydWN0cwotICogbGlrZSB0aGlzLCBmb3IgZXAwIHRoZW4gdGhlIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgQS4uRgotICogZXAwIHJlc2VydmVkIGZvciBjb250cm9sOyBFIGFuZCBGIGhhdmUgb25seSA2NCBieXRlcyBvZiBmaWZvCi0gKi8KLXN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MgewkvKiBbMTEuOV0gKi8KLQkvLyBvZmZzZXQgMHgwMzAwLCAweDAzMjAsIDB4MDM0MCwgMHgwMzYwLCAweDAzODAsIDB4MDNhMCwgMHgwM2MwCi0JX19sZTMyICAgICAgICAgICAgICAgICAgZXBfY2ZnOwotI2RlZmluZSAgICAgRU5EUE9JTlRfQllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgICAgIEVORFBPSU5UX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lICAgICBFTkRQT0lOVF9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSAgICAgRU5EUE9JTlRfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBlcF9yc3A7Ci0jZGVmaW5lICAgICBTRVRfTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgICAgIFNFVF9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSAgICAgU0VUX0VQX0ZPUkNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lICAgICBTRVRfSU5URVJSVVBUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgICAgIFNFVF9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSAgICAgU0VUX05BS19PVVRfUEFDS0VUU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lICAgICBTRVRfRU5EUE9JTlRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSAgICAgU0VUX0VORFBPSU5UX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgICAgIENMRUFSX05BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lICAgICBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSAgICAgQ0xFQVJfRVBfRk9SQ0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgICAgIENMRUFSX0lOVEVSUlVQVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lICAgICBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgMwotI2RlZmluZSAgICAgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgICAgIENMRUFSX0VORFBPSU5UX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lICAgICBDTEVBUl9FTkRQT0lOVF9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGVwX2lycWVuYjsKLSNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgNQotI2RlZmluZSAgICAgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyCi0jZGVmaW5lICAgICBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMQotI2RlZmluZSAgICAgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDAKLQlfX2xlMzIgICAgICAgICAgICAgICAgICBlcF9zdGF0OwotI2RlZmluZSAgICAgRklGT19WQUxJRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lICAgICBISUdIX0JBTkRXSURUSF9PVVRfVFJBTlNBQ1RJT05fUElEICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgICAgIFRJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSAgICAgVVNCX1NUQUxMX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lICAgICBVU0JfSU5fTkFLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgICAgIFVTQl9JTl9BQ0tfUkNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSAgICAgVVNCX09VVF9QSU5HX05BS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lICAgICBVU0JfT1VUX0FDS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgICAgIEZJRk9fT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSAgICAgRklGT19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lICAgICBGSUZPX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgICAgIEZJRk9fRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSAgICAgRklGT19GTFVTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSAgICAgTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSAgICAgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgICAgIERBVEFfSU5fVE9LRU5fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0JLy8gb2Zmc2V0IDB4MDMxMCwgMHgwMzMwLCAweDAzNTAsIDB4MDM3MCwgMHgwMzkwLCAweDAzYjAsIDB4MDNkMAotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGVwX2F2YWlsOwotCV9fbGUzMiAgICAgICAgICAgICAgICAgIGVwX2RhdGE7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgX3VudXNlZDBbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IG5ldDIyODBfcmVnX3dyaXRlIHsKLQlfX2xlMTYgcG9ydDsKLQlfX2xlMzIgYWRkcjsKLQlfX2xlMzIgdmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBuZXQyMjgwX3JlZ19yZWFkIHsKLQlfX2xlMTYgcG9ydDsKLQlfX2xlMzIgYWRkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotI2VuZGlmIC8qIE5FVDIyODBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ0Yzg2Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLSNpZm5kZWYgUFJJU001NF9ICi0jZGVmaW5lIFBSSVNNNTRfSAotCi0vKgotICogU2hhcmVkIGRlZmluZXMgZm9yIGFsbCBtYWM4MDIxMSBQcmlzbTU0IGNvZGUKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICoKLSAqIEJhc2VkIG9uIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgotICogQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLWVudW0gY29udHJvbF9mcmFtZV90eXBlcyB7Ci0JUDU0X0NPTlRST0xfVFlQRV9GSUxURVJfU0VUID0gMCwKLQlQNTRfQ09OVFJPTF9UWVBFX0NIQU5ORUxfQ0hBTkdFLAotCVA1NF9DT05UUk9MX1RZUEVfRlJFUURPTkUsCi0JUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULAotCVA1NF9DT05UUk9MX1RZUEVfRlJFRVFVRVVFID0gNywKLQlQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORSwKLQlQNTRfQ09OVFJPTF9UWVBFX1BJTkcsCi0JUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLLAotCVA1NF9DT05UUk9MX1RZUEVfQkJQLAotCVA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLAotCVA1NF9DT05UUk9MX1RZUEVfTEVECi19OwotCi1zdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyIHsKLQlfX2xlMTYgbWFnaWMxOwotCV9fbGUxNiBsZW47Ci0JX19sZTMyIHJlcV9pZDsKLQlfX2xlMTYgdHlwZTsJLyogZW51bSBjb250cm9sX2ZyYW1lX3R5cGVzICovCi0JdTggcmV0cnkxOwotCXU4IHJldHJ5MjsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgRUVQUk9NX1JFQURCQUNLX0xFTiAoc2l6ZW9mKHN0cnVjdCBwNTRfY29udHJvbF9oZHIpICsgNCAvKiBwNTRfZWVwcm9tX2xtODYgKi8pCi0jZGVmaW5lIE1BWF9SWF9TSVpFIChJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQgKyBzaXplb2Yoc3RydWN0IHA1NF9jb250cm9sX2hkcikgKyAyMCAvKiBsZW5ndGggb2Ygc3RydWN0IHA1NF9yeF9oZHIgKi8gKyAxNiApCi0KLSNkZWZpbmUgSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUiAweDIwMDAwCi0KLXN0cnVjdCBwNTRfY29tbW9uIHsKLQl1MzIgcnhfc3RhcnQ7Ci0JdTMyIHJ4X2VuZDsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOwotCXZvaWQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpkYXRhLAotCQkgICBzaXplX3QgbGVuLCBpbnQgZnJlZV9vbl90eCk7Ci0JaW50ICgqb3Blbikoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKLQl2b2lkICgqc3RvcCkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKLQlpbnQgbW9kZTsKLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKLQl1bnNpZ25lZCBpbnQgaXFfYXV0b2NhbF9sZW47Ci0Jc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqb3V0cHV0X2xpbWl0OwotCXVuc2lnbmVkIGludCBvdXRwdXRfbGltaXRfbGVuOwotCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YTsKLQlfX2xlMTYgcnhodzsKLQl1OCB2ZXJzaW9uOwotCXVuc2lnbmVkIGludCB0eF9oZHJfbGVuOwotCXZvaWQgKmNhY2hlZF92ZGNmOwotCXVuc2lnbmVkIGludCBmd192YXI7Ci0JLyogRklYTUU6IHRoaXMgY2hhbm5lbHMvbW9kZXMvcmF0ZXMgc3R1ZmYgc3Vja3MgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbMTRdOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1sxMl07Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlIG1vZGVzWzJdOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHM7Ci19OwotCi1pbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOwotaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pOwotdm9pZCBwNTRfZmlsbF9lZXByb21fcmVhZGJhY2soc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyKTsKLXN0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbik7Ci12b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwotCi0jZW5kaWYgLyogUFJJU001NF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDY5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZwpAQCAtMCwwICsxLDYzIEBACitjb25maWcgUDU0X0NPTU1PTgorCXRyaXN0YXRlICJTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRldfTE9BREVSICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIGlzbDM4eHggYmFzZWQgY2FyZHMuCisJICBUaGlzIG1vZHVsZSBkb2VzIG5vdGhpbmcgYnkgaXRzZWxmIC0gdGhlIFVTQi9QQ0kgZnJvbnRlbmRzCisJICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLgorCisJICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKKwkgIGh0dHA6Ly9wcmlzbTU0Lm9yZy8KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NGNvbW1vbi4KKworY29uZmlnIFA1NF9VU0IKKwl0cmlzdGF0ZSAiUHJpc201NCBVU0Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFA1NF9DT01NT04gJiYgVVNCCisJc2VsZWN0IENSQzMyCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLgorCSAgVGhlc2UgYXJlIFVTQiBiYXNlZCBhZGFwdGVycyBmb3VuZCBpbiBkZXZpY2VzIHN1Y2ggYXM6CisKKwkgIDNDT00gM0NSV0UyNTRHNzIKKwkgIFNNQyAyODYyVy1HCisJICBBY2N0b24gODAyLjExZyBXTjQ1MDEgVVNCCisJICBTaWVtZW5zIEdpZ2FzZXQgVVNCCisJICBOZXRnZWFyIFdHMTIxCisJICBOZXRnZWFyIFdHMTExCisJICBNZWRpb24gNDA5MDAsIFJvcGVyIEV1cm9wZQorCSAgU2h1dHRsZSBQTjE1LCBBaXJ2YXN0IFdNMTY4ZywgSU9HZWFyIEdXVTUxMworCSAgTGlua3N5cyBXVVNCNTRHCisJICBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUKKwkgIERMaW5rIERXTC1HMTIwIFNwaW5uYWtlcgorCSAgRExpbmsgRFdMLUcxMjIKKwkgIEJlbGtpbiBGNUQ3MDUwIHZlciAxMDAwCisJICBDb2hpYmEgUHJvdG8gYm9hcmQKKwkgIFNNQyAyODYyVy1HIHZlcnNpb24gMgorCSAgVS5TLiBSb2JvdGljcyBVNSA4MDIuMTFnIEFkYXB0ZXIKKwkgIEZVSklUU1UgRS01NDAwIFVTQiBEMTcwMAorCSAgU2FnZW0gWEc3MDNBCisJICBETGluayBEV0wtRzEyMCBDb2hpYmEKKwkgIFNwaW5uYWtlciBQcm90byBib2FyZAorCSAgTGlua3N5cyBXVVNCNTRBRworCSAgSW52ZW50ZWwgVVIwNTRHCisJICBTcGlubmFrZXIgRFVUCisKKwkgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdAorCSAgaHR0cDovL3ByaXNtNTQub3JnLworCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0dXNiLgorCitjb25maWcgUDU0X1BDSQorCXRyaXN0YXRlICJQcmlzbTU0IFBDSSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUDU0X0NPTU1PTiAmJiBQQ0kKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBmb3IgUENJIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBtb3N0IGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZQorCSAgZnVsbG1hYyBwcmlzbTU0IGRyaXZlciBwbHVzIG1hbnkgZGV2aWNlcyB3aGljaCBhcmUgbm90CisJICBzdXBwb3J0ZWQgYnkgdGhlIGZ1bGxtYWMgZHJpdmVyL2Zpcm13YXJlLgorCisJICBUaGlzIGRyaXZlciByZXF1aXJlcyBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdAorCSAgaHR0cDovL3ByaXNtNTQub3JnLworCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0cGNpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTljZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfUDU0X0NPTU1PTikJKz0gcDU0Y29tbW9uLm8KK29iai0kKENPTkZJR19QNTRfVVNCKQkJKz0gcDU0dXNiLm8KK29iai0kKENPTkZJR19QNTRfUENJKQkJKz0gcDU0cGNpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9uZXQyMjgwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbmV0MjI4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTVkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbmV0MjI4MC5oCkBAIC0wLDAgKzEsNDUyIEBACisjaWZuZGVmIE5FVDIyODBfSAorI2RlZmluZSBORVQyMjgwX0gKKy8qCisgKiBOZXRDaGlwIDIyODAgaGlnaC9mdWxsIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlci4KKyAqIFVubGlrZSBtYW55IHN1Y2ggY29udHJvbGxlcnMsIHRoaXMgb25lIHRhbGtzIFBDSS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIE5ldENoaXAgVGVjaG5vbG9neSwgSW5jLiAoaHR0cDovL3d3dy5uZXRjaGlwLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBORVQyMjgwIE1FTU9SWSBNQVBQRUQgUkVHSVNURVJTCisgKgorICogVGhlIHJlZ2lzdGVyIGxheW91dCBjYW1lIGZyb20gdGhlIGNoaXAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoZSBiaXQKKyAqIG51bWJlciBkZWZpbml0aW9ucyB3ZXJlIGV4dHJhY3RlZCBmcm9tIGNoaXAgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBVc2UgdGhlIHNoaWZ0IG9wZXJhdG9yICgnPDwnKSB0byBidWlsZCBiaXQgbWFza3MsIHdpdGggcmVhZGwvd3JpdGVsCisgKiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyB0aHJvdWdoIFBDSS4KKyAqLworCisvKiBtYWluIHJlZ2lzdGVycywgQkFSMCArIDB4MDAwMCAqLworc3RydWN0IG5ldDIyODBfcmVncyB7CisJLyogb2Zmc2V0IDB4MDAwMCAqLworCV9fbGUzMgkJCWRldmluaXQ7CisjZGVmaW5lIExPQ0FMX0NMT0NLX0ZSRVFVRU5DWQkJCQkJOAorI2RlZmluZSBGT1JDRV9QQ0lfUkVTRVQJCQkJCQk3CisjZGVmaW5lIFBDSV9JRAkJCQkJCQk2CisjZGVmaW5lIFBDSV9FTkFCTEUJCQkJCQk1CisjZGVmaW5lIEZJRk9fU09GVF9SRVNFVAkJCQkJCTQKKyNkZWZpbmUgQ0ZHX1NPRlRfUkVTRVQJCQkJCQkzCisjZGVmaW5lIFBDSV9TT0ZUX1JFU0VUCQkJCQkJMgorI2RlZmluZSBVU0JfU09GVF9SRVNFVAkJCQkJCTEKKyNkZWZpbmUgTTgwNTFfUkVTRVQJCQkJCQkwCisJX19sZTMyCQkJZWVjdGw7CisjZGVmaW5lIEVFUFJPTV9BRERSRVNTX1dJRFRICQkJCQkyMworI2RlZmluZSBFRVBST01fQ0hJUF9TRUxFQ1RfQUNUSVZFCQkJCTIyCisjZGVmaW5lIEVFUFJPTV9QUkVTRU5UCQkJCQkJMjEKKyNkZWZpbmUgRUVQUk9NX1ZBTElECQkJCQkJMjAKKyNkZWZpbmUgRUVQUk9NX0JVU1kJCQkJCQkxOQorI2RlZmluZSBFRVBST01fQ0hJUF9TRUxFQ1RfRU5BQkxFCQkJCTE4CisjZGVmaW5lIEVFUFJPTV9CWVRFX1JFQURfU1RBUlQJCQkJCTE3CisjZGVmaW5lIEVFUFJPTV9CWVRFX1dSSVRFX1NUQVJUCQkJCQkxNgorI2RlZmluZSBFRVBST01fUkVBRF9EQVRBCQkJCQk4CisjZGVmaW5lIEVFUFJPTV9XUklURV9EQVRBCQkJCQkwCisJX19sZTMyCQkJZWVjbGtmcmVxOworCXUzMgkJCV91bnVzZWQwOworCS8qIG9mZnNldCAweDAwMTAgKi8KKworCV9fbGUzMgkJCXBjaWlycWVuYjA7CS8qIGludGVycnVwdCBQQ0kgbWFzdGVyIC4uLiAqLworI2RlZmluZSBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRQkJCQk3CisjZGVmaW5lIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRQkJCQk2CisjZGVmaW5lIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRQkJCQk1CisjZGVmaW5lIEVORFBPSU5UX0RfSU5URVJSVVBUX0VOQUJMRQkJCQk0CisjZGVmaW5lIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRQkJCQkzCisjZGVmaW5lIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRQkJCQkyCisjZGVmaW5lIEVORFBPSU5UX0FfSU5URVJSVVBUX0VOQUJMRQkJCQkxCisjZGVmaW5lIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRQkJCQkwCisJX19sZTMyCQkJcGNpaXJxZW5iMTsKKyNkZWZpbmUgUENJX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTMxCisjZGVmaW5lIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFCQkJMjcKKyNkZWZpbmUgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFCQkJMjYKKyNkZWZpbmUgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFCQkJMjUKKyNkZWZpbmUgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFCQkyMAorI2RlZmluZSBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUJCTE5CisjZGVmaW5lIFBDSV9UQVJHRVRfQUJPUlRfQVNTRVJURURfSU5URVJSVVBUX0VOQUJMRQkJMTgKKyNkZWZpbmUgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUJCQkxNworI2RlZmluZSBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRQkJCTE2CisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX0VOQUJMRQkJCQkJMTMKKyNkZWZpbmUgRE1BX0RfSU5URVJSVVBUX0VOQUJMRQkJCQkJMTIKKyNkZWZpbmUgRE1BX0NfSU5URVJSVVBUX0VOQUJMRQkJCQkJMTEKKyNkZWZpbmUgRE1BX0JfSU5URVJSVVBUX0VOQUJMRQkJCQkJMTAKKyNkZWZpbmUgRE1BX0FfSU5URVJSVVBUX0VOQUJMRQkJCQkJOQorI2RlZmluZSBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFCQkJCTgKKyNkZWZpbmUgVkJVU19JTlRFUlJVUFRfRU5BQkxFCQkJCQk3CisjZGVmaW5lIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUJCQkJNgorI2RlZmluZSBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRQkJCTQKKyNkZWZpbmUgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUJCQkzCisjZGVmaW5lIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRQkJCTIKKyNkZWZpbmUgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTEKKyNkZWZpbmUgU09GX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTAKKwlfX2xlMzIgICAgICAgICAgICAgICAgICBjcHVfaXJxZW5iMDsJLyogLi4uIG9yIG9uYm9hcmQgODA1MSAqLworI2RlZmluZSBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRQkJCQk3CisjZGVmaW5lIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRQkJCQk2CisjZGVmaW5lIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRQkJCQk1CisjZGVmaW5lIEVORFBPSU5UX0RfSU5URVJSVVBUX0VOQUJMRQkJCQk0CisjZGVmaW5lIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRQkJCQkzCisjZGVmaW5lIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRQkJCQkyCisjZGVmaW5lIEVORFBPSU5UX0FfSU5URVJSVVBUX0VOQUJMRQkJCQkxCisjZGVmaW5lIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRQkJCQkwCisJX19sZTMyICAgICAgICAgICAgICAgICAgY3B1X2lycWVuYjE7CisjZGVmaW5lIENQVV9JTlRFUlJVUFRfRU5BQkxFCQkJCQkzMQorI2RlZmluZSBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRQkJCTI3CisjZGVmaW5lIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRQkJCTI2CisjZGVmaW5lIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRQkJCTI1CisjZGVmaW5lIFBDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUJCQkJMjQKKyNkZWZpbmUgUENJX1BNRV9JTlRFUlJVUFRfRU5BQkxFCQkJCTIzCisjZGVmaW5lIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUJCQkJMjIKKyNkZWZpbmUgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRQkJCQkyMQorI2RlZmluZSBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUJCTIwCisjZGVmaW5lIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRQkJMTkKKyNkZWZpbmUgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUJCQkxNworI2RlZmluZSBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRQkJCTE2CisjZGVmaW5lIEdQSU9fSU5URVJSVVBUX0VOQUJMRQkJCQkJMTMKKyNkZWZpbmUgRE1BX0RfSU5URVJSVVBUX0VOQUJMRQkJCQkJMTIKKyNkZWZpbmUgRE1BX0NfSU5URVJSVVBUX0VOQUJMRQkJCQkJMTEKKyNkZWZpbmUgRE1BX0JfSU5URVJSVVBUX0VOQUJMRQkJCQkJMTAKKyNkZWZpbmUgRE1BX0FfSU5URVJSVVBUX0VOQUJMRQkJCQkJOQorI2RlZmluZSBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFCQkJCTgKKyNkZWZpbmUgVkJVU19JTlRFUlJVUFRfRU5BQkxFCQkJCQk3CisjZGVmaW5lIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUJCQkJNgorI2RlZmluZSBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRQkJCTQKKyNkZWZpbmUgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUJCQkzCisjZGVmaW5lIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRQkJCTIKKyNkZWZpbmUgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTEKKyNkZWZpbmUgU09GX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTAKKworCS8qIG9mZnNldCAweDAwMjAgKi8KKwl1MzIJCQlfdW51c2VkMTsKKwlfX2xlMzIJCQl1c2JpcnFlbmIxOworI2RlZmluZSBVU0JfSU5URVJSVVBUX0VOQUJMRQkJCQkJMzEKKyNkZWZpbmUgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUJCQkyNworI2RlZmluZSBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUJCQkyNgorI2RlZmluZSBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUJCQkyNQorI2RlZmluZSBQQ0lfSU5UQV9JTlRFUlJVUFRfRU5BQkxFCQkJCTI0CisjZGVmaW5lIFBDSV9QTUVfSU5URVJSVVBUX0VOQUJMRQkJCQkyMworI2RlZmluZSBQQ0lfU0VSUl9JTlRFUlJVUFRfRU5BQkxFCQkJCTIyCisjZGVmaW5lIFBDSV9QRVJSX0lOVEVSUlVQVF9FTkFCTEUJCQkJMjEKKyNkZWZpbmUgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFCQkyMAorI2RlZmluZSBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUJCTE5CisjZGVmaW5lIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFCQkJMTcKKyNkZWZpbmUgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUJCQkxNgorI2RlZmluZSBHUElPX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTEzCisjZGVmaW5lIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTEyCisjZGVmaW5lIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTExCisjZGVmaW5lIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTEwCisjZGVmaW5lIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTkKKyNkZWZpbmUgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRQkJCQk4CisjZGVmaW5lIFZCVVNfSU5URVJSVVBUX0VOQUJMRQkJCQkJNworI2RlZmluZSBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFCQkJCTYKKyNkZWZpbmUgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUJCQk0CisjZGVmaW5lIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFCQkJMworI2RlZmluZSBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUJCQkyCisjZGVmaW5lIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFCQkJCQkxCisjZGVmaW5lIFNPRl9JTlRFUlJVUFRfRU5BQkxFCQkJCQkwCisJX19sZTMyCQkJaXJxc3RhdDA7CisjZGVmaW5lIElOVEFfQVNTRVJURUQJCQkJCQkxMgorI2RlZmluZSBTRVRVUF9QQUNLRVRfSU5URVJSVVBUCQkJCQk3CisjZGVmaW5lIEVORFBPSU5UX0ZfSU5URVJSVVBUCQkJCQk2CisjZGVmaW5lIEVORFBPSU5UX0VfSU5URVJSVVBUCQkJCQk1CisjZGVmaW5lIEVORFBPSU5UX0RfSU5URVJSVVBUCQkJCQk0CisjZGVmaW5lIEVORFBPSU5UX0NfSU5URVJSVVBUCQkJCQkzCisjZGVmaW5lIEVORFBPSU5UX0JfSU5URVJSVVBUCQkJCQkyCisjZGVmaW5lIEVORFBPSU5UX0FfSU5URVJSVVBUCQkJCQkxCisjZGVmaW5lIEVORFBPSU5UXzBfSU5URVJSVVBUCQkJCQkwCisJX19sZTMyCQkJaXJxc3RhdDE7CisjZGVmaW5lIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFQJCQkJMjcKKyNkZWZpbmUgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFQJCQkJMjYKKyNkZWZpbmUgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFQJCQkJMjUKKyNkZWZpbmUgUENJX0lOVEFfSU5URVJSVVBUCQkJCQkyNAorI2RlZmluZSBQQ0lfUE1FX0lOVEVSUlVQVAkJCQkJMjMKKyNkZWZpbmUgUENJX1NFUlJfSU5URVJSVVBUCQkJCQkyMgorI2RlZmluZSBQQ0lfUEVSUl9JTlRFUlJVUFQJCQkJCTIxCisjZGVmaW5lIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUCQkJMjAKKyNkZWZpbmUgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQJCQkxOQorI2RlZmluZSBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUCQkJCTE3CisjZGVmaW5lIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFQJCQkJMTYKKyNkZWZpbmUgR1BJT19JTlRFUlJVUFQJCQkJCQkxMworI2RlZmluZSBETUFfRF9JTlRFUlJVUFQJCQkJCQkxMgorI2RlZmluZSBETUFfQ19JTlRFUlJVUFQJCQkJCQkxMQorI2RlZmluZSBETUFfQl9JTlRFUlJVUFQJCQkJCQkxMAorI2RlZmluZSBETUFfQV9JTlRFUlJVUFQJCQkJCQk5CisjZGVmaW5lIEVFUFJPTV9ET05FX0lOVEVSUlVQVAkJCQkJOAorI2RlZmluZSBWQlVTX0lOVEVSUlVQVAkJCQkJCTcKKyNkZWZpbmUgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUCQkJCTYKKyNkZWZpbmUgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVAkJCQk0CisjZGVmaW5lIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQJCQkJMworI2RlZmluZSBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVAkJCTIKKyNkZWZpbmUgUkVTVU1FX0lOVEVSUlVQVAkJCQkJMQorI2RlZmluZSBTT0ZfSU5URVJSVVBUCQkJCQkJMAorCS8qIG9mZnNldCAweDAwMzAgKi8KKwlfX2xlMzIJCQlpZHhhZGRyOworCV9fbGUzMgkJCWlkeGRhdGE7CisJX19sZTMyCQkJZmlmb2N0bDsKKyNkZWZpbmUgUENJX0JBU0UyX1JBTkdFCQkJCQkJMTYKKyNkZWZpbmUgSUdOT1JFX0ZJRk9fQVZBSUxBQklMSVRZCQkJCTMKKyNkZWZpbmUgUENJX0JBU0UyX1NFTEVDVAkJCQkJMgorI2RlZmluZSBGSUZPX0NPTkZJR1VSQVRJT05fU0VMRUNUCQkJCTAKKwl1MzIJCQlfdW51c2VkMjsKKwkvKiBvZmZzZXQgMHgwMDQwICovCisJX19sZTMyCQkJbWVtYWRkcjsKKyNkZWZpbmUgU1RBUlQJCQkJCQkJMjgKKyNkZWZpbmUgRElSRUNUSU9OCQkJCQkJMjcKKyNkZWZpbmUgRklGT19ESUFHTk9TVElDX1NFTEVDVAkJCQkJMjQKKyNkZWZpbmUgTUVNT1JZX0FERFJFU1MJCQkJCQkwCisJX19sZTMyCQkJbWVtZGF0YTA7CisJX19sZTMyCQkJbWVtZGF0YTE7CisJdTMyCQkJX3VudXNlZDM7CisJLyogb2Zmc2V0IDB4MDA1MCAqLworCV9fbGUzMgkJCWdwaW9jdGw7CisjZGVmaW5lIEdQSU8zX0xFRF9TRUxFQ1QJCQkJCTEyCisjZGVmaW5lIEdQSU8zX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTExCisjZGVmaW5lIEdQSU8yX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTEwCisjZGVmaW5lIEdQSU8xX0lOVEVSUlVQVF9FTkFCTEUJCQkJCTkKKyNkZWZpbmUgR1BJTzBfSU5URVJSVVBUX0VOQUJMRQkJCQkJOAorI2RlZmluZSBHUElPM19PVVRQVVRfRU5BQkxFCQkJCQk3CisjZGVmaW5lIEdQSU8yX09VVFBVVF9FTkFCTEUJCQkJCTYKKyNkZWZpbmUgR1BJTzFfT1VUUFVUX0VOQUJMRQkJCQkJNQorI2RlZmluZSBHUElPMF9PVVRQVVRfRU5BQkxFCQkJCQk0CisjZGVmaW5lIEdQSU8zX0RBVEEJCQkJCQkzCisjZGVmaW5lIEdQSU8yX0RBVEEJCQkJCQkyCisjZGVmaW5lIEdQSU8xX0RBVEEJCQkJCQkxCisjZGVmaW5lIEdQSU8wX0RBVEEJCQkJCQkwCisJX19sZTMyCQkJZ3Bpb3N0YXQ7CisjZGVmaW5lIEdQSU8zX0lOVEVSUlVQVAkJCQkJCTMKKyNkZWZpbmUgR1BJTzJfSU5URVJSVVBUCQkJCQkJMgorI2RlZmluZSBHUElPMV9JTlRFUlJVUFQJCQkJCQkxCisjZGVmaW5lIEdQSU8wX0lOVEVSUlVQVAkJCQkJCTAKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiB1c2IgY29udHJvbCwgQkFSMCArIDB4MDA4MCAqLworc3RydWN0IG5ldDIyODBfdXNiX3JlZ3MgeworCS8qIG9mZnNldCAweDAwODAgKi8KKwlfX2xlMzIJCQlzdGRyc3A7CisjZGVmaW5lIFNUQUxMX1VOU1VQUE9SVEVEX1JFUVVFU1RTCQkJCTMxCisjZGVmaW5lIFNFVF9URVNUX01PREUJCQkJCQkxNgorI2RlZmluZSBHRVRfT1RIRVJfU1BFRURfQ09ORklHVVJBVElPTgkJCQkxNQorI2RlZmluZSBHRVRfREVWSUNFX1FVQUxJRklFUgkJCQkJMTQKKyNkZWZpbmUgU0VUX0FERFJFU1MJCQkJCQkxMworI2RlZmluZSBFTkRQT0lOVF9TRVRfQ0xFQVJfSEFMVAkJCQkJMTIKKyNkZWZpbmUgREVWSUNFX1NFVF9DTEVBUl9ERVZJQ0VfUkVNT1RFX1dBS0VVUAkJCTExCisjZGVmaW5lIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8yCQkJCQkxMAorI2RlZmluZSBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMQkJCQkJOQorI2RlZmluZSBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMAkJCQkJOAorI2RlZmluZSBHRVRfU0VUX0lOVEVSRkFDRQkJCQkJNgorI2RlZmluZSBHRVRfU0VUX0NPTkZJR1VSQVRJT04JCQkJCTUKKyNkZWZpbmUgR0VUX0NPTkZJR1VSQVRJT05fREVTQ1JJUFRPUgkJCQk0CisjZGVmaW5lIEdFVF9ERVZJQ0VfREVTQ1JJUFRPUgkJCQkJMworI2RlZmluZSBHRVRfRU5EUE9JTlRfU1RBVFVTCQkJCQkyCisjZGVmaW5lIEdFVF9JTlRFUkZBQ0VfU1RBVFVTCQkJCQkxCisjZGVmaW5lIEdFVF9ERVZJQ0VfU1RBVFVTCQkJCQkwCisJX19sZTMyCQkJcHJvZHZlbmRpZDsKKyNkZWZpbmUgICAgIFBST0RVQ1RfSUQJCQkJCQkxNgorI2RlZmluZSAgICAgVkVORE9SX0lECQkJCQkJMAorCV9fbGUzMgkJCXJlbG51bTsKKwlfX2xlMzIJCQl1c2JjdGw7CisjZGVmaW5lIFNFUklBTF9OVU1CRVJfSU5ERVgJCQkJCTE2CisjZGVmaW5lIFBST0RVQ1RfSURfU1RSSU5HX0VOQUJMRQkJCQkxMworI2RlZmluZSBWRU5ET1JfSURfU1RSSU5HX0VOQUJMRQkJCQkJMTIKKyNkZWZpbmUgVVNCX1JPT1RfUE9SVF9XQUtFVVBfRU5BQkxFCQkJCTExCisjZGVmaW5lIFZCVVNfUElOCQkJCQkJMTAKKyNkZWZpbmUgVElNRURfRElTQ09OTkVDVAkJCQkJOQorI2RlZmluZSBTVVNQRU5EX0lNTUVESUFURUxZCQkJCQk3CisjZGVmaW5lIFNFTEZfUE9XRVJFRF9VU0JfREVWSUNFCQkJCQk2CisjZGVmaW5lIFJFTU9URV9XQUtFVVBfU1VQUE9SVAkJCQkJNQorI2RlZmluZSBQTUVfUE9MQVJJVFkJCQkJCQk0CisjZGVmaW5lIFVTQl9ERVRFQ1RfRU5BQkxFCQkJCQkzCisjZGVmaW5lIFBNRV9XQUtFVVBfRU5BQkxFCQkJCQkyCisjZGVmaW5lIERFVklDRV9SRU1PVEVfV0FLRVVQX0VOQUJMRQkJCQkxCisjZGVmaW5lIFNFTEZfUE9XRVJFRF9TVEFUVVMJCQkJCTAKKwkvKiBvZmZzZXQgMHgwMDkwICovCisJX19sZTMyCQkJdXNic3RhdDsKKyNkZWZpbmUgSElHSF9TUEVFRAkJCQkJCTcKKyNkZWZpbmUgRlVMTF9TUEVFRAkJCQkJCTYKKyNkZWZpbmUgR0VORVJBVEVfUkVTVU1FCQkJCQkJNQorI2RlZmluZSBHRU5FUkFURV9ERVZJQ0VfUkVNT1RFX1dBS0VVUAkJCQk0CisJX19sZTMyCQkJeGN2cmRpYWc7CisjZGVmaW5lIEZPUkNFX0hJR0hfU1BFRURfTU9ERQkJCQkJMzEKKyNkZWZpbmUgRk9SQ0VfRlVMTF9TUEVFRF9NT0RFCQkJCQkzMAorI2RlZmluZSBVU0JfVEVTVF9NT0RFCQkJCQkJMjQKKyNkZWZpbmUgTElORV9TVEFURQkJCQkJCTE2CisjZGVmaW5lIFRSQU5TQ0VJVkVSX09QRVJBVElPTl9NT0RFCQkJCTIKKyNkZWZpbmUgVFJBTlNDRUlWRVJfU0VMRUNUCQkJCQkxCisjZGVmaW5lIFRFUk1JTkFUSU9OX1NFTEVDVAkJCQkJMAorCV9fbGUzMgkJCXNldHVwMDEyMzsKKwlfX2xlMzIJCQlzZXR1cDQ1Njc7CisJLyogb2Zmc2V0IDB4MDA5MCAqLworCXUzMgkJCV91bnVzZWQwOworCV9fbGUzMgkJCW91cmFkZHI7CisjZGVmaW5lIEZPUkNFX0lNTUVESUFURQkJCQkJCTcKKyNkZWZpbmUgT1VSX1VTQl9BRERSRVNTCQkJCQkJMAorCV9fbGUzMgkJCW91cmNvbmZpZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBwY2kgY29udHJvbCwgQkFSMCArIDB4MDEwMCAqLworc3RydWN0IG5ldDIyODBfcGNpX3JlZ3MgeworCS8qIG9mZnNldCAweDAxMDAgKi8KKwlfX2xlMzIJCQlwY2ltc3RjdGw7CisjZGVmaW5lIFBDSV9BUkJJVEVSX1BBUktfU0VMRUNUCQkJCQkxMworI2RlZmluZSBQQ0lfTVVMVEkgTEVWRUxfQVJCSVRFUgkJCQkJMTIKKyNkZWZpbmUgUENJX1JFVFJZX0FCT1JUX0VOQUJMRQkJCQkJMTEKKyNkZWZpbmUgRE1BX01FTU9SWV9XUklURV9BTkRfSU5WQUxJREFURV9FTkFCTEUJCQkxMAorI2RlZmluZSBETUFfUkVBRF9NVUxUSVBMRV9FTkFCTEUJCQkJOQorI2RlZmluZSBETUFfUkVBRF9MSU5FX0VOQUJMRQkJCQkJOAorI2RlZmluZSBQQ0lfTUFTVEVSX0NPTU1BTkRfU0VMRUNUCQkJCTYKKyNkZWZpbmUJCU1FTV9SRUFEX09SX1dSSVRFCQkJCTAKKyNkZWZpbmUJCUlPX1JFQURfT1JfV1JJVEUJCQkJMQorI2RlZmluZQkJQ0ZHX1JFQURfT1JfV1JJVEUJCQkJMgorI2RlZmluZSBQQ0lfTUFTVEVSX1NUQVJUCQkJCQk1CisjZGVmaW5lIFBDSV9NQVNURVJfUkVBRF9XUklURQkJCQkJNAorI2RlZmluZQkJUENJX01BU1RFUl9XUklURQkJCQkwCisjZGVmaW5lCQlQQ0lfTUFTVEVSX1JFQUQJCQkJCTEKKyNkZWZpbmUgUENJX01BU1RFUl9CWVRFX1dSSVRFX0VOQUJMRVMJCQkJMAorCV9fbGUzMgkJCXBjaW1zdGFkZHI7CisJX19sZTMyCQkJcGNpbXN0ZGF0YTsKKwlfX2xlMzIJCQlwY2ltc3RzdGF0OworI2RlZmluZSBQQ0lfQVJCSVRFUl9DTEVBUgkJCQkJMgorI2RlZmluZSBQQ0lfRVhURVJOQUxfQVJCSVRFUgkJCQkJMQorI2RlZmluZSBQQ0lfSE9TVF9NT0RFCQkJCQkJMAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGRtYSBjb250cm9sLCBCQVIwICsgMHgwMTgwIC4uLiBhcnJheSBvZiBmb3VyIHN0cnVjdHMgbGlrZSB0aGlzLAorICogZm9yIGNoYW5uZWxzIDAuLjMuICBzZWUgYWxzbyBzdHJ1Y3QgbmV0MjI4MF9kbWE6ICBkZXNjcmlwdG9yCisgKiB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycy4KKyAqLworc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgewkvKiBbMTEuN10gKi8KKwkvKiBvZmZzZXQgMHgwMTgwLCAweDAxYTAsIDB4MDFjMCwgMHgwMWUwLCAqLworCV9fbGUzMgkJCWRtYWN0bDsKKyNkZWZpbmUgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUX0VOQUJMRQkJMjUKKyNkZWZpbmUgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRQkJCQkJMjEKKyNkZWZpbmUgREVTQ1JJUFRPUl9QT0xMSU5HX1JBVEUJCQkJCTE5CisjZGVmaW5lCQlQT0xMX0NPTlRJTlVPVVMJCQkJCTAKKyNkZWZpbmUJCVBPTExfMV9VU0VDCQkJCQkxCisjZGVmaW5lCQlQT0xMXzEwMF9VU0VDCQkJCQkyCisjZGVmaW5lCQlQT0xMXzFfTVNFQwkJCQkJMworI2RlZmluZSBETUFfVkFMSURfQklUX1BPTExJTkdfRU5BQkxFCQkJCTE4CisjZGVmaW5lIERNQV9WQUxJRF9CSVRfRU5BQkxFCQkJCQkxNworI2RlZmluZSBETUFfU0NBVFRFUl9HQVRIRVJfRU5BQkxFCQkJCTE2CisjZGVmaW5lIERNQV9PVVRfQVVUT19TVEFSVF9FTkFCTEUJCQkJNAorI2RlZmluZSBETUFfUFJFRU1QVF9FTkFCTEUJCQkJCTMKKyNkZWZpbmUgRE1BX0ZJRk9fVkFMSURBVEUJCQkJCTIKKyNkZWZpbmUgRE1BX0VOQUJMRQkJCQkJCTEKKyNkZWZpbmUgRE1BX0FERFJFU1NfSE9MRAkJCQkJMAorCV9fbGUzMgkJCWRtYXN0YXQ7CisjZGVmaW5lIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVAkJCTI1CisjZGVmaW5lIERNQV9UUkFOU0FDVElPTl9ET05FX0lOVEVSUlVQVAkJCQkyNAorI2RlZmluZSBETUFfQUJPUlQJCQkJCQkxCisjZGVmaW5lIERNQV9TVEFSVAkJCQkJCTAKKwl1MzIJCQlfdW51c2VkMFsyXTsKKwkvKiBvZmZzZXQgMHgwMTkwLCAweDAxYjAsIDB4MDFkMCwgMHgwMWYwLCAqLworCV9fbGUzMiAgICAgICAgICAgICAgICAgIGRtYWNvdW50OworI2RlZmluZSBWQUxJRF9CSVQJCQkJCQkzMQorI2RlZmluZSBETUFfRElSRUNUSU9OCQkJCQkJMzAKKyNkZWZpbmUgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRQkJCQkyOQorI2RlZmluZSBFTkRfT0ZfQ0hBSU4JCQkJCQkyOAorI2RlZmluZSBETUFfQllURV9DT1VOVF9NQVNLCQkJCQkoKDE8PDI0KS0xKQorI2RlZmluZSBETUFfQllURV9DT1VOVAkJCQkJCTAKKwlfX2xlMzIJCQlkbWFhZGRyOworCV9fbGUzMgkJCWRtYWRlc2M7CisJdTMyCQkJX3VudXNlZDE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogZGVkaWNhdGVkIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDIwMCAqLworCitzdHJ1Y3QgbmV0MjI4MF9kZXBfcmVncyB7CS8qIFsxMS44XSAqLworCS8qIG9mZnNldCAweDAyMDAsIDB4MDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MCAqLworCV9fbGUzMgkJCWRlcF9jZmc7CisJLyogb2Zmc2V0IDB4MDIwNCwgMHgwMjE0LCAweDIyNCwgMHgyMzQsIDB4MjQ0ICovCisJX19sZTMyCQkJZGVwX3JzcDsKKwl1MzIJCQlfdW51c2VkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGNvbmZpZ3VyYWJsZSBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAzMDAgLi4uIGFycmF5IG9mIHNldmVuIHN0cnVjdHMKKyAqIGxpa2UgdGhpcywgZm9yIGVwMCB0aGVuIHRoZSBjb25maWd1cmFibGUgZW5kcG9pbnRzIEEuLkYKKyAqIGVwMCByZXNlcnZlZCBmb3IgY29udHJvbDsgRSBhbmQgRiBoYXZlIG9ubHkgNjQgYnl0ZXMgb2YgZmlmbworICovCitzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzIHsJLyogWzExLjldICovCisJLyogb2Zmc2V0IDB4MDMwMCwgMHgwMzIwLCAweDAzNDAsIDB4MDM2MCwgMHgwMzgwLCAweDAzYTAsIDB4MDNjMCAqLworCV9fbGUzMgkJCWVwX2NmZzsKKyNkZWZpbmUgRU5EUE9JTlRfQllURV9DT1VOVAkJCQkJMTYKKyNkZWZpbmUgRU5EUE9JTlRfRU5BQkxFCQkJCQkJMTAKKyNkZWZpbmUgRU5EUE9JTlRfVFlQRQkJCQkJCTgKKyNkZWZpbmUgRU5EUE9JTlRfRElSRUNUSU9OCQkJCQk3CisjZGVmaW5lIEVORFBPSU5UX05VTUJFUgkJCQkJCTAKKwlfX2xlMzIJCQllcF9yc3A7CisjZGVmaW5lIFNFVF9OQUtfT1VUX1BBQ0tFVFMJCQkJCTE1CisjZGVmaW5lIFNFVF9FUF9ISURFX1NUQVRVU19QSEFTRQkJCQkxNAorI2RlZmluZSBTRVRfRVBfRk9SQ0VfQ1JDX0VSUk9SCQkJCQkxMworI2RlZmluZSBTRVRfSU5URVJSVVBUX01PREUJCQkJCTEyCisjZGVmaW5lIFNFVF9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UJCQkxMQorI2RlZmluZSBTRVRfTkFLX09VVF9QQUNLRVRTX01PREUJCQkJMTAKKyNkZWZpbmUgU0VUX0VORFBPSU5UX1RPR0dMRQkJCQkJOQorI2RlZmluZSBTRVRfRU5EUE9JTlRfSEFMVAkJCQkJOAorI2RlZmluZSBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMJCQkJCTcKKyNkZWZpbmUgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UJCQkJNgorI2RlZmluZSBDTEVBUl9FUF9GT1JDRV9DUkNfRVJST1IJCQkJNQorI2RlZmluZSBDTEVBUl9JTlRFUlJVUFRfTU9ERQkJCQkJNAorI2RlZmluZSBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UJCQkzCisjZGVmaW5lIENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFCQkJCTIKKyNkZWZpbmUgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFCQkJCQkxCisjZGVmaW5lIENMRUFSX0VORFBPSU5UX0hBTFQJCQkJCTAKKwlfX2xlMzIJCQllcF9pcnFlbmI7CisjZGVmaW5lIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFRfRU5BQkxFCQkJNgorI2RlZmluZSBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUX0VOQUJMRQkJNQorI2RlZmluZSBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFCQkJMworI2RlZmluZSBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFRfRU5BQkxFCQkyCisjZGVmaW5lIERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUX0VOQUJMRQkJCTEKKyNkZWZpbmUgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFRfRU5BQkxFCQkJCTAKKwlfX2xlMzIJCQllcF9zdGF0OworI2RlZmluZSBGSUZPX1ZBTElEX0NPVU5UCQkJCQkyNAorI2RlZmluZSBISUdIX0JBTkRXSURUSF9PVVRfVFJBTlNBQ1RJT05fUElECQkJMjIKKyNkZWZpbmUgVElNRU9VVAkJCQkJCQkyMQorI2RlZmluZSBVU0JfU1RBTExfU0VOVAkJCQkJCTIwCisjZGVmaW5lIFVTQl9JTl9OQUtfU0VOVAkJCQkJCTE5CisjZGVmaW5lIFVTQl9JTl9BQ0tfUkNWRAkJCQkJCTE4CisjZGVmaW5lIFVTQl9PVVRfUElOR19OQUtfU0VOVAkJCQkJMTcKKyNkZWZpbmUgVVNCX09VVF9BQ0tfU0VOVAkJCQkJMTYKKyNkZWZpbmUgRklGT19PVkVSRkxPVwkJCQkJCTEzCisjZGVmaW5lIEZJRk9fVU5ERVJGTE9XCQkJCQkJMTIKKyNkZWZpbmUgRklGT19GVUxMCQkJCQkJMTEKKyNkZWZpbmUgRklGT19FTVBUWQkJCQkJCTEwCisjZGVmaW5lIEZJRk9fRkxVU0gJCQkJCQk5CisjZGVmaW5lIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQJCQkJNgorI2RlZmluZSBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUCQkJNQorI2RlZmluZSBOQUtfT1VUX1BBQ0tFVFMJCQkJCQk0CisjZGVmaW5lIERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVAkJCQkzCisjZGVmaW5lIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVAkJCTIKKyNkZWZpbmUgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQJCQkJMQorI2RlZmluZSBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVAkJCQkJMAorCS8qIG9mZnNldCAweDAzMTAsIDB4MDMzMCwgMHgwMzUwLCAweDAzNzAsIDB4MDM5MCwgMHgwM2IwLCAweDAzZDAgKi8KKwlfX2xlMzIJCQllcF9hdmFpbDsKKwlfX2xlMzIJCQllcF9kYXRhOworCXUzMgkJCV91bnVzZWQwWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBuZXQyMjgwX3JlZ193cml0ZSB7CisJX19sZTE2IHBvcnQ7CisJX19sZTMyIGFkZHI7CisJX19sZTMyIHZhbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbmV0MjI4MF9yZWdfcmVhZCB7CisJX19sZTE2IHBvcnQ7CisJX19sZTMyIGFkZHI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNlbmRpZiAvKiBORVQyMjgwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQyYzY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCkBAIC0wLDAgKzEsNzcgQEAKKyNpZm5kZWYgUFJJU001NF9ICisjZGVmaW5lIFBSSVNNNTRfSAorCisvKgorICogU2hhcmVkIGRlZmluZXMgZm9yIGFsbCBtYWM4MDIxMSBQcmlzbTU0IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICoKKyAqIEJhc2VkIG9uIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK2VudW0gY29udHJvbF9mcmFtZV90eXBlcyB7CisJUDU0X0NPTlRST0xfVFlQRV9GSUxURVJfU0VUID0gMCwKKwlQNTRfQ09OVFJPTF9UWVBFX0NIQU5ORUxfQ0hBTkdFLAorCVA1NF9DT05UUk9MX1RZUEVfRlJFUURPTkUsCisJUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULAorCVA1NF9DT05UUk9MX1RZUEVfRlJFRVFVRVVFID0gNywKKwlQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORSwKKwlQNTRfQ09OVFJPTF9UWVBFX1BJTkcsCisJUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLLAorCVA1NF9DT05UUk9MX1RZUEVfQkJQLAorCVA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLAorCVA1NF9DT05UUk9MX1RZUEVfTEVECit9OworCitzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyIHsKKwlfX2xlMTYgbWFnaWMxOworCV9fbGUxNiBsZW47CisJX19sZTMyIHJlcV9pZDsKKwlfX2xlMTYgdHlwZTsJLyogZW51bSBjb250cm9sX2ZyYW1lX3R5cGVzICovCisJdTggcmV0cnkxOworCXU4IHJldHJ5MjsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgRUVQUk9NX1JFQURCQUNLX0xFTiAoc2l6ZW9mKHN0cnVjdCBwNTRfY29udHJvbF9oZHIpICsgNCAvKiBwNTRfZWVwcm9tX2xtODYgKi8pCisjZGVmaW5lIE1BWF9SWF9TSVpFIChJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQgKyBzaXplb2Yoc3RydWN0IHA1NF9jb250cm9sX2hkcikgKyAyMCAvKiBsZW5ndGggb2Ygc3RydWN0IHA1NF9yeF9oZHIgKi8gKyAxNiApCisKKyNkZWZpbmUgSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUiAweDIwMDAwCisKK3N0cnVjdCBwNTRfY29tbW9uIHsKKwl1MzIgcnhfc3RhcnQ7CisJdTMyIHJ4X2VuZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOworCXZvaWQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpkYXRhLAorCQkgICBzaXplX3QgbGVuLCBpbnQgZnJlZV9vbl90eCk7CisJaW50ICgqb3Blbikoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKKwlpbnQgbW9kZTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKKwl1bnNpZ25lZCBpbnQgaXFfYXV0b2NhbF9sZW47CisJc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqb3V0cHV0X2xpbWl0OworCXVuc2lnbmVkIGludCBvdXRwdXRfbGltaXRfbGVuOworCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YTsKKwlfX2xlMTYgcnhodzsKKwl1OCB2ZXJzaW9uOworCXVuc2lnbmVkIGludCB0eF9oZHJfbGVuOworCXZvaWQgKmNhY2hlZF92ZGNmOworCXVuc2lnbmVkIGludCBmd192YXI7CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKK307CisKK2ludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CitpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7Cit2b2lkIHA1NF9maWxsX2VlcHJvbV9yZWFkYmFjayhzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpoZHIpOworc3RydWN0IGllZWU4MDIxMV9odyAqcDU0X2luaXRfY29tbW9uKHNpemVfdCBwcml2X2RhdGFfbGVuKTsKK3ZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CisKKyNlbmRpZiAvKiBQUklTTTU0X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y5YmFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCkBAIC0wLDAgKzEsMTA1MSBAQAorCisvKgorICogQ29tbW9uIGNvZGUgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAicDU0LmgiCisjaW5jbHVkZSAicDU0Y29tbW9uLmgiCisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2Z0bWFjIFByaXNtNTQgY29tbW9uIGNvZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicHJpc201NGNvbW1vbiIpOworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHA1NF9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDEsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAyLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gNSwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBwNTRfY2hhbm5lbHNbXSA9IHsKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMywgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzNywgLmh3X3ZhbHVlID0gNiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDY3LCAuaHdfdmFsdWUgPSAxMiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NzIsIC5od192YWx1ZSA9IDEzLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kXzJHSHogPSB7CisJLmNoYW5uZWxzID0gcDU0X2NoYW5uZWxzLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShwNTRfY2hhbm5lbHMpLAorCS5iaXRyYXRlcyA9IHA1NF9yYXRlcywKKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocDU0X3JhdGVzKSwKK307CisKKwordm9pZCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBib290cmVjX2V4cF9pZiAqZXhwX2lmOworCXN0cnVjdCBib290cmVjICpib290cmVjOworCXUzMiAqZGF0YSA9ICh1MzIgKilmdy0+ZGF0YTsKKwl1MzIgKmVuZF9kYXRhID0gKHUzMiAqKWZ3LT5kYXRhICsgKGZ3LT5zaXplID4+IDIpOworCXU4ICpmd192ZXJzaW9uID0gTlVMTDsKKwlzaXplX3QgbGVuOworCWludCBpOworCisJaWYgKHByaXYtPnJ4X3N0YXJ0KQorCQlyZXR1cm47CisKKwl3aGlsZSAoZGF0YSA8IGVuZF9kYXRhICYmICpkYXRhKQorCQlkYXRhKys7CisKKwl3aGlsZSAoZGF0YSA8IGVuZF9kYXRhICYmICEqZGF0YSkKKwkJZGF0YSsrOworCisJYm9vdHJlYyA9IChzdHJ1Y3QgYm9vdHJlYyAqKSBkYXRhOworCisJd2hpbGUgKGJvb3RyZWMtPmRhdGEgPD0gZW5kX2RhdGEgJiYKKwkgICAgICAgKGJvb3RyZWMtPmRhdGEgKyAobGVuID0gbGUzMl90b19jcHUoYm9vdHJlYy0+bGVuKSkpIDw9IGVuZF9kYXRhKSB7CisJCXUzMiBjb2RlID0gbGUzMl90b19jcHUoYm9vdHJlYy0+Y29kZSk7CisJCXN3aXRjaCAoY29kZSkgeworCQljYXNlIEJSX0NPREVfQ09NUE9ORU5UX0lEOgorCQkJc3dpdGNoIChiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKWJvb3RyZWMtPmRhdGEpKSB7CisJCQljYXNlIEZXX0ZNQUM6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAicDU0OiBGcmVlTUFDIGZpcm13YXJlXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRldfTE0yMDoKKwkJCQlwcmludGsoS0VSTl9JTkZPICJwNTQ6IExNMjAgZmlybXdhcmVcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBGV19MTTg2OgorCQkJCXByaW50ayhLRVJOX0lORk8gInA1NDogTE04NiBmaXJtd2FyZVxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEZXX0xNODc6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAicDU0OiBMTTg3IGZpcm13YXJlIC0gbm90IHN1cHBvcnRlZCB5ZXQhXG4iKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAicDU0OiB1bmtub3duIGZpcm13YXJlXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEJSX0NPREVfQ09NUE9ORU5UX1ZFUlNJT046CisJCQkvKiAyNCBieXRlcyBzaG91bGQgYmUgZW5vdWdoIGZvciBhbGwgZmlybXdhcmVzICovCisJCQlpZiAoc3RybmxlbigodW5zaWduZWQgY2hhciopYm9vdHJlYy0+ZGF0YSwgMjQpIDwgMjQpCisJCQkJZndfdmVyc2lvbiA9ICh1bnNpZ25lZCBjaGFyKilib290cmVjLT5kYXRhOworCQkJYnJlYWs7CisJCWNhc2UgQlJfQ09ERV9ERVNDUjoKKwkJCXByaXYtPnJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoKChfX2xlMzIgKilib290cmVjLT5kYXRhKVsxXSk7CisJCQkvKiBGSVhNRSBhZGQgc2FuaXR5IGNoZWNraW5nICovCisJCQlwcml2LT5yeF9lbmQgPSBsZTMyX3RvX2NwdSgoKF9fbGUzMiAqKWJvb3RyZWMtPmRhdGEpWzJdKSAtIDB4MzUwMDsKKwkJCWJyZWFrOworCQljYXNlIEJSX0NPREVfRVhQT1NFRF9JRjoKKwkJCWV4cF9pZiA9IChzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKikgYm9vdHJlYy0+ZGF0YTsKKwkJCWZvciAoaSA9IDA7IGkgPCAobGVuICogc2l6ZW9mKCpleHBfaWYpIC8gNCk7IGkrKykKKwkJCQlpZiAoZXhwX2lmW2ldLmlmX2lkID09IGNwdV90b19sZTE2KDB4MWEpKQorCQkJCQlwcml2LT5md192YXIgPSBsZTE2X3RvX2NwdShleHBfaWZbaV0udmFyaWFudCk7CisJCQlicmVhazsKKwkJY2FzZSBCUl9DT0RFX0RFUEVOREVOVF9JRjoKKwkJCWJyZWFrOworCQljYXNlIEJSX0NPREVfRU5EX09GX0JSQToKKwkJY2FzZSBMRUdBQ1lfQlJfQ09ERV9FTkRfT0ZfQlJBOgorCQkJZW5kX2RhdGEgPSBOVUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlib290cmVjID0gKHN0cnVjdCBib290cmVjICopJmJvb3RyZWMtPmRhdGFbbGVuXTsKKwl9CisKKwlpZiAoZndfdmVyc2lvbikKKwkJcHJpbnRrKEtFUk5fSU5GTyAicDU0OiBGVyByZXYgJXMgLSBTb2Z0bWFjIHByb3RvY29sICV4LiV4XG4iLAorCQkJZndfdmVyc2lvbiwgcHJpdi0+ZndfdmFyID4+IDgsIHByaXYtPmZ3X3ZhciAmIDB4ZmYpOworCisJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDMwMCkgeworCQkvKiBGaXJtd2FyZSBzdXBwb3J0cyBRb1MsIHVzZSBpdCEgKi8KKwkJcHJpdi0+dHhfc3RhdHMuZGF0YVswXS5saW1pdCA9IDM7CisJCXByaXYtPnR4X3N0YXRzLmRhdGFbMV0ubGltaXQgPSA0OworCQlwcml2LT50eF9zdGF0cy5kYXRhWzJdLmxpbWl0ID0gMzsKKwkJcHJpdi0+dHhfc3RhdHMuZGF0YVszXS5saW1pdCA9IDE7CisJCWRldi0+cXVldWVzID0gNDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZmlybXdhcmUpOworCitzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjBfdG9fcmV2MShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgIHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEgKnJldjE7CisJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwICpyZXYwOworCXNpemVfdCBjZF9sZW4gPSBzaXplb2YoKmN1cnZlX2RhdGEpICsKKwkJKGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCpzaXplb2YoKnJldjEpICsgMikgKgorCQkgY3VydmVfZGF0YS0+Y2hhbm5lbHM7CisJdW5zaWduZWQgaW50IGksIGo7CisJdm9pZCAqc291cmNlLCAqdGFyZ2V0OworCisJcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2MoY2RfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOworCXNvdXJjZSA9IGN1cnZlX2RhdGEtPmRhdGE7CisJdGFyZ2V0ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgeworCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7CisJCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKKwkJKigoX19sZTE2ICopdGFyZ2V0KSA9ICpmcmVxOworCQl0YXJnZXQgKz0gc2l6ZW9mKF9fbGUxNik7CisJCWZvciAoaiA9IDA7IGogPCBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7IGorKykgeworCQkJcmV2MSA9IHRhcmdldDsKKwkJCXJldjAgPSBzb3VyY2U7CisKKwkJCXJldjEtPnJmX3Bvd2VyID0gcmV2MC0+cmZfcG93ZXI7CisJCQlyZXYxLT5wYV9kZXRlY3RvciA9IHJldjAtPnBhX2RldGVjdG9yOworCQkJcmV2MS0+ZGF0YV82NHFhbSA9IHJldjAtPnBjdjsKKwkJCS8qICJpbnZlbnQiIHRoZSBwb2ludHMgZm9yIHRoZSBvdGhlciBtb2R1bGF0aW9ucyAqLworI2RlZmluZSBTVUIoeCx5KSAodTgpKCh4KSAtICh5KSkgPiAoeCkgPyAwIDogKHgpIC0gKHkpCisJCQlyZXYxLT5kYXRhXzE2cWFtID0gU1VCKHJldjAtPnBjdiwgMTIpOworCQkJcmV2MS0+ZGF0YV9xcHNrICA9IFNVQihyZXYxLT5kYXRhXzE2cWFtLCAxMik7CisJCQlyZXYxLT5kYXRhX2Jwc2sgID0gU1VCKHJldjEtPmRhdGFfcXBzaywgMTIpOworCQkJcmV2MS0+ZGF0YV9iYXJrZXI9IFNVQihyZXYxLT5kYXRhX2Jwc2ssIDE0KTsKKyN1bmRlZiBTVUIKKwkJCXRhcmdldCArPSBzaXplb2YoKnJldjEpOworCQkJc291cmNlICs9IHNpemVvZigqcmV2MCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqd3JhcCA9IE5VTEw7CisJc3RydWN0IHBkYV9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgaW50IGRhdGFfbGVuLCBlbnRyeV9sZW47CisJdm9pZCAqdG1wOworCWludCBlcnI7CisJdTggKmVuZCA9ICh1OCAqKWVlcHJvbSArIGxlbjsKKworCXdyYXAgPSAoc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqKSBlZXByb207CisJZW50cnkgPSAodm9pZCAqKXdyYXAtPmRhdGEgKyBsZTE2X3RvX2NwdSh3cmFwLT5sZW4pOworCisJLyogdmVyaWZ5IHRoYXQgYXQgbGVhc3QgdGhlIGVudHJ5IGxlbmd0aC9jb2RlIGZpdHMgKi8KKwl3aGlsZSAoKHU4ICopZW50cnkgPD0gZW5kIC0gc2l6ZW9mKCplbnRyeSkpIHsKKwkJZW50cnlfbGVuID0gbGUxNl90b19jcHUoZW50cnktPmxlbik7CisJCWRhdGFfbGVuID0gKChlbnRyeV9sZW4gLSAxKSA8PCAxKTsKKworCQkvKiBhYm9ydCBpZiBlbnRyeSBleGNlZWRzIHdob2xlIHN0cnVjdHVyZSAqLworCQlpZiAoKHU4ICopZW50cnkgKyBzaXplb2YoKmVudHJ5KSArIGRhdGFfbGVuID4gZW5kKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpIHsKKwkJY2FzZSBQRFJfTUFDX0FERFJFU1M6CisJCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIGVudHJ5LT5kYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUzoKKwkJCWlmIChkYXRhX2xlbiA8IDIpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyOworCQkJfQorCisJCQlpZiAoMiArIGVudHJ5LT5kYXRhWzFdKnNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSA+IGRhdGFfbGVuKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhlbnRyeS0+ZGF0YVsxXSAqCisJCQkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyOworCQkJfQorCisJCQltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LCAmZW50cnktPmRhdGFbMl0sCisJCQkgICAgICAgZW50cnktPmRhdGFbMV0qc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpKTsKKwkJCXByaXYtPm91dHB1dF9saW1pdF9sZW4gPSBlbnRyeS0+ZGF0YVsxXTsKKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQToKKwkJCWlmIChkYXRhX2xlbiA8IHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEpKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJaWYgKCgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopZW50cnktPmRhdGEpLT5jYWxfbWV0aG9kX3JldikgeworCQkJCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKGRhdGFfbGVuLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoIXByaXYtPmN1cnZlX2RhdGEpIHsKKwkJCQkJZXJyID0gLUVOT01FTTsKKwkJCQkJZ290byBlcnI7CisJCQkJfQorCisJCQkJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CisJCQl9IGVsc2UgeworCQkJCWVyciA9IHA1NF9jb252ZXJ0X3JldjBfdG9fcmV2MShkZXYsIChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKillbnRyeS0+ZGF0YSk7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT046CisJCQlwcml2LT5pcV9hdXRvY2FsID0ga21hbGxvYyhkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXByaXYtPmlxX2F1dG9jYWwpIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyOworCQkJfQorCisJCQltZW1jcHkocHJpdi0+aXFfYXV0b2NhbCwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKKwkJCXByaXYtPmlxX2F1dG9jYWxfbGVuID0gZGF0YV9sZW4gLyBzaXplb2Yoc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5KTsKKwkJCWJyZWFrOworCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKKwkJCXRtcCA9IGVudHJ5LT5kYXRhOworCQkJd2hpbGUgKCh1OCAqKXRtcCA8IGVudHJ5LT5kYXRhICsgZGF0YV9sZW4pIHsKKwkJCQlzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKmV4cF9pZiA9IHRtcDsKKwkJCQlpZiAobGUxNl90b19jcHUoZXhwX2lmLT5pZl9pZCkgPT0gMHhGKQorCQkJCQlwcml2LT5yeGh3ID0gZXhwX2lmLT52YXJpYW50ICYgY3B1X3RvX2xlMTYoMHgwNyk7CisJCQkJdG1wICs9IHNpemVvZihzdHJ1Y3QgYm9vdHJlY19leHBfaWYpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRDoKKwkJCXByaXYtPnZlcnNpb24gPSAqKHU4ICopKGVudHJ5LT5kYXRhICsgMSk7CisJCQlicmVhazsKKwkJY2FzZSBQRFJfRU5EOgorCQkJLyogbWFrZSBpdCBvdmVycnVuICovCisJCQllbnRyeV9sZW4gPSBsZW47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0lORk8gInA1NDogdW5rbm93biBlZXByb20gY29kZSA6IDB4JXhcbiIsCisJCQkJbGUxNl90b19jcHUoZW50cnktPmNvZGUpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZW50cnkgPSAodm9pZCAqKWVudHJ5ICsgKGVudHJ5X2xlbiArIDEpKjI7CisJfQorCisJaWYgKCFwcml2LT5pcV9hdXRvY2FsIHx8ICFwcml2LT5vdXRwdXRfbGltaXQgfHwgIXByaXYtPmN1cnZlX2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwNTQ6IG5vdCBhbGwgcmVxdWlyZWQgZW50cmllcyBmb3VuZCBpbiBlZXByb20hXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKKyAgZXJyOgorCWlmIChwcml2LT5pcV9hdXRvY2FsKSB7CisJCWtmcmVlKHByaXYtPmlxX2F1dG9jYWwpOworCQlwcml2LT5pcV9hdXRvY2FsID0gTlVMTDsKKwl9CisKKwlpZiAocHJpdi0+b3V0cHV0X2xpbWl0KSB7CisJCWtmcmVlKHByaXYtPm91dHB1dF9saW1pdCk7CisJCXByaXYtPm91dHB1dF9saW1pdCA9IE5VTEw7CisJfQorCisJaWYgKHByaXYtPmN1cnZlX2RhdGEpIHsKKwkJa2ZyZWUocHJpdi0+Y3VydmVfZGF0YSk7CisJCXByaXYtPmN1cnZlX2RhdGEgPSBOVUxMOworCX0KKworCXByaW50ayhLRVJOX0VSUiAicDU0OiBlZXByb20gcGFyc2UgZmFpbGVkIVxuIik7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOworCit2b2lkIHA1NF9maWxsX2VlcHJvbV9yZWFkYmFjayhzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpoZHIpCit7CisJc3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjsKKworCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHg4MDAwKTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqZWVwcm9tX2hkcikgKyAweDIwMDApOworCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLKTsKKwloZHItPnJldHJ5MSA9IGhkci0+cmV0cnkyID0gMDsKKwllZXByb21faGRyID0gKHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKikgaGRyLT5kYXRhOworCWVlcHJvbV9oZHItPm9mZnNldCA9IDB4MDsKKwllZXByb21faGRyLT5sZW4gPSBjcHVfdG9fbGUxNigweDIwMDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X2ZpbGxfZWVwcm9tX3JlYWRiYWNrKTsKKworc3RhdGljIHZvaWQgcDU0X3J4X2RhdGEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfcnhfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9yeF9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1cyA9IHswfTsKKwl1MTYgZnJlcSA9IGxlMTZfdG9fY3B1KGhkci0+ZnJlcSk7CisKKwlyeF9zdGF0dXMuc3NpID0gaGRyLT5yc3NpOworCS8qIFhYIGNvcnJlY3Q/ICovCisJcnhfc3RhdHVzLnJhdGVfaWR4ID0gaGRyLT5yYXRlICYgMHhmOworCXJ4X3N0YXR1cy5mcmVxID0gZnJlcTsKKwlyeF9zdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJcnhfc3RhdHVzLmFudGVubmEgPSBoZHItPmFudGVubmE7CisJcnhfc3RhdHVzLm1hY3RpbWUgPSBsZTY0X3RvX2NwdShoZHItPnRpbWVzdGFtcCk7CisJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19UU0ZUOworCisJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikpOworCXNrYl90cmltKHNrYiwgbGUxNl90b19jcHUoaGRyLT5sZW4pKTsKKworCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiLCAmcnhfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHA1NF93YWtlX2ZyZWVfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgaTsKKworCS8qIGllZWU4MDIxMV9zdGFydF9xdWV1ZXMgaXMgZ3JlYXQgaWYgYWxsIHF1ZXVlcyBhcmUgcmVhbGx5IGVtcHR5LgorCSAqIEJ1dCwgd2hhdCBpZiBzb21lIGFyZSBmdWxsPyAqLworCisJZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVzOyBpKyspCisJCWlmIChwcml2LT50eF9zdGF0cy5kYXRhW2ldLmxlbiA8IHByaXYtPnR4X3N0YXRzLmRhdGFbaV0ubGltaXQpCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYsIGkpOworfQorCitzdGF0aWMgdm9pZCBwNTRfcnhfZnJhbWVfc2VudChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyID0gKHN0cnVjdCBwNTRfY29udHJvbF9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBwNTRfZnJhbWVfc2VudF9oZHIgKnBheWxvYWQgPSAoc3RydWN0IHA1NF9mcmFtZV9zZW50X2hkciAqKSBoZHItPmRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKmVudHJ5ID0gKHN0cnVjdCBza19idWZmICopIHByaXYtPnR4X3F1ZXVlLm5leHQ7CisJdTMyIGFkZHIgPSBsZTMyX3RvX2NwdShoZHItPnJlcV9pZCkgLSAweDcwOworCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlID0gTlVMTDsKKwl1MzIgZnJlZWQgPSAwOworCXUzMiBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKKworCXdoaWxlIChlbnRyeSAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKKwkJcmFuZ2UgPSAoc3RydWN0IG1lbXJlY29yZCAqKSZlbnRyeS0+Y2I7CisJCWlmIChyYW5nZS0+c3RhcnRfYWRkciA9PSBhZGRyKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXM7CisJCQlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICplbnRyeV9oZHI7CisJCQlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfYWxsb2NkYXRhICplbnRyeV9kYXRhOworCQkJaW50IHBhZCA9IDA7CisKKwkJCWlmIChlbnRyeS0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpCisJCQkJZnJlZWQgPSAoKHN0cnVjdCBtZW1yZWNvcmQgKikmZW50cnktPm5leHQtPmNiKS0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKKwkJCWVsc2UKKwkJCQlmcmVlZCA9IHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcjsKKworCQkJbGFzdF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOworCQkJX19za2JfdW5saW5rKGVudHJ5LCAmcHJpdi0+dHhfcXVldWUpOworCQkJaWYgKCFyYW5nZS0+Y29udHJvbCkgeworCQkJCWtmcmVlX3NrYihlbnRyeSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZW1zZXQoJnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOworCQkJbWVtY3B5KCZzdGF0dXMuY29udHJvbCwgcmFuZ2UtPmNvbnRyb2wsCisJCQkgICAgICAgc2l6ZW9mKHN0YXR1cy5jb250cm9sKSk7CisJCQlrZnJlZShyYW5nZS0+Y29udHJvbCk7CisJCQlwcml2LT50eF9zdGF0cy5kYXRhW3N0YXR1cy5jb250cm9sLnF1ZXVlXS5sZW4tLTsKKworCQkJZW50cnlfaGRyID0gKHN0cnVjdCBwNTRfY29udHJvbF9oZHIgKikgZW50cnktPmRhdGE7CisJCQllbnRyeV9kYXRhID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF9hbGxvY2RhdGEgKikgZW50cnlfaGRyLT5kYXRhOworCQkJaWYgKChlbnRyeV9oZHItPm1hZ2ljMSAmIGNwdV90b19sZTE2KDB4NDAwMCkpICE9IDApCisJCQkJcGFkID0gZW50cnlfZGF0YS0+YWxpZ25bMF07CisKKwkJCWlmICghKHN0YXR1cy5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX05PX0FDSykpIHsKKwkJCQlpZiAoIShwYXlsb2FkLT5zdGF0dXMgJiAweDAxKSkKKwkJCQkJc3RhdHVzLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLOworCQkJCWVsc2UKKwkJCQkJc3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsKKwkJCX0KKwkJCXN0YXR1cy5yZXRyeV9jb3VudCA9IHBheWxvYWQtPnJldHJpZXMgLSAxOworCQkJc3RhdHVzLmFja19zaWduYWwgPSBsZTE2X3RvX2NwdShwYXlsb2FkLT5hY2tfcnNzaSk7CisJCQlza2JfcHVsbChlbnRyeSwgc2l6ZW9mKCpoZHIpICsgcGFkICsgc2l6ZW9mKCplbnRyeV9kYXRhKSk7CisJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LCBlbnRyeSwgJnN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlsYXN0X2FkZHIgPSByYW5nZS0+ZW5kX2FkZHI7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorCisJaWYgKGZyZWVkID49IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRCArIDB4MTcwICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfY29udHJvbF9oZHIpKQorCQlwNTRfd2FrZV9mcmVlX3F1ZXVlcyhkZXYpOworfQorCitzdGF0aWMgdm9pZCBwNTRfcnhfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyID0gKHN0cnVjdCBwNTRfY29udHJvbF9oZHIgKikgc2tiLT5kYXRhOworCisJc3dpdGNoIChsZTE2X3RvX2NwdShoZHItPnR5cGUpKSB7CisJY2FzZSBQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORToKKwkJcDU0X3J4X2ZyYW1lX3NlbnQoZGV2LCBza2IpOworCQlicmVhazsKKwljYXNlIFA1NF9DT05UUk9MX1RZUEVfQkJQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vdCBoYW5kbGluZyAweCUwMnggdHlwZSBjb250cm9sIGZyYW1lXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGUxNl90b19jcHUoaGRyLT50eXBlKSk7CisJCWJyZWFrOworCX0KK30KKworLyogcmV0dXJucyB6ZXJvIGlmIHNrYiBjYW4gYmUgcmV1c2VkICovCitpbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1OCB0eXBlID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopc2tiLT5kYXRhKSkgPj4gODsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDB4MDA6CisJY2FzZSAweDAxOgorCQlwNTRfcnhfZGF0YShkZXYsIHNrYik7CisJCXJldHVybiAtMTsKKwljYXNlIDB4NGQ6CisJCS8qIFRPRE86IGRvIHNvbWV0aGluZyBiZXR0ZXIuLi4gYnV0IHRoZW4gYWdhaW4sIEkndmUgbmV2ZXIgc2VlbiB0aGlzIGhhcHBlbiAqLworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZWNlaXZlZCBmYXVsdC4gUHJvYmFibHkgbmVlZCB0byByZXN0YXJ0IGhhcmR3YXJlIG5vdy4uXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCWJyZWFrOworCWNhc2UgMHg4MDoKKwkJcDU0X3J4X2NvbnRyb2woZGV2LCBza2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGZyYW1lIFJYZWQgKDB4JTAyeClcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCB0eXBlKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3J4KTsKKworLyoKKyAqIFNvLCB0aGUgZmlybXdhcmUgaXMgc29tZXdoYXQgc3R1cGlkIGFuZCBkb2Vzbid0IGtub3cgd2hhdCBwbGFjZXMgaW4gaXRzCisgKiBtZW1vcnkgaW5jb21pbmcgZGF0YSBzaG91bGQgZ28gdG8uIEJ5IHBva2luZyBhcm91bmQgaW4gdGhlIGZpcm13YXJlLCB3ZQorICogY2FuIGZpbmQgc29tZSB1bnVzZWQgbWVtb3J5IHRvIHVwbG9hZCBvdXIgcGFja2V0cyB0by4gSG93ZXZlciwgZGF0YSB0aGF0IHdlCisgKiB3YW50IHRoZSBjYXJkIHRvIFRYIG5lZWRzIHRvIHN0YXkgaW50YWN0IHVudGlsIHRoZSBjYXJkIGhhcyB0b2xkIHVzIHRoYXQKKyAqIGl0IGlzIGRvbmUgd2l0aCBpdC4gVGhpcyBmdW5jdGlvbiBmaW5kcyBlbXB0eSBwbGFjZXMgd2UgY2FuIHVwbG9hZCB0byBhbmQKKyAqIG1hcmtzIGFsbG9jYXRlZCBhcmVhcyBhcyByZXNlcnZlZCBpZiBuZWNlc3NhcnkuIHA1NF9yeF9mcmFtZV9zZW50IGZyZWVzCisgKiBhbGxvY2F0ZWQgYXJlYXMuCisgKi8KK3N0YXRpYyB2b2lkIHA1NF9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgc3RydWN0IHA1NF9jb250cm9sX2hkciAqZGF0YSwgdTMyIGxlbiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHNrX2J1ZmYgKmVudHJ5ID0gcHJpdi0+dHhfcXVldWUubmV4dDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdGFyZ2V0X3NrYiA9IE5VTEw7CisJc3RydWN0IG1lbXJlY29yZCAqcmFuZ2U7CisJdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OworCXUzMiBsYXJnZXN0X2hvbGUgPSAwOworCXUzMiB0YXJnZXRfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGxlZnQ7CisJbGVuID0gKGxlbiArIDB4MTcwICsgMykgJiB+MHgzOyAvKiAweDcwIGhlYWRyb29tLCAweDEwMCB0YWlscm9vbSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwlsZWZ0ID0gc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfcXVldWUpOworCXdoaWxlIChsZWZ0LS0pIHsKKwkJdTMyIGhvbGVfc2l6ZTsKKwkJcmFuZ2UgPSAoc3RydWN0IG1lbXJlY29yZCAqKSZlbnRyeS0+Y2I7CisJCWhvbGVfc2l6ZSA9IHJhbmdlLT5zdGFydF9hZGRyIC0gbGFzdF9hZGRyOworCQlpZiAoIXRhcmdldF9za2IgJiYgaG9sZV9zaXplID49IGxlbikgeworCQkJdGFyZ2V0X3NrYiA9IGVudHJ5LT5wcmV2OworCQkJaG9sZV9zaXplIC09IGxlbjsKKwkJCXRhcmdldF9hZGRyID0gbGFzdF9hZGRyOworCQl9CisJCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIGhvbGVfc2l6ZSk7CisJCWxhc3RfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl9CisJaWYgKCF0YXJnZXRfc2tiICYmIHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkciA+PSBsZW4pIHsKKwkJdGFyZ2V0X3NrYiA9IHByaXYtPnR4X3F1ZXVlLnByZXY7CisJCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkciAtIGxlbik7CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwcml2LT50eF9xdWV1ZSkpIHsKKwkJCXJhbmdlID0gKHN0cnVjdCBtZW1yZWNvcmQgKikmdGFyZ2V0X3NrYi0+Y2I7CisJCQl0YXJnZXRfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKKwkJfQorCX0gZWxzZQorCQlsYXJnZXN0X2hvbGUgPSBtYXgobGFyZ2VzdF9ob2xlLCBwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHIpOworCisJaWYgKHNrYikgeworCQlyYW5nZSA9IChzdHJ1Y3QgbWVtcmVjb3JkICopJnNrYi0+Y2I7CisJCXJhbmdlLT5zdGFydF9hZGRyID0gdGFyZ2V0X2FkZHI7CisJCXJhbmdlLT5lbmRfYWRkciA9IHRhcmdldF9hZGRyICsgbGVuOworCQlyYW5nZS0+Y29udHJvbCA9IGNvbnRyb2w7CisJCV9fc2tiX3F1ZXVlX2FmdGVyKCZwcml2LT50eF9xdWV1ZSwgdGFyZ2V0X3NrYiwgc2tiKTsKKwkJaWYgKGxhcmdlc3RfaG9sZSA8IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRCArIDB4MTcwICsKKwkJCQkgICBzaXplb2Yoc3RydWN0IHA1NF9jb250cm9sX2hkcikpCisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoZGV2KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOworCisJZGF0YS0+cmVxX2lkID0gY3B1X3RvX2xlMzIodGFyZ2V0X2FkZHIgKyAweDcwKTsKK30KKworc3RhdGljIGludCBwNTRfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzX2RhdGEgKmN1cnJlbnRfcXVldWU7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyOworCXN0cnVjdCBwNTRfdHhfY29udHJvbF9hbGxvY2RhdGEgKnR4aGRyOworCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbF9jb3B5OworCXNpemVfdCBwYWRkaW5nLCBsZW47CisJdTggcmF0ZTsKKworCWN1cnJlbnRfcXVldWUgPSAmcHJpdi0+dHhfc3RhdHMuZGF0YVtjb250cm9sLT5xdWV1ZV07CisJaWYgKHVubGlrZWx5KGN1cnJlbnRfcXVldWUtPmxlbiA+IGN1cnJlbnRfcXVldWUtPmxpbWl0KSkKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCWN1cnJlbnRfcXVldWUtPmxlbisrOworCWN1cnJlbnRfcXVldWUtPmNvdW50Kys7CisJaWYgKGN1cnJlbnRfcXVldWUtPmxlbiA9PSBjdXJyZW50X3F1ZXVlLT5saW1pdCkKKwkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LCBjb250cm9sLT5xdWV1ZSk7CisKKwlwYWRkaW5nID0gKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSAtIChzaXplb2YoKmhkcikgKyBzaXplb2YoKnR4aGRyKSkpICYgMzsKKwlsZW4gPSBza2ItPmxlbjsKKworCWNvbnRyb2xfY29weSA9IGttYWxsb2Moc2l6ZW9mKCpjb250cm9sKSwgR0ZQX0FUT01JQyk7CisJaWYgKGNvbnRyb2xfY29weSkKKwkJbWVtY3B5KGNvbnRyb2xfY29weSwgY29udHJvbCwgc2l6ZW9mKCpjb250cm9sKSk7CisKKwl0eGhkciA9IChzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfYWxsb2NkYXRhICopCisJCQlza2JfcHVzaChza2IsIHNpemVvZigqdHhoZHIpICsgcGFkZGluZyk7CisJaGRyID0gKHN0cnVjdCBwNTRfY29udHJvbF9oZHIgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpOworCisJaWYgKHBhZGRpbmcpCisJCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHg0MDEwKTsKKwllbHNlCisJCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHgwMDEwKTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJaGRyLT50eXBlID0gKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX05PX0FDSykgPyAwIDogY3B1X3RvX2xlMTYoMSk7CisJaGRyLT5yZXRyeTEgPSBoZHItPnJldHJ5MiA9IGNvbnRyb2wtPnJldHJ5X2xpbWl0OworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBza2ItPmxlbiwgY29udHJvbF9jb3B5KTsKKworCW1lbXNldCh0eGhkci0+d2VwX2tleSwgMHgwLCAxNik7CisJdHhoZHItPnBhZGRpbmcgPSAwOworCXR4aGRyLT5wYWRkaW5nMiA9IDA7CisKKwkvKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgYWx0ZXJuYXRlIHJldHJ5IFRYIHJhdGVzICovCisJcmF0ZSA9IGNvbnRyb2wtPnR4X3JhdGUtPmh3X3ZhbHVlOworCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TSE9SVF9QUkVBTUJMRSkKKwkJcmF0ZSB8PSAweDEwOworCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykKKwkJcmF0ZSB8PSAweDQwOworCWVsc2UgaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKKwkJcmF0ZSB8PSAweDIwOworCW1lbXNldCh0eGhkci0+cmF0ZXNldCwgcmF0ZSwgOCk7CisJdHhoZHItPndlcF9rZXlfcHJlc2VudCA9IDA7CisJdHhoZHItPndlcF9rZXlfbGVuID0gMDsKKwl0eGhkci0+ZnJhbWVfdHlwZSA9IGNwdV90b19sZTMyKGNvbnRyb2wtPnF1ZXVlICsgNCk7CisJdHhoZHItPm1hZ2ljNCA9IDA7CisJdHhoZHItPmFudGVubmEgPSAoY29udHJvbC0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPworCQkyIDogY29udHJvbC0+YW50ZW5uYV9zZWxfdHggLSAxOworCXR4aGRyLT5vdXRwdXRfcG93ZXIgPSAweDdmOyAvLyBIVyBNYXhpbXVtCisJdHhoZHItPm1hZ2ljNSA9IChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9OT19BQ0spID8KKwkJMCA6ICgocmF0ZSA+IDB4MykgPyBjcHVfdG9fbGUzMigweDMzKSA6IGNwdV90b19sZTMyKDB4MjMpKTsKKwlpZiAocGFkZGluZykKKwkJdHhoZHItPmFsaWduWzBdID0gcGFkZGluZzsKKworCXByaXYtPnR4KGRldiwgaGRyLCBza2ItPmxlbiwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3NldF9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgZmlsdGVyX3R5cGUsCisJCQkgIGNvbnN0IHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHU4IGFudGVubmEsCisJCQkgIHUzMiBtYWdpYzMsIHUzMiBtYWdpYzgsIHUzMiBtYWdpYzkpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyOworCXN0cnVjdCBwNTRfdHhfY29udHJvbF9maWx0ZXIgKmZpbHRlcjsKKworCWhkciA9IGt6YWxsb2Moc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpmaWx0ZXIpICsKKwkJICAgICAgcHJpdi0+dHhfaGRyX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFoZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRyID0gKHZvaWQgKiloZHIgKyBwcml2LT50eF9oZHJfbGVuOworCisJZmlsdGVyID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF9maWx0ZXIgKikgaGRyLT5kYXRhOworCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHg4MDAxKTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqZmlsdGVyKSk7CisJcDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgTlVMTCwgaGRyLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKmZpbHRlciksIE5VTEwpOworCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KFA1NF9DT05UUk9MX1RZUEVfRklMVEVSX1NFVCk7CisKKwlmaWx0ZXItPmZpbHRlcl90eXBlID0gY3B1X3RvX2xlMTYoZmlsdGVyX3R5cGUpOworCW1lbWNweShmaWx0ZXItPmRzdCwgZHN0LCBFVEhfQUxFTik7CisJaWYgKCFzcmMpCisJCW1lbXNldChmaWx0ZXItPnNyYywgfjAsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbWNweShmaWx0ZXItPnNyYywgc3JjLCBFVEhfQUxFTik7CisJZmlsdGVyLT5hbnRlbm5hID0gYW50ZW5uYTsKKwlmaWx0ZXItPm1hZ2ljMyA9IGNwdV90b19sZTMyKG1hZ2ljMyk7CisJZmlsdGVyLT5yeF9hZGRyID0gY3B1X3RvX2xlMzIocHJpdi0+cnhfZW5kKTsKKwlmaWx0ZXItPm1heF9yeCA9IGNwdV90b19sZTE2KDB4MDYyMCk7CS8qIEZJWE1FOiBmb3IgdXNiIHZlciAxLi4gbWF5YmUgKi8KKwlmaWx0ZXItPnJ4aHcgPSBwcml2LT5yeGh3OworCWZpbHRlci0+bWFnaWM4ID0gY3B1X3RvX2xlMTYobWFnaWM4KTsKKwlmaWx0ZXItPm1hZ2ljOSA9IGNwdV90b19sZTE2KG1hZ2ljOSk7CisKKwlwcml2LT50eChkZXYsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpmaWx0ZXIpLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTRfc2V0X2ZyZXEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBfX2xlMTYgZnJlcSkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpoZHI7CisJc3RydWN0IHA1NF90eF9jb250cm9sX2NoYW5uZWwgKmNoYW47CisJdW5zaWduZWQgaW50IGk7CisJc2l6ZV90IHBheWxvYWRfbGVuID0gc2l6ZW9mKCpjaGFuKSArIHNpemVvZih1MzIpKjIgKworCQkJICAgICBzaXplb2YoKmNoYW4tPmN1cnZlX2RhdGEpICoKKwkJCSAgICAgcHJpdi0+Y3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCXZvaWQgKmVudHJ5OworCisJaGRyID0ga3phbGxvYyhzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbiArCisJCSAgICAgIHByaXYtPnR4X2hkcl9sZW4sIEdGUF9LRVJORUwpOworCWlmICghaGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhkciA9ICh2b2lkICopaGRyICsgcHJpdi0+dHhfaGRyX2xlbjsKKworCWNoYW4gPSAoc3RydWN0IHA1NF90eF9jb250cm9sX2NoYW5uZWwgKikgaGRyLT5kYXRhOworCisJaGRyLT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDgwMDEpOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjaGFuKSk7CisJaGRyLT50eXBlID0gY3B1X3RvX2xlMTYoUDU0X0NPTlRST0xfVFlQRV9DSEFOTkVMX0NIQU5HRSk7CisJcDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgTlVMTCwgaGRyLCBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbiwgTlVMTCk7CisKKwljaGFuLT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDEpOworCWNoYW4tPm1hZ2ljMiA9IGNwdV90b19sZTE2KDB4MCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+aXFfYXV0b2NhbF9sZW47IGkrKykgeworCQlpZiAocHJpdi0+aXFfYXV0b2NhbFtpXS5mcmVxICE9IGZyZXEpCisJCQljb250aW51ZTsKKworCQltZW1jcHkoJmNoYW4tPmlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLAorCQkgICAgICAgc2l6ZW9mKCpwcml2LT5pcV9hdXRvY2FsKSk7CisJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBwcml2LT5pcV9hdXRvY2FsX2xlbikKKwkJZ290byBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+b3V0cHV0X2xpbWl0X2xlbjsgaSsrKSB7CisJCWlmIChwcml2LT5vdXRwdXRfbGltaXRbaV0uZnJlcSAhPSBmcmVxKQorCQkJY29udGludWU7CisKKwkJY2hhbi0+dmFsX2JhcmtlciA9IDB4Mzg7CisJCWNoYW4tPnZhbF9icHNrID0gcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF9icHNrOworCQljaGFuLT52YWxfcXBzayA9IHByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfcXBzazsKKwkJY2hhbi0+dmFsXzE2cWFtID0gcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF8xNnFhbTsKKwkJY2hhbi0+dmFsXzY0cWFtID0gcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF82NHFhbTsKKwkJYnJlYWs7CisJfQorCWlmIChpID09IHByaXYtPm91dHB1dF9saW1pdF9sZW4pCisJCWdvdG8gZXJyOworCisJY2hhbi0+cGFfcG9pbnRzX3Blcl9jdXJ2ZSA9IHByaXYtPmN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKworCWVudHJ5ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgeworCQlpZiAoKigoX19sZTE2ICopZW50cnkpICE9IGZyZXEpIHsKKwkJCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOworCQkJZW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSkgKgorCQkJCSBjaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlOworCQkJY29udGludWU7CisJCX0KKworCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKKwkJbWVtY3B5KGNoYW4tPmN1cnZlX2RhdGEsIGVudHJ5LCBzaXplb2YoKmNoYW4tPmN1cnZlX2RhdGEpICoKKwkJICAgICAgIGNoYW4tPnBhX3BvaW50c19wZXJfY3VydmUpOworCQlicmVhazsKKwl9CisKKwltZW1jcHkoaGRyLT5kYXRhICsgcGF5bG9hZF9sZW4gLSA0LCAmY2hhbi0+dmFsX2Jwc2ssIDQpOworCisJcHJpdi0+dHgoZGV2LCBoZHIsIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuLCAxKTsKKwlyZXR1cm4gMDsKKworIGVycjoKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBmcmVxdWVuY3kgY2hhbmdlIGZhaWxlZFxuIiwgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJa2ZyZWUoaGRyKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBwNTRfc2V0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgbW9kZSwgaW50IGxpbmssIGludCBhY3QpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyOworCXN0cnVjdCBwNTRfdHhfY29udHJvbF9sZWQgKmxlZDsKKworCWhkciA9IGt6YWxsb2Moc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpsZWQpICsKKwkJICAgICAgcHJpdi0+dHhfaGRyX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRyID0gKHZvaWQgKiloZHIgKyBwcml2LT50eF9oZHJfbGVuOworCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHg4MDAxKTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqbGVkKSk7CisJaGRyLT50eXBlID0gY3B1X3RvX2xlMTYoUDU0X0NPTlRST0xfVFlQRV9MRUQpOworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpsZWQpLCBOVUxMKTsKKworCWxlZCA9IChzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfbGVkICopIGhkci0+ZGF0YTsKKwlsZWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKwlsZWQtPmxlZF9wZXJtYW5lbnQgPSBjcHVfdG9fbGUxNihsaW5rKTsKKwlsZWQtPmxlZF90ZW1wb3JhcnkgPSBjcHVfdG9fbGUxNihhY3QpOworCWxlZC0+ZHVyYXRpb24gPSBjcHVfdG9fbGUxNigxMDAwKTsKKworCXByaXYtPnR4KGRldiwgaGRyLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKmxlZCksIDEpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUDU0X1NFVF9RVUVVRShxdWV1ZSwgYWlfZnMsIGN3X21pbiwgY3dfbWF4LCBfdHhvcCkJXAorZG8gewkgCQkJCQkJCVwKKwlxdWV1ZS5haWZzID0gY3B1X3RvX2xlMTYoYWlfZnMpOwkJCVwKKwlxdWV1ZS5jd21pbiA9IGNwdV90b19sZTE2KGN3X21pbik7CQkJXAorCXF1ZXVlLmN3bWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsJCQlcCisJcXVldWUudHhvcCA9IGNwdV90b19sZTE2KF90eG9wKTsJCQlcCit9IHdoaWxlKDApCisKK3N0YXRpYyB2b2lkIHA1NF9pbml0X3ZkY2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBwNTRfY29udHJvbF9oZHIgKmhkcjsKKwlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfdmRjZiAqdmRjZjsKKworCS8qIGFsbCBVU0IgVjEgYWRhcHRlcnMgbmVlZCBhIGV4dHJhIGhlYWRyb29tICovCisJaGRyID0gKHZvaWQgKilwcml2LT5jYWNoZWRfdmRjZiArIHByaXYtPnR4X2hkcl9sZW47CisJaGRyLT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDgwMDEpOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCp2ZGNmKSk7CisJaGRyLT50eXBlID0gY3B1X3RvX2xlMTYoUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklUKTsKKwloZHItPnJlcV9pZCA9IGNwdV90b19sZTMyKHByaXYtPnJ4X3N0YXJ0KTsKKworCXZkY2YgPSAoc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YgKikgaGRyLT5kYXRhOworCisJUDU0X1NFVF9RVUVVRSh2ZGNmLT5xdWV1ZVswXSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNywgNDcpOworCVA1NF9TRVRfUVVFVUUodmRjZi0+cXVldWVbMV0sIDB4MDAwMiwgMHgwMDA3LCAweDAwMGYsIDk0KTsKKwlQNTRfU0VUX1FVRVVFKHZkY2YtPnF1ZXVlWzJdLCAweDAwMDMsIDB4MDAwZiwgMHgwM2ZmLCAwKTsKKwlQNTRfU0VUX1FVRVVFKHZkY2YtPnF1ZXVlWzNdLCAweDAwMDcsIDB4MDAwZiwgMHgwM2ZmLCAwKTsKK30KKworc3RhdGljIHZvaWQgcDU0X3NldF92ZGNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpoZHI7CisJc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YgKnZkY2Y7CisKKwloZHIgPSAodm9pZCAqKXByaXYtPmNhY2hlZF92ZGNmICsgcHJpdi0+dHhfaGRyX2xlbjsKKworCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp2ZGNmKSwgTlVMTCk7CisKKwl2ZGNmID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF92ZGNmICopIGhkci0+ZGF0YTsKKworCWlmIChkZXYtPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUpIHsKKwkJdmRjZi0+c2xvdHRpbWUgPSA5OworCQl2ZGNmLT5tYWdpYzEgPSAweDAwOworCQl2ZGNmLT5tYWdpYzIgPSAweDEwOworCX0gZWxzZSB7CisJCXZkY2YtPnNsb3R0aW1lID0gMjA7CisJCXZkY2YtPm1hZ2ljMSA9IDB4MGE7CisJCXZkY2YtPm1hZ2ljMiA9IDB4MDY7CisJfQorCisJLyogKHNlZSBwcmlzbTU0L2lzbF9vaWQuaCBmb3IgZnVydGhlciBkZXRhaWxzKSAqLworCXZkY2YtPmZyYW1lYnVyc3QgPSBjcHVfdG9fbGUxNigwKTsKKworCXByaXYtPnR4KGRldiwgaGRyLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKnZkY2YpLCAwKTsKK30KKworc3RhdGljIGludCBwNTRfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwllcnIgPSBwcml2LT5vcGVuKGRldik7CisJaWYgKCFlcnIpCisJCXByaXYtPm1vZGUgPSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcDU0X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+dHhfcXVldWUpKSkgeworCQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZSA9IChzdHJ1Y3QgbWVtcmVjb3JkICopJnNrYi0+Y2I7CisJCWlmIChyYW5nZS0+Y29udHJvbCkKKwkJCWtmcmVlKHJhbmdlLT5jb250cm9sKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJfQorCXByaXYtPnN0b3AoZGV2KTsKKwlwcml2LT5tb2RlID0gSUVFRTgwMjExX0lGX1RZUEVfSU5WQUxJRDsKK30KKworc3RhdGljIGludCBwNTRfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKHByaXYtPm1vZGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc3dpdGNoIChjb25mLT50eXBlKSB7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CisJCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCisJcDU0X3NldF9maWx0ZXIoZGV2LCAwLCBwcml2LT5tYWNfYWRkciwgTlVMTCwgMCwgMSwgMCwgMHhGNjQyKTsKKwlwNTRfc2V0X2ZpbHRlcihkZXYsIDAsIHByaXYtPm1hY19hZGRyLCBOVUxMLCAxLCAwLCAwLCAweEY2NDIpOworCisJc3dpdGNoIChjb25mLT50eXBlKSB7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CisJCXA1NF9zZXRfZmlsdGVyKGRldiwgMSwgcHJpdi0+bWFjX2FkZHIsIE5VTEwsIDAsIDB4MTVGLCAweDFGNCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOwkvKiBpbXBvc3NpYmxlICovCisJCWJyZWFrOworCX0KKworCXA1NF9zZXRfbGVkcyhkZXYsIDEsIDAsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJcHJpdi0+bW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX01OVFI7CisJbWVtc2V0KHByaXYtPm1hY19hZGRyLCAwLCBFVEhfQUxFTik7CisJcDU0X3NldF9maWx0ZXIoZGV2LCAwLCBwcml2LT5tYWNfYWRkciwgTlVMTCwgMiwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcDU0X3NldF9mcmVxKGRldiwgY3B1X3RvX2xlMTYoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpKTsKKwlwNTRfc2V0X3ZkY2YoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHA1NF9jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCXA1NF9zZXRfZmlsdGVyKGRldiwgMCwgcHJpdi0+bWFjX2FkZHIsIGNvbmYtPmJzc2lkLCAwLCAxLCAwLCAweEY2NDIpOworCXA1NF9zZXRfZmlsdGVyKGRldiwgMCwgcHJpdi0+bWFjX2FkZHIsIGNvbmYtPmJzc2lkLCAyLCAwLCAwLCAwKTsKKwlwNTRfc2V0X2xlZHMoZGV2LCAxLCAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoY29uZi0+YnNzaWQpLCAwKTsKKwltZW1jcHkocHJpdi0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwkqdG90YWxfZmxhZ3MgJj0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCXA1NF9zZXRfZmlsdGVyKGRldiwgMCwgcHJpdi0+bWFjX2FkZHIsCisJCQkJICAgICAgIE5VTEwsIDIsIDAsIDAsIDApOworCQllbHNlCisJCQlwNTRfc2V0X2ZpbHRlcihkZXYsIDAsIHByaXYtPm1hY19hZGRyLAorCQkJCSAgICAgICBwcml2LT5ic3NpZCwgMiwgMCwgMCwgMCk7CisJfQorfQorCitzdGF0aWMgaW50IHA1NF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IHF1ZXVlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfdmRjZiAqdmRjZjsKKworCXZkY2YgPSAoc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YgKikoKChzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICopCisJCSgodm9pZCAqKXByaXYtPmNhY2hlZF92ZGNmICsgcHJpdi0+dHhfaGRyX2xlbikpLT5kYXRhKTsKKworCWlmICgocGFyYW1zKSAmJiAhKChxdWV1ZSA8IDApIHx8IChxdWV1ZSA+IDQpKSkgeworCQlQNTRfU0VUX1FVRVVFKHZkY2YtPnF1ZXVlW3F1ZXVlXSwgcGFyYW1zLT5haWZzLAorCQkJcGFyYW1zLT5jd19taW4sIHBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPnR4b3ApOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXA1NF9zZXRfdmRjZihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQoreworCS8qIFRPRE8gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTRfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnF1ZXVlczsgaSsrKQorCQltZW1jcHkoJnN0YXRzLT5kYXRhW2ldLCAmcHJpdi0+dHhfc3RhdHMuZGF0YVtpXSwKKwkJCXNpemVvZihzdGF0cy0+ZGF0YVtpXSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBwNTRfb3BzID0geworCS50eAkJCT0gcDU0X3R4LAorCS5zdGFydAkJCT0gcDU0X3N0YXJ0LAorCS5zdG9wCQkJPSBwNTRfc3RvcCwKKwkuYWRkX2ludGVyZmFjZQkJPSBwNTRfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZQk9IHA1NF9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcJCQk9IHA1NF9jb25maWcsCisJLmNvbmZpZ19pbnRlcmZhY2UJPSBwNTRfY29uZmlnX2ludGVyZmFjZSwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IHA1NF9jb25maWd1cmVfZmlsdGVyLAorCS5jb25mX3R4CQk9IHA1NF9jb25mX3R4LAorCS5nZXRfc3RhdHMJCT0gcDU0X2dldF9zdGF0cywKKwkuZ2V0X3R4X3N0YXRzCQk9IHA1NF9nZXRfdHhfc3RhdHMKK307CisKK3N0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXY7CisKKwlkZXYgPSBpZWVlODAyMTFfYWxsb2NfaHcocHJpdl9kYXRhX2xlbiwgJnA1NF9vcHMpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYgPSBkZXYtPnByaXY7CisJcHJpdi0+bW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQ7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcXVldWUpOworCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmRfMkdIejsKKwlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8IC8qIG5vdCBzdXJlICovCisJCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOworCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CS8qIFRPRE86IGZpbmQgYWN0dWFsIHZhbHVlICovCisJZGV2LT5tYXhfcnNzaSA9IDEyNzsKKworCXByaXYtPnR4X3N0YXRzLmRhdGFbMF0ubGltaXQgPSA1OworCWRldi0+cXVldWVzID0gMTsKKworCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHA1NF9jb250cm9sX2hkcikgKyA0ICsKKwkJCQkgc2l6ZW9mKHN0cnVjdCBwNTRfdHhfY29udHJvbF9hbGxvY2RhdGEpOworCisgICAgICAgIHByaXYtPmNhY2hlZF92ZGNmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YpICsKKyAgICAgICAgICAgICAgcHJpdi0+dHhfaGRyX2xlbiArIHNpemVvZihzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXYtPmNhY2hlZF92ZGNmKSB7CisJCWllZWU4MDIxMV9mcmVlX2h3KGRldik7CisJCXJldHVybiBOVUxMOworCX0KKworCXA1NF9pbml0X3ZkY2YoZGV2KTsKKworCXJldHVybiBkZXY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfaW5pdF9jb21tb24pOworCit2b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJa2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7CisJa2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKKwlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKKwlrZnJlZShwcml2LT5jYWNoZWRfdmRjZik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfZnJlZV9jb21tb24pOworCitzdGF0aWMgaW50IF9faW5pdCBwNTRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcDU0X2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQocDU0X2luaXQpOworbW9kdWxlX2V4aXQocDU0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWI1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKQEAgLTAsMCArMSwyNTQgQEAKKyNpZm5kZWYgUFJJU001NENPTU1PTl9ICisjZGVmaW5lIFBSSVNNNTRDT01NT05fSAorCisvKgorICogQ29tbW9uIGNvZGUgc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitzdHJ1Y3QgYm9vdHJlYyB7CisJX19sZTMyIGNvZGU7CisJX19sZTMyIGxlbjsKKwl1MzIgZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBib290cmVjX2V4cF9pZiB7CisJX19sZTE2IHJvbGU7CisJX19sZTE2IGlmX2lkOworCV9fbGUxNiB2YXJpYW50OworCV9fbGUxNiBidG1fY29tcGF0OworCV9fbGUxNiB0b3BfY29tcGF0OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBCUl9DT0RFX01JTgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQlJfQ09ERV9DT01QT05FTlRfSUQJCTB4ODAwMDAwMDEKKyNkZWZpbmUgQlJfQ09ERV9DT01QT05FTlRfVkVSU0lPTgkweDgwMDAwMDAyCisjZGVmaW5lIEJSX0NPREVfREVQRU5ERU5UX0lGCQkweDgwMDAwMDAzCisjZGVmaW5lIEJSX0NPREVfRVhQT1NFRF9JRgkJMHg4MDAwMDAwNAorI2RlZmluZSBCUl9DT0RFX0RFU0NSCQkJMHg4MDAwMDEwMQorI2RlZmluZSBCUl9DT0RFX01BWAkJCTB4OEZGRkZGRkYKKyNkZWZpbmUgQlJfQ09ERV9FTkRfT0ZfQlJBCQkweEZGMDAwMEZGCisjZGVmaW5lIExFR0FDWV9CUl9DT0RFX0VORF9PRl9CUkEJMHhGRkZGRkZGRgorCisjZGVmaW5lIEZXX0ZNQUMgMHg0NjRkNDE0MworI2RlZmluZSBGV19MTTg2IDB4NGM0ZDM4MzYKKyNkZWZpbmUgRldfTE04NyAweDRjNGQzODM3CisjZGVmaW5lIEZXX0xNMjAgMHg0YzRkMzIzMAorCisvKiBQREEgZGVmaW5lcyBhcmUgQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uICh0YWtlbiBmcm9tIGlzbHNtX3BkYS5oKSAqLworCitzdHJ1Y3QgcGRhX2VudHJ5IHsKKwlfX2xlMTYgbGVuOwkvKiBpbmNsdWRlcyBib3RoIGNvZGUgYW5kIGRhdGEgKi8KKwlfX2xlMTYgY29kZTsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBlZXByb21fcGRhX3dyYXAgeworCV9fbGUzMiBtYWdpYzsKKwlfX2xlMTYgcGFkOworCV9fbGUxNiBsZW47CisJX19sZTMyIGFybV9vcGNvZGU7CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgeworICAgICAgICBfX2xlMTYgZnJlcTsKKyAgICAgICAgX19sZTE2IGlxX3BhcmFtWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgeworCV9fbGUxNiBmcmVxOworCXU4IHZhbF9icHNrOworCXU4IHZhbF9xcHNrOworCXU4IHZhbF8xNnFhbTsKKwl1OCB2YWxfNjRxYW07CisJdTggcmF0ZV9zZXRfbWFzazsKKwl1OCByYXRlX3NldF9zaXplOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MCB7CisJdTggcmZfcG93ZXI7CisJdTggcGFfZGV0ZWN0b3I7CisJdTggcGN2OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSB7CisJdTggcmZfcG93ZXI7CisJdTggcGFfZGV0ZWN0b3I7CisJdTggZGF0YV9iYXJrZXI7CisJdTggZGF0YV9icHNrOworCXU4IGRhdGFfcXBzazsKKwl1OCBkYXRhXzE2cWFtOworCXU4IGRhdGFfNjRxYW07CisJdTggcGFkZGluZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgeworCXU4IGNhbF9tZXRob2RfcmV2OworCXU4IGNoYW5uZWxzOworCXU4IHBvaW50c19wZXJfY2hhbm5lbDsKKwl1OCBwYWRkaW5nOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIHRoaXMgZGVmaW5lcyB0aGUgUERSIGNvZGVzIHVzZWQgdG8gYnVpbGQgUERBcyBhcyBkZWZpbmVkIGluIGRvY3VtZW50CisgKiBudW1iZXIgNTUzMTU1LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtaXJyb3JzIHZlcnNpb24gMS4xIG9mIHRoZQorICogZG9jdW1lbnQgYW5kIGxpc3RzIG9ubHkgUERScyBzdXBwb3J0ZWQgYnkgdGhlIEFSTSBwbGF0Zm9ybS4KKyAqLworCisvKiBjb21tb24gYW5kIGNob2ljZSByYW5nZSAoMHgwMDAwIC0gMHgwZmZmKSAqLworI2RlZmluZSBQRFJfRU5ECQkJCQkweDAwMDAKKyNkZWZpbmUgUERSX01BTlVGQUNUVVJJTkdfUEFSVF9OVU1CRVIJCTB4MDAwMQorI2RlZmluZSBQRFJfUERBX1ZFUlNJT04JCQkJMHgwMDAyCisjZGVmaW5lIFBEUl9OSUNfU0VSSUFMX05VTUJFUgkJCTB4MDAwMworCisjZGVmaW5lIFBEUl9NQUNfQUREUkVTUwkJCQkweDAxMDEKKyNkZWZpbmUgUERSX1JFR1VMQVRPUllfRE9NQUlOX0xJU1QJCTB4MDEwMworI2RlZmluZSBQRFJfVEVNUEVSQVRVUkVfVFlQRQkJCTB4MDEwNworCisjZGVmaW5lIFBEUl9QUklTTV9QQ0lfSURFTlRJRklFUgkJMHgwNDAyCisKKy8qIEFSTSByYW5nZSAoMHgxMDAwIC0gMHgxZmZmKSAqLworI2RlZmluZSBQRFJfQ09VTlRSWV9JTkZPUk1BVElPTgkJCTB4MTAwMAorI2RlZmluZSBQRFJfSU5URVJGQUNFX0xJU1QJCQkweDEwMDEKKyNkZWZpbmUgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRAkweDEwMDIKKyNkZWZpbmUgUERSX09FTV9OQU1FCQkJCTB4MTAwMworI2RlZmluZSBQRFJfUFJPRFVDVF9OQU1FCQkJMHgxMDA0CisjZGVmaW5lIFBEUl9VVEY4X09FTV9OQU1FCQkJMHgxMDA1CisjZGVmaW5lIFBEUl9VVEY4X1BST0RVQ1RfTkFNRQkJCTB4MTAwNgorI2RlZmluZSBQRFJfQ09VTlRSWV9MSVNUCQkJMHgxMDA3CisjZGVmaW5lIFBEUl9ERUZBVUxUX0NPVU5UUlkJCQkweDEwMDgKKworI2RlZmluZSBQRFJfQU5URU5OQV9HQUlOCQkJMHgxMTAwCisKKyNkZWZpbmUgUERSX1BSSVNNX0lORElHT19QQV9DQUxJQlJBVElPTl9EQVRBCTB4MTkwMQorI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTgkJMHgxOTAyCisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUwkweDE5MDMKKyNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBCQkweDE5MDQKKyNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRFVBTF9CQU5ECTB4MTkwNQorI2RlZmluZSBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OCQkweDE5MDYKKyNkZWZpbmUgUERSX1JFR1VMQVRPUllfUE9XRVJfTElNSVRTCQkweDE5MDcKKyNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQJMHgxOTA4CisjZGVmaW5lIFBEUl9SQURJQVRFRF9UUkFOU01JU1NJT05fQ09SUkVDVElPTgkweDE5MDkKKyNkZWZpbmUgUERSX1BSSVNNX1RYX0lRX0NBTElCUkFUSU9OCQkweDE5MGEKKworLyogcmVzZXJ2ZWQgcmFuZ2UgKDB4MjAwMCAtIDB4N2ZmZikgKi8KKworLyogY3VzdG9tZXIgcmFuZ2UgKDB4ODAwMCAtIDB4ZmZmZikgKi8KKyNkZWZpbmUgUERSX0JBU0VCQU5EX1JFR0lTVEVSUwkJCTB4ODAwMAorI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCTB4ODAwMQorCisvKiBzdG9yZWQgaW4gc2tiLT5jYiAqLworc3RydWN0IG1lbXJlY29yZCB7CisJdTMyIHN0YXJ0X2FkZHI7CisJdTMyIGVuZF9hZGRyOworCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbDsKK307CisKK3N0cnVjdCBwNTRfZWVwcm9tX2xtODYgeworCV9fbGUxNiBvZmZzZXQ7CisJX19sZTE2IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfcnhfaGRyIHsKKwlfX2xlMTYgbWFnaWM7CisJX19sZTE2IGxlbjsKKwlfX2xlMTYgZnJlcTsKKwl1OCBhbnRlbm5hOworCXU4IHJhdGU7CisJdTggcnNzaTsKKwl1OCBxdWFsaXR5OworCXUxNiB1bmtub3duMjsKKwlfX2xlNjQgdGltZXN0YW1wOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF9mcmFtZV9zZW50X2hkciB7CisJdTggc3RhdHVzOworCXU4IHJldHJpZXM7CisJX19sZTE2IGFja19yc3NpOworCV9fbGUxNiBzZXE7CisJdTE2IHJhdGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF90eF9jb250cm9sX2FsbG9jZGF0YSB7CisJdTggcmF0ZXNldFs4XTsKKwl1MTYgcGFkZGluZzsKKwl1OCB3ZXBfa2V5X3ByZXNlbnQ7CisJdTggd2VwX2tleV9sZW47CisJdTggd2VwX2tleVsxNl07CisJX19sZTMyIGZyYW1lX3R5cGU7CisJdTMyIHBhZGRpbmcyOworCV9fbGUxNiBtYWdpYzQ7CisJdTggYW50ZW5uYTsKKwl1OCBvdXRwdXRfcG93ZXI7CisJX19sZTMyIG1hZ2ljNTsKKwl1OCBhbGlnblswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfZmlsdGVyIHsKKwlfX2xlMTYgZmlsdGVyX3R5cGU7CisJdTggZHN0W0VUSF9BTEVOXTsKKwl1OCBzcmNbRVRIX0FMRU5dOworCXU4IGFudGVubmE7CisJdTggZGVidWc7CisJX19sZTMyIG1hZ2ljMzsKKwl1OCByYXRlc1s4XTsJLy8gRklYTUU6IHdoYXQncyB0aGlzIGZvcj8KKwlfX2xlMzIgcnhfYWRkcjsKKwlfX2xlMTYgbWF4X3J4OworCV9fbGUxNiByeGh3OworCV9fbGUxNiBtYWdpYzg7CisJX19sZTE2IG1hZ2ljOTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfY2hhbm5lbCB7CisJX19sZTE2IG1hZ2ljMTsKKwlfX2xlMTYgbWFnaWMyOworCXU4IHBhZGRpbmcxWzIwXTsKKwlzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgaXFfYXV0b2NhbDsKKwl1OCBwYV9wb2ludHNfcGVyX2N1cnZlOworCXU4IHZhbF9iYXJrZXI7CisJdTggdmFsX2Jwc2s7CisJdTggdmFsX3Fwc2s7CisJdTggdmFsXzE2cWFtOworCXU4IHZhbF82NHFhbTsKKwlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEgY3VydmVfZGF0YVswXTsKKwkvKiBhZGRpdGlvbmFsIHBhZGRpbmcvZGF0YSBhZnRlciBjdXJ2ZV9kYXRhICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF90eF9jb250cm9sX2xlZCB7CisJX19sZTE2IG1vZGU7CisJX19sZTE2IGxlZF90ZW1wb3Jhcnk7CisJX19sZTE2IGxlZF9wZXJtYW5lbnQ7CisJX19sZTE2IGR1cmF0aW9uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfdHhfdmRjZl9xdWV1ZXMgeworCV9fbGUxNiBhaWZzOworCV9fbGUxNiBjd21pbjsKKwlfX2xlMTYgY3dtYXg7CisJX19sZTE2IHR4b3A7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YgeworCXU4IHBhZGRpbmc7CisJdTggc2xvdHRpbWU7CisJdTggbWFnaWMxOworCXU4IG1hZ2ljMjsKKwlzdHJ1Y3QgcDU0X3R4X3ZkY2ZfcXVldWVzIHF1ZXVlWzhdOworCXU4IHBhZDJbNF07CisJX19sZTE2IGZyYW1lYnVyc3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2VuZGlmIC8qIFBSSVNNNTRDT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NHBjaS5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy9wNTRwY2kuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkZGJiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwpAQCAtMCwwICsxLDkxMCBAQAorCisvKgorICogTGludXggZGV2aWNlIGRyaXZlciBmb3IgVVNCIGJhc2VkIFByaXNtNTQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICoKKyAqIEJhc2VkIG9uIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInA1NC5oIgorI2luY2x1ZGUgInA1NHVzYi5oIgorCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUHJpc201NCBVU0Igd2lyZWxlc3MgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInByaXNtNTR1c2IiKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHA1NHVfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCS8qIFZlcnNpb24gMSBkZXZpY2VzIChwY2kgY2hpcCArIG5ldDIyODApICovCisJe1VTQl9ERVZJQ0UoMHgwNTA2LCAweDBhMTEpfSwJLyogM0NPTSAzQ1JXRTI1NEc3MiAqLworCXtVU0JfREVWSUNFKDB4MDcwNywgMHhlZTA2KX0sCS8qIFNNQyAyODYyVy1HICovCisJe1VTQl9ERVZJQ0UoMHgwODNhLCAweDQ1MDEpfSwJLyogQWNjdG9uIDgwMi4xMWcgV040NTAxIFVTQiAqLworCXtVU0JfREVWSUNFKDB4MDgzYSwgMHg0NTAyKX0sCS8qIFNpZW1lbnMgR2lnYXNldCBVU0IgQWRhcHRlciAqLworCXtVU0JfREVWSUNFKDB4MDgzYSwgMHg1NTAxKX0sCS8qIFBoaWxsaXBzIENQV1VBMDU0ICovCisJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMDApfSwJLyogTmV0Z2VhciBXRzEyMSAqLworCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg0MjEwKX0sCS8qIE5ldGdlYXIgV0cxMjEgdGhlIHNlY29uZCA/ICovCisJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMjApfSwJLyogTmV0Z2VhciBXRzExMSAqLworCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA2KX0sCS8qIE1lZGlvbiA0MDkwMCwgUm9wZXIgRXVyb3BlICovCisJe1VTQl9ERVZJQ0UoMHgxMjRhLCAweDQwMjMpfSwJLyogU2h1dHRsZSBQTjE1LCBBaXJ2YXN0IFdNMTY4ZywgSU9HZWFyIEdXVTUxMyAqLworCXtVU0JfREVWSUNFKDB4MTkxNSwgMHgyMjM0KX0sCS8qIExpbmtzeXMgV1VTQjU0RyBPRU0gKi8KKwl7VVNCX0RFVklDRSgweDE5MTUsIDB4MjIzNSl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUgT0VNICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDEpfSwJLyogRExpbmsgRFdMLUcxMjAgU3Bpbm5ha2VyICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDMpfSwJLyogRExpbmsgRFdMLUcxMjIgKi8KKwl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNCl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgKi8KKwl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNSl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUgKi8KKworCS8qIFZlcnNpb24gMiBkZXZpY2VzICgzODg3KSAqLworCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUwKX0sCS8qIEJlbGtpbiBGNUQ3MDUwIHZlciAxMDAwICovCisJe1VTQl9ERVZJQ0UoMHgwNTcyLCAweDIwMDApfSwJLyogQ29oaWJhIFByb3RvIGJvYXJkICovCisJe1VTQl9ERVZJQ0UoMHgwNTcyLCAweDIwMDIpfSwJLyogQ29oaWJhIFByb3RvIGJvYXJkICovCisJe1VTQl9ERVZJQ0UoMHgwNzA3LCAweGVlMTMpfSwgICAvKiBTTUMgMjg2MlctRyB2ZXJzaW9uIDIgKi8KKwl7VVNCX0RFVklDRSgweDA4M2EsIDB4NDUyMSl9LCAgIC8qIFNpZW1lbnMgR2lnYXNldCBVU0IgQWRhcHRlciA1NCB2ZXJzaW9uIDIgKi8KKwl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDI0MCl9LAkvKiBOZXRnZWFyIFdHMTExICh2MikgKi8KKwl7VVNCX0RFVklDRSgweDA5MTUsIDB4MjAwMCl9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KKwl7VVNCX0RFVklDRSgweDA5MTUsIDB4MjAwMil9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KKwl7VVNCX0RFVklDRSgweDBiYWYsIDB4MDExOCl9LCAgIC8qIFUuUy4gUm9ib3RpY3MgVTUgODAyLjExZyBBZGFwdGVyKi8KKwl7VVNCX0RFVklDRSgweDBiZjgsIDB4MTAwOSl9LCAgIC8qIEZVSklUU1UgRS01NDAwIFVTQiBEMTcwMCovCisJe1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwgICAvKiBNZWRpb24gTUQ0MDkwMCAqLworCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA4KX0sCS8qIFNhZ2VtIFhHNzAzQSAqLworCXtVU0JfREVWSUNFKDB4MGQ4ZSwgMHgzNzYyKX0sCS8qIERMaW5rIERXTC1HMTIwIENvaGliYSAqLworCXtVU0JfREVWSUNFKDB4MDlhYSwgMHgxMDAwKX0sCS8qIFNwaW5uYWtlciBQcm90byBib2FyZCAqLworCXtVU0JfREVWSUNFKDB4MTI0YSwgMHg0MDI1KX0sCS8qIElPR2VhciBHV1U1MTMgKEdXMzg4N0lLIGNoaXApICovCisJe1VTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMGEpfSwJLyogTGlua3N5cyBXVVNCNTRHIHZlciAyICovCisJe1VTQl9ERVZJQ0UoMHgxM0IxLCAweDAwMEMpfSwJLyogTGlua3N5cyBXVVNCNTRBRyAqLworCXtVU0JfREVWSUNFKDB4MTQzNSwgMHgwNDI3KX0sCS8qIEludmVudGVsIFVSMDU0RyAqLworCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzNzA0KX0sCS8qIERMaW5rIERXTC1HMTIyIHJldiBBMiAqLworCXtVU0JfREVWSUNFKDB4NDEzYywgMHg4MTAyKX0sCS8qIFNwaW5uYWtlciBEVVQgKi8KKwl7VVNCX0RFVklDRSgweDQxM2MsIDB4ODEwNCl9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHA1NHVfdGFibGUpOworCitzdGF0aWMgdm9pZCBwNTR1X3J4X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcDU0dV9yeF9pbmZvICppbmZvID0gKHN0cnVjdCBwNTR1X3J4X2luZm8gKilza2ItPmNiOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGluZm8tPmRldjsKKwlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzKSkgeworCQlpbmZvLT51cmIgPSBOVUxMOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl91bmxpbmsoc2tiLCAmcHJpdi0+cnhfcXVldWUpOworCXNrYl9wdXQoc2tiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWlmICghcHJpdi0+aHdfdHlwZSkKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKSk7CisKKwlpZiAocDU0X3J4KGRldiwgc2tiKSkgeworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9SWF9TSVpFKTsKKwkJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJCS8qIFRPRE8gY2hlY2sgcnggcXVldWUgbGVuZ3RoIGFuZCByZWZpbGwgKnNvbWV3aGVyZSogKi8KKwkJCXJldHVybjsKKwkJfQorCisJCWluZm8gPSAoc3RydWN0IHA1NHVfcnhfaW5mbyAqKSBza2ItPmNiOworCQlpbmZvLT51cmIgPSB1cmI7CisJCWluZm8tPmRldiA9IGRldjsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CisJCXVyYi0+Y29udGV4dCA9IHNrYjsKKwkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPnJ4X3F1ZXVlLCBza2IpOworCX0gZWxzZSB7CisJCXNrYl90cmltKHNrYiwgMCk7CisJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKKwl9CisKKwl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgdm9pZCBwNTR1X3R4X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1c2JfZnJlZV91cmIodXJiKTsKK30KKworc3RhdGljIHZvaWQgcDU0dV90eF9mcmVlX2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX2ZyZWVfdXJiKHVyYik7Cit9CisKK3N0YXRpYyBpbnQgcDU0dV9pbml0X3VyYnMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHVyYiAqZW50cnk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0dV9yeF9pbmZvICppbmZvOworCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3F1ZXVlKSA8IDMyKSB7CisJCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihNQVhfUlhfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2tiKQorCQkJYnJlYWs7CisJCWVudHJ5ID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlbnRyeSkgeworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlicmVhazsKKwkJfQorCQl1c2JfZmlsbF9idWxrX3VyYihlbnRyeSwgcHJpdi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKHByaXYtPnVkZXYsIFA1NFVfUElQRV9EQVRBKSwgc2tiX3RhaWxfcG9pbnRlcihza2IpLCBNQVhfUlhfU0laRSwgcDU0dV9yeF9jYiwgc2tiKTsKKwkJaW5mbyA9IChzdHJ1Y3QgcDU0dV9yeF9pbmZvICopIHNrYi0+Y2I7CisJCWluZm8tPnVyYiA9IGVudHJ5OworCQlpbmZvLT5kZXYgPSBkZXY7CisJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKKwkJdXNiX3N1Ym1pdF91cmIoZW50cnksIEdGUF9LRVJORUwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwNTR1X2ZyZWVfdXJicyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcDU0dV9yeF9pbmZvICppbmZvOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT5yeF9xdWV1ZSkpKSB7CisJCWluZm8gPSAoc3RydWN0IHA1NHVfcnhfaW5mbyAqKSBza2ItPmNiOworCQlpZiAoIWluZm8tPnVyYikKKwkJCWNvbnRpbnVlOworCisJCXVzYl9raWxsX3VyYihpbmZvLT51cmIpOworCQlrZnJlZV9za2Ioc2tiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHA1NHVfdHhfMzg4NyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBwNTRfY29udHJvbF9oZHIgKmRhdGEsCisJCQkgc2l6ZV90IGxlbiwgaW50IGZyZWVfb25fdHgpCit7CisJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdXJiICphZGRyX3VyYiwgKmRhdGFfdXJiOworCisJYWRkcl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICghYWRkcl91cmIpCisJCXJldHVybjsKKworCWRhdGFfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRhdGFfdXJiKSB7CisJCXVzYl9mcmVlX3VyYihhZGRyX3VyYik7CisJCXJldHVybjsKKwl9CisKKwl1c2JfZmlsbF9idWxrX3VyYihhZGRyX3VyYiwgcHJpdi0+dWRldiwKKwkJdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIFA1NFVfUElQRV9EQVRBKSwgJmRhdGEtPnJlcV9pZCwKKwkJc2l6ZW9mKGRhdGEtPnJlcV9pZCksIHA1NHVfdHhfY2IsIGRldik7CisJdXNiX2ZpbGxfYnVsa191cmIoZGF0YV91cmIsIHByaXYtPnVkZXYsCisJCXVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREFUQSksIGRhdGEsIGxlbiwKKwkJZnJlZV9vbl90eCA/IHA1NHVfdHhfZnJlZV9jYiA6IHA1NHVfdHhfY2IsIGRldik7CisKKwl1c2Jfc3VibWl0X3VyYihhZGRyX3VyYiwgR0ZQX0FUT01JQyk7CisJdXNiX3N1Ym1pdF91cmIoZGF0YV91cmIsIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgdm9pZCBwNTR1X3R4X25ldDIyODAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpkYXRhLAorCQkJICAgIHNpemVfdCBsZW4sIGludCBmcmVlX29uX3R4KQoreworCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHVyYiAqaW50X3VyYiwgKmRhdGFfdXJiOworCXN0cnVjdCBuZXQyMjgwX3R4X2hkciAqaGRyOworCXN0cnVjdCBuZXQyMjgwX3JlZ193cml0ZSAqcmVnOworCisJcmVnID0ga21hbGxvYyhzaXplb2YoKnJlZyksIEdGUF9BVE9NSUMpOworCWlmICghcmVnKQorCQlyZXR1cm47CisKKwlpbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWludF91cmIpIHsKKwkJa2ZyZWUocmVnKTsKKwkJcmV0dXJuOworCX0KKworCWRhdGFfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRhdGFfdXJiKSB7CisJCWtmcmVlKHJlZyk7CisJCXVzYl9mcmVlX3VyYihpbnRfdXJiKTsKKwkJcmV0dXJuOworCX0KKworCXJlZy0+cG9ydCA9IGNwdV90b19sZTE2KE5FVDIyODBfREVWX1UzMik7CisJcmVnLT5hZGRyID0gY3B1X3RvX2xlMzIoUDU0VV9ERVZfQkFTRSk7CisJcmVnLT52YWwgPSBjcHVfdG9fbGUzMihJU0wzOFhYX0RFVl9JTlRfREFUQSk7CisKKwlsZW4gKz0gc2l6ZW9mKCpkYXRhKTsKKwloZHIgPSAodm9pZCAqKWRhdGEgLSBzaXplb2YoKmhkcik7CisJbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKKwloZHItPmRldmljZV9hZGRyID0gZGF0YS0+cmVxX2lkOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKGludF91cmIsIHByaXYtPnVkZXYsCisJCXVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREVWKSwgcmVnLCBzaXplb2YoKnJlZyksCisJCXA1NHVfdHhfZnJlZV9jYiwgZGV2KTsKKwl1c2Jfc3VibWl0X3VyYihpbnRfdXJiLCBHRlBfQVRPTUlDKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKGRhdGFfdXJiLCBwcml2LT51ZGV2LAorCQl1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgUDU0VV9QSVBFX0RBVEEpLCBoZHIsIGxlbiArIHNpemVvZigqaGRyKSwKKwkJZnJlZV9vbl90eCA/IHA1NHVfdHhfZnJlZV9jYiA6IHA1NHVfdHhfY2IsIGRldik7CisJdXNiX3N1Ym1pdF91cmIoZGF0YV91cmIsIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgaW50IHA1NHVfd3JpdGUoc3RydWN0IHA1NHVfcHJpdiAqcHJpdiwKKwkJICAgICAgc3RydWN0IG5ldDIyODBfcmVnX3dyaXRlICpidWYsCisJCSAgICAgIGVudW0gbmV0MjI4MF9vcF90eXBlIHR5cGUsCisJCSAgICAgIF9fbGUzMiBhZGRyLCBfX2xlMzIgdmFsKQoreworCXVuc2lnbmVkIGludCBlcDsKKwlpbnQgYWxlbjsKKworCWlmICh0eXBlICYgMHgwODAwKQorCQllcCA9IHVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREVWKTsKKwllbHNlCisJCWVwID0gdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIFA1NFVfUElQRV9CUkcpOworCisJYnVmLT5wb3J0ID0gY3B1X3RvX2xlMTYodHlwZSk7CisJYnVmLT5hZGRyID0gYWRkcjsKKwlidWYtPnZhbCA9IHZhbDsKKworCXJldHVybiB1c2JfYnVsa19tc2cocHJpdi0+dWRldiwgZXAsIGJ1Ziwgc2l6ZW9mKCpidWYpLCAmYWxlbiwgMTAwMCk7Cit9CisKK3N0YXRpYyBpbnQgcDU0dV9yZWFkKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYsIHZvaWQgKmJ1ZiwKKwkJICAgICBlbnVtIG5ldDIyODBfb3BfdHlwZSB0eXBlLAorCQkgICAgIF9fbGUzMiBhZGRyLCBfX2xlMzIgKnZhbCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9yZWdfcmVhZCAqcmVhZCA9IGJ1ZjsKKwlfX2xlMzIgKnJlZyA9IGJ1ZjsKKwl1bnNpZ25lZCBpbnQgZXA7CisJaW50IGFsZW4sIGVycjsKKworCWlmICh0eXBlICYgMHgwODAwKQorCQllcCA9IFA1NFVfUElQRV9ERVY7CisJZWxzZQorCQllcCA9IFA1NFVfUElQRV9CUkc7CisKKwlyZWFkLT5wb3J0ID0gY3B1X3RvX2xlMTYodHlwZSk7CisJcmVhZC0+YWRkciA9IGFkZHI7CisKKwllcnIgPSB1c2JfYnVsa19tc2cocHJpdi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwKSwKKwkJCSAgIHJlYWQsIHNpemVvZigqcmVhZCksICZhbGVuLCAxMDAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gdXNiX2J1bGtfbXNnKHByaXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBlcCksCisJCQkgICByZWcsIHNpemVvZigqcmVnKSwgJmFsZW4sIDEwMDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkqdmFsID0gKnJlZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTR1X2J1bGtfbXNnKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBlcCwKKwkJCSB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCWludCBhbGVuOworCXJldHVybiB1c2JfYnVsa19tc2cocHJpdi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwKSwKKwkJCSAgICBkYXRhLCBsZW4sICZhbGVuLCAyMDAwKTsKK30KKworc3RhdGljIGludCBwNTR1X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXZvaWQgKmJ1ZjsKKwlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpoZHI7CisJaW50IGVyciwgYWxlbjsKKwlzaXplX3Qgb2Zmc2V0ID0gcHJpdi0+aHdfdHlwZSA/IDB4MTAgOiAweDIwOworCisJYnVmID0ga21hbGxvYygweDIwMjAsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgIgorCQkgICAgICAgImVlcHJvbSByZWFkYmFjayFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocHJpdi0+aHdfdHlwZSkgeworCQkqKCh1MzIgKikgYnVmKSA9IHByaXYtPmNvbW1vbi5yeF9zdGFydDsKKwkJZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLCBzaXplb2YodTMyKSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogYWRkciBzZW5kIGZhaWxlZFxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgbmV0MjI4MF9yZWdfd3JpdGUgKnJlZyA9IGJ1ZjsKKwkJcmVnLT5wb3J0ID0gY3B1X3RvX2xlMTYoTkVUMjI4MF9ERVZfVTMyKTsKKwkJcmVnLT5hZGRyID0gY3B1X3RvX2xlMzIoUDU0VV9ERVZfQkFTRSk7CisJCXJlZy0+dmFsID0gY3B1X3RvX2xlMzIoSVNMMzhYWF9ERVZfSU5UX0RBVEEpOworCQllcnIgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9ERVYsIGJ1Ziwgc2l6ZW9mKCpyZWcpKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBkZXZfaW50IHNlbmQgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCWhkciA9IGJ1ZiArIHByaXYtPmNvbW1vbi50eF9oZHJfbGVuOworCXA1NF9maWxsX2VlcHJvbV9yZWFkYmFjayhoZHIpOworCWhkci0+cmVxX2lkID0gY3B1X3RvX2xlMzIocHJpdi0+Y29tbW9uLnJ4X3N0YXJ0KTsKKwlpZiAocHJpdi0+Y29tbW9uLnR4X2hkcl9sZW4pIHsKKwkJc3RydWN0IG5ldDIyODBfdHhfaGRyICp0eF9oZHIgPSBidWY7CisJCXR4X2hkci0+ZGV2aWNlX2FkZHIgPSBoZHItPnJlcV9pZDsKKwkJdHhfaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihFRVBST01fUkVBREJBQ0tfTEVOKTsKKwl9CisKKwkvKiB3ZSBjYW4ganVzdCBwcmV0ZW5kIHRvIHNlbmQgMHgyMDAwIGJ5dGVzIG9mIG5vdGhpbmcgaW4gdGhlIGhlYWRlcnMgKi8KKwllcnIgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLCBidWYsCisJCQkgICAgRUVQUk9NX1JFQURCQUNLX0xFTiArIHByaXYtPmNvbW1vbi50eF9oZHJfbGVuKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogZWVwcm9tIHJlcSBzZW5kIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwllcnIgPSB1c2JfYnVsa19tc2cocHJpdi0+dWRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREFUQSksCisJCQkgICBidWYsIDB4MjAyMCwgJmFsZW4sIDEwMDApOworCWlmICghZXJyICYmIGFsZW4gPiBvZmZzZXQpIHsKKwkJcDU0X3BhcnNlX2VlcHJvbShkZXYsICh1OCAqKWJ1ZiArIG9mZnNldCwgYWxlbiAtIG9mZnNldCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBlZXByb20gcmVhZCBmYWlsZWQhXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworIGZhaWw6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA1NHVfdXBsb2FkX2Zpcm13YXJlXzM4ODcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0YXRpYyBjaGFyIHN0YXJ0X3N0cmluZ1tdID0gIn5+fn48XHIiOworCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7CisJaW50IGVyciwgYWxlbjsKKwl1OCBjYXJyeSA9IDA7CisJdTggKmJ1ZiwgKnRtcCwgKmRhdGE7CisJdW5zaWduZWQgaW50IGxlZnQsIHJlbWFpbnMsIGJsb2NrX3NpemU7CisJc3RydWN0IHgyX2hlYWRlciAqaGRyOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCXRtcCA9IGJ1ZiA9IGttYWxsb2MoUDU0VV9GV19CTE9DSywgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwNTR1c2I6IGNhbm5vdCBhbGxvY2F0ZSBmaXJtd2FyZSB1cGxvYWQgYnVmZmVyIVxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2J1ZmFsbG9jOworCX0KKworCW1lbWNweShidWYsIHN0YXJ0X3N0cmluZywgNCk7CisJZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLCA0KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicDU0dXNiOiByZXNldCBmYWlsZWQhICglZClcbiIsIGVycik7CisJCWdvdG8gZXJyX3Jlc2V0OworCX0KKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaXNsMzg4N3VzYl9iYXJlIiwgJnByaXYtPnVkZXYtPmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInA1NHVzYjogY2Fubm90IGZpbmQgZmlybXdhcmUgKGlzbDM4ODd1c2JfYmFyZSkhXG4iKTsKKwkJZ290byBlcnJfcmVxX2Z3X2ZhaWxlZDsKKwl9CisKKwlwNTRfcGFyc2VfZmlybXdhcmUoZGV2LCBmd19lbnRyeSk7CisKKwlsZWZ0ID0gYmxvY2tfc2l6ZSA9IG1pbigoc2l6ZV90KVA1NFVfRldfQkxPQ0ssIGZ3X2VudHJ5LT5zaXplKTsKKwlzdHJjcHkoYnVmLCBzdGFydF9zdHJpbmcpOworCWxlZnQgLT0gc3RybGVuKHN0YXJ0X3N0cmluZyk7CisJdG1wICs9IHN0cmxlbihzdGFydF9zdHJpbmcpOworCisJZGF0YSA9IGZ3X2VudHJ5LT5kYXRhOworCXJlbWFpbnMgPSBmd19lbnRyeS0+c2l6ZTsKKworCWhkciA9IChzdHJ1Y3QgeDJfaGVhZGVyICopKGJ1ZiArIHN0cmxlbihzdGFydF9zdHJpbmcpKTsKKwltZW1jcHkoaGRyLT5zaWduYXR1cmUsIFgyX1NJR05BVFVSRSwgWDJfU0lHTkFUVVJFX1NJWkUpOworCWhkci0+ZndfbG9hZF9hZGRyID0gY3B1X3RvX2xlMzIoSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUik7CisJaGRyLT5md19sZW5ndGggPSBjcHVfdG9fbGUzMihmd19lbnRyeS0+c2l6ZSk7CisJaGRyLT5jcmMgPSBjcHVfdG9fbGUzMih+Y3JjMzJfbGUofjAsICh2b2lkICopJmhkci0+ZndfbG9hZF9hZGRyLAorCQkJCQkgc2l6ZW9mKHUzMikqMikpOworCWxlZnQgLT0gc2l6ZW9mKCpoZHIpOworCXRtcCArPSBzaXplb2YoKmhkcik7CisKKwl3aGlsZSAocmVtYWlucykgeworCQl3aGlsZSAobGVmdC0tKSB7CisJCQlpZiAoY2FycnkpIHsKKwkJCQkqdG1wKysgPSBjYXJyeTsKKwkJCQljYXJyeSA9IDA7CisJCQkJcmVtYWlucy0tOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoICgqZGF0YSkgeworCQkJY2FzZSAnfic6CisJCQkJKnRtcCsrID0gJ30nOworCQkJCWNhcnJ5ID0gJ14nOworCQkJCWJyZWFrOworCQkJY2FzZSAnfSc6CisJCQkJKnRtcCsrID0gJ30nOworCQkJCWNhcnJ5ID0gJ10nOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkqdG1wKysgPSAqZGF0YTsKKwkJCQlyZW1haW5zLS07CisJCQkJYnJlYWs7CisJCQl9CisJCQlkYXRhKys7CisJCX0KKworCQllcnIgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLCBidWYsIGJsb2NrX3NpemUpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInByaXNtNTR1c2I6IGZpcm13YXJlIHVwbG9hZCBmYWlsZWQhXG4iKTsKKwkJCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7CisJCX0KKworCQl0bXAgPSBidWY7CisJCWxlZnQgPSBibG9ja19zaXplID0gbWluKCh1bnNpZ25lZCBpbnQpUDU0VV9GV19CTE9DSywgcmVtYWlucyk7CisJfQorCisJKigoX19sZTMyICopYnVmKSA9IGNwdV90b19sZTMyKH5jcmMzMl9sZSh+MCwgZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKSk7CisJZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLCBzaXplb2YodTMyKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInByaXNtNTR1c2I6IGZpcm13YXJlIHVwbG9hZCBmYWlsZWQhXG4iKTsKKwkJZ290byBlcnJfdXBsb2FkX2ZhaWxlZDsKKwl9CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJd2hpbGUgKCEoZXJyID0gdXNiX2J1bGtfbXNnKHByaXYtPnVkZXYsCisJCXVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREFUQSksIGJ1ZiwgMTI4LCAmYWxlbiwgMTAwMCkpKSB7CisJCWlmIChhbGVuID4gMiAmJiAhbWVtY21wKGJ1ZiwgIk9LIiwgMikpCisJCQlicmVhazsKKworCQlpZiAoYWxlbiA+IDUgJiYgIW1lbWNtcChidWYsICJFUlJPUiIsIDUpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJwcmlzbTU0dXNiOiBmaXJtd2FyZSB1cGxvYWQgZmFpbGVkIVxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBmaXJtd2FyZSBib290IHRpbWVkIG91dCFcbiIpOworCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChlcnIpCisJCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7CisKKwlidWZbMF0gPSAnZyc7CisJYnVmWzFdID0gJ1xyJzsKKwllcnIgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLCBidWYsIDIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBmaXJtd2FyZSBib290IGZhaWxlZCFcbiIpOworCQlnb3RvIGVycl91cGxvYWRfZmFpbGVkOworCX0KKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwl3aGlsZSAoIShlcnIgPSB1c2JfYnVsa19tc2cocHJpdi0+dWRldiwKKwkJdXNiX3JjdmJ1bGtwaXBlKHByaXYtPnVkZXYsIFA1NFVfUElQRV9EQVRBKSwgYnVmLCAxMjgsICZhbGVuLCAxMDAwKSkpIHsKKwkJaWYgKGFsZW4gPiAwICYmIGJ1ZlswXSA9PSAnZycpCisJCQlicmVhazsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChlcnIpCisJCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7CisKKyAgZXJyX3VwbG9hZF9mYWlsZWQ6CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisgIGVycl9yZXFfZndfZmFpbGVkOgorICBlcnJfcmVzZXQ6CisJa2ZyZWUoYnVmKTsKKyAgZXJyX2J1ZmFsbG9jOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDU0dV91cGxvYWRfZmlybXdhcmVfbmV0MjI4MChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcDU0cF9jc3IgKmRldnJlZyA9IChjb25zdCBzdHJ1Y3QgcDU0cF9jc3IgKikgUDU0VV9ERVZfQkFTRTsKKwlpbnQgZXJyLCBhbGVuOworCXZvaWQgKmJ1ZjsKKwlfX2xlMzIgcmVnOworCXVuc2lnbmVkIGludCByZW1haW5zLCBvZmZzZXQ7CisJdTggKmRhdGE7CisKKwlidWYgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwNTR1c2I6IGZpcm13YXJlIGJ1ZmZlciBhbGxvYyBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJpc2wzODkwdXNiIiwgJnByaXYtPnVkZXYtPmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInA1NHVzYjogY2Fubm90IGZpbmQgZmlybXdhcmUgKGlzbDM4OTB1c2IpIVxuIik7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiBlcnI7CisJfQorCisJcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgZndfZW50cnkpOworCisjZGVmaW5lIFA1NFVfV1JJVEUodHlwZSwgYWRkciwgZGF0YSkgXAorCWRvIHtcCisJCWVyciA9IHA1NHVfd3JpdGUocHJpdiwgYnVmLCB0eXBlLFwKKwkJCQkgY3B1X3RvX2xlMzIoKHUzMikodW5zaWduZWQgbG9uZylhZGRyKSwgZGF0YSk7XAorCQlpZiAoZXJyKSBcCisJCQlnb3RvIGZhaWw7XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgUDU0VV9SRUFEKHR5cGUsIGFkZHIpIFwKKwlkbyB7XAorCQllcnIgPSBwNTR1X3JlYWQocHJpdiwgYnVmLCB0eXBlLFwKKwkJCQljcHVfdG9fbGUzMigodTMyKSh1bnNpZ25lZCBsb25nKWFkZHIpLCAmcmVnKTtcCisJCWlmIChlcnIpXAorCQkJZ290byBmYWlsO1wKKwl9IHdoaWxlICgwKQorCisJLyogcG93ZXIgZG93biBuZXQyMjgwIGJyaWRnZSAqLworCVA1NFVfUkVBRChORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfR1BJT0NUTCk7CisJcmVnIHw9IGNwdV90b19sZTMyKFA1NFVfQlJHX1BPV0VSX0RPV04pOworCXJlZyAmPSBjcHVfdG9fbGUzMih+UDU0VV9CUkdfUE9XRVJfVVApOworCVA1NFVfV1JJVEUoTkVUMjI4MF9CUkdfVTMyLCBORVQyMjgwX0dQSU9DVEwsIHJlZyk7CisKKwltZGVsYXkoMTAwKTsKKworCS8qIHBvd2VyIHVwIGJyaWRnZSAqLworCXJlZyB8PSBjcHVfdG9fbGUzMihQNTRVX0JSR19QT1dFUl9VUCk7CisJcmVnICY9IGNwdV90b19sZTMyKH5QNTRVX0JSR19QT1dFUl9ET1dOKTsKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9HUElPQ1RMLCByZWcpOworCisJbWRlbGF5KDEwMCk7CisKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9ERVZJTklULAorCQkgICBjcHVfdG9fbGUzMihORVQyMjgwX0NMS18zME1oeiB8CisJCQkgICAgICAgTkVUMjI4MF9QQ0lfRU5BQkxFIHwKKwkJCSAgICAgICBORVQyMjgwX1BDSV9TT0ZUX1JFU0VUKSk7CisKKwltZGVsYXkoMjApOworCisJUDU0VV9XUklURShORVQyMjgwX0JSR19DRkdfVTE2LCBQQ0lfQ09NTUFORCwKKwkJICAgY3B1X3RvX2xlMzIoUENJX0NPTU1BTkRfTUVNT1JZIHwKKwkJCSAgICAgICBQQ0lfQ09NTUFORF9NQVNURVIpKTsKKworCVA1NFVfV1JJVEUoTkVUMjI4MF9CUkdfQ0ZHX1UzMiwgUENJX0JBU0VfQUREUkVTU18wLAorCQkgICBjcHVfdG9fbGUzMihORVQyMjgwX0JBU0UpKTsKKworCVA1NFVfUkVBRChORVQyMjgwX0JSR19DRkdfVTE2LCBQQ0lfU1RBVFVTKTsKKwlyZWcgfD0gY3B1X3RvX2xlMzIoUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUKTsKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX0NGR19VMTYsIFBDSV9TVEFUVVMsIHJlZyk7CisKKwkvLyBUT0RPOiB3ZSByZWFsbHkgbmVlZCB0aGlzPworCVA1NFVfUkVBRChORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfUkVMTlVNKTsKKworCVA1NFVfV1JJVEUoTkVUMjI4MF9CUkdfVTMyLCBORVQyMjgwX0VQQV9SU1AsCisJCSAgIGNwdV90b19sZTMyKE5FVDIyODBfQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUpKTsKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9FUENfUlNQLAorCQkgICBjcHVfdG9fbGUzMihORVQyMjgwX0NMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFKSk7CisKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX0NGR19VMzIsIFBDSV9CQVNFX0FERFJFU1NfMiwKKwkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9CQVNFMikpOworCisJLyogZmluYWxseSBkb25lIHNldHRpbmcgdXAgdGhlIGJyaWRnZSAqLworCisJUDU0VV9XUklURShORVQyMjgwX0RFVl9DRkdfVTE2LCAweDEwMDAwIHwgUENJX0NPTU1BTkQsCisJCSAgIGNwdV90b19sZTMyKFBDSV9DT01NQU5EX01FTU9SWSB8CisJCQkgICAgICAgUENJX0NPTU1BTkRfTUFTVEVSKSk7CisKKwlQNTRVX1dSSVRFKE5FVDIyODBfREVWX0NGR19VMTYsIDB4MTAwMDAgfCAweDQwIC8qIFRSRFkgdGltZW91dCAqLywgMCk7CisJUDU0VV9XUklURShORVQyMjgwX0RFVl9DRkdfVTMyLCAweDEwMDAwIHwgUENJX0JBU0VfQUREUkVTU18wLAorCQkgICBjcHVfdG9fbGUzMihQNTRVX0RFVl9CQVNFKSk7CisKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9VU0JJUlFFTkIxLCAwKTsKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9JUlFTVEFUMSwKKwkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9QQ0lfSU5UQV9JTlRFUlJVUFQpKTsKKworCS8qIGRvIHJvbWJvb3QgKi8KKwlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+aW50X2VuYWJsZSwgMCk7CisKKwlQNTRVX1JFQUQoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5jdHJsX3N0YXQpOworCXJlZyAmPSBjcHVfdG9fbGUzMih+SVNMMzhYWF9DVFJMX1NUQVRfUkVTRVQpOworCXJlZyAmPSBjcHVfdG9fbGUzMih+SVNMMzhYWF9DVFJMX1NUQVRfUkFNQk9PVCk7CisJcmVnICY9IGNwdV90b19sZTMyKH5JU0wzOFhYX0NUUkxfU1RBVF9DTEtSVU4pOworCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5jdHJsX3N0YXQsIHJlZyk7CisKKwltZGVsYXkoMjApOworCisJcmVnIHw9IGNwdV90b19sZTMyKElTTDM4WFhfQ1RSTF9TVEFUX1JFU0VUKTsKKwlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+Y3RybF9zdGF0LCByZWcpOworCisJbWRlbGF5KDIwKTsKKworCXJlZyAmPSBjcHVfdG9fbGUzMih+SVNMMzhYWF9DVFJMX1NUQVRfUkVTRVQpOworCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5jdHJsX3N0YXQsIHJlZyk7CisKKwltZGVsYXkoMTAwKTsKKworCVA1NFVfUkVBRChORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9pZGVudCk7CisJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9hY2ssIHJlZyk7CisKKwkvKiBmaW5hbGx5LCB3ZSBjYW4gdXBsb2FkIGZpcm13YXJlIG5vdyEgKi8KKwlyZW1haW5zID0gZndfZW50cnktPnNpemU7CisJZGF0YSA9IGZ3X2VudHJ5LT5kYXRhOworCW9mZnNldCA9IElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFI7CisKKwl3aGlsZSAocmVtYWlucykgeworCQl1bnNpZ25lZCBpbnQgYmxvY2tfbGVuID0gbWluKHJlbWFpbnMsICh1bnNpZ25lZCBpbnQpNTEyKTsKKwkJbWVtY3B5KGJ1ZiwgZGF0YSwgYmxvY2tfbGVuKTsKKworCQllcnIgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLCBidWYsIGJsb2NrX2xlbik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogZmlybXdhcmUgYmxvY2sgdXBsb2FkICIKKwkJCSAgICAgICAiZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5kaXJlY3RfbWVtX2Jhc2UsCisJCQkgICBjcHVfdG9fbGUzMigweGMwMDAwZjAwKSk7CisKKwkJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsCisJCQkgICAweDAwMjAgfCAodW5zaWduZWQgbG9uZykmZGV2cmVnLT5kaXJlY3RfbWVtX3dpbiwgMCk7CisJCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLAorCQkJICAgMHgwMDIwIHwgKHVuc2lnbmVkIGxvbmcpJmRldnJlZy0+ZGlyZWN0X21lbV93aW4sCisJCQkgICBjcHVfdG9fbGUzMigxKSk7CisKKwkJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsCisJCQkgICAweDAwMjQgfCAodW5zaWduZWQgbG9uZykmZGV2cmVnLT5kaXJlY3RfbWVtX3dpbiwKKwkJCSAgIGNwdV90b19sZTMyKGJsb2NrX2xlbikpOworCQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwKKwkJCSAgIDB4MDAyOCB8ICh1bnNpZ25lZCBsb25nKSZkZXZyZWctPmRpcmVjdF9tZW1fd2luLAorCQkJICAgY3B1X3RvX2xlMzIob2Zmc2V0KSk7CisKKwkJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmRtYV9hZGRyLAorCQkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9FUEFfRklGT19QQ0lfQUREUikpOworCQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+ZG1hX2xlbiwKKwkJCSAgIGNwdV90b19sZTMyKGJsb2NrX2xlbiA+PiAyKSk7CisJCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5kbWFfY3RybCwKKwkJCSAgIGNwdV90b19sZTMyKElTTDM4WFhfRE1BX01BU1RFUl9DT05UUk9MX1RSSUdHRVIpKTsKKworCQltZGVsYXkoMTApOworCisJCVA1NFVfUkVBRChORVQyMjgwX0RFVl9VMzIsCisJCQkgIDB4MDAyQyB8ICh1bnNpZ25lZCBsb25nKSZkZXZyZWctPmRpcmVjdF9tZW1fd2luKTsKKwkJaWYgKCEocmVnICYgY3B1X3RvX2xlMzIoSVNMMzhYWF9ETUFfU1RBVFVTX0RPTkUpKSB8fAorCQkgICAgIShyZWcgJiBjcHVfdG9fbGUzMihJU0wzOFhYX0RNQV9TVEFUVVNfUkVBRFkpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBmaXJtd2FyZSBETUEgdHJhbnNmZXIgIgorCQkJICAgICAgICJmYWlsZWRcbiIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfRVBBX1NUQVQsCisJCQkgICBjcHVfdG9fbGUzMihORVQyMjgwX0ZJRk9fRkxVU0gpKTsKKworCQlyZW1haW5zIC09IGJsb2NrX2xlbjsKKwkJZGF0YSArPSBibG9ja19sZW47CisJCW9mZnNldCArPSBibG9ja19sZW47CisJfQorCisJLyogZG8gcmFtYm9vdCAqLworCVA1NFVfUkVBRChORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmN0cmxfc3RhdCk7CisJcmVnICY9IGNwdV90b19sZTMyKH5JU0wzOFhYX0NUUkxfU1RBVF9SRVNFVCk7CisJcmVnICY9IGNwdV90b19sZTMyKH5JU0wzOFhYX0NUUkxfU1RBVF9DTEtSVU4pOworCXJlZyB8PSBjcHVfdG9fbGUzMihJU0wzOFhYX0NUUkxfU1RBVF9SQU1CT09UKTsKKwlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+Y3RybF9zdGF0LCByZWcpOworCisJbWRlbGF5KDIwKTsKKworCXJlZyB8PSBjcHVfdG9fbGUzMihJU0wzOFhYX0NUUkxfU1RBVF9SRVNFVCk7CisJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmN0cmxfc3RhdCwgcmVnKTsKKworCXJlZyAmPSBjcHVfdG9fbGUzMih+SVNMMzhYWF9DVFJMX1NUQVRfUkVTRVQpOworCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5jdHJsX3N0YXQsIHJlZyk7CisKKwltZGVsYXkoMTAwKTsKKworCVA1NFVfUkVBRChORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9pZGVudCk7CisJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9hY2ssIHJlZyk7CisKKwkvKiBzdGFydCB1cCB0aGUgZmlybXdhcmUgKi8KKwlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+aW50X2VuYWJsZSwKKwkJICAgY3B1X3RvX2xlMzIoSVNMMzhYWF9JTlRfSURFTlRfSU5JVCkpOworCisJUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfSVJRU1RBVDEsCisJCSAgIGNwdV90b19sZTMyKE5FVDIyODBfUENJX0lOVEFfSU5URVJSVVBUKSk7CisKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9VU0JJUlFFTkIxLAorCQkgICBjcHVfdG9fbGUzMihORVQyMjgwX1BDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJICAgICAgIE5FVDIyODBfVVNCX0lOVEVSUlVQVF9FTkFCTEUpKTsKKworCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5kZXZfaW50LAorCQkgICBjcHVfdG9fbGUzMihJU0wzOFhYX0RFVl9JTlRfUkVTRVQpKTsKKworCWVyciA9IHVzYl9pbnRlcnJ1cHRfbXNnKHByaXYtPnVkZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBlKHByaXYtPnVkZXYsIFA1NFVfUElQRV9JTlQpLAorCQkJCWJ1Ziwgc2l6ZW9mKF9fbGUzMiksICZhbGVuLCAxMDAwKTsKKwlpZiAoZXJyIHx8IGFsZW4gIT0gc2l6ZW9mKF9fbGUzMikpCisJCWdvdG8gZmFpbDsKKworCVA1NFVfUkVBRChORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9pZGVudCk7CisJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9hY2ssIHJlZyk7CisKKwlpZiAoIShyZWcgJiBjcHVfdG9fbGUzMihJU0wzOFhYX0lOVF9JREVOVF9JTklUKSkpCisJCWVyciA9IC1FSU5WQUw7CisKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9VU0JJUlFFTkIxLCAwKTsKKwlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9JUlFTVEFUMSwKKwkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9QQ0lfSU5UQV9JTlRFUlJVUFQpKTsKKworI3VuZGVmIFA1NFVfV1JJVEUKKyN1bmRlZiBQNTRVX1JFQUQKKworIGZhaWw6CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA1NHVfb3BlbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJZXJyID0gcDU0dV9pbml0X3VyYnMoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXJldHVybiBlcnI7CisJfQorCisJcHJpdi0+Y29tbW9uLm9wZW4gPSBwNTR1X2luaXRfdXJiczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwNTR1X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCS8qIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIHJlbGlhYmx5IHN0b3AgdGhlIDM4ODcgYW5kIG5ldDIyODAgc28KKwkgICB0aGUgaGFyZHdhcmUgaXMgc3RpbGwgdXNhYmxlIG5leHQgdGltZSB3ZSB3YW50IHRvIHN0YXJ0IGl0LgorCSAgIHVudGlsIHRoZW4sIHdlIGp1c3Qgc3RvcCBsaXN0ZW5pbmcgdG8gdGhlIGhhcmR3YXJlLi4gKi8KKwlwNTR1X2ZyZWVfdXJicyhkZXYpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcDU0dV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKKwlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2OworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGksIHJlY29nbml6ZWRfcGlwZXM7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlkZXYgPSBwNTRfaW5pdF9jb21tb24oc2l6ZW9mKCpwcml2KSk7CisJaWYgKCFkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdiA9IGRldi0+cHJpdjsKKworCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJmludGYtPmRldik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOworCXByaXYtPnVkZXYgPSB1ZGV2OworCisJdXNiX2dldF9kZXYodWRldik7CisKKwkvKiByZWFsbHkgbGF6eSBhbmQgc2ltcGxlIHdheSBvZiBmaWd1cmluZyBvdXQgaWYgd2UncmUgYSAzODg3ICovCisJLyogVE9ETzogc2hvdWxkIGp1c3Qgc3RpY2sgdGhlIGlkZW50aWZpY2F0aW9uIGluIHRoZSBkZXZpY2UgdGFibGUgKi8KKwlpID0gaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOworCXJlY29nbml6ZWRfcGlwZXMgPSAwOworCXdoaWxlIChpLS0pIHsKKwkJc3dpdGNoIChpbnRmLT5hbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MpIHsKKwkJY2FzZSBQNTRVX1BJUEVfREFUQToKKwkJY2FzZSBQNTRVX1BJUEVfTUdNVDoKKwkJY2FzZSBQNTRVX1BJUEVfQlJHOgorCQljYXNlIFA1NFVfUElQRV9ERVY6CisJCWNhc2UgUDU0VV9QSVBFX0RBVEEgfCBVU0JfRElSX0lOOgorCQljYXNlIFA1NFVfUElQRV9NR01UIHwgVVNCX0RJUl9JTjoKKwkJY2FzZSBQNTRVX1BJUEVfQlJHIHwgVVNCX0RJUl9JTjoKKwkJY2FzZSBQNTRVX1BJUEVfREVWIHwgVVNCX0RJUl9JTjoKKwkJY2FzZSBQNTRVX1BJUEVfSU5UIHwgVVNCX0RJUl9JTjoKKwkJCXJlY29nbml6ZWRfcGlwZXMrKzsKKwkJfQorCX0KKwlwcml2LT5jb21tb24ub3BlbiA9IHA1NHVfb3BlbjsKKworCWlmIChyZWNvZ25pemVkX3BpcGVzIDwgUDU0VV9QSVBFX05VTUJFUikgeworCQlwcml2LT5od190eXBlID0gUDU0VV8zODg3OworCQlwcml2LT5jb21tb24udHggPSBwNTR1X3R4XzM4ODc7CisJfSBlbHNlIHsKKwkJZGV2LT5leHRyYV90eF9oZWFkcm9vbSArPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTsKKwkJcHJpdi0+Y29tbW9uLnR4X2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTsKKwkJcHJpdi0+Y29tbW9uLnR4ID0gcDU0dV90eF9uZXQyMjgwOworCX0KKwlwcml2LT5jb21tb24uc3RvcCA9IHA1NHVfc3RvcDsKKworCWlmIChwcml2LT5od190eXBlKQorCQllcnIgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV8zODg3KGRldik7CisJZWxzZQorCQllcnIgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV9uZXQyMjgwKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9kZXY7CisKKwllcnIgPSBwNTR1X3JlYWRfZWVwcm9tKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9kZXY7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT53aXBoeS0+cGVybV9hZGRyKSkgeworCQl1OCBwZXJtX2FkZHJbRVRIX0FMRU5dOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInByaXNtNTR1c2I6IEludmFsaWQgaHdhZGRyISBVc2luZyByYW5kb21seSBnZW5lcmF0ZWQgTUFDIGFkZHJcbiIpOworCQlyYW5kb21fZXRoZXJfYWRkcihwZXJtX2FkZHIpOworCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIHBlcm1fYWRkcik7CisJfQorCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcXVldWUpOworCisJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInByaXNtNTR1c2I6IENhbm5vdCByZWdpc3RlciBuZXRkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX2RldjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogaHdhZGRyICVzLCBpc2wzOCUwMnhcbiIsCisJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksCisJICAgICAgIHByaW50X21hYyhtYWMsIGRldi0+d2lwaHktPnBlcm1fYWRkciksCisJICAgICAgIHByaXYtPmNvbW1vbi52ZXJzaW9uKTsKKworCXJldHVybiAwOworCisgZXJyX2ZyZWVfZGV2OgorCWllZWU4MDIxMV9mcmVlX2h3KGRldik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl1c2JfcHV0X2Rldih1ZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcDU0dV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IHA1NHVfcHJpdiAqcHJpdjsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOworCisJcHJpdiA9IGRldi0+cHJpdjsKKwl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwlwNTRfZnJlZV9jb21tb24oZGV2KTsKKwlpZWVlODAyMTFfZnJlZV9odyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7CisJLm5hbWUJPSAicHJpc201NHVzYiIsCisJLmlkX3RhYmxlID0gcDU0dV90YWJsZSwKKwkucHJvYmUgPSBwNTR1X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gcDU0dV9kaXNjb25uZWN0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcDU0dV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmcDU0dV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcDU0dV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnA1NHVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocDU0dV9pbml0KTsKK21vZHVsZV9leGl0KHA1NHVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTR1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0dXNiLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0Y29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTRjb21tb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNkYTQ5YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTRjb21tb24uYworKysgL2Rldi9udWxsCkBAIC0xLDEwMjEgKzAsMCBAQAotCi0vKgotICogQ29tbW9uIGNvZGUgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAicDU0LmgiCi0jaW5jbHVkZSAicDU0Y29tbW9uLmgiCi0KLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2Z0bWFjIFByaXNtNTQgY29tbW9uIGNvZGUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicHJpc201NGNvbW1vbiIpOwotCi12b2lkIHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGJvb3RyZWNfZXhwX2lmICpleHBfaWY7Ci0Jc3RydWN0IGJvb3RyZWMgKmJvb3RyZWM7Ci0JdTMyICpkYXRhID0gKHUzMiAqKWZ3LT5kYXRhOwotCXUzMiAqZW5kX2RhdGEgPSAodTMyICopZnctPmRhdGEgKyAoZnctPnNpemUgPj4gMik7Ci0JdTggKmZ3X3ZlcnNpb24gPSBOVUxMOwotCXNpemVfdCBsZW47Ci0JaW50IGk7Ci0KLQlpZiAocHJpdi0+cnhfc3RhcnQpCi0JCXJldHVybjsKLQotCXdoaWxlIChkYXRhIDwgZW5kX2RhdGEgJiYgKmRhdGEpCi0JCWRhdGErKzsKLQotCXdoaWxlIChkYXRhIDwgZW5kX2RhdGEgJiYgISpkYXRhKQotCQlkYXRhKys7Ci0KLQlib290cmVjID0gKHN0cnVjdCBib290cmVjICopIGRhdGE7Ci0KLQl3aGlsZSAoYm9vdHJlYy0+ZGF0YSA8PSBlbmRfZGF0YSAmJgotCSAgICAgICAoYm9vdHJlYy0+ZGF0YSArIChsZW4gPSBsZTMyX3RvX2NwdShib290cmVjLT5sZW4pKSkgPD0gZW5kX2RhdGEpIHsKLQkJdTMyIGNvZGUgPSBsZTMyX3RvX2NwdShib290cmVjLT5jb2RlKTsKLQkJc3dpdGNoIChjb2RlKSB7Ci0JCWNhc2UgQlJfQ09ERV9DT01QT05FTlRfSUQ6Ci0JCQlzd2l0Y2ggKGJlMzJfdG9fY3B1KCooX19iZTMyICopYm9vdHJlYy0+ZGF0YSkpIHsKLQkJCWNhc2UgRldfRk1BQzoKLQkJCQlwcmludGsoS0VSTl9JTkZPICJwNTQ6IEZyZWVNQUMgZmlybXdhcmVcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGV19MTTIwOgotCQkJCXByaW50ayhLRVJOX0lORk8gInA1NDogTE0yMCBmaXJtd2FyZVxuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZXX0xNODY6Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAicDU0OiBMTTg2IGZpcm13YXJlXG4iKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgRldfTE04NzoKLQkJCQlwcmludGsoS0VSTl9JTkZPICJwNTQ6IExNODcgZmlybXdhcmUgLSBub3Qgc3VwcG9ydGVkIHlldCFcbiIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9JTkZPICJwNTQ6IHVua25vd24gZmlybXdhcmVcbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQlJfQ09ERV9DT01QT05FTlRfVkVSU0lPTjoKLQkJCS8qIDI0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFsbCBmaXJtd2FyZXMgKi8KLQkJCWlmIChzdHJubGVuKCh1bnNpZ25lZCBjaGFyKilib290cmVjLT5kYXRhLCAyNCkgPCAyNCkKLQkJCQlmd192ZXJzaW9uID0gKHVuc2lnbmVkIGNoYXIqKWJvb3RyZWMtPmRhdGE7Ci0JCQlicmVhazsKLQkJY2FzZSBCUl9DT0RFX0RFU0NSOgotCQkJcHJpdi0+cnhfc3RhcnQgPSBsZTMyX3RvX2NwdSgoKF9fbGUzMiAqKWJvb3RyZWMtPmRhdGEpWzFdKTsKLQkJCS8qIEZJWE1FIGFkZCBzYW5pdHkgY2hlY2tpbmcgKi8KLQkJCXByaXYtPnJ4X2VuZCA9IGxlMzJfdG9fY3B1KCgoX19sZTMyICopYm9vdHJlYy0+ZGF0YSlbMl0pIC0gMHgzNTAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlJfQ09ERV9FWFBPU0VEX0lGOgotCQkJZXhwX2lmID0gKHN0cnVjdCBib290cmVjX2V4cF9pZiAqKSBib290cmVjLT5kYXRhOwotCQkJZm9yIChpID0gMDsgaSA8IChsZW4gKiBzaXplb2YoKmV4cF9pZikgLyA0KTsgaSsrKQotCQkJCWlmIChleHBfaWZbaV0uaWZfaWQgPT0gY3B1X3RvX2xlMTYoMHgxYSkpCi0JCQkJCXByaXYtPmZ3X3ZhciA9IGxlMTZfdG9fY3B1KGV4cF9pZltpXS52YXJpYW50KTsKLQkJCWJyZWFrOwotCQljYXNlIEJSX0NPREVfREVQRU5ERU5UX0lGOgotCQkJYnJlYWs7Ci0JCWNhc2UgQlJfQ09ERV9FTkRfT0ZfQlJBOgotCQljYXNlIExFR0FDWV9CUl9DT0RFX0VORF9PRl9CUkE6Ci0JCQllbmRfZGF0YSA9IE5VTEw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWJvb3RyZWMgPSAoc3RydWN0IGJvb3RyZWMgKikmYm9vdHJlYy0+ZGF0YVtsZW5dOwotCX0KLQotCWlmIChmd192ZXJzaW9uKQotCQlwcmludGsoS0VSTl9JTkZPICJwNTQ6IEZXIHJldiAlcyAtIFNvZnRtYWMgcHJvdG9jb2wgJXguJXhcbiIsCi0JCQlmd192ZXJzaW9uLCBwcml2LT5md192YXIgPj4gOCwgcHJpdi0+ZndfdmFyICYgMHhmZik7Ci0KLQlpZiAocHJpdi0+ZndfdmFyID49IDB4MzAwKSB7Ci0JCS8qIEZpcm13YXJlIHN1cHBvcnRzIFFvUywgdXNlIGl0ISAqLwotCQlwcml2LT50eF9zdGF0cy5kYXRhWzBdLmxpbWl0ID0gMzsKLQkJcHJpdi0+dHhfc3RhdHMuZGF0YVsxXS5saW1pdCA9IDQ7Ci0JCXByaXYtPnR4X3N0YXRzLmRhdGFbMl0ubGltaXQgPSAzOwotCQlwcml2LT50eF9zdGF0cy5kYXRhWzNdLmxpbWl0ID0gMTsKLQkJZGV2LT5xdWV1ZXMgPSA0OwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9maXJtd2FyZSk7Ci0KLXN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MF90b19yZXYxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSAqcmV2MTsKLQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjAgKnJldjA7Ci0Jc2l6ZV90IGNkX2xlbiA9IHNpemVvZigqY3VydmVfZGF0YSkgKwotCQkoY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsKnNpemVvZigqcmV2MSkgKyAyKSAqCi0JCSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKLQl1bnNpZ25lZCBpbnQgaSwgajsKLQl2b2lkICpzb3VyY2UsICp0YXJnZXQ7Ci0KLQlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhjZF9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7Ci0Jc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOwotCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7Ci0JCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKLQkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOwotCQkqKChfX2xlMTYgKil0YXJnZXQpID0gKmZyZXE7Ci0JCXRhcmdldCArPSBzaXplb2YoX19sZTE2KTsKLQkJZm9yIChqID0gMDsgaiA8IGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsgaisrKSB7Ci0JCQlyZXYxID0gdGFyZ2V0OwotCQkJcmV2MCA9IHNvdXJjZTsKLQotCQkJcmV2MS0+cmZfcG93ZXIgPSByZXYwLT5yZl9wb3dlcjsKLQkJCXJldjEtPnBhX2RldGVjdG9yID0gcmV2MC0+cGFfZGV0ZWN0b3I7Ci0JCQlyZXYxLT5kYXRhXzY0cWFtID0gcmV2MC0+cGN2OwotCQkJLyogImludmVudCIgdGhlIHBvaW50cyBmb3IgdGhlIG90aGVyIG1vZHVsYXRpb25zICovCi0jZGVmaW5lIFNVQih4LHkpICh1OCkoKHgpIC0gKHkpKSA+ICh4KSA/IDAgOiAoeCkgLSAoeSkKLQkJCXJldjEtPmRhdGFfMTZxYW0gPSBTVUIocmV2MC0+cGN2LCAxMik7Ci0JCQlyZXYxLT5kYXRhX3Fwc2sgID0gU1VCKHJldjEtPmRhdGFfMTZxYW0sIDEyKTsKLQkJCXJldjEtPmRhdGFfYnBzayAgPSBTVUIocmV2MS0+ZGF0YV9xcHNrLCAxMik7Ci0JCQlyZXYxLT5kYXRhX2Jhcmtlcj0gU1VCKHJldjEtPmRhdGFfYnBzaywgMTQpOwotI3VuZGVmIFNVQgotCQkJdGFyZ2V0ICs9IHNpemVvZigqcmV2MSk7Ci0JCQlzb3VyY2UgKz0gc2l6ZW9mKCpyZXYwKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICp3cmFwID0gTlVMTDsKLQlzdHJ1Y3QgcGRhX2VudHJ5ICplbnRyeTsKLQlpbnQgaSA9IDA7Ci0JdW5zaWduZWQgaW50IGRhdGFfbGVuLCBlbnRyeV9sZW47Ci0Jdm9pZCAqdG1wOwotCWludCBlcnI7Ci0KLQl3cmFwID0gKHN0cnVjdCBlZXByb21fcGRhX3dyYXAgKikgZWVwcm9tOwotCWVudHJ5ID0gKHZvaWQgKil3cmFwLT5kYXRhICsgd3JhcC0+bGVuOwotCWkgKz0gMjsKLQlpICs9IGxlMTZfdG9fY3B1KGVudHJ5LT5sZW4pKjI7Ci0Jd2hpbGUgKGkgPCBsZW4pIHsKLQkJZW50cnlfbGVuID0gbGUxNl90b19jcHUoZW50cnktPmxlbik7Ci0JCWRhdGFfbGVuID0gKChlbnRyeV9sZW4gLSAxKSA8PCAxKTsKLQkJc3dpdGNoIChsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpIHsKLQkJY2FzZSBQRFJfTUFDX0FERFJFU1M6Ci0JCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIGVudHJ5LT5kYXRhKTsKLQkJCWJyZWFrOwotCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUzoKLQkJCWlmIChkYXRhX2xlbiA8IDIpIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlpZiAoMiArIGVudHJ5LT5kYXRhWzFdKnNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSA+IGRhdGFfbGVuKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhlbnRyeS0+ZGF0YVsxXSAqCi0JCQkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LCAmZW50cnktPmRhdGFbMl0sCi0JCQkgICAgICAgZW50cnktPmRhdGFbMV0qc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpKTsKLQkJCXByaXYtPm91dHB1dF9saW1pdF9sZW4gPSBlbnRyeS0+ZGF0YVsxXTsKLQkJCWJyZWFrOwotCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQToKLQkJCWlmIChkYXRhX2xlbiA8IHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEpKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJaWYgKCgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopZW50cnktPmRhdGEpLT5jYWxfbWV0aG9kX3JldikgewotCQkJCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKGRhdGFfbGVuLCBHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIXByaXYtPmN1cnZlX2RhdGEpIHsKLQkJCQkJZXJyID0gLUVOT01FTTsKLQkJCQkJZ290byBlcnI7Ci0JCQkJfQotCi0JCQkJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7Ci0JCQl9IGVsc2UgewotCQkJCWVyciA9IHA1NF9jb252ZXJ0X3JldjBfdG9fcmV2MShkZXYsIChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKillbnRyeS0+ZGF0YSk7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQljYXNlIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT046Ci0JCQlwcml2LT5pcV9hdXRvY2FsID0ga21hbGxvYyhkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXByaXYtPmlxX2F1dG9jYWwpIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQltZW1jcHkocHJpdi0+aXFfYXV0b2NhbCwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKLQkJCXByaXYtPmlxX2F1dG9jYWxfbGVuID0gZGF0YV9sZW4gLyBzaXplb2Yoc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5KTsKLQkJCWJyZWFrOwotCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKLQkJCXRtcCA9IGVudHJ5LT5kYXRhOwotCQkJd2hpbGUgKCh1OCAqKXRtcCA8IGVudHJ5LT5kYXRhICsgZGF0YV9sZW4pIHsKLQkJCQlzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKmV4cF9pZiA9IHRtcDsKLQkJCQlpZiAobGUxNl90b19jcHUoZXhwX2lmLT5pZl9pZCkgPT0gMHhGKQotCQkJCQlwcml2LT5yeGh3ID0gZXhwX2lmLT52YXJpYW50ICYgY3B1X3RvX2xlMTYoMHgwNyk7Ci0JCQkJdG1wICs9IHNpemVvZihzdHJ1Y3QgYm9vdHJlY19leHBfaWYpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRDoKLQkJCXByaXYtPnZlcnNpb24gPSAqKHU4ICopKGVudHJ5LT5kYXRhICsgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfRU5EOgotCQkJaSA9IGxlbjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZW50cnkgPSAodm9pZCAqKWVudHJ5ICsgKGVudHJ5X2xlbiArIDEpKjI7Ci0JCWkgKz0gMjsKLQkJaSArPSBlbnRyeV9sZW4qMjsKLQl9Ci0KLQlpZiAoIXByaXYtPmlxX2F1dG9jYWwgfHwgIXByaXYtPm91dHB1dF9saW1pdCB8fCAhcHJpdi0+Y3VydmVfZGF0YSkgewotCQlwcmludGsoS0VSTl9FUlIgInA1NDogbm90IGFsbCByZXF1aXJlZCBlbnRyaWVzIGZvdW5kIGluIGVlcHJvbSFcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotICBlcnI6Ci0JaWYgKHByaXYtPmlxX2F1dG9jYWwpIHsKLQkJa2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7Ci0JCXByaXYtPmlxX2F1dG9jYWwgPSBOVUxMOwotCX0KLQotCWlmIChwcml2LT5vdXRwdXRfbGltaXQpIHsKLQkJa2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKLQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0gTlVMTDsKLQl9Ci0KLQlpZiAocHJpdi0+Y3VydmVfZGF0YSkgewotCQlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKLQkJcHJpdi0+Y3VydmVfZGF0YSA9IE5VTEw7Ci0JfQotCi0JcHJpbnRrKEtFUk5fRVJSICJwNTQ6IGVlcHJvbSBwYXJzZSBmYWlsZWQhXG4iKTsKLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7Ci0KLXZvaWQgcDU0X2ZpbGxfZWVwcm9tX3JlYWRiYWNrKHN0cnVjdCBwNTRfY29udHJvbF9oZHIgKmhkcikKLXsKLQlzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2ICplZXByb21faGRyOwotCi0JaGRyLT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDgwMDApOwotCWhkci0+bGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCplZXByb21faGRyKSArIDB4MjAwMCk7Ci0JaGRyLT50eXBlID0gY3B1X3RvX2xlMTYoUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0spOwotCWhkci0+cmV0cnkxID0gaGRyLT5yZXRyeTIgPSAwOwotCWVlcHJvbV9oZHIgPSAoc3RydWN0IHA1NF9lZXByb21fbG04NiAqKSBoZHItPmRhdGE7Ci0JZWVwcm9tX2hkci0+b2Zmc2V0ID0gMHgwOwotCWVlcHJvbV9oZHItPmxlbiA9IGNwdV90b19sZTE2KDB4MjAwMCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwNTRfZmlsbF9lZXByb21fcmVhZGJhY2spOwotCi1zdGF0aWMgdm9pZCBwNTRfcnhfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHA1NF9yeF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X3J4X2hkciAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0gezB9OwotCXUxNiBmcmVxID0gbGUxNl90b19jcHUoaGRyLT5mcmVxKTsKLQotCXJ4X3N0YXR1cy5zc2kgPSBoZHItPnJzc2k7Ci0Jcnhfc3RhdHVzLnJhdGUgPSBoZHItPnJhdGUgJiAweDFmOyAvKiByZXBvcnQgc2hvcnQgcHJlYW1ibGVzICYgQ0NLIHRvbyAqLwotCXJ4X3N0YXR1cy5jaGFubmVsID0gZnJlcSA9PSAyNDg0ID8gMTQgOiAoZnJlcSAtIDI0MDcpLzU7Ci0Jcnhfc3RhdHVzLmZyZXEgPSBmcmVxOwotCXJ4X3N0YXR1cy5waHltb2RlID0gTU9ERV9JRUVFODAyMTFHOwotCXJ4X3N0YXR1cy5hbnRlbm5hID0gaGRyLT5hbnRlbm5hOwotCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUoaGRyLT50aW1lc3RhbXApOwotCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsKLQotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQlza2JfdHJpbShza2IsIGxlMTZfdG9fY3B1KGhkci0+bGVuKSk7Ci0KLQlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYsIHNrYiwgJnJ4X3N0YXR1cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlubGluZSBwNTRfd2FrZV9mcmVlX3F1ZXVlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGk7Ci0KLQkvKiBpZWVlODAyMTFfc3RhcnRfcXVldWVzIGlzIGdyZWF0IGlmIGFsbCBxdWV1ZXMgYXJlIHJlYWxseSBlbXB0eS4KLQkgKiBCdXQsIHdoYXQgaWYgc29tZSBhcmUgZnVsbD8gKi8KLQotCWZvciAoaSA9IDA7IGkgPCBkZXYtPnF1ZXVlczsgaSsrKQotCQlpZiAocHJpdi0+dHhfc3RhdHMuZGF0YVtpXS5sZW4gPCBwcml2LT50eF9zdGF0cy5kYXRhW2ldLmxpbWl0KQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LCBpKTsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3J4X2ZyYW1lX3NlbnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfY29udHJvbF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgcDU0X2ZyYW1lX3NlbnRfaGRyICpwYXlsb2FkID0gKHN0cnVjdCBwNTRfZnJhbWVfc2VudF9oZHIgKikgaGRyLT5kYXRhOwotCXN0cnVjdCBza19idWZmICplbnRyeSA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBwcml2LT50eF9xdWV1ZS5uZXh0OwotCXUzMiBhZGRyID0gbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpIC0gMHg3MDsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZSA9IE5VTEw7Ci0JdTMyIGZyZWVkID0gMDsKLQl1MzIgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7Ci0KLQl3aGlsZSAoZW50cnkgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7Ci0JCXJhbmdlID0gKHN0cnVjdCBtZW1yZWNvcmQgKikmZW50cnktPmNiOwotCQlpZiAocmFuZ2UtPnN0YXJ0X2FkZHIgPT0gYWRkcikgewotCQkJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgc3RhdHVzID0ge3swfX07Ci0JCQlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICplbnRyeV9oZHI7Ci0JCQlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfYWxsb2NkYXRhICplbnRyeV9kYXRhOwotCQkJaW50IHBhZCA9IDA7Ci0KLQkJCWlmIChlbnRyeS0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpCi0JCQkJZnJlZWQgPSAoKHN0cnVjdCBtZW1yZWNvcmQgKikmZW50cnktPm5leHQtPmNiKS0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKLQkJCWVsc2UKLQkJCQlmcmVlZCA9IHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcjsKLQotCQkJbGFzdF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOwotCQkJX19za2JfdW5saW5rKGVudHJ5LCAmcHJpdi0+dHhfcXVldWUpOwotCQkJaWYgKCFyYW5nZS0+Y29udHJvbCkgewotCQkJCWtmcmVlX3NrYihlbnRyeSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltZW1jcHkoJnN0YXR1cy5jb250cm9sLCByYW5nZS0+Y29udHJvbCwKLQkJCSAgICAgICBzaXplb2Yoc3RhdHVzLmNvbnRyb2wpKTsKLQkJCWtmcmVlKHJhbmdlLT5jb250cm9sKTsKLQkJCXByaXYtPnR4X3N0YXRzLmRhdGFbc3RhdHVzLmNvbnRyb2wucXVldWVdLmxlbi0tOwotCi0JCQllbnRyeV9oZHIgPSAoc3RydWN0IHA1NF9jb250cm9sX2hkciAqKSBlbnRyeS0+ZGF0YTsKLQkJCWVudHJ5X2RhdGEgPSAoc3RydWN0IHA1NF90eF9jb250cm9sX2FsbG9jZGF0YSAqKSBlbnRyeV9oZHItPmRhdGE7Ci0JCQlpZiAoKGVudHJ5X2hkci0+bWFnaWMxICYgY3B1X3RvX2xlMTYoMHg0MDAwKSkgIT0gMCkKLQkJCQlwYWQgPSBlbnRyeV9kYXRhLT5hbGlnblswXTsKLQotCQkJaWYgKCEoc3RhdHVzLmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSkgewotCQkJCWlmICghKHBheWxvYWQtPnN0YXR1cyAmIDB4MDEpKQotCQkJCQlzdGF0dXMuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7Ci0JCQkJZWxzZQotCQkJCQlzdGF0dXMuZXhjZXNzaXZlX3JldHJpZXMgPSAxOwotCQkJfQotCQkJc3RhdHVzLnJldHJ5X2NvdW50ID0gcGF5bG9hZC0+cmV0cmllcyAtIDE7Ci0JCQlzdGF0dXMuYWNrX3NpZ25hbCA9IGxlMTZfdG9fY3B1KHBheWxvYWQtPmFja19yc3NpKTsKLQkJCXNrYl9wdWxsKGVudHJ5LCBzaXplb2YoKmhkcikgKyBwYWQgKyBzaXplb2YoKmVudHJ5X2RhdGEpKTsKLQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIGVudHJ5LCAmc3RhdHVzKTsKLQkJCWJyZWFrOwotCQl9IGVsc2UKLQkJCWxhc3RfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQl9Ci0KLQlpZiAoZnJlZWQgPj0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEICsgMHgxNzAgKwotCSAgICBzaXplb2Yoc3RydWN0IHA1NF9jb250cm9sX2hkcikpCi0JCXA1NF93YWtlX2ZyZWVfcXVldWVzKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9yeF9jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9jb250cm9sX2hkciAqKSBza2ItPmRhdGE7Ci0KLQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhkci0+dHlwZSkpIHsKLQljYXNlIFA1NF9DT05UUk9MX1RZUEVfVFhET05FOgotCQlwNTRfcnhfZnJhbWVfc2VudChkZXYsIHNrYik7Ci0JCWJyZWFrOwotCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9CQlA6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogbm90IGhhbmRsaW5nIDB4JTAyeCB0eXBlIGNvbnRyb2wgZnJhbWVcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBsZTE2X3RvX2NwdShoZHItPnR5cGUpKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKiByZXR1cm5zIHplcm8gaWYgc2tiIGNhbiBiZSByZXVzZWQgKi8KLWludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXU4IHR5cGUgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilza2ItPmRhdGEpKSA+PiA4OwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgMHgwMDoKLQljYXNlIDB4MDE6Ci0JCXA1NF9yeF9kYXRhKGRldiwgc2tiKTsKLQkJcmV0dXJuIC0xOwotCWNhc2UgMHg0ZDoKLQkJLyogVE9ETzogZG8gc29tZXRoaW5nIGJldHRlci4uLiBidXQgdGhlbiBhZ2FpbiwgSSd2ZSBuZXZlciBzZWVuIHRoaXMgaGFwcGVuICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFJlY2VpdmVkIGZhdWx0LiBQcm9iYWJseSBuZWVkIHRvIHJlc3RhcnQgaGFyZHdhcmUgbm93Li5cbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDgwOgotCQlwNTRfcnhfY29udHJvbChkZXYsIHNrYik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gZnJhbWUgUlhlZCAoMHglMDJ4KVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIHR5cGUpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwNTRfcngpOwotCi0vKgotICogU28sIHRoZSBmaXJtd2FyZSBpcyBzb21ld2hhdCBzdHVwaWQgYW5kIGRvZXNuJ3Qga25vdyB3aGF0IHBsYWNlcyBpbiBpdHMKLSAqIG1lbW9yeSBpbmNvbWluZyBkYXRhIHNob3VsZCBnbyB0by4gQnkgcG9raW5nIGFyb3VuZCBpbiB0aGUgZmlybXdhcmUsIHdlCi0gKiBjYW4gZmluZCBzb21lIHVudXNlZCBtZW1vcnkgdG8gdXBsb2FkIG91ciBwYWNrZXRzIHRvLiBIb3dldmVyLCBkYXRhIHRoYXQgd2UKLSAqIHdhbnQgdGhlIGNhcmQgdG8gVFggbmVlZHMgdG8gc3RheSBpbnRhY3QgdW50aWwgdGhlIGNhcmQgaGFzIHRvbGQgdXMgdGhhdAotICogaXQgaXMgZG9uZSB3aXRoIGl0LiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGVtcHR5IHBsYWNlcyB3ZSBjYW4gdXBsb2FkIHRvIGFuZAotICogbWFya3MgYWxsb2NhdGVkIGFyZWFzIGFzIHJlc2VydmVkIGlmIG5lY2Vzc2FyeS4gcDU0X3J4X2ZyYW1lX3NlbnQgZnJlZXMKLSAqIGFsbG9jYXRlZCBhcmVhcy4KLSAqLwotc3RhdGljIHZvaWQgcDU0X2Fzc2lnbl9hZGRyZXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpkYXRhLCB1MzIgbGVuLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnkgPSBwcml2LT50eF9xdWV1ZS5uZXh0OwotCXN0cnVjdCBza19idWZmICp0YXJnZXRfc2tiID0gTlVMTDsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKLQl1MzIgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7Ci0JdTMyIGxhcmdlc3RfaG9sZSA9IDA7Ci0JdTMyIHRhcmdldF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgbGVmdDsKLQlsZW4gPSAobGVuICsgMHgxNzAgKyAzKSAmIH4weDM7IC8qIDB4NzAgaGVhZHJvb20sIDB4MTAwIHRhaWxyb29tICovCi0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCWxlZnQgPSBza2JfcXVldWVfbGVuKCZwcml2LT50eF9xdWV1ZSk7Ci0Jd2hpbGUgKGxlZnQtLSkgewotCQl1MzIgaG9sZV9zaXplOwotCQlyYW5nZSA9IChzdHJ1Y3QgbWVtcmVjb3JkICopJmVudHJ5LT5jYjsKLQkJaG9sZV9zaXplID0gcmFuZ2UtPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7Ci0JCWlmICghdGFyZ2V0X3NrYiAmJiBob2xlX3NpemUgPj0gbGVuKSB7Ci0JCQl0YXJnZXRfc2tiID0gZW50cnktPnByZXY7Ci0JCQlob2xlX3NpemUgLT0gbGVuOwotCQkJdGFyZ2V0X2FkZHIgPSBsYXN0X2FkZHI7Ci0JCX0KLQkJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgaG9sZV9zaXplKTsKLQkJbGFzdF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOwotCQllbnRyeSA9IGVudHJ5LT5uZXh0OwotCX0KLQlpZiAoIXRhcmdldF9za2IgJiYgcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyID49IGxlbikgewotCQl0YXJnZXRfc2tiID0gcHJpdi0+dHhfcXVldWUucHJldjsKLQkJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyIC0gbGVuKTsKLQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnByaXYtPnR4X3F1ZXVlKSkgewotCQkJcmFuZ2UgPSAoc3RydWN0IG1lbXJlY29yZCAqKSZ0YXJnZXRfc2tiLT5jYjsKLQkJCXRhcmdldF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOwotCQl9Ci0JfSBlbHNlCi0JCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcik7Ci0KLQlpZiAoc2tiKSB7Ci0JCXJhbmdlID0gKHN0cnVjdCBtZW1yZWNvcmQgKikmc2tiLT5jYjsKLQkJcmFuZ2UtPnN0YXJ0X2FkZHIgPSB0YXJnZXRfYWRkcjsKLQkJcmFuZ2UtPmVuZF9hZGRyID0gdGFyZ2V0X2FkZHIgKyBsZW47Ci0JCXJhbmdlLT5jb250cm9sID0gY29udHJvbDsKLQkJX19za2JfcXVldWVfYWZ0ZXIoJnByaXYtPnR4X3F1ZXVlLCB0YXJnZXRfc2tiLCBza2IpOwotCQlpZiAobGFyZ2VzdF9ob2xlIDwgSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEICsgMHgxNzAgKwotCQkJCSAgIHNpemVvZihzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyKSkKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhkZXYpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0KLQlkYXRhLT5yZXFfaWQgPSBjcHVfdG9fbGUzMih0YXJnZXRfYWRkciArIDB4NzApOwotfQotCi1zdGF0aWMgaW50IHA1NF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHNfZGF0YSAqY3VycmVudF9xdWV1ZTsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpoZHI7Ci0Jc3RydWN0IHA1NF90eF9jb250cm9sX2FsbG9jZGF0YSAqdHhoZHI7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sX2NvcHk7Ci0Jc2l6ZV90IHBhZGRpbmcsIGxlbjsKLQl1OCByYXRlOwotCi0JY3VycmVudF9xdWV1ZSA9ICZwcml2LT50eF9zdGF0cy5kYXRhW2NvbnRyb2wtPnF1ZXVlXTsKLQlpZiAodW5saWtlbHkoY3VycmVudF9xdWV1ZS0+bGVuID4gY3VycmVudF9xdWV1ZS0+bGltaXQpKQotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JY3VycmVudF9xdWV1ZS0+bGVuKys7Ci0JY3VycmVudF9xdWV1ZS0+Y291bnQrKzsKLQlpZiAoY3VycmVudF9xdWV1ZS0+bGVuID09IGN1cnJlbnRfcXVldWUtPmxpbWl0KQotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKLQotCXBhZGRpbmcgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhIC0gKHNpemVvZigqaGRyKSArIHNpemVvZigqdHhoZHIpKSkgJiAzOwotCWxlbiA9IHNrYi0+bGVuOwotCi0JY29udHJvbF9jb3B5ID0ga21hbGxvYyhzaXplb2YoKmNvbnRyb2wpLCBHRlBfQVRPTUlDKTsKLQlpZiAoY29udHJvbF9jb3B5KQotCQltZW1jcHkoY29udHJvbF9jb3B5LCBjb250cm9sLCBzaXplb2YoKmNvbnRyb2wpKTsKLQotCXR4aGRyID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF9hbGxvY2RhdGEgKikKLQkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCp0eGhkcikgKyBwYWRkaW5nKTsKLQloZHIgPSAoc3RydWN0IHA1NF9jb250cm9sX2hkciAqKSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0KLQlpZiAocGFkZGluZykKLQkJaGRyLT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDQwMTApOwotCWVsc2UKLQkJaGRyLT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDAwMTApOwotCWhkci0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKLQloZHItPnR5cGUgPSAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSA/IDAgOiBjcHVfdG9fbGUxNigxKTsKLQloZHItPnJldHJ5MSA9IGhkci0+cmV0cnkyID0gY29udHJvbC0+cmV0cnlfbGltaXQ7Ci0JcDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgc2tiLCBoZHIsIHNrYi0+bGVuLCBjb250cm9sX2NvcHkpOwotCi0JbWVtc2V0KHR4aGRyLT53ZXBfa2V5LCAweDAsIDE2KTsKLQl0eGhkci0+cGFkZGluZyA9IDA7Ci0JdHhoZHItPnBhZGRpbmcyID0gMDsKLQotCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciBhbHRlcm5hdGUgcmV0cnkgVFggcmF0ZXMgKi8KLQlyYXRlID0gY29udHJvbC0+dHhfcmF0ZTsKLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMpCi0JCXJhdGUgfD0gMHg0MDsKLQllbHNlIGlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpCi0JCXJhdGUgfD0gMHgyMDsKLQltZW1zZXQodHhoZHItPnJhdGVzZXQsIHJhdGUsIDgpOwotCXR4aGRyLT53ZXBfa2V5X3ByZXNlbnQgPSAwOwotCXR4aGRyLT53ZXBfa2V5X2xlbiA9IDA7Ci0JdHhoZHItPmZyYW1lX3R5cGUgPSBjcHVfdG9fbGUzMihjb250cm9sLT5xdWV1ZSArIDQpOwotCXR4aGRyLT5tYWdpYzQgPSAwOwotCXR4aGRyLT5hbnRlbm5hID0gKGNvbnRyb2wtPmFudGVubmFfc2VsX3R4ID09IDApID8KLQkJMiA6IGNvbnRyb2wtPmFudGVubmFfc2VsX3R4IC0gMTsKLQl0eGhkci0+b3V0cHV0X3Bvd2VyID0gMHg3ZjsgLy8gSFcgTWF4aW11bQotCXR4aGRyLT5tYWdpYzUgPSAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSA/Ci0JCTAgOiAoKHJhdGUgPiAweDMpID8gY3B1X3RvX2xlMzIoMHgzMykgOiBjcHVfdG9fbGUzMigweDIzKSk7Ci0JaWYgKHBhZGRpbmcpCi0JCXR4aGRyLT5hbGlnblswXSA9IHBhZGRpbmc7Ci0KLQlwcml2LT50eChkZXYsIGhkciwgc2tiLT5sZW4sIDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9zZXRfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IGZpbHRlcl90eXBlLAotCQkJICBjb25zdCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCB1OCBhbnRlbm5hLAotCQkJICB1MzIgbWFnaWMzLCB1MzIgbWFnaWM4LCB1MzIgbWFnaWM5KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfY29udHJvbF9oZHIgKmhkcjsKLQlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfZmlsdGVyICpmaWx0ZXI7Ci0KLQloZHIgPSBremFsbG9jKHNpemVvZigqaGRyKSArIHNpemVvZigqZmlsdGVyKSArCi0JCSAgICAgIHByaXYtPnR4X2hkcl9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghaGRyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWhkciA9ICh2b2lkICopaGRyICsgcHJpdi0+dHhfaGRyX2xlbjsKLQotCWZpbHRlciA9IChzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfZmlsdGVyICopIGhkci0+ZGF0YTsKLQloZHItPm1hZ2ljMSA9IGNwdV90b19sZTE2KDB4ODAwMSk7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKmZpbHRlcikpOwotCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpmaWx0ZXIpLCBOVUxMKTsKLQloZHItPnR5cGUgPSBjcHVfdG9fbGUxNihQNTRfQ09OVFJPTF9UWVBFX0ZJTFRFUl9TRVQpOwotCi0JZmlsdGVyLT5maWx0ZXJfdHlwZSA9IGNwdV90b19sZTE2KGZpbHRlcl90eXBlKTsKLQltZW1jcHkoZmlsdGVyLT5kc3QsIGRzdCwgRVRIX0FMRU4pOwotCWlmICghc3JjKQotCQltZW1zZXQoZmlsdGVyLT5zcmMsIH4wLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkoZmlsdGVyLT5zcmMsIHNyYywgRVRIX0FMRU4pOwotCWZpbHRlci0+YW50ZW5uYSA9IGFudGVubmE7Ci0JZmlsdGVyLT5tYWdpYzMgPSBjcHVfdG9fbGUzMihtYWdpYzMpOwotCWZpbHRlci0+cnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtPnJ4X2VuZCk7Ci0JZmlsdGVyLT5tYXhfcnggPSBjcHVfdG9fbGUxNigweDA2MjApOwkvKiBGSVhNRTogZm9yIHVzYiB2ZXIgMS4uIG1heWJlICovCi0JZmlsdGVyLT5yeGh3ID0gcHJpdi0+cnhodzsKLQlmaWx0ZXItPm1hZ2ljOCA9IGNwdV90b19sZTE2KG1hZ2ljOCk7Ci0JZmlsdGVyLT5tYWdpYzkgPSBjcHVfdG9fbGUxNihtYWdpYzkpOwotCi0JcHJpdi0+dHgoZGV2LCBoZHIsIHNpemVvZigqaGRyKSArIHNpemVvZigqZmlsdGVyKSwgMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3NldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgX19sZTE2IGZyZXEpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyOwotCXN0cnVjdCBwNTRfdHhfY29udHJvbF9jaGFubmVsICpjaGFuOwotCXVuc2lnbmVkIGludCBpOwotCXNpemVfdCBwYXlsb2FkX2xlbiA9IHNpemVvZigqY2hhbikgKyBzaXplb2YodTMyKSoyICsKLQkJCSAgICAgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSAqCi0JCQkgICAgIHByaXYtPmN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKLQl2b2lkICplbnRyeTsKLQotCWhkciA9IGt6YWxsb2Moc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4gKwotCQkgICAgICBwcml2LT50eF9oZHJfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWhkcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQloZHIgPSAodm9pZCAqKWhkciArIHByaXYtPnR4X2hkcl9sZW47Ci0KLQljaGFuID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF9jaGFubmVsICopIGhkci0+ZGF0YTsKLQotCWhkci0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHg4MDAxKTsKLQloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqY2hhbikpOwotCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KFA1NF9DT05UUk9MX1RZUEVfQ0hBTk5FTF9DSEFOR0UpOwotCXA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIE5VTEwsIGhkciwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4sIE5VTEwpOwotCi0JY2hhbi0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHgxKTsKLQljaGFuLT5tYWdpYzIgPSBjcHVfdG9fbGUxNigweDApOwotCi0JZm9yIChpID0gMDsgaSA8IHByaXYtPmlxX2F1dG9jYWxfbGVuOyBpKyspIHsKLQkJaWYgKHByaXYtPmlxX2F1dG9jYWxbaV0uZnJlcSAhPSBmcmVxKQotCQkJY29udGludWU7Ci0KLQkJbWVtY3B5KCZjaGFuLT5pcV9hdXRvY2FsLCAmcHJpdi0+aXFfYXV0b2NhbFtpXSwKLQkJICAgICAgIHNpemVvZigqcHJpdi0+aXFfYXV0b2NhbCkpOwotCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gcHJpdi0+aXFfYXV0b2NhbF9sZW4pCi0JCWdvdG8gZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IHByaXYtPm91dHB1dF9saW1pdF9sZW47IGkrKykgewotCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0W2ldLmZyZXEgIT0gZnJlcSkKLQkJCWNvbnRpbnVlOwotCi0JCWNoYW4tPnZhbF9iYXJrZXIgPSAweDM4OwotCQljaGFuLT52YWxfYnBzayA9IHByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfYnBzazsKLQkJY2hhbi0+dmFsX3Fwc2sgPSBwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsX3Fwc2s7Ci0JCWNoYW4tPnZhbF8xNnFhbSA9IHByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfMTZxYW07Ci0JCWNoYW4tPnZhbF82NHFhbSA9IHByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfNjRxYW07Ci0JCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBwcml2LT5vdXRwdXRfbGltaXRfbGVuKQotCQlnb3RvIGVycjsKLQotCWNoYW4tPnBhX3BvaW50c19wZXJfY3VydmUgPSBwcml2LT5jdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7Ci0KLQllbnRyeSA9IHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKLQkJaWYgKCooKF9fbGUxNiAqKWVudHJ5KSAhPSBmcmVxKSB7Ci0JCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKLQkJCWVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEpICoKLQkJCQkgY2hhbi0+cGFfcG9pbnRzX3Blcl9jdXJ2ZTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZW50cnkgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCW1lbWNweShjaGFuLT5jdXJ2ZV9kYXRhLCBlbnRyeSwgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSAqCi0JCSAgICAgICBjaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlKTsKLQkJYnJlYWs7Ci0JfQotCi0JbWVtY3B5KGhkci0+ZGF0YSArIHBheWxvYWRfbGVuIC0gNCwgJmNoYW4tPnZhbF9icHNrLCA0KTsKLQotCXByaXYtPnR4KGRldiwgaGRyLCBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbiwgMSk7Ci0JcmV0dXJuIDA7Ci0KLSBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogZnJlcXVlbmN5IGNoYW5nZSBmYWlsZWRcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCWtmcmVlKGhkcik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3NldF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IG1vZGUsIGludCBsaW5rLCBpbnQgYWN0KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfY29udHJvbF9oZHIgKmhkcjsKLQlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfbGVkICpsZWQ7Ci0KLQloZHIgPSBremFsbG9jKHNpemVvZigqaGRyKSArIHNpemVvZigqbGVkKSArCi0JCSAgICAgIHByaXYtPnR4X2hkcl9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghaGRyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWhkciA9ICh2b2lkICopaGRyICsgcHJpdi0+dHhfaGRyX2xlbjsKLQloZHItPm1hZ2ljMSA9IGNwdV90b19sZTE2KDB4ODAwMSk7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKmxlZCkpOwotCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KFA1NF9DT05UUk9MX1RZUEVfTEVEKTsKLQlwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBOVUxMLCBoZHIsIHNpemVvZigqaGRyKSArIHNpemVvZigqbGVkKSwgTlVMTCk7Ci0KLQlsZWQgPSAoc3RydWN0IHA1NF90eF9jb250cm9sX2xlZCAqKSBoZHItPmRhdGE7Ci0JbGVkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JbGVkLT5sZWRfcGVybWFuZW50ID0gY3B1X3RvX2xlMTYobGluayk7Ci0JbGVkLT5sZWRfdGVtcG9yYXJ5ID0gY3B1X3RvX2xlMTYoYWN0KTsKLQlsZWQtPmR1cmF0aW9uID0gY3B1X3RvX2xlMTYoMTAwMCk7Ci0KLQlwcml2LT50eChkZXYsIGhkciwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpsZWQpLCAxKTsKLQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFA1NF9TRVRfUVVFVUUocXVldWUsIGFpX2ZzLCBjd19taW4sIGN3X21heCwgYnVyc3QpCVwKLWRvIHsJIAkJCQkJCQlcCi0JcXVldWUuYWlmcyA9IGNwdV90b19sZTE2KGFpX2ZzKTsJCQlcCi0JcXVldWUuY3dtaW4gPSBjcHVfdG9fbGUxNihjd19taW4pOwkJCVwKLQlxdWV1ZS5jd21heCA9IGNwdV90b19sZTE2KGN3X21heCk7CQkJXAotCXF1ZXVlLnR4b3AgPSAoYnVyc3QgPT0gMCkgPyAJCQkJXAotCQkwIDogY3B1X3RvX2xlMTYoKGJ1cnN0ICogMTAwKSAvIDMyICsgMSk7CVwKLX0gd2hpbGUoMCkKLQotc3RhdGljIHZvaWQgcDU0X2luaXRfdmRjZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyOwotCXN0cnVjdCBwNTRfdHhfY29udHJvbF92ZGNmICp2ZGNmOwotCi0JLyogYWxsIFVTQiBWMSBhZGFwdGVycyBuZWVkIGEgZXh0cmEgaGVhZHJvb20gKi8KLQloZHIgPSAodm9pZCAqKXByaXYtPmNhY2hlZF92ZGNmICsgcHJpdi0+dHhfaGRyX2xlbjsKLQloZHItPm1hZ2ljMSA9IGNwdV90b19sZTE2KDB4ODAwMSk7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnZkY2YpKTsKLQloZHItPnR5cGUgPSBjcHVfdG9fbGUxNihQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQpOwotCWhkci0+cmVxX2lkID0gY3B1X3RvX2xlMzIocHJpdi0+cnhfc3RhcnQpOwotCi0JdmRjZiA9IChzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfdmRjZiAqKSBoZHItPmRhdGE7Ci0KLQlQNTRfU0VUX1FVRVVFKHZkY2YtPnF1ZXVlWzBdLCAweDAwMDIsIDB4MDAwMywgMHgwMDA3LCAweDAwMGYpOwotCVA1NF9TRVRfUVVFVUUodmRjZi0+cXVldWVbMV0sIDB4MDAwMiwgMHgwMDA3LCAweDAwMGYsIDB4MDAxZSk7Ci0JUDU0X1NFVF9RVUVVRSh2ZGNmLT5xdWV1ZVsyXSwgMHgwMDAyLCAweDAwMGYsIDB4MDNmZiwgMHgwMDE0KTsKLQlQNTRfU0VUX1FVRVVFKHZkY2YtPnF1ZXVlWzNdLCAweDAwMDcsIDB4MDAwZiwgMHgwM2ZmLCAweDAwMDApOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfc2V0X3ZkY2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfY29udHJvbF9oZHIgKmhkcjsKLQlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfdmRjZiAqdmRjZjsKLQotCWhkciA9ICh2b2lkICopcHJpdi0+Y2FjaGVkX3ZkY2YgKyBwcml2LT50eF9oZHJfbGVuOwotCi0JcDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgTlVMTCwgaGRyLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKnZkY2YpLCBOVUxMKTsKLQotCXZkY2YgPSAoc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YgKikgaGRyLT5kYXRhOwotCi0JaWYgKGRldi0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSkgewotCQl2ZGNmLT5zbG90dGltZSA9IDk7Ci0JCXZkY2YtPm1hZ2ljMSA9IDB4MDA7Ci0JCXZkY2YtPm1hZ2ljMiA9IDB4MTA7Ci0JfSBlbHNlIHsKLQkJdmRjZi0+c2xvdHRpbWUgPSAyMDsKLQkJdmRjZi0+bWFnaWMxID0gMHgwYTsKLQkJdmRjZi0+bWFnaWMyID0gMHgwNjsKLQl9Ci0KLQkvKiAoc2VlIHByaXNtNTQvaXNsX29pZC5oIGZvciBmdXJ0aGVyIGRldGFpbHMpICovCi0JdmRjZi0+ZnJhbWVidXJzdCA9IGNwdV90b19sZTE2KDApOwotCi0JcHJpdi0+dHgoZGV2LCBoZHIsIHNpemVvZigqaGRyKSArIHNpemVvZigqdmRjZiksIDApOwotfQotCi1zdGF0aWMgaW50IHA1NF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGVycjsKLQotCWVyciA9IHByaXYtPm9wZW4oZGV2KTsKLQlpZiAoIWVycikKLQkJcHJpdi0+bW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX01OVFI7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT50eF9xdWV1ZSkpKSB7Ci0JCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlID0gKHN0cnVjdCBtZW1yZWNvcmQgKikmc2tiLT5jYjsKLQkJaWYgKHJhbmdlLT5jb250cm9sKQotCQkJa2ZyZWUocmFuZ2UtPmNvbnRyb2wpOwotCQlrZnJlZV9za2Ioc2tiKTsKLQl9Ci0JcHJpdi0+c3RvcChkZXYpOwotCXByaXYtPm1vZGUgPSBJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElEOwotfQotCi1zdGF0aWMgaW50IHA1NF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQlpZiAocHJpdi0+bW9kZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKLQkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0KLQlwNTRfc2V0X2ZpbHRlcihkZXYsIDAsIHByaXYtPm1hY19hZGRyLCBOVUxMLCAwLCAxLCAwLCAweEY2NDIpOwotCXA1NF9zZXRfZmlsdGVyKGRldiwgMCwgcHJpdi0+bWFjX2FkZHIsIE5VTEwsIDEsIDAsIDAsIDB4RjY0Mik7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKLQkJcDU0X3NldF9maWx0ZXIoZGV2LCAxLCBwcml2LT5tYWNfYWRkciwgTlVMTCwgMCwgMHgxNUYsIDB4MUY0LCAwKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7CS8qIGltcG9zc2libGUgKi8KLQkJYnJlYWs7Ci0JfQotCi0JcDU0X3NldF9sZWRzKGRldiwgMSwgMCwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlwcml2LT5tb2RlID0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUjsKLQltZW1zZXQocHJpdi0+bWFjX2FkZHIsIDAsIEVUSF9BTEVOKTsKLQlwNTRfc2V0X2ZpbHRlcihkZXYsIDAsIHByaXYtPm1hY19hZGRyLCBOVUxMLCAyLCAwLCAwLCAwKTsKLX0KLQotc3RhdGljIGludCBwNTRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBwNTRfc2V0X2ZyZXEoZGV2LCBjcHVfdG9fbGUxNihjb25mLT5mcmVxKSk7Ci0JcDU0X3NldF92ZGNmKGRldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwNTRfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQlwNTRfc2V0X2ZpbHRlcihkZXYsIDAsIHByaXYtPm1hY19hZGRyLCBjb25mLT5ic3NpZCwgMCwgMSwgMCwgMHhGNjQyKTsKLQlwNTRfc2V0X2ZpbHRlcihkZXYsIDAsIHByaXYtPm1hY19hZGRyLCBjb25mLT5ic3NpZCwgMiwgMCwgMCwgMCk7Ci0JcDU0X3NldF9sZWRzKGRldiwgMSwgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKSwgMCk7Ci0JbWVtY3B5KHByaXYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCi0JKnRvdGFsX2ZsYWdzICY9IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQlwNTRfc2V0X2ZpbHRlcihkZXYsIDAsIHByaXYtPm1hY19hZGRyLAotCQkJCSAgICAgICBOVUxMLCAyLCAwLCAwLCAwKTsKLQkJZWxzZQotCQkJcDU0X3NldF9maWx0ZXIoZGV2LCAwLCBwcml2LT5tYWNfYWRkciwKLQkJCQkgICAgICAgcHJpdi0+YnNzaWQsIDIsIDAsIDAsIDApOwotCX0KLX0KLQotc3RhdGljIGludCBwNTRfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBxdWV1ZSwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YgKnZkY2Y7Ci0KLQl2ZGNmID0gKHN0cnVjdCBwNTRfdHhfY29udHJvbF92ZGNmICopKCgoc3RydWN0IHA1NF9jb250cm9sX2hkciAqKQotCQkoKHZvaWQgKilwcml2LT5jYWNoZWRfdmRjZiArIHByaXYtPnR4X2hkcl9sZW4pKS0+ZGF0YSk7Ci0KLQlpZiAoKHBhcmFtcykgJiYgISgocXVldWUgPCAwKSB8fCAocXVldWUgPiA0KSkpIHsKLQkJUDU0X1NFVF9RVUVVRSh2ZGNmLT5xdWV1ZVtxdWV1ZV0sIHBhcmFtcy0+YWlmcywKLQkJCXBhcmFtcy0+Y3dfbWluLCBwYXJhbXMtPmN3X21heCwgcGFyYW1zLT5idXJzdF90aW1lKTsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwNTRfc2V0X3ZkY2YoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQkvKiBUT0RPICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5xdWV1ZXM7IGkrKykKLQkJbWVtY3B5KCZzdGF0cy0+ZGF0YVtpXSwgJnByaXYtPnR4X3N0YXRzLmRhdGFbaV0sCi0JCQlzaXplb2Yoc3RhdHMtPmRhdGFbaV0pKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcDU0X29wcyA9IHsKLQkudHgJCQk9IHA1NF90eCwKLQkuc3RhcnQJCQk9IHA1NF9zdGFydCwKLQkuc3RvcAkJCT0gcDU0X3N0b3AsCi0JLmFkZF9pbnRlcmZhY2UJCT0gcDU0X2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UJPSBwNTRfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnCQkJPSBwNTRfY29uZmlnLAotCS5jb25maWdfaW50ZXJmYWNlCT0gcDU0X2NvbmZpZ19pbnRlcmZhY2UsCi0JLmNvbmZpZ3VyZV9maWx0ZXIJPSBwNTRfY29uZmlndXJlX2ZpbHRlciwKLQkuY29uZl90eAkJPSBwNTRfY29uZl90eCwKLQkuZ2V0X3N0YXRzCQk9IHA1NF9nZXRfc3RhdHMsCi0JLmdldF90eF9zdGF0cwkJPSBwNTRfZ2V0X3R4X3N0YXRzCi19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2h3ICpwNTRfaW5pdF9jb21tb24oc2l6ZV90IHByaXZfZGF0YV9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2OwotCWludCBpOwotCi0JZGV2ID0gaWVlZTgwMjExX2FsbG9jX2h3KHByaXZfZGF0YV9sZW4sICZwNTRfb3BzKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwcml2ID0gZGV2LT5wcml2OwotCXByaXYtPm1vZGUgPSBJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElEOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4X3F1ZXVlKTsKLQltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIHA1NF9jaGFubmVscywgc2l6ZW9mKHA1NF9jaGFubmVscykpOwotCW1lbWNweShwcml2LT5yYXRlcywgcDU0X3JhdGVzLCBzaXplb2YocDU0X3JhdGVzKSk7Ci0JcHJpdi0+bW9kZXNbMV0ubW9kZSA9IE1PREVfSUVFRTgwMjExQjsKLQlwcml2LT5tb2Rlc1sxXS5udW1fcmF0ZXMgPSA0OwotCXByaXYtPm1vZGVzWzFdLnJhdGVzID0gcHJpdi0+cmF0ZXM7Ci0JcHJpdi0+bW9kZXNbMV0ubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShwNTRfY2hhbm5lbHMpOwotCXByaXYtPm1vZGVzWzFdLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7Ci0JcHJpdi0+bW9kZXNbMF0ubW9kZSA9IE1PREVfSUVFRTgwMjExRzsKLQlwcml2LT5tb2Rlc1swXS5udW1fcmF0ZXMgPSBBUlJBWV9TSVpFKHA1NF9yYXRlcyk7Ci0JcHJpdi0+bW9kZXNbMF0ucmF0ZXMgPSBwcml2LT5yYXRlczsKLQlwcml2LT5tb2Rlc1swXS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHA1NF9jaGFubmVscyk7Ci0JcHJpdi0+bW9kZXNbMF0uY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKLQlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8IC8qIG5vdCBzdXJlICovCi0JCSAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOwotCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CS8qIFRPRE86IGZpbmQgYWN0dWFsIHZhbHVlICovCi0JZGV2LT5tYXhfcnNzaSA9IDEyNzsKLQotCXByaXYtPnR4X3N0YXRzLmRhdGFbMF0ubGltaXQgPSA1OwotCWRldi0+cXVldWVzID0gMTsKLQotCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHA1NF9jb250cm9sX2hkcikgKyA0ICsKLQkJCQkgc2l6ZW9mKHN0cnVjdCBwNTRfdHhfY29udHJvbF9hbGxvY2RhdGEpOwotCi0gICAgICAgIHByaXYtPmNhY2hlZF92ZGNmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA1NF90eF9jb250cm9sX3ZkY2YpICsKLSAgICAgICAgICAgICAgcHJpdi0+dHhfaGRyX2xlbiArIHNpemVvZihzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF92ZGNmKSB7Ci0JCWllZWU4MDIxMV9mcmVlX2h3KGRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXA1NF9pbml0X3ZkY2YoZGV2KTsKLQotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJaWYgKGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoZGV2LCAmcHJpdi0+bW9kZXNbaV0pKSB7Ci0JCQlrZnJlZShwcml2LT5jYWNoZWRfdmRjZik7Ci0JCQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZGV2OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X2luaXRfY29tbW9uKTsKLQotdm9pZCBwNTRfZnJlZV9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWtmcmVlKHByaXYtPmlxX2F1dG9jYWwpOwotCWtmcmVlKHByaXYtPm91dHB1dF9saW1pdCk7Ci0Ja2ZyZWUocHJpdi0+Y3VydmVfZGF0YSk7Ci0Ja2ZyZWUocHJpdi0+Y2FjaGVkX3ZkY2YpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X2ZyZWVfY29tbW9uKTsKLQotc3RhdGljIGludCBfX2luaXQgcDU0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHA1NF9leGl0KHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KHA1NF9pbml0KTsKLW1vZHVsZV9leGl0KHA1NF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NGNvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0Y29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjEzMzQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0Y29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotI2lmbmRlZiBQUklTTTU0Q09NTU9OX0gKLSNkZWZpbmUgUFJJU001NENPTU1PTl9ICi0KLS8qCi0gKiBDb21tb24gY29kZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbWFjODAyMTEgUHJpc201NCBkcml2ZXJzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KLSAqIENvcHlyaWdodCAoYykgMjAwNywgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgotICoKLSAqIEJhc2VkIG9uIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgotICogQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLXN0cnVjdCBib290cmVjIHsKLQlfX2xlMzIgY29kZTsKLQlfX2xlMzIgbGVuOwotCXUzMiBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IGJvb3RyZWNfZXhwX2lmIHsKLQlfX2xlMTYgcm9sZTsKLQlfX2xlMTYgaWZfaWQ7Ci0JX19sZTE2IHZhcmlhbnQ7Ci0JX19sZTE2IGJ0bV9jb21wYXQ7Ci0JX19sZTE2IHRvcF9jb21wYXQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jZGVmaW5lIEJSX0NPREVfTUlOCQkJMHg4MDAwMDAwMAotI2RlZmluZSBCUl9DT0RFX0NPTVBPTkVOVF9JRAkJMHg4MDAwMDAwMQotI2RlZmluZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OCTB4ODAwMDAwMDIKLSNkZWZpbmUgQlJfQ09ERV9ERVBFTkRFTlRfSUYJCTB4ODAwMDAwMDMKLSNkZWZpbmUgQlJfQ09ERV9FWFBPU0VEX0lGCQkweDgwMDAwMDA0Ci0jZGVmaW5lIEJSX0NPREVfREVTQ1IJCQkweDgwMDAwMTAxCi0jZGVmaW5lIEJSX0NPREVfTUFYCQkJMHg4RkZGRkZGRgotI2RlZmluZSBCUl9DT0RFX0VORF9PRl9CUkEJCTB4RkYwMDAwRkYKLSNkZWZpbmUgTEVHQUNZX0JSX0NPREVfRU5EX09GX0JSQQkweEZGRkZGRkZGCi0KLSNkZWZpbmUgRldfRk1BQyAweDQ2NGQ0MTQzCi0jZGVmaW5lIEZXX0xNODYgMHg0YzRkMzgzNgotI2RlZmluZSBGV19MTTg3IDB4NGM0ZDM4MzcKLSNkZWZpbmUgRldfTE0yMCAweDRjNGQzMjMwCi0KLS8qIFBEQSBkZWZpbmVzIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24gKHRha2VuIGZyb20gaXNsc21fcGRhLmgpICovCi0KLXN0cnVjdCBwZGFfZW50cnkgewotCV9fbGUxNiBsZW47CS8qIGluY2x1ZGVzIGJvdGggY29kZSBhbmQgZGF0YSAqLwotCV9fbGUxNiBjb2RlOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGVlcHJvbV9wZGFfd3JhcCB7Ci0JdTMyIG1hZ2ljOwotCXUxNiBwYWQ7Ci0JdTE2IGxlbjsKLQl1MzIgYXJtX29wY29kZTsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSB7Ci0gICAgICAgIF9fbGUxNiBmcmVxOwotICAgICAgICBfX2xlMTYgaXFfcGFyYW1bNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCB7Ci0JX19sZTE2IGZyZXE7Ci0JdTggdmFsX2Jwc2s7Ci0JdTggdmFsX3Fwc2s7Ci0JdTggdmFsXzE2cWFtOwotCXU4IHZhbF82NHFhbTsKLQl1OCByYXRlX3NldF9tYXNrOwotCXU4IHJhdGVfc2V0X3NpemU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwIHsKLQl1OCByZl9wb3dlcjsKLQl1OCBwYV9kZXRlY3RvcjsKLQl1OCBwY3Y7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxIHsKLQl1OCByZl9wb3dlcjsKLQl1OCBwYV9kZXRlY3RvcjsKLQl1OCBkYXRhX2JhcmtlcjsKLQl1OCBkYXRhX2Jwc2s7Ci0JdTggZGF0YV9xcHNrOwotCXU4IGRhdGFfMTZxYW07Ci0JdTggZGF0YV82NHFhbTsKLQl1OCBwYWRkaW5nOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSB7Ci0JdTggY2FsX21ldGhvZF9yZXY7Ci0JdTggY2hhbm5lbHM7Ci0JdTggcG9pbnRzX3Blcl9jaGFubmVsOwotCXU4IHBhZGRpbmc7Ci0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogdGhpcyBkZWZpbmVzIHRoZSBQRFIgY29kZXMgdXNlZCB0byBidWlsZCBQREFzIGFzIGRlZmluZWQgaW4gZG9jdW1lbnQKLSAqIG51bWJlciA1NTMxNTUuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1pcnJvcnMgdmVyc2lvbiAxLjEgb2YgdGhlCi0gKiBkb2N1bWVudCBhbmQgbGlzdHMgb25seSBQRFJzIHN1cHBvcnRlZCBieSB0aGUgQVJNIHBsYXRmb3JtLgotICovCi0KLS8qIGNvbW1vbiBhbmQgY2hvaWNlIHJhbmdlICgweDAwMDAgLSAweDBmZmYpICovCi0jZGVmaW5lIFBEUl9FTkQJCQkJCTB4MDAwMAotI2RlZmluZSBQRFJfTUFOVUZBQ1RVUklOR19QQVJUX05VTUJFUgkJMHgwMDAxCi0jZGVmaW5lIFBEUl9QREFfVkVSU0lPTgkJCQkweDAwMDIKLSNkZWZpbmUgUERSX05JQ19TRVJJQUxfTlVNQkVSCQkJMHgwMDAzCi0KLSNkZWZpbmUgUERSX01BQ19BRERSRVNTCQkJCTB4MDEwMQotI2RlZmluZSBQRFJfUkVHVUxBVE9SWV9ET01BSU5fTElTVAkJMHgwMTAzCi0jZGVmaW5lIFBEUl9URU1QRVJBVFVSRV9UWVBFCQkJMHgwMTA3Ci0KLSNkZWZpbmUgUERSX1BSSVNNX1BDSV9JREVOVElGSUVSCQkweDA0MDIKLQotLyogQVJNIHJhbmdlICgweDEwMDAgLSAweDFmZmYpICovCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0lORk9STUFUSU9OCQkJMHgxMDAwCi0jZGVmaW5lIFBEUl9JTlRFUkZBQ0VfTElTVAkJCTB4MTAwMQotI2RlZmluZSBQRFJfSEFSRFdBUkVfUExBVEZPUk1fQ09NUE9ORU5UX0lECTB4MTAwMgotI2RlZmluZSBQRFJfT0VNX05BTUUJCQkJMHgxMDAzCi0jZGVmaW5lIFBEUl9QUk9EVUNUX05BTUUJCQkweDEwMDQKLSNkZWZpbmUgUERSX1VURjhfT0VNX05BTUUJCQkweDEwMDUKLSNkZWZpbmUgUERSX1VURjhfUFJPRFVDVF9OQU1FCQkJMHgxMDA2Ci0jZGVmaW5lIFBEUl9DT1VOVFJZX0xJU1QJCQkweDEwMDcKLSNkZWZpbmUgUERSX0RFRkFVTFRfQ09VTlRSWQkJCTB4MTAwOAotCi0jZGVmaW5lIFBEUl9BTlRFTk5BX0dBSU4JCQkweDExMDAKLQotI2RlZmluZSBQRFJfUFJJU01fSU5ESUdPX1BBX0NBTElCUkFUSU9OX0RBVEEJMHgxOTAxCi0jZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OCQkweDE5MDIKLSNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTCTB4MTkwMwotI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEEJCTB4MTkwNAotI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9EVUFMX0JBTkQJMHgxOTA1Ci0jZGVmaW5lIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT04JCTB4MTkwNgotI2RlZmluZSBQRFJfUkVHVUxBVE9SWV9QT1dFUl9MSU1JVFMJCTB4MTkwNwotI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9FWFRFTkRFRAkweDE5MDgKLSNkZWZpbmUgUERSX1JBRElBVEVEX1RSQU5TTUlTU0lPTl9DT1JSRUNUSU9OCTB4MTkwOQotI2RlZmluZSBQRFJfUFJJU01fVFhfSVFfQ0FMSUJSQVRJT04JCTB4MTkwYQotCi0vKiByZXNlcnZlZCByYW5nZSAoMHgyMDAwIC0gMHg3ZmZmKSAqLwotCi0vKiBjdXN0b21lciByYW5nZSAoMHg4MDAwIC0gMHhmZmZmKSAqLwotI2RlZmluZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTCQkJMHg4MDAwCi0jZGVmaW5lIFBEUl9QRVJfQ0hBTk5FTF9CQVNFQkFORF9SRUdJU1RFUlMJMHg4MDAxCi0KLS8qIHN0b3JlZCBpbiBza2ItPmNiICovCi1zdHJ1Y3QgbWVtcmVjb3JkIHsKLQl1MzIgc3RhcnRfYWRkcjsKLQl1MzIgZW5kX2FkZHI7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sOwotfTsKLQotc3RydWN0IHA1NF9lZXByb21fbG04NiB7Ci0JX19sZTE2IG9mZnNldDsKLQlfX2xlMTYgbGVuOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9yeF9oZHIgewotCV9fbGUxNiBtYWdpYzsKLQlfX2xlMTYgbGVuOwotCV9fbGUxNiBmcmVxOwotCXU4IGFudGVubmE7Ci0JdTggcmF0ZTsKLQl1OCByc3NpOwotCXU4IHF1YWxpdHk7Ci0JdTE2IHVua25vd24yOwotCV9fbGU2NCB0aW1lc3RhbXA7Ci0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X2ZyYW1lX3NlbnRfaGRyIHsKLQl1OCBzdGF0dXM7Ci0JdTggcmV0cmllczsKLQlfX2xlMTYgYWNrX3Jzc2k7Ci0JX19sZTE2IHNlcTsKLQl1MTYgcmF0ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfYWxsb2NkYXRhIHsKLQl1OCByYXRlc2V0WzhdOwotCXUxNiBwYWRkaW5nOwotCXU4IHdlcF9rZXlfcHJlc2VudDsKLQl1OCB3ZXBfa2V5X2xlbjsKLQl1OCB3ZXBfa2V5WzE2XTsKLQlfX2xlMzIgZnJhbWVfdHlwZTsKLQl1MzIgcGFkZGluZzI7Ci0JX19sZTE2IG1hZ2ljNDsKLQl1OCBhbnRlbm5hOwotCXU4IG91dHB1dF9wb3dlcjsKLQlfX2xlMzIgbWFnaWM1OwotCXU4IGFsaWduWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfdHhfY29udHJvbF9maWx0ZXIgewotCV9fbGUxNiBmaWx0ZXJfdHlwZTsKLQl1OCBkc3RbRVRIX0FMRU5dOwotCXU4IHNyY1tFVEhfQUxFTl07Ci0JdTggYW50ZW5uYTsKLQl1OCBkZWJ1ZzsKLQlfX2xlMzIgbWFnaWMzOwotCXU4IHJhdGVzWzhdOwkvLyBGSVhNRTogd2hhdCdzIHRoaXMgZm9yPwotCV9fbGUzMiByeF9hZGRyOwotCV9fbGUxNiBtYXhfcng7Ci0JX19sZTE2IHJ4aHc7Ci0JX19sZTE2IG1hZ2ljODsKLQlfX2xlMTYgbWFnaWM5OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfdHhfY29udHJvbF9jaGFubmVsIHsKLQlfX2xlMTYgbWFnaWMxOwotCV9fbGUxNiBtYWdpYzI7Ci0JdTggcGFkZGluZzFbMjBdOwotCXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSBpcV9hdXRvY2FsOwotCXU4IHBhX3BvaW50c19wZXJfY3VydmU7Ci0JdTggdmFsX2JhcmtlcjsKLQl1OCB2YWxfYnBzazsKLQl1OCB2YWxfcXBzazsKLQl1OCB2YWxfMTZxYW07Ci0JdTggdmFsXzY0cWFtOwotCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSBjdXJ2ZV9kYXRhWzBdOwotCS8qIGFkZGl0aW9uYWwgcGFkZGluZy9kYXRhIGFmdGVyIGN1cnZlX2RhdGEgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfbGVkIHsKLQlfX2xlMTYgbW9kZTsKLQlfX2xlMTYgbGVkX3RlbXBvcmFyeTsKLQlfX2xlMTYgbGVkX3Blcm1hbmVudDsKLQlfX2xlMTYgZHVyYXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF90eF92ZGNmX3F1ZXVlcyB7Ci0JX19sZTE2IGFpZnM7Ci0JX19sZTE2IGN3bWluOwotCV9fbGUxNiBjd21heDsKLQlfX2xlMTYgdHhvcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfdmRjZiB7Ci0JdTggcGFkZGluZzsKLQl1OCBzbG90dGltZTsKLQl1OCBtYWdpYzE7Ci0JdTggbWFnaWMyOwotCXN0cnVjdCBwNTRfdHhfdmRjZl9xdWV1ZXMgcXVldWVbOF07Ci0JdTggcGFkMls0XTsKLQlfX2xlMTYgZnJhbWVidXJzdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIHA1NF9yYXRlc1tdID0gewotCXsgLnJhdGUgPSAxMCwKLQkgIC52YWwgPSAwLAotCSAgLnZhbDIgPSAweDEwLAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSwKLQl7IC5yYXRlID0gMjAsCi0JICAudmFsID0gMSwKLQkgIC52YWwyID0gMHgxMSwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0sCi0JeyAucmF0ZSA9IDU1LAotCSAgLnZhbCA9IDIsCi0JICAudmFsMiA9IDB4MTIsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0tfMiB9LAotCXsgLnJhdGUgPSAxMTAsCi0JICAudmFsID0gMywKLQkgIC52YWwyID0gMHgxMywKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0sCi0JeyAucmF0ZSA9IDYwLAotCSAgLnZhbCA9IDQsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDkwLAotCSAgLnZhbCA9IDUsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDEyMCwKLQkgIC52YWwgPSA2LAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfT0ZETSB9LAotCXsgLnJhdGUgPSAxODAsCi0JICAudmFsID0gNywKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLQl7IC5yYXRlID0gMjQwLAotCSAgLnZhbCA9IDgsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDM2MCwKLQkgIC52YWwgPSA5LAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfT0ZETSB9LAotCXsgLnJhdGUgPSA0ODAsCi0JICAudmFsID0gMTAsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDU0MCwKLQkgIC52YWwgPSAxMSwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLX07Ci0KLS8vIFRPRE86IGp1c3QgZ2VuZXJhdGUgdGhpcy4uCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHA1NF9jaGFubmVsc1tdID0gewotCXsgLmNoYW4gPSAxLAotCSAgLmZyZXEgPSAyNDEyfSwKLQl7IC5jaGFuID0gMiwKLQkgIC5mcmVxID0gMjQxN30sCi0JeyAuY2hhbiA9IDMsCi0JICAuZnJlcSA9IDI0MjJ9LAotCXsgLmNoYW4gPSA0LAotCSAgLmZyZXEgPSAyNDI3fSwKLQl7IC5jaGFuID0gNSwKLQkgIC5mcmVxID0gMjQzMn0sCi0JeyAuY2hhbiA9IDYsCi0JICAuZnJlcSA9IDI0Mzd9LAotCXsgLmNoYW4gPSA3LAotCSAgLmZyZXEgPSAyNDQyfSwKLQl7IC5jaGFuID0gOCwKLQkgIC5mcmVxID0gMjQ0N30sCi0JeyAuY2hhbiA9IDksCi0JICAuZnJlcSA9IDI0NTJ9LAotCXsgLmNoYW4gPSAxMCwKLQkgIC5mcmVxID0gMjQ1N30sCi0JeyAuY2hhbiA9IDExLAotCSAgLmZyZXEgPSAyNDYyfSwKLQl7IC5jaGFuID0gMTIsCi0JICAuZnJlcSA9IDI0Njd9LAotCXsgLmNoYW4gPSAxMywKLQkgIC5mcmVxID0gMjQ3Mn0sCi0JeyAuY2hhbiA9IDE0LAotCSAgLmZyZXEgPSAyNDg0fQotfTsKLQotI2VuZGlmIC8qIFBSSVNNNTRDT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0dXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTR1c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBkMjg2ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTR1c2IuYworKysgL2Rldi9udWxsCkBAIC0xLDkwNyArMCwwIEBACi0KLS8qCi0gKiBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciBVU0IgYmFzZWQgUHJpc201NAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKgotICogQmFzZWQgb24gdGhlIGlzbHNtIChzb2Z0bWFjIHByaXNtNTQpIGRyaXZlciwgd2hpY2ggaXM6Ci0gKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAicDU0LmgiCi0jaW5jbHVkZSAicDU0dXNiLmgiCi0KLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJQcmlzbTU0IFVTQiB3aXJlbGVzcyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicHJpc201NHVzYiIpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcDU0dV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLyogVmVyc2lvbiAxIGRldmljZXMgKHBjaSBjaGlwICsgbmV0MjI4MCkgKi8KLQl7VVNCX0RFVklDRSgweDA1MDYsIDB4MGExMSl9LAkvKiAzQ09NIDNDUldFMjU0RzcyICovCi0Je1VTQl9ERVZJQ0UoMHgwNzA3LCAweGVlMDYpfSwJLyogU01DIDI4NjJXLUcgKi8KLQl7VVNCX0RFVklDRSgweDA4M2EsIDB4NDUwMSl9LAkvKiBBY2N0b24gODAyLjExZyBXTjQ1MDEgVVNCICovCi0Je1VTQl9ERVZJQ0UoMHgwODNhLCAweDQ1MDIpfSwJLyogU2llbWVucyBHaWdhc2V0IFVTQiBBZGFwdGVyICovCi0Je1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMDApfSwJLyogTmV0Z2VhciBXRzEyMSAqLwotCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg0MjEwKX0sCS8qIE5ldGdlYXIgV0cxMjEgdGhlIHNlY29uZCA/ICovCi0Je1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMjApfSwJLyogTmV0Z2VhciBXRzExMSAqLwotCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA2KX0sCS8qIE1lZGlvbiA0MDkwMCwgUm9wZXIgRXVyb3BlICovCi0Je1VTQl9ERVZJQ0UoMHgxMjRhLCAweDQwMjMpfSwJLyogU2h1dHRsZSBQTjE1LCBBaXJ2YXN0IFdNMTY4ZywgSU9HZWFyIEdXVTUxMyAqLwotCXtVU0JfREVWSUNFKDB4MTkxNSwgMHgyMjM0KX0sCS8qIExpbmtzeXMgV1VTQjU0RyBPRU0gKi8KLQl7VVNCX0RFVklDRSgweDE5MTUsIDB4MjIzNSl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUgT0VNICovCi0Je1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDEpfSwJLyogRExpbmsgRFdMLUcxMjAgU3Bpbm5ha2VyICovCi0Je1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3MDMpfSwJLyogRExpbmsgRFdMLUcxMjIgKi8KLQl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNCl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgKi8KLQl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNSl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUgKi8KLQotCS8qIFZlcnNpb24gMiBkZXZpY2VzICgzODg3KSAqLwotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUwKX0sCS8qIEJlbGtpbiBGNUQ3MDUwIHZlciAxMDAwICovCi0Je1VTQl9ERVZJQ0UoMHgwNTcyLCAweDIwMDApfSwJLyogQ29oaWJhIFByb3RvIGJvYXJkICovCi0Je1VTQl9ERVZJQ0UoMHgwNTcyLCAweDIwMDIpfSwJLyogQ29oaWJhIFByb3RvIGJvYXJkICovCi0Je1VTQl9ERVZJQ0UoMHgwNzA3LCAweGVlMTMpfSwgICAvKiBTTUMgMjg2MlctRyB2ZXJzaW9uIDIgKi8KLQl7VVNCX0RFVklDRSgweDA4M2EsIDB4NDUyMSl9LCAgIC8qIFNpZW1lbnMgR2lnYXNldCBVU0IgQWRhcHRlciA1NCB2ZXJzaW9uIDIgKi8KLQl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDI0MCl9LAkvKiBOZXRnZWFyIFdHMTExICh2MikgKi8KLQl7VVNCX0RFVklDRSgweDA5MTUsIDB4MjAwMCl9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KLQl7VVNCX0RFVklDRSgweDA5MTUsIDB4MjAwMil9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KLQl7VVNCX0RFVklDRSgweDBiYWYsIDB4MDExOCl9LCAgIC8qIFUuUy4gUm9ib3RpY3MgVTUgODAyLjExZyBBZGFwdGVyKi8KLQl7VVNCX0RFVklDRSgweDBiZjgsIDB4MTAwOSl9LCAgIC8qIEZVSklUU1UgRS01NDAwIFVTQiBEMTcwMCovCi0Je1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwgICAvKiBNZWRpb24gTUQ0MDkwMCAqLwotCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA4KX0sCS8qIFNhZ2VtIFhHNzAzQSAqLwotCXtVU0JfREVWSUNFKDB4MGQ4ZSwgMHgzNzYyKX0sCS8qIERMaW5rIERXTC1HMTIwIENvaGliYSAqLwotCXtVU0JfREVWSUNFKDB4MDlhYSwgMHgxMDAwKX0sCS8qIFNwaW5uYWtlciBQcm90byBib2FyZCAqLwotCXtVU0JfREVWSUNFKDB4MTNCMSwgMHgwMDBDKX0sCS8qIExpbmtzeXMgV1VTQjU0QUcgKi8KLQl7VVNCX0RFVklDRSgweDE0MzUsIDB4MDQyNyl9LAkvKiBJbnZlbnRlbCBVUjA1NEcgKi8KLQl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzcwNCl9LAkvKiBETGluayBEV0wtRzEyMiByZXYgQTIgKi8KLQl7VVNCX0RFVklDRSgweDQxM2MsIDB4ODEwMil9LAkvKiBTcGlubmFrZXIgRFVUICovCi0Je1VTQl9ERVZJQ0UoMHg0MTNjLCAweDgxMDQpfSwJLyogQ29oaWJhIFByb3RvIGJvYXJkICovCi0Je30KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwNTR1X3RhYmxlKTsKLQotc3RhdGljIHZvaWQgcDU0dV9yeF9jYihzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHA1NHVfcnhfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgcDU0dV9yeF9pbmZvICopc2tiLT5jYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBpbmZvLT5kZXY7Ci0Jc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cykpIHsKLQkJaW5mby0+dXJiID0gTlVMTDsKLQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCXJldHVybjsKLQl9Ci0KLQlza2JfdW5saW5rKHNrYiwgJnByaXYtPnJ4X3F1ZXVlKTsKLQlza2JfcHV0KHNrYiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQlpZiAoIXByaXYtPmh3X3R5cGUpCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBuZXQyMjgwX3R4X2hkcikpOwotCi0JaWYgKHA1NF9yeChkZXYsIHNrYikpIHsKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihNQVhfUlhfU0laRSk7Ci0JCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCQkvKiBUT0RPIGNoZWNrIHJ4IHF1ZXVlIGxlbmd0aCBhbmQgcmVmaWxsICpzb21ld2hlcmUqICovCi0JCQlyZXR1cm47Ci0JCX0KLQotCQlpbmZvID0gKHN0cnVjdCBwNTR1X3J4X2luZm8gKikgc2tiLT5jYjsKLQkJaW5mby0+dXJiID0gdXJiOwotCQlpbmZvLT5kZXYgPSBkZXY7Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOwotCQl1cmItPmNvbnRleHQgPSBza2I7Ci0JCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKLQl9IGVsc2UgewotCQlza2JfdHJpbShza2IsIDApOwotCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+cnhfcXVldWUsIHNrYik7Ci0JfQotCi0JdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLX0KLQotc3RhdGljIHZvaWQgcDU0dV90eF9jYihzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NHVfdHhfZnJlZV9jYihzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Ja2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCXVzYl9mcmVlX3VyYih1cmIpOwotfQotCi1zdGF0aWMgaW50IHA1NHVfaW5pdF91cmJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCB1cmIgKmVudHJ5OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NHVfcnhfaW5mbyAqaW5mbzsKLQotCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9xdWV1ZSkgPCAzMikgewotCQlza2IgPSBfX2Rldl9hbGxvY19za2IoTUFYX1JYX1NJWkUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXNrYikKLQkJCWJyZWFrOwotCQllbnRyeSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZW50cnkpIHsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdXNiX2ZpbGxfYnVsa191cmIoZW50cnksIHByaXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREFUQSksIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwgTUFYX1JYX1NJWkUsIHA1NHVfcnhfY2IsIHNrYik7Ci0JCWluZm8gPSAoc3RydWN0IHA1NHVfcnhfaW5mbyAqKSBza2ItPmNiOwotCQlpbmZvLT51cmIgPSBlbnRyeTsKLQkJaW5mby0+ZGV2ID0gZGV2OwotCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+cnhfcXVldWUsIHNrYik7Ci0JCXVzYl9zdWJtaXRfdXJiKGVudHJ5LCBHRlBfS0VSTkVMKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcDU0dV9mcmVlX3VyYnMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NHVfcnhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+cnhfcXVldWUpKSkgewotCQlpbmZvID0gKHN0cnVjdCBwNTR1X3J4X2luZm8gKikgc2tiLT5jYjsKLQkJaWYgKCFpbmZvLT51cmIpCi0JCQljb250aW51ZTsKLQotCQl1c2Jfa2lsbF91cmIoaW5mby0+dXJiKTsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwNTR1X3R4XzM4ODcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgcDU0X2NvbnRyb2xfaGRyICpkYXRhLAotCQkJIHNpemVfdCBsZW4sIGludCBmcmVlX29uX3R4KQotewotCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHVyYiAqYWRkcl91cmIsICpkYXRhX3VyYjsKLQotCWFkZHJfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWFkZHJfdXJiKQotCQlyZXR1cm47Ci0KLQlkYXRhX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFkYXRhX3VyYikgewotCQl1c2JfZnJlZV91cmIoYWRkcl91cmIpOwotCQlyZXR1cm47Ci0JfQotCi0JdXNiX2ZpbGxfYnVsa191cmIoYWRkcl91cmIsIHByaXYtPnVkZXYsCi0JCXVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREFUQSksICZkYXRhLT5yZXFfaWQsCi0JCXNpemVvZihkYXRhLT5yZXFfaWQpLCBwNTR1X3R4X2NiLCBkZXYpOwotCXVzYl9maWxsX2J1bGtfdXJiKGRhdGFfdXJiLCBwcml2LT51ZGV2LAotCQl1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgUDU0VV9QSVBFX0RBVEEpLCBkYXRhLCBsZW4sCi0JCWZyZWVfb25fdHggPyBwNTR1X3R4X2ZyZWVfY2IgOiBwNTR1X3R4X2NiLCBkZXYpOwotCi0JdXNiX3N1Ym1pdF91cmIoYWRkcl91cmIsIEdGUF9BVE9NSUMpOwotCXVzYl9zdWJtaXRfdXJiKGRhdGFfdXJiLCBHRlBfQVRPTUlDKTsKLX0KLQotc3RhdGljIHZvaWQgcDU0dV90eF9uZXQyMjgwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHA1NF9jb250cm9sX2hkciAqZGF0YSwKLQkJCSAgICBzaXplX3QgbGVuLCBpbnQgZnJlZV9vbl90eCkKLXsKLQlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCB1cmIgKmludF91cmIsICpkYXRhX3VyYjsKLQlzdHJ1Y3QgbmV0MjI4MF90eF9oZHIgKmhkcjsKLQlzdHJ1Y3QgbmV0MjI4MF9yZWdfd3JpdGUgKnJlZzsKLQotCXJlZyA9IGttYWxsb2Moc2l6ZW9mKCpyZWcpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXJlZykKLQkJcmV0dXJuOwotCi0JaW50X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFpbnRfdXJiKSB7Ci0JCWtmcmVlKHJlZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYXRhX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFkYXRhX3VyYikgewotCQlrZnJlZShyZWcpOwotCQl1c2JfZnJlZV91cmIoaW50X3VyYik7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZWctPnBvcnQgPSBjcHVfdG9fbGUxNihORVQyMjgwX0RFVl9VMzIpOwotCXJlZy0+YWRkciA9IGNwdV90b19sZTMyKFA1NFVfREVWX0JBU0UpOwotCXJlZy0+dmFsID0gY3B1X3RvX2xlMzIoSVNMMzhYWF9ERVZfSU5UX0RBVEEpOwotCi0JbGVuICs9IHNpemVvZigqZGF0YSk7Ci0JaGRyID0gKHZvaWQgKilkYXRhIC0gc2l6ZW9mKCpoZHIpOwotCW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7Ci0JaGRyLT5kZXZpY2VfYWRkciA9IGRhdGEtPnJlcV9pZDsKLQloZHItPmxlbiA9IGNwdV90b19sZTE2KGxlbik7Ci0KLQl1c2JfZmlsbF9idWxrX3VyYihpbnRfdXJiLCBwcml2LT51ZGV2LAotCQl1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgUDU0VV9QSVBFX0RFViksIHJlZywgc2l6ZW9mKCpyZWcpLAotCQlwNTR1X3R4X2ZyZWVfY2IsIGRldik7Ci0JdXNiX3N1Ym1pdF91cmIoaW50X3VyYiwgR0ZQX0FUT01JQyk7Ci0KLQl1c2JfZmlsbF9idWxrX3VyYihkYXRhX3VyYiwgcHJpdi0+dWRldiwKLQkJdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIFA1NFVfUElQRV9EQVRBKSwgaGRyLCBsZW4gKyBzaXplb2YoKmhkciksCi0JCWZyZWVfb25fdHggPyBwNTR1X3R4X2ZyZWVfY2IgOiBwNTR1X3R4X2NiLCBkZXYpOwotCXVzYl9zdWJtaXRfdXJiKGRhdGFfdXJiLCBHRlBfQVRPTUlDKTsKLX0KLQotc3RhdGljIGludCBwNTR1X3dyaXRlKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBuZXQyMjgwX3JlZ193cml0ZSAqYnVmLAotCQkgICAgICBlbnVtIG5ldDIyODBfb3BfdHlwZSB0eXBlLAotCQkgICAgICBfX2xlMzIgYWRkciwgX19sZTMyIHZhbCkKLXsKLQl1bnNpZ25lZCBpbnQgZXA7Ci0JaW50IGFsZW47Ci0KLQlpZiAodHlwZSAmIDB4MDgwMCkKLQkJZXAgPSB1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgUDU0VV9QSVBFX0RFVik7Ci0JZWxzZQotCQllcCA9IHVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfQlJHKTsKLQotCWJ1Zi0+cG9ydCA9IGNwdV90b19sZTE2KHR5cGUpOwotCWJ1Zi0+YWRkciA9IGFkZHI7Ci0JYnVmLT52YWwgPSB2YWw7Ci0KLQlyZXR1cm4gdXNiX2J1bGtfbXNnKHByaXYtPnVkZXYsIGVwLCBidWYsIHNpemVvZigqYnVmKSwgJmFsZW4sIDEwMDApOwotfQotCi1zdGF0aWMgaW50IHA1NHVfcmVhZChzdHJ1Y3QgcDU0dV9wcml2ICpwcml2LCB2b2lkICpidWYsCi0JCSAgICAgZW51bSBuZXQyMjgwX29wX3R5cGUgdHlwZSwKLQkJICAgICBfX2xlMzIgYWRkciwgX19sZTMyICp2YWwpCi17Ci0Jc3RydWN0IG5ldDIyODBfcmVnX3JlYWQgKnJlYWQgPSBidWY7Ci0JX19sZTMyICpyZWcgPSBidWY7Ci0JdW5zaWduZWQgaW50IGVwOwotCWludCBhbGVuLCBlcnI7Ci0KLQlpZiAodHlwZSAmIDB4MDgwMCkKLQkJZXAgPSBQNTRVX1BJUEVfREVWOwotCWVsc2UKLQkJZXAgPSBQNTRVX1BJUEVfQlJHOwotCi0JcmVhZC0+cG9ydCA9IGNwdV90b19sZTE2KHR5cGUpOwotCXJlYWQtPmFkZHIgPSBhZGRyOwotCi0JZXJyID0gdXNiX2J1bGtfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBlcCksCi0JCQkgICByZWFkLCBzaXplb2YoKnJlYWQpLCAmYWxlbiwgMTAwMCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHVzYl9idWxrX21zZyhwcml2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwgZXApLAotCQkJICAgcmVnLCBzaXplb2YoKnJlZyksICZhbGVuLCAxMDAwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JKnZhbCA9ICpyZWc7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0dV9idWxrX21zZyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgZXAsCi0JCQkgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLQlpbnQgYWxlbjsKLQlyZXR1cm4gdXNiX2J1bGtfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBlcCksCi0JCQkgICAgZGF0YSwgbGVuLCAmYWxlbiwgMjAwMCk7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0dV9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl2b2lkICpidWY7Ci0Jc3RydWN0IHA1NF9jb250cm9sX2hkciAqaGRyOwotCWludCBlcnIsIGFsZW47Ci0Jc2l6ZV90IG9mZnNldCA9IHByaXYtPmh3X3R5cGUgPyAweDEwIDogMHgyMDsKLQotCWJ1ZiA9IGttYWxsb2MoMHgyMDIwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlwcmludGsoS0VSTl9FUlIgInByaXNtNTR1c2I6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKLQkJICAgICAgICJlZXByb20gcmVhZGJhY2shXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKHByaXYtPmh3X3R5cGUpIHsKLQkJKigodTMyICopIGJ1ZikgPSBwcml2LT5jb21tb24ucnhfc3RhcnQ7Ci0JCWVyciA9IHA1NHVfYnVsa19tc2cocHJpdiwgUDU0VV9QSVBFX0RBVEEsIGJ1Ziwgc2l6ZW9mKHUzMikpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInByaXNtNTR1c2I6IGFkZHIgc2VuZCBmYWlsZWRcbiIpOwotCQkJZ290byBmYWlsOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IG5ldDIyODBfcmVnX3dyaXRlICpyZWcgPSBidWY7Ci0JCXJlZy0+cG9ydCA9IGNwdV90b19sZTE2KE5FVDIyODBfREVWX1UzMik7Ci0JCXJlZy0+YWRkciA9IGNwdV90b19sZTMyKFA1NFVfREVWX0JBU0UpOwotCQlyZWctPnZhbCA9IGNwdV90b19sZTMyKElTTDM4WFhfREVWX0lOVF9EQVRBKTsKLQkJZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREVWLCBidWYsIHNpemVvZigqcmVnKSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogZGV2X2ludCBzZW5kIGZhaWxlZFxuIik7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KLQloZHIgPSBidWYgKyBwcml2LT5jb21tb24udHhfaGRyX2xlbjsKLQlwNTRfZmlsbF9lZXByb21fcmVhZGJhY2soaGRyKTsKLQloZHItPnJlcV9pZCA9IGNwdV90b19sZTMyKHByaXYtPmNvbW1vbi5yeF9zdGFydCk7Ci0JaWYgKHByaXYtPmNvbW1vbi50eF9oZHJfbGVuKSB7Ci0JCXN0cnVjdCBuZXQyMjgwX3R4X2hkciAqdHhfaGRyID0gYnVmOwotCQl0eF9oZHItPmRldmljZV9hZGRyID0gaGRyLT5yZXFfaWQ7Ci0JCXR4X2hkci0+bGVuID0gY3B1X3RvX2xlMTYoRUVQUk9NX1JFQURCQUNLX0xFTik7Ci0JfQotCi0JLyogd2UgY2FuIGp1c3QgcHJldGVuZCB0byBzZW5kIDB4MjAwMCBieXRlcyBvZiBub3RoaW5nIGluIHRoZSBoZWFkZXJzICovCi0JZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLAotCQkJICAgIEVFUFJPTV9SRUFEQkFDS19MRU4gKyBwcml2LT5jb21tb24udHhfaGRyX2xlbik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInByaXNtNTR1c2I6IGVlcHJvbSByZXEgc2VuZCBmYWlsZWRcbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JZXJyID0gdXNiX2J1bGtfbXNnKHByaXYtPnVkZXYsCi0JCQkgICB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwgUDU0VV9QSVBFX0RBVEEpLAotCQkJICAgYnVmLCAweDIwMjAsICZhbGVuLCAxMDAwKTsKLQlpZiAoIWVyciAmJiBhbGVuID4gb2Zmc2V0KSB7Ci0JCXA1NF9wYXJzZV9lZXByb20oZGV2LCAodTggKilidWYgKyBvZmZzZXQsIGFsZW4gLSBvZmZzZXQpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogZWVwcm9tIHJlYWQgZmFpbGVkIVxuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLSBmYWlsOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwNTR1X3VwbG9hZF9maXJtd2FyZV8zODg3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdGF0aWMgY2hhciBzdGFydF9zdHJpbmdbXSA9ICJ+fn5+PFxyIjsKLQlzdHJ1Y3QgcDU0dV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOwotCWludCBlcnIsIGFsZW47Ci0JdTggY2FycnkgPSAwOwotCXU4ICpidWYsICp0bXAsICpkYXRhOwotCXVuc2lnbmVkIGludCBsZWZ0LCByZW1haW5zLCBibG9ja19zaXplOwotCXN0cnVjdCB4Ml9oZWFkZXIgKmhkcjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQl0bXAgPSBidWYgPSBrbWFsbG9jKFA1NFVfRldfQkxPQ0ssIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicDU0dXNiOiBjYW5ub3QgYWxsb2NhdGUgZmlybXdhcmUgdXBsb2FkIGJ1ZmZlciFcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9idWZhbGxvYzsKLQl9Ci0KLQltZW1jcHkoYnVmLCBzdGFydF9zdHJpbmcsIDQpOwotCWVyciA9IHA1NHVfYnVsa19tc2cocHJpdiwgUDU0VV9QSVBFX0RBVEEsIGJ1ZiwgNCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInA1NHVzYjogcmVzZXQgZmFpbGVkISAoJWQpXG4iLCBlcnIpOwotCQlnb3RvIGVycl9yZXNldDsKLQl9Ci0KLQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgImlzbDM4ODd1c2JfYmFyZSIsICZwcml2LT51ZGV2LT5kZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwNTR1c2I6IGNhbm5vdCBmaW5kIGZpcm13YXJlIChpc2wzODg3dXNiX2JhcmUpIVxuIik7Ci0JCWdvdG8gZXJyX3JlcV9md19mYWlsZWQ7Ci0JfQotCi0JcDU0X3BhcnNlX2Zpcm13YXJlKGRldiwgZndfZW50cnkpOwotCi0JbGVmdCA9IGJsb2NrX3NpemUgPSBtaW4oKHNpemVfdClQNTRVX0ZXX0JMT0NLLCBmd19lbnRyeS0+c2l6ZSk7Ci0Jc3RyY3B5KGJ1Ziwgc3RhcnRfc3RyaW5nKTsKLQlsZWZ0IC09IHN0cmxlbihzdGFydF9zdHJpbmcpOwotCXRtcCArPSBzdHJsZW4oc3RhcnRfc3RyaW5nKTsKLQotCWRhdGEgPSBmd19lbnRyeS0+ZGF0YTsKLQlyZW1haW5zID0gZndfZW50cnktPnNpemU7Ci0KLQloZHIgPSAoc3RydWN0IHgyX2hlYWRlciAqKShidWYgKyBzdHJsZW4oc3RhcnRfc3RyaW5nKSk7Ci0JbWVtY3B5KGhkci0+c2lnbmF0dXJlLCBYMl9TSUdOQVRVUkUsIFgyX1NJR05BVFVSRV9TSVpFKTsKLQloZHItPmZ3X2xvYWRfYWRkciA9IGNwdV90b19sZTMyKElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFIpOwotCWhkci0+ZndfbGVuZ3RoID0gY3B1X3RvX2xlMzIoZndfZW50cnktPnNpemUpOwotCWhkci0+Y3JjID0gY3B1X3RvX2xlMzIofmNyYzMyX2xlKH4wLCAodm9pZCAqKSZoZHItPmZ3X2xvYWRfYWRkciwKLQkJCQkJIHNpemVvZih1MzIpKjIpKTsKLQlsZWZ0IC09IHNpemVvZigqaGRyKTsKLQl0bXAgKz0gc2l6ZW9mKCpoZHIpOwotCi0Jd2hpbGUgKHJlbWFpbnMpIHsKLQkJd2hpbGUgKGxlZnQtLSkgewotCQkJaWYgKGNhcnJ5KSB7Ci0JCQkJKnRtcCsrID0gY2Fycnk7Ci0JCQkJY2FycnkgPSAwOwotCQkJCXJlbWFpbnMtLTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXN3aXRjaCAoKmRhdGEpIHsKLQkJCWNhc2UgJ34nOgotCQkJCSp0bXArKyA9ICd9JzsKLQkJCQljYXJyeSA9ICdeJzsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ30nOgotCQkJCSp0bXArKyA9ICd9JzsKLQkJCQljYXJyeSA9ICddJzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJKnRtcCsrID0gKmRhdGE7Ci0JCQkJcmVtYWlucy0tOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZGF0YSsrOwotCQl9Ci0KLQkJZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLCBibG9ja19zaXplKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBmaXJtd2FyZSB1cGxvYWQgZmFpbGVkIVxuIik7Ci0JCQlnb3RvIGVycl91cGxvYWRfZmFpbGVkOwotCQl9Ci0KLQkJdG1wID0gYnVmOwotCQlsZWZ0ID0gYmxvY2tfc2l6ZSA9IG1pbigodW5zaWduZWQgaW50KVA1NFVfRldfQkxPQ0ssIHJlbWFpbnMpOwotCX0KLQotCSooKF9fbGUzMiAqKWJ1ZikgPSBjcHVfdG9fbGUzMih+Y3JjMzJfbGUofjAsIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSkpOwotCWVyciA9IHA1NHVfYnVsa19tc2cocHJpdiwgUDU0VV9QSVBFX0RBVEEsIGJ1Ziwgc2l6ZW9mKHUzMikpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBmaXJtd2FyZSB1cGxvYWQgZmFpbGVkIVxuIik7Ci0JCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7Ci0JfQotCi0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOwotCXdoaWxlICghKGVyciA9IHVzYl9idWxrX21zZyhwcml2LT51ZGV2LAotCQl1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwgUDU0VV9QSVBFX0RBVEEpLCBidWYsIDEyOCwgJmFsZW4sIDEwMDApKSkgewotCQlpZiAoYWxlbiA+IDIgJiYgIW1lbWNtcChidWYsICJPSyIsIDIpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGFsZW4gPiA1ICYmICFtZW1jbXAoYnVmLCAiRVJST1IiLCA1KSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAicHJpc201NHVzYjogZmlybXdhcmUgdXBsb2FkIGZhaWxlZCFcbiIpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogZmlybXdhcmUgYm9vdCB0aW1lZCBvdXQhXG4iKTsKLQkJCWVyciA9IC1FVElNRURPVVQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoZXJyKQotCQlnb3RvIGVycl91cGxvYWRfZmFpbGVkOwotCi0JYnVmWzBdID0gJ2cnOwotCWJ1ZlsxXSA9ICdccic7Ci0JZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLCAyKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogZmlybXdhcmUgYm9vdCBmYWlsZWQhXG4iKTsKLQkJZ290byBlcnJfdXBsb2FkX2ZhaWxlZDsKLQl9Ci0KLQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7Ci0Jd2hpbGUgKCEoZXJyID0gdXNiX2J1bGtfbXNnKHByaXYtPnVkZXYsCi0JCXVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREFUQSksIGJ1ZiwgMTI4LCAmYWxlbiwgMTAwMCkpKSB7Ci0JCWlmIChhbGVuID4gMCAmJiBidWZbMF0gPT0gJ2cnKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCWVyciA9IC1FVElNRURPVVQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoZXJyKQotCQlnb3RvIGVycl91cGxvYWRfZmFpbGVkOwotCi0gIGVycl91cGxvYWRfZmFpbGVkOgotCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotICBlcnJfcmVxX2Z3X2ZhaWxlZDoKLSAgZXJyX3Jlc2V0OgotCWtmcmVlKGJ1Zik7Ci0gIGVycl9idWZhbGxvYzoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA1NHVfdXBsb2FkX2Zpcm13YXJlX25ldDIyODAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IHA1NHBfY3NyICpkZXZyZWcgPSAoY29uc3Qgc3RydWN0IHA1NHBfY3NyICopIFA1NFVfREVWX0JBU0U7Ci0JaW50IGVyciwgYWxlbjsKLQl2b2lkICpidWY7Ci0JX19sZTMyIHJlZzsKLQl1bnNpZ25lZCBpbnQgcmVtYWlucywgb2Zmc2V0OwotCXU4ICpkYXRhOwotCi0JYnVmID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicDU0dXNiOiBmaXJtd2FyZSBidWZmZXIgYWxsb2MgZmFpbGVkIVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaXNsMzg5MHVzYiIsICZwcml2LT51ZGV2LT5kZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwNTR1c2I6IGNhbm5vdCBmaW5kIGZpcm13YXJlIChpc2wzODkwdXNiKSFcbiIpOwotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXA1NF9wYXJzZV9maXJtd2FyZShkZXYsIGZ3X2VudHJ5KTsKLQotI2RlZmluZSBQNTRVX1dSSVRFKHR5cGUsIGFkZHIsIGRhdGEpIFwKLQlkbyB7XAotCQllcnIgPSBwNTR1X3dyaXRlKHByaXYsIGJ1ZiwgdHlwZSxcCi0JCQkJIGNwdV90b19sZTMyKCh1MzIpKHVuc2lnbmVkIGxvbmcpYWRkciksIGRhdGEpO1wKLQkJaWYgKGVycikgXAotCQkJZ290byBmYWlsO1wKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFA1NFVfUkVBRCh0eXBlLCBhZGRyKSBcCi0JZG8ge1wKLQkJZXJyID0gcDU0dV9yZWFkKHByaXYsIGJ1ZiwgdHlwZSxcCi0JCQkJY3B1X3RvX2xlMzIoKHUzMikodW5zaWduZWQgbG9uZylhZGRyKSwgJnJlZyk7XAotCQlpZiAoZXJyKVwKLQkJCWdvdG8gZmFpbDtcCi0JfSB3aGlsZSAoMCkKLQotCS8qIHBvd2VyIGRvd24gbmV0MjI4MCBicmlkZ2UgKi8KLQlQNTRVX1JFQUQoTkVUMjI4MF9CUkdfVTMyLCBORVQyMjgwX0dQSU9DVEwpOwotCXJlZyB8PSBjcHVfdG9fbGUzMihQNTRVX0JSR19QT1dFUl9ET1dOKTsKLQlyZWcgJj0gY3B1X3RvX2xlMzIoflA1NFVfQlJHX1BPV0VSX1VQKTsKLQlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9HUElPQ1RMLCByZWcpOwotCi0JbWRlbGF5KDEwMCk7Ci0KLQkvKiBwb3dlciB1cCBicmlkZ2UgKi8KLQlyZWcgfD0gY3B1X3RvX2xlMzIoUDU0VV9CUkdfUE9XRVJfVVApOwotCXJlZyAmPSBjcHVfdG9fbGUzMih+UDU0VV9CUkdfUE9XRVJfRE9XTik7Ci0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfR1BJT0NUTCwgcmVnKTsKLQotCW1kZWxheSgxMDApOwotCi0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfREVWSU5JVCwKLQkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9DTEtfMzBNaHogfAotCQkJICAgICAgIE5FVDIyODBfUENJX0VOQUJMRSB8Ci0JCQkgICAgICAgTkVUMjI4MF9QQ0lfU09GVF9SRVNFVCkpOwotCi0JbWRlbGF5KDIwKTsKLQotCVA1NFVfV1JJVEUoTkVUMjI4MF9CUkdfQ0ZHX1UxNiwgUENJX0NPTU1BTkQsCi0JCSAgIGNwdV90b19sZTMyKFBDSV9DT01NQU5EX01FTU9SWSB8Ci0JCQkgICAgICAgUENJX0NPTU1BTkRfTUFTVEVSKSk7Ci0KLQlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX0NGR19VMzIsIFBDSV9CQVNFX0FERFJFU1NfMCwKLQkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9CQVNFKSk7Ci0KLQlQNTRVX1JFQUQoTkVUMjI4MF9CUkdfQ0ZHX1UxNiwgUENJX1NUQVRVUyk7Ci0JcmVnIHw9IGNwdV90b19sZTMyKFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCk7Ci0JUDU0VV9XUklURShORVQyMjgwX0JSR19DRkdfVTE2LCBQQ0lfU1RBVFVTLCByZWcpOwotCi0JLy8gVE9ETzogd2UgcmVhbGx5IG5lZWQgdGhpcz8KLQlQNTRVX1JFQUQoTkVUMjI4MF9CUkdfVTMyLCBORVQyMjgwX1JFTE5VTSk7Ci0KLQlQNTRVX1dSSVRFKE5FVDIyODBfQlJHX1UzMiwgTkVUMjI4MF9FUEFfUlNQLAotCQkgICBjcHVfdG9fbGUzMihORVQyMjgwX0NMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFKSk7Ci0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfRVBDX1JTUCwKLQkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9DTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSkpOwotCi0JUDU0VV9XUklURShORVQyMjgwX0JSR19DRkdfVTMyLCBQQ0lfQkFTRV9BRERSRVNTXzIsCi0JCSAgIGNwdV90b19sZTMyKE5FVDIyODBfQkFTRTIpKTsKLQotCS8qIGZpbmFsbHkgZG9uZSBzZXR0aW5nIHVwIHRoZSBicmlkZ2UgKi8KLQotCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfQ0ZHX1UxNiwgMHgxMDAwMCB8IFBDSV9DT01NQU5ELAotCQkgICBjcHVfdG9fbGUzMihQQ0lfQ09NTUFORF9NRU1PUlkgfAotCQkJICAgICAgIFBDSV9DT01NQU5EX01BU1RFUikpOwotCi0JUDU0VV9XUklURShORVQyMjgwX0RFVl9DRkdfVTE2LCAweDEwMDAwIHwgMHg0MCAvKiBUUkRZIHRpbWVvdXQgKi8sIDApOwotCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfQ0ZHX1UzMiwgMHgxMDAwMCB8IFBDSV9CQVNFX0FERFJFU1NfMCwKLQkJICAgY3B1X3RvX2xlMzIoUDU0VV9ERVZfQkFTRSkpOwotCi0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfVVNCSVJRRU5CMSwgMCk7Ci0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfSVJRU1RBVDEsCi0JCSAgIGNwdV90b19sZTMyKE5FVDIyODBfUENJX0lOVEFfSU5URVJSVVBUKSk7Ci0KLQkvKiBkbyByb21ib290ICovCi0JUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9lbmFibGUsIDApOwotCi0JUDU0VV9SRUFEKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+Y3RybF9zdGF0KTsKLQlyZWcgJj0gY3B1X3RvX2xlMzIofklTTDM4WFhfQ1RSTF9TVEFUX1JFU0VUKTsKLQlyZWcgJj0gY3B1X3RvX2xlMzIofklTTDM4WFhfQ1RSTF9TVEFUX1JBTUJPT1QpOwotCXJlZyAmPSBjcHVfdG9fbGUzMih+SVNMMzhYWF9DVFJMX1NUQVRfQ0xLUlVOKTsKLQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+Y3RybF9zdGF0LCByZWcpOwotCi0JbWRlbGF5KDIwKTsKLQotCXJlZyB8PSBjcHVfdG9fbGUzMihJU0wzOFhYX0NUUkxfU1RBVF9SRVNFVCk7Ci0JUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmN0cmxfc3RhdCwgcmVnKTsKLQotCW1kZWxheSgyMCk7Ci0KLQlyZWcgJj0gY3B1X3RvX2xlMzIofklTTDM4WFhfQ1RSTF9TVEFUX1JFU0VUKTsKLQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+Y3RybF9zdGF0LCByZWcpOwotCi0JbWRlbGF5KDEwMCk7Ci0KLQlQNTRVX1JFQUQoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5pbnRfaWRlbnQpOwotCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5pbnRfYWNrLCByZWcpOwotCi0JLyogZmluYWxseSwgd2UgY2FuIHVwbG9hZCBmaXJtd2FyZSBub3chICovCi0JcmVtYWlucyA9IGZ3X2VudHJ5LT5zaXplOwotCWRhdGEgPSBmd19lbnRyeS0+ZGF0YTsKLQlvZmZzZXQgPSBJU0wzOFhYX0RFVl9GSVJNV0FSRV9BRERSOwotCi0Jd2hpbGUgKHJlbWFpbnMpIHsKLQkJdW5zaWduZWQgaW50IGJsb2NrX2xlbiA9IG1pbihyZW1haW5zLCAodW5zaWduZWQgaW50KTUxMik7Ci0JCW1lbWNweShidWYsIGRhdGEsIGJsb2NrX2xlbik7Ci0KLQkJZXJyID0gcDU0dV9idWxrX21zZyhwcml2LCBQNTRVX1BJUEVfREFUQSwgYnVmLCBibG9ja19sZW4pOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInByaXNtNTR1c2I6IGZpcm13YXJlIGJsb2NrIHVwbG9hZCAiCi0JCQkgICAgICAgImZhaWxlZFxuIik7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQotCQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+ZGlyZWN0X21lbV9iYXNlLAotCQkJICAgY3B1X3RvX2xlMzIoMHhjMDAwMGYwMCkpOwotCi0JCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLAotCQkJICAgMHgwMDIwIHwgKHVuc2lnbmVkIGxvbmcpJmRldnJlZy0+ZGlyZWN0X21lbV93aW4sIDApOwotCQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwKLQkJCSAgIDB4MDAyMCB8ICh1bnNpZ25lZCBsb25nKSZkZXZyZWctPmRpcmVjdF9tZW1fd2luLAotCQkJICAgY3B1X3RvX2xlMzIoMSkpOwotCi0JCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLAotCQkJICAgMHgwMDI0IHwgKHVuc2lnbmVkIGxvbmcpJmRldnJlZy0+ZGlyZWN0X21lbV93aW4sCi0JCQkgICBjcHVfdG9fbGUzMihibG9ja19sZW4pKTsKLQkJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsCi0JCQkgICAweDAwMjggfCAodW5zaWduZWQgbG9uZykmZGV2cmVnLT5kaXJlY3RfbWVtX3dpbiwKLQkJCSAgIGNwdV90b19sZTMyKG9mZnNldCkpOwotCi0JCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5kbWFfYWRkciwKLQkJCSAgIGNwdV90b19sZTMyKE5FVDIyODBfRVBBX0ZJRk9fUENJX0FERFIpKTsKLQkJUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmRtYV9sZW4sCi0JCQkgICBjcHVfdG9fbGUzMihibG9ja19sZW4gPj4gMikpOwotCQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+ZG1hX2N0cmwsCi0JCQkgICBjcHVfdG9fbGUzMihJU0wzOFhYX0RNQV9NQVNURVJfQ09OVFJPTF9UUklHR0VSKSk7Ci0KLQkJbWRlbGF5KDEwKTsKLQotCQlQNTRVX1JFQUQoTkVUMjI4MF9ERVZfVTMyLAotCQkJICAweDAwMkMgfCAodW5zaWduZWQgbG9uZykmZGV2cmVnLT5kaXJlY3RfbWVtX3dpbik7Ci0JCWlmICghKHJlZyAmIGNwdV90b19sZTMyKElTTDM4WFhfRE1BX1NUQVRVU19ET05FKSkgfHwKLQkJICAgICEocmVnICYgY3B1X3RvX2xlMzIoSVNMMzhYWF9ETUFfU1RBVFVTX1JFQURZKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogZmlybXdhcmUgRE1BIHRyYW5zZmVyICIKLQkJCSAgICAgICAiZmFpbGVkXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCi0JCVA1NFVfV1JJVEUoTkVUMjI4MF9CUkdfVTMyLCBORVQyMjgwX0VQQV9TVEFULAotCQkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9GSUZPX0ZMVVNIKSk7Ci0KLQkJcmVtYWlucyAtPSBibG9ja19sZW47Ci0JCWRhdGEgKz0gYmxvY2tfbGVuOwotCQlvZmZzZXQgKz0gYmxvY2tfbGVuOwotCX0KLQotCS8qIGRvIHJhbWJvb3QgKi8KLQlQNTRVX1JFQUQoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5jdHJsX3N0YXQpOwotCXJlZyAmPSBjcHVfdG9fbGUzMih+SVNMMzhYWF9DVFJMX1NUQVRfUkVTRVQpOwotCXJlZyAmPSBjcHVfdG9fbGUzMih+SVNMMzhYWF9DVFJMX1NUQVRfQ0xLUlVOKTsKLQlyZWcgfD0gY3B1X3RvX2xlMzIoSVNMMzhYWF9DVFJMX1NUQVRfUkFNQk9PVCk7Ci0JUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmN0cmxfc3RhdCwgcmVnKTsKLQotCW1kZWxheSgyMCk7Ci0KLQlyZWcgfD0gY3B1X3RvX2xlMzIoSVNMMzhYWF9DVFJMX1NUQVRfUkVTRVQpOwotCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5jdHJsX3N0YXQsIHJlZyk7Ci0KLQlyZWcgJj0gY3B1X3RvX2xlMzIofklTTDM4WFhfQ1RSTF9TVEFUX1JFU0VUKTsKLQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+Y3RybF9zdGF0LCByZWcpOwotCi0JbWRlbGF5KDEwMCk7Ci0KLQlQNTRVX1JFQUQoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5pbnRfaWRlbnQpOwotCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5pbnRfYWNrLCByZWcpOwotCi0JLyogc3RhcnQgdXAgdGhlIGZpcm13YXJlICovCi0JUDU0VV9XUklURShORVQyMjgwX0RFVl9VMzIsICZkZXZyZWctPmludF9lbmFibGUsCi0JCSAgIGNwdV90b19sZTMyKElTTDM4WFhfSU5UX0lERU5UX0lOSVQpKTsKLQotCVA1NFVfV1JJVEUoTkVUMjI4MF9CUkdfVTMyLCBORVQyMjgwX0lSUVNUQVQxLAotCQkgICBjcHVfdG9fbGUzMihORVQyMjgwX1BDSV9JTlRBX0lOVEVSUlVQVCkpOwotCi0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfVVNCSVJRRU5CMSwKLQkJICAgY3B1X3RvX2xlMzIoTkVUMjI4MF9QQ0lfSU5UQV9JTlRFUlJVUFRfRU5BQkxFIHwKLQkJCSAgICAgICBORVQyMjgwX1VTQl9JTlRFUlJVUFRfRU5BQkxFKSk7Ci0KLQlQNTRVX1dSSVRFKE5FVDIyODBfREVWX1UzMiwgJmRldnJlZy0+ZGV2X2ludCwKLQkJICAgY3B1X3RvX2xlMzIoSVNMMzhYWF9ERVZfSU5UX1JFU0VUKSk7Ci0KLQllcnIgPSB1c2JfaW50ZXJydXB0X21zZyhwcml2LT51ZGV2LAotCQkJCXVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfSU5UKSwKLQkJCQlidWYsIHNpemVvZihfX2xlMzIpLCAmYWxlbiwgMTAwMCk7Ci0JaWYgKGVyciB8fCBhbGVuICE9IHNpemVvZihfX2xlMzIpKQotCQlnb3RvIGZhaWw7Ci0KLQlQNTRVX1JFQUQoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5pbnRfaWRlbnQpOwotCVA1NFVfV1JJVEUoTkVUMjI4MF9ERVZfVTMyLCAmZGV2cmVnLT5pbnRfYWNrLCByZWcpOwotCi0JaWYgKCEocmVnICYgY3B1X3RvX2xlMzIoSVNMMzhYWF9JTlRfSURFTlRfSU5JVCkpKQotCQllcnIgPSAtRUlOVkFMOwotCi0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfVVNCSVJRRU5CMSwgMCk7Ci0JUDU0VV9XUklURShORVQyMjgwX0JSR19VMzIsIE5FVDIyODBfSVJRU1RBVDEsCi0JCSAgIGNwdV90b19sZTMyKE5FVDIyODBfUENJX0lOVEFfSU5URVJSVVBUKSk7Ci0KLSN1bmRlZiBQNTRVX1dSSVRFCi0jdW5kZWYgUDU0VV9SRUFECi0KLSBmYWlsOgotCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwNTR1X29wZW4oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGVycjsKLQotCWVyciA9IHA1NHVfaW5pdF91cmJzKGRldik7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCXByaXYtPmNvbW1vbi5vcGVuID0gcDU0dV9pbml0X3VyYnM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcDU0dV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQkvKiBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byByZWxpYWJseSBzdG9wIHRoZSAzODg3IGFuZCBuZXQyMjgwIHNvCi0JICAgdGhlIGhhcmR3YXJlIGlzIHN0aWxsIHVzYWJsZSBuZXh0IHRpbWUgd2Ugd2FudCB0byBzdGFydCBpdC4KLQkgICB1bnRpbCB0aGVuLCB3ZSBqdXN0IHN0b3AgbGlzdGVuaW5nIHRvIHRoZSBoYXJkd2FyZS4uICovCi0JcDU0dV9mcmVlX3VyYnMoZGV2KTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHA1NHVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7Ci0Jc3RydWN0IHA1NHVfcHJpdiAqcHJpdjsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGludCBpLCByZWNvZ25pemVkX3BpcGVzOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JZGV2ID0gcDU0X2luaXRfY29tbW9uKHNpemVvZigqcHJpdikpOwotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJpc201NHVzYjogaWVlZTgwMjExIGFsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXByaXYgPSBkZXYtPnByaXY7Ci0KLQlTRVRfSUVFRTgwMjExX0RFVihkZXYsICZpbnRmLT5kZXYpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKLQlwcml2LT51ZGV2ID0gdWRldjsKLQotCXVzYl9nZXRfZGV2KHVkZXYpOwotCi0JLyogcmVhbGx5IGxhenkgYW5kIHNpbXBsZSB3YXkgb2YgZmlndXJpbmcgb3V0IGlmIHdlJ3JlIGEgMzg4NyAqLwotCS8qIFRPRE86IHNob3VsZCBqdXN0IHN0aWNrIHRoZSBpZGVudGlmaWNhdGlvbiBpbiB0aGUgZGV2aWNlIHRhYmxlICovCi0JaSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsKLQlyZWNvZ25pemVkX3BpcGVzID0gMDsKLQl3aGlsZSAoaS0tKSB7Ci0JCXN3aXRjaCAoaW50Zi0+YWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSB7Ci0JCWNhc2UgUDU0VV9QSVBFX0RBVEE6Ci0JCWNhc2UgUDU0VV9QSVBFX01HTVQ6Ci0JCWNhc2UgUDU0VV9QSVBFX0JSRzoKLQkJY2FzZSBQNTRVX1BJUEVfREVWOgotCQljYXNlIFA1NFVfUElQRV9EQVRBIHwgVVNCX0RJUl9JTjoKLQkJY2FzZSBQNTRVX1BJUEVfTUdNVCB8IFVTQl9ESVJfSU46Ci0JCWNhc2UgUDU0VV9QSVBFX0JSRyB8IFVTQl9ESVJfSU46Ci0JCWNhc2UgUDU0VV9QSVBFX0RFViB8IFVTQl9ESVJfSU46Ci0JCWNhc2UgUDU0VV9QSVBFX0lOVCB8IFVTQl9ESVJfSU46Ci0JCQlyZWNvZ25pemVkX3BpcGVzKys7Ci0JCX0KLQl9Ci0JcHJpdi0+Y29tbW9uLm9wZW4gPSBwNTR1X29wZW47Ci0KLQlpZiAocmVjb2duaXplZF9waXBlcyA8IFA1NFVfUElQRV9OVU1CRVIpIHsKLQkJcHJpdi0+aHdfdHlwZSA9IFA1NFVfMzg4NzsKLQkJcHJpdi0+Y29tbW9uLnR4ID0gcDU0dV90eF8zODg3OwotCX0gZWxzZSB7Ci0JCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gKz0gc2l6ZW9mKHN0cnVjdCBuZXQyMjgwX3R4X2hkcik7Ci0JCXByaXYtPmNvbW1vbi50eF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXQyMjgwX3R4X2hkcik7Ci0JCXByaXYtPmNvbW1vbi50eCA9IHA1NHVfdHhfbmV0MjI4MDsKLQl9Ci0JcHJpdi0+Y29tbW9uLnN0b3AgPSBwNTR1X3N0b3A7Ci0KLQlpZiAocHJpdi0+aHdfdHlwZSkKLQkJZXJyID0gcDU0dV91cGxvYWRfZmlybXdhcmVfMzg4NyhkZXYpOwotCWVsc2UKLQkJZXJyID0gcDU0dV91cGxvYWRfZmlybXdhcmVfbmV0MjI4MChkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfZGV2OwotCi0JZXJyID0gcDU0dV9yZWFkX2VlcHJvbShkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfZGV2OwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+d2lwaHktPnBlcm1fYWRkcikpIHsKLQkJdTggcGVybV9hZGRyW0VUSF9BTEVOXTsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwcmlzbTU0dXNiOiBJbnZhbGlkIGh3YWRkciEgVXNpbmcgcmFuZG9tbHkgZ2VuZXJhdGVkIE1BQyBhZGRyXG4iKTsKLQkJcmFuZG9tX2V0aGVyX2FkZHIocGVybV9hZGRyKTsKLQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBwZXJtX2FkZHIpOwotCX0KLQotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3F1ZXVlKTsKLQotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcmlzbTU0dXNiOiBDYW5ub3QgcmVnaXN0ZXIgbmV0ZGV2aWNlXG4iKTsKLQkJZ290byBlcnJfZnJlZV9kZXY7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGh3YWRkciAlcywgaXNsMzglMDJ4XG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAotCSAgICAgICBwcmludF9tYWMobWFjLCBkZXYtPndpcGh5LT5wZXJtX2FkZHIpLAotCSAgICAgICBwcml2LT5jb21tb24udmVyc2lvbik7Ci0KLQlyZXR1cm4gMDsKLQotIGVycl9mcmVlX2RldjoKLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JdXNiX3B1dF9kZXYodWRldik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IHA1NHVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCXN0cnVjdCBwNTR1X3ByaXYgKnByaXY7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGV2KTsKLQotCXByaXYgPSBkZXYtPnByaXY7Ci0JdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0JcDU0X2ZyZWVfY29tbW9uKGRldik7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHA1NHVfZHJpdmVyID0gewotCS5uYW1lCT0gInByaXNtNTR1c2IiLAotCS5pZF90YWJsZSA9IHA1NHVfdGFibGUsCi0JLnByb2JlID0gcDU0dV9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHA1NHVfaW5pdCh2b2lkKQotewotCXJldHVybiB1c2JfcmVnaXN0ZXIoJnA1NHVfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHA1NHVfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZwNTR1X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHA1NHVfaW5pdCk7Ci1tb2R1bGVfZXhpdChwNTR1X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggMWI1OTVhNi4uZTViM2MyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlzdHJ1Y3Qgb2JqX2JzcyBic3MsICpic3MyOwogCXVuaW9uIG9pZF9yZXNfdCByOwogCi0JZG93bigmcHJpdi0+c3RhdHNfc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5zdGF0c19sb2NrKTsKIAogLyogTm9pc2UgZmxvb3IuCiAgKiBJJ20gbm90IHN1cmUgaWYgdGhlIHVuaXQgaXMgZEJtLgpAQCAtMjA3LDcgKzIwNyw3IEBACiAJbWd0X2dldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9NUERVVFhGQUlMRUQsIDAsIE5VTEwsICZyKTsKIAlwcml2LT5sb2NhbF9pd3N0YXRpc3RpY3MuZGlzY2FyZC5yZXRyaWVzID0gci51OwogCi0JdXAoJnByaXYtPnN0YXRzX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5zdGF0c19sb2NrKTsKIAogCXJldHVybjsKIH0KQEAgLTIxOCwxMiArMjE4LDEyIEBACiAJaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCS8qIElmIHRoZSBzdGF0cyBhcmUgYmVpbmcgdXBkYXRlZCByZXR1cm4gb2xkIGRhdGEgKi8KLQlpZiAoZG93bl90cnlsb2NrKCZwcml2LT5zdGF0c19zZW0pID09IDApIHsKKwlpZiAobXV0ZXhfdHJ5bG9jaygmcHJpdi0+c3RhdHNfbG9jaykpIHsKIAkJbWVtY3B5KCZwcml2LT5pd3N0YXRpc3RpY3MsICZwcml2LT5sb2NhbF9pd3N0YXRpc3RpY3MsCiAJCSAgICAgICBzaXplb2YgKHN0cnVjdCBpd19zdGF0aXN0aWNzKSk7CiAJCS8qIFRoZXkgd29uJ3QgYmUgbWFya2VkIHVwZGF0ZWQgZm9yIHRoZSBuZXh0IHRpbWUgKi8KIAkJcHJpdi0+bG9jYWxfaXdzdGF0aXN0aWNzLnF1YWwudXBkYXRlZCA9IDA7Ci0JCXVwKCZwcml2LT5zdGF0c19zZW0pOworCQltdXRleF91bmxvY2soJnByaXYtPnN0YXRzX2xvY2spOwogCX0gZWxzZQogCQlwcml2LT5pd3N0YXRpc3RpY3MucXVhbC51cGRhdGVkID0gMDsKIApAQCAtMTc4MCw3ICsxNzgwLDcgQEAKIHZvaWQKIHByaXNtNTRfYWNsX2luaXQoc3RydWN0IGlzbHBjaV9hY2wgKmFjbCkKIHsKLQlzZW1hX2luaXQoJmFjbC0+c2VtLCAxKTsKKwltdXRleF9pbml0KCZhY2wtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZhY2wtPm1hY19saXN0KTsKIAlhY2wtPnNpemUgPSAwOwogCWFjbC0+cG9saWN5ID0gTUFDX1BPTElDWV9PUEVOOwpAQCAtMTc5MiwxMCArMTc5MiwxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKm5leHQ7CiAJc3RydWN0IG1hY19lbnRyeSAqZW50cnk7CiAKLQlkb3duKCZhY2wtPnNlbSk7CisJbXV0ZXhfbG9jaygmYWNsLT5sb2NrKTsKIAogCWlmIChhY2wtPnNpemUgPT0gMCkgewotCQl1cCgmYWNsLT5zZW0pOworCQltdXRleF91bmxvY2soJmFjbC0+bG9jayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE4MDYsNyArMTgwNiw3IEBACiAJCWtmcmVlKGVudHJ5KTsKIAl9CiAJYWNsLT5zaXplID0gMDsKLQl1cCgmYWNsLT5zZW0pOworCW11dGV4X3VubG9jaygmYWNsLT5sb2NrKTsKIH0KIAogdm9pZApAQCAtMTgzMywxMyArMTgzMywxMyBAQAogCiAJbWVtY3B5KGVudHJ5LT5hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhY2wtPnNlbSkpIHsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhY2wtPmxvY2spKSB7CiAJCWtmcmVlKGVudHJ5KTsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAl9CiAJbGlzdF9hZGRfdGFpbCgmZW50cnktPl9saXN0LCAmYWNsLT5tYWNfbGlzdCk7CiAJYWNsLT5zaXplKys7Ci0JdXAoJmFjbC0+c2VtKTsKKwltdXRleF91bmxvY2soJmFjbC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NTYsMTggKzE4NTYsMTggQEAKIAlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYWNsLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFjbC0+bG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFjbC0+bWFjX2xpc3QsIF9saXN0KSB7CiAJCWlmIChtZW1jbXAoZW50cnktPmFkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKSA9PSAwKSB7CiAJCQlsaXN0X2RlbCgmZW50cnktPl9saXN0KTsKIAkJCWFjbC0+c2l6ZS0tOwogCQkJa2ZyZWUoZW50cnkpOwotCQkJdXAoJmFjbC0+c2VtKTsKKwkJCW11dGV4X3VubG9jaygmYWNsLT5sb2NrKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCXVwKCZhY2wtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZhY2wtPmxvY2spOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0xODgyLDcgKzE4ODIsNyBAQAogCiAJZHdycS0+bGVuZ3RoID0gMDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmFjbC0+c2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhY2wtPmxvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFjbC0+bWFjX2xpc3QsIF9saXN0KSB7CkBAIC0xODkxLDcgKzE4OTEsNyBAQAogCQlkd3JxLT5sZW5ndGgrKzsKIAkJZHN0Kys7CiAJfQotCXVwKCZhY2wtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZhY2wtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xOTU1LDExICsxOTU1LDExIEBACiAJc3RydWN0IG1hY19lbnRyeSAqZW50cnk7CiAJaW50IHJlcyA9IDA7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhY2wtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWNsLT5sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChhY2wtPnBvbGljeSA9PSBNQUNfUE9MSUNZX09QRU4pIHsKLQkJdXAoJmFjbC0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZhY2wtPmxvY2spOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTE5NzAsNyArMTk3MCw3IEBACiAJCX0KIAl9CiAJcmVzID0gKGFjbC0+cG9saWN5ID09IE1BQ19QT0xJQ1lfQUNDRVBUKSA/ICFyZXMgOiByZXM7Ci0JdXAoJmFjbC0+c2VtKTsKKwltdXRleF91bmxvY2soJmFjbC0+bG9jayk7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMjA4MSw2ICsyMDgxLDcgQEAKIAlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJaWYgKGJpdHJhdGUpIHsKKwkJbmV0aWZfY2Fycmllcl9vbihuZGV2KTsKIAkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkgewogCQkJdW5pb24gaXdyZXFfZGF0YSB1d3JxOwogCQkJcHJpc201NF9nZXRfd2FwKG5kZXYsIE5VTEwsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnV3cnEsCkBAIC0yMDg5LDggKzIwOTAsMTAgQEAKIAkJfSBlbHNlCiAJCQlzZW5kX3NpbXBsZV9ldmVudChuZXRkZXZfcHJpdihuZGV2KSwKIAkJCQkJICAiTGluayBlc3RhYmxpc2hlZCIpOwotCX0gZWxzZQorCX0gZWxzZSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwogCQlzZW5kX3NpbXBsZV9ldmVudChuZXRkZXZfcHJpdihuZGV2KSwgIkxpbmsgbG9zdCIpOworCX0KIH0KIAogLyogQmVhY29uL1Byb2JlUmVzcCBwYXlsb2FkIGhlYWRlciAqLwpAQCAtMjExNCw3ICsyMTE3LDcgQEAKIAlpZiAod3BhX2llX2xlbiA+IE1BWF9XUEFfSUVfTEVOKQogCQl3cGFfaWVfbGVuID0gTUFYX1dQQV9JRV9MRU47CiAKLQlkb3duKCZwcml2LT53cGFfc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT53cGFfbG9jayk7CiAKIAkvKiB0cnkgdG8gdXNlIGV4aXN0aW5nIGVudHJ5ICovCiAJbGlzdF9mb3JfZWFjaChwdHIsICZwcml2LT5ic3Nfd3BhX2xpc3QpIHsKQEAgLTIxNjUsNyArMjE2OCw3IEBACiAJCWtmcmVlKGJzcyk7CiAJfQogCi0JdXAoJnByaXYtPndwYV9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+d3BhX2xvY2spOwogfQogCiBzdGF0aWMgc2l6ZV90CkBAIC0yMTc1LDcgKzIxNzgsNyBAQAogCXN0cnVjdCBpc2xwY2lfYnNzX3dwYV9pZSAqYnNzID0gTlVMTDsKIAlzaXplX3QgbGVuID0gMDsKIAotCWRvd24oJnByaXYtPndwYV9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPndwYV9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2gocHRyLCAmcHJpdi0+YnNzX3dwYV9saXN0KSB7CiAJCWJzcyA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgaXNscGNpX2Jzc193cGFfaWUsIGxpc3QpOwpAQCAtMjE4Nyw3ICsyMTkwLDcgQEAKIAkJbGVuID0gYnNzLT53cGFfaWVfbGVuOwogCQltZW1jcHkod3BhX2llLCBic3MtPndwYV9pZSwgbGVuKTsKIAl9Ci0JdXAoJnByaXYtPndwYV9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+d3BhX2xvY2spOwogCiAJcmV0dXJuIGxlbjsKIH0KQEAgLTIxOTYsNyArMjE5OSw3IEBACiBwcmlzbTU0X3dwYV9ic3NfaWVfaW5pdChpc2xwY2lfcHJpdmF0ZSAqcHJpdikKIHsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX3dwYV9saXN0KTsKLQlzZW1hX2luaXQoJnByaXYtPndwYV9zZW0sIDEpOworCW11dGV4X2luaXQoJnByaXYtPndwYV9sb2NrKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCBkYmI1MzhjLi4wNGMyNjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtMzg3LDcgKzM4Nyw5IEBACiAJfQogCiAJbmV0aWZfc3RhcnRfcXVldWUobmRldik7Ci0vKiAgICAgIG5ldGlmX21hcmtfdXAoIG5kZXYgKTsgKi8KKworCS8qIFR1cm4gb2ZmIGNhcnJpZXIgdW5sZXNzIHdlIGtub3cgd2UgaGF2ZSBhc3NvY2lhdGVkICovCisJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg2NCw3ICs4NjYsNyBAQAogCW11dGV4X2luaXQoJnByaXYtPm1nbXRfbG9jayk7CiAJcHJpdi0+bWdtdF9yZWNlaXZlZCA9IE5VTEw7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+bWdtdF93cXVldWUpOwotCXNlbWFfaW5pdCgmcHJpdi0+c3RhdHNfc2VtLCAxKTsKKwltdXRleF9pbml0KCZwcml2LT5zdGF0c19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c2xvY2spOwogCiAJLyogaW5pdCBzdGF0ZSBtYWNoaW5lIHdpdGggb2ZmIzEgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKaW5kZXggNGUwMTgyYy4uOGU1NWE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKQEAgLTU1LDcgKzU1LDcgQEAKICAgIGVudW0geyBNQUNfUE9MSUNZX09QRU49MCwgTUFDX1BPTElDWV9BQ0NFUFQ9MSwgTUFDX1BPTElDWV9SRUpFQ1Q9MiB9IHBvbGljeTsKICAgIHN0cnVjdCBsaXN0X2hlYWQgbWFjX2xpc3Q7ICAvKiBhIGxpc3Qgb2YgbWFjX2VudHJ5ICovCiAgICBpbnQgc2l6ZTsgICAvKiBzaXplIG9mIHF1ZXVlICovCi0gICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsgICAvKiBhY2Nlc3NlZCBpbiBpb2N0bHMgYW5kIHRyYXBfd29yayAqLworICAgc3RydWN0IG11dGV4IGxvY2s7ICAgLyogYWNjZXNzZWQgaW4gaW9jdGxzIGFuZCB0cmFwX3dvcmsgKi8KIH07CiAKIHN0cnVjdCBpc2xwY2lfbWVtYnVmIHsKQEAgLTg4LDcgKzg4LDcgQEAKIAogCS8qIFRha2UgY2FyZSBvZiB0aGUgd2lyZWxlc3Mgc3RhdHMgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhdHNfd29yazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHN0YXRzX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggc3RhdHNfbG9jazsKIAkvKiByZW1lbWJlciB3aGVuIHdlIGxhc3QgdXBkYXRlZCB0aGUgc3RhdHMgKi8KIAl1bnNpZ25lZCBsb25nIHN0YXRzX3RpbWVzdGFtcDsKIAkvKiBUaGUgZmlyc3QgaXMgYWNjZXNzZWQgdW5kZXIgc2VtYXBob3JlIGxvY2tpbmcuCkBAIC0xNzgsNyArMTc4LDcgQEAKIAlpbnQgd3BhOyAvKiBXUEEgbW9kZSBlbmFibGVkICovCiAJc3RydWN0IGxpc3RfaGVhZCBic3Nfd3BhX2xpc3Q7CiAJaW50IG51bV9ic3Nfd3BhOwotCXN0cnVjdCBzZW1hcGhvcmUgd3BhX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggd3BhX2xvY2s7CiAJdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKIAlzaXplX3Qgd3BhX2llX2xlbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCBmMzg1OGVlLi45NjM5NjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtMjU4Miw3ICsyNTgzLDcgQEAKIHN0YXRpYyBjaGFyICpmcmFtaW5nW10gPSB7IkVuY2Fwc3VsYXRpb24iLCAiVHJhbnNsYXRpb24ifQogOwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCByYXlfY3NfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW4pCitzdGF0aWMgaW50IHJheV9jc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogLyogUHJpbnQgY3VycmVudCB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdmlhIG90aGVyIG1lYW5zCiAgKiBlZyBpZmNvbmZpZyAKQEAgLTI2MDYsODMgKzI2MDcsOTMgQEAKICAgICBpZiAoIWxvY2FsKQogICAgIAlyZXR1cm4gMDsKIAotICAgIGxlbiA9IDA7Ci0KLSAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSYXlsaW5rIFdpcmVsZXNzIExBTiBkcml2ZXIgc3RhdHVzXG4iKTsKLSAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlc1xuIiwgcmNzaWQpOworICAgIHNlcV9wdXRzKG0sICJSYXlsaW5rIFdpcmVsZXNzIExBTiBkcml2ZXIgc3RhdHVzXG4iKTsKKyAgICBzZXFfcHJpbnRmKG0sICIlc1xuIiwgcmNzaWQpOwogICAgIC8qIGJ1aWxkIDQgZG9lcyBub3QgcmVwb3J0IHZlcnNpb24sIGFuZCBmaWVsZCBpcyAweDU1IGFmdGVyIG1lbXRlc3QgKi8KLSAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJGaXJtd2FyZSB2ZXJzaW9uICAgICA9ICIpOworICAgIHNlcV9wdXRzKG0sICJGaXJtd2FyZSB2ZXJzaW9uICAgICA9ICIpOwogICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCi0gICAgICAgIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjQgLSBVc2UgZHVtcF9jaXMgZm9yIG1vcmUgZGV0YWlsc1xuIik7CisgICAgICAgIHNlcV9wdXRzKG0sICI0IC0gVXNlIGR1bXBfY2lzIGZvciBtb3JlIGRldGFpbHNcbiIpOwogICAgIGVsc2UKLSAgICAgICAgbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTJkLiUwMmQuJTAyZFxuIiwKKyAgICAgICAgc2VxX3ByaW50ZihtLCAiJTJkLiUwMmQuJTAyZFxuIiwKICAgICAgICAgICAgICAgICAgICBsb2NhbC0+ZndfdmVyLCBsb2NhbC0+ZndfYmxkLCBsb2NhbC0+ZndfdmFyKTsKIAogICAgIGZvciAoaT0wOyBpPDMyOyBpKyspIGNbaV0gPSBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyZW50X2Vzc19pZFtpXTsKICAgICBjWzMyXSA9IDA7Ci0gICAgbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXMgbmV0d29yayBFU1NJRCA9IFwiJXNcIlxuIiwgCisgICAgc2VxX3ByaW50ZihtLCAiJXMgbmV0d29yayBFU1NJRCA9IFwiJXNcIlxuIiwKICAgICAgICAgICAgICAgICAgICBuZXR0eXBlW2xvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZV0sIGMpOwogCiAgICAgcCA9IGxvY2FsLT5ic3NfaWQ7Ci0gICAgbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiQlNTSUQgICAgICAgICAgICAgICAgPSAlc1xuIiwKKyAgICBzZXFfcHJpbnRmKG0sICJCU1NJRCAgICAgICAgICAgICAgICA9ICVzXG4iLAogICAgICAgICAgICAgICAgICAgIHByaW50X21hYyhtYWMsIHApKTsKIAotICAgIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50cnkgY29kZSAgICAgICAgID0gJWRcbiIsIAorICAgIHNlcV9wcmludGYobSwgIkNvdW50cnkgY29kZSAgICAgICAgID0gJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfY3Vycl9jb3VudHJ5X2NvZGUpOwogCiAgICAgaSA9IGxvY2FsLT5jYXJkX3N0YXR1czsKICAgICBpZiAoaSA8IDApIGkgPSAxMDsKICAgICBpZiAoaSA+IDE2KSBpID0gMTA7Ci0gICAgbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiQ2FyZCBzdGF0dXMgICAgICAgICAgPSAlc1xuIiwgY2FyZF9zdGF0dXNbaV0pOworICAgIHNlcV9wcmludGYobSwgIkNhcmQgc3RhdHVzICAgICAgICAgID0gJXNcbiIsIGNhcmRfc3RhdHVzW2ldKTsKIAotICAgIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkZyYW1pbmcgbW9kZSAgICAgICAgID0gJXNcbiIsZnJhbWluZ1t0cmFuc2xhdGVdKTsKKyAgICBzZXFfcHJpbnRmKG0sICJGcmFtaW5nIG1vZGUgICAgICAgICA9ICVzXG4iLGZyYW1pbmdbdHJhbnNsYXRlXSk7CiAKLSAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJMYXN0IHBrdCBzaWduYWwgbHZsICA9ICVkXG4iLCBsb2NhbC0+bGFzdF9yc2wpOworICAgIHNlcV9wcmludGYobSwgIkxhc3QgcGt0IHNpZ25hbCBsdmwgID0gJWRcbiIsIGxvY2FsLT5sYXN0X3JzbCk7CiAKICAgICBpZiAobG9jYWwtPmJlYWNvbl9yeGVkKSB7CiAJLyogUHVsbCBzb21lIGZpZWxkcyBvdXQgb2YgbGFzdCBiZWFjb24gcmVjZWl2ZWQgKi8KLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJCZWFjb24gSW50ZXJ2YWwgICAgICA9ICVkIEt1c1xuIiwgCisJc2VxX3ByaW50ZihtLCAiQmVhY29uIEludGVydmFsICAgICAgPSAlZCBLdXNcbiIsCiAJCSAgICAgICBsb2NhbC0+bGFzdF9iY24uYmVhY29uX2ludHZsWzBdCiAJCSAgICAgICArIDI1NiAqIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMV0pOwogICAgIAogICAgIHAgPSBsb2NhbC0+bGFzdF9iY24uZWxlbWVudHM7CiAgICAgaWYgKHBbMF0gPT0gQ19FU1NJRF9FTEVNRU5UX0lEKSBwICs9IHBbMV0gKyAyOwogICAgIGVsc2UgewotICAgICAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IGVzc2lkIGVsZW1lbnQgaWQgPSAlZFxuIixwWzBdKTsKLSAgICAgICAgcmV0dXJuIGxlbjsKKyAgICAgICAgc2VxX3ByaW50ZihtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBlc3NpZCBlbGVtZW50IGlkID0gJWRcbiIscFswXSk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmIChwWzBdID09IENfU1VQUE9SVEVEX1JBVEVTX0VMRU1FTlRfSUQpIHsKLSAgICAgICAgbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiU3VwcG9ydGVkIHJhdGUgY29kZXMgPSAiKTsKKyAgICAgICAgc2VxX3B1dHMobSwgIlN1cHBvcnRlZCByYXRlIGNvZGVzID0gIik7CiAgICAgICAgIGZvciAoaT0yOyBpPHBbMV0gKyAyOyBpKyspIAotICAgICAgICAgICAgbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMHglMDJ4ICIsIHBbaV0pOwotICAgICAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbiIpOworICAgICAgICAgICAgc2VxX3ByaW50ZihtLCAiMHglMDJ4ICIsIHBbaV0pOworICAgICAgICBzZXFfcHV0YyhtLCAnXG4nKTsKICAgICAgICAgcCArPSBwWzFdICsgMjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgcmF0ZXMgZWxlbWVudFxuIik7Ci0gICAgICAgIHJldHVybiBsZW47CisgICAgICAgIHNlcV9wdXRzKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IHJhdGVzIGVsZW1lbnRcbiIpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKIAlpZiAocFswXSA9PSBDX0ZIX1BBUkFNX1NFVF9FTEVNRU5UX0lEKSB7CiAJICAgIHBmaCA9IChzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqKXA7Ci0JICAgIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkhvcCBkd2VsbCAgICAgICAgICAgID0gJWQgS3VzXG4iLAorCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgZHdlbGwgICAgICAgICAgICA9ICVkIEt1c1xuIiwKIAkJCSAgIHBmaC0+ZHdlbGxfdGltZVswXSArIDI1NiAqIHBmaC0+ZHdlbGxfdGltZVsxXSk7Ci0JICAgIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkhvcCBzZXQgICAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9zZXQpOwotCSAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJIb3AgcGF0dGVybiAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3BfcGF0dGVybik7Ci0JICAgIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkhvcCBpbmRleCAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9pbmRleCk7CisJICAgIHNlcV9wcmludGYobSwgIkhvcCBzZXQgICAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9zZXQpOworCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgcGF0dGVybiAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3BfcGF0dGVybik7CisJICAgIHNlcV9wcmludGYobSwgIkhvcCBpbmRleCAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9pbmRleCk7CiAJICAgIHAgKz0gcFsxXSArIDI7CiAJfQogCWVsc2UgewotCSAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IEZIIHBhcmFtIGVsZW1lbnRcbiIpOwotCSAgICByZXR1cm4gbGVuOworCSAgICBzZXFfcHV0cyhtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBGSCBwYXJhbSBlbGVtZW50XG4iKTsKKwkgICAgcmV0dXJuIDA7CiAJfQogICAgIH0gZWxzZSB7Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiTm8gYmVhY29ucyByZWNlaXZlZFxuIik7CisJc2VxX3B1dHMobSwgIk5vIGJlYWNvbnMgcmVjZWl2ZWRcbiIpOwogICAgIH0KLSAgICByZXR1cm4gbGVuOworICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJheV9jc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJheV9jc19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXlfY3NfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSByYXlfY3NfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OwogI2VuZGlmCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IGJ1aWxkX2F1dGhfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBhdXRoX3R5cGUpCkBAIC0yODE1LDcgKzI4MjYsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAgICAgcHJvY19ta2RpcigiZHJpdmVyL3JheV9jcyIsIE5VTEwpOwogCi0gICAgY3JlYXRlX3Byb2NfaW5mb19lbnRyeSgiZHJpdmVyL3JheV9jcy9yYXlfY3MiLCAwLCBOVUxMLCAmcmF5X2NzX3Byb2NfcmVhZCk7CisgICAgcHJvY19jcmVhdGUoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgMCwgTlVMTCwgJnJheV9jc19wcm9jX2ZvcHMpOwogICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgd3JpdGVfZXNzaWQsIE5VTEwpOwogICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgd3JpdGVfaW50LCAmbmV0X3R5cGUpOwogICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIHdyaXRlX2ludCwgJnRyYW5zbGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggZDNlY2Y4OS4uOTc3NzUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtMTU0LDEzNiArMTU0LDEyOSBAQAogI2RlZmluZSBORElTXzgwMl8xMV9MRU5HVEhfUkFURVMgOAogI2RlZmluZSBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVggMTYKIAotc3RydWN0IE5ESVNfODAyXzExX1NTSUQgewotCV9fbGUzMiBTc2lkTGVuZ3RoOwotCXU4IFNzaWRbTkRJU184MDJfMTFfTEVOR1RIX1NTSURdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotZW51bSBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgewotCU5kaXM4MDJfMTFGSCwKLQlOZGlzODAyXzExRFMsCi0JTmRpczgwMl8xMU9GRE01LAotCU5kaXM4MDJfMTFPRkRNMjQsCi0JTmRpczgwMl8xMU5ldHdvcmtUeXBlTWF4CitlbnVtIG5kaXNfODAyMTFfbmV0X3R5cGUgeworCW5kaXNfODAyMTFfdHlwZV9mcmVxX2hvcCwKKwluZGlzXzgwMjExX3R5cGVfZGlyZWN0X3NlcSwKKwluZGlzXzgwMjExX3R5cGVfb2ZkbV9hLAorCW5kaXNfODAyMTFfdHlwZV9vZmRtX2cKIH07CiAKLXN0cnVjdCBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OX0ZIIHsKLQlfX2xlMzIgTGVuZ3RoOwotCV9fbGUzMiBIb3BQYXR0ZXJuOwotCV9fbGUzMiBIb3BTZXQ7Ci0JX19sZTMyIER3ZWxsVGltZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OIHsKLQlfX2xlMzIgTGVuZ3RoOwotCV9fbGUzMiBCZWFjb25QZXJpb2Q7Ci0JX19sZTMyIEFUSU1XaW5kb3c7Ci0JX19sZTMyIERTQ29uZmlnOwotCXN0cnVjdCBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OX0ZIIEZIQ29uZmlnOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotZW51bSBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIHsKLQlOZGlzODAyXzExSUJTUywKLQlOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmUsCi0JTmRpczgwMl8xMUF1dG9Vbmtub3duLAotCU5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZU1heAorZW51bSBuZGlzXzgwMjExX25ldF9pbmZyYSB7CisJbmRpc184MDIxMV9pbmZyYV9hZGhvYywKKwluZGlzXzgwMjExX2luZnJhX2luZnJhLAorCW5kaXNfODAyMTFfaW5mcmFfYXV0b191bmtub3duCiB9OwogCi1lbnVtIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgewotCU5kaXM4MDJfMTFBdXRoTW9kZU9wZW4sCi0JTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkLAotCU5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gsCi0JTmRpczgwMl8xMUF1dGhNb2RlV1BBLAotCU5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSywKLQlOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lLAotCU5kaXM4MDJfMTFBdXRoTW9kZVdQQTIsCi0JTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSywKLQlOZGlzODAyXzExQXV0aE1vZGVNYXgKK2VudW0gbmRpc184MDIxMV9hdXRoX21vZGUgeworCW5kaXNfODAyMTFfYXV0aF9vcGVuLAorCW5kaXNfODAyMTFfYXV0aF9zaGFyZWQsCisJbmRpc184MDIxMV9hdXRoX2F1dG9fc3dpdGNoLAorCW5kaXNfODAyMTFfYXV0aF93cGEsCisJbmRpc184MDIxMV9hdXRoX3dwYV9wc2ssCisJbmRpc184MDIxMV9hdXRoX3dwYV9ub25lLAorCW5kaXNfODAyMTFfYXV0aF93cGEyLAorCW5kaXNfODAyMTFfYXV0aF93cGEyX3BzawogfTsKIAotZW51bSBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyB7Ci0JTmRpczgwMl8xMVdFUEVuYWJsZWQsCi0JTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCA9IE5kaXM4MDJfMTFXRVBFbmFibGVkLAotCU5kaXM4MDJfMTFXRVBEaXNhYmxlZCwKLQlOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkID0gTmRpczgwMl8xMVdFUERpc2FibGVkLAotCU5kaXM4MDJfMTFXRVBLZXlBYnNlbnQsCi0JTmRpczgwMl8xMUVuY3J5cHRpb24xS2V5QWJzZW50ID0gTmRpczgwMl8xMVdFUEtleUFic2VudCwKLQlOZGlzODAyXzExV0VQTm90U3VwcG9ydGVkLAotCU5kaXM4MDJfMTFFbmNyeXB0aW9uTm90U3VwcG9ydGVkID0gTmRpczgwMl8xMVdFUE5vdFN1cHBvcnRlZCwKLQlOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkLAotCU5kaXM4MDJfMTFFbmNyeXB0aW9uMktleUFic2VudCwKLQlOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkLAotCU5kaXM4MDJfMTFFbmNyeXB0aW9uM0tleUFic2VudAorZW51bSBuZGlzXzgwMjExX2VuY3Jfc3RhdHVzIHsKKwluZGlzXzgwMjExX2VuY3Jfd2VwX2VuYWJsZWQsCisJbmRpc184MDIxMV9lbmNyX2Rpc2FibGVkLAorCW5kaXNfODAyMTFfZW5jcl93ZXBfa2V5X2Fic2VudCwKKwluZGlzXzgwMjExX2VuY3Jfbm90X3N1cHBvcnRlZCwKKwluZGlzXzgwMjExX2VuY3JfdGtpcF9lbmFibGVkLAorCW5kaXNfODAyMTFfZW5jcl90a2lwX2tleV9hYnNlbnQsCisJbmRpc184MDIxMV9lbmNyX2NjbXBfZW5hYmxlZCwKKwluZGlzXzgwMjExX2VuY3JfY2NtcF9rZXlfYWJzZW50CiB9OwogCi1lbnVtIE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSIHsKLQlOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbCwKLQlOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQCitlbnVtIG5kaXNfODAyMTFfcHJpdl9maWx0ZXIgeworCW5kaXNfODAyMTFfcHJpdl9hY2NlcHRfYWxsLAorCW5kaXNfODAyMTFfcHJpdl84MDIxeF93ZXAKIH07CiAKLXN0cnVjdCBORElTX1dMQU5fQlNTSURfRVggewotCV9fbGUzMiBMZW5ndGg7Ci0JdTggTWFjQWRkcmVzc1s2XTsKLQl1OCBQYWRkaW5nWzJdOwotCXN0cnVjdCBORElTXzgwMl8xMV9TU0lEIFNzaWQ7Ci0JX19sZTMyIFByaXZhY3k7Ci0JX19sZTMyIFJzc2k7Ci0JZW51bSBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgTmV0d29ya1R5cGVJblVzZTsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiBDb25maWd1cmF0aW9uOwotCWVudW0gTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSBJbmZyYXN0cnVjdHVyZU1vZGU7Ci0JdTggU3VwcG9ydGVkUmF0ZXNbTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTX0VYXTsKLQlfX2xlMzIgSUVMZW5ndGg7Ci0JdTggSUVzWzBdOworc3RydWN0IG5kaXNfODAyMTFfc3NpZCB7CisJX19sZTMyIGxlbmd0aDsKKwl1OCBlc3NpZFtORElTXzgwMl8xMV9MRU5HVEhfU1NJRF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdHJ1Y3QgTkRJU184MDJfMTFfQlNTSURfTElTVF9FWCB7Ci0JX19sZTMyIE51bWJlck9mSXRlbXM7Ci0Jc3RydWN0IE5ESVNfV0xBTl9CU1NJRF9FWCBCc3NpZFswXTsKK3N0cnVjdCBuZGlzXzgwMjExX2NvbmZfZnJlcV9ob3AgeworCV9fbGUzMiBsZW5ndGg7CisJX19sZTMyIGhvcF9wYXR0ZXJuOworCV9fbGUzMiBob3Bfc2V0OworCV9fbGUzMiBkd2VsbF90aW1lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RydWN0IE5ESVNfODAyXzExX0ZJWEVEX0lFcyB7Ci0JdTggVGltZXN0YW1wWzhdOwotCV9fbGUxNiBCZWFjb25JbnRlcnZhbDsKLQlfX2xlMTYgQ2FwYWJpbGl0aWVzOworc3RydWN0IG5kaXNfODAyMTFfY29uZiB7CisJX19sZTMyIGxlbmd0aDsKKwlfX2xlMzIgYmVhY29uX3BlcmlvZDsKKwlfX2xlMzIgYXRpbV93aW5kb3c7CisJX19sZTMyIGRzX2NvbmZpZzsKKwlzdHJ1Y3QgbmRpc184MDIxMV9jb25mX2ZyZXFfaG9wIGZoX2NvbmZpZzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXN0cnVjdCBORElTXzgwMl8xMV9XRVAgewotCV9fbGUzMiBMZW5ndGg7Ci0JX19sZTMyIEtleUluZGV4OwotCV9fbGUzMiBLZXlMZW5ndGg7Ci0JdTggS2V5TWF0ZXJpYWxbMzJdOworc3RydWN0IG5kaXNfODAyMTFfYnNzaWRfZXggeworCV9fbGUzMiBsZW5ndGg7CisJdTggbWFjWzZdOworCXU4IHBhZGRpbmdbMl07CisJc3RydWN0IG5kaXNfODAyMTFfc3NpZCBzc2lkOworCV9fbGUzMiBwcml2YWN5OworCV9fbGUzMiByc3NpOworCV9fbGUzMiBuZXRfdHlwZTsKKwlzdHJ1Y3QgbmRpc184MDIxMV9jb25mIGNvbmZpZzsKKwlfX2xlMzIgbmV0X2luZnJhOworCXU4IHJhdGVzW05ESVNfODAyXzExX0xFTkdUSF9SQVRFU19FWF07CisJX19sZTMyIGllX2xlbmd0aDsKKwl1OCBpZXNbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdHJ1Y3QgTkRJU184MDJfMTFfS0VZIHsKLQlfX2xlMzIgTGVuZ3RoOwotCV9fbGUzMiBLZXlJbmRleDsKLQlfX2xlMzIgS2V5TGVuZ3RoOwotCXU4IEJzc2lkWzZdOwotCXU4IFBhZGRpbmdbNl07Ci0JX19sZTY0IEtleVJTQzsKLQl1OCBLZXlNYXRlcmlhbFszMl07CitzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9saXN0X2V4IHsKKwlfX2xlMzIgbnVtX2l0ZW1zOworCXN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2V4IGJzc2lkWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RydWN0IE5ESVNfODAyXzExX1JFTU9WRV9LRVkgewotCV9fbGUzMiBMZW5ndGg7Ci0JX19sZTMyIEtleUluZGV4OwotCXU4IEJzc2lkWzZdOworc3RydWN0IG5kaXNfODAyMTFfZml4ZWRfaWVzIHsKKwl1OCB0aW1lc3RhbXBbOF07CisJX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKKwlfX2xlMTYgY2FwYWJpbGl0aWVzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RydWN0IFJORElTX0NPTkZJR19QQVJBTUVURVJfSU5GT0JVRkZFUiB7Ci0JX19sZTMyIFBhcmFtZXRlck5hbWVPZmZzZXQ7Ci0JX19sZTMyIFBhcmFtZXRlck5hbWVMZW5ndGg7Ci0JX19sZTMyIFBhcmFtZXRlclR5cGU7Ci0JX19sZTMyIFBhcmFtZXRlclZhbHVlT2Zmc2V0OwotCV9fbGUzMiBQYXJhbWV0ZXJWYWx1ZUxlbmd0aDsKK3N0cnVjdCBuZGlzXzgwMjExX3dlcF9rZXkgeworCV9fbGUzMiBzaXplOworCV9fbGUzMiBpbmRleDsKKwlfX2xlMzIgbGVuZ3RoOworCXU4IG1hdGVyaWFsWzMyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBuZGlzXzgwMjExX2tleSB7CisJX19sZTMyIHNpemU7CisJX19sZTMyIGluZGV4OworCV9fbGUzMiBsZW5ndGg7CisJdTggYnNzaWRbNl07CisJdTggcGFkZGluZ1s2XTsKKwl1OCByc2NbOF07CisJdTggbWF0ZXJpYWxbMzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG5kaXNfODAyMTFfcmVtb3ZlX2tleSB7CisJX19sZTMyIHNpemU7CisJX19sZTMyIGluZGV4OworCXU4IGJzc2lkWzZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG5kaXNfY29uZmlnX3BhcmFtIHsKKwlfX2xlMzIgbmFtZV9vZmZzOworCV9fbGUzMiBuYW1lX2xlbmd0aDsKKwlfX2xlMzIgdHlwZTsKKwlfX2xlMzIgdmFsdWVfb2ZmczsKKwlfX2xlMzIgdmFsdWVfbGVuZ3RoOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogdGhlc2UgaGF2ZSB0byBtYXRjaCB3aGF0IGlzIGluIHdwYV9zdXBwbGljYW50ICovCi1lbnVtIHsgV1BBX0FMR19OT05FLCBXUEFfQUxHX1dFUCwgV1BBX0FMR19US0lQLCBXUEFfQUxHX0NDTVAgfSB3cGFfYWxnOwotZW51bSB7IENJUEhFUl9OT05FLCBDSVBIRVJfV0VQNDAsIENJUEhFUl9US0lQLCBDSVBIRVJfQ0NNUCwgQ0lQSEVSX1dFUDEwNCB9Ci0Jd3BhX2NpcGhlcjsKLWVudW0geyBLRVlfTUdNVF84MDJfMVgsIEtFWV9NR01UX1BTSywgS0VZX01HTVRfTk9ORSwgS0VZX01HTVRfODAyXzFYX05PX1dQQSwKLQlLRVlfTUdNVF9XUEFfTk9ORSB9IHdwYV9rZXlfbWdtdDsKK2VudW0gd3BhX2FsZyB7IFdQQV9BTEdfTk9ORSwgV1BBX0FMR19XRVAsIFdQQV9BTEdfVEtJUCwgV1BBX0FMR19DQ01QIH07CitlbnVtIHdwYV9jaXBoZXIgeyBDSVBIRVJfTk9ORSwgQ0lQSEVSX1dFUDQwLCBDSVBIRVJfVEtJUCwgQ0lQSEVSX0NDTVAsCisJCSAgQ0lQSEVSX1dFUDEwNCB9OworZW51bSB3cGFfa2V5X21nbXQgeyBLRVlfTUdNVF84MDJfMVgsIEtFWV9NR01UX1BTSywgS0VZX01HTVRfTk9ORSwKKwkJICAgIEtFWV9NR01UXzgwMl8xWF9OT19XUEEsIEtFWV9NR01UX1dQQV9OT05FIH07CiAKIC8qCiAgKiAgcHJpdmF0ZSBkYXRhCkBAIC0zMzQsNyArMzI3LDcgQEAKIAkvKiBoYXJkd2FyZSBzdGF0ZSAqLwogCWludCByYWRpb19vbjsKIAlpbnQgaW5mcmFfbW9kZTsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfU1NJRCBlc3NpZDsKKwlzdHJ1Y3QgbmRpc184MDIxMV9zc2lkIGVzc2lkOwogCiAJLyogZW5jcnlwdGlvbiBzdHVmZiAqLwogCWludCAgZW5jcl90eF9rZXlfaW5kZXg7CkBAIC00ODQsNyArNDc3LDcgQEAKIHN0YXRpYyBpbnQgcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXIoc3RydWN0IHVzYm5ldCAqZGV2LCBjaGFyICpwYXJhbSwKIAkJCQkJCWludCB2YWx1ZV90eXBlLCB2b2lkICp2YWx1ZSkKIHsKLQlzdHJ1Y3QgUk5ESVNfQ09ORklHX1BBUkFNRVRFUl9JTkZPQlVGRkVSICppbmZvYnVmOworCXN0cnVjdCBuZGlzX2NvbmZpZ19wYXJhbSAqaW5mb2J1ZjsKIAlpbnQgdmFsdWVfbGVuLCBpbmZvX2xlbiwgcGFyYW1fbGVuLCByZXQsIGk7CiAJX19sZTE2ICp1bmlidWY7CiAJX19sZTMyICpkc3RfdmFsdWU7CkBAIC01MTksMTIgKzUxMiwxMSBAQAogCQlkZXZkYmcoZGV2LCAic2V0dGluZyBjb25maWcgcGFyYW1ldGVyOiAlcywgdmFsdWU6ICVkIiwKIAkJCQkJCXBhcmFtLCAqKHUzMiAqKXZhbHVlKTsKIAotCWluZm9idWYtPlBhcmFtZXRlck5hbWVPZmZzZXQgPSBjcHVfdG9fbGUzMihzaXplb2YoKmluZm9idWYpKTsKLQlpbmZvYnVmLT5QYXJhbWV0ZXJOYW1lTGVuZ3RoID0gY3B1X3RvX2xlMzIocGFyYW1fbGVuKTsKLQlpbmZvYnVmLT5QYXJhbWV0ZXJUeXBlID0gY3B1X3RvX2xlMzIodmFsdWVfdHlwZSk7Ci0JaW5mb2J1Zi0+UGFyYW1ldGVyVmFsdWVPZmZzZXQgPSBjcHVfdG9fbGUzMihzaXplb2YoKmluZm9idWYpICsKLQkJCQkJCQkJcGFyYW1fbGVuKTsKLQlpbmZvYnVmLT5QYXJhbWV0ZXJWYWx1ZUxlbmd0aCA9IGNwdV90b19sZTMyKHZhbHVlX2xlbik7CisJaW5mb2J1Zi0+bmFtZV9vZmZzID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCppbmZvYnVmKSk7CisJaW5mb2J1Zi0+bmFtZV9sZW5ndGggPSBjcHVfdG9fbGUzMihwYXJhbV9sZW4pOworCWluZm9idWYtPnR5cGUgPSBjcHVfdG9fbGUzMih2YWx1ZV90eXBlKTsKKwlpbmZvYnVmLT52YWx1ZV9vZmZzID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCppbmZvYnVmKSArIHBhcmFtX2xlbik7CisJaW5mb2J1Zi0+dmFsdWVfbGVuZ3RoID0gY3B1X3RvX2xlMzIodmFsdWVfbGVuKTsKIAogCS8qIHNpbXBsZSBzdHJpbmcgdG8gdW5pY29kZSBzdHJpbmcgY29udmVyc2lvbiAqLwogCXVuaWJ1ZiA9ICh2b2lkICopaW5mb2J1ZiArIHNpemVvZigqaW5mb2J1Zik7CkBAIC02MzAsNyArNjIyLDcgQEAKIHN0YXRpYyBpbnQKIGFkZF93ZXBfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KTsKIAotc3RhdGljIGludCBnZXRfZXNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBzdHJ1Y3QgTkRJU184MDJfMTFfU1NJRCAqc3NpZCkKK3N0YXRpYyBpbnQgZ2V0X2Vzc2lkKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IG5kaXNfODAyMTFfc3NpZCAqc3NpZCkKIHsKIAlpbnQgcmV0LCBsZW47CiAKQEAgLTYzOCwxNCArNjMwLDE0IEBACiAJcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9TU0lELCBzc2lkLCAmbGVuKTsKIAogCWlmIChyZXQgIT0gMCkKLQkJc3NpZC0+U3NpZExlbmd0aCA9IDA7CisJCXNzaWQtPmxlbmd0aCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXsKIAkJdW5zaWduZWQgY2hhciB0bXBbTkRJU184MDJfMTFfTEVOR1RIX1NTSUQgKyAxXTsKIAotCQltZW1jcHkodG1wLCBzc2lkLT5Tc2lkLCBsZTMyX3RvX2NwdShzc2lkLT5Tc2lkTGVuZ3RoKSk7Ci0JCXRtcFtsZTMyX3RvX2NwdShzc2lkLT5Tc2lkTGVuZ3RoKV0gPSAwOworCQltZW1jcHkodG1wLCBzc2lkLT5lc3NpZCwgbGUzMl90b19jcHUoc3NpZC0+bGVuZ3RoKSk7CisJCXRtcFtsZTMyX3RvX2NwdShzc2lkLT5sZW5ndGgpXSA9IDA7CiAJCWRldmRiZyh1c2JkZXYsICJnZXRfZXNzaWQ6ICclcycsIHJldDogJWQiLCB0bXAsIHJldCk7CiAJfQogI2VuZGlmCkBAIC02NTMsNyArNjQ1LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNldF9lc3NpZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHN0cnVjdCBORElTXzgwMl8xMV9TU0lEICpzc2lkKQorc3RhdGljIGludCBzZXRfZXNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBzdHJ1Y3QgbmRpc184MDIxMV9zc2lkICpzc2lkKQogewogCXN0cnVjdCBybmRpc193ZXh0X3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2V4dF9wcml2KHVzYmRldik7CiAJaW50IHJldDsKQEAgLTY5Nyw3ICs2ODksNyBAQAogc3RhdGljIGludCBkaXNhc3NvY2lhdGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgcmVzZXRfc3NpZCkKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2V4dF9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dleHRfcHJpdih1c2JkZXYpOwotCXN0cnVjdCBORElTXzgwMl8xMV9TU0lEIHNzaWQ7CisJc3RydWN0IG5kaXNfODAyMTFfc3NpZCBzc2lkOwogCWludCBpLCByZXQgPSAwOwogCiAJaWYgKHByaXYtPnJhZGlvX29uKSB7CkBAIC03MTQsMTIgKzcwNiwxMiBAQAogCS8qIGRpc2Fzc29jaWF0ZSBjYXVzZXMgcmFkaW8gdG8gYmUgdHVybmVkIG9mZjsgaWYgcmVzZXRfc3NpZAogCSAqIGlzIGdpdmVuLCBzZXQgcmFuZG9tIHNzaWQgdG8gZW5hYmxlIHJhZGlvICovCiAJaWYgKHJlc2V0X3NzaWQpIHsKLQkJc3NpZC5Tc2lkTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHNzaWQuU3NpZCkpOwotCQlnZXRfcmFuZG9tX2J5dGVzKCZzc2lkLlNzaWRbMl0sIHNpemVvZihzc2lkLlNzaWQpLTIpOwotCQlzc2lkLlNzaWRbMF0gPSAweDE7Ci0JCXNzaWQuU3NpZFsxXSA9IDB4ZmY7Ci0JCWZvciAoaSA9IDI7IGkgPCBzaXplb2Yoc3NpZC5Tc2lkKTsgaSsrKQotCQkJc3NpZC5Tc2lkW2ldID0gMHgxICsgKHNzaWQuU3NpZFtpXSAqIDB4ZmUgLyAweGZmKTsKKwkJc3NpZC5sZW5ndGggPSBjcHVfdG9fbGUzMihzaXplb2Yoc3NpZC5lc3NpZCkpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZzc2lkLmVzc2lkWzJdLCBzaXplb2Yoc3NpZC5lc3NpZCktMik7CisJCXNzaWQuZXNzaWRbMF0gPSAweDE7CisJCXNzaWQuZXNzaWRbMV0gPSAweGZmOworCQlmb3IgKGkgPSAyOyBpIDwgc2l6ZW9mKHNzaWQuZXNzaWQpOyBpKyspCisJCQlzc2lkLmVzc2lkW2ldID0gMHgxICsgKHNzaWQuZXNzaWRbaV0gKiAweGZlIC8gMHhmZik7CiAJCXJldCA9IHNldF9lc3NpZCh1c2JkZXYsICZzc2lkKTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTczNywyMyArNzI5LDIzIEBACiAKIAlpZiAod3BhX3ZlcnNpb24gJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIpIHsKIAkJaWYgKHByaXYtPndwYV9rZXltZ210ICYgSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgpCi0JCQlhdXRoX21vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyOworCQkJYXV0aF9tb2RlID0gbmRpc184MDIxMV9hdXRoX3dwYTI7CiAJCWVsc2UKLQkJCWF1dGhfbW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s7CisJCQlhdXRoX21vZGUgPSBuZGlzXzgwMjExX2F1dGhfd3BhMl9wc2s7CiAJfSBlbHNlIGlmICh3cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKSB7CiAJCWlmIChwcml2LT53cGFfa2V5bWdtdCAmIElXX0FVVEhfS0VZX01HTVRfODAyXzFYKQotCQkJYXV0aF9tb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBOworCQkJYXV0aF9tb2RlID0gbmRpc184MDIxMV9hdXRoX3dwYTsKIAkJZWxzZSBpZiAocHJpdi0+d3BhX2tleW1nbXQgJiBJV19BVVRIX0tFWV9NR01UX1BTSykKLQkJCWF1dGhfbW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSzsKKwkJCWF1dGhfbW9kZSA9IG5kaXNfODAyMTFfYXV0aF93cGFfcHNrOwogCQllbHNlCi0JCQlhdXRoX21vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworCQkJYXV0aF9tb2RlID0gbmRpc184MDIxMV9hdXRoX3dwYV9ub25lOwogCX0gZWxzZSBpZiAoYXV0aGFsZyAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKIAkJaWYgKGF1dGhhbGcgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKLQkJCWF1dGhfbW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2g7CisJCQlhdXRoX21vZGUgPSBuZGlzXzgwMjExX2F1dGhfYXV0b19zd2l0Y2g7CiAJCWVsc2UKLQkJCWF1dGhfbW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZDsKKwkJCWF1dGhfbW9kZSA9IG5kaXNfODAyMTFfYXV0aF9zaGFyZWQ7CiAJfSBlbHNlCi0JCWF1dGhfbW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47CisJCWF1dGhfbW9kZSA9IG5kaXNfODAyMTFfYXV0aF9vcGVuOwogCiAJdG1wID0gY3B1X3RvX2xlMzIoYXV0aF9tb2RlKTsKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFLCAmdG1wLApAQCAtNzc4LDkgKzc3MCw5IEBACiAKIAlpZiAocHJpdi0+d3BhX3ZlcnNpb24gJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIgfHwKIAkgICAgcHJpdi0+d3BhX3ZlcnNpb24gJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSkKLQkJdG1wID0gY3B1X3RvX2xlMzIoTmRpczgwMl8xMVByaXZGaWx0ZXI4MDIxeFdFUCk7CisJCXRtcCA9IGNwdV90b19sZTMyKG5kaXNfODAyMTFfcHJpdl84MDIxeF93ZXApOwogCWVsc2UKLQkJdG1wID0gY3B1X3RvX2xlMzIoTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGwpOworCQl0bXAgPSBjcHVfdG9fbGUzMihuZGlzXzgwMjExX3ByaXZfYWNjZXB0X2FsbCk7CiAKIAlyZXR1cm4gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfUFJJVkFDWV9GSUxURVIsICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKQEAgLTc5OCwxOCArNzkwLDE4IEBACiAJCWdyb3Vwd2lzZSk7CiAKIAlpZiAocGFpcndpc2UgJiBJV19BVVRIX0NJUEhFUl9DQ01QKQotCQllbmNyX21vZGUgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworCQllbmNyX21vZGUgPSBuZGlzXzgwMjExX2VuY3JfY2NtcF9lbmFibGVkOwogCWVsc2UgaWYgKHBhaXJ3aXNlICYgSVdfQVVUSF9DSVBIRVJfVEtJUCkKLQkJZW5jcl9tb2RlID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKwkJZW5jcl9tb2RlID0gbmRpc184MDIxMV9lbmNyX3RraXBfZW5hYmxlZDsKIAllbHNlIGlmIChwYWlyd2lzZSAmCiAJCSAoSVdfQVVUSF9DSVBIRVJfV0VQNDAgfCBJV19BVVRIX0NJUEhFUl9XRVAxMDQpKQotCQllbmNyX21vZGUgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQllbmNyX21vZGUgPSBuZGlzXzgwMjExX2VuY3Jfd2VwX2VuYWJsZWQ7CiAJZWxzZSBpZiAoZ3JvdXB3aXNlICYgSVdfQVVUSF9DSVBIRVJfQ0NNUCkKLQkJZW5jcl9tb2RlID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJZW5jcl9tb2RlID0gbmRpc184MDIxMV9lbmNyX2NjbXBfZW5hYmxlZDsKIAllbHNlIGlmIChncm91cHdpc2UgJiBJV19BVVRIX0NJUEhFUl9US0lQKQotCQllbmNyX21vZGUgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQllbmNyX21vZGUgPSBuZGlzXzgwMjExX2VuY3JfdGtpcF9lbmFibGVkOwogCWVsc2UKLQkJZW5jcl9tb2RlID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKKwkJZW5jcl9tb2RlID0gbmRpc184MDIxMV9lbmNyX2Rpc2FibGVkOwogCiAJdG1wID0gY3B1X3RvX2xlMzIoZW5jcl9tb2RlKTsKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUywgJnRtcCwKQEAgLTg3Nyw3ICs4NjksNyBAQAogCXByaXYtPndwYV9rZXltZ210ID0gMDsKIAlwcml2LT53cGFfdmVyc2lvbiA9IDA7CiAKLQlzZXRfaW5mcmFfbW9kZSh1c2JkZXYsIE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSk7CisJc2V0X2luZnJhX21vZGUodXNiZGV2LCBuZGlzXzgwMjExX2luZnJhX2luZnJhKTsKIAlzZXRfYXV0aF9tb2RlKHVzYmRldiwgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCwKIAkJCQlJV19BVVRIX0FMR19PUEVOX1NZU1RFTSk7CiAJc2V0X3ByaXZfZmlsdGVyKHVzYmRldik7CkBAIC04OTksNyArODkxLDcgQEAKIHN0YXRpYyBpbnQgYWRkX3dlcF9rZXkoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBjaGFyICprZXksIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193ZXh0X3ByaXYodXNiZGV2KTsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfV0VQIG5kaXNfa2V5OworCXN0cnVjdCBuZGlzXzgwMjExX3dlcF9rZXkgbmRpc19rZXk7CiAJaW50IHJldDsKIAogCWlmIChrZXlfbGVuIDw9IDAgfHwga2V5X2xlbiA+IDMyIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSA0KQpAQCAtOTA3LDEzICs4OTksMTMgQEAKIAogCW1lbXNldCgmbmRpc19rZXksIDAsIHNpemVvZihuZGlzX2tleSkpOwogCi0JbmRpc19rZXkuTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKG5kaXNfa2V5KSk7Ci0JbmRpc19rZXkuS2V5TGVuZ3RoID0gY3B1X3RvX2xlMzIoa2V5X2xlbik7Ci0JbmRpc19rZXkuS2V5SW5kZXggPSBjcHVfdG9fbGUzMihpbmRleCk7Ci0JbWVtY3B5KCZuZGlzX2tleS5LZXlNYXRlcmlhbCwga2V5LCBrZXlfbGVuKTsKKwluZGlzX2tleS5zaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKG5kaXNfa2V5KSk7CisJbmRpc19rZXkubGVuZ3RoID0gY3B1X3RvX2xlMzIoa2V5X2xlbik7CisJbmRpc19rZXkuaW5kZXggPSBjcHVfdG9fbGUzMihpbmRleCk7CisJbWVtY3B5KCZuZGlzX2tleS5tYXRlcmlhbCwga2V5LCBrZXlfbGVuKTsKIAogCWlmIChpbmRleCA9PSBwcml2LT5lbmNyX3R4X2tleV9pbmRleCkgewotCQluZGlzX2tleS5LZXlJbmRleCB8PSBjcHVfdG9fbGUzMigxIDw8IDMxKTsKKwkJbmRpc19rZXkuaW5kZXggfD0gY3B1X3RvX2xlMzIoMSA8PCAzMSk7CiAJCXJldCA9IHNldF9lbmNyX21vZGUodXNiZGV2LCBJV19BVVRIX0NJUEhFUl9XRVAxMDQsCiAJCQkJCQlJV19BVVRIX0NJUEhFUl9OT05FKTsKIAkJaWYgKHJldCkKQEAgLTk0MCw3ICs5MzIsNyBAQAogc3RhdGljIGludCByZW1vdmVfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IGluZGV4LCB1OCBic3NpZFtFVEhfQUxFTl0pCiB7CiAJc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193ZXh0X3ByaXYodXNiZGV2KTsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfUkVNT1ZFX0tFWSByZW1vdmVfa2V5OworCXN0cnVjdCBuZGlzXzgwMjExX3JlbW92ZV9rZXkgcmVtb3ZlX2tleTsKIAlfX2xlMzIga2V5aW5kZXg7CiAJaW50IHJldDsKIApAQCAtOTU0LDE3ICs5NDYsMTcgQEAKIAkgICAgcHJpdi0+d3BhX2NpcGhlcl9wYWlyID09IElXX0FVVEhfQ0lQSEVSX0NDTVAgfHwKIAkgICAgcHJpdi0+d3BhX2NpcGhlcl9ncm91cCA9PSBJV19BVVRIX0NJUEhFUl9US0lQIHx8CiAJICAgIHByaXYtPndwYV9jaXBoZXJfZ3JvdXAgPT0gSVdfQVVUSF9DSVBIRVJfQ0NNUCkgewotCQlyZW1vdmVfa2V5Lkxlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihyZW1vdmVfa2V5KSk7Ci0JCXJlbW92ZV9rZXkuS2V5SW5kZXggPSBjcHVfdG9fbGUzMihpbmRleCk7CisJCXJlbW92ZV9rZXkuc2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZihyZW1vdmVfa2V5KSk7CisJCXJlbW92ZV9rZXkuaW5kZXggPSBjcHVfdG9fbGUzMihpbmRleCk7CiAJCWlmIChic3NpZCkgewogCQkJLyogcGFpcndpc2Uga2V5ICovCiAJCQlpZiAobWVtY21wKGJzc2lkLCBmZmZmX2Jzc2lkLCBFVEhfQUxFTikgIT0gMCkKLQkJCQlyZW1vdmVfa2V5LktleUluZGV4IHw9IGNwdV90b19sZTMyKDEgPDwgMzApOwotCQkJbWVtY3B5KHJlbW92ZV9rZXkuQnNzaWQsIGJzc2lkLAotCQkJCQlzaXplb2YocmVtb3ZlX2tleS5Cc3NpZCkpOworCQkJCXJlbW92ZV9rZXkuaW5kZXggfD0gY3B1X3RvX2xlMzIoMSA8PCAzMCk7CisJCQltZW1jcHkocmVtb3ZlX2tleS5ic3NpZCwgYnNzaWQsCisJCQkJCXNpemVvZihyZW1vdmVfa2V5LmJzc2lkKSk7CiAJCX0gZWxzZQotCQkJbWVtc2V0KHJlbW92ZV9rZXkuQnNzaWQsIDB4ZmYsCi0JCQkJCQlzaXplb2YocmVtb3ZlX2tleS5Cc3NpZCkpOworCQkJbWVtc2V0KHJlbW92ZV9rZXkuYnNzaWQsIDB4ZmYsCisJCQkJCQlzaXplb2YocmVtb3ZlX2tleS5ic3NpZCkpOwogCiAJCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX1JFTU9WRV9LRVksICZyZW1vdmVfa2V5LAogCQkJCQkJCXNpemVvZihyZW1vdmVfa2V5KSk7CkBAIC0xMTg0LDcgKzExNzYsNyBAQAogc3RhdGljIGludCBybmRpc19pd19zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICplc3NpZCkKIHsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfU1NJRCBzc2lkOworCXN0cnVjdCBuZGlzXzgwMjExX3NzaWQgc3NpZDsKIAlpbnQgbGVuZ3RoID0gd3JxdS0+ZXNzaWQubGVuZ3RoOwogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IGRldi0+cHJpdjsKIApAQCAtMTE5NCwxMSArMTE4NiwxMSBAQAogCWlmIChsZW5ndGggPiBORElTXzgwMl8xMV9MRU5HVEhfU1NJRCkKIAkJbGVuZ3RoID0gTkRJU184MDJfMTFfTEVOR1RIX1NTSUQ7CiAKLQlzc2lkLlNzaWRMZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCXNzaWQubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKTsKIAlpZiAobGVuZ3RoID4gMCkKLQkJbWVtY3B5KHNzaWQuU3NpZCwgZXNzaWQsIGxlbmd0aCk7CisJCW1lbWNweShzc2lkLmVzc2lkLCBlc3NpZCwgbGVuZ3RoKTsKIAllbHNlCi0JCW1lbXNldChzc2lkLlNzaWQsIDAsIE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKTsKKwkJbWVtc2V0KHNzaWQuZXNzaWQsIDAsIE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKTsKIAogCXNldF9hc3NvY19wYXJhbXModXNiZGV2KTsKIApAQCAtMTIxMiwxNiArMTIwNCwxNiBAQAogc3RhdGljIGludCBybmRpc19pd19nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICplc3NpZCkKIHsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfU1NJRCBzc2lkOworCXN0cnVjdCBuZGlzXzgwMjExX3NzaWQgc3NpZDsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBkZXYtPnByaXY7CiAJaW50IHJldDsKIAogCXJldCA9IGdldF9lc3NpZCh1c2JkZXYsICZzc2lkKTsKIAotCWlmIChyZXQgPT0gMCAmJiBsZTMyX3RvX2NwdShzc2lkLlNzaWRMZW5ndGgpID4gMCkgeworCWlmIChyZXQgPT0gMCAmJiBsZTMyX3RvX2NwdShzc2lkLmxlbmd0aCkgPiAwKSB7CiAJCXdycXUtPmVzc2lkLmZsYWdzID0gMTsKLQkJd3JxdS0+ZXNzaWQubGVuZ3RoID0gbGUzMl90b19jcHUoc3NpZC5Tc2lkTGVuZ3RoKTsKLQkJbWVtY3B5KGVzc2lkLCBzc2lkLlNzaWQsIHdycXUtPmVzc2lkLmxlbmd0aCk7CisJCXdycXUtPmVzc2lkLmxlbmd0aCA9IGxlMzJfdG9fY3B1KHNzaWQubGVuZ3RoKTsKKwkJbWVtY3B5KGVzc2lkLCBzc2lkLmVzc2lkLCB3cnF1LT5lc3NpZC5sZW5ndGgpOwogCQllc3NpZFt3cnF1LT5lc3NpZC5sZW5ndGhdID0gMDsKIAl9IGVsc2UgewogCQltZW1zZXQoZXNzaWQsIDAsIHNpemVvZihORElTXzgwMl8xMV9MRU5HVEhfU1NJRCkpOwpAQCAtMTM5OCwxMyArMTM5MCwxMyBAQAogCXN0cnVjdCBybmRpc193ZXh0X3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2V4dF9wcml2KHVzYmRldik7CiAKIAlzd2l0Y2ggKHByaXYtPmluZnJhX21vZGUpIHsKLQljYXNlIE5kaXM4MDJfMTFJQlNTOgorCWNhc2UgbmRpc184MDIxMV9pbmZyYV9hZGhvYzoKIAkJd3JxdS0+bW9kZSA9IElXX01PREVfQURIT0M7CiAJCWJyZWFrOwotCWNhc2UgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOgorCWNhc2UgbmRpc184MDIxMV9pbmZyYV9pbmZyYToKIAkJd3JxdS0+bW9kZSA9IElXX01PREVfSU5GUkE7CiAJCWJyZWFrOwotCS8qY2FzZSBOZGlzODAyXzExQXV0b1Vua25vd246Ki8KKwkvKmNhc2UgbmRpc184MDIxMV9pbmZyYV9hdXRvX3Vua25vd246Ki8KIAlkZWZhdWx0OgogCQl3cnF1LT5tb2RlID0gSVdfTU9ERV9BVVRPOwogCQlicmVhazsKQEAgLTE0MjQsMTQgKzE0MTYsMTQgQEAKIAogCXN3aXRjaCAod3JxdS0+bW9kZSkgewogCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJbW9kZSA9IE5kaXM4MDJfMTFJQlNTOworCQltb2RlID0gbmRpc184MDIxMV9pbmZyYV9hZGhvYzsKIAkJYnJlYWs7CiAJY2FzZSBJV19NT0RFX0lORlJBOgotCQltb2RlID0gTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOworCQltb2RlID0gbmRpc184MDIxMV9pbmZyYV9pbmZyYTsKIAkJYnJlYWs7CiAJLypjYXNlIElXX01PREVfQVVUTzoqLwogCWRlZmF1bHQ6Ci0JCW1vZGUgPSBOZGlzODAyXzExQXV0b1Vua25vd247CisJCW1vZGUgPSBuZGlzXzgwMjExX2luZnJhX2F1dG9fdW5rbm93bjsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNTA3LDggKzE0OTksOCBAQAogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHJuZGlzX3dleHRfcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193ZXh0X3ByaXYodXNiZGV2KTsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfS0VZIG5kaXNfa2V5OwotCWludCBpLCBrZXlpZHgsIHJldDsKKwlzdHJ1Y3QgbmRpc184MDIxMV9rZXkgbmRpc19rZXk7CisJaW50IGtleWlkeCwgcmV0OwogCXU4ICphZGRyOwogCiAJa2V5aWR4ID0gd3JxdS0+ZW5jb2RpbmcuZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CkBAIC0xNTMyLDU2ICsxNTI0LDU0IEBACiAJICAgIGV4dC0+YWxnID09IElXX0VOQ09ERV9BTEdfTk9ORSB8fCBleHQtPmtleV9sZW4gPT0gMCkKIAkJcmV0dXJuIHJlbW92ZV9rZXkodXNiZGV2LCBrZXlpZHgsIE5VTEwpOwogCi0JaWYgKGV4dC0+a2V5X2xlbiA+IHNpemVvZihuZGlzX2tleS5LZXlNYXRlcmlhbCkpCisJaWYgKGV4dC0+a2V5X2xlbiA+IHNpemVvZihuZGlzX2tleS5tYXRlcmlhbCkpCiAJCXJldHVybiAtMTsKIAogCW1lbXNldCgmbmRpc19rZXksIDAsIHNpemVvZihuZGlzX2tleSkpOwogCi0JbmRpc19rZXkuTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKG5kaXNfa2V5KSAtCi0JCQkJc2l6ZW9mKG5kaXNfa2V5LktleU1hdGVyaWFsKSArIGV4dC0+a2V5X2xlbik7Ci0JbmRpc19rZXkuS2V5TGVuZ3RoID0gY3B1X3RvX2xlMzIoZXh0LT5rZXlfbGVuKTsKLQluZGlzX2tleS5LZXlJbmRleCA9IGNwdV90b19sZTMyKGtleWlkeCk7CisJbmRpc19rZXkuc2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZihuZGlzX2tleSkgLQorCQkJCXNpemVvZihuZGlzX2tleS5tYXRlcmlhbCkgKyBleHQtPmtleV9sZW4pOworCW5kaXNfa2V5Lmxlbmd0aCA9IGNwdV90b19sZTMyKGV4dC0+a2V5X2xlbik7CisJbmRpc19rZXkuaW5kZXggPSBjcHVfdG9fbGUzMihrZXlpZHgpOwogCiAJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpIHsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCW5kaXNfa2V5LktleVJTQyB8PQotCQkJCWNwdV90b19sZTY0KGV4dC0+cnhfc2VxW2ldIDw8IChpICogOCkpOwotCQluZGlzX2tleS5LZXlJbmRleCB8PSBjcHVfdG9fbGUzMigxIDw8IDI5KTsKKwkJbWVtY3B5KG5kaXNfa2V5LnJzYywgZXh0LT5yeF9zZXEsIDYpOworCQluZGlzX2tleS5pbmRleCB8PSBjcHVfdG9fbGUzMigxIDw8IDI5KTsKIAl9CiAKIAlhZGRyID0gZXh0LT5hZGRyLnNhX2RhdGE7CiAJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpIHsKIAkJLyogZ3JvdXAga2V5ICovCi0JCWlmIChwcml2LT5pbmZyYV9tb2RlID09IE5kaXM4MDJfMTFJQlNTKQotCQkJbWVtc2V0KG5kaXNfa2V5LkJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisJCWlmIChwcml2LT5pbmZyYV9tb2RlID09IG5kaXNfODAyMTFfaW5mcmFfYWRob2MpCisJCQltZW1zZXQobmRpc19rZXkuYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKIAkJZWxzZQotCQkJZ2V0X2Jzc2lkKHVzYmRldiwgbmRpc19rZXkuQnNzaWQpOworCQkJZ2V0X2Jzc2lkKHVzYmRldiwgbmRpc19rZXkuYnNzaWQpOwogCX0gZWxzZSB7CiAJCS8qIHBhaXJ3aXNlIGtleSAqLwotCQluZGlzX2tleS5LZXlJbmRleCB8PSBjcHVfdG9fbGUzMigxIDw8IDMwKTsKLQkJbWVtY3B5KG5kaXNfa2V5LkJzc2lkLCBhZGRyLCBFVEhfQUxFTik7CisJCW5kaXNfa2V5LmluZGV4IHw9IGNwdV90b19sZTMyKDEgPDwgMzApOworCQltZW1jcHkobmRpc19rZXkuYnNzaWQsIGFkZHIsIEVUSF9BTEVOKTsKIAl9CiAKIAlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpCi0JCW5kaXNfa2V5LktleUluZGV4IHw9IGNwdV90b19sZTMyKDEgPDwgMzEpOworCQluZGlzX2tleS5pbmRleCB8PSBjcHVfdG9fbGUzMigxIDw8IDMxKTsKIAogCWlmIChleHQtPmFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVAgJiYgZXh0LT5rZXlfbGVuID09IDMyKSB7CiAJCS8qIHdwYV9zdXBwbGljYW50IGdpdmVzIHVzIHRoZSBNaWNoYWVsIE1JQyBSWC9UWCBrZXlzIGluCiAJCSAqIGRpZmZlcmVudCBvcmRlciB0aGFuIE5ESVMgc3BlYywgc28gc3dhcCB0aGUgb3JkZXIgaGVyZS4gKi8KLQkJbWVtY3B5KG5kaXNfa2V5LktleU1hdGVyaWFsLCBleHQtPmtleSwgMTYpOwotCQltZW1jcHkobmRpc19rZXkuS2V5TWF0ZXJpYWwgKyAxNiwgZXh0LT5rZXkgKyAyNCwgOCk7Ci0JCW1lbWNweShuZGlzX2tleS5LZXlNYXRlcmlhbCArIDI0LCBleHQtPmtleSArIDE2LCA4KTsKKwkJbWVtY3B5KG5kaXNfa2V5Lm1hdGVyaWFsLCBleHQtPmtleSwgMTYpOworCQltZW1jcHkobmRpc19rZXkubWF0ZXJpYWwgKyAxNiwgZXh0LT5rZXkgKyAyNCwgOCk7CisJCW1lbWNweShuZGlzX2tleS5tYXRlcmlhbCArIDI0LCBleHQtPmtleSArIDE2LCA4KTsKIAl9IGVsc2UKLQkJbWVtY3B5KG5kaXNfa2V5LktleU1hdGVyaWFsLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKwkJbWVtY3B5KG5kaXNfa2V5Lm1hdGVyaWFsLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKIAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0FERF9LRVksICZuZGlzX2tleSwKLQkJCQkJbGUzMl90b19jcHUobmRpc19rZXkuTGVuZ3RoKSk7CisJCQkJCWxlMzJfdG9fY3B1KG5kaXNfa2V5LnNpemUpKTsKIAlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0VOQ09ERUVYVDogT0lEXzgwMl8xMV9BRERfS0VZIC0+ICUwOFgiLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCXByaXYtPmVuY3Jfa2V5X2xlbltrZXlpZHhdID0gZXh0LT5rZXlfbGVuOwotCW1lbWNweSgmcHJpdi0+ZW5jcl9rZXlzW2tleWlkeF0sIG5kaXNfa2V5LktleU1hdGVyaWFsLCBleHQtPmtleV9sZW4pOworCW1lbWNweSgmcHJpdi0+ZW5jcl9rZXlzW2tleWlkeF0sIG5kaXNfa2V5Lm1hdGVyaWFsLCBleHQtPmtleV9sZW4pOwogCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkKIAkJcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXggPSBrZXlpZHg7CiAKQEAgLTE2MTMsNyArMTYwMyw3IEBACiAKIAogc3RhdGljIGNoYXIgKnJuZGlzX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgY2hhciAqY2V2LCBjaGFyICplbmRfYnVmLCBzdHJ1Y3QgTkRJU19XTEFOX0JTU0lEX0VYICpic3NpZCkKKyAgICBjaGFyICpjZXYsIGNoYXIgKmVuZF9idWYsIHN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2V4ICpic3NpZCkKIHsKICNpZmRlZiBERUJVRwogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IGRldi0+cHJpdjsKQEAgLTE2MjYsNjAgKzE2MTYsNTUgQEAKIAl1bnNpZ25lZCBjaGFyIHNidWZbMzJdOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0JYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPkxlbmd0aCk7CisJYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCk7CiAKLQlkZXZkYmcodXNiZGV2LCAiQlNTSUQgJXMiLCBwcmludF9tYWMobWFjLCBic3NpZC0+TWFjQWRkcmVzcykpOworCWRldmRiZyh1c2JkZXYsICJCU1NJRCAlcyIsIHByaW50X21hYyhtYWMsIGJzc2lkLT5tYWMpKTsKIAlpd2UuY21kID0gU0lPQ0dJV0FQOwogCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLT5NYWNBZGRyZXNzLCBFVEhfQUxFTik7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQtPm1hYywgRVRIX0FMRU4pOwogCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwogCi0JZGV2ZGJnKHVzYmRldiwgIlNTSUQoJWQpICVzIiwKLQkJbGUzMl90b19jcHUoYnNzaWQtPlNzaWQuU3NpZExlbmd0aCksCi0JCWJzc2lkLT5Tc2lkLlNzaWQpOworCWRldmRiZyh1c2JkZXYsICJTU0lEKCVkKSAlcyIsIGxlMzJfdG9fY3B1KGJzc2lkLT5zc2lkLmxlbmd0aCksCisJCQkJCQlic3NpZC0+c3NpZC5lc3NpZCk7CiAJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQlpd2UudS5lc3NpZC5sZW5ndGggPSBsZTMyX3RvX2NwdShic3NpZC0+U3NpZC5Tc2lkTGVuZ3RoKTsKKwlpd2UudS5lc3NpZC5sZW5ndGggPSBsZTMyX3RvX2NwdShic3NpZC0+c3NpZC5sZW5ndGgpOwogCWl3ZS51LmVzc2lkLmZsYWdzID0gMTsKLQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCQlic3NpZC0+U3NpZC5Tc2lkKTsKKwljZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjZXYsIGVuZF9idWYsICZpd2UsIGJzc2lkLT5zc2lkLmVzc2lkKTsKIAotCWRldmRiZyh1c2JkZXYsICJNT0RFICVkIiwKLQkJCWxlMzJfdG9fY3B1KGJzc2lkLT5JbmZyYXN0cnVjdHVyZU1vZGUpKTsKKwlkZXZkYmcodXNiZGV2LCAiTU9ERSAlZCIsIGxlMzJfdG9fY3B1KGJzc2lkLT5uZXRfaW5mcmEpKTsKIAlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0Jc3dpdGNoIChsZTMyX3RvX2NwdShic3NpZC0+SW5mcmFzdHJ1Y3R1cmVNb2RlKSkgewotCWNhc2UgTmRpczgwMl8xMUlCU1M6CisJc3dpdGNoIChsZTMyX3RvX2NwdShic3NpZC0+bmV0X2luZnJhKSkgeworCWNhc2UgbmRpc184MDIxMV9pbmZyYV9hZGhvYzoKIAkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CiAJCWJyZWFrOwotCWNhc2UgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlOgorCWNhc2UgbmRpc184MDIxMV9pbmZyYV9pbmZyYToKIAkJaXdlLnUubW9kZSA9IElXX01PREVfSU5GUkE7CiAJCWJyZWFrOwotCS8qY2FzZSBOZGlzODAyXzExQXV0b1Vua25vd246Ki8KKwkvKmNhc2UgbmRpc184MDIxMV9pbmZyYV9hdXRvX3Vua25vd246Ki8KIAlkZWZhdWx0OgogCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BVVRPOwogCQlicmVhazsKIAl9CiAJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CiAKLQlkZXZkYmcodXNiZGV2LCAiRlJFUSAlZCBrSHoiLAotCQlsZTMyX3RvX2NwdShic3NpZC0+Q29uZmlndXJhdGlvbi5EU0NvbmZpZykpOworCWRldmRiZyh1c2JkZXYsICJGUkVRICVkIGtIeiIsIGxlMzJfdG9fY3B1KGJzc2lkLT5jb25maWcuZHNfY29uZmlnKSk7CiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWRzY29uZmlnX3RvX2ZyZXEobGUzMl90b19jcHUoYnNzaWQtPkNvbmZpZ3VyYXRpb24uRFNDb25maWcpLAotCQkJCQkJCQkmaXdlLnUuZnJlcSk7CisJZHNjb25maWdfdG9fZnJlcShsZTMyX3RvX2NwdShic3NpZC0+Y29uZmlnLmRzX2NvbmZpZyksICZpd2UudS5mcmVxKTsKIAljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAotCWRldmRiZyh1c2JkZXYsICJRVUFMICVkIiwgbGUzMl90b19jcHUoYnNzaWQtPlJzc2kpKTsKKwlkZXZkYmcodXNiZGV2LCAiUVVBTCAlZCIsIGxlMzJfdG9fY3B1KGJzc2lkLT5yc3NpKSk7CiAJaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwucXVhbCAgPSBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KGJzc2lkLT5Sc3NpKSk7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IGxlMzJfdG9fY3B1KGJzc2lkLT5Sc3NpKTsKKwlpd2UudS5xdWFsLnF1YWwgID0gbGV2ZWxfdG9fcXVhbChsZTMyX3RvX2NwdShic3NpZC0+cnNzaSkpOworCWl3ZS51LnF1YWwubGV2ZWwgPSBsZTMyX3RvX2NwdShic3NpZC0+cnNzaSk7CiAJaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQKIAkJCXwgSVdfUVVBTF9MRVZFTF9VUERBVEVECiAJCQl8IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKIAljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAotCWRldmRiZyh1c2JkZXYsICJFTkNPREUgJWQiLCBsZTMyX3RvX2NwdShic3NpZC0+UHJpdmFjeSkpOworCWRldmRiZyh1c2JkZXYsICJFTkNPREUgJWQiLCBsZTMyX3RvX2NwdShic3NpZC0+cHJpdmFjeSkpOwogCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQlpZiAobGUzMl90b19jcHUoYnNzaWQtPlByaXZhY3kpID09IE5kaXM4MDJfMTFQcml2RmlsdGVyQWNjZXB0QWxsKQorCWlmIChsZTMyX3RvX2NwdShic3NpZC0+cHJpdmFjeSkgPT0gbmRpc184MDIxMV9wcml2X2FjY2VwdF9hbGwpCiAJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CiAJZWxzZQogCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CkBAIC0xNjg5LDEwICsxNjc0LDEwIEBACiAJZGV2ZGJnKHVzYmRldiwgIlJBVEVTOiIpOwogCWN1cnJlbnRfdmFsID0gY2V2ICsgSVdfRVZfTENQX0xFTjsKIAlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihic3NpZC0+U3VwcG9ydGVkUmF0ZXMpOyBpKyspIHsKLQkJaWYgKGJzc2lkLT5TdXBwb3J0ZWRSYXRlc1tpXSAmIDB4N2YpIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJzc2lkLT5yYXRlcyk7IGkrKykgeworCQlpZiAoYnNzaWQtPnJhdGVzW2ldICYgMHg3ZikgewogCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9Ci0JCQkJKChic3NpZC0+U3VwcG9ydGVkUmF0ZXNbaV0gJiAweDdmKSAqCisJCQkJKChic3NpZC0+cmF0ZXNbaV0gJiAweDdmKSAqCiAJCQkJNTAwMDAwKTsKIAkJCWRldmRiZyh1c2JkZXYsICIgJWQiLCBpd2UudS5iaXRyYXRlLnZhbHVlKTsKIAkJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoY2V2LApAQCAtMTcwNCwyNCArMTY4OSwyNCBAQAogCWlmICgoY3VycmVudF92YWwgLSBjZXYpID4gSVdfRVZfTENQX0xFTikKIAkJY2V2ID0gY3VycmVudF92YWw7CiAKLQliZWFjb24gPSBsZTMyX3RvX2NwdShic3NpZC0+Q29uZmlndXJhdGlvbi5CZWFjb25QZXJpb2QpOworCWJlYWNvbiA9IGxlMzJfdG9fY3B1KGJzc2lkLT5jb25maWcuYmVhY29uX3BlcmlvZCk7CiAJZGV2ZGJnKHVzYmRldiwgIkJDTl9JTlQgJWQiLCBiZWFjb24pOwogCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCXNucHJpbnRmKHNidWYsIHNpemVvZihzYnVmKSwgImJjbl9pbnQ9JWQiLCBiZWFjb24pOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKHNidWYpOwogCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgc2J1Zik7CiAKLQlhdGltID0gbGUzMl90b19jcHUoYnNzaWQtPkNvbmZpZ3VyYXRpb24uQVRJTVdpbmRvdyk7CisJYXRpbSA9IGxlMzJfdG9fY3B1KGJzc2lkLT5jb25maWcuYXRpbV93aW5kb3cpOwogCWRldmRiZyh1c2JkZXYsICJBVElNICVkIiwgYXRpbSk7CiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiYXRpbT0ldSIsIGF0aW0pOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKHNidWYpOwogCWNldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgc2J1Zik7CiAKLQlpZSA9ICh2b2lkICopKGJzc2lkLT5JRXMgKyBzaXplb2Yoc3RydWN0IE5ESVNfODAyXzExX0ZJWEVEX0lFcykpOworCWllID0gKHZvaWQgKikoYnNzaWQtPmllcyArIHNpemVvZihzdHJ1Y3QgbmRpc184MDIxMV9maXhlZF9pZXMpKTsKIAlpZV9sZW4gPSBtaW4oYnNzaWRfbGVuIC0gKGludClzaXplb2YoKmJzc2lkKSwKLQkJCQkJKGludClsZTMyX3RvX2NwdShic3NpZC0+SUVMZW5ndGgpKTsKLQlpZV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBORElTXzgwMl8xMV9GSVhFRF9JRXMpOworCQkJCQkoaW50KWxlMzJfdG9fY3B1KGJzc2lkLT5pZV9sZW5ndGgpKTsKKwlpZV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMjExX2ZpeGVkX2llcyk7CiAJd2hpbGUgKGllX2xlbiA+PSBzaXplb2YoKmllKSAmJiBzaXplb2YoKmllKSArIGllLT5sZW4gPD0gaWVfbGVuKSB7CiAJCWlmICgoaWUtPmlkID09IE1GSUVfVFlQRV9HRU5FUklDICYmIGllLT5sZW4gPj0gNCAmJgogCQkJCW1lbWNtcChpZS0+ZGF0YSwgIlx4MDBceDUwXHhmMlx4MDEiLCA0KSA9PSAwKSB8fApAQCAtMTc0OCw4ICsxNzMzLDggQEAKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBkZXYtPnByaXY7CiAJdm9pZCAqYnVmID0gTlVMTDsKIAljaGFyICpjZXYgPSBleHRyYTsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfQlNTSURfTElTVF9FWCAqYnNzaWRfbGlzdDsKLQlzdHJ1Y3QgTkRJU19XTEFOX0JTU0lEX0VYICpic3NpZDsKKwlzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9saXN0X2V4ICpic3NpZF9saXN0OworCXN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2V4ICpic3NpZDsKIAlpbnQgcmV0ID0gLUVJTlZBTCwgbGVuLCBjb3VudCwgYnNzaWRfbGVuOwogCiAJZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdTQ0FOIik7CkBAIC0xNzY3LDE2ICsxNzUyLDE2IEBACiAJCWdvdG8gb3V0OwogCiAJYnNzaWRfbGlzdCA9IGJ1ZjsKLQlic3NpZCA9IGJzc2lkX2xpc3QtPkJzc2lkOwotCWJzc2lkX2xlbiA9IGxlMzJfdG9fY3B1KGJzc2lkLT5MZW5ndGgpOwotCWNvdW50ID0gbGUzMl90b19jcHUoYnNzaWRfbGlzdC0+TnVtYmVyT2ZJdGVtcyk7CisJYnNzaWQgPSBic3NpZF9saXN0LT5ic3NpZDsKKwlic3NpZF9sZW4gPSBsZTMyX3RvX2NwdShic3NpZC0+bGVuZ3RoKTsKKwljb3VudCA9IGxlMzJfdG9fY3B1KGJzc2lkX2xpc3QtPm51bV9pdGVtcyk7CiAJZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdTQ0FOOiAlZCBCU1NJRHMgZm91bmQiLCBjb3VudCk7CiAKIAl3aGlsZSAoY291bnQgJiYgKCh2b2lkICopYnNzaWQgKyBic3NpZF9sZW4pIDw9IChidWYgKyBsZW4pKSB7CiAJCWNldiA9IHJuZGlzX3RyYW5zbGF0ZV9zY2FuKGRldiwgY2V2LCBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsCiAJCQkJCQkJCQlic3NpZCk7CiAJCWJzc2lkID0gKHZvaWQgKilic3NpZCArIGJzc2lkX2xlbjsKLQkJYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPkxlbmd0aCk7CisJCWJzc2lkX2xlbiA9IGxlMzJfdG9fY3B1KGJzc2lkLT5sZW5ndGgpOwogCQljb3VudC0tOwogCX0KIApAQCAtMTk1MCw3ICsxOTM1LDcgQEAKICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gY29uZmlnOworCXN0cnVjdCBuZGlzXzgwMjExX2NvbmYgY29uZmlnOwogCXVuc2lnbmVkIGludCBkc2NvbmZpZzsKIAlpbnQgbGVuLCByZXQ7CiAKQEAgLTE5NjksNyArMTk1NCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWNvbmZpZy5EU0NvbmZpZyA9IGNwdV90b19sZTMyKGRzY29uZmlnKTsKKwljb25maWcuZHNfY29uZmlnID0gY3B1X3RvX2xlMzIoZHNjb25maWcpOwogCiAJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdGUkVROiAlZCAqIDEwXiVkIiwgd3JxdS0+ZnJlcS5tLCB3cnF1LT5mcmVxLmUpOwogCXJldHVybiBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAmY29uZmlnLApAQCAtMTk4MSwxMyArMTk2NiwxMyBAQAogICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiBjb25maWc7CisJc3RydWN0IG5kaXNfODAyMTFfY29uZiBjb25maWc7CiAJaW50IGxlbiwgcmV0OwogCiAJbGVuID0gc2l6ZW9mKGNvbmZpZyk7CiAJcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAmY29uZmlnLCAmbGVuKTsKIAlpZiAocmV0ID09IDApCi0JCWRzY29uZmlnX3RvX2ZyZXEobGUzMl90b19jcHUoY29uZmlnLkRTQ29uZmlnKSwgJndycXUtPmZyZXEpOworCQlkc2NvbmZpZ190b19mcmVxKGxlMzJfdG9fY3B1KGNvbmZpZy5kc19jb25maWcpLCAmd3JxdS0+ZnJlcSk7CiAKIAlkZXZkYmcodXNiZGV2LCAiU0lPQ0dJV0ZSRVE6ICVkIiwgd3JxdS0+ZnJlcS5tKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjI2OCwxNCArMjI1MywxNCBAQAogCQkJbiA9IDg7CiAJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJCXN3aXRjaCAobGUzMl90b19jcHUobmV0d29ya3Nfc3VwcG9ydGVkLml0ZW1zW2ldKSkgewotCQkJY2FzZSBOZGlzODAyXzExRkg6Ci0JCQljYXNlIE5kaXM4MDJfMTFEUzoKKwkJCWNhc2UgbmRpc184MDIxMV90eXBlX2ZyZXFfaG9wOgorCQkJY2FzZSBuZGlzXzgwMjExX3R5cGVfZGlyZWN0X3NlcToKIAkJCQlwcml2LT5jYXBzIHw9IENBUF9NT0RFXzgwMjExQjsKIAkJCQlicmVhazsKLQkJCWNhc2UgTmRpczgwMl8xMU9GRE01OgorCQkJY2FzZSBuZGlzXzgwMjExX3R5cGVfb2ZkbV9hOgogCQkJCXByaXYtPmNhcHMgfD0gQ0FQX01PREVfODAyMTFBOwogCQkJCWJyZWFrOwotCQkJY2FzZSBOZGlzODAyXzExT0ZETTI0OgorCQkJY2FzZSBuZGlzXzgwMjExX3R5cGVfb2ZkbV9nOgogCQkJCXByaXYtPmNhcHMgfD0gQ0FQX01PREVfODAyMTFHOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjMwMCw3ICsyMjg1LDcgQEAKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAJc3RydWN0IGl3X3N0YXRpc3RpY3MgaXdzdGF0czsKIAlfX2xlMzIgcnNzaSwgdG1wOwotCWludCBsZW4sIHJldCwgYml0cmF0ZSwgajsKKwlpbnQgbGVuLCByZXQsIGo7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdXBkYXRlX2ppZmZpZXMgPSBTVEFUU19VUERBVEVfSklGRklFUzsKIAl2b2lkICpidWY7CkBAIC0yMzUyLDE0ICsyMzM3LDEwIEBACiAJaWYgKHJldCA9PSAwKQogCQlpd3N0YXRzLmRpc2NhcmQubWlzYyArPSBsZTMyX3RvX2NwdSh0bXApOwogCi0JLyogV29ya2Fyb3VuZCB0cmFuc2ZlciBzdGFsbHMgb24gcG9vciBxdWFsaXR5IGxpbmtzLiAqLwotCWxlbiA9IHNpemVvZih0bXApOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF9HRU5fTElOS19TUEVFRCwgJnRtcCwgJmxlbik7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCWJpdHJhdGUgPSBsZTMyX3RvX2NwdSh0bXApICogMTAwOwotCQlpZiAoYml0cmF0ZSA+IDExMDAwMDAwKQotCQkJZ290byBlbmQ7Ci0KKwkvKiBXb3JrYXJvdW5kIHRyYW5zZmVyIHN0YWxscyBvbiBwb29yIHF1YWxpdHkgbGlua3MuCisJICogVE9ETzogZmluZCByaWdodCB3YXkgdG8gZml4IHRoZXNlIHN0YWxscyAoYXMgc3RhbGxzIGRvIG5vdCBoYXBwZW4KKwkgKiB3aXRoIG5kaXN3cmFwcGVyL3dpbmRvd3MgZHJpdmVyKS4gKi8KKwlpZiAoaXdzdGF0cy5xdWFsLnF1YWwgPD0gMjUpIHsKIAkJLyogRGVjcmVhc2Ugc3RhdHMgd29ya2VyIGludGVydmFsIHRvIGNhdGNoIHN0YWxscy4KIAkJICogZmFzdGVyLiBGYXN0ZXIgdGhhbiA0MDAtNTAwbXMgY2F1c2VzIHBhY2tldCBsb3NzLAogCQkgKiBTbG93ZXIgZG9lc24ndCBjYXRjaCBzdGFsbHMgZmFzdCBlbm91Z2guCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCmluZGV4IGRhMDViMWYuLmExZTM5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCkBAIC01LDMwICs1LDI4IEBACiAJICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhlIFJhbGluayBkcml2ZXJzLAogCSAgZGV2ZWxvcGVkIGluIHRoZSBydDJ4MDAgcHJvamVjdCA8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPi4KIAotCSAgVGhlc2UgZHJpdmVycyB3aWxsIG1ha2UgdXNlIG9mIHRoZSBEZXZpY2VzY2FwZSBpZWVlODAyMTEgc3RhY2suCisJICBUaGVzZSBkcml2ZXJzIHdpbGwgbWFrZSB1c2Ugb2YgdGhlIG1hYzgwMjExIHN0YWNrLgogCiAJICBXaGVuIGJ1aWxkaW5nIG9uZSBvZiB0aGUgaW5kaXZpZHVhbCBkcml2ZXJzLCB0aGUgcnQyeDAwIGxpYnJhcnkKIAkgIHdpbGwgYWxzbyBiZSBjcmVhdGVkLiBUaGF0IGxpYnJhcnkgKHdoZW4gdGhlIGRyaXZlciBpcyBidWlsdCBhcwogCSAgYSBtb2R1bGUpIHdpbGwgYmUgY2FsbGVkICJydDJ4MDBsaWIua28iLgogCitpZiBSVDJYMDAKKwogY29uZmlnIFJUMlgwMF9MSUIKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gUlQyWDAwCiAKIGNvbmZpZyBSVDJYMDBfTElCX1BDSQogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBSVDJYMDAKIAlzZWxlY3QgUlQyWDAwX0xJQgogCiBjb25maWcgUlQyWDAwX0xJQl9VU0IKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gUlQyWDAwCiAJc2VsZWN0IFJUMlgwMF9MSUIKIAogY29uZmlnIFJUMlgwMF9MSUJfRklSTVdBUkUKIAlib29sZWFuCiAJZGVwZW5kcyBvbiBSVDJYMDBfTElCCi0Jc2VsZWN0IENSQ19JVFVfVAogCXNlbGVjdCBGV19MT0FERVIKIAogY29uZmlnIFJUMlgwMF9MSUJfUkZLSUxMCkBAIC0zNyw5ICszNSwxMyBAQAogCXNlbGVjdCBSRktJTEwKIAlzZWxlY3QgSU5QVVRfUE9MTERFVgogCitjb25maWcgUlQyWDAwX0xJQl9MRURTCisJYm9vbGVhbgorCWRlcGVuZHMgb24gUlQyWDAwX0xJQgorCiBjb25maWcgUlQyNDAwUENJCiAJdHJpc3RhdGUgIlJhbGluayBydDI0MDAgcGNpL3BjbWNpYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUlQyWDAwICYmIFBDSQorCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFJUMlgwMF9MSUJfUENJCiAJc2VsZWN0IEVFUFJPTV85M0NYNgogCS0tLWhlbHAtLS0KQEAgLTU2LDkgKzU4LDE2IEBACiAJICBoYXJkd2FyZSBidXR0b24gdG8gY29udHJvbCB0aGUgcmFkaW8gc3RhdGUuCiAJICBUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiB0aGUgUkYgc3dpdGNoIHN1YnN5c3RlbSByZmtpbGwuCiAKK2NvbmZpZyBSVDI0MDBQQ0lfTEVEUworCWJvb2wgIlJUMjQwMCBsZWRzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBSVDI0MDBQQ0kgJiYgTEVEU19DTEFTUworCXNlbGVjdCBSVDJYMDBfTElCX0xFRFMKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgbGVkIHRyaWdnZXJzIHByb3ZpZGVkIG15IG1hYzgwMjExLgorCiBjb25maWcgUlQyNTAwUENJCiAJdHJpc3RhdGUgIlJhbGluayBydDI1MDAgcGNpL3BjbWNpYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUlQyWDAwICYmIFBDSQorCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFJUMlgwMF9MSUJfUENJCiAJc2VsZWN0IEVFUFJPTV85M0NYNgogCS0tLWhlbHAtLS0KQEAgLTc1LDExICs4NCwxOSBAQAogCSAgaGFyZHdhcmUgYnV0dG9uIHRvIGNvbnRyb2wgdGhlIHJhZGlvIHN0YXRlLgogCSAgVGhpcyBmZWF0dXJlIGRlcGVuZHMgb24gdGhlIFJGIHN3aXRjaCBzdWJzeXN0ZW0gcmZraWxsLgogCitjb25maWcgUlQyNTAwUENJX0xFRFMKKwlib29sICJSVDI1MDAgbGVkcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUlQyNTAwUENJICYmIExFRFNfQ0xBU1MKKwlzZWxlY3QgUlQyWDAwX0xJQl9MRURTCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGxlZCB0cmlnZ2VycyBwcm92aWRlZCBteSBtYWM4MDIxMS4KKwogY29uZmlnIFJUNjFQQ0kKIAl0cmlzdGF0ZSAiUmFsaW5rIHJ0NjEgcGNpL3BjbWNpYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUlQyWDAwICYmIFBDSQorCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFJUMlgwMF9MSUJfUENJCiAJc2VsZWN0IFJUMlgwMF9MSUJfRklSTVdBUkUKKwlzZWxlY3QgQ1JDX0lUVV9UCiAJc2VsZWN0IEVFUFJPTV85M0NYNgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayBydDYxIHdpcmVsZXNzIGNoaXAuCkBAIC05NSwyNSArMTEyLDQ3IEBACiAJICBoYXJkd2FyZSBidXR0b24gdG8gY29udHJvbCB0aGUgcmFkaW8gc3RhdGUuCiAJICBUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiB0aGUgUkYgc3dpdGNoIHN1YnN5c3RlbSByZmtpbGwuCiAKK2NvbmZpZyBSVDYxUENJX0xFRFMKKwlib29sICJSVDYxIGxlZHMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFJUNjFQQ0kgJiYgTEVEU19DTEFTUworCXNlbGVjdCBSVDJYMDBfTElCX0xFRFMKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgbGVkIHRyaWdnZXJzIHByb3ZpZGVkIG15IG1hYzgwMjExLgorCiBjb25maWcgUlQyNTAwVVNCCiAJdHJpc3RhdGUgIlJhbGluayBydDI1MDAgdXNiIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBSVDJYMDAgJiYgVVNCCisJZGVwZW5kcyBvbiBVU0IKIAlzZWxlY3QgUlQyWDAwX0xJQl9VU0IKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgcnQyNTAwIHdpcmVsZXNzIGNoaXAuCiAKIAkgIFdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoaXMgZHJpdmVyIHdpbGwgYmUgY2FsbGVkICJydDI1MDB1c2Iua28iLgogCitjb25maWcgUlQyNTAwVVNCX0xFRFMKKwlib29sICJSVDI1MDAgbGVkcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUlQyNTAwVVNCICYmIExFRFNfQ0xBU1MKKwlzZWxlY3QgUlQyWDAwX0xJQl9MRURTCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGxlZCB0cmlnZ2VycyBwcm92aWRlZCBteSBtYWM4MDIxMS4KKwogY29uZmlnIFJUNzNVU0IKIAl0cmlzdGF0ZSAiUmFsaW5rIHJ0NzMgdXNiIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBSVDJYMDAgJiYgVVNCCisJZGVwZW5kcyBvbiBVU0IKIAlzZWxlY3QgUlQyWDAwX0xJQl9VU0IKIAlzZWxlY3QgUlQyWDAwX0xJQl9GSVJNV0FSRQorCXNlbGVjdCBDUkNfSVRVX1QKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgcnQ3MyB3aXJlbGVzcyBjaGlwLgogCiAJICBXaGVuIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGlzIGRyaXZlciB3aWxsIGJlIGNhbGxlZCAicnQ3M3VzYi5rbyIuCiAKK2NvbmZpZyBSVDczVVNCX0xFRFMKKwlib29sICJSVDczIGxlZHMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFJUNzNVU0IgJiYgTEVEU19DTEFTUworCXNlbGVjdCBSVDJYMDBfTElCX0xFRFMKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgbGVkIHRyaWdnZXJzIHByb3ZpZGVkIG15IG1hYzgwMjExLgorCiBjb25maWcgUlQyWDAwX0xJQl9ERUJVR0ZTCiAJYm9vbCAiUmFsaW5rIGRlYnVnZnMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFJUMlgwMF9MSUIgJiYgTUFDODAyMTFfREVCVUdGUwpAQCAtMTI4LDMgKzE2Nyw0IEBACiAJLS0taGVscC0tLQogCSAgRW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQgZm9yIGFsbCBydDJ4MDAgbW9kdWxlcwogCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCmluZGV4IDMwZDY1NGEuLjEwODdkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKQEAgLTEsMjIgKzEsMTcgQEAKLXJ0MngwMGxpYi1vYmpzIDo9IHJ0MngwMGRldi5vIHJ0MngwMG1hYy5vIHJ0MngwMGNvbmZpZy5vCitydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBkZXYubworcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwbWFjLm8KK3J0MngwMGxpYi15CQkJCSs9IHJ0MngwMGNvbmZpZy5vCitydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBxdWV1ZS5vCitydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTKQkrPSBydDJ4MDBkZWJ1Zy5vCitydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwpCSs9IHJ0MngwMHJma2lsbC5vCitydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FSRSkJKz0gcnQyeDAwZmlybXdhcmUubworcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfTEVEUykJKz0gcnQyeDAwbGVkcy5vCiAKLWlmZXEgKCQoQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUykseSkKLQlydDJ4MDBsaWItb2JqcyArPSBydDJ4MDBkZWJ1Zy5vCi1lbmRpZgotCi1pZmVxICgkKENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCkseSkKLQlydDJ4MDBsaWItb2JqcyArPSBydDJ4MDByZmtpbGwubwotZW5kaWYKLQotaWZlcSAoJChDT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FSRSkseSkKLQlydDJ4MDBsaWItb2JqcyArPSBydDJ4MDBmaXJtd2FyZS5vCi1lbmRpZgotCi1vYmotJChDT05GSUdfUlQyWDAwX0xJQikJKz0gcnQyeDAwbGliLm8KLW9iai0kKENPTkZJR19SVDJYMDBfTElCX1BDSSkJKz0gcnQyeDAwcGNpLm8KLW9iai0kKENPTkZJR19SVDJYMDBfTElCX1VTQikJKz0gcnQyeDAwdXNiLm8KLW9iai0kKENPTkZJR19SVDI0MDBQQ0kpCQkrPSBydDI0MDBwY2kubwotb2JqLSQoQ09ORklHX1JUMjUwMFBDSSkJCSs9IHJ0MjUwMHBjaS5vCi1vYmotJChDT05GSUdfUlQ2MVBDSSkJCSs9IHJ0NjFwY2kubwotb2JqLSQoQ09ORklHX1JUMjUwMFVTQikJCSs9IHJ0MjUwMHVzYi5vCi1vYmotJChDT05GSUdfUlQ3M1VTQikJCSs9IHJ0NzN1c2Iubworb2JqLSQoQ09ORklHX1JUMlgwMF9MSUIpCQkrPSBydDJ4MDBsaWIubworb2JqLSQoQ09ORklHX1JUMlgwMF9MSUJfUENJKQkJKz0gcnQyeDAwcGNpLm8KK29iai0kKENPTkZJR19SVDJYMDBfTElCX1VTQikJCSs9IHJ0MngwMHVzYi5vCitvYmotJChDT05GSUdfUlQyNDAwUENJKQkJCSs9IHJ0MjQwMHBjaS5vCitvYmotJChDT05GSUdfUlQyNTAwUENJKQkJCSs9IHJ0MjUwMHBjaS5vCitvYmotJChDT05GSUdfUlQ2MVBDSSkJCQkrPSBydDYxcGNpLm8KK29iai0kKENPTkZJR19SVDI1MDBVU0IpCQkJKz0gcnQyNTAwdXNiLm8KK29iai0kKENPTkZJR19SVDczVVNCKQkJCSs9IHJ0NzN1c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IGQ2Y2JhMTMuLmI0MTE4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNDMsNTMgKzI0MywxMDkgQEAKICNkZWZpbmUgcnQyNDAwcGNpX3Jma2lsbF9wb2xsCU5VTEwKICNlbmRpZiAvKiBDT05GSUdfUlQyNDAwUENJX1JGS0lMTCAqLwogCisjaWZkZWYgQ09ORklHX1JUMjQwMFBDSV9MRURTCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IHJ0MngwMF9sZWQgKmxlZCA9CisJICAgIGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IHJ0MngwMF9sZWQsIGxlZF9kZXYpOworCXVuc2lnbmVkIGludCBlbmFibGVkID0gYnJpZ2h0bmVzcyAhPSBMRURfT0ZGOworCXUzMiByZWc7CisKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChsZWQtPnJ0MngwMGRldiwgTEVEQ1NSLCAmcmVnKTsKKworCWlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfUkFESU8gfHwgbGVkLT50eXBlID09IExFRF9UWVBFX0FTU09DKQorCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX0xJTkssIGVuYWJsZWQpOworCWVsc2UgaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9BQ1RJVklUWSkKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9BQ1RJVklUWSwgZW5hYmxlZCk7CisKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUobGVkLT5ydDJ4MDBkZXYsIExFRENTUiwgcmVnKTsKK30KKworc3RhdGljIGludCBydDI0MDBwY2lfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKK3sKKwlzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkID0KKwkgICAgY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgcnQyeDAwX2xlZCwgbGVkX2Rldik7CisJdTMyIHJlZzsKKworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKGxlZC0+cnQyeDAwZGV2LCBMRURDU1IsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMRURDU1JfT05fUEVSSU9ELCAqZGVsYXlfb24pOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMRURDU1JfT0ZGX1BFUklPRCwgKmRlbGF5X29mZik7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKGxlZC0+cnQyeDAwZGV2LCBMRURDU1IsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUlQyNDAwUENJX0xFRFMgKi8KKwogLyoKICAqIENvbmZpZ3VyYXRpb24gaGFuZGxlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWdfbWFjX2FkZHIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgICBfX2xlMzIgKm1hYykKLXsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIENTUjMsIG1hYywKLQkJCQkgICAgICAoMiAqIHNpemVvZihfX2xlMzIpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWdfYnNzaWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICBfX2xlMzIgKmJzc2lkKQotewotCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgQ1NSNSwgYnNzaWQsCi0JCQkJICAgICAgKDIgKiBzaXplb2YoX19sZTMyKSkpOwotfQotCi1zdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX3R5cGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3QgaW50IHR5cGUsCi0JCQkJICBjb25zdCBpbnQgdHNmX3N5bmMpCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX2ZpbHRlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzKQogewogCXUzMiByZWc7CiAKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7Ci0KIAkvKgotCSAqIEVuYWJsZSBiZWFjb24gY29uZmlnCisJICogU3RhcnQgY29uZmlndXJhdGlvbiBzdGVwcy4KKwkgKiBOb3RlIHRoYXQgdGhlIHZlcnNpb24gZXJyb3Igd2lsbCBhbHdheXMgYmUgZHJvcHBlZAorCSAqIHNpbmNlIHRoZXJlIGlzIG5vIGZpbHRlciBmb3IgaXQgYXQgdGhpcyB0aW1lLgogCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOQ1NSMSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTkNTUjFfUFJFTE9BRCwKLQkJCSAgIFBSRUFNQkxFICsgZ2V0X2R1cmF0aW9uKElFRUU4MDIxMV9IRUFERVIsIDIwKSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOQ1NSMSwgcmVnKTsKLQotCS8qCi0JICogRW5hYmxlIHN5bmNocm9uaXNhdGlvbi4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX0NPVU5ULCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgKHRzZl9zeW5jID09IFRTRl9TWU5DX0JFQUNPTikpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9CRUFDT05fR0VOLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX1NZTkMsIHRzZl9zeW5jKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMF9EUk9QX0NSQywKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0ZDU0ZBSUwpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfUEhZU0lDQUwsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QTENQRkFJTCkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9DT05UUk9MLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfQ09OVFJPTCkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9OT1RfVE9fTUUsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9UT0RTLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICYmCisJCQkgICAhcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfVkVSU0lPTl9FUlJPUiwgMSk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhDU1IwLCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX3ByZWFtYmxlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICAgY29uc3QgaW50IHNob3J0X3ByZWFtYmxlLAotCQkJCSAgICAgIGNvbnN0IGludCBhY2tfdGltZW91dCwKLQkJCQkgICAgICBjb25zdCBpbnQgYWNrX2NvbnN1bWVfdGltZSkKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWdfaW50ZihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAorCQkJCSAgc3RydWN0IHJ0MngwMGludGZfY29uZiAqY29uZiwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgYmNuX3ByZWxvYWQ7CisJdTMyIHJlZzsKKworCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfVFlQRSkgeworCQkvKgorCQkgKiBFbmFibGUgYmVhY29uIGNvbmZpZworCQkgKi8KKwkJYmNuX3ByZWxvYWQgPSBQUkVBTUJMRSArIGdldF9kdXJhdGlvbihJRUVFODAyMTFfSEVBREVSLCAyMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOQ1NSMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05DU1IxX1BSRUxPQUQsIGJjbl9wcmVsb2FkKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOQ1NSMSwgcmVnKTsKKworCQkvKgorCQkgKiBFbmFibGUgc3luY2hyb25pc2F0aW9uLgorCQkgKi8KKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UU0ZfQ09VTlQsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX1NZTkMsIGNvbmYtPnN5bmMpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOworCX0KKworCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfTUFDKQorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIENTUjMsCisJCQkJCSAgICAgIGNvbmYtPm1hYywgc2l6ZW9mKGNvbmYtPm1hYykpOworCisJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9CU1NJRCkKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBDU1I1LAorCQkJCQkgICAgICBjb25mLT5ic3NpZCwgc2l6ZW9mKGNvbmYtPmJzc2lkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWdfZXJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIHN0cnVjdCBydDJ4MDBsaWJfZXJwICplcnApCiB7CiAJaW50IHByZWFtYmxlX21hc2s7CiAJdTMyIHJlZzsKQEAgLTI5NywxMSArMzUzLDEzIEBACiAJLyoKIAkgKiBXaGVuIHNob3J0IHByZWFtYmxlIGlzIGVuYWJsZWQsIHdlIHNob3VsZCBzZXQgYml0IDB4MDgKIAkgKi8KLQlwcmVhbWJsZV9tYXNrID0gc2hvcnRfcHJlYW1ibGUgPDwgMzsKKwlwcmVhbWJsZV9tYXNrID0gZXJwLT5zaG9ydF9wcmVhbWJsZSA8PCAzOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjEsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX1RJTUVPVVQsIGFja190aW1lb3V0KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsIGFja19jb25zdW1lX3RpbWUpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX1RJTUVPVVQsCisJCQkgICBlcnAtPmFja190aW1lb3V0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsCisJCQkgICBlcnAtPmFja19jb25zdW1lX3RpbWUpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMSwgcmVnKTsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQVJDU1IyLCAmcmVnKTsKQEAgLTM5Nyw2ICs0NTUsMTMgQEAKIAl1OCByMTsKIAl1OCByNDsKIAorCS8qCisJICogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcyBzdXBwb3NlZAorCSAqIHRvIGNhdGNoIHRoaXMgYW5kIHNlbmQgdXMgdGhlIGNvcnJlY3QgYW50ZW5uYSBleHBsaWNpdGVseS4KKwkgKi8KKwlCVUdfT04oYW50LT5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSB8fAorCSAgICAgICBhbnQtPnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKTsKKwogCXJ0MjQwMHBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDQsICZyNCk7CiAJcnQyNDAwcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMSwgJnIxKTsKIApAQCAtNDEwLDE0ICs0NzUsOCBAQAogCWNhc2UgQU5URU5OQV9BOgogCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjEsIEJCUF9SMV9UWF9BTlRFTk5BLCAwKTsKIAkJYnJlYWs7Ci0JY2FzZSBBTlRFTk5BX1NXX0RJVkVSU0lUWToKLQkJLyoKLQkJICogTk9URTogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcwotCQkgKiBzdXBwb3NlZCB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEKLQkJICogZXhwbGljaXRlbHkuIEhvd2V2ZXIgd2UgYXJlIG5vZyBnb2luZyB0byBidWcgYWJvdXQgdGhpcy4KLQkJICogSW5zdGVhZCwganVzdCBkZWZhdWx0IHRvIGFudGVubmEgQi4KLQkJICovCiAJY2FzZSBBTlRFTk5BX0I6CisJZGVmYXVsdDoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIxLCBCQlBfUjFfVFhfQU5URU5OQSwgMik7CiAJCWJyZWFrOwogCX0KQEAgLTQzMiwxNCArNDkxLDggQEAKIAljYXNlIEFOVEVOTkFfQToKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfQU5URU5OQSwgMCk7CiAJCWJyZWFrOwotCWNhc2UgQU5URU5OQV9TV19ESVZFUlNJVFk6Ci0JCS8qCi0JCSAqIE5PVEU6IFdlIHNob3VsZCBuZXZlciBjb21lIGhlcmUgYmVjYXVzZSBydDJ4MDBsaWIgaXMKLQkJICogc3VwcG9zZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2VuZCB1cyB0aGUgY29ycmVjdCBhbnRlbm5hCi0JCSAqIGV4cGxpY2l0ZWx5LiBIb3dldmVyIHdlIGFyZSBub2cgZ29pbmcgdG8gYnVnIGFib3V0IHRoaXMuCi0JCSAqIEluc3RlYWQsIGp1c3QgZGVmYXVsdCB0byBhbnRlbm5hIEIuCi0JCSAqLwogCWNhc2UgQU5URU5OQV9COgorCWRlZmF1bHQ6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0FOVEVOTkEsIDIpOwogCQlicmVhazsKIAl9CkBAIC00ODEsOCArNTM0LDggQEAKIH0KIAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKKwkJCSAgICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAorCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9QSFlNT0RFKQogCQlydDI0MDBwY2lfY29uZmlnX3BoeW1vZGUocnQyeDAwZGV2LCBsaWJjb25mLT5iYXNpY19yYXRlcyk7CkBAIC00OTgsNDUgKzU1MSwxNyBAQAogfQogCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX2N3KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKKwkJCQljb25zdCBpbnQgY3dfbWluLCBjb25zdCBpbnQgY3dfbWF4KQogewogCXUzMiByZWc7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjExLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTFfQ1dNSU4sIHBhcmFtcy0+Y3dfbWluKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTFfQ1dNQVgsIHBhcmFtcy0+Y3dfbWF4KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTFfQ1dNSU4sIGN3X21pbik7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjExX0NXTUFYLCBjd19tYXgpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjExLCByZWcpOwogfQogCiAvKgotICogTEVEIGZ1bmN0aW9ucy4KLSAqLwotc3RhdGljIHZvaWQgcnQyNDAwcGNpX2VuYWJsZV9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQl1MzIgcmVnOwotCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBMRURDU1IsICZyZWcpOwotCi0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9PTl9QRVJJT0QsIDcwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX09GRl9QRVJJT0QsIDMwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX0xJTkssCi0JCQkgICAocnQyeDAwZGV2LT5sZWRfbW9kZSAhPSBMRURfTU9ERV9BU1VTKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9BQ1RJVklUWSwKLQkJCSAgIChydDJ4MDBkZXYtPmxlZF9tb2RlICE9IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBMRURDU1IsIHJlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9kaXNhYmxlX2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXUzMiByZWc7Ci0KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIExFRENTUiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9MSU5LLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX0FDVElWSVRZLCAwKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBMRURDU1IsIHJlZyk7Ci19Ci0KLS8qCiAgKiBMaW5rIHR1bmluZwogICovCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfbGlua19zdGF0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtNTkzLDkwICs2MTgsOTQgQEAKICAqIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KICAqLwogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2luaXRfcnhlbnRyeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgIHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSkKKwkJCQkgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCV9fbGUzMiAqcnhkID0gZW50cnktPnByaXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4ID0gZW50cnktPnByaXZfZGF0YTsKIAl1MzIgd29yZDsKIAotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAyLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBSWERfVzJfQlVGRkVSX0xFTkdUSCwgZW50cnktPnJpbmctPmRhdGFfc2l6ZSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocnhkLCAyLCB3b3JkKTsKKwlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDIsICZ3b3JkKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFJYRF9XMl9CVUZGRVJfTEVOR1RILAorCQkJICAgZW50cnktPnF1ZXVlLT5kYXRhX3NpemUpOworCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfcngtPmRlc2MsIDIsIHdvcmQpOwogCi0JcnQyeDAwX2Rlc2NfcmVhZChyeGQsIDEsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFJYRF9XMV9CVUZGRVJfQUREUkVTUywgZW50cnktPmRhdGFfZG1hKTsKLQlydDJ4MDBfZGVzY193cml0ZShyeGQsIDEsIHdvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMSwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cxX0JVRkZFUl9BRERSRVNTLCBwcml2X3J4LT5kYXRhX2RtYSk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl9yeC0+ZGVzYywgMSwgd29yZCk7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cwX09XTkVSX05JQywgMSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocnhkLCAwLCB3b3JkKTsKKwlydDJ4MDBfZGVzY193cml0ZShwcml2X3J4LT5kZXNjLCAwLCB3b3JkKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2luaXRfdHhlbnRyeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgIHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSkKKwkJCQkgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCV9fbGUzMiAqdHhkID0gZW50cnktPnByaXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKIAl1MzIgd29yZDsKIAotCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAxLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQlVGRkVSX0FERFJFU1MsIGVudHJ5LT5kYXRhX2RtYSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAxLCB3b3JkKTsKKwlydDJ4MDBfZGVzY19yZWFkKHByaXZfdHgtPmRlc2MsIDEsICZ3b3JkKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9CVUZGRVJfQUREUkVTUywgcHJpdl90eC0+ZGF0YV9kbWEpOworCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfdHgtPmRlc2MsIDEsIHdvcmQpOwogCi0JcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDIsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9CVUZGRVJfTEVOR1RILCBlbnRyeS0+cmluZy0+ZGF0YV9zaXplKTsKLQlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDIsIHdvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMiwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0JVRkZFUl9MRU5HVEgsCisJCQkgICBlbnRyeS0+cXVldWUtPmRhdGFfc2l6ZSk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMiwgd29yZCk7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1ZBTElELCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PV05FUl9OSUMsIDApOwotCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMCwgd29yZCk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMCwgd29yZCk7CiB9CiAKLXN0YXRpYyBpbnQgcnQyNDAwcGNpX2luaXRfcmluZ3Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbnQgcnQyNDAwcGNpX2luaXRfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKIAl1MzIgcmVnOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlZ2lzdGVycy4KIAkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9UWERfU0laRSwKLQkJCSAgIHJ0MngwMGRldi0+dHhbSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwXS5kZXNjX3NpemUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjJfTlVNX1RYRCwKLQkJCSAgIHJ0MngwMGRldi0+dHhbSUVFRTgwMjExX1RYX1FVRVVFX0RBVEExXS5zdGF0cy5saW1pdCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9OVU1fQVRJTSwKLQkJCSAgIHJ0MngwMGRldi0+YmNuWzFdLnN0YXRzLmxpbWl0KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IyX05VTV9QUklPLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTBdLnN0YXRzLmxpbWl0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IyX1RYRF9TSVpFLCBydDJ4MDBkZXYtPnR4WzBdLmRlc2Nfc2l6ZSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9OVU1fVFhELCBydDJ4MDBkZXYtPnR4WzFdLmxpbWl0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IyX05VTV9BVElNLCBydDJ4MDBkZXYtPmJjblsxXS5saW1pdCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9OVU1fUFJJTywgcnQyeDAwZGV2LT50eFswXS5saW1pdCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IyLCByZWcpOwogCisJcHJpdl90eCA9IHJ0MngwMGRldi0+dHhbMV0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjMsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjNfVFhfUklOR19SRUdJU1RFUiwKLQkJCSAgIHJ0MngwMGRldi0+dHhbSUVFRTgwMjExX1RYX1FVRVVFX0RBVEExXS5kYXRhX2RtYSk7CisJCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IzLCByZWcpOwogCisJcHJpdl90eCA9IHJ0MngwMGRldi0+dHhbMF0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjUsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjVfUFJJT19SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTBdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjUsIHJlZyk7CiAKKwlwcml2X3R4ID0gcnQyeDAwZGV2LT5iY25bMV0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjQsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjRfQVRJTV9SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT5iY25bMV0uZGF0YV9kbWEpOworCQkJICAgcHJpdl90eC0+ZGVzY19kbWEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSNCwgcmVnKTsKIAorCXByaXZfdHggPSBydDJ4MDBkZXYtPmJjblswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSNiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSNl9CRUFDT05fUklOR19SRUdJU1RFUiwKLQkJCSAgIHJ0MngwMGRldi0+YmNuWzBdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjYsIHJlZyk7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMSwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMV9SWERfU0laRSwgcnQyeDAwZGV2LT5yeC0+ZGVzY19zaXplKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IxX05VTV9SWEQsIHJ0MngwMGRldi0+cngtPnN0YXRzLmxpbWl0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IxX05VTV9SWEQsIHJ0MngwMGRldi0+cngtPmxpbWl0KTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjEsIHJlZyk7CiAKKwlwcml2X3J4ID0gcnQyeDAwZGV2LT5yeC0+ZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjIsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjJfUlhfUklOR19SRUdJU1RFUiwKLQkJCSAgIHJ0MngwMGRldi0+cngtPmRhdGFfZG1hKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IyX1JYX1JJTkdfUkVHSVNURVIsIHByaXZfcngtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKQEAgLTc5NSwxOSArODI0LDE1IEBACiAJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDMwLCAweDIxKTsKIAlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMzEsIDB4MDApOwogCi0JREVCVUcocnQyeDAwZGV2LCAiU3RhcnQgaW5pdGlhbGl6YXRpb24gZnJvbSBFRVBST00uLi5cbiIpOwogCWZvciAoaSA9IDA7IGkgPCBFRVBST01fQkJQX1NJWkU7IGkrKykgewogCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQkJQX1NUQVJUICsgaSwgJmVlcHJvbSk7CiAKIAkJaWYgKGVlcHJvbSAhPSAweGZmZmYgJiYgZWVwcm9tICE9IDB4MDAwMCkgewogCQkJcmVnX2lkID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0JCUF9SRUdfSUQpOwogCQkJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQkJQX1ZBTFVFKTsKLQkJCURFQlVHKHJ0MngwMGRldiwgIkJCUDogMHglMDJ4LCB2YWx1ZTogMHglMDJ4LlxuIiwKLQkJCSAgICAgIHJlZ19pZCwgdmFsdWUpOwogCQkJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIHJlZ19pZCwgdmFsdWUpOwogCQl9CiAJfQotCURFQlVHKHJ0MngwMGRldiwgIi4uLkVuZCBpbml0aWFsaXphdGlvbiBmcm9tIEVFUFJPTS5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NTksNyArODg0LDcgQEAKIAkvKgogCSAqIEluaXRpYWxpemUgYWxsIHJlZ2lzdGVycy4KIAkgKi8KLQlpZiAocnQyNDAwcGNpX2luaXRfcmluZ3MocnQyeDAwZGV2KSB8fAorCWlmIChydDI0MDBwY2lfaW5pdF9xdWV1ZXMocnQyeDAwZGV2KSB8fAogCSAgICBydDI0MDBwY2lfaW5pdF9yZWdpc3RlcnMocnQyeDAwZGV2KSB8fAogCSAgICBydDI0MDBwY2lfaW5pdF9iYnAocnQyeDAwZGV2KSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJSZWdpc3RlciBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKQEAgLTg3MSwxMSArODk2LDYgQEAKIAkgKi8KIAlydDI0MDBwY2lfdG9nZ2xlX2lycShydDJ4MDBkZXYsIFNUQVRFX1JBRElPX0lSUV9PTik7CiAKLQkvKgotCSAqIEVuYWJsZSBMRUQKLQkgKi8KLQlydDI0MDBwY2lfZW5hYmxlX2xlZChydDJ4MDBkZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4MywxMSArOTAzLDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JLyoKLQkgKiBEaXNhYmxlIExFRAotCSAqLwotCXJ0MjQwMHBjaV9kaXNhYmxlX2xlZChydDJ4MDBkZXYpOwotCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSQ1NSMCwgMCk7CiAKIAkvKgpAQCAtOTYwLDggKzk3NSwxMiBAQAogCQlydDI0MDBwY2lfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09OOgorCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKKwkJcnQyNDAwcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKKwkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19SWF9PRkY6Ci0JCXJ0MjQwMHBjaV90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CisJY2FzZSBTVEFURV9SQURJT19SWF9PRkZfTElOSzoKKwkJcnQyNDAwcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfREVFUF9TTEVFUDoKIAljYXNlIFNUQVRFX1NMRUVQOgpAQCAtOTgyLDEwICsxMDAxLDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV93cml0ZV90eF9kZXNjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCB0eGRhdGFfZW50cnlfZGVzYyAqZGVzYywKKwkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCiB7Ci0Jc3RydWN0IHNrYl9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9kZXNjKHNrYik7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CiAJX19sZTMyICp0eGQgPSBza2JkZXNjLT5kZXNjOwogCXUzMiB3b3JkOwogCkBAIC05OTcsMTkgKzEwMTYsMTkgQEAKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDIsIHdvcmQpOwogCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDMsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XM19QTENQX1NJR05BTCwgZGVzYy0+c2lnbmFsKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XM19QTENQX1NJR05BTCwgdHhkZXNjLT5zaWduYWwpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1czX1BMQ1BfU0lHTkFMX1JFR05VTSwgNSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9TSUdOQUxfQlVTWSwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9TRVJWSUNFLCBkZXNjLT5zZXJ2aWNlKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XM19QTENQX1NFUlZJQ0UsIHR4ZGVzYy0+c2VydmljZSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9TRVJWSUNFX1JFR05VTSwgNik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9TRVJWSUNFX0JVU1ksIDEpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMywgd29yZCk7CiAKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgNCwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1c0X1BMQ1BfTEVOR1RIX0xPVywgZGVzYy0+bGVuZ3RoX2xvdyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzRfUExDUF9MRU5HVEhfTE9XLCB0eGRlc2MtPmxlbmd0aF9sb3cpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1czX1BMQ1BfTEVOR1RIX0xPV19SRUdOVU0sIDgpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1czX1BMQ1BfTEVOR1RIX0xPV19CVVNZLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XNF9QTENQX0xFTkdUSF9ISUdILCBkZXNjLT5sZW5ndGhfaGlnaCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzRfUExDUF9MRU5HVEhfSElHSCwgdHhkZXNjLT5sZW5ndGhfaGlnaCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9MRU5HVEhfSElHSF9SRUdOVU0sIDcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1czX1BMQ1BfTEVOR1RIX0hJR0hfQlVTWSwgMSk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCA0LCB3b3JkKTsKQEAgLTEwMTgsMTQgKzEwMzcsMTQgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PV05FUl9OSUMsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1ZBTElELCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9NT1JFX0ZSQUcsCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfTU9SRV9GUkFHLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9NT1JFX0ZSQUcsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQUNLLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0FDSywgJmRlc2MtPmZsYWdzKSk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1JUUywKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZkZXNjLT5mbGFncykpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgZGVzYy0+aWZzKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZ0eGRlc2MtPmZsYWdzKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKIAkJCSAgICEhKGNvbnRyb2wtPmZsYWdzICYKIAkJCSAgICAgIElFRUU4MDIxMV9UWENUTF9MT05HX1JFVFJZX0xJTUlUKSk7CkBAIC0xMDM2LDEzICsxMDU1LDE1IEBACiAgKiBUWCBkYXRhIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9raWNrX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgIHVuc2lnbmVkIGludCBxdWV1ZSkKKwkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IHF1ZXVlKQogewogCXUzMiByZWc7CiAKLQlpZiAocXVldWUgPT0gSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTikgeworCWlmIChxdWV1ZSA9PSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTikgewogCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1IxNF9CRUFDT05fR0VOKSkgeworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMSk7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMSk7CiAJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfQkVBQ09OX0dFTiwgMSk7CiAJCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKIAkJfQpAQCAtMTA1NSw1NiArMTA3Niw2MiBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19UWCwKIAkJCSAgIChxdWV1ZSA9PSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTEpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfQVRJTSwKLQkJCSAgIChxdWV1ZSA9PSBJRUVFODAyMTFfVFhfUVVFVUVfQUZURVJfQkVBQ09OKSk7CisJCQkgICAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9BVElNKSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCi1zdGF0aWMgdm9pZCBydDI0MDBwY2lfZmlsbF9yeGRvbmUoc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5LAotCQkJCSAgc3RydWN0IHJ4ZGF0YV9lbnRyeV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgcnQyNDAwcGNpX2ZpbGxfcnhkb25lKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlfX2xlMzIgKnJ4ZCA9IGVudHJ5LT5wcml2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIHdvcmQwOwogCXUzMiB3b3JkMjsKKwl1MzIgd29yZDM7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMCwgJndvcmQwKTsKLQlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMiwgJndvcmQyKTsKKwlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDAsICZ3b3JkMCk7CisJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3J4LT5kZXNjLCAyLCAmd29yZDIpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMywgJndvcmQzKTsKIAotCWRlc2MtPmZsYWdzID0gMDsKKwlyeGRlc2MtPmZsYWdzID0gMDsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfQ1JDX0VSUk9SKSkKLQkJZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9QSFlTSUNBTF9FUlJPUikpCi0JCWRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDOworCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDOwogCiAJLyoKIAkgKiBPYnRhaW4gdGhlIHN0YXR1cyBhYm91dCB0aGlzIHBhY2tldC4KKwkgKiBUaGUgc2lnbmFsIGlzIHRoZSBQTENQIHZhbHVlLCBhbmQgbmVlZHMgdG8gYmUgc3RyaXBwZWQKKwkgKiBvZiB0aGUgcHJlYW1ibGUgYml0ICgweDA4KS4KIAkgKi8KLQlkZXNjLT5zaWduYWwgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDIsIFJYRF9XMl9TSUdOQUwpOwotCWRlc2MtPnJzc2kgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDIsIFJYRF9XMl9SU1NJKSAtCi0JICAgIGVudHJ5LT5yaW5nLT5ydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OwotCWRlc2MtPm9mZG0gPSAwOwotCWRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7Ci0JZGVzYy0+bXlfYnNzID0gISFydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9NWV9CU1MpOworCXJ4ZGVzYy0+c2lnbmFsID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQyLCBSWERfVzJfU0lHTkFMKSAmIH4weDA4OworCXJ4ZGVzYy0+cnNzaSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMiwgUlhEX1czX1JTU0kpIC0KKwkgICAgZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OworCXJ4ZGVzYy0+c2l6ZSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0RBVEFCWVRFX0NPVU5UKTsKKworCXJ4ZGVzYy0+ZGV2X2ZsYWdzID0gUlhET05FX1NJR05BTF9QTENQOworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9NWV9CU1MpKQorCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfTVlfQlNTOwogfQogCiAvKgogICogSW50ZXJydXB0IGZ1bmN0aW9ucy4KICAqLwotc3RhdGljIHZvaWQgcnQyNDAwcGNpX3R4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCBpbnQgcXVldWUpCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIGNvbnN0IGVudW0gaWVlZTgwMjExX3R4X3F1ZXVlIHF1ZXVlX2lkeCkKIHsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nID0gcnQyeDAwbGliX2dldF9yaW5nKHJ0MngwMGRldiwgcXVldWUpOwotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeTsKLQlfX2xlMzIgKnR4ZDsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxdWV1ZV9pZHgpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKKwlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5OworCXN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYyB0eGRlc2M7CiAJdTMyIHdvcmQ7Ci0JaW50IHR4X3N0YXR1czsKLQlpbnQgcmV0cnk7CiAKLQl3aGlsZSAoIXJ0MngwMF9yaW5nX2VtcHR5KHJpbmcpKSB7Ci0JCWVudHJ5ID0gcnQyeDAwX2dldF9kYXRhX2VudHJ5X2RvbmUocmluZyk7Ci0JCXR4ZCA9IGVudHJ5LT5wcml2OwotCQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMCwgJndvcmQpOworCXdoaWxlICghcnQyeDAwcXVldWVfZW1wdHkocXVldWUpKSB7CisJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpOworCQlwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKKwkJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCAwLCAmd29yZCk7CiAKIAkJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfT1dORVJfTklDKSB8fAogCQkgICAgIXJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfVkFMSUQpKQpAQCAtMTExMywxMCArMTE0MCwxMCBAQAogCQkvKgogCQkgKiBPYnRhaW4gdGhlIHN0YXR1cyBhYm91dCB0aGlzIHBhY2tldC4KIAkJICovCi0JCXR4X3N0YXR1cyA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfUkVTVUxUKTsKLQkJcmV0cnkgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZCwgVFhEX1cwX1JFVFJZX0NPVU5UKTsKKwkJdHhkZXNjLnN0YXR1cyA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfUkVTVUxUKTsKKwkJdHhkZXNjLnJldHJ5ID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9SRVRSWV9DT1VOVCk7CiAKLQkJcnQyeDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIGVudHJ5LCB0eF9zdGF0dXMsIHJldHJ5KTsKKwkJcnQyeDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIGVudHJ5LCAmdHhkZXNjKTsKIAl9CiB9CiAKQEAgLTExNjAsNyArMTE4Nyw3IEBACiAJICogMyAtIEF0aW0gcmluZyB0cmFuc21pdCBkb25lIGludGVycnVwdC4KIAkgKi8KIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJlZywgQ1NSN19UWERPTkVfQVRJTVJJTkcpKQotCQlydDI0MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgSUVFRTgwMjExX1RYX1FVRVVFX0FGVEVSX0JFQUNPTik7CisJCXJ0MjQwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBSVDJYMDBfQkNOX1FVRVVFX0FUSU0pOwogCiAJLyoKIAkgKiA0IC0gUHJpb3JpdHkgcmluZyB0cmFuc21pdCBkb25lIGludGVycnVwdC4KQEAgLTEyNjgsOCArMTI5NSwyNyBAQAogCS8qCiAJICogU3RvcmUgbGVkIG1vZGUsIGZvciBjb3JyZWN0IGxlZCBiZWhhdmlvdXIuCiAJICovCi0JcnQyeDAwZGV2LT5sZWRfbW9kZSA9Ci0JICAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKKyNpZmRlZiBDT05GSUdfUlQyNDAwUENJX0xFRFMKKwl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKKworCXJ0MngwMGRldi0+bGVkX3JhZGlvLnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwlydDJ4MDBkZXYtPmxlZF9yYWRpby50eXBlID0gTEVEX1RZUEVfUkFESU87CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldi5icmlnaHRuZXNzX3NldCA9CisJICAgIHJ0MjQwMHBjaV9icmlnaHRuZXNzX3NldDsKKwlydDJ4MDBkZXYtPmxlZF9yYWRpby5sZWRfZGV2LmJsaW5rX3NldCA9CisJICAgIHJ0MjQwMHBjaV9ibGlua19zZXQ7CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7CisKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfVFhSWF9BQ1RJVklUWSkgeworCQlydDJ4MDBkZXYtPmxlZF9xdWFsLnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwkJcnQyeDAwZGV2LT5sZWRfcmFkaW8udHlwZSA9IExFRF9UWVBFX0FDVElWSVRZOworCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQorCQkgICAgcnQyNDAwcGNpX2JyaWdodG5lc3Nfc2V0OworCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmxlZF9kZXYuYmxpbmtfc2V0ID0KKwkJICAgIHJ0MjQwMHBjaV9ibGlua19zZXQ7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwuZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7CisJfQorI2VuZGlmIC8qIENPTkZJR19SVDI0MDBQQ0lfTEVEUyAqLwogCiAJLyoKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCkBAIC0xMzM5LDggKzEzODUsOCBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBod19tb2RlIGluZm9ybWF0aW9uLgogCSAqLwotCXNwZWMtPm51bV9tb2RlcyA9IDE7Ci0Jc3BlYy0+bnVtX3JhdGVzID0gNDsKKwlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKKwlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLOwogCXNwZWMtPnR4X3Bvd2VyX2EgPSBOVUxMOwogCXNwZWMtPnR4X3Bvd2VyX2JnID0gdHhwb3dlcjsKIAlzcGVjLT50eF9wb3dlcl9kZWZhdWx0ID0gREVGQVVMVF9UWFBPV0VSOwpAQCAtMTM3MCw5ICsxNDE2LDkgQEAKIAlydDI0MDBwY2lfcHJvYmVfaHdfbW9kZShydDJ4MDBkZXYpOwogCiAJLyoKLQkgKiBUaGlzIGRldmljZSByZXF1aXJlcyB0aGUgYmVhY29uIHJpbmcKKwkgKiBUaGlzIGRldmljZSByZXF1aXJlcyB0aGUgYXRpbSBxdWV1ZQogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fUklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0xMzg1LDY0ICsxNDMxLDYgQEAKIC8qCiAgKiBJRUVFODAyMTEgc3RhY2sgY2FsbGJhY2sgZnVuY3Rpb25zLgogICovCi1zdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgICAgIGludCBtY19jb3VudCwKLQkJCQkgICAgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXUzMiByZWc7Ci0KLQkvKgotCSAqIE1hc2sgb2ZmIGFueSBmbGFncyB3ZSBhcmUgZ29pbmcgdG8gaWdub3JlIGZyb20KLQkgKiB0aGUgdG90YWxfZmxhZ3MgZmllbGQuCi0JICovCi0JKnRvdGFsX2ZsYWdzICY9Ci0JICAgIEZJRl9BTExNVUxUSSB8Ci0JICAgIEZJRl9GQ1NGQUlMIHwKLQkgICAgRklGX1BMQ1BGQUlMIHwKLQkgICAgRklGX0NPTlRST0wgfAotCSAgICBGSUZfT1RIRVJfQlNTIHwKLQkgICAgRklGX1BST01JU0NfSU5fQlNTOwotCi0JLyoKLQkgKiBBcHBseSBzb21lIHJ1bGVzIHRvIHRoZSBmaWx0ZXJzOgotCSAqIC0gU29tZSBmaWx0ZXJzIGltcGx5IGRpZmZlcmVudCBmaWx0ZXJzIHRvIGJlIHNldC4KLQkgKiAtIFNvbWUgdGhpbmdzIHdlIGNhbid0IGZpbHRlciBvdXQgYXQgYWxsLgotCSAqLwotCSp0b3RhbF9mbGFncyB8PSBGSUZfQUxMTVVMVEk7Ci0JaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9PVEhFUl9CU1MgfHwKLQkgICAgKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQotCQkqdG90YWxfZmxhZ3MgfD0gRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUzsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHdvcmsgbGVmdCBmb3IgdXMuCi0JICovCi0JaWYgKHJ0MngwMGRldi0+cGFja2V0X2ZpbHRlciA9PSAqdG90YWxfZmxhZ3MpCi0JCXJldHVybjsKLQlydDJ4MDBkZXYtPnBhY2tldF9maWx0ZXIgPSAqdG90YWxfZmxhZ3M7Ci0KLQkvKgotCSAqIFN0YXJ0IGNvbmZpZ3VyYXRpb24gc3RlcHMuCi0JICogTm90ZSB0aGF0IHRoZSB2ZXJzaW9uIGVycm9yIHdpbGwgYWx3YXlzIGJlIGRyb3BwZWQKLQkgKiBzaW5jZSB0aGVyZSBpcyBubyBmaWx0ZXIgZm9yIGl0IGF0IHRoaXMgdGltZS4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMF9EUk9QX0NSQywKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX0ZDU0ZBSUwpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfUEhZU0lDQUwsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9QTENQRkFJTCkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9DT05UUk9MLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfQ09OVFJPTCkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9OT1RfVE9fTUUsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9UT0RTLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfVkVSU0lPTl9FUlJPUiwgMSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhDU1IwLCByZWcpOwotfQotCiBzdGF0aWMgaW50IHJ0MjQwMHBjaV9zZXRfcmV0cnlfbGltaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICB1MzIgc2hvcnRfcmV0cnksIHUzMiBsb25nX3JldHJ5KQogewpAQCAtMTQ3Nyw3ICsxNDY1LDggQEAKIAkvKgogCSAqIFdyaXRlIGNvbmZpZ3VyYXRpb24gdG8gcmVnaXN0ZXIuCiAJICovCi0JcnQyNDAwcGNpX2NvbmZpZ19jdyhydDJ4MDBkZXYsICZydDJ4MDBkZXYtPnR4LT50eF9wYXJhbXMpOworCXJ0MjQwMHBjaV9jb25maWdfY3cocnQyeDAwZGV2LAorCQkJICAgIHJ0MngwMGRldi0+dHgtPmN3X21pbiwgcnQyeDAwZGV2LT50eC0+Y3dfbWF4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ5NiwxMiArMTQ4NSw1OCBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgaW50IHJ0MjQwMHBjaV9iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYoY29udHJvbC0+dmlmKTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggKnByaXZfdHg7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOworCXUzMiByZWc7CiAKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNiwgMCk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTcsIDApOworCWlmICh1bmxpa2VseSghaW50Zi0+YmVhY29uKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCXByaXZfdHggPSBpbnRmLT5iZWFjb24tPnByaXZfZGF0YTsKKworCS8qCisJICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgorCSAqLworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CisJc2tiZGVzYy0+ZmxhZ3MgfD0gRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOworCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGE7CisJc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbjsKKwlza2JkZXNjLT5kZXNjID0gcHJpdl90eC0+ZGVzYzsKKwlza2JkZXNjLT5kZXNjX2xlbiA9IGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKKwlza2JkZXNjLT5lbnRyeSA9IGludGYtPmJlYWNvbjsKKworCS8qCisJICogRGlzYWJsZSBiZWFjb25pbmcgd2hpbGUgd2UgYXJlIHJlbG9hZGluZyB0aGUgYmVhY29uIGRhdGEsCisJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KKwkgKi8KKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX0NPVU5ULCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X0JFQUNPTl9HRU4sIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOworCisJLyoKKwkgKiBtYWM4MDIxMSBkb2Vzbid0IHByb3ZpZGUgdGhlIGNvbnRyb2wtPnF1ZXVlIHZhcmlhYmxlCisJICogZm9yIGJlYWNvbnMuIFNldCBvdXIgb3duIHF1ZXVlIGlkZW50aWZpY2F0aW9uIHNvCisJICogaXQgY2FuIGJlIHVzZWQgZHVyaW5nIGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24uCisJICovCisJY29udHJvbC0+cXVldWUgPSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTjsKKwlydDJ4MDBsaWJfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIHNrYiwgY29udHJvbCk7CisKKwkvKgorCSAqIEVuYWJsZSBiZWFjb24gZ2VuZXJhdGlvbi4KKwkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciB0byByZWdpc3RlciwKKwkgKiBhbmQga2ljayB0aGUgYmVhY29uIGdlbmVyYXRvci4KKwkgKi8KKwltZW1jcHkocHJpdl90eC0+ZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lja190eF9xdWV1ZShydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJ0MjQwMHBjaV90eF9sYXN0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTE1MjEsMTUgKzE1NTYsMTQgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCiAJLmNvbmZpZ19pbnRlcmZhY2UJPSBydDJ4MDBtYWNfY29uZmlnX2ludGVyZmFjZSwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MjQwMHBjaV9jb25maWd1cmVfZmlsdGVyLAorCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5zZXRfcmV0cnlfbGltaXQJPSBydDI0MDBwY2lfc2V0X3JldHJ5X2xpbWl0LAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyNDAwcGNpX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjQwMHBjaV9nZXRfdHNmLAotCS5yZXNldF90c2YJCT0gcnQyNDAwcGNpX3Jlc2V0X3RzZiwKLQkuYmVhY29uX3VwZGF0ZQkJPSBydDJ4MDBwY2lfYmVhY29uX3VwZGF0ZSwKKwkuYmVhY29uX3VwZGF0ZQkJPSBydDI0MDBwY2lfYmVhY29uX3VwZGF0ZSwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNDAwcGNpX3R4X2xhc3RfYmVhY29uLAogfTsKIApAQCAtMTU0OSwxOSArMTU4Myw1MCBAQAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MjQwMHBjaV9raWNrX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDI0MDBwY2lfZmlsbF9yeGRvbmUsCi0JLmNvbmZpZ19tYWNfYWRkcgk9IHJ0MjQwMHBjaV9jb25maWdfbWFjX2FkZHIsCi0JLmNvbmZpZ19ic3NpZAkJPSBydDI0MDBwY2lfY29uZmlnX2Jzc2lkLAotCS5jb25maWdfdHlwZQkJPSBydDI0MDBwY2lfY29uZmlnX3R5cGUsCi0JLmNvbmZpZ19wcmVhbWJsZQk9IHJ0MjQwMHBjaV9jb25maWdfcHJlYW1ibGUsCisJLmNvbmZpZ19maWx0ZXIJCT0gcnQyNDAwcGNpX2NvbmZpZ19maWx0ZXIsCisJLmNvbmZpZ19pbnRmCQk9IHJ0MjQwMHBjaV9jb25maWdfaW50ZiwKKwkuY29uZmlnX2VycAkJPSBydDI0MDBwY2lfY29uZmlnX2VycCwKIAkuY29uZmlnCQkJPSBydDI0MDBwY2lfY29uZmlnLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNDAwcGNpX3F1ZXVlX3J4ID0geworCS5lbnRyeV9udW0JCT0gUlhfRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFJYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0MjQwMHBjaV9xdWV1ZV90eCA9IHsKKwkuZW50cnlfbnVtCQk9IFRYX0VOVFJJRVMsCisJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCisJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI0MDBwY2lfcXVldWVfYmNuID0geworCS5lbnRyeV9udW0JCT0gQkVBQ09OX0VOVFJJRVMsCisJLmRhdGFfc2l6ZQkJPSBNR01UX0ZSQU1FX1NJWkUsCisJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI0MDBwY2lfcXVldWVfYXRpbSA9IHsKKwkuZW50cnlfbnVtCQk9IEFUSU1fRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4KSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyBydDI0MDBwY2lfb3BzID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAotCS5yeGRfc2l6ZQk9IFJYRF9ERVNDX1NJWkUsCi0JLnR4ZF9zaXplCT0gVFhEX0RFU0NfU0laRSwKKwkubWF4X3N0YV9pbnRmCT0gMSwKKwkubWF4X2FwX2ludGYJPSAxLAogCS5lZXByb21fc2l6ZQk9IEVFUFJPTV9TSVpFLAogCS5yZl9zaXplCT0gUkZfU0laRSwKKwkucngJCT0gJnJ0MjQwMHBjaV9xdWV1ZV9yeCwKKwkudHgJCT0gJnJ0MjQwMHBjaV9xdWV1ZV90eCwKKwkuYmNuCQk9ICZydDI0MDBwY2lfcXVldWVfYmNuLAorCS5hdGltCQk9ICZydDI0MDBwY2lfcXVldWVfYXRpbSwKIAkubGliCQk9ICZydDI0MDBwY2lfcnQyeDAwX29wcywKIAkuaHcJCT0gJnJ0MjQwMHBjaV9tYWM4MDIxMV9vcHMsCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCmluZGV4IDM2OWFhYzYuLmE1MjEwZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC04OTksMTMgKzg5OSwxMyBAQAogICogV29yZDIKICAqLwogI2RlZmluZSBSWERfVzJfQlVGRkVSX0xFTkdUSAkJRklFTEQzMigweDAwMDBmZmZmKQotI2RlZmluZSBSWERfVzJfU0lHTkFMCQkJRklFTEQzMigweDAwZmYwMDAwKQotI2RlZmluZSBSWERfVzJfUlNTSQkJCUZJRUxEMzIoMHhmZjAwMDAwMCkKKyNkZWZpbmUgUlhEX1cyX0JCUjAJCQlGSUVMRDMyKDB4MDBmZjAwMDApCisjZGVmaW5lIFJYRF9XMl9TSUdOQUwJCQlGSUVMRDMyKDB4ZmYwMDAwMDApCiAKIC8qCiAgKiBXb3JkMwogICovCi0jZGVmaW5lIFJYRF9XM19CQlIyCQkJRklFTEQzMigweDAwMDAwMGZmKQorI2RlZmluZSBSWERfVzNfUlNTSQkJCUZJRUxEMzIoMHgwMDAwMDBmZikKICNkZWZpbmUgUlhEX1czX0JCUjMJCQlGSUVMRDMyKDB4MDAwMGZmMDApCiAjZGVmaW5lIFJYRF9XM19CQlI0CQkJRklFTEQzMigweDAwZmYwMDAwKQogI2RlZmluZSBSWERfVzNfQkJSNQkJCUZJRUxEMzIoMHhmZjAwMDAwMCkKQEAgLTkyMywxMyArOTIzLDEzIEBACiAjZGVmaW5lIFJYRF9XN19SRVNFUlZFRAkJCUZJRUxEMzIoMHhmZmZmZmZmZikKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBkc2NhcGUgdmFsdWUKLSAqIGFuZCBmcm9tIGRzY2FwZSB2YWx1ZSB0byByZWdpc3RlciB2YWx1ZS4KKyAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKiBOT1RFOiBMb2dpY3MgaW4gcnQyNDAwcGNpIGZvciB0eHBvd2VyIGFyZSByZXZlcnNlZAogICogY29tcGFyZWQgdG8gdGhlIG90aGVyIHJ0MngwMCBkcml2ZXJzLiBBIGhpZ2hlciB0eHBvd2VyCiAgKiB2YWx1ZSBtZWFucyB0aGF0IHRoZSB0eHBvd2VyIG11c3QgYmUgbG93ZXJlZC4gVGhpcyBpcwogICogaW1wb3J0YW50IHdoZW4gY29udmVydGluZyB0aGUgdmFsdWUgY29taW5nIGZyb20gdGhlCi0gKiBkc2NhcGUgc3RhY2sgdG8gdGhlIHJ0MjQwMCBhY2NlcHRhYmxlIHZhbHVlLgorICogbWFjODAyMTEgc3RhY2sgdG8gdGhlIHJ0MjQwMCBhY2NlcHRhYmxlIHZhbHVlLgogICovCiAjZGVmaW5lIE1JTl9UWFBPV0VSCTMxCiAjZGVmaW5lIE1BWF9UWFBPV0VSCTYyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKaW5kZXggZTg3NGZkYy4uNWFkZTA5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI0Myw1NyArMjQzLDExNiBAQAogI2RlZmluZSBydDI1MDBwY2lfcmZraWxsX3BvbGwJTlVMTAogI2VuZGlmIC8qIENPTkZJR19SVDI1MDBQQ0lfUkZLSUxMICovCiAKKyNpZmRlZiBDT05GSUdfUlQyNTAwUENJX0xFRFMKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCQkgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkID0KKwkgICAgY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgcnQyeDAwX2xlZCwgbGVkX2Rldik7CisJdW5zaWduZWQgaW50IGVuYWJsZWQgPSBicmlnaHRuZXNzICE9IExFRF9PRkY7CisJdTMyIHJlZzsKKworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKGxlZC0+cnQyeDAwZGV2LCBMRURDU1IsICZyZWcpOworCisJaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9SQURJTyB8fCBsZWQtPnR5cGUgPT0gTEVEX1RZUEVfQVNTT0MpCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMRURDU1JfTElOSywgZW5hYmxlZCk7CisJZWxzZSBpZiAobGVkLT50eXBlID09IExFRF9UWVBFX0FDVElWSVRZKQorCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX0FDVElWSVRZLCBlbmFibGVkKTsKKworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShsZWQtPnJ0MngwMGRldiwgTEVEQ1NSLCByZWcpOworfQorCitzdGF0aWMgaW50IHJ0MjUwMHBjaV9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQoreworCXN0cnVjdCBydDJ4MDBfbGVkICpsZWQgPQorCSAgICBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBydDJ4MDBfbGVkLCBsZWRfZGV2KTsKKwl1MzIgcmVnOworCisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQobGVkLT5ydDJ4MDBkZXYsIExFRENTUiwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9PTl9QRVJJT0QsICpkZWxheV9vbik7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9PRkZfUEVSSU9ELCAqZGVsYXlfb2ZmKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUobGVkLT5ydDJ4MDBkZXYsIExFRENTUiwgcmVnKTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19SVDI1MDBQQ0lfTEVEUyAqLworCiAvKgogICogQ29uZmlndXJhdGlvbiBoYW5kbGVycy4KICAqLwotc3RhdGljIHZvaWQgcnQyNTAwcGNpX2NvbmZpZ19tYWNfYWRkcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICAgIF9fbGUzMiAqbWFjKQotewotCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgQ1NSMywgbWFjLAotCQkJCSAgICAgICgyICogc2l6ZW9mKF9fbGUzMikpKTsKLX0KLQotc3RhdGljIHZvaWQgcnQyNTAwcGNpX2NvbmZpZ19ic3NpZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgIF9fbGUzMiAqYnNzaWQpCi17Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBDU1I1LCBic3NpZCwKLQkJCQkgICAgICAoMiAqIHNpemVvZihfX2xlMzIpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWdfdHlwZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCBpbnQgdHlwZSwKLQkJCQkgIGNvbnN0IGludCB0c2Zfc3luYykKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWdfZmlsdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3MpCiB7CiAJdTMyIHJlZzsKIAotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKLQogCS8qCi0JICogRW5hYmxlIGJlYWNvbiBjb25maWcKKwkgKiBTdGFydCBjb25maWd1cmF0aW9uIHN0ZXBzLgorCSAqIE5vdGUgdGhhdCB0aGUgdmVyc2lvbiBlcnJvciB3aWxsIGFsd2F5cyBiZSBkcm9wcGVkCisJICogYW5kIGJyb2FkY2FzdCBmcmFtZXMgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWQgc2luY2UKKwkgKiB0aGVyZSBpcyBubyBmaWx0ZXIgZm9yIGl0IGF0IHRoaXMgdGltZS4KIAkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTkNTUjEsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05DU1IxX1BSRUxPQUQsCi0JCQkgICBQUkVBTUJMRSArIGdldF9kdXJhdGlvbihJRUVFODAyMTFfSEVBREVSLCAyMCkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05DU1IxX0JFQUNPTl9DV01JTiwKLQkJCSAgIHJ0MngwMGxpYl9nZXRfcmluZyhydDJ4MDBkZXYsCi0JCQkJCSAgICAgIElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04pCi0JCQkgICAtPnR4X3BhcmFtcy5jd19taW4pOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTkNTUjEsIHJlZyk7Ci0KLQkvKgotCSAqIEVuYWJsZSBzeW5jaHJvbmlzYXRpb24uCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RCQ04sICh0c2Zfc3luYyA9PSBUU0ZfU1lOQ19CRUFDT04pKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfQkVBQ09OX0dFTiwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9TWU5DLCB0c2Zfc3luYyk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIHJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjAsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9DUkMsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9GQ1NGQUlMKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMF9EUk9QX1BIWVNJQ0FMLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfUExDUEZBSUwpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfQ09OVFJPTCwKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0NPTlRST0wpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfTk9UX1RPX01FLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfVE9EUywKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSAmJgorCQkJICAgIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMF9EUk9QX1ZFUlNJT05fRVJST1IsIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9NQ0FTVCwKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0FMTE1VTFRJKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMF9EUk9QX0JDQVNULCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjAsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWdfcHJlYW1ibGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgICBjb25zdCBpbnQgc2hvcnRfcHJlYW1ibGUsCi0JCQkJICAgICAgY29uc3QgaW50IGFja190aW1lb3V0LAotCQkJCSAgICAgIGNvbnN0IGludCBhY2tfY29uc3VtZV90aW1lKQorc3RhdGljIHZvaWQgcnQyNTAwcGNpX2NvbmZpZ19pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCisJCQkJICBzdHJ1Y3QgcnQyeDAwaW50Zl9jb25mICpjb25mLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9CisJICAgIHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OKTsKKwl1bnNpZ25lZCBpbnQgYmNuX3ByZWxvYWQ7CisJdTMyIHJlZzsKKworCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfVFlQRSkgeworCQkvKgorCQkgKiBFbmFibGUgYmVhY29uIGNvbmZpZworCQkgKi8KKwkJYmNuX3ByZWxvYWQgPSBQUkVBTUJMRSArIGdldF9kdXJhdGlvbihJRUVFODAyMTFfSEVBREVSLCAyMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOQ1NSMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05DU1IxX1BSRUxPQUQsIGJjbl9wcmVsb2FkKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTkNTUjFfQkVBQ09OX0NXTUlOLCBxdWV1ZS0+Y3dfbWluKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOQ1NSMSwgcmVnKTsKKworCQkvKgorCQkgKiBFbmFibGUgc3luY2hyb25pc2F0aW9uLgorCQkgKi8KKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UU0ZfQ09VTlQsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX1NZTkMsIGNvbmYtPnN5bmMpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOworCX0KKworCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfTUFDKQorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIENTUjMsCisJCQkJCSAgICAgIGNvbmYtPm1hYywgc2l6ZW9mKGNvbmYtPm1hYykpOworCisJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9CU1NJRCkKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBDU1I1LAorCQkJCQkgICAgICBjb25mLT5ic3NpZCwgc2l6ZW9mKGNvbmYtPmJzc2lkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWdfZXJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIHN0cnVjdCBydDJ4MDBsaWJfZXJwICplcnApCiB7CiAJaW50IHByZWFtYmxlX21hc2s7CiAJdTMyIHJlZzsKQEAgLTMwMSwxMSArMzYwLDEzIEBACiAJLyoKIAkgKiBXaGVuIHNob3J0IHByZWFtYmxlIGlzIGVuYWJsZWQsIHdlIHNob3VsZCBzZXQgYml0IDB4MDgKIAkgKi8KLQlwcmVhbWJsZV9tYXNrID0gc2hvcnRfcHJlYW1ibGUgPDwgMzsKKwlwcmVhbWJsZV9tYXNrID0gZXJwLT5zaG9ydF9wcmVhbWJsZSA8PCAzOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjEsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX1RJTUVPVVQsIGFja190aW1lb3V0KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsIGFja19jb25zdW1lX3RpbWUpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX1RJTUVPVVQsCisJCQkgICBlcnAtPmFja190aW1lb3V0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsCisJCQkgICBlcnAtPmFja19jb25zdW1lX3RpbWUpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMSwgcmVnKTsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQVJDU1IyLCAmcmVnKTsKQEAgLTQyNSw2ICs0ODYsMTMgQEAKIAl1OCByMTQ7CiAJdTggcjI7CiAKKwkvKgorCSAqIFdlIHNob3VsZCBuZXZlciBjb21lIGhlcmUgYmVjYXVzZSBydDJ4MDBsaWIgaXMgc3VwcG9zZWQKKwkgKiB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEgZXhwbGljaXRlbHkuCisJICovCisJQlVHX09OKGFudC0+cnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkgfHwKKwkgICAgICAgYW50LT50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSk7CisKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJCUENTUjEsICZyZWcpOwogCXJ0MjUwMHBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDE0LCAmcjE0KTsKIAlydDI1MDBwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAyLCAmcjIpOwpAQCAtNDM4LDE1ICs1MDYsOCBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQQ1NSMV9DQ0ssIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQQ1NSMV9PRkRNLCAwKTsKIAkJYnJlYWs7Ci0JY2FzZSBBTlRFTk5BX0hXX0RJVkVSU0lUWToKLQljYXNlIEFOVEVOTkFfU1dfRElWRVJTSVRZOgotCQkvKgotCQkgKiBOT1RFOiBXZSBzaG91bGQgbmV2ZXIgY29tZSBoZXJlIGJlY2F1c2UgcnQyeDAwbGliIGlzCi0JCSAqIHN1cHBvc2VkIHRvIGNhdGNoIHRoaXMgYW5kIHNlbmQgdXMgdGhlIGNvcnJlY3QgYW50ZW5uYQotCQkgKiBleHBsaWNpdGVseS4gSG93ZXZlciB3ZSBhcmUgbm9nIGdvaW5nIHRvIGJ1ZyBhYm91dCB0aGlzLgotCQkgKiBJbnN0ZWFkLCBqdXN0IGRlZmF1bHQgdG8gYW50ZW5uYSBCLgotCQkgKi8KIAljYXNlIEFOVEVOTkFfQjoKKwlkZWZhdWx0OgogCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjIsIEJCUF9SMl9UWF9BTlRFTk5BLCAyKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUENTUjFfQ0NLLCAyKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUENTUjFfT0ZETSwgMik7CkBAIC00NjAsMTUgKzUyMSw4IEBACiAJY2FzZSBBTlRFTk5BX0E6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMTQsIEJCUF9SMTRfUlhfQU5URU5OQSwgMCk7CiAJCWJyZWFrOwotCWNhc2UgQU5URU5OQV9IV19ESVZFUlNJVFk6Ci0JY2FzZSBBTlRFTk5BX1NXX0RJVkVSU0lUWToKLQkJLyoKLQkJICogTk9URTogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcwotCQkgKiBzdXBwb3NlZCB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEKLQkJICogZXhwbGljaXRlbHkuIEhvd2V2ZXIgd2UgYXJlIG5vZyBnb2luZyB0byBidWcgYWJvdXQgdGhpcy4KLQkJICogSW5zdGVhZCwganVzdCBkZWZhdWx0IHRvIGFudGVubmEgQi4KLQkJICovCiAJY2FzZSBBTlRFTk5BX0I6CisJZGVmYXVsdDoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIxNCwgQkJQX1IxNF9SWF9BTlRFTk5BLCAyKTsKIAkJYnJlYWs7CiAJfQpAQCAtNTMwLDggKzU4NCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzLAotCQkJICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCisJCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfUEhZTU9ERSkKIAkJcnQyNTAwcGNpX2NvbmZpZ19waHltb2RlKHJ0MngwMGRldiwgbGliY29uZi0+YmFzaWNfcmF0ZXMpOwpAQCAtNTQ4LDM0ICs2MDIsNiBAQAogfQogCiAvKgotICogTEVEIGZ1bmN0aW9ucy4KLSAqLwotc3RhdGljIHZvaWQgcnQyNTAwcGNpX2VuYWJsZV9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQl1MzIgcmVnOwotCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBMRURDU1IsICZyZWcpOwotCi0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9PTl9QRVJJT0QsIDcwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX09GRl9QRVJJT0QsIDMwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX0xJTkssCi0JCQkgICAocnQyeDAwZGV2LT5sZWRfbW9kZSAhPSBMRURfTU9ERV9BU1VTKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9BQ1RJVklUWSwKLQkJCSAgIChydDJ4MDBkZXYtPmxlZF9tb2RlICE9IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBMRURDU1IsIHJlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9kaXNhYmxlX2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXUzMiByZWc7Ci0KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIExFRENTUiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRENTUl9MSU5LLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEQ1NSX0FDVElWSVRZLCAwKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBMRURDU1IsIHJlZyk7Ci19Ci0KLS8qCiAgKiBMaW5rIHR1bmluZwogICovCiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfbGlua19zdGF0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtNjEwLDkgKzYzNiwxMCBAQAogCS8qCiAJICogVG8gcHJldmVudCBjb2xsaXNpb25zIHdpdGggTUFDIEFTSUMgb24gY2hpcHNldHMKIAkgKiB1cCB0byB2ZXJzaW9uIEMgdGhlIGxpbmsgdHVuaW5nIHNob3VsZCBoYWx0IGFmdGVyIDIwCi0JICogc2Vjb25kcy4KKwkgKiBzZWNvbmRzIHdoaWxlIGJlaW5nIGFzc29jaWF0ZWQuCiAJICovCiAJaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI1NjBfVkVSU0lPTl9EICYmCisJICAgIHJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkICYmCiAJICAgIHJ0MngwMGRldi0+bGluay5jb3VudCA+IDIwKQogCQlyZXR1cm47CiAKQEAgLTYyMCw5ICs2NDcsMTIgQEAKIAogCS8qCiAJICogQ2hpcHNldCB2ZXJzaW9ucyBDIGFuZCBsb3dlciBzaG91bGQgZGlyZWN0bHkgY29udGludWUKLQkgKiB0byB0aGUgZHluYW1pYyBDQ0EgdHVuaW5nLgorCSAqIHRvIHRoZSBkeW5hbWljIENDQSB0dW5pbmcuIENoaXBzZXQgdmVyc2lvbiBEIGFuZCBoaWdoZXIKKwkgKiBzaG91bGQgZ28gc3RyYWlnaHQgdG8gZHluYW1pYyBDQ0EgdHVuaW5nIHdoZW4gdGhleQorCSAqIGFyZSBub3QgYXNzb2NpYXRlZC4KIAkgKi8KLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMjU2MF9WRVJTSU9OX0QpCisJaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI1NjBfVkVSU0lPTl9EIHx8CisJICAgICFydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCkKIAkJZ290byBkeW5hbWljX2NjYV90dW5lOwogCiAJLyoKQEAgLTY4NCw4MiArNzE0LDg0IEBACiAgKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9pbml0X3J4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICBzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnkpCisJCQkJICAgc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKIHsKLQlfX2xlMzIgKnJ4ZCA9IGVudHJ5LT5wcml2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIHdvcmQ7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMSwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cxX0JVRkZFUl9BRERSRVNTLCBlbnRyeS0+ZGF0YV9kbWEpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHJ4ZCwgMSwgd29yZCk7CisJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3J4LT5kZXNjLCAxLCAmd29yZCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBSWERfVzFfQlVGRkVSX0FERFJFU1MsIHByaXZfcngtPmRhdGFfZG1hKTsKKwlydDJ4MDBfZGVzY193cml0ZShwcml2X3J4LT5kZXNjLCAxLCB3b3JkKTsKIAotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmd29yZCk7CisJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3J4LT5kZXNjLCAwLCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBSWERfVzBfT1dORVJfTklDLCAxKTsKLQlydDJ4MDBfZGVzY193cml0ZShyeGQsIDAsIHdvcmQpOworCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfcngtPmRlc2MsIDAsIHdvcmQpOwogfQogCiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfaW5pdF90eGVudHJ5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5KQorCQkJCSAgIHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCiB7Ci0JX19sZTMyICp0eGQgPSBlbnRyeS0+cHJpdjsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggKnByaXZfdHggPSBlbnRyeS0+cHJpdl9kYXRhOwogCXUzMiB3b3JkOwogCi0JcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDEsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9CVUZGRVJfQUREUkVTUywgZW50cnktPmRhdGFfZG1hKTsKLQlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDEsIHdvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMSwgJndvcmQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0JVRkZFUl9BRERSRVNTLCBwcml2X3R4LT5kYXRhX2RtYSk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMSwgd29yZCk7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1ZBTElELCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PV05FUl9OSUMsIDApOwotCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMCwgd29yZCk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMCwgd29yZCk7CiB9CiAKLXN0YXRpYyBpbnQgcnQyNTAwcGNpX2luaXRfcmluZ3Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbnQgcnQyNTAwcGNpX2luaXRfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKIAl1MzIgcmVnOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlZ2lzdGVycy4KIAkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9UWERfU0laRSwKLQkJCSAgIHJ0MngwMGRldi0+dHhbSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwXS5kZXNjX3NpemUpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjJfTlVNX1RYRCwKLQkJCSAgIHJ0MngwMGRldi0+dHhbSUVFRTgwMjExX1RYX1FVRVVFX0RBVEExXS5zdGF0cy5saW1pdCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9OVU1fQVRJTSwKLQkJCSAgIHJ0MngwMGRldi0+YmNuWzFdLnN0YXRzLmxpbWl0KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IyX05VTV9QUklPLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTBdLnN0YXRzLmxpbWl0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IyX1RYRF9TSVpFLCBydDJ4MDBkZXYtPnR4WzBdLmRlc2Nfc2l6ZSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9OVU1fVFhELCBydDJ4MDBkZXYtPnR4WzFdLmxpbWl0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IyX05VTV9BVElNLCBydDJ4MDBkZXYtPmJjblsxXS5saW1pdCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMl9OVU1fUFJJTywgcnQyeDAwZGV2LT50eFswXS5saW1pdCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IyLCByZWcpOwogCisJcHJpdl90eCA9IHJ0MngwMGRldi0+dHhbMV0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjMsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjNfVFhfUklOR19SRUdJU1RFUiwKLQkJCSAgIHJ0MngwMGRldi0+dHhbSUVFRTgwMjExX1RYX1FVRVVFX0RBVEExXS5kYXRhX2RtYSk7CisJCQkgICBwcml2X3R4LT5kZXNjX2RtYSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IzLCByZWcpOwogCisJcHJpdl90eCA9IHJ0MngwMGRldi0+dHhbMF0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjUsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjVfUFJJT19SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTBdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjUsIHJlZyk7CiAKKwlwcml2X3R4ID0gcnQyeDAwZGV2LT5iY25bMV0uZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjQsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjRfQVRJTV9SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT5iY25bMV0uZGF0YV9kbWEpOworCQkJICAgcHJpdl90eC0+ZGVzY19kbWEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSNCwgcmVnKTsKIAorCXByaXZfdHggPSBydDJ4MDBkZXYtPmJjblswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSNiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSNl9CRUFDT05fUklOR19SRUdJU1RFUiwKLQkJCSAgIHJ0MngwMGRldi0+YmNuWzBdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjYsIHJlZyk7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMSwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMV9SWERfU0laRSwgcnQyeDAwZGV2LT5yeC0+ZGVzY19zaXplKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IxX05VTV9SWEQsIHJ0MngwMGRldi0+cngtPnN0YXRzLmxpbWl0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IxX05VTV9SWEQsIHJ0MngwMGRldi0+cngtPmxpbWl0KTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjEsIHJlZyk7CiAKKwlwcml2X3J4ID0gcnQyeDAwZGV2LT5yeC0+ZW50cmllc1swXS5wcml2X2RhdGE7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjIsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjJfUlhfUklOR19SRUdJU1RFUiwKLQkJCSAgIHJ0MngwMGRldi0+cngtPmRhdGFfZG1hKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IyX1JYX1JJTkdfUkVHSVNURVIsIHByaXZfcngtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKQEAgLTk0NywxOSArOTc5LDE1IEBACiAJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDYxLCAweDZkKTsKIAlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgNjIsIDB4MTApOwogCi0JREVCVUcocnQyeDAwZGV2LCAiU3RhcnQgaW5pdGlhbGl6YXRpb24gZnJvbSBFRVBST00uLi5cbiIpOwogCWZvciAoaSA9IDA7IGkgPCBFRVBST01fQkJQX1NJWkU7IGkrKykgewogCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQkJQX1NUQVJUICsgaSwgJmVlcHJvbSk7CiAKIAkJaWYgKGVlcHJvbSAhPSAweGZmZmYgJiYgZWVwcm9tICE9IDB4MDAwMCkgewogCQkJcmVnX2lkID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0JCUF9SRUdfSUQpOwogCQkJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQkJQX1ZBTFVFKTsKLQkJCURFQlVHKHJ0MngwMGRldiwgIkJCUDogMHglMDJ4LCB2YWx1ZTogMHglMDJ4LlxuIiwKLQkJCSAgICAgIHJlZ19pZCwgdmFsdWUpOwogCQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIHJlZ19pZCwgdmFsdWUpOwogCQl9CiAJfQotCURFQlVHKHJ0MngwMGRldiwgIi4uLkVuZCBpbml0aWFsaXphdGlvbiBmcm9tIEVFUFJPTS5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDExLDcgKzEwMzksNyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzLgogCSAqLwotCWlmIChydDI1MDBwY2lfaW5pdF9yaW5ncyhydDJ4MDBkZXYpIHx8CisJaWYgKHJ0MjUwMHBjaV9pbml0X3F1ZXVlcyhydDJ4MDBkZXYpIHx8CiAJICAgIHJ0MjUwMHBjaV9pbml0X3JlZ2lzdGVycyhydDJ4MDBkZXYpIHx8CiAJICAgIHJ0MjUwMHBjaV9pbml0X2JicChydDJ4MDBkZXYpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIlJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwpAQCAtMTAyMywxMSArMTA1MSw2IEBACiAJICovCiAJcnQyNTAwcGNpX3RvZ2dsZV9pcnEocnQyeDAwZGV2LCBTVEFURV9SQURJT19JUlFfT04pOwogCi0JLyoKLQkgKiBFbmFibGUgTEVECi0JICovCi0JcnQyNTAwcGNpX2VuYWJsZV9sZWQocnQyeDAwZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMDM1LDExICsxMDU4LDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JLyoKLQkgKiBEaXNhYmxlIExFRAotCSAqLwotCXJ0MjUwMHBjaV9kaXNhYmxlX2xlZChydDJ4MDBkZXYpOwotCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSQ1NSMCwgMCk7CiAKIAkvKgpAQCAtMTExMiw4ICsxMTMwLDEyIEBACiAJCXJ0MjUwMHBjaV9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fUlhfT046CisJY2FzZSBTVEFURV9SQURJT19SWF9PTl9MSU5LOgorCQlydDI1MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT04pOworCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKLQkJcnQyNTAwcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIHN0YXRlKTsKKwljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgorCQlydDI1MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9ERUVQX1NMRUVQOgogCWNhc2UgU1RBVEVfU0xFRVA6CkBAIC0xMTM0LDEwICsxMTU2LDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV93cml0ZV90eF9kZXNjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHN0cnVjdCB0eGRhdGFfZW50cnlfZGVzYyAqZGVzYywKKwkJCQkgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCiB7Ci0Jc3RydWN0IHNrYl9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9kZXNjKHNrYik7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CiAJX19sZTMyICp0eGQgPSBza2JkZXNjLT5kZXNjOwogCXUzMiB3b3JkOwogCkBAIC0xMTQ2LDM2ICsxMTY4LDM2IEBACiAJICovCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDIsICZ3b3JkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9JVl9PRkZTRVQsIElFRUU4MDIxMV9IRUFERVIpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0FJRlMsIGRlc2MtPmFpZnMpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0NXTUlOLCBkZXNjLT5jd19taW4pOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0NXTUFYLCBkZXNjLT5jd19tYXgpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0FJRlMsIHR4ZGVzYy0+YWlmcyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfQ1dNSU4sIHR4ZGVzYy0+Y3dfbWluKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9DV01BWCwgdHhkZXNjLT5jd19tYXgpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMiwgd29yZCk7CiAKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMywgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1czX1BMQ1BfU0lHTkFMLCBkZXNjLT5zaWduYWwpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1czX1BMQ1BfU0VSVklDRSwgZGVzYy0+c2VydmljZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9MRU5HVEhfTE9XLCBkZXNjLT5sZW5ndGhfbG93KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XM19QTENQX0xFTkdUSF9ISUdILCBkZXNjLT5sZW5ndGhfaGlnaCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9TSUdOQUwsIHR4ZGVzYy0+c2lnbmFsKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XM19QTENQX1NFUlZJQ0UsIHR4ZGVzYy0+c2VydmljZSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzNfUExDUF9MRU5HVEhfTE9XLCB0eGRlc2MtPmxlbmd0aF9sb3cpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1czX1BMQ1BfTEVOR1RIX0hJR0gsIHR4ZGVzYy0+bGVuZ3RoX2hpZ2gpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMywgd29yZCk7CiAKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMTAsICZ3b3JkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMTBfUlRTLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JUU19GUkFNRSwgJmRlc2MtPmZsYWdzKSk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMTAsIHdvcmQpOwogCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDAsICZ3b3JkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PV05FUl9OSUMsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1ZBTElELCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9NT1JFX0ZSQUcsCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfTU9SRV9GUkFHLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9NT1JFX0ZSQUcsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQUNLLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0FDSywgJmRlc2MtPmZsYWdzKSk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQ0lQSEVSX09XTkVSLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIGRlc2MtPmlmcyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKIAkJCSAgICEhKGNvbnRyb2wtPmZsYWdzICYKIAkJCSAgICAgIElFRUU4MDIxMV9UWENUTF9MT05HX1JFVFJZX0xJTUlUKSk7CkBAIC0xMTg4LDEzICsxMjEwLDE1IEBACiAgKiBUWCBkYXRhIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9raWNrX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgIHVuc2lnbmVkIGludCBxdWV1ZSkKKwkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IHF1ZXVlKQogewogCXUzMiByZWc7CiAKLQlpZiAocXVldWUgPT0gSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTikgeworCWlmIChxdWV1ZSA9PSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTikgewogCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1IxNF9CRUFDT05fR0VOKSkgeworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMSk7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMSk7CiAJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfQkVBQ09OX0dFTiwgMSk7CiAJCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKIAkJfQpAQCAtMTIwNyw1MyArMTIzMSw2MyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19UWCwKIAkJCSAgIChxdWV1ZSA9PSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTEpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfQVRJTSwKLQkJCSAgIChxdWV1ZSA9PSBJRUVFODAyMTFfVFhfUVVFVUVfQUZURVJfQkVBQ09OKSk7CisJCQkgICAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9BVElNKSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfZmlsbF9yeGRvbmUoc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5LAotCQkJCSAgc3RydWN0IHJ4ZGF0YV9lbnRyeV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgcnQyNTAwcGNpX2ZpbGxfcnhkb25lKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlfX2xlMzIgKnJ4ZCA9IGVudHJ5LT5wcml2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIHdvcmQwOwogCXUzMiB3b3JkMjsKIAotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmd29yZDApOwotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAyLCAmd29yZDIpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQwKTsKKwlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDIsICZ3b3JkMik7CiAKLQlkZXNjLT5mbGFncyA9IDA7CisJcnhkZXNjLT5mbGFncyA9IDA7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0NSQ19FUlJPUikpCi0JCWRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CisJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfUEhZU0lDQUxfRVJST1IpKQotCQlkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKKwkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKIAotCWRlc2MtPnNpZ25hbCA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMiwgUlhEX1cyX1NJR05BTCk7Ci0JZGVzYy0+cnNzaSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMiwgUlhEX1cyX1JTU0kpIC0KLQkgICAgZW50cnktPnJpbmctPnJ0MngwMGRldi0+cnNzaV9vZmZzZXQ7Ci0JZGVzYy0+b2ZkbSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX09GRE0pOwotCWRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7Ci0JZGVzYy0+bXlfYnNzID0gISFydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9NWV9CU1MpOworCS8qCisJICogT2J0YWluIHRoZSBzdGF0dXMgYWJvdXQgdGhpcyBwYWNrZXQuCisJICogV2hlbiBmcmFtZSB3YXMgcmVjZWl2ZWQgd2l0aCBhbiBPRkRNIGJpdHJhdGUsCisJICogdGhlIHNpZ25hbCBpcyB0aGUgUExDUCB2YWx1ZS4gSWYgaXQgd2FzIHJlY2VpdmVkIHdpdGgKKwkgKiBhIENDSyBiaXRyYXRlIHRoZSBzaWduYWwgaXMgdGhlIHJhdGUgaW4gMTAwa2JpdC9zLgorCSAqLworCXJ4ZGVzYy0+c2lnbmFsID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQyLCBSWERfVzJfU0lHTkFMKTsKKwlyeGRlc2MtPnJzc2kgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDIsIFJYRF9XMl9SU1NJKSAtCisJICAgIGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5yc3NpX29mZnNldDsKKwlyeGRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7CisKKwlyeGRlc2MtPmRldl9mbGFncyA9IDA7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX09GRE0pKQorCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfU0lHTkFMX1BMQ1A7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX01ZX0JTUykpCisJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9NWV9CU1M7CiB9CiAKIC8qCiAgKiBJbnRlcnJ1cHQgZnVuY3Rpb25zLgogICovCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IGludCBxdWV1ZSkKK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV90eGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgY29uc3QgZW51bSBpZWVlODAyMTFfdHhfcXVldWUgcXVldWVfaWR4KQogewotCXN0cnVjdCBkYXRhX3JpbmcgKnJpbmcgPSBydDJ4MDBsaWJfZ2V0X3JpbmcocnQyeDAwZGV2LCBxdWV1ZSk7Ci0Jc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5OwotCV9fbGUzMiAqdHhkOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlX2lkeCk7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4OworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjIHR4ZGVzYzsKIAl1MzIgd29yZDsKLQlpbnQgdHhfc3RhdHVzOwotCWludCByZXRyeTsKIAotCXdoaWxlICghcnQyeDAwX3JpbmdfZW1wdHkocmluZykpIHsKLQkJZW50cnkgPSBydDJ4MDBfZ2V0X2RhdGFfZW50cnlfZG9uZShyaW5nKTsKLQkJdHhkID0gZW50cnktPnByaXY7Ci0JCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAwLCAmd29yZCk7CisJd2hpbGUgKCFydDJ4MDBxdWV1ZV9lbXB0eShxdWV1ZSkpIHsKKwkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSk7CisJCXByaXZfdHggPSBlbnRyeS0+cHJpdl9kYXRhOworCQlydDJ4MDBfZGVzY19yZWFkKHByaXZfdHgtPmRlc2MsIDAsICZ3b3JkKTsKIAogCQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9PV05FUl9OSUMpIHx8CiAJCSAgICAhcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9WQUxJRCkpCkBAIC0xMjYyLDEwICsxMjk2LDEwIEBACiAJCS8qCiAJCSAqIE9idGFpbiB0aGUgc3RhdHVzIGFib3V0IHRoaXMgcGFja2V0LgogCQkgKi8KLQkJdHhfc3RhdHVzID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9SRVNVTFQpOwotCQlyZXRyeSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfVzBfUkVUUllfQ09VTlQpOworCQl0eGRlc2Muc3RhdHVzID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9SRVNVTFQpOworCQl0eGRlc2MucmV0cnkgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZCwgVFhEX1cwX1JFVFJZX0NPVU5UKTsKIAotCQlydDJ4MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgZW50cnksIHR4X3N0YXR1cywgcmV0cnkpOworCQlydDJ4MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgZW50cnksICZ0eGRlc2MpOwogCX0KIH0KIApAQCAtMTMwOSw3ICsxMzQzLDcgQEAKIAkgKiAzIC0gQXRpbSByaW5nIHRyYW5zbWl0IGRvbmUgaW50ZXJydXB0LgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1I3X1RYRE9ORV9BVElNUklORykpCi0JCXJ0MjUwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBJRUVFODAyMTFfVFhfUVVFVUVfQUZURVJfQkVBQ09OKTsKKwkJcnQyNTAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIFJUMlgwMF9CQ05fUVVFVUVfQVRJTSk7CiAKIAkvKgogCSAqIDQgLSBQcmlvcml0eSByaW5nIHRyYW5zbWl0IGRvbmUgaW50ZXJydXB0LgpAQCAtMTQzOCw4ICsxNDcyLDI3IEBACiAJLyoKIAkgKiBTdG9yZSBsZWQgbW9kZSwgZm9yIGNvcnJlY3QgbGVkIGJlaGF2aW91ci4KIAkgKi8KLQlydDJ4MDBkZXYtPmxlZF9tb2RlID0KLQkgICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOworI2lmZGVmIENPTkZJR19SVDI1MDBQQ0lfTEVEUworCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOworCisJcnQyeDAwZGV2LT5sZWRfcmFkaW8ucnQyeDAwZGV2ID0gcnQyeDAwZGV2OworCXJ0MngwMGRldi0+bGVkX3JhZGlvLnR5cGUgPSBMRURfVFlQRV9SQURJTzsKKwlydDJ4MDBkZXYtPmxlZF9yYWRpby5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0KKwkgICAgcnQyNTAwcGNpX2JyaWdodG5lc3Nfc2V0OworCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYmxpbmtfc2V0ID0KKwkgICAgcnQyNTAwcGNpX2JsaW5rX3NldDsKKwlydDJ4MDBkZXYtPmxlZF9yYWRpby5mbGFncyA9IExFRF9JTklUSUFMSVpFRDsKKworCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZKSB7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwucnQyeDAwZGV2ID0gcnQyeDAwZGV2OworCQlydDJ4MDBkZXYtPmxlZF9yYWRpby50eXBlID0gTEVEX1RZUEVfQUNUSVZJVFk7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5icmlnaHRuZXNzX3NldCA9CisJCSAgICBydDI1MDBwY2lfYnJpZ2h0bmVzc19zZXQ7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5ibGlua19zZXQgPQorCQkgICAgcnQyNTAwcGNpX2JsaW5rX3NldDsKKwkJcnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyA9IExFRF9JTklUSUFMSVpFRDsKKwl9CisjZW5kaWYgLyogQ09ORklHX1JUMjUwMFBDSV9MRURTICovCiAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KQEAgLTE2NTIsOCArMTcwNSw4IEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGh3X21vZGUgaW5mb3JtYXRpb24uCiAJICovCi0Jc3BlYy0+bnVtX21vZGVzID0gMjsKLQlzcGVjLT5udW1fcmF0ZXMgPSAxMjsKKwlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKKwlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAJc3BlYy0+dHhfcG93ZXJfYSA9IE5VTEw7CiAJc3BlYy0+dHhfcG93ZXJfYmcgPSB0eHBvd2VyOwogCXNwZWMtPnR4X3Bvd2VyX2RlZmF1bHQgPSBERUZBVUxUX1RYUE9XRVI7CkBAIC0xNjc0LDkgKzE3MjcsOSBAQAogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNWUpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyNWU7CiAJfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjIyKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjI7Ci0JCXNwZWMtPm51bV9tb2RlcyA9IDM7CiAJfQogfQogCkBAIC0xNzAxLDkgKzE3NTQsOSBAQAogCXJ0MjUwMHBjaV9wcm9iZV9od19tb2RlKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIHRoZSBiZWFjb24gcmluZworCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIHRoZSBhdGltIHF1ZXVlCiAJICovCi0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9SSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTE3MTYsNjkgKzE3NjksNiBAQAogLyoKICAqIElFRUU4MDIxMSBzdGFjayBjYWxsYmFjayBmdW5jdGlvbnMuCiAgKi8KLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICAgICAgaW50IG1jX2NvdW50LAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0JdTMyIHJlZzsKLQotCS8qCi0JICogTWFzayBvZmYgYW55IGZsYWdzIHdlIGFyZSBnb2luZyB0byBpZ25vcmUgZnJvbQotCSAqIHRoZSB0b3RhbF9mbGFncyBmaWVsZC4KLQkgKi8KLQkqdG90YWxfZmxhZ3MgJj0KLQkgICAgRklGX0FMTE1VTFRJIHwKLQkgICAgRklGX0ZDU0ZBSUwgfAotCSAgICBGSUZfUExDUEZBSUwgfAotCSAgICBGSUZfQ09OVFJPTCB8Ci0JICAgIEZJRl9PVEhFUl9CU1MgfAotCSAgICBGSUZfUFJPTUlTQ19JTl9CU1M7Ci0KLQkvKgotCSAqIEFwcGx5IHNvbWUgcnVsZXMgdG8gdGhlIGZpbHRlcnM6Ci0JICogLSBTb21lIGZpbHRlcnMgaW1wbHkgZGlmZmVyZW50IGZpbHRlcnMgdG8gYmUgc2V0LgotCSAqIC0gU29tZSB0aGluZ3Mgd2UgY2FuJ3QgZmlsdGVyIG91dCBhdCBhbGwuCi0JICovCi0JaWYgKG1jX2NvdW50KQotCQkqdG90YWxfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOwotCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTIHx8Ci0JICAgICp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKLQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUyB8IEZJRl9PVEhFUl9CU1M7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZXJlIGlzIGFueSB3b3JrIGxlZnQgZm9yIHVzLgotCSAqLwotCWlmIChydDJ4MDBkZXYtPnBhY2tldF9maWx0ZXIgPT0gKnRvdGFsX2ZsYWdzKQotCQlyZXR1cm47Ci0JcnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyID0gKnRvdGFsX2ZsYWdzOwotCi0JLyoKLQkgKiBTdGFydCBjb25maWd1cmF0aW9uIHN0ZXBzLgotCSAqIE5vdGUgdGhhdCB0aGUgdmVyc2lvbiBlcnJvciB3aWxsIGFsd2F5cyBiZSBkcm9wcGVkCi0JICogYW5kIGJyb2FkY2FzdCBmcmFtZXMgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWQgc2luY2UKLQkgKiB0aGVyZSBpcyBubyBmaWx0ZXIgZm9yIGl0IGF0IHRoaXMgdGltZS4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMF9EUk9QX0NSQywKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX0ZDU0ZBSUwpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfUEhZU0lDQUwsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9QTENQRkFJTCkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9DT05UUk9MLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfQ09OVFJPTCkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9OT1RfVE9fTUUsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRFJPUF9UT0RTLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfVkVSU0lPTl9FUlJPUiwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYQ1NSMF9EUk9QX01DQVNULAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RST1BfQkNBU1QsIDApOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYQ1NSMCwgcmVnKTsKLX0KLQogc3RhdGljIGludCBydDI1MDBwY2lfc2V0X3JldHJ5X2xpbWl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgdTMyIHNob3J0X3JldHJ5LCB1MzIgbG9uZ19yZXRyeSkKIHsKQEAgLTE4MDcsMTIgKzE3OTcsNTkgQEAKIAlyZXR1cm4gdHNmOwogfQogCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQorc3RhdGljIGludCBydDI1MDBwY2lfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKGNvbnRyb2wtPnZpZik7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4OworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKKwl1MzIgcmVnOwogCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTYsIDApOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE3LCAwKTsKKwlpZiAodW5saWtlbHkoIWludGYtPmJlYWNvbikpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXByaXZfdHggPSBpbnRmLT5iZWFjb24tPnByaXZfZGF0YTsKKworCS8qCisJICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgorCSAqLworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CisJc2tiZGVzYy0+ZmxhZ3MgfD0gRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOworCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGE7CisJc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbjsKKwlza2JkZXNjLT5kZXNjID0gcHJpdl90eC0+ZGVzYzsKKwlza2JkZXNjLT5kZXNjX2xlbiA9IGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKKwlza2JkZXNjLT5lbnRyeSA9IGludGYtPmJlYWNvbjsKKworCS8qCisJICogRGlzYWJsZSBiZWFjb25pbmcgd2hpbGUgd2UgYXJlIHJlbG9hZGluZyB0aGUgYmVhY29uIGRhdGEsCisJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KKwkgKi8KKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX0NPVU5ULCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X0JFQUNPTl9HRU4sIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOworCisJLyoKKwkgKiBtYWM4MDIxMSBkb2Vzbid0IHByb3ZpZGUgdGhlIGNvbnRyb2wtPnF1ZXVlIHZhcmlhYmxlCisJICogZm9yIGJlYWNvbnMuIFNldCBvdXIgb3duIHF1ZXVlIGlkZW50aWZpY2F0aW9uIHNvCisJICogaXQgY2FuIGJlIHVzZWQgZHVyaW5nIGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24uCisJICovCisJY29udHJvbC0+cXVldWUgPSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTjsKKwlydDJ4MDBsaWJfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIHNrYiwgY29udHJvbCk7CisKKwkvKgorCSAqIEVuYWJsZSBiZWFjb24gZ2VuZXJhdGlvbi4KKwkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciB0byByZWdpc3RlciwKKwkgKiBhbmQga2ljayB0aGUgYmVhY29uIGdlbmVyYXRvci4KKwkgKi8KKwltZW1jcHkocHJpdl90eC0+ZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lja190eF9xdWV1ZShydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJ0MjUwMHBjaV90eF9sYXN0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTE4MzIsMTUgKzE4NjksMTQgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCiAJLmNvbmZpZ19pbnRlcmZhY2UJPSBydDJ4MDBtYWNfY29uZmlnX2ludGVyZmFjZSwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MjUwMHBjaV9jb25maWd1cmVfZmlsdGVyLAorCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5zZXRfcmV0cnlfbGltaXQJPSBydDI1MDBwY2lfc2V0X3JldHJ5X2xpbWl0LAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjUwMHBjaV9nZXRfdHNmLAotCS5yZXNldF90c2YJCT0gcnQyNTAwcGNpX3Jlc2V0X3RzZiwKLQkuYmVhY29uX3VwZGF0ZQkJPSBydDJ4MDBwY2lfYmVhY29uX3VwZGF0ZSwKKwkuYmVhY29uX3VwZGF0ZQkJPSBydDI1MDBwY2lfYmVhY29uX3VwZGF0ZSwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNTAwcGNpX3R4X2xhc3RfYmVhY29uLAogfTsKIApAQCAtMTg2MCwxOSArMTg5Niw1MCBAQAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MjUwMHBjaV9raWNrX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDI1MDBwY2lfZmlsbF9yeGRvbmUsCi0JLmNvbmZpZ19tYWNfYWRkcgk9IHJ0MjUwMHBjaV9jb25maWdfbWFjX2FkZHIsCi0JLmNvbmZpZ19ic3NpZAkJPSBydDI1MDBwY2lfY29uZmlnX2Jzc2lkLAotCS5jb25maWdfdHlwZQkJPSBydDI1MDBwY2lfY29uZmlnX3R5cGUsCi0JLmNvbmZpZ19wcmVhbWJsZQk9IHJ0MjUwMHBjaV9jb25maWdfcHJlYW1ibGUsCisJLmNvbmZpZ19maWx0ZXIJCT0gcnQyNTAwcGNpX2NvbmZpZ19maWx0ZXIsCisJLmNvbmZpZ19pbnRmCQk9IHJ0MjUwMHBjaV9jb25maWdfaW50ZiwKKwkuY29uZmlnX2VycAkJPSBydDI1MDBwY2lfY29uZmlnX2VycCwKIAkuY29uZmlnCQkJPSBydDI1MDBwY2lfY29uZmlnLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNTAwcGNpX3F1ZXVlX3J4ID0geworCS5lbnRyeV9udW0JCT0gUlhfRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFJYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0MjUwMHBjaV9xdWV1ZV90eCA9IHsKKwkuZW50cnlfbnVtCQk9IFRYX0VOVFJJRVMsCisJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCisJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDBwY2lfcXVldWVfYmNuID0geworCS5lbnRyeV9udW0JCT0gQkVBQ09OX0VOVFJJRVMsCisJLmRhdGFfc2l6ZQkJPSBNR01UX0ZSQU1FX1NJWkUsCisJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDBwY2lfcXVldWVfYXRpbSA9IHsKKwkuZW50cnlfbnVtCQk9IEFUSU1fRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4KSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyBydDI1MDBwY2lfb3BzID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAotCS5yeGRfc2l6ZQk9IFJYRF9ERVNDX1NJWkUsCi0JLnR4ZF9zaXplCT0gVFhEX0RFU0NfU0laRSwKKwkubWF4X3N0YV9pbnRmCT0gMSwKKwkubWF4X2FwX2ludGYJPSAxLAogCS5lZXByb21fc2l6ZQk9IEVFUFJPTV9TSVpFLAogCS5yZl9zaXplCT0gUkZfU0laRSwKKwkucngJCT0gJnJ0MjUwMHBjaV9xdWV1ZV9yeCwKKwkudHgJCT0gJnJ0MjUwMHBjaV9xdWV1ZV90eCwKKwkuYmNuCQk9ICZydDI1MDBwY2lfcXVldWVfYmNuLAorCS5hdGltCQk9ICZydDI1MDBwY2lfcXVldWVfYXRpbSwKIAkubGliCQk9ICZydDI1MDBwY2lfcnQyeDAwX29wcywKIAkuaHcJCT0gJnJ0MjUwMHBjaV9tYWM4MDIxMV9vcHMsCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCmluZGV4IDkyYmEwOTAuLjEzODk5NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMjEzLDggKzEyMTMsOCBAQAogI2RlZmluZSBSWERfVzEwX0RST1AJCQlGSUVMRDMyKDB4MDAwMDAwMDEpCiAKIC8qCi0gKiBNYWNybydzIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gZHNjYXBlIHZhbHVlCi0gKiBhbmQgZnJvbSBkc2NhcGUgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCisgKiBNYWNybydzIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKKyAqIGFuZCBmcm9tIG1hYzgwMjExIHZhbHVlIHRvIHJlZ2lzdGVyIHZhbHVlLgogICovCiAjZGVmaW5lIE1JTl9UWFBPV0VSCTAKICNkZWZpbmUgTUFYX1RYUE9XRVIJMzEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwppbmRleCA4NmRlZDQwLi42YmIwN2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjgyLDk3ICsyODIsMTM2IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAorI2lmZGVmIENPTkZJR19SVDI1MDBVU0JfTEVEUworc3RhdGljIHZvaWQgcnQyNTAwdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBydDJ4MDBfbGVkICpsZWQgPQorCSAgICBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBydDJ4MDBfbGVkLCBsZWRfZGV2KTsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZCA9IGJyaWdodG5lc3MgIT0gTEVEX09GRjsKKwl1MTYgcmVnOworCisJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQobGVkLT5ydDJ4MDBkZXYsIE1BQ19DU1IyMCwgJnJlZyk7CisKKwlpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1JBRElPIHx8IGxlZC0+dHlwZSA9PSBMRURfVFlQRV9BU1NPQykKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IyMF9MSU5LLCBlbmFibGVkKTsKKwllbHNlIGlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfQUNUSVZJVFkpCisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMjBfQUNUSVZJVFksIGVuYWJsZWQpOworCisJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKGxlZC0+cnQyeDAwZGV2LCBNQUNfQ1NSMjAsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgcnQyNTAwdXNiX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vbiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCit7CisJc3RydWN0IHJ0MngwMF9sZWQgKmxlZCA9CisJICAgIGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IHJ0MngwMF9sZWQsIGxlZF9kZXYpOworCXUxNiByZWc7CisKKwlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChsZWQtPnJ0MngwMGRldiwgTUFDX0NTUjIxLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjIxX09OX1BFUklPRCwgKmRlbGF5X29uKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjIxX09GRl9QRVJJT0QsICpkZWxheV9vZmYpOworCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShsZWQtPnJ0MngwMGRldiwgTUFDX0NTUjIxLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1JUMjUwMFVTQl9MRURTICovCisKIC8qCiAgKiBDb25maWd1cmF0aW9uIGhhbmRsZXJzLgogICovCi1zdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnX21hY19hZGRyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICAgX19sZTMyICptYWMpCi17Ci0JcnQyNTAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMiwgbWFjLAotCQkJCSAgICAgICgzICogc2l6ZW9mKF9fbGUxNikpKTsKLX0KLQotc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZ19ic3NpZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgIF9fbGUzMiAqYnNzaWQpCi17Ci0JcnQyNTAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSNSwgYnNzaWQsCi0JCQkJICAgICAgKDMgKiBzaXplb2YoX19sZTE2KSkpOwotfQotCi1zdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnX3R5cGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3QgaW50IHR5cGUsCi0JCQkJICBjb25zdCBpbnQgdHNmX3N5bmMpCi17Ci0JdTE2IHJlZzsKLQotCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIDApOwotCi0JLyoKLQkgKiBFbmFibGUgYmVhY29uIGNvbmZpZwotCSAqLwotCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IyMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMjBfT0ZGU0VULAotCQkJICAgKFBSRUFNQkxFICsgZ2V0X2R1cmF0aW9uKElFRUU4MDIxMV9IRUFERVIsIDIwKSkgPj4gNik7Ci0JaWYgKHR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyMF9CQ05fRVhQRUNUX1dJTkRPVywgMCk7Ci0JZWxzZQotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyMF9CQ05fRVhQRUNUX1dJTkRPVywgMik7Ci0JcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IyMCwgcmVnKTsKLQotCS8qCi0JICogRW5hYmxlIHN5bmNocm9uaXNhdGlvbi4KLQkgKi8KLQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMTgsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE4X09GRlNFVCwgMCk7Ci0JcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOCwgcmVnKTsKLQotCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVFNGX0NPVU5ULCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UQkNOLAotCQkJICAgKHRzZl9zeW5jID09IFRTRl9TWU5DX0JFQUNPTikpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X0JFQUNPTl9HRU4sIDApOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X1RTRl9TWU5DLCB0c2Zfc3luYyk7Ci0JcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZ19wcmVhbWJsZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICAgIGNvbnN0IGludCBzaG9ydF9wcmVhbWJsZSwKLQkJCQkgICAgICBjb25zdCBpbnQgYWNrX3RpbWVvdXQsCi0JCQkJICAgICAgY29uc3QgaW50IGFja19jb25zdW1lX3RpbWUpCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnX2ZpbHRlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzKQogewogCXUxNiByZWc7CiAKIAkvKgotCSAqIFdoZW4gaW4gYXRvbWljIGNvbnRleHQsIHJlc2NoZWR1bGUgYW5kIGxldCBydDJ4MDBsaWIKLQkgKiBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uCisJICogU3RhcnQgY29uZmlndXJhdGlvbiBzdGVwcy4KKwkgKiBOb3RlIHRoYXQgdGhlIHZlcnNpb24gZXJyb3Igd2lsbCBhbHdheXMgYmUgZHJvcHBlZAorCSAqIGFuZCBicm9hZGNhc3QgZnJhbWVzIHdpbGwgYWx3YXlzIGJlIGFjY2VwdGVkIHNpbmNlCisJICogdGhlcmUgaXMgbm8gZmlsdGVyIGZvciBpdCBhdCB0aGlzIHRpbWUuCiAJICovCi0JaWYgKGluX2F0b21pYygpKSB7Ci0JCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT5jb25maWdfd29yayk7Ci0JCXJldHVybjsKKwlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMiwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMl9EUk9QX0NSQywKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0ZDU0ZBSUwpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyX0RST1BfUEhZU0lDQUwsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QTENQRkFJTCkpOworCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjJfRFJPUF9DT05UUk9MLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfQ09OVFJPTCkpOworCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjJfRFJPUF9OT1RfVE9fTUUsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykpOworCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjJfRFJPUF9UT0RTLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICYmCisJCQkgICAhcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyX0RST1BfVkVSU0lPTl9FUlJPUiwgMSk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMl9EUk9QX01VTFRJQ0FTVCwKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0FMTE1VTFRJKSk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMl9EUk9QX0JST0FEQ0FTVCwgMCk7CisJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IyLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKKwkJCQkgIHN0cnVjdCBydDJ4MDBpbnRmX2NvbmYgKmNvbmYsCisJCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IGJjbl9wcmVsb2FkOworCXUxNiByZWc7CisKKwlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX1RZUEUpIHsKKwkJLyoKKwkJICogRW5hYmxlIGJlYWNvbiBjb25maWcKKwkJICovCisJCWJjbl9wcmVsb2FkID0gUFJFQU1CTEUgKyBnZXRfZHVyYXRpb24oSUVFRTgwMjExX0hFQURFUiwgMjApOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyMF9PRkZTRVQsIGJjbl9wcmVsb2FkID4+IDYpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyMF9CQ05fRVhQRUNUX1dJTkRPVywKKwkJCQkgICAyICogKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKSk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMjAsIHJlZyk7CisKKwkJLyoKKwkJICogRW5hYmxlIHN5bmNocm9uaXNhdGlvbi4KKwkJICovCisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxOCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE4X09GRlNFVCwgMCk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTgsIHJlZyk7CisKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVFNGX0NPVU5ULCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVFNGX1NZTkMsIGNvbmYtPnN5bmMpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UQkNOLCAxKTsKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnKTsKIAl9CiAKKwlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX01BQykKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMiwgY29uZi0+bWFjLAorCQkJCQkgICAgICAoMyAqIHNpemVvZihfX2xlMTYpKSk7CisKKwlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX0JTU0lEKQorCQlydDI1MDB1c2JfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIE1BQ19DU1I1LCBjb25mLT5ic3NpZCwKKwkJCQkJICAgICAgKDMgKiBzaXplb2YoX19sZTE2KSkpOworfQorCitzdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlnX2VycChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSBzdHJ1Y3QgcnQyeDAwbGliX2VycCAqZXJwKQoreworCXUxNiByZWc7CisKIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMV9BQ0tfVElNRU9VVCwgYWNrX3RpbWVvdXQpOworCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjFfQUNLX1RJTUVPVVQsIGVycC0+YWNrX3RpbWVvdXQpOwogCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMSwgcmVnKTsKIAogCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxMCwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTBfQVVUT1JFU1BPTkRfUFJFQU1CTEUsCi0JCQkgICAhIXNob3J0X3ByZWFtYmxlKTsKKwkJCSAgICEhZXJwLT5zaG9ydF9wcmVhbWJsZSk7CiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxMCwgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZ19waHltb2RlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICBjb25zdCBpbnQgcGh5bW9kZSwKIAkJCQkgICAgIGNvbnN0IGludCBiYXNpY19yYXRlX21hc2spCiB7CiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxMSwgYmFzaWNfcmF0ZV9tYXNrKTsKLQotCWlmIChwaHltb2RlID09IEhXTU9ERV9CKSB7Ci0JCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgMHgwMDBiKTsKLQkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjEyLCAweDAwNDApOwotCX0gZWxzZSB7Ci0JCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgMHgwMDA1KTsKLQkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjEyLCAweDAxNmMpOwotCX0KIH0KIAogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZ19jaGFubmVsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC00MjQsNiArNDYzLDEzIEBACiAJdTE2IGNzcjU7CiAJdTE2IGNzcjY7CiAKKwkvKgorCSAqIFdlIHNob3VsZCBuZXZlciBjb21lIGhlcmUgYmVjYXVzZSBydDJ4MDBsaWIgaXMgc3VwcG9zZWQKKwkgKiB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEgZXhwbGljaXRlbHkuCisJICovCisJQlVHX09OKGFudC0+cnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkgfHwKKwkgICAgICAgYW50LT50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSk7CisKIAlydDI1MDB1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAyLCAmcjIpOwogCXJ0MjUwMHVzYl9iYnBfcmVhZChydDJ4MDBkZXYsIDE0LCAmcjE0KTsKIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFBIWV9DU1I1LCAmY3NyNSk7CkBAIC00NDMsMTQgKzQ4OSw4IEBACiAJCXJ0MngwMF9zZXRfZmllbGQxNigmY3NyNSwgUEhZX0NTUjVfQ0NLLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZjc3I2LCBQSFlfQ1NSNl9PRkRNLCAwKTsKIAkJYnJlYWs7Ci0JY2FzZSBBTlRFTk5BX1NXX0RJVkVSU0lUWToKLQkJLyoKLQkJICogTk9URTogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcwotCQkgKiBzdXBwb3NlZCB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEKLQkJICogZXhwbGljaXRlbHkuIEhvd2V2ZXIgd2UgYXJlIG5vZyBnb2luZyB0byBidWcgYWJvdXQgdGhpcy4KLQkJICogSW5zdGVhZCwganVzdCBkZWZhdWx0IHRvIGFudGVubmEgQi4KLQkJICovCiAJY2FzZSBBTlRFTk5BX0I6CisJZGVmYXVsdDoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIyLCBCQlBfUjJfVFhfQU5URU5OQSwgMik7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmY3NyNSwgUEhZX0NTUjVfQ0NLLCAyKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZjc3I2LCBQSFlfQ1NSNl9PRkRNLCAyKTsKQEAgLTQ2NywxNCArNTA3LDggQEAKIAljYXNlIEFOVEVOTkFfQToKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIxNCwgQkJQX1IxNF9SWF9BTlRFTk5BLCAwKTsKIAkJYnJlYWs7Ci0JY2FzZSBBTlRFTk5BX1NXX0RJVkVSU0lUWToKLQkJLyoKLQkJICogTk9URTogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcwotCQkgKiBzdXBwb3NlZCB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEKLQkJICogZXhwbGljaXRlbHkuIEhvd2V2ZXIgd2UgYXJlIG5vZyBnb2luZyB0byBidWcgYWJvdXQgdGhpcy4KLQkJICogSW5zdGVhZCwganVzdCBkZWZhdWx0IHRvIGFudGVubmEgQi4KLQkJICovCiAJY2FzZSBBTlRFTk5BX0I6CisJZGVmYXVsdDoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIxNCwgQkJQX1IxNF9SWF9BTlRFTk5BLCAyKTsKIAkJYnJlYWs7CiAJfQpAQCAtNTEwLDYgKzU0NCw4IEBACiAJdTE2IHJlZzsKIAogCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMCwgbGliY29uZi0+c2xvdF90aW1lKTsKKwlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIGxpYmNvbmYtPnNpZnMpOworCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMiwgbGliY29uZi0+ZWlmcyk7CiAKIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMTgsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE4X0lOVEVSVkFMLApAQCAtNTE4LDEyICs1NTQsMTEgQEAKIH0KIAogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKKwkJCSAgICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAorCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9QSFlNT0RFKQotCQlydDI1MDB1c2JfY29uZmlnX3BoeW1vZGUocnQyeDAwZGV2LCBsaWJjb25mLT5waHltb2RlLAotCQkJCQkgbGliY29uZi0+YmFzaWNfcmF0ZXMpOworCQlydDI1MDB1c2JfY29uZmlnX3BoeW1vZGUocnQyeDAwZGV2LCBsaWJjb25mLT5iYXNpY19yYXRlcyk7CiAJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9DSEFOTkVMKQogCQlydDI1MDB1c2JfY29uZmlnX2NoYW5uZWwocnQyeDAwZGV2LCAmbGliY29uZi0+cmYsCiAJCQkJCSBsaWJjb25mLT5jb25mLT5wb3dlcl9sZXZlbCk7CkBAIC01MzcsMzYgKzU3Miw2IEBACiB9CiAKIC8qCi0gKiBMRUQgZnVuY3Rpb25zLgotICovCi1zdGF0aWMgdm9pZCBydDI1MDB1c2JfZW5hYmxlX2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXUxNiByZWc7Ci0KLQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IyMSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IyMV9PTl9QRVJJT0QsIDcwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjIxX09GRl9QRVJJT0QsIDMwKTsKLQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMjEsIHJlZyk7Ci0KLQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IyMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IyMF9MSU5LLAotCQkJICAgKHJ0MngwMGRldi0+bGVkX21vZGUgIT0gTEVEX01PREVfQVNVUykpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMjBfQUNUSVZJVFksCi0JCQkgICAocnQyeDAwZGV2LT5sZWRfbW9kZSAhPSBMRURfTU9ERV9UWFJYX0FDVElWSVRZKSk7Ci0JcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjIwLCByZWcpOwotfQotCi1zdGF0aWMgdm9pZCBydDI1MDB1c2JfZGlzYWJsZV9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQl1MTYgcmVnOwotCi0JcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMjBfTElOSywgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IyMF9BQ1RJVklUWSwgMCk7Ci0JcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjIwLCByZWcpOwotfQotCi0vKgogICogTGluayB0dW5pbmcKICAqLwogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2xpbmtfc3RhdHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTYyNiw2ICs2MzEsMjQgQEAKIAl1OCBsb3dfYm91bmQ7CiAKIAkvKgorCSAqIFJlYWQgY3VycmVudCByMTcgdmFsdWUsIGFzIHdlbGwgYXMgdGhlIHNlbnNpdGl2aXR5IHZhbHVlcworCSAqIGZvciB0aGUgcjE3IHJlZ2lzdGVyLgorCSAqLworCXJ0MjUwMHVzYl9iYnBfcmVhZChydDJ4MDBkZXYsIDE3LCAmcjE3KTsKKwlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQkJQVFVORV9SMTcsICZyMTdfc2Vucyk7CisKKwlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQkJQVFVORV9WR0MsICZ2Z2NfYm91bmQpOworCXVwX2JvdW5kID0gcnQyeDAwX2dldF9maWVsZDE2KHZnY19ib3VuZCwgRUVQUk9NX0JCUFRVTkVfVkdDVVBQRVIpOworCWxvd19ib3VuZCA9IHJ0MngwMF9nZXRfZmllbGQxNih2Z2NfYm91bmQsIEVFUFJPTV9CQlBUVU5FX1ZHQ0xPV0VSKTsKKworCS8qCisJICogSWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkLCB3ZSBzaG91bGQgZ28gc3RyYWlnaHQgdG8gdGhlCisJICogZHluYW1pYyBDQ0EgdHVuaW5nLgorCSAqLworCWlmICghcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQpCisJCWdvdG8gZHluYW1pY19jY2FfdHVuZTsKKworCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBCQlAgdHVuaW5nIHRocmVzaG9sZCBhbmQgY29ycmVjdGx5CiAJICogc2V0IEJCUCAyNCwgMjUgYW5kIDYxLgogCSAqLwpAQCAtNjUxLDEzICs2NzQsNiBAQAogCXJ0MjUwMHVzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCA2MSwgcjYxKTsKIAogCS8qCi0JICogUmVhZCBjdXJyZW50IHIxNyB2YWx1ZSwgYXMgd2VsbCBhcyB0aGUgc2Vuc2l0aXZpdHkgdmFsdWVzCi0JICogZm9yIHRoZSByMTcgcmVnaXN0ZXIuCi0JICovCi0JcnQyNTAwdXNiX2JicF9yZWFkKHJ0MngwMGRldiwgMTcsICZyMTcpOwotCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9CQlBUVU5FX1IxNywgJnIxN19zZW5zKTsKLQotCS8qCiAJICogQSB0b28gbG93IFJTU0kgd2lsbCBjYXVzZSB0b28gbXVjaCBmYWxzZSBDQ0Egd2hpY2ggd2lsbAogCSAqIHRoZW4gY29ycnVwdCB0aGUgUjE3IHR1bmluZy4gVG8gcmVtaWR5IHRoaXMgdGhlIHR1bmluZyBzaG91bGQKIAkgKiBiZSBzdG9wcGVkIChXaGlsZSBtYWtpbmcgc3VyZSB0aGUgUjE3IHZhbHVlIHdpbGwgbm90IGV4Y2VlZCBsaW1pdHMpCkBAIC02OTIsMTQgKzcwOCw5IEBACiAJICogTGVhdmUgc2hvcnQgb3IgbWlkZGxlIGRpc3RhbmNlIGNvbmRpdGlvbiwgcmVzdG9yZSByMTcKIAkgKiB0byB0aGUgZHluYW1pYyB0dW5pbmcgcmFuZ2UuCiAJICovCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0JCUFRVTkVfVkdDLCAmdmdjX2JvdW5kKTsKLQl2Z2NfYm91bmQgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYodmdjX2JvdW5kLCBFRVBST01fQkJQVFVORV9WR0NVUFBFUik7Ci0KIAlsb3dfYm91bmQgPSAweDMyOwotCWlmIChyc3NpID49IC03NykKLQkJdXBfYm91bmQgPSB2Z2NfYm91bmQ7Ci0JZWxzZQotCQl1cF9ib3VuZCA9IHZnY19ib3VuZCAtICgtNzcgLSByc3NpKTsKKwlpZiAocnNzaSA8IC03NykKKwkJdXBfYm91bmQgLT0gKC03NyAtIHJzc2kpOwogCiAJaWYgKHVwX2JvdW5kIDwgbG93X2JvdW5kKQogCQl1cF9ib3VuZCA9IGxvd19ib3VuZDsKQEAgLTcwNyw3ICs3MTgsMTYgQEAKIAlpZiAocjE3ID4gdXBfYm91bmQpIHsKIAkJcnQyNTAwdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB1cF9ib3VuZCk7CiAJCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSB1cF9ib3VuZDsKLQl9IGVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByMTcgPCB1cF9ib3VuZCkgeworCQlyZXR1cm47CisJfQorCitkeW5hbWljX2NjYV90dW5lOgorCisJLyoKKwkgKiBSMTcgaXMgaW5zaWRlIHRoZSBkeW5hbWljIHR1bmluZyByYW5nZSwKKwkgKiBzdGFydCB0dW5pbmcgdGhlIGxpbmsgYmFzZWQgb24gdGhlIGZhbHNlIGNjYSBjb3VudGVyLgorCSAqLworCWlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPiA1MTIgJiYgcjE3IDwgdXBfYm91bmQpIHsKIAkJcnQyNTAwdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCArK3IxNyk7CiAJCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByMTc7CiAJfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gbG93X2JvdW5kKSB7CkBAIC04NzgsMTkgKzg5OCwxNSBAQAogCXJ0MjUwMHVzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCA2MiwgMHgxMCk7CiAJcnQyNTAwdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDc1LCAweGZmKTsKIAotCURFQlVHKHJ0MngwMGRldiwgIlN0YXJ0IGluaXRpYWxpemF0aW9uIGZyb20gRUVQUk9NLi4uXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX0JCUF9TSVpFOyBpKyspIHsKIAkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0JCUF9TVEFSVCArIGksICZlZXByb20pOwogCiAJCWlmIChlZXByb20gIT0gMHhmZmZmICYmIGVlcHJvbSAhPSAweDAwMDApIHsKIAkJCXJlZ19pZCA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9CQlBfUkVHX0lEKTsKIAkJCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0JCUF9WQUxVRSk7Ci0JCQlERUJVRyhydDJ4MDBkZXYsICJCQlA6IDB4JTAyeCwgdmFsdWU6IDB4JTAyeC5cbiIsCi0JCQkgICAgICByZWdfaWQsIHZhbHVlKTsKIAkJCXJ0MjUwMHVzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCByZWdfaWQsIHZhbHVlKTsKIAkJfQogCX0KLQlERUJVRyhydDJ4MDBkZXYsICIuLi5FbmQgaW5pdGlhbGl6YXRpb24gZnJvbSBFRVBST00uXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTIwLDIxICs5MzYsMTEgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyoKLQkgKiBFbmFibGUgTEVECi0JICovCi0JcnQyNTAwdXNiX2VuYWJsZV9sZWQocnQyeDAwZGV2KTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBydDI1MDB1c2JfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCS8qCi0JICogRGlzYWJsZSBMRUQKLQkgKi8KLQlydDI1MDB1c2JfZGlzYWJsZV9sZWQocnQyeDAwZGV2KTsKLQogCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMywgMHgyMTIxKTsKIAlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTQsIDB4MjEyMSk7CiAKQEAgLTEwMDEsOCArMTAwNywxMiBAQAogCQlydDI1MDB1c2JfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09OOgorCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKKwkJcnQyNTAwdXNiX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKKwkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19SWF9PRkY6Ci0JCXJ0MjUwMHVzYl90b2dnbGVfcngocnQyeDAwZGV2LCBzdGF0ZSk7CisJY2FzZSBTVEFURV9SQURJT19SWF9PRkZfTElOSzoKKwkJcnQyNTAwdXNiX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfREVFUF9TTEVFUDoKIAljYXNlIFNUQVRFX1NMRUVQOgpAQCAtMTAyMywxMCArMTAzMywxMCBAQAogICovCiBzdGF0aWMgdm9pZCBydDI1MDB1c2Jfd3JpdGVfdHhfZGVzYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBzdHJ1Y3QgdHhkYXRhX2VudHJ5X2Rlc2MgKmRlc2MsCisJCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQogewotCXN0cnVjdCBza2JfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZGVzYyhza2IpOworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwogCV9fbGUzMiAqdHhkID0gc2tiZGVzYy0+ZGVzYzsKIAl1MzIgd29yZDsKIApAQCAtMTAzNSwzMSArMTA0NSwzMSBAQAogCSAqLwogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAxLCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSVZfT0ZGU0VULCBJRUVFODAyMTFfSEVBREVSKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9BSUZTLCBkZXNjLT5haWZzKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01JTiwgZGVzYy0+Y3dfbWluKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01BWCwgZGVzYy0+Y3dfbWF4KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9BSUZTLCB0eGRlc2MtPmFpZnMpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUlOLCB0eGRlc2MtPmN3X21pbik7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQ1dNQVgsIHR4ZGVzYy0+Y3dfbWF4KTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDEsIHdvcmQpOwogCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDIsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX1NJR05BTCwgZGVzYy0+c2lnbmFsKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX1NFUlZJQ0UsIGRlc2MtPnNlcnZpY2UpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfTEVOR1RIX0xPVywgZGVzYy0+bGVuZ3RoX2xvdyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9MRU5HVEhfSElHSCwgZGVzYy0+bGVuZ3RoX2hpZ2gpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfU0lHTkFMLCB0eGRlc2MtPnNpZ25hbCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9TRVJWSUNFLCB0eGRlc2MtPnNlcnZpY2UpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfTEVOR1RIX0xPVywgdHhkZXNjLT5sZW5ndGhfbG93KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX0xFTkdUSF9ISUdILCB0eGRlc2MtPmxlbmd0aF9oaWdoKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDIsIHdvcmQpOwogCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDAsICZ3b3JkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9MSU1JVCwgY29udHJvbC0+cmV0cnlfbGltaXQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX01PUkVfRlJBRywKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9NT1JFX0ZSQUcsICZkZXNjLT5mbGFncykpOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX01PUkVfRlJBRywgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9BQ0ssCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQUNLLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9BQ0ssICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZkZXNjLT5mbGFncykpOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZkZXNjLT5mbGFncykpOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9ORVdfU0VRLAogCQkJICAgISEoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRklSU1RfRlJBR01FTlQpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIGRlc2MtPmlmcyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfREFUQUJZVEVfQ09VTlQsIHNrYmRlc2MtPmRhdGFfbGVuKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9DSVBIRVIsIENJUEhFUl9OT05FKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDAsIHdvcmQpOwpAQCAtMTA4NCwxNSArMTA5NCwxNyBAQAogICogVFggZGF0YSBpbml0aWFsaXphdGlvbgogICovCiBzdGF0aWMgdm9pZCBydDI1MDB1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICB1bnNpZ25lZCBpbnQgcXVldWUpCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSkKIHsKIAl1MTYgcmVnOwogCi0JaWYgKHF1ZXVlICE9IElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04pCisJaWYgKHF1ZXVlICE9IFJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OKQogCQlyZXR1cm47CiAKIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMTksICZyZWcpOwogCWlmICghcnQyeDAwX2dldF9maWVsZDE2KHJlZywgVFhSWF9DU1IxOV9CRUFDT05fR0VOKSkgeworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UU0ZfQ09VTlQsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UQkNOLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfQkVBQ09OX0dFTiwgMSk7CiAJCS8qCiAJCSAqIEJlYWNvbiBnZW5lcmF0aW9uIHdpbGwgZmFpbCBpbml0aWFsbHkuCkBAIC0xMTEwLDQyICsxMTIyLDY4IEBACiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCi1zdGF0aWMgdm9pZCBydDI1MDB1c2JfZmlsbF9yeGRvbmUoc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5LAotCQkJCSAgc3RydWN0IHJ4ZGF0YV9lbnRyeV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgcnQyNTAwdXNiX2ZpbGxfcnhkb25lKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlzdHJ1Y3Qgc2tiX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2Rlc2MoZW50cnktPnNrYik7Ci0Jc3RydWN0IHVyYiAqdXJiID0gZW50cnktPnByaXY7Ci0JX19sZTMyICpyeGQgPSAoX19sZTMyICopKGVudHJ5LT5za2ItPmRhdGEgKwotCQkJCSAodXJiLT5hY3R1YWxfbGVuZ3RoIC0gZW50cnktPnJpbmctPmRlc2Nfc2l6ZSkpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOworCV9fbGUzMiAqcnhkID0KKwkgICAgKF9fbGUzMiAqKShlbnRyeS0+c2tiLT5kYXRhICsKKwkJICAgICAgIChwcml2X3J4LT51cmItPmFjdHVhbF9sZW5ndGggLSBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSkpOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSArIDI7CiAJdTMyIHdvcmQwOwogCXUzMiB3b3JkMTsKIAorCS8qCisJICogQ29weSBkZXNjcmlwdG9yIHRvIHRoZSBhdmFpbGFibGUgaGVhZHJvb20gaW5zaWRlIHRoZSBza2J1ZmZlci4KKwkgKi8KKwlza2JfcHVzaChlbnRyeS0+c2tiLCBvZmZzZXQpOworCW1lbWNweShlbnRyeS0+c2tiLT5kYXRhLCByeGQsIGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplKTsKKwlyeGQgPSAoX19sZTMyICopZW50cnktPnNrYi0+ZGF0YTsKKworCS8qCisJICogVGhlIGRlc2NyaXB0b3IgaXMgbm93IGFsaWduZWQgdG8gNCBieXRlcyBhbmQgdGh1cyBpdCBpcworCSAqIG5vdyBzYWZlIHRvIHJlYWQgaXQgb24gYWxsIGFyY2hpdGVjdHVyZXMuCisJICovCiAJcnQyeDAwX2Rlc2NfcmVhZChyeGQsIDAsICZ3b3JkMCk7CiAJcnQyeDAwX2Rlc2NfcmVhZChyeGQsIDEsICZ3b3JkMSk7CiAKLQlkZXNjLT5mbGFncyA9IDA7CisJcnhkZXNjLT5mbGFncyA9IDA7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0NSQ19FUlJPUikpCi0JCWRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CisJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfUEhZU0lDQUxfRVJST1IpKQotCQlkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKKwkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKIAogCS8qCiAJICogT2J0YWluIHRoZSBzdGF0dXMgYWJvdXQgdGhpcyBwYWNrZXQuCisJICogV2hlbiBmcmFtZSB3YXMgcmVjZWl2ZWQgd2l0aCBhbiBPRkRNIGJpdHJhdGUsCisJICogdGhlIHNpZ25hbCBpcyB0aGUgUExDUCB2YWx1ZS4gSWYgaXQgd2FzIHJlY2VpdmVkIHdpdGgKKwkgKiBhIENDSyBiaXRyYXRlIHRoZSBzaWduYWwgaXMgdGhlIHJhdGUgaW4gMTAwa2JpdC9zLgogCSAqLwotCWRlc2MtPnNpZ25hbCA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMSwgUlhEX1cxX1NJR05BTCk7Ci0JZGVzYy0+cnNzaSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMSwgUlhEX1cxX1JTU0kpIC0KLQkgICAgZW50cnktPnJpbmctPnJ0MngwMGRldi0+cnNzaV9vZmZzZXQ7Ci0JZGVzYy0+b2ZkbSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX09GRE0pOwotCWRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7Ci0JZGVzYy0+bXlfYnNzID0gISFydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9NWV9CU1MpOworCXJ4ZGVzYy0+c2lnbmFsID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQxLCBSWERfVzFfU0lHTkFMKTsKKwlyeGRlc2MtPnJzc2kgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDEsIFJYRF9XMV9SU1NJKSAtCisJICAgIGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5yc3NpX29mZnNldDsKKwlyeGRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7CisKKwlyeGRlc2MtPmRldl9mbGFncyA9IDA7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX09GRE0pKQorCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfU0lHTkFMX1BMQ1A7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX01ZX0JTUykpCisJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9NWV9CU1M7CisKKwkvKgorCSAqIEFkanVzdCB0aGUgc2tiIG1lbW9yeSB3aW5kb3cgdG8gdGhlIGZyYW1lIGJvdW5kYXJpZXMuCisJICovCisJc2tiX3B1bGwoZW50cnktPnNrYiwgb2Zmc2V0KTsKKwlza2JfdHJpbShlbnRyeS0+c2tiLCByeGRlc2MtPnNpemUpOwogCiAJLyoKIAkgKiBTZXQgZGVzY3JpcHRvciBhbmQgZGF0YSBwb2ludGVyLgogCSAqLwotCXNrYmRlc2MtPmRlc2MgPSBlbnRyeS0+c2tiLT5kYXRhICsgZGVzYy0+c2l6ZTsKLQlza2JkZXNjLT5kZXNjX2xlbiA9IGVudHJ5LT5yaW5nLT5kZXNjX3NpemU7CiAJc2tiZGVzYy0+ZGF0YSA9IGVudHJ5LT5za2ItPmRhdGE7Ci0Jc2tiZGVzYy0+ZGF0YV9sZW4gPSBkZXNjLT5zaXplOworCXNrYmRlc2MtPmRhdGFfbGVuID0gcnhkZXNjLT5zaXplOworCXNrYmRlc2MtPmRlc2MgPSByeGQ7CisJc2tiZGVzYy0+ZGVzY19sZW4gPSBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZTsKIH0KIAogLyoKQEAgLTExNTMsMTAgKzExOTEsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2JlYWNvbmRvbmUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSA9IChzdHJ1Y3QgZGF0YV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nID0gZW50cnktPnJpbmc7CisJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSA9IChzdHJ1Y3QgcXVldWVfZW50cnkgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqcHJpdl9iY24gPSBlbnRyeS0+cHJpdl9kYXRhOwogCi0JaWYgKCF0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJnJpbmctPnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICghdGVzdF9iaXQoREVWSUNFX0VOQUJMRURfUkFESU8sICZlbnRyeS0+cXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMTE2NSwxOCArMTIwMywxMSBAQAogCSAqIE90aGVyd2lzZSB3ZSBzaG91bGQgZnJlZSB0aGUgc2tfYnVmZmVyLCB0aGUgZGV2aWNlCiAJICogc2hvdWxkIGJlIGRvaW5nIHRoZSByZXN0IG9mIHRoZSB3b3JrIG5vdy4KIAkgKi8KLQlpZiAocmluZy0+aW5kZXggPT0gMSkgewotCQlydDJ4MDBfcmluZ19pbmRleF9kb25lX2luYyhyaW5nKTsKLQkJZW50cnkgPSBydDJ4MDBfZ2V0X2RhdGFfZW50cnkocmluZyk7Ci0JCXVzYl9zdWJtaXRfdXJiKGVudHJ5LT5wcml2LCBHRlBfQVRPTUlDKTsKLQkJcnQyeDAwX3JpbmdfaW5kZXhfaW5jKHJpbmcpOwotCX0gZWxzZSBpZiAocmluZy0+aW5kZXhfZG9uZSA9PSAxKSB7Ci0JCWVudHJ5ID0gcnQyeDAwX2dldF9kYXRhX2VudHJ5X2RvbmUocmluZyk7Ci0JCWlmIChlbnRyeS0+c2tiKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOwotCQkJZW50cnktPnNrYiA9IE5VTEw7Ci0JCX0KLQkJcnQyeDAwX3JpbmdfaW5kZXhfZG9uZV9pbmMocmluZyk7CisJaWYgKHByaXZfYmNuLT5ndWFyZGlhbl91cmIgPT0gdXJiKSB7CisJCXVzYl9zdWJtaXRfdXJiKHByaXZfYmNuLT51cmIsIEdGUF9BVE9NSUMpOworCX0gZWxzZSBpZiAocHJpdl9iY24tPnVyYiA9PSB1cmIpIHsKKwkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKKwkJZW50cnktPnNrYiA9IE5VTEw7CiAJfQogfQogCkBAIC0xMTg3LDYgKzEyMTgsNyBAQAogewogCXUxNiB3b3JkOwogCXU4ICptYWM7CisJdTggYmJwOwogCiAJcnQyeDAwdXNiX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgcnQyeDAwZGV2LT5lZXByb20sIEVFUFJPTV9TSVpFKTsKIApAQCAtMTI0MSw5ICsxMjczLDE3IEBACiAJCUVFUFJPTShydDJ4MDBkZXYsICJCQlB0dW5lOiAweCUwNHhcbiIsIHdvcmQpOwogCX0KIAorCS8qCisJICogU3dpdGNoIGxvd2VyIHZnYyBib3VuZCB0byBjdXJyZW50IEJCUCBSMTcgdmFsdWUsCisJICogbG93ZXIgdGhlIHZhbHVlIGEgYml0IGZvciBiZXR0ZXIgcXVhbGl0eS4KKwkgKi8KKwlydDI1MDB1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJmJicCk7CisJYmJwIC09IDY7CisKIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQkJQVFVORV9WR0MsICZ3b3JkKTsKIAlpZiAod29yZCA9PSAweGZmZmYpIHsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fQkJQVFVORV9WR0NVUFBFUiwgMHg0MCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX0JCUFRVTkVfVkdDTE9XRVIsIGJicCk7CiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fQkJQVFVORV9WR0MsIHdvcmQpOwogCQlFRVBST00ocnQyeDAwZGV2LCAiQkJQdHVuZSB2Z2M6IDB4JTA0eFxuIiwgd29yZCk7CiAJfQpAQCAtMTI1NCw2ICsxMjk0LDkgQEAKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fQkJQVFVORV9SMTdfSElHSCwgMHg0MSk7CiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fQkJQVFVORV9SMTcsIHdvcmQpOwogCQlFRVBST00ocnQyeDAwZGV2LCAiQkJQdHVuZSByMTc6IDB4JTA0eFxuIiwgd29yZCk7CisJfSBlbHNlIHsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fQkJQVFVORV9WR0NMT1dFUiwgYmJwKTsKKwkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9CQlBUVU5FX1ZHQywgd29yZCk7CiAJfQogCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0JCUFRVTkVfUjI0LCAmd29yZCk7CkBAIC0xMzM4LDggKzEzODEsMjcgQEAKIAkvKgogCSAqIFN0b3JlIGxlZCBtb2RlLCBmb3IgY29ycmVjdCBsZWQgYmVoYXZpb3VyLgogCSAqLwotCXJ0MngwMGRldi0+bGVkX21vZGUgPQotCSAgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9MRURfTU9ERSk7CisjaWZkZWYgQ09ORklHX1JUMjUwMFVTQl9MRURTCisJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9MRURfTU9ERSk7CisKKwlydDJ4MDBkZXYtPmxlZF9yYWRpby5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8udHlwZSA9IExFRF9UWVBFX1JBRElPOworCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQorCSAgICBydDI1MDB1c2JfYnJpZ2h0bmVzc19zZXQ7CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldi5ibGlua19zZXQgPQorCSAgICBydDI1MDB1c2JfYmxpbmtfc2V0OworCXJ0MngwMGRldi0+bGVkX3JhZGlvLmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpIHsKKwkJcnQyeDAwZGV2LT5sZWRfcXVhbC5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJCXJ0MngwMGRldi0+bGVkX3JhZGlvLnR5cGUgPSBMRURfVFlQRV9BQ1RJVklUWTsKKwkJcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0KKwkJICAgIHJ0MjUwMHVzYl9icmlnaHRuZXNzX3NldDsKKwkJcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2LmJsaW5rX3NldCA9CisJCSAgICBydDI1MDB1c2JfYmxpbmtfc2V0OworCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworCX0KKyNlbmRpZiAvKiBDT05GSUdfUlQyNTAwVVNCX0xFRFMgKi8KIAogCS8qCiAJICogQ2hlY2sgaWYgdGhlIEJCUCB0dW5pbmcgc2hvdWxkIGJlIGRpc2FibGVkLgpAQCAtMTU0Niw4ICsxNjA4LDggQEAKIAkvKgogCSAqIEluaXRpYWxpemUgaHdfbW9kZSBpbmZvcm1hdGlvbi4KIAkgKi8KLQlzcGVjLT5udW1fbW9kZXMgPSAyOwotCXNwZWMtPm51bV9yYXRlcyA9IDEyOworCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyA9IFNVUFBPUlRfQkFORF8yR0haOworCXNwZWMtPnN1cHBvcnRlZF9yYXRlcyA9IFNVUFBPUlRfUkFURV9DQ0sgfCBTVVBQT1JUX1JBVEVfT0ZETTsKIAlzcGVjLT50eF9wb3dlcl9hID0gTlVMTDsKIAlzcGVjLT50eF9wb3dlcl9iZyA9IHR4cG93ZXI7CiAJc3BlYy0+dHhfcG93ZXJfZGVmYXVsdCA9IERFRkFVTFRfVFhQT1dFUjsKQEAgLTE1NjgsOSArMTYzMCw5IEBACiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI1ZSk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTI1ZTsKIAl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjIpKSB7CisJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzUyMjIpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfNTIyMjsKLQkJc3BlYy0+bnVtX21vZGVzID0gMzsKIAl9CiB9CiAKQEAgLTE1OTUsOSArMTY1NywxMSBAQAogCXJ0MjUwMHVzYl9wcm9iZV9od19tb2RlKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIHRoZSBiZWFjb24gcmluZworCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIHRoZSBhdGltIHF1ZXVlCiAJICovCi0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9SSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKIAkgKiBTZXQgdGhlIHJzc2kgb2Zmc2V0LgpAQCAtMTYxMCwxMjUgKzE2NzQsNTggQEAKIC8qCiAgKiBJRUVFODAyMTEgc3RhY2sgY2FsbGJhY2sgZnVuY3Rpb25zLgogICovCi1zdGF0aWMgdm9pZCBydDI1MDB1c2JfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgICAgIGludCBtY19jb3VudCwKLQkJCQkgICAgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXUxNiByZWc7Ci0KLQkvKgotCSAqIE1hc2sgb2ZmIGFueSBmbGFncyB3ZSBhcmUgZ29pbmcgdG8gaWdub3JlIGZyb20KLQkgKiB0aGUgdG90YWxfZmxhZ3MgZmllbGQuCi0JICovCi0JKnRvdGFsX2ZsYWdzICY9Ci0JICAgIEZJRl9BTExNVUxUSSB8Ci0JICAgIEZJRl9GQ1NGQUlMIHwKLQkgICAgRklGX1BMQ1BGQUlMIHwKLQkgICAgRklGX0NPTlRST0wgfAotCSAgICBGSUZfT1RIRVJfQlNTIHwKLQkgICAgRklGX1BST01JU0NfSU5fQlNTOwotCi0JLyoKLQkgKiBBcHBseSBzb21lIHJ1bGVzIHRvIHRoZSBmaWx0ZXJzOgotCSAqIC0gU29tZSBmaWx0ZXJzIGltcGx5IGRpZmZlcmVudCBmaWx0ZXJzIHRvIGJlIHNldC4KLQkgKiAtIFNvbWUgdGhpbmdzIHdlIGNhbid0IGZpbHRlciBvdXQgYXQgYWxsLgotCSAqLwotCWlmIChtY19jb3VudCkKLQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9BTExNVUxUSTsKLQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX09USEVSX0JTUyB8fAotCSAgICAqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCi0JCSp0b3RhbF9mbGFncyB8PSBGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgd29yayBsZWZ0IGZvciB1cy4KLQkgKi8KLQlpZiAocnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyID09ICp0b3RhbF9mbGFncykKLQkJcmV0dXJuOwotCXJ0MngwMGRldi0+cGFja2V0X2ZpbHRlciA9ICp0b3RhbF9mbGFnczsKLQotCS8qCi0JICogV2hlbiBpbiBhdG9taWMgY29udGV4dCwgcmVzY2hlZHVsZSBhbmQgbGV0IHJ0MngwMGxpYgotCSAqIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4KLQkgKi8KLQlpZiAoaW5fYXRvbWljKCkpIHsKLQkJcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPmZpbHRlcl93b3JrKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogU3RhcnQgY29uZmlndXJhdGlvbiBzdGVwcy4KLQkgKiBOb3RlIHRoYXQgdGhlIHZlcnNpb24gZXJyb3Igd2lsbCBhbHdheXMgYmUgZHJvcHBlZAotCSAqIGFuZCBicm9hZGNhc3QgZnJhbWVzIHdpbGwgYWx3YXlzIGJlIGFjY2VwdGVkIHNpbmNlCi0JICogdGhlcmUgaXMgbm8gZmlsdGVyIGZvciBpdCBhdCB0aGlzIHRpbWUuCi0JICovCi0JcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjIsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjJfRFJPUF9DUkMsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9GQ1NGQUlMKSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMl9EUk9QX1BIWVNJQ0FMLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfUExDUEZBSUwpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyX0RST1BfQ09OVFJPTCwKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyX0RST1BfTk9UX1RPX01FLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyX0RST1BfVE9EUywKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMl9EUk9QX1ZFUlNJT05fRVJST1IsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjJfRFJPUF9NVUxUSUNBU1QsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjJfRFJPUF9CUk9BRENBU1QsIDApOwotCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMiwgcmVnKTsKLX0KLQogc3RhdGljIGludCBydDI1MDB1c2JfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPQotCSAgICBpbnRlcmZhY2VfdG9fdXNiZGV2KHJ0MngwMGRldl91c2IocnQyeDAwZGV2KSk7Ci0Jc3RydWN0IHNrYl9kZXNjICpkZXNjOwotCXN0cnVjdCBkYXRhX3JpbmcgKnJpbmc7Ci0Jc3RydWN0IGRhdGFfZW50cnkgKmJlYWNvbjsKLQlzdHJ1Y3QgZGF0YV9lbnRyeSAqZ3VhcmRpYW47CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBydDJ4MDBkZXZfdXNiX2RldihydDJ4MDBkZXYpOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKGNvbnRyb2wtPnZpZik7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqcHJpdl9iY247CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOwogCWludCBwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsIDEpOwogCWludCBsZW5ndGg7CisJdTE2IHJlZzsKIAotCS8qCi0JICogSnVzdCBpbiBjYXNlIHRoZSBpZWVlODAyMTEgZG9lc24ndCBzZXQgdGhpcywKLQkgKiBidXQgd2UgbmVlZCB0aGlzIHF1ZXVlIHNldCBmb3IgdGhlIGRlc2NyaXB0b3IKLQkgKiBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQljb250cm9sLT5xdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT047Ci0JcmluZyA9IHJ0MngwMGxpYl9nZXRfcmluZyhydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKKwlpZiAodW5saWtlbHkoIWludGYtPmJlYWNvbikpCisJCXJldHVybiAtRU5PQlVGUzsKIAotCS8qCi0JICogT2J0YWluIDIgZW50cmllcywgb25lIGZvciB0aGUgZ3VhcmRpYW4gYnl0ZSwKLQkgKiB0aGUgc2Vjb25kIGZvciB0aGUgYWN0dWFsIGJlYWNvbi4KLQkgKi8KLQlndWFyZGlhbiA9IHJ0MngwMF9nZXRfZGF0YV9lbnRyeShyaW5nKTsKLQlydDJ4MDBfcmluZ19pbmRleF9pbmMocmluZyk7Ci0JYmVhY29uID0gcnQyeDAwX2dldF9kYXRhX2VudHJ5KHJpbmcpOworCXByaXZfYmNuID0gaW50Zi0+YmVhY29uLT5wcml2X2RhdGE7CiAKIAkvKgogCSAqIEFkZCB0aGUgZGVzY3JpcHRvciBpbiBmcm9udCBvZiB0aGUgc2tiLgogCSAqLwotCXNrYl9wdXNoKHNrYiwgcmluZy0+ZGVzY19zaXplKTsKLQltZW1zZXQoc2tiLT5kYXRhLCAwLCByaW5nLT5kZXNjX3NpemUpOworCXNrYl9wdXNoKHNrYiwgaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplKTsKKwltZW1zZXQoc2tiLT5kYXRhLCAwLCBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemUpOwogCiAJLyoKIAkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCiAJICovCi0JZGVzYyA9IGdldF9za2JfZGVzYyhza2IpOwotCWRlc2MtPmRlc2NfbGVuID0gcmluZy0+ZGVzY19zaXplOwotCWRlc2MtPmRhdGFfbGVuID0gc2tiLT5sZW4gLSByaW5nLT5kZXNjX3NpemU7Ci0JZGVzYy0+ZGVzYyA9IHNrYi0+ZGF0YTsKLQlkZXNjLT5kYXRhID0gc2tiLT5kYXRhICsgcmluZy0+ZGVzY19zaXplOwotCWRlc2MtPnJpbmcgPSByaW5nOwotCWRlc2MtPmVudHJ5ID0gYmVhY29uOworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CisJc2tiZGVzYy0+ZmxhZ3MgfD0gRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOworCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGEgKyBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemU7CisJc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbiAtIGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKKwlza2JkZXNjLT5kZXNjID0gc2tiLT5kYXRhOworCXNrYmRlc2MtPmRlc2NfbGVuID0gaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOworCXNrYmRlc2MtPmVudHJ5ID0gaW50Zi0+YmVhY29uOwogCisJLyoKKwkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKKwkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgorCSAqLworCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVFNGX0NPVU5ULCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UQkNOLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9CRUFDT05fR0VOLCAwKTsKKwlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCByZWcpOworCisJLyoKKwkgKiBtYWM4MDIxMSBkb2Vzbid0IHByb3ZpZGUgdGhlIGNvbnRyb2wtPnF1ZXVlIHZhcmlhYmxlCisJICogZm9yIGJlYWNvbnMuIFNldCBvdXIgb3duIHF1ZXVlIGlkZW50aWZpY2F0aW9uIHNvCisJICogaXQgY2FuIGJlIHVzZWQgZHVyaW5nIGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24uCisJICovCisJY29udHJvbC0+cXVldWUgPSBSVDJYMDBfQkNOX1FVRVVFX0JFQUNPTjsKIAlydDJ4MDBsaWJfd3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIHNrYiwgY29udHJvbCk7CiAKIAkvKgpAQCAtMTczOCwyNyArMTczNSwyOSBAQAogCSAqLwogCWxlbmd0aCA9IHJ0MjUwMHVzYl9nZXRfdHhfZGF0YV9sZW4ocnQyeDAwZGV2LCBza2IpOwogCi0JdXNiX2ZpbGxfYnVsa191cmIoYmVhY29uLT5wcml2LCB1c2JfZGV2LCBwaXBlLAotCQkJICBza2ItPmRhdGEsIGxlbmd0aCwgcnQyNTAwdXNiX2JlYWNvbmRvbmUsIGJlYWNvbik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdl9iY24tPnVyYiwgdXNiX2RldiwgcGlwZSwKKwkJCSAgc2tiLT5kYXRhLCBsZW5ndGgsIHJ0MjUwMHVzYl9iZWFjb25kb25lLAorCQkJICBpbnRmLT5iZWFjb24pOwogCiAJLyoKIAkgKiBTZWNvbmQgd2UgbmVlZCB0byBjcmVhdGUgdGhlIGd1YXJkaWFuIGJ5dGUuCiAJICogV2Ugb25seSBuZWVkIGEgc2luZ2xlIGJ5dGUsIHNvIGxldHMgcmVjeWNsZQogCSAqIHRoZSAnZmxhZ3MnIGZpZWxkIHdlIGFyZSBub3QgdXNpbmcgZm9yIGJlYWNvbnMuCiAJICovCi0JZ3VhcmRpYW4tPmZsYWdzID0gMDsKLQl1c2JfZmlsbF9idWxrX3VyYihndWFyZGlhbi0+cHJpdiwgdXNiX2RldiwgcGlwZSwKLQkJCSAgJmd1YXJkaWFuLT5mbGFncywgMSwgcnQyNTAwdXNiX2JlYWNvbmRvbmUsIGd1YXJkaWFuKTsKKwlwcml2X2Jjbi0+Z3VhcmRpYW5fZGF0YSA9IDA7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdl9iY24tPmd1YXJkaWFuX3VyYiwgdXNiX2RldiwgcGlwZSwKKwkJCSAgJnByaXZfYmNuLT5ndWFyZGlhbl9kYXRhLCAxLCBydDI1MDB1c2JfYmVhY29uZG9uZSwKKwkJCSAgaW50Zi0+YmVhY29uKTsKIAogCS8qCiAJICogU2VuZCBvdXQgdGhlIGd1YXJkaWFuIGJ5dGUuCiAJICovCi0JdXNiX3N1Ym1pdF91cmIoZ3VhcmRpYW4tPnByaXYsIEdGUF9BVE9NSUMpOworCXVzYl9zdWJtaXRfdXJiKHByaXZfYmNuLT5ndWFyZGlhbl91cmIsIEdGUF9BVE9NSUMpOwogCiAJLyoKIAkgKiBFbmFibGUgYmVhY29uIGdlbmVyYXRpb24uCiAJICovCi0JcnQyNTAwdXNiX2tpY2tfdHhfcXVldWUocnQyeDAwZGV2LCBJRUVFODAyMTFfVFhfUVVFVUVfQkVBQ09OKTsKKwlydDI1MDB1c2Jfa2lja190eF9xdWV1ZShydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc3MSw3ICsxNzcwLDcgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCiAJLmNvbmZpZ19pbnRlcmZhY2UJPSBydDJ4MDBtYWNfY29uZmlnX2ludGVyZmFjZSwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MjUwMHVzYl9jb25maWd1cmVfZmlsdGVyLAorCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCkBAIC0xNzk0LDE5ICsxNzkzLDUwIEBACiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0MjUwMHVzYl9nZXRfdHhfZGF0YV9sZW4sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNTAwdXNiX2tpY2tfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjUwMHVzYl9maWxsX3J4ZG9uZSwKLQkuY29uZmlnX21hY19hZGRyCT0gcnQyNTAwdXNiX2NvbmZpZ19tYWNfYWRkciwKLQkuY29uZmlnX2Jzc2lkCQk9IHJ0MjUwMHVzYl9jb25maWdfYnNzaWQsCi0JLmNvbmZpZ190eXBlCQk9IHJ0MjUwMHVzYl9jb25maWdfdHlwZSwKLQkuY29uZmlnX3ByZWFtYmxlCT0gcnQyNTAwdXNiX2NvbmZpZ19wcmVhbWJsZSwKKwkuY29uZmlnX2ZpbHRlcgkJPSBydDI1MDB1c2JfY29uZmlnX2ZpbHRlciwKKwkuY29uZmlnX2ludGYJCT0gcnQyNTAwdXNiX2NvbmZpZ19pbnRmLAorCS5jb25maWdfZXJwCQk9IHJ0MjUwMHVzYl9jb25maWdfZXJwLAogCS5jb25maWcJCQk9IHJ0MjUwMHVzYl9jb25maWcsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDB1c2JfcXVldWVfcnggPSB7CisJLmVudHJ5X251bQkJPSBSWF9FTlRSSUVTLAorCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAorCS5kZXNjX3NpemUJCT0gUlhEX0RFU0NfU0laRSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfcngpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNTAwdXNiX3F1ZXVlX3R4ID0geworCS5lbnRyeV9udW0JCT0gVFhfRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0MjUwMHVzYl9xdWV1ZV9iY24gPSB7CisJLmVudHJ5X251bQkJPSBCRUFDT05fRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IE1HTVRfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDB1c2JfcXVldWVfYXRpbSA9IHsKKwkuZW50cnlfbnVtCQk9IEFUSU1fRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4KSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyBydDI1MDB1c2Jfb3BzID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAotCS5yeGRfc2l6ZQk9IFJYRF9ERVNDX1NJWkUsCi0JLnR4ZF9zaXplCT0gVFhEX0RFU0NfU0laRSwKKwkubWF4X3N0YV9pbnRmCT0gMSwKKwkubWF4X2FwX2ludGYJPSAxLAogCS5lZXByb21fc2l6ZQk9IEVFUFJPTV9TSVpFLAogCS5yZl9zaXplCT0gUkZfU0laRSwKKwkucngJCT0gJnJ0MjUwMHVzYl9xdWV1ZV9yeCwKKwkudHgJCT0gJnJ0MjUwMHVzYl9xdWV1ZV90eCwKKwkuYmNuCQk9ICZydDI1MDB1c2JfcXVldWVfYmNuLAorCS5hdGltCQk9ICZydDI1MDB1c2JfcXVldWVfYXRpbSwKIAkubGliCQk9ICZydDI1MDB1c2JfcnQyeDAwX29wcywKIAkuaHcJCT0gJnJ0MjUwMHVzYl9tYWM4MDIxMV9vcHMsCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUwpAQCAtMTgzOSwxMSArMTg2OSwxMSBAQAogCS8qIEhlcmN1bGVzICovCiAJeyBVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDAwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAogCS8qIE1lbGNvICovCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDVlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA2NiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwNjcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDhiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA5NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQogCS8qIE1TSSAqLwogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg2MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NjUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKaW5kZXggOWUwNDMzNy4uYTM3YTA2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEzNSw3ICsxMzUsNyBAQAogICogTWlzYyBNQUNfQ1NSIHJlZ2lzdGVycy4KICAqIE1BQ19DU1I5OiBUaW1lciBjb250cm9sLgogICogTUFDX0NTUjEwOiBTbG90IHRpbWUuCi0gKiBNQUNfQ1NSMTE6IElGUy4KKyAqIE1BQ19DU1IxMTogU0lGUy4KICAqIE1BQ19DU1IxMjogRUlGUy4KICAqIE1BQ19DU1IxMzogUG93ZXIgbW9kZTAuCiAgKiBNQUNfQ1NSMTQ6IFBvd2VyIG1vZGUxLgpAQCAtNjg2LDYgKzY4Niw3IEBACiAgKi8KICNkZWZpbmUgRUVQUk9NX0JCUFRVTkVfVkdDCQkweDAwMzQKICNkZWZpbmUgRUVQUk9NX0JCUFRVTkVfVkdDVVBQRVIJCUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fQkJQVFVORV9WR0NMT1dFUgkJRklFTEQxNigweGZmMDApCiAKIC8qCiAgKiBFRVBST00gQkJQIFIxNyBUdW5pbmcuCkBAIC03ODYsOCArNzg3LDggQEAKICNkZWZpbmUgUlhEX1czX0VJVgkJCUZJRUxEMzIoMHhmZmZmZmZmZikKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBkc2NhcGUgdmFsdWUKLSAqIGFuZCBmcm9tIGRzY2FwZSB2YWx1ZSB0byByZWdpc3RlciB2YWx1ZS4KKyAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKi8KICNkZWZpbmUgTUlOX1RYUE9XRVIJMAogI2RlZmluZSBNQVhfVFhQT1dFUgkzMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCmluZGV4IDA1OTI3YjkuLjU3YmRjMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNywyMyArMjcsMjQgQEAKICNkZWZpbmUgUlQyWDAwX0gKIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJydDJ4MDBkZWJ1Zy5oIgorI2luY2x1ZGUgInJ0MngwMGxlZHMuaCIKICNpbmNsdWRlICJydDJ4MDByZWcuaCIKLSNpbmNsdWRlICJydDJ4MDByaW5nLmgiCisjaW5jbHVkZSAicnQyeDAwcXVldWUuaCIKIAogLyoKICAqIE1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wLjE0IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4xLjQiCiAjZGVmaW5lIERSVl9QUk9KRUNUCSJodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20iCiAKIC8qCkBAIC05MSwyNiArOTIsNiBAQAogCURFQlVHX1BSSU5USyhfX2RldiwgS0VSTl9ERUJVRywgIkVFUFJPTSByZWNvdmVyeSIsIF9fbXNnLCAjI19fYXJncykKIAogLyoKLSAqIFJpbmcgc2l6ZXMuCi0gKiBSYWxpbmsgUENJIGRldmljZXMgZGVtYW5kIHRoZSBGcmFtZSBzaXplIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTI4IGJ5dGVzLgotICogREFUQV9GUkFNRV9TSVpFIGlzIHVzZWQgZm9yIFRYLCBSWCwgQVRJTSBhbmQgUFJJTyByaW5ncy4KLSAqIE1HTVRfRlJBTUVfU0laRSBpcyB1c2VkIGZvciB0aGUgQkVBQ09OIHJpbmcuCi0gKi8KLSNkZWZpbmUgREFUQV9GUkFNRV9TSVpFCTI0MzIKLSNkZWZpbmUgTUdNVF9GUkFNRV9TSVpFCTI1NgotCi0vKgotICogTnVtYmVyIG9mIGVudHJpZXMgaW4gYSBwYWNrZXQgcmluZy4KLSAqIFBDSSBkZXZpY2VzIG9ubHkgbmVlZCAxIEJlYWNvbiBlbnRyeSwKLSAqIGJ1dCBVU0IgZGV2aWNlcyByZXF1aXJlIGEgc2Vjb25kIGJlY2F1c2UgdGhleQotICogaGF2ZSB0byBzZW5kIGEgR3VhcmRpYW4gYnl0ZSBmaXJzdC4KLSAqLwotI2RlZmluZSBSWF9FTlRSSUVTCTEyCi0jZGVmaW5lIFRYX0VOVFJJRVMJMTIKLSNkZWZpbmUgQVRJTV9FTlRSSUVTCTEKLSNkZWZpbmUgQkVBQ09OX0VOVFJJRVMJMgotCi0vKgogICogU3RhbmRhcmQgdGltaW5nIGFuZCBzaXplIGRlZmluZXMuCiAgKiBUaGVzZSB2YWx1ZXMgc2hvdWxkIGZvbGxvdyB0aGUgaWVlZTgwMjExIHNwZWNpZmljYXRpb25zLgogICovCkBAIC0zNjQsMjAgKzM0NSwyMiBAQAogCiAvKgogICogSW50ZXJmYWNlIHN0cnVjdHVyZQotICogQ29uZmlndXJhdGlvbiBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50IGludGVyZmFjZS4KKyAqIFBlciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBkZXRhaWxzLCB0aGlzIHN0cnVjdHVyZQorICogaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgZm9yIGllZWU4MDIxMV92aWYuCiAgKi8KLXN0cnVjdCBpbnRlcmZhY2Ugeworc3RydWN0IHJ0MngwMF9pbnRmIHsKIAkvKgotCSAqIEludGVyZmFjZSBpZGVudGlmaWNhdGlvbi4gVGhlIHZhbHVlIGlzIGFzc2lnbmVkCi0JICogdG8gdXMgYnkgdGhlIDgwMjExIHN0YWNrLCBhbmQgaXMgdXNlZCB0byByZXF1ZXN0Ci0JICogbmV3IGJlYWNvbnMuCisJICogQWxsIGZpZWxkcyB3aXRoaW4gdGhlIHJ0MngwMF9pbnRmIHN0cnVjdHVyZQorCSAqIG11c3QgYmUgcHJvdGVjdGVkIHdpdGggYSBzcGlubG9jay4KIAkgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqaWQ7CisJc3BpbmxvY2tfdCBsb2NrOwogCiAJLyoKLQkgKiBDdXJyZW50IHdvcmtpbmcgdHlwZSAoSUVFRTgwMjExX0lGX1RZUEVfKikuCisJICogQlNTIGNvbmZpZ3VyYXRpb24uIENvcGllZCBmcm9tIHRoZSBzdHJ1Y3R1cmUKKwkgKiBwYXNzZWQgdG8gdXMgdGhyb3VnaCB0aGUgYnNzX2luZm9fY2hhbmdlZCgpCisJICogY2FsbGJhY2sgZnVudGlvbi4KIAkgKi8KLQlpbnQgdHlwZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGNvbmY7CiAKIAkvKgogCSAqIE1BQyBvZiB0aGUgZGV2aWNlLgpAQCAtMzg4LDQyICszNzEsNjAgQEAKIAkgKiBCQlNJRCBvZiB0aGUgQVAgdG8gYXNzb2NpYXRlIHdpdGguCiAJICovCiAJdTggYnNzaWRbRVRIX0FMRU5dOworCisJLyoKKwkgKiBFbnRyeSBpbiB0aGUgYmVhY29uIHF1ZXVlIHdoaWNoIGJlbG9uZ3MgdG8KKwkgKiB0aGlzIGludGVyZmFjZS4gRWFjaCBpbnRlcmZhY2UgaGFzIGl0cyBvd24KKwkgKiBkZWRpY2F0ZWQgYmVhY29uIGVudHJ5LgorCSAqLworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqYmVhY29uOworCisJLyoKKwkgKiBBY3Rpb25zIHRoYXQgbmVlZGVkIHJlc2NoZWR1bGluZy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgZGVsYXllZF9mbGFnczsKKyNkZWZpbmUgREVMQVlFRF9VUERBVEVfQkVBQ09OCQkweDAwMDAwMDAxCisjZGVmaW5lIERFTEFZRURfQ09ORklHX0VSUAkJMHgwMDAwMDAwMgorI2RlZmluZSBERUxBWUVEX0xFRF9BU1NPQwkJMHgwMDAwMDAwNAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgaXNfaW50ZXJmYWNlX3ByZXNlbnQoc3RydWN0IGludGVyZmFjZSAqaW50ZikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0MngwMF9pbnRmKiB2aWZfdG9faW50ZihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXJldHVybiAhIWludGYtPmlkOworCXJldHVybiAoc3RydWN0IHJ0MngwMF9pbnRmICopdmlmLT5kcnZfcHJpdjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXNfaW50ZXJmYWNlX3R5cGUoc3RydWN0IGludGVyZmFjZSAqaW50ZiwgaW50IHR5cGUpCi17Ci0JcmV0dXJuIGludGYtPnR5cGUgPT0gdHlwZTsKLX0KLQotLyoKKy8qKgorICogc3RydWN0IGh3X21vZGVfc3BlYzogSGFyZHdhcmUgc3BlY2lmaWNhdGlvbnMgc3RydWN0dXJlCisgKgogICogRGV0YWlscyBhYm91dCB0aGUgc3VwcG9ydGVkIG1vZGVzLCByYXRlcyBhbmQgY2hhbm5lbHMKICAqIG9mIGEgcGFydGljdWxhciBjaGlwc2V0LiBUaGlzIGlzIHVzZWQgYnkgcnQyeDAwbGliCiAgKiB0byBidWlsZCB0aGUgaWVlZTgwMjExX2h3X21vZGUgYXJyYXkgZm9yIG1hYzgwMjExLgorICoKKyAqIEBzdXBwb3J0ZWRfYmFuZHM6IEJpdG1hc2sgY29udGFpbmVkIHRoZSBzdXBwb3J0ZWQgYmFuZHMgKDIuNEdIeiwgNS4yR0h6KS4KKyAqIEBzdXBwb3J0ZWRfcmF0ZXM6IFJhdGUgdHlwZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCAoQ0NLLCBPRkRNKS4KKyAqIEBudW1fY2hhbm5lbHM6IE51bWJlciBvZiBzdXBwb3J0ZWQgY2hhbm5lbHMuIFRoaXMgaXMgdXNlZCBhcyBhcnJheSBzaXplCisgKglmb3IgQHR4X3Bvd2VyX2EsIEB0eF9wb3dlcl9iZyBhbmQgQGNoYW5uZWxzLgorICogY2hhbm5lbHM6IERldmljZS9jaGlwc2V0IHNwZWNpZmljIGNoYW5uZWwgdmFsdWVzIChTZWUgJnN0cnVjdCByZl9jaGFubmVsKS4KKyAqIEB0eF9wb3dlcl9hOiBUWCBwb3dlciB2YWx1ZXMgZm9yIGFsbCA1LjJHSHogY2hhbm5lbHMgKG1heSBiZSBOVUxMKS4KKyAqIEB0eF9wb3dlcl9iZzogVFggcG93ZXIgdmFsdWVzIGZvciBhbGwgMi40R0h6IGNoYW5uZWxzIChtYXkgYmUgTlVMTCkuCisgKiBAdHhfcG93ZXJfZGVmYXVsdDogRGVmYXVsdCBUWCBwb3dlciB2YWx1ZSB0byB1c2Ugd2hlbiBlaXRoZXIKKyAqCUB0eF9wb3dlcl9hIG9yIEB0eF9wb3dlcl9iZyBpcyBtaXNzaW5nLgogICovCiBzdHJ1Y3QgaHdfbW9kZV9zcGVjIHsKLQkvKgotCSAqIE51bWJlciBvZiBtb2RlcywgcmF0ZXMgYW5kIGNoYW5uZWxzLgotCSAqLwotCWludCBudW1fbW9kZXM7Ci0JaW50IG51bV9yYXRlczsKLQlpbnQgbnVtX2NoYW5uZWxzOworCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfYmFuZHM7CisjZGVmaW5lIFNVUFBPUlRfQkFORF8yR0haCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1VQUE9SVF9CQU5EXzVHSFoJMHgwMDAwMDAwMgogCi0JLyoKLQkgKiB0eHBvd2VyIHZhbHVlcy4KLQkgKi8KKwl1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX3JhdGVzOworI2RlZmluZSBTVVBQT1JUX1JBVEVfQ0NLCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1VQUE9SVF9SQVRFX09GRE0JMHgwMDAwMDAwMgorCisJdW5zaWduZWQgaW50IG51bV9jaGFubmVsczsKKwljb25zdCBzdHJ1Y3QgcmZfY2hhbm5lbCAqY2hhbm5lbHM7CisKIAljb25zdCB1OCAqdHhfcG93ZXJfYTsKIAljb25zdCB1OCAqdHhfcG93ZXJfYmc7CiAJdTggdHhfcG93ZXJfZGVmYXVsdDsKLQotCS8qCi0JICogRGV2aWNlL2NoaXBzZXQgc3BlY2lmaWMgdmFsdWUuCi0JICovCi0JY29uc3Qgc3RydWN0IHJmX2NoYW5uZWwgKmNoYW5uZWxzOwogfTsKIAogLyoKQEAgLTQzOSwxMCArNDQwLDEwIEBACiAKIAlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBhbnQ7CiAKLQlpbnQgcGh5bW9kZTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKLQlpbnQgYmFzaWNfcmF0ZXM7Ci0JaW50IHNsb3RfdGltZTsKKwl1MzIgYmFzaWNfcmF0ZXM7CisJdTMyIHNsb3RfdGltZTsKIAogCXNob3J0IHNpZnM7CiAJc2hvcnQgcGlmczsKQEAgLTQ1MSw2ICs0NTIsNDcgQEAKIH07CiAKIC8qCisgKiBDb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgZXJwIHNldHRpbmdzLgorICovCitzdHJ1Y3QgcnQyeDAwbGliX2VycCB7CisJaW50IHNob3J0X3ByZWFtYmxlOworCisJaW50IGFja190aW1lb3V0OworCWludCBhY2tfY29uc3VtZV90aW1lOworfTsKKworLyoKKyAqIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHdyYXBwZXIgYXJvdW5kIHRoZQorICogcnQyeDAwIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGhhbmRsZXIuCisgKi8KK3N0cnVjdCBydDJ4MDBpbnRmX2NvbmYgeworCS8qCisJICogSW50ZXJmYWNlIHR5cGUKKwkgKi8KKwllbnVtIGllZWU4MDIxMV9pZl90eXBlcyB0eXBlOworCisJLyoKKwkgKiBUU0Ygc3luYyB2YWx1ZSwgdGhpcyBpcyBkZXBlbmRhbnQgb24gdGhlIG9wZXJhdGlvbiB0eXBlLgorCSAqLworCWVudW0gdHNmX3N5bmMgc3luYzsKKworCS8qCisJICogVGhlIE1BQyBhbmQgQlNTSUQgYWRkcmVzc2VzcyBhcmUgc2ltcGxlIGFycmF5IG9mIGJ5dGVzLAorCSAqIHRoZXNlIGFycmF5cyBhcmUgbGl0dGxlIGVuZGlhbiwgc28gd2hlbiBzZW5kaW5nIHRoZSBhZGRyZXNzZXNzCisJICogdG8gdGhlIGRyaXZlcnMsIGNvcHkgdGhlIGl0IGludG8gYSBlbmRpYW4tc2lnbmVkIHZhcmlhYmxlLgorCSAqCisJICogTm90ZSB0aGF0IGFsbCBkZXZpY2VzIChleGNlcHQgcnQyNTAwdXNiKSBoYXZlIDMyIGJpdHMKKwkgKiByZWdpc3RlciB3b3JkIHNpemVzLiBUaGlzIG1lYW5zIHRoYXQgd2hhdGV2ZXIgdmFyaWFibGUgd2UKKwkgKiBwYXNzIF9tdXN0XyBiZSBhIG11bHRpcGxlIG9mIDMyIGJpdHMuIE90aGVyd2lzZSB0aGUgZGV2aWNlCisJICogbWlnaHQgbm90IGFjY2VwdCB3aGF0IHdlIGFyZSBzZW5kaW5nIHRvIGl0LgorCSAqIFRoaXMgd2lsbCBhbHNvIG1ha2UgaXQgZWFzaWVyIGZvciB0aGUgZHJpdmVyIHRvIHdyaXRlCisJICogdGhlIGRhdGEgdG8gdGhlIGRldmljZS4KKwkgKi8KKwlfX2xlMzIgbWFjWzJdOworCV9fbGUzMiBic3NpZFsyXTsKK307CisKKy8qCiAgKiBydDJ4MDBsaWIgY2FsbGJhY2sgZnVuY3Rpb25zLgogICovCiBzdHJ1Y3QgcnQyeDAwbGliX29wcyB7CkBAIC00NjQsNiArNTA2LDcgQEAKIAkgKi8KIAlpbnQgKCpwcm9iZV9odykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCWNoYXIgKigqZ2V0X2Zpcm13YXJlX25hbWUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKwl1MTYgKCpnZXRfZmlybXdhcmVfY3JjKSAodm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CiAJaW50ICgqbG9hZF9maXJtd2FyZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgICBjb25zdCBzaXplX3QgbGVuKTsKIApAQCAtNDc0LDEyICs1MTcsMTIgQEAKIAl2b2lkICgqdW5pbml0aWFsaXplKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKIAkvKgotCSAqIFJpbmcgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMKKwkgKiBxdWV1ZSBpbml0aWFsaXphdGlvbiBoYW5kbGVycwogCSAqLwogCXZvaWQgKCppbml0X3J4ZW50cnkpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5KTsKKwkJCSAgICAgIHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOwogCXZvaWQgKCppbml0X3R4ZW50cnkpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5KTsKKwkJCSAgICAgIHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOwogCiAJLyoKIAkgKiBSYWRpbyBjb250cm9sIGhhbmRsZXJzLgpAQCAtNDk3LDM1ICs1NDAsNDAgQEAKIAkgKi8KIAl2b2lkICgqd3JpdGVfdHhfZGVzYykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgdHhkYXRhX2VudHJ5X2Rlc2MgKmRlc2MsCisJCQkgICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCk7CiAJaW50ICgqd3JpdGVfdHhfZGF0YSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKTsKIAlpbnQgKCpnZXRfdHhfZGF0YV9sZW4pIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCXN0cnVjdCBza19idWZmICpza2IpOwogCXZvaWQgKCpraWNrX3R4X3F1ZXVlKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcXVldWUpOworCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSk7CiAKIAkvKgogCSAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKIAkgKi8KLQl2b2lkICgqZmlsbF9yeGRvbmUpIChzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnksCi0JCQkgICAgIHN0cnVjdCByeGRhdGFfZW50cnlfZGVzYyAqZGVzYyk7CisJdm9pZCAoKmZpbGxfcnhkb25lKSAoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpOwogCiAJLyoKIAkgKiBDb25maWd1cmF0aW9uIGhhbmRsZXJzLgogCSAqLwotCXZvaWQgKCpjb25maWdfbWFjX2FkZHIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBfX2xlMzIgKm1hYyk7Ci0Jdm9pZCAoKmNvbmZpZ19ic3NpZCkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIF9fbGUzMiAqYnNzaWQpOwotCXZvaWQgKCpjb25maWdfdHlwZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IGludCB0eXBlLAotCQkJCQkJCSAgIGNvbnN0IGludCB0c2Zfc3luYyk7Ci0Jdm9pZCAoKmNvbmZpZ19wcmVhbWJsZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJIGNvbnN0IGludCBzaG9ydF9wcmVhbWJsZSwKLQkJCQkgY29uc3QgaW50IGFja190aW1lb3V0LAotCQkJCSBjb25zdCBpbnQgYWNrX2NvbnN1bWVfdGltZSk7Ci0Jdm9pZCAoKmNvbmZpZykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncywKLQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZik7CisJdm9pZCAoKmNvbmZpZ19maWx0ZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3MpOworCXZvaWQgKCpjb25maWdfaW50ZikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKKwkJCSAgICAgc3RydWN0IHJ0MngwMGludGZfY29uZiAqY29uZiwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKTsKKyNkZWZpbmUgQ09ORklHX1VQREFURV9UWVBFCQkoIDEgPDwgMSApCisjZGVmaW5lIENPTkZJR19VUERBVEVfTUFDCQkoIDEgPDwgMiApCisjZGVmaW5lIENPTkZJR19VUERBVEVfQlNTSUQJCSggMSA8PCAzICkKKworCXZvaWQgKCpjb25maWdfZXJwKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICBzdHJ1Y3QgcnQyeDAwbGliX2VycCAqZXJwKTsKKwl2b2lkICgqY29uZmlnKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZiwKKwkJCWNvbnN0IHVuc2lnbmVkIGludCBmbGFncyk7CiAjZGVmaW5lIENPTkZJR19VUERBVEVfUEhZTU9ERQkJKCAxIDw8IDEgKQogI2RlZmluZSBDT05GSUdfVVBEQVRFX0NIQU5ORUwJCSggMSA8PCAyICkKICNkZWZpbmUgQ09ORklHX1VQREFURV9UWFBPV0VSCQkoIDEgPDwgMyApCkBAIC01NDAsMTAgKzU4OCwxNCBAQAogICovCiBzdHJ1Y3QgcnQyeDAwX29wcyB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCB1bnNpZ25lZCBpbnQgcnhkX3NpemU7Ci0JY29uc3QgdW5zaWduZWQgaW50IHR4ZF9zaXplOworCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfc3RhX2ludGY7CisJY29uc3QgdW5zaWduZWQgaW50IG1heF9hcF9pbnRmOwogCWNvbnN0IHVuc2lnbmVkIGludCBlZXByb21fc2l6ZTsKIAljb25zdCB1bnNpZ25lZCBpbnQgcmZfc2l6ZTsKKwljb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjICpyeDsKKwljb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjICp0eDsKKwljb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjICpiY247CisJY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyAqYXRpbTsKIAljb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyAqbGliOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpodzsKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTCkBAIC01NjksOCArNjIxLDExIEBACiAJLyoKIAkgKiBEcml2ZXIgZmVhdHVyZXMKIAkgKi8KKwlEUklWRVJfU1VQUE9SVF9NSVhFRF9JTlRFUkZBQ0VTLAogCURSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLAotCURSSVZFUl9SRVFVSVJFX0JFQUNPTl9SSU5HLAorCURSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwKKwlEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLAorCURSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwKIAogCS8qCiAJICogRHJpdmVyIGNvbmZpZ3VyYXRpb24KQEAgLTU4Miw3ICs2MzcsNiBAQAogCUNPTkZJR19FWFRFUk5BTF9MTkFfQkcsCiAJQ09ORklHX0RPVUJMRV9BTlRFTk5BLAogCUNPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLAotCUNPTkZJR19TSE9SVF9QUkVBTUJMRSwKIH07CiAKIC8qCkBAIC01OTcsOCArNjUxLDEwIEBACiAJICogbWFjcm8ncyBzaG91bGQgYmUgdXNlZCBmb3IgY29ycmVjdCB0eXBlY2FzdGluZy4KIAkgKi8KIAl2b2lkICpkZXY7Ci0jZGVmaW5lIHJ0MngwMGRldl9wY2koX19kZXYpCSggKHN0cnVjdCBwY2lfZGV2KikoX19kZXYpLT5kZXYgKQotI2RlZmluZSBydDJ4MDBkZXZfdXNiKF9fZGV2KQkoIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSopKF9fZGV2KS0+ZGV2ICkKKyNkZWZpbmUgcnQyeDAwZGV2X3BjaShfX2RldikJKCAoc3RydWN0IHBjaV9kZXYgKikoX19kZXYpLT5kZXYgKQorI2RlZmluZSBydDJ4MDBkZXZfdXNiKF9fZGV2KQkoIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKShfX2RldiktPmRldiApCisjZGVmaW5lIHJ0MngwMGRldl91c2JfZGV2KF9fZGV2KVwKKwkoIChzdHJ1Y3QgdXNiX2RldmljZSAqKWludGVyZmFjZV90b191c2JkZXYocnQyeDAwZGV2X3VzYihfX2RldikpICkKIAogCS8qCiAJICogQ2FsbGJhY2sgZnVuY3Rpb25zLgpAQCAtNjA5LDE3ICs2NjUsMTcgQEAKIAkgKiBJRUVFODAyMTEgY29udHJvbCBzdHJ1Y3R1cmUuCiAJICovCiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICpod21vZGVzOwotCXVuc2lnbmVkIGludCBjdXJyX2h3bW9kZTsKLSNkZWZpbmUgSFdNT0RFX0IJMAotI2RlZmluZSBIV01PREVfRwkxCi0jZGVmaW5lIEhXTU9ERV9BCTIKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCWVudW0gaWVlZTgwMjExX2JhbmQgY3Vycl9iYW5kOwogCiAJLyoKIAkgKiByZmtpbGwgc3RydWN0dXJlIGZvciBSRiBzdGF0ZSBzd2l0Y2hpbmcgc3VwcG9ydC4KIAkgKiBUaGlzIHdpbGwgb25seSBiZSBjb21waWxlZCBpbiB3aGVuIHJlcXVpcmVkLgogCSAqLwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorCXVuc2lnbmVkIGxvbmcgcmZraWxsX3N0YXRlOworI2RlZmluZSBSRktJTExfU1RBVEVfQUxMT0NBVEVECQkxCisjZGVmaW5lIFJGS0lMTF9TVEFURV9SRUdJU1RFUkVECQkyCiAJc3RydWN0IHJma2lsbCAqcmZraWxsOwogCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldjsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KQEAgLTYzMyw2ICs2ODksMTcgQEAKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKIAkvKgorCSAqIExFRCBzdHJ1Y3R1cmUgZm9yIGNoYW5naW5nIHRoZSBMRUQgc3RhdHVzCisJICogYnkgbWFjODAxMSBvciB0aGUga2VybmVsLgorCSAqLworI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKKwlzdHJ1Y3QgcnQyeDAwX2xlZCBsZWRfcmFkaW87CisJc3RydWN0IHJ0MngwMF9sZWQgbGVkX2Fzc29jOworCXN0cnVjdCBydDJ4MDBfbGVkIGxlZF9xdWFsOworCXUxNiBsZWRfbWN1X3JlZzsKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCisKKwkvKgogCSAqIERldmljZSBmbGFncy4KIAkgKiBJbiB0aGVzZSBmbGFncyB0aGUgY3VycmVudCBzdGF0dXMgYW5kIHNvbWUKIAkgKiBvZiB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgc3RvcmVkLgpAQCAtNjU4LDExICs3MjUsMTMgQEAKIAogCS8qCiAJICogUmVnaXN0ZXIgcG9pbnRlcnMKLQkgKiBjc3JfYWRkcjogQmFzZSByZWdpc3RlciBhZGRyZXNzLiAoUENJKQotCSAqIGNzcl9jYWNoZTogQ1NSIGNhY2hlIGZvciB1c2JfY29udHJvbF9tc2cuIChVU0IpCisJICogY3NyLmJhc2U6IENTUiBiYXNlIHJlZ2lzdGVyIGFkZHJlc3MuIChQQ0kpCisJICogY3NyLmNhY2hlOiBDU1IgY2FjaGUgZm9yIHVzYl9jb250cm9sX21zZy4gKFVTQikKIAkgKi8KLQl2b2lkIF9faW9tZW0gKmNzcl9hZGRyOwotCXZvaWQgKmNzcl9jYWNoZTsKKwl1bmlvbiBjc3IgeworCQl2b2lkIF9faW9tZW0gKmJhc2U7CisJCXZvaWQgKmNhY2hlOworCX0gY3NyOwogCiAJLyoKIAkgKiBNdXRleCB0byBwcm90ZWN0IHJlZ2lzdGVyIGFjY2Vzc2VzIG9uIFVTQiBkZXZpY2VzLgpAQCAtNjg0LDkgKzc1MywxNCBAQAogCXVuc2lnbmVkIGludCBwYWNrZXRfZmlsdGVyOwogCiAJLyoKLQkgKiBJbnRlcmZhY2UgY29uZmlndXJhdGlvbi4KKwkgKiBJbnRlcmZhY2UgZGV0YWlsczoKKwkgKiAgLSBPcGVuIGFwIGludGVyZmFjZSBjb3VudC4KKwkgKiAgLSBPcGVuIHN0YSBpbnRlcmZhY2UgY291bnQuCisJICogIC0gQXNzb2NpYXRpb24gY291bnQuCiAJICovCi0Jc3RydWN0IGludGVyZmFjZSBpbnRlcmZhY2U7CisJdW5zaWduZWQgaW50IGludGZfYXBfY291bnQ7CisJdW5zaWduZWQgaW50IGludGZfc3RhX2NvdW50OworCXVuc2lnbmVkIGludCBpbnRmX2Fzc29jaWF0ZWQ7CiAKIAkvKgogCSAqIExpbmsgcXVhbGl0eQpAQCAtNzE5LDE2ICs3OTMsNiBAQAogCXUxNiB0eF9wb3dlcjsKIAogCS8qCi0JICogTEVEIHJlZ2lzdGVyIChmb3IgcnQ2MXBjaSAmIHJ0NzN1c2IpLgotCSAqLwotCXUxNiBsZWRfcmVnOwotCi0JLyoKLQkgKiBMZWQgbW9kZSAoTEVEX01PREVfKikKLQkgKi8KLQl1OCBsZWRfbW9kZTsKLQotCS8qCiAJICogUnNzaSA8LT4gRGJtIG9mZnNldAogCSAqLwogCXU4IHJzc2lfb2Zmc2V0OwpAQCAtNzUyLDE5ICs4MTYsMTggQEAKIAkvKgogCSAqIFNjaGVkdWxlZCB3b3JrLgogCSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW50Zl93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmaWx0ZXJfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CiAKIAkvKgotCSAqIERhdGEgcmluZyBhcnJheXMgZm9yIFJYLCBUWCBhbmQgQmVhY29uLgotCSAqIFRoZSBCZWFjb24gYXJyYXkgYWxzbyBjb250YWlucyB0aGUgQXRpbSByaW5nCisJICogRGF0YSBxdWV1ZSBhcnJheXMgZm9yIFJYLCBUWCBhbmQgQmVhY29uLgorCSAqIFRoZSBCZWFjb24gYXJyYXkgYWxzbyBjb250YWlucyB0aGUgQXRpbSBxdWV1ZQogCSAqIGlmIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuCiAJICovCi0JaW50IGRhdGFfcmluZ3M7Ci0Jc3RydWN0IGRhdGFfcmluZyAqcng7Ci0Jc3RydWN0IGRhdGFfcmluZyAqdHg7Ci0Jc3RydWN0IGRhdGFfcmluZyAqYmNuOworCWludCBkYXRhX3F1ZXVlczsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcng7CisJc3RydWN0IGRhdGFfcXVldWUgKnR4OworCXN0cnVjdCBkYXRhX3F1ZXVlICpiY247CiAKIAkvKgogCSAqIEZpcm13YXJlIGltYWdlLgpAQCAtNzczLDM3ICs4MzYsNiBAQAogfTsKIAogLyoKLSAqIEZvci1lYWNoIGxvb3AgZm9yIHRoZSByaW5nIGFycmF5LgotICogQWxsIHJpbmdzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYXMgYSBzaW5nbGUgYXJyYXksCi0gKiB0aGlzIG1lYW5zIHdlIGNhbiBjcmVhdGUgYSB2ZXJ5IHNpbXBseSBsb29wIG1hY3JvCi0gKiB0aGF0IGlzIGNhcGFibGUgb2YgbG9vcGluZyB0aHJvdWdoIGFsbCByaW5ncy4KLSAqIHJpbmdfZW5kKCksIHR4cmluZ19lbmQoKSBhbmQgcmluZ19sb29wKCkgYXJlIGhlbHBlciBtYWNybydzIHdoaWNoCi0gKiBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuIEluc3RlYWQgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgdXNlZDoKLSAqIHJpbmdfZm9yX2VhY2goKSAtIExvb3BzIHRocm91Z2ggYWxsIHJpbmdzIChSWCwgVFgsIEJlYWNvbiAmIEF0aW0pCi0gKiB0eHJpbmdfZm9yX2VhY2goKSAtIExvb3BzIHRocm91Z2ggVFggZGF0YSByaW5ncyAoVFggb25seSkKLSAqIHR4cmluZ2FsbF9mb3JfZWFjaCgpIC0gTG9vcHMgdGhyb3VnaCBhbGwgVFggcmluZ3MgKFRYLCBCZWFjb24gJiBBdGltKQotICovCi0jZGVmaW5lIHJpbmdfZW5kKF9fZGV2KSBcCi0JJihfX2RldiktPnJ4WyhfX2RldiktPmRhdGFfcmluZ3NdCi0KLSNkZWZpbmUgdHhyaW5nX2VuZChfX2RldikgXAotCSYoX19kZXYpLT50eFsoX19kZXYpLT5ody0+cXVldWVzXQotCi0jZGVmaW5lIHJpbmdfbG9vcChfX2VudHJ5LCBfX3N0YXJ0LCBfX2VuZCkJCQlcCi0JZm9yICgoX19lbnRyeSkgPSAoX19zdGFydCk7CQkJCVwKLQkgICAgIHByZWZldGNoKCYoX19lbnRyeSlbMV0pLCAoX19lbnRyeSkgIT0gKF9fZW5kKTsJXAotCSAgICAgKF9fZW50cnkpID0gJihfX2VudHJ5KVsxXSkKLQotI2RlZmluZSByaW5nX2Zvcl9lYWNoKF9fZGV2LCBfX2VudHJ5KSBcCi0JcmluZ19sb29wKF9fZW50cnksIChfX2RldiktPnJ4LCByaW5nX2VuZChfX2RldikpCi0KLSNkZWZpbmUgdHhyaW5nX2Zvcl9lYWNoKF9fZGV2LCBfX2VudHJ5KSBcCi0JcmluZ19sb29wKF9fZW50cnksIChfX2RldiktPnR4LCB0eHJpbmdfZW5kKF9fZGV2KSkKLQotI2RlZmluZSB0eHJpbmdhbGxfZm9yX2VhY2goX19kZXYsIF9fZW50cnkpIFwKLQlyaW5nX2xvb3AoX19lbnRyeSwgKF9fZGV2KS0+dHgsIHJpbmdfZW5kKF9fZGV2KSkKLQotLyoKICAqIEdlbmVyaWMgUkYgYWNjZXNzLgogICogVGhlIFJGIGlzIGJlaW5nIGFjY2Vzc2VkIGJ5IHdvcmQgaW5kZXguCiAgKi8KQEAgLTg5NSwyMCArOTI3LDQzIEBACiAJcmV0dXJuICgoc2l6ZSAqIDggKiAxMCkgJSByYXRlKTsKIH0KIAotLyoKLSAqIExpYnJhcnkgZnVuY3Rpb25zLgorLyoqCisgKiBydDJ4MDBxdWV1ZV9nZXRfcXVldWUgLSBDb252ZXJ0IG1hYzgwMjExIHF1ZXVlIGluZGV4IHRvIHJ0MngwMCBxdWV1ZQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAcXVldWU6IG1hYzgwMjExL3J0MngwMCBxdWV1ZSBpbmRleAorICoJKHNlZSAmZW51bSBpZWVlODAyMTFfdHhfcXVldWUgYW5kICZlbnVtIHJ0MngwMF9iY25fcXVldWUpLgogICovCi1zdHJ1Y3QgZGF0YV9yaW5nICpydDJ4MDBsaWJfZ2V0X3Jpbmcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSk7CitzdHJ1Y3QgZGF0YV9xdWV1ZSAqcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgcXVldWUpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2dldF9lbnRyeSAtIEdldCBxdWV1ZSBlbnRyeSB3aGVyZSB0aGUgZ2l2ZW4gaW5kZXggcG9pbnRzIHRvLgorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAaW5kZXg6IEluZGV4IGlkZW50aWZpZXIgZm9yIG9idGFpbmluZyB0aGUgY29ycmVjdCBpbmRleC4KKyAqLworc3RydWN0IHF1ZXVlX2VudHJ5ICpydDJ4MDBxdWV1ZV9nZXRfZW50cnkoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLAorCQkJCQkgIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2luZGV4X2luYyAtIEluZGV4IGluY3JlbWVudGF0aW9uIGZ1bmN0aW9uCisgKiBAcXVldWU6IFF1ZXVlICgmc3RydWN0IGRhdGFfcXVldWUpIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4KKyAqIEBhY3Rpb246IEluZGV4IHR5cGUgKCZlbnVtIHF1ZXVlX2luZGV4KSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZXF1ZXN0ZWQgaW5kZXggb24gdGhlIHF1ZXVlLAorICogaXQgd2lsbCBncmFiIHRoZSBhcHByb3ByaWF0ZSBsb2NrcyBhbmQgaGFuZGxlIHF1ZXVlIG92ZXJmbG93IGV2ZW50cyBieQorICogcmVzZXR0aW5nIHRoZSBpbmRleCB0byB0aGUgc3RhcnQgb2YgdGhlIHF1ZXVlLgorICovCit2b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOworCiAKIC8qCiAgKiBJbnRlcnJ1cHQgY29udGV4dCBoYW5kbGVycy4KICAqLwogdm9pZCBydDJ4MDBsaWJfYmVhY29uZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLXZvaWQgcnQyeDAwbGliX3R4ZG9uZShzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnksCi0JCSAgICAgIGNvbnN0IGludCBzdGF0dXMsIGNvbnN0IGludCByZXRyeSk7Ci12b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICBzdHJ1Y3QgcnhkYXRhX2VudHJ5X2Rlc2MgKmRlc2MpOwordm9pZCBydDJ4MDBsaWJfdHhkb25lKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCSAgICAgIHN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYyAqdHhkZXNjKTsKK3ZvaWQgcnQyeDAwbGliX3J4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYyk7CiAKIC8qCiAgKiBUWCBkZXNjcmlwdG9yIGluaXRpYWxpemVyCkBAIC05MzIsNiArOTg3LDEwIEBACiBpbnQgcnQyeDAwbWFjX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpOwordm9pZCBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCWludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOwogaW50IHJ0MngwMG1hY19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwogaW50IHJ0MngwMG1hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKaW5kZXggNzJjZmUwMC4uYTk5MzBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI5LDY0ICsyOSw3OCBAQAogI2luY2x1ZGUgInJ0MngwMC5oIgogI2luY2x1ZGUgInJ0MngwMGxpYi5oIgogCi0KLS8qCi0gKiBUaGUgTUFDIGFuZCBCU1NJRCBhZGRyZXNzZXNzIGFyZSBzaW1wbGUgYXJyYXkgb2YgYnl0ZXMsCi0gKiB0aGVzZSBhcnJheXMgYXJlIGxpdHRsZSBlbmRpYW4sIHNvIHdoZW4gc2VuZGluZyB0aGUgYWRkcmVzc2VzcwotICogdG8gdGhlIGRyaXZlcnMsIGNvcHkgdGhlIGl0IGludG8gYSBlbmRpYW4tc2lnbmVkIHZhcmlhYmxlLgotICoKLSAqIE5vdGUgdGhhdCBhbGwgZGV2aWNlcyAoZXhjZXB0IHJ0MjUwMHVzYikgaGF2ZSAzMiBiaXRzCi0gKiByZWdpc3RlciB3b3JkIHNpemVzLiBUaGlzIG1lYW5zIHRoYXQgd2hhdGV2ZXIgdmFyaWFibGUgd2UKLSAqIHBhc3MgX211c3RfIGJlIGEgbXVsdGlwbGUgb2YgMzIgYml0cy4gT3RoZXJ3aXNlIHRoZSBkZXZpY2UKLSAqIG1pZ2h0IG5vdCBhY2NlcHQgd2hhdCB3ZSBhcmUgc2VuZGluZyB0byBpdC4KLSAqIFRoaXMgd2lsbCBhbHNvIG1ha2UgaXQgZWFzaWVyIGZvciB0aGUgZHJpdmVyIHRvIHdyaXRlCi0gKiB0aGUgZGF0YSB0byB0aGUgZGV2aWNlLgotICoKLSAqIEFsc28gbm90ZSB0aGF0IHdoZW4gTlVMTCBpcyBwYXNzZWQgYXMgYWRkcmVzcyB0aGUKLSAqIHdlIHdpbGwgc2VuZCAwMDowMDowMDowMDowMCB0byB0aGUgZGV2aWNlIHRvIGNsZWFyIHRoZSBhZGRyZXNzLgotICogVGhpcyB3aWxsIHByZXZlbnQgdGhlIGRldmljZSBiZWluZyBjb25mdXNlZCB3aGVuIGl0IHdhbnRzCi0gKiB0byBBQ0sgZnJhbWVzIG9yIGNvbnNpZGVyZXMgaXRzZWxmIGFzc29jaWF0ZWQuCi0gKi8KLXZvaWQgcnQyeDAwbGliX2NvbmZpZ19tYWNfYWRkcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCB1OCAqbWFjKQordm9pZCBydDJ4MDBsaWJfY29uZmlnX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKKwkJCSAgIGVudW0gaWVlZTgwMjExX2lmX3R5cGVzIHR5cGUsCisJCQkgICB1OCAqbWFjLCB1OCAqYnNzaWQpCiB7Ci0JX19sZTMyIHJlZ1syXTsKKwlzdHJ1Y3QgcnQyeDAwaW50Zl9jb25mIGNvbmY7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAotCW1lbXNldCgmcmVnLCAwLCBzaXplb2YocmVnKSk7Ci0JaWYgKG1hYykKLQkJbWVtY3B5KCZyZWcsIG1hYywgRVRIX0FMRU4pOwotCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y29uZmlnX21hY19hZGRyKHJ0MngwMGRldiwgJnJlZ1swXSk7Ci19Ci0KLXZvaWQgcnQyeDAwbGliX2NvbmZpZ19ic3NpZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCB1OCAqYnNzaWQpCi17Ci0JX19sZTMyIHJlZ1syXTsKLQotCW1lbXNldCgmcmVnLCAwLCBzaXplb2YocmVnKSk7Ci0JaWYgKGJzc2lkKQotCQltZW1jcHkoJnJlZywgYnNzaWQsIEVUSF9BTEVOKTsKLQotCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19ic3NpZChydDJ4MDBkZXYsICZyZWdbMF0pOwotfQotCi12b2lkIHJ0MngwMGxpYl9jb25maWdfdHlwZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCBpbnQgdHlwZSkKLXsKLQlpbnQgdHNmX3N5bmM7CisJY29uZi50eXBlID0gdHlwZTsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOgotCQl0c2Zfc3luYyA9IFRTRl9TWU5DX0JFQUNPTjsKKwkJY29uZi5zeW5jID0gVFNGX1NZTkNfQkVBQ09OOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKLQkJdHNmX3N5bmMgPSBUU0ZfU1lOQ19JTkZSQTsKKwkJY29uZi5zeW5jID0gVFNGX1NZTkNfSU5GUkE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXRzZl9zeW5jID0gVFNGX1NZTkNfTk9ORTsKKwkJY29uZi5zeW5jID0gVFNGX1NZTkNfTk9ORTsKIAkJYnJlYWs7CiAJfQogCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y29uZmlnX3R5cGUocnQyeDAwZGV2LCB0eXBlLCB0c2Zfc3luYyk7CisJLyoKKwkgKiBOb3RlIHRoYXQgd2hlbiBOVUxMIGlzIHBhc3NlZCBhcyBhZGRyZXNzIHdlIHdpbGwgc2VuZAorCSAqIDAwOjAwOjAwOjAwOjAwIHRvIHRoZSBkZXZpY2UgdG8gY2xlYXIgdGhlIGFkZHJlc3MuCisJICogVGhpcyB3aWxsIHByZXZlbnQgdGhlIGRldmljZSBiZWluZyBjb25mdXNlZCB3aGVuIGl0IHdhbnRzCisJICogdG8gQUNLIGZyYW1lcyBvciBjb25zaWRlcmVzIGl0c2VsZiBhc3NvY2lhdGVkLgorCSAqLworCW1lbXNldCgmY29uZi5tYWMsIDAsIHNpemVvZihjb25mLm1hYykpOworCWlmIChtYWMpCisJCW1lbWNweSgmY29uZi5tYWMsIG1hYywgRVRIX0FMRU4pOworCisJbWVtc2V0KCZjb25mLmJzc2lkLCAwLCBzaXplb2YoY29uZi5ic3NpZCkpOworCWlmIChic3NpZCkKKwkJbWVtY3B5KCZjb25mLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCisJZmxhZ3MgfD0gQ09ORklHX1VQREFURV9UWVBFOworCWlmIChtYWMgfHwgKCFydDJ4MDBkZXYtPmludGZfYXBfY291bnQgJiYgIXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQorCQlmbGFncyB8PSBDT05GSUdfVVBEQVRFX01BQzsKKwlpZiAoYnNzaWQgfHwgKCFydDJ4MDBkZXYtPmludGZfYXBfY291bnQgJiYgIXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQorCQlmbGFncyB8PSBDT05GSUdfVVBEQVRFX0JTU0lEOworCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCAmY29uZiwgZmxhZ3MpOworfQorCit2b2lkIHJ0MngwMGxpYl9jb25maWdfZXJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpCit7CisJc3RydWN0IHJ0MngwMGxpYl9lcnAgZXJwOworCisJbWVtc2V0KCZlcnAsIDAsIHNpemVvZihlcnApKTsKKworCWVycC5zaG9ydF9wcmVhbWJsZSA9IGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7CisJZXJwLmFja190aW1lb3V0ID0gUExDUCArIGdldF9kdXJhdGlvbihBQ0tfU0laRSwgMTApOworCWVycC5hY2tfY29uc3VtZV90aW1lID0gU0lGUyArIFBMQ1AgKyBnZXRfZHVyYXRpb24oQUNLX1NJWkUsIDEwKTsKKworCWlmIChydDJ4MDBkZXYtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfU0hPUlRfU0xPVF9USU1FKQorCQllcnAuYWNrX3RpbWVvdXQgKz0gU0hPUlRfRElGUzsKKwllbHNlCisJCWVycC5hY2tfdGltZW91dCArPSBESUZTOworCisJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpIHsKKwkJZXJwLmFja190aW1lb3V0ICs9IFNIT1JUX1BSRUFNQkxFOworCQllcnAuYWNrX2NvbnN1bWVfdGltZSArPSBTSE9SVF9QUkVBTUJMRTsKKwl9IGVsc2UgeworCQllcnAuYWNrX3RpbWVvdXQgKz0gUFJFQU1CTEU7CisJCWVycC5hY2tfY29uc3VtZV90aW1lICs9IFBSRUFNQkxFOworCX0KKworCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19lcnAocnQyeDAwZGV2LCAmZXJwKTsKIH0KIAogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2FudGVubmEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTk3LDM0ICsxMTEsNTIgQEAKIAlsaWJjb25mLmFudC5yeCA9IHJ4OwogCWxpYmNvbmYuYW50LnR4ID0gdHg7CiAKKwlpZiAocnggPT0gcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUucnggJiYKKwkgICAgdHggPT0gcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUudHgpCisJCXJldHVybjsKKwogCS8qCiAJICogQW50ZW5uYSBzZXR1cCBjaGFuZ2VzIHJlcXVpcmUgdGhlIFJYIHRvIGJlIGRpc2FibGVkLAogCSAqIGVsc2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBkZXZpY2UuCiAJICovCiAJaWYgKHRlc3RfYml0KERFVklDRV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PRkYpOworCQlydDJ4MDBsaWJfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT0ZGX0xJTkspOwogCiAJLyoKIAkgKiBXcml0ZSBuZXcgYW50ZW5uYSBzZXR1cCB0byBkZXZpY2UgYW5kIHJlc2V0IHRoZSBsaW5rIHR1bmVyLgogCSAqIFRoZSBsYXR0ZXIgaXMgcmVxdWlyZWQgc2luY2Ugd2UgbmVlZCB0byByZWNhbGlicmF0ZSB0aGUKIAkgKiBub2lzZS1zZW5zaXRpdml0eSByYXRpbyBmb3IgdGhlIG5ldyBzZXR1cC4KIAkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWcocnQyeDAwZGV2LCBDT05GSUdfVVBEQVRFX0FOVEVOTkEsICZsaWJjb25mKTsKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWcocnQyeDAwZGV2LCAmbGliY29uZiwgQ09ORklHX1VQREFURV9BTlRFTk5BKTsKIAlydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihydDJ4MDBkZXYpOwogCiAJcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUucnggPSBsaWJjb25mLmFudC5yeDsKIAlydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZS50eCA9IGxpYmNvbmYuYW50LnR4OwogCiAJaWYgKHRlc3RfYml0KERFVklDRV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PTik7CisJCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PTl9MSU5LKTsKK30KKworc3RhdGljIHUzMiBydDJ4MDBsaWJfZ2V0X2Jhc2ljX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQpCit7CisJY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpyYXRlOworCXVuc2lnbmVkIGludCBpOworCXUzMiBtYXNrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJcmF0ZSA9IHJ0MngwMF9nZXRfcmF0ZShiYW5kLT5iaXRyYXRlc1tpXS5od192YWx1ZSk7CisJCWlmIChyYXRlLT5mbGFncyAmIERFVl9SQVRFX0JBU0lDKQorCQkJbWFzayB8PSByYXRlLT5yYXRlbWFzazsKKwl9CisKKwlyZXR1cm4gbWFzazsKIH0KIAogdm9pZCBydDJ4MDBsaWJfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwgY29uc3QgaW50IGZvcmNlX2NvbmZpZykKIHsKIAlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgbGliY29uZjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7CiAJc3RydWN0IGFudGVubmFfc2V0dXAgKmRlZmF1bHRfYW50ID0gJnJ0MngwMGRldi0+ZGVmYXVsdF9hbnQ7CiAJc3RydWN0IGFudGVubmFfc2V0dXAgKmFjdGl2ZV9hbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmU7CiAJaW50IGZsYWdzID0gMDsKQEAgLTE0Myw5ICsxNzUsOSBAQAogCSAqIENoZWNrIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYXZlIGJlZW4KIAkgKiB1cGRhdGVkIGFuZCBzaG91bGQgYmUgc2VuZCB0byB0aGUgZGV2aWNlLgogCSAqLwotCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5waHltb2RlICE9IGNvbmYtPnBoeW1vZGUpCisJaWYgKHJ0MngwMGRldi0+cnhfc3RhdHVzLmJhbmQgIT0gY29uZi0+Y2hhbm5lbC0+YmFuZCkKIAkJZmxhZ3MgfD0gQ09ORklHX1VQREFURV9QSFlNT0RFOwotCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5jaGFubmVsICE9IGNvbmYtPmNoYW5uZWwpCisJaWYgKHJ0MngwMGRldi0+cnhfc3RhdHVzLmZyZXEgIT0gY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpCiAJCWZsYWdzIHw9IENPTkZJR19VUERBVEVfQ0hBTk5FTDsKIAlpZiAocnQyeDAwZGV2LT50eF9wb3dlciAhPSBjb25mLT5wb3dlcl9sZXZlbCkKIAkJZmxhZ3MgfD0gQ09ORklHX1VQREFURV9UWFBPV0VSOwpAQCAtMjAwLDMzICsyMzIsMTUgQEAKIAltZW1zZXQoJmxpYmNvbmYsIDAsIHNpemVvZihsaWJjb25mKSk7CiAKIAlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX1BIWU1PREUpIHsKLQkJc3dpdGNoIChjb25mLT5waHltb2RlKSB7Ci0JCWNhc2UgTU9ERV9JRUVFODAyMTFBOgotCQkJbGliY29uZi5waHltb2RlID0gSFdNT0RFX0E7Ci0JCQlicmVhazsKLQkJY2FzZSBNT0RFX0lFRUU4MDIxMUI6Ci0JCQlsaWJjb25mLnBoeW1vZGUgPSBIV01PREVfQjsKLQkJCWJyZWFrOwotCQljYXNlIE1PREVfSUVFRTgwMjExRzoKLQkJCWxpYmNvbmYucGh5bW9kZSA9IEhXTU9ERV9HOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlFUlJPUihydDJ4MDBkZXYsCi0JCQkgICAgICAiQXR0ZW1wdCB0byBjb25maWd1cmUgdW5zdXBwb3J0ZWQgbW9kZSAoJWQpIgotCQkJICAgICAgIkRlZmF1bHRpbmcgdG8gODAyLjExYiIsIGNvbmYtPnBoeW1vZGUpOwotCQkJbGliY29uZi5waHltb2RlID0gSFdNT0RFX0I7Ci0JCX0KKwkJYmFuZCA9ICZydDJ4MDBkZXYtPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOwogCi0JCW1vZGUgPSAmcnQyeDAwZGV2LT5od21vZGVzW2xpYmNvbmYucGh5bW9kZV07Ci0JCXJhdGUgPSAmbW9kZS0+cmF0ZXNbbW9kZS0+bnVtX3JhdGVzIC0gMV07Ci0KLQkJbGliY29uZi5iYXNpY19yYXRlcyA9Ci0JCSAgICBERVZJQ0VfR0VUX1JBVEVfRklFTEQocmF0ZS0+dmFsLCBSQVRFTUFTSykgJiBERVZfQkFTSUNfUkFURU1BU0s7CisJCWxpYmNvbmYuYmFuZCA9IGNvbmYtPmNoYW5uZWwtPmJhbmQ7CisJCWxpYmNvbmYuYmFzaWNfcmF0ZXMgPSBydDJ4MDBsaWJfZ2V0X2Jhc2ljX3JhdGVzKGJhbmQpOwogCX0KIAogCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfQ0hBTk5FTCkgewogCQltZW1jcHkoJmxpYmNvbmYucmYsCi0JCSAgICAgICAmcnQyeDAwZGV2LT5zcGVjLmNoYW5uZWxzW2NvbmYtPmNoYW5uZWxfdmFsXSwKKwkJICAgICAgICZydDJ4MDBkZXYtPnNwZWMuY2hhbm5lbHNbY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWVdLAogCQkgICAgICAgc2l6ZW9mKGxpYmNvbmYucmYpKTsKIAl9CiAKQEAgLTI2Miw3ICsyNzYsNyBAQAogCS8qCiAJICogU3RhcnQgY29uZmlndXJhdGlvbi4KIAkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWcocnQyeDAwZGV2LCBmbGFncywgJmxpYmNvbmYpOworCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZyhydDJ4MDBkZXYsICZsaWJjb25mLCBmbGFncyk7CiAKIAkvKgogCSAqIFNvbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFmZmVjdCB0aGUgbGluayBxdWFsaXR5CkBAIC0yNzIsMTIgKzI4NiwxMSBAQAogCQlydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihydDJ4MDBkZXYpOwogCiAJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9QSFlNT0RFKSB7Ci0JCXJ0MngwMGRldi0+Y3Vycl9od21vZGUgPSBsaWJjb25mLnBoeW1vZGU7Ci0JCXJ0MngwMGRldi0+cnhfc3RhdHVzLnBoeW1vZGUgPSBjb25mLT5waHltb2RlOworCQlydDJ4MDBkZXYtPmN1cnJfYmFuZCA9IGNvbmYtPmNoYW5uZWwtPmJhbmQ7CisJCXJ0MngwMGRldi0+cnhfc3RhdHVzLmJhbmQgPSBjb25mLT5jaGFubmVsLT5iYW5kOwogCX0KIAotCXJ0MngwMGRldi0+cnhfc3RhdHVzLmZyZXEgPSBjb25mLT5mcmVxOwotCXJ0MngwMGRldi0+cnhfc3RhdHVzLmNoYW5uZWwgPSBjb25mLT5jaGFubmVsOworCXJ0MngwMGRldi0+cnhfc3RhdHVzLmZyZXEgPSBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcTsKIAlydDJ4MDBkZXYtPnR4X3Bvd2VyID0gY29uZi0+cG93ZXJfbGV2ZWw7CiAKIAlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX0FOVEVOTkEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKaW5kZXggYjQ0YTlmNC4uYmZhYjNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAicnQyeDAwbGliLmgiCiAjaW5jbHVkZSAicnQyeDAwZHVtcC5oIgogCi0jZGVmaW5lIFBSSU5UX0xJTkVfTEVOX01BWCAzMgorI2RlZmluZSBNQVhfTElORV9MRU5HVEggNjQKIAogc3RydWN0IHJ0MngwMGRlYnVnX2ludGYgewogCS8qCkBAIC02MCw4ICs2MCw5IEBACiAJICogICAgIC0gZWVwcm9tIG9mZnNldC92YWx1ZSBmaWxlcwogCSAqICAgICAtIGJicCBvZmZzZXQvdmFsdWUgZmlsZXMKIAkgKiAgICAgLSByZiBvZmZzZXQvdmFsdWUgZmlsZXMKLQkgKiAgIC0gZnJhbWUgZHVtcCBmb2xkZXIKKwkgKiAgIC0gcXVldWUgZm9sZGVyCiAJICogICAgIC0gZnJhbWUgZHVtcCBmaWxlCisJICogICAgIC0gcXVldWUgc3RhdHMgZmlsZQogCSAqLwogCXN0cnVjdCBkZW50cnkgKmRyaXZlcl9mb2xkZXI7CiAJc3RydWN0IGRlbnRyeSAqZHJpdmVyX2VudHJ5OwpAQCAtNzYsOCArNzcsOSBAQAogCXN0cnVjdCBkZW50cnkgKmJicF92YWxfZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqcmZfb2ZmX2VudHJ5OwogCXN0cnVjdCBkZW50cnkgKnJmX3ZhbF9lbnRyeTsKLQlzdHJ1Y3QgZGVudHJ5ICpmcmFtZV9mb2xkZXI7Ci0Jc3RydWN0IGRlbnRyeSAqZnJhbWVfZHVtcF9lbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpxdWV1ZV9mb2xkZXI7CisJc3RydWN0IGRlbnRyeSAqcXVldWVfZnJhbWVfZHVtcF9lbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpxdWV1ZV9zdGF0c19lbnRyeTsKIAogCS8qCiAJICogVGhlIGZyYW1lIGR1bXAgZmlsZSBvbmx5IGFsbG93cyBhIHNpbmdsZSByZWFkZXIsCkBAIC0xMTYsNyArMTE4LDcgQEAKIAkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBydDJ4MDBkZWJ1Z19pbnRmICppbnRmID0gcnQyeDAwZGV2LT5kZWJ1Z2ZzX2ludGY7Ci0Jc3RydWN0IHNrYl9kZXNjICpkZXNjID0gZ2V0X3NrYl9kZXNjKHNrYik7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYmNvcHk7CiAJc3RydWN0IHJ0MngwMGR1bXBfaGRyICpkdW1wX2hkcjsKIAlzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7CkBAIC0xNDcsNyArMTQ5LDcgQEAKIAlkdW1wX2hkci0+Y2hpcF9yZiA9IGNwdV90b19sZTE2KHJ0MngwMGRldi0+Y2hpcC5yZik7CiAJZHVtcF9oZHItPmNoaXBfcmV2ID0gY3B1X3RvX2xlMzIocnQyeDAwZGV2LT5jaGlwLnJldik7CiAJZHVtcF9oZHItPnR5cGUgPSBjcHVfdG9fbGUxNihkZXNjLT5mcmFtZV90eXBlKTsKLQlkdW1wX2hkci0+cmluZ19pbmRleCA9IGRlc2MtPnJpbmctPnF1ZXVlX2lkeDsKKwlkdW1wX2hkci0+cXVldWVfaW5kZXggPSBkZXNjLT5lbnRyeS0+cXVldWUtPnFpZDsKIAlkdW1wX2hkci0+ZW50cnlfaW5kZXggPSBkZXNjLT5lbnRyeS0+ZW50cnlfaWR4OwogCWR1bXBfaGRyLT50aW1lc3RhbXBfc2VjID0gY3B1X3RvX2xlMzIodGltZXN0YW1wLnR2X3NlYyk7CiAJZHVtcF9oZHItPnRpbWVzdGFtcF91c2VjID0gY3B1X3RvX2xlMzIodGltZXN0YW1wLnR2X3VzZWMpOwpAQCAtMTg2LDcgKzE4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnQyeDAwZGVidWdfb3Blbl9yaW5nX2R1bXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHJ0MngwMGRlYnVnX29wZW5fcXVldWVfZHVtcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgcnQyeDAwZGVidWdfaW50ZiAqaW50ZiA9IGlub2RlLT5pX3ByaXZhdGU7CiAJaW50IHJldHZhbDsKQEAgLTIwMyw3ICsyMDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0MngwMGRlYnVnX3JlbGVhc2VfcmluZ19kdW1wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBydDJ4MDBkZWJ1Z19yZWxlYXNlX3F1ZXVlX2R1bXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHJ0MngwMGRlYnVnX2ludGYgKmludGYgPSBpbm9kZS0+aV9wcml2YXRlOwogCkBAIC0yMTQsMTAgKzIxNiwxMCBAQAogCXJldHVybiBydDJ4MDBkZWJ1Z19maWxlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBydDJ4MDBkZWJ1Z19yZWFkX3JpbmdfZHVtcChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJICBjaGFyIF9fdXNlciAqYnVmLAotCQkJCQkgIHNpemVfdCBsZW5ndGgsCi0JCQkJCSAgbG9mZl90ICpvZmZzZXQpCitzdGF0aWMgc3NpemVfdCBydDJ4MDBkZWJ1Z19yZWFkX3F1ZXVlX2R1bXAoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgIGNoYXIgX191c2VyICpidWYsCisJCQkJCSAgIHNpemVfdCBsZW5ndGgsCisJCQkJCSAgIGxvZmZfdCAqb2Zmc2V0KQogewogCXN0cnVjdCBydDJ4MDBkZWJ1Z19pbnRmICppbnRmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yNDgsOCArMjUwLDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ0MngwMGRlYnVnX3BvbGxfcmluZ19kdW1wKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQkgICAgICAgcG9sbF90YWJsZSAqd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnQyeDAwZGVidWdfcG9sbF9xdWV1ZV9kdW1wKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgICAgIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IHJ0MngwMGRlYnVnX2ludGYgKmludGYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKQEAgLTI2MSwxMiArMjYzLDY4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0MngwMGRlYnVnX2ZvcF9yaW5nX2R1bXAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydDJ4MDBkZWJ1Z19mb3BfcXVldWVfZHVtcCA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnJlYWQJCT0gcnQyeDAwZGVidWdfcmVhZF9yaW5nX2R1bXAsCi0JLnBvbGwJCT0gcnQyeDAwZGVidWdfcG9sbF9yaW5nX2R1bXAsCi0JLm9wZW4JCT0gcnQyeDAwZGVidWdfb3Blbl9yaW5nX2R1bXAsCi0JLnJlbGVhc2UJPSBydDJ4MDBkZWJ1Z19yZWxlYXNlX3JpbmdfZHVtcCwKKwkucmVhZAkJPSBydDJ4MDBkZWJ1Z19yZWFkX3F1ZXVlX2R1bXAsCisJLnBvbGwJCT0gcnQyeDAwZGVidWdfcG9sbF9xdWV1ZV9kdW1wLAorCS5vcGVuCQk9IHJ0MngwMGRlYnVnX29wZW5fcXVldWVfZHVtcCwKKwkucmVsZWFzZQk9IHJ0MngwMGRlYnVnX3JlbGVhc2VfcXVldWVfZHVtcCwKK307CisKK3N0YXRpYyBzc2l6ZV90IHJ0MngwMGRlYnVnX3JlYWRfcXVldWVfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkgICAgc2l6ZV90IGxlbmd0aCwKKwkJCQkJICAgIGxvZmZfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBydDJ4MDBkZWJ1Z19pbnRmICppbnRmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIGludCBsaW5lcyA9IDEgKyBpbnRmLT5ydDJ4MDBkZXYtPmRhdGFfcXVldWVzOworCXNpemVfdCBzaXplOworCWNoYXIgKmRhdGE7CisJY2hhciAqdGVtcDsKKworCWlmICgqb2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCWRhdGEgPSBremFsbG9jKGxpbmVzICogTUFYX0xJTkVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJdGVtcCA9IGRhdGEgKworCSAgICBzcHJpbnRmKGRhdGEsICJxaWRcdGNvdW50XHRsaW1pdFx0bGVuZ3RoXHRpbmRleFx0ZG9uZVx0Y3J5cHRvXG4iKTsKKworCXF1ZXVlX2Zvcl9lYWNoKGludGYtPnJ0MngwMGRldiwgcXVldWUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CisKKwkJdGVtcCArPSBzcHJpbnRmKHRlbXAsICIlZFx0JWRcdCVkXHQlZFx0JWRcdCVkXHQlZFxuIiwgcXVldWUtPnFpZCwKKwkJCQlxdWV1ZS0+Y291bnQsIHF1ZXVlLT5saW1pdCwgcXVldWUtPmxlbmd0aCwKKwkJCQlxdWV1ZS0+aW5kZXhbUV9JTkRFWF0sCisJCQkJcXVldWUtPmluZGV4W1FfSU5ERVhfRE9ORV0sCisJCQkJcXVldWUtPmluZGV4W1FfSU5ERVhfQ1JZUFRPXSk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycWZsYWdzKTsKKwl9CisKKwlzaXplID0gc3RybGVuKGRhdGEpOworCXNpemUgPSBtaW4oc2l6ZSwgbGVuZ3RoKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBkYXRhLCBzaXplKSkgeworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJa2ZyZWUoZGF0YSk7CisKKwkqb2Zmc2V0ICs9IHNpemU7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0MngwMGRlYnVnX2ZvcF9xdWV1ZV9zdGF0cyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gcnQyeDAwZGVidWdfcmVhZF9xdWV1ZV9zdGF0cywKKwkub3BlbgkJPSBydDJ4MDBkZWJ1Z19maWxlX29wZW4sCisJLnJlbGVhc2UJPSBydDJ4MDBkZWJ1Z19maWxlX3JlbGVhc2UsCiB9OwogCiAjZGVmaW5lIFJUMlgwMERFQlVHRlNfT1BTX1JFQUQoX19uYW1lLCBfX2Zvcm1hdCwgX190eXBlKQlcCkBAIC0zODYsNyArNDQ0LDcgQEAKIHsKIAljaGFyICpkYXRhOwogCi0JZGF0YSA9IGt6YWxsb2MoMyAqIFBSSU5UX0xJTkVfTEVOX01BWCwgR0ZQX0tFUk5FTCk7CisJZGF0YSA9IGt6YWxsb2MoMyAqIE1BWF9MSU5FX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNDA5LDcgKzQ2Nyw3IEBACiAJY29uc3Qgc3RydWN0IHJ0MngwMGRlYnVnICpkZWJ1ZyA9IGludGYtPmRlYnVnOwogCWNoYXIgKmRhdGE7CiAKLQlkYXRhID0ga3phbGxvYyg4ICogUFJJTlRfTElORV9MRU5fTUFYLCBHRlBfS0VSTkVMKTsKKwlkYXRhID0ga3phbGxvYyg4ICogTUFYX0xJTkVfTEVOR1RILCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpCiAJCXJldHVybiBOVUxMOwogCkBAIC00OTYsMjAgKzU1NCwyNCBAQAogCiAjdW5kZWYgUlQyWDAwREVCVUdGU19DUkVBVEVfUkVHSVNURVJfRU5UUlkKIAotCWludGYtPmZyYW1lX2ZvbGRlciA9Ci0JICAgIGRlYnVnZnNfY3JlYXRlX2RpcigiZnJhbWUiLCBpbnRmLT5kcml2ZXJfZm9sZGVyKTsKLQlpZiAoSVNfRVJSKGludGYtPmZyYW1lX2ZvbGRlcikpCisJaW50Zi0+cXVldWVfZm9sZGVyID0KKwkgICAgZGVidWdmc19jcmVhdGVfZGlyKCJxdWV1ZSIsIGludGYtPmRyaXZlcl9mb2xkZXIpOworCWlmIChJU19FUlIoaW50Zi0+cXVldWVfZm9sZGVyKSkKIAkJZ290byBleGl0OwogCi0JaW50Zi0+ZnJhbWVfZHVtcF9lbnRyeSA9Ci0JICAgIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImR1bXAiLCBTX0lSVUdPLCBpbnRmLT5mcmFtZV9mb2xkZXIsCi0JCQkJaW50ZiwgJnJ0MngwMGRlYnVnX2ZvcF9yaW5nX2R1bXApOwotCWlmIChJU19FUlIoaW50Zi0+ZnJhbWVfZHVtcF9lbnRyeSkpCisJaW50Zi0+cXVldWVfZnJhbWVfZHVtcF9lbnRyeSA9CisJICAgIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImR1bXAiLCBTX0lSVUdPLCBpbnRmLT5xdWV1ZV9mb2xkZXIsCisJCQkJaW50ZiwgJnJ0MngwMGRlYnVnX2ZvcF9xdWV1ZV9kdW1wKTsKKwlpZiAoSVNfRVJSKGludGYtPnF1ZXVlX2ZyYW1lX2R1bXBfZW50cnkpKQogCQlnb3RvIGV4aXQ7CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZpbnRmLT5mcmFtZV9kdW1wX3NrYnF1ZXVlKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnRmLT5mcmFtZV9kdW1wX3dhaXRxdWV1ZSk7CiAKKwlpbnRmLT5xdWV1ZV9zdGF0c19lbnRyeSA9CisJICAgIGRlYnVnZnNfY3JlYXRlX2ZpbGUoInF1ZXVlIiwgU19JUlVHTywgaW50Zi0+cXVldWVfZm9sZGVyLAorCQkJCWludGYsICZydDJ4MDBkZWJ1Z19mb3BfcXVldWVfc3RhdHMpOworCiAJcmV0dXJuOwogCiBleGl0OgpAQCAtNTI4LDggKzU5MCw5IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJmludGYtPmZyYW1lX2R1bXBfc2ticXVldWUpOwogCi0JZGVidWdmc19yZW1vdmUoaW50Zi0+ZnJhbWVfZHVtcF9lbnRyeSk7Ci0JZGVidWdmc19yZW1vdmUoaW50Zi0+ZnJhbWVfZm9sZGVyKTsKKwlkZWJ1Z2ZzX3JlbW92ZShpbnRmLT5xdWV1ZV9zdGF0c19lbnRyeSk7CisJZGVidWdmc19yZW1vdmUoaW50Zi0+cXVldWVfZnJhbWVfZHVtcF9lbnRyeSk7CisJZGVidWdmc19yZW1vdmUoaW50Zi0+cXVldWVfZm9sZGVyKTsKIAlkZWJ1Z2ZzX3JlbW92ZShpbnRmLT5yZl92YWxfZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGludGYtPnJmX29mZl9lbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoaW50Zi0+YmJwX3ZhbF9lbnRyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCmluZGV4IGQzN2VmYmQuLmM0Y2U4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCmluZGV4IGM0YmUyYWM0Li5mOGZlN2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzEsNDEgKzMxLDM1IEBACiAjaW5jbHVkZSAicnQyeDAwZHVtcC5oIgogCiAvKgotICogUmluZyBoYW5kbGVyLgotICovCi1zdHJ1Y3QgZGF0YV9yaW5nICpydDJ4MDBsaWJfZ2V0X3Jpbmcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSkKLXsKLQlpbnQgYmVhY29uID0gdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX1JJTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQotCS8qCi0JICogQ2hlY2sgaWYgd2UgYXJlIHJlcXVlc3RpbmcgYSByZXF1bGFyIFRYIHJpbmcsCi0JICogb3IgaWYgd2UgYXJlIHJlcXVlc3RpbmcgYSBCZWFjb24gb3IgQXRpbSByaW5nLgotCSAqIEZvciBBdGltIHJpbmdzLCB3ZSBzaG91bGQgY2hlY2sgaWYgaXQgaXMgc3VwcG9ydGVkLgotCSAqLwotCWlmIChxdWV1ZSA8IHJ0MngwMGRldi0+aHctPnF1ZXVlcyAmJiBydDJ4MDBkZXYtPnR4KQotCQlyZXR1cm4gJnJ0MngwMGRldi0+dHhbcXVldWVdOwotCi0JaWYgKCFydDJ4MDBkZXYtPmJjbiB8fCAhYmVhY29uKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChxdWV1ZSA9PSBJRUVFODAyMTFfVFhfUVVFVUVfQkVBQ09OKQotCQlyZXR1cm4gJnJ0MngwMGRldi0+YmNuWzBdOwotCWVsc2UgaWYgKHF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9BRlRFUl9CRUFDT04pCi0JCXJldHVybiAmcnQyeDAwZGV2LT5iY25bMV07Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl9nZXRfcmluZyk7Ci0KLS8qCiAgKiBMaW5rIHR1bmluZyBoYW5kbGVycwogICovCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfc3RhcnRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQordm9pZCBydDJ4MDBsaWJfcmVzZXRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogeworCWlmICghdGVzdF9iaXQoREVWSUNFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBSZXNldCBsaW5rIGluZm9ybWF0aW9uLgorCSAqIEJvdGggdGhlIGN1cnJlbnRseSBhY3RpdmUgdmdjIGxldmVsIGFzIHdlbGwgYXMKKwkgKiB0aGUgbGluayB0dW5lciBjb3VudGVyIHNob3VsZCBiZSByZXNldC4gUmVzZXR0aW5nCisJICogdGhlIGNvdW50ZXIgaXMgaW1wb3J0YW50IGZvciBkZXZpY2VzIHdoZXJlIHRoZQorCSAqIGRldmljZSBzaG91bGQgb25seSBwZXJmb3JtIGxpbmsgdHVuaW5nIGR1cmluZyB0aGUKKwkgKiBmaXJzdCBtaW51dGUgYWZ0ZXIgYmVpbmcgZW5hYmxlZC4KKwkgKi8KIAlydDJ4MDBkZXYtPmxpbmsuY291bnQgPSAwOwogCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSAwOwogCisJLyoKKwkgKiBSZXNldCB0aGUgbGluayB0dW5lci4KKwkgKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5yZXNldF90dW5lcihydDJ4MDBkZXYpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfc3RhcnRfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCS8qCisJICogQ2xlYXIgYWxsIChwb3NzaWJseSkgcHJlLWV4aXN0aW5nIHF1YWxpdHkgc3RhdGlzdGljcy4KKwkgKi8KIAltZW1zZXQoJnJ0MngwMGRldi0+bGluay5xdWFsLCAwLCBzaXplb2YocnQyeDAwZGV2LT5saW5rLnF1YWwpKTsKIAogCS8qCkBAIC03OSwxMCArNzMsNyBAQAogCXJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3BlcmNlbnRhZ2UgPSA1MDsKIAlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9wZXJjZW50YWdlID0gNTA7CiAKLQkvKgotCSAqIFJlc2V0IHRoZSBsaW5rIHR1bmVyLgotCSAqLwotCXJ0MngwMGRldi0+b3BzLT5saWItPnJlc2V0X3R1bmVyKHJ0MngwMGRldik7CisJcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKIAogCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCiAJCQkgICAmcnQyeDAwZGV2LT5saW5rLndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CkBAIC05Myw1NSArODQsNiBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5saW5rLndvcmspOwogfQogCi12b2lkIHJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JaWYgKCF0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQlydDJ4MDBsaWJfc3RvcF9saW5rX3R1bmVyKHJ0MngwMGRldik7Ci0JcnQyeDAwbGliX3N0YXJ0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKLX0KLQotLyoKLSAqIFJpbmcgaW5pdGlhbGl6YXRpb24KLSAqLwotc3RhdGljIHZvaWQgcnQyeDAwbGliX2luaXRfcnhyaW5ncyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXN0cnVjdCBkYXRhX3JpbmcgKnJpbmcgPSBydDJ4MDBkZXYtPnJ4OwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKCFydDJ4MDBkZXYtPm9wcy0+bGliLT5pbml0X3J4ZW50cnkpCi0JCXJldHVybjsKLQotCWlmIChyaW5nLT5kYXRhX2FkZHIpCi0JCW1lbXNldChyaW5nLT5kYXRhX2FkZHIsIDAsIHJ0MngwMF9nZXRfcmluZ19zaXplKHJpbmcpKTsKLQotCWZvciAoaSA9IDA7IGkgPCByaW5nLT5zdGF0cy5saW1pdDsgaSsrKQotCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5pbml0X3J4ZW50cnkocnQyeDAwZGV2LCAmcmluZy0+ZW50cnlbaV0pOwotCi0JcnQyeDAwX3JpbmdfaW5kZXhfY2xlYXIocmluZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9pbml0X3R4cmluZ3Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKCFydDJ4MDBkZXYtPm9wcy0+bGliLT5pbml0X3R4ZW50cnkpCi0JCXJldHVybjsKLQotCXR4cmluZ2FsbF9mb3JfZWFjaChydDJ4MDBkZXYsIHJpbmcpIHsKLQkJaWYgKHJpbmctPmRhdGFfYWRkcikKLQkJCW1lbXNldChyaW5nLT5kYXRhX2FkZHIsIDAsIHJ0MngwMF9nZXRfcmluZ19zaXplKHJpbmcpKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgcmluZy0+c3RhdHMubGltaXQ7IGkrKykKLQkJCXJ0MngwMGRldi0+b3BzLT5saWItPmluaXRfdHhlbnRyeShydDJ4MDBkZXYsCi0JCQkJCQkJICAmcmluZy0+ZW50cnlbaV0pOwotCi0JCXJ0MngwMF9yaW5nX2luZGV4X2NsZWFyKHJpbmcpOwotCX0KLX0KLQogLyoKICAqIFJhZGlvIGNvbnRyb2wgaGFuZGxlcnMuCiAgKi8KQEAgLTE1OCwxOSArMTAwLDIxIEBACiAJCXJldHVybiAwOwogCiAJLyoKLQkgKiBJbml0aWFsaXplIGFsbCBkYXRhIHJpbmdzLgorCSAqIEluaXRpYWxpemUgYWxsIGRhdGEgcXVldWVzLgogCSAqLwotCXJ0MngwMGxpYl9pbml0X3J4cmluZ3MocnQyeDAwZGV2KTsKLQlydDJ4MDBsaWJfaW5pdF90eHJpbmdzKHJ0MngwMGRldik7CisJcnQyeDAwcXVldWVfaW5pdF9yeChydDJ4MDBkZXYpOworCXJ0MngwMHF1ZXVlX2luaXRfdHgocnQyeDAwZGV2KTsKIAogCS8qCiAJICogRW5hYmxlIHJhZGlvLgogCSAqLwotCXN0YXR1cyA9IHJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LAotCQkJCQkJICAgICAgIFNUQVRFX1JBRElPX09OKTsKKwlzdGF0dXMgPQorCSAgICBydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfUkFESU9fT04pOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKKwlydDJ4MDBsZWRzX2xlZF9yYWRpbyhydDJ4MDBkZXYsIHRydWUpOworCiAJX19zZXRfYml0KERFVklDRV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgpAQCAtMTk0LDEyICsxMzgsMTAgQEAKIAkvKgogCSAqIFN0b3AgYWxsIHNjaGVkdWxlZCB3b3JrLgogCSAqLwotCWlmICh3b3JrX3BlbmRpbmcoJnJ0MngwMGRldi0+YmVhY29uX3dvcmspKQotCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPmJlYWNvbl93b3JrKTsKKwlpZiAod29ya19wZW5kaW5nKCZydDJ4MDBkZXYtPmludGZfd29yaykpCisJCWNhbmNlbF93b3JrX3N5bmMoJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKIAlpZiAod29ya19wZW5kaW5nKCZydDJ4MDBkZXYtPmZpbHRlcl93b3JrKSkKIAkJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT5maWx0ZXJfd29yayk7Ci0JaWYgKHdvcmtfcGVuZGluZygmcnQyeDAwZGV2LT5jb25maWdfd29yaykpCi0JCWNhbmNlbF93b3JrX3N5bmMoJnJ0MngwMGRldi0+Y29uZmlnX3dvcmspOwogCiAJLyoKIAkgKiBTdG9wIHRoZSBUWCBxdWV1ZXMuCkBAIC0yMTUsNiArMTU3LDcgQEAKIAkgKiBEaXNhYmxlIHJhZGlvLgogCSAqLwogCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBTVEFURV9SQURJT19PRkYpOworCXJ0MngwMGxlZHNfbGVkX3JhZGlvKHJ0MngwMGRldiwgZmFsc2UpOwogfQogCiB2b2lkIHJ0MngwMGxpYl90b2dnbGVfcngoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgZW51bSBkZXZfc3RhdGUgc3RhdGUpCkBAIC0yMzEsNyArMTc0LDcgQEAKIAkgKiBXaGVuIHdlIGFyZSBlbmFibGluZyB0aGUgUlgsIHdlIHNob3VsZCBhbHNvIHN0YXJ0IHRoZSBsaW5rIHR1bmVyLgogCSAqLwogCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTiAmJgotCSAgICBpc19pbnRlcmZhY2VfcHJlc2VudCgmcnQyeDAwZGV2LT5pbnRlcmZhY2UpKQorCSAgICAocnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50IHx8IHJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQogCQlydDJ4MDBsaWJfc3RhcnRfbGlua190dW5lcihydDJ4MDBkZXYpOwogfQogCkBAIC0yNjAsMTkgKzIwMywxMSBAQAogCWlmIChzYW1wbGVfYSA9PSBzYW1wbGVfYikKIAkJcmV0dXJuOwogCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkgewotCQlpZiAoc2FtcGxlX2EgPiBzYW1wbGVfYiAmJiByeCA9PSBBTlRFTk5BX0IpCi0JCQlyeCA9IEFOVEVOTkFfQTsKLQkJZWxzZSBpZiAocnggPT0gQU5URU5OQV9BKQotCQkJcnggPSBBTlRFTk5BX0I7Ci0JfQorCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpCisJCXJ4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COwogCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkgewotCQlpZiAoc2FtcGxlX2EgPiBzYW1wbGVfYiAmJiB0eCA9PSBBTlRFTk5BX0IpCi0JCQl0eCA9IEFOVEVOTkFfQTsKLQkJZWxzZSBpZiAodHggPT0gQU5URU5OQV9BKQotCQkJdHggPSBBTlRFTk5BX0I7Ci0JfQorCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCisJCXR4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COwogCiAJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgcngsIHR4KTsKIH0KQEAgLTI5Myw3ICsyMjgsNyBAQAogCSAqIHNhbXBsZSB0aGUgcnNzaSBmcm9tIHRoZSBvdGhlciBhbnRlbm5hIHRvIG1ha2UgYSB2YWxpZAogCSAqIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgMiBhbnRlbm5hcy4KIAkgKi8KLQlpZiAoKHJzc2lfY3VyciAtIHJzc2lfb2xkKSA+IC01IHx8IChyc3NpX2N1cnIgLSByc3NpX29sZCkgPCA1KQorCWlmIChhYnMocnNzaV9jdXJyIC0gcnNzaV9vbGQpIDwgNSkKIAkJcmV0dXJuOwogCiAJcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyB8PSBBTlRFTk5BX01PREVfU0FNUExFOwpAQCAtMzE5LDE1ICsyNTQsMTUgQEAKIAlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX1RYX0RJVkVSU0lUWTsKIAogCWlmIChydDJ4MDBkZXYtPmh3LT5jb25mLmFudGVubmFfc2VsX3J4ID09IDAgJiYKLQkgICAgcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCAhPSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKKwkgICAgcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKIAkJcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyB8PSBBTlRFTk5BX1JYX0RJVkVSU0lUWTsKIAlpZiAocnQyeDAwZGV2LT5ody0+Y29uZi5hbnRlbm5hX3NlbF90eCA9PSAwICYmCi0JICAgIHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggIT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJICAgIHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCiAJCXJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgfD0gQU5URU5OQV9UWF9ESVZFUlNJVFk7CiAKIAlpZiAoIShydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpICYmCiAJICAgICEocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkgewotCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX01PREVfU0FNUExFOworCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzID0gMDsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDQxLDE3ICszNzYsMjMgQEAKIAkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua190dW5lcihydDJ4MDBkZXYpOwogCiAJLyoKLQkgKiBFdmFsdWF0ZSBhbnRlbm5hIHNldHVwLgotCSAqLwotCXJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hKHJ0MngwMGRldik7Ci0KLQkvKgogCSAqIFByZWNhbGN1bGF0ZSBhIHBvcnRpb24gb2YgdGhlIGxpbmsgc2lnbmFsIHdoaWNoIGlzCiAJICogaW4gYmFzZWQgb24gdGhlIHR4L3J4IHN1Y2Nlc3MvZmFpbHVyZSBjb3VudGVycy4KIAkgKi8KIAlydDJ4MDBsaWJfcHJlY2FsY3VsYXRlX2xpbmtfc2lnbmFsKCZydDJ4MDBkZXYtPmxpbmsucXVhbCk7CiAKIAkvKgorCSAqIFNlbmQgYSBzaWduYWwgdG8gdGhlIGxlZCB0byB1cGRhdGUgdGhlIGxlZCBzaWduYWwgc3RyZW5ndGguCisJICovCisJcnQyeDAwbGVkc19sZWRfcXVhbGl0eShydDJ4MDBkZXYsIHJ0MngwMGRldi0+bGluay5xdWFsLmF2Z19yc3NpKTsKKworCS8qCisJICogRXZhbHVhdGUgYW50ZW5uYSBzZXR1cCwgbWFrZSB0aGlzIHRoZSBsYXN0IHN0ZXAgc2luY2UgdGhpcyBjb3VsZAorCSAqIHBvc3NpYmx5IHJlc2V0IHNvbWUgc3RhdGlzdGljcy4KKwkgKi8KKwlydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYShydDJ4MDBkZXYpOworCisJLyoKIAkgKiBJbmNyZWFzZSB0dW5lciBjb3VudGVyLCBhbmQgcmVzY2hlZHVsZSB0aGUgbmV4dCBsaW5rIHR1bmVyIHJ1bi4KIAkgKi8KIAlydDJ4MDBkZXYtPmxpbmsuY291bnQrKzsKQEAgLTQ2Myw1OSArNDA0LDc2IEBACiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgZmlsdGVyX3dvcmspOwotCXVuc2lnbmVkIGludCBmaWx0ZXIgPSBydDJ4MDBkZXYtPnBhY2tldF9maWx0ZXI7CiAKLQkvKgotCSAqIFNpbmNlIHdlIGhhZCBzdG9yZWQgdGhlIGZpbHRlciBpbnNpZGUgaW50ZXJmYWNlLmZpbHRlciwKLQkgKiB3ZSBzaG91bGQgbm93IGNsZWFyIHRoYXQgZmllbGQuIE90aGVyd2lzZSB0aGUgZHJpdmVyIHdpbGwKLQkgKiBhc3N1bWUgbm90aGluZyBoYXMgY2hhbmdlZCAoKnRvdGFsX2ZsYWdzIHdpbGwgYmUgY29tcGFyZWQKLQkgKiB0byBpbnRlcmZhY2UuZmlsdGVyIHRvIGRldGVybWluZSBpZiBhbnkgYWN0aW9uIGlzIHJlcXVpcmVkKS4KLQkgKi8KLQlydDJ4MDBkZXYtPnBhY2tldF9maWx0ZXIgPSAwOwotCi0JcnQyeDAwZGV2LT5vcHMtPmh3LT5jb25maWd1cmVfZmlsdGVyKHJ0MngwMGRldi0+aHcsCi0JCQkJCSAgICAgZmlsdGVyLCAmZmlsdGVyLCAwLCBOVUxMKTsKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfZmlsdGVyKHJ0MngwMGRldiwgcnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyKTsKIH0KIAotc3RhdGljIHZvaWQgcnQyeDAwbGliX2NvbmZpZ3VyYXRpb25fc2NoZWR1bGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KLQkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydDJ4MDBfZGV2LCBjb25maWdfd29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiBic3NfY29uZjsKLQotCWJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSA9Ci0JCXRlc3RfYml0KENPTkZJR19TSE9SVF9QUkVBTUJMRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGNvbmY7CisJaW50IGRlbGF5ZWRfZmxhZ3M7CiAKIAkvKgotCSAqIEZJWE1FOiBzaG91bGRuJ3QgaW52b2tlIGl0IHRoaXMgd2F5IGJlY2F1c2UgYWxsIG90aGVyIGNvbnRlbnRzCi0JICoJICBvZiBic3NfY29uZiBpcyBpbnZhbGlkLgorCSAqIENvcHkgYWxsIGRhdGEgd2UgbmVlZCBkdXJpbmcgdGhpcyBhY3Rpb24gdW5kZXIgdGhlIHByb3RlY3Rpb24KKwkgKiBvZiBhIHNwaW5sb2NrLiBPdGhlcndpc2UgcmFjZSBjb25kaXRpb25zIG1pZ2h0IG9jY3VyIHdoaWNoIHJlc3VsdHMKKwkgKiBpbnRvIGFuIGludmFsaWQgY29uZmlndXJhdGlvbi4KIAkgKi8KLQlydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZChydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmludGVyZmFjZS5pZCwKLQkJCQkgICAmYnNzX2NvbmYsIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSk7CisJc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKKworCW1lbWNweSgmY29uZiwgJmludGYtPmNvbmYsIHNpemVvZihjb25mKSk7CisJZGVsYXllZF9mbGFncyA9IGludGYtPmRlbGF5ZWRfZmxhZ3M7CisJaW50Zi0+ZGVsYXllZF9mbGFncyA9IDA7CisKKwlzcGluX3VubG9jaygmaW50Zi0+bG9jayk7CisKKwlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfVVBEQVRFX0JFQUNPTikgeworCQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChydDJ4MDBkZXYtPmh3LCB2aWYsICZjb250cm9sKTsKKwkJaWYgKHNrYiAmJiBydDJ4MDBkZXYtPm9wcy0+aHctPmJlYWNvbl91cGRhdGUocnQyeDAwZGV2LT5odywKKwkJCQkJCQkgICAgIHNrYiwgJmNvbnRyb2wpKQorCQkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKworCWlmIChkZWxheWVkX2ZsYWdzICYgREVMQVlFRF9DT05GSUdfRVJQKQorCQlydDJ4MDBsaWJfY29uZmlnX2VycChydDJ4MDBkZXYsIGludGYsICZpbnRmLT5jb25mKTsKKworCWlmIChkZWxheWVkX2ZsYWdzICYgREVMQVlFRF9MRURfQVNTT0MpCisJCXJ0MngwMGxlZHNfbGVkX2Fzc29jKHJ0MngwMGRldiwgISFydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgaW50Zl93b3JrKTsKKworCS8qCisJICogSXRlcmF0ZSBvdmVyIGVhY2ggaW50ZXJmYWNlIGFuZCBwZXJmb3JtIHRoZQorCSAqIHJlcXVlc3RlZCBjb25maWd1cmF0aW9ucy4KKwkgKi8KKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhydDJ4MDBkZXYtPmh3LAorCQkJCQkgICAgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkX2l0ZXIsCisJCQkJCSAgICBydDJ4MDBkZXYpOwogfQogCiAvKgogICogSW50ZXJydXB0IGNvbnRleHQgaGFuZGxlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9iZWFjb25kb25lX3NjaGVkdWxlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYmVhY29uZG9uZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KLQkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydDJ4MDBfZGV2LCBiZWFjb25fd29yayk7Ci0Jc3RydWN0IGRhdGFfcmluZyAqcmluZyA9Ci0JICAgIHJ0MngwMGxpYl9nZXRfcmluZyhydDJ4MDBkZXYsIElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04pOwotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSA9IHJ0MngwMF9nZXRfZGF0YV9lbnRyeShyaW5nKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChydDJ4MDBkZXYtPmh3LAotCQkJCSAgIHJ0MngwMGRldi0+aW50ZXJmYWNlLmlkLAotCQkJCSAgICZlbnRyeS0+dHhfc3RhdHVzLmNvbnRyb2wpOwotCWlmICghc2tiKQorCWlmICh2aWYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYKKwkgICAgdmlmLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCiAJCXJldHVybjsKIAotCXJ0MngwMGRldi0+b3BzLT5ody0+YmVhY29uX3VwZGF0ZShydDJ4MDBkZXYtPmh3LCBza2IsCi0JCQkJCSAgJmVudHJ5LT50eF9zdGF0dXMuY29udHJvbCk7Ci0KLQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKKwlpbnRmLT5kZWxheWVkX2ZsYWdzIHw9IERFTEFZRURfVVBEQVRFX0JFQUNPTjsKKwlzcGluX3VubG9jaygmaW50Zi0+bG9jayk7CiB9CiAKIHZvaWQgcnQyeDAwbGliX2JlYWNvbmRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTUyMywxMTYgKzQ4MSwxNDAgQEAKIAlpZiAoIXRlc3RfYml0KERFVklDRV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKIAotCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT5iZWFjb25fd29yayk7CisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMocnQyeDAwZGV2LT5odywKKwkJCQkJICAgIHJ0MngwMGxpYl9iZWFjb25kb25lX2l0ZXIsCisJCQkJCSAgICBydDJ4MDBkZXYpOworCisJcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPmludGZfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfYmVhY29uZG9uZSk7CiAKLXZvaWQgcnQyeDAwbGliX3R4ZG9uZShzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnksCi0JCSAgICAgIGNvbnN0IGludCBzdGF0dXMsIGNvbnN0IGludCByZXRyeSkKK3ZvaWQgcnQyeDAwbGliX3R4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkgICAgICBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnJpbmctPnJ0MngwMGRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqdHhfc3RhdHVzID0gJmVudHJ5LT50eF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzID0gJnJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzOwotCWludCBzdWNjZXNzID0gISEoc3RhdHVzID09IFRYX1NVQ0NFU1MgfHwgc3RhdHVzID09IFRYX1NVQ0NFU1NfUkVUUlkpOwotCWludCBmYWlsID0gISEoc3RhdHVzID09IFRYX0ZBSUxfUkVUUlkgfHwgc3RhdHVzID09IFRYX0ZBSUxfSU5WQUxJRCB8fAotCQkgICAgICBzdGF0dXMgPT0gVFhfRkFJTF9PVEhFUik7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyB0eF9zdGF0dXM7CisJaW50IHN1Y2Nlc3MgPSAhISh0eGRlc2MtPnN0YXR1cyA9PSBUWF9TVUNDRVNTIHx8CisJCQkgdHhkZXNjLT5zdGF0dXMgPT0gVFhfU1VDQ0VTU19SRVRSWSk7CisJaW50IGZhaWwgPSAhISh0eGRlc2MtPnN0YXR1cyA9PSBUWF9GQUlMX1JFVFJZIHx8CisJCSAgICAgIHR4ZGVzYy0+c3RhdHVzID09IFRYX0ZBSUxfSU5WQUxJRCB8fAorCQkgICAgICB0eGRlc2MtPnN0YXR1cyA9PSBUWF9GQUlMX09USEVSKTsKIAogCS8qCiAJICogVXBkYXRlIFRYIHN0YXRpc3RpY3MuCiAJICovCi0JdHhfc3RhdHVzLT5mbGFncyA9IDA7Ci0JdHhfc3RhdHVzLT5hY2tfc2lnbmFsID0gMDsKLQl0eF9zdGF0dXMtPmV4Y2Vzc2l2ZV9yZXRyaWVzID0gKHN0YXR1cyA9PSBUWF9GQUlMX1JFVFJZKTsKLQl0eF9zdGF0dXMtPnJldHJ5X2NvdW50ID0gcmV0cnk7CiAJcnQyeDAwZGV2LT5saW5rLnF1YWwudHhfc3VjY2VzcyArPSBzdWNjZXNzOwotCXJ0MngwMGRldi0+bGluay5xdWFsLnR4X2ZhaWxlZCArPSByZXRyeSArIGZhaWw7CisJcnQyeDAwZGV2LT5saW5rLnF1YWwudHhfZmFpbGVkICs9IHR4ZGVzYy0+cmV0cnkgKyBmYWlsOwogCi0JaWYgKCEodHhfc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX05PX0FDSykpIHsKKwkvKgorCSAqIEluaXRpYWxpemUgVFggc3RhdHVzCisJICovCisJdHhfc3RhdHVzLmZsYWdzID0gMDsKKwl0eF9zdGF0dXMuYWNrX3NpZ25hbCA9IDA7CisJdHhfc3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gKHR4ZGVzYy0+c3RhdHVzID09IFRYX0ZBSUxfUkVUUlkpOworCXR4X3N0YXR1cy5yZXRyeV9jb3VudCA9IHR4ZGVzYy0+cmV0cnk7CisJbWVtY3B5KCZ0eF9zdGF0dXMuY29udHJvbCwgdHhkZXNjLT5jb250cm9sLCBzaXplb2YoKnR4ZGVzYy0+Y29udHJvbCkpOworCisJaWYgKCEodHhfc3RhdHVzLmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSkgewogCQlpZiAoc3VjY2VzcykKLQkJCXR4X3N0YXR1cy0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7CisJCQl0eF9zdGF0dXMuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRVU19BQ0s7CiAJCWVsc2UKLQkJCXN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVDb3VudCsrOworCQkJcnQyeDAwZGV2LT5sb3dfbGV2ZWxfc3RhdHMuZG90MTFBQ0tGYWlsdXJlQ291bnQrKzsKIAl9CiAKLQl0eF9zdGF0dXMtPnF1ZXVlX2xlbmd0aCA9IGVudHJ5LT5yaW5nLT5zdGF0cy5saW1pdDsKLQl0eF9zdGF0dXMtPnF1ZXVlX251bWJlciA9IHR4X3N0YXR1cy0+Y29udHJvbC5xdWV1ZTsKKwl0eF9zdGF0dXMucXVldWVfbGVuZ3RoID0gZW50cnktPnF1ZXVlLT5saW1pdDsKKwl0eF9zdGF0dXMucXVldWVfbnVtYmVyID0gdHhfc3RhdHVzLmNvbnRyb2wucXVldWU7CiAKLQlpZiAodHhfc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSB7CisJaWYgKHR4X3N0YXR1cy5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSB7CiAJCWlmIChzdWNjZXNzKQotCQkJc3RhdHMtPmRvdDExUlRTU3VjY2Vzc0NvdW50Kys7CisJCQlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMVJUU1N1Y2Nlc3NDb3VudCsrOwogCQllbHNlCi0JCQlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291bnQrKzsKKwkJCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExUlRTRmFpbHVyZUNvdW50Kys7CiAJfQogCiAJLyoKLQkgKiBTZW5kIHRoZSB0eF9zdGF0dXMgdG8gbWFjODAyMTEgJiBkZWJ1Z2ZzLgotCSAqIG1hYzgwMjExIHdpbGwgY2xlYW4gdXAgdGhlIHNrYiBzdHJ1Y3R1cmUuCisJICogU2VuZCB0aGUgdHhfc3RhdHVzIHRvIGRlYnVnZnMuIE9ubHkgc2VuZCB0aGUgc3RhdHVzIHJlcG9ydAorCSAqIHRvIG1hYzgwMjExIHdoZW4gdGhlIGZyYW1lIG9yaWdpbmF0ZWQgZnJvbSB0aGVyZS4gSWYgdGhpcyB3YXMKKwkgKiBhIGV4dHJhIGZyYW1lIGNvbWluZyB0aHJvdWdoIGEgbWFjODAyMTEgbGlicmFyeSBjYWxsIChSVFMvQ1RTKQorCSAqIHRoZW4gd2Ugc2hvdWxkIG5vdCBzZW5kIHRoZSBzdGF0dXMgcmVwb3J0IGJhY2suCisJICogSWYgc2VuZCB0byBtYWM4MDIxMSwgbWFjODAyMTEgd2lsbCBjbGVhbiB1cCB0aGUgc2tiIHN0cnVjdHVyZSwKKwkgKiBvdGhlcndpc2Ugd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWxmLgogCSAqLwotCWdldF9za2JfZGVzYyhlbnRyeS0+c2tiKS0+ZnJhbWVfdHlwZSA9IERVTVBfRlJBTUVfVFhET05FOworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CisJc2tiZGVzYy0+ZnJhbWVfdHlwZSA9IERVTVBfRlJBTUVfVFhET05FOworCiAJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIGVudHJ5LT5za2IpOwotCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiLCB0eF9zdGF0dXMpOworCisJaWYgKCEoc2tiZGVzYy0+ZmxhZ3MgJiBGUkFNRV9ERVNDX0RSSVZFUl9HRU5FUkFURUQpKQorCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocnQyeDAwZGV2LT5odywKKwkJCQkJICAgIGVudHJ5LT5za2IsICZ0eF9zdGF0dXMpOworCWVsc2UKKwkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKIAllbnRyeS0+c2tiID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl90eGRvbmUpOwogCi12b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICBzdHJ1Y3QgcnhkYXRhX2VudHJ5X2Rlc2MgKmRlc2MpCit2b2lkIHJ0MngwMGxpYl9yeGRvbmUoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJICAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpCiB7Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5yaW5nLT5ydDJ4MDBkZXY7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSAmcnQyeDAwZGV2LT5yeF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqcmF0ZTsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgdmFsID0gMDsKKwlpbnQgaWR4ID0gLTE7CiAJdTE2IGZjOwogCiAJLyoKIAkgKiBVcGRhdGUgUlggc3RhdGlzdGljcy4KIAkgKi8KLQltb2RlID0gJnJ0MngwMGRldi0+aHdtb2Rlc1tydDJ4MDBkZXYtPmN1cnJfaHdtb2RlXTsKLQlmb3IgKGkgPSAwOyBpIDwgbW9kZS0+bnVtX3JhdGVzOyBpKyspIHsKLQkJcmF0ZSA9ICZtb2RlLT5yYXRlc1tpXTsKKwlzYmFuZCA9ICZydDJ4MDBkZXYtPmJhbmRzW3J0MngwMGRldi0+Y3Vycl9iYW5kXTsKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlyYXRlID0gcnQyeDAwX2dldF9yYXRlKHNiYW5kLT5iaXRyYXRlc1tpXS5od192YWx1ZSk7CiAKLQkJLyoKLQkJICogV2hlbiBmcmFtZSB3YXMgcmVjZWl2ZWQgd2l0aCBhbiBPRkRNIGJpdHJhdGUsCi0JCSAqIHRoZSBzaWduYWwgaXMgdGhlIFBMQ1AgdmFsdWUuIElmIGl0IHdhcyByZWNlaXZlZCB3aXRoCi0JCSAqIGEgQ0NLIGJpdHJhdGUgdGhlIHNpZ25hbCBpcyB0aGUgcmF0ZSBpbiAwLjVrYml0L3MuCi0JCSAqLwotCQlpZiAoIWRlc2MtPm9mZG0pCi0JCQl2YWwgPSBERVZJQ0VfR0VUX1JBVEVfRklFTEQocmF0ZS0+dmFsLCBSQVRFKTsKLQkJZWxzZQotCQkJdmFsID0gREVWSUNFX0dFVF9SQVRFX0ZJRUxEKHJhdGUtPnZhbCwgUExDUCk7Ci0KLQkJaWYgKHZhbCA9PSBkZXNjLT5zaWduYWwpIHsKLQkJCXZhbCA9IHJhdGUtPnZhbDsKKwkJaWYgKCgocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX1BMQ1ApICYmCisJCSAgICAgKHJhdGUtPnBsY3AgPT0gcnhkZXNjLT5zaWduYWwpKSB8fAorCQkgICAgKCEocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX1BMQ1ApICYmCisJCSAgICAgIChyYXRlLT5iaXRyYXRlID09IHJ4ZGVzYy0+c2lnbmFsKSkpIHsKKwkJCWlkeCA9IGk7CiAJCQlicmVhazsKIAkJfQogCX0KIAorCWlmIChpZHggPCAwKSB7CisJCVdBUk5JTkcocnQyeDAwZGV2LCAiRnJhbWUgcmVjZWl2ZWQgd2l0aCB1bnJlY29nbml6ZWQgc2lnbmFsLCIKKwkJCSJzaWduYWw9MHglLjJ4LCBwbGNwPSVkLlxuIiwgcnhkZXNjLT5zaWduYWwsCisJCQkhIShyeGRlc2MtPmRldl9mbGFncyAmIFJYRE9ORV9TSUdOQUxfUExDUCkpOworCQlpZHggPSAwOworCX0KKwogCS8qCiAJICogT25seSB1cGRhdGUgbGluayBzdGF0dXMgaWYgdGhpcyBpcyBhIGJlYWNvbiBmcmFtZSBjYXJyeWluZyBvdXIgYnNzaWQuCiAJICovCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyKilza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JaWYgKGlzX2JlYWNvbihmYykgJiYgZGVzYy0+bXlfYnNzKQotCQlydDJ4MDBsaWJfdXBkYXRlX2xpbmtfc3RhdHMoJnJ0MngwMGRldi0+bGluaywgZGVzYy0+cnNzaSk7CisJaWYgKGlzX2JlYWNvbihmYykgJiYgKHJ4ZGVzYy0+ZGV2X2ZsYWdzICYgUlhET05FX01ZX0JTUykpCisJCXJ0MngwMGxpYl91cGRhdGVfbGlua19zdGF0cygmcnQyeDAwZGV2LT5saW5rLCByeGRlc2MtPnJzc2kpOwogCiAJcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfc3VjY2VzcysrOwogCi0Jcnhfc3RhdHVzLT5yYXRlID0gdmFsOworCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBpZHg7CiAJcnhfc3RhdHVzLT5zaWduYWwgPQotCSAgICBydDJ4MDBsaWJfY2FsY3VsYXRlX2xpbmtfc2lnbmFsKHJ0MngwMGRldiwgZGVzYy0+cnNzaSk7Ci0Jcnhfc3RhdHVzLT5zc2kgPSBkZXNjLT5yc3NpOwotCXJ4X3N0YXR1cy0+ZmxhZyA9IGRlc2MtPmZsYWdzOworCSAgICBydDJ4MDBsaWJfY2FsY3VsYXRlX2xpbmtfc2lnbmFsKHJ0MngwMGRldiwgcnhkZXNjLT5yc3NpKTsKKwlyeF9zdGF0dXMtPnNzaSA9IHJ4ZGVzYy0+cnNzaTsKKwlyeF9zdGF0dXMtPmZsYWcgPSByeGRlc2MtPmZsYWdzOwogCXJ4X3N0YXR1cy0+YW50ZW5uYSA9IHJ0MngwMGRldi0+bGluay5hbnQuYWN0aXZlLnJ4OwogCiAJLyoKLQkgKiBTZW5kIGZyYW1lIHRvIG1hYzgwMjExICYgZGVidWdmcworCSAqIFNlbmQgZnJhbWUgdG8gbWFjODAyMTEgJiBkZWJ1Z2ZzLgorCSAqIG1hYzgwMjExIHdpbGwgY2xlYW4gdXAgdGhlIHNrYiBzdHJ1Y3R1cmUuCiAJICovCi0JZ2V0X3NrYl9kZXNjKHNrYiktPmZyYW1lX3R5cGUgPSBEVU1QX0ZSQU1FX1JYRE9ORTsKLQlydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHJ0MngwMGRldiwgc2tiKTsKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShydDJ4MDBkZXYtPmh3LCBza2IsIHJ4X3N0YXR1cyk7CisJZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpLT5mcmFtZV90eXBlID0gRFVNUF9GUkFNRV9SWERPTkU7CisJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIGVudHJ5LT5za2IpOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKHJ0MngwMGRldi0+aHcsIGVudHJ5LT5za2IsIHJ4X3N0YXR1cyk7CisJZW50cnktPnNrYiA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfcnhkb25lKTsKIApAQCAtNjQzLDgzICs2MjUsNjkgQEAKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQogewotCXN0cnVjdCB0eGRhdGFfZW50cnlfZGVzYyBkZXNjOwotCXN0cnVjdCBza2JfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZGVzYyhza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICppZWVlODAyMTFoZHIgPSBza2JkZXNjLT5kYXRhOworCXN0cnVjdCB0eGVudHJ5X2Rlc2MgdHhkZXNjOworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2JkZXNjLT5kYXRhOworCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqcmF0ZTsKIAlpbnQgdHhfcmF0ZTsKLQlpbnQgYml0cmF0ZTsKIAlpbnQgbGVuZ3RoOwogCWludCBkdXJhdGlvbjsKIAlpbnQgcmVzaWR1YWw7CiAJdTE2IGZyYW1lX2NvbnRyb2w7CiAJdTE2IHNlcV9jdHJsOwogCi0JbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCW1lbXNldCgmdHhkZXNjLCAwLCBzaXplb2YodHhkZXNjKSk7CiAKLQlkZXNjLmN3X21pbiA9IHNrYmRlc2MtPnJpbmctPnR4X3BhcmFtcy5jd19taW47Ci0JZGVzYy5jd19tYXggPSBza2JkZXNjLT5yaW5nLT50eF9wYXJhbXMuY3dfbWF4OwotCWRlc2MuYWlmcyA9IHNrYmRlc2MtPnJpbmctPnR4X3BhcmFtcy5haWZzOwotCi0JLyoKLQkgKiBJZGVudGlmeSBxdWV1ZQotCSAqLwotCWlmIChjb250cm9sLT5xdWV1ZSA8IHJ0MngwMGRldi0+aHctPnF1ZXVlcykKLQkJZGVzYy5xdWV1ZSA9IGNvbnRyb2wtPnF1ZXVlOwotCWVsc2UgaWYgKGNvbnRyb2wtPnF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04gfHwKLQkJIGNvbnRyb2wtPnF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9BRlRFUl9CRUFDT04pCi0JCWRlc2MucXVldWUgPSBRVUVVRV9NR01UOwotCWVsc2UKLQkJZGVzYy5xdWV1ZSA9IFFVRVVFX09USEVSOworCXR4ZGVzYy5xdWV1ZSA9IHNrYmRlc2MtPmVudHJ5LT5xdWV1ZS0+cWlkOworCXR4ZGVzYy5jd19taW4gPSBza2JkZXNjLT5lbnRyeS0+cXVldWUtPmN3X21pbjsKKwl0eGRlc2MuY3dfbWF4ID0gc2tiZGVzYy0+ZW50cnktPnF1ZXVlLT5jd19tYXg7CisJdHhkZXNjLmFpZnMgPSBza2JkZXNjLT5lbnRyeS0+cXVldWUtPmFpZnM7CiAKIAkvKgogCSAqIFJlYWQgcmVxdWlyZWQgZmllbGRzIGZyb20gaWVlZTgwMjExIGhlYWRlci4KIAkgKi8KLQlmcmFtZV9jb250cm9sID0gbGUxNl90b19jcHUoaWVlZTgwMjExaGRyLT5mcmFtZV9jb250cm9sKTsKLQlzZXFfY3RybCA9IGxlMTZfdG9fY3B1KGllZWU4MDIxMWhkci0+c2VxX2N0cmwpOworCWZyYW1lX2NvbnRyb2wgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXNlcV9jdHJsID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAKLQl0eF9yYXRlID0gY29udHJvbC0+dHhfcmF0ZTsKKwl0eF9yYXRlID0gY29udHJvbC0+dHhfcmF0ZS0+aHdfdmFsdWU7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBmcmFtZSBpcyB0byBiZSBhY2tlZAogCSAqLwogCWlmICghKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX05PX0FDSykpCi0JCV9fc2V0X2JpdChFTlRSWV9UWERfQUNLLCAmZGVzYy5mbGFncyk7CisJCV9fc2V0X2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLmZsYWdzKTsKIAogCS8qCiAJICogQ2hlY2sgaWYgdGhpcyBpcyBhIFJUUy9DVFMgZnJhbWUKIAkgKi8KIAlpZiAoaXNfcnRzX2ZyYW1lKGZyYW1lX2NvbnRyb2wpIHx8IGlzX2N0c19mcmFtZShmcmFtZV9jb250cm9sKSkgewotCQlfX3NldF9iaXQoRU5UUllfVFhEX0JVUlNULCAmZGVzYy5mbGFncyk7CisJCV9fc2V0X2JpdChFTlRSWV9UWERfQlVSU1QsICZ0eGRlc2MuZmxhZ3MpOwogCQlpZiAoaXNfcnRzX2ZyYW1lKGZyYW1lX2NvbnRyb2wpKSB7Ci0JCQlfX3NldF9iaXQoRU5UUllfVFhEX1JUU19GUkFNRSwgJmRlc2MuZmxhZ3MpOwotCQkJX19zZXRfYml0KEVOVFJZX1RYRF9BQ0ssICZkZXNjLmZsYWdzKTsKKwkJCV9fc2V0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLmZsYWdzKTsKKwkJCV9fc2V0X2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLmZsYWdzKTsKIAkJfSBlbHNlCi0JCQlfX2NsZWFyX2JpdChFTlRSWV9UWERfQUNLLCAmZGVzYy5mbGFncyk7CisJCQlfX2NsZWFyX2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLmZsYWdzKTsKIAkJaWYgKGNvbnRyb2wtPnJ0c19jdHNfcmF0ZSkKLQkJCXR4X3JhdGUgPSBjb250cm9sLT5ydHNfY3RzX3JhdGU7CisJCQl0eF9yYXRlID0gY29udHJvbC0+cnRzX2N0c19yYXRlLT5od192YWx1ZTsKIAl9CiAKLQkvKgotCSAqIENoZWNrIGZvciBPRkRNCi0JICovCi0JaWYgKERFVklDRV9HRVRfUkFURV9GSUVMRCh0eF9yYXRlLCBSQVRFTUFTSykgJiBERVZfT0ZETV9SQVRFTUFTSykKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZkZXNjLmZsYWdzKTsKKwlyYXRlID0gcnQyeDAwX2dldF9yYXRlKHR4X3JhdGUpOwogCiAJLyoKIAkgKiBDaGVjayBpZiBtb3JlIGZyYWdtZW50cyBhcmUgcGVuZGluZwogCSAqLwotCWlmIChpZWVlODAyMTFfZ2V0X21vcmVmcmFnKGllZWU4MDIxMWhkcikpIHsKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9CVVJTVCwgJmRlc2MuZmxhZ3MpOwotCQlfX3NldF9iaXQoRU5UUllfVFhEX01PUkVfRlJBRywgJmRlc2MuZmxhZ3MpOworCWlmIChpZWVlODAyMTFfZ2V0X21vcmVmcmFnKGhkcikpIHsKKwkJX19zZXRfYml0KEVOVFJZX1RYRF9CVVJTVCwgJnR4ZGVzYy5mbGFncyk7CisJCV9fc2V0X2JpdChFTlRSWV9UWERfTU9SRV9GUkFHLCAmdHhkZXNjLmZsYWdzKTsKIAl9CiAKIAkvKgogCSAqIEJlYWNvbnMgYW5kIHByb2JlIHJlc3BvbnNlcyByZXF1aXJlIHRoZSB0c2YgdGltZXN0YW1wCiAJICogdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgZnJhbWUuCiAJICovCi0JaWYgKGNvbnRyb2wtPnF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04gfHwKKwlpZiAoY29udHJvbC0+cXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04gfHwKIAkgICAgaXNfcHJvYmVfcmVzcChmcmFtZV9jb250cm9sKSkKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmZGVzYy5mbGFncyk7CisJCV9fc2V0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy5mbGFncyk7CiAKIAkvKgogCSAqIERldGVybWluZSB3aXRoIHdoYXQgSUZTIHByaW9yaXR5IHRoaXMgZnJhbWUgc2hvdWxkIGJlIHNlbmQuCkBAIC03MjcsMzAgKzY5NSwzMCBAQAogCSAqIG9yIHRoaXMgZnJhZ21lbnQgY2FtZSBhZnRlciBSVFMvQ1RTLgogCSAqLwogCWlmICgoc2VxX2N0cmwgJiBJRUVFODAyMTFfU0NUTF9GUkFHKSA+IDAgfHwKLQkgICAgdGVzdF9iaXQoRU5UUllfVFhEX1JUU19GUkFNRSwgJmRlc2MuZmxhZ3MpKQotCQlkZXNjLmlmcyA9IElGU19TSUZTOworCSAgICB0ZXN0X2JpdChFTlRSWV9UWERfUlRTX0ZSQU1FLCAmdHhkZXNjLmZsYWdzKSkKKwkJdHhkZXNjLmlmcyA9IElGU19TSUZTOwogCWVsc2UKLQkJZGVzYy5pZnMgPSBJRlNfQkFDS09GRjsKKwkJdHhkZXNjLmlmcyA9IElGU19CQUNLT0ZGOwogCiAJLyoKIAkgKiBQTENQIHNldHVwCiAJICogTGVuZ3RoIGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gT0ZETS9DQ0sgcmF0ZS4KIAkgKi8KLQlkZXNjLnNpZ25hbCA9IERFVklDRV9HRVRfUkFURV9GSUVMRCh0eF9yYXRlLCBQTENQKTsKLQlkZXNjLnNlcnZpY2UgPSAweDA0OworCXR4ZGVzYy5zaWduYWwgPSByYXRlLT5wbGNwOworCXR4ZGVzYy5zZXJ2aWNlID0gMHgwNDsKIAogCWxlbmd0aCA9IHNrYmRlc2MtPmRhdGFfbGVuICsgRkNTX0xFTjsKLQlpZiAodGVzdF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJmRlc2MuZmxhZ3MpKSB7Ci0JCWRlc2MubGVuZ3RoX2hpZ2ggPSAobGVuZ3RoID4+IDYpICYgMHgzZjsKLQkJZGVzYy5sZW5ndGhfbG93ID0gbGVuZ3RoICYgMHgzZjsKLQl9IGVsc2UgewotCQliaXRyYXRlID0gREVWSUNFX0dFVF9SQVRFX0ZJRUxEKHR4X3JhdGUsIFJBVEUpOworCWlmIChyYXRlLT5mbGFncyAmIERFVl9SQVRFX09GRE0pIHsKKwkJX19zZXRfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MuZmxhZ3MpOwogCisJCXR4ZGVzYy5sZW5ndGhfaGlnaCA9IChsZW5ndGggPj4gNikgJiAweDNmOworCQl0eGRlc2MubGVuZ3RoX2xvdyA9IGxlbmd0aCAmIDB4M2Y7CisJfSBlbHNlIHsKIAkJLyoKIAkJICogQ29udmVydCBsZW5ndGggdG8gbWljcm9zZWNvbmRzLgogCQkgKi8KLQkJcmVzaWR1YWwgPSBnZXRfZHVyYXRpb25fcmVzKGxlbmd0aCwgYml0cmF0ZSk7Ci0JCWR1cmF0aW9uID0gZ2V0X2R1cmF0aW9uKGxlbmd0aCwgYml0cmF0ZSk7CisJCXJlc2lkdWFsID0gZ2V0X2R1cmF0aW9uX3JlcyhsZW5ndGgsIHJhdGUtPmJpdHJhdGUpOworCQlkdXJhdGlvbiA9IGdldF9kdXJhdGlvbihsZW5ndGgsIHJhdGUtPmJpdHJhdGUpOwogCiAJCWlmIChyZXNpZHVhbCAhPSAwKSB7CiAJCQlkdXJhdGlvbisrOwpAQCAtNzU4LDI4ICs3MjYsMjcgQEAKIAkJCS8qCiAJCQkgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgTGVuZ3RoIEV4dGVuc2lvbgogCQkJICovCi0JCQlpZiAoYml0cmF0ZSA9PSAxMTAgJiYgcmVzaWR1YWwgPD0gMzApCi0JCQkJZGVzYy5zZXJ2aWNlIHw9IDB4ODA7CisJCQlpZiAocmF0ZS0+Yml0cmF0ZSA9PSAxMTAgJiYgcmVzaWR1YWwgPD0gMzApCisJCQkJdHhkZXNjLnNlcnZpY2UgfD0gMHg4MDsKIAkJfQogCi0JCWRlc2MubGVuZ3RoX2hpZ2ggPSAoZHVyYXRpb24gPj4gOCkgJiAweGZmOwotCQlkZXNjLmxlbmd0aF9sb3cgPSBkdXJhdGlvbiAmIDB4ZmY7CisJCXR4ZGVzYy5sZW5ndGhfaGlnaCA9IChkdXJhdGlvbiA+PiA4KSAmIDB4ZmY7CisJCXR4ZGVzYy5sZW5ndGhfbG93ID0gZHVyYXRpb24gJiAweGZmOwogCiAJCS8qCiAJCSAqIFdoZW4gcHJlYW1ibGUgaXMgZW5hYmxlZCB3ZSBzaG91bGQgc2V0IHRoZQogCQkgKiBwcmVhbWJsZSBiaXQgZm9yIHRoZSBzaWduYWwuCiAJCSAqLwotCQlpZiAoREVWSUNFX0dFVF9SQVRFX0ZJRUxEKHR4X3JhdGUsIFBSRUFNQkxFKSkKLQkJCWRlc2Muc2lnbmFsIHw9IDB4MDg7CisJCWlmIChydDJ4MDBfZ2V0X3JhdGVfcHJlYW1ibGUodHhfcmF0ZSkpCisJCQl0eGRlc2Muc2lnbmFsIHw9IDB4MDg7CiAJfQogCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+d3JpdGVfdHhfZGVzYyhydDJ4MDBkZXYsIHNrYiwgJmRlc2MsIGNvbnRyb2wpOworCXJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBza2IsICZ0eGRlc2MsIGNvbnRyb2wpOwogCiAJLyoKLQkgKiBVcGRhdGUgcmluZyBlbnRyeS4KKwkgKiBVcGRhdGUgcXVldWUgZW50cnkuCiAJICovCiAJc2tiZGVzYy0+ZW50cnktPnNrYiA9IHNrYjsKLQltZW1jcHkoJnNrYmRlc2MtPmVudHJ5LT50eF9zdGF0dXMuY29udHJvbCwgY29udHJvbCwgc2l6ZW9mKCpjb250cm9sKSk7CiAKIAkvKgogCSAqIFRoZSBmcmFtZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGFuZCByZWFkeQpAQCAtNzk1LDEzMyArNzYyLDE2NyBAQAogLyoKICAqIERyaXZlciBpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KICAqLworY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlIHJ0MngwMF9zdXBwb3J0ZWRfcmF0ZXNbMTJdID0geworCXsKKwkJLmZsYWdzID0gREVWX1JBVEVfQ0NLIHwgREVWX1JBVEVfQkFTSUMsCisJCS5iaXRyYXRlID0gMTAsCisJCS5yYXRlbWFzayA9IEJJVCgwKSwKKwkJLnBsY3AgPSAweDAwLAorCX0sCisJeworCQkuZmxhZ3MgPSBERVZfUkFURV9DQ0sgfCBERVZfUkFURV9TSE9SVF9QUkVBTUJMRSB8IERFVl9SQVRFX0JBU0lDLAorCQkuYml0cmF0ZSA9IDIwLAorCQkucmF0ZW1hc2sgPSBCSVQoMSksCisJCS5wbGNwID0gMHgwMSwKKwl9LAorCXsKKwkJLmZsYWdzID0gREVWX1JBVEVfQ0NLIHwgREVWX1JBVEVfU0hPUlRfUFJFQU1CTEUgfCBERVZfUkFURV9CQVNJQywKKwkJLmJpdHJhdGUgPSA1NSwKKwkJLnJhdGVtYXNrID0gQklUKDIpLAorCQkucGxjcCA9IDB4MDIsCisJfSwKKwl7CisJCS5mbGFncyA9IERFVl9SQVRFX0NDSyB8IERFVl9SQVRFX1NIT1JUX1BSRUFNQkxFIHwgREVWX1JBVEVfQkFTSUMsCisJCS5iaXRyYXRlID0gMTEwLAorCQkucmF0ZW1hc2sgPSBCSVQoMyksCisJCS5wbGNwID0gMHgwMywKKwl9LAorCXsKKwkJLmZsYWdzID0gREVWX1JBVEVfT0ZETSB8IERFVl9SQVRFX0JBU0lDLAorCQkuYml0cmF0ZSA9IDYwLAorCQkucmF0ZW1hc2sgPSBCSVQoNCksCisJCS5wbGNwID0gMHgwYiwKKwl9LAorCXsKKwkJLmZsYWdzID0gREVWX1JBVEVfT0ZETSwKKwkJLmJpdHJhdGUgPSA5MCwKKwkJLnJhdGVtYXNrID0gQklUKDUpLAorCQkucGxjcCA9IDB4MGYsCisJfSwKKwl7CisJCS5mbGFncyA9IERFVl9SQVRFX09GRE0gfCBERVZfUkFURV9CQVNJQywKKwkJLmJpdHJhdGUgPSAxMjAsCisJCS5yYXRlbWFzayA9IEJJVCg2KSwKKwkJLnBsY3AgPSAweDBhLAorCX0sCisJeworCQkuZmxhZ3MgPSBERVZfUkFURV9PRkRNLAorCQkuYml0cmF0ZSA9IDE4MCwKKwkJLnJhdGVtYXNrID0gQklUKDcpLAorCQkucGxjcCA9IDB4MGUsCisJfSwKKwl7CisJCS5mbGFncyA9IERFVl9SQVRFX09GRE0gfCBERVZfUkFURV9CQVNJQywKKwkJLmJpdHJhdGUgPSAyNDAsCisJCS5yYXRlbWFzayA9IEJJVCg4KSwKKwkJLnBsY3AgPSAweDA5LAorCX0sCisJeworCQkuZmxhZ3MgPSBERVZfUkFURV9PRkRNLAorCQkuYml0cmF0ZSA9IDM2MCwKKwkJLnJhdGVtYXNrID0gQklUKDkpLAorCQkucGxjcCA9IDB4MGQsCisJfSwKKwl7CisJCS5mbGFncyA9IERFVl9SQVRFX09GRE0sCisJCS5iaXRyYXRlID0gNDgwLAorCQkucmF0ZW1hc2sgPSBCSVQoMTApLAorCQkucGxjcCA9IDB4MDgsCisJfSwKKwl7CisJCS5mbGFncyA9IERFVl9SQVRFX09GRE0sCisJCS5iaXRyYXRlID0gNTQwLAorCQkucmF0ZW1hc2sgPSBCSVQoMTEpLAorCQkucGxjcCA9IDB4MGMsCisJfSwKK307CisKIHN0YXRpYyB2b2lkIHJ0MngwMGxpYl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqZW50cnksCiAJCQkgICAgICBjb25zdCBpbnQgY2hhbm5lbCwgY29uc3QgaW50IHR4X3Bvd2VyLAogCQkJICAgICAgY29uc3QgaW50IHZhbHVlKQogewotCWVudHJ5LT5jaGFuID0gY2hhbm5lbDsKLQlpZiAoY2hhbm5lbCA8PSAxNCkKLQkJZW50cnktPmZyZXEgPSAyNDA3ICsgKDUgKiBjaGFubmVsKTsKLQllbHNlCi0JCWVudHJ5LT5mcmVxID0gNTAwMCArICg1ICogY2hhbm5lbCk7Ci0JZW50cnktPnZhbCA9IHZhbHVlOwotCWVudHJ5LT5mbGFnID0KLQkgICAgSUVFRTgwMjExX0NIQU5fV19JQlNTIHwKLQkgICAgSUVFRTgwMjExX0NIQU5fV19BQ1RJVkVfU0NBTiB8Ci0JICAgIElFRUU4MDIxMV9DSEFOX1dfU0NBTjsKLQllbnRyeS0+cG93ZXJfbGV2ZWwgPSB0eF9wb3dlcjsKLQllbnRyeS0+YW50ZW5uYV9tYXggPSAweGZmOworCWVudHJ5LT5jZW50ZXJfZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFubmVsKTsKKwllbnRyeS0+aHdfdmFsdWUgPSB2YWx1ZTsKKwllbnRyeS0+bWF4X3Bvd2VyID0gdHhfcG93ZXI7CisJZW50cnktPm1heF9hbnRlbm5hX2dhaW4gPSAweGZmOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDBsaWJfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmVudHJ5LAotCQkJICAgY29uc3QgaW50IHJhdGUsIGNvbnN0IGludCBtYXNrLAotCQkJICAgY29uc3QgaW50IHBsY3AsIGNvbnN0IGludCBmbGFncykKKwkJCSAgIGNvbnN0IHUxNiBpbmRleCwgY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpyYXRlKQogewotCWVudHJ5LT5yYXRlID0gcmF0ZTsKLQllbnRyeS0+dmFsID0KLQkgICAgREVWSUNFX1NFVF9SQVRFX0ZJRUxEKHJhdGUsIFJBVEUpIHwKLQkgICAgREVWSUNFX1NFVF9SQVRFX0ZJRUxEKG1hc2ssIFJBVEVNQVNLKSB8Ci0JICAgIERFVklDRV9TRVRfUkFURV9GSUVMRChwbGNwLCBQTENQKTsKLQllbnRyeS0+ZmxhZ3MgPSBmbGFnczsKLQllbnRyeS0+dmFsMiA9IGVudHJ5LT52YWw7Ci0JaWYgKGVudHJ5LT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1BSRUFNQkxFMikKLQkJZW50cnktPnZhbDIgfD0gREVWSUNFX1NFVF9SQVRFX0ZJRUxEKDEsIFBSRUFNQkxFKTsKLQllbnRyeS0+bWluX3Jzc2lfYWNrID0gMDsKLQllbnRyeS0+bWluX3Jzc2lfYWNrX2RlbHRhID0gMDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCWVudHJ5LT5iaXRyYXRlID0gcmF0ZS0+Yml0cmF0ZTsKKwllbnRyeS0+aHdfdmFsdWUgPSBydDJ4MDBfY3JlYXRlX3JhdGVfaHdfdmFsdWUoaW5kZXgsIDApOworCWVudHJ5LT5od192YWx1ZV9zaG9ydCA9IGVudHJ5LT5od192YWx1ZTsKKworCWlmIChyYXRlLT5mbGFncyAmIERFVl9SQVRFX1NIT1JUX1BSRUFNQkxFKSB7CisJCWVudHJ5LT5mbGFncyB8PSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRTsKKwkJZW50cnktPmh3X3ZhbHVlX3Nob3J0IHw9IHJ0MngwMF9jcmVhdGVfcmF0ZV9od192YWx1ZShpbmRleCwgMSk7CisJfQogfQogCiBzdGF0aWMgaW50IHJ0MngwMGxpYl9wcm9iZV9od19tb2RlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBzdHJ1Y3QgaHdfbW9kZV9zcGVjICpzcGVjKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcnQyeDAwZGV2LT5odzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKmh3bW9kZXM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsczsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzOworCXVuc2lnbmVkIGludCBudW1fcmF0ZXM7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgY2hhciB0eF9wb3dlcjsKIAotCWh3bW9kZXMgPSBremFsbG9jKHNpemVvZigqaHdtb2RlcykgKiBzcGVjLT5udW1fbW9kZXMsIEdGUF9LRVJORUwpOwotCWlmICghaHdtb2RlcykKLQkJZ290byBleGl0OworCW51bV9yYXRlcyA9IDA7CisJaWYgKHNwZWMtPnN1cHBvcnRlZF9yYXRlcyAmIFNVUFBPUlRfUkFURV9DQ0spCisJCW51bV9yYXRlcyArPSA0OworCWlmIChzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgJiBTVVBQT1JUX1JBVEVfT0ZETSkKKwkJbnVtX3JhdGVzICs9IDg7CiAKIAljaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKCpjaGFubmVscykgKiBzcGVjLT5udW1fY2hhbm5lbHMsIEdGUF9LRVJORUwpOwogCWlmICghY2hhbm5lbHMpCi0JCWdvdG8gZXhpdF9mcmVlX21vZGVzOworCQlyZXR1cm4gLUVOT01FTTsKIAotCXJhdGVzID0ga3phbGxvYyhzaXplb2YoKnJhdGVzKSAqIHNwZWMtPm51bV9yYXRlcywgR0ZQX0tFUk5FTCk7CisJcmF0ZXMgPSBremFsbG9jKHNpemVvZigqcmF0ZXMpICogbnVtX3JhdGVzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJhdGVzKQogCQlnb3RvIGV4aXRfZnJlZV9jaGFubmVsczsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBSYXRlIGxpc3QuCiAJICovCi0JcnQyeDAwbGliX3JhdGUoJnJhdGVzWzBdLCAxMCwgREVWX1JBVEVNQVNLXzFNQiwKLQkJICAgICAgIDB4MDAsIElFRUU4MDIxMV9SQVRFX0NDSyk7Ci0JcnQyeDAwbGliX3JhdGUoJnJhdGVzWzFdLCAyMCwgREVWX1JBVEVNQVNLXzJNQiwKLQkJICAgICAgIDB4MDEsIElFRUU4MDIxMV9SQVRFX0NDS18yKTsKLQlydDJ4MDBsaWJfcmF0ZSgmcmF0ZXNbMl0sIDU1LCBERVZfUkFURU1BU0tfNV81TUIsCi0JCSAgICAgICAweDAyLCBJRUVFODAyMTFfUkFURV9DQ0tfMik7Ci0JcnQyeDAwbGliX3JhdGUoJnJhdGVzWzNdLCAxMTAsIERFVl9SQVRFTUFTS18xMU1CLAotCQkgICAgICAgMHgwMywgSUVFRTgwMjExX1JBVEVfQ0NLXzIpOwotCi0JaWYgKHNwZWMtPm51bV9yYXRlcyA+IDQpIHsKLQkJcnQyeDAwbGliX3JhdGUoJnJhdGVzWzRdLCA2MCwgREVWX1JBVEVNQVNLXzZNQiwKLQkJCSAgICAgICAweDBiLCBJRUVFODAyMTFfUkFURV9PRkRNKTsKLQkJcnQyeDAwbGliX3JhdGUoJnJhdGVzWzVdLCA5MCwgREVWX1JBVEVNQVNLXzlNQiwKLQkJCSAgICAgICAweDBmLCBJRUVFODAyMTFfUkFURV9PRkRNKTsKLQkJcnQyeDAwbGliX3JhdGUoJnJhdGVzWzZdLCAxMjAsIERFVl9SQVRFTUFTS18xMk1CLAotCQkJICAgICAgIDB4MGEsIElFRUU4MDIxMV9SQVRFX09GRE0pOwotCQlydDJ4MDBsaWJfcmF0ZSgmcmF0ZXNbN10sIDE4MCwgREVWX1JBVEVNQVNLXzE4TUIsCi0JCQkgICAgICAgMHgwZSwgSUVFRTgwMjExX1JBVEVfT0ZETSk7Ci0JCXJ0MngwMGxpYl9yYXRlKCZyYXRlc1s4XSwgMjQwLCBERVZfUkFURU1BU0tfMjRNQiwKLQkJCSAgICAgICAweDA5LCBJRUVFODAyMTFfUkFURV9PRkRNKTsKLQkJcnQyeDAwbGliX3JhdGUoJnJhdGVzWzldLCAzNjAsIERFVl9SQVRFTUFTS18zNk1CLAotCQkJICAgICAgIDB4MGQsIElFRUU4MDIxMV9SQVRFX09GRE0pOwotCQlydDJ4MDBsaWJfcmF0ZSgmcmF0ZXNbMTBdLCA0ODAsIERFVl9SQVRFTUFTS180OE1CLAotCQkJICAgICAgIDB4MDgsIElFRUU4MDIxMV9SQVRFX09GRE0pOwotCQlydDJ4MDBsaWJfcmF0ZSgmcmF0ZXNbMTFdLCA1NDAsIERFVl9SQVRFTUFTS181NE1CLAotCQkJICAgICAgIDB4MGMsIElFRUU4MDIxMV9SQVRFX09GRE0pOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JhdGVzOyBpKyspCisJCXJ0MngwMGxpYl9yYXRlKCZyYXRlc1tpXSwgaSwgcnQyeDAwX2dldF9yYXRlKGkpKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBDaGFubmVsIGxpc3QuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9jaGFubmVsczsgaSsrKSB7Ci0JCWlmIChzcGVjLT5jaGFubmVsc1tpXS5jaGFubmVsIDw9IDE0KQotCQkJdHhfcG93ZXIgPSBzcGVjLT50eF9wb3dlcl9iZ1tpXTsKLQkJZWxzZSBpZiAoc3BlYy0+dHhfcG93ZXJfYSkKLQkJCXR4X3Bvd2VyID0gc3BlYy0+dHhfcG93ZXJfYVtpXTsKLQkJZWxzZQotCQkJdHhfcG93ZXIgPSBzcGVjLT50eF9wb3dlcl9kZWZhdWx0OworCQlpZiAoc3BlYy0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA8PSAxNCkgeworCQkJaWYgKHNwZWMtPnR4X3Bvd2VyX2JnKQorCQkJCXR4X3Bvd2VyID0gc3BlYy0+dHhfcG93ZXJfYmdbaV07CisJCQllbHNlCisJCQkJdHhfcG93ZXIgPSBzcGVjLT50eF9wb3dlcl9kZWZhdWx0OworCQl9IGVsc2UgeworCQkJaWYgKHNwZWMtPnR4X3Bvd2VyX2EpCisJCQkJdHhfcG93ZXIgPSBzcGVjLT50eF9wb3dlcl9hW2ldOworCQkJZWxzZQorCQkJCXR4X3Bvd2VyID0gc3BlYy0+dHhfcG93ZXJfZGVmYXVsdDsKKwkJfQogCiAJCXJ0MngwMGxpYl9jaGFubmVsKCZjaGFubmVsc1tpXSwKIAkJCQkgIHNwZWMtPmNoYW5uZWxzW2ldLmNoYW5uZWwsIHR4X3Bvd2VyLCBpKTsKIAl9CiAKIAkvKgotCSAqIEludGl0aWFsaXplIDgwMi4xMWIKLQkgKiBSYXRlczogQ0NLLgotCSAqIENoYW5uZWxzOiBPRkRNLgotCSAqLwotCWlmIChzcGVjLT5udW1fbW9kZXMgPiBIV01PREVfQikgewotCQlod21vZGVzW0hXTU9ERV9CXS5tb2RlID0gTU9ERV9JRUVFODAyMTFCOwotCQlod21vZGVzW0hXTU9ERV9CXS5udW1fY2hhbm5lbHMgPSAxNDsKLQkJaHdtb2Rlc1tIV01PREVfQl0ubnVtX3JhdGVzID0gNDsKLQkJaHdtb2Rlc1tIV01PREVfQl0uY2hhbm5lbHMgPSBjaGFubmVsczsKLQkJaHdtb2Rlc1tIV01PREVfQl0ucmF0ZXMgPSByYXRlczsKLQl9Ci0KLQkvKgotCSAqIEludGl0aWFsaXplIDgwMi4xMWcKKwkgKiBJbnRpdGlhbGl6ZSA4MDIuMTFiLCA4MDIuMTFnCiAJICogUmF0ZXM6IENDSywgT0ZETS4KLQkgKiBDaGFubmVsczogT0ZETS4KKwkgKiBDaGFubmVsczogMi40IEdIegogCSAqLwotCWlmIChzcGVjLT5udW1fbW9kZXMgPiBIV01PREVfRykgewotCQlod21vZGVzW0hXTU9ERV9HXS5tb2RlID0gTU9ERV9JRUVFODAyMTFHOwotCQlod21vZGVzW0hXTU9ERV9HXS5udW1fY2hhbm5lbHMgPSAxNDsKLQkJaHdtb2Rlc1tIV01PREVfR10ubnVtX3JhdGVzID0gc3BlYy0+bnVtX3JhdGVzOwotCQlod21vZGVzW0hXTU9ERV9HXS5jaGFubmVscyA9IGNoYW5uZWxzOwotCQlod21vZGVzW0hXTU9ERV9HXS5yYXRlcyA9IHJhdGVzOworCWlmIChzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgJiBTVVBQT1JUX0JBTkRfMkdIWikgeworCQlydDJ4MDBkZXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMgPSAxNDsKKwkJcnQyeDAwZGV2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzID0gbnVtX3JhdGVzOworCQlydDJ4MDBkZXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0gY2hhbm5lbHM7CisJCXJ0MngwMGRldi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYml0cmF0ZXMgPSByYXRlczsKKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9CisJCSAgICAmcnQyeDAwZGV2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKIAl9CiAKIAkvKgpAQCAtOTI5LDQwICs5MzAsMjEgQEAKIAkgKiBSYXRlczogT0ZETS4KIAkgKiBDaGFubmVsczogT0ZETSwgVU5JSSwgSGlwZXJMQU4yLgogCSAqLwotCWlmIChzcGVjLT5udW1fbW9kZXMgPiBIV01PREVfQSkgewotCQlod21vZGVzW0hXTU9ERV9BXS5tb2RlID0gTU9ERV9JRUVFODAyMTFBOwotCQlod21vZGVzW0hXTU9ERV9BXS5udW1fY2hhbm5lbHMgPSBzcGVjLT5udW1fY2hhbm5lbHMgLSAxNDsKLQkJaHdtb2Rlc1tIV01PREVfQV0ubnVtX3JhdGVzID0gc3BlYy0+bnVtX3JhdGVzIC0gNDsKLQkJaHdtb2Rlc1tIV01PREVfQV0uY2hhbm5lbHMgPSAmY2hhbm5lbHNbMTRdOwotCQlod21vZGVzW0hXTU9ERV9BXS5yYXRlcyA9ICZyYXRlc1s0XTsKKwlpZiAoc3BlYy0+c3VwcG9ydGVkX2JhbmRzICYgU1VQUE9SVF9CQU5EXzVHSFopIHsKKwkJcnQyeDAwZGV2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID0KKwkJICAgIHNwZWMtPm51bV9jaGFubmVscyAtIDE0OworCQlydDJ4MDBkZXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMgPQorCQkgICAgbnVtX3JhdGVzIC0gNDsKKwkJcnQyeDAwZGV2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5jaGFubmVscyA9ICZjaGFubmVsc1sxNF07CisJCXJ0MngwMGRldi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYml0cmF0ZXMgPSAmcmF0ZXNbNF07CisJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPQorCQkgICAgJnJ0MngwMGRldi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiAJfQogCi0JaWYgKHNwZWMtPm51bV9tb2RlcyA+IEhXTU9ERV9HICYmCi0JICAgIGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoaHcsICZod21vZGVzW0hXTU9ERV9HXSkpCi0JCWdvdG8gZXhpdF9mcmVlX3JhdGVzOwotCi0JaWYgKHNwZWMtPm51bV9tb2RlcyA+IEhXTU9ERV9CICYmCi0JICAgIGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoaHcsICZod21vZGVzW0hXTU9ERV9CXSkpCi0JCWdvdG8gZXhpdF9mcmVlX3JhdGVzOwotCi0JaWYgKHNwZWMtPm51bV9tb2RlcyA+IEhXTU9ERV9BICYmCi0JICAgIGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoaHcsICZod21vZGVzW0hXTU9ERV9BXSkpCi0JCWdvdG8gZXhpdF9mcmVlX3JhdGVzOwotCi0JcnQyeDAwZGV2LT5od21vZGVzID0gaHdtb2RlczsKLQogCXJldHVybiAwOwogCi1leGl0X2ZyZWVfcmF0ZXM6Ci0Ja2ZyZWUocmF0ZXMpOwotCi1leGl0X2ZyZWVfY2hhbm5lbHM6CisgZXhpdF9mcmVlX2NoYW5uZWxzOgogCWtmcmVlKGNoYW5uZWxzKTsKLQotZXhpdF9mcmVlX21vZGVzOgotCWtmcmVlKGh3bW9kZXMpOwotCi1leGl0OgogCUVSUk9SKHJ0MngwMGRldiwgIkFsbG9jYXRpb24gaWVlZTgwMjExIG1vZGVzIGZhaWxlZC5cbiIpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtOTcyLDExICs5NTQsMTEgQEAKIAlpZiAodGVzdF9iaXQoREVWSUNFX1JFR0lTVEVSRURfSFcsICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocnQyeDAwZGV2LT5odyk7CiAKLQlpZiAobGlrZWx5KHJ0MngwMGRldi0+aHdtb2RlcykpIHsKLQkJa2ZyZWUocnQyeDAwZGV2LT5od21vZGVzLT5jaGFubmVscyk7Ci0JCWtmcmVlKHJ0MngwMGRldi0+aHdtb2Rlcy0+cmF0ZXMpOwotCQlrZnJlZShydDJ4MDBkZXYtPmh3bW9kZXMpOwotCQlydDJ4MDBkZXYtPmh3bW9kZXMgPSBOVUxMOworCWlmIChsaWtlbHkocnQyeDAwZGV2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKSkgeworCQlrZnJlZShydDJ4MDBkZXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzKTsKKwkJa2ZyZWUocnQyeDAwZGV2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLT5iaXRyYXRlcyk7CisJCXJ0MngwMGRldi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IE5VTEw7CisJCXJ0MngwMGRldi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9IE5VTEw7CiAJfQogfQogCkBAIC0xMDA5LDkzICs5OTEsMTMgQEAKIC8qCiAgKiBJbml0aWFsaXphdGlvbi91bmluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgogICovCi1zdGF0aWMgaW50IHJ0MngwMGxpYl9hbGxvY19lbnRyaWVzKHN0cnVjdCBkYXRhX3JpbmcgKnJpbmcsCi0JCQkJICAgY29uc3QgdTE2IG1heF9lbnRyaWVzLCBjb25zdCB1MTYgZGF0YV9zaXplLAotCQkJCSAgIGNvbnN0IHUxNiBkZXNjX3NpemUpCi17Ci0Jc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGludCBpOwotCi0JcmluZy0+c3RhdHMubGltaXQgPSBtYXhfZW50cmllczsKLQlyaW5nLT5kYXRhX3NpemUgPSBkYXRhX3NpemU7Ci0JcmluZy0+ZGVzY19zaXplID0gZGVzY19zaXplOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSBhbGwgcmluZyBlbnRyaWVzLgotCSAqLwotCWVudHJ5ID0ga3phbGxvYyhyaW5nLT5zdGF0cy5saW1pdCAqIHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWVudHJ5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaSA9IDA7IGkgPCByaW5nLT5zdGF0cy5saW1pdDsgaSsrKSB7Ci0JCWVudHJ5W2ldLmZsYWdzID0gMDsKLQkJZW50cnlbaV0ucmluZyA9IHJpbmc7Ci0JCWVudHJ5W2ldLnNrYiA9IE5VTEw7Ci0JCWVudHJ5W2ldLmVudHJ5X2lkeCA9IGk7Ci0JfQotCi0JcmluZy0+ZW50cnkgPSBlbnRyeTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0MngwMGxpYl9hbGxvY19yaW5nX2VudHJpZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSB0aGUgUlggcmluZy4KLQkgKi8KLQlpZiAocnQyeDAwbGliX2FsbG9jX2VudHJpZXMocnQyeDAwZGV2LT5yeCwgUlhfRU5UUklFUywgREFUQV9GUkFNRV9TSVpFLAotCQkJCSAgICBydDJ4MDBkZXYtPm9wcy0+cnhkX3NpemUpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qCi0JICogRmlyc3QgYWxsb2NhdGUgdGhlIFRYIHJpbmdzLgotCSAqLwotCXR4cmluZ19mb3JfZWFjaChydDJ4MDBkZXYsIHJpbmcpIHsKLQkJaWYgKHJ0MngwMGxpYl9hbGxvY19lbnRyaWVzKHJpbmcsIFRYX0VOVFJJRVMsIERBVEFfRlJBTUVfU0laRSwKLQkJCQkJICAgIHJ0MngwMGRldi0+b3BzLT50eGRfc2l6ZSkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoIXRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9SSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSB0aGUgQkVBQ09OIHJpbmcuCi0JICovCi0JaWYgKHJ0MngwMGxpYl9hbGxvY19lbnRyaWVzKCZydDJ4MDBkZXYtPmJjblswXSwgQkVBQ09OX0VOVFJJRVMsCi0JCQkJICAgIE1HTVRfRlJBTUVfU0laRSwgcnQyeDAwZGV2LT5vcHMtPnR4ZF9zaXplKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHRoZSBBdGltIHJpbmcuCi0JICovCi0JaWYgKHJ0MngwMGxpYl9hbGxvY19lbnRyaWVzKCZydDJ4MDBkZXYtPmJjblsxXSwgQVRJTV9FTlRSSUVTLAotCQkJCSAgICBEQVRBX0ZSQU1FX1NJWkUsIHJ0MngwMGRldi0+b3BzLT50eGRfc2l6ZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9mcmVlX3JpbmdfZW50cmllcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXN0cnVjdCBkYXRhX3JpbmcgKnJpbmc7Ci0KLQlyaW5nX2Zvcl9lYWNoKHJ0MngwMGRldiwgcmluZykgewotCQlrZnJlZShyaW5nLT5lbnRyeSk7Ci0JCXJpbmctPmVudHJ5ID0gTlVMTDsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0MngwMGxpYl91bmluaXRpYWxpemUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlpZiAoIV9fdGVzdF9hbmRfY2xlYXJfYml0KERFVklDRV9JTklUSUFMSVpFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIFVucmVnaXN0ZXIgcmZraWxsLgorCSAqIFVucmVnaXN0ZXIgZXh0cmEgY29tcG9uZW50cy4KIAkgKi8KIAlydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihydDJ4MDBkZXYpOwogCkBAIC0xMTA1LDkgKzEwMDcsOSBAQAogCXJ0MngwMGRldi0+b3BzLT5saWItPnVuaW5pdGlhbGl6ZShydDJ4MDBkZXYpOwogCiAJLyoKLQkgKiBGcmVlIGFsbG9jYXRlZCByaW5nIGVudHJpZXMuCisJICogRnJlZSBhbGxvY2F0ZWQgcXVldWUgZW50cmllcy4KIAkgKi8KLQlydDJ4MDBsaWJfZnJlZV9yaW5nX2VudHJpZXMocnQyeDAwZGV2KTsKKwlydDJ4MDBxdWV1ZV91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKIH0KIAogc3RhdGljIGludCBydDJ4MDBsaWJfaW5pdGlhbGl6ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTExOCwxMyArMTAyMCwxMSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogQWxsb2NhdGUgYWxsIHJpbmcgZW50cmllcy4KKwkgKiBBbGxvY2F0ZSBhbGwgcXVldWUgZW50cmllcy4KIAkgKi8KLQlzdGF0dXMgPSBydDJ4MDBsaWJfYWxsb2NfcmluZ19lbnRyaWVzKHJ0MngwMGRldik7Ci0JaWYgKHN0YXR1cykgewotCQlFUlJPUihydDJ4MDBkZXYsICJSaW5nIGVudHJpZXMgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwlzdGF0dXMgPSBydDJ4MDBxdWV1ZV9pbml0aWFsaXplKHJ0MngwMGRldik7CisJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKLQl9CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGRldmljZS4KQEAgLTExMzYsMTkgKzEwMzYsMTQgQEAKIAlfX3NldF9iaXQoREVWSUNFX0lOSVRJQUxJWkVELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgotCSAqIFJlZ2lzdGVyIHRoZSByZmtpbGwgaGFuZGxlci4KKwkgKiBSZWdpc3RlciB0aGUgZXh0cmEgY29tcG9uZW50cy4KIAkgKi8KLQlzdGF0dXMgPSBydDJ4MDByZmtpbGxfcmVnaXN0ZXIocnQyeDAwZGV2KTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGV4aXRfdW5pdGlhbGl6ZTsKKwlydDJ4MDByZmtpbGxfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAogCXJldHVybiAwOwogCi1leGl0X3VuaXRpYWxpemU6Ci0JcnQyeDAwbGliX3VuaW5pdGlhbGl6ZShydDJ4MDBkZXYpOwotCiBleGl0OgotCXJ0MngwMGxpYl9mcmVlX3JpbmdfZW50cmllcyhydDJ4MDBkZXYpOworCXJ0MngwMGxpYl91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMTY0LDExICsxMDU5LDkgQEAKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBpbnRlcmZhY2Ugd2hpY2ggaXMgYWRkZWQsCiAJICogd2Ugc2hvdWxkIGxvYWQgdGhlIGZpcm13YXJlIG5vdy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmZsYWdzKSkgewotCQlyZXR2YWwgPSBydDJ4MDBsaWJfbG9hZF9maXJtd2FyZShydDJ4MDBkZXYpOwotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQl9CisJcmV0dmFsID0gcnQyeDAwbGliX2xvYWRfZmlybXdhcmUocnQyeDAwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBkZXZpY2UuCkBAIC0xMTg2LDYgKzEwNzksMTAgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKKwlydDJ4MDBkZXYtPmludGZfYXBfY291bnQgPSAwOworCXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQgPSAwOworCXJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkID0gMDsKKwogCV9fc2V0X2JpdChERVZJQ0VfU1RBUlRFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMjAyLDc2ICsxMDk5LDI3IEBACiAJICovCiAJcnQyeDAwbGliX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKIAorCXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCA9IDA7CisJcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCA9IDA7CisJcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQgPSAwOworCiAJX19jbGVhcl9iaXQoREVWSUNFX1NUQVJURUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIH0KIAogLyoKICAqIGRyaXZlciBhbGxvY2F0aW9uIGhhbmRsZXJzLgogICovCi1zdGF0aWMgaW50IHJ0MngwMGxpYl9hbGxvY19yaW5ncyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXN0cnVjdCBkYXRhX3JpbmcgKnJpbmc7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCi0JLyoKLQkgKiBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgcmluZ3M6Ci0JICogUlg6IDEKLQkgKiBUWDogaHctPnF1ZXVlcwotCSAqIEJlYWNvbjogMSAoaWYgcmVxdWlyZWQpCi0JICogQXRpbTogMSAoaWYgcmVxdWlyZWQpCi0JICovCi0JcnQyeDAwZGV2LT5kYXRhX3JpbmdzID0gMSArIHJ0MngwMGRldi0+aHctPnF1ZXVlcyArCi0JICAgICgyICogdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX1JJTkcsICZydDJ4MDBkZXYtPmZsYWdzKSk7Ci0KLQlyaW5nID0ga3phbGxvYyhydDJ4MDBkZXYtPmRhdGFfcmluZ3MgKiBzaXplb2YoKnJpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJpbmcpIHsKLQkJRVJST1IocnQyeDAwZGV2LCAiUmluZyBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgcG9pbnRlcnMKLQkgKi8KLQlydDJ4MDBkZXYtPnJ4ID0gcmluZzsKLQlydDJ4MDBkZXYtPnR4ID0gJnJ0MngwMGRldi0+cnhbMV07Ci0JaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9SSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMGRldi0+YmNuID0gJnJ0MngwMGRldi0+dHhbcnQyeDAwZGV2LT5ody0+cXVldWVzXTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSByaW5nIHBhcmFtZXRlcnMuCi0JICogUlg6IHF1ZXVlX2lkeCA9IDAKLQkgKiBUWDogcXVldWVfaWR4ID0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwICsgaW5kZXgKLQkgKiBUWDogY3dfbWluOiAyXjUgPSAzMi4KLQkgKiBUWDogY3dfbWF4OiAyXjEwID0gMTAyNC4KLQkgKi8KLQlydDJ4MDBkZXYtPnJ4LT5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7Ci0JcnQyeDAwZGV2LT5yeC0+cXVldWVfaWR4ID0gMDsKLQotCWluZGV4ID0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwOwotCXR4cmluZ19mb3JfZWFjaChydDJ4MDBkZXYsIHJpbmcpIHsKLQkJcmluZy0+cnQyeDAwZGV2ID0gcnQyeDAwZGV2OwotCQlyaW5nLT5xdWV1ZV9pZHggPSBpbmRleCsrOwotCQlyaW5nLT50eF9wYXJhbXMuYWlmcyA9IDI7Ci0JCXJpbmctPnR4X3BhcmFtcy5jd19taW4gPSA1OwotCQlyaW5nLT50eF9wYXJhbXMuY3dfbWF4ID0gMTA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9mcmVlX3JpbmdzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0Ja2ZyZWUocnQyeDAwZGV2LT5yeCk7Ci0JcnQyeDAwZGV2LT5yeCA9IE5VTEw7Ci0JcnQyeDAwZGV2LT50eCA9IE5VTEw7Ci0JcnQyeDAwZGV2LT5iY24gPSBOVUxMOwotfQotCiBpbnQgcnQyeDAwbGliX3Byb2JlX2RldihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCiAJLyoKKwkgKiBNYWtlIHJvb20gZm9yIHJ0MngwMF9pbnRmIGluc2lkZSB0aGUgcGVyLWludGVyZmFjZQorCSAqIHN0cnVjdHVyZSBpZWVlODAyMTFfdmlmLgorCSAqLworCXJ0MngwMGRldi0+aHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHJ0MngwMF9pbnRmKTsKKworCS8qCiAJICogTGV0IHRoZSBkcml2ZXIgcHJvYmUgdGhlIGRldmljZSB0byBkZXRlY3QgdGhlIGNhcGFiaWxpdGllcy4KIAkgKi8KIAlyZXR2YWwgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5wcm9iZV9odyhydDJ4MDBkZXYpOwpAQCAtMTI4MywyMCArMTEzMSwxNCBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIHdvcmsuCiAJICovCi0JSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmJlYWNvbl93b3JrLCBydDJ4MDBsaWJfYmVhY29uZG9uZV9zY2hlZHVsZWQpOworCUlOSVRfV09SSygmcnQyeDAwZGV2LT5pbnRmX3dvcmssIHJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZCk7CiAJSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmZpbHRlcl93b3JrLCBydDJ4MDBsaWJfcGFja2V0ZmlsdGVyX3NjaGVkdWxlZCk7Ci0JSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmNvbmZpZ193b3JrLCBydDJ4MDBsaWJfY29uZmlndXJhdGlvbl9zY2hlZHVsZWQpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud29yaywgcnQyeDAwbGliX2xpbmtfdHVuZXIpOwogCiAJLyoKLQkgKiBSZXNldCBjdXJyZW50IHdvcmtpbmcgdHlwZS4KKwkgKiBBbGxvY2F0ZSBxdWV1ZSBhcnJheS4KIAkgKi8KLQlydDJ4MDBkZXYtPmludGVyZmFjZS50eXBlID0gSUVFRTgwMjExX0lGX1RZUEVfSU5WQUxJRDsKLQotCS8qCi0JICogQWxsb2NhdGUgcmluZyBhcnJheS4KLQkgKi8KLQlyZXR2YWwgPSBydDJ4MDBsaWJfYWxsb2NfcmluZ3MocnQyeDAwZGV2KTsKKwlyZXR2YWwgPSBydDJ4MDBxdWV1ZV9hbGxvY2F0ZShydDJ4MDBkZXYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXhpdDsKIApAQCAtMTMxMCwxNSArMTE1MiwxMCBAQAogCX0KIAogCS8qCi0JICogQWxsb2NhdGllIHJma2lsbC4KKwkgKiBSZWdpc3RlciBleHRyYSBjb21wb25lbnRzLgogCSAqLwotCXJldHZhbCA9IHJ0MngwMHJma2lsbF9hbGxvY2F0ZShydDJ4MDBkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCS8qCi0JICogT3BlbiB0aGUgZGVidWdmcyBlbnRyeS4KLQkgKi8KKwlydDJ4MDBsZWRzX3JlZ2lzdGVyKHJ0MngwMGRldik7CisJcnQyeDAwcmZraWxsX2FsbG9jYXRlKHJ0MngwMGRldik7CiAJcnQyeDAwZGVidWdfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAogCV9fc2V0X2JpdChERVZJQ0VfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwpAQCAtMTM0NywxNCArMTE4NCwxMSBAQAogCXJ0MngwMGxpYl91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKIAogCS8qCi0JICogQ2xvc2UgZGVidWdmcyBlbnRyeS4KKwkgKiBGcmVlIGV4dHJhIGNvbXBvbmVudHMKIAkgKi8KIAlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7Ci0KLQkvKgotCSAqIEZyZWUgcmZraWxsCi0JICovCiAJcnQyeDAwcmZraWxsX2ZyZWUocnQyeDAwZGV2KTsKKwlydDJ4MDBsZWRzX3VucmVnaXN0ZXIocnQyeDAwZGV2KTsKIAogCS8qCiAJICogRnJlZSBpZWVlODAyMTFfaHcgbWVtb3J5LgpAQCAtMTM2Nyw5ICsxMjAxLDkgQEAKIAlydDJ4MDBsaWJfZnJlZV9maXJtd2FyZShydDJ4MDBkZXYpOwogCiAJLyoKLQkgKiBGcmVlIHJpbmcgc3RydWN0dXJlcy4KKwkgKiBGcmVlIHF1ZXVlIHN0cnVjdHVyZXMuCiAJICovCi0JcnQyeDAwbGliX2ZyZWVfcmluZ3MocnQyeDAwZGV2KTsKKwlydDJ4MDBxdWV1ZV9mcmVlKHJ0MngwMGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfcmVtb3ZlX2Rldik7CiAKQEAgLTEzOTIsMzYgKzEyMjYsNzMgQEAKIAlfX3NldF9iaXQoREVWSUNFX1NUQVJURURfU1VTUEVORCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKLQkgKiBEaXNhYmxlIHJhZGlvIGFuZCB1bml0aWFsaXplIGFsbCBpdGVtcwotCSAqIHRoYXQgbXVzdCBiZSByZWNyZWF0ZWQgb24gcmVzdW1lLgorCSAqIERpc2FibGUgcmFkaW8uCiAJICovCiAJcnQyeDAwbGliX3N0b3AocnQyeDAwZGV2KTsKIAlydDJ4MDBsaWJfdW5pbml0aWFsaXplKHJ0MngwMGRldik7CisKKwkvKgorCSAqIFN1c3BlbmQvZGlzYWJsZSBleHRyYSBjb21wb25lbnRzLgorCSAqLworCXJ0MngwMGxlZHNfc3VzcGVuZChydDJ4MDBkZXYpOworCXJ0MngwMHJma2lsbF9zdXNwZW5kKHJ0MngwMGRldik7CiAJcnQyeDAwZGVidWdfZGVyZWdpc3RlcihydDJ4MDBkZXYpOwogCiBleGl0OgogCS8qCi0JICogU2V0IGRldmljZSBtb2RlIHRvIHNsZWVwIGZvciBwb3dlciBtYW5hZ2VtZW50LgorCSAqIFNldCBkZXZpY2UgbW9kZSB0byBzbGVlcCBmb3IgcG93ZXIgbWFuYWdlbWVudCwKKwkgKiBvbiBzb21lIGhhcmR3YXJlIHRoaXMgY2FsbCBzZWVtcyB0byBjb25zaXN0ZW50bHkgZmFpbC4KKwkgKiBGcm9tIHRoZSBzcGVjaWZpY2F0aW9ucyBpdCBpcyBoYXJkIHRvIHRlbGwgd2h5IGl0IGZhaWxzLAorCSAqIGFuZCBpZiB0aGlzIGlzIGEgImJhZCB0aGluZyIuCisJICogT3ZlcmFsbCBpdCBpcyBzYWZlIHRvIGp1c3QgaWdub3JlIHRoZSBmYWlsdXJlIGFuZAorCSAqIGNvbnRpbnVlIHN1c3BlbmRpbmcuIFRoZSBvbmx5IGRvd25zaWRlIGlzIHRoYXQgdGhlCisJICogZGV2aWNlIHdpbGwgbm90IGJlIGluIG9wdGltYWwgcG93ZXIgc2F2ZSBtb2RlLCBidXQgd2l0aAorCSAqIHRoZSByYWRpbyBhbmQgdGhlIG90aGVyIGNvbXBvbmVudHMgYWxyZWFkeSBkaXNhYmxlZCB0aGUKKwkgKiBkZXZpY2UgaXMgYXMgZ29vZCBhcyBkaXNhYmxlZC4KIAkgKi8KIAlyZXR2YWwgPSBydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfU0xFRVApOwogCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7CisJCVdBUk5JTkcocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byBlbnRlciBzbGVlcCBzdGF0ZSwgIgorCQkJImNvbnRpbnVlIHN1c3BlbmRpbmcuXG4iKTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3N1c3BlbmQpOwogCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfcmVzdW1lX2ludGYodm9pZCAqZGF0YSwgdTggKm1hYywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKKworCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7CisKKwlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLAorCQkJICAgICAgdmlmLT50eXBlLCBpbnRmLT5tYWMsIGludGYtPmJzc2lkKTsKKworCisJLyoKKwkgKiBNYXN0ZXIgb3IgQWQtaG9jIG1vZGUgcmVxdWlyZSBhIG5ldyBiZWFjb24gdXBkYXRlLgorCSAqLworCWlmICh2aWYtPnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgfHwKKwkgICAgdmlmLT50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCisJCWludGYtPmRlbGF5ZWRfZmxhZ3MgfD0gREVMQVlFRF9VUERBVEVfQkVBQ09OOworCisJc3Bpbl91bmxvY2soJmludGYtPmxvY2spOworfQorCiBpbnQgcnQyeDAwbGliX3Jlc3VtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBpbnRlcmZhY2UgKmludGYgPSAmcnQyeDAwZGV2LT5pbnRlcmZhY2U7CiAJaW50IHJldHZhbDsKIAogCU5PVElDRShydDJ4MDBkZXYsICJXYWtpbmcgdXAuXG4iKTsKIAogCS8qCi0JICogT3BlbiB0aGUgZGVidWdmcyBlbnRyeS4KKwkgKiBSZXN0b3JlL2VuYWJsZSBleHRyYSBjb21wb25lbnRzLgogCSAqLwogCXJ0MngwMGRlYnVnX3JlZ2lzdGVyKHJ0MngwMGRldik7CisJcnQyeDAwcmZraWxsX3Jlc3VtZShydDJ4MDBkZXYpOworCXJ0MngwMGxlZHNfcmVzdW1lKHJ0MngwMGRldik7CiAKIAkvKgogCSAqIE9ubHkgY29udGludWUgaWYgbWFjODAyMTEgaGFkIG9wZW4gaW50ZXJmYWNlcy4KQEAgLTE0NDMsOSArMTMxNCwxMiBAQAogCWlmICghcnQyeDAwZGV2LT5ody0+Y29uZi5yYWRpb19lbmFibGVkKQogCQlydDJ4MDBsaWJfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCi0JcnQyeDAwbGliX2NvbmZpZ19tYWNfYWRkcihydDJ4MDBkZXYsIGludGYtPm1hYyk7Ci0JcnQyeDAwbGliX2NvbmZpZ19ic3NpZChydDJ4MDBkZXYsIGludGYtPmJzc2lkKTsKLQlydDJ4MDBsaWJfY29uZmlnX3R5cGUocnQyeDAwZGV2LCBpbnRmLT50eXBlKTsKKwkvKgorCSAqIEl0ZXJhdG9yIG92ZXIgZWFjaCBhY3RpdmUgaW50ZXJmYWNlIHRvCisJICogcmVjb25maWd1cmUgdGhlIGhhcmR3YXJlLgorCSAqLworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICBydDJ4MDBsaWJfcmVzdW1lX2ludGYsIHJ0MngwMGRldik7CiAKIAkvKgogCSAqIFdlIGFyZSByZWFkeSBhZ2FpbiB0byByZWNlaXZlIHJlcXVlc3RzIGZyb20gbWFjODAyMTEuCkBAIC0xNDYxLDEyICsxMzM1LDExIEBACiAJaWVlZTgwMjExX3N0YXJ0X3F1ZXVlcyhydDJ4MDBkZXYtPmh3KTsKIAogCS8qCi0JICogV2hlbiBpbiBNYXN0ZXIgb3IgQWQtaG9jIG1vZGUsCi0JICogcmVzdGFydCBCZWFjb24gdHJhbnNtaXR0aW5nIGJ5IGZha2luZyBhIGJlYWNvbmRvbmUgZXZlbnQuCisJICogRHVyaW5nIGludGVyZmFjZSBpdGVyYXRpb24gd2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZQorCSAqIGRlbGF5ZWRfZmxhZ3MsIHRpbWUgdG8gaGFuZGxlcyB0aGUgZXZlbnQgYnkgY2FsbGluZworCSAqIHRoZSB3b3JrIGhhbmRsZXIgZGlyZWN0bHkuCiAJICovCi0JaWYgKGludGYtPnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgfHwKLQkgICAgaW50Zi0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQotCQlydDJ4MDBsaWJfYmVhY29uZG9uZShydDJ4MDBkZXYpOworCXJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZCgmcnQyeDAwZGV2LT5pbnRmX3dvcmspOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCmluZGV4IDk5ZjNmMzYuLjcxNjljMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTkzLDggKzkzLDggQEAKICAqIEBjaGlwX3JmOiBSRiBjaGlwc2V0CiAgKiBAY2hpcF9yZXY6IENoaXBzZXQgcmV2aXNpb24KICAqIEB0eXBlOiBUaGUgZnJhbWUgdHlwZSAoJnJ0MngwMF9kdW1wX3R5cGUpCi0gKiBAcmluZ19pbmRleDogVGhlIGluZGV4IG51bWJlciBvZiB0aGUgZGF0YSByaW5nLgotICogQGVudHJ5X2luZGV4OiBUaGUgaW5kZXggbnVtYmVyIG9mIHRoZSBlbnRyeSBpbnNpZGUgdGhlIGRhdGEgcmluZy4KKyAqIEBxdWV1ZV9pbmRleDogVGhlIGluZGV4IG51bWJlciBvZiB0aGUgZGF0YSBxdWV1ZS4KKyAqIEBlbnRyeV9pbmRleDogVGhlIGluZGV4IG51bWJlciBvZiB0aGUgZW50cnkgaW5zaWRlIHRoZSBkYXRhIHF1ZXVlLgogICogQHRpbWVzdGFtcF9zZWM6IFRpbWVzdGFtcCAtIHNlY29uZHMKICAqIEB0aW1lc3RhbXBfdXNlYzogVGltZXN0YW1wIC0gbWljcm9zZWNvbmRzCiAgKi8KQEAgLTExMSw3ICsxMTEsNyBAQAogCV9fbGUzMiBjaGlwX3JldjsKIAogCV9fbGUxNiB0eXBlOwotCV9fdTggcmluZ19pbmRleDsKKwlfX3U4IHF1ZXVlX2luZGV4OwogCV9fdTggZW50cnlfaW5kZXg7CiAKIAlfX2xlMzIgdGltZXN0YW1wX3NlYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKaW5kZXggMGE0NzVlNC4uYjk3MWJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yMyw3ICsyMyw2IEBACiAJQWJzdHJhY3Q6IHJ0MngwMCBmaXJtd2FyZSBsb2FkaW5nIHJvdXRpbmVzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jcmMtaXR1LXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApAQCAtMzcsNyArMzYsNiBAQAogCWNoYXIgKmZ3X25hbWU7CiAJaW50IHJldHZhbDsKIAl1MTYgY3JjOwotCXUxNiB0bXA7CiAKIAkvKgogCSAqIFJlYWQgY29ycmVjdCBmaXJtd2FyZSBmcm9tIGhhcmRkaXNrLgpAQCAtNjMsMTggKzYxLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JLyoKLQkgKiBWYWxpZGF0ZSB0aGUgZmlybXdhcmUgdXNpbmcgMTYgYml0IENSQy4KLQkgKiBUaGUgbGFzdCAyIGJ5dGVzIG9mIHRoZSBmaXJtd2FyZSBhcmUgdGhlIENSQwotCSAqIHNvIHN1YnN0cmFjdCB0aG9zZSAyIGJ5dGVzIGZyb20gdGhlIENSQyBjaGVja3N1bSwKLQkgKiBhbmQgc2V0IHRob3NlIDIgYnl0ZXMgdG8gMCB3aGVuIGNhbGN1bGF0aW5nIENSQy4KLQkgKi8KLQl0bXAgPSAwOwotCWNyYyA9IGNyY19pdHVfdCgwLCBmdy0+ZGF0YSwgZnctPnNpemUgLSAyKTsKLQljcmMgPSBjcmNfaXR1X3QoY3JjLCAodTggKikmdG1wLCAyKTsKLQorCWNyYyA9IHJ0MngwMGRldi0+b3BzLT5saWItPmdldF9maXJtd2FyZV9jcmMoZnctPmRhdGEsIGZ3LT5zaXplKTsKIAlpZiAoY3JjICE9IChmdy0+ZGF0YVtmdy0+c2l6ZSAtIDJdIDw8IDggfCBmdy0+ZGF0YVtmdy0+c2l6ZSAtIDFdKSkgewotCQlFUlJPUihydDJ4MDBkZXYsICJGaXJtd2FyZSBDUkMgZXJyb3IuXG4iKTsKKwkJRVJST1IocnQyeDAwZGV2LCAiRmlybXdhcmUgY2hlY2tzdW0gZXJyb3IuXG4iKTsKIAkJcmV0dmFsID0gLUVOT0VOVDsKIAkJZ290byBleGl0OwogCX0KQEAgLTk2LDYgKzg1LDkgQEAKIHsKIAlpbnQgcmV0dmFsOwogCisJaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKKwogCWlmICghcnQyeDAwZGV2LT5mdykgewogCQlyZXR2YWwgPSBydDJ4MDBsaWJfcmVxdWVzdF9maXJtd2FyZShydDJ4MDBkZXYpOwogCQlpZiAocmV0dmFsKQpAQCAtMTE2LDQgKzEwOCwzIEBACiAJcmVsZWFzZV9maXJtd2FyZShydDJ4MDBkZXYtPmZ3KTsKIAlydDJ4MDBkZXYtPmZ3ID0gTlVMTDsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjMWY1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisJNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorCU1vZHVsZTogcnQyeDAwbGliCisJQWJzdHJhY3Q6IHJ0MngwMCBsZWQgc3BlY2lmaWMgcm91dGluZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAicnQyeDAwLmgiCisjaW5jbHVkZSAicnQyeDAwbGliLmgiCisKK3ZvaWQgcnQyeDAwbGVkc19sZWRfcXVhbGl0eShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBpbnQgcnNzaSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkID0gJnJ0MngwMGRldi0+bGVkX3F1YWw7CisJdW5zaWduZWQgaW50IGJyaWdodG5lc3M7CisKKwlpZiAoKGxlZC0+dHlwZSAhPSBMRURfVFlQRV9RVUFMSVRZKSB8fCAhKGxlZC0+ZmxhZ3MgJiBMRURfUkVHSVNURVJFRCkpCisJCXJldHVybjsKKworCS8qCisJICogTGVkIGhhbmRsaW5nIHJlcXVpcmVzIGEgcG9zaXRpdmUgdmFsdWUgZm9yIHRoZSByc3NpLAorCSAqIHRvIGRvIHRoYXQgY29ycmVjdGx5IHdlIG5lZWQgdG8gYWRkIHRoZSBjb3JyZWN0aW9uLgorCSAqLworCXJzc2kgKz0gcnQyeDAwZGV2LT5yc3NpX29mZnNldDsKKworCS8qCisJICogR2V0IHRoZSByc3NpIGxldmVsLCB0aGlzIGlzIHVzZWQgdG8gY29udmVydCB0aGUgcnNzaQorCSAqIHRvIGEgTEVEIHZhbHVlIGluc2lkZSB0aGUgcmFuZ2UgTEVEX09GRiAtIExFRF9GVUxMLgorCSAqLworCWlmIChyc3NpIDw9IDMwKQorCQlyc3NpID0gMDsKKwllbHNlIGlmIChyc3NpIDw9IDM5KQorCQlyc3NpID0gMTsKKwllbHNlIGlmIChyc3NpIDw9IDQ5KQorCQlyc3NpID0gMjsKKwllbHNlIGlmIChyc3NpIDw9IDUzKQorCQlyc3NpID0gMzsKKwllbHNlIGlmIChyc3NpIDw9IDYzKQorCQlyc3NpID0gNDsKKwllbHNlCisJCXJzc2kgPSA1OworCisJLyoKKwkgKiBOb3RlIHRoYXQgd2UgbXVzdCBfbm90XyBzZW5kIExFRF9PRkYgc2luY2UgdGhlIGRyaXZlcgorCSAqIGlzIGdvaW5nIHRvIGNhbGN1bGF0ZSB0aGUgdmFsdWUgYW5kIG1pZ2h0IHVzZSBpdCBpbiBhCisJICogZGl2aXNpb24uCisJICovCisJYnJpZ2h0bmVzcyA9ICgoTEVEX0ZVTEwgLyA2KSAqIHJzc2kpICsgMTsKKwlpZiAoYnJpZ2h0bmVzcyAhPSBsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzcykgeworCQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQoJmxlZC0+bGVkX2RldiwgYnJpZ2h0bmVzcyk7CisJCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKwl9Cit9CisKK3ZvaWQgcnQyeDAwbGVkc19sZWRfYXNzb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgYm9vbCBlbmFibGVkKQoreworCXN0cnVjdCBydDJ4MDBfbGVkICpsZWQgPSAmcnQyeDAwZGV2LT5sZWRfYXNzb2M7CisJdW5zaWduZWQgaW50IGJyaWdodG5lc3M7CisKKwlpZiAoKGxlZC0+dHlwZSAhPSBMRURfVFlQRV9BU1NPQykgfHwgIShsZWQtPmZsYWdzICYgTEVEX1JFR0lTVEVSRUQpKQorCQlyZXR1cm47CisKKwlicmlnaHRuZXNzID0gZW5hYmxlZCA/IExFRF9GVUxMIDogTEVEX09GRjsKKwlpZiAoYnJpZ2h0bmVzcyAhPSBsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzcykgeworCQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQoJmxlZC0+bGVkX2RldiwgYnJpZ2h0bmVzcyk7CisJCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKwl9Cit9CisKK3ZvaWQgcnQyeDAwbGVkc19sZWRfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgYm9vbCBlbmFibGVkKQoreworCXN0cnVjdCBydDJ4MDBfbGVkICpsZWQgPSAmcnQyeDAwZGV2LT5sZWRfcmFkaW87CisJdW5zaWduZWQgaW50IGJyaWdodG5lc3M7CisKKwlpZiAoKGxlZC0+dHlwZSAhPSBMRURfVFlQRV9SQURJTykgfHwgIShsZWQtPmZsYWdzICYgTEVEX1JFR0lTVEVSRUQpKQorCQlyZXR1cm47CisKKwlicmlnaHRuZXNzID0gZW5hYmxlZCA/IExFRF9GVUxMIDogTEVEX09GRjsKKwlpZiAoYnJpZ2h0bmVzcyAhPSBsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzcykgeworCQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQoJmxlZC0+bGVkX2RldiwgYnJpZ2h0bmVzcyk7CisJCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnQyeDAwbGVkc19yZWdpc3Rlcl9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICBzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gd2lwaHlfZGV2KHJ0MngwMGRldi0+aHctPndpcGh5KTsKKwlpbnQgcmV0dmFsOworCisJbGVkLT5sZWRfZGV2Lm5hbWUgPSBuYW1lOworCisJcmV0dmFsID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CisJaWYgKHJldHZhbCkgeworCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlsZWQtPmZsYWdzIHw9IExFRF9SRUdJU1RFUkVEOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnQyeDAwbGVkc19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCWNoYXIgZGV2X25hbWVbMTZdOworCWNoYXIgbmFtZVszMl07CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIG9uX3BlcmlvZDsKKwl1bnNpZ25lZCBsb25nIG9mZl9wZXJpb2Q7CisKKwlzbnByaW50ZihkZXZfbmFtZSwgc2l6ZW9mKGRldl9uYW1lKSwgIiVzLSVzIiwKKwkJIHJ0MngwMGRldi0+b3BzLT5uYW1lLCB3aXBoeV9uYW1lKHJ0MngwMGRldi0+aHctPndpcGh5KSk7CisKKwlpZiAocnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgJiBMRURfSU5JVElBTElaRUQpIHsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6cmFkaW8iLCBkZXZfbmFtZSk7CisKKwkJcmV0dmFsID0gcnQyeDAwbGVkc19yZWdpc3Rlcl9sZWQocnQyeDAwZGV2LAorCQkJCQkJICZydDJ4MDBkZXYtPmxlZF9yYWRpbywKKwkJCQkJCSBuYW1lKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXhpdF9mYWlsOworCX0KKworCWlmIChydDJ4MDBkZXYtPmxlZF9hc3NvYy5mbGFncyAmIExFRF9JTklUSUFMSVpFRCkgeworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczphc3NvYyIsIGRldl9uYW1lKTsKKworCQlyZXR2YWwgPSBydDJ4MDBsZWRzX3JlZ2lzdGVyX2xlZChydDJ4MDBkZXYsCisJCQkJCQkgJnJ0MngwMGRldi0+bGVkX2Fzc29jLAorCQkJCQkJIG5hbWUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBleGl0X2ZhaWw7CisJfQorCisJaWYgKHJ0MngwMGRldi0+bGVkX3F1YWwuZmxhZ3MgJiBMRURfSU5JVElBTElaRUQpIHsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6cXVhbGl0eSIsIGRldl9uYW1lKTsKKworCQlyZXR2YWwgPSBydDJ4MDBsZWRzX3JlZ2lzdGVyX2xlZChydDJ4MDBkZXYsCisJCQkJCQkgJnJ0MngwMGRldi0+bGVkX3F1YWwsCisJCQkJCQkgbmFtZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGV4aXRfZmFpbDsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgYmxpbmsgdGltZSB0byBkZWZhdWx0IHZhbHVlOgorCSAqIE9uIHBlcmlvZDogNzBtcworCSAqIE9mZiBwZXJpb2Q6IDMwbXMKKwkgKi8KKwlpZiAocnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldi5ibGlua19zZXQpIHsKKwkJb25fcGVyaW9kID0gNzA7CisJCW9mZl9wZXJpb2QgPSAzMDsKKwkJcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldi5ibGlua19zZXQoCisJCSAgICAmcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2RldiwgJm9uX3BlcmlvZCwgJm9mZl9wZXJpb2QpOworCX0KKworCXJldHVybjsKKworZXhpdF9mYWlsOgorCXJ0MngwMGxlZHNfdW5yZWdpc3RlcihydDJ4MDBkZXYpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsZWRzX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBydDJ4MDBfbGVkICpsZWQpCit7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2Rldik7CisJbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0KCZsZWQtPmxlZF9kZXYsIExFRF9PRkYpOworCWxlZC0+ZmxhZ3MgJj0gfkxFRF9SRUdJU1RFUkVEOworfQorCit2b2lkIHJ0MngwMGxlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCWlmIChydDJ4MDBkZXYtPmxlZF9xdWFsLmZsYWdzICYgTEVEX1JFR0lTVEVSRUQpCisJCXJ0MngwMGxlZHNfdW5yZWdpc3Rlcl9sZWQoJnJ0MngwMGRldi0+bGVkX3F1YWwpOworCWlmIChydDJ4MDBkZXYtPmxlZF9hc3NvYy5mbGFncyAmIExFRF9SRUdJU1RFUkVEKQorCQlydDJ4MDBsZWRzX3VucmVnaXN0ZXJfbGVkKCZydDJ4MDBkZXYtPmxlZF9hc3NvYyk7CisJaWYgKHJ0MngwMGRldi0+bGVkX3JhZGlvLmZsYWdzICYgTEVEX1JFR0lTVEVSRUQpCisJCXJ0MngwMGxlZHNfdW5yZWdpc3Rlcl9sZWQoJnJ0MngwMGRldi0+bGVkX3JhZGlvKTsKK30KKwordm9pZCBydDJ4MDBsZWRzX3N1c3BlbmQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlpZiAocnQyeDAwZGV2LT5sZWRfcXVhbC5mbGFncyAmIExFRF9SRUdJU1RFUkVEKQorCQlsZWRfY2xhc3NkZXZfc3VzcGVuZCgmcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2KTsKKwlpZiAocnQyeDAwZGV2LT5sZWRfYXNzb2MuZmxhZ3MgJiBMRURfUkVHSVNURVJFRCkKKwkJbGVkX2NsYXNzZGV2X3N1c3BlbmQoJnJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYpOworCWlmIChydDJ4MDBkZXYtPmxlZF9yYWRpby5mbGFncyAmIExFRF9SRUdJU1RFUkVEKQorCQlsZWRfY2xhc3NkZXZfc3VzcGVuZCgmcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldik7Cit9CisKK3ZvaWQgcnQyeDAwbGVkc19yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlpZiAocnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgJiBMRURfUkVHSVNURVJFRCkKKwkJbGVkX2NsYXNzZGV2X3Jlc3VtZSgmcnQyeDAwZGV2LT5sZWRfcmFkaW8ubGVkX2Rldik7CisJaWYgKHJ0MngwMGRldi0+bGVkX2Fzc29jLmZsYWdzICYgTEVEX1JFR0lTVEVSRUQpCisJCWxlZF9jbGFzc2Rldl9yZXN1bWUoJnJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYpOworCWlmIChydDJ4MDBkZXYtPmxlZF9xdWFsLmZsYWdzICYgTEVEX1JFR0lTVEVSRUQpCisJCWxlZF9jbGFzc2Rldl9yZXN1bWUoJnJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY0YTQ5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisJNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorCU1vZHVsZTogcnQyeDAwbGliCisJQWJzdHJhY3Q6IHJ0MngwMCBsZWQgZGF0YXN0cnVjdHVyZXMgYW5kIHJvdXRpbmVzCisgKi8KKworI2lmbmRlZiBSVDJYMDBMRURTX0gKKyNkZWZpbmUgUlQyWDAwTEVEU19ICisKK2VudW0gbGVkX3R5cGUgeworCUxFRF9UWVBFX1JBRElPLAorCUxFRF9UWVBFX0FTU09DLAorCUxFRF9UWVBFX0FDVElWSVRZLAorCUxFRF9UWVBFX1FVQUxJVFksCit9OworCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUworCitzdHJ1Y3QgcnQyeDAwX2xlZCB7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9kZXY7CisKKwllbnVtIGxlZF90eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBMRURfSU5JVElBTElaRUQJCSggMSA8PCAwICkKKyNkZWZpbmUgTEVEX1JFR0lTVEVSRUQJCSggMSA8PCAxICkKK307CisKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCisKKyNlbmRpZiAvKiBSVDJYMDBMRURTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAppbmRleCAxYWRiZDI4Li41YmUzMmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzQsNiArMzQsNDAgQEAKICNkZWZpbmUgUkZLSUxMX1BPTExfSU5URVJWQUwJKCAxMDAwICkKIAogLyoKKyAqIHJ0MngwMF9yYXRlOiBQZXIgcmF0ZSBkZXZpY2UgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IHJ0MngwMF9yYXRlIHsKKwl1bnNpZ25lZCBzaG9ydCBmbGFnczsKKyNkZWZpbmUgREVWX1JBVEVfQ0NLCQkJMHgwMDAxCisjZGVmaW5lIERFVl9SQVRFX09GRE0JCQkweDAwMDIKKyNkZWZpbmUgREVWX1JBVEVfU0hPUlRfUFJFQU1CTEUJCTB4MDAwNAorI2RlZmluZSBERVZfUkFURV9CQVNJQwkJCTB4MDAwOAorCisJdW5zaWduZWQgc2hvcnQgYml0cmF0ZTsgLyogSW4gMTAwa2JpdC9zICovCisJdW5zaWduZWQgc2hvcnQgcmF0ZW1hc2s7CisKKwl1bnNpZ25lZCBzaG9ydCBwbGNwOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSBydDJ4MDBfc3VwcG9ydGVkX3JhdGVzWzEyXTsKKworc3RhdGljIGlubGluZSB1MTYgcnQyeDAwX2NyZWF0ZV9yYXRlX2h3X3ZhbHVlKGNvbnN0IHUxNiBpbmRleCwKKwkJCQkJICAgICAgY29uc3QgdTE2IHNob3J0X3ByZWFtYmxlKQoreworCXJldHVybiAoc2hvcnRfcHJlYW1ibGUgPDwgOCkgfCAoaW5kZXggJiAweGZmKTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKnJ0MngwMF9nZXRfcmF0ZShjb25zdCB1MTYgaHdfdmFsdWUpCit7CisJcmV0dXJuICZydDJ4MDBfc3VwcG9ydGVkX3JhdGVzW2h3X3ZhbHVlICYgMHhmZl07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF9nZXRfcmF0ZV9wcmVhbWJsZShjb25zdCB1MTYgaHdfdmFsdWUpCit7CisJcmV0dXJuIChod192YWx1ZSAmIDB4ZmYwMCk7Cit9CisKKy8qCiAgKiBSYWRpbyBjb250cm9sIGhhbmRsZXJzLgogICovCiBpbnQgcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKQEAgLTUwLDE1ICs4NCwyOSBAQAogLyoKICAqIENvbmZpZ3VyYXRpb24gaGFuZGxlcnMuCiAgKi8KLXZvaWQgcnQyeDAwbGliX2NvbmZpZ19tYWNfYWRkcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCB1OCAqbWFjKTsKLXZvaWQgcnQyeDAwbGliX2NvbmZpZ19ic3NpZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCB1OCAqYnNzaWQpOwotdm9pZCBydDJ4MDBsaWJfY29uZmlnX3R5cGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3QgaW50IHR5cGUpOwordm9pZCBydDJ4MDBsaWJfY29uZmlnX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKKwkJCSAgIGVudW0gaWVlZTgwMjExX2lmX3R5cGVzIHR5cGUsCisJCQkgICB1OCAqbWFjLCB1OCAqYnNzaWQpOwordm9pZCBydDJ4MDBsaWJfY29uZmlnX2VycChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYpOwogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2FudGVubmEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgIGVudW0gYW50ZW5uYSByeCwgZW51bSBhbnRlbm5hIHR4KTsKIHZvaWQgcnQyeDAwbGliX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYsIGNvbnN0IGludCBmb3JjZV9jb25maWcpOwogCiAvKgorICogUXVldWUgaGFuZGxlcnMuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfaW5pdF9yeChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKK3ZvaWQgcnQyeDAwcXVldWVfaW5pdF90eChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKK2ludCBydDJ4MDBxdWV1ZV9pbml0aWFsaXplKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwordm9pZCBydDJ4MDBxdWV1ZV91bmluaXRpYWxpemUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CitpbnQgcnQyeDAwcXVldWVfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Cit2b2lkIHJ0MngwMHF1ZXVlX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qCiAgKiBGaXJtd2FyZSBoYW5kbGVycy4KICAqLwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0ZJUk1XQVJFCkBAIC0xMDAsMjggKzE0OCw4MCBAQAogICogUkZraWxsIGhhbmRsZXJzLgogICovCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCi1pbnQgcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwordm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MngwMHJma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotaW50IHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKK3ZvaWQgcnQyeDAwcmZraWxsX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDByZmtpbGxfZnJlZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKK3ZvaWQgcnQyeDAwcmZraWxsX3N1c3BlbmQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Cit2b2lkIHJ0MngwMHJma2lsbF9yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfc3VzcGVuZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwcmZraWxsX3Jlc3VtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworfQogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCisvKgorICogTEVEIGhhbmRsZXJzCisgKi8KKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCit2b2lkIHJ0MngwMGxlZHNfbGVkX3F1YWxpdHkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgaW50IHJzc2kpOwordm9pZCBydDJ4MDBsZWRzX2xlZF9hc3NvYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBib29sIGVuYWJsZWQpOwordm9pZCBydDJ4MDBsZWRzX2xlZF9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBib29sIGVuYWJsZWQpOwordm9pZCBydDJ4MDBsZWRzX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwordm9pZCBydDJ4MDBsZWRzX3VucmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Cit2b2lkIHJ0MngwMGxlZHNfc3VzcGVuZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKK3ZvaWQgcnQyeDAwbGVkc19yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGxlZHNfbGVkX3F1YWxpdHkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJICBpbnQgcnNzaSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGxlZHNfbGVkX2Fzc29jKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCWJvb2wgZW5hYmxlZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGxlZHNfbGVkX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCWJvb2wgZW5hYmxlZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGxlZHNfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGxlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwbGVkc19zdXNwZW5kKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBsZWRzX3Jlc3VtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworfQorI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KKwogI2VuZGlmIC8qIFJUMlgwMExJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKaW5kZXggZTNmMTVlNS4uYzIwNmI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMwLDEwICszMCwxMSBAQAogI2luY2x1ZGUgInJ0MngwMGxpYi5oIgogCiBzdGF0aWMgaW50IHJ0MngwMG1hY190eF9ydHNfY3RzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJc3RydWN0IGRhdGFfcmluZyAqcmluZywKKwkJCQlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKIHsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgc2l6ZTsKIApAQCAtNTIsMTUgKzUzLDIyIEBACiAJc2tiX3B1dChza2IsIHNpemUpOwogCiAJaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKLQkJaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5pbnRlcmZhY2UuaWQsCisJCWllZWU4MDIxMV9jdHN0b3NlbGZfZ2V0KHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnZpZiwKIAkJCQkJZnJhZ19za2ItPmRhdGEsIGZyYWdfc2tiLT5sZW4sIGNvbnRyb2wsCiAJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2N0cyAqKShza2ItPmRhdGEpKTsKIAllbHNlCi0JCWllZWU4MDIxMV9ydHNfZ2V0KHJ0MngwMGRldi0+aHcsIHJ0MngwMGRldi0+aW50ZXJmYWNlLmlkLAorCQlpZWVlODAyMTFfcnRzX2dldChydDJ4MDBkZXYtPmh3LCBjb250cm9sLT52aWYsCiAJCQkJICBmcmFnX3NrYi0+ZGF0YSwgZnJhZ19za2ItPmxlbiwgY29udHJvbCwKIAkJCQkgIChzdHJ1Y3QgaWVlZTgwMjExX3J0cyAqKShza2ItPmRhdGEpKTsKIAotCWlmIChydDJ4MDBkZXYtPm9wcy0+bGliLT53cml0ZV90eF9kYXRhKHJ0MngwMGRldiwgcmluZywgc2tiLCBjb250cm9sKSkgeworCS8qCisJICogSW5pdGlhbGl6ZSBza2IgZGVzY3JpcHRvcgorCSAqLworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CisJc2tiZGVzYy0+ZmxhZ3MgfD0gRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOworCisJaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX3R4X2RhdGEocnQyeDAwZGV2LCBxdWV1ZSwgc2tiLCBjb250cm9sKSkgewogCQlXQVJOSU5HKHJ0MngwMGRldiwgIkZhaWxlZCB0byBzZW5kIFJUUy9DVFMgZnJhbWUuXG4iKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTczLDcgKzgxLDggQEAKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmllZWU4MDIxMWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CiAJdTE2IGZyYW1lX2NvbnRyb2w7CiAKIAkvKgpAQCAtODgsMTAgKzk3LDE0IEBACiAJfQogCiAJLyoKLQkgKiBEZXRlcm1pbmUgd2hpY2ggcmluZyB0byBwdXQgcGFja2V0IG9uLgorCSAqIERldGVybWluZSB3aGljaCBxdWV1ZSB0byBwdXQgcGFja2V0IG9uLgogCSAqLwotCXJpbmcgPSBydDJ4MDBsaWJfZ2V0X3JpbmcocnQyeDAwZGV2LCBjb250cm9sLT5xdWV1ZSk7Ci0JaWYgKHVubGlrZWx5KCFyaW5nKSkgeworCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9TRU5EX0FGVEVSX0RUSU0gJiYKKwkgICAgdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIFJUMlgwMF9CQ05fUVVFVUVfQVRJTSk7CisJZWxzZQorCQlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKKwlpZiAodW5saWtlbHkoIXF1ZXVlKSkgewogCQlFUlJPUihydDJ4MDBkZXYsCiAJCSAgICAgICJBdHRlbXB0IHRvIHNlbmQgcGFja2V0IG92ZXIgaW52YWxpZCBxdWV1ZSAlZC5cbiIKIAkJICAgICAgIlBsZWFzZSBmaWxlIGJ1ZyByZXBvcnQgdG8gJXMuXG4iLApAQCAtMTEwLDIzICsxMjMsMjkgQEAKIAlpZiAoIWlzX3J0c19mcmFtZShmcmFtZV9jb250cm9sKSAmJiAhaXNfY3RzX2ZyYW1lKGZyYW1lX2NvbnRyb2wpICYmCiAJICAgIChjb250cm9sLT5mbGFncyAmIChJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMgfAogCQkJICAgICAgIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QpKSkgewotCQlpZiAocnQyeDAwX3JpbmdfZnJlZShyaW5nKSA8PSAxKSB7CisJCWlmIChydDJ4MDBxdWV1ZV9hdmFpbGFibGUocXVldWUpIDw9IDEpIHsKIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnF1ZXVlKTsKIAkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAkJfQogCi0JCWlmIChydDJ4MDBtYWNfdHhfcnRzX2N0cyhydDJ4MDBkZXYsIHJpbmcsIHNrYiwgY29udHJvbCkpIHsKKwkJaWYgKHJ0MngwMG1hY190eF9ydHNfY3RzKHJ0MngwMGRldiwgcXVldWUsIHNrYiwgY29udHJvbCkpIHsKIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnF1ZXVlKTsKIAkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAkJfQogCX0KIAotCWlmIChydDJ4MDBkZXYtPm9wcy0+bGliLT53cml0ZV90eF9kYXRhKHJ0MngwMGRldiwgcmluZywgc2tiLCBjb250cm9sKSkgeworCS8qCisJICogSW5pdGlhbGl6ZSBza2IgZGVzY3JpcHRvcgorCSAqLworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CisKKwlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+d3JpdGVfdHhfZGF0YShydDJ4MDBkZXYsIHF1ZXVlLCBza2IsIGNvbnRyb2wpKSB7CiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIGNvbnRyb2wtPnF1ZXVlKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAotCWlmIChydDJ4MDBfcmluZ19mdWxsKHJpbmcpKQorCWlmIChydDJ4MDBxdWV1ZV9mdWxsKHF1ZXVlKSkKIAkJaWVlZTgwMjExX3N0b3BfcXVldWUocnQyeDAwZGV2LT5odywgY29udHJvbC0+cXVldWUpOwogCiAJaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPmtpY2tfdHhfcXVldWUpCkBAIC0xNjIsMjcgKzE4MSw2NyBAQAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaW50ZXJmYWNlICppbnRmID0gJnJ0MngwMGRldi0+aW50ZXJmYWNlOwotCi0JLyogRklYTUU6IEJlYWNvbmluZyBpcyBicm9rZW4gaW4gcnQyeDAwLiAqLwotCWlmIChjb25mLT50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgfHwKLQkgICAgY29uZi0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkgewotCQlFUlJPUihydDJ4MDBkZXYsCi0JCSAgICAgICJydDJ4MDAgZG9lcyBub3Qgc3VwcG9ydCBBZGhvYyBvciBNYXN0ZXIgbW9kZSIpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQorCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKGNvbmYtPnZpZik7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0KKwkgICAgcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04pOworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkgPSBOVUxMOworCXVuc2lnbmVkIGludCBpOwogCiAJLyoKLQkgKiBEb24ndCBhbGxvdyBpbnRlcmZhY2VzIHRvIGJlIGFkZGVkIHdoaWxlCi0JICogZWl0aGVyIHRoZSBkZXZpY2UgaGFzIGRpc2FwcGVhcmVkIG9yIHdoZW4KLQkgKiBhbm90aGVyIGludGVyZmFjZSBpcyBhbHJlYWR5IHByZXNlbnQuCisJICogRG9uJ3QgYWxsb3cgaW50ZXJmYWNlcyB0byBiZSBhZGRlZAorCSAqIHRoZSBkZXZpY2UgaGFzIGRpc2FwcGVhcmVkLgogCSAqLwogCWlmICghdGVzdF9iaXQoREVWSUNFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICBpc19pbnRlcmZhY2VfcHJlc2VudChpbnRmKSkKKwkgICAgIXRlc3RfYml0KERFVklDRV9TVEFSVEVELCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBXaGVuIHdlIGRvbid0IHN1cHBvcnQgbWl4ZWQgaW50ZXJmYWNlcyAoYSBjb21iaW5hdGlvbgorCSAqIG9mIHN0YSBhbmQgYXAgdmlydHVhbCBpbnRlcmZhY2VzKSB0aGVuIHdlIGNhbiBvbmx5CisJICogYWRkIHRoaXMgaW50ZXJmYWNlIHdoZW4gdGhlIHJpdmFsIGludGVyZmFjZSBjb3VudCBpcyAwLgorCSAqLworCWlmICghdGVzdF9iaXQoRFJJVkVSX1NVUFBPUlRfTUlYRURfSU5URVJGQUNFUywgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCisJICAgICgoY29uZi0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCAmJiBydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KSB8fAorCSAgICAgKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYgcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50KSkpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCWludGYtPmlkID0gY29uZi0+dmlmOwotCWludGYtPnR5cGUgPSBjb25mLT50eXBlOworCS8qCisJICogQ2hlY2sgaWYgd2UgZXhjZWVkZWQgdGhlIG1heGltdW0gYW1vdW50IG9mIHN1cHBvcnRlZCBpbnRlcmZhY2VzLgorCSAqLworCWlmICgoY29uZi0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCAmJgorCSAgICAgcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50ID49IHJ0MngwMGRldi0+b3BzLT5tYXhfYXBfaW50ZikgfHwKKwkgICAgKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYKKwkgICAgIHJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQgPj0gcnQyeDAwZGV2LT5vcHMtPm1heF9zdGFfaW50ZikpCisJCXJldHVybiAtRU5PQlVGUzsKKworCS8qCisJICogTG9vcCB0aHJvdWdoIGFsbCBiZWFjb24gcXVldWVzIHRvIGZpbmQgYSBmcmVlCisJICogZW50cnkuIFNpbmNlIHRoZXJlIGFyZSBhcyBtdWNoIGJlYWNvbiBlbnRyaWVzCisJICogYXMgdGhlIG1heGltdW0gaW50ZXJmYWNlcywgdGhpcyBzZWFyY2ggc2hvdWxkbid0CisJICogZmFpbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKKwkJZW50cnkgPSAmcXVldWUtPmVudHJpZXNbaV07CisJCWlmICghX190ZXN0X2FuZF9zZXRfYml0KEVOVFJZX0JDTl9BU1NJR05FRCwgJmVudHJ5LT5mbGFncykpCisJCQlicmVhazsKKwl9CisKKwlpZiAodW5saWtlbHkoaSA9PSBxdWV1ZS0+bGltaXQpKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwkvKgorCSAqIFdlIGFyZSBub3cgYWJzb2x1dGVseSBzdXJlIHRoZSBpbnRlcmZhY2UgY2FuIGJlIGNyZWF0ZWQsCisJICogaW5jcmVhc2UgaW50ZXJmYWNlIGNvdW50IGFuZCBzdGFydCBpbml0aWFsaXphdGlvbi4KKwkgKi8KKworCWlmIChjb25mLT50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKQorCQlydDJ4MDBkZXYtPmludGZfYXBfY291bnQrKzsKKwllbHNlCisJCXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQrKzsKKworCXNwaW5fbG9ja19pbml0KCZpbnRmLT5sb2NrKTsKKwlpbnRmLT5iZWFjb24gPSBlbnRyeTsKKwogCWlmIChjb25mLT50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKQogCQltZW1jcHkoJmludGYtPmJzc2lkLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweSgmaW50Zi0+bWFjLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwpAQCAtMTkyLDggKzI1MSwxNCBAQAogCSAqIGhhcyBiZWVuIGluaXRpYWxpemVkLiBPdGhlcndpc2UgdGhlIGRldmljZSBjYW4gcmVzZXQKIAkgKiB0aGUgTUFDIHJlZ2lzdGVycy4KIAkgKi8KLQlydDJ4MDBsaWJfY29uZmlnX21hY19hZGRyKHJ0MngwMGRldiwgaW50Zi0+bWFjKTsKLQlydDJ4MDBsaWJfY29uZmlnX3R5cGUocnQyeDAwZGV2LCBjb25mLT50eXBlKTsKKwlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCBjb25mLT50eXBlLCBpbnRmLT5tYWMsIE5VTEwpOworCisJLyoKKwkgKiBTb21lIGZpbHRlcnMgZGVwZW5kIG9uIHRoZSBjdXJyZW50IHdvcmtpbmcgbW9kZS4gV2UgY2FuIGZvcmNlCisJICogYW4gdXBkYXRlIGR1cmluZyB0aGUgbmV4dCBjb25maWd1cmVfZmlsdGVyKCkgcnVuIGJ5IG1hYzgwMjExIGJ5CisJICogcmVzZXR0aW5nIHRoZSBjdXJyZW50IHBhY2tldF9maWx0ZXIgc3RhdGUuCisJICovCisJcnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjAzLDcgKzI2OCw3IEBACiAJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXN0cnVjdCBpbnRlcmZhY2UgKmludGYgPSAmcnQyeDAwZGV2LT5pbnRlcmZhY2U7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYoY29uZi0+dmlmKTsKIAogCS8qCiAJICogRG9uJ3QgYWxsb3cgaW50ZXJmYWNlcyB0byBiZSByZW1vdmUgd2hpbGUKQEAgLTIxMSwyMSArMjc2LDI3IEBACiAJICogbm8gaW50ZXJmYWNlIGlzIHByZXNlbnQuCiAJICovCiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICFpc19pbnRlcmZhY2VfcHJlc2VudChpbnRmKSkKKwkgICAgKGNvbmYtPnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYgIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCkgfHwKKwkgICAgKGNvbmYtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYgIXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQpKQogCQlyZXR1cm47CiAKLQlpbnRmLT5pZCA9IDA7Ci0JaW50Zi0+dHlwZSA9IElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQ7Ci0JbWVtc2V0KCZpbnRmLT5ic3NpZCwgMHgwMCwgRVRIX0FMRU4pOwotCW1lbXNldCgmaW50Zi0+bWFjLCAweDAwLCBFVEhfQUxFTik7CisJaWYgKGNvbmYtPnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCisJCXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudC0tOworCWVsc2UKKwkJcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudC0tOworCisJLyoKKwkgKiBSZWxlYXNlIGJlYWNvbiBlbnRyeSBzbyBpdCBpcyBhdmFpbGFibGUgZm9yCisJICogbmV3IGludGVyZmFjZXMgYWdhaW4uCisJICovCisJX19jbGVhcl9iaXQoRU5UUllfQkNOX0FTU0lHTkVELCAmaW50Zi0+YmVhY29uLT5mbGFncyk7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgYnNzaWQgYW5kIG1hYyBhZGRyZXNzIHJlZ2lzdGVycwogCSAqIGFyZSBjbGVhcmVkIHRvIHByZXZlbnQgZmFsc2UgQUNLaW5nIG9mIGZyYW1lcy4KIAkgKi8KLQlydDJ4MDBsaWJfY29uZmlnX21hY19hZGRyKHJ0MngwMGRldiwgaW50Zi0+bWFjKTsKLQlydDJ4MDBsaWJfY29uZmlnX2Jzc2lkKHJ0MngwMGRldiwgaW50Zi0+YnNzaWQpOwotCXJ0MngwMGxpYl9jb25maWdfdHlwZShydDJ4MDBkZXYsIGludGYtPnR5cGUpOworCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsCisJCQkgICAgICBJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElELCBOVUxMLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlKTsKIApAQCAtMjcwLDcgKzM0MSw3IEBACiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaW50ZXJmYWNlICppbnRmID0gJnJ0MngwMGRldi0+aW50ZXJmYWNlOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAJaW50IHN0YXR1czsKIAogCS8qCkBAIC0yODAsMTIgKzM1MSw3IEBACiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogSWYgdGhlIGdpdmVuIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyZWQgdHlwZSwKLQkgKiB0aGVyZSBoYXMgYmVlbiBhIHByb2JsZW0uCi0JICovCi0JaWYgKGNvbmYtPnR5cGUgIT0gaW50Zi0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKIAogCS8qCiAJICogSWYgdGhlIGludGVyZmFjZSBkb2VzIG5vdCB3b3JrIGluIG1hc3RlciBtb2RlLApAQCAtMjk0LDcgKzM2MCwxNiBAQAogCSAqLwogCWlmIChjb25mLT50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQKQogCQltZW1jcHkoJmludGYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCXJ0MngwMGxpYl9jb25maWdfYnNzaWQocnQyeDAwZGV2LCBpbnRmLT5ic3NpZCk7CisKKwlzcGluX3VubG9jaygmaW50Zi0+bG9jayk7CisKKwkvKgorCSAqIENhbGwgcnQyeDAwX2NvbmZpZ19pbnRmKCkgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2sgY29udGV4dCBzaW5jZQorCSAqIHRoZSBjYWxsIHdpbGwgc2xlZXAgZm9yIFVTQiBkcml2ZXJzLiBCeSB1c2luZyB0aGUgaWVlZTgwMjExX2lmX2NvbmYKKwkgKiB2YWx1ZXMgYXMgYXJndW1lbnRzIHdlIG1ha2Uga2VlcCBhY2Nlc3MgdG8gcnQyeDAwX2ludGYgdGhyZWFkIHNhZmUKKwkgKiBldmVuIHdpdGhvdXQgdGhlIGxvY2suCisJICovCisJcnQyeDAwbGliX2NvbmZpZ19pbnRmKHJ0MngwMGRldiwgaW50ZiwgY29uZi0+dHlwZSwgTlVMTCwgY29uZi0+YnNzaWQpOwogCiAJLyoKIAkgKiBXZSBvbmx5IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYmVhY29uIHdoZW4gbWFzdGVyIG1vZGUgaXMgZW5hYmxlZC4KQEAgLTMxMiw2ICszODcsNTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19jb25maWdfaW50ZXJmYWNlKTsKIAordm9pZCBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCWludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCisJLyoKKwkgKiBNYXNrIG9mZiBhbnkgZmxhZ3Mgd2UgYXJlIGdvaW5nIHRvIGlnbm9yZQorCSAqIGZyb20gdGhlIHRvdGFsX2ZsYWdzIGZpZWxkLgorCSAqLworCSp0b3RhbF9mbGFncyAmPQorCSAgICBGSUZfQUxMTVVMVEkgfAorCSAgICBGSUZfRkNTRkFJTCB8CisJICAgIEZJRl9QTENQRkFJTCB8CisJICAgIEZJRl9DT05UUk9MIHwKKwkgICAgRklGX09USEVSX0JTUyB8CisJICAgIEZJRl9QUk9NSVNDX0lOX0JTUzsKKworCS8qCisJICogQXBwbHkgc29tZSBydWxlcyB0byB0aGUgZmlsdGVyczoKKwkgKiAtIFNvbWUgZmlsdGVycyBpbXBseSBkaWZmZXJlbnQgZmlsdGVycyB0byBiZSBzZXQuCisJICogLSBTb21lIHRoaW5ncyB3ZSBjYW4ndCBmaWx0ZXIgb3V0IGF0IGFsbC4KKwkgKiAtIE11bHRpY2FzdCBmaWx0ZXIgc2VlbXMgdG8ga2lsbCBicm9hZGNhc3QgdHJhZmZpYyBzbyBuZXZlciB1c2UgaXQuCisJICovCisJKnRvdGFsX2ZsYWdzIHw9IEZJRl9BTExNVUxUSTsKKwlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX09USEVSX0JTUyB8fAorCSAgICAqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCisJCSp0b3RhbF9mbGFncyB8PSBGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgd29yayBsZWZ0IGZvciB1cy4KKwkgKi8KKwlpZiAocnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyID09ICp0b3RhbF9mbGFncykKKwkJcmV0dXJuOworCXJ0MngwMGRldi0+cGFja2V0X2ZpbHRlciA9ICp0b3RhbF9mbGFnczsKKworCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19maWx0ZXIocnQyeDAwZGV2LCAqdG90YWxfZmxhZ3MpOworCWVsc2UKKwkJcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPmZpbHRlcl93b3JrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyKTsKKwogaW50IHJ0MngwMG1hY19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCiB7CkBAIC0zMzQsOSArNDUzLDExIEBACiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKLQkJbWVtY3B5KCZzdGF0cy0+ZGF0YVtpXSwgJnJ0MngwMGRldi0+dHhbaV0uc3RhdHMsCi0JCSAgICAgICBzaXplb2YocnQyeDAwZGV2LT50eFtpXS5zdGF0cykpOworCWZvciAoaSA9IDA7IGkgPCBody0+cXVldWVzOyBpKyspIHsKKwkJc3RhdHMtPmRhdGFbaV0ubGVuID0gcnQyeDAwZGV2LT50eFtpXS5sZW5ndGg7CisJCXN0YXRzLT5kYXRhW2ldLmxpbWl0ID0gcnQyeDAwZGV2LT50eFtpXS5saW1pdDsKKwkJc3RhdHMtPmRhdGFbaV0uY291bnQgPSBydDJ4MDBkZXYtPnR4W2ldLmNvdW50OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMzQ4LDcxICs0NjksODMgQEAKIAkJCQl1MzIgY2hhbmdlcykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0JaW50IHNob3J0X3ByZWFtYmxlOwotCWludCBhY2tfdGltZW91dDsKLQlpbnQgYWNrX2NvbnN1bWVfdGltZTsKLQlpbnQgZGlmczsKLQlpbnQgcHJlYW1ibGU7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKKwl1bnNpZ25lZCBpbnQgZGVsYXllZCA9IDA7CiAKIAkvKgotCSAqIFdlIG9ubHkgc3VwcG9ydCBjaGFuZ2luZyBwcmVhbWJsZSBtb2RlLgorCSAqIFdoZW4gdGhlIGFzc29jaWF0aW9uIHN0YXR1cyBoYXMgY2hhbmdlZCB3ZSBtdXN0IHJlc2V0IHRoZSBsaW5rCisJICogdHVuZXIgY291bnRlci4gVGhpcyBpcyBiZWNhdXNlIHNvbWUgZHJpdmVycyBkZXRlcm1pbmUgaWYgdGhleQorCSAqIHNob3VsZCBwZXJmb3JtIGxpbmsgdHVuaW5nIGJhc2VkIG9uIHRoZSBudW1iZXIgb2Ygc2Vjb25kcworCSAqIHdoaWxlIGFzc29jaWF0ZWQgb3Igbm90IGFzc29jaWF0ZWQuCiAJICovCi0JaWYgKCEoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkpCi0JCXJldHVybjsKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0FTU09DKSB7CisJCXJ0MngwMGRldi0+bGluay5jb3VudCA9IDA7CiAKLQlzaG9ydF9wcmVhbWJsZSA9IGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7Ci0JcHJlYW1ibGUgPSBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID8KLQkJCQlTSE9SVF9QUkVBTUJMRSA6IFBSRUFNQkxFOworCQlpZiAoYnNzX2NvbmYtPmFzc29jKQorCQkJcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQrKzsKKwkJZWxzZQorCQkJcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQtLTsKIAotCWRpZnMgPSAoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUpID8KLQkJU0hPUlRfRElGUyA6IERJRlM7Ci0JYWNrX3RpbWVvdXQgPSBkaWZzICsgUExDUCArIHByZWFtYmxlICsgZ2V0X2R1cmF0aW9uKEFDS19TSVpFLCAxMCk7CisJCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncykpCisJCQlydDJ4MDBsZWRzX2xlZF9hc3NvYyhydDJ4MDBkZXYsCisJCQkJCSAgICAgISFydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCk7CisJCWVsc2UKKwkJCWRlbGF5ZWQgfD0gREVMQVlFRF9MRURfQVNTT0M7CisJfQogCi0JYWNrX2NvbnN1bWVfdGltZSA9IFNJRlMgKyBQTENQICsgcHJlYW1ibGUgKyBnZXRfZHVyYXRpb24oQUNLX1NJWkUsIDEwKTsKKwkvKgorCSAqIFdoZW4gdGhlIGVycCBpbmZvcm1hdGlvbiBoYXMgY2hhbmdlZCwgd2Ugc2hvdWxkIHBlcmZvcm0KKwkgKiBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gc3RlcHMuIEZvciBhbGwgb3RoZXIgY2hhbmdlcyB3ZSBhcmUgZG9uZS4KKwkgKi8KKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgeworCQlpZiAoIXRlc3RfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQkJcnQyeDAwbGliX2NvbmZpZ19lcnAocnQyeDAwZGV2LCBpbnRmLCBic3NfY29uZik7CisJCWVsc2UKKwkJCWRlbGF5ZWQgfD0gREVMQVlFRF9DT05GSUdfRVJQOworCX0KIAotCWlmIChzaG9ydF9wcmVhbWJsZSkKLQkJX19zZXRfYml0KENPTkZJR19TSE9SVF9QUkVBTUJMRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCWVsc2UKLQkJX19jbGVhcl9iaXQoQ09ORklHX1NIT1JUX1BSRUFNQkxFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfcHJlYW1ibGUocnQyeDAwZGV2LCBzaG9ydF9wcmVhbWJsZSwKLQkJCQkJICAgICBhY2tfdGltZW91dCwgYWNrX2NvbnN1bWVfdGltZSk7CisJc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKKwltZW1jcHkoJmludGYtPmNvbmYsIGJzc19jb25mLCBzaXplb2YoKmJzc19jb25mKSk7CisJaWYgKGRlbGF5ZWQpIHsKKwkJaW50Zi0+ZGVsYXllZF9mbGFncyB8PSBkZWxheWVkOworCQlxdWV1ZV93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKKwl9CisJc3Bpbl91bmxvY2soJmludGYtPmxvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQpOwogCi1pbnQgcnQyeDAwbWFjX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKK2ludCBydDJ4MDBtYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlX2lkeCwKIAkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IGRhdGFfcmluZyAqcmluZzsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CiAKLQlyaW5nID0gcnQyeDAwbGliX2dldF9yaW5nKHJ0MngwMGRldiwgcXVldWUpOwotCWlmICh1bmxpa2VseSghcmluZykpCisJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxdWV1ZV9pZHgpOworCWlmICh1bmxpa2VseSghcXVldWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCiAJICogVGhlIHBhc3NlZCB2YXJpYWJsZXMgYXJlIHN0b3JlZCBhcyByZWFsIHZhbHVlICgoMl5uKS0xKS4KIAkgKiBSYWxpbmsgcmVnaXN0ZXJzIHJlcXVpcmUgdG8ga25vdyB0aGUgYml0IG51bWJlciAnbicuCiAJICovCi0JaWYgKHBhcmFtcy0+Y3dfbWluKQotCQlyaW5nLT50eF9wYXJhbXMuY3dfbWluID0gZmxzKHBhcmFtcy0+Y3dfbWluKTsKKwlpZiAocGFyYW1zLT5jd19taW4gPiAwKQorCQlxdWV1ZS0+Y3dfbWluID0gZmxzKHBhcmFtcy0+Y3dfbWluKTsKIAllbHNlCi0JCXJpbmctPnR4X3BhcmFtcy5jd19taW4gPSA1OyAvKiBjd19taW46IDJeNSA9IDMyLiAqLworCQlxdWV1ZS0+Y3dfbWluID0gNTsgLyogY3dfbWluOiAyXjUgPSAzMi4gKi8KIAotCWlmIChwYXJhbXMtPmN3X21heCkKLQkJcmluZy0+dHhfcGFyYW1zLmN3X21heCA9IGZscyhwYXJhbXMtPmN3X21heCk7CisJaWYgKHBhcmFtcy0+Y3dfbWF4ID4gMCkKKwkJcXVldWUtPmN3X21heCA9IGZscyhwYXJhbXMtPmN3X21heCk7CiAJZWxzZQotCQlyaW5nLT50eF9wYXJhbXMuY3dfbWF4ID0gMTA7IC8qIGN3X21pbjogMl4xMCA9IDEwMjQuICovCisJCXF1ZXVlLT5jd19tYXggPSAxMDsgLyogY3dfbWluOiAyXjEwID0gMTAyNC4gKi8KIAotCWlmIChwYXJhbXMtPmFpZnMpCi0JCXJpbmctPnR4X3BhcmFtcy5haWZzID0gcGFyYW1zLT5haWZzOworCWlmIChwYXJhbXMtPmFpZnMgPj0gMCkKKwkJcXVldWUtPmFpZnMgPSBwYXJhbXMtPmFpZnM7CiAJZWxzZQotCQlyaW5nLT50eF9wYXJhbXMuYWlmcyA9IDI7CisJCXF1ZXVlLT5haWZzID0gMjsKIAogCUlORk8ocnQyeDAwZGV2LAotCSAgICAgIkNvbmZpZ3VyZWQgVFggcmluZyAlZCAtIENXbWluOiAlZCwgQ1dtYXg6ICVkLCBBaWZzOiAlZC5cbiIsCi0JICAgICBxdWV1ZSwgcmluZy0+dHhfcGFyYW1zLmN3X21pbiwgcmluZy0+dHhfcGFyYW1zLmN3X21heCwKLQkgICAgIHJpbmctPnR4X3BhcmFtcy5haWZzKTsKKwkgICAgICJDb25maWd1cmVkIFRYIHF1ZXVlICVkIC0gQ1dtaW46ICVkLCBDV21heDogJWQsIEFpZnM6ICVkLlxuIiwKKwkgICAgIHF1ZXVlX2lkeCwgcXVldWUtPmN3X21pbiwgcXVldWUtPmN3X21heCwgcXVldWUtPmFpZnMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKaW5kZXggODA0YTk5OC4uNzg2N2VjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMyLDY0ICszMiwyMSBAQAogI2luY2x1ZGUgInJ0MngwMHBjaS5oIgogCiAvKgotICogQmVhY29uIGhhbmRsZXJzLgotICovCi1pbnQgcnQyeDAwcGNpX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgc2tiX2Rlc2MgKmRlc2M7Ci0Jc3RydWN0IGRhdGFfcmluZyAqcmluZzsKLQlzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnk7Ci0KLQkvKgotCSAqIEp1c3QgaW4gY2FzZSBtYWM4MDIxMSBkb2Vzbid0IHNldCB0aGlzIGNvcnJlY3RseSwKLQkgKiBidXQgd2UgbmVlZCB0aGlzIHF1ZXVlIHNldCBmb3IgdGhlIGRlc2NyaXB0b3IKLQkgKiBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQljb250cm9sLT5xdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT047Ci0JcmluZyA9IHJ0MngwMGxpYl9nZXRfcmluZyhydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKLQllbnRyeSA9IHJ0MngwMF9nZXRfZGF0YV9lbnRyeShyaW5nKTsKLQotCS8qCi0JICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgotCSAqLwotCWRlc2MgPSBnZXRfc2tiX2Rlc2Moc2tiKTsKLQlkZXNjLT5kZXNjX2xlbiA9IHJpbmctPmRlc2Nfc2l6ZTsKLQlkZXNjLT5kYXRhX2xlbiA9IHNrYi0+bGVuOwotCWRlc2MtPmRlc2MgPSBlbnRyeS0+cHJpdjsKLQlkZXNjLT5kYXRhID0gc2tiLT5kYXRhOwotCWRlc2MtPnJpbmcgPSByaW5nOwotCWRlc2MtPmVudHJ5ID0gZW50cnk7Ci0KLQltZW1jcHkoZW50cnktPmRhdGFfYWRkciwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JcnQyeDAwbGliX3dyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBza2IsIGNvbnRyb2wpOwotCi0JLyoKLQkgKiBFbmFibGUgYmVhY29uIGdlbmVyYXRpb24uCi0JICovCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lja190eF9xdWV1ZShydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcGNpX2JlYWNvbl91cGRhdGUpOwotCi0vKgogICogVFggZGF0YSBoYW5kbGVycy4KICAqLwogaW50IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgc3RydWN0IGRhdGFfcmluZyAqcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQogewotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSA9IHJ0MngwMF9nZXRfZGF0YV9lbnRyeShyaW5nKTsKLQlfX2xlMzIgKnR4ZCA9IGVudHJ5LT5wcml2OwotCXN0cnVjdCBza2JfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYKTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggKnByaXZfdHggPSBlbnRyeS0+cHJpdl9kYXRhOworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKIAl1MzIgd29yZDsKIAotCWlmIChydDJ4MDBfcmluZ19mdWxsKHJpbmcpKQorCWlmIChydDJ4MDBxdWV1ZV9mdWxsKHF1ZXVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMCwgJndvcmQpOwogCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBUWERfRU5UUllfT1dORVJfTklDKSB8fAogCSAgICBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZCwgVFhEX0VOVFJZX1ZBTElEKSkgewpAQCAtMTAzLDE4ICs2MCwxOCBAQAogCS8qCiAJICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgogCSAqLwotCWRlc2MgPSBnZXRfc2tiX2Rlc2Moc2tiKTsKLQlkZXNjLT5kZXNjX2xlbiA9IHJpbmctPmRlc2Nfc2l6ZTsKLQlkZXNjLT5kYXRhX2xlbiA9IHNrYi0+bGVuOwotCWRlc2MtPmRlc2MgPSBlbnRyeS0+cHJpdjsKLQlkZXNjLT5kYXRhID0gc2tiLT5kYXRhOwotCWRlc2MtPnJpbmcgPSByaW5nOwotCWRlc2MtPmVudHJ5ID0gZW50cnk7CisJc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOworCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGE7CisJc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbjsKKwlza2JkZXNjLT5kZXNjID0gcHJpdl90eC0+ZGVzYzsKKwlza2JkZXNjLT5kZXNjX2xlbiA9IHF1ZXVlLT5kZXNjX3NpemU7CisJc2tiZGVzYy0+ZW50cnkgPSBlbnRyeTsKIAotCW1lbWNweShlbnRyeS0+ZGF0YV9hZGRyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwltZW1jcHkoJnByaXZfdHgtPmNvbnRyb2wsIGNvbnRyb2wsIHNpemVvZihwcml2X3R4LT5jb250cm9sKSk7CisJbWVtY3B5KHByaXZfdHgtPmRhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCXJ0MngwMGxpYl93cml0ZV90eF9kZXNjKHJ0MngwMGRldiwgc2tiLCBjb250cm9sKTsKIAotCXJ0MngwMF9yaW5nX2luZGV4X2luYyhyaW5nKTsKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMocXVldWUsIFFfSU5ERVgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjUsMjkgKzgyLDI4IEBACiAgKi8KIHZvaWQgcnQyeDAwcGNpX3J4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBkYXRhX3JpbmcgKnJpbmcgPSBydDJ4MDBkZXYtPnJ4OwotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IHJ0MngwMGRldi0+cng7CisJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcng7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzdHJ1Y3Qgc2tiX2Rlc2MgKnNrYmRlc2M7Ci0Jc3RydWN0IHJ4ZGF0YV9lbnRyeV9kZXNjIGRlc2M7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOworCXN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyByeGRlc2M7CiAJaW50IGhlYWRlcl9zaXplOwotCV9fbGUzMiAqcnhkOwogCWludCBhbGlnbjsKIAl1MzIgd29yZDsKIAogCXdoaWxlICgxKSB7Ci0JCWVudHJ5ID0gcnQyeDAwX2dldF9kYXRhX2VudHJ5KHJpbmcpOwotCQlyeGQgPSBlbnRyeS0+cHJpdjsKLQkJcnQyeDAwX2Rlc2NfcmVhZChyeGQsIDAsICZ3b3JkKTsKKwkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOworCQlwcml2X3J4ID0gZW50cnktPnByaXZfZGF0YTsKKwkJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3J4LT5kZXNjLCAwLCAmd29yZCk7CiAKIAkJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkLCBSWERfRU5UUllfT1dORVJfTklDKSkKIAkJCWJyZWFrOwogCi0JCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKLQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+ZmlsbF9yeGRvbmUoZW50cnksICZkZXNjKTsKKwkJbWVtc2V0KCZyeGRlc2MsIDAsIHNpemVvZihyeGRlc2MpKTsKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+ZmlsbF9yeGRvbmUoZW50cnksICZyeGRlc2MpOwogCi0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5kYXRhX2FkZHI7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXByaXZfcngtPmRhdGE7CiAJCWhlYWRlcl9zaXplID0KIAkJICAgIGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpOwogCkBAIC0xNjEsNjYgKzExNyw2OCBAQAogCQkgKiBBbGxvY2F0ZSB0aGUgc2tfYnVmZmVyLCBpbml0aWFsaXplIGl0IGFuZCBjb3B5CiAJCSAqIGFsbCBkYXRhIGludG8gaXQuCiAJCSAqLwotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGRlc2Muc2l6ZSArIGFsaWduKTsKLQkJaWYgKCFza2IpCisJCWVudHJ5LT5za2IgPSBkZXZfYWxsb2Nfc2tiKHJ4ZGVzYy5zaXplICsgYWxpZ24pOworCQlpZiAoIWVudHJ5LT5za2IpCiAJCQlyZXR1cm47CiAKLQkJc2tiX3Jlc2VydmUoc2tiLCBhbGlnbik7Ci0JCW1lbWNweShza2JfcHV0KHNrYiwgZGVzYy5zaXplKSwgZW50cnktPmRhdGFfYWRkciwgZGVzYy5zaXplKTsKKwkJc2tiX3Jlc2VydmUoZW50cnktPnNrYiwgYWxpZ24pOworCQltZW1jcHkoc2tiX3B1dChlbnRyeS0+c2tiLCByeGRlc2Muc2l6ZSksCisJCSAgICAgICBwcml2X3J4LT5kYXRhLCByeGRlc2Muc2l6ZSk7CiAKIAkJLyoKIAkJICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgogCQkgKi8KLQkJc2tiZGVzYyA9IGdldF9za2JfZGVzYyhza2IpOwotCQlza2JkZXNjLT5kZXNjX2xlbiA9IGVudHJ5LT5yaW5nLT5kZXNjX3NpemU7Ci0JCXNrYmRlc2MtPmRhdGFfbGVuID0gc2tiLT5sZW47Ci0JCXNrYmRlc2MtPmRlc2MgPSBlbnRyeS0+cHJpdjsKLQkJc2tiZGVzYy0+ZGF0YSA9IHNrYi0+ZGF0YTsKLQkJc2tiZGVzYy0+cmluZyA9IHJpbmc7CisJCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CisJCW1lbXNldChza2JkZXNjLCAwLCBzaXplb2YoKnNrYmRlc2MpKTsKKwkJc2tiZGVzYy0+ZGF0YSA9IGVudHJ5LT5za2ItPmRhdGE7CisJCXNrYmRlc2MtPmRhdGFfbGVuID0gZW50cnktPnNrYi0+bGVuOworCQlza2JkZXNjLT5kZXNjID0gcHJpdl9yeC0+ZGVzYzsKKwkJc2tiZGVzYy0+ZGVzY19sZW4gPSBxdWV1ZS0+ZGVzY19zaXplOwogCQlza2JkZXNjLT5lbnRyeSA9IGVudHJ5OwogCiAJCS8qCiAJCSAqIFNlbmQgdGhlIGZyYW1lIHRvIHJ0MngwMGxpYiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogCQkgKi8KLQkJcnQyeDAwbGliX3J4ZG9uZShlbnRyeSwgc2tiLCAmZGVzYyk7CisJCXJ0MngwMGxpYl9yeGRvbmUoZW50cnksICZyeGRlc2MpOwogCi0JCWlmICh0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJnJpbmctPnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkgewogCQkJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBSWERfRU5UUllfT1dORVJfTklDLCAxKTsKLQkJCXJ0MngwMF9kZXNjX3dyaXRlKHJ4ZCwgMCwgd29yZCk7CisJCQlydDJ4MDBfZGVzY193cml0ZShwcml2X3J4LT5kZXNjLCAwLCB3b3JkKTsKIAkJfQogCi0JCXJ0MngwMF9yaW5nX2luZGV4X2luYyhyaW5nKTsKKwkJcnQyeDAwcXVldWVfaW5kZXhfaW5jKHF1ZXVlLCBRX0lOREVYKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBwY2lfcnhkb25lKTsKIAotdm9pZCBydDJ4MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSwKLQkJICAgICAgY29uc3QgaW50IHR4X3N0YXR1cywgY29uc3QgaW50IHJldHJ5KQordm9pZCBydDJ4MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCSAgICAgIHN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYyAqdHhkZXNjKQogeworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eCA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIHdvcmQ7CiAKLQlydDJ4MDBsaWJfdHhkb25lKGVudHJ5LCB0eF9zdGF0dXMsIHJldHJ5KTsKKwl0eGRlc2MtPmNvbnRyb2wgPSAmcHJpdl90eC0+Y29udHJvbDsKKwlydDJ4MDBsaWJfdHhkb25lKGVudHJ5LCB0eGRlc2MpOwogCiAJLyoKIAkgKiBNYWtlIHRoaXMgZW50cnkgYXZhaWxhYmxlIGZvciByZXVzZS4KIAkgKi8KIAllbnRyeS0+ZmxhZ3MgPSAwOwogCi0JcnQyeDAwX2Rlc2NfcmVhZChlbnRyeS0+cHJpdiwgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX0VOVFJZX09XTkVSX05JQywgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfRU5UUllfVkFMSUQsIDApOwotCXJ0MngwMF9kZXNjX3dyaXRlKGVudHJ5LT5wcml2LCAwLCB3b3JkKTsKKwlydDJ4MDBfZGVzY193cml0ZShwcml2X3R4LT5kZXNjLCAwLCB3b3JkKTsKIAotCXJ0MngwMF9yaW5nX2luZGV4X2RvbmVfaW5jKGVudHJ5LT5yaW5nKTsKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYX0RPTkUpOwogCiAJLyoKLQkgKiBJZiB0aGUgZGF0YSByaW5nIHdhcyBmdWxsIGJlZm9yZSB0aGUgdHhkb25lIGhhbmRsZXIKKwkgKiBJZiB0aGUgZGF0YSBxdWV1ZSB3YXMgZnVsbCBiZWZvcmUgdGhlIHR4ZG9uZSBoYW5kbGVyCiAJICogd2UgbXVzdCBtYWtlIHN1cmUgdGhlIHBhY2tldCBxdWV1ZSBpbiB0aGUgbWFjODAyMTEgc3RhY2sKIAkgKiBpcyByZWVuYWJsZWQgd2hlbiB0aGUgdHhkb25lIGhhbmRsZXIgaGFzIGZpbmlzaGVkLgogCSAqLwotCWlmICghcnQyeDAwX3JpbmdfZnVsbChlbnRyeS0+cmluZykpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0MngwMGRldi0+aHcsCi0JCQkJICAgICBlbnRyeS0+dHhfc3RhdHVzLmNvbnRyb2wucXVldWUpOworCWlmICghcnQyeDAwcXVldWVfZnVsbChlbnRyeS0+cXVldWUpKQorCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShydDJ4MDBkZXYtPmh3LCBwcml2X3R4LT5jb250cm9sLnF1ZXVlKTsKIAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcGNpX3R4ZG9uZSk7CkBAIC0yMjgsNzMgKzE4NiwxMjIgQEAKIC8qCiAgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCiAgKi8KLSNkZWZpbmUgcHJpdl9vZmZzZXQoX19yaW5nLCBfX2kpCQkJCVwKLSh7CQkJCQkJCQlcCi0JcmluZy0+ZGF0YV9hZGRyICsgKGkgKiByaW5nLT5kZXNjX3NpemUpOwkJXAorI2RlZmluZSBkZXNjX3NpemUoX19xdWV1ZSkJCQlcCisoewkJCQkJCVwKKwkgKChfX3F1ZXVlKS0+bGltaXQgKiAoX19xdWV1ZSktPmRlc2Nfc2l6ZSk7XAogfSkKIAotI2RlZmluZSBkYXRhX2FkZHJfb2Zmc2V0KF9fcmluZywgX19pKQkJCQlcCi0oewkJCQkJCQkJXAotCShfX3JpbmcpLT5kYXRhX2FkZHIgKwkJCQkJXAotCSAgICAoKF9fcmluZyktPnN0YXRzLmxpbWl0ICogKF9fcmluZyktPmRlc2Nfc2l6ZSkgKwlcCi0JICAgICgoX19pKSAqIChfX3JpbmcpLT5kYXRhX3NpemUpOwkJCVwKKyNkZWZpbmUgZGF0YV9zaXplKF9fcXVldWUpCQkJXAorKHsJCQkJCQlcCisJICgoX19xdWV1ZSktPmxpbWl0ICogKF9fcXVldWUpLT5kYXRhX3NpemUpO1wKIH0pCiAKLSNkZWZpbmUgZGF0YV9kbWFfb2Zmc2V0KF9fcmluZywgX19pKQkJCQlcCi0oewkJCQkJCQkJXAotCShfX3JpbmcpLT5kYXRhX2RtYSArCQkJCQlcCi0JICAgICgoX19yaW5nKS0+c3RhdHMubGltaXQgKiAoX19yaW5nKS0+ZGVzY19zaXplKSArCVwKLQkgICAgKChfX2kpICogKF9fcmluZyktPmRhdGFfc2l6ZSk7CQkJXAorI2RlZmluZSBkbWFfc2l6ZShfX3F1ZXVlKQkJCVwKKyh7CQkJCQkJXAorCWRhdGFfc2l6ZShfX3F1ZXVlKSArIGRlc2Nfc2l6ZShfX3F1ZXVlKTtcCiB9KQogCi1zdGF0aWMgaW50IHJ0MngwMHBjaV9hbGxvY19kbWEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nKQorI2RlZmluZSBkZXNjX29mZnNldChfX3F1ZXVlLCBfX2Jhc2UsIF9faSkJXAorKHsJCQkJCQlcCisJKF9fYmFzZSkgKyBkYXRhX3NpemUoX19xdWV1ZSkgKyAJXAorCSAgICAoKF9faSkgKiAoX19xdWV1ZSktPmRlc2Nfc2l6ZSk7CVwKK30pCisKKyNkZWZpbmUgZGF0YV9vZmZzZXQoX19xdWV1ZSwgX19iYXNlLCBfX2kpCVwKKyh7CQkJCQkJXAorCShfX2Jhc2UpICsJCQkJXAorCSAgICAoKF9faSkgKiAoX19xdWV1ZSktPmRhdGFfc2l6ZSk7CVwKK30pCisKK3N0YXRpYyBpbnQgcnQyeDAwcGNpX2FsbG9jX3F1ZXVlX2RtYShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQogeworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gcnQyeDAwZGV2X3BjaShydDJ4MDBkZXYpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCAqcHJpdl9yeDsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHggKnByaXZfdHg7CisJdm9pZCAqYWRkcjsKKwlkbWFfYWRkcl90IGRtYTsKKwl2b2lkICpkZXNjX2FkZHI7CisJZG1hX2FkZHJfdCBkZXNjX2RtYTsKKwl2b2lkICpkYXRhX2FkZHI7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qCiAJICogQWxsb2NhdGUgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvciBhbmQgYnVmZmVyLgogCSAqLwotCXJpbmctPmRhdGFfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHJ0MngwMGRldl9wY2kocnQyeDAwZGV2KSwKLQkJCQkJICAgICAgIHJ0MngwMF9nZXRfcmluZ19zaXplKHJpbmcpLAotCQkJCQkgICAgICAgJnJpbmctPmRhdGFfZG1hKTsKLQlpZiAoIXJpbmctPmRhdGFfYWRkcikKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldiwgZG1hX3NpemUocXVldWUpLCAmZG1hKTsKKwlpZiAoIWFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCisJbWVtc2V0KGFkZHIsIDAsIGRtYV9zaXplKHF1ZXVlKSk7CisKIAkvKgotCSAqIEluaXRpYWxpemUgYWxsIHJpbmcgZW50cmllcyB0byBjb250YWluIHZhbGlkCi0JICogYWRkcmVzc2VzLgorCSAqIEluaXRpYWxpemUgYWxsIHF1ZXVlIGVudHJpZXMgdG8gY29udGFpbiB2YWxpZCBhZGRyZXNzZXMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IHJpbmctPnN0YXRzLmxpbWl0OyBpKyspIHsKLQkJcmluZy0+ZW50cnlbaV0ucHJpdiA9IHByaXZfb2Zmc2V0KHJpbmcsIGkpOwotCQlyaW5nLT5lbnRyeVtpXS5kYXRhX2FkZHIgPSBkYXRhX2FkZHJfb2Zmc2V0KHJpbmcsIGkpOwotCQlyaW5nLT5lbnRyeVtpXS5kYXRhX2RtYSA9IGRhdGFfZG1hX29mZnNldChyaW5nLCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKKwkJZGVzY19hZGRyID0gZGVzY19vZmZzZXQocXVldWUsIGFkZHIsIGkpOworCQlkZXNjX2RtYSA9IGRlc2Nfb2Zmc2V0KHF1ZXVlLCBkbWEsIGkpOworCQlkYXRhX2FkZHIgPSBkYXRhX29mZnNldChxdWV1ZSwgYWRkciwgaSk7CisJCWRhdGFfZG1hID0gZGF0YV9vZmZzZXQocXVldWUsIGRtYSwgaSk7CisKKwkJaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX1JYKSB7CisJCQlwcml2X3J4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJcHJpdl9yeC0+ZGVzYyA9IGRlc2NfYWRkcjsKKwkJCXByaXZfcngtPmRlc2NfZG1hID0gZGVzY19kbWE7CisJCQlwcml2X3J4LT5kYXRhID0gZGF0YV9hZGRyOworCQkJcHJpdl9yeC0+ZGF0YV9kbWEgPSBkYXRhX2RtYTsKKwkJfSBlbHNlIHsKKwkJCXByaXZfdHggPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCQlwcml2X3R4LT5kZXNjID0gZGVzY19hZGRyOworCQkJcHJpdl90eC0+ZGVzY19kbWEgPSBkZXNjX2RtYTsKKwkJCXByaXZfdHgtPmRhdGEgPSBkYXRhX2FkZHI7CisJCQlwcml2X3R4LT5kYXRhX2RtYSA9IGRhdGFfZG1hOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MngwMHBjaV9mcmVlX2RtYShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgIHN0cnVjdCBkYXRhX3JpbmcgKnJpbmcpCitzdGF0aWMgdm9pZCBydDJ4MDBwY2lfZnJlZV9xdWV1ZV9kbWEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgIHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKIHsKLQlpZiAocmluZy0+ZGF0YV9hZGRyKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHJ0MngwMGRldl9wY2kocnQyeDAwZGV2KSwKLQkJCQkgICAgcnQyeDAwX2dldF9yaW5nX3NpemUocmluZyksCi0JCQkJICAgIHJpbmctPmRhdGFfYWRkciwgcmluZy0+ZGF0YV9kbWEpOwotCXJpbmctPmRhdGFfYWRkciA9IE5VTEw7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBydDJ4MDBkZXZfcGNpKHJ0MngwMGRldik7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCAqcHJpdl90eDsKKwl2b2lkICpkYXRhX2FkZHI7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKworCWlmIChxdWV1ZS0+cWlkID09IFFJRF9SWCkgeworCQlwcml2X3J4ID0gcXVldWUtPmVudHJpZXNbMF0ucHJpdl9kYXRhOworCQlkYXRhX2FkZHIgPSBwcml2X3J4LT5kYXRhOworCQlkYXRhX2RtYSA9IHByaXZfcngtPmRhdGFfZG1hOworCisJCXByaXZfcngtPmRhdGEgPSBOVUxMOworCX0gZWxzZSB7CisJCXByaXZfdHggPSBxdWV1ZS0+ZW50cmllc1swXS5wcml2X2RhdGE7CisJCWRhdGFfYWRkciA9IHByaXZfdHgtPmRhdGE7CisJCWRhdGFfZG1hID0gcHJpdl90eC0+ZGF0YV9kbWE7CisKKwkJcHJpdl90eC0+ZGF0YSA9IE5VTEw7CisJfQorCisJaWYgKGRhdGFfYWRkcikKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwY2lfZGV2LCBkbWFfc2l6ZShxdWV1ZSksCisJCQkJICAgIGRhdGFfYWRkciwgZGF0YV9kbWEpOwogfQogCiBpbnQgcnQyeDAwcGNpX2luaXRpYWxpemUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHJ0MngwMGRldl9wY2kocnQyeDAwZGV2KTsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAlpbnQgc3RhdHVzOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBETUEKIAkgKi8KLQlyaW5nX2Zvcl9lYWNoKHJ0MngwMGRldiwgcmluZykgewotCQlzdGF0dXMgPSBydDJ4MDBwY2lfYWxsb2NfZG1hKHJ0MngwMGRldiwgcmluZyk7CisJcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgeworCQlzdGF0dXMgPSBydDJ4MDBwY2lfYWxsb2NfcXVldWVfZG1hKHJ0MngwMGRldiwgcXVldWUpOwogCQlpZiAoc3RhdHVzKQogCQkJZ290byBleGl0OwogCX0KQEAgLTMyMSw3ICszMjgsNyBAQAogCiB2b2lkIHJ0MngwMHBjaV91bmluaXRpYWxpemUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAogCS8qCiAJICogRnJlZSBpcnEgbGluZS4KQEAgLTMzMSw4ICszMzgsOCBAQAogCS8qCiAJICogRnJlZSBETUEKIAkgKi8KLQlyaW5nX2Zvcl9lYWNoKHJ0MngwMGRldiwgcmluZykKLQkJcnQyeDAwcGNpX2ZyZWVfZG1hKHJ0MngwMGRldiwgcmluZyk7CisJcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKKwkJcnQyeDAwcGNpX2ZyZWVfcXVldWVfZG1hKHJ0MngwMGRldiwgcXVldWUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcGNpX3VuaW5pdGlhbGl6ZSk7CiAKQEAgLTM0Nyw5ICszNTQsOSBAQAogCWtmcmVlKHJ0MngwMGRldi0+ZWVwcm9tKTsKIAlydDJ4MDBkZXYtPmVlcHJvbSA9IE5VTEw7CiAKLQlpZiAocnQyeDAwZGV2LT5jc3JfYWRkcikgewotCQlpb3VubWFwKHJ0MngwMGRldi0+Y3NyX2FkZHIpOwotCQlydDJ4MDBkZXYtPmNzcl9hZGRyID0gTlVMTDsKKwlpZiAocnQyeDAwZGV2LT5jc3IuYmFzZSkgeworCQlpb3VubWFwKHJ0MngwMGRldi0+Y3NyLmJhc2UpOworCQlydDJ4MDBkZXYtPmNzci5iYXNlID0gTlVMTDsKIAl9CiB9CiAKQEAgLTM1Nyw5ICszNjQsOSBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gcnQyeDAwZGV2X3BjaShydDJ4MDBkZXYpOwogCi0JcnQyeDAwZGV2LT5jc3JfYWRkciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDApLAorCXJ0MngwMGRldi0+Y3NyLmJhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAwKSwKIAkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDApKTsKLQlpZiAoIXJ0MngwMGRldi0+Y3NyX2FkZHIpCisJaWYgKCFydDJ4MDBkZXYtPmNzci5iYXNlKQogCQlnb3RvIGV4aXQ7CiAKIAlydDJ4MDBkZXYtPmVlcHJvbSA9IGt6YWxsb2MocnQyeDAwZGV2LT5vcHMtPmVlcHJvbV9zaXplLCBHRlBfS0VSTkVMKTsKQEAgLTUzMCw1ICs1MzcsNSBAQAogICovCiBNT0RVTEVfQVVUSE9SKERSVl9QUk9KRUNUKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKLU1PRFVMRV9ERVNDUklQVElPTigicnQyeDAwIGxpYnJhcnkiKTsKK01PRFVMRV9ERVNDUklQVElPTigicnQyeDAwIHBjaSBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggMmQxZWI4MS4uOWQxY2RiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTYxLDcgKzYxLDcgQEAKIAkJCQkJICAgY29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJCQkJCSAgIHUzMiAqdmFsdWUpCiB7Ci0JKnZhbHVlID0gcmVhZGwocnQyeDAwZGV2LT5jc3JfYWRkciArIG9mZnNldCk7CisJKnZhbHVlID0gcmVhZGwocnQyeDAwZGV2LT5jc3IuYmFzZSArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtNjksMTQgKzY5LDE0IEBACiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJICAgICB2b2lkICp2YWx1ZSwgY29uc3QgdTE2IGxlbmd0aCkKIHsKLQltZW1jcHlfZnJvbWlvKHZhbHVlLCBydDJ4MDBkZXYtPmNzcl9hZGRyICsgb2Zmc2V0LCBsZW5ndGgpOworCW1lbWNweV9mcm9taW8odmFsdWUsIHJ0MngwMGRldi0+Y3NyLmJhc2UgKyBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCQkgICAgdTMyIHZhbHVlKQogewotCXdyaXRlbCh2YWx1ZSwgcnQyeDAwZGV2LT5jc3JfYWRkciArIG9mZnNldCk7CisJd3JpdGVsKHZhbHVlLCBydDJ4MDBkZXYtPmNzci5iYXNlICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC04NCwyOCArODQsNjMgQEAKIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJICAgICAgdm9pZCAqdmFsdWUsIGNvbnN0IHUxNiBsZW5ndGgpCiB7Ci0JbWVtY3B5X3RvaW8ocnQyeDAwZGV2LT5jc3JfYWRkciArIG9mZnNldCwgdmFsdWUsIGxlbmd0aCk7CisJbWVtY3B5X3RvaW8ocnQyeDAwZGV2LT5jc3IuYmFzZSArIG9mZnNldCwgdmFsdWUsIGxlbmd0aCk7CiB9CiAKIC8qCi0gKiBCZWFjb24gaGFuZGxlcnMuCi0gKi8KLWludCBydDJ4MDBwY2lfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpOwotCi0vKgogICogVFggZGF0YSBoYW5kbGVycy4KICAqLwogaW50IHJ0MngwMHBjaV93cml0ZV90eF9kYXRhKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgc3RydWN0IGRhdGFfcmluZyAqcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKTsKIAotLyoKLSAqIFJYL1RYIGRhdGEgaGFuZGxlcnMuCisvKioKKyAqIHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeDogUGVyIFJYIGVudHJ5IFBDSSBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICoKKyAqIEBkZXNjOiBQb2ludGVyIHRvIGRldmljZSBkZXNjcmlwdG9yLgorICogQGRhdGE6IFBvaW50ZXIgdG8gZGV2aWNlJ3MgZW50cnkgbWVtb3J5LgorICogQGRtYTogRE1BIHBvaW50ZXIgdG8gJmRhdGEuCisgKi8KK3N0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCB7CisJX19sZTMyICpkZXNjOworCWRtYV9hZGRyX3QgZGVzY19kbWE7CisKKwl2b2lkICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7Cit9OworCisvKioKKyAqIHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eDogUGVyIFRYIGVudHJ5IFBDSSBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICoKKyAqIEBkZXNjOiBQb2ludGVyIHRvIGRldmljZSBkZXNjcmlwdG9yCisgKiBAZGF0YTogUG9pbnRlciB0byBkZXZpY2UncyBlbnRyeSBtZW1vcnkuCisgKiBAZG1hOiBETUEgcG9pbnRlciB0byAmZGF0YS4KKyAqIEBjb250cm9sOiBtYWM4MDIxMSBjb250cm9sIHN0cnVjdHVyZSB1c2VkIHRvIHRyYW5zbWl0IGRhdGEuCisgKi8KK3N0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV90eCB7CisJX19sZTMyICpkZXNjOworCWRtYV9hZGRyX3QgZGVzY19kbWE7CisKKwl2b2lkICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKK307CisKKy8qKgorICogcnQyeDAwcGNpX3J4ZG9uZSAtIEhhbmRsZSBSWCBkb25lIGV2ZW50cworICogQHJ0MngwMGRldjogRGV2aWNlIHBvaW50ZXIsIHNlZSAmc3RydWN0IHJ0MngwMF9kZXYuCiAgKi8KIHZvaWQgcnQyeDAwcGNpX3J4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLXZvaWQgcnQyeDAwcGNpX3R4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnksCi0JCSAgICAgIGNvbnN0IGludCB0eF9zdGF0dXMsIGNvbnN0IGludCByZXRyeSk7CisKKy8qKgorICogcnQyeDAwcGNpX3R4ZG9uZSAtIEhhbmRsZSBUWCBkb25lIGV2ZW50cworICogQHJ0MngwMGRldjogRGV2aWNlIHBvaW50ZXIsIHNlZSAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAZW50cnk6IEVudHJ5IHdoaWNoIGhhcyBjb21wbGV0ZWQgdGhlIHRyYW5zbWlzc2lvbiBvZiBhIGZyYW1lLgorICogQGRlc2M6IFRYIGRvbmUgZGVzY3JpcHRvcgorICovCit2b2lkIHJ0MngwMHBjaV90eGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJICAgICAgc3RydWN0IHR4ZG9uZV9lbnRyeV9kZXNjICpkZXNjKTsKIAogLyoKICAqIERldmljZSBpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5ZTlmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorCTU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoKKwlNb2R1bGU6IHJ0MngwMGxpYgorCUFic3RyYWN0OiBydDJ4MDAgcXVldWUgc3BlY2lmaWMgcm91dGluZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAicnQyeDAwLmgiCisjaW5jbHVkZSAicnQyeDAwbGliLmgiCisKK3N0cnVjdCBkYXRhX3F1ZXVlICpydDJ4MDBxdWV1ZV9nZXRfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSkKK3sKKwlpbnQgYXRpbSA9IHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmZsYWdzKTsKKworCWlmIChxdWV1ZSA8IHJ0MngwMGRldi0+aHctPnF1ZXVlcyAmJiBydDJ4MDBkZXYtPnR4KQorCQlyZXR1cm4gJnJ0MngwMGRldi0+dHhbcXVldWVdOworCisJaWYgKCFydDJ4MDBkZXYtPmJjbikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04pCisJCXJldHVybiAmcnQyeDAwZGV2LT5iY25bMF07CisJZWxzZSBpZiAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9BVElNICYmIGF0aW0pCisJCXJldHVybiAmcnQyeDAwZGV2LT5iY25bMV07CisKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHF1ZXVlX2dldF9xdWV1ZSk7CisKK3N0cnVjdCBxdWV1ZV9lbnRyeSAqcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwKKwkJCQkJICBlbnVtIHF1ZXVlX2luZGV4IGluZGV4KQoreworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmICh1bmxpa2VseShpbmRleCA+PSBRX0lOREVYX01BWCkpIHsKKwkJRVJST1IocXVldWUtPnJ0MngwMGRldiwKKwkJICAgICAgIkVudHJ5IHJlcXVlc3RlZCBmcm9tIGludmFsaWQgaW5kZXggdHlwZSAoJWQpXG4iLCBpbmRleCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCisJZW50cnkgPSAmcXVldWUtPmVudHJpZXNbcXVldWUtPmluZGV4W2luZGV4XV07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCisJcmV0dXJuIGVudHJ5OworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcXVldWVfZ2V0X2VudHJ5KTsKKwordm9pZCBydDJ4MDBxdWV1ZV9pbmRleF9pbmMoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBlbnVtIHF1ZXVlX2luZGV4IGluZGV4KQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoaW5kZXggPj0gUV9JTkRFWF9NQVgpKSB7CisJCUVSUk9SKHF1ZXVlLT5ydDJ4MDBkZXYsCisJCSAgICAgICJJbmRleCBjaGFuZ2Ugb24gaW52YWxpZCBpbmRleCB0eXBlICglZClcbiIsIGluZGV4KTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCisJcXVldWUtPmluZGV4W2luZGV4XSsrOworCWlmIChxdWV1ZS0+aW5kZXhbaW5kZXhdID49IHF1ZXVlLT5saW1pdCkKKwkJcXVldWUtPmluZGV4W2luZGV4XSA9IDA7CisKKwlpZiAoaW5kZXggPT0gUV9JTkRFWCkgeworCQlxdWV1ZS0+bGVuZ3RoKys7CisJfSBlbHNlIGlmIChpbmRleCA9PSBRX0lOREVYX0RPTkUpIHsKKwkJcXVldWUtPmxlbmd0aC0tOworCQlxdWV1ZS0+Y291bnQgKys7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycWZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHF1ZXVlX2luZGV4X2luYyk7CisKK3N0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX3Jlc2V0KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CisKKwlxdWV1ZS0+Y291bnQgPSAwOworCXF1ZXVlLT5sZW5ndGggPSAwOworCW1lbXNldChxdWV1ZS0+aW5kZXgsIDAsIHNpemVvZihxdWV1ZS0+aW5kZXgpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3ZvaWQgcnQyeDAwcXVldWVfaW5pdF9yeChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IHJ0MngwMGRldi0+cng7CisJdW5zaWduZWQgaW50IGk7CisKKwlydDJ4MDBxdWV1ZV9yZXNldChxdWV1ZSk7CisKKwlpZiAoIXJ0MngwMGRldi0+b3BzLT5saWItPmluaXRfcnhlbnRyeSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKQorCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5pbml0X3J4ZW50cnkocnQyeDAwZGV2LAorCQkJCQkJICAmcXVldWUtPmVudHJpZXNbaV0pOworfQorCit2b2lkIHJ0MngwMHF1ZXVlX2luaXRfdHgoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisJdW5zaWduZWQgaW50IGk7CisKKwl0eGFsbF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKSB7CisJCXJ0MngwMHF1ZXVlX3Jlc2V0KHF1ZXVlKTsKKworCQlpZiAoIXJ0MngwMGRldi0+b3BzLT5saWItPmluaXRfdHhlbnRyeSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykKKwkJCXJ0MngwMGRldi0+b3BzLT5saWItPmluaXRfdHhlbnRyeShydDJ4MDBkZXYsCisJCQkJCQkJICAmcXVldWUtPmVudHJpZXNbaV0pOworCX0KK30KKworc3RhdGljIGludCBydDJ4MDBxdWV1ZV9hbGxvY19lbnRyaWVzKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgKnFkZXNjKQoreworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cmllczsKKwl1bnNpZ25lZCBpbnQgZW50cnlfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXJ0MngwMHF1ZXVlX3Jlc2V0KHF1ZXVlKTsKKworCXF1ZXVlLT5saW1pdCA9IHFkZXNjLT5lbnRyeV9udW07CisJcXVldWUtPmRhdGFfc2l6ZSA9IHFkZXNjLT5kYXRhX3NpemU7CisJcXVldWUtPmRlc2Nfc2l6ZSA9IHFkZXNjLT5kZXNjX3NpemU7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFsbCBxdWV1ZSBlbnRyaWVzLgorCSAqLworCWVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJpZXMpICsgcWRlc2MtPnByaXZfc2l6ZTsKKwllbnRyaWVzID0ga3phbGxvYyhxdWV1ZS0+bGltaXQgKiBlbnRyeV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJpZXMpCisJCXJldHVybiAtRU5PTUVNOworCisjZGVmaW5lIFFVRVVFX0VOVFJZX1BSSVZfT0ZGU0VUKF9fYmFzZSwgX19pbmRleCwgX19saW1pdCwgX19lc2l6ZSwgX19wc2l6ZSkgXAorCSggKChjaGFyICopKF9fYmFzZSkpICsgKChfX2xpbWl0KSAqIChfX2VzaXplKSkgKyBcCisJICAgICgoX19pbmRleCkgKiAoX19wc2l6ZSkpICkKKworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgeworCQllbnRyaWVzW2ldLmZsYWdzID0gMDsKKwkJZW50cmllc1tpXS5xdWV1ZSA9IHF1ZXVlOworCQllbnRyaWVzW2ldLnNrYiA9IE5VTEw7CisJCWVudHJpZXNbaV0uZW50cnlfaWR4ID0gaTsKKwkJZW50cmllc1tpXS5wcml2X2RhdGEgPQorCQkgICAgUVVFVUVfRU5UUllfUFJJVl9PRkZTRVQoZW50cmllcywgaSwgcXVldWUtPmxpbWl0LAorCQkJCQkgICAgc2l6ZW9mKCplbnRyaWVzKSwgcWRlc2MtPnByaXZfc2l6ZSk7CisJfQorCisjdW5kZWYgUVVFVUVfRU5UUllfUFJJVl9PRkZTRVQKKworCXF1ZXVlLT5lbnRyaWVzID0gZW50cmllczsKKworCXJldHVybiAwOworfQorCitpbnQgcnQyeDAwcXVldWVfaW5pdGlhbGl6ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKwlpbnQgc3RhdHVzOworCisKKwlzdGF0dXMgPSBydDJ4MDBxdWV1ZV9hbGxvY19lbnRyaWVzKHJ0MngwMGRldi0+cngsIHJ0MngwMGRldi0+b3BzLT5yeCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCisJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgeworCQlzdGF0dXMgPSBydDJ4MDBxdWV1ZV9hbGxvY19lbnRyaWVzKHF1ZXVlLCBydDJ4MDBkZXYtPm9wcy0+dHgpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX2FsbG9jX2VudHJpZXMocnQyeDAwZGV2LT5iY24sIHJ0MngwMGRldi0+b3BzLT5iY24pOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdDsKKworCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX2FsbG9jX2VudHJpZXMoJnJ0MngwMGRldi0+YmNuWzFdLAorCQkJCQkgICBydDJ4MDBkZXYtPm9wcy0+YXRpbSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCisJcmV0dXJuIDA7CisKK2V4aXQ6CisJRVJST1IocnQyeDAwZGV2LCAiUXVldWUgZW50cmllcyBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCisJcnQyeDAwcXVldWVfdW5pbml0aWFsaXplKHJ0MngwMGRldik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIHJ0MngwMHF1ZXVlX3VuaW5pdGlhbGl6ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKworCXF1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpIHsKKwkJa2ZyZWUocXVldWUtPmVudHJpZXMpOworCQlxdWV1ZS0+ZW50cmllcyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9pbml0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5sb2NrKTsKKworCXF1ZXVlLT5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJcXVldWUtPnFpZCA9IHFpZDsKKwlxdWV1ZS0+YWlmcyA9IDI7CisJcXVldWUtPmN3X21pbiA9IDU7CisJcXVldWUtPmN3X21heCA9IDEwOworfQorCitpbnQgcnQyeDAwcXVldWVfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisJZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQ7CisJdW5zaWduZWQgaW50IHJlcV9hdGltID0KKwkgICAgISF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7CisKKwkvKgorCSAqIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBxdWV1ZXM6CisJICogUlg6IDEKKwkgKiBUWDogaHctPnF1ZXVlcworCSAqIEJlYWNvbjogMQorCSAqIEF0aW06IDEgKGlmIHJlcXVpcmVkKQorCSAqLworCXJ0MngwMGRldi0+ZGF0YV9xdWV1ZXMgPSAyICsgcnQyeDAwZGV2LT5ody0+cXVldWVzICsgcmVxX2F0aW07CisKKwlxdWV1ZSA9IGt6YWxsb2MocnQyeDAwZGV2LT5kYXRhX3F1ZXVlcyAqIHNpemVvZigqcXVldWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXF1ZXVlKSB7CisJCUVSUk9SKHJ0MngwMGRldiwgIlF1ZXVlIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSBwb2ludGVycworCSAqLworCXJ0MngwMGRldi0+cnggPSBxdWV1ZTsKKwlydDJ4MDBkZXYtPnR4ID0gJnF1ZXVlWzFdOworCXJ0MngwMGRldi0+YmNuID0gJnF1ZXVlWzEgKyBydDJ4MDBkZXYtPmh3LT5xdWV1ZXNdOworCisJLyoKKwkgKiBJbml0aWFsaXplIHF1ZXVlIHBhcmFtZXRlcnMuCisJICogUlg6IHFpZCA9IFFJRF9SWAorCSAqIFRYOiBxaWQgPSBRSURfQUNfQkUgKyBpbmRleAorCSAqIFRYOiBjd19taW46IDJeNSA9IDMyLgorCSAqIFRYOiBjd19tYXg6IDJeMTAgPSAxMDI0LgorCSAqIEJDTiAmIEF0aW06IHFpZCA9IFFJRF9NR01UCisJICovCisJcnQyeDAwcXVldWVfaW5pdChydDJ4MDBkZXYsIHJ0MngwMGRldi0+cngsIFFJRF9SWCk7CisKKwlxaWQgPSBRSURfQUNfQkU7CisJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKKwkJcnQyeDAwcXVldWVfaW5pdChydDJ4MDBkZXYsIHF1ZXVlLCBxaWQrKyk7CisKKwlydDJ4MDBxdWV1ZV9pbml0KHJ0MngwMGRldiwgJnJ0MngwMGRldi0+YmNuWzBdLCBRSURfTUdNVCk7CisJaWYgKHJlcV9hdGltKQorCQlydDJ4MDBxdWV1ZV9pbml0KHJ0MngwMGRldiwgJnJ0MngwMGRldi0+YmNuWzFdLCBRSURfTUdNVCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydDJ4MDBxdWV1ZV9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJa2ZyZWUocnQyeDAwZGV2LT5yeCk7CisJcnQyeDAwZGV2LT5yeCA9IE5VTEw7CisJcnQyeDAwZGV2LT50eCA9IE5VTEw7CisJcnQyeDAwZGV2LT5iY24gPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI3YzlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTAsMCArMSw0NjggQEAKKy8qCisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisJNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorCU1vZHVsZTogcnQyeDAwCisJQWJzdHJhY3Q6IHJ0MngwMCBxdWV1ZSBkYXRhc3RydWN0dXJlcyBhbmQgcm91dGluZXMKKyAqLworCisjaWZuZGVmIFJUMlgwMFFVRVVFX0gKKyNkZWZpbmUgUlQyWDAwUVVFVUVfSAorCisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKworLyoqCisgKiBET0M6IEVudHJpZSBmcmFtZSBzaXplCisgKgorICogUmFsaW5rIFBDSSBkZXZpY2VzIGRlbWFuZCB0aGUgRnJhbWUgc2l6ZSB0byBiZSBhIG11bHRpcGxlIG9mIDEyOCBieXRlcywKKyAqIGZvciBVU0IgZGV2aWNlcyB0aGlzIHJlc3RyaWN0aW9uIGRvZXMgbm90IGFwcGx5LCBidXQgdGhlIHZhbHVlIG9mCisgKiAyNDMyIG1ha2VzIHNlbnNlIHNpbmNlIGl0IGlzIGJpZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgbWF4aW11bSBmcmFnbWVudAorICogc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIGllZWU4MDIuMTEgc3BlY3MuCisgKi8KKyNkZWZpbmUgREFUQV9GUkFNRV9TSVpFCTI0MzIKKyNkZWZpbmUgTUdNVF9GUkFNRV9TSVpFCTI1NgorCisvKioKKyAqIERPQzogTnVtYmVyIG9mIGVudHJpZXMgcGVyIHF1ZXVlCisgKgorICogQWZ0ZXIgcmVzZWFyY2ggaXQgd2FzIGNvbmNsdWRlZCB0aGF0IDEyIGVudHJpZXMgaW4gYSBSWCBhbmQgVFgKKyAqIHF1ZXVlIHdvdWxkIGJlIHN1ZmZpY2llbnQuIEFsdGhvdWdoIHRoaXMgaXMgYWxtb3N0IG9uZSB0aGlyZCBvZgorICogdGhlIGFtb3VudCB0aGUgbGVnYWN5IGRyaXZlciBhbGxvY2F0ZWQsIHRoZSBxdWV1ZXMgYXJlbid0IGdldHRpbmcKKyAqIGZpbGxlZCB0byB0aGUgbWF4aW11bSBldmVuIHdoZW4gd29ya2luZyB3aXRoIHRoZSBtYXhpbXVtIHJhdGUuCisgKi8KKyNkZWZpbmUgUlhfRU5UUklFUwkxMgorI2RlZmluZSBUWF9FTlRSSUVTCTEyCisjZGVmaW5lIEJFQUNPTl9FTlRSSUVTCTEKKyNkZWZpbmUgQVRJTV9FTlRSSUVTCTEKKworLyoqCisgKiBlbnVtIGRhdGFfcXVldWVfcWlkOiBRdWV1ZSBpZGVudGlmaWNhdGlvbgorICovCitlbnVtIGRhdGFfcXVldWVfcWlkIHsKKwlRSURfQUNfQkUgPSAwLAorCVFJRF9BQ19CSyA9IDEsCisJUUlEX0FDX1ZJID0gMiwKKwlRSURfQUNfVk8gPSAzLAorCVFJRF9IQ0NBID0gNCwKKwlRSURfTUdNVCA9IDEzLAorCVFJRF9SWCA9IDE0LAorCVFJRF9PVEhFUiA9IDE1LAorfTsKKworLyoqCisgKiBlbnVtIHJ0MngwMF9iY25fcXVldWU6IEJlYWNvbiBxdWV1ZSBpbmRleAorICoKKyAqIFN0YXJ0IGNvdW50aW5nIHdpdGggYSBoaWdoIG9mZnNldCwgdGhpcyBiZWNhdXNlIHRoaXMgZW51bWVyYXRpb24KKyAqIHN1cHBsZW1lbnRzICZlbnVtIGllZWU4MDIxMV90eF9xdWV1ZSBhbmQgd2Ugc2hvdWxkIHByZXZlbnQgdmFsdWUKKyAqIGNvbmZsaWN0cy4KKyAqCisgKiBAUlQyWDAwX0JDTl9RVUVVRV9CRUFDT046IEJlYWNvbiBxdWV1ZQorICogQFJUMlgwMF9CQ05fUVVFVUVfQVRJTTogQXRpbSBxdWV1ZSAoc2VuZHMgZnJhbWUgYWZ0ZXIgYmVhY29uKQorICovCitlbnVtIHJ0MngwMF9iY25fcXVldWUgeworCVJUMlgwMF9CQ05fUVVFVUVfQkVBQ09OID0gMTAwLAorCVJUMlgwMF9CQ05fUVVFVUVfQVRJTSA9IDEwMSwKK307CisKKy8qKgorICogZW51bSBza2JfZnJhbWVfZGVzY19mbGFnczogRmxhZ3MgZm9yICZzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MKKyAqCisgKiBARlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOiBGcmFtZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSBkcml2ZXIKKyAqCWFuZCBzaG91bGQgbm90IGJlIHJlcG9ydGVkIGJhY2sgdG8gbWFjODAyMTEgZHVyaW5nIHR4ZG9uZS4KKyAqLworZW51bSBza2JfZnJhbWVfZGVzY19mbGFncyB7CisJRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEID0gMSA8PCAwLAorfTsKKworLyoqCisgKiBzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2M6IERlc2NyaXB0b3IgaW5mb3JtYXRpb24gZm9yIHRoZSBza2IgYnVmZmVyCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VkIG92ZXIgdGhlIHNrYi0+Y2IgYXJyYXksIHRoaXMgbWVhbnMgdGhhdAorICogdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIG5vdCBleGNlZWQgdGhlIHNpemUgb2YgdGhhdCBhcnJheSAoNDggYnl0ZXMpLgorICoKKyAqIEBmbGFnczogRnJhbWUgZmxhZ3MsIHNlZSAmZW51bSBza2JfZnJhbWVfZGVzY19mbGFncy4KKyAqIEBmcmFtZV90eXBlOiBGcmFtZSB0eXBlLCBzZWUgJmVudW0gcnQyeDAwX2R1bXBfdHlwZS4KKyAqIEBkYXRhOiBQb2ludGVyIHRvIGRhdGEgcGFydCBvZiBmcmFtZSAoU3RhcnQgb2YgaWVlZTgwMjExIGhlYWRlcikuCisgKiBAZGVzYzogUG9pbnRlciB0byBkZXNjcmlwdG9yIHBhcnQgb2YgdGhlIGZyYW1lLgorICoJTm90ZSB0aGF0IHRoaXMgcG9pbnRlciBjb3VsZCBwb2ludCB0byBzb21ldGhpbmcgb3V0c2lkZQorICoJb2YgdGhlIHNjb3BlIG9mIHRoZSBza2ItPmRhdGEgcG9pbnRlci4KKyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhLgorICogQGRlc2NfbGVuOiBMZW5ndGggb2YgdGhlIGZyYW1lIGRlc2NyaXB0b3IuCisKKyAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHdoaWNoIHRoaXMgc2sgYnVmZmVyIGJlbG9uZ3MuCisgKi8KK3N0cnVjdCBza2JfZnJhbWVfZGVzYyB7CisJdW5zaWduZWQgaW50IGZsYWdzOworCisJdW5zaWduZWQgaW50IGZyYW1lX3R5cGU7CisKKwl2b2lkICpkYXRhOworCXZvaWQgKmRlc2M7CisKKwl1bnNpZ25lZCBpbnQgZGF0YV9sZW47CisJdW5zaWduZWQgaW50IGRlc2NfbGVuOworCisJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrYl9mcmFtZV9kZXNjKiBnZXRfc2tiX2ZyYW1lX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBza2JfZnJhbWVfZGVzYykgPiBzaXplb2Yoc2tiLT5jYikpOworCXJldHVybiAoc3RydWN0IHNrYl9mcmFtZV9kZXNjICopJnNrYi0+Y2JbMF07Cit9CisKKy8qKgorICogZW51bSByeGRvbmVfZW50cnlfZGVzY19mbGFnczogRmxhZ3MgZm9yICZzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MKKyAqCisgKiBAUlhET05FX1NJR05BTF9QTENQOiBEb2VzIHRoZSBzaWduYWwgZmllbGQgY29udGFpbiB0aGUgcGxjcCB2YWx1ZSwKKyAqCW9yIGRvZXMgaXQgY29udGFpbiB0aGUgYml0cmF0ZSBpdHNlbGYuCisgKiBAUlhET05FX01ZX0JTUzogRG9lcyB0aGlzIGZyYW1lIG9yaWdpbmF0ZSBmcm9tIGRldmljZSdzIEJTUy4KKyAqLworZW51bSByeGRvbmVfZW50cnlfZGVzY19mbGFncyB7CisJUlhET05FX1NJR05BTF9QTENQID0gMSA8PCAwLAorCVJYRE9ORV9NWV9CU1MgPSAxIDw8IDEsCit9OworCisvKioKKyAqIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYzogUlggRW50cnkgZGVzY3JpcHRvcgorICoKKyAqIFN1bW1hcnkgb2YgaW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbiByZWFkIGZyb20gdGhlIFJYIGZyYW1lIGRlc2NyaXB0b3IuCisgKgorICogQHNpZ25hbDogU2lnbmFsIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KKyAqIEByc3NpOiBSU1NJIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KKyAqIEBzaXplOiBEYXRhIHNpemUgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgorICogQGZsYWdzOiBNQUM4MDIxMSByZWNlaXZlIGZsYWdzIChTZWUgJmVudW0gbWFjODAyMTFfcnhfZmxhZ3MpLgorICogQGRldl9mbGFnczogUmFsaW5rIHJlY2VpdmUgZmxhZ3MgKFNlZSAmZW51bSByeGRvbmVfZW50cnlfZGVzY19mbGFncykuCisKKyAqLworc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjIHsKKwlpbnQgc2lnbmFsOworCWludCByc3NpOworCWludCBzaXplOworCWludCBmbGFnczsKKwlpbnQgZGV2X2ZsYWdzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2M6IFRYIGRvbmUgZW50cnkgZGVzY3JpcHRvcgorICoKKyAqIFN1bW1hcnkgb2YgaW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbiByZWFkIGZyb20gdGhlIFRYIGZyYW1lIGRlc2NyaXB0b3IKKyAqIGFmdGVyIHRoZSBkZXZpY2UgaXMgZG9uZSB3aXRoIHRyYW5zbWlzc2lvbi4KKyAqCisgKiBAY29udHJvbDogQ29udHJvbCBzdHJ1Y3R1cmUgd2hpY2ggd2FzIHVzZWQgdG8gdHJhbnNtaXQgdGhlIGZyYW1lLgorICogQHN0YXR1czogVFggc3RhdHVzIChTZWUgJmVudW0gdHhfc3RhdHVzKS4KKyAqIEByZXRyeTogUmV0cnkgY291bnQuCisgKi8KK3N0cnVjdCB0eGRvbmVfZW50cnlfZGVzYyB7CisJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sOworCWludCBzdGF0dXM7CisJaW50IHJldHJ5OworfTsKKworLyoqCisgKiBlbnVtIHR4ZW50cnlfZGVzY19mbGFnczogU3RhdHVzIGZsYWdzIGZvciBUWCBlbnRyeSBkZXNjcmlwdG9yCisgKgorICogQEVOVFJZX1RYRF9SVFNfRlJBTUU6IFRoaXMgZnJhbWUgaXMgYSBSVFMgZnJhbWUuCisgKiBARU5UUllfVFhEX09GRE1fUkFURTogVGhpcyBmcmFtZSBpcyBzZW5kIG91dCB3aXRoIGFuIE9GRE0gcmF0ZS4KKyAqIEBFTlRSWV9UWERfTU9SRV9GUkFHOiBUaGlzIGZyYW1lIGlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgZnJhZ21lbnQuCisgKiBARU5UUllfVFhEX1JFUV9USU1FU1RBTVA6IFJlcXVpcmUgdGltZXN0YW1wIHRvIGJlIGluc2VydGVkLgorICogQEVOVFJZX1RYRF9CVVJTVDogVGhpcyBmcmFtZSBiZWxvbmdzIHRvIHRoZSBzYW1lIGJ1cnN0IGV2ZW50LgorICogQEVOVFJZX1RYRF9BQ0s6IEFuIEFDSyBpcyByZXF1aXJlZCBmb3IgdGhpcyBmcmFtZS4KKyAqLworZW51bSB0eGVudHJ5X2Rlc2NfZmxhZ3MgeworCUVOVFJZX1RYRF9SVFNfRlJBTUUsCisJRU5UUllfVFhEX09GRE1fUkFURSwKKwlFTlRSWV9UWERfTU9SRV9GUkFHLAorCUVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLAorCUVOVFJZX1RYRF9CVVJTVCwKKwlFTlRSWV9UWERfQUNLLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgdHhlbnRyeV9kZXNjOiBUWCBFbnRyeSBkZXNjcmlwdG9yCisgKgorICogU3VtbWFyeSBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlIGZyYW1lIGRlc2NyaXB0b3IgYmVmb3JlIHNlbmRpbmcgYSBUWCBmcmFtZS4KKyAqCisgKiBAZmxhZ3M6IERlc2NyaXB0b3IgZmxhZ3MgKFNlZSAmZW51bSBxdWV1ZV9lbnRyeV9mbGFncykuCisgKiBAcXVldWU6IFF1ZXVlIGlkZW50aWZpY2F0aW9uIChTZWUgJmVudW0gZGF0YV9xdWV1ZV9xaWQpLgorICogQGxlbmd0aF9oaWdoOiBQTENQIGxlbmd0aCBoaWdoIHdvcmQuCisgKiBAbGVuZ3RoX2xvdzogUExDUCBsZW5ndGggbG93IHdvcmQuCisgKiBAc2lnbmFsOiBQTENQIHNpZ25hbC4KKyAqIEBzZXJ2aWNlOiBQTENQIHNlcnZpY2UuCisgKiBAYWlmczogQUlGUyB2YWx1ZS4KKyAqIEBpZnM6IElGUyB2YWx1ZS4KKyAqIEBjd19taW46IGN3bWluIHZhbHVlLgorICogQGN3X21heDogY3dtYXggdmFsdWUuCisgKi8KK3N0cnVjdCB0eGVudHJ5X2Rlc2MgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwllbnVtIGRhdGFfcXVldWVfcWlkIHF1ZXVlOworCisJdTE2IGxlbmd0aF9oaWdoOworCXUxNiBsZW5ndGhfbG93OworCXUxNiBzaWduYWw7CisJdTE2IHNlcnZpY2U7CisKKwlpbnQgYWlmczsKKwlpbnQgaWZzOworCWludCBjd19taW47CisJaW50IGN3X21heDsKK307CisKKy8qKgorICogZW51bSBxdWV1ZV9lbnRyeV9mbGFnczogU3RhdHVzIGZsYWdzIGZvciBxdWV1ZSBlbnRyeQorICoKKyAqIEBFTlRSWV9CQ05fQVNTSUdORUQ6IFRoaXMgZW50cnkgaGFzIGJlZW4gYXNzaWduZWQgdG8gYW4gaW50ZXJmYWNlLgorICoJQXMgbG9uZyBhcyB0aGlzIGJpdCBpcyBzZXQsIHRoaXMgZW50cnkgbWF5IG9ubHkgYmUgdG91Y2hlZAorICoJdGhyb3VnaCB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZS4KKyAqIEBFTlRSWV9PV05FUl9ERVZJQ0VfREFUQTogVGhpcyBlbnRyeSBpcyBvd25lZCBieSB0aGUgZGV2aWNlIGZvciBkYXRhCisgKgl0cmFuc2ZlciAoZWl0aGVyIFRYIG9yIFJYIGRlcGVuZGluZyBvbiB0aGUgcXVldWUpLiBUaGUgZW50cnkgc2hvdWxkCisgKglvbmx5IGJlIHRvdWNoZWQgYWZ0ZXIgdGhlIGRldmljZSBoYXMgc2lnbmFsZWQgaXQgaXMgZG9uZSB3aXRoIGl0LgorICogQEVOVFJZX09XTkVSX0RFVklDRV9DUllQVE86IFRoaXMgZW50cnkgaXMgb3duZWQgYnkgdGhlIGRldmljZSBmb3IgZGF0YQorICoJZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiBUaGUgZW50cnkgc2hvdWxkIG9ubHkgYmUgdG91Y2hlZCBhZnRlcgorICoJdGhlIGRldmljZSBoYXMgc2lnbmFsZWQgaXQgaXMgZG9uZSB3aXRoIGl0LgorICovCisKK2VudW0gcXVldWVfZW50cnlfZmxhZ3MgeworCUVOVFJZX0JDTl9BU1NJR05FRCwKKwlFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwKKwlFTlRSWV9PV05FUl9ERVZJQ0VfQ1JZUFRPLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgcXVldWVfZW50cnk6IEVudHJ5IGluc2lkZSB0aGUgJnN0cnVjdCBkYXRhX3F1ZXVlCisgKgorICogQGZsYWdzOiBFbnRyeSBmbGFncywgc2VlICZlbnVtIHF1ZXVlX2VudHJ5X2ZsYWdzLgorICogQHF1ZXVlOiBUaGUgZGF0YSBxdWV1ZSAoJnN0cnVjdCBkYXRhX3F1ZXVlKSB0byB3aGljaCB0aGlzIGVudHJ5IGJlbG9uZ3MuCisgKiBAc2tiOiBUaGUgYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBiZWluZyB0cmFuc21pdHRlZCAoZm9yIFRYIHF1ZXVlKSwKKyAqCW9yIHVzZWQgdG8gZGlyZWN0bHkgcmVjaWV2ZSBkYXRhIGluIChmb3IgUlggcXVldWUpLgorICogQGVudHJ5X2lkeDogVGhlIGVudHJ5IGluZGV4IG51bWJlci4KKyAqIEBwcml2X2RhdGE6IFByaXZhdGUgZGF0YSBiZWxvbmdpbmcgdG8gdGhpcyBxdWV1ZSBlbnRyeS4gVGhlIHBvaW50ZXIKKyAqCXBvaW50cyB0byBkYXRhIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBkcml2ZXIgYW5kIHF1ZXVlIHR5cGUuCisgKi8KK3N0cnVjdCBxdWV1ZV9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl1bnNpZ25lZCBpbnQgZW50cnlfaWR4OworCisJdm9pZCAqcHJpdl9kYXRhOworfTsKKworLyoqCisgKiBlbnVtIHF1ZXVlX2luZGV4OiBRdWV1ZSBpbmRleCB0eXBlCisgKgorICogQFFfSU5ERVg6IEluZGV4IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZW50cnkgaW4gdGhlIHF1ZXVlLCBpZiB0aGlzIGVudHJ5IGlzCisgKglvd25lZCBieSB0aGUgaGFyZHdhcmUgdGhlbiB0aGUgcXVldWUgaXMgY29uc2lkZXJlZCB0byBiZSBmdWxsLgorICogQFFfSU5ERVhfRE9ORTogSW5kZXggcG9pbnRlciB0byB0aGUgbmV4dCBlbnRyeSB3aGljaCB3aWxsIGJlIGNvbXBsZXRlZCBieQorICoJdGhlIGhhcmR3YXJlIGFuZCBmb3Igd2hpY2ggd2UgbmVlZCB0byBydW4gdGhlIHR4ZG9uZSBoYW5kbGVyLiBJZiB0aGlzCisgKgllbnRyeSBpcyBub3Qgb3duZWQgYnkgdGhlIGhhcmR3YXJlIHRoZSBxdWV1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIGVtcHR5LgorICogQFFfSU5ERVhfQ1JZUFRPOiBJbmRleCBwb2ludGVyIHRvIHRoZSBuZXh0IGVudHJ5IHdoaWNoIGVuY3J5cHRpb24vZGVjcmlwdGlvbgorICoJd2lsbCBiZSBjb21wbGV0ZWQgYnkgdGhlIGhhcmR3YXJlIG5leHQuCisgKiBAUV9JTkRFWF9NQVg6IEtlZXAgbGFzdCwgdXNlZCBpbiAmc3RydWN0IGRhdGFfcXVldWUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplCisgKglvZiB0aGUgaW5kZXggYXJyYXkuCisgKi8KK2VudW0gcXVldWVfaW5kZXggeworCVFfSU5ERVgsCisJUV9JTkRFWF9ET05FLAorCVFfSU5ERVhfQ1JZUFRPLAorCVFfSU5ERVhfTUFYLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgZGF0YV9xdWV1ZTogRGF0YSBxdWV1ZQorICoKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gbWFpbiAmc3RydWN0IHJ0MngwMGRldiB3aGVyZSB0aGlzIHF1ZXVlIGJlbG9uZ3MgdG8uCisgKiBAZW50cmllczogQmFzZSBhZGRyZXNzIG9mIHRoZSAmc3RydWN0IHF1ZXVlX2VudHJ5IHdoaWNoIGFyZQorICoJcGFydCBvZiB0aGlzIHF1ZXVlLgorICogQHFpZDogVGhlIHF1ZXVlIGlkZW50aWZpY2F0aW9uLCBzZWUgJmVudW0gZGF0YV9xdWV1ZV9xaWQuCisgKiBAbG9jazogU3BpbmxvY2sgdG8gcHJvdGVjdCBpbmRleCBoYW5kbGluZy4gV2hlbmV2ZXIgQGluZGV4LCBAaW5kZXhfZG9uZSBvcgorICoJQGluZGV4X2NyeXB0IG5lZWRzIHRvIGJlIGNoYW5nZWQgdGhpcyBsb2NrIHNob3VsZCBiZSBncmFiYmVkIHRvIHByZXZlbnQKKyAqCWluZGV4IGNvcnJ1cHRpb24gZHVlIHRvIGNvbmN1cnJlbmN5LgorICogQGNvdW50OiBOdW1iZXIgb2YgZnJhbWVzIGhhbmRsZWQgaW4gdGhlIHF1ZXVlLgorICogQGxpbWl0OiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBxdWV1ZS4KKyAqIEBsZW5ndGg6IE51bWJlciBvZiBmcmFtZXMgaW4gcXVldWUuCisgKiBAaW5kZXg6IEluZGV4IHBvaW50ZXJzIHRvIGVudHJ5IHBvc2l0aW9ucyBpbiB0aGUgcXVldWUsCisgKgl1c2UgJmVudW0gcXVldWVfaW5kZXggdG8gZ2V0IGEgc3BlY2lmaWMgaW5kZXggZmllbGQuCisgKiBAYWlmczogVGhlIGFpZnMgdmFsdWUgZm9yIG91dGdvaW5nIGZyYW1lcyAoZmllbGQgaWdub3JlZCBpbiBSWCBxdWV1ZSkuCisgKiBAY3dfbWluOiBUaGUgY3cgbWluIHZhbHVlIGZvciBvdXRnb2luZyBmcmFtZXMgKGZpZWxkIGlnbm9yZWQgaW4gUlggcXVldWUpLgorICogQGN3X21heDogVGhlIGN3IG1heCB2YWx1ZSBmb3Igb3V0Z29pbmcgZnJhbWVzIChmaWVsZCBpZ25vcmVkIGluIFJYIHF1ZXVlKS4KKyAqIEBkYXRhX3NpemU6IE1heGltdW0gZGF0YSBzaXplIGZvciB0aGUgZnJhbWVzIGluIHRoaXMgcXVldWUuCisgKiBAZGVzY19zaXplOiBIYXJkd2FyZSBkZXNjcmlwdG9yIHNpemUgZm9yIHRoZSBkYXRhIGluIHRoaXMgcXVldWUuCisgKi8KK3N0cnVjdCBkYXRhX3F1ZXVlIHsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cmllczsKKworCWVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkOworCisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBzaG9ydCBsaW1pdDsKKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CisJdW5zaWduZWQgc2hvcnQgaW5kZXhbUV9JTkRFWF9NQVhdOworCisJdW5zaWduZWQgc2hvcnQgYWlmczsKKwl1bnNpZ25lZCBzaG9ydCBjd19taW47CisJdW5zaWduZWQgc2hvcnQgY3dfbWF4OworCisJdW5zaWduZWQgc2hvcnQgZGF0YV9zaXplOworCXVuc2lnbmVkIHNob3J0IGRlc2Nfc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IGRhdGFfcXVldWVfZGVzYzogRGF0YSBxdWV1ZSBkZXNjcmlwdGlvbgorICoKKyAqIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IGRyaXZlcnMKKyAqIHRvIGluZm9ybSBydDJ4MDBsaWIgYWJvdXQgdGhlIGNyZWF0aW9uIG9mIHRoZSBkYXRhIHF1ZXVlLgorICoKKyAqIEBlbnRyeV9udW06IE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgZm9yIGEgcXVldWUuCisgKiBAZGF0YV9zaXplOiBNYXhpbXVtIGRhdGEgc2l6ZSBmb3IgdGhlIGZyYW1lcyBpbiB0aGlzIHF1ZXVlLgorICogQGRlc2Nfc2l6ZTogSGFyZHdhcmUgZGVzY3JpcHRvciBzaXplIGZvciB0aGUgZGF0YSBpbiB0aGlzIHF1ZXVlLgorICogQHByaXZfc2l6ZTogU2l6ZSBvZiBwZXItcXVldWVfZW50cnkgcHJpdmF0ZSBkYXRhLgorICovCitzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHsKKwl1bnNpZ25lZCBzaG9ydCBlbnRyeV9udW07CisJdW5zaWduZWQgc2hvcnQgZGF0YV9zaXplOworCXVuc2lnbmVkIHNob3J0IGRlc2Nfc2l6ZTsKKwl1bnNpZ25lZCBzaG9ydCBwcml2X3NpemU7Cit9OworCisvKioKKyAqIHF1ZXVlX2VuZCAtIFJldHVybiBwb2ludGVyIHRvIHRoZSBsYXN0IHF1ZXVlIChIRUxQRVIgTUFDUk8pLgorICogQF9fZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgorICoKKyAqIFVzaW5nIHRoZSBiYXNlIHJ4IHBvaW50ZXIgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdmFpbGFibGUgcXVldWVzLAorICogdGhpcyBtYWNybyB3aWxsIHJldHVybiB0aGUgYWRkcmVzcyBvZiAxIHBvc2l0aW9uIGJleW9uZCAgdGhlIGVuZCBvZiB0aGUKKyAqIHF1ZXVlcyBhcnJheS4KKyAqLworI2RlZmluZSBxdWV1ZV9lbmQoX19kZXYpIFwKKwkmKF9fZGV2KS0+cnhbKF9fZGV2KS0+ZGF0YV9xdWV1ZXNdCisKKy8qKgorICogdHhfcXVldWVfZW5kIC0gUmV0dXJuIHBvaW50ZXIgdG8gdGhlIGxhc3QgVFggcXVldWUgKEhFTFBFUiBNQUNSTykuCisgKiBAX19kZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKgorICogVXNpbmcgdGhlIGJhc2UgdHggcG9pbnRlciBhbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGF2YWlsYWJsZSBUWAorICogcXVldWVzLCB0aGlzIG1hY3JvIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIDEgcG9zaXRpb24gYmV5b25kCisgKiB0aGUgZW5kIG9mIHRoZSBUWCBxdWV1ZSBhcnJheS4KKyAqLworI2RlZmluZSB0eF9xdWV1ZV9lbmQoX19kZXYpIFwKKwkmKF9fZGV2KS0+dHhbKF9fZGV2KS0+aHctPnF1ZXVlc10KKworLyoqCisgKiBxdWV1ZV9sb29wIC0gTG9vcCB0aHJvdWdoIHRoZSBxdWV1ZXMgd2l0aGluIGEgc3BlY2lmaWMgcmFuZ2UgKEhFTFBFUiBNQUNSTykuCisgKiBAX19lbnRyeTogUG9pbnRlciB3aGVyZSB0aGUgY3VycmVudCBxdWV1ZSBlbnRyeSB3aWxsIGJlIHN0b3JlZCBpbi4KKyAqIEBfX3N0YXJ0OiBTdGFydCBxdWV1ZSBwb2ludGVyLgorICogQF9fZW5kOiBFbmQgcXVldWUgcG9pbnRlci4KKyAqCisgKiBUaGlzIG1hY3JvIHdpbGwgbG9vcCB0aHJvdWdoIGFsbCBxdWV1ZXMgYmV0d2VlbiAmX19zdGFydCBhbmQgJl9fZW5kLgorICovCisjZGVmaW5lIHF1ZXVlX2xvb3AoX19lbnRyeSwgX19zdGFydCwgX19lbmQpCQkJXAorCWZvciAoKF9fZW50cnkpID0gKF9fc3RhcnQpOwkJCQlcCisJICAgICBwcmVmZXRjaCgmKF9fZW50cnkpWzFdKSwgKF9fZW50cnkpICE9IChfX2VuZCk7CVwKKwkgICAgIChfX2VudHJ5KSA9ICYoX19lbnRyeSlbMV0pCisKKy8qKgorICogcXVldWVfZm9yX2VhY2ggLSBMb29wIHRocm91Z2ggYWxsIHF1ZXVlcworICogQF9fZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgorICogQF9fZW50cnk6IFBvaW50ZXIgd2hlcmUgdGhlIGN1cnJlbnQgcXVldWUgZW50cnkgd2lsbCBiZSBzdG9yZWQgaW4uCisgKgorICogVGhpcyBtYWNybyB3aWxsIGxvb3AgdGhyb3VnaCBhbGwgYXZhaWxhYmxlIHF1ZXVlcy4KKyAqLworI2RlZmluZSBxdWV1ZV9mb3JfZWFjaChfX2RldiwgX19lbnRyeSkgXAorCXF1ZXVlX2xvb3AoX19lbnRyeSwgKF9fZGV2KS0+cngsIHF1ZXVlX2VuZChfX2RldikpCisKKy8qKgorICogdHhfcXVldWVfZm9yX2VhY2ggLSBMb29wIHRocm91Z2ggdGhlIFRYIHF1ZXVlcworICogQF9fZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2RldgorICogQF9fZW50cnk6IFBvaW50ZXIgd2hlcmUgdGhlIGN1cnJlbnQgcXVldWUgZW50cnkgd2lsbCBiZSBzdG9yZWQgaW4uCisgKgorICogVGhpcyBtYWNybyB3aWxsIGxvb3AgdGhyb3VnaCBhbGwgVFggcmVsYXRlZCBxdWV1ZXMgZXhjbHVkaW5nCisgKiB0aGUgQmVhY29uIGFuZCBBdGltIHF1ZXVlcy4KKyAqLworI2RlZmluZSB0eF9xdWV1ZV9mb3JfZWFjaChfX2RldiwgX19lbnRyeSkgXAorCXF1ZXVlX2xvb3AoX19lbnRyeSwgKF9fZGV2KS0+dHgsIHR4X3F1ZXVlX2VuZChfX2RldikpCisKKy8qKgorICogdHhhbGxfcXVldWVfZm9yX2VhY2ggLSBMb29wIHRocm91Z2ggYWxsIFRYIHJlbGF0ZWQgcXVldWVzCisgKiBAX19kZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKiBAX19lbnRyeTogUG9pbnRlciB3aGVyZSB0aGUgY3VycmVudCBxdWV1ZSBlbnRyeSB3aWxsIGJlIHN0b3JlZCBpbi4KKyAqCisgKiBUaGlzIG1hY3JvIHdpbGwgbG9vcCB0aHJvdWdoIGFsbCBUWCByZWxhdGVkIHF1ZXVlcyBpbmNsdWRpbmcKKyAqIHRoZSBCZWFjb24gYW5kIEF0aW0gcXVldWVzLgorICovCisjZGVmaW5lIHR4YWxsX3F1ZXVlX2Zvcl9lYWNoKF9fZGV2LCBfX2VudHJ5KSBcCisJcXVldWVfbG9vcChfX2VudHJ5LCAoX19kZXYpLT50eCwgcXVldWVfZW5kKF9fZGV2KSkKKworLyoqCisgKiBydDJ4MDBxdWV1ZV9lbXB0eSAtIENoZWNrIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4KKyAqIEBxdWV1ZTogUXVldWUgdG8gY2hlY2sgaWYgZW1wdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHF1ZXVlX2VtcHR5KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlyZXR1cm4gcXVldWUtPmxlbmd0aCA9PSAwOworfQorCisvKioKKyAqIHJ0MngwMHF1ZXVlX2Z1bGwgLSBDaGVjayBpZiB0aGUgcXVldWUgaXMgZnVsbC4KKyAqIEBxdWV1ZTogUXVldWUgdG8gY2hlY2sgaWYgZnVsbC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfZnVsbChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJcmV0dXJuIHF1ZXVlLT5sZW5ndGggPT0gcXVldWUtPmxpbWl0OworfQorCisvKioKKyAqIHJ0MngwMHF1ZXVlX2ZyZWUgLSBDaGVjayB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBlbnRyaWVzIGluIHF1ZXVlLgorICogQHF1ZXVlOiBRdWV1ZSB0byBjaGVjay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfYXZhaWxhYmxlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlyZXR1cm4gcXVldWUtPmxpbWl0IC0gcXVldWUtPmxlbmd0aDsKK30KKworLyoqCisgKiBydDJ4MDBfZGVzY19yZWFkIC0gUmVhZCBhIHdvcmQgZnJvbSB0aGUgaGFyZHdhcmUgZGVzY3JpcHRvci4KKyAqIEBkZXNjOiBCYXNlIGRlc2NyaXB0b3IgYWRkcmVzcworICogQHdvcmQ6IFdvcmQgaW5kZXggZnJvbSB3aGVyZSB0aGUgZGVzY3JpcHRvciBzaG91bGQgYmUgcmVhZC4KKyAqIEB2YWx1ZTogQWRkcmVzcyB3aGVyZSB0aGUgZGVzY3JpcHRvciB2YWx1ZSBzaG91bGQgYmUgd3JpdHRlbiBpbnRvLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX2Rlc2NfcmVhZChfX2xlMzIgKmRlc2MsIGNvbnN0IHU4IHdvcmQsIHUzMiAqdmFsdWUpCit7CisJKnZhbHVlID0gbGUzMl90b19jcHUoZGVzY1t3b3JkXSk7Cit9CisKKy8qKgorICogcnQyeDAwX2Rlc2Nfd3JpdGUgLSB3cm90ZSBhIHdvcmQgdG8gdGhlIGhhcmR3YXJlIGRlc2NyaXB0b3IuCisgKiBAZGVzYzogQmFzZSBkZXNjcmlwdG9yIGFkZHJlc3MKKyAqIEB3b3JkOiBXb3JkIGluZGV4IGZyb20gd2hlcmUgdGhlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHdyaXR0ZW4uCisgKiBAdmFsdWU6IFZhbHVlIHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4gaW50byB0aGUgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMF9kZXNjX3dyaXRlKF9fbGUzMiAqZGVzYywgY29uc3QgdTggd29yZCwgdTMyIHZhbHVlKQoreworCWRlc2Nbd29yZF0gPSBjcHVfdG9fbGUzMih2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiBSVDJYMDBRVUVVRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKaW5kZXggODM4NDIxMi4uMDMyNWJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI5LDcgKzI5LDcgQEAKIC8qCiAgKiBUWCByZXN1bHQgZmxhZ3MuCiAgKi8KLWVudW0gVFhfU1RBVFVTIHsKK2VudW0gdHhfc3RhdHVzIHsKIAlUWF9TVUNDRVNTID0gMCwKIAlUWF9TVUNDRVNTX1JFVFJZID0gMSwKIAlUWF9GQUlMX1JFVFJZID0gMiwKQEAgLTg1LDYgKzg1LDggQEAKIAlTVEFURV9SQURJT19PRkYsCiAJU1RBVEVfUkFESU9fUlhfT04sCiAJU1RBVEVfUkFESU9fUlhfT0ZGLAorCVNUQVRFX1JBRElPX1JYX09OX0xJTkssCisJU1RBVEVfUkFESU9fUlhfT0ZGX0xJTkssCiAJU1RBVEVfUkFESU9fSVJRX09OLAogCVNUQVRFX1JBRElPX0lSUV9PRkYsCiB9OwpAQCAtMjE4LDc1ICsyMjAsNCBAQAogCXJldHVybiAocmVnICYgZmllbGQuYml0X21hc2spID4+IGZpZWxkLmJpdF9vZmZzZXQ7CiB9CiAKLS8qCi0gKiBEZXZpY2Ugc3BlY2lmaWMgcmF0ZSB2YWx1ZS4KLSAqIFdlIHdpbGwgaGF2ZSB0byBjcmVhdGUgdGhlIGRldmljZSBzcGVjaWZpYyByYXRlIHZhbHVlCi0gKiBwYXNzZWQgdG8gdGhlIGllZWU4MDIxMSBrZXJuZWwuIFdlIG5lZWQgdG8gbWFrZSBpdCBhIGNvbnNpc3Qgb2YKLSAqIG11bHRpcGxlIGZpZWxkcyBiZWNhdXNlIHdlIHdhbnQgdG8gc3RvcmUgbW9yZSB0aGVuIDEgZGV2aWNlIHNwZWNpZmljCi0gKiB2YWx1ZXMgaW5zaWRlIHRoZSB2YWx1ZS4KLSAqCTEgLSByYXRlLCBzdG9yZWQgYXMgMTAwIGtiaXQvcy4KLSAqCTIgLSBwcmVhbWJsZSwgc2hvcnRfcHJlYW1ibGUgZW5hYmxlZCBmbGFnLgotICoJMyAtIE1BU0tfUkFURSwgd2hpY2ggcmF0ZXMgYXJlIGVuYWJsZWQgaW4gdGhpcyBtb2RlLCB0aGlzIG1hc2sKLSAqCWNvcnJlc3BvbmRzIHdpdGggdGhlIFRYIHJlZ2lzdGVyIGZvcm1hdCBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlLgotICoJNCAtIHBsY3AsIDgwMi4xMWIgcmF0ZXMgYXJlIGRldmljZSBzcGVjaWZpYywKLSAqCTgwMi4xMWcgcmF0ZXMgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGllZWU4MDIuMTFhLTE5OTkgcC4xNC4KLSAqIFRoZSBiaXQgdG8gZW5hYmxlIHByZWFtYmxlIGlzIHNldCBpbiBhIHNlcGVyYXRlIGRlZmluZS4KLSAqLwotI2RlZmluZSBERVZfUkFURQlGSUVMRDMyKDB4MDAwMDA3ZmYpCi0jZGVmaW5lIERFVl9QUkVBTUJMRQlGSUVMRDMyKDB4MDAwMDA4MDApCi0jZGVmaW5lIERFVl9SQVRFTUFTSwlGSUVMRDMyKDB4MDBmZmYwMDApCi0jZGVmaW5lIERFVl9QTENQCUZJRUxEMzIoMHhmZjAwMDAwMCkKLQotLyoKLSAqIEJpdGZpZWxkcwotICovCi0jZGVmaW5lIERFVl9SQVRFQklUXzFNQgkJKCAxIDw8IDAgKQotI2RlZmluZSBERVZfUkFURUJJVF8yTUIJCSggMSA8PCAxICkKLSNkZWZpbmUgREVWX1JBVEVCSVRfNV81TUIJKCAxIDw8IDIgKQotI2RlZmluZSBERVZfUkFURUJJVF8xMU1CCSggMSA8PCAzICkKLSNkZWZpbmUgREVWX1JBVEVCSVRfNk1CCQkoIDEgPDwgNCApCi0jZGVmaW5lIERFVl9SQVRFQklUXzlNQgkJKCAxIDw8IDUgKQotI2RlZmluZSBERVZfUkFURUJJVF8xMk1CCSggMSA8PCA2ICkKLSNkZWZpbmUgREVWX1JBVEVCSVRfMThNQgkoIDEgPDwgNyApCi0jZGVmaW5lIERFVl9SQVRFQklUXzI0TUIJKCAxIDw8IDggKQotI2RlZmluZSBERVZfUkFURUJJVF8zNk1CCSggMSA8PCA5ICkKLSNkZWZpbmUgREVWX1JBVEVCSVRfNDhNQgkoIDEgPDwgMTAgKQotI2RlZmluZSBERVZfUkFURUJJVF81NE1CCSggMSA8PCAxMSApCi0KLS8qCi0gKiBCaXRtYXNrcyBmb3IgREVWX1JBVEVNQVNLCi0gKi8KLSNkZWZpbmUgREVWX1JBVEVNQVNLXzFNQgkoIChERVZfUkFURUJJVF8xTUIgPDwgMSkgLTEgKQotI2RlZmluZSBERVZfUkFURU1BU0tfMk1CCSggKERFVl9SQVRFQklUXzJNQiA8PCAxKSAtMSApCi0jZGVmaW5lIERFVl9SQVRFTUFTS181XzVNQgkoIChERVZfUkFURUJJVF81XzVNQiA8PCAxKSAtMSApCi0jZGVmaW5lIERFVl9SQVRFTUFTS18xMU1CCSggKERFVl9SQVRFQklUXzExTUIgPDwgMSkgLTEgKQotI2RlZmluZSBERVZfUkFURU1BU0tfNk1CCSggKERFVl9SQVRFQklUXzZNQiA8PCAxKSAtMSApCi0jZGVmaW5lIERFVl9SQVRFTUFTS185TUIJKCAoREVWX1JBVEVCSVRfOU1CIDw8IDEpIC0xICkKLSNkZWZpbmUgREVWX1JBVEVNQVNLXzEyTUIJKCAoREVWX1JBVEVCSVRfMTJNQiA8PCAxKSAtMSApCi0jZGVmaW5lIERFVl9SQVRFTUFTS18xOE1CCSggKERFVl9SQVRFQklUXzE4TUIgPDwgMSkgLTEgKQotI2RlZmluZSBERVZfUkFURU1BU0tfMjRNQgkoIChERVZfUkFURUJJVF8yNE1CIDw8IDEpIC0xICkKLSNkZWZpbmUgREVWX1JBVEVNQVNLXzM2TUIJKCAoREVWX1JBVEVCSVRfMzZNQiA8PCAxKSAtMSApCi0jZGVmaW5lIERFVl9SQVRFTUFTS180OE1CCSggKERFVl9SQVRFQklUXzQ4TUIgPDwgMSkgLTEgKQotI2RlZmluZSBERVZfUkFURU1BU0tfNTRNQgkoIChERVZfUkFURUJJVF81NE1CIDw8IDEpIC0xICkKLQotLyoKLSAqIEJpdG1hc2sgZ3JvdXBzIG9mIGJpdHJhdGVzCi0gKi8KLSNkZWZpbmUgREVWX0JBU0lDX1JBVEVNQVNLIFwKLQkoIERFVl9SQVRFTUFTS18xMU1CIHwgXAotCSAgREVWX1JBVEVCSVRfNk1CIHwgREVWX1JBVEVCSVRfMTJNQiB8IERFVl9SQVRFQklUXzI0TUIgKQotCi0jZGVmaW5lIERFVl9DQ0tfUkFURU1BU0sJKCBERVZfUkFURU1BU0tfMTFNQiApCi0jZGVmaW5lIERFVl9PRkRNX1JBVEVNQVNLCSggREVWX1JBVEVNQVNLXzU0TUIgJiB+REVWX0NDS19SQVRFTUFTSyApCi0KLS8qCi0gKiBNYWNybydzIHRvIHNldCBhbmQgZ2V0IHNwZWNpZmljIGZpZWxkcyBmcm9tIHRoZSBkZXZpY2Ugc3BlY2lmaWMgdmFsIGFuZCB2YWwyCi0gKiBmaWVsZHMgaW5zaWRlIHRoZSBpZWVlODAyMTFfcmF0ZSBlbnRyeS4KLSAqLwotI2RlZmluZSBERVZJQ0VfU0VUX1JBVEVfRklFTEQoX192YWx1ZSwgX19tYXNrKSBcCi0JKGludCkoICgoX192YWx1ZSkgPDwgREVWXyMjX19tYXNrLmJpdF9vZmZzZXQpICYgREVWXyMjX19tYXNrLmJpdF9tYXNrICkKLQotI2RlZmluZSBERVZJQ0VfR0VUX1JBVEVfRklFTEQoX192YWx1ZSwgX19tYXNrKSBcCi0JKGludCkoICgoX192YWx1ZSkgJiBERVZfIyNfX21hc2suYml0X21hc2spID4+IERFVl8jI19fbWFzay5iaXRfb2Zmc2V0ICkKLQogI2VuZGlmIC8qIFJUMlgwMFJFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKaW5kZXggMzRhOTZkNC4uZmNlZjk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTY5LDU2ICs2OSw4MSBAQAogCX0KIH0KIAotaW50IHJ0MngwMHJma2lsbF9yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQordm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpbnQgcmV0dmFsOworCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCisJCXJldHVybjsKIAotCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOwotCi0JcmV0dmFsID0gcmZraWxsX3JlZ2lzdGVyKHJ0MngwMGRldi0+cmZraWxsKTsKLQlpZiAocmV0dmFsKSB7CisJaWYgKHJma2lsbF9yZWdpc3RlcihydDJ4MDBkZXYtPnJma2lsbCkpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJma2lsbCBoYW5kbGVyLlxuIik7Ci0JCXJldHVybiByZXR2YWw7CisJCXJldHVybjsKIAl9CiAKLQlyZXR2YWwgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cG9sbF9kZXYpOwotCWlmIChyZXR2YWwpIHsKKwlpZiAoaW5wdXRfcmVnaXN0ZXJfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnBvbGxfZGV2KSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcG9sbGVkIGRldmljZS5cbiIpOwogCQlyZmtpbGxfdW5yZWdpc3RlcihydDJ4MDBkZXYtPnJma2lsbCk7Ci0JCXJldHVybiByZXR2YWw7CisJCXJldHVybjsKIAl9CiAKKwlfX3NldF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CisKIAkvKgogCSAqIEZvcmNlIGluaXRpYWwgcG9sbCB3aGljaCB3aWxsIGRldGVjdCB0aGUgaW5pdGlhbCBkZXZpY2Ugc3RhdGUsCiAJICogYW5kIGNvcnJlY3RseSBzZW5kcyB0aGUgc2lnbmFsIHRvIHRoZSByZmtpbGwgbGF5ZXIgYWJvdXQgdGhpcwogCSAqIHN0YXRlLgogCSAqLwogCXJ0MngwMHJma2lsbF9wb2xsKHJ0MngwMGRldi0+cG9sbF9kZXYpOwotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKIAlpbnB1dF91bnJlZ2lzdGVyX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5wb2xsX2Rldik7CiAJcmZraWxsX3VucmVnaXN0ZXIocnQyeDAwZGV2LT5yZmtpbGwpOworCisJX19jbGVhcl9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CiB9CiAKLWludCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqCitydDJ4MDByZmtpbGxfYWxsb2NhdGVfcG9sbGRldihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2OwogCisJcG9sbF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9wb2xsZWRfZGV2aWNlKCk7CisJaWYgKCFwb2xsX2RldikKKwkJcmV0dXJuIE5VTEw7CisKKwlwb2xsX2Rldi0+cHJpdmF0ZSA9IHJ0MngwMGRldjsKKwlwb2xsX2Rldi0+cG9sbCA9IHJ0MngwMHJma2lsbF9wb2xsOworCXBvbGxfZGV2LT5wb2xsX2ludGVydmFsID0gUkZLSUxMX1BPTExfSU5URVJWQUw7CisKKwlwb2xsX2Rldi0+aW5wdXQtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKKwlwb2xsX2Rldi0+aW5wdXQtPnBoeXMgPSB3aXBoeV9uYW1lKHJ0MngwMGRldi0+aHctPndpcGh5KTsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnZlbmRvciA9IDB4MTgxNDsKKwlwb2xsX2Rldi0+aW5wdXQtPmlkLnByb2R1Y3QgPSBydDJ4MDBkZXYtPmNoaXAucnQ7CisJcG9sbF9kZXYtPmlucHV0LT5pZC52ZXJzaW9uID0gcnQyeDAwZGV2LT5jaGlwLnJldjsKKwlwb2xsX2Rldi0+aW5wdXQtPmRldi5wYXJlbnQgPSB3aXBoeV9kZXYocnQyeDAwZGV2LT5ody0+d2lwaHkpOworCXBvbGxfZGV2LT5pbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlzZXRfYml0KEtFWV9XTEFOLCBwb2xsX2Rldi0+aW5wdXQtPmtleWJpdCk7CisKKwlyZXR1cm4gcG9sbF9kZXY7Cit9CisKK3ZvaWQgcnQyeDAwcmZraWxsX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CiAJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCXJ0MngwMGRldi0+cmZraWxsID0gcmZraWxsX2FsbG9jYXRlKGRldmljZSwgUkZLSUxMX1RZUEVfV0xBTik7CisJcnQyeDAwZGV2LT5yZmtpbGwgPQorCSAgICByZmtpbGxfYWxsb2NhdGUod2lwaHlfZGV2KHJ0MngwMGRldi0+aHctPndpcGh5KSwgUkZLSUxMX1RZUEVfV0xBTik7CiAJaWYgKCFydDJ4MDBkZXYtPnJma2lsbCkgewogCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcmZraWxsIGhhbmRsZXIuXG4iKTsKLQkJZ290byBleGl0OworCQlyZXR1cm47CiAJfQogCiAJcnQyeDAwZGV2LT5yZmtpbGwtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKQEAgLTEyNiw0MCArMTUxLDQ5IEBACiAJcnQyeDAwZGV2LT5yZmtpbGwtPnN0YXRlID0gLTE7CiAJcnQyeDAwZGV2LT5yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHJ0MngwMHJma2lsbF90b2dnbGVfcmFkaW87CiAKLQlydDJ4MDBkZXYtPnBvbGxfZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOworCXJ0MngwMGRldi0+cG9sbF9kZXYgPSBydDJ4MDByZmtpbGxfYWxsb2NhdGVfcG9sbGRldihydDJ4MDBkZXYpOwogCWlmICghcnQyeDAwZGV2LT5wb2xsX2RldikgewogCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcG9sbGVkIGRldmljZS5cbiIpOwotCQlnb3RvIGV4aXRfZnJlZV9yZmtpbGw7CisJCXJma2lsbF9mcmVlKHJ0MngwMGRldi0+cmZraWxsKTsKKwkJcnQyeDAwZGV2LT5yZmtpbGwgPSBOVUxMOworCQlyZXR1cm47CiAJfQogCi0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+cHJpdmF0ZSA9IHJ0MngwMGRldjsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5wb2xsID0gcnQyeDAwcmZraWxsX3BvbGw7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+cG9sbF9pbnRlcnZhbCA9IFJGS0lMTF9QT0xMX0lOVEVSVkFMOwotCi0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5pbnB1dC0+cGh5cyA9IHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpOwotCXJ0MngwMGRldi0+cG9sbF9kZXYtPmlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmlkLnZlbmRvciA9IDB4MTgxNDsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5pbnB1dC0+aWQucHJvZHVjdCA9IHJ0MngwMGRldi0+Y2hpcC5ydDsKLQlydDJ4MDBkZXYtPnBvbGxfZGV2LT5pbnB1dC0+aWQudmVyc2lvbiA9IHJ0MngwMGRldi0+Y2hpcC5yZXY7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmRldi5wYXJlbnQgPSBkZXZpY2U7Ci0JcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7Ci0Jc2V0X2JpdChLRVlfV0xBTiwgcnQyeDAwZGV2LT5wb2xsX2Rldi0+aW5wdXQtPmtleWJpdCk7Ci0KLQlyZXR1cm4gMDsKLQotZXhpdF9mcmVlX3Jma2lsbDoKLQlyZmtpbGxfZnJlZShydDJ4MDBkZXYtPnJma2lsbCk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuOwogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQogCQlyZXR1cm47CiAKIAlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5wb2xsX2Rldik7CisJcnQyeDAwZGV2LT5wb2xsX2RldiA9IE5VTEw7CisKIAlyZmtpbGxfZnJlZShydDJ4MDBkZXYtPnJma2lsbCk7CisJcnQyeDAwZGV2LT5yZmtpbGwgPSBOVUxMOworfQorCit2b2lkIHJ0MngwMHJma2lsbF9zdXNwZW5kKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKKwkJcmV0dXJuOworCisJaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cG9sbF9kZXYpOworCXJ0MngwMGRldi0+cG9sbF9kZXYgPSBOVUxMOworfQorCit2b2lkIHJ0MngwMHJma2lsbF9yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpKQorCQlyZXR1cm47CisKKwlydDJ4MDBkZXYtPnBvbGxfZGV2ID0gcnQyeDAwcmZraWxsX2FsbG9jYXRlX3BvbGxkZXYocnQyeDAwZGV2KTsKKwlpZiAoIXJ0MngwMGRldi0+cG9sbF9kZXYpIHsKKwkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBvbGxlZCBkZXZpY2UuXG4iKTsKKwkJcmV0dXJuOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByaW5nLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2FhNmQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0Ci0JPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KLQotCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0JaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLQl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLQlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLQlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLQk1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qCi0JTW9kdWxlOiBydDJ4MDAKLQlBYnN0cmFjdDogcnQyeDAwIHJpbmcgZGF0YXN0cnVjdHVyZXMgYW5kIHJvdXRpbmVzCi0gKi8KLQotI2lmbmRlZiBSVDJYMDBSSU5HX0gKLSNkZWZpbmUgUlQyWDAwUklOR19ICi0KLS8qCi0gKiBza2JfZGVzYwotICogRGVzY3JpcHRvciBpbmZvcm1hdGlvbiBmb3IgdGhlIHNrYiBidWZmZXIKLSAqLwotc3RydWN0IHNrYl9kZXNjIHsKLQl1bnNpZ25lZCBpbnQgZnJhbWVfdHlwZTsKLQotCXVuc2lnbmVkIGludCBkZXNjX2xlbjsKLQl1bnNpZ25lZCBpbnQgZGF0YV9sZW47Ci0KLQl2b2lkICpkZXNjOwotCXZvaWQgKmRhdGE7Ci0KLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOwotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrYl9kZXNjKiBnZXRfc2tiX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gKHN0cnVjdCBza2JfZGVzYyopJnNrYi0+Y2JbMF07Ci19Ci0KLS8qCi0gKiByeGRhdGFfZW50cnlfZGVzYwotICogU3VtbWFyeSBvZiBpbmZvcm1hdGlvbiB0aGF0IGhhcyBiZWVuIHJlYWQgZnJvbSB0aGUKLSAqIFJYIGZyYW1lIGRlc2NyaXB0b3IuCi0gKi8KLXN0cnVjdCByeGRhdGFfZW50cnlfZGVzYyB7Ci0JaW50IHNpZ25hbDsKLQlpbnQgcnNzaTsKLQlpbnQgb2ZkbTsKLQlpbnQgc2l6ZTsKLQlpbnQgZmxhZ3M7Ci0JaW50IG15X2JzczsKLX07Ci0KLS8qCi0gKiB0eGRhdGFfZW50cnlfZGVzYwotICogU3VtbWFyeSBvZiBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZCBiZSB3cml0dGVuIGludG8gdGhlCi0gKiBkZXNjcmlwdG9yIGZvciBzZW5kaW5nIGEgVFggZnJhbWUuCi0gKi8KLXN0cnVjdCB0eGRhdGFfZW50cnlfZGVzYyB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNkZWZpbmUgRU5UUllfVFhET05FCQkxCi0jZGVmaW5lIEVOVFJZX1RYRF9SVFNfRlJBTUUJMgotI2RlZmluZSBFTlRSWV9UWERfT0ZETV9SQVRFCTMKLSNkZWZpbmUgRU5UUllfVFhEX01PUkVfRlJBRwk0Ci0jZGVmaW5lIEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QCTUKLSNkZWZpbmUgRU5UUllfVFhEX0JVUlNUCQk2Ci0jZGVmaW5lIEVOVFJZX1RYRF9BQ0sJCTcKLQotLyoKLSAqIFF1ZXVlIElELiBJRCdzIDAtNCBhcmUgZGF0YSBUWCByaW5ncwotICovCi0JaW50IHF1ZXVlOwotI2RlZmluZSBRVUVVRV9NR01UCQkxMwotI2RlZmluZSBRVUVVRV9SWAkJMTQKLSNkZWZpbmUgUVVFVUVfT1RIRVIJCTE1Ci0KLQkvKgotCSAqIFBMQ1AgdmFsdWVzLgotCSAqLwotCXUxNiBsZW5ndGhfaGlnaDsKLQl1MTYgbGVuZ3RoX2xvdzsKLQl1MTYgc2lnbmFsOwotCXUxNiBzZXJ2aWNlOwotCi0JLyoKLQkgKiBUaW1pbmcgaW5mb3JtYXRpb24KLQkgKi8KLQlpbnQgYWlmczsKLQlpbnQgaWZzOwotCWludCBjd19taW47Ci0JaW50IGN3X21heDsKLX07Ci0KLS8qCi0gKiBkYXRhX2VudHJ5Ci0gKiBUaGUgZGF0YSByaW5nIGlzIGEgbGlzdCBvZiBkYXRhIGVudHJpZXMuCi0gKiBFYWNoIGVudHJ5IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXNjcmlwdG9yCi0gKiBhbmQgdGhlIGRhdGEgYnVmZmVyLiBGb3IgVFggcmluZ3MgdGhlIHJlZmVyZW5jZSB0byB0aGUKLSAqIHNrX2J1ZmYgb2YgdGhlIHBhY2tldCBiZWluZyB0cmFuc21pdHRlZCBpcyBhbHNvIHN0b3JlZCBoZXJlLgotICovCi1zdHJ1Y3QgZGF0YV9lbnRyeSB7Ci0JLyoKLQkgKiBTdGF0dXMgZmxhZ3MKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2RlZmluZSBFTlRSWV9PV05FUl9OSUMJCTEKLQotCS8qCi0JICogUmluZyB3ZSBiZWxvbmcgdG8uCi0JICovCi0Jc3RydWN0IGRhdGFfcmluZyAqcmluZzsKLQotCS8qCi0JICogc2tfYnVmZiBmb3IgdGhlIHBhY2tldCB3aGljaCBpcyBiZWluZyB0cmFuc21pdHRlZAotCSAqIGluIHRoaXMgZW50cnkgKE9ubHkgdXNlZCB3aXRoIFRYIHJlbGF0ZWQgcmluZ3MpLgotCSAqLwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkvKgotCSAqIFN0b3JlIGEgaWVlZTgwMjExX3R4X3N0YXR1cyBzdHJ1Y3R1cmUgaW4gZWFjaAotCSAqIHJpbmcgZW50cnksIHRoaXMgd2lsbCBvcHRpbWl6ZSB0aGUgdHhkb25lCi0JICogaGFuZGxlci4KLQkgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyB0eF9zdGF0dXM7Ci0KLQkvKgotCSAqIHByaXZhdGUgcG9pbnRlciBzcGVjaWZpYyB0byBkcml2ZXIuCi0JICovCi0Jdm9pZCAqcHJpdjsKLQotCS8qCi0JICogRGF0YSBhZGRyZXNzIGZvciB0aGlzIGVudHJ5LgotCSAqLwotCXZvaWQgKmRhdGFfYWRkcjsKLQlkbWFfYWRkcl90IGRhdGFfZG1hOwotCi0JLyoKLQkgKiBFbnRyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKGluZGV4KS4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgZW50cnlfaWR4OwotfTsKLQotLyoKLSAqIGRhdGFfcmluZwotICogRGF0YSByaW5ncyBhcmUgdXNlZCBieSB0aGUgZGV2aWNlIHRvIHNlbmQgYW5kIHJlY2VpdmUgcGFja2V0cy4KLSAqIFRoZSBkYXRhX2FkZHIgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZGF0YSBtZW1vcnkuCi0gKiBUbyBkZXRlcm1pbmUgYXQgd2hpY2ggcG9pbnQgaW4gdGhlIHJpbmcgd2UgYXJlLAotICogaGF2ZSB0byB1c2UgdGhlIHJ0MngwMF9yaW5nX2luZGV4XyooKSBmdW5jdGlvbnMuCi0gKi8KLXN0cnVjdCBkYXRhX3JpbmcgewotCS8qCi0JICogUG9pbnRlciB0byBtYWluIHJ0MngwMGRldiBzdHJ1Y3R1cmUgd2hlcmUgdGhpcwotCSAqIHJpbmcgYmVsb25ncyB0by4KLQkgKi8KLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OwotCi0JLyoKLQkgKiBCYXNlIGFkZHJlc3MgZm9yIHRoZSBkZXZpY2Ugc3BlY2lmaWMgZGF0YSBlbnRyaWVzLgotCSAqLwotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeTsKLQotCS8qCi0JICogVFggcXVldWUgc3RhdGlzdGljIGluZm8uCi0JICovCi0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0c19kYXRhIHN0YXRzOwotCi0JLyoKLQkgKiBUWCBRdWV1ZSBwYXJhbWV0ZXJzLgotCSAqLwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHR4X3BhcmFtczsKLQotCS8qCi0JICogQmFzZSBhZGRyZXNzIGZvciBkYXRhIHJpbmcuCi0JICovCi0JZG1hX2FkZHJfdCBkYXRhX2RtYTsKLQl2b2lkICpkYXRhX2FkZHI7Ci0KLQkvKgotCSAqIFF1ZXVlIGlkZW50aWZpY2F0aW9uIG51bWJlcjoKLQkgKiBSWDogMAotCSAqIFRYOiBJRUVFODAyMTFfVFhfKgotCSAqLwotCXVuc2lnbmVkIGludCBxdWV1ZV9pZHg7Ci0KLQkvKgotCSAqIEluZGV4IHZhcmlhYmxlcy4KLQkgKi8KLQl1MTYgaW5kZXg7Ci0JdTE2IGluZGV4X2RvbmU7Ci0KLQkvKgotCSAqIFNpemUgb2YgcGFja2V0IGFuZCBkZXNjcmlwdG9yIGluIGJ5dGVzLgotCSAqLwotCXUxNiBkYXRhX3NpemU7Ci0JdTE2IGRlc2Nfc2l6ZTsKLX07Ci0KLS8qCi0gKiBIYW5kbGVycyB0byBkZXRlcm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgZGV2aWNlIHNwZWNpZmljCi0gKiBkYXRhIGVudHJ5LCB3aGVyZSBlaXRoZXIgaW5kZXggb3IgaW5kZXhfZG9uZSBwb2ludHMgdG8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRhdGFfZW50cnkgKnJ0MngwMF9nZXRfZGF0YV9lbnRyeShzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nKQotewotCXJldHVybiAmcmluZy0+ZW50cnlbcmluZy0+aW5kZXhdOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkYXRhX2VudHJ5ICpydDJ4MDBfZ2V0X2RhdGFfZW50cnlfZG9uZShzdHJ1Y3QgZGF0YV9yaW5nCi0JCQkJCQkJICAgICpyaW5nKQotewotCXJldHVybiAmcmluZy0+ZW50cnlbcmluZy0+aW5kZXhfZG9uZV07Ci19Ci0KLS8qCi0gKiBUb3RhbCByaW5nIG1lbW9yeQotICovCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfZ2V0X3Jpbmdfc2l6ZShzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nKQotewotCXJldHVybiByaW5nLT5zdGF0cy5saW1pdCAqIChyaW5nLT5kZXNjX3NpemUgKyByaW5nLT5kYXRhX3NpemUpOwotfQotCi0vKgotICogUmluZyBpbmRleCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3JpbmdfaW5kZXhfaW5jKHN0cnVjdCBkYXRhX3JpbmcgKnJpbmcpCi17Ci0JcmluZy0+aW5kZXgrKzsKLQlpZiAocmluZy0+aW5kZXggPj0gcmluZy0+c3RhdHMubGltaXQpCi0JCXJpbmctPmluZGV4ID0gMDsKLQlyaW5nLT5zdGF0cy5sZW4rKzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMF9yaW5nX2luZGV4X2RvbmVfaW5jKHN0cnVjdCBkYXRhX3JpbmcgKnJpbmcpCi17Ci0JcmluZy0+aW5kZXhfZG9uZSsrOwotCWlmIChyaW5nLT5pbmRleF9kb25lID49IHJpbmctPnN0YXRzLmxpbWl0KQotCQlyaW5nLT5pbmRleF9kb25lID0gMDsKLQlyaW5nLT5zdGF0cy5sZW4tLTsKLQlyaW5nLT5zdGF0cy5jb3VudCsrOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3JpbmdfaW5kZXhfY2xlYXIoc3RydWN0IGRhdGFfcmluZyAqcmluZykKLXsKLQlyaW5nLT5pbmRleCA9IDA7Ci0JcmluZy0+aW5kZXhfZG9uZSA9IDA7Ci0JcmluZy0+c3RhdHMubGVuID0gMDsKLQlyaW5nLT5zdGF0cy5jb3VudCA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF9yaW5nX2VtcHR5KHN0cnVjdCBkYXRhX3JpbmcgKnJpbmcpCi17Ci0JcmV0dXJuIHJpbmctPnN0YXRzLmxlbiA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfcmluZ19mdWxsKHN0cnVjdCBkYXRhX3JpbmcgKnJpbmcpCi17Ci0JcmV0dXJuIHJpbmctPnN0YXRzLmxlbiA9PSByaW5nLT5zdGF0cy5saW1pdDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX3JpbmdfZnJlZShzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nKQotewotCXJldHVybiByaW5nLT5zdGF0cy5saW1pdCAtIHJpbmctPnN0YXRzLmxlbjsKLX0KLQotLyoKLSAqIFRYL1JYIERlc2NyaXB0b3IgYWNjZXNzIGZ1bmN0aW9ucy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMF9kZXNjX3JlYWQoX19sZTMyICpkZXNjLAotCQkJCSAgICBjb25zdCB1OCB3b3JkLCB1MzIgKnZhbHVlKQotewotCSp2YWx1ZSA9IGxlMzJfdG9fY3B1KGRlc2Nbd29yZF0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX2Rlc2Nfd3JpdGUoX19sZTMyICpkZXNjLAotCQkJCSAgICAgY29uc3QgdTggd29yZCwgY29uc3QgdTMyIHZhbHVlKQotewotCWRlc2Nbd29yZF0gPSBjcHVfdG9fbGUzMih2YWx1ZSk7Ci19Ci0KLSNlbmRpZiAvKiBSVDJYMDBSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwppbmRleCA4NGU5YmRiLi41YTMzMTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDAsOCArNDAsNyBAQAogCQkJICAgICB2b2lkICpidWZmZXIsIGNvbnN0IHUxNiBidWZmZXJfbGVuZ3RoLAogCQkJICAgICBjb25zdCBpbnQgdGltZW91dCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9Ci0JICAgIGludGVyZmFjZV90b191c2JkZXYocnQyeDAwZGV2X3VzYihydDJ4MDBkZXYpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHJ0MngwMGRldl91c2JfZGV2KHJ0MngwMGRldik7CiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgcGlwZSA9CkBAIC04NSwyMCArODQsMjAgQEAKIAkvKgogCSAqIENoZWNrIGZvciBDYWNoZSBhdmFpbGFiaWxpdHkuCiAJICovCi0JaWYgKHVubGlrZWx5KCFydDJ4MDBkZXYtPmNzcl9jYWNoZSB8fCBidWZmZXJfbGVuZ3RoID4gQ1NSX0NBQ0hFX1NJWkUpKSB7CisJaWYgKHVubGlrZWx5KCFydDJ4MDBkZXYtPmNzci5jYWNoZSB8fCBidWZmZXJfbGVuZ3RoID4gQ1NSX0NBQ0hFX1NJWkUpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkNTUiBjYWNoZSBub3QgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWlmIChyZXF1ZXN0dHlwZSA9PSBVU0JfVkVORE9SX1JFUVVFU1RfT1VUKQotCQltZW1jcHkocnQyeDAwZGV2LT5jc3JfY2FjaGUsIGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCk7CisJCW1lbWNweShydDJ4MDBkZXYtPmNzci5jYWNoZSwgYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKIAogCXN0YXR1cyA9IHJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdChydDJ4MDBkZXYsIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAotCQkJCQkgIG9mZnNldCwgMCwgcnQyeDAwZGV2LT5jc3JfY2FjaGUsCisJCQkJCSAgb2Zmc2V0LCAwLCBydDJ4MDBkZXYtPmNzci5jYWNoZSwKIAkJCQkJICBidWZmZXJfbGVuZ3RoLCB0aW1lb3V0KTsKIAogCWlmICghc3RhdHVzICYmIHJlcXVlc3R0eXBlID09IFVTQl9WRU5ET1JfUkVRVUVTVF9JTikKLQkJbWVtY3B5KGJ1ZmZlciwgcnQyeDAwZGV2LT5jc3JfY2FjaGUsIGJ1ZmZlcl9sZW5ndGgpOworCQltZW1jcHkoYnVmZmVyLCBydDJ4MDBkZXYtPmNzci5jYWNoZSwgYnVmZmVyX2xlbmd0aCk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTI4LDE1ICsxMjcsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgcnQyeDAwdXNiX2ludGVycnVwdF90eGRvbmUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSA9IChzdHJ1Y3QgZGF0YV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nID0gZW50cnktPnJpbmc7Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHJpbmctPnJ0MngwMGRldjsKKwlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBxdWV1ZV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4ICpwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgdHhkZXNjOwogCV9fbGUzMiAqdHhkID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CiAJdTMyIHdvcmQ7Ci0JaW50IHR4X3N0YXR1czsKIAogCWlmICghdGVzdF9iaXQoREVWSUNFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAhX190ZXN0X2FuZF9jbGVhcl9iaXQoRU5UUllfT1dORVJfTklDLCAmZW50cnktPmZsYWdzKSkKKwkgICAgIV9fdGVzdF9hbmRfY2xlYXJfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSkKIAkJcmV0dXJuOwogCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDAsICZ3b3JkKTsKQEAgLTE0NCw0NSArMTQzLDQ2IEBACiAJLyoKIAkgKiBSZW1vdmUgdGhlIGRlc2NyaXB0b3IgZGF0YSBmcm9tIHRoZSBidWZmZXIuCiAJICovCi0Jc2tiX3B1bGwoZW50cnktPnNrYiwgcmluZy0+ZGVzY19zaXplKTsKKwlza2JfcHVsbChlbnRyeS0+c2tiLCBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZSk7CiAKIAkvKgogCSAqIE9idGFpbiB0aGUgc3RhdHVzIGFib3V0IHRoaXMgcGFja2V0LgogCSAqLwotCXR4X3N0YXR1cyA9ICF1cmItPnN0YXR1cyA/IFRYX1NVQ0NFU1MgOiBUWF9GQUlMX1JFVFJZOworCXR4ZGVzYy5zdGF0dXMgPSAhdXJiLT5zdGF0dXMgPyBUWF9TVUNDRVNTIDogVFhfRkFJTF9SRVRSWTsKKwl0eGRlc2MucmV0cnkgPSAwOworCXR4ZGVzYy5jb250cm9sID0gJnByaXZfdHgtPmNvbnRyb2w7CiAKLQlydDJ4MDBsaWJfdHhkb25lKGVudHJ5LCB0eF9zdGF0dXMsIDApOworCXJ0MngwMGxpYl90eGRvbmUoZW50cnksICZ0eGRlc2MpOwogCiAJLyoKIAkgKiBNYWtlIHRoaXMgZW50cnkgYXZhaWxhYmxlIGZvciByZXVzZS4KIAkgKi8KIAllbnRyeS0+ZmxhZ3MgPSAwOwotCXJ0MngwMF9yaW5nX2luZGV4X2RvbmVfaW5jKGVudHJ5LT5yaW5nKTsKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYX0RPTkUpOwogCiAJLyoKLQkgKiBJZiB0aGUgZGF0YSByaW5nIHdhcyBmdWxsIGJlZm9yZSB0aGUgdHhkb25lIGhhbmRsZXIKKwkgKiBJZiB0aGUgZGF0YSBxdWV1ZSB3YXMgZnVsbCBiZWZvcmUgdGhlIHR4ZG9uZSBoYW5kbGVyCiAJICogd2UgbXVzdCBtYWtlIHN1cmUgdGhlIHBhY2tldCBxdWV1ZSBpbiB0aGUgbWFjODAyMTEgc3RhY2sKIAkgKiBpcyByZWVuYWJsZWQgd2hlbiB0aGUgdHhkb25lIGhhbmRsZXIgaGFzIGZpbmlzaGVkLgogCSAqLwotCWlmICghcnQyeDAwX3JpbmdfZnVsbChyaW5nKSkKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocnQyeDAwZGV2LT5odywKLQkJCQkgICAgIGVudHJ5LT50eF9zdGF0dXMuY29udHJvbC5xdWV1ZSk7CisJaWYgKCFydDJ4MDBxdWV1ZV9mdWxsKGVudHJ5LT5xdWV1ZSkpCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0MngwMGRldi0+aHcsIHByaXZfdHgtPmNvbnRyb2wucXVldWUpOwogfQogCiBpbnQgcnQyeDAwdXNiX3dyaXRlX3R4X2RhdGEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICBzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPQotCSAgICBpbnRlcmZhY2VfdG9fdXNiZGV2KHJ0MngwMGRldl91c2IocnQyeDAwZGV2KSk7Ci0Jc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5ID0gcnQyeDAwX2dldF9kYXRhX2VudHJ5KHJpbmcpOwotCXN0cnVjdCBza2JfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHJ0MngwMGRldl91c2JfZGV2KHJ0MngwMGRldik7CisJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWCk7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4ICpwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CiAJdTMyIGxlbmd0aDsKIAotCWlmIChydDJ4MDBfcmluZ19mdWxsKHJpbmcpKQorCWlmIChydDJ4MDBxdWV1ZV9mdWxsKHF1ZXVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodGVzdF9iaXQoRU5UUllfT1dORVJfTklDLCAmZW50cnktPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpIHsKIAkJRVJST1IocnQyeDAwZGV2LAogCQkgICAgICAiQXJyaXZlZCBhdCBub24tZnJlZSBlbnRyeSBpbiB0aGUgbm9uLWZ1bGwgcXVldWUgJWQuXG4iCiAJCSAgICAgICJQbGVhc2UgZmlsZSBidWcgcmVwb3J0IHRvICVzLlxuIiwKQEAgLTE5MywyMCArMTkzLDIwIEBACiAJLyoKIAkgKiBBZGQgdGhlIGRlc2NyaXB0b3IgaW4gZnJvbnQgb2YgdGhlIHNrYi4KIAkgKi8KLQlza2JfcHVzaChza2IsIHJpbmctPmRlc2Nfc2l6ZSk7Ci0JbWVtc2V0KHNrYi0+ZGF0YSwgMCwgcmluZy0+ZGVzY19zaXplKTsKKwlza2JfcHVzaChza2IsIHF1ZXVlLT5kZXNjX3NpemUpOworCW1lbXNldChza2ItPmRhdGEsIDAsIHF1ZXVlLT5kZXNjX3NpemUpOwogCiAJLyoKIAkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCiAJICovCi0JZGVzYyA9IGdldF9za2JfZGVzYyhza2IpOwotCWRlc2MtPmRlc2NfbGVuID0gcmluZy0+ZGVzY19zaXplOwotCWRlc2MtPmRhdGFfbGVuID0gc2tiLT5sZW4gLSByaW5nLT5kZXNjX3NpemU7Ci0JZGVzYy0+ZGVzYyA9IHNrYi0+ZGF0YTsKLQlkZXNjLT5kYXRhID0gc2tiLT5kYXRhICsgcmluZy0+ZGVzY19zaXplOwotCWRlc2MtPnJpbmcgPSByaW5nOwotCWRlc2MtPmVudHJ5ID0gZW50cnk7CisJc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOworCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGEgKyBxdWV1ZS0+ZGVzY19zaXplOworCXNrYmRlc2MtPmRhdGFfbGVuID0gc2tiLT5sZW4gLSBxdWV1ZS0+ZGVzY19zaXplOworCXNrYmRlc2MtPmRlc2MgPSBza2ItPmRhdGE7CisJc2tiZGVzYy0+ZGVzY19sZW4gPSBxdWV1ZS0+ZGVzY19zaXplOworCXNrYmRlc2MtPmVudHJ5ID0gZW50cnk7CiAKKwltZW1jcHkoJnByaXZfdHgtPmNvbnRyb2wsIGNvbnRyb2wsIHNpemVvZihwcml2X3R4LT5jb250cm9sKSk7CiAJcnQyeDAwbGliX3dyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBza2IsIGNvbnRyb2wpOwogCiAJLyoKQEAgLTIxOSwxMiArMjE5LDEyIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIFVSQiBhbmQgc2VuZCB0aGUgZnJhbWUgdG8gdGhlIGRldmljZS4KIAkgKi8KLQlfX3NldF9iaXQoRU5UUllfT1dORVJfTklDLCAmZW50cnktPmZsYWdzKTsKLQl1c2JfZmlsbF9idWxrX3VyYihlbnRyeS0+cHJpdiwgdXNiX2RldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsIDEpLAorCV9fc2V0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncyk7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdl90eC0+dXJiLCB1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgMSksCiAJCQkgIHNrYi0+ZGF0YSwgbGVuZ3RoLCBydDJ4MDB1c2JfaW50ZXJydXB0X3R4ZG9uZSwgZW50cnkpOwotCXVzYl9zdWJtaXRfdXJiKGVudHJ5LT5wcml2LCBHRlBfQVRPTUlDKTsKKwl1c2Jfc3VibWl0X3VyYihwcml2X3R4LT51cmIsIEdGUF9BVE9NSUMpOwogCi0JcnQyeDAwX3JpbmdfaW5kZXhfaW5jKHJpbmcpOworCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhxdWV1ZSwgUV9JTkRFWCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMyw0NCArMjMzLDEyIEBACiAvKgogICogUlggZGF0YSBoYW5kbGVycy4KICAqLwotc3RhdGljIHZvaWQgcnQyeDAwdXNiX2ludGVycnVwdF9yeGRvbmUoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHN0cnVjdCBza19idWZmKiBydDJ4MDB1c2JfYWxsb2Nfcnhza2Ioc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQogewotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSA9IChzdHJ1Y3QgZGF0YV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nID0gZW50cnktPnJpbmc7Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHJpbmctPnJ0MngwMGRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0Jc3RydWN0IHNrYl9kZXNjICpza2JkZXNjOwotCXN0cnVjdCByeGRhdGFfZW50cnlfZGVzYyBkZXNjOwotCWludCBoZWFkZXJfc2l6ZTsKLQlpbnQgZnJhbWVfc2l6ZTsKLQotCWlmICghdGVzdF9iaXQoREVWSUNFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAhdGVzdF9hbmRfY2xlYXJfYml0KEVOVFJZX09XTkVSX05JQywgJmVudHJ5LT5mbGFncykpCi0JCXJldHVybjsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKIAogCS8qCi0JICogQ2hlY2sgaWYgdGhlIHJlY2VpdmVkIGRhdGEgaXMgc2ltcGx5IHRvbyBzbWFsbAotCSAqIHRvIGJlIGFjdHVhbGx5IHZhbGlkLCBvciBpZiB0aGUgdXJiIGlzIHNpZ25hbGluZwotCSAqIGEgcHJvYmxlbS4KLQkgKi8KLQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgZW50cnktPnJpbmctPmRlc2Nfc2l6ZSB8fCB1cmItPnN0YXR1cykKLQkJZ290byBza2lwX2VudHJ5OwotCi0JLyoKLQkgKiBGaWxsIGluIHNrYiBkZXNjcmlwdG9yCi0JICovCi0Jc2tiZGVzYyA9IGdldF9za2JfZGVzYyhlbnRyeS0+c2tiKTsKLQlza2JkZXNjLT5yaW5nID0gcmluZzsKLQlza2JkZXNjLT5lbnRyeSA9IGVudHJ5OwotCi0JbWVtc2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOwotCXJ0MngwMGRldi0+b3BzLT5saWItPmZpbGxfcnhkb25lKGVudHJ5LCAmZGVzYyk7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIGEgbmV3IHNrIGJ1ZmZlciB0byByZXBsYWNlIHRoZSBjdXJyZW50IG9uZS4KLQkgKiBJZiBhbGxvY2F0aW9uIGZhaWxzLCB3ZSBzaG91bGQgZHJvcCB0aGUgY3VycmVudCBmcmFtZQotCSAqIHNvIHdlIGNhbiByZWN5Y2xlIHRoZSBleGlzdGluZyBzayBidWZmZXIgZm9yIHRoZSBuZXcgZnJhbWUuCiAJICogQXMgYWxpZ25tZW50IHdlIHVzZSAyIGFuZCBub3QgTkVUX0lQX0FMSUdOIGJlY2F1c2Ugd2UgbmVlZAogCSAqIHRvIGJlIHN1cmUgd2UgaGF2ZSAyIGJ5dGVzIHJvb20gaW4gdGhlIGhlYWQuIChORVRfSVBfQUxJR04KIAkgKiBjYW4gYmUgMCBvbiBzb21lIGhhcmR3YXJlKS4gV2UgdXNlIHRoZXNlIDIgYnl0ZXMgZm9yIGZyYW1lCkBAIC0yNzksNDIgKzI0Nyw3NCBAQAogCSAqIGFuZCB0aHVzIG9wdGltaXplIGFsaWdubWVudCBieSByZXNlcnZpbmcgdGhlIDIgYnl0ZXMgaW4KIAkgKiBhZHZhbmNlLgogCSAqLwotCWZyYW1lX3NpemUgPSBlbnRyeS0+cmluZy0+ZGF0YV9zaXplICsgZW50cnktPnJpbmctPmRlc2Nfc2l6ZTsKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGZyYW1lX3NpemUgKyAyKTsKKwlmcmFtZV9zaXplID0gcXVldWUtPmRhdGFfc2l6ZSArIHF1ZXVlLT5kZXNjX3NpemU7CisJc2tiID0gZGV2X2FsbG9jX3NrYihxdWV1ZS0+ZGVzY19zaXplICsgZnJhbWVfc2l6ZSArIDIpOwogCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYl9yZXNlcnZlKHNrYiwgcXVldWUtPmRlc2Nfc2l6ZSArIDIpOworCXNrYl9wdXQoc2tiLCBmcmFtZV9zaXplKTsKKworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMHVzYl9pbnRlcnJ1cHRfcnhkb25lKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBxdWV1ZV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CisJc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjIHJ4ZGVzYzsKKwlpbnQgaGVhZGVyX3NpemU7CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIXRlc3RfYW5kX2NsZWFyX2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCisJCXJldHVybjsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHJlY2VpdmVkIGRhdGEgaXMgc2ltcGx5IHRvbyBzbWFsbAorCSAqIHRvIGJlIGFjdHVhbGx5IHZhbGlkLCBvciBpZiB0aGUgdXJiIGlzIHNpZ25hbGluZworCSAqIGEgcHJvYmxlbS4KKwkgKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgZW50cnktPnF1ZXVlLT5kZXNjX3NpemUgfHwgdXJiLT5zdGF0dXMpCiAJCWdvdG8gc2tpcF9lbnRyeTsKIAotCXNrYl9yZXNlcnZlKHNrYiwgMik7Ci0Jc2tiX3B1dChza2IsIGZyYW1lX3NpemUpOworCS8qCisJICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgorCSAqLworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CisJbWVtc2V0KHNrYmRlc2MsIDAsIHNpemVvZigqc2tiZGVzYykpOworCXNrYmRlc2MtPmVudHJ5ID0gZW50cnk7CisKKwltZW1zZXQoJnJ4ZGVzYywgMCwgc2l6ZW9mKHJ4ZGVzYykpOworCXJ0MngwMGRldi0+b3BzLT5saWItPmZpbGxfcnhkb25lKGVudHJ5LCAmcnhkZXNjKTsKIAogCS8qCiAJICogVGhlIGRhdGEgYmVoaW5kIHRoZSBpZWVlODAyMTEgaGVhZGVyIG11c3QgYmUKIAkgKiBhbGlnbmVkIG9uIGEgNCBieXRlIGJvdW5kYXJ5LgogCSAqLwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5za2ItPmRhdGE7Ci0JaGVhZGVyX3NpemUgPQotCSAgICBpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKTsKLQorCWhlYWRlcl9zaXplID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2IoZW50cnktPnNrYik7CiAJaWYgKGhlYWRlcl9zaXplICUgNCA9PSAwKSB7CiAJCXNrYl9wdXNoKGVudHJ5LT5za2IsIDIpOwotCQltZW1tb3ZlKGVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmRhdGEgKyAyLCBza2ItPmxlbiAtIDIpOworCQltZW1tb3ZlKGVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmRhdGEgKyAyLAorCQkJZW50cnktPnNrYi0+bGVuIC0gMik7CisJCXNrYmRlc2MtPmRhdGEgPSBlbnRyeS0+c2tiLT5kYXRhOworCQlza2JfdHJpbShlbnRyeS0+c2tiLGVudHJ5LT5za2ItPmxlbiAtIDIpOwogCX0KIAogCS8qCi0JICogVHJpbSB0aGUgZW50aXJlIGJ1ZmZlciBkb3duIHRvIG9ubHkgY29udGFpbiB0aGUgdmFsaWQgZnJhbWUgZGF0YQotCSAqIGV4Y2x1ZGluZyB0aGUgZGV2aWNlIGRlc2NyaXB0b3IuIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzY3JpcHRvcgotCSAqIHZhcmllcy4gVGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBjaGVjayB3aGVyZSB0aGUgZGVzY3JpcHRvciBpcwotCSAqIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBwdWxsIHRoZSBkYXRhIHBvaW50ZXIgdG8gZXhjbHVkZSB0aGUKLQkgKiBkZXZpY2UgZGVzY3JpcHRvci4KKwkgKiBBbGxvY2F0ZSBhIG5ldyBzayBidWZmZXIgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBvbmUuCisJICogSWYgYWxsb2NhdGlvbiBmYWlscywgd2Ugc2hvdWxkIGRyb3AgdGhlIGN1cnJlbnQgZnJhbWUKKwkgKiBzbyB3ZSBjYW4gcmVjeWNsZSB0aGUgZXhpc3Rpbmcgc2sgYnVmZmVyIGZvciB0aGUgbmV3IGZyYW1lLgogCSAqLwotCWlmIChza2JkZXNjLT5kYXRhID4gc2tiZGVzYy0+ZGVzYykKLQkJc2tiX3B1bGwoZW50cnktPnNrYiwgc2tiZGVzYy0+ZGVzY19sZW4pOwotCXNrYl90cmltKGVudHJ5LT5za2IsIGRlc2Muc2l6ZSk7CisJc2tiID0gcnQyeDAwdXNiX2FsbG9jX3J4c2tiKGVudHJ5LT5xdWV1ZSk7CisJaWYgKCFza2IpCisJCWdvdG8gc2tpcF9lbnRyeTsKIAogCS8qCiAJICogU2VuZCB0aGUgZnJhbWUgdG8gcnQyeDAwbGliIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCiAJICovCi0JcnQyeDAwbGliX3J4ZG9uZShlbnRyeSwgZW50cnktPnNrYiwgJmRlc2MpOworCXJ0MngwMGxpYl9yeGRvbmUoZW50cnksICZyeGRlc2MpOwogCiAJLyoKIAkgKiBSZXBsYWNlIGN1cnJlbnQgZW50cnkncyBza2Igd2l0aCB0aGUgbmV3bHkgYWxsb2NhdGVkIG9uZSwKQEAgLTMyNSwxMiArMzI1LDEyIEBACiAJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZW50cnktPnNrYi0+bGVuOwogCiBza2lwX2VudHJ5OgotCWlmICh0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJnJpbmctPnJ0MngwMGRldi0+ZmxhZ3MpKSB7Ci0JCV9fc2V0X2JpdChFTlRSWV9PV05FUl9OSUMsICZlbnRyeS0+ZmxhZ3MpOworCWlmICh0ZXN0X2JpdChERVZJQ0VfRU5BQkxFRF9SQURJTywgJmVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpIHsKKwkJX19zZXRfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKIAkJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAl9CiAKLQlydDJ4MDBfcmluZ19pbmRleF9pbmMocmluZyk7CisJcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LT5xdWV1ZSwgUV9JTkRFWCk7CiB9CiAKIC8qCkBAIC0zMzgsMTggKzMzOCw0NCBAQAogICovCiB2b2lkIHJ0MngwMHVzYl9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0Jc3RydWN0IGRhdGFfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfcnggKnByaXZfcng7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4ICpwcml2X3R4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKnByaXZfYmNuOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9SWF9DT05UUk9MLCAweDAwMDAsIDB4MDAwMCwKIAkJCQkgICAgUkVHSVNURVJfVElNRU9VVCk7CiAKIAkvKgotCSAqIENhbmNlbCBhbGwgcmluZ3MuCisJICogQ2FuY2VsIGFsbCBxdWV1ZXMuCiAJICovCi0JcmluZ19mb3JfZWFjaChydDJ4MDBkZXYsIHJpbmcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHJpbmctPnN0YXRzLmxpbWl0OyBpKyspCi0JCQl1c2Jfa2lsbF91cmIocmluZy0+ZW50cnlbaV0ucHJpdik7CisJZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+cngtPmxpbWl0OyBpKyspIHsKKwkJcHJpdl9yeCA9IHJ0MngwMGRldi0+cngtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQl1c2Jfa2lsbF91cmIocHJpdl9yeC0+dXJiKTsKKwl9CisKKwl0eF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgeworCQkJcHJpdl90eCA9IHF1ZXVlLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKKwkJCXVzYl9raWxsX3VyYihwcml2X3R4LT51cmIpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+YmNuLT5saW1pdDsgaSsrKSB7CisJCXByaXZfYmNuID0gcnQyeDAwZGV2LT5iY24tPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQl1c2Jfa2lsbF91cmIocHJpdl9iY24tPnVyYik7CisKKwkJaWYgKHByaXZfYmNuLT5ndWFyZGlhbl91cmIpCisJCQl1c2Jfa2lsbF91cmIocHJpdl9iY24tPmd1YXJkaWFuX3VyYik7CisJfQorCisJaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPmJjblsxXS5saW1pdDsgaSsrKSB7CisJCXByaXZfdHggPSBydDJ4MDBkZXYtPmJjblsxXS5lbnRyaWVzW2ldLnByaXZfZGF0YTsKKwkJdXNiX2tpbGxfdXJiKHByaXZfdHgtPnVyYik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8pOwpAQCAtMzU4LDY0ICszODQsMTA4IEBACiAgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCiAgKi8KIHZvaWQgcnQyeDAwdXNiX2luaXRfcnhlbnRyeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgIHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSkKKwkJCSAgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0KLQkgICAgIGludGVyZmFjZV90b191c2JkZXYocnQyeDAwZGV2X3VzYihydDJ4MDBkZXYpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHJ0MngwMGRldl91c2JfZGV2KHJ0MngwMGRldik7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3J4ICpwcml2X3J4ID0gZW50cnktPnByaXZfZGF0YTsKIAotCXVzYl9maWxsX2J1bGtfdXJiKGVudHJ5LT5wcml2LCB1c2JfZGV2LAorCXVzYl9maWxsX2J1bGtfdXJiKHByaXZfcngtPnVyYiwgdXNiX2RldiwKIAkJCSAgdXNiX3JjdmJ1bGtwaXBlKHVzYl9kZXYsIDEpLAogCQkJICBlbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4sCiAJCQkgIHJ0MngwMHVzYl9pbnRlcnJ1cHRfcnhkb25lLCBlbnRyeSk7CiAKLQlfX3NldF9iaXQoRU5UUllfT1dORVJfTklDLCAmZW50cnktPmZsYWdzKTsKLQl1c2Jfc3VibWl0X3VyYihlbnRyeS0+cHJpdiwgR0ZQX0FUT01JQyk7CisJX19zZXRfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKKwl1c2Jfc3VibWl0X3VyYihwcml2X3J4LT51cmIsIEdGUF9BVE9NSUMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2luaXRfcnhlbnRyeSk7CiAKIHZvaWQgcnQyeDAwdXNiX2luaXRfdHhlbnRyeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgIHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSkKKwkJCSAgICBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewogCWVudHJ5LT5mbGFncyA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2JfaW5pdF90eGVudHJ5KTsKIAogc3RhdGljIGludCBydDJ4MDB1c2JfYWxsb2NfdXJiKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICAgc3RydWN0IGRhdGFfcmluZyAqcmluZykKKwkJCSAgICAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCiB7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3J4ICpwcml2X3J4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCAqcHJpdl90eDsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuICpwcml2X2JjbjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgaW50IGd1YXJkaWFuID0KKwkgICAgdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBVUkIncwogCSAqLwotCWZvciAoaSA9IDA7IGkgPCByaW5nLT5zdGF0cy5saW1pdDsgaSsrKSB7Ci0JCXJpbmctPmVudHJ5W2ldLnByaXYgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZiAoIXJpbmctPmVudHJ5W2ldLnByaXYpCisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKQogCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX1JYKSB7CisJCQlwcml2X3J4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJcHJpdl9yeC0+dXJiID0gdXJiOworCQl9IGVsc2UgaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX01HTVQgJiYgZ3VhcmRpYW4pIHsKKwkJCXByaXZfYmNuID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJcHJpdl9iY24tPnVyYiA9IHVyYjsKKworCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlwcml2X2Jjbi0+Z3VhcmRpYW5fdXJiID0gdXJiOworCQl9IGVsc2UgeworCQkJcHJpdl90eCA9IHF1ZXVlLT5lbnRyaWVzW2ldLnByaXZfZGF0YTsKKwkJCXByaXZfdHgtPnVyYiA9IHVyYjsKKwkJfQogCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDB1c2JfZnJlZV91cmIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nKQorCQkJICAgICAgIHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKIHsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfcnggKnByaXZfcng7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4ICpwcml2X3R4OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKnByaXZfYmNuOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBpbnQgZ3VhcmRpYW4gPQorCSAgICB0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICghcmluZy0+ZW50cnkpCisJaWYgKCFxdWV1ZS0+ZW50cmllcykKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IHJpbmctPnN0YXRzLmxpbWl0OyBpKyspIHsKLQkJdXNiX2tpbGxfdXJiKHJpbmctPmVudHJ5W2ldLnByaXYpOwotCQl1c2JfZnJlZV91cmIocmluZy0+ZW50cnlbaV0ucHJpdik7Ci0JCWlmIChyaW5nLT5lbnRyeVtpXS5za2IpCi0JCQlrZnJlZV9za2IocmluZy0+ZW50cnlbaV0uc2tiKTsKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKKwkJaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX1JYKSB7CisJCQlwcml2X3J4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJdXJiID0gcHJpdl9yeC0+dXJiOworCQl9IGVsc2UgaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX01HTVQgJiYgZ3VhcmRpYW4pIHsKKwkJCXByaXZfYmNuID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCisJCQl1c2Jfa2lsbF91cmIocHJpdl9iY24tPmd1YXJkaWFuX3VyYik7CisJCQl1c2JfZnJlZV91cmIocHJpdl9iY24tPmd1YXJkaWFuX3VyYik7CisKKwkJCXVyYiA9IHByaXZfYmNuLT51cmI7CisJCX0gZWxzZSB7CisJCQlwcml2X3R4ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJdXJiID0gcHJpdl90eC0+dXJiOworCQl9CisKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlpZiAocXVldWUtPmVudHJpZXNbaV0uc2tiKQorCQkJa2ZyZWVfc2tiKHF1ZXVlLT5lbnRyaWVzW2ldLnNrYik7CiAJfQogfQogCiBpbnQgcnQyeDAwdXNiX2luaXRpYWxpemUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBlbnRyeV9zaXplOwogCXVuc2lnbmVkIGludCBpOwpAQCAtNDI0LDI1ICs0OTQsMjIgQEAKIAkvKgogCSAqIEFsbG9jYXRlIERNQQogCSAqLwotCXJpbmdfZm9yX2VhY2gocnQyeDAwZGV2LCByaW5nKSB7Ci0JCXN0YXR1cyA9IHJ0MngwMHVzYl9hbGxvY191cmIocnQyeDAwZGV2LCByaW5nKTsKKwlxdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKSB7CisJCXN0YXR1cyA9IHJ0MngwMHVzYl9hbGxvY191cmIocnQyeDAwZGV2LCBxdWV1ZSk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIGV4aXQ7CiAJfQogCiAJLyoKLQkgKiBGb3IgdGhlIFJYIHJpbmcsIHNrYidzIHNob3VsZCBiZSBhbGxvY2F0ZWQuCisJICogRm9yIHRoZSBSWCBxdWV1ZSwgc2tiJ3Mgc2hvdWxkIGJlIGFsbG9jYXRlZC4KIAkgKi8KIAllbnRyeV9zaXplID0gcnQyeDAwZGV2LT5yeC0+ZGF0YV9zaXplICsgcnQyeDAwZGV2LT5yeC0+ZGVzY19zaXplOwotCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPnJ4LT5zdGF0cy5saW1pdDsgaSsrKSB7Ci0JCXNrYiA9IGRldl9hbGxvY19za2IoTkVUX0lQX0FMSUdOICsgZW50cnlfc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+cngtPmxpbWl0OyBpKyspIHsKKwkJc2tiID0gcnQyeDAwdXNiX2FsbG9jX3J4c2tiKHJ0MngwMGRldi0+cngpOwogCQlpZiAoIXNrYikKIAkJCWdvdG8gZXhpdDsKIAotCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JCXNrYl9wdXQoc2tiLCBlbnRyeV9zaXplKTsKLQotCQlydDJ4MDBkZXYtPnJ4LT5lbnRyeVtpXS5za2IgPSBza2I7CisJCXJ0MngwMGRldi0+cngtPmVudHJpZXNbaV0uc2tiID0gc2tiOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDU2LDEwICs1MjMsMTAgQEAKIAogdm9pZCBydDJ4MDB1c2JfdW5pbml0aWFsaXplKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0Jc3RydWN0IGRhdGFfcmluZyAqcmluZzsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CiAKLQlyaW5nX2Zvcl9lYWNoKHJ0MngwMGRldiwgcmluZykKLQkJcnQyeDAwdXNiX2ZyZWVfdXJiKHJ0MngwMGRldiwgcmluZyk7CisJcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKKwkJcnQyeDAwdXNiX2ZyZWVfdXJiKHJ0MngwMGRldiwgcXVldWUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX3VuaW5pdGlhbGl6ZSk7CiAKQEAgLTQ3NCwxNCArNTQxLDE0IEBACiAJa2ZyZWUocnQyeDAwZGV2LT5lZXByb20pOwogCXJ0MngwMGRldi0+ZWVwcm9tID0gTlVMTDsKIAotCWtmcmVlKHJ0MngwMGRldi0+Y3NyX2NhY2hlKTsKLQlydDJ4MDBkZXYtPmNzcl9jYWNoZSA9IE5VTEw7CisJa2ZyZWUocnQyeDAwZGV2LT5jc3IuY2FjaGUpOworCXJ0MngwMGRldi0+Y3NyLmNhY2hlID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBydDJ4MDB1c2JfYWxsb2NfcmVnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JcnQyeDAwZGV2LT5jc3JfY2FjaGUgPSBremFsbG9jKENTUl9DQUNIRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJ0MngwMGRldi0+Y3NyX2NhY2hlKQorCXJ0MngwMGRldi0+Y3NyLmNhY2hlID0ga3phbGxvYyhDU1JfQ0FDSEVfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFydDJ4MDBkZXYtPmNzci5jYWNoZSkKIAkJZ290byBleGl0OwogCiAJcnQyeDAwZGV2LT5lZXByb20gPSBremFsbG9jKHJ0MngwMGRldi0+b3BzLT5lZXByb21fc2l6ZSwgR0ZQX0tFUk5FTCk7CkBAIC02MjcsOSArNjk0LDkgQEAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogLyoKLSAqIHJ0MngwMHBjaSBtb2R1bGUgaW5mb3JtYXRpb24uCisgKiBydDJ4MDB1c2IgbW9kdWxlIGluZm9ybWF0aW9uLgogICovCiBNT0RVTEVfQVVUSE9SKERSVl9QUk9KRUNUKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKLU1PRFVMRV9ERVNDUklQVElPTigicnQyeDAwIGxpYnJhcnkiKTsKK01PRFVMRV9ERVNDUklQVElPTigicnQyeDAwIHVzYiBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKaW5kZXggZTQwZGY0MC4uMTFlNTUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTYwLDM0ICs2MCw0NyBAQAogI2RlZmluZSBVU0JfVkVORE9SX1JFUVVFU1RfSU4JKCBVU0JfRElSX0lOIHwgVVNCX1ZFTkRPUl9SRVFVRVNUICkKICNkZWZpbmUgVVNCX1ZFTkRPUl9SRVFVRVNUX09VVAkoIFVTQl9ESVJfT1VUIHwgVVNCX1ZFTkRPUl9SRVFVRVNUICkKIAotLyoKLSAqIFVTQiB2ZW5kb3IgY29tbWFuZHMuCisvKioKKyAqIGVudW0gcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0OiBVU0IgdmVuZG9yIGNvbW1hbmRzLgogICovCi0jZGVmaW5lIFVTQl9ERVZJQ0VfTU9ERQkJMHgwMQotI2RlZmluZSBVU0JfU0lOR0xFX1dSSVRFCTB4MDIKLSNkZWZpbmUgVVNCX1NJTkdMRV9SRUFECQkweDAzCi0jZGVmaW5lIFVTQl9NVUxUSV9XUklURQkJMHgwNgotI2RlZmluZSBVU0JfTVVMVElfUkVBRAkJMHgwNwotI2RlZmluZSBVU0JfRUVQUk9NX1dSSVRFCTB4MDgKLSNkZWZpbmUgVVNCX0VFUFJPTV9SRUFECQkweDA5Ci0jZGVmaW5lIFVTQl9MRURfQ09OVFJPTAkJMHgwYQkvKiBSVDczVVNCICovCi0jZGVmaW5lIFVTQl9SWF9DT05UUk9MCQkweDBjCitlbnVtIHJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdCB7CisJVVNCX0RFVklDRV9NT0RFID0gMSwKKwlVU0JfU0lOR0xFX1dSSVRFID0gMiwKKwlVU0JfU0lOR0xFX1JFQUQgPSAzLAorCVVTQl9NVUxUSV9XUklURSA9IDYsCisJVVNCX01VTFRJX1JFQUQgPSA3LAorCVVTQl9FRVBST01fV1JJVEUgPSA4LAorCVVTQl9FRVBST01fUkVBRCA9IDksCisJVVNCX0xFRF9DT05UUk9MID0gMTAsIC8qIFJUNzNVU0IgKi8KKwlVU0JfUlhfQ09OVFJPTCA9IDEyLAorfTsKIAotLyoKLSAqIERldmljZSBtb2RlcyBvZmZzZXQKKy8qKgorICogZW51bSBydDJ4MDB1c2JfbW9kZV9vZmZzZXQ6IERldmljZSBtb2RlcyBvZmZzZXQuCiAgKi8KLSNkZWZpbmUgVVNCX01PREVfUkVTRVQJCTB4MDEKLSNkZWZpbmUgVVNCX01PREVfVU5QTFVHCQkweDAyCi0jZGVmaW5lIFVTQl9NT0RFX0ZVTkNUSU9OCTB4MDMKLSNkZWZpbmUgVVNCX01PREVfVEVTVAkJMHgwNAotI2RlZmluZSBVU0JfTU9ERV9TTEVFUAkJMHgwNwkvKiBSVDczVVNCICovCi0jZGVmaW5lIFVTQl9NT0RFX0ZJUk1XQVJFCTB4MDgJLyogUlQ3M1VTQiAqLwotI2RlZmluZSBVU0JfTU9ERV9XQUtFVVAJCTB4MDkJLyogUlQ3M1VTQiAqLworZW51bSBydDJ4MDB1c2JfbW9kZV9vZmZzZXQgeworCVVTQl9NT0RFX1JFU0VUID0gMSwKKwlVU0JfTU9ERV9VTlBMVUcgPSAyLAorCVVTQl9NT0RFX0ZVTkNUSU9OID0gMywKKwlVU0JfTU9ERV9URVNUID0gNCwKKwlVU0JfTU9ERV9TTEVFUCA9IDcsCS8qIFJUNzNVU0IgKi8KKwlVU0JfTU9ERV9GSVJNV0FSRSA9IDgsCS8qIFJUNzNVU0IgKi8KKwlVU0JfTU9ERV9XQUtFVVAgPSA5LAkvKiBSVDczVVNCICovCit9OwogCi0vKgotICogVXNlZCB0byByZWFkL3dyaXRlIGZyb20vdG8gdGhlIGRldmljZS4KKy8qKgorICogcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0IC0gU2VuZCByZWdpc3RlciBjb21tYW5kIHRvIGRldmljZQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYKKyAqIEByZXF1ZXN0OiBVU0IgdmVuZG9yIGNvbW1hbmQgKFNlZSAmZW51bSBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QpCisgKiBAcmVxdWVzdHR5cGU6IFJlcXVlc3QgdHlwZSAmVVNCX1ZFTkRPUl9SRVFVRVNUXyoKKyAqIEBvZmZzZXQ6IFJlZ2lzdGVyIG9mZnNldCB0byBwZXJmb3JtIGFjdGlvbiBvbgorICogQHZhbHVlOiBWYWx1ZSB0byB3cml0ZSB0byBkZXZpY2UKKyAqIEBidWZmZXI6IEJ1ZmZlciB3aGVyZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlYWQvd3JpdHRlbiB0byBieSBkZXZpY2UKKyAqIEBidWZmZXJfbGVuZ3RoOiBTaXplIG9mICZidWZmZXIKKyAqIEB0aW1lb3V0OiBPcGVyYXRpb24gdGltZW91dAorICoKICAqIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGV2aWNlLAotICogdGhlIGJ1ZmZlciBhcmd1bWVudCBfbXVzdF8gZWl0aGVyIGJlIE5VTEwgb3IgcG9pbnQgdG8KKyAqIHRoZSAmYnVmZmVyIGFyZ3VtZW50IF9tdXN0XyBlaXRoZXIgYmUgTlVMTCBvciBwb2ludCB0bwogICogYSBidWZmZXIgYWxsb2NhdGVkIGJ5IGttYWxsb2MuIEZhaWx1cmUgdG8gZG8gc28gY2FuIGxlYWQKICAqIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuCiAgKi8KQEAgLTk3LDEzICsxMTAsMjEgQEAKIAkJCSAgICAgdm9pZCAqYnVmZmVyLCBjb25zdCB1MTYgYnVmZmVyX2xlbmd0aCwKIAkJCSAgICAgY29uc3QgaW50IHRpbWVvdXQpOwogCi0vKgotICogVXNlZCB0byByZWFkL3dyaXRlIGZyb20vdG8gdGhlIGRldmljZS4KKy8qKgorICogcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2J1ZmYgLSBTZW5kIHJlZ2lzdGVyIGNvbW1hbmQgdG8gZGV2aWNlIChidWZmZXJlZCkKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKiBAcmVxdWVzdDogVVNCIHZlbmRvciBjb21tYW5kIChTZWUgJmVudW0gcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0KQorICogQHJlcXVlc3R0eXBlOiBSZXF1ZXN0IHR5cGUgJlVTQl9WRU5ET1JfUkVRVUVTVF8qCisgKiBAb2Zmc2V0OiBSZWdpc3RlciBvZmZzZXQgdG8gcGVyZm9ybSBhY3Rpb24gb24KKyAqIEBidWZmZXI6IEJ1ZmZlciB3aGVyZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlYWQvd3JpdHRlbiB0byBieSBkZXZpY2UKKyAqIEBidWZmZXJfbGVuZ3RoOiBTaXplIG9mICZidWZmZXIKKyAqIEB0aW1lb3V0OiBPcGVyYXRpb24gdGltZW91dAorICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgYSBwcmV2aW91c2x5IHdpdGgga21hbGxvYyBhbGxvY2F0ZWQgY2FjaGUKICAqIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRldmljZS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgcG9pbnRlcgogICogd2lsbCBiZSBjb3BpZWQgdG8gdGhpcyBjYWNoZSB3aGVuIHdyaXRpbmcsIG9yIHJlYWQgZnJvbSB0aGUgY2FjaGUKICAqIHdoZW4gcmVhZGluZy4KLSAqIEJ1ZmZlcnMgc2VuZCB0byBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QgX211c3RfIGJlIGFsbG9jYXRlZCB3aXRoCisgKiBCdWZmZXJzIHNlbmQgdG8gJnJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdCBfbXVzdF8gYmUgYWxsb2NhdGVkIHdpdGgKICAqIGttYWxsb2MuIEhlbmNlIHRoZSByZWFzb24gZm9yIHVzaW5nIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgY2FjaGUKICAqIHdoaWNoIGhhcyBiZWVuIGFsbG9jYXRlZCBwcm9wZXJseS4KICAqLwpAQCAtMTEyLDE1ICsxMzMsMzIgQEAKIAkJCQkgIGNvbnN0IHUxNiBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwKIAkJCQkgIGNvbnN0IHUxNiBidWZmZXJfbGVuZ3RoLCBjb25zdCBpbnQgdGltZW91dCk7CiAKLS8qCi0gKiBBIHZlcnNpb24gb2YgcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X2J1ZmYgd2hpY2ggbXVzdCBiZSBjYWxsZWQKLSAqIGlmIHRoZSB1c2JfY2FjaGVfbXV0ZXggaXMgYWxyZWFkeSBoZWxkLiAqLworLyoqCisgKiBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfYnVmZiAtIFNlbmQgcmVnaXN0ZXIgY29tbWFuZCB0byBkZXZpY2UgKGJ1ZmZlcmVkKQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYKKyAqIEByZXF1ZXN0OiBVU0IgdmVuZG9yIGNvbW1hbmQgKFNlZSAmZW51bSBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QpCisgKiBAcmVxdWVzdHR5cGU6IFJlcXVlc3QgdHlwZSAmVVNCX1ZFTkRPUl9SRVFVRVNUXyoKKyAqIEBvZmZzZXQ6IFJlZ2lzdGVyIG9mZnNldCB0byBwZXJmb3JtIGFjdGlvbiBvbgorICogQGJ1ZmZlcjogQnVmZmVyIHdoZXJlIGluZm9ybWF0aW9uIHdpbGwgYmUgcmVhZC93cml0dGVuIHRvIGJ5IGRldmljZQorICogQGJ1ZmZlcl9sZW5ndGg6IFNpemUgb2YgJmJ1ZmZlcgorICogQHRpbWVvdXQ6IE9wZXJhdGlvbiB0aW1lb3V0CisgKgorICogQSB2ZXJzaW9uIG9mICZydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3RfYnVmZiB3aGljaCBtdXN0IGJlIGNhbGxlZAorICogaWYgdGhlIHVzYl9jYWNoZV9tdXRleCBpcyBhbHJlYWR5IGhlbGQuCisgKi8KIGludCBydDJ4MDB1c2JfdmVuZG9yX3JlcV9idWZmX2xvY2soc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICBjb25zdCB1OCByZXF1ZXN0LCBjb25zdCB1OCByZXF1ZXN0dHlwZSwKIAkJCQkgICBjb25zdCB1MTYgb2Zmc2V0LCB2b2lkICpidWZmZXIsCiAJCQkJICAgY29uc3QgdTE2IGJ1ZmZlcl9sZW5ndGgsIGNvbnN0IGludCB0aW1lb3V0KTsKIAotLyoKKy8qKgorICogcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3IC0gU2VuZCBzaW5nbGUgcmVnaXN0ZXIgY29tbWFuZCB0byBkZXZpY2UKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKiBAcmVxdWVzdDogVVNCIHZlbmRvciBjb21tYW5kIChTZWUgJmVudW0gcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0KQorICogQG9mZnNldDogUmVnaXN0ZXIgb2Zmc2V0IHRvIHBlcmZvcm0gYWN0aW9uIG9uCisgKiBAdmFsdWU6IFZhbHVlIHRvIHdyaXRlIHRvIGRldmljZQorICogQHRpbWVvdXQ6IE9wZXJhdGlvbiB0aW1lb3V0CisgKgogICogU2ltcGxlIHdyYXBwZXIgYXJvdW5kIHJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdCB0byB3cml0ZSBhIHNpbmdsZQogICogY29tbWFuZCB0byB0aGUgZGV2aWNlLiBTaW5jZSB3ZSBkb24ndCB1c2UgdGhlIGJ1ZmZlciBhcmd1bWVudCB3ZQogICogZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBrbWFsbG9jIGhlcmUuCkBAIC0xMzYsNyArMTc0LDEyIEBACiAJCQkJCXZhbHVlLCBOVUxMLCAwLCB0aW1lb3V0KTsKIH0KIAotLyoKKy8qKgorICogcnQyeDAwdXNiX2VlcHJvbV9yZWFkIC0gUmVhZCBlZXByb20gZnJvbSBkZXZpY2UKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKiBAZWVwcm9tOiBQb2ludGVyIHRvIGVlcHJvbSBhcnJheSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gaW4KKyAqIEBsZW5ndGg6IE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gdGhlIGVlcHJvbQorICoKICAqIFNpbXBsZSB3cmFwcGVyIGFyb3VuZCBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QgdG8gcmVhZCB0aGUgZWVwcm9tCiAgKiBmcm9tIHRoZSBkZXZpY2UuIE5vdGUgdGhhdCB0aGUgZWVwcm9tIGFyZ3VtZW50IF9tdXN0XyBiZSBhbGxvY2F0ZWQgdXNpbmcKICAqIGttYWxsb2MgZm9yIGNvcnJlY3QgaGFuZGxpbmcgaW5zaWRlIHRoZSBrZXJuZWwgVVNCIGxheWVyLgpAQCAtMTQ3LDggKzE5MCw4IEBACiAJaW50IHRpbWVvdXQgPSBSRUdJU1RFUl9USU1FT1VUICogKGxlbmdodCAvIHNpemVvZih1MTYpKTsKIAogCXJldHVybiBydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3QocnQyeDAwZGV2LCBVU0JfRUVQUk9NX1JFQUQsCi0JCQkJCVVTQl9WRU5ET1JfUkVRVUVTVF9JTiwgMHgwMDAwLAotCQkJCQkweDAwMDAsIGVlcHJvbSwgbGVuZ2h0LCB0aW1lb3V0KTsKKwkJCQkJVVNCX1ZFTkRPUl9SRVFVRVNUX0lOLCAwLCAwLAorCQkJCQllZXByb20sIGxlbmdodCwgdGltZW91dCk7CiB9CiAKIC8qCkBAIC0xNjAsMTYgKzIwMyw1OCBAQAogICogVFggZGF0YSBoYW5kbGVycy4KICAqLwogaW50IHJ0MngwMHVzYl93cml0ZV90eF9kYXRhKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgc3RydWN0IGRhdGFfcmluZyAqcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKTsKIAorLyoqCisgKiBzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2Jfcng6IFBlciBSWCBlbnRyeSBVU0Igc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqCisgKiBAdXJiOiBVcmIgc3RydWN0dXJlIHVzZWQgZm9yIGRldmljZSBjb21tdW5pY2F0aW9uLgorICovCitzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfcnggeworCXN0cnVjdCB1cmIgKnVyYjsKK307CisKKy8qKgorICogc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4OiBQZXIgVFggZW50cnkgVVNCIHNwZWNpZmljIGluZm9ybWF0aW9uCisgKgorICogQHVyYjogVXJiIHN0cnVjdHVyZSB1c2VkIGZvciBkZXZpY2UgY29tbXVuaWNhdGlvbi4KKyAqIEBjb250cm9sOiBtYWM4MDIxMSBjb250cm9sIHN0cnVjdHVyZSB1c2VkIHRvIHRyYW5zbWl0IGRhdGEuCisgKi8KK3N0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCB7CisJc3RydWN0IHVyYiAqdXJiOworCisJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIGNvbnRyb2w7Cit9OworCisvKioKKyAqIHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eDogUGVyIFRYIGVudHJ5IFVTQiBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICoKKyAqIFRoZSBmaXJzdCBzZWN0aW9uIHNob3VsZCBtYXRjaCAmc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX3R4IGV4YWN0bHkuCisgKiBydDI1MDB1c2IgY2FuIHVzZSB0aGlzIHN0cnVjdHVyZSB0byBzZW5kIGEgZ3VhcmRpYW4gYnl0ZSB3aGVuIHdvcmtpbmcKKyAqIHdpdGggYmVhY29ucy4KKyAqCisgKiBAdXJiOiBVcmIgc3RydWN0dXJlIHVzZWQgZm9yIGRldmljZSBjb21tdW5pY2F0aW9uLgorICogQGNvbnRyb2w6IG1hYzgwMjExIGNvbnRyb2wgc3RydWN0dXJlIHVzZWQgdG8gdHJhbnNtaXQgZGF0YS4KKyAqIEBndWFyZGlhbl9kYXRhOiBTZXQgdG8gMCwgdXNlZCBmb3Igc2VuZGluZyB0aGUgZ3VhcmRpYW4gZGF0YS4KKyAqIEBndWFyZGlhbl91cmI6IFVyYiBzdHJ1Y3R1cmUgdXNlZCB0byBzZW5kIHRoZSBndWFyZGlhbiBkYXRhLgorICovCitzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuIHsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKKworCXVuc2lnbmVkIGludCBndWFyZGlhbl9kYXRhOworCXN0cnVjdCB1cmIgKmd1YXJkaWFuX3VyYjsKK307CisKIC8qCiAgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCiAgKi8KIHZvaWQgcnQyeDAwdXNiX2luaXRfcnhlbnRyeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgIHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSk7CisJCQkgICAgc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7CiB2b2lkIHJ0MngwMHVzYl9pbml0X3R4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICBzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnkpOworCQkJICAgIHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOwogaW50IHJ0MngwMHVzYl9pbml0aWFsaXplKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDB1c2JfdW5pbml0aWFsaXplKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCBiMzFmMGMyLi40NjhhMzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNCw2ICsyNCw3IEBACiAJU3VwcG9ydGVkIGNoaXBzZXRzOiBSVDI1NjEsIFJUMjU2MXMsIFJUMjY2MS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvY3JjLWl0dS10Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE1NSw2ICsxNTYsMTIgQEAKIAlydDJ4MDBfcmZfd3JpdGUocnQyeDAwZGV2LCB3b3JkLCB2YWx1ZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUlQ2MVBDSV9MRURTCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIHJ0NjFwY2lfbGVkX2JyaWdodG5lc3MoKQorICogbWFrZSBnY2MgaGFwcHkgYnkgcGxhY2luZyB0aGlzIGZ1bmN0aW9uIGluc2lkZSB0aGUKKyAqIHNhbWUgaWZkZWYgc3RhdGVtZW50IGFzIHRoZSBjYWxsZXIuCisgKi8KIHN0YXRpYyB2b2lkIHJ0NjFwY2lfbWN1X3JlcXVlc3Qoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQljb25zdCB1OCBjb21tYW5kLCBjb25zdCB1OCB0b2tlbiwKIAkJCQljb25zdCB1OCBhcmcwLCBjb25zdCB1OCBhcmcxKQpAQCAtMTgxLDYgKzE4OCw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEhPU1RfQ01EX0NTUl9JTlRFUlJVUFRfTUNVLCAxKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIT1NUX0NNRF9DU1IsIHJlZyk7CiB9CisjZW5kaWYgLyogQ09ORklHX1JUNjFQQ0lfTEVEUyAqLwogCiBzdGF0aWMgdm9pZCBydDYxcGNpX2VlcHJvbXJlZ2lzdGVyX3JlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQogewpAQCAtMjYyLDgyICsyNzAsMTYyIEBACiAJdTMyIHJlZzsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjEzLCAmcmVnKTsKLQlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEzX0JJVDUpOzsKKwlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEzX0JJVDUpOwogfQogI2Vsc2UKICNkZWZpbmUgcnQ2MXBjaV9yZmtpbGxfcG9sbAlOVUxMCiAjZW5kaWYgLyogQ09ORklHX1JUNjFQQ0lfUkZLSUxMICovCiAKKyNpZmRlZiBDT05GSUdfUlQ2MVBDSV9MRURTCitzdGF0aWMgdm9pZCBydDYxcGNpX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkID0KKwkgICAgY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgcnQyeDAwX2xlZCwgbGVkX2Rldik7CisJdW5zaWduZWQgaW50IGVuYWJsZWQgPSBicmlnaHRuZXNzICE9IExFRF9PRkY7CisJdW5zaWduZWQgaW50IGFfbW9kZSA9CisJICAgIChlbmFibGVkICYmIGxlZC0+cnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWik7CisJdW5zaWduZWQgaW50IGJnX21vZGUgPQorCSAgICAoZW5hYmxlZCAmJiBsZWQtPnJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopOworCisJaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9SQURJTykgeworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJmxlZC0+cnQyeDAwZGV2LT5sZWRfbWN1X3JlZywKKwkJCQkgICBNQ1VfTEVEQ1NfUkFESU9fU1RBVFVTLCBlbmFibGVkKTsKKworCQlydDYxcGNpX21jdV9yZXF1ZXN0KGxlZC0+cnQyeDAwZGV2LCBNQ1VfTEVELCAweGZmLAorCQkJCSAgICAobGVkLT5ydDJ4MDBkZXYtPmxlZF9tY3VfcmVnICYgMHhmZiksCisJCQkJICAgICgobGVkLT5ydDJ4MDBkZXYtPmxlZF9tY3VfcmVnID4+IDgpKSk7CisJfSBlbHNlIGlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfQVNTT0MpIHsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZsZWQtPnJ0MngwMGRldi0+bGVkX21jdV9yZWcsCisJCQkJICAgTUNVX0xFRENTX0xJTktfQkdfU1RBVFVTLCBiZ19tb2RlKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZsZWQtPnJ0MngwMGRldi0+bGVkX21jdV9yZWcsCisJCQkJICAgTUNVX0xFRENTX0xJTktfQV9TVEFUVVMsIGFfbW9kZSk7CisKKwkJcnQ2MXBjaV9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRCwgMHhmZiwKKwkJCQkgICAgKGxlZC0+cnQyeDAwZGV2LT5sZWRfbWN1X3JlZyAmIDB4ZmYpLAorCQkJCSAgICAoKGxlZC0+cnQyeDAwZGV2LT5sZWRfbWN1X3JlZyA+PiA4KSkpOworCX0gZWxzZSBpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1FVQUxJVFkpIHsKKwkJLyoKKwkJICogVGhlIGJyaWdodG5lc3MgaXMgZGl2aWRlZCBpbnRvIDYgbGV2ZWxzICgwIC0gNSksCisJCSAqIHRoaXMgbWVhbnMgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBicmlnaHRuZXNzCisJCSAqIGFyZ3VtZW50IGludG8gdGhlIG1hdGNoaW5nIGxldmVsIHdpdGhpbiB0aGF0IHJhbmdlLgorCQkgKi8KKwkJcnQ2MXBjaV9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRF9TVFJFTkdUSCwgMHhmZiwKKwkJCQkgICAgYnJpZ2h0bmVzcyAvIChMRURfRlVMTCAvIDYpLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnQ2MXBjaV9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCit7CisJc3RydWN0IHJ0MngwMF9sZWQgKmxlZCA9CisJICAgIGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IHJ0MngwMF9sZWQsIGxlZF9kZXYpOworCXUzMiByZWc7CisKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChsZWQtPnJ0MngwMGRldiwgTUFDX0NTUjE0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjE0X09OX1BFUklPRCwgKmRlbGF5X29uKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjE0X09GRl9QRVJJT0QsICpkZWxheV9vZmYpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShsZWQtPnJ0MngwMGRldiwgTUFDX0NTUjE0LCByZWcpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1JUNjFQQ0lfTEVEUyAqLworCiAvKgogICogQ29uZmlndXJhdGlvbiBoYW5kbGVycy4KICAqLwotc3RhdGljIHZvaWQgcnQ2MXBjaV9jb25maWdfbWFjX2FkZHIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgX19sZTMyICptYWMpCi17Ci0JdTMyIHRtcDsKLQotCXRtcCA9IGxlMzJfdG9fY3B1KG1hY1sxXSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ0bXAsIE1BQ19DU1IzX1VOSUNBU1RfVE9fTUVfTUFTSywgMHhmZik7Ci0JbWFjWzFdID0gY3B1X3RvX2xlMzIodG1wKTsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjIsIG1hYywKLQkJCQkgICAgICAoMiAqIHNpemVvZihfX2xlMzIpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0NjFwY2lfY29uZmlnX2Jzc2lkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIF9fbGUzMiAqYnNzaWQpCi17Ci0JdTMyIHRtcDsKLQotCXRtcCA9IGxlMzJfdG9fY3B1KGJzc2lkWzFdKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnRtcCwgTUFDX0NTUjVfQlNTX0lEX01BU0ssIDMpOwotCWJzc2lkWzFdID0gY3B1X3RvX2xlMzIodG1wKTsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjQsIGJzc2lkLAotCQkJCSAgICAgICgyICogc2l6ZW9mKF9fbGUzMikpKTsKLX0KLQotc3RhdGljIHZvaWQgcnQ2MXBjaV9jb25maWdfdHlwZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCBpbnQgdHlwZSwKLQkJCQljb25zdCBpbnQgdHNmX3N5bmMpCitzdGF0aWMgdm9pZCBydDYxcGNpX2NvbmZpZ19maWx0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3MpCiB7CiAJdTMyIHJlZzsKIAogCS8qCi0JICogQ2xlYXIgY3VycmVudCBzeW5jaHJvbmlzYXRpb24gc2V0dXAuCi0JICogRm9yIHRoZSBCZWFjb24gYmFzZSByZWdpc3RlcnMgd2Ugb25seSBuZWVkIHRvIGNsZWFyCi0JICogdGhlIGZpcnN0IGJ5dGUgc2luY2UgdGhhdCBieXRlIGNvbnRhaW5zIHRoZSBWQUxJRCBhbmQgT1dORVIKLQkgKiBiaXRzIHdoaWNoICh3aGVuIHNldCB0byAwKSB3aWxsIGludmFsaWRhdGUgdGhlIGVudGlyZSBiZWFjb24uCisJICogU3RhcnQgY29uZmlndXJhdGlvbiBzdGVwcy4KKwkgKiBOb3RlIHRoYXQgdGhlIHZlcnNpb24gZXJyb3Igd2lsbCBhbHdheXMgYmUgZHJvcHBlZAorCSAqIGFuZCBicm9hZGNhc3QgZnJhbWVzIHdpbGwgYWx3YXlzIGJlIGFjY2VwdGVkIHNpbmNlCisJICogdGhlcmUgaXMgbm8gZmlsdGVyIGZvciBpdCBhdCB0aGlzIHRpbWUuCiAJICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAwKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTAsIDApOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMSwgMCk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0UyLCAwKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTMsIDApOwotCi0JLyoKLQkgKiBFbmFibGUgc3luY2hyb25pc2F0aW9uLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9USUNLSU5HLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLAotCQkJICAodHNmX3N5bmMgPT0gVFNGX1NZTkNfQkVBQ09OKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9TWU5DLCB0c2Zfc3luYyk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfQ1JDLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfRkNTRkFJTCkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9QSFlTSUNBTCwKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BMQ1BGQUlMKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0NPTlRST0wsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9DT05UUk9MKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX05PVF9UT19NRSwKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX1RPX0RTLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICYmCisJCQkgICAhcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfVkVSU0lPTl9FUlJPUiwgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX01VTFRJQ0FTVCwKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0FMTE1VTFRJKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0JST0FEQ0FTVCwgMCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0FDS19DVFMsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9DT05UUk9MKSk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IwLCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCBydDYxcGNpX2NvbmZpZ19wcmVhbWJsZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICBjb25zdCBpbnQgc2hvcnRfcHJlYW1ibGUsCi0JCQkJICAgIGNvbnN0IGludCBhY2tfdGltZW91dCwKLQkJCQkgICAgY29uc3QgaW50IGFja19jb25zdW1lX3RpbWUpCitzdGF0aWMgdm9pZCBydDYxcGNpX2NvbmZpZ19pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAorCQkJCXN0cnVjdCBydDJ4MDBpbnRmX2NvbmYgKmNvbmYsCisJCQkJY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludCBiZWFjb25fYmFzZTsKKwl1MzIgcmVnOworCisJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9UWVBFKSB7CisJCS8qCisJCSAqIENsZWFyIGN1cnJlbnQgc3luY2hyb25pc2F0aW9uIHNldHVwLgorCQkgKiBGb3IgdGhlIEJlYWNvbiBiYXNlIHJlZ2lzdGVycyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIKKwkJICogdGhlIGZpcnN0IGJ5dGUgc2luY2UgdGhhdCBieXRlIGNvbnRhaW5zIHRoZSBWQUxJRCBhbmQgT1dORVIKKwkJICogYml0cyB3aGljaCAod2hlbiBzZXQgdG8gMCkgd2lsbCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgYmVhY29uLgorCQkgKi8KKwkJYmVhY29uX2Jhc2UgPSBIV19CRUFDT05fT0ZGU0VUKGludGYtPmJlYWNvbi0+ZW50cnlfaWR4KTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UsIDApOworCisJCS8qCisJCSAqIEVuYWJsZSBzeW5jaHJvbmlzYXRpb24uCisJCSAqLworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVFNGX1RJQ0tJTkcsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9TWU5DLCBjb25mLT5zeW5jKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UQlRUX0VOQUJMRSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX01BQykgeworCQlyZWcgPSBsZTMyX3RvX2NwdShjb25mLT5tYWNbMV0pOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjNfVU5JQ0FTVF9UT19NRV9NQVNLLCAweGZmKTsKKwkJY29uZi0+bWFjWzFdID0gY3B1X3RvX2xlMzIocmVnKTsKKworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IyLAorCQkJCQkgICAgICBjb25mLT5tYWMsIHNpemVvZihjb25mLT5tYWMpKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX0JTU0lEKSB7CisJCXJlZyA9IGxlMzJfdG9fY3B1KGNvbmYtPmJzc2lkWzFdKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1I1X0JTU19JRF9NQVNLLCAzKTsKKwkJY29uZi0+YnNzaWRbMV0gPSBjcHVfdG9fbGUzMihyZWcpOworCisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjQsCisJCQkJCSAgICAgIGNvbmYtPmJzc2lkLCBzaXplb2YoY29uZi0+YnNzaWQpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfY29uZmlnX2VycChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIHN0cnVjdCBydDJ4MDBsaWJfZXJwICplcnApCiB7CiAJdTMyIHJlZzsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX1JYX0FDS19USU1FT1VULCBhY2tfdGltZW91dCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9SWF9BQ0tfVElNRU9VVCwgZXJwLT5hY2tfdGltZW91dCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IwLCByZWcpOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjQsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjRfQVVUT1JFU1BPTkRfUFJFQU1CTEUsCi0JCQkgICAhIXNob3J0X3ByZWFtYmxlKTsKKwkJCSAgICEhZXJwLT5zaG9ydF9wcmVhbWJsZSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I0LCByZWcpOwogfQogCkBAIC00MjcsMjcgKzUxNSwyMSBAQAogCWNhc2UgQU5URU5OQV9IV19ESVZFUlNJVFk6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0FOVEVOTkFfQ09OVFJPTCwgMik7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0ZSQU1FX0VORCwKLQkJCQkgIChydDJ4MDBkZXYtPmN1cnJfaHdtb2RlICE9IEhXTU9ERV9BKSk7CisJCQkJICAocnQyeDAwZGV2LT5jdXJyX2JhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikpOwogCQlicmVhazsKIAljYXNlIEFOVEVOTkFfQToKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfQU5URU5OQV9DT05UUk9MLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfRlJBTUVfRU5ELCAwKTsKLQkJaWYgKHJ0MngwMGRldi0+Y3Vycl9od21vZGUgPT0gSFdNT0RFX0EpCisJCWlmIChydDJ4MDBkZXYtPmN1cnJfYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAwKTsKIAkJZWxzZQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAzKTsKIAkJYnJlYWs7Ci0JY2FzZSBBTlRFTk5BX1NXX0RJVkVSU0lUWToKLQkJLyoKLQkJICogTk9URTogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcwotCQkgKiBzdXBwb3NlZCB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEKLQkJICogZXhwbGljaXRlbHkuIEhvd2V2ZXIgd2UgYXJlIG5vZyBnb2luZyB0byBidWcgYWJvdXQgdGhpcy4KLQkJICogSW5zdGVhZCwganVzdCBkZWZhdWx0IHRvIGFudGVubmEgQi4KLQkJICovCiAJY2FzZSBBTlRFTk5BX0I6CisJZGVmYXVsdDoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfQU5URU5OQV9DT05UUk9MLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfRlJBTUVfRU5ELCAwKTsKLQkJaWYgKHJ0MngwMGRldi0+Y3Vycl9od21vZGUgPT0gSFdNT0RFX0EpCisJCWlmIChydDJ4MDBkZXYtPmN1cnJfYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAzKTsKIAkJZWxzZQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAwKTsKQEAgLTQ4NiwxNCArNTY4LDggQEAKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfQU5URU5OQV9DT05UUk9MLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAzKTsKIAkJYnJlYWs7Ci0JY2FzZSBBTlRFTk5BX1NXX0RJVkVSU0lUWToKLQkJLyoKLQkJICogTk9URTogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcwotCQkgKiBzdXBwb3NlZCB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEKLQkJICogZXhwbGljaXRlbHkuIEhvd2V2ZXIgd2UgYXJlIG5vZyBnb2luZyB0byBidWcgYWJvdXQgdGhpcy4KLQkJICogSW5zdGVhZCwganVzdCBkZWZhdWx0IHRvIGFudGVubmEgQi4KLQkJICovCiAJY2FzZSBBTlRFTk5BX0I6CisJZGVmYXVsdDoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfQU5URU5OQV9DT05UUk9MLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAwKTsKIAkJYnJlYWs7CkBAIC01MzEsMTAgKzYwNyw2IEBACiAJcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDQsICZyNCk7CiAJcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDc3LCAmcjc3KTsKIAotCS8qIEZJWE1FOiBBbnRlbm5hIHNlbGVjdGlvbiBmb3IgdGhlIHJmIDI1MjkgaXMgdmVyeSBjb25mdXNpbmcgaW4gdGhlCi0JICogbGVnYWN5IGRyaXZlci4gVGhlIGNvZGUgYmVsb3cgc2hvdWxkIGJlIG9rIGZvciBub24tZGl2ZXJzaXR5IHNldHVwcy4KLQkgKi8KLQogCS8qCiAJICogQ29uZmlndXJlIHRoZSBSWCBhbnRlbm5hLgogCSAqLwpAQCAtNTQ0LDE1ICs2MTYsMTQgQEAKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAwKTsKIAkJcnQ2MXBjaV9jb25maWdfYW50ZW5uYV8yNTI5X3J4KHJ0MngwMGRldiwgMCwgMCk7CiAJCWJyZWFrOwotCWNhc2UgQU5URU5OQV9TV19ESVZFUlNJVFk6CiAJY2FzZSBBTlRFTk5BX0hXX0RJVkVSU0lUWToKIAkJLyoKLQkJICogTk9URTogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcwotCQkgKiBzdXBwb3NlZCB0byBjYXRjaCB0aGlzIGFuZCBzZW5kIHVzIHRoZSBjb3JyZWN0IGFudGVubmEKLQkJICogZXhwbGljaXRlbHkuIEhvd2V2ZXIgd2UgYXJlIG5vZyBnb2luZyB0byBidWcgYWJvdXQgdGhpcy4KLQkJICogSW5zdGVhZCwganVzdCBkZWZhdWx0IHRvIGFudGVubmEgQi4KKwkJICogRklYTUU6IEFudGVubmEgc2VsZWN0aW9uIGZvciB0aGUgcmYgMjUyOSBpcyB2ZXJ5IGNvbmZ1c2luZworCQkgKiBpbiB0aGUgbGVnYWN5IGRyaXZlci4gSnVzdCBkZWZhdWx0IHRvIGFudGVubmEgQiB1bnRpbCB0aGUKKwkJICogbGVnYWN5IGNvZGUgY2FuIGJlIHByb3Blcmx5IHRyYW5zbGF0ZWQgaW50byBydDJ4MDAgY29kZS4KIAkJICovCiAJY2FzZSBBTlRFTk5BX0I6CisJZGVmYXVsdDoKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfQU5URU5OQV9DT05UUk9MLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI3NywgQkJQX1I3N19SWF9BTlRFTk5BLCAzKTsKIAkJcnQ2MXBjaV9jb25maWdfYW50ZW5uYV8yNTI5X3J4KHJ0MngwMGRldiwgMSwgMSk7CkBAIC02MDMsNyArNjc0LDE0IEBACiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIHJlZzsKIAotCWlmIChydDJ4MDBkZXYtPmN1cnJfaHdtb2RlID09IEhXTU9ERV9BKSB7CisJLyoKKwkgKiBXZSBzaG91bGQgbmV2ZXIgY29tZSBoZXJlIGJlY2F1c2UgcnQyeDAwbGliIGlzIHN1cHBvc2VkCisJICogdG8gY2F0Y2ggdGhpcyBhbmQgc2VuZCB1cyB0aGUgY29ycmVjdCBhbnRlbm5hIGV4cGxpY2l0ZWx5LgorCSAqLworCUJVR19PTihhbnQtPnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZIHx8CisJICAgICAgIGFudC0+dHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpOworCisJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJc2VsID0gYW50ZW5uYV9zZWxfYTsKIAkJbG5hID0gdGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJfSBlbHNlIHsKQEAgLTYxNywxMCArNjk1LDkgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFBIWV9DU1IwLCAmcmVnKTsKIAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBQSFlfQ1NSMF9QQV9QRV9CRywKLQkJCSAgIChydDJ4MDBkZXYtPmN1cnJfaHdtb2RlID09IEhXTU9ERV9CIHx8Ci0JCQkgICAgcnQyeDAwZGV2LT5jdXJyX2h3bW9kZSA9PSBIV01PREVfRykpOworCQkJICAgcnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1IwX1BBX1BFX0EsCi0JCQkgICAocnQyeDAwZGV2LT5jdXJyX2h3bW9kZSA9PSBIV01PREVfQSkpOworCQkJICAgcnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWik7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQSFlfQ1NSMCwgcmVnKTsKIApAQCAtNjY3LDggKzc0NCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJ0NjFwY2lfY29uZmlnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCQkgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCisJCQkgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCisJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9QSFlNT0RFKQogCQlydDYxcGNpX2NvbmZpZ19waHltb2RlKHJ0MngwMGRldiwgbGliY29uZi0+YmFzaWNfcmF0ZXMpOwpAQCAtNjg0LDc4ICs3NjEsNiBAQAogfQogCiAvKgotICogTEVEIGZ1bmN0aW9ucy4KLSAqLwotc3RhdGljIHZvaWQgcnQ2MXBjaV9lbmFibGVfbGVkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JdTMyIHJlZzsKLQl1OCBhcmcwOwotCXU4IGFyZzE7Ci0KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxNCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxNF9PTl9QRVJJT0QsIDcwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjE0X09GRl9QRVJJT0QsIDMwKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTQsIHJlZyk7Ci0KLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX1JBRElPX1NUQVRVUywgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9yZWcsIE1DVV9MRURDU19MSU5LX0FfU1RBVFVTLAotCQkJICAgKHJ0MngwMGRldi0+cnhfc3RhdHVzLnBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFBKSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9yZWcsIE1DVV9MRURDU19MSU5LX0JHX1NUQVRVUywKLQkJCSAgIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5waHltb2RlICE9IE1PREVfSUVFRTgwMjExQSkpOwotCi0JYXJnMCA9IHJ0MngwMGRldi0+bGVkX3JlZyAmIDB4ZmY7Ci0JYXJnMSA9IChydDJ4MDBkZXYtPmxlZF9yZWcgPj4gOCkgJiAweGZmOwotCi0JcnQ2MXBjaV9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9MRUQsIDB4ZmYsIGFyZzAsIGFyZzEpOwotfQotCi1zdGF0aWMgdm9pZCBydDYxcGNpX2Rpc2FibGVfbGVkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JdTE2IGxlZF9yZWc7Ci0JdTggYXJnMDsKLQl1OCBhcmcxOwotCi0JbGVkX3JlZyA9IHJ0MngwMGRldi0+bGVkX3JlZzsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJmxlZF9yZWcsIE1DVV9MRURDU19SQURJT19TVEFUVVMsIDApOwotCXJ0MngwMF9zZXRfZmllbGQxNigmbGVkX3JlZywgTUNVX0xFRENTX0xJTktfQkdfU1RBVFVTLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJmxlZF9yZWcsIE1DVV9MRURDU19MSU5LX0FfU1RBVFVTLCAwKTsKLQotCWFyZzAgPSBsZWRfcmVnICYgMHhmZjsKLQlhcmcxID0gKGxlZF9yZWcgPj4gOCkgJiAweGZmOwotCi0JcnQ2MXBjaV9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9MRUQsIDB4ZmYsIGFyZzAsIGFyZzEpOwotfQotCi1zdGF0aWMgdm9pZCBydDYxcGNpX2FjdGl2aXR5X2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBpbnQgcnNzaSkKLXsKLQl1OCBsZWQ7Ci0KLQlpZiAocnQyeDAwZGV2LT5sZWRfbW9kZSAhPSBMRURfTU9ERV9TSUdOQUxfU1RSRU5HVEgpCi0JCXJldHVybjsKLQotCS8qCi0JICogTGVkIGhhbmRsaW5nIHJlcXVpcmVzIGEgcG9zaXRpdmUgdmFsdWUgZm9yIHRoZSByc3NpLAotCSAqIHRvIGRvIHRoYXQgY29ycmVjdGx5IHdlIG5lZWQgdG8gYWRkIHRoZSBjb3JyZWN0aW9uLgotCSAqLwotCXJzc2kgKz0gcnQyeDAwZGV2LT5yc3NpX29mZnNldDsKLQotCWlmIChyc3NpIDw9IDMwKQotCQlsZWQgPSAwOwotCWVsc2UgaWYgKHJzc2kgPD0gMzkpCi0JCWxlZCA9IDE7Ci0JZWxzZSBpZiAocnNzaSA8PSA0OSkKLQkJbGVkID0gMjsKLQllbHNlIGlmIChyc3NpIDw9IDUzKQotCQlsZWQgPSAzOwotCWVsc2UgaWYgKHJzc2kgPD0gNjMpCi0JCWxlZCA9IDQ7Ci0JZWxzZQotCQlsZWQgPSA1OwotCi0JcnQ2MXBjaV9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9MRURfU1RSRU5HVEgsIDB4ZmYsIGxlZCwgMCk7Ci19Ci0KLS8qCiAgKiBMaW5rIHR1bmluZwogICovCiBzdGF0aWMgdm9pZCBydDYxcGNpX2xpbmtfc3RhdHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTc4OSwxNyArNzk0LDEyIEBACiAJdTggdXBfYm91bmQ7CiAJdTggbG93X2JvdW5kOwogCi0JLyoKLQkgKiBVcGRhdGUgTGVkIHN0cmVuZ3RoCi0JICovCi0JcnQ2MXBjaV9hY3Rpdml0eV9sZWQocnQyeDAwZGV2LCByc3NpKTsKLQogCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7CiAKIAkvKgogCSAqIERldGVybWluZSByMTcgYm91bmRzLgogCSAqLwotCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5waHltb2RlID09IE1PREVfSUVFRTgwMjExQSkgeworCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJbG93X2JvdW5kID0gMHgyODsKIAkJdXBfYm91bmQgPSAweDQ4OwogCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKQEAgLTgxNiw2ICs4MTYsMTMgQEAKIAl9CiAKIAkvKgorCSAqIElmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCwgd2Ugc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIHRoZQorCSAqIGR5bmFtaWMgQ0NBIHR1bmluZy4KKwkgKi8KKwlpZiAoIXJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkKQorCQlnb3RvIGR5bmFtaWNfY2NhX3R1bmU7CisKKwkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgdmVyeSBzaG9ydCBkaXN0YW5jZQogCSAqLwogCWlmIChyc3NpID49IC0zNSkgewpAQCAtODY2LDYgKzg3Myw4IEBACiAJCXJldHVybjsKIAl9CiAKK2R5bmFtaWNfY2NhX3R1bmU6CisKIAkvKgogCSAqIHIxNyBkb2VzIG5vdCB5ZXQgZXhjZWVkIHVwcGVyIGxpbWl0LCBjb250aW51ZSBhbmQgYmFzZQogCSAqIHRoZSByMTcgdHVuaW5nIG9uIHRoZSBmYWxzZSBDQ0EgY291bnQuCkBAIC04ODIsNyArODkxLDcgQEAKIH0KIAogLyoKLSAqIEZpcm13YXJlIG5hbWUgZnVuY3Rpb24uCisgKiBGaXJtd2FyZSBmdW5jdGlvbnMKICAqLwogc3RhdGljIGNoYXIgKnJ0NjFwY2lfZ2V0X2Zpcm13YXJlX25hbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKQEAgLTkwNiw5ICs5MTUsMjMgQEAKIAlyZXR1cm4gZndfbmFtZTsKIH0KIAotLyoKLSAqIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KLSAqLworc3RhdGljIHUxNiBydDYxcGNpX2dldF9maXJtd2FyZV9jcmModm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKK3sKKwl1MTYgY3JjOworCisJLyoKKwkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICogVGhlIGxhc3QgMiBieXRlcyBpbiB0aGUgZmlybXdhcmUgYXJyYXkgYXJlIHRoZSBjcmMgY2hlY2tzdW0gaXRzZWxmLAorCSAqIHRoaXMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbmV2ZXIgcGFzcyB0aG9zZSAyIGJ5dGVzIHRvIHRoZSBjcmMKKwkgKiBhbGdvcml0aG0uCisJICovCisJY3JjID0gY3JjX2l0dV90KDAsIGRhdGEsIGxlbiAtIDIpOworCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CisJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKKworCXJldHVybiBjcmM7Cit9CisKIHN0YXRpYyBpbnQgcnQ2MXBjaV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHZvaWQgKmRhdGEsCiAJCQkJIGNvbnN0IHNpemVfdCBsZW4pCiB7CkBAIC05ODksNTAgKzEwMTIsNTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KKyAqLwogc3RhdGljIHZvaWQgcnQ2MXBjaV9pbml0X3J4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5KQorCQkJCSBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCV9fbGUzMiAqcnhkID0gZW50cnktPnByaXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4ICpwcml2X3J4ID0gZW50cnktPnByaXZfZGF0YTsKIAl1MzIgd29yZDsKIAotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCA1LCAmd29yZCk7CisJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3J4LT5kZXNjLCA1LCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBSWERfVzVfQlVGRkVSX1BIWVNJQ0FMX0FERFJFU1MsCi0JCQkgICBlbnRyeS0+ZGF0YV9kbWEpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHJ4ZCwgNSwgd29yZCk7CisJCQkgICBwcml2X3J4LT5kYXRhX2RtYSk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl9yeC0+ZGVzYywgNSwgd29yZCk7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgUlhEX1cwX09XTkVSX05JQywgMSk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUocnhkLCAwLCB3b3JkKTsKKwlydDJ4MDBfZGVzY193cml0ZShwcml2X3J4LT5kZXNjLCAwLCB3b3JkKTsKIH0KIAogc3RhdGljIHZvaWQgcnQ2MXBjaV9pbml0X3R4ZW50cnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgc3RydWN0IGRhdGFfZW50cnkgKmVudHJ5KQorCQkJCSBzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCV9fbGUzMiAqdHhkID0gZW50cnktPnByaXY7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4ID0gZW50cnktPnByaXZfZGF0YTsKIAl1MzIgd29yZDsKIAotCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAxLCAmd29yZCk7CisJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCAxLCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQlVGRkVSX0NPVU5ULCAxKTsKLQlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDEsIHdvcmQpOworCXJ0MngwMF9kZXNjX3dyaXRlKHByaXZfdHgtPmRlc2MsIDEsIHdvcmQpOwogCi0JcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDUsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XNV9QSURfVFlQRSwgZW50cnktPnJpbmctPnF1ZXVlX2lkeCk7CisJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCA1LCAmd29yZCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzVfUElEX1RZUEUsIGVudHJ5LT5xdWV1ZS0+cWlkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XNV9QSURfU1VCVFlQRSwgZW50cnktPmVudHJ5X2lkeCk7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCA1LCB3b3JkKTsKKwlydDJ4MDBfZGVzY193cml0ZShwcml2X3R4LT5kZXNjLCA1LCB3b3JkKTsKIAotCXJ0MngwMF9kZXNjX3JlYWQodHhkLCA2LCAmd29yZCk7CisJcnQyeDAwX2Rlc2NfcmVhZChwcml2X3R4LT5kZXNjLCA2LCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzZfQlVGRkVSX1BIWVNJQ0FMX0FERFJFU1MsCi0JCQkgICBlbnRyeS0+ZGF0YV9kbWEpOwotCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgNiwgd29yZCk7CisJCQkgICBwcml2X3R4LT5kYXRhX2RtYSk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgNiwgd29yZCk7CiAKLQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMCwgJndvcmQpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl90eC0+ZGVzYywgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1ZBTElELCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9PV05FUl9OSUMsIDApOwotCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMCwgd29yZCk7CisJcnQyeDAwX2Rlc2Nfd3JpdGUocHJpdl90eC0+ZGVzYywgMCwgd29yZCk7CiB9CiAKLXN0YXRpYyBpbnQgcnQ2MXBjaV9pbml0X3JpbmdzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgaW50IHJ0NjFwY2lfaW5pdF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfcnggKnByaXZfcng7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4OwogCXUzMiByZWc7CiAKIAkvKgpAQCAtMTA0MCw1OSArMTA2OCw1NSBAQAogCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfUklOR19DU1IwLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUklOR19DU1IwX0FDMF9SSU5HX1NJWkUsCi0JCQkgICBydDJ4MDBkZXYtPnR4W0lFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMF0uc3RhdHMubGltaXQpOworCQkJICAgcnQyeDAwZGV2LT50eFswXS5saW1pdCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1JJTkdfQ1NSMF9BQzFfUklOR19TSVpFLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTFdLnN0YXRzLmxpbWl0KTsKKwkJCSAgIHJ0MngwMGRldi0+dHhbMV0ubGltaXQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9SSU5HX0NTUjBfQUMyX1JJTkdfU0laRSwKLQkJCSAgIHJ0MngwMGRldi0+dHhbSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEyXS5zdGF0cy5saW1pdCk7CisJCQkgICBydDJ4MDBkZXYtPnR4WzJdLmxpbWl0KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUklOR19DU1IwX0FDM19SSU5HX1NJWkUsCi0JCQkgICBydDJ4MDBkZXYtPnR4W0lFRUU4MDIxMV9UWF9RVUVVRV9EQVRBM10uc3RhdHMubGltaXQpOworCQkJICAgcnQyeDAwZGV2LT50eFszXS5saW1pdCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfUklOR19DU1IwLCByZWcpOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9SSU5HX0NTUjEsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9SSU5HX0NTUjFfTUdNVF9SSU5HX1NJWkUsCi0JCQkgICBydDJ4MDBkZXYtPnR4W0lFRUU4MDIxMV9UWF9RVUVVRV9EQVRBNF0uc3RhdHMubGltaXQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9SSU5HX0NTUjFfVFhEX1NJWkUsCi0JCQkgICBydDJ4MDBkZXYtPnR4W0lFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMF0uZGVzY19zaXplIC8KLQkJCSAgIDQpOworCQkJICAgcnQyeDAwZGV2LT50eFswXS5kZXNjX3NpemUgLyA0KTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9SSU5HX0NTUjEsIHJlZyk7CiAKKwlwcml2X3R4ID0gcnQyeDAwZGV2LT50eFswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDMF9CQVNFX0NTUiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEFDMF9CQVNFX0NTUl9SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTBdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQzBfQkFTRV9DU1IsIHJlZyk7CiAKKwlwcml2X3R4ID0gcnQyeDAwZGV2LT50eFsxXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDMV9CQVNFX0NTUiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEFDMV9CQVNFX0NTUl9SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTFdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQzFfQkFTRV9DU1IsIHJlZyk7CiAKKwlwcml2X3R4ID0gcnQyeDAwZGV2LT50eFsyXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDMl9CQVNFX0NTUiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEFDMl9CQVNFX0NTUl9SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTJdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQzJfQkFTRV9DU1IsIHJlZyk7CiAKKwlwcml2X3R4ID0gcnQyeDAwZGV2LT50eFszXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDM19CQVNFX0NTUiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEFDM19CQVNFX0NTUl9SSU5HX1JFR0lTVEVSLAotCQkJICAgcnQyeDAwZGV2LT50eFtJRUVFODAyMTFfVFhfUVVFVUVfREFUQTNdLmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfdHgtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQzNfQkFTRV9DU1IsIHJlZyk7CiAKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1HTVRfQkFTRV9DU1IsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNR01UX0JBU0VfQ1NSX1JJTkdfUkVHSVNURVIsCi0JCQkgICBydDJ4MDBkZXYtPnR4W0lFRUU4MDIxMV9UWF9RVUVVRV9EQVRBNF0uZGF0YV9kbWEpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1HTVRfQkFTRV9DU1IsIHJlZyk7Ci0KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYX1JJTkdfQ1NSLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfUklOR19DU1JfUklOR19TSVpFLAotCQkJICAgcnQyeDAwZGV2LT5yeC0+c3RhdHMubGltaXQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWF9SSU5HX0NTUl9SSU5HX1NJWkUsIHJ0MngwMGRldi0+cngtPmxpbWl0KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfUklOR19DU1JfUlhEX1NJWkUsCiAJCQkgICBydDJ4MDBkZXYtPnJ4LT5kZXNjX3NpemUgLyA0KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfUklOR19DU1JfUlhEX1dSSVRFQkFDS19TSVpFLCA0KTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9SSU5HX0NTUiwgcmVnKTsKIAorCXByaXZfcnggPSBydDJ4MDBkZXYtPnJ4LT5lbnRyaWVzWzBdLnByaXZfZGF0YTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYX0JBU0VfQ1NSLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfQkFTRV9DU1JfUklOR19SRUdJU1RFUiwKLQkJCSAgIHJ0MngwMGRldi0+cngtPmRhdGFfZG1hKTsKKwkJCSAgIHByaXZfcngtPmRlc2NfZG1hKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9CQVNFX0NTUiwgcmVnKTsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfRE1BX0RTVF9DU1IsICZyZWcpOwpAQCAtMTEwMCw3ICsxMTI0LDYgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfRE1BX0RTVF9DU1JfREVTVF9BQzEsIDIpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9ETUFfRFNUX0NTUl9ERVNUX0FDMiwgMik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0RNQV9EU1RfQ1NSX0RFU1RfQUMzLCAyKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfRE1BX0RTVF9DU1JfREVTVF9NR01ULCAwKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9ETUFfRFNUX0NTUiwgcmVnKTsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTE9BRF9UWF9SSU5HX0NTUiwgJnJlZyk7CkBAIC0xMTA4LDcgKzExMzEsNiBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMT0FEX1RYX1JJTkdfQ1NSX0xPQURfVFhEX0FDMSwgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExPQURfVFhfUklOR19DU1JfTE9BRF9UWERfQUMyLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTE9BRF9UWF9SSU5HX0NTUl9MT0FEX1RYRF9BQzMsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMT0FEX1RYX1JJTkdfQ1NSX0xPQURfVFhEX01HTVQsIDEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIExPQURfVFhfUklOR19DU1IsIHJlZyk7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYX0NOVExfQ1NSLCAmcmVnKTsKQEAgLTEyMjQsNiArMTI0NiwxNyBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgcmVnKTsKIAogCS8qCisJICogQ2xlYXIgYWxsIGJlYWNvbnMKKwkgKiBGb3IgdGhlIEJlYWNvbiBiYXNlIHJlZ2lzdGVycyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIKKwkgKiB0aGUgZmlyc3QgYnl0ZSBzaW5jZSB0aGF0IGJ5dGUgY29udGFpbnMgdGhlIFZBTElEIGFuZCBPV05FUgorCSAqIGJpdHMgd2hpY2ggKHdoZW4gc2V0IHRvIDApIHdpbGwgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGJlYWNvbi4KKwkgKi8KKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTAsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMSwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0UyLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTMsIDApOworCisJLyoKIAkgKiBXZSBtdXN0IGNsZWFyIHRoZSBlcnJvciBjb3VudGVycy4KIAkgKiBUaGVzZSByZWdpc3RlcnMgYXJlIGNsZWFyZWQgb24gcmVhZCwKIAkgKiBzbyB3ZSBtYXkgcGFzcyBhIHVzZWxlc3MgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlLgpAQCAtMTI5NiwxOSArMTMyOSwxNSBAQAogCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTAyLCAweDE2KTsKIAlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEwNywgMHgwNCk7CiAKLQlERUJVRyhydDJ4MDBkZXYsICJTdGFydCBpbml0aWFsaXphdGlvbiBmcm9tIEVFUFJPTS4uLlxuIik7CiAJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9CQlBfU0laRTsgaSsrKSB7CiAJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9CQlBfU1RBUlQgKyBpLCAmZWVwcm9tKTsKIAogCQlpZiAoZWVwcm9tICE9IDB4ZmZmZiAmJiBlZXByb20gIT0gMHgwMDAwKSB7CiAJCQlyZWdfaWQgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQkJQX1JFR19JRCk7CiAJCQl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9CQlBfVkFMVUUpOwotCQkJREVCVUcocnQyeDAwZGV2LCAiQkJQOiAweCUwMngsIHZhbHVlOiAweCUwMnguXG4iLAotCQkJICAgICAgcmVnX2lkLCB2YWx1ZSk7CiAJCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIHJlZ19pZCwgdmFsdWUpOwogCQl9CiAJfQotCURFQlVHKHJ0MngwMGRldiwgIi4uLkVuZCBpbml0aWFsaXphdGlvbiBmcm9tIEVFUFJPTS5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzc1LDcgKzE0MDQsNyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzLgogCSAqLwotCWlmIChydDYxcGNpX2luaXRfcmluZ3MocnQyeDAwZGV2KSB8fAorCWlmIChydDYxcGNpX2luaXRfcXVldWVzKHJ0MngwMGRldikgfHwKIAkgICAgcnQ2MXBjaV9pbml0X3JlZ2lzdGVycyhydDJ4MDBkZXYpIHx8CiAJICAgIHJ0NjFwY2lfaW5pdF9iYnAocnQyeDAwZGV2KSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJSZWdpc3RlciBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKQEAgLTEzOTQsMTEgKzE0MjMsNiBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWF9DTlRMX0NTUl9FTkFCTEVfUlhfRE1BLCAxKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9DTlRMX0NTUiwgcmVnKTsKIAotCS8qCi0JICogRW5hYmxlIExFRAotCSAqLwotCXJ0NjFwY2lfZW5hYmxlX2xlZChydDJ4MDBkZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MDYsMTEgKzE0MzAsNiBAQAogewogCXUzMiByZWc7CiAKLQkvKgotCSAqIERpc2FibGUgTEVECi0JICovCi0JcnQ2MXBjaV9kaXNhYmxlX2xlZChydDJ4MDBkZXYpOwotCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjEwLCAweDAwMDAxODE4KTsKIAogCS8qCkBAIC0xNDI2LDcgKzE0NDUsNiBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzEsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzIsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzMsIDEpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9NR01ULCAxKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKIAogCS8qCkBAIC0xNDgyLDggKzE1MDAsMTIgQEAKIAkJcnQ2MXBjaV9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fUlhfT046CisJY2FzZSBTVEFURV9SQURJT19SWF9PTl9MSU5LOgorCQlydDYxcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKKwkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19SWF9PRkY6Ci0JCXJ0NjFwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOworCWNhc2UgU1RBVEVfUkFESU9fUlhfT0ZGX0xJTks6CisJCXJ0NjFwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9ERUVQX1NMRUVQOgogCWNhc2UgU1RBVEVfU0xFRVA6CkBAIC0xNTA0LDEwICsxNTI2LDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ0NjFwY2lfd3JpdGVfdHhfZGVzYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBzdHJ1Y3QgdHhkYXRhX2VudHJ5X2Rlc2MgKmRlc2MsCisJCQkJICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQogewotCXN0cnVjdCBza2JfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZGVzYyhza2IpOworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwogCV9fbGUzMiAqdHhkID0gc2tiZGVzYy0+ZGVzYzsKIAl1MzIgd29yZDsKIApAQCAtMTUxNSw1MCArMTUzNyw1MiBAQAogCSAqIFN0YXJ0IHdyaXRpbmcgdGhlIGRlc2NyaXB0b3Igd29yZHMuCiAJICovCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDEsICZ3b3JkKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9IT1NUX1FfSUQsIGRlc2MtPnF1ZXVlKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9BSUZTTiwgZGVzYy0+YWlmcyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQ1dNSU4sIGRlc2MtPmN3X21pbik7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQ1dNQVgsIGRlc2MtPmN3X21heCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSE9TVF9RX0lELCB0eGRlc2MtPnF1ZXVlKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9BSUZTTiwgdHhkZXNjLT5haWZzKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01JTiwgdHhkZXNjLT5jd19taW4pOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUFYLCB0eGRlc2MtPmN3X21heCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSVZfT0ZGU0VULCBJRUVFODAyMTFfSEVBREVSKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9IV19TRVFVRU5DRSwgMSk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAxLCB3b3JkKTsKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAyLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9TSUdOQUwsIGRlc2MtPnNpZ25hbCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9TRVJWSUNFLCBkZXNjLT5zZXJ2aWNlKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX0xFTkdUSF9MT1csIGRlc2MtPmxlbmd0aF9sb3cpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfTEVOR1RIX0hJR0gsIGRlc2MtPmxlbmd0aF9oaWdoKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX1NJR05BTCwgdHhkZXNjLT5zaWduYWwpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfU0VSVklDRSwgdHhkZXNjLT5zZXJ2aWNlKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX0xFTkdUSF9MT1csIHR4ZGVzYy0+bGVuZ3RoX2xvdyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9MRU5HVEhfSElHSCwgdHhkZXNjLT5sZW5ndGhfaGlnaCk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAyLCB3b3JkKTsKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCA1LCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzVfVFhfUE9XRVIsCi0JCQkgICBUWFBPV0VSX1RPX0RFVihjb250cm9sLT5wb3dlcl9sZXZlbCkpOworCQkJICAgVFhQT1dFUl9UT19ERVYocnQyeDAwZGV2LT50eF9wb3dlcikpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1c1X1dBSVRJTkdfRE1BX0RPTkVfSU5ULCAxKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDUsIHdvcmQpOwogCi0JcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDExLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzExX0JVRkZFUl9MRU5HVEgwLCBza2JkZXNjLT5kYXRhX2xlbik7Ci0JcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAxMSwgd29yZCk7CisJaWYgKHNrYmRlc2MtPmRlc2NfbGVuID4gVFhJTkZPX1NJWkUpIHsKKwkJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDExLCAmd29yZCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxMV9CVUZGRVJfTEVOR1RIMCwgc2tiZGVzYy0+ZGF0YV9sZW4pOworCQlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDExLCB3b3JkKTsKKwl9CiAKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMCwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09XTkVSX05JQywgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVkFMSUQsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX01PUkVfRlJBRywKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9NT1JFX0ZSQUcsICZkZXNjLT5mbGFncykpOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX01PUkVfRlJBRywgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9BQ0ssCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQUNLLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9BQ0ssICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZkZXNjLT5mbGFncykpOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZkZXNjLT5mbGFncykpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgZGVzYy0+aWZzKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfSUZTLCB0eGRlc2MtPmlmcyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfUkVUUllfTU9ERSwKIAkJCSAgICEhKGNvbnRyb2wtPmZsYWdzICYKIAkJCSAgICAgIElFRUU4MDIxMV9UWENUTF9MT05HX1JFVFJZX0xJTUlUKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVEtJUF9NSUMsIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0RBVEFCWVRFX0NPVU5ULCBza2JkZXNjLT5kYXRhX2xlbik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQlVSU1QsCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQlVSU1QsICZkZXNjLT5mbGFncykpOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0JVUlNULCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0NJUEhFUl9BTEcsIENJUEhFUl9OT05FKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDAsIHdvcmQpOwogfQpAQCAtMTU2NywxMSArMTU5MSwxMSBAQAogICogVFggZGF0YSBpbml0aWFsaXphdGlvbgogICovCiBzdGF0aWMgdm9pZCBydDYxcGNpX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgIHVuc2lnbmVkIGludCBxdWV1ZSkKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCBxdWV1ZSkKIHsKIAl1MzIgcmVnOwogCi0JaWYgKHF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04pIHsKKwlpZiAocXVldWUgPT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04pIHsKIAkJLyoKIAkJICogRm9yIFdpLUZpIGZhaWx5IGdlbmVyYXRlZCBiZWFjb25zIGJldHdlZW4gcGFydGljaXBhdGluZwogCQkgKiBzdGF0aW9ucy4gU2V0IFRCVFQgcGhhc2UgYWRhcHRpdmUgYWRqdXN0bWVudCBzdGVwIHRvIDh1cy4KQEAgLTE1ODAsNiArMTYwNCw4IEBACiAKIAkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjksICZyZWcpOwogCQlpZiAoIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOKSkgeworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMSk7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLCAxKTsKIAkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfQkVBQ09OX0dFTiwgMSk7CiAJCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiAJCX0KQEAgLTE1OTUsOCArMTYyMSw2IEBACiAJCQkgICAocXVldWUgPT0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEyKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0tJQ0tfVFhfQUMzLAogCQkJICAgKHF1ZXVlID09IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMykpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9LSUNLX1RYX01HTVQsCi0JCQkgICAocXVldWUgPT0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEE0KSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CiB9CiAKQEAgLTE2MjQsNyArMTY0OCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5waHltb2RlID09IE1PREVfSUVFRTgwMjExQSkgeworCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQkJb2Zmc2V0ICs9IDE0OwogCkBAIC0xNjQ0LDI4ICsxNjY4LDM1IEBACiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyeGRfdzEsIFJYRF9XMV9SU1NJX0FHQykgKiAyIC0gb2Zmc2V0OwogfQogCi1zdGF0aWMgdm9pZCBydDYxcGNpX2ZpbGxfcnhkb25lKHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSwKLQkJCSAgICAgICAgc3RydWN0IHJ4ZGF0YV9lbnRyeV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgcnQ2MXBjaV9maWxsX3J4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJICAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlfX2xlMzIgKnJ4ZCA9IGVudHJ5LT5wcml2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaV9yeCAqcHJpdl9yeCA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIHdvcmQwOwogCXUzMiB3b3JkMTsKIAotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmd29yZDApOwotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAxLCAmd29yZDEpOworCXJ0MngwMF9kZXNjX3JlYWQocHJpdl9yeC0+ZGVzYywgMCwgJndvcmQwKTsKKwlydDJ4MDBfZGVzY19yZWFkKHByaXZfcngtPmRlc2MsIDEsICZ3b3JkMSk7CiAKLQlkZXNjLT5mbGFncyA9IDA7CisJcnhkZXNjLT5mbGFncyA9IDA7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0NSQ19FUlJPUikpCi0JCWRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CisJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKIAogCS8qCiAJICogT2J0YWluIHRoZSBzdGF0dXMgYWJvdXQgdGhpcyBwYWNrZXQuCisJICogV2hlbiBmcmFtZSB3YXMgcmVjZWl2ZWQgd2l0aCBhbiBPRkRNIGJpdHJhdGUsCisJICogdGhlIHNpZ25hbCBpcyB0aGUgUExDUCB2YWx1ZS4gSWYgaXQgd2FzIHJlY2VpdmVkIHdpdGgKKwkgKiBhIENDSyBiaXRyYXRlIHRoZSBzaWduYWwgaXMgdGhlIHJhdGUgaW4gMTAwa2JpdC9zLgogCSAqLwotCWRlc2MtPnNpZ25hbCA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMSwgUlhEX1cxX1NJR05BTCk7Ci0JZGVzYy0+cnNzaSA9IHJ0NjFwY2lfYWdjX3RvX3Jzc2koZW50cnktPnJpbmctPnJ0MngwMGRldiwgd29yZDEpOwotCWRlc2MtPm9mZG0gPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9PRkRNKTsKLQlkZXNjLT5zaXplID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfREFUQUJZVEVfQ09VTlQpOwotCWRlc2MtPm15X2JzcyA9ICEhcnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfTVlfQlNTKTsKKwlyeGRlc2MtPnNpZ25hbCA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMSwgUlhEX1cxX1NJR05BTCk7CisJcnhkZXNjLT5yc3NpID0gcnQ2MXBjaV9hZ2NfdG9fcnNzaShlbnRyeS0+cXVldWUtPnJ0MngwMGRldiwgd29yZDEpOworCXJ4ZGVzYy0+c2l6ZSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX0RBVEFCWVRFX0NPVU5UKTsKKworCXJ4ZGVzYy0+ZGV2X2ZsYWdzID0gMDsKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfT0ZETSkpCisJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9TSUdOQUxfUExDUDsKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfTVlfQlNTKSkKKwkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX01ZX0JTUzsKIH0KIAogLyoKQEAgLTE2NzMsMTcgKzE3MDQsMTYgQEAKICAqLwogc3RhdGljIHZvaWQgcnQ2MXBjaV90eGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOwotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnlfZG9uZTsKLQlfX2xlMzIgKnR4ZDsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5X2RvbmU7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3R4ICpwcml2X3R4OworCXN0cnVjdCB0eGRvbmVfZW50cnlfZGVzYyB0eGRlc2M7CiAJdTMyIHdvcmQ7CiAJdTMyIHJlZzsKIAl1MzIgb2xkX3JlZzsKIAlpbnQgdHlwZTsKIAlpbnQgaW5kZXg7Ci0JaW50IHR4X3N0YXR1czsKLQlpbnQgcmV0cnk7CiAKIAkvKgogCSAqIER1cmluZyBlYWNoIGxvb3Agd2Ugd2lsbCBjb21wYXJlIHRoZSBmcmVzaGx5IHJlYWQKQEAgLTE3MDYsMTEgKzE3MzYsMTEgQEAKIAogCQkvKgogCQkgKiBTa2lwIHRoaXMgZW50cnkgd2hlbiBpdCBjb250YWlucyBhbiBpbnZhbGlkCi0JCSAqIHJpbmcgaWRlbnRpY2F0aW9uIG51bWJlci4KKwkJICogcXVldWUgaWRlbnRpY2F0aW9uIG51bWJlci4KIAkJICovCiAJCXR5cGUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSNF9QSURfVFlQRSk7Ci0JCXJpbmcgPSBydDJ4MDBsaWJfZ2V0X3JpbmcocnQyeDAwZGV2LCB0eXBlKTsKLQkJaWYgKHVubGlrZWx5KCFyaW5nKSkKKwkJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCB0eXBlKTsKKwkJaWYgKHVubGlrZWx5KCFxdWV1ZSkpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAtMTcxOCwzNiArMTc0OCw0MCBAQAogCQkgKiBpbmRleCBudW1iZXIuCiAJCSAqLwogCQlpbmRleCA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFNUQV9DU1I0X1BJRF9TVUJUWVBFKTsKLQkJaWYgKHVubGlrZWx5KGluZGV4ID49IHJpbmctPnN0YXRzLmxpbWl0KSkKKwkJaWYgKHVubGlrZWx5KGluZGV4ID49IHF1ZXVlLT5saW1pdCkpCiAJCQljb250aW51ZTsKIAotCQllbnRyeSA9ICZyaW5nLT5lbnRyeVtpbmRleF07Ci0JCXR4ZCA9IGVudHJ5LT5wcml2OwotCQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMCwgJndvcmQpOworCQllbnRyeSA9ICZxdWV1ZS0+ZW50cmllc1tpbmRleF07CisJCXByaXZfdHggPSBlbnRyeS0+cHJpdl9kYXRhOworCQlydDJ4MDBfZGVzY19yZWFkKHByaXZfdHgtPmRlc2MsIDAsICZ3b3JkKTsKIAogCQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9PV05FUl9OSUMpIHx8CiAJCSAgICAhcnQyeDAwX2dldF9maWVsZDMyKHdvcmQsIFRYRF9XMF9WQUxJRCkpCiAJCQlyZXR1cm47CiAKLQkJZW50cnlfZG9uZSA9IHJ0MngwMF9nZXRfZGF0YV9lbnRyeV9kb25lKHJpbmcpOworCQllbnRyeV9kb25lID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpOwogCQl3aGlsZSAoZW50cnkgIT0gZW50cnlfZG9uZSkgewotCQkJLyogQ2F0Y2ggdXAuIEp1c3QgcmVwb3J0IGFueSBlbnRyaWVzIHdlIG1pc3NlZCBhcwotCQkJICogZmFpbGVkLiAqLworCQkJLyogQ2F0Y2ggdXAuCisJCQkgKiBKdXN0IHJlcG9ydCBhbnkgZW50cmllcyB3ZSBtaXNzZWQgYXMgZmFpbGVkLgorCQkJICovCiAJCQlXQVJOSU5HKHJ0MngwMGRldiwKLQkJCQkiVFggc3RhdHVzIHJlcG9ydCBtaXNzZWQgZm9yIGVudHJ5ICVwXG4iLAotCQkJCWVudHJ5X2RvbmUpOwotCQkJcnQyeDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIGVudHJ5X2RvbmUsIFRYX0ZBSUxfT1RIRVIsCi0JCQkJCSAwKTsKLQkJCWVudHJ5X2RvbmUgPSBydDJ4MDBfZ2V0X2RhdGFfZW50cnlfZG9uZShyaW5nKTsKKwkJCQkiVFggc3RhdHVzIHJlcG9ydCBtaXNzZWQgZm9yIGVudHJ5ICVkXG4iLAorCQkJCWVudHJ5X2RvbmUtPmVudHJ5X2lkeCk7CisKKwkJCXR4ZGVzYy5zdGF0dXMgPSBUWF9GQUlMX09USEVSOworCQkJdHhkZXNjLnJldHJ5ID0gMDsKKworCQkJcnQyeDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIGVudHJ5X2RvbmUsICZ0eGRlc2MpOworCQkJZW50cnlfZG9uZSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FKTsKIAkJfQogCiAJCS8qCiAJCSAqIE9idGFpbiB0aGUgc3RhdHVzIGFib3V0IHRoaXMgcGFja2V0LgogCQkgKi8KLQkJdHhfc3RhdHVzID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgU1RBX0NTUjRfVFhfUkVTVUxUKTsKLQkJcmV0cnkgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSNF9SRVRSWV9DT1VOVCk7CisJCXR4ZGVzYy5zdGF0dXMgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSNF9UWF9SRVNVTFQpOworCQl0eGRlc2MucmV0cnkgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSNF9SRVRSWV9DT1VOVCk7CiAKLQkJcnQyeDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIGVudHJ5LCB0eF9zdGF0dXMsIHJldHJ5KTsKKwkJcnQyeDAwcGNpX3R4ZG9uZShydDJ4MDBkZXYsIGVudHJ5LCAmdHhkZXNjKTsKIAl9CiB9CiAKQEAgLTE5MDIsNyArMTkzNiw3IEBACiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX1JTU0lfT0ZGU0VUX0FfMSwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX1JTU0lfT0ZGU0VUX0FfMiwgMCk7CiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fUlNTSV9PRkZTRVRfQSwgd29yZCk7Ci0JCUVFUFJPTShydDJ4MDBkZXYsICJSU1NJIE9GRlNFVCBCRzogMHglMDR4XG4iLCB3b3JkKTsKKwkJRUVQUk9NKHJ0MngwMGRldiwgIlJTU0kgT0ZGU0VUIEE6IDB4JTA0eFxuIiwgd29yZCk7CiAJfSBlbHNlIHsKIAkJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYod29yZCwgRUVQUk9NX1JTU0lfT0ZGU0VUX0FfMSk7CiAJCWlmICh2YWx1ZSA8IC0xMCB8fCB2YWx1ZSA+IDEwKQpAQCAtMjAzMSwzNSArMjA2NSw2MSBAQAogCSAqIElmIHRoZSBlZXByb20gdmFsdWUgaXMgaW52YWxpZCwKIAkgKiBzd2l0Y2ggdG8gZGVmYXVsdCBsZWQgbW9kZS4KIAkgKi8KKyNpZmRlZiBDT05GSUdfUlQ2MVBDSV9MRURTCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0xFRCwgJmVlcHJvbSk7CisJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTEVEX0xFRF9NT0RFKTsKIAotCXJ0MngwMGRldi0+bGVkX21vZGUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTEVEX0xFRF9NT0RFKTsKKwlydDJ4MDBkZXYtPmxlZF9yYWRpby5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8udHlwZSA9IExFRF9UWVBFX1JBRElPOworCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQorCSAgICBydDYxcGNpX2JyaWdodG5lc3Nfc2V0OworCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYmxpbmtfc2V0ID0KKwkgICAgcnQ2MXBjaV9ibGlua19zZXQ7CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7CiAKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX0xFRF9NT0RFLAotCQkJICAgcnQyeDAwZGV2LT5sZWRfbW9kZSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzAsCisJcnQyeDAwZGV2LT5sZWRfYXNzb2MucnQyeDAwZGV2ID0gcnQyeDAwZGV2OworCXJ0MngwMGRldi0+bGVkX2Fzc29jLnR5cGUgPSBMRURfVFlQRV9BU1NPQzsKKwlydDJ4MDBkZXYtPmxlZF9hc3NvYy5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0KKwkgICAgcnQ2MXBjaV9icmlnaHRuZXNzX3NldDsKKwlydDJ4MDBkZXYtPmxlZF9hc3NvYy5sZWRfZGV2LmJsaW5rX3NldCA9CisJICAgIHJ0NjFwY2lfYmxpbmtfc2V0OworCXJ0MngwMGRldi0+bGVkX2Fzc29jLmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1NJR05BTF9TVFJFTkdUSCkgeworCQlydDJ4MDBkZXYtPmxlZF9xdWFsLnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwkJcnQyeDAwZGV2LT5sZWRfcmFkaW8udHlwZSA9IExFRF9UWVBFX1FVQUxJVFk7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5icmlnaHRuZXNzX3NldCA9CisJCSAgICBydDYxcGNpX2JyaWdodG5lc3Nfc2V0OworCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmxlZF9kZXYuYmxpbmtfc2V0ID0KKwkJICAgIHJ0NjFwY2lfYmxpbmtfc2V0OworCQlydDJ4MDBkZXYtPmxlZF9xdWFsLmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOworCX0KKworCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfbWN1X3JlZywgTUNVX0xFRENTX0xFRF9NT0RFLCB2YWx1ZSk7CisJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfR1BJT18wLAogCQkJICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICAgRUVQUk9NX0xFRF9QT0xBUklUWV9HUElPXzApKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0dQSU9fMSwKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzEsCiAJCQkgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgICBFRVBST01fTEVEX1BPTEFSSVRZX0dQSU9fMSkpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfR1BJT18yLAorCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfbWN1X3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0dQSU9fMiwKIAkJCSAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgIEVFUFJPTV9MRURfUE9MQVJJVFlfR1BJT18yKSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzMsCisJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfR1BJT18zLAogCQkJICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICAgRUVQUk9NX0xFRF9QT0xBUklUWV9HUElPXzMpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0dQSU9fNCwKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzQsCiAJCQkgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgICBFRVBST01fTEVEX1BPTEFSSVRZX0dQSU9fNCkpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfQUNULAorCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfbWN1X3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0FDVCwKIAkJCSAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9MRURfUE9MQVJJVFlfQUNUKSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9SRUFEWV9CRywKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9SRUFEWV9CRywKIAkJCSAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgIEVFUFJPTV9MRURfUE9MQVJJVFlfUkRZX0cpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX1JFQURZX0EsCisJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfUkVBRFlfQSwKIAkJCSAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgIEVFUFJPTV9MRURfUE9MQVJJVFlfUkRZX0EpKTsKKyNlbmRpZiAvKiBDT05GSUdfUlQ2MVBDSV9MRURTICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxOTMsNyArMjI1Myw3IEBACiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSAwOwogCXJ0MngwMGRldi0+aHctPm1heF9zaWduYWwgPSBNQVhfU0lHTkFMOwogCXJ0MngwMGRldi0+aHctPm1heF9yc3NpID0gTUFYX1JYX1NTSTsKLQlydDJ4MDBkZXYtPmh3LT5xdWV1ZXMgPSA1OworCXJ0MngwMGRldi0+aHctPnF1ZXVlcyA9IDQ7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCAmcnQyeDAwZGV2X3BjaShydDJ4MDBkZXYpLT5kZXYpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHJ0MngwMGRldi0+aHcsCkBAIC0yMjEwLDggKzIyNzAsOCBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBod19tb2RlIGluZm9ybWF0aW9uLgogCSAqLwotCXNwZWMtPm51bV9tb2RlcyA9IDI7Ci0Jc3BlYy0+bnVtX3JhdGVzID0gMTI7CisJc3BlYy0+c3VwcG9ydGVkX2JhbmRzID0gU1VQUE9SVF9CQU5EXzJHSFo7CisJc3BlYy0+c3VwcG9ydGVkX3JhdGVzID0gU1VQUE9SVF9SQVRFX0NDSyB8IFNVUFBPUlRfUkFURV9PRkRNOwogCXNwZWMtPnR4X3Bvd2VyX2EgPSBOVUxMOwogCXNwZWMtPnR4X3Bvd2VyX2JnID0gdHhwb3dlcjsKIAlzcGVjLT50eF9wb3dlcl9kZWZhdWx0ID0gREVGQVVMVF9UWFBPV0VSOwpAQCAtMjIyNiw3ICsyMjg2LDcgQEAKIAogCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSB8fAogCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MzI1KSkgewotCQlzcGVjLT5udW1fbW9kZXMgPSAzOworCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19zZXEpOwogCiAJCXR4cG93ZXIgPSBydDJ4MDBfZWVwcm9tX2FkZHIocnQyeDAwZGV2LCBFRVBST01fVFhQT1dFUl9BX1NUQVJUKTsKQEAgLTIyNTgsNyArMjMxOCw3IEBACiAJcnQ2MXBjaV9wcm9iZV9od19tb2RlKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIGZpcm13YXJlCisJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCiAJICovCiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKQEAgLTIyNzMsNzAgKzIzMzMsNiBAQAogLyoKICAqIElFRUU4MDIxMSBzdGFjayBjYWxsYmFjayBmdW5jdGlvbnMuCiAgKi8KLXN0YXRpYyB2b2lkIHJ0NjFwY2lfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICAgIGludCBtY19jb3VudCwKLQkJCQkgICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQl1MzIgcmVnOwotCi0JLyoKLQkgKiBNYXNrIG9mZiBhbnkgZmxhZ3Mgd2UgYXJlIGdvaW5nIHRvIGlnbm9yZSBmcm9tCi0JICogdGhlIHRvdGFsX2ZsYWdzIGZpZWxkLgotCSAqLwotCSp0b3RhbF9mbGFncyAmPQotCSAgICBGSUZfQUxMTVVMVEkgfAotCSAgICBGSUZfRkNTRkFJTCB8Ci0JICAgIEZJRl9QTENQRkFJTCB8Ci0JICAgIEZJRl9DT05UUk9MIHwKLQkgICAgRklGX09USEVSX0JTUyB8Ci0JICAgIEZJRl9QUk9NSVNDX0lOX0JTUzsKLQotCS8qCi0JICogQXBwbHkgc29tZSBydWxlcyB0byB0aGUgZmlsdGVyczoKLQkgKiAtIFNvbWUgZmlsdGVycyBpbXBseSBkaWZmZXJlbnQgZmlsdGVycyB0byBiZSBzZXQuCi0JICogLSBTb21lIHRoaW5ncyB3ZSBjYW4ndCBmaWx0ZXIgb3V0IGF0IGFsbC4KLQkgKi8KLQlpZiAobWNfY291bnQpCi0JCSp0b3RhbF9mbGFncyB8PSBGSUZfQUxMTVVMVEk7Ci0JaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9PVEhFUl9CU1MgfHwKLQkgICAgKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQotCQkqdG90YWxfZmxhZ3MgfD0gRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUzsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHdvcmsgbGVmdCBmb3IgdXMuCi0JICovCi0JaWYgKHJ0MngwMGRldi0+cGFja2V0X2ZpbHRlciA9PSAqdG90YWxfZmxhZ3MpCi0JCXJldHVybjsKLQlydDJ4MDBkZXYtPnBhY2tldF9maWx0ZXIgPSAqdG90YWxfZmxhZ3M7Ci0KLQkvKgotCSAqIFN0YXJ0IGNvbmZpZ3VyYXRpb24gc3RlcHMuCi0JICogTm90ZSB0aGF0IHRoZSB2ZXJzaW9uIGVycm9yIHdpbGwgYWx3YXlzIGJlIGRyb3BwZWQKLQkgKiBhbmQgYnJvYWRjYXN0IGZyYW1lcyB3aWxsIGFsd2F5cyBiZSBhY2NlcHRlZCBzaW5jZQotCSAqIHRoZXJlIGlzIG5vIGZpbHRlciBmb3IgaXQgYXQgdGhpcyB0aW1lLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfQ1JDLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfRkNTRkFJTCkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9QSFlTSUNBTCwKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX1BMQ1BGQUlMKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0NPTlRST0wsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX05PVF9UT19NRSwKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX1RPX0RTLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfVkVSU0lPTl9FUlJPUiwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX01VTFRJQ0FTVCwKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0JPUkFEQ0FTVCwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0FDS19DVFMsIDEpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgcmVnKTsKLX0KLQogc3RhdGljIGludCBydDYxcGNpX3NldF9yZXRyeV9saW1pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICB1MzIgc2hvcnRfcmV0cnksIHUzMiBsb25nX3JldHJ5KQogewpAQCAtMjM2NSw2OCArMjM2MSw3MiBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NjFwY2lfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTIsIDApOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTMsIDApOwotfQotCiBzdGF0aWMgaW50IHJ0NjFwY2lfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgc2tiX2Rlc2MgKmRlc2M7Ci0Jc3RydWN0IGRhdGFfcmluZyAqcmluZzsKLQlzdHJ1Y3QgZGF0YV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYoY29udHJvbC0+dmlmKTsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CisJdW5zaWduZWQgaW50IGJlYWNvbl9iYXNlOworCXUzMiByZWc7CiAKLQkvKgotCSAqIEp1c3QgaW4gY2FzZSB0aGUgaWVlZTgwMjExIGRvZXNuJ3Qgc2V0IHRoaXMsCi0JICogYnV0IHdlIG5lZWQgdGhpcyBxdWV1ZSBzZXQgZm9yIHRoZSBkZXNjcmlwdG9yCi0JICogaW5pdGlhbGl6YXRpb24uCi0JICovCi0JY29udHJvbC0+cXVldWUgPSBJRUVFODAyMTFfVFhfUVVFVUVfQkVBQ09OOwotCXJpbmcgPSBydDJ4MDBsaWJfZ2V0X3JpbmcocnQyeDAwZGV2LCBjb250cm9sLT5xdWV1ZSk7Ci0JZW50cnkgPSBydDJ4MDBfZ2V0X2RhdGFfZW50cnkocmluZyk7CisJaWYgKHVubGlrZWx5KCFpbnRmLT5iZWFjb24pKQorCQlyZXR1cm4gLUVOT0JVRlM7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gYXBwZW5kIHRoZSBkZXNjcmlwdG9yIGluIGZyb250IG9mIHRoZQogCSAqIGJlYWNvbiBmcmFtZS4KIAkgKi8KLQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBUWERfREVTQ19TSVpFKSB7Ci0JCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgVFhEX0RFU0NfU0laRSwgMCwgR0ZQX0FUT01JQykpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemUpIHsKKwkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemUsCisJCQkJICAgICAwLCBHRlBfQVRPTUlDKSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQl9CiAJfQogCiAJLyoKIAkgKiBBZGQgdGhlIGRlc2NyaXB0b3IgaW4gZnJvbnQgb2YgdGhlIHNrYi4KIAkgKi8KLQlza2JfcHVzaChza2IsIHJpbmctPmRlc2Nfc2l6ZSk7Ci0JbWVtc2V0KHNrYi0+ZGF0YSwgMCwgcmluZy0+ZGVzY19zaXplKTsKKwlza2JfcHVzaChza2IsIGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZSk7CisJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplKTsKIAogCS8qCiAJICogRmlsbCBpbiBza2IgZGVzY3JpcHRvcgogCSAqLwotCWRlc2MgPSBnZXRfc2tiX2Rlc2Moc2tiKTsKLQlkZXNjLT5kZXNjX2xlbiA9IHJpbmctPmRlc2Nfc2l6ZTsKLQlkZXNjLT5kYXRhX2xlbiA9IHNrYi0+bGVuIC0gcmluZy0+ZGVzY19zaXplOwotCWRlc2MtPmRlc2MgPSBza2ItPmRhdGE7Ci0JZGVzYy0+ZGF0YSA9IHNrYi0+ZGF0YSArIHJpbmctPmRlc2Nfc2l6ZTsKLQlkZXNjLT5yaW5nID0gcmluZzsKLQlkZXNjLT5lbnRyeSA9IGVudHJ5OworCXNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CisJc2tiZGVzYy0+ZmxhZ3MgfD0gRlJBTUVfREVTQ19EUklWRVJfR0VORVJBVEVEOworCXNrYmRlc2MtPmRhdGEgPSBza2ItPmRhdGEgKyBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemU7CisJc2tiZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbiAtIGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKKwlza2JkZXNjLT5kZXNjID0gc2tiLT5kYXRhOworCXNrYmRlc2MtPmRlc2NfbGVuID0gaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOworCXNrYmRlc2MtPmVudHJ5ID0gaW50Zi0+YmVhY29uOwogCisJLyoKKwkgKiBEaXNhYmxlIGJlYWNvbmluZyB3aGlsZSB3ZSBhcmUgcmVsb2FkaW5nIHRoZSBiZWFjb24gZGF0YSwKKwkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgorCSAqLworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9USUNLSU5HLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLCAwKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X0JFQUNPTl9HRU4sIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKKworCS8qCisJICogbWFjODAyMTEgZG9lc24ndCBwcm92aWRlIHRoZSBjb250cm9sLT5xdWV1ZSB2YXJpYWJsZQorCSAqIGZvciBiZWFjb25zLiBTZXQgb3VyIG93biBxdWV1ZSBpZGVudGlmaWNhdGlvbiBzbworCSAqIGl0IGNhbiBiZSB1c2VkIGR1cmluZyBkZXNjcmlwdG9yIGluaXRpYWxpemF0aW9uLgorCSAqLworCWNvbnRyb2wtPnF1ZXVlID0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT047CiAJcnQyeDAwbGliX3dyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBza2IsIGNvbnRyb2wpOwogCiAJLyoKIAkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciB0byByZWdpc3RlciwKIAkgKiBhbmQga2ljayB0aGUgYmVhY29uIGdlbmVyYXRvci4KIAkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFMCwKKwliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoaW50Zi0+YmVhY29uLT5lbnRyeV9pZHgpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UsCiAJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JcnQ2MXBjaV9raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTik7CisJcnQ2MXBjaV9raWNrX3R4X3F1ZXVlKHJ0MngwMGRldiwgY29udHJvbC0+cXVldWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDM5LDE0ICsyNDM5LDEzIEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydDJ4MDBtYWNfY29uZmlnLAogCS5jb25maWdfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX2NvbmZpZ19pbnRlcmZhY2UsCi0JLmNvbmZpZ3VyZV9maWx0ZXIJPSBydDYxcGNpX2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlciwKIAkuZ2V0X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfc3RhdHMsCiAJLnNldF9yZXRyeV9saW1pdAk9IHJ0NjFwY2lfc2V0X3JldHJ5X2xpbWl0LAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0NjFwY2lfZ2V0X3RzZiwKLQkucmVzZXRfdHNmCQk9IHJ0NjFwY2lfcmVzZXRfdHNmLAogCS5iZWFjb25fdXBkYXRlCQk9IHJ0NjFwY2lfYmVhY29uX3VwZGF0ZSwKIH07CiAKQEAgLTI0NTQsNiArMjQ1Myw3IEBACiAJLmlycV9oYW5kbGVyCQk9IHJ0NjFwY2lfaW50ZXJydXB0LAogCS5wcm9iZV9odwkJPSBydDYxcGNpX3Byb2JlX2h3LAogCS5nZXRfZmlybXdhcmVfbmFtZQk9IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX25hbWUsCisJLmdldF9maXJtd2FyZV9jcmMJPSBydDYxcGNpX2dldF9maXJtd2FyZV9jcmMsCiAJLmxvYWRfZmlybXdhcmUJCT0gcnQ2MXBjaV9sb2FkX2Zpcm13YXJlLAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHBjaV9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX3VuaW5pdGlhbGl6ZSwKQEAgLTI0NjgsMTkgKzI0NjgsNDIgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkua2lja190eF9xdWV1ZQkJPSBydDYxcGNpX2tpY2tfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0NjFwY2lfZmlsbF9yeGRvbmUsCi0JLmNvbmZpZ19tYWNfYWRkcgk9IHJ0NjFwY2lfY29uZmlnX21hY19hZGRyLAotCS5jb25maWdfYnNzaWQJCT0gcnQ2MXBjaV9jb25maWdfYnNzaWQsCi0JLmNvbmZpZ190eXBlCQk9IHJ0NjFwY2lfY29uZmlnX3R5cGUsCi0JLmNvbmZpZ19wcmVhbWJsZQk9IHJ0NjFwY2lfY29uZmlnX3ByZWFtYmxlLAorCS5jb25maWdfZmlsdGVyCQk9IHJ0NjFwY2lfY29uZmlnX2ZpbHRlciwKKwkuY29uZmlnX2ludGYJCT0gcnQ2MXBjaV9jb25maWdfaW50ZiwKKwkuY29uZmlnX2VycAkJPSBydDYxcGNpX2NvbmZpZ19lcnAsCiAJLmNvbmZpZwkJCT0gcnQ2MXBjaV9jb25maWcsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDYxcGNpX3F1ZXVlX3J4ID0geworCS5lbnRyeV9udW0JCT0gUlhfRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFJYRF9ERVNDX1NJWkUsCisJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpX3J4KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0NjFwY2lfcXVldWVfdHggPSB7CisJLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAorCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAorCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQ2MXBjaV9xdWV1ZV9iY24gPSB7CisJLmVudHJ5X251bQkJPSA0ICogQkVBQ09OX0VOVFJJRVMsCisJLmRhdGFfc2l6ZQkJPSBNR01UX0ZSQU1FX1NJWkUsCisJLmRlc2Nfc2l6ZQkJPSBUWElORk9fU0laRSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2lfdHgpLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzIHJ0NjFwY2lfb3BzID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAotCS5yeGRfc2l6ZQk9IFJYRF9ERVNDX1NJWkUsCi0JLnR4ZF9zaXplCT0gVFhEX0RFU0NfU0laRSwKKwkubWF4X3N0YV9pbnRmCT0gMSwKKwkubWF4X2FwX2ludGYJPSA0LAogCS5lZXByb21fc2l6ZQk9IEVFUFJPTV9TSVpFLAogCS5yZl9zaXplCT0gUkZfU0laRSwKKwkucngJCT0gJnJ0NjFwY2lfcXVldWVfcngsCisJLnR4CQk9ICZydDYxcGNpX3F1ZXVlX3R4LAorCS5iY24JCT0gJnJ0NjFwY2lfcXVldWVfYmNuLAogCS5saWIJCT0gJnJ0NjFwY2lfcnQyeDAwX29wcywKIAkuaHcJCT0gJnJ0NjFwY2lfbWFjODAyMTFfb3BzLAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCmluZGV4IDRjNjUyNGUuLjM1MTFiYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNjEsNyArMTYxLDkgQEAKICNkZWZpbmUgSFdfQkVBQ09OX0JBU0UxCQkJMHgyZDAwCiAjZGVmaW5lIEhXX0JFQUNPTl9CQVNFMgkJCTB4MmUwMAogI2RlZmluZSBIV19CRUFDT05fQkFTRTMJCQkweDJmMDAKLSNkZWZpbmUgSFdfQkVBQ09OX09GRlNFVAkJMHgwMTAwCisKKyNkZWZpbmUgSFdfQkVBQ09OX09GRlNFVChfX2luZGV4KSBcCisJKCBIV19CRUFDT05fQkFTRTAgKyAoX19pbmRleCAqIDB4MDEwMCkgKQogCiAvKgogICogSE9TVC1NQ1Ugc2hhcmVkIG1lbW9yeS4KQEAgLTIzNCw2ICsyMzYsMTEgQEAKIAogLyoKICAqIE1BQ19DU1IzOiBTVEEgTUFDIHJlZ2lzdGVyIDEuCisgKiBVTklDQVNUX1RPX01FX01BU0s6CisgKglVc2VkIHRvIG1hc2sgb2ZmIGJpdHMgZnJvbSBieXRlIDUgb2YgdGhlIE1BQyBhZGRyZXNzCisgKgl0byBkZXRlcm1pbmUgdGhlIFVOSUNBU1RfVE9fTUUgYml0IGZvciBSWCBmcmFtZXMuCisgKglUaGUgZnVsbCBtYXNrIGlzIGNvbXBsZW1lbnRlZCBieSBCU1NfSURfTUFTSzoKKyAqCQlNQVNLID0gQlNTX0lEX01BU0sgJiBVTklDQVNUX1RPX01FX01BU0sKICAqLwogI2RlZmluZSBNQUNfQ1NSMwkJCTB4MzAwYwogI2RlZmluZSBNQUNfQ1NSM19CWVRFNAkJCUZJRUxEMzIoMHgwMDAwMDBmZikKQEAgLTI1MSw3ICsyNTgsMTQgQEAKIAogLyoKICAqIE1BQ19DU1I1OiBCU1NJRCByZWdpc3RlciAxLgotICogQlNTX0lEX01BU0s6IDM6IG9uZSBCU1NJRCwgMDogNCBCU1NJRCwgMiBvciAxOiAyIEJTU0lELgorICogQlNTX0lEX01BU0s6CisgKglUaGlzIG1hc2sgaXMgdXNlZCB0byBtYXNrIG9mZiBiaXRzIDAgYW5kIDEgb2YgYnl0ZSA1IG9mIHRoZQorICoJQlNTSUQuIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aG9zZSBiaXRzIHdpbGwgYmUgaWdub3JlZAorICoJd2hlbiBkZXRlcm1pbmluZyB0aGUgTVlfQlNTIG9mIFJYIGZyYW1lcy4KKyAqCQkwOiAxLUJTU0lEIG1vZGUgKEJTUyBpbmRleCA9IDApCisgKgkJMTogMi1CU1NJRCBtb2RlIChCU1MgaW5kZXg6IEJ5dGU1LCBiaXQgMCkKKyAqCQkyOiAyLUJTU0lEIG1vZGUgKEJTUyBpbmRleDogYnl0ZTUsIGJpdCAxKQorICoJCTM6IDQtQlNTSUQgbW9kZSAoQlNTIGluZGV4OiBieXRlNSwgYml0IDAgLSAxKQogICovCiAjZGVmaW5lIE1BQ19DU1I1CQkJMHgzMDE0CiAjZGVmaW5lIE1BQ19DU1I1X0JZVEU0CQkJRklFTEQzMigweDAwMDAwMGZmKQpAQCAtMzkxLDcgKzQwNSw3IEBACiAjZGVmaW5lIFRYUlhfQ1NSMF9EUk9QX1RPX0RTCQlGSUVMRDMyKDB4MDAyMDAwMDApCiAjZGVmaW5lIFRYUlhfQ1NSMF9EUk9QX1ZFUlNJT05fRVJST1IJRklFTEQzMigweDAwNDAwMDAwKQogI2RlZmluZSBUWFJYX0NTUjBfRFJPUF9NVUxUSUNBU1QJRklFTEQzMigweDAwODAwMDAwKQotI2RlZmluZSBUWFJYX0NTUjBfRFJPUF9CT1JBRENBU1QJRklFTEQzMigweDAxMDAwMDAwKQorI2RlZmluZSBUWFJYX0NTUjBfRFJPUF9CUk9BRENBU1QJRklFTEQzMigweDAxMDAwMDAwKQogI2RlZmluZSBUWFJYX0NTUjBfRFJPUF9BQ0tfQ1RTCQlGSUVMRDMyKDB4MDIwMDAwMDApCiAjZGVmaW5lIFRYUlhfQ1NSMF9UWF9XSVRIT1VUX1dBSVRJTkcJRklFTEQzMigweDA0MDAwMDAwKQogCkBAIC04NjYsNyArODgwLDcgQEAKICNkZWZpbmUgVFhfQ05UTF9DU1JfQUJPUlRfVFhfTUdNVAlGSUVMRDMyKDB4MDAxMDAwMDApCiAKIC8qCi0gKiBMT0FEX1RYX1JJTkdfQ1NSOiBMb2FkIFJYIGRlCisgKiBMT0FEX1RYX1JJTkdfQ1NSOiBMb2FkIFJYIGRlc3JpcHRvcgogICovCiAjZGVmaW5lIExPQURfVFhfUklOR19DU1IJCTB4MzQzNAogI2RlZmluZSBMT0FEX1RYX1JJTkdfQ1NSX0xPQURfVFhEX0FDMAlGSUVMRDMyKDB4MDAwMDAwMDEpCkBAIC0xMTE2LDEwICsxMTMwLDEwIEBACiAjZGVmaW5lIEVFUFJPTV9NQUNfQUREUl8wCQkweDAwMDIKICNkZWZpbmUgRUVQUk9NX01BQ19BRERSX0JZVEUwCQlGSUVMRDE2KDB4MDBmZikKICNkZWZpbmUgRUVQUk9NX01BQ19BRERSX0JZVEUxCQlGSUVMRDE2KDB4ZmYwMCkKLSNkZWZpbmUgRUVQUk9NX01BQ19BRERSMQkJMHgwMDA0CisjZGVmaW5lIEVFUFJPTV9NQUNfQUREUjEJCTB4MDAwMwogI2RlZmluZSBFRVBST01fTUFDX0FERFJfQllURTIJCUZJRUxEMTYoMHgwMGZmKQogI2RlZmluZSBFRVBST01fTUFDX0FERFJfQllURTMJCUZJRUxEMTYoMHhmZjAwKQotI2RlZmluZSBFRVBST01fTUFDX0FERFJfMgkJMHgwMDA2CisjZGVmaW5lIEVFUFJPTV9NQUNfQUREUl8yCQkweDAwMDQKICNkZWZpbmUgRUVQUk9NX01BQ19BRERSX0JZVEU0CQlGSUVMRDE2KDB4MDBmZikKICNkZWZpbmUgRUVQUk9NX01BQ19BRERSX0JZVEU1CQlGSUVMRDE2KDB4ZmYwMCkKIApAQCAtMTI0Nyw2ICsxMjYxLDcgQEAKICAqIERNQSBkZXNjcmlwdG9yIGRlZmluZXMuCiAgKi8KICNkZWZpbmUgVFhEX0RFU0NfU0laRQkJCSggMTYgKiBzaXplb2YoX19sZTMyKSApCisjZGVmaW5lIFRYSU5GT19TSVpFCQkJKCA2ICogc2l6ZW9mKF9fbGUzMikgKQogI2RlZmluZSBSWERfREVTQ19TSVpFCQkJKCAxNiAqIHNpemVvZihfX2xlMzIpICkKIAogLyoKQEAgLTE0NDAsOCArMTQ1NSw4IEBACiAjZGVmaW5lIFJYRF9XMTVfUkVTRVJWRUQJCUZJRUxEMzIoMHhmZmZmZmZmZikKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBkc2NhcGUgdmFsdWUKLSAqIGFuZCBmcm9tIGRzY2FwZSB2YWx1ZSB0byByZWdpc3RlciB2YWx1ZS4KKyAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKi8KICNkZWZpbmUgTUlOX1RYUE9XRVIJMAogI2RlZmluZSBNQVhfVFhQT1dFUgkzMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKaW5kZXggNGQ1NzZhYi4uYTllZmUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjQsNiArMjQsNyBAQAogCVN1cHBvcnRlZCBjaGlwc2V0czogcnQyNTcxVyAmIHJ0MjY3MS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvY3JjLWl0dS10Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI3OCw4NSArMjc5LDE1OCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKKyNpZmRlZiBDT05GSUdfUlQ3M1VTQl9MRURTCitzdGF0aWMgdm9pZCBydDczdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkID0KKwkgICBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBydDJ4MDBfbGVkLCBsZWRfZGV2KTsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZCA9IGJyaWdodG5lc3MgIT0gTEVEX09GRjsKKwl1bnNpZ25lZCBpbnQgYV9tb2RlID0KKwkgICAgKGVuYWJsZWQgJiYgbGVkLT5ydDJ4MDBkZXYtPmN1cnJfYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKTsKKwl1bnNpZ25lZCBpbnQgYmdfbW9kZSA9CisJICAgIChlbmFibGVkICYmIGxlZC0+cnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWik7CisKKwlpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1JBRElPKSB7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmbGVkLT5ydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLAorCQkJCSAgIE1DVV9MRURDU19SQURJT19TVEFUVVMsIGVuYWJsZWQpOworCisJCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhsZWQtPnJ0MngwMGRldiwgVVNCX0xFRF9DT05UUk9MLAorCQkJCQkgICAgMCwgbGVkLT5ydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLAorCQkJCQkgICAgUkVHSVNURVJfVElNRU9VVCk7CisJfSBlbHNlIGlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfQVNTT0MpIHsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZsZWQtPnJ0MngwMGRldi0+bGVkX21jdV9yZWcsCisJCQkJICAgTUNVX0xFRENTX0xJTktfQkdfU1RBVFVTLCBiZ19tb2RlKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZsZWQtPnJ0MngwMGRldi0+bGVkX21jdV9yZWcsCisJCQkJICAgTUNVX0xFRENTX0xJTktfQV9TVEFUVVMsIGFfbW9kZSk7CisKKwkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KGxlZC0+cnQyeDAwZGV2LCBVU0JfTEVEX0NPTlRST0wsCisJCQkJCSAgICAwLCBsZWQtPnJ0MngwMGRldi0+bGVkX21jdV9yZWcsCisJCQkJCSAgICBSRUdJU1RFUl9USU1FT1VUKTsKKwl9IGVsc2UgaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9RVUFMSVRZKSB7CisJCS8qCisJCSAqIFRoZSBicmlnaHRuZXNzIGlzIGRpdmlkZWQgaW50byA2IGxldmVscyAoMCAtIDUpLAorCQkgKiB0aGlzIG1lYW5zIHdlIG5lZWQgdG8gY29udmVydCB0aGUgYnJpZ2h0bmVzcworCQkgKiBhcmd1bWVudCBpbnRvIHRoZSBtYXRjaGluZyBsZXZlbCB3aXRoaW4gdGhhdCByYW5nZS4KKwkJICovCisJCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhsZWQtPnJ0MngwMGRldiwgVVNCX0xFRF9DT05UUk9MLAorCQkJCQkgICAgYnJpZ2h0bmVzcyAvIChMRURfRlVMTCAvIDYpLAorCQkJCQkgICAgbGVkLT5ydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLAorCQkJCQkgICAgUkVHSVNURVJfVElNRU9VVCk7CisJfQorfQorCitzdGF0aWMgaW50IHJ0NzN1c2JfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vbiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQoreworCXN0cnVjdCBydDJ4MDBfbGVkICpsZWQgPQorCSAgICBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBydDJ4MDBfbGVkLCBsZWRfZGV2KTsKKwl1MzIgcmVnOworCisJcnQ3M3VzYl9yZWdpc3Rlcl9yZWFkKGxlZC0+cnQyeDAwZGV2LCBNQUNfQ1NSMTQsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTRfT05fUEVSSU9ELCAqZGVsYXlfb24pOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTRfT0ZGX1BFUklPRCwgKmRlbGF5X29mZik7CisJcnQ3M3VzYl9yZWdpc3Rlcl93cml0ZShsZWQtPnJ0MngwMGRldiwgTUFDX0NTUjE0LCByZWcpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1JUNzNVU0JfTEVEUyAqLworCiAvKgogICogQ29uZmlndXJhdGlvbiBoYW5kbGVycy4KICAqLwotc3RhdGljIHZvaWQgcnQ3M3VzYl9jb25maWdfbWFjX2FkZHIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgX19sZTMyICptYWMpCi17Ci0JdTMyIHRtcDsKLQotCXRtcCA9IGxlMzJfdG9fY3B1KG1hY1sxXSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ0bXAsIE1BQ19DU1IzX1VOSUNBU1RfVE9fTUVfTUFTSywgMHhmZik7Ci0JbWFjWzFdID0gY3B1X3RvX2xlMzIodG1wKTsKLQotCXJ0NzN1c2JfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IyLCBtYWMsCi0JCQkJICAgICgyICogc2l6ZW9mKF9fbGUzMikpKTsKLX0KLQotc3RhdGljIHZvaWQgcnQ3M3VzYl9jb25maWdfYnNzaWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgX19sZTMyICpic3NpZCkKLXsKLQl1MzIgdG1wOwotCi0JdG1wID0gbGUzMl90b19jcHUoYnNzaWRbMV0pOwotCXJ0MngwMF9zZXRfZmllbGQzMigmdG1wLCBNQUNfQ1NSNV9CU1NfSURfTUFTSywgMyk7Ci0JYnNzaWRbMV0gPSBjcHVfdG9fbGUzMih0bXApOwotCi0JcnQ3M3VzYl9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjQsIGJzc2lkLAotCQkJCSAgICAoMiAqIHNpemVvZihfX2xlMzIpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnX3R5cGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3QgaW50IHR5cGUsCi0JCQkJY29uc3QgaW50IHRzZl9zeW5jKQorc3RhdGljIHZvaWQgcnQ3M3VzYl9jb25maWdfZmlsdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzKQogewogCXUzMiByZWc7CiAKIAkvKgotCSAqIENsZWFyIGN1cnJlbnQgc3luY2hyb25pc2F0aW9uIHNldHVwLgotCSAqIEZvciB0aGUgQmVhY29uIGJhc2UgcmVnaXN0ZXJzIHdlIG9ubHkgbmVlZCB0byBjbGVhcgotCSAqIHRoZSBmaXJzdCBieXRlIHNpbmNlIHRoYXQgYnl0ZSBjb250YWlucyB0aGUgVkFMSUQgYW5kIE9XTkVSCi0JICogYml0cyB3aGljaCAod2hlbiBzZXQgdG8gMCkgd2lsbCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgYmVhY29uLgorCSAqIFN0YXJ0IGNvbmZpZ3VyYXRpb24gc3RlcHMuCisJICogTm90ZSB0aGF0IHRoZSB2ZXJzaW9uIGVycm9yIHdpbGwgYWx3YXlzIGJlIGRyb3BwZWQKKwkgKiBhbmQgYnJvYWRjYXN0IGZyYW1lcyB3aWxsIGFsd2F5cyBiZSBhY2NlcHRlZCBzaW5jZQorCSAqIHRoZXJlIGlzIG5vIGZpbHRlciBmb3IgaXQgYXQgdGhpcyB0aW1lLgogCSAqLwotCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIDApOwotCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTAsIDApOwotCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTEsIDApOwotCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTIsIDApOwotCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTMsIDApOwotCi0JLyoKLQkgKiBFbmFibGUgc3luY2hyb25pc2F0aW9uLgotCSAqLwotCXJ0NzN1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UQlRUX0VOQUJMRSwKLQkJCSAgICh0c2Zfc3luYyA9PSBUU0ZfU1lOQ19CRUFDT04pKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X0JFQUNPTl9HRU4sIDApOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVFNGX1NZTkMsIHRzZl9zeW5jKTsKLQlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOworCXJ0NzN1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0NSQywKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0ZDU0ZBSUwpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfUEhZU0lDQUwsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QTENQRkFJTCkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9DT05UUk9MLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfQ09OVFJPTCkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9OT1RfVE9fTUUsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9UT19EUywKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSAmJgorCQkJICAgIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX1ZFUlNJT05fRVJST1IsIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9NVUxUSUNBU1QsCisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9BTExNVUxUSSkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9CUk9BRENBU1QsIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9BQ0tfQ1RTLAorCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfQ09OVFJPTCkpOworCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjAsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnX3ByZWFtYmxlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICAgY29uc3QgaW50IHNob3J0X3ByZWFtYmxlLAotCQkJCSAgICAgIGNvbnN0IGludCBhY2tfdGltZW91dCwKLQkJCQkgICAgICBjb25zdCBpbnQgYWNrX2NvbnN1bWVfdGltZSkKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCisJCQkJc3RydWN0IHJ0MngwMGludGZfY29uZiAqY29uZiwKKwkJCQljb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CisJdW5zaWduZWQgaW50IGJlYWNvbl9iYXNlOwogCXUzMiByZWc7CiAKLQkvKgotCSAqIFdoZW4gaW4gYXRvbWljIGNvbnRleHQsIHJlc2NoZWR1bGUgYW5kIGxldCBydDJ4MDBsaWIKLQkgKiBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uCi0JICovCi0JaWYgKGluX2F0b21pYygpKSB7Ci0JCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT5jb25maWdfd29yayk7Ci0JCXJldHVybjsKKwlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX1RZUEUpIHsKKwkJLyoKKwkJICogQ2xlYXIgY3VycmVudCBzeW5jaHJvbmlzYXRpb24gc2V0dXAuCisJCSAqIEZvciB0aGUgQmVhY29uIGJhc2UgcmVnaXN0ZXJzIHdlIG9ubHkgbmVlZCB0byBjbGVhcgorCQkgKiB0aGUgZmlyc3QgYnl0ZSBzaW5jZSB0aGF0IGJ5dGUgY29udGFpbnMgdGhlIFZBTElEIGFuZCBPV05FUgorCQkgKiBiaXRzIHdoaWNoICh3aGVuIHNldCB0byAwKSB3aWxsIGludmFsaWRhdGUgdGhlIGVudGlyZSBiZWFjb24uCisJCSAqLworCQliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoaW50Zi0+YmVhY29uLT5lbnRyeV9pZHgpOworCQlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UsIDApOworCisJCS8qCisJCSAqIEVuYWJsZSBzeW5jaHJvbmlzYXRpb24uCisJCSAqLworCQlydDczdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjksICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9USUNLSU5HLCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfU1lOQywgY29uZi0+c3luYyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVEJUVF9FTkFCTEUsIDEpOworCQlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOwogCX0KIAorCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfTUFDKSB7CisJCXJlZyA9IGxlMzJfdG9fY3B1KGNvbmYtPm1hY1sxXSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSM19VTklDQVNUX1RPX01FX01BU0ssIDB4ZmYpOworCQljb25mLT5tYWNbMV0gPSBjcHVfdG9fbGUzMihyZWcpOworCisJCXJ0NzN1c2JfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IyLAorCQkJCQkgICAgY29uZi0+bWFjLCBzaXplb2YoY29uZi0+bWFjKSk7CisJfQorCisJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9CU1NJRCkgeworCQlyZWcgPSBsZTMyX3RvX2NwdShjb25mLT5ic3NpZFsxXSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSNV9CU1NfSURfTUFTSywgMyk7CisJCWNvbmYtPmJzc2lkWzFdID0gY3B1X3RvX2xlMzIocmVnKTsKKworCQlydDczdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSNCwKKwkJCQkJICAgIGNvbmYtPmJzc2lkLCBzaXplb2YoY29uZi0+YnNzaWQpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnX2VycChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIHN0cnVjdCBydDJ4MDBsaWJfZXJwICplcnApCit7CisJdTMyIHJlZzsKKwogCXJ0NzN1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9SWF9BQ0tfVElNRU9VVCwgYWNrX3RpbWVvdXQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfUlhfQUNLX1RJTUVPVVQsIGVycC0+YWNrX3RpbWVvdXQpOwogCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjAsIHJlZyk7CiAKIAlydDczdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjQsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjRfQVVUT1JFU1BPTkRfUFJFQU1CTEUsCi0JCQkgICAhIXNob3J0X3ByZWFtYmxlKTsKKwkJCSAgICEhZXJwLT5zaG9ydF9wcmVhbWJsZSk7CiAJcnQ3M3VzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSNCwgcmVnKTsKIH0KIApAQCAtNDQyLDI4ICs1MTYsMjIgQEAKIAljYXNlIEFOVEVOTkFfSFdfRElWRVJTSVRZOgogCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjQsIEJCUF9SNF9SWF9BTlRFTk5BX0NPTlRST0wsIDIpOwogCQl0ZW1wID0gIXRlc3RfYml0KENPTkZJR19GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5mbGFncykKLQkJICAgICAgICYmIChydDJ4MDBkZXYtPmN1cnJfaHdtb2RlICE9IEhXTU9ERV9BKTsKKwkJICAgICAgICYmIChydDJ4MDBkZXYtPmN1cnJfYmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKTsKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfRlJBTUVfRU5ELCB0ZW1wKTsKIAkJYnJlYWs7CiAJY2FzZSBBTlRFTk5BX0E6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0FOVEVOTkFfQ09OVFJPTCwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0ZSQU1FX0VORCwgMCk7Ci0JCWlmIChydDJ4MDBkZXYtPmN1cnJfaHdtb2RlID09IEhXTU9ERV9BKQorCQlpZiAocnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNzcsIEJCUF9SNzdfUlhfQU5URU5OQSwgMCk7CiAJCWVsc2UKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNzcsIEJCUF9SNzdfUlhfQU5URU5OQSwgMyk7CiAJCWJyZWFrOwotCWNhc2UgQU5URU5OQV9TV19ESVZFUlNJVFk6Ci0JCS8qCi0JCSAqIE5PVEU6IFdlIHNob3VsZCBuZXZlciBjb21lIGhlcmUgYmVjYXVzZSBydDJ4MDBsaWIgaXMKLQkJICogc3VwcG9zZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2VuZCB1cyB0aGUgY29ycmVjdCBhbnRlbm5hCi0JCSAqIGV4cGxpY2l0ZWx5LiBIb3dldmVyIHdlIGFyZSBub2cgZ29pbmcgdG8gYnVnIGFib3V0IHRoaXMuCi0JCSAqIEluc3RlYWQsIGp1c3QgZGVmYXVsdCB0byBhbnRlbm5hIEIuCi0JCSAqLwogCWNhc2UgQU5URU5OQV9COgorCWRlZmF1bHQ6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0FOVEVOTkFfQ09OVFJPTCwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0ZSQU1FX0VORCwgMCk7Ci0JCWlmIChydDJ4MDBkZXYtPmN1cnJfaHdtb2RlID09IEhXTU9ERV9BKQorCQlpZiAocnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNzcsIEJCUF9SNzdfUlhfQU5URU5OQSwgMyk7CiAJCWVsc2UKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNzcsIEJCUF9SNzdfUlhfQU5URU5OQSwgMCk7CkBAIC01MDEsMTQgKzU2OSw4IEBACiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNzcsIEJCUF9SNzdfUlhfQU5URU5OQSwgMyk7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0FOVEVOTkFfQ09OVFJPTCwgMSk7CiAJCWJyZWFrOwotCWNhc2UgQU5URU5OQV9TV19ESVZFUlNJVFk6Ci0JCS8qCi0JCSAqIE5PVEU6IFdlIHNob3VsZCBuZXZlciBjb21lIGhlcmUgYmVjYXVzZSBydDJ4MDBsaWIgaXMKLQkJICogc3VwcG9zZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2VuZCB1cyB0aGUgY29ycmVjdCBhbnRlbm5hCi0JCSAqIGV4cGxpY2l0ZWx5LiBIb3dldmVyIHdlIGFyZSBub2cgZ29pbmcgdG8gYnVnIGFib3V0IHRoaXMuCi0JCSAqIEluc3RlYWQsIGp1c3QgZGVmYXVsdCB0byBhbnRlbm5hIEIuCi0JCSAqLwogCWNhc2UgQU5URU5OQV9COgorCWRlZmF1bHQ6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNzcsIEJCUF9SNzdfUlhfQU5URU5OQSwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0FOVEVOTkFfQ09OVFJPTCwgMSk7CiAJCWJyZWFrOwpAQCAtNTU4LDcgKzYyMCwxNCBAQAogCXVuc2lnbmVkIGludCBpOwogCXUzMiByZWc7CiAKLQlpZiAocnQyeDAwZGV2LT5jdXJyX2h3bW9kZSA9PSBIV01PREVfQSkgeworCS8qCisJICogV2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSBiZWNhdXNlIHJ0MngwMGxpYiBpcyBzdXBwb3NlZAorCSAqIHRvIGNhdGNoIHRoaXMgYW5kIHNlbmQgdXMgdGhlIGNvcnJlY3QgYW50ZW5uYSBleHBsaWNpdGVseS4KKwkgKi8KKwlCVUdfT04oYW50LT5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSB8fAorCSAgICAgICBhbnQtPnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKTsKKworCWlmIChydDJ4MDBkZXYtPmN1cnJfYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CiAJCXNlbCA9IGFudGVubmFfc2VsX2E7CiAJCWxuYSA9IHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCX0gZWxzZSB7CkBAIC01NzIsMTAgKzY0MSw5IEBACiAJcnQ3M3VzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEhZX0NTUjAsICZyZWcpOwogCiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1IwX1BBX1BFX0JHLAotCQkJICAgKHJ0MngwMGRldi0+Y3Vycl9od21vZGUgPT0gSFdNT0RFX0IgfHwKLQkJCSAgICBydDJ4MDBkZXYtPmN1cnJfaHdtb2RlID09IEhXTU9ERV9HKSk7CisJCQkgICAocnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBQSFlfQ1NSMF9QQV9QRV9BLAotCQkJICAgKHJ0MngwMGRldi0+Y3Vycl9od21vZGUgPT0gSFdNT0RFX0EpKTsKKwkJCSAgIChydDJ4MDBkZXYtPmN1cnJfYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSk7CiAKIAlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEhZX0NTUjAsIHJlZyk7CiAKQEAgLTYxNyw4ICs2ODUsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBydDczdXNiX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzLAotCQkJICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQorCQkJICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAorCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfUEhZTU9ERSkKIAkJcnQ3M3VzYl9jb25maWdfcGh5bW9kZShydDJ4MDBkZXYsIGxpYmNvbmYtPmJhc2ljX3JhdGVzKTsKQEAgLTYzNCw2OCArNzAyLDYgQEAKIH0KIAogLyoKLSAqIExFRCBmdW5jdGlvbnMuCi0gKi8KLXN0YXRpYyB2b2lkIHJ0NzN1c2JfZW5hYmxlX2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXUzMiByZWc7Ci0KLQlydDczdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTQsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTRfT05fUEVSSU9ELCA3MCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxNF9PRkZfUEVSSU9ELCAzMCk7Ci0JcnQ3M3VzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxNCwgcmVnKTsKLQotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfUkFESU9fU1RBVFVTLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX0xJTktfQV9TVEFUVVMsCi0JCQkgICAocnQyeDAwZGV2LT5yeF9zdGF0dXMucGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX0xJTktfQkdfU1RBVFVTLAotCQkJICAgKHJ0MngwMGRldi0+cnhfc3RhdHVzLnBoeW1vZGUgIT0gTU9ERV9JRUVFODAyMTFBKSk7Ci0KLQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfTEVEX0NPTlRST0wsIDB4MDAwMCwKLQkJCQkgICAgcnQyeDAwZGV2LT5sZWRfcmVnLCBSRUdJU1RFUl9USU1FT1VUKTsKLX0KLQotc3RhdGljIHZvaWQgcnQ3M3VzYl9kaXNhYmxlX2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfUkFESU9fU1RBVFVTLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX0xJTktfQkdfU1RBVFVTLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX0xJTktfQV9TVEFUVVMsIDApOwotCi0JcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0xFRF9DT05UUk9MLCAweDAwMDAsCi0JCQkJICAgIHJ0MngwMGRldi0+bGVkX3JlZywgUkVHSVNURVJfVElNRU9VVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0NzN1c2JfYWN0aXZpdHlfbGVkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGludCByc3NpKQotewotCXUzMiBsZWQ7Ci0KLQlpZiAocnQyeDAwZGV2LT5sZWRfbW9kZSAhPSBMRURfTU9ERV9TSUdOQUxfU1RSRU5HVEgpCi0JCXJldHVybjsKLQotCS8qCi0JICogTGVkIGhhbmRsaW5nIHJlcXVpcmVzIGEgcG9zaXRpdmUgdmFsdWUgZm9yIHRoZSByc3NpLAotCSAqIHRvIGRvIHRoYXQgY29ycmVjdGx5IHdlIG5lZWQgdG8gYWRkIHRoZSBjb3JyZWN0aW9uLgotCSAqLwotCXJzc2kgKz0gcnQyeDAwZGV2LT5yc3NpX29mZnNldDsKLQotCWlmIChyc3NpIDw9IDMwKQotCQlsZWQgPSAwOwotCWVsc2UgaWYgKHJzc2kgPD0gMzkpCi0JCWxlZCA9IDE7Ci0JZWxzZSBpZiAocnNzaSA8PSA0OSkKLQkJbGVkID0gMjsKLQllbHNlIGlmIChyc3NpIDw9IDUzKQotCQlsZWQgPSAzOwotCWVsc2UgaWYgKHJzc2kgPD0gNjMpCi0JCWxlZCA9IDQ7Ci0JZWxzZQotCQlsZWQgPSA1OwotCi0JcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0xFRF9DT05UUk9MLCBsZWQsCi0JCQkJICAgIHJ0MngwMGRldi0+bGVkX3JlZywgUkVHSVNURVJfVElNRU9VVCk7Ci19Ci0KLS8qCiAgKiBMaW5rIHR1bmluZwogICovCiBzdGF0aWMgdm9pZCBydDczdXNiX2xpbmtfc3RhdHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTcyOSwxNyArNzM1LDEyIEBACiAJdTggdXBfYm91bmQ7CiAJdTggbG93X2JvdW5kOwogCi0JLyoKLQkgKiBVcGRhdGUgTGVkIHN0cmVuZ3RoCi0JICovCi0JcnQ3M3VzYl9hY3Rpdml0eV9sZWQocnQyeDAwZGV2LCByc3NpKTsKLQogCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7CiAKIAkvKgogCSAqIERldGVybWluZSByMTcgYm91bmRzLgogCSAqLwotCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5waHltb2RlID09IE1PREVfSUVFRTgwMjExQSkgeworCWlmIChydDJ4MDBkZXYtPnJ4X3N0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJbG93X2JvdW5kID0gMHgyODsKIAkJdXBfYm91bmQgPSAweDQ4OwogCkBAIC03NjYsNiArNzY3LDEzIEBACiAJfQogCiAJLyoKKwkgKiBJZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQsIHdlIHNob3VsZCBnbyBzdHJhaWdodCB0byB0aGUKKwkgKiBkeW5hbWljIENDQSB0dW5pbmcuCisJICovCisJaWYgKCFydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCkKKwkJZ290byBkeW5hbWljX2NjYV90dW5lOworCisJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHZlcnkgc2hvcnQgZGlzdGFuY2UKIAkgKi8KIAlpZiAocnNzaSA+IC0zNSkgewpAQCAtODE1LDYgKzgyMyw4IEBACiAJCXJldHVybjsKIAl9CiAKK2R5bmFtaWNfY2NhX3R1bmU6CisKIAkvKgogCSAqIHIxNyBkb2VzIG5vdCB5ZXQgZXhjZWVkIHVwcGVyIGxpbWl0LCBjb250aW51ZSBhbmQgYmFzZQogCSAqIHRoZSByMTcgdHVuaW5nIG9uIHRoZSBmYWxzZSBDQ0EgY291bnQuCkBAIC04MzMsMTYgKzg0MywzMCBAQAogfQogCiAvKgotICogRmlybXdhcmUgbmFtZSBmdW5jdGlvbi4KKyAqIEZpcm13YXJlIGZ1bmN0aW9ucwogICovCiBzdGF0aWMgY2hhciAqcnQ3M3VzYl9nZXRfZmlybXdhcmVfbmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXJldHVybiBGSVJNV0FSRV9SVDI1NzE7CiB9CiAKLS8qCi0gKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuCi0gKi8KK3N0YXRpYyB1MTYgcnQ3M3VzYl9nZXRfZmlybXdhcmVfY3JjKHZvaWQgKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCit7CisJdTE2IGNyYzsKKworCS8qCisJICogVXNlIHRoZSBjcmMgaXR1LXQgYWxnb3JpdGhtLgorCSAqIFRoZSBsYXN0IDIgYnl0ZXMgaW4gdGhlIGZpcm13YXJlIGFycmF5IGFyZSB0aGUgY3JjIGNoZWNrc3VtIGl0c2VsZiwKKwkgKiB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5ldmVyIHBhc3MgdGhvc2UgMiBieXRlcyB0byB0aGUgY3JjCisJICogYWxnb3JpdGhtLgorCSAqLworCWNyYyA9IGNyY19pdHVfdCgwLCBkYXRhLCBsZW4gLSAyKTsKKwljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOworCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CisKKwlyZXR1cm4gY3JjOworfQorCiBzdGF0aWMgaW50IHJ0NzN1c2JfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCB2b2lkICpkYXRhLAogCQkJCSBjb25zdCBzaXplX3QgbGVuKQogewpAQCAtODg5LDcgKzkxMyw3IEBACiAKIAkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0KHJ0MngwMGRldiwgVVNCX01VTFRJX1dSSVRFLAogCQkJCQkgVVNCX1ZFTkRPUl9SRVFVRVNUX09VVCwKLQkJCQkJIEZJUk1XQVJFX0lNQUdFX0JBU0UgKyBpLCAweDAwMDAsCisJCQkJCSBGSVJNV0FSRV9JTUFHRV9CQVNFICsgaSwgMCwKIAkJCQkJIGNhY2hlLCBidWZsZW4sIHRpbWVvdXQpOwogCiAJCXB0ciArPSBidWZsZW47CkBAIC05MDIsMTggKzkyNiwxOSBAQAogCSAqIHdlIG5lZWQgdG8gc3BlY2lmeSBhIGxvbmcgdGltZW91dCB0aW1lLgogCSAqLwogCXN0YXR1cyA9IHJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9ERVZJQ0VfTU9ERSwKLQkJCQkJICAgICAweDAwMDAsIFVTQl9NT0RFX0ZJUk1XQVJFLAorCQkJCQkgICAgIDAsIFVTQl9NT0RFX0ZJUk1XQVJFLAogCQkJCQkgICAgIFJFR0lTVEVSX1RJTUVPVVRfRklSTVdBUkUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byB3cml0ZSBGaXJtd2FyZSB0byBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKLQlydDczdXNiX2Rpc2FibGVfbGVkKHJ0MngwMGRldik7Ci0KIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KKyAqLwogc3RhdGljIGludCBydDczdXNiX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTMyIHJlZzsKQEAgLTEwMjEsNiArMTA0NiwxNyBAQAogCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSOSwgcmVnKTsKIAogCS8qCisJICogQ2xlYXIgYWxsIGJlYWNvbnMKKwkgKiBGb3IgdGhlIEJlYWNvbiBiYXNlIHJlZ2lzdGVycyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIKKwkgKiB0aGUgZmlyc3QgYnl0ZSBzaW5jZSB0aGF0IGJ5dGUgY29udGFpbnMgdGhlIFZBTElEIGFuZCBPV05FUgorCSAqIGJpdHMgd2hpY2ggKHdoZW4gc2V0IHRvIDApIHdpbGwgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGJlYWNvbi4KKwkgKi8KKwlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0UwLCAwKTsKKwlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0UxLCAwKTsKKwlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0UyLCAwKTsKKwlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSFdfQkVBQ09OX0JBU0UzLCAwKTsKKworCS8qCiAJICogV2UgbXVzdCBjbGVhciB0aGUgZXJyb3IgY291bnRlcnMuCiAJICogVGhlc2UgcmVnaXN0ZXJzIGFyZSBjbGVhcmVkIG9uIHJlYWQsCiAJICogc28gd2UgbWF5IHBhc3MgYSB1c2VsZXNzIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSB2YWx1ZS4KQEAgLTEwOTQsMTkgKzExMzAsMTUgQEAKIAlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDEwMiwgMHgxNik7CiAJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMDcsIDB4MDQpOwogCi0JREVCVUcocnQyeDAwZGV2LCAiU3RhcnQgaW5pdGlhbGl6YXRpb24gZnJvbSBFRVBST00uLi5cbiIpOwogCWZvciAoaSA9IDA7IGkgPCBFRVBST01fQkJQX1NJWkU7IGkrKykgewogCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQkJQX1NUQVJUICsgaSwgJmVlcHJvbSk7CiAKIAkJaWYgKGVlcHJvbSAhPSAweGZmZmYgJiYgZWVwcm9tICE9IDB4MDAwMCkgewogCQkJcmVnX2lkID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0JCUF9SRUdfSUQpOwogCQkJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQkJQX1ZBTFVFKTsKLQkJCURFQlVHKHJ0MngwMGRldiwgIkJCUDogMHglMDJ4LCB2YWx1ZTogMHglMDJ4LlxuIiwKLQkJCSAgICAgIHJlZ19pZCwgdmFsdWUpOwogCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCByZWdfaWQsIHZhbHVlKTsKIAkJfQogCX0KLQlERUJVRyhydDJ4MDBkZXYsICIuLi5FbmQgaW5pdGlhbGl6YXRpb24gZnJvbSBFRVBST00uXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEzNiwyMSArMTE2OCwxMSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQkvKgotCSAqIEVuYWJsZSBMRUQKLQkgKi8KLQlydDczdXNiX2VuYWJsZV9sZWQocnQyeDAwZGV2KTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBydDczdXNiX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQkvKgotCSAqIERpc2FibGUgTEVECi0JICovCi0JcnQ3M3VzYl9kaXNhYmxlX2xlZChydDJ4MDBkZXYpOwotCiAJcnQ3M3VzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMCwgMHgwMDAwMTgxOCk7CiAKIAkvKgpAQCAtMTIwOCw4ICsxMjMwLDEyIEBACiAJCXJ0NzN1c2JfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX1JYX09OOgorCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKKwkJcnQ3M3VzYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PTik7CisJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fUlhfT0ZGOgotCQlydDczdXNiX3RvZ2dsZV9yeChydDJ4MDBkZXYsIHN0YXRlKTsKKwljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgorCQlydDczdXNiX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfREVFUF9TTEVFUDoKIAljYXNlIFNUQVRFX1NMRUVQOgpAQCAtMTIzMCwxMCArMTI1NiwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBydDczdXNiX3dyaXRlX3R4X2Rlc2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgc3RydWN0IHR4ZGF0YV9lbnRyeV9kZXNjICpkZXNjLAorCQkJCSAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKIHsKLQlzdHJ1Y3Qgc2tiX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2Rlc2Moc2tiKTsKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKIAlfX2xlMzIgKnR4ZCA9IHNrYmRlc2MtPmRlc2M7CiAJdTMyIHdvcmQ7CiAKQEAgLTEyNDEsNDcgKzEyNjcsNDcgQEAKIAkgKiBTdGFydCB3cml0aW5nIHRoZSBkZXNjcmlwdG9yIHdvcmRzLgogCSAqLwogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAxLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSE9TVF9RX0lELCBkZXNjLT5xdWV1ZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQUlGU04sIGRlc2MtPmFpZnMpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUlOLCBkZXNjLT5jd19taW4pOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUFYLCBkZXNjLT5jd19tYXgpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0hPU1RfUV9JRCwgdHhkZXNjLT5xdWV1ZSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQUlGU04sIHR4ZGVzYy0+YWlmcyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQ1dNSU4sIHR4ZGVzYy0+Y3dfbWluKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01BWCwgdHhkZXNjLT5jd19tYXgpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0lWX09GRlNFVCwgSUVFRTgwMjExX0hFQURFUik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSFdfU0VRVUVOQ0UsIDEpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMSwgd29yZCk7CiAKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMiwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfU0lHTkFMLCBkZXNjLT5zaWduYWwpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfU0VSVklDRSwgZGVzYy0+c2VydmljZSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9MRU5HVEhfTE9XLCBkZXNjLT5sZW5ndGhfbG93KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX0xFTkdUSF9ISUdILCBkZXNjLT5sZW5ndGhfaGlnaCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9TSUdOQUwsIHR4ZGVzYy0+c2lnbmFsKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9QTENQX1NFUlZJQ0UsIHR4ZGVzYy0+c2VydmljZSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfUExDUF9MRU5HVEhfTE9XLCB0eGRlc2MtPmxlbmd0aF9sb3cpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX1BMQ1BfTEVOR1RIX0hJR0gsIHR4ZGVzYy0+bGVuZ3RoX2hpZ2gpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMiwgd29yZCk7CiAKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgNSwgJndvcmQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1c1X1RYX1BPV0VSLAotCQkJICAgVFhQT1dFUl9UT19ERVYoY29udHJvbC0+cG93ZXJfbGV2ZWwpKTsKKwkJCSAgIFRYUE9XRVJfVE9fREVWKHJ0MngwMGRldi0+dHhfcG93ZXIpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XNV9XQUlUSU5HX0RNQV9ET05FX0lOVCwgMSk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCA1LCB3b3JkKTsKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAwLCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQlVSU1QsCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQlVSU1QsICZkZXNjLT5mbGFncykpOworCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0JVUlNULCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1ZBTElELCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9NT1JFX0ZSQUcsCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfTU9SRV9GUkFHLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9NT1JFX0ZSQUcsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQUNLLAotCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX0FDSywgJmRlc2MtPmZsYWdzKSk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQUNLLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmZGVzYy0+ZmxhZ3MpKTsKKwkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmZGVzYy0+ZmxhZ3MpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIGRlc2MtPmlmcyk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0lGUywgdHhkZXNjLT5pZnMpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1JFVFJZX01PREUsCiAJCQkgICAhIShjb250cm9sLT5mbGFncyAmCiAJCQkgICAgICBJRUVFODAyMTFfVFhDVExfTE9OR19SRVRSWV9MSU1JVCkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RLSVBfTUlDLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9EQVRBQllURV9DT1VOVCwgc2tiZGVzYy0+ZGF0YV9sZW4pOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX0JVUlNUMiwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9CVVJTVCwgJmRlc2MtPmZsYWdzKSk7CisJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfQlVSU1QsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQ0lQSEVSX0FMRywgQ0lQSEVSX05PTkUpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMCwgd29yZCk7CiB9CkBAIC0xMzA1LDExICsxMzMxLDExIEBACiAgKiBUWCBkYXRhIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyB2b2lkIHJ0NzN1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgdW5zaWduZWQgaW50IHF1ZXVlKQorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IHF1ZXVlKQogewogCXUzMiByZWc7CiAKLQlpZiAocXVldWUgIT0gSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTikKKwlpZiAocXVldWUgIT0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT04pCiAJCXJldHVybjsKIAogCS8qCkBAIC0xMzIwLDYgKzEzNDYsOCBAQAogCiAJcnQ3M3VzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKIAlpZiAoIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOKSkgeworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9USUNLSU5HLCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UQlRUX0VOQUJMRSwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfQkVBQ09OX0dFTiwgMSk7CiAJCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiAJfQpAQCAtMTM0OSw3ICsxMzc3LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHJ0MngwMGRldi0+cnhfc3RhdHVzLnBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFBKSB7CisJaWYgKHJ0MngwMGRldi0+cnhfc3RhdHVzLmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewogCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKIAkJCWlmIChsbmEgPT0gMyB8fCBsbmEgPT0gMikKIAkJCQlvZmZzZXQgKz0gMTA7CkBAIC0xMzczLDM3ICsxNDAxLDYyIEBACiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyeGRfdzEsIFJYRF9XMV9SU1NJX0FHQykgKiAyIC0gb2Zmc2V0OwogfQogCi1zdGF0aWMgdm9pZCBydDczdXNiX2ZpbGxfcnhkb25lKHN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeSwKLQkJCSAgICAgICAgc3RydWN0IHJ4ZGF0YV9lbnRyeV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgcnQ3M3VzYl9maWxsX3J4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJICAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKLQlzdHJ1Y3Qgc2tiX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2Rlc2MoZW50cnktPnNrYik7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKGVudHJ5LT5za2IpOwogCV9fbGUzMiAqcnhkID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplICsgMjsKIAl1MzIgd29yZDA7CiAJdTMyIHdvcmQxOwogCisJLyoKKwkgKiBDb3B5IGRlc2NyaXB0b3IgdG8gdGhlIGF2YWlsYWJsZSBoZWFkcm9vbSBpbnNpZGUgdGhlIHNrYnVmZmVyLgorCSAqLworCXNrYl9wdXNoKGVudHJ5LT5za2IsIG9mZnNldCk7CisJbWVtY3B5KGVudHJ5LT5za2ItPmRhdGEsIHJ4ZCwgZW50cnktPnF1ZXVlLT5kZXNjX3NpemUpOworCXJ4ZCA9IChfX2xlMzIgKillbnRyeS0+c2tiLT5kYXRhOworCisJLyoKKwkgKiBUaGUgZGVzY3JpcHRvciBpcyBub3cgYWxpZ25lZCB0byA0IGJ5dGVzIGFuZCB0aHVzIGl0IGlzCisJICogbm93IHNhZmUgdG8gcmVhZCBpdCBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4KKwkgKi8KIAlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMCwgJndvcmQwKTsKIAlydDJ4MDBfZGVzY19yZWFkKHJ4ZCwgMSwgJndvcmQxKTsKIAotCWRlc2MtPmZsYWdzID0gMDsKKwlyeGRlc2MtPmZsYWdzID0gMDsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfQ1JDX0VSUk9SKSkKLQkJZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOwogCiAJLyoKIAkgKiBPYnRhaW4gdGhlIHN0YXR1cyBhYm91dCB0aGlzIHBhY2tldC4KKwkgKiBXaGVuIGZyYW1lIHdhcyByZWNlaXZlZCB3aXRoIGFuIE9GRE0gYml0cmF0ZSwKKwkgKiB0aGUgc2lnbmFsIGlzIHRoZSBQTENQIHZhbHVlLiBJZiBpdCB3YXMgcmVjZWl2ZWQgd2l0aAorCSAqIGEgQ0NLIGJpdHJhdGUgdGhlIHNpZ25hbCBpcyB0aGUgcmF0ZSBpbiAxMDBrYml0L3MuCiAJICovCi0JZGVzYy0+c2lnbmFsID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQxLCBSWERfVzFfU0lHTkFMKTsKLQlkZXNjLT5yc3NpID0gcnQ3M3VzYl9hZ2NfdG9fcnNzaShlbnRyeS0+cmluZy0+cnQyeDAwZGV2LCB3b3JkMSk7Ci0JZGVzYy0+b2ZkbSA9IHJ0MngwMF9nZXRfZmllbGQzMih3b3JkMCwgUlhEX1cwX09GRE0pOwotCWRlc2MtPnNpemUgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9EQVRBQllURV9DT1VOVCk7Ci0JZGVzYy0+bXlfYnNzID0gISFydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9NWV9CU1MpOworCXJ4ZGVzYy0+c2lnbmFsID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQxLCBSWERfVzFfU0lHTkFMKTsKKwlyeGRlc2MtPnJzc2kgPSBydDczdXNiX2FnY190b19yc3NpKGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LCB3b3JkMSk7CisJcnhkZXNjLT5zaXplID0gcnQyeDAwX2dldF9maWVsZDMyKHdvcmQwLCBSWERfVzBfREFUQUJZVEVfQ09VTlQpOworCisJcnhkZXNjLT5kZXZfZmxhZ3MgPSAwOworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9PRkRNKSkKKwkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX1NJR05BTF9QTENQOworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIod29yZDAsIFJYRF9XMF9NWV9CU1MpKQorCQlyeGRlc2MtPmRldl9mbGFncyB8PSBSWERPTkVfTVlfQlNTOworCisJLyoKKwkgKiBBZGp1c3QgdGhlIHNrYiBtZW1vcnkgd2luZG93IHRvIHRoZSBmcmFtZSBib3VuZGFyaWVzLgorCSAqLworCXNrYl9wdWxsKGVudHJ5LT5za2IsIG9mZnNldCArIGVudHJ5LT5xdWV1ZS0+ZGVzY19zaXplKTsKKwlza2JfdHJpbShlbnRyeS0+c2tiLCByeGRlc2MtPnNpemUpOwogCiAJLyoKIAkgKiBTZXQgZGVzY3JpcHRvciBhbmQgZGF0YSBwb2ludGVyLgogCSAqLwotCXNrYmRlc2MtPmRlc2MgPSBlbnRyeS0+c2tiLT5kYXRhOwotCXNrYmRlc2MtPmRlc2NfbGVuID0gZW50cnktPnJpbmctPmRlc2Nfc2l6ZTsKLQlza2JkZXNjLT5kYXRhID0gZW50cnktPnNrYi0+ZGF0YSArIGVudHJ5LT5yaW5nLT5kZXNjX3NpemU7Ci0Jc2tiZGVzYy0+ZGF0YV9sZW4gPSBkZXNjLT5zaXplOworCXNrYmRlc2MtPmRhdGEgPSBlbnRyeS0+c2tiLT5kYXRhOworCXNrYmRlc2MtPmRhdGFfbGVuID0gcnhkZXNjLT5zaXplOworCXNrYmRlc2MtPmRlc2MgPSByeGQ7CisJc2tiZGVzYy0+ZGVzY19sZW4gPSBlbnRyeS0+cXVldWUtPmRlc2Nfc2l6ZTsKIH0KIAogLyoKQEAgLTE0OTUsNyArMTU0OCw3IEBACiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX1JTU0lfT0ZGU0VUX0FfMSwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX1JTU0lfT0ZGU0VUX0FfMiwgMCk7CiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fUlNTSV9PRkZTRVRfQSwgd29yZCk7Ci0JCUVFUFJPTShydDJ4MDBkZXYsICJSU1NJIE9GRlNFVCBCRzogMHglMDR4XG4iLCB3b3JkKTsKKwkJRUVQUk9NKHJ0MngwMGRldiwgIlJTU0kgT0ZGU0VUIEE6IDB4JTA0eFxuIiwgd29yZCk7CiAJfSBlbHNlIHsKIAkJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYod29yZCwgRUVQUk9NX1JTU0lfT0ZGU0VUX0FfMSk7CiAJCWlmICh2YWx1ZSA8IC0xMCB8fCB2YWx1ZSA+IDEwKQpAQCAtMTU3MywzMyArMTYyNiw2MCBAQAogCS8qCiAJICogU3RvcmUgbGVkIHNldHRpbmdzLCBmb3IgY29ycmVjdCBsZWQgYmVoYXZpb3VyLgogCSAqLworI2lmZGVmIENPTkZJR19SVDczVVNCX0xFRFMKIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTEVELCAmZWVwcm9tKTsKIAotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfTEVEX01PREUsCi0JCQkgICBydDJ4MDBkZXYtPmxlZF9tb2RlKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0dQSU9fMCwKKwlydDJ4MDBkZXYtPmxlZF9yYWRpby5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8udHlwZSA9IExFRF9UWVBFX1JBRElPOworCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQorCSAgICBydDczdXNiX2JyaWdodG5lc3Nfc2V0OworCXJ0MngwMGRldi0+bGVkX3JhZGlvLmxlZF9kZXYuYmxpbmtfc2V0ID0KKwkgICAgcnQ3M3VzYl9ibGlua19zZXQ7CisJcnQyeDAwZGV2LT5sZWRfcmFkaW8uZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7CisKKwlydDJ4MDBkZXYtPmxlZF9hc3NvYy5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJcnQyeDAwZGV2LT5sZWRfYXNzb2MudHlwZSA9IExFRF9UWVBFX0FTU09DOworCXJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPQorCSAgICBydDczdXNiX2JyaWdodG5lc3Nfc2V0OworCXJ0MngwMGRldi0+bGVkX2Fzc29jLmxlZF9kZXYuYmxpbmtfc2V0ID0KKwkgICAgcnQ3M3VzYl9ibGlua19zZXQ7CisJcnQyeDAwZGV2LT5sZWRfYXNzb2MuZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7CisKKwlpZiAodmFsdWUgPT0gTEVEX01PREVfU0lHTkFMX1NUUkVOR1RIKSB7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwucnQyeDAwZGV2ID0gcnQyeDAwZGV2OworCQlydDJ4MDBkZXYtPmxlZF9yYWRpby50eXBlID0gTEVEX1RZUEVfUVVBTElUWTsKKwkJcnQyeDAwZGV2LT5sZWRfcXVhbC5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0KKwkJICAgIHJ0NzN1c2JfYnJpZ2h0bmVzc19zZXQ7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwubGVkX2Rldi5ibGlua19zZXQgPQorCQkgICAgcnQ3M3VzYl9ibGlua19zZXQ7CisJCXJ0MngwMGRldi0+bGVkX3F1YWwuZmxhZ3MgPSBMRURfSU5JVElBTElaRUQ7CisJfQorCisJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfTEVEX01PREUsIHZhbHVlKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzAsCiAJCQkgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgICBFRVBST01fTEVEX1BPTEFSSVRZX0dQSU9fMCkpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfR1BJT18xLAorCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfbWN1X3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0dQSU9fMSwKIAkJCSAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgIEVFUFJPTV9MRURfUE9MQVJJVFlfR1BJT18xKSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzIsCisJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfR1BJT18yLAogCQkJICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICAgRUVQUk9NX0xFRF9QT0xBUklUWV9HUElPXzIpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0dQSU9fMywKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9HUElPXzMsCiAJCQkgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgICBFRVBST01fTEVEX1BPTEFSSVRZX0dQSU9fMykpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfR1BJT180LAorCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfbWN1X3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX0dQSU9fNCwKIAkJCSAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgIEVFUFJPTV9MRURfUE9MQVJJVFlfR1BJT180KSk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9BQ1QsCisJcnQyeDAwX3NldF9maWVsZDE2KCZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfQUNULAogCQkJICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0xFRF9QT0xBUklUWV9BQ1QpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX1JFQURZX0JHLAorCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfbWN1X3JlZywgTUNVX0xFRENTX1BPTEFSSVRZX1JFQURZX0JHLAogCQkJICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICAgRUVQUk9NX0xFRF9QT0xBUklUWV9SRFlfRykpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcnQyeDAwZGV2LT5sZWRfcmVnLCBNQ1VfTEVEQ1NfUE9MQVJJVFlfUkVBRFlfQSwKKwlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJ0MngwMGRldi0+bGVkX21jdV9yZWcsIE1DVV9MRURDU19QT0xBUklUWV9SRUFEWV9BLAogCQkJICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICAgRUVQUk9NX0xFRF9QT0xBUklUWV9SRFlfQSkpOworI2VuZGlmIC8qIENPTkZJR19SVDczVVNCX0xFRFMgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMTc1NSw3ICsxODM1LDcgQEAKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFRYRF9ERVNDX1NJWkU7CiAJcnQyeDAwZGV2LT5ody0+bWF4X3NpZ25hbCA9IE1BWF9TSUdOQUw7CiAJcnQyeDAwZGV2LT5ody0+bWF4X3Jzc2kgPSBNQVhfUlhfU1NJOwotCXJ0MngwMGRldi0+aHctPnF1ZXVlcyA9IDU7CisJcnQyeDAwZGV2LT5ody0+cXVldWVzID0gNDsKIAogCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsICZydDJ4MDBkZXZfdXNiKHJ0MngwMGRldiktPmRldik7CiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIocnQyeDAwZGV2LT5odywKQEAgLTE3NzIsOCArMTg1Miw4IEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGh3X21vZGUgaW5mb3JtYXRpb24uCiAJICovCi0Jc3BlYy0+bnVtX21vZGVzID0gMjsKLQlzcGVjLT5udW1fcmF0ZXMgPSAxMjsKKwlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKKwlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAJc3BlYy0+dHhfcG93ZXJfYSA9IE5VTEw7CiAJc3BlYy0+dHhfcG93ZXJfYmcgPSB0eHBvd2VyOwogCXNwZWMtPnR4X3Bvd2VyX2RlZmF1bHQgPSBERUZBVUxUX1RYUE9XRVI7CkBAIC0xNzgyLDIwICsxODYyLDIwIEBACiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI4KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1Mjg7CiAJfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSkgeworCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjI2KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjY7CiAJfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjVfMjUyNzsKIAl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpKSB7CisJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzUyMjVfMjUyNyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc181MjI1XzI1Mjc7CiAJfQogCiAJaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpIHx8CiAJICAgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjYpKSB7Ci0JCXNwZWMtPm51bV9tb2RlcyA9IDM7Ci0KIAkJdHhwb3dlciA9IHJ0MngwMF9lZXByb21fYWRkcihydDJ4MDBkZXYsIEVFUFJPTV9UWFBPV0VSX0FfU1RBUlQpOwogCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykKIAkJCXR4cG93ZXJbaV0gPSBUWFBPV0VSX0ZST01fREVWKHR4cG93ZXJbaV0pOwpAQCAtMTgyNSw5ICsxOTA1LDEwIEBACiAJcnQ3M3VzYl9wcm9iZV9od19tb2RlKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIGZpcm13YXJlCisJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCiAJICovCiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJLyoKIAkgKiBTZXQgdGhlIHJzc2kgb2Zmc2V0LgpAQCAtMTg0MCw3OSArMTkyMSw2IEBACiAvKgogICogSUVFRTgwMjExIHN0YWNrIGNhbGxiYWNrIGZ1bmN0aW9ucy4KICAqLwotc3RhdGljIHZvaWQgcnQ3M3VzYl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICAgaW50IG1jX2NvdW50LAotCQkJCSAgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXUzMiByZWc7Ci0KLQkvKgotCSAqIE1hc2sgb2ZmIGFueSBmbGFncyB3ZSBhcmUgZ29pbmcgdG8gaWdub3JlIGZyb20KLQkgKiB0aGUgdG90YWxfZmxhZ3MgZmllbGQuCi0JICovCi0JKnRvdGFsX2ZsYWdzICY9Ci0JICAgIEZJRl9BTExNVUxUSSB8Ci0JICAgIEZJRl9GQ1NGQUlMIHwKLQkgICAgRklGX1BMQ1BGQUlMIHwKLQkgICAgRklGX0NPTlRST0wgfAotCSAgICBGSUZfT1RIRVJfQlNTIHwKLQkgICAgRklGX1BST01JU0NfSU5fQlNTOwotCi0JLyoKLQkgKiBBcHBseSBzb21lIHJ1bGVzIHRvIHRoZSBmaWx0ZXJzOgotCSAqIC0gU29tZSBmaWx0ZXJzIGltcGx5IGRpZmZlcmVudCBmaWx0ZXJzIHRvIGJlIHNldC4KLQkgKiAtIFNvbWUgdGhpbmdzIHdlIGNhbid0IGZpbHRlciBvdXQgYXQgYWxsLgotCSAqLwotCWlmIChtY19jb3VudCkKLQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9BTExNVUxUSTsKLQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX09USEVSX0JTUyB8fAotCSAgICAqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCi0JCSp0b3RhbF9mbGFncyB8PSBGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgd29yayBsZWZ0IGZvciB1cy4KLQkgKi8KLQlpZiAocnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyID09ICp0b3RhbF9mbGFncykKLQkJcmV0dXJuOwotCXJ0MngwMGRldi0+cGFja2V0X2ZpbHRlciA9ICp0b3RhbF9mbGFnczsKLQotCS8qCi0JICogV2hlbiBpbiBhdG9taWMgY29udGV4dCwgcmVzY2hlZHVsZSBhbmQgbGV0IHJ0MngwMGxpYgotCSAqIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4KLQkgKi8KLQlpZiAoaW5fYXRvbWljKCkpIHsKLQkJcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPmZpbHRlcl93b3JrKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogU3RhcnQgY29uZmlndXJhdGlvbiBzdGVwcy4KLQkgKiBOb3RlIHRoYXQgdGhlIHZlcnNpb24gZXJyb3Igd2lsbCBhbHdheXMgYmUgZHJvcHBlZAotCSAqIGFuZCBicm9hZGNhc3QgZnJhbWVzIHdpbGwgYWx3YXlzIGJlIGFjY2VwdGVkIHNpbmNlCi0JICogdGhlcmUgaXMgbm8gZmlsdGVyIGZvciBpdCBhdCB0aGlzIHRpbWUuCi0JICovCi0JcnQ3M3VzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfQ1JDLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfRkNTRkFJTCkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9QSFlTSUNBTCwKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX1BMQ1BGQUlMKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0NPTlRST0wsCi0JCQkgICAhKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX05PVF9UT19NRSwKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX1RPX0RTLAotCQkJICAgISgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfVkVSU0lPTl9FUlJPUiwgMSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX01VTFRJQ0FTVCwKLQkJCSAgICEoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0JST0FEQ0FTVCwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0FDS19DVFMsIDEpOwotCXJ0NzN1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjAsIHJlZyk7Ci19Ci0KIHN0YXRpYyBpbnQgcnQ3M3VzYl9zZXRfcmV0cnlfbGltaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgdTMyIHNob3J0X3JldHJ5LCB1MzIgbG9uZ19yZXRyeSkKIHsKQEAgLTE5NTEsNjEgKzE5NTksNjUgQEAKICNkZWZpbmUgcnQ3M3VzYl9nZXRfdHNmCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBydDczdXNiX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0KLQlydDczdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxMiwgMCk7Ci0JcnQ3M3VzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTMsIDApOwotfQotCiBzdGF0aWMgaW50IHJ0NzN1c2JfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXN0cnVjdCBza2JfZGVzYyAqZGVzYzsKLQlzdHJ1Y3QgZGF0YV9yaW5nICpyaW5nOwotCXN0cnVjdCBkYXRhX2VudHJ5ICplbnRyeTsKLQlpbnQgdGltZW91dDsKKwlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb250cm9sLT52aWYpOworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKKwl1bnNpZ25lZCBpbnQgYmVhY29uX2Jhc2U7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisJdTMyIHJlZzsKIAotCS8qCi0JICogSnVzdCBpbiBjYXNlIHRoZSBpZWVlODAyMTEgZG9lc24ndCBzZXQgdGhpcywKLQkgKiBidXQgd2UgbmVlZCB0aGlzIHF1ZXVlIHNldCBmb3IgdGhlIGRlc2NyaXB0b3IKLQkgKiBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQljb250cm9sLT5xdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT047Ci0JcmluZyA9IHJ0MngwMGxpYl9nZXRfcmluZyhydDJ4MDBkZXYsIGNvbnRyb2wtPnF1ZXVlKTsKLQllbnRyeSA9IHJ0MngwMF9nZXRfZGF0YV9lbnRyeShyaW5nKTsKKwlpZiAodW5saWtlbHkoIWludGYtPmJlYWNvbikpCisJCXJldHVybiAtRU5PQlVGUzsKIAogCS8qCiAJICogQWRkIHRoZSBkZXNjcmlwdG9yIGluIGZyb250IG9mIHRoZSBza2IuCiAJICovCi0Jc2tiX3B1c2goc2tiLCByaW5nLT5kZXNjX3NpemUpOwotCW1lbXNldChza2ItPmRhdGEsIDAsIHJpbmctPmRlc2Nfc2l6ZSk7CisJc2tiX3B1c2goc2tiLCBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemUpOworCW1lbXNldChza2ItPmRhdGEsIDAsIGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZSk7CiAKIAkvKgogCSAqIEZpbGwgaW4gc2tiIGRlc2NyaXB0b3IKIAkgKi8KLQlkZXNjID0gZ2V0X3NrYl9kZXNjKHNrYik7Ci0JZGVzYy0+ZGVzY19sZW4gPSByaW5nLT5kZXNjX3NpemU7Ci0JZGVzYy0+ZGF0YV9sZW4gPSBza2ItPmxlbiAtIHJpbmctPmRlc2Nfc2l6ZTsKLQlkZXNjLT5kZXNjID0gc2tiLT5kYXRhOwotCWRlc2MtPmRhdGEgPSBza2ItPmRhdGEgKyByaW5nLT5kZXNjX3NpemU7Ci0JZGVzYy0+cmluZyA9IHJpbmc7Ci0JZGVzYy0+ZW50cnkgPSBlbnRyeTsKKwlza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CisJbWVtc2V0KHNrYmRlc2MsIDAsIHNpemVvZigqc2tiZGVzYykpOworCXNrYmRlc2MtPmZsYWdzIHw9IEZSQU1FX0RFU0NfRFJJVkVSX0dFTkVSQVRFRDsKKwlza2JkZXNjLT5kYXRhID0gc2tiLT5kYXRhICsgaW50Zi0+YmVhY29uLT5xdWV1ZS0+ZGVzY19zaXplOworCXNrYmRlc2MtPmRhdGFfbGVuID0gc2tiLT5sZW4gLSBpbnRmLT5iZWFjb24tPnF1ZXVlLT5kZXNjX3NpemU7CisJc2tiZGVzYy0+ZGVzYyA9IHNrYi0+ZGF0YTsKKwlza2JkZXNjLT5kZXNjX2xlbiA9IGludGYtPmJlYWNvbi0+cXVldWUtPmRlc2Nfc2l6ZTsKKwlza2JkZXNjLT5lbnRyeSA9IGludGYtPmJlYWNvbjsKIAorCS8qCisJICogRGlzYWJsZSBiZWFjb25pbmcgd2hpbGUgd2UgYXJlIHJlbG9hZGluZyB0aGUgYmVhY29uIGRhdGEsCisJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KKwkgKi8KKwlydDczdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjksICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVFNGX1RJQ0tJTkcsIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVEJUVF9FTkFCTEUsIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfQkVBQ09OX0dFTiwgMCk7CisJcnQ3M3VzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKKworCS8qCisJICogbWFjODAyMTEgZG9lc24ndCBwcm92aWRlIHRoZSBjb250cm9sLT5xdWV1ZSB2YXJpYWJsZQorCSAqIGZvciBiZWFjb25zLiBTZXQgb3VyIG93biBxdWV1ZSBpZGVudGlmaWNhdGlvbiBzbworCSAqIGl0IGNhbiBiZSB1c2VkIGR1cmluZyBkZXNjcmlwdG9yIGluaXRpYWxpemF0aW9uLgorCSAqLworCWNvbnRyb2wtPnF1ZXVlID0gUlQyWDAwX0JDTl9RVUVVRV9CRUFDT047CiAJcnQyeDAwbGliX3dyaXRlX3R4X2Rlc2MocnQyeDAwZGV2LCBza2IsIGNvbnRyb2wpOwogCiAJLyoKIAkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciB0byByZWdpc3RlciwKIAkgKiBhbmQga2ljayB0aGUgYmVhY29uIGdlbmVyYXRvci4KIAkgKi8KKwliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoaW50Zi0+YmVhY29uLT5lbnRyeV9pZHgpOwogCXRpbWVvdXQgPSBSRUdJU1RFUl9USU1FT1VUICogKHNrYi0+bGVuIC8gc2l6ZW9mKHUzMikpOwogCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdChydDJ4MDBkZXYsIFVTQl9NVUxUSV9XUklURSwKLQkJCQkgVVNCX1ZFTkRPUl9SRVFVRVNUX09VVCwKLQkJCQkgSFdfQkVBQ09OX0JBU0UwLCAweDAwMDAsCisJCQkJIFVTQl9WRU5ET1JfUkVRVUVTVF9PVVQsIGJlYWNvbl9iYXNlLCAwLAogCQkJCSBza2ItPmRhdGEsIHNrYi0+bGVuLCB0aW1lb3V0KTsKLQlydDczdXNiX2tpY2tfdHhfcXVldWUocnQyeDAwZGV2LCBJRUVFODAyMTFfVFhfUVVFVUVfQkVBQ09OKTsKKwlydDczdXNiX2tpY2tfdHhfcXVldWUocnQyeDAwZGV2LCBjb250cm9sLT5xdWV1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMTgsMjAgKzIwMzAsMjAgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCiAJLmNvbmZpZ19pbnRlcmZhY2UJPSBydDJ4MDBtYWNfY29uZmlnX2ludGVyZmFjZSwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0NzN1c2JfY29uZmlndXJlX2ZpbHRlciwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuc2V0X3JldHJ5X2xpbWl0CT0gcnQ3M3VzYl9zZXRfcmV0cnlfbGltaXQsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZCwKIAkuY29uZl90eAkJPSBydDJ4MDBtYWNfY29uZl90eCwKIAkuZ2V0X3R4X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YJCT0gcnQ3M3VzYl9nZXRfdHNmLAotCS5yZXNldF90c2YJCT0gcnQ3M3VzYl9yZXNldF90c2YsCiAJLmJlYWNvbl91cGRhdGUJCT0gcnQ3M3VzYl9iZWFjb25fdXBkYXRlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0NzN1c2JfcnQyeDAwX29wcyA9IHsKIAkucHJvYmVfaHcJCT0gcnQ3M3VzYl9wcm9iZV9odywKIAkuZ2V0X2Zpcm13YXJlX25hbWUJPSBydDczdXNiX2dldF9maXJtd2FyZV9uYW1lLAorCS5nZXRfZmlybXdhcmVfY3JjCT0gcnQ3M3VzYl9nZXRfZmlybXdhcmVfY3JjLAogCS5sb2FkX2Zpcm13YXJlCQk9IHJ0NzN1c2JfbG9hZF9maXJtd2FyZSwKIAkuaW5pdGlhbGl6ZQkJPSBydDJ4MDB1c2JfaW5pdGlhbGl6ZSwKIAkudW5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl91bmluaXRpYWxpemUsCkBAIC0yMDQ2LDE5ICsyMDU4LDQyIEBACiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0NzN1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NzN1c2Jfa2lja190eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQ3M3VzYl9maWxsX3J4ZG9uZSwKLQkuY29uZmlnX21hY19hZGRyCT0gcnQ3M3VzYl9jb25maWdfbWFjX2FkZHIsCi0JLmNvbmZpZ19ic3NpZAkJPSBydDczdXNiX2NvbmZpZ19ic3NpZCwKLQkuY29uZmlnX3R5cGUJCT0gcnQ3M3VzYl9jb25maWdfdHlwZSwKLQkuY29uZmlnX3ByZWFtYmxlCT0gcnQ3M3VzYl9jb25maWdfcHJlYW1ibGUsCisJLmNvbmZpZ19maWx0ZXIJCT0gcnQ3M3VzYl9jb25maWdfZmlsdGVyLAorCS5jb25maWdfaW50ZgkJPSBydDczdXNiX2NvbmZpZ19pbnRmLAorCS5jb25maWdfZXJwCQk9IHJ0NzN1c2JfY29uZmlnX2VycCwKIAkuY29uZmlnCQkJPSBydDczdXNiX2NvbmZpZywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0NzN1c2JfcXVldWVfcnggPSB7CisJLmVudHJ5X251bQkJPSBSWF9FTlRSSUVTLAorCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAorCS5kZXNjX3NpemUJCT0gUlhEX0RFU0NfU0laRSwKKwkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfcngpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQ3M3VzYl9xdWV1ZV90eCA9IHsKKwkuZW50cnlfbnVtCQk9IFRYX0VOVFJJRVMsCisJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCisJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDczdXNiX3F1ZXVlX2JjbiA9IHsKKwkuZW50cnlfbnVtCQk9IDQgKiBCRUFDT05fRU5UUklFUywKKwkuZGF0YV9zaXplCQk9IE1HTVRfRlJBTUVfU0laRSwKKwkuZGVzY19zaXplCQk9IFRYSU5GT19TSVpFLAorCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl90eCksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMF9vcHMgcnQ3M3VzYl9vcHMgPSB7CiAJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCi0JLnJ4ZF9zaXplCT0gUlhEX0RFU0NfU0laRSwKLQkudHhkX3NpemUJPSBUWERfREVTQ19TSVpFLAorCS5tYXhfc3RhX2ludGYJPSAxLAorCS5tYXhfYXBfaW50Zgk9IDQsCiAJLmVlcHJvbV9zaXplCT0gRUVQUk9NX1NJWkUsCiAJLnJmX3NpemUJPSBSRl9TSVpFLAorCS5yeAkJPSAmcnQ3M3VzYl9xdWV1ZV9yeCwKKwkudHgJCT0gJnJ0NzN1c2JfcXVldWVfdHgsCisJLmJjbgkJPSAmcnQ3M3VzYl9xdWV1ZV9iY24sCiAJLmxpYgkJPSAmcnQ3M3VzYl9ydDJ4MDBfb3BzLAogCS5odwkJPSAmcnQ3M3VzYl9tYWM4MDIxMV9vcHMsCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUwpAQCAtMjA5MSw5ICsyMTI2LDEyIEBACiAJeyBVU0JfREVWSUNFKDB4MTM3MSwgMHg5MDMyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBDb25jZXB0cm9uaWMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIENvcmVnYSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAyZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogRC1MaW5rICovCiAJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzAzKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogR2VtdGVrICovCiAJeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDA0KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBHaWdhYnl0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKaW5kZXggZDQ5ZGNhYS4uMDZkNjg3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTE0LDYgKzExNCw5IEBACiAjZGVmaW5lIEhXX0JFQUNPTl9CQVNFMgkJCTB4MjYwMAogI2RlZmluZSBIV19CRUFDT05fQkFTRTMJCQkweDI3MDAKIAorI2RlZmluZSBIV19CRUFDT05fT0ZGU0VUKF9faW5kZXgpIFwKKwkoIEhXX0JFQUNPTl9CQVNFMCArIChfX2luZGV4ICogMHgwMTAwKSApCisKIC8qCiAgKiBNQUMgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzKENTUikuCiAgKiBTb21lIHZhbHVlcyBhcmUgc2V0IGluIFRVLCB3aGVyZWFzIDEgVFUgPT0gMTAyNCB1cy4KQEAgLTE0Niw2ICsxNDksMTEgQEAKIAogLyoKICAqIE1BQ19DU1IzOiBTVEEgTUFDIHJlZ2lzdGVyIDEuCisgKiBVTklDQVNUX1RPX01FX01BU0s6CisgKglVc2VkIHRvIG1hc2sgb2ZmIGJpdHMgZnJvbSBieXRlIDUgb2YgdGhlIE1BQyBhZGRyZXNzCisgKgl0byBkZXRlcm1pbmUgdGhlIFVOSUNBU1RfVE9fTUUgYml0IGZvciBSWCBmcmFtZXMuCisgKglUaGUgZnVsbCBtYXNrIGlzIGNvbXBsZW1lbnRlZCBieSBCU1NfSURfTUFTSzoKKyAqCQlNQVNLID0gQlNTX0lEX01BU0sgJiBVTklDQVNUX1RPX01FX01BU0sKICAqLwogI2RlZmluZSBNQUNfQ1NSMwkJCTB4MzAwYwogI2RlZmluZSBNQUNfQ1NSM19CWVRFNAkJCUZJRUxEMzIoMHgwMDAwMDBmZikKQEAgLTE2Myw3ICsxNzEsMTQgQEAKIAogLyoKICAqIE1BQ19DU1I1OiBCU1NJRCByZWdpc3RlciAxLgotICogQlNTX0lEX01BU0s6IDM6IG9uZSBCU1NJRCwgMDogNCBCU1NJRCwgMiBvciAxOiAyIEJTU0lELgorICogQlNTX0lEX01BU0s6CisgKglUaGlzIG1hc2sgaXMgdXNlZCB0byBtYXNrIG9mZiBiaXRzIDAgYW5kIDEgb2YgYnl0ZSA1IG9mIHRoZQorICoJQlNTSUQuIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aG9zZSBiaXRzIHdpbGwgYmUgaWdub3JlZAorICoJd2hlbiBkZXRlcm1pbmluZyB0aGUgTVlfQlNTIG9mIFJYIGZyYW1lcy4KKyAqCQkwOiAxLUJTU0lEIG1vZGUgKEJTUyBpbmRleCA9IDApCisgKgkJMTogMi1CU1NJRCBtb2RlIChCU1MgaW5kZXg6IEJ5dGU1LCBiaXQgMCkKKyAqCQkyOiAyLUJTU0lEIG1vZGUgKEJTUyBpbmRleDogYnl0ZTUsIGJpdCAxKQorICoJCTM6IDQtQlNTSUQgbW9kZSAoQlNTIGluZGV4OiBieXRlNSwgYml0IDAgLSAxKQogICovCiAjZGVmaW5lIE1BQ19DU1I1CQkJMHgzMDE0CiAjZGVmaW5lIE1BQ19DU1I1X0JZVEU0CQkJRklFTEQzMigweDAwMDAwMGZmKQpAQCAtODY3LDYgKzg4Miw3IEBACiAgKiBETUEgZGVzY3JpcHRvciBkZWZpbmVzLgogICovCiAjZGVmaW5lIFRYRF9ERVNDX1NJWkUJCQkoIDYgKiBzaXplb2YoX19sZTMyKSApCisjZGVmaW5lIFRYSU5GT19TSVpFCQkJKCA2ICogc2l6ZW9mKF9fbGUzMikgKQogI2RlZmluZSBSWERfREVTQ19TSVpFCQkJKCA2ICogc2l6ZW9mKF9fbGUzMikgKQogCiAvKgpAQCAtMTAwNyw4ICsxMDIzLDggQEAKICNkZWZpbmUgUlhEX1c1X1JFU0VSVkVECQkJRklFTEQzMigweGZmZmZmZmZmKQogCiAvKgotICogTWFjcm8ncyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIGRzY2FwZSB2YWx1ZQotICogYW5kIGZyb20gZHNjYXBlIHZhbHVlIHRvIHJlZ2lzdGVyIHZhbHVlLgorICogTWFjcm8ncyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCisgKiBhbmQgZnJvbSBtYWM4MDIxMSB2YWx1ZSB0byByZWdpc3RlciB2YWx1ZS4KICAqLwogI2RlZmluZSBNSU5fVFhQT1dFUgkwCiAjZGVmaW5lIE1BWF9UWFBPV0VSCTMxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwLmgKaW5kZXggMmNiZmUzYy4uMDgyYTExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODAuaApAQCAtMTAyLDcgKzEwMiw3IEBACiAJc3RydWN0IHJ0bDgxODBfdHhfcmluZyB0eF9yaW5nWzRdOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1sxNF07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzWzEyXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgbW9kZXNbMl07CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXUzMiByeF9jb25mOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9kZXYuYwppbmRleCAyN2ViZDY4Li5jMTgxZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODBfZGV2LmMKQEAgLTQ5LDYgKzQ5LDQxIEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw4MTgwX3RhYmxlKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBydGw4MTh4X3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAwLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMSwgfSwKKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDIsIH0sCisJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMywgfSwKKwl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSA1LCB9LAorCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDYsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gNywgfSwKKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA4LCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDksIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMTAsIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHJ0bDgxOHhfY2hhbm5lbHNbXSA9IHsKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NzIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0ODQgfSwKK307CisKKworCisKIHZvaWQgcnRsODE4MF93cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtOTksMTAgKzEzNCwxMCBAQAogCQkJLyogVE9ETzogaW1wcm92ZSBzaWduYWwvcnNzaSByZXBvcnRpbmcgKi8KIAkJCXJ4X3N0YXR1cy5zaWduYWwgPSBmbGFnczIgJiAweEZGOwogCQkJcnhfc3RhdHVzLnNzaSA9IChmbGFnczIgPj4gOCkgJiAweDdGOwotCQkJcnhfc3RhdHVzLnJhdGUgPSAoZmxhZ3MgPj4gMjApICYgMHhGOwotCQkJcnhfc3RhdHVzLmZyZXEgPSBkZXYtPmNvbmYuZnJlcTsKLQkJCXJ4X3N0YXR1cy5jaGFubmVsID0gZGV2LT5jb25mLmNoYW5uZWw7Ci0JCQlyeF9zdGF0dXMucGh5bW9kZSA9IGRldi0+Y29uZi5waHltb2RlOworCQkJLyogWFhYOiBpcyB0aGlzIGNvcnJlY3Q/ICovCisJCQlyeF9zdGF0dXMucmF0ZV9pZHggPSAoZmxhZ3MgPj4gMjApICYgMHhGOworCQkJcnhfc3RhdHVzLmZyZXEgPSBkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJCQlyeF9zdGF0dXMuYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOwogCQkJcnhfc3RhdHVzLm1hY3RpbWUgPSBsZTY0X3RvX2NwdShlbnRyeS0+dHNmdCk7CiAJCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7CiAJCQlpZiAoZmxhZ3MgJiBSVEw4MTgwX1JYX0RFU0NfRkxBR19DUkMzMl9FUlIpCkBAIC0xMzUsMTMgKzE3MCwxNSBAQAogCXdoaWxlIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIHsKIAkJc3RydWN0IHJ0bDgxODBfdHhfZGVzYyAqZW50cnkgPSAmcmluZy0+ZGVzY1tyaW5nLT5pZHhdOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXMgPSB7IHswfSB9OworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXM7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbDsKIAkJdTMyIGZsYWdzID0gbGUzMl90b19jcHUoZW50cnktPmZsYWdzKTsKIAogCQlpZiAoZmxhZ3MgJiBSVEw4MTgwX1RYX0RFU0NfRkxBR19PV04pCiAJCQlyZXR1cm47CiAKKwkJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKKwogCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOwogCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgbGUzMl90b19jcHUoZW50cnktPnR4X2J1ZiksCkBAIC0yMjAsMTggKzI1NywyNSBAQAogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCiAJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCUJVR19PTighY29udHJvbC0+dHhfcmF0ZSk7CisKIAl0eF9mbGFncyA9IFJUTDgxODBfVFhfREVTQ19GTEFHX09XTiB8IFJUTDgxODBfVFhfREVTQ19GTEFHX0ZTIHwKLQkJICAgUlRMODE4MF9UWF9ERVNDX0ZMQUdfTFMgfCAoY29udHJvbC0+dHhfcmF0ZSA8PCAyNCkgfAotCQkgICAoY29udHJvbC0+cnRzX2N0c19yYXRlIDw8IDE5KSB8IHNrYi0+bGVuOworCQkgICBSVEw4MTgwX1RYX0RFU0NfRkxBR19MUyB8CisJCSAgIChjb250cm9sLT50eF9yYXRlLT5od192YWx1ZSA8PCAyNCkgfCBza2ItPmxlbjsKIAogCWlmIChwcml2LT5yODE4NSkKIAkJdHhfZmxhZ3MgfD0gUlRMODE4MF9UWF9ERVNDX0ZMQUdfRE1BIHwKIAkJCSAgICBSVEw4MTgwX1RYX0RFU0NfRkxBR19OT19FTkM7CiAKLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMpCisJaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSB7CisJCUJVR19PTighY29udHJvbC0+cnRzX2N0c19yYXRlKTsKIAkJdHhfZmxhZ3MgfD0gUlRMODE4MF9UWF9ERVNDX0ZMQUdfUlRTOwotCWVsc2UgaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKKwkJdHhfZmxhZ3MgfD0gY29udHJvbC0+cnRzX2N0c19yYXRlLT5od192YWx1ZSA8PCAxOTsKKwl9IGVsc2UgaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkgeworCQlCVUdfT04oIWNvbnRyb2wtPnJ0c19jdHNfcmF0ZSk7CiAJCXR4X2ZsYWdzIHw9IFJUTDgxODBfVFhfREVTQ19GTEFHX0NUUzsKKwkJdHhfZmxhZ3MgfD0gY29udHJvbC0+cnRzX2N0c19yYXRlLT5od192YWx1ZSA8PCAxOTsKKwl9CiAKIAkqKChzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKiopIHNrYi0+Y2IpID0KIAkJa21lbWR1cChjb250cm9sLCBzaXplb2YoKmNvbnRyb2wpLCBHRlBfQVRPTUlDKTsKQEAgLTI0NCw5ICsyODgsOSBAQAogCQl1bnNpZ25lZCBpbnQgcmVtYWluZGVyOwogCiAJCXBsY3BfbGVuID0gRElWX1JPVU5EX1VQKDE2ICogKHNrYi0+bGVuICsgNCksCi0JCQkJCShjb250cm9sLT5yYXRlLT5yYXRlICogMikgLyAxMCk7CisJCQkJCShjb250cm9sLT50eF9yYXRlLT5iaXRyYXRlICogMikgLyAxMCk7CiAJCXJlbWFpbmRlciA9ICgxNiAqIChza2ItPmxlbiArIDQpKSAlCi0JCQkgICAgKChjb250cm9sLT5yYXRlLT5yYXRlICogMikgLyAxMCk7CisJCQkgICAgKChjb250cm9sLT50eF9yYXRlLT5iaXRyYXRlICogMikgLyAxMCk7CiAJCWlmIChyZW1haW5kZXIgPiAwICYmIHJlbWFpbmRlciA8PSA2KQogCQkJcGxjcF9sZW4gfD0gMSA8PCAxNTsKIAl9CkBAIC0yNTksOCArMzAzLDggQEAKIAllbnRyeS0+cGxjcF9sZW4gPSBjcHVfdG9fbGUxNihwbGNwX2xlbik7CiAJZW50cnktPnR4X2J1ZiA9IGNwdV90b19sZTMyKG1hcHBpbmcpOwogCWVudHJ5LT5mcmFtZV9sZW4gPSBjcHVfdG9fbGUzMihza2ItPmxlbik7Ci0JZW50cnktPmZsYWdzMiA9IGNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlICE9IC0xID8KLQkJCWNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlIDw8IDQgOiAwOworCWVudHJ5LT5mbGFnczIgPSBjb250cm9sLT5hbHRfcmV0cnlfcmF0ZSAhPSBOVUxMID8KKwkJCWNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlLT5iaXRyYXRlIDw8IDQgOiAwOwogCWVudHJ5LT5yZXRyeV9saW1pdCA9IGNvbnRyb2wtPnJldHJ5X2xpbWl0OwogCWVudHJ5LT5mbGFncyA9IGNwdV90b19sZTMyKHR4X2ZsYWdzKTsKIAlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKQEAgLTY0NCw5ICs2ODgsOSBAQAogCiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKIAlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyIF9faW9tZW0gKikmcHJpdi0+bWFwLT5NQUNbMF0sCi0JCQkgIGNwdV90b19sZTMyKCoodTMyICopY29uZi0+bWFjX2FkZHIpKTsKKwkJCSAgbGUzMl90b19jcHUoKihfX2xlMzIgKiljb25mLT5tYWNfYWRkcikpOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIChfX2xlMTYgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1s0XSwKLQkJCSAgY3B1X3RvX2xlMTYoKih1MTYgKikoY29uZi0+bWFjX2FkZHIgKyA0KSkpOworCQkJICBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKShjb25mLT5tYWNfYWRkciArIDQpKSk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKIAogCXJldHVybiAwOwpAQCAtODM2LDE5ICs4ODAsMTkgQEAKIAkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5jaGFubmVscykgIT0gc2l6ZW9mKHJ0bDgxOHhfY2hhbm5lbHMpKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPnJhdGVzKSAhPSBzaXplb2YocnRsODE4eF9yYXRlcykpOworCiAJbWVtY3B5KHByaXYtPmNoYW5uZWxzLCBydGw4MTh4X2NoYW5uZWxzLCBzaXplb2YocnRsODE4eF9jaGFubmVscykpOwogCW1lbWNweShwcml2LT5yYXRlcywgcnRsODE4eF9yYXRlcywgc2l6ZW9mKHJ0bDgxOHhfcmF0ZXMpKTsKLQlwcml2LT5tb2Rlc1swXS5tb2RlID0gTU9ERV9JRUVFODAyMTFHOwotCXByaXYtPm1vZGVzWzBdLm51bV9yYXRlcyA9IEFSUkFZX1NJWkUocnRsODE4eF9yYXRlcyk7Ci0JcHJpdi0+bW9kZXNbMF0ucmF0ZXMgPSBwcml2LT5yYXRlczsKLQlwcml2LT5tb2Rlc1swXS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJ0bDgxOHhfY2hhbm5lbHMpOwotCXByaXYtPm1vZGVzWzBdLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7Ci0JcHJpdi0+bW9kZXNbMV0ubW9kZSA9IE1PREVfSUVFRTgwMjExQjsKLQlwcml2LT5tb2Rlc1sxXS5udW1fcmF0ZXMgPSA0OwotCXByaXYtPm1vZGVzWzFdLnJhdGVzID0gcHJpdi0+cmF0ZXM7Ci0JcHJpdi0+bW9kZXNbMV0ubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShydGw4MTh4X2NoYW5uZWxzKTsKLQlwcml2LT5tb2Rlc1sxXS5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOwotCXByaXYtPm1vZGUgPSBJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElEOworCisJcHJpdi0+YmFuZC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlwcml2LT5iYW5kLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7CisJcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShydGw4MTh4X2NoYW5uZWxzKTsKKwlwcml2LT5iYW5kLmJpdHJhdGVzID0gcHJpdi0+cmF0ZXM7CisJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gNDsKKwlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCiAJZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAogCQkgICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1M7CiAJZGV2LT5xdWV1ZXMgPSAxOwpAQCAtODc3LDE1ICs5MjEsMTAgQEAKIAogCXByaXYtPnI4MTg1ID0gcmVnICYgUlRMODE4WF9UWF9DT05GX1I4MTg1X0FCQzsKIAlpZiAocHJpdi0+cjgxODUpIHsKLQkJaWYgKChlcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKGRldiwgJnByaXYtPm1vZGVzWzBdKSkpCi0JCQlnb3RvIGVycl9pb3VubWFwOwotCisJCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsODE4eF9yYXRlcyk7CiAJCXBjaV90cnlfc2V0X213aShwZGV2KTsKIAl9CiAKLQlpZiAoKGVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoZGV2LCAmcHJpdi0+bW9kZXNbMV0pKSkKLQkJZ290byBlcnJfaW91bm1hcDsKLQogCWVlcHJvbS5kYXRhID0gZGV2OwogCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnRsODE4MF9lZXByb21fcmVnaXN0ZXJfcmVhZDsKIAllZXByb20ucmVnaXN0ZXJfd3JpdGUgPSBydGw4MTgwX2VlcHJvbV9yZWdpc3Rlcl93cml0ZTsKQEAgLTk0OCw4ICs5ODcsOCBAQAogCWZvciAoaSA9IDA7IGkgPCAxNDsgaSArPSAyKSB7CiAJCXUxNiB0eHB3cjsKIAkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgxMCArIChpID4+IDEpLCAmdHhwd3IpOwotCQlwcml2LT5jaGFubmVsc1tpXS52YWwgPSB0eHB3ciAmIDB4RkY7Ci0JCXByaXYtPmNoYW5uZWxzW2kgKyAxXS52YWwgPSB0eHB3ciA+PiA4OworCQlwcml2LT5jaGFubmVsc1tpXS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKKwkJcHJpdi0+Y2hhbm5lbHNbaSArIDFdLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKIAl9CiAKIAkvKiBPRkRNIFRYIHBvd2VyICovCkBAIC05NTcsOCArOTk2LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IDE0OyBpICs9IDIpIHsKIAkJCXUxNiB0eHB3cjsKIAkJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MjAgKyAoaSA+PiAxKSwgJnR4cHdyKTsKLQkJCXByaXYtPmNoYW5uZWxzW2ldLnZhbCB8PSAodHhwd3IgJiAweEZGKSA8PCA4OwotCQkJcHJpdi0+Y2hhbm5lbHNbaSArIDFdLnZhbCB8PSB0eHB3ciAmIDB4RkYwMDsKKwkJCXByaXYtPmNoYW5uZWxzW2ldLmh3X3ZhbHVlIHw9ICh0eHB3ciAmIDB4RkYpIDw8IDg7CisJCQlwcml2LT5jaGFubmVsc1tpICsgMV0uaHdfdmFsdWUgfD0gdHhwd3IgJiAweEZGMDA7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODBfZ3JmNTEwMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9ncmY1MTAxLmMKaW5kZXggODI5M2UxOS4uNWQ0NzkzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9ncmY1MTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9ncmY1MTAxLmMKQEAgLTczLDggKzczLDkgQEAKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NvbmYtPmNoYW5uZWwgLSAxXS52YWwgJiAweEZGOwotCXUzMiBjaGFuID0gY29uZi0+Y2hhbm5lbCAtIDE7CisJaW50IGNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCXUzMiB0eHB3ID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlICYgMHhGRjsKKwl1MzIgY2hhbiA9IGNoYW5uZWwgLSAxOwogCiAJLyogc2V0IFRYIHBvd2VyICovCiAJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MTUsIDB4MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX21heDI4MjAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODBfbWF4MjgyMC5jCmluZGV4IDk4ZmU5ZmQuLmEzNGRmZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODBfbWF4MjgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODBfbWF4MjgyMC5jCkBAIC03OCw4ICs3OCw5IEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQogewogCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdW5zaWduZWQgaW50IGNoYW5faWR4ID0gY29uZiA/IGNvbmYtPmNoYW5uZWwgLSAxIDogMDsKLQl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NoYW5faWR4XS52YWwgJiAweEZGOworCWludCBjaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwl1bnNpZ25lZCBpbnQgY2hhbl9pZHggPSBjaGFubmVsIC0gMTsKKwl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NoYW5faWR4XS5od192YWx1ZSAmIDB4RkY7CiAJdTMyIGNoYW4gPSBtYXgyODIwX2NoYW5bY2hhbl9pZHhdOwogCiAJLyogV2hpbGUgcGhpbGlwcyBTQTI0MDAgZHJpdmUgdGhlIFBBIGJpYXMgZnJvbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX3J0bDgyMjUuYwppbmRleCBlZjM4MzJiLi5jZDIyNzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX3J0bDgyMjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX3J0bDgyMjUuYwpAQCAtMjYxLDggKzI2MSw4IEBACiAJdTMyIHJlZzsKIAlpbnQgaTsKIAotCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS52YWwgJiAweEZGOwotCW9mZG1fcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0udmFsID4+IDg7CisJY2NrX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlICYgMHhGRjsKKwlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlID4+IDg7CiAKIAljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOwogCW9mZG1fcG93ZXIgPSBtaW4ob2ZkbV9wb3dlciwgKHU4KTM1KTsKQEAgLTQ3Niw4ICs0NzYsOCBAQAogCWNvbnN0IHU4ICp0bXA7CiAJaW50IGk7CiAKLQljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0udmFsICYgMHhGRjsKLQlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLnZhbCA+PiA4OworCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RkY7CisJb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSA+PiA4OwogCiAJaWYgKGNoYW5uZWwgPT0gMTQpCiAJCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNDsKQEAgLTcxNiwxMyArNzE2LDE0IEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQogewogCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGNoYW4gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCiAJaWYgKHByaXYtPnJmLT5pbml0ID09IHJ0bDgyMjVfcmZfaW5pdCkKLQkJcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjb25mLT5jaGFubmVsKTsKKwkJcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjaGFuKTsKIAllbHNlCi0JCXJ0bDgyMjV6Ml9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjb25mLT5jaGFubmVsKTsKKwkJcnRsODIyNXoyX3JmX3NldF90eF9wb3dlcihkZXYsIGNoYW4pOwogCi0JcnRsODIyNV93cml0ZShkZXYsIDB4NywgcnRsODIyNV9jaGFuW2NvbmYtPmNoYW5uZWwgLSAxXSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NywgcnRsODIyNV9jaGFuW2NoYW4gLSAxXSk7CiAJbXNsZWVwKDEwKTsKIAogCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9zYTI0MDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODBfc2EyNDAwLmMKaW5kZXggZTA4YWNlNy4uMDMxMWI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4MF9zYTI0MDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgwX3NhMjQwMC5jCkBAIC04MCw4ICs4MCw5IEBACiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NvbmYtPmNoYW5uZWwgLSAxXS52YWwgJiAweEZGOwotCXUzMiBjaGFuID0gc2EyNDAwX2NoYW5bY29uZi0+Y2hhbm5lbCAtIDFdOworCWludCBjaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RkY7CisJdTMyIGNoYW4gPSBzYTI0MDBfY2hhbltjaGFubmVsIC0gMV07CiAKIAl3cml0ZV9zYTI0MDAoZGV2LCA3LCB0eHB3KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4Ny5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4Ny5oCmluZGV4IDg2ODBhMGIuLjA3NmQ4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3LmgKQEAgLTcxLDcgKzcxLDcgQEAKIAkvKiBydGw4MTg3IHNwZWNpZmljICovCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbMTJdOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSBtb2Rlc1syXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJdTMyIHJ4X2NvbmY7CiAJdTE2IHR4cHdyX2Jhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19kZXYuYwppbmRleCAwZDcxNzE2Li5kNTc4N2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODdfZGV2LmMKQEAgLTQ1LDYgKzQ1LDM4IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBydGw4MTg3X3RhYmxlKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBydGw4MTh4X3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAwLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMSwgfSwKKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDIsIH0sCisJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMywgfSwKKwl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSA1LCB9LAorCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDYsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gNywgfSwKKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA4LCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDksIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMTAsIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTEsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHJ0bDgxOHhfY2hhbm5lbHNbXSA9IHsKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MTcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NDcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjcgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NzIgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0ODQgfSwKK307CisKIHN0YXRpYyB2b2lkIHJ0bDgxODdfaW93cml0ZV9hc3luY19jYihzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJa2ZyZWUodXJiLT5jb250ZXh0KTsKQEAgLTExMywxMCArMTQ1LDEyIEBACiAKIHN0YXRpYyB2b2lkIHJ0bDgxODdfdHhfY2Ioc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHN0YXR1cyA9IHsgezB9IH07CisJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKil1cmItPmNvbnRleHQ7CiAJc3RydWN0IHJ0bDgxODdfdHhfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgcnRsODE4N190eF9pbmZvICopc2tiLT5jYjsKIAorCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisKIAl1c2JfZnJlZV91cmIoaW5mby0+dXJiKTsKIAlpZiAoaW5mby0+Y29udHJvbCkKIAkJbWVtY3B5KCZzdGF0dXMuY29udHJvbCwgaW5mby0+Y29udHJvbCwgc2l6ZW9mKHN0YXR1cy5jb250cm9sKSk7CkBAIC0xNDQsMTcgKzE3OCwyMyBAQAogCiAJZmxhZ3MgPSBza2ItPmxlbjsKIAlmbGFncyB8PSBSVEw4MTg3X1RYX0ZMQUdfTk9fRU5DUllQVDsKLQlmbGFncyB8PSBjb250cm9sLT5ydHNfY3RzX3JhdGUgPDwgMTk7Ci0JZmxhZ3MgfD0gY29udHJvbC0+dHhfcmF0ZSA8PCAyNDsKKworCUJVR19PTighY29udHJvbC0+dHhfcmF0ZSk7CisKKwlmbGFncyB8PSBjb250cm9sLT50eF9yYXRlLT5od192YWx1ZSA8PCAyNDsKIAlpZiAoaWVlZTgwMjExX2dldF9tb3JlZnJhZygoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEpKQogCQlmbGFncyB8PSBSVEw4MTg3X1RYX0ZMQUdfTU9SRV9GUkFHOwogCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykgeworCQlCVUdfT04oIWNvbnRyb2wtPnJ0c19jdHNfcmF0ZSk7CiAJCWZsYWdzIHw9IFJUTDgxODdfVFhfRkxBR19SVFM7CisJCWZsYWdzIHw9IGNvbnRyb2wtPnJ0c19jdHNfcmF0ZS0+aHdfdmFsdWUgPDwgMTk7CiAJCXJ0c19kdXIgPSBpZWVlODAyMTFfcnRzX2R1cmF0aW9uKGRldiwgcHJpdi0+dmlmLAogCQkJCQkJIHNrYi0+bGVuLCBjb250cm9sKTsKLQl9Ci0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKKwl9IGVsc2UgaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkgeworCQlCVUdfT04oIWNvbnRyb2wtPnJ0c19jdHNfcmF0ZSk7CiAJCWZsYWdzIHw9IFJUTDgxODdfVFhfRkxBR19DVFM7CisJCWZsYWdzIHw9IGNvbnRyb2wtPnJ0c19jdHNfcmF0ZS0+aHdfdmFsdWUgPDwgMTk7CisJfQogCiAJaGRyID0gKHN0cnVjdCBydGw4MTg3X3R4X2hkciAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKIAloZHItPmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwpAQCAtMjIzLDEwICsyNjMsOSBAQAogCXJ4X3N0YXR1cy5hbnRlbm5hID0gKGhkci0+c2lnbmFsID4+IDcpICYgMTsKIAlyeF9zdGF0dXMuc2lnbmFsID0gNjQgLSBtaW4oaGRyLT5ub2lzZSwgKHU4KTY0KTsKIAlyeF9zdGF0dXMuc3NpID0gc2lnbmFsOwotCXJ4X3N0YXR1cy5yYXRlID0gcmF0ZTsKLQlyeF9zdGF0dXMuZnJlcSA9IGRldi0+Y29uZi5mcmVxOwotCXJ4X3N0YXR1cy5jaGFubmVsID0gZGV2LT5jb25mLmNoYW5uZWw7Ci0Jcnhfc3RhdHVzLnBoeW1vZGUgPSBkZXYtPmNvbmYucGh5bW9kZTsKKwlyeF9zdGF0dXMucmF0ZV9pZHggPSByYXRlOworCXJ4X3N0YXR1cy5mcmVxID0gZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCXJ4X3N0YXR1cy5iYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7CiAJcnhfc3RhdHVzLm1hY3RpbWUgPSBsZTY0X3RvX2NwdShoZHItPm1hY190aW1lKTsKIAlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7CiAJaWYgKGZsYWdzICYgKDEgPDwgMTMpKQpAQCAtNTA3LDYgKzU0Niw4IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKKwlwcml2LT52aWYgPSBjb25mLT52aWY7CisKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPk1BQ1tpXSwKQEAgLTUyMSw2ICs1NjIsNyBAQAogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJcHJpdi0+bW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX01OVFI7CisJcHJpdi0+dmlmID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBydGw4MTg3X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKQEAgLTY4MCwxOSArNzIyLDIyIEBACiAJdXNiX2dldF9kZXYodWRldik7CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9xdWV1ZSk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmNoYW5uZWxzKSAhPSBzaXplb2YocnRsODE4eF9jaGFubmVscykpOworCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXMpICE9IHNpemVvZihydGw4MTh4X3JhdGVzKSk7CisKIAltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIHJ0bDgxOHhfY2hhbm5lbHMsIHNpemVvZihydGw4MTh4X2NoYW5uZWxzKSk7CiAJbWVtY3B5KHByaXYtPnJhdGVzLCBydGw4MTh4X3JhdGVzLCBzaXplb2YocnRsODE4eF9yYXRlcykpOwogCXByaXYtPm1hcCA9IChzdHJ1Y3QgcnRsODE4eF9jc3IgKikweEZGMDA7Ci0JcHJpdi0+bW9kZXNbMF0ubW9kZSA9IE1PREVfSUVFRTgwMjExRzsKLQlwcml2LT5tb2Rlc1swXS5udW1fcmF0ZXMgPSBBUlJBWV9TSVpFKHJ0bDgxOHhfcmF0ZXMpOwotCXByaXYtPm1vZGVzWzBdLnJhdGVzID0gcHJpdi0+cmF0ZXM7Ci0JcHJpdi0+bW9kZXNbMF0ubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShydGw4MTh4X2NoYW5uZWxzKTsKLQlwcml2LT5tb2Rlc1swXS5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOwotCXByaXYtPm1vZGVzWzFdLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7Ci0JcHJpdi0+bW9kZXNbMV0ubnVtX3JhdGVzID0gNDsKLQlwcml2LT5tb2Rlc1sxXS5yYXRlcyA9IHByaXYtPnJhdGVzOwotCXByaXYtPm1vZGVzWzFdLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocnRsODE4eF9jaGFubmVscyk7Ci0JcHJpdi0+bW9kZXNbMV0uY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKKworCXByaXYtPmJhbmQuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOworCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUocnRsODE4eF9jaGFubmVscyk7CisJcHJpdi0+YmFuZC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzOworCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsODE4eF9yYXRlcyk7CisJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKKworCiAJcHJpdi0+bW9kZSA9IElFRUU4MDIxMV9JRl9UWVBFX01OVFI7CiAJZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAogCQkgICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1M7CkBAIC03MDEsMTAgKzc0Niw2IEBACiAJZGV2LT5tYXhfcnNzaSA9IDY1OwogCWRldi0+bWF4X3NpZ25hbCA9IDY0OwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLQkJaWYgKChlcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKGRldiwgJnByaXYtPm1vZGVzW2ldKSkpCi0JCQlnb3RvIGVycl9mcmVlX2RldjsKLQogCWVlcHJvbS5kYXRhID0gZGV2OwogCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnRsODE4N19lZXByb21fcmVnaXN0ZXJfcmVhZDsKIAllZXByb20ucmVnaXN0ZXJfd3JpdGUgPSBydGw4MTg3X2VlcHJvbV9yZWdpc3Rlcl93cml0ZTsKQEAgLTcyOCwyMCArNzY5LDIwIEBACiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzEgKyBpLAogCQkJCSAgJnR4cHdyKTsKLQkJKCpjaGFubmVsKyspLnZhbCA9IHR4cHdyICYgMHhGRjsKLQkJKCpjaGFubmVsKyspLnZhbCA9IHR4cHdyID4+IDg7CisJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKKwkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzQgKyBpLAogCQkJCSAgJnR4cHdyKTsKLQkJKCpjaGFubmVsKyspLnZhbCA9IHR4cHdyICYgMHhGRjsKLQkJKCpjaGFubmVsKyspLnZhbCA9IHR4cHdyID4+IDg7CisJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKKwkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzYgKyBpLAogCQkJCSAgJnR4cHdyKTsKLQkJKCpjaGFubmVsKyspLnZhbCA9IHR4cHdyICYgMHhGRjsKLQkJKCpjaGFubmVsKyspLnZhbCA9IHR4cHdyID4+IDg7CisJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKKwkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKIAl9CiAKIAllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9CQVNFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuYwppbmRleCBiNzEzZGUxLi45MTQ2Mzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X3J0bDgyMjUuYwpAQCAtMjgzLDggKzI4Myw4IEBACiAJdTMyIHJlZzsKIAlpbnQgaTsKIAotCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS52YWwgJiAweEY7Ci0Jb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS52YWwgPj4gNDsKKwljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgJiAweEY7CisJb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSA+PiA0OwogCiAJY2NrX3Bvd2VyID0gbWluKGNja19wb3dlciwgKHU4KTExKTsKIAlvZmRtX3Bvd2VyID0gbWluKG9mZG1fcG93ZXIsICh1OCkzNSk7CkBAIC01MDAsOCArNTAwLDggQEAKIAl1MzIgcmVnOwogCWludCBpOwogCi0JY2NrX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLnZhbCAmIDB4RjsKLQlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLnZhbCA+PiA0OworCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RjsKKwlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlID4+IDQ7CiAKIAljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMTUpOwogCWNja19wb3dlciArPSBwcml2LT50eHB3cl9iYXNlICYgMHhGOwpAQCAtNzM1LDEzICs3MzUsMTQgQEAKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgY2hhbiA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKIAlpZiAocHJpdi0+cmYtPmluaXQgPT0gcnRsODIyNV9yZl9pbml0KQotCQlydGw4MjI1X3JmX3NldF90eF9wb3dlcihkZXYsIGNvbmYtPmNoYW5uZWwpOworCQlydGw4MjI1X3JmX3NldF90eF9wb3dlcihkZXYsIGNoYW4pOwogCWVsc2UKLQkJcnRsODIyNXoyX3JmX3NldF90eF9wb3dlcihkZXYsIGNvbmYtPmNoYW5uZWwpOworCQlydGw4MjI1ejJfcmZfc2V0X3R4X3Bvd2VyKGRldiwgY2hhbik7CiAKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg3LCBydGw4MjI1X2NoYW5bY29uZi0+Y2hhbm5lbCAtIDFdKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg3LCBydGw4MjI1X2NoYW5bY2hhbiAtIDFdKTsKIAltc2xlZXAoMTApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4LmgKaW5kZXggMWU3ZDZmOC4uNGY3ZDM4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHguaApAQCAtMTc1LDc0ICsxNzUsNCBAQAogCXZvaWQgKCpzZXRfY2hhbikoc3RydWN0IGllZWU4MDIxMV9odyAqLCBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKik7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIHJ0bDgxOHhfcmF0ZXNbXSA9IHsKLQl7IC5yYXRlID0gMTAsCi0JICAudmFsID0gMCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDSyB9LAotCXsgLnJhdGUgPSAyMCwKLQkgIC52YWwgPSAxLAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLIH0sCi0JeyAucmF0ZSA9IDU1LAotCSAgLnZhbCA9IDIsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0sgfSwKLQl7IC5yYXRlID0gMTEwLAotCSAgLnZhbCA9IDMsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0sgfSwKLQl7IC5yYXRlID0gNjAsCi0JICAudmFsID0gNCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLQl7IC5yYXRlID0gOTAsCi0JICAudmFsID0gNSwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLQl7IC5yYXRlID0gMTIwLAotCSAgLnZhbCA9IDYsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDE4MCwKLQkgIC52YWwgPSA3LAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfT0ZETSB9LAotCXsgLnJhdGUgPSAyNDAsCi0JICAudmFsID0gOCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLQl7IC5yYXRlID0gMzYwLAotCSAgLnZhbCA9IDksCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDQ4MCwKLQkgIC52YWwgPSAxMCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLQl7IC5yYXRlID0gNTQwLAotCSAgLnZhbCA9IDExLAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfT0ZETSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBydGw4MTh4X2NoYW5uZWxzW10gPSB7Ci0JeyAuY2hhbiA9IDEsCi0JICAuZnJlcSA9IDI0MTJ9LAotCXsgLmNoYW4gPSAyLAotCSAgLmZyZXEgPSAyNDE3fSwKLQl7IC5jaGFuID0gMywKLQkgIC5mcmVxID0gMjQyMn0sCi0JeyAuY2hhbiA9IDQsCi0JICAuZnJlcSA9IDI0Mjd9LAotCXsgLmNoYW4gPSA1LAotCSAgLmZyZXEgPSAyNDMyfSwKLQl7IC5jaGFuID0gNiwKLQkgIC5mcmVxID0gMjQzN30sCi0JeyAuY2hhbiA9IDcsCi0JICAuZnJlcSA9IDI0NDJ9LAotCXsgLmNoYW4gPSA4LAotCSAgLmZyZXEgPSAyNDQ3fSwKLQl7IC5jaGFuID0gOSwKLQkgIC5mcmVxID0gMjQ1Mn0sCi0JeyAuY2hhbiA9IDEwLAotCSAgLmZyZXEgPSAyNDU3fSwKLQl7IC5jaGFuID0gMTEsCi0JICAuZnJlcSA9IDI0NjJ9LAotCXsgLmNoYW4gPSAxMiwKLQkgIC5mcmVxID0gMjQ2N30sCi0JeyAuY2hhbiA9IDEzLAotCSAgLmZyZXEgPSAyNDcyfSwKLQl7IC5jaGFuID0gMTQsCi0JICAuZnJlcSA9IDI0ODR9Ci19OwotCiAjZW5kaWYgLyogUlRMODE4WF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCA4OGVmZTFiLi5iY2VkM2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTk2MiwxMiArOTYyLDEyIEBACiAvKiBnZXQgTnRoIGVsZW1lbnQgb2YgdGhlIGxpbmtlZCBsaXN0ICovCiBzdGF0aWMgc3RydWN0IHN0cmlwICpzdHJpcF9nZXRfaWR4KGxvZmZfdCBwb3MpIAogewotCXN0cnVjdCBsaXN0X2hlYWQgKmw7CisJc3RydWN0IHN0cmlwICpzdHI7CiAJaW50IGkgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9yY3UobCwgJnN0cmlwX2xpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdHIsICZzdHJpcF9saXN0LCBsaXN0KSB7CiAJCWlmIChwb3MgPT0gaSkKLQkJCXJldHVybiBsaXN0X2VudHJ5KGwsIHN0cnVjdCBzdHJpcCwgbGlzdCk7CisJCQlyZXR1cm4gc3RyOwogCQkrK2k7CiAJfQogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5oCmluZGV4IDI3MTcyY2QuLjlhYjM2MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmgKQEAgLTg1LDcgKzg1LDcgQEAKICNkZWZpbmUJCUhBU1JfTU1DX0lOVFIJCTB4MDAwMgkvKiBJbnRlcnJ1cHQgcmVxdWVzdCBmcm9tIE1NQyAqLwogI2RlZmluZQkJSEFTUl9NTUNfQlVTWQkJMHgwMDA0CS8qIE1NQyBidXN5IGluZGljYXRpb24gKi8KICNkZWZpbmUJCUhBU1JfUFNBX0JVU1kJCTB4MDAwOAkvKiBMQU4gcGFyYW1ldGVyIHN0b3JhZ2UgYXJlYSBidXN5ICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHR5cGVkZWYgc3RydWN0IGhhX3QJaGFfdDsKIHN0cnVjdCBoYV90CkBAIC0yOTIsNyArMjkyLDcgQEAKICNkZWZpbmUJTU1XX0VYVF9BTlRfSU5URVJOQUwJMHgwMAkvKiBJbnRlcm5hbCBhbnRlbm5hICovCiAjZGVmaW5lCU1NV19FWFRfQU5UX0VYVEVSTkFMCTB4MDMJLyogRXh0ZXJuYWwgYW50ZW5uYSAqLwogI2RlZmluZQlNTVdfRVhUX0FOVF9JUV9URVNUCTB4MUMJLyogSVEgdGVzdCBwYXR0ZXJuIChzZXQgdG8gMCkgKi8KLX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZQlNTVdfU0laRQkzNwogCkBAIC0zNDcsNyArMzQ3LDcgQEAKICAgdW5zaWduZWQgY2hhcgltbXJfdW51c2VkNFsxXTsJCS8qIHVudXNlZCAqLwogICB1bnNpZ25lZCBjaGFyCW1tcl9mZWVfZGF0YV9sOwkJLyogUmVhZCBkYXRhIGZyb20gRUVQUk9NIChsb3cpICovCiAgIHVuc2lnbmVkIGNoYXIJbW1yX2ZlZV9kYXRhX2g7CQkvKiBSZWFkIGRhdGEgZnJvbSBFRVBST00gKGhpZ2gpICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUJTU1SX1NJWkUJMzYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IDA2ZWVhNmEuLmJhZjc0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogICogV3JpdGUgdG8gY2FyZCdzIEhvc3QgQWRhcHRlciBDb21tYW5kIFJlZ2lzdGVyLiBJbmNsdWRlIGEgZGVsYXkgZm9yCiAgKiB0aG9zZSB0aW1lcyB3aGVuIGl0IGlzIG5lZWRlZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogaGFjcl93cml0ZV9zbG93KHVfbG9uZwliYXNlLAogCQl1X2NoYXIJaGFjcikKIHsKQEAgLTI1NSw3ICsyNTUsNyBAQAogLyoKICAqIFdyaXRlIDEgYnl0ZSB0byB0aGUgTU1DLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBtbWNfb3V0KHVfbG9uZwkJYmFzZSwKIAl1X3Nob3J0CQlvLAogCXVfY2hhcgkJZCkKQEAgLTI3NSw3ICsyNzUsNyBAQAogICogUm91dGluZSB0byB3cml0ZSBieXRlcyB0byB0aGUgTW9kZW0gTWFuYWdlbWVudCBDb250cm9sbGVyLgogICogV2Ugc3RhcnQgYnkgdGhlIGVuZCBiZWNhdXNlIGl0IGlzIHRoZSB3YXkgaXQgc2hvdWxkIGJlICEKICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogbW1jX3dyaXRlKHVfbG9uZwliYXNlLAogCSAgdV9jaGFyCW8sCiAJICB1X2NoYXIgKgliLApAQCAtMjkzLDcgKzI5Myw3IEBACiAgKiBSZWFkIDEgYnl0ZSBmcm9tIHRoZSBNTUMuCiAgKiBPcHRpbWlzZWQgdmVyc2lvbiBmb3IgMSBieXRlLCBhdm9pZCB1c2luZyBtZW1vcnkuLi4KICAqLwotc3RhdGljIGlubGluZSB1X2NoYXIKK3N0YXRpYyB1X2NoYXIKIG1tY19pbih1X2xvbmcJYmFzZSwKICAgICAgICB1X3Nob3J0CW8pCiB7CkBAIC0zMTgsNyArMzE4LDcgQEAKICAqIChjb2RlIGhhcyBqdXN0IGJlZW4gbW92ZWQgaW4gdGhlIGFib3ZlIGZ1bmN0aW9uKQogICogV2Ugc3RhcnQgYnkgdGhlIGVuZCBiZWNhdXNlIGl0IGlzIHRoZSB3YXkgaXQgc2hvdWxkIGJlICEKICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogbW1jX3JlYWQodV9sb25nCQliYXNlLAogCSB1X2NoYXIJCW8sCiAJIHVfY2hhciAqCWIsCkBAIC0zNTAsOSArMzUwLDggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBXYWl0IGZvciB0aGUgZnJlcXVlbmN5IEVFcHJvbSB0byBjb21wbGV0ZSBhIGNvbW1hbmQuLi4KLSAqIEkgaG9wZSB0aGlzIG9uZSB3aWxsIGJlIG9wdGltYWxseSBpbmxpbmVkLi4uCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGZlZV93YWl0KHVfbG9uZwkJYmFzZSwJLyogaS9vIHBvcnQgb2YgdGhlIGNhcmQgKi8KIAkgaW50CQlkZWxheSwJLyogQmFzZSBkZWxheSB0byB3YWl0IGZvciAqLwogCSBpbnQJCW51bWJlcikJLyogTnVtYmVyIG9mIHRpbWUgdG8gd2FpdCAqLwpAQCAtNzM4LDkgKzczNyw5IEBACiB9CiAKIC8qIENhbGxlZCB3aGVuIGEgV2F2ZVBvaW50IGJlYWNvbiBpcyByZWNlaXZlZCAqLwotc3RhdGljIGlubGluZSB2b2lkIHdsX3JvYW1fZ2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICogIGRldiwKLQkJCQkgIHVfY2hhciAqICBoZHIsICAgLyogQmVhY29uIGhlYWRlciAqLwotCQkJCSAgdV9jaGFyICogIHN0YXRzKSAvKiBTTlIsIFNpZ25hbCBxdWFsaXR5IAorc3RhdGljIHZvaWQgd2xfcm9hbV9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKiAgZGV2LAorCQkJICAgdV9jaGFyICogIGhkciwgICAvKiBCZWFjb24gaGVhZGVyICovCisJCQkgICB1X2NoYXIgKiAgc3RhdHMpIC8qIFNOUiwgU2lnbmFsIHF1YWxpdHkKIAkJCQkJCSAgICAgIG9mIHBhY2tldCAqLwogewogICB3YXZlcG9pbnRfYmVhY29uICpiZWFjb249ICh3YXZlcG9pbnRfYmVhY29uICopaGRyOyAvKiBSY3ZkLiBCZWFjb24gKi8KQEAgLTc5NCw3ICs3OTMsNyBAQAogc3RhdGljIGlubGluZSBpbnQgV0FWRUxBTl9CRUFDT04odW5zaWduZWQgY2hhciAqZGF0YSkKIHsKICAgd2F2ZXBvaW50X2JlYWNvbiAqYmVhY29uPSAod2F2ZXBvaW50X2JlYWNvbiAqKWRhdGE7Ci0gIHN0YXRpYyB3YXZlcG9pbnRfYmVhY29uIGJlYWNvbl90ZW1wbGF0ZT17MHhhYSwweGFhLDB4MDMsMHgwOCwweDAwLDB4MGUsMHgyMCwweDAzLDB4MDB9OworICBzdGF0aWMgY29uc3Qgd2F2ZXBvaW50X2JlYWNvbiBiZWFjb25fdGVtcGxhdGU9ezB4YWEsMHhhYSwweDAzLDB4MDgsMHgwMCwweDBlLDB4MjAsMHgwMywweDAwfTsKICAgCiAgIGlmKG1lbWNtcChiZWFjb24sJmJlYWNvbl90ZW1wbGF0ZSw5KT09MCkKICAgICByZXR1cm4gMTsKQEAgLTk4MCw3ICs5NzksNyBAQAogICogd2F2ZWxhbl9pbnRlcnJ1cHQgaXMgbm90IGFuIG9wdGlvbi4uLiksIHNvIHlvdSBtYXkgZXhwZXJpZW5jZQogICogc29tZSBkZWxheSBzb21ldGltZS4uLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiB3dl84MjU5M19yZWNvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqCWRldikKIHsKICAgbmV0X2xvY2FsICoJCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyMzMsNyArMTIzMiw3IEBACiAvKgogICogRHVtcCBwYWNrZXQgaGVhZGVyIChhbmQgY29udGVudCBpZiBuZWNlc3NhcnkpIG9uIHRoZSBzY3JlZW4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogd3ZfcGFja2V0X2luZm8odV9jaGFyICoJCXAsCQkvKiBQYWNrZXQgdG8gZHVtcCAqLwogCSAgICAgICBpbnQJCWxlbmd0aCwJCS8qIExlbmd0aCBvZiB0aGUgcGFja2V0ICovCiAJICAgICAgIGNoYXIgKgkJbXNnMSwJCS8qIE5hbWUgb2YgdGhlIGRldmljZSAqLwpAQCAtMTI3Miw3ICsxMjcxLDcgQEAKICAqIFRoaXMgaXMgdGhlIGluZm9ybWF0aW9uIHdoaWNoIGlzIGRpc3BsYXllZCBieSB0aGUgZHJpdmVyIGF0IHN0YXJ0dXAKICAqIFRoZXJlICBpcyBhIGxvdCBvZiBmbGFnIHRvIGNvbmZpZ3VyZSBpdCBhdCB5b3VyIHdpbGwuLi4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogd3ZfaW5pdF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQogewogICB1bnNpZ25lZCBpbnQJYmFzZSA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMTUwOSw3ICsxNTA4LDcgQEAKICAqIEZyZXF1ZW5jeSBzZXR0aW5nIChmb3IgaGFyZHdhcmUgYWJsZSBvZiBpdCkKICAqIEl0J3MgYSBiaXQgY29tcGxpY2F0ZWQgYW5kIHlvdSBkb24ndCByZWFsbHkgd2FudCB0byBsb29rIGludG8gaXQuLi4KICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIHd2X3NldF9mcmVxdWVuY3kodV9sb25nCQliYXNlLAkvKiBpL28gcG9ydCBvZiB0aGUgY2FyZCAqLwogCQkgaXdfZnJlcSAqCWZyZXF1ZW5jeSkKIHsKQEAgLTE3MDYsNyArMTcwNSw3IEBACiAvKgogICogR2l2ZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgZnJlcXVlbmNpZXMKICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIHd2X2ZyZXF1ZW5jeV9saXN0KHVfbG9uZwliYXNlLAkvKiBpL28gcG9ydCBvZiB0aGUgY2FyZCAqLwogCQkgIGl3X2ZyZXEgKglsaXN0LAkvKiBMaXN0IG9mIGZyZXF1ZW5jeSB0byBmaWxsICovCiAJCSAgaW50CQltYXgpCS8qIE1heGltdW0gbnVtYmVyIG9mIGZyZXF1ZW5jaWVzICovCkBAIC0yNzU5LDcgKzI3NTgsNyBAQAogICogZnJhbWUgcG9pbnRlciBhbmQgdmVyaWZ5IHRoYXQgdGhlIGZyYW1lIHNlZW0gY29ycmVjdAogICogKGNhbGxlZCBieSB3dl9wYWNrZXRfcmN2KCkpCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiB3dl9zdGFydF9vZl9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiwKIAkJICBpbnQJCXJmcCwJLyogZW5kIG9mIGZyYW1lICovCiAJCSAgaW50CQl3cmFwKQkvKiBzdGFydCBvZiBidWZmZXIgKi8KQEAgLTI4MjEsNyArMjgyMCw3IEBACiAgKiBOb3RlOiBpZiBhbnkgZXJyb3JzIG9jY3VyLCB0aGUgcGFja2V0IGlzICJkcm9wcGVkIG9uIHRoZSBmbG9vciIKICAqIChjYWxsZWQgYnkgd3ZfcGFja2V0X3JjdigpKQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiB3dl9wYWNrZXRfcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqCQlkZXYsCiAJICAgICAgIGludAkJZmRfcCwKIAkgICAgICAgaW50CQlza3NpemUpCkBAIC0yOTIyLDcgKzI5MjEsNyBAQAogICogKGNhbGxlZCBieSB3YXZlbGFuX2ludGVycnVwdCgpKQogICogTm90ZSA6IHRoZSBzcGlubG9jayBpcyBhbHJlYWR5IGdyYWJiZWQgZm9yIHVzIGFuZCBpcnEgYXJlIGRpc2FibGVkLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiB3dl9wYWNrZXRfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQogewogICB1bnNpZ25lZCBpbnQJYmFzZSA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMzA1Niw3ICszMDU1LDcgQEAKICAqIHRoZSB0cmFuc21pdC4KICAqIChjYWxsZWQgaW4gd2F2ZWxhbl9wYWNrZXRfeG1pdCgpKQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiB3dl9wYWNrZXRfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYsCiAJCXZvaWQgKgkJYnVmLAogCQlzaG9ydAkJbGVuZ3RoKQpAQCAtMzE4MCw3ICszMTc5LDcgQEAKICAqIFJvdXRpbmUgdG8gaW5pdGlhbGl6ZSB0aGUgTW9kZW0gTWFuYWdlbWVudCBDb250cm9sbGVyLgogICogKGNhbGxlZCBieSB3dl9od19jb25maWcoKSkKICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIHd2X21tY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQogewogICB1bnNpZ25lZCBpbnQJYmFzZSA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMzY5OSw3ICszNjk4LDcgQEAKICAqIHdhdmVsYW4uCiAgKiAoY2FsbGVkIGJ5IHd2X2NvbmZpZygpKQogICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogd3ZfcGNtY2lhX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQogewogICBpbnQJCWk7CkBAIC0zODY0LDcgKzM4NjMsNyBAQAogICoJMi4gU3RhcnQgdGhlIExBTiBjb250cm9sbGVyJ3MgcmVjZWl2ZSB1bml0CiAgKiAoY2FsbGVkIGJ5IHdhdmVsYW5fZXZlbnQoKSwgd2F2ZWxhbl93YXRjaGRvZygpIGFuZCB3YXZlbGFuX29wZW4oKSkKICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogd3ZfaHdfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpCiB7CiAgIG5ldF9sb2NhbCAqCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTM4OTUsNyArMzg5NCw3IEBACiAgKiBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiAgKiAoY2FsbGVkIGJ5IHdhdmVsYW5fZXZlbnQoKSkKICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIHd2X3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKglsaW5rKQogewogICBzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBsaW5rLT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5oCmluZGV4IGZhYmM2M2UuLjJlNGJmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmgKQEAgLTMwOSw3ICszMDksNyBAQAogI2RlZmluZQlNTVdfRVhUX0FOVF9JTlRFUk5BTAkweDAwCS8qIEludGVybmFsIGFudGVubmEgKi8KICNkZWZpbmUJTU1XX0VYVF9BTlRfRVhURVJOQUwJMHgwMwkvKiBFeHRlcm5hbCBhbnRlbm5hICovCiAjZGVmaW5lCU1NV19FWFRfQU5UX0lRX1RFU1QJMHgxQwkvKiBJUSB0ZXN0IHBhdHRlcm4gKHNldCB0byAwKSAqLwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFNpemUgZm9yIHN0cnVjdHVyZSBjaGVja2luZyAoaWYgcGFkZGluZyBpcyBjb3JyZWN0KSAqLwogI2RlZmluZQlNTVdfU0laRQkzNwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAppbmRleCAzM2RkOTcwLi42MjgxOTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaApAQCAtNjM3LDcgKzYzNyw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLSBNT0RFTSBNQU5BR0VNRU5UIFNVQlJPVVRJTkVTIC0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgaW5saW5lIHVfY2hhcgkJLyogZGF0YSAqLwogCWhhc3JfcmVhZCh1X2xvbmcpOwkvKiBSZWFkIHRoZSBob3N0IGludGVyZmFjZSA6IGJhc2UgYWRkcmVzcyAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogCWhhY3Jfd3JpdGUodV9sb25nLAkvKiBXcml0ZSB0byBob3N0IGludGVyZmFjZSA6IGJhc2UgYWRkcmVzcyAqLwogCQkgICB1X2NoYXIpLAkvKiBkYXRhICovCiAJaGFjcl93cml0ZV9zbG93KHVfbG9uZywKQEAgLTY1MSw3ICs2NTEsNyBAQAogCQkgIGludCwJCS8qIE9mZnNldCBpbiBwc2EgKi8KIAkJICB1X2NoYXIgKiwJLyogQnVmZmVyIGluIG1lbW9yeSAqLwogCQkgIGludCk7CQkvKiBMZW5ndGggb2YgYnVmZmVyICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiAJbW1jX291dCh1X2xvbmcsCQkvKiBXcml0ZSAxIGJ5dGUgdG8gdGhlIE1vZGVtIE1hbmFnIENvbnRyb2wgKi8KIAkJdV9zaG9ydCwKIAkJdV9jaGFyKSwKQEAgLTY1OSwxMCArNjU5LDEwIEBACiAJCSAgdV9jaGFyLAogCQkgIHVfY2hhciAqLAogCQkgIGludCk7Ci1zdGF0aWMgaW5saW5lIHVfY2hhcgkJLyogUmVhZCAxIGJ5dGUgZnJvbSB0aGUgTU1DICovCitzdGF0aWMgdV9jaGFyCQkJLyogUmVhZCAxIGJ5dGUgZnJvbSB0aGUgTU1DICovCiAJbW1jX2luKHVfbG9uZywKIAkgICAgICAgdV9zaG9ydCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiAJbW1jX3JlYWQodV9sb25nLAkvKiBSZWFkIG4gYnl0ZXMgZnJvbSB0aGUgTU1DICovCiAJCSB1X2NoYXIsCiAJCSB1X2NoYXIgKiwKQEAgLTY4OCwxMCArNjg4LDEwIEBACiAJCSAgICAgaW50LAogCQkgICAgIGNoYXIgKiwKIAkJICAgICBpbnQpOwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogCXd2XzgyNTkzX3JlY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBSZWNvbmZpZ3VyZSB0aGUgY29udHJvbGxlciAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBERUJVRyAmIElORk8gU1VCUk9VVElORVMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogCXd2X2luaXRfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogZGlzcGxheSBzdGFydHVwIGluZm8gKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gSU9DVEwsIFNUQVRTICYgUkVDT05GSUcgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGVuX3N0YXRzCSoKQEAgLTY5OSwxNyArNjk5LDE3IEBACiBzdGF0aWMgaXdfc3RhdHMgKgogCXdhdmVsYW5fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUEFDS0VUIFJFQ0VQVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIAl3dl9zdGFydF9vZl9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqLAkvKiBTZWVrIGJlZ2dpbmluZyBvZiBjdXJyZW50IGZyYW1lICovCiAJCQkgIGludCwJLyogZW5kIG9mIGZyYW1lICovCiAJCQkgIGludCk7CS8qIHN0YXJ0IG9mIGJ1ZmZlciAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogCXd2X3BhY2tldF9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICosCS8qIFJlYWQgYSBwYWNrZXQgZnJvbSBhIGZyYW1lICovCiAJCSAgICAgICBpbnQsCiAJCSAgICAgICBpbnQpLAogCXd2X3BhY2tldF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKik7CS8qIFJlYWQgYWxsIHBhY2tldHMgd2FpdGluZyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBBQ0tFVCBUUkFOU01JU1NJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiAJd3ZfcGFja2V0X3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICosCS8qIFdyaXRlIGEgcGFja2V0IHRvIHRoZSBUeCBidWZmZXIgKi8KIAkJCXZvaWQgKiwKIAkJCXNob3J0KTsKQEAgLTcxNywyMCArNzE3LDIwIEBACiAJd2F2ZWxhbl9wYWNrZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLAkvKiBTZW5kIGEgcGFja2V0ICovCiAJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBIQVJEV0FSRSBDT05GSUdVUkFUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogCXd2X21tY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBJbml0aWFsaXplIHRoZSBtb2RlbSAqLwogc3RhdGljIGludAogCXd2X3J1X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKiksCS8qIFN0b3AgdGhlIGk4MjU5MyByZWNlaXZlciB1bml0ICovCiAJd3ZfcnVfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKik7CS8qIFN0YXJ0IHRoZSBpODI1OTMgcmVjZWl2ZXIgdW5pdCAqLwogc3RhdGljIGludAogCXd2XzgyNTkzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogQ29uZmlndXJlIHRoZSBpODI1OTMgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiAJd3ZfcGNtY2lhX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBSZXNldCB0aGUgcGNtY2lhIGludGVyZmFjZSAqLwogc3RhdGljIGludAogCXd2X2h3X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsJLyogUmVzZXQgJiBjb25maWd1cmUgdGhlIHdob2xlIGhhcmR3YXJlICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiAJd3ZfaHdfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CS8qIFNhbWUsICsgc3RhcnQgcmVjZWl2ZXIgdW5pdCAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIAl3dl9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOwkvKiBDb25maWd1cmUgdGhlIHBjbWNpYSBpbnRlcmZhY2UgKi8KIHN0YXRpYyB2b2lkCiAJd3ZfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7LyogUmVtb3ZlIGEgZGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKaW5kZXggOTllNWIwMy4uMGFjYjVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwpAQCAtNzcxLDEwICs3NzEsMTAgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMzIgaW9yZXFzW10gPSB7CiAJCXsgQ1JfWkQxMjExQl9SRVRSWV9NQVgsCQkweDAyMDIwMjAyIH0sCi0JCXsgQ1JfWkQxMjExQl9UWF9QV1JfQ1RMNCwJMHgwMDdmMDAzZiB9LAotCQl7IENSX1pEMTIxMUJfVFhfUFdSX0NUTDMsCTB4MDA3ZjAwM2YgfSwKLQkJeyBDUl9aRDEyMTFCX1RYX1BXUl9DVEwyLCAgICAgICAweDAwM2YwMDFmIH0sCi0JCXsgQ1JfWkQxMjExQl9UWF9QV1JfQ1RMMSwgICAgICAgMHgwMDFmMDAwZiB9LAorCQl7IENSX1pEMTIxMUJfQ1dJTl9NQVhfTUlOX0FDMCwJMHgwMDdmMDAzZiB9LAorCQl7IENSX1pEMTIxMUJfQ1dJTl9NQVhfTUlOX0FDMSwJMHgwMDdmMDAzZiB9LAorCQl7IENSX1pEMTIxMUJfQ1dJTl9NQVhfTUlOX0FDMiwgIDB4MDAzZjAwMWYgfSwKKwkJeyBDUl9aRDEyMTFCX0NXSU5fTUFYX01JTl9BQzMsICAweDAwMWYwMDBmIH0sCiAJCXsgQ1JfWkQxMjExQl9BSUZTX0NUTDEsCQkweDAwMjgwMDI4IH0sCiAJCXsgQ1JfWkQxMjExQl9BSUZTX0NUTDIsCQkweDAwOEMwMDNDIH0sCiAJCXsgQ1JfWkQxMjExQl9UWE9QLAkJMHgwMTgwMDgyNCB9LApAQCAtODA5LDYgKzgwOSw3IEBACiAJCXsgQ1JfQUZURVJfUE5QLAkJCTB4MSB9LAogCQl7IENSX1dFUF9QUk9URUNULAkJMHgxMTQgfSwKIAkJeyBDUl9JRlNfVkFMVUUsCQkJSUZTX1ZBTFVFX0RFRkFVTFQgfSwKKwkJeyBDUl9DQU1fTU9ERSwJCQlNT0RFX0FQX1dEU30sCiAJfTsKIAogCVpEX0FTU0VSVChtdXRleF9pc19sb2NrZWQoJmNoaXAtPm11dGV4KSk7CkBAIC05ODYsNyArOTg3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQgc2V0X21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgaW50IGdtb2RlKQogewogCXUzMiByYXRlczsKIAlaRF9BU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZjaGlwLT5tdXRleCkpOwpAQCAtOTk0LDE3ICs5OTUsMTIgQEAKIAkgKiB0aGF0IHRoZSBkZXZpY2UgaXMgc3VwcG9ydGluZy4gVW50aWwgZnVydGhlciBub3RpY2Ugd2Ugc2hvdWxkIHRyeQogCSAqIHRvIHN1cHBvcnQgODAyLjExZyBhbHNvIGZvciBmdWxsIHNwZWVkIFVTQi4KIAkgKi8KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE1PREVfSUVFRTgwMjExQjoKKwlpZiAoIWdtb2RlKQogCQlyYXRlcyA9IENSX1JBVEVfMU18Q1JfUkFURV8yTXxDUl9SQVRFXzVfNU18Q1JfUkFURV8xMU07Ci0JCWJyZWFrOwotCWNhc2UgTU9ERV9JRUVFODAyMTFHOgorCWVsc2UKIAkJcmF0ZXMgPSBDUl9SQVRFXzFNfENSX1JBVEVfMk18Q1JfUkFURV81XzVNfENSX1JBVEVfMTFNfAogCQkJQ1JfUkFURV82TXxDUl9SQVRFXzEyTXxDUl9SQVRFXzI0TTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJcmV0dXJuIHpkX2lvd3JpdGUzMl9sb2NrZWQoY2hpcCwgcmF0ZXMsIENSX01BTkRBVE9SWV9SQVRFX1RCTCk7CiB9CiAKQEAgLTExMDgsNyArMTEwNCw3IEBACiAJICogSXQgbWlnaHQgYmUgZGlzY3Vzc2VkLCB3aGV0aGVyIHdlIHNob3VsZCBzdXBwcG9ydCBwdXJlIGIgbW9kZSBmb3IKIAkgKiBmdWxsIHNwZWVkIFVTQi4KIAkgKi8KLQlyID0gc2V0X21hbmRhdG9yeV9yYXRlcyhjaGlwLCBNT0RFX0lFRUU4MDIxMUcpOworCXIgPSBzZXRfbWFuZGF0b3J5X3JhdGVzKGNoaXAsIDEpOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAkvKiBEaXNhYmxpbmcgaW50ZXJydXB0cyBpcyBjZXJ0YWlubHkgYSBzbWFydCB0aGluZyBoZXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCmluZGV4IDAwOWMwMzcuLmY4YzA2MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKQEAgLTQ4OSw2ICs0ODksNyBAQAogCiAjZGVmaW5lIENSX1JYX09GRlNFVAkJCUNUTF9SRUcoMHgwNjVjKQogCisjZGVmaW5lIENSX0JDTl9MRU5HVEgJCQlDVExfUkVHKDB4MDY2NCkKICNkZWZpbmUgQ1JfUEhZX0RFTEFZCQkJQ1RMX1JFRygweDA2NkMpCiAjZGVmaW5lIENSX0JDTl9GSUZPCQkJQ1RMX1JFRygweDA2NzApCiAjZGVmaW5lIENSX1NOSUZGRVJfT04JCQlDVExfUkVHKDB4MDY3NCkKQEAgLTU0NSw2ICs1NDYsOCBAQAogI2RlZmluZSBSWF9GSUxURVJfQ1RSTCAoUlhfRklMVEVSX1JUUyB8IFJYX0ZJTFRFUl9DVFMgfCBcCiAJUlhfRklMVEVSX0NGRU5EIHwgUlhfRklMVEVSX0NGQUNLKQogCisjZGVmaW5lIEJDTl9NT0RFX0lCU1MJCQkweDIwMDAwMDAKKwogLyogTW9uaXRvciBtb2RlIHNldHMgZmlsdGVyIHRvIDB4ZmZmZmYgKi8KIAogI2RlZmluZSBDUl9BQ0tfVElNRU9VVF9FWFQJCUNUTF9SRUcoMHgwNjkwKQpAQCAtNTc4LDYgKzU4MSwxMSBAQAogCiAvKiBDQU06IENvbnRpbnVvdXMgQWNjZXNzIE1vZGUgKHBvd2VyIG1hbmFnZW1lbnQpICovCiAjZGVmaW5lIENSX0NBTV9NT0RFCQkJQ1RMX1JFRygweDA3MDApCisjZGVmaW5lIE1PREVfSUJTUwkJCTB4MAorI2RlZmluZSBNT0RFX0FQCQkJCTB4MQorI2RlZmluZSBNT0RFX1NUQQkJCTB4MgorI2RlZmluZSBNT0RFX0FQX1dEUwkJCTB4MworCiAjZGVmaW5lIENSX0NBTV9ST0xMX1RCX0xPVwkJQ1RMX1JFRygweDA3MDQpCiAjZGVmaW5lIENSX0NBTV9ST0xMX1RCX0hJR0gJCUNUTF9SRUcoMHgwNzA4KQogI2RlZmluZSBDUl9DQU1fQUREUkVTUwkJCUNUTF9SRUcoMHgwNzBDKQpAQCAtNjI1LDExICs2MzMsMTAgQEAKICNkZWZpbmUgQ1JfU19NRAkJCQlDVExfUkVHKDB4MDgzMCkKIAogI2RlZmluZSBDUl9VU0JfREVCVUdfUE9SVAkJQ1RMX1JFRygweDA4ODgpCi0KLSNkZWZpbmUgQ1JfWkQxMjExQl9UWF9QV1JfQ1RMMQkJQ1RMX1JFRygweDBiMDApCi0jZGVmaW5lIENSX1pEMTIxMUJfVFhfUFdSX0NUTDIJCUNUTF9SRUcoMHgwYjA0KQotI2RlZmluZSBDUl9aRDEyMTFCX1RYX1BXUl9DVEwzCQlDVExfUkVHKDB4MGIwOCkKLSNkZWZpbmUgQ1JfWkQxMjExQl9UWF9QV1JfQ1RMNAkJQ1RMX1JFRygweDBiMGMpCisjZGVmaW5lIENSX1pEMTIxMUJfQ1dJTl9NQVhfTUlOX0FDMAlDVExfUkVHKDB4MGIwMCkKKyNkZWZpbmUgQ1JfWkQxMjExQl9DV0lOX01BWF9NSU5fQUMxCUNUTF9SRUcoMHgwYjA0KQorI2RlZmluZSBDUl9aRDEyMTFCX0NXSU5fTUFYX01JTl9BQzIJQ1RMX1JFRygweDBiMDgpCisjZGVmaW5lIENSX1pEMTIxMUJfQ1dJTl9NQVhfTUlOX0FDMwlDVExfUkVHKDB4MGIwYykKICNkZWZpbmUgQ1JfWkQxMjExQl9BSUZTX0NUTDEJCUNUTF9SRUcoMHgwYjEwKQogI2RlZmluZSBDUl9aRDEyMTFCX0FJRlNfQ1RMMgkJQ1RMX1JFRygweDBiMTQpCiAjZGVmaW5lIENSX1pEMTIxMUJfVFhPUAkJCUNUTF9SRUcoMHgwYjIwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfaWVlZTgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuYwppbmRleCA3YzI3N2VjLi5kOGRjNDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuYwpAQCAtNjUsMTYgKzY1LDE0IEBACiAKIHN0YXRpYyB2b2lkIHVubWFza19iZ19jaGFubmVscyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAljb25zdCBzdHJ1Y3QgY2hhbm5lbF9yYW5nZSAqcmFuZ2UsCi0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlKQorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKQogewogCXU4IGNoYW5uZWw7CiAKIAlmb3IgKGNoYW5uZWwgPSByYW5nZS0+c3RhcnQ7IGNoYW5uZWwgPCByYW5nZS0+ZW5kOyBjaGFubmVsKyspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0KLQkJCSZtb2RlLT5jaGFubmVsc1tDSEFOX1RPX0lEWChjaGFubmVsKV07Ci0JCWNoYW4tPmZsYWcgfD0gSUVFRTgwMjExX0NIQU5fV19TQ0FOIHwKLQkJCUlFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU4gfAotCQkJSUVFRTgwMjExX0NIQU5fV19JQlNTOworCQkJJnNiYW5kLT5jaGFubmVsc1tDSEFOX1RPX0lEWChjaGFubmVsKV07CisJCWNoYW4tPmZsYWdzID0gMDsKIAl9CiB9CiAKQEAgLTk3LDcgKzk1LDYgQEAKIAkJcmFuZ2UgPSB6ZF9jaGFubmVsX3JhbmdlKFpEX1JFR0RPTUFJTl9GQ0MpOwogCX0KIAotCXVubWFza19iZ19jaGFubmVscyhodywgcmFuZ2UsICZtYWMtPm1vZGVzWzBdKTsKLQl1bm1hc2tfYmdfY2hhbm5lbHMoaHcsIHJhbmdlLCAmbWFjLT5tb2Rlc1sxXSk7CisJdW5tYXNrX2JnX2NoYW5uZWxzKGh3LCByYW5nZSwgJm1hYy0+YmFuZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggNDkxMjdlNC4uNjljNDVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTM0LDc2ICszNCw2MSBAQAogCiAvKiBUaGlzIHRhYmxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBtb2R1bGF0aW9uIHJhdGVzLiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSB6ZF9yYXRlc1tdID0gewotCXsgLnJhdGUgPSAxMCwKLQkgIC52YWwgPSBaRF9DQ0tfUkFURV8xTSwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDSyB9LAotCXsgLnJhdGUgPSAyMCwKLQkgIC52YWwgPSBaRF9DQ0tfUkFURV8yTSwKLQkgIC52YWwyID0gWkRfQ0NLX1JBVEVfMk0gfCBaRF9DQ0tfUFJFQV9TSE9SVCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0sCi0JeyAucmF0ZSA9IDU1LAotCSAgLnZhbCA9IFpEX0NDS19SQVRFXzVfNU0sCi0JICAudmFsMiA9IFpEX0NDS19SQVRFXzVfNU0gfCBaRF9DQ0tfUFJFQV9TSE9SVCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX0NDS18yIH0sCi0JeyAucmF0ZSA9IDExMCwKLQkgIC52YWwgPSBaRF9DQ0tfUkFURV8xMU0sCi0JICAudmFsMiA9IFpEX0NDS19SQVRFXzExTSB8IFpEX0NDS19QUkVBX1NIT1JULAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSwKLQl7IC5yYXRlID0gNjAsCi0JICAudmFsID0gWkRfT0ZETV9SQVRFXzZNLAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfT0ZETSB9LAotCXsgLnJhdGUgPSA5MCwKLQkgIC52YWwgPSBaRF9PRkRNX1JBVEVfOU0sCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDEyMCwKLQkgIC52YWwgPSBaRF9PRkRNX1JBVEVfMTJNLAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfT0ZETSB9LAotCXsgLnJhdGUgPSAxODAsCi0JICAudmFsID0gWkRfT0ZETV9SQVRFXzE4TSwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLQl7IC5yYXRlID0gMjQwLAotCSAgLnZhbCA9IFpEX09GRE1fUkFURV8yNE0sCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCi0JeyAucmF0ZSA9IDM2MCwKLQkgIC52YWwgPSBaRF9PRkRNX1JBVEVfMzZNLAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfT0ZETSB9LAotCXsgLnJhdGUgPSA0ODAsCi0JICAudmFsID0gWkRfT0ZETV9SQVRFXzQ4TSwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX09GRE0gfSwKLQl7IC5yYXRlID0gNTQwLAotCSAgLnZhbCA9IFpEX09GRE1fUkFURV81NE0sCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9PRkRNIH0sCisJeyAuYml0cmF0ZSA9IDEwLAorCSAgLmh3X3ZhbHVlID0gWkRfQ0NLX1JBVEVfMU0sIH0sCisJeyAuYml0cmF0ZSA9IDIwLAorCSAgLmh3X3ZhbHVlID0gWkRfQ0NLX1JBVEVfMk0sCisJICAuaHdfdmFsdWVfc2hvcnQgPSBaRF9DQ0tfUkFURV8yTSB8IFpEX0NDS19QUkVBX1NIT1JULAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gNTUsCisJICAuaHdfdmFsdWUgPSBaRF9DQ0tfUkFURV81XzVNLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gWkRfQ0NLX1JBVEVfNV81TSB8IFpEX0NDS19QUkVBX1NIT1JULAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMTEwLAorCSAgLmh3X3ZhbHVlID0gWkRfQ0NLX1JBVEVfMTFNLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gWkRfQ0NLX1JBVEVfMTFNIHwgWkRfQ0NLX1BSRUFfU0hPUlQsCisJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA2MCwKKwkgIC5od192YWx1ZSA9IFpEX09GRE1fUkFURV82TSwKKwkgIC5mbGFncyA9IDAgfSwKKwl7IC5iaXRyYXRlID0gOTAsCisJICAuaHdfdmFsdWUgPSBaRF9PRkRNX1JBVEVfOU0sCisJICAuZmxhZ3MgPSAwIH0sCisJeyAuYml0cmF0ZSA9IDEyMCwKKwkgIC5od192YWx1ZSA9IFpEX09GRE1fUkFURV8xMk0sCisJICAuZmxhZ3MgPSAwIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwKKwkgIC5od192YWx1ZSA9IFpEX09GRE1fUkFURV8xOE0sCisJICAuZmxhZ3MgPSAwIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwKKwkgIC5od192YWx1ZSA9IFpEX09GRE1fUkFURV8yNE0sCisJICAuZmxhZ3MgPSAwIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwKKwkgIC5od192YWx1ZSA9IFpEX09GRE1fUkFURV8zNk0sCisJICAuZmxhZ3MgPSAwIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwKKwkgIC5od192YWx1ZSA9IFpEX09GRE1fUkFURV80OE0sCisJICAuZmxhZ3MgPSAwIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwKKwkgIC5od192YWx1ZSA9IFpEX09GRE1fUkFURV81NE0sCisJICAuZmxhZ3MgPSAwIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHpkX2NoYW5uZWxzW10gPSB7Ci0JeyAuY2hhbiA9IDEsCi0JICAuZnJlcSA9IDI0MTJ9LAotCXsgLmNoYW4gPSAyLAotCSAgLmZyZXEgPSAyNDE3fSwKLQl7IC5jaGFuID0gMywKLQkgIC5mcmVxID0gMjQyMn0sCi0JeyAuY2hhbiA9IDQsCi0JICAuZnJlcSA9IDI0Mjd9LAotCXsgLmNoYW4gPSA1LAotCSAgLmZyZXEgPSAyNDMyfSwKLQl7IC5jaGFuID0gNiwKLQkgIC5mcmVxID0gMjQzN30sCi0JeyAuY2hhbiA9IDcsCi0JICAuZnJlcSA9IDI0NDJ9LAotCXsgLmNoYW4gPSA4LAotCSAgLmZyZXEgPSAyNDQ3fSwKLQl7IC5jaGFuID0gOSwKLQkgIC5mcmVxID0gMjQ1Mn0sCi0JeyAuY2hhbiA9IDEwLAotCSAgLmZyZXEgPSAyNDU3fSwKLQl7IC5jaGFuID0gMTEsCi0JICAuZnJlcSA9IDI0NjJ9LAotCXsgLmNoYW4gPSAxMiwKLQkgIC5mcmVxID0gMjQ2N30sCi0JeyAuY2hhbiA9IDEzLAotCSAgLmZyZXEgPSAyNDcyfSwKLQl7IC5jaGFuID0gMTQsCi0JICAuZnJlcSA9IDI0ODR9CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQgfSwKIH07CiAKIHN0YXRpYyB2b2lkIGhvdXNla2VlcGluZ19pbml0KHN0cnVjdCB6ZF9tYWMgKm1hYyk7CkBAIC0zNjAsMTEgKzM0NSwxNCBAQAogewogCXN0cnVjdCBza19idWZmX2hlYWQgKnEgPSAmemRfaHdfbWFjKGh3KS0+YWNrX3dhaXRfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXMgPSB7ezB9fTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXM7CiAKIAlza2IgPSBza2JfZGVxdWV1ZShxKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybjsKKworCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisKIAl0eF9zdGF0dXMoaHcsIHNrYiwgJnN0YXR1cywgMCk7CiB9CiAKQEAgLTM4OSw3ICszNzcsOCBAQAogCQlpZiAodW5saWtlbHkoZXJyb3IgfHwKIAkJICAgIChjYi0+Y29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfTk9fQUNLKSkpCiAJCXsKLQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHN0YXR1cyA9IHt7MH19OworCQkJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgc3RhdHVzOworCQkJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKIAkJCXR4X3N0YXR1cyhodywgc2tiLCAmc3RhdHVzLCAhZXJyb3IpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSA9CkBAIC00ODYsNiArNDc1LDQ2IEBACiAJLyogRklYTUU6IE1hbmFnZW1lbnQgZnJhbWU/ICovCiB9CiAKK3ZvaWQgemRfbWFjX2NvbmZpZ19iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpiZWFjb24pCit7CisJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKKwl1MzIgdG1wLCBqID0gMDsKKwkvKiA0IG1vcmUgYnl0ZXMgZm9yIHRhaWwgQ1JDICovCisJdTMyIGZ1bGxfbGVuID0gYmVhY29uLT5sZW4gKyA0OworCXpkX2lvd3JpdGUzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGT19TRU1BUEhPUkUsIDApOworCXpkX2lvcmVhZDMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPX1NFTUFQSE9SRSwgJnRtcCk7CisJd2hpbGUgKHRtcCAmIDB4MikgeworCQl6ZF9pb3JlYWQzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGT19TRU1BUEhPUkUsICZ0bXApOworCQlpZiAoKCsraiAlIDEwMCkgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDUl9CQ05fRklGT19TRU1BUEhPUkUgbm90IHJlYWR5XG4iKTsKKwkJCWlmIChqID49IDUwMCkgIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkdpdmluZyB1cCBiZWFjb24gY29uZmlnLlxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCW1zbGVlcCgxKTsKKwl9CisKKwl6ZF9pb3dyaXRlMzIoJm1hYy0+Y2hpcCwgQ1JfQkNOX0ZJRk8sIGZ1bGxfbGVuIC0gMSk7CisJaWYgKHpkX2NoaXBfaXNfemQxMjExYigmbWFjLT5jaGlwKSkKKwkJemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9MRU5HVEgsIGZ1bGxfbGVuIC0gMSk7CisKKwlmb3IgKGogPSAwIDsgaiA8IGJlYWNvbi0+bGVuOyBqKyspCisJCXpkX2lvd3JpdGUzMigmbWFjLT5jaGlwLCBDUl9CQ05fRklGTywKKwkJCQkqKCh1OCAqKShiZWFjb24tPmRhdGEgKyBqKSkpOworCisJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKKwkJemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPLCAweDApOworCisJemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9GSUZPX1NFTUFQSE9SRSwgMSk7CisJLyogODAyLjExYi9nIDIuNEcgQ0NLIDFNYgorCSAqIDgwMi4xMWEsIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHVzZXMgZGlmZmVyZW50IHZhbHVlcyAoc2VlIEdQTCB2ZW5kb3IKKwkgKiBkcml2ZXIpCisJICovCisJemRfaW93cml0ZTMyKCZtYWMtPmNoaXAsIENSX0JDTl9QTENQX0NGRywgMHgwMDAwMDQwMCB8CisJCQkoZnVsbF9sZW4gPDwgMTkpKTsKK30KKwogc3RhdGljIGludCBmaWxsX2N0cmxzZXQoc3RydWN0IHpkX21hYyAqbWFjLAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKQEAgLTQ5OSw3ICs1MjgsOSBAQAogCiAJWkRfQVNTRVJUKGZyYWdfbGVuIDw9IDB4ZmZmZik7CiAKLQljcy0+bW9kdWxhdGlvbiA9IGNvbnRyb2wtPnR4X3JhdGU7CisJY3MtPm1vZHVsYXRpb24gPSBjb250cm9sLT50eF9yYXRlLT5od192YWx1ZTsKKwlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEUpCisJCWNzLT5tb2R1bGF0aW9uID0gY29udHJvbC0+dHhfcmF0ZS0+aHdfdmFsdWVfc2hvcnQ7CiAKIAljcy0+dHhfbGVuZ3RoID0gY3B1X3RvX2xlMTYoZnJhZ19sZW4pOwogCkBAIC02MDMsNyArNjM0LDkgQEAKIAkJdHhfaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCQlpZiAobGlrZWx5KCFjb21wYXJlX2V0aGVyX2FkZHIodHhfaGRyLT5hZGRyMiwgcnhfaGRyLT5hZGRyMSkpKQogCQl7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXMgPSB7ezB9fTsKKwkJCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzIHN0YXR1czsKKworCQkJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKIAkJCXN0YXR1cy5mbGFncyA9IElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLOwogCQkJc3RhdHVzLmFja19zaWduYWwgPSBzdGF0cy0+c3NpOwogCQkJX19za2JfdW5saW5rKHNrYiwgcSk7CkBAIC02MjUsNiArNjU4LDggQEAKIAlpbnQgYmFkX2ZyYW1lID0gMDsKIAl1MTYgZmM7CiAJYm9vbCBpc19xb3MsIGlzXzRhZGRyLCBuZWVkX3BhZGRpbmc7CisJaW50IGk7CisJdTggcmF0ZTsKIAogCWlmIChsZW5ndGggPCBaRF9QTENQX0hFQURFUl9TSVpFICsgMTAgLyogSUVFRTgwMjExXzFBRERSX0xFTiAqLyArCiAJICAgICAgICAgICAgIEZDU19MRU4gKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpCkBAIC02NTQsMTQgKzY4OSwxOSBAQAogCQl9CiAJfQogCi0Jc3RhdHMuY2hhbm5lbCA9IF96ZF9jaGlwX2dldF9jaGFubmVsKCZtYWMtPmNoaXApOwotCXN0YXRzLmZyZXEgPSB6ZF9jaGFubmVsc1tzdGF0cy5jaGFubmVsIC0gMV0uZnJlcTsKLQlzdGF0cy5waHltb2RlID0gTU9ERV9JRUVFODAyMTFHOworCXN0YXRzLmZyZXEgPSB6ZF9jaGFubmVsc1tfemRfY2hpcF9nZXRfY2hhbm5lbCgmbWFjLT5jaGlwKSAtIDFdLmNlbnRlcl9mcmVxOworCXN0YXRzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCXN0YXRzLnNzaSA9IHN0YXR1cy0+c2lnbmFsX3N0cmVuZ3RoOwogCXN0YXRzLnNpZ25hbCA9IHpkX3J4X3F1YWxfcGVyY2VudChidWZmZXIsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Ci0Jc3RhdHMucmF0ZSA9IHpkX3J4X3JhdGUoYnVmZmVyLCBzdGF0dXMpOworCisJcmF0ZSA9IHpkX3J4X3JhdGUoYnVmZmVyLCBzdGF0dXMpOworCisJLyogdG9kbzogcmV0dXJuIGluZGV4IGluIHRoZSBiaWcgc3dpdGNoZXMgaW4gemRfcnhfcmF0ZSBpbnN0ZWFkICovCisJZm9yIChpID0gMDsgaSA8IG1hYy0+YmFuZC5uX2JpdHJhdGVzOyBpKyspCisJCWlmIChyYXRlID09IG1hYy0+YmFuZC5iaXRyYXRlc1tpXS5od192YWx1ZSkKKwkJCXN0YXRzLnJhdGVfaWR4ID0gaTsKIAogCWxlbmd0aCAtPSBaRF9QTENQX0hFQURFUl9TSVpFICsgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpOwogCWJ1ZmZlciArPSBaRF9QTENQX0hFQURFUl9TSVpFOwpAQCAtNzA5LDYgKzc0OSw3IEBACiAKIAlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOgogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgogCQltYWMtPnR5cGUgPSBjb25mLT50eXBlOwogCQlicmVhazsKQEAgLTczMCw3ICs3NzEsNyBAQAogc3RhdGljIGludCB6ZF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKIHsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoaHcpOwotCXJldHVybiB6ZF9jaGlwX3NldF9jaGFubmVsKCZtYWMtPmNoaXAsIGNvbmYtPmNoYW5uZWwpOworCXJldHVybiB6ZF9jaGlwX3NldF9jaGFubmVsKCZtYWMtPmNoaXAsIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKIH0KIAogc3RhdGljIGludCB6ZF9vcF9jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtNzM4LDE1ICs3NzksNDMgQEAKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKKwlpbnQgYXNzb2NpYXRlZDsKKworCWlmIChtYWMtPnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkgeworCQlhc3NvY2lhdGVkID0gdHJ1ZTsKKwkJaWYgKGNvbmYtPmJlYWNvbikgeworCQkJemRfbWFjX2NvbmZpZ19iZWFjb24oaHcsIGNvbmYtPmJlYWNvbik7CisJCQlrZnJlZV9za2IoY29uZi0+YmVhY29uKTsKKwkJCXpkX3NldF9iZWFjb25faW50ZXJ2YWwoJm1hYy0+Y2hpcCwgQkNOX01PREVfSUJTUyB8CisJCQkJCWh3LT5jb25mLmJlYWNvbl9pbnQpOworCQl9CisJfSBlbHNlCisJCWFzc29jaWF0ZWQgPSBpc192YWxpZF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKTsKIAogCXNwaW5fbG9ja19pcnEoJm1hYy0+bG9jayk7Ci0JbWFjLT5hc3NvY2lhdGVkID0gaXNfdmFsaWRfZXRoZXJfYWRkcihjb25mLT5ic3NpZCk7CisJbWFjLT5hc3NvY2lhdGVkID0gYXNzb2NpYXRlZDsKIAlzcGluX3VubG9ja19pcnEoJm1hYy0+bG9jayk7CiAKIAkvKiBUT0RPOiBkbyBoYXJkd2FyZSBic3NpZCBmaWx0ZXJpbmcgKi8KIAlyZXR1cm4gMDsKIH0KIAordm9pZCB6ZF9wcm9jZXNzX2ludHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXUxNiBpbnRfc3RhdHVzOworCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemRfbWFjLCBwcm9jZXNzX2ludHIpOworCisJaW50X3N0YXR1cyA9IGxlMTZfdG9fY3B1KCoodTE2ICopKG1hYy0+aW50cl9idWZmZXIrNCkpOworCWlmIChpbnRfc3RhdHVzICYgSU5UX0NGR19ORVhUX0JDTikgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgIklOVF9DRkdfTkVYVF9CQ05cbiIpOworCX0gZWxzZQorCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiVW5zdXBwb3J0ZWQgaW50ZXJydXB0XG4iKTsKKworCXpkX2NoaXBfZW5hYmxlX2h3aW50KCZtYWMtPmNoaXApOworfQorCisKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfaGFzaF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPQpAQCAtNzc0LDcgKzg0Myw3IEBACiAKICNkZWZpbmUgU1VQUE9SVEVEX0ZJRl9GTEFHUyBcCiAJKEZJRl9QUk9NSVNDX0lOX0JTUyB8IEZJRl9BTExNVUxUSSB8IEZJRl9GQ1NGQUlMIHwgRklGX0NPTlRST0wgfCBcCi0JRklGX09USEVSX0JTUykKKwlGSUZfT1RIRVJfQlNTIHwgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCiBzdGF0aWMgdm9pZCB6ZF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQl1bnNpZ25lZCBpbnQgKm5ld19mbGFncywKQEAgLTg4OCw3ICs5NTcsNiBAQAogewogCXN0cnVjdCB6ZF9tYWMgKm1hYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlpbnQgaTsKIAogCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgemRfbWFjKSwgJnpkX29wcyk7CiAJaWYgKCFodykgewpAQCAtOTA2LDE5ICs5NzQsMTUgQEAKIAogCW1lbWNweShtYWMtPmNoYW5uZWxzLCB6ZF9jaGFubmVscywgc2l6ZW9mKHpkX2NoYW5uZWxzKSk7CiAJbWVtY3B5KG1hYy0+cmF0ZXMsIHpkX3JhdGVzLCBzaXplb2YoemRfcmF0ZXMpKTsKLQltYWMtPm1vZGVzWzBdLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUc7Ci0JbWFjLT5tb2Rlc1swXS5udW1fcmF0ZXMgPSBBUlJBWV9TSVpFKHpkX3JhdGVzKTsKLQltYWMtPm1vZGVzWzBdLnJhdGVzID0gbWFjLT5yYXRlczsKLQltYWMtPm1vZGVzWzBdLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoemRfY2hhbm5lbHMpOwotCW1hYy0+bW9kZXNbMF0uY2hhbm5lbHMgPSBtYWMtPmNoYW5uZWxzOwotCW1hYy0+bW9kZXNbMV0ubW9kZSA9IE1PREVfSUVFRTgwMjExQjsKLQltYWMtPm1vZGVzWzFdLm51bV9yYXRlcyA9IDQ7Ci0JbWFjLT5tb2Rlc1sxXS5yYXRlcyA9IG1hYy0+cmF0ZXM7Ci0JbWFjLT5tb2Rlc1sxXS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHpkX2NoYW5uZWxzKTsKLQltYWMtPm1vZGVzWzFdLmNoYW5uZWxzID0gbWFjLT5jaGFubmVsczsKKwltYWMtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoemRfcmF0ZXMpOworCW1hYy0+YmFuZC5iaXRyYXRlcyA9IG1hYy0+cmF0ZXM7CisJbWFjLT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHpkX2NoYW5uZWxzKTsKKwltYWMtPmJhbmQuY2hhbm5lbHMgPSBtYWMtPmNoYW5uZWxzOworCisJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZtYWMtPmJhbmQ7CiAKIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJICAgICBJRUVFODAyMTFfSFdfREVGQVVMVF9SRUdfRE9NQUlOX0NPTkZJR1VSRUQ7CisJCSAgICBJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFOwogCWh3LT5tYXhfcnNzaSA9IDEwMDsKIAlody0+bWF4X3NpZ25hbCA9IDEwMDsKIApAQCAtOTI3LDE5ICs5OTEsMTIgQEAKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm1hYy0+YWNrX3dhaXRfcXVldWUpOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlpZiAoaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShodywgJm1hYy0+bW9kZXNbaV0pKSB7Ci0JCQlkZXZfZGJnX2YoJmludGYtPmRldiwgImNhbm5vdCByZWdpc3RlciBod21vZGVcbiIpOwotCQkJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KIAl6ZF9jaGlwX2luaXQoJm1hYy0+Y2hpcCwgaHcsIGludGYpOwogCWhvdXNla2VlcGluZ19pbml0KG1hYyk7CiAJSU5JVF9XT1JLKCZtYWMtPnNldF9tdWx0aWNhc3RfaGFzaF93b3JrLCBzZXRfbXVsdGljYXN0X2hhc2hfaGFuZGxlcik7CiAJSU5JVF9XT1JLKCZtYWMtPnNldF9ydHNfY3RzX3dvcmssIHNldF9ydHNfY3RzX3dvcmspOwogCUlOSVRfV09SSygmbWFjLT5zZXRfcnhfZmlsdGVyX3dvcmssIHNldF9yeF9maWx0ZXJfaGFuZGxlcik7CisJSU5JVF9XT1JLKCZtYWMtPnByb2Nlc3NfaW50ciwgemRfcHJvY2Vzc19pbnRyKTsKIAogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmaW50Zi0+ZGV2KTsKIAlyZXR1cm4gaHc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCmluZGV4IDJkZGUxMDguLjcxMTcwMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCkBAIC0xNzIsMTIgKzE3MiwxNSBAQAogc3RydWN0IHpkX21hYyB7CiAJc3RydWN0IHpkX2NoaXAgY2hpcDsKIAlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBpbnRyX2xvY2s7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGhvdXNla2VlcGluZyBob3VzZWtlZXBpbmc7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNldF9tdWx0aWNhc3RfaGFzaF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXRfcnRzX2N0c193b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXRfcnhfZmlsdGVyX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHByb2Nlc3NfaW50cjsKIAlzdHJ1Y3QgemRfbWNfaGFzaCBtdWx0aWNhc3RfaGFzaDsKKwl1OCBpbnRyX2J1ZmZlcltVU0JfTUFYX0VQX0lOVF9CVUZGRVJdOwogCXU4IHJlZ2RvbWFpbjsKIAl1OCBkZWZhdWx0X3JlZ2RvbWFpbjsKIAlpbnQgdHlwZTsKQEAgLTE4NSw3ICsxODgsNyBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgYWNrX3dhaXRfcXVldWU7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbMTJdOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSBtb2Rlc1syXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CiAKIAkvKiBTaG9ydCBwcmVhbWJsZSAodXNlZCBmb3IgUlRTL0NUUykgKi8KIAl1bnNpZ25lZCBpbnQgc2hvcnRfcHJlYW1ibGU6MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKaW5kZXggNzk0MmIxNS4uZTM0Njc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgRldfWkQxMjExQl9QUkVGSVgJInpkMTIxMS96ZDEyMTFiXyIKIAogLyogVVNCIGRldmljZSBpbml0aWFsaXphdGlvbiAqLworc3RhdGljIHZvaWQgaW50X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpOwogCiBzdGF0aWMgaW50IHJlcXVlc3RfZndfZmlsZSgKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRldmljZSAqZGV2aWNlKQpAQCAtMzM2LDExICszMzcsMTggQEAKIAlzdHJ1Y3QgemRfdXNiICp1c2IgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHpkX3VzYl9pbnRlcnJ1cHQgKmludHIgPSAmdXNiLT5pbnRyOwogCWludCBsZW47CisJdTE2IGludF9udW07CiAKIAlaRF9BU1NFUlQoaW5faW50ZXJydXB0KCkpOwogCXNwaW5fbG9jaygmaW50ci0+bG9jayk7CiAKLQlpZiAoaW50ci0+cmVhZF9yZWdzX2VuYWJsZWQpIHsKKwlpbnRfbnVtID0gbGUxNl90b19jcHUoKih1MTYgKikodXJiLT50cmFuc2Zlcl9idWZmZXIrMikpOworCWlmIChpbnRfbnVtID09IENSX0lOVEVSUlVQVCkgeworCQlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoemRfdXNiX3RvX2h3KHVyYi0+Y29udGV4dCkpOworCQltZW1jcHkoJm1hYy0+aW50cl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCVVTQl9NQVhfRVBfSU5UX0JVRkZFUik7CisJCXNjaGVkdWxlX3dvcmsoJm1hYy0+cHJvY2Vzc19pbnRyKTsKKwl9IGVsc2UgaWYgKGludHItPnJlYWRfcmVnc19lbmFibGVkKSB7CiAJCWludHItPnJlYWRfcmVncy5sZW5ndGggPSBsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAKIAkJaWYgKGxlbiA+IHNpemVvZihpbnRyLT5yZWFkX3JlZ3MuYnVmZmVyKSkKQEAgLTM1MSw3ICszNTksNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfZGJnX2YodXJiX2Rldih1cmIpLCAicmVncyBpbnRlcnJ1cHQgaWdub3JlZFxuIik7CiBvdXQ6CiAJc3Bpbl91bmxvY2soJmludHItPmxvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCBmZTZmZjNlLi4yNDY0MDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtNzcwLDE0ICs3NzAsMTQgQEAKIAkJLyogQnJhbmNoIG9uIFR4IGVycm9yLiAqLwogCQl5cC0+dHhfcmluZ1tqXS5kYmRtYV9jbWQgPSBjcHVfdG9fbGUzMihDTURfU1RPUCk7CiAJCXlwLT50eF9yaW5nW2pdLmJyYW5jaF9hZGRyID0gY3B1X3RvX2xlMzIoeXAtPnR4X3JpbmdfZG1hICsKLQkJCShqKzEpKnNpemVvZihzdHJ1Y3QgeWVsbG93ZmluX2Rlc2MpOworCQkJKGorMSkqc2l6ZW9mKHN0cnVjdCB5ZWxsb3dmaW5fZGVzYykpOwogCQlqKys7CiAJCWlmICh5cC0+ZmxhZ3MgJiBGdWxsVHhTdGF0dXMpIHsKIAkJCXlwLT50eF9yaW5nW2pdLmRiZG1hX2NtZCA9CiAJCQkJY3B1X3RvX2xlMzIoQ01EX1RYU1RBVFVTIHwgc2l6ZW9mKCp5cC0+dHhfc3RhdHVzKSk7CiAJCQl5cC0+dHhfcmluZ1tqXS5yZXF1ZXN0X2NudCA9IHNpemVvZigqeXAtPnR4X3N0YXR1cyk7CiAJCQl5cC0+dHhfcmluZ1tqXS5hZGRyID0gY3B1X3RvX2xlMzIoeXAtPnR4X3N0YXR1c19kbWEgKwotCQkJCWkqc2l6ZW9mKHN0cnVjdCB0eF9zdGF0dXNfd29yZHMpOworCQkJCWkqc2l6ZW9mKHN0cnVjdCB0eF9zdGF0dXNfd29yZHMpKTsKIAkJfSBlbHNlIHsKIAkJCS8qIFN5bWJpb3MgY2hpcHMgd3JpdGUgb25seSB0eF9lcnJzIHdvcmQuICovCiAJCQl5cC0+dHhfcmluZ1tqXS5kYmRtYV9jbWQgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9LY29uZmlnIGIvZHJpdmVycy9vZi9LY29uZmlnCmluZGV4IGMwMzA3MmIuLjNhN2ExMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvS2NvbmZpZworKysgYi9kcml2ZXJzL29mL0tjb25maWcKQEAgLTEsMyArMSwxNSBAQAogY29uZmlnIE9GX0RFVklDRQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE9GICYmIChTUEFSQyB8fCBQUENfT0YpCisKK2NvbmZpZyBPRl9HUElPCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gT0YgJiYgUFBDX09GICYmIEhBVkVfR1BJT19MSUIKKwloZWxwCisJICBPcGVuRmlybXdhcmUgR1BJTyBhY2Nlc3NvcnMKKworY29uZmlnIE9GX0kyQworCWRlZl90cmlzdGF0ZSBJMkMKKwlkZXBlbmRzIG9uIFBQQ19PRiAmJiBJMkMKKwloZWxwCisJICBPcGVuRmlybXdhcmUgSTJDIGFjY2Vzc29ycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9NYWtlZmlsZSBiL2RyaXZlcnMvb2YvTWFrZWZpbGUKaW5kZXggYWI5YmU1ZC4uNTQ4NzcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL29mL01ha2VmaWxlCkBAIC0xLDIgKzEsNCBAQAogb2JqLXkgPSBiYXNlLm8KIG9iai0kKENPTkZJR19PRl9ERVZJQ0UpICs9IGRldmljZS5vIHBsYXRmb3JtLm8KK29iai0kKENPTkZJR19PRl9HUElPKSAgICs9IGdwaW8ubworb2JqLSQoQ09ORklHX09GX0kyQykJKz0gb2ZfaTJjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYmFzZS5jIGIvZHJpdmVycy9vZi9iYXNlLmMKaW5kZXggODBjOWRlYy4uOWJkN2M0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9iYXNlLmMKKysrIGIvZHJpdmVycy9vZi9iYXNlLmMKQEAgLTExNyw2ICsxMTcsMzIgQEAKIEVYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUpOwogCiAvKioKKyAqICBvZl9kZXZpY2VfaXNfYXZhaWxhYmxlIC0gY2hlY2sgaWYgYSBkZXZpY2UgaXMgYXZhaWxhYmxlIGZvciB1c2UKKyAqCisgKiAgQGRldmljZTogTm9kZSB0byBjaGVjayBmb3IgYXZhaWxhYmlsaXR5CisgKgorICogIFJldHVybnMgMSBpZiB0aGUgc3RhdHVzIHByb3BlcnR5IGlzIGFic2VudCBvciBzZXQgdG8gIm9rYXkiIG9yICJvayIsCisgKiAgMCBvdGhlcndpc2UKKyAqLworaW50IG9mX2RldmljZV9pc19hdmFpbGFibGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpCit7CisJY29uc3QgY2hhciAqc3RhdHVzOworCWludCBzdGF0bGVuOworCisJc3RhdHVzID0gb2ZfZ2V0X3Byb3BlcnR5KGRldmljZSwgInN0YXR1cyIsICZzdGF0bGVuKTsKKwlpZiAoc3RhdHVzID09IE5VTEwpCisJCXJldHVybiAxOworCisJaWYgKHN0YXRsZW4gPiAwKSB7CisJCWlmICghc3RyY21wKHN0YXR1cywgIm9rYXkiKSB8fCAhc3RyY21wKHN0YXR1cywgIm9rIikpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZSk7CisKKy8qKgogICoJb2ZfZ2V0X3BhcmVudCAtIEdldCBhIG5vZGUncyBwYXJlbnQgaWYgYW55CiAgKglAbm9kZToJTm9kZSB0byBnZXQgcGFyZW50CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9ncGlvLmMgYi9kcml2ZXJzL29mL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA2ODFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9vZi9ncGlvLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBPRiBoZWxwZXJzIGZvciB0aGUgR1BJTyBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCAgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisKKy8qKgorICogb2ZfZ2V0X2dwaW8gLSBHZXQgYSBHUElPIG51bWJlciBmcm9tIHRoZSBkZXZpY2UgdHJlZSB0byB1c2Ugd2l0aCBHUElPIEFQSQorICogQG5wOgkJZGV2aWNlIG5vZGUgdG8gZ2V0IEdQSU8gZnJvbQorICogQGluZGV4OglpbmRleCBvZiB0aGUgR1BJTworICoKKyAqIFJldHVybnMgR1BJTyBudW1iZXIgdG8gdXNlIHdpdGggTGludXggZ2VuZXJpYyBHUElPIEFQSSwgb3Igb25lIG9mIHRoZSBlcnJubworICogdmFsdWUgb24gdGhlIGVycm9yIGNvbmRpdGlvbi4KKyAqLworaW50IG9mX2dldF9ncGlvKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpbmRleCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmdjOworCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gTlVMTDsKKwlpbnQgc2l6ZTsKKwljb25zdCB1MzIgKmdwaW9zOworCXUzMiBucl9jZWxsczsKKwlpbnQgaTsKKwljb25zdCB2b2lkICpncGlvX3NwZWM7CisJY29uc3QgdTMyICpncGlvX2NlbGxzOworCWludCBncGlvX2luZGV4ID0gMDsKKworCWdwaW9zID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZ3Bpb3MiLCAmc2l6ZSk7CisJaWYgKCFncGlvcykgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycjA7CisJfQorCW5yX2NlbGxzID0gc2l6ZSAvIHNpemVvZih1MzIpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2NlbGxzOyBncGlvX2luZGV4KyspIHsKKwkJY29uc3QgcGhhbmRsZSAqZ3Bpb19waGFuZGxlOworCisJCWdwaW9fcGhhbmRsZSA9IGdwaW9zICsgaTsKKwkJZ3Bpb19zcGVjID0gZ3Bpb19waGFuZGxlICsgMTsKKworCQkvKiBvbmUgY2VsbCBob2xlIGluIHRoZSBncGlvcyA9IDw+OyAqLworCQlpZiAoISpncGlvX3BoYW5kbGUpIHsKKwkJCWlmIChncGlvX2luZGV4ID09IGluZGV4KQorCQkJCXJldHVybiAtRU5PRU5UOworCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKworCQlnYyA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpncGlvX3BoYW5kbGUpOworCQlpZiAoIWdjKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNvdWxkIG5vdCBmaW5kIHBoYW5kbGUgZm9yIGdwaW9zXG4iLAorCQkJCSBucC0+ZnVsbF9uYW1lKTsKKwkJCWdvdG8gZXJyMDsKKwkJfQorCisJCW9mX2djID0gZ2MtPmRhdGE7CisJCWlmICghb2ZfZ2MpIHsKKwkJCXByX2RlYnVnKCIlczogZ3BpbyBjb250cm9sbGVyICVzIGlzbid0IHJlZ2lzdGVyZWRcbiIsCisJCQkJIG5wLT5mdWxsX25hbWUsIGdjLT5mdWxsX25hbWUpOworCQkJZ290byBlcnIxOworCQl9CisKKwkJZ3Bpb19jZWxscyA9IG9mX2dldF9wcm9wZXJ0eShnYywgIiNncGlvLWNlbGxzIiwgJnNpemUpOworCQlpZiAoIWdwaW9fY2VsbHMgfHwgc2l6ZSAhPSBzaXplb2YoKmdwaW9fY2VsbHMpIHx8CisJCQkJKmdwaW9fY2VsbHMgIT0gb2ZfZ2MtPmdwaW9fY2VsbHMpIHsKKwkJCXByX2RlYnVnKCIlczogd3JvbmcgI2dwaW8tY2VsbHMgZm9yICVzXG4iLAorCQkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKKwkJCWdvdG8gZXJyMTsKKwkJfQorCisJCS8qIE5leHQgcGhhbmRsZSBpcyBhdCBwaGFuZGxlIGNlbGxzICsgI2dwaW8tY2VsbHMgKi8KKwkJaSArPSBzaXplb2YoKmdwaW9fcGhhbmRsZSkgLyBzaXplb2YodTMyKSArICpncGlvX2NlbGxzOworCQlpZiAoaSA+PSBucl9jZWxscyArIDEpIHsKKwkJCXByX2RlYnVnKCIlczogaW5zdWZmaWNpZW50IGdwaW8tc3BlYyBsZW5ndGhcbiIsCisJCQkJIG5wLT5mdWxsX25hbWUpOworCQkJZ290byBlcnIxOworCQl9CisKKwkJaWYgKGdwaW9faW5kZXggPT0gaW5kZXgpCisJCQlicmVhazsKKworCQlvZl9nYyA9IE5VTEw7CisJCW9mX25vZGVfcHV0KGdjKTsKKwl9CisKKwlpZiAoIW9mX2djKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlyZXQgPSBvZl9nYy0+eGxhdGUob2ZfZ2MsIG5wLCBncGlvX3NwZWMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjE7CisKKwlyZXQgKz0gb2ZfZ2MtPmdjLmJhc2U7CitlcnIxOgorCW9mX25vZGVfcHV0KGdjKTsKK2VycjA6CisJcHJfZGVidWcoIiVzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZ2V0X2dwaW8pOworCisvKioKKyAqIG9mX2dwaW9fc2ltcGxlX3hsYXRlIC0gdHJhbnNsYXRlIGdwaW9fc3BlYyB0byB0aGUgR1BJTyBudW1iZXIKKyAqIEBvZl9nYzoJcG9pbnRlciB0byB0aGUgb2ZfZ3Bpb19jaGlwIHN0cnVjdHVyZQorICogQG5wOgkJZGV2aWNlIG5vZGUgb2YgdGhlIEdQSU8gY2hpcAorICogQGdwaW9fc3BlYzoJZ3BpbyBzcGVjaWZpZXIgYXMgZm91bmQgaW4gdGhlIGRldmljZSB0cmVlCisgKgorICogVGhpcyBpcyBzaW1wbGUgdHJhbnNsYXRpb24gZnVuY3Rpb24sIHN1aXRhYmxlIGZvciB0aGUgbW9zdCAxOjEgbWFwcGVkCisgKiBncGlvIGNoaXBzLiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIG9ubHkgb25lIHNhbml0eSBjaGVjazogd2hldGhlciBncGlvCisgKiBpcyBsZXNzIHRoYW4gbmdwaW9zICh0aGF0IGlzIHNwZWNpZmllZCBpbiB0aGUgZ3Bpb19jaGlwKS4KKyAqLworaW50IG9mX2dwaW9fc2ltcGxlX3hsYXRlKHN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJIGNvbnN0IHZvaWQgKmdwaW9fc3BlYykKK3sKKwljb25zdCB1MzIgKmdwaW8gPSBncGlvX3NwZWM7CisKKwlpZiAoKmdwaW8gPiBvZl9nYy0+Z2MubmdwaW8pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuICpncGlvOworfQorRVhQT1JUX1NZTUJPTChvZl9ncGlvX3NpbXBsZV94bGF0ZSk7CisKKy8qIFNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBub3csIGxhdGVyIHdlJ2xsIHVzZSBkeW5hbWljIGJhc2VzLiAqLworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQzMyKQorI2RlZmluZSBHUElPU19QRVJfQ0hJUCAzMgorI2Vsc2UKKyNkZWZpbmUgR1BJT1NfUEVSX0NISVAgNjQKKyNlbmRpZgorCitzdGF0aWMgaW50IG9mX2dldF9ncGlvY2hpcF9iYXNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IGRldmljZV9ub2RlICpnYyA9IE5VTEw7CisJaW50IGdwaW9jaGlwX2Jhc2UgPSAwOworCisJd2hpbGUgKChnYyA9IG9mX2ZpbmRfYWxsX25vZGVzKGdjKSkpIHsKKwkJaWYgKCFvZl9nZXRfcHJvcGVydHkoZ2MsICJncGlvLWNvbnRyb2xsZXIiLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChnYyAhPSBucCkgeworCQkJZ3Bpb2NoaXBfYmFzZSArPSBHUElPU19QRVJfQ0hJUDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2Zfbm9kZV9wdXQoZ2MpOworCisJCWlmIChncGlvY2hpcF9iYXNlID49IEFSQ0hfTlJfR1BJT1MpCisJCQlyZXR1cm4gLUVOT1NQQzsKKworCQlyZXR1cm4gZ3Bpb2NoaXBfYmFzZTsKKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoqCisgKiBvZl9tbV9ncGlvY2hpcF9hZGQgLSBBZGQgbWVtb3J5IG1hcHBlZCBHUElPIGNoaXAgKGJhbmspCisgKiBAbnA6CQlkZXZpY2Ugbm9kZSBvZiB0aGUgR1BJTyBjaGlwCisgKiBAbW1fZ2M6CXBvaW50ZXIgdG8gdGhlIG9mX21tX2dwaW9fY2hpcCBhbGxvY2F0ZWQgc3RydWN0dXJlCisgKgorICogVG8gdXNlIHRoaXMgZnVuY3Rpb24geW91IHNob3VsZCBhbGxvY2F0ZSBhbmQgZmlsbCBtbV9nYyB3aXRoOgorICoKKyAqIDEpIEluIHRoZSBncGlvX2NoaXAgc3RydWN0dXJlOgorICogICAgLSBhbGwgdGhlIGNhbGxiYWNrcworICoKKyAqIDIpIEluIHRoZSBvZl9ncGlvX2NoaXAgc3RydWN0dXJlOgorICogICAgLSBncGlvX2NlbGxzCisgKiAgICAtIHhsYXRlIGNhbGxiYWNrIChvcHRpb25hbCkKKyAqCisgKiAzKSBJbiB0aGUgb2ZfbW1fZ3Bpb19jaGlwIHN0cnVjdHVyZToKKyAqICAgIC0gc2F2ZV9yZWdzIGNhbGxiYWNrIChvcHRpb25hbCkKKyAqCisgKiBJZiBzdWNjZWVkZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBtYXAgYmFuaydzIG1lbW9yeSBhbmQgd2lsbAorICogZG8gYWxsIG5lY2Vzc2FyeSB3b3JrIGZvciB5b3UuIFRoZW4geW91J2xsIGFibGUgdG8gdXNlIC5yZWdzCisgKiB0byBtYW5hZ2UgR1BJT3MgZnJvbSB0aGUgY2FsbGJhY2tzLgorICovCitpbnQgb2ZfbW1fZ3Bpb2NoaXBfYWRkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCSAgICAgICBzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYykKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9ICZtbV9nYy0+b2ZfZ2M7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSAmb2ZfZ2MtPmdjOworCisJZ2MtPmxhYmVsID0ga3N0cmR1cChucC0+ZnVsbF9uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdjLT5sYWJlbCkKKwkJZ290byBlcnIwOworCisJbW1fZ2MtPnJlZ3MgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFtbV9nYy0+cmVncykKKwkJZ290byBlcnIxOworCisJZ2MtPmJhc2UgPSBvZl9nZXRfZ3Bpb2NoaXBfYmFzZShucCk7CisJaWYgKGdjLT5iYXNlIDwgMCkgeworCQlyZXQgPSBnYy0+YmFzZTsKKwkJZ290byBlcnIxOworCX0KKworCWlmICghb2ZfZ2MtPnhsYXRlKQorCQlvZl9nYy0+eGxhdGUgPSBvZl9ncGlvX3NpbXBsZV94bGF0ZTsKKworCWlmIChtbV9nYy0+c2F2ZV9yZWdzKQorCQltbV9nYy0+c2F2ZV9yZWdzKG1tX2djKTsKKworCW5wLT5kYXRhID0gb2ZfZ2M7CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoZ2MpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCS8qIFdlIGRvbid0IHdhbnQgdG8gbG9zZSB0aGUgbm9kZSBhbmQgaXRzIC0+ZGF0YSAqLworCW9mX25vZGVfZ2V0KG5wKTsKKworCXByX2RlYnVnKCIlczogcmVnaXN0ZXJlZCBhcyBnZW5lcmljIEdQSU8gY2hpcCwgYmFzZSBpcyAlZFxuIiwKKwkJIG5wLT5mdWxsX25hbWUsIGdjLT5iYXNlKTsKKwlyZXR1cm4gMDsKK2VycjI6CisJbnAtPmRhdGEgPSBOVUxMOworCWlvdW5tYXAobW1fZ2MtPnJlZ3MpOworZXJyMToKKwlrZnJlZShnYy0+bGFiZWwpOworZXJyMDoKKwlwcl9lcnIoIiVzOiBHUElPIGNoaXAgcmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkgICAgICAgbnAtPmZ1bGxfbmFtZSwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChvZl9tbV9ncGlvY2hpcF9hZGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9pMmMuYyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxNjg5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBPRiBoZWxwZXJzIGZvciB0aGUgSTJDIEFQSQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBKb2NoZW4gRnJpZWRyaWNoIDxqb2NoZW5Ac2NyYW0uZGU+CisgKgorICogQmFzZWQgb24gYSBwcmV2aW91cyBwYXRjaCBmcm9tIEpvbiBTbWlybCA8am9uc21pcmxAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKK3N0cnVjdCBpMmNfZHJpdmVyX2RldmljZSB7CisJY2hhciAgICAqb2ZfZGV2aWNlOworCWNoYXIgICAgKmkyY190eXBlOworfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyX2RldmljZSBpMmNfZGV2aWNlc1tdID0geworCXsgImRhbGxhcyxkczEzNzQiLCAicnRjLWRzMTM3NCIgfSwKK307CisKK3N0YXRpYyBpbnQgb2ZfZmluZF9pMmNfZHJpdmVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlpbnQgaSwgY3BsZW47CisJY29uc3QgY2hhciAqY29tcGF0aWJsZTsKKwljb25zdCBjaGFyICpwOworCisJLyogMS4gc2VhcmNoIGZvciBleGNlcHRpb24gbGlzdCBlbnRyeSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGkyY19kZXZpY2VzKTsgaSsrKSB7CisJCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgaTJjX2RldmljZXNbaV0ub2ZfZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RybGNweShpbmZvLT50eXBlLCBpMmNfZGV2aWNlc1tpXS5pMmNfdHlwZSwKKwkJCSAgICBJMkNfTkFNRV9TSVpFKSA+PSBJMkNfTkFNRV9TSVpFKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcGF0aWJsZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CisJaWYgKCFjb21wYXRpYmxlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIDIuIHNlYXJjaCBmb3IgbGludXgsPGkyYy10eXBlPiBlbnRyeSAqLworCXAgPSBjb21wYXRpYmxlOworCXdoaWxlIChjcGxlbiA+IDApIHsKKwkJaWYgKCFzdHJuY21wKHAsICJsaW51eCwiLCA2KSkgeworCQkJcCArPSA2OworCQkJaWYgKHN0cmxjcHkoaW5mby0+dHlwZSwgcCwKKwkJCQkgICAgSTJDX05BTUVfU0laRSkgPj0gSTJDX05BTUVfU0laRSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaSA9IHN0cmxlbihwKSArIDE7CisJCXAgKz0gaTsKKwkJY3BsZW4gLT0gaTsKKwl9CisKKwkvKiAzLiB0YWtlIGZpc3QgY29tcGF0aWJsZSBlbnRyeSBhbmQgc3RyaXAgbWFudWZhY3R1cmVyICovCisJcCA9IHN0cmNocihjb21wYXRpYmxlLCAnLCcpOworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcCsrOworCWlmIChzdHJsY3B5KGluZm8tPnR5cGUsIHAsIEkyQ19OQU1FX1NJWkUpID49IEkyQ19OQU1FX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCit2b2lkIG9mX3JlZ2lzdGVyX2kyY19kZXZpY2VzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKKwkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICphZGFwX25vZGUpCit7CisJdm9pZCAqcmVzdWx0OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoYWRhcF9ub2RlLCBub2RlKSB7CisJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvID0ge307CisJCWNvbnN0IHUzMiAqYWRkcjsKKwkJaW50IGxlbjsKKworCQlhZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCAmbGVuKTsKKwkJaWYgKCFhZGRyIHx8IGxlbiA8IHNpemVvZihpbnQpIHx8ICphZGRyID4gKDEgPDwgMTApIC0gMSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm9mLWkyYzogaW52YWxpZCBpMmMgZGV2aWNlIGVudHJ5XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaW5mby5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKKwkJaWYgKGluZm8uaXJxID09IE5PX0lSUSkKKwkJCWluZm8uaXJxID0gLTE7CisKKwkJaWYgKG9mX2ZpbmRfaTJjX2RyaXZlcihub2RlLCAmaW5mbykgPCAwKSB7CisJCQlpcnFfZGlzcG9zZV9tYXBwaW5nKGluZm8uaXJxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaW5mby5hZGRyID0gKmFkZHI7CisKKwkJcmVxdWVzdF9tb2R1bGUoaW5mby50eXBlKTsKKworCQlyZXN1bHQgPSBpMmNfbmV3X2RldmljZShhZGFwLCAmaW5mbyk7CisJCWlmIChyZXN1bHQgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm9mLWkyYzogRmFpbGVkIHRvIGxvYWQgZHJpdmVyIGZvciAlc1xuIiwKKwkJCSAgICAgICBpbmZvLnR5cGUpOworCQkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhpbmZvLmlycSk7CisJCQljb250aW51ZTsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0wob2ZfcmVnaXN0ZXJfaTJjX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvS2NvbmZpZyBiL2RyaXZlcnMvcGFyaXNjL0tjb25maWcKaW5kZXggMWQzYjg0Yi4uNTUzYTk5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL3BhcmlzYy9LY29uZmlnCkBAIC0xMDMsNiArMTAzLDExIEBACiAJZGVwZW5kcyBvbiBQQ0lfTEJBCiAJZGVmYXVsdCBQQ0lfTEJBCiAKK2NvbmZpZyBJT01NVV9IRUxQRVIKKwlib29sCisJZGVwZW5kcyBvbiBJT01NVV9TQkEgfHwgSU9NTVVfQ0NJTworCWRlZmF1bHQgeQorCiAjY29uZmlnIFBDSV9FUElDCiAjCWJvb2wgIkVQSUMvU0FHQSBQQ0kgc3VwcG9ydCIKICMJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCmluZGV4IGQwOGIyODQuLjYyZGIzYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUtaGVscGVyLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CQkvKiBmb3IgTDFfQ0FDSEVfQllURVMgKi8KQEAgLTMwMiwxMyArMzAzLDE3IEBACiAqLwogI2RlZmluZSBDQ0lPX1NFQVJDSF9MT09QKGlvYywgcmVzX2lkeCwgbWFzaywgc2l6ZSkgIFwKICAgICAgICBmb3IoOyByZXNfcHRyIDwgcmVzX2VuZDsgKytyZXNfcHRyKSB7IFwKLSAgICAgICAgICAgICAgIGlmKDAgPT0gKCpyZXNfcHRyICYgbWFzaykpIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAqcmVzX3B0ciB8PSBtYXNrOyBcCi0gICAgICAgICAgICAgICAgICAgICAgIHJlc19pZHggPSAodW5zaWduZWQgaW50KSgodW5zaWduZWQgbG9uZylyZXNfcHRyIC0gKHVuc2lnbmVkIGxvbmcpaW9jLT5yZXNfbWFwKTsgXAotICAgICAgICAgICAgICAgICAgICAgICBpb2MtPnJlc19oaW50ID0gcmVzX2lkeCArIChzaXplID4+IDMpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzb3VyY2VfZm91bmQ7IFwKLSAgICAgICAgICAgICAgIH0gXAotICAgICAgIH0KKwkJaW50IHJldDtcCisJCXVuc2lnbmVkIGludCBpZHg7XAorCQlpZHggPSAodW5zaWduZWQgaW50KSgodW5zaWduZWQgbG9uZylyZXNfcHRyIC0gKHVuc2lnbmVkIGxvbmcpaW9jLT5yZXNfbWFwKTsgXAorCQlyZXQgPSBpb21tdV9pc19zcGFuX2JvdW5kYXJ5KGlkeCA8PCAzLCBwYWdlc19uZWVkZWQsIDAsIGJvdW5kYXJ5X3NpemUpO1wKKwkJaWYgKCgwID09ICgqcmVzX3B0ciAmIG1hc2spKSAmJiAhcmV0KSB7IFwKKwkJCSpyZXNfcHRyIHw9IG1hc2s7IFwKKwkJCXJlc19pZHggPSBpZHg7XAorCQkJaW9jLT5yZXNfaGludCA9IHJlc19pZHggKyAoc2l6ZSA+PiAzKTsgXAorCQkJZ290byByZXNvdXJjZV9mb3VuZDsgXAorCQl9IFwKKwl9CiAKICNkZWZpbmUgQ0NJT19GSU5EX0ZSRUVfTUFQUElORyhpb2EsIHJlc19pZHgsIG1hc2ssIHNpemUpIFwKICAgICAgICB1IyNzaXplICpyZXNfcHRyID0gKHUjI3NpemUgKikmKChpb2MpLT5yZXNfbWFwW2lvYS0+cmVzX2hpbnQgJiB+KChzaXplID4+IDMpIC0gMSldKTsgXApAQCAtMzQxLDEwICszNDYsMTEgQEAKICAqIG9mIGF2YWlsYWJsZSBwYWdlcyBmb3IgdGhlIHJlcXVlc3RlZCBzaXplLgogICovCiBzdGF0aWMgaW50Ci1jY2lvX2FsbG9jX3JhbmdlKHN0cnVjdCBpb2MgKmlvYywgc2l6ZV90IHNpemUpCitjY2lvX2FsbG9jX3JhbmdlKHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfbmVlZGVkID0gc2l6ZSA+PiBJT1ZQX1NISUZUOwogCXVuc2lnbmVkIGludCByZXNfaWR4OworCXVuc2lnbmVkIGxvbmcgYm91bmRhcnlfc2l6ZTsKICNpZmRlZiBDQ0lPX1NFQVJDSF9USU1FCiAJdW5zaWduZWQgbG9uZyBjcl9zdGFydCA9IG1mY3RsKDE2KTsKICNlbmRpZgpAQCAtMzYwLDYgKzM2Niw5IEBACiAJKiogZ2dnIHNhY3JpZmljZXMgYW5vdGhlciA3MTAgdG8gdGhlIGNvbXB1dGVyIGdvZHMuCiAJKi8KIAorCWJvdW5kYXJ5X3NpemUgPSBBTElHTigodW5zaWduZWQgbG9uZyBsb25nKWRtYV9nZXRfc2VnX2JvdW5kYXJ5KGRldikgKyAxLAorCQkJICAgICAgMVVMTCA8PCBJT1ZQX1NISUZUKSA+PiBJT1ZQX1NISUZUOworCiAJaWYgKHBhZ2VzX25lZWRlZCA8PSA4KSB7CiAJCS8qCiAJCSAqIExBTiB0cmFmZmljIHdpbGwgbm90IHRocmFzaCB0aGUgVExCIElGRiB0aGUgc2FtZSBOSUMKQEAgLTc2MCw3ICs3NjksNyBAQAogCWlvYy0+bXNpbmdsZV9wYWdlcyArPSBzaXplID4+IElPVlBfU0hJRlQ7CiAjZW5kaWYKIAotCWlkeCA9IGNjaW9fYWxsb2NfcmFuZ2UoaW9jLCBzaXplKTsKKwlpZHggPSBjY2lvX2FsbG9jX3JhbmdlKGlvYywgZGV2LCBzaXplKTsKIAlpb3ZwID0gKGRtYV9hZGRyX3QpTUtJT1ZQKGlkeCk7CiAKIAlwZGlyX3N0YXJ0ID0gJihpb2MtPnBkaXJfYmFzZVtpZHhdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwppbmRleCAwM2M3NjNjLi5kOWM2MzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCkBAIC00OTYsNyArNDk2LDYgQEAKIAkJbGlzdF9mb3JfZWFjaF9zYWZlKGxuLCB0bXBfbG4sICZidXMtPmRldmljZXMpIHsKIAkJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwY2lfZGV2X2IobG4pOwogCi0JCQlsaXN0X2RlbCgmZGV2LT5nbG9iYWxfbGlzdCk7CiAJCQlsaXN0X2RlbCgmZGV2LT5idXNfbGlzdCk7CiAJCX0KIAkJCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvaW9tbXUtaGVscGVycy5oIGIvZHJpdmVycy9wYXJpc2MvaW9tbXUtaGVscGVycy5oCmluZGV4IDk3YmE4MjguLmE5YzQ2Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2lvbW11LWhlbHBlcnMuaAorKysgYi9kcml2ZXJzL3BhcmlzYy9pb21tdS1oZWxwZXJzLmgKQEAgLTk2LDggKzk2LDggQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGlvbW11X2NvYWxlc2NlX2NodW5rcyhzdHJ1Y3QgaW9jICppb2MsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzdGFydHNnLCBpbnQgbmVudHMsCi0JCSAgICAgIGludCAoKmlvbW11X2FsbG9jX3JhbmdlKShzdHJ1Y3QgaW9jICosIHNpemVfdCkpCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc3RhcnRzZywgaW50IG5lbnRzLAorCQlpbnQgKCppb21tdV9hbGxvY19yYW5nZSkoc3RydWN0IGlvYyAqLCBzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCkpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpjb250aWdfc2c7CSAgIC8qIGNvbnRpZyBjaHVuayBoZWFkICovCiAJdW5zaWduZWQgbG9uZyBkbWFfb2Zmc2V0LCBkbWFfbGVuOyAvKiBzdGFydC9sZW4gb2YgRE1BIHN0cmVhbSAqLwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCWRtYV9sZW4gPSBBTElHTihkbWFfbGVuICsgZG1hX29mZnNldCwgSU9WUF9TSVpFKTsKIAkJc2dfZG1hX2FkZHJlc3MoY29udGlnX3NnKSA9CiAJCQlQSURFX0ZMQUcgCi0JCQl8IChpb21tdV9hbGxvY19yYW5nZShpb2MsIGRtYV9sZW4pIDw8IElPVlBfU0hJRlQpCisJCQl8IChpb21tdV9hbGxvY19yYW5nZShpb2MsIGRldiwgZG1hX2xlbikgPDwgSU9WUF9TSElGVCkKIAkJCXwgZG1hX29mZnNldDsKIAkJbl9tYXBwaW5ncysrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYyBiL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYwppbmRleCBkZTM0YWE5Li5mOWY5YTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCkBAIC04MjksNyArODI5LDcgQEAKIAkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JcmV0dXJuIHBkY3NfYXV0b193cml0ZShrc2V0LCBhdHRyLCBidWYsIGNvdW50LCBQRl9BVVRPQk9PVCk7CisJcmV0dXJuIHBkY3NfYXV0b193cml0ZShrb2JqLCBhdHRyLCBidWYsIGNvdW50LCBQRl9BVVRPQk9PVCk7CiB9CiAKIC8qKgpAQCAtODQ1LDcgKzg0NSw3IEBACiAJCQkJICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlyZXR1cm4gcGRjc19hdXRvX3dyaXRlKGtzZXQsIGF0dHIsIGJ1ZiwgY291bnQsIFBGX0FVVE9TRUFSQ0gpOworCXJldHVybiBwZGNzX2F1dG9fd3JpdGUoa29iaiwgYXR0ciwgYnVmLCBjb3VudCwgUEZfQVVUT1NFQVJDSCk7CiB9CiAKIC8qKgpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAl9CiAKIAkvKiBEb24ndCBmb3JnZXQgdGhlIHJvb3QgZW50cmllcyAqLwotCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKHN0YWJsZV9rb2JqLCBwZGNzX2F0dHJfZ3JvdXApOworCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKHN0YWJsZV9rb2JqLCAmcGRjc19hdHRyX2dyb3VwKTsKIAogCS8qIHJlZ2lzdGVyIHRoZSBwYXRocyBrc2V0IGFzIGEgY2hpbGQgb2YgdGhlIHN0YWJsZSBrc2V0ICovCiAJcGF0aHNfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoInBhdGhzIiwgTlVMTCwgc3RhYmxlX2tvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwppbmRleCBkMDY2MjdjLi44YzRkMmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUtaGVscGVyLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0zMTMsNiArMzE0LDEyIEBACiAjZGVmaW5lIFJFU01BUF9NQVNLKG4pICAgICh+MFVMIDw8IChCSVRTX1BFUl9MT05HIC0gKG4pKSkKICNkZWZpbmUgUkVTTUFQX0lEWF9NQVNLICAgKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpCiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHB0cl90b19waWRlKHN0cnVjdCBpb2MgKmlvYywgdW5zaWduZWQgbG9uZyAqcmVzX3B0ciwKKwkJCQkgdW5zaWduZWQgaW50IGJpdHNoaWZ0Y250KQoreworCXJldHVybiAoKCh1bnNpZ25lZCBsb25nKXJlc19wdHIgLSAodW5zaWduZWQgbG9uZylpb2MtPnJlc19tYXApIDw8IDMpCisJCSsgYml0c2hpZnRjbnQ7Cit9CiAKIC8qKgogICogc2JhX3NlYXJjaF9iaXRtYXAgLSBmaW5kIGZyZWUgc3BhY2UgaW4gSU8gUERJUiByZXNvdXJjZSBiaXRtYXAKQEAgLTMyNCwxOSArMzMxLDM2IEBACiAgKiBDb29sIHBlcmYgb3B0aW1pemF0aW9uOiBzZWFyY2ggZm9yIGxvZzIoc2l6ZSkgYml0cyBhdCBhIHRpbWUuCiAgKi8KIHN0YXRpYyBTQkFfSU5MSU5FIHVuc2lnbmVkIGxvbmcKLXNiYV9zZWFyY2hfYml0bWFwKHN0cnVjdCBpb2MgKmlvYywgdW5zaWduZWQgbG9uZyBiaXRzX3dhbnRlZCkKK3NiYV9zZWFyY2hfYml0bWFwKHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGRldmljZSAqZGV2LAorCQkgIHVuc2lnbmVkIGxvbmcgYml0c193YW50ZWQpCiB7CiAJdW5zaWduZWQgbG9uZyAqcmVzX3B0ciA9IGlvYy0+cmVzX2hpbnQ7CiAJdW5zaWduZWQgbG9uZyAqcmVzX2VuZCA9ICh1bnNpZ25lZCBsb25nICopICYoaW9jLT5yZXNfbWFwW2lvYy0+cmVzX3NpemVdKTsKLQl1bnNpZ25lZCBsb25nIHBpZGUgPSB+MFVMOworCXVuc2lnbmVkIGxvbmcgcGlkZSA9IH4wVUwsIHRwaWRlOworCXVuc2lnbmVkIGxvbmcgYm91bmRhcnlfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNoaWZ0OworCWludCByZXQ7CisKKwlib3VuZGFyeV9zaXplID0gQUxJR04oKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfZ2V0X3NlZ19ib3VuZGFyeShkZXYpICsgMSwKKwkJCSAgICAgIDFVTEwgPDwgSU9WUF9TSElGVCkgPj4gSU9WUF9TSElGVDsKKworI2lmIGRlZmluZWQoWlgxX1NVUFBPUlQpCisJQlVHX09OKGlvYy0+aWJhc2UgJiB+SU9WUF9NQVNLKTsKKwlzaGlmdCA9IGlvYy0+aWJhc2UgPj4gSU9WUF9TSElGVDsKKyNlbHNlCisJc2hpZnQgPSAwOworI2VuZGlmCiAKIAlpZiAoYml0c193YW50ZWQgPiAoQklUU19QRVJfTE9ORy8yKSkgewogCQkvKiBTZWFyY2ggd29yZCBhdCBhIHRpbWUgLSBubyBtYXNrIG5lZWRlZCAqLwogCQlmb3IoOyByZXNfcHRyIDwgcmVzX2VuZDsgKytyZXNfcHRyKSB7Ci0JCQlpZiAoKnJlc19wdHIgPT0gMCkgeworCQkJdHBpZGUgPSBwdHJfdG9fcGlkZShpb2MsIHJlc19wdHIsIDApOworCQkJcmV0ID0gaW9tbXVfaXNfc3Bhbl9ib3VuZGFyeSh0cGlkZSwgYml0c193YW50ZWQsCisJCQkJCQkgICAgIHNoaWZ0LAorCQkJCQkJICAgICBib3VuZGFyeV9zaXplKTsKKwkJCWlmICgoKnJlc19wdHIgPT0gMCkgJiYgIXJldCkgewogCQkJCSpyZXNfcHRyID0gUkVTTUFQX01BU0soYml0c193YW50ZWQpOwotCQkJCXBpZGUgPSAoKHVuc2lnbmVkIGxvbmcpcmVzX3B0ciAtICh1bnNpZ25lZCBsb25nKWlvYy0+cmVzX21hcCk7Ci0JCQkJcGlkZSA8PD0gMzsJLyogY29udmVydCB0byBiaXQgYWRkcmVzcyAqLworCQkJCXBpZGUgPSB0cGlkZTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzY1LDExICszODksMTMgQEAKIAkJeyAKIAkJCURCR19SRVMoIiAgICAlcCAlbHggJWx4XG4iLCByZXNfcHRyLCBtYXNrLCAqcmVzX3B0cik7CiAJCQlXQVJOX09OKG1hc2sgPT0gMCk7Ci0JCQlpZigoKCpyZXNfcHRyKSAmIG1hc2spID09IDApIHsKKwkJCXRwaWRlID0gcHRyX3RvX3BpZGUoaW9jLCByZXNfcHRyLCBiaXRzaGlmdGNudCk7CisJCQlyZXQgPSBpb21tdV9pc19zcGFuX2JvdW5kYXJ5KHRwaWRlLCBiaXRzX3dhbnRlZCwKKwkJCQkJCSAgICAgc2hpZnQsCisJCQkJCQkgICAgIGJvdW5kYXJ5X3NpemUpOworCQkJaWYgKCgoKCpyZXNfcHRyKSAmIG1hc2spID09IDApICYmICFyZXQpIHsKIAkJCQkqcmVzX3B0ciB8PSBtYXNrOyAgICAgLyogbWFyayByZXNvdXJjZXMgYnVzeSEgKi8KLQkJCQlwaWRlID0gKCh1bnNpZ25lZCBsb25nKXJlc19wdHIgLSAodW5zaWduZWQgbG9uZylpb2MtPnJlc19tYXApOwotCQkJCXBpZGUgPDw9IDM7CS8qIGNvbnZlcnQgdG8gYml0IGFkZHJlc3MgKi8KLQkJCQlwaWRlICs9IGJpdHNoaWZ0Y250OworCQkJCXBpZGUgPSB0cGlkZTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW1hc2sgPj49IG87CkBAIC00MDQsNyArNDMwLDcgQEAKICAqIHJlc291cmNlIGJpdCBtYXAuCiAgKi8KIHN0YXRpYyBpbnQKLXNiYV9hbGxvY19yYW5nZShzdHJ1Y3QgaW9jICppb2MsIHNpemVfdCBzaXplKQorc2JhX2FsbG9jX3JhbmdlKHN0cnVjdCBpb2MgKmlvYywgc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfbmVlZGVkID0gc2l6ZSA+PiBJT1ZQX1NISUZUOwogI2lmZGVmIFNCQV9DT0xMRUNUX1NUQVRTCkBAIC00MTIsOSArNDM4LDkgQEAKICNlbmRpZgogCXVuc2lnbmVkIGxvbmcgcGlkZTsKIAotCXBpZGUgPSBzYmFfc2VhcmNoX2JpdG1hcChpb2MsIHBhZ2VzX25lZWRlZCk7CisJcGlkZSA9IHNiYV9zZWFyY2hfYml0bWFwKGlvYywgZGV2LCBwYWdlc19uZWVkZWQpOwogCWlmIChwaWRlID49IChpb2MtPnJlc19zaXplIDw8IDMpKSB7Ci0JCXBpZGUgPSBzYmFfc2VhcmNoX2JpdG1hcChpb2MsIHBhZ2VzX25lZWRlZCk7CisJCXBpZGUgPSBzYmFfc2VhcmNoX2JpdG1hcChpb2MsIGRldiwgcGFnZXNfbmVlZGVkKTsKIAkJaWYgKHBpZGUgPj0gKGlvYy0+cmVzX3NpemUgPDwgMykpCiAJCQlwYW5pYygiJXM6IEkvTyBNTVUgQCAlcCBpcyBvdXQgb2YgbWFwcGluZyByZXNvdXJjZXNcbiIsCiAJCQkgICAgICBfX0ZJTEVfXywgaW9jLT5pb2NfaHBhKTsKQEAgLTcxMCw3ICs3MzYsNyBAQAogCWlvYy0+bXNpbmdsZV9jYWxscysrOwogCWlvYy0+bXNpbmdsZV9wYWdlcyArPSBzaXplID4+IElPVlBfU0hJRlQ7CiAjZW5kaWYKLQlwaWRlID0gc2JhX2FsbG9jX3JhbmdlKGlvYywgc2l6ZSk7CisJcGlkZSA9IHNiYV9hbGxvY19yYW5nZShpb2MsIGRldiwgc2l6ZSk7CiAJaW92cCA9IChkbWFfYWRkcl90KSBwaWRlIDw8IElPVlBfU0hJRlQ7CiAKIAlEQkdfUlVOKCIlcygpIDB4JXAgLT4gMHglbHhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCmluZGV4IGI3YmNkY2MuLjIwOWI0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCkBAIC0zNiw3ICszNiw3IEBACiBjb25maWcgUEFSUE9SVF9QQwogCXRyaXN0YXRlICJQQy1zdHlsZSBoYXJkd2FyZSIKIAlkZXBlbmRzIG9uICghU1BBUkM2NCB8fCBQQ0kpICYmICFTUEFSQzMyICYmICFNMzJSICYmICFGUlYgJiYgXAotCQkoIU02OEsgfHwgSVNBKSAmJiAhTU4xMDMwMAorCQkoIU02OEsgfHwgSVNBKSAmJiAhTU4xMDMwMCAmJiAhQVZSMzIKIAktLS1oZWxwLS0tCiAJICBZb3Ugc2hvdWxkIHNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBQQy1zdHlsZSBwYXJhbGxlbCBwb3J0LiBBbGwKIAkgIElCTSBQQyBjb21wYXRpYmxlIGNvbXB1dGVycyBhbmQgc29tZSBBbHBoYXMgaGF2ZSBQQy1zdHlsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKaW5kZXggZDc2ZDM3Yi4uYTg1ODA4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCkBAIC0xNTY4LDkgKzE1NjgsOCBAQAogCQlvdXRiKHIgfCA4LCAweDJGKTsKIAkJb3V0YigweDAyLCAweDJFKTsJLyogTG9jayAqLwogCQlvdXRiKDB4MDIsIDB4MkYpOwotCi0JCXJlbGVhc2VfcmVnaW9uKDB4MmUsIDEpOwogCX0KKwlyZWxlYXNlX3JlZ2lvbigweDJlLCAxKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2FjY2Vzcy5jIGIvZHJpdmVycy9wY2kvYWNjZXNzLmMKaW5kZXggZmM0MDVmMC4uZWM4ZjcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYWNjZXNzLmMKKysrIGIvZHJpdmVycy9wY2kvYWNjZXNzLmMKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTI2LDYgKzEyNywxNzEgQEAKIFBDSV9VU0VSX1dSSVRFX0NPTkZJRyh3b3JkLCB1MTYpCiBQQ0lfVVNFUl9XUklURV9DT05GSUcoZHdvcmQsIHUzMikKIAorLyogVlBEIGFjY2VzcyB0aHJvdWdoIFBDSSAyLjIrIFZQRCBjYXBhYmlsaXR5ICovCisKKyNkZWZpbmUgUENJX1ZQRF9QQ0kyMl9TSVpFIChQQ0lfVlBEX0FERFJfTUFTSyArIDEpCisKK3N0cnVjdCBwY2lfdnBkX3BjaTIyIHsKKwlzdHJ1Y3QgcGNpX3ZwZCBiYXNlOworCXNwaW5sb2NrX3QgbG9jazsgLyogY29udHJvbHMgYWNjZXNzIHRvIGhhcmR3YXJlIGFuZCB0aGUgZmxhZ3MgKi8KKwl1OAljYXA7CisJYm9vbAlidXN5OworCWJvb2wJZmxhZzsgLyogdmFsdWUgb2YgRiBiaXQgdG8gd2FpdCBmb3IgKi8KK307CisKKy8qIFdhaXQgZm9yIGxhc3Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCitzdGF0aWMgaW50IHBjaV92cGRfcGNpMjJfd2FpdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfdnBkX3BjaTIyICp2cGQgPQorCQljb250YWluZXJfb2YoZGV2LT52cGQsIHN0cnVjdCBwY2lfdnBkX3BjaTIyLCBiYXNlKTsKKwl1MTYgZmxhZywgc3RhdHVzOworCWludCB3YWl0OworCWludCByZXQ7CisKKwlpZiAoIXZwZC0+YnVzeSkKKwkJcmV0dXJuIDA7CisKKwlmbGFnID0gdnBkLT5mbGFnID8gUENJX1ZQRF9BRERSX0YgOiAwOworCXdhaXQgPSB2cGQtPmZsYWcgPyAxMCA6IDEwMDA7IC8qIHJlYWQ6IDEwMCB1czsgd3JpdGU6IDEwIG1zICovCisJZm9yICg7OykgeworCQlyZXQgPSBwY2lfdXNlcl9yZWFkX2NvbmZpZ193b3JkKGRldiwKKwkJCQkJCXZwZC0+Y2FwICsgUENJX1ZQRF9BRERSLAorCQkJCQkJJnN0YXR1cyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKChzdGF0dXMgJiBQQ0lfVlBEX0FERFJfRikgPT0gZmxhZykgeworCQkJdnBkLT5idXN5ID0gZmFsc2U7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAod2FpdC0tID09IDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJdWRlbGF5KDEwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGNpX3ZwZF9wY2kyMl9yZWFkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIGludCBzaXplLAorCQkJICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfdnBkX3BjaTIyICp2cGQgPQorCQljb250YWluZXJfb2YoZGV2LT52cGQsIHN0cnVjdCBwY2lfdnBkX3BjaTIyLCBiYXNlKTsKKwl1MzIgdmFsOworCWludCByZXQ7CisJaW50IGJlZ2luLCBlbmQsIGk7CisKKwlpZiAocG9zIDwgMCB8fCBwb3MgPiBQQ0lfVlBEX1BDSTIyX1NJWkUgfHwKKwkgICAgc2l6ZSA+IFBDSV9WUERfUENJMjJfU0laRSAgLSBwb3MpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzaXplID09IDApCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2lycSgmdnBkLT5sb2NrKTsKKwlyZXQgPSBwY2lfdnBkX3BjaTIyX3dhaXQoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gcGNpX3VzZXJfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCB2cGQtPmNhcCArIFBDSV9WUERfQUREUiwKKwkJCQkJIHBvcyAmIH4zKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJdnBkLT5idXN5ID0gdHJ1ZTsKKwl2cGQtPmZsYWcgPSAxOworCXJldCA9IHBjaV92cGRfcGNpMjJfd2FpdChkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlyZXQgPSBwY2lfdXNlcl9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHZwZC0+Y2FwICsgUENJX1ZQRF9EQVRBLAorCQkJCQkgJnZhbCk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxKCZ2cGQtPmxvY2spOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ29udmVydCB0byBieXRlcyAqLworCWJlZ2luID0gcG9zICYgMzsKKwllbmQgPSBtaW4oNCwgYmVnaW4gKyBzaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgZW5kOyArK2kpIHsKKwkJaWYgKGkgPj0gYmVnaW4pCisJCQkqYnVmKysgPSB2YWw7CisJCXZhbCA+Pj0gODsKKwl9CisJcmV0dXJuIGVuZCAtIGJlZ2luOworfQorCitzdGF0aWMgaW50IHBjaV92cGRfcGNpMjJfd3JpdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBvcywgaW50IHNpemUsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfdnBkX3BjaTIyICp2cGQgPQorCQljb250YWluZXJfb2YoZGV2LT52cGQsIHN0cnVjdCBwY2lfdnBkX3BjaTIyLCBiYXNlKTsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlpZiAocG9zIDwgMCB8fCBwb3MgPiBQQ0lfVlBEX1BDSTIyX1NJWkUgfHwgcG9zICYgMyB8fAorCSAgICBzaXplID4gUENJX1ZQRF9QQ0kyMl9TSVpFIC0gcG9zIHx8IHNpemUgPCA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9ICh1OCkgKmJ1ZisrOworCXZhbCB8PSAoKHU4KSAqYnVmKyspIDw8IDg7CisJdmFsIHw9ICgodTgpICpidWYrKykgPDwgMTY7CisJdmFsIHw9ICgodTMyKSh1OCkgKmJ1ZisrKSA8PCAyNDsKKworCXNwaW5fbG9ja19pcnEoJnZwZC0+bG9jayk7CisJcmV0ID0gcGNpX3ZwZF9wY2kyMl93YWl0KGRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IHBjaV91c2VyX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHZwZC0+Y2FwICsgUENJX1ZQRF9EQVRBLAorCQkJCQkgIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IHBjaV91c2VyX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgdnBkLT5jYXAgKyBQQ0lfVlBEX0FERFIsCisJCQkJCSBwb3MgfCBQQ0lfVlBEX0FERFJfRik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXZwZC0+YnVzeSA9IHRydWU7CisJdnBkLT5mbGFnID0gMDsKKwlyZXQgPSBwY2lfdnBkX3BjaTIyX3dhaXQoZGV2KTsKK291dDoKKwlzcGluX3VubG9ja19pcnEoJnZwZC0+bG9jayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gNDsKK30KKworc3RhdGljIGludCBwY2lfdnBkX3BjaTIyX2dldF9zaXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIFBDSV9WUERfUENJMjJfU0laRTsKK30KKworc3RhdGljIHZvaWQgcGNpX3ZwZF9wY2kyMl9yZWxlYXNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJa2ZyZWUoY29udGFpbmVyX29mKGRldi0+dnBkLCBzdHJ1Y3QgcGNpX3ZwZF9wY2kyMiwgYmFzZSkpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV92cGRfb3BzIHBjaV92cGRfcGNpMjJfb3BzID0geworCS5yZWFkID0gcGNpX3ZwZF9wY2kyMl9yZWFkLAorCS53cml0ZSA9IHBjaV92cGRfcGNpMjJfd3JpdGUsCisJLmdldF9zaXplID0gcGNpX3ZwZF9wY2kyMl9nZXRfc2l6ZSwKKwkucmVsZWFzZSA9IHBjaV92cGRfcGNpMjJfcmVsZWFzZSwKK307CisKK2ludCBwY2lfdnBkX3BjaTIyX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX3ZwZF9wY2kyMiAqdnBkOworCXU4IGNhcDsKKworCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1ZQRCk7CisJaWYgKCFjYXApCisJCXJldHVybiAtRU5PREVWOworCXZwZCA9IGt6YWxsb2Moc2l6ZW9mKCp2cGQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXZwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2cGQtPmJhc2Uub3BzID0gJnBjaV92cGRfcGNpMjJfb3BzOworCXNwaW5fbG9ja19pbml0KCZ2cGQtPmxvY2spOworCXZwZC0+Y2FwID0gY2FwOworCXZwZC0+YnVzeSA9IGZhbHNlOworCWRldi0+dnBkID0gJnZwZC0+YmFzZTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBwY2lfYmxvY2tfdXNlcl9jZmdfYWNjZXNzIC0gQmxvY2sgdXNlcnNwYWNlIFBDSSBjb25maWcgcmVhZHMvd3JpdGVzCiAgKiBAZGV2OglwY2kgZGV2aWNlIHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYnVzLmMgYi9kcml2ZXJzL3BjaS9idXMuYwppbmRleCBlZjVhNmEyLi41MjlkOWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9idXMuYworKysgYi9kcml2ZXJzL3BjaS9idXMuYwpAQCAtODQsMTAgKzg0LDcgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JZG93bl93cml0ZSgmcGNpX2J1c19zZW0pOwotCWxpc3RfYWRkX3RhaWwoJmRldi0+Z2xvYmFsX2xpc3QsICZwY2lfZGV2aWNlcyk7Ci0JdXBfd3JpdGUoJnBjaV9idXNfc2VtKTsKLQorCWRldi0+aXNfYWRkZWQgPSAxOwogCXBjaV9wcm9jX2F0dGFjaF9kZXZpY2UoZGV2KTsKIAlwY2lfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhkZXYpOwogCXJldHVybiAwOwpAQCAtMTEyLDExICsxMDksOCBAQAogCWludCByZXR2YWw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJLyoKLQkJICogU2tpcCBhbHJlYWR5LXByZXNlbnQgZGV2aWNlcyAod2hpY2ggYXJlIG9uIHRoZQotCQkgKiBnbG9iYWwgZGV2aWNlIGxpc3QuKQotCQkgKi8KLQkJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPmdsb2JhbF9saXN0KSkKKwkJLyogU2tpcCBhbHJlYWR5LWFkZGVkIGRldmljZXMgKi8KKwkJaWYgKGRldi0+aXNfYWRkZWQpCiAJCQljb250aW51ZTsKIAkJcmV0dmFsID0gcGNpX2J1c19hZGRfZGV2aWNlKGRldik7CiAJCWlmIChyZXR2YWwpCkBAIC0xMjQsOCArMTE4LDcgQEAKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQotCQlCVUdfT04obGlzdF9lbXB0eSgmZGV2LT5nbG9iYWxfbGlzdCkpOworCQlCVUdfT04oIWRldi0+aXNfYWRkZWQpOwogCiAJCS8qCiAJCSAqIElmIHRoZXJlIGlzIGFuIHVuYXR0YWNoZWQgc3Vib3JkaW5hdGUgYnVzLCBhdHRhY2gKQEAgLTE0MywxNSArMTM2LDIxIEBACiAJCQkvKiByZWdpc3RlciB0aGUgYnVzIHdpdGggc3lzZnMgYXMgdGhlIHBhcmVudCBpcyBub3cKIAkJCSAqIHByb3Blcmx5IHJlZ2lzdGVyZWQuICovCiAJCQljaGlsZF9idXMgPSBkZXYtPnN1Ym9yZGluYXRlOworCQkJaWYgKGNoaWxkX2J1cy0+aXNfYWRkZWQpCisJCQkJY29udGludWU7CiAJCQljaGlsZF9idXMtPmRldi5wYXJlbnQgPSBjaGlsZF9idXMtPmJyaWRnZTsKIAkJCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmY2hpbGRfYnVzLT5kZXYpOwotCQkJaWYgKCFyZXR2YWwpCisJCQlpZiAocmV0dmFsKQorCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgcmVnaXN0ZXJpbmcgcGNpX2J1cywiCisJCQkJCSIgY29udGludWluZy4uLlxuIik7CisJCQllbHNlIHsKKwkJCQljaGlsZF9idXMtPmlzX2FkZGVkID0gMTsKIAkJCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNoaWxkX2J1cy0+ZGV2LAogCQkJCQkJCSZkZXZfYXR0cl9jcHVhZmZpbml0eSk7CisJCQl9CiAJCQlpZiAocmV0dmFsKQotCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgcmVnaXN0ZXJpbmcgcGNpX2J1cyIKLQkJCQkJIiBkZXZpY2UgYnJpZGdlIHN5bWxpbmssIgotCQkJCQkiIGNvbnRpbnVpbmcuLi5cbiIpOworCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgY3JlYXRpbmcgY3B1YWZmaW5pdHkiCisJCQkJCSIgZmlsZSwgY29udGludWluZy4uLlxuIik7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggOGVkMjY0OC4uZjk0MWY2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtMTQsMTEgKzE0LDEyIEBACiAgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCiAgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCi0gKiAJQ29weXJpZ2h0IChDKSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0gKglDb3B5cmlnaHQgKEMpIFNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgotICoJQ29weXJpZ2h0IChDKSBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorICogQXV0aG9yOiBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqIEF1dGhvcjogQW5pbCBTIEtlc2hhdmFtdXJ0aHkgPGFuaWwucy5rZXNoYXZhbXVydGh5QGludGVsLmNvbT4KICAqCi0gKiAJVGhpcyBmaWxlIGltcGxlbWVudHMgZWFybHkgZGV0ZWN0aW9uL3BhcnNpbmcgb2YgRE1BIFJlbWFwcGluZyBEZXZpY2VzCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBlYXJseSBkZXRlY3Rpb24vcGFyc2luZyBvZiBETUEgUmVtYXBwaW5nIERldmljZXMKICAqIHJlcG9ydGVkIHRvIE9TIHRocm91Z2ggQklPUyB2aWEgRE1BIHJlbWFwcGluZyByZXBvcnRpbmcgKERNQVIpIEFDUEkKICAqIHRhYmxlcy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy1wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWctcGNpLmMKaW5kZXggYTU5MGVmNi4uNGQ0YTY0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWctcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy1wY2kuYwpAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlICJwY2kuaCIKIAogCi11bnNpZ25lZCBpbnQgcGNpX2RvX3NjYW5fYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit1bnNpZ25lZCBpbnQgX19kZXZpbml0IHBjaV9kb19zY2FuX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXVuc2lnbmVkIGludCBtYXg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZwppbmRleCAyY2RkODMyLi5lYWNmYjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnCkBAIC02Myw3ICs2Myw3IEBACiAKIGNvbmZpZyBIT1RQTFVHX1BDSV9JQk0KIAl0cmlzdGF0ZSAiSUJNIFBDSSBIb3RwbHVnIGRyaXZlciIKLQlkZXBlbmRzIG9uIFg4Nl9JT19BUElDICYmIFg4NiAmJiBQQ0lfQklPUyAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBYODZfSU9fQVBJQyAmJiBYODYgJiYgUENJX0JJT1MKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgbW90aGVyYm9hcmQgd2l0aCBhIElCTSBQQ0kgSG90cGx1ZwogCSAgY29udHJvbGxlci4KQEAgLTExOSw3ICsxMTksNyBAQAogCiBjb25maWcgSE9UUExVR19QQ0lfQ1BDSV9HRU5FUklDCiAJdHJpc3RhdGUgIkdlbmVyaWMgcG9ydCBJL08gQ29tcGFjdFBDSSBIb3RwbHVnIGRyaXZlciIKLQlkZXBlbmRzIG9uIEhPVFBMVUdfUENJX0NQQ0kgJiYgWDg2ICYmIFBDSV9MRUdBQ1kKKwlkZXBlbmRzIG9uIEhPVFBMVUdfUENJX0NQQ0kgJiYgWDg2CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIENvbXBhY3RQQ0kgc3lzdGVtIGNhcmQgdGhhdCBleHBvc2VzIHRoZSAjRU5VTQogCSAgaG90c3dhcCBzaWduYWwgYXMgYSBiaXQgaW4gYSBzeXN0ZW0gcmVnaXN0ZXIgdGhhdCBjYW4gYmUgcmVhZCB0aHJvdWdoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlfcGNpaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCmluZGV4IDI3MGEzM2MuLmY4YzE4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNkZWZpbmUgTVlfTkFNRQkiYWNwaV9wY2locCIKIAotI2RlZmluZSBkYmcoZm10LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnX2FjcGkpIHByaW50ayhLRVJOX0RFQlVHICIlczogJXM6ICIgZm10ICwgTVlfTkFNRSAsIF9fRlVOQ1RJT05fXyAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRiZyhmbXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWdfYWNwaSkgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlczogIiBmbXQgLCBNWV9OQU1FICwgX19mdW5jX18gLCAjIyBhcmcpOyB9IHdoaWxlICgwKQogI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0ICwgTVlfTkFNRSAsICMjIGFyZykKICNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0ICwgTVlfTkFNRSAsICMjIGFyZykKICNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0ICwgTVlfTkFNRSAsICMjIGFyZykKQEAgLTcxLDcgKzcxLDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IFR5cGUgMCBSZXZpc2lvbiAlZCByZWNvcmQgbm90IHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV2aXNpb24pOworCQkgICAgICAgX19mdW5jX18sIHJldmlzaW9uKTsKIAkJcmV0dXJuIEFFX0VSUk9SOwogCX0KIAlyZXR1cm4gQUVfT0s7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IFR5cGUgMSBSZXZpc2lvbiAlZCByZWNvcmQgbm90IHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV2aXNpb24pOworCQkgICAgICAgX19mdW5jX18sIHJldmlzaW9uKTsKIAkJcmV0dXJuIEFFX0VSUk9SOwogCX0KIAlyZXR1cm4gQUVfT0s7CkBAIC0xNDIsNyArMTQyLDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IFR5cGUgMiBSZXZpc2lvbiAlZCByZWNvcmQgbm90IHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV2aXNpb24pOworCQkgICAgICAgX19mdW5jX18sIHJldmlzaW9uKTsKIAkJcmV0dXJuIEFFX0VSUk9SOwogCX0KIAlyZXR1cm4gQUVfT0s7CkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVHlwZSAlZCByZWNvcmQgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHR5cGUpOworCQkJICAgICAgIF9fZnVuY19fLCB0eXBlKTsKIAkJCXN0YXR1cyA9IEFFX0VSUk9SOwogCQkJZ290byBleGl0OwogCQl9CkBAIC0yMzUsNyArMjM1LDcgQEAKIAkJcmV0X2J1Zi5wb2ludGVyID0ga21hbGxvYyAocmV0X2J1Zi5sZW5ndGgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXJldF9idWYucG9pbnRlcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczolcyBhbGxvYyBmb3IgX0hQUCBmYWlsXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgKGNoYXIgKilzdHJpbmcucG9pbnRlcik7CisJCQkJX19mdW5jX18sIChjaGFyICopc3RyaW5nLnBvaW50ZXIpOwogCQkJa2ZyZWUoc3RyaW5nLnBvaW50ZXIpOwogCQkJcmV0dXJuIEFFX05PX01FTU9SWTsKIAkJfQpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXByX2RlYnVnKCIlczolcyBfSFBQIGZhaWw9MHgleFxuIiwgX19GVU5DVElPTl9fLAorCQkJcHJfZGVidWcoIiVzOiVzIF9IUFAgZmFpbD0weCV4XG4iLCBfX2Z1bmNfXywKIAkJCQkoY2hhciAqKXN0cmluZy5wb2ludGVyLCBzdGF0dXMpOwogCQkJa2ZyZWUoc3RyaW5nLnBvaW50ZXIpOwogCQkJcmV0dXJuIHN0YXR1czsKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJZXh0X29iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSByZXRfYnVmLnBvaW50ZXI7CiAJaWYgKGV4dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczolcyBfSFBQIG9iaiBub3QgYSBwYWNrYWdlXG4iLCBfX0ZVTkNUSU9OX18sCisJCXByaW50ayhLRVJOX0VSUiAiJXM6JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgX19mdW5jX18sCiAJCQkJKGNoYXIgKilzdHJpbmcucG9pbnRlcik7CiAJCXN0YXR1cyA9IEFFX0VSUk9SOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiVzIF9IUFAgb2JqIHR5cGUgaW5jb3JyZWN0XG4iLAotCQkJCV9fRlVOQ1RJT05fXywgKGNoYXIgKilzdHJpbmcucG9pbnRlcik7CisJCQkJX19mdW5jX18sIChjaGFyICopc3RyaW5nLnBvaW50ZXIpOwogCQkJc3RhdHVzID0gQUVfRVJST1I7CiAJCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAkJfQpAQCAtMzExLDEyICszMTEsMTIgQEAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCWlmIChzdGF0dXMgIT0gQUVfTk9UX0ZPVU5EKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczolcyBPU0hQIGZhaWxzPTB4JXhcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCAoY2hhciAqKXN0cmluZy5wb2ludGVyLCBzdGF0dXMpOworCQkJICAgICAgIF9fZnVuY19fLCAoY2hhciAqKXN0cmluZy5wb2ludGVyLCBzdGF0dXMpOwogCQllbHNlCiAJCQlkYmcoIiVzOiVzIE9TSFAgbm90IGZvdW5kXG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXywgKGNoYXIgKilzdHJpbmcucG9pbnRlcik7CisJCQkgICAgX19mdW5jX18sIChjaGFyICopc3RyaW5nLnBvaW50ZXIpOwogCWVsc2UKLQkJcHJfZGVidWcoIiVzOiVzIE9TSFAgcGFzc2VzXG4iLCBfX0ZVTkNUSU9OX18sCisJCXByX2RlYnVnKCIlczolcyBPU0hQIHBhc3Nlc1xuIiwgX19mdW5jX18sCiAJCQkoY2hhciAqKXN0cmluZy5wb2ludGVyKTsKIAogCWtmcmVlKHN0cmluZy5wb2ludGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCmluZGV4IGM4YzI2MzguLjdhZjY4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkvKiBlbmFibGUgdGhlIHNwZWNpZmllZCBzbG90ICovCiAJcmV0dXJuIGFjcGlwaHBfZW5hYmxlX3Nsb3Qoc2xvdC0+YWNwaV9zbG90KTsKQEAgLTE1Niw3ICsxNTYsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkvKiBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgc2xvdCAqLwogCXJldHZhbCA9IGFjcGlwaHBfZGlzYWJsZV9zbG90KHNsb3QtPmFjcGlfc2xvdCk7CkBAIC0xNzksNyArMTc5LDcgQEAKICB7CiAJaW50IHJldHZhbCA9IC1FTk9ERVY7CiAKLSAJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKICAKIAlpZiAoYXR0ZW50aW9uX2luZm8gJiYgdHJ5X21vZHVsZV9nZXQoYXR0ZW50aW9uX2luZm8tPm93bmVyKSkgewogCQlyZXR2YWwgPSBhdHRlbnRpb25faW5mby0+c2V0X2F0dG4oaG90cGx1Z19zbG90LCBzdGF0dXMpOwpAQCAtMjAyLDcgKzIwMiw3IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkqdmFsdWUgPSBhY3BpcGhwX2dldF9wb3dlcl9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKIApAQCAtMjI0LDcgKzIyNCw3IEBACiB7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlpZiAoYXR0ZW50aW9uX2luZm8gJiYgdHJ5X21vZHVsZV9nZXQoYXR0ZW50aW9uX2luZm8tPm93bmVyKSkgewogCQlyZXR2YWwgPSBhdHRlbnRpb25faW5mby0+Z2V0X2F0dG4oaG90cGx1Z19zbG90LCB2YWx1ZSk7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCSp2YWx1ZSA9IGFjcGlwaHBfZ2V0X2xhdGNoX3N0YXR1cyhzbG90LT5hY3BpX3Nsb3QpOwogCkBAIC0yNjcsNyArMjY3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCSp2YWx1ZSA9IGFjcGlwaHBfZ2V0X2FkYXB0ZXJfc3RhdHVzKHNsb3QtPmFjcGlfc2xvdCk7CiAKQEAgLTI4NCw3ICsyODQsNyBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJKnZhbHVlID0gYWNwaXBocF9nZXRfYWRkcmVzcyhzbG90LT5hY3BpX3Nsb3QpOwogCkBAIC0zMTgsNyArMzE4LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdCk7CiAJa2ZyZWUoc2xvdCk7CkBAIC0zOTIsNiArMzkyLDkgQEAKIHsKIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAorCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKKwkJcmV0dXJuIDA7CisKIAlhY3BpcGhwX2RlYnVnID0gZGVidWc7CiAKIAkvKiByZWFkIGFsbCB0aGUgQUNQSSBpbmZvIGZyb20gdGhlIHN5c3RlbSAqLwpAQCAtNDAxLDYgKzQwNCw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpcGhwX2V4aXQodm9pZCkKIHsKKwlpZiAoYWNwaV9wY2lfZGlzYWJsZWQpCisJCXJldHVybjsKKwogCS8qIGRlYWxsb2NhdGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4gKi8KIAlhY3BpcGhwX2dsdWVfZXhpdCgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKaW5kZXggY2YyMmY5ZS4uNjQ4NTk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCkBAIC0zNTIsNyArMzUyLDcgQEAKIAkJLyogdXNlIGRlZmF1bHQgbnVtYmVycyAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IENvdWxkIG5vdCBnZXQgaG90cGx1ZyBwYXJhbWV0ZXJzLiBVc2UgZGVmYXVsdHNcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlicmlkZ2UtPmhwcC50MCA9ICZicmlkZ2UtPmhwcC50eXBlMF9kYXRhOwogCQlicmlkZ2UtPmhwcC50MC0+cmV2aXNpb24gPSAwOwogCQlicmlkZ2UtPmhwcC50MC0+Y2FjaGVfbGluZV9zaXplID0gMHgxMDsKQEAgLTUzNCw3ICs1MzQsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9BRFIiLCBOVUxMLCAmdG1wKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZGJnKCIlczogX0FEUiBldmFsdWF0aW9uIGZhaWx1cmVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZygiJXM6IF9BRFIgZXZhbHVhdGlvbiBmYWlsdXJlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBBRV9PSzsKIAl9CiAKQEAgLTU3OCw3ICs1NzgsNyBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1NUQSIsIE5VTEwsICZ0bXApOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWRiZygiJXM6IF9TVEEgZXZhbHVhdGlvbiBmYWlsdXJlXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZGJnKCIlczogX1NUQSBldmFsdWF0aW9uIGZhaWx1cmVcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmICgodG1wICYgQUNQSV9TVEFfRlVOQ1RJT05JTkcpID09IDApCkBAIC05MjgsMTAgKzkyOCwxMCBAQAogCQlmdW5jID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgYWNwaXBocF9mdW5jLCBzaWJsaW5nKTsKIAogCQlpZiAoZnVuYy0+ZmxhZ3MgJiBGVU5DX0hBU19QUzApIHsKLQkJCWRiZygiJXM6IGV4ZWN1dGluZyBfUFMwXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZGJnKCIlczogZXhlY3V0aW5nIF9QUzBcbiIsIF9fZnVuY19fKTsKIAkJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGZ1bmMtPmhhbmRsZSwgIl9QUzAiLCBOVUxMLCBOVUxMKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCXdhcm4oIiVzOiBfUFMwIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQl3YXJuKCIlczogX1BTMCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCQlyZXR2YWwgPSAtMTsKIAkJCQlnb3RvIGVycl9leGl0OwogCQkJfSBlbHNlCkBAIC05NjYsNyArOTY2LDcgQEAKIAkJaWYgKGZ1bmMtPmZsYWdzICYgRlVOQ19IQVNfUFMzKSB7CiAJCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChmdW5jLT5oYW5kbGUsICJfUFMzIiwgTlVMTCwgTlVMTCk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQl3YXJuKCIlczogX1BTMyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJd2FybigiJXM6IF9QUzMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQkJcmV0dmFsID0gLTE7CiAJCQkJZ290byBlcnJfZXhpdDsKIAkJCX0gZWxzZQpAQCAtMTA4NSw3ICsxMDg1LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBwZXIgKnBoeXNpY2FsIHNsb3QqLAogICogbm90IHBlciBlYWNoIHNsb3Qgb2JqZWN0IGluIEFDUEkgbmFtZXNwYWNlLgogICovCi1zdGF0aWMgaW50IGVuYWJsZV9kZXZpY2Uoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCkKK3N0YXRpYyBpbnQgX19yZWYgZW5hYmxlX2RldmljZShzdHJ1Y3QgYWNwaXBocF9zbG90ICpzbG90KQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHNsb3QtPmJyaWRnZS0+cGNpX2J1czsKQEAgLTEzMDAsNyArMTMwMCw3IEBACiAKIAkJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGZ1bmMtPmhhbmRsZSwgIl9FSjAiLCAmYXJnX2xpc3QsIE5VTEwpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJd2FybigiJXM6IF9FSjAgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCXdhcm4oIiVzOiBfRUowIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJCXJldHVybiAtMTsKIAkJCX0gZWxzZQogCQkJCWJyZWFrOwpAQCAtMTM0OSw3ICsxMzQ5LDcgQEAKIAkJfQogCX0KIAotCWRiZygiJXM6ICVkIGVuYWJsZWQsICVkIGRpc2FibGVkXG4iLCBfX0ZVTkNUSU9OX18sIGVuYWJsZWQsIGRpc2FibGVkKTsKKwlkYmcoIiVzOiAlZCBlbmFibGVkLCAlZCBkaXNhYmxlZFxuIiwgX19mdW5jX18sIGVuYWJsZWQsIGRpc2FibGVkKTsKIAogIGVycl9leGl0OgogCXJldHVybiByZXR2YWw7CkBAIC0xNTI3LDcgKzE1MjcsNyBAQAogCWlmIChicmlkZ2UpIHsKIAkJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7CiAJCWRiZygiJXM6IHJlLWVudW1lcmF0aW5nIHNsb3RzIHVuZGVyICVzXG4iLAotCQkJX19GVU5DVElPTl9fLCBvYmpuYW1lKTsKKwkJCV9fZnVuY19fLCBvYmpuYW1lKTsKIAkJYWNwaXBocF9jaGVja19icmlkZ2UoYnJpZGdlKTsKIAl9CiAJcmV0dXJuIEFFX09LIDsKQEAgLTE1NzIsMTAgKzE1NzIsMTAgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFDUElfTk9USUZZX0JVU19DSEVDSzoKIAkJLyogYnVzIHJlLWVudW1lcmF0ZSAqLwotCQlkYmcoIiVzOiBCdXMgY2hlY2sgbm90aWZ5IG9uICVzXG4iLCBfX0ZVTkNUSU9OX18sIG9iam5hbWUpOworCQlkYmcoIiVzOiBCdXMgY2hlY2sgbm90aWZ5IG9uICVzXG4iLCBfX2Z1bmNfXywgb2JqbmFtZSk7CiAJCWlmIChicmlkZ2UpIHsKIAkJCWRiZygiJXM6IHJlLWVudW1lcmF0aW5nIHNsb3RzIHVuZGVyICVzXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgb2JqbmFtZSk7CisJCQkJX19mdW5jX18sIG9iam5hbWUpOwogCQkJYWNwaXBocF9jaGVja19icmlkZ2UoYnJpZGdlKTsKIAkJfQogCQlpZiAobnVtX3N1Yl9icmlkZ2VzKQpAQCAtMTU4NSwxOCArMTU4NSwxOCBAQAogCiAJY2FzZSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0s6CiAJCS8qIGRldmljZSBjaGVjayAqLwotCQlkYmcoIiVzOiBEZXZpY2UgY2hlY2sgbm90aWZ5IG9uICVzXG4iLCBfX0ZVTkNUSU9OX18sIG9iam5hbWUpOworCQlkYmcoIiVzOiBEZXZpY2UgY2hlY2sgbm90aWZ5IG9uICVzXG4iLCBfX2Z1bmNfXywgb2JqbmFtZSk7CiAJCWFjcGlwaHBfY2hlY2tfYnJpZGdlKGJyaWRnZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRToKIAkJLyogd2FrZSBldmVudCAqLwotCQlkYmcoIiVzOiBEZXZpY2Ugd2FrZSBub3RpZnkgb24gJXNcbiIsIF9fRlVOQ1RJT05fXywgb2JqbmFtZSk7CisJCWRiZygiJXM6IERldmljZSB3YWtlIG5vdGlmeSBvbiAlc1xuIiwgX19mdW5jX18sIG9iam5hbWUpOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVDoKIAkJLyogcmVxdWVzdCBkZXZpY2UgZWplY3QgKi8KLQkJZGJnKCIlczogRGV2aWNlIGVqZWN0IG5vdGlmeSBvbiAlc1xuIiwgX19GVU5DVElPTl9fLCBvYmpuYW1lKTsKKwkJZGJnKCIlczogRGV2aWNlIGVqZWN0IG5vdGlmeSBvbiAlc1xuIiwgX19mdW5jX18sIG9iam5hbWUpOwogCQlpZiAoKGJyaWRnZS0+dHlwZSAhPSBCUklER0VfVFlQRV9IT1NUKSAmJgogCQkgICAgKGJyaWRnZS0+ZmxhZ3MgJiBCUklER0VfSEFTX0VKMCkpIHsKIAkJCXN0cnVjdCBhY3BpcGhwX3Nsb3QgKnNsb3Q7CkBAIC0xNjQ5LDI0ICsxNjQ5LDI0IEBACiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0s6CiAJCS8qIGJ1cyByZS1lbnVtZXJhdGUgKi8KLQkJZGJnKCIlczogQnVzIGNoZWNrIG5vdGlmeSBvbiAlc1xuIiwgX19GVU5DVElPTl9fLCBvYmpuYW1lKTsKKwkJZGJnKCIlczogQnVzIGNoZWNrIG5vdGlmeSBvbiAlc1xuIiwgX19mdW5jX18sIG9iam5hbWUpOwogCQlhY3BpcGhwX2VuYWJsZV9zbG90KGZ1bmMtPnNsb3QpOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLOgogCQkvKiBkZXZpY2UgY2hlY2sgOiByZS1lbnVtZXJhdGUgZnJvbSBwYXJlbnQgYnVzICovCi0JCWRiZygiJXM6IERldmljZSBjaGVjayBub3RpZnkgb24gJXNcbiIsIF9fRlVOQ1RJT05fXywgb2JqbmFtZSk7CisJCWRiZygiJXM6IERldmljZSBjaGVjayBub3RpZnkgb24gJXNcbiIsIF9fZnVuY19fLCBvYmpuYW1lKTsKIAkJYWNwaXBocF9jaGVja19icmlkZ2UoZnVuYy0+c2xvdC0+YnJpZGdlKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfTk9USUZZX0RFVklDRV9XQUtFOgogCQkvKiB3YWtlIGV2ZW50ICovCi0JCWRiZygiJXM6IERldmljZSB3YWtlIG5vdGlmeSBvbiAlc1xuIiwgX19GVU5DVElPTl9fLCBvYmpuYW1lKTsKKwkJZGJnKCIlczogRGV2aWNlIHdha2Ugbm90aWZ5IG9uICVzXG4iLCBfX2Z1bmNfXywgb2JqbmFtZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUOgogCQkvKiByZXF1ZXN0IGRldmljZSBlamVjdCAqLwotCQlkYmcoIiVzOiBEZXZpY2UgZWplY3Qgbm90aWZ5IG9uICVzXG4iLCBfX0ZVTkNUSU9OX18sIG9iam5hbWUpOworCQlkYmcoIiVzOiBEZXZpY2UgZWplY3Qgbm90aWZ5IG9uICVzXG4iLCBfX2Z1bmNfXywgb2JqbmFtZSk7CiAJCWlmICghKGFjcGlwaHBfZGlzYWJsZV9zbG90KGZ1bmMtPnNsb3QpKSkKIAkJCWFjcGlwaHBfZWplY3Rfc2xvdChmdW5jLT5zbG90KTsKIAkJYnJlYWs7CkBAIC0xNzk2LDcgKzE3OTYsNyBAQAogCQlpZiAocmV0dmFsKQogCQkJcG93ZXJfb2ZmX3Nsb3Qoc2xvdCk7CiAJfSBlbHNlIHsKLQkJZGJnKCIlczogU2xvdCBzdGF0dXMgaXMgbm90IEFDUElfU1RBX0FMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlczogU2xvdCBzdGF0dXMgaXMgbm90IEFDUElfU1RBX0FMTFxuIiwgX19mdW5jX18pOwogCQlwb3dlcl9vZmZfc2xvdChzbG90KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYwppbmRleCA3NTBlYmQ3Li5lZGU5MDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAogCWlibV9zbG90ID0gaWJtX3Nsb3RfZnJvbV9pZChocHNsb3RfdG9fc3VuKHNsb3QpKTsKIAotCWRiZygiJXM6IHNldCBzbG90ICVkICglZCkgYXR0ZW50aW9uIHN0YXR1cyB0byAlZFxuIiwgX19GVU5DVElPTl9fLAorCWRiZygiJXM6IHNldCBzbG90ICVkICglZCkgYXR0ZW50aW9uIHN0YXR1cyB0byAlZFxuIiwgX19mdW5jX18sCiAJCQlpYm1fc2xvdC0+c2xvdC5zbG90X251bSwgaWJtX3Nsb3QtPnNsb3Quc2xvdF9pZCwKIAkJCShzdGF0dXMgPyAxIDogMCkpOwogCkBAIC0yMzEsNyArMjMxLDcgQEAKIAllbHNlCiAJCSpzdGF0dXMgPSAwOwogCi0JZGJnKCIlczogZ2V0IHNsb3QgJWQgKCVkKSBhdHRlbnRpb24gc3RhdHVzIGlzICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJZGJnKCIlczogZ2V0IHNsb3QgJWQgKCVkKSBhdHRlbnRpb24gc3RhdHVzIGlzICVkXG4iLCBfX2Z1bmNfXywKIAkJCWlibV9zbG90LT5zbG90LnNsb3RfbnVtLCBpYm1fc2xvdC0+c2xvdC5zbG90X2lkLAogCQkJKnN0YXR1cyk7CiAKQEAgLTI2MywxMCArMjYzLDEwIEBACiAJdTggc3ViZXZlbnQgPSBldmVudCAmIDB4ZjA7CiAJc3RydWN0IG5vdGlmaWNhdGlvbiAqbm90ZSA9IGNvbnRleHQ7CiAKLQlkYmcoIiVzOiBSZWNlaXZlZCBub3RpZmljYXRpb24gJTAyeFxuIiwgX19GVU5DVElPTl9fLCBldmVudCk7CisJZGJnKCIlczogUmVjZWl2ZWQgbm90aWZpY2F0aW9uICUwMnhcbiIsIF9fZnVuY19fLCBldmVudCk7CiAKIAlpZiAoc3ViZXZlbnQgPT0gMHg4MCkgewotCQlkYmcoIiVzOiBnZW5lcmF0aW9uZyBidXMgZXZlbnRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZygiJXM6IGdlbmVyYXRpb25nIGJ1cyBldmVudFxuIiwgX19mdW5jX18pOwogCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KG5vdGUtPmRldmljZSwgbm90ZS0+ZXZlbnQsIGRldGFpbCk7CiAJCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQobm90ZS0+ZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAogCQkJCQkJICBub3RlLT5kZXZpY2UtPmRldi5idXNfaWQsCkBAIC0yOTksNyArMjk5LDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGlibV9hY3BpX2hhbmRsZSwgIkFQQ0kiLCBOVUxMLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCIlczogIEFQQ0kgZXZhbHVhdGlvbiBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6ICBBUENJIGV2YWx1YXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMzA3LDEzICszMDcsMTMgQEAKIAlpZiAoIShwYWNrYWdlKSB8fAogCQkJKHBhY2thZ2UtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHx8CiAJCQkhKHBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHMpKSB7Ci0JCWVycigiJXM6ICBJbnZhbGlkIEFQQ0kgb2JqZWN0XG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiAgSW52YWxpZCBBUENJIG9iamVjdFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHJlYWRfdGFibGVfZG9uZTsKIAl9CiAKIAlmb3Ioc2l6ZSA9IDAsIGkgPSAwOyBpIDwgcGFja2FnZS0+cGFja2FnZS5jb3VudDsgaSsrKSB7CiAJCWlmIChwYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzW2ldLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgewotCQkJZXJyKCIlczogIEludmFsaWQgQVBDSSBlbGVtZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGkpOworCQkJZXJyKCIlczogIEludmFsaWQgQVBDSSBlbGVtZW50ICVkXG4iLCBfX2Z1bmNfXywgaSk7CiAJCQlnb3RvIHJlYWRfdGFibGVfZG9uZTsKIAkJfQogCQlzaXplICs9IHBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHNbaV0uYnVmZmVyLmxlbmd0aDsKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAJbGJ1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJZGJnKCIlczogZWxlbWVudCBjb3VudDogJWksIEFTTCB0YWJsZSBzaXplOiAlaSwgJnRhYmxlID0gMHglcFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgcGFja2FnZS0+cGFja2FnZS5jb3VudCwgc2l6ZSwgbGJ1Zik7CisJCQlfX2Z1bmNfXywgcGFja2FnZS0+cGFja2FnZS5jb3VudCwgc2l6ZSwgbGJ1Zik7CiAKIAlpZiAobGJ1ZikgewogCQkqYnVmcCA9IGxidWY7CkBAIC0zNjgsNyArMzY4LDcgQEAKIAlpbnQgYnl0ZXNfcmVhZCA9IC1FSU5WQUw7CiAJY2hhciAqdGFibGUgPSBOVUxMOwogCQotCWRiZygiJXM6IHBvcyA9ICVkLCBzaXplID0gJXpkXG4iLCBfX0ZVTkNUSU9OX18sIChpbnQpcG9zLCBzaXplKTsKKwlkYmcoIiVzOiBwb3MgPSAlZCwgc2l6ZSA9ICV6ZFxuIiwgX19mdW5jX18sIChpbnQpcG9zLCBzaXplKTsKIAogCWlmIChwb3MgPT0gMCkgewogCQlieXRlc19yZWFkID0gaWJtX2dldF90YWJsZV9mcm9tX2FjcGkoJnRhYmxlKTsKQEAgLTM5NSwzMyArMzk1LDM0IEBACiB7CiAJYWNwaV9oYW5kbGUgKnBoYW5kbGUgPSAoYWNwaV9oYW5kbGUgKiljb250ZXh0OwogCWFjcGlfc3RhdHVzIHN0YXR1czsgCi0Jc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gaW5mbzsgCi0Jc3RydWN0IGFjcGlfYnVmZmVyIGluZm9fYnVmZmVyID0gewotCQkubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZV9pbmZvKSwKLQkJLnBvaW50ZXIgPSAmaW5mbywKLQl9OworCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOworCXN0cnVjdCBhY3BpX2J1ZmZlciBpbmZvX2J1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwlpbnQgcmV0dmFsID0gMDsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmluZm9fYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCIlczogIEZhaWxlZCB0byBnZXQgZGV2aWNlIGluZm9ybWF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gMDsKKwkJZXJyKCIlczogIEZhaWxlZCB0byBnZXQgZGV2aWNlIGluZm9ybWF0aW9uIHN0YXR1cz0weCV4XG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCXJldHVybiByZXR2YWw7CiAJfQotCWluZm8uaGFyZHdhcmVfaWQudmFsdWVbc2l6ZW9mKGluZm8uaGFyZHdhcmVfaWQudmFsdWUpIC0gMV0gPSAnXDAnOworCWluZm8gPSBpbmZvX2J1ZmZlci5wb2ludGVyOworCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSkgLSAxXSA9ICdcMCc7CiAKLQlpZiAoaW5mby5jdXJyZW50X3N0YXR1cyAmJiAoaW5mby52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgotCQkJKCFzdHJjbXAoaW5mby5oYXJkd2FyZV9pZC52YWx1ZSwgSUJNX0hBUkRXQVJFX0lEMSkgfHwKLQkJCSFzdHJjbXAoaW5mby5oYXJkd2FyZV9pZC52YWx1ZSwgSUJNX0hBUkRXQVJFX0lEMikpKSB7Ci0JCWRiZygiZm91bmQgaGFyZHdhcmU6ICVzLCBoYW5kbGU6ICVwXG4iLCBpbmZvLmhhcmR3YXJlX2lkLnZhbHVlLAotCQkJCWhhbmRsZSk7CisJaWYgKGluZm8tPmN1cnJlbnRfc3RhdHVzICYmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgorCQkJKCFzdHJjbXAoaW5mby0+aGFyZHdhcmVfaWQudmFsdWUsIElCTV9IQVJEV0FSRV9JRDEpIHx8CisJCQkgIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSwgSUJNX0hBUkRXQVJFX0lEMikpKSB7CisJCWRiZygiZm91bmQgaGFyZHdhcmU6ICVzLCBoYW5kbGU6ICVwXG4iLAorCQkJaW5mby0+aGFyZHdhcmVfaWQudmFsdWUsIGhhbmRsZSk7CiAJCSpwaGFuZGxlID0gaGFuZGxlOwogCQkvKiByZXR1cm5pbmcgbm9uLXplcm8gY2F1c2VzIHRoZSBzZWFyY2ggdG8gc3RvcAogCQkgKiBhbmQgcmV0dXJucyB0aGlzIHZhbHVlIHRvIHRoZSBjYWxsZXIgb2YgCiAJCSAqIGFjcGlfd2Fsa19uYW1lc3BhY2UsIGJ1dCBpdCBhbHNvIGNhdXNlcyBzb21lIHdhcm5pbmdzCiAJCSAqIGluIHRoZSBhY3BpIGRlYnVnIGNvZGUgdG8gcHJpbnQuLi4KIAkJICovCi0JCXJldHVybiBGT1VORF9BUENJOworCQlyZXR2YWwgPSBGT1VORF9BUENJOwogCX0KLQlyZXR1cm4gMDsKKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBpYm1fYWNwaXBocF9pbml0KHZvaWQpCkBAIC00MzEsMTggKzQzMiwxOCBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBrb2JqZWN0ICpzeXNkaXIgPSAmcGNpX2hvdHBsdWdfc2xvdHNfa3NldC0+a29iajsKIAotCWRiZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKIAkJCUFDUElfVUlOVDMyX01BWCwgaWJtX2ZpbmRfYWNwaV9kZXZpY2UsCiAJCQkmaWJtX2FjcGlfaGFuZGxlLCBOVUxMKSAhPSBGT1VORF9BUENJKSB7Ci0JCWVycigiJXM6IGFjcGlfd2Fsa19uYW1lc3BhY2UgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBhY3BpX3dhbGtfbmFtZXNwYWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGluaXRfcmV0dXJuOwogCX0KLQlkYmcoIiVzOiBmb3VuZCBJQk0gYVBDSSBkZXZpY2VcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlczogZm91bmQgSUJNIGFQQ0kgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UoaWJtX2FjcGlfaGFuZGxlLCAmZGV2aWNlKSkgewotCQllcnIoIiVzOiBhY3BpX2J1c19nZXRfZGV2aWNlIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogYWNwaV9idXNfZ2V0X2RldmljZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBpbml0X3JldHVybjsKIAl9CkBAIC00NTcsNyArNDU4LDcgQEAKIAkJCSZpYm1fbm90ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWVycigiJXM6IEZhaWxlZCB0byByZWdpc3RlciBub3RpZmljYXRpb24gaGFuZGxlclxuIiwKLQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCV9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGluaXRfY2xlYW51cDsKIAl9CkBAIC00NzgsMTcgKzQ3OSwxNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3Qga29iamVjdCAqc3lzZGlyID0gJnBjaV9ob3RwbHVnX3Nsb3RzX2tzZXQtPmtvYmo7CiAKLQlkYmcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChhY3BpcGhwX3VucmVnaXN0ZXJfYXR0ZW50aW9uKCZpYm1fYXR0ZW50aW9uX2luZm8pKQotCQllcnIoIiVzOiBhdHRlbnRpb24gaW5mbyBkZXJlZ2lzdHJhdGlvbiBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBhdHRlbnRpb24gaW5mbyBkZXJlZ2lzdHJhdGlvbiBmYWlsZWQiLCBfX2Z1bmNfXyk7CiAKIAlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcigKIAkJCSAgIGlibV9hY3BpX2hhbmRsZSwKIAkJCSAgIEFDUElfREVWSUNFX05PVElGWSwKIAkJCSAgIGlibV9oYW5kbGVfZXZlbnRzKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCWVycigiJXM6IE5vdGlmaWNhdGlvbiBoYW5kbGVyIHJlbW92YWwgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBOb3RpZmljYXRpb24gaGFuZGxlciByZW1vdmFsIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCS8qIHJlbW92ZSB0aGUgL3N5cyBlbnRyaWVzICovCiAJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN5c2RpciwgJmlibV9hcGNpX3RhYmxlX2F0dHIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IGVkNGQ0NGUuLmQ4YTZiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19jb3JlLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWwgPSAwOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlcyIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlpZiAoY29udHJvbGxlci0+b3BzLT5zZXRfcG93ZXIpCiAJCXJldHZhbCA9IGNvbnRyb2xsZXItPm9wcy0+c2V0X3Bvd2VyKHNsb3QsIDEpOwpAQCAtMTIxLDI1ICsxMjEsMjUgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXMiLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlcyIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJZG93bl93cml0ZSgmbGlzdF9yd3NlbSk7CiAKIAkvKiBVbmNvbmZpZ3VyZSBkZXZpY2UgKi8KIAlkYmcoIiVzIC0gdW5jb25maWd1cmluZyBzbG90ICVzIiwKLQkgICAgX19GVU5DVElPTl9fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKIAlpZiAoKHJldHZhbCA9IGNwY2lfdW5jb25maWd1cmVfc2xvdChzbG90KSkpIHsKIAkJZXJyKCIlcyAtIGNvdWxkIG5vdCB1bmNvbmZpZ3VyZSBzbG90ICVzIiwKLQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOwogCQlnb3RvIGRpc2FibGVfZXJyb3I7CiAJfQogCWRiZygiJXMgLSBmaW5pc2hlZCB1bmNvbmZpZ3VyaW5nIHNsb3QgJXMiLAotCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJLyogQ2xlYXIgRVhUIChieSBzZXR0aW5nIGl0KSAqLwogCWlmIChjcGNpX2NsZWFyX2V4dChzbG90KSkgewogCQllcnIoIiVzIC0gY291bGQgbm90IGNsZWFyIEVYVCBmb3Igc2xvdCAlcyIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBkaXNhYmxlX2Vycm9yOwogCX0KQEAgLTM3Miw3ICszNzIsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90OwogCXN0cnVjdCBwY2lfZGV2KiBkZXY7CiAKLQlkYmcoIiVzIC0gZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXMgLSBlbnRlciIsIF9fZnVuY19fKTsKIAlkb3duX3JlYWQoJmxpc3RfcndzZW0pOwogCWlmICghc2xvdHMpIHsKIAkJdXBfcmVhZCgmbGlzdF9yd3NlbSk7CkBAIC0zODAsMTAgKzM4MCwxMCBAQAogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZzbG90X2xpc3QsIHNsb3RfbGlzdCkgewogCQlkYmcoIiVzIC0gbG9va2luZyBhdCBzbG90ICVzIiwKLQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOwogCQlpZiAoY2xlYXJfaW5zICYmIGNwY2lfY2hlY2tfYW5kX2NsZWFyX2lucyhzbG90KSkKIAkJCWRiZygiJXMgLSBjbGVhcmVkIElOUyBmb3Igc2xvdCAlcyIsCi0JCQkgICAgX19GVU5DVElPTl9fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOwogCQlkZXYgPSBwY2lfZ2V0X3Nsb3Qoc2xvdC0+YnVzLCBQQ0lfREVWRk4oc2xvdC0+bnVtYmVyLCAwKSk7CiAJCWlmIChkZXYpIHsKIAkJCWlmICh1cGRhdGVfYWRhcHRlcl9zdGF0dXMoc2xvdC0+aG90cGx1Z19zbG90LCAxKSkKQEAgLTM5NCw3ICszOTQsNyBAQAogCQl9CiAJfQogCXVwX3JlYWQoJmxpc3RfcndzZW0pOwotCWRiZygiJXMgLSBleGl0IiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzIC0gZXhpdCIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE1LDcgKzQxNSw3IEBACiAJZXh0cmFjdGVkID0gaW5zZXJ0ZWQgPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgJnNsb3RfbGlzdCwgc2xvdF9saXN0KSB7CiAJCWRiZygiJXMgLSBsb29raW5nIGF0IHNsb3QgJXMiLAotCQkgICAgX19GVU5DVElPTl9fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOworCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CiAJCWlmIChjcGNpX2NoZWNrX2FuZF9jbGVhcl9pbnMoc2xvdCkpIHsKIAkJCS8qCiAJCQkgKiBTb21lIGJyb2tlbiBoYXJkd2FyZSAoZS5nLiBQTFggOTA1NEFCKSBhc3NlcnRzCkBAIC00MzAsMjggKzQzMCwyOCBAQAogCiAJCQkvKiBQcm9jZXNzIGluc2VydGlvbiAqLwogCQkJZGJnKCIlcyAtIHNsb3QgJXMgaW5zZXJ0ZWQiLAotCQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKIAogCQkJLyogR1NNLCBkZWJ1ZyAqLwogCQkJaHNfY3NyID0gY3BjaV9nZXRfaHNfY3NyKHNsb3QpOwogCQkJZGJnKCIlcyAtIHNsb3QgJXMgSFNfQ1NSICgxKSA9ICUwNHgiLAotCQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBoc19jc3IpOworCQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUsIGhzX2Nzcik7CiAKIAkJCS8qIENvbmZpZ3VyZSBkZXZpY2UgKi8KIAkJCWRiZygiJXMgLSBjb25maWd1cmluZyBzbG90ICVzIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CiAJCQlpZiAoY3BjaV9jb25maWd1cmVfc2xvdChzbG90KSkgewogCQkJCWVycigiJXMgLSBjb3VsZCBub3QgY29uZmlndXJlIHNsb3QgJXMiLAotCQkJCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJZGJnKCIlcyAtIGZpbmlzaGVkIGNvbmZpZ3VyaW5nIHNsb3QgJXMiLAotCQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKwkJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKIAogCQkJLyogR1NNLCBkZWJ1ZyAqLwogCQkJaHNfY3NyID0gY3BjaV9nZXRfaHNfY3NyKHNsb3QpOwogCQkJZGJnKCIlcyAtIHNsb3QgJXMgSFNfQ1NSICgyKSA9ICUwNHgiLAotCQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBoc19jc3IpOworCQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUsIGhzX2Nzcik7CiAKIAkJCWlmICh1cGRhdGVfbGF0Y2hfc3RhdHVzKHNsb3QtPmhvdHBsdWdfc2xvdCwgMSkpCiAJCQkJd2FybigiZmFpbHVyZSB0byB1cGRhdGUgbGF0Y2ggZmlsZSIpOwpAQCAtNDY0LDE4ICs0NjQsMTggQEAKIAkJCS8qIEdTTSwgZGVidWcgKi8KIAkJCWhzX2NzciA9IGNwY2lfZ2V0X2hzX2NzcihzbG90KTsKIAkJCWRiZygiJXMgLSBzbG90ICVzIEhTX0NTUiAoMykgPSAlMDR4IiwKLQkJCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSwgaHNfY3NyKTsKKwkJCSAgICBfX2Z1bmNfXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBoc19jc3IpOwogCiAJCQlpbnNlcnRlZCsrOwogCQl9IGVsc2UgaWYgKGNwY2lfY2hlY2tfZXh0KHNsb3QpKSB7CiAJCQkvKiBQcm9jZXNzIGV4dHJhY3Rpb24gcmVxdWVzdCAqLwogCQkJZGJnKCIlcyAtIHNsb3QgJXMgZXh0cmFjdGVkIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CisJCQkgICAgX19mdW5jX18sIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkJCS8qIEdTTSwgZGVidWcgKi8KIAkJCWhzX2NzciA9IGNwY2lfZ2V0X2hzX2NzcihzbG90KTsKIAkJCWRiZygiJXMgLSBzbG90ICVzIEhTX0NTUiA9ICUwNHgiLAotCQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lLCBoc19jc3IpOworCQkJICAgIF9fZnVuY19fLCBzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUsIGhzX2Nzcik7CiAKIAkJCWlmICghc2xvdC0+ZXh0cmFjdGluZykgewogCQkJCWlmICh1cGRhdGVfbGF0Y2hfc3RhdHVzKHNsb3QtPmhvdHBsdWdfc2xvdCwgMCkpIHsKQEAgLTUxOSw3ICs1MTksNyBAQAogewogCWludCByYzsKIAotCWRiZygiJXMgLSBldmVudCB0aHJlYWQgc3RhcnRlZCIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlcyAtIGV2ZW50IHRocmVhZCBzdGFydGVkIiwgX19mdW5jX18pOwogCXdoaWxlICgxKSB7CiAJCWRiZygiZXZlbnQgdGhyZWFkIHNsZWVwaW5nIik7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC01MzIsNyArNTMyLDcgQEAKIAkJCQkvKiBHaXZlIHVzZXJzcGFjZSBhIGNoYW5jZSB0byBoYW5kbGUgZXh0cmFjdGlvbiAqLwogCQkJCW1zbGVlcCg1MDApOwogCQkJfSBlbHNlIGlmIChyYyA8IDApIHsKLQkJCQlkYmcoIiVzIC0gZXJyb3IgY2hlY2tpbmcgc2xvdHMiLCBfX0ZVTkNUSU9OX18pOworCQkJCWRiZygiJXMgLSBlcnJvciBjaGVja2luZyBzbG90cyIsIF9fZnVuY19fKTsKIAkJCQl0aHJlYWRfZmluaXNoZWQgPSAxOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtNTQxLDcgKzU0MSw3IEBACiAJCQlicmVhazsKIAogCQkvKiBSZS1lbmFibGUgRU5VTSMgaW50ZXJydXB0ICovCi0JCWRiZygiJXMgLSByZS1lbmFibGluZyBpcnEiLCBfX0ZVTkNUSU9OX18pOworCQlkYmcoIiVzIC0gcmUtZW5hYmxpbmcgaXJxIiwgX19mdW5jX18pOwogCQljb250cm9sbGVyLT5vcHMtPmVuYWJsZV9pcnEoKTsKIAl9CiAgb3V0OgpAQCAtNTY0LDcgKzU2NCw3IEBACiAJCQkJCS8qIEdpdmUgdXNlcnNwYWNlIGEgY2hhbmNlIHRvIGhhbmRsZSBleHRyYWN0aW9uICovCiAJCQkJCW1zbGVlcCg1MDApOwogCQkJCX0gZWxzZSBpZiAocmMgPCAwKSB7Ci0JCQkJCWRiZygiJXMgLSBlcnJvciBjaGVja2luZyBzbG90cyIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWRiZygiJXMgLSBlcnJvciBjaGVja2luZyBzbG90cyIsIF9fZnVuY19fKTsKIAkJCQkJdGhyZWFkX2ZpbmlzaGVkID0gMTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQpAQCAtNjIxLDcgKzYyMSw3IEBACiAJCQlzdGF0dXMgPSAtRU5PREVWOwogCQl9CiAJCWRiZygiJXMgLSBhY3F1aXJlZCBjb250cm9sbGVyIGlycSAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIG5ld19jb250cm9sbGVyLT5pcnEpOworCQkgICAgX19mdW5jX18sIG5ld19jb250cm9sbGVyLT5pcnEpOwogCX0KIAlpZiAoIXN0YXR1cykKIAkJY29udHJvbGxlciA9IG5ld19jb250cm9sbGVyOwpAQCAtNjczLDcgKzY3Myw3IEBACiAJc3RhdGljIGludCBmaXJzdCA9IDE7CiAJaW50IHN0YXR1czsKIAotCWRiZygiJXMgLSBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlcyAtIGVudGVyIiwgX19mdW5jX18pOwogCWlmICghY29udHJvbGxlcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTY5MywxNCArNjkzLDE0IEBACiAJc3RhdHVzID0gY3BjaV9zdGFydF90aHJlYWQoKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwotCWRiZygiJXMgLSB0aHJlYWQgc3RhcnRlZCIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlcyAtIHRocmVhZCBzdGFydGVkIiwgX19mdW5jX18pOwogCiAJaWYgKGNvbnRyb2xsZXItPmlycSkgewogCQkvKiBTdGFydCBlbnVtIGludGVycnVwdCBwcm9jZXNzaW5nICovCi0JCWRiZygiJXMgLSBlbmFibGluZyBpcnEiLCBfX0ZVTkNUSU9OX18pOworCQlkYmcoIiVzIC0gZW5hYmxpbmcgaXJxIiwgX19mdW5jX18pOwogCQljb250cm9sbGVyLT5vcHMtPmVuYWJsZV9pcnEoKTsKIAl9Ci0JZGJnKCIlcyAtIGV4aXQiLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXMgLSBleGl0IiwgX19mdW5jX18pOwogCXJldHVybiAwOwogfQogCkBAIC03MTEsNyArNzExLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGNvbnRyb2xsZXItPmlycSkgewogCQkvKiBTdG9wIGVudW0gaW50ZXJydXB0IHByb2Nlc3NpbmcgKi8KLQkJZGJnKCIlcyAtIGRpc2FibGluZyBpcnEiLCBfX0ZVTkNUSU9OX18pOworCQlkYmcoIiVzIC0gZGlzYWJsaW5nIGlycSIsIF9fZnVuY19fKTsKIAkJY29udHJvbGxlci0+b3BzLT5kaXNhYmxlX2lycSgpOwogCX0KIAljcGNpX3N0b3BfdGhyZWFkKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX3BjaS5jCmluZGV4IDVlOWJlNDQuLmRmODJiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX3BjaS5jCkBAIC0yNTAsMTIgKzI1MCwxMiBAQAogICogRGV2aWNlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAgKi8KIAotaW50IGNwY2lfY29uZmlndXJlX3Nsb3Qoc3RydWN0IHNsb3QqIHNsb3QpCitpbnQgX19yZWYgY3BjaV9jb25maWd1cmVfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50OwogCWludCBmbjsKIAotCWRiZygiJXMgLSBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlcyAtIGVudGVyIiwgX19mdW5jX18pOwogCiAJaWYgKHNsb3QtPmRldiA9PSBOVUxMKSB7CiAJCWRiZygicGNpX2RldiBudWxsLCBmaW5kaW5nICUwMng6JTAyeDoleCIsCkBAIC0yNzMsNyArMjczLDcgQEAKIAkJICogd2Ugd2lsbCBvbmx5IGNhbGwgdGhpcyBjYXNlIHdoZW4gbG9va3VwIGZhaWxzLgogCQkgKi8KIAkJbiA9IHBjaV9zY2FuX3Nsb3Qoc2xvdC0+YnVzLCBzbG90LT5kZXZmbik7Ci0JCWRiZygiJXM6IHBjaV9zY2FuX3Nsb3QgcmV0dXJuZWQgJWQiLCBfX0ZVTkNUSU9OX18sIG4pOworCQlkYmcoIiVzOiBwY2lfc2Nhbl9zbG90IHJldHVybmVkICVkIiwgX19mdW5jX18sIG4pOwogCQlzbG90LT5kZXYgPSBwY2lfZ2V0X3Nsb3Qoc2xvdC0+YnVzLCBzbG90LT5kZXZmbik7CiAJCWlmIChzbG90LT5kZXYgPT0gTlVMTCkgewogCQkJZXJyKCJDb3VsZCBub3QgZmluZCBQQ0kgZGV2aWNlIGZvciBzbG90ICUwMngiLCBzbG90LT5udW1iZXIpOwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOwogCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwogCi0JZGJnKCIlcyAtIGV4aXQiLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXMgLSBleGl0IiwgX19mdW5jX18pOwogCXJldHVybiAwOwogfQogCkBAIC0zMzEsNyArMzMxLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCi0JZGJnKCIlcyAtIGVudGVyIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzIC0gZW50ZXIiLCBfX2Z1bmNfXyk7CiAJaWYgKCFzbG90LT5kZXYpIHsKIAkJZXJyKCJObyBkZXZpY2UgZm9yIHNsb3QgJTAyeFxuIiwgc2xvdC0+bnVtYmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zNDgsNiArMzQ4LDYgQEAKIAlwY2lfZGV2X3B1dChzbG90LT5kZXYpOwogCXNsb3QtPmRldiA9IE5VTEw7CiAKLQlkYmcoIiVzIC0gZXhpdCIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlcyAtIGV4aXQiLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMKaW5kZXggZjM4NTJhNi4uMTQ4ZmI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX2dlbmVyaWMuYwpAQCAtMTU0LDEyICsxNTQsMTggQEAKIAlpZighcikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWRldiA9IHBjaV9maW5kX3Nsb3QoYnJpZGdlX2J1c25yLCBQQ0lfREVWRk4oYnJpZGdlX3Nsb3QsIDApKTsKKwlidXMgPSBwY2lfZmluZF9idXMoMCwgYnJpZGdlX2J1c25yKTsKKwlpZiAoIWJ1cykgeworCQllcnIoIkludmFsaWQgYnVzIG51bWJlciAlZCIsIGJyaWRnZV9idXNucik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYgPSBwY2lfZ2V0X3Nsb3QoYnVzLCBQQ0lfREVWRk4oYnJpZGdlX3Nsb3QsIDApKTsKIAlpZighZGV2IHx8IGRldi0+aGRyX3R5cGUgIT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewogCQllcnIoIkludmFsaWQgYnJpZGdlIGRldmljZSAlcyIsIGJyaWRnZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlidXMgPSBkZXYtPnN1Ym9yZGluYXRlOworCXBjaV9kZXZfcHV0KGRldik7CiAKIAltZW1zZXQoJmdlbmVyaWNfaHBjLCAwLCBzaXplb2YgKHN0cnVjdCBjcGNpX2hwX2NvbnRyb2xsZXIpKTsKIAlnZW5lcmljX2hwY19vcHMucXVlcnlfZW51bSA9IHF1ZXJ5X2VudW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAppbmRleCAyOThhZDdmLi5iMWRlY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKQEAgLTY3NCw3ICs2NzQsNyBAQAogCiAJaHBfc2xvdCA9IHNsb3QtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAlkYmcoIiVzOiBzbG90LT5kZXZpY2UgPSAlZCwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0ID0gJWQgXG4iLAotCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPmRldmljZSwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKKwkgICAgX19mdW5jX18sIHNsb3QtPmRldmljZSwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAogCXN0YXR1cyA9IChyZWFkbChjdHJsLT5ocGNfcmVnICsgSU5UX0lOUFVUX0NMRUFSKSAmICgweDAxTCA8PCBocF9zbG90KSk7CiAKQEAgLTcwOSw3ICs3MDksNyBAQAogICAgICAgICBERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBzdGFydFxuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzIC0gc3RhcnRcbiIsIF9fZnVuY19fKTsKIAlhZGRfd2FpdF9xdWV1ZSgmY3RybC0+cXVldWUsICZ3YWl0KTsKIAkvKiBTbGVlcCBmb3IgdXAgdG8gMSBzZWNvbmQgdG8gd2FpdCBmb3IgdGhlIExFRCB0byBjaGFuZ2UuICovCiAJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCk7CkBAIC03MTcsNyArNzE3LDcgQEAKIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCXJldHZhbCA9ICAtRUlOVFI7CiAKLQlkYmcoIiVzIC0gZW5kXG4iLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXMgLSBlbmRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKaW5kZXggNzQxNzg4Ny4uMzZiMTE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8pOwogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0zMzgsNyArMzM4LDcgQEAKIAl2b2lkIF9faW9tZW0gKnNsb3RfZW50cnk9IE5VTEw7CiAJaW50IHJlc3VsdCA9IC1FTk9NRU07CiAKLQlkYmcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCXRlbXBkd29yZCA9IHJlYWRsKGN0cmwtPmhwY19yZWcgKyBJTlRfSU5QVVRfQ0xFQVIpOwogCkBAIC01MTMsNyArNTEzLDcgQEAKIAogCXU4IHRidXMsIHRkZXZpY2UsIHRzbG90LCBicmlkZ2VTbG90OwogCi0JZGJnKCIlczogJXAsICVkLCAlZCwgJXBcbiIsIF9fRlVOQ1RJT05fXywgYnVzLCBidXNfbnVtLCBkZXZfbnVtLCBzbG90KTsKKwlkYmcoIiVzOiAlcCwgJWQsICVkLCAlcFxuIiwgX19mdW5jX18sIGJ1cywgYnVzX251bSwgZGV2X251bSwgc2xvdCk7CiAKIAlicmlkZ2VTbG90ID0gMHhGRjsKIApAQCAtNjM2LDcgKzYzNiw3IEBACiAJdTggZGV2aWNlOwogCXU4IGZ1bmN0aW9uOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJaWYgKGNwcWhwX2dldF9idXNfZGV2KGN0cmwsICZidXMsICZkZXZmbiwgc2xvdC0+bnVtYmVyKSA9PSAtMSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02NjMsNyArNjYzLDcgQEAKIAl1OCBkZXZpY2U7CiAJdTggZnVuY3Rpb247CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlpZiAoY3BxaHBfZ2V0X2J1c19kZXYoY3RybCwgJmJ1cywgJmRldmZuLCBzbG90LT5udW1iZXIpID09IC0xKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTY5NSw3ICs2OTUsNyBAQAogCXU4IGRldmljZTsKIAl1OCBmdW5jdGlvbjsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCWlmIChjcHFocF9nZXRfYnVzX2RldihjdHJsLCAmYnVzLCAmZGV2Zm4sIHNsb3QtPm51bWJlcikgPT0gLTEpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNzA4LDcgKzcwOCw3IEBACiAJaWYgKCFzbG90X2Z1bmMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZGJnKCJJbiAlcywgc2xvdF9mdW5jID0gJXAsIGN0cmwgPSAlcFxuIiwgX19GVU5DVElPTl9fLCBzbG90X2Z1bmMsIGN0cmwpOworCWRiZygiSW4gJXMsIHNsb3RfZnVuYyA9ICVwLCBjdHJsID0gJXBcbiIsIF9fZnVuY19fLCBzbG90X2Z1bmMsIGN0cmwpOwogCXJldHVybiBjcHFocF9wcm9jZXNzX1NTKGN0cmwsIHNsb3RfZnVuYyk7CiB9CiAKQEAgLTcxOCw3ICs3MTgsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHVybiBjcHFocF9oYXJkd2FyZV90ZXN0KGN0cmwsIHZhbHVlKTsJCiB9CkBAIC03MjksNyArNzI5LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkqdmFsdWUgPSBnZXRfc2xvdF9lbmFibGVkKGN0cmwsIHNsb3QpOwogCXJldHVybiAwOwpAQCAtNzQwLDcgKzc0MCw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwogCQotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCSp2YWx1ZSA9IGNwcV9nZXRfYXR0ZW50aW9uX3N0YXR1cyhjdHJsLCBzbG90KTsKIAlyZXR1cm4gMDsKQEAgLTc1MSw3ICs3NTEsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCSp2YWx1ZSA9IGNwcV9nZXRfbGF0Y2hfc3RhdHVzKGN0cmwsIHNsb3QpOwogCkBAIC03NjMsNyArNzYzLDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkqdmFsdWUgPSBnZXRfcHJlc2VuY2Vfc3RhdHVzKGN0cmwsIHNsb3QpOwogCkBAIC03NzUsNyArNzc1LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkqdmFsdWUgPSBjdHJsLT5zcGVlZF9jYXBhYmlsaXR5OwogCkBAIC03ODcsNyArNzg3LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkqdmFsdWUgPSBjdHJsLT5zcGVlZDsKIApAQCAtODQxLDcgKzg0MSw3IEBACiAJCS8vIFRPRE86IFRoaXMgY29kZSBjYW4gYmUgbWFkZSB0byBzdXBwb3J0IG5vbi1Db21wYXEgb3IgSW50ZWwgc3Vic3lzdGVtIElEcwogCQlyYyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELCAmc3Vic3lzdGVtX3ZpZCk7CiAJCWlmIChyYykgewotCQkJZXJyKCIlcyA6IHBjaV9yZWFkX2NvbmZpZ193b3JkIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWVycigiJXMgOiBwY2lfcmVhZF9jb25maWdfd29yZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCWdvdG8gZXJyX2Rpc2FibGVfZGV2aWNlOwogCQl9CiAJCWRiZygiU3Vic3lzdGVtIFZlbmRvciBJRDogJXhcbiIsIHN1YnN5c3RlbV92aWQpOwpAQCAtODUzLDE0ICs4NTMsMTQgQEAKIAogCQljdHJsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjdHJsKSB7Ci0JCQllcnIoIiVzIDogb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWVycigiJXMgOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9kaXNhYmxlX2RldmljZTsKIAkJfQogCiAJCXJjID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9JRCwgJnN1YnN5c3RlbV9kZXZpY2VpZCk7CiAJCWlmIChyYykgewotCQkJZXJyKCIlcyA6IHBjaV9yZWFkX2NvbmZpZ193b3JkIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWVycigiJXMgOiBwY2lfcmVhZF9jb25maWdfd29yZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCWdvdG8gZXJyX2ZyZWVfY3RybDsKIAkJfQogCkBAIC0xMTQyLDcgKzExNDIsNyBAQAogCXJjID0gY3BxaHBfc2F2ZV9jb25maWcoY3RybCwgY3RybC0+YnVzLCByZWFkYihjdHJsLT5ocGNfcmVnICsgU0xPVF9NQVNLKSk7CiAJaWYgKHJjKSB7CiAJCWVycigiJXM6IHVuYWJsZSB0byBzYXZlIFBDSSBjb25maWd1cmF0aW9uIGRhdGEsIGVycm9yICVkXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgcmMpOworCQkJCV9fZnVuY19fLCByYyk7CiAJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCkBAIC0xMTgwLDcgKzExODAsNyBAQAogCWlmIChyYykgewogCQllcnIobXNnX2luaXRpYWxpemF0aW9uX2VyciwgNik7CiAJCWVycigiJXM6IHVuYWJsZSB0byBzYXZlIFBDSSBjb25maWd1cmF0aW9uIGRhdGEsIGVycm9yICVkXG4iLAotCQkJX19GVU5DVElPTl9fLCByYyk7CisJCQlfX2Z1bmNfXywgcmMpOwogCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYwppbmRleCA0MDE4NDIwLi5lZjA0MWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCkBAIC03MzcsMTIgKzczNywxMiBAQAogCiAJZm9yIChub2RlID0gKmhlYWQ7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7CiAJCWRiZygiJXM6IHJlcV9zaXplID0leCBub2RlPSVwLCBiYXNlPSV4LCBsZW5ndGg9JXhcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHNpemUsIG5vZGUsIG5vZGUtPmJhc2UsIG5vZGUtPmxlbmd0aCk7CisJCSAgICBfX2Z1bmNfXywgc2l6ZSwgbm9kZSwgbm9kZS0+YmFzZSwgbm9kZS0+bGVuZ3RoKTsKIAkJaWYgKG5vZGUtPmxlbmd0aCA8IHNpemUpCiAJCQljb250aW51ZTsKIAogCQlpZiAobm9kZS0+YmFzZSAmIChzaXplIC0gMSkpIHsKLQkJCWRiZygiJXM6IG5vdCBhbGlnbmVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZGJnKCIlczogbm90IGFsaWduZWRcbiIsIF9fZnVuY19fKTsKIAkJCS8qIHRoaXMgb25lIGlzbid0IGJhc2UgYWxpZ25lZCBwcm9wZXJseQogCQkJICogc28gd2UnbGwgbWFrZSBhIG5ldyBlbnRyeSBhbmQgc3BsaXQgaXQgdXAgKi8KIAkJCXRlbXBfZHdvcmQgPSAobm9kZS0+YmFzZSB8IChzaXplLTEpKSArIDE7CkBAIC03NjcsNyArNzY3LDcgQEAKIAogCQkvKiBEb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRvbyBzbWFsbCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCAqLwogCQlpZiAobm9kZS0+bGVuZ3RoID4gc2l6ZSkgewotCQkJZGJnKCIlczogdG9vIGJpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwkJCWRiZygiJXM6IHRvbyBiaWdcbiIsIF9fZnVuY19fKTsKIAkJCS8qIHRoaXMgb25lIGlzIGxvbmdlciB0aGFuIHdlIG5lZWQKIAkJCSAqIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCiAJCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2YoKnNwbGl0X25vZGUpLCBHRlBfS0VSTkVMKTsKQEAgLTc4NCw3ICs3ODQsNyBAQAogCQkJbm9kZS0+bmV4dCA9IHNwbGl0X25vZGU7CiAJCX0gIC8qIEVuZCBvZiB0b28gYmlnIG9uIHRvcCBlbmQgKi8KIAotCQlkYmcoIiVzOiBnb3Qgb25lISEhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkYmcoIiVzOiBnb3Qgb25lISEhXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIElmIHdlIGdvdCBoZXJlLCB0aGVuIGl0IGlzIHRoZSByaWdodCBzaXplCiAJCSAqIE5vdyB0YWtlIGl0IG91dCBvZiB0aGUgbGlzdCAqLwogCQlpZiAoKmhlYWQgPT0gbm9kZSkgewpAQCAtODE5LDcgKzgxOSw3IEBACiAJc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTI7CiAJaW50IG91dF9vZl9vcmRlciA9IDE7CiAKLQlkYmcoIiVzOiBoZWFkID0gJXAsICpoZWFkID0gJXBcbiIsIF9fRlVOQ1RJT05fXywgaGVhZCwgKmhlYWQpOworCWRiZygiJXM6IGhlYWQgPSAlcCwgKmhlYWQgPSAlcFxuIiwgX19mdW5jX18sIGhlYWQsICpoZWFkKTsKIAogCWlmICghKCpoZWFkKSkKIAkJcmV0dXJuIDE7CkBAIC05MDcsNyArOTA3LDcgQEAKIAkJLyogUmVhZCB0byBjbGVhciBwb3N0ZWQgd3JpdGVzICovCiAJCW1pc2MgPSByZWFkdyhjdHJsLT5ocGNfcmVnICsgTUlTQyk7CiAKLQkJZGJnICgiJXMgLSB3YWtpbmcgdXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZyAoIiVzIC0gd2FraW5nIHVwXG4iLCBfX2Z1bmNfXyk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3RybC0+cXVldWUpOwogCX0KIApAQCAtMTQyMSw3ICsxNDIxLDcgQEAKIAogCWhwX3Nsb3QgPSBmdW5jLT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJZGJnKCIlczogZnVuYy0+ZGV2aWNlLCBzbG90X29mZnNldCwgaHBfc2xvdCA9ICVkLCAlZCAsJWRcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgZnVuYy0+ZGV2aWNlLCBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIGhwX3Nsb3QpOworCSAgICBfX2Z1bmNfXywgZnVuYy0+ZGV2aWNlLCBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIGhwX3Nsb3QpOwogCiAJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIApAQCAtMTQ2Niw1NSArMTQ2Niw1NSBAQAogCiAJLyogdHVybiBvbiBib2FyZCBhbmQgYmxpbmsgZ3JlZW4gTEVEICovCiAKLQlkYmcoIiVzOiBiZWZvcmUgZG93blxuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzOiBiZWZvcmUgZG93blxuIiwgX19mdW5jX18pOwogCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7Ci0JZGJnKCIlczogYWZ0ZXIgZG93blxuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzOiBhZnRlciBkb3duXG4iLCBfX2Z1bmNfXyk7CiAKLQlkYmcoIiVzOiBiZWZvcmUgc2xvdF9lbmFibGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlczogYmVmb3JlIHNsb3RfZW5hYmxlXG4iLCBfX2Z1bmNfXyk7CiAJc2xvdF9lbmFibGUgKGN0cmwsIGhwX3Nsb3QpOwogCi0JZGJnKCIlczogYmVmb3JlIGdyZWVuX0xFRF9ibGlua1xuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzOiBiZWZvcmUgZ3JlZW5fTEVEX2JsaW5rXG4iLCBfX2Z1bmNfXyk7CiAJZ3JlZW5fTEVEX2JsaW5rIChjdHJsLCBocF9zbG90KTsKIAotCWRiZygiJXM6IGJlZm9yZSBhbWJlcl9MRURfYmxpbmtcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlczogYmVmb3JlIGFtYmVyX0xFRF9ibGlua1xuIiwgX19mdW5jX18pOwogCWFtYmVyX0xFRF9vZmYgKGN0cmwsIGhwX3Nsb3QpOwogCi0JZGJnKCIlczogYmVmb3JlIHNldF9TT0dPXG4iLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXM6IGJlZm9yZSBzZXRfU09HT1xuIiwgX19mdW5jX18pOwogCXNldF9TT0dPKGN0cmwpOwogCiAJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLwotCWRiZygiJXM6IGJlZm9yZSB3YWl0X2Zvcl9jdHJsX2lycVxuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzOiBiZWZvcmUgd2FpdF9mb3JfY3RybF9pcnFcbiIsIF9fZnVuY19fKTsKIAl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7Ci0JZGJnKCIlczogYWZ0ZXIgd2FpdF9mb3JfY3RybF9pcnFcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlczogYWZ0ZXIgd2FpdF9mb3JfY3RybF9pcnFcbiIsIF9fZnVuY19fKTsKIAotCWRiZygiJXM6IGJlZm9yZSB1cFxuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzOiBiZWZvcmUgdXBcbiIsIF9fZnVuY19fKTsKIAltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7Ci0JZGJnKCIlczogYWZ0ZXIgdXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlczogYWZ0ZXIgdXBcbiIsIF9fZnVuY19fKTsKIAogCS8qIFdhaXQgZm9yIH4xIHNlY29uZCBiZWNhdXNlIG9mIGhvdCBwbHVnIHNwZWMgKi8KLQlkYmcoIiVzOiBiZWZvcmUgbG9uZ19kZWxheVxuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzOiBiZWZvcmUgbG9uZ19kZWxheVxuIiwgX19mdW5jX18pOwogCWxvbmdfZGVsYXkoMSpIWik7Ci0JZGJnKCIlczogYWZ0ZXIgbG9uZ19kZWxheVxuIiwgX19GVU5DVElPTl9fKTsKKwlkYmcoIiVzOiBhZnRlciBsb25nX2RlbGF5XG4iLCBfX2Z1bmNfXyk7CiAKLQlkYmcoIiVzOiBmdW5jIHN0YXR1cyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGZ1bmMtPnN0YXR1cyk7CisJZGJnKCIlczogZnVuYyBzdGF0dXMgPSAleFxuIiwgX19mdW5jX18sIGZ1bmMtPnN0YXR1cyk7CiAJLyogQ2hlY2sgZm9yIGEgcG93ZXIgZmF1bHQgKi8KIAlpZiAoZnVuYy0+c3RhdHVzID09IDB4RkYpIHsKIAkJLyogcG93ZXIgZmF1bHQgb2NjdXJyZWQsIGJ1dCBpdCB3YXMgYmVuaWduICovCiAJCXRlbXBfcmVnaXN0ZXIgPSAweEZGRkZGRkZGOwotCQlkYmcoIiVzOiB0ZW1wIHJlZ2lzdGVyIHNldCB0byAleCBieSBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKKwkJZGJnKCIlczogdGVtcCByZWdpc3RlciBzZXQgdG8gJXggYnkgcG93ZXIgZmF1bHRcbiIsIF9fZnVuY19fLCB0ZW1wX3JlZ2lzdGVyKTsKIAkJcmMgPSBQT1dFUl9GQUlMVVJFOwogCQlmdW5jLT5zdGF0dXMgPSAwOwogCX0gZWxzZSB7CiAJCS8qIEdldCB2ZW5kb3IvZGV2aWNlIElEIHUzMiAqLwogCQljdHJsLT5wY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7CiAJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZCAoY3RybC0+cGNpX2J1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pLCBQQ0lfVkVORE9SX0lELCAmdGVtcF9yZWdpc3Rlcik7Ci0JCWRiZygiJXM6IHBjaV9yZWFkX2NvbmZpZ19kd29yZCByZXR1cm5zICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQkJZGJnKCIlczogdGVtcF9yZWdpc3RlciBpcyAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKKwkJZGJnKCIlczogcGNpX3JlYWRfY29uZmlnX2R3b3JkIHJldHVybnMgJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCWRiZygiJXM6IHRlbXBfcmVnaXN0ZXIgaXMgJXhcbiIsIF9fZnVuY19fLCB0ZW1wX3JlZ2lzdGVyKTsKIAogCQlpZiAocmMgIT0gMCkgewogCQkJLyogU29tZXRoaW5nJ3Mgd3JvbmcgaGVyZSAqLwogCQkJdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7Ci0JCQlkYmcoIiVzOiB0ZW1wIHJlZ2lzdGVyIHNldCB0byAleCBieSBlcnJvclxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKKwkJCWRiZygiJXM6IHRlbXAgcmVnaXN0ZXIgc2V0IHRvICV4IGJ5IGVycm9yXG4iLCBfX2Z1bmNfXywgdGVtcF9yZWdpc3Rlcik7CiAJCX0KIAkJLyogUHJlc2V0IHJldHVybiBjb2RlLiAgSXQgd2lsbCBiZSBjaGFuZ2VkIGxhdGVyIGlmIHRoaW5ncyBnbyBva2F5LiAqLwogCQlyYyA9IE5PX0FEQVBURVJfUFJFU0VOVDsKQEAgLTE1MzAsNyArMTUzMCw3IEBACiAKIAkJcmMgPSBjb25maWd1cmVfbmV3X2RldmljZShjdHJsLCBmdW5jLCAwLCAmcmVzX2xpc3RzKTsKIAotCQlkYmcoIiVzOiBiYWNrIGZyb20gY29uZmlndXJlX25ld19kZXZpY2VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZygiJXM6IGJhY2sgZnJvbSBjb25maWd1cmVfbmV3X2RldmljZVxuIiwgX19mdW5jX18pOwogCQljdHJsLT5pb19oZWFkID0gcmVzX2xpc3RzLmlvX2hlYWQ7CiAJCWN0cmwtPm1lbV9oZWFkID0gcmVzX2xpc3RzLm1lbV9oZWFkOwogCQljdHJsLT5wX21lbV9oZWFkID0gcmVzX2xpc3RzLnBfbWVtX2hlYWQ7CkBAIC0xNTY2LDcgKzE1NjYsNyBAQAogCiAJCS8qIG5leHQsIHdlIHdpbGwgaW5zdGFudGlhdGUgdGhlIGxpbnV4IHBjaV9kZXYgc3RydWN0dXJlcyAod2l0aAogCQkgKiBhcHByb3ByaWF0ZSBkcml2ZXIgbm90aWZpY2F0aW9uLCBpZiBhbHJlYWR5IHByZXNlbnQpICovCi0JCWRiZygiJXM6IGNvbmZpZ3VyZSBsaW51eCBwY2lfZGV2IHN0cnVjdHVyZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlczogY29uZmlndXJlIGxpbnV4IHBjaV9kZXYgc3RydWN0dXJlXG4iLCBfX2Z1bmNfXyk7CiAJCWluZGV4ID0gMDsKIAkJZG8gewogCQkJbmV3X3Nsb3QgPSBjcHFocF9zbG90X2ZpbmQoY3RybC0+YnVzLCBmdW5jLT5kZXZpY2UsIGluZGV4KyspOwpAQCAtMTYyOCw3ICsxNjI4LDcgQEAKIAlkZXZpY2UgPSBmdW5jLT5kZXZpY2U7CiAKIAlocF9zbG90ID0gZnVuYy0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwotCWRiZygiSW4gJXMsIGhwX3Nsb3QgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBocF9zbG90KTsKKwlkYmcoIkluICVzLCBocF9zbG90ID0gJWRcbiIsIF9fZnVuY19fLCBocF9zbG90KTsKIAogCS8qIFdoZW4gd2UgZ2V0IGhlcmUsIGl0IGlzIHNhZmUgdG8gY2hhbmdlIGJhc2UgYWRkcmVzcyByZWdpc3RlcnMuCiAJICogV2Ugd2lsbCBhdHRlbXB0IHRvIHNhdmUgdGhlIGJhc2UgYWRkcmVzcyByZWdpc3RlciBsZW5ndGhzICovCkBAIC0xOTI4LDcgKzE5MjgsNyBAQAogCQlmdW5jID0gY3BxaHBfc2xvdF9maW5kKHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSwgMCk7CiAJCWRiZygiSW4gcG93ZXJfZG93bl9ib2FyZCwgZnVuYyA9ICVwLCBjdHJsID0gJXBcbiIsIGZ1bmMsIGN0cmwpOwogCQlpZiAoIWZ1bmMpIHsKLQkJCWRiZygiRXJyb3IhIGZ1bmMgTlVMTCBpbiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJCWRiZygiRXJyb3IhIGZ1bmMgTlVMTCBpbiAlc1xuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIDsKIAkJfQogCkBAIC0xOTUwLDcgKzE5NTAsNyBAQAogCQlmdW5jID0gY3BxaHBfc2xvdF9maW5kKHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSwgMCk7CiAJCWRiZygiSW4gYWRkX2JvYXJkLCBmdW5jID0gJXAsIGN0cmwgPSAlcFxuIiwgZnVuYywgY3RybCk7CiAJCWlmICghZnVuYykgewotCQkJZGJnKCJFcnJvciEgZnVuYyBOVUxMIGluICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZGJnKCJFcnJvciEgZnVuYyBOVUxMIGluICVzXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gOwogCQl9CiAKQEAgLTIwNTgsNyArMjA1OCw3IEBACiAJfQogCiAJaWYgKHJjKSB7Ci0JCWRiZygiJXM6IHJjID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOworCQlkYmcoIiVzOiByYyA9ICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCX0KIAogCWlmIChwX3Nsb3QpCkBAIC0yMjY5LDEyICsyMjY5LDEyIEBACiAKIAluZXdfc2xvdCA9IGZ1bmM7CiAKLQlkYmcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRiZygiJXNcbiIsIF9fZnVuY19fKTsKIAkvKiBDaGVjayBmb3IgTXVsdGktZnVuY3Rpb24gZGV2aWNlICovCiAJY3RybC0+cGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwogCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChjdHJsLT5wY2lfYnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiksIDB4MEUsICZ0ZW1wX2J5dGUpOwogCWlmIChyYykgewotCQlkYmcoIiVzOiByYyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJZGJnKCIlczogcmMgPSAlZFxuIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfbnZyYW0uYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX252cmFtLmMKaW5kZXggYWU1ZTk3NC4uY2IxNzQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfbnZyYW0uYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9udnJhbS5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAkgICAgKHRlbXA2ID09ICdRJykpIHsKIAkJcmVzdWx0ID0gMTsKIAl9Ci0JZGJnICgiJXMgLSByZXR1cm5lZCAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCWRiZyAoIiVzIC0gcmV0dXJuZWQgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfcGNpLmMKaW5kZXggM2Y2Y2QyMC4uMDkwMjE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfcGNpLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogewogCWludCBqOwogCQotCWRiZygiJXM6IGJ1cy9kZXYvZnVuYyA9ICV4LyV4LyV4XG4iLCBfX0ZVTkNUSU9OX18sIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7CisJZGJnKCIlczogYnVzL2Rldi9mdW5jID0gJXgvJXgvJXhcbiIsIF9fZnVuY19fLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwogCiAJZm9yIChqPTA7IGo8OCA7IGorKykgewogCQlzdHJ1Y3QgcGNpX2RldiogdGVtcCA9IHBjaV9maW5kX3Nsb3QoZnVuYy0+YnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBqKSk7CkBAIC0xNzAsMTEgKzE3MCwxMSBAQAogCQlmYWtlZGV2LT5idXMgPSBmYWtlYnVzOwogCQlmYWtlYnVzLT5udW1iZXIgPSBidXNfbnVtOwogCQlkYmcoIiVzOiBkZXYgJWQsIGJ1cyAlZCwgcGluICVkLCBudW0gJWRcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIGRldl9udW0sIGJ1c19udW0sIGludF9waW4sIGlycV9udW0pOworCQkgICAgX19mdW5jX18sIGRldl9udW0sIGJ1c19udW0sIGludF9waW4sIGlycV9udW0pOwogCQlyYyA9IHBjaWJpb3Nfc2V0X2lycV9yb3V0aW5nKGZha2VkZXYsIGludF9waW4gLSAweDBhLCBpcnFfbnVtKTsKIAkJa2ZyZWUoZmFrZWRldik7CiAJCWtmcmVlKGZha2VidXMpOwotCQlkYmcoIiVzOiByYyAlZFxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJCWRiZygiJXM6IHJjICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlpZiAoIXJjKQogCQkJcmV0dXJuICFyYzsKIApAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7CiAJc3RydWN0IHBjaV9yZXNvdXJjZSAqdF9ub2RlOwotCWRiZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGJnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFmdW5jKQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKaW5kZXggOTRiNjQwMS4uN2U5YTgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogCS8qIG1pcy11c2UgZW5hYmxlX3Nsb3QgZm9yIHJlc2Nhbm5pbmcgb2YgdGhlIHBjaSBidXMgKi8KIAljYW5jZWxfd29ya19zeW5jKCZwY2lfcmVzY2FuX3dvcmspOwogCXF1ZXVlX3dvcmsoZHVtbXlwaHBfd3EsICZwY2lfcmVzY2FuX3dvcmspOwotCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOwogfQogCiAvKiBmaW5kIHRoZSBob3RwbHVnX3Nsb3QgZm9yIHRoZSBwY2lfZGV2ICovCkBAIC0zMjAsNyArMzIwLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZHNsb3QgPSBzbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBzbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgc2xvdC0+bmFtZSk7CiAKIAkvKiBkb24ndCBkaXNhYmxlIGJyaWRnZWQgZGV2aWNlcyBqdXN0IHlldCwgd2UgY2FuJ3QgaGFuZGxlIHRoZW0gZWFzaWx5Li4uICovCiAJaWYgKGRzbG90LT5kZXYtPnN1Ym9yZGluYXRlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKaW5kZXggODdiNmI4Yi4uYzg5MmRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYwpAQCAtMTQ4LDggKzE0OCwxMCBAQAogCWxlbiA9IChydGFibGUtPnNpemUgLSBzaXplb2Yoc3RydWN0IGlycV9yb3V0aW5nX3RhYmxlKSkgLwogCQkJc2l6ZW9mKHN0cnVjdCBpcnFfaW5mbyk7CiAKLQlpZiAoIWxlbikKKwlpZiAoIWxlbikgeworCQlrZnJlZShydGFibGUpOwogCQlyZXR1cm4gLTE7CisJfQogCWZvciAobG9vcCA9IDA7IGxvb3AgPCBsZW47IGxvb3ArKykgewogCQlpZiAoKCpjdXJfc2xvdCktPm51bWJlciA9PSBydGFibGUtPnNsb3RzW2xvb3BdLnNsb3QpIHsKIAkJaWYgKCgqY3VyX3Nsb3QpLT5idXMgPT0gcnRhYmxlLT5zbG90c1tsb29wXS5idXMpIHsKQEAgLTE4NywxMSArMTg5LDEzIEBACiAJCQkJZGVidWcoInJ0YWJsZS0+c2xvdHNbbG9vcF0uaXJxWzNdLmxpbmsgPSAleFxuIiwKIAkJCQkJcnRhYmxlLT5zbG90c1tsb29wXS5pcnFbM10ubGluayk7CiAJCQkJZGVidWcoImVuZCBvZiBpbml0X2Rldm5vXG4iKTsKKwkJCQlrZnJlZShydGFibGUpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CiAJfQogCisJa2ZyZWUocnRhYmxlKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTM5NSw3ICszOTksNyBAQAogCXN0cnVjdCBzbG90ICpwc2xvdDsKIAl1OCBtb2RlID0gMDsKIAotCWRlYnVnKCIlcyAtIEVudHJ5IGhvdHBsdWdfc2xvdFslcF0gcHZhbHVlWyVwXVxuIiwgX19GVU5DVElPTl9fLAorCWRlYnVnKCIlcyAtIEVudHJ5IGhvdHBsdWdfc2xvdFslcF0gcHZhbHVlWyVwXVxuIiwgX19mdW5jX18sCiAJCWhvdHBsdWdfc2xvdCwgdmFsdWUpOwogCiAJaWJtcGhwX2xvY2tfb3BlcmF0aW9ucygpOwpAQCAtNDI1LDcgKzQyOSw3IEBACiAJfQogCiAJaWJtcGhwX3VubG9ja19vcGVyYXRpb25zKCk7Ci0JZGVidWcoIiVzIC0gRXhpdCByY1slZF0gdmFsdWVbJXhdXG4iLCBfX0ZVTkNUSU9OX18sIHJjLCAqdmFsdWUpOworCWRlYnVnKCIlcyAtIEV4aXQgcmNbJWRdIHZhbHVlWyV4XVxuIiwgX19mdW5jX18sIHJjLCAqdmFsdWUpOwogCXJldHVybiByYzsKIH0KIApAQCAtNDM1LDcgKzQzOSw3IEBACiAJc3RydWN0IHNsb3QgKnBzbG90OwogCXU4IG1vZGUgPSAwOwogCi0JZGVidWcoIiVzIC0gRW50cnkgaG90cGx1Z19zbG90WyVwXSBwdmFsdWVbJXBdXG4iLCBfX0ZVTkNUSU9OX18sCisJZGVidWcoIiVzIC0gRW50cnkgaG90cGx1Z19zbG90WyVwXSBwdmFsdWVbJXBdXG4iLCBfX2Z1bmNfXywKIAkJaG90cGx1Z19zbG90LCB2YWx1ZSk7CiAKIAlpYm1waHBfbG9ja19vcGVyYXRpb25zKCk7CkBAIC00NzEsNyArNDc1LDcgQEAKIAl9CiAKIAlpYm1waHBfdW5sb2NrX29wZXJhdGlvbnMoKTsKLQlkZWJ1ZygiJXMgLSBFeGl0IHJjWyVkXSB2YWx1ZVsleF1cbiIsIF9fRlVOQ1RJT05fXywgcmMsICp2YWx1ZSk7CisJZGVidWcoIiVzIC0gRXhpdCByY1slZF0gdmFsdWVbJXhdXG4iLCBfX2Z1bmNfXywgcmMsICp2YWx1ZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC03NDEsMTMgKzc0NSwxMyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKiB0bXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqIG5leHQ7CiAKLQlkZWJ1ZygiJXMgLS0gZW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGVidWcoIiVzIC0tIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCBuZXh0LCAmaWJtcGhwX3Nsb3RfaGVhZCkgewogCQlzbG90X2N1ciA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgc2xvdCwgaWJtX3Nsb3RfbGlzdCk7CiAJCXBjaV9ocF9kZXJlZ2lzdGVyKHNsb3RfY3VyLT5ob3RwbHVnX3Nsb3QpOwogCX0KLQlkZWJ1ZygiJXMgLS0gZXhpdFxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZygiJXMgLS0gZXhpdFxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCBpYm1fdW5jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBwY2lfZnVuYyAqZnVuYykKQEAgLTc1NSw3ICs3NTksNyBAQAogCXN0cnVjdCBwY2lfZGV2ICp0ZW1wOwogCXU4IGo7CiAKLQlkZWJ1ZygiaW5zaWRlICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnKCJpbnNpZGUgJXNcbiIsIF9fZnVuY19fKTsKIAlkZWJ1ZygiZnVuYy0+ZGV2aWNlID0gJXgsIGZ1bmMtPmZ1bmN0aW9uID0gJXhcbiIsCiAJCQkJCWZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwogCWRlYnVnKCJmdW5jLT5kZXZpY2UgPDwgMyB8IDB4MCAgPSAleFxuIiwgZnVuYy0+ZGV2aWNlIDw8IDMgfCAweDApOwpAQCAtNzg2LDEzICs3OTAsMTMgQEAKIAogCWJ1cyA9IGttYWxsb2Moc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1cykgewotCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDE7CiAJfQogCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikgewogCQlrZnJlZShidXMpOwotCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC04MDMsNyArODA3LDcgQEAKIAkJaWYgKCFwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9WRU5ET1JfSUQsICZsKSAmJgogCQkJCQkobCAhPSAweDAwMDApICYmIChsICE9IDB4ZmZmZikpIHsKIAkJCWRlYnVnKCIlcyAtIEluc2lkZSBidXNfc3RydXR1cmVfZml4dXAoKVxuIiwKLQkJCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCQkJCV9fZnVuY19fKTsKIAkJCXBjaV9zY2FuX2J1cyhidXNubywgaWJtcGhwX3BjaV9idXMtPm9wcywgTlVMTCk7CiAJCQlicmVhazsKIAkJfQpAQCAtOTAwLDcgKzkwNCw3IEBACiAJICAgICAgICB7IH0sCiAJfTsJCiAKLQlkZWJ1ZygiJXMgLSBlbnRyeSBzbG90ICMgJWRcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdXItPm51bWJlcik7CisJZGVidWcoIiVzIC0gZW50cnkgc2xvdCAjICVkXG4iLCBfX2Z1bmNfXywgc2xvdF9jdXItPm51bWJlcik7CiAJaWYgKFNFVF9CVVNfU1RBVFVTKHNsb3RfY3VyLT5jdHJsKSAmJiBpc19idXNfZW1wdHkoc2xvdF9jdXIpKSB7CiAJCXJjID0gc2xvdF91cGRhdGUoJnNsb3RfY3VyKTsKIAkJaWYgKHJjKQpAQCAtOTc1LDcgKzk3OSw3IEBACiAJLyogVGhpcyBpcyBmb3IgeDQ0MCwgb25jZSBCcmFuZG9uIGZpeGVzIHRoZSBmaXJtd2FyZSwgCiAJd2lsbCBub3QgbmVlZCB0aGlzIGRlbGF5ICovCiAJbXNsZWVwKDEwMDApOwotCWRlYnVnKCIlcyAtRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZygiJXMgLUV4aXRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCmluZGV4IDYwMGVkN2I2Li5kY2E3ZWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCkBAIC0xMjcsMTggKzEyNywxOCBAQAogCQogCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZidXNfaW5mb19oZWFkKSB7CiAJCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBidXNfaW5mbywgYnVzX2luZm9fbGlzdCk7Ci0JCWRlYnVnICgiJXMgLSBzbG90X21pbiA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+c2xvdF9taW4pOwotCQlkZWJ1ZyAoIiVzIC0gc2xvdF9tYXggPSAleFxuIiwgX19GVU5DVElPTl9fLCBwdHItPnNsb3RfbWF4KTsKLQkJZGVidWcgKCIlcyAtIHNsb3RfY291bnQgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwdHItPnNsb3RfY291bnQpOwotCQlkZWJ1ZyAoIiVzIC0gYnVzIyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+YnVzbm8pOwotCQlkZWJ1ZyAoIiVzIC0gY3VycmVudF9zcGVlZCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+Y3VycmVudF9zcGVlZCk7Ci0JCWRlYnVnICgiJXMgLSBjb250cm9sbGVyX2lkID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5jb250cm9sbGVyX2lkKTsKKwkJZGVidWcgKCIlcyAtIHNsb3RfbWluID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPnNsb3RfbWluKTsKKwkJZGVidWcgKCIlcyAtIHNsb3RfbWF4ID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPnNsb3RfbWF4KTsKKwkJZGVidWcgKCIlcyAtIHNsb3RfY291bnQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+c2xvdF9jb3VudCk7CisJCWRlYnVnICgiJXMgLSBidXMjID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPmJ1c25vKTsKKwkJZGVidWcgKCIlcyAtIGN1cnJlbnRfc3BlZWQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+Y3VycmVudF9zcGVlZCk7CisJCWRlYnVnICgiJXMgLSBjb250cm9sbGVyX2lkID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPmNvbnRyb2xsZXJfaWQpOwogCQkKLQkJZGVidWcgKCIlcyAtIHNsb3RzX2F0XzMzX2NvbnYgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwdHItPnNsb3RzX2F0XzMzX2NvbnYpOwotCQlkZWJ1ZyAoIiVzIC0gc2xvdHNfYXRfNjZfY29udiA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+c2xvdHNfYXRfNjZfY29udik7Ci0JCWRlYnVnICgiJXMgLSBzbG90c19hdF82Nl9wY2l4ID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5zbG90c19hdF82Nl9wY2l4KTsKLQkJZGVidWcgKCIlcyAtIHNsb3RzX2F0XzEwMF9wY2l4ID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5zbG90c19hdF8xMDBfcGNpeCk7Ci0JCWRlYnVnICgiJXMgLSBzbG90c19hdF8xMzNfcGNpeCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+c2xvdHNfYXRfMTMzX3BjaXgpOworCQlkZWJ1ZyAoIiVzIC0gc2xvdHNfYXRfMzNfY29udiA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5zbG90c19hdF8zM19jb252KTsKKwkJZGVidWcgKCIlcyAtIHNsb3RzX2F0XzY2X2NvbnYgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+c2xvdHNfYXRfNjZfY29udik7CisJCWRlYnVnICgiJXMgLSBzbG90c19hdF82Nl9wY2l4ID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPnNsb3RzX2F0XzY2X3BjaXgpOworCQlkZWJ1ZyAoIiVzIC0gc2xvdHNfYXRfMTAwX3BjaXggPSAleFxuIiwgX19mdW5jX18sIHB0ci0+c2xvdHNfYXRfMTAwX3BjaXgpOworCQlkZWJ1ZyAoIiVzIC0gc2xvdHNfYXRfMTMzX3BjaXggPSAleFxuIiwgX19mdW5jX18sIHB0ci0+c2xvdHNfYXRfMTMzX3BjaXgpOwogCiAJfQogfQpAQCAtMTUwLDEyICsxNTAsMTIgQEAKIAlkZWJ1ZyAoInByaW50X2xvX2luZm8gLS0tLVxuIik7CQogCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZyaW9fbG9faGVhZCkgewogCQlwdHIgPSBsaXN0X2VudHJ5IChwdHIxLCBzdHJ1Y3QgcmlvX2RldGFpbCwgcmlvX2RldGFpbF9saXN0KTsKLQkJZGVidWcgKCIlcyAtIHJpb19ub2RlX2lkID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5yaW9fbm9kZV9pZCk7Ci0JCWRlYnVnICgiJXMgLSByaW9fdHlwZSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+cmlvX3R5cGUpOwotCQlkZWJ1ZyAoIiVzIC0gb3duZXJfaWQgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwdHItPm93bmVyX2lkKTsKLQkJZGVidWcgKCIlcyAtIGZpcnN0X3Nsb3RfbnVtID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5maXJzdF9zbG90X251bSk7Ci0JCWRlYnVnICgiJXMgLSB3cGluZGV4ID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT53cGluZGV4KTsKLQkJZGVidWcgKCIlcyAtIGNoYXNzaXNfbnVtID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5jaGFzc2lzX251bSk7CisJCWRlYnVnICgiJXMgLSByaW9fbm9kZV9pZCA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5yaW9fbm9kZV9pZCk7CisJCWRlYnVnICgiJXMgLSByaW9fdHlwZSA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5yaW9fdHlwZSk7CisJCWRlYnVnICgiJXMgLSBvd25lcl9pZCA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5vd25lcl9pZCk7CisJCWRlYnVnICgiJXMgLSBmaXJzdF9zbG90X251bSA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5maXJzdF9zbG90X251bSk7CisJCWRlYnVnICgiJXMgLSB3cGluZGV4ID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPndwaW5kZXgpOworCQlkZWJ1ZyAoIiVzIC0gY2hhc3Npc19udW0gPSAleFxuIiwgX19mdW5jX18sIHB0ci0+Y2hhc3Npc19udW0pOwogCiAJfQogfQpAQCAtMTY0LDE1ICsxNjQsMTUgQEAKIHsKIAlzdHJ1Y3QgcmlvX2RldGFpbCAqcHRyOwogCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjE7Ci0JZGVidWcgKCIlcyAtLS1cbiIsIF9fRlVOQ1RJT05fXyk7CisJZGVidWcgKCIlcyAtLS1cbiIsIF9fZnVuY19fKTsKIAlsaXN0X2Zvcl9lYWNoIChwdHIxLCAmcmlvX3ZnX2hlYWQpIHsKIAkJcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IHJpb19kZXRhaWwsIHJpb19kZXRhaWxfbGlzdCk7Ci0JCWRlYnVnICgiJXMgLSByaW9fbm9kZV9pZCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+cmlvX25vZGVfaWQpOwotCQlkZWJ1ZyAoIiVzIC0gcmlvX3R5cGUgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwdHItPnJpb190eXBlKTsKLQkJZGVidWcgKCIlcyAtIG93bmVyX2lkID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5vd25lcl9pZCk7Ci0JCWRlYnVnICgiJXMgLSBmaXJzdF9zbG90X251bSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+Zmlyc3Rfc2xvdF9udW0pOwotCQlkZWJ1ZyAoIiVzIC0gd3BpbmRleCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+d3BpbmRleCk7Ci0JCWRlYnVnICgiJXMgLSBjaGFzc2lzX251bSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+Y2hhc3Npc19udW0pOworCQlkZWJ1ZyAoIiVzIC0gcmlvX25vZGVfaWQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+cmlvX25vZGVfaWQpOworCQlkZWJ1ZyAoIiVzIC0gcmlvX3R5cGUgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+cmlvX3R5cGUpOworCQlkZWJ1ZyAoIiVzIC0gb3duZXJfaWQgPSAleFxuIiwgX19mdW5jX18sIHB0ci0+b3duZXJfaWQpOworCQlkZWJ1ZyAoIiVzIC0gZmlyc3Rfc2xvdF9udW0gPSAleFxuIiwgX19mdW5jX18sIHB0ci0+Zmlyc3Rfc2xvdF9udW0pOworCQlkZWJ1ZyAoIiVzIC0gd3BpbmRleCA9ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT53cGluZGV4KTsKKwkJZGVidWcgKCIlcyAtIGNoYXNzaXNfbnVtID0gJXhcbiIsIF9fZnVuY19fLCBwdHItPmNoYXNzaXNfbnVtKTsKIAogCX0KIH0KQEAgLTE4NSw3ICsxODUsNyBAQAogCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZpYm1waHBfZWJkYV9wY2lfcnNyY19oZWFkKSB7CiAJCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBlYmRhX3BjaV9yc3JjLCBlYmRhX3BjaV9yc3JjX2xpc3QpOwogCQlkZWJ1ZyAoIiVzIC0gcnNyYyB0eXBlOiAleCBidXMjOiAleCBkZXZfZnVuYzogJXggc3RhcnQgYWRkcjogJXggZW5kIGFkZHI6ICV4XG4iLCAKLQkJCV9fRlVOQ1RJT05fXywgcHRyLT5yc3JjX3R5cGUgLHB0ci0+YnVzX251bSwgcHRyLT5kZXZfZnVuLHB0ci0+c3RhcnRfYWRkciwgcHRyLT5lbmRfYWRkcik7CisJCQlfX2Z1bmNfXywgcHRyLT5yc3JjX3R5cGUgLHB0ci0+YnVzX251bSwgcHRyLT5kZXZfZnVuLHB0ci0+c3RhcnRfYWRkciwgcHRyLT5lbmRfYWRkcik7CiAJfQogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAogCWxpc3RfZm9yX2VhY2ggKHB0cjEsICZpYm1waHBfc2xvdF9oZWFkKSB7CiAJCXB0ciA9IGxpc3RfZW50cnkgKHB0cjEsIHN0cnVjdCBzbG90LCBpYm1fc2xvdF9saXN0KTsKLQkJZGVidWcgKCIlcyAtIHNsb3RfbnVtYmVyOiAleFxuIiwgX19GVU5DVElPTl9fLCBwdHItPm51bWJlcik7IAorCQlkZWJ1ZyAoIiVzIC0gc2xvdF9udW1iZXI6ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5udW1iZXIpOwogCX0KIH0KIApAQCAtMjA0LDEzICsyMDQsMTMgQEAKIHsKIAlzdHJ1Y3Qgb3B0X3JpbyAqcHRyOwogCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjE7Ci0JZGVidWcgKCIlcyAtLS1cbiIsIF9fRlVOQ1RJT05fXyk7CisJZGVidWcgKCIlcyAtLS1cbiIsIF9fZnVuY19fKTsKIAlsaXN0X2Zvcl9lYWNoIChwdHIxLCAmb3B0X3ZnX2hlYWQpIHsKIAkJcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IG9wdF9yaW8sIG9wdF9yaW9fbGlzdCk7Ci0JCWRlYnVnICgiJXMgLSByaW9fdHlwZSAleFxuIiwgX19GVU5DVElPTl9fLCBwdHItPnJpb190eXBlKTsgCi0JCWRlYnVnICgiJXMgLSBjaGFzc2lzX251bTogJXhcbiIsIF9fRlVOQ1RJT05fXywgcHRyLT5jaGFzc2lzX251bSk7IAotCQlkZWJ1ZyAoIiVzIC0gZmlyc3Rfc2xvdF9udW06ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+Zmlyc3Rfc2xvdF9udW0pOyAKLQkJZGVidWcgKCIlcyAtIG1pZGRsZV9udW06ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHB0ci0+bWlkZGxlX251bSk7IAorCQlkZWJ1ZyAoIiVzIC0gcmlvX3R5cGUgJXhcbiIsIF9fZnVuY19fLCBwdHItPnJpb190eXBlKTsKKwkJZGVidWcgKCIlcyAtIGNoYXNzaXNfbnVtOiAleFxuIiwgX19mdW5jX18sIHB0ci0+Y2hhc3Npc19udW0pOworCQlkZWJ1ZyAoIiVzIC0gZmlyc3Rfc2xvdF9udW06ICV4XG4iLCBfX2Z1bmNfXywgcHRyLT5maXJzdF9zbG90X251bSk7CisJCWRlYnVnICgiJXMgLSBtaWRkbGVfbnVtOiAleFxuIiwgX19mdW5jX18sIHB0ci0+bWlkZGxlX251bSk7CiAJfQogfQogCkBAIC0yMjUsMzUgKzIyNSwzNSBAQAogCQlocGNfcHRyID0gbGlzdF9lbnRyeSAocHRyMSwgc3RydWN0IGNvbnRyb2xsZXIsIGViZGFfaHBjX2xpc3QpOyAKIAogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBocGNfcHRyLT5zbG90X2NvdW50OyBpbmRleCsrKSB7Ci0JCQlkZWJ1ZyAoIiVzIC0gcGh5c2ljYWwgc2xvdCM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGhwY19wdHItPnNsb3RzW2luZGV4XS5zbG90X251bSk7Ci0JCQlkZWJ1ZyAoIiVzIC0gcGNpIGJ1cyMgb2YgdGhlIHNsb3Q6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGhwY19wdHItPnNsb3RzW2luZGV4XS5zbG90X2J1c19udW0pOwotCQkJZGVidWcgKCIlcyAtIGluZGV4IGludG8gY3RsciBhZGRyOiAleFxuIiwgX19GVU5DVElPTl9fLCBocGNfcHRyLT5zbG90c1tpbmRleF0uY3RsX2luZGV4KTsKLQkJCWRlYnVnICgiJXMgLSBjYXAgb2YgdGhlIHNsb3Q6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGhwY19wdHItPnNsb3RzW2luZGV4XS5zbG90X2NhcCk7CisJCQlkZWJ1ZyAoIiVzIC0gcGh5c2ljYWwgc2xvdCM6ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+c2xvdHNbaW5kZXhdLnNsb3RfbnVtKTsKKwkJCWRlYnVnICgiJXMgLSBwY2kgYnVzIyBvZiB0aGUgc2xvdDogJXhcbiIsIF9fZnVuY19fLCBocGNfcHRyLT5zbG90c1tpbmRleF0uc2xvdF9idXNfbnVtKTsKKwkJCWRlYnVnICgiJXMgLSBpbmRleCBpbnRvIGN0bHIgYWRkcjogJXhcbiIsIF9fZnVuY19fLCBocGNfcHRyLT5zbG90c1tpbmRleF0uY3RsX2luZGV4KTsKKwkJCWRlYnVnICgiJXMgLSBjYXAgb2YgdGhlIHNsb3Q6ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+c2xvdHNbaW5kZXhdLnNsb3RfY2FwKTsKIAkJfQogCiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGhwY19wdHItPmJ1c19jb3VudDsgaW5kZXgrKykgewotCQkJZGVidWcgKCIlcyAtIGJ1cyMgb2YgZWFjaCBidXMgY29udHJvbGxlZCBieSB0aGlzIGN0bHI6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGhwY19wdHItPmJ1c2VzW2luZGV4XS5idXNfbnVtKTsKKwkJCWRlYnVnICgiJXMgLSBidXMjIG9mIGVhY2ggYnVzIGNvbnRyb2xsZWQgYnkgdGhpcyBjdGxyOiAleFxuIiwgX19mdW5jX18sIGhwY19wdHItPmJ1c2VzW2luZGV4XS5idXNfbnVtKTsKIAkJfQogCi0JCWRlYnVnICgiJXMgLSB0eXBlIG9mIGhwYzogJXhcbiIsIF9fRlVOQ1RJT05fXywgaHBjX3B0ci0+Y3Rscl90eXBlKTsKKwkJZGVidWcgKCIlcyAtIHR5cGUgb2YgaHBjOiAleFxuIiwgX19mdW5jX18sIGhwY19wdHItPmN0bHJfdHlwZSk7CiAJCXN3aXRjaCAoaHBjX3B0ci0+Y3Rscl90eXBlKSB7CiAJCWNhc2UgMToKLQkJCWRlYnVnICgiJXMgLSBidXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGhwY19wdHItPnUucGNpX2N0bHIuYnVzKTsKLQkJCWRlYnVnICgiJXMgLSBkZXZfZnVuOiAleFxuIiwgX19GVU5DVElPTl9fLCBocGNfcHRyLT51LnBjaV9jdGxyLmRldl9mdW4pOwotCQkJZGVidWcgKCIlcyAtIGlycTogJXhcbiIsIF9fRlVOQ1RJT05fXywgaHBjX3B0ci0+aXJxKTsKKwkJCWRlYnVnICgiJXMgLSBidXM6ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+dS5wY2lfY3Rsci5idXMpOworCQkJZGVidWcgKCIlcyAtIGRldl9mdW46ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+dS5wY2lfY3Rsci5kZXZfZnVuKTsKKwkJCWRlYnVnICgiJXMgLSBpcnE6ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+aXJxKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMDoKLQkJCWRlYnVnICgiJXMgLSBpb19zdGFydDogJXhcbiIsIF9fRlVOQ1RJT05fXywgaHBjX3B0ci0+dS5pc2FfY3Rsci5pb19zdGFydCk7Ci0JCQlkZWJ1ZyAoIiVzIC0gaW9fZW5kOiAleFxuIiwgX19GVU5DVElPTl9fLCBocGNfcHRyLT51LmlzYV9jdGxyLmlvX2VuZCk7Ci0JCQlkZWJ1ZyAoIiVzIC0gaXJxOiAleFxuIiwgX19GVU5DVElPTl9fLCBocGNfcHRyLT5pcnEpOworCQkJZGVidWcgKCIlcyAtIGlvX3N0YXJ0OiAleFxuIiwgX19mdW5jX18sIGhwY19wdHItPnUuaXNhX2N0bHIuaW9fc3RhcnQpOworCQkJZGVidWcgKCIlcyAtIGlvX2VuZDogJXhcbiIsIF9fZnVuY19fLCBocGNfcHRyLT51LmlzYV9jdGxyLmlvX2VuZCk7CisJCQlkZWJ1ZyAoIiVzIC0gaXJxOiAleFxuIiwgX19mdW5jX18sIGhwY19wdHItPmlycSk7CiAJCQlicmVhazsKIAogCQljYXNlIDI6CiAJCWNhc2UgNDoKLQkJCWRlYnVnICgiJXMgLSB3cGVnYmJhcjogJWx4XG4iLCBfX0ZVTkNUSU9OX18sIGhwY19wdHItPnUud3BlZ19jdGxyLndwZWdiYmFyKTsKLQkJCWRlYnVnICgiJXMgLSBpMmNfYWRkcjogJXhcbiIsIF9fRlVOQ1RJT05fXywgaHBjX3B0ci0+dS53cGVnX2N0bHIuaTJjX2FkZHIpOwotCQkJZGVidWcgKCIlcyAtIGlycTogJXhcbiIsIF9fRlVOQ1RJT05fXywgaHBjX3B0ci0+aXJxKTsKKwkJCWRlYnVnICgiJXMgLSB3cGVnYmJhcjogJWx4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+dS53cGVnX2N0bHIud3BlZ2JiYXIpOworCQkJZGVidWcgKCIlcyAtIGkyY19hZGRyOiAleFxuIiwgX19mdW5jX18sIGhwY19wdHItPnUud3BlZ19jdGxyLmkyY19hZGRyKTsKKwkJCWRlYnVnICgiJXMgLSBpcnE6ICV4XG4iLCBfX2Z1bmNfXywgaHBjX3B0ci0+aXJxKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtOTYzLDYgKzk2Myw3IEBACiAKIAkJCWJ1c19pbmZvX3B0cjEgPSBpYm1waHBfZmluZF9zYW1lX2J1c19udW0gKGhwY19wdHItPnNsb3RzW2luZGV4XS5zbG90X2J1c19udW0pOwogCQkJaWYgKCFidXNfaW5mb19wdHIxKSB7CisJCQkJa2ZyZWUodG1wX3Nsb3QpOwogCQkJCXJjID0gLUVOT0RFVjsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwppbmRleCBjMzFlN2JmLi44M2YzMzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwpAQCAtMTI5LDE0ICsxMjksMTQgQEAKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBfX2luaXQgaWJtcGhwX2hwY19pbml0dmFycyAodm9pZCkKIHsKLQlkZWJ1ZyAoIiVzIC0gRW50cnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGVidWcgKCIlcyAtIEVudHJ5XG4iLCBfX2Z1bmNfXyk7CiAKIAltdXRleF9pbml0KCZzZW1faHBjYWNjZXNzKTsKIAlpbml0X01VVEVYICgmc2VtT3BlcmF0aW9ucyk7CiAJaW5pdF9NVVRFWF9MT0NLRUQgKCZzZW1fZXhpdCk7CiAJdG9fZGVidWcgPSAwOwogCi0JZGVidWcgKCIlcyAtIEV4aXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGVidWcgKCIlcyAtIEV4aXRcbiIsIF9fZnVuY19fKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHVsdGVtcDsKIAl1bnNpZ25lZCBsb25nIGRhdGE7CS8vIGFjdHVhbCBkYXRhIEhJTE8gZm9ybWF0CiAKLQlkZWJ1Z19wb2xsaW5nICgiJXMgLSBFbnRyeSBXUEdCYmFyWyVwXSBpbmRleFsleF0gXG4iLCBfX0ZVTkNUSU9OX18sIFdQR0JiYXIsIGluZGV4KTsKKwlkZWJ1Z19wb2xsaW5nICgiJXMgLSBFbnRyeSBXUEdCYmFyWyVwXSBpbmRleFsleF0gXG4iLCBfX2Z1bmNfXywgV1BHQmJhciwgaW5kZXgpOwogCiAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCS8vIFJFQUQgLSBzdGVwIDEKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQlpLS07CiAJfQogCWlmIChpID09IDApIHsKLQkJZGVidWcgKCIlcyAtIEVycm9yIDogV1BHIHRpbWVvdXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRlYnVnICgiJXMgLSBFcnJvciA6IFdQRyB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBIUENfRVJST1I7CiAJfQogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0MSw3ICsyNDEsNyBAQAogCiAJc3RhdHVzID0gKHU4KSBkYXRhOwogCi0JZGVidWdfcG9sbGluZyAoIiVzIC0gRXhpdCBpbmRleFsleF0gc3RhdHVzWyV4XVxuIiwgX19GVU5DVElPTl9fLCBpbmRleCwgc3RhdHVzKTsKKwlkZWJ1Z19wb2xsaW5nICgiJXMgLSBFeGl0IGluZGV4WyV4XSBzdGF0dXNbJXhdXG4iLCBfX2Z1bmNfXywgaW5kZXgsIHN0YXR1cyk7CiAKIAlyZXR1cm4gKHN0YXR1cyk7CiB9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGRhdGE7CS8vIGFjdHVhbCBkYXRhIEhJTE8gZm9ybWF0CiAJaW50IGk7CiAKLQlkZWJ1Z19wb2xsaW5nICgiJXMgLSBFbnRyeSBXUEdCYmFyWyVwXSBpbmRleFsleF0gY21kWyV4XVxuIiwgX19GVU5DVElPTl9fLCBXUEdCYmFyLCBpbmRleCwgY21kKTsKKwlkZWJ1Z19wb2xsaW5nICgiJXMgLSBFbnRyeSBXUEdCYmFyWyVwXSBpbmRleFsleF0gY21kWyV4XVxuIiwgX19mdW5jX18sIFdQR0JiYXIsIGluZGV4LCBjbWQpOwogCiAJcmMgPSAwOwogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMyNCw3ICszMjQsNyBAQAogCQlpLS07CiAJfQogCWlmIChpID09IDApIHsKLQkJZGVidWcgKCIlcyAtIEV4aXQgRXJyb3I6V1BHIHRpbWVvdXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRlYnVnICgiJXMgLSBFeGl0IEVycm9yOldQRyB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CiAJCXJjID0gSFBDX0VSUk9SOwogCX0KIApAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCXJjID0gSFBDX0VSUk9SOwogCX0KIAotCWRlYnVnX3BvbGxpbmcgKCIlcyBFeGl0IHJjWyV4XVxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJZGVidWdfcG9sbGluZyAoIiVzIEV4aXQgcmNbJXhdXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiAocmMpOwogfQogCkBAIC01NDEsMTIgKzU0MSwxMiBAQAogCWludCByYyA9IDA7CiAJaW50IGJ1c2luZGV4OwogCi0JZGVidWdfcG9sbGluZyAoIiVzIC0gRW50cnkgcHNsb3RbJXBdIGNtZFsleF0gcHN0YXR1c1slcF1cbiIsIF9fRlVOQ1RJT05fXywgcHNsb3QsIGNtZCwgcHN0YXR1cyk7CisJZGVidWdfcG9sbGluZyAoIiVzIC0gRW50cnkgcHNsb3RbJXBdIGNtZFsleF0gcHN0YXR1c1slcF1cbiIsIF9fZnVuY19fLCBwc2xvdCwgY21kLCBwc3RhdHVzKTsKIAogCWlmICgocHNsb3QgPT0gTlVMTCkKIAkgICAgfHwgKChwc3RhdHVzID09IE5VTEwpICYmIChjbWQgIT0gUkVBRF9BTExTVEFUKSAmJiAoY21kICE9IFJFQURfQlVTU1RBVFVTKSkpIHsKIAkJcmMgPSAtRUlOVkFMOwotCQllcnIgKCIlcyAtIEVycm9yIGludmFsaWQgcG9pbnRlciwgcmNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJZXJyICgiJXMgLSBFcnJvciBpbnZhbGlkIHBvaW50ZXIsIHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNTU0LDcgKzU1NCw3IEBACiAJCWJ1c2luZGV4ID0gaWJtcGhwX2dldF9idXNfaW5kZXggKHBzbG90LT5idXMpOwogCQlpZiAoYnVzaW5kZXggPCAwKSB7CiAJCQlyYyA9IC1FSU5WQUw7Ci0JCQllcnIgKCIlcyAtIEV4aXQgRXJyb3I6aW52YWxpZCBidXMsIHJjWyVkXVxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJCQllcnIgKCIlcyAtIEV4aXQgRXJyb3I6aW52YWxpZCBidXMsIHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfSBlbHNlCiAJCQlpbmRleCA9ICh1OCkgYnVzaW5kZXg7CkBAIC01NjUsNyArNTY1LDcgQEAKIAogCWlmIChpbmRleCA9PSBIUENfRVJST1IpIHsKIAkJcmMgPSAtRUlOVkFMOwotCQllcnIgKCIlcyAtIEV4aXQgRXJyb3I6aW52YWxpZCBpbmRleCwgcmNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJZXJyICgiJXMgLSBFeGl0IEVycm9yOmludmFsaWQgaW5kZXgsIHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNjQxLDcgKzY0MSw3IEBACiAJCQkJCQkgICAgY3RybF9yZWFkIChjdGxyX3B0ciwgd3BnX2JiYXIsCiAJCQkJCQkJCWluZGV4ICsgV1BHXzFTVF9FWFRTTE9UX0lOREVYKTsKIAkJCQl9IGVsc2UgewotCQkJCQllcnIgKCIlcyAtIEVycm9yIGN0cmxfcmVhZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWVyciAoIiVzIC0gRXJyb3IgY3RybF9yZWFkIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTY2Miw3ICs2NjIsNyBAQAogCQogCWZyZWVfaHBjX2FjY2VzcyAoKTsKIAotCWRlYnVnX3BvbGxpbmcgKCIlcyAtIEV4aXQgcmNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwlkZWJ1Z19wb2xsaW5nICgiJXMgLSBFeGl0IHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY4MSwxMCArNjgxLDEwIEBACiAJaW50IHJjID0gMDsKIAlpbnQgdGltZW91dDsKIAotCWRlYnVnX3BvbGxpbmcgKCIlcyAtIEVudHJ5IHBzbG90WyVwXSBjbWRbJXhdXG4iLCBfX0ZVTkNUSU9OX18sIHBzbG90LCBjbWQpOworCWRlYnVnX3BvbGxpbmcgKCIlcyAtIEVudHJ5IHBzbG90WyVwXSBjbWRbJXhdXG4iLCBfX2Z1bmNfXywgcHNsb3QsIGNtZCk7CiAJaWYgKHBzbG90ID09IE5VTEwpIHsKIAkJcmMgPSAtRUlOVkFMOwotCQllcnIgKCIlcyAtIEVycm9yIEV4aXQgcmNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJZXJyICgiJXMgLSBFcnJvciBFeGl0IHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNjk0LDcgKzY5NCw3IEBACiAJCWJ1c2luZGV4ID0gaWJtcGhwX2dldF9idXNfaW5kZXggKHBzbG90LT5idXMpOwogCQlpZiAoYnVzaW5kZXggPCAwKSB7CiAJCQlyYyA9IC1FSU5WQUw7Ci0JCQllcnIgKCIlcyAtIEV4aXQgRXJyb3I6aW52YWxpZCBidXMsIHJjWyVkXVxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJCQllcnIgKCIlcyAtIEV4aXQgRXJyb3I6aW52YWxpZCBidXMsIHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfSBlbHNlCiAJCQlpbmRleCA9ICh1OCkgYnVzaW5kZXg7CkBAIC03MDUsNyArNzA1LDcgQEAKIAogCWlmIChpbmRleCA9PSBIUENfRVJST1IpIHsKIAkJcmMgPSAtRUlOVkFMOwotCQllcnIgKCIlcyAtIEVycm9yIEV4aXQgcmNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJZXJyICgiJXMgLSBFcnJvciBFeGl0IHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNzE5LDcgKzcxOSw3IEBACiAJaWYgKChjdGxyX3B0ci0+Y3Rscl90eXBlID09IDIpIHx8IChjdGxyX3B0ci0+Y3Rscl90eXBlID09IDQpKSB7CiAJCXdwZ19iYmFyID0gaW9yZW1hcCAoY3Rscl9wdHItPnUud3BlZ19jdGxyLndwZWdiYmFyLCBXUEdfSTJDX0lPUkVNQVBfU0laRSk7CiAKLQkJZGVidWcgKCIlcyAtIGN0bHIgaWRbJXhdIHBoeXNpY2FsWyVseF0gbG9naWNhbFslbHhdIGkyY1sleF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJZGVidWcgKCIlcyAtIGN0bHIgaWRbJXhdIHBoeXNpY2FsWyVseF0gbG9naWNhbFslbHhdIGkyY1sleF1cbiIsIF9fZnVuY19fLAogCQljdGxyX3B0ci0+Y3Rscl9pZCwgKHVsb25nKSAoY3Rscl9wdHItPnUud3BlZ19jdGxyLndwZWdiYmFyKSwgKHVsb25nKSB3cGdfYmJhciwKIAkJY3Rscl9wdHItPnUud3BlZ19jdGxyLmkyY19hZGRyKTsKIAl9CkBAIC03NTAsNyArNzUwLDcgQEAKIAkJCQltc2xlZXAoMTAwMCk7CiAJCQkJaWYgKHRpbWVvdXQgPCAxKSB7CiAJCQkJCWRvbmUgPSAxOwotCQkJCQllcnIgKCIlcyAtIEVycm9yIGNvbW1hbmQgY29tcGxldGUgdGltZW91dFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZXJyICgiJXMgLSBFcnJvciBjb21tYW5kIGNvbXBsZXRlIHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKIAkJCQkJcmMgPSAtRUZBVUxUOwogCQkJCX0gZWxzZQogCQkJCQl0aW1lb3V0LS07CkBAIC03NjUsNyArNzY1LDcgQEAKIAkJaW91bm1hcCAod3BnX2JiYXIpOwogCWZyZWVfaHBjX2FjY2VzcyAoKTsKIAotCWRlYnVnX3BvbGxpbmcgKCIlcyAtIEV4aXQgcmNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwlkZWJ1Z19wb2xsaW5nICgiJXMgLSBFeGl0IHJjWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTgwMywxMCArODAzLDEwIEBACiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHZvaWQgaWJtcGhwX3VubG9ja19vcGVyYXRpb25zICh2b2lkKQogewotCWRlYnVnICgiJXMgLSBFbnRyeVxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gRW50cnlcbiIsIF9fZnVuY19fKTsKIAl1cCAoJnNlbU9wZXJhdGlvbnMpOwogCXRvX2RlYnVnID0gMDsKLQlkZWJ1ZyAoIiVzIC0gRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gRXhpdFxuIiwgX19mdW5jX18pOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgyNyw3ICs4MjcsNyBAQAogCWludCBwb2xsX2NvdW50ID0gMDsKIAl1OCBjdHJsX2NvdW50ID0gMHgwMDsKIAotCWRlYnVnICgiJXMgLSBFbnRyeVxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gRW50cnlcbiIsIF9fZnVuY19fKTsKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCS8qIHRyeSB0byBnZXQgdGhlIGxvY2sgdG8gZG8gc29tZSBraW5kIG9mIGhhcmR3YXJlIGFjY2VzcyAqLwpAQCAtOTA3LDcgKzkwNyw3IEBACiAJCW1zbGVlcCgxMDApOwogCX0KIAl1cCAoJnNlbV9leGl0KTsKLQlkZWJ1ZyAoIiVzIC0gRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gRXhpdFxuIiwgX19mdW5jX18pOwogCXJldHVybiAwOwogfQogCkBAIC05OTksNyArOTk5LDcgQEAKIAkJaWJtcGhwX3VwZGF0ZV9zbG90X2luZm8gKHBzbG90KTsKIAl9CiAKLQlkZWJ1ZyAoIiVzIC0gRXhpdCByY1slZF0gZGlzYWJsZVsleF0gdXBkYXRlWyV4XVxuIiwgX19GVU5DVElPTl9fLCByYywgZGlzYWJsZSwgdXBkYXRlKTsKKwlkZWJ1ZyAoIiVzIC0gRXhpdCByY1slZF0gZGlzYWJsZVsleF0gdXBkYXRlWyV4XVxuIiwgX19mdW5jX18sIHJjLCBkaXNhYmxlLCB1cGRhdGUpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIAl1OCBtYXNrOwogCWludCByYyA9IDA7CiAKLQlkZWJ1ZyAoIiVzIC0gRW50cnkgb2xkWyV4XSwgbmV3WyV4XVxuIiwgX19GVU5DVElPTl9fLCBvbGQsIG5ldyk7CisJZGVidWcgKCIlcyAtIEVudHJ5IG9sZFsleF0sIG5ld1sleF1cbiIsIF9fZnVuY19fLCBvbGQsIG5ldyk7CiAJLy8gYml0IDAgcmVzZXJ2ZWQsIDAgaXMgTFNCLCBjaGVjayBiaXQgMS02IGZvciA2IHNsb3RzCiAKIAlmb3IgKGkgPSBjdHJsLT5zdGFydGluZ19zbG90X251bTsgaSA8PSBjdHJsLT5lbmRpbmdfc2xvdF9udW07IGkrKykgewpAQCAtMTAzMSwxNSArMTAzMSwxNSBAQAogCQkJaWYgKHBzbG90KSB7CiAJCQkJbWVtY3B5ICgodm9pZCAqKSAmbXlzbG90LCAodm9pZCAqKSBwc2xvdCwgc2l6ZW9mIChzdHJ1Y3Qgc2xvdCkpOwogCQkJCXJjID0gaWJtcGhwX2hwY19yZWFkc2xvdCAocHNsb3QsIFJFQURfQUxMU1RBVCwgTlVMTCk7Ci0JCQkJZGVidWcgKCIlcyAtIGNhbGwgcHJvY2Vzc19jaGFuZ2VpbnN0YXR1cyBmb3Igc2xvdFslZF1cbiIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQkJZGVidWcgKCIlcyAtIGNhbGwgcHJvY2Vzc19jaGFuZ2VpbnN0YXR1cyBmb3Igc2xvdFslZF1cbiIsIF9fZnVuY19fLCBpKTsKIAkJCQlwcm9jZXNzX2NoYW5nZWluc3RhdHVzIChwc2xvdCwgJm15c2xvdCk7CiAJCQl9IGVsc2UgewogCQkJCXJjID0gLUVJTlZBTDsKLQkJCQllcnIgKCIlcyAtIEVycm9yIGJhZCBwb2ludGVyIGZvciBzbG90WyVkXVxuIiwgX19GVU5DVElPTl9fLCBpKTsKKwkJCQllcnIgKCIlcyAtIEVycm9yIGJhZCBwb2ludGVyIGZvciBzbG90WyVkXVxuIiwgX19mdW5jX18sIGkpOwogCQkJfQogCQl9CiAJfQotCWRlYnVnICgiJXMgLSBFeGl0IHJjWyVkXVxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJZGVidWcgKCIlcyAtIEV4aXQgcmNbJWRdXG4iLCBfX2Z1bmNfXywgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTA1MCwxMSArMTA1MCwxMSBAQAogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgX19pbml0IGlibXBocF9ocGNfc3RhcnRfcG9sbF90aHJlYWQgKHZvaWQpCiB7Ci0JZGVidWcgKCIlcyAtIEVudHJ5XG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnICgiJXMgLSBFbnRyeVxuIiwgX19mdW5jX18pOwogCiAJaWJtcGhwX3BvbGxfdGhyZWFkID0ga3RocmVhZF9ydW4ocG9sbF9ocGMsIE5VTEwsICJocGNfcG9sbCIpOwogCWlmIChJU19FUlIoaWJtcGhwX3BvbGxfdGhyZWFkKSkgewotCQllcnIgKCIlcyAtIEVycm9yLCB0aHJlYWQgbm90IHN0YXJ0ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVyciAoIiVzIC0gRXJyb3IsIHRocmVhZCBub3Qgc3RhcnRlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gUFRSX0VSUihpYm1waHBfcG9sbF90aHJlYWQpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwNjcsNyArMTA2Nyw3IEBACiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHZvaWQgX19leGl0IGlibXBocF9ocGNfc3RvcF9wb2xsX3RocmVhZCAodm9pZCkKIHsKLQlkZWJ1ZyAoIiVzIC0gRW50cnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGVidWcgKCIlcyAtIEVudHJ5XG4iLCBfX2Z1bmNfXyk7CiAKIAlrdGhyZWFkX3N0b3AoaWJtcGhwX3BvbGxfdGhyZWFkKTsKIAlkZWJ1ZyAoImJlZm9yZSBsb2NraW5nIG9wZXJhdGlvbnMgXG4iKTsKQEAgLTEwODgsNyArMTA4OCw3IEBACiAJdXAgKCZzZW1fZXhpdCk7CiAJZGVidWcgKCJhZnRlciBzZW0gZXhpdCB1cFxuIik7CiAKLQlkZWJ1ZyAoIiVzIC0gRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gRXhpdFxuIiwgX19mdW5jX18pOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKaW5kZXggZDhmMDVkNy4uN2IwOWUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMKQEAgLTM2NCw3ICszNjQsNyBAQAogCXN0cnVjdCByZXNvdXJjZV9ub2RlICpwZm1lbVs2XTsKIAl1bnNpZ25lZCBpbnQgZGV2Zm47CiAKLQlkZWJ1ZyAoIiVzIC0gaW5zaWRlXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnICgiJXMgLSBpbnNpZGVcbiIsIF9fZnVuY19fKTsKIAogCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwogCWlibXBocF9wY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXNubzsKQEAgLTU5NSw3ICs1OTUsNyBAQAogCXU4IGlycTsKIAlpbnQgcmV0dmFsOwogCi0JZGVidWcgKCIlcyAtIGVudGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnICgiJXMgLSBlbnRlclxuIiwgX19mdW5jX18pOwogCiAJZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZnVuY3Rpb24sIGZ1bmMtPmRldmljZSk7CiAJaWJtcGhwX3BjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1c25vOwpAQCAtMTIzNCw3ICsxMjM0LDcgQEAKIAl1MzIgdG1wX2FkZHJlc3M7CiAJdW5zaWduZWQgaW50IGRldmZuOwogCi0JZGVidWcgKCIlcyAtIGVudGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnICgiJXMgLSBlbnRlclxuIiwgX19mdW5jX18pOwogCiAJYnVzID0gaWJtcGhwX2ZpbmRfcmVzX2J1cyAoYnVzbm8pOwogCWlmICghYnVzKSB7CkBAIC0xMzUxLDcgKzEzNTEsNyBAQAogCWJ1c19ubyA9IChpbnQpIGJ1c25vOwogCWRlYnVnICgiYnVzbm8gaXMgJXhcbiIsIGJ1c25vKTsKIAlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUgKGlibXBocF9wY2lfYnVzLCBkZXZmbiwgUENJX1BSSU1BUllfQlVTLCAmcHJpX251bWJlcik7Ci0JZGVidWcgKCIlcyAtIGJ1c25vID0gJXgsIHByaW1hcnlfbnVtYmVyID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgYnVzbm8sIHByaV9udW1iZXIpOworCWRlYnVnICgiJXMgLSBidXNubyA9ICV4LCBwcmltYXJ5X251bWJlciA9ICV4XG4iLCBfX2Z1bmNfXywgYnVzbm8sIHByaV9udW1iZXIpOwogCiAJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChpYm1waHBfcGNpX2J1cywgZGV2Zm4sIFBDSV9TRUNPTkRBUllfQlVTLCAmc2VjX251bWJlcik7CiAJZGVidWcgKCJzZWNfbnVtYmVyIGlzICV4XG4iLCBzZWNfbnVtYmVyKTsKQEAgLTE0MzcsNyArMTQzNyw3IEBACiAJCQl9CiAJCX0JLyogZW5kIG9mIG1lbSAqLwogCX0JLyogZW5kIG9mIGZvciAqLwotCWRlYnVnICgiJXMgLSBleGl0aW5nLCByZXR1cm5pbmcgc3VjY2Vzc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gZXhpdGluZywgcmV0dXJuaW5nIHN1Y2Nlc3NcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ1Myw3ICsxNDUzLDcgQEAKIAl1bnNpZ25lZCBpbnQgZGV2Zm47CiAJdTggdmFsaWRfZGV2aWNlID0gMHgwMDsgLyogVG8gc2VlIGlmIHdlIGFyZSBldmVyIGFibGUgdG8gZmluZCB2YWxpZCBkZXZpY2UgYW5kIHJlYWQgaXQgKi8KIAotCWRlYnVnICgiJXMgLSBlbnRlclxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gZW50ZXJcbiIsIF9fZnVuY19fKTsKIAogCWRldmljZSA9IHNsb3RfY3VyLT5kZXZpY2U7CiAJYnVzbm8gPSBzbG90X2N1ci0+YnVzOwpAQCAtMTQ3MCw3ICsxNDcwLDcgQEAKIAkJCS8qIGZvdW5kIGNvcnJlY3QgZGV2aWNlISEhICovCiAJCQkrK3ZhbGlkX2RldmljZTsKIAotCQkJZGVidWcgKCIlcyAtIGZvdW5kIGNvcnJlY3QgZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZGVidWcgKCIlcyAtIGZvdW5kIGNvcnJlY3QgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAKIAkJCS8qIGhlYWRlcjogeCB4IHggeCB4IHggeCB4CiAJCQkgKiAgICAgICAgIHwgfF9fX19fX19fX19ffD0+IDE9UFBCIGJyaWRnZSwgMD1ub3JtYWwgZGV2aWNlLCAyPUNhcmRCdXMgQnJpZGdlCkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCXN0cnVjdCBwY2lfZnVuYyAqY3VyX2Z1bmMgPSBOVUxMOwogCXN0cnVjdCBwY2lfZnVuYyAqdGVtcF9mdW5jOwogCi0JZGVidWcgKCIlcyAtIGVudGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnICgiJXMgLSBlbnRlclxuIiwgX19mdW5jX18pOwogCiAJaWYgKCF0aGVfZW5kKSB7CiAJCS8qIE5lZWQgdG8gdW5jb25maWd1cmUgdGhlIGNhcmQgKi8KQEAgLTE2MjQsNyArMTYyNCw3IEBACiAKIAlzbC0+ZnVuYyA9IE5VTEw7CiAJKnNsb3RfY3VyID0gc2w7Ci0JZGVidWcgKCIlcyAtIGV4aXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGVidWcgKCIlcyAtIGV4aXRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcmVzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYwppbmRleCA1NjM2YjFhLi5lYzczMjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJc3RydWN0IHJhbmdlX25vZGUgKnJhbmdlOwogCXN0cnVjdCByZXNvdXJjZV9ub2RlICpyZXM7CiAKLQlkZWJ1ZyAoIiVzIC0gYnVzX2N1ci0+YnVzbm8gPSAlZFxuIiwgX19GVU5DVElPTl9fLCBidXNfY3VyLT5idXNubyk7CisJZGVidWcgKCIlcyAtIGJ1c19jdXItPmJ1c25vID0gJWRcbiIsIF9fZnVuY19fLCBidXNfY3VyLT5idXNubyk7CiAKIAlpZiAoYnVzX2N1ci0+bmVlZElPVXBkYXRlKSB7CiAJCXJlcyA9IGJ1c19jdXItPmZpcnN0SU87CkBAIC01OTksNyArNTk5LDcgQEAKIAlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmFuZ2VfY3VyID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSAqcmVzX3N0YXJ0ID0gTlVMTDsKIAotCWRlYnVnICgiJXMgLSBlbnRlclxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gZW50ZXJcbiIsIF9fZnVuY19fKTsKIAogCWlmICghcmVzKSB7CiAJCWVyciAoIk5VTEwgcGFzc2VkIHRvIGFkZFxuIik7CkBAIC03NjIsNyArNzYyLDcgQEAKIAkJfQogCX0KIAotCWRlYnVnICgiJXMgLSBleGl0XG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnICgiJXMgLSBleGl0XG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRlYnVnICgiJXMgLSBlbnRlclxuIiwgX19GVU5DVElPTl9fKTsKKwlkZWJ1ZyAoIiVzIC0gZW50ZXJcbiIsIF9fZnVuY19fKTsKIAlkZWJ1ZyAoImJ1c19jdXItPmJ1c25vIGlzICVkXG4iLCBidXNfY3VyLT5idXNubyk7CiAKIAkvKiBUaGlzIGlzIGEgcXVpY2sgZml4IHRvIG5vdCBtZXNzIHVwIHdpdGggdGhlIGNvZGUgdmVyeSBtdWNoLiAgaS5lLiwKQEAgLTEwMjksNyArMTAyOSw3IEBACiAKIAl3aGlsZSAocmVzX2N1cikgewogCQlyYW5nZSA9IGZpbmRfcmFuZ2UgKGJ1c19jdXIsIHJlc19jdXIpOwotCQlkZWJ1ZyAoIiVzIC0gcmFuZ2VubyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc19jdXItPnJhbmdlbm8pOworCQlkZWJ1ZyAoIiVzIC0gcmFuZ2VubyA9ICVkXG4iLCBfX2Z1bmNfXywgcmVzX2N1ci0+cmFuZ2Vubyk7CiAKIAkJaWYgKCFyYW5nZSkgewogCQkJZXJyICgibm8gcmFuZ2UgZm9yIHRoZSBkZXZpY2UgZXhpc3RzLi4uIGJhaWxpbmcgb3V0Li4uXG4iKTsKQEAgLTE5NDIsNyArMTk0Miw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCWlibXBocF9wY2lfYnVzLT5udW1iZXIgPSBidXNfY3VyLT5idXNubzsKIAotCWRlYnVnICgiaW5zaWRlICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlYnVnICgiaW5zaWRlICVzXG4iLCBfX2Z1bmNfXyk7CiAJZGVidWcgKCJidXNfY3VyLT5idXNubyA9ICV4XG4iLCBidXNfY3VyLT5idXNubyk7CiAKIAlmb3IgKGRldmljZSA9IDA7IGRldmljZSA8IDMyOyBkZXZpY2UrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYwppbmRleCBkZDU5YTA1Li45MjViYTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYwpAQCAtNDMsNyArNDMsNyBAQAogCiAjZGVmaW5lIE1ZX05BTUUJInBjaV9ob3RwbHVnIgogCi0jZGVmaW5lIGRiZyhmbXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICIlczogJXM6ICIgZm10ICwgTVlfTkFNRSAsIF9fRlVOQ1RJT05fXyAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRiZyhmbXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICIlczogJXM6ICIgZm10ICwgTVlfTkFNRSAsIF9fZnVuY19fICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAsIE1ZX05BTUUgLCAjIyBhcmcpCiAjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCAsIE1ZX05BTUUgLCAjIyBhcmcpCiAjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCAsIE1ZX05BTUUgLCAjIyBhcmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAppbmRleCBjYTY1NmIyLi5mMTQyNjdlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJCXJldHVybiBzbG90OwogCX0KIAotCWVycigiJXM6IHNsb3QgKGRldmljZT0weCV4KSBub3QgZm91bmRcbiIsIF9fRlVOQ1RJT05fXywgZGV2aWNlKTsKKwllcnIoIiVzOiBzbG90IChkZXZpY2U9MHgleCkgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXywgZGV2aWNlKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCmluZGV4IDdmNDgzNmI4Li5hZWUxOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCkBAIC0xODQsNyArMTg0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mbyk7CiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90KTsKQEAgLTMwMSw3ICszMDEsNyBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJaG90cGx1Z19zbG90LT5pbmZvLT5hdHRlbnRpb25fc3RhdHVzID0gc3RhdHVzOwogCkBAIC0zMTYsNyArMzE2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHVybiBwY2llaHBfc3lzZnNfZW5hYmxlX3Nsb3Qoc2xvdCk7CiB9CkBAIC0zMjYsNyArMzI2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHVybiBwY2llaHBfc3lzZnNfZGlzYWJsZV9zbG90KHNsb3QpOwogfQpAQCAtMzM2LDcgKzMzNiw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzUwLDcgKzM1MCw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9hdHRlbnRpb25fc3RhdHVzKHNsb3QsIHZhbHVlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTM2NCw3ICszNjQsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHNsb3QsIHZhbHVlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTM3OCw3ICszNzgsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWw7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzkyLDcgKzM5Miw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHNsb3QtPmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJKnZhbHVlID0gKHBjaV9kb21haW5fbnIoYnVzKSA8PCAxNikgfCAoc2xvdC0+YnVzIDw8IDgpIHwgc2xvdC0+ZGV2aWNlOwogCkBAIC00MDQsNyArNDA0LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtNDE4LDcgKzQxOCw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9jdXJfYnVzX3NwZWVkKHNsb3QsIHZhbHVlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTQzNyw3ICs0MzcsNyBAQAogCiAJY3RybCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHJsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHJsKSB7Ci0JCWVycigiJXMgOiBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzIDogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycl9vdXRfbm9uZTsKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJmN0cmwtPnNsb3RfbGlzdCk7CkBAIC00NTQsNyArNDU0LDcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgY3RybCk7CiAKIAlkYmcoIiVzOiBjdHJsIGJ1cz0weCV4LCBkZXZpY2U9JXgsIGZ1bmN0aW9uPSV4LCBpcnE9JXhcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwKKwkgICAgX19mdW5jX18sIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCiAJICAgIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwgcGRldi0+aXJxKTsKIAogCS8qIFNldHVwIHRoZSBzbG90IGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgKi8KQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCXRfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAogCXRfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHRfc2xvdCwgJnZhbHVlKTsgLyogQ2hlY2sgaWYgc2xvdCBpcyBvY2N1cGllZCAqLwotCWlmICh2YWx1ZSkgeworCWlmICh2YWx1ZSAmJiBwY2llaHBfZm9yY2UpIHsKIAkJcmMgPSBwY2llaHBfZW5hYmxlX3Nsb3QodF9zbG90KTsKIAkJaWYgKHJjKQkvKiAtRU5PREVWOiBzaG91bGRuJ3QgaGFwcGVuLCBidXQgZGVhbCB3aXRoIGl0ICovCiAJCQl2YWx1ZSA9IDA7CkBAIC01MDMsMTMgKzUwMywxMyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBwY2llaHBfc3VzcGVuZCAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlwcmludGsoIiVzIEVOVFJZXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50aygiJXMgRU5UUllcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2llaHBfcmVzdW1lIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoIiVzIEVOVFJZXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50aygiJXMgRU5UUllcbiIsIF9fZnVuY19fKTsKIAlpZiAocGNpZWhwX2ZvcmNlKSB7CiAJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wb3J0OwogCQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTU2Myw3ICs1NjMsNyBAQAogIAlkYmcoInBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyID0gJWRcbiIsIHJldHZhbCk7CiAgIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKICAJaWYgKHJldHZhbCkKLQkJZGJnKCIlczogRmFpbHVyZSB0byByZWdpc3RlciBzZXJ2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkYmcoIiVzOiBGYWlsdXJlIHRvIHJlZ2lzdGVyIHNlcnZpY2VcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggYjIzMDYxYy4uMGM0ODFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJaWYgKFBPV0VSX0NUUkwoY3RybC0+Y3RybGNhcCkpIHsKIAkJaWYgKHBzbG90LT5ocGNfb3BzLT5wb3dlcl9vZmZfc2xvdChwc2xvdCkpIHsKIAkJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgUG93ZXIgT2ZmIGNvbW1hbmQgZmFpbGVkXG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTkyLDcgKzE5Miw3IEBACiAJaWYgKEFUVE5fTEVEKGN0cmwtPmN0cmxjYXApKSB7CiAJCWlmIChwc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMocHNsb3QsIDEpKSB7CiAJCQllcnIoIiVzOiBJc3N1ZSBvZiBTZXQgQXR0ZW50aW9uIExlZCBjb21tYW5kIGZhaWxlZFxuIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTIxMSw3ICsyMTEsNyBAQAogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCiAJZGJnKCIlczogc2xvdCBkZXZpY2UsIHNsb3Qgb2Zmc2V0LCBocCBzbG90ID0gJWQsICVkICwlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgcF9zbG90LT5kZXZpY2UsCisJCQlfX2Z1bmNfXywgcF9zbG90LT5kZXZpY2UsCiAJCQljdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIHBfc2xvdC0+aHBfc2xvdCk7CiAKIAlpZiAoUE9XRVJfQ1RSTChjdHJsLT5jdHJsY2FwKSkgewpAQCAtMjMwLDE0ICsyMzAsMTQgQEAKIAkvKiBDaGVjayBsaW5rIHRyYWluaW5nIHN0YXR1cyAqLwogCXJldHZhbCA9IHBfc2xvdC0+aHBjX29wcy0+Y2hlY2tfbG5rX3N0YXR1cyhjdHJsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IEZhaWxlZCB0byBjaGVjayBsaW5rIHN0YXR1c1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogRmFpbGVkIHRvIGNoZWNrIGxpbmsgc3RhdHVzXG4iLCBfX2Z1bmNfXyk7CiAJCXNldF9zbG90X29mZihjdHJsLCBwX3Nsb3QpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAogCS8qIENoZWNrIGZvciBhIHBvd2VyIGZhdWx0ICovCiAJaWYgKHBfc2xvdC0+aHBjX29wcy0+cXVlcnlfcG93ZXJfZmF1bHQocF9zbG90KSkgewotCQlkYmcoIiVzOiBwb3dlciBmYXVsdCBkZXRlY3RlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlczogcG93ZXIgZmF1bHQgZGV0ZWN0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gUE9XRVJfRkFJTFVSRTsKIAkJZ290byBlcnJfZXhpdDsKIAl9CkBAIC0yNzcsMTQgKzI3NywxNCBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQlkYmcoIkluICVzLCBocF9zbG90ID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5ocF9zbG90KTsKKwlkYmcoIkluICVzLCBocF9zbG90ID0gJWRcbiIsIF9fZnVuY19fLCBwX3Nsb3QtPmhwX3Nsb3QpOwogCiAJaWYgKFBPV0VSX0NUUkwoY3RybC0+Y3RybGNhcCkpIHsKIAkJLyogcG93ZXIgb2ZmIHNsb3QgKi8KIAkJcmV0dmFsID0gcF9zbG90LT5ocGNfb3BzLT5wb3dlcl9vZmZfc2xvdChwX3Nsb3QpOwogCQlpZiAocmV0dmFsKSB7CiAJCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCBmYWlsZWRcbiIsCi0JCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAJfQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJY2FzZSBQT1dFUk9GRl9TVEFURToKIAkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmxvY2spOwogCQlkYmcoIiVzOiBkaXNhYmxpbmcgYnVzOmRldmljZSgleDoleClcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCSAgICBfX2Z1bmNfXywgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAkJcGNpZWhwX2Rpc2FibGVfc2xvdChwX3Nsb3QpOwogCQltdXRleF9sb2NrKCZwX3Nsb3QtPmxvY2spOwogCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pIHsKLQkJZXJyKCIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWluZm8tPnBfc2xvdCA9IHBfc2xvdDsKQEAgLTQyNCw3ICs0MjQsNyBAQAogCQkgKiBleHBpcmVzIHRvIGNhbmNlbCBob3QtYWRkIG9yIGhvdC1yZW1vdmUKIAkJICovCiAJCWluZm8oIkJ1dHRvbiBjYW5jZWwgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7Ci0JCWRiZygiJXM6IGJ1dHRvbiBjYW5jZWxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZygiJXM6IGJ1dHRvbiBjYW5jZWxcbiIsIF9fZnVuY19fKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcF9zbG90LT53b3JrKTsKIAkJaWYgKHBfc2xvdC0+c3RhdGUgPT0gQkxJTktJTkdPRkZfU1RBVEUpIHsKIAkJCWlmIChQV1JfTEVEKGN0cmwtPmN0cmxjYXApKQpAQCAtNDY1LDcgKzQ2NSw3IEBACiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pIHsKLQkJZXJyKCIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWluZm8tPnBfc2xvdCA9IHBfc2xvdDsKQEAgLTUyNiw3ICs1MjYsNyBAQAogCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChyYyB8fCAhZ2V0c3RhdHVzKSB7Ci0JCWluZm8oIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLCBfX0ZVTkNUSU9OX18sCisJCWluZm8oIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXMpXG4iLCBfX2Z1bmNfXywKIAkJICAgICBwX3Nsb3QtPm5hbWUpOwogCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01MzQsNyArNTM0LDcgQEAKIAlpZiAoTVJMX1NFTlMocF9zbG90LT5jdHJsLT5jdHJsY2FwKSkgewogCQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmMgfHwgZ2V0c3RhdHVzKSB7Ci0JCQlpbmZvKCIlczogbGF0Y2ggb3BlbiBvbiBzbG90KCVzKVxuIiwgX19GVU5DVElPTl9fLAorCQkJaW5mbygiJXM6IGxhdGNoIG9wZW4gb24gc2xvdCglcylcbiIsIF9fZnVuY19fLAogCQkJICAgICBwX3Nsb3QtPm5hbWUpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU0NCw3ICs1NDQsNyBAQAogCWlmIChQT1dFUl9DVFJMKHBfc2xvdC0+Y3RybC0+Y3RybGNhcCkpIHsKIAkJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJjIHx8IGdldHN0YXR1cykgewotCQkJaW5mbygiJXM6IGFscmVhZHkgZW5hYmxlZCBvbiBzbG90KCVzKVxuIiwgX19GVU5DVElPTl9fLAorCQkJaW5mbygiJXM6IGFscmVhZHkgZW5hYmxlZCBvbiBzbG90KCVzKVxuIiwgX19mdW5jX18sCiAJCQkgICAgIHBfc2xvdC0+bmFtZSk7CiAJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJaWYgKCFIUF9TVVBSX1JNKHBfc2xvdC0+Y3RybC0+Y3RybGNhcCkpIHsKIAkJcmV0ID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJldCB8fCAhZ2V0c3RhdHVzKSB7Ci0JCQlpbmZvKCIlczogbm8gYWRhcHRlciBvbiBzbG90KCVzKVxuIiwgX19GVU5DVElPTl9fLAorCQkJaW5mbygiJXM6IG5vIGFkYXB0ZXIgb24gc2xvdCglcylcbiIsIF9fZnVuY19fLAogCQkJICAgICBwX3Nsb3QtPm5hbWUpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU4OSw3ICs1ODksNyBAQAogCWlmIChNUkxfU0VOUyhwX3Nsb3QtPmN0cmwtPmN0cmxjYXApKSB7CiAJCXJldCA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmV0IHx8IGdldHN0YXR1cykgewotCQkJaW5mbygiJXM6IGxhdGNoIG9wZW4gb24gc2xvdCglcylcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWluZm8oIiVzOiBsYXRjaCBvcGVuIG9uIHNsb3QoJXMpXG4iLCBfX2Z1bmNfXywKIAkJCSAgICAgcF9zbG90LT5uYW1lKTsKIAkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC01OTksNyArNTk5LDcgQEAKIAlpZiAoUE9XRVJfQ1RSTChwX3Nsb3QtPmN0cmwtPmN0cmxjYXApKSB7CiAJCXJldCA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmV0IHx8ICFnZXRzdGF0dXMpIHsKLQkJCWluZm8oIiVzOiBhbHJlYWR5IGRpc2FibGVkIHNsb3QoJXMpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlpbmZvKCIlczogYWxyZWFkeSBkaXNhYmxlZCBzbG90KCVzKVxuIiwgX19mdW5jX18sCiAJCQkgICAgIHBfc2xvdC0+bmFtZSk7CiAJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwppbmRleCA2ZWJhOWIyLi5iNGJiZDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVFNUQVRVUywgJnNsb3Rfc3RhdHVzKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNjcsMTMgKzI2NywxMyBAQAogCQkgICBwcm9jZWVkIGZvcndhcmQgdG8gaXNzdWUgdGhlIG5leHQgY29tbWFuZCBhY2NvcmRpbmcKIAkJICAgdG8gc3BlYy4gIEp1c3QgcHJpbnQgb3V0IHRoZSBlcnJvciBtZXNzYWdlICovCiAJCWRiZygiJXM6IENNRF9DT01QTEVURUQgbm90IGNsZWFyIGFmdGVyIDEgc2VjLlxuIiwKLQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICBfX2Z1bmNfXyk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVENUUkwsICZzbG90X2N0cmwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X3NwaW5fdW5sb2NrOwogCX0KIApAQCAtMjgzLDcgKzI4Myw3IEBACiAJY3RybC0+Y21kX2J1c3kgPSAxOwogCXJldHZhbCA9IHBjaWVocF93cml0ZXcoY3RybCwgU0xPVENUUkwsIHNsb3RfY3RybCk7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAogIG91dF9zcGluX3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHJsLT5sb2NrLCBmbGFncyk7CkBAIC0zMDUsMTQgKzMwNSwxNCBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIExOS1NUQVRVUywgJmxua19zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgTE5LU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlkYmcoIiVzOiBsbmtfc3RhdHVzID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgbG5rX3N0YXR1cyk7CisJZGJnKCIlczogbG5rX3N0YXR1cyA9ICV4XG4iLCBfX2Z1bmNfXywgbG5rX3N0YXR1cyk7CiAJaWYgKCAobG5rX3N0YXR1cyAmIExOS19UUk4pIHx8IChsbmtfc3RhdHVzICYgTE5LX1RSTl9FUlIpIHx8CiAJCSEobG5rX3N0YXR1cyAmIE5FR19MSU5LX1dEKSkgewotCQllcnIoIiVzIDogTGluayBUcmFpbmluZyBFcnJvciBvY2N1cnMgXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzIDogTGluayBUcmFpbmluZyBFcnJvciBvY2N1cnMgXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHZhbCA9IC0xOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KQEAgLTMyOSwxMiArMzI5LDEyIEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVENUUkwsICZzbG90X2N0cmwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCiAJZGJnKCIlczogU0xPVENUUkwgJXgsIHZhbHVlIHJlYWQgJXhcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jdHJsKTsKKwkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY3RybCk7CiAKIAlhdHRlbl9sZWRfc3RhdGUgPSAoc2xvdF9jdHJsICYgQVRUTl9MRURfQ1RSTCkgPj4gNjsKIApAQCAtMzY4LDExICszNjgsMTEgQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UQ1RSTCwgJnNsb3RfY3RybCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJZGJnKCIlczogU0xPVENUUkwgJXggdmFsdWUgcmVhZCAleFxuIiwKLQkgICAgX19GVU5DVElPTl9fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2N0cmwpOworCSAgICBfX2Z1bmNfXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jdHJsKTsKIAogCXB3cl9zdGF0ZSA9IChzbG90X2N0cmwgJiBQV1JfQ1RSTCkgPj4gMTA7CiAKQEAgLTM5OSw3ICszOTksNyBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC00MTcsNyArNDE3LDcgQEAKIAogCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UU1RBVFVTLCAmc2xvdF9zdGF0dXMpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAljYXJkX3N0YXRlID0gKHU4KSgoc2xvdF9zdGF0dXMgJiBQUlNOX1NUQVRFKSA+PiA2KTsKQEAgLTQzNSw3ICs0MzUsNyBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgY2hlY2sgZm9yIHBvd2VyIGZhdWx0XG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3QgY2hlY2sgZm9yIHBvd2VyIGZhdWx0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCXB3cl9mYXVsdCA9ICh1OCkoKHNsb3Rfc3RhdHVzICYgUFdSX0ZBVUxUX0RFVEVDVEVEKSA+PiAxKTsKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzIDogQ2Fubm90IGNoZWNrIEVNSSBzdGF0dXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXMgOiBDYW5ub3QgY2hlY2sgRU1JIHN0YXR1c1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAkqc3RhdHVzID0gKHNsb3Rfc3RhdHVzICYgRU1JX1NUQVRFKSA+PiBFTUlfU1RBVFVTX0JJVDsKQEAgLTUwNiw3ICs1MDYsNyBAQAogCiAJcmMgPSBwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCwgY21kX21hc2spOwogCWRiZygiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwKLQkgICAgX19GVU5DVElPTl9fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01MjcsNyArNTI3LDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCwgY21kX21hc2spOwogCiAJZGJnKCIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAotCSAgICBfX0ZVTkNUSU9OX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKKwkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKIH0KIAogc3RhdGljIHZvaWQgaHBjX3NldF9ncmVlbl9sZWRfb2ZmKHN0cnVjdCBzbG90ICpzbG90KQpAQCAtNTQ1LDcgKzU0NSw3IEBACiAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCwgY21kX21hc2spOwogCWRiZygiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwKLQkgICAgX19GVU5DVElPTl9fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwY19zZXRfZ3JlZW5fbGVkX2JsaW5rKHN0cnVjdCBzbG90ICpzbG90KQpAQCAtNTY0LDcgKzU2NCw3IEBACiAJcGNpZV93cml0ZV9jbWQoc2xvdCwgc2xvdF9jbWQsIGNtZF9tYXNrKTsKIAogCWRiZygiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwKLQkgICAgX19GVU5DVElPTl9fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CisJICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDVFJMLCBzbG90X2NtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwY19yZWxlYXNlX2N0bHIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCkBAIC01OTAsMTIgKzU5MCwxMiBAQAogCXUxNiBzbG90X3N0YXR1czsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXM6IHNsb3QtPmhwX3Nsb3QgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdC0+aHBfc2xvdCk7CisJZGJnKCIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOwogCiAJLyogQ2xlYXIgc3RpY2t5IHBvd2VyLWZhdWx0IGJpdCBmcm9tIHByZXZpb3VzIHBvd2VyIGZhaWx1cmVzICovCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCXNsb3Rfc3RhdHVzICY9IFBXUl9GQVVMVF9ERVRFQ1RFRDsKQEAgLTYwMyw3ICs2MDMsNyBAQAogCQlyZXR2YWwgPSBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RTVEFUVVMsIHNsb3Rfc3RhdHVzKTsKIAkJaWYgKHJldHZhbCkgewogCQkJZXJyKCIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsCi0JCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAJfQpAQCAtNjI3LDExICs2MjcsMTEgQEAKIAlyZXR2YWwgPSBwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCwgY21kX21hc2spOwogCiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBXcml0ZSAleCBjb21tYW5kIGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jbWQpOworCQllcnIoIiVzOiBXcml0ZSAleCBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fLCBzbG90X2NtZCk7CiAJCXJldHVybiAtMTsKIAl9CiAJZGJnKCIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAotCSAgICBfX0ZVTkNUSU9OX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKKwkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC02NzcsNyArNjc3LDcgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgY2hhbmdlZDsKIAotCWRiZygiJXM6IHNsb3QtPmhwX3Nsb3QgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdC0+aHBfc2xvdCk7CisJZGJnKCIlczogc2xvdC0+aHBfc2xvdCAleFxuIiwgX19mdW5jX18sIHNsb3QtPmhwX3Nsb3QpOwogCiAJLyoKIAkgKiBTZXQgQmFkIERMTFAgTWFzayBiaXQgaW4gQ29ycmVjdGFibGUgRXJyb3IgTWFzawpAQCAtNzEwLDExICs3MTAsMTIgQEAKIAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKHNsb3QsIHNsb3RfY21kLCBjbWRfbWFzayk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtMTsKKwkJZXJyKCIlczogV3JpdGUgY29tbWFuZCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC0xOworCQlnb3RvIG91dDsKIAl9CiAJZGJnKCIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLAotCSAgICBfX0ZVTkNUSU9OX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKKwkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY21kKTsKIAogCS8qCiAJICogQWZ0ZXIgdHVybmluZyBwb3dlciBvZmYsIHdlIG11c3Qgd2FpdCBmb3IgYXQgbGVhc3QgMSBzZWNvbmQKQEAgLTcyMiw3ICs3MjMsNyBAQAogCSAqIHJlbW92ZWQgZnJvbSB0aGUgc2xvdC9hZGFwdGVyLgogCSAqLwogCW1zbGVlcCgxMDAwKTsKLQorIG91dDoKIAlpZiAoY2hhbmdlZCkKIAkJcGNpZV91bm1hc2tfYmFkX2RsbHAoY3RybCk7CiAKQEAgLTc0MCw3ICs3NDEsNyBAQAogCiAJcmMgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVFNUQVRVUywgJnNsb3Rfc3RhdHVzKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCkBAIC03NTMsMjYgKzc1NCwyNiBAQAogCWlmICggIWludHJfbG9jICkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JZGJnKCIlczogaW50cl9sb2MgJXhcbiIsIF9fRlVOQ1RJT05fXywgaW50cl9sb2MpOworCWRiZygiJXM6IGludHJfbG9jICV4XG4iLCBfX2Z1bmNfXywgaW50cl9sb2MpOwogCS8qIE1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZSAqLwogCWlmICghcGNpZWhwX3BvbGxfbW9kZSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RybC0+bG9jaywgZmxhZ3MpOwogCQlyYyA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UQ1RSTCwgJnRlbXBfd29yZCk7CiAJCWlmIChyYykgewogCQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVF9DVFJMIHJlZ2lzdGVyXG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgX19mdW5jX18pOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIElSUV9OT05FOwogCQl9CiAKIAkJZGJnKCIlczogcGNpZWhwX3JlYWR3KFNMT1RDVFJMKSB3aXRoIHZhbHVlICV4XG4iLAotCQkgICAgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOworCQkgICAgX19mdW5jX18sIHRlbXBfd29yZCk7CiAJCXRlbXBfd29yZCA9ICh0ZW1wX3dvcmQgJiB+SFBfSU5UUl9FTkFCTEUgJgogCQkJICAgICB+Q01EX0NNUExfSU5UUl9FTkFCTEUpIHwgMHgwMDsKIAkJcmMgPSBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RDVFJMLCB0ZW1wX3dvcmQpOwogCQlpZiAocmMpIHsKIAkJCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UQ1RSTCByZWdpc3RlclxuIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgIF9fZnVuY19fKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmwtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQpAQCAtNzgxLDE4ICs3ODIsMTggQEAKIAkJcmMgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVFNUQVRVUywgJnNsb3Rfc3RhdHVzKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UX1NUQVRVUyByZWdpc3RlclxuIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCQlkYmcoIiVzOiBwY2llaHBfcmVhZHcoU0xPVFNUQVRVUykgd2l0aCB2YWx1ZSAleFxuIiwKLQkJICAgIF9fRlVOQ1RJT05fXywgc2xvdF9zdGF0dXMpOworCQkgICAgX19mdW5jX18sIHNsb3Rfc3RhdHVzKTsKIAogCQkvKiBDbGVhciBjb21tYW5kIGNvbXBsZXRlIGludGVycnVwdCBjYXVzZWQgYnkgdGhpcyB3cml0ZSAqLwogCQl0ZW1wX3dvcmQgPSAweDFmOwogCQlyYyA9IHBjaWVocF93cml0ZXcoY3RybCwgU0xPVFNUQVRVUywgdGVtcF93b3JkKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVFNUQVRVUyByZWdpc3RlclxuIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCX0KQEAgLTgyMSw3ICs4MjIsNyBAQAogCXRlbXBfd29yZCA9IDB4MUY7CiAJcmMgPSBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RTVEFUVVMsIHRlbXBfd29yZCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCS8qIFVubWFzayBIb3QtcGx1ZyBJbnRlcnJ1cHQgRW5hYmxlICovCkBAIC04MzAsMTggKzgzMSwxOCBAQAogCQlyYyA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UQ1RSTCwgJnRlbXBfd29yZCk7CiAJCWlmIChyYykgewogCQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsCi0JCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICBfX2Z1bmNfXyk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHJsLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gSVJRX05PTkU7CiAJCX0KIAotCQlkYmcoIiVzOiBVbm1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlczogVW5tYXNrIEhvdC1wbHVnIEludGVycnVwdCBFbmFibGVcbiIsIF9fZnVuY19fKTsKIAkJdGVtcF93b3JkID0gKHRlbXBfd29yZCAmIH5IUF9JTlRSX0VOQUJMRSkgfCBIUF9JTlRSX0VOQUJMRTsKIAogCQlyYyA9IHBjaWVocF93cml0ZXcoY3RybCwgU0xPVENUUkwsIHRlbXBfd29yZCk7CiAJCWlmIChyYykgewogCQkJZXJyKCIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgX19mdW5jX18pOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIElSUV9OT05FOwogCQl9CkBAIC04NTAsNyArODUxLDcgQEAKIAkJcmMgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVFNUQVRVUywgJnNsb3Rfc3RhdHVzKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UX1NUQVRVUyByZWdpc3RlclxuIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCkBAIC04NTksMTEgKzg2MCwxMSBAQAogCQlyYyA9IHBjaWVocF93cml0ZXcoY3RybCwgU0xPVFNUQVRVUywgdGVtcF93b3JkKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVFNUQVRVUyBmYWlsZWRcbiIsCi0JCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gSVJRX05PTkU7CiAJCX0KIAkJZGJnKCIlczogcGNpZWhwX3dyaXRldyhTTE9UU1RBVFVTKSB3aXRoIHZhbHVlICV4XG4iLAotCQkgICAgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOworCQkgICAgX19mdW5jX18sIHRlbXBfd29yZCk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtODc4LDcgKzg3OSw3IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZGwoY3RybCwgTE5LQ0FQLCAmbG5rX2NhcCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBMTktDQVAgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtOTA3LDcgKzkwOCw3IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZGwoY3RybCwgTE5LQ0FQLCAmbG5rX2NhcCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBMTktDQVAgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtOTU2LDcgKzk1Nyw3IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgTE5LU1RBVFVTLCAmbG5rX3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIExOS1NUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtOTg1LDcgKzk4Niw3IEBACiAKIAlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgTE5LU1RBVFVTLCAmbG5rX3N0YXR1cyk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIExOS1NUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtMTEyOSwzOCArMTEzMCwzOCBAQAogCiAJcmMgPSBwY2llaHBfcmVhZGwoY3RybCwgU0xPVENBUCwgJnNsb3RfY2FwKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENBUCByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogTWFzayBIb3QtcGx1ZyBJbnRlcnJ1cHQgRW5hYmxlICovCiAJcmMgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVENUUkwsICZ0ZW1wX3dvcmQpOwogCWlmIChyYykgewotCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWRiZygiJXM6IFNMT1RDVFJMICV4IHZhbHVlIHJlYWQgJXhcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgdGVtcF93b3JkKTsKKwkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHRlbXBfd29yZCk7CiAJdGVtcF93b3JkID0gKHRlbXBfd29yZCAmIH5IUF9JTlRSX0VOQUJMRSAmIH5DTURfQ01QTF9JTlRSX0VOQUJMRSkgfAogCQkweDAwOwogCiAJcmMgPSBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RDVFJMLCB0ZW1wX3dvcmQpOwogCWlmIChyYykgewotCQllcnIoIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmMgPSBwY2llaHBfcmVhZHcoY3RybCwgU0xPVFNUQVRVUywgJnNsb3Rfc3RhdHVzKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJdGVtcF93b3JkID0gMHgxRjsgLyogQ2xlYXIgYWxsIGV2ZW50cyAqLwogCXJjID0gcGNpZWhwX3dyaXRldyhjdHJsLCBTTE9UU1RBVFVTLCB0ZW1wX3dvcmQpOwogCWlmIChyYykgewotCQllcnIoIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVFNUQVRVUyByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTExNzYsNyArMTE3Nyw3IEBACiAKIAlyYyA9IHBjaWVocF9yZWFkdyhjdHJsLCBTTE9UQ1RSTCwgJnRlbXBfd29yZCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19mdW5jX18pOwogCQlnb3RvIGFib3J0OwogCX0KIApAQCAtMTE4NCw3ICsxMTg1LDcgQEAKIAogCXJjID0gcGNpZWhwX3JlYWRsKGN0cmwsIFNMT1RDQVAsICZzbG90X2NhcCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDQVAgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDQVAgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBhYm9ydDsKIAl9CiAKQEAgLTEyMTEsMTkgKzEyMTIsMTkgQEAKIAkgKi8KIAlyYyA9IHBjaWVocF93cml0ZXcoY3RybCwgU0xPVENUUkwsIHRlbXBfd29yZCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UQ1RSTCByZWdpc3RlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCXJjID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBhYm9ydF9kaXNhYmxlX2ludHI7CiAJfQogCiAJdGVtcF93b3JkID0gIDB4MUY7IC8qIENsZWFyIGFsbCBldmVudHMgKi8KIAlyYyA9IHBjaWVocF93cml0ZXcoY3RybCwgU0xPVFNUQVRVUywgdGVtcF93b3JkKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2Fubm90IHdyaXRlIHRvIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCB3cml0ZSB0byBTTE9UU1RBVFVTIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gYWJvcnRfZGlzYWJsZV9pbnRyOwogCX0KIApAQCAtMTI0Niw3ICsxMjQ3LDcgQEAKIAkJcmMgPSBwY2llaHBfd3JpdGV3KGN0cmwsIFNMT1RDVFJMLCB0ZW1wX3dvcmQpOwogCX0KIAlpZiAocmMpCi0JCWVycigiJXMgOiBkaXNhYmxpbmcgaW50ZXJydXB0cyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXMgOiBkaXNhYmxpbmcgaW50ZXJydXB0cyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIGFib3J0OgogCXJldHVybiAtMTsKIH0KQEAgLTEyNjQsNjIgKzEyNjUsNjIgQEAKIAljdHJsLT5wY2lfZGV2ID0gcGRldjsJLyogc2F2ZSBwY2lfZGV2IGluIGNvbnRleHQgKi8KIAogCWRiZygiJXM6IGhvdHBsdWcgY29udHJvbGxlciB2ZW5kb3IgaWQgMHgleCBkZXZpY2UgaWQgMHgleFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOworCQkJX19mdW5jX18sIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlKTsKIAogCWNhcF9iYXNlID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CiAJaWYgKGNhcF9iYXNlID09IDApIHsKLQkJZGJnKCIlczogQ2FuJ3QgZmluZCBQQ0lfQ0FQX0lEX0VYUCAoMHgxMClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZygiJXM6IENhbid0IGZpbmQgUENJX0NBUF9JRF9FWFAgKDB4MTApXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCiAJY3RybC0+Y2FwX2Jhc2UgPSBjYXBfYmFzZTsKIAotCWRiZygiJXM6IHBjaWVfY2FwX2Jhc2UgJXhcbiIsIF9fRlVOQ1RJT05fXywgY2FwX2Jhc2UpOworCWRiZygiJXM6IHBjaWVfY2FwX2Jhc2UgJXhcbiIsIF9fZnVuY19fLCBjYXBfYmFzZSk7CiAKIAlyYyA9IHBjaWVocF9yZWFkdyhjdHJsLCBDQVBSRUcsICZjYXBfcmVnKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgQ0FQUkVHIHJlZ2lzdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW5ub3QgcmVhZCBDQVBSRUcgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBhYm9ydDsKIAl9CiAJZGJnKCIlczogQ0FQUkVHIG9mZnNldCAleCBjYXBfcmVnICV4XG4iLAotCSAgICBfX0ZVTkNUSU9OX18sIGN0cmwtPmNhcF9iYXNlICsgQ0FQUkVHLCBjYXBfcmVnKTsKKwkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgQ0FQUkVHLCBjYXBfcmVnKTsKIAogCWlmICgoKGNhcF9yZWcgJiBTTE9UX0lNUEwpID09IDApIHx8CiAJICAgICgoKGNhcF9yZWcgJiBERVZfUE9SVF9UWVBFKSAhPSAweDAwNDApCiAJCSYmICgoY2FwX3JlZyAmIERFVl9QT1JUX1RZUEUpICE9IDB4MDA2MCkpKSB7CiAJCWRiZygiJXMgOiBUaGlzIGlzIG5vdCBhIHJvb3QgcG9ydCBvciB0aGUgcG9ydCBpcyBub3QgIgotCQkgICAgImNvbm5lY3RlZCB0byBhIHNsb3RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCSAgICAiY29ubmVjdGVkIHRvIGEgc2xvdFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGFib3J0OwogCX0KIAogCXJjID0gcGNpZWhwX3JlYWRsKGN0cmwsIFNMT1RDQVAsICZzbG90X2NhcCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDQVAgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDQVAgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBhYm9ydDsKIAl9CiAJZGJnKCIlczogU0xPVENBUCBvZmZzZXQgJXggc2xvdF9jYXAgJXhcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ0FQLCBzbG90X2NhcCk7CisJICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RDQVAsIHNsb3RfY2FwKTsKIAogCWlmICghKHNsb3RfY2FwICYgSFBfQ0FQKSkgewotCQlkYmcoIiVzIDogVGhpcyBzbG90IGlzIG5vdCBob3QtcGx1ZyBjYXBhYmxlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkYmcoIiVzIDogVGhpcyBzbG90IGlzIG5vdCBob3QtcGx1ZyBjYXBhYmxlXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCS8qIEZvciBkZWJ1Z2dpbmcgcHVycG9zZSAqLwogCXJjID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RTVEFUVVMsICZzbG90X3N0YXR1cyk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RTVEFUVVMgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBhYm9ydDsKIAl9CiAJZGJnKCIlczogU0xPVFNUQVRVUyBvZmZzZXQgJXggc2xvdF9zdGF0dXMgJXhcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UU1RBVFVTLCBzbG90X3N0YXR1cyk7CisJICAgIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFNMT1RTVEFUVVMsIHNsb3Rfc3RhdHVzKTsKIAogCXJjID0gcGNpZWhwX3JlYWR3KGN0cmwsIFNMT1RDVFJMLCAmc2xvdF9jdHJsKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2Fubm90IHJlYWQgU0xPVENUUkwgcmVnaXN0ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IENhbm5vdCByZWFkIFNMT1RDVFJMIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCWRiZygiJXM6IFNMT1RDVFJMIG9mZnNldCAleCBzbG90X2N0cmwgJXhcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgY3RybC0+Y2FwX2Jhc2UgKyBTTE9UQ1RSTCwgc2xvdF9jdHJsKTsKKwkgICAgX19mdW5jX18sIGN0cmwtPmNhcF9iYXNlICsgU0xPVENUUkwsIHNsb3RfY3RybCk7CiAKIAlmb3IgKHJjID0gMDsgcmMgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IHJjKyspCiAJCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIHJjKSA+IDApCkBAIC0xMzU3LDcgKzEzNTgsNyBAQAogCQlyYyA9IHJlcXVlc3RfaXJxKGN0cmwtPnBjaV9kZXYtPmlycSwgcGNpZV9pc3IsIElSUUZfU0hBUkVELAogCQkJCSBNWV9OQU1FLCAodm9pZCAqKWN0cmwpOwogCQlkYmcoIiVzOiByZXF1ZXN0X2lycSAlZCBmb3IgaHBjJWQgKHJldHVybnMgJWQpXG4iLAotCQkgICAgX19GVU5DVElPTl9fLCBjdHJsLT5wY2lfZGV2LT5pcnEsCisJCSAgICBfX2Z1bmNfXywgY3RybC0+cGNpX2Rldi0+aXJxLAogCQkgICAgYXRvbWljX3JlYWQoJnBjaWVocF9udW1fY29udHJvbGxlcnMpLCByYyk7CiAJCWlmIChyYykgewogCQkJZXJyKCJDYW4ndCBnZXQgaXJxICVkIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwppbmRleCBkZDUwNzEzLi42MDQwZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwpAQCAtNDAsNyArNDAsNyBAQAogCiAJaWYgKGhwcC0+cmV2aXNpb24gPiAxKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXYuJWQgdHlwZTAgcmVjb3JkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGhwcC0+cmV2aXNpb24pOworCQkgICAgICAgX19mdW5jX18sIGhwcC0+cmV2aXNpb24pOwogCQlyZXR1cm47CiAJfQogCkBAIC04Miw3ICs4Miw3IEBACiAKIAlpZiAoaHBwLT5yZXZpc2lvbiA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJldi4lZCB0eXBlMiByZWNvcmQgbm90IHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgaHBwLT5yZXZpc2lvbik7CisJCSAgICAgICBfX2Z1bmNfXywgaHBwLT5yZXZpc2lvbik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiAJaWYgKHBjaWVocF9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoZGV2LCAmaHBwKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IGdldCBob3RwbHVnIHBhcmFtZXRlcnNcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjcsNyArMTY3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcGNpZWhwX2FkZF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgX19yZWYgcGNpZWhwX2FkZF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gZGV2LT5idXM7CiAJaW50IHBhc3MsIGJ1c25yLCBzdGFydCA9IHBhcmVudC0+c2Vjb25kYXJ5OwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IHBfc2xvdC0+Y3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAJdTE2IGNvbW1hbmQ7CiAKLQlkYmcoIiVzOiBidXMvZGV2ID0gJXgvJXhcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5idXMsCisJZGJnKCIlczogYnVzL2RldiA9ICV4LyV4XG4iLCBfX2Z1bmNfXywgcF9zbG90LT5idXMsCiAJCQkJcF9zbG90LT5kZXZpY2UpOwogCXJldCA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJnByZXNlbmNlKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jCmluZGV4IDUwYmNkM2YuLmUzZGQ2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWhwX3NrZWxldG9uLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCS8qCiAJICogRmlsbCBpbiBjb2RlIGhlcmUgdG8gZW5hYmxlIHRoZSBzcGVjaWZpZWQgc2xvdApAQCAtMTEyLDcgKzExMiw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkvKgogCSAqIEZpbGwgaW4gY29kZSBoZXJlIHRvIGRpc2FibGUgdGhlIHNwZWNpZmllZCBzbG90CkBAIC0xMjYsNyArMTI2LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJCWNhc2UgMDoKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwogCWludCByZXR2YWwgPSAwOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJc3dpdGNoICh2YWx1ZSkgewogCQljYXNlIDA6CkBAIC0xNzAsNyArMTcwLDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCS8qCiAJICogRmlsbCBpbiBsb2dpYyB0byBnZXQgdGhlIGN1cnJlbnQgcG93ZXIgc3RhdHVzIG9mIHRoZSBzcGVjaWZpYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkvKgogCSAqIEZpbGwgaW4gbG9naWMgdG8gZ2V0IHRoZSBjdXJyZW50IGF0dGVudGlvbiBzdGF0dXMgb2YgdGhlIHNwZWNpZmljCkBAIC0yMDAsNyArMjAwLDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCS8qCiAJICogRmlsbCBpbiBsb2dpYyB0byBnZXQgdGhlIGN1cnJlbnQgbGF0Y2ggc3RhdHVzIG9mIHRoZSBzcGVjaWZpYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAkvKgogCSAqIEZpbGwgaW4gbG9naWMgdG8gZ2V0IHRoZSBjdXJyZW50IGFkYXB0ZXIgc3RhdHVzIG9mIHRoZSBzcGVjaWZpYwpAQCAtMjI5LDcgKzIyOSw3IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKTsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QpOwogCWtmcmVlKHNsb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFkbHBhcl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX2NvcmUuYwppbmRleCAxOTE5NTRiLi45YzJhMjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX2NvcmUuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJZGV2ID0gb2ZfY3JlYXRlX3BjaV9kZXYoZG4sIHBoYi0+YnVzLCBwZG4tPmRldmZuKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIHBjaSBkZXYgZm9yICVzXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgZG4tPmZ1bGxfbmFtZSk7CisJCQkJX19mdW5jX18sIGRuLT5mdWxsX25hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xODMsMjEgKzE4MywyMSBAQAogCWRldiA9IGRscGFyX2ZpbmRfbmV3X2RldihwaGItPmJ1cywgZG4pOwogCiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGFkZCBidXMgJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGFkZCBidXMgJXNcbiIsIF9fZnVuY19fLAogCQkJZHJjX25hbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoZGV2LT5oZHJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuZXhwZWN0ZWQgaGVhZGVyIHR5cGUgJWQsIHVuYWJsZSB0byBhZGQgYnVzICVzXG4iLAotCQkJX19GVU5DVElPTl9fLCBkZXYtPmhkcl90eXBlLCBkcmNfbmFtZSk7CisJCQlfX2Z1bmNfXywgZGV2LT5oZHJfdHlwZSwgZHJjX25hbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBBZGQgaG90cGx1ZyBzbG90ICovCiAJaWYgKHJwYXBocF9hZGRfc2xvdChkbikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGFkZCBob3RwbHVnIHNsb3QgJXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGRyY19uYW1lKTsKKwkJCV9fZnVuY19fLCBkcmNfbmFtZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTIzOSw3ICsyMzksNyBAQAogCQlpZiAocnBhcGhwX2RlcmVnaXN0ZXJfc2xvdChzbG90KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIiVzOiB1bmFibGUgdG8gcmVtb3ZlIGhvdHBsdWcgc2xvdCAlc1xuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGRyY19uYW1lKTsKKwkJCQlfX2Z1bmNfXywgZHJjX25hbWUpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CkBAIC0yNzAsNyArMjcwLDcgQEAKIAogCWlmIChycGFwaHBfYWRkX3Nsb3QoZG4pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBhZGQgaG90cGx1ZyBzbG90ICVzXG4iLAotCQkJX19GVU5DVElPTl9fLCBkcmNfbmFtZSk7CisJCQlfX2Z1bmNfXywgZHJjX25hbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yODQsNyArMjg0LDcgQEAKIAlpZiAoIXZpb19yZWdpc3Rlcl9kZXZpY2Vfbm9kZShkbikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXM6IGZhaWxlZCB0byByZWdpc3RlciB2aW8gbm9kZSAlc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgZHJjX25hbWUpOworCQkJX19mdW5jX18sIGRyY19uYW1lKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJCWlmIChycGFwaHBfZGVyZWdpc3Rlcl9zbG90KHNsb3QpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiJXM6IHVuYWJsZSB0byByZW1vdmUgaG90cGx1ZyBzbG90ICVzXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgZHJjX25hbWUpOworCQkJCV9fZnVuY19fLCBkcmNfbmFtZSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0gZWxzZQpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIAlpZiAocGNpYmlvc191bm1hcF9pb19zcGFjZShidXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byB1bm1hcCBidXMgcmFuZ2VcbiIsCi0JCQlfX0ZVTkNUSU9OX18pOworCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCiAJaWYgKCFpc19kbHBhcl9jYXBhYmxlKCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBhcnRpdGlvbiBub3QgRExQQVIgY2FwYWJsZVxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKaW5kZXggNThmMWE5OS4uMWY4NGY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJaWYgKCFpc19waHBfZG4oZG4sICZpbmRleGVzLCAmbmFtZXMsICZ0eXBlcywgJnBvd2VyX2RvbWFpbnMpKQogCQlyZXR1cm4gMDsKIAotCWRiZygiRW50cnkgJXM6IGRuLT5mdWxsX25hbWU9JXNcbiIsIF9fRlVOQ1RJT05fXywgZG4tPmZ1bGxfbmFtZSk7CisJZGJnKCJFbnRyeSAlczogZG4tPmZ1bGxfbmFtZT0lc1xuIiwgX19mdW5jX18sIGRuLT5mdWxsX25hbWUpOwogCiAJLyogcmVnaXN0ZXIgUENJIGRldmljZXMgKi8KIAluYW1lID0gKGNoYXIgKikgJm5hbWVzWzFdOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMTsKIAkJdHlwZSArPSBzdHJsZW4odHlwZSkgKyAxOwogCX0KLQlkYmcoIiVzIC0gRXhpdDogcmNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJZGJnKCIlcyAtIEV4aXQ6IHJjWyVkXVxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAKIAkvKiBYWFggRklYTUU6IHJlcG9ydHMgYSBmYWlsdXJlIG9ubHkgaWYgbGFzdCBlbnRyeSBpbiBsb29wIGZhaWxlZCAqLwogCXJldHVybiByZXR2YWw7CkBAIC00MDQsNyArNDA0LDcgQEAKIAl9IGVsc2UgaWYgKHN0YXRlID09IEVNUFRZKSB7CiAJCXNsb3QtPnN0YXRlID0gRU1QVFk7CiAJfSBlbHNlIHsKLQkJZXJyKCIlczogc2xvdFslc10gaXMgaW4gaW52YWxpZCBzdGF0ZVxuIiwgX19GVU5DVElPTl9fLCBzbG90LT5uYW1lKTsKKwkJZXJyKCIlczogc2xvdFslc10gaXMgaW4gaW52YWxpZCBzdGF0ZVxuIiwgX19mdW5jX18sIHNsb3QtPm5hbWUpOwogCQlzbG90LT5zdGF0ZSA9IE5PVF9WQUxJRDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYwppbmRleCA2NTcxZTliLi41YWNmZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYwpAQCAtNDIsNyArNDIsNyBAQAogCWlmIChyYyA8IDApIHsKIAkJaWYgKHJjID09IC1FRkFVTFQgfHwgcmMgPT0gLUVFWElTVCkgewogCQkJZGJnKCIlczogc2xvdCBtdXN0IGJlIHBvd2VyIHVwIHRvIGdldCBzZW5zb3Itc3RhdGVcbiIsCi0JCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICBfX2Z1bmNfXyk7CiAKIAkJCS8qIHNvbWUgc2xvdHMgaGF2ZSB0byBiZSBwb3dlcmVkIHVwIAogCQkJICogYmVmb3JlIGdldC1zZW5zb3Igd2lsbCBzdWNjZWVkLgpAQCAtNTEsMTUgKzUxLDE1IEBACiAJCQkJCQkgICZzZXRsZXZlbCk7CiAJCQlpZiAocmMgPCAwKSB7CiAJCQkJZGJnKCIlczogcG93ZXIgb24gc2xvdFslc10gZmFpbGVkIHJjPSVkLlxuIiwKLQkJCQkgICAgX19GVU5DVElPTl9fLCBzbG90LT5uYW1lLCByYyk7CisJCQkJICAgIF9fZnVuY19fLCBzbG90LT5uYW1lLCByYyk7CiAJCQl9IGVsc2UgewogCQkJCXJjID0gcnRhc19nZXRfc2Vuc29yKERSX0VOVElUWV9TRU5TRSwKIAkJCQkJCSAgICAgc2xvdC0+aW5kZXgsIHN0YXRlKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChyYyA9PSAtRU5PREVWKQotCQkJaW5mbygiJXM6IHNsb3QgaXMgdW51c2FibGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlpbmZvKCIlczogc2xvdCBpcyB1bnVzYWJsZVxuIiwgX19mdW5jX18pOwogCQllbHNlCi0JCQllcnIoIiVzIGZhaWxlZCB0byBnZXQgc2Vuc29yIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZXJyKCIlcyBmYWlsZWQgdG8gZ2V0IHNlbnNvciBzdGF0ZVxuIiwgX19mdW5jX18pOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC05NSw3ICs5NSw3IEBACiAKIAlidXMgPSBwY2liaW9zX2ZpbmRfcGNpX2J1cyhzbG90LT5kbik7CiAJaWYgKCFidXMpIHsKLQkJZXJyKCIlczogbm8gcGNpX2J1cyBmb3IgZG4gJXNcbiIsIF9fRlVOQ1RJT05fXywgc2xvdC0+ZG4tPmZ1bGxfbmFtZSk7CisJCWVycigiJXM6IG5vIHBjaV9idXMgZm9yIGRuICVzXG4iLCBfX2Z1bmNfXywgc2xvdC0+ZG4tPmZ1bGxfbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTExLDcgKzExMSw3IEBACiAJCS8qIG5vbi1lbXB0eSBzbG90IGhhcyB0byBoYXZlIGNoaWxkICovCiAJCWlmICghc2xvdC0+ZG4tPmNoaWxkKSB7CiAJCQllcnIoIiVzOiBzbG90WyVzXSdzIGRldmljZV9ub2RlIGRvZXNuJ3QgaGF2ZSBjaGlsZCBmb3IgYWRhcHRlclxuIiwKLQkJCSAgICBfX0ZVTkNUSU9OX18sIHNsb3QtPm5hbWUpOworCQkJICAgIF9fZnVuY19fLCBzbG90LT5uYW1lKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAJCWlmIChkZWJ1ZykgewogCQkJc3RydWN0IHBjaV9kZXYgKmRldjsKLQkJCWRiZygiJXM6IHBjaV9kZXZzIG9mIHNsb3RbJXNdXG4iLCBfX0ZVTkNUSU9OX18sIHNsb3QtPmRuLT5mdWxsX25hbWUpOworCQkJZGJnKCIlczogcGNpX2RldnMgb2Ygc2xvdFslc11cbiIsIF9fZnVuY19fLCBzbG90LT5kbi0+ZnVsbF9uYW1lKTsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkgKGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCiAJCQkJZGJnKCJcdCVzXG4iLCBwY2lfbmFtZShkZXYpKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jCmluZGV4IDhhZDNkZWIuLjU2MTk3YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnBocF9zbG90ID0gc2xvdC0+aG90cGx1Z19zbG90OwogCiAJIGRiZygiJXMgLSBFbnRyeTogZGVyZWdpc3RlcmluZyBzbG90PSVzXG4iLAotCQlfX0ZVTkNUSU9OX18sIHNsb3QtPm5hbWUpOworCQlfX2Z1bmNfXywgc2xvdC0+bmFtZSk7CiAKIAlsaXN0X2RlbCgmc2xvdC0+cnBhcGhwX3Nsb3RfbGlzdCk7CiAJCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlpZiAocmV0dmFsKQogCQllcnIoIlByb2JsZW0gdW5yZWdpc3RlcmluZyBhIHNsb3QgJXNcbiIsIHNsb3QtPm5hbWUpOwogCi0JZGJnKCIlcyAtIEV4aXQ6IHJjWyVkXVxuIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCWRiZygiJXMgLSBFeGl0OiByY1slZF1cbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfZGVyZWdpc3Rlcl9zbG90KTsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIHJlZ2lzdGVyaW5nIHNsb3Q6cGF0aFslc10gaW5kZXhbJXhdLCBuYW1lWyVzXSBwZG9tYWluWyV4XSB0eXBlWyVkXVxuIiwgCi0JCV9fRlVOQ1RJT05fXywgc2xvdC0+ZG4tPmZ1bGxfbmFtZSwgc2xvdC0+aW5kZXgsIHNsb3QtPm5hbWUsIAorCQlfX2Z1bmNfXywgc2xvdC0+ZG4tPmZ1bGxfbmFtZSwgc2xvdC0+aW5kZXgsIHNsb3QtPm5hbWUsCiAJCXNsb3QtPnBvd2VyX2RvbWFpbiwgc2xvdC0+dHlwZSk7CiAKIAkvKiBzaG91bGQgbm90IHRyeSB0byByZWdpc3RlciB0aGUgc2FtZSBzbG90IHR3aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMKaW5kZXggZWYwN2MzNi4uMmZlMzdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zZ2lfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCXJldCA9IGFjcGlfbG9hZF90YWJsZSgoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopc3NkdCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUocmV0KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYWNwaV9sb2FkX3RhYmxlIGZhaWxlZCAoMHgleClcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCByZXQpOworCQkJICAgICAgIF9fZnVuY19fLCByZXQpOwogCQkJLyogdHJ5IHRvIGNvbnRpbnVlIG9uICovCiAJCX0KIAl9CkBAIC00NTksNyArNDU5LDcgQEAKIAkJCQlpZiAoQUNQSV9GQUlMVVJFKHJldCkpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYWNwaV9idXNfYWRkICIKIAkJCQkJICAgICAgICJmYWlsZWQgKDB4JXgpIGZvciBzbG90ICVkICIKLQkJCQkJICAgICAgICJmdW5jICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJCSAgICAgICAiZnVuYyAlZFxuIiwgX19mdW5jX18sCiAJCQkJCSAgICAgICByZXQsIChpbnQpKGFkcj4+MTYpLAogCQkJCQkgICAgICAgKGludCkoYWRyJjB4ZmZmZikpOwogCQkJCQkvKiB0cnkgdG8gY29udGludWUgb24gKi8KQEAgLTU3MCw3ICs1NzAsNyBAQAogCQlpZiAoQUNQSV9GQUlMVVJFKHJldCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFjcGlfdW5sb2FkX3RhYmxlX2lkICIKIAkJCSAgICAgICAiZmFpbGVkICgweCV4KSBmb3IgaWQgJWRcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCByZXQsIHNzZHRfaWQpOworCQkJICAgICAgIF9fZnVuY19fLCByZXQsIHNzZHRfaWQpOwogCQkJLyogdHJ5IHRvIGNvbnRpbnVlIG9uICovCiAJCX0KIAl9CkBAIC02ODksNyArNjg5LDcgQEAKIAogCWlmICghc25fcHJvbV9mZWF0dXJlX2F2YWlsYWJsZShQUkZfSE9UUExVR19TVVBQT1JUKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQUk9NIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBob3RwbHVnLlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAppbmRleCAzN2VkMDg4Li5mNjZlOGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKQEAgLTIzNCw3ICsyMzQsNyBAQAogCQkJcmV0dXJuIHNsb3Q7CiAJfQogCi0JZXJyKCIlczogc2xvdCAoZGV2aWNlPTB4JXgpIG5vdCBmb3VuZFxuIiwgX19GVU5DVElPTl9fLCBkZXZpY2UpOworCWVycigiJXM6IHNsb3QgKGRldmljZT0weCV4KSBub3QgZm91bmRcbiIsIF9fZnVuY19fLCBkZXZpY2UpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocF9zbG90LT5jdHJsLT5wY2lfZGV2LCBQQ0lYX01JU0NfQlJJREdFX0VSUk9SU19PRkZTRVQsICZwY2l4X2JyaWRnZV9lcnJvcnNfcmVnKTsKIAlwZXJyX3NldCA9IHBjaXhfYnJpZGdlX2Vycm9yc19yZWcgJiBQRVJSX09CU0VSVkVEX01BU0s7CiAJaWYgKHBlcnJfc2V0KSB7Ci0JCWRiZyAoIiVzICBXMUM6IEJyaWRnZV9FcnJvcnNbIFBFUlJfT0JTRVJWRUQgPSAlMDhYXVxuIixfX0ZVTkNUSU9OX18gLCBwZXJyX3NldCk7CisJCWRiZyAoIiVzICBXMUM6IEJyaWRnZV9FcnJvcnNbIFBFUlJfT0JTRVJWRUQgPSAlMDhYXVxuIixfX2Z1bmNfXyAsIHBlcnJfc2V0KTsKIAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBfc2xvdC0+Y3RybC0+cGNpX2RldiwgUENJWF9NSVNDX0JSSURHRV9FUlJPUlNfT0ZGU0VULCBwZXJyX3NldCk7CiAJfQpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBfc2xvdC0+Y3RybC0+cGNpX2RldiwgUENJWF9NRU1fQkFTRV9MSU1JVF9PRkZTRVQsICZwY2l4X21lbV9iYXNlX3JlZyk7CiAJcnNlX3NldCA9IHBjaXhfbWVtX2Jhc2VfcmVnICYgUlNFX01BU0s7CiAJaWYgKHJzZV9zZXQpIHsKLQkJZGJnICgiJXMgIFcxQzogTWVtb3J5X0Jhc2VfTGltaXRbIFJTRSBdXG4iLF9fRlVOQ1RJT05fXyApOworCQlkYmcgKCIlcyAgVzFDOiBNZW1vcnlfQmFzZV9MaW1pdFsgUlNFIF1cbiIsX19mdW5jX18gKTsKIAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBfc2xvdC0+Y3RybC0+cGNpX2RldiwgUENJWF9NRU1fQkFTRV9MSU1JVF9PRkZTRVQsIHJzZV9zZXQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYwppbmRleCA4MGRlYzk3Li40MzgxNmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCkBAIC05MSw3ICs5MSw3IEBACiB7CiAJc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8pOwogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdCk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlob3RwbHVnX3Nsb3QtPmluZm8tPmF0dGVudGlvbl9zdGF0dXMgPSBzdGF0dXM7CiAJc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMoc2xvdCwgc3RhdHVzKTsKQEAgLTIwNyw3ICsyMDcsNyBAQAogewogCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHVybiBzaHBjaHBfc3lzZnNfZW5hYmxlX3Nsb3Qoc2xvdCk7CiB9CkBAIC0yMTYsNyArMjE2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAKLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CisJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlyZXR1cm4gc2hwY2hwX3N5c2ZzX2Rpc2FibGVfc2xvdChzbG90KTsKIH0KQEAgLTIyNiw3ICsyMjYsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9hdHRlbnRpb25fc3RhdHVzKHNsb3QsIHZhbHVlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTI1NCw3ICsyNTQsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0yODIsNyArMjgyLDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHNsb3QtPmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJKnZhbHVlID0gKHBjaV9kb21haW5fbnIoYnVzKSA8PCAxNikgfCAoc2xvdC0+YnVzIDw8IDgpIHwgc2xvdC0+ZGV2aWNlOwogCkBAIC0yOTQsNyArMjk0LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAJaW50IHJldHZhbDsKIAotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKKwlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9tYXhfYnVzX3NwZWVkKHNsb3QsIHZhbHVlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTMwOCw3ICszMDgsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAlpbnQgcmV0dmFsOwogCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOworCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2N1cl9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzM4LDcgKzMzOCw3IEBACiAKIAljdHJsID0ga3phbGxvYyhzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0cmwpIHsKLQkJZXJyKCIlcyA6IG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXMgOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyX291dF9ub25lOwogCX0KIAlJTklUX0xJU1RfSEVBRCgmY3RybC0+c2xvdF9saXN0KTsKQEAgLTQwMiw3ICs0MDIsNyBAQAogCWludCByZXR2YWwgPSAwOwogCiAJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2hwY19kcml2ZXIpOwotCWRiZygiJXM6IHBjaV9yZWdpc3Rlcl9kcml2ZXIgPSAlZFxuIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCWRiZygiJXM6IHBjaV9yZWdpc3Rlcl9kcml2ZXIgPSAlZFxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAJaW5mbyhEUklWRVJfREVTQyAiIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwppbmRleCBlYjVjYWM2Li5kZmI1MzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCkBAIC05MSw3ICs5MSw3IEBACiAJcF9zbG90ID0gc2hwY2hwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYocF9zbG90LT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JZGJnKCIlczogQ2FyZCBwcmVzZW50ICV4IFBvd2VyIHN0YXR1cyAleFxuIiwgX19GVU5DVElPTl9fLAorCWRiZygiJXM6IENhcmQgcHJlc2VudCAleCBQb3dlciBzdGF0dXMgJXhcbiIsIF9fZnVuY19fLAogCQlwX3Nsb3QtPnByZXNlbmNlX3NhdmUsIHBfc2xvdC0+cHdyX3NhdmUpOwogCiAJaWYgKGdldHN0YXR1cykgewpAQCAtMTkxLDEwICsxOTEsMTAgQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JZGJnKCIlczogY2hhbmdlIHRvIHNwZWVkICVkXG4iLCBfX0ZVTkNUSU9OX18sIHNwZWVkKTsKKwlkYmcoIiVzOiBjaGFuZ2UgdG8gc3BlZWQgJWRcbiIsIF9fZnVuY19fLCBzcGVlZCk7CiAJaWYgKChyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2V0X2J1c19zcGVlZF9tb2RlKHBfc2xvdCwgc3BlZWQpKSkgewogCQllcnIoIiVzOiBJc3N1ZSBvZiBzZXQgYnVzIHNwZWVkIG1vZGUgY29tbWFuZCBmYWlsZWRcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18pOworCQkgICAgX19mdW5jX18pOwogCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAl9CiAJcmV0dXJuIHJjOwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJaWYgKGZsYWcpIHsKIAkJaWYgKGFzcCA8IGJzcCkgewogCQkJZXJyKCIlczogc3BlZWQgb2YgYnVzICV4IGFuZCBhZGFwdGVyICV4IG1pc21hdGNoXG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXywgYnNwLCBhc3ApOworCQkJICAgIF9fZnVuY19fLCBic3AsIGFzcCk7CiAJCQlyYyA9IFdST05HX0JVU19GUkVRVUVOQ1k7CiAJCX0KIAkJcmV0dXJuIHJjOwpAQCAtMjQ3LDEzICsyNDcsMTMgQEAKIAlocF9zbG90ID0gcF9zbG90LT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAKIAlkYmcoIiVzOiBwX3Nsb3QtPmRldmljZSwgc2xvdF9vZmZzZXQsIGhwX3Nsb3QgPSAlZCwgJWQgLCVkXG4iLAotCQkJX19GVU5DVElPTl9fLCBwX3Nsb3QtPmRldmljZSwKKwkJCV9fZnVuY19fLCBwX3Nsb3QtPmRldmljZSwKIAkJCWN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCwgaHBfc2xvdCk7CiAKIAkvKiBQb3dlciBvbiBzbG90IHdpdGhvdXQgY29ubmVjdGluZyB0byBidXMgKi8KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+cG93ZXJfb25fc2xvdChwX3Nsb3QpOwogCWlmIChyYykgewotCQllcnIoIiVzOiBGYWlsZWQgdG8gcG93ZXIgb24gc2xvdFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogRmFpbGVkIHRvIHBvd2VyIG9uIHNsb3RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjYyLDEzICsyNjIsMTMgQEAKIAkJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCiAJCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPnNldF9idXNfc3BlZWRfbW9kZShwX3Nsb3QsIFBDSV9TUEVFRF8zM01IeikpKSB7Ci0JCQllcnIoIiVzOiBJc3N1ZSBvZiBzZXQgYnVzIHNwZWVkIG1vZGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQllcnIoIiVzOiBJc3N1ZSBvZiBzZXQgYnVzIHNwZWVkIG1vZGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCQl9CiAKIAkJLyogdHVybiBvbiBib2FyZCwgYmxpbmsgZ3JlZW4gTEVELCB0dXJuIG9mZiBBbWJlciBMRUQgKi8KIAkJaWYgKChyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2xvdF9lbmFibGUocF9zbG90KSkpIHsKLQkJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRW5hYmxlIGNvbW1hbmQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZXJyKCIlczogSXNzdWUgb2YgU2xvdCBFbmFibGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiByYzsKIAkJfQogCX0KQEAgLTI3NiwxOSArMjc2LDE5IEBACiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3NwZWVkKHBfc2xvdCwgJmFzcCk7CiAJaWYgKHJjKSB7CiAJCWVycigiJXM6IENhbid0IGdldCBhZGFwdGVyIHNwZWVkIG9yIGJ1cyBtb2RlIG1pc21hdGNoXG4iLAotCQkgICAgX19GVU5DVElPTl9fKTsKKwkJICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7CiAJfQogCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9jdXJfYnVzX3NwZWVkKHBfc2xvdCwgJmJzcCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IENhbid0IGdldCBidXMgb3BlcmF0aW9uIHNwZWVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW4ndCBnZXQgYnVzIG9wZXJhdGlvbiBzcGVlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAl9CiAKIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQocF9zbG90LCAmbXNwKTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogQ2FuJ3QgZ2V0IG1heCBidXMgb3BlcmF0aW9uIHNwZWVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBDYW4ndCBnZXQgbWF4IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIsIF9fZnVuY19fKTsKIAkJbXNwID0gYnNwOwogCX0KIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCXNsb3RzX25vdF9lbXB0eSA9IDE7CiAKIAlkYmcoIiVzOiBzbG90c19ub3RfZW1wdHkgJWQsIGFkYXB0ZXJfc3BlZWQgJWQsIGJ1c19zcGVlZCAlZCwgIgotCSAgICAibWF4X2J1c19zcGVlZCAlZFxuIiwgX19GVU5DVElPTl9fLCBzbG90c19ub3RfZW1wdHksIGFzcCwKKwkgICAgIm1heF9idXNfc3BlZWQgJWRcbiIsIF9fZnVuY19fLCBzbG90c19ub3RfZW1wdHksIGFzcCwKIAkgICAgYnNwLCBtc3ApOwogCiAJcmMgPSBmaXhfYnVzX3NwZWVkKGN0cmwsIHBfc2xvdCwgc2xvdHNfbm90X2VtcHR5LCBhc3AsIGJzcCwgbXNwKTsKQEAgLTMwNiwxOCArMzA2LDE4IEBACiAKIAkvKiB0dXJuIG9uIGJvYXJkLCBibGluayBncmVlbiBMRUQsIHR1cm4gb2ZmIEFtYmVyIExFRCAqLwogCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPnNsb3RfZW5hYmxlKHBfc2xvdCkpKSB7Ci0JCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRW5hYmxlIGNvbW1hbmQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IEVuYWJsZSBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogV2FpdCBmb3IgfjEgc2Vjb25kICovCiAJbXNsZWVwKDEwMDApOwogCi0JZGJnKCIlczogc2xvdCBzdGF0dXMgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPnN0YXR1cyk7CisJZGJnKCIlczogc2xvdCBzdGF0dXMgPSAleFxuIiwgX19mdW5jX18sIHBfc2xvdC0+c3RhdHVzKTsKIAkvKiBDaGVjayBmb3IgYSBwb3dlciBmYXVsdCAqLwogCWlmIChwX3Nsb3QtPnN0YXR1cyA9PSAweEZGKSB7CiAJCS8qIHBvd2VyIGZhdWx0IG9jY3VycmVkLCBidXQgaXQgd2FzIGJlbmlnbiAqLwotCQlkYmcoIiVzOiBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlczogcG93ZXIgZmF1bHRcbiIsIF9fZnVuY19fKTsKIAkJcmMgPSBQT1dFUl9GQUlMVVJFOwogCQlwX3Nsb3QtPnN0YXR1cyA9IDA7CiAJCWdvdG8gZXJyX2V4aXQ7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkvKiB0dXJuIG9mZiBzbG90LCB0dXJuIG9uIEFtYmVyIExFRCwgdHVybiBvZmYgR3JlZW4gTEVEICovCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPnNsb3RfZGlzYWJsZShwX3Nsb3QpOwogCWlmIChyYykgewotCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRGlzYWJsZSBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0zNjUsNyArMzY1LDcgQEAKIAlocF9zbG90ID0gcF9zbG90LT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJcF9zbG90ID0gc2hwY2hwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAotCWRiZygiSW4gJXMsIGhwX3Nsb3QgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBocF9zbG90KTsKKwlkYmcoIkluICVzLCBocF9zbG90ID0gJWRcbiIsIF9fZnVuY19fLCBocF9zbG90KTsKIAogCS8qIENoYW5nZSBzdGF0dXMgdG8gc2h1dGRvd24gKi8KIAlpZiAocF9zbG90LT5pc19hX2JvYXJkKQpAQCAtMzc0LDEzICszNzQsMTMgQEAKIAkvKiB0dXJuIG9mZiBzbG90LCB0dXJuIG9uIEFtYmVyIExFRCwgdHVybiBvZmYgR3JlZW4gTEVEICovCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPnNsb3RfZGlzYWJsZShwX3Nsb3QpOwogCWlmIChyYykgewotCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRGlzYWJsZSBjb21tYW5kIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IElzc3VlIG9mIFNldCBBdHRlbnRpb24gY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IElzc3VlIG9mIFNldCBBdHRlbnRpb24gY29tbWFuZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNDM5LDcgKzQzOSw3IEBACiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pIHsKLQkJZXJyKCIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWluZm8tPnBfc2xvdCA9IHBfc2xvdDsKQEAgLTUxMyw3ICs1MTMsNyBAQAogCQkgKiBleHBpcmVzIHRvIGNhbmNlbCBob3QtYWRkIG9yIGhvdC1yZW1vdmUKIAkJICovCiAJCWluZm8oIkJ1dHRvbiBjYW5jZWwgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7Ci0JCWRiZygiJXM6IGJ1dHRvbiBjYW5jZWxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRiZygiJXM6IGJ1dHRvbiBjYW5jZWxcbiIsIF9fZnVuY19fKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcF9zbG90LT53b3JrKTsKIAkJaWYgKHBfc2xvdC0+c3RhdGUgPT0gQkxJTktJTkdPRkZfU1RBVEUpCiAJCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vbihwX3Nsb3QpOwpAQCAtNTUxLDcgKzU1MSw3IEBACiAJCWhhbmRsZV9idXR0b25fcHJlc3NfZXZlbnQocF9zbG90KTsKIAkJYnJlYWs7CiAJY2FzZSBJTlRfUE9XRVJfRkFVTFQ6Ci0JCWRiZygiJXM6IHBvd2VyIGZhdWx0XG4iLCBfX0ZVTkNUSU9OX18pOworCQlkYmcoIiVzOiBwb3dlciBmYXVsdFxuIiwgX19mdW5jX18pOwogCQlwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMSk7CiAJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOwogCQlicmVhazsKQEAgLTU5Myw3ICs1OTMsNyBAQAogCS8qIFdlIGhhdmUgdG8gc2F2ZSB0aGUgcHJlc2VuY2UgaW5mbyBmb3IgdGhlc2Ugc2xvdHMgKi8KIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYocF9zbG90LT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJihwX3Nsb3QtPnB3cl9zYXZlKSk7Ci0JZGJnKCIlczogcF9zbG90LT5wd3Jfc2F2ZSAleFxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPnB3cl9zYXZlKTsKKwlkYmcoIiVzOiBwX3Nsb3QtPnB3cl9zYXZlICV4XG4iLCBfX2Z1bmNfXywgcF9zbG90LT5wd3Jfc2F2ZSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAKIAlpZigoKHBfc2xvdC0+Y3RybC0+cGNpX2Rldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwppbmRleCBlOGFhMTM4Li43ZDc3MGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwpAQCAtMzIxLDE0ICszMjEsMTQgQEAKIAlpZiAoIXNocGNfcG9sbF9jdHJsX2J1c3koY3RybCkpIHsKIAkJLyogQWZ0ZXIgMSBzZWMgYW5kIGFuZCB0aGUgY29udHJvbGxlciBpcyBzdGlsbCBidXN5ICovCiAJCWVycigiJXMgOiBDb250cm9sbGVyIGlzIHN0aWxsIGJ1c3kgYWZ0ZXIgMSBzZWMuXG4iLAotCQkgICAgX19GVU5DVElPTl9fKTsKKwkJICAgIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CiAKIAkrK3Rfc2xvdDsKIAl0ZW1wX3dvcmQgPSAgKHRfc2xvdCA8PCA4KSB8IChjbWQgJiAweEZGKTsKLQlkYmcoIiVzOiB0X3Nsb3QgJXggY21kICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRfc2xvdCwgY21kKTsKKwlkYmcoIiVzOiB0X3Nsb3QgJXggY21kICV4XG4iLCBfX2Z1bmNfXywgdF9zbG90LCBjbWQpOwogCiAJLyogVG8gbWFrZSBzdXJlIHRoZSBDb250cm9sbGVyIEJ1c3kgYml0IGlzIDAgYmVmb3JlIHdlIHNlbmQgb3V0IHRoZQogCSAqIGNvbW1hbmQuCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAljbWRfc3RhdHVzID0gaHBjX2NoZWNrX2NtZF9zdGF0dXMoc2xvdC0+Y3RybCk7CiAJaWYgKGNtZF9zdGF0dXMpIHsKIAkJZXJyKCIlczogRmFpbGVkIHRvIGlzc3VlZCBjb21tYW5kIDB4JXggKGVycm9yIGNvZGUgPSAlZClcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIGNtZCwgY21kX3N0YXR1cyk7CisJCSAgICBfX2Z1bmNfXywgY21kLCBjbWRfc3RhdHVzKTsKIAkJcmV0dmFsID0gLUVJTzsKIAl9CiAgb3V0OgpAQCAtMzY0LDE1ICszNjQsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlyZXR2YWwgPSBTV0lUQ0hfT1BFTjsKLQkJZXJyKCIlczogU3dpdGNoIG9wZW5lZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IFN3aXRjaCBvcGVuZWQhXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJcmV0dmFsID0gSU5WQUxJRF9DTUQ7Ci0JCWVycigiJXM6IEludmFsaWQgSFBDIGNvbW1hbmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb21tYW5kIVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAljYXNlIDQ6CiAJCXJldHZhbCA9IElOVkFMSURfU1BFRURfTU9ERTsKLQkJZXJyKCIlczogSW52YWxpZCBidXMgc3BlZWQvbW9kZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IEludmFsaWQgYnVzIHNwZWVkL21vZGUhXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IGNtZF9zdGF0dXM7CkBAIC00ODQsNyArNDg0LDcgQEAKIAl9CiAKIAlkYmcoIiVzOiBzbG90X3JlZyA9ICV4LCBwY2l4X2NhcCA9ICV4LCBtNjZfY2FwID0gJXhcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgc2xvdF9yZWcsIHBjaXhfY2FwLCBtNjZfY2FwKTsKKwkgICAgX19mdW5jX18sIHNsb3RfcmVnLCBwY2l4X2NhcCwgbTY2X2NhcCk7CiAKIAlzd2l0Y2ggKHBjaXhfY2FwKSB7CiAJY2FzZSAweDA6CkBAIC02MjksNyArNjI5LDcgQEAKIAogCXJldHZhbCA9IHNocGNfd3JpdGVfY21kKHNsb3QsIHNsb3QtPmhwX3Nsb3QsIFNFVF9TTE9UX1BXUik7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCIlczogV3JpdGUgY29tbWFuZCBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC02NDIsNyArNjQyLDcgQEAKIAlyZXR2YWwgPSBzaHBjX3dyaXRlX2NtZChzbG90LCBzbG90LT5ocF9zbG90LAogCQkJU0VUX1NMT1RfRU5BQkxFIHwgU0VUX1BXUl9CTElOSyB8IFNFVF9BVFROX09GRik7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCIlczogV3JpdGUgY29tbWFuZCBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC02NTUsNyArNjU1LDcgQEAKIAlyZXR2YWwgPSBzaHBjX3dyaXRlX2NtZChzbG90LCBzbG90LT5ocF9zbG90LAogCQkJU0VUX1NMT1RfRElTQUJMRSB8IFNFVF9QV1JfT0ZGIHwgU0VUX0FUVE5fT04pOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogV3JpdGUgY29tbWFuZCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNzE5LDcgKzcxOSw3IEBACiAKIAlyZXR2YWwgPSBzaHBjX3dyaXRlX2NtZChzbG90LCAwLCBjbWQpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyKCIlczogV3JpdGUgY29tbWFuZCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNzM1LDcgKzczNSw3IEBACiAJaWYgKCFpbnRyX2xvYykKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JZGJnKCIlczogaW50cl9sb2MgPSAleFxuIixfX0ZVTkNUSU9OX18sIGludHJfbG9jKTsKKwlkYmcoIiVzOiBpbnRyX2xvYyA9ICV4XG4iLF9fZnVuY19fLCBpbnRyX2xvYyk7CiAKIAlpZighc2hwY2hwX3BvbGxfbW9kZSkgewogCQkvKgpAQCAtNzQ4LDcgKzc0OCw3IEBACiAJCXNocGNfd3JpdGVsKGN0cmwsIFNFUlJfSU5UUl9FTkFCTEUsIHNlcnJfaW50KTsKIAogCQlpbnRyX2xvYzIgPSBzaHBjX3JlYWRsKGN0cmwsIElOVFJfTE9DKTsKLQkJZGJnKCIlczogaW50cl9sb2MyID0gJXhcbiIsX19GVU5DVElPTl9fLCBpbnRyX2xvYzIpOworCQlkYmcoIiVzOiBpbnRyX2xvYzIgPSAleFxuIixfX2Z1bmNfXywgaW50cl9sb2MyKTsKIAl9CiAKIAlpZiAoaW50cl9sb2MgJiBDTURfSU5UUl9QRU5ESU5HKSB7CkBAIC03NzQsNyArNzc0LDcgQEAKIAogCQlzbG90X3JlZyA9IHNocGNfcmVhZGwoY3RybCwgU0xPVF9SRUcoaHBfc2xvdCkpOwogCQlkYmcoIiVzOiBTbG90ICV4IHdpdGggaW50ciwgc2xvdCByZWdpc3RlciA9ICV4XG4iLAotCQkgICAgX19GVU5DVElPTl9fLCBocF9zbG90LCBzbG90X3JlZyk7CisJCSAgICBfX2Z1bmNfXywgaHBfc2xvdCwgc2xvdF9yZWcpOwogCiAJCWlmIChzbG90X3JlZyAmIE1STF9DSEFOR0VfREVURUNURUQpCiAJCQlzaHBjaHBfaGFuZGxlX3N3aXRjaF9jaGFuZ2UoaHBfc2xvdCwgY3RybCk7CkBAIC05NTgsMzMgKzk1OCwzMyBAQAogCX0gZWxzZSB7CiAJCWN0cmwtPmNhcF9vZmZzZXQgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfU0hQQyk7CiAJCWlmICghY3RybC0+Y2FwX29mZnNldCkgewotCQkJZXJyKCIlcyA6IGNhcF9vZmZzZXQgPT0gMFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWVycigiJXMgOiBjYXBfb2Zmc2V0ID09IDBcbiIsIF9fZnVuY19fKTsKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KLQkJZGJnKCIlczogY2FwX29mZnNldCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGN0cmwtPmNhcF9vZmZzZXQpOworCQlkYmcoIiVzOiBjYXBfb2Zmc2V0ID0gJXhcbiIsIF9fZnVuY19fLCBjdHJsLT5jYXBfb2Zmc2V0KTsKIAogCQlyYyA9IHNocGNfaW5kaXJlY3RfcmVhZChjdHJsLCAwLCAmc2hwY19iYXNlX29mZnNldCk7CiAJCWlmIChyYykgewotCQkJZXJyKCIlczogY2Fubm90IHJlYWQgYmFzZV9vZmZzZXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQllcnIoIiVzOiBjYW5ub3QgcmVhZCBiYXNlX29mZnNldFxuIiwgX19mdW5jX18pOwogCQkJZ290byBhYm9ydDsKIAkJfQogCiAJCXJjID0gc2hwY19pbmRpcmVjdF9yZWFkKGN0cmwsIDMsICZ0ZW1wZHdvcmQpOwogCQlpZiAocmMpIHsKLQkJCWVycigiJXM6IGNhbm5vdCByZWFkIHNsb3QgY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZXJyKCIlczogY2Fubm90IHJlYWQgc2xvdCBjb25maWdcbiIsIF9fZnVuY19fKTsKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KIAkJbnVtX3Nsb3RzID0gdGVtcGR3b3JkICYgU0xPVF9OVU07Ci0JCWRiZygiJXM6IG51bV9zbG90cyAoaW5kaXJlY3QpICV4XG4iLCBfX0ZVTkNUSU9OX18sIG51bV9zbG90cyk7CisJCWRiZygiJXM6IG51bV9zbG90cyAoaW5kaXJlY3QpICV4XG4iLCBfX2Z1bmNfXywgbnVtX3Nsb3RzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgOSArIG51bV9zbG90czsgaSsrKSB7CiAJCQlyYyA9IHNocGNfaW5kaXJlY3RfcmVhZChjdHJsLCBpLCAmdGVtcGR3b3JkKTsKIAkJCWlmIChyYykgewogCQkJCWVycigiJXM6IGNhbm5vdCByZWFkIGNyZWcgKGluZGV4ID0gJWQpXG4iLAotCQkJCSAgICBfX0ZVTkNUSU9OX18sIGkpOworCQkJCSAgICBfX2Z1bmNfXywgaSk7CiAJCQkJZ290byBhYm9ydDsKIAkJCX0KLQkJCWRiZygiJXM6IG9mZnNldCAlZDogdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXyxpLAorCQkJZGJnKCIlczogb2Zmc2V0ICVkOiB2YWx1ZSAleFxuIiwgX19mdW5jX18saSwKIAkJCQkJdGVtcGR3b3JkKTsKIAkJfQogCkBAIC05OTgsMjUgKzk5OCwyNSBAQAogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKLQkJZXJyKCIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBhYm9ydDsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihjdHJsLT5tbWlvX2Jhc2UsIGN0cmwtPm1taW9fc2l6ZSwgTVlfTkFNRSkpIHsKLQkJZXJyKCIlczogY2Fubm90IHJlc2VydmUgTU1JTyByZWdpb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXM6IGNhbm5vdCByZXNlcnZlIE1NSU8gcmVnaW9uXG4iLCBfX2Z1bmNfXyk7CiAJCXJjID0gLTE7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCiAJY3RybC0+Y3JlZyA9IGlvcmVtYXAoY3RybC0+bW1pb19iYXNlLCBjdHJsLT5tbWlvX3NpemUpOwogCWlmICghY3RybC0+Y3JlZykgewotCQllcnIoIiVzOiBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLCBfX0ZVTkNUSU9OX18sCisJCWVycigiJXM6IGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsIF9fZnVuY19fLAogCQkgICAgY3RybC0+bW1pb19zaXplLCBjdHJsLT5tbWlvX2Jhc2UpOwogCQlyZWxlYXNlX21lbV9yZWdpb24oY3RybC0+bW1pb19iYXNlLCBjdHJsLT5tbWlvX3NpemUpOwogCQlyYyA9IC0xOwogCQlnb3RvIGFib3J0OwogCX0KLQlkYmcoIiVzOiBjdHJsLT5jcmVnICVwXG4iLCBfX0ZVTkNUSU9OX18sIGN0cmwtPmNyZWcpOworCWRiZygiJXM6IGN0cmwtPmNyZWcgJXBcbiIsIF9fZnVuY19fLCBjdHJsLT5jcmVnKTsKIAogCW11dGV4X2luaXQoJmN0cmwtPmNyaXRfc2VjdCk7CiAJbXV0ZXhfaW5pdCgmY3RybC0+Y21kX2xvY2spOwpAQCAtMTAzNSwyMCArMTAzNSwyMCBAQAogCiAJLyogTWFzayBHbG9iYWwgSW50ZXJydXB0IE1hc2sgJiBDb21tYW5kIENvbXBsZXRlIEludGVycnVwdCBNYXNrICovCiAJdGVtcGR3b3JkID0gc2hwY19yZWFkbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFKTsKLQlkYmcoIiVzOiBTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcGR3b3JkKTsKKwlkYmcoIiVzOiBTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIF9fZnVuY19fLCB0ZW1wZHdvcmQpOwogCXRlbXBkd29yZCB8PSAoR0xPQkFMX0lOVFJfTUFTSyAgfCBHTE9CQUxfU0VSUl9NQVNLIHwKIAkJICAgICAgQ09NTUFORF9JTlRSX01BU0sgfCBBUkJJVEVSX1NFUlJfTUFTSyk7CiAJdGVtcGR3b3JkICY9IH5TRVJSX0lOVFJfUlNWRFpfTUFTSzsKIAlzaHBjX3dyaXRlbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFLCB0ZW1wZHdvcmQpOwogCXRlbXBkd29yZCA9IHNocGNfcmVhZGwoY3RybCwgU0VSUl9JTlRSX0VOQUJMRSk7Ci0JZGJnKCIlczogU0VSUl9JTlRSX0VOQUJMRSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBkd29yZCk7CisJZGJnKCIlczogU0VSUl9JTlRSX0VOQUJMRSA9ICV4XG4iLCBfX2Z1bmNfXywgdGVtcGR3b3JkKTsKIAogCS8qIE1hc2sgdGhlIE1STCBzZW5zb3IgU0VSUiBNYXNrIG9mIGluZGl2aWR1YWwgc2xvdCBpbgogCSAqIFNsb3QgU0VSUi1JTlQgTWFzayAmIGNsZWFyIGFsbCB0aGUgZXhpc3RpbmcgZXZlbnQgaWYgYW55CiAJICovCiAJZm9yIChocF9zbG90ID0gMDsgaHBfc2xvdCA8IGN0cmwtPm51bV9zbG90czsgaHBfc2xvdCsrKSB7CiAJCXNsb3RfcmVnID0gc2hwY19yZWFkbChjdHJsLCBTTE9UX1JFRyhocF9zbG90KSk7Ci0JCWRiZygiJXM6IERlZmF1bHQgTG9naWNhbCBTbG90IFJlZ2lzdGVyICVkIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sCisJCWRiZygiJXM6IERlZmF1bHQgTG9naWNhbCBTbG90IFJlZ2lzdGVyICVkIHZhbHVlICV4XG4iLCBfX2Z1bmNfXywKIAkJCWhwX3Nsb3QsIHNsb3RfcmVnKTsKIAkJc2xvdF9yZWcgfD0gKFBSU05UX0NIQU5HRV9JTlRSX01BU0sgfCBJU09fUEZBVUxUX0lOVFJfTUFTSyB8CiAJCQkgICAgIEJVVFRPTl9QUkVTU19JTlRSX01BU0sgfCBNUkxfQ0hBTkdFX0lOVFJfTUFTSyB8CkBAIC0xMDczLDcgKzEwNzMsNyBAQAogCQlyYyA9IHJlcXVlc3RfaXJxKGN0cmwtPnBjaV9kZXYtPmlycSwgc2hwY19pc3IsIElSUUZfU0hBUkVELAogCQkJCSBNWV9OQU1FLCAodm9pZCAqKWN0cmwpOwogCQlkYmcoIiVzOiByZXF1ZXN0X2lycSAlZCBmb3IgaHBjJWQgKHJldHVybnMgJWQpXG4iLAotCQkgICAgX19GVU5DVElPTl9fLCBjdHJsLT5wY2lfZGV2LT5pcnEsCisJCSAgICBfX2Z1bmNfXywgY3RybC0+cGNpX2Rldi0+aXJxLAogCQkgICAgYXRvbWljX3JlYWQoJnNocGNocF9udW1fY29udHJvbGxlcnMpLCByYyk7CiAJCWlmIChyYykgewogCQkJZXJyKCJDYW4ndCBnZXQgaXJxICVkIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iLApAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIAkJCWdvdG8gYWJvcnRfaW91bm1hcDsKIAkJfQogCX0KLQlkYmcoIiVzOiBIUEMgYXQgYjpkOmY6aXJxPTB4JXg6JXg6JXg6JXhcbiIsIF9fRlVOQ1RJT05fXywKKwlkYmcoIiVzOiBIUEMgYXQgYjpkOmY6aXJxPTB4JXg6JXg6JXg6JXhcbiIsIF9fZnVuY19fLAogCQkJcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwKIAkJCVBDSV9GVU5DKHBkZXYtPmRldmZuKSwgcGRldi0+aXJxKTsKIAlnZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHBkZXYpOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkgKi8KIAlmb3IgKGhwX3Nsb3QgPSAwOyBocF9zbG90IDwgY3RybC0+bnVtX3Nsb3RzOyBocF9zbG90KyspIHsKIAkJc2xvdF9yZWcgPSBzaHBjX3JlYWRsKGN0cmwsIFNMT1RfUkVHKGhwX3Nsb3QpKTsKLQkJZGJnKCIlczogRGVmYXVsdCBMb2dpY2FsIFNsb3QgUmVnaXN0ZXIgJWQgdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJZGJnKCIlczogRGVmYXVsdCBMb2dpY2FsIFNsb3QgUmVnaXN0ZXIgJWQgdmFsdWUgJXhcbiIsIF9fZnVuY19fLAogCQkJaHBfc2xvdCwgc2xvdF9yZWcpOwogCQlzbG90X3JlZyAmPSB+KFBSU05UX0NIQU5HRV9JTlRSX01BU0sgfCBJU09fUEZBVUxUX0lOVFJfTUFTSyB8CiAJCQkgICAgICBCVVRUT05fUFJFU1NfSU5UUl9NQVNLIHwgTVJMX0NIQU5HRV9JTlRSX01BU0sgfApAQCAtMTExNyw3ICsxMTE3LDcgQEAKIAkJCSAgICAgICBTRVJSX0lOVFJfUlNWRFpfTUFTSyk7CiAJCXNocGNfd3JpdGVsKGN0cmwsIFNFUlJfSU5UUl9FTkFCTEUsIHRlbXBkd29yZCk7CiAJCXRlbXBkd29yZCA9IHNocGNfcmVhZGwoY3RybCwgU0VSUl9JTlRSX0VOQUJMRSk7Ci0JCWRiZygiJXM6IFNFUlJfSU5UUl9FTkFCTEUgPSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wZHdvcmQpOworCQlkYmcoIiVzOiBTRVJSX0lOVFJfRU5BQkxFID0gJXhcbiIsIF9fZnVuY19fLCB0ZW1wZHdvcmQpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwppbmRleCAwYTZiMjVlLi4zZmM0ZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwpAQCAtNTEsNyArNTEsNyBAQAogCSAgICAhaHBwLnQwIHx8IChocHAudDAtPnJldmlzaW9uID4gMSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBDb3VsZCBub3QgZ2V0IGhvdHBsdWcgcGFyYW1ldGVycy4gVXNlIGRlZmF1bHRzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJaHBwLnQwID0gJmhwcC50eXBlMF9kYXRhOwogCQlocHAudDAtPnJldmlzaW9uID0gMDsKIAkJaHBwLnQwLT5jYWNoZV9saW5lX3NpemUgPSA4OwpAQCAtOTYsNyArOTYsNyBAQAogCX0KIH0KIAotaW50IHNocGNocF9jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBzbG90ICpwX3Nsb3QpCitpbnQgX19yZWYgc2hwY2hwX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJdTggYmN0bCA9IDA7CiAJc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IHBfc2xvdC0+Y3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAKLQlkYmcoIiVzOiBidXMvZGV2ID0gJXgvJXhcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwlkYmcoIiVzOiBidXMvZGV2ID0gJXgvJXhcbiIsIF9fZnVuY19fLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCiAJZm9yIChqPTA7IGo8OCA7IGorKykgewogCQlzdHJ1Y3QgcGNpX2RldiogdGVtcCA9IHBjaV9nZXRfc2xvdChwYXJlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCBhNGMzMDg5Li4zMDFjNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTE0LDEzICsxNCwxNSBAQAogICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQogICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCiAgKgotICogQ29weXJpZ2h0IChDKSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIFNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChDKSBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorICogQXV0aG9yOiBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqIEF1dGhvcjogQW5pbCBTIEtlc2hhdmFtdXJ0aHkgPGFuaWwucy5rZXNoYXZhbXVydGh5QGludGVsLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0zMCw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSAiaW92YS5oIgogI2luY2x1ZGUgImludGVsLWlvbW11LmgiCiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+IC8qIGZvcmNlX2lvbW11IGluIHRoaXMgaGVhZGVyIGluIHg4Ni02NCovCkBAIC01MCwxMSArNTMsMzcgQEAKIAogI2RlZmluZSBET01BSU5fTUFYX0FERFIoZ2F3KSAoKCgodTY0KTEpIDw8IGdhdykgLSAxKQogCisKK3N0YXRpYyB2b2lkIGZsdXNoX3VubWFwc190aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK0RFRklORV9USU1FUih1bm1hcF90aW1lciwgIGZsdXNoX3VubWFwc190aW1lb3V0LCAwLCAwKTsKKworc3RhdGljIHN0cnVjdCBpbnRlbF9pb21tdSAqZ19pb21tdXM7CisKKyNkZWZpbmUgSElHSF9XQVRFUl9NQVJLIDI1MAorc3RydWN0IGRlZmVycmVkX2ZsdXNoX3RhYmxlcyB7CisJaW50IG5leHQ7CisJc3RydWN0IGlvdmEgKmlvdmFbSElHSF9XQVRFUl9NQVJLXTsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbltISUdIX1dBVEVSX01BUktdOworfTsKKworc3RhdGljIHN0cnVjdCBkZWZlcnJlZF9mbHVzaF90YWJsZXMgKmRlZmVycmVkX2ZsdXNoOworCisvKiBiaXRtYXAgZm9yIGluZGV4aW5nIGludGVsX2lvbW11cyAqLworc3RhdGljIGludCBnX251bV9vZl9pb21tdXM7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXN5bmNfdW1hcF9mbHVzaF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQodW5tYXBzX3RvX2RvKTsKKworc3RhdGljIGludCB0aW1lcl9vbjsKK3N0YXRpYyBsb25nIGxpc3Rfc2l6ZTsKKwogc3RhdGljIHZvaWQgZG9tYWluX3JlbW92ZV9kZXZfaW5mbyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbik7CiAKIHN0YXRpYyBpbnQgZG1hcl9kaXNhYmxlZDsKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBkbWFyX21hcF9nZnggPSAxOwogc3RhdGljIGludCBkbWFyX2ZvcmNlZGFjOworc3RhdGljIGludCBpbnRlbF9pb21tdV9zdHJpY3Q7CiAKICNkZWZpbmUgRFVNTVlfREVWSUNFX0RPTUFJTl9JTkZPICgoc3RydWN0IGRldmljZV9kb21haW5faW5mbyAqKSgtMSkpCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRldmljZV9kb21haW5fbG9jayk7CkBAIC03Myw5ICsxMDIsMTMgQEAKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkiSW50ZWwtSU9NTVU6IGRpc2FibGUgR0ZYIGRldmljZSBtYXBwaW5nXG4iKTsKIAkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJmb3JjZWRhYyIsIDgpKSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTworCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJCSJJbnRlbC1JT01NVTogRm9yY2luZyBEQUMgZm9yIFBDSSBkZXZpY2VzXG4iKTsKIAkJCWRtYXJfZm9yY2VkYWMgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgInN0cmljdCIsIDYpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJIkludGVsLUlPTU1VOiBkaXNhYmxlIGJhdGNoZWQgSU9UTEIgZmx1c2hcbiIpOworCQkJaW50ZWxfaW9tbXVfc3RyaWN0ID0gMTsKIAkJfQogCiAJCXN0ciArPSBzdHJjc3BuKHN0ciwgIiwiKTsKQEAgLTk2NSwxNyArOTk4LDEzIEBACiAJCXNldF9iaXQoMCwgaW9tbXUtPmRvbWFpbl9pZHMpOwogCXJldHVybiAwOwogfQotCi1zdGF0aWMgc3RydWN0IGludGVsX2lvbW11ICphbGxvY19pb21tdShzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpCitzdGF0aWMgc3RydWN0IGludGVsX2lvbW11ICphbGxvY19pb21tdShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LAorCQkJCQlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpCiB7Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlpbnQgcmV0OwogCWludCBtYXBfc2l6ZTsKIAl1MzIgdmVyOwogCi0JaW9tbXUgPSBremFsbG9jKHNpemVvZigqaW9tbXUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlvbW11KQotCQlyZXR1cm4gTlVMTDsKIAlpb21tdS0+cmVnID0gaW9yZW1hcChkcmhkLT5yZWdfYmFzZV9hZGRyLCBQQUdFX1NJWkVfNEspOwogCWlmICghaW9tbXUtPnJlZykgewogCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBjYW4ndCBtYXAgdGhlIHJlZ2lvblxuIik7CkBAIC0xMDk2LDYgKzExMjUsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlvdmFfZG9tYWluIHJlc2VydmVkX2lvdmFfbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmVzZXJ2ZWRfYWxsb2Nfa2V5Oworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByZXNlcnZlZF9yYnRyZWVfa2V5OwogCiBzdGF0aWMgdm9pZCBkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKHZvaWQpCiB7CkBAIC0xMTA2LDYgKzExMzcsMTEgQEAKIAogCWluaXRfaW92YV9kb21haW4oJnJlc2VydmVkX2lvdmFfbGlzdCwgRE1BXzMyQklUX1BGTik7CiAKKwlsb2NrZGVwX3NldF9jbGFzcygmcmVzZXJ2ZWRfaW92YV9saXN0LmlvdmFfYWxsb2NfbG9jaywKKwkJJnJlc2VydmVkX2FsbG9jX2tleSk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJnJlc2VydmVkX2lvdmFfbGlzdC5pb3ZhX3JidHJlZV9sb2NrLAorCQkmcmVzZXJ2ZWRfcmJ0cmVlX2tleSk7CisKIAkvKiBJT0FQSUMgcmFuZ2VzIHNob3VsZG4ndCBiZSBhY2Nlc3NlZCBieSBETUEgKi8KIAlpb3ZhID0gcmVzZXJ2ZV9pb3ZhKCZyZXNlcnZlZF9pb3ZhX2xpc3QsIElPVkFfUEZOKElPQVBJQ19SQU5HRV9TVEFSVCksCiAJCUlPVkFfUEZOKElPQVBJQ19SQU5HRV9FTkQpKTsKQEAgLTEzOTYsNyArMTQzMiw3IEBACiAJaW50IGluZGV4OwogCiAJd2hpbGUgKGRldikgewotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjbnQ7IGluZGV4ICsrKQorCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjbnQ7IGluZGV4KyspCiAJCQlpZiAoZGV2ID09IGRldmljZXNbaW5kZXhdKQogCQkJCXJldHVybiAxOwogCkBAIC0xNjYxLDcgKzE2OTcsNyBAQAogCXN0cnVjdCBkbWFyX3JtcnJfdW5pdCAqcm1ycjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwotCWludCByZXQsIHVuaXQgPSAwOworCWludCBpLCByZXQsIHVuaXQgPSAwOwogCiAJLyoKIAkgKiBmb3IgZWFjaCBkcmhkCkBAIC0xNjcyLDcgKzE3MDgsMzQgQEAKIAlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgewogCQlpZiAoZHJoZC0+aWdub3JlZCkKIAkJCWNvbnRpbnVlOwotCQlpb21tdSA9IGFsbG9jX2lvbW11KGRyaGQpOworCQlnX251bV9vZl9pb21tdXMrKzsKKwkJLyoKKwkJICogbG9jayBub3QgbmVlZGVkIGFzIHRoaXMgaXMgb25seSBpbmNyZW1lbnRlZCBpbiB0aGUgc2luZ2xlCisJCSAqIHRocmVhZGVkIGtlcm5lbCBfX2luaXQgY29kZSBwYXRoIGFsbCBvdGhlciBhY2Nlc3MgYXJlIHJlYWQKKwkJICogb25seQorCQkgKi8KKwl9CisKKwlnX2lvbW11cyA9IGt6YWxsb2MoZ19udW1fb2ZfaW9tbXVzICogc2l6ZW9mKCppb21tdSksIEdGUF9LRVJORUwpOworCWlmICghZ19pb21tdXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkZWZlcnJlZF9mbHVzaCA9IGt6YWxsb2MoZ19udW1fb2ZfaW9tbXVzICoKKwkJc2l6ZW9mKHN0cnVjdCBkZWZlcnJlZF9mbHVzaF90YWJsZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlZmVycmVkX2ZsdXNoKSB7CisJCWtmcmVlKGdfaW9tbXVzKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpID0gMDsKKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlpZiAoZHJoZC0+aWdub3JlZCkKKwkJCWNvbnRpbnVlOworCQlpb21tdSA9IGFsbG9jX2lvbW11KCZnX2lvbW11c1tpXSwgZHJoZCk7CisJCWkrKzsKIAkJaWYgKCFpb21tdSkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3I7CkBAIC0xNzA1LDcgKzE3NjgsNiBAQAogCSAqIGVuZGZvcgogCSAqLwogCWZvcl9lYWNoX3JtcnJfdW5pdHMocm1ycikgewotCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IHJtcnItPmRldmljZXNfY250OyBpKyspIHsKIAkJCXBkZXYgPSBybXJyLT5kZXZpY2VzW2ldOwogCQkJLyogc29tZSBCSU9TIGxpc3RzIG5vbi1leGlzdCBkZXZpY2VzIGluIERNQVIgdGFibGUgKi8KQEAgLTE3NjEsNiArMTgyMyw3IEBACiAJCWlvbW11ID0gZHJoZC0+aW9tbXU7CiAJCWZyZWVfaW9tbXUoaW9tbXUpOwogCX0KKwlrZnJlZShnX2lvbW11cyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkwOSw2ICsxOTcyLDU5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGZsdXNoX3VubWFwcyh2b2lkKQoreworCWludCBpLCBqOworCisJdGltZXJfb24gPSAwOworCisJLyoganVzdCBmbHVzaCB0aGVtIGFsbCAqLworCWZvciAoaSA9IDA7IGkgPCBnX251bV9vZl9pb21tdXM7IGkrKykgeworCQlpZiAoZGVmZXJyZWRfZmx1c2hbaV0ubmV4dCkgeworCQkJaW9tbXVfZmx1c2hfaW90bGJfZ2xvYmFsKCZnX2lvbW11c1tpXSwgMCk7CisJCQlmb3IgKGogPSAwOyBqIDwgZGVmZXJyZWRfZmx1c2hbaV0ubmV4dDsgaisrKSB7CisJCQkJX19mcmVlX2lvdmEoJmRlZmVycmVkX2ZsdXNoW2ldLmRvbWFpbltqXS0+aW92YWQsCisJCQkJCQlkZWZlcnJlZF9mbHVzaFtpXS5pb3ZhW2pdKTsKKwkJCX0KKwkJCWRlZmVycmVkX2ZsdXNoW2ldLm5leHQgPSAwOworCQl9CisJfQorCisJbGlzdF9zaXplID0gMDsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfdW5tYXBzX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXN5bmNfdW1hcF9mbHVzaF9sb2NrLCBmbGFncyk7CisJZmx1c2hfdW5tYXBzKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXN5bmNfdW1hcF9mbHVzaF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF91bm1hcChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbSwgc3RydWN0IGlvdmEgKmlvdmEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbmV4dCwgaW9tbXVfaWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXN5bmNfdW1hcF9mbHVzaF9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3Rfc2l6ZSA9PSBISUdIX1dBVEVSX01BUkspCisJCWZsdXNoX3VubWFwcygpOworCisJaW9tbXVfaWQgPSBkb20tPmlvbW11IC0gZ19pb21tdXM7CisJbmV4dCA9IGRlZmVycmVkX2ZsdXNoW2lvbW11X2lkXS5uZXh0OworCWRlZmVycmVkX2ZsdXNoW2lvbW11X2lkXS5kb21haW5bbmV4dF0gPSBkb207CisJZGVmZXJyZWRfZmx1c2hbaW9tbXVfaWRdLmlvdmFbbmV4dF0gPSBpb3ZhOworCWRlZmVycmVkX2ZsdXNoW2lvbW11X2lkXS5uZXh0Kys7CisKKwlpZiAoIXRpbWVyX29uKSB7CisJCW1vZF90aW1lcigmdW5tYXBfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKSk7CisJCXRpbWVyX29uID0gMTsKKwl9CisJbGlzdF9zaXplKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXN5bmNfdW1hcF9mbHVzaF9sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCiAJc2l6ZV90IHNpemUsIGludCBkaXIpCiB7CkBAIC0xOTM2LDEzICsyMDUyLDE5IEBACiAJZG1hX3B0ZV9jbGVhcl9yYW5nZShkb21haW4sIHN0YXJ0X2FkZHIsIHN0YXJ0X2FkZHIgKyBzaXplKTsKIAkvKiBmcmVlIHBhZ2UgdGFibGVzICovCiAJZG1hX3B0ZV9mcmVlX3BhZ2V0YWJsZShkb21haW4sIHN0YXJ0X2FkZHIsIHN0YXJ0X2FkZHIgKyBzaXplKTsKLQotCWlmIChpb21tdV9mbHVzaF9pb3RsYl9wc2koZG9tYWluLT5pb21tdSwgZG9tYWluLT5pZCwgc3RhcnRfYWRkciwKLQkJCXNpemUgPj4gUEFHRV9TSElGVF80SywgMCkpCi0JCWlvbW11X2ZsdXNoX3dyaXRlX2J1ZmZlcihkb21haW4tPmlvbW11KTsKLQotCS8qIGZyZWUgaW92YSAqLwotCV9fZnJlZV9pb3ZhKCZkb21haW4tPmlvdmFkLCBpb3ZhKTsKKwlpZiAoaW50ZWxfaW9tbXVfc3RyaWN0KSB7CisJCWlmIChpb21tdV9mbHVzaF9pb3RsYl9wc2koZG9tYWluLT5pb21tdSwKKwkJCWRvbWFpbi0+aWQsIHN0YXJ0X2FkZHIsIHNpemUgPj4gUEFHRV9TSElGVF80SywgMCkpCisJCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoZG9tYWluLT5pb21tdSk7CisJCS8qIGZyZWUgaW92YSAqLworCQlfX2ZyZWVfaW92YSgmZG9tYWluLT5pb3ZhZCwgaW92YSk7CisJfSBlbHNlIHsKKwkJYWRkX3VubWFwKGRvbWFpbiwgaW92YSk7CisJCS8qCisJCSAqIHF1ZXVlIHVwIHRoZSByZWxlYXNlIG9mIHRoZSB1bm1hcCB0byBzYXZlIHRoZSAxLzZ0aCBvZiB0aGUKKwkJICogY3B1IHVzZWQgdXAgYnkgdGhlIGlvdGxiIGZsdXNoIG9wZXJhdGlvbi4uLgorCQkgKi8KKwl9CiB9CiAKIHN0YXRpYyB2b2lkICogaW50ZWxfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLApAQCAtMjI4MSw2ICsyNDAzLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPCiAJIlBDSS1ETUE6IEludGVsKFIpIFZpcnR1YWxpemF0aW9uIFRlY2hub2xvZ3kgZm9yIERpcmVjdGVkIEkvT1xuIik7CiAKKwlpbml0X3RpbWVyKCZ1bm1hcF90aW1lcik7CiAJZm9yY2VfaW9tbXUgPSAxOwogCWRtYV9vcHMgPSAmaW50ZWxfZG1hX29wczsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmggYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5oCmluZGV4IDA3ZjVmNjMuLmFmYzBhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmgKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuaApAQCAtMTQsOCArMTQsOSBAQAogICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQogICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCiAgKgotICogQ29weXJpZ2h0IChDKSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+CisgKiBBdXRob3I6IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CiAgKi8KIAogI2lmbmRlZiBfSU5URUxfSU9NTVVfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdmEuYyBiL2RyaXZlcnMvcGNpL2lvdmEuYwppbmRleCA4ZGU3YWI2Li4zZWY0YWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pb3ZhLmMKKysrIGIvZHJpdmVycy9wY2kvaW92YS5jCkBAIC0zLDcgKzMsOCBAQAogICoKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgogICovCiAKICNpbmNsdWRlICJpb3ZhLmgiCkBAIC03MiwxMCArNzMsMTEgQEAKIAlyZXR1cm4gcGFkX3NpemU7CiB9CiAKLXN0YXRpYyBpbnQgX19hbGxvY19pb3ZhX3JhbmdlKHN0cnVjdCBpb3ZhX2RvbWFpbiAqaW92YWQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4sIHN0cnVjdCBpb3ZhICpuZXcsIGJvb2wgc2l6ZV9hbGlnbmVkKQorc3RhdGljIGludCBfX2FsbG9jX2FuZF9pbnNlcnRfaW92YV9yYW5nZShzdHJ1Y3QgaW92YV9kb21haW4gKmlvdmFkLAorCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuLAorCQkJc3RydWN0IGlvdmEgKm5ldywgYm9vbCBzaXplX2FsaWduZWQpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKmN1cnIgPSBOVUxMOworCXN0cnVjdCByYl9ub2RlICpwcmV2LCAqY3VyciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHNhdmVkX3BmbjsKIAl1bnNpZ25lZCBpbnQgcGFkX3NpemUgPSAwOwpAQCAtODQsOCArODYsMTAgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW92YWQtPmlvdmFfcmJ0cmVlX2xvY2ssIGZsYWdzKTsKIAlzYXZlZF9wZm4gPSBsaW1pdF9wZm47CiAJY3VyciA9IF9fZ2V0X2NhY2hlZF9yYm5vZGUoaW92YWQsICZsaW1pdF9wZm4pOworCXByZXYgPSBjdXJyOwogCXdoaWxlIChjdXJyKSB7CiAJCXN0cnVjdCBpb3ZhICpjdXJyX2lvdmEgPSBjb250YWluZXJfb2YoY3Vyciwgc3RydWN0IGlvdmEsIG5vZGUpOworCiAJCWlmIChsaW1pdF9wZm4gPCBjdXJyX2lvdmEtPnBmbl9sbykKIAkJCWdvdG8gbW92ZV9sZWZ0OwogCQllbHNlIGlmIChsaW1pdF9wZm4gPCBjdXJyX2lvdmEtPnBmbl9oaSkKQEAgLTk5LDYgKzEwMyw3IEBACiBhZGp1c3RfbGltaXRfcGZuOgogCQlsaW1pdF9wZm4gPSBjdXJyX2lvdmEtPnBmbl9sbyAtIDE7CiBtb3ZlX2xlZnQ6CisJCXByZXYgPSBjdXJyOwogCQljdXJyID0gcmJfcHJldihjdXJyKTsKIAl9CiAKQEAgLTExNSw3ICsxMjAsMzMgQEAKIAluZXctPnBmbl9sbyA9IGxpbWl0X3BmbiAtIChzaXplICsgcGFkX3NpemUpICsgMTsKIAluZXctPnBmbl9oaSA9IG5ldy0+cGZuX2xvICsgc2l6ZSAtIDE7CiAKKwkvKiBJbnNlcnQgdGhlIG5ld19pb3ZhIGludG8gZG9tYWluIHJidHJlZSBieSBob2xkaW5nIHdyaXRlciBsb2NrICovCisJLyogQWRkIG5ldyBub2RlIGFuZCByZWJhbGFuY2UgdHJlZS4gKi8KKwl7CisJCXN0cnVjdCByYl9ub2RlICoqZW50cnkgPSAmKChwcmV2KSksICpwYXJlbnQgPSBOVUxMOworCQkvKiBGaWd1cmUgb3V0IHdoZXJlIHRvIHB1dCBuZXcgbm9kZSAqLworCQl3aGlsZSAoKmVudHJ5KSB7CisJCQlzdHJ1Y3QgaW92YSAqdGhpcyA9IGNvbnRhaW5lcl9vZigqZW50cnksCisJCQkJCQkJc3RydWN0IGlvdmEsIG5vZGUpOworCQkJcGFyZW50ID0gKmVudHJ5OworCisJCQlpZiAobmV3LT5wZm5fbG8gPCB0aGlzLT5wZm5fbG8pCisJCQkJZW50cnkgPSAmKCgqZW50cnkpLT5yYl9sZWZ0KTsKKwkJCWVsc2UgaWYgKG5ldy0+cGZuX2xvID4gdGhpcy0+cGZuX2xvKQorCQkJCWVudHJ5ID0gJigoKmVudHJ5KS0+cmJfcmlnaHQpOworCQkJZWxzZQorCQkJCUJVRygpOyAvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCisJCX0KKworCQkvKiBBZGQgbmV3IG5vZGUgYW5kIHJlYmFsYW5jZSB0cmVlLiAqLworCQlyYl9saW5rX25vZGUoJm5ldy0+bm9kZSwgcGFyZW50LCBlbnRyeSk7CisJCXJiX2luc2VydF9jb2xvcigmbmV3LT5ub2RlLCAmaW92YWQtPnJicm9vdCk7CisJfQorCV9fY2FjaGVkX3Jibm9kZV9pbnNlcnRfdXBkYXRlKGlvdmFkLCBzYXZlZF9wZm4sIG5ldyk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb3ZhZC0+aW92YV9yYnRyZWVfbG9jaywgZmxhZ3MpOworCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTcxLDIzICsyMDIsMTUgQEAKIAkJc2l6ZSA9IF9fcm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX2FsbG9jX2lvdmFfcmFuZ2UoaW92YWQsIHNpemUsIGxpbWl0X3BmbiwgbmV3X2lvdmEsCi0JCQlzaXplX2FsaWduZWQpOworCXJldCA9IF9fYWxsb2NfYW5kX2luc2VydF9pb3ZhX3JhbmdlKGlvdmFkLCBzaXplLCBsaW1pdF9wZm4sCisJCQluZXdfaW92YSwgc2l6ZV9hbGlnbmVkKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2ssIGZsYWdzKTsKIAlpZiAocmV0KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2ssIGZsYWdzKTsKIAkJZnJlZV9pb3ZhX21lbShuZXdfaW92YSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCS8qIEluc2VydCB0aGUgbmV3X2lvdmEgaW50byBkb21haW4gcmJ0cmVlIGJ5IGhvbGRpbmcgd3JpdGVyIGxvY2sgKi8KLQlzcGluX2xvY2soJmlvdmFkLT5pb3ZhX3JidHJlZV9sb2NrKTsKLQlpb3ZhX2luc2VydF9yYnRyZWUoJmlvdmFkLT5yYnJvb3QsIG5ld19pb3ZhKTsKLQlfX2NhY2hlZF9yYm5vZGVfaW5zZXJ0X3VwZGF0ZShpb3ZhZCwgbGltaXRfcGZuLCBuZXdfaW92YSk7Ci0Jc3Bpbl91bmxvY2soJmlvdmFkLT5pb3ZhX3JidHJlZV9sb2NrKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvdmFkLT5pb3ZhX2FsbG9jX2xvY2ssIGZsYWdzKTsKLQogCXJldHVybiBuZXdfaW92YTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92YS5oIGIvZHJpdmVycy9wY2kvaW92YS5oCmluZGV4IGQ1MjFiNWIuLjIyOGY2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdmEuaAorKysgYi9kcml2ZXJzL3BjaS9pb3ZhLmgKQEAgLTMsNyArMyw4IEBACiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5pbCBTIEtlc2hhdmFtdXJ0aHkgPGFuaWwucy5rZXNoYXZhbXVydGh5QGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IGU1Njk2NDUuLjcyZjc0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMTU4LDYgKzE1OCw3IEBACiAvKioKICAqIF9fcGNpX29zY19zdXBwb3J0X3NldCAtIHJlZ2lzdGVyIE9TIHN1cHBvcnQgdG8gRmlybXdhcmUKICAqIEBmbGFnczogT1Mgc3VwcG9ydCBiaXRzCisgKiBAaGlkOiBoYXJkd2FyZSBJRAogICoKICAqIFVwZGF0ZSBPUyBzdXBwb3J0IGZpZWxkcyBhbmQgZG9pbmcgYSBfT1NDIFF1ZXJ5IHRvIG9idGFpbiBhbiB1cGRhdGUKICAqIGZyb20gRmlybXdhcmUgb24gc3VwcG9ydGVkIGNvbnRyb2wgYml0cy4KQEAgLTI0MSw4ICsyNDIsNiBAQAogICoJY2hvb3NlIGZyb20gaGlnaGVzdCBwb3dlciBfU3hEIHRvIGxvd2VzdCBwb3dlciBfU3hXCiAgKiBlbHNlIC8vIG5vIF9QUlcgYXQgUy1zdGF0ZSB4CiAgKiAJY2hvb3NlIGhpZ2hlc3QgcG93ZXIgX1N4RCBvciBhbnkgbG93ZXIgcG93ZXIKLSAqCi0gKiBjdXJyZW50bHkgd2Ugc2ltcGx5IHJldHVybiBfU3hELCBpZiBwcmVzZW50LgogICovCiAKIHN0YXRpYyBwY2lfcG93ZXJfdCBhY3BpX3BjaV9jaG9vc2Vfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0yNzMsMjEgKzI3MiwyOSBAQAogewogCWFjcGlfaGFuZGxlIGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmZGV2LT5kZXYpOwogCWFjcGlfaGFuZGxlIHRtcDsKLQlzdGF0aWMgaW50IHN0YXRlX2NvbnZbXSA9IHsKLQkJWzBdID0gMCwKLQkJWzFdID0gMSwKLQkJWzJdID0gMiwKLQkJWzNdID0gMywKLQkJWzRdID0gMworCXN0YXRpYyBjb25zdCB1OCBzdGF0ZV9jb252W10gPSB7CisJCVtQQ0lfRDBdID0gQUNQSV9TVEFURV9EMCwKKwkJW1BDSV9EMV0gPSBBQ1BJX1NUQVRFX0QxLAorCQlbUENJX0QyXSA9IEFDUElfU1RBVEVfRDIsCisJCVtQQ0lfRDNob3RdID0gQUNQSV9TVEFURV9EMywKKwkJW1BDSV9EM2NvbGRdID0gQUNQSV9TVEFURV9EMwogCX07Ci0JaW50IGFjcGlfc3RhdGUgPSBzdGF0ZV9jb252WyhpbnQgX19mb3JjZSkgc3RhdGVdOwogCiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAtRU5PREVWOwogCS8qIElmIHRoZSBBQ1BJIGRldmljZSBoYXMgX0VKMCwgaWdub3JlIHRoZSBkZXZpY2UgKi8KIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRUowIiwgJnRtcCkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gYWNwaV9idXNfc2V0X3Bvd2VyKGhhbmRsZSwgYWNwaV9zdGF0ZSk7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQQ0lfRDA6CisJY2FzZSBQQ0lfRDE6CisJY2FzZSBQQ0lfRDI6CisJY2FzZSBQQ0lfRDNob3Q6CisJY2FzZSBQQ0lfRDNjb2xkOgorCQlyZXR1cm4gYWNwaV9idXNfc2V0X3Bvd2VyKGhhbmRsZSwgc3RhdGVfY29udltzdGF0ZV0pOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZTU3MWM3Mi4uZThkOTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMTgyLDE1ICsxODIsMTggQEAKIAlzdHJ1Y3QgbWVtcG9saWN5ICpvbGRwb2w7CiAJY3B1bWFza190IG9sZG1hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJaW50IG5vZGUgPSBwY2lidXNfdG9fbm9kZShkZXYtPmJ1cyk7Ci0JaWYgKG5vZGUgPj0gMCAmJiBub2RlX29ubGluZShub2RlKSkKLQkgICAgc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBub2RlX3RvX2NwdW1hc2sobm9kZSkpOworCisJaWYgKG5vZGUgPj0gMCkgeworCQlub2RlX3RvX2NwdW1hc2tfcHRyKG5vZGVjcHVtYXNrLCBub2RlKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgbm9kZWNwdW1hc2spOworCX0KIAkvKiBBbmQgc2V0IGRlZmF1bHQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5ICovCiAJb2xkcG9sID0gY3VycmVudC0+bWVtcG9saWN5OwogCWN1cnJlbnQtPm1lbXBvbGljeSA9IE5VTEw7CS8qIGZhbGwgYmFjayB0byBzeXN0ZW0gZGVmYXVsdCBwb2xpY3kgKi8KICNlbmRpZgogCWVycm9yID0gZHJ2LT5wcm9iZShkZXYsIGlkKTsKICNpZmRlZiBDT05GSUdfTlVNQQotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkbWFzayk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZG1hc2spOwogCWN1cnJlbnQtPm1lbXBvbGljeSA9IG9sZHBvbDsKICNlbmRpZgogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggOGRjZjE0NS4uMjcxZDQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIHN0YXRpYyBpbnQgc3lzZnNfaW5pdGlhbGl6ZWQ7CS8qID0gMCAqLwpAQCAtNzMsOCArNzQsMjMgQEAKIAogCW1hc2sgPSBwY2lidXNfdG9fY3B1bWFzayh0b19wY2lfZGV2KGRldiktPmJ1cyk7CiAJbGVuID0gY3B1bWFza19zY25wcmludGYoYnVmLCBQQUdFX1NJWkUtMiwgbWFzayk7Ci0Jc3RyY2F0KGJ1ZiwiXG4iKTsgCi0JcmV0dXJuIDErbGVuOworCWJ1ZltsZW4rK10gPSAnXG4nOworCWJ1ZltsZW5dID0gJ1wwJzsKKwlyZXR1cm4gbGVuOworfQorCisKK3N0YXRpYyBzc2l6ZV90IGxvY2FsX2NwdWxpc3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWNwdW1hc2tfdCBtYXNrOworCWludCBsZW47CisKKwltYXNrID0gcGNpYnVzX3RvX2NwdW1hc2sodG9fcGNpX2RldihkZXYpLT5idXMpOworCWxlbiA9IGNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLTIsIG1hc2spOworCWJ1ZltsZW4rK10gPSAnXG4nOworCWJ1ZltsZW5dID0gJ1wwJzsKKwlyZXR1cm4gbGVuOwogfQogCiAvKiBzaG93IHJlc291cmNlcyAqLwpAQCAtMjAxLDYgKzIxNyw3IEBACiAJX19BVFRSX1JPKGNsYXNzKSwKIAlfX0FUVFJfUk8oaXJxKSwKIAlfX0FUVFJfUk8obG9jYWxfY3B1cyksCisJX19BVFRSX1JPKGxvY2FsX2NwdWxpc3QpLAogCV9fQVRUUl9STyhtb2RhbGlhcyksCiAjaWZkZWYgQ09ORklHX05VTUEKIAlfX0FUVFJfUk8obnVtYV9ub2RlKSwKQEAgLTM0Miw2ICszNTksNTggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90CitwY2lfcmVhZF92cGQoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPQorCQl0b19wY2lfZGV2KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CisJaW50IGVuZDsKKwlpbnQgcmV0OworCisJaWYgKG9mZiA+IGJpbl9hdHRyLT5zaXplKQorCQljb3VudCA9IDA7CisJZWxzZSBpZiAoY291bnQgPiBiaW5fYXR0ci0+c2l6ZSAtIG9mZikKKwkJY291bnQgPSBiaW5fYXR0ci0+c2l6ZSAtIG9mZjsKKwllbmQgPSBvZmYgKyBjb3VudDsKKworCXdoaWxlIChvZmYgPCBlbmQpIHsKKwkJcmV0ID0gZGV2LT52cGQtPm9wcy0+cmVhZChkZXYsIG9mZiwgZW5kIC0gb2ZmLCBidWYpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWJ1ZiArPSByZXQ7CisJCW9mZiArPSByZXQ7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAorcGNpX3dyaXRlX3ZwZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCSAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPQorCQl0b19wY2lfZGV2KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CisJaW50IGVuZDsKKwlpbnQgcmV0OworCisJaWYgKG9mZiA+IGJpbl9hdHRyLT5zaXplKQorCQljb3VudCA9IDA7CisJZWxzZSBpZiAoY291bnQgPiBiaW5fYXR0ci0+c2l6ZSAtIG9mZikKKwkJY291bnQgPSBiaW5fYXR0ci0+c2l6ZSAtIG9mZjsKKwllbmQgPSBvZmYgKyBjb3VudDsKKworCXdoaWxlIChvZmYgPCBlbmQpIHsKKwkJcmV0ID0gZGV2LT52cGQtPm9wcy0+d3JpdGUoZGV2LCBvZmYsIGVuZCAtIG9mZiwgYnVmKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlidWYgKz0gcmV0OworCQlvZmYgKz0gcmV0OworCX0KKworCXJldHVybiBjb3VudDsKK30KKwogI2lmZGVmIEhBVkVfUENJX0xFR0FDWQogLyoqCiAgKiBwY2lfcmVhZF9sZWdhY3lfaW8gLSByZWFkIGJ5dGUocykgZnJvbSBsZWdhY3kgSS9PIHBvcnQgc3BhY2UKQEAgLTYxMCw3ICs2NzksNyBAQAogCiBpbnQgX19tdXN0X2NoZWNrIHBjaV9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqcm9tX2F0dHIgPSBOVUxMOworCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyID0gTlVMTDsKIAlpbnQgcmV0dmFsOwogCiAJaWYgKCFzeXNmc19pbml0aWFsaXplZCkKQEAgLTYyMywyMiArNjkyLDQxIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnI7CiAKKwkvKiBJZiB0aGUgZGV2aWNlIGhhcyBWUEQsIHRyeSB0byBleHBvc2UgaXQgaW4gc3lzZnMuICovCisJaWYgKHBkZXYtPnZwZCkgeworCQlhdHRyID0ga3phbGxvYyhzaXplb2YoKmF0dHIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGF0dHIpIHsKKwkJCXBkZXYtPnZwZC0+YXR0ciA9IGF0dHI7CisJCQlhdHRyLT5zaXplID0gcGRldi0+dnBkLT5vcHMtPmdldF9zaXplKHBkZXYpOworCQkJYXR0ci0+YXR0ci5uYW1lID0gInZwZCI7CisJCQlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUjsKKwkJCWF0dHItPnJlYWQgPSBwY2lfcmVhZF92cGQ7CisJCQlhdHRyLT53cml0ZSA9IHBjaV93cml0ZV92cGQ7CisJCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBhdHRyKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJfdnBkOworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX2NvbmZpZ19maWxlOworCQl9CisJfQorCiAJcmV0dmFsID0gcGNpX2NyZWF0ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKIAlpZiAocmV0dmFsKQotCQlnb3RvIGVycl9iaW5fZmlsZTsKKwkJZ290byBlcnJfdnBkX2ZpbGU7CiAKIAkvKiBJZiB0aGUgZGV2aWNlIGhhcyBhIFJPTSwgdHJ5IHRvIGV4cG9zZSBpdCBpbiBzeXNmcy4gKi8KIAlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBQQ0lfUk9NX1JFU09VUkNFKSB8fAogCSAgICAocGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9TSEFET1cpKSB7Ci0JCXJvbV9hdHRyID0ga3phbGxvYyhzaXplb2YoKnJvbV9hdHRyKSwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyb21fYXR0cikgewotCQkJcGRldi0+cm9tX2F0dHIgPSByb21fYXR0cjsKLQkJCXJvbV9hdHRyLT5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBQQ0lfUk9NX1JFU09VUkNFKTsKLQkJCXJvbV9hdHRyLT5hdHRyLm5hbWUgPSAicm9tIjsKLQkJCXJvbV9hdHRyLT5hdHRyLm1vZGUgPSBTX0lSVVNSOwotCQkJcm9tX2F0dHItPnJlYWQgPSBwY2lfcmVhZF9yb207Ci0JCQlyb21fYXR0ci0+d3JpdGUgPSBwY2lfd3JpdGVfcm9tOwotCQkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcm9tX2F0dHIpOworCQlhdHRyID0ga3phbGxvYyhzaXplb2YoKmF0dHIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGF0dHIpIHsKKwkJCXBkZXYtPnJvbV9hdHRyID0gYXR0cjsKKwkJCWF0dHItPnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpOworCQkJYXR0ci0+YXR0ci5uYW1lID0gInJvbSI7CisJCQlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVVNSOworCQkJYXR0ci0+cmVhZCA9IHBjaV9yZWFkX3JvbTsKKwkJCWF0dHItPndyaXRlID0gcGNpX3dyaXRlX3JvbTsKKwkJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIGF0dHIpOwogCQkJaWYgKHJldHZhbCkKIAkJCQlnb3RvIGVycl9yb207CiAJCX0gZWxzZSB7CkBAIC02NTAsMTYgKzczOCwyNCBAQAogCWlmIChwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHBkZXYpKQogCQlnb3RvIGVycl9yb21fZmlsZTsKIAorCXBjaWVfYXNwbV9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzKHBkZXYpOworCiAJcmV0dXJuIDA7CiAKIGVycl9yb21fZmlsZToKIAlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBQQ0lfUk9NX1JFU09VUkNFKSkKLQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcm9tX2F0dHIpOworCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBwZGV2LT5yb21fYXR0cik7CiBlcnJfcm9tOgotCWtmcmVlKHJvbV9hdHRyKTsKKwlrZnJlZShwZGV2LT5yb21fYXR0cik7CiBlcnJfcmVzb3VyY2VfZmlsZXM6CiAJcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKLWVycl9iaW5fZmlsZToKK2Vycl92cGRfZmlsZToKKwlpZiAocGRldi0+dnBkKSB7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnZwZC0+YXR0cik7CitlcnJfdnBkOgorCQlrZnJlZShwZGV2LT52cGQtPmF0dHIpOworCX0KK2Vycl9jb25maWdfZmlsZToKIAlpZiAocGRldi0+Y2ZnX3NpemUgPCA0MDk2KQogCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmcGNpX2NvbmZpZ19hdHRyKTsKIAllbHNlCkBAIC02NzksNiArNzc1LDEyIEBACiAJaWYgKCFzeXNmc19pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCisJcGNpZV9hc3BtX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMocGRldik7CisKKwlpZiAocGRldi0+dnBkKSB7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnZwZC0+YXR0cik7CisJCWtmcmVlKHBkZXYtPnZwZC0+YXR0cik7CisJfQogCWlmIChwZGV2LT5jZmdfc2l6ZSA8IDQwOTYpCiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2lfY29uZmlnX2F0dHIpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggYWUzZGY0Ni4uZTQ1NDhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4JLyogaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKi8KICNpbmNsdWRlICJwY2kuaCIKIApAQCAtMzE0LDI0ICszMTUsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfaHRfY2FwYWJpbGl0eSk7CiAKLXZvaWQgcGNpZV93YWl0X3BlbmRpbmdfdHJhbnNhY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgcG9zOwotCXUxNiByZWcxNjsKLQotCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7Ci0JaWYgKCFwb3MpCi0JCXJldHVybjsKLQl3aGlsZSAoMSkgewotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfREVWU1RBLCAmcmVnMTYpOwotCQlpZiAoIShyZWcxNiAmIFBDSV9FWFBfREVWU1RBX1RSUE5EKSkKLQkJCWJyZWFrOwotCQljcHVfcmVsYXgoKTsKLQl9Ci0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaWVfd2FpdF9wZW5kaW5nX3RyYW5zYWN0aW9uKTsKLQogLyoqCiAgKiBwY2lfZmluZF9wYXJlbnRfcmVzb3VyY2UgLSByZXR1cm4gcmVzb3VyY2UgcmVnaW9uIG9mIHBhcmVudCBidXMgb2YgZ2l2ZW4gcmVnaW9uCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBjb250YWlucyByZXNvdXJjZXMgdG8gYmUgc2VhcmNoZWQKQEAgLTQ0Miw3ICs0MjUsNyBAQAogCSAqLwogCWlmIChzdGF0ZSAhPSBQQ0lfRDAgJiYgZGV2LT5jdXJyZW50X3N0YXRlID4gc3RhdGUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiAlczogc3RhdGU9JWQsIGN1cnJlbnQgc3RhdGU9JWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKGRldiksIHN0YXRlLCBkZXYtPmN1cnJlbnRfc3RhdGUpOworCQkJX19mdW5jX18sIHBjaV9uYW1lKGRldiksIHN0YXRlLCBkZXYtPmN1cnJlbnRfc3RhdGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKGRldi0+Y3VycmVudF9zdGF0ZSA9PSBzdGF0ZSkKIAkJcmV0dXJuIDA7ICAgICAgICAvKiB3ZSdyZSBhbHJlYWR5IHRoZXJlICovCkBAIC01MTksNiArNTAyLDkgQEAKIAlpZiAobmVlZF9yZXN0b3JlKQogCQlwY2lfcmVzdG9yZV9iYXJzKGRldik7CiAKKwlpZiAoZGV2LT5idXMtPnNlbGYpCisJCXBjaWVfYXNwbV9wbV9zdGF0ZV9jaGFuZ2UoZGV2LT5idXMtPnNlbGYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1NCw2ICs1NDAsNyBAQAogCWNhc2UgUE1fRVZFTlRfUFJFVEhBVzoKIAkJLyogUkVWSVNJVCBib3RoIGZyZWV6ZSBhbmQgcHJlLXRoYXcgInNob3VsZCIgdXNlIEQwICovCiAJY2FzZSBQTV9FVkVOVF9TVVNQRU5EOgorCWNhc2UgUE1fRVZFTlRfSElCRVJOQVRFOgogCQlyZXR1cm4gUENJX0QzaG90OwogCWRlZmF1bHQ6CiAJCXByaW50aygiVW5yZWNvZ25pemVkIHN1c3BlbmQgZXZlbnQgJWRcbiIsIHN0YXRlLmV2ZW50KTsKQEAgLTkzNSw5ICs5MjIsNiBAQAogCWlmIChhdG9taWNfc3ViX3JldHVybigxLCAmZGV2LT5lbmFibGVfY250KSAhPSAwKQogCQlyZXR1cm47CiAKLQkvKiBXYWl0IGZvciBhbGwgdHJhbnNhY3Rpb25zIGFyZSBmaW5pc2hlZCBiZWZvcmUgZGlzYWJsaW5nIHRoZSBkZXZpY2UgKi8KLQlwY2llX3dhaXRfcGVuZGluZ190cmFuc2FjdGlvbihkZXYpOwotCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKIAlpZiAocGNpX2NvbW1hbmQgJiBQQ0lfQ09NTUFORF9NQVNURVIpIHsKIAkJcGNpX2NvbW1hbmQgJj0gflBDSV9DT01NQU5EX01BU1RFUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggZWFiZWIxZi4uMGE0OTdjMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0xOCw2ICsxOCwyNSBAQAogZXh0ZXJuIGludCBwY2lfdXNlcl93cml0ZV9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUxNiB2YWwpOwogZXh0ZXJuIGludCBwY2lfdXNlcl93cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1MzIgdmFsKTsKIAorc3RydWN0IHBjaV92cGRfb3BzIHsKKwlpbnQgKCpyZWFkKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgc2l6ZSwgY2hhciAqYnVmKTsKKwlpbnQgKCp3cml0ZSkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBvcywgaW50IHNpemUsIGNvbnN0IGNoYXIgKmJ1Zik7CisJaW50ICgqZ2V0X3NpemUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK307CisKK3N0cnVjdCBwY2lfdnBkIHsKKwlzdHJ1Y3QgcGNpX3ZwZF9vcHMgKm9wczsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cjsgLyogZGVzY3JpcHRvciBmb3Igc3lzZnMgVlBEIGVudHJ5ICovCit9OworCitleHRlcm4gaW50IHBjaV92cGRfcGNpMjJfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdnBkX3JlbGVhc2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT52cGQpCisJCWRldi0+dnBkLT5vcHMtPnJlbGVhc2UoZGV2KTsKK30KKwogLyogUENJIC9wcm9jIGZ1bmN0aW9ucyAqLwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBleHRlcm4gaW50IHBjaV9wcm9jX2F0dGFjaF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcgYi9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKaW5kZXggMjg3YTkzMS4uMjViMDRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwpAQCAtMjYsMyArMjYsMjMgQEAKIAkgIFdoZW4gaW4gZG91YnQsIHNheSBOLgogCiBzb3VyY2UgImRyaXZlcnMvcGNpL3BjaWUvYWVyL0tjb25maWciCisKKyMKKyMgUENJIEV4cHJlc3MgQVNQTQorIworY29uZmlnIFBDSUVBU1BNCisJYm9vbCAiUENJIEV4cHJlc3MgQVNQTSBzdXBwb3J0KEV4cGVyaW1lbnRhbCkiCisJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIFBDSUVQT1JUQlVTCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBlbmFibGVzIFBDSSBFeHByZXNzIEFTUE0gKEFjdGl2ZSBTdGF0ZSBQb3dlciBNYW5hZ2VtZW50KSBhbmQKKwkgIENsb2NrIFBvd2VyIE1hbmFnZW1lbnQuIEFTUE0gc3VwcG9ydHMgc3RhdGUgTDAvTDBzL0wxLgorCisJICBXaGVuIGluIGRvdWJ0LCBzYXkgTi4KK2NvbmZpZyBQQ0lFQVNQTV9ERUJVRworCWJvb2wgIkRlYnVnIFBDSSBFeHByZXNzIEFTUE0iCisJZGVwZW5kcyBvbiBQQ0lFQVNQTQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBQQ0kgRXhwcmVzcyBBU1BNIGRlYnVnIHN1cHBvcnQuIEl0IHdpbGwgYWRkIHBlci1kZXZpY2UKKwkgIGludGVyZmFjZSB0byBjb250cm9sIEFTUE0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQppbmRleCBlMDBmYjk5Li4xMWY2YmIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlCkBAIC0yLDYgKzIsOSBAQAogIyBNYWtlZmlsZSBmb3IgUENJLUV4cHJlc3MgUE9SVCBEcml2ZXIKICMKIAorIyBCdWlsZCBQQ0kgRXhwcmVzcyBBU1BNIGlmIG5lZWRlZAorb2JqLSQoQ09ORklHX1BDSUVBU1BNKQkJKz0gYXNwbS5vCisKIHBjaWVwb3J0ZHJ2LXkJCQk6PSBwb3J0ZHJ2X2NvcmUubyBwb3J0ZHJ2X3BjaS5vIHBvcnRkcnZfYnVzLm8KIAogb2JqLSQoQ09ORklHX1BDSUVQT1JUQlVTKQkrPSBwY2llcG9ydGRydi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCmluZGV4IDdhNjJmN2QuLjA3YzNiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkvKiBBbGxvYyBycGMgZGF0YSBzdHJ1Y3R1cmUgKi8KIAlpZiAoIShycGMgPSBhZXJfYWxsb2NfcnBjKGRldikpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogQWxsb2MgcnBjIGZhaWxzIG9uIFBDSUUgZGV2aWNlWyVzXVxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZGV2aWNlLT5idXNfaWQpOworCQkJX19mdW5jX18sIGRldmljZS0+YnVzX2lkKTsKIAkJYWVyX3JlbW92ZShkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yMjksNyArMjI5LDcgQEAKIAlpZiAoKHN0YXR1cyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBhZXJfaXJxLCBJUlFGX1NIQVJFRCwgImFlcmRydiIsCiAJCQkJZGV2KSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXF1ZXN0IElTUiBmYWlscyBvbiBQQ0lFIGRldmljZVslc11cbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGRldmljZS0+YnVzX2lkKTsKKwkJCV9fZnVuY19fLCBkZXZpY2UtPmJ1c19pZCk7CiAJCWFlcl9yZW1vdmUoZGV2KTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2FjcGkuYwppbmRleCA4YzE5OWFlLi45NmFjNTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMKQEAgLTMzLDggKzMzLDExIEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwY2llZGV2LT5wb3J0OwogCWFjcGlfaGFuZGxlIGhhbmRsZSA9IDA7CiAKKwlpZiAoYWNwaV9wY2lfZGlzYWJsZWQpCisJCXJldHVybiAtMTsKKwogCS8qIEZpbmQgcm9vdCBob3N0IGJyaWRnZSAqLwotCXdoaWxlIChwZGV2LT5idXMgJiYgcGRldi0+YnVzLT5zZWxmKQorCXdoaWxlIChwZGV2LT5idXMtPnNlbGYpCiAJCXBkZXYgPSBwZGV2LT5idXMtPnNlbGY7CiAJaGFuZGxlID0gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKAogCQlwY2lfZG9tYWluX25yKHBkZXYtPmJ1cyksIHBkZXYtPmJ1cy0+bnVtYmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCmluZGV4IDNjMGQ4ZDEuLmFhYTgyMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwpAQCAtMTE3LDYgKzExNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiAwCiBpbnQgcGNpX2NsZWFudXBfYWVyX2NvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaW50IHBvczsKQEAgLTEzMSw2ICsxMzIsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiBzdGF0aWMgaW50IGZpbmRfZGV2aWNlX2l0ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpkYXRhKQogewpAQCAtNjg5LDcgKzY5MSw3IEBACiAJCQllX2luZm8uZmxhZ3MgfD0gQUVSX01VTFRJX0VSUk9SX1ZBTElEX0ZMQUc7CiAJCWlmICghKHNfZGV2aWNlID0gZmluZF9zb3VyY2VfZGV2aWNlKHBfZGV2aWNlLT5wb3J0LCBpZCkpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXMtPmNhbid0IGZpbmQgZGV2aWNlIG9mIElEJTA0eFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGlkKTsKKwkJCQlfX2Z1bmNfXywgaWQpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGdldF9kZXZpY2VfZXJyb3JfaW5mbyh0b19wY2lfZGV2KHNfZGV2aWNlKSwgJmVfaW5mbykgPT0KQEAgLTc1Nyw1ICs3NTksNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChwY2lfY2xlYW51cF9hZXJfY29ycmVjdF9lcnJvcl9zdGF0dXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmVkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYwpAQCAtMCwwICsxLDgxMSBAQAorLyoKKyAqIEZpbGU6CWRyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCisgKiBFbmFibGluZyBQQ0lFIGxpbmsgTDBzL0wxIHN0YXRlIGFuZCBDbG9jayBQb3dlciBNYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEludGVsCisgKiBDb3B5cmlnaHQgKEMpIFpoYW5nIFlhbm1pbiAoeWFubWluLnpoYW5nQGludGVsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgU2hhb2h1YSBMaSAoc2hhb2h1YS5saUBpbnRlbC5jb20pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX3JlZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgorI2luY2x1ZGUgIi4uL3BjaS5oIgorCisjaWZkZWYgTU9EVUxFX1BBUkFNX1BSRUZJWAorI3VuZGVmIE1PRFVMRV9QQVJBTV9QUkVGSVgKKyNlbmRpZgorI2RlZmluZSBNT0RVTEVfUEFSQU1fUFJFRklYICJwY2llX2FzcG0uIgorCitzdHJ1Y3QgZW5kcG9pbnRfc3RhdGUgeworCXVuc2lnbmVkIGludCBsMHNfYWNjZXB0YWJsZV9sYXRlbmN5OworCXVuc2lnbmVkIGludCBsMV9hY2NlcHRhYmxlX2xhdGVuY3k7Cit9OworCitzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmlsaW5nOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJLyogQVNQTSBzdGF0ZSAqLworCXVuc2lnbmVkIGludCBzdXBwb3J0X3N0YXRlOworCXVuc2lnbmVkIGludCBlbmFibGVkX3N0YXRlOworCXVuc2lnbmVkIGludCBiaW9zX2FzcG1fc3RhdGU7CisJLyogdXBzdHJlYW0gY29tcG9uZW50ICovCisJdW5zaWduZWQgaW50IGwwc191cHBlcl9sYXRlbmN5OworCXVuc2lnbmVkIGludCBsMV91cHBlcl9sYXRlbmN5OworCS8qIGRvd25zdHJlYW0gY29tcG9uZW50ICovCisJdW5zaWduZWQgaW50IGwwc19kb3duX2xhdGVuY3k7CisJdW5zaWduZWQgaW50IGwxX2Rvd25fbGF0ZW5jeTsKKwkvKiBDbG9jayBQTSBzdGF0ZSovCisJdW5zaWduZWQgaW50IGNsa19wbV9jYXBhYmxlOworCXVuc2lnbmVkIGludCBjbGtfcG1fZW5hYmxlZDsKKwl1bnNpZ25lZCBpbnQgYmlvc19jbGtfc3RhdGU7CisKKwkvKgorCSAqIEEgcGNpZSBkb3duc3RyZWFtIHBvcnQgb25seSBoYXMgb25lIHNsb3QgdW5kZXIgaXQsIHNvIGF0IG1vc3QgdGhlcmUKKwkgKiBhcmUgOCBmdW5jdGlvbnMKKwkgKi8KKwlzdHJ1Y3QgZW5kcG9pbnRfc3RhdGUgZW5kcG9pbnRzWzhdOworfTsKKworc3RhdGljIGludCBhc3BtX2Rpc2FibGVkOworc3RhdGljIERFRklORV9NVVRFWChhc3BtX2xvY2spOworc3RhdGljIExJU1RfSEVBRChsaW5rX2xpc3QpOworCisjZGVmaW5lIFBPTElDWV9ERUZBVUxUIDAJLyogQklPUyBkZWZhdWx0IHNldHRpbmcgKi8KKyNkZWZpbmUgUE9MSUNZX1BFUkZPUk1BTkNFIDEJLyogaGlnaCBwZXJmb3JtYW5jZSAqLworI2RlZmluZSBQT0xJQ1lfUE9XRVJTQVZFIDIJLyogaGlnaCBwb3dlciBzYXZpbmcgKi8KK3N0YXRpYyBpbnQgYXNwbV9wb2xpY3k7CitzdGF0aWMgY29uc3QgY2hhciAqcG9saWN5X3N0cltdID0geworCVtQT0xJQ1lfREVGQVVMVF0gPSAiZGVmYXVsdCIsCisJW1BPTElDWV9QRVJGT1JNQU5DRV0gPSAicGVyZm9ybWFuY2UiLAorCVtQT0xJQ1lfUE9XRVJTQVZFXSA9ICJwb3dlcnNhdmUiCit9OworCitzdGF0aWMgaW50IHBvbGljeV90b19hc3BtX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSBwZGV2LT5saW5rX3N0YXRlOworCisJc3dpdGNoIChhc3BtX3BvbGljeSkgeworCWNhc2UgUE9MSUNZX1BFUkZPUk1BTkNFOgorCQkvKiBEaXNhYmxlIEFTUE0gYW5kIENsb2NrIFBNICovCisJCXJldHVybiAwOworCWNhc2UgUE9MSUNZX1BPV0VSU0FWRToKKwkJLyogRW5hYmxlIEFTUE0gTDBzL0wxICovCisJCXJldHVybiBQQ0lFX0xJTktfU1RBVEVfTDBTfFBDSUVfTElOS19TVEFURV9MMTsKKwljYXNlIFBPTElDWV9ERUZBVUxUOgorCQlyZXR1cm4gbGlua19zdGF0ZS0+Ymlvc19hc3BtX3N0YXRlOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2xpY3lfdG9fY2xrcG1fc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaWVfbGlua19zdGF0ZSAqbGlua19zdGF0ZSA9IHBkZXYtPmxpbmtfc3RhdGU7CisKKwlzd2l0Y2ggKGFzcG1fcG9saWN5KSB7CisJY2FzZSBQT0xJQ1lfUEVSRk9STUFOQ0U6CisJCS8qIERpc2FibGUgQVNQTSBhbmQgQ2xvY2sgUE0gKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBQT0xJQ1lfUE9XRVJTQVZFOgorCQkvKiBEaXNhYmxlIENsb2NrIFBNICovCisJCXJldHVybiAxOworCWNhc2UgUE9MSUNZX0RFRkFVTFQ6CisJCXJldHVybiBsaW5rX3N0YXRlLT5iaW9zX2Nsa19zdGF0ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaWVfc2V0X2Nsb2NrX3BtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBwY2lfZGV2ICpjaGlsZF9kZXY7CisJaW50IHBvczsKKwl1MTYgcmVnMTY7CisJc3RydWN0IHBjaWVfbGlua19zdGF0ZSAqbGlua19zdGF0ZSA9IHBkZXYtPmxpbmtfc3RhdGU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkX2RldiwgJnBkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGNoaWxkX2RldiwgUENJX0NBUF9JRF9FWFApOworCQlpZiAoIXBvcykKKwkJCXJldHVybjsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoY2hpbGRfZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnJlZzE2KTsKKwkJaWYgKGVuYWJsZSkKKwkJCXJlZzE2IHw9IFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTjsKKwkJZWxzZQorCQkJcmVnMTYgJj0gflBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTjsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaWxkX2RldiwgcG9zICsgUENJX0VYUF9MTktDVEwsIHJlZzE2KTsKKwl9CisJbGlua19zdGF0ZS0+Y2xrX3BtX2VuYWJsZWQgPSAhIWVuYWJsZTsKK30KKworc3RhdGljIHZvaWQgcGNpZV9jaGVja19jbG9ja19wbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcG9zOworCXUzMiByZWczMjsKKwl1MTYgcmVnMTY7CisJaW50IGNhcGFibGUgPSAxLCBlbmFibGVkID0gMTsKKwlzdHJ1Y3QgcGNpX2RldiAqY2hpbGRfZGV2OworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSBwZGV2LT5saW5rX3N0YXRlOworCisJLyogQWxsIGZ1bmN0aW9ucyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBjYXAgYW5kIHN0YXRlLCB0YWtlIHRoZSB3b3JzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGRfZGV2LCAmcGRldi0+c3Vib3JkaW5hdGUtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoY2hpbGRfZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJCWlmICghcG9zKQorCQkJcmV0dXJuOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoY2hpbGRfZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NBUCwgJnJlZzMyKTsKKwkJaWYgKCEocmVnMzIgJiBQQ0lfRVhQX0xOS0NBUF9DTEtQTSkpIHsKKwkJCWNhcGFibGUgPSAwOworCQkJZW5hYmxlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlwY2lfcmVhZF9jb25maWdfd29yZChjaGlsZF9kZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCAmcmVnMTYpOworCQlpZiAoIShyZWcxNiAmIFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTikpCisJCQllbmFibGVkID0gMDsKKwl9CisJbGlua19zdGF0ZS0+Y2xrX3BtX2NhcGFibGUgPSBjYXBhYmxlOworCWxpbmtfc3RhdGUtPmNsa19wbV9lbmFibGVkID0gZW5hYmxlZDsKKwlsaW5rX3N0YXRlLT5iaW9zX2Nsa19zdGF0ZSA9IGVuYWJsZWQ7CisJcGNpZV9zZXRfY2xvY2tfcG0ocGRldiwgcG9saWN5X3RvX2Nsa3BtX3N0YXRlKHBkZXYpKTsKK30KKworLyoKKyAqIHBjaWVfYXNwbV9jb25maWd1cmVfY29tbW9uX2Nsb2NrOiBjaGVjayBpZiB0aGUgMiBlbmRzIG9mIGEgbGluaworICogICBjb3VsZCB1c2UgY29tbW9uIGNsb2NrLiBJZiB0aGV5IGFyZSwgY29uZmlndXJlIHRoZW0gdG8gdXNlIHRoZQorICogICBjb21tb24gY2xvY2suIFRoYXQgd2lsbCByZWR1Y2UgdGhlIEFTUE0gc3RhdGUgZXhpdCBsYXRlbmN5LgorICovCitzdGF0aWMgdm9pZCBwY2llX2FzcG1fY29uZmlndXJlX2NvbW1vbl9jbG9jayhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcG9zLCBjaGlsZF9wb3M7CisJdTE2IHJlZzE2ID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqY2hpbGRfZGV2OworCWludCBzYW1lX2Nsb2NrID0gMTsKKworCS8qCisJICogYWxsIGZ1bmN0aW9ucyBvZiBhIHNsb3Qgc2hvdWxkIGhhdmUgdGhlIHNhbWUgU2xvdCBDbG9jaworCSAqIENvbmZpZ3VyYXRpb24sIHNvIGp1c3QgY2hlY2sgb25lIGZ1bmN0aW9uCisJICogKi8KKwljaGlsZF9kZXYgPSBsaXN0X2VudHJ5KHBkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzLm5leHQsIHN0cnVjdCBwY2lfZGV2LAorCQlidXNfbGlzdCk7CisJQlVHX09OKCFjaGlsZF9kZXYtPmlzX3BjaWUpOworCisJLyogQ2hlY2sgZG93bnN0cmVhbSBjb21wb25lbnQgaWYgYml0IFNsb3QgQ2xvY2sgQ29uZmlndXJhdGlvbiBpcyAxICovCisJY2hpbGRfcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShjaGlsZF9kZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChjaGlsZF9kZXYsIGNoaWxkX3BvcyArIFBDSV9FWFBfTE5LU1RBLCAmcmVnMTYpOworCWlmICghKHJlZzE2ICYgUENJX0VYUF9MTktTVEFfU0xDKSkKKwkJc2FtZV9jbG9jayA9IDA7CisKKwkvKiBDaGVjayB1cHN0cmVhbSBjb21wb25lbnQgaWYgYml0IFNsb3QgQ2xvY2sgQ29uZmlndXJhdGlvbiBpcyAxICovCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX0VYUF9MTktTVEEsICZyZWcxNik7CisJaWYgKCEocmVnMTYgJiBQQ0lfRVhQX0xOS1NUQV9TTEMpKQorCQlzYW1lX2Nsb2NrID0gMDsKKworCS8qIENvbmZpZ3VyZSBkb3duc3RyZWFtIGNvbXBvbmVudCwgYWxsIGZ1bmN0aW9ucyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGRfZGV2LCAmcGRldi0+c3Vib3JkaW5hdGUtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWNoaWxkX3BvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoY2hpbGRfZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGNoaWxkX2RldiwgY2hpbGRfcG9zICsgUENJX0VYUF9MTktDVEwsCisJCQkmcmVnMTYpOworCQlpZiAoc2FtZV9jbG9jaykKKwkJCXJlZzE2IHw9IFBDSV9FWFBfTE5LQ1RMX0NDQzsKKwkJZWxzZQorCQkJcmVnMTYgJj0gflBDSV9FWFBfTE5LQ1RMX0NDQzsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaWxkX2RldiwgY2hpbGRfcG9zICsgUENJX0VYUF9MTktDVEwsCisJCQlyZWcxNik7CisJfQorCisJLyogQ29uZmlndXJlIHVwc3RyZWFtIGNvbXBvbmVudCAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCAmcmVnMTYpOworCWlmIChzYW1lX2Nsb2NrKQorCQlyZWcxNiB8PSBQQ0lfRVhQX0xOS0NUTF9DQ0M7CisJZWxzZQorCQlyZWcxNiAmPSB+UENJX0VYUF9MTktDVExfQ0NDOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgcmVnMTYpOworCisJLyogcmV0cmFpbiBsaW5rICovCisJcmVnMTYgfD0gUENJX0VYUF9MTktDVExfUkw7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCByZWcxNik7CisKKwkvKiBXYWl0IGZvciBsaW5rIHRyYWluaW5nIGVuZCAqLworCXdoaWxlICgxKSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfTE5LU1RBLCAmcmVnMTYpOworCQlpZiAoIShyZWcxNiAmIFBDSV9FWFBfTE5LU1RBX0xUKSkKKwkJCWJyZWFrOworCQljcHVfcmVsYXgoKTsKKwl9Cit9CisKKy8qCisgKiBjYWxjX0wwU19sYXRlbmN5OiBDb252ZXJ0IEwwcyBsYXRlbmN5IGVuY29kaW5nIHRvIG5zCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19MMFNfbGF0ZW5jeSh1bnNpZ25lZCBpbnQgbGF0ZW5jeV9lbmNvZGluZywgaW50IGFjKQoreworCXVuc2lnbmVkIGludCBucyA9IDY0OworCisJaWYgKGxhdGVuY3lfZW5jb2RpbmcgPT0gMHg3KSB7CisJCWlmIChhYykKKwkJCW5zID0gLTFVOworCQllbHNlCisJCQlucyA9IDUqMTAwMDsgLyogPiA0dXMgKi8KKwl9IGVsc2UKKwkJbnMgKj0gKDEgPDwgbGF0ZW5jeV9lbmNvZGluZyk7CisJcmV0dXJuIG5zOworfQorCisvKgorICogY2FsY19MMV9sYXRlbmN5OiBDb252ZXJ0IEwxIGxhdGVuY3kgZW5jb2RpbmcgdG8gbnMKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX0wxX2xhdGVuY3kodW5zaWduZWQgaW50IGxhdGVuY3lfZW5jb2RpbmcsIGludCBhYykKK3sKKwl1bnNpZ25lZCBpbnQgbnMgPSAxMDAwOworCisJaWYgKGxhdGVuY3lfZW5jb2RpbmcgPT0gMHg3KSB7CisJCWlmIChhYykKKwkJCW5zID0gLTFVOworCQllbHNlCisJCQlucyA9IDY1KjEwMDA7IC8qID4gNjR1cyAqLworCX0gZWxzZQorCQlucyAqPSAoMSA8PCBsYXRlbmN5X2VuY29kaW5nKTsKKwlyZXR1cm4gbnM7Cit9CisKK3N0YXRpYyB2b2lkIHBjaWVfYXNwbV9nZXRfY2FwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICpzdGF0ZSwKKwl1bnNpZ25lZCBpbnQgKmwwcywgdW5zaWduZWQgaW50ICpsMSwgdW5zaWduZWQgaW50ICplbmFibGVkKQoreworCWludCBwb3M7CisJdTE2IHJlZzE2OworCXUzMiByZWczMjsKKwl1bnNpZ25lZCBpbnQgbGF0ZW5jeTsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NBUCwgJnJlZzMyKTsKKwkqc3RhdGUgPSAocmVnMzIgJiBQQ0lfRVhQX0xOS0NBUF9BU1BNUykgPj4gMTA7CisJaWYgKCpzdGF0ZSAhPSBQQ0lFX0xJTktfU1RBVEVfTDBTICYmCisJCSpzdGF0ZSAhPSAoUENJRV9MSU5LX1NUQVRFX0wxfFBDSUVfTElOS19TVEFURV9MMFMpKQorCQkqc3RhdGUgPSAwOworCWlmICgqc3RhdGUgPT0gMCkKKwkJcmV0dXJuOworCisJbGF0ZW5jeSA9IChyZWczMiAmIFBDSV9FWFBfTE5LQ0FQX0wwU0VMKSA+PiAxMjsKKwkqbDBzID0gY2FsY19MMFNfbGF0ZW5jeShsYXRlbmN5LCAwKTsKKwlpZiAoKnN0YXRlICYgUENJRV9MSU5LX1NUQVRFX0wxKSB7CisJCWxhdGVuY3kgPSAocmVnMzIgJiBQQ0lfRVhQX0xOS0NBUF9MMUVMKSA+PiAxNTsKKwkJKmwxID0gY2FsY19MMV9sYXRlbmN5KGxhdGVuY3ksIDApOworCX0KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnJlZzE2KTsKKwkqZW5hYmxlZCA9IHJlZzE2ICYgKFBDSUVfTElOS19TVEFURV9MMFN8UENJRV9MSU5LX1NUQVRFX0wxKTsKK30KKworc3RhdGljIHZvaWQgcGNpZV9hc3BtX2NhcF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpjaGlsZF9kZXY7CisJdTMyIHN0YXRlLCB0bXA7CisJc3RydWN0IHBjaWVfbGlua19zdGF0ZSAqbGlua19zdGF0ZSA9IHBkZXYtPmxpbmtfc3RhdGU7CisKKwkvKiB1cHN0cmVhbSBjb21wb25lbnQgc3RhdGVzICovCisJcGNpZV9hc3BtX2dldF9jYXBfZGV2aWNlKHBkZXYsICZsaW5rX3N0YXRlLT5zdXBwb3J0X3N0YXRlLAorCQkmbGlua19zdGF0ZS0+bDBzX3VwcGVyX2xhdGVuY3ksCisJCSZsaW5rX3N0YXRlLT5sMV91cHBlcl9sYXRlbmN5LAorCQkmbGlua19zdGF0ZS0+ZW5hYmxlZF9zdGF0ZSk7CisJLyogZG93bnN0cmVhbSBjb21wb25lbnQgc3RhdGVzLCBhbGwgZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUgc2V0dGluZyAqLworCWNoaWxkX2RldiA9IGxpc3RfZW50cnkocGRldi0+c3Vib3JkaW5hdGUtPmRldmljZXMubmV4dCwgc3RydWN0IHBjaV9kZXYsCisJCWJ1c19saXN0KTsKKwlwY2llX2FzcG1fZ2V0X2NhcF9kZXZpY2UoY2hpbGRfZGV2LCAmc3RhdGUsCisJCSZsaW5rX3N0YXRlLT5sMHNfZG93bl9sYXRlbmN5LAorCQkmbGlua19zdGF0ZS0+bDFfZG93bl9sYXRlbmN5LAorCQkmdG1wKTsKKwlsaW5rX3N0YXRlLT5zdXBwb3J0X3N0YXRlICY9IHN0YXRlOworCWlmICghbGlua19zdGF0ZS0+c3VwcG9ydF9zdGF0ZSkKKwkJcmV0dXJuOworCWxpbmtfc3RhdGUtPmVuYWJsZWRfc3RhdGUgJj0gbGlua19zdGF0ZS0+c3VwcG9ydF9zdGF0ZTsKKwlsaW5rX3N0YXRlLT5iaW9zX2FzcG1fc3RhdGUgPSBsaW5rX3N0YXRlLT5lbmFibGVkX3N0YXRlOworCisJLyogRU5EUE9JTlQgc3RhdGVzKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkX2RldiwgJnBkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlpbnQgcG9zOworCQl1MzIgcmVnMzI7CisJCXVuc2lnbmVkIGludCBsYXRlbmN5OworCQlzdHJ1Y3QgZW5kcG9pbnRfc3RhdGUgKmVwX3N0YXRlID0KKwkJCSZsaW5rX3N0YXRlLT5lbmRwb2ludHNbUENJX0ZVTkMoY2hpbGRfZGV2LT5kZXZmbildOworCisJCWlmIChjaGlsZF9kZXYtPnBjaWVfdHlwZSAhPSBQQ0lfRVhQX1RZUEVfRU5EUE9JTlQgJiYKKwkJCWNoaWxkX2Rldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9MRUdfRU5EKQorCQkJY29udGludWU7CisKKwkJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShjaGlsZF9kZXYsIFBDSV9DQVBfSURfRVhQKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGNoaWxkX2RldiwgcG9zICsgUENJX0VYUF9ERVZDQVAsICZyZWczMik7CisJCWxhdGVuY3kgPSAocmVnMzIgJiBQQ0lfRVhQX0RFVkNBUF9MMFMpID4+IDY7CisJCWxhdGVuY3kgPSBjYWxjX0wwU19sYXRlbmN5KGxhdGVuY3ksIDEpOworCQllcF9zdGF0ZS0+bDBzX2FjY2VwdGFibGVfbGF0ZW5jeSA9IGxhdGVuY3k7CisJCWlmIChsaW5rX3N0YXRlLT5zdXBwb3J0X3N0YXRlICYgUENJRV9MSU5LX1NUQVRFX0wxKSB7CisJCQlsYXRlbmN5ID0gKHJlZzMyICYgUENJX0VYUF9ERVZDQVBfTDEpID4+IDk7CisJCQlsYXRlbmN5ID0gY2FsY19MMV9sYXRlbmN5KGxhdGVuY3ksIDEpOworCQkJZXBfc3RhdGUtPmwxX2FjY2VwdGFibGVfbGF0ZW5jeSA9IGxhdGVuY3k7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19wY2llX2FzcG1fY2hlY2tfc3RhdGVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGFyZW50X2RldiwgKnRtcF9kZXY7CisJdW5zaWduZWQgaW50IGxhdGVuY3ksIGwxX2xhdGVuY3kgPSAwOworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGU7CisJc3RydWN0IGVuZHBvaW50X3N0YXRlICplcF9zdGF0ZTsKKworCXBhcmVudF9kZXYgPSBwZGV2LT5idXMtPnNlbGY7CisJbGlua19zdGF0ZSA9IHBhcmVudF9kZXYtPmxpbmtfc3RhdGU7CisJc3RhdGUgJj0gbGlua19zdGF0ZS0+c3VwcG9ydF9zdGF0ZTsKKwlpZiAoc3RhdGUgPT0gMCkKKwkJcmV0dXJuIDA7CisJZXBfc3RhdGUgPSAmbGlua19zdGF0ZS0+ZW5kcG9pbnRzW1BDSV9GVU5DKHBkZXYtPmRldmZuKV07CisKKwkvKgorCSAqIENoZWNrIGxhdGVuY3kgZm9yIGVuZHBvaW50IGRldmljZS4KKwkgKiBUQkQ6IFRoZSBsYXRlbmN5IGZyb20gdGhlIGVuZHBvaW50IHRvIHJvb3QgY29tcGxleCB2YXJ5IHBlcgorCSAqIHN3aXRjaCdzIHVwc3RyZWFtIGxpbmsgc3RhdGUgYWJvdmUgdGhlIGRldmljZS4gSGVyZSB3ZSBqdXN0IGRvIGEKKwkgKiBzaW1wbGUgY2hlY2sgd2hpY2ggYXNzdW1lcyBhbGwgbGlua3MgYWJvdmUgdGhlIGRldmljZSBjYW4gYmUgaW4gTDEKKwkgKiBzdGF0ZSwgdGhhdCBpcyB3ZSBqdXN0IGNvbnNpZGVyIHRoZSB3b3JzdCBjYXNlLiBJZiBzd2l0Y2gncyB1cHN0cmVhbQorCSAqIGxpbmsgY2FuJ3QgYmUgcHV0IGludG8gTDBTL0wxLCB0aGVuIG91ciBjaGVjayBpcyB0b28gc3RyaWN0bHkuCisJICovCisJdG1wX2RldiA9IHBkZXY7CisJd2hpbGUgKHN0YXRlICYgKFBDSUVfTElOS19TVEFURV9MMFMgfCBQQ0lFX0xJTktfU1RBVEVfTDEpKSB7CisJCXBhcmVudF9kZXYgPSB0bXBfZGV2LT5idXMtPnNlbGY7CisJCWxpbmtfc3RhdGUgPSBwYXJlbnRfZGV2LT5saW5rX3N0YXRlOworCQlpZiAoc3RhdGUgJiBQQ0lFX0xJTktfU1RBVEVfTDBTKSB7CisJCQlsYXRlbmN5ID0gbWF4X3QodW5zaWduZWQgaW50LAorCQkJCQlsaW5rX3N0YXRlLT5sMHNfdXBwZXJfbGF0ZW5jeSwKKwkJCQkJbGlua19zdGF0ZS0+bDBzX2Rvd25fbGF0ZW5jeSk7CisJCQlpZiAobGF0ZW5jeSA+IGVwX3N0YXRlLT5sMHNfYWNjZXB0YWJsZV9sYXRlbmN5KQorCQkJCXN0YXRlICY9IH5QQ0lFX0xJTktfU1RBVEVfTDBTOworCQl9CisJCWlmIChzdGF0ZSAmIFBDSUVfTElOS19TVEFURV9MMSkgeworCQkJbGF0ZW5jeSA9IG1heF90KHVuc2lnbmVkIGludCwKKwkJCQkJbGlua19zdGF0ZS0+bDFfdXBwZXJfbGF0ZW5jeSwKKwkJCQkJbGlua19zdGF0ZS0+bDFfZG93bl9sYXRlbmN5KTsKKwkJCWlmIChsYXRlbmN5ICsgbDFfbGF0ZW5jeSA+CisJCQkJCWVwX3N0YXRlLT5sMV9hY2NlcHRhYmxlX2xhdGVuY3kpCisJCQkJc3RhdGUgJj0gflBDSUVfTElOS19TVEFURV9MMTsKKwkJfQorCQlpZiAoIXBhcmVudF9kZXYtPmJ1cy0+c2VsZikgLyogcGFyZW50X2RldiBpcyBhIHJvb3QgcG9ydCAqLworCQkJYnJlYWs7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIHBhcmVudF9kZXYgaXMgdGhlIGRvd25zdHJlYW0gcG9ydCBvZiBhIHN3aXRjaCwgbWFrZQorCQkJICogdG1wX2RldiB0aGUgdXBzdHJlYW0gcG9ydCBvZiB0aGUgc3dpdGNoCisJCQkgKi8KKwkJCXRtcF9kZXYgPSBwYXJlbnRfZGV2LT5idXMtPnNlbGY7CisJCQkvKgorCQkJICogZXZlcnkgc3dpdGNoIG9uIHRoZSBwYXRoIHRvIHJvb3QgY29tcGxleCBuZWVkIDEgbW9yZQorCQkJICogbWljcm9zZWNvbmQgZm9yIEwxLiBTcGVjIGRvZXNuJ3QgbWVudGlvbiBMMFMuCisJCQkgKi8KKwkJCWlmIChzdGF0ZSAmIFBDSUVfTElOS19TVEFURV9MMSkKKwkJCQlsMV9sYXRlbmN5ICs9IDEwMDA7CisJCX0KKwl9CisJcmV0dXJuIHN0YXRlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBjaWVfYXNwbV9jaGVja19zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwl1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHBjaV9kZXYgKmNoaWxkX2RldjsKKworCS8qIElmIG5vIGNoaWxkLCBkaXNhYmxlIHRoZSBsaW5rICovCisJaWYgKGxpc3RfZW1wdHkoJnBkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKSkKKwkJcmV0dXJuIDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZF9kZXYsICZwZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJaWYgKGNoaWxkX2Rldi0+cGNpZV90eXBlID09IFBDSV9FWFBfVFlQRV9QQ0lfQlJJREdFKSB7CisJCQkvKgorCQkJICogSWYgZG93bnN0cmVhbSBjb21wb25lbnQgb2YgYSBsaW5rIGlzIHBjaSBicmlkZ2UsIHdlCisJCQkgKiBkaXNhYmxlIEFTUE0gZm9yIG5vdyBmb3IgdGhlIGxpbmsKKwkJCSAqICovCisJCQlzdGF0ZSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKGNoaWxkX2Rldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9FTkRQT0lOVCAmJgorCQkJY2hpbGRfZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX0xFR19FTkQpKQorCQkJY29udGludWU7CisJCS8qIERldmljZSBub3QgaW4gRDAgZG9lc24ndCBuZWVkIGNoZWNrIGxhdGVuY3kgKi8KKwkJaWYgKGNoaWxkX2Rldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDEgfHwKKwkJCWNoaWxkX2Rldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDIgfHwKKwkJCWNoaWxkX2Rldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDNob3QgfHwKKwkJCWNoaWxkX2Rldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDNjb2xkKQorCQkJY29udGludWU7CisJCXN0YXRlID0gX19wY2llX2FzcG1fY2hlY2tfc3RhdGVfb25lKGNoaWxkX2Rldiwgc3RhdGUpOworCX0KKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIF9fcGNpZV9hc3BtX2NvbmZpZ19vbmVfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJdTE2IHJlZzE2OworCWludCBwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCAmcmVnMTYpOworCXJlZzE2ICY9IH4weDM7CisJcmVnMTYgfD0gc3RhdGU7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCByZWcxNik7Cit9CisKK3N0YXRpYyB2b2lkIF9fcGNpZV9hc3BtX2NvbmZpZ19saW5rKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHBjaV9kZXYgKmNoaWxkX2RldjsKKwlpbnQgdmFsaWQgPSAxOworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSBwZGV2LT5saW5rX3N0YXRlOworCisJLyoKKwkgKiBpZiB0aGUgZG93bnN0cmVhbSBjb21wb25lbnQgaGFzIHBjaSBicmlkZ2UgZnVuY3Rpb24sIGRvbid0IGRvIEFTUE0KKwkgKiBub3cKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkX2RldiwgJnBkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlpZiAoY2hpbGRfZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1BDSV9CUklER0UpIHsKKwkJCXZhbGlkID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghdmFsaWQpCisJCXJldHVybjsKKworCS8qCisJICogc3BlYyAyLjAgc3VnZ2VzdHMgYWxsIGZ1bmN0aW9ucyBzaG91bGQgYmUgY29uZmlndXJlZCB0aGUgc2FtZQorCSAqIHNldHRpbmcgZm9yIEFTUE0uIEVuYWJsaW5nIEFTUE0gTDEgc2hvdWxkIGJlIGRvbmUgaW4gdXBzdHJlYW0KKwkgKiBjb21wb25lbnQgZmlyc3QgYW5kIHRoZW4gZG93bnN0cmVhbSwgYW5kIHZpY2UgdmVyc2EgZm9yIGRpc2FibGluZworCSAqIEFTUE0gTDEuIFNwZWMgZG9lc24ndCBtZW50aW9uIEwwUy4KKwkgKi8KKwlpZiAoc3RhdGUgJiBQQ0lFX0xJTktfU1RBVEVfTDEpCisJCV9fcGNpZV9hc3BtX2NvbmZpZ19vbmVfZGV2KHBkZXYsIHN0YXRlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGRfZGV2LCAmcGRldi0+c3Vib3JkaW5hdGUtPmRldmljZXMsIGJ1c19saXN0KQorCQlfX3BjaWVfYXNwbV9jb25maWdfb25lX2RldihjaGlsZF9kZXYsIHN0YXRlKTsKKworCWlmICghKHN0YXRlICYgUENJRV9MSU5LX1NUQVRFX0wxKSkKKwkJX19wY2llX2FzcG1fY29uZmlnX29uZV9kZXYocGRldiwgc3RhdGUpOworCisJbGlua19zdGF0ZS0+ZW5hYmxlZF9zdGF0ZSA9IHN0YXRlOworfQorCitzdGF0aWMgdm9pZCBfX3BjaWVfYXNwbV9jb25maWd1cmVfbGlua19zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwl1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHBjaWVfbGlua19zdGF0ZSAqbGlua19zdGF0ZSA9IHBkZXYtPmxpbmtfc3RhdGU7CisKKwlpZiAobGlua19zdGF0ZS0+c3VwcG9ydF9zdGF0ZSA9PSAwKQorCQlyZXR1cm47CisJc3RhdGUgJj0gUENJRV9MSU5LX1NUQVRFX0wwU3xQQ0lFX0xJTktfU1RBVEVfTDE7CisKKwkvKiBzdGF0ZSAwIG1lYW5zIGRpc2FibGluZyBhc3BtICovCisJc3RhdGUgPSBwY2llX2FzcG1fY2hlY2tfc3RhdGUocGRldiwgc3RhdGUpOworCWlmIChsaW5rX3N0YXRlLT5lbmFibGVkX3N0YXRlID09IHN0YXRlKQorCQlyZXR1cm47CisJX19wY2llX2FzcG1fY29uZmlnX2xpbmsocGRldiwgc3RhdGUpOworfQorCisvKgorICogcGNpZV9hc3BtX2NvbmZpZ3VyZV9saW5rX3N0YXRlOiBlbmFibGUvZGlzYWJsZSBQQ0kgZXhwcmVzcyBsaW5rIHN0YXRlCisgKiBAcGRldjogdGhlIHJvb3QgcG9ydCBvciBzd2l0Y2ggZG93bnN0cmVhbSBwb3J0CisgKi8KK3N0YXRpYyB2b2lkIHBjaWVfYXNwbV9jb25maWd1cmVfbGlua19zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwl1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJbXV0ZXhfbG9jaygmYXNwbV9sb2NrKTsKKwlfX3BjaWVfYXNwbV9jb25maWd1cmVfbGlua19zdGF0ZShwZGV2LCBzdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOworCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9saW5rX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWtmcmVlKHBkZXYtPmxpbmtfc3RhdGUpOworCXBkZXYtPmxpbmtfc3RhdGUgPSBOVUxMOworfQorCisvKgorICogcGNpZV9hc3BtX2luaXRfbGlua19zdGF0ZTogSW5pdGlhdGUgUENJIGV4cHJlc3MgbGluayBzdGF0ZS4KKyAqIEl0IGlzIGNhbGxlZCBhZnRlciB0aGUgcGNpZSBhbmQgaXRzIGNoaWxkcmVuIGRldmljZXMgYXJlIHNjYW5lZC4KKyAqIEBwZGV2OiB0aGUgcm9vdCBwb3J0IG9yIHN3aXRjaCBkb3duc3RyZWFtIHBvcnQKKyAqLwordm9pZCBwY2llX2FzcG1faW5pdF9saW5rX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwlzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlICpsaW5rX3N0YXRlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoYXNwbV9kaXNhYmxlZCB8fCAhcGRldi0+aXNfcGNpZSB8fCBwZGV2LT5saW5rX3N0YXRlKQorCQlyZXR1cm47CisJaWYgKHBkZXYtPnBjaWVfdHlwZSAhPSBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUICYmCisJCXBkZXYtPnBjaWVfdHlwZSAhPSBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSkKKwkJcmV0dXJuOworCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCWlmIChsaXN0X2VtcHR5KCZwZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcykpCisJCWdvdG8gb3V0OworCisJbXV0ZXhfbG9jaygmYXNwbV9sb2NrKTsKKworCWxpbmtfc3RhdGUgPSBremFsbG9jKHNpemVvZigqbGlua19zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghbGlua19zdGF0ZSkKKwkJZ290byB1bmxvY2tfb3V0OworCXBkZXYtPmxpbmtfc3RhdGUgPSBsaW5rX3N0YXRlOworCisJcGNpZV9hc3BtX2NvbmZpZ3VyZV9jb21tb25fY2xvY2socGRldik7CisKKwlwY2llX2FzcG1fY2FwX2luaXQocGRldik7CisKKwkvKiBjb25maWcgbGluayBzdGF0ZSB0byBhdm9pZCBCSU9TIGVycm9yICovCisJc3RhdGUgPSBwY2llX2FzcG1fY2hlY2tfc3RhdGUocGRldiwgcG9saWN5X3RvX2FzcG1fc3RhdGUocGRldikpOworCV9fcGNpZV9hc3BtX2NvbmZpZ19saW5rKHBkZXYsIHN0YXRlKTsKKworCXBjaWVfY2hlY2tfY2xvY2tfcG0ocGRldik7CisKKwlsaW5rX3N0YXRlLT5wZGV2ID0gcGRldjsKKwlsaXN0X2FkZCgmbGlua19zdGF0ZS0+c2liaWxpbmcsICZsaW5rX2xpc3QpOworCit1bmxvY2tfb3V0OgorCWlmIChlcnJvcikKKwkJZnJlZV9saW5rX3N0YXRlKHBkZXYpOworCW11dGV4X3VubG9jaygmYXNwbV9sb2NrKTsKK291dDoKKwl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7Cit9CisKKy8qIEBwZGV2OiB0aGUgZW5kcG9pbnQgZGV2aWNlICovCit2b2lkIHBjaWVfYXNwbV9leGl0X2xpbmtfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IHBkZXYtPmJ1cy0+c2VsZjsKKwlzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlICpsaW5rX3N0YXRlID0gcGFyZW50LT5saW5rX3N0YXRlOworCisJaWYgKGFzcG1fZGlzYWJsZWQgfHwgIXBkZXYtPmlzX3BjaWUgfHwgIXBhcmVudCB8fCAhbGlua19zdGF0ZSkKKwkJcmV0dXJuOworCWlmIChwYXJlbnQtPnBjaWVfdHlwZSAhPSBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUICYmCisJCXBhcmVudC0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9ET1dOU1RSRUFNKQorCQlyZXR1cm47CisJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJbXV0ZXhfbG9jaygmYXNwbV9sb2NrKTsKKworCS8qCisJICogQWxsIFBDSWUgZnVuY3Rpb25zIGFyZSBpbiBvbmUgc2xvdCwgcmVtb3ZlIG9uZSBmdW5jdGlvbiB3aWxsIHJlbW92ZQorCSAqIHRoZSB0aGUgd2hvbGUgc2xvdCwgc28ganVzdCB3YWl0CisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZwYXJlbnQtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKSkKKwkJZ290byBvdXQ7CisKKwkvKiBBbGwgZnVuY3Rpb25zIGFyZSByZW1vdmVkLCBzbyBqdXN0IGRpc2FibGUgQVNQTSBmb3IgdGhlIGxpbmsgKi8KKwlfX3BjaWVfYXNwbV9jb25maWdfb25lX2RldihwYXJlbnQsIDApOworCWxpc3RfZGVsKCZsaW5rX3N0YXRlLT5zaWJpbGluZyk7CisJLyogQ2xvY2sgUE0gaXMgZm9yIGVuZHBvaW50IGRldmljZSAqLworCisJZnJlZV9saW5rX3N0YXRlKHBhcmVudCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOworCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKK30KKworLyogQHBkZXY6IHRoZSByb290IHBvcnQgb3Igc3dpdGNoIGRvd25zdHJlYW0gcG9ydCAqLwordm9pZCBwY2llX2FzcG1fcG1fc3RhdGVfY2hhbmdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSBwZGV2LT5saW5rX3N0YXRlOworCisJaWYgKGFzcG1fZGlzYWJsZWQgfHwgIXBkZXYtPmlzX3BjaWUgfHwgIXBkZXYtPmxpbmtfc3RhdGUpCisJCXJldHVybjsKKwlpZiAocGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgJiYKKwkJcGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9ET1dOU1RSRUFNKQorCQlyZXR1cm47CisJLyoKKwkgKiBkZXZpY2VzIGNoYW5nZWQgUE0gc3RhdGUsIHdlIHNob3VsZCByZWNoZWNrIGlmIGxhdGVuY3kgbWVldHMgYWxsCisJICogZnVuY3Rpb25zJyByZXF1aXJlbWVudAorCSAqLworCXBjaWVfYXNwbV9jb25maWd1cmVfbGlua19zdGF0ZShwZGV2LCBsaW5rX3N0YXRlLT5lbmFibGVkX3N0YXRlKTsKK30KKworLyoKKyAqIHBjaV9kaXNhYmxlX2xpbmtfc3RhdGUgLSBkaXNhYmxlIHBjaSBkZXZpY2UncyBsaW5rIHN0YXRlLCBzbyB0aGUgbGluayB3aWxsCisgKiBuZXZlciBlbnRlciBzcGVjaWZpYyBzdGF0ZXMKKyAqLwordm9pZCBwY2lfZGlzYWJsZV9saW5rX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc3RhdGUpCit7CisJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IHBkZXYtPmJ1cy0+c2VsZjsKKwlzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlICpsaW5rX3N0YXRlOworCisJaWYgKGFzcG1fZGlzYWJsZWQgfHwgIXBkZXYtPmlzX3BjaWUpCisJCXJldHVybjsKKwlpZiAocGRldi0+cGNpZV90eXBlID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgfHwKKwkgICAgcGRldi0+cGNpZV90eXBlID09IFBDSV9FWFBfVFlQRV9ET1dOU1RSRUFNKQorCQlwYXJlbnQgPSBwZGV2OworCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmxpbmtfc3RhdGUpCisJCXJldHVybjsKKworCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCW11dGV4X2xvY2soJmFzcG1fbG9jayk7CisJbGlua19zdGF0ZSA9IHBhcmVudC0+bGlua19zdGF0ZTsKKwlsaW5rX3N0YXRlLT5zdXBwb3J0X3N0YXRlICY9CisJCX4oc3RhdGUgJiAoUENJRV9MSU5LX1NUQVRFX0wwU3xQQ0lFX0xJTktfU1RBVEVfTDEpKTsKKwlpZiAoc3RhdGUgJiBQQ0lFX0xJTktfU1RBVEVfQ0xLUE0pCisJCWxpbmtfc3RhdGUtPmNsa19wbV9jYXBhYmxlID0gMDsKKworCV9fcGNpZV9hc3BtX2NvbmZpZ3VyZV9saW5rX3N0YXRlKHBhcmVudCwgbGlua19zdGF0ZS0+ZW5hYmxlZF9zdGF0ZSk7CisJaWYgKCFsaW5rX3N0YXRlLT5jbGtfcG1fY2FwYWJsZSAmJiBsaW5rX3N0YXRlLT5jbGtfcG1fZW5hYmxlZCkKKwkJcGNpZV9zZXRfY2xvY2tfcG0ocGFyZW50LCAwKTsKKwltdXRleF91bmxvY2soJmFzcG1fbG9jayk7CisJdXBfcmVhZCgmcGNpX2J1c19zZW0pOworfQorRVhQT1JUX1NZTUJPTChwY2lfZGlzYWJsZV9saW5rX3N0YXRlKTsKKworc3RhdGljIGludCBwY2llX2FzcG1fc2V0X3BvbGljeShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCBpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb2xpY3lfc3RyKTsgaSsrKQorCQlpZiAoIXN0cm5jbXAodmFsLCBwb2xpY3lfc3RyW2ldLCBzdHJsZW4ocG9saWN5X3N0cltpXSkpKQorCQkJYnJlYWs7CisJaWYgKGkgPj0gQVJSQVlfU0laRShwb2xpY3lfc3RyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGkgPT0gYXNwbV9wb2xpY3kpCisJCXJldHVybiAwOworCisJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJbXV0ZXhfbG9jaygmYXNwbV9sb2NrKTsKKwlhc3BtX3BvbGljeSA9IGk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsaW5rX3N0YXRlLCAmbGlua19saXN0LCBzaWJpbGluZykgeworCQlwZGV2ID0gbGlua19zdGF0ZS0+cGRldjsKKwkJX19wY2llX2FzcG1fY29uZmlndXJlX2xpbmtfc3RhdGUocGRldiwKKwkJCXBvbGljeV90b19hc3BtX3N0YXRlKHBkZXYpKTsKKwkJaWYgKGxpbmtfc3RhdGUtPmNsa19wbV9jYXBhYmxlICYmCisJCSAgICBsaW5rX3N0YXRlLT5jbGtfcG1fZW5hYmxlZCAhPSBwb2xpY3lfdG9fY2xrcG1fc3RhdGUocGRldikpCisJCQlwY2llX3NldF9jbG9ja19wbShwZGV2LCBwb2xpY3lfdG9fY2xrcG1fc3RhdGUocGRldikpOworCisJfQorCW11dGV4X3VubG9jaygmYXNwbV9sb2NrKTsKKwl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpZV9hc3BtX2dldF9wb2xpY3koY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgaSwgY250ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb2xpY3lfc3RyKTsgaSsrKQorCQlpZiAoaSA9PSBhc3BtX3BvbGljeSkKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZmZlciArIGNudCwgIlslc10gIiwgcG9saWN5X3N0cltpXSk7CisJCWVsc2UKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZmZlciArIGNudCwgIiVzICIsIHBvbGljeV9zdHJbaV0pOworCXJldHVybiBjbnQ7Cit9CisKK21vZHVsZV9wYXJhbV9jYWxsKHBvbGljeSwgcGNpZV9hc3BtX3NldF9wb2xpY3ksIHBjaWVfYXNwbV9nZXRfcG9saWN5LAorCU5VTEwsIDA2NDQpOworCisjaWZkZWYgQ09ORklHX1BDSUVBU1BNX0RFQlVHCitzdGF0aWMgc3NpemVfdCBsaW5rX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSBwY2lfZGV2aWNlLT5saW5rX3N0YXRlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxpbmtfc3RhdGUtPmVuYWJsZWRfc3RhdGUpOworfQorCitzdGF0aWMgc3NpemVfdCBsaW5rX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IG4pCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UgPSB0b19wY2lfZGV2KGRldik7CisJaW50IHN0YXRlOworCisJaWYgKG4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdGF0ZSA9IGJ1ZlswXS0nMCc7CisJaWYgKHN0YXRlID49IDAgJiYgc3RhdGUgPD0gMykgeworCQkvKiBzZXR1cCBsaW5rIGFzcG0gc3RhdGUgKi8KKwkJcGNpZV9hc3BtX2NvbmZpZ3VyZV9saW5rX3N0YXRlKHBjaV9kZXZpY2UsIHN0YXRlKTsKKwkJcmV0dXJuIG47CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNsa19jdGxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHBjaWVfbGlua19zdGF0ZSAqbGlua19zdGF0ZSA9IHBjaV9kZXZpY2UtPmxpbmtfc3RhdGU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbGlua19zdGF0ZS0+Y2xrX3BtX2VuYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBjbGtfY3RsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IG4pCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UgPSB0b19wY2lfZGV2KGRldik7CisJaW50IHN0YXRlOworCisJaWYgKG4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdGF0ZSA9IGJ1ZlswXS0nMCc7CisKKwlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwltdXRleF9sb2NrKCZhc3BtX2xvY2spOworCXBjaWVfc2V0X2Nsb2NrX3BtKHBjaV9kZXZpY2UsICEhc3RhdGUpOworCW11dGV4X3VubG9jaygmYXNwbV9sb2NrKTsKKwl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIDA2NDQsIGxpbmtfc3RhdGVfc2hvdywgbGlua19zdGF0ZV9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoY2xrX2N0bCwgMDY0NCwgY2xrX2N0bF9zaG93LCBjbGtfY3RsX3N0b3JlKTsKKworc3RhdGljIGNoYXIgcG93ZXJfZ3JvdXBbXSA9ICJwb3dlciI7Cit2b2lkIHBjaWVfYXNwbV9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSBwZGV2LT5saW5rX3N0YXRlOworCisJaWYgKCFwZGV2LT5pc19wY2llIHx8IChwZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCAmJgorCQlwZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX0RPV05TVFJFQU0pIHx8ICFsaW5rX3N0YXRlKQorCQlyZXR1cm47CisKKwlpZiAobGlua19zdGF0ZS0+c3VwcG9ydF9zdGF0ZSkKKwkJc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoJnBkZXYtPmRldi5rb2JqLAorCQkJJmRldl9hdHRyX2xpbmtfc3RhdGUuYXR0ciwgcG93ZXJfZ3JvdXApOworCWlmIChsaW5rX3N0YXRlLT5jbGtfcG1fY2FwYWJsZSkKKwkJc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoJnBkZXYtPmRldi5rb2JqLAorCQkJJmRldl9hdHRyX2Nsa19jdGwuYXR0ciwgcG93ZXJfZ3JvdXApOworfQorCit2b2lkIHBjaWVfYXNwbV9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmtfc3RhdGUgPSBwZGV2LT5saW5rX3N0YXRlOworCisJaWYgKCFwZGV2LT5pc19wY2llIHx8IChwZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCAmJgorCQlwZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX0RPV05TVFJFQU0pIHx8ICFsaW5rX3N0YXRlKQorCQlyZXR1cm47CisKKwlpZiAobGlua19zdGF0ZS0+c3VwcG9ydF9zdGF0ZSkKKwkJc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCgmcGRldi0+ZGV2LmtvYmosCisJCQkmZGV2X2F0dHJfbGlua19zdGF0ZS5hdHRyLCBwb3dlcl9ncm91cCk7CisJaWYgKGxpbmtfc3RhdGUtPmNsa19wbV9jYXBhYmxlKQorCQlzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKCZwZGV2LT5kZXYua29iaiwKKwkJCSZkZXZfYXR0cl9jbGtfY3RsLmF0dHIsIHBvd2VyX2dyb3VwKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBwY2llX2FzcG1fZGlzYWJsZShjaGFyICpzdHIpCit7CisJYXNwbV9kaXNhYmxlZCA9IDE7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoInBjaWVfbm9hc3BtIiwgcGNpZV9hc3BtX2Rpc2FibGUpOworCisjaWZkZWYgQ09ORklHX0FDUEkKKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KK3N0YXRpYyB2b2lkIHBjaWVfYXNwbV9wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJcGNpZV9vc2Nfc3VwcG9ydF9zZXQoT1NDX0FDVElWRV9TVEFURV9QV1JfU1VQUE9SVHwKKwkJT1NDX0NMT0NLX1BXUl9DQVBBQklMSVRZX1NVUFBPUlQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2FzcG1fcGxhdGZvcm1faW5pdCh2b2lkKSB7IH0KKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBwY2llX2FzcG1faW5pdCh2b2lkKQoreworCWlmIChhc3BtX2Rpc2FibGVkKQorCQlyZXR1cm4gMDsKKwlwY2llX2FzcG1fcGxhdGZvcm1faW5pdCgpOworCXJldHVybiAwOworfQorCitmc19pbml0Y2FsbChwY2llX2FzcG1faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwppbmRleCAyM2Q5ZWIwLi5mYjBhYmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCWlmIChwb3MpIHsKIAkJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW1BDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVNdID0gCiAJCQl7ezAsIDB9LCB7MCwgMX0sIHswLCAyfSwgezAsIDN9fTsKLQkJcHJpbnRrKCIlcyBGb3VuZCBNU0lYIGNhcGFiaWxpdHlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50aygiJXMgRm91bmQgTVNJWCBjYXBhYmlsaXR5XG4iLCBfX2Z1bmNfXyk7CiAJCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeChkZXYsIG1zaXhfZW50cmllcywgbnZlYyk7CiAJCWlmICghc3RhdHVzKSB7CiAJCQlpbnQgaiA9IDA7CkBAIC0xNjUsNyArMTY1LDcgQEAKIAlpZiAoc3RhdHVzKSB7CiAJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CiAJCWlmIChwb3MpIHsKLQkJCXByaW50aygiJXMgRm91bmQgTVNJIGNhcGFiaWxpdHlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcmludGsoIiVzIEZvdW5kIE1TSSBjYXBhYmlsaXR5XG4iLCBfX2Z1bmNfXyk7CiAJCQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaShkZXYpOwogCQkJaWYgKCFzdGF0dXMpIHsKIAkJCQlpbnRlcnJ1cHRfbW9kZSA9IFBDSUVfUE9SVF9NU0lfTU9ERTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCAyNjA1N2Y5Li41MWQxNjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIGlmICghZGV2LT5pcnEgJiYgZGV2LT5waW4pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJIiVzLT5EZXZbJTA0eDolMDR4XSBoYXMgaW52YWxpZCBJUlEuIENoZWNrIHZlbmRvciBCSU9TXG4iLCAKLQkJX19GVU5DVElPTl9fLCBkZXYtPnZlbmRvciwgZGV2LT5kZXZpY2UpOworCQlfX2Z1bmNfXywgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlKTsKIAl9CiAJaWYgKHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoZGV2KSkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IDRkMjNiOWYuLmY5OTEzNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKICNkZWZpbmUgQ0FSREJVU19MQVRFTkNZX1RJTUVSCTE3NgkvKiBzZWNvbmRhcnkgbGF0ZW5jeSB0aW1lciAqLwpAQCAtMjAsMTggKzIxLDI3IEBACiBMSVNUX0hFQUQocGNpX3Jvb3RfYnVzZXMpOwogRVhQT1JUX1NZTUJPTChwY2lfcm9vdF9idXNlcyk7CiAKLUxJU1RfSEVBRChwY2lfZGV2aWNlcyk7CisKK3N0YXRpYyBpbnQgZmluZF9hbnl0aGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDE7Cit9CiAKIC8qCiAgKiBTb21lIGRldmljZSBkcml2ZXJzIG5lZWQga25vdyBpZiBwY2kgaXMgaW5pdGlhdGVkLgogICogQmFzaWNhbGx5LCB3ZSB0aGluayBwY2kgaXMgbm90IGluaXRpYXRlZCB3aGVuIHRoZXJlCi0gKiBpcyBubyBkZXZpY2UgaW4gbGlzdCBvZiBwY2lfZGV2aWNlcy4KKyAqIGlzIG5vIGRldmljZSB0byBiZSBmb3VuZCBvbiB0aGUgcGNpX2J1c190eXBlLgogICovCiBpbnQgbm9fcGNpX2RldmljZXModm9pZCkKIHsKLQlyZXR1cm4gbGlzdF9lbXB0eSgmcGNpX2RldmljZXMpOwotfQorCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgbm9fZGV2aWNlczsKIAorCWRldiA9IGJ1c19maW5kX2RldmljZSgmcGNpX2J1c190eXBlLCBOVUxMLCBOVUxMLCBmaW5kX2FueXRoaW5nKTsKKwlub19kZXZpY2VzID0gKGRldiA9PSBOVUxMKTsKKwlwdXRfZGV2aWNlKGRldik7CisJcmV0dXJuIG5vX2RldmljZXM7Cit9CiBFWFBPUlRfU1lNQk9MKG5vX3BjaV9kZXZpY2VzKTsKIAogI2lmZGVmIEhBVkVfUENJX0xFR0FDWQpAQCAtODIsNiArOTIsNyBAQAogICogUENJIEJ1cyBDbGFzcyBEZXZpY2VzCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHBjaV9idXNfc2hvd19jcHVhZmZpbml0eShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCWludCB0eXBlLAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJY2hhciAqYnVmKQogewpAQCAtODksMTIgKzEwMCwzMCBAQAogCWNwdW1hc2tfdCBjcHVtYXNrOwogCiAJY3B1bWFzayA9IHBjaWJ1c190b19jcHVtYXNrKHRvX3BjaV9idXMoZGV2KSk7Ci0JcmV0ID0gY3B1bWFza19zY25wcmludGYoYnVmLCBQQUdFX1NJWkUsIGNwdW1hc2spOwotCWlmIChyZXQgPCBQQUdFX1NJWkUpCi0JCWJ1ZltyZXQrK10gPSAnXG4nOworCXJldCA9IHR5cGU/CisJCWNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLTIsIGNwdW1hc2spOgorCQljcHVtYXNrX3NjbnByaW50ZihidWYsIFBBR0VfU0laRS0yLCBjcHVtYXNrKTsKKwlidWZbcmV0KytdID0gJ1xuJzsKKwlidWZbcmV0XSA9ICdcMCc7CiAJcmV0dXJuIHJldDsKIH0KLURFVklDRV9BVFRSKGNwdWFmZmluaXR5LCBTX0lSVUdPLCBwY2lfYnVzX3Nob3dfY3B1YWZmaW5pdHksIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBpbmxpbmUgcGNpX2J1c19zaG93X2NwdW1hc2thZmZpbml0eShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHBjaV9idXNfc2hvd19jcHVhZmZpbml0eShkZXYsIDAsIGF0dHIsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlubGluZSBwY2lfYnVzX3Nob3dfY3B1bGlzdGFmZmluaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gcGNpX2J1c19zaG93X2NwdWFmZmluaXR5KGRldiwgMSwgYXR0ciwgYnVmKTsKK30KKworREVWSUNFX0FUVFIoY3B1YWZmaW5pdHksICAgICBTX0lSVUdPLCBwY2lfYnVzX3Nob3dfY3B1bWFza2FmZmluaXR5LCBOVUxMKTsKK0RFVklDRV9BVFRSKGNwdWxpc3RhZmZpbml0eSwgU19JUlVHTywgcGNpX2J1c19zaG93X2NwdWxpc3RhZmZpbml0eSwgTlVMTCk7CiAKIC8qCiAgKiBQQ0kgQnVzIENsYXNzCkBAIC0yMjUsNyArMjU0LDcgQEAKIAkJCXJlcy0+ZmxhZ3MgfD0gbCAmIH5QQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7CiAJCX0KIAkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgKHVuc2lnbmVkIGxvbmcpIHN6OwotCQlyZXMtPmZsYWdzIHw9IHBjaV9jYWxjX3Jlc291cmNlX2ZsYWdzKGwpOworCQlyZXMtPmZsYWdzIHw9IHBjaV9jYWxjX3Jlc291cmNlX2ZsYWdzKGwpIHwgSU9SRVNPVVJDRV9TSVpFQUxJR047CiAJCWlmIChpc182NGJpdF9tZW1vcnkobCkpIHsKIAkJCXUzMiBzemhpLCBsaGk7CiAKQEAgLTI3OCw3ICszMDcsOCBAQAogCQkJaWYgKHN6KSB7CiAJCQkJcmVzLT5mbGFncyA9IChsICYgSU9SRVNPVVJDRV9ST01fRU5BQkxFKSB8CiAJCQkJICBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0ggfAotCQkJCSAgSU9SRVNPVVJDRV9SRUFET05MWSB8IElPUkVTT1VSQ0VfQ0FDSEVBQkxFOworCQkJCSAgSU9SRVNPVVJDRV9SRUFET05MWSB8IElPUkVTT1VSQ0VfQ0FDSEVBQkxFIHwKKwkJCQkgIElPUkVTT1VSQ0VfU0laRUFMSUdOOwogCQkJCXJlcy0+c3RhcnQgPSBsICYgUENJX1JPTV9BRERSRVNTX01BU0s7CiAJCQkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgKHVuc2lnbmVkIGxvbmcpIHN6OwogCQkJfQpAQCAtMjg2LDcgKzMxNiw3IEBACiAJfQogfQogCi12b2lkIHBjaV9yZWFkX2JyaWRnZV9iYXNlcyhzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQpCit2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKIAl1OCBpb19iYXNlX2xvLCBpb19saW1pdF9sbzsKQEAgLTM4OCw4ICs0MTgsOCBAQAogCXJldHVybiBiOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9idXMgKiBfX2RldmluaXQKLXBjaV9hbGxvY19jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGJ1c25yKQorc3RhdGljIHN0cnVjdCBwY2lfYnVzICpwY2lfYWxsb2NfY2hpbGRfYnVzKHN0cnVjdCBwY2lfYnVzICpwYXJlbnQsCisJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGludCBidXNucikKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7CiAJaW50IGk7CkBAIC00NzIsNyArNTAyLDcgQEAKICAqIHRoZW0sIHdlIHByb2NlZWQgdG8gYXNzaWduaW5nIG51bWJlcnMgdG8gdGhlIHJlbWFpbmluZyBidXNlcyBpbgogICogb3JkZXIgdG8gYXZvaWQgb3ZlcmxhcHMgYmV0d2VlbiBvbGQgYW5kIG5ldyBidXMgbnVtYmVycy4KICAqLwotaW50IHBjaV9zY2FuX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqIGRldiwgaW50IG1heCwgaW50IHBhc3MpCitpbnQgX19kZXZpbml0IHBjaV9zY2FuX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWF4LCBpbnQgcGFzcykKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7CiAJaW50IGlzX2NhcmRidXMgPSAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUyk7CkBAIC02MjIsNyArNjUyLDkgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX1NVQk9SRElOQVRFX0JVUywgbWF4KTsKIAl9CiAKLQlzcHJpbnRmKGNoaWxkLT5uYW1lLCAoaXNfY2FyZGJ1cyA/ICJQQ0kgQ2FyZEJ1cyAjJTAyeCIgOiAiUENJIEJ1cyAjJTAyeCIpLCBjaGlsZC0+bnVtYmVyKTsKKwlzcHJpbnRmKGNoaWxkLT5uYW1lLAorCQkoaXNfY2FyZGJ1cyA/ICJQQ0kgQ2FyZEJ1cyAlMDR4OiUwMngiIDogIlBDSSBCdXMgJTA0eDolMDJ4IiksCisJCXBjaV9kb21haW5fbnIoYnVzKSwgY2hpbGQtPm51bWJlcik7CiAKIAkvKiBIYXMgb25seSB0cmlnZ2VyZWQgb24gQ2FyZEJ1cywgZml4dXAgaXMgaW4geWVudGFfc29ja2V0ICovCiAJd2hpbGUgKGJ1cy0+cGFyZW50KSB7CkBAIC03ODIsNiArODE0LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAogCXBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJcGNpX3ZwZF9yZWxlYXNlKHBjaV9kZXYpOwogCWtmcmVlKHBjaV9kZXYpOwogfQogCkBAIC04NDksNyArODgyLDYgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAKLQlJTklUX0xJU1RfSEVBRCgmZGV2LT5nbG9iYWxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+YnVzX2xpc3QpOwogCiAJcGNpX21zaV9pbml0X3BjaV9kZXYoZGV2KTsKQEAgLTg2Miw4ICs4OTQsNyBAQAogICogUmVhZCB0aGUgY29uZmlnIGRhdGEgZm9yIGEgUENJIGRldmljZSwgc2FuaXR5LWNoZWNrIGl0CiAgKiBhbmQgZmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZS4uLgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXYgKiBfX2RldmluaXQKLXBjaV9zY2FuX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBjaV9zY2FuX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAl1MzIgbDsKQEAgLTkyMiw2ICs5NTMsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlwY2lfdnBkX3BjaTIyX2luaXQoZGV2KTsKKwogCXJldHVybiBkZXY7CiB9CiAKQEAgLTk0Niw3ICs5NzksNiBAQAogCSAqIEFkZCB0aGUgZGV2aWNlIHRvIG91ciBsaXN0IG9mIGRpc2NvdmVyZWQgZGV2aWNlcwogCSAqIGFuZCB0aGUgYnVzIGxpc3QgZm9yIGZpeHVwIGZ1bmN0aW9ucywgZXRjLgogCSAqLwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPmdsb2JhbF9saXN0KTsKIAlkb3duX3dyaXRlKCZwY2lfYnVzX3NlbSk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5idXNfbGlzdCwgJmJ1cy0+ZGV2aWNlcyk7CiAJdXBfd3JpdGUoJnBjaV9idXNfc2VtKTsKQEAgLTk3Myw3ICsxMDA1LDcgQEAKICAqCiAgKiBTY2FuIGEgUENJIHNsb3Qgb24gdGhlIHNwZWNpZmllZCBQQ0kgYnVzIGZvciBkZXZpY2VzLCBhZGRpbmcKICAqIGRpc2NvdmVyZWQgZGV2aWNlcyB0byB0aGUgQGJ1cy0+ZGV2aWNlcyBsaXN0LiAgTmV3IGRldmljZXMKLSAqIHdpbGwgaGF2ZSBhbiBlbXB0eSBkZXYtPmdsb2JhbF9saXN0IGhlYWQuCisgKiB3aWxsIG5vdCBoYXZlIGlzX2FkZGVkIHNldC4KICAqLwogaW50IHBjaV9zY2FuX3Nsb3Qoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuKQogewpAQCAtMTAwNSwxMCArMTAzNywxNCBAQAogCQkJCWJyZWFrOwogCQl9CiAJfQorCisJaWYgKGJ1cy0+c2VsZikKKwkJcGNpZV9hc3BtX2luaXRfbGlua19zdGF0ZShidXMtPnNlbGYpOworCiAJcmV0dXJuIG5yOwogfQogCi11bnNpZ25lZCBpbnQgcGNpX3NjYW5fY2hpbGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit1bnNpZ25lZCBpbnQgX19kZXZpbml0IHBjaV9zY2FuX2NoaWxkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXVuc2lnbmVkIGludCBkZXZmbiwgcGFzcywgbWF4ID0gYnVzLT5zZWNvbmRhcnk7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKQEAgLTExMTYsNyArMTE1Miw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCBwY2lfYnVzICpwY2lfc2Nhbl9idXNfcGFyZW50ZWQoc3RydWN0IGRldmljZSAqcGFyZW50LAorc3RydWN0IHBjaV9idXMgKiBfX2RldmluaXQgcGNpX3NjYW5fYnVzX3BhcmVudGVkKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJaW50IGJ1cywgc3RydWN0IHBjaV9vcHMgKm9wcywgdm9pZCAqc3lzZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYjsKQEAgLTExNzUsNyArMTIxMSw3IEBACiAJbGlzdF9tb3ZlX3RhaWwoJmEtPmRldi5rbm9kZV9idXMubl9ub2RlLCBsaXN0KTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHBjaV9zb3J0X2JyZWFkdGhmaXJzdF9rbGlzdCh2b2lkKQordm9pZCBfX2luaXQgcGNpX3NvcnRfYnJlYWR0aGZpcnN0KHZvaWQpCiB7CiAJTElTVF9IRUFEKHNvcnRlZF9kZXZpY2VzKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CkBAIC0xMTk2LDM2ICsxMjMyLDMgQEAKIAlsaXN0X3NwbGljZSgmc29ydGVkX2RldmljZXMsICZkZXZpY2Vfa2xpc3QtPmtfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmRldmljZV9rbGlzdC0+a19sb2NrKTsKIH0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjaV9pbnNlcnRpb25fc29ydF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQotewotCXN0cnVjdCBwY2lfZGV2ICpiOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShiLCBsaXN0LCBnbG9iYWxfbGlzdCkgewotCQlpZiAocGNpX3NvcnRfYmZfY21wKGEsIGIpIDw9IDApIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZhLT5nbG9iYWxfbGlzdCwgJmItPmdsb2JhbF9saXN0KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlsaXN0X21vdmVfdGFpbCgmYS0+Z2xvYmFsX2xpc3QsIGxpc3QpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpX3NvcnRfYnJlYWR0aGZpcnN0X2RldmljZXModm9pZCkKLXsKLQlMSVNUX0hFQUQoc29ydGVkX2RldmljZXMpOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYsICp0bXA7Ci0KLQlkb3duX3dyaXRlKCZwY2lfYnVzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmcGNpX2RldmljZXMsIGdsb2JhbF9saXN0KSB7Ci0JCXBjaV9pbnNlcnRpb25fc29ydF9kZXZpY2VzKGRldiwgJnNvcnRlZF9kZXZpY2VzKTsKLQl9Ci0JbGlzdF9zcGxpY2UoJnNvcnRlZF9kZXZpY2VzLCAmcGNpX2RldmljZXMpOwotCXVwX3dyaXRlKCZwY2lfYnVzX3NlbSk7Ci19Ci0KLXZvaWQgX19pbml0IHBjaV9zb3J0X2JyZWFkdGhmaXJzdCh2b2lkKQotewotCXBjaV9zb3J0X2JyZWFkdGhmaXJzdF9kZXZpY2VzKCk7Ci0JcGNpX3NvcnRfYnJlYWR0aGZpcnN0X2tsaXN0KCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2MuYyBiL2RyaXZlcnMvcGNpL3Byb2MuYwppbmRleCA2OGFlZWI3Li5lZjE4ZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9jLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYy5jCkBAIC00MjIsNyArNDIyLDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmU7CiAKIAlpZiAoKGUgPSBkZXYtPnByb2NlbnQpKSB7Ci0JCWlmIChhdG9taWNfcmVhZCgmZS0+Y291bnQpKQorCQlpZiAoYXRvbWljX3JlYWQoJmUtPmNvdW50KSA+IDEpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlyZW1vdmVfcHJvY19lbnRyeShlLT5uYW1lLCBkZXYtPmJ1cy0+cHJvY2Rpcik7CiAJCWRldi0+cHJvY2VudCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDBhOTUzZDQuLmFmZDkxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC04NjcsMTMgKzg2NywxMyBAQAogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1NE5YLAlxdWlya19kaXNhYmxlX3B4Yik7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1NE5YLAlxdWlya19kaXNhYmxlX3B4Yik7CiAKLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3NiNjAwX3NhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfYW1kX2lkZV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCS8qIHNldCBzYjYwMCBzYXRhIHRvIGFoY2kgbW9kZSAqLwotCWlmICgocGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKSB7Ci0JCXU4IHRtcDsKKwkvKiBzZXQgc2I2MDAvc2I3MDAvc2I4MDAgc2F0YSB0byBhaGNpIG1vZGUgKi8KKwl1OCB0bXA7CiAKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfREVWSUNFLCAmdG1wKTsKKwlpZiAodG1wID09IDB4MDEpIHsKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0MCwgJnRtcCk7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQwLCB0bXB8MSk7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDksIDEpOwpAQCAtODgxLDEwICs4ODEsMTMgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDAsIHRtcCk7CiAKIAkJcGRldi0+Y2xhc3MgPSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQVRBX0FIQ0k7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJzZXQgU0FUQSB0byBBSENJIG1vZGVcbiIpOwogCX0KIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEsIHF1aXJrX3NiNjAwX3NhdGEpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQSwgcXVpcmtfc2I2MDBfc2F0YSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwogCiAvKgogICoJU2VydmVyd29ya3MgQ1NCNSBJREUgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBuYXRpdmUgbW9kZQpAQCAtOTQ4LDYgKzk1MSwxMiBAQAogICogYWNjZXNzZXMgdG8gdGhlIFNNQnVzIHJlZ2lzdGVycywgd2l0aCBwb3RlbnRpYWxseSBiYWQgZWZmZWN0cy4gVGh1cyB5b3UKICAqIHNob3VsZCBiZSB2ZXJ5IGNhcmVmdWwgd2hlbiBhZGRpbmcgbmV3IGVudHJpZXM6IGlmIFNNTSBpcyBhY2Nlc3NpbmcgdGhlCiAgKiBJbnRlbCBTTUJ1cywgdGhpcyBpcyBhIHZlcnkgZ29vZCByZWFzb24gdG8gbGVhdmUgaXQgaGlkZGVuLgorICoKKyAqIExpa2V3aXNlLCBtYW55IHJlY2VudCBsYXB0b3BzIHVzZSBBQ1BJIGZvciB0aGVybWFsIG1hbmFnZW1lbnQuIElmIHRoZQorICogQUNQSSBEU0RUIGNvZGUgYWNjZXNzZXMgdGhlIFNNQnVzLCB0aGVuIExpbnV4IHNob3VsZCBub3QgYWNjZXNzIGl0CisgKiBuYXRpdmVseSwgYW5kIGtlZXBpbmcgdGhlIFNNQnVzIGhpZGRlbiBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uIElmIHlvdQorICogYXJlIGFib3V0IHRvIGFkZCBhbiBlbnRyeSBpbiB0aGUgdGFibGUgYmVsb3csIHBsZWFzZSBmaXJzdCBkaXNhc3NlbWJsZQorICogdGhlIERTRFQgYW5kIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGlzIG5vIGNvZGUgYWNjZXNzaW5nIHRoZSBTTUJ1cy4KICAqLwogc3RhdGljIGludCBhc3VzX2hpZGVzX3NtYnVzOwogCkBAIC0xMDI1LDExICsxMDM0LDYgQEAKIAkJCWNhc2UgMHgxMmJmOiAvKiBIUCB4dzQxMDAgKi8KIAkJCQlhc3VzX2hpZGVzX3NtYnVzID0gMTsKIAkJCX0KLQkJZWxzZSBpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0hCKQotCQkJc3dpdGNoIChkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsKLQkJCWNhc2UgMHgwOTljOiAvKiBIUCBDb21wYXEgbng2MTEwICovCi0JCQkJYXN1c19oaWRlc19zbWJ1cyA9IDE7Ci0JCQl9CiAgICAgICAgfSBlbHNlIGlmICh1bmxpa2VseShkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9TQU1TVU5HKSkgewogICAgICAgICAgICAgICAgaWYgKGRldi0+ZGV2aWNlID09ICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1UE1fSEIpCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsKQEAgLTE0OTgsOCArMTUwMiw4IEBACiAJCWlmICgoZi0+dmVuZG9yID09IGRldi0+dmVuZG9yIHx8IGYtPnZlbmRvciA9PSAodTE2KSBQQ0lfQU5ZX0lEKSAmJgogIAkJICAgIChmLT5kZXZpY2UgPT0gZGV2LT5kZXZpY2UgfHwgZi0+ZGV2aWNlID09ICh1MTYpIFBDSV9BTllfSUQpKSB7CiAjaWZkZWYgREVCVUcKLQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiY2FsbGluZyBxdWlyayAweCVwIiwgZi0+aG9vayk7Ci0JCQlwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgiOiAlcygpXG4iLAorCQkJZGV2X2RiZygmZGV2LT5kZXYsICJjYWxsaW5nICIpOworCQkJcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woIiVzKClcbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpIGYtPmhvb2spOwogI2VuZGlmCiAJCQlmLT5ob29rKGRldik7CkBAIC0xNjQ0LDE0ICsxNjQ4LDI0IEBACiAJCQkvKiBUdXJuIG9mZiBQQ0kgQnVzIFBhcmtpbmcgKi8KIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NzYsIGIgXiAweDQwKTsKIAorCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCSJEaXNhYmxpbmcgVklBIENYNzAwIFBDSSBwYXJraW5nXG4iKTsKKwkJfQorCX0KKworCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NzIsICZiKSA9PSAwKSB7CisJCWlmIChiICE9IDApIHsKIAkJCS8qIFR1cm4gb2ZmIFBDSSBNYXN0ZXIgcmVhZCBjYWNoaW5nICovCiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDcyLCAweDApOworCisJCQkvKiBTZXQgUENJIE1hc3RlciBCdXMgdGltZS1vdXQgdG8gIjF4MTYgUENMSyIgKi8KIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NzUsIDB4MSk7CisKKwkJCS8qIERpc2FibGUgIlJlYWQgRklGTyBUaW1lciIgKi8KIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NzcsIDB4MCk7CiAKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiUENJOiBWSUEgQ1g3MDAgUENJIHBhcmtpbmcvY2FjaGluZyBmaXh1cCBvbiAlc1xuIiwKLQkJCQlwY2lfbmFtZShkZXYpKTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkiRGlzYWJsaW5nIFZJQSBDWDcwMCBQQ0kgY2FjaGluZ1xuIik7CiAJCX0KIAl9CiB9CkBAIC0xNzIzLDMyICsxNzM3LDYgQEAKIAkJCXF1aXJrX21zaV9odF9jYXApOwogCiAKLS8qCi0gKiAgRm9yY2UgZW5hYmxlIE1TSSBtYXBwaW5nIGNhcGFiaWxpdHkgb24gSFQgYnJpZGdlcwotICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfbXNpX2h0X2NhcF9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgcG9zLCB0dGwgPSA0ODsKLQotCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoZGV2LCBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKLQl3aGlsZSAocG9zICYmIHR0bC0tKSB7Ci0JCXU4IGZsYWdzOwotCi0JCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHBvcyArIEhUX01TSV9GTEFHUywgJmZsYWdzKSA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IEVuYWJsaW5nIEhUIE1TSSBNYXBwaW5nIG9uICVzXG4iLAotCQkJICAgICAgIHBjaV9uYW1lKGRldikpOwotCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBIVF9NU0lfRkxBR1MsCi0JCQkJCSAgICAgIGZsYWdzIHwgSFRfTVNJX0ZMQUdTX0VOQUJMRSk7Ci0JCX0KLQkJcG9zID0gcGNpX2ZpbmRfbmV4dF9odF9jYXBhYmlsaXR5KGRldiwgcG9zLAotCQkJCQkJICBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKLQl9Ci19Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKLQkJCSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMF9QWEIsCi0JCQkgcXVpcmtfbXNpX2h0X2NhcF9lbmFibGUpOwotCiAvKiBUaGUgblZpZGlhIENLODA0IGNoaXBzZXQgbWF5IGhhdmUgMiBIVCBNU0kgbWFwcGluZ3MuCiAgKiBNU0kgYXJlIHN1cHBvcnRlZCBpZiB0aGUgTVNJIGNhcGFiaWxpdHkgc2V0IGluIGFueSBvZiB0aGVzZSBtYXBwaW5ncy4KICAqLwpAQCAtMTc3NSw2ICsxNzYzLDcwIEBACiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4MDRfUENJRSwKIAkJCXF1aXJrX252aWRpYV9jazgwNF9tc2lfaHRfY2FwKTsKIAorLyogRm9yY2UgZW5hYmxlIE1TSSBtYXBwaW5nIGNhcGFiaWxpdHkgb24gSFQgYnJpZGdlcyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IGh0X2VuYWJsZV9tc2lfbWFwcGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3MsIHR0bCA9IDQ4OworCisJcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShkZXYsIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOworCXdoaWxlIChwb3MgJiYgdHRsLS0pIHsKKwkJdTggZmxhZ3M7CisKKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgSFRfTVNJX0ZMQUdTLAorCQkJCQkgJmZsYWdzKSA9PSAwKSB7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJFbmFibGluZyBIVCBNU0kgTWFwcGluZ1xuIik7CisKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcyArIEhUX01TSV9GTEFHUywKKwkJCQkJICAgICAgZmxhZ3MgfCBIVF9NU0lfRkxBR1NfRU5BQkxFKTsKKwkJfQorCQlwb3MgPSBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkoZGV2LCBwb3MsCisJCQkJCQkgIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAorCQkJIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwX1BYQiwKKwkJCSBodF9lbmFibGVfbXNpX21hcHBpbmcpOworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbnZfbXNpX2h0X2NhcF9xdWlyayhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpob3N0X2JyaWRnZTsKKwlpbnQgcG9zLCB0dGwgPSA0ODsKKworCS8qCisJICogSFQgTVNJIG1hcHBpbmcgc2hvdWxkIGJlIGRpc2FibGVkIG9uIGRldmljZXMgdGhhdCBhcmUgYmVsb3cKKwkgKiBhIG5vbi1IeXBlcnRyYW5zcG9ydCBob3N0IGJyaWRnZS4gTG9jYXRlIHRoZSBob3N0IGJyaWRnZS4uLgorCSAqLworCWhvc3RfYnJpZGdlID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsIDApKTsKKwlpZiAoaG9zdF9icmlkZ2UgPT0gTlVMTCkgeworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIm52X21zaV9odF9jYXBfcXVpcmsgZGlkbid0IGxvY2F0ZSBob3N0IGJyaWRnZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlwb3MgPSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KGhvc3RfYnJpZGdlLCBIVF9DQVBUWVBFX1NMQVZFKTsKKwlpZiAocG9zICE9IDApIHsKKwkJLyogSG9zdCBicmlkZ2UgaXMgdG8gSFQgKi8KKwkJaHRfZW5hYmxlX21zaV9tYXBwaW5nKGRldik7CisJCXJldHVybjsKKwl9CisKKwkvKiBIb3N0IGJyaWRnZSBpcyBub3QgdG8gSFQsIGRpc2FibGUgSFQgTVNJIG1hcHBpbmcgb24gdGhpcyBkZXZpY2UgKi8KKwlwb3MgPSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KGRldiwgSFRfQ0FQVFlQRV9NU0lfTUFQUElORyk7CisJd2hpbGUgKHBvcyAmJiB0dGwtLSkgeworCQl1OCBmbGFnczsKKworCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBIVF9NU0lfRkxBR1MsCisJCQkJCSAmZmxhZ3MpID09IDApIHsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwgIkRpc2FibGluZyBIVCBNU0kgbWFwcGluZyIpOworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgSFRfTVNJX0ZMQUdTLAorCQkJCQkgICAgICBmbGFncyAmIH5IVF9NU0lfRkxBR1NfRU5BQkxFKTsKKwkJfQorCQlwb3MgPSBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkoZGV2LCBwb3MsCisJCQkJCQkgIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lELCBudl9tc2lfaHRfY2FwX3F1aXJrKTsKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX21zaV9pbnR4X2Rpc2FibGVfYnVnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJZGV2LT5kZXZfZmxhZ3MgfD0gUENJX0RFVl9GTEFHU19NU0lfSU5UWF9ESVNBQkxFX0JVRzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3JlbW92ZS5jIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKaW5kZXggOTY4NGUxYi4uYmRjMmE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcmVtb3ZlLmMKKysrIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KICNpbmNsdWRlICJwY2kuaCIKIAogc3RhdGljIHZvaWQgcGNpX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xOCwxOCArMTksMTUgQEAKIAogc3RhdGljIHZvaWQgcGNpX3N0b3BfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JaWYgKCFkZXYtPmdsb2JhbF9saXN0Lm5leHQpCi0JCXJldHVybjsKLQotCWlmICghbGlzdF9lbXB0eSgmZGV2LT5nbG9iYWxfbGlzdCkpIHsKKwlpZiAoZGV2LT5pc19hZGRlZCkgewogCQlwY2lfcHJvY19kZXRhY2hfZGV2aWNlKGRldik7CiAJCXBjaV9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKGRldik7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmRldik7Ci0JCWRvd25fd3JpdGUoJnBjaV9idXNfc2VtKTsKLQkJbGlzdF9kZWwoJmRldi0+Z2xvYmFsX2xpc3QpOwotCQlkZXYtPmdsb2JhbF9saXN0Lm5leHQgPSBkZXYtPmdsb2JhbF9saXN0LnByZXYgPSBOVUxMOwotCQl1cF93cml0ZSgmcGNpX2J1c19zZW0pOworCQlkZXYtPmlzX2FkZGVkID0gMDsKIAl9CisKKwlpZiAoZGV2LT5idXMtPnNlbGYpCisJCXBjaWVfYXNwbV9leGl0X2xpbmtfc3RhdGUoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2Rlc3Ryb3lfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9yb20uYyBiL2RyaXZlcnMvcGNpL3JvbS5jCmluZGV4IGE5OGIyNDcuLmJkNWMwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3JvbS5jCisrKyBiL2RyaXZlcnMvcGNpL3JvbS5jCkBAIC0yNDIsOCArMjQyLDcgQEAKICNlbmRpZiAgLyogIDAgICovCiAKIC8qKgotICogcGNpX2NsZWFudXBfcm9tIC0gaW50ZXJuYWwgcm91dGluZSBmb3IgZnJlZWluZyB0aGUgUk9NIGNvcHkgY3JlYXRlZAotICogYnkgcGNpX21hcF9yb21fY29weSBjYWxsZWQgZnJvbSByZW1vdmUuYworICogcGNpX2NsZWFudXBfcm9tIC0gZnJlZSB0aGUgUk9NIGNvcHkgY3JlYXRlZCBieSBwY2lfbWFwX3JvbV9jb3B5CiAgKiBAcGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAogICoKICAqIEZyZWUgdGhlIGNvcGllZCBST00gaWYgd2UgYWxsb2NhdGVkIG9uZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggODU0MTAzNDAyLi4yMTc4MTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYworKysgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMTE0LDMxICsxMTQsNjMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCi0KIC8qKgogICogcGNpX2ZpbmRfc2xvdCAtIGxvY2F0ZSBQQ0kgZGV2aWNlIGZyb20gYSBnaXZlbiBQQ0kgc2xvdAogICogQGJ1czogbnVtYmVyIG9mIFBDSSBidXMgb24gd2hpY2ggZGVzaXJlZCBQQ0kgZGV2aWNlIHJlc2lkZXMKLSAqIEBkZXZmbjogZW5jb2RlcyBudW1iZXIgb2YgUENJIHNsb3QgaW4gd2hpY2ggdGhlIGRlc2lyZWQgUENJIAotICogZGV2aWNlIHJlc2lkZXMgYW5kIHRoZSBsb2dpY2FsIGRldmljZSBudW1iZXIgd2l0aGluIHRoYXQgc2xvdCAKKyAqIEBkZXZmbjogZW5jb2RlcyBudW1iZXIgb2YgUENJIHNsb3QgaW4gd2hpY2ggdGhlIGRlc2lyZWQgUENJCisgKiBkZXZpY2UgcmVzaWRlcyBhbmQgdGhlIGxvZ2ljYWwgZGV2aWNlIG51bWJlciB3aXRoaW4gdGhhdCBzbG90CiAgKiBpbiBjYXNlIG9mIG11bHRpLWZ1bmN0aW9uIGRldmljZXMuCiAgKgotICogR2l2ZW4gYSBQQ0kgYnVzIGFuZCBzbG90L2Z1bmN0aW9uIG51bWJlciwgdGhlIGRlc2lyZWQgUENJIGRldmljZSAKKyAqIEdpdmVuIGEgUENJIGJ1cyBhbmQgc2xvdC9mdW5jdGlvbiBudW1iZXIsIHRoZSBkZXNpcmVkIFBDSSBkZXZpY2UKICAqIGlzIGxvY2F0ZWQgaW4gc3lzdGVtIGdsb2JhbCBsaXN0IG9mIFBDSSBkZXZpY2VzLiAgSWYgdGhlIGRldmljZQotICogaXMgZm91bmQsIGEgcG9pbnRlciB0byBpdHMgZGF0YSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuICBJZiBubyAKKyAqIGlzIGZvdW5kLCBhIHBvaW50ZXIgdG8gaXRzIGRhdGEgc3RydWN0dXJlIGlzIHJldHVybmVkLiAgSWYgbm8KICAqIGRldmljZSBpcyBmb3VuZCwgJU5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueSBtb3JlOyB1c2UgcGNpX2dldF9zbG90KCkgaW5zdGVhZCwgYXMKKyAqIHRoZSBQQ0kgZGV2aWNlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIGRpc2FwcGVhciBhdCBhbnkgbW9tZW50IGluCisgKiB0aW1lLgogICovCi1zdHJ1Y3QgcGNpX2RldiAqCi1wY2lfZmluZF9zbG90KHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbikKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zbG90KHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAotCXdoaWxlICgoZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKLQkJaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gYnVzICYmIGRldi0+ZGV2Zm4gPT0gZGV2Zm4pCisJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJCWlmIChkZXYtPmJ1cy0+bnVtYmVyID09IGJ1cyAmJiBkZXYtPmRldmZuID09IGRldmZuKSB7CisJCQlwY2lfZGV2X3B1dChkZXYpOwogCQkJcmV0dXJuIGRldjsKKwkJfQogCX0KIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0wocGNpX2ZpbmRfc2xvdCk7CiAKKy8qKgorICogcGNpX2ZpbmRfZGV2aWNlIC0gYmVnaW4gb3IgY29udGludWUgc2VhcmNoaW5nIGZvciBhIFBDSSBkZXZpY2UgYnkgdmVuZG9yL2RldmljZSBpZAorICogQHZlbmRvcjogUENJIHZlbmRvciBpZCB0byBtYXRjaCwgb3IgJVBDSV9BTllfSUQgdG8gbWF0Y2ggYWxsIHZlbmRvciBpZHMKKyAqIEBkZXZpY2U6IFBDSSBkZXZpY2UgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCBkZXZpY2UgaWRzCisgKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgorICoKKyAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmQKKyAqIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yIGFuZCBAZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMKKyAqIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KKyAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCisgKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlCisgKiBvbiB0aGUgZ2xvYmFsIGxpc3QuCisgKgorICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueSBtb3JlOyB1c2UgcGNpX2dldF9kZXZpY2UoKSBpbnN0ZWFkLCBhcworICogdGhlIFBDSSBkZXZpY2UgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4KKyAqIHRpbWUuCisgKi8KK3N0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCXBkZXYgPSBwY2lfZ2V0X3N1YnN5cyh2ZW5kb3IsIGRldmljZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZnJvbSk7CisJcGNpX2Rldl9wdXQocGRldik7CisJcmV0dXJuIHBkZXY7Cit9CitFWFBPUlRfU1lNQk9MKHBjaV9maW5kX2RldmljZSk7CiAjZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KIAogLyoqCkBAIC0yMDQsODYgKzIzNiw1MiBAQAogCXJldHVybiBOVUxMOwogfQogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKLS8qKgotICogcGNpX2ZpbmRfc3Vic3lzIC0gYmVnaW4gb3IgY29udGludWUgc2VhcmNoaW5nIGZvciBhIFBDSSBkZXZpY2UgYnkgdmVuZG9yL3N1YnZlbmRvci9kZXZpY2Uvc3ViZGV2aWNlIGlkCi0gKiBAdmVuZG9yOiBQQ0kgdmVuZG9yIGlkIHRvIG1hdGNoLCBvciAlUENJX0FOWV9JRCB0byBtYXRjaCBhbGwgdmVuZG9yIGlkcwotICogQGRldmljZTogUENJIGRldmljZSBpZCB0byBtYXRjaCwgb3IgJVBDSV9BTllfSUQgdG8gbWF0Y2ggYWxsIGRldmljZSBpZHMKLSAqIEBzc192ZW5kb3I6IFBDSSBzdWJzeXN0ZW0gdmVuZG9yIGlkIHRvIG1hdGNoLCBvciAlUENJX0FOWV9JRCB0byBtYXRjaCBhbGwgdmVuZG9yIGlkcwotICogQHNzX2RldmljZTogUENJIHN1YnN5c3RlbSBkZXZpY2UgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCBkZXZpY2UgaWRzCi0gKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgotICoKLSAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMKLSAqIGZvdW5kIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yLCBAZGV2aWNlLCBAc3NfdmVuZG9yIGFuZCBAc3NfZGV2aWNlLCBhCi0gKiBwb2ludGVyIHRvIGl0cyBkZXZpY2Ugc3RydWN0dXJlIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCi0gKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlCi0gKiBvbiB0aGUgZ2xvYmFsIGxpc3QuCi0gKgotICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueSBtb3JlOyB1c2UgcGNpX2dldF9zdWJzeXMoKSBpbnN0ZWFkLCBhcwotICogdGhlIFBDSSBkZXZpY2UgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4KLSAqIHRpbWUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqIHBjaV9maW5kX3N1YnN5cyh1bnNpZ25lZCBpbnQgdmVuZG9yLAotCQkJCSAgICAgICAgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQkJdW5zaWduZWQgaW50IHNzX3ZlbmRvciwKLQkJCQkJdW5zaWduZWQgaW50IHNzX2RldmljZSwKLQkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pCitzdGF0aWMgaW50IG1hdGNoX3BjaV9kZXZfYnlfaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKm47Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBkYXRhOwogCi0JV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7Ci0KLQkvKgotCSAqIHBjaV9maW5kX3N1YnN5cygpIGNhbiBiZSBjYWxsZWQgb24gdGhlIGlkZV9zZXR1cCgpIHBhdGgsIHN1cGVyLWVhcmx5Ci0JICogaW4gYm9vdC4gIEJ1dCB0aGUgZG93bl9yZWFkKCkgd2lsbCBlbmFibGUgbG9jYWwgaW50ZXJydXB0cywgd2hpY2gKLQkgKiBjYW4gY2F1c2Ugc29tZSBtYWNoaW5lcyB0byBjcmFzaC4gIFNvIGhlcmUgd2UgZGV0ZWN0IGFuZCBmbGFnIHRoYXQKLQkgKiBzaXR1YXRpb24gYW5kIGJhaWwgb3V0IGVhcmx5LgotCSAqLwotCWlmICh1bmxpa2VseShub19wY2lfZGV2aWNlcygpKSkKLQkJcmV0dXJuIE5VTEw7Ci0JZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7Ci0JbiA9IGZyb20gPyBmcm9tLT5nbG9iYWxfbGlzdC5uZXh0IDogcGNpX2RldmljZXMubmV4dDsKLQotCXdoaWxlIChuICYmIChuICE9ICZwY2lfZGV2aWNlcykpIHsKLQkJZGV2ID0gcGNpX2Rldl9nKG4pOwotCQlpZiAoKHZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGRldi0+dmVuZG9yID09IHZlbmRvcikgJiYKLQkJICAgIChkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBkZXYtPmRldmljZSA9PSBkZXZpY2UpICYmCi0JCSAgICAoc3NfdmVuZG9yID09IFBDSV9BTllfSUQgfHwgZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IHNzX3ZlbmRvcikgJiYKLQkJICAgIChzc19kZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gc3NfZGV2aWNlKSkKLQkJCWdvdG8gZXhpdDsKLQkJbiA9IG4tPm5leHQ7Ci0JfQotCWRldiA9IE5VTEw7Ci1leGl0OgotCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKLQlyZXR1cm4gZGV2OworCWlmIChwY2lfbWF0Y2hfb25lX2RldmljZShpZCwgcGRldikpCisJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCi0vKioKLSAqIHBjaV9maW5kX2RldmljZSAtIGJlZ2luIG9yIGNvbnRpbnVlIHNlYXJjaGluZyBmb3IgYSBQQ0kgZGV2aWNlIGJ5IHZlbmRvci9kZXZpY2UgaWQKLSAqIEB2ZW5kb3I6IFBDSSB2ZW5kb3IgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCB2ZW5kb3IgaWRzCi0gKiBAZGV2aWNlOiBQQ0kgZGV2aWNlIGlkIHRvIG1hdGNoLCBvciAlUENJX0FOWV9JRCB0byBtYXRjaCBhbGwgZGV2aWNlIGlkcworLyoKKyAqIHBjaV9nZXRfZGV2X2J5X2lkIC0gYmVnaW4gb3IgY29udGludWUgc2VhcmNoaW5nIGZvciBhIFBDSSBkZXZpY2UgYnkgaWQKKyAqIEBpZDogcG9pbnRlciB0byBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0byBtYXRjaCBmb3IgdGhlIGRldmljZQogICogQGZyb206IFByZXZpb3VzIFBDSSBkZXZpY2UgZm91bmQgaW4gc2VhcmNoLCBvciAlTlVMTCBmb3IgbmV3IHNlYXJjaC4KICAqCiAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzLiAgSWYgYSBQQ0kgZGV2aWNlIGlzIGZvdW5kCi0gKiB3aXRoIGEgbWF0Y2hpbmcgQHZlbmRvciBhbmQgQGRldmljZSwgYSBwb2ludGVyIHRvIGl0cyBkZXZpY2Ugc3RydWN0dXJlIGlzCi0gKiByZXR1cm5lZC4gIE90aGVyd2lzZSwgJU5VTEwgaXMgcmV0dXJuZWQuCi0gKiBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5IHBhc3NpbmcgJU5VTEwgYXMgdGhlIEBmcm9tIGFyZ3VtZW50LgotICogT3RoZXJ3aXNlIGlmIEBmcm9tIGlzIG5vdCAlTlVMTCwgc2VhcmNoZXMgY29udGludWUgZnJvbSBuZXh0IGRldmljZQotICogb24gdGhlIGdsb2JhbCBsaXN0LgotICogCi0gKiBOT1RFOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gYW55IG1vcmU7IHVzZSBwY2lfZ2V0X2RldmljZSgpIGluc3RlYWQsIGFzCi0gKiB0aGUgUENJIGRldmljZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBkaXNhcHBlYXIgYXQgYW55IG1vbWVudCBpbgotICogdGltZS4KKyAqIHdpdGggYSBtYXRjaGluZyBpZCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQsIGFuZCB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgZGV2aWNlIGlzIGluY3JlbWVudGVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KKyAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2UKKyAqIGlmIEBmcm9tIGlzIG5vdCAlTlVMTCwgc2VhcmNoZXMgY29udGludWUgZnJvbSBuZXh0IGRldmljZSBvbiB0aGUgZ2xvYmFsCisgKiBsaXN0LiAgVGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgQGZyb20gaXMgYWx3YXlzIGRlY3JlbWVudGVkIGlmIGl0IGlzIG5vdAorICogJU5VTEwuCisgKgorICogVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgdXNlIGJ5IHRoZSBvdGhlciBzZWFyY2ggZnVuY3Rpb25zIGluCisgKiB0aGlzIGZpbGUuCiAgKi8KLXN0cnVjdCBwY2lfZGV2ICoKLXBjaV9maW5kX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZfYnlfaWQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLAorCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pCiB7Ci0JcmV0dXJuIHBjaV9maW5kX3N1YnN5cyh2ZW5kb3IsIGRldmljZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZnJvbSk7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldl9zdGFydCA9IE5VTEw7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCisJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CisJaWYgKGZyb20pIHsKKwkJLyogRklYTUUKKwkJICogdGFrZSB0aGUgY2FzdCBvZmYsIHdoZW4gYnVzX2ZpbmRfZGV2aWNlIGlzIG1hZGUgY29uc3QuCisJCSAqLworCQlkZXZfc3RhcnQgPSAoc3RydWN0IGRldmljZSAqKSZmcm9tLT5kZXY7CisJfQorCWRldiA9IGJ1c19maW5kX2RldmljZSgmcGNpX2J1c190eXBlLCBkZXZfc3RhcnQsICh2b2lkICopaWQsCisJCQkgICAgICBtYXRjaF9wY2lfZGV2X2J5X2lkKTsKKwlpZiAoZGV2KQorCQlwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXJldHVybiBwZGV2OwogfQotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCiAKIC8qKgogICogcGNpX2dldF9zdWJzeXMgLSBiZWdpbiBvciBjb250aW51ZSBzZWFyY2hpbmcgZm9yIGEgUENJIGRldmljZSBieSB2ZW5kb3Ivc3VidmVuZG9yL2RldmljZS9zdWJkZXZpY2UgaWQKQEAgLTMwMSw0MiArMjk5LDM0IEBACiAgKiBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZSBnbG9iYWwgbGlzdC4KICAqIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIEBmcm9tIGlzIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpcyBub3QgJU5VTEwuCiAgKi8KLXN0cnVjdCBwY2lfZGV2ICogCi1wY2lfZ2V0X3N1YnN5cyh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCSAgICAgICB1bnNpZ25lZCBpbnQgc3NfdmVuZG9yLCB1bnNpZ25lZCBpbnQgc3NfZGV2aWNlLAotCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKK3N0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X3N1YnN5cyh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzc192ZW5kb3IsIHVuc2lnbmVkIGludCBzc19kZXZpY2UsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbjsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCi0JV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOwogCiAJLyoKLQkgKiBwY2lfZ2V0X3N1YnN5cygpIGNhbiBwb3RlbnRpYWxseSBiZSBjYWxsZWQgYnkgZHJpdmVycyBzdXBlci1lYXJseQotCSAqIGluIGJvb3QuICBCdXQgdGhlIGRvd25fcmVhZCgpIHdpbGwgZW5hYmxlIGxvY2FsIGludGVycnVwdHMsIHdoaWNoCi0JICogY2FuIGNhdXNlIHNvbWUgbWFjaGluZXMgdG8gY3Jhc2guICBTbyBoZXJlIHdlIGRldGVjdCBhbmQgZmxhZyB0aGF0Ci0JICogc2l0dWF0aW9uIGFuZCBiYWlsIG91dCBlYXJseS4KKwkgKiBwY2lfZmluZF9zdWJzeXMoKSBjYW4gYmUgY2FsbGVkIG9uIHRoZSBpZGVfc2V0dXAoKSBwYXRoLAorCSAqIHN1cGVyLWVhcmx5IGluIGJvb3QuICBCdXQgdGhlIGRvd25fcmVhZCgpIHdpbGwgZW5hYmxlIGxvY2FsCisJICogaW50ZXJydXB0cywgd2hpY2ggY2FuIGNhdXNlIHNvbWUgbWFjaGluZXMgdG8gY3Jhc2guICBTbyBoZXJlIHdlCisJICogZGV0ZWN0IGFuZCBmbGFnIHRoYXQgc2l0dWF0aW9uIGFuZCBiYWlsIG91dCBlYXJseS4KIAkgKi8KIAlpZiAodW5saWtlbHkobm9fcGNpX2RldmljZXMoKSkpCiAJCXJldHVybiBOVUxMOwotCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOwotCW4gPSBmcm9tID8gZnJvbS0+Z2xvYmFsX2xpc3QubmV4dCA6IHBjaV9kZXZpY2VzLm5leHQ7CiAKLQl3aGlsZSAobiAmJiAobiAhPSAmcGNpX2RldmljZXMpKSB7Ci0JCWRldiA9IHBjaV9kZXZfZyhuKTsKLQkJaWYgKCh2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBkZXYtPnZlbmRvciA9PSB2ZW5kb3IpICYmCi0JCSAgICAoZGV2aWNlID09IFBDSV9BTllfSUQgfHwgZGV2LT5kZXZpY2UgPT0gZGV2aWNlKSAmJgotCQkgICAgKHNzX3ZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBzc192ZW5kb3IpICYmCi0JCSAgICAoc3NfZGV2aWNlID09IFBDSV9BTllfSUQgfHwgZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IHNzX2RldmljZSkpCi0JCQlnb3RvIGV4aXQ7Ci0JCW4gPSBuLT5uZXh0OwotCX0KLQlkZXYgPSBOVUxMOwotZXhpdDoKLQlkZXYgPSBwY2lfZGV2X2dldChkZXYpOwotCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKLQlwY2lfZGV2X3B1dChmcm9tKTsKLQlyZXR1cm4gZGV2OworCWlkID0ga3phbGxvYyhzaXplb2YoKmlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZCkKKwkJcmV0dXJuIE5VTEw7CisJaWQtPnZlbmRvciA9IHZlbmRvcjsKKwlpZC0+ZGV2aWNlID0gZGV2aWNlOworCWlkLT5zdWJ2ZW5kb3IgPSBzc192ZW5kb3I7CisJaWQtPnN1YmRldmljZSA9IHNzX2RldmljZTsKKworCXBkZXYgPSBwY2lfZ2V0X2Rldl9ieV9pZChpZCwgZnJvbSk7CisJa2ZyZWUoaWQpOworCisJcmV0dXJuIHBkZXY7CiB9CiAKIC8qKgpAQCAtMzYwLDQ2ICszNTAsNiBAQAogfQogCiAvKioKLSAqIHBjaV9nZXRfZGV2aWNlX3JldmVyc2UgLSBiZWdpbiBvciBjb250aW51ZSBzZWFyY2hpbmcgZm9yIGEgUENJIGRldmljZSBieSB2ZW5kb3IvZGV2aWNlIGlkCi0gKiBAdmVuZG9yOiBQQ0kgdmVuZG9yIGlkIHRvIG1hdGNoLCBvciAlUENJX0FOWV9JRCB0byBtYXRjaCBhbGwgdmVuZG9yIGlkcwotICogQGRldmljZTogUENJIGRldmljZSBpZCB0byBtYXRjaCwgb3IgJVBDSV9BTllfSUQgdG8gbWF0Y2ggYWxsIGRldmljZSBpZHMKLSAqIEBmcm9tOiBQcmV2aW91cyBQQ0kgZGV2aWNlIGZvdW5kIGluIHNlYXJjaCwgb3IgJU5VTEwgZm9yIG5ldyBzZWFyY2guCi0gKgotICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBQQ0kgZGV2aWNlcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZgotICogcGNpX2dldF9kZXZpY2UuCi0gKiBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmQgd2l0aCBhIG1hdGNoaW5nIEB2ZW5kb3IgYW5kIEBkZXZpY2UsIHRoZSByZWZlcmVuY2UKLSAqIGNvdW50IHRvIHRoZSAgZGV2aWNlIGlzIGluY3JlbWVudGVkIGFuZCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUKLSAqIGlzIHJldHVybmVkIE90aGVyd2lzZSwgJU5VTEwgaXMgcmV0dXJuZWQuICBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5Ci0gKiBwYXNzaW5nICVOVUxMIGFzIHRoZSBAZnJvbSBhcmd1bWVudC4gIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsCi0gKiBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZSBnbG9iYWwgbGlzdC4gIFRoZSByZWZlcmVuY2UKLSAqIGNvdW50IGZvciBAZnJvbSBpcyBhbHdheXMgZGVjcmVtZW50ZWQgaWYgaXQgaXMgbm90ICVOVUxMLgotICovCi1zdHJ1Y3QgcGNpX2RldiAqCi1wY2lfZ2V0X2RldmljZV9yZXZlcnNlKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKm47Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOwotCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOwotCW4gPSBmcm9tID8gZnJvbS0+Z2xvYmFsX2xpc3QucHJldiA6IHBjaV9kZXZpY2VzLnByZXY7Ci0KLQl3aGlsZSAobiAmJiAobiAhPSAmcGNpX2RldmljZXMpKSB7Ci0JCWRldiA9IHBjaV9kZXZfZyhuKTsKLQkJaWYgKCh2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBkZXYtPnZlbmRvciA9PSB2ZW5kb3IpICYmCi0JCSAgICAoZGV2aWNlID09IFBDSV9BTllfSUQgfHwgZGV2LT5kZXZpY2UgPT0gZGV2aWNlKSkKLQkJCWdvdG8gZXhpdDsKLQkJbiA9IG4tPnByZXY7Ci0JfQotCWRldiA9IE5VTEw7Ci1leGl0OgotCWRldiA9IHBjaV9kZXZfZ2V0KGRldik7Ci0JdXBfcmVhZCgmcGNpX2J1c19zZW0pOwotCXBjaV9kZXZfcHV0KGZyb20pOwotCXJldHVybiBkZXY7Ci19Ci0KLS8qKgogICogcGNpX2dldF9jbGFzcyAtIGJlZ2luIG9yIGNvbnRpbnVlIHNlYXJjaGluZyBmb3IgYSBQQ0kgZGV2aWNlIGJ5IGNsYXNzCiAgKiBAY2xhc3M6IHNlYXJjaCBmb3IgYSBQQ0kgZGV2aWNlIHdpdGggdGhpcyBjbGFzcyBkZXNpZ25hdGlvbgogICogQGZyb206IFByZXZpb3VzIFBDSSBkZXZpY2UgZm91bmQgaW4gc2VhcmNoLCBvciAlTlVMTCBmb3IgbmV3IHNlYXJjaC4KQEAgLTQxNSw0NiArMzY1LDIxIEBACiAgKi8KIHN0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2NsYXNzKHVuc2lnbmVkIGludCBjbGFzcywgc3RydWN0IHBjaV9kZXYgKmZyb20pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCBwY2lfZGV2aWNlX2lkICppZDsKIAotCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOwotCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOwotCW4gPSBmcm9tID8gZnJvbS0+Z2xvYmFsX2xpc3QubmV4dCA6IHBjaV9kZXZpY2VzLm5leHQ7CisJaWQgPSBremFsbG9jKHNpemVvZigqaWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkKQorCQlyZXR1cm4gTlVMTDsKKwlpZC0+dmVuZG9yID0gaWQtPmRldmljZSA9IGlkLT5zdWJ2ZW5kb3IgPSBpZC0+c3ViZGV2aWNlID0gUENJX0FOWV9JRDsKKwlpZC0+Y2xhc3NfbWFzayA9IFBDSV9BTllfSUQ7CisJaWQtPmNsYXNzID0gY2xhc3M7CiAKLQl3aGlsZSAobiAmJiAobiAhPSAmcGNpX2RldmljZXMpKSB7Ci0JCWRldiA9IHBjaV9kZXZfZyhuKTsKLQkJaWYgKGRldi0+Y2xhc3MgPT0gY2xhc3MpCi0JCQlnb3RvIGV4aXQ7Ci0JCW4gPSBuLT5uZXh0OwotCX0KLQlkZXYgPSBOVUxMOwotZXhpdDoKLQlkZXYgPSBwY2lfZGV2X2dldChkZXYpOwotCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKLQlwY2lfZGV2X3B1dChmcm9tKTsKKwlkZXYgPSBwY2lfZ2V0X2Rldl9ieV9pZChpZCwgZnJvbSk7CisJa2ZyZWUoaWQpOwogCXJldHVybiBkZXY7CiB9CiAKLWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZmluZF9wcmVzZW50KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmQgPSBOVUxMOwotCi0JV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7Ci0JZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7Ci0Jd2hpbGUgKGlkcy0+dmVuZG9yIHx8IGlkcy0+c3VidmVuZG9yIHx8IGlkcy0+Y2xhc3NfbWFzaykgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnBjaV9kZXZpY2VzLCBnbG9iYWxfbGlzdCkgewotCQkJaWYgKChmb3VuZCA9IHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkcywgZGV2KSkgIT0gTlVMTCkKLQkJCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJaWRzKys7Ci0JfQotZXhpdDoKLQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7Ci0JcmV0dXJuIGZvdW5kOwotfQotCiAvKioKICAqIHBjaV9kZXZfcHJlc2VudCAtIFJldHVybnMgMSBpZiBkZXZpY2UgbWF0Y2hpbmcgdGhlIGRldmljZSBsaXN0IGlzIHByZXNlbnQsIDAgaWYgbm90LgogICogQGlkczogQSBwb2ludGVyIHRvIGEgbnVsbCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlcwpAQCAtNDY4LDIzICszOTMsMjcgQEAKICAqLwogaW50IHBjaV9kZXZfcHJlc2VudChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzKQogewotCXJldHVybiBwY2lfZmluZF9wcmVzZW50KGlkcykgPT0gTlVMTCA/IDAgOiAxOworCXN0cnVjdCBwY2lfZGV2ICpmb3VuZCA9IE5VTEw7CisKKwlXQVJOX09OKGluX2ludGVycnVwdCgpKTsKKwl3aGlsZSAoaWRzLT52ZW5kb3IgfHwgaWRzLT5zdWJ2ZW5kb3IgfHwgaWRzLT5jbGFzc19tYXNrKSB7CisJCWZvdW5kID0gcGNpX2dldF9kZXZfYnlfaWQoaWRzLCBOVUxMKTsKKwkJaWYgKGZvdW5kKQorCQkJZ290byBleGl0OworCQlpZHMrKzsKKwl9CitleGl0OgorCWlmIChmb3VuZCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0wocGNpX2Rldl9wcmVzZW50KTsKLUVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfcHJlc2VudCk7Ci0KLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQotRVhQT1JUX1NZTUJPTChwY2lfZmluZF9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTChwY2lfZmluZF9zbG90KTsKLSNlbmRpZiAvKiBDT05GSUdfUENJX0xFR0FDWSAqLwogCiAvKiBGb3IgYm9vdCB0aW1lIHdvcmsgKi8KIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfYnVzKTsKIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfbmV4dF9idXMpOwogLyogRm9yIGV2ZXJ5b25lICovCiBFWFBPUlRfU1lNQk9MKHBjaV9nZXRfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wocGNpX2dldF9kZXZpY2VfcmV2ZXJzZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9nZXRfc3Vic3lzKTsKIEVYUE9SVF9TWU1CT0wocGNpX2dldF9zbG90KTsKIEVYUE9SVF9TWU1CT0wocGNpX2dldF9idXNfYW5kX3Nsb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCAyNjJiMDQzLi5mOWI3YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNjUsNiArNjUsNyBAQAogCQlyZXMgPSBsaXN0LT5yZXM7CiAJCWlkeCA9IHJlcyAtICZsaXN0LT5kZXYtPnJlc291cmNlWzBdOwogCQlpZiAocGNpX2Fzc2lnbl9yZXNvdXJjZShsaXN0LT5kZXYsIGlkeCkpIHsKKwkJCS8qIEZJWE1FOiBnZXQgcmlkIG9mIHRoaXMgKi8KIAkJCXJlcy0+c3RhcnQgPSAwOwogCQkJcmVzLT5lbmQgPSAwOwogCQkJcmVzLT5mbGFncyA9IDA7CkBAIC0xNDQsOCArMTQ1LDcgQEAKICAgIGNvbmZpZyBzcGFjZSB3cml0ZXMsIHNvIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCBhbiBJL08gd2luZG93IG9mCiAgICB0aGUgYnJpZGdlIHdpbGwgaGF2ZSBzb21lIHVuZGVzaXJhYmxlIGFkZHJlc3MgKGUuZy4gMCkgYWZ0ZXIgdGhlCiAgICBmaXJzdCB3cml0ZS4gRGl0dG8gNjQtYml0IHByZWZldGNoYWJsZSBNTUlPLiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdAotcGNpX3NldHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKQEAgLTIwNiwxMCArMjA2LDggQEAKIAlpZiAoYnVzLT5yZXNvdXJjZVsyXS0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKSB7CiAJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsKIAkJbCB8PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKLSNpZmRlZiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUCi0JCWJ1ID0gcmVnaW9uLnN0YXJ0ID4+IDMyOwotCQlsdSA9IHJlZ2lvbi5lbmQgPj4gMzI7Ci0jZW5kaWYKKwkJYnUgPSB1cHBlcl8zMl9iaXRzKHJlZ2lvbi5zdGFydCk7CisJCWx1ID0gdXBwZXJfMzJfYml0cyhyZWdpb24uZW5kKTsKIAkJREJHKEtFUk5fSU5GTyAiICBQUkVGRVRDSCB3aW5kb3c6IDB4JTAxNmxseC0weCUwMTZsbHhcbiIsCiAJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi5zdGFydCwKIAkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVnaW9uLmVuZCk7CkBAIC0zMjksNiArMzI3LDcgQEAKIAkvKiBBbGlnbm1lbnQgb2YgdGhlIElPIHdpbmRvdyBpcyBhbHdheXMgNEsgKi8KIAliX3Jlcy0+c3RhcnQgPSA0MDk2OwogCWJfcmVzLT5lbmQgPSBiX3Jlcy0+c3RhcnQgKyBzaXplIC0gMTsKKwliX3Jlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9TVEFSVEFMSUdOOwogfQogCiAvKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGJ1cyBhbmQgbWluaW1hbCBhbGlnbm1lbnQgd2hpY2gKQEAgLTQwMywxMSArNDAyLDExIEBACiAJfQogCWJfcmVzLT5zdGFydCA9IG1pbl9hbGlnbjsKIAliX3Jlcy0+ZW5kID0gc2l6ZSArIG1pbl9hbGlnbiAtIDE7CisJYl9yZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfU1RBUlRBTElHTjsKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0Ci1wY2lfYnVzX3NpemVfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGNpX2J1c19zaXplX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwogCXN0cnVjdCByZXNvdXJjZSAqYl9yZXMgPSAmYnJpZGdlLT5yZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFU107CkBAIC00ODgsMTIgKzQ4Nyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKLQkJLyogZG9uJ3Qgc2l6ZSBzdWJ0cmFjdGl2ZSBkZWNvZGluZyAodHJhbnNwYXJlbnQpCi0JCSAqIFBDSS10by1QQ0kgYnJpZGdlcyAqLwotCQlpZiAoYnVzLT5zZWxmLT50cmFuc3BhcmVudCkKLQkJCWJyZWFrOwogCQlwY2lfYnJpZGdlX2NoZWNrX3JhbmdlcyhidXMpOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQlwYnVzX3NpemVfaW8oYnVzKTsKIAkJLyogSWYgdGhlIGJyaWRnZSBzdXBwb3J0cyBwcmVmZXRjaGFibGUgcmFuZ2UsIHNpemUgaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKaW5kZXggNGJlN2NjZi4uN2QzNWNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKQEAgLTEzNywxMCArMTM3LDE2IEBACiAKIAlzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAltaW4gPSAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gUENJQklPU19NSU5fSU8gOiBQQ0lCSU9TX01JTl9NRU07Ci0JLyogVGhlIGJyaWRnZSByZXNvdXJjZXMgYXJlIHNwZWNpYWwsIGFzIHRoZWlyCi0JICAgc2l6ZSAhPSBhbGlnbm1lbnQuIFNpemluZyByb3V0aW5lcyByZXR1cm4KLQkgICByZXF1aXJlZCBhbGlnbm1lbnQgaW4gdGhlICJzdGFydCIgZmllbGQuICovCi0JYWxpZ24gPSAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykgPyBzaXplIDogcmVzLT5zdGFydDsKKworCWFsaWduID0gcmVzb3VyY2VfYWxpZ25tZW50KHJlcyk7CisJaWYgKCFhbGlnbikgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIChib2d1cyAiCisJCQkiYWxpZ25tZW50KSAlZCBbJWxseDolbGx4XSAoZmxhZ3MgJWx4KSBvZiAlc1xuIiwKKwkJCXJlc25vLCAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLCByZXMtPmZsYWdzLAorCQkJcGNpX25hbWUoZGV2KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIEZpcnN0LCB0cnkgZXhhY3QgcHJlZmV0Y2hpbmcgbWF0Y2guLiAqLwogCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UoYnVzLCByZXMsIHNpemUsIGFsaWduLCBtaW4sCkBAIC0xNjQsMTQgKzE3MCwxNiBAQAogCQkJcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAogCQkJcmVzbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwgcGNpX25hbWUoZGV2KSk7Ci0JfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7Ci0JCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXMsIHJlc25vKTsKKwl9IGVsc2UgeworCQlyZXMtPmZsYWdzICY9IH5JT1JFU09VUkNFX1NUQVJUQUxJR047CisJCWlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKQorCQkJcGNpX3VwZGF0ZV9yZXNvdXJjZShkZXYsIHJlcywgcmVzbm8pOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfRU1CRURERUQKKyNpZiAwCiBpbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZV9maXhlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwpAQCAtMjI2LDI5ICsyMzQsMjUgQEAKIAkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9QQ0lfRklYRUQpCiAJCQljb250aW51ZTsKIAotCQlyX2FsaWduID0gci0+ZW5kIC0gci0+c3RhcnQ7Ci0JCQogCQlpZiAoIShyLT5mbGFncykgfHwgci0+cGFyZW50KQogCQkJY29udGludWU7CisKKwkJcl9hbGlnbiA9IHJlc291cmNlX2FsaWdubWVudChyKTsKIAkJaWYgKCFyX2FsaWduKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6IElnbm9yZSBib2d1cyByZXNvdXJjZSAlZCAiCi0JCQkJIlslbGx4OiVsbHhdIG9mICVzXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBib2d1cyBhbGlnbm1lbnQgb2YgcmVzb3VyY2UgIgorCQkJCSIlZCBbJWxseDolbGx4XSAoZmxhZ3MgJWx4KSBvZiAlc1xuIiwKIAkJCQlpLCAodW5zaWduZWQgbG9uZyBsb25nKXItPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kLCBwY2lfbmFtZShkZXYpKTsKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXItPmVuZCwgci0+ZmxhZ3MsCisJCQkJcGNpX25hbWUoZGV2KSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlyX2FsaWduID0gKGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFUykgPyByX2FsaWduICsgMSA6IHItPnN0YXJ0OwogCQlmb3IgKGxpc3QgPSBoZWFkOyA7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CiAJCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24gPSAwOwogCQkJc3RydWN0IHJlc291cmNlX2xpc3QgKmxuID0gbGlzdC0+bmV4dDsKLQkJCWludCBpZHg7CiAKLQkJCWlmIChsbikgewotCQkJCWlkeCA9IGxuLT5yZXMgLSAmbG4tPmRldi0+cmVzb3VyY2VbMF07Ci0JCQkJYWxpZ24gPSAoaWR4IDwgUENJX0JSSURHRV9SRVNPVVJDRVMpID8KLQkJCQkJbG4tPnJlcy0+ZW5kIC0gbG4tPnJlcy0+c3RhcnQgKyAxIDoKLQkJCQkJbG4tPnJlcy0+c3RhcnQ7Ci0JCQl9CisJCQlpZiAobG4pCisJCQkJYWxpZ24gPSByZXNvdXJjZV9hbGlnbm1lbnQobG4tPnJlcyk7CisKIAkJCWlmIChyX2FsaWduID4gYWxpZ24pIHsKIAkJCQl0bXAgPSBrbWFsbG9jKHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCF0bXApCkBAIC0yNjMsMyArMjY3LDQ2IEBACiAJCX0KIAl9CiB9CisKK2ludCBwY2lfZW5hYmxlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKK3sKKwl1MTYgY21kLCBvbGRfY21kOworCWludCBpOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCW9sZF9jbWQgPSBjbWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgeworCQlpZiAoIShtYXNrICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisKKwkJciA9ICZkZXYtPnJlc291cmNlW2ldOworCisJCWlmICghKHItPmZsYWdzICYgKElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSkpKQorCQkJY29udGludWU7CisJCWlmICgoaSA9PSBQQ0lfUk9NX1JFU09VUkNFKSAmJgorCQkJCSghKHItPmZsYWdzICYgSU9SRVNPVVJDRV9ST01fRU5BQkxFKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXItPnBhcmVudCkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICJkZXZpY2Ugbm90IGF2YWlsYWJsZSBiZWNhdXNlIG9mICIKKwkJCQkiQkFSICVkIFslbGx4OiVsbHhdIGNvbGxpc2lvbnNcbiIsIGksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgci0+c3RhcnQsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgci0+ZW5kKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKKwkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCQljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOworCX0KKworCWlmIChjbWQgIT0gb2xkX2NtZCkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJlbmFibGluZyBkZXZpY2UgKCUwNHggLT4gJTA0eClcbiIsCisJCQkgb2xkX2NtZCwgY21kKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggOGIyMjI4MS4uZWQ4YzA2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC0yMDAsNiArMjAwLDcgQEAKIGNvbmZpZyBQQ01DSUFfU0ExMTAwCiAJdHJpc3RhdGUgIlNBMTEwMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfU0ExMTAwICYmIFBDTUNJQQorCWRlcGVuZHMgb24gQVJDSF9MVUJCT0NLIHx8IE1BQ0hfTUFJTlNUT05FIHx8IFBYQV9TSEFSUFNMIHx8IE1BQ0hfQVJNQ09SRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBTQTExeDAtYmFzZWQgUENNQ0lBIG9yIENGCiAJICBzb2NrZXRzLCBmb3VuZCBvbiBIUCBpUEFRcywgWW9weSwgYW5kIG90aGVyIFN0cm9uZ0FSTShSKS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwppbmRleCAzODVlMTQ1Li42ODQ5Njg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCkBAIC00MTksMyArNDE5LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQVQ5MSBDb21wYWN0IEZsYXNoIERyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgQnJvd25lbGwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXQ5MV9jZiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMgYi9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYwppbmRleCA3NDk1MTU1Li5lNTRlY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYwpAQCAtNjQ3LDcgKzY0NywxMiBAQAogCWlmICggKG1lbS0+Y2FyZF9zdGFydCA+IDB4M2ZmZmZmZikgfHwgKHJlZ2lvbi5zdGFydCA+IHJlZ2lvbi5lbmQpIHx8CiAJICAgICAobWVtLT5zcGVlZCA+IDEwMDApICkgewogCQlsZWF2ZSgiaTgyMDkyYWFfc2V0X21lbV9tYXA6IGludmFsaWQgYWRkcmVzcyAvIHNwZWVkIik7Ci0JCXByaW50aygiaW52YWxpZCBtZW0gbWFwIGZvciBzb2NrZXQgJWkgOiAlbHggdG8gJWx4IHdpdGggYSBzdGFydCBvZiAleCBcbiIsc29jayxyZWdpb24uc3RhcnQsIHJlZ2lvbi5lbmQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCXByaW50aygiaW52YWxpZCBtZW0gbWFwIGZvciBzb2NrZXQgJWk6ICVsbHggdG8gJWxseCB3aXRoIGEgIgorCQkJInN0YXJ0IG9mICV4XG4iLAorCQkJc29jaywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVnaW9uLnN0YXJ0LAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZWdpb24uZW5kLAorCQkJbWVtLT5jYXJkX3N0YXJ0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCmluZGV4IDJkZjIxNmIwLi5iYjZkYjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCkBAIC0zNDQsNiArMzQ0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfY2ZfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnJlbW92ZQkJPSBfX2V4aXRfcChvbWFwX2NmX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBvbWFwX2NmX3N1c3BlbmQsCkBAIC0zNjgsMyArMzY5LDQgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIENGIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwX2NmIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCBlNDM5MDQ0Li45NDE0MTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTIzOSw2ICsyMzksNyBAQAogCS5yZXN1bWUgCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyeHgtcGNtY2lhIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTI1OCwzICsyNTksNCBAQAogTU9EVUxFX0FVVEhPUigiU3RlZmFuIEVsZXR6aG9mZXIgPHN0ZWZhbi5lbGV0emhvZmVyQGlucXVhbnQuZGU+IGFuZCBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJMaW51eCBQQ01DSUEgQ2FyZCBTZXJ2aWNlczogUFhBMnh4IGNvcmUgc29ja2V0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpweGEyeHgtcGNtY2lhIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYwppbmRleCBmYmYyZjNhLi5lN2FiMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jbS14MjcwLmg+CiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYwppbmRleCAyYzkyNWI3Li4yNTdmNWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKQEAgLTg4LDYgKzg4LDE1IEBACiAjZGVmaW5lIF9MVEFHX01FTTMyUkFOR0UJMHg4NQogI2RlZmluZSBfTFRBR19GSVhFRE1FTTMyUkFOR0UJMHg4NgogCisvKgorICogU2l6ZXMgb2YgSVNBUE5QIGxvZ2ljYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc2V0cy4KKyAqIFNlZSBQTlAtSVNBLXYxLjBhLnBkZiwgQXBwZW5kaXggQS4KKyAqLworI2RlZmluZSBJU0FQTlBfTUFYX01FTQkJNAorI2RlZmluZSBJU0FQTlBfTUFYX1BPUlQJCTgKKyNkZWZpbmUgSVNBUE5QX01BWF9JUlEJCTIKKyNkZWZpbmUgSVNBUE5QX01BWF9ETUEJCTIKKwogc3RhdGljIHVuc2lnbmVkIGNoYXIgaXNhcG5wX2NoZWNrc3VtX3ZhbHVlOwogc3RhdGljIERFRklORV9NVVRFWChpc2FwbnBfY2ZnX211dGV4KTsKIHN0YXRpYyBpbnQgaXNhcG5wX2Nzbl9jb3VudDsKQEAgLTk0NSwxNCArOTU0LDE0IEBACiAKIAlkZXYtPmFjdGl2ZSA9IGlzYXBucF9yZWFkX2J5dGUoSVNBUE5QX0NGR19BQ1RJVkFURSk7CiAJaWYgKGRldi0+YWN0aXZlKSB7Ci0JCWZvciAodG1wID0gMDsgdG1wIDwgUE5QX01BWF9QT1JUOyB0bXArKykgeworCQlmb3IgKHRtcCA9IDA7IHRtcCA8IElTQVBOUF9NQVhfUE9SVDsgdG1wKyspIHsKIAkJCXJldCA9IGlzYXBucF9yZWFkX3dvcmQoSVNBUE5QX0NGR19QT1JUICsgKHRtcCA8PCAxKSk7CiAJCQlpZiAoIXJldCkKIAkJCQljb250aW51ZTsKIAkJCXJlcy0+cG9ydF9yZXNvdXJjZVt0bXBdLnN0YXJ0ID0gcmV0OwogCQkJcmVzLT5wb3J0X3Jlc291cmNlW3RtcF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwogCQl9Ci0JCWZvciAodG1wID0gMDsgdG1wIDwgUE5QX01BWF9NRU07IHRtcCsrKSB7CisJCWZvciAodG1wID0gMDsgdG1wIDwgSVNBUE5QX01BWF9NRU07IHRtcCsrKSB7CiAJCQlyZXQgPQogCQkJICAgIGlzYXBucF9yZWFkX3dvcmQoSVNBUE5QX0NGR19NRU0gKyAodG1wIDw8IDMpKSA8PCA4OwogCQkJaWYgKCFyZXQpCkBAIC05NjAsNyArOTY5LDcgQEAKIAkJCXJlcy0+bWVtX3Jlc291cmNlW3RtcF0uc3RhcnQgPSByZXQ7CiAJCQlyZXMtPm1lbV9yZXNvdXJjZVt0bXBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CiAJCX0KLQkJZm9yICh0bXAgPSAwOyB0bXAgPCBQTlBfTUFYX0lSUTsgdG1wKyspIHsKKwkJZm9yICh0bXAgPSAwOyB0bXAgPCBJU0FQTlBfTUFYX0lSUTsgdG1wKyspIHsKIAkJCXJldCA9CiAJCQkgICAgKGlzYXBucF9yZWFkX3dvcmQoSVNBUE5QX0NGR19JUlEgKyAodG1wIDw8IDEpKSA+PgogCQkJICAgICA4KTsKQEAgLTk3MCw3ICs5NzksNyBAQAogCQkJICAgIHJlcy0+aXJxX3Jlc291cmNlW3RtcF0uZW5kID0gcmV0OwogCQkJcmVzLT5pcnFfcmVzb3VyY2VbdG1wXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwogCQl9Ci0JCWZvciAodG1wID0gMDsgdG1wIDwgUE5QX01BWF9ETUE7IHRtcCsrKSB7CisJCWZvciAodG1wID0gMDsgdG1wIDwgSVNBUE5QX01BWF9ETUE7IHRtcCsrKSB7CiAJCQlyZXQgPSBpc2FwbnBfcmVhZF9ieXRlKElTQVBOUF9DRkdfRE1BICsgdG1wKTsKIAkJCWlmIChyZXQgPT0gNCkKIAkJCQljb250aW51ZTsKQEAgLTEwMDIsMTQgKzEwMTEsMTQgQEAKIAlpc2FwbnBfY2ZnX2JlZ2luKGRldi0+Y2FyZC0+bnVtYmVyLCBkZXYtPm51bWJlcik7CiAJZGV2LT5hY3RpdmUgPSAxOwogCWZvciAodG1wID0gMDsKLQkgICAgIHRtcCA8IFBOUF9NQVhfUE9SVAorCSAgICAgdG1wIDwgSVNBUE5QX01BWF9QT1JUCiAJICAgICAmJiAocmVzLT5wb3J0X3Jlc291cmNlW3RtcF0uCiAJCSBmbGFncyAmIChJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9VTlNFVCkpID09IElPUkVTT1VSQ0VfSU87CiAJICAgICB0bXArKykKIAkJaXNhcG5wX3dyaXRlX3dvcmQoSVNBUE5QX0NGR19QT1JUICsgKHRtcCA8PCAxKSwKIAkJCQkgIHJlcy0+cG9ydF9yZXNvdXJjZVt0bXBdLnN0YXJ0KTsKIAlmb3IgKHRtcCA9IDA7Ci0JICAgICB0bXAgPCBQTlBfTUFYX0lSUQorCSAgICAgdG1wIDwgSVNBUE5QX01BWF9JUlEKIAkgICAgICYmIChyZXMtPmlycV9yZXNvdXJjZVt0bXBdLgogCQkgZmxhZ3MgJiAoSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX1VOU0VUKSkgPT0gSU9SRVNPVVJDRV9JUlE7CiAJICAgICB0bXArKykgewpAQCAtMTAxOSwxNCArMTAyOCwxNCBAQAogCQlpc2FwbnBfd3JpdGVfYnl0ZShJU0FQTlBfQ0ZHX0lSUSArICh0bXAgPDwgMSksIGlycSk7CiAJfQogCWZvciAodG1wID0gMDsKLQkgICAgIHRtcCA8IFBOUF9NQVhfRE1BCisJICAgICB0bXAgPCBJU0FQTlBfTUFYX0RNQQogCSAgICAgJiYgKHJlcy0+ZG1hX3Jlc291cmNlW3RtcF0uCiAJCSBmbGFncyAmIChJT1JFU09VUkNFX0RNQSB8IElPUkVTT1VSQ0VfVU5TRVQpKSA9PSBJT1JFU09VUkNFX0RNQTsKIAkgICAgIHRtcCsrKQogCQlpc2FwbnBfd3JpdGVfYnl0ZShJU0FQTlBfQ0ZHX0RNQSArIHRtcCwKIAkJCQkgIHJlcy0+ZG1hX3Jlc291cmNlW3RtcF0uc3RhcnQpOwogCWZvciAodG1wID0gMDsKLQkgICAgIHRtcCA8IFBOUF9NQVhfTUVNCisJICAgICB0bXAgPCBJU0FQTlBfTUFYX01FTQogCSAgICAgJiYgKHJlcy0+bWVtX3Jlc291cmNlW3RtcF0uCiAJCSBmbGFncyAmIChJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfVU5TRVQpKSA9PSBJT1JFU09VUkNFX01FTTsKIAkgICAgIHRtcCsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCmluZGV4IDZhYTIzMWUuLjJkY2QxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAkgICAgICAgaSA8IFBOUF9NQVhfSVJRKQogCQlpKys7CiAJaWYgKGkgPj0gUE5QX01BWF9JUlEgJiYgIXdhcm5lZCkgewotCQlwcmludGsoS0VSTl9FUlIgInBucGFjcGk6IGV4Y2VlZGVkIHRoZSBtYXggbnVtYmVyIG9mIElSUSAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBucGFjcGk6IGV4Y2VlZGVkIHRoZSBtYXggbnVtYmVyIG9mIElSUSAiCiAJCQkJInJlc291cmNlczogJWQgXG4iLCBQTlBfTUFYX0lSUSk7CiAJCXdhcm5lZCA9IDE7CiAJCXJldHVybjsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQlyZXMtPmRtYV9yZXNvdXJjZVtpXS5zdGFydCA9IGRtYTsKIAkJcmVzLT5kbWFfcmVzb3VyY2VbaV0uZW5kID0gZG1hOwogCX0gZWxzZSBpZiAoIXdhcm5lZCkgewotCQlwcmludGsoS0VSTl9FUlIgInBucGFjcGk6IGV4Y2VlZGVkIHRoZSBtYXggbnVtYmVyIG9mIERNQSAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBucGFjcGk6IGV4Y2VlZGVkIHRoZSBtYXggbnVtYmVyIG9mIERNQSAiCiAJCQkJInJlc291cmNlczogJWQgXG4iLCBQTlBfTUFYX0RNQSk7CiAJCXdhcm5lZCA9IDE7CiAJfQpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCXJlcy0+cG9ydF9yZXNvdXJjZVtpXS5zdGFydCA9IGlvOwogCQlyZXMtPnBvcnRfcmVzb3VyY2VbaV0uZW5kID0gaW8gKyBsZW4gLSAxOwogCX0gZWxzZSBpZiAoIXdhcm5lZCkgewotCQlwcmludGsoS0VSTl9FUlIgInBucGFjcGk6IGV4Y2VlZGVkIHRoZSBtYXggbnVtYmVyIG9mIElPICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAicG5wYWNwaTogZXhjZWVkZWQgdGhlIG1heCBudW1iZXIgb2YgSU8gIgogCQkJCSJyZXNvdXJjZXM6ICVkIFxuIiwgUE5QX01BWF9QT1JUKTsKIAkJd2FybmVkID0gMTsKIAl9CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJcmVzLT5tZW1fcmVzb3VyY2VbaV0uc3RhcnQgPSBtZW07CiAJCXJlcy0+bWVtX3Jlc291cmNlW2ldLmVuZCA9IG1lbSArIGxlbiAtIDE7CiAJfSBlbHNlIGlmICghd2FybmVkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicG5wYWNwaTogZXhjZWVkZWQgdGhlIG1heCBudW1iZXIgb2YgbWVtICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAicG5wYWNwaTogZXhjZWVkZWQgdGhlIG1heCBudW1iZXIgb2YgbWVtICIKIAkJCQkicmVzb3VyY2VzOiAlZFxuIiwgUE5QX01BWF9NRU0pOwogCQl3YXJuZWQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3F1aXJrcy5jIGIvZHJpdmVycy9wbnAvcXVpcmtzLmMKaW5kZXggNDA2NTEzOS4uMzc5OTMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wbnAvcXVpcmtzLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgImJhc2UuaCIKIApAQCAtMTA5LDQyICsxMDgsNzMgQEAKIAkJICAgICAgICJwbnA6IFNCIGF1ZGlvIGRldmljZSBxdWlyayAtIGluY3JlYXNpbmcgcG9ydCByYW5nZVxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHF1aXJrX3N1cGVybWljcm9faDhkY2Vfc3lzdGVtKHN0cnVjdCBwbnBfZGV2ICpkZXYpCi17Ci0JaW50IGk7Ci0Jc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIHN1cGVybWljcm9faDhkY2VbXSA9IHsKLQkJewotCQkJLmlkZW50ID0gIlN1cGVybWljcm8gSDhEQ0UiLAotCQkJLm1hdGNoZXMgPSB7Ci0JCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU3VwZXJtaWNybyIpLAotCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSDhEQ0UiKSwKLQkJCX0sCi0JCX0sCi0JCXsgfQotCX07CiAKLQlpZiAoIWRtaV9jaGVja19zeXN0ZW0oc3VwZXJtaWNyb19oOGRjZSkpCi0JCXJldHVybjsKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworc3RhdGljIHZvaWQgcXVpcmtfc3lzdGVtX3BjaV9yZXNvdXJjZXMoc3RydWN0IHBucF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJcmVzb3VyY2Vfc2l6ZV90IHBucF9zdGFydCwgcG5wX2VuZCwgcGNpX3N0YXJ0LCBwY2lfZW5kOworCWludCBpLCBqOwogCiAJLyoKLQkgKiBPbiB0aGUgU3VwZXJtaWNybyBIOERDRSwgdGhlcmUncyBhIHN5c3RlbSBkZXZpY2Ugd2l0aCByZXNvdXJjZXMKLQkgKiB0aGF0IG92ZXJsYXAgQkFSIDYgb2YgdGhlIGJ1aWx0LWluIFNBVEEgUENJIGFkYXB0ZXIuICBJZiB0aGUgUE5QCi0JICogc3lzdGVtIGRldmljZSBjbGFpbXMgdGhlbSwgdGhlIHNhdGFfbnYgZHJpdmVyIHdvbid0IGJlIGFibGUgdG8uCi0JICogTW9yZSBkZXRhaWxzIGF0OgotCSAqICAgICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTI4MDY0MQotCSAqICAgICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTMxMzQ5MQotCSAqICAgICBodHRwOi8vbGttbC5vcmcvbGttbC8yMDA4LzEvOS80NDkKLQkgKiAgICAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUubGludXguYWNwaS5kZXZlbC8yNzMxMgorCSAqIFNvbWUgQklPU2VzIGhhdmUgUE5QIG1vdGhlcmJvYXJkIGRldmljZXMgd2l0aCByZXNvdXJjZXMgdGhhdAorCSAqIHBhcnRpYWxseSBvdmVybGFwIFBDSSBCQVJzLiAgVGhlIFBOUCBzeXN0ZW0gZHJpdmVyIGNsYWltcyB0aGVzZQorCSAqIG1vdGhlcmJvYXJkIHJlc291cmNlcywgd2hpY2ggcHJldmVudHMgdGhlIG5vcm1hbCBQQ0kgZHJpdmVyIGZyb20KKwkgKiByZXF1ZXN0aW5nIHRoZW0gbGF0ZXIuCisJICoKKwkgKiBUaGlzIHBhdGNoIGRpc2FibGVzIHRoZSBQTlAgcmVzb3VyY2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBQQ0kgQkFScworCSAqIHNvIHRoZXkgd29uJ3QgYmUgY2xhaW1lZCBieSB0aGUgUE5QIHN5c3RlbSBkcml2ZXIuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IFBOUF9NQVhfTUVNOyBpKyspIHsKLQkJaWYgKHBucF9tZW1fdmFsaWQoZGV2LCBpKSAmJiBwbnBfbWVtX2xlbihkZXYsIGkpICYmCi0JCSAgICAocG5wX21lbV9zdGFydChkZXYsIGkpICYgMHhkZmVmMDAwMCkgPT0gMHhkZmVmMDAwMCkgewotCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiZGlzYWJsaW5nIDB4JWxseC0weCVsbHggdG8gcHJldmVudCIKLQkJCQkiIGNvbmZsaWN0IHdpdGggc2F0YV9udiBQQ0kgZGV2aWNlXG4iLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBucF9tZW1fc3RhcnQoZGV2LCBpKSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSAocG5wX21lbV9zdGFydChkZXYsIGkpICsKLQkJCQkJcG5wX21lbV9sZW4oZGV2LCBpKSAtIDEpKTsKLQkJCXBucF9tZW1fZmxhZ3MoZGV2LCBpKSA9IDA7CisJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CisJCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgeworCQkJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgSU9SRVNPVVJDRV9NRU0pIHx8CisJCQkgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlwY2lfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQlwY2lfZW5kID0gcGNpX3Jlc291cmNlX2VuZChwZGV2LCBpKTsKKwkJCWZvciAoaiA9IDA7IGogPCBQTlBfTUFYX01FTTsgaisrKSB7CisJCQkJaWYgKCFwbnBfbWVtX3ZhbGlkKGRldiwgaikgfHwKKwkJCQkgICAgcG5wX21lbV9sZW4oZGV2LCBqKSA9PSAwKQorCQkJCQljb250aW51ZTsKKworCQkJCXBucF9zdGFydCA9IHBucF9tZW1fc3RhcnQoZGV2LCBqKTsKKwkJCQlwbnBfZW5kID0gcG5wX21lbV9lbmQoZGV2LCBqKTsKKworCQkJCS8qCisJCQkJICogSWYgdGhlIFBOUCByZWdpb24gZG9lc24ndCBvdmVybGFwIHRoZSBQQ0kKKwkJCQkgKiByZWdpb24gYXQgYWxsLCB0aGVyZSdzIG5vIHByb2JsZW0uCisJCQkJICovCisJCQkJaWYgKHBucF9lbmQgPCBwY2lfc3RhcnQgfHwgcG5wX3N0YXJ0ID4gcGNpX2VuZCkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBQTlAgcmVnaW9uIGNvbXBsZXRlbHkgZW5jbG9zZXMgKG9yIGlzCisJCQkJICogYXQgbGVhc3QgYXMgbGFyZ2UgYXMpIHRoZSBQQ0kgcmVnaW9uLCB0aGF0J3MKKwkJCQkgKiBhbHNvIE9LLiAgRm9yIGV4YW1wbGUsIHRoaXMgaGFwcGVucyB3aGVuIHRoZQorCQkJCSAqIFBOUCBkZXZpY2UgZGVzY3JpYmVzIGEgYnJpZGdlIHdpdGggUENJCisJCQkJICogYmVoaW5kIGl0LgorCQkJCSAqLworCQkJCWlmIChwbnBfc3RhcnQgPD0gcGNpX3N0YXJ0ICYmCisJCQkJICAgIHBucF9lbmQgPj0gcGNpX2VuZCkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAqIE90aGVyd2lzZSwgdGhlIFBOUCByZWdpb24gb3ZlcmxhcHMgKnBhcnQqIG9mCisJCQkJICogdGhlIFBDSSByZWdpb24sIGFuZCB0aGF0IG1pZ2h0IHByZXZlbnQgYSBQQ0kKKwkJCQkgKiBkcml2ZXIgZnJvbSByZXF1ZXN0aW5nIGl0cyByZXNvdXJjZXMuCisJCQkJICovCisJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAibWVtIHJlc291cmNlICIKKwkJCQkJIigweCVsbHgtMHglbGx4KSBvdmVybGFwcyAlcyBCQVIgJWQgIgorCQkJCQkiKDB4JWxseC0weCVsbHgpLCBkaXNhYmxpbmdcbiIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBucF9zdGFydCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcG5wX2VuZCwKKwkJCQkJcGNpX25hbWUocGRldiksIGksCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBjaV9zdGFydCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGNpX2VuZCk7CisJCQkJcG5wX21lbV9mbGFncyhkZXYsIGopID0gMDsKKwkJCX0KIAkJfQogCX0KIH0KQEAgLTE2OSw4ICsxOTksOCBAQAogCXsiQ1RMMDA0MyIsIHF1aXJrX3NiMTZhdWRpb19yZXNvdXJjZXN9LAogCXsiQ1RMMDA0NCIsIHF1aXJrX3NiMTZhdWRpb19yZXNvdXJjZXN9LAogCXsiQ1RMMDA0NSIsIHF1aXJrX3NiMTZhdWRpb19yZXNvdXJjZXN9LAotCXsiUE5QMGMwMSIsIHF1aXJrX3N1cGVybWljcm9faDhkY2Vfc3lzdGVtfSwKLQl7IlBOUDBjMDIiLCBxdWlya19zdXBlcm1pY3JvX2g4ZGNlX3N5c3RlbX0sCisJeyJQTlAwYzAxIiwgcXVpcmtfc3lzdGVtX3BjaV9yZXNvdXJjZXN9LAorCXsiUE5QMGMwMiIsIHF1aXJrX3N5c3RlbV9wY2lfcmVzb3VyY2VzfSwKIAl7IiJ9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczMtc3lzLW1hbmFnZXIuYyBiL2RyaXZlcnMvcHMzL3BzMy1zeXMtbWFuYWdlci5jCmluZGV4IGQ0ZjZmOTYuLjc2MDU0NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzMy1zeXMtbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvcHMzL3BzMy1zeXMtbWFuYWdlci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbHYxY2FsbC5oPgogI2luY2x1ZGUgPGFzbS9wczMuaD4KIAogI2luY2x1ZGUgInZ1YXJ0LmgiCkBAIC0xODcsNiArMTg4LDcgQEAKICAqIGNvbnRyb2xsZXIsIGFuZCBibHVldG9vdGggY29udHJvbGxlci4KICAqIEBQUzNfU01fV0FLRV9SVEM6CiAgKiBAUFMzX1NNX1dBS0VfUlRDX0VSUk9SOgorICogQFBTM19TTV9XQUtFX1dfT19MOiBFdGhlciBvciB3aXJlbGVzcyBMQU4uCiAgKiBAUFMzX1NNX1dBS0VfUF9PX1I6IFBvd2VyIG9uIHJlc2V0LgogICoKICAqIEFkZGl0aW9uYWwgd2FrZXVwIHNvdXJjZXMgd2hlbiBzcGVjaWZ5aW5nIFBTM19TTV9ORVhUX09QX1NZU19TSFVURE9XTi4KQEAgLTIwMCwxMCArMjAyLDE5IEBACiAJUFMzX1NNX1dBS0VfREVGQVVMVCAgID0gMCwKIAlQUzNfU01fV0FLRV9SVEMgICAgICAgPSAweDAwMDAwMDQwLAogCVBTM19TTV9XQUtFX1JUQ19FUlJPUiA9IDB4MDAwMDAwODAsCisJUFMzX1NNX1dBS0VfV19PX0wgICAgID0gMHgwMDAwMDQwMCwKIAlQUzNfU01fV0FLRV9QX09fUiAgICAgPSAweDgwMDAwMDAwLAogfTsKIAogLyoqCisgKiB1c2VyX3dha2Vfc291cmNlcyAtIFVzZXIgc3BlY2lmaWVkIHdha2V1cCBzb3VyY2VzLgorICoKKyAqIExvZ2ljYWwgT1Igb2YgZW51bSBwczNfc3lzX21hbmFnZXJfd2FrZV9zb3VyY2UgdHlwZXMuCisgKi8KKworc3RhdGljIHUzMiB1c2VyX3dha2Vfc291cmNlcyA9IFBTM19TTV9XQUtFX0RFRkFVTFQ7CisKKy8qKgogICogZW51bSBwczNfc3lzX21hbmFnZXJfY21kIC0gQ29tbWFuZCBmcm9tIHN5c3RlbSBtYW5hZ2VyIHRvIGd1ZXN0LgogICoKICAqIFRoZSBndWVzdCBjb21wbGV0ZXMgdGhlIGFjdGlvbnMgbmVlZGVkLCB0aGVuIGFja3Mgb3IgbmFrcyB0aGUgY29tbWFuZCB2aWEKQEAgLTU4MSw2ICs1OTIsMjMgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAorc3RhdGljIHZvaWQgcHMzX3N5c19tYW5hZ2VyX2ZpbihzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCit7CisJcHMzX3N5c19tYW5hZ2VyX3NlbmRfcmVxdWVzdF9zaHV0ZG93bihkZXYpOworCisJcHJfZW1lcmcoIlN5c3RlbSBIYWx0ZWQsIE9LIHRvIHR1cm4gb2ZmIHBvd2VyXG4iKTsKKworCXdoaWxlIChwczNfc3lzX21hbmFnZXJfaGFuZGxlX21zZyhkZXYpKSB7CisJCS8qIHBhdXNlIHVudGlsIG5leHQgREVDIGludGVycnVwdCAqLworCQlsdjFfcGF1c2UoMCk7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJLyogcGF1c2UsIGlnbm9yaW5nIERFQyBpbnRlcnJ1cHQgKi8KKwkJbHYxX3BhdXNlKDEpOworCX0KK30KKwogLyoqCiAgKiBwczNfc3lzX21hbmFnZXJfZmluYWxfcG93ZXJfb2ZmIC0gVGhlIGZpbmFsIHBsYXRmb3JtIG1hY2hpbmVfcG93ZXJfb2ZmIHJvdXRpbmUuCiAgKgpAQCAtNjAxLDEzICs2MjksOSBAQAogCXBzM192dWFydF9jYW5jZWxfYXN5bmMoZGV2KTsKIAogCXBzM19zeXNfbWFuYWdlcl9zZW5kX25leHRfb3AoZGV2LCBQUzNfU01fTkVYVF9PUF9TWVNfU0hVVERPV04sCi0JCVBTM19TTV9XQUtFX0RFRkFVTFQpOwotCXBzM19zeXNfbWFuYWdlcl9zZW5kX3JlcXVlc3Rfc2h1dGRvd24oZGV2KTsKKwkJdXNlcl93YWtlX3NvdXJjZXMpOwogCi0JcHJfZW1lcmcoIlN5c3RlbSBIYWx0ZWQsIE9LIHRvIHR1cm4gb2ZmIHBvd2VyXG4iKTsKLQotCXdoaWxlICgxKQotCQlwczNfc3lzX21hbmFnZXJfaGFuZGxlX21zZyhkZXYpOworCXBzM19zeXNfbWFuYWdlcl9maW4oZGV2KTsKIH0KIAogLyoqCkBAIC02MzgsMTYgKzY2Miw0NCBAQAogCiAJcHMzX3N5c19tYW5hZ2VyX3NlbmRfYXR0cihkZXYsIDApOwogCXBzM19zeXNfbWFuYWdlcl9zZW5kX25leHRfb3AoZGV2LCBQUzNfU01fTkVYVF9PUF9TWVNfUkVCT09ULAotCQlQUzNfU01fV0FLRV9ERUZBVUxUKTsKLQlwczNfc3lzX21hbmFnZXJfc2VuZF9yZXF1ZXN0X3NodXRkb3duKGRldik7CisJCXVzZXJfd2FrZV9zb3VyY2VzKTsKIAotCXByX2VtZXJnKCJTeXN0ZW0gSGFsdGVkLCBPSyB0byB0dXJuIG9mZiBwb3dlclxuIik7Ci0KLQl3aGlsZSAoMSkKLQkJcHMzX3N5c19tYW5hZ2VyX2hhbmRsZV9tc2coZGV2KTsKKwlwczNfc3lzX21hbmFnZXJfZmluKGRldik7CiB9CiAKIC8qKgorICogcHMzX3N5c19tYW5hZ2VyX2dldF93b2wgLSBHZXQgd2FrZS1vbi1sYW4gc2V0dGluZy4KKyAqLworCitpbnQgcHMzX3N5c19tYW5hZ2VyX2dldF93b2wodm9pZCkKK3sKKwlwcl9kZWJ1ZygiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gKHVzZXJfd2FrZV9zb3VyY2VzICYgUFMzX1NNX1dBS0VfV19PX0wpICE9IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwczNfc3lzX21hbmFnZXJfZ2V0X3dvbCk7CisKKy8qKgorICogcHMzX3N5c19tYW5hZ2VyX3NldF93b2wgLSBTZXQgd2FrZS1vbi1sYW4gc2V0dGluZy4KKyAqLworCit2b2lkIHBzM19zeXNfbWFuYWdlcl9zZXRfd29sKGludCBzdGF0ZSkKK3sKKwlzdGF0aWMgREVGSU5FX01VVEVYKG11dGV4KTsKKworCW11dGV4X2xvY2soJm11dGV4KTsKKworCXByX2RlYnVnKCIlczolZDogJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgc3RhdGUpOworCisJaWYgKHN0YXRlKQorCQl1c2VyX3dha2Vfc291cmNlcyB8PSBQUzNfU01fV0FLRV9XX09fTDsKKwllbHNlCisJCXVzZXJfd2FrZV9zb3VyY2VzICY9IH5QUzNfU01fV0FLRV9XX09fTDsKKwltdXRleF91bmxvY2soJm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBzM19zeXNfbWFuYWdlcl9zZXRfd29sKTsKKworLyoqCiAgKiBwczNfc3lzX21hbmFnZXJfd29yayAtIEFzeW5jaHJvbm91cyByZWFkIGhhbmRsZXIuCiAgKgogICogU2lnbmFsZWQgd2hlbiBQUzNfU01fUlhfTVNHX0xFTl9NSU4gYnl0ZXMgYXJyaXZlIGF0IHRoZSB2dWFydCBwb3J0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvc3lzLW1hbmFnZXItY29yZS5jIGIvZHJpdmVycy9wczMvc3lzLW1hbmFnZXItY29yZS5jCmluZGV4IDMxNjQ4ZjcuLjQ3NDIyNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3N5cy1tYW5hZ2VyLWNvcmUuYworKysgYi9kcml2ZXJzL3BzMy9zeXMtbWFuYWdlci1jb3JlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KICNpbmNsdWRlIDxhc20vcHMzLmg+CiAKIC8qKgpAQCAtNTAsMTAgKzUxLDcgQEAKIAlpZiAocHMzX3N5c19tYW5hZ2VyX29wcy5wb3dlcl9vZmYpCiAJCXBzM19zeXNfbWFuYWdlcl9vcHMucG93ZXJfb2ZmKHBzM19zeXNfbWFuYWdlcl9vcHMuZGV2KTsKIAotCXByaW50ayhLRVJOX0VNRVJHICJTeXN0ZW0gSGFsdGVkLCBPSyB0byB0dXJuIG9mZiBwb3dlclxuIik7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQl3aGlsZSAoMSkKLQkJKHZvaWQpMDsKKwlwczNfc3lzX21hbmFnZXJfaGFsdCgpOwogfQogCiB2b2lkIHBzM19zeXNfbWFuYWdlcl9yZXN0YXJ0KHZvaWQpCkBAIC02MSw4ICs1OSwxNCBAQAogCWlmIChwczNfc3lzX21hbmFnZXJfb3BzLnJlc3RhcnQpCiAJCXBzM19zeXNfbWFuYWdlcl9vcHMucmVzdGFydChwczNfc3lzX21hbmFnZXJfb3BzLmRldik7CiAKLQlwcmludGsoS0VSTl9FTUVSRyAiU3lzdGVtIEhhbHRlZCwgT0sgdG8gdHVybiBvZmYgcG93ZXJcbiIpOworCXBzM19zeXNfbWFuYWdlcl9oYWx0KCk7Cit9CisKK3ZvaWQgcHMzX3N5c19tYW5hZ2VyX2hhbHQodm9pZCkKK3sKKwlwcl9lbWVyZygiU3lzdGVtIEhhbHRlZCwgT0sgdG8gdHVybiBvZmYgcG93ZXJcbiIpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJd2hpbGUgKDEpCi0JCSh2b2lkKTA7CisJCWx2MV9wYXVzZSgxKTsKIH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKaW5kZXggNTQ4MDExOS4uM2NlOWYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCkBAIC03OCw4ICs3OCw3IEBACiB9CiAKIC8qKgotICogIHJpb19kZXZpY2VfcHJvYmUgLSBUZWxsIGlmIGEgUklPIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcgUklPCi0gKiAgICAgICAgICAgICAgICAgICAgIGRldmljZSBpZCBzdHJ1Y3R1cmUKKyAqICByaW9fZGV2aWNlX3Byb2JlIC0gVGVsbCBpZiBhIFJJTyBkZXZpY2Ugc3RydWN0dXJlIGhhcyBhIG1hdGNoaW5nIFJJTyBkZXZpY2UgaWQgc3RydWN0dXJlCiAgKiAgQGlkOiB0aGUgUklPIGRldmljZSBpZCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdAogICogIEBkZXY6IHRoZSBSSU8gZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0CiAgKgpAQCAtMTM3LDcgKzEzNiw3IEBACiAgKiAgcmlvX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IFJJTyBkcml2ZXIKICAqICBAcmRydjogdGhlIFJJTyBkcml2ZXIgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCiAgKgotICogIEFkZHMgYSAmc3RydWN0IHJpb19kcml2ZXIgdG8gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkcml2ZXJzCisgKiAgQWRkcyBhICZzdHJ1Y3QgcmlvX2RyaXZlciB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGRyaXZlcnMuCiAgKiAgUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gSWYgbm8gZXJyb3IKICAqICBvY2N1cnJlZCwgdGhlIGRyaXZlciByZW1haW5zIHJlZ2lzdGVyZWQgZXZlbiBpZiBubyBkZXZpY2UKICAqICB3YXMgY2xhaW1lZCBkdXJpbmcgcmVnaXN0cmF0aW9uLgpAQCAtMTY3LDggKzE2Niw3IEBACiB9CiAKIC8qKgotICogIHJpb19tYXRjaF9idXMgLSBUZWxsIGlmIGEgUklPIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcgUklPCi0gKiAgICAgICAgICAgICAgICAgIGRyaXZlciBkZXZpY2UgaWQgc3RydWN0dXJlCisgKiAgcmlvX21hdGNoX2J1cyAtIFRlbGwgaWYgYSBSSU8gZGV2aWNlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZyBSSU8gZHJpdmVyIGRldmljZSBpZCBzdHJ1Y3R1cmUKICAqICBAZGV2OiB0aGUgc3RhbmRhcmQgZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0CiAgKiAgQGRydjogdGhlIHN0YW5kYXJkIGRyaXZlciBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgaWRzIHRvIG1hdGNoIGFnYWluc3QKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA2NDAyZDY5Li4wMmE0YzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTE2LDcgKzE2LDcgQEAKIAkgIHByb2JhYmx5IHdhbnQgdG8gZW5hYmxlIG9uZSBvciBtb3JlIG9mIHRoZSBpbnRlcmZhY2VzIGJlbG93LgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1jbGFzcy4KKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1jb3JlLgogCiBpZiBSVENfQ0xBU1MKIApAQCAtMjUwLDYgKzI1MCwxNiBAQAogCSAgcGxhdGZvcm1zLiAgVGhlIHN1cHBvcnQgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mCiAJICB0aGUgTWVuZWxhdXMgZHJpdmVyOyBpdCdzIG5vdCBzZXBhcmF0ZSBtb2R1bGUuCiAKK2NvbmZpZyBSVENfRFJWX1MzNTM5MEEKKwl0cmlzdGF0ZSAiU2Vpa28gSW5zdHJ1bWVudHMgUy0zNTM5MEEiCisJc2VsZWN0IEJJVFJFVkVSU0UKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgU2Vpa28KKwkgIEluc3RydW1lbnRzIFMtMzUzOTBBLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28gdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXMzNTM5MGEuCisKIGVuZGlmICMgSTJDCiAKIGNvbW1lbnQgIlNQSSBSVEMgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggZWM3MDNmMy4uODcyZjEyMThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtNDUsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzMxMykJKz0gcnRjLXJzNWMzMTMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzM0OCkJKz0gcnRjLXJzNWMzNDgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzM3MikJKz0gcnRjLXJzNWMzNzIubworb2JqLSQoQ09ORklHX1JUQ19EUlZfUzM1MzkwQSkJKz0gcnRjLXMzNTM5MGEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUzNDKQkrPSBydGMtczNjLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1NBMTEwMCkJKz0gcnRjLXNhMTEwMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9TSCkJKz0gcnRjLXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jCmluZGV4IGQzYjliMTQuLjQyMjQ0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BTElBUygiYXQzMmFwNzAweF9ydGMiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXQzMmFwNzAweF9ydGMiKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQzMl9ydGNfZHJpdmVyID0gewogCS5yZW1vdmUJCT0gX19leGl0X3AoYXQzMl9ydGNfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IDMzNzk1ZTUuLjUyYWJmZmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKQEAgLTQwNywzICs0MDcsNCBAQAogTU9EVUxFX0FVVEhPUigiUmljayBCcm9uc29uIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBkcml2ZXIgZm9yIEF0bWVsIEFUOTFSTTkyMDAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXQ5MV9ydGMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggYmJmMTBlYy4uNTY3MjhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCSAqIFNSIGNsZWFycyBpdCwgc28gd2UgbXVzdCBvbmx5IHJlYWQgaXQgaW4gdGhpcyBpcnEgaGFuZGxlciEKIAkgKi8KIAltciA9IHJ0dF9yZWFkbChydGMsIE1SKSAmIChBVDkxX1JUVF9BTE1JRU4gfCBBVDkxX1JUVF9SVFRJTkNJRU4pOwotCXNyID0gcnR0X3JlYWRsKHJ0YywgU1IpICYgbXI7CisJc3IgPSBydHRfcmVhZGwocnRjLCBTUikgJiAobXIgPj4gMTYpOwogCWlmICghc3IpCiAJCXJldHVybiBJUlFfTk9ORTsKIApAQCAtMzIxLDYgKzMyMSwxMCBAQAogCWlmICghcnRjKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCS8qIHBsYXRmb3JtIHNldHVwIGNvZGUgc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzOyBzaWdoICovCisJaWYgKCFkZXZpY2VfY2FuX3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAlydGMtPnJ0dCA9ICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSAoQVQ5MV9WQV9CQVNFX1NZUyAtIEFUOTFfQkFTRV9TWVMpOwogCXJ0Yy0+cnR0ICs9IHItPnN0YXJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWJmaW4uYyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKaW5kZXggZDkwYmE4Ni4uNGYyODA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWJmaW4uYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCkBAIC00NzAsMyArNDcwLDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQmxhY2tmaW4gT24tQ2hpcCBSZWFsIFRpbWUgQ2xvY2sgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1iZmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwppbmRleCBlMDU5Zjk0Li5kY2RjMTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKQEAgLTE5OCw5ICsxOTgsOCBAQAogCiAJLyogV3JpdGluZyAweGZmIG1lYW5zICJkb24ndCBjYXJlIiBvciAibWF0Y2ggYWxsIi4gICovCiAKLQltb24gPSB0LT50aW1lLnRtX21vbjsKLQltb24gPSAobW9uIDwgMTIpID8gQklOMkJDRChtb24pIDogMHhmZjsKLQltb24rKzsKKwltb24gPSB0LT50aW1lLnRtX21vbiArIDE7CisJbW9uID0gKG1vbiA8PSAxMikgPyBCSU4yQkNEKG1vbikgOiAweGZmOwogCiAJbWRheSA9IHQtPnRpbWUudG1fbWRheTsKIAltZGF5ID0gKG1kYXkgPj0gMSAmJiBtZGF5IDw9IDMxKSA/IEJJTjJCQ0QobWRheSkgOiAweGZmOwpAQCAtMzg4LDYgKzM4Nyw3IEBACiAJcmV0dXJuIHNlcV9wcmludGYoc2VxLAogCQkJInBlcmlvZGljX0lSUVx0OiAlc1xuIgogCQkJInVwZGF0ZV9JUlFcdDogJXNcbiIKKwkJCSJIUEVUX2VtdWxhdGVkXHQ6ICVzXG4iCiAJCQkvLyAic3F1YXJlX3dhdmVcdDogJXNcbiIKIAkJCS8vICJCQ0RcdFx0OiAlc1xuIgogCQkJIkRTVF9lbmFibGVcdDogJXNcbiIKQEAgLTM5NSw2ICszOTUsNyBAQAogCQkJImJhdHRfc3RhdHVzXHQ6ICVzXG4iLAogCQkJKHJ0Y19jb250cm9sICYgUlRDX1BJRSkgPyAieWVzIiA6ICJubyIsCiAJCQkocnRjX2NvbnRyb2wgJiBSVENfVUlFKSA/ICJ5ZXMiIDogIm5vIiwKKwkJCWlzX2hwZXRfZW5hYmxlZCgpID8gInllcyIgOiAibm8iLAogCQkJLy8gKHJ0Y19jb250cm9sICYgUlRDX1NRV0UpID8gInllcyIgOiAibm8iLAogCQkJLy8gKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgPyAibm8iIDogInllcyIsCiAJCQkocnRjX2NvbnRyb2wgJiBSVENfRFNUX0VOKSA/ICJ5ZXMiIDogIm5vIiwKQEAgLTk0MSw2ICs5NDIsOSBAQAogCWNtb3NfZG9fc2h1dGRvd24oKTsKIH0KIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Y19jbW9zIik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNtb3NfcGxhdGZvcm1fZHJpdmVyID0gewogCS5yZW1vdmUJCT0gX19leGl0X3AoY21vc19wbGF0Zm9ybV9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IGNtb3NfcGxhdGZvcm1fc2h1dGRvd24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMKaW5kZXggODNlZmI4OC4uMGIxNzc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTIxNi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYwpAQCAtMjIxLDYgKzIyMSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRTMTIxNiBSVEMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1kczEyMTYiKTsKIAogbW9kdWxlX2luaXQoZHMxMjE2X3J0Y19pbml0KTsKIG1vZHVsZV9leGl0KGRzMTIxNl9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKaW5kZXggZDc0YjgwOC4uZDA4OTEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYwpAQCAtNjI2LDYgKzYyNiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkczE1MTEiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHMxNTExX3J0Y19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGRzMTUxMV9ydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkczE1MTFfcnRjX3JlbW92ZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKaW5kZXggZDllODQ4ZC4uYTE5ZjExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYwpAQCAtMzkxLDYgKzM5MSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpydGMtZHMxNTUzIik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRzMTU1M19ydGNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBkczE1NTNfcnRjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZHMxNTUzX3J0Y19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jCmluZGV4IDJlNzNmMGIuLjI0ZDM1ZWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jCkBAIC0yNzYsMyArMjc2LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGFsbGFzIERTMTc0MiBSVEMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1kczE3NDIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwppbmRleCBlZjRmMTQ3Li4xZTk5MzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCkBAIC0xMzIsNiArMTMyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmVwOTN4eC1ydGMiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXA5M3h4X3J0Y19wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImVwOTN4eC1ydGMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCmluZGV4IGNkMGJiYzAuLjAxM2U2YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKQEAgLTQ2NSw2ICs0NjUsOSBAQAogCXJldHVybiAwOwogfQogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06cnRjLW00OHQ1OSIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtNDh0NTlfcnRjX2RyaXZlciA9IHsKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAicnRjLW00OHQ1OSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKaW5kZXggOGZmNGExMi4uM2Y3Zjk5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYwpAQCAtMTk5LDYgKzE5OSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk00OFQ4NiBSVEMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1tNDh0ODYiKTsKIAogbW9kdWxlX2luaXQobTQ4dDg2X3J0Y19pbml0KTsKIG1vZHVsZV9leGl0KG00OHQ4Nl9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCBhMmY4NGYxLi41OGY4MWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXJ0Y193cml0ZSgwLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CiB9CiAKLU1PRFVMRV9BTElBUygib21hcF9ydGMiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06b21hcF9ydGMiKTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfcnRjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb21hcF9ydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvbWFwX3J0Y19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzEzLmMKaW5kZXggNjZlYjEzMy4uNjY0ZTg5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jCkBAIC00MjEsMyArNDIxLDQgQEAKIE1PRFVMRV9BVVRIT1IoImtvZ2lpZGVuYSAsIE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmljb2ggUlM1QzMxMyBSVEMgZGV2aWNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YWJjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jCkBAIC0wLDAgKzEsMzE2IEBACisvKgorICogU2Vpa28gSW5zdHJ1bWVudHMgUy0zNTM5MEEgUlRDIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBCeXJvbiBCcmFkbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIFMzNTM5MEFfQ01EX1NUQVRVUzEJMAorI2RlZmluZSBTMzUzOTBBX0NNRF9TVEFUVVMyCTEKKyNkZWZpbmUgUzM1MzkwQV9DTURfVElNRTEJMgorCisjZGVmaW5lIFMzNTM5MEFfQllURV9ZRUFSCTAKKyNkZWZpbmUgUzM1MzkwQV9CWVRFX01PTlRICTEKKyNkZWZpbmUgUzM1MzkwQV9CWVRFX0RBWQkyCisjZGVmaW5lIFMzNTM5MEFfQllURV9XREFZCTMKKyNkZWZpbmUgUzM1MzkwQV9CWVRFX0hPVVJTCTQKKyNkZWZpbmUgUzM1MzkwQV9CWVRFX01JTlMJNQorI2RlZmluZSBTMzUzOTBBX0JZVEVfU0VDUwk2CisKKyNkZWZpbmUgUzM1MzkwQV9GTEFHX1BPQwkweDAxCisjZGVmaW5lIFMzNTM5MEFfRkxBR19CTEQJMHgwMgorI2RlZmluZSBTMzUzOTBBX0ZMQUdfMjRICTB4NDAKKyNkZWZpbmUgUzM1MzkwQV9GTEFHX1JFU0VUCTB4ODAKKyNkZWZpbmUgUzM1MzkwQV9GTEFHX1RFU1QJMHgwMQorCitzdHJ1Y3QgczM1MzkwYSB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudFs4XTsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCWludCB0d2VudHlmb3VyaG91cjsKK307CisKK3N0YXRpYyBpbnQgczM1MzkwYV9zZXRfcmVnKHN0cnVjdCBzMzUzOTBhICpzMzUzOTBhLCBpbnQgcmVnLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHMzNTM5MGEtPmNsaWVudFtyZWddOworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IGNsaWVudC0+YWRkciwgMCwgbGVuLCBidWYgfSwKKwl9OworCisJaWYgKChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzNTM5MGFfZ2V0X3JlZyhzdHJ1Y3QgczM1MzkwYSAqczM1MzkwYSwgaW50IHJlZywgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBzMzUzOTBhLT5jbGllbnRbcmVnXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCBsZW4sIGJ1ZiB9LAorCX07CisKKwlpZiAoKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSkpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczM1MzkwYV9yZXNldChzdHJ1Y3QgczM1MzkwYSAqczM1MzkwYSkKK3sKKwljaGFyIGJ1ZlsxXTsKKworCWlmIChzMzUzOTBhX2dldF9yZWcoczM1MzkwYSwgUzM1MzkwQV9DTURfU1RBVFVTMSwgYnVmLCBzaXplb2YoYnVmKSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghKGJ1ZlswXSAmIChTMzUzOTBBX0ZMQUdfUE9DIHwgUzM1MzkwQV9GTEFHX0JMRCkpKQorCQlyZXR1cm4gMDsKKworCWJ1ZlswXSB8PSAoUzM1MzkwQV9GTEFHX1JFU0VUIHwgUzM1MzkwQV9GTEFHXzI0SCk7CisJYnVmWzBdICY9IDB4ZjA7CisJcmV0dXJuIHMzNTM5MGFfc2V0X3JlZyhzMzUzOTBhLCBTMzUzOTBBX0NNRF9TVEFUVVMxLCBidWYsIHNpemVvZihidWYpKTsKK30KKworc3RhdGljIGludCBzMzUzOTBhX2Rpc2FibGVfdGVzdF9tb2RlKHN0cnVjdCBzMzUzOTBhICpzMzUzOTBhKQoreworCWNoYXIgYnVmWzFdOworCisJaWYgKHMzNTM5MGFfZ2V0X3JlZyhzMzUzOTBhLCBTMzUzOTBBX0NNRF9TVEFUVVMyLCBidWYsIHNpemVvZihidWYpKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKCEoYnVmWzBdICYgUzM1MzkwQV9GTEFHX1RFU1QpKQorCQlyZXR1cm4gMDsKKworCWJ1ZlswXSAmPSB+UzM1MzkwQV9GTEFHX1RFU1Q7CisJcmV0dXJuIHMzNTM5MGFfc2V0X3JlZyhzMzUzOTBhLCBTMzUzOTBBX0NNRF9TVEFUVVMyLCBidWYsIHNpemVvZihidWYpKTsKK30KKworc3RhdGljIGNoYXIgczM1MzkwYV9ocjJyZWcoc3RydWN0IHMzNTM5MGEgKnMzNTM5MGEsIGludCBob3VyKQoreworCWlmIChzMzUzOTBhLT50d2VudHlmb3VyaG91cikKKwkJcmV0dXJuIEJJTjJCQ0QoaG91cik7CisKKwlpZiAoaG91ciA8IDEyKQorCQlyZXR1cm4gQklOMkJDRChob3VyKTsKKworCXJldHVybiAweDQwIHwgQklOMkJDRChob3VyIC0gMTIpOworfQorCitzdGF0aWMgaW50IHMzNTM5MGFfcmVnMmhyKHN0cnVjdCBzMzUzOTBhICpzMzUzOTBhLCBjaGFyIHJlZykKK3sKKwl1bnNpZ25lZCBob3VyOworCisJaWYgKHMzNTM5MGEtPnR3ZW50eWZvdXJob3VyKQorCQlyZXR1cm4gQkNEMkJJTihyZWcgJiAweDNmKTsKKworCWhvdXIgPSBCQ0QyQklOKHJlZyAmIDB4M2YpOworCWlmIChyZWcgJiAweDQwKQorCQlob3VyICs9IDEyOworCisJcmV0dXJuIGhvdXI7Cit9CisKK3N0YXRpYyBpbnQgczM1MzkwYV9zZXRfZGF0ZXRpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgczM1MzkwYQkqczM1MzkwYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBpLCBlcnI7CisJY2hhciBidWZbN107CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCBtZGF5PSVkLCAiCisJCSJtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsIF9fZnVuY19fLCB0bS0+dG1fc2VjLAorCQl0bS0+dG1fbWluLCB0bS0+dG1faG91ciwgdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLAorCQl0bS0+dG1fd2RheSk7CisKKwlidWZbUzM1MzkwQV9CWVRFX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCk7CisJYnVmW1MzNTM5MEFfQllURV9NT05USF0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlidWZbUzM1MzkwQV9CWVRFX0RBWV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwlidWZbUzM1MzkwQV9CWVRFX1dEQVldID0gQklOMkJDRCh0bS0+dG1fd2RheSk7CisJYnVmW1MzNTM5MEFfQllURV9IT1VSU10gPSBzMzUzOTBhX2hyMnJlZyhzMzUzOTBhLCB0bS0+dG1faG91cik7CisJYnVmW1MzNTM5MEFfQllURV9NSU5TXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7CisJYnVmW1MzNTM5MEFfQllURV9TRUNTXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7CisKKwkvKiBUaGlzIGNoaXAgZXhwZWN0cyB0aGUgYml0cyBvZiBlYWNoIGJ5dGUgdG8gYmUgaW4gcmV2ZXJzZSBvcmRlciAqLworCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCisJCWJ1ZltpXSA9IGJpdHJldjgoYnVmW2ldKTsKKworCWVyciA9IHMzNTM5MGFfc2V0X3JlZyhzMzUzOTBhLCBTMzUzOTBBX0NNRF9USU1FMSwgYnVmLCBzaXplb2YoYnVmKSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHMzNTM5MGFfZ2V0X2RhdGV0aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IHMzNTM5MGEgKnMzNTM5MGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwljaGFyIGJ1Zls3XTsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gczM1MzkwYV9nZXRfcmVnKHMzNTM5MGEsIFMzNTM5MEFfQ01EX1RJTUUxLCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIFRoaXMgY2hpcCByZXR1cm5zIHRoZSBiaXRzIG9mIGVhY2ggYnl0ZSBpbiByZXZlcnNlIG9yZGVyICovCisJZm9yIChpID0gMDsgaSA8IDc7ICsraSkKKwkJYnVmW2ldID0gYml0cmV2OChidWZbaV0pOworCisJdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9TRUNTXSk7CisJdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9NSU5TXSk7CisJdG0tPnRtX2hvdXIgPSBzMzUzOTBhX3JlZzJocihzMzUzOTBhLCBidWZbUzM1MzkwQV9CWVRFX0hPVVJTXSk7CisJdG0tPnRtX3dkYXkgPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfV0RBWV0pOworCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX0RBWV0pOworCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfTU9OVEhdKSAtIDE7CisJdG0tPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfWUVBUl0pICsgMTAwOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsIG1kYXk9JWQsICIKKwkJIm1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwgX19mdW5jX18sIHRtLT50bV9zZWMsCisJCXRtLT50bV9taW4sIHRtLT50bV9ob3VyLCB0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsCisJCXRtLT50bV93ZGF5KTsKKworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IHMzNTM5MGFfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcmV0dXJuIHMzNTM5MGFfZ2V0X2RhdGV0aW1lKHRvX2kyY19jbGllbnQoZGV2KSwgdG0pOworfQorCitzdGF0aWMgaW50IHMzNTM5MGFfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlyZXR1cm4gczM1MzkwYV9zZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBzMzUzOTBhX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZQk9IHMzNTM5MGFfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBzMzUzOTBhX3J0Y19zZXRfdGltZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzMzUzOTBhX2RyaXZlcjsKKworc3RhdGljIGludCBzMzUzOTBhX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgczM1MzkwYSAqczM1MzkwYTsKKwlzdHJ1Y3QgcnRjX3RpbWUgdG07CisJY2hhciBidWZbMV07CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJczM1MzkwYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzMzUzOTBhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzMzUzOTBhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzMzUzOTBhLT5jbGllbnRbMF0gPSBjbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgczM1MzkwYSk7CisKKwkvKiBUaGlzIGNoaXAgdXNlcyBtdWx0aXBsZSBhZGRyZXNzZXMsIHVzZSBkdW1teSBkZXZpY2VzIGZvciB0aGVtICovCisJZm9yIChpID0gMTsgaSA8IDg7ICsraSkgeworCQlzMzUzOTBhLT5jbGllbnRbaV0gPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKKwkJCQkJY2xpZW50LT5hZGRyICsgaSwgInJ0Yy1zMzUzOTBhIik7CisJCWlmICghczM1MzkwYS0+Y2xpZW50W2ldKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkFkZHJlc3MgJTAyeCB1bmF2YWlsYWJsZVxuIiwKKwkJCQkJCWNsaWVudC0+YWRkciArIGkpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBleGl0X2R1bW15OworCQl9CisJfQorCisJZXJyID0gczM1MzkwYV9yZXNldChzMzUzOTBhKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImVycm9yIHJlc2V0dGluZyBjaGlwXG4iKTsKKwkJZ290byBleGl0X2R1bW15OworCX0KKworCWVyciA9IHMzNTM5MGFfZGlzYWJsZV90ZXN0X21vZGUoczM1MzkwYSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJlcnJvciBkaXNhYmxpbmcgdGVzdCBtb2RlXG4iKTsKKwkJZ290byBleGl0X2R1bW15OworCX0KKworCWVyciA9IHMzNTM5MGFfZ2V0X3JlZyhzMzUzOTBhLCBTMzUzOTBBX0NNRF9TVEFUVVMxLCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImVycm9yIGNoZWNraW5nIDEyLzI0IGhvdXIgbW9kZVxuIik7CisJCWdvdG8gZXhpdF9kdW1teTsKKwl9CisJaWYgKGJ1ZlswXSAmIFMzNTM5MEFfRkxBR18yNEgpCisJCXMzNTM5MGEtPnR3ZW50eWZvdXJob3VyID0gMTsKKwllbHNlCisJCXMzNTM5MGEtPnR3ZW50eWZvdXJob3VyID0gMDsKKworCWlmIChzMzUzOTBhX2dldF9kYXRldGltZShjbGllbnQsICZ0bSkgPCAwKQorCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJjbG9jayBuZWVkcyB0byBiZSBzZXRcbiIpOworCisJczM1MzkwYS0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihzMzUzOTBhX2RyaXZlci5kcml2ZXIubmFtZSwKKwkJCQkmY2xpZW50LT5kZXYsICZzMzUzOTBhX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKworCWlmIChJU19FUlIoczM1MzkwYS0+cnRjKSkgeworCQllcnIgPSBQVFJfRVJSKHMzNTM5MGEtPnJ0Yyk7CisJCWdvdG8gZXhpdF9kdW1teTsKKwl9CisJcmV0dXJuIDA7CisKK2V4aXRfZHVtbXk6CisJZm9yIChpID0gMTsgaSA8IDg7ICsraSkKKwkJaWYgKHMzNTM5MGEtPmNsaWVudFtpXSkKKwkJCWkyY191bnJlZ2lzdGVyX2RldmljZShzMzUzOTBhLT5jbGllbnRbaV0pOworCWtmcmVlKHMzNTM5MGEpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgczM1MzkwYV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXN0cnVjdCBzMzUzOTBhICpzMzUzOTBhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJZm9yIChpID0gMTsgaSA8IDg7ICsraSkKKwkJaWYgKHMzNTM5MGEtPmNsaWVudFtpXSkKKwkJCWkyY191bnJlZ2lzdGVyX2RldmljZShzMzUzOTBhLT5jbGllbnRbaV0pOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHMzNTM5MGEtPnJ0Yyk7CisJa2ZyZWUoczM1MzkwYSk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHMzNTM5MGFfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJydGMtczM1MzkwYSIsCisJfSwKKwkucHJvYmUJCT0gczM1MzkwYV9wcm9iZSwKKwkucmVtb3ZlCQk9IHMzNTM5MGFfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczM1MzkwYV9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmczM1MzkwYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczM1MzkwYV9ydGNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzMzUzOTBhX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkJ5cm9uIEJyYWRsZXkgPGJ5cm9uLmJicmFkbGV5QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUzM1MzkwQSBSVEMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHMzNTM5MGFfcnRjX2luaXQpOworbW9kdWxlX2V4aXQoczM1MzkwYV9ydGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggODY3NjZmMS4uOWY0ZDUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtNTkyLDMgKzU5Miw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDIFJUQyBEcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMC1ydGMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCBlZTI1M2NjLi44MmY2MmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zOTksMyArMzk5LDQgQEAKIE1PRFVMRV9BVVRIT1IoIlJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU0ExMXgwL1BYQTJ4eCBSZWFsdGltZSBDbG9jayBEcml2ZXIgKFJUQykiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2ExMTAwLXJ0YyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCBjMWQ2YTE4Li5jNTk0YjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMSw4ICsxLDkgQEAKIC8qCiAgKiBTdXBlckggT24tQ2hpcCBSVEMgU3VwcG9ydAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4ICBQYXVsIE11bmR0CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEphbWllIExlbmVoYW4KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgQW5nZWxvIENhc3RlbGxvCiAgKgogICogQmFzZWQgb24gdGhlIG9sZCBhcmNoL3NoL2tlcm5lbC9jcHUvcnRjLmMgYnk6CiAgKgpAQCAtMjYsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9ydGMuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2gtcnRjIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4xLjYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMCIKIAogI2RlZmluZSBSVENfUkVHKHIpCSgocikgKiBydGNfcmVnX3NpemUpCiAKQEAgLTYzLDYgKzY0LDEzIEBACiAvKiBBTEFSTSBCaXRzIC0gb3Igd2l0aCBCQ0QgZW5jb2RlZCB2YWx1ZSAqLwogI2RlZmluZSBBUl9FTkIJCTB4ODAJLyogRW5hYmxlIGZvciBhbGFybSBjbXAgICAqLwogCisvKiBQZXJpb2QgQml0cyAqLworI2RlZmluZSBQRl9IUAkJMHgxMDAJLyogRW5hYmxlIEhhbGYgUGVyaW9kIHRvIHN1cHBvcnQgOCwzMiwxMjhIeiAqLworI2RlZmluZSBQRl9DT1VOVAkweDIwMAkvKiBIYWxmIHBlcmlvZGljIGNvdW50ZXIgKi8KKyNkZWZpbmUgUEZfT1hTCQkweDQwMAkvKiBQZXJpb2RpYyBPbmUgeCBTZWNvbmQgKi8KKyNkZWZpbmUgUEZfS09VCQkweDgwMAkvKiBLZXJuZWwgb3IgVXNlciBwZXJpb2RpYyByZXF1ZXN0IDE9a2VybmVsICovCisjZGVmaW5lIFBGX01BU0sJCTB4ZjAwCisKIC8qIFJDUjEgQml0cyAqLwogI2RlZmluZSBSQ1IxX0NGCQkweDgwCS8qIENhcnJ5IEZsYWcgICAgICAgICAgICAgKi8KICNkZWZpbmUgUkNSMV9DSUUJMHgxMAkvKiBDYXJyeSBJbnRlcnJ1cHQgRW5hYmxlICovCkBAIC04NCwzMyArOTIsMjQgQEAKIAl1bnNpZ25lZCBpbnQgYWxhcm1faXJxLCBwZXJpb2RpY19pcnEsIGNhcnJ5X2lycTsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjX2RldjsKIAlzcGlubG9ja190IGxvY2s7Ci0JaW50IHJlYXJtX2FpZTsKIAl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsJLyogU2VlIGFzbS1zaC9ydGMuaCBmb3IgY2FwIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCBwZXJpb2RpY19mcmVxOwogfTsKIAogc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2X2lkKTsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl1bnNpZ25lZCBpbnQgdG1wLCBldmVudHMgPSAwOworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwl1bnNpZ25lZCBpbnQgdG1wOwogCiAJc3Bpbl9sb2NrKCZydGMtPmxvY2spOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CiAJdG1wICY9IH5SQ1IxX0NGOwotCi0JaWYgKHJ0Yy0+cmVhcm1fYWllKSB7Ci0JCWlmICh0bXAgJiBSQ1IxX0FGKQotCQkJdG1wICY9IH5SQ1IxX0FGOwkvKiB0cnkgdG8gY2xlYXIgQUYgYWdhaW4gKi8KLQkJZWxzZSB7Ci0JCQl0bXAgfD0gUkNSMV9BSUU7CS8qIEFGIGhhcyBjbGVhcmVkLCByZWFybSBJUlEgKi8KLQkJCXJ0Yy0+cmVhcm1fYWllID0gMDsKLQkJfQotCX0KLQogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCi0JcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBldmVudHMpOworCS8qIFVzZXJzIGhhdmUgcmVxdWVzdGVkIE9uZSB4IFNlY29uZCBJUlEgKi8KKwlpZiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKQorCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19VRiB8IFJUQ19JUlFGKTsKIAogCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwogCkBAIC0xMTksNDcgKzExOCw0OCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2FsYXJtKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldl9pZCk7Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JdW5zaWduZWQgaW50IHRtcCwgZXZlbnRzID0gMDsKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJdW5zaWduZWQgaW50IHRtcDsKIAogCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwotCi0JLyoKLQkgKiBJZiBBRiBpcyBzZXQgdGhlbiB0aGUgYWxhcm0gaGFzIHRyaWdnZXJlZC4gSWYgd2UgY2xlYXIgQUYgd2hpbGUKLQkgKiB0aGUgYWxhcm0gdGltZSBzdGlsbCBtYXRjaGVzIHRoZSBSVEMgdGltZSB0aGVuIEFGIHdpbGwKLQkgKiBpbW1lZGlhdGVseSBiZSBzZXQgYWdhaW4sIGFuZCBpZiBBSUUgaXMgZW5hYmxlZCB0aGVuIHRoZSBhbGFybQotCSAqIGludGVycnVwdCB3aWxsIGltbWVkaWF0ZWx5IGJlIHJldHJpZ2dlci4gU28gd2UgY2xlYXIgQUlFIGhlcmUKLQkgKiBhbmQgdXNlIHJ0Yy0+cmVhcm1fYWllIHNvIHRoYXQgdGhlIGNhcnJ5IGludGVycnVwdCB3aWxsIGtlZXAKLQkgKiB0cnlpbmcgdG8gY2xlYXIgQUYgYW5kIG9uY2UgaXQgc3RheXMgY2xlYXJlZCBpdCdsbCByZS1lbmFibGUKLQkgKiBBSUUuCi0JICovCi0JaWYgKHRtcCAmIFJDUjFfQUYpIHsKLQkJZXZlbnRzIHw9IFJUQ19BRiB8IFJUQ19JUlFGOwotCi0JCXRtcCAmPSB+KFJDUjFfQUZ8UkNSMV9BSUUpOwotCisJdG1wICY9IH4oUkNSMV9BRiB8IFJDUjFfQUlFKTsKIAkJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKLQkJcnRjLT5yZWFybV9haWUgPSAxOwotCi0JCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgZXZlbnRzKTsKLQl9CisJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfQUYgfCBSVENfSVJRRik7CiAKIAlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZfaWQpOwotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjX2RldiA9IHJ0Yy0+cnRjX2RldjsKKwl1bnNpZ25lZCBpbnQgdG1wOwogCiAJc3Bpbl9sb2NrKCZydGMtPmxvY2spOwogCi0JcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfUEYgfCBSVENfSVJRRik7CisJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMik7CisJdG1wICY9IH5SQ1IyX1BFRjsKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKKworCS8qIEhhbGYgcGVyaW9kIGVuYWJsZWQgdGhhbiBvbmUgc2tpcHBlZCBhbmQgdGhlIG5leHQgbm90aWZpZWQgKi8KKwlpZiAoKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0hQKSAmJiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfQ09VTlQpKQorCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX0NPVU5UOworCWVsc2UgeworCQlpZiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfSFApCisJCQlydGMtPnBlcmlvZGljX2ZyZXEgfD0gUEZfQ09VTlQ7CisJCWlmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9LT1UpIHsKKwkJCXNwaW5fbG9jaygmcnRjX2Rldi0+aXJxX3Rhc2tfbG9jayk7CisJCQlpZiAocnRjX2Rldi0+aXJxX3Rhc2spCisJCQkJcnRjX2Rldi0+aXJxX3Rhc2stPmZ1bmMocnRjX2Rldi0+aXJxX3Rhc2stPnByaXZhdGVfZGF0YSk7CisJCQlzcGluX3VubG9jaygmcnRjX2Rldi0+aXJxX3Rhc2tfbG9jayk7CisJCX0gZWxzZQorCQkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfUEYgfCBSVENfSVJRRik7CisJfQogCiAJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CiAKQEAgLTE3Niw4ICsxNzYsOCBAQAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjIpOwogCiAJaWYgKGVuYWJsZSkgewotCQl0bXAgJj0gflJDUjJfUEVTTUFTSzsKLQkJdG1wIHw9IFJDUjJfUEVGIHwgKDIgPDwgNCk7CisJCXRtcCAmPSB+UkNSMl9QRUY7CS8qIENsZWFyIFBFUyBiaXQgKi8KKwkJdG1wIHw9IChydGMtPnBlcmlvZGljX2ZyZXEgJiB+UEZfSFApOwkvKiBTZXQgUEVTMi0wICovCiAJfSBlbHNlCiAJCXRtcCAmPSB+KFJDUjJfUEVTTUFTSyB8IFJDUjJfUEVGKTsKIApAQCAtMTg2LDYgKzE4Niw1OCBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2hfcnRjX3NldGZyZXEoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZnJlcSkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgdG1wLCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmcnRjLT5sb2NrKTsKKwl0bXAgPSBydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9NQVNLOworCisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAwOgorCQlydGMtPnBlcmlvZGljX2ZyZXEgPSAweDAwOworCQlicmVhazsKKwljYXNlIDE6CisJCXJ0Yy0+cGVyaW9kaWNfZnJlcSA9IDB4NjA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcnRjLT5wZXJpb2RpY19mcmVxID0gMHg1MDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlydGMtPnBlcmlvZGljX2ZyZXEgPSAweDQwOworCQlicmVhazsKKwljYXNlIDg6CisJCXJ0Yy0+cGVyaW9kaWNfZnJlcSA9IDB4MzAgfCBQRl9IUDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJcnRjLT5wZXJpb2RpY19mcmVxID0gMHgzMDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJcnRjLT5wZXJpb2RpY19mcmVxID0gMHgyMCB8IFBGX0hQOworCQlicmVhazsKKwljYXNlIDY0OgorCQlydGMtPnBlcmlvZGljX2ZyZXEgPSAweDIwOworCQlicmVhazsKKwljYXNlIDEyODoKKwkJcnRjLT5wZXJpb2RpY19mcmVxID0gMHgxMCB8IFBGX0hQOworCQlicmVhazsKKwljYXNlIDI1NjoKKwkJcnRjLT5wZXJpb2RpY19mcmVxID0gMHgxMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1RTVVBQOworCX0KKworCWlmIChyZXQgPT0gMCkgeworCQlydGMtPnBlcmlvZGljX2ZyZXEgfD0gdG1wOworCQlydGMtPnJ0Y19kZXYtPmlycV9mcmVxID0gZnJlcTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNoX3J0Y19zZXRhaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMTk1LDEwICsyNDcsOSBAQAogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKLQlpZiAoIWVuYWJsZSkgeworCWlmICghZW5hYmxlKQogCQl0bXAgJj0gflJDUjFfQUlFOwotCQlydGMtPnJlYXJtX2FpZSA9IDA7Ci0JfSBlbHNlIGlmIChydGMtPnJlYXJtX2FpZSA9PSAwKQorCWVsc2UKIAkJdG1wIHw9IFJDUjFfQUlFOwogCiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CkBAIC0yMDYsNjIgKzI1NywxMCBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBzaF9ydGNfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQlpbnQgcmV0OwotCi0JdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7Ci0JdG1wICY9IH5SQ1IxX0NGOwotCXRtcCB8PSBSQ1IxX0NJRTsKLQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfcGVyaW9kaWMsIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgcGVyaW9kIiwgZGV2KTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlkZXZfZXJyKGRldiwgInJlcXVlc3QgcGVyaW9kIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAotCQkJcmV0LCBydGMtPnBlcmlvZGljX2lycSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5jYXJyeV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgY2FycnkiLCBkZXYpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoZGV2LCAicmVxdWVzdCBjYXJyeSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKLQkJCXJldCwgcnRjLT5jYXJyeV9pcnEpOwotCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgZGV2KTsKLQkJZ290byBlcnJfYmFkX2NhcnJ5OwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgYWxhcm0iLCBkZXYpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoZGV2LCAicmVxdWVzdCBhbGFybSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKLQkJCXJldCwgcnRjLT5hbGFybV9pcnEpOwotCQlnb3RvIGVycl9iYWRfYWxhcm07Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9iYWRfYWxhcm06Ci0JZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIGRldik7Ci1lcnJfYmFkX2NhcnJ5OgotCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBkZXYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgc2hfcnRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCiAJc2hfcnRjX3NldHBpZShkZXYsIDApOwogCXNoX3J0Y19zZXRhaWUoZGV2LCAwKTsKLQotCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBkZXYpOwotCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBkZXYpOwotCWZyZWVfaXJxKHJ0Yy0+YWxhcm1faXJxLCBkZXYpOwogfQogCiBzdGF0aWMgaW50IHNoX3J0Y19wcm9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICpzZXEpCkBAIC0yNzAsMzEgKzI2OSw0NCBAQAogCXVuc2lnbmVkIGludCB0bXA7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQlzZXFfcHJpbnRmKHNlcSwgImNhcnJ5X0lSUVx0OiAlc1xuIiwKLQkJICAgKHRtcCAmIFJDUjFfQ0lFKSA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihzZXEsICJjYXJyeV9JUlFcdDogJXNcbiIsICh0bXAgJiBSQ1IxX0NJRSkgPyAieWVzIiA6ICJubyIpOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMik7CiAJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19JUlFcdDogJXNcbiIsCi0JCSAgICh0bXAgJiBSQ1IyX1BFRikgPyAieWVzIiA6ICJubyIpOworCQkgICAodG1wICYgUkNSMl9QRVNNQVNLKSA/ICJ5ZXMiIDogIm5vIik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQl1bnNpZ25lZCBpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCByZXQgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFJUQ19QSUVfT0ZGOgogCWNhc2UgUlRDX1BJRV9PTjoKIAkJc2hfcnRjX3NldHBpZShkZXYsIGNtZCA9PSBSVENfUElFX09OKTsKLQkJcmV0ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBSVENfQUlFX09GRjoKIAljYXNlIFJUQ19BSUVfT046CiAJCXNoX3J0Y19zZXRhaWUoZGV2LCBjbWQgPT0gUlRDX0FJRV9PTik7Ci0JCXJldCA9IDA7CiAJCWJyZWFrOworCWNhc2UgUlRDX1VJRV9PRkY6CisJCXJ0Yy0+cGVyaW9kaWNfZnJlcSAmPSB+UEZfT1hTOworCQlicmVhazsKKwljYXNlIFJUQ19VSUVfT046CisJCXJ0Yy0+cGVyaW9kaWNfZnJlcSB8PSBQRl9PWFM7CisJCWJyZWFrOworCWNhc2UgUlRDX0lSUVBfUkVBRDoKKwkJcmV0ID0gcHV0X3VzZXIocnRjLT5ydGNfZGV2LT5pcnFfZnJlcSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFJUQ19JUlFQX1NFVDoKKwkJcmV0ID0gc2hfcnRjX3NldGZyZXEoZGV2LCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PSU9DVExDTUQ7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTQyMSw3ICs0MzMsNyBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcnRjX3RpbWUqIHRtID0gJndrYWxybS0+dGltZTsKKwlzdHJ1Y3QgcnRjX3RpbWUgKnRtID0gJndrYWxybS0+dGltZTsKIAogCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CiAKQEAgLTQ1Miw3ICs0NjQsNyBAQAogCQl3cml0ZWIoQklOMkJDRCh2YWx1ZSkgfCBBUl9FTkIsICBydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKIH0KIAotc3RhdGljIGludCBzaF9ydGNfY2hlY2tfYWxhcm0oc3RydWN0IHJ0Y190aW1lKiB0bSkKK3N0YXRpYyBpbnQgc2hfcnRjX2NoZWNrX2FsYXJtKHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJLyoKIAkgKiBUaGUgb3JpZ2luYWwgcnRjIHNheXMgYW55dGhpbmcgPiAweGMwIGlzICJkb24ndCBjYXJlIiBvciAibWF0Y2gKQEAgLTUwMywxMSArNTE1LDkgQEAKIAogCS8qIGRpc2FibGUgYWxhcm0gaW50ZXJydXB0IGFuZCBjbGVhciB0aGUgYWxhcm0gZmxhZyAqLwogCXJjcjEgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQlyY3IxICY9IH4oUkNSMV9BRnxSQ1IxX0FJRSk7CisJcmNyMSAmPSB+KFJDUjFfQUYgfCBSQ1IxX0FJRSk7CiAJd3JpdGViKHJjcjEsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCi0JcnRjLT5yZWFybV9haWUgPSAwOwotCiAJLyogc2V0IGFsYXJtIHRpbWUgKi8KIAlzaF9ydGNfd3JpdGVfYWxhcm1fdmFsdWUocnRjLCB0bS0+dG1fc2VjLCAgUlNFQ0FSKTsKIAlzaF9ydGNfd3JpdGVfYWxhcm1fdmFsdWUocnRjLCB0bS0+dG1fbWluLCAgUk1JTkFSKTsKQEAgLTUyOSwxNCArNTM5LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfcnRjX2lycV9zZXRfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoZW5hYmxlZCkgeworCQlydGMtPnBlcmlvZGljX2ZyZXEgfD0gUEZfS09VOworCQlyZXR1cm4gc2hfcnRjX2lvY3RsKGRldiwgUlRDX1BJRV9PTiwgMCk7CisJfSBlbHNlIHsKKwkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9LT1U7CisJCXJldHVybiBzaF9ydGNfaW9jdGwoZGV2LCBSVENfUElFX09GRiwgMCk7CisJfQorfQorCitzdGF0aWMgaW50IHNoX3J0Y19pcnFfc2V0X2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZnJlcSkKK3sKKwlyZXR1cm4gc2hfcnRjX2lvY3RsKGRldiwgUlRDX0lSUVBfU0VULCBmcmVxKTsKK30KKwogc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHNoX3J0Y19vcHMgPSB7Ci0JLm9wZW4JCT0gc2hfcnRjX29wZW4sCiAJLnJlbGVhc2UJPSBzaF9ydGNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gc2hfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBzaF9ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IHNoX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IHNoX3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBzaF9ydGNfc2V0X2FsYXJtLAorCS5pcnFfc2V0X3N0YXRlCT0gc2hfcnRjX2lycV9zZXRfc3RhdGUsCisJLmlycV9zZXRfZnJlcQk9IHNoX3J0Y19pcnFfc2V0X2ZyZXEsCiAJLnByb2MJCT0gc2hfcnRjX3Byb2MsCiB9OwogCkBAIC01NDQsNiArNTc0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2hfcnRjICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgaW50IHRtcDsKIAlpbnQgcmV0ID0gLUVOT0VOVDsKIAogCXJ0YyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9ydGMpLCBHRlBfS0VSTkVMKTsKQEAgLTU1Miw2ICs1ODMsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnJ0Yy0+bG9jayk7CiAKKwkvKiBnZXQgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLwogCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAodW5saWtlbHkocnRjLT5wZXJpb2RpY19pcnEgPCAwKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIHBlcmlvZFxuIik7CkBAIC02MDgsOCArNjQwLDQ4IEBACiAJCXJ0Yy0+Y2FwYWJpbGl0aWVzIHw9IHBpbmZvLT5jYXBhYmlsaXRpZXM7CiAJfQogCisJcnRjLT5ydGNfZGV2LT5tYXhfdXNlcl9mcmVxID0gMjU2OworCXJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEgPSAxOworCXJ0Yy0+cGVyaW9kaWNfZnJlcSA9IDB4NjA7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCisJLyogcmVnaXN0ZXIgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLworCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfcGVyaW9kaWMsIElSUUZfRElTQUJMRUQsCisJCQkgICJzaC1ydGMgcGVyaW9kIiwgcnRjKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkicmVxdWVzdCBwZXJpb2QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKKwkJCXJ0Yy0+cGVyaW9kaWNfaXJxKTsKKwkJZ290byBlcnJfYmFkbWFwOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBzaF9ydGNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCQkJICAic2gtcnRjIGNhcnJ5IiwgcnRjKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkicmVxdWVzdCBjYXJyeSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAorCQkJcnRjLT5jYXJyeV9pcnEpOworCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJZ290byBlcnJfYmFkbWFwOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sIElSUUZfRElTQUJMRUQsCisJCQkgICJzaC1ydGMgYWxhcm0iLCBydGMpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCisJCQlydGMtPmFsYXJtX2lycSk7CisJCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOworCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJZ290byBlcnJfYmFkbWFwOworCX0KKworCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXRtcCAmPSB+UkNSMV9DRjsKKwl0bXAgfD0gUkNSMV9DSUU7CisJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CisKIAlyZXR1cm4gMDsKIAogZXJyX2JhZG1hcDoKQEAgLTYzMCw2ICs3MDIsMTAgQEAKIAlzaF9ydGNfc2V0cGllKCZwZGV2LT5kZXYsIDApOwogCXNoX3J0Y19zZXRhaWUoJnBkZXYtPmRldiwgMCk7CiAKKwlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKKwlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwlmcmVlX2lycShydGMtPmFsYXJtX2lycSwgcnRjKTsKKwogCXJlbGVhc2VfcmVzb3VyY2UocnRjLT5yZXMpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC02NjIsNSArNzM4LDggQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggb24tY2hpcCBSVEMgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7Ci1NT0RVTEVfQVVUSE9SKCJQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPiwgSmFtaWUgTGVuZWhhbiA8bGVuZWhhbkB0d2liYmxlLm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgTXVuZHQgPGxldGhhbEBsaW51eC1zaC5vcmc+LCAiCisJICAgICAgIkphbWllIExlbmVoYW4gPGxlbmVoYW5AdHdpYmJsZS5vcmc+LCAiCisJICAgICAgIkFuZ2VsbyBDYXN0ZWxsbyA8YW5nZWxvLmNhc3RlbGxvQHN0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc3RrMTd0YTguYyBiL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCmluZGV4IGEyNjVkYTcuLjMxZDNjOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jCkBAIC0zOTQsNiArMzk0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnN0azE3dGE4Iik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN0azE3dGE4X3J0Y19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHN0azE3dGE4X3J0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHN0azE3dGE4X3J0Y19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwppbmRleCBhNmI1NzI5Li4yNDIwM2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwpAQCAtMjY0LDMgKzI2NCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlYzMDIwIFJUQyIpOwogTU9EVUxFX0FVVEhPUigiUmFwaGFlbCBBc3NlbmF0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnYzMDIwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKaW5kZXggY2UyZjc4ZC4uYmU5YzcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtNDIyLDYgKzQyMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpSVEMiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX3BsYXRmb3JtX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcnRjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnRjX3JlbW92ZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZyBiL2RyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnCmluZGV4IGU4NzliMjEuLjA3ODgzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnCkBAIC0yMCw2ICsyMCw3IEBACiBjb25maWcgREFTRAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBEQVNEIGRldmljZXMiCiAJZGVwZW5kcyBvbiBDQ1cgJiYgQkxPQ0sKKwlzZWxlY3QgSU9TQ0hFRF9ERUFETElORQogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgREFTRHMgZGlyZWN0bHkgdXRpbGl6aW5nCiAJICBTLzM5MHMgY2hhbm5lbCBzdWJzeXN0ZW0gY29tbWFuZHMuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBydW5uaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCBkOTg0ZTBmLi5hYzZkNGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTk4MCwxMiArOTgwLDEyIEBACiAJCQlicmVhazsKIAkJY2FzZSAtRVRJTUVET1VUOgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyglcyk6IHJlcXVlc3QgdGltZWQgb3V0XG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgY2Rldi0+ZGV2LmJ1c19pZCk7CisJCQkgICAgICAgX19mdW5jX18sIGNkZXYtPmRldi5idXNfaWQpOwogCQkJLy9GSVhNRSAtIGRhc2QgdXNlcyBvd24gdGltZW91dCBpbnRlcmZhY2UuLi4KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyglcyk6IHVua25vd24gZXJyb3IgJWxkXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgY2Rldi0+ZGV2LmJ1c19pZCwgUFRSX0VSUihpcmIpKTsKKwkJCSAgICAgICBfX2Z1bmNfXywgY2Rldi0+ZGV2LmJ1c19pZCwgUFRSX0VSUihpcmIpKTsKIAkJfQogCQlyZXR1cm47CiAJfQpAQCAtMTE0OSwxMiArMTE0OSwxNCBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpuOwogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKwlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgZmluYWxfcXVldWUpIHsKIAkJY3FyID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKIAkJbGlzdF9kZWxfaW5pdCgmY3FyLT5kZXZsaXN0KTsKLQkJaWYgKGNxci0+YmxvY2spCi0JCQlzcGluX2xvY2tfYmgoJmNxci0+YmxvY2stPnF1ZXVlX2xvY2spOworCQlibG9jayA9IGNxci0+YmxvY2s7CisJCWlmIChibG9jaykKKwkJCXNwaW5fbG9ja19iaCgmYmxvY2stPnF1ZXVlX2xvY2spOwogCQlzd2l0Y2ggKGNxci0+c3RhdHVzKSB7CiAJCWNhc2UgREFTRF9DUVJfU1VDQ0VTUzoKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRE9ORTsKQEAgLTExNzIsMTUgKzExNzQsMTMgQEAKIAkJCQkgICAgY3FyLCBjcXItPnN0YXR1cyk7CiAJCQlCVUcoKTsKIAkJfQotCQlpZiAoY3FyLT5ibG9jaykKLQkJCXNwaW5fdW5sb2NrX2JoKCZjcXItPmJsb2NrLT5xdWV1ZV9sb2NrKTsKIAkJaWYgKGNxci0+Y2FsbGJhY2sgIT0gTlVMTCkKIAkJCShjcXItPmNhbGxiYWNrKShjcXIsIGNxci0+Y2FsbGJhY2tfZGF0YSk7CisJCWlmIChibG9jaykKKwkJCXNwaW5fdW5sb2NrX2JoKCZibG9jay0+cXVldWVfbG9jayk7CiAJfQogfQogCi0KLQogLyoKICAqIFRha2UgYSBsb29rIGF0IHRoZSBmaXJzdCByZXF1ZXN0IG9uIHRoZSBjY3cgcXVldWUgYW5kIGNoZWNrCiAgKiBpZiBpdCByZWFjaGVkIGl0cyBleHBpcmUgdGltZS4gSWYgc28sIHRlcm1pbmF0ZSB0aGUgSU8uCkBAIC0xOTU2LDYgKzE5NTYsNyBAQAogCWJsb2NrLT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBibG9jazsKIAogCWVsZXZhdG9yX2V4aXQoYmxvY2stPnJlcXVlc3RfcXVldWUtPmVsZXZhdG9yKTsKKwlibG9jay0+cmVxdWVzdF9xdWV1ZS0+ZWxldmF0b3IgPSBOVUxMOwogCXJjID0gZWxldmF0b3JfaW5pdChibG9jay0+cmVxdWVzdF9xdWV1ZSwgImRlYWRsaW5lIik7CiAJaWYgKHJjKSB7CiAJCWJsa19jbGVhbnVwX3F1ZXVlKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlKTsKQEAgLTIyOTgsOSArMjI5OSw4IEBACiAJICogaW4gdGhlIG90aGVyIG9wZW5lcnMuCiAJICovCiAJaWYgKGRldmljZS0+YmxvY2spIHsKLQkJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gZGV2aWNlLT5ibG9jazsKLQkJbWF4X2NvdW50ID0gYmxvY2stPmJkZXYgPyAwIDogLTE7Ci0JCW9wZW5fY291bnQgPSAoaW50KSBhdG9taWNfcmVhZCgmYmxvY2stPm9wZW5fY291bnQpOworCQltYXhfY291bnQgPSBkZXZpY2UtPmJsb2NrLT5iZGV2ID8gMCA6IC0xOworCQlvcGVuX2NvdW50ID0gYXRvbWljX3JlYWQoJmRldmljZS0+YmxvY2stPm9wZW5fY291bnQpOwogCQlpZiAob3Blbl9jb3VudCA+IG1heF9jb3VudCkgewogCQkJaWYgKG9wZW5fY291bnQgPiAwKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IG9mZmxpbmUgZGFzZCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCBmNjk3MTRhLi5lNjcwMGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTE5OTYsNiArMTk5NiwzNiBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9jb21wb3VuZCAqLwogCiAvKgorICpEQVNEXzM5OTBfRVJQX0hBTkRMRV9TSU0KKyAqCisgKkRFU0NSSVBUSU9OCisgKiAgaW5zcGVjdHMgdGhlIFNJTSBTRU5TRSBkYXRhIGFuZCBzdGFydHMgYW4gYXBwcm9wcmlhdGUgYWN0aW9uCisgKgorICogUEFSQU1FVEVSCisgKiAgIHNlbnNlCSAgIHNlbnNlIGRhdGEgb2YgdGhlIGFjdHVhbCBlcnJvcgorICoKKyAqIFJFVFVSTiBWQUxVRVMKKyAqICAgbm9uZQorICovCit2b2lkCitkYXNkXzM5OTBfZXJwX2hhbmRsZV9zaW0oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIGNoYXIgKnNlbnNlKQoreworCS8qIHByaW50IG1lc3NhZ2UgYWNjb3JkaW5nIHRvIGxvZyBvciBtZXNzYWdlIHRvIG9wZXJhdG9yIG1vZGUgKi8KKwlpZiAoKHNlbnNlWzI0XSAmIERBU0RfU0lNX01TR19UT19PUCkgfHwgKHNlbnNlWzFdICYgMHgxMCkpIHsKKworCQkvKiBwcmludCBTSU0gU1JDIGZyb20gUmVmQ29kZSAqLworCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLCAiU0lNIC0gU1JDOiAiCisJCQkgICAgIiUwMnglMDJ4JTAyeCUwMngiLCBzZW5zZVsyMl0sCisJCQkgICAgc2Vuc2VbMjNdLCBzZW5zZVsxMV0sIHNlbnNlWzEyXSk7CisJfSBlbHNlIGlmIChzZW5zZVsyNF0gJiBEQVNEX1NJTV9MT0cpIHsKKwkJLyogcHJpbnQgU0lNIFNSQyBSZWZjb2RlICovCisJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiU0lNIC0gU1JDOiAiCisJCQkgICAgIiUwMnglMDJ4JTAyeCUwMngiLCBzZW5zZVsyMl0sCisJCQkgICAgc2Vuc2VbMjNdLCBzZW5zZVsxMV0sIHNlbnNlWzEyXSk7CisJfQorfQorCisvKgogICogREFTRF8zOTkwX0VSUF9JTlNQRUNUXzMyCiAgKgogICogREVTQ1JJUFRJT04KQEAgLTIwMTgsNiArMjA0OCwxMCBAQAogCiAJZXJwLT5mdW5jdGlvbiA9IGRhc2RfMzk5MF9lcnBfaW5zcGVjdF8zMjsKIAorCS8qIGNoZWNrIGZvciBTSU0gc2Vuc2UgZGF0YSAqLworCWlmICgoc2Vuc2VbNl0gJiBEQVNEX1NJTV9TRU5TRSkgPT0gREFTRF9TSU1fU0VOU0UpCisJCWRhc2RfMzk5MF9lcnBfaGFuZGxlX3NpbShkZXZpY2UsIHNlbnNlKTsKKwogCWlmIChzZW5zZVsyNV0gJiBEQVNEX1NFTlNFX0JJVF8wKSB7CiAKIAkJLyogY29tcG91bmQgcHJvZ3JhbSBhY3Rpb24gY29kZXMgKGJ5dGUyNSBiaXQgMCA9PSAnMScpICovCkBAIC0yMzEwLDEwICsyMzQ0LDggQEAKIGRhc2RfMzk5MF9lcnBfZXJyb3JfbWF0Y2goc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyMSwgc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyMikKIHsKIAotCS8qIGNoZWNrIGZhaWxlZCBDQ1cgKi8KLQlpZiAoY3FyMS0+aXJiLnNjc3cuY3BhICE9IGNxcjItPmlyYi5zY3N3LmNwYSkgewotCQkvLwlyZXR1cm4gMDsJLyogQ0NXIGRvZXNuJ3QgbWF0Y2ggKi8KLQl9CisJaWYgKGNxcjEtPnN0YXJ0ZGV2ICE9IGNxcjItPnN0YXJ0ZGV2KQorCQlyZXR1cm4gMDsKIAogCWlmIChjcXIxLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMgIT0gY3FyMi0+aXJiLmVzdy5lc3cwLmVydy5jb25zKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCmluZGV4IDNhNDBiZWUuLjJkOGRmMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwpAQCAtNzQ1LDYgKzc0NSwxOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxjdS0+bG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBfX3N0b3BfZGV2aWNlX29uX2xjdShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkgc3RydWN0IGRhc2RfZGV2aWNlICpwb3MpCit7CisJLyogSWYgcG9zID09IGRldmljZSB0aGVuIGRldmljZSBpcyBhbHJlYWR5IGxvY2tlZCEgKi8KKwlpZiAocG9zID09IGRldmljZSkgeworCQlwb3MtPnN0b3BwZWQgfD0gREFTRF9TVE9QUEVEX1NVOworCQlyZXR1cm47CisJfQorCXNwaW5fbG9jayhnZXRfY2N3ZGV2X2xvY2socG9zLT5jZGV2KSk7CisJcG9zLT5zdG9wcGVkIHw9IERBU0RfU1RPUFBFRF9TVTsKKwlzcGluX3VubG9jayhnZXRfY2N3ZGV2X2xvY2socG9zLT5jZGV2KSk7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gdGhlCiAgKiBjZGV2IGxvY2sgZm9yIGRldmljZSBpcyBhbHJlYWR5IGxvY2tlZCEKQEAgLTc1NSwzNSArNzY4LDE1IEBACiAJc3RydWN0IGFsaWFzX3Bhdl9ncm91cCAqcGF2Z3JvdXA7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpwb3M7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmxjdS0+YWN0aXZlX2RldmljZXMsIGFsaWFzX2xpc3QpIHsKLQkJaWYgKHBvcyAhPSBkZXZpY2UpCi0JCQlzcGluX2xvY2soZ2V0X2Njd2Rldl9sb2NrKHBvcy0+Y2RldikpOwotCQlwb3MtPnN0b3BwZWQgfD0gREFTRF9TVE9QUEVEX1NVOwotCQlpZiAocG9zICE9IGRldmljZSkKLQkJCXNwaW5fdW5sb2NrKGdldF9jY3dkZXZfbG9jayhwb3MtPmNkZXYpKTsKLQl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZsY3UtPmluYWN0aXZlX2RldmljZXMsIGFsaWFzX2xpc3QpIHsKLQkJaWYgKHBvcyAhPSBkZXZpY2UpCi0JCQlzcGluX2xvY2soZ2V0X2Njd2Rldl9sb2NrKHBvcy0+Y2RldikpOwotCQlwb3MtPnN0b3BwZWQgfD0gREFTRF9TVE9QUEVEX1NVOwotCQlpZiAocG9zICE9IGRldmljZSkKLQkJCXNwaW5fdW5sb2NrKGdldF9jY3dkZXZfbG9jayhwb3MtPmNkZXYpKTsKLQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZsY3UtPmFjdGl2ZV9kZXZpY2VzLCBhbGlhc19saXN0KQorCQlfX3N0b3BfZGV2aWNlX29uX2xjdShkZXZpY2UsIHBvcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZsY3UtPmluYWN0aXZlX2RldmljZXMsIGFsaWFzX2xpc3QpCisJCV9fc3RvcF9kZXZpY2Vfb25fbGN1KGRldmljZSwgcG9zKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmdyb3VwLCAmbGN1LT5ncm91cGxpc3QsIGdyb3VwKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmcGF2Z3JvdXAtPmJhc2VsaXN0LCBhbGlhc19saXN0KSB7Ci0JCQlpZiAocG9zICE9IGRldmljZSkKLQkJCQlzcGluX2xvY2soZ2V0X2Njd2Rldl9sb2NrKHBvcy0+Y2RldikpOwotCQkJcG9zLT5zdG9wcGVkIHw9IERBU0RfU1RPUFBFRF9TVTsKLQkJCWlmIChwb3MgIT0gZGV2aWNlKQotCQkJCXNwaW5fdW5sb2NrKGdldF9jY3dkZXZfbG9jayhwb3MtPmNkZXYpKTsKLQkJfQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnBhdmdyb3VwLT5hbGlhc2xpc3QsIGFsaWFzX2xpc3QpIHsKLQkJCWlmIChwb3MgIT0gZGV2aWNlKQotCQkJCXNwaW5fbG9jayhnZXRfY2N3ZGV2X2xvY2socG9zLT5jZGV2KSk7Ci0JCQlwb3MtPnN0b3BwZWQgfD0gREFTRF9TVE9QUEVEX1NVOwotCQkJaWYgKHBvcyAhPSBkZXZpY2UpCi0JCQkJc3Bpbl91bmxvY2soZ2V0X2Njd2Rldl9sb2NrKHBvcy0+Y2RldikpOwotCQl9CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmcGF2Z3JvdXAtPmJhc2VsaXN0LCBhbGlhc19saXN0KQorCQkJX19zdG9wX2RldmljZV9vbl9sY3UoZGV2aWNlLCBwb3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnBhdmdyb3VwLT5hbGlhc2xpc3QsIGFsaWFzX2xpc3QpCisJCQlfX3N0b3BfZGV2aWNlX29uX2xjdShkZXZpY2UsIHBvcyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggNjFmMTY5My4uYTBlZGFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMTQxNSw2ICsxNDE1LDEzIEBACiAJCXJldHVybjsKIAl9CiAKKworCS8qIHNlcnZpY2UgaW5mb3JtYXRpb24gbWVzc2FnZSBTSU0gKi8KKwlpZiAoKGlyYi0+ZWN3WzZdICYgREFTRF9TSU1fU0VOU0UpID09IERBU0RfU0lNX1NFTlNFKSB7CisJCWRhc2RfMzk5MF9lcnBfaGFuZGxlX3NpbShkZXZpY2UsIGlyYi0+ZWN3KTsKKwkJcmV0dXJuOworCX0KKwogCS8qIGp1c3QgcmVwb3J0IG90aGVyIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KIAlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCSAgICAidW5zb2xpY2l0ZWQgaW50ZXJydXB0IHJlY2VpdmVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCmluZGV4IGQxM2VhMDUuLjExNjYxMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCkBAIC0xMjUsNyArMTI1LDggQEAKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWlmIChwcml2YXRlID09IE5VTEwpIHsKLQkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2ZiYV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSksCisJCQkJICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKIAkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggNDRiMjk4NC4uNmM2MjRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTcyLDYgKzcyLDExIEBACiAjZGVmaW5lIERBU0RfU0VOU0VfQklUXzIgMHgyMAogI2RlZmluZSBEQVNEX1NFTlNFX0JJVF8zIDB4MTAKIAorLyogQklUIERFRklOSVRJT05TIEZPUiBTSU0gU0VOU0UgKi8KKyNkZWZpbmUgREFTRF9TSU1fU0VOU0UgMHgwRgorI2RlZmluZSBEQVNEX1NJTV9NU0dfVE9fT1AgMHgwMworI2RlZmluZSBEQVNEX1NJTV9MT0cgMHgwQworCiAvKgogICogU0VDVElPTjogTUFDUk9zIGZvciBrbG9nZCBhbmQgczM5MCBkZWJ1ZyBmZWF0dXJlIChkYmYpCiAgKi8KQEAgLTYyMSw2ICs2MjYsNyBAQAogCiAvKiBleHRlcm5hbHMgaW4gZGFzZF8zOTkwX2VycC5jICovCiBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkXzM5OTBfZXJwX2FjdGlvbihzdHJ1Y3QgZGFzZF9jY3dfcmVxICopOwordm9pZCBkYXNkXzM5OTBfZXJwX2hhbmRsZV9zaW0oc3RydWN0IGRhc2RfZGV2aWNlICosIGNoYXIgKik7CiAKIC8qIGV4dGVybmFscyBpbiBkYXNkX2Vlci5jICovCiAjaWZkZWYgQ09ORklHX0RBU0RfRUVSCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggMjhhODZmMDcuLjU1NjA2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTYyLDggKzYyLDEwIEBACiAJCXJldHVybiAwOwogCWlmIChkZXZpY2UtPmJsb2NrKQogCQlibG9jayA9IGRldmljZS0+YmxvY2s7Ci0JZWxzZQorCWVsc2UgeworCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAkJcmV0dXJuIDA7CisJfQogCS8qIFByaW50IGRldmljZSBudW1iZXIuICovCiAJc2VxX3ByaW50ZihtLCAiJXMiLCBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOwogCS8qIFByaW50IGRpc2NpcGxpbmUgc3RyaW5nLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKaW5kZXggM2ZhZjA1My4uMDQ3ODdlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCkBAIC0xNDIsNTcgKzE0Miw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qCi0gKiBwcmludCBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGZvciBzZWdtZW50X2xvYWQoKS9zZWdtZW50X3R5cGUoKQotICogcmV0dXJuIGNvZGUKLSAqLwotc3RhdGljIHZvaWQKLWRjc3NibGtfc2VnbWVudF93YXJuKGludCByYywgY2hhciogc2VnX25hbWUpCi17Ci0Jc3dpdGNoIChyYykgewotCWNhc2UgLUVOT0VOVDoKLQkJUFJJTlRfV0FSTigiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgZG9lcyBub3QgZXhpc3RcbiIsCi0JCQkgICBzZWdfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgLUVOT1NZUzoKLQkJUFJJTlRfV0FSTigiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgbm90IHJ1bm5pbmcgb24gVk1cbiIsCi0JCQkgICBzZWdfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgLUVJTzoKLQkJUFJJTlRfV0FSTigiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgaGFyZHdhcmUgZXJyb3JcbiIsCi0JCQkgICBzZWdfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgLUVOT1RTVVBQOgotCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCBpcyBhIG11bHRpLXBhcnQgIgotCQkJICAgInNlZ21lbnRcbiIsIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PU1BDOgotCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCBvdmVybGFwcyB3aXRoICIKLQkJCSAgICJzdG9yYWdlXG4iLCBzZWdfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgLUVCVVNZOgotCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCBvdmVybGFwcyB3aXRoICIKLQkJCSAgICJhbHJlYWR5IGxvYWRlZCBkY3NzXG4iLCBzZWdfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgLUVQRVJNOgotCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCBhbHJlYWR5IGxvYWRlZCBpbiAiCi0JCQkgICAiaW5jb21wYXRpYmxlIG1vZGVcbiIsIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PTUVNOgotCQlQUklOVF9XQVJOKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCBvdXQgb2YgbWVtb3J5XG4iLAotCQkJICAgc2VnX25hbWUpOwotCQlicmVhazsKLQljYXNlIC1FUkFOR0U6Ci0JCVBSSU5UX1dBUk4oImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsIGV4Y2VlZHMga2VybmVsICIKLQkJCSAgICJtYXBwaW5nIHJhbmdlXG4iLCBzZWdfbmFtZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsIHJldHVybiB2YWx1ZSAlaVxuIiwKLQkJCSAgIHNlZ19uYW1lLCByYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZGNzc2Jsa191bnJlZ2lzdGVyX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwpAQCAtNDIzLDcgKzM3Miw3IEBACiAJcmMgPSBzZWdtZW50X2xvYWQobG9jYWxfYnVmLCBTRUdNRU5UX1NIQVJFRCwKIAkJCQkmZGV2X2luZm8tPnN0YXJ0LCAmZGV2X2luZm8tPmVuZCk7CiAJaWYgKHJjIDwgMCkgewotCQlkY3NzYmxrX3NlZ21lbnRfd2FybihyYywgZGV2X2luZm8tPnNlZ21lbnRfbmFtZSk7CisJCXNlZ21lbnRfd2FybmluZyhyYywgZGV2X2luZm8tPnNlZ21lbnRfbmFtZSk7CiAJCWdvdG8gZGVhbGxvY19nZW5kaXNrOwogCX0KIAlzZWdfYnl0ZV9zaXplID0gKGRldl9pbmZvLT5lbmQgLSBkZXZfaW5mby0+c3RhcnQgKyAxKTsKQEAgLTY2Niw3ICs2MTUsNyBAQAogCQlwYWdlX2FkZHIgPSAodW5zaWduZWQgbG9uZykKIAkJCXBhZ2VfYWRkcmVzcyhidmVjLT5idl9wYWdlKSArIGJ2ZWMtPmJ2X29mZnNldDsKIAkJc291cmNlX2FkZHIgPSBkZXZfaW5mby0+c3RhcnQgKyAoaW5kZXg8PDEyKSArIGJ5dGVzX2RvbmU7Ci0JCWlmICh1bmxpa2VseShwYWdlX2FkZHIgJiA0MDk1KSAhPSAwIHx8IChidmVjLT5idl9sZW4gJiA0MDk1KSAhPSAwKQorCQlpZiAodW5saWtlbHkoKHBhZ2VfYWRkciAmIDQwOTUpICE9IDApIHx8IChidmVjLT5idl9sZW4gJiA0MDk1KSAhPSAwKQogCQkJLy8gTW9yZSBwYXJhbm9pYS4KIAkJCWdvdG8gZmFpbDsKIAkJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2RlZmtleW1hcC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvZGVma2V5bWFwLmMKaW5kZXggMzg5MzQ2Yy4uMDdjN2YzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvZGVma2V5bWFwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvZGVma2V5bWFwLmMKQEAgLTE1MSw4ICsxNTEsOCBAQAogfTsKIAogc3RydWN0IGtiZGlhY3J1YyBhY2NlbnRfdGFibGVbTUFYX0RJQUNSXSA9IHsKLQl7J14nLCAnYycsICdcMDAzJ30sCXsnXicsICdkJywgJ1wwMDQnfSwKLQl7J14nLCAneicsICdcMDMyJ30sCXsnXicsICdcMDEyJywgJ1wwMDAnfSwKKwl7J14nLCAnYycsIDAwMDN9LAl7J14nLCAnZCcsIDAwMDR9LAorCXsnXicsICd6JywgMDAzMn0sCXsnXicsIDAwMTIsIDAwMDB9LAogfTsKIAogdW5zaWduZWQgaW50IGFjY2VudF90YWJsZV9zaXplID0gNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKaW5kZXggNjcwMDliZi4uMWUxZjUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKQEAgLTExMSw1NiArMTExLDYgQEAKIAlBU0NFQkMoZWJjZGljX25hbWUsIDgpOwogfQogCi0vKgotICogcHJpbnQgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBmb3Igc2VnbWVudF9sb2FkKCkvc2VnbWVudF90eXBlKCkKLSAqIHJldHVybiBjb2RlCi0gKi8KLXN0YXRpYyB2b2lkIG1vbl9zZWdtZW50X3dhcm4oaW50IHJjLCBjaGFyKiBzZWdfbmFtZSkKLXsKLQlzd2l0Y2ggKHJjKSB7Ci0JY2FzZSAtRU5PRU5UOgotCQlQX1dBUk5JTkcoImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsIGRvZXMgbm90IGV4aXN0XG4iLAotCQkJICBzZWdfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgLUVOT1NZUzoKLQkJUF9XQVJOSU5HKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCBub3QgcnVubmluZyBvbiBWTVxuIiwKLQkJCSAgc2VnX25hbWUpOwotCQlicmVhazsKLQljYXNlIC1FSU86Ci0JCVBfV0FSTklORygiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgaGFyZHdhcmUgZXJyb3JcbiIsCi0JCQkgIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PVFNVUFA6Ci0JCVBfV0FSTklORygiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgaXMgYSBtdWx0aS1wYXJ0ICIKLQkJCSAgInNlZ21lbnRcbiIsIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PU1BDOgotCQlQX1dBUk5JTkcoImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsIG92ZXJsYXBzIHdpdGggIgotCQkJICAic3RvcmFnZVxuIiwgc2VnX25hbWUpOwotCQlicmVhazsKLQljYXNlIC1FQlVTWToKLQkJUF9XQVJOSU5HKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCBvdmVybGFwcyB3aXRoICIKLQkJCSAgImFscmVhZHkgbG9hZGVkIGRjc3NcbiIsIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRVBFUk06Ci0JCVBfV0FSTklORygiY2Fubm90IGxvYWQvcXVlcnkgc2VnbWVudCAlcywgYWxyZWFkeSBsb2FkZWQgaW4gIgotCQkJICAiaW5jb21wYXRpYmxlIG1vZGVcbiIsIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRU5PTUVNOgotCQlQX1dBUk5JTkcoImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsIG91dCBvZiBtZW1vcnlcbiIsCi0JCQkgIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRVJBTkdFOgotCQlQX1dBUk5JTkcoImNhbm5vdCBsb2FkL3F1ZXJ5IHNlZ21lbnQgJXMsIGV4Y2VlZHMga2VybmVsICIKLQkJCSAgIm1hcHBpbmcgcmFuZ2VcbiIsIHNlZ19uYW1lKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJUF9XQVJOSU5HKCJjYW5ub3QgbG9hZC9xdWVyeSBzZWdtZW50ICVzLCByZXR1cm4gdmFsdWUgJWlcbiIsCi0JCQkgIHNlZ19uYW1lLCByYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1vbl9tY2Ffc3RhcnQoc3RydWN0IG1vbl9tc2cgKm1vbm1zZykKIHsKIAlyZXR1cm4gKih1MzIgKikgJm1vbm1zZy0+bXNnLnJtbXNnOwpAQCAtNTg1LDcgKzUzNSw3IEBACiAKIAlyYyA9IHNlZ21lbnRfdHlwZShtb25fZGNzc19uYW1lKTsKIAlpZiAocmMgPCAwKSB7Ci0JCW1vbl9zZWdtZW50X3dhcm4ocmMsIG1vbl9kY3NzX25hbWUpOworCQlzZWdtZW50X3dhcm5pbmcocmMsIG1vbl9kY3NzX25hbWUpOwogCQlnb3RvIG91dF9pdWN2OwogCX0KIAlpZiAocmMgIT0gU0VHX1RZUEVfU0MpIHsKQEAgLTU5OCw3ICs1NDgsNyBAQAogCXJjID0gc2VnbWVudF9sb2FkKG1vbl9kY3NzX25hbWUsIFNFR01FTlRfU0hBUkVELAogCQkJICAmbW9uX2Rjc3Nfc3RhcnQsICZtb25fZGNzc19lbmQpOwogCWlmIChyYyA8IDApIHsKLQkJbW9uX3NlZ21lbnRfd2FybihyYywgbW9uX2Rjc3NfbmFtZSk7CisJCXNlZ21lbnRfd2FybmluZyhyYywgbW9uX2Rjc3NfbmFtZSk7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXRfaXVjdjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMKaW5kZXggMjU2MjliOS4uMmM3YTFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwpAQCAtMjksMTAgKzI5LDEwIEBACiAvKiBMb2NrIHRvIHByb3RlY3QgaW50ZXJuYWwgZGF0YSBjb25zaXN0ZW5jeS4gKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2NscF9sb2NrKTsKIAotLyogTWFzayBvZiBldmVudHMgdGhhdCB3ZSBjYW4gcmVjZWl2ZSBmcm9tIHRoZSBzY2xwIGludGVyZmFjZS4gKi8KKy8qIE1hc2sgb2YgZXZlbnRzIHRoYXQgd2UgY2FuIHNlbmQgdG8gdGhlIHNjbHAgaW50ZXJmYWNlLiAqLwogc3RhdGljIHNjY2JfbWFza190IHNjbHBfcmVjZWl2ZV9tYXNrOwogCi0vKiBNYXNrIG9mIGV2ZW50cyB0aGF0IHdlIGNhbiBzZW5kIHRvIHRoZSBzY2xwIGludGVyZmFjZS4gKi8KKy8qIE1hc2sgb2YgZXZlbnRzIHRoYXQgd2UgY2FuIHJlY2VpdmUgZnJvbSB0aGUgc2NscCBpbnRlcmZhY2UuICovCiBzdGF0aWMgc2NjYl9tYXNrX3Qgc2NscF9zZW5kX21hc2s7CiAKIC8qIExpc3Qgb2YgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMgYW5kIHNlbmRlcnMuICovCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJfQogCQlzY2xwX3J1bm5pbmdfc3RhdGUgPSBzY2xwX3J1bm5pbmdfc3RhdGVfaWRsZTsKIAl9Ci0JaWYgKGV2YnVmX3BlbmRpbmcgJiYgc2NscF9yZWNlaXZlX21hc2sgIT0gMCAmJgorCWlmIChldmJ1Zl9wZW5kaW5nICYmCiAJICAgIHNjbHBfYWN0aXZhdGlvbl9zdGF0ZSA9PSBzY2xwX2FjdGl2YXRpb25fc3RhdGVfYWN0aXZlKQogCQlfX3NjbHBfcXVldWVfcmVhZF9yZXEoKTsKIAlzcGluX3VubG9jaygmc2NscF9sb2NrKTsKQEAgLTQ1OSw4ICs0NTksOCBAQAogCQlyZWcgPSBOVUxMOwogCQlsaXN0X2Zvcl9lYWNoKGwsICZzY2xwX3JlZ19saXN0KSB7CiAJCQlyZWcgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBzY2xwX3JlZ2lzdGVyLCBsaXN0KTsKLQkJCXJlY2VpdmVfbWFzayA9IHJlZy0+cmVjZWl2ZV9tYXNrICYgc2NscF9yZWNlaXZlX21hc2s7Ci0JCQlzZW5kX21hc2sgPSByZWctPnNlbmRfbWFzayAmIHNjbHBfc2VuZF9tYXNrOworCQkJcmVjZWl2ZV9tYXNrID0gcmVnLT5zZW5kX21hc2sgJiBzY2xwX3JlY2VpdmVfbWFzazsKKwkJCXNlbmRfbWFzayA9IHJlZy0+cmVjZWl2ZV9tYXNrICYgc2NscF9zZW5kX21hc2s7CiAJCQlpZiAocmVnLT5zY2xwX3JlY2VpdmVfbWFzayAhPSByZWNlaXZlX21hc2sgfHwKIAkJCSAgICByZWctPnNjbHBfc2VuZF9tYXNrICE9IHNlbmRfbWFzaykgewogCQkJCXJlZy0+c2NscF9yZWNlaXZlX21hc2sgPSByZWNlaXZlX21hc2s7CkBAIC02MTUsOCArNjE1LDggQEAKIAl1MTYgbWFza19sZW5ndGg7CiAJc2NjYl9tYXNrX3QgcmVjZWl2ZV9tYXNrOwogCXNjY2JfbWFza190IHNlbmRfbWFzazsKLQlzY2NiX21hc2tfdCBzY2xwX3NlbmRfbWFzazsKIAlzY2NiX21hc2tfdCBzY2xwX3JlY2VpdmVfbWFzazsKKwlzY2NiX21hc2tfdCBzY2xwX3NlbmRfbWFzazsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFByZXBhcmUgaW5pdCBtYXNrIHJlcXVlc3QuIENhbGxlZCB3aGlsZSBzY2xwX2xvY2sgaXMgbG9ja2VkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oCmluZGV4IGFhODE4NmQuLmJhYzgwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuaAorKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgKQEAgLTEyMiwxMSArMTIyLDEzIEBACiAvKiBvZiBzb21lIHJvdXRpbmVzIGl0IHdhbnRzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb3cgbGV2ZWwgZHJpdmVyICovCiBzdHJ1Y3Qgc2NscF9yZWdpc3RlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCS8qIGV2ZW50IG1hc2tzIHRoaXMgdXNlciBpcyByZWdpc3RlcmVkIGZvciAqLworCS8qIFVzZXIgd2FudHMgdG8gcmVjZWl2ZTogKi8KIAlzY2NiX21hc2tfdCByZWNlaXZlX21hc2s7CisJLyogVXNlciB3YW50cyB0byBzZW5kOiAqLwogCXNjY2JfbWFza190IHNlbmRfbWFzazsKLQkvKiBhY3R1YWxseSBwcmVzZW50IGV2ZW50cyAqLworCS8qIEgvVyBjYW4gcmVjZWl2ZTogKi8KIAlzY2NiX21hc2tfdCBzY2xwX3JlY2VpdmVfbWFzazsKKwkvKiBIL1cgY2FuIHNlbmQ6ICovCiAJc2NjYl9tYXNrX3Qgc2NscF9zZW5kX21hc2s7CiAJLyogY2FsbGVkIGlmIGV2ZW50IHR5cGUgYXZhaWxhYmlsaXR5IGNoYW5nZXMgKi8KIAl2b2lkICgqc3RhdGVfY2hhbmdlX2ZuKShzdHJ1Y3Qgc2NscF9yZWdpc3RlciAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY29uZmlnLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NvbmZpZy5jCmluZGV4IDlkYzc3ZjEuLmI4ZjM1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY29uZmlnLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jb25maWcuYwpAQCAtNjQsNyArNjQsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JaWYgKCEoc2NscF9jb25mX3JlZ2lzdGVyLnNjbHBfcmVjZWl2ZV9tYXNrICYgRVZUWVBfQ09ORk1HTURBVEFfTUFTSykpIHsKKwlpZiAoIShzY2xwX2NvbmZfcmVnaXN0ZXIuc2NscF9zZW5kX21hc2sgJiBFVlRZUF9DT05GTUdNREFUQV9NQVNLKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFRBRyAibm8gY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50LlxuIik7CiAJCXNjbHBfdW5yZWdpc3Rlcigmc2NscF9jb25mX3JlZ2lzdGVyKTsKIAkJcmMgPSAtRU5PU1lTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jcGlfc3lzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaV9zeXMuYwppbmRleCA0MTYxNzAzLi45ZjM3NDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaV9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaV9zeXMuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJCQkidG8gaGFyZHdhcmUgY29uc29sZS5cbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKCEoc2NscF9jcGlfZXZlbnQuc2NscF9zZW5kX21hc2sgJiBFVlRZUF9DVExQUk9HSURFTlRfTUFTSykpIHsKKwlpZiAoIShzY2xwX2NwaV9ldmVudC5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0NUTFBST0dJREVOVF9NQVNLKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjcGk6IG5vIGNvbnRyb2wgcHJvZ3JhbSAiCiAJCQkiaWRlbnRpZmljYXRpb24gc3VwcG9ydFxuIik7CiAJCXJjID0gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMKaW5kZXggYWQ3MTk1ZC4uZGEwOTc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9ydy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcncuYwpAQCAtNDUyLDEwICs0NTIsMTAgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlzY2NiID0gYnVmZmVyLT5zY2NiOwotCWlmIChzY2xwX3J3X2V2ZW50LnNjbHBfc2VuZF9tYXNrICYgRVZUWVBfTVNHX01BU0spCisJaWYgKHNjbHBfcndfZXZlbnQuc2NscF9yZWNlaXZlX21hc2sgJiBFVlRZUF9NU0dfTUFTSykKIAkJLyogVXNlIG5vcm1hbCB3cml0ZSBtZXNzYWdlICovCiAJCXNjY2ItPm1zZ19idWYuaGVhZGVyLnR5cGUgPSBFVlRZUF9NU0c7Ci0JZWxzZSBpZiAoc2NscF9yd19ldmVudC5zY2xwX3NlbmRfbWFzayAmIEVWVFlQX1BNU0dDTURfTUFTSykKKwllbHNlIGlmIChzY2xwX3J3X2V2ZW50LnNjbHBfcmVjZWl2ZV9tYXNrICYgRVZUWVBfUE1TR0NNRF9NQVNLKQogCQkvKiBVc2Ugd3JpdGUgcHJpb3JpdHkgbWVzc2FnZSAqLwogCQlzY2NiLT5tc2dfYnVmLmhlYWRlci50eXBlID0gRVZUWVBfUE1TR0NNRDsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYwppbmRleCAyZTYxNmUzLi5lM2IzZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCQlpZiAoc2NscF90dHlidWYgPT0gTlVMTCkgewogCQkJd2hpbGUgKGxpc3RfZW1wdHkoJnNjbHBfdHR5X3BhZ2VzKSkgewogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjbHBfdHR5X2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAoaW5fYXRvbWljKCkpCisJCQkJaWYgKGluX2ludGVycnVwdCgpKQogCQkJCQlzY2xwX3N5bmNfd2FpdCgpOwogCQkJCWVsc2UKIAkJCQkJd2FpdF9ldmVudChzY2xwX3R0eV93YWl0cSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwppbmRleCBmNDdmNGE3Li5lZDUwNzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIHN0YXRpYyBpbnQKIF9fc2NscF92dDIyMF9lbWl0KHN0cnVjdCBzY2xwX3Z0MjIwX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0JaWYgKCEoc2NscF92dDIyMF9yZWdpc3Rlci5zY2xwX3NlbmRfbWFzayAmIEVWVFlQX1ZUMjIwTVNHX01BU0spKSB7CisJaWYgKCEoc2NscF92dDIyMF9yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX1ZUMjIwTVNHX01BU0spKSB7CiAJCXJlcXVlc3QtPnNjbHBfcmVxLnN0YXR1cyA9IFNDTFBfUkVRX0ZBSUxFRDsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJc2NscF92dDIyMF9lbWl0X2N1cnJlbnQoKTsKIH0KIAotI2RlZmluZSBCVUZGRVJfTUFYX0RFTEFZCUhaLzIKKyNkZWZpbmUgQlVGRkVSX01BWF9ERUxBWQlIWi8yMAogCiAvKiAKICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSB3cml0ZSBmdW5jdGlvbi4gV3JpdGUgQ09VTlQgYnl0ZXMgb2YgZGF0YQpAQCAtMzgzLDcgKzM4Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQKIF9fc2NscF92dDIyMF93cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCwgaW50IGRvX3NjaGVkdWxlLAotCQkgICBpbnQgY29udmVydGxmKQorCQkgICBpbnQgY29udmVydGxmLCBpbnQgbWF5X3NjaGVkdWxlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqcGFnZTsKQEAgLTM5OCw5ICszOTgsOCBAQAogCQkvKiBDcmVhdGUgYSBzY2xwIG91dHB1dCBidWZmZXIgaWYgbm9uZSBleGlzdHMgeWV0ICovCiAJCWlmIChzY2xwX3Z0MjIwX2N1cnJlbnRfcmVxdWVzdCA9PSBOVUxMKSB7CiAJCQl3aGlsZSAobGlzdF9lbXB0eSgmc2NscF92dDIyMF9lbXB0eSkpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2xwX3Z0MjIwX2xvY2ssCi0JCQkJCQkgICAgICAgZmxhZ3MpOwotCQkJCWlmIChpbl9hdG9taWMoKSkKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2xwX3Z0MjIwX2xvY2ssIGZsYWdzKTsKKwkJCQlpZiAoaW5faW50ZXJydXB0KCkgfHwgIW1heV9zY2hlZHVsZSkKIAkJCQkJc2NscF9zeW5jX3dhaXQoKTsKIAkJCQllbHNlCiAJCQkJCXdhaXRfZXZlbnQoc2NscF92dDIyMF93YWl0cSwKQEAgLTQ1MCw3ICs0NDksNyBAQAogc3RhdGljIGludAogc2NscF92dDIyMF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKLQlyZXR1cm4gX19zY2xwX3Z0MjIwX3dyaXRlKGJ1ZiwgY291bnQsIDEsIDApOworCXJldHVybiBfX3NjbHBfdnQyMjBfd3JpdGUoYnVmLCBjb3VudCwgMSwgMCwgMSk7CiB9CiAKICNkZWZpbmUgU0NMUF9WVDIyMF9TRVNTSU9OX0VOREVECTB4MDEKQEAgLTUyOSw3ICs1MjgsNyBAQAogc3RhdGljIHZvaWQKIHNjbHBfdnQyMjBfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKIHsKLQlfX3NjbHBfdnQyMjBfd3JpdGUoJmNoLCAxLCAwLCAwKTsKKwlfX3NjbHBfdnQyMjBfd3JpdGUoJmNoLCAxLCAwLCAwLCAxKTsKIH0KIAogLyoKQEAgLTc0Niw3ICs3NDUsNyBAQAogc3RhdGljIHZvaWQKIHNjbHBfdnQyMjBfY29uX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQogewotCV9fc2NscF92dDIyMF93cml0ZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBidWYsIGNvdW50LCAxLCAxKTsKKwlfX3NjbHBfdnQyMjBfd3JpdGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYnVmLCBjb3VudCwgMSwgMSwgMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IDViNDdlOWMuLjg3NGFkZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC0zOTQsNyArMzk0LDcgQEAKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PU1BDKTsKIAkJZGVmYXVsdDoKIAkJCVBSSU5UX0VSUigiSW52YWxpZCBvcCBpbiAlczolaVxuIiwKLQkJCQkgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkJCSAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAwKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKaW5kZXggYjgzMGE4Yy4uZWJlODQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKQEAgLTgzLDkgKzgzLDkgQEAKIHZvaWQKIHRhcGVjaGFyX2NsZWFudXBfZGV2aWNlKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQogewotCXVucmVnaXN0ZXJfdGFwZV9kZXYoZGV2aWNlLT5ydCk7CisJdW5yZWdpc3Rlcl90YXBlX2RldigmZGV2aWNlLT5jZGV2LT5kZXYsIGRldmljZS0+cnQpOwogCWRldmljZS0+cnQgPSBOVUxMOwotCXVucmVnaXN0ZXJfdGFwZV9kZXYoZGV2aWNlLT5udCk7CisJdW5yZWdpc3Rlcl90YXBlX2RldigmZGV2aWNlLT5jZGV2LT5kZXYsIGRldmljZS0+bnQpOwogCWRldmljZS0+bnQgPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKaW5kZXggYWE3ZjE2Ni4uNmRmZGI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYwpAQCAtOTksMTEgKzk5LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3RhcGVfZGV2KTsKIAotdm9pZCB1bnJlZ2lzdGVyX3RhcGVfZGV2KHN0cnVjdCB0YXBlX2NsYXNzX2RldmljZSAqdGNkKQordm9pZCB1bnJlZ2lzdGVyX3RhcGVfZGV2KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IHRhcGVfY2xhc3NfZGV2aWNlICp0Y2QpCiB7CiAJaWYgKHRjZCAhPSBOVUxMICYmICFJU19FUlIodGNkKSkgewotCQlzeXNmc19yZW1vdmVfbGluaygmdGNkLT5jbGFzc19kZXZpY2UtPmtvYmosCi0JCQkJICB0Y2QtPm1vZGVfbmFtZSk7CisJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXZpY2UtPmtvYmosIHRjZC0+bW9kZV9uYW1lKTsKIAkJZGV2aWNlX2Rlc3Ryb3kodGFwZV9jbGFzcywgdGNkLT5jaGFyX2RldmljZS0+ZGV2KTsKIAkJY2Rldl9kZWwodGNkLT5jaGFyX2RldmljZSk7CiAJCWtmcmVlKHRjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmggYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmgKaW5kZXggZTJiNWFjOS4uNzA3YjdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuaApAQCAtNTYsNiArNTYsNiBAQAogCWNoYXIgKgkJCWRldmljZV9uYW1lLAogCWNoYXIgKgkJCW5vZGVfbmFtZQogKTsKLXZvaWQgdW5yZWdpc3Rlcl90YXBlX2RldihzdHJ1Y3QgdGFwZV9jbGFzc19kZXZpY2UgKnRjZCk7Cit2b2lkIHVucmVnaXN0ZXJfdGFwZV9kZXYoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgdGFwZV9jbGFzc19kZXZpY2UgKnRjZCk7CiAKICNlbmRpZiAvKiBfX1RBUEVfQ0xBU1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMKaW5kZXggNzY4OWI1MC4uODNhZTlhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAJdXJkLT5yZWNsZW4gPSBjZGV2LT5pZC5kcml2ZXJfaW5mbzsKIAljY3dfZGV2aWNlX2dldF9pZChjZGV2LCAmdXJkLT5kZXZfaWQpOwogCW11dGV4X2luaXQoJnVyZC0+aW9fbXV0ZXgpOwotCW11dGV4X2luaXQoJnVyZC0+b3Blbl9tdXRleCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdXJkLT53YWl0KTsKKwlzcGluX2xvY2tfaW5pdCgmdXJkLT5vcGVuX2xvY2spOwogCWF0b21pY19zZXQoJnVyZC0+cmVmX2NvdW50LCAgMSk7CiAJdXJkLT5jZGV2ID0gY2RldjsKIAlnZXRfZGV2aWNlKCZjZGV2LT5kZXYpOwpAQCAtNjc4LDE3ICs2NzksMjEgQEAKIAlpZiAoIXVyZCkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQlpZiAoIW11dGV4X3RyeWxvY2soJnVyZC0+b3Blbl9tdXRleCkpIHsKKwlzcGluX2xvY2soJnVyZC0+b3Blbl9sb2NrKTsKKwl3aGlsZSAodXJkLT5vcGVuX2ZsYWcpIHsKKwkJc3Bpbl91bmxvY2soJnVyZC0+b3Blbl9sb2NrKTsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CiAJCQlyYyA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbF9wdXQ7CiAJCX0KLQl9IGVsc2UgewotCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1cmQtPm9wZW5fbXV0ZXgpKSB7CisJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodXJkLT53YWl0LCB1cmQtPm9wZW5fZmxhZyA9PSAwKSkgewogCQkJcmMgPSAtRVJFU1RBUlRTWVM7CiAJCQlnb3RvIGZhaWxfcHV0OwogCQl9CisJCXNwaW5fbG9jaygmdXJkLT5vcGVuX2xvY2spOwogCX0KKwl1cmQtPm9wZW5fZmxhZysrOworCXNwaW5fdW5sb2NrKCZ1cmQtPm9wZW5fbG9jayk7CiAKIAlUUkFDRSgidXJfb3BlblxuIik7CiAKQEAgLTcyMCw3ICs3MjUsOSBAQAogZmFpbF91cmZpbGVfZnJlZToKIAl1cmZpbGVfZnJlZSh1cmYpOwogZmFpbF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZ1cmQtPm9wZW5fbXV0ZXgpOworCXNwaW5fbG9jaygmdXJkLT5vcGVuX2xvY2spOworCXVyZC0+b3Blbl9mbGFnLS07CisJc3Bpbl91bmxvY2soJnVyZC0+b3Blbl9sb2NrKTsKIGZhaWxfcHV0OgogCXVyZGV2X3B1dCh1cmQpOwogCXJldHVybiByYzsKQEAgLTczMSw3ICs3MzgsMTAgQEAKIAlzdHJ1Y3QgdXJmaWxlICp1cmYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlUUkFDRSgidXJfcmVsZWFzZVxuIik7Ci0JbXV0ZXhfdW5sb2NrKCZ1cmYtPnVyZC0+b3Blbl9tdXRleCk7CisJc3Bpbl9sb2NrKCZ1cmYtPnVyZC0+b3Blbl9sb2NrKTsKKwl1cmYtPnVyZC0+b3Blbl9mbGFnLS07CisJc3Bpbl91bmxvY2soJnVyZi0+dXJkLT5vcGVuX2xvY2spOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdXJmLT51cmQtPndhaXQpOwogCXVyZGV2X3B1dCh1cmYtPnVyZCk7CiAJdXJmaWxlX2ZyZWUodXJmKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuaAppbmRleCBmYTk1OTY0Li5mYTMyMGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5oCkBAIC02Miw3ICs2Miw2IEBACiBzdHJ1Y3QgdXJkZXYgewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwkvKiBCYWNrcG9pbnRlciB0byBjY3cgZGV2aWNlICovCiAJc3RydWN0IG11dGV4IGlvX211dGV4OwkJLyogU2VyaWFsaXNlcyBkZXZpY2UgSU8gKi8KLQlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsJLyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gZGV2aWNlICovCiAJc3RydWN0IGNvbXBsZXRpb24gKmlvX2RvbmU7CS8qIGRvX3VyX2lvIHdhaXRzOyBpcnEgY29tcGxldGVzICovCiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCXN0cnVjdCBjZGV2ICpjaGFyX2RldmljZTsKQEAgLTcxLDYgKzcwLDkgQEAKIAlpbnQgY2xhc3M7CQkJLyogVk0gZGV2aWNlIGNsYXNzICovCiAJaW50IGlvX3JlcXVlc3RfcmM7CQkvKiByZXR1cm4gY29kZSBmcm9tIEkvTyByZXF1ZXN0ICovCiAJYXRvbWljX3QgcmVmX2NvdW50OwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwkJLyogd2FpdCBxdWV1ZSB0byBzZXJpYWxpemUgb3BlbiAqLworCWludCBvcGVuX2ZsYWc7CQkJLyogInVyZGV2IGlzIG9wZW4iIGZsYWcgKi8KKwlzcGlubG9ja190IG9wZW5fbG9jazsJCS8qIHNlcmlhbGl6ZSBjcml0aWNhbCBzZWN0aW9ucyAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3Ztd2F0Y2hkb2cuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3Ztd2F0Y2hkb2cuYwppbmRleCA2ZjQwZmFjLi4xOWY4Mzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bXdhdGNoZG9nLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdm13YXRjaGRvZy5jCkBAIC05Niw3ICs5Niw3IEBACiAKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBwcm9ibGVtIHNldHRpbmcgaW50ZXJ2YWwgJWQsICIKLQkJCSJjbWQgJXNcbiIsIF9fRlVOQ1RJT05fXywgdm13ZHRfaW50ZXJ2YWwsCisJCQkiY21kICVzXG4iLCBfX2Z1bmNfXywgdm13ZHRfaW50ZXJ2YWwsCiAJCQl2bXdkdF9jbWQpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJaW50IHJldCA9IF9fZGlhZzI4OCh3ZHRfY2FuY2VsLCAwLCAiIiwgMCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcHJvYmxlbSBkaXNhYmxpbmcgd2F0Y2hkb2dcbiIsCi0JCQlfX0ZVTkNUSU9OX18pOworCQkJX19mdW5jX18pOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKaW5kZXggZjUyMzUwMS4uYmJiZDE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCXNhID0ga21hbGxvYyhzaXplb2YoKnNhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYSkgewotCQlFUlJPUl9NU0coImttYWxsb2MgZmFpbGVkOiAlczogJWlcbiIsX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCUVSUk9SX01TRygia21hbGxvYyBmYWlsZWQ6ICVzOiAlaVxuIixfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKG1lbWNweV9oc2Ffa2VybmVsKHNhLCBzeXNfaW5mby5zYV9iYXNlLCBzeXNfaW5mby5zYV9zaXplKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYwppbmRleCAwMzkxNGZhLi5mZTFhZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KIAotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggMDA3YWFlYi4uNWRlODY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTIxNyw2ICsyMTcsOCBAQAogCiAJaWYgKGNocF9nZXRfc3RhdHVzKGNocGlkKSA8PSAwKQogCQlyZXR1cm47CisJLyogV2FpdCB1bnRpbCBwcmV2aW91cyBhY3Rpb25zIGhhdmUgc2V0dGxlZC4gKi8KKwljc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKCk7CiAJZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoczM5MF9zdWJjaGFubmVsX3JlbW92ZV9jaHBpZCwgTlVMTCwgJmNocGlkKTsKIH0KIApAQCAtMzAzLDcgKzMwNSw4IEBACiAJCXNwcmludGYoZGJmX3R4dCwgImZsYSV4IiwgcmVzX2RhdGEtPmZsYSk7CiAJCUNJT19UUkFDRV9FVkVOVCggMiwgZGJmX3R4dCk7CiAJfQotCisJLyogV2FpdCB1bnRpbCBwcmV2aW91cyBhY3Rpb25zIGhhdmUgc2V0dGxlZC4gKi8KKwljc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKCk7CiAJLyoKIAkgKiBJL08gcmVzb3VyY2VzIG1heSBoYXZlIGJlY29tZSBhY2Nlc3NpYmxlLgogCSAqIFNjYW4gdGhyb3VnaCBhbGwgc3ViY2hhbm5lbHMgdGhhdCBtYXkgYmUgY29uY2VybmVkIGFuZApAQCAtNTYxLDkgKzU2NCwxMiBAQAogCXNwcmludGYoZGJmX3R4dCwgImNhZGQleC4lMDJ4IiwgY2hwaWQuY3NzaWQsIGNocGlkLmlkKTsKIAlDSU9fVFJBQ0VfRVZFTlQoMiwgZGJmX3R4dCk7CiAKLQlpZiAoY2hwX2dldF9zdGF0dXMoY2hwaWQpICE9IDApCisJaWYgKGNocF9nZXRfc3RhdHVzKGNocGlkKSAhPSAwKSB7CisJCS8qIFdhaXQgdW50aWwgcHJldmlvdXMgYWN0aW9ucyBoYXZlIHNldHRsZWQuICovCisJCWNzc193YWl0X2Zvcl9zbG93X3BhdGgoKTsKIAkJZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoX19jaHBfYWRkLCBfX2NocF9hZGRfbmV3X3NjaCwKIAkJCQkJICAgJmNocGlkKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIF9fczM5MF9zdWJjaGFubmVsX3ZhcnlfY2hwaWQoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwKQEAgLTY1MCw2ICs2NTYsOCBAQAogICovCiBpbnQgY2hzY19jaHBfdmFyeShzdHJ1Y3QgY2hwX2lkIGNocGlkLCBpbnQgb24pCiB7CisJLyogV2FpdCB1bnRpbCBwcmV2aW91cyBhY3Rpb25zIGhhdmUgc2V0dGxlZC4gKi8KKwljc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKCk7CiAJLyoKIAkgKiBSZWRvIFBhdGhWZXJpZmljYXRpb24gb24gdGhlIGRldmljZXMgdGhlIGNocGlkIGNvbm5lY3RzIHRvCiAJICovCkBAIC03NTgsNyArNzY2LDYgQEAKIAlpZiAoIXNlY21fYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZjc3MtPm11dGV4KTsKIAlpZiAoZW5hYmxlICYmICFjc3MtPmNtX2VuYWJsZWQpIHsKIAkJY3NzLT5jdWJfYWRkcjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWNzcy0+Y3ViX2FkZHIyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwpAQCAtNzY2LDcgKzc3Myw2IEBACiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLT5jdWJfYWRkcjEpOwogCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNzcy0+Y3ViX2FkZHIyKTsKIAkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWNtX2FyZWEpOwotCQkJbXV0ZXhfdW5sb2NrKCZjc3MtPm11dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQpAQCAtNzg3LDcgKzc5Myw2IEBACiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtPmN1Yl9hZGRyMSk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtPmN1Yl9hZGRyMik7CiAJfQotCW11dGV4X3VubG9jaygmY3NzLT5tdXRleCk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNlY21fYXJlYSk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IDYwNTkwYTEuLjIzZmZjYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlIDxhc20vY2hwaWQuaD4KICNpbmNsdWRlIDxhc20vYWlycS5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJjaHNjLmgiCkBAIC02NDksMTMgKzY1MCwxMCBAQAogCiAJb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAJaXJxX2VudGVyKCk7Ci0JYXNtIHZvbGF0aWxlICgibWMgMCwwIik7Ci0JaWYgKFMzOTBfbG93Y29yZS5pbnRfY2xvY2sgPj0gUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyKQotCQkvKioKLQkJICogTWFrZSBzdXJlIHRoYXQgdGhlIGkvbyBpbnRlcnJ1cHQgZGlkIG5vdCAib3ZlcnRha2UiCi0JCSAqIHRoZSBsYXN0IEhaIHRpbWVyIGludGVycnVwdC4KLQkJICovCi0JCWFjY291bnRfdGlja3MoUzM5MF9sb3djb3JlLmludF9jbG9jayk7CisJczM5MF9pZGxlX2NoZWNrKCk7CisJaWYgKFMzOTBfbG93Y29yZS5pbnRfY2xvY2sgPj0gUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpCisJCS8qIFNlcnZlIHRpbWVyIGludGVycnVwdHMgZmlyc3QuICovCisJCWNsb2NrX2NvbXBhcmF0b3Jfd29yaygpOwogCS8qCiAJICogR2V0IGludGVycnVwdCBpbmZvcm1hdGlvbiBmcm9tIGxvd2NvcmUKIAkgKi8KQEAgLTY3MiwxMCArNjcwLDE0IEBACiAJCQljb250aW51ZTsKIAkJfQogCQlzY2ggPSAoc3RydWN0IHN1YmNoYW5uZWwgKikodW5zaWduZWQgbG9uZyl0cGlfaW5mby0+aW50cGFybTsKLQkJaWYgKHNjaCkKLQkJCXNwaW5fbG9jayhzY2gtPmxvY2spOworCQlpZiAoIXNjaCkgeworCQkJLyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQgY29uZGl0aW9uLiAqLworCQkJdHNjaCh0cGlfaW5mby0+c2NoaWQsIGlyYik7CisJCQljb250aW51ZTsKKwkJfQorCQlzcGluX2xvY2soc2NoLT5sb2NrKTsKIAkJLyogU3RvcmUgaW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrIHRvIGxvd2NvcmUuICovCi0JCWlmICh0c2NoICh0cGlfaW5mby0+c2NoaWQsIGlyYikgPT0gMCAmJiBzY2gpIHsKKwkJaWYgKHRzY2godHBpX2luZm8tPnNjaGlkLCBpcmIpID09IDApIHsKIAkJCS8qIEtlZXAgc3ViY2hhbm5lbCBpbmZvcm1hdGlvbiB3b3JkIHVwIHRvIGRhdGUuICovCiAJCQltZW1jcHkgKCZzY2gtPnNjaGliLnNjc3csICZpcmItPnNjc3csCiAJCQkJc2l6ZW9mIChpcmItPnNjc3cpKTsKQEAgLTY4Myw4ICs2ODUsNyBAQAogCQkJaWYgKHNjaC0+ZHJpdmVyICYmIHNjaC0+ZHJpdmVyLT5pcnEpCiAJCQkJc2NoLT5kcml2ZXItPmlycShzY2gpOwogCQl9Ci0JCWlmIChzY2gpCi0JCQlzcGluX3VubG9jayhzY2gtPmxvY2spOworCQlzcGluX3VubG9jayhzY2gtPmxvY2spOwogCQkvKgogCQkgKiBBcmUgbW9yZSBpbnRlcnJ1cHRzIHBlbmRpbmc/CiAJCSAqIElmIHNvLCB0aGUgdHBpIGluc3RydWN0aW9uIHdpbGwgdXBkYXRlIHRoZSBsb3djb3JlCkBAIC03MTAsOCArNzExLDkgQEAKIC8qCiAgKiBidXN5IHdhaXQgZm9yIHRoZSBuZXh0IGludGVycnVwdCBvbiB0aGUgY29uc29sZQogICovCi12b2lkCi13YWl0X2NvbnNfZGV2ICh2b2lkKQordm9pZCB3YWl0X2NvbnNfZGV2KHZvaWQpCisJX19yZWxlYXNlcyhjb25zb2xlX3N1YmNoYW5uZWwubG9jaykKKwlfX2FjcXVpcmVzKGNvbnNvbGVfc3ViY2hhbm5lbC5sb2NrKQogewogCXVuc2lnbmVkIGxvbmcgY3I2ICAgICAgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7CiAJdW5zaWduZWQgbG9uZyBzYXZlX2NyNiBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmggYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5oCmluZGV4IDUyYWZhNGMuLjA4ZjIyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uaApAQCAtMTAwLDYgKzEwMCw3IEBACiAKIGludCBjaW9fY3JlYXRlX3NjaF9sb2NrKHN0cnVjdCBzdWJjaGFubmVsICopOwogdm9pZCBkb19hZGFwdGVyX0lPKHZvaWQpOwordm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKik7CiAKIC8qIFVzZSB3aXRoIGNhcmUuICovCiAjaWZkZWYgQ09ORklHX0NDV19DT05TT0xFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCAzYjQ1YmJlLi5jMWFmYWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTUzMyw2ICs1MzMsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCit2b2lkIGNzc193YWl0X2Zvcl9zbG93X3BhdGgodm9pZCkKK3sKKwlmbHVzaF93b3JrcXVldWUoY2N3X2RldmljZV9ub3RpZnlfd29yayk7CisJZmx1c2hfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7Cit9CisKIC8qIFJlcHJvYmUgc3ViY2hhbm5lbCBpZiB1bnJlZ2lzdGVyZWQuICovCiBzdGF0aWMgaW50IHJlcHJvYmVfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdm9pZCAqZGF0YSkKIHsKQEAgLTY4MywxMCArNjg5LDE0IEBACiAJCSAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcyA9IHRvX2NzcyhkZXYpOworCWludCByZXQ7CiAKIAlpZiAoIWNzcykKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGNzcy0+Y21fZW5hYmxlZCk7CisJbXV0ZXhfbG9jaygmY3NzLT5tdXRleCk7CisJcmV0ID0gc3ByaW50ZihidWYsICIleFxuIiwgY3NzLT5jbV9lbmFibGVkKTsKKwltdXRleF91bmxvY2soJmNzcy0+bXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC02OTYsNiArNzA2LDcgQEAKIAlzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcyA9IHRvX2NzcyhkZXYpOwogCWludCByZXQ7CiAKKwltdXRleF9sb2NrKCZjc3MtPm11dGV4KTsKIAlzd2l0Y2ggKGJ1ZlswXSkgewogCWNhc2UgJzAnOgogCQlyZXQgPSBjc3MtPmNtX2VuYWJsZWQgPyBjaHNjX3NlY20oY3NzLCAwKSA6IDA7CkBAIC03MDYsNiArNzE3LDcgQEAKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KKwltdXRleF91bmxvY2soJmNzcy0+bXV0ZXgpOwogCXJldHVybiByZXQgPCAwID8gcmV0IDogY291bnQ7CiB9CiAKQEAgLTc1Miw5ICs3NjQsMTEgQEAKIAkJc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3M7CiAKIAkJY3NzID0gY2hhbm5lbF9zdWJzeXN0ZW1zW2ldOworCQltdXRleF9sb2NrKCZjc3MtPm11dGV4KTsKIAkJaWYgKGNzcy0+Y21fZW5hYmxlZCkKIAkJCWlmIChjaHNjX3NlY20oY3NzLCAwKSkKIAkJCQlyZXQgPSBOT1RJRllfQkFEOworCQltdXRleF91bmxvY2soJmNzcy0+bXV0ZXgpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaAppbmRleCBiNzA1NTQ1Li5lMTkxMzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKQEAgLTE0NCw2ICsxNDQsNyBAQAogaW50IGNzc19zY2hfaXNfdmFsaWQoc3RydWN0IHNjaGliICopOwogCiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNsb3dfcGF0aF93cTsKK3ZvaWQgY3NzX3dhaXRfZm9yX3Nsb3dfcGF0aCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnN1YmNoX2F0dHJfZ3JvdXBzW107CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGQzNWRjM2YuLmUwYzdhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImlvX3NjaC5oIgogCiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgcmVjb3ZlcnlfdGltZXI7Ci1zdGF0aWMgc3BpbmxvY2tfdCByZWNvdmVyeV9sb2NrOworc3RhdGljIERFRklORV9TUElOTE9DSyhyZWNvdmVyeV9sb2NrKTsKIHN0YXRpYyBpbnQgcmVjb3ZlcnlfcGhhc2U7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyByZWNvdmVyeV9kZWxheVtdID0geyAzLCAzMCwgMzAwIH07CiAKQEAgLTU3Nyw3ICs1NzcsNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGN1dHlwZSwgMDQ0NCwgY3V0eXBlX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG1vZGFsaWFzLCAwNDQ0LCBtb2RhbGlhc19zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihvbmxpbmUsIDA2NDQsIG9ubGluZV9zaG93LCBvbmxpbmVfc3RvcmUpOwotZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2NtYl9lbmFibGU7CiBzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmlsaXR5LCAwNDQ0LCBhdmFpbGFibGVfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogc3ViY2hfYXR0cnNbXSA9IHsKQEAgLTE1MzUsNyArMTUzNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJlY292ZXJ5X2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgcmVjb3Zlcnlfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQogewogCWludCByZWRvID0gMDsKIApAQCAtMTU1Myw2ICsxNTUyLDE3IEBACiAJCUNJT19NU0dfRVZFTlQoMiwgInJlY292ZXJ5OiBlbmRcbiIpOwogfQogCitzdGF0aWMgREVDTEFSRV9XT1JLKHJlY292ZXJ5X3dvcmssIHJlY292ZXJ5X3dvcmtfZnVuYyk7CisKK3N0YXRpYyB2b2lkIHJlY292ZXJ5X2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qCisJICogV2UgY2FuJ3QgZG8gb3VyIHJlY292ZXJ5IGluIHNvZnRpcnEgY29udGV4dCBhbmQgaXQncyBub3QKKwkgKiBwZXJmb3JtYW5jZSBjcml0aWNhbCwgc28gd2Ugc2NoZWR1bGUgaXQuCisJICovCisJc2NoZWR1bGVfd29yaygmcmVjb3Zlcnlfd29yayk7Cit9CisKIHZvaWQgY2N3X2RldmljZV9zY2hlZHVsZV9yZWNvdmVyeSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAppbmRleCBkNDBhMmZmLi5jYjA4MDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKQEAgLTEyNyw0ICsxMjcsNSBAQAogdm9pZCByZXRyeV9zZXRfc2NoaWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOwogdm9pZCBjbWZfcmV0cnlfY29weV9ibG9jayhzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIGludCBjbWZfcmVlbmFibGUoc3RydWN0IGNjd19kZXZpY2UgKik7CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfY21iX2VuYWJsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwppbmRleCA0OWI1OGViLi5hMTcxOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwpAQCAtMTkzLDggKzE5MywxNSBAQAogCQkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCXJldCA9IGNpb19zdGFydF9rZXkgKHNjaCwgY3BhLCBscG0sIGtleSk7Ci0JaWYgKHJldCA9PSAwKQorCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgogCQljZGV2LT5wcml2YXRlLT5pbnRwYXJtID0gaW50cGFybTsKKwkJYnJlYWs7CisJY2FzZSAtRUFDQ0VTOgorCWNhc2UgLUVOT0RFVjoKKwkJZGV2X2ZzbV9ldmVudChjZGV2LCBERVZfRVZFTlRfVkVSSUZZKTsKKwkJYnJlYWs7CisJfQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3N0YXR1cy5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfc3RhdHVzLmMKaW5kZXggZWJlMDg0OC4uNGEzODk5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfc3RhdHVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfc3RhdHVzLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAlzdHNjaCAoc2NoLT5zY2hpZCwgJnNjaC0+c2NoaWIpOwogCiAJQ0lPX01TR19FVkVOVCgwLCAiJXMoMC4leC4lMDR4KSAtIHBhdGgocykgJTAyeCBhcmUgIgotCQkgICAgICAibm90IG9wZXJhdGlvbmFsIFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAibm90IG9wZXJhdGlvbmFsIFxuIiwgX19mdW5jX18sCiAJCSAgICAgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpZC5zY2hfbm8sCiAJCSAgICAgIHNjaC0+c2NoaWIucG1jdy5wbm9tKTsKIApAQCAtMzEyLDYgKzMxMiw3IEBACiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAlzdHJ1Y3QgY2N3MSAqc2Vuc2VfY2N3OworCWludCByYzsKIAogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAKQEAgLTMzNyw3ICszMzgsMTAgQEAKIAkvKiBSZXNldCBpbnRlcm5hbCByZXRyeSBpbmRpY2F0aW9uLiAqLwogCWNkZXYtPnByaXZhdGUtPmZsYWdzLmludHJldHJ5ID0gMDsKIAotCXJldHVybiBjaW9fc3RhcnQoc2NoLCBzZW5zZV9jY3csIDB4ZmYpOworCXJjID0gY2lvX3N0YXJ0KHNjaCwgc2Vuc2VfY2N3LCAweGZmKTsKKwlpZiAocmMgPT0gLUVOT0RFViB8fCByYyA9PSAtRUFDQ0VTKQorCQlkZXZfZnNtX2V2ZW50KGNkZXYsIERFVl9FVkVOVF9WRVJJRlkpOworCXJldHVybiByYzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKaW5kZXggMDk3ZmMwOS4uMTBhYTFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKQEAgLTMyLDE3ICszMiwxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAKICNpbmNsdWRlIDxhc20vZGVidWcuaD4KQEAgLTEyMTUsOSArMTIxNSw2IEBACiAKIAlpZiAoIW5vX3VzZWQpCiAJCXJldHVybiAxOwotCWlmICghcS0+c2lnYV9zeW5jICYmICFpcnEtPmlzX3FlYnNtKQotCQkvKiB3ZSdsbCBjaGVjayBmb3IgbW9yZSBwcmltZWQgYnVmZmVycyBpbiBxZXRoX3N0b3BfcG9sbGluZyAqLwotCQlyZXR1cm4gMDsKIAlpZiAoaXJxLT5pc19xZWJzbSkgewogCQljb3VudCA9IDE7CiAJCXN0YXJ0X2J1ZiA9IHEtPmZpcnN0X3RvX2NoZWNrOwpAQCAtMTQwMiw3ICsxMzk5LDcgQEAKIAkgKiBxLT5kZXZfc3RfY2hnX2luZCBpcyB0aGUgaW5kaWNhdG9yLCBiZSBpdCBzaGFyZWQgb3Igbm90LgogCSAqIG9ubHkgY2xlYXIgaXQsIGlmIGluZGljYXRvciBpcyBub24tc2hhcmVkCiAJICovCi0JaWYgKCFzcGFyZV9pbmRfd2FzX3NldCkKKwlpZiAocS0+ZGV2X3N0X2NoZ19pbmQgIT0gJnNwYXJlX2luZGljYXRvcikKIAkJdGlxZGlvX2NsZWFyX3N1bW1hcnlfYml0KChfX3UzMiopcS0+ZGV2X3N0X2NoZ19pbmQpOwogCiAJaWYgKHEtPmh5ZHJhX2dpdmVzX291dGJvdW5kX3BjaXMpIHsKQEAgLTIyMjAsOSArMjIxNyw3OCBAQAogCXJldHVybiBjYzsKIH0KIAorc3RhdGljIGludAorcWRpb19nZXRfc3NxZF9pbmZvcm1hdGlvbihzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCAqc2NoaWQsCisJCQkgIHN0cnVjdCBxZGlvX2Noc2Nfc3NxZCAqKnNzcWRfYXJlYSkKK3sKKwlpbnQgcmVzdWx0OworCisJUURJT19EQkZfVEVYVDAoMCwgc2V0dXAsICJnZXRzc3FkIik7CisJKnNzcWRfYXJlYSA9IG1lbXBvb2xfYWxsb2MocWRpb19tZW1wb29sX3Njc3NjLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNzcWRfYXJlYSkgeworCQlRRElPX1BSSU5UX1dBUk4oIkNvdWxkIG5vdCBnZXQgbWVtb3J5IGZvciBjaHNjIG9uIHNjaCB4JXguXG4iLAorCQkJCXNjaGlkLT5zY2hfbm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkoKnNzcWRfYXJlYSktPnJlcXVlc3QgPSAoc3RydWN0IGNoc2NfaGVhZGVyKSB7CisJCS5sZW5ndGggPSAweDAwMTAsCisJCS5jb2RlCT0gMHgwMDI0LAorCX07CisJKCpzc3FkX2FyZWEpLT5maXJzdF9zY2ggPSBzY2hpZC0+c2NoX25vOworCSgqc3NxZF9hcmVhKS0+bGFzdF9zY2ggPSBzY2hpZC0+c2NoX25vOworCSgqc3NxZF9hcmVhKS0+c3NpZCA9IHNjaGlkLT5zc2lkOworCXJlc3VsdCA9IGNoc2MoKnNzcWRfYXJlYSk7CisKKwlpZiAocmVzdWx0KSB7CisJCVFESU9fUFJJTlRfV0FSTigiQ0hTQyByZXR1cm5lZCBjYyAlaSBvbiBzY2ggMC4leC4leC5cbiIsCisJCQkJcmVzdWx0LCBzY2hpZC0+c3NpZCwgc2NoaWQtPnNjaF9ubyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgoKnNzcWRfYXJlYSktPnJlc3BvbnNlLmNvZGUgIT0gUURJT19DSFNDX1JFU1BPTlNFX0NPREVfT0spIHsKKwkJUURJT19QUklOVF9XQVJOKCJDSFNDIHJlc3BvbnNlIGlzIDB4JXggb24gc2NoIDAuJXguJXguXG4iLAorCQkJCSgqc3NxZF9hcmVhKS0+cmVzcG9uc2UuY29kZSwKKwkJCQlzY2hpZC0+c3NpZCwgc2NoaWQtPnNjaF9ubyk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoISgoKnNzcWRfYXJlYSktPmZsYWdzICYgQ0hTQ19GTEFHX1FESU9fQ0FQQUJJTElUWSkgfHwKKwkgICAgISgoKnNzcWRfYXJlYSktPmZsYWdzICYgQ0hTQ19GTEFHX1ZBTElESVRZKSB8fAorCSAgICAoKCpzc3FkX2FyZWEpLT5zY2ggIT0gc2NoaWQtPnNjaF9ubykpIHsKKwkJUURJT19QUklOVF9XQVJOKCJodWg/IHByb2JsZW1zIGNoZWNraW5nIG91dCBzY2ggMC4leC4leC4uLiAiIFwKKwkJCQkidXNpbmcgYWxsIFNJR0FzLlxuIiwKKwkJCQlzY2hpZC0+c3NpZCwgc2NoaWQtPnNjaF9ubyk7CisJCWdvdG8gb3V0OworCX0KKwlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50CitxZGlvX2dldF9zc3FkX3BjdChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwlzdHJ1Y3QgcWRpb19jaHNjX3NzcWQgKnNzcWRfYXJlYTsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZDsKKwljaGFyIGRiZl90ZXh0WzE1XTsKKwlpbnQgcmM7CisJaW50IHBjdCA9IDA7CisKKwlRRElPX0RCRl9URVhUMCgwLCBzZXR1cCwgImdldHBjdCIpOworCXNjaGlkID0gY2N3X2RldmljZV9nZXRfc3ViY2hhbm5lbF9pZChjZGV2KTsKKwlyYyA9IHFkaW9fZ2V0X3NzcWRfaW5mb3JtYXRpb24oJnNjaGlkLCAmc3NxZF9hcmVhKTsKKwlpZiAoIXJjKQorCQlwY3QgPSAoaW50KXNzcWRfYXJlYS0+cGN0OworCWlmIChyYyAhPSAtRU5PTUVNKQorCQltZW1wb29sX2ZyZWUoc3NxZF9hcmVhLCBxZGlvX21lbXBvb2xfc2Nzc2MpOworCXNwcmludGYoZGJmX3RleHQsICJwY3Q6ICVkIiwgcGN0KTsKKwlRRElPX0RCRl9URVhUMigwLCBzZXR1cCwgZGJmX3RleHQpOworCXJldHVybiBwY3Q7Cit9CitFWFBPUlRfU1lNQk9MKHFkaW9fZ2V0X3NzcWRfcGN0KTsKKwogc3RhdGljIHZvaWQKLXFkaW9fY2hlY2tfc3ViY2hhbm5lbF9xZWJzbShzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsIHVuc2lnbmVkIGNoYXIgcWRpb2FjLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgdG9rZW4pCitxZGlvX2NoZWNrX3N1YmNoYW5uZWxfcWVic20oc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCB1bnNpZ25lZCBsb25nIHRva2VuKQogewogCXN0cnVjdCBxZGlvX3EgKnE7CiAJaW50IGk7CkBAIC0yMjMwLDcgKzIyOTYsNyBAQAogCWNoYXIgZGJmX3RleHRbMTVdOwogCiAJLypjaGVjayBpZiBRRUJTTSBpcyBkaXNhYmxlZCAqLwotCWlmICghKGlycV9wdHItPmlzX3FlYnNtKSB8fCAhKHFkaW9hYyAmIDB4MDEpKSB7CisJaWYgKCEoaXJxX3B0ci0+aXNfcWVic20pIHx8ICEoaXJxX3B0ci0+cWRpb2FjICYgMHgwMSkpIHsKIAkJaXJxX3B0ci0+aXNfcWVic20gID0gMDsKIAkJaXJxX3B0ci0+c2NoX3Rva2VuID0gMDsKIAkJaXJxX3B0ci0+cWliLnJmbGFncyAmPSB+UUlCX1JGTEFHU19FTkFCTEVfUUVCU007CkBAIC0yMjU5LDEwMiArMjMyNSwyNyBAQAogfQogCiBzdGF0aWMgdm9pZAotcWRpb19nZXRfc3NxZF9pbmZvcm1hdGlvbihzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIpCitxZGlvX2dldF9zc3FkX3NpZ2Eoc3RydWN0IHFkaW9faXJxICppcnFfcHRyKQogewotCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgY2hhciBxZGlvYWM7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7Ci0JCXUxNiByZXNlcnZlZDE6MTA7Ci0JCXUxNiBzc2lkOjI7Ci0JCXUxNiBmbXQ6NDsKLQkJdTE2IGZpcnN0X3NjaDsKLQkJdTE2IHJlc2VydmVkMjsKLQkJdTE2IGxhc3Rfc2NoOwotCQl1MzIgcmVzZXJ2ZWQzOwotCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7Ci0JCXUzMiByZXNlcnZlZDQ7Ci0JCXU4ICBmbGFnczsKLQkJdTggIHJlc2VydmVkNTsKLQkJdTE2IHNjaDsKLQkJdTggIHFmbXQ7Ci0JCXU4ICBwYXJtOwotCQl1OCAgcWRpb2FjMTsKLQkJdTggIHNjaF9jbGFzczsKLQkJdTggIHJlc2VydmVkNzsKLQkJdTggIGljbnQ7Ci0JCXU4ICByZXNlcnZlZDg7Ci0JCXU4ICBvY250OwotCQl1OCByZXNlcnZlZDk7Ci0JCXU4IG1iY2NudDsKLQkJdTE2IHFkaW9hYzI7Ci0JCXU2NCBzY2hfdG9rZW47Ci0JfSAqc3NxZF9hcmVhOworCWludCByYzsKKwlzdHJ1Y3QgcWRpb19jaHNjX3NzcWQgKnNzcWRfYXJlYTsKIAogCVFESU9fREJGX1RFWFQwKDAsc2V0dXAsImdldHNzcWQiKTsKLQlxZGlvYWMgPSAwOwotCXNzcWRfYXJlYSA9IG1lbXBvb2xfYWxsb2MocWRpb19tZW1wb29sX3Njc3NjLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNzcWRfYXJlYSkgewotCSAgICAgICAgUURJT19QUklOVF9XQVJOKCJDb3VsZCBub3QgZ2V0IG1lbW9yeSBmb3IgY2hzYy4gVXNpbmcgYWxsICIgXAotCQkJCSJTSUdBcyBmb3Igc2NoIHgleC5cbiIsIGlycV9wdHItPnNjaGlkLnNjaF9ubyk7CisJaXJxX3B0ci0+cWRpb2FjID0gMDsKKwlyYyA9IHFkaW9fZ2V0X3NzcWRfaW5mb3JtYXRpb24oJmlycV9wdHItPnNjaGlkLCAmc3NxZF9hcmVhKTsKKwlpZiAocmMpIHsKKwkJUURJT19QUklOVF9XQVJOKCJ1c2luZyBhbGwgU0lHQXMgZm9yIHNjaCB4JXgubiIsCisJCQlpcnFfcHRyLT5zY2hpZC5zY2hfbm8pOwogCQlpcnFfcHRyLT5xZGlvYWMgPSBDSFNDX0ZMQUdfU0lHQV9JTlBVVF9ORUNFU1NBUlkgfAogCQkJCSAgQ0hTQ19GTEFHX1NJR0FfT1VUUFVUX05FQ0VTU0FSWSB8CiAJCQkJICBDSFNDX0ZMQUdfU0lHQV9TWU5DX05FQ0VTU0FSWTsgLyogYWxsIGZsYWdzIHNldCAqLwogCQlpcnFfcHRyLT5pc19xZWJzbSA9IDA7Ci0JCWlycV9wdHItPnNjaF90b2tlbiA9IDA7Ci0JCWlycV9wdHItPnFpYi5yZmxhZ3MgJj0gflFJQl9SRkxBR1NfRU5BQkxFX1FFQlNNOwotCQlyZXR1cm47Ci0JfQorCX0gZWxzZQorCQlpcnFfcHRyLT5xZGlvYWMgPSBzc3FkX2FyZWEtPnFkaW9hYzE7CiAKLQlzc3FkX2FyZWEtPnJlcXVlc3QgPSAoc3RydWN0IGNoc2NfaGVhZGVyKSB7Ci0JCS5sZW5ndGggPSAweDAwMTAsCi0JCS5jb2RlICAgPSAweDAwMjQsCi0JfTsKLQlzc3FkX2FyZWEtPmZpcnN0X3NjaCA9IGlycV9wdHItPnNjaGlkLnNjaF9ubzsKLQlzc3FkX2FyZWEtPmxhc3Rfc2NoID0gaXJxX3B0ci0+c2NoaWQuc2NoX25vOwotCXNzcWRfYXJlYS0+c3NpZCA9IGlycV9wdHItPnNjaGlkLnNzaWQ7Ci0JcmVzdWx0ID0gY2hzYyhzc3FkX2FyZWEpOwotCi0JaWYgKHJlc3VsdCkgewotCQlRRElPX1BSSU5UX1dBUk4oIkNIU0MgcmV0dXJuZWQgY2MgJWkuIFVzaW5nIGFsbCAiIFwKLQkJCQkiU0lHQXMgZm9yIHNjaCAwLiV4LiV4LlxuIiwgcmVzdWx0LAotCQkJCWlycV9wdHItPnNjaGlkLnNzaWQsIGlycV9wdHItPnNjaGlkLnNjaF9ubyk7Ci0JCXFkaW9hYyA9IENIU0NfRkxBR19TSUdBX0lOUFVUX05FQ0VTU0FSWSB8Ci0JCQlDSFNDX0ZMQUdfU0lHQV9PVVRQVVRfTkVDRVNTQVJZIHwKLQkJCUNIU0NfRkxBR19TSUdBX1NZTkNfTkVDRVNTQVJZOyAvKiBhbGwgZmxhZ3Mgc2V0ICovCi0JCWlycV9wdHItPmlzX3FlYnNtICA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChzc3FkX2FyZWEtPnJlc3BvbnNlLmNvZGUgIT0gUURJT19DSFNDX1JFU1BPTlNFX0NPREVfT0spIHsKLQkJUURJT19QUklOVF9XQVJOKCJyZXNwb25zZSB1cG9uIGNoZWNraW5nIFNJR0EgbmVlZHMgIiBcCi0JCQkJImlzIDB4JXguIFVzaW5nIGFsbCBTSUdBcyBmb3Igc2NoIDAuJXguJXguXG4iLAotCQkJCXNzcWRfYXJlYS0+cmVzcG9uc2UuY29kZSwKLQkJCQlpcnFfcHRyLT5zY2hpZC5zc2lkLCBpcnFfcHRyLT5zY2hpZC5zY2hfbm8pOwotCQlxZGlvYWMgPSBDSFNDX0ZMQUdfU0lHQV9JTlBVVF9ORUNFU1NBUlkgfAotCQkJQ0hTQ19GTEFHX1NJR0FfT1VUUFVUX05FQ0VTU0FSWSB8Ci0JCQlDSFNDX0ZMQUdfU0lHQV9TWU5DX05FQ0VTU0FSWTsgLyogYWxsIGZsYWdzIHNldCAqLwotCQlpcnFfcHRyLT5pc19xZWJzbSAgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKCEoc3NxZF9hcmVhLT5mbGFncyAmIENIU0NfRkxBR19RRElPX0NBUEFCSUxJVFkpIHx8Ci0JICAgICEoc3NxZF9hcmVhLT5mbGFncyAmIENIU0NfRkxBR19WQUxJRElUWSkgfHwKLQkgICAgKHNzcWRfYXJlYS0+c2NoICE9IGlycV9wdHItPnNjaGlkLnNjaF9ubykpIHsKLQkJUURJT19QUklOVF9XQVJOKCJodWg/IHByb2JsZW1zIGNoZWNraW5nIG91dCBzY2ggMC4leC4leC4uLiAiIFwKLQkJCQkidXNpbmcgYWxsIFNJR0FzLlxuIiwKLQkJCQlpcnFfcHRyLT5zY2hpZC5zc2lkLCBpcnFfcHRyLT5zY2hpZC5zY2hfbm8pOwotCQlxZGlvYWMgPSBDSFNDX0ZMQUdfU0lHQV9JTlBVVF9ORUNFU1NBUlkgfAotCQkJQ0hTQ19GTEFHX1NJR0FfT1VUUFVUX05FQ0VTU0FSWSB8Ci0JCQlDSFNDX0ZMQUdfU0lHQV9TWU5DX05FQ0VTU0FSWTsgLyogd29yc3QgY2FzZSAqLwotCQlpcnFfcHRyLT5pc19xZWJzbSAgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0JcWRpb2FjID0gc3NxZF9hcmVhLT5xZGlvYWMxOwotb3V0OgotCXFkaW9fY2hlY2tfc3ViY2hhbm5lbF9xZWJzbShpcnFfcHRyLCBxZGlvYWMsCi0JCQkJICAgIHNzcWRfYXJlYS0+c2NoX3Rva2VuKTsKLQltZW1wb29sX2ZyZWUoc3NxZF9hcmVhLCBxZGlvX21lbXBvb2xfc2Nzc2MpOwotCWlycV9wdHItPnFkaW9hYyA9IHFkaW9hYzsKKwlxZGlvX2NoZWNrX3N1YmNoYW5uZWxfcWVic20oaXJxX3B0ciwgc3NxZF9hcmVhLT5zY2hfdG9rZW4pOworCWlmIChyYyAhPSAtRU5PTUVNKQorCQltZW1wb29sX2ZyZWUoc3NxZF9hcmVhLCBxZGlvX21lbXBvb2xfc2Nzc2MpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBAIC0zMjMwLDcgKzMyMjEsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlxZGlvX2dldF9zc3FkX2luZm9ybWF0aW9uKGlycV9wdHIpOworCXFkaW9fZ2V0X3NzcWRfc2lnYShpcnFfcHRyKTsKIAkvKiBpZiB0aGlzIGdldHMgc2V0IG9uY2UsIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgVk0gYW5kIGNhbiBvbWl0IFNWU2VzICovCiAJaWYgKGlycV9wdHItPnFkaW9hYyZDSFNDX0ZMQUdfU0lHQV9TWU5DX05FQ0VTU0FSWSkKIAkJb21pdF9zdnM9MTsKQEAgLTMzMzIsMTMgKzMzMjMsNyBAQAogCQl9CiAJfQogCi0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLAotCQkJCQkgKChpcnFfcHRyLT5zdGF0ZSA9PQotCQkJCQkgIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpIHx8Ci0JCQkJCSAgKGlycV9wdHItPnN0YXRlID09Ci0JCQkJCSAgIFFESU9fSVJRX1NUQVRFX0VSUikpLAotCQkJCQkgUURJT19BQ1RJVkFURV9USU1FT1VUKTsKLQorCW1zbGVlcChRRElPX0FDVElWQVRFX1RJTUVPVVQpOwogCXN3aXRjaCAoaXJxX3B0ci0+c3RhdGUpIHsKIAljYXNlIFFESU9fSVJRX1NUQVRFX1NUT1BQRUQ6CiAJY2FzZSBRRElPX0lSUV9TVEFURV9FUlI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDM3ODcwZTQuLmMzZGY2YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC01NywxMCArNTcsMTAgQEAKIAkJCQkJICAgIG9mIHRoZSBxdWV1ZSB0byAwICovCiAKICNkZWZpbmUgUURJT19FU1RBQkxJU0hfVElNRU9VVCAoMSpIWikKLSNkZWZpbmUgUURJT19BQ1RJVkFURV9USU1FT1VUICg1KkhaKQogI2RlZmluZSBRRElPX0NMRUFOVVBfQ0xFQVJfVElNRU9VVCAoMjAqSFopCiAjZGVmaW5lIFFESU9fQ0xFQU5VUF9IQUxUX1RJTUVPVVQgKDEwKkhaKQogI2RlZmluZSBRRElPX0ZPUkNFX0NIRUNLX1RJTUVPVVQgKDEwKkhaKQorI2RlZmluZSBRRElPX0FDVElWQVRFX1RJTUVPVVQgKDUpIC8qIDUgbXMgKi8KIAogZW51bSBxZGlvX2lycV9zdGF0ZXMgewogCVFESU9fSVJRX1NUQVRFX0lOQUNUSVZFLApAQCAtNDA2LDYgKzQwNiwzNCBAQAogI2RlZmluZSBDSFNDX0ZMQUdfU0lHQV9TWU5DX0RPTkVfT05fVEhJTklOVFMgMHgwOAogI2RlZmluZSBDSFNDX0ZMQUdfU0lHQV9TWU5DX0RPTkVfT05fT1VUQl9QQ0lTIDB4MDQKIAorc3RydWN0IHFkaW9fY2hzY19zc3FkIHsKKwlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDsKKwl1MTYgcmVzZXJ2ZWQxOjEwOworCXUxNiBzc2lkOjI7CisJdTE2IGZtdDo0OworCXUxNiBmaXJzdF9zY2g7CisJdTE2IHJlc2VydmVkMjsKKwl1MTYgbGFzdF9zY2g7CisJdTMyIHJlc2VydmVkMzsKKwlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7CisJdTMyIHJlc2VydmVkNDsKKwl1OCAgZmxhZ3M7CisJdTggIHJlc2VydmVkNTsKKwl1MTYgc2NoOworCXU4ICBxZm10OworCXU4ICBwYXJtOworCXU4ICBxZGlvYWMxOworCXU4ICBzY2hfY2xhc3M7CisJdTggIHBjdDsKKwl1OCAgaWNudDsKKwl1OCAgcmVzZXJ2ZWQ3OworCXU4ICBvY250OworCXU4ICByZXNlcnZlZDg7CisJdTggIG1iY2NudDsKKwl1MTYgcWRpb2FjMjsKKwl1NjQgc2NoX3Rva2VuOworfTsKKwogc3RydWN0IHFkaW9fcGVyZl9zdGF0cyB7CiAjaWZkZWYgQ09ORklHXzY0QklUCiAJYXRvbWljNjRfdCB0bF9ydW5zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKaW5kZXggZDBjNmZkMy4uYTFhYjNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCkBAIC00NSw3ICs0NSw3IEBACiBzdGF0aWMgdm9pZCBhcF9wb2xsX3RocmVhZF9zdG9wKHZvaWQpOwogc3RhdGljIHZvaWQgYXBfcmVxdWVzdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogCi0vKioKKy8qCiAgKiBNb2R1bGUgZGVzY3JpcHRpb24uCiAgKi8KIE1PRFVMRV9BVVRIT1IoIklCTSBDb3Jwb3JhdGlvbiIpOwpAQCAtNTMsNyArNTMsNyBAQAogCQkgICAiQ29weXJpZ2h0IDIwMDYgSUJNIENvcnBvcmF0aW9uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qKgorLyoKICAqIE1vZHVsZSBwYXJhbWV0ZXIKICAqLwogaW50IGFwX2RvbWFpbl9pbmRleCA9IC0xOwkvKiBBZGp1bmN0IFByb2Nlc3NvciBEb21haW4gSW5kZXggKi8KQEAgLTY5LDcgKzY5LDcgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXBfZGV2aWNlX2xvY2spOwogc3RhdGljIExJU1RfSEVBRChhcF9kZXZpY2VfbGlzdCk7CiAKLS8qKgorLyoKICAqIFdvcmtxdWV1ZSAmIHRpbWVyIGZvciBidXMgcmVzY2FuLgogICovCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmFwX3dvcmtfcXVldWU7CkBAIC03Nyw3ICs3Nyw3IEBACiBzdGF0aWMgaW50IGFwX2NvbmZpZ190aW1lID0gQVBfQ09ORklHX1RJTUU7CiBzdGF0aWMgREVDTEFSRV9XT1JLKGFwX2NvbmZpZ193b3JrLCBhcF9zY2FuX2J1cyk7CiAKLS8qKgorLyoKICAqIFRhc2tsZXQgJiB0aW1lciBmb3IgQVAgcmVxdWVzdCBwb2xsaW5nLgogICovCiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgYXBfcG9sbF90aW1lciA9IFRJTUVSX0lOSVRJQUxJWkVSKGFwX3BvbGxfdGltZW91dCwwLDApOwpAQCAtODgsOSArODgsOSBAQAogc3RhdGljIERFRklORV9NVVRFWChhcF9wb2xsX3RocmVhZF9tdXRleCk7CiAKIC8qKgotICogVGVzdCBpZiBhcCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS4KKyAqIGFwX2ludHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS4KICAqCi0gKiBSZXR1cm5zIDAgaWYgdGhlIGFwIGluc3RydWN0aW9ucyBhcmUgaW5zdGFsbGVkLgorICogUmV0dXJucyAwIGlmIHRoZSBBUCBpbnN0cnVjdGlvbnMgYXJlIGluc3RhbGxlZC4KICAqLwogc3RhdGljIGlubGluZSBpbnQgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKQogewpAQCAtMTA4LDEyICsxMDgsMTIgQEAKIH0KIAogLyoqCi0gKiBUZXN0IGFkanVuY3QgcHJvY2Vzc29yIHF1ZXVlLgotICogQHFpZDogdGhlIGFwIHF1ZXVlIG51bWJlcgotICogQHF1ZXVlX2RlcHRoOiBwb2ludGVyIHRvIHF1ZXVlIGRlcHRoIHZhbHVlCi0gKiBAZGV2aWNlX3R5cGU6IHBvaW50ZXIgdG8gZGV2aWNlIHR5cGUgdmFsdWUKKyAqIGFwX3Rlc3RfcXVldWUoKTogVGVzdCBhZGp1bmN0IHByb2Nlc3NvciBxdWV1ZS4KKyAqIEBxaWQ6IFRoZSBBUCBxdWV1ZSBudW1iZXIKKyAqIEBxdWV1ZV9kZXB0aDogUG9pbnRlciB0byBxdWV1ZSBkZXB0aCB2YWx1ZQorICogQGRldmljZV90eXBlOiBQb2ludGVyIHRvIGRldmljZSB0eXBlIHZhbHVlCiAgKgotICogUmV0dXJucyBhcCBxdWV1ZSBzdGF0dXMgc3RydWN0dXJlLgorICogUmV0dXJucyBBUCBxdWV1ZSBzdGF0dXMgc3RydWN0dXJlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMKIGFwX3Rlc3RfcXVldWUoYXBfcWlkX3QgcWlkLCBpbnQgKnF1ZXVlX2RlcHRoLCBpbnQgKmRldmljZV90eXBlKQpAQCAtMTMwLDEwICsxMzAsMTAgQEAKIH0KIAogLyoqCi0gKiBSZXNldCBhZGp1bmN0IHByb2Nlc3NvciBxdWV1ZS4KLSAqIEBxaWQ6IHRoZSBhcCBxdWV1ZSBudW1iZXIKKyAqIGFwX3Jlc2V0X3F1ZXVlKCk6IFJlc2V0IGFkanVuY3QgcHJvY2Vzc29yIHF1ZXVlLgorICogQHFpZDogVGhlIEFQIHF1ZXVlIG51bWJlcgogICoKLSAqIFJldHVybnMgYXAgcXVldWUgc3RhdHVzIHN0cnVjdHVyZS4KKyAqIFJldHVybnMgQVAgcXVldWUgc3RhdHVzIHN0cnVjdHVyZS4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIGFwX3Jlc2V0X3F1ZXVlKGFwX3FpZF90IHFpZCkKIHsKQEAgLTE0OCwxNiArMTQ4LDE0IEBACiB9CiAKIC8qKgotICogU2VuZCBtZXNzYWdlIHRvIGFkanVuY3QgcHJvY2Vzc29yIHF1ZXVlLgotICogQHFpZDogdGhlIGFwIHF1ZXVlIG51bWJlcgotICogQHBzbWlkOiB0aGUgcHJvZ3JhbSBzdXBwbGllZCBtZXNzYWdlIGlkZW50aWZpZXIKLSAqIEBtc2c6IHRoZSBtZXNzYWdlIHRleHQKLSAqIEBsZW5ndGg6IHRoZSBtZXNzYWdlIGxlbmd0aAorICogX19hcF9zZW5kKCk6IFNlbmQgbWVzc2FnZSB0byBhZGp1bmN0IHByb2Nlc3NvciBxdWV1ZS4KKyAqIEBxaWQ6IFRoZSBBUCBxdWV1ZSBudW1iZXIKKyAqIEBwc21pZDogVGhlIHByb2dyYW0gc3VwcGxpZWQgbWVzc2FnZSBpZGVudGlmaWVyCisgKiBAbXNnOiBUaGUgbWVzc2FnZSB0ZXh0CisgKiBAbGVuZ3RoOiBUaGUgbWVzc2FnZSBsZW5ndGgKICAqCi0gKiBSZXR1cm5zIGFwIHF1ZXVlIHN0YXR1cyBzdHJ1Y3R1cmUuCi0gKgorICogUmV0dXJucyBBUCBxdWV1ZSBzdGF0dXMgc3RydWN0dXJlLgogICogQ29uZGl0aW9uIGNvZGUgMSBvbiBOUUFQIGNhbid0IGhhcHBlbiBiZWNhdXNlIHRoZSBMIGJpdCBpcyAxLgotICoKICAqIENvbmRpdGlvbiBjb2RlIDIgb24gTlFBUCBhbHNvIG1lYW5zIHRoZSBzZW5kIGlzIGluY29tcGxldGUsCiAgKiBiZWNhdXNlIGEgc2VnbWVudCBib3VuZGFyeSB3YXMgcmVhY2hlZC4gVGhlIE5RQVAgaXMgcmVwZWF0ZWQuCiAgKi8KQEAgLTE5OCwyMyArMTk2LDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGFwX3NlbmQpOwogCi0vKgotICogUmVjZWl2ZSBtZXNzYWdlIGZyb20gYWRqdW5jdCBwcm9jZXNzb3IgcXVldWUuCi0gKiBAcWlkOiB0aGUgYXAgcXVldWUgbnVtYmVyCi0gKiBAcHNtaWQ6IHBvaW50ZXIgdG8gcHJvZ3JhbSBzdXBwbGllZCBtZXNzYWdlIGlkZW50aWZpZXIKLSAqIEBtc2c6IHRoZSBtZXNzYWdlIHRleHQKLSAqIEBsZW5ndGg6IHRoZSBtZXNzYWdlIGxlbmd0aAorLyoqCisgKiBfX2FwX3JlY3YoKTogUmVjZWl2ZSBtZXNzYWdlIGZyb20gYWRqdW5jdCBwcm9jZXNzb3IgcXVldWUuCisgKiBAcWlkOiBUaGUgQVAgcXVldWUgbnVtYmVyCisgKiBAcHNtaWQ6IFBvaW50ZXIgdG8gcHJvZ3JhbSBzdXBwbGllZCBtZXNzYWdlIGlkZW50aWZpZXIKKyAqIEBtc2c6IFRoZSBtZXNzYWdlIHRleHQKKyAqIEBsZW5ndGg6IFRoZSBtZXNzYWdlIGxlbmd0aAogICoKLSAqIFJldHVybnMgYXAgcXVldWUgc3RhdHVzIHN0cnVjdHVyZS4KLSAqCisgKiBSZXR1cm5zIEFQIHF1ZXVlIHN0YXR1cyBzdHJ1Y3R1cmUuCiAgKiBDb25kaXRpb24gY29kZSAxIG9uIERRQVAgbWVhbnMgdGhlIHJlY2VpdmUgaGFzIHRha2VuIHBsYWNlCiAgKiBidXQgb25seSBwYXJ0aWFsbHkuCVRoZSByZXNwb25zZSBpcyBpbmNvbXBsZXRlLCBoZW5jZSB0aGUKICAqIERRQVAgaXMgcmVwZWF0ZWQuCi0gKgogICogQ29uZGl0aW9uIGNvZGUgMiBvbiBEUUFQIGFsc28gbWVhbnMgdGhlIHJlY2VpdmUgaXMgaW5jb21wbGV0ZSwKICAqIHRoaXMgdGltZSBiZWNhdXNlIGEgc2VnbWVudCBib3VuZGFyeSB3YXMgcmVhY2hlZC4gQWdhaW4sIHRoZQogICogRFFBUCBpcyByZXBlYXRlZC4KLSAqCiAgKiBOb3RlIHRoYXQgZ3ByMiBpcyB1c2VkIGJ5IHRoZSBEUUFQIGluc3RydWN0aW9uIHRvIGtlZXAgdHJhY2sgb2YKICAqIGFueSAncmVzaWR1YWwnIGxlbmd0aCwgaW4gY2FzZSB0aGUgaW5zdHJ1Y3Rpb24gZ2V0cyBpbnRlcnJ1cHRlZC4KICAqIEhlbmNlIGl0IGdldHMgemVyb2VkIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24uCkBAIC0yNjMsMTEgKzI1OCwxMiBAQAogRVhQT1JUX1NZTUJPTChhcF9yZWN2KTsKIAogLyoqCi0gKiBDaGVjayBpZiBhbiBBUCBxdWV1ZSBpcyBhdmFpbGFibGUuIFRoZSB0ZXN0IGlzIHJlcGVhdGVkIGZvcgotICogQVBfTUFYX1JFU0VUIHRpbWVzLgotICogQHFpZDogdGhlIGFwIHF1ZXVlIG51bWJlcgotICogQHF1ZXVlX2RlcHRoOiBwb2ludGVyIHRvIHF1ZXVlIGRlcHRoIHZhbHVlCi0gKiBAZGV2aWNlX3R5cGU6IHBvaW50ZXIgdG8gZGV2aWNlIHR5cGUgdmFsdWUKKyAqIGFwX3F1ZXJ5X3F1ZXVlKCk6IENoZWNrIGlmIGFuIEFQIHF1ZXVlIGlzIGF2YWlsYWJsZS4KKyAqIEBxaWQ6IFRoZSBBUCBxdWV1ZSBudW1iZXIKKyAqIEBxdWV1ZV9kZXB0aDogUG9pbnRlciB0byBxdWV1ZSBkZXB0aCB2YWx1ZQorICogQGRldmljZV90eXBlOiBQb2ludGVyIHRvIGRldmljZSB0eXBlIHZhbHVlCisgKgorICogVGhlIHRlc3QgaXMgcmVwZWF0ZWQgZm9yIEFQX01BWF9SRVNFVCB0aW1lcy4KICAqLwogc3RhdGljIGludCBhcF9xdWVyeV9xdWV1ZShhcF9xaWRfdCBxaWQsIGludCAqcXVldWVfZGVwdGgsIGludCAqZGV2aWNlX3R5cGUpCiB7CkBAIC0zMDgsOCArMzA0LDEwIEBACiB9CiAKIC8qKgorICogYXBfaW5pdF9xdWV1ZSgpOiBSZXNldCBhbiBBUCBxdWV1ZS4KKyAqIEBxaWQ6IFRoZSBBUCBxdWV1ZSBudW1iZXIKKyAqCiAgKiBSZXNldCBhbiBBUCBxdWV1ZSBhbmQgd2FpdCBmb3IgaXQgdG8gYmVjb21lIGF2YWlsYWJsZSBhZ2Fpbi4KLSAqIEBxaWQ6IHRoZSBhcCBxdWV1ZSBudW1iZXIKICAqLwogc3RhdGljIGludCBhcF9pbml0X3F1ZXVlKGFwX3FpZF90IHFpZCkKIHsKQEAgLTM0Niw3ICszNDQsMTAgQEAKIH0KIAogLyoqCi0gKiBBcm0gcmVxdWVzdCB0aW1lb3V0IGlmIGEgQVAgZGV2aWNlIHdhcyBpZGxlIGFuZCBhIG5ldyByZXF1ZXN0IGlzIHN1Ym1pdHRlZC4KKyAqIGFwX2luY3JlYXNlX3F1ZXVlX2NvdW50KCk6IEFybSByZXF1ZXN0IHRpbWVvdXQuCisgKiBAYXBfZGV2OiBQb2ludGVyIHRvIGFuIEFQIGRldmljZS4KKyAqCisgKiBBcm0gcmVxdWVzdCB0aW1lb3V0IGlmIGFuIEFQIGRldmljZSB3YXMgaWRsZSBhbmQgYSBuZXcgcmVxdWVzdCBpcyBzdWJtaXR0ZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGFwX2luY3JlYXNlX3F1ZXVlX2NvdW50KHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKIHsKQEAgLTM2MCw3ICszNjEsMTAgQEAKIH0KIAogLyoqCi0gKiBBUCBkZXZpY2UgaXMgc3RpbGwgYWxpdmUsIHJlLXNjaGVkdWxlIHJlcXVlc3QgdGltZW91dCBpZiB0aGVyZSBhcmUgc3RpbGwKKyAqIGFwX2RlY3JlYXNlX3F1ZXVlX2NvdW50KCk6IERlY3JlYXNlIHF1ZXVlIGNvdW50LgorICogQGFwX2RldjogUG9pbnRlciB0byBhbiBBUCBkZXZpY2UuCisgKgorICogSWYgQVAgZGV2aWNlIGlzIHN0aWxsIGFsaXZlLCByZS1zY2hlZHVsZSByZXF1ZXN0IHRpbWVvdXQgaWYgdGhlcmUgYXJlIHN0aWxsCiAgKiBwZW5kaW5nIHJlcXVlc3RzLgogICovCiBzdGF0aWMgdm9pZCBhcF9kZWNyZWFzZV9xdWV1ZV9jb3VudChzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpCkBAIC0zNzEsNyArMzc1LDcgQEAKIAlpZiAoYXBfZGV2LT5xdWV1ZV9jb3VudCA+IDApCiAJCW1vZF90aW1lcigmYXBfZGV2LT50aW1lb3V0LCBqaWZmaWVzICsgdGltZW91dCk7CiAJZWxzZQotCQkvKioKKwkJLyoKIAkJICogVGhlIHRpbWVvdXQgdGltZXIgc2hvdWxkIHRvIGJlIGRpc2FibGVkIG5vdyAtIHNpbmNlCiAJCSAqIGRlbF90aW1lcl9zeW5jKCkgaXMgdmVyeSBleHBlbnNpdmUsIHdlIGp1c3QgdGVsbCB2aWEgdGhlCiAJCSAqIHJlc2V0IGZsYWcgdG8gaWdub3JlIHRoZSBwZW5kaW5nIHRpbWVvdXQgdGltZXIuCkBAIC0zNzksNyArMzgzLDcgQEAKIAkJYXBfZGV2LT5yZXNldCA9IEFQX1JFU0VUX0lHTk9SRTsKIH0KIAotLyoqCisvKgogICogQVAgZGV2aWNlIHJlbGF0ZWQgYXR0cmlidXRlcy4KICAqLwogc3RhdGljIHNzaXplX3QgYXBfaHd0eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtNDMzLDYgKzQzNywxMCBAQAogfTsKIAogLyoqCisgKiBhcF9idXNfbWF0Y2goKQorICogQGRldjogUG9pbnRlciB0byBkZXZpY2UKKyAqIEBkcnY6IFBvaW50ZXIgdG8gZGV2aWNlX2RyaXZlcgorICoKICAqIEFQIGJ1cyBkcml2ZXIgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLgogICovCiBzdGF0aWMgaW50IGFwX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCkBAIC00NDEsNyArNDQ5LDcgQEAKIAlzdHJ1Y3QgYXBfZHJpdmVyICphcF9kcnYgPSB0b19hcF9kcnYoZHJ2KTsKIAlzdHJ1Y3QgYXBfZGV2aWNlX2lkICppZDsKIAotCS8qKgorCS8qCiAJICogQ29tcGFyZSBkZXZpY2UgdHlwZSBvZiB0aGUgZGV2aWNlIHdpdGggdGhlIGxpc3Qgb2YKIAkgKiBzdXBwb3J0ZWQgdHlwZXMgb2YgdGhlIGRldmljZV9kcml2ZXIuCiAJICovCkBAIC00NTUsOCArNDYzLDEyIEBACiB9CiAKIC8qKgotICogdWV2ZW50IGZ1bmN0aW9uIGZvciBBUCBkZXZpY2VzLiBJdCBzZXRzIHVwIGEgc2luZ2xlIGVudmlyb25tZW50Ci0gKiB2YXJpYWJsZSBERVZfVFlQRSB3aGljaCBjb250YWlucyB0aGUgaGFyZHdhcmUgZGV2aWNlIHR5cGUuCisgKiBhcF91ZXZlbnQoKTogVWV2ZW50IGZ1bmN0aW9uIGZvciBBUCBkZXZpY2VzLgorICogQGRldjogUG9pbnRlciB0byBkZXZpY2UKKyAqIEBlbnY6IFBvaW50ZXIgdG8ga29ial91ZXZlbnRfZW52CisgKgorICogSXQgc2V0cyB1cCBhIHNpbmdsZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBERVZfVFlQRSB3aGljaCBjb250YWlucyB0aGUKKyAqIGhhcmR3YXJlIGRldmljZSB0eXBlLgogICovCiBzdGF0aWMgaW50IGFwX3VldmVudCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CkBAIC00OTAsMTYgKzUwMiwyMCBAQAogCWludCByYzsKIAogCWFwX2Rldi0+ZHJ2ID0gYXBfZHJ2OwotCXNwaW5fbG9ja19iaCgmYXBfZGV2aWNlX2xvY2spOwotCWxpc3RfYWRkKCZhcF9kZXYtPmxpc3QsICZhcF9kZXZpY2VfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFwX2RldmljZV9sb2NrKTsKIAlyYyA9IGFwX2Rydi0+cHJvYmUgPyBhcF9kcnYtPnByb2JlKGFwX2RldikgOiAtRU5PREVWOworCWlmICghcmMpIHsKKwkJc3Bpbl9sb2NrX2JoKCZhcF9kZXZpY2VfbG9jayk7CisJCWxpc3RfYWRkKCZhcF9kZXYtPmxpc3QsICZhcF9kZXZpY2VfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXZpY2VfbG9jayk7CisJfQogCXJldHVybiByYzsKIH0KIAogLyoqCisgKiBfX2FwX2ZsdXNoX3F1ZXVlKCk6IEZsdXNoIHJlcXVlc3RzLgorICogQGFwX2RldjogUG9pbnRlciB0byB0aGUgQVAgZGV2aWNlCisgKgogICogRmx1c2ggYWxsIHJlcXVlc3RzIGZyb20gdGhlIHJlcXVlc3QvcGVuZGluZyBxdWV1ZSBvZiBhbiBBUCBkZXZpY2UuCi0gKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UuCiAgKi8KIHN0YXRpYyB2b2lkIF9fYXBfZmx1c2hfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2KQogewpAQCAtNTMyLDExICs1NDgsMTEgQEAKIAogCWFwX2ZsdXNoX3F1ZXVlKGFwX2Rldik7CiAJZGVsX3RpbWVyX3N5bmMoJmFwX2Rldi0+dGltZW91dCk7Ci0JaWYgKGFwX2Rydi0+cmVtb3ZlKQotCQlhcF9kcnYtPnJlbW92ZShhcF9kZXYpOwogCXNwaW5fbG9ja19iaCgmYXBfZGV2aWNlX2xvY2spOwogCWxpc3RfZGVsX2luaXQoJmFwX2Rldi0+bGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFwX2RldmljZV9sb2NrKTsKKwlpZiAoYXBfZHJ2LT5yZW1vdmUpCisJCWFwX2Rydi0+cmVtb3ZlKGFwX2Rldik7CiAJc3Bpbl9sb2NrX2JoKCZhcF9kZXYtPmxvY2spOwogCWF0b21pY19zdWIoYXBfZGV2LT5xdWV1ZV9jb3VudCwgJmFwX3BvbGxfcmVxdWVzdHMpOwogCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOwpAQCAtNTYzLDcgKzU3OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGFwX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAotLyoqCisvKgogICogQVAgYnVzIGF0dHJpYnV0ZXMuCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGFwX2RvbWFpbl9zaG93KHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpCkBAIC02MjgsMTQgKzY0NCwxNiBAQAogfTsKIAogLyoqCi0gKiBQaWNrIG9uZSBvZiB0aGUgMTYgYXAgZG9tYWlucy4KKyAqIGFwX3NlbGVjdF9kb21haW4oKTogU2VsZWN0IGFuIEFQIGRvbWFpbi4KKyAqCisgKiBQaWNrIG9uZSBvZiB0aGUgMTYgQVAgZG9tYWlucy4KICAqLwogc3RhdGljIGludCBhcF9zZWxlY3RfZG9tYWluKHZvaWQpCiB7CiAJaW50IHF1ZXVlX2RlcHRoLCBkZXZpY2VfdHlwZSwgY291bnQsIG1heF9jb3VudCwgYmVzdF9kb21haW47CiAJaW50IHJjLCBpLCBqOwogCi0JLyoqCisJLyoKIAkgKiBXZSB3YW50IHRvIHVzZSBhIHNpbmdsZSBkb21haW4uIEVpdGhlciB0aGUgb25lIHNwZWNpZmllZCB3aXRoCiAJICogdGhlICJkb21haW49IiBwYXJhbWV0ZXIgb3IgdGhlIGRvbWFpbiB3aXRoIHRoZSBtYXhpbXVtIG51bWJlcgogCSAqIG9mIGRldmljZXMuCkBAIC02NjcsOCArNjg1LDEwIEBACiB9CiAKIC8qKgotICogRmluZCB0aGUgZGV2aWNlIHR5cGUgaWYgcXVlcnkgcXVldWUgcmV0dXJuZWQgYSBkZXZpY2UgdHlwZSBvZiAwLgorICogYXBfcHJvYmVfZGV2aWNlX3R5cGUoKTogRmluZCB0aGUgZGV2aWNlIHR5cGUgb2YgYW4gQVAuCiAgKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UuCisgKgorICogRmluZCB0aGUgZGV2aWNlIHR5cGUgaWYgcXVlcnkgcXVldWUgcmV0dXJuZWQgYSBkZXZpY2UgdHlwZSBvZiAwLgogICovCiBzdGF0aWMgaW50IGFwX3Byb2JlX2RldmljZV90eXBlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKIHsKQEAgLTc2Miw3ICs3ODIsMTEgQEAKIH0KIAogLyoqCi0gKiBTY2FuIHRoZSBhcCBidXMgZm9yIG5ldyBkZXZpY2VzLgorICogX19hcF9zY2FuX2J1cygpOiBTY2FuIHRoZSBBUCBidXMuCisgKiBAZGV2OiBQb2ludGVyIHRvIGRldmljZQorICogQGRhdGE6IFBvaW50ZXIgdG8gZGF0YQorICoKKyAqIFNjYW4gdGhlIEFQIGJ1cyBmb3IgbmV3IGRldmljZXMuCiAgKi8KIHN0YXRpYyBpbnQgX19hcF9zY2FuX2J1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CkBAIC04NjUsNiArODg5LDggQEAKIH0KIAogLyoqCisgKiBhcF9zY2hlZHVsZV9wb2xsX3RpbWVyKCk6IFNjaGVkdWxlIHBvbGwgdGltZXIuCisgKgogICogU2V0IHVwIHRoZSB0aW1lciB0byBydW4gdGhlIHBvbGwgdGFza2xldAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBfc2NoZWR1bGVfcG9sbF90aW1lcih2b2lkKQpAQCAtODc1LDEwICs5MDEsMTEgQEAKIH0KIAogLyoqCi0gKiBSZWNlaXZlIHBlbmRpbmcgcmVwbHkgbWVzc2FnZXMgZnJvbSBhbiBBUCBkZXZpY2UuCisgKiBhcF9wb2xsX3JlYWQoKTogUmVjZWl2ZSBwZW5kaW5nIHJlcGx5IG1lc3NhZ2VzIGZyb20gYW4gQVAgZGV2aWNlLgogICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgQVAgZGV2aWNlCiAgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gY29udHJvbCBmbGFncywgYml0IDJeMCBpcyBzZXQgaWYgYW5vdGhlciBwb2xsIGlzCiAgKgkgICByZXF1aXJlZCwgYml0IDJeMSBpcyBzZXQgaWYgdGhlIHBvbGwgdGltZXIgbmVlZHMgdG8gZ2V0IGFybWVkCisgKgogICogUmV0dXJucyAwIGlmIHRoZSBkZXZpY2UgaXMgc3RpbGwgcHJlc2VudCwgLUVOT0RFViBpZiBub3QuCiAgKi8KIHN0YXRpYyBpbnQgYXBfcG9sbF9yZWFkKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCkBAIC05MjMsMTAgKzk1MCwxMSBAQAogfQogCiAvKioKLSAqIFNlbmQgbWVzc2FnZXMgZnJvbSB0aGUgcmVxdWVzdCBxdWV1ZSB0byBhbiBBUCBkZXZpY2UuCisgKiBhcF9wb2xsX3dyaXRlKCk6IFNlbmQgbWVzc2FnZXMgZnJvbSB0aGUgcmVxdWVzdCBxdWV1ZSB0byBhbiBBUCBkZXZpY2UuCiAgKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UKICAqIEBmbGFnczogcG9pbnRlciB0byBjb250cm9sIGZsYWdzLCBiaXQgMl4wIGlzIHNldCBpZiBhbm90aGVyIHBvbGwgaXMKICAqCSAgIHJlcXVpcmVkLCBiaXQgMl4xIGlzIHNldCBpZiB0aGUgcG9sbCB0aW1lciBuZWVkcyB0byBnZXQgYXJtZWQKKyAqCiAgKiBSZXR1cm5zIDAgaWYgdGhlIGRldmljZSBpcyBzdGlsbCBwcmVzZW50LCAtRU5PREVWIGlmIG5vdC4KICAqLwogc3RhdGljIGludCBhcF9wb2xsX3dyaXRlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCkBAIC05NjYsMTEgKzk5NCwxMyBAQAogfQogCiAvKioKLSAqIFBvbGwgQVAgZGV2aWNlIGZvciBwZW5kaW5nIHJlcGxpZXMgYW5kIHNlbmQgbmV3IG1lc3NhZ2VzLiBJZiBlaXRoZXIKLSAqIGFwX3BvbGxfcmVhZCBvciBhcF9wb2xsX3dyaXRlIHJldHVybnMgLUVOT0RFViB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UuCisgKiBhcF9wb2xsX3F1ZXVlKCk6IFBvbGwgQVAgZGV2aWNlIGZvciBwZW5kaW5nIHJlcGxpZXMgYW5kIHNlbmQgbmV3IG1lc3NhZ2VzLgogICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgYnVzIGRldmljZQogICogQGZsYWdzOiBwb2ludGVyIHRvIGNvbnRyb2wgZmxhZ3MsIGJpdCAyXjAgaXMgc2V0IGlmIGFub3RoZXIgcG9sbCBpcwogICoJICAgcmVxdWlyZWQsIGJpdCAyXjEgaXMgc2V0IGlmIHRoZSBwb2xsIHRpbWVyIG5lZWRzIHRvIGdldCBhcm1lZAorICoKKyAqIFBvbGwgQVAgZGV2aWNlIGZvciBwZW5kaW5nIHJlcGxpZXMgYW5kIHNlbmQgbmV3IG1lc3NhZ2VzLiBJZiBlaXRoZXIKKyAqIGFwX3BvbGxfcmVhZCBvciBhcF9wb2xsX3dyaXRlIHJldHVybnMgLUVOT0RFViB1bnJlZ2lzdGVyIHRoZSBkZXZpY2UuCiAgKiBSZXR1cm5zIDAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFwX3BvbGxfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2LCB1bnNpZ25lZCBsb25nICpmbGFncykKQEAgLTk4NCw5ICsxMDE0LDExIEBACiB9CiAKIC8qKgotICogUXVldWUgYSBtZXNzYWdlIHRvIGEgZGV2aWNlLgorICogX19hcF9xdWV1ZV9tZXNzYWdlKCk6IFF1ZXVlIGEgbWVzc2FnZSB0byBhIGRldmljZS4KICAqIEBhcF9kZXY6IHBvaW50ZXIgdG8gdGhlIEFQIGRldmljZQogICogQGFwX21zZzogdGhlIG1lc3NhZ2UgdG8gYmUgcXVldWVkCisgKgorICogUXVldWUgYSBtZXNzYWdlIHRvIGEgZGV2aWNlLiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bC4KICAqLwogc3RhdGljIGludCBfX2FwX3F1ZXVlX21lc3NhZ2Uoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2LCBzdHJ1Y3QgYXBfbWVzc2FnZSAqYXBfbXNnKQogewpAQCAtMTA1MywxMiArMTA4NSwxNCBAQAogRVhQT1JUX1NZTUJPTChhcF9xdWV1ZV9tZXNzYWdlKTsKIAogLyoqCisgKiBhcF9jYW5jZWxfbWVzc2FnZSgpOiBDYW5jZWwgYSBjcnlwdG8gcmVxdWVzdC4KKyAqIEBhcF9kZXY6IFRoZSBBUCBkZXZpY2UgdGhhdCBoYXMgdGhlIG1lc3NhZ2UgcXVldWVkCisgKiBAYXBfbXNnOiBUaGUgbWVzc2FnZSB0aGF0IGlzIHRvIGJlIHJlbW92ZWQKKyAqCiAgKiBDYW5jZWwgYSBjcnlwdG8gcmVxdWVzdC4gVGhpcyBpcyBkb25lIGJ5IHJlbW92aW5nIHRoZSByZXF1ZXN0Ci0gKiBmcm9tIHRoZSBkZXZpdmUgcGVuZGluZ3Egb3IgcmVxdWVzdHEgcXVldWUuIE5vdGUgdGhhdCB0aGUKKyAqIGZyb20gdGhlIGRldmljZSBwZW5kaW5nIG9yIHJlcXVlc3QgcXVldWUuIE5vdGUgdGhhdCB0aGUKICAqIHJlcXVlc3Qgc3RheXMgb24gdGhlIEFQIHF1ZXVlLiBXaGVuIGl0IGZpbmlzaGVzIHRoZSBtZXNzYWdlCiAgKiByZXBseSB3aWxsIGJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZSBwc21pZCBjYW4ndCBiZSBmb3VuZC4KLSAqIEBhcF9kZXY6IEFQIGRldmljZSB0aGF0IGhhcyB0aGUgbWVzc2FnZSBxdWV1ZWQKLSAqIEBhcF9tc2c6IHRoZSBtZXNzYWdlIHRoYXQgaXMgdG8gYmUgcmVtb3ZlZAogICovCiB2b2lkIGFwX2NhbmNlbF9tZXNzYWdlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2Rldiwgc3RydWN0IGFwX21lc3NhZ2UgKmFwX21zZykKIHsKQEAgLTEwODAsNyArMTExNCwxMCBAQAogRVhQT1JUX1NZTUJPTChhcF9jYW5jZWxfbWVzc2FnZSk7CiAKIC8qKgotICogQVAgcmVjZWl2ZSBwb2xsaW5nIGZvciBmaW5pc2hlZCBBUCByZXF1ZXN0cworICogYXBfcG9sbF90aW1lb3V0KCk6IEFQIHJlY2VpdmUgcG9sbGluZyBmb3IgZmluaXNoZWQgQVAgcmVxdWVzdHMuCisgKiBAdW51c2VkOiBVbnVzZWQgdmFyaWFibGUuCisgKgorICogU2NoZWR1bGVzIHRoZSBBUCB0YXNrbGV0LgogICovCiBzdGF0aWMgdm9pZCBhcF9wb2xsX3RpbWVvdXQodW5zaWduZWQgbG9uZyB1bnVzZWQpCiB7CkBAIC0xMDg4LDYgKzExMjUsOSBAQAogfQogCiAvKioKKyAqIGFwX3Jlc2V0KCk6IFJlc2V0IGEgbm90IHJlc3BvbmRpbmcgQVAgZGV2aWNlLgorICogQGFwX2RldjogUG9pbnRlciB0byB0aGUgQVAgZGV2aWNlCisgKgogICogUmVzZXQgYSBub3QgcmVzcG9uZGluZyBBUCBkZXZpY2UgYW5kIG1vdmUgYWxsIHJlcXVlc3RzIGZyb20gdGhlCiAgKiBwZW5kaW5nIHF1ZXVlIHRvIHRoZSByZXF1ZXN0IHF1ZXVlLgogICovCkBAIC0xMTA2LDExICsxMTQ2LDYgQEAKIAkJYXBfZGV2LT51bnJlZ2lzdGVyZWQgPSAxOwogfQogCi0vKioKLSAqIFBvbGwgYWxsIEFQIGRldmljZXMgb24gdGhlIGJ1cyBpbiBhIHJvdW5kIHJvYmluIGZhc2hpb24uIENvbnRpbnVlCi0gKiBwb2xsaW5nIHVudGlsIGJpdCAyXjAgb2YgdGhlIGNvbnRyb2wgZmxhZ3MgaXMgbm90IHNldC4gSWYgYml0IDJeMQotICogb2YgdGhlIGNvbnRyb2wgZmxhZ3MgaGFzIGJlZW4gc2V0IGFybSB0aGUgcG9sbCB0aW1lci4KLSAqLwogc3RhdGljIGludCBfX2FwX3BvbGxfYWxsKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3Bpbl9sb2NrKCZhcF9kZXYtPmxvY2spOwpAQCAtMTEyNCw2ICsxMTU5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogYXBfcG9sbF9hbGwoKTogUG9sbCBhbGwgQVAgZGV2aWNlcy4KKyAqIEBkdW1teTogVW51c2VkIHZhcmlhYmxlCisgKgorICogUG9sbCBhbGwgQVAgZGV2aWNlcyBvbiB0aGUgYnVzIGluIGEgcm91bmQgcm9iaW4gZmFzaGlvbi4gQ29udGludWUKKyAqIHBvbGxpbmcgdW50aWwgYml0IDJeMCBvZiB0aGUgY29udHJvbCBmbGFncyBpcyBub3Qgc2V0LiBJZiBiaXQgMl4xCisgKiBvZiB0aGUgY29udHJvbCBmbGFncyBoYXMgYmVlbiBzZXQgYXJtIHRoZSBwb2xsIHRpbWVyLgorICovCiBzdGF0aWMgdm9pZCBhcF9wb2xsX2FsbCh1bnNpZ25lZCBsb25nIGR1bW15KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTQyLDYgKzExODUsOSBAQAogfQogCiAvKioKKyAqIGFwX3BvbGxfdGhyZWFkKCk6IFRocmVhZCB0aGF0IHBvbGxzIGZvciBmaW5pc2hlZCByZXF1ZXN0cy4KKyAqIEBkYXRhOiBVbnVzZWQgcG9pbnRlcgorICoKICAqIEFQIGJ1cyBwb2xsIHRocmVhZC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyB0aHJlYWQgaXMgdG8gcG9sbCBmb3IKICAqIGZpbmlzaGVkIHJlcXVlc3RzIGluIGEgbG9vcCBpZiB0aGVyZSBpcyBhICJmcmVlIiBjcHUgLSB0aGF0IGlzCiAgKiBhIGNwdSB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyBiZXR0ZXIgdG8gZG8uIFRoZSBwb2xsaW5nIHN0b3BzCkBAIC0xMjExLDcgKzEyNTcsMTAgQEAKIH0KIAogLyoqCi0gKiBIYW5kbGluZyBvZiByZXF1ZXN0IHRpbWVvdXRzCisgKiBhcF9yZXF1ZXN0X3RpbWVvdXQoKTogSGFuZGxpbmcgb2YgcmVxdWVzdCB0aW1lb3V0cworICogQGRhdGE6IEhvbGRzIHRoZSBBUCBkZXZpY2UuCisgKgorICogSGFuZGxlcyByZXF1ZXN0IHRpbWVvdXRzLgogICovCiBzdGF0aWMgdm9pZCBhcF9yZXF1ZXN0X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtMTI0NCw3ICsxMjkzLDkgQEAKIH07CiAKIC8qKgotICogVGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjb2RlLgorICogYXBfbW9kdWxlX2luaXQoKTogVGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjb2RlLgorICoKKyAqIEluaXRpYWxpemVzIHRoZSBtb2R1bGUuCiAgKi8KIGludCBfX2luaXQgYXBfbW9kdWxlX2luaXQodm9pZCkKIHsKQEAgLTEyODYsNyArMTMzNyw3IEBACiAJaWYgKGFwX3NlbGVjdF9kb21haW4oKSA9PSAwKQogCQlhcF9zY2FuX2J1cyhOVUxMKTsKIAotCS8qIFNldHVwIHRoZSBhcCBidXMgcmVzY2FuIHRpbWVyLiAqLworCS8qIFNldHVwIHRoZSBBUCBidXMgcmVzY2FuIHRpbWVyLiAqLwogCWluaXRfdGltZXIoJmFwX2NvbmZpZ190aW1lcik7CiAJYXBfY29uZmlnX3RpbWVyLmZ1bmN0aW9uID0gYXBfY29uZmlnX3RpbWVvdXQ7CiAJYXBfY29uZmlnX3RpbWVyLmRhdGEgPSAwOwpAQCAtMTMyMyw3ICsxMzc0LDkgQEAKIH0KIAogLyoqCi0gKiBUaGUgbW9kdWxlIHRlcm1pbmF0aW9uIGNvZGUKKyAqIGFwX21vZHVsZXNfZXhpdCgpOiBUaGUgbW9kdWxlIHRlcm1pbmF0aW9uIGNvZGUKKyAqCisgKiBUZXJtaW5hdGVzIHRoZSBtb2R1bGUuCiAgKi8KIHZvaWQgYXBfbW9kdWxlX2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5oCmluZGV4IDg3YzJkNjQuLmMxZTEyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuaApAQCAtNTAsNiArNTAsMTUgQEAKICNkZWZpbmUgQVBfUUlEX1FVRVVFKF9xaWQpICgoX3FpZCkgJiAxNSkKIAogLyoqCisgKiBzdHJ1Y3R5IGFwX3F1ZXVlX3N0YXR1cyAtIEhvbGRzIHRoZSBBUCBxdWV1ZSBzdGF0dXMuCisgKiBAcXVldWVfZW1wdHk6IFNob3dzIGlmIHF1ZXVlIGlzIGVtcHR5CisgKiBAcmVwbGllc193YWl0aW5nOiBXYWl0aW5nIHJlcGxpZXMKKyAqIEBxdWV1ZV9mdWxsOiBJcyAxIGlmIHRoZSBxdWV1ZSBpcyBmdWxsCisgKiBAcGFkOiBBIDQgYml0IHBhZAorICogQGludF9lbmFibGVkOiBTaG93cyBpZiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGZvciB0aGUgQVAKKyAqIEByZXNwb25zZV9jb25kZTogSG9sZHMgdGhlIDggYml0IHJlc3BvbnNlIGNvZGUKKyAqIEBwYWQyOiBBIDE2IGJpdCBwYWQKKyAqCiAgKiBUaGUgYXAgcXVldWUgc3RhdHVzIHdvcmQgaXMgcmV0dXJuZWQgYnkgYWxsIHRocmVlIEFQIGZ1bmN0aW9ucwogICogKFBRQVAsIE5RQVAgYW5kIERRQVApLiAgVGhlcmUncyBhIHNldCBvZiBmbGFncyBpbiB0aGUgZmlyc3QKICAqIGJ5dGUsIGZvbGxvd2VkIGJ5IGEgMSBieXRlIHJlc3BvbnNlIGNvZGUuCkBAIC03NSw3ICs4NCw3IEBACiAjZGVmaW5lIEFQX1JFU1BPTlNFX05PX0ZJUlNUX1BBUlQJMHgxMwogI2RlZmluZSBBUF9SRVNQT05TRV9NRVNTQUdFX1RPT19CSUcJMHgxNQogCi0vKioKKy8qCiAgKiBLbm93biBkZXZpY2UgdHlwZXMKICAqLwogI2RlZmluZSBBUF9ERVZJQ0VfVFlQRV9QQ0lDQwkzCkBAIC04NCw3ICs5Myw3IEBACiAjZGVmaW5lIEFQX0RFVklDRV9UWVBFX0NFWDJBCTYKICNkZWZpbmUgQVBfREVWSUNFX1RZUEVfQ0VYMkMJNwogCi0vKioKKy8qCiAgKiBBUCByZXNldCBmbGFnIHN0YXRlcwogICovCiAjZGVmaW5lIEFQX1JFU0VUX0lHTk9SRQkwCS8qIHJlcXVlc3QgdGltZW91dCB3aWxsIGJlIGlnbm9yZWQgKi8KQEAgLTE1Miw3ICsxNjEsNyBAQAogCS5kZXZfdHlwZT0oZHQpLAkJCQkJXAogCS5tYXRjaF9mbGFncz1BUF9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX1RZUEUsCiAKLS8qKgorLyoKICAqIE5vdGU6IGRvbid0IHVzZSBhcF9zZW5kL2FwX3JlY3YgYWZ0ZXIgdXNpbmcgYXBfcXVldWVfbWVzc2FnZQogICogZm9yIHRoZSBmaXJzdCB0aW1lLiBPdGhlcndpc2UgdGhlIGFwIG1lc3NhZ2UgcXVldWUgd2lsbCBnZXQKICAqIGNvbmZ1c2VkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwppbmRleCBlMzYyNWE0Li40ZDM2ZTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwpAQCAtMzYsMTAgKzM2LDExIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaHdfcmFuZG9tLmg+CiAKICNpbmNsdWRlICJ6Y3J5cHRfYXBpLmgiCiAKLS8qKgorLyoKICAqIE1vZHVsZSBkZXNjcmlwdGlvbi4KICAqLwogTU9EVUxFX0FVVEhPUigiSUJNIENvcnBvcmF0aW9uIik7CkBAIC01Miw3ICs1MywxMCBAQAogc3RhdGljIGludCB6Y3J5cHRfZGV2aWNlX2NvdW50ID0gMDsKIHN0YXRpYyBhdG9taWNfdCB6Y3J5cHRfb3Blbl9jb3VudCA9IEFUT01JQ19JTklUKDApOwogCi0vKioKK3N0YXRpYyBpbnQgemNyeXB0X3JuZ19kZXZpY2VfYWRkKHZvaWQpOworc3RhdGljIHZvaWQgemNyeXB0X3JuZ19kZXZpY2VfcmVtb3ZlKHZvaWQpOworCisvKgogICogRGV2aWNlIGF0dHJpYnV0ZXMgY29tbW9uIGZvciBhbGwgY3J5cHRvIGRldmljZXMuCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHpjcnlwdF90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtOTksNiArMTAzLDkgQEAKIH07CiAKIC8qKgorICogX196Y3J5cHRfaW5jcmVhc2VfcHJlZmVyZW5jZSgpOiBJbmNyZWFzZSBwcmVmZXJlbmNlIG9mIGEgY3J5cHRvIGRldmljZS4KKyAqIEB6ZGV2OiBQb2ludGVyIHRoZSBjcnlwdG8gZGV2aWNlCisgKgogICogTW92ZSB0aGUgZGV2aWNlIHRvd2FyZHMgdGhlIGhlYWQgb2YgdGhlIGRldmljZSBsaXN0LgogICogTmVlZCB0byBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyB0aGUgemNyeXB0IGRldmljZSBsaXN0IGxvY2suCiAgKiBOb3RlOiBjYXJkcyB3aXRoIHNwZWVkX3JhdGluZyBvZiAwIGFyZSBrZXB0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCkBAIC0xMjUsNiArMTMyLDkgQEAKIH0KIAogLyoqCisgKiBfX3pjcnlwdF9kZWNyZWFzZV9wcmVmZXJlbmNlKCk6IERlY3JlYXNlIHByZWZlcmVuY2Ugb2YgYSBjcnlwdG8gZGV2aWNlLgorICogQHpkZXY6IFBvaW50ZXIgdG8gYSBjcnlwdG8gZGV2aWNlLgorICoKICAqIE1vdmUgdGhlIGRldmljZSB0b3dhcmRzIHRoZSB0YWlsIG9mIHRoZSBkZXZpY2UgbGlzdC4KICAqIE5lZWQgdG8gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgdGhlIHpjcnlwdCBkZXZpY2UgbGlzdCBsb2NrLgogICogTm90ZTogY2FyZHMgd2l0aCBzcGVlZF9yYXRpbmcgb2YgMCBhcmUga2VwdCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgpAQCAtMTk4LDcgKzIwOCwxMCBAQAogRVhQT1JUX1NZTUJPTCh6Y3J5cHRfZGV2aWNlX2ZyZWUpOwogCiAvKioKLSAqIFJlZ2lzdGVyIGEgY3J5cHRvIGRldmljZS4KKyAqIHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGEgY3J5cHRvIGRldmljZS4KKyAqIEB6ZGV2OiBQb2ludGVyIHRvIGEgY3J5cHRvIGRldmljZQorICoKKyAqIFJlZ2lzdGVyIGEgY3J5cHRvIGRldmljZS4gUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwuCiAgKi8KIGludCB6Y3J5cHRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2KQogewpAQCAtMjE2LDE2ICsyMjksMzcgQEAKIAlfX3pjcnlwdF9pbmNyZWFzZV9wcmVmZXJlbmNlKHpkZXYpOwogCXpjcnlwdF9kZXZpY2VfY291bnQrKzsKIAlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlpZiAoemRldi0+b3BzLT5ybmcpIHsKKwkJcmMgPSB6Y3J5cHRfcm5nX2RldmljZV9hZGQoKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXRfdW5yZWdpc3RlcjsKKwl9CisJcmV0dXJuIDA7CisKK291dF91bnJlZ2lzdGVyOgorCXNwaW5fbG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwl6Y3J5cHRfZGV2aWNlX2NvdW50LS07CisJbGlzdF9kZWxfaW5pdCgmemRldi0+bGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZ6ZGV2LT5hcF9kZXYtPmRldmljZS5rb2JqLAorCQkJICAgJnpjcnlwdF9kZXZpY2VfYXR0cl9ncm91cCk7CisJcHV0X2RldmljZSgmemRldi0+YXBfZGV2LT5kZXZpY2UpOworCXpjcnlwdF9kZXZpY2VfcHV0KHpkZXYpOwogb3V0OgogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0woemNyeXB0X2RldmljZV9yZWdpc3Rlcik7CiAKIC8qKgorICogemNyeXB0X2RldmljZV91bnJlZ2lzdGVyKCk6IFVucmVnaXN0ZXIgYSBjcnlwdG8gZGV2aWNlLgorICogQHpkZXY6IFBvaW50ZXIgdG8gY3J5cHRvIGRldmljZQorICoKICAqIFVucmVnaXN0ZXIgYSBjcnlwdG8gZGV2aWNlLgogICovCiB2b2lkIHpjcnlwdF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldikKIHsKKwlpZiAoemRldi0+b3BzLT5ybmcpCisJCXpjcnlwdF9ybmdfZGV2aWNlX3JlbW92ZSgpOwogCXNwaW5fbG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKIAl6Y3J5cHRfZGV2aWNlX2NvdW50LS07CiAJbGlzdF9kZWxfaW5pdCgmemRldi0+bGlzdCk7CkBAIC0yMzgsNyArMjcyLDkgQEAKIEVYUE9SVF9TWU1CT0woemNyeXB0X2RldmljZV91bnJlZ2lzdGVyKTsKIAogLyoqCi0gKiB6Y3J5cHRfcmVhZCBpcyBub3QgYmUgc3VwcG9ydGVkIGJleW9uZCB6Y3J5cHQgMS4zLjEKKyAqIHpjcnlwdF9yZWFkICgpOiBOb3Qgc3VwcG9ydGVkIGJleW9uZCB6Y3J5cHQgMS4zLjEuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJleW9uZCB6Y3J5cHQgMS4zLjEuCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHpjcnlwdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQpAQCAtMjQ3LDYgKzI4Myw4IEBACiB9CiAKIC8qKgorICogemNyeXB0X3dyaXRlKCk6IE5vdCBhbGxvd2VkLgorICoKICAqIFdyaXRlIGlzIGlzIG5vdCBhbGxvd2VkCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHpjcnlwdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKQEAgLTI1Niw3ICsyOTQsOSBAQAogfQogCiAvKioKLSAqIERldmljZSBvcGVuL2Nsb3NlIGZ1bmN0aW9ucyB0byBjb3VudCBudW1iZXIgb2YgdXNlcnMuCisgKiB6Y3J5cHRfb3BlbigpOiBDb3VudCBudW1iZXIgb2YgdXNlcnMuCisgKgorICogRGV2aWNlIG9wZW4gZnVuY3Rpb24gdG8gY291bnQgbnVtYmVyIG9mIHVzZXJzLgogICovCiBzdGF0aWMgaW50IHpjcnlwdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewpAQCAtMjY0LDEzICszMDQsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiB6Y3J5cHRfcmVsZWFzZSgpOiBDb3VudCBudW1iZXIgb2YgdXNlcnMuCisgKgorICogRGV2aWNlIGNsb3NlIGZ1bmN0aW9uIHRvIGNvdW50IG51bWJlciBvZiB1c2Vycy4KKyAqLwogc3RhdGljIGludCB6Y3J5cHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlhdG9taWNfZGVjKCZ6Y3J5cHRfb3Blbl9jb3VudCk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qKgorLyoKICAqIHpjcnlwdCBpb2N0bHMuCiAgKi8KIHN0YXRpYyBsb25nIHpjcnlwdF9yc2FfbW9kZXhwbyhzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICptZXgpCkBAIC0yODAsNyArMzI1LDcgQEAKIAogCWlmIChtZXgtPm91dHB1dGRhdGFsZW5ndGggPCBtZXgtPmlucHV0ZGF0YWxlbmd0aCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JLyoqCisJLyoKIAkgKiBBcyBsb25nIGFzIG91dHB1dGRhdGFsZW5ndGggaXMgYmlnIGVub3VnaCwgd2UgY2FuIHNldCB0aGUKIAkgKiBvdXRwdXRkYXRhbGVuZ3RoIGVxdWFsIHRvIHRoZSBpbnB1dGRhdGFsZW5ndGgsIHNpbmNlIHRoYXQgaXMgdGhlCiAJICogbnVtYmVyIG9mIGJ5dGVzIHdlIHdpbGwgY29weSBpbiBhbnkgY2FzZQpAQCAtMzI2LDcgKzM3MSw3IEBACiAJaWYgKGNydC0+b3V0cHV0ZGF0YWxlbmd0aCA8IGNydC0+aW5wdXRkYXRhbGVuZ3RoIHx8CiAJICAgIChjcnQtPmlucHV0ZGF0YWxlbmd0aCAmIDEpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKioKKwkvKgogCSAqIEFzIGxvbmcgYXMgb3V0cHV0ZGF0YWxlbmd0aCBpcyBiaWcgZW5vdWdoLCB3ZSBjYW4gc2V0IHRoZQogCSAqIG91dHB1dGRhdGFsZW5ndGggZXF1YWwgdG8gdGhlIGlucHV0ZGF0YWxlbmd0aCwgc2luY2UgdGhhdCBpcyB0aGUKIAkgKiBudW1iZXIgb2YgYnl0ZXMgd2Ugd2lsbCBjb3B5IGluIGFueSBjYXNlCkBAIC0zNDMsNyArMzg4LDcgQEAKIAkJICAgIHpkZXYtPm1heF9tb2Rfc2l6ZSA8IGNydC0+aW5wdXRkYXRhbGVuZ3RoKQogCQkJY29udGludWU7CiAJCWlmICh6ZGV2LT5zaG9ydF9jcnQgJiYgY3J0LT5pbnB1dGRhdGFsZW5ndGggPiAyNDApIHsKLQkJCS8qKgorCQkJLyoKIAkJCSAqIENoZWNrIGlucHV0ZGF0YSBmb3IgbGVhZGluZyB6ZXJvcyBmb3IgY2FyZHMKIAkJCSAqIHRoYXQgY2FuJ3QgaGFuZGxlIG5wX3ByaW1lLCBicF9rZXksIG9yCiAJCQkgKiB1X211bHRfaW52ID4gMTI4IGJ5dGVzLgpAQCAtMzU5LDcgKzQwNCw3IEBACiAJCQkJICAgIGNvcHlfZnJvbV91c2VyKCZ6MywgY3J0LT51X211bHRfaW52LCBsZW4pKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQljb3BpZWQgPSAxOwotCQkJCS8qKgorCQkJCS8qCiAJCQkJICogV2UgaGF2ZSB0byByZXN0YXJ0IGRldmljZSBsb29rdXAgLQogCQkJCSAqIHRoZSBkZXZpY2UgbGlzdCBtYXkgaGF2ZSBjaGFuZ2VkIGJ5IG5vdy4KIAkJCQkgKi8KQEAgLTQyNyw2ICs0NzIsMzcgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAorc3RhdGljIGxvbmcgemNyeXB0X3JuZyhjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoemRldiwgJnpjcnlwdF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAoIXpkZXYtPm9ubGluZSB8fCAhemRldi0+b3BzLT5ybmcpCisJCQljb250aW51ZTsKKwkJemNyeXB0X2RldmljZV9nZXQoemRldik7CisJCWdldF9kZXZpY2UoJnpkZXYtPmFwX2Rldi0+ZGV2aWNlKTsKKwkJemRldi0+cmVxdWVzdF9jb3VudCsrOworCQlfX3pjcnlwdF9kZWNyZWFzZV9wcmVmZXJlbmNlKHpkZXYpOworCQlpZiAodHJ5X21vZHVsZV9nZXQoemRldi0+YXBfZGV2LT5kcnYtPmRyaXZlci5vd25lcikpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCQkJcmMgPSB6ZGV2LT5vcHMtPnJuZyh6ZGV2LCBidWZmZXIpOworCQkJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCQkJbW9kdWxlX3B1dCh6ZGV2LT5hcF9kZXYtPmRydi0+ZHJpdmVyLm93bmVyKTsKKwkJfSBlbHNlCisJCQlyYyA9IC1FQUdBSU47CisJCXpkZXYtPnJlcXVlc3RfY291bnQtLTsKKwkJX196Y3J5cHRfaW5jcmVhc2VfcHJlZmVyZW5jZSh6ZGV2KTsKKwkJcHV0X2RldmljZSgmemRldi0+YXBfZGV2LT5kZXZpY2UpOworCQl6Y3J5cHRfZGV2aWNlX3B1dCh6ZGV2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJCXJldHVybiByYzsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIHN0YXRpYyB2b2lkIHpjcnlwdF9zdGF0dXNfbWFzayhjaGFyIHN0YXR1c1tBUF9ERVZJQ0VTXSkKIHsKIAlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKQEAgLTUxNCw2ICs1OTAsOCBAQAogfQogCiAvKioKKyAqIHpjcnlwdF9pY2Ffc3RhdHVzKCk6IE9sZCwgZGVwcmFjdGVkIGNvbWJpIHN0YXR1cyBjYWxsLgorICoKICAqIE9sZCwgZGVwcmVjYXRlZCBjb21iaSBzdGF0dXMgY2FsbC4KICAqLwogc3RhdGljIGxvbmcgemNyeXB0X2ljYV9zdGF0dXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtNjE1LDcgKzY5Myw3IEBACiAJCQkJKGludCBfX3VzZXIgKikgYXJnKTsKIAljYXNlIFo5MFNUQVRfRE9NQUlOX0lOREVYOgogCQlyZXR1cm4gcHV0X3VzZXIoYXBfZG9tYWluX2luZGV4LCAoaW50IF9fdXNlciAqKSBhcmcpOwotCS8qKgorCS8qCiAJICogRGVwcmVjYXRlZCBpb2N0bHMuIERvbid0IGFkZCBhbm90aGVyIGRldmljZSBjb3VudCBpb2N0bCwKIAkgKiB5b3UgY2FuIGNvdW50IHRoZW0geW91cnNlbGYgaW4gdGhlIHVzZXIgc3BhY2Ugd2l0aCB0aGUKIAkgKiBvdXRwdXQgb2YgdGhlIFo5MFNUQVRfU1RBVFVTX01BU0sgaW9jdGwuCkBAIC02NTMsNyArNzMxLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLS8qKgorLyoKICAqIGlvY3RsMzIgY29udmVyc2lvbiByb3V0aW5lcwogICovCiBzdHJ1Y3QgY29tcGF0X2ljYV9yc2FfbW9kZXhwbyB7CkBAIC04MDQsNyArODgyLDcgQEAKIH0KICNlbmRpZgogCi0vKioKKy8qCiAgKiBNaXNjIGRldmljZSBmaWxlIG9wZXJhdGlvbnMuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpjcnlwdF9mb3BzID0gewpAQCAtODE5LDcgKzg5Nyw3IEBACiAJLnJlbGVhc2UJPSB6Y3J5cHRfcmVsZWFzZQogfTsKIAotLyoqCisvKgogICogTWlzYyBkZXZpY2UuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB6Y3J5cHRfbWlzY19kZXZpY2UgPSB7CkBAIC04MjgsNyArOTA2LDcgQEAKIAkuZm9wcwkgICAgPSAmemNyeXB0X2ZvcHMsCiB9OwogCi0vKioKKy8qCiAgKiBEZXByZWNhdGVkIC9wcm9jIGVudHJ5IHN1cHBvcnQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnpjcnlwdF9lbnRyeTsKQEAgLTEwMjIsNyArMTEwMCw3IEBACiAJfQogCiAJZm9yIChqID0gMDsgaiA8IDY0ICYmICpwdHI7IHB0cisrKSB7Ci0JCS8qKgorCQkvKgogCQkgKiAnMCcgZm9yIG5vIGRldmljZSwgJzEnIGZvciBQQ0lDQSwgJzInIGZvciBQQ0lDQywKIAkJICogJzMnIGZvciBQQ0lYQ0NfTUNMMiwgJzQnIGZvciBQQ0lYQ0NfTUNMMywKIAkJICogJzUnIGZvciBDRVgyQyBhbmQgJzYnIGZvciBDRVgyQScKQEAgLTEwNDEsNyArMTExOSw3NiBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGludCB6Y3J5cHRfcm5nX2RldmljZV9jb3VudDsKK3N0YXRpYyB1MzIgKnpjcnlwdF9ybmdfYnVmZmVyOworc3RhdGljIGludCB6Y3J5cHRfcm5nX2J1ZmZlcl9pbmRleDsKK3N0YXRpYyBERUZJTkVfTVVURVgoemNyeXB0X3JuZ19tdXRleCk7CisKK3N0YXRpYyBpbnQgemNyeXB0X3JuZ19kYXRhX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKK3sKKwlpbnQgcmM7CisKKwkvKgorCSAqIFdlIGRvbid0IG5lZWQgbG9ja2luZyBoZXJlIGJlY2F1c2UgdGhlIFJORyBBUEkgZ3VhcmFudGVlcyBzZXJpYWxpemVkCisJICogcmVhZCBtZXRob2QgY2FsbHMuCisJICovCisJaWYgKHpjcnlwdF9ybmdfYnVmZmVyX2luZGV4ID09IDApIHsKKwkJcmMgPSB6Y3J5cHRfcm5nKChjaGFyICopIHpjcnlwdF9ybmdfYnVmZmVyKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQl6Y3J5cHRfcm5nX2J1ZmZlcl9pbmRleCA9IHJjIC8gc2l6ZW9mICpkYXRhOworCX0KKwkqZGF0YSA9IHpjcnlwdF9ybmdfYnVmZmVyWy0temNyeXB0X3JuZ19idWZmZXJfaW5kZXhdOworCXJldHVybiBzaXplb2YgKmRhdGE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdybmcgemNyeXB0X3JuZ19kZXYgPSB7CisJLm5hbWUJCT0gInpjcnlwdCIsCisJLmRhdGFfcmVhZAk9IHpjcnlwdF9ybmdfZGF0YV9yZWFkLAorfTsKKworc3RhdGljIGludCB6Y3J5cHRfcm5nX2RldmljZV9hZGQodm9pZCkKK3sKKwlpbnQgcmMgPSAwOworCisJbXV0ZXhfbG9jaygmemNyeXB0X3JuZ19tdXRleCk7CisJaWYgKHpjcnlwdF9ybmdfZGV2aWNlX2NvdW50ID09IDApIHsKKwkJemNyeXB0X3JuZ19idWZmZXIgPSAodTMyICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCF6Y3J5cHRfcm5nX2J1ZmZlcikgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJemNyeXB0X3JuZ19idWZmZXJfaW5kZXggPSAwOworCQlyYyA9IGh3cm5nX3JlZ2lzdGVyKCZ6Y3J5cHRfcm5nX2Rldik7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCXpjcnlwdF9ybmdfZGV2aWNlX2NvdW50ID0gMTsKKwl9IGVsc2UKKwkJemNyeXB0X3JuZ19kZXZpY2VfY291bnQrKzsKKwltdXRleF91bmxvY2soJnpjcnlwdF9ybmdfbXV0ZXgpOworCXJldHVybiAwOworCitvdXRfZnJlZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHpjcnlwdF9ybmdfYnVmZmVyKTsKK291dDoKKwltdXRleF91bmxvY2soJnpjcnlwdF9ybmdfbXV0ZXgpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgemNyeXB0X3JuZ19kZXZpY2VfcmVtb3ZlKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmemNyeXB0X3JuZ19tdXRleCk7CisJemNyeXB0X3JuZ19kZXZpY2VfY291bnQtLTsKKwlpZiAoemNyeXB0X3JuZ19kZXZpY2VfY291bnQgPT0gMCkgeworCQlod3JuZ191bnJlZ2lzdGVyKCZ6Y3J5cHRfcm5nX2Rldik7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgemNyeXB0X3JuZ19idWZmZXIpOworCX0KKwltdXRleF91bmxvY2soJnpjcnlwdF9ybmdfbXV0ZXgpOworfQorCiAvKioKKyAqIHpjcnlwdF9hcGlfaW5pdCgpOiBNb2R1bGUgaW5pdGlhbGl6YXRpb24uCisgKgogICogVGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjb2RlLgogICovCiBpbnQgX19pbml0IHpjcnlwdF9hcGlfaW5pdCh2b2lkKQpAQCAtMTA3Niw2ICsxMjIzLDggQEAKIH0KIAogLyoqCisgKiB6Y3J5cHRfYXBpX2V4aXQoKTogTW9kdWxlIHRlcm1pbmF0aW9uLgorICoKICAqIFRoZSBtb2R1bGUgdGVybWluYXRpb24gY29kZS4KICAqLwogdm9pZCB6Y3J5cHRfYXBpX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKaW5kZXggZGU0ODc3ZS4uNWM2ZTIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKQEAgLTQzLDE3ICs0MywxNyBAQAogI2RlZmluZSBERVZfTkFNRQkiemNyeXB0IgogCiAjZGVmaW5lIFBSSU5USyhmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9ERUJVRyBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19GVU5DVElPTl9fICwgIyMgYXJncykKKwlwcmludGsoS0VSTl9ERUJVRyBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQogI2RlZmluZSBQUklOVEtOKGZtdCwgYXJncy4uLikgXAogCXByaW50ayhLRVJOX0RFQlVHIERFVl9OQU1FICI6ICIgZm10LCAjIyBhcmdzKQogI2RlZmluZSBQUklOVEtXKGZtdCwgYXJncy4uLikgXAotCXByaW50ayhLRVJOX1dBUk5JTkcgREVWX05BTUUgIjogJXMgLT4gIiBmbXQsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpCisJcHJpbnRrKEtFUk5fV0FSTklORyBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQogI2RlZmluZSBQUklOVEtDKGZtdCwgYXJncy4uLikgXAotCXByaW50ayhLRVJOX0NSSVQgREVWX05BTUUgIjogJXMgLT4gIiBmbXQsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpCisJcHJpbnRrKEtFUk5fQ1JJVCBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQogCiAjaWZkZWYgWkNSWVBUX0RFQlVHCiAjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9ERUJVRyBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19GVU5DVElPTl9fICwgIyMgYXJncykKKwlwcmludGsoS0VSTl9ERUJVRyBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQogI2Vsc2UKICNkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKQEAgLTEwMCw2ICsxMDAsMTMgQEAKICNkZWZpbmUgWkNSWVBUX0NFWDJDCQk1CiAjZGVmaW5lIFpDUllQVF9DRVgyQQkJNgogCisvKioKKyAqIExhcmdlIHJhbmRvbSBudW1iZXJzIGFyZSBwdWxsZWQgaW4gNDA5NiBieXRlIGNodW5rcyBmcm9tIHRoZSBjcnlwdG8gY2FyZHMKKyAqIGFuZCBzdG9yZWQgaW4gYSBwYWdlLiBCZSBjYXJlZnVsbCB3aGVuIGluY3JlYXNpbmcgdGhpcyBidWZmZXIgZHVlIHRvIHNpemUKKyAqIGxpbWl0YXRpb25zIGZvciBBUCByZXF1ZXN0cy4KKyAqLworI2RlZmluZSBaQ1JZUFRfUk5HX0JVRkZFUl9TSVpFCTQwOTYKKwogc3RydWN0IHpjcnlwdF9kZXZpY2U7CiAKIHN0cnVjdCB6Y3J5cHRfb3BzIHsKQEAgLTEwNyw2ICsxMTQsNyBAQAogCWxvbmcgKCpyc2FfbW9kZXhwb19jcnQpKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICosCiAJCQkJc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgKik7CiAJbG9uZyAoKnNlbmRfY3ByYikoc3RydWN0IHpjcnlwdF9kZXZpY2UgKiwgc3RydWN0IGljYV94Y1JCICopOworCWxvbmcgKCpybmcpKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICosIGNoYXIgKik7CiB9OwogCiBzdHJ1Y3QgemNyeXB0X2RldmljZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jY2Ffa2V5LmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jY2Ffa2V5LmgKaW5kZXggOGRiY2YwZS4uZWQ4MmYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2NhX2tleS5oCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NjYV9rZXkuaApAQCAtMTc0LDcgKzE3NCw3IEBACiAJa2V5LT5wdnRNZUhkciA9IHN0YXRpY19wdnRfbWVfaGRyOwogCWtleS0+cHZ0TWVTZWMgPSBzdGF0aWNfcHZ0X21lX3NlYzsKIAlrZXktPnB1Yk1lU2VjID0gc3RhdGljX3B1Yl9tZV9zZWM7Ci0JLyoqCisJLyoKIAkgKiBJbiBhIHByaXZhdGUga2V5LCB0aGUgbW9kdWx1cyBkb2Vzbid0IGFwcGVhciBpbiB0aGUgcHVibGljCiAJICogc2VjdGlvbi4gU28sIGFuIGFyYml0cmFyeSBwdWJsaWMgZXhwb25lbnQgb2YgMHgwMTAwMDEgd2lsbCBiZQogCSAqIHVzZWQuCkBAIC0zMzgsNyArMzM4LDcgQEAKIAlwdWIgPSAoc3RydWN0IGNjYV9wdWJsaWNfc2VjICopKGtleS0+a2V5X3BhcnRzICsga2V5X2xlbik7CiAJKnB1YiA9IHN0YXRpY19jY2FfcHViX3NlYzsKIAlwdWItPm1vZHVsdXNfYml0X2xlbiA9IDggKiBjcnQtPmlucHV0ZGF0YWxlbmd0aDsKLQkvKioKKwkvKgogCSAqIEluIGEgcHJpdmF0ZSBrZXksIHRoZSBtb2R1bHVzIGRvZXNuJ3QgYXBwZWFyIGluIHRoZSBwdWJsaWMKIAkgKiBzZWN0aW9uLiBTbywgYW4gYXJiaXRyYXJ5IHB1YmxpYyBleHBvbmVudCBvZiAweDAxMDAwMSB3aWxsIGJlCiAJICogdXNlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2Vycm9yLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9lcnJvci5oCmluZGV4IDJjYjYxNmIuLjNlMjdmZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2Vycm9yLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfZXJyb3IuaApAQCAtMTA4LDcgKzEwOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWNhc2UgUkVQODJfRVJST1JfTUVTU0FHRV9UWVBFOgogCS8vICAgUkVQODhfRVJST1JfTUVTU0FHRV9UWVBFCQkvLyAnMjAnIENFWDJBCi0JCS8qKgorCQkvKgogCQkgKiBUbyBzZW50IGEgbWVzc2FnZSBvZiB0aGUgd3JvbmcgdHlwZSBpcyBhIGJ1ZyBpbiB0aGUKIAkJICogZGV2aWNlIGRyaXZlci4gV2FybiBhYm91dCBpdCwgZGlzYWJsZSB0aGUgZGV2aWNlCiAJCSAqIGFuZCB0aGVuIHJlcGVhdCB0aGUgcmVxdWVzdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYy5jCmluZGV4IGQ2ZDU5YmYuLjE3ZWE1NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpY2MuYwpAQCAtNDIsNyArNDIsNyBAQAogI2RlZmluZSBQQ0lDQ19NQVhfTU9EX1NJWkVfT0xECTEyOAkvKiAxMDI0IGJpdHMgKi8KICNkZWZpbmUgUENJQ0NfTUFYX01PRF9TSVpFCTI1NgkvKiAyMDQ4IGJpdHMgKi8KIAotLyoqCisvKgogICogUENJQ0MgY2FyZHMgbmVlZCBhIHNwZWVkIHJhdGluZyBvZiAwLiBUaGlzIGtlZXBzIHRoZW0gYXQgdGhlIGVuZCBvZgogICogdGhlIHpjcnlwdCBkZXZpY2UgbGlzdCAoc2VlIHpjcnlwdF9hcGkuYykuIFBDSUNDIGNhcmRzIGFyZSBvbmx5CiAgKiB1c2VkIGlmIG5vIG90aGVyIGNhcmRzIGFyZSBwcmVzZW50IGJlY2F1c2UgdGhleSBhcmUgc2xvdyBhbmQgY2FuIG9ubHkKQEAgLTM4OCw3ICszODgsNyBAQAogCXJlcGx5X2xlbiA9IGxlMTZfdG9fY3B1KG1zZy0+bGVuZ3RoKSAtIDI7CiAJaWYgKHJlcGx5X2xlbiA+IG91dHB1dGRhdGFsZW5ndGgpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qKgorCS8qCiAJICogRm9yIGFsbCBlbmNpcGhlciByZXF1ZXN0cywgdGhlIGxlbmd0aCBvZiB0aGUgY2lwaGVydGV4dCAocmVwbHlfbGVuKQogCSAqIHdpbGwgYWx3YXlzIGVxdWFsIHRoZSBtb2R1bHVzIGxlbmd0aC4gRm9yIE1FWCBkZWNpcGhlciByZXF1ZXN0cwogCSAqIHRoZSBvdXRwdXQgbmVlZHMgdG8gZ2V0IHBhZGRlZC4gTWluaW11bSBwYWQgc2l6ZSBpcyAxMC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKaW5kZXggNzBiOWRkYy4uMGJjOWIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKQEAgLTM1Niw2ICszNTYsNTUgQEAKIH0KIAogLyoqCisgKiBQcmVwYXJlIGEgdHlwZTYgQ1BSQiBtZXNzYWdlIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KKyAqCisgKiBAYXBfZGV2OiBBUCBkZXZpY2UgcG9pbnRlcgorICogQGFwX21zZzogcG9pbnRlciB0byBBUCBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkIHJuZ190eXBlNkNQUkJfbXNnWChzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsCisJCQkgICAgICAgc3RydWN0IGFwX21lc3NhZ2UgKmFwX21zZywKKwkJCSAgICAgICB1bnNpZ25lZCByYW5kb21fbnVtYmVyX2xlbmd0aCkKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdHlwZTZfaGRyIGhkcjsKKwkJc3RydWN0IENQUkJYIGNwcmJ4OworCQljaGFyIGZ1bmN0aW9uX2NvZGVbMl07CisJCXNob3J0IGludCBydWxlX2xlbmd0aDsKKwkJY2hhciBydWxlWzhdOworCQlzaG9ydCBpbnQgdmVyYl9sZW5ndGg7CisJCXNob3J0IGludCBrZXlfbGVuZ3RoOworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKm1zZyA9IGFwX21zZy0+bWVzc2FnZTsKKwlzdGF0aWMgc3RydWN0IHR5cGU2X2hkciBzdGF0aWNfdHlwZTZfaGRyWCA9IHsKKwkJLnR5cGUJCT0gMHgwNiwKKwkJLm9mZnNldDEJPSAweDAwMDAwMDU4LAorCQkuYWdlbnRfaWQJPSB7J0MnLCAnQSd9LAorCQkuZnVuY3Rpb25fY29kZQk9IHsnUicsICdMJ30sCisJCS5Ub0NhcmRMZW4xCT0gc2l6ZW9mICptc2cgLSBzaXplb2YobXNnLT5oZHIpLAorCQkuRnJvbUNhcmRMZW4xCT0gc2l6ZW9mICptc2cgLSBzaXplb2YobXNnLT5oZHIpLAorCX07CisJc3RhdGljIHN0cnVjdCBDUFJCWCBzdGF0aWNfY3ByYnggPSB7CisJCS5jcHJiX2xlbgk9IDB4MDBkYywKKwkJLmNwcmJfdmVyX2lkCT0gMHgwMiwKKwkJLmZ1bmNfaWQJPSB7MHg1NCwgMHgzMn0sCisJCS5yZXFfcGFybWwJPSBzaXplb2YgKm1zZyAtIHNpemVvZihtc2ctPmhkcikgLQorCQkJCSAgc2l6ZW9mKG1zZy0+Y3ByYngpLAorCQkucnBsX21zZ2JsCT0gc2l6ZW9mICptc2cgLSBzaXplb2YobXNnLT5oZHIpLAorCX07CisKKwltc2ctPmhkciA9IHN0YXRpY190eXBlNl9oZHJYOworCW1zZy0+aGRyLkZyb21DYXJkTGVuMiA9IHJhbmRvbV9udW1iZXJfbGVuZ3RoLAorCW1zZy0+Y3ByYnggPSBzdGF0aWNfY3ByYng7CisJbXNnLT5jcHJieC5ycGxfZGF0YWwgPSByYW5kb21fbnVtYmVyX2xlbmd0aCwKKwltc2ctPmNwcmJ4LmRvbWFpbiA9IEFQX1FJRF9RVUVVRShhcF9kZXYtPnFpZCk7CisJbWVtY3B5KG1zZy0+ZnVuY3Rpb25fY29kZSwgbXNnLT5oZHIuZnVuY3Rpb25fY29kZSwgMHgwMik7CisJbXNnLT5ydWxlX2xlbmd0aCA9IDB4MGE7CisJbWVtY3B5KG1zZy0+cnVsZSwgIlJBTkRPTSAgIiwgOCk7CisJbXNnLT52ZXJiX2xlbmd0aCA9IDB4MDI7CisJbXNnLT5rZXlfbGVuZ3RoID0gMHgwMjsKKwlhcF9tc2ctPmxlbmd0aCA9IHNpemVvZiAqbXNnOworfQorCisvKioKICAqIENvcHkgcmVzdWx0cyBmcm9tIGEgdHlwZSA4NiBJQ0EgcmVwbHkgbWVzc2FnZSBiYWNrIHRvIHVzZXIgc3BhY2UuCiAgKgogICogQHpkZXY6IGNyeXB0byBkZXZpY2UgcG9pbnRlcgpAQCAtNDUyLDcgKzUwMSw3IEBACiAJcmVwbHlfbGVuID0gbXNnLT5sZW5ndGggLSAyOwogCWlmIChyZXBseV9sZW4gPiBvdXRwdXRkYXRhbGVuZ3RoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKioKKwkvKgogCSAqIEZvciBhbGwgZW5jaXBoZXIgcmVxdWVzdHMsIHRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKHJlcGx5X2xlbikKIAkgKiB3aWxsIGFsd2F5cyBlcXVhbCB0aGUgbW9kdWx1cyBsZW5ndGguIEZvciBNRVggZGVjaXBoZXIgcmVxdWVzdHMKIAkgKiB0aGUgb3V0cHV0IG5lZWRzIHRvIGdldCBwYWRkZWQuIE1pbmltdW0gcGFkIHNpemUgaXMgMTAuCkBAIC01MDksNiArNTU4LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY29udmVydF90eXBlODZfcm5nKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJICBzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHksCisJCQkgIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdHlwZTg2X2hkciBoZHI7CisJCXN0cnVjdCB0eXBlODZfZm10Ml9leHQgZm10MjsKKwkJc3RydWN0IENQUkJYIGNwcmJ4OworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKm1zZyA9IHJlcGx5LT5tZXNzYWdlOworCWNoYXIgKmRhdGEgPSByZXBseS0+bWVzc2FnZTsKKworCWlmIChtc2ctPmNwcmJ4LmNjcF9ydGNvZGUgIT0gMCB8fCBtc2ctPmNwcmJ4LmNjcF9yc2NvZGUgIT0gMCkgeworCQlQREVCVUcoIlJORyByZXNwb25zZSBlcnJvciBvbiBQQ0lYQ0MvQ0VYMkMgcmM9JWh1L3JzPSVodVxuIiwKKwkJICAgICAgIHJjLCBycyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltZW1jcHkoYnVmZmVyLCBkYXRhICsgbXNnLT5mbXQyLm9mZnNldDIsIG1zZy0+Zm10Mi5jb3VudDIpOworCXJldHVybiBtc2ctPmZtdDIuY291bnQyOworfQorCiBzdGF0aWMgaW50IGNvbnZlcnRfcmVzcG9uc2VfaWNhKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAogCQkJICAgIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSwKIAkJCSAgICBjaGFyIF9fdXNlciAqb3V0cHV0ZGF0YSwKQEAgLTU2Nyw2ICs2MzYsMzEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgY29udmVydF9yZXNwb25zZV9ybmcoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkJIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSwKKwkJCQkgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3QgdHlwZTg2eF9yZXBseSAqbXNnID0gcmVwbHktPm1lc3NhZ2U7CisKKwlzd2l0Y2ggKG1zZy0+aGRyLnR5cGUpIHsKKwljYXNlIFRZUEU4Ml9SU1BfQ09ERToKKwljYXNlIFRZUEU4OF9SU1BfQ09ERToKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBUWVBFODZfUlNQX0NPREU6CisJCWlmIChtc2ctPmhkci5yZXBseV9jb2RlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChtc2ctPmNwcmJ4LmNwcmJfdmVyX2lkID09IDB4MDIpCisJCQlyZXR1cm4gY29udmVydF90eXBlODZfcm5nKHpkZXYsIHJlcGx5LCBkYXRhKTsKKwkJLyogbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93biByZXNwb25zZSAqLworCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KKwkJUFJJTlRLKCJVbnJlY29nbml6ZWQgTWVzc2FnZSBIZWFkZXI6ICUwOHglMDh4XG4iLAorCQkgICAgICAgKih1bnNpZ25lZCBpbnQgKikgcmVwbHktPm1lc3NhZ2UsCisJCSAgICAgICAqKHVuc2lnbmVkIGludCAqKSAocmVwbHktPm1lc3NhZ2UrNCkpOworCQl6ZGV2LT5vbmxpbmUgPSAwOworCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KKwl9Cit9CisKIC8qKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgQVAgYnVzIGNvZGUgYWZ0ZXIgYSBjcnlwdG8gcmVxdWVzdAogICogIm1zZyIgaGFzIGZpbmlzaGVkIHdpdGggdGhlIHJlcGx5IG1lc3NhZ2UgInJlcGx5Ii4KQEAgLTczNiw2ICs4MzAsNDIgQEAKIH0KIAogLyoqCisgKiBUaGUgcmVxdWVzdCBkaXN0cmlidXRvciBjYWxscyB0aGlzIGZ1bmN0aW9uIGlmIGl0IHBpY2tlZCB0aGUgUENJWENDL0NFWDJDCisgKiBkZXZpY2UgdG8gZ2VuZXJhdGUgcmFuZG9tIGRhdGEuCisgKiBAemRldjogcG9pbnRlciB0byB6Y3J5cHRfZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgKgkgIFBDSVhDQy9DRVgyQyBkZXZpY2UgdG8gdGhlIHJlcXVlc3QgZGlzdHJpYnV0b3IKKyAqIEBidWZmZXI6IHBvaW50ZXIgdG8gYSBtZW1vcnkgcGFnZSB0byByZXR1cm4gcmFuZG9tIGRhdGEKKyAqLworCitzdGF0aWMgbG9uZyB6Y3J5cHRfcGNpeGNjX3JuZyhzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgICAgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBhcF9tZXNzYWdlIGFwX21zZzsKKwlzdHJ1Y3QgcmVzcG9uc2VfdHlwZSByZXNwX3R5cGUgPSB7CisJCS50eXBlID0gUENJWENDX1JFU1BPTlNFX1RZUEVfWENSQiwKKwl9OworCWludCByYzsKKworCWFwX21zZy5tZXNzYWdlID0ga21hbGxvYyhQQ0lYQ0NfTUFYX1hDUkJfTUVTU0FHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFwX21zZy5tZXNzYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhcF9tc2cucHNtaWQgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnQtPnBpZCkgPDwgMzIpICsKKwkJCQlhdG9taWNfaW5jX3JldHVybigmemNyeXB0X3N0ZXApOworCWFwX21zZy5wcml2YXRlID0gJnJlc3BfdHlwZTsKKwlybmdfdHlwZTZDUFJCX21zZ1goemRldi0+YXBfZGV2LCAmYXBfbXNnLCBaQ1JZUFRfUk5HX0JVRkZFUl9TSVpFKTsKKwlpbml0X2NvbXBsZXRpb24oJnJlc3BfdHlwZS53b3JrKTsKKwlhcF9xdWV1ZV9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJcmMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJnJlc3BfdHlwZS53b3JrKTsKKwlpZiAocmMgPT0gMCkKKwkJcmMgPSBjb252ZXJ0X3Jlc3BvbnNlX3JuZyh6ZGV2LCAmYXBfbXNnLCBidWZmZXIpOworCWVsc2UKKwkJLyogU2lnbmFsIHBlbmRpbmcuICovCisJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJa2ZyZWUoYXBfbXNnLm1lc3NhZ2UpOworCXJldHVybiByYzsKK30KKworLyoqCiAgKiBUaGUgY3J5cHRvIG9wZXJhdGlvbnMgZm9yIGEgUENJWENDL0NFWDJDIGNhcmQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgemNyeXB0X29wcyB6Y3J5cHRfcGNpeGNjX29wcyA9IHsKQEAgLTc0NCw2ICs4NzQsMTMgQEAKIAkuc2VuZF9jcHJiID0gemNyeXB0X3BjaXhjY19zZW5kX2NwcmIsCiB9OwogCitzdGF0aWMgc3RydWN0IHpjcnlwdF9vcHMgemNyeXB0X3BjaXhjY193aXRoX3JuZ19vcHMgPSB7CisJLnJzYV9tb2RleHBvID0gemNyeXB0X3BjaXhjY19tb2RleHBvLAorCS5yc2FfbW9kZXhwb19jcnQgPSB6Y3J5cHRfcGNpeGNjX21vZGV4cG9fY3J0LAorCS5zZW5kX2NwcmIgPSB6Y3J5cHRfcGNpeGNjX3NlbmRfY3ByYiwKKwkucm5nID0gemNyeXB0X3BjaXhjY19ybmcsCit9OworCiAvKioKICAqIE1pY3JvLWNvZGUgZGV0ZWN0aW9uIGZ1bmN0aW9uLiBJdHMgc2VuZHMgYSBtZXNzYWdlIHRvIGEgcGNpeGNjIGNhcmQKICAqIHRvIGZpbmQgb3V0IHRoZSBtaWNyb2NvZGUgbGV2ZWwuCkBAIC04NTksNiArOTk2LDU4IEBACiB9CiAKIC8qKgorICogTGFyZ2UgcmFuZG9tIG51bWJlciBkZXRlY3Rpb24gZnVuY3Rpb24uIEl0cyBzZW5kcyBhIG1lc3NhZ2UgdG8gYSBwY2l4Y2MKKyAqIGNhcmQgdG8gZmluZCBvdXQgaWYgbGFyZ2UgcmFuZG9tIG51bWJlcnMgYXJlIHN1cHBvcnRlZC4KKyAqIEBhcF9kZXY6IHBvaW50ZXIgdG8gdGhlIEFQIGRldmljZS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgbGFyZ2UgcmFuZG9tIG51bWJlcnMgYXJlIHN1cHBvcnRlZCwgMCBpZiBub3QgYW5kIDwgMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCB6Y3J5cHRfcGNpeGNjX3JuZ19zdXBwb3J0ZWQoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2KQoreworCXN0cnVjdCBhcF9tZXNzYWdlIGFwX21zZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHNtaWQ7CisJc3RydWN0IHsKKwkJc3RydWN0IHR5cGU4Nl9oZHIgaGRyOworCQlzdHJ1Y3QgdHlwZTg2X2ZtdDJfZXh0IGZtdDI7CisJCXN0cnVjdCBDUFJCWCBjcHJieDsKKwl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICpyZXBseTsKKwlpbnQgcmMsIGk7CisKKwlhcF9tc2cubWVzc2FnZSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWFwX21zZy5tZXNzYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJuZ190eXBlNkNQUkJfbXNnWChhcF9kZXYsICZhcF9tc2csIDQpOworCXJjID0gYXBfc2VuZChhcF9kZXYtPnFpZCwgMHgwMTAyMDMwNDA1MDYwNzA4VUxMLCBhcF9tc2cubWVzc2FnZSwKKwkJICAgICBhcF9tc2cubGVuZ3RoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwkvKiBXYWl0IGZvciB0aGUgdGVzdCBtZXNzYWdlIHRvIGNvbXBsZXRlLiAqLworCWZvciAoaSA9IDA7IGkgPCAyICogSFo7IGkrKykgeworCQltc2xlZXAoMTAwMCAvIEhaKTsKKwkJcmMgPSBhcF9yZWN2KGFwX2Rldi0+cWlkLCAmcHNtaWQsIGFwX21zZy5tZXNzYWdlLCA0MDk2KTsKKwkJaWYgKHJjID09IDAgJiYgcHNtaWQgPT0gMHgwMTAyMDMwNDA1MDYwNzA4VUxMKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPj0gMiAqIEhaKSB7CisJCS8qIEdvdCBubyBhbnN3ZXIuICovCisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXBseSA9IGFwX21zZy5tZXNzYWdlOworCWlmIChyZXBseS0+Y3ByYnguY2NwX3J0Y29kZSA9PSAwICYmIHJlcGx5LT5jcHJieC5jY3BfcnNjb2RlID09IDApCisJCXJjID0gMTsKKwllbHNlCisJCXJjID0gMDsKK291dF9mcmVlOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYXBfbXNnLm1lc3NhZ2UpOworCXJldHVybiByYzsKK30KKworLyoqCiAgKiBQcm9iZSBmdW5jdGlvbiBmb3IgUENJWENDL0NFWDJDIGNhcmRzLiBJdCBhbHdheXMgYWNjZXB0cyB0aGUgQVAgZGV2aWNlCiAgKiBzaW5jZSB0aGUgYnVzX21hdGNoIGFscmVhZHkgY2hlY2tlZCB0aGUgaGFyZHdhcmUgdHlwZS4gVGhlIFBDSVhDQwogICogY2FyZHMgY29tZSBpbiB0d28gZmxhdm91cnM6IG1pY3JvIGNvZGUgbGV2ZWwgMiBhbmQgbWljcm8gY29kZSBsZXZlbCAzLgpAQCAtODc0LDcgKzEwNjMsNiBAQAogCWlmICghemRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJemRldi0+YXBfZGV2ID0gYXBfZGV2OwotCXpkZXYtPm9wcyA9ICZ6Y3J5cHRfcGNpeGNjX29wczsKIAl6ZGV2LT5vbmxpbmUgPSAxOwogCWlmIChhcF9kZXYtPmRldmljZV90eXBlID09IEFQX0RFVklDRV9UWVBFX1BDSVhDQykgewogCQlyYyA9IHpjcnlwdF9wY2l4Y2NfbWNsKGFwX2Rldik7CkBAIC05MDEsNiArMTA4OSwxNSBAQAogCQl6ZGV2LT5taW5fbW9kX3NpemUgPSBQQ0lYQ0NfTUlOX01PRF9TSVpFOwogCQl6ZGV2LT5tYXhfbW9kX3NpemUgPSBQQ0lYQ0NfTUFYX01PRF9TSVpFOwogCX0KKwlyYyA9IHpjcnlwdF9wY2l4Y2Nfcm5nX3N1cHBvcnRlZChhcF9kZXYpOworCWlmIChyYyA8IDApIHsKKwkJemNyeXB0X2RldmljZV9mcmVlKHpkZXYpOworCQlyZXR1cm4gcmM7CisJfQorCWlmIChyYykKKwkJemRldi0+b3BzID0gJnpjcnlwdF9wY2l4Y2Nfd2l0aF9ybmdfb3BzOworCWVsc2UKKwkJemRldi0+b3BzID0gJnpjcnlwdF9wY2l4Y2Nfb3BzOwogCWFwX2Rldi0+cmVwbHkgPSAmemRldi0+cmVwbHk7CiAJYXBfZGV2LT5wcml2YXRlID0gemRldjsKIAlyYyA9IHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIoemRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcgYi9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcKaW5kZXggZWFkYTY5ZC4uYTc3NDVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZwpAQCAtNSwyMiArNSwyNSBAQAogCXRyaXN0YXRlICJMYW4gQ2hhbm5lbCBTdGF0aW9uIEludGVyZmFjZSIKIAlkZXBlbmRzIG9uIENDVyAmJiBORVRERVZJQ0VTICYmIChORVRfRVRIRVJORVQgfHwgVFIgfHwgRkRESSkKIAloZWxwCi0JICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBMQ1MgbmV0d29ya2luZyAgb24gSUJNIFMvMzkwCi0gIAkgICBvciB6U2VyaWVzLiBUaGlzIGRldmljZSBkcml2ZXIgc3VwcG9ydHMgVG9rZW4gUmluZyAoSUVFRSA4MDIuNSksCi0gIAkgICBGRERJIChJRUVFIDgwMi43KSBhbmQgRXRoZXJuZXQuIAotCSAgIFRoaXMgb3B0aW9uIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlIHdoaWNoIHdpbGwgYmUKLQkgICBjYWxsZWQgbGNzLmtvLiBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCBpdCBpcywgaXQncyBzYWZlIHRvIHNheSAiWSIuCisJICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBMQ1MgbmV0d29ya2luZyBvbiBJQk0gU3lzdGVtIHouCisJICAgVGhpcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnRzIFRva2VuIFJpbmcgKElFRUUgODAyLjUpLAorCSAgIEZEREkgKElFRUUgODAyLjcpIGFuZCBFdGhlcm5ldC4KKwkgICBUbyBjb21waWxlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTS4gVGhlIG1vZHVsZSBuYW1lIGlzIGxjcy5rby4KKwkgICBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCBpdCBpcywgaXQncyBzYWZlIHRvIGNob29zZSBZLgogCi1jb25maWcgQ1RDCi0JdHJpc3RhdGUgIkNUQyBkZXZpY2Ugc3VwcG9ydCIKK2NvbmZpZyBDVENNCisJdHJpc3RhdGUgIkNUQyBhbmQgTVBDIFNOQSBkZXZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENDVyAmJiBORVRERVZJQ0VTCiAJaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBjaGFubmVsLXRvLWNoYW5uZWwgbmV0d29ya2luZwotCSAgb24gSUJNIFMvMzkwIG9yIHpTZXJpZXMuIFRoaXMgZGV2aWNlIGRyaXZlciBzdXBwb3J0cyByZWFsIENUQwotCSAgY291cGxpbmcgdXNpbmcgRVNDT04uIEl0IGFsc28gc3VwcG9ydHMgdmlydHVhbCBDVENzIHdoZW4gcnVubmluZwotCSAgdW5kZXIgVk0uIEl0IHdpbGwgdXNlIHRoZSBjaGFubmVsIGRldmljZSBjb25maWd1cmF0aW9uIGlmIHRoaXMgaXMKLQkgIGF2YWlsYWJsZS4gIFRoaXMgb3B0aW9uIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlIHdoaWNoIHdpbGwgYmUKLQkgIGNhbGxlZCBjdGMua28uICBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCBpdCBpcywgaXQncyBzYWZlIHRvIHNheSAiWSIuCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGNoYW5uZWwtdG8tY2hhbm5lbAorCSAgcG9pbnQtdG8tcG9pbnQgbmV0d29ya2luZyBvbiBJQk0gU3lzdGVtIHouCisJICBUaGlzIGRldmljZSBkcml2ZXIgc3VwcG9ydHMgcmVhbCBDVEMgY291cGxpbmcgdXNpbmcgRVNDT04uCisJICBJdCBhbHNvIHN1cHBvcnRzIHZpcnR1YWwgQ1RDcyB3aGVuIHJ1bm5pbmcgdW5kZXIgVk0uCisJICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIGNoYW5uZWwtdG8tY2hhbm5lbCBNUEMgU05BIGRldmljZXMuCisJICBNUEMgaXMgYW4gU05BIHByb3RvY29sIGRldmljZSB1c2VkIGJ5IENvbW11bmljYXRpb24gU2VydmVyIGZvciBMaW51eC4KKwkgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIGNob29zZSBNLiBUaGUgbW9kdWxlIG5hbWUgaXMgY3RjbS5rby4KKwkgIFRvIGNvbXBpbGUgaW50byB0aGUga2VybmVsLCBjaG9vc2UgWS4KKwkgIElmIHlvdSBkbyBub3QgbmVlZCBhbnkgY2hhbm5lbC10by1jaGFubmVsIGNvbm5lY3Rpb24sIGNob29zZSBOLgogCiBjb25maWcgTkVUSVVDVgogCXRyaXN0YXRlICJJVUNWIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQgKFZNIG9ubHkpIgpAQCAtMjksOSArMzIsOSBAQAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb24KIAkgIHZlaGljbGUgbmV0d29ya2luZyB1bmRlciBWTSBvciBWSUYuIEl0IGVuYWJsZXMgYSBmYXN0IGNvbW11bmljYXRpb24KIAkgIGxpbmsgYmV0d2VlbiBWTSBndWVzdHMuIFVzaW5nIGlmY29uZmlnIGEgcG9pbnQtdG8tcG9pbnQgY29ubmVjdGlvbgotCSAgY2FuIGJlIGVzdGFibGlzaGVkIHRvIHRoZSBMaW51eCBmb3IgelNlcmllcyBhbmQgUzczOTAgc3lzdGVtCi0JICBydW5uaW5nIG9uIHRoZSBvdGhlciBWTSBndWVzdC4gVGhpcyBvcHRpb24gaXMgYWxzbyBhdmFpbGFibGUKLQkgIGFzIGEgbW9kdWxlIHdoaWNoIHdpbGwgYmUgY2FsbGVkIG5ldGl1Y3Yua28uIElmIHVuc3VyZSwgc2F5ICJZIi4KKwkgIGNhbiBiZSBlc3RhYmxpc2hlZCB0byB0aGUgTGludXggb24gSUJNIFN5c3RlbSB6CisJICBydW5uaW5nIG9uIHRoZSBvdGhlciBWTSBndWVzdC4gVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0uCisJICBUaGUgbW9kdWxlIG5hbWUgaXMgbmV0aXVjdi5rby4gSWYgdW5zdXJlLCBjaG9vc2UgWS4KIAogY29uZmlnIFNNU0dJVUNWCiAJdHJpc3RhdGUgIklVQ1Ygc3BlY2lhbCBtZXNzYWdlIHN1cHBvcnQgKFZNIG9ubHkpIgpAQCAtNDcsNDMgKzUwLDQ2IEBACiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjaGFubmVsIGF0dGFjaGVkIENMQVcgZGV2aWNlcy4KIAkgIENMQVcgaXMgQ29tbW9uIExpbmsgQWNjZXNzIGZvciBXb3Jrc3RhdGlvbi4gIENvbW1vbiBkZXZpY2VzCiAgICAgICAgICAgdGhhdCB1c2UgQ0xBVyBhcmUgUlMvNjAwMHMsIENpc2NvIFJvdXRlcnMgKENJUCkgYW5kIDMxNzIgZGV2aWNlcy4KLQkgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUgY2hvb3NlIE0gaGVyZTogIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKLQkgIGNsYXcua28gdG8gY29tcGlsZSBpbnRvIHRoZSBrZXJuZWwgY2hvb3NlIFkKKwkgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIGNob29zZSBNLiBUaGUgbW9kdWxlIG5hbWUgaXMgY2xhdy5rby4KKwkgIFRvIGNvbXBpbGUgaW50byB0aGUga2VybmVsLCBjaG9vc2UgWS4KIAogY29uZmlnIFFFVEgKIAl0cmlzdGF0ZSAiR2lnYWJpdCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENDVyAmJiBORVRERVZJQ0VTICYmIElQX01VTFRJQ0FTVCAmJiBRRElPCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIElCTSBTLzM5MCBhbmQgelNlcmllcyBPU0EgRXhwcmVzcyBhZGFwdGVycworCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIElCTSBTeXN0ZW0geiBPU0EgRXhwcmVzcyBhZGFwdGVycwogCSAgaW4gUURJTyBtb2RlIChhbGwgbWVkaWEgdHlwZXMpLCBIaXBlclNvY2tldHMgaW50ZXJmYWNlcyBhbmQgVk0gR3Vlc3RMQU4KIAkgIGludGVyZmFjZXMgaW4gUURJTyBhbmQgSElQRVIgbW9kZS4KIAkKLQkgIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBieSBJQk0gYXQgICAKLQkgIDxodHRwOi8vd3d3MTAuc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpbnV4MzkwPgorCSAgRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGJ5IElCTSBhdAorCSAgPGh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saW51eDM5MD4KIAotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcWV0aC5rby4KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNLgorCSAgVGhlIG1vZHVsZSBuYW1lIGlzIHFldGgua28uCiAKK2NvbmZpZyBRRVRIX0wyCisgICAgICAgIHRyaXN0YXRlICJxZXRoIGxheWVyIDIgZGV2aWNlIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gUUVUSAorICAgICAgICBoZWxwCisgICAgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGJlIGFibGUgdG8gcnVuIHFldGggZGV2aWNlcyBpbiBsYXllciAyIG1vZGUuCisgICAgICAgICAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0uIFRoZSBtb2R1bGUgbmFtZSBpcyBxZXRoX2wyLmtvLgorICAgICAgICAgIElmIHVuc3VyZSwgY2hvb3NlIHkuCiAKLWNvbW1lbnQgIkdpZ2FiaXQgRXRoZXJuZXQgZGVmYXVsdCBzZXR0aW5ncyIKLQlkZXBlbmRzIG9uIFFFVEgKK2NvbmZpZyBRRVRIX0wzCisgICAgICAgIHRyaXN0YXRlICJxZXRoIGxheWVyIDMgZGV2aWNlIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gUUVUSAorICAgICAgICBoZWxwCisgICAgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGJlIGFibGUgdG8gcnVuIHFldGggZGV2aWNlcyBpbiBsYXllciAzIG1vZGUuCisgICAgICAgICAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSBjaG9vc2UgTS4gVGhlIG1vZHVsZSBuYW1lIGlzIHFldGhfbDMua28uCisgICAgICAgICAgSWYgdW5zdXJlLCBjaG9vc2UgWS4KIAogY29uZmlnIFFFVEhfSVBWNgotCWJvb2wgIklQdjYgc3VwcG9ydCBmb3IgZ2lnYWJpdCBldGhlcm5ldCIKLQlkZXBlbmRzIG9uIChRRVRIID0gSVBWNikgfHwgKFFFVEggJiYgSVBWNiA9ICd5JykKLQloZWxwCi0JICBJZiBDT05GSUdfUUVUSCBpcyBzd2l0Y2hlZCBvbiwgdGhpcyBvcHRpb24gd2lsbCBpbmNsdWRlIElQdjYKLQkgIHN1cHBvcnQgaW4gdGhlIHFldGggZGV2aWNlIGRyaXZlci4KLQkKLWNvbmZpZyBRRVRIX1ZMQU4KLQlib29sICJWTEFOIHN1cHBvcnQgZm9yIGdpZ2FiaXQgZXRoZXJuZXQiCi0JZGVwZW5kcyBvbiAoUUVUSCA9IFZMQU5fODAyMVEpIHx8IChRRVRIICYmIFZMQU5fODAyMVEgPSAneScpCi0JaGVscAotCSAgSWYgQ09ORklHX1FFVEggaXMgc3dpdGNoZWQgb24sIHRoaXMgb3B0aW9uIHdpbGwgaW5jbHVkZSBJRUVFCi0JICA4MDIuMXEgVkxBTiBzdXBwb3J0IGluIHRoZSBxZXRoIGRldmljZSBkcml2ZXIuCisgICAgICAgIGJvb2wKKyAgICAgICAgZGVwZW5kcyBvbiAoUUVUSF9MMyA9IElQVjYpIHx8IChRRVRIX0wzICYmIElQVjYgPSAneScpCisgICAgICAgIGRlZmF1bHQgeQogCiBjb25maWcgQ0NXR1JPVVAKLSAJdHJpc3RhdGUKLQlkZWZhdWx0IChMQ1MgfHwgQ1RDIHx8IFFFVEgpCisJdHJpc3RhdGUKKwlkZWZhdWx0IChMQ1MgfHwgQ1RDTSB8fCBRRVRIKQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQppbmRleCBiYmUzYWIyLi42MzgyYzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKQEAgLTIsMTMgKzIsMTUgQEAKICMgUy8zOTAgbmV0d29yayBkZXZpY2VzCiAjCiAKLWN0Yy1vYmpzIDo9IGN0Y21haW4ubyBjdGNkYnVnLm8KLQorY3RjbS15ICs9IGN0Y21fbWFpbi5vIGN0Y21fZnNtcy5vIGN0Y21fbXBjLm8gY3RjbV9zeXNmcy5vIGN0Y21fZGJ1Zy5vCitvYmotJChDT05GSUdfQ1RDTSkgKz0gY3RjbS5vIGZzbS5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfTkVUSVVDVikgKz0gbmV0aXVjdi5vIGZzbS5vCiBvYmotJChDT05GSUdfU01TR0lVQ1YpICs9IHNtc2dpdWN2Lm8KLW9iai0kKENPTkZJR19DVEMpICs9IGN0Yy5vIGZzbS5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfTENTKSArPSBsY3MubyBjdTMwODgubwogb2JqLSQoQ09ORklHX0NMQVcpICs9IGNsYXcubyBjdTMwODgubwotcWV0aC15IDo9IHFldGhfbWFpbi5vIHFldGhfbXBjLm8gcWV0aF9zeXMubyBxZXRoX2VkZHAubyAKLXFldGgtJChDT05GSUdfUFJPQ19GUykgKz0gcWV0aF9wcm9jLm8KK3FldGgteSArPSBxZXRoX2NvcmVfc3lzLm8gcWV0aF9jb3JlX21haW4ubyBxZXRoX2NvcmVfbXBjLm8gcWV0aF9jb3JlX29mZmwubwogb2JqLSQoQ09ORklHX1FFVEgpICs9IHFldGgubworcWV0aF9sMi15ICs9IHFldGhfbDJfbWFpbi5vCitvYmotJChDT05GSUdfUUVUSF9MMikgKz0gcWV0aF9sMi5vCitxZXRoX2wzLXkgKz0gcWV0aF9sM19tYWluLm8gcWV0aF9sM19zeXMubworb2JqLSQoQ09ORklHX1FFVEhfTDMpICs9IHFldGhfbDMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCBjMzA3NjIxLi4wNGExZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyPU5VTEw7CiAKICNpZmRlZiBGVU5DVFJBQ0UKLQlwcmludGsoS0VSTl9JTkZPICIlcyBFbnRlclxuIixfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzIEVudGVyXG4iLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwicHJvYmUiKTsKIAlpZiAoIWdldF9kZXZpY2UoJmNnZGV2LT5kZXYpKQpAQCAtMzEzLDcgKzMxMyw3IEBACiAJCXByb2JlX2Vycm9yKGNnZGV2KTsKIAkJcHV0X2RldmljZSgmY2dkZXYtPmRldik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgJXMgJXMgRXhpdCBMaW5lICVkIFxuIiwKLQkJCWNnZGV2LT5jZGV2WzBdLT5kZXYuYnVzX2lkLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQljZ2Rldi0+Y2RldlswXS0+ZGV2LmJ1c19pZCxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAJCUNMQVdfREJGX1RFWFRfKDIsc2V0dXAsInByb2JleCVkIiwtRU5PTUVNKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMzIzLDcgKzMyMyw3IEBACiAgICAgICAgICAgICAgICAgcHJvYmVfZXJyb3IoY2dkZXYpOwogCQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSAlcyAlcyBFeGl0IExpbmUgJWQgXG4iLAotCQkJY2dkZXYtPmNkZXZbMF0tPmRldi5idXNfaWQsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCWNnZGV2LT5jZGV2WzBdLT5kZXYuYnVzX2lkLF9fZnVuY19fLF9fTElORV9fKTsKIAkJQ0xBV19EQkZfVEVYVF8oMixzZXR1cCwicHJvYmV4JWQiLC1FTk9NRU0pOwogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwogICAgICAgICB9CkBAIC0zNDAsNyArMzQwLDcgQEAKIAkJcHJvYmVfZXJyb3IoY2dkZXYpOwogCQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWRkX2ZpbGVzIGZhaWxlZCAlcyAlcyBFeGl0IExpbmUgJWQgXG4iLAotCQkJY2dkZXYtPmNkZXZbMF0tPmRldi5idXNfaWQsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCWNnZGV2LT5jZGV2WzBdLT5kZXYuYnVzX2lkLF9fZnVuY19fLF9fTElORV9fKTsKIAkJQ0xBV19EQkZfVEVYVF8oMixzZXR1cCwicHJvYmV4JWQiLHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTM1MSw3ICszNTEsNyBAQAogCWNnZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBwcml2cHRyOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICJjbGF3OiVzIGV4aXQgb24gbGluZSAlZCwgIgotCQkicmMgPSAwXG4iLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCSJyYyA9IDBcbiIsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJwcmJleHQgMCIpOwogCkBAIC0zNzEsNyArMzcxLDcgQEAKICAgICAgICAgc3RydWN0IGNoYmsgKnBfY2g7CiAKICNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgZW50ZXJcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgZW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiY2xhd190eCIpOwogICAgICAgICBwX2NoPSZwcml2cHRyLT5jaGFubmVsW1dSSVRFXTsKQEAgLTM4MSw3ICszODEsNyBAQAogICAgICAgICAgICAgICAgIHByaXZwdHItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBleGl0IG9uIGxpbmUgJWQsIHJjID0gRUlPXG4iLAotCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkJZGV2LT5uYW1lLF9fZnVuY19fLCBfX0xJTkVfXyk7CiAjZW5kaWYKIAkJQ0xBV19EQkZfVEVYVF8oMix0cmFjZSwiY2xhd3R4JWQiLC1FSU8pOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHBfY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBleGl0IG9uIGxpbmUgJWQsIHJjID0gJWRcbiIsCi0JCWRldi0+bmFtZSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgcmMpOworCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywgcmMpOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVF8oNCx0cmFjZSwiY2xhd3R4JWQiLHJjKTsKICAgICAgICAgcmV0dXJuIHJjOwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAjaWZkZWYgSU9UUkFDRQogCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBQYWNrZWQgJWQgbGVuICVkXG4iLAogCQkJcF9lbnYtPm5kZXYtPm5hbWUsCi0JCQlfX0ZVTkNUSU9OX18scGt0X2NudCxuZXdfc2tiLT5sZW4pOworCQkJX19mdW5jX18scGt0X2NudCxuZXdfc2tiLT5sZW4pOwogI2VuZGlmCiAJfQogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiUGFja1NLQngiKTsKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCXN0cnVjdCBjbGF3X3ByaXZiayAgKnByaXZwdHI9ZGV2LT5wcml2OwogCWludCBidWZmX3NpemU7CiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXIgIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAidmFyaWFibGUgZGV2ID1cbiIpOwpAQCAtNDkxLDE0ICs0OTEsMTQgQEAKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjPUVJTlZBTFxuIiwKIAkJZGV2LT5uYW1lLAotCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJX19mdW5jX18sIF9fTElORV9fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwogICAgICAgICB9CiAgICAgICAgIGRldi0+bXR1ID0gbmV3X210dTsKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLGRldi0+bmFtZSwKLQlfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlfX2Z1bmNfXywgX19MSU5FX18pOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAwOwogfSAgLyogICBlbmQgb2YgY2xhd19jaGFuZ2VfbXR1ICovCkBAIC01MjIsNyArNTIyLDcgQEAKICAgICAgICAgc3RydWN0IGNjd2JrICpwX2J1ZjsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlciAgXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwib3BlbiIpOwogCWlmICghZGV2IHx8IChkZXYtPm5hbWVbMF0gPT0gMHgwMCkpIHsKQEAgLTUzNyw3ICs1MzcsNyBAQAogICAgICAgICAJaWYgKHJjKSB7CiAgICAgICAgICAgICAgICAgCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZCwgcmM9RU5PTUVNXG4iLAogCQkJZGV2LT5uYW1lLAotCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCQlfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJQ0xBV19EQkZfVEVYVCgyLHRyYWNlLCJvcGVubWVtIik7CiAgICAgICAgICAgICAgICAgCXJldHVybiAtRU5PTUVNOwogICAgICAgICAJfQpAQCAtNjYxLDcgKzY2MSw3IEBACiAgICAgICAgICAgICAgICAgY2xhd19jbGVhcl9idXN5KGRldik7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkLCByYz1FSU9cbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCUNMQVdfREJGX1RFWFQoMix0cmFjZSwib3BlbiBFSU8iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKQEAgLTY3Myw3ICs2NzMsNyBAQAogCiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZCwgcmM9MFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIm9wZW5vayIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTY5Niw3ICs2OTYsNyBAQAogCiAKICNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXMgZW50ZXIgIFxuIixfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzIGVudGVyICBcbiIsX19mdW5jX18pOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJjbGF3aXJxIik7CiAgICAgICAgIC8qIEJ5cGFzcyBhbGwgJ3Vuc29saWNpdGVkIGludGVycnVwdHMnICovCkBAIC03MDYsNyArNzA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNkZXYtPmRldi5idXNfaWQsaXJiLT5zY3N3LmNzdGF0LCBpcmItPnNjc3cuZHN0YXQpOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImNsYXc6ICVzKCkgIgotCQkJImV4aXQgb24gbGluZSAlZFxuIixfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJImV4aXQgb24gbGluZSAlZFxuIixfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAkJQ0xBV19EQkZfVEVYVCgyLHRyYWNlLCJiYWRpcnEiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC03NTIsNyArNzUyLDcgQEAKICNlbmRpZgogI2lmZGVmIEZVTkNUUkFDRQogCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCUNMQVdfREJGX1RFWFQoMix0cmFjZSwiY2hhbmNoayIpOwogICAgICAgICAgICAgICAgIC8qIHJldHVybjsgKi8KQEAgLTc3Nyw3ICs3NzcsNyBAQAogCSAgICAgCQkoU0NTV19TVENUTF9BTEVSVF9TVEFUVVMgfCBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpKSB7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNzg4LDcgKzc4OCw3IEBACiAjZW5kaWYKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInN0b3AiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTgwNCw3ICs4MDQsNyBAQAogCSAgICAgCQkoU0NTV19TVENUTF9BTEVSVF9TVEFUVVMgfCBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpKSB7CiAjaWZkZWYgRlVOQ1RSQUNFCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiaGFsdGlvIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTgzOCw3ICs4MzgsNyBAQAogI2VuZGlmCiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJoYWx0aW8iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTg1OCw3ICs4NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAjaWZkZWYgRlVOQ1RSQUNFCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCQkJCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIm5vdHJkeSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTg3NCw3ICs4NzQsNyBAQAogCQkJCX0KICNpZmRlZiBGVU5DVFJBQ0UKIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJQQ0lfcmVhZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC04ODUsNyArODg1LDcgQEAKIAkgICAgIAkJIChTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkpIHsKICNpZmRlZiBGVU5DVFJBQ0UKIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJTUGVuZF9yZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05MDYsNyArOTA2LDcgQEAKICNlbmRpZgogI2lmZGVmIEZVTkNUUkFDRQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiUmRJUlFYaXQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTkyOSw3ICs5MjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAjaWZkZWYgRlVOQ1RSQUNFCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCQkJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwicnN0cnR3cnQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTQ2LDcgKzk0Niw3IEBACiAJICAgICAJCShTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkpIHsKICNpZmRlZiBGVU5DVFJBQ0UKIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJ3cml0ZVVFIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTk2OSw3ICs5NjksNyBAQAogI2VuZGlmCiAjaWZkZWYgRlVOQ1RSQUNFCiAJCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCQkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJTdFd0RXhpdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTc4LDcgKzk3OCw3IEBACiAJCQkJInN0YXRlPSVkXG4iLGRldi0+bmFtZSxwX2NoLT5jbGF3X3N0YXRlKTsKICNpZmRlZiBGVU5DVFJBQ0UKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCQlDTEFXX0RCRl9URVhUKDIsdHJhY2UsImJhZElSUSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTAwMSw3ICsxMDAxLDcgQEAKIAlwX2NoID0gKHN0cnVjdCBjaGJrICopIGRhdGE7CiAgICAgICAgIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXBfY2gtPm5kZXY7CiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXIgIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIHBfY2ggPVxuIixkZXYtPm5hbWUpOwpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIAlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIlRza2xldFh0Iik7CiAjaWZkZWYgRlVOQ1RSQUNFCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiB9ICAgICAgIC8qICAgIGVuZCBvZiBjbGF3X2lycV9iaCAgICAqLwpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKICAgICAgICAgaWYgKCFwcml2cHRyKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlciAgXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwicmVsZWFzZSIpOwogI2lmZGVmIERFQlVHTVNHCkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogCWlmKHByaXZwdHItPmJ1ZmZzX2FsbG9jICE9IDEpIHsKICNpZmRlZiBGVU5DVFJBQ0UKIAlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwibm9uZTJmcmUiKTsKIAkJcmV0dXJuIDA7CkBAIC0xMTcxLDcgKzExNzEsNyBAQAogICAgICAgICB9CiAjaWZkZWYgRlVOQ1RSQUNFCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwicmxzZXhpdCIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTExOTIsNyArMTE5Miw3IEBACiAKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICBwcmludGsoS0VSTl9JTkZPICJjbGF3OiB2YXJpYWJsZSBwX2NoID1cbiIpOwogICAgICAgICBkdW1waXQoKGNoYXIgKikgcF9jaCwgc2l6ZW9mKHN0cnVjdCBjaGJrKSk7CiAjZW5kaWYKQEAgLTEyMDAsMjAgKzEyMDAsMjAgQEAKICAgICAgICAgaWYgKHBfY2gtPmNsYXdfc3RhdGUgPT0gQ0xBV19TVE9QKSB7CiAjaWZkZWYgRlVOQ1RSQUNFCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogICAgICAgICAJcmV0dXJuOwogICAgICAgICB9CiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKCBLRVJOX0lORk8gIiVzOiVzICBzdGF0ZS0lMDJ4XG4iICwKIAkJZGV2LT5uYW1lLAotCQlfX0ZVTkNUSU9OX18sCisJCV9fZnVuY19fLAogCQlwX2NoLT5jbGF3X3N0YXRlKTsKICNlbmRpZgogCWNsYXdfc3RydF9vdXRfSU8oIGRldiApOwogI2lmZGVmIEZVTkNUUkFDRQogCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInJ0cnlfeGl0Iik7CiAgICAgICAgIHJldHVybjsKQEAgLTEyMzUsNyArMTIzNSw3IEBACiAJaW50CXJjOwogCiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIscF9jaC0+bmRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIscF9jaC0+bmRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBwX2NoID1cbiIscF9jaC0+bmRldi0+bmFtZSk7CiAgICAgICAgIGR1bXBpdCgoY2hhciAqKSBwX2NoLCBzaXplb2Yoc3RydWN0IGNoYmspKTsKICNlbmRpZgpAQCAtMTI2Miw3ICsxMjYyLDcgQEAKIAogI2lmZGVmIEZVTkNUUkFDRQogCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogfSAgICAgIC8qIGVuZCBvZiBjbGF3X3dyaXRlX25leHQgICAgICAqLwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKIGNsYXdfdGltZXIgKCBzdHJ1Y3QgY2hiayAqIHBfY2ggKQogewogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRyeVxuIixwX2NoLT5uZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50cnlcbiIscF9jaC0+bmRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiB2YXJpYWJsZSBwX2NoID1cbiIscF9jaC0+bmRldi0+bmFtZSk7CiAgICAgICAgIGR1bXBpdCgoY2hhciAqKSBwX2NoLCBzaXplb2Yoc3RydWN0IGNoYmspKTsKICNlbmRpZgpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKICAgICAgICAgd2FrZV91cCgmcF9jaC0+d2FpdCk7CiAjaWZkZWYgRlVOQ1RSQUNFCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlwX2NoLT5uZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCXBfY2gtPm5kZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKIH0gICAgICAvKiBlbmQgb2YgY2xhd190aW1lciAgKi8KQEAgLTEzMTIsNyArMTMxMiw3IEBACiAJaW50CW9yZGVyX29mX21hZz0xOwkJLyogYXNzdW1lIDIgcGFnZXMgKi8KIAlpbnQJbnVtcD0yOwogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcyBFbnRlciBwYWdlcyA9ICVkIFxuIixfX0ZVTkNUSU9OX18sbnVtX29mX3BhZ2VzKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcyBFbnRlciBwYWdlcyA9ICVkIFxuIixfX2Z1bmNfXyxudW1fb2ZfcGFnZXMpOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVF8oNSx0cmFjZSwicGFnZXMlZCIsbnVtX29mX3BhZ2VzKTsKIAlpZiAobnVtX29mX3BhZ2VzID09IDEpICAge3JldHVybiAwOyB9ICAvKiBtYWduaXR1ZGUgb2YgMCA9IDEgcGFnZSAqLwpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIAlpZiAob3JkZXJfb2ZfbWFnID4gOSkgeyBvcmRlcl9vZl9tYWcgPSA5OyB9ICAvKiBJIGtub3cgaXQncyBwYXJhbm9pZCAqLwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcyBFeGl0IG9uIGxpbmUgJWQsIG9yZGVyID0gJWRcbiIsCi0JX19GVU5DVElPTl9fLF9fTElORV9fLCBvcmRlcl9vZl9tYWcpOworCV9fZnVuY19fLF9fTElORV9fLCBvcmRlcl9vZl9tYWcpOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVF8oNSx0cmFjZSwibWFnJWQiLG9yZGVyX29mX21hZyk7CiAJcmV0dXJuIG9yZGVyX29mX21hZzsKQEAgLTEzNDksNyArMTM0OSw3IEBACiAgICAgICAgIHN0cnVjdCBjY3diayogIHBfYnVmOwogI2VuZGlmCiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXIgIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiZGV2XG4iKTsKQEAgLTEzNjksNyArMTM2OSw3IEBACiAgICAgICAgIGlmICggcF9maXJzdD09TlVMTCkgewogI2lmZGVmIEZVTkNUUkFDRQogCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAkJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJhZGRleGl0Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDAwLDkgKzE0MDAsOSBAQAogICAgICAgICBpZiAoIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0ID09TlVMTCApIHsKICNpZmRlZiBERUJVR01TRwogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIHBfcmVhZF9hY3RpdmVfZmlyc3QgPT0gTlVMTCBcbiIsCi0JCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgUmVhZCBhY3RpdmUgZmlyc3QvbGFzdCBjaGFuZ2VkIFxuIiwKLQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0PSBwX2ZpcnN0OyAgLyogICAgc2V0IG5ldyBmaXJzdCAqLwogICAgICAgICAgICAgICAgIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2xhc3QgPSBwX2xhc3Q7ICAgLyogICAgc2V0IG5ldyBsYXN0ICAqLwpAQCAtMTQxMSw3ICsxNDExLDcgQEAKIAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgUmVhZCBpbiBwcm9ncmVzcyBcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgLyogc2V0IHVwIFRJQyBjY3cgICovCiAgICAgICAgICAgICAgICAgdGVtcF9jY3cuY2RhPSAoX191MzIpX19wYSgmcF9maXJzdC0+cmVhZCk7CkBAIC0xNDUwLDE1ICsxNDUwLDE1IEBACiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0PXBfbGFzdDsKICAgICAgICAgfSAvKiBlbmQgb2YgaWYgKCBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdCA9PU5VTEwpICAqLwogI2lmZGVmIElPVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgIGR1bXAgcF9sYXN0IENDVyBCSyBcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgIGR1bXAgcF9sYXN0IENDVyBCSyBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgZHVtcGl0KChjaGFyICopcF9sYXN0LCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzICBkdW1wIHBfZW5kIENDVyBCSyBcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgIGR1bXAgcF9lbmQgQ0NXIEJLIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICBkdW1waXQoKGNoYXIgKilwX2VuZCwgc2l6ZW9mKHN0cnVjdCBlbmRjY3cpKTsKIAotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBkdW1wIHBfZmlyc3QgQ0NXIEJLIFxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczolcyBkdW1wIHBfZmlyc3QgQ0NXIEJLIFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICBkdW1waXQoKGNoYXIgKilwX2ZpcnN0LCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7CiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIER1bXAgQWN0aXZlIENDVyBjaGFpbiBcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX3JlYWRfYWN0aXZlX2ZpcnN0OwogICAgICAgICB3aGlsZSAocF9idWYhPU5VTEwpIHsKICAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIgKilwX2J1Ziwgc2l6ZW9mKHN0cnVjdCBjY3diaykpOwpAQCAtMTQ2Nyw3ICsxNDY3LDcgQEAKICNlbmRpZgogI2lmZGVmIEZVTkNUUkFDRQogCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDQsdHJhY2UsImFkZGV4aXQiKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDgzLDcgKzE0ODMsNyBAQAogewogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGVudGVyICBcbiIsCi0JCWNkZXYtPmRldi5idXNfaWQsX19GVU5DVElPTl9fKTsKKwkJY2Rldi0+ZGV2LmJ1c19pZCxfX2Z1bmNfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDQsdHJhY2UsImNjd3JldCIpOwogI2lmZGVmIERFQlVHTVNHCkBAIC0xNTE2LDcgKzE1MTYsNyBAQAogICAgICAgICB9CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZXhpdCBvbiBsaW5lICVkXG4iLAotCQljZGV2LT5kZXYuYnVzX2lkLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWNkZXYtPmRldi5idXNfaWQsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJjY3dyZXQiKTsKIH0gICAgLyogICAgZW5kIG9mIGNjd19jaGVja19yZXR1cm5fY29kZSAgICovCkBAIC0xNTMxLDcgKzE1MzEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwX2NoLT5uZGV2OwogCiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZW50ZXJcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiBlbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIGRldiA9XG4iLGRldi0+bmFtZSk7CkBAIC0xNTc4LDcgKzE1NzgsNyBAQAogCiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIGV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIH0gICAvKiAgICBlbmQgb2YgY2N3X2NoZWNrX3VuaXRfY2hlY2sgICAgKi8KIApAQCAtMTcwNiw3ICsxNzA2LDcgQEAKIAlpbnQgICAgcmM9MDsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyA+IGVudGVyICBcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgPiBlbnRlciAgXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDIsc2V0dXAsImZpbmRsaW5rIik7CiAjaWZkZWYgREVCVUdNU0cKQEAgLTE3MzksNyArMTczOSw3IEBACiAKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gMDsKIH0gICAgLyogICAgZW5kIG9mIGZpbmRfbGluayAgICAqLwpAQCAtMTc3Myw3ICsxNzczLDcgQEAKICAgICAgICAgc3RydWN0IGNjd2JrICAgICAgICAgICAgICAgICAgICpwX2J1ZjsKICNlbmRpZgogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGVudGVyXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiaHdfdHgiKTsKICNpZmRlZiBERUJVR01TRwpAQCAtMTc4Nyw3ICsxNzg3LDcgQEAKICAgICAgICAgcF9jaD0oc3RydWN0IGNoYmsgKikmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAJcF9lbnYgPXByaXZwdHItPnBfZW52OwogI2lmZGVmIElPVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZHVtcCBza19idWZmICBcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZHVtcCBza19idWZmICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgZHVtcGl0KChjaGFyICopc2tiICxzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTsKICNlbmRpZgogCWNsYXdfZnJlZV93cnRfYnVmKGRldik7CS8qIENsZWFuIHVwIGZyZWUgY2hhaW4gaWYgcG9zaWJsZSAqLwpAQCAtMTg1MSw4ICsxODUxLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogICAgICBTZWUgaG93IG1hbnkgd3JpdGUgYnVmZmVycyBhcmUgcmVxdWlyZWQgdG8gaG9sZCB0aGlzIGRhdGEgKi8KLSAgICAgICAgbnVtQnVmZmVycz0gKCBza2ItPmxlbiArIHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplIC0gMSkgLwotCQkJKCBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSk7CisJbnVtQnVmZmVycyA9IERJVl9ST1VORF9VUChza2ItPmxlbiwgcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpOwogCiAgICAgICAgIC8qICAgICAgSWYgdGhhdCBudW1iZXIgb2YgYnVmZmVycyBpc24ndCBhdmFpbGFibGUsIGdpdmUgdXAgZm9yIG5vdyAqLwogICAgICAgICBpZiAocHJpdnB0ci0+d3JpdGVfZnJlZV9jb3VudCA8IG51bUJ1ZmZlcnMgfHwKQEAgLTE4NzgsNyArMTg3Nyw3IEBACiAgICAgICAgIHdoaWxlIChsZW5fb2ZfZGF0YSA+IDApIHsKICNpZmRlZiBERUJVR01TRwogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIGxlbmd0aC1vZi1kYXRhIGlzICVsZCBcbiIsCi0JCQlkZXYtPm5hbWUgLF9fRlVOQ1RJT05fXyxsZW5fb2ZfZGF0YSk7CisJCQlkZXYtPm5hbWUgLF9fZnVuY19fLGxlbl9vZl9kYXRhKTsKICAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIgKilwRGF0YUFkZHJlc3MgLDY0KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHBfdGhpc19jY3c9cHJpdnB0ci0+cF93cml0ZV9mcmVlX2NoYWluOyAgLyogZ2V0IGEgYmxvY2sgKi8KQEAgLTE5MTQsNyArMTkxMyw3IEBACiAgICAgICAgICAgICAgICAgcF9sYXN0X2Njdz1wX3RoaXNfY2N3OyAgICAgIC8qIHNhdmUgbmV3IGxhc3QgYmxvY2sgKi8KICNpZmRlZiBJT1RSQUNFCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gQ0NXIGFuZCBCdWZmZXIgJWxkIGJ5dGVzIGxvbmcgXG4iLAotCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxieXRlc0luVGhpc0J1ZmZlcik7CisJCQlkZXYtPm5hbWUsX19mdW5jX18sYnl0ZXNJblRoaXNCdWZmZXIpOwogICAgICAgICAgICAgICAgIGR1bXBpdCgoY2hhciAqKXBfdGhpc19jY3csIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKICAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIgKilwX3RoaXNfY2N3LT5wX2J1ZmZlciwgNjQpOwogI2VuZGlmCkBAIC0xOTk5LDcgKzE5OTgsNyBAQAogCiAjaWZkZWYgSU9UUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+ICBEdW1wIEFjdGl2ZSBDQ1cgY2hhaW4gXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgcF9idWY9cHJpdnB0ci0+cF93cml0ZV9hY3RpdmVfZmlyc3Q7CiAgICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewogICAgICAgICAgICAgICAgIGR1bXBpdCgoY2hhciAqKXBfYnVmLCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7CkBAIC0yMDE5LDcgKzIwMTgsNyBAQAogICAgICAgICAvKiAgICAgIGlmIHdyaXRlIGZyZWUgY291bnQgaXMgemVybyAsIHNldCBOT0JVRkZFUiAgICAgICAqLwogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZnJlZV9jb3VudCBpcyAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJZGV2LT5uYW1lLF9fZnVuY19fLAogCQkoaW50KSBwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50ICk7CiAjZW5kaWYKIAlpZiAocHJpdnB0ci0+d3JpdGVfZnJlZV9jb3VudD09MCkgewpAQCAtMjAzMCw3ICsyMDI5LDcgQEAKIERvbmU6CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZXhpdCBvbiBsaW5lICVkLCByYyA9ICVkIFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXywgcmMpOworCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18sIHJjKTsKICNlbmRpZgogCXJldHVybihyYyk7CiB9ICAgIC8qICAgIGVuZCBvZiBjbGF3X2h3X3R4ICAgICovCkBAIC0yMDY0LDcgKzIwNjMsNyBAQAogICAgICAgICBhZGRyX3QgICByZWFsX1RJQ19hZGRyZXNzOwogICAgICAgICBpbnQgaSxqOwogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBlbnRlciAgXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIGVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiaW5pdF9jY3ciKTsKICNpZmRlZiBERUJVR01TRwpAQCAtMjA5OCwxNSArMjA5NywxNSBAQAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpICIKIAkJImNjd19ibG9ja3NfcmVxdWlyZWQ9JWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sCisJCWRldi0+bmFtZSxfX2Z1bmNfXywKIAkJY2N3X2Jsb2Nrc19yZXF1aXJlZCk7CiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpICIKIAkJIlBBR0VfU0laRT0weCV4XG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLAorCQlkZXYtPm5hbWUsX19mdW5jX18sCiAJCSh1bnNpZ25lZCBpbnQpUEFHRV9TSVpFKTsKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiAiCiAJCSJQQUdFX01BU0s9MHgleFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJZGV2LT5uYW1lLF9fZnVuY19fLAogCQkodW5zaWduZWQgaW50KVBBR0VfTUFTSyk7CiAjZW5kaWYKICAgICAgICAgLyoKQEAgLTIxMTQsMTUgKzIxMTMsMTQgQEAKICAgICAgICAgKi8KICAgICAgICAgY2N3X2Jsb2Nrc19wZXJwYWdlPSBQQUdFX1NJWkUgLyAgQ0NXQktfU0laRTsKICAgICAgICAgY2N3X3BhZ2VzX3JlcXVpcmVkPQotCQkoY2N3X2Jsb2Nrc19yZXF1aXJlZCtjY3dfYmxvY2tzX3BlcnBhZ2UgLTEpIC8KLQkJCSBjY3dfYmxvY2tzX3BlcnBhZ2U7CisJCURJVl9ST1VORF9VUChjY3dfYmxvY2tzX3JlcXVpcmVkLCBjY3dfYmxvY2tzX3BlcnBhZ2UpOwogCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiBjY3dfYmxvY2tzX3BlcnBhZ2U9JWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sCisJCWRldi0+bmFtZSxfX2Z1bmNfXywKIAkJY2N3X2Jsb2Nrc19wZXJwYWdlKTsKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiBjY3dfcGFnZXNfcmVxdWlyZWQ9JWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sCisJCWRldi0+bmFtZSxfX2Z1bmNfXywKIAkJY2N3X3BhZ2VzX3JlcXVpcmVkKTsKICNlbmRpZgogICAgICAgICAvKgpAQCAtMjEzMSw1NyArMjEyOSw1NiBAQAogCSAqIHByb3ZpZGUgZ29vZCBwZXJmb3JtYW5jZS4gV2l0aCBwYWNraW5nIGJ1ZmZlcnMgc3VwcG9ydCAzMmsKIAkgKiBidWZmZXJzIGFyZSB1c2VkLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUgPCBQQUdFX1NJWkUpIHsKLSAgICAgICAgICAgIGNsYXdfcmVhZHNfcGVycGFnZT0gUEFHRV9TSVpFIC8gcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZTsKLSAgICAgICAgICAgIGNsYXdfcmVhZF9wYWdlcz0gKHByaXZwdHItPnBfZW52LT5yZWFkX2J1ZmZlcnMgKwotCSAgICAJY2xhd19yZWFkc19wZXJwYWdlIC0xKSAvIGNsYXdfcmVhZHNfcGVycGFnZTsKKwlpZiAocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSA8IFBBR0VfU0laRSkgeworCQljbGF3X3JlYWRzX3BlcnBhZ2UgPSBQQUdFX1NJWkUgLyBwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOworCQljbGF3X3JlYWRfcGFnZXMgPSBESVZfUk9VTkRfVVAocHJpdnB0ci0+cF9lbnYtPnJlYWRfYnVmZmVycywKKwkJCQkJCWNsYXdfcmVhZHNfcGVycGFnZSk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsgICAgICAgLyogPiBvciBlcXVhbCAgKi8KLSAgICAgICAgICAgIHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJyZWFkPQotCSAgICAJKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKLSAgICAgICAgICAgIGNsYXdfcmVhZF9wYWdlcz0KLQkgICAgCXByaXZwdHItPnBfZW52LT5yZWFkX2J1ZmZlcnMgKiBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZDsKKwkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQgPQorCQkJRElWX1JPVU5EX1VQKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUsIFBBR0VfU0laRSk7CisJCWNsYXdfcmVhZF9wYWdlcyA9IHByaXZwdHItPnBfZW52LT5yZWFkX2J1ZmZlcnMgKgorCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZDsKICAgICAgICAgIH0KICAgICAgICAgaWYgKHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplIDwgUEFHRV9TSVpFKSB7Ci0gICAgICAgICAgICBjbGF3X3dyaXRlc19wZXJwYWdlPQotCSAgICAJUEFHRV9TSVpFIC8gcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7Ci0gICAgICAgICAgICBjbGF3X3dyaXRlX3BhZ2VzPQotCSAgICAJKHByaXZwdHItPnBfZW52LT53cml0ZV9idWZmZXJzICsgY2xhd193cml0ZXNfcGVycGFnZSAtMSkgLwotCQkJY2xhd193cml0ZXNfcGVycGFnZTsKKwkJY2xhd193cml0ZXNfcGVycGFnZSA9CisJCQlQQUdFX1NJWkUgLyBwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKKwkJY2xhd193cml0ZV9wYWdlcyA9IERJVl9ST1VORF9VUChwcml2cHRyLT5wX2Vudi0+d3JpdGVfYnVmZmVycywKKwkJCQkJCWNsYXdfd3JpdGVzX3BlcnBhZ2UpOwogCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7ICAgICAgLyogPiAgb3IgZXF1YWwgICovCi0gICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGU9Ci0JICAgIAkgKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKLSAgICAgICAgICAgIGNsYXdfd3JpdGVfcGFnZXM9Ci0JICAgICAJcHJpdnB0ci0+cF9lbnYtPndyaXRlX2J1ZmZlcnMgKiBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGU7CisJCXByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJ3cml0ZSA9CisJCQlESVZfUk9VTkRfVVAocHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJY2xhd193cml0ZV9wYWdlcyA9IHByaXZwdHItPnBfZW52LT53cml0ZV9idWZmZXJzICoKKwkJCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcndyaXRlOwogICAgICAgICB9CiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgaWYgKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUgPCBQQUdFX1NJWkUpIHsKICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIHJlYWRzX3BlcnBhZ2U9JWRcbiIsCi0JICAgIAlkZXYtPm5hbWUsX19GVU5DVElPTl9fLAorCQlkZXYtPm5hbWUsX19mdW5jX18sCiAJCWNsYXdfcmVhZHNfcGVycGFnZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBwYWdlc19wZXJyZWFkPSVkXG4iLAotCSAgICAJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJZGV2LT5uYW1lLF9fZnVuY19fLAogCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCk7CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgcmVhZF9wYWdlcz0lZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJZGV2LT5uYW1lLF9fZnVuY19fLAogCQljbGF3X3JlYWRfcGFnZXMpOwogICAgICAgICBpZiAocHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUgPCBQQUdFX1NJWkUpIHsKICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIHdyaXRlc19wZXJwYWdlPSVkXG4iLAotCSAgICAJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJZGV2LT5uYW1lLF9fZnVuY19fLAogCQljbGF3X3dyaXRlc19wZXJwYWdlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIHBhZ2VzX3BlcndyaXRlPSVkXG4iLAotCSAgICAJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJZGV2LT5uYW1lLF9fZnVuY19fLAogCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUpOwogICAgICAgICB9CiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIHdyaXRlX3BhZ2VzPSVkXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLAorCQlkZXYtPm5hbWUsX19mdW5jX18sCiAJCWNsYXdfd3JpdGVfcGFnZXMpOwogI2VuZGlmCiAKQEAgLTIxOTcsMTIgKzIxOTQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpICAiCiAJCQkJIl9fZ2V0X2ZyZWVfcGFnZXMgZm9yIENDV3MgZmFpbGVkIDogIgogCQkJCSJwYWdlcyBpcyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJCQlkZXYtPm5hbWUsX19mdW5jX18sCiAJCQkJY2N3X3BhZ2VzX3JlcXVpcmVkICk7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+ICIKIAkJCQkiZXhpdCBvbiBsaW5lICVkLCByYyA9IEVOT01FTVxuIiwKLQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLAorCQkJCWRldi0+bmFtZSxfX2Z1bmNfXywKIAkJCQkgX19MSU5FX18pOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKQEAgLTIyMjEsNyArMjIxOCw3IEBACiAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSBlbmRpbmcgQ0NXIGJsb2NrICAgICAgICovCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgYmVnaW4gaW5pdGlhbGl6ZSBlbmRpbmcgQ0NXIGJsb2Nrc1xuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKIAogICAgICAgICBwX2VuZGNjdz1wcml2cHRyLT5wX2VuZF9jY3c7CkBAIC0yMjc5LDcgKzIyNzYsNyBAQAogCiAjaWZkZWYgSU9UUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBkdW1wIGNsYXcgZW5kaW5nIENDVyBCSyBcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICBkdW1waXQoKGNoYXIgKilwX2VuZGNjdywgc2l6ZW9mKHN0cnVjdCBlbmRjY3cpKTsKICNlbmRpZgogCkBAIC0yMjkwLDcgKzIyODcsNyBAQAogCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgIEJlZ2luIGJ1aWxkIGEgY2hhaW4gb2YgQ0NXIGJ1ZmZlciBcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAgICAgICAgIHBfYnVmZj1wcml2cHRyLT5wX2J1ZmZfY2N3OwogCkBAIC0yMzA5LDcgKzIzMDYsNyBAQAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpICIKIAkJIkVuZCBidWlsZCBhIGNoYWluIG9mIENDVyBidWZmZXIgXG4iLAotCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICBwX2J1Zj1wX2ZyZWVfY2hhaW47CiAgICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewogICAgICAgICAgICAgICAgIGR1bXBpdCgoY2hhciAqKXBfYnVmLCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7CkBAIC0yMzI0LDcgKzIzMjEsNyBAQAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpICIKIAkJIkJlZ2luIGluaXRpYWxpemUgQ2xhd1NpZ25hbEJsb2NrIFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKICAgICAgICAgaWYgKHByaXZwdHItPnBfY2xhd19zaWduYWxfYmxrPT1OVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9jbGF3X3NpZ25hbF9ibGs9cF9mcmVlX2NoYWluOwpAQCAtMjMzNyw3ICsyMzM0LDcgQEAKICNpZmRlZiBERUJVR01TRwogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+ICBFbmQgaW5pdGlhbGl6ZSAiCiAJIAkiQ2xhd1NpZ25hbEJsb2NrXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgZHVtcGl0KChjaGFyICopcHJpdnB0ci0+cF9jbGF3X3NpZ25hbF9ibGssIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKICNlbmRpZgogCkBAIC0yMzUyLDE0ICsyMzQ5LDE0IEBACiAgICAgICAgICAgICAgICAgaWYgKHByaXZwdHItPnBfYnVmZl93cml0ZT09TlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgX19nZXRfZnJlZV9wYWdlcyBmb3Igd3JpdGUiCiAJCQkJIiBidWZzIGZhaWxlZCA6IGdldCBpcyBmb3IgJWQgcGFnZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSxfX0ZVTkNUSU9OX18sY2xhd193cml0ZV9wYWdlcyApOworCQkJCWRldi0+bmFtZSxfX2Z1bmNfXyxjbGF3X3dyaXRlX3BhZ2VzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXZwdHItPnBfYnVmZl9jY3csCiAJCQkgICAoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT5wX2J1ZmZfY2N3X251bSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9idWZmX2Njdz1OVUxMOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiBleGl0IG9uIGxpbmUgJWQsIgogCQkJIAkicmMgPSBFTk9NRU1cbiIsCi0JCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgICAgICAgICAgfQpAQCAtMjM3Miw3ICsyMzY5LDcgQEAKIAkJCWNjd19wYWdlc19yZXF1aXJlZCAqIFBBR0VfU0laRSk7CiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBCZWdpbiBidWlsZCBjbGF3IHdyaXRlIGZyZWUgIgotCQkJImNoYWluIFxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCSJjaGFpbiBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHByaXZwdHItPnBfd3JpdGVfZnJlZV9jaGFpbj1OVUxMOwogCkBAIC0yNDEyLDE0ICsyNDA5LDE0IEBACiAjaWZkZWYgSU9UUkFDRQogICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIF9fZ2V0X2ZyZWVfcGFnZXMgIgogCQkgICAgImZvciB3cml0ZXMgYnVmOiBnZXQgZm9yICVkIHBhZ2VzXG4iLAotCQkgICAgZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJICAgIGRldi0+bmFtZSxfX2Z1bmNfXywKIAkJICAgIHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJ3cml0ZSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICBpZiAocF9idWZmPT1OVUxMKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBfX2dldF9mcmVlX3BhZ2VzICIKIAkJCSAJImZvciB3cml0ZXMgYnVmIGZhaWxlZCA6IGdldCBpcyBmb3IgJWQgcGFnZXNcbiIsCiAJCQkJZGV2LT5uYW1lLAotCQkJCV9fRlVOQ1RJT05fXywKKwkJCQlfX2Z1bmNfXywKIAkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHJpdnB0ci0+cF9idWZmX2NjdywKIAkJCSAgICAgIChpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKApAQCAtMjQzNiw3ICsyNDMzLDcgQEAKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBleGl0IG9uIGxpbmUgJWQsIHJjID0gRU5PTUVNXG4iLAogCQkJZGV2LT5uYW1lLAotCQkJX19GVU5DVElPTl9fLAorCQkJX19mdW5jX18sCiAJCQlfX0xJTkVfXyk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwpAQCAtMjQ2OSw3ICsyNDY2LDcgQEAKIAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzICBFbmQgYnVpbGQgY2xhdyB3cml0ZSBmcmVlIGNoYWluIFxuIiwKLQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX3dyaXRlX2ZyZWVfY2hhaW47CiAgICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewogICAgICAgICAgICAgICAgIGR1bXBpdCgoY2hhciAqKXBfYnVmLCBzaXplb2Yoc3RydWN0IGNjd2JrKSk7CkBAIC0yNDg4LDcgKzI0ODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgIgogCQkJIAkiX19nZXRfZnJlZV9wYWdlcyBmb3IgcmVhZCBidWYgZmFpbGVkIDogIgogCQkJIAkiZ2V0IGlzIGZvciAlZCBwYWdlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxjbGF3X3JlYWRfcGFnZXMgKTsKKwkJCQlkZXYtPm5hbWUsX19mdW5jX18sY2xhd19yZWFkX3BhZ2VzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXZwdHItPnBfYnVmZl9jY3csCiAJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCiAJCQkJCXByaXZwdHItPnBfYnVmZl9jY3dfbnVtKSk7CkBAIC0yNTAwLDcgKzI0OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9idWZmX3dyaXRlPU5VTEw7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSA+IGV4aXQgb24gbGluZSAlZCwgcmMgPSIKLQkJCQkiIEVOT01FTVxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCQkiIEVOT01FTVxuIixkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKICAgICAgICAgICAgICAgICB9CkBAIC0yNTEyLDcgKzI1MDksNyBAQAogICAgICAgICAgICAgICAgICovCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBCZWdpbiBidWlsZCBjbGF3IHJlYWQgZnJlZSBjaGFpbiBcbiIsCi0JCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBwX2J1ZmY9cHJpdnB0ci0+cF9idWZmX3JlYWQ7CiAgICAgICAgICAgICAgICAgZm9yIChpPTAgOyBpPCBwcml2cHRyLT5wX2Vudi0+cmVhZF9idWZmZXJzIDsgaSsrKSB7CkBAIC0yNTkzLDcgKzI1OTAsNyBAQAogCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgQmVnaW4gYnVpbGQgY2xhdyByZWFkIGZyZWUgY2hhaW4gXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIGZvciAoaT0wIDsgaTwgcHJpdnB0ci0+cF9lbnYtPnJlYWRfYnVmZmVycyA7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKF9fR0ZQX0RNQSwKQEAgLTI2MDEsNyArMjU5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocF9idWZmPT1OVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpIF9fZ2V0X2ZyZWVfcGFnZXMgZm9yIHJlYWQgIgogCQkJCQkiYnVmIGZhaWxlZCA6IGdldCBpcyBmb3IgJWQgcGFnZXNcbiIsCi0JCQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sCisJCQkJCWRldi0+bmFtZSxfX2Z1bmNfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXZwdHItPnBfYnVmZl9jY3csCiAJCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKHByaXZwdHItPnBfYnVmZl9jY3dfbnVtKSk7CkBAIC0yNjI1LDcgKzI2MjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX2J1ZmZfd3JpdGU9TlVMTDsKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZXhpdCBvbiBsaW5lICVkLCByYyA9IEVOT01FTVxuIiwKLQkJCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywKKwkJCQkJZGV2LT5uYW1lLF9fZnVuY19fLAogCQkJCQlfX0xJTkVfXyk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CkBAIC0yNjk4LDcgKzI2OTUsNyBAQAogICAgICAgICB9ICAgICAgIC8qICBwQnVmZnJlYWQgPSBOVUxMICovCiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiAgRW5kIGJ1aWxkIGNsYXcgcmVhZCBmcmVlIGNoYWluIFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgIHBfYnVmPXBfZmlyc3RfQ0NXQjsKICAgICAgICAgd2hpbGUgKHBfYnVmIT1OVUxMKSB7CiAgICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF9idWYsIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKQEAgLTI3MTAsNyArMjcwNyw3IEBACiAJcHJpdnB0ci0+YnVmZnNfYWxsb2MgPSAxOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBleGl0IG9uIGxpbmUgJWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAwOwogfSAgICAvKiAgICBlbmQgb2YgaW5pdF9jY3dfYmsgKi8KQEAgLTI3MjYsMTEgKzI3MjMsMTEgQEAKIHsKICAgc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyOwogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcyBlbnRlciAgXG4iLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZW50ZXIgIFxuIixfX2Z1bmNfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInByb2JlcnIiKTsKICNpZmRlZiBERUJVR01TRwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcyB2YXJpYWJsZSBjZ2RldiA9XG4iLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdmFyaWFibGUgY2dkZXYgPVxuIixfX2Z1bmNfXyk7CiAgICAgICAgIGR1bXBpdCgoY2hhciAqKSBjZ2Rldiwgc2l6ZW9mKHN0cnVjdCBjY3dncm91cF9kZXZpY2UpKTsKICNlbmRpZgogICAgICAgICBwcml2cHRyPShzdHJ1Y3QgY2xhd19wcml2YmsgKiljZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwpAQCAtMjc0NCw3ICsyNzQxLDcgQEAKICAgICAgICAgfQogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcyA+IGV4aXQgb24gbGluZSAlZFxuIiwKLQkJIF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCSBfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAogICAgICAgICByZXR1cm47CkBAIC0yNzc1LDcgKzI3NzIsNyBAQAogICAgICAgICBzdHJ1Y3QgY2hiayAqcF9jaCA9IE5VTEw7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcygpID4gZW50ZXIgIFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDIsc2V0dXAsImNsd19jbnRsIik7CiAjaWZkZWYgREVCVUdNU0cKQEAgLTI3OTcsNyArMjc5NCw3IEBACiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgPiAiCiAJCQkiZXhpdCBvbiBsaW5lICVkLCByYz0wXG4iLAotCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTMwNjAsNyArMzA1Nyw3IEBACiAKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgZXhpdCBvbiBsaW5lICVkLCByYyA9IDBcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMDgzLDcgKzMwODAsNyBAQAogICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAJCQkqc2tiOwogCiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzID4gZW50ZXIgIFxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczolcyA+IGVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwic25kY250bCIpOwogI2lmZGVmIERFQlVHTVNHCkBAIC0zMTQ2LDEwICszMTQzLDEwIEBACiAgICAgICAgIHNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBjbGF3Y3RsKSk7CiAgICAgICAgIGlmICghc2tiKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKCAgIiVzOiVzIGxvdyBvbiBtZW0sIHJldHVybmluZy4uLlxuIiwKLQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICNpZmRlZiBERUJVRwogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQsIHJjID0gRU5PTUVNXG4iLAotCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgIH0KQEAgLTMxNjUsNyArMzE2Miw3IEBACiAgICAgICAgIAljbGF3X2h3X3R4KHNrYiwgZGV2LCAwKTsKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzE4Myw3ICszMTgwLDcgQEAKICAgICAgICAgc3RydWN0IGNsYXdjdGwgCSAgICpwX2N0bDsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlciAgXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwic25kX2Nvbm4iKTsKICNpZmRlZiAgREVCVUdNU0cKQEAgLTMxOTYsNyArMzE5Myw3IEBACiAgICAgICAgIGlmICggcHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXA9PTB4MDAgKSB7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkLCByYyA9IDFcbiIsCi0JCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gcmM7CiAgICAgICAgIH0KQEAgLTMyMTIsNyArMzIwOSw3IEBACiAgICAgICAgCQkJSE9TVF9BUFBMX05BTUUsIHByaXZwdHItPnBfZW52LT5hcGlfdHlwZSk7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZCwgcmMgPSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXywgcmMpOworCQlkZXYtPm5hbWUsX19mdW5jX18sX19MSU5FX18sIHJjKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gcmM7CiAKQEAgLTMyMzEsNyArMzIyOCw3IEBACiAgICAgICAgIHN0cnVjdCBjb25uY21kICogIHBfY29ubmVjdDsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJzbmRfZHNjIik7CiAjaWZkZWYgIERFQlVHTVNHCkBAIC0zMjQ3LDcgKzMyNDQsNyBAQAogICAgICAgICAgICAgICAgIHBfY29ubmVjdC0+aG9zdF9uYW1lLCBwX2Nvbm5lY3QtPldTX25hbWUpOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjID0gJWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sIF9fTElORV9fLCByYyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXywgX19MSU5FX18sIHJjKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gcmM7CiB9ICAgICAvKiAgIGVuZCBvZiBjbGF3X3NuZF9kaXNjICAgICovCkBAIC0zMjY4LDcgKzMyNjUsNyBAQAogCiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiY2hrcmVzcCIpOwogI2lmZGVmIERFQlVHTVNHCkBAIC0zMjg4LDcgKzMyODUsNyBAQAogCQlwX2Vudi0+YWRhcHRlcl9uYW1lICApOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjID0gJWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18sIHJjKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fLCByYyk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHJjOwogfSAgICAgLyogICAgZW5kIG9mIGNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AgICAgKi8KQEAgLTMzMDQsNyArMzMwMSw3IEBACiAgICAgICAgIGludCByYzsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJjb25uX3JlcSIpOwogI2lmZGVmIERFQlVHTVNHCkBAIC0zMzE0LDcgKzMzMTEsNyBAQAogICAgICAgICByYz1jbGF3X3NuZF9jb25uX3JlcShkZXYsIDEpOwogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWQsIHJjID0gJWRcbiIsCi0JCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18sIHJjKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fLCByYyk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHJjOwogfSAgICAvKiAgIGVuZCBvZiBjbGF3X3N0cnRfY29ubl9yZXEgICAqLwpAQCAtMzMzMCwxMyArMzMyNywxMyBAQAogewogICAgICAgICBzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXZwdHI7CiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUKDQsdHJhY2UsInN0YXRzIik7CiAgICAgICAgIHByaXZwdHIgPSBkZXYtPnByaXY7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICZwcml2cHRyLT5zdGF0czsKIH0gICAgIC8qICAgZW5kIG9mIGNsYXdfc3RhdHMgICAqLwpAQCAtMzM2OSw3ICszMzY2LDcgQEAKIAlpbnQgICAgIHA9MDsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBlbnRlciAgXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIGVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwidW5wa3JlYWQiKTsKICAgICAgICAgcF9maXJzdF9jY3c9TlVMTDsKQEAgLTM0MTEsNyArMzQwOCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKChwX3RoaXNfY2N3LT5oZWFkZXIub3Bjb2RlICYgTU9SRV90b19DT01FX0ZMQUcpIT0wKSB7CiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAlcyA+IE1vcmVfdG9fY29tZSBpcyBPTlxuIiwKLQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgbXRjX3RoaXNfZnJtPTE7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocF90aGlzX2Njdy0+aGVhZGVyLmxlbmd0aCE9CkBAIC0zNDM4LDcgKzM0MzUsNyBAQAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBnb3RvIG5leHQgIgogCQkJCSJmcmFtZSBmcm9tIE1vcmV0b0NvbWVTa2lwIFxuIiwKLQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIE5leHRGcmFtZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDQ4LDcgKzM0NDUsNyBAQAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBnb3RvIG5leHQgIgogCQkJCSJmcmFtZSBmcm9tIGNsYXdfcHJvY2Vzc19jb250cm9sIFxuIiwKLQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAJCQlDTEFXX0RCRl9URVhUKDQsdHJhY2UsIlVucGtDbnRsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIE5leHRGcmFtZTsKQEAgLTM0NzEsNyArMzQ2OCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHByaXZwdHItPm10Y19sb2dpY2FsX2xpbms8MCkgewogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIG10Y19sb2dpY2FsX2xpbmsgPCAwICBcbiIsCi0JCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIC8qCkBAIC0zNDkwLDcgKzM0ODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzID4gZ290byBuZXh0ICIKIAkJCQkiZnJhbWUgZnJvbSBNb3JldG9Db21lU2tpcCBcbiIsCiAJCQkJZGV2LT5uYW1lLAotCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJX19mdW5jX18pOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgYnl0ZXNfdG9fbW92ICVkID4gKE1BWF9FTlZFTE9QRV8iCiAJCQkJIlNJWkUtcHJpdnB0ci0+bXRjX29mZnNldCAlZClcbiIsCiAJCQkJYnl0ZXNfdG9fbW92LChNQVhfRU5WRUxPUEVfU0laRS0gcHJpdnB0ci0+bXRjX29mZnNldCkpOwpAQCAtMzUwOCwxMyArMzUwNSwxMyBAQAogCQl9CiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSByZWNlaXZlZCBkYXRhIFxuIiwKLQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKIAkJaWYgKHBfZW52LT5wYWNraW5nID09IERPX1BBQ0tFRCkKIAkJCWR1bXBpdCgoY2hhciAqKXBfcGFja2Qrc2l6ZW9mKHN0cnVjdCBjbGF3cGgpLDMyKTsKIAkJZWxzZQogCSAgICAgICAgICAgICAgICBkdW1waXQoKGNoYXIgKilwX3RoaXNfY2N3LT5wX2J1ZmZlciwgMzIpOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMoKSBieXRlbGVuZ3RoICVkIFxuIiwKLQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sYnl0ZXNfdG9fbW92KTsKKwkJCWRldi0+bmFtZSxfX2Z1bmNfXyxieXRlc190b19tb3YpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKG10Y190aGlzX2ZybT09MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbGVuX29mX2RhdGE9cHJpdnB0ci0+bXRjX29mZnNldCtieXRlc190b19tb3Y7CkBAIC0zNTMzLDEzICszNTMwLDEzIEBACiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzKCkgbmV0aWZfIgogCQkJCQkicngoc2tiKSBjb21wbGV0ZWQgXG4iLAotCQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzKCkgbG93IG9uIG1lbW9yeVxuIiwKLQkJCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+bXRjX29mZnNldD0wOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+bXRjX2xvZ2ljYWxfbGluaz0tMTsKQEAgLTM1NzgsMTAgKzM1NzUsMTAgQEAKIAogI2lmZGVmIElPVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgcHJvY2Vzc2VkIGZyYW1lIGlzICVkIFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxpKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLGkpOwogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyAgRjolbHggTDolbHhcbiIsCiAJCWRldi0+bmFtZSwKLQkJX19GVU5DVElPTl9fLAorCQlfX2Z1bmNfXywKIAkJKHVuc2lnbmVkIGxvbmcpcF9maXJzdF9jY3csCiAJCSh1bnNpZ25lZCBsb25nKXBfbGFzdF9jY3cpOwogI2VuZGlmCkBAIC0zNTkxLDcgKzM1ODgsNyBAQAogICAgICAgICBjbGF3X3N0cnRfcmVhZChkZXYsIExPQ0tfWUVTKTsKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKIH0gICAgIC8qICBlbmQgb2YgdW5wYWNrX3JlYWQgICAqLwpAQCAtMzYxMyw3ICszNjEwLDcgQEAKICAgICAgICAgcF9jaD0mcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXTsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlciAgXG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEVudGVyICBcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZhcmlhYmxlIGxvY2sgPSAlZCwgZGV2ID1cbiIsZGV2LT5uYW1lLCBsb2NrKTsKICAgICAgICAgZHVtcGl0KChjaGFyICopIGRldiwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSk7CiAjZW5kaWYKQEAgLTM2MjksNyArMzYyNiw3IEBACiAgICAgICAgIH0KICNpZmRlZiBERUJVR01TRwogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBzdGF0ZS0lMDJ4XG4iICwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXywgcF9jaC0+Y2xhd19zdGF0ZSk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXywgcF9jaC0+Y2xhd19zdGF0ZSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGxvY2s9PUxPQ0tfWUVTKSB7CiAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKHBfY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwpAQCAtMzYzNyw3ICszNjM0LDcgQEAKICAgICAgICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKSA9PSAwKSB7CiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogSE9UIFJFQUQgc3RhcnRlZCBpbiAlc1xuIiAsCi0JCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwkJCWRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgcF9jbGF3aD0oc3RydWN0IGNsYXdoICopcHJpdnB0ci0+cF9jbGF3X3NpZ25hbF9ibGs7CiAgICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopJnBfY2xhd2gtPmZsYWcgLCAxKTsKICNlbmRpZgpAQCAtMzY1Myw3ICszNjUwLDcgQEAKIAllbHNlIHsKICNpZmRlZiBERUJVR01TRwogCQlwcmludGsoS0VSTl9JTkZPICIlczogTm8gUkVBRCBzdGFydGVkIGJ5ICVzKCkgSW4gcHJvZ3Jlc3NcbiIgLAotCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCQlkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAJCUNMQVdfREJGX1RFWFQoMix0cmFjZSwiUmVhZEFjdCIpOwogCX0KQEAgLTM2NjMsNyArMzY2MCw3IEBACiAgICAgICAgIH0KICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoNCx0cmFjZSwiU3RSZEV4aXQiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzY4NCw3ICszNjgxLDcgQEAKICAgICAgICAgc3RydWN0IGNjd2JrICAgCSpwX2ZpcnN0X2NjdzsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAJaWYgKCFkZXYpIHsKIAkJcmV0dXJuOwpAQCAtMzY5NCw3ICszNjkxLDcgQEAKIAogI2lmZGVmIERFQlVHTVNHCiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIHN0YXRlLSUwMnhcbiIgLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLHBfY2gtPmNsYXdfc3RhdGUpOworCQlkZXYtPm5hbWUsX19mdW5jX18scF9jaC0+Y2xhd19zdGF0ZSk7CiAjZW5kaWYKICAgICAgICAgQ0xBV19EQkZfVEVYVCg0LHRyYWNlLCJzdHJ0X2lvIik7CiAgICAgICAgIHBfZmlyc3RfY2N3PXByaXZwdHItPnBfd3JpdGVfYWN0aXZlX2ZpcnN0OwpAQCAtMzcwNCwxNCArMzcwMSwxNCBAQAogICAgICAgICBpZiAocF9maXJzdF9jY3cgPT0gTlVMTCkgewogI2lmZGVmIEZVTkNUUkFDRQogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJZGV2LT5uYW1lLF9fZnVuY19fLF9fTElORV9fKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpID09IDApIHsKICAgICAgICAgICAgICAgICBwYXJtID0gKHVuc2lnbmVkIGxvbmcpIHBfY2g7CiAjaWZkZWYgREVCVUdNU0cKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBkb19pbyBcbiIgLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczolcyBkb19pbyBcbiIgLGRldi0+bmFtZSxfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgZHVtcGl0KChjaGFyICopcF9maXJzdF9jY3csIHNpemVvZihzdHJ1Y3QgY2N3YmspKTsKICNlbmRpZgogCQlDTEFXX0RCRl9URVhUKDIsdHJhY2UsIlN0V3J0SU8iKTsKQEAgLTM3MjQsNyArMzcyMSw3IEBACiAgICAgICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogI2lmZGVmIEZVTkNUUkFDRQogCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCWRldi0+bmFtZSxfX2Z1bmNfXyxfX0xJTkVfXyk7CiAjZW5kaWYKIAogICAgICAgICByZXR1cm47CkBAIC0zNzQ4LDcgKzM3NDUsNyBAQAogICAgICAgICBzdHJ1Y3QgY2N3YmsqcF9idWY7CiAjZW5kaWYKICNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZyZWUgY291bnQgPSAlZCAgdmFyaWFibGUgZGV2ID1cbiIsCiAJCWRldi0+bmFtZSxwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50KTsKICNlbmRpZgpAQCAtMzgwMSw3ICszNzk4LDcgQEAKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3dyaXRlX2FjdGl2ZV9sYXN0PU5VTEw7CiAjaWZkZWYgREVCVUdNU0cKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBwX3dyaXRlXyIKLQkJCSJhY3RpdmVfZmlyc3Q9PU5VTExcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJCQkiYWN0aXZlX2ZpcnN0PT1OVUxMXG4iLGRldi0+bmFtZSxfX2Z1bmNfXyk7CiAjZW5kaWYKICAgICAgICAgfQogI2lmZGVmIElPVFJBQ0UKQEAgLTM4MjIsNyArMzgxOSw3IEBACiAJQ0xBV19EQkZfVEVYVF8oNCx0cmFjZSwiRldDPSVkIixwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50KTsKICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdCBvbiBsaW5lICVkIGZyZWVfY291bnQgPSVkXG4iLAotCQlkZXYtPm5hbWUsX19GVU5DVElPTl9fLCBfX0xJTkVfXyxwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50KTsKKwkJZGV2LT5uYW1lLF9fZnVuY19fLCBfX0xJTkVfXyxwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50KTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiB9CkBAIC0zODM2LDcgKzM4MzMsNyBAQAogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdnB0cjsKICNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiZnJlZV9kZXYiKTsKIApAQCAtMzg1Nyw3ICszODU0LDcgQEAKICNlbmRpZgogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiZmVlZV9vayIpOwogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0XG4iLGRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXRcbiIsZGV2LT5uYW1lLF9fZnVuY19fKTsKICNlbmRpZgogfQogCkBAIC0zODcwLDEzICszODY3LDEzIEBACiBjbGF3X2luaXRfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJpbml0X2RldiIpOwogCUNMQVdfREJGX1RFWFRfKDIsc2V0dXAsIiVzIixkZXYtPm5hbWUpOwogCWlmICghZGV2KSB7CiAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6JXMgQkFEIERldmljZSBleGl0IGxpbmUgJWRcbiIsCi0JCV9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCV9fZnVuY19fLF9fTElORV9fKTsKIAkJQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJiYWRkZXYiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM4OTIsNyArMzg4OSw3IEBACiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMzAwOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CiAjaWZkZWYgRlVOQ1RSQUNFCi0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXRcbiIsZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRXhpdFxuIixkZXYtPm5hbWUsX19mdW5jX18pOwogI2VuZGlmCiAJQ0xBV19EQkZfVEVYVCgyLHNldHVwLCJpbml0b2siKTsKIAlyZXR1cm47CkBAIC0zOTEyLDcgKzM5MDksNyBAQAogCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBFbnRlclxuIixjZGV2LT5kZXYuYnVzX2lkLF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgRW50ZXJcbiIsY2Rldi0+ZGV2LmJ1c19pZCxfX2Z1bmNfXyk7CiAjZW5kaWYKIAlDTEFXX0RCRl9URVhUXygyLHNldHVwLCIlcyIsY2Rldi0+ZGV2LmJ1c19pZCk7CiAJcHJpdnB0ci0+Y2hhbm5lbFtpXS5mbGFnICA9IGkrMTsgICAvKiBSZWFkIGlzIDEgV3JpdGUgaXMgMiAqLwpAQCAtMzkyMywxNiArMzkyMCwxNiBAQAogCXBfY2gtPmRldm5vID0gZGV2X2lkLmRldm5vOwogCWlmICgocF9jaC0+aXJiID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBpcmIpLEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIE91dCBvZiBtZW1vcnkgaW4gJXMgZm9yIGlyYlxuIiwKLQkJCXBfY2gtPmlkLF9fRlVOQ1RJT05fXyk7CisJCQlwX2NoLT5pZCxfX2Z1bmNfXyk7CiAjaWZkZWYgRlVOQ1RSQUNFCiAgICAgICAgIAlwcmludGsoS0VSTl9JTkZPICIlczolcyBFeGl0IG9uIGxpbmUgJWRcbiIsCi0JCQlwX2NoLT5pZCxfX0ZVTkNUSU9OX18sX19MSU5FX18pOworCQkJcF9jaC0+aWQsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNpZmRlZiBGVU5DVFJBQ0UKICAgICAgICAgCXByaW50ayhLRVJOX0lORk8gIiVzOiVzIEV4aXQgb24gbGluZSAlZFxuIiwKLQkJCWNkZXYtPmRldi5idXNfaWQsX19GVU5DVElPTl9fLF9fTElORV9fKTsKKwkJCWNkZXYtPmRldi5idXNfaWQsX19mdW5jX18sX19MSU5FX18pOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTU1LDcgKzM5NTIsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCXByaW50ayhLRVJOX0lORk8gImNsYXc6IGFkZCBmb3IgJXNcbiIsY2dkZXYtPmNkZXZbUkVBRF0tPmRldi5idXNfaWQpOwogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwibmV3X2RldiIpOwogCXByaXZwdHIgPSBjZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwpAQCAtMzk5Myw3ICszOTkwLDcgQEAKIAl9CiAJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsImNsYXclZCIsY2xhd19pbml0X25ldGRldmljZSk7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6YWxsb2NfbmV0ZGV2IGZhaWxlZFxuIixfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczphbGxvY19uZXRkZXYgZmFpbGVkXG4iLF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCWRldi0+cHJpdiA9IHByaXZwdHI7CkBAIC00MDY4LDcgKzQwNjUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCWludAlyZXQ7CiAKLQlwcl9kZWJ1ZygiJXMoKSBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAJQ0xBV19EQkZfVEVYVF8oMixzZXR1cCwiJXMiLGNnZGV2LT5kZXYuYnVzX2lkKTsKIAlwcml2ID0gY2dkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoIXByaXYpCkBAIC00MDk4LDE1ICs0MDk1LDE1IEBACiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCi0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCUNMQVdfREJGX1RFWFRfKDIsc2V0dXAsIiVzIixjZ2Rldi0+ZGV2LmJ1c19pZCk7CiAJcHJpdiA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJaWYgKCFwcml2KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6ICVzKCkgbm8gUHJpdiBleGl0aW5nXG4iLF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6ICVzKCkgbm8gUHJpdiBleGl0aW5nXG4iLF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJjbGF3OiAlcygpIGNhbGxlZCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iLAotCQkJX19GVU5DVElPTl9fLGNnZGV2LT5jZGV2WzBdLT5kZXYuYnVzX2lkKTsKKwkJCV9fZnVuY19fLGNnZGV2LT5jZGV2WzBdLT5kZXYuYnVzX2lkKTsKIAlpZiAoY2dkZXYtPnN0YXRlID09IENDV0dST1VQX09OTElORSkKIAkJY2xhd19zaHV0ZG93bl9kZXZpY2UoY2dkZXYpOwogCWNsYXdfcmVtb3ZlX2ZpbGVzKCZjZ2Rldi0+ZGV2KTsKQEAgLTQzNDksNyArNDM0Niw3IEBACiBzdGF0aWMgaW50CiBjbGF3X2FkZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwiYWRkX2ZpbGUiKTsKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZjbGF3X2F0dHJfZ3JvdXApOwogfQpAQCAtNDM1Nyw3ICs0MzU0LDcgQEAKIHN0YXRpYyB2b2lkCiBjbGF3X3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19mdW5jX18pOwogCUNMQVdfREJGX1RFWFQoMixzZXR1cCwicmVtX2ZpbGUiKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmNsYXdfYXR0cl9ncm91cCk7CiB9CkBAIC00Mzg4LDEyICs0Mzg1LDEyIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogc3RhcnRpbmcgZHJpdmVyXG4iKTsKIAogI2lmZGVmIEZVTkNUUkFDRQotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJjbGF3OiAlcygpIGVudGVyIFxuIixfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gImNsYXc6ICVzKCkgZW50ZXIgXG4iLF9fZnVuY19fKTsKICNlbmRpZgogCXJldCA9IGNsYXdfcmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6ICVzKCkgZGVidWdfcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAotCQkJX19GVU5DVElPTl9fLHJldCk7CisJCQlfX2Z1bmNfXyxyZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlDTEFXX0RCRl9URVhUKDIsc2V0dXAsImluaXRfbW9kIik7CkBAIC00NDAxLDEwICs0Mzk4LDEwIEBACiAJaWYgKHJldCkgewogCQljbGF3X3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzsgJXMoKSBjdTMwODggcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAotCQkJX19GVU5DVElPTl9fLHJldCk7CisJCQlfX2Z1bmNfXyxyZXQpOwogCX0KICNpZmRlZiBGVU5DVFJBQ0UKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogJXMoKSBleGl0IFxuIixfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0lORk8gImNsYXc6ICVzKCkgZXhpdCBcbiIsX19mdW5jX18pOwogI2VuZGlmCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjZGJ1Zy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNkYnVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZTcyZGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNkYnVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvY3RjZGJ1Zy5jCi0gKgotICogQ1RDIC8gRVNDT04gbmV0d29yayBkcml2ZXIgLSBzMzkwIGRiZiBleHBsb2l0LgotICoKLSAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCi0gKgotICogICAgQXV0aG9yKHMpOiBPcmlnaW5hbCBDb2RlIHdyaXR0ZW4gYnkKLSAqCQkJICBQZXRlciBUaWVkZW1hbm4gKHB0aWVkZW1AZGUuaWJtLmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY3RjZGJ1Zy5oIgotCi0vKioKLSAqIERlYnVnIEZhY2lsaXR5IFN0dWZmCi0gKi8KLWRlYnVnX2luZm9fdCAqY3RjX2RiZl9zZXR1cCA9IE5VTEw7Ci1kZWJ1Z19pbmZvX3QgKmN0Y19kYmZfZGF0YSA9IE5VTEw7Ci1kZWJ1Z19pbmZvX3QgKmN0Y19kYmZfdHJhY2UgPSBOVUxMOwotCi1ERUZJTkVfUEVSX0NQVShjaGFyWzI1Nl0sIGN0Y19kYmZfdHh0X2J1Zik7Ci0KLXZvaWQKLWN0Y191bnJlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKQotewotCWlmIChjdGNfZGJmX3NldHVwKQotCQlkZWJ1Z191bnJlZ2lzdGVyKGN0Y19kYmZfc2V0dXApOwotCWlmIChjdGNfZGJmX2RhdGEpCi0JCWRlYnVnX3VucmVnaXN0ZXIoY3RjX2RiZl9kYXRhKTsKLQlpZiAoY3RjX2RiZl90cmFjZSkKLQkJZGVidWdfdW5yZWdpc3RlcihjdGNfZGJmX3RyYWNlKTsKLX0KLWludAotY3RjX3JlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKQotewotCWN0Y19kYmZfc2V0dXAgPSBkZWJ1Z19yZWdpc3RlcihDVENfREJGX1NFVFVQX05BTUUsCi0JCQkJCUNUQ19EQkZfU0VUVVBfUEFHRVMsCi0JCQkJCUNUQ19EQkZfU0VUVVBfTlJfQVJFQVMsCi0JCQkJCUNUQ19EQkZfU0VUVVBfTEVOKTsKLQljdGNfZGJmX2RhdGEgPSBkZWJ1Z19yZWdpc3RlcihDVENfREJGX0RBVEFfTkFNRSwKLQkJCQkgICAgICAgQ1RDX0RCRl9EQVRBX1BBR0VTLAotCQkJCSAgICAgICBDVENfREJGX0RBVEFfTlJfQVJFQVMsCi0JCQkJICAgICAgIENUQ19EQkZfREFUQV9MRU4pOwotCWN0Y19kYmZfdHJhY2UgPSBkZWJ1Z19yZWdpc3RlcihDVENfREJGX1RSQUNFX05BTUUsCi0JCQkJCUNUQ19EQkZfVFJBQ0VfUEFHRVMsCi0JCQkJCUNUQ19EQkZfVFJBQ0VfTlJfQVJFQVMsCi0JCQkJCUNUQ19EQkZfVFJBQ0VfTEVOKTsKLQotCWlmICgoY3RjX2RiZl9zZXR1cCA9PSBOVUxMKSB8fCAoY3RjX2RiZl9kYXRhID09IE5VTEwpIHx8Ci0JICAgIChjdGNfZGJmX3RyYWNlID09IE5VTEwpKSB7Ci0JCWN0Y191bnJlZ2lzdGVyX2RiZl92aWV3cygpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhjdGNfZGJmX3NldHVwLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChjdGNfZGJmX3NldHVwLCBDVENfREJGX1NFVFVQX0xFVkVMKTsKLQotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoY3RjX2RiZl9kYXRhLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChjdGNfZGJmX2RhdGEsIENUQ19EQkZfREFUQV9MRVZFTCk7Ci0KLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGN0Y19kYmZfdHJhY2UsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGN0Y19kYmZfdHJhY2UsIENUQ19EQkZfVFJBQ0VfTEVWRUwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjZGJ1Zy5oIGIvZHJpdmVycy9zMzkwL25ldC9jdGNkYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMzkyNWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNkYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqCi0gKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L2N0Y2RidWcuaAotICoKLSAqIENUQyAvIEVTQ09OIG5ldHdvcmsgZHJpdmVyIC0gczM5MCBkYmYgZXhwbG9pdC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCwyMDAzIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqICAgIEF1dGhvcihzKTogT3JpZ2luYWwgQ29kZSB3cml0dGVuIGJ5Ci0gKgkJCSAgUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpZm5kZWYgX0NUQ0RCVUdfSF8KLSNkZWZpbmUgX0NUQ0RCVUdfSF8KLQotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotI2luY2x1ZGUgImN0Y21haW4uaCIKLS8qKgotICogRGVidWcgRmFjaWxpdHkgc3R1ZmYKLSAqLwotI2RlZmluZSBDVENfREJGX1NFVFVQX05BTUUgImN0Y19zZXR1cCIKLSNkZWZpbmUgQ1RDX0RCRl9TRVRVUF9MRU4gMTYKLSNkZWZpbmUgQ1RDX0RCRl9TRVRVUF9QQUdFUyA4Ci0jZGVmaW5lIENUQ19EQkZfU0VUVVBfTlJfQVJFQVMgMQotI2RlZmluZSBDVENfREJGX1NFVFVQX0xFVkVMIDMKLQotI2RlZmluZSBDVENfREJGX0RBVEFfTkFNRSAiY3RjX2RhdGEiCi0jZGVmaW5lIENUQ19EQkZfREFUQV9MRU4gMTI4Ci0jZGVmaW5lIENUQ19EQkZfREFUQV9QQUdFUyA4Ci0jZGVmaW5lIENUQ19EQkZfREFUQV9OUl9BUkVBUyAxCi0jZGVmaW5lIENUQ19EQkZfREFUQV9MRVZFTCAzCi0KLSNkZWZpbmUgQ1RDX0RCRl9UUkFDRV9OQU1FICJjdGNfdHJhY2UiCi0jZGVmaW5lIENUQ19EQkZfVFJBQ0VfTEVOIDE2Ci0jZGVmaW5lIENUQ19EQkZfVFJBQ0VfUEFHRVMgNAotI2RlZmluZSBDVENfREJGX1RSQUNFX05SX0FSRUFTIDIKLSNkZWZpbmUgQ1RDX0RCRl9UUkFDRV9MRVZFTCAzCi0KLSNkZWZpbmUgREJGX1RFWFQobmFtZSxsZXZlbCx0ZXh0KSBcCi0JZG8geyBcCi0JCWRlYnVnX3RleHRfZXZlbnQoY3RjX2RiZl8jI25hbWUsbGV2ZWwsdGV4dCk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIERCRl9IRVgobmFtZSxsZXZlbCxhZGRyLGxlbikgXAotCWRvIHsgXAotCQlkZWJ1Z19ldmVudChjdGNfZGJmXyMjbmFtZSxsZXZlbCwodm9pZCopKGFkZHIpLGxlbik7IFwKLQl9IHdoaWxlICgwKQotCi1ERUNMQVJFX1BFUl9DUFUoY2hhclsyNTZdLCBjdGNfZGJmX3R4dF9idWYpOwotZXh0ZXJuIGRlYnVnX2luZm9fdCAqY3RjX2RiZl9zZXR1cDsKLWV4dGVybiBkZWJ1Z19pbmZvX3QgKmN0Y19kYmZfZGF0YTsKLWV4dGVybiBkZWJ1Z19pbmZvX3QgKmN0Y19kYmZfdHJhY2U7Ci0KLQotI2RlZmluZSBEQkZfVEVYVF8obmFtZSxsZXZlbCx0ZXh0Li4uKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQljaGFyKiBjdGNfZGJmX3R4dF9idWYgPSBnZXRfY3B1X3ZhcihjdGNfZGJmX3R4dF9idWYpOwlcCi0JCXNwcmludGYoY3RjX2RiZl90eHRfYnVmLCB0ZXh0KTsJCQkgIAlcCi0JCWRlYnVnX3RleHRfZXZlbnQoY3RjX2RiZl8jI25hbWUsbGV2ZWwsY3RjX2RiZl90eHRfYnVmKTsJXAotCQlwdXRfY3B1X3ZhcihjdGNfZGJmX3R4dF9idWYpOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQkZfU1BSSU5URihuYW1lLGxldmVsLHRleHQuLi4pIFwKLQlkbyB7IFwKLQkJZGVidWdfc3ByaW50Zl9ldmVudChjdGNfZGJmX3RyYWNlLCBsZXZlbCwgIyN0ZXh0ICk7IFwKLQkJZGVidWdfc3ByaW50Zl9ldmVudChjdGNfZGJmX3RyYWNlLCBsZXZlbCwgdGV4dCApOyBcCi0JfSB3aGlsZSAoMCkKLQotCi1pbnQgY3RjX3JlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKTsKLQotdm9pZCBjdGNfdW5yZWdpc3Rlcl9kYmZfdmlld3Modm9pZCk7Ci0KLS8qKgotICogc29tZSBtb3JlIGRlYnVnIHN0dWZmCi0gKi8KLQotI2RlZmluZSBIRVhEVU1QMTYoaW1wb3J0YW5jZSxoZWFkZXIscHRyKSBcCi1QUklOVF8jI2ltcG9ydGFuY2UoaGVhZGVyICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICAiIFwKLQkJICAgIiUwMnggJTAyeCAlMDJ4ICUwMnggICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsIFwKLQkJICAgKigoKGNoYXIqKXB0cikpLCooKChjaGFyKilwdHIpKzEpLCooKChjaGFyKilwdHIpKzIpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzMpLCooKChjaGFyKilwdHIpKzQpLCooKChjaGFyKilwdHIpKzUpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzYpLCooKChjaGFyKilwdHIpKzcpLCooKChjaGFyKilwdHIpKzgpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzkpLCooKChjaGFyKilwdHIpKzEwKSwqKCgoY2hhciopcHRyKSsxMSksIFwKLQkJICAgKigoKGNoYXIqKXB0cikrMTIpLCooKChjaGFyKilwdHIpKzEzKSwgXAotCQkgICAqKCgoY2hhciopcHRyKSsxNCksKigoKGNoYXIqKXB0cikrMTUpKTsgXAotUFJJTlRfIyNpbXBvcnRhbmNlKGhlYWRlciAiJTAyeCAlMDJ4ICUwMnggJTAyeCAgJTAyeCAlMDJ4ICUwMnggJTAyeCAgIiBcCi0JCSAgICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzE2KSwqKCgoY2hhciopcHRyKSsxNyksIFwKLQkJICAgKigoKGNoYXIqKXB0cikrMTgpLCooKChjaGFyKilwdHIpKzE5KSwgXAotCQkgICAqKCgoY2hhciopcHRyKSsyMCksKigoKGNoYXIqKXB0cikrMjEpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzIyKSwqKCgoY2hhciopcHRyKSsyMyksIFwKLQkJICAgKigoKGNoYXIqKXB0cikrMjQpLCooKChjaGFyKilwdHIpKzI1KSwgXAotCQkgICAqKCgoY2hhciopcHRyKSsyNiksKigoKGNoYXIqKXB0cikrMjcpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzI4KSwqKCgoY2hhciopcHRyKSsyOSksIFwKLQkJICAgKigoKGNoYXIqKXB0cikrMzApLCooKChjaGFyKilwdHIpKzMxKSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaGV4X2R1bXAodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXNpemVfdCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChpICYmICEoaSAlIDE2KSkKLQkJCXByaW50aygiXG4iKTsKLQkJcHJpbnRrKCIlMDJ4ICIsICooYnVmICsgaSkpOwotCX0KLQlwcmludGsoIlxuIik7Ci19Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZGJ1Zy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2RidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWIyNWQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2RidWcuYwpAQCAtMCwwICsxLDY3IEBACisvKgorICoJZHJpdmVycy9zMzkwL25ldC9jdGNtX2RidWcuYworICoKKyAqCUNvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwNworICoJQXV0aG9yczoJUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlICJjdGNtX2RidWcuaCIKKworLyoKKyAqIERlYnVnIEZhY2lsaXR5IFN0dWZmCisgKi8KKworREVGSU5FX1BFUl9DUFUoY2hhclsyNTZdLCBjdGNtX2RiZl90eHRfYnVmKTsKKworc3RydWN0IGN0Y21fZGJmX2luZm8gY3RjbV9kYmZbQ1RDTV9EQkZfSU5GT1NdID0geworCVtDVENNX0RCRl9TRVRVUF0JPSB7ImN0Y19zZXR1cCIsIDgsIDEsIDY0LCA1LCBOVUxMfSwKKwlbQ1RDTV9EQkZfRVJST1JdCT0geyJjdGNfZXJyb3IiLCA4LCAxLCA2NCwgMywgTlVMTH0sCisJW0NUQ01fREJGX1RSQUNFXQk9IHsiY3RjX3RyYWNlIiwgOCwgMSwgNjQsIDMsIE5VTEx9LAorCVtDVENNX0RCRl9NUENfU0VUVVBdCT0geyJtcGNfc2V0dXAiLCA4LCAxLCA2NCwgNSwgTlVMTH0sCisJW0NUQ01fREJGX01QQ19FUlJPUl0JPSB7Im1wY19lcnJvciIsIDgsIDEsIDY0LCAzLCBOVUxMfSwKKwlbQ1RDTV9EQkZfTVBDX1RSQUNFXQk9IHsibXBjX3RyYWNlIiwgOCwgMSwgNjQsIDMsIE5VTEx9LAorfTsKKwordm9pZCBjdGNtX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKHZvaWQpCit7CisJaW50IHg7CisJZm9yICh4ID0gMDsgeCA8IENUQ01fREJGX0lORk9TOyB4KyspIHsKKwkJZGVidWdfdW5yZWdpc3RlcihjdGNtX2RiZlt4XS5pZCk7CisJCWN0Y21fZGJmW3hdLmlkID0gTlVMTDsKKwl9Cit9CisKK2ludCBjdGNtX3JlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKQoreworCWludCB4OworCWZvciAoeCA9IDA7IHggPCBDVENNX0RCRl9JTkZPUzsgeCsrKSB7CisJCS8qIHJlZ2lzdGVyIHRoZSBhcmVhcyAqLworCQljdGNtX2RiZlt4XS5pZCA9IGRlYnVnX3JlZ2lzdGVyKGN0Y21fZGJmW3hdLm5hbWUsCisJCQkJCQljdGNtX2RiZlt4XS5wYWdlcywKKwkJCQkJCWN0Y21fZGJmW3hdLmFyZWFzLAorCQkJCQkJY3RjbV9kYmZbeF0ubGVuKTsKKwkJaWYgKGN0Y21fZGJmW3hdLmlkID09IE5VTEwpIHsKKwkJCWN0Y21fdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogcmVnaXN0ZXIgYSB2aWV3ICovCisJCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoY3RjbV9kYmZbeF0uaWQsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7CisJCS8qIHNldCBhIHBhc3NpbmcgbGV2ZWwgKi8KKwkJZGVidWdfc2V0X2xldmVsKGN0Y21fZGJmW3hdLmlkLCBjdGNtX2RiZlt4XS5sZXZlbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9kYnVnLmggYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZGJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZmYzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZGJ1Zy5oCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICoJZHJpdmVycy9zMzkwL25ldC9jdGNtX2RidWcuaAorICoKKyAqCUNvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwNworICoJQXV0aG9yczoJUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCisgKgorICovCisKKyNpZm5kZWYgX0NUQ01fREJVR19IXworI2RlZmluZSBfQ1RDTV9EQlVHX0hfCisKKy8qCisgKiBEZWJ1ZyBGYWNpbGl0eSBzdHVmZgorICovCisKKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworI2lmZGVmIERFQlVHCisgI2RlZmluZSBkb19kZWJ1ZyAxCisjZWxzZQorICNkZWZpbmUgZG9fZGVidWcgMAorI2VuZGlmCisjaWZkZWYgREVCVUdEQVRBCisgI2RlZmluZSBkb19kZWJ1Z19kYXRhIDEKKyNlbHNlCisgI2RlZmluZSBkb19kZWJ1Z19kYXRhIDAKKyNlbmRpZgorI2lmZGVmIERFQlVHQ0NXCisgI2RlZmluZSBkb19kZWJ1Z19jY3cgMQorI2Vsc2UKKyAjZGVmaW5lIGRvX2RlYnVnX2NjdyAwCisjZW5kaWYKKworLyogZGVmaW5lIGRiZiBkZWJ1ZyBsZXZlbHMgc2ltaWxhciB0byBrZXJuZWwgbXNnIGxldmVscyAqLworI2RlZmluZQlDVENfREJGX0FMV0FZUwkwCS8qIGFsd2F5cyBwcmludCB0aGlzIAkJCSovCisjZGVmaW5lCUNUQ19EQkZfRU1FUkcJMAkvKiBzeXN0ZW0gaXMgdW51c2FibGUJCQkqLworI2RlZmluZQlDVENfREJGX0FMRVJUCTEJLyogYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkJKi8KKyNkZWZpbmUJQ1RDX0RCRl9DUklUCTIJLyogY3JpdGljYWwgY29uZGl0aW9ucwkJCSovCisjZGVmaW5lCUNUQ19EQkZfRVJST1IJMwkvKiBlcnJvciBjb25kaXRpb25zCQkJKi8KKyNkZWZpbmUJQ1RDX0RCRl9XQVJOCTQJLyogd2FybmluZyBjb25kaXRpb25zCQkJKi8KKyNkZWZpbmUJQ1RDX0RCRl9OT1RJQ0UJNQkvKiBub3JtYWwgYnV0IHNpZ25pZmljYW50IGNvbmRpdGlvbgkqLworI2RlZmluZQlDVENfREJGX0lORk8JNQkvKiBpbmZvcm1hdGlvbmFsCQkJKi8KKyNkZWZpbmUJQ1RDX0RCRl9ERUJVRwk2CS8qIGRlYnVnLWxldmVsIG1lc3NhZ2VzCQkJKi8KKworREVDTEFSRV9QRVJfQ1BVKGNoYXJbMjU2XSwgY3RjbV9kYmZfdHh0X2J1Zik7CisKK2VudW0gY3RjbV9kYmZfbmFtZXMgeworCUNUQ01fREJGX1NFVFVQLAorCUNUQ01fREJGX0VSUk9SLAorCUNUQ01fREJGX1RSQUNFLAorCUNUQ01fREJGX01QQ19TRVRVUCwKKwlDVENNX0RCRl9NUENfRVJST1IsCisJQ1RDTV9EQkZfTVBDX1RSQUNFLAorCUNUQ01fREJGX0lORk9TCS8qIG11c3QgYmUgbGFzdCBlbGVtZW50ICovCit9OworCitzdHJ1Y3QgY3RjbV9kYmZfaW5mbyB7CisJY2hhciBuYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CisJaW50IHBhZ2VzOworCWludCBhcmVhczsKKwlpbnQgbGVuOworCWludCBsZXZlbDsKKwlkZWJ1Z19pbmZvX3QgKmlkOworfTsKKworZXh0ZXJuIHN0cnVjdCBjdGNtX2RiZl9pbmZvIGN0Y21fZGJmW0NUQ01fREJGX0lORk9TXTsKKworaW50IGN0Y21fcmVnaXN0ZXJfZGJmX3ZpZXdzKHZvaWQpOwordm9pZCBjdGNtX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKHZvaWQpOworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnN0cnRhaWwoY29uc3QgY2hhciAqcywgaW50IG4pCit7CisJaW50IGwgPSBzdHJsZW4ocyk7CisJcmV0dXJuIChsID4gbikgPyBzICsgKGwgLSBuKSA6IHM7Cit9CisKKy8qIHNvcnQgb3V0IGxldmVscyBlYXJseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzcHJpbnRmcyAqLworc3RhdGljIGlubGluZSBpbnQgY3RjbV9kYmZfcGFzc2VzKGRlYnVnX2luZm9fdCAqZGJmX2dycCwgaW50IGxldmVsKQoreworCXJldHVybiAoZGJmX2dycC0+bGV2ZWwgPj0gbGV2ZWwpOworfQorCisjZGVmaW5lIENUQ01fRlVOVEFJTCBzdHJ0YWlsKChjaGFyICopX19mdW5jX18sIDE2KQorCisjZGVmaW5lIENUQ01fREJGX1RFWFQobmFtZSwgbGV2ZWwsIHRleHQpIFwKKwlkbyB7IFwKKwkJZGVidWdfdGV4dF9ldmVudChjdGNtX2RiZltDVENNX0RCRl8jI25hbWVdLmlkLCBsZXZlbCwgdGV4dCk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENUQ01fREJGX0hFWChuYW1lLCBsZXZlbCwgYWRkciwgbGVuKSBcCisJZG8geyBcCisJCWRlYnVnX2V2ZW50KGN0Y21fZGJmW0NUQ01fREJGXyMjbmFtZV0uaWQsIFwKKwkJCQkJbGV2ZWwsICh2b2lkICopKGFkZHIpLCBsZW4pOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBDVENNX0RCRl9URVhUXyhuYW1lLCBsZXZlbCwgdGV4dC4uLikgXAorCWRvIHsgXAorCQlpZiAoY3RjbV9kYmZfcGFzc2VzKGN0Y21fZGJmW0NUQ01fREJGXyMjbmFtZV0uaWQsIGxldmVsKSkgeyBcCisJCQljaGFyICpjdGNtX2RiZl90eHRfYnVmID0gXAorCQkJCQkgZ2V0X2NwdV92YXIoY3RjbV9kYmZfdHh0X2J1Zik7IFwKKwkJCXNwcmludGYoY3RjbV9kYmZfdHh0X2J1ZiwgdGV4dCk7IFwKKwkJCWRlYnVnX3RleHRfZXZlbnQoY3RjbV9kYmZbQ1RDTV9EQkZfIyNuYW1lXS5pZCwgXAorCQkJCQlsZXZlbCwgY3RjbV9kYmZfdHh0X2J1Zik7IFwKKwkJCXB1dF9jcHVfdmFyKGN0Y21fZGJmX3R4dF9idWYpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBjYXQgOiBvbmUgb2Yge3NldHVwLCBtcGNfc2V0dXAsIHRyYWNlLCBtcGNfdHJhY2UsIGVycm9yLCBtcGNfZXJyb3J9LgorICogZGV2IDogbmV0ZGV2aWNlIHdpdGggdmFsaWQgbmFtZSBmaWVsZC4KKyAqIHRleHQ6IGFueSB0ZXh0IHN0cmluZy4KKyAqLworI2RlZmluZSBDVENNX0RCRl9ERVZfTkFNRShjYXQsIGRldiwgdGV4dCkgXAorCWRvIHsgXAorCQlDVENNX0RCRl9URVhUXyhjYXQsIENUQ19EQkZfSU5GTywgIiVzKCVzKSA6ICVzIiwgXAorCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIHRleHQpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBNUENfREJGX0RFVl9OQU1FKGNhdCwgZGV2LCB0ZXh0KSBcCisJZG8geyBcCisJCUNUQ01fREJGX1RFWFRfKE1QQ18jI2NhdCwgQ1RDX0RCRl9JTkZPLCAiJXMoJXMpIDogJXMiLCBcCisJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwgdGV4dCk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENUQ01ZX0RCRl9ERVZfTkFNRShjYXQsIGRldiwgdGV4dCkgXAorCWRvIHsgXAorCQlpZiAoSVNfTVBDREVWKGRldikpIFwKKwkJCU1QQ19EQkZfREVWX05BTUUoY2F0LCBkZXYsIHRleHQpOyBcCisJCWVsc2UgXAorCQkJQ1RDTV9EQkZfREVWX05BTUUoY2F0LCBkZXYsIHRleHQpOyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIGNhdCA6IG9uZSBvZiB7c2V0dXAsIG1wY19zZXR1cCwgdHJhY2UsIG1wY190cmFjZSwgZXJyb3IsIG1wY19lcnJvcn0uCisgKiBkZXYgOiBuZXRkZXZpY2UuCisgKiB0ZXh0OiBhbnkgdGV4dCBzdHJpbmcuCisgKi8KKyNkZWZpbmUgQ1RDTV9EQkZfREVWKGNhdCwgZGV2LCB0ZXh0KSBcCisJZG8geyBcCisJCUNUQ01fREJGX1RFWFRfKGNhdCwgQ1RDX0RCRl9JTkZPLCAiJXMoJXApIDogJXMiLCBcCisJCQlDVENNX0ZVTlRBSUwsIGRldiwgdGV4dCk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIE1QQ19EQkZfREVWKGNhdCwgZGV2LCB0ZXh0KSBcCisJZG8geyBcCisJCUNUQ01fREJGX1RFWFRfKE1QQ18jI2NhdCwgQ1RDX0RCRl9JTkZPLCAiJXMoJXApIDogJXMiLCBcCisJCQlDVENNX0ZVTlRBSUwsIGRldiwgdGV4dCk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENUQ01ZX0RCRl9ERVYoY2F0LCBkZXYsIHRleHQpIFwKKwlkbyB7IFwKKwkJaWYgKElTX01QQ0RFVihkZXYpKSBcCisJCQlNUENfREJGX0RFVihjYXQsIGRldiwgdGV4dCk7IFwKKwkJZWxzZSBcCisJCQlDVENNX0RCRl9ERVYoY2F0LCBkZXYsIHRleHQpOyBcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTEwNmYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwpAQCAtMCwwICsxLDIzNDcgQEAKKy8qCisgKiBkcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA3CisgKiBBdXRob3JzOglGcml0eiBFbGZlcnQgKGZlbGZlcnRAbWlsbGVudXguY29tKQorICogCQlQZXRlciBUaWVkZW1hbm4gKHB0aWVkZW1AZGUuaWJtLmNvbSkKKyAqCU1QQyBhZGRpdGlvbnMgOgorICoJCUJlbGluZGEgVGhvbXBzb24gKGJlbGluZGF0QHVzLmlibS5jb20pCisgKgkJQW5keSBSaWNodGVyIChyaWNodGVyYUB1cy5pYm0uY29tKQorICovCisKKyN1bmRlZiBERUJVRworI3VuZGVmIERFQlVHREFUQQorI3VuZGVmIERFQlVHQ0NXCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CisKKyNpbmNsdWRlICJmc20uaCIKKyNpbmNsdWRlICJjdTMwODguaCIKKworI2luY2x1ZGUgImN0Y21fZGJ1Zy5oIgorI2luY2x1ZGUgImN0Y21fbWFpbi5oIgorI2luY2x1ZGUgImN0Y21fZnNtcy5oIgorCitjb25zdCBjaGFyICpkZXZfc3RhdGVfbmFtZXNbXSA9IHsKKwlbREVWX1NUQVRFX1NUT1BQRURdCQk9ICJTdG9wcGVkIiwKKwlbREVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYXQk9ICJTdGFydFdhaXQgUlhUWCIsCisJW0RFVl9TVEFURV9TVEFSVFdBSVRfUlhdCT0gIlN0YXJ0V2FpdCBSWCIsCisJW0RFVl9TVEFURV9TVEFSVFdBSVRfVFhdCT0gIlN0YXJ0V2FpdCBUWCIsCisJW0RFVl9TVEFURV9TVE9QV0FJVF9SWFRYXQk9ICJTdG9wV2FpdCBSWFRYIiwKKwlbREVWX1NUQVRFX1NUT1BXQUlUX1JYXQkJPSAiU3RvcFdhaXQgUlgiLAorCVtERVZfU1RBVEVfU1RPUFdBSVRfVFhdCQk9ICJTdG9wV2FpdCBUWCIsCisJW0RFVl9TVEFURV9SVU5OSU5HXQkJPSAiUnVubmluZyIsCit9OworCitjb25zdCBjaGFyICpkZXZfZXZlbnRfbmFtZXNbXSA9IHsKKwlbREVWX0VWRU5UX1NUQVJUXQk9ICJTdGFydCIsCisJW0RFVl9FVkVOVF9TVE9QXQk9ICJTdG9wIiwKKwlbREVWX0VWRU5UX1JYVVBdCT0gIlJYIHVwIiwKKwlbREVWX0VWRU5UX1RYVVBdCT0gIlRYIHVwIiwKKwlbREVWX0VWRU5UX1JYRE9XTl0JPSAiUlggZG93biIsCisJW0RFVl9FVkVOVF9UWERPV05dCT0gIlRYIGRvd24iLAorCVtERVZfRVZFTlRfUkVTVEFSVF0JPSAiUmVzdGFydCIsCit9OworCitjb25zdCBjaGFyICpjdGNfY2hfZXZlbnRfbmFtZXNbXSA9IHsKKwlbQ1RDX0VWRU5UX0lPX1NVQ0NFU1NdCT0gImNjd19kZXZpY2Ugc3VjY2VzcyIsCisJW0NUQ19FVkVOVF9JT19FQlVTWV0JPSAiY2N3X2RldmljZSBidXN5IiwKKwlbQ1RDX0VWRU5UX0lPX0VOT0RFVl0JPSAiY2N3X2RldmljZSBlbm9kZXYiLAorCVtDVENfRVZFTlRfSU9fVU5LTk9XTl0JPSAiY2N3X2RldmljZSB1bmtub3duIiwKKwlbQ1RDX0VWRU5UX0FUVE5CVVNZXQk9ICJTdGF0dXMgQVRUTiAmIEJVU1kiLAorCVtDVENfRVZFTlRfQVRUTl0JPSAiU3RhdHVzIEFUVE4iLAorCVtDVENfRVZFTlRfQlVTWV0JPSAiU3RhdHVzIEJVU1kiLAorCVtDVENfRVZFTlRfVUNfUkNSRVNFVF0JPSAiVW5pdCBjaGVjayByZW1vdGUgcmVzZXQiLAorCVtDVENfRVZFTlRfVUNfUlNSRVNFVF0JPSAiVW5pdCBjaGVjayByZW1vdGUgc3lzdGVtIHJlc2V0IiwKKwlbQ1RDX0VWRU5UX1VDX1RYVElNRU9VVF0gPSAiVW5pdCBjaGVjayBUWCB0aW1lb3V0IiwKKwlbQ1RDX0VWRU5UX1VDX1RYUEFSSVRZXQk9ICJVbml0IGNoZWNrIFRYIHBhcml0eSIsCisJW0NUQ19FVkVOVF9VQ19IV0ZBSUxdCT0gIlVuaXQgY2hlY2sgSGFyZHdhcmUgZmFpbHVyZSIsCisJW0NUQ19FVkVOVF9VQ19SWFBBUklUWV0JPSAiVW5pdCBjaGVjayBSWCBwYXJpdHkiLAorCVtDVENfRVZFTlRfVUNfWkVST10JPSAiVW5pdCBjaGVjayBaRVJPIiwKKwlbQ1RDX0VWRU5UX1VDX1VOS05PV05dCT0gIlVuaXQgY2hlY2sgVW5rbm93biIsCisJW0NUQ19FVkVOVF9TQ19VTktOT1dOXQk9ICJTdWJDaGFubmVsIGNoZWNrIFVua25vd24iLAorCVtDVENfRVZFTlRfTUNfRkFJTF0JPSAiTWFjaGluZSBjaGVjayBmYWlsdXJlIiwKKwlbQ1RDX0VWRU5UX01DX0dPT0RdCT0gIk1hY2hpbmUgY2hlY2sgb3BlcmF0aW9uYWwiLAorCVtDVENfRVZFTlRfSVJRXQkJPSAiSVJRIG5vcm1hbCIsCisJW0NUQ19FVkVOVF9GSU5TVEFUXQk9ICJJUlEgZmluYWwiLAorCVtDVENfRVZFTlRfVElNRVJdCT0gIlRpbWVyIiwKKwlbQ1RDX0VWRU5UX1NUQVJUXQk9ICJTdGFydCIsCisJW0NUQ19FVkVOVF9TVE9QXQk9ICJTdG9wIiwKKwkvKgorCSogYWRkaXRpb25hbCBNUEMgZXZlbnRzCisJKi8KKwlbQ1RDX0VWRU5UX1NFTkRfWElEXQk9ICJYSUQgRXhjaGFuZ2UiLAorCVtDVENfRVZFTlRfUlNXRUVQX1RJTUVSXSA9ICJNUEMgR3JvdXAgU3dlZXAgVGltZXIiLAorfTsKKworY29uc3QgY2hhciAqY3RjX2NoX3N0YXRlX25hbWVzW10gPSB7CisJW0NUQ19TVEFURV9JRExFXQk9ICJJZGxlIiwKKwlbQ1RDX1NUQVRFX1NUT1BQRURdCT0gIlN0b3BwZWQiLAorCVtDVENfU1RBVEVfU1RBUlRXQUlUXQk9ICJTdGFydFdhaXQiLAorCVtDVENfU1RBVEVfU1RBUlRSRVRSWV0JPSAiU3RhcnRSZXRyeSIsCisJW0NUQ19TVEFURV9TRVRVUFdBSVRdCT0gIlNldHVwV2FpdCIsCisJW0NUQ19TVEFURV9SWElOSVRdCT0gIlJYIGluaXQiLAorCVtDVENfU1RBVEVfVFhJTklUXQk9ICJUWCBpbml0IiwKKwlbQ1RDX1NUQVRFX1JYXQkJPSAiUlgiLAorCVtDVENfU1RBVEVfVFhdCQk9ICJUWCIsCisJW0NUQ19TVEFURV9SWElETEVdCT0gIlJYIGlkbGUiLAorCVtDVENfU1RBVEVfVFhJRExFXQk9ICJUWCBpZGxlIiwKKwlbQ1RDX1NUQVRFX1JYRVJSXQk9ICJSWCBlcnJvciIsCisJW0NUQ19TVEFURV9UWEVSUl0JPSAiVFggZXJyb3IiLAorCVtDVENfU1RBVEVfVEVSTV0JPSAiVGVybWluYXRpbmciLAorCVtDVENfU1RBVEVfRFRFUk1dCT0gIlJlc3RhcnRpbmciLAorCVtDVENfU1RBVEVfTk9UT1BdCT0gIk5vdCBvcGVyYXRpb25hbCIsCisJLyoKKwkqIGFkZGl0aW9uYWwgTVBDIHN0YXRlcworCSovCisJW0NIX1hJRDBfUEVORElOR10JPSAiUGVuZGluZyBYSUQwIFN0YXJ0IiwKKwlbQ0hfWElEMF9JTlBST0dSRVNTXQk9ICJJbiBYSUQwIE5lZ290aWF0aW9ucyAiLAorCVtDSF9YSUQ3X1BFTkRJTkddCT0gIlBlbmRpbmcgWElENyBQMSBTdGFydCIsCisJW0NIX1hJRDdfUEVORElORzFdCT0gIkFjdGl2ZSBYSUQ3IFAxIEV4Y2hhbmdlICIsCisJW0NIX1hJRDdfUEVORElORzJdCT0gIlBlbmRpbmcgWElENyBQMiBTdGFydCAiLAorCVtDSF9YSUQ3X1BFTkRJTkczXQk9ICJBY3RpdmUgWElENyBQMiBFeGNoYW5nZSAiLAorCVtDSF9YSUQ3X1BFTkRJTkc0XQk9ICJYSUQ3IENvbXBsZXRlIC0gUGVuZGluZyBSRUFEWSAiLAorfTsKKworc3RhdGljIHZvaWQgY3RjbV9hY3Rpb25fbm9wKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKKworLyoKKyAqIC0tLS0tIHN0YXRpYyBjdGNtIGFjdGlvbnMgZm9yIGNoYW5uZWwgc3RhdGVtYWNoaW5lIC0tLS0tCisgKgorKi8KK3N0YXRpYyB2b2lkIGNoeF90eGRvbmUoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY2h4X3J4KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGNoeF9yeGlkbGUoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY2h4X2ZpcnN0aW8oZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfc2V0bW9kZShmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9zdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9oYWx0aW8oZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfc3RvcHBlZChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9zdG9wKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGN0Y21fY2h4X2ZhaWwoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfc2V0dXBlcnIoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfcmVzdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9yeGluaXRlcnIoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfcnhpbml0ZmFpbChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9yeGRpc2MoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfdHhpbml0ZXJyKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGN0Y21fY2h4X3R4cmV0cnkoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfaW9mYXRhbChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CisKKy8qCisgKiAtLS0tLSBzdGF0aWMgY3RjbXBjIGFjdGlvbnMgZm9yIGN0Y21wYyBjaGFubmVsIHN0YXRlbWFjaGluZSAtLS0tLQorICoKKyovCitzdGF0aWMgdm9pZCBjdGNtcGNfY2h4X3R4ZG9uZShmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtcGNfY2h4X3J4KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGN0Y21wY19jaHhfZmlyc3Rpbyhmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CisvKiBzaGFyZWQgOgorc3RhdGljIHZvaWQgY3RjbV9jaHhfc2V0bW9kZShmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9zdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9oYWx0aW8oZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfc3RvcHBlZChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9zdG9wKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGN0Y21fY2h4X2ZhaWwoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfc2V0dXBlcnIoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfcmVzdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9yeGluaXRlcnIoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfcnhpbml0ZmFpbChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtX2NoeF9yeGRpc2MoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfdHhpbml0ZXJyKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGN0Y21fY2h4X3R4cmV0cnkoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgY3RjbV9jaHhfaW9mYXRhbChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CisqLworc3RhdGljIHZvaWQgY3RjbXBjX2NoeF9hdHRuKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBjdGNtcGNfY2h4X2F0dG5idXN5KGZzbV9pbnN0YW5jZSAqLCBpbnQsIHZvaWQgKik7CitzdGF0aWMgdm9pZCBjdGNtcGNfY2h4X3Jlc2VuZChmc21faW5zdGFuY2UgKiwgaW50LCB2b2lkICopOworc3RhdGljIHZvaWQgY3RjbXBjX2NoeF9zZW5kX3N3ZWVwKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CisKKy8qKgorICogQ2hlY2sgcmV0dXJuIGNvZGUgb2YgYSBwcmVjZWVkaW5nIGNjd19kZXZpY2UgY2FsbCwgaGFsdF9JTyBldGMuLi4KKyAqCisgKiBjaAk6CVRoZSBjaGFubmVsLCB0aGUgZXJyb3IgYmVsb25ncyB0by4KKyAqIFJldHVybnMgdGhlIGVycm9yIGNvZGUgKCE9IDApIHRvIGluc3BlY3QuCisgKi8KK3ZvaWQgY3RjbV9jY3dfY2hlY2tfcmMoc3RydWN0IGNoYW5uZWwgKmNoLCBpbnQgcmMsIGNoYXIgKm1zZykKK3sKKwlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSJjY3cgZXJyb3IgJXMgKCVzKTogJTA0eFxuIiwgY2gtPmlkLCBtc2csIHJjKTsKKwlzd2l0Y2ggKHJjKSB7CisJY2FzZSAtRUJVU1k6CisJCWN0Y21fcHJfd2FybigiJXMgKCVzKTogQnVzeSAhXG4iLCBjaC0+aWQsIG1zZyk7CisJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfSU9fRUJVU1ksIGNoKTsKKwkJYnJlYWs7CisJY2FzZSAtRU5PREVWOgorCQljdGNtX3ByX2VtZXJnKCIlcyAoJXMpOiBJbnZhbGlkIGRldmljZSBjYWxsZWQgZm9yIElPXG4iLAorCQkJICAgICBjaC0+aWQsIG1zZyk7CisJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfSU9fRU5PREVWLCBjaCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN0Y21fcHJfZW1lcmcoIiVzICglcyk6IFVua25vd24gZXJyb3IgaW4gZG9fSU8gJTA0eFxuIiwKKwkJCSAgICAgY2gtPmlkLCBtc2csIHJjKTsKKwkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9JT19VTktOT1dOLCBjaCk7CisJfQorfQorCit2b2lkIGN0Y21fcHVyZ2Vfc2tiX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKnEpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDMsIF9fRlVOQ1RJT05fXyk7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKHEpKSkgeworCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9Cit9CisKKy8qKgorICogTk9QIGFjdGlvbiBmb3Igc3RhdGVtYWNoaW5lcworICovCitzdGF0aWMgdm9pZCBjdGNtX2FjdGlvbl9ub3AoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7Cit9CisKKy8qCisgKiBBY3Rpb25zIGZvciBjaGFubmVsIC0gc3RhdGVtYWNoaW5lcy4KKyAqLworCisvKioKKyAqIE5vcm1hbCBkYXRhIGhhcyBiZWVuIHNlbmQuIEZyZWUgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHNrYiAoaXQncyBpbiBpb19xdWV1ZSksIHJlc2V0IGRldi0+dGJ1c3kgYW5kCisgKiByZXZlcnQgdG8gaWRsZSBzdGF0ZS4KKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjaHhfdHhkb25lKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjaGFubmVsICpjaCA9IGFyZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGZpcnN0ID0gMTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGR1cmF0aW9uOworCXN0cnVjdCB0aW1lc3BlYyBkb25lX3N0YW1wID0gY3VycmVudF9rZXJuZWxfdGltZSgpOyAvKiB4dGltZSAqLworCisJZHVyYXRpb24gPQorCSAgICAoZG9uZV9zdGFtcC50dl9zZWMgLSBjaC0+cHJvZi5zZW5kX3N0YW1wLnR2X3NlYykgKiAxMDAwMDAwICsKKwkgICAgKGRvbmVfc3RhbXAudHZfbnNlYyAtIGNoLT5wcm9mLnNlbmRfc3RhbXAudHZfbnNlYykgLyAxMDAwOworCWlmIChkdXJhdGlvbiA+IGNoLT5wcm9mLnR4X3RpbWUpCisJCWNoLT5wcm9mLnR4X3RpbWUgPSBkdXJhdGlvbjsKKworCWlmIChjaC0+aXJiLT5zY3N3LmNvdW50ICE9IDApCisJCWN0Y21fcHJfZGVidWcoIiVzOiBUWCBub3QgY29tcGxldGUsIHJlbWFpbmluZyAlZCBieXRlc1xuIiwKKwkJCSAgICAgZGV2LT5uYW1lLCBjaC0+aXJiLT5zY3N3LmNvdW50KTsKKwlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2gtPmlvX3F1ZXVlKSkpIHsKKwkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOworCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbiAtIExMX0hFQURFUl9MRU5HVEg7CisJCWlmIChmaXJzdCkgeworCQkJcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gMjsKKwkJCWZpcnN0ID0gMDsKKwkJfQorCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwl9CisJc3Bpbl9sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKKwljbGVhcl9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1s0XSk7CisJaWYgKGNoLT5jb2xsZWN0X2xlbiA+IDApIHsKKwkJaW50IHJjOworCisJCWlmIChjdGNtX2NoZWNrYWxsb2NfYnVmZmVyKGNoKSkgeworCQkJc3Bpbl91bmxvY2soJmNoLT5jb2xsZWN0X2xvY2spOworCQkJcmV0dXJuOworCQl9CisJCWNoLT50cmFuc19za2ItPmRhdGEgPSBjaC0+dHJhbnNfc2tiX2RhdGE7CisJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoY2gtPnRyYW5zX3NrYik7CisJCWNoLT50cmFuc19za2ItPmxlbiA9IDA7CisJCWlmIChjaC0+cHJvZi5tYXhtdWx0aSA8IChjaC0+Y29sbGVjdF9sZW4gKyAyKSkKKwkJCWNoLT5wcm9mLm1heG11bHRpID0gY2gtPmNvbGxlY3RfbGVuICsgMjsKKwkJaWYgKGNoLT5wcm9mLm1heGNxdWV1ZSA8IHNrYl9xdWV1ZV9sZW4oJmNoLT5jb2xsZWN0X3F1ZXVlKSkKKwkJCWNoLT5wcm9mLm1heGNxdWV1ZSA9IHNrYl9xdWV1ZV9sZW4oJmNoLT5jb2xsZWN0X3F1ZXVlKTsKKwkJKigoX191MTYgKilza2JfcHV0KGNoLT50cmFuc19za2IsIDIpKSA9IGNoLT5jb2xsZWN0X2xlbiArIDI7CisJCWkgPSAwOworCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjaC0+Y29sbGVjdF9xdWV1ZSkpKSB7CisJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwKKwkJCQlza2JfcHV0KGNoLT50cmFuc19za2IsIHNrYi0+bGVuKSwgc2tiLT5sZW4pOworCQkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW4gLSBMTF9IRUFERVJfTEVOR1RIOworCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7CisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJaSsrOworCQl9CisJCWNoLT5jb2xsZWN0X2xlbiA9IDA7CisJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKKwkJY2gtPmNjd1sxXS5jb3VudCA9IGNoLT50cmFuc19za2ItPmxlbjsKKwkJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ01fVElNRV81X1NFQywgQ1RDX0VWRU5UX1RJTUVSLCBjaCk7CisJCWNoLT5wcm9mLnNlbmRfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCisJCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMF0sCisJCQkJCQkodW5zaWduZWQgbG9uZyljaCwgMHhmZiwgMCk7CisJCWNoLT5wcm9mLmRvaW9zX211bHRpKys7CisJCWlmIChyYyAhPSAwKSB7CisJCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkICs9IGk7CisJCQlwcml2LT5zdGF0cy50eF9lcnJvcnMgKz0gaTsKKwkJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJCWN0Y21fY2N3X2NoZWNrX3JjKGNoLCByYywgImNoYWluZWQgVFgiKTsKKwkJfQorCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKKwkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfVFhJRExFKTsKKwl9CisJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7Cit9CisKKy8qKgorICogSW5pdGlhbCBkYXRhIGlzIHNlbnQuCisgKiBOb3RpZnkgZGV2aWNlIHN0YXRlbWFjaGluZSB0aGF0IHdlIGFyZSB1cCBhbmQKKyAqIHJ1bm5pbmcuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLwordm9pZCBjdGNtX2NoeF90eGlkbGUoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwgKmNoID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlDVENNX0RCRl9URVhUKFRSQUNFLCA2LCBfX0ZVTkNUSU9OX18pOworCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9UWElETEUpOworCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWFVQLCBjaC0+bmV0ZGV2KTsKK30KKworLyoqCisgKiBHb3Qgbm9ybWFsIGRhdGEsIGNoZWNrIGZvciBzYW5pdHksIHF1ZXVlIGl0IHVwLCBhbGxvY2F0ZSBuZXcgYnVmZmVyCisgKiB0cmlnZ2VyIGJvdHRvbSBoYWxmLCBhbmQgaW5pdGlhdGUgbmV4dCByZWFkLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGNoeF9yeChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgbGVuID0gY2gtPm1heF9idWZzaXplIC0gY2gtPmlyYi0+c2Nzdy5jb3VudDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY2gtPnRyYW5zX3NrYjsKKwlfX3UxNiBibG9ja19sZW4gPSAqKChfX3UxNiAqKXNrYi0+ZGF0YSk7CisJaW50IGNoZWNrX2xlbjsKKwlpbnQgcmM7CisKKwlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJaWYgKGxlbiA8IDgpIHsKKwkJY3RjbV9wcl9kZWJ1ZygiJXM6IGdvdCBwYWNrZXQgd2l0aCBsZW5ndGggJWQgPCA4XG4iLAorCQkJICAgICBkZXYtPm5hbWUsIGxlbik7CisJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCQkJZ290byBhZ2FpbjsKKwl9CisJaWYgKGxlbiA+IGNoLT5tYXhfYnVmc2l6ZSkgeworCQljdGNtX3ByX2RlYnVnKCIlczogZ290IHBhY2tldCB3aXRoIGxlbmd0aCAlZCA+ICVkXG4iLAorCQkJICAgICBkZXYtPm5hbWUsIGxlbiwgY2gtPm1heF9idWZzaXplKTsKKwkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJCQlnb3RvIGFnYWluOworCX0KKworCS8qCisJICogVk0gVENQIHNlZW1zIHRvIGhhdmUgYSBidWcgc2VuZGluZyAyIHRyYWlsaW5nIGJ5dGVzIG9mIGdhcmJhZ2UuCisJICovCisJc3dpdGNoIChjaC0+cHJvdG9jb2wpIHsKKwljYXNlIENUQ01fUFJPVE9fUzM5MDoKKwljYXNlIENUQ01fUFJPVE9fT1MzOTA6CisJCWNoZWNrX2xlbiA9IGJsb2NrX2xlbiArIDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNoZWNrX2xlbiA9IGJsb2NrX2xlbjsKKwkJYnJlYWs7CisJfQorCWlmICgobGVuIDwgYmxvY2tfbGVuKSB8fCAobGVuID4gY2hlY2tfbGVuKSkgeworCQljdGNtX3ByX2RlYnVnKCIlczogZ290IGJsb2NrIGxlbmd0aCAlZCAhPSByeCBsZW5ndGggJWRcbiIsCisJCQkgICAgIGRldi0+bmFtZSwgYmxvY2tfbGVuLCBsZW4pOworCQlpZiAoZG9fZGVidWcpCisJCQljdGNtcGNfZHVtcF9za2Ioc2tiLCAwKTsKKworCQkqKChfX3UxNiAqKXNrYi0+ZGF0YSkgPSBsZW47CisJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCQkJZ290byBhZ2FpbjsKKwl9CisJYmxvY2tfbGVuIC09IDI7CisJaWYgKGJsb2NrX2xlbiA+IDApIHsKKwkJKigoX191MTYgKilza2ItPmRhdGEpID0gYmxvY2tfbGVuOworCQljdGNtX3VucGFja19za2IoY2gsIHNrYik7CisJfQorIGFnYWluOgorCXNrYi0+ZGF0YSA9IGNoLT50cmFuc19za2JfZGF0YTsKKwlza2JfcmVzZXRfdGFpbF9wb2ludGVyKHNrYik7CisJc2tiLT5sZW4gPSAwOworCWlmIChjdGNtX2NoZWNrYWxsb2NfYnVmZmVyKGNoKSkKKwkJcmV0dXJuOworCWNoLT5jY3dbMV0uY291bnQgPSBjaC0+bWF4X2J1ZnNpemU7CisJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoLT5jZGV2LCAmY2gtPmNjd1swXSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOworCWlmIChyYyAhPSAwKQorCQljdGNtX2Njd19jaGVja19yYyhjaCwgcmMsICJub3JtYWwgUlgiKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIGNvbm5lY3Rpb24gYnkgc2VuZGluZyBhIF9fdTE2IG9mIHZhbHVlIDAuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgY2h4X2ZpcnN0aW8oZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwgKmNoID0gYXJnOworCWludCByYzsKKworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDYsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZnNtX2dldHN0YXRlKGZpKSA9PSBDVENfU1RBVEVfVFhJRExFKQorCQljdGNtX3ByX2RlYnVnKCIlczogcmVtb3RlIHNpZGUgaXNzdWVkIFJFQUQ/LCBpbml0LlxuIiwgY2gtPmlkKTsKKwlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJaWYgKGN0Y21fY2hlY2thbGxvY19idWZmZXIoY2gpKQorCQlyZXR1cm47CisJaWYgKChmc21fZ2V0c3RhdGUoZmkpID09IENUQ19TVEFURV9TRVRVUFdBSVQpICYmCisJICAgIChjaC0+cHJvdG9jb2wgPT0gQ1RDTV9QUk9UT19PUzM5MCkpIHsKKwkJLyogT1MvMzkwIHJlc3AuIHovT1MgKi8KKwkJaWYgKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgeworCQkJKigoX191MTYgKiljaC0+dHJhbnNfc2tiLT5kYXRhKSA9IENUQ01fSU5JVElBTF9CTE9DS0xFTjsKKwkJCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCBDVENNX1RJTUVfNV9TRUMsCisJCQkJICAgICBDVENfRVZFTlRfVElNRVIsIGNoKTsKKwkJCWNoeF9yeGlkbGUoZmksIGV2ZW50LCBhcmcpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJCQlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCQkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfVFhJRExFKTsKKwkJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWFVQLCBkZXYpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIERvbid0IHNldHVwIGEgdGltZXIgZm9yIHJlY2VpdmluZyB0aGUgaW5pdGlhbCBSWCBmcmFtZQorCSAqIGlmIGluIGNvbXBhdGliaWxpdHkgbW9kZSwgc2luY2UgVk0gVENQIGRlbGF5cyB0aGUgaW5pdGlhbAorCSAqIGZyYW1lIHVudGlsIGl0IGhhcyBzb21lIGRhdGEgdG8gc2VuZC4KKwkgKi8KKwlpZiAoKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gV1JJVEUpIHx8CisJICAgIChjaC0+cHJvdG9jb2wgIT0gQ1RDTV9QUk9UT19TMzkwKSkKKwkJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ01fVElNRV81X1NFQywgQ1RDX0VWRU5UX1RJTUVSLCBjaCk7CisKKwkqKChfX3UxNiAqKWNoLT50cmFuc19za2ItPmRhdGEpID0gQ1RDTV9JTklUSUFMX0JMT0NLTEVOOworCWNoLT5jY3dbMV0uY291bnQgPSAyOwkvKiBUcmFuc2ZlciBvbmx5IGxlbmd0aCAqLworCisJZnNtX25ld3N0YXRlKGZpLCAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKQorCQkgICAgID8gQ1RDX1NUQVRFX1JYSU5JVCA6IENUQ19TVEFURV9UWElOSVQpOworCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMF0sCisJCQkJCSh1bnNpZ25lZCBsb25nKWNoLCAweGZmLCAwKTsKKwlpZiAocmMgIT0gMCkgeworCQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1NFVFVQV0FJVCk7CisJCWN0Y21fY2N3X2NoZWNrX3JjKGNoLCByYywgImluaXQgSU8iKTsKKwl9CisJLyoKKwkgKiBJZiBpbiBjb21wYXRpYmlsaXR5IG1vZGUgc2luY2Ugd2UgZG9uJ3Qgc2V0dXAgYSB0aW1lciwgd2UKKwkgKiBhbHNvIHNpZ25hbCBSWCBjaGFubmVsIHVwIGltbWVkaWF0ZWx5LiBUaGlzIGVuYWJsZXMgdXMKKwkgKiB0byBzZW5kIHBhY2tldHMgZWFybHkgd2hpY2ggaW4gdHVybiB1c3VhbGx5IHRyaWdnZXJzIHNvbWUKKwkgKiByZXBseSBmcm9tIFZNIFRDUCB3aGljaCBicmluZ3MgdXAgdGhlIFJYIGNoYW5uZWwgdG8gaXQncworCSAqIGZpbmFsIHN0YXRlLgorCSAqLworCWlmICgoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSAmJgorCSAgICAoY2gtPnByb3RvY29sID09IENUQ01fUFJPVE9fUzM5MCkpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9SWFVQLCBkZXYpOworCX0KK30KKworLyoqCisgKiBHb3QgaW5pdGlhbCBkYXRhLCBjaGVjayBpdC4gSWYgT0ssCisgKiBub3RpZnkgZGV2aWNlIHN0YXRlbWFjaGluZSB0aGF0IHdlIGFyZSB1cCBhbmQKKyAqIHJ1bm5pbmcuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgY2h4X3J4aWRsZShmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlfX3UxNiBidWZsZW47CisJaW50IHJjOworCisJQ1RDTV9EQkZfVEVYVChUUkFDRSwgNiwgX19GVU5DVElPTl9fKTsKKwlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJYnVmbGVuID0gKigoX191MTYgKiljaC0+dHJhbnNfc2tiLT5kYXRhKTsKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoIiVzOiBJbml0aWFsIFJYIGNvdW50ICVkXG4iLCBkZXYtPm5hbWUsIGJ1Zmxlbik7CisKKwlpZiAoYnVmbGVuID49IENUQ01fSU5JVElBTF9CTE9DS0xFTikgeworCQlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpCisJCQlyZXR1cm47CisJCWNoLT5jY3dbMV0uY291bnQgPSBjaC0+bWF4X2J1ZnNpemU7CisJCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1JYSURMRSk7CisJCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMF0sCisJCQkJCQkodW5zaWduZWQgbG9uZyljaCwgMHhmZiwgMCk7CisJCWlmIChyYyAhPSAwKSB7CisJCQlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9SWElOSVQpOworCQkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAiaW5pdGlhbCBSWCIpOworCQl9IGVsc2UKKwkJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9SWFVQLCBkZXYpOworCX0gZWxzZSB7CisJCWlmIChkb19kZWJ1ZykKKwkJCWN0Y21fcHJfZGVidWcoIiVzOiBJbml0aWFsIFJYIGNvdW50ICVkIG5vdCAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIGJ1ZmxlbiwgQ1RDTV9JTklUSUFMX0JMT0NLTEVOKTsKKwkJY2h4X2ZpcnN0aW8oZmksIGV2ZW50LCBhcmcpOworCX0KK30KKworLyoqCisgKiBTZXQgY2hhbm5lbCBpbnRvIGV4dGVuZGVkIG1vZGUuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgY3RjbV9jaHhfc2V0bW9kZShmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsKKwlpbnQgdGltZW91dCA9IENUQ01fVElNRV81X1NFQzsKKworCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwlpZiAoSVNfTVBDKGNoKSkgeworCQl0aW1lb3V0ID0gMTUwMDsKKwkJaWYgKGRvX2RlYnVnKQorCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbSBlbnRlcjogJXMoKTogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7CisJfQorCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCB0aW1lb3V0LCBDVENfRVZFTlRfVElNRVIsIGNoKTsKKwlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9TRVRVUFdBSVQpOworCWlmIChkb19kZWJ1Z19jY3cgJiYgSVNfTVBDKGNoKSkKKwkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKSZjaC0+Y2N3WzZdLCBzaXplb2Yoc3RydWN0IGNjdzEpICogMik7CisKKwlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1RJTUVSKQkvKiBvbmx5IGZvciB0aW1lciBub3QgeWV0IGxvY2tlZCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOworCQkJLyogU3VjaCBjb25kaXRpb25hbCBsb2NraW5nIGlzIHVuZGV0ZXJtaW5pc3RpYyBpbgorCQkJICogc3RhdGljIHZpZXcuID0+IGlnbm9yZSBzcGFyc2Ugd2FybmluZ3MgaGVyZS4gKi8KKworCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbNl0sCisJCQkJCSh1bnNpZ25lZCBsb25nKWNoLCAweGZmLCAwKTsKKwlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1RJTUVSKQkvKiBzZWUgYWJvdmUgY29tbWVudHMgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOworCWlmIChyYyAhPSAwKSB7CisJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfU1RBUlRXQUlUKTsKKwkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAic2V0IE1vZGUiKTsKKwl9IGVsc2UKKwkJY2gtPnJldHJ5ID0gMDsKK30KKworLyoqCisgKiBTZXR1cCBjaGFubmVsLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGN0Y21fY2h4X3N0YXJ0KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjaGFubmVsICpjaCA9IGFyZzsKKwlpbnQgcmM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIHNhdmVmbGFnczsKKworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDUsIF9fRlVOQ1RJT05fXyk7CisJaWYgKGNoID09IE5VTEwpIHsKKwkJY3RjbV9wcl93YXJuKCJjaHhfc3RhcnQgY2g9TlVMTFxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKGNoLT5uZXRkZXYgPT0gTlVMTCkgeworCQljdGNtX3ByX3dhcm4oImNoeF9zdGFydCBkZXY9TlVMTCwgaWQ9JXNcbiIsIGNoLT5pZCk7CisJCXJldHVybjsKKwl9CisJZGV2ID0gY2gtPm5ldGRldjsKKworCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiJXM6ICVzIGNoYW5uZWwgc3RhcnRcbiIsIGRldi0+bmFtZSwKKwkJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIpOworCisJaWYgKGNoLT50cmFuc19za2IgIT0gTlVMTCkgeworCQljbGVhcl9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1sxXSk7CisJCWRldl9rZnJlZV9za2IoY2gtPnRyYW5zX3NrYik7CisJCWNoLT50cmFuc19za2IgPSBOVUxMOworCX0KKwlpZiAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSB7CisJCWNoLT5jY3dbMV0uY21kX2NvZGUgPSBDQ1dfQ01EX1JFQUQ7CisJCWNoLT5jY3dbMV0uZmxhZ3MgPSBDQ1dfRkxBR19TTEk7CisJCWNoLT5jY3dbMV0uY291bnQgPSAwOworCX0gZWxzZSB7CisJCWNoLT5jY3dbMV0uY21kX2NvZGUgPSBDQ1dfQ01EX1dSSVRFOworCQljaC0+Y2N3WzFdLmZsYWdzID0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CisJCWNoLT5jY3dbMV0uY291bnQgPSAwOworCX0KKwlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpIHsKKwkJY3RjbV9wcl9ub3RpY2UoIiVzOiAlcyB0cmFuc19za2IgYWxsb2NhdGlvbiBkZWxheWVkICIKKwkJCQkidW50aWwgZmlyc3QgdHJhbnNmZXJcbiIsIGRldi0+bmFtZSwKKwkJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIpOworCX0KKworCWNoLT5jY3dbMF0uY21kX2NvZGUgPSBDQ1dfQ01EX1BSRVBBUkU7CisJY2gtPmNjd1swXS5mbGFncyA9IENDV19GTEFHX1NMSSB8IENDV19GTEFHX0NDOworCWNoLT5jY3dbMF0uY291bnQgPSAwOworCWNoLT5jY3dbMF0uY2RhID0gMDsKKwljaC0+Y2N3WzJdLmNtZF9jb2RlID0gQ0NXX0NNRF9OT09QOwkvKiBqb2ludGVkIENFICsgREUgKi8KKwljaC0+Y2N3WzJdLmZsYWdzID0gQ0NXX0ZMQUdfU0xJOworCWNoLT5jY3dbMl0uY291bnQgPSAwOworCWNoLT5jY3dbMl0uY2RhID0gMDsKKwltZW1jcHkoJmNoLT5jY3dbM10sICZjaC0+Y2N3WzBdLCBzaXplb2Yoc3RydWN0IGNjdzEpICogMyk7CisJY2gtPmNjd1s0XS5jZGEgPSAwOworCWNoLT5jY3dbNF0uZmxhZ3MgJj0gfkNDV19GTEFHX0lEQTsKKworCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1NUQVJUV0FJVCk7CisJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIDEwMDAsIENUQ19FVkVOVF9USU1FUiwgY2gpOworCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisJcmMgPSBjY3dfZGV2aWNlX2hhbHQoY2gtPmNkZXYsICh1bnNpZ25lZCBsb25nKWNoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisJaWYgKHJjICE9IDApIHsKKwkJaWYgKHJjICE9IC1FQlVTWSkKKwkJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAiaW5pdGlhbCBIYWx0SU8iKTsKKwl9Cit9CisKKy8qKgorICogU2h1dGRvd24gYSBjaGFubmVsLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGN0Y21fY2h4X2hhbHRpbyhmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3MgPSAwOworCWludCByYzsKKwlpbnQgb2xkc3RhdGU7CisKKwlDVENNX0RCRl9URVhUKFRSQUNFLCAyLCBfX0ZVTkNUSU9OX18pOworCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwlpZiAoSVNfTVBDKGNoKSkKKwkJZnNtX2RlbHRpbWVyKCZjaC0+c3dlZXBfdGltZXIpOworCisJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ01fVElNRV81X1NFQywgQ1RDX0VWRU5UX1RJTUVSLCBjaCk7CisKKwlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1NUT1ApCS8qIG9ubHkgZm9yIFNUT1Agbm90IHlldCBsb2NrZWQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwkJCS8qIFN1Y2ggY29uZGl0aW9uYWwgbG9ja2luZyBpcyB1bmRldGVybWluaXN0aWMgaW4KKwkJCSAqIHN0YXRpYyB2aWV3LiA9PiBpZ25vcmUgc3BhcnNlIHdhcm5pbmdzIGhlcmUuICovCisJb2xkc3RhdGUgPSBmc21fZ2V0c3RhdGUoZmkpOworCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1RFUk0pOworCXJjID0gY2N3X2RldmljZV9oYWx0KGNoLT5jZGV2LCAodW5zaWduZWQgbG9uZyljaCk7CisKKwlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1NUT1ApCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwkJCS8qIHNlZSByZW1hcmsgYWJvdmUgYWJvdXQgY29uZGl0aW9uYWwgbG9ja2luZyAqLworCisJaWYgKHJjICE9IDAgJiYgcmMgIT0gLUVCVVNZKSB7CisJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJaWYgKGV2ZW50ICE9IENUQ19FVkVOVF9TVE9QKSB7CisJCQlmc21fbmV3c3RhdGUoZmksIG9sZHN0YXRlKTsKKwkJCWN0Y21fY2N3X2NoZWNrX3JjKGNoLCByYywgKGNoYXIgKilfX0ZVTkNUSU9OX18pOworCQl9CisJfQorfQorCisvKioKKyAqIENsZWFudXAgaGVscGVyIGZvciBjaHhfZmFpbCBhbmQgY2h4X3N0b3BwZWQKKyAqIGNsZWFudXAgY2hhbm5lbHMgcXVldWUgYW5kIG5vdGlmeSBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogc3RhdGUJVGhlIG5leHQgc3RhdGUgKGRlcGVuZGluZyBvbiBjYWxsZXIpLgorICogY2gJCVRoZSBjaGFubmVsIHRvIG9wZXJhdGUgb24uCisgKi8KK3N0YXRpYyB2b2lkIGN0Y21fY2h4X2NsZWFudXAoZnNtX2luc3RhbmNlICpmaSwgaW50IHN0YXRlLAorCQlzdHJ1Y3QgY2hhbm5lbCAqY2gpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDMsIF9fRlVOQ1RJT05fXyk7CisKKwlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJaWYgKElTX01QQyhjaCkpCisJCWZzbV9kZWx0aW1lcigmY2gtPnN3ZWVwX3RpbWVyKTsKKworCWZzbV9uZXdzdGF0ZShmaSwgc3RhdGUpOworCWlmIChzdGF0ZSA9PSBDVENfU1RBVEVfU1RPUFBFRCAmJiBjaC0+dHJhbnNfc2tiICE9IE5VTEwpIHsKKwkJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbMV0pOworCQlkZXZfa2ZyZWVfc2tiX2FueShjaC0+dHJhbnNfc2tiKTsKKwkJY2gtPnRyYW5zX3NrYiA9IE5VTEw7CisJfQorCisJY2gtPnRoX3NlZyA9IDB4MDA7CisJY2gtPnRoX3NlcV9udW0gPSAweDAwOworCWlmIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpIHsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZjaC0+aW9fcXVldWUpOworCQlmc21fZXZlbnQocHJpdi0+ZnNtLCBERVZfRVZFTlRfUlhET1dOLCBkZXYpOworCX0gZWxzZSB7CisJCWN0Y21fcHVyZ2Vfc2tiX3F1ZXVlKCZjaC0+aW9fcXVldWUpOworCQlpZiAoSVNfTVBDKGNoKSkKKwkJCWN0Y21fcHVyZ2Vfc2tiX3F1ZXVlKCZjaC0+c3dlZXBfcXVldWUpOworCQlzcGluX2xvY2soJmNoLT5jb2xsZWN0X2xvY2spOworCQljdGNtX3B1cmdlX3NrYl9xdWV1ZSgmY2gtPmNvbGxlY3RfcXVldWUpOworCQljaC0+Y29sbGVjdF9sZW4gPSAwOworCQlzcGluX3VubG9jaygmY2gtPmNvbGxlY3RfbG9jayk7CisJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWERPV04sIGRldik7CisJfQorfQorCisvKioKKyAqIEEgY2hhbm5lbCBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gaGFsdGVkLgorICogQ2xlYW51cCBpdCdzIHF1ZXVlIGFuZCBub3RpZnkgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjdGNtX2NoeF9zdG9wcGVkKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDMsIF9fRlVOQ1RJT05fXyk7CisJY3RjbV9jaHhfY2xlYW51cChmaSwgQ1RDX1NUQVRFX1NUT1BQRUQsIGFyZyk7Cit9CisKKy8qKgorICogQSBzdG9wIGNvbW1hbmQgZnJvbSBkZXZpY2Ugc3RhdGVtYWNoaW5lIGFycml2ZWQgYW5kIHdlIGFyZSBpbgorICogbm90IG9wZXJhdGlvbmFsIG1vZGUuIFNldCBzdGF0ZSB0byBzdG9wcGVkLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGN0Y21fY2h4X3N0b3AoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfU1RPUFBFRCk7Cit9CisKKy8qKgorICogQSBtYWNoaW5lIGNoZWNrIGZvciBubyBwYXRoLCBub3Qgb3BlcmF0aW9uYWwgc3RhdHVzIG9yIGdvbmUgZGV2aWNlIGhhcworICogaGFwcGVuZWQuCisgKiBDbGVhbnVwIHF1ZXVlIGFuZCBub3RpZnkgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjdGNtX2NoeF9mYWlsKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDMsIF9fRlVOQ1RJT05fXyk7CisJY3RjbV9jaHhfY2xlYW51cChmaSwgQ1RDX1NUQVRFX05PVE9QLCBhcmcpOworfQorCisvKioKKyAqIEhhbmRsZSBlcnJvciBkdXJpbmcgc2V0dXAgb2YgY2hhbm5lbC4KKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjdGNtX2NoeF9zZXR1cGVycihmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCS8qCisJICogU3BlY2lhbCBjYXNlOiBHb3QgVUNfUkNSRVNFVCBvbiBzZXRtb2RlLgorCSAqIFRoaXMgbWVhbnMgdGhhdCByZW1vdGUgc2lkZSBpc24ndCBzZXR1cC4gSW4gdGhpcyBjYXNlCisJICogc2ltcGx5IHJldHJ5IGFmdGVyIHNvbWUgMTAgc2Vjcy4uLgorCSAqLworCWlmICgoZnNtX2dldHN0YXRlKGZpKSA9PSBDVENfU1RBVEVfU0VUVVBXQUlUKSAmJgorCSAgICAoKGV2ZW50ID09IENUQ19FVkVOVF9VQ19SQ1JFU0VUKSB8fAorCSAgICAgKGV2ZW50ID09IENUQ19FVkVOVF9VQ19SU1JFU0VUKSkpIHsKKwkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfU1RBUlRSRVRSWSk7CisJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ01fVElNRV81X1NFQywgQ1RDX0VWRU5UX1RJTUVSLCBjaCk7CisJCWlmICghSVNfTVBDKGNoKSAmJiAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSkgeworCQkJaW50IHJjID0gY2N3X2RldmljZV9oYWx0KGNoLT5jZGV2LCAodW5zaWduZWQgbG9uZyljaCk7CisJCQlpZiAocmMgIT0gMCkKKwkJCQljdGNtX2Njd19jaGVja19yYyhjaCwgcmMsCisJCQkJCSJIYWx0SU8gaW4gY2h4X3NldHVwZXJyIik7CisJCX0KKwkJcmV0dXJuOworCX0KKworCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0NSSVQsCisJCSIlcyA6ICVzIGVycm9yIGR1cmluZyAlcyBjaGFubmVsIHNldHVwIHN0YXRlPSVzXG4iLAorCQlkZXYtPm5hbWUsIGN0Y19jaF9ldmVudF9uYW1lc1tldmVudF0sCisJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIsCisJCWZzbV9nZXRzdGF0ZV9zdHIoZmkpKTsKKworCWlmIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpIHsKKwkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfUlhFUlIpOworCQlmc21fZXZlbnQocHJpdi0+ZnNtLCBERVZfRVZFTlRfUlhET1dOLCBkZXYpOworCX0gZWxzZSB7CisJCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1RYRVJSKTsKKwkJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1RYRE9XTiwgZGV2KTsKKwl9Cit9CisKKy8qKgorICogUmVzdGFydCBhIGNoYW5uZWwgYWZ0ZXIgYW4gZXJyb3IuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgY3RjbV9jaHhfcmVzdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3MgPSAwOworCWludCBvbGRzdGF0ZTsKKwlpbnQgcmM7CisKKwlDVENNX0RCRl9URVhUKFRSQUNFLCBDVENfREJGX05PVElDRSwgX19GVU5DVElPTl9fKTsKKwlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJY3RjbV9wcl9kZWJ1ZygiJXM6ICVzIGNoYW5uZWwgcmVzdGFydFxuIiwgZGV2LT5uYW1lLAorCQkgICAgIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIpOworCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCBDVENNX1RJTUVfNV9TRUMsIENUQ19FVkVOVF9USU1FUiwgY2gpOworCW9sZHN0YXRlID0gZnNtX2dldHN0YXRlKGZpKTsKKwlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9TVEFSVFdBSVQpOworCWlmIChldmVudCA9PSBDVENfRVZFTlRfVElNRVIpCS8qIG9ubHkgZm9yIHRpbWVyIG5vdCB5ZXQgbG9ja2VkICovCisJCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisJCQkvKiBTdWNoIGNvbmRpdGlvbmFsIGxvY2tpbmcgaXMgYSBrbm93biBwcm9ibGVtIGZvcgorCQkJICogc3BhcnNlIGJlY2F1c2UgaXRzIHVuZGV0ZXJtaW5pc3RpYyBpbiBzdGF0aWMgdmlldy4KKwkJCSAqIFdhcm5pbmdzIHNob3VsZCBiZSBpZ25vcmVkIGhlcmUuICovCisJcmMgPSBjY3dfZGV2aWNlX2hhbHQoY2gtPmNkZXYsICh1bnNpZ25lZCBsb25nKWNoKTsKKwlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1RJTUVSKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisJaWYgKHJjICE9IDApIHsKKwkJaWYgKHJjICE9IC1FQlVTWSkgeworCQkgICAgZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOworCQkgICAgZnNtX25ld3N0YXRlKGZpLCBvbGRzdGF0ZSk7CisJCX0KKwkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAiSGFsdElPIGluIGN0Y21fY2h4X3Jlc3RhcnQiKTsKKwl9Cit9CisKKy8qKgorICogSGFuZGxlIGVycm9yIGR1cmluZyBSWCBpbml0aWFsIGhhbmRzaGFrZSAoZXhjaGFuZ2Ugb2YKKyAqIDAtbGVuZ3RoIGJsb2NrIGhlYWRlcikKKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjdGNtX2NoeF9yeGluaXRlcnIoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwgKmNoID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlDVENNX0RCRl9URVhUKFNFVFVQLCAzLCBfX0ZVTkNUSU9OX18pOworCWlmIChldmVudCA9PSBDVENfRVZFTlRfVElNRVIpIHsKKwkJaWYgKCFJU19NUENERVYoZGV2KSkKKwkJCS8qIFRPRE8gOiBjaGVjayBpZiBNUEMgZGVsZXRlcyB0aW1lciBzb21ld2hlcmUgKi8KKwkJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJY3RjbV9wcl9kZWJ1ZygiJXM6IFRpbWVvdXQgZHVyaW5nIFJYIGluaXQgaGFuZHNoYWtlXG4iLAorCQkJCWRldi0+bmFtZSk7CisJCWlmIChjaC0+cmV0cnkrKyA8IDMpCisJCQljdGNtX2NoeF9yZXN0YXJ0KGZpLCBldmVudCwgYXJnKTsKKwkJZWxzZSB7CisJCQlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9SWEVSUik7CisJCQlmc21fZXZlbnQocHJpdi0+ZnNtLCBERVZfRVZFTlRfUlhET1dOLCBkZXYpOworCQl9CisJfSBlbHNlCisJCWN0Y21fcHJfd2FybigiJXM6IEVycm9yIGR1cmluZyBSWCBpbml0IGhhbmRzaGFrZVxuIiwgZGV2LT5uYW1lKTsKK30KKworLyoqCisgKiBOb3RpZnkgZGV2aWNlIHN0YXRlbWFjaGluZSBpZiB3ZSBnYXZlIHVwIGluaXRpYWxpemF0aW9uCisgKiBvZiBSWCBjaGFubmVsLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGN0Y21fY2h4X3J4aW5pdGZhaWwoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwgKmNoID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlDVENNX0RCRl9URVhUKFNFVFVQLCAzLCBfX0ZVTkNUSU9OX18pOworCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1JYRVJSKTsKKwljdGNtX3ByX3dhcm4oIiVzOiBSWCBidXN5LiBJbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1JYRE9XTiwgZGV2KTsKK30KKworLyoqCisgKiBIYW5kbGUgUlggVW5pdCBjaGVjayByZW1vdGUgcmVzZXQgKHJlbW90ZSBkaXNjb25uZWN0ZWQpCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgY3RjbV9jaHhfcnhkaXNjKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjaGFubmVsICpjaCA9IGFyZzsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2gyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlDVENNX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LCAiR290IHJlbW90ZSBkaXNjb25uZWN0LCByZS1pbml0aWFsaXppbmciKTsKKwlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCIlczogR290IHJlbW90ZSBkaXNjb25uZWN0LCAiCisJCQkJInJlLWluaXRpYWxpemluZyAuLi5cbiIsIGRldi0+bmFtZSk7CisJLyoKKwkgKiBOb3RpZnkgZGV2aWNlIHN0YXRlbWFjaGluZQorCSAqLworCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9SWERPV04sIGRldik7CisJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1RYRE9XTiwgZGV2KTsKKworCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX0RURVJNKTsKKwljaDIgPSBwcml2LT5jaGFubmVsW1dSSVRFXTsKKwlmc21fbmV3c3RhdGUoY2gyLT5mc20sIENUQ19TVEFURV9EVEVSTSk7CisKKwljY3dfZGV2aWNlX2hhbHQoY2gtPmNkZXYsICh1bnNpZ25lZCBsb25nKWNoKTsKKwljY3dfZGV2aWNlX2hhbHQoY2gyLT5jZGV2LCAodW5zaWduZWQgbG9uZyljaDIpOworfQorCisvKioKKyAqIEhhbmRsZSBlcnJvciBkdXJpbmcgVFggY2hhbm5lbCBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjdGNtX2NoeF90eGluaXRlcnIoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwgKmNoID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1RJTUVSKSB7CisJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJQ1RDTV9EQkZfREVWX05BTUUoRVJST1IsIGRldiwKKwkJCQkiVGltZW91dCBkdXJpbmcgVFggaW5pdCBoYW5kc2hha2UiKTsKKwkJaWYgKGNoLT5yZXRyeSsrIDwgMykKKwkJCWN0Y21fY2h4X3Jlc3RhcnQoZmksIGV2ZW50LCBhcmcpOworCQllbHNlIHsKKwkJCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1RYRVJSKTsKKwkJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWERPV04sIGRldik7CisJCX0KKwl9IGVsc2UgeworCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKKwkJCSIlcyA6ICVzIGVycm9yIGR1cmluZyBjaGFubmVsIHNldHVwIHN0YXRlPSVzIiwKKwkJCWRldi0+bmFtZSwgY3RjX2NoX2V2ZW50X25hbWVzW2V2ZW50XSwKKwkJCWZzbV9nZXRzdGF0ZV9zdHIoZmkpKTsKKworCQljdGNtX3ByX3dhcm4oIiVzOiBFcnJvciBkdXJpbmcgVFggaW5pdCBoYW5kc2hha2VcbiIsIGRldi0+bmFtZSk7CisJfQorfQorCisvKioKKyAqIEhhbmRsZSBUWCB0aW1lb3V0IGJ5IHJldHJ5aW5nIG9wZXJhdGlvbi4KKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjdGNtX2NoeF90eHJldHJ5KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjaGFubmVsICpjaCA9IGFyZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMoKTogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKKwkJCV9fRlVOQ1RJT05fXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwgY2gtPmlkKTsKKworCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwlpZiAoY2gtPnJldHJ5KysgPiAzKSB7CisJCXN0cnVjdCBtcGNfZ3JvdXAgKmdwdHIgPSBwcml2LT5tcGNnOworCQljdGNtX3ByX2RlYnVnKCIlczogVFggcmV0cnkgZmFpbGVkLCByZXN0YXJ0aW5nIGNoYW5uZWxcbiIsCisJCQkgICAgIGRldi0+bmFtZSk7CisJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWERPV04sIGRldik7CisJCS8qIGNhbGwgcmVzdGFydCBpZiBub3QgTVBDIG9yIGlmIE1QQyBhbmQgbXBjZyBmc20gaXMgcmVhZHkuCisJCQl1c2UgZ3B0ciBhcyBtcGMgaW5kaWNhdG9yICovCisJCWlmICghKGdwdHIgJiYgKGZzbV9nZXRzdGF0ZShncHRyLT5mc20pICE9IE1QQ0dfU1RBVEVfUkVBRFkpKSkKKwkJCWN0Y21fY2h4X3Jlc3RhcnQoZmksIGV2ZW50LCBhcmcpOworCQkJCWdvdG8gZG9uZTsKKwl9CisKKwljdGNtX3ByX2RlYnVnKCIlczogVFggcmV0cnkgJWRcbiIsIGRldi0+bmFtZSwgY2gtPnJldHJ5KTsKKwlza2IgPSBza2JfcGVlaygmY2gtPmlvX3F1ZXVlKTsKKwlpZiAoc2tiKSB7CisJCWludCByYyA9IDA7CisJCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsKKwkJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbNF0pOworCQljaC0+Y2N3WzRdLmNvdW50ID0gc2tiLT5sZW47CisJCWlmIChzZXRfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbNF0sIHNrYi0+ZGF0YSkpIHsKKwkJCWN0Y21fcHJfZGVidWcoIiVzOiBJREFMIGFsbG9jIGZhaWxlZCwgY2hhbiByZXN0YXJ0XG4iLAorCQkJCQkJZGV2LT5uYW1lKTsKKwkJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWERPV04sIGRldik7CisJCQljdGNtX2NoeF9yZXN0YXJ0KGZpLCBldmVudCwgYXJnKTsKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwkJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIDEwMDAsIENUQ19FVkVOVF9USU1FUiwgY2gpOworCQlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1RJTUVSKSAvKiBmb3IgVElNRVIgbm90IHlldCBsb2NrZWQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisJCQkvKiBTdWNoIGNvbmRpdGlvbmFsIGxvY2tpbmcgaXMgYSBrbm93biBwcm9ibGVtIGZvcgorCQkJICogc3BhcnNlIGJlY2F1c2UgaXRzIHVuZGV0ZXJtaW5pc3RpYyBpbiBzdGF0aWMgdmlldy4KKwkJCSAqIFdhcm5pbmdzIHNob3VsZCBiZSBpZ25vcmVkIGhlcmUuICovCisJCWlmIChkb19kZWJ1Z19jY3cpCisJCQljdGNtcGNfZHVtcGl0KChjaGFyICopJmNoLT5jY3dbM10sCisJCQkJCXNpemVvZihzdHJ1Y3QgY2N3MSkgKiAzKTsKKworCQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2gtPmNkZXYsICZjaC0+Y2N3WzNdLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOworCQlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1RJTUVSKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLAorCQkJCQlzYXZlZmxhZ3MpOworCQlpZiAocmMgIT0gMCkgeworCQkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOworCQkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAiVFggaW4gY2h4X3R4cmV0cnkiKTsKKwkJCWN0Y21fcHVyZ2Vfc2tiX3F1ZXVlKCZjaC0+aW9fcXVldWUpOworCQl9CisJfQorZG9uZToKKwlyZXR1cm47Cit9CisKKy8qKgorICogSGFuZGxlIGZhdGFsIGVycm9ycyBkdXJpbmcgYW4gSS9PIGNvbW1hbmQuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgY3RjbV9jaHhfaW9mYXRhbChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDMsIF9fRlVOQ1RJT05fXyk7CisJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOworCWN0Y21fcHJfd2FybigiJXMgJXMgOiB1bnJlY292ZXJhYmxlIGNoYW5uZWwgZXJyb3JcbiIsCisJCQlDVENfRFJJVkVSX05BTUUsIGRldi0+bmFtZSk7CisJaWYgKElTX01QQyhjaCkpIHsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwl9CisKKwlpZiAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSB7CisJCWN0Y21fcHJfZGVidWcoIiVzOiBSWCBJL08gZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1JYRVJSKTsKKwkJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1JYRE9XTiwgZGV2KTsKKwl9IGVsc2UgeworCQljdGNtX3ByX2RlYnVnKCIlczogVFggSS9PIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCQlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9UWEVSUik7CisJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWERPV04sIGRldik7CisJfQorfQorCisvKgorICogVGhlIGN0Y20gc3RhdGVtYWNoaW5lIGZvciBhIGNoYW5uZWwuCisgKi8KK2NvbnN0IGZzbV9ub2RlIGNoX2ZzbVtdID0geworCXsgQ1RDX1NUQVRFX1NUT1BQRUQsCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1NUT1BQRUQsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9jaHhfc3RhcnQgIH0sCisJeyBDVENfU1RBVEVfU1RPUFBFRCwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENUQ19TVEFURV9TVE9QUEVELAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCisJeyBDVENfU1RBVEVfTk9UT1AsCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfc3RvcCAgfSwKKwl7IENUQ19TVEFURV9OT1RPUCwJQ1RDX0VWRU5UX1NUQVJULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfTk9UT1AsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfTk9UT1AsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfTk9UT1AsCUNUQ19FVkVOVF9NQ19HT09ELAljdGNtX2NoeF9zdGFydCAgfSwKKworCXsgQ1RDX1NUQVRFX1NUQVJUV0FJVCwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDVENfU1RBVEVfU1RBUlRXQUlULAlDVENfRVZFTlRfU1RBUlQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFdBSVQsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtX2NoeF9zZXRtb2RlICB9LAorCXsgQ1RDX1NUQVRFX1NUQVJUV0FJVCwJQ1RDX0VWRU5UX1RJTUVSLAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFdBSVQsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDVENfU1RBVEVfU1RBUlRXQUlULAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKworCXsgQ1RDX1NUQVRFX1NUQVJUUkVUUlksCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfaGFsdGlvICB9LAorCXsgQ1RDX1NUQVRFX1NUQVJUUkVUUlksCUNUQ19FVkVOVF9USU1FUiwJY3RjbV9jaHhfc2V0bW9kZSAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFJFVFJZLAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1NUQVJUUkVUUlksCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDVENfU1RBVEVfU0VUVVBXQUlULAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9TRVRVUFdBSVQsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1NFVFVQV0FJVCwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWNoeF9maXJzdGlvICB9LAorCXsgQ1RDX1NUQVRFX1NFVFVQV0FJVCwJQ1RDX0VWRU5UX1VDX1JDUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ1RDX1NUQVRFX1NFVFVQV0FJVCwJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ1RDX1NUQVRFX1NFVFVQV0FJVCwJQ1RDX0VWRU5UX1RJTUVSLAljdGNtX2NoeF9zZXRtb2RlICB9LAorCXsgQ1RDX1NUQVRFX1NFVFVQV0FJVCwJQ1RDX0VWRU5UX0lPX0VOT0RFViwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENUQ19TVEFURV9TRVRVUFdBSVQsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDVENfU1RBVEVfUlhJTklULAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9SWElOSVQsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1JYSU5JVCwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWNoeF9yeGlkbGUgIH0sCisJeyBDVENfU1RBVEVfUlhJTklULAlDVENfRVZFTlRfVUNfUkNSRVNFVCwJY3RjbV9jaHhfcnhpbml0ZXJyICB9LAorCXsgQ1RDX1NUQVRFX1JYSU5JVCwJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fY2h4X3J4aW5pdGVyciAgfSwKKwl7IENUQ19TVEFURV9SWElOSVQsCUNUQ19FVkVOVF9USU1FUiwJY3RjbV9jaHhfcnhpbml0ZXJyICB9LAorCXsgQ1RDX1NUQVRFX1JYSU5JVCwJQ1RDX0VWRU5UX0FUVE5CVVNZLAljdGNtX2NoeF9yeGluaXRmYWlsICB9LAorCXsgQ1RDX1NUQVRFX1JYSU5JVCwJQ1RDX0VWRU5UX0lPX0VOT0RFViwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENUQ19TVEFURV9SWElOSVQsCUNUQ19FVkVOVF9VQ19aRVJPLAljaHhfZmlyc3RpbyAgfSwKKwl7IENUQ19TVEFURV9SWElOSVQsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDVENfU1RBVEVfUlhJRExFLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9SWElETEUsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1JYSURMRSwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWNoeF9yeCAgfSwKKwl7IENUQ19TVEFURV9SWElETEUsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF9yeGRpc2MgIH0sCisJeyBDVENfU1RBVEVfUlhJRExFLAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ1RDX1NUQVRFX1JYSURMRSwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDVENfU1RBVEVfUlhJRExFLAlDVENfRVZFTlRfVUNfWkVSTywJY2h4X3J4ICB9LAorCisJeyBDVENfU1RBVEVfVFhJTklULAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9UWElOSVQsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RYSU5JVCwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21fY2h4X3R4aWRsZSAgfSwKKwl7IENUQ19TVEFURV9UWElOSVQsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF90eGluaXRlcnIgIH0sCisJeyBDVENfU1RBVEVfVFhJTklULAlDVENfRVZFTlRfVUNfUlNSRVNFVCwJY3RjbV9jaHhfdHhpbml0ZXJyICB9LAorCXsgQ1RDX1NUQVRFX1RYSU5JVCwJQ1RDX0VWRU5UX1RJTUVSLAljdGNtX2NoeF90eGluaXRlcnIgIH0sCisJeyBDVENfU1RBVEVfVFhJTklULAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ1RDX1NUQVRFX1RYSU5JVCwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisKKwl7IENUQ19TVEFURV9UWElETEUsCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfaGFsdGlvICB9LAorCXsgQ1RDX1NUQVRFX1RYSURMRSwJQ1RDX0VWRU5UX1NUQVJULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfVFhJRExFLAlDVENfRVZFTlRfRklOU1RBVCwJY2h4X2ZpcnN0aW8gIH0sCisJeyBDVENfU1RBVEVfVFhJRExFLAlDVENfRVZFTlRfVUNfUkNSRVNFVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RYSURMRSwJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENUQ19TVEFURV9UWElETEUsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDVENfU1RBVEVfVFhJRExFLAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKworCXsgQ1RDX1NUQVRFX1RFUk0sCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RFUk0sCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9jaHhfcmVzdGFydCAgfSwKKwl7IENUQ19TVEFURV9URVJNLAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbV9jaHhfc3RvcHBlZCAgfSwKKwl7IENUQ19TVEFURV9URVJNLAlDVENfRVZFTlRfVUNfUkNSRVNFVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RFUk0sCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfVEVSTSwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisKKwl7IENUQ19TVEFURV9EVEVSTSwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9jaHhfcmVzdGFydCAgfSwKKwl7IENUQ19TVEFURV9EVEVSTSwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21fY2h4X3NldG1vZGUgIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDVENfU1RBVEVfVFgsCQlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9UWCwJCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RYLAkJQ1RDX0VWRU5UX0ZJTlNUQVQsCWNoeF90eGRvbmUgIH0sCisJeyBDVENfU1RBVEVfVFgsCQlDVENfRVZFTlRfVUNfUkNSRVNFVCwJY3RjbV9jaHhfdHhyZXRyeSAgfSwKKwl7IENUQ19TVEFURV9UWCwJCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2NoeF90eHJldHJ5ICB9LAorCXsgQ1RDX1NUQVRFX1RYLAkJQ1RDX0VWRU5UX1RJTUVSLAljdGNtX2NoeF90eHJldHJ5ICB9LAorCXsgQ1RDX1NUQVRFX1RYLAkJQ1RDX0VWRU5UX0lPX0VOT0RFViwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENUQ19TVEFURV9UWCwJCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDVENfU1RBVEVfUlhFUlIsCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfaGFsdGlvICB9LAorCXsgQ1RDX1NUQVRFX1RYRVJSLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9UWEVSUiwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDVENfU1RBVEVfUlhFUlIsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorfTsKKworaW50IGNoX2ZzbV9sZW4gPSBBUlJBWV9TSVpFKGNoX2ZzbSk7CisKKy8qCisgKiBNUEMgYWN0aW9ucyBmb3IgbXBjIGNoYW5uZWwgc3RhdGVtYWNoaW5lCisgKiBoYW5kbGluZyBvZiBNUEMgcHJvdG9jb2wgcmVxdWlyZXMgZXh0cmEKKyAqIHN0YXRlbWFjaGluZSBhbmQgYWN0aW9ucyB3aGljaCBhcmUgcHJlZml4ZWQgY3RjbXBjXyAuCisgKiBUaGUgY3RjX2NoX3N0YXRlcyBhbmQgY3RjX2NoX3N0YXRlX25hbWVzLAorICogY3RjX2NoX2V2ZW50cyBhbmQgY3RjX2NoX2V2ZW50X25hbWVzIHNoYXJlIHRoZSBjdGNtIGRlZmluaXRpb25zCisgKiB3aGljaCBhcmUgZXhwYW5kZWQgYnkgc29tZSBlbGVtZW50cy4KKyAqLworCisvKgorICogQWN0aW9ucyBmb3IgbXBjIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICovCisKKy8qKgorICogTm9ybWFsIGRhdGEgaGFzIGJlZW4gc2VuZC4gRnJlZSB0aGUgY29ycmVzcG9uZGluZworICogc2tiIChpdCdzIGluIGlvX3F1ZXVlKSwgcmVzZXQgZGV2LT50YnVzeSBhbmQKKyAqIHJldmVydCB0byBpZGxlIHN0YXRlLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGN0Y21wY19jaHhfdHhkb25lKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjaGFubmVsCQkqY2ggPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldiA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdgkqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwCSpncnAgPSBwcml2LT5tcGNnOworCXN0cnVjdCBza19idWZmCQkqc2tiOworCWludAkJZmlyc3QgPSAxOworCWludAkJaTsKKwlzdHJ1Y3QgdGltZXNwZWMgZG9uZV9zdGFtcDsKKwlfX3UzMgkJZGF0YV9zcGFjZTsKKwl1bnNpZ25lZCBsb25nCWR1cmF0aW9uOworCXN0cnVjdCBza19idWZmCSpwZWVrc2tiOworCWludAkJcmM7CisJc3RydWN0IHRoX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBwZHUJKnBfaGVhZGVyOworCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCIlcyBjcDolaSBlbnRlcjogICVzKClcbiIsCisJCQlkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19GVU5DVElPTl9fKTsKKworCWRvbmVfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCisJZHVyYXRpb24gPSAoZG9uZV9zdGFtcC50dl9zZWMgLSBjaC0+cHJvZi5zZW5kX3N0YW1wLnR2X3NlYykgKiAxMDAwMDAwCisJCSsgKGRvbmVfc3RhbXAudHZfbnNlYyAtIGNoLT5wcm9mLnNlbmRfc3RhbXAudHZfbnNlYykgLyAxMDAwOworCWlmIChkdXJhdGlvbiA+IGNoLT5wcm9mLnR4X3RpbWUpCisJCWNoLT5wcm9mLnR4X3RpbWUgPSBkdXJhdGlvbjsKKworCWlmIChjaC0+aXJiLT5zY3N3LmNvdW50ICE9IDApCisJCWN0Y21fcHJfZGVidWcoIiVzOiBUWCBub3QgY29tcGxldGUsIHJlbWFpbmluZyAlZCBieXRlc1xuIiwKKwkJCQlkZXYtPm5hbWUsIGNoLT5pcmItPnNjc3cuY291bnQpOworCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjaC0+aW9fcXVldWUpKSkgeworCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuIC0gVEhfSEVBREVSX0xFTkdUSDsKKwkJaWYgKGZpcnN0KSB7CisJCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSAyOworCQkJZmlyc3QgPSAwOworCQl9CisJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCX0KKwlzcGluX2xvY2soJmNoLT5jb2xsZWN0X2xvY2spOworCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzRdKTsKKworCWlmICgoY2gtPmNvbGxlY3RfbGVuIDw9IDApIHx8IChncnAtPmluX3N3ZWVwICE9IDApKSB7CisJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKKwkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfVFhJRExFKTsKKwkJCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGN0Y21fY2hlY2thbGxvY19idWZmZXIoY2gpKSB7CisJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKKwkJCQlnb3RvIGRvbmU7CisJfQorCWNoLT50cmFuc19za2ItPmRhdGEgPSBjaC0+dHJhbnNfc2tiX2RhdGE7CisJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihjaC0+dHJhbnNfc2tiKTsKKwljaC0+dHJhbnNfc2tiLT5sZW4gPSAwOworCWlmIChjaC0+cHJvZi5tYXhtdWx0aSA8IChjaC0+Y29sbGVjdF9sZW4gKyBUSF9IRUFERVJfTEVOR1RIKSkKKwkJY2gtPnByb2YubWF4bXVsdGkgPSBjaC0+Y29sbGVjdF9sZW4gKyBUSF9IRUFERVJfTEVOR1RIOworCWlmIChjaC0+cHJvZi5tYXhjcXVldWUgPCBza2JfcXVldWVfbGVuKCZjaC0+Y29sbGVjdF9xdWV1ZSkpCisJCWNoLT5wcm9mLm1heGNxdWV1ZSA9IHNrYl9xdWV1ZV9sZW4oJmNoLT5jb2xsZWN0X3F1ZXVlKTsKKwlpID0gMDsKKworCWlmIChkb19kZWJ1Z19kYXRhKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgYnVpbGRpbmcgIgorCQkJICAgICAgICJ0cmFuc19za2IgZnJvbSBjb2xsZWN0X3EgXG4iLCBfX0ZVTkNUSU9OX18pOworCisJZGF0YV9zcGFjZSA9IGdycC0+Z3JvdXBfbWF4X2J1ZmxlbiAtIFRIX0hFQURFUl9MRU5HVEg7CisKKwlpZiAoZG9fZGVidWdfZGF0YSkKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIGJ1aWxkaW5nIHRyYW5zX3NrYiBmcm9tIGNvbGxlY3RfcSIKKwkJICAgICAgICIgZGF0YV9zcGFjZTolMDR4XG4iLCBfX0ZVTkNUSU9OX18sIGRhdGFfc3BhY2UpOworCXBfaGVhZGVyID0gTlVMTDsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjaC0+Y29sbGVjdF9xdWV1ZSkpKSB7CisJCW1lbWNweShza2JfcHV0KGNoLT50cmFuc19za2IsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCXBfaGVhZGVyID0gKHN0cnVjdCBwZHUgKikKKwkJCShza2JfdGFpbF9wb2ludGVyKGNoLT50cmFuc19za2IpIC0gc2tiLT5sZW4pOworCQlwX2hlYWRlci0+cGR1X2ZsYWcgPSAweDAwOworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9TTkFQKSkKKwkJCXBfaGVhZGVyLT5wZHVfZmxhZyB8PSAweDYwOworCQllbHNlCisJCQlwX2hlYWRlci0+cGR1X2ZsYWcgfD0gMHgyMDsKKworCQlpZiAoZG9fZGVidWdfZGF0YSkgeworCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpdHJhbnNfc2tiIGxlbjolMDR4IFxuIiwKKwkJCQkgICAgICAgX19GVU5DVElPTl9fLCBjaC0+dHJhbnNfc2tiLT5sZW4pOworCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIHBkdSBoZWFkZXIgYW5kIGRhdGEiCisJCQkJICAgICAgICIgZm9yIHVwIHRvIDMyIGJ5dGVzIHNlbnQgdG8gdnRhbVxuIiwKKwkJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCWN0Y21wY19kdW1waXQoKGNoYXIgKilwX2hlYWRlciwKKwkJCQkJCW1pbl90KGludCwgc2tiLT5sZW4sIDMyKSk7CisJCX0KKwkJY2gtPmNvbGxlY3RfbGVuIC09IHNrYi0+bGVuOworCQlkYXRhX3NwYWNlIC09IHNrYi0+bGVuOworCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcGVla3NrYiA9IHNrYl9wZWVrKCZjaC0+Y29sbGVjdF9xdWV1ZSk7CisJCWlmIChwZWVrc2tiLT5sZW4gPiBkYXRhX3NwYWNlKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CisJLyogcF9oZWFkZXIgcG9pbnRzIHRvIHRoZSBsYXN0IG9uZSB3ZSBoYW5kbGVkICovCisJaWYgKHBfaGVhZGVyKQorCQlwX2hlYWRlci0+cGR1X2ZsYWcgfD0gUERVX0xBU1Q7CS8qU2F5IGl0J3MgdGhlIGxhc3Qgb25lKi8KKwloZWFkZXIgPSBremFsbG9jKFRIX0hFQURFUl9MRU5HVEgsIGdmcF90eXBlKCkpOworCisJaWYgKCFoZWFkZXIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbXBjOiBPVVQgT0YgTUVNT1JZIElOICVzKCkiCisJCSAgICAgICAiOiBEYXRhIExvc3QgXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzcGluX3VubG9jaygmY2gtPmNvbGxlY3RfbG9jayk7CisJCWZzbV9ldmVudChwcml2LT5tcGNnLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJZ290byBkb25lOworCX0KKworCWhlYWRlci0+dGhfY2hfZmxhZyA9IFRIX0hBU19QRFU7ICAvKiBOb3JtYWwgZGF0YSAqLworCWNoLT50aF9zZXFfbnVtKys7CisJaGVhZGVyLT50aF9zZXFfbnVtID0gY2gtPnRoX3NlcV9udW07CisKKwlpZiAoZG9fZGVidWdfZGF0YSkKKwkJY3RjbV9wcl9kZWJ1ZygiJXM6IFRvVlRBTV90aF9zZXE9ICUwOHhcbiIgLAorCQkJCQlfX0ZVTkNUSU9OX18sIGNoLT50aF9zZXFfbnVtKTsKKworCW1lbWNweShza2JfcHVzaChjaC0+dHJhbnNfc2tiLCBUSF9IRUFERVJfTEVOR1RIKSwgaGVhZGVyLAorCQlUSF9IRUFERVJfTEVOR1RIKTsJLyogcHV0IHRoZSBUSCBvbiB0aGUgcGFja2V0ICovCisKKwlrZnJlZShoZWFkZXIpOworCisJaWYgKGRvX2RlYnVnX2RhdGEpIHsKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpdHJhbnNfc2tiIGxlbjolMDR4IFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgY2gtPnRyYW5zX3NrYi0+bGVuKTsKKworCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgdXAtdG8tNTAgYnl0ZXMgb2YgdHJhbnNfc2tiICIKKwkJCSJkYXRhIHRvIHZ0YW0gZnJvbSBjb2xsZWN0X3FcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWN0Y21wY19kdW1waXQoKGNoYXIgKiljaC0+dHJhbnNfc2tiLT5kYXRhLAorCQkJCW1pbl90KGludCwgY2gtPnRyYW5zX3NrYi0+bGVuLCA1MCkpOworCX0KKworCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKKwljbGVhcl9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1sxXSk7CisJaWYgKHNldF9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1sxXSwgY2gtPnRyYW5zX3NrYi0+ZGF0YSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoY2gtPnRyYW5zX3NrYik7CisJCWNoLT50cmFuc19za2IgPSBOVUxMOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiY3RjbXBjOiAlcygpQ0NXIGZhaWx1cmUgLSBkYXRhIGxvc3RcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlmc21fZXZlbnQocHJpdi0+bXBjZy0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJCXJldHVybjsKKwl9CisJY2gtPmNjd1sxXS5jb3VudCA9IGNoLT50cmFuc19za2ItPmxlbjsKKwlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgQ1RDTV9USU1FXzVfU0VDLCBDVENfRVZFTlRfVElNRVIsIGNoKTsKKwljaC0+cHJvZi5zZW5kX3N0YW1wID0gY3VycmVudF9rZXJuZWxfdGltZSgpOyAvKiB4dGltZSAqLworCWlmIChkb19kZWJ1Z19jY3cpCisJCWN0Y21wY19kdW1waXQoKGNoYXIgKikmY2gtPmNjd1swXSwgc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDMpOworCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMF0sCisJCQkJCSh1bnNpZ25lZCBsb25nKWNoLCAweGZmLCAwKTsKKwljaC0+cHJvZi5kb2lvc19tdWx0aSsrOworCWlmIChyYyAhPSAwKSB7CisJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQgKz0gaTsKKwkJcHJpdi0+c3RhdHMudHhfZXJyb3JzICs9IGk7CisJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAiY2hhaW5lZCBUWCIpOworCX0KK2RvbmU6CisJY3RjbV9jbGVhcl9idXN5KGRldik7CisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICVzICAlcygpXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIEdvdCBub3JtYWwgZGF0YSwgY2hlY2sgZm9yIHNhbml0eSwgcXVldWUgaXQgdXAsIGFsbG9jYXRlIG5ldyBidWZmZXIKKyAqIHRyaWdnZXIgYm90dG9tIGhhbGYsIGFuZCBpbml0aWF0ZSBuZXh0IHJlYWQuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgY3RjbXBjX2NoeF9yeChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbAkJKmNoID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYJKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cAkqZ3JwID0gcHJpdi0+bXBjZzsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYiA9IGNoLT50cmFuc19za2I7CisJc3RydWN0IHNrX2J1ZmYJCSpuZXdfc2tiOworCXVuc2lnbmVkIGxvbmcJc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwlpbnQgbGVuCT0gY2gtPm1heF9idWZzaXplIC0gY2gtPmlyYi0+c2Nzdy5jb3VudDsKKworCWlmIChkb19kZWJ1Z19kYXRhKSB7CisJCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX0RFQlVHLCAibXBjX2NoX3J4ICVzIGNwOiVpICVzXG4iLAorCQkJCWRldi0+bmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaC0+aWQpOworCQlDVENNX0RCRl9URVhUXyhUUkFDRSwgQ1RDX0RCRl9ERUJVRywgIm1wY19jaF9yeDogbWF4YnVmOiAlMDR4ICIKKwkJCQkibGVuOiAlMDR4XG4iLCBjaC0+bWF4X2J1ZnNpemUsIGxlbik7CisJfQorCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKworCWlmIChza2IgPT0gTlVMTCkgeworCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogICVzKCkgVFJBTlNfU0tCID0gTlVMTCBcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCQkJZ290byBhZ2FpbjsKKwl9CisKKwlpZiAobGVuIDwgVEhfSEVBREVSX0xFTkdUSCkgeworCQljdGNtX3ByX2luZm8oIiVzOiBnb3QgcGFja2V0IHdpdGggaW52YWxpZCBsZW5ndGggJWRcbiIsCisJCQkJZGV2LT5uYW1lLCBsZW4pOworCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwl9IGVsc2UgeworCQkvKiBtdXN0IGhhdmUgdmFsaWQgdGggaGVhZGVyIG9yIGdhbWUgb3ZlciAqLworCQlfX3UzMglibG9ja19sZW4gPSBsZW47CisJCWxlbiA9IFRIX0hFQURFUl9MRU5HVEggKyBYSUQyX0xFTkdUSCArIDQ7CisJCW5ld19za2IgPSBfX2Rldl9hbGxvY19za2IoY2gtPm1heF9idWZzaXplLCBHRlBfQVRPTUlDKTsKKworCQlpZiAobmV3X3NrYiA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJjdGNtcGM6JXMoKSBORVdfU0tCID0gTlVMTFxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbXBjOiAlcygpIE1FTU9SWSBBTExPQyBGQUlMRUQiCisJCQkgICAgICAgIiAtIERBVEEgTE9TVCAtIE1QQyBGQUlMRURcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCWZzbV9ldmVudChwcml2LT5tcGNnLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJCQkJZ290byBhZ2FpbjsKKwkJfQorCQlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkpIHsKKwkJY2FzZSBNUENHX1NUQVRFX1JFU0VUOgorCQljYXNlIE1QQ0dfU1RBVEVfSU5PUDoKKwkJCWRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOworCQkJYnJlYWs7CisJCWNhc2UgTVBDR19TVEFURV9GTE9XQzoKKwkJY2FzZSBNUENHX1NUQVRFX1JFQURZOgorCQkJbWVtY3B5KHNrYl9wdXQobmV3X3NrYiwgYmxvY2tfbGVuKSwKKwkJCQkJICAgICAgIHNrYi0+ZGF0YSwgYmxvY2tfbGVuKTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZjaC0+aW9fcXVldWUsIG5ld19za2IpOworCQkJdGFza2xldF9zY2hlZHVsZSgmY2gtPmNoX3Rhc2tsZXQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltZW1jcHkoc2tiX3B1dChuZXdfc2tiLCBsZW4pLCBza2ItPmRhdGEsIGxlbik7CisJCQlza2JfcXVldWVfdGFpbCgmY2gtPmlvX3F1ZXVlLCBuZXdfc2tiKTsKKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmNoLT5jaF90YXNrbGV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCithZ2FpbjoKKwlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkpIHsKKwlpbnQgcmMsIGRvbG9jazsKKwljYXNlIE1QQ0dfU1RBVEVfRkxPV0M6CisJY2FzZSBNUENHX1NUQVRFX1JFQURZOgorCQlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpCisJCQlicmVhazsKKwkJY2gtPnRyYW5zX3NrYi0+ZGF0YSA9IGNoLT50cmFuc19za2JfZGF0YTsKKwkJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihjaC0+dHJhbnNfc2tiKTsKKwkJY2gtPnRyYW5zX3NrYi0+bGVuID0gMDsKKwkJY2gtPmNjd1sxXS5jb3VudCA9IGNoLT5tYXhfYnVmc2l6ZTsKKwkJCWlmIChkb19kZWJ1Z19jY3cpCisJCQljdGNtcGNfZHVtcGl0KChjaGFyICopJmNoLT5jY3dbMF0sCisJCQkJCXNpemVvZihzdHJ1Y3QgY2N3MSkgKiAzKTsKKwkJZG9sb2NrID0gIWluX2lycSgpOworCQlpZiAoZG9sb2NrKQorCQkJc3Bpbl9sb2NrX2lycXNhdmUoCisJCQkJZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwkJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoLT5jZGV2LCAmY2gtPmNjd1swXSwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKWNoLCAweGZmLCAwKTsKKwkJaWYgKGRvbG9jaykgLyogc2VlIHJlbWFyayBhYm91dCBjb25kaXRpb25hbCBsb2NraW5nICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCWdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisJCWlmIChyYyAhPSAwKQorCQkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLCAibm9ybWFsIFJYIik7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdCA6ICVzICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCisJCQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworCit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBjb25uZWN0aW9uIGJ5IHNlbmRpbmcgYSBfX3UxNiBvZiB2YWx1ZSAwLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIGN0Y21wY19jaHhfZmlyc3Rpbyhmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbAkJKmNoID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYJKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAoZG9fZGVidWcpIHsKKwkJc3RydWN0IG1wY19ncm91cCAqZ3B0ciA9IHByaXYtPm1wY2c7CisJCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworCQljdGNtX3ByX2RlYnVnKCIlcygpICVzIGNoc3RhdGU6JWkgZ3Jwc3RhdGU6JWkgY2hwcm90b2NvbDolaVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGNoLT5pZCwgZnNtX2dldHN0YXRlKGZpKSwKKwkJCQlmc21fZ2V0c3RhdGUoZ3B0ci0+ZnNtKSwgY2gtPnByb3RvY29sKTsKKwl9CisJaWYgKGZzbV9nZXRzdGF0ZShmaSkgPT0gQ1RDX1NUQVRFX1RYSURMRSkKKwkJTVBDX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LCAicmVtb3RlIHNpZGUgaXNzdWVkIFJFQUQ/ICIpOworCisJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOworCWlmIChjdGNtX2NoZWNrYWxsb2NfYnVmZmVyKGNoKSkKKwkJCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShmaSkpIHsKKwljYXNlIENUQ19TVEFURV9TVEFSVFJFVFJZOgorCWNhc2UgQ1RDX1NUQVRFX1NFVFVQV0FJVDoKKwkJaWYgKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgeworCQkJY3RjbXBjX2NoeF9yeGlkbGUoZmksIGV2ZW50LCBhcmcpOworCQl9IGVsc2UgeworCQkJZnNtX25ld3N0YXRlKGZpLCBDVENfU1RBVEVfVFhJRExFKTsKKwkJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9UWFVQLCBkZXYpOworCQl9CisJCQkJZ290byBkb25lOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX07CisKKwlmc21fbmV3c3RhdGUoZmksIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpCisJCSAgICAgPyBDVENfU1RBVEVfUlhJTklUIDogQ1RDX1NUQVRFX1RYSU5JVCk7CisKK2RvbmU6CisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdCA6ICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworCXJldHVybjsKK30KKworLyoqCisgKiBHb3QgaW5pdGlhbCBkYXRhLCBjaGVjayBpdC4gSWYgT0ssCisgKiBub3RpZnkgZGV2aWNlIHN0YXRlbWFjaGluZSB0aGF0IHdlIGFyZSB1cCBhbmQKKyAqIHJ1bm5pbmcuCisgKgorICogZmkJCUFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCisgKiBldmVudAlUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCisgKiBhcmcJCUdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KKyAqLwordm9pZCBjdGNtcGNfY2h4X3J4aWRsZShmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAgKmdycCA9IHByaXYtPm1wY2c7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKworCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwljdGNtX3ByX2RlYnVnKCIlcyBjcDolaSBlbnRlcjogICVzKClcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19GVU5DVElPTl9fKTsKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoIiVzKCkgJXMgY2hzdGF0ZTolaSBncnBzdGF0ZTolaVxuIiwKKwkJCV9fRlVOQ1RJT05fXywgY2gtPmlkLAorCQkJZnNtX2dldHN0YXRlKGZpKSwgZnNtX2dldHN0YXRlKGdycC0+ZnNtKSk7CisKKwlmc21fbmV3c3RhdGUoZmksIENUQ19TVEFURV9SWElETEUpOworCS8qIFhJRCBwcm9jZXNzaW5nIGNvbXBsZXRlICovCisKKwlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkpIHsKKwljYXNlIE1QQ0dfU1RBVEVfRkxPV0M6CisJY2FzZSBNUENHX1NUQVRFX1JFQURZOgorCQlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpCisJCQkJZ290byBkb25lOworCQljaC0+dHJhbnNfc2tiLT5kYXRhID0gY2gtPnRyYW5zX3NrYl9kYXRhOworCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGNoLT50cmFuc19za2IpOworCQljaC0+dHJhbnNfc2tiLT5sZW4gPSAwOworCQljaC0+Y2N3WzFdLmNvdW50ID0gY2gtPm1heF9idWZzaXplOworCQlpZiAoZG9fZGVidWdfY2N3KQorCQkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKSZjaC0+Y2N3WzBdLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDMpOworCQlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1NUQVJUKQorCQkJLyogc2VlIHJlbWFyayBhYm91dCBjb25kaXRpb25hbCBsb2NraW5nICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOworCQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2gtPmNkZXYsICZjaC0+Y2N3WzBdLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOworCQlpZiAoZXZlbnQgPT0gQ1RDX0VWRU5UX1NUQVJUKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCWZzbV9uZXdzdGF0ZShmaSwgQ1RDX1NUQVRFX1JYSU5JVCk7CisJCQljdGNtX2Njd19jaGVja19yYyhjaCwgcmMsICJpbml0aWFsIFJYIik7CisJCQkJZ290byBkb25lOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9SWFVQLCBkZXYpOworZG9uZToKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiAlcyAgJXMoKVxuIiwKKwkJCQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCXJldHVybjsKK30KKworLyoKKyAqIGN0Y21wYyBjaGFubmVsIEZTTSBhY3Rpb24KKyAqIGNhbGxlZCBmcm9tIHNldmVyYWwgcG9pbnRzIGluIGN0Y21wY19jaF9mc20KKyAqIGN0Y21wYyBvbmx5CisgKi8KK3N0YXRpYyB2b2lkIGN0Y21wY19jaHhfYXR0bihmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwJICAqY2ggICAgID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgICAgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgICpwcml2ICAgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAgKmdycCA9IHByaXYtPm1wY2c7CisKKwlpZiAoZG9fZGVidWcpIHsKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcygpOiBjcD0laSBjaD0weCVwIGlkPSVzIgorCQkJCSJHcnBTdGF0ZTolcyBDaFN0YXRlOiVzXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwgY2gtPmlkLAorCQlmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSwKKwkJZnNtX2dldHN0YXRlX3N0cihjaC0+ZnNtKSk7CisJfQorCisJc3dpdGNoIChmc21fZ2V0c3RhdGUoZ3JwLT5mc20pKSB7CisJY2FzZSBNUENHX1NUQVRFX1hJRDJJTklUVzoKKwkJLyogb2suLnN0YXJ0IHlzaWRlIHhpZCBleGNoYW5nZXMgKi8KKwkJaWYgKCFjaC0+aW5fbXBjZ3JvdXApCisJCQlicmVhazsKKwkJaWYgKGZzbV9nZXRzdGF0ZShjaC0+ZnNtKSA9PSAgQ0hfWElEMF9QRU5ESU5HKSB7CisJCQlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOworCQkJZnNtX2FkZHRpbWVyKCZncnAtPnRpbWVyLAorCQkJCU1QQ19YSURfVElNRU9VVF9WQUxVRSwKKwkJCQlNUENHX0VWRU5UX1RJTUVSLCBkZXYpOworCQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX1hJRDBETywgY2gpOworCisJCX0gZWxzZSBpZiAoZnNtX2dldHN0YXRlKGNoLT5mc20pIDwgQ0hfWElEN19QRU5ESU5HMSkKKwkJCS8qIGF0dG4gcmN2ZCBiZWZvcmUgeGlkMCBwcm9jZXNzZWQgdmlhIGJoICovCisJCQlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfWElEN19QRU5ESU5HMSk7CisJCWJyZWFrOworCWNhc2UgTVBDR19TVEFURV9YSUQySU5JVFg6CisJY2FzZSBNUENHX1NUQVRFX1hJRDBJT1dBSVQ6CisJY2FzZSBNUENHX1NUQVRFX1hJRDBJT1dBSVg6CisJCS8qIGF0dG4gcmN2ZCBiZWZvcmUgeGlkMCBwcm9jZXNzZWQgb24gY2gKKwkJYnV0IG1pZC14aWQwIHByb2Nlc3NpbmcgZm9yIGdyb3VwICAgICovCisJCWlmIChmc21fZ2V0c3RhdGUoY2gtPmZzbSkgPCBDSF9YSUQ3X1BFTkRJTkcxKQorCQkJZnNtX25ld3N0YXRlKGNoLT5mc20sIENIX1hJRDdfUEVORElORzEpOworCQlicmVhazsKKwljYXNlIE1QQ0dfU1RBVEVfWElEN0lOSVRXOgorCWNhc2UgTVBDR19TVEFURV9YSUQ3SU5JVFg6CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklUSToKKwljYXNlIE1QQ0dfU1RBVEVfWElEN0lOSVRaOgorCQlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShjaC0+ZnNtKSkgeworCQljYXNlIENIX1hJRDdfUEVORElORzoKKwkJCWZzbV9uZXdzdGF0ZShjaC0+ZnNtLCBDSF9YSUQ3X1BFTkRJTkcxKTsKKwkJCWJyZWFrOworCQljYXNlIENIX1hJRDdfUEVORElORzI6CisJCQlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfWElEN19QRU5ESU5HMyk7CisJCQlicmVhazsKKwkJfQorCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfWElEN0RPTkUsIGRldik7CisJCWJyZWFrOworCX0KKworCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQgOiAlcygpOiBjcD0laSBjaD0weCVwIGlkPSVzXG4iLAorCQkJX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQpOworCXJldHVybjsKKworfQorCisvKgorICogY3RjbXBjIGNoYW5uZWwgRlNNIGFjdGlvbgorICogY2FsbGVkIGZyb20gb25lIHBvaW50IGluIGN0Y21wY19jaF9mc20KKyAqIGN0Y21wYyBvbmx5CisgKi8KK3N0YXRpYyB2b2lkIGN0Y21wY19jaHhfYXR0bmJ1c3koZnNtX2luc3RhbmNlICpmc20sIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjaGFubmVsCSAgKmNoICAgICA9IGFyZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICAgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAqcHJpdiAgID0gZGV2LT5wcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgICAgPSBwcml2LT5tcGNnOworCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcyAgJXMoKSAlcyAgXG5HcnBTdGF0ZTolcyBDaFN0YXRlOiVzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBjaC0+aWQsCisJCSAgICAgICBmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSwKKwkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoY2gtPmZzbSkpOworCisJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOworCisJc3dpdGNoIChmc21fZ2V0c3RhdGUoZ3JwLT5mc20pKSB7CisJY2FzZSBNUENHX1NUQVRFX1hJRDBJT1dBSVQ6CisJCS8qIHZ0YW0gd2FudHMgdG8gYmUgcHJpbWFyeS5zdGFydCB5c2lkZSB4aWQgZXhjaGFuZ2VzKi8KKwkJLyogb25seSByZWNlaXZlIG9uZSBhdHRuLWJ1c3kgYXQgYSB0aW1lIHNvIG11c3Qgbm90ICAqLworCQkvKiBjaGFuZ2Ugc3RhdGUgZWFjaCB0aW1lCQkJICAgICAqLworCQlncnAtPmNoYW5nZWRfc2lkZSA9IDE7CisJCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9YSUQySU5JVFcpOworCQlicmVhazsKKwljYXNlIE1QQ0dfU1RBVEVfWElEMklOSVRXOgorCQlpZiAoZ3JwLT5jaGFuZ2VkX3NpZGUgPT0gMSkgeworCQkJZ3JwLT5jaGFuZ2VkX3NpZGUgPSAyOworCQkJYnJlYWs7CisJCX0KKwkJLyogcHJvY2VzcyBiZWdhbiB2aWEgY2FsbCB0byBlc3RhYmxpc2hfY29ubgkgKi8KKwkJLyogc28gbXVzdCByZXBvcnQgZmFpbHVyZSBpbnN0ZWFkIG9mIHJldmVydGluZwkgKi8KKwkJLyogYmFjayB0byByZWFkeS1mb3IteGlkIHBhc3NpdmUgc3RhdGUJCSAqLworCQlpZiAoZ3JwLT5lc3Rjb25uZnVuYykKKwkJCQlnb3RvIGRvbmU7CisJCS8qIHRoaXMgYXR0bmJ1c3kgaXMgTk9UIHRoZSByZXN1bHQgb2YgeHNpZGUgeGlkICAqLworCQkvKiBjb2xsaXNpb25zIHNvIHlzaWRlIG11c3QgaGF2ZSBiZWVuIHRyaWdnZXJlZCAgKi8KKwkJLyogYnkgYW4gQVRUTiB0aGF0IHdhcyBub3QgaW50ZW5kZWQgdG8gc3RhcnQgWElEICovCisJCS8qIHByb2Nlc3NpbmcuIFJldmVydCBiYWNrIHRvIHJlYWR5LWZvci14aWQgYW5kICAqLworCQkvKiB3YWl0IGZvciBBVFROIGludGVycnVwdCB0byBzaWduYWwgeGlkIHN0YXJ0CSAqLworCQlpZiAoZnNtX2dldHN0YXRlKGNoLT5mc20pID09IENIX1hJRDBfSU5QUk9HUkVTUykgeworCQkJZnNtX25ld3N0YXRlKGNoLT5mc20sIENIX1hJRDBfUEVORElORykgOworCQkJZnNtX2RlbHRpbWVyKCZncnAtPnRpbWVyKTsKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJCQkJZ290byBkb25lOworCWNhc2UgTVBDR19TVEFURV9YSUQySU5JVFg6CisJCS8qIFhJRDIgd2FzIHJlY2VpdmVkIGJlZm9yZSBBVFROIEJ1c3kgZm9yIHNlY29uZAorCQkgICBjaGFubmVsLlNlbmQgeXNpZGUgeGlkIGZvciBzZWNvbmQgY2hhbm5lbC4KKwkJKi8KKwkJaWYgKGdycC0+Y2hhbmdlZF9zaWRlID09IDEpIHsKKwkJCWdycC0+Y2hhbmdlZF9zaWRlID0gMjsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBNUENHX1NUQVRFX1hJRDBJT1dBSVg6CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklUVzoKKwljYXNlIE1QQ0dfU1RBVEVfWElEN0lOSVRYOgorCWNhc2UgTVBDR19TVEFURV9YSUQ3SU5JVEk6CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklUWjoKKwlkZWZhdWx0OgorCQkvKiBtdWx0aXBsZSBhdHRuLWJ1c3kgaW5kaWNhdGVzIHRvbyBvdXQtb2Ytc3luYyAgICAgICovCisJCS8qIGFuZCB0aGV5IGFyZSBjZXJ0YWlubHkgbm90IGJlaW5nIHJlY2VpdmVkIGFzIHBhcnQgKi8KKwkJLyogb2YgdmFsaWQgbXBjIGdyb3VwIG5lZ290aWF0aW9ucy4uCQkgICAgICovCisJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoZ3JwLT5jaGFuZ2VkX3NpZGUgPT0gMSkgeworCQlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOworCQlmc21fYWRkdGltZXIoJmdycC0+dGltZXIsIE1QQ19YSURfVElNRU9VVF9WQUxVRSwKKwkJCSAgICAgTVBDR19FVkVOVF9USU1FUiwgZGV2KTsKKwl9CisJaWYgKGNoLT5pbl9tcGNncm91cCkKKwkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX1hJRDBETywgY2gpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbXBjOiAlcygpIE5vdCBhbGwgY2hhbm5lbHMgaGF2ZSIKKwkJCSIgYmVlbiBhZGRlZCB0byBncm91cFxuIiwgX19GVU5DVElPTl9fKTsKKworZG9uZToKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0IDogJXMoKSVzIGNoPTB4JXAgaWQ9JXNcbiIsCisJCQkJX19GVU5DVElPTl9fLCBkZXYtPm5hbWUsIGNoLCBjaC0+aWQpOworCisJcmV0dXJuOworCit9CisKKy8qCisgKiBjdGNtcGMgY2hhbm5lbCBGU00gYWN0aW9uCisgKiBjYWxsZWQgZnJvbSBzZXZlcmFsIHBvaW50cyBpbiBjdGNtcGNfY2hfZnNtCisgKiBjdGNtcGMgb25seQorICovCitzdGF0aWMgdm9pZCBjdGNtcGNfY2h4X3Jlc2VuZChmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwJICAgKmNoCSAgID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICAgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXYgICA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICAgKmdycCAgICA9IHByaXYtPm1wY2c7CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzICAlcygpICVzICBcbkdycFN0YXRlOiVzIENoU3RhdGU6JXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXywgY2gtPmlkLAorCQkgICAgICAgZnNtX2dldHN0YXRlX3N0cihncnAtPmZzbSksCisJCSAgICAgICBmc21fZ2V0c3RhdGVfc3RyKGNoLT5mc20pKTsKKworCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9YSUQwRE8sIGNoKTsKKworCXJldHVybjsKK30KKworLyoKKyAqIGN0Y21wYyBjaGFubmVsIEZTTSBhY3Rpb24KKyAqIGNhbGxlZCBmcm9tIHNldmVyYWwgcG9pbnRzIGluIGN0Y21wY19jaF9mc20KKyAqIGN0Y21wYyBvbmx5CisgKi8KK3N0YXRpYyB2b2lkIGN0Y21wY19jaHhfc2VuZF9zd2VlcChmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGNoYW5uZWwgKmFjaCA9IGFyZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICpncnAgPSBwcml2LT5tcGNnOworCXN0cnVjdCBjaGFubmVsICp3Y2ggPSBwcml2LT5jaGFubmVsW1dSSVRFXTsKKwlzdHJ1Y3QgY2hhbm5lbCAqcmNoID0gcHJpdi0+Y2hhbm5lbFtSRUFEXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCB0aF9zd2VlcCAqaGVhZGVyOworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3MgPSAwOworCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgYWNoLCBhY2gtPmlkKTsKKworCWlmIChncnAtPmluX3N3ZWVwID09IDApCisJCQkJZ290byBkb25lOworCisJaWYgKGRvX2RlYnVnX2RhdGEpIHsKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIDE6IFRvVlRBTV90aF9zZXE9ICUwOHhcbiIgLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgd2NoLT50aF9zZXFfbnVtKTsKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIDE6IEZyb21WVEFNX3RoX3NlcT0gJTA4eFxuIiAsCisJCQkJX19GVU5DVElPTl9fLCByY2gtPnRoX3NlcV9udW0pOworCX0KKworCWlmIChmc21fZ2V0c3RhdGUod2NoLT5mc20pICE9IENUQ19TVEFURV9UWElETEUpIHsKKwkJLyogZ2l2ZSB0aGUgcHJldmlvdXMgSU8gdGltZSB0byBjb21wbGV0ZSAqLworCQlmc21fYWRkdGltZXIoJndjaC0+c3dlZXBfdGltZXIsCisJCQkyMDAsIENUQ19FVkVOVF9SU1dFRVBfVElNRVIsIHdjaCk7CisJCQkJZ290byBkb25lOworCX0KKworCXNrYiA9IHNrYl9kZXF1ZXVlKCZ3Y2gtPnN3ZWVwX3F1ZXVlKTsKKwlpZiAoIXNrYikKKwkJCQlnb3RvIGRvbmU7CisKKwlpZiAoc2V0X25vcm1hbGl6ZWRfY2RhKCZ3Y2gtPmNjd1s0XSwgc2tiLT5kYXRhKSkgeworCQlncnAtPmluX3N3ZWVwID0gMDsKKwkJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCQkJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKKwkJc2tiX3F1ZXVlX3RhaWwoJndjaC0+aW9fcXVldWUsIHNrYik7CisJfQorCisJLyogc2VuZCBvdXQgdGhlIHN3ZWVwICovCisJd2NoLT5jY3dbNF0uY291bnQgPSBza2ItPmxlbjsKKworCWhlYWRlciA9IChzdHJ1Y3QgdGhfc3dlZXAgKilza2ItPmRhdGE7CisJc3dpdGNoIChoZWFkZXItPnRoLnRoX2NoX2ZsYWcpIHsKKwljYXNlIFRIX1NXRUVQX1JFUToKKwkJZ3JwLT5zd2VlcF9yZXFfcGVuZF9udW0tLTsKKwkJYnJlYWs7CisJY2FzZSBUSF9TV0VFUF9SRVNQOgorCQlncnAtPnN3ZWVwX3JzcF9wZW5kX251bS0tOworCQlicmVhazsKKwl9CisKKwloZWFkZXItPnN3LnRoX2xhc3Rfc2VxID0gd2NoLT50aF9zZXFfbnVtOworCisJaWYgKGRvX2RlYnVnX2NjdykKKwkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKSZ3Y2gtPmNjd1szXSwgc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDMpOworCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIHN3ZWVwIHBhY2tldFxuIiwgX19GVU5DVElPTl9fKTsKKwljdGNtcGNfZHVtcGl0KChjaGFyICopaGVhZGVyLCBUSF9TV0VFUF9MRU5HVEgpOworCisJZnNtX2FkZHRpbWVyKCZ3Y2gtPnRpbWVyLCBDVENNX1RJTUVfNV9TRUMsIENUQ19FVkVOVF9USU1FUiwgd2NoKTsKKwlmc21fbmV3c3RhdGUod2NoLT5mc20sIENUQ19TVEFURV9UWCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2sod2NoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwl3Y2gtPnByb2Yuc2VuZF9zdGFtcCA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsgLyogeHRpbWUgKi8KKwlyYyA9IGNjd19kZXZpY2Vfc3RhcnQod2NoLT5jZGV2LCAmd2NoLT5jY3dbM10sCisJCQkJCSh1bnNpZ25lZCBsb25nKSB3Y2gsIDB4ZmYsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHdjaC0+Y2RldiksIHNhdmVmbGFncyk7CisKKwlpZiAoKGdycC0+c3dlZXBfcmVxX3BlbmRfbnVtID09IDApICYmCisJICAgKGdycC0+c3dlZXBfcnNwX3BlbmRfbnVtID09IDApKSB7CisJCWdycC0+aW5fc3dlZXAgPSAwOworCQlyY2gtPnRoX3NlcV9udW0gPSAweDAwOworCQl3Y2gtPnRoX3NlcV9udW0gPSAweDAwOworCQljdGNtX2NsZWFyX2J1c3lfZG8oZGV2KTsKKwl9CisKKwlpZiAoZG9fZGVidWdfZGF0YSkgeworCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkyOiBUb1ZUQU1fdGhfc2VxPSAlMDh4XG4iICwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHdjaC0+dGhfc2VxX251bSk7CisJCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKTI6IEZyb21WVEFNX3RoX3NlcT0gJTA4eFxuIiAsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCByY2gtPnRoX3NlcV9udW0pOworCX0KKworCWlmIChyYyAhPSAwKQorCQljdGNtX2Njd19jaGVja19yYyh3Y2gsIHJjLCAic2VuZCBzd2VlcCIpOworCitkb25lOgorCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpICVzXG4iLCBfX0ZVTkNUSU9OX18sIGFjaC0+aWQpOworCXJldHVybjsKK30KKworCisvKgorICogVGhlIGN0Y21wYyBzdGF0ZW1hY2hpbmUgZm9yIGEgY2hhbm5lbC4KKyAqLworCitjb25zdCBmc21fbm9kZSBjdGNtcGNfY2hfZnNtW10gPSB7CisJeyBDVENfU1RBVEVfU1RPUFBFRCwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfU1RPUFBFRCwJQ1RDX0VWRU5UX1NUQVJULAljdGNtX2NoeF9zdGFydCAgfSwKKwl7IENUQ19TVEFURV9TVE9QUEVELAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ1RDX1NUQVRFX1NUT1BQRUQsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfU1RPUFBFRCwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fYWN0aW9uX25vcCAgfSwKKworCXsgQ1RDX1NUQVRFX05PVE9QLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X3N0b3AgIH0sCisJeyBDVENfU1RBVEVfTk9UT1AsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX05PVE9QLAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX05PVE9QLAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX05PVE9QLAlDVENfRVZFTlRfTUNfR09PRCwJY3RjbV9jaHhfc3RhcnQgIH0sCisJeyBDVENfU1RBVEVfTk9UT1AsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF9zdG9wICB9LAorCXsgQ1RDX1NUQVRFX05PVE9QLAlDVENfRVZFTlRfVUNfUlNSRVNFVCwJY3RjbV9jaHhfc3RvcCAgfSwKKwl7IENUQ19TVEFURV9OT1RPUCwJQ1RDX0VWRU5UX0lPX0VOT0RFViwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKworCXsgQ1RDX1NUQVRFX1NUQVJUV0FJVCwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDVENfU1RBVEVfU1RBUlRXQUlULAlDVENfRVZFTlRfU1RBUlQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFdBSVQsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtX2NoeF9zZXRtb2RlICB9LAorCXsgQ1RDX1NUQVRFX1NUQVJUV0FJVCwJQ1RDX0VWRU5UX1RJTUVSLAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFdBSVQsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDVENfU1RBVEVfU1RBUlRXQUlULAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKworCXsgQ1RDX1NUQVRFX1NUQVJUUkVUUlksCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfaGFsdGlvICB9LAorCXsgQ1RDX1NUQVRFX1NUQVJUUkVUUlksCUNUQ19FVkVOVF9USU1FUiwJY3RjbV9jaHhfc2V0bW9kZSAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFJFVFJZLAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbV9jaHhfc2V0bW9kZSAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFJFVFJZLAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKwl7IENUQ19TVEFURV9TVEFSVFJFVFJZLAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCisJeyBDVENfU1RBVEVfU0VUVVBXQUlULAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9TRVRVUFdBSVQsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1NFVFVQV0FJVCwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21wY19jaHhfZmlyc3RpbyAgfSwKKwl7IENUQ19TVEFURV9TRVRVUFdBSVQsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENUQ19TVEFURV9TRVRVUFdBSVQsCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENUQ19TVEFURV9TRVRVUFdBSVQsCUNUQ19FVkVOVF9USU1FUiwJY3RjbV9jaHhfc2V0bW9kZSAgfSwKKwl7IENUQ19TVEFURV9TRVRVUFdBSVQsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDVENfU1RBVEVfU0VUVVBXQUlULAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKworCXsgQ1RDX1NUQVRFX1JYSU5JVCwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDVENfU1RBVEVfUlhJTklULAlDVENfRVZFTlRfU1RBUlQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENUQ19TVEFURV9SWElOSVQsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtcGNfY2h4X3J4aWRsZSAgfSwKKwl7IENUQ19TVEFURV9SWElOSVQsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF9yeGluaXRlcnIgIH0sCisJeyBDVENfU1RBVEVfUlhJTklULAlDVENfRVZFTlRfVUNfUlNSRVNFVCwJY3RjbV9jaHhfcnhpbml0ZXJyICB9LAorCXsgQ1RDX1NUQVRFX1JYSU5JVCwJQ1RDX0VWRU5UX1RJTUVSLAljdGNtX2NoeF9yeGluaXRlcnIgIH0sCisJeyBDVENfU1RBVEVfUlhJTklULAlDVENfRVZFTlRfQVRUTkJVU1ksCWN0Y21fY2h4X3J4aW5pdGZhaWwgIH0sCisJeyBDVENfU1RBVEVfUlhJTklULAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ1RDX1NUQVRFX1JYSU5JVCwJQ1RDX0VWRU5UX1VDX1pFUk8sCWN0Y21wY19jaHhfZmlyc3RpbyAgfSwKKwl7IENUQ19TVEFURV9SWElOSVQsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDSF9YSUQwX1BFTkRJTkcsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDSF9YSUQwX1BFTkRJTkcsCUNUQ19FVkVOVF9BVFROLAkJY3RjbXBjX2NoeF9hdHRuICB9LAorCXsgQ0hfWElEMF9QRU5ESU5HLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENIX1hJRDBfUEVORElORywJQ1RDX0VWRU5UX1NUQVJULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDSF9YSUQwX1BFTkRJTkcsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDSF9YSUQwX1BFTkRJTkcsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ0hfWElEMF9QRU5ESU5HLAlDVENfRVZFTlRfVUNfUkNSRVNFVCwJY3RjbV9jaHhfc2V0dXBlcnIgIH0sCisJeyBDSF9YSUQwX1BFTkRJTkcsCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENIX1hJRDBfUEVORElORywJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ0hfWElEMF9QRU5ESU5HLAlDVENfRVZFTlRfQVRUTkJVU1ksCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisKKwl7IENIX1hJRDBfSU5QUk9HUkVTUywJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21wY19jaHhfcnggIH0sCisJeyBDSF9YSUQwX0lOUFJPR1JFU1MsCUNUQ19FVkVOVF9BVFROLAkJY3RjbXBjX2NoeF9hdHRuICB9LAorCXsgQ0hfWElEMF9JTlBST0dSRVNTLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENIX1hJRDBfSU5QUk9HUkVTUywJQ1RDX0VWRU5UX1NUQVJULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDSF9YSUQwX0lOUFJPR1JFU1MsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDSF9YSUQwX0lOUFJPR1JFU1MsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ0hfWElEMF9JTlBST0dSRVNTLAlDVENfRVZFTlRfVUNfWkVSTywJY3RjbXBjX2NoeF9yeCAgfSwKKwl7IENIX1hJRDBfSU5QUk9HUkVTUywJQ1RDX0VWRU5UX1VDX1JDUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyIH0sCisJeyBDSF9YSUQwX0lOUFJPR1JFU1MsCUNUQ19FVkVOVF9BVFROQlVTWSwJY3RjbXBjX2NoeF9hdHRuYnVzeSAgfSwKKwl7IENIX1hJRDBfSU5QUk9HUkVTUywJQ1RDX0VWRU5UX1RJTUVSLAljdGNtcGNfY2h4X3Jlc2VuZCAgfSwKKwl7IENIX1hJRDBfSU5QUk9HUkVTUywJQ1RDX0VWRU5UX0lPX0VCVVNZLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDSF9YSUQ3X1BFTkRJTkcsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtcGNfY2h4X3J4ICB9LAorCXsgQ0hfWElEN19QRU5ESU5HLAlDVENfRVZFTlRfQVRUTiwJCWN0Y21wY19jaHhfYXR0biAgfSwKKwl7IENIX1hJRDdfUEVORElORywJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ0hfWElEN19QRU5ESU5HLAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ0hfWElEN19QRU5ESU5HLAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKwl7IENIX1hJRDdfUEVORElORywJQ1RDX0VWRU5UX1VDX1pFUk8sCWN0Y21wY19jaHhfcnggIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENIX1hJRDdfUEVORElORywJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ0hfWElEN19QRU5ESU5HLAlDVENfRVZFTlRfVUNfUlNSRVNFVCwJY3RjbV9jaHhfc2V0dXBlcnIgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcsCUNUQ19FVkVOVF9BVFROQlVTWSwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENIX1hJRDdfUEVORElORywJQ1RDX0VWRU5UX1RJTUVSLAljdGNtcGNfY2h4X3Jlc2VuZCAgfSwKKwl7IENIX1hJRDdfUEVORElORywJQ1RDX0VWRU5UX0lPX0VCVVNZLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDSF9YSUQ3X1BFTkRJTkcxLAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbXBjX2NoeF9yeCAgfSwKKwl7IENIX1hJRDdfUEVORElORzEsCUNUQ19FVkVOVF9BVFROLAkJY3RjbXBjX2NoeF9hdHRuICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMSwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcxLAlDVENfRVZFTlRfU1RBUlQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENIX1hJRDdfUEVORElORzEsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcxLAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKwl7IENIX1hJRDdfUEVORElORzEsCUNUQ19FVkVOVF9VQ19aRVJPLAljdGNtcGNfY2h4X3J4ICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMSwJQ1RDX0VWRU5UX1VDX1JDUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMSwJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMSwJQ1RDX0VWRU5UX0FUVE5CVVNZLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMSwJQ1RDX0VWRU5UX1RJTUVSLAljdGNtcGNfY2h4X3Jlc2VuZCAgfSwKKwl7IENIX1hJRDdfUEVORElORzEsCUNUQ19FVkVOVF9JT19FQlVTWSwJY3RjbV9jaHhfZmFpbCAgfSwKKworCXsgQ0hfWElEN19QRU5ESU5HMiwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21wY19jaHhfcnggIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcyLAlDVENfRVZFTlRfQVRUTiwJCWN0Y21wY19jaHhfYXR0biAgfSwKKwl7IENIX1hJRDdfUEVORElORzIsCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfaGFsdGlvICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMiwJQ1RDX0VWRU5UX1NUQVJULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcyLAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMiwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcyLAlDVENfRVZFTlRfVUNfWkVSTywJY3RjbXBjX2NoeF9yeCAgfSwKKwl7IENIX1hJRDdfUEVORElORzIsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENIX1hJRDdfUEVORElORzIsCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2NoeF9zZXR1cGVyciAgfSwKKwl7IENIX1hJRDdfUEVORElORzIsCUNUQ19FVkVOVF9BVFROQlVTWSwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENIX1hJRDdfUEVORElORzIsCUNUQ19FVkVOVF9USU1FUiwJY3RjbXBjX2NoeF9yZXNlbmQgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkcyLAlDVENfRVZFTlRfSU9fRUJVU1ksCWN0Y21fY2h4X2ZhaWwgIH0sCisKKwl7IENIX1hJRDdfUEVORElORzMsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtcGNfY2h4X3J4ICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMywJQ1RDX0VWRU5UX0FUVE4sCQljdGNtcGNfY2h4X2F0dG4gIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkczLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENIX1hJRDdfUEVORElORzMsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMywJQ1RDX0VWRU5UX0lPX0VOT0RFViwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENIX1hJRDdfUEVORElORzMsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMywJQ1RDX0VWRU5UX1VDX1pFUk8sCWN0Y21wY19jaHhfcnggIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkczLAlDVENfRVZFTlRfVUNfUkNSRVNFVCwJY3RjbV9jaHhfc2V0dXBlcnIgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkczLAlDVENfRVZFTlRfVUNfUlNSRVNFVCwJY3RjbV9jaHhfc2V0dXBlcnIgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkczLAlDVENfRVZFTlRfQVRUTkJVU1ksCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkczLAlDVENfRVZFTlRfVElNRVIsCWN0Y21wY19jaHhfcmVzZW5kICB9LAorCXsgQ0hfWElEN19QRU5ESU5HMywJQ1RDX0VWRU5UX0lPX0VCVVNZLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDSF9YSUQ3X1BFTkRJTkc0LAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbXBjX2NoeF9yeCAgfSwKKwl7IENIX1hJRDdfUEVORElORzQsCUNUQ19FVkVOVF9BVFROLAkJY3RjbXBjX2NoeF9hdHRuICB9LAorCXsgQ0hfWElEN19QRU5ESU5HNCwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkc0LAlDVENfRVZFTlRfU1RBUlQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENIX1hJRDdfUEVORElORzQsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDSF9YSUQ3X1BFTkRJTkc0LAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKwl7IENIX1hJRDdfUEVORElORzQsCUNUQ19FVkVOVF9VQ19aRVJPLAljdGNtcGNfY2h4X3J4ICB9LAorCXsgQ0hfWElEN19QRU5ESU5HNCwJQ1RDX0VWRU5UX1VDX1JDUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ0hfWElEN19QRU5ESU5HNCwJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fY2h4X3NldHVwZXJyICB9LAorCXsgQ0hfWElEN19QRU5ESU5HNCwJQ1RDX0VWRU5UX0FUVE5CVVNZLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ0hfWElEN19QRU5ESU5HNCwJQ1RDX0VWRU5UX1RJTUVSLAljdGNtcGNfY2h4X3Jlc2VuZCAgfSwKKwl7IENIX1hJRDdfUEVORElORzQsCUNUQ19FVkVOVF9JT19FQlVTWSwJY3RjbV9jaHhfZmFpbCAgfSwKKworCXsgQ1RDX1NUQVRFX1JYSURMRSwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDVENfU1RBVEVfUlhJRExFLAlDVENfRVZFTlRfU1RBUlQsCWN0Y21fYWN0aW9uX25vcCAgfSwKKwl7IENUQ19TVEFURV9SWElETEUsCUNUQ19FVkVOVF9GSU5TVEFULAljdGNtcGNfY2h4X3J4ICB9LAorCXsgQ1RDX1NUQVRFX1JYSURMRSwJQ1RDX0VWRU5UX1VDX1JDUkVTRVQsCWN0Y21fY2h4X3J4ZGlzYyAgfSwKKwl7IENUQ19TVEFURV9SWElETEUsCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ1RDX1NUQVRFX1JYSURMRSwJQ1RDX0VWRU5UX0lPX0VOT0RFViwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENUQ19TVEFURV9SWElETEUsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ1RDX1NUQVRFX1JYSURMRSwJQ1RDX0VWRU5UX1VDX1pFUk8sCWN0Y21wY19jaHhfcnggIH0sCisKKwl7IENUQ19TVEFURV9UWElOSVQsCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfaGFsdGlvICB9LAorCXsgQ1RDX1NUQVRFX1RYSU5JVCwJQ1RDX0VWRU5UX1NUQVJULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfVFhJTklULAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbV9jaHhfdHhpZGxlICB9LAorCXsgQ1RDX1NUQVRFX1RYSU5JVCwJQ1RDX0VWRU5UX1VDX1JDUkVTRVQsCWN0Y21fY2h4X3R4aW5pdGVyciAgfSwKKwl7IENUQ19TVEFURV9UWElOSVQsCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2NoeF90eGluaXRlcnIgIH0sCisJeyBDVENfU1RBVEVfVFhJTklULAlDVENfRVZFTlRfVElNRVIsCWN0Y21fY2h4X3R4aW5pdGVyciAgfSwKKwl7IENUQ19TVEFURV9UWElOSVQsCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDVENfU1RBVEVfVFhJTklULAlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKwl7IENUQ19TVEFURV9UWElOSVQsCUNUQ19FVkVOVF9SU1dFRVBfVElNRVIsCWN0Y21wY19jaHhfc2VuZF9zd2VlcCB9LAorCisJeyBDVENfU1RBVEVfVFhJRExFLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9UWElETEUsCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RYSURMRSwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21wY19jaHhfZmlyc3RpbyAgfSwKKwl7IENUQ19TVEFURV9UWElETEUsCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ1RDX1NUQVRFX1RYSURMRSwJQ1RDX0VWRU5UX1VDX1JTUkVTRVQsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDVENfU1RBVEVfVFhJRExFLAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCXsgQ1RDX1NUQVRFX1RYSURMRSwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDVENfU1RBVEVfVFhJRExFLAlDVENfRVZFTlRfUlNXRUVQX1RJTUVSLAljdGNtcGNfY2h4X3NlbmRfc3dlZXAgfSwKKworCXsgQ1RDX1NUQVRFX1RFUk0sCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RFUk0sCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9jaHhfcmVzdGFydCAgfSwKKwl7IENUQ19TVEFURV9URVJNLAlDVENfRVZFTlRfRklOU1RBVCwJY3RjbV9jaHhfc3RvcHBlZCAgfSwKKwl7IENUQ19TVEFURV9URVJNLAlDVENfRVZFTlRfVUNfUkNSRVNFVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RFUk0sCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfVEVSTSwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDVENfU1RBVEVfVEVSTSwJQ1RDX0VWRU5UX0lPX0VCVVNZLAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ1RDX1NUQVRFX1RFUk0sCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisKKwl7IENUQ19TVEFURV9EVEVSTSwJQ1RDX0VWRU5UX1NUT1AsCQljdGNtX2NoeF9oYWx0aW8gIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9jaHhfcmVzdGFydCAgfSwKKwl7IENUQ19TVEFURV9EVEVSTSwJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21fY2h4X3NldG1vZGUgIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9VQ19SU1JFU0VULAljdGNtX2FjdGlvbl9ub3AgIH0sCisJeyBDVENfU1RBVEVfRFRFUk0sCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorCXsgQ1RDX1NUQVRFX0RURVJNLAlDVENfRVZFTlRfSU9fRU5PREVWLAljdGNtX2NoeF9pb2ZhdGFsICB9LAorCisJeyBDVENfU1RBVEVfVFgsCQlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9UWCwJCUNUQ19FVkVOVF9TVEFSVCwJY3RjbV9hY3Rpb25fbm9wICB9LAorCXsgQ1RDX1NUQVRFX1RYLAkJQ1RDX0VWRU5UX0ZJTlNUQVQsCWN0Y21wY19jaHhfdHhkb25lICB9LAorCXsgQ1RDX1NUQVRFX1RYLAkJQ1RDX0VWRU5UX1VDX1JDUkVTRVQsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDVENfU1RBVEVfVFgsCQlDVENfRVZFTlRfVUNfUlNSRVNFVCwJY3RjbV9jaHhfZmFpbCAgfSwKKwl7IENUQ19TVEFURV9UWCwJCUNUQ19FVkVOVF9USU1FUiwJY3RjbV9jaHhfdHhyZXRyeSAgfSwKKwl7IENUQ19TVEFURV9UWCwJCUNUQ19FVkVOVF9JT19FTk9ERVYsCWN0Y21fY2h4X2lvZmF0YWwgIH0sCisJeyBDVENfU1RBVEVfVFgsCQlDVENfRVZFTlRfTUNfRkFJTCwJY3RjbV9jaHhfZmFpbCAgfSwKKwl7IENUQ19TVEFURV9UWCwJCUNUQ19FVkVOVF9SU1dFRVBfVElNRVIsCWN0Y21wY19jaHhfc2VuZF9zd2VlcCB9LAorCXsgQ1RDX1NUQVRFX1RYLAkJQ1RDX0VWRU5UX0lPX0VCVVNZLAljdGNtX2NoeF9mYWlsICB9LAorCisJeyBDVENfU1RBVEVfUlhFUlIsCUNUQ19FVkVOVF9TVE9QLAkJY3RjbV9jaHhfaGFsdGlvICB9LAorCXsgQ1RDX1NUQVRFX1RYRVJSLAlDVENfRVZFTlRfU1RPUCwJCWN0Y21fY2h4X2hhbHRpbyAgfSwKKwl7IENUQ19TVEFURV9UWEVSUiwJQ1RDX0VWRU5UX0lPX0VOT0RFViwJY3RjbV9jaHhfaW9mYXRhbCAgfSwKKwl7IENUQ19TVEFURV9UWEVSUiwJQ1RDX0VWRU5UX01DX0ZBSUwsCWN0Y21fY2h4X2ZhaWwgIH0sCisJeyBDVENfU1RBVEVfUlhFUlIsCUNUQ19FVkVOVF9NQ19GQUlMLAljdGNtX2NoeF9mYWlsICB9LAorfTsKKworaW50IG1wY19jaF9mc21fbGVuID0gQVJSQVlfU0laRShjdGNtcGNfY2hfZnNtKTsKKworLyoKKyAqIEFjdGlvbnMgZm9yIGludGVyZmFjZSAtIHN0YXRlbWFjaGluZS4KKyAqLworCisvKioKKyAqIFN0YXJ0dXAgY2hhbm5lbHMgYnkgc2VuZGluZyBDVENfRVZFTlRfU1RBUlQgdG8gZWFjaCBjaGFubmVsLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhbiBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIHN0cnVjdCBuZXRfZGV2aWNlICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBkZXZfYWN0aW9uX3N0YXJ0KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZGlyZWN0aW9uOworCisJQ1RDTVlfREJGX0RFVl9OQU1FKFNFVFVQLCBkZXYsICIiKTsKKworCWZzbV9kZWx0aW1lcigmcHJpdi0+cmVzdGFydF90aW1lcik7CisJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgpOworCWlmIChJU19NUEMocHJpdikpCisJCXByaXYtPm1wY2ctPmNoYW5uZWxzX3Rlcm1pbmF0aW5nID0gMDsKKwlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspIHsKKwkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dOworCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX1NUQVJULCBjaCk7CisJfQorfQorCisvKioKKyAqIFNodXRkb3duIGNoYW5uZWxzIGJ5IHNlbmRpbmcgQ1RDX0VWRU5UX1NUT1AgdG8gZWFjaCBjaGFubmVsLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhbiBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIHN0cnVjdCBuZXRfZGV2aWNlICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBkZXZfYWN0aW9uX3N0b3AoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJaW50IGRpcmVjdGlvbjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlDVENNWV9EQkZfREVWX05BTUUoU0VUVVAsIGRldiwgIiIpOworCisJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCk7CisJZm9yIChkaXJlY3Rpb24gPSBSRUFEOyBkaXJlY3Rpb24gPD0gV1JJVEU7IGRpcmVjdGlvbisrKSB7CisJCXN0cnVjdCBjaGFubmVsICpjaCA9IHByaXYtPmNoYW5uZWxbZGlyZWN0aW9uXTsKKwkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9TVE9QLCBjaCk7CisJCWNoLT50aF9zZXFfbnVtID0gMHgwMDsKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoImN0Y206ICVzKCkgQ0hfdGhfc2VxPSAlMDh4XG4iLAorCQkJCV9fRlVOQ1RJT05fXywgY2gtPnRoX3NlcV9udW0pOworCX0KKwlpZiAoSVNfTVBDKHByaXYpKQorCQlmc21fbmV3c3RhdGUocHJpdi0+bXBjZy0+ZnNtLCBNUENHX1NUQVRFX1JFU0VUKTsKK30KKworc3RhdGljIHZvaWQgZGV2X2FjdGlvbl9yZXN0YXJ0KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCWludCByZXN0YXJ0X3RpbWVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCUNUQ01ZX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LCAiIik7CisKKwlpZiAoSVNfTVBDKHByaXYpKSB7CisJCWN0Y21fcHJfaW5mbygiY3RjbTogJXMgUmVzdGFydGluZyBEZXZpY2UgYW5kICIKKwkJICAgICAgICJNUEMgR3JvdXAgaW4gNSBzZWNvbmRzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmVzdGFydF90aW1lciA9IENUQ01fVElNRV8xX1NFQzsKKwl9IGVsc2UgeworCQljdGNtX3ByX2luZm8oIiVzOiBSZXN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOworCQlyZXN0YXJ0X3RpbWVyID0gQ1RDTV9USU1FXzVfU0VDOworCX0KKworCWRldl9hY3Rpb25fc3RvcChmaSwgZXZlbnQsIGFyZyk7CisJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1NUT1AsIGRldik7CisJaWYgKElTX01QQyhwcml2KSkKKwkJZnNtX25ld3N0YXRlKHByaXYtPm1wY2ctPmZzbSwgTVBDR19TVEFURV9SRVNFVCk7CisKKwkvKiBnb2luZyBiYWNrIGludG8gc3RhcnQgc2VxdWVuY2UgdG9vIHF1aWNrbHkgY2FuCSAgKi8KKwkvKiByZXN1bHQgaW4gdGhlIG90aGVyIHNpZGUgYmVjb21pbmcgdW5yZWFjaGFibGUgICBkdWUJICAqLworCS8qIHRvIHNlbnNlIHJlcG9ydGVkIHdoZW4gSU8gaXMgYWJvcnRlZAkJCSAgKi8KKwlmc21fYWRkdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIsIHJlc3RhcnRfdGltZXIsCisJCQlERVZfRVZFTlRfU1RBUlQsIGRldik7Cit9CisKKy8qKgorICogQ2FsbGVkIGZyb20gY2hhbm5lbCBzdGF0ZW1hY2hpbmUKKyAqIHdoZW4gYSBjaGFubmVsIGlzIHVwIGFuZCBydW5uaW5nLgorICoKKyAqIGZpCQlBbiBpbnN0YW5jZSBvZiBhbiBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgorICogZXZlbnQJVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgorICogYXJnCQlHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIHN0cnVjdCBuZXRfZGV2aWNlICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBkZXZfYWN0aW9uX2NodXAoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJQ1RDTVlfREJGX0RFVl9OQU1FKFNFVFVQLCBkZXYsICIiKTsKKworCXN3aXRjaCAoZnNtX2dldHN0YXRlKGZpKSkgeworCWNhc2UgREVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYOgorCQlpZiAoZXZlbnQgPT0gREVWX0VWRU5UX1JYVVApCisJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9TVEFSVFdBSVRfVFgpOworCQllbHNlCisJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9TVEFSVFdBSVRfUlgpOworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9TVEFSVFdBSVRfUlg6CisJCWlmIChldmVudCA9PSBERVZfRVZFTlRfUlhVUCkgeworCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfUlVOTklORyk7CisJCQljdGNtX3ByX2luZm8oIiVzOiBjb25uZWN0ZWQgd2l0aCByZW1vdGUgc2lkZVxuIiwKKwkJCQkgICAgZGV2LT5uYW1lKTsKKwkJCWN0Y21fY2xlYXJfYnVzeShkZXYpOworCQl9CisJCWJyZWFrOworCWNhc2UgREVWX1NUQVRFX1NUQVJUV0FJVF9UWDoKKwkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWFVQKSB7CisJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKKwkJCWN0Y21fcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAorCQkJCSAgICBkZXYtPm5hbWUpOworCQkJY3RjbV9jbGVhcl9idXN5KGRldik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBERVZfU1RBVEVfU1RPUFdBSVRfVFg6CisJCWlmIChldmVudCA9PSBERVZfRVZFTlRfUlhVUCkKKwkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUT1BXQUlUX1JYVFgpOworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9TVE9QV0FJVF9SWDoKKwkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWFVQKQorCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCk7CisJCWJyZWFrOworCX0KKworCWlmIChJU19NUEMocHJpdikpIHsKKwkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9SWFVQKQorCQkJbXBjX2NoYW5uZWxfYWN0aW9uKHByaXYtPmNoYW5uZWxbUkVBRF0sCisJCQkJUkVBRCwgTVBDX0NIQU5ORUxfQUREKTsKKwkJZWxzZQorCQkJbXBjX2NoYW5uZWxfYWN0aW9uKHByaXYtPmNoYW5uZWxbV1JJVEVdLAorCQkJCVdSSVRFLCBNUENfQ0hBTk5FTF9BREQpOworCX0KK30KKworLyoqCisgKiBDYWxsZWQgZnJvbSBkZXZpY2Ugc3RhdGVtYWNoaW5lCisgKiB3aGVuIGEgY2hhbm5lbCBoYXMgYmVlbiBzaHV0ZG93bi4KKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYW4gaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBzdHJ1Y3QgbmV0X2RldmljZSAqIHVwb24gY2FsbC4KKyAqLworc3RhdGljIHZvaWQgZGV2X2FjdGlvbl9jaGRvd24oZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlDVENNWV9EQkZfREVWX05BTUUoU0VUVVAsIGRldiwgIiIpOworCisJc3dpdGNoIChmc21fZ2V0c3RhdGUoZmkpKSB7CisJY2FzZSBERVZfU1RBVEVfUlVOTklORzoKKwkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWERPV04pCisJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9TVEFSVFdBSVRfVFgpOworCQllbHNlCisJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9TVEFSVFdBSVRfUlgpOworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9TVEFSVFdBSVRfUlg6CisJCWlmIChldmVudCA9PSBERVZfRVZFTlRfVFhET1dOKQorCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgpOworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9TVEFSVFdBSVRfVFg6CisJCWlmIChldmVudCA9PSBERVZfRVZFTlRfUlhET1dOKQorCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgpOworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9TVE9QV0FJVF9SWFRYOgorCQlpZiAoZXZlbnQgPT0gREVWX0VWRU5UX1RYRE9XTikKKwkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUT1BXQUlUX1JYKTsKKwkJZWxzZQorCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFdBSVRfVFgpOworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9TVE9QV0FJVF9SWDoKKwkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9SWERPV04pCisJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9TVE9QUEVEKTsKKwkJYnJlYWs7CisJY2FzZSBERVZfU1RBVEVfU1RPUFdBSVRfVFg6CisJCWlmIChldmVudCA9PSBERVZfRVZFTlRfVFhET1dOKQorCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFBFRCk7CisJCWJyZWFrOworCX0KKwlpZiAoSVNfTVBDKHByaXYpKSB7CisJCWlmIChldmVudCA9PSBERVZfRVZFTlRfUlhET1dOKQorCQkJbXBjX2NoYW5uZWxfYWN0aW9uKHByaXYtPmNoYW5uZWxbUkVBRF0sCisJCQkJUkVBRCwgTVBDX0NIQU5ORUxfUkVNT1ZFKTsKKwkJZWxzZQorCQkJbXBjX2NoYW5uZWxfYWN0aW9uKHByaXYtPmNoYW5uZWxbV1JJVEVdLAorCQkJCVdSSVRFLCBNUENfQ0hBTk5FTF9SRU1PVkUpOworCX0KK30KKworY29uc3QgZnNtX25vZGUgZGV2X2ZzbVtdID0geworCXsgREVWX1NUQVRFX1NUT1BQRUQsICAgICAgICBERVZfRVZFTlRfU1RBUlQsICAgZGV2X2FjdGlvbl9zdGFydCAgIH0sCisJeyBERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCwgIERFVl9FVkVOVF9TVEFSVCwgICBkZXZfYWN0aW9uX3N0YXJ0ICAgfSwKKwl7IERFVl9TVEFURV9TVE9QV0FJVF9SWFRYLCAgREVWX0VWRU5UX1JYRE9XTiwgIGRldl9hY3Rpb25fY2hkb3duICB9LAorCXsgREVWX1NUQVRFX1NUT1BXQUlUX1JYVFgsICBERVZfRVZFTlRfVFhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCisJeyBERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCwgIERFVl9FVkVOVF9SRVNUQVJULCBkZXZfYWN0aW9uX3Jlc3RhcnQgfSwKKwl7IERFVl9TVEFURV9TVE9QV0FJVF9SWCwgICAgREVWX0VWRU5UX1NUQVJULCAgIGRldl9hY3Rpb25fc3RhcnQgICB9LAorCXsgREVWX1NUQVRFX1NUT1BXQUlUX1JYLCAgICBERVZfRVZFTlRfUlhVUCwgICAgZGV2X2FjdGlvbl9jaHVwICAgIH0sCisJeyBERVZfU1RBVEVfU1RPUFdBSVRfUlgsICAgIERFVl9FVkVOVF9UWFVQLCAgICBkZXZfYWN0aW9uX2NodXAgICAgfSwKKwl7IERFVl9TVEFURV9TVE9QV0FJVF9SWCwgICAgREVWX0VWRU5UX1JYRE9XTiwgIGRldl9hY3Rpb25fY2hkb3duICB9LAorCXsgREVWX1NUQVRFX1NUT1BXQUlUX1JYLCAgICBERVZfRVZFTlRfUkVTVEFSVCwgZGV2X2FjdGlvbl9yZXN0YXJ0IH0sCisJeyBERVZfU1RBVEVfU1RPUFdBSVRfVFgsICAgIERFVl9FVkVOVF9TVEFSVCwgICBkZXZfYWN0aW9uX3N0YXJ0ICAgfSwKKwl7IERFVl9TVEFURV9TVE9QV0FJVF9UWCwgICAgREVWX0VWRU5UX1JYVVAsICAgIGRldl9hY3Rpb25fY2h1cCAgICB9LAorCXsgREVWX1NUQVRFX1NUT1BXQUlUX1RYLCAgICBERVZfRVZFTlRfVFhVUCwgICAgZGV2X2FjdGlvbl9jaHVwICAgIH0sCisJeyBERVZfU1RBVEVfU1RPUFdBSVRfVFgsICAgIERFVl9FVkVOVF9UWERPV04sICBkZXZfYWN0aW9uX2NoZG93biAgfSwKKwl7IERFVl9TVEFURV9TVE9QV0FJVF9UWCwgICAgREVWX0VWRU5UX1JFU1RBUlQsIGRldl9hY3Rpb25fcmVzdGFydCB9LAorCXsgREVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYLCBERVZfRVZFTlRfU1RPUCwgICAgZGV2X2FjdGlvbl9zdG9wICAgIH0sCisJeyBERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgsIERFVl9FVkVOVF9SWFVQLCAgICBkZXZfYWN0aW9uX2NodXAgICAgfSwKKwl7IERFVl9TVEFURV9TVEFSVFdBSVRfUlhUWCwgREVWX0VWRU5UX1RYVVAsICAgIGRldl9hY3Rpb25fY2h1cCAgICB9LAorCXsgREVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYLCBERVZfRVZFTlRfUlhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCisJeyBERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgsIERFVl9FVkVOVF9UWERPV04sICBkZXZfYWN0aW9uX2NoZG93biAgfSwKKwl7IERFVl9TVEFURV9TVEFSVFdBSVRfUlhUWCwgREVWX0VWRU5UX1JFU1RBUlQsIGRldl9hY3Rpb25fcmVzdGFydCB9LAorCXsgREVWX1NUQVRFX1NUQVJUV0FJVF9UWCwgICBERVZfRVZFTlRfU1RPUCwgICAgZGV2X2FjdGlvbl9zdG9wICAgIH0sCisJeyBERVZfU1RBVEVfU1RBUlRXQUlUX1RYLCAgIERFVl9FVkVOVF9SWFVQLCAgICBkZXZfYWN0aW9uX2NodXAgICAgfSwKKwl7IERFVl9TVEFURV9TVEFSVFdBSVRfVFgsICAgREVWX0VWRU5UX1RYVVAsICAgIGRldl9hY3Rpb25fY2h1cCAgICB9LAorCXsgREVWX1NUQVRFX1NUQVJUV0FJVF9UWCwgICBERVZfRVZFTlRfUlhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCisJeyBERVZfU1RBVEVfU1RBUlRXQUlUX1RYLCAgIERFVl9FVkVOVF9SRVNUQVJULCBkZXZfYWN0aW9uX3Jlc3RhcnQgfSwKKwl7IERFVl9TVEFURV9TVEFSVFdBSVRfUlgsICAgREVWX0VWRU5UX1NUT1AsICAgIGRldl9hY3Rpb25fc3RvcCAgICB9LAorCXsgREVWX1NUQVRFX1NUQVJUV0FJVF9SWCwgICBERVZfRVZFTlRfUlhVUCwgICAgZGV2X2FjdGlvbl9jaHVwICAgIH0sCisJeyBERVZfU1RBVEVfU1RBUlRXQUlUX1JYLCAgIERFVl9FVkVOVF9UWFVQLCAgICBkZXZfYWN0aW9uX2NodXAgICAgfSwKKwl7IERFVl9TVEFURV9TVEFSVFdBSVRfUlgsICAgREVWX0VWRU5UX1RYRE9XTiwgIGRldl9hY3Rpb25fY2hkb3duICB9LAorCXsgREVWX1NUQVRFX1NUQVJUV0FJVF9SWCwgICBERVZfRVZFTlRfUkVTVEFSVCwgZGV2X2FjdGlvbl9yZXN0YXJ0IH0sCisJeyBERVZfU1RBVEVfUlVOTklORywgICAgICAgIERFVl9FVkVOVF9TVE9QLCAgICBkZXZfYWN0aW9uX3N0b3AgICAgfSwKKwl7IERFVl9TVEFURV9SVU5OSU5HLCAgICAgICAgREVWX0VWRU5UX1JYRE9XTiwgIGRldl9hY3Rpb25fY2hkb3duICB9LAorCXsgREVWX1NUQVRFX1JVTk5JTkcsICAgICAgICBERVZfRVZFTlRfVFhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCisJeyBERVZfU1RBVEVfUlVOTklORywgICAgICAgIERFVl9FVkVOVF9UWFVQLCAgICBjdGNtX2FjdGlvbl9ub3AgICAgfSwKKwl7IERFVl9TVEFURV9SVU5OSU5HLCAgICAgICAgREVWX0VWRU5UX1JYVVAsICAgIGN0Y21fYWN0aW9uX25vcCAgICB9LAorCXsgREVWX1NUQVRFX1JVTk5JTkcsICAgICAgICBERVZfRVZFTlRfUkVTVEFSVCwgZGV2X2FjdGlvbl9yZXN0YXJ0IH0sCit9OworCitpbnQgZGV2X2ZzbV9sZW4gPSBBUlJBWV9TSVpFKGRldl9mc20pOworCisvKiAtLS0gVGhpcyBpcyB0aGUgRU5EIG15IGZyaWVuZCAtLS0gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuaCBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyNmFiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmgKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgKiBkcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5oCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA3CisgKiBBdXRob3JzOiAJRnJpdHogRWxmZXJ0IChmZWxmZXJ0QG1pbGxlbnV4LmNvbSkKKyAqIAkJUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCisgKiAJTVBDIGFkZGl0aW9ucyA6CisgKgkJQmVsaW5kYSBUaG9tcHNvbiAoYmVsaW5kYXRAdXMuaWJtLmNvbSkKKyAqCQlBbmR5IFJpY2h0ZXIgKHJpY2h0ZXJhQHVzLmlibS5jb20pCisgKi8KKyNpZm5kZWYgX0NUQ01fRlNNU19IXworI2RlZmluZSBfQ1RDTV9GU01TX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CisKKyNpbmNsdWRlICJmc20uaCIKKyNpbmNsdWRlICJjdTMwODguaCIKKyNpbmNsdWRlICJjdGNtX21haW4uaCIKKworLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgY2hhbm5lbCBzdGF0ZW1hY2hpbmUocykgZm9yIGN0YyBhbmQgY3RjbXBjCisgKgorICogVG8gYWxsb3cgYmV0dGVyIGtlcm50eXBpbmcsIHByZWZpeC1sZXNzIGRlZmluaXRpb25zIGZvciBjaGFubmVsIHN0YXRlcworICogYW5kIGNoYW5uZWwgZXZlbnRzIGhhdmUgYmVlbiByZXBsYWNlZCA6CisgKiBjaF9ldmVudC4uLiAtPiBjdGNfY2hfZXZlbnQuLi4KKyAqIENIX0VWRU5ULi4uIC0+IENUQ19FVkVOVC4uLgorICogY2hfc3RhdGUuLi4gLT4gY3RjX2NoX3N0YXRlLi4uCisgKiBDSF9TVEFURS4uLiAtPiBDVENfU1RBVEUuLi4KKyAqLworLyoKKyAqIEV2ZW50cyBvZiB0aGUgY2hhbm5lbCBzdGF0ZW1hY2hpbmUocykgZm9yIGN0YyBhbmQgY3RjbXBjCisgKi8KK2VudW0gY3RjX2NoX2V2ZW50cyB7CisJLyoKKwkgKiBFdmVudHMsIHJlcHJlc2VudGluZyByZXR1cm4gY29kZSBvZgorCSAqIEkvTyBvcGVyYXRpb25zIChjY3dfZGV2aWNlX3N0YXJ0LCBjY3dfZGV2aWNlX2hhbHQgZXQgYWwuKQorCSAqLworCUNUQ19FVkVOVF9JT19TVUNDRVNTLAorCUNUQ19FVkVOVF9JT19FQlVTWSwKKwlDVENfRVZFTlRfSU9fRU5PREVWLAorCUNUQ19FVkVOVF9JT19VTktOT1dOLAorCisJQ1RDX0VWRU5UX0FUVE5CVVNZLAorCUNUQ19FVkVOVF9BVFROLAorCUNUQ19FVkVOVF9CVVNZLAorCS8qCisJICogRXZlbnRzLCByZXByZXNlbnRpbmcgdW5pdC1jaGVjaworCSAqLworCUNUQ19FVkVOVF9VQ19SQ1JFU0VULAorCUNUQ19FVkVOVF9VQ19SU1JFU0VULAorCUNUQ19FVkVOVF9VQ19UWFRJTUVPVVQsCisJQ1RDX0VWRU5UX1VDX1RYUEFSSVRZLAorCUNUQ19FVkVOVF9VQ19IV0ZBSUwsCisJQ1RDX0VWRU5UX1VDX1JYUEFSSVRZLAorCUNUQ19FVkVOVF9VQ19aRVJPLAorCUNUQ19FVkVOVF9VQ19VTktOT1dOLAorCS8qCisJICogRXZlbnRzLCByZXByZXNlbnRpbmcgc3ViY2hhbm5lbC1jaGVjaworCSAqLworCUNUQ19FVkVOVF9TQ19VTktOT1dOLAorCS8qCisJICogRXZlbnRzLCByZXByZXNlbnRpbmcgbWFjaGluZSBjaGVja3MKKwkgKi8KKwlDVENfRVZFTlRfTUNfRkFJTCwKKwlDVENfRVZFTlRfTUNfR09PRCwKKwkvKgorCSAqIEV2ZW50LCByZXByZXNlbnRpbmcgbm9ybWFsIElSUQorCSAqLworCUNUQ19FVkVOVF9JUlEsCisJQ1RDX0VWRU5UX0ZJTlNUQVQsCisJLyoKKwkgKiBFdmVudCwgcmVwcmVzZW50aW5nIHRpbWVyIGV4cGlyeS4KKwkgKi8KKwlDVENfRVZFTlRfVElNRVIsCisJLyoKKwkgKiBFdmVudHMsIHJlcHJlc2VudGluZyBjb21tYW5kcyBmcm9tIHVwcGVyIGxldmVscy4KKwkgKi8KKwlDVENfRVZFTlRfU1RBUlQsCisJQ1RDX0VWRU5UX1NUT1AsCisJQ1RDX05SX0VWRU5UUywKKwkvKgorCSAqIGFkZGl0aW9uYWwgTVBDIGV2ZW50cworCSAqLworCUNUQ19FVkVOVF9TRU5EX1hJRCA9IENUQ19OUl9FVkVOVFMsCisJQ1RDX0VWRU5UX1JTV0VFUF9USU1FUiwKKwkvKgorCSAqIE1VU1QgYmUgYWx3YXlzIHRoZSBsYXN0IGVsZW1lbnQhIQorCSAqLworCUNUQ19NUENfTlJfRVZFTlRTLAorfTsKKworLyoKKyAqIFN0YXRlcyBvZiB0aGUgY2hhbm5lbCBzdGF0ZW1hY2hpbmUocykgZm9yIGN0YyBhbmQgY3RjbXBjLgorICovCitlbnVtIGN0Y19jaF9zdGF0ZXMgeworCS8qCisJICogQ2hhbm5lbCBub3QgYXNzaWduZWQgdG8gYW55IGRldmljZSwKKwkgKiBpbml0aWFsIHN0YXRlLCBkaXJlY3Rpb24gaW52YWxpZAorCSAqLworCUNUQ19TVEFURV9JRExFLAorCS8qCisJICogQ2hhbm5lbCBhc3NpZ25lZCBidXQgbm90IG9wZXJhdGluZworCSAqLworCUNUQ19TVEFURV9TVE9QUEVELAorCUNUQ19TVEFURV9TVEFSVFdBSVQsCisJQ1RDX1NUQVRFX1NUQVJUUkVUUlksCisJQ1RDX1NUQVRFX1NFVFVQV0FJVCwKKwlDVENfU1RBVEVfUlhJTklULAorCUNUQ19TVEFURV9UWElOSVQsCisJQ1RDX1NUQVRFX1JYLAorCUNUQ19TVEFURV9UWCwKKwlDVENfU1RBVEVfUlhJRExFLAorCUNUQ19TVEFURV9UWElETEUsCisJQ1RDX1NUQVRFX1JYRVJSLAorCUNUQ19TVEFURV9UWEVSUiwKKwlDVENfU1RBVEVfVEVSTSwKKwlDVENfU1RBVEVfRFRFUk0sCisJQ1RDX1NUQVRFX05PVE9QLAorCUNUQ19OUl9TVEFURVMsICAgICAvKiBNVVNUIGJlIHRoZSBsYXN0IGVsZW1lbnQgb2Ygbm9uLWV4cGFuZGVkIHN0YXRlcyAqLworCS8qCisJICogYWRkaXRpb25hbCBNUEMgc3RhdGVzCisJICovCisJQ0hfWElEMF9QRU5ESU5HID0gQ1RDX05SX1NUQVRFUywKKwlDSF9YSUQwX0lOUFJPR1JFU1MsCisJQ0hfWElEN19QRU5ESU5HLAorCUNIX1hJRDdfUEVORElORzEsCisJQ0hfWElEN19QRU5ESU5HMiwKKwlDSF9YSUQ3X1BFTkRJTkczLAorCUNIX1hJRDdfUEVORElORzQsCisJQ1RDX01QQ19OUl9TVEFURVMsIC8qIE1VU1QgYmUgdGhlIGxhc3QgZWxlbWVudCBvZiBleHBhbmRlZCBtcGMgc3RhdGVzICovCit9OworCitleHRlcm4gY29uc3QgY2hhciAqY3RjX2NoX2V2ZW50X25hbWVzW107CisKK2V4dGVybiBjb25zdCBjaGFyICpjdGNfY2hfc3RhdGVfbmFtZXNbXTsKKwordm9pZCBjdGNtX2Njd19jaGVja19yYyhzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCByYywgY2hhciAqbXNnKTsKK3ZvaWQgY3RjbV9wdXJnZV9za2JfcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSk7Cit2b2lkIGZzbV9hY3Rpb25fbm9wKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKKworLyoKKyAqIC0tLS0tIG5vbi1zdGF0aWMgYWN0aW9ucyBmb3IgY3RjbSBjaGFubmVsIHN0YXRlbWFjaGluZSAtLS0tLQorICoKKyAqLwordm9pZCBjdGNtX2NoeF90eGlkbGUoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworCisvKgorICogLS0tLS0gRlNNIChzdGF0ZS9ldmVudC9hY3Rpb24pIG9mIHRoZSBjdGNtIGNoYW5uZWwgc3RhdGVtYWNoaW5lIC0tLS0tCisgKi8KK2V4dGVybiBjb25zdCBmc21fbm9kZSBjaF9mc21bXTsKK2V4dGVybiBpbnQgY2hfZnNtX2xlbjsKKworCisvKgorICogLS0tLS0gbm9uLXN0YXRpYyBhY3Rpb25zIGZvciBjdGNtcGMgY2hhbm5lbCBzdGF0ZW1hY2hpbmUgLS0tLQorICoKKyAqLworLyogc2hhcmVkIDoKK3ZvaWQgY3RjbV9jaHhfdHhpZGxlKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CisgKi8KK3ZvaWQgY3RjbXBjX2NoeF9yeGlkbGUoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworCisvKgorICogLS0tLS0gRlNNIChzdGF0ZS9ldmVudC9hY3Rpb24pIG9mIHRoZSBjdGNtcGMgY2hhbm5lbCBzdGF0ZW1hY2hpbmUgLS0tLS0KKyAqLworZXh0ZXJuIGNvbnN0IGZzbV9ub2RlIGN0Y21wY19jaF9mc21bXTsKK2V4dGVybiBpbnQgbXBjX2NoX2ZzbV9sZW47CisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIGRldmljZSBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lIGZvciBjdGMgYW5kIG1wYworICovCisKKy8qCisgKiBTdGF0ZXMgb2YgdGhlIGRldmljZSBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgorICovCitlbnVtIGRldl9zdGF0ZXMgeworCURFVl9TVEFURV9TVE9QUEVELAorCURFVl9TVEFURV9TVEFSVFdBSVRfUlhUWCwKKwlERVZfU1RBVEVfU1RBUlRXQUlUX1JYLAorCURFVl9TVEFURV9TVEFSVFdBSVRfVFgsCisJREVWX1NUQVRFX1NUT1BXQUlUX1JYVFgsCisJREVWX1NUQVRFX1NUT1BXQUlUX1JYLAorCURFVl9TVEFURV9TVE9QV0FJVF9UWCwKKwlERVZfU1RBVEVfUlVOTklORywKKwkvKgorCSAqIE1VU1QgYmUgYWx3YXlzIHRoZSBsYXN0IGVsZW1lbnQhIQorCSAqLworCUNUQ01fTlJfREVWX1NUQVRFUworfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmRldl9zdGF0ZV9uYW1lc1tdOworCisvKgorICogRXZlbnRzIG9mIHRoZSBkZXZpY2UgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KKyAqIGN0Y20gYW5kIGN0Y21wYworICovCitlbnVtIGRldl9ldmVudHMgeworCURFVl9FVkVOVF9TVEFSVCwKKwlERVZfRVZFTlRfU1RPUCwKKwlERVZfRVZFTlRfUlhVUCwKKwlERVZfRVZFTlRfVFhVUCwKKwlERVZfRVZFTlRfUlhET1dOLAorCURFVl9FVkVOVF9UWERPV04sCisJREVWX0VWRU5UX1JFU1RBUlQsCisJLyoKKwkgKiBNVVNUIGJlIGFsd2F5cyB0aGUgbGFzdCBlbGVtZW50ISEKKwkgKi8KKwlDVENNX05SX0RFVl9FVkVOVFMKK307CisKK2V4dGVybiBjb25zdCBjaGFyICpkZXZfZXZlbnRfbmFtZXNbXTsKKworLyoKKyAqIEFjdGlvbnMgZm9yIHRoZSBkZXZpY2UgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KKyAqIGN0YyBhbmQgY3RjbXBjCisgKi8KKy8qCitzdGF0aWMgdm9pZCBkZXZfYWN0aW9uX3N0YXJ0KGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBkZXZfYWN0aW9uX3N0b3AoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGRldl9hY3Rpb25fcmVzdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBkZXZfYWN0aW9uX2NodXAoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGRldl9hY3Rpb25fY2hkb3duKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CisqLworCisvKgorICogVGhlIChzdGF0ZS9ldmVudC9hY3Rpb24pIGZzbSB0YWJsZSBvZiB0aGUgZGV2aWNlIGludGVyZmFjZSBzdGF0ZW1hY2hpbmUuCisgKiBjdGNtIGFuZCBjdGNtcGMKKyAqLworZXh0ZXJuIGNvbnN0IGZzbV9ub2RlIGRldl9mc21bXTsKK2V4dGVybiBpbnQgZGV2X2ZzbV9sZW47CisKKworLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgTVBDIEdyb3VwIHN0YXRlbWFjaGluZQorICovCisKKy8qCisgKiBNUEMgR3JvdXAgU3RhdGlvbiBGU00gU3RhdGVzCisKK1N0YXRlIE5hbWUJCVdoZW4gSW4gVGhpcyBTdGF0ZQorPT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01QQ0dfU1RBVEVfUkVTRVQJSW5pdGlhbCBTdGF0ZSBXaGVuIERyaXZlciBMb2FkZWQKKwkJCVdlIHJlY2VpdmUgYW5kIHNlbmQgTk9USElORworCitNUENHX1NUQVRFX0lOT1AgICAgICAgICBJTk9QIFJlY2VpdmVkLgorCQkJR3JvdXAgbGV2ZWwgbm9uLXJlY292ZXJhYmxlIGVycm9yCisKK01QQ0dfU1RBVEVfUkVBRFkJWElEIGV4Y2hhbmdlcyBmb3IgYXQgbGVhc3QgMSB3cml0ZSBhbmQKKwkJCTEgcmVhZCBjaGFubmVsIGhhdmUgY29tcGxldGVkLgorCQkJR3JvdXAgaXMgcmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIuCisKK1N0YXRlcyBmcm9tIGN0Y19tcGNfYWxsb2NfY2hhbm5lbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01QQ0dfU1RBVEVfWElEMklOSVRXCUF3YWl0aW5nIFhJRDIoMCkgSW5pdGlhdGlvbgorCQkJICAgICAgQVRUTiBmcm9tIG90aGVyIHNpZGUgd2lsbCBzdGFydAorCQkJICAgICAgWElEIG5lZ290aWF0aW9ucy4KKwkJCSAgICAgIFktc2lkZSBwcm90b2NvbCBvbmx5LgorCitNUENHX1NUQVRFX1hJRDJJTklUWAlYSUQyKDApIG5lZ290aWF0aW9ucyBhcmUgaW4gcHJvZ3Jlc3MuCisJCQkgICAgICBBdCBsZWFzdCAxLCBidXQgbm90IGFsbCwgWElEMigwKSdzCisJCQkgICAgICBoYXZlIGJlZW4gcmVjZWl2ZWQgZnJvbSBwYXJ0bmVyLgorCitNUENHX1NUQVRFX1hJRDdJTklUVwlYSUQyKDApIGNvbXBsZXRlCisJCQkgICAgICBObyBYSUQyKDcpJ3MgaGF2ZSB5ZXQgYmVlbiByZWNlaXZlZC4KKwkJCSAgICAgIFhJRDIoNykgbmVnb3RpYXRpb25zIHBlbmRpbmcuCisKK01QQ0dfU1RBVEVfWElEN0lOSVRYCVhJRDIoNykgbmVnb3RpYXRpb25zIGluIHByb2dyZXNzLgorCQkJICAgICAgQXQgbGVhc3QgMSwgYnV0IG5vdCBhbGwsIFhJRDIoNykncworCQkJICAgICAgaGF2ZSBiZWVuIHJlY2VpdmVkIGZyb20gcGFydG5lci4KKworTVBDR19TVEFURV9YSUQ3SU5JVEYJWElEMig3KSBuZWdvdGlhdGlvbnMgY29tcGxldGUuCisJCQkgICAgICBUcmFuc2l0aW9uaW5nIHRvIFJFQURZLgorCitNUENHX1NUQVRFX1JFQURZCSAgICAgIFJlYWR5IGZvciBEYXRhIFRyYW5zZmVyLgorCisKK1N0YXRlcyBmcm9tIGN0Y19tcGNfZXN0YWJsaXNoX2Nvbm5lY3Rpdml0eSBjYWxsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTVBDR19TVEFURV9YSUQwSU9XQUlUCUluaXRpYXRpbmcgWElEMigwKSBuZWdvdGlhdGlvbnMuCisJCQkgICAgICBYLXNpZGUgcHJvdG9jb2wgb25seS4KKwkJCSAgICAgIEFUVE4tQlVTWSBmcm9tIG90aGVyIHNpZGUgd2lsbCBjb252ZXJ0CisJCQkgICAgICB0aGlzIHRvIFktc2lkZSBwcm90b2NvbCBhbmQgdGhlCisJCQkgICAgICBjdGNfbXBjX2FsbG9jX2NoYW5uZWwgZmxvdyB3aWxsIGJlZ2luLgorCitNUENHX1NUQVRFX1hJRDBJT1dBSVgJWElEMigwKSBuZWdvdGlhdGlvbnMgYXJlIGluIHByb2dyZXNzLgorCQkJICAgICAgQXQgbGVhc3QgMSwgYnV0IG5vdCBhbGwsIFhJRDIoMCkncworCQkJICAgICAgaGF2ZSBiZWVuIHJlY2VpdmVkIGZyb20gcGFydG5lci4KKworTVBDR19TVEFURV9YSUQ3SU5JVEkJWElEMigwKSBjb21wbGV0ZQorCQkJICAgICAgTm8gWElEMig3KSdzIGhhdmUgeWV0IGJlZW4gcmVjZWl2ZWQuCisJCQkgICAgICBYSUQyKDcpIG5lZ290aWF0aW9ucyBwZW5kaW5nLgorCitNUENHX1NUQVRFX1hJRDdJTklUWglYSUQyKDcpIG5lZ290aWF0aW9ucyBpbiBwcm9ncmVzcy4KKwkJCSAgICAgIEF0IGxlYXN0IDEsIGJ1dCBub3QgYWxsLCBYSUQyKDcpJ3MKKwkJCSAgICAgIGhhdmUgYmVlbiByZWNlaXZlZCBmcm9tIHBhcnRuZXIuCisKK01QQ0dfU1RBVEVfWElEN0lOSVRGCVhJRDIoNykgbmVnb3RpYXRpb25zIGNvbXBsZXRlLgorCQkJICAgICAgVHJhbnNpdGlvbmluZyB0byBSRUFEWS4KKworTVBDR19TVEFURV9SRUFEWQkgICAgICBSZWFkeSBmb3IgRGF0YSBUcmFuc2Zlci4KKworKi8KKworZW51bSBtcGNnX2V2ZW50cyB7CisJTVBDR19FVkVOVF9JTk9QLAorCU1QQ0dfRVZFTlRfRElTQ09OQywKKwlNUENHX0VWRU5UX1hJRDBETywKKwlNUENHX0VWRU5UX1hJRDIsCisJTVBDR19FVkVOVF9YSUQyRE9ORSwKKwlNUENHX0VWRU5UX1hJRDdET05FLAorCU1QQ0dfRVZFTlRfVElNRVIsCisJTVBDR19FVkVOVF9ET0lPLAorCU1QQ0dfTlJfRVZFTlRTLAorfTsKKworZW51bSBtcGNnX3N0YXRlcyB7CisJTVBDR19TVEFURV9SRVNFVCwKKwlNUENHX1NUQVRFX0lOT1AsCisJTVBDR19TVEFURV9YSUQySU5JVFcsCisJTVBDR19TVEFURV9YSUQySU5JVFgsCisJTVBDR19TVEFURV9YSUQ3SU5JVFcsCisJTVBDR19TVEFURV9YSUQ3SU5JVFgsCisJTVBDR19TVEFURV9YSUQwSU9XQUlULAorCU1QQ0dfU1RBVEVfWElEMElPV0FJWCwKKwlNUENHX1NUQVRFX1hJRDdJTklUSSwKKwlNUENHX1NUQVRFX1hJRDdJTklUWiwKKwlNUENHX1NUQVRFX1hJRDdJTklURiwKKwlNUENHX1NUQVRFX0ZMT1dDLAorCU1QQ0dfU1RBVEVfUkVBRFksCisJTVBDR19OUl9TVEFURVMsCit9OworCisjZW5kaWYKKy8qIC0tLSBUaGlzIGlzIHRoZSBFTkQgbXkgZnJpZW5kIC0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyODQzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKQEAgLTAsMCArMSwxNzcyIEBACisvKgorICogZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYworICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwNworICogQXV0aG9yKHMpOgorICoJT3JpZ2luYWwgQ1RDIGRyaXZlcihzKToKKyAqCQlGcml0eiBFbGZlcnQgKGZlbGZlcnRAbWlsbGVudXguY29tKQorICoJCURpZXRlciBXZWxsZXJkaWVrICh3ZWxAZGUuaWJtLmNvbSkKKyAqCQlNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCisgKgkJRGVuaXMgSm9zZXBoIEJhcnJvdyAoYmFycm93X2RqQHlhaG9vLmNvbSkKKyAqCQlKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQorICoJCUNvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4KKyAqCU1QQyBhZGRpdGlvbnM6CisgKgkJQmVsaW5kYSBUaG9tcHNvbiAoYmVsaW5kYXRAdXMuaWJtLmNvbSkKKyAqCQlBbmR5IFJpY2h0ZXIgKHJpY2h0ZXJhQHVzLmlibS5jb20pCisgKglSZXZpdmVkIGJ5OgorICoJCVBldGVyIFRpZWRlbWFubiAocHRpZWRlbUBkZS5pYm0uY29tKQorICovCisKKyN1bmRlZiBERUJVRworI3VuZGVmIERFQlVHREFUQQorI3VuZGVmIERFQlVHQ0NXCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CisKKyNpbmNsdWRlICJjdTMwODguaCIKKyNpbmNsdWRlICJjdGNtX2ZzbXMuaCIKKyNpbmNsdWRlICJjdGNtX21haW4uaCIKKworLyogU29tZSBjb21tb24gZ2xvYmFsIHZhcmlhYmxlcyAqLworCisvKgorICogTGlua2VkIGxpc3Qgb2YgYWxsIGRldGVjdGVkIGNoYW5uZWxzLgorICovCitzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbHM7CisKKy8qKgorICogVW5wYWNrIGEganVzdCByZWNlaXZlZCBza2IgYW5kIGhhbmQgaXQgb3ZlciB0bworICogdXBwZXIgbGF5ZXJzLgorICoKKyAqICBjaAkJVGhlIGNoYW5uZWwgd2hlcmUgdGhpcyBza2IgaGFzIGJlZW4gcmVjZWl2ZWQuCisgKiAgcHNrYglUaGUgcmVjZWl2ZWQgc2tiLgorICovCit2b2lkIGN0Y21fdW5wYWNrX3NrYihzdHJ1Y3QgY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpwc2tiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJX191MTYgbGVuID0gKigoX191MTYgKikgcHNrYi0+ZGF0YSk7CisKKwlza2JfcHV0KHBza2IsIDIgKyBMTF9IRUFERVJfTEVOR1RIKTsKKwlza2JfcHVsbChwc2tiLCAyKTsKKwlwc2tiLT5kZXYgPSBkZXY7CisJcHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJaW50IHNrYmxlbjsKKwkJc3RydWN0IGxsX2hlYWRlciAqaGVhZGVyID0gKHN0cnVjdCBsbF9oZWFkZXIgKilwc2tiLT5kYXRhOworCisJCXNrYl9wdWxsKHBza2IsIExMX0hFQURFUl9MRU5HVEgpOworCQlpZiAoKGNoLT5wcm90b2NvbCA9PSBDVENNX1BST1RPX1MzOTApICYmCisJCSAgICAoaGVhZGVyLT50eXBlICE9IEVUSF9QX0lQKSkgeworCisJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19JTExFR0FMUEtUKSkgeworCQkJCS8qCisJCQkJICogQ2hlY2sgcGFja2V0IHR5cGUgb25seSBpZiB3ZSBzdGljayBzdHJpY3RseQorCQkJCSAqIHRvIFMvMzkwJ3MgcHJvdG9jb2wgb2YgT1MzOTAuIFRoaXMgb25seQorCQkJCSAqIHN1cHBvcnRzIElQLiBPdGhlcndpc2UgYWxsb3cgYW55IHBhY2tldAorCQkJCSAqIHR5cGUuCisJCQkJICovCisJCQkJY3RjbV9wcl93YXJuKCIlcyBJbGxlZ2FsIHBhY2tldCB0eXBlIDB4JTA0eCAiCisJCQkJCQkicmVjZWl2ZWQsIGRyb3BwaW5nXG4iLAorCQkJCQkJZGV2LT5uYW1lLCBoZWFkZXItPnR5cGUpOworCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19JTExFR0FMUEtUOworCQkJfQorCisJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCXJldHVybjsKKwkJfQorCQlwc2tiLT5wcm90b2NvbCA9IG50b2hzKGhlYWRlci0+dHlwZSk7CisJCWlmIChoZWFkZXItPmxlbmd0aCA8PSBMTF9IRUFERVJfTEVOR1RIKSB7CisJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19JTExFR0FMU0laRSkpIHsKKwkJCQljdGNtX3ByX3dhcm4oCisJCQkJCSIlcyBJbGxlZ2FsIHBhY2tldCBzaXplICVkICIKKwkJCQkJInJlY2VpdmVkIChNVFU9JWQgYmxvY2tsZW49JWQpLCAiCisJCQkJCSJkcm9wcGluZ1xuIiwgZGV2LT5uYW1lLCBoZWFkZXItPmxlbmd0aCwKKwkJCQkJZGV2LT5tdHUsIGxlbik7CisJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX0lMTEVHQUxTSVpFOworCQkJfQorCisJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQlyZXR1cm47CisJCX0KKwkJaGVhZGVyLT5sZW5ndGggLT0gTExfSEVBREVSX0xFTkdUSDsKKwkJbGVuIC09IExMX0hFQURFUl9MRU5HVEg7CisJCWlmICgoaGVhZGVyLT5sZW5ndGggPiBza2JfdGFpbHJvb20ocHNrYikpIHx8CisJCQkoaGVhZGVyLT5sZW5ndGggPiBsZW4pKSB7CisJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19PVkVSUlVOKSkgeworCQkJCWN0Y21fcHJfd2FybigKKwkJCQkJIiVzIElsbGVnYWwgcGFja2V0IHNpemUgJWQgKGJleW9uZCB0aGUiCisJCQkJCSIgZW5kIG9mIHJlY2VpdmVkIGRhdGEpLCBkcm9wcGluZ1xuIiwKKwkJCQkJZGV2LT5uYW1lLCBoZWFkZXItPmxlbmd0aCk7CisJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47CisJCQl9CisKKwkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCXJldHVybjsKKwkJfQorCQlza2JfcHV0KHBza2IsIGhlYWRlci0+bGVuZ3RoKTsKKwkJc2tiX3Jlc2V0X21hY19oZWFkZXIocHNrYik7CisJCWxlbiAtPSBoZWFkZXItPmxlbmd0aDsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihwc2tiLT5sZW4pOworCQlpZiAoIXNrYikgeworCQkJaWYgKCEoY2gtPmxvZ2ZsYWdzICYgTE9HX0ZMQUdfTk9NRU0pKSB7CisJCQkJY3RjbV9wcl93YXJuKAorCQkJCQkiJXMgT3V0IG9mIG1lbW9yeSBpbiBjdGNtX3VucGFja19za2JcbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX05PTUVNOworCQkJfQorCQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJcmV0dXJuOworCQl9CisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEocHNrYiwgc2tiX3B1dChza2IsIHBza2ItPmxlbiksCisJCQkJCSAgcHNrYi0+bGVuKTsKKwkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJc2tiLT5kZXYgPSBwc2tiLT5kZXY7CisJCXNrYi0+cHJvdG9jb2wgPSBwc2tiLT5wcm90b2NvbDsKKwkJcHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCXNrYmxlbiA9IHNrYi0+bGVuOworCQkvKgorCQkgKiByZXNldCBsb2dmbGFncworCQkgKi8KKwkJY2gtPmxvZ2ZsYWdzID0gMDsKKwkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2JsZW47CisJCW5ldGlmX3J4X25pKHNrYik7CisJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCWlmIChsZW4gPiAwKSB7CisJCQlza2JfcHVsbChwc2tiLCBoZWFkZXItPmxlbmd0aCk7CisJCQlpZiAoc2tiX3RhaWxyb29tKHBza2IpIDwgTExfSEVBREVSX0xFTkdUSCkgeworCQkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX09WRVJSVU4pKSB7CisJCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCisJCQkJCQkiT3ZlcnJ1biBpbiBjdGNtX3VucGFja19za2IiKTsKKwkJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47CisJCQkJfQorCQkJCXJldHVybjsKKwkJCX0KKwkJCXNrYl9wdXQocHNrYiwgTExfSEVBREVSX0xFTkdUSCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogUmVsZWFzZSBhIHNwZWNpZmljIGNoYW5uZWwgaW4gdGhlIGNoYW5uZWwgbGlzdC4KKyAqCisgKiAgY2gJCVBvaW50ZXIgdG8gY2hhbm5lbCBzdHJ1Y3QgdG8gYmUgcmVsZWFzZWQuCisgKi8KK3N0YXRpYyB2b2lkIGNoYW5uZWxfZnJlZShzdHJ1Y3QgY2hhbm5lbCAqY2gpCit7CisJQ1RDTV9EQkZfVEVYVChUUkFDRSwgMiwgX19GVU5DVElPTl9fKTsKKwljaC0+ZmxhZ3MgJj0gfkNIQU5ORUxfRkxBR1NfSU5VU0U7CisJZnNtX25ld3N0YXRlKGNoLT5mc20sIENUQ19TVEFURV9JRExFKTsKK30KKworLyoqCisgKiBSZW1vdmUgYSBzcGVjaWZpYyBjaGFubmVsIGluIHRoZSBjaGFubmVsIGxpc3QuCisgKgorICogIGNoCQlQb2ludGVyIHRvIGNoYW5uZWwgc3RydWN0IHRvIGJlIHJlbGVhc2VkLgorICovCitzdGF0aWMgdm9pZCBjaGFubmVsX3JlbW92ZShzdHJ1Y3QgY2hhbm5lbCAqY2gpCit7CisJc3RydWN0IGNoYW5uZWwgKipjID0gJmNoYW5uZWxzOworCWNoYXIgY2hpZFtDVENNX0lEX1NJWkUrMV07CisJaW50IG9rID0gMDsKKworCWlmIChjaCA9PSBOVUxMKQorCQlyZXR1cm47CisJZWxzZQorCQlzdHJuY3B5KGNoaWQsIGNoLT5pZCwgQ1RDTV9JRF9TSVpFKTsKKworCWNoYW5uZWxfZnJlZShjaCk7CisJd2hpbGUgKCpjKSB7CisJCWlmICgqYyA9PSBjaCkgeworCQkJKmMgPSBjaC0+bmV4dDsKKwkJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKKwkJCWlmIChJU19NUEMoY2gpKQorCQkJCWZzbV9kZWx0aW1lcigmY2gtPnN3ZWVwX3RpbWVyKTsKKworCQkJa2ZyZWVfZnNtKGNoLT5mc20pOworCQkJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbNF0pOworCQkJaWYgKGNoLT50cmFuc19za2IgIT0gTlVMTCkgeworCQkJCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzFdKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShjaC0+dHJhbnNfc2tiKTsKKwkJCX0KKwkJCWlmIChJU19NUEMoY2gpKSB7CisJCQkJdGFza2xldF9raWxsKCZjaC0+Y2hfdGFza2xldCk7CisJCQkJdGFza2xldF9raWxsKCZjaC0+Y2hfZGlzY190YXNrbGV0KTsKKwkJCQlrZnJlZShjaC0+ZGlzY29udGFjdF90aCk7CisJCQl9CisJCQlrZnJlZShjaC0+Y2N3KTsKKwkJCWtmcmVlKGNoLT5pcmIpOworCQkJa2ZyZWUoY2gpOworCQkJb2sgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJYyA9ICYoKCpjKS0+bmV4dCk7CisJfQorCisJQ1RDTV9EQkZfVEVYVF8oU0VUVVAsIENUQ19EQkZfSU5GTywgIiVzKCVzKSAlcyIsIENUQ01fRlVOVEFJTCwKKwkJCWNoaWQsIG9rID8gIk9LIiA6ICJmYWlsZWQiKTsKK30KKworLyoqCisgKiBHZXQgYSBzcGVjaWZpYyBjaGFubmVsIGZyb20gdGhlIGNoYW5uZWwgbGlzdC4KKyAqCisgKiAgdHlwZQlUeXBlIG9mIGNoYW5uZWwgd2UgYXJlIGludGVyZXN0ZWQgaW4uCisgKiAgaWQJCUlkIG9mIGNoYW5uZWwgd2UgYXJlIGludGVyZXN0ZWQgaW4uCisgKiAgZGlyZWN0aW9uCURpcmVjdGlvbiB3ZSB3YW50IHRvIHVzZSB0aGlzIGNoYW5uZWwgZm9yLgorICoKKyAqIHJldHVybnMgUG9pbnRlciB0byBhIGNoYW5uZWwgb3IgTlVMTCBpZiBubyBtYXRjaGluZyBjaGFubmVsIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIHN0cnVjdCBjaGFubmVsICpjaGFubmVsX2dldChlbnVtIGNoYW5uZWxfdHlwZXMgdHlwZSwKKwkJCQkJY2hhciAqaWQsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IGNoYW5uZWwgKmNoID0gY2hhbm5lbHM7CisKKwlpZiAoZG9fZGVidWcpIHsKKwkJY2hhciBidWZbNjRdOworCQlzcHJpbnRmKGJ1ZiwgIiVzKCVkLCAlcywgJWQpXG4iLAorCQkJCUNUQ01fRlVOVEFJTCwgdHlwZSwgaWQsIGRpcmVjdGlvbik7CisJCUNUQ01fREJGX1RFWFQoVFJBQ0UsIENUQ19EQkZfSU5GTywgYnVmKTsKKwl9CisJd2hpbGUgKGNoICYmIChzdHJuY21wKGNoLT5pZCwgaWQsIENUQ01fSURfU0laRSkgfHwgKGNoLT50eXBlICE9IHR5cGUpKSkKKwkJY2ggPSBjaC0+bmV4dDsKKwlpZiAoIWNoKSB7CisJCWNoYXIgYnVmWzY0XTsKKwkJc3ByaW50ZihidWYsICIlcyglZCwgJXMsICVkKSBub3QgZm91bmQgaW4gY2hhbm5lbCBsaXN0XG4iLAorCQkJCUNUQ01fRlVOVEFJTCwgdHlwZSwgaWQsIGRpcmVjdGlvbik7CisJCUNUQ01fREJGX1RFWFQoRVJST1IsIENUQ19EQkZfRVJST1IsIGJ1Zik7CisJfSBlbHNlIHsKKwkJaWYgKGNoLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfSU5VU0UpCisJCQljaCA9IE5VTEw7CisJCWVsc2UgeworCQkJY2gtPmZsYWdzIHw9IENIQU5ORUxfRkxBR1NfSU5VU0U7CisJCQljaC0+ZmxhZ3MgJj0gfkNIQU5ORUxfRkxBR1NfUldNQVNLOworCQkJY2gtPmZsYWdzIHw9IChkaXJlY3Rpb24gPT0gV1JJVEUpCisJCQkgICAgPyBDSEFOTkVMX0ZMQUdTX1dSSVRFIDogQ0hBTk5FTF9GTEFHU19SRUFEOworCQkJZnNtX25ld3N0YXRlKGNoLT5mc20sIENUQ19TVEFURV9TVE9QUEVEKTsKKwkJfQorCX0KKwlyZXR1cm4gY2g7Cit9CisKK3N0YXRpYyBsb25nIGN0Y21fY2hlY2tfaXJiX2Vycm9yKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgaXJiICppcmIpCit7CisJaWYgKCFJU19FUlIoaXJiKSkKKwkJcmV0dXJuIDA7CisKKwlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9XQVJOLCAiaXJiIGVycm9yICVsZCBvbiBkZXZpY2UgJXNcbiIsCisJCQlQVFJfRVJSKGlyYiksIGNkZXYtPmRldi5idXNfaWQpOworCisJc3dpdGNoIChQVFJfRVJSKGlyYikpIHsKKwljYXNlIC1FSU86CisJCWN0Y21fcHJfd2FybigiaS9vLWVycm9yIG9uIGRldmljZSAlc1xuIiwgY2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWNhc2UgLUVUSU1FRE9VVDoKKwkJY3RjbV9wcl93YXJuKCJ0aW1lb3V0IG9uIGRldmljZSAlc1xuIiwgY2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN0Y21fcHJfd2FybigidW5rbm93biBlcnJvciAlbGQgb24gZGV2aWNlICVzXG4iLAorCQkJCVBUUl9FUlIoaXJiKSwgY2Rldi0+ZGV2LmJ1c19pZCk7CisJfQorCXJldHVybiBQVFJfRVJSKGlyYik7Cit9CisKKworLyoqCisgKiBDaGVjayBzZW5zZSBvZiBhIHVuaXQgY2hlY2suCisgKgorICogIGNoCQlUaGUgY2hhbm5lbCwgdGhlIHNlbnNlIGNvZGUgYmVsb25ncyB0by4KKyAqICBzZW5zZQlUaGUgc2Vuc2UgY29kZSB0byBpbnNwZWN0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2N3X3VuaXRfY2hlY2soc3RydWN0IGNoYW5uZWwgKmNoLCB1bnNpZ25lZCBjaGFyIHNlbnNlKQoreworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDUsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHNlbnNlICYgU05TMF9JTlRFUlZFTlRJT05fUkVRKSB7CisJCWlmIChzZW5zZSAmIDB4MDEpIHsKKwkJCWN0Y21fcHJfZGVidWcoIiVzOiBJbnRlcmZhY2UgZGlzYy4gb3IgU2VsLiByZXNldCAiCisJCQkJCSIocmVtb3RlKVxuIiwgY2gtPmlkKTsKKwkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfUkNSRVNFVCwgY2gpOworCQl9IGVsc2UgeworCQkJY3RjbV9wcl9kZWJ1ZygiJXM6IFN5c3RlbSByZXNldCAocmVtb3RlKVxuIiwgY2gtPmlkKTsKKwkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfUlNSRVNFVCwgY2gpOworCQl9CisJfSBlbHNlIGlmIChzZW5zZSAmIFNOUzBfRVFVSVBNRU5UX0NIRUNLKSB7CisJCWlmIChzZW5zZSAmIFNOUzBfQlVTX09VVF9DSEVDSykgeworCQkJY3RjbV9wcl93YXJuKCIlczogSGFyZHdhcmUgbWFsZnVuY3Rpb24gKHJlbW90ZSlcbiIsCisJCQkJY2gtPmlkKTsKKwkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfSFdGQUlMLCBjaCk7CisJCX0gZWxzZSB7CisJCQljdGNtX3ByX3dhcm4oIiVzOiBSZWFkLWRhdGEgcGFyaXR5IGVycm9yIChyZW1vdGUpXG4iLAorCQkJCWNoLT5pZCk7CisJCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX1VDX1JYUEFSSVRZLCBjaCk7CisJCX0KKwl9IGVsc2UgaWYgKHNlbnNlICYgU05TMF9CVVNfT1VUX0NIRUNLKSB7CisJCWlmIChzZW5zZSAmIDB4MDQpIHsKKwkJCWN0Y21fcHJfd2FybigiJXM6IERhdGEtc3RyZWFtaW5nIHRpbWVvdXQpXG4iLCBjaC0+aWQpOworCQkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9VQ19UWFRJTUVPVVQsIGNoKTsKKwkJfSBlbHNlIHsKKwkJCWN0Y21fcHJfd2FybigiJXM6IERhdGEtdHJhbnNmZXIgcGFyaXR5IGVycm9yXG4iLAorCQkJCQljaC0+aWQpOworCQkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9VQ19UWFBBUklUWSwgY2gpOworCQl9CisJfSBlbHNlIGlmIChzZW5zZSAmIFNOUzBfQ01EX1JFSkVDVCkgeworCQljdGNtX3ByX3dhcm4oIiVzOiBDb21tYW5kIHJlamVjdFxuIiwgY2gtPmlkKTsKKwl9IGVsc2UgaWYgKHNlbnNlID09IDApIHsKKwkJY3RjbV9wcl9kZWJ1ZygiJXM6IFVuaXQgY2hlY2sgWkVST1xuIiwgY2gtPmlkKTsKKwkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9VQ19aRVJPLCBjaCk7CisJfSBlbHNlIHsKKwkJY3RjbV9wcl93YXJuKCIlczogVW5pdCBDaGVjayB3aXRoIHNlbnNlIGNvZGU6ICUwMnhcbiIsCisJCQkgICAgY2gtPmlkLCBzZW5zZSk7CisJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfVUNfVU5LTk9XTiwgY2gpOworCX0KK30KKworaW50IGN0Y21fY2hfYWxsb2NfYnVmZmVyKHN0cnVjdCBjaGFubmVsICpjaCkKK3sKKwlDVENNX0RCRl9URVhUKFRSQUNFLCA1LCBfX0ZVTkNUSU9OX18pOworCisJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbMV0pOworCWNoLT50cmFuc19za2IgPSBfX2Rldl9hbGxvY19za2IoY2gtPm1heF9idWZzaXplLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisJaWYgKGNoLT50cmFuc19za2IgPT0gTlVMTCkgeworCQljdGNtX3ByX3dhcm4oIiVzOiBDb3VsZG4ndCBhbGxvYyAlcyB0cmFuc19za2JcbiIsCisJCQljaC0+aWQsCisJCQkoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSA/ICJSWCIgOiAiVFgiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2gtPmNjd1sxXS5jb3VudCA9IGNoLT5tYXhfYnVmc2l6ZTsKKwlpZiAoc2V0X25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzFdLCBjaC0+dHJhbnNfc2tiLT5kYXRhKSkgeworCQlkZXZfa2ZyZWVfc2tiKGNoLT50cmFuc19za2IpOworCQljaC0+dHJhbnNfc2tiID0gTlVMTDsKKwkJY3RjbV9wcl93YXJuKCIlczogc2V0X25vcm1hbGl6ZWRfY2RhIGZvciAlcyAiCisJCQkidHJhbnNfc2tiIGZhaWxlZCwgZHJvcHBpbmcgcGFja2V0c1xuIiwKKwkJCWNoLT5pZCwKKwkJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljaC0+Y2N3WzFdLmNvdW50ID0gMDsKKwljaC0+dHJhbnNfc2tiX2RhdGEgPSBjaC0+dHJhbnNfc2tiLT5kYXRhOworCWNoLT5mbGFncyAmPSB+Q0hBTk5FTF9GTEFHU19CVUZTSVpFX0NIQU5HRUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgQVBJIGZvciB1cHBlciBuZXR3b3JrIGxheWVycworICovCisKKy8qKgorICogT3BlbiBhbiBpbnRlcmZhY2UuCisgKiBDYWxsZWQgZnJvbSBnZW5lcmljIG5ldHdvcmsgbGF5ZXIgd2hlbiBpZmNvbmZpZyB1cCBpcyBydW4uCisgKgorICogIGRldgkJUG9pbnRlciB0byBpbnRlcmZhY2Ugc3RydWN0LgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVJSTk8gb24gZmFpbHVyZS4gKE5ldmVyIGZhaWxzLikKKyAqLworaW50IGN0Y21fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlDVENNWV9EQkZfREVWX05BTUUoU0VUVVAsIGRldiwgIiIpOworCWlmICghSVNfTVBDKHByaXYpKQorCQlmc21fZXZlbnQocHJpdi0+ZnNtLAlERVZfRVZFTlRfU1RBUlQsIGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2xvc2UgYW4gaW50ZXJmYWNlLgorICogQ2FsbGVkIGZyb20gZ2VuZXJpYyBuZXR3b3JrIGxheWVyIHdoZW4gaWZjb25maWcgZG93biBpcyBydW4uCisgKgorICogIGRldgkJUG9pbnRlciB0byBpbnRlcmZhY2Ugc3RydWN0LgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVJSTk8gb24gZmFpbHVyZS4gKE5ldmVyIGZhaWxzLikKKyAqLworaW50IGN0Y21fY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJQ1RDTVlfREJGX0RFVl9OQU1FKFNFVFVQLCBkZXYsICIiKTsKKwlpZiAoIUlTX01QQyhwcml2KSkKKwkJZnNtX2V2ZW50KHByaXYtPmZzbSwgREVWX0VWRU5UX1NUT1AsIGRldik7CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBUcmFuc21pdCBhIHBhY2tldC4KKyAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGN0Y21fdHgoKS4KKyAqCisgKiAgY2gJCUNoYW5uZWwgdG8gYmUgdXNlZCBmb3Igc2VuZGluZy4KKyAqICBza2IJCVBvaW50ZXIgdG8gc3RydWN0IHNrX2J1ZmYgb2YgcGFja2V0IHRvIHNlbmQuCisgKiAgICAgICAgICAgIFRoZSBsaW5rbGV2ZWwgaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwCisgKiAgICAgICAgICAgIGJ5IGN0Y21fdHgoKS4KKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG9uIGZhaWx1cmUuIChOZXZlciBmYWlscy4pCisgKi8KK3N0YXRpYyBpbnQgY3RjbV90cmFuc21pdF9za2Ioc3RydWN0IGNoYW5uZWwgKmNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOworCXN0cnVjdCBsbF9oZWFkZXIgaGVhZGVyOworCWludCByYyA9IDA7CisJX191MTYgYmxvY2tfbGVuOworCWludCBjY3dfaWR4OworCXN0cnVjdCBza19idWZmICpuc2tiOworCXVuc2lnbmVkIGxvbmcgaGk7CisKKwkvKiB3ZSBuZWVkIHRvIGFjcXVpcmUgdGhlIGxvY2sgZm9yIHRlc3RpbmcgdGhlIHN0YXRlCisJICogb3RoZXJ3aXNlIHdlIGNhbiBoYXZlIGFuIElSUSBjaGFuZ2luZyB0aGUgc3RhdGUgdG8KKwkgKiBUWElETEUgYWZ0ZXIgdGhlIHRlc3QgYnV0IGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2suCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7CisJaWYgKGZzbV9nZXRzdGF0ZShjaC0+ZnNtKSAhPSBDVENfU1RBVEVfVFhJRExFKSB7CisJCWludCBsID0gc2tiLT5sZW4gKyBMTF9IRUFERVJfTEVOR1RIOworCisJCWlmIChjaC0+Y29sbGVjdF9sZW4gKyBsID4gY2gtPm1heF9idWZzaXplIC0gMikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0gZWxzZSB7CisJCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKKwkJCWhlYWRlci5sZW5ndGggPSBsOworCQkJaGVhZGVyLnR5cGUgPSBza2ItPnByb3RvY29sOworCQkJaGVhZGVyLnVudXNlZCA9IDA7CisJCQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTF9IRUFERVJfTEVOR1RIKSwgJmhlYWRlciwKKwkJCSAgICAgICBMTF9IRUFERVJfTEVOR1RIKTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZjaC0+Y29sbGVjdF9xdWV1ZSwgc2tiKTsKKwkJCWNoLT5jb2xsZWN0X2xlbiArPSBsOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7CisJCQkJZ290byBkb25lOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y29sbGVjdF9sb2NrLCBzYXZlZmxhZ3MpOworCS8qCisJICogUHJvdGVjdCBza2IgYWdhaW5zdCBiZWVpbmcgZnJlZSdkIGJ5IHVwcGVyCisJICogbGF5ZXJzLgorCSAqLworCWF0b21pY19pbmMoJnNrYi0+dXNlcnMpOworCWNoLT5wcm9mLnR4bGVuICs9IHNrYi0+bGVuOworCWhlYWRlci5sZW5ndGggPSBza2ItPmxlbiArIExMX0hFQURFUl9MRU5HVEg7CisJaGVhZGVyLnR5cGUgPSBza2ItPnByb3RvY29sOworCWhlYWRlci51bnVzZWQgPSAwOworCW1lbWNweShza2JfcHVzaChza2IsIExMX0hFQURFUl9MRU5HVEgpLCAmaGVhZGVyLCBMTF9IRUFERVJfTEVOR1RIKTsKKwlibG9ja19sZW4gPSBza2ItPmxlbiArIDI7CisJKigoX191MTYgKilza2JfcHVzaChza2IsIDIpKSA9IGJsb2NrX2xlbjsKKworCS8qCisJICogSURBTCBzdXBwb3J0IGluIENUQ00gaXMgYnJva2VuLCBzbyB3ZSBoYXZlIHRvCisJICogY2FyZSBhYm91dCBza2IncyBhYm92ZSAyRyBvdXJzZWx2ZXMuCisJICovCisJaGkgPSAoKHVuc2lnbmVkIGxvbmcpc2tiX3RhaWxfcG9pbnRlcihza2IpICsgTExfSEVBREVSX0xFTkdUSCkgPj4gMzE7CisJaWYgKGhpKSB7CisJCW5za2IgPSBhbGxvY19za2Ioc2tiLT5sZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKKwkJaWYgKCFuc2tiKSB7CisJCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJCXNrYl9wdWxsKHNrYiwgTExfSEVBREVSX0xFTkdUSCArIDIpOworCQkJY3RjbV9jbGVhcl9idXN5KGNoLT5uZXRkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQltZW1jcHkoc2tiX3B1dChuc2tiLCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJYXRvbWljX2luYygmbnNrYi0+dXNlcnMpOworCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7CisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJc2tiID0gbnNrYjsKKwkJfQorCX0KKworCWNoLT5jY3dbNF0uY291bnQgPSBibG9ja19sZW47CisJaWYgKHNldF9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1s0XSwgc2tiLT5kYXRhKSkgeworCQkvKgorCQkgKiBpZGFsIGFsbG9jYXRpb24gZmFpbGVkLCB0cnkgdmlhIGNvcHlpbmcgdG8KKwkJICogdHJhbnNfc2tiLiB0cmFuc19za2IgdXN1YWxseSBoYXMgYSBwcmUtYWxsb2NhdGVkCisJCSAqIGlkYWwuCisJCSAqLworCQlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpIHsKKwkJCS8qCisJCQkgKiBSZW1vdmUgb3VyIGhlYWRlci4gSXQgZ2V0cyBhZGRlZAorCQkJICogYWdhaW4gb24gcmV0cmFuc21pdC4KKwkJCSAqLworCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7CisJCQlza2JfcHVsbChza2IsIExMX0hFQURFUl9MRU5HVEggKyAyKTsKKwkJCWN0Y21fY2xlYXJfYnVzeShjaC0+bmV0ZGV2KTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGNoLT50cmFuc19za2IpOworCQljaC0+dHJhbnNfc2tiLT5sZW4gPSAwOworCQljaC0+Y2N3WzFdLmNvdW50ID0gc2tiLT5sZW47CisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLAorCQkJCXNrYl9wdXQoY2gtPnRyYW5zX3NrYiwgc2tiLT5sZW4pLCBza2ItPmxlbik7CisJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQljY3dfaWR4ID0gMDsKKwl9IGVsc2UgeworCQlza2JfcXVldWVfdGFpbCgmY2gtPmlvX3F1ZXVlLCBza2IpOworCQljY3dfaWR4ID0gMzsKKwl9CisJY2gtPnJldHJ5ID0gMDsKKwlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ1RDX1NUQVRFX1RYKTsKKwlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgQ1RDTV9USU1FXzVfU0VDLCBDVENfRVZFTlRfVElNRVIsIGNoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOworCWNoLT5wcm9mLnNlbmRfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCisJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoLT5jZGV2LCAmY2gtPmNjd1tjY3dfaWR4XSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwlpZiAoY2N3X2lkeCA9PSAzKQorCQljaC0+cHJvZi5kb2lvc19zaW5nbGUrKzsKKwlpZiAocmMgIT0gMCkgeworCQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7CisJCWN0Y21fY2N3X2NoZWNrX3JjKGNoLCByYywgInNpbmdsZSBza2IgVFgiKTsKKwkJaWYgKGNjd19pZHggPT0gMykKKwkJCXNrYl9kZXF1ZXVlX3RhaWwoJmNoLT5pb19xdWV1ZSk7CisJCS8qCisJCSAqIFJlbW92ZSBvdXIgaGVhZGVyLiBJdCBnZXRzIGFkZGVkCisJCSAqIGFnYWluIG9uIHJldHJhbnNtaXQuCisJCSAqLworCQlza2JfcHVsbChza2IsIExMX0hFQURFUl9MRU5HVEggKyAyKTsKKwl9IGVsc2UgaWYgKGNjd19pZHggPT0gMCkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2gtPm5ldGRldjsKKwkJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOworCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbiAtIExMX0hFQURFUl9MRU5HVEg7CisJfQorZG9uZToKKwljdGNtX2NsZWFyX2J1c3koY2gtPm5ldGRldik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBjdGNtcGNfc2VuZF9zd2VlcF9yZXEoc3RydWN0IGNoYW5uZWwgKnJjaCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICpncnA7CisJc3RydWN0IHRoX3N3ZWVwICpoZWFkZXI7CisJc3RydWN0IHNrX2J1ZmYgKnN3ZWVwX3NrYjsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2g7CisJaW50IHJjID0gMDsKKworCXByaXYgPSBkZXYtPnByaXY7CisJZ3JwID0gcHJpdi0+bXBjZzsKKwljaCA9IHByaXYtPmNoYW5uZWxbV1JJVEVdOworCisJaWYgKGRvX2RlYnVnKQorCQlNUENfREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsIGNoLT5pZCk7CisKKwkvKiBzd2VlcCBwcm9jZXNzaW5nIGlzIG5vdCBjb21wbGV0ZSB1bnRpbCByZXNwb25zZSBhbmQgcmVxdWVzdCAqLworCS8qIGhhcyBjb21wbGV0ZWQgZm9yIGFsbCByZWFkIGNoYW5uZWxzIGluIGdyb3VwCQkgICAgICAgKi8KKwlpZiAoZ3JwLT5pbl9zd2VlcCA9PSAwKSB7CisJCWdycC0+aW5fc3dlZXAgPSAxOworCQlncnAtPnN3ZWVwX3JzcF9wZW5kX251bSA9IGdycC0+YWN0aXZlX2NoYW5uZWxzW1JFQURdOworCQlncnAtPnN3ZWVwX3JlcV9wZW5kX251bSA9IGdycC0+YWN0aXZlX2NoYW5uZWxzW1JFQURdOworCX0KKworCXN3ZWVwX3NrYiA9IF9fZGV2X2FsbG9jX3NrYihNUENfQlVGU0laRV9ERUZBVUxULCBHRlBfQVRPTUlDfEdGUF9ETUEpOworCisJaWYgKHN3ZWVwX3NrYiA9PSBOVUxMKQl7CisJCXByaW50ayhLRVJOX0lORk8gIkNvdWxkbid0IGFsbG9jIHN3ZWVwX3NrYlxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJCQkJZ290byBkb25lOworCX0KKworCWhlYWRlciA9IGttYWxsb2MoVEhfU1dFRVBfTEVOR1RILCBnZnBfdHlwZSgpKTsKKworCWlmICghaGVhZGVyKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHN3ZWVwX3NrYik7CisJCXJjID0gLUVOT01FTTsKKwkJCQkJZ290byBkb25lOworCX0KKworCWhlYWRlci0+dGgudGhfc2VnCT0gMHgwMCA7CisJaGVhZGVyLT50aC50aF9jaF9mbGFnCT0gVEhfU1dFRVBfUkVROyAgLyogMHgwZiAqLworCWhlYWRlci0+dGgudGhfYmxrX2ZsYWcJPSAweDAwOworCWhlYWRlci0+dGgudGhfaXNfeGlkCT0gMHgwMDsKKwloZWFkZXItPnRoLnRoX3NlcV9udW0JPSAweDAwOworCWhlYWRlci0+c3cudGhfbGFzdF9zZXEJPSBjaC0+dGhfc2VxX251bTsKKworCW1lbWNweShza2JfcHV0KHN3ZWVwX3NrYiwgVEhfU1dFRVBfTEVOR1RIKSwgaGVhZGVyLCBUSF9TV0VFUF9MRU5HVEgpOworCisJa2ZyZWUoaGVhZGVyKTsKKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXNrYl9xdWV1ZV90YWlsKCZjaC0+c3dlZXBfcXVldWUsIHN3ZWVwX3NrYik7CisKKwlmc21fYWRkdGltZXIoJmNoLT5zd2VlcF90aW1lciwgMTAwLCBDVENfRVZFTlRfUlNXRUVQX1RJTUVSLCBjaCk7CisKKwlyZXR1cm47CisKK2RvbmU6CisJaWYgKHJjICE9IDApIHsKKwkJZ3JwLT5pbl9zd2VlcCA9IDA7CisJCWN0Y21fY2xlYXJfYnVzeShkZXYpOworCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBNUEMgbW9kZSB2ZXJzaW9uIG9mIHRyYW5zbWl0X3NrYgorICovCitzdGF0aWMgaW50IGN0Y21wY190cmFuc21pdF9za2Ioc3RydWN0IGNoYW5uZWwgKmNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwZHUgKnBfaGVhZGVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAqZ3JwID0gcHJpdi0+bXBjZzsKKwlzdHJ1Y3QgdGhfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IHNrX2J1ZmYgKm5za2I7CisJaW50IHJjID0gMDsKKwlpbnQgY2N3X2lkeDsKKwl1bnNpZ25lZCBsb25nIGhpOworCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwlfX3UxNiBibG9ja19sZW47CisKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoCisJCQkiY3RjbSBlbnRlcjogJXMoKTogJXMgY3A9JWkgY2g9MHglcCBpZD0lcyBzdGF0ZT0lc1xuIiwKKwkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLAorCQkJY2gtPmlkLCBmc21fZ2V0c3RhdGVfc3RyKGNoLT5mc20pKTsKKworCWlmICgoZnNtX2dldHN0YXRlKGNoLT5mc20pICE9IENUQ19TVEFURV9UWElETEUpIHx8IGdycC0+aW5fc3dlZXApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7CisJCWF0b21pY19pbmMoJnNrYi0+dXNlcnMpOworCQlwX2hlYWRlciA9IGttYWxsb2MoUERVX0hFQURFUl9MRU5HVEgsIGdmcF90eXBlKCkpOworCisJCWlmICghcF9oZWFkZXIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImN0Y206IE9VVCBPRiBNRU1PUlkgSU4gJXMoKToiCisJCQkgICAgICAgIiBEYXRhIExvc3QgXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+Y29sbGVjdF9sb2NrLCBzYXZlZmxhZ3MpOworCQkJZnNtX2V2ZW50KHByaXYtPm1wY2ctPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCQkJCQlnb3RvIGRvbmU7CisJCX0KKworCQlwX2hlYWRlci0+cGR1X29mZnNldCA9IHNrYi0+bGVuOworCQlwX2hlYWRlci0+cGR1X3Byb3RvID0gMHgwMTsKKwkJcF9oZWFkZXItPnBkdV9mbGFnID0gMHgwMDsKKwkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfU05BUCkpIHsKKwkJCXBfaGVhZGVyLT5wZHVfZmxhZyB8PSBQRFVfRklSU1QgfCBQRFVfQ05UTDsKKwkJfSBlbHNlIHsKKwkJCXBfaGVhZGVyLT5wZHVfZmxhZyB8PSBQRFVfRklSU1Q7CisJCX0KKwkJcF9oZWFkZXItPnBkdV9zZXEgPSAwOworCQltZW1jcHkoc2tiX3B1c2goc2tiLCBQRFVfSEVBREVSX0xFTkdUSCksIHBfaGVhZGVyLAorCQkgICAgICAgUERVX0hFQURFUl9MRU5HVEgpOworCisJCWlmIChkb19kZWJ1Z19kYXRhKSB7CisJCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIFB1dHRpbmcgb24gY29sbGVjdF9xIgorCQkJICAgICAgICIgLSBza2IgbGVuOiAlMDR4IFxuIiwgX19GVU5DVElPTl9fLCBza2ItPmxlbik7CisJCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIHBkdSBoZWFkZXIgYW5kIGRhdGEiCisJCQkgICAgICAgIiBmb3IgdXAgdG8gMzIgYnl0ZXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQljdGNtcGNfZHVtcDMyKChjaGFyICopc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCX0KKworCQlza2JfcXVldWVfdGFpbCgmY2gtPmNvbGxlY3RfcXVldWUsIHNrYik7CisJCWNoLT5jb2xsZWN0X2xlbiArPSBza2ItPmxlbjsKKwkJa2ZyZWUocF9oZWFkZXIpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7CisJCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBQcm90ZWN0IHNrYiBhZ2FpbnN0IGJlZWluZyBmcmVlJ2QgYnkgdXBwZXIKKwkgKiBsYXllcnMuCisJICovCisJYXRvbWljX2luYygmc2tiLT51c2Vycyk7CisKKwlibG9ja19sZW4gPSBza2ItPmxlbiArIFRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSDsKKwkvKgorCSAqIElEQUwgc3VwcG9ydCBpbiBDVENNIGlzIGJyb2tlbiwgc28gd2UgaGF2ZSB0bworCSAqIGNhcmUgYWJvdXQgc2tiJ3MgYWJvdmUgMkcgb3Vyc2VsdmVzLgorCSAqLworCWhpID0gKCh1bnNpZ25lZCBsb25nKXNrYi0+dGFpbCArIFRIX0hFQURFUl9MRU5HVEgpID4+IDMxOworCWlmIChoaSkgeworCQluc2tiID0gX19kZXZfYWxsb2Nfc2tiKHNrYi0+bGVuLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisJCWlmICghbnNrYikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbTogJXMoKSBPVVQgT0YgTUVNT1JZIgorCQkJCSItICBEYXRhIExvc3QgXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJZnNtX2V2ZW50KHByaXYtPm1wY2ctPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCQkJCWdvdG8gZG9uZTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShza2JfcHV0KG5za2IsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCQlhdG9taWNfaW5jKCZuc2tiLT51c2Vycyk7CisJCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQlza2IgPSBuc2tiOworCQl9CisJfQorCisJcF9oZWFkZXIgPSBrbWFsbG9jKFBEVV9IRUFERVJfTEVOR1RILCBnZnBfdHlwZSgpKTsKKworCWlmICghcF9oZWFkZXIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbTogJXMoKSBPVVQgT0YgTUVNT1JZIgorCQkgICAgICAgIjogRGF0YSBMb3N0IFxuIiwgX19GVU5DVElPTl9fKTsKKworCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJZnNtX2V2ZW50KHByaXYtPm1wY2ctPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlwX2hlYWRlci0+cGR1X29mZnNldCA9IHNrYi0+bGVuOworCXBfaGVhZGVyLT5wZHVfcHJvdG8gPSAweDAxOworCXBfaGVhZGVyLT5wZHVfZmxhZyA9IDB4MDA7CisJcF9oZWFkZXItPnBkdV9zZXEgPSAwOworCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX1NOQVApKSB7CisJCXBfaGVhZGVyLT5wZHVfZmxhZyB8PSBQRFVfRklSU1QgfCBQRFVfQ05UTDsKKwl9IGVsc2UgeworCQlwX2hlYWRlci0+cGR1X2ZsYWcgfD0gUERVX0ZJUlNUOworCX0KKwltZW1jcHkoc2tiX3B1c2goc2tiLCBQRFVfSEVBREVSX0xFTkdUSCksIHBfaGVhZGVyLCBQRFVfSEVBREVSX0xFTkdUSCk7CisKKwlrZnJlZShwX2hlYWRlcik7CisKKwlpZiAoY2gtPmNvbGxlY3RfbGVuID4gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKKwkJc2tiX3F1ZXVlX3RhaWwoJmNoLT5jb2xsZWN0X3F1ZXVlLCBza2IpOworCQljaC0+Y29sbGVjdF9sZW4gKz0gc2tiLT5sZW47CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjaC0+Y29sbGVjdF9xdWV1ZSk7CisJCWNoLT5jb2xsZWN0X2xlbiAtPSBza2ItPmxlbjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKKwl9CisKKwlwX2hlYWRlciA9IChzdHJ1Y3QgcGR1ICopc2tiLT5kYXRhOworCXBfaGVhZGVyLT5wZHVfZmxhZyB8PSBQRFVfTEFTVDsKKworCWNoLT5wcm9mLnR4bGVuICs9IHNrYi0+bGVuIC0gUERVX0hFQURFUl9MRU5HVEg7CisKKwloZWFkZXIgPSBrbWFsbG9jKFRIX0hFQURFUl9MRU5HVEgsIGdmcF90eXBlKCkpOworCisJaWYgKCFoZWFkZXIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbTogJXMoKSBPVVQgT0YgTUVNT1JZOiBEYXRhIExvc3QgXG4iLAorCQkJCV9fRlVOQ1RJT05fXyk7CisJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlmc21fZXZlbnQocHJpdi0+bXBjZy0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJCQkJZ290byBkb25lOworCX0KKworCWhlYWRlci0+dGhfc2VnID0gMHgwMDsKKwloZWFkZXItPnRoX2NoX2ZsYWcgPSBUSF9IQVNfUERVOyAgLyogTm9ybWFsIGRhdGEgKi8KKwloZWFkZXItPnRoX2Jsa19mbGFnID0gMHgwMDsKKwloZWFkZXItPnRoX2lzX3hpZCA9IDB4MDA7ICAgICAgICAgIC8qIEp1c3QgZGF0YSBoZXJlICovCisJY2gtPnRoX3NlcV9udW0rKzsKKwloZWFkZXItPnRoX3NlcV9udW0gPSBjaC0+dGhfc2VxX251bTsKKworCWlmIChkb19kZWJ1Z19kYXRhKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIFRvVlRBTV90aF9zZXE9ICUwOHhcbiIgLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBjaC0+dGhfc2VxX251bSk7CisKKwkvKiBwdXQgdGhlIFRIIG9uIHRoZSBwYWNrZXQgKi8KKwltZW1jcHkoc2tiX3B1c2goc2tiLCBUSF9IRUFERVJfTEVOR1RIKSwgaGVhZGVyLCBUSF9IRUFERVJfTEVOR1RIKTsKKworCWtmcmVlKGhlYWRlcik7CisKKwlpZiAoZG9fZGVidWdfZGF0YSkgeworCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpOiBza2IgbGVuOiAlMDR4IFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHNrYi0+bGVuKTsKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbTogJXMoKTogcGR1IGhlYWRlciBhbmQgZGF0YSBmb3IgdXAgdG8gMzIgIgorCQkJCSJieXRlcyBzZW50IHRvIHZ0YW1cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWN0Y21wY19kdW1wMzIoKGNoYXIgKilza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwl9CisKKwljaC0+Y2N3WzRdLmNvdW50ID0gc2tiLT5sZW47CisJaWYgKHNldF9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1s0XSwgc2tiLT5kYXRhKSkgeworCQkvKgorCQkgKiBpZGFsIGFsbG9jYXRpb24gZmFpbGVkLCB0cnkgdmlhIGNvcHlpbmcgdG8KKwkJICogdHJhbnNfc2tiLiB0cmFuc19za2IgdXN1YWxseSBoYXMgYSBwcmUtYWxsb2NhdGVkCisJCSAqIGlkYWwuCisJCSAqLworCQlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpIHsKKwkJCS8qCisJCQkgKiBSZW1vdmUgb3VyIGhlYWRlci4gSXQgZ2V0cyBhZGRlZAorCQkJICogYWdhaW4gb24gcmV0cmFuc21pdC4KKwkJCSAqLworCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbTogJXMoKU9VVCBPRiBNRU1PUlk6IgorCQkJCQkiIERhdGEgTG9zdCBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlmc21fZXZlbnQocHJpdi0+bXBjZy0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJCQkJZ290byBkb25lOworCQl9CisKKwkJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihjaC0+dHJhbnNfc2tiKTsKKwkJY2gtPnRyYW5zX3NrYi0+bGVuID0gMDsKKwkJY2gtPmNjd1sxXS5jb3VudCA9IHNrYi0+bGVuOworCQltZW1jcHkoc2tiX3B1dChjaC0+dHJhbnNfc2tiLCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJY2N3X2lkeCA9IDA7CisJCWlmIChkb19kZWJ1Z19kYXRhKSB7CisJCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIFRSQU5TIHNrYiBsZW46ICVkIFxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoLT50cmFuc19za2ItPmxlbik7CisJCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcyB1cCB0byAzMiBieXRlcyBvZiBkYXRhIgorCQkJCSIgc2VudCB0byB2dGFtXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJY3RjbXBjX2R1bXAzMigoY2hhciAqKWNoLT50cmFuc19za2ItPmRhdGEsCisJCQkJCWNoLT50cmFuc19za2ItPmxlbik7CisJCX0KKwl9IGVsc2UgeworCQlza2JfcXVldWVfdGFpbCgmY2gtPmlvX3F1ZXVlLCBza2IpOworCQljY3dfaWR4ID0gMzsKKwl9CisJY2gtPnJldHJ5ID0gMDsKKwlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ1RDX1NUQVRFX1RYKTsKKwlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgQ1RDTV9USU1FXzVfU0VDLCBDVENfRVZFTlRfVElNRVIsIGNoKTsKKworCWlmIChkb19kZWJ1Z19jY3cpCisJCWN0Y21wY19kdW1waXQoKGNoYXIgKikmY2gtPmNjd1tjY3dfaWR4XSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBjY3cxKSAqIDMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwljaC0+cHJvZi5zZW5kX3N0YW1wID0gY3VycmVudF9rZXJuZWxfdGltZSgpOyAvKiB4dGltZSAqLworCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbY2N3X2lkeF0sCisJCQkJCSh1bnNpZ25lZCBsb25nKWNoLCAweGZmLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisJaWYgKGNjd19pZHggPT0gMykKKwkJY2gtPnByb2YuZG9pb3Nfc2luZ2xlKys7CisJaWYgKHJjICE9IDApIHsKKwkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOworCQljdGNtX2Njd19jaGVja19yYyhjaCwgcmMsICJzaW5nbGUgc2tiIFRYIik7CisJCWlmIChjY3dfaWR4ID09IDMpCisJCQlza2JfZGVxdWV1ZV90YWlsKCZjaC0+aW9fcXVldWUpOworCX0gZWxzZSBpZiAoY2N3X2lkeCA9PSAwKSB7CisJCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW4gLSBUSF9IRUFERVJfTEVOR1RIOworCX0KKwlpZiAoY2gtPnRoX3NlcV9udW0gPiAweGYwMDAwMDAwKQkvKiBDaG9zZSA0QmlsbGlvbiBhdCByYW5kb20uICovCisJCWN0Y21wY19zZW5kX3N3ZWVwX3JlcShjaCk7CisKK2RvbmU6CisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtIGV4aXQ6ICVzICAlcygpXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogU3RhcnQgdHJhbnNtaXNzaW9uIG9mIGEgcGFja2V0LgorICogQ2FsbGVkIGZyb20gZ2VuZXJpYyBuZXR3b3JrIGRldmljZSBsYXllci4KKyAqCisgKiAgc2tiCQlQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIHRoZSBwYWNrZXQuCisgKiAgZGV2CQlQb2ludGVyIHRvIGludGVyZmFjZSBzdHJ1Y3QuCisgKgorICogcmV0dXJucyAwIGlmIHBhY2tldCBjb25zdW1lZCwgITAgaWYgcGFja2V0IHJlamVjdGVkLgorICogICAgICAgICBOb3RlOiBJZiB3ZSByZXR1cm4gITAsIHRoZW4gdGhlIHBhY2tldCBpcyBmcmVlJ2QgYnkKKyAqICAgICAgICAgICAgICAgdGhlIGdlbmVyaWMgbmV0d29yayBsYXllci4KKyAqLworLyogZmlyc3QgbWVyZ2UgdmVyc2lvbiAtIGxlYXZpbmcgYm90aCBmdW5jdGlvbnMgc2VwYXJhdGVkICovCitzdGF0aWMgaW50IGN0Y21fdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXY7CisKKwlDVENNX0RCRl9URVhUKFRSQUNFLCA1LCBfX0ZVTkNUSU9OX18pOworCXByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJY3RjbV9wcl93YXJuKCIlczogTlVMTCBza19idWZmIHBhc3NlZFxuIiwgZGV2LT5uYW1lKTsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgKExMX0hFQURFUl9MRU5HVEggKyAyKSkgeworCQljdGNtX3ByX3dhcm4oIiVzOiBHb3Qgc2tfYnVmZiB3aXRoIGhlYWQgcm9vbSA8ICVsZCBieXRlc1xuIiwKKwkJCSAgICBkZXYtPm5hbWUsIExMX0hFQURFUl9MRU5HVEggKyAyKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgY2hhbm5lbHMgYXJlIG5vdCBydW5uaW5nLCB0cnkgdG8gcmVzdGFydCB0aGVtCisJICogYW5kIHRocm93IGF3YXkgcGFja2V0LgorCSAqLworCWlmIChmc21fZ2V0c3RhdGUocHJpdi0+ZnNtKSAhPSBERVZfU1RBVEVfUlVOTklORykgeworCQlmc21fZXZlbnQocHJpdi0+ZnNtLCBERVZfRVZFTlRfU1RBUlQsIGRldik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJcHJpdi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGN0Y21fdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWlmIChjdGNtX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQorCQlyYyA9IDE7CisJcmV0dXJuIHJjOworfQorCisvKiB1bm1lcmdlZCBNUEMgdmFyaWFudCBvZiBjdGNtX3R4ICovCitzdGF0aWMgaW50IGN0Y21wY190eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBsZW4gPSAwOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycCAgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBOVUxMOworCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IHNrYjolMGx4XG4iLAorCQkJX19GVU5DVElPTl9fLCAodW5zaWduZWQgbG9uZylza2IpOworCisJQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCBDVENfREJGX0RFQlVHLAorCQkJImN0Y21wYyBlbnRlcjogJXMoKTogc2tiOiUwbHhcbiIsCisJCQlfX0ZVTkNUSU9OX18sICh1bnNpZ25lZCBsb25nKXNrYik7CisKKwlwcml2ID0gZGV2LT5wcml2OworCWdycCAgPSBwcml2LT5tcGNnOworCS8qCisJICogU29tZSBzYW5pdHkgY2hlY2tzIC4uLgorCSAqLworCWlmIChza2IgPT0gTlVMTCkgeworCQljdGNtX3ByX3dhcm4oImN0Y21wYzogJXM6IE5VTEwgc2tfYnVmZiBwYXNzZWRcbiIsIGRldi0+bmFtZSk7CisJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCQkJZ290byBkb25lOworCX0KKwlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCAoVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIKSkgeworCQlDVENNX0RCRl9URVhUXyhNUENfVFJBQ0UsIENUQ19EQkZfV0FSTiwKKwkJCSIlczogR290IHNrX2J1ZmYgd2l0aCBoZWFkIHJvb20gPCAlbGQgYnl0ZXNcbiIsCisJCQlkZXYtPm5hbWUsIFRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSCk7CisKKwkJaWYgKGRvX2RlYnVnX2RhdGEpCisJCQljdGNtcGNfZHVtcDMyKChjaGFyICopc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwkJbGVuID0gIHNrYi0+bGVuICsgVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIOworCQluZXdza2IgPSBfX2Rldl9hbGxvY19za2IobGVuLCBnZnBfdHlwZSgpIHwgR0ZQX0RNQSk7CisKKwkJaWYgKCFuZXdza2IpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImN0Y21wYzogJXMoKSBPVVQgT0YgTUVNT1JZLSIKKwkJCSAgICAgICAiRGF0YSBMb3N0XG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCXByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJCQkJZ290byBkb25lOworCQl9CisJCW5ld3NrYi0+cHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCQlza2JfcmVzZXJ2ZShuZXdza2IsIFRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSCk7CisJCW1lbWNweShza2JfcHV0KG5ld3NrYiwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gbmV3c2tiOworCX0KKworCS8qCisJICogSWYgY2hhbm5lbHMgYXJlIG5vdCBydW5uaW5nLAorCSAqIG5vdGlmeSBhbnlib2R5IGFib3V0IGEgbGluayBmYWlsdXJlIGFuZCB0aHJvdworCSAqIGF3YXkgcGFja2V0LgorCSAqLworCWlmICgoZnNtX2dldHN0YXRlKHByaXYtPmZzbSkgIT0gREVWX1NUQVRFX1JVTk5JTkcpIHx8CisJICAgKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkgPCAgTVBDR19TVEFURV9YSUQySU5JVFcpKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXByaW50ayhLRVJOX0lORk8gImN0Y21wYzogJXMoKSBEQVRBIFJDVkQgLSBNUEMgR1JPVVAgIgorCQkgICAgICAgIk5PVCBBQ1RJVkUgLSBEUk9QUEVEXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJcHJpdi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQkJZ290byBkb25lOworCX0KKworCWlmIChjdGNtX3Rlc3RfYW5kX3NldF9idXN5KGRldikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6REVWSUNFIEVSUiAtIFVOUkVDT1ZFUkFCTEUgREFUQSBMT1NTXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJcHJpdi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoY3RjbXBjX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImN0Y21wYzogJXMoKSBERVZJQ0UgRVJST1IiCisJCSAgICAgICAiOiBEYXRhIExvc3QgXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjbXBjOiAlcygpIERFVklDRSBFUlJPUiIKKwkJICAgICAgICIgLSBVTlJFQ09WRVJBQkxFIERBVEEgTE9TU1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7CisJCXByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWN0Y21fY2xlYXJfYnVzeShkZXYpOworCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJCQkJZ290byBkb25lOworCX0KKwljdGNtX2NsZWFyX2J1c3koZGV2KTsKK2RvbmU6CisJaWYgKGRvX2RlYnVnKQorCQlNUENfREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsICJleGl0Iik7CisKKwlyZXR1cm4gMDsJLyogaGFuZGxlIGZyZWVpbmcgb2Ygc2tiIGhlcmUgKi8KK30KKworCisvKioKKyAqIFNldHMgTVRVIG9mIGFuIGludGVyZmFjZS4KKyAqCisgKiAgZGV2CQlQb2ludGVyIHRvIGludGVyZmFjZSBzdHJ1Y3QuCisgKiAgbmV3X210dQlUaGUgbmV3IE1UVSB0byB1c2UgZm9yIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIE1UVSBpcyBvdXQgb2YgdmFsaWQgcmFuZ2UuCisgKiAgICAgICAgICh2YWxpZCByYW5nZSBpcyA1NzYgLi4gNjU1MjcpLiBJZiBWTSBpcyBvbiB0aGUKKyAqICAgICAgICAgcmVtb3RlIHNpZGUsIG1heGltdW0gTVRVIGlzIDMyNzYwLCBob3dldmVyIHRoaXMgaXMKKyAqICAgICAgICAgbm90IGNoZWNrZWQgaGVyZS4KKyAqLworc3RhdGljIGludCBjdGNtX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKKwlpbnQgbWF4X2J1ZnNpemU7CisKKwlDVENNX0RCRl9URVhUKFNFVFVQLCBDVENfREJGX0lORk8sIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAobmV3X210dSA8IDU3NiB8fCBuZXdfbXR1ID4gNjU1MjcpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdiA9IGRldi0+cHJpdjsKKwltYXhfYnVmc2l6ZSA9IHByaXYtPmNoYW5uZWxbUkVBRF0tPm1heF9idWZzaXplOworCisJaWYgKElTX01QQyhwcml2KSkgeworCQlpZiAobmV3X210dSA+IG1heF9idWZzaXplIC0gVEhfSEVBREVSX0xFTkdUSCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IFRIX0hFQURFUl9MRU5HVEggKyBQRFVfSEVBREVSX0xFTkdUSDsKKwl9IGVsc2UgeworCQlpZiAobmV3X210dSA+IG1heF9idWZzaXplIC0gTExfSEVBREVSX0xFTkdUSCAtIDIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBMTF9IRUFERVJfTEVOR1RIICsgMjsKKwl9CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCisvKioKKyAqIFJldHVybnMgaW50ZXJmYWNlIHN0YXRpc3RpY3Mgb2YgYSBkZXZpY2UuCisgKgorICogIGRldgkJUG9pbnRlciB0byBpbnRlcmZhY2Ugc3RydWN0LgorICoKKyAqIHJldHVybnMgUG9pbnRlciB0byBzdGF0cyBzdHJ1Y3Qgb2YgdGhpcyBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY3RjbV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAmKChzdHJ1Y3QgY3RjbV9wcml2ICopZGV2LT5wcml2KS0+c3RhdHM7Cit9CisKKworc3RhdGljIHZvaWQgY3RjbV9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfSU5GTywgX19GVU5DVElPTl9fKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Cit9CisKK3N0YXRpYyBpbnQgY3RjbV9uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlDVENNX0RCRl9URVhUKFNFVFVQLCBDVENfREJGX0lORk8sIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOworfQorCitzdGF0aWMgdm9pZCBjdGNtX2ZyZWVfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICpncnA7CisKKwlDVENNX0RCRl9URVhUKFNFVFVQLCBDVENfREJGX0lORk8sIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCXByaXYgPSBkZXYtPnByaXY7CisJaWYgKHByaXYpIHsKKwkJZ3JwID0gcHJpdi0+bXBjZzsKKwkJaWYgKGdycCkgeworCQkJaWYgKGdycC0+ZnNtKQorCQkJCWtmcmVlX2ZzbShncnAtPmZzbSk7CisJCQlpZiAoZ3JwLT54aWRfc2tiKQorCQkJCWRldl9rZnJlZV9za2IoZ3JwLT54aWRfc2tiKTsKKwkJCWlmIChncnAtPnJjdmRfeGlkX3NrYikKKwkJCQlkZXZfa2ZyZWVfc2tiKGdycC0+cmN2ZF94aWRfc2tiKTsKKwkJCXRhc2tsZXRfa2lsbCgmZ3JwLT5tcGNfdGFza2xldDIpOworCQkJa2ZyZWUoZ3JwKTsKKwkJCXByaXYtPm1wY2cgPSBOVUxMOworCQl9CisJCWlmIChwcml2LT5mc20pIHsKKwkJCWtmcmVlX2ZzbShwcml2LT5mc20pOworCQkJcHJpdi0+ZnNtID0gTlVMTDsKKwkJfQorCQlrZnJlZShwcml2LT54aWQpOworCQlwcml2LT54aWQgPSBOVUxMOworCS8qCisJICogTm90ZToga2ZyZWUocHJpdik7IGlzIGRvbmUgaW4gIm9wcG9zaXRlIiBmdW5jdGlvbiBvZgorCSAqIGFsbG9jYXRvciBmdW5jdGlvbiBwcm9iZV9kZXZpY2Ugd2hpY2ggaXMgcmVtb3ZlX2RldmljZS4KKwkgKi8KKwl9CisjaWZkZWYgTU9EVUxFCisJZnJlZV9uZXRkZXYoZGV2KTsKKyNlbmRpZgorfQorCitzdHJ1Y3QgbXBjX2dyb3VwICpjdGNtcGNfaW5pdF9tcGNfZ3JvdXAoc3RydWN0IGN0Y21fcHJpdiAqcHJpdik7CisKK3ZvaWQgc3RhdGljIGN0Y21fZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT5vcGVuID0gY3RjbV9vcGVuOworCWRldi0+c3RvcCA9IGN0Y21fY2xvc2U7CisJZGV2LT5nZXRfc3RhdHMgPSBjdGNtX3N0YXRzOworCWRldi0+Y2hhbmdlX210dSA9IGN0Y21fY2hhbmdlX210dTsKKwlkZXYtPnR5cGUgPSBBUlBIUkRfU0xJUDsKKwlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKKwlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworfQorCisvKgorICogSW5pdGlhbGl6ZSBldmVyeXRoaW5nIG9mIHRoZSBuZXQgZGV2aWNlIGV4Y2VwdCB0aGUgbmFtZSBhbmQgdGhlCisgKiBjaGFubmVsIHN0cnVjdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqY3RjbV9pbml0X25ldGRldmljZShzdHJ1Y3QgY3RjbV9wcml2ICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG1wY19ncm91cCAqZ3JwOworCWlmICghcHJpdikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoSVNfTVBDKHByaXYpKQorCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgTVBDX0RFVklDRV9HRU5FLCBjdGNtX2Rldl9zZXR1cCk7CisJZWxzZQorCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgQ1RDX0RFVklDRV9HRU5FLCBjdGNtX2Rldl9zZXR1cCk7CisKKwlpZiAoIWRldikgeworCQljdGNtX3ByX2VycigiJXM6IE91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBOVUxMOworCX0KKwlkZXYtPnByaXYgPSBwcml2OworCXByaXYtPmZzbSA9IGluaXRfZnNtKCJjdGNtZGV2IiwgZGV2X3N0YXRlX25hbWVzLCBkZXZfZXZlbnRfbmFtZXMsCisJCQkJQ1RDTV9OUl9ERVZfU1RBVEVTLCBDVENNX05SX0RFVl9FVkVOVFMsCisJCQkJZGV2X2ZzbSwgZGV2X2ZzbV9sZW4sIEdGUF9LRVJORUwpOworCWlmIChwcml2LT5mc20gPT0gTlVMTCkgeworCQlDVENNWV9EQkZfREVWKFNFVFVQLCBkZXYsICJpbml0X2ZzbSBlcnJvciIpOworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZnNtX25ld3N0YXRlKHByaXYtPmZzbSwgREVWX1NUQVRFX1NUT1BQRUQpOworCWZzbV9zZXR0aW1lcihwcml2LT5mc20sICZwcml2LT5yZXN0YXJ0X3RpbWVyKTsKKworCWlmIChJU19NUEMocHJpdikpIHsKKwkJLyogIE1QQyBHcm91cCBJbml0aWFsaXphdGlvbnMgICovCisJCWdycCA9IGN0Y21wY19pbml0X21wY19ncm91cChwcml2KTsKKwkJaWYgKGdycCA9PSBOVUxMKSB7CisJCQlNUENfREJGX0RFVihTRVRVUCwgZGV2LCAiaW5pdF9tcGNfZ3JvdXAgZXJyb3IiKTsKKwkJCWtmcmVlKGRldik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQl0YXNrbGV0X2luaXQoJmdycC0+bXBjX3Rhc2tsZXQyLAorCQkJCW1wY19ncm91cF9yZWFkeSwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKwkJZGV2LT5tdHUgPSBNUENfQlVGU0laRV9ERUZBVUxUIC0KKwkJCQlUSF9IRUFERVJfTEVOR1RIIC0gUERVX0hFQURFUl9MRU5HVEg7CisKKwkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjdGNtcGNfdHg7CisJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIOworCQlwcml2LT5idWZmZXJfc2l6ZSA9IE1QQ19CVUZTSVpFX0RFRkFVTFQ7CisJfSBlbHNlIHsKKwkJZGV2LT5tdHUgPSBDVENNX0JVRlNJWkVfREVGQVVMVCAtIExMX0hFQURFUl9MRU5HVEggLSAyOworCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGN0Y21fdHg7CisJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gTExfSEVBREVSX0xFTkdUSCArIDI7CisJfQorCisJQ1RDTVlfREJGX0RFVihTRVRVUCwgZGV2LCAiZmluaXNoZWQiKTsKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIE1haW4gSVJRIGhhbmRsZXIuCisgKgorICogIGNkZXYJVGhlIGNjd19kZXZpY2UgdGhlIGludGVycnVwdCBpcyBmb3IuCisgKiAgaW50cGFybQlpbnRlcnJ1cHRpb24gcGFyYW1ldGVyLgorICogIGlyYgkJaW50ZXJydXB0aW9uIHJlc3BvbnNlIGJsb2NrLgorICovCitzdGF0aWMgdm9pZCBjdGNtX2lycV9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkJCXVuc2lnbmVkIGxvbmcgaW50cGFybSwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCBjaGFubmVsCQkqY2g7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2CSpwcml2OworCXN0cnVjdCBjY3dncm91cF9kZXZpY2UJKmNnZGV2OworCisJQ1RDTV9EQkZfVEVYVChUUkFDRSwgQ1RDX0RCRl9ERUJVRywgX19GVU5DVElPTl9fKTsKKwlpZiAoY3RjbV9jaGVja19pcmJfZXJyb3IoY2RldiwgaXJiKSkKKwkJcmV0dXJuOworCisJY2dkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldik7CisKKwkvKiBDaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cy4gKi8KKwlpZiAoY2dkZXYgPT0gTlVMTCkgeworCQljdGNtX3ByX3dhcm4oImN0Y206IEdvdCB1bnNvbGljaXRlZCBpcnE6ICVzIGMtJTAyeCBkLSUwMnhcbiIsCisJCQkgICAgY2Rldi0+ZGV2LmJ1c19pZCwgaXJiLT5zY3N3LmNzdGF0LAorCQkJICAgIGlyYi0+c2Nzdy5kc3RhdCk7CisJCXJldHVybjsKKwl9CisKKwlwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKKworCS8qIFRyeSB0byBleHRyYWN0IGNoYW5uZWwgZnJvbSBkcml2ZXIgZGF0YS4gKi8KKwlpZiAocHJpdi0+Y2hhbm5lbFtSRUFEXS0+Y2RldiA9PSBjZGV2KQorCQljaCA9IHByaXYtPmNoYW5uZWxbUkVBRF07CisJZWxzZSBpZiAocHJpdi0+Y2hhbm5lbFtXUklURV0tPmNkZXYgPT0gY2RldikKKwkJY2ggPSBwcml2LT5jaGFubmVsW1dSSVRFXTsKKwllbHNlIHsKKwkJY3RjbV9wcl9lcnIoImN0Y206IENhbid0IGRldGVybWluZSBjaGFubmVsIGZvciBpbnRlcnJ1cHQsICIKKwkJCSAgICJkZXZpY2UgJXNcbiIsIGNkZXYtPmRldi5idXNfaWQpOworCQlyZXR1cm47CisJfQorCisJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopKGNoLT5uZXRkZXYpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQljdGNtX3ByX2NyaXQoImN0Y206ICVzIGRldj1OVUxMIGJ1c19pZD0lcywgY2g9MHglcFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGNkZXYtPmRldi5idXNfaWQsIGNoKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiJXM6IGludGVycnVwdCBmb3IgZGV2aWNlOiAlcyAiCisJCQkJInJlY2VpdmVkIGMtJTAyeCBkLSUwMnhcbiIsCisJCQkJZGV2LT5uYW1lLAorCQkJCWNoLT5pZCwKKwkJCQlpcmItPnNjc3cuY3N0YXQsCisJCQkJaXJiLT5zY3N3LmRzdGF0KTsKKworCS8qIENvcHkgaW50ZXJydXB0aW9uIHJlc3BvbnNlIGJsb2NrLiAqLworCW1lbWNweShjaC0+aXJiLCBpcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CisKKwkvKiBDaGVjayBmb3IgZ29vZCBzdWJjaGFubmVsIHJldHVybiBjb2RlLCBvdGhlcndpc2UgZXJyb3IgbWVzc2FnZSAqLworCWlmIChpcmItPnNjc3cuY3N0YXQpIHsKKwkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9TQ19VTktOT1dOLCBjaCk7CisJCWN0Y21fcHJfd2FybigiJXM6IHN1YmNoYW5uZWwgY2hlY2sgZm9yIGRldjogJXMgLSAlMDJ4ICUwMnhcbiIsCisJCQkgICAgZGV2LT5uYW1lLCBjaC0+aWQsIGlyYi0+c2Nzdy5jc3RhdCwKKwkJCSAgICBpcmItPnNjc3cuZHN0YXQpOworCQlyZXR1cm47CisJfQorCisJLyogQ2hlY2sgdGhlIHJlYXNvbi1jb2RlIG9mIGEgdW5pdCBjaGVjayAqLworCWlmIChpcmItPnNjc3cuZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7CisJCWNjd191bml0X2NoZWNrKGNoLCBpcmItPmVjd1swXSk7CisJCXJldHVybjsKKwl9CisJaWYgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0JVU1kpIHsKKwkJaWYgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0FUVEVOVElPTikKKwkJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfQVRUTkJVU1ksIGNoKTsKKwkJZWxzZQorCQkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9CVVNZLCBjaCk7CisJCXJldHVybjsKKwl9CisJaWYgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0FUVEVOVElPTikgeworCQlmc21fZXZlbnQoY2gtPmZzbSwgQ1RDX0VWRU5UX0FUVE4sIGNoKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKGlyYi0+c2Nzdy5zdGN0bCAmIFNDU1dfU1RDVExfU0VDX1NUQVRVUykgfHwKKwkgICAgKGlyYi0+c2Nzdy5zdGN0bCA9PSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSB8fAorCSAgICAoaXJiLT5zY3N3LnN0Y3RsID09CisJICAgICAoU0NTV19TVENUTF9BTEVSVF9TVEFUVVMgfCBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpCisJCWZzbV9ldmVudChjaC0+ZnNtLCBDVENfRVZFTlRfRklOU1RBVCwgY2gpOworCWVsc2UKKwkJZnNtX2V2ZW50KGNoLT5mc20sIENUQ19FVkVOVF9JUlEsIGNoKTsKKworfQorCisvKioKKyAqIEFkZCBjdGNtIHNwZWNpZmljIGF0dHJpYnV0ZXMuCisgKiBBZGQgY3RjbSBwcml2YXRlIGRhdGEuCisgKgorICogIGNnZGV2CXBvaW50ZXIgdG8gY2N3Z3JvdXBfZGV2aWNlIGp1c3QgYWRkZWQKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgITAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBjdGNtX3Byb2JlX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjZ2RldikKK3sKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OworCWludCByYzsKKworCUNUQ01fREJGX1RFWFRfKFNFVFVQLCBDVENfREJGX0lORk8sICIlcyAlcCIsIF9fRlVOQ1RJT05fXywgY2dkZXYpOworCisJaWYgKCFnZXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN0Y21fcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikgeworCQljdGNtX3ByX2VycigiJXM6IE91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXB1dF9kZXZpY2UoJmNnZGV2LT5kZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyYyA9IGN0Y21fYWRkX2ZpbGVzKCZjZ2Rldi0+ZGV2KTsKKwlpZiAocmMpIHsKKwkJa2ZyZWUocHJpdik7CisJCXB1dF9kZXZpY2UoJmNnZGV2LT5kZXYpOworCQlyZXR1cm4gcmM7CisJfQorCXByaXYtPmJ1ZmZlcl9zaXplID0gQ1RDTV9CVUZTSVpFX0RFRkFVTFQ7CisJY2dkZXYtPmNkZXZbMF0tPmhhbmRsZXIgPSBjdGNtX2lycV9oYW5kbGVyOworCWNnZGV2LT5jZGV2WzFdLT5oYW5kbGVyID0gY3RjbV9pcnFfaGFuZGxlcjsKKwlkZXZfc2V0X2RydmRhdGEoJmNnZGV2LT5kZXYsIHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQWRkIGEgbmV3IGNoYW5uZWwgdG8gdGhlIGxpc3Qgb2YgY2hhbm5lbHMuCisgKiBLZWVwcyB0aGUgY2hhbm5lbCBsaXN0IHNvcnRlZC4KKyAqCisgKiAgY2RldglUaGUgY2N3X2RldmljZSB0byBiZSBhZGRlZC4KKyAqICB0eXBlCVRoZSB0eXBlIGNsYXNzIG9mIHRoZSBuZXcgY2hhbm5lbC4KKyAqICBwcml2CVBvaW50cyB0byB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBjY3dncm91cF9kZXZpY2UuCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsICEwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IGFkZF9jaGFubmVsKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBlbnVtIGNoYW5uZWxfdHlwZXMgdHlwZSwKKwkJCQlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2KQoreworCXN0cnVjdCBjaGFubmVsICoqYyA9ICZjaGFubmVsczsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2g7CisJaW50IGNjd19udW07CisJaW50IHJjID0gMDsKKworCUNUQ01fREJGX1RFWFQoVFJBQ0UsIDIsIF9fRlVOQ1RJT05fXyk7CisJY2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhbm5lbCksIEdGUF9LRVJORUwpOworCWlmIChjaCA9PSBOVUxMKQorCQkJCQlnb3RvIG5vbWVtX3JldHVybjsKKworCWNoLT5wcm90b2NvbCA9IHByaXYtPnByb3RvY29sOworCWlmIChJU19NUEMocHJpdikpIHsKKwkJY2gtPmRpc2NvbnRhY3RfdGggPSAoc3RydWN0IHRoX2hlYWRlciAqKQorCQkJCWt6YWxsb2MoVEhfSEVBREVSX0xFTkdUSCwgZ2ZwX3R5cGUoKSk7CisJCWlmIChjaC0+ZGlzY29udGFjdF90aCA9PSBOVUxMKQorCQkJCQlnb3RvIG5vbWVtX3JldHVybjsKKworCQljaC0+ZGlzY29udGFjdF90aC0+dGhfYmxrX2ZsYWcgPSBUSF9ESVNDT05UQUNUOworCQl0YXNrbGV0X2luaXQoJmNoLT5jaF9kaXNjX3Rhc2tsZXQsCisJCQltcGNfYWN0aW9uX3NlbmRfZGlzY29udGFjdCwgKHVuc2lnbmVkIGxvbmcpY2gpOworCisJCXRhc2tsZXRfaW5pdCgmY2gtPmNoX3Rhc2tsZXQsIGN0Y21wY19iaCwgKHVuc2lnbmVkIGxvbmcpY2gpOworCQljaC0+bWF4X2J1ZnNpemUgPSAoTVBDX0JVRlNJWkVfREVGQVVMVCAtIDM1KTsKKwkJY2N3X251bSA9IDE3OworCX0gZWxzZQorCQljY3dfbnVtID0gODsKKworCWNoLT5jY3cgPSAoc3RydWN0IGNjdzEgKikKKwkJa3phbGxvYyhjY3dfbnVtICogc2l6ZW9mKHN0cnVjdCBjY3cxKSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWlmIChjaC0+Y2N3ID09IE5VTEwpCisJCQkJCWdvdG8gbm9tZW1fcmV0dXJuOworCisJY2gtPmNkZXYgPSBjZGV2OworCXNucHJpbnRmKGNoLT5pZCwgQ1RDTV9JRF9TSVpFLCAiY2gtJXMiLCBjZGV2LT5kZXYuYnVzX2lkKTsKKwljaC0+dHlwZSA9IHR5cGU7CisKKwkvKioKKwkgKiAic3RhdGljIiBjY3dzIGFyZSB1c2VkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCSAqCisJICogY2N3WzAuLjJdIChDaGFubmVsIHByb2dyYW0gZm9yIGdlbmVyaWMgSS9PKToKKwkgKiAgICAgICAgICAgMDogcHJlcGFyZQorCSAqICAgICAgICAgICAxOiByZWFkIG9yIHdyaXRlIChkZXBlbmRpbmcgb24gZGlyZWN0aW9uKSB3aXRoIGZpeGVkCisJICogICAgICAgICAgICAgIGJ1ZmZlciAoaWRhbCBhbGxvY2F0ZWQgb25jZSB3aGVuIGJ1ZmZlciBpcyBhbGxvY2F0ZWQpCisJICogICAgICAgICAgIDI6IG5vcAorCSAqIGNjd1szLi41XSAoQ2hhbm5lbCBwcm9ncmFtIGZvciBkaXJlY3Qgd3JpdGUgb2YgcGFja2V0cykKKwkgKiAgICAgICAgICAgMzogcHJlcGFyZQorCSAqICAgICAgICAgICA0OiB3cml0ZSAoaWRhbCBhbGxvY2F0ZWQgb24gZXZlcnkgd3JpdGUpLgorCSAqICAgICAgICAgICA1OiBub3AKKwkgKiBjY3dbNi4uN10gKENoYW5uZWwgcHJvZ3JhbSBmb3IgaW5pdGlhbCBjaGFubmVsIHNldHVwKToKKwkgKiAgICAgICAgICAgNjogc2V0IGV4dGVuZGVkIG1vZGUKKwkgKiAgICAgICAgICAgNzogbm9wCisJICoKKwkgKiBjaC0+Y2N3WzAuLjVdIGFyZSBpbml0aWFsaXplZCBpbiBjaF9hY3Rpb25fc3RhcnQgYmVjYXVzZQorCSAqIHRoZSBjaGFubmVsJ3MgZGlyZWN0aW9uIGlzIHlldCB1bmtub3duIGhlcmUuCisJICoKKwkgKiBjY3dzIHVzZWQgZm9yIHhpZDIgbmVnb3RpYXRpb25zCisJICogIGNoLWNjd1s4LTE0XSBuZWVkIHRvIGJlIHVzZWQgZm9yIHRoZSBYSUQgZXhjaGFuZ2UgZWl0aGVyCisJICogICAgWCBzaWRlIFhJRDIgUHJvY2Vzc2luZworCSAqICAgICAgIDg6ICB3cml0ZSBjb250cm9sCisJICogICAgICAgOTogIHdyaXRlIHRoCisJICoJICAgICAxMDogd3JpdGUgWElECisJICoJICAgICAxMTogcmVhZCB0aCBmcm9tIHNlY29uZGFyeQorCSAqCSAgICAgMTI6IHJlYWQgWElEICAgZnJvbSBzZWNvbmRhcnkKKwkgKgkgICAgIDEzOiByZWFkIDQgYnl0ZSBJRAorCSAqCSAgICAgMTQ6IG5vcAorCSAqICAgIFkgc2lkZSBYSUQgUHJvY2Vzc2luZworCSAqCSAgICAgODogIHNlbnNlCisJICogICAgICAgOTogIHJlYWQgdGgKKwkgKgkgICAgIDEwOiByZWFkIFhJRAorCSAqCSAgICAgMTE6IHdyaXRlIHRoCisJICoJICAgICAxMjogd3JpdGUgWElECisJICoJICAgICAxMzogd3JpdGUgNCBieXRlIElECisJICoJICAgICAxNDogbm9wCisJICoKKwkgKiAgY2N3cyB1c2VkIGZvciBkb3VibGUgbm9vcCBkdWUgdG8gVk0gdGltaW5nIGlzc3VlcworCSAqICB3aGljaCByZXN1bHQgaW4gdW5yZWNvdmVyYWJsZSBCdXN5IG9uIGNoYW5uZWwKKwkgKiAgICAgICAxNTogbm9wCisJICogICAgICAgMTY6IG5vcAorCSAqLworCWNoLT5jY3dbNl0uY21kX2NvZGUJPSBDQ1dfQ01EX1NFVF9FWFRFTkRFRDsKKwljaC0+Y2N3WzZdLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJOworCisJY2gtPmNjd1s3XS5jbWRfY29kZQk9IENDV19DTURfTk9PUDsKKwljaC0+Y2N3WzddLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJOworCisJaWYgKElTX01QQyhwcml2KSkgeworCQljaC0+Y2N3WzE1XS5jbWRfY29kZSA9IENDV19DTURfV1JJVEU7CisJCWNoLT5jY3dbMTVdLmZsYWdzICAgID0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CisJCWNoLT5jY3dbMTVdLmNvdW50ICAgID0gVEhfSEVBREVSX0xFTkdUSDsKKwkJY2gtPmNjd1sxNV0uY2RhICAgICAgPSB2aXJ0X3RvX3BoeXMoY2gtPmRpc2NvbnRhY3RfdGgpOworCisJCWNoLT5jY3dbMTZdLmNtZF9jb2RlID0gQ0NXX0NNRF9OT09QOworCQljaC0+Y2N3WzE2XS5mbGFncyAgICA9IENDV19GTEFHX1NMSTsKKworCQljaC0+ZnNtID0gaW5pdF9mc20oY2gtPmlkLCBjdGNfY2hfc3RhdGVfbmFtZXMsCisJCQkJY3RjX2NoX2V2ZW50X25hbWVzLCBDVENfTVBDX05SX1NUQVRFUywKKwkJCQlDVENfTVBDX05SX0VWRU5UUywgY3RjbXBjX2NoX2ZzbSwKKwkJCQltcGNfY2hfZnNtX2xlbiwgR0ZQX0tFUk5FTCk7CisJfSBlbHNlIHsKKwkJY2gtPmZzbSA9IGluaXRfZnNtKGNoLT5pZCwgY3RjX2NoX3N0YXRlX25hbWVzLAorCQkJCWN0Y19jaF9ldmVudF9uYW1lcywgQ1RDX05SX1NUQVRFUywKKwkJCQlDVENfTlJfRVZFTlRTLCBjaF9mc20sCisJCQkJY2hfZnNtX2xlbiwgR0ZQX0tFUk5FTCk7CisJfQorCWlmIChjaC0+ZnNtID09IE5VTEwpCisJCQkJZ290byBmcmVlX3JldHVybjsKKworCWZzbV9uZXdzdGF0ZShjaC0+ZnNtLCBDVENfU1RBVEVfSURMRSk7CisKKwljaC0+aXJiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyYiksIEdGUF9LRVJORUwpOworCWlmIChjaC0+aXJiID09IE5VTEwpCisJCQkJZ290byBub21lbV9yZXR1cm47CisKKwl3aGlsZSAoKmMgJiYgY3RjbV9sZXNzX3RoYW4oKCpjKS0+aWQsIGNoLT5pZCkpCisJCWMgPSAmKCpjKS0+bmV4dDsKKworCWlmICgqYyAmJiAoIXN0cm5jbXAoKCpjKS0+aWQsIGNoLT5pZCwgQ1RDTV9JRF9TSVpFKSkpIHsKKwkJQ1RDTV9EQkZfVEVYVF8oU0VUVVAsIENUQ19EQkZfSU5GTywKKwkJCQkiJXMgKCVzKSBhbHJlYWR5IGluIGxpc3QsIHVzaW5nIG9sZCBlbnRyeSIsCisJCQkJX19GVU5DVElPTl9fLCAoKmMpLT5pZCk7CisKKwkJCQlnb3RvIGZyZWVfcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pbml0KCZjaC0+Y29sbGVjdF9sb2NrKTsKKworCWZzbV9zZXR0aW1lcihjaC0+ZnNtLCAmY2gtPnRpbWVyKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZjaC0+aW9fcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNoLT5jb2xsZWN0X3F1ZXVlKTsKKworCWlmIChJU19NUEMocHJpdikpIHsKKwkJZnNtX3NldHRpbWVyKGNoLT5mc20sICZjaC0+c3dlZXBfdGltZXIpOworCQlza2JfcXVldWVfaGVhZF9pbml0KCZjaC0+c3dlZXBfcXVldWUpOworCX0KKwljaC0+bmV4dCA9ICpjOworCSpjID0gY2g7CisJcmV0dXJuIDA7CisKK25vbWVtX3JldHVybjoKKwljdGNtX3ByX3dhcm4oImN0Y206IE91dCBvZiBtZW1vcnkgaW4gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmMgPSAtRU5PTUVNOworCitmcmVlX3JldHVybjoJLyogbm90ZSB0aGF0IGFsbCBjaGFubmVsIHBvaW50ZXJzIGFyZSAwIG9yIHZhbGlkICovCisJa2ZyZWUoY2gtPmNjdyk7CQkvKiBUT0RPOiBjaGVjayB0aGF0IGFnYWluICovCisJa2ZyZWUoY2gtPmRpc2NvbnRhY3RfdGgpOworCWtmcmVlX2ZzbShjaC0+ZnNtKTsKKwlrZnJlZShjaC0+aXJiKTsKKwlrZnJlZShjaCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogUmV0dXJuIHR5cGUgb2YgYSBkZXRlY3RlZCBkZXZpY2UuCisgKi8KK3N0YXRpYyBlbnVtIGNoYW5uZWxfdHlwZXMgZ2V0X2NoYW5uZWxfdHlwZShzdHJ1Y3QgY2N3X2RldmljZV9pZCAqaWQpCit7CisJZW51bSBjaGFubmVsX3R5cGVzIHR5cGU7CisJdHlwZSA9IChlbnVtIGNoYW5uZWxfdHlwZXMpaWQtPmRyaXZlcl9pbmZvOworCisJaWYgKHR5cGUgPT0gY2hhbm5lbF90eXBlX2ZpY29uKQorCQl0eXBlID0gY2hhbm5lbF90eXBlX2VzY29uOworCisJcmV0dXJuIHR5cGU7Cit9CisKKy8qKgorICoKKyAqIFNldHVwIGFuIGludGVyZmFjZS4KKyAqCisgKiAgY2dkZXYJRGV2aWNlIHRvIGJlIHNldHVwLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAhMCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGN0Y21fbmV3X2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjZ2RldikKK3sKKwljaGFyIHJlYWRfaWRbQ1RDTV9JRF9TSVpFXTsKKwljaGFyIHdyaXRlX2lkW0NUQ01fSURfU0laRV07CisJaW50IGRpcmVjdGlvbjsKKwllbnVtIGNoYW5uZWxfdHlwZXMgdHlwZTsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfSU5GTywgX19GVU5DVElPTl9fKTsKKworCXByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNnZGV2LT5kZXYpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl0eXBlID0gZ2V0X2NoYW5uZWxfdHlwZSgmY2dkZXYtPmNkZXZbMF0tPmlkKTsKKworCXNucHJpbnRmKHJlYWRfaWQsIENUQ01fSURfU0laRSwgImNoLSVzIiwgY2dkZXYtPmNkZXZbMF0tPmRldi5idXNfaWQpOworCXNucHJpbnRmKHdyaXRlX2lkLCBDVENNX0lEX1NJWkUsICJjaC0lcyIsIGNnZGV2LT5jZGV2WzFdLT5kZXYuYnVzX2lkKTsKKworCXJldCA9IGFkZF9jaGFubmVsKGNnZGV2LT5jZGV2WzBdLCB0eXBlLCBwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGFkZF9jaGFubmVsKGNnZGV2LT5jZGV2WzFdLCB0eXBlLCBwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNnZGV2LT5jZGV2WzBdKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJQ1RDTV9EQkZfVEVYVChTRVRVUCwgQ1RDX0RCRl9XQVJOLAorCQkJCSJjY3dfZGV2aWNlX3NldF9vbmxpbmUgKGNkZXZbMF0pIGZhaWxlZCAiKTsKKwkJY3RjbV9wcl93YXJuKCJjY3dfZGV2aWNlX3NldF9vbmxpbmUgKGNkZXZbMF0pIGZhaWxlZCAiCisJCQkJIndpdGggcmV0ID0gJWRcbiIsIHJldCk7CisJfQorCisJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNnZGV2LT5jZGV2WzFdKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJQ1RDTV9EQkZfVEVYVChTRVRVUCwgQ1RDX0RCRl9XQVJOLAorCQkJCSJjY3dfZGV2aWNlX3NldF9vbmxpbmUgKGNkZXZbMV0pIGZhaWxlZCAiKTsKKwkJY3RjbV9wcl93YXJuKCJjY3dfZGV2aWNlX3NldF9vbmxpbmUgKGNkZXZbMV0pIGZhaWxlZCAiCisJCQkJIndpdGggcmV0ID0gJWRcbiIsIHJldCk7CisJfQorCisJZGV2ID0gY3RjbV9pbml0X25ldGRldmljZShwcml2KTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQljdGNtX3ByX3dhcm4oImN0Y21faW5pdF9uZXRkZXZpY2UgZmFpbGVkXG4iKTsKKwkJCQkJZ290byBvdXQ7CisJfQorCisJZm9yIChkaXJlY3Rpb24gPSBSRUFEOyBkaXJlY3Rpb24gPD0gV1JJVEU7IGRpcmVjdGlvbisrKSB7CisJCXByaXYtPmNoYW5uZWxbZGlyZWN0aW9uXSA9CisJCSAgICBjaGFubmVsX2dldCh0eXBlLCBkaXJlY3Rpb24gPT0gUkVBRCA/IHJlYWRfaWQgOiB3cml0ZV9pZCwKKwkJCQlkaXJlY3Rpb24pOworCQlpZiAocHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dID09IE5VTEwpIHsKKwkJCWlmIChkaXJlY3Rpb24gPT0gV1JJVEUpCisJCQkJY2hhbm5lbF9mcmVlKHByaXYtPmNoYW5uZWxbUkVBRF0pOworCQkJY3RjbV9mcmVlX25ldGRldmljZShkZXYpOworCQkJCQlnb3RvIG91dDsKKwkJfQorCQlwcml2LT5jaGFubmVsW2RpcmVjdGlvbl0tPm5ldGRldiA9IGRldjsKKwkJcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dLT5wcm90b2NvbCA9IHByaXYtPnByb3RvY29sOworCQlwcml2LT5jaGFubmVsW2RpcmVjdGlvbl0tPm1heF9idWZzaXplID0gcHJpdi0+YnVmZmVyX3NpemU7CisJfQorCS8qIHN5c2ZzIG1hZ2ljICovCisJU0VUX05FVERFVl9ERVYoZGV2LCAmY2dkZXYtPmRldik7CisKKwlpZiAoY3RjbV9uZXRkZXZfcmVnaXN0ZXIoZGV2KSAhPSAwKSB7CisJCWN0Y21fZnJlZV9uZXRkZXZpY2UoZGV2KTsKKwkJCQkJZ290byBvdXQ7CisJfQorCisJaWYgKGN0Y21fYWRkX2F0dHJpYnV0ZXMoJmNnZGV2LT5kZXYpKSB7CisJCWN0Y21fbmV0ZGV2X3VucmVnaXN0ZXIoZGV2KTsKKy8qCQlkZXYtPnByaXYgPSBOVUxMOwl3aHkgdGhhdCA/Pz8/CSovCisJCWN0Y21fZnJlZV9uZXRkZXZpY2UoZGV2KTsKKwkJCQkJZ290byBvdXQ7CisJfQorCisJc3RybGNweShwcml2LT5mc20tPm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mKHByaXYtPmZzbS0+bmFtZSkpOworCisJQ1RDTV9EQkZfVEVYVF8oU0VUVVAsIENUQ19EQkZfSU5GTywKKwkJCSJzZXR1cCglcykgb2sgOiByL3cgPSAlcyAvICVzLCBwcm90byA6ICVkIiwKKwkJCWRldi0+bmFtZSwgcHJpdi0+Y2hhbm5lbFtSRUFEXS0+aWQsCisJCQlwcml2LT5jaGFubmVsW1dSSVRFXS0+aWQsIHByaXYtPnByb3RvY29sKTsKKworCXJldHVybiAwOworb3V0OgorCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2dkZXYtPmNkZXZbMV0pOworCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2dkZXYtPmNkZXZbMF0pOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qKgorICogU2h1dGRvd24gYW4gaW50ZXJmYWNlLgorICoKKyAqICBjZ2RldglEZXZpY2UgdG8gYmUgc2h1dCBkb3duLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAhMCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGN0Y21fc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2KQoreworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKworCXByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNnZGV2LT5kZXYpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocHJpdi0+Y2hhbm5lbFtSRUFEXSkgeworCQlkZXYgPSBwcml2LT5jaGFubmVsW1JFQURdLT5uZXRkZXY7CisJCUNUQ01fREJGX0RFVihTRVRVUCwgZGV2LCAiIik7CisJCS8qIENsb3NlIHRoZSBkZXZpY2UgKi8KKwkJY3RjbV9jbG9zZShkZXYpOworCQlkZXYtPmZsYWdzICY9IH5JRkZfUlVOTklORzsKKwkJY3RjbV9yZW1vdmVfYXR0cmlidXRlcygmY2dkZXYtPmRldik7CisJCWNoYW5uZWxfZnJlZShwcml2LT5jaGFubmVsW1JFQURdKTsKKwl9IGVsc2UKKwkJZGV2ID0gTlVMTDsKKworCWlmIChwcml2LT5jaGFubmVsW1dSSVRFXSkKKwkJY2hhbm5lbF9mcmVlKHByaXYtPmNoYW5uZWxbV1JJVEVdKTsKKworCWlmIChkZXYpIHsKKwkJY3RjbV9uZXRkZXZfdW5yZWdpc3RlcihkZXYpOworLyoJCWRldi0+cHJpdiA9IE5VTEw7CXdoeSB0aGF0ID8/PwkqLworCQljdGNtX2ZyZWVfbmV0ZGV2aWNlKGRldik7CisJfQorCisJaWYgKHByaXYtPmZzbSkKKwkJa2ZyZWVfZnNtKHByaXYtPmZzbSk7CisKKwljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzFdKTsKKwljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzBdKTsKKworCWlmIChwcml2LT5jaGFubmVsW1JFQURdKQorCQljaGFubmVsX3JlbW92ZShwcml2LT5jaGFubmVsW1JFQURdKTsKKwlpZiAocHJpdi0+Y2hhbm5lbFtXUklURV0pCisJCWNoYW5uZWxfcmVtb3ZlKHByaXYtPmNoYW5uZWxbV1JJVEVdKTsKKwlwcml2LT5jaGFubmVsW1JFQURdID0gcHJpdi0+Y2hhbm5lbFtXUklURV0gPSBOVUxMOworCisJcmV0dXJuIDA7CisKK30KKworCitzdGF0aWMgdm9pZCBjdGNtX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYpCit7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKKworCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfRVJST1IsIF9fRlVOQ1RJT05fXyk7CisKKwlwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKKwlpZiAoIXByaXYpCisJCXJldHVybjsKKwlpZiAoY2dkZXYtPnN0YXRlID09IENDV0dST1VQX09OTElORSkKKwkJY3RjbV9zaHV0ZG93bl9kZXZpY2UoY2dkZXYpOworCWN0Y21fcmVtb3ZlX2ZpbGVzKCZjZ2Rldi0+ZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoJmNnZGV2LT5kZXYsIE5VTEwpOworCWtmcmVlKHByaXYpOworCXB1dF9kZXZpY2UoJmNnZGV2LT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IGNjd2dyb3VwX2RyaXZlciBjdGNtX2dyb3VwX2RyaXZlciA9IHsKKwkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKKwkubmFtZSAgICAgICAgPSBDVENfRFJJVkVSX05BTUUsCisJLm1heF9zbGF2ZXMgID0gMiwKKwkuZHJpdmVyX2lkICAgPSAweEMzRTNDM0Q0LAkvKiBDVENNICovCisJLnByb2JlICAgICAgID0gY3RjbV9wcm9iZV9kZXZpY2UsCisJLnJlbW92ZSAgICAgID0gY3RjbV9yZW1vdmVfZGV2aWNlLAorCS5zZXRfb25saW5lICA9IGN0Y21fbmV3X2RldmljZSwKKwkuc2V0X29mZmxpbmUgPSBjdGNtX3NodXRkb3duX2RldmljZSwKK307CisKKworLyoKKyAqIE1vZHVsZSByZWxhdGVkIHJvdXRpbmVzCisgKi8KKworLyoKKyAqIFByZXBhcmUgdG8gYmUgdW5sb2FkZWQuIEZyZWUgSVJRJ3MgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcy4KKyAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHRoaXMgbW9kdWxlIGlzIHVubG9hZGVkLiBJdCBpcworICogbm90IGNhbGxlZCwgaWYgdGhlIHVzYWdlIGNvdW50IGlzICEwLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrCisgKiBmb3IgdGhhdC4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IGN0Y21fZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoJmN0Y21fZ3JvdXBfZHJpdmVyKTsKKwljdGNtX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CisJY3RjbV9wcl9pbmZvKCJDVENNIGRyaXZlciB1bmxvYWRlZFxuIik7Cit9CisKKy8qCisgKiBQcmludCBCYW5uZXIuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2Jhbm5lcih2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkNUQ00gZHJpdmVyIGluaXRpYWxpemVkXG4iKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIG1vZHVsZS4KKyAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIG1vZHVsZSBpcyBsb2FkZWQuCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsICEwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IF9faW5pdCBjdGNtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJY2hhbm5lbHMgPSBOVUxMOworCisJcmV0ID0gY3RjbV9yZWdpc3Rlcl9kYmZfdmlld3MoKTsKKwlpZiAocmV0KSB7CisJCWN0Y21fcHJfY3JpdCgiY3RjbV9pbml0IGZhaWxlZCB3aXRoIGN0Y21fcmVnaXN0ZXJfZGJmX3ZpZXdzICIKKwkJCQkicmMgPSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoJmN0Y21fZ3JvdXBfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCWN0Y21fdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKKwkJY3RjbV9wcl9jcml0KCJjdGNtX2luaXQgZmFpbGVkIHdpdGggcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUgIgorCQkJCSIocmMgPSAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXByaW50X2Jhbm5lcigpOworCXJldHVybiByZXQ7Cit9CisKK21vZHVsZV9pbml0KGN0Y21faW5pdCk7Cittb2R1bGVfZXhpdChjdGNtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJQZXRlciBUaWVkZW1hbm4gPHB0aWVkZW1AZGUuaWJtLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTmV0d29yayBkcml2ZXIgZm9yIFMvMzkwIENUQyArIENUQ01QQyAoU05BKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5oIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWIwYzBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uaApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqCWRyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmgKKyAqCisgKglDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDcKKyAqCUF1dGhvcnM6CUZyaXR6IEVsZmVydCAoZmVsZmVydEBtaWxsZW51eC5jb20pCisgKgkJCVBldGVyIFRpZWRlbWFubiAocHRpZWRlbUBkZS5pYm0uY29tKQorICovCisKKyNpZm5kZWYgX0NUQ01fTUFJTl9IXworI2RlZmluZSBfQ1RDTV9NQUlOX0hfCisKKyNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgImZzbS5oIgorI2luY2x1ZGUgImN1MzA4OC5oIgorI2luY2x1ZGUgImN0Y21fZGJ1Zy5oIgorI2luY2x1ZGUgImN0Y21fbXBjLmgiCisKKyNkZWZpbmUgQ1RDX0RSSVZFUl9OQU1FCSJjdGNtIgorI2RlZmluZSBDVENfREVWSUNFX05BTUUJImN0YyIKKyNkZWZpbmUgQ1RDX0RFVklDRV9HRU5FCSJjdGMlZCIKKyNkZWZpbmUgTVBDX0RFVklDRV9OQU1FCSJtcGMiCisjZGVmaW5lIE1QQ19ERVZJQ0VfR0VORQkibXBjJWQiCisKKyNkZWZpbmUgQ0hBTk5FTF9GTEFHU19SRUFECTAKKyNkZWZpbmUgQ0hBTk5FTF9GTEFHU19XUklURQkxCisjZGVmaW5lIENIQU5ORUxfRkxBR1NfSU5VU0UJMgorI2RlZmluZSBDSEFOTkVMX0ZMQUdTX0JVRlNJWkVfQ0hBTkdFRAk0CisjZGVmaW5lIENIQU5ORUxfRkxBR1NfRkFJTEVECTgKKyNkZWZpbmUgQ0hBTk5FTF9GTEFHU19XQUlUSVJRCTE2CisjZGVmaW5lIENIQU5ORUxfRkxBR1NfUldNQVNLCTEKKyNkZWZpbmUgQ0hBTk5FTF9ESVJFQ1RJT04oZikgKGYgJiBDSEFOTkVMX0ZMQUdTX1JXTUFTSykKKworI2RlZmluZSBMT0dfRkxBR19JTExFR0FMUEtUCTEKKyNkZWZpbmUgTE9HX0ZMQUdfSUxMRUdBTFNJWkUJMgorI2RlZmluZSBMT0dfRkxBR19PVkVSUlVOCTQKKyNkZWZpbmUgTE9HX0ZMQUdfTk9NRU0JCTgKKworI2RlZmluZSBjdGNtX3ByX2RlYnVnKGZtdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjYXJnKQorI2RlZmluZSBjdGNtX3ByX2luZm8oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gZm10LCAjI2FyZykKKyNkZWZpbmUgY3RjbV9wcl9ub3RpY2UoZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX05PVElDRSBmbXQsICMjYXJnKQorI2RlZmluZSBjdGNtX3ByX3dhcm4oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgZm10LCAjI2FyZykKKyNkZWZpbmUgY3RjbV9wcl9lbWVyZyhmbXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRU1FUkcgZm10LCAjI2FyZykKKyNkZWZpbmUgY3RjbV9wcl9lcnIoZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBmbXQsICMjYXJnKQorI2RlZmluZSBjdGNtX3ByX2NyaXQoZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0NSSVQgZm10LCAjI2FyZykKKworLyoKKyAqIENDVyBjb21tYW5kcywgdXNlZCBpbiB0aGlzIGRyaXZlci4KKyAqLworI2RlZmluZSBDQ1dfQ01EX1dSSVRFCQkweDAxCisjZGVmaW5lIENDV19DTURfUkVBRAkJMHgwMgorI2RlZmluZSBDQ1dfQ01EX05PT1AJCTB4MDMKKyNkZWZpbmUgQ0NXX0NNRF9USUMgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBDQ1dfQ01EX1NFTlNFX0NNRAkweDE0CisjZGVmaW5lIENDV19DTURfV1JJVEVfQ1RMCTB4MTcKKyNkZWZpbmUgQ0NXX0NNRF9TRVRfRVhURU5ERUQJMHhjMworI2RlZmluZSBDQ1dfQ01EX1BSRVBBUkUJCTB4ZTMKKworI2RlZmluZSBDVENNX1BST1RPX1MzOTAJCTAKKyNkZWZpbmUgQ1RDTV9QUk9UT19MSU5VWAkxCisjZGVmaW5lIENUQ01fUFJPVE9fTElOVVhfVFRZCTIKKyNkZWZpbmUgQ1RDTV9QUk9UT19PUzM5MAkzCisjZGVmaW5lIENUQ01fUFJPVE9fTVBDCQk0CisjZGVmaW5lIENUQ01fUFJPVE9fTUFYCQk0CisKKyNkZWZpbmUgQ1RDTV9CVUZTSVpFX0xJTUlUCTY1NTM1CisjZGVmaW5lIENUQ01fQlVGU0laRV9ERUZBVUxUCTMyNzY4CisjZGVmaW5lIE1QQ19CVUZTSVpFX0RFRkFVTFQJQ1RDTV9CVUZTSVpFX0xJTUlUCisKKyNkZWZpbmUgQ1RDTV9USU1FXzFfU0VDCQkxMDAwCisjZGVmaW5lIENUQ01fVElNRV81X1NFQwkJNTAwMAorI2RlZmluZSBDVENNX1RJTUVfMTBfU0VDCTEwMDAwCisKKyNkZWZpbmUgQ1RDTV9JTklUSUFMX0JMT0NLTEVOCTIKKworI2RlZmluZSBSRUFECQkJMAorI2RlZmluZSBXUklURQkJCTEKKworI2RlZmluZSBDVENNX0lEX1NJWkUJCUJVU19JRF9TSVpFKzMKKworc3RydWN0IGN0Y21fcHJvZmlsZSB7CisJdW5zaWduZWQgbG9uZyBtYXhtdWx0aTsKKwl1bnNpZ25lZCBsb25nIG1heGNxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGRvaW9zX3NpbmdsZTsKKwl1bnNpZ25lZCBsb25nIGRvaW9zX211bHRpOworCXVuc2lnbmVkIGxvbmcgdHhsZW47CisJdW5zaWduZWQgbG9uZyB0eF90aW1lOworCXN0cnVjdCB0aW1lc3BlYyBzZW5kX3N0YW1wOworfTsKKworLyoKKyAqIERlZmluaXRpb24gb2Ygb25lIGNoYW5uZWwKKyAqLworc3RydWN0IGNoYW5uZWwgeworCXN0cnVjdCBjaGFubmVsICpuZXh0OworCWNoYXIgaWRbQ1RDTV9JRF9TSVpFXTsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKwkvKgorCSAqIFR5cGUgb2YgdGhpcyBjaGFubmVsLgorCSAqIENUQy9BIG9yIEVzY29uIGZvciB2YWxpZCBjaGFubmVscy4KKwkgKi8KKwllbnVtIGNoYW5uZWxfdHlwZXMgdHlwZTsKKwkvKgorCSAqIE1pc2MuIGZsYWdzLiBTZWUgQ0hBTk5FTF9GTEFHU18uLi4gYmVsb3cKKwkgKi8KKwlfX3UzMiBmbGFnczsKKwlfX3UxNiBwcm90b2NvbDsJCS8qIHByb3RvY29sIG9mIHRoaXMgY2hhbm5lbCAoNCA9IE1QQykgKi8KKwkvKgorCSAqIEkvTyBhbmQgaXJxIHJlbGF0ZWQgc3R1ZmYKKwkgKi8KKwlzdHJ1Y3QgY2N3MSAqY2N3OworCXN0cnVjdCBpcmIgKmlyYjsKKwkvKgorCSAqIFJYL1RYIGJ1ZmZlciBzaXplCisJICovCisJaW50IG1heF9idWZzaXplOworCXN0cnVjdCBza19idWZmICp0cmFuc19za2I7CS8qIHRyYW5zbWl0L3JlY2VpdmUgYnVmZmVyICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCBpb19xdWV1ZTsJLyogdW5pdmVyc2FsIEkvTyBxdWV1ZSAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBjaF90YXNrbGV0OwkvKiBNUEMgT05MWSAqLworCS8qCisJICogVFggcXVldWUgZm9yIGNvbGxlY3Rpbmcgc2tiJ3MgZHVyaW5nIGJ1c3kuCisJICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCBjb2xsZWN0X3F1ZXVlOworCS8qCisJICogQW1vdW50IG9mIGRhdGEgaW4gY29sbGVjdF9xdWV1ZS4KKwkgKi8KKwlpbnQgY29sbGVjdF9sZW47CisJLyoKKwkgKiBzcGlubG9jayBmb3IgY29sbGVjdF9xdWV1ZSBhbmQgY29sbGVjdF9sZW4KKwkgKi8KKwlzcGlubG9ja190IGNvbGxlY3RfbG9jazsKKwkvKgorCSAqIFRpbWVyIGZvciBkZXRlY3RpbmcgdW5yZXNwb3NpdmUKKwkgKiBJL08gb3BlcmF0aW9ucy4KKwkgKi8KKwlmc21fdGltZXIgdGltZXI7CisJLyogTVBDIE9OTFkgc2VjdGlvbiBiZWdpbiAqLworCV9fdTMyCXRoX3NlcV9udW07CS8qIFNOQSBUSCBzZXEgbnVtYmVyICovCisJX191OAl0aF9zZWc7CisJX191MzIJcGR1X3NlcTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnhpZF9za2I7CisJY2hhcgkJCSp4aWRfc2tiX2RhdGE7CisJc3RydWN0IHRoX2hlYWRlcgkqeGlkX3RoOworCXN0cnVjdCB4aWQyCQkqeGlkOworCWNoYXIJCQkqeGlkX2lkOworCXN0cnVjdCB0aF9oZWFkZXIJKnJjdmRfeGlkX3RoOworCXN0cnVjdCB4aWQyCQkqcmN2ZF94aWQ7CisJY2hhcgkJCSpyY3ZkX3hpZF9pZDsKKwlfX3U4CQkJaW5fbXBjZ3JvdXA7CisJZnNtX3RpbWVyCQlzd2VlcF90aW1lcjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXN3ZWVwX3F1ZXVlOworCXN0cnVjdCB0aF9oZWFkZXIJKmRpc2NvbnRhY3RfdGg7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWNoX2Rpc2NfdGFza2xldDsKKwkvKiBNUEMgT05MWSBzZWN0aW9uIGVuZCAqLworCisJaW50IHJldHJ5OwkJLyogcmV0cnkgY291bnRlciBmb3IgbWlzYy4gb3BlcmF0aW9ucyAqLworCWZzbV9pbnN0YW5jZSAqZnNtOwkvKiBmaW5pdGUgc3RhdGUgbWFjaGluZSBvZiB0aGlzIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwkvKiBjb3JyZXNwb25kaW5nIG5ldF9kZXZpY2UgKi8KKwlzdHJ1Y3QgY3RjbV9wcm9maWxlIHByb2Y7CisJdW5zaWduZWQgY2hhciAqdHJhbnNfc2tiX2RhdGE7CisJX191MTYgbG9nZmxhZ3M7Cit9OworCitzdHJ1Y3QgY3RjbV9wcml2IHsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKwl1bnNpZ25lZCBsb25nCXRidXN5OworCisJLyogVGhlIE1QQyBncm91cCBzdHJ1Y3Qgb2YgdGhpcyBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QJbXBjX2dyb3VwCSptcGNnOwkvKiBNUEMgb25seSAqLworCXN0cnVjdAl4aWQyCQkqeGlkOwkvKiBNUEMgb25seSAqLworCisJLyogVGhlIGZpbml0ZSBzdGF0ZSBtYWNoaW5lIG9mIHRoaXMgaW50ZXJmYWNlICovCisJZnNtX2luc3RhbmNlICpmc207CisKKwkvKiBUaGUgcHJvdG9jb2wgb2YgdGhpcyBkZXZpY2UgKi8KKwlfX3UxNiBwcm90b2NvbDsKKworCS8qIFRpbWVyIGZvciByZXN0YXJ0aW5nIGFmdGVyIEkvTyBFcnJvcnMgKi8KKwlmc21fdGltZXIJcmVzdGFydF90aW1lcjsKKworCWludCBidWZmZXJfc2l6ZTsJLyogY3RjIG9ubHkgKi8KKworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsWzJdOworfTsKKworaW50IGN0Y21fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBjdGNtX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKgorICogcHJvdG90eXBlcyBmb3Igbm9uLXN0YXRpYyBzeXNmcyBmdW5jdGlvbnMKKyAqLworaW50IGN0Y21fYWRkX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgY3RjbV9yZW1vdmVfYXR0cmlidXRlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IGN0Y21fYWRkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIGN0Y21fcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKy8qCisgKiBDb21wYXRpYmlsaXR5IG1hY3JvcyBmb3IgYnVzeSBoYW5kbGluZworICogb2YgbmV0d29yayBkZXZpY2VzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3RjbV9jbGVhcl9idXN5X2RvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJY2xlYXJfYml0KDAsICYoKChzdHJ1Y3QgY3RjbV9wcml2ICopZGV2LT5wcml2KS0+dGJ1c3kpKTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdGNtX2NsZWFyX2J1c3koc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXBjX2dyb3VwICpncnA7CisJZ3JwID0gKChzdHJ1Y3QgY3RjbV9wcml2ICopZGV2LT5wcml2KS0+bXBjZzsKKworCWlmICghKGdycCAmJiBncnAtPmluX3N3ZWVwKSkKKwkJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgY3RjbV90ZXN0X2FuZF9zZXRfYnVzeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmKCgoc3RydWN0IGN0Y21fcHJpdiAqKWRldi0+cHJpdiktPnRidXN5KSk7Cit9CisKK2V4dGVybiBpbnQgbG9nbGV2ZWw7CitleHRlcm4gc3RydWN0IGNoYW5uZWwgKmNoYW5uZWxzOworCit2b2lkIGN0Y21fdW5wYWNrX3NrYihzdHJ1Y3QgY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpwc2tiKTsKKworLyoKKyAqIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHNldHVwIGFuZCBkZXZpY2UgZGV0ZWN0aW9uLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGN0Y21fbGVzc190aGFuKGNoYXIgKmlkMSwgY2hhciAqaWQyKQoreworCXVuc2lnbmVkIGxvbmcgZGV2MSwgZGV2MjsKKworCWlkMSA9IGlkMSArIDU7CisJaWQyID0gaWQyICsgNTsKKworCWRldjEgPSBzaW1wbGVfc3RydG91bChpZDEsICZpZDEsIDE2KTsKKwlkZXYyID0gc2ltcGxlX3N0cnRvdWwoaWQyLCAmaWQyLCAxNik7CisKKwlyZXR1cm4gKGRldjEgPCBkZXYyKTsKK30KKworaW50IGN0Y21fY2hfYWxsb2NfYnVmZmVyKHN0cnVjdCBjaGFubmVsICpjaCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGN0Y21fY2hlY2thbGxvY19idWZmZXIoc3RydWN0IGNoYW5uZWwgKmNoKQoreworCWlmIChjaC0+dHJhbnNfc2tiID09IE5VTEwpCisJCXJldHVybiBjdGNtX2NoX2FsbG9jX2J1ZmZlcihjaCk7CisJaWYgKGNoLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfQlVGU0laRV9DSEFOR0VEKSB7CisJCWRldl9rZnJlZV9za2IoY2gtPnRyYW5zX3NrYik7CisJCXJldHVybiBjdGNtX2NoX2FsbG9jX2J1ZmZlcihjaCk7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXBjX2dyb3VwICpjdGNtcGNfaW5pdF9tcGNfZ3JvdXAoc3RydWN0IGN0Y21fcHJpdiAqcHJpdik7CisKKy8qIHRlc3QgaWYgcHJvdG9jb2wgYXR0cmlidXRlIChvZiBzdHJ1Y3QgY3RjbV9wcml2IG9yIHN0cnVjdCBjaGFubmVsKQorICogaGFzIE1QQyBwcm90b2NvbCBzZXR0aW5nLiBUeXBlIGlzIG5vdCBjaGVja2VkCisgKi8KKyNkZWZpbmUgSVNfTVBDKHApICgocCktPnByb3RvY29sID09IENUQ01fUFJPVE9fTVBDKQorCisvKiB0ZXN0IGlmIHN0cnVjdCBjdGNtX3ByaXYgb2Ygc3RydWN0IG5ldF9kZXZpY2UgaGFzIE1QQyBwcm90b2NvbCBzZXR0aW5nICovCisjZGVmaW5lIElTX01QQ0RFVihkKSBJU19NUEMoKHN0cnVjdCBjdGNtX3ByaXYgKilkLT5wcml2KQorCitzdGF0aWMgaW5saW5lIGdmcF90IGdmcF90eXBlKHZvaWQpCit7CisJcmV0dXJuIGluX2ludGVycnVwdCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUw7Cit9CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIG91ciBsaW5rIGxldmVsIGhlYWRlci4KKyAqLworc3RydWN0IGxsX2hlYWRlciB7CisJX191MTYgbGVuZ3RoOworCV9fdTE2IHR5cGU7CisJX191MTYgdW51c2VkOworfTsKKyNkZWZpbmUgTExfSEVBREVSX0xFTkdUSCAoc2l6ZW9mKHN0cnVjdCBsbF9oZWFkZXIpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRhZGRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCkBAIC0wLDAgKzEsMjQ3MiBAQAorLyoKKyAqCWRyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYworICoKKyAqCUNvcHlyaWdodCBJQk0gQ29ycC4gMjAwNCwgMjAwNworICoJQXV0aG9yczoJQmVsaW5kYSBUaG9tcHNvbiAoYmVsaW5kYXRAdXMuaWJtLmNvbSkKKyAqCQkJQW5keSBSaWNodGVyIChyaWNodGVyYUB1cy5pYm0uY29tKQorICoJCQlQZXRlciBUaWVkZW1hbm4gKHB0aWVkZW1AZGUuaWJtLmNvbSkKKyAqLworCisvKgorCVRoaXMgbW9kdWxlIGV4cG9ydHMgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYnkgQ0NTOgorCUVYUE9SVF9TWU1CT0woY3RjX21wY19hbGxvY19jaGFubmVsKTsKKwlFWFBPUlRfU1lNQk9MKGN0Y19tcGNfZXN0YWJsaXNoX2Nvbm5lY3Rpdml0eSk7CisJRVhQT1JUX1NZTUJPTChjdGNfbXBjX2RlYWxsb2NfY2gpOworCUVYUE9SVF9TWU1CT0woY3RjX21wY19mbG93X2NvbnRyb2wpOworKi8KKworI3VuZGVmIERFQlVHCisjdW5kZWYgREVCVUdEQVRBCisjdW5kZWYgREVCVUdDQ1cKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIGluc3RlYWQgb2YgPGFzbS9pby5oPiBvayA/ICovCisjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgorI2luY2x1ZGUgPGFzbS9jY3dncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgkvKiBpbnN0ZWFkIG9mIDxhc20vYml0b3BzLmg+IG9rID8gKi8KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CS8qIGluc3RlYWQgb2YgPGFzbS91YWNjZXNzLmg+IG9rID8gKi8KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vaWRhbHMuaD4KKworI2luY2x1ZGUgImN1MzA4OC5oIgorI2luY2x1ZGUgImN0Y21fbXBjLmgiCisjaW5jbHVkZSAiY3RjbV9tYWluLmgiCisjaW5jbHVkZSAiY3RjbV9mc21zLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGlkMiBpbml0X3hpZCA9IHsKKwkueGlkMl90eXBlX2lkCT0JWElEX0ZNMiwKKwkueGlkMl9sZW4JPQkweDQ1LAorCS54aWQyX2Fkal9pZAk9CTAsCisJLnhpZDJfcmxlbgk9CTB4MzEsCisJLnhpZDJfcmVzdjEJPQkwLAorCS54aWQyX2ZsYWcxCT0JMCwKKwkueGlkMl9mbXR0CT0JMCwKKwkueGlkMl9mbGFnNAk9CTB4ODAsCisJLnhpZDJfcmVzdjIJPQkwLAorCS54aWQyX3RnbnVtCT0JMCwKKwkueGlkMl9zZW5kZXJfaWQJPQkwLAorCS54aWQyX2ZsYWcyCT0JMCwKKwkueGlkMl9vcHRpb24JPQlYSUQyXzAsCisJLnhpZDJfcmVzdjMJPQkiXHgwMCIsCisJLnhpZDJfcmVzdjQJPQkwLAorCS54aWQyX2RsY190eXBlCT0JWElEMl9SRUFEX1NJREUsCisJLnhpZDJfcmVzdjUJPQkwLAorCS54aWQyX21wY19mbGFnCT0JMCwKKwkueGlkMl9yZXN2Ngk9CTAsCisJLnhpZDJfYnVmX2xlbgk9CShNUENfQlVGU0laRV9ERUZBVUxUIC0gMzUpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aF9oZWFkZXIgdGhub3JtID0geworCS50aF9zZWcJCT0JMHgwMCwKKwkudGhfY2hfZmxhZwk9CVRIX0lTX1hJRCwKKwkudGhfYmxrX2ZsYWcJPQlUSF9EQVRBX0lTX1hJRCwKKwkudGhfaXNfeGlkCT0JMHgwMSwKKwkudGhfc2VxX251bQk9CTB4MDAwMDAwMDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRoX2hlYWRlciB0aGR1bW15ID0geworCS50aF9zZWcJCT0JMHgwMCwKKwkudGhfY2hfZmxhZwk9CTB4MDAsCisJLnRoX2Jsa19mbGFnCT0JVEhfREFUQV9JU19YSUQsCisJLnRoX2lzX3hpZAk9CTB4MDEsCisJLnRoX3NlcV9udW0JPQkweDAwMDAwMDAwLAorfTsKKworLyoKKyAqIERlZmluaXRpb24gb2Ygb25lIE1QQyBncm91cAorICovCisKKy8qCisgKiBDb21wYXRpYmlsaXR5IG1hY3JvcyBmb3IgYnVzeSBoYW5kbGluZworICogb2YgbmV0d29yayBkZXZpY2VzLgorICovCisKK3N0YXRpYyB2b2lkIGN0Y21wY191bnBhY2tfc2tiKHN0cnVjdCBjaGFubmVsICpjaCwgc3RydWN0IHNrX2J1ZmYgKnBza2IpOworCisvKgorICogTVBDIEdyb3VwIHN0YXRlIG1hY2hpbmUgYWN0aW9ucyAoc3RhdGljIHByb3RvdHlwZXMpCisgKi8KK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25fbm9wKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX2dvX3JlYWR5KGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX2dvX2lub3AoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgbXBjX2FjdGlvbl90aW1lb3V0KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQgIG1wY192YWxpZGF0ZV94aWQoc3RydWN0IG1wY2dfaW5mbyAqbXBjZ2luZm8pOworc3RhdGljIHZvaWQgbXBjX2FjdGlvbl95c2lkZV94aWQoZnNtX2luc3RhbmNlICpmc20sIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25fZG94aWQwKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX2RveGlkNyhmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgbXBjX2FjdGlvbl94c2lkZV94aWQoZnNtX2luc3RhbmNlICpmc20sIGludCBldmVudCwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25fcmN2ZF94aWQwKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX3JjdmRfeGlkNyhmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpOworCisjaWZkZWYgREVCVUdEQVRBCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisqIER1bXAgYnVmZmVyIGZvcm1hdAkJCQkJCSAgICAgKgorKgkJCQkJCQkJICAgICAqCisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBjdGNtcGNfZHVtcGl0KGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlfX3UzMgljdCwgc3csIHJtLCBkdXA7CisJY2hhcgkqcHRyLCAqcnB0cjsKKwljaGFyCXRidWZbODJdLCB0ZHVwWzgyXTsKKwkjaWYgKFVUU19NQUNISU5FID09IHMzOTB4KQorCWNoYXIJYWRkclsyMl07CisJI2Vsc2UKKwljaGFyCWFkZHJbMTJdOworCSNlbmRpZgorCWNoYXIJYm9mZlsxMl07CisJY2hhcgliaGV4WzgyXSwgZHVwaGV4WzgyXTsKKwljaGFyCWJhc2NbNDBdOworCisJc3cgID0gMDsKKwlycHRyID0gcHRyID0gYnVmOworCXJtICA9IDE2OworCWR1cGhleFswXSA9IDB4MDA7CisJZHVwID0gMDsKKworCWZvciAoY3QgPSAwOyBjdCA8IGxlbjsgY3QrKywgcHRyKyssIHJwdHIrKykgeworCQlpZiAoc3cgPT0gMCkgeworCQkJI2lmIChVVFNfTUFDSElORSA9PSBzMzkweCkKKwkJCXNwcmludGYoYWRkciwgIiUxNi4xNmx4IiwgKHVuc2lnbmVkIGxvbmcpcnB0cik7CisJCQkjZWxzZQorCQkJc3ByaW50ZihhZGRyLCAiJTguOFgiLCAoX191MzIpcnB0cik7CisJCQkjZW5kaWYKKworCQkJc3ByaW50Zihib2ZmLCAiJTQuNFgiLCAoX191MzIpY3QpOworCQkJYmhleFswXSA9ICdcMCc7CisJCQliYXNjWzBdID0gJ1wwJzsKKwkJfQorCQlpZiAoKHN3ID09IDQpIHx8IChzdyA9PSAxMikpCisJCQlzdHJjYXQoYmhleCwgIiAiKTsKKwkJaWYgKHN3ID09IDgpCisJCQlzdHJjYXQoYmhleCwgIgkiKTsKKworCQkjaWYgKFVUU19NQUNISU5FID09IHMzOTB4KQorCQlzcHJpbnRmKHRidWYsICIlMi4ybFgiLCAodW5zaWduZWQgbG9uZykqcHRyKTsKKwkJI2Vsc2UKKwkJc3ByaW50Zih0YnVmLCAiJTIuMlgiLCAoX191MzIpKnB0cik7CisJCSNlbmRpZgorCisJCXRidWZbMl0gPSAnXDAnOworCQlzdHJjYXQoYmhleCwgdGJ1Zik7CisJCWlmICgoMCAhPSBpc3ByaW50KCpwdHIpKSAmJiAoKnB0ciA+PSAweDIwKSkKKwkJCWJhc2Nbc3ddID0gKnB0cjsKKwkJZWxzZQorCQkJYmFzY1tzd10gPSAnLic7CisKKwkJYmFzY1tzdysxXSA9ICdcMCc7CisJCXN3Kys7CisJCXJtLS07CisJCWlmIChzdyA9PSAxNikgeworCQkJaWYgKChzdHJjbXAoZHVwaGV4LCBiaGV4KSkgIT0gMCkgeworCQkJCWlmIChkdXAgIT0gMCkgeworCQkJCQlzcHJpbnRmKHRkdXAsICJEdXBsaWNhdGUgYXMgYWJvdmUgIgorCQkJCQkJInRvICVzIiwgYWRkcik7CisJCQkJCXByaW50ayhLRVJOX0lORk8gIgkJICAiCisJCQkJCQkiICAgICAtLS0gJXMgLS0tXG4iLCB0ZHVwKTsKKwkJCQl9CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgJXMgKCslcykgOiAlcyAgWyVzXVxuIiwKKwkJCQkJYWRkciwgYm9mZiwgYmhleCwgYmFzYyk7CisJCQkJZHVwID0gMDsKKwkJCQlzdHJjcHkoZHVwaGV4LCBiaGV4KTsKKwkJCX0gZWxzZQorCQkJCWR1cCsrOworCisJCQlzdyA9IDA7CisJCQlybSA9IDE2OworCQl9CisJfSAgLyogZW5kZm9yICovCisKKwlpZiAoc3cgIT0gMCkgeworCQlmb3IgKCA7IHJtID4gMDsgcm0tLSwgc3crKykgeworCQkJaWYgKChzdyA9PSA0KSB8fCAoc3cgPT0gMTIpKQorCQkJCXN0cmNhdChiaGV4LCAiICIpOworCQkJaWYgKHN3ID09IDgpCisJCQkJc3RyY2F0KGJoZXgsICIJIik7CisJCQlzdHJjYXQoYmhleCwgIgkiKTsKKwkJCXN0cmNhdChiYXNjLCAiICIpOworCQl9CisJCWlmIChkdXAgIT0gMCkgeworCQkJc3ByaW50Zih0ZHVwLCAiRHVwbGljYXRlIGFzIGFib3ZlIHRvICVzIiwgYWRkcik7CisJCQlwcmludGsoS0VSTl9JTkZPICIJCSAgIgorCQkJCSIgICAgIC0tLSAlcyAtLS1cbiIsIHRkdXApOworCQl9CisJCXByaW50ayhLRVJOX0lORk8gIiAgICVzICgrJXMpIDogJXMgIFslc11cbiIsCisJCQlhZGRyLCBib2ZmLCBiaGV4LCBiYXNjKTsKKwl9IGVsc2UgeworCQlpZiAoZHVwID49IDEpIHsKKwkJCXNwcmludGYodGR1cCwgIkR1cGxpY2F0ZSBhcyBhYm92ZSB0byAlcyIsIGFkZHIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiCQkgICIKKwkJCQkiICAgICAtLS0gJXMgLS0tXG4iLCB0ZHVwKTsKKwkJfQorCQlpZiAoZHVwICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiAgICVzICgrJXMpIDogJXMgIFslc11cbiIsCisJCQkJYWRkciwgYm9mZiwgYmhleCwgYmFzYyk7CisJCX0KKwl9CisKKwlyZXR1cm47CisKK30gICAvKgkgZW5kIG9mIGN0Y21wY19kdW1waXQgICovCisjZW5kaWYKKworI2lmZGVmIERFQlVHREFUQQorLyoKKyAqIER1bXAgaGVhZGVyIGFuZCBmaXJzdCAxNiBieXRlcyBvZiBhbiBza19idWZmIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgKgorICogc2tiCQlUaGUgc2tfYnVmZiB0byBkdW1wLgorICogb2Zmc2V0CU9mZnNldCByZWxhdGl2ZSB0byBza2ItZGF0YSwgd2hlcmUgdG8gc3RhcnQgdGhlIGR1bXAuCisgKi8KK3ZvaWQgY3RjbXBjX2R1bXBfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCit7CisJdW5zaWduZWQgY2hhciAqcCA9IHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgdGhfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IHBkdSAqcGhlYWRlcjsKKwlpbnQgYmwgPSBza2ItPmxlbjsKKwlpbnQgaTsKKworCWlmIChwID09IE5VTEwpCisJCXJldHVybjsKKworCXAgKz0gb2Zmc2V0OworCWhlYWRlciA9IChzdHJ1Y3QgdGhfaGVhZGVyICopcDsKKworCXByaW50ayhLRVJOX0lORk8gImR1bXA6XG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJza2IgbGVuPSVkIFxuIiwgc2tiLT5sZW4pOworCWlmIChza2ItPmxlbiA+IDIpIHsKKwkJc3dpdGNoIChoZWFkZXItPnRoX2NoX2ZsYWcpIHsKKwkJY2FzZSBUSF9IQVNfUERVOgorCQkJYnJlYWs7CisJCWNhc2UgMHgwMDoKKwkJY2FzZSBUSF9JU19YSUQ6CisJCQlpZiAoKGhlYWRlci0+dGhfYmxrX2ZsYWcgPT0gVEhfREFUQV9JU19YSUQpICYmCisJCQkgICAoaGVhZGVyLT50aF9pc194aWQgPT0gMHgwMSkpCisJCQkJZ290byBkdW1wdGg7CisJCWNhc2UgVEhfU1dFRVBfUkVROgorCQkJCWdvdG8gZHVtcHRoOworCQljYXNlIFRIX1NXRUVQX1JFU1A6CisJCQkJZ290byBkdW1wdGg7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCXBoZWFkZXIgPSAoc3RydWN0IHBkdSAqKXA7CisJCXByaW50ayhLRVJOX0lORk8gInBkdS0+b2Zmc2V0OiAlZCBoZXg6ICUwNHhcbiIsCisJCSAgICAgICBwaGVhZGVyLT5wZHVfb2Zmc2V0LCBwaGVhZGVyLT5wZHVfb2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGR1LT5mbGFnICA6ICUwMnhcbiIsIHBoZWFkZXItPnBkdV9mbGFnKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGR1LT5wcm90byA6ICUwMnhcbiIsIHBoZWFkZXItPnBkdV9wcm90byk7CisJCXByaW50ayhLRVJOX0lORk8gInBkdS0+c2VxICAgOiAlMDJ4XG4iLCBwaGVhZGVyLT5wZHVfc2VxKTsKKwkJCQkJZ290byBkdW1wZGF0YTsKKworZHVtcHRoOgorCQlwcmludGsoS0VSTl9JTkZPICJ0aC0+c2VnICAgICA6ICUwMnhcbiIsIGhlYWRlci0+dGhfc2VnKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidGgtPmNoICAgICAgOiAlMDJ4XG4iLCBoZWFkZXItPnRoX2NoX2ZsYWcpOworCQlwcmludGsoS0VSTl9JTkZPICJ0aC0+YmxrX2ZsYWc6ICUwMnhcbiIsIGhlYWRlci0+dGhfYmxrX2ZsYWcpOworCQlwcmludGsoS0VSTl9JTkZPICJ0aC0+dHlwZSAgICA6ICVzXG4iLAorCQkgICAgICAgKGhlYWRlci0+dGhfaXNfeGlkKSA/ICJEQVRBIiA6ICJYSUQiKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidGgtPnNlcW51bSAgOiAlMDR4XG4iLCBoZWFkZXItPnRoX3NlcV9udW0pOworCisJfQorZHVtcGRhdGE6CisJaWYgKGJsID4gMzIpCisJCWJsID0gMzI7CisJcHJpbnRrKEtFUk5fSU5GTyAiZGF0YTogIik7CisJZm9yIChpID0gMDsgaSA8IGJsOyBpKyspCisJCXByaW50ayhLRVJOX0lORk8gIiUwMnglcyIsICpwKyssIChpICUgMTYpID8gIiAiIDogIlxuPDc+Iik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKK30KKyNlbmRpZgorCisvKgorICogY3RjX21wY19hbGxvY19jaGFubmVsCisgKgkoZXhwb3J0ZWQgaW50ZXJmYWNlKQorICoKKyAqIERldmljZSBJbml0aWFsaXphdGlvbiA6CisgKglBQ1RQQVRIICBkcml2ZW4gSU8gb3BlcmF0aW9ucworICovCitpbnQgY3RjX21wY19hbGxvY19jaGFubmVsKGludCBwb3J0X251bSwgdm9pZCAoKmNhbGxiYWNrKShpbnQsIGludCkpCit7CisJY2hhciBkZXZpY2VbMjBdOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG1wY19ncm91cCAqZ3JwOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXY7CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6CSVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcHJpbnRmKGRldmljZSwgIiVzJWkiLCBNUENfREVWSUNFX05BTUUsIHBvcnRfbnVtKTsKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGRldmljZSk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjX21wY19hbGxvY19jaGFubmVsICVzIGRldj1OVUxMXG4iLCBkZXZpY2UpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcml2ID0gZGV2LT5wcml2OworCWdycCA9IHByaXYtPm1wY2c7CisJaWYgKCFncnApCisJCXJldHVybiAxOworCisJZ3JwLT5hbGxvY2hhbmZ1bmMgPSBjYWxsYmFjazsKKwlncnAtPnBvcnRfbnVtID0gcG9ydF9udW07CisJZ3JwLT5wb3J0X3BlcnNpc3QgPSAxOworCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcyBjYWxsZWQgZm9yIGRldmljZSAlcyBzdGF0ZT0lc1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGRldi0+bmFtZSwKKwkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pKTsKKworCXN3aXRjaCAoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSkgeworCWNhc2UgTVBDR19TVEFURV9JTk9QOgorCQkvKiBHcm91cCBpcyBpbiB0aGUgcHJvY2VzcyBvZiB0ZXJtaW5hdGluZyAqLworCQlncnAtPmFsbG9jX2NhbGxlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgTVBDR19TVEFURV9SRVNFVDoKKwkJLyogTVBDIEdyb3VwIHdpbGwgdHJhbnNpdGlvbiB0byBzdGF0ZQkJICAqLworCQkvKiBNUENHX1NUQVRFX1hJRDJJTklUVyBpZmYgdGhlIG1pbmltdW0gbnVtYmVyCSAgKi8KKwkJLyogb2YgMSByZWFkIGFuZCAxIHdyaXRlIGNoYW5uZWwgaGF2ZSBzdWNjZXNzZnVsbHkqLworCQkvKiBhY3RpdmF0ZWQJCQkJCSAgKi8KKwkJLypmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfWElEMklOSVRXKTsqLworCQlpZiAoY2FsbGJhY2spCisJCQlncnAtPnNlbmRfcWxsY19kaXNjID0gMTsKKwljYXNlIE1QQ0dfU1RBVEVfWElEMElPV0FJVDoKKwkJZnNtX2RlbHRpbWVyKCZncnAtPnRpbWVyKTsKKwkJZ3JwLT5vdXRzdGFuZGluZ194aWQyID0gMDsKKwkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3ID0gMDsKKwkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyID0gMDsKKwkJZ3JwLT5zYXZlZF94aWQyID0gTlVMTDsKKwkJaWYgKGNhbGxiYWNrKQorCQkJY3RjbV9vcGVuKGRldik7CisJCWZzbV9ldmVudChwcml2LT5mc20sIERFVl9FVkVOVF9TVEFSVCwgZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBNUENHX1NUQVRFX1JFQURZOgorCQkvKiBYSUQgZXhjaGFuZ2VzIGNvbXBsZXRlZCBhZnRlciBQT1JUIHdhcyBhY3RpdmF0ZWQgKi8KKwkJLyogTGluayBzdGF0aW9uIGFscmVhZHkgYWN0aXZlCQkJICAgICovCisJCS8qIE1heWJlIHRpbWluZyBpc3N1ZS4uLnJldHJ5IGNhbGxiYWNrCQkgICAgKi8KKwkJZ3JwLT5hbGxvY2NoYW5fY2FsbGJhY2tfcmV0cmllcysrOworCQlpZiAoZ3JwLT5hbGxvY2NoYW5fY2FsbGJhY2tfcmV0cmllcyA8IDQpIHsKKwkJCWlmIChncnAtPmFsbG9jaGFuZnVuYykKKwkJCQlncnAtPmFsbG9jaGFuZnVuYyhncnAtPnBvcnRfbnVtLAorCQkJCQkgICAgICBncnAtPmdyb3VwX21heF9idWZsZW4pOworCQl9IGVsc2UgeworCQkJLyogdGhlcmUgYXJlIHByb2JsZW1zLi4uYmFpbCBvdXQJICAgICovCisJCQkvKiB0aGVyZSBtYXkgYmUgYSBzdGF0ZSBtaXNtYXRjaCBzbyByZXN0YXJ0ICovCisJCQlncnAtPnBvcnRfcGVyc2lzdCA9IDE7CisJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJCWdycC0+YWxsb2NjaGFuX2NhbGxiYWNrX3JldHJpZXMgPSAwOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCisJfQorCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjdGNfbXBjX2FsbG9jX2NoYW5uZWwpOworCisvKgorICogY3RjX21wY19lc3RhYmxpc2hfY29ubmVjdGl2aXR5CisgKgkoZXhwb3J0ZWQgaW50ZXJmYWNlKQorICovCit2b2lkIGN0Y19tcGNfZXN0YWJsaXNoX2Nvbm5lY3Rpdml0eShpbnQgcG9ydF9udW0sCisJCQkJdm9pZCAoKmNhbGxiYWNrKShpbnQsIGludCwgaW50KSkKK3sKKwljaGFyIGRldmljZVsyMF07CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICpncnA7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgY2hhbm5lbCAqcmNoLCAqd2NoOworCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOgklcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3ByaW50ZihkZXZpY2UsICIlcyVpIiwgTVBDX0RFVklDRV9OQU1FLCBwb3J0X251bSk7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBkZXZpY2UpOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gImN0Y19tcGNfZXN0YWJsaXNoX2Nvbm5lY3Rpdml0eSAiCisJCQkJIiVzIGRldj1OVUxMXG4iLCBkZXZpY2UpOworCQlyZXR1cm47CisJfQorCXByaXYgPSBkZXYtPnByaXY7CisJcmNoID0gcHJpdi0+Y2hhbm5lbFtSRUFEXTsKKwl3Y2ggPSBwcml2LT5jaGFubmVsW1dSSVRFXTsKKworCWdycCA9IHByaXYtPm1wY2c7CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgY2FsbGVkIGZvciBkZXZpY2UgJXMgc3RhdGU9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSwKKwkJCWZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pKTsKKworCWdycC0+ZXN0Y29ubmZ1bmMgPSBjYWxsYmFjazsKKwlncnAtPnBvcnRfbnVtID0gcG9ydF9udW07CisKKwlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkpIHsKKwljYXNlIE1QQ0dfU1RBVEVfUkVBRFk6CisJCS8qIFhJRCBleGNoYW5nZXMgY29tcGxldGVkIGFmdGVyIFBPUlQgd2FzIGFjdGl2YXRlZCAqLworCQkvKiBMaW5rIHN0YXRpb24gYWxyZWFkeSBhY3RpdmUJCQkgICAgKi8KKwkJLyogTWF5YmUgdGltaW5nIGlzc3VlLi4ucmV0cnkgY2FsbGJhY2sJCSAgICAqLworCQlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOworCQlncnAtPmVzdGNvbm5fY2FsbGJhY2tfcmV0cmllcysrOworCQlpZiAoZ3JwLT5lc3Rjb25uX2NhbGxiYWNrX3JldHJpZXMgPCA0KSB7CisJCQlpZiAoZ3JwLT5lc3Rjb25uZnVuYykgeworCQkJCWdycC0+ZXN0Y29ubmZ1bmMoZ3JwLT5wb3J0X251bSwgMCwKKwkJCQkJCWdycC0+Z3JvdXBfbWF4X2J1Zmxlbik7CisJCQkJZ3JwLT5lc3Rjb25uZnVuYyA9IE5VTEw7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB0aGVyZSBhcmUgcHJvYmxlbXMuLi5iYWlsIG91dAkgKi8KKwkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCQkJZ3JwLT5lc3Rjb25uX2NhbGxiYWNrX3JldHJpZXMgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgTVBDR19TVEFURV9JTk9QOgorCWNhc2UgTVBDR19TVEFURV9SRVNFVDoKKwkJLyogTVBDIEdyb3VwIGlzIG5vdCByZWFkeSB0byBzdGFydCBYSUQgLSBtaW4gbnVtIG9mICovCisJCS8qIDEgcmVhZCBhbmQgMSB3cml0ZSBjaGFubmVsIGhhdmUgbm90IGJlZW4gYWNxdWlyZWQqLworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdGNtcGM6ICVzKCkgUkVKRUNURUQgQUNUSVZFIFhJRCBSZXEiCisJCQkidWVzdCAtIENoYW5uZWwgUGFpciBpcyBub3QgQWN0aXZlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAoZ3JwLT5lc3Rjb25uZnVuYykgeworCQkJZ3JwLT5lc3Rjb25uZnVuYyhncnAtPnBvcnRfbnVtLCAtMSwgMCk7CisJCQlncnAtPmVzdGNvbm5mdW5jID0gTlVMTDsKKwkJfQorCQlicmVhazsKKwljYXNlIE1QQ0dfU1RBVEVfWElEMklOSVRXOgorCQkvKiBhbGxvYyBjaGFubmVsIHdhcyBjYWxsZWQgYnV0IG5vIFhJRCBleGNoYW5nZSAgICAqLworCQkvKiBoYXMgb2NjdXJyZWQuIGluaXRpYXRlIHhzaWRlIFhJRCBleGNoYW5nZQkgICAqLworCQkvKiBtYWtlIHN1cmUgeXNpZGUgWElEMCBwcm9jZXNzaW5nIGhhcyBub3Qgc3RhcnRlZCAqLworCQlpZiAoKGZzbV9nZXRzdGF0ZShyY2gtPmZzbSkgPiBDSF9YSUQwX1BFTkRJTkcpIHx8CisJCQkoZnNtX2dldHN0YXRlKHdjaC0+ZnNtKSA+IENIX1hJRDBfUEVORElORykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1wYzogJXMoKSBBQk9SVCBBQ1RJVkUgWElEIgorCQkJICAgICAgICIgUmVxdWVzdC0gUEFTU0lWRSBYSUQgaW4gcHJvY2Vzc1xuIgorCQkJICAgICAgICwgX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCQl9CisJCWdycC0+c2VuZF9xbGxjX2Rpc2MgPSAxOworCQlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfWElEMElPV0FJVCk7CisJCWZzbV9kZWx0aW1lcigmZ3JwLT50aW1lcik7CisJCWZzbV9hZGR0aW1lcigmZ3JwLT50aW1lciwgTVBDX1hJRF9USU1FT1VUX1ZBTFVFLAorCQkJCQkJTVBDR19FVkVOVF9USU1FUiwgZGV2KTsKKwkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3ID0gMDsKKwkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyID0gMDsKKwkJZ3JwLT5zYXZlZF94aWQyID0gTlVMTDsKKwkJaWYgKChyY2gtPmluX21wY2dyb3VwKSAmJgorCQkJCShmc21fZ2V0c3RhdGUocmNoLT5mc20pID09IENIX1hJRDBfUEVORElORykpCisJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfWElEMERPLCByY2gpOworCQllbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1wYzogJXMoKSBVbmFibGUgdG8gc3RhcnQiCisJCQkgICAgICAgIiBBQ1RJVkUgWElEMCBvbiByZWFkIGNoYW5uZWxcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCWlmIChncnAtPmVzdGNvbm5mdW5jKSB7CisJCQkJZ3JwLT5lc3Rjb25uZnVuYyhncnAtPnBvcnRfbnVtLCAtMSwgMCk7CisJCQkJZ3JwLT5lc3Rjb25uZnVuYyA9IE5VTEw7CisJCQl9CisJCQlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOworCQkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAoKHdjaC0+aW5fbXBjZ3JvdXApICYmCisJCQkJKGZzbV9nZXRzdGF0ZSh3Y2gtPmZzbSkgPT0gQ0hfWElEMF9QRU5ESU5HKSkKKwkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9YSUQwRE8sIHdjaCk7CisJCWVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXBjOiAlcygpIFVuYWJsZSB0byBzdGFydCIKKwkJCQkiIEFDVElWRSBYSUQwIG9uIHdyaXRlIGNoYW5uZWxcbiIsCisJCQkJCV9fRlVOQ1RJT05fXyk7CisJCQlpZiAoZ3JwLT5lc3Rjb25uZnVuYykgeworCQkJCWdycC0+ZXN0Y29ubmZ1bmMoZ3JwLT5wb3J0X251bSwgLTEsIDApOworCQkJCWdycC0+ZXN0Y29ubmZ1bmMgPSBOVUxMOworCQkJfQorCQkJZnNtX2RlbHRpbWVyKCZncnAtPnRpbWVyKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCWJyZWFrOworCWNhc2UgTVBDR19TVEFURV9YSUQwSU9XQUlUOgorCQkvKiBhbHJlYWR5IGluIGFjdGl2ZSBYSUQgbmVnb3RpYXRpb25zICovCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitkb25lOgorCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiAgJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MKGN0Y19tcGNfZXN0YWJsaXNoX2Nvbm5lY3Rpdml0eSk7CisKKy8qCisgKiBjdGNfbXBjX2RlYWxsb2NfY2gKKyAqCShleHBvcnRlZCBpbnRlcmZhY2UpCisgKi8KK3ZvaWQgY3RjX21wY19kZWFsbG9jX2NoKGludCBwb3J0X251bSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWNoYXIgZGV2aWNlWzIwXTsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjoJJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlzcHJpbnRmKGRldmljZSwgIiVzJWkiLCBNUENfREVWSUNFX05BTUUsIHBvcnRfbnVtKTsKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGRldmljZSk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSAlcyBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fLCBkZXZpY2UpOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiVzICVzKCkgY2FsbGVkIGZvciBkZXZpY2UgJXMgcmVmY291bnQ9JWRcbiIsCisJCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXywKKwkJCWRldi0+bmFtZSwgYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSk7CisKKwlwcml2ID0gZGV2LT5wcml2OworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSAlcyBwcml2PU5VTExcbiIsCisJCQkJX19GVU5DVElPTl9fLCBkZXZpY2UpOworCQkJCQlnb3RvIGRvbmU7CisJfQorCWZzbV9kZWx0aW1lcigmcHJpdi0+cmVzdGFydF90aW1lcik7CisKKwlncnAgPSBwcml2LT5tcGNnOworCWlmIChncnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcygpICVzIGRldj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18sIGRldmljZSk7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisJZ3JwLT5jaGFubmVsc190ZXJtaW5hdGluZyA9IDA7CisKKwlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOworCisJZ3JwLT5hbGxvY2hhbmZ1bmMgPSBOVUxMOworCWdycC0+ZXN0Y29ubmZ1bmMgPSBOVUxMOworCWdycC0+cG9ydF9wZXJzaXN0ID0gMDsKKwlncnAtPnNlbmRfcWxsY19kaXNjID0gMDsKKwlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKworCWN0Y21fY2xvc2UoZGV2KTsKK2RvbmU6CisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0woY3RjX21wY19kZWFsbG9jX2NoKTsKKworLyoKKyAqIGN0Y19tcGNfZmxvd19jb250cm9sCisgKgkoZXhwb3J0ZWQgaW50ZXJmYWNlKQorICovCit2b2lkIGN0Y19tcGNfZmxvd19jb250cm9sKGludCBwb3J0X251bSwgaW50IGZsb3djKQoreworCWNoYXIgZGV2aWNlWzIwXTsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjaGFubmVsICpyY2g7CisJaW50IG1wY2dfc3RhdGU7CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6CSVzKCkgJWlcbiIsIF9fRlVOQ1RJT05fXywgZmxvd2MpOworCisJc3ByaW50ZihkZXZpY2UsICIlcyVpIiwgTVBDX0RFVklDRV9OQU1FLCBwb3J0X251bSk7CisJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBkZXZpY2UpOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gImN0Y19tcGNfZmxvd19jb250cm9sICVzIGRldj1OVUxMXG4iLCBkZXZpY2UpOworCQlyZXR1cm47CisJfQorCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcyAlcyBjYWxsZWQgXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlwcml2ICA9IGRldi0+cHJpdjsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gImN0Y21wYzolcygpICVzIHByaXY9TlVMTFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgZGV2aWNlKTsKKwkJcmV0dXJuOworCX0KKwlncnAgPSBwcml2LT5tcGNnOworCXJjaCA9IHByaXYtPmNoYW5uZWxbUkVBRF07CisKKwltcGNnX3N0YXRlID0gZnNtX2dldHN0YXRlKGdycC0+ZnNtKTsKKwlzd2l0Y2ggKGZsb3djKSB7CisJY2FzZSAxOgorCQlpZiAobXBjZ19zdGF0ZSA9PSBNUENHX1NUQVRFX0ZMT1dDKQorCQkJYnJlYWs7CisJCWlmIChtcGNnX3N0YXRlID09IE1QQ0dfU1RBVEVfUkVBRFkpIHsKKwkJCWlmIChncnAtPmZsb3dfb2ZmX2NhbGxlZCA9PSAxKQorCQkJCWdycC0+Zmxvd19vZmZfY2FsbGVkID0gMDsKKwkJCWVsc2UKKwkJCQlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfRkxPV0MpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAwOgorCQlpZiAobXBjZ19zdGF0ZSA9PSBNUENHX1NUQVRFX0ZMT1dDKSB7CisJCQlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfUkVBRFkpOworCQkJLyogZW5zdXJlIGFueSBkYXRhIHRoYXQgaGFzIGFjY3VtdWxhdGVkICovCisJCQkvKiBvbiB0aGUgaW9fcXVldWUgd2lsbCBub3cgYmUgc2VuIHQJKi8KKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnJjaC0+Y2hfdGFza2xldCk7CisJCX0KKwkJLyogcG9zc2libGUgcmFjZSBjb25kaXRpb24JCQkqLworCQlpZiAobXBjZ19zdGF0ZSA9PSBNUENHX1NUQVRFX1JFQURZKSB7CisJCQlncnAtPmZsb3dfb2ZmX2NhbGxlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogICVzKCkgJWlcbiIsIF9fRlVOQ1RJT05fXywgZmxvd2MpOworfQorRVhQT1JUX1NZTUJPTChjdGNfbXBjX2Zsb3dfY29udHJvbCk7CisKK3N0YXRpYyBpbnQgbXBjX3NlbmRfcWxsY19kaXNjb250YWN0KHN0cnVjdCBuZXRfZGV2aWNlICopOworCisvKgorICogaGVscGVyIGZ1bmN0aW9uIG9mIGN0Y21wY191bnBhY2tfc2tiCisqLworc3RhdGljIHZvaWQgbXBjX3JjdmRfc3dlZXBfcmVzcChzdHJ1Y3QgbXBjZ19pbmZvICptcGNnaW5mbykKK3sKKwlzdHJ1Y3QgY2hhbm5lbAkgICpyY2ggPSBtcGNnaW5mby0+Y2g7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgICAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICAqZ3JwID0gcHJpdi0+bXBjZzsKKwlzdHJ1Y3QgY2hhbm5lbAkgICpjaCA9IHByaXYtPmNoYW5uZWxbV1JJVEVdOworCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworCisJaWYgKGRvX2RlYnVnX2RhdGEpCisJCWN0Y21wY19kdW1waXQoKGNoYXIgKiltcGNnaW5mby0+c3dlZXAsIFRIX1NXRUVQX0xFTkdUSCk7CisKKwlncnAtPnN3ZWVwX3JzcF9wZW5kX251bS0tOworCisJaWYgKChncnAtPnN3ZWVwX3JlcV9wZW5kX251bSA9PSAwKSAmJgorCQkJKGdycC0+c3dlZXBfcnNwX3BlbmRfbnVtID09IDApKSB7CisJCWZzbV9kZWx0aW1lcigmY2gtPnN3ZWVwX3RpbWVyKTsKKwkJZ3JwLT5pbl9zd2VlcCA9IDA7CisJCXJjaC0+dGhfc2VxX251bSA9IDB4MDA7CisJCWNoLT50aF9zZXFfbnVtID0gMHgwMDsKKwkJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7CisJfQorCisJa2ZyZWUobXBjZ2luZm8pOworCisJcmV0dXJuOworCit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gb2YgbXBjX3JjdmRfc3dlZXBfcmVxCisgKiB3aGljaCBpcyBhIGhlbHBlciBvZiBjdGNtcGNfdW5wYWNrX3NrYgorICovCitzdGF0aWMgdm9pZCBjdGNtcGNfc2VuZF9zd2VlcF9yZXNwKHN0cnVjdCBjaGFubmVsICpyY2gpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAqZ3JwID0gcHJpdi0+bXBjZzsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCB0aF9zd2VlcCAqaGVhZGVyOworCXN0cnVjdCBza19idWZmICpzd2VlcF9za2I7CisJc3RydWN0IGNoYW5uZWwgKmNoICA9IHByaXYtPmNoYW5uZWxbV1JJVEVdOworCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdCA6ICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJjaCwgcmNoLT5pZCk7CisKKwlzd2VlcF9za2IgPSBfX2Rldl9hbGxvY19za2IoTVBDX0JVRlNJWkVfREVGQVVMVCwKKwkJCQkgICAgR0ZQX0FUT01JQ3xHRlBfRE1BKTsKKwlpZiAoc3dlZXBfc2tiID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGRuJ3QgYWxsb2Mgc3dlZXBfc2tiXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQkJCWdvdG8gZG9uZTsKKwl9CisKKwloZWFkZXIgPSAoc3RydWN0IHRoX3N3ZWVwICopCisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGhfc3dlZXApLCBnZnBfdHlwZSgpKTsKKworCWlmICghaGVhZGVyKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHN3ZWVwX3NrYik7CisJCXJjID0gLUVOT01FTTsKKwkJCQlnb3RvIGRvbmU7CisJfQorCisJaGVhZGVyLT50aC50aF9zZWcJPSAweDAwIDsKKwloZWFkZXItPnRoLnRoX2NoX2ZsYWcJPSBUSF9TV0VFUF9SRVNQOworCWhlYWRlci0+dGgudGhfYmxrX2ZsYWcJPSAweDAwOworCWhlYWRlci0+dGgudGhfaXNfeGlkCT0gMHgwMDsKKwloZWFkZXItPnRoLnRoX3NlcV9udW0JPSAweDAwOworCWhlYWRlci0+c3cudGhfbGFzdF9zZXEJPSBjaC0+dGhfc2VxX251bTsKKworCW1lbWNweShza2JfcHV0KHN3ZWVwX3NrYiwgVEhfU1dFRVBfTEVOR1RIKSwgaGVhZGVyLCBUSF9TV0VFUF9MRU5HVEgpOworCisJa2ZyZWUoaGVhZGVyKTsKKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXNrYl9xdWV1ZV90YWlsKCZjaC0+c3dlZXBfcXVldWUsIHN3ZWVwX3NrYik7CisKKwlmc21fYWRkdGltZXIoJmNoLT5zd2VlcF90aW1lciwgMTAwLCBDVENfRVZFTlRfUlNXRUVQX1RJTUVSLCBjaCk7CisKKwlyZXR1cm47CisKK2RvbmU6CisJaWYgKHJjICE9IDApIHsKKwkJZ3JwLT5pbl9zd2VlcCA9IDA7CisJCWN0Y21fY2xlYXJfYnVzeV9kbyhkZXYpOworCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gb2YgY3RjbXBjX3VucGFja19za2IKKyAqLworc3RhdGljIHZvaWQgbXBjX3JjdmRfc3dlZXBfcmVxKHN0cnVjdCBtcGNnX2luZm8gKm1wY2dpbmZvKQoreworCXN0cnVjdCBjaGFubmVsCSAgKnJjaCAgICAgPSBtcGNnaW5mby0+Y2g7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiAgICAgPSByY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICAqZ3JwICA9IHByaXYtPm1wY2c7CisJc3RydWN0IGNoYW5uZWwJICAqY2gJICAgPSBwcml2LT5jaGFubmVsW1dSSVRFXTsKKworCWlmIChkb19kZWJ1ZykKKwkJQ1RDTV9EQkZfVEVYVF8oTVBDX1RSQUNFLCBDVENfREJGX0RFQlVHLAorCQkJIiAlcygpOiBjaD0weCVwIGlkPSVzXG4iLCBfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworCisJaWYgKGdycC0+aW5fc3dlZXAgPT0gMCkgeworCQlncnAtPmluX3N3ZWVwID0gMTsKKwkJY3RjbV90ZXN0X2FuZF9zZXRfYnVzeShkZXYpOworCQlncnAtPnN3ZWVwX3JlcV9wZW5kX251bSA9IGdycC0+YWN0aXZlX2NoYW5uZWxzW1JFQURdOworCQlncnAtPnN3ZWVwX3JzcF9wZW5kX251bSA9IGdycC0+YWN0aXZlX2NoYW5uZWxzW1JFQURdOworCX0KKworCWlmIChkb19kZWJ1Z19kYXRhKQorCQljdGNtcGNfZHVtcGl0KChjaGFyICopbXBjZ2luZm8tPnN3ZWVwLCBUSF9TV0VFUF9MRU5HVEgpOworCisJZ3JwLT5zd2VlcF9yZXFfcGVuZF9udW0tLTsKKwljdGNtcGNfc2VuZF9zd2VlcF9yZXNwKGNoKTsKKwlrZnJlZShtcGNnaW5mbyk7CisJcmV0dXJuOworfQorCisvKgorICAqIE1QQyBHcm91cCBTdGF0aW9uIEZTTSBkZWZpbml0aW9ucworICovCitzdGF0aWMgY29uc3QgY2hhciAqbXBjZ19ldmVudF9uYW1lc1tdID0geworCVtNUENHX0VWRU5UX0lOT1BdCT0gIklOT1AgQ29uZGl0aW9uIiwKKwlbTVBDR19FVkVOVF9ESVNDT05DXQk9ICJEaXNjb250YWN0IFJlY2VpdmVkIiwKKwlbTVBDR19FVkVOVF9YSUQwRE9dCT0gIkNoYW5uZWwgQWN0aXZlIC0gU3RhcnQgWElEIiwKKwlbTVBDR19FVkVOVF9YSUQyXQk9ICJYSUQyIFJlY2VpdmVkIiwKKwlbTVBDR19FVkVOVF9YSUQyRE9ORV0JPSAiWElEMCBDb21wbGV0ZSIsCisJW01QQ0dfRVZFTlRfWElEN0RPTkVdCT0gIlhJRDcgQ29tcGxldGUiLAorCVtNUENHX0VWRU5UX1RJTUVSXQk9ICJYSUQgU2V0dXAgVGltZXIiLAorCVtNUENHX0VWRU5UX0RPSU9dCT0gIlhJRCBEb0lPIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICptcGNnX3N0YXRlX25hbWVzW10gPSB7CisJW01QQ0dfU1RBVEVfUkVTRVRdCT0gIlJlc2V0IiwKKwlbTVBDR19TVEFURV9JTk9QXQk9ICJJTk9QIiwKKwlbTVBDR19TVEFURV9YSUQySU5JVFddCT0gIlBhc3NpdmUgWElELSBYSUQwIFBlbmRpbmcgU3RhcnQiLAorCVtNUENHX1NUQVRFX1hJRDJJTklUWF0JPSAiUGFzc2l2ZSBYSUQtIFhJRDAgUGVuZGluZyBDb21wbGV0ZSIsCisJW01QQ0dfU1RBVEVfWElEN0lOSVRXXQk9ICJQYXNzaXZlIFhJRC0gWElENyBQZW5kaW5nIFAxIFN0YXJ0IiwKKwlbTVBDR19TVEFURV9YSUQ3SU5JVFhdCT0gIlBhc3NpdmUgWElELSBYSUQ3IFBlbmRpbmcgUDIgQ29tcGxldGUiLAorCVtNUENHX1NUQVRFX1hJRDBJT1dBSVRdCT0gIkFjdGl2ZSAgWElELSBYSUQwIFBlbmRpbmcgU3RhcnQiLAorCVtNUENHX1NUQVRFX1hJRDBJT1dBSVhdCT0gIkFjdGl2ZSAgWElELSBYSUQwIFBlbmRpbmcgQ29tcGxldGUiLAorCVtNUENHX1NUQVRFX1hJRDdJTklUSV0JPSAiQWN0aXZlICBYSUQtIFhJRDcgUGVuZGluZyBTdGFydCIsCisJW01QQ0dfU1RBVEVfWElEN0lOSVRaXQk9ICJBY3RpdmUgIFhJRC0gWElENyBQZW5kaW5nIENvbXBsZXRlICIsCisJW01QQ0dfU1RBVEVfWElEN0lOSVRGXQk9ICJYSUQgICAgICAgIC0gWElENyBDb21wbGV0ZSAiLAorCVtNUENHX1NUQVRFX0ZMT1dDXQk9ICJGTE9XIENPTlRST0wgT04iLAorCVtNUENHX1NUQVRFX1JFQURZXQk9ICJSRUFEWSIsCit9OworCisvKgorICogVGhlIE1QQyBHcm91cCBTdGF0aW9uIEZTTQorICogICAyMiBldmVudHMKKyAqLworc3RhdGljIGNvbnN0IGZzbV9ub2RlIG1wY2dfZnNtW10gPSB7CisJeyBNUENHX1NUQVRFX1JFU0VULAlNUENHX0VWRU5UX0lOT1AsCW1wY19hY3Rpb25fZ29faW5vcCAgICB9LAorCXsgTVBDR19TVEFURV9JTk9QLAlNUENHX0VWRU5UX0lOT1AsCW1wY19hY3Rpb25fbm9wICAgICAgICB9LAorCXsgTVBDR19TVEFURV9GTE9XQywJTVBDR19FVkVOVF9JTk9QLAltcGNfYWN0aW9uX2dvX2lub3AgICAgfSwKKworCXsgTVBDR19TVEFURV9SRUFEWSwJTVBDR19FVkVOVF9ESVNDT05DLAltcGNfYWN0aW9uX2Rpc2NvbnRhY3QgfSwKKwl7IE1QQ0dfU1RBVEVfUkVBRFksCU1QQ0dfRVZFTlRfSU5PUCwJbXBjX2FjdGlvbl9nb19pbm9wICAgIH0sCisKKwl7IE1QQ0dfU1RBVEVfWElEMklOSVRXLAlNUENHX0VWRU5UX1hJRDBETywJbXBjX2FjdGlvbl9kb3hpZDAgICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDJJTklUVywJTVBDR19FVkVOVF9YSUQyLAltcGNfYWN0aW9uX3JjdmRfeGlkMCAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEMklOSVRXLAlNUENHX0VWRU5UX0lOT1AsCW1wY19hY3Rpb25fZ29faW5vcCAgICB9LAorCXsgTVBDR19TVEFURV9YSUQySU5JVFcsCU1QQ0dfRVZFTlRfVElNRVIsCW1wY19hY3Rpb25fdGltZW91dCAgICB9LAorCXsgTVBDR19TVEFURV9YSUQySU5JVFcsCU1QQ0dfRVZFTlRfRE9JTywJbXBjX2FjdGlvbl95c2lkZV94aWQgIH0sCisKKwl7IE1QQ0dfU1RBVEVfWElEMklOSVRYLAlNUENHX0VWRU5UX1hJRDBETywJbXBjX2FjdGlvbl9kb3hpZDAgICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDJJTklUWCwJTVBDR19FVkVOVF9YSUQyLAltcGNfYWN0aW9uX3JjdmRfeGlkMCAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEMklOSVRYLAlNUENHX0VWRU5UX0lOT1AsCW1wY19hY3Rpb25fZ29faW5vcCAgICB9LAorCXsgTVBDR19TVEFURV9YSUQySU5JVFgsCU1QQ0dfRVZFTlRfVElNRVIsCW1wY19hY3Rpb25fdGltZW91dCAgICB9LAorCXsgTVBDR19TVEFURV9YSUQySU5JVFgsCU1QQ0dfRVZFTlRfRE9JTywJbXBjX2FjdGlvbl95c2lkZV94aWQgIH0sCisKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRXLAlNUENHX0VWRU5UX1hJRDJET05FLAltcGNfYWN0aW9uX2RveGlkNyAgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRXLAlNUENHX0VWRU5UX0RJU0NPTkMsCW1wY19hY3Rpb25fZGlzY29udGFjdCB9LAorCXsgTVBDR19TVEFURV9YSUQ3SU5JVFcsCU1QQ0dfRVZFTlRfWElEMiwJbXBjX2FjdGlvbl9yY3ZkX3hpZDcgIH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklUVywJTVBDR19FVkVOVF9JTk9QLAltcGNfYWN0aW9uX2dvX2lub3AgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRXLAlNUENHX0VWRU5UX1RJTUVSLAltcGNfYWN0aW9uX3RpbWVvdXQgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRXLAlNUENHX0VWRU5UX1hJRDdET05FLAltcGNfYWN0aW9uX2RveGlkNyAgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRXLAlNUENHX0VWRU5UX0RPSU8sCW1wY19hY3Rpb25feXNpZGVfeGlkICB9LAorCisJeyBNUENHX1NUQVRFX1hJRDdJTklUWCwJTVBDR19FVkVOVF9ESVNDT05DLAltcGNfYWN0aW9uX2Rpc2NvbnRhY3QgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRYLAlNUENHX0VWRU5UX1hJRDIsCW1wY19hY3Rpb25fcmN2ZF94aWQ3ICB9LAorCXsgTVBDR19TVEFURV9YSUQ3SU5JVFgsCU1QQ0dfRVZFTlRfSU5PUCwJbXBjX2FjdGlvbl9nb19pbm9wICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklUWCwJTVBDR19FVkVOVF9YSUQ3RE9ORSwJbXBjX2FjdGlvbl9kb3hpZDcgICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklUWCwJTVBDR19FVkVOVF9USU1FUiwJbXBjX2FjdGlvbl90aW1lb3V0ICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklUWCwJTVBDR19FVkVOVF9ET0lPLAltcGNfYWN0aW9uX3lzaWRlX3hpZCAgfSwKKworCXsgTVBDR19TVEFURV9YSUQwSU9XQUlULCBNUENHX0VWRU5UX1hJRDBETywJbXBjX2FjdGlvbl9kb3hpZDAgICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDBJT1dBSVQsIE1QQ0dfRVZFTlRfRElTQ09OQywJbXBjX2FjdGlvbl9kaXNjb250YWN0IH0sCisJeyBNUENHX1NUQVRFX1hJRDBJT1dBSVQsIE1QQ0dfRVZFTlRfWElEMiwJbXBjX2FjdGlvbl9yY3ZkX3hpZDAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDBJT1dBSVQsIE1QQ0dfRVZFTlRfSU5PUCwJbXBjX2FjdGlvbl9nb19pbm9wICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDBJT1dBSVQsIE1QQ0dfRVZFTlRfVElNRVIsCW1wY19hY3Rpb25fdGltZW91dCAgICB9LAorCXsgTVBDR19TVEFURV9YSUQwSU9XQUlULCBNUENHX0VWRU5UX0RPSU8sCW1wY19hY3Rpb25feHNpZGVfeGlkICB9LAorCisJeyBNUENHX1NUQVRFX1hJRDBJT1dBSVgsIE1QQ0dfRVZFTlRfWElEMERPLAltcGNfYWN0aW9uX2RveGlkMCAgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEMElPV0FJWCwgTVBDR19FVkVOVF9ESVNDT05DLAltcGNfYWN0aW9uX2Rpc2NvbnRhY3QgfSwKKwl7IE1QQ0dfU1RBVEVfWElEMElPV0FJWCwgTVBDR19FVkVOVF9YSUQyLAltcGNfYWN0aW9uX3JjdmRfeGlkMCAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEMElPV0FJWCwgTVBDR19FVkVOVF9JTk9QLAltcGNfYWN0aW9uX2dvX2lub3AgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEMElPV0FJWCwgTVBDR19FVkVOVF9USU1FUiwJbXBjX2FjdGlvbl90aW1lb3V0ICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDBJT1dBSVgsIE1QQ0dfRVZFTlRfRE9JTywJbXBjX2FjdGlvbl94c2lkZV94aWQgIH0sCisKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRJLAlNUENHX0VWRU5UX1hJRDJET05FLAltcGNfYWN0aW9uX2RveGlkNyAgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRJLAlNUENHX0VWRU5UX1hJRDIsCW1wY19hY3Rpb25fcmN2ZF94aWQ3ICB9LAorCXsgTVBDR19TVEFURV9YSUQ3SU5JVEksCU1QQ0dfRVZFTlRfRElTQ09OQywJbXBjX2FjdGlvbl9kaXNjb250YWN0IH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklUSSwJTVBDR19FVkVOVF9JTk9QLAltcGNfYWN0aW9uX2dvX2lub3AgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRJLAlNUENHX0VWRU5UX1RJTUVSLAltcGNfYWN0aW9uX3RpbWVvdXQgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRJLAlNUENHX0VWRU5UX1hJRDdET05FLAltcGNfYWN0aW9uX2RveGlkNyAgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRJLAlNUENHX0VWRU5UX0RPSU8sCW1wY19hY3Rpb25feHNpZGVfeGlkICB9LAorCisJeyBNUENHX1NUQVRFX1hJRDdJTklUWiwJTVBDR19FVkVOVF9YSUQyLAltcGNfYWN0aW9uX3JjdmRfeGlkNyAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRaLAlNUENHX0VWRU5UX1hJRDdET05FLAltcGNfYWN0aW9uX2RveGlkNyAgICAgfSwKKwl7IE1QQ0dfU1RBVEVfWElEN0lOSVRaLAlNUENHX0VWRU5UX0RJU0NPTkMsCW1wY19hY3Rpb25fZGlzY29udGFjdCB9LAorCXsgTVBDR19TVEFURV9YSUQ3SU5JVFosCU1QQ0dfRVZFTlRfSU5PUCwJbXBjX2FjdGlvbl9nb19pbm9wICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklUWiwJTVBDR19FVkVOVF9USU1FUiwJbXBjX2FjdGlvbl90aW1lb3V0ICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklUWiwJTVBDR19FVkVOVF9ET0lPLAltcGNfYWN0aW9uX3hzaWRlX3hpZCAgfSwKKworCXsgTVBDR19TVEFURV9YSUQ3SU5JVEYsCU1QQ0dfRVZFTlRfSU5PUCwJbXBjX2FjdGlvbl9nb19pbm9wICAgIH0sCisJeyBNUENHX1NUQVRFX1hJRDdJTklURiwJTVBDR19FVkVOVF9YSUQ3RE9ORSwJbXBjX2FjdGlvbl9nb19yZWFkeSAgIH0sCit9OworCitzdGF0aWMgaW50IG1wY2dfZnNtX2xlbiA9IEFSUkFZX1NJWkUobXBjZ19mc20pOworCisvKgorICogTVBDIEdyb3VwIFN0YXRpb24gRlNNIGFjdGlvbgorICogQ1RDTV9QUk9UT19NUEMgb25seQorICovCitzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX2dvX3JlYWR5KGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycCA9IE5VTEw7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMgICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCXByaXYgPSBkZXYtPnByaXY7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIHByaXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWdycCA9IHByaXYtPm1wY2c7CisJaWYgKGdycCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgZ3JwPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlmc21fZGVsdGltZXIoJmdycC0+dGltZXIpOworCisJaWYgKGdycC0+c2F2ZWRfeGlkMi0+eGlkMl9mbGFnMiA9PSAweDQwKSB7CisJCXByaXYtPnhpZC0+eGlkMl9mbGFnMiA9IDB4MDA7CisJCWlmIChncnAtPmVzdGNvbm5mdW5jKSB7CisJCQlncnAtPmVzdGNvbm5mdW5jKGdycC0+cG9ydF9udW0sIDEsCisJCQkJCWdycC0+Z3JvdXBfbWF4X2J1Zmxlbik7CisJCQlncnAtPmVzdGNvbm5mdW5jID0gTlVMTDsKKwkJfSBlbHNlIGlmIChncnAtPmFsbG9jaGFuZnVuYykKKwkJCWdycC0+c2VuZF9xbGxjX2Rpc2MgPSAxOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJZ3JwLT5wb3J0X3BlcnNpc3QgPSAxOworCWdycC0+b3V0X29mX3NlcXVlbmNlID0gMDsKKwlncnAtPmVzdGNvbm5fY2FsbGVkID0gMDsKKworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmdycC0+bXBjX3Rhc2tsZXQyKTsKKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiAlcyAgJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCXJldHVybjsKKworZG9uZToKKwlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKworCisJY3RjbV9wcl9pbmZvKCJjdGNtcGM6ICVzKClmYWlsdXJlIG9jY3VycmVkXG4iLCBfX0ZVTkNUSU9OX18pOworfQorCisvKgorICogaGVscGVyIG9mIGN0Y21faW5pdF9uZXRkZXZpY2UKKyAqIENUQ01fUFJPVE9fTVBDIG9ubHkKKyAqLwordm9pZCBtcGNfZ3JvdXBfcmVhZHkodW5zaWduZWQgbG9uZyBhZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilhZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBOVUxMOworCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgPSBOVUxMOworCXN0cnVjdCBjaGFubmVsICpjaCA9IE5VTEw7CisKKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjoJJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGRldj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJcHJpdiA9IGRldi0+cHJpdjsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgcHJpdj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZ3JwID0gcHJpdi0+bXBjZzsKKwlpZiAoZ3JwID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjOiVzKCkgZ3JwPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgImN0Y21wYzogJXMgR1JPVVAgVFJBTlNJVElPTkVEIFRPIFJFQURZIgorCSAgICAgICAiICBtYXhidWY6JWRcbiIsCisJICAgICAgIGRldi0+bmFtZSwgZ3JwLT5ncm91cF9tYXhfYnVmbGVuKTsKKworCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9SRUFEWSk7CisKKwkvKiBQdXQgdXAgYSByZWFkIG9uIHRoZSBjaGFubmVsICovCisJY2ggPSBwcml2LT5jaGFubmVsW1JFQURdOworCWNoLT5wZHVfc2VxID0gMDsKKwlpZiAoZG9fZGVidWdfZGF0YSkKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIFRvRENNX3BkdV9zZXE9ICUwOHhcbiIgLAorCQkJX19GVU5DVElPTl9fLCBjaC0+cGR1X3NlcSk7CisKKwljdGNtcGNfY2h4X3J4aWRsZShjaC0+ZnNtLCBDVENfRVZFTlRfU1RBUlQsIGNoKTsKKwkvKiBQdXQgdGhlIHdyaXRlIGNoYW5uZWwgaW4gaWRsZSBzdGF0ZSAqLworCWNoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CisJaWYgKGNoLT5jb2xsZWN0X2xlbiA+IDApIHsKKwkJc3Bpbl9sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKKwkJY3RjbV9wdXJnZV9za2JfcXVldWUoJmNoLT5jb2xsZWN0X3F1ZXVlKTsKKwkJY2gtPmNvbGxlY3RfbGVuID0gMDsKKwkJc3Bpbl91bmxvY2soJmNoLT5jb2xsZWN0X2xvY2spOworCX0KKwljdGNtX2NoeF90eGlkbGUoY2gtPmZzbSwgQ1RDX0VWRU5UX1NUQVJULCBjaCk7CisKKwljdGNtX2NsZWFyX2J1c3koZGV2KTsKKworCWlmIChncnAtPmVzdGNvbm5mdW5jKSB7CisJCWdycC0+ZXN0Y29ubmZ1bmMoZ3JwLT5wb3J0X251bSwgMCwKKwkJCQkgICAgZ3JwLT5ncm91cF9tYXhfYnVmbGVuKTsKKwkJZ3JwLT5lc3Rjb25uZnVuYyA9IE5VTEw7CisJfSBlbHNlCisJCWlmIChncnAtPmFsbG9jaGFuZnVuYykKKwkJZ3JwLT5hbGxvY2hhbmZ1bmMoZ3JwLT5wb3J0X251bSwKKwkJCQkgICAgIGdycC0+Z3JvdXBfbWF4X2J1Zmxlbik7CisKKwlncnAtPnNlbmRfcWxsY19kaXNjID0gMTsKKwlncnAtPmNoYW5nZWRfc2lkZSA9IDA7CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuOworCit9CisKKy8qCisgKiBJbmNyZW1lbnQgdGhlIE1QQyBHcm91cCBBY3RpdmUgQ2hhbm5lbCBDb3VudHMKKyAqIGhlbHBlciBvZiBkZXZfYWN0aW9uIChjYWxsZWQgZnJvbSBjaGFubmVsIGZzbSkKKyAqLworaW50IG1wY19jaGFubmVsX2FjdGlvbihzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCBkaXJlY3Rpb24sIGludCBhY3Rpb24pCit7CisJc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgICAgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwICA9IE5VTEw7CisJaW50CSAgICByYyA9IDA7CisKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMoKTogY2g9MHglcCBpZD0lc1xuIiwKKwkJCV9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjX2NoYW5uZWxfYWN0aW9uICVpIGRldj1OVUxMXG4iLAorCQkgICAgICAgYWN0aW9uKTsKKwkJcmMgPSAxOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJcHJpdiA9IGRldi0+cHJpdjsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJjdGNtcGNfY2hhbm5lbF9hY3Rpb24laSBwcml2PU5VTEwsIGRldj0lc1xuIiwKKwkJICAgICAgIGFjdGlvbiwgZGV2LT5uYW1lKTsKKwkJcmMgPSAyOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJZ3JwID0gcHJpdi0+bXBjZzsKKworCWlmIChncnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJjdGNtcGM6ICVzKCklaSBtcGNncm91cD1OVUxMLCBkZXY9JXNcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGFjdGlvbiwgZGV2LT5uYW1lKTsKKwkJcmMgPSAzOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJY3RjbV9wcl9pbmZvKAorCQkgICAgICAiY3RjbXBjOiAlcygpICVpKCk6IEdycDolcyB0b3RhbF9jaGFubmVsX3BhdGhzPSVpICIKKwkJICAgICAgImFjdGl2ZV9jaGFubmVscyByZWFkPSVpLCB3cml0ZT0laVxuIiwKKwkJICAgICAgX19GVU5DVElPTl9fLAorCQkgICAgICBhY3Rpb24sCisJCSAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLAorCQkgICAgICBncnAtPm51bV9jaGFubmVsX3BhdGhzLAorCQkgICAgICBncnAtPmFjdGl2ZV9jaGFubmVsc1tSRUFEXSwKKwkJICAgICAgZ3JwLT5hY3RpdmVfY2hhbm5lbHNbV1JJVEVdKTsKKworCWlmICgoYWN0aW9uID09IE1QQ19DSEFOTkVMX0FERCkgJiYgKGNoLT5pbl9tcGNncm91cCA9PSAwKSkgeworCQlncnAtPm51bV9jaGFubmVsX3BhdGhzKys7CisJCWdycC0+YWN0aXZlX2NoYW5uZWxzW2RpcmVjdGlvbl0rKzsKKwkJZ3JwLT5vdXRzdGFuZGluZ194aWQyKys7CisJCWNoLT5pbl9tcGNncm91cCA9IDE7CisKKwkJaWYgKGNoLT54aWRfc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShjaC0+eGlkX3NrYik7CisKKwkJY2gtPnhpZF9za2IgPSBfX2Rldl9hbGxvY19za2IoTVBDX0JVRlNJWkVfREVGQVVMVCwKKwkJCQkJR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCQlpZiAoY2gtPnhpZF9za2IgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjOiAlcygpIgorCQkJICAgICAgICJDb3VsZG4ndCBhbGxvYyBjaCB4aWRfc2tiXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQljaC0+eGlkX3NrYl9kYXRhID0gY2gtPnhpZF9za2ItPmRhdGE7CisJCWNoLT54aWRfdGggPSAoc3RydWN0IHRoX2hlYWRlciAqKWNoLT54aWRfc2tiLT5kYXRhOworCQlza2JfcHV0KGNoLT54aWRfc2tiLCBUSF9IRUFERVJfTEVOR1RIKTsKKwkJY2gtPnhpZCA9IChzdHJ1Y3QgeGlkMiAqKXNrYl90YWlsX3BvaW50ZXIoY2gtPnhpZF9za2IpOworCQlza2JfcHV0KGNoLT54aWRfc2tiLCBYSUQyX0xFTkdUSCk7CisJCWNoLT54aWRfaWQgPSBza2JfdGFpbF9wb2ludGVyKGNoLT54aWRfc2tiKTsKKwkJY2gtPnhpZF9za2ItPmRhdGEgPSBjaC0+eGlkX3NrYl9kYXRhOworCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGNoLT54aWRfc2tiKTsKKwkJY2gtPnhpZF9za2ItPmxlbiA9IDA7CisKKwkJbWVtY3B5KHNrYl9wdXQoY2gtPnhpZF9za2IsIGdycC0+eGlkX3NrYi0+bGVuKSwKKwkJCQlncnAtPnhpZF9za2ItPmRhdGEsCisJCQkJZ3JwLT54aWRfc2tiLT5sZW4pOworCisJCWNoLT54aWQtPnhpZDJfZGxjX3R5cGUgPSAoKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkKKwkJCQk/IFhJRDJfUkVBRF9TSURFIDogWElEMl9XUklURV9TSURFKTsKKworCQlpZiAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBXUklURSkKKwkJCWNoLT54aWQtPnhpZDJfYnVmX2xlbiA9IDB4MDA7CisKKwkJY2gtPnhpZF9za2ItPmRhdGEgPSBjaC0+eGlkX3NrYl9kYXRhOworCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGNoLT54aWRfc2tiKTsKKwkJY2gtPnhpZF9za2ItPmxlbiA9IDA7CisKKwkJZnNtX25ld3N0YXRlKGNoLT5mc20sIENIX1hJRDBfUEVORElORyk7CisKKwkJaWYgKChncnAtPmFjdGl2ZV9jaGFubmVsc1tSRUFEXSAgPiAwKSAmJgorCQkgICAgKGdycC0+YWN0aXZlX2NoYW5uZWxzW1dSSVRFXSA+IDApICYmCisJCQkoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSA8IE1QQ0dfU1RBVEVfWElEMklOSVRXKSkgeworCQkJZnNtX25ld3N0YXRlKGdycC0+ZnNtLCBNUENHX1NUQVRFX1hJRDJJTklUVyk7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgImN0Y21wYzogJXMgTVBDIEdST1VQICIKKwkJCQkJIkNIQU5ORUxTIEFDVElWRVxuIiwgZGV2LT5uYW1lKTsKKwkJfQorCX0gZWxzZSBpZiAoKGFjdGlvbiA9PSBNUENfQ0hBTk5FTF9SRU1PVkUpICYmCisJCQkoY2gtPmluX21wY2dyb3VwID09IDEpKSB7CisJCWNoLT5pbl9tcGNncm91cCA9IDA7CisJCWdycC0+bnVtX2NoYW5uZWxfcGF0aHMtLTsKKwkJZ3JwLT5hY3RpdmVfY2hhbm5lbHNbZGlyZWN0aW9uXS0tOworCisJCWlmIChjaC0+eGlkX3NrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoY2gtPnhpZF9za2IpOworCQljaC0+eGlkX3NrYiA9IE5VTEw7CisKKwkJaWYgKGdycC0+Y2hhbm5lbHNfdGVybWluYXRpbmcpCisJCQkJCWdvdG8gZG9uZTsKKworCQlpZiAoKChncnAtPmFjdGl2ZV9jaGFubmVsc1tSRUFEXSA9PSAwKSAmJgorCQkJCQkoZ3JwLT5hY3RpdmVfY2hhbm5lbHNbV1JJVEVdID4gMCkpCisJCQl8fCAoKGdycC0+YWN0aXZlX2NoYW5uZWxzW1dSSVRFXSA9PSAwKSAmJgorCQkJCQkoZ3JwLT5hY3RpdmVfY2hhbm5lbHNbUkVBRF0gPiAwKSkpCisJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwl9CisKK2RvbmU6CisKKwlpZiAoZG9fZGVidWcpIHsKKwkJY3RjbV9wcl9kZWJ1ZygKKwkJICAgICAgICJjdGNtcGM6ICVzKCkgJWkgR3JwOiVzIHR0bF9jaGFuX3BhdGhzPSVpICIKKwkJICAgICAgICJhY3RpdmVfY2hhbnMgcmVhZD0laSwgd3JpdGU9JWlcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBhY3Rpb24sCisJCSAgICAgICBmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSwKKwkJICAgICAgIGdycC0+bnVtX2NoYW5uZWxfcGF0aHMsCisJCSAgICAgICBncnAtPmFjdGl2ZV9jaGFubmVsc1tSRUFEXSwKKwkJICAgICAgIGdycC0+YWN0aXZlX2NoYW5uZWxzW1dSSVRFXSk7CisKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQgOiAlcygpOiBjaD0weCVwIGlkPSVzXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7CisJfQorCXJldHVybiByYzsKKworfQorCisvKioKKyAqIFVucGFjayBhIGp1c3QgcmVjZWl2ZWQgc2tiIGFuZCBoYW5kIGl0IG92ZXIgdG8KKyAqIHVwcGVyIGxheWVycy4KKyAqIHNwZWNpYWwgTVBDIHZlcnNpb24gb2YgdW5wYWNrX3NrYi4KKyAqCisgKiBjaAkJVGhlIGNoYW5uZWwgd2hlcmUgdGhpcyBza2IgaGFzIGJlZW4gcmVjZWl2ZWQuCisgKiBwc2tiCQlUaGUgcmVjZWl2ZWQgc2tiLgorICovCitzdGF0aWMgdm9pZCBjdGNtcGNfdW5wYWNrX3NrYihzdHJ1Y3QgY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpwc2tiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYJPSBjaC0+bmV0ZGV2OworCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAqZ3JwID0gcHJpdi0+bXBjZzsKKwlzdHJ1Y3QgcGR1ICpjdXJyX3BkdTsKKwlzdHJ1Y3QgbXBjZ19pbmZvICptcGNnaW5mbzsKKwlzdHJ1Y3QgdGhfaGVhZGVyICpoZWFkZXIgPSBOVUxMOworCXN0cnVjdCB0aF9zd2VlcCAqc3dlZXAgPSBOVUxMOworCWludCBwZHVfbGFzdF9zZWVuID0gMDsKKwlfX3UzMiBuZXdfbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHNrYmxlbjsKKwlpbnQgc2VuZHJjID0gMDsKKworCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcygpICVzIGNwOiVpIGNoOiVzXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gtPmlkKTsKKworCWhlYWRlciA9IChzdHJ1Y3QgdGhfaGVhZGVyICopcHNrYi0+ZGF0YTsKKwlpZiAoKGhlYWRlci0+dGhfc2VnID09IDApICYmCisJCShoZWFkZXItPnRoX2NoX2ZsYWcgPT0gMCkgJiYKKwkJKGhlYWRlci0+dGhfYmxrX2ZsYWcgPT0gMCkgJiYKKwkJKGhlYWRlci0+dGhfc2VxX251bSA9PSAwKSkKKwkJLyogbm90aGluZyBmb3IgdXMgKi8JZ290byBkb25lOworCisJaWYgKGRvX2RlYnVnX2RhdGEpIHsKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIHRoX2hlYWRlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJY3RjbXBjX2R1bXBpdCgoY2hhciAqKWhlYWRlciwgVEhfSEVBREVSX0xFTkdUSCk7CisJCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKSBwc2tiIGxlbjogJTA0eCBcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIHBza2ItPmxlbik7CisJfQorCisJcHNrYi0+ZGV2ID0gZGV2OworCXBza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXNrYl9wdWxsKHBza2IsIFRIX0hFQURFUl9MRU5HVEgpOworCisJaWYgKGxpa2VseShoZWFkZXItPnRoX2NoX2ZsYWcgPT0gVEhfSEFTX1BEVSkpIHsKKwkJaWYgKGRvX2RlYnVnX2RhdGEpCisJCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgY2FtZSBpbnRvIHRoX2hhc19wZHVcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJaWYgKChmc21fZ2V0c3RhdGUoZ3JwLT5mc20pID09IE1QQ0dfU1RBVEVfRkxPV0MpIHx8CisJCSAgICgoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSA9PSBNUENHX1NUQVRFX1JFQURZKSAmJgorCQkgICAgKGhlYWRlci0+dGhfc2VxX251bSAhPSBjaC0+dGhfc2VxX251bSArIDEpICYmCisJCSAgICAoY2gtPnRoX3NlcV9udW0gIT0gMCkpKSB7CisJCQkvKiBUaGlzIGlzIE5PVCB0aGUgbmV4dCBzZWdtZW50CQkqCisJCQkgKiB3ZSBhcmUgbm90IHRoZSBjb3JyZWN0IHJhY2Ugd2lubmVyCSoKKwkJCSAqIGdvIGF3YXkgYW5kIGxldCBzb21lb25lIGVsc2Ugd2luCSoKKwkJCSAqIEJVVC4udGhpcyBvbmx5IGFwcGxpZXMgaWYgeGlkIG5lZ290CSoKKwkJCSAqIGlzIGRvbmUJCQkJKgorCQkJKi8KKwkJCWdycC0+b3V0X29mX3NlcXVlbmNlICs9IDE7CisJCQlfX3NrYl9wdXNoKHBza2IsIFRIX0hFQURFUl9MRU5HVEgpOworCQkJc2tiX3F1ZXVlX3RhaWwoJmNoLT5pb19xdWV1ZSwgcHNrYik7CisJCQlpZiAoZG9fZGVidWdfZGF0YSkKKwkJCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzKCkgdGhfc2VxX251bSAiCisJCQkJICAgICAgICJleHBlY3Q6JTA4eCBnb3Q6JTA4eFxuIiwgX19GVU5DVElPTl9fLAorCQkJCSAgICAgICBjaC0+dGhfc2VxX251bSArIDEsIGhlYWRlci0+dGhfc2VxX251bSk7CisKKwkJCXJldHVybjsKKwkJfQorCQlncnAtPm91dF9vZl9zZXF1ZW5jZSA9IDA7CisJCWNoLT50aF9zZXFfbnVtID0gaGVhZGVyLT50aF9zZXFfbnVtOworCisJCWlmIChkb19kZWJ1Z19kYXRhKQorCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIEZyb21WVEFNX3RoX3NlcT0lMDh4XG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgY2gtPnRoX3NlcV9udW0pOworCisJCWlmICh1bmxpa2VseShmc21fZ2V0c3RhdGUoZ3JwLT5mc20pICE9IE1QQ0dfU1RBVEVfUkVBRFkpKQorCQkJCQlnb3RvIGRvbmU7CisJCXBkdV9sYXN0X3NlZW4gPSAwOworCQl3aGlsZSAoKHBza2ItPmxlbiA+IDApICYmICFwZHVfbGFzdF9zZWVuKSB7CisJCQljdXJyX3BkdSA9IChzdHJ1Y3QgcGR1ICopcHNrYi0+ZGF0YTsKKwkJCWlmIChkb19kZWJ1Z19kYXRhKSB7CisJCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbTogJXMoKSBwZHVfaGVhZGVyXG4iLAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJCWN0Y21wY19kdW1waXQoKGNoYXIgKilwc2tiLT5kYXRhLAorCQkJCQkJUERVX0hFQURFUl9MRU5HVEgpOworCQkJCWN0Y21fcHJfZGVidWcoImN0Y206ICVzKCkgcHNrYiBsZW46ICUwNHggXG4iLAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHBza2ItPmxlbik7CisJCQl9CisJCQlza2JfcHVsbChwc2tiLCBQRFVfSEVBREVSX0xFTkdUSCk7CisKKwkJCWlmIChjdXJyX3BkdS0+cGR1X2ZsYWcgJiBQRFVfTEFTVCkKKwkJCQlwZHVfbGFzdF9zZWVuID0gMTsKKwkJCWlmIChjdXJyX3BkdS0+cGR1X2ZsYWcgJiBQRFVfQ05UTCkKKwkJCQlwc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1NOQVApOworCQkJZWxzZQorCQkJCXBza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfU05BX0RJWCk7CisKKwkJCWlmICgocHNrYi0+bGVuIDw9IDApIHx8IChwc2tiLT5sZW4gPiBjaC0+bWF4X2J1ZnNpemUpKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAiJXMgSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCAiCisJCQkJICAgICAgICJyZWNlaXZlZCAiCisJCQkJICAgICAgICJkcm9wcGluZ1xuIiwgZGV2LT5uYW1lLAorCQkJCSAgICAgICBwc2tiLT5sZW4pOworCQkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHBza2IpOworCQkJbmV3X2xlbiA9IGN1cnJfcGR1LT5wZHVfb2Zmc2V0OworCQkJaWYgKGRvX2RlYnVnX2RhdGEpCisJCQkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjOiAlcygpIG5ld19sZW46ICUwNHggXG4iLAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIG5ld19sZW4pOworCQkJaWYgKChuZXdfbGVuID09IDApIHx8IChuZXdfbGVuID4gcHNrYi0+bGVuKSkgeworCQkJCS8qIHNob3VsZCBuZXZlciBoYXBwZW4JCSAgICAqLworCQkJCS8qIHBza2IgbGVuIG11c3QgYmUgaG9zZWQuLi5iYWlsIG91dCAqLworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgImN0Y21wYzogJXMoKTogaW52YWxpZCBwZHUiCisJCQkJICAgICAgICIgb2Zmc2V0IG9mICUwNHggLSBkYXRhIG1heSBiZSIKKwkJCQkgICAgICAgImxvc3RcbiIsIF9fRlVOQ1RJT05fXywgbmV3X2xlbik7CisJCQkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlza2IgPSBfX2Rldl9hbGxvY19za2IobmV3X2xlbis0LCBHRlBfQVRPTUlDKTsKKworCQkJaWYgKCFza2IpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICJjdGNtOiAlcyBPdXQgb2YgbWVtb3J5IGluICIKKwkJCQkgICAgICAgIiVzKCktIHJlcXVlc3QtbGVuOiUwNHggXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsCisJCQkJICAgICAgIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgICAgbmV3X2xlbis0KTsKKwkJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZnNtX2V2ZW50KGdycC0+ZnNtLAorCQkJCQkgIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBuZXdfbGVuKSwKKwkJCQkJcHNrYi0+ZGF0YSwgbmV3X2xlbik7CisKKwkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJCQlza2ItPmRldiA9IHBza2ItPmRldjsKKwkJCXNrYi0+cHJvdG9jb2wgPSBwc2tiLT5wcm90b2NvbDsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCQkqKChfX3UzMiAqKSBza2JfcHVzaChza2IsIDQpKSA9IGNoLT5wZHVfc2VxOworCQkJY2gtPnBkdV9zZXErKzsKKworCQkJaWYgKGRvX2RlYnVnX2RhdGEpCisJCQkJY3RjbV9wcl9kZWJ1ZygiJXM6IFRvRENNX3BkdV9zZXE9ICUwOHhcbiIsCisJCQkJICAgICAgIF9fRlVOQ1RJT05fXywgY2gtPnBkdV9zZXEpOworCisJCQljdGNtX3ByX2RlYnVnKCJjdGNtOiAlcygpIHNrYjolMGx4ICIKKwkJCQkic2tiIGxlbjogJWQgXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpc2tiLCBza2ItPmxlbik7CisJCQlpZiAoZG9fZGVidWdfZGF0YSkgeworCQkJCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKSB1cCB0byAzMiBieXRlcyIKKwkJCQkJICAgICAgICIgb2YgcGR1X2RhdGEgc2VudFxuIiwKKwkJCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJY3RjbXBjX2R1bXAzMigoY2hhciAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJfQorCisJCQlza2JsZW4gPSBza2ItPmxlbjsKKwkJCXNlbmRyYyA9IG5ldGlmX3J4KHNrYik7CisJCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2JsZW47CisJCQlza2JfcHVsbChwc2tiLCBuZXdfbGVuKTsgLyogcG9pbnQgdG8gbmV4dCBQRFUgKi8KKwkJfQorCX0gZWxzZSB7CisJCW1wY2dpbmZvID0gKHN0cnVjdCBtcGNnX2luZm8gKikKKwkJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXBjZ19pbmZvKSwgZ2ZwX3R5cGUoKSk7CisJCWlmIChtcGNnaW5mbyA9PSBOVUxMKQorCQkJCQlnb3RvIGRvbmU7CisKKwkJbXBjZ2luZm8tPmNoID0gY2g7CisJCW1wY2dpbmZvLT50aCA9IGhlYWRlcjsKKwkJbXBjZ2luZm8tPnNrYiA9IHBza2I7CisJCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKSBOb3QgUERVIC0gbWF5IGJlIGNvbnRyb2wgcGt0XG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCS8qICBpdCdzIGEgc3dlZXA/ICAgKi8KKwkJc3dlZXAgPSAoc3RydWN0IHRoX3N3ZWVwICopcHNrYi0+ZGF0YTsKKwkJbXBjZ2luZm8tPnN3ZWVwID0gc3dlZXA7CisJCWlmIChoZWFkZXItPnRoX2NoX2ZsYWcgPT0gVEhfU1dFRVBfUkVRKQorCQkJbXBjX3JjdmRfc3dlZXBfcmVxKG1wY2dpbmZvKTsKKwkJZWxzZSBpZiAoaGVhZGVyLT50aF9jaF9mbGFnID09IFRIX1NXRUVQX1JFU1ApCisJCQltcGNfcmN2ZF9zd2VlcF9yZXNwKG1wY2dpbmZvKTsKKwkJZWxzZSBpZiAoaGVhZGVyLT50aF9ibGtfZmxhZyA9PSBUSF9EQVRBX0lTX1hJRCkgeworCQkJc3RydWN0IHhpZDIgKnRoaXN4aWQgPSAoc3RydWN0IHhpZDIgKilwc2tiLT5kYXRhOworCQkJc2tiX3B1bGwocHNrYiwgWElEMl9MRU5HVEgpOworCQkJbXBjZ2luZm8tPnhpZCA9IHRoaXN4aWQ7CisJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfWElEMiwgbXBjZ2luZm8pOworCQl9IGVsc2UgaWYgKGhlYWRlci0+dGhfYmxrX2ZsYWcgPT0gVEhfRElTQ09OVEFDVCkKKwkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9ESVNDT05DLCBtcGNnaW5mbyk7CisJCWVsc2UgaWYgKGhlYWRlci0+dGhfc2VxX251bSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyB1bmV4cGVjdGVkIHBhY2tldCIKKwkJCQkJIiBleHBlY3RlZCBjb250cm9sIHBrdFxuIiwgZGV2LT5uYW1lKTsKKwkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCS8qIG1wY2dpbmZvIG9ubHkgdXNlZCBmb3Igbm9uLWRhdGEgdHJhbnNmZXJzICovCisJCQlrZnJlZShtcGNnaW5mbyk7CisJCQlpZiAoZG9fZGVidWdfZGF0YSkKKwkJCQljdGNtcGNfZHVtcF9za2IocHNrYiwgLTgpOworCQl9CisJfQorZG9uZToKKworCWRldl9rZnJlZV9za2JfYW55KHBza2IpOworCWlmIChzZW5kcmMgPT0gTkVUX1JYX0RST1ApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJXMoKSBORVRXT1JLIEJBQ0tMT0cgRVhDRUVERUQiCisJCSAgICAgICAiIC0gUEFDS0VUIERST1BQRURcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJfQorCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdCA6ICVzICVzKCk6IGNoPTB4JXAgaWQ9JXNcbiIsCisJCQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18sIGNoLCBjaC0+aWQpOworfQorCisvKioKKyAqIHRhc2tsZXQgaGVscGVyIGZvciBtcGMncyBza2IgdW5wYWNraW5nLgorICoKKyAqIGNoCQlUaGUgY2hhbm5lbCB0byB3b3JrIG9uLgorICogQWxsb3cgZmxvdyBjb250cm9sIGJhY2sgcHJlc3N1cmUgdG8gb2NjdXIgaGVyZS4KKyAqIFRocm90dGxpbmcgYmFjayBjaGFubmVsIGNhbiByZXN1bHQgaW4gZXhjZXNzaXZlCisgKiBjaGFubmVsIGluYWN0aXZpdHkgYW5kIHN5c3RlbSBkZWFjdCBvZiBjaGFubmVsCisgKi8KK3ZvaWQgY3RjbXBjX2JoKHVuc2lnbmVkIGxvbmcgdGhpc2NoYW4pCit7CisJc3RydWN0IGNoYW5uZWwJICAqY2gJICAgID0gKHN0cnVjdCBjaGFubmVsICopdGhpc2NoYW47CisJc3RydWN0IHNrX2J1ZmYJICAqc2tiOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYJICAgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAqcHJpdiAgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAgKmdycCAgID0gcHJpdi0+bXBjZzsKKworCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiJXMgY3A6JWkgZW50ZXI6ICAlcygpICVzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fRlVOQ1RJT05fXywgY2gtPmlkKTsKKwkvKiBjYWxsZXIgaGFzIHJlcXVlc3RlZCBkcml2ZXIgdG8gdGhyb3R0bGUgYmFjayAqLworCXdoaWxlICgoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSAhPSBNUENHX1NUQVRFX0ZMT1dDKSAmJgorCQkJKHNrYiA9IHNrYl9kZXF1ZXVlKCZjaC0+aW9fcXVldWUpKSkgeworCQljdGNtcGNfdW5wYWNrX3NrYihjaCwgc2tiKTsKKwkJaWYgKGdycC0+b3V0X29mX3NlcXVlbmNlID4gMjApIHsKKwkJCS8qIGFzc3VtZSBkYXRhIGxvc3MgaGFzIG9jY3VycmVkIGlmICovCisJCQkvKiBtaXNzaW5nIHNlcV9udW0gZm9yIGV4dGVuZGVkICAgICAqLworCQkJLyogcGVyaW9kIG9mIHRpbWUJCSAgICAqLworCQkJZ3JwLT5vdXRfb2Zfc2VxdWVuY2UgPSAwOworCQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc2tiID09IHNrYl9wZWVrKCZjaC0+aW9fcXVldWUpKQorCQkJYnJlYWs7CisJfQorCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQgOiAlcyAlcygpOiBjaD0weCVwIGlkPSVzXG4iLAorCQkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18sIGNoLCAgY2gtPmlkKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiAgTVBDIEdyb3VwIEluaXRpYWxpemF0aW9ucworICovCitzdHJ1Y3QgbXBjX2dyb3VwICpjdGNtcGNfaW5pdF9tcGNfZ3JvdXAoc3RydWN0IGN0Y21fcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgbXBjX2dyb3VwICpncnA7CisKKwlDVENNX0RCRl9URVhUKE1QQ19TRVRVUCwgMywgX19GVU5DVElPTl9fKTsKKworCWdycCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtcGNfZ3JvdXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ3JwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZ3JwLT5mc20gPQorCQlpbml0X2ZzbSgibXBjZyIsIG1wY2dfc3RhdGVfbmFtZXMsIG1wY2dfZXZlbnRfbmFtZXMsCisJCQkJIE1QQ0dfTlJfU1RBVEVTLCBNUENHX05SX0VWRU5UUywgbXBjZ19mc20sCisJCQkJIG1wY2dfZnNtX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGdycC0+ZnNtID09IE5VTEwpIHsKKwkJa2ZyZWUoZ3JwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZnNtX25ld3N0YXRlKGdycC0+ZnNtLCBNUENHX1NUQVRFX1JFU0VUKTsKKwlmc21fc2V0dGltZXIoZ3JwLT5mc20sICZncnAtPnRpbWVyKTsKKworCWdycC0+eGlkX3NrYiA9CisJCSBfX2Rldl9hbGxvY19za2IoTVBDX0JVRlNJWkVfREVGQVVMVCwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCWlmIChncnAtPnhpZF9za2IgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZG4ndCBhbGxvYyBNUENncm91cCB4aWRfc2tiXG4iKTsKKwkJa2ZyZWVfZnNtKGdycC0+ZnNtKTsKKwkJa2ZyZWUoZ3JwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCS8qICBiYXNlIHhpZCBmb3IgYWxsIGNoYW5uZWxzIGluIGdyb3VwICAqLworCWdycC0+eGlkX3NrYl9kYXRhID0gZ3JwLT54aWRfc2tiLT5kYXRhOworCWdycC0+eGlkX3RoID0gKHN0cnVjdCB0aF9oZWFkZXIgKilncnAtPnhpZF9za2ItPmRhdGE7CisJbWVtY3B5KHNrYl9wdXQoZ3JwLT54aWRfc2tiLCBUSF9IRUFERVJfTEVOR1RIKSwKKwkJCSZ0aG5vcm0sIFRIX0hFQURFUl9MRU5HVEgpOworCisJZ3JwLT54aWQgPSAoc3RydWN0IHhpZDIgKikgc2tiX3RhaWxfcG9pbnRlcihncnAtPnhpZF9za2IpOworCW1lbWNweShza2JfcHV0KGdycC0+eGlkX3NrYiwgWElEMl9MRU5HVEgpLCAmaW5pdF94aWQsIFhJRDJfTEVOR1RIKTsKKwlncnAtPnhpZC0+eGlkMl9hZGpfaWQgPSBqaWZmaWVzIHwgMHhmZmYwMDAwMDsKKwlncnAtPnhpZC0+eGlkMl9zZW5kZXJfaWQgPSBqaWZmaWVzOworCisJZ3JwLT54aWRfaWQgPSBza2JfdGFpbF9wb2ludGVyKGdycC0+eGlkX3NrYik7CisJbWVtY3B5KHNrYl9wdXQoZ3JwLT54aWRfc2tiLCA0KSwgIlZUQU0iLCA0KTsKKworCWdycC0+cmN2ZF94aWRfc2tiID0KKwkJX19kZXZfYWxsb2Nfc2tiKE1QQ19CVUZTSVpFX0RFRkFVTFQsIEdGUF9BVE9NSUN8R0ZQX0RNQSk7CisJaWYgKGdycC0+cmN2ZF94aWRfc2tiID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGRuJ3QgYWxsb2MgTVBDZ3JvdXAgcmN2ZF94aWRfc2tiXG4iKTsKKwkJa2ZyZWVfZnNtKGdycC0+ZnNtKTsKKwkJZGV2X2tmcmVlX3NrYihncnAtPnhpZF9za2IpOworCQlrZnJlZShncnApOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZ3JwLT5yY3ZkX3hpZF9kYXRhID0gZ3JwLT5yY3ZkX3hpZF9za2ItPmRhdGE7CisJZ3JwLT5yY3ZkX3hpZF90aCA9IChzdHJ1Y3QgdGhfaGVhZGVyICopZ3JwLT5yY3ZkX3hpZF9za2ItPmRhdGE7CisJbWVtY3B5KHNrYl9wdXQoZ3JwLT5yY3ZkX3hpZF9za2IsIFRIX0hFQURFUl9MRU5HVEgpLAorCQkJJnRobm9ybSwgVEhfSEVBREVSX0xFTkdUSCk7CisJZ3JwLT5zYXZlZF94aWQyID0gTlVMTDsKKwlwcml2LT54aWQgPSBncnAtPnhpZDsKKwlwcml2LT5tcGNnID0gZ3JwOworCXJldHVybiBncnA7Cit9CisKKy8qCisgKiBUaGUgTVBDIEdyb3VwIFN0YXRpb24gRlNNCisgKi8KKworLyoKKyAqIE1QQyBHcm91cCBTdGF0aW9uIEZTTSBhY3Rpb25zCisgKiBDVENNX1BST1RPX01QQyBvbmx5CisgKi8KKworLyoqCisgKiBOT1AgYWN0aW9uIGZvciBzdGF0ZW1hY2hpbmVzCisgKi8KK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25fbm9wKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworfQorCisvKgorICogaW52b2tlZCB3aGVuIHRoZSBkZXZpY2UgdHJhbnNpdGlvbnMgdG8gZGV2X3N0b3BwZWQKKyAqIE1QQyB3aWxsIHN0b3AgZWFjaCBpbmRpdmlkdWFsIGNoYW5uZWwgaWYgYSBzaW5nbGUgWElEIGZhaWx1cmUKKyAqIG9jY3Vycywgb3Igd2lsbCBpbnRpdGlhdGUgYWxsIGNoYW5uZWxzIGJlIHN0b3BwZWQgaWYgYSBHUk9VUAorICogbGV2ZWwgZmFpbHVyZSBvY2N1cnMuCisgKi8KK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25fZ29faW5vcChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBjaGFubmVsICp3Y2gsICpyY2g7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBkZXY9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMgICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCXByaXYgID0gZGV2LT5wcml2OworCWdycCA9ICBwcml2LT5tcGNnOworCWdycC0+Zmxvd19vZmZfY2FsbGVkID0gMDsKKworCWZzbV9kZWx0aW1lcigmZ3JwLT50aW1lcik7CisKKwlpZiAoZ3JwLT5jaGFubmVsc190ZXJtaW5hdGluZykKKwkJCQkJZ290byBkb25lOworCisJZ3JwLT5jaGFubmVsc190ZXJtaW5hdGluZyA9IDE7CisKKwlncnAtPnNhdmVkX3N0YXRlID0gZnNtX2dldHN0YXRlKGdycC0+ZnNtKTsKKwlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfSU5PUCk7CisJaWYgKGdycC0+c2F2ZWRfc3RhdGUgPiBNUENHX1NUQVRFX1hJRDdJTklURikKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIlczpNUEMgR1JPVVAgSU5PUEVSQVRJVkVcbiIsIGRldi0+bmFtZSk7CisJaWYgKChncnAtPnNhdmVkX3N0YXRlICE9IE1QQ0dfU1RBVEVfUkVTRVQpIHx8CisJCS8qIGRlYWxsb2NfY2hhbm5lbCBoYXMgYmVlbiBjYWxsZWQgKi8KKwkJKChncnAtPnNhdmVkX3N0YXRlID09IE1QQ0dfU1RBVEVfUkVTRVQpICYmCisJCQkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKSkKKwkJZnNtX2RlbHRpbWVyKCZwcml2LT5yZXN0YXJ0X3RpbWVyKTsKKworCXdjaCA9IHByaXYtPmNoYW5uZWxbV1JJVEVdOworCXJjaCA9IHByaXYtPmNoYW5uZWxbUkVBRF07CisKKwlzd2l0Y2ggKGdycC0+c2F2ZWRfc3RhdGUpIHsKKwljYXNlIE1QQ0dfU1RBVEVfUkVTRVQ6CisJY2FzZSBNUENHX1NUQVRFX0lOT1A6CisJY2FzZSBNUENHX1NUQVRFX1hJRDJJTklUVzoKKwljYXNlIE1QQ0dfU1RBVEVfWElEMElPV0FJVDoKKwljYXNlIE1QQ0dfU1RBVEVfWElEMklOSVRYOgorCWNhc2UgTVBDR19TVEFURV9YSUQ3SU5JVFc6CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklUWDoKKwljYXNlIE1QQ0dfU1RBVEVfWElEMElPV0FJWDoKKwljYXNlIE1QQ0dfU1RBVEVfWElEN0lOSVRJOgorCWNhc2UgTVBDR19TVEFURV9YSUQ3SU5JVFo6CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklURjoKKwkJYnJlYWs7CisJY2FzZSBNUENHX1NUQVRFX0ZMT1dDOgorCWNhc2UgTVBDR19TVEFURV9SRUFEWToKKwlkZWZhdWx0OgorCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZ3Y2gtPmNoX2Rpc2NfdGFza2xldCk7CisJfQorCisJZ3JwLT54aWQyX3RnbnVtID0gMDsKKwlncnAtPmdyb3VwX21heF9idWZsZW4gPSAwOyAgLyptaW4gb2YgYWxsIHJlY2VpdmVkICovCisJZ3JwLT5vdXRzdGFuZGluZ194aWQyID0gMDsKKwlncnAtPm91dHN0YW5kaW5nX3hpZDcgPSAwOworCWdycC0+b3V0c3RhbmRpbmdfeGlkN19wMiA9IDA7CisJZ3JwLT5zYXZlZF94aWQyID0gTlVMTDsKKwlncnAtPnhpZG5vZ29vZCA9IDA7CisJZ3JwLT5jaGFuZ2VkX3NpZGUgPSAwOworCisJZ3JwLT5yY3ZkX3hpZF9za2ItPmRhdGEgPSBncnAtPnJjdmRfeGlkX2RhdGE7CisJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihncnAtPnJjdmRfeGlkX3NrYik7CisJZ3JwLT5yY3ZkX3hpZF9za2ItPmxlbiA9IDA7CisJZ3JwLT5yY3ZkX3hpZF90aCA9IChzdHJ1Y3QgdGhfaGVhZGVyICopZ3JwLT5yY3ZkX3hpZF9za2ItPmRhdGE7CisJbWVtY3B5KHNrYl9wdXQoZ3JwLT5yY3ZkX3hpZF9za2IsIFRIX0hFQURFUl9MRU5HVEgpLCAmdGhub3JtLAorCSAgICAgICBUSF9IRUFERVJfTEVOR1RIKTsKKworCWlmIChncnAtPnNlbmRfcWxsY19kaXNjID09IDEpIHsKKwkJZ3JwLT5zZW5kX3FsbGNfZGlzYyA9IDA7CisJCXJjID0gbXBjX3NlbmRfcWxsY19kaXNjb250YWN0KGRldik7CisJfQorCisJLyogRE8gTk9UIGlzc3VlIERFVl9FVkVOVF9TVE9QIGRpcmVjdGx5IG91dCBvZiB0aGlzIGNvZGUgKi8KKwkvKiBUaGlzIGNhbiByZXN1bHQgaW4gSU5PUCBvZiBWVEFNIFBVIGR1ZSB0byBoYWx0aW5nIG9mICAqLworCS8qIG91dHN0YW5kaW5nIElPIHdoaWNoIGNhdXNlcyBhIHNlbnNlIHRvIGJlIHJldHVybmVkCSAqLworCS8qIE9ubHkgYWJvdXQgMyBzZW5zZXMgYXJlIGFsbG93ZWQgYW5kIHRoZW4gSU9TL1ZUQU0gd2lsbCovCisJLyogZWJjb21lIHVucmVhY2hhYmxlIHdpdGhvdXQgbWFudWFsIGludGVydmVudGlvbgkgKi8KKwlpZiAoKGdycC0+cG9ydF9wZXJzaXN0ID09IDEpCXx8IChncnAtPmFsbG9jX2NhbGxlZCkpIHsKKwkJZ3JwLT5hbGxvY19jYWxsZWQgPSAwOworCQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOworCQlmc21fYWRkdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIsCisJCQkgICAgIDUwMCwKKwkJCSAgICAgREVWX0VWRU5UX1JFU1RBUlQsCisJCQkgICAgIGRldik7CisJCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9SRVNFVCk7CisJCWlmIChncnAtPnNhdmVkX3N0YXRlID4gTVBDR19TVEFURV9YSUQ3SU5JVEYpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOk1QQyBHUk9VUCBSRUNPVkVSWSBTQ0hFRFVMRURcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOworCQlmc21fYWRkdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIsIDUwMCwgREVWX0VWRU5UX1NUT1AsIGRldik7CisJCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9SRVNFVCk7CisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6TVBDIEdST1VQIFJFQ09WRVJZIE5PVCBBVFRFTVBURURcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCX0KKworZG9uZToKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDolcyAgJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCXJldHVybjsKK30KKworLyoqCisgKiBIYW5kbGUgbXBjIGdyb3VwICBhY3Rpb24gdGltZW91dC4KKyAqIE1QQyBHcm91cCBTdGF0aW9uIEZTTSBhY3Rpb24KKyAqIENUQ01fUFJPVE9fTVBDIG9ubHkKKyAqCisgKiBmaQkJQW4gaW5zdGFuY2Ugb2YgYW4gbXBjX2dyb3VwIGZzbS4KKyAqIGV2ZW50CVRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KKyAqIGFyZwkJR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBuZXRfZGV2aWNlICogdXBvbiBjYWxsLgorICovCitzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX3RpbWVvdXQoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKKwlzdHJ1Y3QgY2hhbm5lbCAqd2NoOworCXN0cnVjdCBjaGFubmVsICpyY2g7CisKKwlDVENNX0RCRl9URVhUKE1QQ19UUkFDRSwgNiwgX19GVU5DVElPTl9fKTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIDQsICIlczogZGV2PU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlwcml2ID0gZGV2LT5wcml2OworCWdycCA9IHByaXYtPm1wY2c7CisJd2NoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CisJcmNoID0gcHJpdi0+Y2hhbm5lbFtSRUFEXTsKKworCXN3aXRjaCAoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSkgeworCWNhc2UgTVBDR19TVEFURV9YSUQySU5JVFc6CisJCS8qIFVubGVzcyB0aGVyZSBpcyBvdXRzdGFuZGluZyBJTyBvbiB0aGUgICovCisJCS8qIGNoYW5uZWwganVzdCByZXR1cm4gYW5kIHdhaXQgZm9yIEFUVE4gICovCisJCS8qIGludGVycnVwdCB0byBiZWdpbiBYSUQgbmVnb3RpYXRpb25zCSAgKi8KKwkJaWYgKChmc21fZ2V0c3RhdGUocmNoLT5mc20pID09IENIX1hJRDBfUEVORElORykgJiYKKwkJICAgKGZzbV9nZXRzdGF0ZSh3Y2gtPmZzbSkgPT0gQ0hfWElEMF9QRU5ESU5HKSkKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOworCX0KKworCUNUQ01fREJGX1RFWFRfKE1QQ19UUkFDRSwgNiwgIiVzOiBkZXY9JXMgZXhpdCIsCisJCQkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBNUEMgR3JvdXAgU3RhdGlvbiBGU00gYWN0aW9uCisgKiBDVENNX1BST1RPX01QQyBvbmx5CisgKi8KK3ZvaWQgbXBjX2FjdGlvbl9kaXNjb250YWN0KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBtcGNnX2luZm8gICAqbXBjZ2luZm8gICA9IGFyZzsKKwlzdHJ1Y3QgY2hhbm5lbAkgICAqY2gJICAgICAgID0gbXBjZ2luZm8tPmNoOworCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICAgICAgICA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAgICpwcml2ICAgID0gZGV2LT5wcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwICAgICA9IHByaXYtPm1wY2c7CisKKwlpZiAoY2ggPT0gTlVMTCkJeworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGNoPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKGNoLT5uZXRkZXYgPT0gTlVMTCkJeworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGRldj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcyAgJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJZ3JwLT5zZW5kX3FsbGNfZGlzYyA9IDE7CisJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogJXMgICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBNUEMgR3JvdXAgU3RhdGlvbiAtIG5vdCBwYXJ0IG9mIEZTTQorICogQ1RDTV9QUk9UT19NUEMgb25seQorICogY2FsbGVkIGZyb20gYWRkX2NoYW5uZWwgaW4gY3RjbV9tYWluLmMKKyAqLwordm9pZCBtcGNfYWN0aW9uX3NlbmRfZGlzY29udGFjdCh1bnNpZ25lZCBsb25nIHRoaXNjaGFuKQoreworCXN0cnVjdCBjaGFubmVsCSAgICpjaDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwOworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZwkgIHNhdmVmbGFnczsKKworCWNoID0gKHN0cnVjdCBjaGFubmVsICopdGhpc2NoYW47CisJZGV2ID0gY2gtPm5ldGRldjsKKwlwcml2ID0gZGV2LT5wcml2OworCWdycCA9IHByaXYtPm1wY2c7CisKKwljdGNtX3ByX2luZm8oImN0Y21wYzogJXMgY3A6JWkgZW50ZXI6ICVzKCkgR3JwU3RhdGU6JXMgQ2hTdGF0ZTolc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwKKwkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZ3JwLT5mc20pLAorCQkgICAgICAgZnNtX2dldHN0YXRlX3N0cihjaC0+ZnNtKSk7CisJc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgd2l0aAorCQkJICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKwlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2gtPmNkZXYsICZjaC0+Y2N3WzE1XSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKKworCWlmIChyYyAhPSAwKSB7CisJCWN0Y21fcHJfaW5mbygiY3RjbXBjOiAlcygpIGNoOiVzIElPIGZhaWxlZCBcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLAorCQkJICAgICAgIGNoLT5pZCk7CisJCWN0Y21fY2N3X2NoZWNrX3JjKGNoLCByYywgInNlbmQgZGlzY29udGFjdCIpOworCQkvKiBOb3QgY2hlY2tpbmcgcmV0dXJuIGNvZGUgdmFsdWUgaGVyZSAqLworCQkvKiBNYWtpbmcgYmVzdCBlZmZvcnQgdG8gbm90aWZ5IHBhcnRuZXIqLworCQkvKiB0aGF0IE1QQyBHcm91cCBpcyBnb2luZyBkb3duICAgICAgICAqLworCX0KKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBleGl0OiAlcyAgJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCXJldHVybjsKK30KKworCisvKgorICogaGVscGVyIGZ1bmN0aW9uIG9mIG1wYyBGU00KKyAqIENUQ01fUFJPVE9fTVBDIG9ubHkKKyAqIG1wY19hY3Rpb25fcmN2ZF94aWQ3CisqLworc3RhdGljIGludCBtcGNfdmFsaWRhdGVfeGlkKHN0cnVjdCBtcGNnX2luZm8gKm1wY2dpbmZvKQoreworCXN0cnVjdCBjaGFubmVsCSAgICpjaAkgICAgPSBtcGNnaW5mby0+Y2g7CisJc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgICAgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG1wY19ncm91cCAgICpncnAgID0gcHJpdi0+bXBjZzsKKwlzdHJ1Y3QgeGlkMgkgICAqeGlkICAgICA9IG1wY2dpbmZvLT54aWQ7CisJaW50CWZhaWxlZAk9IDA7CisJaW50CXJjCT0gMDsKKwlfX3U2NAlvdXJfaWQsIHRoZWlyX2lkID0gMDsKKwlpbnQJbGVuOworCisJbGVuID0gVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIOworCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOgklcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKG1wY2dpbmZvLT54aWQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIHhpZD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyYyA9IDE7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgOiAgJXMgIHhpZCByZWNlaXZlZCgpXG4iLCBfX0ZVTkNUSU9OX18pOworCWN0Y21wY19kdW1waXQoKGNoYXIgKiltcGNnaW5mby0+eGlkLCBYSUQyX0xFTkdUSCk7CisKKwkvKnRoZSByZWNlaXZlZCBkaXJlY3Rpb24gc2hvdWxkIGJlIHRoZSBvcHBvc2l0ZSBvZiBvdXJzICAqLworCWlmICgoKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgPyBYSUQyX1dSSVRFX1NJREUgOgorCQkJCVhJRDJfUkVBRF9TSURFKSAhPSB4aWQtPnhpZDJfZGxjX3R5cGUpIHsKKwkJZmFpbGVkID0gMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjOiVzKCkgWElEIFJFSkVDVEVEIC0gUkVBRC1XUklURSBDSCAiCisJCQkiUGFpcmluZyBJbnZhbGlkIFxuIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpZiAoeGlkLT54aWQyX2RsY190eXBlID09IFhJRDJfUkVBRF9TSURFKSB7CisJCWN0Y21fcHJfZGVidWcoImN0Y21wYzogJXMoKTogZ3JwbWF4YnVmOiVkIHhpZDJidWZsZW46JWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCBncnAtPmdyb3VwX21heF9idWZsZW4sCisJCQkJeGlkLT54aWQyX2J1Zl9sZW4pOworCisJCWlmIChncnAtPmdyb3VwX21heF9idWZsZW4gPT0gMCB8fAorCQkJZ3JwLT5ncm91cF9tYXhfYnVmbGVuID4geGlkLT54aWQyX2J1Zl9sZW4gLSBsZW4pCisJCQlncnAtPmdyb3VwX21heF9idWZsZW4gPSB4aWQtPnhpZDJfYnVmX2xlbiAtIGxlbjsKKwl9CisKKworCWlmIChncnAtPnNhdmVkX3hpZDIgPT0gTlVMTCkJeworCQlncnAtPnNhdmVkX3hpZDIgPQorCQkJKHN0cnVjdCB4aWQyICopc2tiX3RhaWxfcG9pbnRlcihncnAtPnJjdmRfeGlkX3NrYik7CisKKwkJbWVtY3B5KHNrYl9wdXQoZ3JwLT5yY3ZkX3hpZF9za2IsCisJCQkJCVhJRDJfTEVOR1RIKSwgeGlkLCBYSUQyX0xFTkdUSCk7CisJCWdycC0+cmN2ZF94aWRfc2tiLT5kYXRhID0gZ3JwLT5yY3ZkX3hpZF9kYXRhOworCisJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoZ3JwLT5yY3ZkX3hpZF9za2IpOworCQlncnAtPnJjdmRfeGlkX3NrYi0+bGVuID0gMDsKKworCQkvKiBjb252ZXJ0IHR3byAzMiBiaXQgbnVtYmVycyBpbnRvIDEgNjQgYml0IGZvciBpZCBjb21wYXJlICovCisJCW91cl9pZCA9IChfX3U2NClwcml2LT54aWQtPnhpZDJfYWRqX2lkOworCQlvdXJfaWQgPSBvdXJfaWQgPDwgMzI7CisJCW91cl9pZCA9IG91cl9pZCArIHByaXYtPnhpZC0+eGlkMl9zZW5kZXJfaWQ7CisJCXRoZWlyX2lkID0gKF9fdTY0KXhpZC0+eGlkMl9hZGpfaWQ7CisJCXRoZWlyX2lkID0gdGhlaXJfaWQgPDwgMzI7CisJCXRoZWlyX2lkID0gdGhlaXJfaWQgKyB4aWQtPnhpZDJfc2VuZGVyX2lkOworCQkvKiBsb3dlciBpZCBhc3N1bWUgdGhlIHhzaWRlIHJvbGUgKi8KKwkJaWYgKG91cl9pZCA8IHRoZWlyX2lkKSB7CisJCQlncnAtPnJvbGwgPSBYU0lERTsKKwkJCWN0Y21fcHJfZGVidWcoImN0Y21wYyA6JXMoKSBXRSBIQVZFIExPVyBJRC0iCisJCQkJICAgICAgICJUQUtFIFhTSURFXG4iLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJZ3JwLT5yb2xsID0gWVNJREU7CisJCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgOiVzKCkgV0UgSEFWRSBISUdIIElELSIKKwkJCQkgICAgICAgIlRBS0UgWVNJREVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKworCX0gZWxzZSB7CisJCWlmICh4aWQtPnhpZDJfZmxhZzQgIT0gZ3JwLT5zYXZlZF94aWQyLT54aWQyX2ZsYWc0KSB7CisJCQlmYWlsZWQgPSAxOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgWElEIFJFSkVDVEVEIC0gWElEIEZsYWcgQnl0ZTRcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJfQorCQlpZiAoeGlkLT54aWQyX2ZsYWcyID09IDB4NDApIHsKKwkJCWZhaWxlZCA9IDE7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBYSUQgUkVKRUNURUQgLSBYSUQgTk9HT09EXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJaWYgKHhpZC0+eGlkMl9hZGpfaWQgIT0gZ3JwLT5zYXZlZF94aWQyLT54aWQyX2Fkal9pZCkgeworCQkJZmFpbGVkID0gMTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIFhJRCBSRUpFQ1RFRCAtICIKKwkJCQkiQWRqYWNlbnQgU3RhdGlvbiBJRCBNaXNtYXRjaFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQl9CisJCWlmICh4aWQtPnhpZDJfc2VuZGVyX2lkICE9IGdycC0+c2F2ZWRfeGlkMi0+eGlkMl9zZW5kZXJfaWQpIHsKKwkJCWZhaWxlZCA9IDE7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBYSUQgUkVKRUNURUQgLSAiCisJCQkJIlNlbmRlciBBZGRyZXNzIE1pc21hdGNoXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCX0KKwl9CisKKwlpZiAoZmFpbGVkKSB7CisJCWN0Y21fcHJfaW5mbygiY3RjbXBjCSAgIDogICVzKCkgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcml2LT54aWQtPnhpZDJfZmxhZzIgPSAweDQwOworCQlncnAtPnNhdmVkX3hpZDItPnhpZDJfZmxhZzIgPSAweDQwOworCQlyYyA9IDE7CisJfQorCitkb25lOgorCisJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICAlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiByYzsKK30KKworLyoKKyAqIE1QQyBHcm91cCBTdGF0aW9uIEZTTSBhY3Rpb24KKyAqIENUQ01fUFJPVE9fTVBDIG9ubHkKKyAqLworc3RhdGljIHZvaWQgbXBjX2FjdGlvbl9zaWRlX3hpZChmc21faW5zdGFuY2UgKmZzbSwgdm9pZCAqYXJnLCBpbnQgc2lkZSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBhcmc7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICpncnAgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCWludCByYyA9IDA7CisJaW50IGdvdGxvY2sgPSAwOworCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgd2l0aAorCQkJICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAqLworCisJaWYgKGNoID09IE5VTEwpCXsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2g9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZ290byBkb25lOworCX0KKworCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcygpOiBjcD0laSBjaD0weCVwIGlkPSVzXG4iLAorCQkJX19GVU5DVElPTl9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIGNoLCBjaC0+aWQpOworCisJZGV2ID0gY2gtPm5ldGRldjsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGV2PU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlwcml2ID0gZGV2LT5wcml2OworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcHJpdj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJZ3JwID0gcHJpdi0+bXBjZzsKKwlpZiAoZ3JwID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZ3JwPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoY3RjbV9jaGVja2FsbG9jX2J1ZmZlcihjaCkpCisJCQkJCWdvdG8gZG9uZTsKKworCS8qIHNrYiBkYXRhLWJ1ZmZlciByZWZlcmVuY2luZzogKi8KKworCWNoLT50cmFuc19za2ItPmRhdGEgPSBjaC0+dHJhbnNfc2tiX2RhdGE7CisJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihjaC0+dHJhbnNfc2tiKTsKKwljaC0+dHJhbnNfc2tiLT5sZW4gPSAwOworCS8qIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgMyBzdGF0ZW1lbnRzIGlzIE5PVCBhbHdheXMKKwkgKiBhbHJlYWR5IHNldCBhZnRlciBjdGNtX2NoZWNrYWxsb2NfYnVmZmVyCisJICogYmVjYXVzZSBvZiBwb3NzaWJsZSByZXVzZSBvZiB0aGUgdHJhbnNfc2tiCisJICovCisJbWVtc2V0KGNoLT50cmFuc19za2ItPmRhdGEsIDAsIDE2KTsKKwljaC0+cmN2ZF94aWRfdGggPSAgKHN0cnVjdCB0aF9oZWFkZXIgKiljaC0+dHJhbnNfc2tiX2RhdGE7CisJLyogY2hlY2sgaXMgbWFpbiBwdXJwb3NlIGhlcmU6ICovCisJc2tiX3B1dChjaC0+dHJhbnNfc2tiLCBUSF9IRUFERVJfTEVOR1RIKTsKKwljaC0+cmN2ZF94aWQgPSAoc3RydWN0IHhpZDIgKilza2JfdGFpbF9wb2ludGVyKGNoLT50cmFuc19za2IpOworCS8qIGNoZWNrIGlzIG1haW4gcHVycG9zZSBoZXJlOiAqLworCXNrYl9wdXQoY2gtPnRyYW5zX3NrYiwgWElEMl9MRU5HVEgpOworCWNoLT5yY3ZkX3hpZF9pZCA9IHNrYl90YWlsX3BvaW50ZXIoY2gtPnRyYW5zX3NrYik7CisJLyogY2xlYW51cCBiYWNrIHRvIHN0YXJ0cG9pbnQgKi8KKwljaC0+dHJhbnNfc2tiLT5kYXRhID0gY2gtPnRyYW5zX3NrYl9kYXRhOworCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoY2gtPnRyYW5zX3NrYik7CisJY2gtPnRyYW5zX3NrYi0+bGVuID0gMDsKKworCS8qIG5vbi1jaGVja2luZyByZXdyaXRlIG9mIGFib3ZlIHNrYiBkYXRhLWJ1ZmZlciByZWZlcmVuY2luZzogKi8KKwkvKgorCW1lbXNldChjaC0+dHJhbnNfc2tiLT5kYXRhLCAwLCAxNik7CisJY2gtPnJjdmRfeGlkX3RoID0gIChzdHJ1Y3QgdGhfaGVhZGVyICopY2gtPnRyYW5zX3NrYl9kYXRhOworCWNoLT5yY3ZkX3hpZCA9IChzdHJ1Y3QgeGlkMiAqKShjaC0+dHJhbnNfc2tiX2RhdGEgKyBUSF9IRUFERVJfTEVOR1RIKTsKKwljaC0+cmN2ZF94aWRfaWQgPSBjaC0+dHJhbnNfc2tiX2RhdGEgKyBUSF9IRUFERVJfTEVOR1RIICsgWElEMl9MRU5HVEg7CisJICovCisKKwljaC0+Y2N3WzhdLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CisJY2gtPmNjd1s4XS5jb3VudAk9IDA7CisJY2gtPmNjd1s4XS5jZGEJCT0gMHgwMDsKKworCWlmIChzaWRlID09IFhTSURFKSB7CisJCS8qIG1wY19hY3Rpb25feHNpZGVfeGlkICovCisJCWlmIChjaC0+eGlkX3RoID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIGNoLT54aWRfdGg9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZ290byBkb25lOworCQl9CisJCWNoLT5jY3dbOV0uY21kX2NvZGUJPSBDQ1dfQ01EX1dSSVRFOworCQljaC0+Y2N3WzldLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CisJCWNoLT5jY3dbOV0uY291bnQJPSBUSF9IRUFERVJfTEVOR1RIOworCQljaC0+Y2N3WzldLmNkYQkJPSB2aXJ0X3RvX3BoeXMoY2gtPnhpZF90aCk7CisKKwkJaWYgKGNoLT54aWQgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY2gtPnhpZD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQlnb3RvIGRvbmU7CisJCX0KKworCQljaC0+Y2N3WzEwXS5jbWRfY29kZQk9IENDV19DTURfV1JJVEU7CisJCWNoLT5jY3dbMTBdLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CisJCWNoLT5jY3dbMTBdLmNvdW50CT0gWElEMl9MRU5HVEg7CisJCWNoLT5jY3dbMTBdLmNkYQkJPSB2aXJ0X3RvX3BoeXMoY2gtPnhpZCk7CisKKwkJY2gtPmNjd1sxMV0uY21kX2NvZGUJPSBDQ1dfQ01EX1JFQUQ7CisJCWNoLT5jY3dbMTFdLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CisJCWNoLT5jY3dbMTFdLmNvdW50CT0gVEhfSEVBREVSX0xFTkdUSDsKKwkJY2gtPmNjd1sxMV0uY2RhCQk9IHZpcnRfdG9fcGh5cyhjaC0+cmN2ZF94aWRfdGgpOworCisJCWNoLT5jY3dbMTJdLmNtZF9jb2RlCT0gQ0NXX0NNRF9SRUFEOworCQljaC0+Y2N3WzEyXS5mbGFncwk9IENDV19GTEFHX1NMSSB8IENDV19GTEFHX0NDOworCQljaC0+Y2N3WzEyXS5jb3VudAk9IFhJRDJfTEVOR1RIOworCQljaC0+Y2N3WzEyXS5jZGEJCT0gdmlydF90b19waHlzKGNoLT5yY3ZkX3hpZCk7CisKKwkJY2gtPmNjd1sxM10uY21kX2NvZGUJPSBDQ1dfQ01EX1JFQUQ7CisJCWNoLT5jY3dbMTNdLmNkYQkJPSB2aXJ0X3RvX3BoeXMoY2gtPnJjdmRfeGlkX2lkKTsKKworCX0gZWxzZSB7IC8qIHNpZGUgPT0gWVNJREUgOiBtcGNfYWN0aW9uX3lzaWRlX3hpZCAqLworCQljaC0+Y2N3WzldLmNtZF9jb2RlCT0gQ0NXX0NNRF9SRUFEOworCQljaC0+Y2N3WzldLmZsYWdzCT0gQ0NXX0ZMQUdfU0xJIHwgQ0NXX0ZMQUdfQ0M7CisJCWNoLT5jY3dbOV0uY291bnQJPSBUSF9IRUFERVJfTEVOR1RIOworCQljaC0+Y2N3WzldLmNkYQkJPSB2aXJ0X3RvX3BoeXMoY2gtPnJjdmRfeGlkX3RoKTsKKworCQljaC0+Y2N3WzEwXS5jbWRfY29kZQk9IENDV19DTURfUkVBRDsKKwkJY2gtPmNjd1sxMF0uZmxhZ3MJPSBDQ1dfRkxBR19TTEkgfCBDQ1dfRkxBR19DQzsKKwkJY2gtPmNjd1sxMF0uY291bnQJPSBYSUQyX0xFTkdUSDsKKwkJY2gtPmNjd1sxMF0uY2RhCQk9IHZpcnRfdG9fcGh5cyhjaC0+cmN2ZF94aWQpOworCisJCWlmIChjaC0+eGlkX3RoID09IE5VTEwpCXsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIGNoLT54aWRfdGg9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZ290byBkb25lOworCQl9CisJCWNoLT5jY3dbMTFdLmNtZF9jb2RlCT0gQ0NXX0NNRF9XUklURTsKKwkJY2gtPmNjd1sxMV0uZmxhZ3MJPSBDQ1dfRkxBR19TTEkgfCBDQ1dfRkxBR19DQzsKKwkJY2gtPmNjd1sxMV0uY291bnQJPSBUSF9IRUFERVJfTEVOR1RIOworCQljaC0+Y2N3WzExXS5jZGEJCT0gdmlydF90b19waHlzKGNoLT54aWRfdGgpOworCisJCWlmIChjaC0+eGlkID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIGNoLT54aWQ9TlVMTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZ290byBkb25lOworCQl9CisJCWNoLT5jY3dbMTJdLmNtZF9jb2RlCT0gQ0NXX0NNRF9XUklURTsKKwkJY2gtPmNjd1sxMl0uZmxhZ3MJPSBDQ1dfRkxBR19TTEkgfCBDQ1dfRkxBR19DQzsKKwkJY2gtPmNjd1sxMl0uY291bnQJPSBYSUQyX0xFTkdUSDsKKwkJY2gtPmNjd1sxMl0uY2RhCQk9IHZpcnRfdG9fcGh5cyhjaC0+eGlkKTsKKworCQlpZiAoY2gtPnhpZF9pZCA9PSBOVUxMKQl7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBjaC0+eGlkX2lkPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWdvdG8gZG9uZTsKKwkJfQorCQljaC0+Y2N3WzEzXS5jbWRfY29kZQk9IENDV19DTURfV1JJVEU7CisJCWNoLT5jY3dbMTNdLmNkYQkJPSB2aXJ0X3RvX3BoeXMoY2gtPnhpZF9pZCk7CisKKwl9CisJY2gtPmNjd1sxM10uZmxhZ3MJPSBDQ1dfRkxBR19TTEkgfCBDQ1dfRkxBR19DQzsKKwljaC0+Y2N3WzEzXS5jb3VudAk9IDQ7CisKKwljaC0+Y2N3WzE0XS5jbWRfY29kZQk9IENDV19DTURfTk9PUDsKKwljaC0+Y2N3WzE0XS5mbGFncwk9IENDV19GTEFHX1NMSTsKKwljaC0+Y2N3WzE0XS5jb3VudAk9IDA7CisJY2gtPmNjd1sxNF0uY2RhCQk9IDA7CisKKwlpZiAoZG9fZGVidWdfY2N3KQorCQljdGNtcGNfZHVtcGl0KChjaGFyICopJmNoLT5jY3dbOF0sIHNpemVvZihzdHJ1Y3QgY2N3MSkgKiA3KTsKKworCWN0Y21wY19kdW1waXQoKGNoYXIgKiljaC0+eGlkX3RoLCBUSF9IRUFERVJfTEVOR1RIKTsKKwljdGNtcGNfZHVtcGl0KChjaGFyICopY2gtPnhpZCwgWElEMl9MRU5HVEgpOworCWN0Y21wY19kdW1waXQoKGNoYXIgKiljaC0+eGlkX2lkLCA0KTsKKwlpZiAoIWluX2lycSgpKSB7CisJCQkgLyogU3VjaCBjb25kaXRpb25hbCBsb2NraW5nIGlzIGEga25vd24gcHJvYmxlbSBmb3IKKwkJCSAgKiBzcGFyc2UgYmVjYXVzZSBpdHMgc3RhdGljIHVuZGV0ZXJtaW5pc3RpYy4KKwkJCSAgKiBXYXJuaW5ncyBzaG91bGQgYmUgaWdub3JlZCBoZXJlLiAqLworCQlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOworCQlnb3Rsb2NrID0gMTsKKwl9CisKKwlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgNTAwMCAsIENUQ19FVkVOVF9USU1FUiwgY2gpOworCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbOF0sCisJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOworCisJaWYgKGdvdGxvY2spCS8qIHNlZSByZW1hcmsgYWJvdmUgYWJvdXQgY29uZGl0aW9uYWwgbG9ja2luZyAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7CisKKwlpZiAocmMgIT0gMCkgeworCQljdGNtX3ByX2luZm8oImN0Y21wYzogJXMoKSBjaDolcyBJTyBmYWlsZWQgXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgY2gtPmlkKTsKKwkJY3RjbV9jY3dfY2hlY2tfcmMoY2gsIHJjLAorCQkJCShzaWRlID09IFhTSURFKSA/ICJ4LXNpZGUgWElEIiA6ICJ5LXNpZGUgWElEIik7CisJfQorCitkb25lOgorCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQgOiAlcygpOiBjaD0weCVwIGlkPSVzXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgY2gsIGNoLT5pZCk7CisJcmV0dXJuOworCit9CisKKy8qCisgKiBNUEMgR3JvdXAgU3RhdGlvbiBGU00gYWN0aW9uCisgKiBDVENNX1BST1RPX01QQyBvbmx5CisgKi8KK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25feHNpZGVfeGlkKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwltcGNfYWN0aW9uX3NpZGVfeGlkKGZzbSwgYXJnLCBYU0lERSk7Cit9CisKKy8qCisgKiBNUEMgR3JvdXAgU3RhdGlvbiBGU00gYWN0aW9uCisgKiBDVENNX1BST1RPX01QQyBvbmx5CisgKi8KK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25feXNpZGVfeGlkKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwltcGNfYWN0aW9uX3NpZGVfeGlkKGZzbSwgYXJnLCBZU0lERSk7Cit9CisKKy8qCisgKiBNUEMgR3JvdXAgU3RhdGlvbiBGU00gYWN0aW9uCisgKiBDVENNX1BST1RPX01QQyBvbmx5CisgKi8KK3N0YXRpYyB2b2lkIG1wY19hY3Rpb25fZG94aWQwKGZzbV9pbnN0YW5jZSAqZnNtLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY2hhbm5lbAkgICAqY2ggPSBhcmc7CisJc3RydWN0IGN0Y21fcHJpdiAgICAqcHJpdjsKKwlzdHJ1Y3QgbXBjX2dyb3VwICAgKmdycCAgICAgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCisJaWYgKGRvX2RlYnVnKQorCQljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7CisKKwlpZiAoY2ggPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBjaD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJZGV2ID0gY2gtPm5ldGRldjsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZGV2PU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlwcml2ID0gZGV2LT5wcml2OworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgcHJpdj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJZ3JwID0gcHJpdi0+bXBjZzsKKwlpZiAoZ3JwID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZ3JwPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoY2gtPnhpZCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGNoLXhpZD1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJZnNtX25ld3N0YXRlKGNoLT5mc20sIENIX1hJRDBfSU5QUk9HUkVTUyk7CisKKwljaC0+eGlkLT54aWQyX29wdGlvbiA9CVhJRDJfMDsKKworCXN3aXRjaCAoZnNtX2dldHN0YXRlKGdycC0+ZnNtKSkgeworCWNhc2UgTVBDR19TVEFURV9YSUQySU5JVFc6CisJY2FzZSBNUENHX1NUQVRFX1hJRDJJTklUWDoKKwkJY2gtPmNjd1s4XS5jbWRfY29kZSA9IENDV19DTURfU0VOU0VfQ01EOworCQlicmVhazsKKwljYXNlIE1QQ0dfU1RBVEVfWElEMElPV0FJVDoKKwljYXNlIE1QQ0dfU1RBVEVfWElEMElPV0FJWDoKKwkJY2gtPmNjd1s4XS5jbWRfY29kZSA9IENDV19DTURfV1JJVEVfQ1RMOworCQlicmVhazsKKwl9CisKKwlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfRE9JTywgY2gpOworCitkb25lOgorCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQgOiAlcygpOiBjaD0weCVwIGlkPSVzXG4iLAorCQkJX19GVU5DVElPTl9fLCBjaCwgY2gtPmlkKTsKKwlyZXR1cm47CisKK30KKworLyoKKyAqIE1QQyBHcm91cCBTdGF0aW9uIEZTTSBhY3Rpb24KKyAqIENUQ01fUFJPVE9fTVBDIG9ubHkKKyovCitzdGF0aWMgdm9pZCBtcGNfYWN0aW9uX2RveGlkNyhmc21faW5zdGFuY2UgKmZzbSwgaW50IGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXYgPSBOVUxMOworCXN0cnVjdCBtcGNfZ3JvdXAgICpncnAgPSBOVUxMOworCWludCBkaXJlY3Rpb247CisJaW50IHJjID0gMDsKKwlpbnQgc2VuZCA9IDA7CisKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZW50ZXI6CSVzKCkgXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIGRldj1OVUxMIFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmMgPSAxOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJcHJpdiA9IGRldi0+cHJpdjsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHByaXY9TlVMTCBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJjID0gMTsKKwkJCQkJZ290byBkb25lOworCX0KKworCWdycCA9IHByaXYtPm1wY2c7CisJaWYgKGdycCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIGdycD1OVUxMIFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmMgPSAxOworCQkJCQlnb3RvIGRvbmU7CisJfQorCisJZm9yIChkaXJlY3Rpb24gPSBSRUFEOyBkaXJlY3Rpb24gPD0gV1JJVEU7IGRpcmVjdGlvbisrKQl7CisJCXN0cnVjdCBjaGFubmVsICpjaCA9IHByaXYtPmNoYW5uZWxbZGlyZWN0aW9uXTsKKwkJc3RydWN0IHhpZDIgKnRoaXN4aWQgPSBjaC0+eGlkOworCQljaC0+eGlkX3NrYi0+ZGF0YSA9IGNoLT54aWRfc2tiX2RhdGE7CisJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoY2gtPnhpZF9za2IpOworCQljaC0+eGlkX3NrYi0+bGVuID0gMDsKKwkJdGhpc3hpZC0+eGlkMl9vcHRpb24gPSBYSUQyXzc7CisJCXNlbmQgPSAwOworCisJCS8qIHhpZDcgcGhhc2UgMSAqLworCQlpZiAoZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyID4gMCkgeworCQkJaWYgKGdycC0+cm9sbCA9PSBZU0lERSkgeworCQkJCWlmIChmc21fZ2V0c3RhdGUoY2gtPmZzbSkgPT0gQ0hfWElEN19QRU5ESU5HMSkgeworCQkJCQlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfWElEN19QRU5ESU5HMik7CisJCQkJCWNoLT5jY3dbOF0uY21kX2NvZGUgPSBDQ1dfQ01EX1NFTlNFX0NNRDsKKwkJCQkJbWVtY3B5KHNrYl9wdXQoY2gtPnhpZF9za2IsCisJCQkJCQkJVEhfSEVBREVSX0xFTkdUSCksCisJCQkJCSAgICAgICAmdGhkdW1teSwgVEhfSEVBREVSX0xFTkdUSCk7CisJCQkJCXNlbmQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZnNtX2dldHN0YXRlKGNoLT5mc20pIDwgQ0hfWElEN19QRU5ESU5HMikgeworCQkJCQlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfWElEN19QRU5ESU5HMik7CisJCQkJCWNoLT5jY3dbOF0uY21kX2NvZGUgPSBDQ1dfQ01EX1dSSVRFX0NUTDsKKwkJCQkJbWVtY3B5KHNrYl9wdXQoY2gtPnhpZF9za2IsCisJCQkJCQkgICAgICAgVEhfSEVBREVSX0xFTkdUSCksCisJCQkJCSAgICAgICAmdGhub3JtLCBUSF9IRUFERVJfTEVOR1RIKTsKKwkJCQkJc2VuZCA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB4aWQ3IHBoYXNlIDIgKi8KKwkJCWlmIChncnAtPnJvbGwgPT0gWVNJREUpIHsKKwkJCQlpZiAoZnNtX2dldHN0YXRlKGNoLT5mc20pIDwgQ0hfWElEN19QRU5ESU5HNCkgeworCQkJCQlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfWElEN19QRU5ESU5HNCk7CisJCQkJCW1lbWNweShza2JfcHV0KGNoLT54aWRfc2tiLAorCQkJCQkJICAgICAgIFRIX0hFQURFUl9MRU5HVEgpLAorCQkJCQkgICAgICAgJnRobm9ybSwgVEhfSEVBREVSX0xFTkdUSCk7CisJCQkJCWNoLT5jY3dbOF0uY21kX2NvZGUgPSBDQ1dfQ01EX1dSSVRFX0NUTDsKKwkJCQkJc2VuZCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIGlmIChmc21fZ2V0c3RhdGUoY2gtPmZzbSkgPT0gQ0hfWElEN19QRU5ESU5HMykgeworCQkJCWZzbV9uZXdzdGF0ZShjaC0+ZnNtLCBDSF9YSUQ3X1BFTkRJTkc0KTsKKwkJCQljaC0+Y2N3WzhdLmNtZF9jb2RlID0gQ0NXX0NNRF9TRU5TRV9DTUQ7CisJCQkJbWVtY3B5KHNrYl9wdXQoY2gtPnhpZF9za2IsIFRIX0hFQURFUl9MRU5HVEgpLAorCQkJCQkJJnRoZHVtbXksIFRIX0hFQURFUl9MRU5HVEgpOworCQkJCXNlbmQgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKHNlbmQpCisJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfRE9JTywgY2gpOworCX0KKworZG9uZToKKworCWlmIChyYyAhPSAwKQorCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIE1QQyBHcm91cCBTdGF0aW9uIEZTTSBhY3Rpb24KKyAqIENUQ01fUFJPVE9fTVBDIG9ubHkKKyAqLworc3RhdGljIHZvaWQgbXBjX2FjdGlvbl9yY3ZkX3hpZDAoZnNtX2luc3RhbmNlICpmc20sIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCisJc3RydWN0IG1wY2dfaW5mbyAgICptcGNnaW5mbyAgID0gYXJnOworCXN0cnVjdCBjaGFubmVsCSAgICpjaAkgICAgICAgPSBtcGNnaW5mby0+Y2g7CisJc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgICAgICAgID0gY2gtPm5ldGRldjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICAgKnByaXY7CisJc3RydWN0IG1wY19ncm91cCAgICpncnA7CisKKwlpZiAoZG9fZGVidWcpCisJCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjogJXMoKTogY3A9JWkgY2g9MHglcCBpZD0lc1xuIiwKKwkJCV9fRlVOQ1RJT05fXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwgY2gtPmlkKTsKKworCXByaXYgPSBkZXYtPnByaXY7CisJZ3JwID0gcHJpdi0+bXBjZzsKKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBpbjolcygpICVzIHhpZDI6JWkgeGlkNzolaSB4aWR0X3AyOiVpIFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgY2gtPmlkLAorCQkgICAgICAgZ3JwLT5vdXRzdGFuZGluZ194aWQyLAorCQkgICAgICAgZ3JwLT5vdXRzdGFuZGluZ194aWQ3LAorCQkgICAgICAgZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyKTsKKworCWlmIChmc21fZ2V0c3RhdGUoY2gtPmZzbSkgPCBDSF9YSUQ3X1BFTkRJTkcpCisJCWZzbV9uZXdzdGF0ZShjaC0+ZnNtLCBDSF9YSUQ3X1BFTkRJTkcpOworCisJZ3JwLT5vdXRzdGFuZGluZ194aWQyLS07CisJZ3JwLT5vdXRzdGFuZGluZ194aWQ3Kys7CisJZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyKys7CisKKwkvKiBtdXN0IGNoYW5nZSBzdGF0ZSBiZWZvcmUgdmFsaWRhdGluZyB4aWQgdG8gKi8KKwkvKiBwcm9wZXJseSBoYW5kbGUgaW50ZXJpbSBpbnRlcnJ1cHRzIHJlY2VpdmVkKi8KKwlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShncnAtPmZzbSkpIHsKKwljYXNlIE1QQ0dfU1RBVEVfWElEMklOSVRXOgorCQlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfWElEMklOSVRYKTsKKwkJbXBjX3ZhbGlkYXRlX3hpZChtcGNnaW5mbyk7CisJCWJyZWFrOworCWNhc2UgTVBDR19TVEFURV9YSUQwSU9XQUlUOgorCQlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfWElEMElPV0FJWCk7CisJCW1wY192YWxpZGF0ZV94aWQobXBjZ2luZm8pOworCQlicmVhazsKKwljYXNlIE1QQ0dfU1RBVEVfWElEMklOSVRYOgorCQlpZiAoZ3JwLT5vdXRzdGFuZGluZ194aWQyID09IDApIHsKKwkJCWZzbV9uZXdzdGF0ZShncnAtPmZzbSwgTVBDR19TVEFURV9YSUQ3SU5JVFcpOworCQkJbXBjX3ZhbGlkYXRlX3hpZChtcGNnaW5mbyk7CisJCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfWElEMkRPTkUsIGRldik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNUENHX1NUQVRFX1hJRDBJT1dBSVg6CisJCWlmIChncnAtPm91dHN0YW5kaW5nX3hpZDIgPT0gMCkgeworCQkJZnNtX25ld3N0YXRlKGdycC0+ZnNtLCBNUENHX1NUQVRFX1hJRDdJTklUSSk7CisJCQltcGNfdmFsaWRhdGVfeGlkKG1wY2dpbmZvKTsKKwkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9YSUQyRE9ORSwgZGV2KTsKKwkJfQorCQlicmVhazsKKwl9CisJa2ZyZWUobXBjZ2luZm8pOworCisJaWYgKGRvX2RlYnVnKSB7CisJCWN0Y21fcHJfZGVidWcoImN0Y21wYzolcygpICVzIHhpZDI6JWkgeGlkNzolaSB4aWR0X3AyOiVpIFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGNoLT5pZCwKKwkJCQlncnAtPm91dHN0YW5kaW5nX3hpZDIsCisJCQkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3LAorCQkJCWdycC0+b3V0c3RhbmRpbmdfeGlkN19wMik7CisJCWN0Y21fcHJfZGVidWcoImN0Y21wYzolcygpICVzIGdycHN0YXRlOiAlcyBjaGFuc3RhdGU6ICVzIFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGNoLT5pZCwKKwkJCQlmc21fZ2V0c3RhdGVfc3RyKGdycC0+ZnNtKSwKKwkJCQlmc21fZ2V0c3RhdGVfc3RyKGNoLT5mc20pKTsKKwl9CisJcmV0dXJuOworCit9CisKKworLyoKKyAqIE1QQyBHcm91cCBTdGF0aW9uIEZTTSBhY3Rpb24KKyAqIENUQ01fUFJPVE9fTVBDIG9ubHkKKyAqLworc3RhdGljIHZvaWQgbXBjX2FjdGlvbl9yY3ZkX3hpZDcoZnNtX2luc3RhbmNlICpmc20sIGludCBldmVudCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBtcGNnX2luZm8gICAqbXBjZ2luZm8gICA9IGFyZzsKKwlzdHJ1Y3QgY2hhbm5lbAkgICAqY2gJICAgICAgID0gbXBjZ2luZm8tPmNoOworCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICAgICAgICA9IGNoLT5uZXRkZXY7CisJc3RydWN0IGN0Y21fcHJpdiAgICpwcml2ICAgID0gZGV2LT5wcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgICAqZ3JwICAgICA9IHByaXYtPm1wY2c7CisKKwlpZiAoZG9fZGVidWcpIHsKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGVudGVyOiAlcygpOiBjcD0laSBjaD0weCVwIGlkPSVzXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwgY2gtPmlkKTsKKworCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICBvdXRzdGFuZGluZ194aWQ3OiAlaSwgIgorCQkJCSIgb3V0c3RhbmRpbmdfeGlkN19wMjogJWlcbiIsCisJCQkJZ3JwLT5vdXRzdGFuZGluZ194aWQ3LAorCQkJCWdycC0+b3V0c3RhbmRpbmdfeGlkN19wMik7CisJfQorCisJZ3JwLT5vdXRzdGFuZGluZ194aWQ3LS07CisJY2gtPnhpZF9za2ItPmRhdGEgPSBjaC0+eGlkX3NrYl9kYXRhOworCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoY2gtPnhpZF9za2IpOworCWNoLT54aWRfc2tiLT5sZW4gPSAwOworCisJc3dpdGNoIChmc21fZ2V0c3RhdGUoZ3JwLT5mc20pKSB7CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklUSToKKwkJZnNtX25ld3N0YXRlKGdycC0+ZnNtLCBNUENHX1NUQVRFX1hJRDdJTklUWik7CisJCW1wY192YWxpZGF0ZV94aWQobXBjZ2luZm8pOworCQlicmVhazsKKwljYXNlIE1QQ0dfU1RBVEVfWElEN0lOSVRXOgorCQlmc21fbmV3c3RhdGUoZ3JwLT5mc20sIE1QQ0dfU1RBVEVfWElEN0lOSVRYKTsKKwkJbXBjX3ZhbGlkYXRlX3hpZChtcGNnaW5mbyk7CisJCWJyZWFrOworCWNhc2UgTVBDR19TVEFURV9YSUQ3SU5JVFo6CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklUWDoKKwkJaWYgKGdycC0+b3V0c3RhbmRpbmdfeGlkNyA9PSAwKSB7CisJCQlpZiAoZ3JwLT5vdXRzdGFuZGluZ194aWQ3X3AyID4gMCkgeworCQkJCWdycC0+b3V0c3RhbmRpbmdfeGlkNyA9CisJCQkJCWdycC0+b3V0c3RhbmRpbmdfeGlkN19wMjsKKwkJCQlncnAtPm91dHN0YW5kaW5nX3hpZDdfcDIgPSAwOworCQkJfSBlbHNlCisJCQkJZnNtX25ld3N0YXRlKGdycC0+ZnNtLCBNUENHX1NUQVRFX1hJRDdJTklURik7CisKKwkJCW1wY192YWxpZGF0ZV94aWQobXBjZ2luZm8pOworCQkJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX1hJRDdET05FLCBkZXYpOworCQkJYnJlYWs7CisJCX0KKwkJbXBjX3ZhbGlkYXRlX3hpZChtcGNnaW5mbyk7CisJCWJyZWFrOworCX0KKworCWtmcmVlKG1wY2dpbmZvKTsKKworCWlmIChkb19kZWJ1ZykKKwkJY3RjbV9wcl9kZWJ1ZygiY3RjbXBjIGV4aXQ6ICVzKCk6IGNwPSVpIGNoPTB4JXAgaWQ9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsIGNoLT5pZCk7CisJcmV0dXJuOworCit9CisKKy8qCisgKiBtcGNfYWN0aW9uIGhlbHBlciBvZiBhbiBNUEMgR3JvdXAgU3RhdGlvbiBGU00gYWN0aW9uCisgKiBDVENNX1BST1RPX01QQyBvbmx5CisgKi8KK3N0YXRpYyBpbnQgbXBjX3NlbmRfcWxsY19kaXNjb250YWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50CXJjCT0gMDsKKwlfX3UzMgluZXdfbGVuCT0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAgICpza2I7CisJc3RydWN0IHFsbGMgICAgICAqcWxsY3B0cjsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2OworCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKKworCWN0Y21fcHJfZGVidWcoImN0Y21wYyBlbnRlcjoJJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGRldj1OVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyYyA9IDE7CisJCQkJCWdvdG8gZG9uZTsKKwl9CisKKwlwcml2ID0gZGV2LT5wcml2OworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBwcml2PU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJjID0gMTsKKwkJCQkJZ290byBkb25lOworCX0KKworCWdycCA9IHByaXYtPm1wY2c7CisJaWYgKGdycCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgZ3JwPU5VTExcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJjID0gMTsKKwkJCQkJZ290byBkb25lOworCX0KKwljdGNtX3ByX2luZm8oImN0Y21wYzogJXMoKSBHUk9VUCBTVEFURTogJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCW1wY2dfc3RhdGVfbmFtZXNbZ3JwLT5zYXZlZF9zdGF0ZV0pOworCisJc3dpdGNoIChncnAtPnNhdmVkX3N0YXRlKSB7CisJLyoKKwkgKiBlc3RhYmxpc2ggY29ubiBjYWxsYmFjayBmdW5jdGlvbiBpcworCSAqIHByZWZlcnJlZCBtZXRob2QgdG8gcmVwb3J0IGZhaWx1cmUKKwkgKi8KKwljYXNlIE1QQ0dfU1RBVEVfWElEMElPV0FJVDoKKwljYXNlIE1QQ0dfU1RBVEVfWElEMElPV0FJWDoKKwljYXNlIE1QQ0dfU1RBVEVfWElEN0lOSVRJOgorCWNhc2UgTVBDR19TVEFURV9YSUQ3SU5JVFo6CisJY2FzZSBNUENHX1NUQVRFX1hJRDJJTklUVzoKKwljYXNlIE1QQ0dfU1RBVEVfWElEMklOSVRYOgorCWNhc2UgTVBDR19TVEFURV9YSUQ3SU5JVFc6CisJY2FzZSBNUENHX1NUQVRFX1hJRDdJTklUWDoKKwkJaWYgKGdycC0+ZXN0Y29ubmZ1bmMpIHsKKwkJCWdycC0+ZXN0Y29ubmZ1bmMoZ3JwLT5wb3J0X251bSwgLTEsIDApOworCQkJZ3JwLT5lc3Rjb25uZnVuYyA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCWNhc2UgTVBDR19TVEFURV9GTE9XQzoKKwljYXNlIE1QQ0dfU1RBVEVfUkVBRFk6CisJCWdycC0+c2VuZF9xbGxjX2Rpc2MgPSAyOworCQluZXdfbGVuID0gc2l6ZW9mKHN0cnVjdCBxbGxjKTsKKwkJcWxsY3B0ciA9IGt6YWxsb2MobmV3X2xlbiwgZ2ZwX3R5cGUoKSB8IEdGUF9ETUEpOworCQlpZiAocWxsY3B0ciA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgImN0Y21wYzogT3V0IG9mIG1lbW9yeSBpbiAlcygpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlyYyA9IDE7CisJCQkJZ290byBkb25lOworCQl9CisKKwkJcWxsY3B0ci0+cWxsY19hZGRyZXNzID0gMHhjYzsKKwkJcWxsY3B0ci0+cWxsY19jb21tYW5kcyA9IDB4MDM7CisKKwkJc2tiID0gX19kZXZfYWxsb2Nfc2tiKG5ld19sZW4sIEdGUF9BVE9NSUMpOworCisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgT3V0IG9mIG1lbW9yeSBpbiBtcGNfc2VuZF9xbGxjXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlyYyA9IDE7CisJCQlrZnJlZShxbGxjcHRyKTsKKwkJCQlnb3RvIGRvbmU7CisJCX0KKworCQltZW1jcHkoc2tiX3B1dChza2IsIG5ld19sZW4pLCBxbGxjcHRyLCBuZXdfbGVuKTsKKwkJa2ZyZWUocWxsY3B0cik7CisKKwkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgNCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3RjbXBjOiAlcygpIFVuYWJsZSB0byIKKwkJCSAgICAgICAiIGJ1aWxkIGRpc2NvbnRhY3QgZm9yICVzXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKTsKKwkJCXJjID0gMTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJZ290byBkb25lOworCQl9CisKKwkJKigoX191MzIgKilza2JfcHVzaChza2IsIDQpKSA9IHByaXYtPmNoYW5uZWxbUkVBRF0tPnBkdV9zZXE7CisJCXByaXYtPmNoYW5uZWxbUkVBRF0tPnBkdV9zZXErKzsKKwkJaWYgKGRvX2RlYnVnX2RhdGEpCisJCQljdGNtX3ByX2RlYnVnKCJjdGNtcGM6ICVzIFRvRENNX3BkdV9zZXE9ICUwOHhcbiIsCisJCQkJX19GVU5DVElPTl9fLCBwcml2LT5jaGFubmVsW1JFQURdLT5wZHVfc2VxKTsKKworCQkvKiByZWNlaXB0IG9mIENDMDMgcmVzZXRzIGFudGljaXBhdGVkIHNlcXVlbmNlIG51bWJlciBvbgorCQkgICAgICByZWNlaXZpbmcgc2lkZSAqLworCQlwcml2LT5jaGFubmVsW1JFQURdLT5wZHVfc2VxID0gMHgwMDsKKwkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJc2tiLT5kZXYgPSBkZXY7CisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9TTkFQKTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKworCQljdGNtcGNfZHVtcGl0KChjaGFyICopc2tiLT5kYXRhLCAoc2l6ZW9mKHN0cnVjdCBxbGxjKSArIDQpKTsKKworCQluZXRpZl9yeChza2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKworCX0KKworZG9uZToKKwljdGNtX3ByX2RlYnVnKCJjdGNtcGMgZXhpdDogICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIHJjOworfQorLyogLS0tIFRoaXMgaXMgdGhlIEVORCBteSBmcmllbmQgLS0tICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuaCBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTk2ODYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5oCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5oCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiBBdXRob3JzOglQZXRlciBUaWVkZW1hbm4gKHB0aWVkZW1AZGUuaWJtLmNvbSkKKyAqCisgKiAJTVBDIGFkZGl0aW9uczoKKyAqCQlCZWxpbmRhIFRob21wc29uIChiZWxpbmRhdEB1cy5pYm0uY29tKQorICoJCUFuZHkgUmljaHRlciAocmljaHRlcmFAdXMuaWJtLmNvbSkKKyAqLworCisjaWZuZGVmIF9DVENfTVBDX0hfCisjZGVmaW5lIF9DVENfTVBDX0hfCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlICJmc20uaCIKKworLyoKKyAqIE1QQyBleHRlcm5hbCBpbnRlcmZhY2UKKyAqIE5vdGUgdGhhdCBjdGNfbXBjX3h5eiBhcmUgY2FsbGVkIHdpdGggYSBsb2NrIG9uIC4uLi4uLi4uLi4uLi4uLi4KKyAqLworCisvKiAgcG9ydF9udW1iZXIgaXMgdGhlIG1wYyBkZXZpY2UgMCwgMSwgMiBldGMgbXBjMiBpcyBwb3J0X251bWJlciAyICovCisKKy8qICBwYXNzaXZlIG9wZW4gIEp1c3Qgd2FpdCBmb3IgWElEMiBleGNoYW5nZSAqLworZXh0ZXJuIGludCBjdGNfbXBjX2FsbG9jX2NoYW5uZWwoaW50IHBvcnQsCisJCXZvaWQgKCpjYWxsYmFjaykoaW50IHBvcnRfbnVtLCBpbnQgbWF4X3dyaXRlX3NpemUpKTsKKy8qIGFjdGl2ZSBvcGVuICBBbGxvYyB0aGVuIHNlbmQgWElEMiAqLworZXh0ZXJuIHZvaWQgY3RjX21wY19lc3RhYmxpc2hfY29ubmVjdGl2aXR5KGludCBwb3J0LAorCQl2b2lkICgqY2FsbGJhY2spKGludCBwb3J0X251bSwgaW50IHJjLCBpbnQgbWF4X3dyaXRlX3NpemUpKTsKKworZXh0ZXJuIHZvaWQgY3RjX21wY19kZWFsbG9jX2NoKGludCBwb3J0KTsKK2V4dGVybiB2b2lkIGN0Y19tcGNfZmxvd19jb250cm9sKGludCBwb3J0LCBpbnQgZmxvd2MpOworCisvKgorICogb3RoZXIgTVBDIEdyb3VwIHByb3RvdHlwZXMgYW5kIHN0cnVjdHVyZXMKKyAqLworCisjZGVmaW5lIEVUSF9QX1NOQV9ESVgJMHg4MEQ1CisKKy8qCisgKiBEZWNsYXJhdGlvbiBvZiBhbiBYSUQyCisgKgorICovCisjZGVmaW5lIEFMTFpFUk9TIDB4MDAwMDAwMDAwMDAwMDAwMAorCisjZGVmaW5lIFhJRF9GTTIJCTB4MjAKKyNkZWZpbmUgWElEMl8wCQkweDAwCisjZGVmaW5lIFhJRDJfNwkJMHgwNworI2RlZmluZSBYSUQyX1dSSVRFX1NJREUgMHgwNAorI2RlZmluZSBYSUQyX1JFQURfU0lERQkweDA1CisKK3N0cnVjdCB4aWQyIHsKKwlfX3U4CXhpZDJfdHlwZV9pZDsKKwlfX3U4CXhpZDJfbGVuOworCV9fdTMyCXhpZDJfYWRqX2lkOworCV9fdTgJeGlkMl9ybGVuOworCV9fdTgJeGlkMl9yZXN2MTsKKwlfX3U4CXhpZDJfZmxhZzE7CisJX191OAl4aWQyX2ZtdHQ7CisJX191OAl4aWQyX2ZsYWc0OworCV9fdTE2CXhpZDJfcmVzdjI7CisJX191OAl4aWQyX3RnbnVtOworCV9fdTMyCXhpZDJfc2VuZGVyX2lkOworCV9fdTgJeGlkMl9mbGFnMjsKKwlfX3U4CXhpZDJfb3B0aW9uOworCWNoYXIgIHhpZDJfcmVzdjNbOF07CisJX191MTYJeGlkMl9yZXN2NDsKKwlfX3U4CXhpZDJfZGxjX3R5cGU7CisJX191MTYJeGlkMl9yZXN2NTsKKwlfX3U4CXhpZDJfbXBjX2ZsYWc7CisJX191OAl4aWQyX3Jlc3Y2OworCV9fdTE2CXhpZDJfYnVmX2xlbjsKKwljaGFyIHhpZDJfYnVmZmVyWzI1NSAtICgxMyAqIHNpemVvZihfX3U4KSArCisJCQkJMiAqIHNpemVvZihfX3UzMikgKworCQkJCTQgKiBzaXplb2YoX191MTYpICsKKwkJCQk4ICogc2l6ZW9mKGNoYXIpKV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBYSUQyX0xFTkdUSCAgKHNpemVvZihzdHJ1Y3QgeGlkMikpCisKK3N0cnVjdCB0aF9oZWFkZXIgeworCV9fdTgJdGhfc2VnOworCV9fdTgJdGhfY2hfZmxhZzsKKyNkZWZpbmUgVEhfSEFTX1BEVQkweGYwCisjZGVmaW5lIFRIX0lTX1hJRAkweDAxCisjZGVmaW5lIFRIX1NXRUVQX1JFUQkweGZlCisjZGVmaW5lIFRIX1NXRUVQX1JFU1AJMHhmZgorCV9fdTgJdGhfYmxrX2ZsYWc7CisjZGVmaW5lIFRIX0RBVEFfSVNfWElECTB4ODAKKyNkZWZpbmUgVEhfUkVUUlkJMHg0MAorI2RlZmluZSBUSF9ESVNDT05UQUNUCTB4YzAKKyNkZWZpbmUgVEhfU0VHX0JMSwkweDIwCisjZGVmaW5lIFRIX0xBU1RfU0VHCTB4MTAKKyNkZWZpbmUgVEhfUERVX1BBUlQJMHgwOAorCV9fdTgJdGhfaXNfeGlkOwkvKiBpcyAweDAxIGlmIHRoaXMgaXMgWElEICAqLworCV9fdTMyCXRoX3NlcV9udW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHRoX2FkZG9uIHsKKwlfX3UzMgl0aF9sYXN0X3NlcTsKKwlfX3UzMgl0aF9yZXN2ZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdGhfc3dlZXAgeworCXN0cnVjdCB0aF9oZWFkZXIgdGg7CisJc3RydWN0IHRoX2FkZG9uIHN3OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVEhfSEVBREVSX0xFTkdUSCAoc2l6ZW9mKHN0cnVjdCB0aF9oZWFkZXIpKQorI2RlZmluZSBUSF9TV0VFUF9MRU5HVEggKHNpemVvZihzdHJ1Y3QgdGhfc3dlZXApKQorCisjZGVmaW5lIFBEVV9MQVNUCTB4ODAKKyNkZWZpbmUgUERVX0NOVEwJMHg0MAorI2RlZmluZSBQRFVfRklSU1QJMHgyMAorCitzdHJ1Y3QgcGR1IHsKKwlfX3UzMglwZHVfb2Zmc2V0OworCV9fdTgJcGR1X2ZsYWc7CisJX191OAlwZHVfcHJvdG87ICAgLyogIDB4MDEgaXMgQVBQTiBTTkEgICovCisJX191MTYJcGR1X3NlcTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFBEVV9IRUFERVJfTEVOR1RIICAoc2l6ZW9mKHN0cnVjdCBwZHUpKQorCitzdHJ1Y3QgcWxsYyB7CisJX191OAlxbGxjX2FkZHJlc3M7CisjZGVmaW5lIFFMTENfUkVRCTB4RkYKKyNkZWZpbmUgUUxMQ19SRVNQCTB4MDAKKwlfX3U4CXFsbGNfY29tbWFuZHM7CisjZGVmaW5lIFFMTENfRElTQ09OTkVDVCAweDUzCisjZGVmaW5lIFFMTENfVU5TRVFBQ0sJMHg3MworI2RlZmluZSBRTExDX1NFVE1PREUJMHg5MworI2RlZmluZSBRTExDX0VYQ0hJRAkweEJGCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogRGVmaW5pdGlvbiBvZiBvbmUgTVBDIGdyb3VwCisgKi8KKworI2RlZmluZSBNQVhfTVBDR0NIQU4JCTEwCisjZGVmaW5lIE1QQ19YSURfVElNRU9VVF9WQUxVRQkxMDAwMAorI2RlZmluZSBNUENfQ0hBTk5FTF9BREQJCTAKKyNkZWZpbmUgTVBDX0NIQU5ORUxfUkVNT1ZFCTEKKyNkZWZpbmUgTVBDX0NIQU5ORUxfQVRUTgkyCisjZGVmaW5lIFhTSURFCTEKKyNkZWZpbmUgWVNJREUJMAorCitzdHJ1Y3QgbXBjZ19pbmZvIHsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOworCXN0cnVjdCBjaGFubmVsCSpjaDsKKwlzdHJ1Y3QgeGlkMgkqeGlkOworCXN0cnVjdCB0aF9zd2VlcAkqc3dlZXA7CisJc3RydWN0IHRoX2hlYWRlciAqdGg7Cit9OworCitzdHJ1Y3QgbXBjX2dyb3VwIHsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbXBjX3Rhc2tsZXQ7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IG1wY190YXNrbGV0MjsKKwlpbnQJY2hhbmdlZF9zaWRlOworCWludAlzYXZlZF9zdGF0ZTsKKwlpbnQJY2hhbm5lbHNfdGVybWluYXRpbmc7CisJaW50CW91dF9vZl9zZXF1ZW5jZTsKKwlpbnQJZmxvd19vZmZfY2FsbGVkOworCWludAlwb3J0X251bTsKKwlpbnQJcG9ydF9wZXJzaXN0OworCWludAlhbGxvY19jYWxsZWQ7CisJX191MzIJeGlkMl9hZGpfaWQ7CisJX191OAl4aWQyX3RnbnVtOworCV9fdTMyCXhpZDJfc2VuZGVyX2lkOworCWludAludW1fY2hhbm5lbF9wYXRoczsKKwlpbnQJYWN0aXZlX2NoYW5uZWxzWzJdOworCV9fdTE2CWdyb3VwX21heF9idWZsZW47CisJaW50CW91dHN0YW5kaW5nX3hpZDI7CisJaW50CW91dHN0YW5kaW5nX3hpZDc7CisJaW50CW91dHN0YW5kaW5nX3hpZDdfcDI7CisJaW50CXN3ZWVwX3JlcV9wZW5kX251bTsKKwlpbnQJc3dlZXBfcnNwX3BlbmRfbnVtOworCXN0cnVjdCBza19idWZmCSp4aWRfc2tiOworCWNoYXIJCSp4aWRfc2tiX2RhdGE7CisJc3RydWN0IHRoX2hlYWRlciAqeGlkX3RoOworCXN0cnVjdCB4aWQyCSp4aWQ7CisJY2hhcgkJKnhpZF9pZDsKKwlzdHJ1Y3QgdGhfaGVhZGVyICpyY3ZkX3hpZF90aDsKKwlzdHJ1Y3Qgc2tfYnVmZgkqcmN2ZF94aWRfc2tiOworCWNoYXIJCSpyY3ZkX3hpZF9kYXRhOworCV9fdTgJCWluX3N3ZWVwOworCV9fdTgJCXJvbGw7CisJc3RydWN0IHhpZDIJKnNhdmVkX3hpZDI7CisJdm9pZCAJCSgqYWxsb2NoYW5mdW5jKShpbnQsIGludCk7CisJaW50CQlhbGxvY2NoYW5fY2FsbGJhY2tfcmV0cmllczsKKwl2b2lkIAkJKCplc3Rjb25uZnVuYykoaW50LCBpbnQsIGludCk7CisJaW50CQllc3Rjb25uX2NhbGxiYWNrX3JldHJpZXM7CisJaW50CQllc3Rjb25uX2NhbGxlZDsKKwlpbnQJCXhpZG5vZ29vZDsKKwlpbnQJCXNlbmRfcWxsY19kaXNjOworCWZzbV90aW1lcgl0aW1lcjsKKwlmc21faW5zdGFuY2UJKmZzbTsgLyogZ3JvdXAgeGlkIGZzbSAqLworfTsKKworI2lmZGVmIERFQlVHREFUQQordm9pZCBjdGNtcGNfZHVtcGl0KGNoYXIgKmJ1ZiwgaW50IGxlbik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGN0Y21wY19kdW1waXQoY2hhciAqYnVmLCBpbnQgbGVuKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBERUJVR0RBVEEKKy8qCisgKiBEdW1wIGhlYWRlciBhbmQgZmlyc3QgMTYgYnl0ZXMgb2YgYW4gc2tfYnVmZiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICoKKyAqIHNrYgkgVGhlIHN0cnVjdCBza19idWZmIHRvIGR1bXAuCisgKiBvZmZzZXQgT2Zmc2V0IHJlbGF0aXZlIHRvIHNrYi1kYXRhLCB3aGVyZSB0byBzdGFydCB0aGUgZHVtcC4KKyAqLwordm9pZCBjdGNtcGNfZHVtcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGN0Y21wY19kdW1wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQore30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgY3RjbXBjX2R1bXAzMihjaGFyICpidWYsIGludCBsZW4pCit7CisJaWYgKGxlbiA8IDMyKQorCQljdGNtcGNfZHVtcGl0KGJ1ZiwgbGVuKTsKKwllbHNlCisJCWN0Y21wY19kdW1waXQoYnVmLCAzMik7Cit9CisKK2ludCBjdGNtcGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3ZvaWQgY3RjbV9jY3dfY2hlY2tfcmMoc3RydWN0IGNoYW5uZWwgKiwgaW50LCBjaGFyICopOwordm9pZCBtcGNfZ3JvdXBfcmVhZHkodW5zaWduZWQgbG9uZyBhZGV2KTsKK2ludCBtcGNfY2hhbm5lbF9hY3Rpb24oc3RydWN0IGNoYW5uZWwgKmNoLCBpbnQgZGlyZWN0aW9uLCBpbnQgYWN0aW9uKTsKK3ZvaWQgbXBjX2FjdGlvbl9zZW5kX2Rpc2NvbnRhY3QodW5zaWduZWQgbG9uZyB0aGlzY2hhbik7Cit2b2lkIG1wY19hY3Rpb25fZGlzY29udGFjdChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7Cit2b2lkIGN0Y21wY19iaCh1bnNpZ25lZCBsb25nIHRoaXNjaGFuKTsKKyNlbmRpZgorLyogLS0tIFRoaXMgaXMgdGhlIEVORCBteSBmcmllbmQgLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fc3lzZnMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMmQxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fc3lzZnMuYwpAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIGRyaXZlcnMvczM5MC9uZXQvY3RjbV9zeXNmcy5jCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3LCAyMDA3CisgKiBBdXRob3JzOglQZXRlciBUaWVkZW1hbm4gKHB0aWVkZW1AZGUuaWJtLmNvbSkKKyAqCisgKi8KKworI3VuZGVmIERFQlVHCisjdW5kZWYgREVCVUdEQVRBCisjdW5kZWYgREVCVUdDQ1cKKworI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSAiY3RjbV9tYWluLmgiCisKKy8qCisgKiBzeXNmcyBhdHRyaWJ1dGVzCisgKi8KKworc3RhdGljIHNzaXplX3QgY3RjbV9idWZmZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5idWZmZXJfc2l6ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN0Y21fYnVmZmVyX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCWludCBiczE7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCEocHJpdiAmJiBwcml2LT5jaGFubmVsW1JFQURdICYmCisJCQkobmRldiA9IHByaXYtPmNoYW5uZWxbUkVBRF0tPm5ldGRldikpKSB7CisJCUNUQ01fREJGX1RFWFQoU0VUVVAsIENUQ19EQkZfRVJST1IsICJiZm5vbmRldiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzc2NhbmYoYnVmLCAiJXUiLCAmYnMxKTsKKwlpZiAoYnMxID4gQ1RDTV9CVUZTSVpFX0xJTUlUKQorCQkJCQlnb3RvIGVpbnZhbDsKKwlpZiAoYnMxIDwgKDU3NiArIExMX0hFQURFUl9MRU5HVEggKyAyKSkKKwkJCQkJZ290byBlaW52YWw7CisJcHJpdi0+YnVmZmVyX3NpemUgPSBiczE7CS8qIGp1c3QgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0ICovCisKKwlpZiAoKG5kZXYtPmZsYWdzICYgSUZGX1JVTk5JTkcpICYmCisJICAgIChiczEgPCAobmRldi0+bXR1ICsgTExfSEVBREVSX0xFTkdUSCArIDIpKSkKKwkJCQkJZ290byBlaW52YWw7CisKKwlwcml2LT5jaGFubmVsW1JFQURdLT5tYXhfYnVmc2l6ZSA9IGJzMTsKKwlwcml2LT5jaGFubmVsW1dSSVRFXS0+bWF4X2J1ZnNpemUgPSBiczE7CisJaWYgKCEobmRldi0+ZmxhZ3MgJiBJRkZfUlVOTklORykpCisJCW5kZXYtPm10dSA9IGJzMSAtIExMX0hFQURFUl9MRU5HVEggLSAyOworCXByaXYtPmNoYW5uZWxbUkVBRF0tPmZsYWdzIHw9IENIQU5ORUxfRkxBR1NfQlVGU0laRV9DSEFOR0VEOworCXByaXYtPmNoYW5uZWxbV1JJVEVdLT5mbGFncyB8PSBDSEFOTkVMX0ZMQUdTX0JVRlNJWkVfQ0hBTkdFRDsKKworCUNUQ01fREJGX0RFVihTRVRVUCwgbmRldiwgYnVmKTsKKwlyZXR1cm4gY291bnQ7CisKK2VpbnZhbDoKKwlDVENNX0RCRl9ERVYoU0VUVVAsIG5kZXYsICJidWZmX2VyciIpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBjdGNtX3ByaW50X3N0YXRpc3RpY3Moc3RydWN0IGN0Y21fcHJpdiAqcHJpdikKK3sKKwljaGFyICpzYnVmOworCWNoYXIgKnA7CisKKwlpZiAoIXByaXYpCisJCXJldHVybjsKKwlzYnVmID0ga21hbGxvYygyMDQ4LCBHRlBfS0VSTkVMKTsKKwlpZiAoc2J1ZiA9PSBOVUxMKQorCQlyZXR1cm47CisJcCA9IHNidWY7CisKKwlwICs9IHNwcmludGYocCwgIiAgRGV2aWNlIEZTTSBzdGF0ZTogJXNcbiIsCisJCSAgICAgZnNtX2dldHN0YXRlX3N0cihwcml2LT5mc20pKTsKKwlwICs9IHNwcmludGYocCwgIiAgUlggY2hhbm5lbCBGU00gc3RhdGU6ICVzXG4iLAorCQkgICAgIGZzbV9nZXRzdGF0ZV9zdHIocHJpdi0+Y2hhbm5lbFtSRUFEXS0+ZnNtKSk7CisJcCArPSBzcHJpbnRmKHAsICIgIFRYIGNoYW5uZWwgRlNNIHN0YXRlOiAlc1xuIiwKKwkJICAgICBmc21fZ2V0c3RhdGVfc3RyKHByaXYtPmNoYW5uZWxbV1JJVEVdLT5mc20pKTsKKwlwICs9IHNwcmludGYocCwgIiAgTWF4LiBUWCBidWZmZXIgdXNlZDogJWxkXG4iLAorCQkgICAgIHByaXYtPmNoYW5uZWxbV1JJVEVdLT5wcm9mLm1heG11bHRpKTsKKwlwICs9IHNwcmludGYocCwgIiAgTWF4LiBjaGFpbmVkIFNLQnM6ICVsZFxuIiwKKwkJICAgICBwcml2LT5jaGFubmVsW1dSSVRFXS0+cHJvZi5tYXhjcXVldWUpOworCXAgKz0gc3ByaW50ZihwLCAiICBUWCBzaW5nbGUgd3JpdGUgb3BzOiAlbGRcbiIsCisJCSAgICAgcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YuZG9pb3Nfc2luZ2xlKTsKKwlwICs9IHNwcmludGYocCwgIiAgVFggbXVsdGkgd3JpdGUgb3BzOiAlbGRcbiIsCisJCSAgICAgcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YuZG9pb3NfbXVsdGkpOworCXAgKz0gc3ByaW50ZihwLCAiICBOZXR0byBieXRlcyB3cml0dGVuOiAlbGRcbiIsCisJCSAgICAgcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YudHhsZW4pOworCXAgKz0gc3ByaW50ZihwLCAiICBNYXguIFRYIElPLXRpbWU6ICVsZFxuIiwKKwkJICAgICBwcml2LT5jaGFubmVsW1dSSVRFXS0+cHJvZi50eF90aW1lKTsKKworCXByaW50ayhLRVJOX0lORk8gIlN0YXRpc3RpY3MgZm9yICVzOlxuJXMiLAorCQkJCXByaXYtPmNoYW5uZWxbV1JJVEVdLT5uZXRkZXYtPm5hbWUsIHNidWYpOworCWtmcmVlKHNidWYpOworCXJldHVybjsKK30KKworc3RhdGljIHNzaXplX3Qgc3RhdHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwljdGNtX3ByaW50X3N0YXRpc3RpY3MocHJpdik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0YXRzX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9ERVY7CisJLyogUmVzZXQgc3RhdGlzdGljcyAqLworCW1lbXNldCgmcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YsIDAsCisJCQkJc2l6ZW9mKHByaXYtPmNoYW5uZWxbV1JJVEVdLT5wcm9mKSk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBjdGNtX3Byb3RvX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+cHJvdG9jb2wpOworfQorCitzdGF0aWMgc3NpemVfdCBjdGNtX3Byb3RvX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCB2YWx1ZTsKKwlzdHJ1Y3QgY3RjbV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PREVWOworCXNzY2FuZihidWYsICIldSIsICZ2YWx1ZSk7CisJaWYgKCEoKHZhbHVlID09IENUQ01fUFJPVE9fUzM5MCkgIHx8CisJICAgICAgKHZhbHVlID09IENUQ01fUFJPVE9fTElOVVgpIHx8CisJICAgICAgKHZhbHVlID09IENUQ01fUFJPVE9fTVBDKSB8fAorCSAgICAgICh2YWx1ZSA9PSBDVENNX1BST1RPX09TMzkwKSkpCisJCXJldHVybiAtRUlOVkFMOworCXByaXYtPnByb3RvY29sID0gdmFsdWU7CisJQ1RDTV9EQkZfREVWKFNFVFVQLCBkZXYsIGJ1Zik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN0Y21fdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2OworCisJY2dkZXYgPSB0b19jY3dncm91cGRldihkZXYpOworCWlmICghY2dkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCisJCQljdTMwODhfdHlwZVtjZ2Rldi0+Y2RldlswXS0+aWQuZHJpdmVyX2luZm9dKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJ1ZmZlciwgMDY0NCwgY3RjbV9idWZmZXJfc2hvdywgY3RjbV9idWZmZXJfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHByb3RvY29sLCAwNjQ0LCBjdGNtX3Byb3RvX3Nob3csIGN0Y21fcHJvdG9fc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKHR5cGUsIDA0NDQsIGN0Y21fdHlwZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0cywgMDY0NCwgc3RhdHNfc2hvdywgc3RhdHNfd3JpdGUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY3RjbV9hdHRyW10gPSB7CisJJmRldl9hdHRyX3Byb3RvY29sLmF0dHIsCisJJmRldl9hdHRyX3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfYnVmZmVyLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGN0Y21fYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBjdGNtX2F0dHIsCit9OworCitpbnQgY3RjbV9hZGRfYXR0cmlidXRlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJjOworCisJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RhdHMpOworCisJcmV0dXJuIHJjOworfQorCit2b2lkIGN0Y21fcmVtb3ZlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdGF0cyk7Cit9CisKK2ludCBjdGNtX2FkZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmY3RjbV9hdHRyX2dyb3VwKTsKK30KKwordm9pZCBjdGNtX3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZjdGNtX2F0dHJfZ3JvdXApOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2E1MDMxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzA2MiArMCwwIEBACi0vKgotICogQ1RDIC8gRVNDT04gbmV0d29yayBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogQXV0aG9yKHMpOiBGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSkKLSAqIEZpeGVzIGJ5IDogSm9jaGVuIFLDtmhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKLSAqICAgICAgICAgICAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+Ci0JICAgICAgUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCi0gKiBEcml2ZXIgTW9kZWwgc3R1ZmYgYnkgOiBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+Ci0gKgotICogRG9jdW1lbnRhdGlvbiB1c2VkOgotICogIC0gUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24gKElCTSBkb2MjOiBTQTIyLTcyMDEtMDYpCi0gKiAgLSBDb21tb24gSU8vLURldmljZSBDb21tYW5kcyBhbmQgU2VsZiBEZXNjcmlwdGlvbiAoSUJNIGRvYyM6IFNBMjItNzIwNC0wMikKLSAqICAtIENvbW1vbiBJTy8tRGV2aWNlIENvbW1hbmRzIGFuZCBTZWxmIERlc2NyaXB0aW9uIChJQk0gZG9jIzogU04yMi01NTM1KQotICogIC0gRVNDT04gQ2hhbm5lbC10by1DaGFubmVsIEFkYXB0ZXIgKElCTSBkb2MjOiBTQTIyLTcyMDMtMDApCi0gKiAgLSBFU0NPTiBJL08gSW50ZXJmYWNlIChJQk0gZG9jIzogU0EyMi03MjAyLTAyOQotICoKLSAqIGFuZCB0aGUgc291cmNlIG9mIHRoZSBvcmlnaW5hbCBDVEMgZHJpdmVyIGJ5OgotICogIERpZXRlciBXZWxsZXJkaWVrICh3ZWxAZGUuaWJtLmNvbSkKLSAqICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCi0gKiAgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQotICogIEpvY2hlbiBSw7ZocmlnIChyb2VocmlnQGRlLmlibS5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICovCi0jdW5kZWYgREVCVUcKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bmV0L2RzdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgotI2luY2x1ZGUgPGFzbS9jY3dncm91cC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxhc20vaWRhbHMuaD4KLQotI2luY2x1ZGUgImZzbS5oIgotI2luY2x1ZGUgImN1MzA4OC5oIgotCi0jaW5jbHVkZSAiY3RjZGJ1Zy5oIgotI2luY2x1ZGUgImN0Y21haW4uaCIKLQotTU9EVUxFX0FVVEhPUigiKEMpIDIwMDAgSUJNIENvcnAuIGJ5IEZyaXR6IEVsZmVydCAoZmVsZmVydEBtaWxsZW51eC5jb20pIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkxpbnV4IGZvciBTLzM5MCBDVEMvRXNjb24gRHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0vKioKLSAqIFN0YXRlcyBvZiB0aGUgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KLSAqLwotZW51bSBkZXZfc3RhdGVzIHsKLQlERVZfU1RBVEVfU1RPUFBFRCwKLQlERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgsCi0JREVWX1NUQVRFX1NUQVJUV0FJVF9SWCwKLQlERVZfU1RBVEVfU1RBUlRXQUlUX1RYLAotCURFVl9TVEFURV9TVE9QV0FJVF9SWFRYLAotCURFVl9TVEFURV9TVE9QV0FJVF9SWCwKLQlERVZfU1RBVEVfU1RPUFdBSVRfVFgsCi0JREVWX1NUQVRFX1JVTk5JTkcsCi0JLyoqCi0JICogTVVTVCBiZSBhbHdheXMgdGhlIGxhc3QgZWxlbWVudCEhCi0JICovCi0JQ1RDX05SX0RFVl9TVEFURVMKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkZXZfc3RhdGVfbmFtZXNbXSA9IHsKLQkiU3RvcHBlZCIsCi0JIlN0YXJ0V2FpdCBSWFRYIiwKLQkiU3RhcnRXYWl0IFJYIiwKLQkiU3RhcnRXYWl0IFRYIiwKLQkiU3RvcFdhaXQgUlhUWCIsCi0JIlN0b3BXYWl0IFJYIiwKLQkiU3RvcFdhaXQgVFgiLAotCSJSdW5uaW5nIiwKLX07Ci0KLS8qKgotICogRXZlbnRzIG9mIHRoZSBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgotICovCi1lbnVtIGRldl9ldmVudHMgewotCURFVl9FVkVOVF9TVEFSVCwKLQlERVZfRVZFTlRfU1RPUCwKLQlERVZfRVZFTlRfUlhVUCwKLQlERVZfRVZFTlRfVFhVUCwKLQlERVZfRVZFTlRfUlhET1dOLAotCURFVl9FVkVOVF9UWERPV04sCi0JREVWX0VWRU5UX1JFU1RBUlQsCi0JLyoqCi0JICogTVVTVCBiZSBhbHdheXMgdGhlIGxhc3QgZWxlbWVudCEhCi0JICovCi0JQ1RDX05SX0RFVl9FVkVOVFMKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkZXZfZXZlbnRfbmFtZXNbXSA9IHsKLQkiU3RhcnQiLAotCSJTdG9wIiwKLQkiUlggdXAiLAotCSJUWCB1cCIsCi0JIlJYIGRvd24iLAotCSJUWCBkb3duIiwKLQkiUmVzdGFydCIsCi19OwotCi0vKioKLSAqIEV2ZW50cyBvZiB0aGUgY2hhbm5lbCBzdGF0ZW1hY2hpbmUKLSAqLwotZW51bSBjaF9ldmVudHMgewotCS8qKgotCSAqIEV2ZW50cywgcmVwcmVzZW50aW5nIHJldHVybiBjb2RlIG9mCi0JICogSS9PIG9wZXJhdGlvbnMgKGNjd19kZXZpY2Vfc3RhcnQsIGNjd19kZXZpY2VfaGFsdCBldCBhbC4pCi0JICovCi0JQ0hfRVZFTlRfSU9fU1VDQ0VTUywKLQlDSF9FVkVOVF9JT19FQlVTWSwKLQlDSF9FVkVOVF9JT19FTk9ERVYsCi0JQ0hfRVZFTlRfSU9fRUlPLAotCUNIX0VWRU5UX0lPX1VOS05PV04sCi0KLQlDSF9FVkVOVF9BVFROQlVTWSwKLQlDSF9FVkVOVF9BVFROLAotCUNIX0VWRU5UX0JVU1ksCi0KLQkvKioKLQkgKiBFdmVudHMsIHJlcHJlc2VudGluZyB1bml0LWNoZWNrCi0JICovCi0JQ0hfRVZFTlRfVUNfUkNSRVNFVCwKLQlDSF9FVkVOVF9VQ19SU1JFU0VULAotCUNIX0VWRU5UX1VDX1RYVElNRU9VVCwKLQlDSF9FVkVOVF9VQ19UWFBBUklUWSwKLQlDSF9FVkVOVF9VQ19IV0ZBSUwsCi0JQ0hfRVZFTlRfVUNfUlhQQVJJVFksCi0JQ0hfRVZFTlRfVUNfWkVSTywKLQlDSF9FVkVOVF9VQ19VTktOT1dOLAotCi0JLyoqCi0JICogRXZlbnRzLCByZXByZXNlbnRpbmcgc3ViY2hhbm5lbC1jaGVjawotCSAqLwotCUNIX0VWRU5UX1NDX1VOS05PV04sCi0KLQkvKioKLQkgKiBFdmVudHMsIHJlcHJlc2VudGluZyBtYWNoaW5lIGNoZWNrcwotCSAqLwotCUNIX0VWRU5UX01DX0ZBSUwsCi0JQ0hfRVZFTlRfTUNfR09PRCwKLQotCS8qKgotCSAqIEV2ZW50LCByZXByZXNlbnRpbmcgbm9ybWFsIElSUQotCSAqLwotCUNIX0VWRU5UX0lSUSwKLQlDSF9FVkVOVF9GSU5TVEFULAotCi0JLyoqCi0JICogRXZlbnQsIHJlcHJlc2VudGluZyB0aW1lciBleHBpcnkuCi0JICovCi0JQ0hfRVZFTlRfVElNRVIsCi0KLQkvKioKLQkgKiBFdmVudHMsIHJlcHJlc2VudGluZyBjb21tYW5kcyBmcm9tIHVwcGVyIGxldmVscy4KLQkgKi8KLQlDSF9FVkVOVF9TVEFSVCwKLQlDSF9FVkVOVF9TVE9QLAotCi0JLyoqCi0JICogTVVTVCBiZSBhbHdheXMgdGhlIGxhc3QgZWxlbWVudCEhCi0JICovCi0JTlJfQ0hfRVZFTlRTLAotfTsKLQotLyoqCi0gKiBTdGF0ZXMgb2YgdGhlIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgotICovCi1lbnVtIGNoX3N0YXRlcyB7Ci0JLyoqCi0JICogQ2hhbm5lbCBub3QgYXNzaWduZWQgdG8gYW55IGRldmljZSwKLQkgKiBpbml0aWFsIHN0YXRlLCBkaXJlY3Rpb24gaW52YWxpZAotCSAqLwotCUNIX1NUQVRFX0lETEUsCi0KLQkvKioKLQkgKiBDaGFubmVsIGFzc2lnbmVkIGJ1dCBub3Qgb3BlcmF0aW5nCi0JICovCi0JQ0hfU1RBVEVfU1RPUFBFRCwKLQlDSF9TVEFURV9TVEFSVFdBSVQsCi0JQ0hfU1RBVEVfU1RBUlRSRVRSWSwKLQlDSF9TVEFURV9TRVRVUFdBSVQsCi0JQ0hfU1RBVEVfUlhJTklULAotCUNIX1NUQVRFX1RYSU5JVCwKLQlDSF9TVEFURV9SWCwKLQlDSF9TVEFURV9UWCwKLQlDSF9TVEFURV9SWElETEUsCi0JQ0hfU1RBVEVfVFhJRExFLAotCUNIX1NUQVRFX1JYRVJSLAotCUNIX1NUQVRFX1RYRVJSLAotCUNIX1NUQVRFX1RFUk0sCi0JQ0hfU1RBVEVfRFRFUk0sCi0JQ0hfU1RBVEVfTk9UT1AsCi0KLQkvKioKLQkgKiBNVVNUIGJlIGFsd2F5cyB0aGUgbGFzdCBlbGVtZW50ISEKLQkgKi8KLQlOUl9DSF9TVEFURVMsCi19OwotCi1zdGF0aWMgaW50IGxvZ2xldmVsID0gQ1RDX0xPR0xFVkVMX0RFRkFVTFQ7Ci0KLS8qKgotICogTGlua2VkIGxpc3Qgb2YgYWxsIGRldGVjdGVkIGNoYW5uZWxzLgotICovCi1zdGF0aWMgc3RydWN0IGNoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKLQotLyoqCi0gKiBQcmludCBCYW5uZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1wcmludF9iYW5uZXIodm9pZCkKLXsKLQlzdGF0aWMgaW50IHByaW50ZWQgPSAwOwotCi0JaWYgKHByaW50ZWQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0lORk8gIkNUQyBkcml2ZXIgaW5pdGlhbGl6ZWRcbiIpOwotCXByaW50ZWQgPSAxOwotfQotCi0vKioKLSAqIFJldHVybiB0eXBlIG9mIGEgZGV0ZWN0ZWQgZGV2aWNlLgotICovCi1zdGF0aWMgZW51bSBjaGFubmVsX3R5cGVzCi1nZXRfY2hhbm5lbF90eXBlKHN0cnVjdCBjY3dfZGV2aWNlX2lkICppZCkKLXsKLQllbnVtIGNoYW5uZWxfdHlwZXMgdHlwZSA9IChlbnVtIGNoYW5uZWxfdHlwZXMpIGlkLT5kcml2ZXJfaW5mbzsKLQotCWlmICh0eXBlID09IGNoYW5uZWxfdHlwZV9maWNvbikKLQkJdHlwZSA9IGNoYW5uZWxfdHlwZV9lc2NvbjsKLQotCXJldHVybiB0eXBlOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqY2hfZXZlbnRfbmFtZXNbXSA9IHsKLQkiY2N3X2RldmljZSBzdWNjZXNzIiwKLQkiY2N3X2RldmljZSBidXN5IiwKLQkiY2N3X2RldmljZSBlbm9kZXYiLAotCSJjY3dfZGV2aWNlIGlvZXJyIiwKLQkiY2N3X2RldmljZSB1bmtub3duIiwKLQotCSJTdGF0dXMgQVRUTiAmIEJVU1kiLAotCSJTdGF0dXMgQVRUTiIsCi0JIlN0YXR1cyBCVVNZIiwKLQotCSJVbml0IGNoZWNrIHJlbW90ZSByZXNldCIsCi0JIlVuaXQgY2hlY2sgcmVtb3RlIHN5c3RlbSByZXNldCIsCi0JIlVuaXQgY2hlY2sgVFggdGltZW91dCIsCi0JIlVuaXQgY2hlY2sgVFggcGFyaXR5IiwKLQkiVW5pdCBjaGVjayBIYXJkd2FyZSBmYWlsdXJlIiwKLQkiVW5pdCBjaGVjayBSWCBwYXJpdHkiLAotCSJVbml0IGNoZWNrIFpFUk8iLAotCSJVbml0IGNoZWNrIFVua25vd24iLAotCi0JIlN1YkNoYW5uZWwgY2hlY2sgVW5rbm93biIsCi0KLQkiTWFjaGluZSBjaGVjayBmYWlsdXJlIiwKLQkiTWFjaGluZSBjaGVjayBvcGVyYXRpb25hbCIsCi0KLQkiSVJRIG5vcm1hbCIsCi0JIklSUSBmaW5hbCIsCi0KLQkiVGltZXIiLAotCi0JIlN0YXJ0IiwKLQkiU3RvcCIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqY2hfc3RhdGVfbmFtZXNbXSA9IHsKLQkiSWRsZSIsCi0JIlN0b3BwZWQiLAotCSJTdGFydFdhaXQiLAotCSJTdGFydFJldHJ5IiwKLQkiU2V0dXBXYWl0IiwKLQkiUlggaW5pdCIsCi0JIlRYIGluaXQiLAotCSJSWCIsCi0JIlRYIiwKLQkiUlggaWRsZSIsCi0JIlRYIGlkbGUiLAotCSJSWCBlcnJvciIsCi0JIlRYIGVycm9yIiwKLQkiVGVybWluYXRpbmciLAotCSJSZXN0YXJ0aW5nIiwKLQkiTm90IG9wZXJhdGlvbmFsIiwKLX07Ci0KLSNpZmRlZiBERUJVRwotLyoqCi0gKiBEdW1wIGhlYWRlciBhbmQgZmlyc3QgMTYgYnl0ZXMgb2YgYW4gc2tfYnVmZiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotICoKLSAqIEBwYXJhbSBza2IgICAgVGhlIHNrX2J1ZmYgdG8gZHVtcC4KLSAqIEBwYXJhbSBvZmZzZXQgT2Zmc2V0IHJlbGF0aXZlIHRvIHNrYi1kYXRhLCB3aGVyZSB0byBzdGFydCB0aGUgZHVtcC4KLSAqLwotc3RhdGljIHZvaWQKLWN0Y19kdW1wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KQotewotCXVuc2lnbmVkIGNoYXIgKnAgPSBza2ItPmRhdGE7Ci0JX191MTYgYmw7Ci0Jc3RydWN0IGxsX2hlYWRlciAqaGVhZGVyOwotCWludCBpOwotCi0JaWYgKCEobG9nbGV2ZWwgJiBDVENfTE9HTEVWRUxfREVCVUcpKQotCQlyZXR1cm47Ci0JcCArPSBvZmZzZXQ7Ci0JYmwgPSAqKChfX3UxNiAqKSBwKTsKLQlwICs9IDI7Ci0JaGVhZGVyID0gKHN0cnVjdCBsbF9oZWFkZXIgKikgcDsKLQlwIC09IDI7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiZHVtcDpcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICJibG9ja2xlbj0lZCAlMDR4XG4iLCBibCwgYmwpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgImgtPmxlbmd0aD0lZCAlMDR4XG4iLCBoZWFkZXItPmxlbmd0aCwKLQkgICAgICAgaGVhZGVyLT5sZW5ndGgpOwotCXByaW50ayhLRVJOX0RFQlVHICJoLT50eXBlPSUwNHhcbiIsIGhlYWRlci0+dHlwZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImgtPnVudXNlZD0lMDR4XG4iLCBoZWFkZXItPnVudXNlZCk7Ci0JaWYgKGJsID4gMTYpCi0JCWJsID0gMTY7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImRhdGE6ICIpOwotCWZvciAoaSA9IDA7IGkgPCBibDsgaSsrKQotCQlwcmludGsoIiUwMnglcyIsICpwKyssIChpICUgMTYpID8gIiAiIDogIlxuPDc+Iik7Ci0JcHJpbnRrKCJcbiIpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZAotY3RjX2R1bXBfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCi17Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBVbnBhY2sgYSBqdXN0IHJlY2VpdmVkIHNrYiBhbmQgaGFuZCBpdCBvdmVyIHRvCi0gKiB1cHBlciBsYXllcnMuCi0gKgotICogQHBhcmFtIGNoIFRoZSBjaGFubmVsIHdoZXJlIHRoaXMgc2tiIGhhcyBiZWVuIHJlY2VpdmVkLgotICogQHBhcmFtIHBza2IgVGhlIHJlY2VpdmVkIHNrYi4KLSAqLwotc3RhdGljIHZvaWQKLWN0Y191bnBhY2tfc2tiKHN0cnVjdCBjaGFubmVsICpjaCwgc3RydWN0IHNrX2J1ZmYgKnBza2IpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0Jc3RydWN0IGN0Y19wcml2ICpwcml2cHRyID0gKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXY7Ci0JX191MTYgbGVuID0gKigoX191MTYgKikgcHNrYi0+ZGF0YSk7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlza2JfcHV0KHBza2IsIDIgKyBMTF9IRUFERVJfTEVOR1RIKTsKLQlza2JfcHVsbChwc2tiLCAyKTsKLQlwc2tiLT5kZXYgPSBkZXY7Ci0JcHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0Jd2hpbGUgKGxlbiA+IDApIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJc3RydWN0IGxsX2hlYWRlciAqaGVhZGVyID0gKHN0cnVjdCBsbF9oZWFkZXIgKikgcHNrYi0+ZGF0YTsKLQotCQlza2JfcHVsbChwc2tiLCBMTF9IRUFERVJfTEVOR1RIKTsKLQkJaWYgKChjaC0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX1MzOTApICYmCi0JCSAgICAoaGVhZGVyLT50eXBlICE9IEVUSF9QX0lQKSkgewotCi0jaWZuZGVmIERFQlVHCi0JCSAgICAgICAgaWYgKCEoY2gtPmxvZ2ZsYWdzICYgTE9HX0ZMQUdfSUxMRUdBTFBLVCkpIHsKLSNlbmRpZgotCQkJCS8qKgotCQkJCSAqIENoZWNrIHBhY2tldCB0eXBlIG9ubHkgaWYgd2Ugc3RpY2sgc3RyaWN0bHkKLQkJCQkgKiB0byBTLzM5MCdzIHByb3RvY29sIG9mIE9TMzkwLiBUaGlzIG9ubHkKLQkJCQkgKiBzdXBwb3J0cyBJUC4gT3RoZXJ3aXNlIGFsbG93IGFueSBwYWNrZXQKLQkJCQkgKiB0eXBlLgotCQkJCSAqLwotCQkJCWN0Y19wcl93YXJuKAotCQkJCQkiJXMgSWxsZWdhbCBwYWNrZXQgdHlwZSAweCUwNHggcmVjZWl2ZWQsIGRyb3BwaW5nXG4iLAotCQkJCQlkZXYtPm5hbWUsIGhlYWRlci0+dHlwZSk7Ci0JCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX0lMTEVHQUxQS1Q7Ci0jaWZuZGVmIERFQlVHCi0JCQl9Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotCQkJY3RjX2R1bXBfc2tiKHBza2IsIC02KTsKLSNlbmRpZgotCQkJcHJpdnB0ci0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJcHJpdnB0ci0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcHNrYi0+cHJvdG9jb2wgPSBudG9ocyhoZWFkZXItPnR5cGUpOwotCQlpZiAoaGVhZGVyLT5sZW5ndGggPD0gTExfSEVBREVSX0xFTkdUSCkgewotI2lmbmRlZiBERUJVRwotCQkgICAgICAgIGlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX0lMTEVHQUxTSVpFKSkgewotI2VuZGlmCi0JCQkJY3RjX3ByX3dhcm4oCi0JCQkJICAgICAgICIlcyBJbGxlZ2FsIHBhY2tldCBzaXplICVkICIKLQkJCQkgICAgICAgInJlY2VpdmVkIChNVFU9JWQgYmxvY2tsZW49JWQpLCAiCi0JCQkJICAgICAgICJkcm9wcGluZ1xuIiwgZGV2LT5uYW1lLCBoZWFkZXItPmxlbmd0aCwKLQkJCQkgICAgICAgZGV2LT5tdHUsIGxlbik7Ci0JCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX0lMTEVHQUxTSVpFOwotI2lmbmRlZiBERUJVRwotCQkJfQotI2VuZGlmCi0jaWZkZWYgREVCVUcKLQkJCWN0Y19kdW1wX3NrYihwc2tiLCAtNik7Ci0jZW5kaWYKLQkJCXByaXZwdHItPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJCXByaXZwdHItPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCXJldHVybjsKLQkJfQotCQloZWFkZXItPmxlbmd0aCAtPSBMTF9IRUFERVJfTEVOR1RIOwotCQlsZW4gLT0gTExfSEVBREVSX0xFTkdUSDsKLQkJaWYgKChoZWFkZXItPmxlbmd0aCA+IHNrYl90YWlscm9vbShwc2tiKSkgfHwKLQkJICAgIChoZWFkZXItPmxlbmd0aCA+IGxlbikpIHsKLSNpZm5kZWYgREVCVUcKLQkJICAgICAgICBpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19PVkVSUlVOKSkgewotI2VuZGlmCi0JCQkJY3RjX3ByX3dhcm4oCi0JCQkJCSIlcyBJbGxlZ2FsIHBhY2tldCBzaXplICVkICIKLQkJCQkJIihiZXlvbmQgdGhlIGVuZCBvZiByZWNlaXZlZCBkYXRhKSwgIgotCQkJCQkiZHJvcHBpbmdcbiIsIGRldi0+bmFtZSwgaGVhZGVyLT5sZW5ndGgpOwotCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19PVkVSUlVOOwotI2lmbmRlZiBERUJVRwotCQkJfQotI2VuZGlmCi0jaWZkZWYgREVCVUcKLQkJCWN0Y19kdW1wX3NrYihwc2tiLCAtNik7Ci0jZW5kaWYKLQkJCXByaXZwdHItPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJCXByaXZwdHItPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCXJldHVybjsKLQkJfQotCQlza2JfcHV0KHBza2IsIGhlYWRlci0+bGVuZ3RoKTsKLQkJc2tiX3Jlc2V0X21hY19oZWFkZXIocHNrYik7Ci0JCWxlbiAtPSBoZWFkZXItPmxlbmd0aDsKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihwc2tiLT5sZW4pOwotCQlpZiAoIXNrYikgewotI2lmbmRlZiBERUJVRwotCQkgICAgICAgIGlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX05PTUVNKSkgewotI2VuZGlmCi0JCQkJY3RjX3ByX3dhcm4oCi0JCQkJCSIlcyBPdXQgb2YgbWVtb3J5IGluIGN0Y191bnBhY2tfc2tiXG4iLAotCQkJCQlkZXYtPm5hbWUpOwotCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19OT01FTTsKLSNpZm5kZWYgREVCVUcKLQkJCX0KLSNlbmRpZgotCQkJcHJpdnB0ci0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJcmV0dXJuOwotCQl9Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEocHNrYiwgc2tiX3B1dChza2IsIHBza2ItPmxlbiksCi0JCQkJCSAgcHNrYi0+bGVuKTsKLQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQkJc2tiLT5kZXYgPSBwc2tiLT5kZXY7Ci0JCXNrYi0+cHJvdG9jb2wgPSBwc2tiLT5wcm90b2NvbDsKLQkJcHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCS8qKgotCQkgKiByZXNldCBsb2dmbGFncwotCQkgKi8KLQkJY2gtPmxvZ2ZsYWdzID0gMDsKLQkJcHJpdnB0ci0+c3RhdHMucnhfcGFja2V0cysrOwotCQlwcml2cHRyLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQkJbmV0aWZfcnhfbmkoc2tiKTsKLQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJaWYgKGxlbiA+IDApIHsKLQkJCXNrYl9wdWxsKHBza2IsIGhlYWRlci0+bGVuZ3RoKTsKLQkJCWlmIChza2JfdGFpbHJvb20ocHNrYikgPCBMTF9IRUFERVJfTEVOR1RIKSB7Ci0jaWZuZGVmIERFQlVHCi0JCQkJaWYgKCEoY2gtPmxvZ2ZsYWdzICYgTE9HX0ZMQUdfT1ZFUlJVTikpIHsKLSNlbmRpZgotCQkJCQljdGNfcHJfd2FybigKLQkJCQkJCSIlcyBPdmVycnVuIGluIGN0Y191bnBhY2tfc2tiXG4iLAotCQkJCQkJZGV2LT5uYW1lKTsKLQkJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47Ci0jaWZuZGVmIERFQlVHCi0JCQkJfQotI2VuZGlmCi0JCQkJcmV0dXJuOwotCQkJfQotCQkJc2tiX3B1dChwc2tiLCBMTF9IRUFERVJfTEVOR1RIKTsKLQkJfQotCX0KLX0KLQotLyoqCi0gKiBDaGVjayByZXR1cm4gY29kZSBvZiBhIHByZWNlZWRpbmcgY2N3X2RldmljZSBjYWxsLCBoYWx0X0lPIGV0Yy4uLgotICoKLSAqIEBwYXJhbSBjaCAgICAgICAgICBUaGUgY2hhbm5lbCwgdGhlIGVycm9yIGJlbG9uZ3MgdG8uCi0gKiBAcGFyYW0gcmV0dXJuX2NvZGUgVGhlIGVycm9yIGNvZGUgdG8gaW5zcGVjdC4KLSAqLwotc3RhdGljIHZvaWQKLWNjd19jaGVja19yZXR1cm5fY29kZShzdHJ1Y3QgY2hhbm5lbCAqY2gsIGludCByZXR1cm5fY29kZSwgY2hhciAqbXNnKQotewotCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwotCXN3aXRjaCAocmV0dXJuX2NvZGUpIHsKLQkJY2FzZSAwOgotCQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX0lPX1NVQ0NFU1MsIGNoKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FQlVTWToKLQkJCWN0Y19wcl93YXJuKCIlcyAoJXMpOiBCdXN5ICFcbiIsIGNoLT5pZCwgbXNnKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9JT19FQlVTWSwgY2gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVOT0RFVjoKLQkJCWN0Y19wcl9lbWVyZygiJXMgKCVzKTogSW52YWxpZCBkZXZpY2UgY2FsbGVkIGZvciBJT1xuIiwKLQkJCQkgICAgIGNoLT5pZCwgbXNnKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9JT19FTk9ERVYsIGNoKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FSU86Ci0JCQljdGNfcHJfZW1lcmcoIiVzICglcyk6IFN0YXR1cyBwZW5kaW5nLi4uIFxuIiwKLQkJCQkgICAgIGNoLT5pZCwgbXNnKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9JT19FSU8sIGNoKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY3RjX3ByX2VtZXJnKCIlcyAoJXMpOiBVbmtub3duIGVycm9yIGluIGRvX0lPICUwNHhcbiIsCi0JCQkJICAgICBjaC0+aWQsIG1zZywgcmV0dXJuX2NvZGUpOwotCQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX0lPX1VOS05PV04sIGNoKTsKLQl9Ci19Ci0KLS8qKgotICogQ2hlY2sgc2Vuc2Ugb2YgYSB1bml0IGNoZWNrLgotICoKLSAqIEBwYXJhbSBjaCAgICBUaGUgY2hhbm5lbCwgdGhlIHNlbnNlIGNvZGUgYmVsb25ncyB0by4KLSAqIEBwYXJhbSBzZW5zZSBUaGUgc2Vuc2UgY29kZSB0byBpbnNwZWN0LgotICovCi1zdGF0aWMgdm9pZAotY2N3X3VuaXRfY2hlY2soc3RydWN0IGNoYW5uZWwgKmNoLCB1bnNpZ25lZCBjaGFyIHNlbnNlKQotewotCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwotCWlmIChzZW5zZSAmIFNOUzBfSU5URVJWRU5USU9OX1JFUSkgewotCQlpZiAoc2Vuc2UgJiAweDAxKSB7Ci0JCQljdGNfcHJfZGVidWcoIiVzOiBJbnRlcmZhY2UgZGlzYy4gb3IgU2VsLiByZXNldCAiCi0JCQkJCSIocmVtb3RlKVxuIiwgY2gtPmlkKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9VQ19SQ1JFU0VULCBjaCk7Ci0JCX0gZWxzZSB7Ci0JCQljdGNfcHJfZGVidWcoIiVzOiBTeXN0ZW0gcmVzZXQgKHJlbW90ZSlcbiIsIGNoLT5pZCk7Ci0JCQlmc21fZXZlbnQoY2gtPmZzbSwgQ0hfRVZFTlRfVUNfUlNSRVNFVCwgY2gpOwotCQl9Ci0JfSBlbHNlIGlmIChzZW5zZSAmIFNOUzBfRVFVSVBNRU5UX0NIRUNLKSB7Ci0JCWlmIChzZW5zZSAmIFNOUzBfQlVTX09VVF9DSEVDSykgewotCQkJY3RjX3ByX3dhcm4oIiVzOiBIYXJkd2FyZSBtYWxmdW5jdGlvbiAocmVtb3RlKVxuIiwKLQkJCQkgICAgY2gtPmlkKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9VQ19IV0ZBSUwsIGNoKTsKLQkJfSBlbHNlIHsKLQkJCWN0Y19wcl93YXJuKCIlczogUmVhZC1kYXRhIHBhcml0eSBlcnJvciAocmVtb3RlKVxuIiwKLQkJCQkgICAgY2gtPmlkKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9VQ19SWFBBUklUWSwgY2gpOwotCQl9Ci0JfSBlbHNlIGlmIChzZW5zZSAmIFNOUzBfQlVTX09VVF9DSEVDSykgewotCQlpZiAoc2Vuc2UgJiAweDA0KSB7Ci0JCQljdGNfcHJfd2FybigiJXM6IERhdGEtc3RyZWFtaW5nIHRpbWVvdXQpXG4iLCBjaC0+aWQpOwotCQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX1VDX1RYVElNRU9VVCwgY2gpOwotCQl9IGVsc2UgewotCQkJY3RjX3ByX3dhcm4oIiVzOiBEYXRhLXRyYW5zZmVyIHBhcml0eSBlcnJvclxuIiwgY2gtPmlkKTsKLQkJCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9VQ19UWFBBUklUWSwgY2gpOwotCQl9Ci0JfSBlbHNlIGlmIChzZW5zZSAmIFNOUzBfQ01EX1JFSkVDVCkgewotCQljdGNfcHJfd2FybigiJXM6IENvbW1hbmQgcmVqZWN0XG4iLCBjaC0+aWQpOwotCX0gZWxzZSBpZiAoc2Vuc2UgPT0gMCkgewotCQljdGNfcHJfZGVidWcoIiVzOiBVbml0IGNoZWNrIFpFUk9cbiIsIGNoLT5pZCk7Ci0JCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9VQ19aRVJPLCBjaCk7Ci0JfSBlbHNlIHsKLQkJY3RjX3ByX3dhcm4oIiVzOiBVbml0IENoZWNrIHdpdGggc2Vuc2UgY29kZTogJTAyeFxuIiwKLQkJCSAgICBjaC0+aWQsIHNlbnNlKTsKLQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX1VDX1VOS05PV04sIGNoKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGNfcHVyZ2Vfc2tiX3F1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKnEpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwotCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShxKSkpIHsKLQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1jdGNfY2hlY2thbGxvY19idWZmZXIoc3RydWN0IGNoYW5uZWwgKmNoLCBpbnQgd2FybikKLXsKLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQlpZiAoKGNoLT50cmFuc19za2IgPT0gTlVMTCkgfHwKLQkgICAgKGNoLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfQlVGU0laRV9DSEFOR0VEKSkgewotCQlpZiAoY2gtPnRyYW5zX3NrYiAhPSBOVUxMKQotCQkJZGV2X2tmcmVlX3NrYihjaC0+dHJhbnNfc2tiKTsKLQkJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbMV0pOwotCQljaC0+dHJhbnNfc2tiID0gX19kZXZfYWxsb2Nfc2tiKGNoLT5tYXhfYnVmc2l6ZSwKLQkJCQkJCUdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKLQkJaWYgKGNoLT50cmFuc19za2IgPT0gTlVMTCkgewotCQkJaWYgKHdhcm4pCi0JCQkJY3RjX3ByX3dhcm4oCi0JCQkJCSIlczogQ291bGRuJ3QgYWxsb2MgJXMgdHJhbnNfc2tiXG4iLAotCQkJCQljaC0+aWQsCi0JCQkJCShDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8KLQkJCQkJIlJYIiA6ICJUWCIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJY2gtPmNjd1sxXS5jb3VudCA9IGNoLT5tYXhfYnVmc2l6ZTsKLQkJaWYgKHNldF9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1sxXSwgY2gtPnRyYW5zX3NrYi0+ZGF0YSkpIHsKLQkJCWRldl9rZnJlZV9za2IoY2gtPnRyYW5zX3NrYik7Ci0JCQljaC0+dHJhbnNfc2tiID0gTlVMTDsKLQkJCWlmICh3YXJuKQotCQkJCWN0Y19wcl93YXJuKAotCQkJCQkiJXM6IHNldF9ub3JtYWxpemVkX2NkYSBmb3IgJXMgIgotCQkJCQkidHJhbnNfc2tiIGZhaWxlZCwgZHJvcHBpbmcgcGFja2V0c1xuIiwKLQkJCQkJY2gtPmlkLAotCQkJCQkoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSA/Ci0JCQkJCSJSWCIgOiAiVFgiKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWNoLT5jY3dbMV0uY291bnQgPSAwOwotCQljaC0+dHJhbnNfc2tiX2RhdGEgPSBjaC0+dHJhbnNfc2tiLT5kYXRhOwotCQljaC0+ZmxhZ3MgJj0gfkNIQU5ORUxfRkxBR1NfQlVGU0laRV9DSEFOR0VEOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBEdW1teSBOT1AgYWN0aW9uIGZvciBzdGF0ZW1hY2hpbmVzCi0gKi8KLXN0YXRpYyB2b2lkCi1mc21fYWN0aW9uX25vcChmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci19Ci0KLS8qKgotICogQWN0aW9ucyBmb3IgY2hhbm5lbCAtIHN0YXRlbWFjaGluZXMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogTm9ybWFsIGRhdGEgaGFzIGJlZW4gc2VuZC4gRnJlZSB0aGUgY29ycmVzcG9uZGluZwotICogc2tiIChpdCdzIGluIGlvX3F1ZXVlKSwgcmVzZXQgZGV2LT50YnVzeSBhbmQKLSAqIHJldmVydCB0byBpZGxlIHN0YXRlLgotICoKLSAqIEBwYXJhbSBmaSAgICBBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgotICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KLSAqIEBwYXJhbSBhcmcgICBHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1jaF9hY3Rpb25fdHhkb25lKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBmaXJzdCA9IDE7Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBkdXJhdGlvbjsKLQlzdHJ1Y3QgdGltZXNwZWMgZG9uZV9zdGFtcCA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCi0JZHVyYXRpb24gPQotCSAgICAoZG9uZV9zdGFtcC50dl9zZWMgLSBjaC0+cHJvZi5zZW5kX3N0YW1wLnR2X3NlYykgKiAxMDAwMDAwICsKLQkgICAgKGRvbmVfc3RhbXAudHZfbnNlYyAtIGNoLT5wcm9mLnNlbmRfc3RhbXAudHZfbnNlYykgLyAxMDAwOwotCWlmIChkdXJhdGlvbiA+IGNoLT5wcm9mLnR4X3RpbWUpCi0JCWNoLT5wcm9mLnR4X3RpbWUgPSBkdXJhdGlvbjsKLQotCWlmIChjaC0+aXJiLT5zY3N3LmNvdW50ICE9IDApCi0JCWN0Y19wcl9kZWJ1ZygiJXM6IFRYIG5vdCBjb21wbGV0ZSwgcmVtYWluaW5nICVkIGJ5dGVzXG4iLAotCQkJICAgICBkZXYtPm5hbWUsIGNoLT5pcmItPnNjc3cuY291bnQpOwotCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjaC0+aW9fcXVldWUpKSkgewotCQlwcml2cHRyLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCXByaXZwdHItPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuIC0gTExfSEVBREVSX0xFTkdUSDsKLQkJaWYgKGZpcnN0KSB7Ci0JCQlwcml2cHRyLT5zdGF0cy50eF9ieXRlcyArPSAyOwotCQkJZmlyc3QgPSAwOwotCQl9Ci0JCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwotCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCX0KLQlzcGluX2xvY2soJmNoLT5jb2xsZWN0X2xvY2spOwotCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzRdKTsKLQlpZiAoY2gtPmNvbGxlY3RfbGVuID4gMCkgewotCQlpbnQgcmM7Ci0KLQkJaWYgKGN0Y19jaGVja2FsbG9jX2J1ZmZlcihjaCwgMSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKLQkJCXJldHVybjsKLQkJfQotCQljaC0+dHJhbnNfc2tiLT5kYXRhID0gY2gtPnRyYW5zX3NrYl9kYXRhOwotCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGNoLT50cmFuc19za2IpOwotCQljaC0+dHJhbnNfc2tiLT5sZW4gPSAwOwotCQlpZiAoY2gtPnByb2YubWF4bXVsdGkgPCAoY2gtPmNvbGxlY3RfbGVuICsgMikpCi0JCQljaC0+cHJvZi5tYXhtdWx0aSA9IGNoLT5jb2xsZWN0X2xlbiArIDI7Ci0JCWlmIChjaC0+cHJvZi5tYXhjcXVldWUgPCBza2JfcXVldWVfbGVuKCZjaC0+Y29sbGVjdF9xdWV1ZSkpCi0JCQljaC0+cHJvZi5tYXhjcXVldWUgPSBza2JfcXVldWVfbGVuKCZjaC0+Y29sbGVjdF9xdWV1ZSk7Ci0JCSooKF9fdTE2ICopIHNrYl9wdXQoY2gtPnRyYW5zX3NrYiwgMikpID0gY2gtPmNvbGxlY3RfbGVuICsgMjsKLQkJaSA9IDA7Ci0JCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNoLT5jb2xsZWN0X3F1ZXVlKSkpIHsKLQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KGNoLT50cmFuc19za2IsCi0JCQkJCQkJICAgICAgIHNrYi0+bGVuKSwKLQkJCQkJCSAgc2tiLT5sZW4pOwotCQkJcHJpdnB0ci0+c3RhdHMudHhfcGFja2V0cysrOwotCQkJcHJpdnB0ci0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW4gLSBMTF9IRUFERVJfTEVOR1RIOwotCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCQkJaSsrOwotCQl9Ci0JCWNoLT5jb2xsZWN0X2xlbiA9IDA7Ci0JCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKLQkJY2gtPmNjd1sxXS5jb3VudCA9IGNoLT50cmFuc19za2ItPmxlbjsKLQkJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ19USU1FT1VUXzVTRUMsIENIX0VWRU5UX1RJTUVSLCBjaCk7Ci0JCWNoLT5wcm9mLnNlbmRfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7Ci0JCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMF0sCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIGNoLCAweGZmLCAwKTsKLQkJY2gtPnByb2YuZG9pb3NfbXVsdGkrKzsKLQkJaWYgKHJjICE9IDApIHsKLQkJCXByaXZwdHItPnN0YXRzLnR4X2Ryb3BwZWQgKz0gaTsKLQkJCXByaXZwdHItPnN0YXRzLnR4X2Vycm9ycyArPSBpOwotCQkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQkJY2N3X2NoZWNrX3JldHVybl9jb2RlKGNoLCByYywgImNoYWluZWQgVFgiKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrKCZjaC0+Y29sbGVjdF9sb2NrKTsKLQkJZnNtX25ld3N0YXRlKGZpLCBDSF9TVEFURV9UWElETEUpOwotCX0KLQljdGNfY2xlYXJfYnVzeShkZXYpOwotfQotCi0vKioKLSAqIEluaXRpYWwgZGF0YSBpcyBzZW50LgotICogTm90aWZ5IGRldmljZSBzdGF0ZW1hY2hpbmUgdGhhdCB3ZSBhcmUgdXAgYW5kCi0gKiBydW5uaW5nLgotICoKLSAqIEBwYXJhbSBmaSAgICBBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgotICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KLSAqIEBwYXJhbSBhcmcgICBHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1jaF9hY3Rpb25fdHhpZGxlKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfVFhJRExFKTsKLQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgY2gtPm5ldGRldi0+cHJpdiktPmZzbSwgREVWX0VWRU5UX1RYVVAsCi0JCSAgY2gtPm5ldGRldik7Ci19Ci0KLS8qKgotICogR290IG5vcm1hbCBkYXRhLCBjaGVjayBmb3Igc2FuaXR5LCBxdWV1ZSBpdCB1cCwgYWxsb2NhdGUgbmV3IGJ1ZmZlcgotICogdHJpZ2dlciBib3R0b20gaGFsZiwgYW5kIGluaXRpYXRlIG5leHQgcmVhZC4KLSAqCi0gKiBAcGFyYW0gZmkgICAgQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KLSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCi0gKiBAcGFyYW0gYXJnICAgR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotY2hfYWN0aW9uX3J4KGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKLQlpbnQgbGVuID0gY2gtPm1heF9idWZzaXplIC0gY2gtPmlyYi0+c2Nzdy5jb3VudDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY2gtPnRyYW5zX3NrYjsKLQlfX3UxNiBibG9ja19sZW4gPSAqKChfX3UxNiAqKSBza2ItPmRhdGEpOwotCWludCBjaGVja19sZW47Ci0JaW50IHJjOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCWlmIChsZW4gPCA4KSB7Ci0JCWN0Y19wcl9kZWJ1ZygiJXM6IGdvdCBwYWNrZXQgd2l0aCBsZW5ndGggJWQgPCA4XG4iLAotCQkJICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCXByaXZwdHItPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJcHJpdnB0ci0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQlnb3RvIGFnYWluOwotCX0KLQlpZiAobGVuID4gY2gtPm1heF9idWZzaXplKSB7Ci0JCWN0Y19wcl9kZWJ1ZygiJXM6IGdvdCBwYWNrZXQgd2l0aCBsZW5ndGggJWQgPiAlZFxuIiwKLQkJCSAgICAgZGV2LT5uYW1lLCBsZW4sIGNoLT5tYXhfYnVmc2l6ZSk7Ci0JCXByaXZwdHItPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJcHJpdnB0ci0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQlnb3RvIGFnYWluOwotCX0KLQotCS8qKgotCSAqIFZNIFRDUCBzZWVtcyB0byBoYXZlIGEgYnVnIHNlbmRpbmcgMiB0cmFpbGluZyBieXRlcyBvZiBnYXJiYWdlLgotCSAqLwotCXN3aXRjaCAoY2gtPnByb3RvY29sKSB7Ci0JCWNhc2UgQ1RDX1BST1RPX1MzOTA6Ci0JCWNhc2UgQ1RDX1BST1RPX09TMzkwOgotCQkJY2hlY2tfbGVuID0gYmxvY2tfbGVuICsgMjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY2hlY2tfbGVuID0gYmxvY2tfbGVuOwotCQkJYnJlYWs7Ci0JfQotCWlmICgobGVuIDwgYmxvY2tfbGVuKSB8fCAobGVuID4gY2hlY2tfbGVuKSkgewotCQljdGNfcHJfZGVidWcoIiVzOiBnb3QgYmxvY2sgbGVuZ3RoICVkICE9IHJ4IGxlbmd0aCAlZFxuIiwKLQkJCSAgICAgZGV2LT5uYW1lLCBibG9ja19sZW4sIGxlbik7Ci0jaWZkZWYgREVCVUcKLQkJY3RjX2R1bXBfc2tiKHNrYiwgMCk7Ci0jZW5kaWYKLQkJKigoX191MTYgKikgc2tiLT5kYXRhKSA9IGxlbjsKLQkJcHJpdnB0ci0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQlwcml2cHRyLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCWJsb2NrX2xlbiAtPSAyOwotCWlmIChibG9ja19sZW4gPiAwKSB7Ci0JCSooKF9fdTE2ICopIHNrYi0+ZGF0YSkgPSBibG9ja19sZW47Ci0JCWN0Y191bnBhY2tfc2tiKGNoLCBza2IpOwotCX0KLSBhZ2FpbjoKLQlza2ItPmRhdGEgPSBjaC0+dHJhbnNfc2tiX2RhdGE7Ci0Jc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpOwotCXNrYi0+bGVuID0gMDsKLQlpZiAoY3RjX2NoZWNrYWxsb2NfYnVmZmVyKGNoLCAxKSkKLQkJcmV0dXJuOwotCWNoLT5jY3dbMV0uY291bnQgPSBjaC0+bWF4X2J1ZnNpemU7Ci0JcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoLT5jZGV2LCAmY2gtPmNjd1swXSwgKHVuc2lnbmVkIGxvbmcpIGNoLCAweGZmLCAwKTsKLQlpZiAocmMgIT0gMCkKLQkJY2N3X2NoZWNrX3JldHVybl9jb2RlKGNoLCByYywgIm5vcm1hbCBSWCIpOwotfQotCi1zdGF0aWMgdm9pZCBjaF9hY3Rpb25fcnhpZGxlKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZyk7Ci0KLS8qKgotICogSW5pdGlhbGl6ZSBjb25uZWN0aW9uIGJ5IHNlbmRpbmcgYSBfX3UxNiBvZiB2YWx1ZSAwLgotICoKLSAqIEBwYXJhbSBmaSAgICBBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgotICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KLSAqIEBwYXJhbSBhcmcgICBHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1jaF9hY3Rpb25fZmlyc3Rpbyhmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGNoYW5uZWwgKmNoID0gKHN0cnVjdCBjaGFubmVsICopIGFyZzsKLQlpbnQgcmM7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQotCWlmIChmc21fZ2V0c3RhdGUoZmkpID09IENIX1NUQVRFX1RYSURMRSkKLQkJY3RjX3ByX2RlYnVnKCIlczogcmVtb3RlIHNpZGUgaXNzdWVkIFJFQUQ/LCBpbml0IC4uLlxuIiwgY2gtPmlkKTsKLQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JaWYgKGN0Y19jaGVja2FsbG9jX2J1ZmZlcihjaCwgMSkpCi0JCXJldHVybjsKLQlpZiAoKGZzbV9nZXRzdGF0ZShmaSkgPT0gQ0hfU1RBVEVfU0VUVVBXQUlUKSAmJgotCSAgICAoY2gtPnByb3RvY29sID09IENUQ19QUk9UT19PUzM5MCkpIHsKLQkJLyogT1MvMzkwIHJlc3AuIHovT1MgKi8KLQkJaWYgKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgewotCQkJKigoX191MTYgKikgY2gtPnRyYW5zX3NrYi0+ZGF0YSkgPSBDVENfSU5JVElBTF9CTE9DS0xFTjsKLQkJCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCBDVENfVElNRU9VVF81U0VDLAotCQkJCSAgICAgQ0hfRVZFTlRfVElNRVIsIGNoKTsKLQkJCWNoX2FjdGlvbl9yeGlkbGUoZmksIGV2ZW50LCBhcmcpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0JCQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1RYSURMRSk7Ci0JCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJCSAgREVWX0VWRU5UX1RYVVAsIGRldik7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCS8qKgotCSAqIERvbid0IHNldHVwIGEgdGltZXIgZm9yIHJlY2VpdmluZyB0aGUgaW5pdGlhbCBSWCBmcmFtZQotCSAqIGlmIGluIGNvbXBhdGliaWxpdHkgbW9kZSwgc2luY2UgVk0gVENQIGRlbGF5cyB0aGUgaW5pdGlhbAotCSAqIGZyYW1lIHVudGlsIGl0IGhhcyBzb21lIGRhdGEgdG8gc2VuZC4KLQkgKi8KLQlpZiAoKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gV1JJVEUpIHx8Ci0JICAgIChjaC0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX1MzOTApKQotCQlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgQ1RDX1RJTUVPVVRfNVNFQywgQ0hfRVZFTlRfVElNRVIsIGNoKTsKLQotCSooKF9fdTE2ICopIGNoLT50cmFuc19za2ItPmRhdGEpID0gQ1RDX0lOSVRJQUxfQkxPQ0tMRU47Ci0JY2gtPmNjd1sxXS5jb3VudCA9IDI7CS8qIFRyYW5zZmVyIG9ubHkgbGVuZ3RoICovCi0KLQlmc21fbmV3c3RhdGUoZmksIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpCi0JCSAgICAgPyBDSF9TVEFURV9SWElOSVQgOiBDSF9TVEFURV9UWElOSVQpOwotCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMF0sICh1bnNpZ25lZCBsb25nKSBjaCwgMHhmZiwgMCk7Ci0JaWYgKHJjICE9IDApIHsKLQkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1NFVFVQV0FJVCk7Ci0JCWNjd19jaGVja19yZXR1cm5fY29kZShjaCwgcmMsICJpbml0IElPIik7Ci0JfQotCS8qKgotCSAqIElmIGluIGNvbXBhdGliaWxpdHkgbW9kZSBzaW5jZSB3ZSBkb24ndCBzZXR1cCBhIHRpbWVyLCB3ZQotCSAqIGFsc28gc2lnbmFsIFJYIGNoYW5uZWwgdXAgaW1tZWRpYXRlbHkuIFRoaXMgZW5hYmxlcyB1cwotCSAqIHRvIHNlbmQgcGFja2V0cyBlYXJseSB3aGljaCBpbiB0dXJuIHVzdWFsbHkgdHJpZ2dlcnMgc29tZQotCSAqIHJlcGx5IGZyb20gVk0gVENQIHdoaWNoIGJyaW5ncyB1cCB0aGUgUlggY2hhbm5lbCB0byBpdCdzCi0JICogZmluYWwgc3RhdGUuCi0JICovCi0JaWYgKChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpICYmCi0JICAgIChjaC0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX1MzOTApKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLCBERVZfRVZFTlRfUlhVUCwKLQkJCSAgZGV2KTsKLQl9Ci19Ci0KLS8qKgotICogR290IGluaXRpYWwgZGF0YSwgY2hlY2sgaXQuIElmIE9LLAotICogbm90aWZ5IGRldmljZSBzdGF0ZW1hY2hpbmUgdGhhdCB3ZSBhcmUgdXAgYW5kCi0gKiBydW5uaW5nLgotICoKLSAqIEBwYXJhbSBmaSAgICBBbiBpbnN0YW5jZSBvZiBhIGNoYW5uZWwgc3RhdGVtYWNoaW5lLgotICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KLSAqIEBwYXJhbSBhcmcgICBHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIGNoYW5uZWwgKiB1cG9uIGNhbGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1jaF9hY3Rpb25fcnhpZGxlKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCV9fdTE2IGJ1ZmxlbjsKLQlpbnQgcmM7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JYnVmbGVuID0gKigoX191MTYgKikgY2gtPnRyYW5zX3NrYi0+ZGF0YSk7Ci0jaWZkZWYgREVCVUcKLQljdGNfcHJfZGVidWcoIiVzOiBJbml0aWFsIFJYIGNvdW50ICVkXG4iLCBkZXYtPm5hbWUsIGJ1Zmxlbik7Ci0jZW5kaWYKLQlpZiAoYnVmbGVuID49IENUQ19JTklUSUFMX0JMT0NLTEVOKSB7Ci0JCWlmIChjdGNfY2hlY2thbGxvY19idWZmZXIoY2gsIDEpKQotCQkJcmV0dXJuOwotCQljaC0+Y2N3WzFdLmNvdW50ID0gY2gtPm1heF9idWZzaXplOwotCQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1JYSURMRSk7Ci0JCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbMF0sCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIGNoLCAweGZmLCAwKTsKLQkJaWYgKHJjICE9IDApIHsKLQkJCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfUlhJTklUKTsKLQkJCWNjd19jaGVja19yZXR1cm5fY29kZShjaCwgcmMsICJpbml0aWFsIFJYIik7Ci0JCX0gZWxzZQotCQkJZnNtX2V2ZW50KCgoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdiktPmZzbSwKLQkJCQkgIERFVl9FVkVOVF9SWFVQLCBkZXYpOwotCX0gZWxzZSB7Ci0JCWN0Y19wcl9kZWJ1ZygiJXM6IEluaXRpYWwgUlggY291bnQgJWQgbm90ICVkXG4iLAotCQkJICAgICBkZXYtPm5hbWUsIGJ1ZmxlbiwgQ1RDX0lOSVRJQUxfQkxPQ0tMRU4pOwotCQljaF9hY3Rpb25fZmlyc3RpbyhmaSwgZXZlbnQsIGFyZyk7Ci0JfQotfQotCi0vKioKLSAqIFNldCBjaGFubmVsIGludG8gZXh0ZW5kZWQgbW9kZS4KLSAqCi0gKiBAcGFyYW0gZmkgICAgQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KLSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCi0gKiBAcGFyYW0gYXJnICAgR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotY2hfYWN0aW9uX3NldG1vZGUoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKSBhcmc7Ci0JaW50IHJjOwotCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCBDVENfVElNRU9VVF81U0VDLCBDSF9FVkVOVF9USU1FUiwgY2gpOwotCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfU0VUVVBXQUlUKTsKLQlzYXZlZmxhZ3MgPSAwOwkvKiBhdm9pZHMgY29tcGlsZXIgd2FybmluZyB3aXRoCi0JCQkgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICovCi0JaWYgKGV2ZW50ID09IENIX0VWRU5UX1RJTUVSKQkvLyBvbmx5IGZvciB0aW1lciBub3QgeWV0IGxvY2tlZAotCQlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwotCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbNl0sICh1bnNpZ25lZCBsb25nKSBjaCwgMHhmZiwgMCk7Ci0JaWYgKGV2ZW50ID09IENIX0VWRU5UX1RJTUVSKQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7Ci0JaWYgKHJjICE9IDApIHsKLQkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1NUQVJUV0FJVCk7Ci0JCWNjd19jaGVja19yZXR1cm5fY29kZShjaCwgcmMsICJzZXQgTW9kZSIpOwotCX0gZWxzZQotCQljaC0+cmV0cnkgPSAwOwotfQotCi0vKioKLSAqIFNldHVwIGNoYW5uZWwuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9zdGFydChmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGNoYW5uZWwgKmNoID0gKHN0cnVjdCBjaGFubmVsICopIGFyZzsKLQl1bnNpZ25lZCBsb25nIHNhdmVmbGFnczsKLQlpbnQgcmM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmIChjaCA9PSBOVUxMKSB7Ci0JCWN0Y19wcl93YXJuKCJjaF9hY3Rpb25fc3RhcnQgY2g9TlVMTFxuIik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGNoLT5uZXRkZXYgPT0gTlVMTCkgewotCQljdGNfcHJfd2FybigiY2hfYWN0aW9uX3N0YXJ0IGRldj1OVUxMLCBpZD0lc1xuIiwgY2gtPmlkKTsKLQkJcmV0dXJuOwotCX0KLQlkZXYgPSBjaC0+bmV0ZGV2OwotCi0jaWZkZWYgREVCVUcKLQljdGNfcHJfZGVidWcoIiVzOiAlcyBjaGFubmVsIHN0YXJ0XG4iLCBkZXYtPm5hbWUsCi0JCSAgICAgKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgPyAiUlgiIDogIlRYIik7Ci0jZW5kaWYKLQotCWlmIChjaC0+dHJhbnNfc2tiICE9IE5VTEwpIHsKLQkJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbMV0pOwotCQlkZXZfa2ZyZWVfc2tiKGNoLT50cmFuc19za2IpOwotCQljaC0+dHJhbnNfc2tiID0gTlVMTDsKLQl9Ci0JaWYgKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgewotCQljaC0+Y2N3WzFdLmNtZF9jb2RlID0gQ0NXX0NNRF9SRUFEOwotCQljaC0+Y2N3WzFdLmZsYWdzID0gQ0NXX0ZMQUdfU0xJOwotCQljaC0+Y2N3WzFdLmNvdW50ID0gMDsKLQl9IGVsc2UgewotCQljaC0+Y2N3WzFdLmNtZF9jb2RlID0gQ0NXX0NNRF9XUklURTsKLQkJY2gtPmNjd1sxXS5mbGFncyA9IENDV19GTEFHX1NMSSB8IENDV19GTEFHX0NDOwotCQljaC0+Y2N3WzFdLmNvdW50ID0gMDsKLQl9Ci0JaWYgKGN0Y19jaGVja2FsbG9jX2J1ZmZlcihjaCwgMCkpIHsKLQkJY3RjX3ByX25vdGljZSgKLQkJCSIlczogQ291bGQgbm90IGFsbG9jYXRlICVzIHRyYW5zX3NrYiwgZGVsYXlpbmcgIgotCQkJImFsbG9jYXRpb24gdW50aWwgZmlyc3QgdHJhbnNmZXJcbiIsCi0JCQlkZXYtPm5hbWUsCi0JCQkoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSA/ICJSWCIgOiAiVFgiKTsKLQl9Ci0KLQljaC0+Y2N3WzBdLmNtZF9jb2RlID0gQ0NXX0NNRF9QUkVQQVJFOwotCWNoLT5jY3dbMF0uZmxhZ3MgPSBDQ1dfRkxBR19TTEkgfCBDQ1dfRkxBR19DQzsKLQljaC0+Y2N3WzBdLmNvdW50ID0gMDsKLQljaC0+Y2N3WzBdLmNkYSA9IDA7Ci0JY2gtPmNjd1syXS5jbWRfY29kZSA9IENDV19DTURfTk9PUDsJLyogam9pbnRlZCBDRSArIERFICovCi0JY2gtPmNjd1syXS5mbGFncyA9IENDV19GTEFHX1NMSTsKLQljaC0+Y2N3WzJdLmNvdW50ID0gMDsKLQljaC0+Y2N3WzJdLmNkYSA9IDA7Ci0JbWVtY3B5KCZjaC0+Y2N3WzNdLCAmY2gtPmNjd1swXSwgc2l6ZW9mIChzdHJ1Y3QgY2N3MSkgKiAzKTsKLQljaC0+Y2N3WzRdLmNkYSA9IDA7Ci0JY2gtPmNjd1s0XS5mbGFncyAmPSB+Q0NXX0ZMQUdfSURBOwotCi0JZnNtX25ld3N0YXRlKGZpLCBDSF9TVEFURV9TVEFSVFdBSVQpOwotCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCAxMDAwLCBDSF9FVkVOVF9USU1FUiwgY2gpOwotCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7Ci0JcmMgPSBjY3dfZGV2aWNlX2hhbHQoY2gtPmNkZXYsICh1bnNpZ25lZCBsb25nKSBjaCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwotCWlmIChyYyAhPSAwKSB7Ci0JCWlmIChyYyAhPSAtRUJVU1kpCi0JCSAgICBmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JCWNjd19jaGVja19yZXR1cm5fY29kZShjaCwgcmMsICJpbml0aWFsIEhhbHRJTyIpOwotCX0KLSNpZmRlZiBERUJVRwotCWN0Y19wcl9kZWJ1ZygiY3RjOiAlcygpOiBsZWF2aW5nXG4iLCBfX2Z1bmNfXyk7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBTaHV0ZG93biBhIGNoYW5uZWwuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9oYWx0aW8oZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKSBhcmc7Ci0JdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3M7Ci0JaW50IHJjOwotCWludCBvbGRzdGF0ZTsKLQotCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKLQlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgQ1RDX1RJTUVPVVRfNVNFQywgQ0hfRVZFTlRfVElNRVIsIGNoKTsKLQlzYXZlZmxhZ3MgPSAwOwkvKiBhdm9pZHMgY29tcCB3YXJuaW5nIHdpdGgKLQkJCSAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKi8KLQlpZiAoZXZlbnQgPT0gQ0hfRVZFTlRfU1RPUCkJLy8gb25seSBmb3IgU1RPUCBub3QgeWV0IGxvY2tlZAotCQlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwotCW9sZHN0YXRlID0gZnNtX2dldHN0YXRlKGZpKTsKLQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1RFUk0pOwotCXJjID0gY2N3X2RldmljZV9oYWx0KGNoLT5jZGV2LCAodW5zaWduZWQgbG9uZykgY2gpOwotCWlmIChldmVudCA9PSBDSF9FVkVOVF9TVE9QKQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7Ci0JaWYgKHJjICE9IDApIHsKLQkJaWYgKHJjICE9IC1FQlVTWSkgewotCQkgICAgZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQkgICAgZnNtX25ld3N0YXRlKGZpLCBvbGRzdGF0ZSk7Ci0JCX0KLQkJY2N3X2NoZWNrX3JldHVybl9jb2RlKGNoLCByYywgIkhhbHRJTyBpbiBjaF9hY3Rpb25faGFsdGlvIik7Ci0JfQotfQotCi0vKioKLSAqIEEgY2hhbm5lbCBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gaGFsdGVkLgotICogQ2xlYW51cCBpdCdzIHF1ZXVlIGFuZCBub3RpZnkgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KLSAqCi0gKiBAcGFyYW0gZmkgICAgQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KLSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCi0gKiBAcGFyYW0gYXJnICAgR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotY2hfYWN0aW9uX3N0b3BwZWQoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKSBhcmc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JZnNtX25ld3N0YXRlKGZpLCBDSF9TVEFURV9TVE9QUEVEKTsKLQlpZiAoY2gtPnRyYW5zX3NrYiAhPSBOVUxMKSB7Ci0JCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzFdKTsKLQkJZGV2X2tmcmVlX3NrYihjaC0+dHJhbnNfc2tiKTsKLQkJY2gtPnRyYW5zX3NrYiA9IE5VTEw7Ci0JfQotCWlmIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpIHsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZjaC0+aW9fcXVldWUpOwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJICBERVZfRVZFTlRfUlhET1dOLCBkZXYpOwotCX0gZWxzZSB7Ci0JCWN0Y19wdXJnZV9za2JfcXVldWUoJmNoLT5pb19xdWV1ZSk7Ci0JCXNwaW5fbG9jaygmY2gtPmNvbGxlY3RfbG9jayk7Ci0JCWN0Y19wdXJnZV9za2JfcXVldWUoJmNoLT5jb2xsZWN0X3F1ZXVlKTsKLQkJY2gtPmNvbGxlY3RfbGVuID0gMDsKLQkJc3Bpbl91bmxvY2soJmNoLT5jb2xsZWN0X2xvY2spOwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJICBERVZfRVZFTlRfVFhET1dOLCBkZXYpOwotCX0KLX0KLQotLyoqCi0gKiBBIHN0b3AgY29tbWFuZCBmcm9tIGRldmljZSBzdGF0ZW1hY2hpbmUgYXJyaXZlZCBhbmQgd2UgYXJlIGluCi0gKiBub3Qgb3BlcmF0aW9uYWwgbW9kZS4gU2V0IHN0YXRlIHRvIHN0b3BwZWQuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9zdG9wKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1NUT1BQRUQpOwotfQotCi0vKioKLSAqIEEgbWFjaGluZSBjaGVjayBmb3Igbm8gcGF0aCwgbm90IG9wZXJhdGlvbmFsIHN0YXR1cyBvciBnb25lIGRldmljZSBoYXMKLSAqIGhhcHBlbmVkLgotICogQ2xlYW51cCBxdWV1ZSBhbmQgbm90aWZ5IGludGVyZmFjZSBzdGF0ZW1hY2hpbmUuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9mYWlsKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfTk9UT1ApOwotCWlmIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpIHsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZjaC0+aW9fcXVldWUpOwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJICBERVZfRVZFTlRfUlhET1dOLCBkZXYpOwotCX0gZWxzZSB7Ci0JCWN0Y19wdXJnZV9za2JfcXVldWUoJmNoLT5pb19xdWV1ZSk7Ci0JCXNwaW5fbG9jaygmY2gtPmNvbGxlY3RfbG9jayk7Ci0JCWN0Y19wdXJnZV9za2JfcXVldWUoJmNoLT5jb2xsZWN0X3F1ZXVlKTsKLQkJY2gtPmNvbGxlY3RfbGVuID0gMDsKLQkJc3Bpbl91bmxvY2soJmNoLT5jb2xsZWN0X2xvY2spOwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJICBERVZfRVZFTlRfVFhET1dOLCBkZXYpOwotCX0KLX0KLQotLyoqCi0gKiBIYW5kbGUgZXJyb3IgZHVyaW5nIHNldHVwIG9mIGNoYW5uZWwuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9zZXR1cGVycihmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGNoYW5uZWwgKmNoID0gKHN0cnVjdCBjaGFubmVsICopIGFyZzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2gtPm5ldGRldjsKLQotCURCRl9URVhUKHNldHVwLCAzLCBfX0ZVTkNUSU9OX18pOwotCS8qKgotCSAqIFNwZWNpYWwgY2FzZTogR290IFVDX1JDUkVTRVQgb24gc2V0bW9kZS4KLQkgKiBUaGlzIG1lYW5zIHRoYXQgcmVtb3RlIHNpZGUgaXNuJ3Qgc2V0dXAuIEluIHRoaXMgY2FzZQotCSAqIHNpbXBseSByZXRyeSBhZnRlciBzb21lIDEwIHNlY3MuLi4KLQkgKi8KLQlpZiAoKGZzbV9nZXRzdGF0ZShmaSkgPT0gQ0hfU1RBVEVfU0VUVVBXQUlUKSAmJgotCSAgICAoKGV2ZW50ID09IENIX0VWRU5UX1VDX1JDUkVTRVQpIHx8Ci0JICAgICAoZXZlbnQgPT0gQ0hfRVZFTlRfVUNfUlNSRVNFVCkpKSB7Ci0JCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfU1RBUlRSRVRSWSk7Ci0JCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKLQkJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ19USU1FT1VUXzVTRUMsIENIX0VWRU5UX1RJTUVSLCBjaCk7Ci0JCWlmIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpIHsKLQkJCWludCByYyA9IGNjd19kZXZpY2VfaGFsdChjaC0+Y2RldiwgKHVuc2lnbmVkIGxvbmcpIGNoKTsKLQkJCWlmIChyYyAhPSAwKQotCQkJCWNjd19jaGVja19yZXR1cm5fY29kZSgKLQkJCQkJY2gsIHJjLCAiSGFsdElPIGluIGNoX2FjdGlvbl9zZXR1cGVyciIpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQljdGNfcHJfZGVidWcoIiVzOiBFcnJvciAlcyBkdXJpbmcgJXMgY2hhbm5lbCBzZXR1cCBzdGF0ZT0lc1xuIiwKLQkJICAgICBkZXYtPm5hbWUsIGNoX2V2ZW50X25hbWVzW2V2ZW50XSwKLQkJICAgICAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSA/ICJSWCIgOiAiVFgiLAotCQkgICAgIGZzbV9nZXRzdGF0ZV9zdHIoZmkpKTsKLQlpZiAoQ0hBTk5FTF9ESVJFQ1RJT04oY2gtPmZsYWdzKSA9PSBSRUFEKSB7Ci0JCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfUlhFUlIpOwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJICBERVZfRVZFTlRfUlhET1dOLCBkZXYpOwotCX0gZWxzZSB7Ci0JCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfVFhFUlIpOwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJICBERVZfRVZFTlRfVFhET1dOLCBkZXYpOwotCX0KLX0KLQotLyoqCi0gKiBSZXN0YXJ0IGEgY2hhbm5lbCBhZnRlciBhbiBlcnJvci4KLSAqCi0gKiBAcGFyYW0gZmkgICAgQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KLSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCi0gKiBAcGFyYW0gYXJnICAgR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotY2hfYWN0aW9uX3Jlc3RhcnQoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCWludCBvbGRzdGF0ZTsKLQlpbnQgcmM7Ci0KLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCWN0Y19wcl9kZWJ1ZygiJXM6ICVzIGNoYW5uZWwgcmVzdGFydFxuIiwgZGV2LT5uYW1lLAotCQkgICAgIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpID8gIlJYIiA6ICJUWCIpOwotCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCBDVENfVElNRU9VVF81U0VDLCBDSF9FVkVOVF9USU1FUiwgY2gpOwotCW9sZHN0YXRlID0gZnNtX2dldHN0YXRlKGZpKTsKLQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1NUQVJUV0FJVCk7Ci0Jc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgd2l0aAotCQkJICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAqLwotCWlmIChldmVudCA9PSBDSF9FVkVOVF9USU1FUikJLy8gb25seSBmb3IgdGltZXIgbm90IHlldCBsb2NrZWQKLQkJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKLQlyYyA9IGNjd19kZXZpY2VfaGFsdChjaC0+Y2RldiwgKHVuc2lnbmVkIGxvbmcpIGNoKTsKLQlpZiAoZXZlbnQgPT0gQ0hfRVZFTlRfVElNRVIpCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKLQlpZiAocmMgIT0gMCkgewotCQlpZiAocmMgIT0gLUVCVVNZKSB7Ci0JCSAgICBmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JCSAgICBmc21fbmV3c3RhdGUoZmksIG9sZHN0YXRlKTsKLQkJfQotCQljY3dfY2hlY2tfcmV0dXJuX2NvZGUoY2gsIHJjLCAiSGFsdElPIGluIGNoX2FjdGlvbl9yZXN0YXJ0Iik7Ci0JfQotfQotCi0vKioKLSAqIEhhbmRsZSBlcnJvciBkdXJpbmcgUlggaW5pdGlhbCBoYW5kc2hha2UgKGV4Y2hhbmdlIG9mCi0gKiAwLWxlbmd0aCBibG9jayBoZWFkZXIpCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9yeGluaXRlcnIoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKSBhcmc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0KLQlEQkZfVEVYVChzZXR1cCwgMywgX19GVU5DVElPTl9fKTsKLQlpZiAoZXZlbnQgPT0gQ0hfRVZFTlRfVElNRVIpIHsKLQkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQljdGNfcHJfZGVidWcoIiVzOiBUaW1lb3V0IGR1cmluZyBSWCBpbml0IGhhbmRzaGFrZVxuIiwgZGV2LT5uYW1lKTsKLQkJaWYgKGNoLT5yZXRyeSsrIDwgMykKLQkJCWNoX2FjdGlvbl9yZXN0YXJ0KGZpLCBldmVudCwgYXJnKTsKLQkJZWxzZSB7Ci0JCQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1JYRVJSKTsKLQkJCWZzbV9ldmVudCgoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT5mc20sCi0JCQkJICBERVZfRVZFTlRfUlhET1dOLCBkZXYpOwotCQl9Ci0JfSBlbHNlCi0JCWN0Y19wcl93YXJuKCIlczogRXJyb3IgZHVyaW5nIFJYIGluaXQgaGFuZHNoYWtlXG4iLCBkZXYtPm5hbWUpOwotfQotCi0vKioKLSAqIE5vdGlmeSBkZXZpY2Ugc3RhdGVtYWNoaW5lIGlmIHdlIGdhdmUgdXAgaW5pdGlhbGl6YXRpb24KLSAqIG9mIFJYIGNoYW5uZWwuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9yeGluaXRmYWlsKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCi0JREJGX1RFWFQoc2V0dXAsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX25ld3N0YXRlKGZpLCBDSF9TVEFURV9SWEVSUik7Ci0JY3RjX3ByX3dhcm4oIiVzOiBSWCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7Ci0JY3RjX3ByX3dhcm4oIiVzOiBSWCA8LT4gUlggY29ubmVjdGlvbiBkZXRlY3RlZFxuIiwgZGV2LT5uYW1lKTsKLQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLCBERVZfRVZFTlRfUlhET1dOLCBkZXYpOwotfQotCi0vKioKLSAqIEhhbmRsZSBSWCBVbml0IGNoZWNrIHJlbW90ZSByZXNldCAocmVtb3RlIGRpc2Nvbm5lY3RlZCkKLSAqCi0gKiBAcGFyYW0gZmkgICAgQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KLSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCi0gKiBAcGFyYW0gYXJnICAgR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotY2hfYWN0aW9uX3J4ZGlzYyhmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGNoYW5uZWwgKmNoID0gKHN0cnVjdCBjaGFubmVsICopIGFyZzsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2gyOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCWN0Y19wcl9kZWJ1ZygiJXM6IEdvdCByZW1vdGUgZGlzY29ubmVjdCwgcmUtaW5pdGlhbGl6aW5nIC4uLlxuIiwKLQkJICAgICBkZXYtPm5hbWUpOwotCi0JLyoqCi0JICogTm90aWZ5IGRldmljZSBzdGF0ZW1hY2hpbmUKLQkgKi8KLQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLCBERVZfRVZFTlRfUlhET1dOLCBkZXYpOwotCWZzbV9ldmVudCgoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT5mc20sIERFVl9FVkVOVF9UWERPV04sIGRldik7Ci0KLQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX0RURVJNKTsKLQljaDIgPSAoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT5jaGFubmVsW1dSSVRFXTsKLQlmc21fbmV3c3RhdGUoY2gyLT5mc20sIENIX1NUQVRFX0RURVJNKTsKLQotCWNjd19kZXZpY2VfaGFsdChjaC0+Y2RldiwgKHVuc2lnbmVkIGxvbmcpIGNoKTsKLQljY3dfZGV2aWNlX2hhbHQoY2gyLT5jZGV2LCAodW5zaWduZWQgbG9uZykgY2gyKTsKLX0KLQotLyoqCi0gKiBIYW5kbGUgZXJyb3IgZHVyaW5nIFRYIGNoYW5uZWwgaW5pdGlhbGl6YXRpb24uCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl90eGluaXRlcnIoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKSBhcmc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0KLQlEQkZfVEVYVChzZXR1cCwgMiwgX19GVU5DVElPTl9fKTsKLQlpZiAoZXZlbnQgPT0gQ0hfRVZFTlRfVElNRVIpIHsKLQkJZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCQljdGNfcHJfZGVidWcoIiVzOiBUaW1lb3V0IGR1cmluZyBUWCBpbml0IGhhbmRzaGFrZVxuIiwgZGV2LT5uYW1lKTsKLQkJaWYgKGNoLT5yZXRyeSsrIDwgMykKLQkJCWNoX2FjdGlvbl9yZXN0YXJ0KGZpLCBldmVudCwgYXJnKTsKLQkJZWxzZSB7Ci0JCQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1RYRVJSKTsKLQkJCWZzbV9ldmVudCgoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT5mc20sCi0JCQkJICBERVZfRVZFTlRfVFhET1dOLCBkZXYpOwotCQl9Ci0JfSBlbHNlCi0JCWN0Y19wcl93YXJuKCIlczogRXJyb3IgZHVyaW5nIFRYIGluaXQgaGFuZHNoYWtlXG4iLCBkZXYtPm5hbWUpOwotfQotCi0vKioKLSAqIEhhbmRsZSBUWCB0aW1lb3V0IGJ5IHJldHJ5aW5nIG9wZXJhdGlvbi4KLSAqCi0gKiBAcGFyYW0gZmkgICAgQW4gaW5zdGFuY2Ugb2YgYSBjaGFubmVsIHN0YXRlbWFjaGluZS4KLSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCi0gKiBAcGFyYW0gYXJnICAgR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBjaGFubmVsICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotY2hfYWN0aW9uX3R4cmV0cnkoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKSBhcmc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0JdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3M7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JaWYgKGNoLT5yZXRyeSsrID4gMykgewotCQljdGNfcHJfZGVidWcoIiVzOiBUWCByZXRyeSBmYWlsZWQsIHJlc3RhcnRpbmcgY2hhbm5lbFxuIiwKLQkJCSAgICAgZGV2LT5uYW1lKTsKLQkJZnNtX2V2ZW50KCgoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdiktPmZzbSwKLQkJCSAgREVWX0VWRU5UX1RYRE9XTiwgZGV2KTsKLQkJY2hfYWN0aW9uX3Jlc3RhcnQoZmksIGV2ZW50LCBhcmcpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJY3RjX3ByX2RlYnVnKCIlczogVFggcmV0cnkgJWRcbiIsIGRldi0+bmFtZSwgY2gtPnJldHJ5KTsKLQkJaWYgKChza2IgPSBza2JfcGVlaygmY2gtPmlvX3F1ZXVlKSkpIHsKLQkJCWludCByYyA9IDA7Ci0KLQkJCWNsZWFyX25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzRdKTsKLQkJCWNoLT5jY3dbNF0uY291bnQgPSBza2ItPmxlbjsKLQkJCWlmIChzZXRfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbNF0sIHNrYi0+ZGF0YSkpIHsKLQkJCQljdGNfcHJfZGVidWcoCi0JCQkJCSIlczogSURBTCBhbGxvYyBmYWlsZWQsIGNoYW4gcmVzdGFydFxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJCQkgIERFVl9FVkVOVF9UWERPV04sIGRldik7Ci0JCQkJY2hfYWN0aW9uX3Jlc3RhcnQoZmksIGV2ZW50LCBhcmcpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCAxMDAwLCBDSF9FVkVOVF9USU1FUiwgY2gpOwotCQkJc2F2ZWZsYWdzID0gMDsJLyogYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgd2l0aAotCQkJCQkgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICovCi0JCQlpZiAoZXZlbnQgPT0gQ0hfRVZFTlRfVElNRVIpIC8vIG9ubHkgZm9yIFRJTUVSIG5vdCB5ZXQgbG9ja2VkCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwKLQkJCQkJCSAgc2F2ZWZsYWdzKTsKLQkJCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbM10sCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBjaCwgMHhmZiwgMCk7Ci0JCQlpZiAoZXZlbnQgPT0gQ0hfRVZFTlRfVElNRVIpCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLAotCQkJCQkJICAgICAgIHNhdmVmbGFncyk7Ci0JCQlpZiAocmMgIT0gMCkgewotCQkJCWZzbV9kZWx0aW1lcigmY2gtPnRpbWVyKTsKLQkJCQljY3dfY2hlY2tfcmV0dXJuX2NvZGUoY2gsIHJjLCAiVFggaW4gY2hfYWN0aW9uX3R4cmV0cnkiKTsKLQkJCQljdGNfcHVyZ2Vfc2tiX3F1ZXVlKCZjaC0+aW9fcXVldWUpOwotCQkJfQotCQl9Ci0JfQotCi19Ci0KLS8qKgotICogSGFuZGxlIGZhdGFsIGVycm9ycyBkdXJpbmcgYW4gSS9PIGNvbW1hbmQuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGEgY2hhbm5lbCBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gY2hhbm5lbCAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9pb2ZhdGFsKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSAoc3RydWN0IGNoYW5uZWwgKikgYXJnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjaC0+bmV0ZGV2OwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JZnNtX2RlbHRpbWVyKCZjaC0+dGltZXIpOwotCWlmIChDSEFOTkVMX0RJUkVDVElPTihjaC0+ZmxhZ3MpID09IFJFQUQpIHsKLQkJY3RjX3ByX2RlYnVnKCIlczogUlggSS9PIGVycm9yXG4iLCBkZXYtPm5hbWUpOwotCQlmc21fbmV3c3RhdGUoZmksIENIX1NUQVRFX1JYRVJSKTsKLQkJZnNtX2V2ZW50KCgoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdiktPmZzbSwKLQkJCSAgREVWX0VWRU5UX1JYRE9XTiwgZGV2KTsKLQl9IGVsc2UgewotCQljdGNfcHJfZGVidWcoIiVzOiBUWCBJL08gZXJyb3JcbiIsIGRldi0+bmFtZSk7Ci0JCWZzbV9uZXdzdGF0ZShmaSwgQ0hfU1RBVEVfVFhFUlIpOwotCQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLAotCQkJICBERVZfRVZFTlRfVFhET1dOLCBkZXYpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWNoX2FjdGlvbl9yZWluaXQoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0gCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKWFyZzsKLSAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0gCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotIAljaF9hY3Rpb25faW9mYXRhbChmaSwgZXZlbnQsIGFyZyk7Ci0gCWZzbV9hZGR0aW1lcigmcHJpdnB0ci0+cmVzdGFydF90aW1lciwgMTAwMCwgREVWX0VWRU5UX1JFU1RBUlQsIGRldik7Ci19Ci0KLS8qKgotICogVGhlIHN0YXRlbWFjaGluZSBmb3IgYSBjaGFubmVsLgotICovCi1zdGF0aWMgY29uc3QgZnNtX25vZGUgY2hfZnNtW10gPSB7Ci0Je0NIX1NUQVRFX1NUT1BQRUQsICAgIENIX0VWRU5UX1NUT1AsICAgICAgIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0Je0NIX1NUQVRFX1NUT1BQRUQsICAgIENIX0VWRU5UX1NUQVJULCAgICAgIGNoX2FjdGlvbl9zdGFydCAgICAgIH0sCi0Je0NIX1NUQVRFX1NUT1BQRUQsICAgIENIX0VWRU5UX0ZJTlNUQVQsICAgIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0Je0NIX1NUQVRFX1NUT1BQRUQsICAgIENIX0VWRU5UX01DX0ZBSUwsICAgIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0KLQl7Q0hfU1RBVEVfTk9UT1AsICAgICAgQ0hfRVZFTlRfU1RPUCwgICAgICAgY2hfYWN0aW9uX3N0b3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfTk9UT1AsICAgICAgQ0hfRVZFTlRfU1RBUlQsICAgICAgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfTk9UT1AsICAgICAgQ0hfRVZFTlRfRklOU1RBVCwgICAgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfTk9UT1AsICAgICAgQ0hfRVZFTlRfTUNfRkFJTCwgICAgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfTk9UT1AsICAgICAgQ0hfRVZFTlRfTUNfR09PRCwgICAgY2hfYWN0aW9uX3N0YXJ0ICAgICAgfSwKLQotCXtDSF9TVEFURV9TVEFSVFdBSVQsICBDSF9FVkVOVF9TVE9QLCAgICAgICBjaF9hY3Rpb25faGFsdGlvICAgICB9LAotCXtDSF9TVEFURV9TVEFSVFdBSVQsICBDSF9FVkVOVF9TVEFSVCwgICAgICBmc21fYWN0aW9uX25vcCAgICAgICB9LAotCXtDSF9TVEFURV9TVEFSVFdBSVQsICBDSF9FVkVOVF9GSU5TVEFULCAgICBjaF9hY3Rpb25fc2V0bW9kZSAgICB9LAotCXtDSF9TVEFURV9TVEFSVFdBSVQsICBDSF9FVkVOVF9USU1FUiwgICAgICBjaF9hY3Rpb25fc2V0dXBlcnIgICB9LAotCXtDSF9TVEFURV9TVEFSVFdBSVQsICBDSF9FVkVOVF9JT19FTk9ERVYsICBjaF9hY3Rpb25faW9mYXRhbCAgICB9LAotCXtDSF9TVEFURV9TVEFSVFdBSVQsICBDSF9FVkVOVF9JT19FSU8sICAgICBjaF9hY3Rpb25fcmVpbml0ICAgICB9LAotCXtDSF9TVEFURV9TVEFSVFdBSVQsICBDSF9FVkVOVF9NQ19GQUlMLCAgICBjaF9hY3Rpb25fZmFpbCAgICAgICB9LAotCi0Je0NIX1NUQVRFX1NUQVJUUkVUUlksIENIX0VWRU5UX1NUT1AsICAgICAgIGNoX2FjdGlvbl9oYWx0aW8gICAgIH0sCi0Je0NIX1NUQVRFX1NUQVJUUkVUUlksIENIX0VWRU5UX1RJTUVSLCAgICAgIGNoX2FjdGlvbl9zZXRtb2RlICAgIH0sCi0Je0NIX1NUQVRFX1NUQVJUUkVUUlksIENIX0VWRU5UX0ZJTlNUQVQsICAgIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0Je0NIX1NUQVRFX1NUQVJUUkVUUlksIENIX0VWRU5UX01DX0ZBSUwsICAgIGNoX2FjdGlvbl9mYWlsICAgICAgIH0sCi0KLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfU1RPUCwgICAgICAgY2hfYWN0aW9uX2hhbHRpbyAgICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfU1RBUlQsICAgICAgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfRklOU1RBVCwgICAgY2hfYWN0aW9uX2ZpcnN0aW8gICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfVUNfUkNSRVNFVCwgY2hfYWN0aW9uX3NldHVwZXJyICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfVUNfUlNSRVNFVCwgY2hfYWN0aW9uX3NldHVwZXJyICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfVElNRVIsICAgICAgY2hfYWN0aW9uX3NldG1vZGUgICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfSU9fRU5PREVWLCAgY2hfYWN0aW9uX2lvZmF0YWwgICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfSU9fRUlPLCAgICAgY2hfYWN0aW9uX3JlaW5pdCAgICAgfSwKLQl7Q0hfU1RBVEVfU0VUVVBXQUlULCAgQ0hfRVZFTlRfTUNfRkFJTCwgICAgY2hfYWN0aW9uX2ZhaWwgICAgICAgfSwKLQotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9TVE9QLCAgICAgICBjaF9hY3Rpb25faGFsdGlvICAgICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9TVEFSVCwgICAgICBmc21fYWN0aW9uX25vcCAgICAgICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9GSU5TVEFULCAgICBjaF9hY3Rpb25fcnhpZGxlICAgICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9VQ19SQ1JFU0VULCBjaF9hY3Rpb25fcnhpbml0ZXJyICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9VQ19SU1JFU0VULCBjaF9hY3Rpb25fcnhpbml0ZXJyICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9USU1FUiwgICAgICBjaF9hY3Rpb25fcnhpbml0ZXJyICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9BVFROQlVTWSwgICBjaF9hY3Rpb25fcnhpbml0ZmFpbCB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9JT19FTk9ERVYsICBjaF9hY3Rpb25faW9mYXRhbCAgICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9JT19FSU8sICAgICBjaF9hY3Rpb25fcmVpbml0ICAgICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9VQ19aRVJPLCAgICBjaF9hY3Rpb25fZmlyc3RpbyAgICB9LAotCXtDSF9TVEFURV9SWElOSVQsICAgICBDSF9FVkVOVF9NQ19GQUlMLCAgICBjaF9hY3Rpb25fZmFpbCAgICAgICB9LAotCi0Je0NIX1NUQVRFX1JYSURMRSwgICAgIENIX0VWRU5UX1NUT1AsICAgICAgIGNoX2FjdGlvbl9oYWx0aW8gICAgIH0sCi0Je0NIX1NUQVRFX1JYSURMRSwgICAgIENIX0VWRU5UX1NUQVJULCAgICAgIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0Je0NIX1NUQVRFX1JYSURMRSwgICAgIENIX0VWRU5UX0ZJTlNUQVQsICAgIGNoX2FjdGlvbl9yeCAgICAgICAgIH0sCi0Je0NIX1NUQVRFX1JYSURMRSwgICAgIENIX0VWRU5UX1VDX1JDUkVTRVQsIGNoX2FjdGlvbl9yeGRpc2MgICAgIH0sCi0vLyAgICAgIHtDSF9TVEFURV9SWElETEUsICAgICBDSF9FVkVOVF9VQ19SU1JFU0VULCBjaF9hY3Rpb25fcnhyZXRyeSAgICB9LAotCXtDSF9TVEFURV9SWElETEUsICAgICBDSF9FVkVOVF9JT19FTk9ERVYsICBjaF9hY3Rpb25faW9mYXRhbCAgICB9LAotCXtDSF9TVEFURV9SWElETEUsICAgICBDSF9FVkVOVF9JT19FSU8sICAgICBjaF9hY3Rpb25fcmVpbml0ICAgICB9LAotCXtDSF9TVEFURV9SWElETEUsICAgICBDSF9FVkVOVF9NQ19GQUlMLCAgICBjaF9hY3Rpb25fZmFpbCAgICAgICB9LAotCXtDSF9TVEFURV9SWElETEUsICAgICBDSF9FVkVOVF9VQ19aRVJPLCAgICBjaF9hY3Rpb25fcnggICAgICAgICB9LAotCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX1NUT1AsICAgICAgIGNoX2FjdGlvbl9oYWx0aW8gICAgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX1NUQVJULCAgICAgIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX0ZJTlNUQVQsICAgIGNoX2FjdGlvbl90eGlkbGUgICAgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX1VDX1JDUkVTRVQsIGNoX2FjdGlvbl90eGluaXRlcnIgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX1VDX1JTUkVTRVQsIGNoX2FjdGlvbl90eGluaXRlcnIgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX1RJTUVSLCAgICAgIGNoX2FjdGlvbl90eGluaXRlcnIgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX0lPX0VOT0RFViwgIGNoX2FjdGlvbl9pb2ZhdGFsICAgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX0lPX0VJTywgICAgIGNoX2FjdGlvbl9yZWluaXQgICAgIH0sCi0Je0NIX1NUQVRFX1RYSU5JVCwgICAgIENIX0VWRU5UX01DX0ZBSUwsICAgIGNoX2FjdGlvbl9mYWlsICAgICAgIH0sCi0KLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfU1RPUCwgICAgICAgY2hfYWN0aW9uX2hhbHRpbyAgICAgfSwKLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfU1RBUlQsICAgICAgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfRklOU1RBVCwgICAgY2hfYWN0aW9uX2ZpcnN0aW8gICAgfSwKLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfVUNfUkNSRVNFVCwgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfVUNfUlNSRVNFVCwgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfSU9fRU5PREVWLCAgY2hfYWN0aW9uX2lvZmF0YWwgICAgfSwKLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfSU9fRUlPLCAgICAgY2hfYWN0aW9uX3JlaW5pdCAgICAgfSwKLQl7Q0hfU1RBVEVfVFhJRExFLCAgICAgQ0hfRVZFTlRfTUNfRkFJTCwgICAgY2hfYWN0aW9uX2ZhaWwgICAgICAgfSwKLQotCXtDSF9TVEFURV9URVJNLCAgICAgICBDSF9FVkVOVF9TVE9QLCAgICAgICBmc21fYWN0aW9uX25vcCAgICAgICB9LAotCXtDSF9TVEFURV9URVJNLCAgICAgICBDSF9FVkVOVF9TVEFSVCwgICAgICBjaF9hY3Rpb25fcmVzdGFydCAgICB9LAotCXtDSF9TVEFURV9URVJNLCAgICAgICBDSF9FVkVOVF9GSU5TVEFULCAgICBjaF9hY3Rpb25fc3RvcHBlZCAgICB9LAotCXtDSF9TVEFURV9URVJNLCAgICAgICBDSF9FVkVOVF9VQ19SQ1JFU0VULCBmc21fYWN0aW9uX25vcCAgICAgICB9LAotCXtDSF9TVEFURV9URVJNLCAgICAgICBDSF9FVkVOVF9VQ19SU1JFU0VULCBmc21fYWN0aW9uX25vcCAgICAgICB9LAotCXtDSF9TVEFURV9URVJNLCAgICAgICBDSF9FVkVOVF9NQ19GQUlMLCAgICBjaF9hY3Rpb25fZmFpbCAgICAgICB9LAotCi0Je0NIX1NUQVRFX0RURVJNLCAgICAgIENIX0VWRU5UX1NUT1AsICAgICAgIGNoX2FjdGlvbl9oYWx0aW8gICAgIH0sCi0Je0NIX1NUQVRFX0RURVJNLCAgICAgIENIX0VWRU5UX1NUQVJULCAgICAgIGNoX2FjdGlvbl9yZXN0YXJ0ICAgIH0sCi0Je0NIX1NUQVRFX0RURVJNLCAgICAgIENIX0VWRU5UX0ZJTlNUQVQsICAgIGNoX2FjdGlvbl9zZXRtb2RlICAgIH0sCi0Je0NIX1NUQVRFX0RURVJNLCAgICAgIENIX0VWRU5UX1VDX1JDUkVTRVQsIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0Je0NIX1NUQVRFX0RURVJNLCAgICAgIENIX0VWRU5UX1VDX1JTUkVTRVQsIGZzbV9hY3Rpb25fbm9wICAgICAgIH0sCi0Je0NIX1NUQVRFX0RURVJNLCAgICAgIENIX0VWRU5UX01DX0ZBSUwsICAgIGNoX2FjdGlvbl9mYWlsICAgICAgIH0sCi0KLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfU1RPUCwgICAgICAgY2hfYWN0aW9uX2hhbHRpbyAgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfU1RBUlQsICAgICAgZnNtX2FjdGlvbl9ub3AgICAgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfRklOU1RBVCwgICAgY2hfYWN0aW9uX3R4ZG9uZSAgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfVUNfUkNSRVNFVCwgY2hfYWN0aW9uX3R4cmV0cnkgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfVUNfUlNSRVNFVCwgY2hfYWN0aW9uX3R4cmV0cnkgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfVElNRVIsICAgICAgY2hfYWN0aW9uX3R4cmV0cnkgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfSU9fRU5PREVWLCAgY2hfYWN0aW9uX2lvZmF0YWwgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfSU9fRUlPLCAgICAgY2hfYWN0aW9uX3JlaW5pdCAgICAgfSwKLQl7Q0hfU1RBVEVfVFgsICAgICAgICAgQ0hfRVZFTlRfTUNfRkFJTCwgICAgY2hfYWN0aW9uX2ZhaWwgICAgICAgfSwKLQotCXtDSF9TVEFURV9SWEVSUiwgICAgICBDSF9FVkVOVF9TVE9QLCAgICAgICBjaF9hY3Rpb25faGFsdGlvICAgICB9LAotCXtDSF9TVEFURV9UWEVSUiwgICAgICBDSF9FVkVOVF9TVE9QLCAgICAgICBjaF9hY3Rpb25faGFsdGlvICAgICB9LAotCXtDSF9TVEFURV9UWEVSUiwgICAgICBDSF9FVkVOVF9NQ19GQUlMLCAgICBjaF9hY3Rpb25fZmFpbCAgICAgICB9LAotCXtDSF9TVEFURV9SWEVSUiwgICAgICBDSF9FVkVOVF9NQ19GQUlMLCAgICBjaF9hY3Rpb25fZmFpbCAgICAgICB9LAotfTsKLQotc3RhdGljIGNvbnN0IGludCBDSF9GU01fTEVOID0gc2l6ZW9mIChjaF9mc20pIC8gc2l6ZW9mIChmc21fbm9kZSk7Ci0KLS8qKgotICogRnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2V0dXAgYW5kIGRldmljZSBkZXRlY3Rpb24uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1sZXNzX3RoYW4oY2hhciAqaWQxLCBjaGFyICppZDIpCi17Ci0JaW50IGRldjEsIGRldjIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCWlkMSsrOwotCQlpZDIrKzsKLQl9Ci0JZGV2MSA9IHNpbXBsZV9zdHJ0b3VsKGlkMSwgJmlkMSwgMTYpOwotCWRldjIgPSBzaW1wbGVfc3RydG91bChpZDIsICZpZDIsIDE2KTsKLQotCXJldHVybiAoZGV2MSA8IGRldjIpOwotfQotCi0vKioKLSAqIEFkZCBhIG5ldyBjaGFubmVsIHRvIHRoZSBsaXN0IG9mIGNoYW5uZWxzLgotICogS2VlcHMgdGhlIGNoYW5uZWwgbGlzdCBzb3J0ZWQuCi0gKgotICogQHBhcmFtIGNkZXYgIFRoZSBjY3dfZGV2aWNlIHRvIGJlIGFkZGVkLgotICogQHBhcmFtIHR5cGUgIFRoZSB0eXBlIGNsYXNzIG9mIHRoZSBuZXcgY2hhbm5lbC4KLSAqCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgITAgb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQKLWFkZF9jaGFubmVsKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBlbnVtIGNoYW5uZWxfdHlwZXMgdHlwZSkKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqKmMgPSAmY2hhbm5lbHM7Ci0Jc3RydWN0IGNoYW5uZWwgKmNoOwotCi0JREJGX1RFWFQodHJhY2UsIDIsIF9fRlVOQ1RJT05fXyk7Ci0JY2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhbm5lbCksIEdGUF9LRVJORUwpOwotCWlmICghY2gpIHsKLQkJY3RjX3ByX3dhcm4oImN0YzogT3V0IG9mIG1lbW9yeSBpbiBhZGRfY2hhbm5lbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JLyogYXNzdXJlIGFsbCBmbGFncyBhbmQgY291bnRlcnMgYXJlIHJlc2V0ICovCi0JY2gtPmNjdyA9IGt6YWxsb2MoOCAqIHNpemVvZihzdHJ1Y3QgY2N3MSksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIWNoLT5jY3cpIHsKLQkJa2ZyZWUoY2gpOwotCQljdGNfcHJfd2FybigiY3RjOiBPdXQgb2YgbWVtb3J5IGluIGFkZF9jaGFubmVsXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCi0JLyoqCi0JICogInN0YXRpYyIgY2N3cyBhcmUgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHdheToKLQkgKgotCSAqIGNjd1swLi4yXSAoQ2hhbm5lbCBwcm9ncmFtIGZvciBnZW5lcmljIEkvTyk6Ci0JICogICAgICAgICAgIDA6IHByZXBhcmUKLQkgKiAgICAgICAgICAgMTogcmVhZCBvciB3cml0ZSAoZGVwZW5kaW5nIG9uIGRpcmVjdGlvbikgd2l0aCBmaXhlZAotCSAqICAgICAgICAgICAgICBidWZmZXIgKGlkYWwgYWxsb2NhdGVkIG9uY2Ugd2hlbiBidWZmZXIgaXMgYWxsb2NhdGVkKQotCSAqICAgICAgICAgICAyOiBub3AKLQkgKiBjY3dbMy4uNV0gKENoYW5uZWwgcHJvZ3JhbSBmb3IgZGlyZWN0IHdyaXRlIG9mIHBhY2tldHMpCi0JICogICAgICAgICAgIDM6IHByZXBhcmUKLQkgKiAgICAgICAgICAgNDogd3JpdGUgKGlkYWwgYWxsb2NhdGVkIG9uIGV2ZXJ5IHdyaXRlKS4KLQkgKiAgICAgICAgICAgNTogbm9wCi0JICogY2N3WzYuLjddIChDaGFubmVsIHByb2dyYW0gZm9yIGluaXRpYWwgY2hhbm5lbCBzZXR1cCk6Ci0JICogICAgICAgICAgIDY6IHNldCBleHRlbmRlZCBtb2RlCi0JICogICAgICAgICAgIDc6IG5vcAotCSAqCi0JICogY2gtPmNjd1swLi41XSBhcmUgaW5pdGlhbGl6ZWQgaW4gY2hfYWN0aW9uX3N0YXJ0IGJlY2F1c2UKLQkgKiB0aGUgY2hhbm5lbCdzIGRpcmVjdGlvbiBpcyB5ZXQgdW5rbm93biBoZXJlLgotCSAqLwotCWNoLT5jY3dbNl0uY21kX2NvZGUgPSBDQ1dfQ01EX1NFVF9FWFRFTkRFRDsKLQljaC0+Y2N3WzZdLmZsYWdzID0gQ0NXX0ZMQUdfU0xJOwotCi0JY2gtPmNjd1s3XS5jbWRfY29kZSA9IENDV19DTURfTk9PUDsKLQljaC0+Y2N3WzddLmZsYWdzID0gQ0NXX0ZMQUdfU0xJOwotCi0JY2gtPmNkZXYgPSBjZGV2OwotCXNucHJpbnRmKGNoLT5pZCwgQ1RDX0lEX1NJWkUsICJjaC0lcyIsIGNkZXYtPmRldi5idXNfaWQpOwotCWNoLT50eXBlID0gdHlwZTsKLQljaC0+ZnNtID0gaW5pdF9mc20oY2gtPmlkLCBjaF9zdGF0ZV9uYW1lcywKLQkJCSAgIGNoX2V2ZW50X25hbWVzLCBOUl9DSF9TVEFURVMsIE5SX0NIX0VWRU5UUywKLQkJCSAgIGNoX2ZzbSwgQ0hfRlNNX0xFTiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNoLT5mc20gPT0gTlVMTCkgewotCQljdGNfcHJfd2FybigiY3RjOiBDb3VsZCBub3QgY3JlYXRlIEZTTSBpbiBhZGRfY2hhbm5lbFxuIik7Ci0JCWtmcmVlKGNoLT5jY3cpOwotCQlrZnJlZShjaCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZnNtX25ld3N0YXRlKGNoLT5mc20sIENIX1NUQVRFX0lETEUpOwotCWNoLT5pcmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaC0+aXJiKSB7Ci0JCWN0Y19wcl93YXJuKCJjdGM6IE91dCBvZiBtZW1vcnkgaW4gYWRkX2NoYW5uZWxcbiIpOwotCQlrZnJlZV9mc20oY2gtPmZzbSk7Ci0JCWtmcmVlKGNoLT5jY3cpOwotCQlrZnJlZShjaCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0Jd2hpbGUgKCpjICYmIGxlc3NfdGhhbigoKmMpLT5pZCwgY2gtPmlkKSkKLQkJYyA9ICYoKmMpLT5uZXh0OwotCWlmICgqYyAmJiAoIXN0cm5jbXAoKCpjKS0+aWQsIGNoLT5pZCwgQ1RDX0lEX1NJWkUpKSkgewotCQljdGNfcHJfZGVidWcoCi0JCQkiY3RjOiBhZGRfY2hhbm5lbDogZGV2aWNlICVzIGFscmVhZHkgaW4gbGlzdCwgIgotCQkJInVzaW5nIG9sZCBlbnRyeVxuIiwgKCpjKS0+aWQpOwotCQlrZnJlZShjaC0+aXJiKTsKLQkJa2ZyZWVfZnNtKGNoLT5mc20pOwotCQlrZnJlZShjaC0+Y2N3KTsKLQkJa2ZyZWUoY2gpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2tfaW5pdCgmY2gtPmNvbGxlY3RfbG9jayk7Ci0KLQlmc21fc2V0dGltZXIoY2gtPmZzbSwgJmNoLT50aW1lcik7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2gtPmlvX3F1ZXVlKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZjaC0+Y29sbGVjdF9xdWV1ZSk7Ci0JY2gtPm5leHQgPSAqYzsKLQkqYyA9IGNoOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIFJlbGVhc2UgYSBzcGVjaWZpYyBjaGFubmVsIGluIHRoZSBjaGFubmVsIGxpc3QuCi0gKgotICogQHBhcmFtIGNoIFBvaW50ZXIgdG8gY2hhbm5lbCBzdHJ1Y3QgdG8gYmUgcmVsZWFzZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1jaGFubmVsX2ZyZWUoc3RydWN0IGNoYW5uZWwgKmNoKQotewotCWNoLT5mbGFncyAmPSB+Q0hBTk5FTF9GTEFHU19JTlVTRTsKLQlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ0hfU1RBVEVfSURMRSk7Ci19Ci0KLS8qKgotICogUmVtb3ZlIGEgc3BlY2lmaWMgY2hhbm5lbCBpbiB0aGUgY2hhbm5lbCBsaXN0LgotICoKLSAqIEBwYXJhbSBjaCBQb2ludGVyIHRvIGNoYW5uZWwgc3RydWN0IHRvIGJlIHJlbGVhc2VkLgotICovCi1zdGF0aWMgdm9pZAotY2hhbm5lbF9yZW1vdmUoc3RydWN0IGNoYW5uZWwgKmNoKQotewotCXN0cnVjdCBjaGFubmVsICoqYyA9ICZjaGFubmVsczsKLQotCURCRl9URVhUKHRyYWNlLCAyLCBfX0ZVTkNUSU9OX18pOwotCWlmIChjaCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQljaGFubmVsX2ZyZWUoY2gpOwotCXdoaWxlICgqYykgewotCQlpZiAoKmMgPT0gY2gpIHsKLQkJCSpjID0gY2gtPm5leHQ7Ci0JCQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JCQlrZnJlZV9mc20oY2gtPmZzbSk7Ci0JCQljbGVhcl9ub3JtYWxpemVkX2NkYSgmY2gtPmNjd1s0XSk7Ci0JCQlpZiAoY2gtPnRyYW5zX3NrYiAhPSBOVUxMKSB7Ci0JCQkJY2xlYXJfbm9ybWFsaXplZF9jZGEoJmNoLT5jY3dbMV0pOwotCQkJCWRldl9rZnJlZV9za2IoY2gtPnRyYW5zX3NrYik7Ci0JCQl9Ci0JCQlrZnJlZShjaC0+Y2N3KTsKLQkJCWtmcmVlKGNoLT5pcmIpOwotCQkJa2ZyZWUoY2gpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWMgPSAmKCgqYyktPm5leHQpOwotCX0KLX0KLQotLyoqCi0gKiBHZXQgYSBzcGVjaWZpYyBjaGFubmVsIGZyb20gdGhlIGNoYW5uZWwgbGlzdC4KLSAqCi0gKiBAcGFyYW0gdHlwZSBUeXBlIG9mIGNoYW5uZWwgd2UgYXJlIGludGVyZXN0ZWQgaW4uCi0gKiBAcGFyYW0gaWQgSWQgb2YgY2hhbm5lbCB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KLSAqIEBwYXJhbSBkaXJlY3Rpb24gRGlyZWN0aW9uIHdlIHdhbnQgdG8gdXNlIHRoaXMgY2hhbm5lbCBmb3IuCi0gKgotICogQHJldHVybiBQb2ludGVyIHRvIGEgY2hhbm5lbCBvciBOVUxMIGlmIG5vIG1hdGNoaW5nIGNoYW5uZWwgYXZhaWxhYmxlLgotICovCi1zdGF0aWMgc3RydWN0IGNoYW5uZWwKLSoKLWNoYW5uZWxfZ2V0KGVudW0gY2hhbm5lbF90eXBlcyB0eXBlLCBjaGFyICppZCwgaW50IGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2ggPSBjaGFubmVsczsKLQotCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotI2lmZGVmIERFQlVHCi0JY3RjX3ByX2RlYnVnKCJjdGM6ICVzKCk6IHNlYXJjaGluZyBmb3IgY2ggd2l0aCBpZCAlcyBhbmQgdHlwZSAlZFxuIiwKLQkJICAgICBfX2Z1bmNfXywgaWQsIHR5cGUpOwotI2VuZGlmCi0KLQl3aGlsZSAoY2ggJiYgKChzdHJuY21wKGNoLT5pZCwgaWQsIENUQ19JRF9TSVpFKSkgfHwgKGNoLT50eXBlICE9IHR5cGUpKSkgewotI2lmZGVmIERFQlVHCi0JCWN0Y19wcl9kZWJ1ZygiY3RjOiAlcygpOiBjaD0weCVwIChpZD0lcywgdHlwZT0lZFxuIiwKLQkJCSAgICAgX19mdW5jX18sIGNoLCBjaC0+aWQsIGNoLT50eXBlKTsKLSNlbmRpZgotCQljaCA9IGNoLT5uZXh0OwotCX0KLSNpZmRlZiBERUJVRwotCWN0Y19wcl9kZWJ1ZygiY3RjOiAlcygpOiBjaD0weCVwcSAoaWQ9JXMsIHR5cGU9JWRcbiIsCi0JCSAgICAgX19mdW5jX18sIGNoLCBjaC0+aWQsIGNoLT50eXBlKTsKLSNlbmRpZgotCWlmICghY2gpIHsKLQkJY3RjX3ByX3dhcm4oImN0YzogJXMoKTogY2hhbm5lbCB3aXRoIGlkICVzICIKLQkJCSAgICAiYW5kIHR5cGUgJWQgbm90IGZvdW5kIGluIGNoYW5uZWwgbGlzdFxuIiwKLQkJCSAgICBfX2Z1bmNfXywgaWQsIHR5cGUpOwotCX0gZWxzZSB7Ci0JCWlmIChjaC0+ZmxhZ3MgJiBDSEFOTkVMX0ZMQUdTX0lOVVNFKQotCQkJY2ggPSBOVUxMOwotCQllbHNlIHsKLQkJCWNoLT5mbGFncyB8PSBDSEFOTkVMX0ZMQUdTX0lOVVNFOwotCQkJY2gtPmZsYWdzICY9IH5DSEFOTkVMX0ZMQUdTX1JXTUFTSzsKLQkJCWNoLT5mbGFncyB8PSAoZGlyZWN0aW9uID09IFdSSVRFKQotCQkJICAgID8gQ0hBTk5FTF9GTEFHU19XUklURSA6IENIQU5ORUxfRkxBR1NfUkVBRDsKLQkJCWZzbV9uZXdzdGF0ZShjaC0+ZnNtLCBDSF9TVEFURV9TVE9QUEVEKTsKLQkJfQotCX0KLQlyZXR1cm4gY2g7Ci19Ci0KLS8qKgotICogUmV0dXJuIHRoZSBjaGFubmVsIHR5cGUgYnkgbmFtZS4KLSAqCi0gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIG5ldHdvcmsgaW50ZXJmYWNlLgotICoKLSAqIEByZXR1cm4gVHlwZSBjbGFzcyBvZiBjaGFubmVsIHRvIGJlIHVzZWQgZm9yIHRoYXQgaW50ZXJmYWNlLgotICovCi1zdGF0aWMgZW51bSBjaGFubmVsX3R5cGVzIGlubGluZQotZXh0cmFjdF9jaGFubmVsX21lZGlhKGNoYXIgKm5hbWUpCi17Ci0JZW51bSBjaGFubmVsX3R5cGVzIHJldCA9IGNoYW5uZWxfdHlwZV91bmtub3duOwotCi0JaWYgKG5hbWUgIT0gTlVMTCkgewotCQlpZiAoc3RybmNtcChuYW1lLCAiY3RjIiwgMykgPT0gMCkKLQkJCXJldCA9IGNoYW5uZWxfdHlwZV9wYXJhbGxlbDsKLQkJaWYgKHN0cm5jbXAobmFtZSwgImVzY29uIiwgNSkgPT0gMCkKLQkJCXJldCA9IGNoYW5uZWxfdHlwZV9lc2NvbjsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGxvbmcKLV9fY3RjX2NoZWNrX2lyYl9lcnJvcihzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IGlyYiAqaXJiKQotewotCWlmICghSVNfRVJSKGlyYikpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChQVFJfRVJSKGlyYikpIHsKLQljYXNlIC1FSU86Ci0JCWN0Y19wcl93YXJuKCJpL28tZXJyb3Igb24gZGV2aWNlICVzXG4iLCBjZGV2LT5kZXYuYnVzX2lkKTsKLS8vCQlDVENfREJGX1RFWFQodHJhY2UsIDIsICJja2lyYmVyciIpOwotLy8JCUNUQ19EQkZfVEVYVF8odHJhY2UsIDIsICIgIHJjJWQiLCAtRUlPKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRVRJTUVET1VUOgotCQljdGNfcHJfd2FybigidGltZW91dCBvbiBkZXZpY2UgJXNcbiIsIGNkZXYtPmRldi5idXNfaWQpOwotLy8JCUNUQ19EQkZfVEVYVCh0cmFjZSwgMiwgImNraXJiZXJyIik7Ci0vLwkJQ1RDX0RCRl9URVhUXyh0cmFjZSwgMiwgIiAgcmMlZCIsIC1FVElNRURPVVQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQljdGNfcHJfd2FybigidW5rbm93biBlcnJvciAlbGQgb24gZGV2aWNlICVzXG4iLCBQVFJfRVJSKGlyYiksCi0JCQkgICBjZGV2LT5kZXYuYnVzX2lkKTsKLS8vCQlDVENfREJGX1RFWFQodHJhY2UsIDIsICJja2lyYmVyciIpOwotLy8JCUNUQ19EQkZfVEVYVCh0cmFjZSwgMiwgIiAgcmM/Pz8iKTsKLQl9Ci0JcmV0dXJuIFBUUl9FUlIoaXJiKTsKLX0KLQotLyoqCi0gKiBNYWluIElSUSBoYW5kbGVyLgotICoKLSAqIEBwYXJhbSBjZGV2ICAgIFRoZSBjY3dfZGV2aWNlIHRoZSBpbnRlcnJ1cHQgaXMgZm9yLgotICogQHBhcmFtIGludHBhcm0gaW50ZXJydXB0aW9uIHBhcmFtZXRlci4KLSAqIEBwYXJhbSBpcmIgICAgIGludGVycnVwdGlvbiByZXNwb25zZSBibG9jay4KLSAqLwotc3RhdGljIHZvaWQKLWN0Y19pcnFfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgbG9uZyBpbnRwYXJtLCBzdHJ1Y3QgaXJiICppcmIpCi17Ci0Jc3RydWN0IGNoYW5uZWwgKmNoOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGN0Y19wcml2ICpwcml2OwotCi0JREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKF9fY3RjX2NoZWNrX2lyYl9lcnJvcihjZGV2LCBpcmIpKQotCQlyZXR1cm47Ci0KLQkvKiBDaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cy4gKi8KLQlpZiAoIWNkZXYtPmRldi5kcml2ZXJfZGF0YSkgewotCQljdGNfcHJfd2FybigiY3RjOiBHb3QgdW5zb2xpY2l0ZWQgaXJxOiAlcyBjLSUwMnggZC0lMDJ4XG4iLAotCQkJICAgIGNkZXYtPmRldi5idXNfaWQsIGlyYi0+c2Nzdy5jc3RhdCwKLQkJCSAgICBpcmItPnNjc3cuZHN0YXQpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdiA9ICgoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKWNkZXYtPmRldi5kcml2ZXJfZGF0YSkKLQkJLT5kZXYuZHJpdmVyX2RhdGE7Ci0KLQkvKiBUcnkgdG8gZXh0cmFjdCBjaGFubmVsIGZyb20gZHJpdmVyIGRhdGEuICovCi0JaWYgKHByaXYtPmNoYW5uZWxbUkVBRF0tPmNkZXYgPT0gY2RldikKLQkJY2ggPSBwcml2LT5jaGFubmVsW1JFQURdOwotCWVsc2UgaWYgKHByaXYtPmNoYW5uZWxbV1JJVEVdLT5jZGV2ID09IGNkZXYpCi0JCWNoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07Ci0JZWxzZSB7Ci0JCWN0Y19wcl9lcnIoImN0YzogQ2FuJ3QgZGV0ZXJtaW5lIGNoYW5uZWwgZm9yIGludGVycnVwdCwgIgotCQkJICAgImRldmljZSAlc1xuIiwgY2Rldi0+ZGV2LmJ1c19pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgKGNoLT5uZXRkZXYpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQljdGNfcHJfY3JpdCgiY3RjOiBjdGNfaXJxX2hhbmRsZXIgZGV2PU5VTEwgYnVzX2lkPSVzLCBjaD0weCVwXG4iLAotCQkJICAgIGNkZXYtPmRldi5idXNfaWQsIGNoKTsKLQkJcmV0dXJuOwotCX0KLQotI2lmZGVmIERFQlVHCi0JY3RjX3ByX2RlYnVnKCIlczogaW50ZXJydXB0IGZvciBkZXZpY2U6ICVzIHJlY2VpdmVkIGMtJTAyeCBkLSUwMnhcbiIsCi0JCSAgICAgZGV2LT5uYW1lLCBjaC0+aWQsIGlyYi0+c2Nzdy5jc3RhdCwgaXJiLT5zY3N3LmRzdGF0KTsKLSNlbmRpZgotCi0JLyogQ29weSBpbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2suICovCi0JbWVtY3B5KGNoLT5pcmIsIGlyYiwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKLQotCS8qIENoZWNrIGZvciBnb29kIHN1YmNoYW5uZWwgcmV0dXJuIGNvZGUsIG90aGVyd2lzZSBlcnJvciBtZXNzYWdlICovCi0JaWYgKGNoLT5pcmItPnNjc3cuY3N0YXQpIHsKLQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX1NDX1VOS05PV04sIGNoKTsKLQkJY3RjX3ByX3dhcm4oIiVzOiBzdWJjaGFubmVsIGNoZWNrIGZvciBkZXZpY2U6ICVzIC0gJTAyeCAlMDJ4XG4iLAotCQkJICAgIGRldi0+bmFtZSwgY2gtPmlkLCBjaC0+aXJiLT5zY3N3LmNzdGF0LAotCQkJICAgIGNoLT5pcmItPnNjc3cuZHN0YXQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogQ2hlY2sgdGhlIHJlYXNvbi1jb2RlIG9mIGEgdW5pdCBjaGVjayAqLwotCWlmIChjaC0+aXJiLT5zY3N3LmRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgewotCQljY3dfdW5pdF9jaGVjayhjaCwgY2gtPmlyYi0+ZWN3WzBdKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoY2gtPmlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0JVU1kpIHsKLQkJaWYgKGNoLT5pcmItPnNjc3cuZHN0YXQgJiBERVZfU1RBVF9BVFRFTlRJT04pCi0JCQlmc21fZXZlbnQoY2gtPmZzbSwgQ0hfRVZFTlRfQVRUTkJVU1ksIGNoKTsKLQkJZWxzZQotCQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX0JVU1ksIGNoKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoY2gtPmlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0FUVEVOVElPTikgewotCQlmc21fZXZlbnQoY2gtPmZzbSwgQ0hfRVZFTlRfQVRUTiwgY2gpOwotCQlyZXR1cm47Ci0JfQotCWlmICgoY2gtPmlyYi0+c2Nzdy5zdGN0bCAmIFNDU1dfU1RDVExfU0VDX1NUQVRVUykgfHwKLQkgICAgKGNoLT5pcmItPnNjc3cuc3RjdGwgPT0gU0NTV19TVENUTF9TVEFUVVNfUEVORCkgfHwKLQkgICAgKGNoLT5pcmItPnNjc3cuc3RjdGwgPT0KLQkgICAgIChTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkKLQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX0ZJTlNUQVQsIGNoKTsKLQllbHNlCi0JCWZzbV9ldmVudChjaC0+ZnNtLCBDSF9FVkVOVF9JUlEsIGNoKTsKLQotfQotCi0vKioKLSAqIEFjdGlvbnMgZm9yIGludGVyZmFjZSAtIHN0YXRlbWFjaGluZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBTdGFydHVwIGNoYW5uZWxzIGJ5IHNlbmRpbmcgQ0hfRVZFTlRfU1RBUlQgdG8gZWFjaCBjaGFubmVsLgotICoKLSAqIEBwYXJhbSBmaSAgICBBbiBpbnN0YW5jZSBvZiBhbiBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgotICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KLSAqIEBwYXJhbSBhcmcgICBHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIHN0cnVjdCBuZXRfZGV2aWNlICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotZGV2X2FjdGlvbl9zdGFydChmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBhcmc7Ci0Jc3RydWN0IGN0Y19wcml2ICpwcml2cHRyID0gZGV2LT5wcml2OwotCWludCBkaXJlY3Rpb247Ci0KLQlEQkZfVEVYVChzZXR1cCwgMywgX19GVU5DVElPTl9fKTsKLQlmc21fZGVsdGltZXIoJnByaXZwdHItPnJlc3RhcnRfdGltZXIpOwotCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYKTsKLQlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspIHsKLQkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdnB0ci0+Y2hhbm5lbFtkaXJlY3Rpb25dOwotCQlmc21fZXZlbnQoY2gtPmZzbSwgQ0hfRVZFTlRfU1RBUlQsIGNoKTsKLQl9Ci19Ci0KLS8qKgotICogU2h1dGRvd24gY2hhbm5lbHMgYnkgc2VuZGluZyBDSF9FVkVOVF9TVE9QIHRvIGVhY2ggY2hhbm5lbC4KLSAqCi0gKiBAcGFyYW0gZmkgICAgQW4gaW5zdGFuY2Ugb2YgYW4gaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KLSAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQsIGp1c3QgaGFwcGVuZWQuCi0gKiBAcGFyYW0gYXJnICAgR2VuZXJpYyBwb2ludGVyLCBjYXN0ZWQgZnJvbSBzdHJ1Y3QgbmV0X2RldmljZSAqIHVwb24gY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLWRldl9hY3Rpb25fc3RvcChmc21faW5zdGFuY2UgKiBmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBhcmc7Ci0Jc3RydWN0IGN0Y19wcml2ICpwcml2cHRyID0gZGV2LT5wcml2OwotCWludCBkaXJlY3Rpb247Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9TVE9QV0FJVF9SWFRYKTsKLQlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspIHsKLQkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdnB0ci0+Y2hhbm5lbFtkaXJlY3Rpb25dOwotCQlmc21fZXZlbnQoY2gtPmZzbSwgQ0hfRVZFTlRfU1RPUCwgY2gpOwotCX0KLX0KLXN0YXRpYyB2b2lkCi1kZXZfYWN0aW9uX3Jlc3RhcnQoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWFyZzsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXZwdHIgPSBkZXYtPnByaXY7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQljdGNfcHJfZGVidWcoIiVzOiBSZXN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOwotCWRldl9hY3Rpb25fc3RvcChmaSwgZXZlbnQsIGFyZyk7Ci0JZnNtX2V2ZW50KHByaXZwdHItPmZzbSwgREVWX0VWRU5UX1NUT1AsIGRldik7Ci0JZnNtX2FkZHRpbWVyKCZwcml2cHRyLT5yZXN0YXJ0X3RpbWVyLCBDVENfVElNRU9VVF81U0VDLAotCQkgICAgIERFVl9FVkVOVF9TVEFSVCwgZGV2KTsKLX0KLQotLyoqCi0gKiBDYWxsZWQgZnJvbSBjaGFubmVsIHN0YXRlbWFjaGluZQotICogd2hlbiBhIGNoYW5uZWwgaXMgdXAgYW5kIHJ1bm5pbmcuCi0gKgotICogQHBhcmFtIGZpICAgIEFuIGluc3RhbmNlIG9mIGFuIGludGVyZmFjZSBzdGF0ZW1hY2hpbmUuCi0gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50LCBqdXN0IGhhcHBlbmVkLgotICogQHBhcmFtIGFyZyAgIEdlbmVyaWMgcG9pbnRlciwgY2FzdGVkIGZyb20gc3RydWN0IG5ldF9kZXZpY2UgKiB1cG9uIGNhbGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1kZXZfYWN0aW9uX2NodXAoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgYXJnOwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0Jc3dpdGNoIChmc21fZ2V0c3RhdGUoZmkpKSB7Ci0JCWNhc2UgREVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYOgotCQkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9SWFVQKQotCQkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUQVJUV0FJVF9UWCk7Ci0JCQllbHNlCi0JCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1JYKTsKLQkJCWJyZWFrOwotCQljYXNlIERFVl9TVEFURV9TVEFSVFdBSVRfUlg6Ci0JCQlpZiAoZXZlbnQgPT0gREVWX0VWRU5UX1JYVVApIHsKLQkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKLQkJCQljdGNfcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAotCQkJCQkgICAgZGV2LT5uYW1lKTsKLQkJCQljdGNfY2xlYXJfYnVzeShkZXYpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgREVWX1NUQVRFX1NUQVJUV0FJVF9UWDoKLQkJCWlmIChldmVudCA9PSBERVZfRVZFTlRfVFhVUCkgewotCQkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1JVTk5JTkcpOwotCQkJCWN0Y19wcl9pbmZvKCIlczogY29ubmVjdGVkIHdpdGggcmVtb3RlIHNpZGVcbiIsCi0JCQkJCSAgICBkZXYtPm5hbWUpOwotCQkJCWN0Y19jbGVhcl9idXN5KGRldik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBERVZfU1RBVEVfU1RPUFdBSVRfVFg6Ci0JCQlpZiAoZXZlbnQgPT0gREVWX0VWRU5UX1JYVVApCi0JCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCk7Ci0JCQlicmVhazsKLQkJY2FzZSBERVZfU1RBVEVfU1RPUFdBSVRfUlg6Ci0JCQlpZiAoZXZlbnQgPT0gREVWX0VWRU5UX1RYVVApCi0JCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCk7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLS8qKgotICogQ2FsbGVkIGZyb20gY2hhbm5lbCBzdGF0ZW1hY2hpbmUKLSAqIHdoZW4gYSBjaGFubmVsIGhhcyBiZWVuIHNodXRkb3duLgotICoKLSAqIEBwYXJhbSBmaSAgICBBbiBpbnN0YW5jZSBvZiBhbiBpbnRlcmZhY2Ugc3RhdGVtYWNoaW5lLgotICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCwganVzdCBoYXBwZW5lZC4KLSAqIEBwYXJhbSBhcmcgICBHZW5lcmljIHBvaW50ZXIsIGNhc3RlZCBmcm9tIHN0cnVjdCBuZXRfZGV2aWNlICogdXBvbiBjYWxsLgotICovCi1zdGF0aWMgdm9pZAotZGV2X2FjdGlvbl9jaGRvd24oZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQotewotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0Jc3dpdGNoIChmc21fZ2V0c3RhdGUoZmkpKSB7Ci0JCWNhc2UgREVWX1NUQVRFX1JVTk5JTkc6Ci0JCQlpZiAoZXZlbnQgPT0gREVWX0VWRU5UX1RYRE9XTikKLQkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9TVEFSVFdBSVRfVFgpOwotCQkJZWxzZQotCQkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUQVJUV0FJVF9SWCk7Ci0JCQlicmVhazsKLQkJY2FzZSBERVZfU1RBVEVfU1RBUlRXQUlUX1JYOgotCQkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWERPV04pCi0JCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVWX1NUQVRFX1NUQVJUV0FJVF9UWDoKLQkJCWlmIChldmVudCA9PSBERVZfRVZFTlRfUlhET1dOKQotCQkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYKTsKLQkJCWJyZWFrOwotCQljYXNlIERFVl9TVEFURV9TVE9QV0FJVF9SWFRYOgotCQkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWERPV04pCi0JCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFdBSVRfUlgpOwotCQkJZWxzZQotCQkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUT1BXQUlUX1RYKTsKLQkJCWJyZWFrOwotCQljYXNlIERFVl9TVEFURV9TVE9QV0FJVF9SWDoKLQkJCWlmIChldmVudCA9PSBERVZfRVZFTlRfUlhET1dOKQotCQkJCWZzbV9uZXdzdGF0ZShmaSwgREVWX1NUQVRFX1NUT1BQRUQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVWX1NUQVRFX1NUT1BXQUlUX1RYOgotCQkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWERPV04pCi0JCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RPUFBFRCk7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBmc21fbm9kZSBkZXZfZnNtW10gPSB7Ci0Je0RFVl9TVEFURV9TVE9QUEVELCBERVZfRVZFTlRfU1RBUlQsIGRldl9hY3Rpb25fc3RhcnR9LAotCi0Je0RFVl9TVEFURV9TVE9QV0FJVF9SWFRYLCAgREVWX0VWRU5UX1NUQVJULCAgIGRldl9hY3Rpb25fc3RhcnQgICB9LAotCXtERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCwgIERFVl9FVkVOVF9SWERPV04sICBkZXZfYWN0aW9uX2NoZG93biAgfSwKLQl7REVWX1NUQVRFX1NUT1BXQUlUX1JYVFgsICBERVZfRVZFTlRfVFhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCi0gCXtERVZfU1RBVEVfU1RPUFdBSVRfUlhUWCwgIERFVl9FVkVOVF9SRVNUQVJULCBkZXZfYWN0aW9uX3Jlc3RhcnQgfSwKLQotCXtERVZfU1RBVEVfU1RPUFdBSVRfUlgsICAgIERFVl9FVkVOVF9TVEFSVCwgICBkZXZfYWN0aW9uX3N0YXJ0ICAgfSwKLQl7REVWX1NUQVRFX1NUT1BXQUlUX1JYLCAgICBERVZfRVZFTlRfUlhVUCwgICAgZGV2X2FjdGlvbl9jaHVwICAgIH0sCi0Je0RFVl9TVEFURV9TVE9QV0FJVF9SWCwgICAgREVWX0VWRU5UX1RYVVAsICAgIGRldl9hY3Rpb25fY2h1cCAgICB9LAotCXtERVZfU1RBVEVfU1RPUFdBSVRfUlgsICAgIERFVl9FVkVOVF9SWERPV04sICBkZXZfYWN0aW9uX2NoZG93biAgfSwKLSAJe0RFVl9TVEFURV9TVE9QV0FJVF9SWCwgICAgREVWX0VWRU5UX1JFU1RBUlQsIGRldl9hY3Rpb25fcmVzdGFydCB9LAotCi0Je0RFVl9TVEFURV9TVE9QV0FJVF9UWCwgICAgREVWX0VWRU5UX1NUQVJULCAgIGRldl9hY3Rpb25fc3RhcnQgICB9LAotCXtERVZfU1RBVEVfU1RPUFdBSVRfVFgsICAgIERFVl9FVkVOVF9SWFVQLCAgICBkZXZfYWN0aW9uX2NodXAgICAgfSwKLQl7REVWX1NUQVRFX1NUT1BXQUlUX1RYLCAgICBERVZfRVZFTlRfVFhVUCwgICAgZGV2X2FjdGlvbl9jaHVwICAgIH0sCi0Je0RFVl9TVEFURV9TVE9QV0FJVF9UWCwgICAgREVWX0VWRU5UX1RYRE9XTiwgIGRldl9hY3Rpb25fY2hkb3duICB9LAotIAl7REVWX1NUQVRFX1NUT1BXQUlUX1RYLCAgICBERVZfRVZFTlRfUkVTVEFSVCwgZGV2X2FjdGlvbl9yZXN0YXJ0IH0sCi0KLQl7REVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYLCBERVZfRVZFTlRfU1RPUCwgICAgZGV2X2FjdGlvbl9zdG9wICAgIH0sCi0Je0RFVl9TVEFURV9TVEFSVFdBSVRfUlhUWCwgREVWX0VWRU5UX1JYVVAsICAgIGRldl9hY3Rpb25fY2h1cCAgICB9LAotCXtERVZfU1RBVEVfU1RBUlRXQUlUX1JYVFgsIERFVl9FVkVOVF9UWFVQLCAgICBkZXZfYWN0aW9uX2NodXAgICAgfSwKLQl7REVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYLCBERVZfRVZFTlRfUlhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCi0Je0RFVl9TVEFURV9TVEFSVFdBSVRfUlhUWCwgREVWX0VWRU5UX1RYRE9XTiwgIGRldl9hY3Rpb25fY2hkb3duICB9LAotIAl7REVWX1NUQVRFX1NUQVJUV0FJVF9SWFRYLCBERVZfRVZFTlRfUkVTVEFSVCwgZGV2X2FjdGlvbl9yZXN0YXJ0IH0sCi0KLQl7REVWX1NUQVRFX1NUQVJUV0FJVF9UWCwgICBERVZfRVZFTlRfU1RPUCwgICAgZGV2X2FjdGlvbl9zdG9wICAgIH0sCi0Je0RFVl9TVEFURV9TVEFSVFdBSVRfVFgsICAgREVWX0VWRU5UX1JYVVAsICAgIGRldl9hY3Rpb25fY2h1cCAgICB9LAotCXtERVZfU1RBVEVfU1RBUlRXQUlUX1RYLCAgIERFVl9FVkVOVF9UWFVQLCAgICBkZXZfYWN0aW9uX2NodXAgICAgfSwKLQl7REVWX1NUQVRFX1NUQVJUV0FJVF9UWCwgICBERVZfRVZFTlRfUlhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCi0gCXtERVZfU1RBVEVfU1RBUlRXQUlUX1RYLCAgIERFVl9FVkVOVF9SRVNUQVJULCBkZXZfYWN0aW9uX3Jlc3RhcnQgfSwKLQotCXtERVZfU1RBVEVfU1RBUlRXQUlUX1JYLCAgIERFVl9FVkVOVF9TVE9QLCAgICBkZXZfYWN0aW9uX3N0b3AgICAgfSwKLQl7REVWX1NUQVRFX1NUQVJUV0FJVF9SWCwgICBERVZfRVZFTlRfUlhVUCwgICAgZGV2X2FjdGlvbl9jaHVwICAgIH0sCi0Je0RFVl9TVEFURV9TVEFSVFdBSVRfUlgsICAgREVWX0VWRU5UX1RYVVAsICAgIGRldl9hY3Rpb25fY2h1cCAgICB9LAotCXtERVZfU1RBVEVfU1RBUlRXQUlUX1JYLCAgIERFVl9FVkVOVF9UWERPV04sICBkZXZfYWN0aW9uX2NoZG93biAgfSwKLSAJe0RFVl9TVEFURV9TVEFSVFdBSVRfUlgsICAgREVWX0VWRU5UX1JFU1RBUlQsIGRldl9hY3Rpb25fcmVzdGFydCB9LAotCi0Je0RFVl9TVEFURV9SVU5OSU5HLCAgICAgICAgREVWX0VWRU5UX1NUT1AsICAgIGRldl9hY3Rpb25fc3RvcCAgICB9LAotCXtERVZfU1RBVEVfUlVOTklORywgICAgICAgIERFVl9FVkVOVF9SWERPV04sICBkZXZfYWN0aW9uX2NoZG93biAgfSwKLQl7REVWX1NUQVRFX1JVTk5JTkcsICAgICAgICBERVZfRVZFTlRfVFhET1dOLCAgZGV2X2FjdGlvbl9jaGRvd24gIH0sCi0Je0RFVl9TVEFURV9SVU5OSU5HLCAgICAgICAgREVWX0VWRU5UX1RYVVAsICAgIGZzbV9hY3Rpb25fbm9wICAgICB9LAotCXtERVZfU1RBVEVfUlVOTklORywgICAgICAgIERFVl9FVkVOVF9SWFVQLCAgICBmc21fYWN0aW9uX25vcCAgICAgfSwKLSAJe0RFVl9TVEFURV9SVU5OSU5HLCAgICAgICAgREVWX0VWRU5UX1JFU1RBUlQsIGRldl9hY3Rpb25fcmVzdGFydCB9LAotfTsKLQotc3RhdGljIGNvbnN0IGludCBERVZfRlNNX0xFTiA9IHNpemVvZiAoZGV2X2ZzbSkgLyBzaXplb2YgKGZzbV9ub2RlKTsKLQotLyoqCi0gKiBUcmFuc21pdCBhIHBhY2tldC4KLSAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGN0Y190eCgpLgotICoKLSAqIEBwYXJhbSBjaCBDaGFubmVsIHRvIGJlIHVzZWQgZm9yIHNlbmRpbmcuCi0gKiBAcGFyYW0gc2tiIFBvaW50ZXIgdG8gc3RydWN0IHNrX2J1ZmYgb2YgcGFja2V0IHRvIHNlbmQuCi0gKiAgICAgICAgICAgIFRoZSBsaW5rbGV2ZWwgaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwCi0gKiAgICAgICAgICAgIGJ5IGN0Y190eCgpLgotICoKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtRVJSTk8gb24gZmFpbHVyZS4gKE5ldmVyIGZhaWxzLikKLSAqLwotc3RhdGljIGludAotdHJhbnNtaXRfc2tiKHN0cnVjdCBjaGFubmVsICpjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl1bnNpZ25lZCBsb25nIHNhdmVmbGFnczsKLQlzdHJ1Y3QgbGxfaGVhZGVyIGhlYWRlcjsKLQlpbnQgcmMgPSAwOwotCi0JREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7Ci0JLyogd2UgbmVlZCB0byBhY3F1aXJlIHRoZSBsb2NrIGZvciB0ZXN0aW5nIHRoZSBzdGF0ZQotCSAqIG90aGVyd2lzZSB3ZSBjYW4gaGF2ZSBhbiBJUlEgY2hhbmdpbmcgdGhlIHN0YXRlIHRvCi0JICogVFhJRExFIGFmdGVyIHRoZSB0ZXN0IGJ1dCBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsb2NrLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+Y29sbGVjdF9sb2NrLCBzYXZlZmxhZ3MpOwotCWlmIChmc21fZ2V0c3RhdGUoY2gtPmZzbSkgIT0gQ0hfU1RBVEVfVFhJRExFKSB7Ci0JCWludCBsID0gc2tiLT5sZW4gKyBMTF9IRUFERVJfTEVOR1RIOwotCi0JCWlmIChjaC0+Y29sbGVjdF9sZW4gKyBsID4gY2gtPm1heF9idWZzaXplIC0gMikgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmNvbGxlY3RfbG9jaywgc2F2ZWZsYWdzKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0gZWxzZSB7Ci0JCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKLQkJCWhlYWRlci5sZW5ndGggPSBsOwotCQkJaGVhZGVyLnR5cGUgPSBza2ItPnByb3RvY29sOwotCQkJaGVhZGVyLnVudXNlZCA9IDA7Ci0JCQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTF9IRUFERVJfTEVOR1RIKSwgJmhlYWRlciwKLQkJCSAgICAgICBMTF9IRUFERVJfTEVOR1RIKTsKLQkJCXNrYl9xdWV1ZV90YWlsKCZjaC0+Y29sbGVjdF9xdWV1ZSwgc2tiKTsKLQkJCWNoLT5jb2xsZWN0X2xlbiArPSBsOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7Ci0JfSBlbHNlIHsKLQkJX191MTYgYmxvY2tfbGVuOwotCQlpbnQgY2N3X2lkeDsKLQkJc3RydWN0IHNrX2J1ZmYgKm5za2I7Ci0JCXVuc2lnbmVkIGxvbmcgaGk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7Ci0JCS8qKgotCQkgKiBQcm90ZWN0IHNrYiBhZ2FpbnN0IGJlZWluZyBmcmVlJ2QgYnkgdXBwZXIKLQkJICogbGF5ZXJzLgotCQkgKi8KLQkJYXRvbWljX2luYygmc2tiLT51c2Vycyk7Ci0JCWNoLT5wcm9mLnR4bGVuICs9IHNrYi0+bGVuOwotCQloZWFkZXIubGVuZ3RoID0gc2tiLT5sZW4gKyBMTF9IRUFERVJfTEVOR1RIOwotCQloZWFkZXIudHlwZSA9IHNrYi0+cHJvdG9jb2w7Ci0JCWhlYWRlci51bnVzZWQgPSAwOwotCQltZW1jcHkoc2tiX3B1c2goc2tiLCBMTF9IRUFERVJfTEVOR1RIKSwgJmhlYWRlciwKLQkJICAgICAgIExMX0hFQURFUl9MRU5HVEgpOwotCQlibG9ja19sZW4gPSBza2ItPmxlbiArIDI7Ci0JCSooKF9fdTE2ICopIHNrYl9wdXNoKHNrYiwgMikpID0gYmxvY2tfbGVuOwotCi0JCS8qKgotCQkgKiBJREFMIHN1cHBvcnQgaW4gQ1RDIGlzIGJyb2tlbiwgc28gd2UgaGF2ZSB0bwotCQkgKiBjYXJlIGFib3V0IHNrYidzIGFib3ZlIDJHIG91cnNlbHZlcy4KLQkJICovCi0JCWhpID0gKCh1bnNpZ25lZCBsb25nKXNrYl90YWlsX3BvaW50ZXIoc2tiKSArCi0JCSAgICAgIExMX0hFQURFUl9MRU5HVEgpID4+IDMxOwotCQlpZiAoaGkpIHsKLQkJCW5za2IgPSBhbGxvY19za2Ioc2tiLT5sZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKLQkJCWlmICghbnNrYikgewotCQkJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwotCQkJCXNrYl9wdWxsKHNrYiwgTExfSEVBREVSX0xFTkdUSCArIDIpOwotCQkJCWN0Y19jbGVhcl9idXN5KGNoLT5uZXRkZXYpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQltZW1jcHkoc2tiX3B1dChuc2tiLCBza2ItPmxlbiksCi0JCQkJICAgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQkJCWF0b21pY19pbmMoJm5za2ItPnVzZXJzKTsKLQkJCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKLQkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCQkJCXNrYiA9IG5za2I7Ci0JCQl9Ci0JCX0KLQotCQljaC0+Y2N3WzRdLmNvdW50ID0gYmxvY2tfbGVuOwotCQlpZiAoc2V0X25vcm1hbGl6ZWRfY2RhKCZjaC0+Y2N3WzRdLCBza2ItPmRhdGEpKSB7Ci0JCQkvKioKLQkJCSAqIGlkYWwgYWxsb2NhdGlvbiBmYWlsZWQsIHRyeSB2aWEgY29weWluZyB0bwotCQkJICogdHJhbnNfc2tiLiB0cmFuc19za2IgdXN1YWxseSBoYXMgYSBwcmUtYWxsb2NhdGVkCi0JCQkgKiBpZGFsLgotCQkJICovCi0JCQlpZiAoY3RjX2NoZWNrYWxsb2NfYnVmZmVyKGNoLCAxKSkgewotCQkJCS8qKgotCQkJCSAqIFJlbW92ZSBvdXIgaGVhZGVyLiBJdCBnZXRzIGFkZGVkCi0JCQkJICogYWdhaW4gb24gcmV0cmFuc21pdC4KLQkJCQkgKi8KLQkJCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKLQkJCQlza2JfcHVsbChza2IsIExMX0hFQURFUl9MRU5HVEggKyAyKTsKLQkJCQljdGNfY2xlYXJfYnVzeShjaC0+bmV0ZGV2KTsKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJfQotCi0JCQlza2JfcmVzZXRfdGFpbF9wb2ludGVyKGNoLT50cmFuc19za2IpOwotCQkJY2gtPnRyYW5zX3NrYi0+bGVuID0gMDsKLQkJCWNoLT5jY3dbMV0uY291bnQgPSBza2ItPmxlbjsKLQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KGNoLT50cmFuc19za2IsCi0JCQkJCQkJICAgICAgIHNrYi0+bGVuKSwKLQkJCQkJCSAgc2tiLT5sZW4pOwotCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCQkJY2N3X2lkeCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlza2JfcXVldWVfdGFpbCgmY2gtPmlvX3F1ZXVlLCBza2IpOwotCQkJY2N3X2lkeCA9IDM7Ci0JCX0KLQkJY2gtPnJldHJ5ID0gMDsKLQkJZnNtX25ld3N0YXRlKGNoLT5mc20sIENIX1NUQVRFX1RYKTsKLQkJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ19USU1FT1VUXzVTRUMsIENIX0VWRU5UX1RJTUVSLCBjaCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaC0+Y2RldiksIHNhdmVmbGFncyk7Ci0JCWNoLT5wcm9mLnNlbmRfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7Ci0JCXJjID0gY2N3X2RldmljZV9zdGFydChjaC0+Y2RldiwgJmNoLT5jY3dbY2N3X2lkeF0sCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIGNoLCAweGZmLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwotCQlpZiAoY2N3X2lkeCA9PSAzKQotCQkJY2gtPnByb2YuZG9pb3Nfc2luZ2xlKys7Ci0JCWlmIChyYyAhPSAwKSB7Ci0JCQlmc21fZGVsdGltZXIoJmNoLT50aW1lcik7Ci0JCQljY3dfY2hlY2tfcmV0dXJuX2NvZGUoY2gsIHJjLCAic2luZ2xlIHNrYiBUWCIpOwotCQkJaWYgKGNjd19pZHggPT0gMykKLQkJCQlza2JfZGVxdWV1ZV90YWlsKCZjaC0+aW9fcXVldWUpOwotCQkJLyoqCi0JCQkgKiBSZW1vdmUgb3VyIGhlYWRlci4gSXQgZ2V0cyBhZGRlZAotCQkJICogYWdhaW4gb24gcmV0cmFuc21pdC4KLQkJCSAqLwotCQkJc2tiX3B1bGwoc2tiLCBMTF9IRUFERVJfTEVOR1RIICsgMik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY2N3X2lkeCA9PSAwKSB7Ci0JCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7Ci0JCQkJc3RydWN0IGN0Y19wcml2ICpwcml2cHRyID0gZGV2LT5wcml2OwotCQkJCXByaXZwdHItPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCQlwcml2cHRyLT5zdGF0cy50eF9ieXRlcyArPQotCQkJCSAgICBza2ItPmxlbiAtIExMX0hFQURFUl9MRU5HVEg7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljdGNfY2xlYXJfYnVzeShjaC0+bmV0ZGV2KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogSW50ZXJmYWNlIEFQSSBmb3IgdXBwZXIgbmV0d29yayBsYXllcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBPcGVuIGFuIGludGVyZmFjZS4KLSAqIENhbGxlZCBmcm9tIGdlbmVyaWMgbmV0d29yayBsYXllciB3aGVuIGlmY29uZmlnIHVwIGlzIHJ1bi4KLSAqCi0gKiBAcGFyYW0gZGV2IFBvaW50ZXIgdG8gaW50ZXJmYWNlIHN0cnVjdC4KLSAqCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLUVSUk5PIG9uIGZhaWx1cmUuIChOZXZlciBmYWlscy4pCi0gKi8KLXN0YXRpYyBpbnQKLWN0Y19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQotewotCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwotCWZzbV9ldmVudCgoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT5mc20sIERFVl9FVkVOVF9TVEFSVCwgZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBDbG9zZSBhbiBpbnRlcmZhY2UuCi0gKiBDYWxsZWQgZnJvbSBnZW5lcmljIG5ldHdvcmsgbGF5ZXIgd2hlbiBpZmNvbmZpZyBkb3duIGlzIHJ1bi4KLSAqCi0gKiBAcGFyYW0gZGV2IFBvaW50ZXIgdG8gaW50ZXJmYWNlIHN0cnVjdC4KLSAqCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLUVSUk5PIG9uIGZhaWx1cmUuIChOZXZlciBmYWlscy4pCi0gKi8KLXN0YXRpYyBpbnQKLWN0Y19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKLXsKLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQlmc21fZXZlbnQoKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+ZnNtLCBERVZfRVZFTlRfU1RPUCwgZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBTdGFydCB0cmFuc21pc3Npb24gb2YgYSBwYWNrZXQuCi0gKiBDYWxsZWQgZnJvbSBnZW5lcmljIG5ldHdvcmsgZGV2aWNlIGxheWVyLgotICoKLSAqIEBwYXJhbSBza2IgUG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyB0aGUgcGFja2V0LgotICogQHBhcmFtIGRldiBQb2ludGVyIHRvIGludGVyZmFjZSBzdHJ1Y3QuCi0gKgotICogQHJldHVybiAwIGlmIHBhY2tldCBjb25zdW1lZCwgITAgaWYgcGFja2V0IHJlamVjdGVkLgotICogICAgICAgICBOb3RlOiBJZiB3ZSByZXR1cm4gITAsIHRoZW4gdGhlIHBhY2tldCBpcyBmcmVlJ2QgYnkKLSAqICAgICAgICAgICAgICAgdGhlIGdlbmVyaWMgbmV0d29yayBsYXllci4KLSAqLwotc3RhdGljIGludAotY3RjX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGN0Y19wcml2ICpwcml2cHRyID0gKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXY7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQkvKioKLQkgKiBTb21lIHNhbml0eSBjaGVja3MgLi4uCi0JICovCi0JaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWN0Y19wcl93YXJuKCIlczogTlVMTCBza19idWZmIHBhc3NlZFxuIiwgZGV2LT5uYW1lKTsKLQkJcHJpdnB0ci0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgKExMX0hFQURFUl9MRU5HVEggKyAyKSkgewotCQljdGNfcHJfd2FybigiJXM6IEdvdCBza19idWZmIHdpdGggaGVhZCByb29tIDwgJWxkIGJ5dGVzXG4iLAotCQkJICAgIGRldi0+bmFtZSwgTExfSEVBREVSX0xFTkdUSCArIDIpOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXByaXZwdHItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogSWYgY2hhbm5lbHMgYXJlIG5vdCBydW5uaW5nLCB0cnkgdG8gcmVzdGFydCB0aGVtCi0JICogYW5kIHRocm93IGF3YXkgcGFja2V0LgotCSAqLwotCWlmIChmc21fZ2V0c3RhdGUocHJpdnB0ci0+ZnNtKSAhPSBERVZfU1RBVEVfUlVOTklORykgewotCQlmc21fZXZlbnQocHJpdnB0ci0+ZnNtLCBERVZfRVZFTlRfU1RBUlQsIGRldik7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcHJpdnB0ci0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlwcml2cHRyLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJcHJpdnB0ci0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGN0Y190ZXN0X2FuZF9zZXRfYnVzeShkZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JaWYgKHRyYW5zbWl0X3NrYihwcml2cHRyLT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQotCQlyYyA9IDE7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIFNldHMgTVRVIG9mIGFuIGludGVyZmFjZS4KLSAqCi0gKiBAcGFyYW0gZGV2ICAgICBQb2ludGVyIHRvIGludGVyZmFjZSBzdHJ1Y3QuCi0gKiBAcGFyYW0gbmV3X210dSBUaGUgbmV3IE1UVSB0byB1c2UgZm9yIHRoaXMgaW50ZXJmYWNlLgotICoKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIE1UVSBpcyBvdXQgb2YgdmFsaWQgcmFuZ2UuCi0gKiAgICAgICAgICh2YWxpZCByYW5nZSBpcyA1NzYgLi4gNjU1MjcpLiBJZiBWTSBpcyBvbiB0aGUKLSAqICAgICAgICAgcmVtb3RlIHNpZGUsIG1heGltdW0gTVRVIGlzIDMyNzYwLCBob3dldmVyIHRoaXMgaXMKLSAqICAgICAgICAgPGVtPm5vdDwvZW0+IGNoZWNrZWQgaGVyZS4KLSAqLwotc3RhdGljIGludAotY3RjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2OwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKChuZXdfbXR1IDwgNTc2KSB8fCAobmV3X210dSA+IDY1NTI3KSB8fAotCSAgICAobmV3X210dSA+IChwcml2cHRyLT5jaGFubmVsW1JFQURdLT5tYXhfYnVmc2l6ZSAtCi0JCQlMTF9IRUFERVJfTEVOR1RIIC0gMikpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBMTF9IRUFERVJfTEVOR1RIICsgMjsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBSZXR1cm5zIGludGVyZmFjZSBzdGF0aXN0aWNzIG9mIGEgZGV2aWNlLgotICoKLSAqIEBwYXJhbSBkZXYgUG9pbnRlciB0byBpbnRlcmZhY2Ugc3RydWN0LgotICoKLSAqIEByZXR1cm4gUG9pbnRlciB0byBzdGF0cyBzdHJ1Y3Qgb2YgdGhpcyBpbnRlcmZhY2UuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCi1jdGNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0JcmV0dXJuICYoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT5zdGF0czsKLX0KLQotLyoKLSAqIHN5c2ZzIGF0dHJpYnV0ZXMKLSAqLwotCi1zdGF0aWMgc3NpemVfdAotYnVmZmVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdjsKLQotCXByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWlmICghcHJpdikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQlwcml2LT5idWZmZXJfc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1idWZmZXJfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGN0Y19wcml2ICpwcml2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwotCWludCBiczE7Ci0JY2hhciBidWZmZXJbMTZdOwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JREJGX1RFWFQodHJhY2UsIDMsIGJ1Zik7Ci0JcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JaWYgKCFwcml2KSB7Ci0JCURCRl9URVhUKHRyYWNlLCAzLCAiYmZub3ByaXYiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3NjYW5mKGJ1ZiwgIiV1IiwgJmJzMSk7Ci0JaWYgKGJzMSA+IENUQ19CVUZTSVpFX0xJTUlUKQotCQlnb3RvIGVpbnZhbDsKLQlpZiAoYnMxIDwgKDU3NiArIExMX0hFQURFUl9MRU5HVEggKyAyKSkKLQkJZ290byBlaW52YWw7Ci0JcHJpdi0+YnVmZmVyX3NpemUgPSBiczE7CS8vIGp1c3QgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0Ci0KLQluZGV2ID0gcHJpdi0+Y2hhbm5lbFtSRUFEXS0+bmV0ZGV2OwotCWlmICghbmRldikgewotCQlEQkZfVEVYVCh0cmFjZSwgMywgImJmbm9uZGV2Iik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmICgobmRldi0+ZmxhZ3MgJiBJRkZfUlVOTklORykgJiYKLQkgICAgKGJzMSA8IChuZGV2LT5tdHUgKyBMTF9IRUFERVJfTEVOR1RIICsgMikpKQotCQlnb3RvIGVpbnZhbDsKLQotCXByaXYtPmNoYW5uZWxbUkVBRF0tPm1heF9idWZzaXplID0gYnMxOwotCXByaXYtPmNoYW5uZWxbV1JJVEVdLT5tYXhfYnVmc2l6ZSA9IGJzMTsKLQlpZiAoIShuZGV2LT5mbGFncyAmIElGRl9SVU5OSU5HKSkKLQkJbmRldi0+bXR1ID0gYnMxIC0gTExfSEVBREVSX0xFTkdUSCAtIDI7Ci0JcHJpdi0+Y2hhbm5lbFtSRUFEXS0+ZmxhZ3MgfD0gQ0hBTk5FTF9GTEFHU19CVUZTSVpFX0NIQU5HRUQ7Ci0JcHJpdi0+Y2hhbm5lbFtXUklURV0tPmZsYWdzIHw9IENIQU5ORUxfRkxBR1NfQlVGU0laRV9DSEFOR0VEOwotCi0Jc3ByaW50ZihidWZmZXIsICIlZCIscHJpdi0+YnVmZmVyX3NpemUpOwotCURCRl9URVhUKHRyYWNlLCAzLCBidWZmZXIpOwotCXJldHVybiBjb3VudDsKLQotZWludmFsOgotCURCRl9URVhUKHRyYWNlLCAzLCAiYnVmZl9lcnIiKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHNzaXplX3QKLWxvZ2xldmVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsb2dsZXZlbCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1sb2dsZXZlbF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgbGwxOwotCi0JREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7Ci0Jc3NjYW5mKGJ1ZiwgIiVpIiwgJmxsMSk7Ci0KLQlpZiAoKGxsMSA+IENUQ19MT0dMRVZFTF9NQVgpIHx8IChsbDEgPCAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbG9nbGV2ZWwgPSBsbDE7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3ByaW50X3N0YXRpc3RpY3Moc3RydWN0IGN0Y19wcml2ICpwcml2KQotewotCWNoYXIgKnNidWY7Ci0JY2hhciAqcDsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmICghcHJpdikKLQkJcmV0dXJuOwotCXNidWYgPSBrbWFsbG9jKDIwNDgsIEdGUF9LRVJORUwpOwotCWlmIChzYnVmID09IE5VTEwpCi0JCXJldHVybjsKLQlwID0gc2J1ZjsKLQotCXAgKz0gc3ByaW50ZihwLCAiICBEZXZpY2UgRlNNIHN0YXRlOiAlc1xuIiwKLQkJICAgICBmc21fZ2V0c3RhdGVfc3RyKHByaXYtPmZzbSkpOwotCXAgKz0gc3ByaW50ZihwLCAiICBSWCBjaGFubmVsIEZTTSBzdGF0ZTogJXNcbiIsCi0JCSAgICAgZnNtX2dldHN0YXRlX3N0cihwcml2LT5jaGFubmVsW1JFQURdLT5mc20pKTsKLQlwICs9IHNwcmludGYocCwgIiAgVFggY2hhbm5lbCBGU00gc3RhdGU6ICVzXG4iLAotCQkgICAgIGZzbV9nZXRzdGF0ZV9zdHIocHJpdi0+Y2hhbm5lbFtXUklURV0tPmZzbSkpOwotCXAgKz0gc3ByaW50ZihwLCAiICBNYXguIFRYIGJ1ZmZlciB1c2VkOiAlbGRcbiIsCi0JCSAgICAgcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YubWF4bXVsdGkpOwotCXAgKz0gc3ByaW50ZihwLCAiICBNYXguIGNoYWluZWQgU0tCczogJWxkXG4iLAotCQkgICAgIHByaXYtPmNoYW5uZWxbV1JJVEVdLT5wcm9mLm1heGNxdWV1ZSk7Ci0JcCArPSBzcHJpbnRmKHAsICIgIFRYIHNpbmdsZSB3cml0ZSBvcHM6ICVsZFxuIiwKLQkJICAgICBwcml2LT5jaGFubmVsW1dSSVRFXS0+cHJvZi5kb2lvc19zaW5nbGUpOwotCXAgKz0gc3ByaW50ZihwLCAiICBUWCBtdWx0aSB3cml0ZSBvcHM6ICVsZFxuIiwKLQkJICAgICBwcml2LT5jaGFubmVsW1dSSVRFXS0+cHJvZi5kb2lvc19tdWx0aSk7Ci0JcCArPSBzcHJpbnRmKHAsICIgIE5ldHRvIGJ5dGVzIHdyaXR0ZW46ICVsZFxuIiwKLQkJICAgICBwcml2LT5jaGFubmVsW1dSSVRFXS0+cHJvZi50eGxlbik7Ci0JcCArPSBzcHJpbnRmKHAsICIgIE1heC4gVFggSU8tdGltZTogJWxkXG4iLAotCQkgICAgIHByaXYtPmNoYW5uZWxbV1JJVEVdLT5wcm9mLnR4X3RpbWUpOwotCi0JY3RjX3ByX2RlYnVnKCJTdGF0aXN0aWNzIGZvciAlczpcbiVzIiwKLQkJICAgICBwcml2LT5jaGFubmVsW1dSSVRFXS0+bmV0ZGV2LT5uYW1lLCBzYnVmKTsKLQlrZnJlZShzYnVmKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1zdGF0c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWlmICghcHJpdikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY3RjX3ByaW50X3N0YXRpc3RpY3MocHJpdik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1zdGF0c193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWlmICghcHJpdikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JLyogUmVzZXQgc3RhdGlzdGljcyAqLwotCW1lbXNldCgmcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YsIDAsCi0JCQlzaXplb2YocHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YpKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGNfbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0Jc3RydWN0IGN0Y19wcml2ICpwcml2cHRyOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQlwcml2cHRyID0gKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXY7Ci0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLX0KLQotc3RhdGljIGludAotY3RjX25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGNfZnJlZV9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBmcmVlX2RldikKLXsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXZwdHI7Ci0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQlwcml2cHRyID0gZGV2LT5wcml2OwotCWlmIChwcml2cHRyKSB7Ci0JCWlmIChwcml2cHRyLT5mc20pCi0JCQlrZnJlZV9mc20ocHJpdnB0ci0+ZnNtKTsKLQkJa2ZyZWUocHJpdnB0cik7Ci0JfQotI2lmZGVmIE1PRFVMRQotCWlmIChmcmVlX2RldikKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgc3NpemVfdAotY3RjX3Byb3RvX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdjsKLQotCXByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWlmICghcHJpdikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+cHJvdG9jb2wpOwotfQotCi1zdGF0aWMgc3NpemVfdAotY3RjX3Byb3RvX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdjsKLQlpbnQgdmFsdWU7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlwcl9kZWJ1ZygiJXMoKSBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKLQlpZiAoIXByaXYpCi0JCXJldHVybiAtRU5PREVWOwotCXNzY2FuZihidWYsICIldSIsICZ2YWx1ZSk7Ci0JaWYgKCEoKHZhbHVlID09IENUQ19QUk9UT19TMzkwKSAgfHwKLQkgICAgICAodmFsdWUgPT0gQ1RDX1BST1RPX0xJTlVYKSB8fAotCSAgICAgICh2YWx1ZSA9PSBDVENfUFJPVE9fT1MzOTApKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcHJpdi0+cHJvdG9jb2wgPSB2YWx1ZTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QKLWN0Y190eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2OwotCi0JY2dkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwotCWlmICghY2dkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGN1MzA4OF90eXBlW2NnZGV2LT5jZGV2WzBdLT5pZC5kcml2ZXJfaW5mb10pOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoYnVmZmVyLCAwNjQ0LCBidWZmZXJfc2hvdywgYnVmZmVyX3dyaXRlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihwcm90b2NvbCwgMDY0NCwgY3RjX3Byb3RvX3Nob3csIGN0Y19wcm90b19zdG9yZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodHlwZSwgMDQ0NCwgY3RjX3R5cGVfc2hvdywgTlVMTCk7Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihsb2dsZXZlbCwgMDY0NCwgbG9nbGV2ZWxfc2hvdywgbG9nbGV2ZWxfd3JpdGUpOwotc3RhdGljIERFVklDRV9BVFRSKHN0YXRzLCAwNjQ0LCBzdGF0c19zaG93LCBzdGF0c193cml0ZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjdGNfYXR0cltdID0gewotCSZkZXZfYXR0cl9wcm90b2NvbC5hdHRyLAotCSZkZXZfYXR0cl90eXBlLmF0dHIsCi0JJmRldl9hdHRyX2J1ZmZlci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjdGNfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBjdGNfYXR0ciwKLX07Ci0KLXN0YXRpYyBpbnQKLWN0Y19hZGRfYXR0cmlidXRlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJjOwotCi0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbG9nbGV2ZWwpOwotCWlmIChyYykKLQkJZ290byBvdXQ7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RhdHMpOwotCWlmICghcmMpCi0JCWdvdG8gb3V0OwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9sb2dsZXZlbCk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3JlbW92ZV9hdHRyaWJ1dGVzKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RhdHMpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9sb2dsZXZlbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWN0Y19hZGRfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQotewotCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQotCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmN0Y19hdHRyX2dyb3VwKTsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y19yZW1vdmVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQotewotCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQotCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmY3RjX2F0dHJfZ3JvdXApOwotfQotCi0vKioKLSAqIEFkZCBjdGMgc3BlY2lmaWMgYXR0cmlidXRlcy4KLSAqIEFkZCBjdGMgcHJpdmF0ZSBkYXRhLgotICoKLSAqIEBwYXJhbSBjZ2RldiBwb2ludGVyIHRvIGNjd2dyb3VwX2RldmljZSBqdXN0IGFkZGVkCi0gKgotICogQHJldHVybnMgMCBvbiBzdWNjZXNzLCAhMCBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgaW50Ci1jdGNfcHJvYmVfZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2KQotewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdjsKLQlpbnQgcmM7Ci0JY2hhciBidWZmZXJbMTZdOwotCi0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCURCRl9URVhUKHNldHVwLCAzLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFnZXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN0Y19wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2KSB7Ci0JCWN0Y19wcl9lcnIoIiVzOiBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXB1dF9kZXZpY2UoJmNnZGV2LT5kZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyYyA9IGN0Y19hZGRfZmlsZXMoJmNnZGV2LT5kZXYpOwotCWlmIChyYykgewotCQlrZnJlZShwcml2KTsKLQkJcHV0X2RldmljZSgmY2dkZXYtPmRldik7Ci0JCXJldHVybiByYzsKLQl9Ci0JcHJpdi0+YnVmZmVyX3NpemUgPSBDVENfQlVGU0laRV9ERUZBVUxUOwotCWNnZGV2LT5jZGV2WzBdLT5oYW5kbGVyID0gY3RjX2lycV9oYW5kbGVyOwotCWNnZGV2LT5jZGV2WzFdLT5oYW5kbGVyID0gY3RjX2lycV9oYW5kbGVyOwotCWNnZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBwcml2OwotCi0Jc3ByaW50ZihidWZmZXIsICIlcCIsIHByaXYpOwotCURCRl9URVhUKGRhdGEsIDMsIGJ1ZmZlcik7Ci0KLQlzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IGN0Y19wcml2KSk7Ci0JREJGX1RFWFQoZGF0YSwgMywgYnVmZmVyKTsKLQotCXNwcmludGYoYnVmZmVyLCAiJXAiLCAmY2hhbm5lbHMpOwotCURCRl9URVhUKGRhdGEsIDMsIGJ1ZmZlcik7Ci0KLQlzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IGNoYW5uZWwpKTsKLQlEQkZfVEVYVChkYXRhLCAzLCBidWZmZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogRGV2aWNlIHNldHVwIGZ1bmN0aW9uIGNhbGxlZCBieSBhbGxvY19uZXRkZXYoKS4KLSAqCi0gKiBAcGFyYW0gZGV2ICBEZXZpY2UgdG8gYmUgc2V0dXAuCi0gKi8KLXZvaWQgY3RjX2luaXRfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQotewotCURCRl9URVhUKHNldHVwLCAzLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKGRldi0+bXR1ID09IDApCi0JCWRldi0+bXR1ID0gQ1RDX0JVRlNJWkVfREVGQVVMVCAtIExMX0hFQURFUl9MRU5HVEggLSAyOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY3RjX3R4OwotCWRldi0+b3BlbiA9IGN0Y19vcGVuOwotCWRldi0+c3RvcCA9IGN0Y19jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IGN0Y19zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBjdGNfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IExMX0hFQURFUl9MRU5HVEggKyAyOwotCWRldi0+YWRkcl9sZW4gPSAwOwotCWRldi0+dHlwZSA9IEFSUEhSRF9TTElQOwotCWRldi0+dHhfcXVldWVfbGVuID0gMTAwOwotCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7Ci19Ci0KLQotLyoqCi0gKgotICogU2V0dXAgYW4gaW50ZXJmYWNlLgotICoKLSAqIEBwYXJhbSBjZ2RldiAgRGV2aWNlIHRvIGJlIHNldHVwLgotICoKLSAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgITAgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGludAotY3RjX25ld19kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYpCi17Ci0JY2hhciByZWFkX2lkW0NUQ19JRF9TSVpFXTsKLQljaGFyIHdyaXRlX2lkW0NUQ19JRF9TSVpFXTsKLQlpbnQgZGlyZWN0aW9uOwotCWVudW0gY2hhbm5lbF90eXBlcyB0eXBlOwotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0cjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCByZXQ7Ci0JY2hhciBidWZmZXJbMTZdOwotCi0JcHJfZGVidWcoIiVzKCkgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCURCRl9URVhUKHNldHVwLCAzLCBfX0ZVTkNUSU9OX18pOwotCi0JcHJpdnB0ciA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7Ci0JaWYgKCFwcml2cHRyKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXNwcmludGYoYnVmZmVyLCAiJWQiLCBwcml2cHRyLT5idWZmZXJfc2l6ZSk7Ci0JREJGX1RFWFQoc2V0dXAsIDMsIGJ1ZmZlcik7Ci0KLQl0eXBlID0gZ2V0X2NoYW5uZWxfdHlwZSgmY2dkZXYtPmNkZXZbMF0tPmlkKTsKLQotCXNucHJpbnRmKHJlYWRfaWQsIENUQ19JRF9TSVpFLCAiY2gtJXMiLCBjZ2Rldi0+Y2RldlswXS0+ZGV2LmJ1c19pZCk7Ci0Jc25wcmludGYod3JpdGVfaWQsIENUQ19JRF9TSVpFLCAiY2gtJXMiLCBjZ2Rldi0+Y2RldlsxXS0+ZGV2LmJ1c19pZCk7Ci0KLQlpZiAoYWRkX2NoYW5uZWwoY2dkZXYtPmNkZXZbMF0sIHR5cGUpKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoYWRkX2NoYW5uZWwoY2dkZXYtPmNkZXZbMV0sIHR5cGUpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZ2Rldi0+Y2RldlswXSk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAJImNjd19kZXZpY2Vfc2V0X29ubGluZSAoY2RldlswXSkgZmFpbGVkIHdpdGggcmV0ID0gJWRcbiIsIHJldCk7Ci0JfQotCi0JcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNnZGV2LT5jZGV2WzFdKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJIAkiY2N3X2RldmljZV9zZXRfb25saW5lIChjZGV2WzFdKSBmYWlsZWQgd2l0aCByZXQgPSAlZFxuIiwgcmV0KTsKLQl9Ci0KLQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgImN0YyVkIiwgY3RjX2luaXRfbmV0ZGV2aWNlKTsKLQlpZiAoIWRldikgewotCQljdGNfcHJfd2FybigiY3RjX2luaXRfbmV0ZGV2aWNlIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlkZXYtPnByaXYgPSBwcml2cHRyOwotCi0JcHJpdnB0ci0+ZnNtID0gaW5pdF9mc20oImN0Y2RldiIsIGRldl9zdGF0ZV9uYW1lcywKLQkJCWRldl9ldmVudF9uYW1lcywgQ1RDX05SX0RFVl9TVEFURVMsIENUQ19OUl9ERVZfRVZFTlRTLAotCQkJZGV2X2ZzbSwgREVWX0ZTTV9MRU4sIEdGUF9LRVJORUwpOwotCWlmIChwcml2cHRyLT5mc20gPT0gTlVMTCkgewotCQlmcmVlX25ldGRldihkZXYpOwotCQlnb3RvIG91dDsKLQl9Ci0JZnNtX25ld3N0YXRlKHByaXZwdHItPmZzbSwgREVWX1NUQVRFX1NUT1BQRUQpOwotCWZzbV9zZXR0aW1lcihwcml2cHRyLT5mc20sICZwcml2cHRyLT5yZXN0YXJ0X3RpbWVyKTsKLQotCWZvciAoZGlyZWN0aW9uID0gUkVBRDsgZGlyZWN0aW9uIDw9IFdSSVRFOyBkaXJlY3Rpb24rKykgewotCQlwcml2cHRyLT5jaGFubmVsW2RpcmVjdGlvbl0gPQotCQkgICAgY2hhbm5lbF9nZXQodHlwZSwgZGlyZWN0aW9uID09IFJFQUQgPyByZWFkX2lkIDogd3JpdGVfaWQsCi0JCQkJZGlyZWN0aW9uKTsKLQkJaWYgKHByaXZwdHItPmNoYW5uZWxbZGlyZWN0aW9uXSA9PSBOVUxMKSB7Ci0JCQlpZiAoZGlyZWN0aW9uID09IFdSSVRFKQotCQkJCWNoYW5uZWxfZnJlZShwcml2cHRyLT5jaGFubmVsW1JFQURdKTsKLQotCQkJY3RjX2ZyZWVfbmV0ZGV2aWNlKGRldiwgMSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlwcml2cHRyLT5jaGFubmVsW2RpcmVjdGlvbl0tPm5ldGRldiA9IGRldjsKLQkJcHJpdnB0ci0+Y2hhbm5lbFtkaXJlY3Rpb25dLT5wcm90b2NvbCA9IHByaXZwdHItPnByb3RvY29sOwotCQlwcml2cHRyLT5jaGFubmVsW2RpcmVjdGlvbl0tPm1heF9idWZzaXplID0gcHJpdnB0ci0+YnVmZmVyX3NpemU7Ci0JfQotCS8qIHN5c2ZzIG1hZ2ljICovCi0JU0VUX05FVERFVl9ERVYoZGV2LCAmY2dkZXYtPmRldik7Ci0KLQlpZiAoY3RjX25ldGRldl9yZWdpc3RlcihkZXYpICE9IDApIHsKLQkJY3RjX2ZyZWVfbmV0ZGV2aWNlKGRldiwgMSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChjdGNfYWRkX2F0dHJpYnV0ZXMoJmNnZGV2LT5kZXYpKSB7Ci0JCWN0Y19uZXRkZXZfdW5yZWdpc3RlcihkZXYpOwotCQlkZXYtPnByaXYgPSBOVUxMOwotCQljdGNfZnJlZV9uZXRkZXZpY2UoZGV2LCAxKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3RybGNweShwcml2cHRyLT5mc20tPm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mIChwcml2cHRyLT5mc20tPm5hbWUpKTsKLQotCXByaW50X2Jhbm5lcigpOwotCi0JY3RjX3ByX2luZm8oIiVzOiByZWFkOiAlcywgd3JpdGU6ICVzLCBwcm90bzogJWRcbiIsCi0JCSAgICBkZXYtPm5hbWUsIHByaXZwdHItPmNoYW5uZWxbUkVBRF0tPmlkLAotCQkgICAgcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0tPmlkLCBwcml2cHRyLT5wcm90b2NvbCk7Ci0KLQlyZXR1cm4gMDsKLW91dDoKLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzFdKTsKLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzBdKTsKLQotCXJldHVybiAtRU5PREVWOwotfQotCi0vKioKLSAqIFNodXRkb3duIGFuIGludGVyZmFjZS4KLSAqCi0gKiBAcGFyYW0gY2dkZXYgIERldmljZSB0byBiZSBzaHV0IGRvd24uCi0gKgotICogQHJldHVybnMgMCBvbiBzdWNjZXNzLCAhMCBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgaW50Ci1jdGNfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2KQotewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKLQotCURCRl9URVhUKHNldHVwLCAzLCBfX0ZVTkNUSU9OX18pOwotCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQotCi0JcHJpdiA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7Ci0JbmRldiA9IE5VTEw7Ci0JaWYgKCFwcml2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChwcml2LT5jaGFubmVsW1JFQURdKSB7Ci0JCW5kZXYgPSBwcml2LT5jaGFubmVsW1JFQURdLT5uZXRkZXY7Ci0KLQkJLyogQ2xvc2UgdGhlIGRldmljZSAqLwotCQljdGNfY2xvc2UobmRldik7Ci0JCW5kZXYtPmZsYWdzICY9fklGRl9SVU5OSU5HOwotCi0JCWN0Y19yZW1vdmVfYXR0cmlidXRlcygmY2dkZXYtPmRldik7Ci0KLQkJY2hhbm5lbF9mcmVlKHByaXYtPmNoYW5uZWxbUkVBRF0pOwotCX0KLQlpZiAocHJpdi0+Y2hhbm5lbFtXUklURV0pCi0JCWNoYW5uZWxfZnJlZShwcml2LT5jaGFubmVsW1dSSVRFXSk7Ci0KLQlpZiAobmRldikgewotCQljdGNfbmV0ZGV2X3VucmVnaXN0ZXIobmRldik7Ci0JCW5kZXYtPnByaXYgPSBOVUxMOwotCQljdGNfZnJlZV9uZXRkZXZpY2UobmRldiwgMSk7Ci0JfQotCi0JaWYgKHByaXYtPmZzbSkKLQkJa2ZyZWVfZnNtKHByaXYtPmZzbSk7Ci0KLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzFdKTsKLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNnZGV2LT5jZGV2WzBdKTsKLQotCWlmIChwcml2LT5jaGFubmVsW1JFQURdKQotCQljaGFubmVsX3JlbW92ZShwcml2LT5jaGFubmVsW1JFQURdKTsKLQlpZiAocHJpdi0+Y2hhbm5lbFtXUklURV0pCi0JCWNoYW5uZWxfcmVtb3ZlKHByaXYtPmNoYW5uZWxbV1JJVEVdKTsKLQlwcml2LT5jaGFubmVsW1JFQURdID0gcHJpdi0+Y2hhbm5lbFtXUklURV0gPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotc3RhdGljIHZvaWQKLWN0Y19yZW1vdmVfZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2KQotewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdjsKLQotCXByX2RlYnVnKCIlcygpIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQlEQkZfVEVYVChzZXR1cCwgMywgX19GVU5DVElPTl9fKTsKLQotCXByaXYgPSBjZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwotCWlmICghcHJpdikKLQkJcmV0dXJuOwotCWlmIChjZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT05MSU5FKQotCQljdGNfc2h1dGRvd25fZGV2aWNlKGNnZGV2KTsKLQljdGNfcmVtb3ZlX2ZpbGVzKCZjZ2Rldi0+ZGV2KTsKLQljZ2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gTlVMTDsKLQlrZnJlZShwcml2KTsKLQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCBjY3dncm91cF9kcml2ZXIgY3RjX2dyb3VwX2RyaXZlciA9IHsKLQkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKLQkubmFtZSAgICAgICAgPSAiY3RjIiwKLQkubWF4X3NsYXZlcyAgPSAyLAotCS5kcml2ZXJfaWQgICA9IDB4QzNFM0MzLAotCS5wcm9iZSAgICAgICA9IGN0Y19wcm9iZV9kZXZpY2UsCi0JLnJlbW92ZSAgICAgID0gY3RjX3JlbW92ZV9kZXZpY2UsCi0JLnNldF9vbmxpbmUgID0gY3RjX25ld19kZXZpY2UsCi0JLnNldF9vZmZsaW5lID0gY3RjX3NodXRkb3duX2RldmljZSwKLX07Ci0KLS8qKgotICogTW9kdWxlIHJlbGF0ZWQgcm91dGluZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBQcmVwYXJlIHRvIGJlIHVubG9hZGVkLiBGcmVlIElSUSdzIGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMuCi0gKiBUaGlzIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGlzIG1vZHVsZSBpcyB1bmxvYWRlZC4gSXQgaXMKLSAqIDxlbT5ub3Q8L2VtPiBjYWxsZWQsIGlmIHRoZSB1c2FnZSBjb3VudCBpcyAhMCwgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjawotICogZm9yIHRoYXQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdAotY3RjX2V4aXQodm9pZCkKLXsKLQlEQkZfVEVYVChzZXR1cCwgMywgX19GVU5DVElPTl9fKTsKLQl1bnJlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKCZjdGNfZ3JvdXBfZHJpdmVyKTsKLQljdGNfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKLQljdGNfcHJfaW5mbygiQ1RDIGRyaXZlciB1bmxvYWRlZFxuIik7Ci19Ci0KLS8qKgotICogSW5pdGlhbGl6ZSBtb2R1bGUuCi0gKiBUaGlzIGlzIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBtb2R1bGUgaXMgbG9hZGVkLgotICoKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAhMCBvbiBlcnJvci4KLSAqLwotc3RhdGljIGludCBfX2luaXQKLWN0Y19pbml0KHZvaWQpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlsb2dsZXZlbCA9IENUQ19MT0dMRVZFTF9ERUZBVUxUOwotCi0JREJGX1RFWFQoc2V0dXAsIDMsIF9fRlVOQ1RJT05fXyk7Ci0KLQlwcmludF9iYW5uZXIoKTsKLQotCXJldCA9IGN0Y19yZWdpc3Rlcl9kYmZfdmlld3MoKTsKLQlpZiAocmV0KXsKLQkJY3RjX3ByX2NyaXQoImN0Y19pbml0IGZhaWxlZCB3aXRoIGN0Y19yZWdpc3Rlcl9kYmZfdmlld3MgcmMgPSAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0ID0gcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoJmN0Y19ncm91cF9kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJY3RjX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLW1vZHVsZV9pbml0KGN0Y19pbml0KTsKLW1vZHVsZV9leGl0KGN0Y19leGl0KTsKLQotLyogLS0tIFRoaXMgaXMgdGhlIEVORCBteSBmcmllbmQgLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uaCBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjMwNWQxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDVEMgLyBFU0NPTiBuZXR3b3JrIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiBBdXRob3Iocyk6IEZyaXR6IEVsZmVydCAoZWxmZXJ0QGRlLmlibS5jb20sIGZlbGZlcnRAbWlsbGVudXguY29tKQotCSAgICAgIFBldGVyIFRpZWRlbWFubiAocHRpZWRlbUBkZS5pYm0uY29tKQotICoKLSAqCi0gKiBEb2N1bWVudGF0aW9uIHVzZWQ6Ci0gKiAgLSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiAoSUJNIGRvYyM6IFNBMjItNzIwMS0wNikKLSAqICAtIENvbW1vbiBJTy8tRGV2aWNlIENvbW1hbmRzIGFuZCBTZWxmIERlc2NyaXB0aW9uIChJQk0gZG9jIzogU0EyMi03MjA0LTAyKQotICogIC0gQ29tbW9uIElPLy1EZXZpY2UgQ29tbWFuZHMgYW5kIFNlbGYgRGVzY3JpcHRpb24gKElCTSBkb2MjOiBTTjIyLTU1MzUpCi0gKiAgLSBFU0NPTiBDaGFubmVsLXRvLUNoYW5uZWwgQWRhcHRlciAoSUJNIGRvYyM6IFNBMjItNzIwMy0wMCkKLSAqICAtIEVTQ09OIEkvTyBJbnRlcmZhY2UgKElCTSBkb2MjOiBTQTIyLTcyMDItMDI5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgX0NUQ01BSU5fSF8KLSNkZWZpbmUgX0NUQ01BSU5fSF8KLQotI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KLSNpbmNsdWRlIDxhc20vY2N3Z3JvdXAuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi0jaW5jbHVkZSAiZnNtLmgiCi0jaW5jbHVkZSAiY3UzMDg4LmgiCi0KLQotLyoqCi0gKiBDQ1cgY29tbWFuZHMsIHVzZWQgaW4gdGhpcyBkcml2ZXIuCi0gKi8KLSNkZWZpbmUgQ0NXX0NNRF9XUklURQkJMHgwMQotI2RlZmluZSBDQ1dfQ01EX1JFQUQJCTB4MDIKLSNkZWZpbmUgQ0NXX0NNRF9TRVRfRVhURU5ERUQJMHhjMwotI2RlZmluZSBDQ1dfQ01EX1BSRVBBUkUJCTB4ZTMKLQotI2RlZmluZSBDVENfUFJPVE9fUzM5MCAgICAgICAgICAwCi0jZGVmaW5lIENUQ19QUk9UT19MSU5VWCAgICAgICAgIDEKLSNkZWZpbmUgQ1RDX1BST1RPX09TMzkwICAgICAgICAgMwotCi0jZGVmaW5lIENUQ19CVUZTSVpFX0xJTUlUICAgICAgIDY1NTM1Ci0jZGVmaW5lIENUQ19CVUZTSVpFX0RFRkFVTFQgICAgIDMyNzY4Ci0KLSNkZWZpbmUgQ1RDX1RJTUVPVVRfNVNFQyAgICAgICAgNTAwMAotCi0jZGVmaW5lIENUQ19JTklUSUFMX0JMT0NLTEVOICAgIDIKLQotI2RlZmluZSBSRUFECQkJMAotI2RlZmluZSBXUklURQkJCTEKLQotI2RlZmluZSBDVENfSURfU0laRSAgICAgICAgICAgICBCVVNfSURfU0laRSszCi0KLQotc3RydWN0IGN0Y19wcm9maWxlIHsKLQl1bnNpZ25lZCBsb25nIG1heG11bHRpOwotCXVuc2lnbmVkIGxvbmcgbWF4Y3F1ZXVlOwotCXVuc2lnbmVkIGxvbmcgZG9pb3Nfc2luZ2xlOwotCXVuc2lnbmVkIGxvbmcgZG9pb3NfbXVsdGk7Ci0JdW5zaWduZWQgbG9uZyB0eGxlbjsKLQl1bnNpZ25lZCBsb25nIHR4X3RpbWU7Ci0Jc3RydWN0IHRpbWVzcGVjIHNlbmRfc3RhbXA7Ci19OwotCi0vKioKLSAqIERlZmluaXRpb24gb2Ygb25lIGNoYW5uZWwKLSAqLwotc3RydWN0IGNoYW5uZWwgewotCi0JLyoqCi0JICogUG9pbnRlciB0byBuZXh0IGNoYW5uZWwgaW4gbGlzdC4KLQkgKi8KLQlzdHJ1Y3QgY2hhbm5lbCAqbmV4dDsKLQljaGFyIGlkW0NUQ19JRF9TSVpFXTsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKLQotCS8qKgotCSAqIFR5cGUgb2YgdGhpcyBjaGFubmVsLgotCSAqIENUQy9BIG9yIEVzY29uIGZvciB2YWxpZCBjaGFubmVscy4KLQkgKi8KLQllbnVtIGNoYW5uZWxfdHlwZXMgdHlwZTsKLQotCS8qKgotCSAqIE1pc2MuIGZsYWdzLiBTZWUgQ0hBTk5FTF9GTEFHU18uLi4gYmVsb3cKLQkgKi8KLQlfX3UzMiBmbGFnczsKLQotCS8qKgotCSAqIFRoZSBwcm90b2NvbCBvZiB0aGlzIGNoYW5uZWwKLQkgKi8KLQlfX3UxNiBwcm90b2NvbDsKLQotCS8qKgotCSAqIEkvTyBhbmQgaXJxIHJlbGF0ZWQgc3R1ZmYKLQkgKi8KLQlzdHJ1Y3QgY2N3MSAqY2N3OwotCXN0cnVjdCBpcmIgKmlyYjsKLQotCS8qKgotCSAqIFJYL1RYIGJ1ZmZlciBzaXplCi0JICovCi0JaW50IG1heF9idWZzaXplOwotCi0JLyoqCi0JICogVHJhbnNtaXQvUmVjZWl2ZSBidWZmZXIuCi0JICovCi0Jc3RydWN0IHNrX2J1ZmYgKnRyYW5zX3NrYjsKLQotCS8qKgotCSAqIFVuaXZlcnNhbCBJL08gcXVldWUuCi0JICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBpb19xdWV1ZTsKLQotCS8qKgotCSAqIFRYIHF1ZXVlIGZvciBjb2xsZWN0aW5nIHNrYidzIGR1cmluZyBidXN5LgotCSAqLwotCXN0cnVjdCBza19idWZmX2hlYWQgY29sbGVjdF9xdWV1ZTsKLQotCS8qKgotCSAqIEFtb3VudCBvZiBkYXRhIGluIGNvbGxlY3RfcXVldWUuCi0JICovCi0JaW50IGNvbGxlY3RfbGVuOwotCi0JLyoqCi0JICogc3BpbmxvY2sgZm9yIGNvbGxlY3RfcXVldWUgYW5kIGNvbGxlY3RfbGVuCi0JICovCi0Jc3BpbmxvY2tfdCBjb2xsZWN0X2xvY2s7Ci0KLQkvKioKLQkgKiBUaW1lciBmb3IgZGV0ZWN0aW5nIHVucmVzcG9zaXZlCi0JICogSS9PIG9wZXJhdGlvbnMuCi0JICovCi0JZnNtX3RpbWVyIHRpbWVyOwotCi0JLyoqCi0JICogUmV0cnkgY291bnRlciBmb3IgbWlzYy4gb3BlcmF0aW9ucy4KLQkgKi8KLQlpbnQgcmV0cnk7Ci0KLQkvKioKLQkgKiBUaGUgZmluaXRlIHN0YXRlIG1hY2hpbmUgb2YgdGhpcyBjaGFubmVsCi0JICovCi0JZnNtX2luc3RhbmNlICpmc207Ci0KLQkvKioKLQkgKiBUaGUgY29ycmVzcG9uZGluZyBuZXRfZGV2aWNlIHRoaXMgY2hhbm5lbAotCSAqIGJlbG9uZ3MgdG8uCi0JICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQotCXN0cnVjdCBjdGNfcHJvZmlsZSBwcm9mOwotCi0JdW5zaWduZWQgY2hhciAqdHJhbnNfc2tiX2RhdGE7Ci0KLQlfX3UxNiBsb2dmbGFnczsKLX07Ci0KLSNkZWZpbmUgQ0hBTk5FTF9GTEFHU19SRUFEICAgICAgICAgICAgMAotI2RlZmluZSBDSEFOTkVMX0ZMQUdTX1dSSVRFICAgICAgICAgICAxCi0jZGVmaW5lIENIQU5ORUxfRkxBR1NfSU5VU0UgICAgICAgICAgIDIKLSNkZWZpbmUgQ0hBTk5FTF9GTEFHU19CVUZTSVpFX0NIQU5HRUQgNAotI2RlZmluZSBDSEFOTkVMX0ZMQUdTX0ZBSUxFRCAgICAgICAgICA4Ci0jZGVmaW5lIENIQU5ORUxfRkxBR1NfV0FJVElSUSAgICAgICAgMTYKLSNkZWZpbmUgQ0hBTk5FTF9GTEFHU19SV01BU0sgMQotI2RlZmluZSBDSEFOTkVMX0RJUkVDVElPTihmKSAoZiAmIENIQU5ORUxfRkxBR1NfUldNQVNLKQotCi0jZGVmaW5lIExPR19GTEFHX0lMTEVHQUxQS1QgIDEKLSNkZWZpbmUgTE9HX0ZMQUdfSUxMRUdBTFNJWkUgMgotI2RlZmluZSBMT0dfRkxBR19PVkVSUlVOICAgICA0Ci0jZGVmaW5lIExPR19GTEFHX05PTUVNICAgICAgIDgKLQotI2RlZmluZSBDVENfTE9HTEVWRUxfSU5GTyAgICAgMQotI2RlZmluZSBDVENfTE9HTEVWRUxfTk9USUNFICAgMgotI2RlZmluZSBDVENfTE9HTEVWRUxfV0FSTiAgICAgNAotI2RlZmluZSBDVENfTE9HTEVWRUxfRU1FUkcgICAgOAotI2RlZmluZSBDVENfTE9HTEVWRUxfRVJSICAgICAxNgotI2RlZmluZSBDVENfTE9HTEVWRUxfREVCVUcgICAzMgotI2RlZmluZSBDVENfTE9HTEVWRUxfQ1JJVCAgICA2NAotCi0jZGVmaW5lIENUQ19MT0dMRVZFTF9ERUZBVUxUIFwKLShDVENfTE9HTEVWRUxfSU5GTyB8IENUQ19MT0dMRVZFTF9OT1RJQ0UgfCBDVENfTE9HTEVWRUxfV0FSTiB8IENUQ19MT0dMRVZFTF9DUklUKQotCi0jZGVmaW5lIENUQ19MT0dMRVZFTF9NQVggICAgICgoQ1RDX0xPR0xFVkVMX0NSSVQ8PDEpLTEpCi0KLSNkZWZpbmUgY3RjX3ByX2RlYnVnKGZtdCwgYXJnLi4uKSBcCi1kbyB7IGlmIChsb2dsZXZlbCAmIENUQ19MT0dMRVZFTF9ERUJVRykgcHJpbnRrKEtFUk5fREVCVUcgZm10LCMjYXJnKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjdGNfcHJfaW5mbyhmbXQsIGFyZy4uLikgXAotZG8geyBpZiAobG9nbGV2ZWwgJiBDVENfTE9HTEVWRUxfSU5GTykgcHJpbnRrKEtFUk5fSU5GTyBmbXQsIyNhcmcpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGN0Y19wcl9ub3RpY2UoZm10LCBhcmcuLi4pIFwKLWRvIHsgaWYgKGxvZ2xldmVsICYgQ1RDX0xPR0xFVkVMX05PVElDRSkgcHJpbnRrKEtFUk5fTk9USUNFIGZtdCwjI2FyZyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgY3RjX3ByX3dhcm4oZm10LCBhcmcuLi4pIFwKLWRvIHsgaWYgKGxvZ2xldmVsICYgQ1RDX0xPR0xFVkVMX1dBUk4pIHByaW50ayhLRVJOX1dBUk5JTkcgZm10LCMjYXJnKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjdGNfcHJfZW1lcmcoZm10LCBhcmcuLi4pIFwKLWRvIHsgaWYgKGxvZ2xldmVsICYgQ1RDX0xPR0xFVkVMX0VNRVJHKSBwcmludGsoS0VSTl9FTUVSRyBmbXQsIyNhcmcpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGN0Y19wcl9lcnIoZm10LCBhcmcuLi4pIFwKLWRvIHsgaWYgKGxvZ2xldmVsICYgQ1RDX0xPR0xFVkVMX0VSUikgcHJpbnRrKEtFUk5fRVJSIGZtdCwjI2FyZyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgY3RjX3ByX2NyaXQoZm10LCBhcmcuLi4pIFwKLWRvIHsgaWYgKGxvZ2xldmVsICYgQ1RDX0xPR0xFVkVMX0NSSVQpIHByaW50ayhLRVJOX0NSSVQgZm10LCMjYXJnKTsgfSB3aGlsZSAoMCkKLQotc3RydWN0IGN0Y19wcml2IHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQl1bnNpZ25lZCBsb25nIHRidXN5OwotCS8qKgotCSAqIFRoZSBmaW5pdGUgc3RhdGUgbWFjaGluZSBvZiB0aGlzIGludGVyZmFjZS4KLQkgKi8KLQlmc21faW5zdGFuY2UgKmZzbTsKLQkvKioKLQkgKiBUaGUgcHJvdG9jb2wgb2YgdGhpcyBkZXZpY2UKLQkgKi8KLQlfX3UxNiBwcm90b2NvbDsKLSAJLyoqCi0gCSAqIFRpbWVyIGZvciByZXN0YXJ0aW5nIGFmdGVyIEkvTyBFcnJvcnMKLSAJICovCi0gCWZzbV90aW1lciAgICAgICAgICAgICAgIHJlc3RhcnRfdGltZXI7Ci0KLQlpbnQgYnVmZmVyX3NpemU7Ci0KLQlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbFsyXTsKLX07Ci0KLS8qKgotICogRGVmaW5pdGlvbiBvZiBvdXIgbGluayBsZXZlbCBoZWFkZXIuCi0gKi8KLXN0cnVjdCBsbF9oZWFkZXIgewotCV9fdTE2IGxlbmd0aDsKLQlfX3UxNiB0eXBlOwotCV9fdTE2IHVudXNlZDsKLX07Ci0jZGVmaW5lIExMX0hFQURFUl9MRU5HVEggKHNpemVvZihzdHJ1Y3QgbGxfaGVhZGVyKSkKLQotLyoqCi0gKiBDb21wYXRpYmlsaXR5IG1hY3JvcyBmb3IgYnVzeSBoYW5kbGluZwotICogb2YgbmV0d29yayBkZXZpY2VzLgotICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1jdGNfY2xlYXJfYnVzeShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKLXsKLQljbGVhcl9iaXQoMCwgJigoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT50YnVzeSkpOwotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50Ci1jdGNfdGVzdF9hbmRfc2V0X2J1c3koc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICYoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT50YnVzeSk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA4NzRhMTk5Li44Zjg3NmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdnB0ciA9IG5ldGRldl9wcml2KGNvbm4tPm5ldGRldik7CiAJaW50IHJjOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX2Z1bmNfXyk7CiAKIAlpZiAoIWNvbm4tPm5ldGRldikgewogCQlpdWN2X21lc3NhZ2VfcmVqZWN0KGNvbm4tPnBhdGgsIG1zZyk7CkBAIC03MTgsNyArNzE4LDcgQEAKIAlzdHJ1Y3QgbGxfaGVhZGVyIGhlYWRlcjsKIAlpbnQgcmM7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fZnVuY19fKTsKIAogCWlmIChjb25uICYmIGNvbm4tPm5ldGRldikKIAkJcHJpdnB0ciA9IG5ldGRldl9wcml2KGNvbm4tPm5ldGRldik7CkBAIC03OTksNyArNzk5LDcgQEAKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2cHRyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgcmM7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAogCWNvbm4tPnBhdGggPSBwYXRoOwogCXBhdGgtPm1zZ2xpbSA9IE5FVElVQ1ZfUVVFVUVMRU5fREVGQVVMVDsKQEAgLTgyMSw3ICs4MjEsNyBAQAogCXN0cnVjdCBpdWN2X2V2ZW50ICpldiA9IGFyZzsKIAlzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoID0gZXYtPmRhdGE7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAlpdWN2X3BhdGhfc2V2ZXIocGF0aCwgTlVMTCk7CiB9CiAKQEAgLTgzMSw3ICs4MzEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBjb25uLT5uZXRkZXY7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdnB0ciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAlmc21fZGVsdGltZXIoJmNvbm4tPnRpbWVyKTsKIAlmc21fbmV3c3RhdGUoZmksIENPTk5fU1RBVEVfSURMRSk7CiAJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSBjb25uLT5wYXRoLT5tc2dsaW07CkBAIC04NDIsNyArODQyLDcgQEAKIHsKIAlzdHJ1Y3QgaXVjdl9jb25uZWN0aW9uICpjb25uID0gYXJnOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAJZnNtX2RlbHRpbWVyKCZjb25uLT50aW1lcik7CiAJaXVjdl9wYXRoX3NldmVyKGNvbm4tPnBhdGgsIE5VTEwpOwogCWZzbV9uZXdzdGF0ZShmaSwgQ09OTl9TVEFURV9TVEFSVFdBSVQpOwpAQCAtODU0LDcgKzg1NCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGNvbm4tPm5ldGRldjsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2cHRyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19mdW5jX18pOwogCiAJZnNtX2RlbHRpbWVyKCZjb25uLT50aW1lcik7CiAJaXVjdl9wYXRoX3NldmVyKGNvbm4tPnBhdGgsIE5VTEwpOwpAQCAtODcwLDcgKzg3MCw3IEBACiAJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqY29ubiA9IGFyZzsKIAlpbnQgcmM7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAogCWZzbV9uZXdzdGF0ZShmaSwgQ09OTl9TVEFURV9TVEFSVFdBSVQpOwogCVBSSU5UX0RFQlVHKCIlcygnJXMnKTogY29ubmVjdGluZyAuLi5cbiIsCkBAIC05NDgsNyArOTQ4LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gY29ubi0+bmV0ZGV2OwogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXZwdHIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAKIAlmc21fZGVsdGltZXIoJmNvbm4tPnRpbWVyKTsKIAlmc21fbmV3c3RhdGUoZmksIENPTk5fU1RBVEVfU1RPUFBFRCk7CkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICAgKmRldiA9IGFyZzsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19mdW5jX18pOwogCiAJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUKTsKIAlmc21fZXZlbnQocHJpdnB0ci0+Y29ubi0+ZnNtLCBDT05OX0VWRU5UX1NUQVJULCBwcml2cHRyLT5jb25uKTsKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdnB0ciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGl1Y3ZfZXZlbnQgICBldjsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19mdW5jX18pOwogCiAJZXYuY29ubiA9IHByaXZwdHItPmNvbm47CiAKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgICAqZGV2ID0gYXJnOwogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShmaSkpIHsKIAkJY2FzZSBERVZfU1RBVEVfU1RBUlRXQUlUOgpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIHN0YXRpYyB2b2lkCiBkZXZfYWN0aW9uX2Nvbm5kb3duKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19mdW5jX18pOwogCiAJc3dpdGNoIChmc21fZ2V0c3RhdGUoZmkpKSB7CiAJCWNhc2UgREVWX1NUQVRFX1JVTk5JTkc6CkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByYzsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19mdW5jX18pOwogCS8qKgogCSAqIFNvbWUgc2FuaXR5IGNoZWNrcyAuLi4KIAkgKi8KQEAgLTEzNDQsNyArMTM0NCw3IEBACiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDUsIF9fZnVuY19fKTsKIAlyZXR1cm4gJnByaXYtPnN0YXRzOwogfQogCkBAIC0xMzYwLDcgKzEzNjAsNyBAQAogICovCiBzdGF0aWMgaW50IG5ldGl1Y3ZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IG5ld19tdHUpCiB7Ci0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAJaWYgKG5ld19tdHUgPCA1NzYgfHwgbmV3X210dSA+IE5FVElVQ1ZfTVRVX01BWCkgewogCQlJVUNWX0RCRl9URVhUKHNldHVwLCAyLCAiZ2l2ZW4gTVRVIG91dCBvZiB2YWxpZCByYW5nZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM3OCw3ICsxMzc4LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19mdW5jX18pOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuZXRpdWN2X3ByaW50bmFtZShwcml2LT5jb25uLT51c2VyaWQpKTsKIH0KIApAQCAtMTM5Myw3ICsxMzkzLDcgQEAKIAlpbnQgCWk7CiAJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqY3A7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAlpZiAoY291bnQgPiA5KSB7CiAJCVBSSU5UX1dBUk4oIm5ldGl1Y3Y6IHVzZXJuYW1lIHRvbyBsb25nICglZCkhXG4iLCAoaW50KSBjb3VudCk7CiAJCUlVQ1ZfREJGX1RFWFRfKHNldHVwLCAyLApAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAKIAkJCSAgICBjaGFyICpidWYpCiB7CXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPmNvbm4tPm1heF9idWZmc2l6ZSk7CiB9CiAKQEAgLTE0NjEsNyArMTQ2MSw3IEBACiAJY2hhciAgICAgICAgICplOwogCWludCAgICAgICAgICBiczE7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAlpZiAoY291bnQgPj0gMzkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGZzbV9nZXRzdGF0ZV9zdHIocHJpdi0+ZnNtKSk7CiB9CiAKQEAgLTE1MjQsNyArMTUyNCw3IEBACiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDUsIF9fZnVuY19fKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZnNtX2dldHN0YXRlX3N0cihwcml2LT5jb25uLT5mc20pKTsKIH0KIApAQCAtMTUzNSw3ICsxNTM1LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19mdW5jX18pOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgcHJpdi0+Y29ubi0+cHJvZi5tYXhtdWx0aSk7CiB9CiAKQEAgLTE1NDUsNyArMTU0NSw3IEBACiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fZnVuY19fKTsKIAlwcml2LT5jb25uLT5wcm9mLm1heG11bHRpID0gMDsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xNTU3LDcgKzE1NTcsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBwcml2LT5jb25uLT5wcm9mLm1heGNxdWV1ZSk7CiB9CiAKQEAgLTE1NjYsNyArMTU2Niw3IEBACiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fZnVuY19fKTsKIAlwcml2LT5jb25uLT5wcm9mLm1heGNxdWV1ZSA9IDA7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTU3OCw3ICsxNTc4LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19mdW5jX18pOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgcHJpdi0+Y29ubi0+cHJvZi5kb2lvc19zaW5nbGUpOwogfQogCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX2Z1bmNfXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi5kb2lvc19zaW5nbGUgPSAwOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTE1OTksNyArMTU5OSw3IEBACiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDUsIF9fZnVuY19fKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHByaXYtPmNvbm4tPnByb2YuZG9pb3NfbXVsdGkpOwogfQogCkBAIC0xNjA4LDcgKzE2MDgsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX2Z1bmNfXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi5kb2lvc19tdWx0aSA9IDA7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTYyMCw3ICsxNjIwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19mdW5jX18pOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgcHJpdi0+Y29ubi0+cHJvZi50eGxlbik7CiB9CiAKQEAgLTE2MjksNyArMTYyOSw3IEBACiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fZnVuY19fKTsKIAlwcml2LT5jb25uLT5wcm9mLnR4bGVuID0gMDsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xNjQxLDcgKzE2NDEsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBwcml2LT5jb25uLT5wcm9mLnR4X3RpbWUpOwogfQogCkBAIC0xNjUwLDcgKzE2NTAsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX2Z1bmNfXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi50eF90aW1lID0gMDsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xNjYyLDcgKzE2NjIsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBwcml2LT5jb25uLT5wcm9mLnR4X3BlbmRpbmcpOwogfQogCkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX2Z1bmNfXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi50eF9wZW5kaW5nID0gMDsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xNjgzLDcgKzE2ODMsNyBAQAogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCA1LCBfX2Z1bmNfXyk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBwcml2LT5jb25uLT5wcm9mLnR4X21heF9wZW5kaW5nKTsKIH0KIApAQCAtMTY5Miw3ICsxNjkyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19mdW5jX18pOwogCXByaXYtPmNvbm4tPnByb2YudHhfbWF4X3BlbmRpbmcgPSAwOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTE3MzIsNyArMTczMiw3IEBACiB7CiAJaW50IHJldDsKIAotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19mdW5jX18pOwogCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmbmV0aXVjdl9hdHRyX2dyb3VwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAKIAogc3RhdGljIHZvaWQgbmV0aXVjdl9yZW1vdmVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQogewotCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19mdW5jX18pOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmbmV0aXVjdl9zdGF0X2F0dHJfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmbmV0aXVjdl9hdHRyX2dyb3VwKTsKIH0KQEAgLTE3NTYsNyArMTc1Niw3IEBACiAJaW50IHJldDsKIAogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGV2KSB7CiAJCXNucHJpbnRmKGRldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgIm5ldCVzIiwgbmRldi0+bmFtZSk7CkBAIC0xNzkyLDcgKzE3OTIsNyBAQAogCiBzdGF0aWMgdm9pZCBuZXRpdWN2X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAluZXRpdWN2X3JlbW92ZV9maWxlcyhkZXYpOwogCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiB9CkBAIC0xODU3LDcgKzE4NTcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBuZXRpdWN2X3JlbW92ZV9jb25uZWN0aW9uKHN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAJd3JpdGVfbG9ja19iaCgmaXVjdl9jb25uZWN0aW9uX3J3bG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmY29ubi0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZpdWN2X2Nvbm5lY3Rpb25fcndsb2NrKTsKQEAgLTE4ODEsNyArMTg4MSw3IEBACiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdnB0ciA9IG5ldGRldl9wcml2KGRldik7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAogCWlmICghZGV2KQogCQlyZXR1cm47CkBAIC0xOTYzLDcgKzE5NjMsNyBAQAogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXY7CiAJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqY3A7CiAKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAlpZiAoY291bnQ+OSkgewogCQlQUklOVF9XQVJOKCJuZXRpdWN2OiB1c2VybmFtZSB0b28gbG9uZyAoJWQpIVxuIiwgKGludCljb3VudCk7CiAJCUlVQ1ZfREJGX1RFWFQoc2V0dXAsIDIsICJjb25uX3dyaXRlOiB0b28gbG9uZ1xuIik7CkBAIC0yMDQ4LDcgKzIwNDgsNyBAQAogCWNvbnN0IGNoYXIgKnA7CiAgICAgICAgIGludCBpOwogCi0gICAgICAgIElVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CisJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19mdW5jX18pOwogCiAgICAgICAgIGlmIChjb3VudCA+PSBJRk5BTVNJWikKICAgICAgICAgICAgICAgICBjb3VudCA9IElGTkFNU0laIC0gMTs7CkBAIC0yMTE2LDcgKzIxMTYsNyBAQAogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKKwlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX2Z1bmNfXyk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZpdWN2X2Nvbm5lY3Rpb25fbGlzdCkpIHsKIAkJY3AgPSBsaXN0X2VudHJ5KGl1Y3ZfY29ubmVjdGlvbl9saXN0Lm5leHQsCiAJCQkJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiwgbGlzdCk7CkBAIC0yMTQ2LDggKzIxNDYsNyBAQAogCXJjID0gaXVjdl9yZWdpc3RlcigmbmV0aXVjdl9oYW5kbGVyLCAxKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2RiZjsKLQlJVUNWX0RCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotCW5ldGl1Y3ZfZHJpdmVyLmdyb3VwcyA9IG5ldGl1Y3ZfZHJ2X2F0dHJfZ3JvdXBzOworCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fZnVuY19fKTsKIAlyYyA9IGRyaXZlcl9yZWdpc3RlcigmbmV0aXVjdl9kcml2ZXIpOwogCWlmIChyYykgewogCQlQUklOVF9FUlIoIk5FVElVQ1Y6IGZhaWxlZCB0byByZWdpc3RlciBkcml2ZXIuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNmI3MmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUzICswLDAgQEAKLSNpZm5kZWYgX19RRVRIX0hfXwotI2RlZmluZSBfX1FFVEhfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotCi0jaW5jbHVkZSA8bGludXgvaWZfdHIuaD4KLSNpbmNsdWRlIDxsaW51eC90cmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0KLSNpbmNsdWRlIDxuZXQvaXB2Ni5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPgotI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgotCi0KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotI2luY2x1ZGUgPGFzbS9xZGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgotI2luY2x1ZGUgPGFzbS9jY3dncm91cC5oPgotCi0jaW5jbHVkZSAicWV0aF9tcGMuaCIKLQotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLSNkZWZpbmUgUUVUSF9WRVJTSU9OX0lQVjYgCSI6SVB2NiIKLSNlbHNlCi0jZGVmaW5lIFFFVEhfVkVSU0lPTl9JUFY2IAkiIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotI2RlZmluZSBRRVRIX1ZFUlNJT05fVkxBTiAJIjpWTEFOIgotI2Vsc2UKLSNkZWZpbmUgUUVUSF9WRVJTSU9OX1ZMQU4gCSIiCi0jZW5kaWYKLQotLyoqCi0gKiBEZWJ1ZyBGYWNpbGl0eSBzdHVmZgotICovCi0jZGVmaW5lIFFFVEhfREJGX1NFVFVQX05BTUUgInFldGhfc2V0dXAiCi0jZGVmaW5lIFFFVEhfREJGX1NFVFVQX0xFTiA4Ci0jZGVmaW5lIFFFVEhfREJGX1NFVFVQX1BBR0VTIDgKLSNkZWZpbmUgUUVUSF9EQkZfU0VUVVBfTlJfQVJFQVMgMQotI2RlZmluZSBRRVRIX0RCRl9TRVRVUF9MRVZFTCA1Ci0KLSNkZWZpbmUgUUVUSF9EQkZfTUlTQ19OQU1FICJxZXRoX21pc2MiCi0jZGVmaW5lIFFFVEhfREJGX01JU0NfTEVOIDEyOAotI2RlZmluZSBRRVRIX0RCRl9NSVNDX1BBR0VTIDIKLSNkZWZpbmUgUUVUSF9EQkZfTUlTQ19OUl9BUkVBUyAxCi0jZGVmaW5lIFFFVEhfREJGX01JU0NfTEVWRUwgMgotCi0jZGVmaW5lIFFFVEhfREJGX0RBVEFfTkFNRSAicWV0aF9kYXRhIgotI2RlZmluZSBRRVRIX0RCRl9EQVRBX0xFTiA5NgotI2RlZmluZSBRRVRIX0RCRl9EQVRBX1BBR0VTIDgKLSNkZWZpbmUgUUVUSF9EQkZfREFUQV9OUl9BUkVBUyAxCi0jZGVmaW5lIFFFVEhfREJGX0RBVEFfTEVWRUwgMgotCi0jZGVmaW5lIFFFVEhfREJGX0NPTlRST0xfTkFNRSAicWV0aF9jb250cm9sIgotI2RlZmluZSBRRVRIX0RCRl9DT05UUk9MX0xFTiAyNTYKLSNkZWZpbmUgUUVUSF9EQkZfQ09OVFJPTF9QQUdFUyA4Ci0jZGVmaW5lIFFFVEhfREJGX0NPTlRST0xfTlJfQVJFQVMgMgotI2RlZmluZSBRRVRIX0RCRl9DT05UUk9MX0xFVkVMIDUKLQotI2RlZmluZSBRRVRIX0RCRl9UUkFDRV9OQU1FICJxZXRoX3RyYWNlIgotI2RlZmluZSBRRVRIX0RCRl9UUkFDRV9MRU4gOAotI2RlZmluZSBRRVRIX0RCRl9UUkFDRV9QQUdFUyA0Ci0jZGVmaW5lIFFFVEhfREJGX1RSQUNFX05SX0FSRUFTIDIKLSNkZWZpbmUgUUVUSF9EQkZfVFJBQ0VfTEVWRUwgMwotZXh0ZXJuIGRlYnVnX2luZm9fdCAqcWV0aF9kYmZfdHJhY2U7Ci0KLSNkZWZpbmUgUUVUSF9EQkZfU0VOU0VfTkFNRSAicWV0aF9zZW5zZSIKLSNkZWZpbmUgUUVUSF9EQkZfU0VOU0VfTEVOIDY0Ci0jZGVmaW5lIFFFVEhfREJGX1NFTlNFX1BBR0VTIDIKLSNkZWZpbmUgUUVUSF9EQkZfU0VOU0VfTlJfQVJFQVMgMQotI2RlZmluZSBRRVRIX0RCRl9TRU5TRV9MRVZFTCAyCi0KLSNkZWZpbmUgUUVUSF9EQkZfUUVSUl9OQU1FICJxZXRoX3FlcnIiCi0jZGVmaW5lIFFFVEhfREJGX1FFUlJfTEVOIDgKLSNkZWZpbmUgUUVUSF9EQkZfUUVSUl9QQUdFUyAyCi0jZGVmaW5lIFFFVEhfREJGX1FFUlJfTlJfQVJFQVMgMgotI2RlZmluZSBRRVRIX0RCRl9RRVJSX0xFVkVMIDIKLQotI2RlZmluZSBRRVRIX0RCRl9URVhUKG5hbWUsbGV2ZWwsdGV4dCkgXAotCWRvIHsgXAotCQlkZWJ1Z190ZXh0X2V2ZW50KHFldGhfZGJmXyMjbmFtZSxsZXZlbCx0ZXh0KTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUUVUSF9EQkZfSEVYKG5hbWUsbGV2ZWwsYWRkcixsZW4pIFwKLQlkbyB7IFwKLQkJZGVidWdfZXZlbnQocWV0aF9kYmZfIyNuYW1lLGxldmVsLCh2b2lkKikoYWRkciksbGVuKTsgXAotCX0gd2hpbGUgKDApCi0KLURFQ0xBUkVfUEVSX0NQVShjaGFyWzI1Nl0sIHFldGhfZGJmX3R4dF9idWYpOwotCi0jZGVmaW5lIFFFVEhfREJGX1RFWFRfKG5hbWUsbGV2ZWwsdGV4dC4uLikJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJY2hhciogZGJmX3R4dF9idWYgPSBnZXRfY3B1X3ZhcihxZXRoX2RiZl90eHRfYnVmKTsJXAotCQlzcHJpbnRmKGRiZl90eHRfYnVmLCB0ZXh0KTsJCQkgIAlcCi0JCWRlYnVnX3RleHRfZXZlbnQocWV0aF9kYmZfIyNuYW1lLGxldmVsLGRiZl90eHRfYnVmKTsJXAotCQlwdXRfY3B1X3ZhcihxZXRoX2RiZl90eHRfYnVmKTsJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUUVUSF9EQkZfU1BSSU5URihuYW1lLGxldmVsLHRleHQuLi4pIFwKLQlkbyB7IFwKLQkJZGVidWdfc3ByaW50Zl9ldmVudChxZXRoX2RiZl90cmFjZSwgbGV2ZWwsICMjdGV4dCApOyBcCi0JCWRlYnVnX3NwcmludGZfZXZlbnQocWV0aF9kYmZfdHJhY2UsIGxldmVsLCB0ZXh0ICk7IFwKLQl9IHdoaWxlICgwKQotCi0vKioKLSAqIHNvbWUgbW9yZSBkZWJ1ZyBzdHVmZgotICovCi0jZGVmaW5lIFBSSU5US19IRUFERVIgCSJxZXRoOiAiCi0KLSNkZWZpbmUgSEVYRFVNUDE2KGltcG9ydGFuY2UsaGVhZGVyLHB0cikgXAotUFJJTlRfIyNpbXBvcnRhbmNlKGhlYWRlciAiJTAyeCAlMDJ4ICUwMnggJTAyeCAgJTAyeCAlMDJ4ICUwMnggJTAyeCAgIiBcCi0JCSAgICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBcCi0JCSAgICooKChjaGFyKilwdHIpKSwqKCgoY2hhciopcHRyKSsxKSwqKCgoY2hhciopcHRyKSsyKSwgXAotCQkgICAqKCgoY2hhciopcHRyKSszKSwqKCgoY2hhciopcHRyKSs0KSwqKCgoY2hhciopcHRyKSs1KSwgXAotCQkgICAqKCgoY2hhciopcHRyKSs2KSwqKCgoY2hhciopcHRyKSs3KSwqKCgoY2hhciopcHRyKSs4KSwgXAotCQkgICAqKCgoY2hhciopcHRyKSs5KSwqKCgoY2hhciopcHRyKSsxMCksKigoKGNoYXIqKXB0cikrMTEpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzEyKSwqKCgoY2hhciopcHRyKSsxMyksIFwKLQkJICAgKigoKGNoYXIqKXB0cikrMTQpLCooKChjaGFyKilwdHIpKzE1KSk7IFwKLVBSSU5UXyMjaW1wb3J0YW5jZShoZWFkZXIgIiUwMnggJTAyeCAlMDJ4ICUwMnggICUwMnggJTAyeCAlMDJ4ICUwMnggICIgXAotCQkgICAiJTAyeCAlMDJ4ICUwMnggJTAyeCAgJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgXAotCQkgICAqKCgoY2hhciopcHRyKSsxNiksKigoKGNoYXIqKXB0cikrMTcpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzE4KSwqKCgoY2hhciopcHRyKSsxOSksIFwKLQkJICAgKigoKGNoYXIqKXB0cikrMjApLCooKChjaGFyKilwdHIpKzIxKSwgXAotCQkgICAqKCgoY2hhciopcHRyKSsyMiksKigoKGNoYXIqKXB0cikrMjMpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzI0KSwqKCgoY2hhciopcHRyKSsyNSksIFwKLQkJICAgKigoKGNoYXIqKXB0cikrMjYpLCooKChjaGFyKilwdHIpKzI3KSwgXAotCQkgICAqKCgoY2hhciopcHRyKSsyOCksKigoKGNoYXIqKXB0cikrMjkpLCBcCi0JCSAgICooKChjaGFyKilwdHIpKzMwKSwqKCgoY2hhciopcHRyKSszMSkpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXFldGhfaGV4X2R1bXAodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXNpemVfdCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChpICYmICEoaSAlIDE2KSkKLQkJCXByaW50aygiXG4iKTsKLQkJcHJpbnRrKCIlMDJ4ICIsICooYnVmICsgaSkpOwotCX0KLQlwcmludGsoIlxuIik7Ci19Ci0KLSNkZWZpbmUgU0VOU0VfQ09NTUFORF9SRUpFQ1RfQllURSAwCi0jZGVmaW5lIFNFTlNFX0NPTU1BTkRfUkVKRUNUX0ZMQUcgMHg4MAotI2RlZmluZSBTRU5TRV9SRVNFVFRJTkdfRVZFTlRfQllURSAxCi0jZGVmaW5lIFNFTlNFX1JFU0VUVElOR19FVkVOVF9GTEFHIDB4ODAKLQotLyoKLSAqIENvbW1vbiBJTyByZWxhdGVkIGRlZmluaXRpb25zCi0gKi8KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlICpxZXRoX3Jvb3RfZGV2OwotZXh0ZXJuIHN0cnVjdCBjY3dfZHJpdmVyIHFldGhfY2N3X2RyaXZlcjsKLWV4dGVybiBzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyIHFldGhfY2N3Z3JvdXBfZHJpdmVyOwotCi0jZGVmaW5lIENBUkRfUkRFVihjYXJkKSBjYXJkLT5yZWFkLmNjd2RldgotI2RlZmluZSBDQVJEX1dERVYoY2FyZCkgY2FyZC0+d3JpdGUuY2N3ZGV2Ci0jZGVmaW5lIENBUkRfRERFVihjYXJkKSBjYXJkLT5kYXRhLmNjd2RldgotI2RlZmluZSBDQVJEX0JVU19JRChjYXJkKSBjYXJkLT5nZGV2LT5kZXYuYnVzX2lkCi0jZGVmaW5lIENBUkRfUkRFVl9JRChjYXJkKSBjYXJkLT5yZWFkLmNjd2Rldi0+ZGV2LmJ1c19pZAotI2RlZmluZSBDQVJEX1dERVZfSUQoY2FyZCkgY2FyZC0+d3JpdGUuY2N3ZGV2LT5kZXYuYnVzX2lkCi0jZGVmaW5lIENBUkRfRERFVl9JRChjYXJkKSBjYXJkLT5kYXRhLmNjd2Rldi0+ZGV2LmJ1c19pZAotI2RlZmluZSBDSEFOTkVMX0lEKGNoYW5uZWwpIGNoYW5uZWwtPmNjd2Rldi0+ZGV2LmJ1c19pZAotCi0jZGVmaW5lIENBUkRfRlJPTV9DREVWKGNkZXYpIChzdHJ1Y3QgcWV0aF9jYXJkICopIFwKLQkJKChzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopY2Rldi0+ZGV2LmRyaXZlcl9kYXRhKVwKLQkJLT5kZXYuZHJpdmVyX2RhdGE7Ci0KLS8qKgotICogY2FyZCBzdHVmZgotICovCi1zdHJ1Y3QgcWV0aF9wZXJmX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgYnVmc19yZWM7Ci0JdW5zaWduZWQgaW50IGJ1ZnNfc2VudDsKLQotCXVuc2lnbmVkIGludCBza2JzX3NlbnRfcGFjazsKLQl1bnNpZ25lZCBpbnQgYnVmc19zZW50X3BhY2s7Ci0KLQl1bnNpZ25lZCBpbnQgc2NfZHBfcDsKLQl1bnNpZ25lZCBpbnQgc2NfcF9kcDsKLQkvKiBxZGlvX2lucHV0X2hhbmRsZXI6IG51bWJlciBvZiB0aW1lcyBjYWxsZWQsIHRpbWUgc3BlbnQgaW4gKi8KLQlfX3U2NCBpbmJvdW5kX3N0YXJ0X3RpbWU7Ci0JdW5zaWduZWQgaW50IGluYm91bmRfY250OwotCXVuc2lnbmVkIGludCBpbmJvdW5kX3RpbWU7Ci0JLyogcWV0aF9zZW5kX3BhY2tldDogbnVtYmVyIG9mIHRpbWVzIGNhbGxlZCwgdGltZSBzcGVudCBpbiAqLwotCV9fdTY0IG91dGJvdW5kX3N0YXJ0X3RpbWU7Ci0JdW5zaWduZWQgaW50IG91dGJvdW5kX2NudDsKLQl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfdGltZTsKLQkvKiBxZGlvX291dHB1dF9oYW5kbGVyOiBudW1iZXIgb2YgdGltZXMgY2FsbGVkLCB0aW1lIHNwZW50IGluICovCi0JX191NjQgb3V0Ym91bmRfaGFuZGxlcl9zdGFydF90aW1lOwotCXVuc2lnbmVkIGludCBvdXRib3VuZF9oYW5kbGVyX2NudDsKLQl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfaGFuZGxlcl90aW1lOwotCS8qIG51bWJlciBvZiBjYWxscyB0byBhbmQgdGltZSBzcGVudCBpbiBkb19RRElPIGZvciBpbmJvdW5kIHF1ZXVlICovCi0JX191NjQgaW5ib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7Ci0JdW5zaWduZWQgaW50IGluYm91bmRfZG9fcWRpb19jbnQ7Ci0JdW5zaWduZWQgaW50IGluYm91bmRfZG9fcWRpb190aW1lOwotCS8qIG51bWJlciBvZiBjYWxscyB0byBhbmQgdGltZSBzcGVudCBpbiBkb19RRElPIGZvciBvdXRib3VuZCBxdWV1ZXMgKi8KLQlfX3U2NCBvdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7Ci0JdW5zaWduZWQgaW50IG91dGJvdW5kX2RvX3FkaW9fY250OwotCXVuc2lnbmVkIGludCBvdXRib3VuZF9kb19xZGlvX3RpbWU7Ci0JLyogZWRkcCBkYXRhICovCi0JdW5zaWduZWQgaW50IGxhcmdlX3NlbmRfYnl0ZXM7Ci0JdW5zaWduZWQgaW50IGxhcmdlX3NlbmRfY250OwotCXVuc2lnbmVkIGludCBzZ19za2JzX3NlbnQ7Ci0JdW5zaWduZWQgaW50IHNnX2ZyYWdzX3NlbnQ7Ci0JLyogaW5pdGlhbCB2YWx1ZXMgd2hlbiBtZWFzdXJpbmcgc3RhcnRzICovCi0JdW5zaWduZWQgbG9uZyBpbml0aWFsX3J4X3BhY2tldHM7Ci0JdW5zaWduZWQgbG9uZyBpbml0aWFsX3R4X3BhY2tldHM7Ci0JLyogaW5ib3VuZCBzY2F0dGVyIGdhdGhlciBkYXRhICovCi0JdW5zaWduZWQgaW50IHNnX3NrYnNfcng7Ci0JdW5zaWduZWQgaW50IHNnX2ZyYWdzX3J4OwotCXVuc2lnbmVkIGludCBzZ19hbGxvY19wYWdlX3J4OwotfTsKLQotLyogUm91dGluZyBzdHVmZiAqLwotc3RydWN0IHFldGhfcm91dGluZ19pbmZvIHsKLQllbnVtIHFldGhfcm91dGluZ190eXBlcyB0eXBlOwotfTsKLQotLyogSVBBIHN0dWZmICovCi1zdHJ1Y3QgcWV0aF9pcGFfaW5mbyB7Ci0JX191MzIgc3VwcG9ydGVkX2Z1bmNzOwotCV9fdTMyIGVuYWJsZWRfZnVuY3M7Ci19OwotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9pc19pcGFfc3VwcG9ydGVkKHN0cnVjdCBxZXRoX2lwYV9pbmZvICppcGEsIGVudW0gcWV0aF9pcGFfZnVuY3MgZnVuYykKLXsKLQlyZXR1cm4gKGlwYS0+c3VwcG9ydGVkX2Z1bmNzICYgZnVuYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX2lzX2lwYV9lbmFibGVkKHN0cnVjdCBxZXRoX2lwYV9pbmZvICppcGEsIGVudW0gcWV0aF9pcGFfZnVuY3MgZnVuYykKLXsKLQlyZXR1cm4gKGlwYS0+c3VwcG9ydGVkX2Z1bmNzICYgaXBhLT5lbmFibGVkX2Z1bmNzICYgZnVuYyk7Ci19Ci0KLSNkZWZpbmUgcWV0aF9hZHBfc3VwcG9ydGVkKGMsZikgXAotCXFldGhfaXNfaXBhX3N1cHBvcnRlZCgmYy0+b3B0aW9ucy5hZHAsIGYpCi0jZGVmaW5lIHFldGhfYWRwX2VuYWJsZWQoYyxmKSBcCi0JcWV0aF9pc19pcGFfZW5hYmxlZCgmYy0+b3B0aW9ucy5hZHAsIGYpCi0jZGVmaW5lIHFldGhfaXNfc3VwcG9ydGVkKGMsZikgXAotCXFldGhfaXNfaXBhX3N1cHBvcnRlZCgmYy0+b3B0aW9ucy5pcGE0LCBmKQotI2RlZmluZSBxZXRoX2lzX2VuYWJsZWQoYyxmKSBcCi0JcWV0aF9pc19pcGFfZW5hYmxlZCgmYy0+b3B0aW9ucy5pcGE0LCBmKQotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLSNkZWZpbmUgcWV0aF9pc19zdXBwb3J0ZWQ2KGMsZikgXAotCXFldGhfaXNfaXBhX3N1cHBvcnRlZCgmYy0+b3B0aW9ucy5pcGE2LCBmKQotI2RlZmluZSBxZXRoX2lzX2VuYWJsZWQ2KGMsZikgXAotCXFldGhfaXNfaXBhX2VuYWJsZWQoJmMtPm9wdGlvbnMuaXBhNiwgZikKLSNlbHNlIC8qIENPTkZJR19RRVRIX0lQVjYgKi8KLSNkZWZpbmUgcWV0aF9pc19zdXBwb3J0ZWQ2KGMsZikgMAotI2RlZmluZSBxZXRoX2lzX2VuYWJsZWQ2KGMsZikgMAotI2VuZGlmIC8qIENPTkZJR19RRVRIX0lQVjYgKi8KLSNkZWZpbmUgcWV0aF9pc19pcGFmdW5jX3N1cHBvcnRlZChjLHByb3QsZikgXAotCSAocHJvdD09UUVUSF9QUk9UX0lQVjYpPyBxZXRoX2lzX3N1cHBvcnRlZDYoYyxmKTpxZXRoX2lzX3N1cHBvcnRlZChjLGYpCi0jZGVmaW5lIHFldGhfaXNfaXBhZnVuY19lbmFibGVkKGMscHJvdCxmKSBcCi0JIChwcm90PT1RRVRIX1BST1RfSVBWNik/IHFldGhfaXNfZW5hYmxlZDYoYyxmKTpxZXRoX2lzX2VuYWJsZWQoYyxmKQotCi0KLSNkZWZpbmUgUUVUSF9JRFhfRlVOQ19MRVZFTF9PU0FFX0VOQV9JUEFUIDB4MDEwMQotI2RlZmluZSBRRVRIX0lEWF9GVU5DX0xFVkVMX09TQUVfRElTX0lQQVQgMHgwMTAxCi0jZGVmaW5lIFFFVEhfSURYX0ZVTkNfTEVWRUxfSVFEX0VOQV9JUEFUIDB4NDEwOAotI2RlZmluZSBRRVRIX0lEWF9GVU5DX0xFVkVMX0lRRF9ESVNfSVBBVCAweDUxMDgKLQotI2RlZmluZSBRRVRIX01PREVMTElTVF9BUlJBWSBcCi0Je3sweDE3MzEsMHgwMSwweDE3MzIsMHgwMSxRRVRIX0NBUkRfVFlQRV9PU0FFLDEsIFwKLQlRRVRIX0lEWF9GVU5DX0xFVkVMX09TQUVfRU5BX0lQQVQsIFwKLQlRRVRIX0lEWF9GVU5DX0xFVkVMX09TQUVfRElTX0lQQVQsIFwKLQlRRVRIX01BWF9RVUVVRVMsMH0sIFwKLQl7MHgxNzMxLDB4MDUsMHgxNzMyLDB4MDUsUUVUSF9DQVJEX1RZUEVfSVFELDAsIFwKLQlRRVRIX0lEWF9GVU5DX0xFVkVMX0lRRF9FTkFfSVBBVCwgXAotCVFFVEhfSURYX0ZVTkNfTEVWRUxfSVFEX0RJU19JUEFULCBcCi0JUUVUSF9NQVhfUVVFVUVTLDB4MTAzfSwgXAotCXsweDE3MzEsMHgwNiwweDE3MzIsMHgwNixRRVRIX0NBUkRfVFlQRV9PU04sMCwgXAotCVFFVEhfSURYX0ZVTkNfTEVWRUxfT1NBRV9FTkFfSVBBVCwgXAotCVFFVEhfSURYX0ZVTkNfTEVWRUxfT1NBRV9ESVNfSVBBVCwgXAotCVFFVEhfTUFYX1FVRVVFUywwfSwgXAotCXswLDAsMCwwLDAsMCwwLDAsMH19Ci0KLSNkZWZpbmUgUUVUSF9SRUFMX0NBUkQJCTEKLSNkZWZpbmUgUUVUSF9WTEFOX0NBUkQJCTIKLSNkZWZpbmUgUUVUSF9CVUZTSVpFCSAJNDA5NgotCi0vKioKLSAqIHNvbWUgbW9yZSBkZWZzCi0gKi8KLSNkZWZpbmUgSUZfTkFNRV9MRU4JIAkxNgotI2RlZmluZSBRRVRIX1RYX1RJTUVPVVQJCTEwMCAqIEhaCi0jZGVmaW5lIFFFVEhfUkNEX1RJTUVPVVQJNjAgKiBIWgotI2RlZmluZSBRRVRIX0hFQURFUl9TSVpFCTMyCi0jZGVmaW5lIE1BWF9QT1JUTk8gCQkxNQotI2RlZmluZSBRRVRIX0ZBS0VfTExfTEVOX0VUSAlFVEhfSExFTgotI2RlZmluZSBRRVRIX0ZBS0VfTExfTEVOX1RSCShzaXplb2Yoc3RydWN0IHRyaF9oZHIpLVRSX01BWFJJRkxFTitzaXplb2Yoc3RydWN0IHRybGxjKSkKLSNkZWZpbmUgUUVUSF9GQUtFX0xMX1Y2X0FERFJfUE9TIDI0Ci0KLS8qSVB2NiBhZGRyZXNzIGF1dG9jb25maWd1cmF0aW9uIHN0dWZmKi8KLSNkZWZpbmUgVU5JUVVFX0lEX0lGX0NSRUFURV9BRERSX0ZBSUxFRCAweGZmZmUKLSNkZWZpbmUgVU5JUVVFX0lEX05PVF9CWV9DQVJEIAkJMHgxMDAwMAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBRRElPIHF1ZXVlIGFuZCBidWZmZXIgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFFFVEhfTUFYX1FVRVVFUyA0Ci0jZGVmaW5lIFFFVEhfSU5fQlVGX1NJWkVfREVGQVVMVCA2NTUzNgotI2RlZmluZSBRRVRIX0lOX0JVRl9DT1VOVF9ERUZBVUxUIDE2Ci0jZGVmaW5lIFFFVEhfSU5fQlVGX0NPVU5UX01JTiA4Ci0jZGVmaW5lIFFFVEhfSU5fQlVGX0NPVU5UX01BWCAxMjgKLSNkZWZpbmUgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpICgoY2FyZCktPnFkaW8uaW5fYnVmX3NpemUgPj4gMTIpCi0jZGVmaW5lIFFFVEhfSU5fQlVGX1JFUVVFVUVfVEhSRVNIT0xEKGNhcmQpIFwKLQkJKChjYXJkKS0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQgLyAyKQotCi0vKiBidWZmZXJzIHdlIGhhdmUgdG8gYmUgYmVoaW5kIGJlZm9yZSB3ZSBnZXQgYSBQQ0kgKi8KLSNkZWZpbmUgUUVUSF9QQ0lfVEhSRVNIT0xEX0EoY2FyZCkgKChjYXJkKS0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQrMSkKLS8qZW5xdWV1ZWQgZnJlZSBidWZmZXJzIGxlZnQgYmVmb3JlIHdlIGdldCBhIFBDSSovCi0jZGVmaW5lIFFFVEhfUENJX1RIUkVTSE9MRF9CKGNhcmQpIDAKLS8qbm90IHVzZWQgdW5sZXNzIHRoZSBtaWNyb2NvZGUgZ2V0cyBwYXRjaGVkKi8KLSNkZWZpbmUgUUVUSF9QQ0lfVElNRVJfVkFMVUUoY2FyZCkgMwotCi0jZGVmaW5lIFFFVEhfTUlOX0lOUFVUX1RIUkVTSE9MRCAxCi0jZGVmaW5lIFFFVEhfTUFYX0lOUFVUX1RIUkVTSE9MRCA1MDAKLSNkZWZpbmUgUUVUSF9NSU5fT1VUUFVUX1RIUkVTSE9MRCAxCi0jZGVmaW5lIFFFVEhfTUFYX09VVFBVVF9USFJFU0hPTEQgMzAwCi0KLS8qIHByaW9yaXR5IHF1ZWluZyAqLwotI2RlZmluZSBRRVRIX1BSSU9RX0RFRkFVTFQgUUVUSF9OT19QUklPX1FVRVVFSU5HCi0jZGVmaW5lIFFFVEhfREVGQVVMVF9RVUVVRSAgICAyCi0jZGVmaW5lIFFFVEhfTk9fUFJJT19RVUVVRUlORyAwCi0jZGVmaW5lIFFFVEhfUFJJT19RX0lOR19QUkVDICAxCi0jZGVmaW5lIFFFVEhfUFJJT19RX0lOR19UT1MgICAyCi0jZGVmaW5lIElQX1RPU19MT1dERUxBWSAweDEwCi0jZGVmaW5lIElQX1RPU19ISUdIVEhST1VHSFBVVCAweDA4Ci0jZGVmaW5lIElQX1RPU19ISUdIUkVMSUFCSUxJVFkgMHgwNAotI2RlZmluZSBJUF9UT1NfTk9USU1QT1JUQU5UIDB4MDIKLQotLyogUGFja2luZyAqLwotI2RlZmluZSBRRVRIX0xPV19XQVRFUk1BUktfUEFDSyAgMgotI2RlZmluZSBRRVRIX0hJR0hfV0FURVJNQVJLX1BBQ0sgNQotI2RlZmluZSBRRVRIX1dBVEVSTUFSS19QQUNLX0ZVWlogMQotCi0jZGVmaW5lIFFFVEhfSVBfSEVBREVSX1NJWkUgNDAKLQotLyogbGFyZ2UgcmVjZWl2ZSBzY2F0dGVyIGdhdGhlciBjb3B5IGJyZWFrICovCi0jZGVmaW5lIFFFVEhfUlhfU0dfQ0IgKFBBR0VfU0laRSA+PiAxKQotCi1zdHJ1Y3QgcWV0aF9oZHJfbGF5ZXIzIHsKLQlfX3U4ICBpZDsKLQlfX3U4ICBmbGFnczsKLQlfX3UxNiBpbmJvdW5kX2NoZWNrc3VtOyAvKlRTTzpfX3UxNiBzZXFubyAqLwotCV9fdTMyIHRva2VuOwkJLypUU086IF9fdTMyIHJlc2VydmVkICovCi0JX191MTYgbGVuZ3RoOwotCV9fdTggIHZsYW5fcHJpbzsKLQlfX3U4ICBleHRfZmxhZ3M7Ci0JX191MTYgdmxhbl9pZDsKLQlfX3UxNiBmcmFtZV9vZmZzZXQ7Ci0JX191OCAgZGVzdF9hZGRyWzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcWV0aF9oZHJfbGF5ZXIyIHsKLQlfX3U4IGlkOwotCV9fdTggZmxhZ3NbM107Ci0JX191OCBwb3J0X25vOwotCV9fdTggaGRyX2xlbmd0aDsKLQlfX3UxNiBwa3RfbGVuZ3RoOwotCV9fdTE2IHNlcV9ubzsKLQlfX3UxNiB2bGFuX2lkOwotCV9fdTMyIHJlc2VydmVkOwotCV9fdTggcmVzZXJ2ZWQyWzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcWV0aF9oZHJfb3NuIHsKLQlfX3U4IGlkOwotCV9fdTggcmVzZXJ2ZWQ7Ci0JX191MTYgc2VxX25vOwotCV9fdTE2IHJlc2VydmVkMjsKLQlfX3UxNiBjb250cm9sX2ZsYWdzOwotCV9fdTE2IHBkdV9sZW5ndGg7Ci0JX191OCByZXNlcnZlZDNbMThdOwotCV9fdTMyIGNjaWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHFldGhfaGRyIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBxZXRoX2hkcl9sYXllcjIgbDI7Ci0JCXN0cnVjdCBxZXRoX2hkcl9sYXllcjMgbDM7Ci0JCXN0cnVjdCBxZXRoX2hkcl9vc24gICAgb3NuOwotCX0gaGRyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qVENQIFNlZ21lbnRhdGlvbiBPZmZsb2FkIGhlYWRlciovCi1zdHJ1Y3QgcWV0aF9oZHJfZXh0X3RzbyB7Ci0gICAgICAgIF9fdTE2IGhkcl90b3RfbGVuOwotICAgICAgICBfX3U4ICBpbWJfaGRyX25vOwotICAgICAgICBfX3U4ICByZXNlcnZlZDsKLSAgICAgICAgX191OCAgaGRyX3R5cGU7Ci0gICAgICAgIF9fdTggIGhkcl92ZXJzaW9uOwotICAgICAgICBfX3UxNiBoZHJfbGVuOwotICAgICAgICBfX3UzMiBwYXlsb2FkX2xlbjsKLSAgICAgICAgX191MTYgbXNzOwotICAgICAgICBfX3UxNiBkZ19oZHJfbGVuOwotICAgICAgICBfX3U4ICBwYWRkaW5nWzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcWV0aF9oZHJfdHNvIHsKLSAgICAgICAgc3RydWN0IHFldGhfaGRyIGhkcjsgCS8qaGRyLT5oZHIubDMueHh4Ki8KLQlzdHJ1Y3QgcWV0aF9oZHJfZXh0X3RzbyBleHQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKiBmbGFncyBmb3IgcWV0aF9oZHIuZmxhZ3MgKi8KLSNkZWZpbmUgUUVUSF9IRFJfUEFTU1RIUlUgMHgxMAotI2RlZmluZSBRRVRIX0hEUl9JUFY2ICAgICAweDgwCi0jZGVmaW5lIFFFVEhfSERSX0NBU1RfTUFTSyAweDA3Ci1lbnVtIHFldGhfY2FzdF9mbGFncyB7Ci0JUUVUSF9DQVNUX1VOSUNBU1QgICA9IDB4MDYsCi0JUUVUSF9DQVNUX01VTFRJQ0FTVCA9IDB4MDQsCi0JUUVUSF9DQVNUX0JST0FEQ0FTVCA9IDB4MDUsCi0JUUVUSF9DQVNUX0FOWUNBU1QgICA9IDB4MDcsCi0JUUVUSF9DQVNUX05PQ0FTVCAgICA9IDB4MDAsCi19OwotCi1lbnVtIHFldGhfbGF5ZXIyX2ZyYW1lX2ZsYWdzIHsKLQlRRVRIX0xBWUVSMl9GTEFHX01VTFRJQ0FTVCA9IDB4MDEsCi0JUUVUSF9MQVlFUjJfRkxBR19CUk9BRENBU1QgPSAweDAyLAotCVFFVEhfTEFZRVIyX0ZMQUdfVU5JQ0FTVCAgID0gMHgwNCwKLQlRRVRIX0xBWUVSMl9GTEFHX1ZMQU4gICAgICA9IDB4MTAsCi19OwotCi1lbnVtIHFldGhfaGVhZGVyX2lkcyB7Ci0JUUVUSF9IRUFERVJfVFlQRV9MQVlFUjMgPSAweDAxLAotCVFFVEhfSEVBREVSX1RZUEVfTEFZRVIyID0gMHgwMiwKLQlRRVRIX0hFQURFUl9UWVBFX1RTTwk9IDB4MDMsCi0JUUVUSF9IRUFERVJfVFlQRV9PU04gICAgPSAweDA0LAotfTsKLS8qIGZsYWdzIGZvciBxZXRoX2hkci5leHRfZmxhZ3MgKi8KLSNkZWZpbmUgUUVUSF9IRFJfRVhUX1ZMQU5fRlJBTUUgICAgICAgMHgwMQotI2RlZmluZSBRRVRIX0hEUl9FWFRfVE9LRU5fSUQgICAgICAgICAweDAyCi0jZGVmaW5lIFFFVEhfSERSX0VYVF9JTkNMVURFX1ZMQU5fVEFHIDB4MDQKLSNkZWZpbmUgUUVUSF9IRFJfRVhUX1NSQ19NQUNfQUREUiAgICAgMHgwOAotI2RlZmluZSBRRVRIX0hEUl9FWFRfQ1NVTV9IRFJfUkVRICAgICAweDEwCi0jZGVmaW5lIFFFVEhfSERSX0VYVF9DU1VNX1RSQU5TUF9SRVEgIDB4MjAKLSNkZWZpbmUgUUVUSF9IRFJfRVhUX1VEUF9UU08gICAgICAgICAgMHg0MCAvKmJpdCBvZmYgZm9yIFRDUCovCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX2lzX2xhc3Rfc2JhbGUoc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlKQotewotCXJldHVybiAoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKTsKLX0KLQotZW51bSBxZXRoX3FkaW9fYnVmZmVyX3N0YXRlcyB7Ci0JLyoKLQkgKiBpbmJvdW5kOiByZWFkIG91dCBieSBkcml2ZXI7IG93bmVkIGJ5IGhhcmR3YXJlIGluIG9yZGVyIHRvIGJlIGZpbGxlZAotCSAqIG91dGJvdW5kOiBvd25lZCBieSBkcml2ZXIgaW4gb3JkZXIgdG8gYmUgZmlsbGVkCi0JICovCi0JUUVUSF9RRElPX0JVRl9FTVBUWSwKLQkvKgotCSAqIGluYm91bmQ6IGZpbGxlZCBieSBoYXJkd2FyZTsgb3duZWQgYnkgZHJpdmVyIGluIG9yZGVyIHRvIGJlIHJlYWQgb3V0Ci0JICogb3V0Ym91bmQ6IGZpbGxlZCBieSBkcml2ZXI7IG93bmVkIGJ5IGhhcmR3YXJlIGluIG9yZGVyIHRvIGJlIHNlbnQKLQkgKi8KLQlRRVRIX1FESU9fQlVGX1BSSU1FRCwKLX07Ci0KLWVudW0gcWV0aF9xZGlvX2luZm9fc3RhdGVzIHsKLQlRRVRIX1FESU9fVU5JTklUSUFMSVpFRCwKLQlRRVRIX1FESU9fQUxMT0NBVEVELAotCVFFVEhfUURJT19FU1RBQkxJU0hFRCwKLQlRRVRIX1FESU9fQ0xFQU5JTkcKLX07Ci0KLXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBpbml0X2xpc3Q7Ci0Jdm9pZCAqZWxlbWVudHNbUURJT19NQVhfRUxFTUVOVFNfUEVSX0JVRkZFUl07Ci19OwotCi1zdHJ1Y3QgcWV0aF9xZGlvX2J1ZmZlcl9wb29sIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5X2xpc3Q7Ci0JaW50IGJ1Zl9jb3VudDsKLX07Ci0KLXN0cnVjdCBxZXRoX3FkaW9fYnVmZmVyIHsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlcjsKLQl2b2xhdGlsZSBlbnVtIHFldGhfcWRpb19idWZmZXJfc3RhdGVzIHN0YXRlOwotCS8qIHRoZSBidWZmZXIgcG9vbCBlbnRyeSBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGlzIGJ1ZmZlciAqLwotCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICpwb29sX2VudHJ5OwotfTsKLQotc3RydWN0IHFldGhfcWRpb19xIHsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgcWRpb19idWZzW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCXN0cnVjdCBxZXRoX3FkaW9fYnVmZmVyIGJ1ZnNbUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JLyoKLQkgKiBidWZfdG9faW5pdCBtZWFucyAiYnVmZmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgZHJpdmVyIGFuZCBtdXN0Ci0JICogYmUgbWFkZSBhdmFpbGFibGUgZm9yIGhhcmR3YXJlIiAtPiBzdGF0ZSBpcyBzZXQgdG8gRU1QVFkKLQkgKi8KLQl2b2xhdGlsZSBpbnQgbmV4dF9idWZfdG9faW5pdDsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMjU2KSkpOwotCi0vKiBwb3NzaWJsZSB0eXBlcyBvZiBxZXRoIGxhcmdlX3NlbmQgc3VwcG9ydCAqLwotZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgewotCVFFVEhfTEFSR0VfU0VORF9OTywKLQlRRVRIX0xBUkdFX1NFTkRfRUREUCwKLQlRRVRIX0xBUkdFX1NFTkRfVFNPLAotfTsKLQotc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyIHsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlcjsKLQlhdG9taWNfdCBzdGF0ZTsKLQl2b2xhdGlsZSBpbnQgbmV4dF9lbGVtZW50X3RvX2ZpbGw7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGN0eF9saXN0OwotfTsKLQotc3RydWN0IHFldGhfY2FyZDsKLQotZW51bSBxZXRoX291dF9xX3N0YXRlcyB7Ci0gICAgICAgUUVUSF9PVVRfUV9VTkxPQ0tFRCwKLSAgICAgICBRRVRIX09VVF9RX0xPQ0tFRCwKLSAgICAgICBRRVRIX09VVF9RX0xPQ0tFRF9GTFVTSCwKLX07Ci0KLXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgewotCXN0cnVjdCBxZGlvX2J1ZmZlciBxZGlvX2J1ZnNbUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0Jc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyIGJ1ZnNbUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JaW50IHF1ZXVlX25vOwotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0JYXRvbWljX3Qgc3RhdGU7Ci0Jdm9sYXRpbGUgaW50IGRvX3BhY2s7Ci0JLyoKLQkgKiBpbmRleCBvZiBidWZmZXIgdG8gYmUgZmlsbGVkIGJ5IGRyaXZlcjsgc3RhdGUgRU1QVFkgb3IgUEFDS0lORwotCSAqLwotCXZvbGF0aWxlIGludCBuZXh0X2J1Zl90b19maWxsOwotCS8qCi0JICogbnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBhcmUgY3VycmVudGx5IGZpbGxlZCAoUFJJTUVEKQotCSAqIC0+IHRoZXNlIGJ1ZmZlcnMgYXJlIGhhcmR3YXJlLW93bmVkCi0JICovCi0JYXRvbWljX3QgdXNlZF9idWZmZXJzOwotCS8qIGluZGljYXRlcyB3aGV0aGVyIFBDSSBmbGFnIG11c3QgYmUgc2V0IChvciBpZiBvbmUgaXMgb3V0c3RhbmRpbmcpICovCi0JYXRvbWljX3Qgc2V0X3BjaV9mbGFnc19jb3VudDsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMjU2KSkpOwotCi1zdHJ1Y3QgcWV0aF9xZGlvX2luZm8gewotCWF0b21pY190IHN0YXRlOwotCS8qIGlucHV0ICovCi0Jc3RydWN0IHFldGhfcWRpb19xICppbl9xOwotCXN0cnVjdCBxZXRoX3FkaW9fYnVmZmVyX3Bvb2wgaW5fYnVmX3Bvb2w7Ci0Jc3RydWN0IHFldGhfcWRpb19idWZmZXJfcG9vbCBpbml0X3Bvb2w7Ci0JaW50IGluX2J1Zl9zaXplOwotCi0JLyogb3V0cHV0ICovCi0JaW50IG5vX291dF9xdWV1ZXM7Ci0Jc3RydWN0IHFldGhfcWRpb19vdXRfcSAqKm91dF9xczsKLQotCS8qIHByaW9yaXR5IHF1ZXVlaW5nICovCi0JaW50IGRvX3ByaW9fcXVldWVpbmc7Ci0JaW50IGRlZmF1bHRfb3V0X3F1ZXVlOwotfTsKLQotZW51bSBxZXRoX3NlbmRfZXJyb3JzIHsKLQlRRVRIX1NFTkRfRVJST1JfTk9ORSwKLQlRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFLAotCVFFVEhfU0VORF9FUlJPUl9SRVRSWSwKLQlRRVRIX1NFTkRfRVJST1JfS0lDS19JVCwKLX07Ci0KLSNkZWZpbmUgUUVUSF9FVEhfTUFDX1Y0ICAgICAgMHgwMTAwIC8qIGxpa2UgdjQgKi8KLSNkZWZpbmUgUUVUSF9FVEhfTUFDX1Y2ICAgICAgMHgzMzMzIC8qIGxpa2UgdjYgKi8KLS8qIHRyIG1jIG1hYyBpcyBsb25nZXIsIGJ1dCB0aGF0IHdpbGwgYmUgZW5vdWdoIHRvIGRldGVjdCBtYyBmcmFtZXMgKi8KLSNkZWZpbmUgUUVUSF9UUl9NQUNfTkMgICAgICAgMHhjMDAwIC8qIG5vbi1jYW5vbmljYWwgKi8KLSNkZWZpbmUgUUVUSF9UUl9NQUNfQyAgICAgICAgMHgwMzAwIC8qIGNhbm9uaWNhbCAqLwotCi0jZGVmaW5lIERFRkFVTFRfQUREX0hITEVOIDAKLSNkZWZpbmUgTUFYX0FERF9ISExFTiAxMDI0Ci0KLS8qKgotICogYnVmZmVyIHN0dWZmIGZvciByZWFkIGNoYW5uZWwKLSAqLwotI2RlZmluZSBRRVRIX0NNRF9CVUZGRVJfTk8JOAotCi0vKioKLSAqICBjaGFubmVsIHN0YXRlIG1hY2hpbmUKLSAqLwotZW51bSBxZXRoX2NoYW5uZWxfc3RhdGVzIHsKLQlDSF9TVEFURV9VUCwKLQlDSF9TVEFURV9ET1dOLAotCUNIX1NUQVRFX0FDVElWQVRJTkcsCi0JQ0hfU1RBVEVfSEFMVEVELAotCUNIX1NUQVRFX1NUT1BQRUQsCi0JQ0hfU1RBVEVfUkNELAotCUNIX1NUQVRFX1JDRF9ET05FLAotfTsKLS8qKgotICogY2FyZCBzdGF0ZSBtYWNoaW5lCi0gKi8KLWVudW0gcWV0aF9jYXJkX3N0YXRlcyB7Ci0JQ0FSRF9TVEFURV9ET1dOLAotCUNBUkRfU1RBVEVfSEFSRFNFVFVQLAotCUNBUkRfU1RBVEVfU09GVFNFVFVQLAotCUNBUkRfU1RBVEVfVVAsCi0JQ0FSRF9TVEFURV9SRUNPVkVSLAotfTsKLQotLyoqCi0gKiBQcm90b2NvbCB2ZXJzaW9ucwotICovCi1lbnVtIHFldGhfcHJvdF92ZXJzaW9ucyB7Ci0JUUVUSF9QUk9UX0lQVjQgPSAweDAwMDQsCi0JUUVUSF9QUk9UX0lQVjYgPSAweDAwMDYsCi19OwotCi1lbnVtIHFldGhfaXBfdHlwZXMgewotCVFFVEhfSVBfVFlQRV9OT1JNQUwsCi0JUUVUSF9JUF9UWVBFX1ZJUEEsCi0JUUVUSF9JUF9UWVBFX1JYSVAsCi0JUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMsCi19OwotCi1lbnVtIHFldGhfY21kX2J1ZmZlcl9zdGF0ZSB7Ci0JQlVGX1NUQVRFX0ZSRUUsCi0JQlVGX1NUQVRFX0xPQ0tFRCwKLQlCVUZfU1RBVEVfUFJPQ0VTU0VELAotfTsKLS8qKgotICogSVAgYWRkcmVzcyBhbmQgbXVsdGljYXN0IGxpc3QKLSAqLwotc3RydWN0IHFldGhfaXBhZGRyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwotCWVudW0gcWV0aF9pcF90eXBlcyB0eXBlOwotCWVudW0gcWV0aF9pcGFfc2V0ZGVsaXBfZmxhZ3Mgc2V0X2ZsYWdzOwotCWVudW0gcWV0aF9pcGFfc2V0ZGVsaXBfZmxhZ3MgZGVsX2ZsYWdzOwotCWludCBpc19tdWx0aWNhc3Q7Ci0Jdm9sYXRpbGUgaW50IHVzZXJzOwotCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvOwotCXVuc2lnbmVkIGNoYXIgbWFjW09TQV9BRERSX0xFTl07Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgaW50IGFkZHI7Ci0JCQl1bnNpZ25lZCBpbnQgbWFzazsKLQkJfSBhNDsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBpbjZfYWRkciBhZGRyOwotCQkJdW5zaWduZWQgaW50IHBmeGxlbjsKLQkJfSBhNjsKLQl9IHU7Ci19OwotCi1zdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKLQllbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bzsKLQljaGFyIGFkZHJbMTZdOwotCWludCBtYXNrX2JpdHM7Ci19OwotCi1zdHJ1Y3QgcWV0aF9pcGF0byB7Ci0JaW50IGVuYWJsZWQ7Ci0JaW50IGludmVydDQ7Ci0JaW50IGludmVydDY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwotfTsKLQotc3RydWN0IHFldGhfY2hhbm5lbDsKLQotc3RydWN0IHFldGhfY21kX2J1ZmZlciB7Ci0JZW51bSBxZXRoX2NtZF9idWZmZXJfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbDsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWludCByYzsKLQl2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgcWV0aF9jaGFubmVsICosIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKik7Ci19OwotCi0KLS8qKgotICogZGVmaW5pdGlvbiBvZiBhIHFldGggY2hhbm5lbCwgdXNlZCBmb3IgcmVhZCBhbmQgd3JpdGUKLSAqLwotc3RydWN0IHFldGhfY2hhbm5lbCB7Ci0JZW51bSBxZXRoX2NoYW5uZWxfc3RhdGVzIHN0YXRlOwotCXN0cnVjdCBjY3cxIGNjdzsKLQlzcGlubG9ja190IGlvYl9sb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxX3Rhc2tsZXQ7Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKLS8qY29tbWFuZCBidWZmZXIgZm9yIGNvbnRyb2wgZGF0YSovCi0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciBpb2JbUUVUSF9DTURfQlVGRkVSX05PXTsKLQlhdG9taWNfdCBpcnFfcGVuZGluZzsKLQl2b2xhdGlsZSBpbnQgaW9fYnVmX25vOwotCXZvbGF0aWxlIGludCBidWZfbm87Ci19OwotCi0vKioKLSAqICBPU0EgY2FyZCByZWxhdGVkIGRlZmluaXRpb25zCi0gKi8KLXN0cnVjdCBxZXRoX3Rva2VuIHsKLQlfX3UzMiBpc3N1ZXJfcm1fdzsKLQlfX3UzMiBpc3N1ZXJfcm1fcjsKLQlfX3UzMiBjbV9maWx0ZXJfdzsKLQlfX3UzMiBjbV9maWx0ZXJfcjsKLQlfX3UzMiBjbV9jb25uZWN0aW9uX3c7Ci0JX191MzIgY21fY29ubmVjdGlvbl9yOwotCV9fdTMyIHVscF9maWx0ZXJfdzsKLQlfX3UzMiB1bHBfZmlsdGVyX3I7Ci0JX191MzIgdWxwX2Nvbm5lY3Rpb25fdzsKLQlfX3UzMiB1bHBfY29ubmVjdGlvbl9yOwotfTsKLQotc3RydWN0IHFldGhfc2Vxbm8gewotCV9fdTMyIHRyYW5zX2hkcjsKLQlfX3UzMiBwZHVfaGRyOwotCV9fdTMyIHBkdV9oZHJfYWNrOwotCV9fdTE2IGlwYTsKLQlfX3UzMiBwa3Rfc2Vxbm87Ci19OwotCi1zdHJ1Y3QgcWV0aF9yZXBseSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKLQlpbnQgKCpjYWxsYmFjaykoc3RydWN0IHFldGhfY2FyZCAqLHN0cnVjdCBxZXRoX3JlcGx5ICosdW5zaWduZWQgbG9uZyk7Ci0gCXUzMiBzZXFubzsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlhdG9taWNfdCByZWNlaXZlZDsKLQlpbnQgcmM7Ci0Jdm9pZCAqcGFyYW07Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQlhdG9taWNfdCByZWZjbnQ7Ci19OwotCi0KLXN0cnVjdCBxZXRoX2NhcmRfYmxrdCB7Ci0JaW50IHRpbWVfdG90YWw7Ci0JaW50IGludGVyX3BhY2tldDsKLQlpbnQgaW50ZXJfcGFja2V0X2p1bWJvOwotfTsKLQotI2RlZmluZSBRRVRIX0JST0FEQ0FTVF9XSVRIX0VDSE8gICAgMHgwMQotI2RlZmluZSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8gMHgwMgotI2RlZmluZSBRRVRIX0xBWUVSMl9NQUNfUkVBRAkgICAgMHgwMQotI2RlZmluZSBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCAgMHgwMgotc3RydWN0IHFldGhfY2FyZF9pbmZvIHsKLQl1bnNpZ25lZCBzaG9ydCB1bml0X2FkZHIyOwotCXVuc2lnbmVkIHNob3J0IGN1bGE7Ci0JdW5zaWduZWQgc2hvcnQgY2hwaWQ7Ci0JX191MTYgZnVuY19sZXZlbDsKLQljaGFyIG1jbF9sZXZlbFtRRVRIX01DTF9MRU5HVEggKyAxXTsKLQlpbnQgZ3Vlc3RsYW47Ci0JaW50IG1hY19iaXRzOwotCWludCBwb3J0bmFtZV9yZXF1aXJlZDsKLQlpbnQgcG9ydG5vOwotCWNoYXIgcG9ydG5hbWVbOV07Ci0JZW51bSBxZXRoX2NhcmRfdHlwZXMgdHlwZTsKLQllbnVtIHFldGhfbGlua190eXBlcyBsaW5rX3R5cGU7Ci0JaW50IGlzX211bHRpY2FzdF9kaWZmZXJlbnQ7Ci0JaW50IGluaXRpYWxfbXR1OwotCWludCBtYXhfbXR1OwotCWludCBicm9hZGNhc3RfY2FwYWJsZTsKLQlpbnQgdW5pcXVlX2lkOwotCXN0cnVjdCBxZXRoX2NhcmRfYmxrdCBibGt0OwotCV9fdTMyIGNzdW1fbWFzazsKLQllbnVtIHFldGhfaXBhX3Byb21pc2NfbW9kZXMgcHJvbWlzY19tb2RlOwotfTsKLQotc3RydWN0IHFldGhfY2FyZF9vcHRpb25zIHsKLQlzdHJ1Y3QgcWV0aF9yb3V0aW5nX2luZm8gcm91dGU0OwotCXN0cnVjdCBxZXRoX2lwYV9pbmZvIGlwYTQ7Ci0Jc3RydWN0IHFldGhfaXBhX2luZm8gYWRwOyAvKkFkYXB0ZXIgcGFyYW1ldGVycyovCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCXN0cnVjdCBxZXRoX3JvdXRpbmdfaW5mbyByb3V0ZTY7Ci0Jc3RydWN0IHFldGhfaXBhX2luZm8gaXBhNjsKLSNlbmRpZiAvKiBRRVRIX0lQVjYgKi8KLQllbnVtIHFldGhfY2hlY2tzdW1fdHlwZXMgY2hlY2tzdW1fdHlwZTsKLQlpbnQgYnJvYWRjYXN0X21vZGU7Ci0JaW50IG1hY2FkZHJfbW9kZTsKLQlpbnQgZmFrZV9icm9hZGNhc3Q7Ci0JaW50IGFkZF9oaGxlbjsKLQlpbnQgZmFrZV9sbDsKLQlpbnQgbGF5ZXIyOwotCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQ7Ci0JaW50IHBlcmZvcm1hbmNlX3N0YXRzOwotCWludCByeF9zZ19jYjsKLX07Ci0KLS8qCi0gKiB0aHJlYWQgYml0cyBmb3IgcWV0aF9jYXJkIHRocmVhZCBtYXNrcwotICovCi1lbnVtIHFldGhfdGhyZWFkcyB7Ci0JUUVUSF9TRVRfSVBfVEhSRUFEICA9IDEsCi0JUUVUSF9SRUNPVkVSX1RIUkVBRCA9IDIsCi0JUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCA9IDQsCi19OwotCi1zdHJ1Y3QgcWV0aF9vc25faW5mbyB7Ci0JaW50ICgqYXNzaXN0X2NiKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKLQlpbnQgKCpkYXRhX2NiKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLX07Ci0KLXN0cnVjdCBxZXRoX2NhcmQgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQllbnVtIHFldGhfY2FyZF9zdGF0ZXMgc3RhdGU7Ci0JaW50IGxhbl9vbmxpbmU7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotLypoYXJkd2FyZSBhbmQgc3lzZnMgc3R1ZmYqLwotCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7Ci0Jc3RydWN0IHFldGhfY2hhbm5lbCByZWFkOwotCXN0cnVjdCBxZXRoX2NoYW5uZWwgd3JpdGU7Ci0Jc3RydWN0IHFldGhfY2hhbm5lbCBkYXRhOwotCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQotCXN0cnVjdCBxZXRoX2NhcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBxZXRoX3Rva2VuIHRva2VuOwotCXN0cnVjdCBxZXRoX3NlcW5vIHNlcW5vOwotCXN0cnVjdCBxZXRoX2NhcmRfb3B0aW9ucyBvcHRpb25zOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQlzcGlubG9ja190IHZsYW5sb2NrOwotCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuZ3JwOwotI2VuZGlmCi0Jc3RydWN0IHdvcmtfc3RydWN0IGtlcm5lbF90aHJlYWRfc3RhcnRlcjsKLQlzcGlubG9ja190IHRocmVhZF9tYXNrX2xvY2s7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0aHJlYWRfc3RhcnRfbWFzazsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRocmVhZF9hbGxvd2VkX21hc2s7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB0aHJlYWRfcnVubmluZ19tYXNrOwotCXNwaW5sb2NrX3QgaXBfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGlwX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaXBfdGJkX2xpc3Q7Ci0Jc3RydWN0IHFldGhfaXBhdG8gaXBhdG87Ci0Jc3RydWN0IGxpc3RfaGVhZCBjbWRfd2FpdGVyX2xpc3Q7Ci0JLyogUURJTyBidWZmZXIgaGFuZGxpbmcgKi8KLQlzdHJ1Y3QgcWV0aF9xZGlvX2luZm8gcWRpbzsKLQlzdHJ1Y3QgcWV0aF9wZXJmX3N0YXRzIHBlcmZfc3RhdHM7Ci0JaW50IHVzZV9oYXJkX3N0b3A7Ci0JY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgKm9yaWdfaGVhZGVyX29wczsKLQlzdHJ1Y3QgcWV0aF9vc25faW5mbyBvc25faW5mbzsKLQlhdG9taWNfdCBmb3JjZV9hbGxvY19za2I7Ci19OwotCi1zdHJ1Y3QgcWV0aF9jYXJkX2xpc3Rfc3RydWN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jcndsb2NrX3Qgcndsb2NrOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBxZXRoX2NhcmRfbGlzdF9zdHJ1Y3QgcWV0aF9jYXJkX2xpc3Q7Ci0KLS8qbm90aWZpZXIgbGlzdCAqLwotc3RydWN0IHFldGhfbm90aWZ5X2xpc3Rfc3RydWN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCWludCBzaWdudW07Ci19OwotZXh0ZXJuIHNwaW5sb2NrX3QgcWV0aF9ub3RpZnlfbG9jazsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHFldGhfbm90aWZ5X2xpc3Q7Ci0KLS8qc29tZSBoZWxwZXIgZnVuY3Rpb25zKi8KLQotI2RlZmluZSBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpICgoKGNhcmQpLT5kZXYpPyAoY2FyZCktPmRldi0+bmFtZSA6ICIiKQotCi1zdGF0aWMgaW5saW5lIF9fdTgKLXFldGhfZ2V0X2lwYV9hZHBfdHlwZShlbnVtIHFldGhfbGlua190eXBlcyBsaW5rX3R5cGUpCi17Ci0Jc3dpdGNoIChsaW5rX3R5cGUpIHsKLQljYXNlIFFFVEhfTElOS19UWVBFX0hTVFI6Ci0JCXJldHVybiAyOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAxOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCi1xZXRoX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBza2I7Ci0KLQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPj0gc2l6ZSkKLQkJcmV0dXJuIHNrYjsKLQluZXdfc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBzaXplKTsKLQlpZiAoIW5ld19za2IpIAotCQlQUklOVF9FUlIoIkNvdWxkIG5vdCByZWFsbG9jIGhlYWRyb29tIGZvciBxZXRoX2hkciAiCi0JCQkgICJvbiBpbnRlcmZhY2UgJXMiLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQlyZXR1cm4gbmV3X3NrYjsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCi1xZXRoX3Bza2JfdW5zaGFyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmkpCi17Ci0gICAgICAgIHN0cnVjdCBza19idWZmICpuc2tiOwotICAgICAgICBpZiAoIXNrYl9jbG9uZWQoc2tiKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2tiOwotICAgICAgICBuc2tiID0gc2tiX2NvcHkoc2tiLCBwcmkpOwotICAgICAgICByZXR1cm4gbnNrYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICoKLXFldGhfcHVzaF9za2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNpemUpCi17Ci0gICAgICAgIHZvaWQgKmhkcjsKLQotCWhkciA9ICh2b2lkICopIHNrYl9wdXNoKHNrYiwgc2l6ZSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHNhbml0eSBjaGVjaywgdGhlIExpbnV4IG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBzaG91bGQKLSAgICAgICAgICogbmV2ZXIgcHJlc2VudCB1cyBjYXNlcyBsaWtlIHRoaXMgb25lICh0aGUgcWRpbyBoZWFkZXIgc2l6ZSBwbHVzCi0gICAgICAgICAqIHRoZSBmaXJzdCA0MCBieXRlcyBvZiB0aGUgcGFrZXQgY3Jvc3MgYSA0ayBib3VuZGFyeSkKLSAgICAgICAgICovCi0gICAgICAgIGlmICgoKCh1bnNpZ25lZCBsb25nKSBoZHIpICYgKH4oUEFHRV9TSVpFIC0gMSkpKSAhPQotICAgICAgICAgICAgKCgodW5zaWduZWQgbG9uZykgaGRyICsgc2l6ZSArCi0gICAgICAgICAgICAgIFFFVEhfSVBfSEVBREVSX1NJWkUpICYgKH4oUEFHRV9TSVpFIC0gMSkpKSkgewotICAgICAgICAgICAgICAgIFBSSU5UX0VSUigiTWlzYWxpZ25lZCBwYWNrZXQgb24gaW50ZXJmYWNlICVzLiBEaXNjYXJkZWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGhkcjsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9nZXRfaGxlbihfX3U4IGxpbmtfdHlwZSkKLXsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0Jc3dpdGNoIChsaW5rX3R5cGUpIHsKLQljYXNlIFFFVEhfTElOS19UWVBFX0hTVFI6Ci0JY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSOgotCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pICsgVFJfSExFTjsKLQlkZWZhdWx0OgotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSArIFZMQU5fRVRIX0hMRU47Ci0jZWxzZQotCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pICsgRVRIX0hMRU47Ci0jZW5kaWYKLQl9Ci0jZWxzZSAgLyogQ09ORklHX1FFVEhfSVBWNiAqLwotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pICsgVkxBTl9ITEVOOwotI2Vsc2UKLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pOwotI2VuZGlmCi0jZW5kaWYgLyogQ09ORklHX1FFVEhfSVBWNiAqLwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0Ci1xZXRoX2dldF9uZXRkZXZfZmxhZ3Moc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIgJiYKLQkgICAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TQUUpKQotCQlyZXR1cm4gMDsKLQlzd2l0Y2ggKGNhcmQtPmluZm8udHlwZSkgewotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgotCQlyZXR1cm4gSUZGX05PQVJQOwotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLSNlbHNlCi0JZGVmYXVsdDoKLQkJcmV0dXJuIElGRl9OT0FSUDsKLSNlbmRpZgotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXFldGhfZ2V0X2luaXRpYWxfbXR1X2Zvcl9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKiBjYXJkKQotewotCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKSB7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9VTktOT1dOOgotCQlyZXR1cm4gMTUwMDsKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQkJcmV0dXJuIGNhcmQtPmluZm8ubWF4X210dTsKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6Ci0JCXN3aXRjaCAoY2FyZC0+aW5mby5saW5rX3R5cGUpIHsKLQkJY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgotCQljYXNlIFFFVEhfTElOS19UWVBFX0xBTkVfVFI6Ci0JCQlyZXR1cm4gMjAwMDsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAxNDkyOwotCQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE1MDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9nZXRfbWF4X210dV9mb3JfY2FyZChpbnQgY2FyZHR5cGUpCi17Ci0Jc3dpdGNoIChjYXJkdHlwZSkgewotCi0JY2FzZSBRRVRIX0NBUkRfVFlQRV9VTktOT1dOOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKLQkJcmV0dXJuIDYxNDQwOwotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlyZXR1cm4gNTczNDQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE1MDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9nZXRfbXR1X291dF9vZl9tcGMoaW50IGNhcmR0eXBlKQotewotCXN3aXRjaCAoY2FyZHR5cGUpIHsKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQkJcmV0dXJuIDE7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9nZXRfbXR1X291dG9mX2ZyYW1lc2l6ZShpbnQgZnJhbWVzaXplKQotewotCXN3aXRjaCAoZnJhbWVzaXplKSB7Ci0JY2FzZSAweDQwMDA6Ci0JCXJldHVybiA4MTkyOwotCWNhc2UgMHg2MDAwOgotCQlyZXR1cm4gMTYzODQ7Ci0JY2FzZSAweGEwMDA6Ci0JCXJldHVybiAzMjc2ODsKLQljYXNlIDB4ZmZmZjoKLQkJcmV0dXJuIDU3MzQ0OwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXFldGhfbXR1X2lzX3ZhbGlkKHN0cnVjdCBxZXRoX2NhcmQgKiBjYXJkLCBpbnQgbXR1KQotewotCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKSB7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0FFOgotCQlyZXR1cm4gKChtdHUgPj0gNTc2KSAmJiAobXR1IDw9IDYxNDQwKSk7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6Ci0JCXJldHVybiAoKG10dSA+PSA1NzYpICYmCi0JCQkobXR1IDw9IGNhcmQtPmluZm8ubWF4X210dSArIDQwOTYgLSAzMikpOwotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX2dldF9hcnBoZHJfdHlwZShpbnQgY2FyZHR5cGUsIGludCBsaW5rdHlwZSkKLXsKLQlzd2l0Y2ggKGNhcmR0eXBlKSB7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0FFOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgotCQlzd2l0Y2ggKGxpbmt0eXBlKSB7Ci0JCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKLQkJY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgotCQkJcmV0dXJuIEFSUEhSRF9JRUVFODAyX1RSOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIEFSUEhSRF9FVEhFUjsKLQkJfQotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCWRlZmF1bHQ6Ci0JCXJldHVybiBBUlBIUkRfRVRIRVI7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9nZXRfbWljcm9zKHZvaWQpCi17Ci0JcmV0dXJuIChpbnQpIChnZXRfY2xvY2soKSA+PiAxMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX2dldF9xZGlvX3FfZm9ybWF0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0Jc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQkJcmV0dXJuIDI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9pc3hkaWdpdChjaGFyICogYnVmKQotewotCXdoaWxlICgqYnVmKSB7Ci0JCWlmICghaXN4ZGlnaXQoKmJ1ZisrKSkKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1xZXRoX2lwYWRkcjRfdG9fc3RyaW5nKGNvbnN0IF9fdTggKmFkZHIsIGNoYXIgKmJ1ZikKLXsKLQlzcHJpbnRmKGJ1ZiwgIiVpLiVpLiVpLiVpIiwgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX3N0cmluZ190b19pcGFkZHI0KGNvbnN0IGNoYXIgKmJ1ZiwgX191OCAqYWRkcikKLXsKLQlpbnQgY291bnQgPSAwLCByYyA9IDA7Ci0JaW50IGluWzRdOwotCWNoYXIgYzsKLQotCXJjID0gc3NjYW5mKGJ1ZiwgIiV1LiV1LiV1LiV1JWMiLAotCQkgICAgJmluWzBdLCAmaW5bMV0sICZpblsyXSwgJmluWzNdLCAmYyk7Ci0JaWYgKHJjICE9IDQgJiYgKHJjICE9IDUgfHwgYyAhPSAnXG4nKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNDsgY291bnQrKykgewotCQlpZiAoaW5bY291bnRdID4gMjU1KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWFkZHJbY291bnRdID0gaW5bY291bnRdOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1xZXRoX2lwYWRkcjZfdG9fc3RyaW5nKGNvbnN0IF9fdTggKmFkZHIsIGNoYXIgKmJ1ZikKLXsKLQlzcHJpbnRmKGJ1ZiwgIiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4IgotCQkgICAgICI6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMngiLAotCQkgICAgIGFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sIGFkZHJbM10sCi0JCSAgICAgYWRkcls0XSwgYWRkcls1XSwgYWRkcls2XSwgYWRkcls3XSwKLQkJICAgICBhZGRyWzhdLCBhZGRyWzldLCBhZGRyWzEwXSwgYWRkclsxMV0sCi0JCSAgICAgYWRkclsxMl0sIGFkZHJbMTNdLCBhZGRyWzE0XSwgYWRkclsxNV0pOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9zdHJpbmdfdG9faXBhZGRyNihjb25zdCBjaGFyICpidWYsIF9fdTggKmFkZHIpCi17Ci0JY29uc3QgY2hhciAqZW5kLCAqZW5kX3RtcCwgKnN0YXJ0OwotCV9fdTE2ICppbjsKLSAgICAgICAgY2hhciBudW1bNV07Ci0gICAgICAgIGludCBudW0yLCBjbnQsIG91dCwgZm91bmQsIHNhdmVfY250OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbl90bXBbOF0gPSB7MCwgfTsKLQotCWNudCA9IG91dCA9IGZvdW5kID0gc2F2ZV9jbnQgPSBudW0yID0gMDsKLSAgICAgICAgZW5kID0gc3RhcnQgPSBidWY7Ci0JaW4gPSAoX191MTYgKikgYWRkcjsKLQltZW1zZXQoaW4sIDAsIDE2KTsKLSAgICAgICAgd2hpbGUgKCplbmQpIHsKLSAgICAgICAgICAgICAgICBlbmQgPSBzdHJjaHIoc3RhcnQsJzonKTsKLSAgICAgICAgICAgICAgICBpZiAoZW5kID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGJ1ZiArIHN0cmxlbihidWYpOwotCQkJaWYgKChlbmRfdG1wID0gc3RyY2hyKHN0YXJ0LCAnXG4nKSkgIT0gTlVMTCkKLQkJCQllbmQgPSBlbmRfdG1wOwotCQkJb3V0ID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChlbmQgLSBzdGFydCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChudW0sIDAsIDUpOwotCQkJaWYgKChlbmQgLSBzdGFydCkgPiA0KQotCQkJCXJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG51bSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCWlmICghcWV0aF9pc3hkaWdpdChudW0pKQotCQkJCXJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgc3NjYW5mKHN0YXJ0LCAiJXgiLCAmbnVtMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3RtcFtzYXZlX2NudCsrXSA9IG51bTI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluW2NudCsrXSA9IG51bTI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkJaWYgKGZvdW5kKQotCQkJCXJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOwotCQl9Ci0JCXN0YXJ0ID0gKytlbmQ7Ci0gICAgICAgIH0KLQlpZiAoY250ICsgc2F2ZV9jbnQgPiA4KQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgY250ID0gNzsKLQl3aGlsZSAoc2F2ZV9jbnQpCi0gICAgICAgICAgICAgICAgaW5bY250LS1dID0gaW5fdG1wWy0tc2F2ZV9jbnRdOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXFldGhfaXBhZGRyX3RvX3N0cmluZyhlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywgY29uc3QgX191OCAqYWRkciwKLQkJICAgICAgY2hhciAqYnVmKQotewotCWlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCkKLQkJcWV0aF9pcGFkZHI0X3RvX3N0cmluZyhhZGRyLCBidWYpOwotCWVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KQotCQlxZXRoX2lwYWRkcjZfdG9fc3RyaW5nKGFkZHIsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX3N0cmluZ190b19pcGFkZHIoY29uc3QgY2hhciAqYnVmLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKLQkJICAgICAgX191OCAqYWRkcikKLXsKLQlpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpCi0JCXJldHVybiBxZXRoX3N0cmluZ190b19pcGFkZHI0KGJ1ZiwgYWRkcik7Ci0JZWxzZSBpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpCi0JCXJldHVybiBxZXRoX3N0cmluZ190b19pcGFkZHI2KGJ1ZiwgYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotZXh0ZXJuIGludAotcWV0aF9zZXRyb3V0aW5nX3Y0KHN0cnVjdCBxZXRoX2NhcmQgKik7Ci1leHRlcm4gaW50Ci1xZXRoX3NldHJvdXRpbmdfdjYoc3RydWN0IHFldGhfY2FyZCAqKTsKLQotZXh0ZXJuIGludAotcWV0aF9hZGRfaXBhdG9fZW50cnkoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqKTsKLQotZXh0ZXJuIHZvaWQKLXFldGhfZGVsX2lwYXRvX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsIHU4ICosIGludCk7Ci0KLWV4dGVybiBpbnQKLXFldGhfYWRkX3ZpcGEoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucywgY29uc3QgdTggKik7Ci0KLWV4dGVybiB2b2lkCi1xZXRoX2RlbF92aXBhKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsIGNvbnN0IHU4ICopOwotCi1leHRlcm4gaW50Ci1xZXRoX2FkZF9yeGlwKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsIGNvbnN0IHU4ICopOwotCi1leHRlcm4gdm9pZAotcWV0aF9kZWxfcnhpcChzdHJ1Y3QgcWV0aF9jYXJkICosIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zLCBjb25zdCB1OCAqKTsKLQotZXh0ZXJuIGludAotcWV0aF9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50ICk7Ci0KLWV4dGVybiBpbnQKLXFldGhfbm90aWZpZXJfdW5yZWdpc3RlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiApOwotCi1leHRlcm4gdm9pZAotcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShzdHJ1Y3QgcWV0aF9jYXJkICopOwotCi1leHRlcm4gaW50Ci1xZXRoX3JlYWxsb2NfYnVmZmVyX3Bvb2woc3RydWN0IHFldGhfY2FyZCAqLCBpbnQpOwotCi1leHRlcm4gaW50Ci1xZXRoX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMpOwotCi1leHRlcm4gdm9pZAotcWV0aF9maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2hkciAqLAotCQkgc3RydWN0IHNrX2J1ZmYgKiwgaW50LCBpbnQpOwotZXh0ZXJuIHZvaWQKLXFldGhfZmx1c2hfYnVmZmVycyhzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosIGludCwgaW50LCBpbnQpOwotCi1leHRlcm4gaW50Ci1xZXRoX29zbl9hc3Npc3Qoc3RydWN0IG5ldF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQpOwotCi1leHRlcm4gaW50Ci1xZXRoX29zbl9yZWdpc3Rlcih1bnNpZ25lZCBjaGFyICpyZWFkX2Rldl9ubywKLSAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKiosCi0gICAgICAgICAgICAgICAgIGludCAoKmFzc2lzdF9jYikoc3RydWN0IG5ldF9kZXZpY2UgKiwgdm9pZCAqKSwKLSAgICAgICAgICAgICAgICAgaW50ICgqZGF0YV9jYikoc3RydWN0IHNrX2J1ZmYgKikpOwotCi1leHRlcm4gdm9pZAotcWV0aF9vc25fZGVyZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLQotI2VuZGlmIC8qIF9fUUVUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZjRmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCkBAIC0wLDAgKzEsOTA1IEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKKyAqICAgIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPiwKKyAqCQkgRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+LAorICoJCSBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAorICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KKyAqLworCisjaWZuZGVmIF9fUUVUSF9DT1JFX0hfXworI2RlZmluZSBfX1FFVEhfQ09SRV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdHIuaD4KKyNpbmNsdWRlIDxsaW51eC90cmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPgorI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgorCisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL3FkaW8uaD4KKyNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CisKKyNpbmNsdWRlICJxZXRoX2NvcmVfbXBjLmgiCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInFldGgiCisKKy8qKgorICogRGVidWcgRmFjaWxpdHkgc3R1ZmYKKyAqLworZW51bSBxZXRoX2RiZl9uYW1lcyB7CisJUUVUSF9EQkZfU0VUVVAsCisJUUVUSF9EQkZfUUVSUiwKKwlRRVRIX0RCRl9UUkFDRSwKKwlRRVRIX0RCRl9NU0csCisJUUVUSF9EQkZfU0VOU0UsCisJUUVUSF9EQkZfTUlTQywKKwlRRVRIX0RCRl9DVFJMLAorCVFFVEhfREJGX0lORk9TCS8qIG11c3QgYmUgbGFzdCBlbGVtZW50ICovCit9OworCitzdHJ1Y3QgcWV0aF9kYmZfaW5mbyB7CisJY2hhciBuYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CisJaW50IHBhZ2VzOworCWludCBhcmVhczsKKwlpbnQgbGVuOworCWludCBsZXZlbDsKKwlzdHJ1Y3QgZGVidWdfdmlldyAqdmlldzsKKwlkZWJ1Z19pbmZvX3QgKmlkOworfTsKKworI2RlZmluZSBRRVRIX0RCRl9DVFJMX0xFTiAyNTYKKworI2RlZmluZSBRRVRIX0RCRl9URVhUKG5hbWUsIGxldmVsLCB0ZXh0KSBcCisJZGVidWdfdGV4dF9ldmVudChxZXRoX2RiZltRRVRIX0RCRl8jI25hbWVdLmlkLCBsZXZlbCwgdGV4dCkKKworI2RlZmluZSBRRVRIX0RCRl9IRVgobmFtZSwgbGV2ZWwsIGFkZHIsIGxlbikgXAorCWRlYnVnX2V2ZW50KHFldGhfZGJmW1FFVEhfREJGXyMjbmFtZV0uaWQsIGxldmVsLCAodm9pZCAqKShhZGRyKSwgbGVuKQorCisjZGVmaW5lIFFFVEhfREJGX01FU1NBR0UobGV2ZWwsIHRleHQuLi4pIFwKKwlkZWJ1Z19zcHJpbnRmX2V2ZW50KHFldGhfZGJmW1FFVEhfREJGX01TR10uaWQsIGxldmVsLCB0ZXh0KQorCisjZGVmaW5lIFFFVEhfREJGX1RFWFRfKG5hbWUsIGxldmVsLCB0ZXh0Li4uKSBcCisJZG8geyBcCisJCWlmIChxZXRoX2RiZl9wYXNzZXMocWV0aF9kYmZbUUVUSF9EQkZfIyNuYW1lXS5pZCwgbGV2ZWwpKSB7IFwKKwkJCWNoYXIgKmRiZl90eHRfYnVmID0gXAorCQkJCWdldF9jcHVfdmFyKFFFVEhfREJGX1RYVF9CVUYpOyBcCisJCQlzcHJpbnRmKGRiZl90eHRfYnVmLCB0ZXh0KTsgXAorCQkJZGVidWdfdGV4dF9ldmVudChxZXRoX2RiZltRRVRIX0RCRl8jI25hbWVdLmlkLCBcCisJCQkJCWxldmVsLCBkYmZfdHh0X2J1Zik7IFwKKwkJCXB1dF9jcHVfdmFyKFFFVEhfREJGX1RYVF9CVUYpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKy8qIEFsbG93IHRvIHNvcnQgb3V0IGxvdyBkZWJ1ZyBsZXZlbHMgZWFybHkgdG8gYXZvaWQgd2FzdGVkIHNwcmludHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHFldGhfZGJmX3Bhc3NlcyhkZWJ1Z19pbmZvX3QgKmRiZl9ncnAsIGludCBsZXZlbCkKK3sKKwlyZXR1cm4gKGxldmVsIDw9IGRiZl9ncnAtPmxldmVsKTsKK30KKworLyoqCisgKiBzb21lIG1vcmUgZGVidWcgc3R1ZmYKKyAqLworI2RlZmluZSBQUklOVEtfSEVBREVSCSJxZXRoOiAiCisKKyNkZWZpbmUgU0VOU0VfQ09NTUFORF9SRUpFQ1RfQllURSAwCisjZGVmaW5lIFNFTlNFX0NPTU1BTkRfUkVKRUNUX0ZMQUcgMHg4MAorI2RlZmluZSBTRU5TRV9SRVNFVFRJTkdfRVZFTlRfQllURSAxCisjZGVmaW5lIFNFTlNFX1JFU0VUVElOR19FVkVOVF9GTEFHIDB4ODAKKworLyoKKyAqIENvbW1vbiBJTyByZWxhdGVkIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgQ0FSRF9SREVWKGNhcmQpIGNhcmQtPnJlYWQuY2N3ZGV2CisjZGVmaW5lIENBUkRfV0RFVihjYXJkKSBjYXJkLT53cml0ZS5jY3dkZXYKKyNkZWZpbmUgQ0FSRF9EREVWKGNhcmQpIGNhcmQtPmRhdGEuY2N3ZGV2CisjZGVmaW5lIENBUkRfQlVTX0lEKGNhcmQpIGNhcmQtPmdkZXYtPmRldi5idXNfaWQKKyNkZWZpbmUgQ0FSRF9SREVWX0lEKGNhcmQpIGNhcmQtPnJlYWQuY2N3ZGV2LT5kZXYuYnVzX2lkCisjZGVmaW5lIENBUkRfV0RFVl9JRChjYXJkKSBjYXJkLT53cml0ZS5jY3dkZXYtPmRldi5idXNfaWQKKyNkZWZpbmUgQ0FSRF9EREVWX0lEKGNhcmQpIGNhcmQtPmRhdGEuY2N3ZGV2LT5kZXYuYnVzX2lkCisjZGVmaW5lIENIQU5ORUxfSUQoY2hhbm5lbCkgY2hhbm5lbC0+Y2N3ZGV2LT5kZXYuYnVzX2lkCisKKy8qKgorICogY2FyZCBzdHVmZgorICovCitzdHJ1Y3QgcWV0aF9wZXJmX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgYnVmc19yZWM7CisJdW5zaWduZWQgaW50IGJ1ZnNfc2VudDsKKworCXVuc2lnbmVkIGludCBza2JzX3NlbnRfcGFjazsKKwl1bnNpZ25lZCBpbnQgYnVmc19zZW50X3BhY2s7CisKKwl1bnNpZ25lZCBpbnQgc2NfZHBfcDsKKwl1bnNpZ25lZCBpbnQgc2NfcF9kcDsKKwkvKiBxZGlvX2lucHV0X2hhbmRsZXI6IG51bWJlciBvZiB0aW1lcyBjYWxsZWQsIHRpbWUgc3BlbnQgaW4gKi8KKwlfX3U2NCBpbmJvdW5kX3N0YXJ0X3RpbWU7CisJdW5zaWduZWQgaW50IGluYm91bmRfY250OworCXVuc2lnbmVkIGludCBpbmJvdW5kX3RpbWU7CisJLyogcWV0aF9zZW5kX3BhY2tldDogbnVtYmVyIG9mIHRpbWVzIGNhbGxlZCwgdGltZSBzcGVudCBpbiAqLworCV9fdTY0IG91dGJvdW5kX3N0YXJ0X3RpbWU7CisJdW5zaWduZWQgaW50IG91dGJvdW5kX2NudDsKKwl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfdGltZTsKKwkvKiBxZGlvX291dHB1dF9oYW5kbGVyOiBudW1iZXIgb2YgdGltZXMgY2FsbGVkLCB0aW1lIHNwZW50IGluICovCisJX191NjQgb3V0Ym91bmRfaGFuZGxlcl9zdGFydF90aW1lOworCXVuc2lnbmVkIGludCBvdXRib3VuZF9oYW5kbGVyX2NudDsKKwl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfaGFuZGxlcl90aW1lOworCS8qIG51bWJlciBvZiBjYWxscyB0byBhbmQgdGltZSBzcGVudCBpbiBkb19RRElPIGZvciBpbmJvdW5kIHF1ZXVlICovCisJX191NjQgaW5ib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CisJdW5zaWduZWQgaW50IGluYm91bmRfZG9fcWRpb19jbnQ7CisJdW5zaWduZWQgaW50IGluYm91bmRfZG9fcWRpb190aW1lOworCS8qIG51bWJlciBvZiBjYWxscyB0byBhbmQgdGltZSBzcGVudCBpbiBkb19RRElPIGZvciBvdXRib3VuZCBxdWV1ZXMgKi8KKwlfX3U2NCBvdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CisJdW5zaWduZWQgaW50IG91dGJvdW5kX2RvX3FkaW9fY250OworCXVuc2lnbmVkIGludCBvdXRib3VuZF9kb19xZGlvX3RpbWU7CisJLyogZWRkcCBkYXRhICovCisJdW5zaWduZWQgaW50IGxhcmdlX3NlbmRfYnl0ZXM7CisJdW5zaWduZWQgaW50IGxhcmdlX3NlbmRfY250OworCXVuc2lnbmVkIGludCBzZ19za2JzX3NlbnQ7CisJdW5zaWduZWQgaW50IHNnX2ZyYWdzX3NlbnQ7CisJLyogaW5pdGlhbCB2YWx1ZXMgd2hlbiBtZWFzdXJpbmcgc3RhcnRzICovCisJdW5zaWduZWQgbG9uZyBpbml0aWFsX3J4X3BhY2tldHM7CisJdW5zaWduZWQgbG9uZyBpbml0aWFsX3R4X3BhY2tldHM7CisJLyogaW5ib3VuZCBzY2F0dGVyIGdhdGhlciBkYXRhICovCisJdW5zaWduZWQgaW50IHNnX3NrYnNfcng7CisJdW5zaWduZWQgaW50IHNnX2ZyYWdzX3J4OworCXVuc2lnbmVkIGludCBzZ19hbGxvY19wYWdlX3J4OworfTsKKworLyogUm91dGluZyBzdHVmZiAqLworc3RydWN0IHFldGhfcm91dGluZ19pbmZvIHsKKwllbnVtIHFldGhfcm91dGluZ190eXBlcyB0eXBlOworfTsKKworLyogSVBBIHN0dWZmICovCitzdHJ1Y3QgcWV0aF9pcGFfaW5mbyB7CisJX191MzIgc3VwcG9ydGVkX2Z1bmNzOworCV9fdTMyIGVuYWJsZWRfZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2lzX2lwYV9zdXBwb3J0ZWQoc3RydWN0IHFldGhfaXBhX2luZm8gKmlwYSwKKwkJZW51bSBxZXRoX2lwYV9mdW5jcyBmdW5jKQoreworCXJldHVybiAoaXBhLT5zdXBwb3J0ZWRfZnVuY3MgJiBmdW5jKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcWV0aF9pc19pcGFfZW5hYmxlZChzdHJ1Y3QgcWV0aF9pcGFfaW5mbyAqaXBhLAorCQllbnVtIHFldGhfaXBhX2Z1bmNzIGZ1bmMpCit7CisJcmV0dXJuIChpcGEtPnN1cHBvcnRlZF9mdW5jcyAmIGlwYS0+ZW5hYmxlZF9mdW5jcyAmIGZ1bmMpOworfQorCisjZGVmaW5lIHFldGhfYWRwX3N1cHBvcnRlZChjLCBmKSBcCisJcWV0aF9pc19pcGFfc3VwcG9ydGVkKCZjLT5vcHRpb25zLmFkcCwgZikKKyNkZWZpbmUgcWV0aF9hZHBfZW5hYmxlZChjLCBmKSBcCisJcWV0aF9pc19pcGFfZW5hYmxlZCgmYy0+b3B0aW9ucy5hZHAsIGYpCisjZGVmaW5lIHFldGhfaXNfc3VwcG9ydGVkKGMsIGYpIFwKKwlxZXRoX2lzX2lwYV9zdXBwb3J0ZWQoJmMtPm9wdGlvbnMuaXBhNCwgZikKKyNkZWZpbmUgcWV0aF9pc19lbmFibGVkKGMsIGYpIFwKKwlxZXRoX2lzX2lwYV9lbmFibGVkKCZjLT5vcHRpb25zLmlwYTQsIGYpCisjZGVmaW5lIHFldGhfaXNfc3VwcG9ydGVkNihjLCBmKSBcCisJcWV0aF9pc19pcGFfc3VwcG9ydGVkKCZjLT5vcHRpb25zLmlwYTYsIGYpCisjZGVmaW5lIHFldGhfaXNfZW5hYmxlZDYoYywgZikgXAorCXFldGhfaXNfaXBhX2VuYWJsZWQoJmMtPm9wdGlvbnMuaXBhNiwgZikKKyNkZWZpbmUgcWV0aF9pc19pcGFmdW5jX3N1cHBvcnRlZChjLCBwcm90LCBmKSBcCisJICgocHJvdCA9PSBRRVRIX1BST1RfSVBWNikgPyBcCisJCXFldGhfaXNfc3VwcG9ydGVkNihjLCBmKSA6IHFldGhfaXNfc3VwcG9ydGVkKGMsIGYpKQorI2RlZmluZSBxZXRoX2lzX2lwYWZ1bmNfZW5hYmxlZChjLCBwcm90LCBmKSBcCisJICgocHJvdCA9PSBRRVRIX1BST1RfSVBWNikgPyBcCisJCXFldGhfaXNfZW5hYmxlZDYoYywgZikgOiBxZXRoX2lzX2VuYWJsZWQoYywgZikpCisKKyNkZWZpbmUgUUVUSF9JRFhfRlVOQ19MRVZFTF9PU0FFX0VOQV9JUEFUIDB4MDEwMQorI2RlZmluZSBRRVRIX0lEWF9GVU5DX0xFVkVMX09TQUVfRElTX0lQQVQgMHgwMTAxCisjZGVmaW5lIFFFVEhfSURYX0ZVTkNfTEVWRUxfSVFEX0VOQV9JUEFUIDB4NDEwOAorI2RlZmluZSBRRVRIX0lEWF9GVU5DX0xFVkVMX0lRRF9ESVNfSVBBVCAweDUxMDgKKworI2RlZmluZSBRRVRIX01PREVMTElTVF9BUlJBWSBcCisJe3sweDE3MzEsIDB4MDEsIDB4MTczMiwgMHgwMSwgUUVUSF9DQVJEX1RZUEVfT1NBRSwgMSwgXAorCVFFVEhfSURYX0ZVTkNfTEVWRUxfT1NBRV9FTkFfSVBBVCwgXAorCVFFVEhfSURYX0ZVTkNfTEVWRUxfT1NBRV9ESVNfSVBBVCwgXAorCVFFVEhfTUFYX1FVRVVFUywgMH0sIFwKKwl7MHgxNzMxLCAweDA1LCAweDE3MzIsIDB4MDUsIFFFVEhfQ0FSRF9UWVBFX0lRRCwgMCwgXAorCVFFVEhfSURYX0ZVTkNfTEVWRUxfSVFEX0VOQV9JUEFULCBcCisJUUVUSF9JRFhfRlVOQ19MRVZFTF9JUURfRElTX0lQQVQsIFwKKwlRRVRIX01BWF9RVUVVRVMsIDB4MTAzfSwgXAorCXsweDE3MzEsIDB4MDYsIDB4MTczMiwgMHgwNiwgUUVUSF9DQVJEX1RZUEVfT1NOLCAwLCBcCisJUUVUSF9JRFhfRlVOQ19MRVZFTF9PU0FFX0VOQV9JUEFULCBcCisJUUVUSF9JRFhfRlVOQ19MRVZFTF9PU0FFX0RJU19JUEFULCBcCisJUUVUSF9NQVhfUVVFVUVTLCAwfSwgXAorCXswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9CisKKyNkZWZpbmUgUUVUSF9SRUFMX0NBUkQJCTEKKyNkZWZpbmUgUUVUSF9WTEFOX0NBUkQJCTIKKyNkZWZpbmUgUUVUSF9CVUZTSVpFCQk0MDk2CisKKy8qKgorICogc29tZSBtb3JlIGRlZnMKKyAqLworI2RlZmluZSBRRVRIX1RYX1RJTUVPVVQJCTEwMCAqIEhaCisjZGVmaW5lIFFFVEhfUkNEX1RJTUVPVVQJNjAgKiBIWgorI2RlZmluZSBRRVRIX0hFQURFUl9TSVpFCTMyCisjZGVmaW5lIFFFVEhfTUFYX1BPUlROTwkJMTUKKworLypJUHY2IGFkZHJlc3MgYXV0b2NvbmZpZ3VyYXRpb24gc3R1ZmYqLworI2RlZmluZSBVTklRVUVfSURfSUZfQ1JFQVRFX0FERFJfRkFJTEVEIDB4ZmZmZQorI2RlZmluZSBVTklRVUVfSURfTk9UX0JZX0NBUkQJCTB4MTAwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUURJTyBxdWV1ZSBhbmQgYnVmZmVyIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBRRVRIX01BWF9RVUVVRVMgNAorI2RlZmluZSBRRVRIX0lOX0JVRl9TSVpFX0RFRkFVTFQgNjU1MzYKKyNkZWZpbmUgUUVUSF9JTl9CVUZfQ09VTlRfREVGQVVMVCAxNgorI2RlZmluZSBRRVRIX0lOX0JVRl9DT1VOVF9NSU4gOAorI2RlZmluZSBRRVRIX0lOX0JVRl9DT1VOVF9NQVggMTI4CisjZGVmaW5lIFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAoKGNhcmQpLT5xZGlvLmluX2J1Zl9zaXplID4+IDEyKQorI2RlZmluZSBRRVRIX0lOX0JVRl9SRVFVRVVFX1RIUkVTSE9MRChjYXJkKSBcCisJCSgoY2FyZCktPnFkaW8uaW5fYnVmX3Bvb2wuYnVmX2NvdW50IC8gMikKKworLyogYnVmZmVycyB3ZSBoYXZlIHRvIGJlIGJlaGluZCBiZWZvcmUgd2UgZ2V0IGEgUENJICovCisjZGVmaW5lIFFFVEhfUENJX1RIUkVTSE9MRF9BKGNhcmQpICgoY2FyZCktPnFkaW8uaW5fYnVmX3Bvb2wuYnVmX2NvdW50KzEpCisvKmVucXVldWVkIGZyZWUgYnVmZmVycyBsZWZ0IGJlZm9yZSB3ZSBnZXQgYSBQQ0kqLworI2RlZmluZSBRRVRIX1BDSV9USFJFU0hPTERfQihjYXJkKSAwCisvKm5vdCB1c2VkIHVubGVzcyB0aGUgbWljcm9jb2RlIGdldHMgcGF0Y2hlZCovCisjZGVmaW5lIFFFVEhfUENJX1RJTUVSX1ZBTFVFKGNhcmQpIDMKKworI2RlZmluZSBRRVRIX01JTl9JTlBVVF9USFJFU0hPTEQgMQorI2RlZmluZSBRRVRIX01BWF9JTlBVVF9USFJFU0hPTEQgNTAwCisjZGVmaW5lIFFFVEhfTUlOX09VVFBVVF9USFJFU0hPTEQgMQorI2RlZmluZSBRRVRIX01BWF9PVVRQVVRfVEhSRVNIT0xEIDMwMAorCisvKiBwcmlvcml0eSBxdWVpbmcgKi8KKyNkZWZpbmUgUUVUSF9QUklPUV9ERUZBVUxUIFFFVEhfTk9fUFJJT19RVUVVRUlORworI2RlZmluZSBRRVRIX0RFRkFVTFRfUVVFVUUgICAgMgorI2RlZmluZSBRRVRIX05PX1BSSU9fUVVFVUVJTkcgMAorI2RlZmluZSBRRVRIX1BSSU9fUV9JTkdfUFJFQyAgMQorI2RlZmluZSBRRVRIX1BSSU9fUV9JTkdfVE9TICAgMgorI2RlZmluZSBJUF9UT1NfTE9XREVMQVkgMHgxMAorI2RlZmluZSBJUF9UT1NfSElHSFRIUk9VR0hQVVQgMHgwOAorI2RlZmluZSBJUF9UT1NfSElHSFJFTElBQklMSVRZIDB4MDQKKyNkZWZpbmUgSVBfVE9TX05PVElNUE9SVEFOVCAweDAyCisKKy8qIFBhY2tpbmcgKi8KKyNkZWZpbmUgUUVUSF9MT1dfV0FURVJNQVJLX1BBQ0sgIDIKKyNkZWZpbmUgUUVUSF9ISUdIX1dBVEVSTUFSS19QQUNLIDUKKyNkZWZpbmUgUUVUSF9XQVRFUk1BUktfUEFDS19GVVpaIDEKKworI2RlZmluZSBRRVRIX0lQX0hFQURFUl9TSVpFIDQwCisKKy8qIGxhcmdlIHJlY2VpdmUgc2NhdHRlciBnYXRoZXIgY29weSBicmVhayAqLworI2RlZmluZSBRRVRIX1JYX1NHX0NCIChQQUdFX1NJWkUgPj4gMSkKKworc3RydWN0IHFldGhfaGRyX2xheWVyMyB7CisJX191OCAgaWQ7CisJX191OCAgZmxhZ3M7CisJX191MTYgaW5ib3VuZF9jaGVja3N1bTsgLypUU086X191MTYgc2Vxbm8gKi8KKwlfX3UzMiB0b2tlbjsJCS8qVFNPOiBfX3UzMiByZXNlcnZlZCAqLworCV9fdTE2IGxlbmd0aDsKKwlfX3U4ICB2bGFuX3ByaW87CisJX191OCAgZXh0X2ZsYWdzOworCV9fdTE2IHZsYW5faWQ7CisJX191MTYgZnJhbWVfb2Zmc2V0OworCV9fdTggIGRlc3RfYWRkclsxNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHFldGhfaGRyX2xheWVyMiB7CisJX191OCBpZDsKKwlfX3U4IGZsYWdzWzNdOworCV9fdTggcG9ydF9ubzsKKwlfX3U4IGhkcl9sZW5ndGg7CisJX191MTYgcGt0X2xlbmd0aDsKKwlfX3UxNiBzZXFfbm87CisJX191MTYgdmxhbl9pZDsKKwlfX3UzMiByZXNlcnZlZDsKKwlfX3U4IHJlc2VydmVkMlsxNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHFldGhfaGRyX29zbiB7CisJX191OCBpZDsKKwlfX3U4IHJlc2VydmVkOworCV9fdTE2IHNlcV9ubzsKKwlfX3UxNiByZXNlcnZlZDI7CisJX191MTYgY29udHJvbF9mbGFnczsKKwlfX3UxNiBwZHVfbGVuZ3RoOworCV9fdTggcmVzZXJ2ZWQzWzE4XTsKKwlfX3UzMiBjY2lkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBxZXRoX2hkciB7CisJdW5pb24geworCQlzdHJ1Y3QgcWV0aF9oZHJfbGF5ZXIyIGwyOworCQlzdHJ1Y3QgcWV0aF9oZHJfbGF5ZXIzIGwzOworCQlzdHJ1Y3QgcWV0aF9oZHJfb3NuICAgIG9zbjsKKwl9IGhkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKlRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCBoZWFkZXIqLworc3RydWN0IHFldGhfaGRyX2V4dF90c28geworCV9fdTE2IGhkcl90b3RfbGVuOworCV9fdTggIGltYl9oZHJfbm87CisJX191OCAgcmVzZXJ2ZWQ7CisJX191OCAgaGRyX3R5cGU7CisJX191OCAgaGRyX3ZlcnNpb247CisJX191MTYgaGRyX2xlbjsKKwlfX3UzMiBwYXlsb2FkX2xlbjsKKwlfX3UxNiBtc3M7CisJX191MTYgZGdfaGRyX2xlbjsKKwlfX3U4ICBwYWRkaW5nWzE2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcWV0aF9oZHJfdHNvIHsKKwlzdHJ1Y3QgcWV0aF9oZHIgaGRyOwkvKmhkci0+aGRyLmwzLnh4eCovCisJc3RydWN0IHFldGhfaGRyX2V4dF90c28gZXh0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyogZmxhZ3MgZm9yIHFldGhfaGRyLmZsYWdzICovCisjZGVmaW5lIFFFVEhfSERSX1BBU1NUSFJVIDB4MTAKKyNkZWZpbmUgUUVUSF9IRFJfSVBWNiAgICAgMHg4MAorI2RlZmluZSBRRVRIX0hEUl9DQVNUX01BU0sgMHgwNworZW51bSBxZXRoX2Nhc3RfZmxhZ3MgeworCVFFVEhfQ0FTVF9VTklDQVNUICAgPSAweDA2LAorCVFFVEhfQ0FTVF9NVUxUSUNBU1QgPSAweDA0LAorCVFFVEhfQ0FTVF9CUk9BRENBU1QgPSAweDA1LAorCVFFVEhfQ0FTVF9BTllDQVNUICAgPSAweDA3LAorCVFFVEhfQ0FTVF9OT0NBU1QgICAgPSAweDAwLAorfTsKKworZW51bSBxZXRoX2xheWVyMl9mcmFtZV9mbGFncyB7CisJUUVUSF9MQVlFUjJfRkxBR19NVUxUSUNBU1QgPSAweDAxLAorCVFFVEhfTEFZRVIyX0ZMQUdfQlJPQURDQVNUID0gMHgwMiwKKwlRRVRIX0xBWUVSMl9GTEFHX1VOSUNBU1QgICA9IDB4MDQsCisJUUVUSF9MQVlFUjJfRkxBR19WTEFOICAgICAgPSAweDEwLAorfTsKKworZW51bSBxZXRoX2hlYWRlcl9pZHMgeworCVFFVEhfSEVBREVSX1RZUEVfTEFZRVIzID0gMHgwMSwKKwlRRVRIX0hFQURFUl9UWVBFX0xBWUVSMiA9IDB4MDIsCisJUUVUSF9IRUFERVJfVFlQRV9UU08JPSAweDAzLAorCVFFVEhfSEVBREVSX1RZUEVfT1NOICAgID0gMHgwNCwKK307CisvKiBmbGFncyBmb3IgcWV0aF9oZHIuZXh0X2ZsYWdzICovCisjZGVmaW5lIFFFVEhfSERSX0VYVF9WTEFOX0ZSQU1FICAgICAgIDB4MDEKKyNkZWZpbmUgUUVUSF9IRFJfRVhUX1RPS0VOX0lEICAgICAgICAgMHgwMgorI2RlZmluZSBRRVRIX0hEUl9FWFRfSU5DTFVERV9WTEFOX1RBRyAweDA0CisjZGVmaW5lIFFFVEhfSERSX0VYVF9TUkNfTUFDX0FERFIgICAgIDB4MDgKKyNkZWZpbmUgUUVUSF9IRFJfRVhUX0NTVU1fSERSX1JFUSAgICAgMHgxMAorI2RlZmluZSBRRVRIX0hEUl9FWFRfQ1NVTV9UUkFOU1BfUkVRICAweDIwCisjZGVmaW5lIFFFVEhfSERSX0VYVF9VRFBfVFNPICAgICAgICAgIDB4NDAgLypiaXQgb2ZmIGZvciBUQ1AqLworCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2lzX2xhc3Rfc2JhbGUoc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlKQoreworCXJldHVybiAoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKTsKK30KKworZW51bSBxZXRoX3FkaW9fYnVmZmVyX3N0YXRlcyB7CisJLyoKKwkgKiBpbmJvdW5kOiByZWFkIG91dCBieSBkcml2ZXI7IG93bmVkIGJ5IGhhcmR3YXJlIGluIG9yZGVyIHRvIGJlIGZpbGxlZAorCSAqIG91dGJvdW5kOiBvd25lZCBieSBkcml2ZXIgaW4gb3JkZXIgdG8gYmUgZmlsbGVkCisJICovCisJUUVUSF9RRElPX0JVRl9FTVBUWSwKKwkvKgorCSAqIGluYm91bmQ6IGZpbGxlZCBieSBoYXJkd2FyZTsgb3duZWQgYnkgZHJpdmVyIGluIG9yZGVyIHRvIGJlIHJlYWQgb3V0CisJICogb3V0Ym91bmQ6IGZpbGxlZCBieSBkcml2ZXI7IG93bmVkIGJ5IGhhcmR3YXJlIGluIG9yZGVyIHRvIGJlIHNlbnQKKwkgKi8KKwlRRVRIX1FESU9fQlVGX1BSSU1FRCwKK307CisKK2VudW0gcWV0aF9xZGlvX2luZm9fc3RhdGVzIHsKKwlRRVRIX1FESU9fVU5JTklUSUFMSVpFRCwKKwlRRVRIX1FESU9fQUxMT0NBVEVELAorCVFFVEhfUURJT19FU1RBQkxJU0hFRCwKKwlRRVRIX1FESU9fQ0xFQU5JTkcKK307CisKK3N0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBpbml0X2xpc3Q7CisJdm9pZCAqZWxlbWVudHNbUURJT19NQVhfRUxFTUVOVFNfUEVSX0JVRkZFUl07Cit9OworCitzdHJ1Y3QgcWV0aF9xZGlvX2J1ZmZlcl9wb29sIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5X2xpc3Q7CisJaW50IGJ1Zl9jb3VudDsKK307CisKK3N0cnVjdCBxZXRoX3FkaW9fYnVmZmVyIHsKKwlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlcjsKKwkvKiB0aGUgYnVmZmVyIHBvb2wgZW50cnkgY3VycmVudGx5IGFzc29jaWF0ZWQgdG8gdGhpcyBidWZmZXIgKi8KKwlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqcG9vbF9lbnRyeTsKK307CisKK3N0cnVjdCBxZXRoX3FkaW9fcSB7CisJc3RydWN0IHFkaW9fYnVmZmVyIHFkaW9fYnVmc1tRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKKwlzdHJ1Y3QgcWV0aF9xZGlvX2J1ZmZlciBidWZzW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOworCWludCBuZXh0X2J1Zl90b19pbml0OworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgyNTYpKSk7CisKKy8qIHBvc3NpYmxlIHR5cGVzIG9mIHFldGggbGFyZ2Vfc2VuZCBzdXBwb3J0ICovCitlbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB7CisJUUVUSF9MQVJHRV9TRU5EX05PLAorCVFFVEhfTEFSR0VfU0VORF9FRERQLAorCVFFVEhfTEFSR0VfU0VORF9UU08sCit9OworCitzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgeworCXN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmZmVyOworCWF0b21pY190IHN0YXRlOworCWludCBuZXh0X2VsZW1lbnRfdG9fZmlsbDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgY3R4X2xpc3Q7Cit9OworCitzdHJ1Y3QgcWV0aF9jYXJkOworCitlbnVtIHFldGhfb3V0X3Ffc3RhdGVzIHsKKyAgICAgICBRRVRIX09VVF9RX1VOTE9DS0VELAorICAgICAgIFFFVEhfT1VUX1FfTE9DS0VELAorICAgICAgIFFFVEhfT1VUX1FfTE9DS0VEX0ZMVVNILAorfTsKKworc3RydWN0IHFldGhfcWRpb19vdXRfcSB7CisJc3RydWN0IHFkaW9fYnVmZmVyIHFkaW9fYnVmc1tRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKKwlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgYnVmc1tRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKKwlpbnQgcXVldWVfbm87CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKwlhdG9taWNfdCBzdGF0ZTsKKwlpbnQgZG9fcGFjazsKKwkvKgorCSAqIGluZGV4IG9mIGJ1ZmZlciB0byBiZSBmaWxsZWQgYnkgZHJpdmVyOyBzdGF0ZSBFTVBUWSBvciBQQUNLSU5HCisJICovCisJaW50IG5leHRfYnVmX3RvX2ZpbGw7CisJLyoKKwkgKiBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGFyZSBjdXJyZW50bHkgZmlsbGVkIChQUklNRUQpCisJICogLT4gdGhlc2UgYnVmZmVycyBhcmUgaGFyZHdhcmUtb3duZWQKKwkgKi8KKwlhdG9taWNfdCB1c2VkX2J1ZmZlcnM7CisJLyogaW5kaWNhdGVzIHdoZXRoZXIgUENJIGZsYWcgbXVzdCBiZSBzZXQgKG9yIGlmIG9uZSBpcyBvdXRzdGFuZGluZykgKi8KKwlhdG9taWNfdCBzZXRfcGNpX2ZsYWdzX2NvdW50OworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgyNTYpKSk7CisKK3N0cnVjdCBxZXRoX3FkaW9faW5mbyB7CisJYXRvbWljX3Qgc3RhdGU7CisJLyogaW5wdXQgKi8KKwlzdHJ1Y3QgcWV0aF9xZGlvX3EgKmluX3E7CisJc3RydWN0IHFldGhfcWRpb19idWZmZXJfcG9vbCBpbl9idWZfcG9vbDsKKwlzdHJ1Y3QgcWV0aF9xZGlvX2J1ZmZlcl9wb29sIGluaXRfcG9vbDsKKwlpbnQgaW5fYnVmX3NpemU7CisKKwkvKiBvdXRwdXQgKi8KKwlpbnQgbm9fb3V0X3F1ZXVlczsKKwlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICoqb3V0X3FzOworCisJLyogcHJpb3JpdHkgcXVldWVpbmcgKi8KKwlpbnQgZG9fcHJpb19xdWV1ZWluZzsKKwlpbnQgZGVmYXVsdF9vdXRfcXVldWU7Cit9OworCitlbnVtIHFldGhfc2VuZF9lcnJvcnMgeworCVFFVEhfU0VORF9FUlJPUl9OT05FLAorCVFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkUsCisJUUVUSF9TRU5EX0VSUk9SX1JFVFJZLAorCVFFVEhfU0VORF9FUlJPUl9LSUNLX0lULAorfTsKKworI2RlZmluZSBRRVRIX0VUSF9NQUNfVjQgICAgICAweDAxMDAgLyogbGlrZSB2NCAqLworI2RlZmluZSBRRVRIX0VUSF9NQUNfVjYgICAgICAweDMzMzMgLyogbGlrZSB2NiAqLworLyogdHIgbWMgbWFjIGlzIGxvbmdlciwgYnV0IHRoYXQgd2lsbCBiZSBlbm91Z2ggdG8gZGV0ZWN0IG1jIGZyYW1lcyAqLworI2RlZmluZSBRRVRIX1RSX01BQ19OQyAgICAgICAweGMwMDAgLyogbm9uLWNhbm9uaWNhbCAqLworI2RlZmluZSBRRVRIX1RSX01BQ19DICAgICAgICAweDAzMDAgLyogY2Fub25pY2FsICovCisKKyNkZWZpbmUgREVGQVVMVF9BRERfSEhMRU4gMAorI2RlZmluZSBNQVhfQUREX0hITEVOIDEwMjQKKworLyoqCisgKiBidWZmZXIgc3R1ZmYgZm9yIHJlYWQgY2hhbm5lbAorICovCisjZGVmaW5lIFFFVEhfQ01EX0JVRkZFUl9OTwk4CisKKy8qKgorICogIGNoYW5uZWwgc3RhdGUgbWFjaGluZQorICovCitlbnVtIHFldGhfY2hhbm5lbF9zdGF0ZXMgeworCUNIX1NUQVRFX1VQLAorCUNIX1NUQVRFX0RPV04sCisJQ0hfU1RBVEVfQUNUSVZBVElORywKKwlDSF9TVEFURV9IQUxURUQsCisJQ0hfU1RBVEVfU1RPUFBFRCwKKwlDSF9TVEFURV9SQ0QsCisJQ0hfU1RBVEVfUkNEX0RPTkUsCit9OworLyoqCisgKiBjYXJkIHN0YXRlIG1hY2hpbmUKKyAqLworZW51bSBxZXRoX2NhcmRfc3RhdGVzIHsKKwlDQVJEX1NUQVRFX0RPV04sCisJQ0FSRF9TVEFURV9IQVJEU0VUVVAsCisJQ0FSRF9TVEFURV9TT0ZUU0VUVVAsCisJQ0FSRF9TVEFURV9VUCwKKwlDQVJEX1NUQVRFX1JFQ09WRVIsCit9OworCisvKioKKyAqIFByb3RvY29sIHZlcnNpb25zCisgKi8KK2VudW0gcWV0aF9wcm90X3ZlcnNpb25zIHsKKwlRRVRIX1BST1RfSVBWNCA9IDB4MDAwNCwKKwlRRVRIX1BST1RfSVBWNiA9IDB4MDAwNiwKK307CisKK2VudW0gcWV0aF9pcF90eXBlcyB7CisJUUVUSF9JUF9UWVBFX05PUk1BTCwKKwlRRVRIX0lQX1RZUEVfVklQQSwKKwlRRVRIX0lQX1RZUEVfUlhJUCwKKwlRRVRIX0lQX1RZUEVfREVMX0FMTF9NQywKK307CisKK2VudW0gcWV0aF9jbWRfYnVmZmVyX3N0YXRlIHsKKwlCVUZfU1RBVEVfRlJFRSwKKwlCVUZfU1RBVEVfTE9DS0VELAorCUJVRl9TVEFURV9QUk9DRVNTRUQsCit9OworCitzdHJ1Y3QgcWV0aF9pcGF0byB7CisJaW50IGVuYWJsZWQ7CisJaW50IGludmVydDQ7CisJaW50IGludmVydDY7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOworfTsKKworc3RydWN0IHFldGhfY2hhbm5lbDsKKworc3RydWN0IHFldGhfY21kX2J1ZmZlciB7CisJZW51bSBxZXRoX2NtZF9idWZmZXJfc3RhdGUgc3RhdGU7CisJc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCByYzsKKwl2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgcWV0aF9jaGFubmVsICosIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKik7Cit9OworCisvKioKKyAqIGRlZmluaXRpb24gb2YgYSBxZXRoIGNoYW5uZWwsIHVzZWQgZm9yIHJlYWQgYW5kIHdyaXRlCisgKi8KK3N0cnVjdCBxZXRoX2NoYW5uZWwgeworCWVudW0gcWV0aF9jaGFubmVsX3N0YXRlcyBzdGF0ZTsKKwlzdHJ1Y3QgY2N3MSBjY3c7CisJc3BpbmxvY2tfdCBpb2JfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OworCXN0cnVjdCBjY3dfZGV2aWNlICpjY3dkZXY7CisvKmNvbW1hbmQgYnVmZmVyIGZvciBjb250cm9sIGRhdGEqLworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgaW9iW1FFVEhfQ01EX0JVRkZFUl9OT107CisJYXRvbWljX3QgaXJxX3BlbmRpbmc7CisJaW50IGlvX2J1Zl9ubzsKKwlpbnQgYnVmX25vOworfTsKKworLyoqCisgKiAgT1NBIGNhcmQgcmVsYXRlZCBkZWZpbml0aW9ucworICovCitzdHJ1Y3QgcWV0aF90b2tlbiB7CisJX191MzIgaXNzdWVyX3JtX3c7CisJX191MzIgaXNzdWVyX3JtX3I7CisJX191MzIgY21fZmlsdGVyX3c7CisJX191MzIgY21fZmlsdGVyX3I7CisJX191MzIgY21fY29ubmVjdGlvbl93OworCV9fdTMyIGNtX2Nvbm5lY3Rpb25fcjsKKwlfX3UzMiB1bHBfZmlsdGVyX3c7CisJX191MzIgdWxwX2ZpbHRlcl9yOworCV9fdTMyIHVscF9jb25uZWN0aW9uX3c7CisJX191MzIgdWxwX2Nvbm5lY3Rpb25fcjsKK307CisKK3N0cnVjdCBxZXRoX3NlcW5vIHsKKwlfX3UzMiB0cmFuc19oZHI7CisJX191MzIgcGR1X2hkcjsKKwlfX3UzMiBwZHVfaGRyX2FjazsKKwlfX3UxNiBpcGE7CisJX191MzIgcGt0X3NlcW5vOworfTsKKworc3RydWN0IHFldGhfcmVwbHkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisJaW50ICgqY2FsbGJhY2spKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkgKiwKKwkJdW5zaWduZWQgbG9uZyk7CisJdTMyIHNlcW5vOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWF0b21pY190IHJlY2VpdmVkOworCWludCByYzsKKwl2b2lkICpwYXJhbTsKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCWF0b21pY190IHJlZmNudDsKK307CisKKworc3RydWN0IHFldGhfY2FyZF9ibGt0IHsKKwlpbnQgdGltZV90b3RhbDsKKwlpbnQgaW50ZXJfcGFja2V0OworCWludCBpbnRlcl9wYWNrZXRfanVtYm87Cit9OworCisjZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhfRUNITyAgICAweDAxCisjZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITyAweDAyCisjZGVmaW5lIFFFVEhfTEFZRVIyX01BQ19SRUFECSAgICAweDAxCisjZGVmaW5lIFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEICAweDAyCitzdHJ1Y3QgcWV0aF9jYXJkX2luZm8geworCXVuc2lnbmVkIHNob3J0IHVuaXRfYWRkcjI7CisJdW5zaWduZWQgc2hvcnQgY3VsYTsKKwl1bnNpZ25lZCBzaG9ydCBjaHBpZDsKKwlfX3UxNiBmdW5jX2xldmVsOworCWNoYXIgbWNsX2xldmVsW1FFVEhfTUNMX0xFTkdUSCArIDFdOworCWludCBndWVzdGxhbjsKKwlpbnQgbWFjX2JpdHM7CisJaW50IHBvcnRuYW1lX3JlcXVpcmVkOworCWludCBwb3J0bm87CisJY2hhciBwb3J0bmFtZVs5XTsKKwllbnVtIHFldGhfY2FyZF90eXBlcyB0eXBlOworCWVudW0gcWV0aF9saW5rX3R5cGVzIGxpbmtfdHlwZTsKKwlpbnQgaXNfbXVsdGljYXN0X2RpZmZlcmVudDsKKwlpbnQgaW5pdGlhbF9tdHU7CisJaW50IG1heF9tdHU7CisJaW50IGJyb2FkY2FzdF9jYXBhYmxlOworCWludCB1bmlxdWVfaWQ7CisJc3RydWN0IHFldGhfY2FyZF9ibGt0IGJsa3Q7CisJX191MzIgY3N1bV9tYXNrOworCWVudW0gcWV0aF9pcGFfcHJvbWlzY19tb2RlcyBwcm9taXNjX21vZGU7Cit9OworCitzdHJ1Y3QgcWV0aF9jYXJkX29wdGlvbnMgeworCXN0cnVjdCBxZXRoX3JvdXRpbmdfaW5mbyByb3V0ZTQ7CisJc3RydWN0IHFldGhfaXBhX2luZm8gaXBhNDsKKwlzdHJ1Y3QgcWV0aF9pcGFfaW5mbyBhZHA7IC8qQWRhcHRlciBwYXJhbWV0ZXJzKi8KKwlzdHJ1Y3QgcWV0aF9yb3V0aW5nX2luZm8gcm91dGU2OworCXN0cnVjdCBxZXRoX2lwYV9pbmZvIGlwYTY7CisJZW51bSBxZXRoX2NoZWNrc3VtX3R5cGVzIGNoZWNrc3VtX3R5cGU7CisJaW50IGJyb2FkY2FzdF9tb2RlOworCWludCBtYWNhZGRyX21vZGU7CisJaW50IGZha2VfYnJvYWRjYXN0OworCWludCBhZGRfaGhsZW47CisJaW50IGZha2VfbGw7CisJaW50IGxheWVyMjsKKwllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kOworCWludCBwZXJmb3JtYW5jZV9zdGF0czsKKwlpbnQgcnhfc2dfY2I7Cit9OworCisvKgorICogdGhyZWFkIGJpdHMgZm9yIHFldGhfY2FyZCB0aHJlYWQgbWFza3MKKyAqLworZW51bSBxZXRoX3RocmVhZHMgeworCVFFVEhfUkVDT1ZFUl9USFJFQUQgPSAxLAorfTsKKworc3RydWN0IHFldGhfb3NuX2luZm8geworCWludCAoKmFzc2lzdF9jYikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSk7CisJaW50ICgqZGF0YV9jYikoc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit9OworCitlbnVtIHFldGhfZGlzY2lwbGluZV9pZCB7CisJUUVUSF9ESVNDSVBMSU5FX0xBWUVSMyA9IDAsCisJUUVUSF9ESVNDSVBMSU5FX0xBWUVSMiA9IDEsCit9OworCitzdHJ1Y3QgcWV0aF9kaXNjaXBsaW5lIHsKKwlxZGlvX2hhbmRsZXJfdCAqaW5wdXRfaGFuZGxlcjsKKwlxZGlvX2hhbmRsZXJfdCAqb3V0cHV0X2hhbmRsZXI7CisJaW50ICgqcmVjb3Zlcikodm9pZCAqcHRyKTsKKwlzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyICpjY3dnZHJpdmVyOworfTsKKworc3RydWN0IHFldGhfdmxhbl92aWQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBzaG9ydCB2aWQ7Cit9OworCitzdHJ1Y3QgcWV0aF9tY19tYWMgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlfX3U4IG1jX2FkZHJbTUFYX0FERFJfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIG1jX2FkZHJsZW47Cit9OworCitzdHJ1Y3QgcWV0aF9jYXJkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJZW51bSBxZXRoX2NhcmRfc3RhdGVzIHN0YXRlOworCWludCBsYW5fb25saW5lOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OworCXN0cnVjdCBxZXRoX2NoYW5uZWwgcmVhZDsKKwlzdHJ1Y3QgcWV0aF9jaGFubmVsIHdyaXRlOworCXN0cnVjdCBxZXRoX2NoYW5uZWwgZGF0YTsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKKwlzdHJ1Y3QgcWV0aF9jYXJkX2luZm8gaW5mbzsKKwlzdHJ1Y3QgcWV0aF90b2tlbiB0b2tlbjsKKwlzdHJ1Y3QgcWV0aF9zZXFubyBzZXFubzsKKwlzdHJ1Y3QgcWV0aF9jYXJkX29wdGlvbnMgb3B0aW9uczsKKworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKKwlzcGlubG9ja190IHZsYW5sb2NrOworCXNwaW5sb2NrX3QgbWNsb2NrOworCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuZ3JwOworCXN0cnVjdCBsaXN0X2hlYWQgdmlkX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBtY19saXN0OworCXN0cnVjdCB3b3JrX3N0cnVjdCBrZXJuZWxfdGhyZWFkX3N0YXJ0ZXI7CisJc3BpbmxvY2tfdCB0aHJlYWRfbWFza19sb2NrOworCXVuc2lnbmVkIGxvbmcgdGhyZWFkX3N0YXJ0X21hc2s7CisJdW5zaWduZWQgbG9uZyB0aHJlYWRfYWxsb3dlZF9tYXNrOworCXVuc2lnbmVkIGxvbmcgdGhyZWFkX3J1bm5pbmdfbWFzazsKKwlzcGlubG9ja190IGlwX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBpcF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgKmlwX3RiZF9saXN0OworCXN0cnVjdCBxZXRoX2lwYXRvIGlwYXRvOworCXN0cnVjdCBsaXN0X2hlYWQgY21kX3dhaXRlcl9saXN0OworCS8qIFFESU8gYnVmZmVyIGhhbmRsaW5nICovCisJc3RydWN0IHFldGhfcWRpb19pbmZvIHFkaW87CisJc3RydWN0IHFldGhfcGVyZl9zdGF0cyBwZXJmX3N0YXRzOworCWludCB1c2VfaGFyZF9zdG9wOworCXN0cnVjdCBxZXRoX29zbl9pbmZvIG9zbl9pbmZvOworCXN0cnVjdCBxZXRoX2Rpc2NpcGxpbmUgZGlzY2lwbGluZTsKKwlhdG9taWNfdCBmb3JjZV9hbGxvY19za2I7Cit9OworCitzdHJ1Y3QgcWV0aF9jYXJkX2xpc3Rfc3RydWN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJcndsb2NrX3Qgcndsb2NrOworfTsKKworLypzb21lIGhlbHBlciBmdW5jdGlvbnMqLworI2RlZmluZSBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpICgoKGNhcmQpLT5kZXYpPyAoY2FyZCktPmRldi0+bmFtZSA6ICIiKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZXRoX2NhcmQgKkNBUkRfRlJPTV9DREVWKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJigoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKQorCQlkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldikpLT5kZXYpOworCXJldHVybiBjYXJkOworfQorCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2dldF9taWNyb3Modm9pZCkKK3sKKwlyZXR1cm4gKGludCkgKGdldF9jbG9jaygpID4+IDEyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpxZXRoX3B1c2hfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCisJCWludCBzaXplKQoreworCXZvaWQgKmhkcjsKKworCWhkciA9ICh2b2lkICopIHNrYl9wdXNoKHNrYiwgc2l6ZSk7CisJLyoKKwkgKiBzYW5pdHkgY2hlY2ssIHRoZSBMaW51eCBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUgc2hvdWxkCisJICogbmV2ZXIgcHJlc2VudCB1cyBjYXNlcyBsaWtlIHRoaXMgb25lICh0aGUgcWRpbyBoZWFkZXIgc2l6ZSBwbHVzCisJICogdGhlIGZpcnN0IDQwIGJ5dGVzIG9mIHRoZSBwYWtldCBjcm9zcyBhIDRrIGJvdW5kYXJ5KQorCSAqLworCWlmICgoKCh1bnNpZ25lZCBsb25nKSBoZHIpICYgKH4oUEFHRV9TSVpFIC0gMSkpKSAhPQorCSAgICAoKCh1bnNpZ25lZCBsb25nKSBoZHIgKyBzaXplICsKKwkgICAgUUVUSF9JUF9IRUFERVJfU0laRSkgJiAofihQQUdFX1NJWkUgLSAxKSkpKSB7CisJCVBSSU5UX0VSUigiTWlzYWxpZ25lZCBwYWNrZXQgb24gaW50ZXJmYWNlICVzLiBEaXNjYXJkZWQuIiwKKwkJCVFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGhkcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcWV0aF9nZXRfaXBfdmVyc2lvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCWNhc2UgRVRIX1BfSVBWNjoKKwkJcmV0dXJuIDY7CisJY2FzZSBFVEhfUF9JUDoKKwkJcmV0dXJuIDQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQ7CitleHRlcm4gc3RydWN0IGNjd2dyb3VwX2RyaXZlciBxZXRoX2wyX2Njd2dyb3VwX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyIHFldGhfbDNfY2N3Z3JvdXBfZHJpdmVyOworY29uc3QgY2hhciAqcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoc3RydWN0IHFldGhfY2FyZCAqKTsKK2ludCBxZXRoX3JlYWxsb2NfYnVmZmVyX3Bvb2woc3RydWN0IHFldGhfY2FyZCAqLCBpbnQpOworaW50IHFldGhfY29yZV9sb2FkX2Rpc2NpcGxpbmUoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfZGlzY2lwbGluZV9pZCk7Cit2b2lkIHFldGhfY29yZV9mcmVlX2Rpc2NpcGxpbmUoc3RydWN0IHFldGhfY2FyZCAqKTsKK2ludCBxZXRoX2NvcmVfY3JlYXRlX2RldmljZV9hdHRyaWJ1dGVzKHN0cnVjdCBkZXZpY2UgKik7Cit2b2lkIHFldGhfY29yZV9yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqKTsKK2ludCBxZXRoX2NvcmVfY3JlYXRlX29zbl9hdHRyaWJ1dGVzKHN0cnVjdCBkZXZpY2UgKik7Cit2b2lkIHFldGhfY29yZV9yZW1vdmVfb3NuX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqKTsKKworLyogZXhwb3J0cyBmb3IgcWV0aCBkaXNjaXBsaW5lIGRldmljZSBkcml2ZXJzICovCitleHRlcm4gc3RydWN0IHFldGhfY2FyZF9saXN0X3N0cnVjdCBxZXRoX2NvcmVfY2FyZF9saXN0OworCitleHRlcm4gc3RydWN0IHFldGhfZGJmX2luZm8gcWV0aF9kYmZbUUVUSF9EQkZfSU5GT1NdOworCit2b2lkIHFldGhfc2V0X2FsbG93ZWRfdGhyZWFkcyhzdHJ1Y3QgcWV0aF9jYXJkICosIHVuc2lnbmVkIGxvbmcgLCBpbnQpOworaW50IHFldGhfdGhyZWFkc19ydW5uaW5nKHN0cnVjdCBxZXRoX2NhcmQgKiwgdW5zaWduZWQgbG9uZyk7CitpbnQgcWV0aF93YWl0X2Zvcl90aHJlYWRzKHN0cnVjdCBxZXRoX2NhcmQgKiwgdW5zaWduZWQgbG9uZyk7CitpbnQgcWV0aF9kb19ydW5fdGhyZWFkKHN0cnVjdCBxZXRoX2NhcmQgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIHFldGhfY2xlYXJfdGhyZWFkX3N0YXJ0X2JpdChzdHJ1Y3QgcWV0aF9jYXJkICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBxZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChzdHJ1Y3QgcWV0aF9jYXJkICosIHVuc2lnbmVkIGxvbmcpOworaW50IHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICopOwordm9pZCBxZXRoX3ByaW50X3N0YXR1c19tZXNzYWdlKHN0cnVjdCBxZXRoX2NhcmQgKik7CitpbnQgcWV0aF9pbml0X3FkaW9fcXVldWVzKHN0cnVjdCBxZXRoX2NhcmQgKik7CitpbnQgcWV0aF9zZW5kX3N0YXJ0bGFuKHN0cnVjdCBxZXRoX2NhcmQgKik7CitpbnQgcWV0aF9zZW5kX3N0b3BsYW4oc3RydWN0IHFldGhfY2FyZCAqKTsKK2ludCBxZXRoX3NlbmRfaXBhX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKiwKKwkJICBpbnQgKCpyZXBseV9jYikKKwkJICAoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9yZXBseSAqLCB1bnNpZ25lZCBsb25nKSwKKwkJICB2b2lkICopOworc3RydWN0IHFldGhfY21kX2J1ZmZlciAqcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihzdHJ1Y3QgcWV0aF9jYXJkICosCisJCQllbnVtIHFldGhfaXBhX2NtZHMsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zKTsKK2ludCBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhzdHJ1Y3QgcWV0aF9jYXJkICopOworaW50IHFldGhfY2hlY2tfcWRpb19lcnJvcnMoc3RydWN0IHFkaW9fYnVmZmVyICosIHVuc2lnbmVkIGludCwKKwkJICAgICAgIHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKK3ZvaWQgcWV0aF9wdXRfYnVmZmVyX3Bvb2xfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqLAorCQkJICAgc3RydWN0IHFldGhfYnVmZmVyX3Bvb2xfZW50cnkgKik7Cit2b2lkIHFldGhfcXVldWVfaW5wdXRfYnVmZmVyKHN0cnVjdCBxZXRoX2NhcmQgKiwgaW50KTsKK3N0cnVjdCBza19idWZmICpxZXRoX2NvcmVfZ2V0X25leHRfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKiwKKwkJc3RydWN0IHFkaW9fYnVmZmVyICosIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoqLCBpbnQgKiwKKwkJc3RydWN0IHFldGhfaGRyICoqKTsKK3ZvaWQgcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShzdHJ1Y3QgcWV0aF9jYXJkICopOwordm9pZCBxZXRoX3FkaW9fb3V0cHV0X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKiwgdW5zaWduZWQgaW50LAorCQkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCisJCQl1bnNpZ25lZCBpbnQsIGludCwgaW50LAorCQkJdW5zaWduZWQgbG9uZyk7Cit2b2lkIHFldGhfY2xlYXJfaXBhY21kX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqKTsKK2ludCBxZXRoX3FkaW9fY2xlYXJfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICosIGludCk7Cit2b2lkIHFldGhfY2xlYXJfd29ya2luZ19wb29sX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqKTsKK3ZvaWQgcWV0aF9jbGVhcl9jbWRfYnVmZmVycyhzdHJ1Y3QgcWV0aF9jaGFubmVsICopOwordm9pZCBxZXRoX2NsZWFyX3FkaW9fYnVmZmVycyhzdHJ1Y3QgcWV0aF9jYXJkICopOwordm9pZCBxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoc3RydWN0IHFldGhfY2FyZCAqKTsKK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpxZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2ludCBxZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKK2ludCBxZXRoX3NldGFkcHBhcm1zX2NoYW5nZV9tYWNhZGRyKHN0cnVjdCBxZXRoX2NhcmQgKik7Cit2b2lkIHFldGhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3ZvaWQgcWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICosIGludCwKKwkJCQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICopOwordm9pZCBxZXRoX3JlbGVhc2VfYnVmZmVyKHN0cnVjdCBxZXRoX2NoYW5uZWwgKiwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKTsKK3ZvaWQgcWV0aF9wcmVwYXJlX2lwYV9jbWQoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICosIGNoYXIpOworc3RydWN0IHFldGhfY21kX2J1ZmZlciAqcWV0aF93YWl0X2Zvcl9idWZmZXIoc3RydWN0IHFldGhfY2hhbm5lbCAqKTsKK2ludCBxZXRoX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCk7CitpbnQgcWV0aF9zbm1wX2NvbW1hbmQoc3RydWN0IHFldGhfY2FyZCAqLCBjaGFyIF9fdXNlciAqKTsKK2ludCBxZXRoX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMpOworc3RydWN0IHFldGhfY21kX2J1ZmZlciAqcWV0aF9nZXRfYWRhcHRlcl9jbWQoc3RydWN0IHFldGhfY2FyZCAqLCBfX3UzMiwgX191MzIpOworaW50IHFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2Ioc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9yZXBseSAqLAorCQkJCQl1bnNpZ25lZCBsb25nKTsKK2ludCBxZXRoX3NlbmRfY29udHJvbF9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKiwgaW50LCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICosCisJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkqLCB1bnNpZ25lZCBsb25nKSwKKwl2b2lkICpyZXBseV9wYXJhbSk7CitpbnQgcWV0aF9nZXRfY2FzdF90eXBlKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitpbnQgcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsIGludCk7CitzdHJ1Y3Qgc2tfYnVmZiAqcWV0aF9wcmVwYXJlX3NrYihzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBza19idWZmICosCisJCSBzdHJ1Y3QgcWV0aF9oZHIgKiopOworaW50IHFldGhfZ2V0X2VsZW1lbnRzX25vKHN0cnVjdCBxZXRoX2NhcmQgKiwgdm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOworaW50IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKKwkJCXN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQsCisJCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKik7CitpbnQgcWV0aF9kb19zZW5kX3BhY2tldChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKKwkJICAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLAorCQkgICAgaW50LCBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKik7CitpbnQgcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3ZvaWQgcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICosCisJCQkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKiwgdTY0ICopOwordm9pZCBxZXRoX2NvcmVfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyLCB1OCAqKTsKK3ZvaWQgcWV0aF9jb3JlX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7CisKKy8qIGV4cG9ydHMgZm9yIE9TTiAqLworaW50IHFldGhfb3NuX2Fzc2lzdChzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICosIGludCk7CitpbnQgcWV0aF9vc25fcmVnaXN0ZXIodW5zaWduZWQgY2hhciAqcmVhZF9kZXZfbm8sIHN0cnVjdCBuZXRfZGV2aWNlICoqLAorCQlpbnQgKCphc3Npc3RfY2IpKHN0cnVjdCBuZXRfZGV2aWNlICosIHZvaWQgKiksCisJCWludCAoKmRhdGFfY2IpKHN0cnVjdCBza19idWZmICopKTsKK3ZvaWQgcWV0aF9vc25fZGVyZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKworI2VuZGlmIC8qIF9fUUVUSF9DT1JFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NWY1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTAsMCArMSw0NDkyIEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNworICogICAgQXV0aG9yKHMpOiBVdHogQmFjaGVyIDx1dHouYmFjaGVyQGRlLmlibS5jb20+LAorICoJCSBGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4sCisgKgkJIFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4sCisgKgkJIEZyYW5rIEJsYXNjaGthIDxmcmFuay5ibGFzY2hrYUBkZS5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorCisjaW5jbHVkZSA8YXNtLXMzOTAvZWJjZGljLmg+CisjaW5jbHVkZSA8YXNtLXMzOTAvaW8uaD4KKyNpbmNsdWRlIDxhc20vczM5MF9yZGV2Lmg+CisKKyNpbmNsdWRlICJxZXRoX2NvcmUuaCIKKyNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhclsyNTZdLCBxZXRoX2NvcmVfZGJmX3R4dF9idWYpOworI2RlZmluZSBRRVRIX0RCRl9UWFRfQlVGIHFldGhfY29yZV9kYmZfdHh0X2J1ZgorCitzdHJ1Y3QgcWV0aF9kYmZfaW5mbyBxZXRoX2RiZltRRVRIX0RCRl9JTkZPU10gPSB7CisJLyogZGVmaW5lIGRiZiAtIE5hbWUsIFBhZ2VzLCBBcmVhcywgTWF4bGVuLCBMZXZlbCwgVmlldywgSGFuZGxlICovCisJLyogICAgICAgICAgICAgICAgICAgTiAgUCAgQSAgICBNICBMICBWICAgICAgICAgICAgICAgICAgICAgIEggICovCisJW1FFVEhfREJGX1NFVFVQXSA9IHsicWV0aF9zZXR1cCIsCisJCQkJOCwgMSwgICA4LCA1LCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcsIE5VTEx9LAorCVtRRVRIX0RCRl9RRVJSXSAgPSB7InFldGhfcWVyciIsCisJCQkJMiwgMSwgICA4LCAyLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcsIE5VTEx9LAorCVtRRVRIX0RCRl9UUkFDRV0gPSB7InFldGhfdHJhY2UiLAorCQkJCTQsIDEsICAgOCwgMywgJmRlYnVnX2hleF9hc2NpaV92aWV3LCBOVUxMfSwKKwlbUUVUSF9EQkZfTVNHXSAgID0geyJxZXRoX21zZyIsCisJCQkJOCwgMSwgMTI4LCAzLCAmZGVidWdfc3ByaW50Zl92aWV3LCAgIE5VTEx9LAorCVtRRVRIX0RCRl9TRU5TRV0gPSB7InFldGhfc2Vuc2UiLAorCQkJCTIsIDEsICA2NCwgMiwgJmRlYnVnX2hleF9hc2NpaV92aWV3LCBOVUxMfSwKKwlbUUVUSF9EQkZfTUlTQ10JID0geyJxZXRoX21pc2MiLAorCQkJCTIsIDEsIDI1NiwgMiwgJmRlYnVnX2hleF9hc2NpaV92aWV3LCBOVUxMfSwKKwlbUUVUSF9EQkZfQ1RSTF0gID0geyJxZXRoX2NvbnRyb2wiLAorCQk4LCAxLCBRRVRIX0RCRl9DVFJMX0xFTiwgNSwgJmRlYnVnX2hleF9hc2NpaV92aWV3LCBOVUxMfSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2RiZik7CisKK3N0cnVjdCBxZXRoX2NhcmRfbGlzdF9zdHJ1Y3QgcWV0aF9jb3JlX2NhcmRfbGlzdDsKK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfY29yZV9jYXJkX2xpc3QpOworCitzdGF0aWMgc3RydWN0IGRldmljZSAqcWV0aF9jb3JlX3Jvb3RfZGV2Oworc3RhdGljIHVuc2lnbmVkIGludCBrbm93bl9kZXZpY2VzW11bMTBdID0gUUVUSF9NT0RFTExJU1RfQVJSQVk7CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHFkaW9fb3V0X3NrYl9xdWV1ZV9rZXk7CisKK3N0YXRpYyB2b2lkIHFldGhfc2VuZF9jb250cm9sX2RhdGFfY2Ioc3RydWN0IHFldGhfY2hhbm5lbCAqLAorCQkJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKTsKK3N0YXRpYyBpbnQgcWV0aF9pc3N1ZV9uZXh0X3JlYWQoc3RydWN0IHFldGhfY2FyZCAqKTsKK3N0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICpxZXRoX2dldF9idWZmZXIoc3RydWN0IHFldGhfY2hhbm5lbCAqKTsKK3N0YXRpYyB2b2lkIHFldGhfc2V0dXBfY2N3KHN0cnVjdCBxZXRoX2NoYW5uZWwgKiwgdW5zaWduZWQgY2hhciAqLCBfX3UzMik7CitzdGF0aWMgdm9pZCBxZXRoX2ZyZWVfYnVmZmVyX3Bvb2woc3RydWN0IHFldGhfY2FyZCAqKTsKK3N0YXRpYyBpbnQgcWV0aF9xZGlvX2VzdGFibGlzaChzdHJ1Y3QgcWV0aF9jYXJkICopOworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3FldGhfZmlsbF9idWZmZXJfZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlciwgaW50IGlzX3RzbywKKwkJaW50ICpuZXh0X2VsZW1lbnRfdG9fZmlsbCkKK3sKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOworCWludCBmcmFnbm87CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBlbGVtZW50LCBjbnQsIGRsZW47CisKKwlmcmFnbm8gPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCWVsZW1lbnQgPSAqbmV4dF9lbGVtZW50X3RvX2ZpbGw7CisJZGxlbiA9IDA7CisKKwlpZiAoaXNfdHNvKQorCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQorCQkJU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwllbHNlCisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9CisJCQlTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJZGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKKwlpZiAoZGxlbikgeworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IHNrYi0+ZGF0YTsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGRsZW47CisJCWVsZW1lbnQrKzsKKwl9CisJZm9yIChjbnQgPSAwOyBjbnQgPCBmcmFnbm87IGNudCsrKSB7CisJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tjbnRdOworCQlhZGRyID0gKHBhZ2VfdG9fcGZuKGZyYWctPnBhZ2UpIDw8IFBBR0VfU0hJRlQpICsKKwkJCWZyYWctPnBhZ2Vfb2Zmc2V0OworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IChjaGFyICopYWRkcjsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGZyYWctPnNpemU7CisJCWlmIChjbnQgPCAoZnJhZ25vIC0gMSkpCisJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQorCQkJCVNCQUxfRkxBR1NfTUlERExFX0ZSQUc7CisJCWVsc2UKKwkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9CisJCQkJU0JBTF9GTEFHU19MQVNUX0ZSQUc7CisJCWVsZW1lbnQrKzsKKwl9CisJKm5leHRfZWxlbWVudF90b19maWxsID0gZWxlbWVudDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpxZXRoX2dldF9jYXJkbmFtZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKSB7CisJCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKSB7CisJCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKKwkJCXJldHVybiAiIEd1ZXN0IExBTiBRRElPIjsKKwkJY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6CisJCQlyZXR1cm4gIiBHdWVzdCBMQU4gSGlwZXIiOworCQlkZWZhdWx0OgorCQkJcmV0dXJuICIgdW5rbm93biI7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNhcmQtPmluZm8udHlwZSkgeworCQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6CisJCQlyZXR1cm4gIiBPU0QgRXhwcmVzcyI7CisJCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgorCQkJcmV0dXJuICIgSGlwZXJTb2NrZXRzIjsKKwkJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CisJCQlyZXR1cm4gIiBPU04gUURJTyI7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gIiB1bmtub3duIjsKKwkJfQorCX0KKwlyZXR1cm4gIiBuL2EiOworfQorCisvKiBtYXggbGVuZ3RoIHRvIGJlIHJldHVybmVkOiAxNCAqLworY29uc3QgY2hhciAqcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikgeworCQlzd2l0Y2ggKGNhcmQtPmluZm8udHlwZSkgeworCQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6CisJCQlyZXR1cm4gIkd1ZXN0TEFOIFFESU8iOworCQljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKKwkJCXJldHVybiAiR3Vlc3RMQU4gSGlwZXIiOworCQlkZWZhdWx0OgorCQkJcmV0dXJuICJ1bmtub3duIjsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKSB7CisJCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKKwkJCXN3aXRjaCAoY2FyZC0+aW5mby5saW5rX3R5cGUpIHsKKwkJCWNhc2UgUUVUSF9MSU5LX1RZUEVfRkFTVF9FVEg6CisJCQkJcmV0dXJuICJPU0RfMTAwIjsKKwkJCWNhc2UgUUVUSF9MSU5LX1RZUEVfSFNUUjoKKwkJCQlyZXR1cm4gIkhTVFIiOworCQkJY2FzZSBRRVRIX0xJTktfVFlQRV9HQklUX0VUSDoKKwkJCQlyZXR1cm4gIk9TRF8xMDAwIjsKKwkJCWNhc2UgUUVUSF9MSU5LX1RZUEVfMTBHQklUX0VUSDoKKwkJCQlyZXR1cm4gIk9TRF8xMEdJRyI7CisJCQljYXNlIFFFVEhfTElOS19UWVBFX0xBTkVfRVRIMTAwOgorCQkJCXJldHVybiAiT1NEX0ZFX0xBTkUiOworCQkJY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSOgorCQkJCXJldHVybiAiT1NEX1RSX0xBTkUiOworCQkJY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FX0VUSDEwMDA6CisJCQkJcmV0dXJuICJPU0RfR2JFX0xBTkUiOworCQkJY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FOgorCQkJCXJldHVybiAiT1NEX0FUTV9MQU5FIjsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuICJPU0RfRXhwcmVzcyI7CisJCQl9CisJCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgorCQkJcmV0dXJuICJIaXBlclNvY2tldHMiOworCQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKKwkJCXJldHVybiAiT1NOIjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAidW5rbm93biI7CisJCX0KKwl9CisJcmV0dXJuICJuL2EiOworfQorCit2b2lkIHFldGhfc2V0X2FsbG93ZWRfdGhyZWFkcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZHMsCisJCQkgaW50IGNsZWFyX3N0YXJ0X21hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7CisJY2FyZC0+dGhyZWFkX2FsbG93ZWRfbWFzayA9IHRocmVhZHM7CisJaWYgKGNsZWFyX3N0YXJ0X21hc2spCisJCWNhcmQtPnRocmVhZF9zdGFydF9tYXNrICY9IHRocmVhZHM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOworCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMpOworCitpbnQgcWV0aF90aHJlYWRzX3J1bm5pbmcoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyB0aHJlYWRzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7CisJcmMgPSAoY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayAmIHRocmVhZHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3RocmVhZHNfcnVubmluZyk7CisKK2ludCBxZXRoX3dhaXRfZm9yX3RocmVhZHMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyB0aHJlYWRzKQoreworCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FyZC0+d2FpdF9xLAorCQkJcWV0aF90aHJlYWRzX3J1bm5pbmcoY2FyZCwgdGhyZWFkcykgPT0gMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3dhaXRfZm9yX3RocmVhZHMpOworCit2b2lkIHFldGhfY2xlYXJfd29ya2luZ19wb29sX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqcG9vbF9lbnRyeSwgKnRtcDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjbHdya2xzdCIpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb29sX2VudHJ5LCB0bXAsCisJCQkgICAgJmNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuZW50cnlfbGlzdCwgbGlzdCl7CisJCQlsaXN0X2RlbCgmcG9vbF9lbnRyeS0+bGlzdCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jbGVhcl93b3JraW5nX3Bvb2xfbGlzdCk7CisKK3N0YXRpYyBpbnQgcWV0aF9hbGxvY19idWZmZXJfcG9vbChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICpwb29sX2VudHJ5OworCXZvaWQgKnB0cjsKKwlpbnQgaSwgajsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJhbG9jcG9vbCIpOworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLmluaXRfcG9vbC5idWZfY291bnQ7ICsraSkgeworCQlwb29sX2VudHJ5ID0ga21hbGxvYyhzaXplb2YoKnBvb2xfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb29sX2VudHJ5KSB7CisJCQlxZXRoX2ZyZWVfYnVmZmVyX3Bvb2woY2FyZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlmb3IgKGogPSAwOyBqIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2opIHsKKwkJCXB0ciA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJCWlmICghcHRyKSB7CisJCQkJd2hpbGUgKGogPiAwKQorCQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpCisJCQkJCQkgIHBvb2xfZW50cnktPmVsZW1lbnRzWy0tal0pOworCQkJCWtmcmVlKHBvb2xfZW50cnkpOworCQkJCXFldGhfZnJlZV9idWZmZXJfcG9vbChjYXJkKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCXBvb2xfZW50cnktPmVsZW1lbnRzW2pdID0gcHRyOworCQl9CisJCWxpc3RfYWRkKCZwb29sX2VudHJ5LT5pbml0X2xpc3QsCisJCQkgJmNhcmQtPnFkaW8uaW5pdF9wb29sLmVudHJ5X2xpc3QpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHFldGhfcmVhbGxvY19idWZmZXJfcG9vbChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgYnVmY250KQoreworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJyZWFsY2JwIik7CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBUT0RPOiBzdGVlbC9hZGQgYnVmZmVycyBmcm9tL3RvIGEgcnVubmluZyBjYXJkJ3MgYnVmZmVyIHBvb2wgKD8pICovCisJcWV0aF9jbGVhcl93b3JraW5nX3Bvb2xfbGlzdChjYXJkKTsKKwlxZXRoX2ZyZWVfYnVmZmVyX3Bvb2woY2FyZCk7CisJY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQgPSBidWZjbnQ7CisJY2FyZC0+cWRpby5pbml0X3Bvb2wuYnVmX2NvdW50ID0gYnVmY250OworCXJldHVybiBxZXRoX2FsbG9jX2J1ZmZlcl9wb29sKGNhcmQpOworfQorCitpbnQgcWV0aF9zZXRfbGFyZ2Vfc2VuZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB0eXBlKQoreworCWludCByYyA9IDA7CisKKwlpZiAoY2FyZC0+ZGV2ID09IE5VTEwpIHsKKwkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQorCQluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CisJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKKwlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgeworCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6CisJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKKwkJCQkJTkVUSUZfRl9IV19DU1VNOworCQlicmVhazsKKwljYXNlIFFFVEhfTEFSR0VfU0VORF9UU086CisJCWlmIChxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfVFNPKSkgeworCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAorCQkJCQkJTkVUSUZfRl9IV19DU1VNOworCQl9IGVsc2UgeworCQkJUFJJTlRfV0FSTigiVFNPIG5vdCBzdXBwb3J0ZWQgb24gJXMuICIKKwkJCQkgICAibGFyZ2Vfc2VuZCBzZXQgdG8gJ25vJy5cbiIsCisJCQkJICAgY2FyZC0+ZGV2LT5uYW1lKTsKKwkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAorCQkJCQkJTkVUSUZfRl9IV19DU1VNKTsKKwkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKKwkJCXJjID0gLUVPUE5PVFNVUFA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDogLyogaW5jbHVkZXMgUUVUSF9MQVJHRV9TRU5EX05PICovCisJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAorCQkJCQlORVRJRl9GX0hXX0NTVU0pOworCQlicmVhazsKKwl9CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCisJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3NldF9sYXJnZV9zZW5kKTsKKworc3RhdGljIGludCBxZXRoX2lzc3VlX25leHRfcmVhZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiaXNzbnhyZCIpOworCWlmIChjYXJkLT5yZWFkLnN0YXRlICE9IENIX1NUQVRFX1VQKQorCQlyZXR1cm4gLUVJTzsKKwlpb2IgPSBxZXRoX2dldF9idWZmZXIoJmNhcmQtPnJlYWQpOworCWlmICghaW9iKSB7CisJCVBSSU5UX1dBUk4oImlzc3VlX25leHRfcmVhZCBmYWlsZWQ6IG5vIGlvYiBhdmFpbGFibGUhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXFldGhfc2V0dXBfY2N3KCZjYXJkLT5yZWFkLCBpb2ItPmRhdGEsIFFFVEhfQlVGU0laRSk7CisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgIm5vaXJxcG5kIik7CisJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNhcmQtPnJlYWQuY2N3ZGV2LCAmY2FyZC0+cmVhZC5jY3csCisJCQkgICAgICAoYWRkcl90KSBpb2IsIDAsIDApOworCWlmIChyYykgeworCQlQUklOVF9FUlIoIkVycm9yIGluIHN0YXJ0aW5nIG5leHQgcmVhZCBjY3chIHJjPSVpXG4iLCByYyk7CisJCWF0b21pY19zZXQoJmNhcmQtPnJlYWQuaXJxX3BlbmRpbmcsIDApOworCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOworCQl3YWtlX3VwKCZjYXJkLT53YWl0X3EpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcWV0aF9yZXBseSAqcWV0aF9hbGxvY19yZXBseShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseTsKKworCXJlcGx5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfcmVwbHkpLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVwbHkpIHsKKwkJYXRvbWljX3NldCgmcmVwbHktPnJlZmNudCwgMSk7CisJCWF0b21pY19zZXQoJnJlcGx5LT5yZWNlaXZlZCwgMCk7CisJCXJlcGx5LT5jYXJkID0gY2FyZDsKKwl9OworCXJldHVybiByZXBseTsKK30KKworc3RhdGljIHZvaWQgcWV0aF9nZXRfcmVwbHkoc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5KQoreworCVdBUk5fT04oYXRvbWljX3JlYWQoJnJlcGx5LT5yZWZjbnQpIDw9IDApOworCWF0b21pY19pbmMoJnJlcGx5LT5yZWZjbnQpOworfQorCitzdGF0aWMgdm9pZCBxZXRoX3B1dF9yZXBseShzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHkpCit7CisJV0FSTl9PTihhdG9taWNfcmVhZCgmcmVwbHktPnJlZmNudCkgPD0gMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJlcGx5LT5yZWZjbnQpKQorCQlrZnJlZShyZXBseSk7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfaXNzdWVfaXBhX21zZyhzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQsIGludCByYywKKwkJc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwljaGFyICppcGFfbmFtZTsKKwlpbnQgY29tID0gY21kLT5oZHIuY29tbWFuZDsKKwlpcGFfbmFtZSA9IHFldGhfZ2V0X2lwYV9jbWRfbmFtZShjb20pOworCWlmIChyYykKKwkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiSVBBOiAlcyh4JVgpIGZvciAlcyByZXR1cm5lZCB4JVggXCIlc1wiXG4iLAorCQkJCWlwYV9uYW1lLCBjb20sIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCisJCQkJCXJjLCBxZXRoX2dldF9pcGFfbXNnKHJjKSk7CisJZWxzZQorCQlRRVRIX0RCRl9NRVNTQUdFKDUsICJJUEE6ICVzKHglWCkgZm9yICVzIHN1Y2NlZWRlZFxuIiwKKwkJCQlpcGFfbmFtZSwgY29tLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKK30KKworc3RhdGljIHN0cnVjdCBxZXRoX2lwYV9jbWQgKnFldGhfY2hlY2tfaXBhX2RhdGEoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZCA9IE5VTEw7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY2hraXBhZCIpOworCWlmIChJU19JUEEoaW9iLT5kYXRhKSkgeworCQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBQRFVfRU5DQVBTVUxBVElPTihpb2ItPmRhdGEpOworCQlpZiAoSVNfSVBBX1JFUExZKGNtZCkpIHsKKwkJCWlmIChjbWQtPmhkci5jb21tYW5kIDwgSVBBX0NNRF9TRVRDQ0lEIHx8CisJCQkgICAgY21kLT5oZHIuY29tbWFuZCA+IElQQV9DTURfTU9EQ0NJRCkKKwkJCQlxZXRoX2lzc3VlX2lwYV9tc2coY21kLAorCQkJCQkJY21kLT5oZHIucmV0dXJuX2NvZGUsIGNhcmQpOworCQkJcmV0dXJuIGNtZDsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoY21kLT5oZHIuY29tbWFuZCkgeworCQkJY2FzZSBJUEFfQ01EX1NUT1BMQU46CisJCQkJUFJJTlRfV0FSTigiTGluayBmYWlsdXJlIG9uICVzIChDSFBJRCAweCVYKSAtICIKKwkJCQkJICAgInRoZXJlIGlzIGEgbmV0d29yayBwcm9ibGVtIG9yICIKKwkJCQkJICAgInNvbWVvbmUgcHVsbGVkIHRoZSBjYWJsZSBvciAiCisJCQkJCSAgICJkaXNhYmxlZCB0aGUgcG9ydC5cbiIsCisJCQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCisJCQkJCSAgIGNhcmQtPmluZm8uY2hwaWQpOworCQkJCWNhcmQtPmxhbl9vbmxpbmUgPSAwOworCQkJCWlmIChjYXJkLT5kZXYgJiYgbmV0aWZfY2Fycmllcl9vayhjYXJkLT5kZXYpKQorCQkJCQluZXRpZl9jYXJyaWVyX29mZihjYXJkLT5kZXYpOworCQkJCXJldHVybiBOVUxMOworCQkJY2FzZSBJUEFfQ01EX1NUQVJUTEFOOgorCQkJCVBSSU5UX0lORk8oIkxpbmsgcmVlc3RhYmxpc2hlZCBvbiAlcyAiCisJCQkJCSAgICIoQ0hQSUQgMHglWCkuIFNjaGVkdWxpbmcgIgorCQkJCQkgICAiSVAgYWRkcmVzcyByZXNldC5cbiIsCisJCQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCisJCQkJCSAgIGNhcmQtPmluZm8uY2hwaWQpOworCQkJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKKwkJCQljYXJkLT5sYW5fb25saW5lID0gMTsKKwkJCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOworCQkJCXJldHVybiBOVUxMOworCQkJY2FzZSBJUEFfQ01EX01PRENDSUQ6CisJCQkJcmV0dXJuIGNtZDsKKwkJCWNhc2UgSVBBX0NNRF9SRUdJU1RFUl9MT0NBTF9BRERSOgorCQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJpcmxhIik7CisJCQkJYnJlYWs7CisJCQljYXNlIElQQV9DTURfVU5SRUdJU1RFUl9MT0NBTF9BRERSOgorCQkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJ1cmxhIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVBSSU5UX1dBUk4oIlJlY2VpdmVkIGRhdGEgaXMgSVBBICIKKwkJCQkJICAgImJ1dCBub3QgYSByZXBseSFcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiBjbWQ7Cit9CisKK3ZvaWQgcWV0aF9jbGVhcl9pcGFjbWRfbGlzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgKnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJjbGlwYWxzdCIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVwbHksIHIsICZjYXJkLT5jbWRfd2FpdGVyX2xpc3QsIGxpc3QpIHsKKwkJcWV0aF9nZXRfcmVwbHkocmVwbHkpOworCQlyZXBseS0+cmMgPSAtRUlPOworCQlhdG9taWNfaW5jKCZyZXBseS0+cmVjZWl2ZWQpOworCQlsaXN0X2RlbF9pbml0KCZyZXBseS0+bGlzdCk7CisJCXdha2VfdXAoJnJlcGx5LT53YWl0X3EpOworCQlxZXRoX3B1dF9yZXBseShyZXBseSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfY2xlYXJfaXBhY21kX2xpc3QpOworCitzdGF0aWMgaW50IHFldGhfY2hlY2tfaWR4X3Jlc3BvbnNlKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIDA7CisKKwlRRVRIX0RCRl9IRVgoQ1RSTCwgMiwgYnVmZmVyLCBRRVRIX0RCRl9DVFJMX0xFTik7CisJaWYgKChidWZmZXJbMl0gJiAweGMwKSA9PSAweGMwKSB7CisJCVBSSU5UX1dBUk4oInJlY2VpdmVkIGFuIElEWCBURVJNSU5BVEUgIgorCQkJICAgIndpdGggY2F1c2UgY29kZSAweCUwMnglc1xuIiwKKwkJCSAgIGJ1ZmZlcls0XSwKKwkJCSAgICgoYnVmZmVyWzRdID09IDB4MjIpID8KKwkJCSAgICAiIC0tIHRyeSBhbm90aGVyIHBvcnRuYW1lIiA6ICIiKSk7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJja2lkeHJlcyIpOworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiIGlkeHRlcm0iKTsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIgIHJjJWQiLCAtRUlPKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxZXRoX3NldHVwX2NjdyhzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBjaGFyICppb2IsCisJCV9fdTMyIGxlbikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNldHVwY2N3Iik7CisJY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7CisJaWYgKGNoYW5uZWwgPT0gJmNhcmQtPnJlYWQpCisJCW1lbWNweSgmY2hhbm5lbC0+Y2N3LCBSRUFEX0NDVywgc2l6ZW9mKHN0cnVjdCBjY3cxKSk7CisJZWxzZQorCQltZW1jcHkoJmNoYW5uZWwtPmNjdywgV1JJVEVfQ0NXLCBzaXplb2Yoc3RydWN0IGNjdzEpKTsKKwljaGFubmVsLT5jY3cuY291bnQgPSBsZW47CisJY2hhbm5lbC0+Y2N3LmNkYSA9IChfX3UzMikgX19wYShpb2IpOworfQorCitzdGF0aWMgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqX19xZXRoX2dldF9idWZmZXIoc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlfX3U4IGluZGV4OworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImdldGJ1ZmYiKTsKKwlpbmRleCA9IGNoYW5uZWwtPmlvX2J1Zl9ubzsKKwlkbyB7CisJCWlmIChjaGFubmVsLT5pb2JbaW5kZXhdLnN0YXRlID09IEJVRl9TVEFURV9GUkVFKSB7CisJCQljaGFubmVsLT5pb2JbaW5kZXhdLnN0YXRlID0gQlVGX1NUQVRFX0xPQ0tFRDsKKwkJCWNoYW5uZWwtPmlvX2J1Zl9ubyA9IChjaGFubmVsLT5pb19idWZfbm8gKyAxKSAlCisJCQkJUUVUSF9DTURfQlVGRkVSX05POworCQkJbWVtc2V0KGNoYW5uZWwtPmlvYltpbmRleF0uZGF0YSwgMCwgUUVUSF9CVUZTSVpFKTsKKwkJCXJldHVybiBjaGFubmVsLT5pb2IgKyBpbmRleDsKKwkJfQorCQlpbmRleCA9IChpbmRleCArIDEpICUgUUVUSF9DTURfQlVGRkVSX05POworCX0gd2hpbGUgKGluZGV4ICE9IGNoYW5uZWwtPmlvX2J1Zl9ubyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBxZXRoX3JlbGVhc2VfYnVmZmVyKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwsCisJCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgInJlbGJ1ZmYiKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+aW9iX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQoaW9iLT5kYXRhLCAwLCBRRVRIX0JVRlNJWkUpOworCWlvYi0+c3RhdGUgPSBCVUZfU1RBVEVfRlJFRTsKKwlpb2ItPmNhbGxiYWNrID0gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YV9jYjsKKwlpb2ItPnJjID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5pb2JfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9yZWxlYXNlX2J1ZmZlcik7CisKK3N0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICpxZXRoX2dldF9idWZmZXIoc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICpidWZmZXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+aW9iX2xvY2ssIGZsYWdzKTsKKwlidWZmZXIgPSBfX3FldGhfZ2V0X2J1ZmZlcihjaGFubmVsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5pb2JfbG9jaywgZmxhZ3MpOworCXJldHVybiBidWZmZXI7Cit9CisKK3N0cnVjdCBxZXRoX2NtZF9idWZmZXIgKnFldGhfd2FpdF9mb3JfYnVmZmVyKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqYnVmZmVyOworCXdhaXRfZXZlbnQoY2hhbm5lbC0+d2FpdF9xLAorCQkgICAoKGJ1ZmZlciA9IHFldGhfZ2V0X2J1ZmZlcihjaGFubmVsKSkgIT0gTlVMTCkpOworCXJldHVybiBidWZmZXI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3dhaXRfZm9yX2J1ZmZlcik7CisKK3ZvaWQgcWV0aF9jbGVhcl9jbWRfYnVmZmVycyhzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsKQoreworCWludCBjbnQ7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IFFFVEhfQ01EX0JVRkZFUl9OTzsgY250KyspCisJCXFldGhfcmVsZWFzZV9idWZmZXIoY2hhbm5lbCwgJmNoYW5uZWwtPmlvYltjbnRdKTsKKwljaGFubmVsLT5idWZfbm8gPSAwOworCWNoYW5uZWwtPmlvX2J1Zl9ubyA9IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2NsZWFyX2NtZF9idWZmZXJzKTsKKworc3RhdGljIHZvaWQgcWV0aF9zZW5kX2NvbnRyb2xfZGF0YV9jYihzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsLAorCQkgIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgKnI7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGtlZXBfcmVwbHk7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic25kY3RsY2IiKTsKKworCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjaGFubmVsLT5jY3dkZXYpOworCWlmIChxZXRoX2NoZWNrX2lkeF9yZXNwb25zZShpb2ItPmRhdGEpKSB7CisJCXFldGhfY2xlYXJfaXBhY21kX2xpc3QoY2FyZCk7CisJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CisJCWdvdG8gb3V0OworCX0KKworCWNtZCA9IHFldGhfY2hlY2tfaXBhX2RhdGEoY2FyZCwgaW9iKTsKKwlpZiAoKGNtZCA9PSBOVUxMKSAmJiAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSkKKwkJZ290byBvdXQ7CisJLyppbiBjYXNlIG9mIE9TTiA6IGNoZWNrIGlmIGNtZCBpcyBzZXQgKi8KKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTiAmJgorCSAgICBjbWQgJiYKKwkgICAgY21kLT5oZHIuY29tbWFuZCAhPSBJUEFfQ01EX1NUQVJUTEFOICYmCisJICAgIGNhcmQtPm9zbl9pbmZvLmFzc2lzdF9jYiAhPSBOVUxMKSB7CisJCWNhcmQtPm9zbl9pbmZvLmFzc2lzdF9jYihjYXJkLT5kZXYsIGNtZCk7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcGx5LCByLCAmY2FyZC0+Y21kX3dhaXRlcl9saXN0LCBsaXN0KSB7CisJCWlmICgocmVwbHktPnNlcW5vID09IFFFVEhfSURYX0NPTU1BTkRfU0VRTk8pIHx8CisJCSAgICAoKGNtZCkgJiYgKHJlcGx5LT5zZXFubyA9PSBjbWQtPmhkci5zZXFubykpKSB7CisJCQlxZXRoX2dldF9yZXBseShyZXBseSk7CisJCQlsaXN0X2RlbF9pbml0KCZyZXBseS0+bGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCQlrZWVwX3JlcGx5ID0gMDsKKwkJCWlmIChyZXBseS0+Y2FsbGJhY2sgIT0gTlVMTCkgeworCQkJCWlmIChjbWQpIHsKKwkJCQkJcmVwbHktPm9mZnNldCA9IChfX3UxNikoKGNoYXIgKiljbWQgLQorCQkJCQkJCShjaGFyICopaW9iLT5kYXRhKTsKKwkJCQkJa2VlcF9yZXBseSA9IHJlcGx5LT5jYWxsYmFjayhjYXJkLAorCQkJCQkJCXJlcGx5LAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKWNtZCk7CisJCQkJfSBlbHNlCisJCQkJCWtlZXBfcmVwbHkgPSByZXBseS0+Y2FsbGJhY2soY2FyZCwKKwkJCQkJCQlyZXBseSwKKwkJCQkJCQkodW5zaWduZWQgbG9uZylpb2IpOworCQkJfQorCQkJaWYgKGNtZCkKKwkJCQlyZXBseS0+cmMgPSAodTE2KSBjbWQtPmhkci5yZXR1cm5fY29kZTsKKwkJCWVsc2UgaWYgKGlvYi0+cmMpCisJCQkJcmVwbHktPnJjID0gaW9iLT5yYzsKKwkJCWlmIChrZWVwX3JlcGx5KSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZyZXBseS0+bGlzdCwKKwkJCQkJICAgICAgJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQkJfSBlbHNlIHsKKwkJCQlhdG9taWNfaW5jKCZyZXBseS0+cmVjZWl2ZWQpOworCQkJCXdha2VfdXAoJnJlcGx5LT53YWl0X3EpOworCQkJfQorCQkJcWV0aF9wdXRfcmVwbHkocmVwbHkpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworb3V0OgorCW1lbWNweSgmY2FyZC0+c2Vxbm8ucGR1X2hkcl9hY2ssCisJCVFFVEhfUERVX0hFQURFUl9TRVFfTk8oaW9iLT5kYXRhKSwKKwkJUUVUSF9TRVFfTk9fTEVOR1RIKTsKKwlxZXRoX3JlbGVhc2VfYnVmZmVyKGNoYW5uZWwsIGlvYik7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9zZXR1cF9jaGFubmVsKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJaW50IGNudDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJzZXR1cGNoIik7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBRRVRIX0NNRF9CVUZGRVJfTk87IGNudCsrKSB7CisJCWNoYW5uZWwtPmlvYltjbnRdLmRhdGEgPSAoY2hhciAqKQorCQkJa21hbGxvYyhRRVRIX0JVRlNJWkUsIEdGUF9ETUF8R0ZQX0tFUk5FTCk7CisJCWlmIChjaGFubmVsLT5pb2JbY250XS5kYXRhID09IE5VTEwpCisJCQlicmVhazsKKwkJY2hhbm5lbC0+aW9iW2NudF0uc3RhdGUgPSBCVUZfU1RBVEVfRlJFRTsKKwkJY2hhbm5lbC0+aW9iW2NudF0uY2hhbm5lbCA9IGNoYW5uZWw7CisJCWNoYW5uZWwtPmlvYltjbnRdLmNhbGxiYWNrID0gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YV9jYjsKKwkJY2hhbm5lbC0+aW9iW2NudF0ucmMgPSAwOworCX0KKwlpZiAoY250IDwgUUVUSF9DTURfQlVGRkVSX05PKSB7CisJCXdoaWxlIChjbnQtLSA+IDApCisJCQlrZnJlZShjaGFubmVsLT5pb2JbY250XS5kYXRhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNoYW5uZWwtPmJ1Zl9ubyA9IDA7CisJY2hhbm5lbC0+aW9fYnVmX25vID0gMDsKKwlhdG9taWNfc2V0KCZjaGFubmVsLT5pcnFfcGVuZGluZywgMCk7CisJc3Bpbl9sb2NrX2luaXQoJmNoYW5uZWwtPmlvYl9sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWwtPndhaXRfcSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9zZXRfdGhyZWFkX3N0YXJ0X2JpdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQl1bnNpZ25lZCBsb25nIHRocmVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKKwlpZiAoIShjYXJkLT50aHJlYWRfYWxsb3dlZF9tYXNrICYgdGhyZWFkKSB8fAorCSAgICAgIChjYXJkLT50aHJlYWRfc3RhcnRfbWFzayAmIHRocmVhZCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwljYXJkLT50aHJlYWRfc3RhcnRfbWFzayB8PSB0aHJlYWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCit2b2lkIHFldGhfY2xlYXJfdGhyZWFkX3N0YXJ0X2JpdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKKwljYXJkLT50aHJlYWRfc3RhcnRfbWFzayAmPSB+dGhyZWFkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKKwl3YWtlX3VwKCZjYXJkLT53YWl0X3EpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jbGVhcl90aHJlYWRfc3RhcnRfYml0KTsKKwordm9pZCBxZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKKwljYXJkLT50aHJlYWRfcnVubmluZ19tYXNrICY9IH50aHJlYWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOworCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdCk7CisKK3N0YXRpYyBpbnQgX19xZXRoX2RvX3J1bl90aHJlYWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyB0aHJlYWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2FyZC0+dGhyZWFkX3N0YXJ0X21hc2sgJiB0aHJlYWQpIHsKKwkJaWYgKChjYXJkLT50aHJlYWRfYWxsb3dlZF9tYXNrICYgdGhyZWFkKSAmJgorCQkgICAgIShjYXJkLT50aHJlYWRfcnVubmluZ19tYXNrICYgdGhyZWFkKSkgeworCQkJcmMgPSAxOworCQkJY2FyZC0+dGhyZWFkX3N0YXJ0X21hc2sgJj0gfnRocmVhZDsKKwkJCWNhcmQtPnRocmVhZF9ydW5uaW5nX21hc2sgfD0gdGhyZWFkOworCQl9IGVsc2UKKwkJCXJjID0gLUVQRVJNOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJjOworfQorCitpbnQgcWV0aF9kb19ydW5fdGhyZWFkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgdGhyZWFkKQoreworCWludCByYyA9IDA7CisKKwl3YWl0X2V2ZW50KGNhcmQtPndhaXRfcSwKKwkJICAgKHJjID0gX19xZXRoX2RvX3J1bl90aHJlYWQoY2FyZCwgdGhyZWFkKSkgPj0gMCk7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9kb19ydW5fdGhyZWFkKTsKKwordm9pZCBxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInN0YXJ0cmVjIik7CisJaWYgKHFldGhfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkgPT0gMCkKKwkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfc2NoZWR1bGVfcmVjb3ZlcnkpOworCitzdGF0aWMgaW50IHFldGhfZ2V0X3Byb2JsZW0oc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwlpbnQgZHN0YXQsIGNzdGF0OworCWNoYXIgKnNlbnNlOworCisJc2Vuc2UgPSAoY2hhciAqKSBpcmItPmVjdzsKKwljc3RhdCA9IGlyYi0+c2Nzdy5jc3RhdDsKKwlkc3RhdCA9IGlyYi0+c2Nzdy5kc3RhdDsKKworCWlmIChjc3RhdCAmIChTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLIHwgU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAorCQkgICAgIFNDSE5fU1RBVF9DSE5fREFUQV9DSEsgfCBTQ0hOX1NUQVRfQ0hBSU5fQ0hFQ0sgfAorCQkgICAgIFNDSE5fU1RBVF9QUk9UX0NIRUNLIHwgU0NITl9TVEFUX1BST0dfQ0hFQ0spKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJDR0VOQ0hLIik7CisJCVBSSU5UX1dBUk4oImNoZWNrIG9uIGRldmljZSAlcywgZHN0YXQ9eCV4LCBjc3RhdD14JXggIiwKKwkJCSAgIGNkZXYtPmRldi5idXNfaWQsIGRzdGF0LCBjc3RhdCk7CisJCXByaW50X2hleF9kdW1wKEtFUk5fV0FSTklORywgInFldGg6IGlyYiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJMTYsIDEsIGlyYiwgNjQsIDEpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7CisJCWlmIChzZW5zZVtTRU5TRV9SRVNFVFRJTkdfRVZFTlRfQllURV0gJgorCQkgICAgU0VOU0VfUkVTRVRUSU5HX0VWRU5UX0ZMQUcpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJSRVZJTkQiKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChzZW5zZVtTRU5TRV9DT01NQU5EX1JFSkVDVF9CWVRFXSAmCisJCSAgICBTRU5TRV9DT01NQU5EX1JFSkVDVF9GTEFHKSB7CisJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiQ01EUkVKaSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKChzZW5zZVsyXSA9PSAweGFmKSAmJiAoc2Vuc2VbM10gPT0gMHhmZSkpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJBRkZFIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoKCFzZW5zZVswXSkgJiYgKCFzZW5zZVsxXSkgJiYgKCFzZW5zZVsyXSkgJiYgKCFzZW5zZVszXSkpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJaRVJPU0VOIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiREdFTkNISyIpOworCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBfX3FldGhfY2hlY2tfaXJiX2Vycm9yKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQl1bnNpZ25lZCBsb25nIGludHBhcm0sIHN0cnVjdCBpcmIgKmlyYikKK3sKKwlpZiAoIUlTX0VSUihpcmIpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoUFRSX0VSUihpcmIpKSB7CisJY2FzZSAtRUlPOgorCQlQUklOVF9XQVJOKCJpL28tZXJyb3Igb24gZGV2aWNlICVzXG4iLCBjZGV2LT5kZXYuYnVzX2lkKTsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNraXJiZXJyIik7CisJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiICByYyVkIiwgLUVJTyk7CisJCWJyZWFrOworCWNhc2UgLUVUSU1FRE9VVDoKKwkJUFJJTlRfV0FSTigidGltZW91dCBvbiBkZXZpY2UgJXNcbiIsIGNkZXYtPmRldi5idXNfaWQpOworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2tpcmJlcnIiKTsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIgIHJjJWQiLCAtRVRJTUVET1VUKTsKKwkJaWYgKGludHBhcm0gPT0gUUVUSF9SQ0RfUEFSTSkgeworCQkJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IENBUkRfRlJPTV9DREVWKGNkZXYpOworCisJCQlpZiAoY2FyZCAmJiAoY2FyZC0+ZGF0YS5jY3dkZXYgPT0gY2RldikpIHsKKwkJCQljYXJkLT5kYXRhLnN0YXRlID0gQ0hfU1RBVEVfRE9XTjsKKwkJCQl3YWtlX3VwKCZjYXJkLT53YWl0X3EpOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBSSU5UX1dBUk4oInVua25vd24gZXJyb3IgJWxkIG9uIGRldmljZSAlc1xuIiwgUFRSX0VSUihpcmIpLAorCQkJICAgY2Rldi0+ZGV2LmJ1c19pZCk7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJja2lyYmVyciIpOworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiICByYz8/PyIpOworCX0KKwlyZXR1cm4gUFRSX0VSUihpcmIpOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2lycShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAorCQlzdHJ1Y3QgaXJiICppcmIpCit7CisJaW50IHJjOworCWludCBjc3RhdCwgZHN0YXQ7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWw7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJX191OCBpbmRleDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJpcnEiKTsKKworCWlmIChfX3FldGhfY2hlY2tfaXJiX2Vycm9yKGNkZXYsIGludHBhcm0sIGlyYikpCisJCXJldHVybjsKKwljc3RhdCA9IGlyYi0+c2Nzdy5jc3RhdDsKKwlkc3RhdCA9IGlyYi0+c2Nzdy5kc3RhdDsKKworCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjZGV2KTsKKwlpZiAoIWNhcmQpCisJCXJldHVybjsKKworCWlmIChjYXJkLT5yZWFkLmNjd2RldiA9PSBjZGV2KSB7CisJCWNoYW5uZWwgPSAmY2FyZC0+cmVhZDsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgInJlYWQiKTsKKwl9IGVsc2UgaWYgKGNhcmQtPndyaXRlLmNjd2RldiA9PSBjZGV2KSB7CisJCWNoYW5uZWwgPSAmY2FyZC0+d3JpdGU7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJ3cml0ZSIpOworCX0gZWxzZSB7CisJCWNoYW5uZWwgPSAmY2FyZC0+ZGF0YTsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImRhdGEiKTsKKwl9CisJYXRvbWljX3NldCgmY2hhbm5lbC0+aXJxX3BlbmRpbmcsIDApOworCisJaWYgKGlyYi0+c2Nzdy5mY3RsICYgKFNDU1dfRkNUTF9DTEVBUl9GVU5DKSkKKwkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9TVE9QUEVEOworCisJaWYgKGlyYi0+c2Nzdy5mY3RsICYgKFNDU1dfRkNUTF9IQUxUX0ZVTkMpKQorCQljaGFubmVsLT5zdGF0ZSA9IENIX1NUQVRFX0hBTFRFRDsKKworCS8qbGV0J3Mgd2FrZSB1cCBpbW1lZGlhdGVseSBvbiBkYXRhIGNoYW5uZWwqLworCWlmICgoY2hhbm5lbCA9PSAmY2FyZC0+ZGF0YSkgJiYgKGludHBhcm0gIT0gMCkgJiYKKwkgICAgKGludHBhcm0gIT0gUUVUSF9SQ0RfUEFSTSkpCisJCWdvdG8gb3V0OworCisJaWYgKGludHBhcm0gPT0gUUVUSF9DTEVBUl9DSEFOTkVMX1BBUk0pIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImNscmNocGFyIik7CisJCS8qIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoaXMgZnVydGhlciAqLworCQlpbnRwYXJtID0gMDsKKwl9CisJaWYgKGludHBhcm0gPT0gUUVUSF9IQUxUX0NIQU5ORUxfUEFSTSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiaGx0Y2hwYXIiKTsKKwkJLyogd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhpcyBmdXJ0aGVyICovCisJCWludHBhcm0gPSAwOworCX0KKwlpZiAoKGRzdGF0ICYgREVWX1NUQVRfVU5JVF9FWENFUCkgfHwKKwkgICAgKGRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgfHwKKwkgICAgKGNzdGF0KSkgeworCQlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykgeworCQkJLyogVE9ETzogd2Ugc2hvdWxkIG1ha2UgdGhpcyBzMzkwZGJmICovCisJCQlQUklOVF9XQVJOKCJzZW5zZSBkYXRhIGF2YWlsYWJsZSBvbiBjaGFubmVsICVzLlxuIiwKKwkJCQkgICBDSEFOTkVMX0lEKGNoYW5uZWwpKTsKKwkJCVBSSU5UX1dBUk4oIiBjc3RhdCAweCVYXG4gZHN0YXQgMHglWFxuIiwgY3N0YXQsIGRzdGF0KTsKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fV0FSTklORywgInFldGg6IGlyYiAiLAorCQkJCURVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsIGlyYiwgMzIsIDEpOworCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9XQVJOSU5HLCAicWV0aDogc2Vuc2UgZGF0YSAiLAorCQkJCURVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsIGlyYi0+ZWN3LCAzMiwgMSk7CisJCX0KKwkJaWYgKGludHBhcm0gPT0gUUVUSF9SQ0RfUEFSTSkgeworCQkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9ET1dOOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmMgPSBxZXRoX2dldF9wcm9ibGVtKGNkZXYsIGlyYik7CisJCWlmIChyYykgeworCQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGludHBhcm0gPT0gUUVUSF9SQ0RfUEFSTSkgeworCQljaGFubmVsLT5zdGF0ZSA9IENIX1NUQVRFX1JDRF9ET05FOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGludHBhcm0pIHsKKwkJYnVmZmVyID0gKHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKikgX192YSgoYWRkcl90KWludHBhcm0pOworCQlidWZmZXItPnN0YXRlID0gQlVGX1NUQVRFX1BST0NFU1NFRDsKKwl9CisJaWYgKGNoYW5uZWwgPT0gJmNhcmQtPmRhdGEpCisJCXJldHVybjsKKwlpZiAoY2hhbm5lbCA9PSAmY2FyZC0+cmVhZCAmJgorCSAgICBjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9VUCkKKwkJcWV0aF9pc3N1ZV9uZXh0X3JlYWQoY2FyZCk7CisKKwlpb2IgPSBjaGFubmVsLT5pb2I7CisJaW5kZXggPSBjaGFubmVsLT5idWZfbm87CisJd2hpbGUgKGlvYltpbmRleF0uc3RhdGUgPT0gQlVGX1NUQVRFX1BST0NFU1NFRCkgeworCQlpZiAoaW9iW2luZGV4XS5jYWxsYmFjayAhPSBOVUxMKQorCQkJaW9iW2luZGV4XS5jYWxsYmFjayhjaGFubmVsLCBpb2IgKyBpbmRleCk7CisKKwkJaW5kZXggPSAoaW5kZXggKyAxKSAlIFFFVEhfQ01EX0JVRkZFUl9OTzsKKwl9CisJY2hhbm5lbC0+YnVmX25vID0gaW5kZXg7CitvdXQ6CisJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKKwkJIHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQoreworCWludCBpOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBpcyBQQ0kgZmxhZyBzZXQgb24gYnVmZmVyPyAqLworCWlmIChidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5mbGFncyAmIDB4NDApCisJCWF0b21pY19kZWMoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KTsKKworCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKKwl3aGlsZSAoc2tiKSB7CisJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlza2IgPSBza2JfZGVxdWV1ZSgmYnVmLT5za2JfbGlzdCk7CisJfQorCXFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhidWYpOworCWZvciAoaSA9IDA7IGkgPCBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpOyArK2kpIHsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0ubGVuZ3RoID0gMDsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciA9IE5VTEw7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gMDsKKwl9CisJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA9IDA7CisJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9FTVBUWSk7Cit9CisKK3ZvaWQgcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgaSwgajsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjbGVhcnFkYmYiKTsKKwkvKiBjbGVhciBvdXRib3VuZCBidWZmZXJzIHRvIGZyZWUgc2ticyAqLworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXM7ICsraSkKKwkJaWYgKGNhcmQtPnFkaW8ub3V0X3FzW2ldKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgKytqKQorCQkJCXFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihjYXJkLT5xZGlvLm91dF9xc1tpXSwKKwkJCQkJCSZjYXJkLT5xZGlvLm91dF9xc1tpXS0+YnVmc1tqXSk7CisJCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfY2xlYXJfcWRpb19idWZmZXJzKTsKKworc3RhdGljIHZvaWQgcWV0aF9mcmVlX2J1ZmZlcl9wb29sKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHFldGhfYnVmZmVyX3Bvb2xfZW50cnkgKnBvb2xfZW50cnksICp0bXA7CisJaW50IGkgPSAwOworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJmcmVlcG9vbCIpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb29sX2VudHJ5LCB0bXAsCisJCQkJICZjYXJkLT5xZGlvLmluaXRfcG9vbC5lbnRyeV9saXN0LCBpbml0X2xpc3QpeworCQlmb3IgKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpCisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcG9vbF9lbnRyeS0+ZWxlbWVudHNbaV0pOworCQlsaXN0X2RlbCgmcG9vbF9lbnRyeS0+aW5pdF9saXN0KTsKKwkJa2ZyZWUocG9vbF9lbnRyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBxZXRoX2ZyZWVfcWRpb19idWZmZXJzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IGksIGo7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZnJlZXFkYmYiKTsKKwlpZiAoYXRvbWljX3hjaGcoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19VTklOSVRJQUxJWkVEKSA9PQorCQlRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkKKwkJcmV0dXJuOworCWtmcmVlKGNhcmQtPnFkaW8uaW5fcSk7CisJY2FyZC0+cWRpby5pbl9xID0gTlVMTDsKKwkvKiBpbmJvdW5kIGJ1ZmZlciBwb29sICovCisJcWV0aF9mcmVlX2J1ZmZlcl9wb29sKGNhcmQpOworCS8qIGZyZWUgb3V0Ym91bmQgcWRpb19xcyAqLworCWlmIChjYXJkLT5xZGlvLm91dF9xcykgeworCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzOyArK2kpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyArK2opCisJCQkJcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKGNhcmQtPnFkaW8ub3V0X3FzW2ldLAorCQkJCQkJJmNhcmQtPnFkaW8ub3V0X3FzW2ldLT5idWZzW2pdKTsKKwkJCWtmcmVlKGNhcmQtPnFkaW8ub3V0X3FzW2ldKTsKKwkJfQorCQlrZnJlZShjYXJkLT5xZGlvLm91dF9xcyk7CisJCWNhcmQtPnFkaW8ub3V0X3FzID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfY2xlYW5fY2hhbm5lbChzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsKQoreworCWludCBjbnQ7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZnJlZWNoIik7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBRRVRIX0NNRF9CVUZGRVJfTk87IGNudCsrKQorCQlrZnJlZShjaGFubmVsLT5pb2JbY250XS5kYXRhKTsKK30KKworc3RhdGljIGludCBxZXRoX2lzXzE5MjBfZGV2aWNlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHNpbmdsZV9xdWV1ZSA9IDA7CisJc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKKwlzdHJ1Y3QgY2hhbm5lbFBhdGhfZHNjIHsKKwkJdTggZmxhZ3M7CisJCXU4IGxzbjsKKwkJdTggZGVzYzsKKwkJdTggY2hwaWQ7CisJCXU4IHN3bGE7CisJCXU4IHplcm9lczsKKwkJdTggY2hsYTsKKwkJdTggY2hwcDsKKwl9ICpjaHBfZHNjOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImNoa18xOTIwIik7CisKKwljY3dkZXYgPSBjYXJkLT5kYXRhLmNjd2RldjsKKwljaHBfZHNjID0gKHN0cnVjdCBjaGFubmVsUGF0aF9kc2MgKiljY3dfZGV2aWNlX2dldF9jaHBfZGVzYyhjY3dkZXYsIDApOworCWlmIChjaHBfZHNjICE9IE5VTEwpIHsKKwkJLyogQ0hQUCBmaWVsZCBiaXQgNiA9PSAxIC0+IHNpbmdsZSBxdWV1ZSAqLworCQlzaW5nbGVfcXVldWUgPSAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKTsKKwkJa2ZyZWUoY2hwX2RzYyk7CisJfQorCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAicmM6JXgiLCBzaW5nbGVfcXVldWUpOworCXJldHVybiBzaW5nbGVfcXVldWU7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfaW5pdF9xZGlvX2luZm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCA0LCAiaW50cWRpbmYiKTsKKwlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCk7CisJLyogaW5ib3VuZCAqLworCWNhcmQtPnFkaW8uaW5fYnVmX3NpemUgPSBRRVRIX0lOX0JVRl9TSVpFX0RFRkFVTFQ7CisJY2FyZC0+cWRpby5pbml0X3Bvb2wuYnVmX2NvdW50ID0gUUVUSF9JTl9CVUZfQ09VTlRfREVGQVVMVDsKKwljYXJkLT5xZGlvLmluX2J1Zl9wb29sLmJ1Zl9jb3VudCA9IGNhcmQtPnFkaW8uaW5pdF9wb29sLmJ1Zl9jb3VudDsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cWRpby5pbl9idWZfcG9vbC5lbnRyeV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cWRpby5pbml0X3Bvb2wuZW50cnlfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfc2V0X2ludGlhbF9vcHRpb25zKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJY2FyZC0+b3B0aW9ucy5yb3V0ZTQudHlwZSA9IE5PX1JPVVRFUjsKKwljYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlID0gTk9fUk9VVEVSOworCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IFFFVEhfQ0hFQ0tTVU1fREVGQVVMVDsKKwljYXJkLT5vcHRpb25zLmJyb2FkY2FzdF9tb2RlID0gUUVUSF9UUl9CUk9BRENBU1RfQUxMUklOR1M7CisJY2FyZC0+b3B0aW9ucy5tYWNhZGRyX21vZGUgPSBRRVRIX1RSX01BQ0FERFJfTk9OQ0FOT05JQ0FMOworCWNhcmQtPm9wdGlvbnMuZmFrZV9icm9hZGNhc3QgPSAwOworCWNhcmQtPm9wdGlvbnMuYWRkX2hobGVuID0gREVGQVVMVF9BRERfSEhMRU47CisJY2FyZC0+b3B0aW9ucy5mYWtlX2xsID0gMDsKKwljYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzID0gMDsKKwljYXJkLT5vcHRpb25zLnJ4X3NnX2NiID0gUUVUSF9SWF9TR19DQjsKK30KKworc3RhdGljIGludCBxZXRoX2RvX3N0YXJ0X3RocmVhZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOworCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAiICAlMDJ4JTAyeCUwMngiLAorCQkJKHU4KSBjYXJkLT50aHJlYWRfc3RhcnRfbWFzaywKKwkJCSh1OCkgY2FyZC0+dGhyZWFkX2FsbG93ZWRfbWFzaywKKwkJCSh1OCkgY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayk7CisJcmMgPSAoY2FyZC0+dGhyZWFkX3N0YXJ0X21hc2sgJiB0aHJlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfc3RhcnRfa2VybmVsX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWV0aF9jYXJkLAorCQkJCQlrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOworCVFFVEhfREJGX1RFWFQoVFJBQ0UgLCAyLCAic3RydGhyZCIpOworCisJaWYgKGNhcmQtPnJlYWQuc3RhdGUgIT0gQ0hfU1RBVEVfVVAgJiYKKwkgICAgY2FyZC0+d3JpdGUuc3RhdGUgIT0gQ0hfU1RBVEVfVVApCisJCXJldHVybjsKKwlpZiAocWV0aF9kb19zdGFydF90aHJlYWQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpCisJCWt0aHJlYWRfcnVuKGNhcmQtPmRpc2NpcGxpbmUucmVjb3ZlciwgKHZvaWQgKikgY2FyZCwKKwkJCQkicWV0aF9yZWNvdmVyIik7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9zZXR1cF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic2V0dXBjcmQiKTsKKwlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CisKKwljYXJkLT5yZWFkLnN0YXRlICA9IENIX1NUQVRFX0RPV047CisJY2FyZC0+d3JpdGUuc3RhdGUgPSBDSF9TVEFURV9ET1dOOworCWNhcmQtPmRhdGEuc3RhdGUgID0gQ0hfU1RBVEVfRE9XTjsKKwljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfRE9XTjsKKwljYXJkLT5sYW5fb25saW5lID0gMDsKKwljYXJkLT51c2VfaGFyZF9zdG9wID0gMDsKKwljYXJkLT5kZXYgPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT52bGFubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPm1jbG9jayk7CisJY2FyZC0+dmxhbmdycCA9IE5VTEw7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5pcF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+dGhyZWFkX21hc2tfbG9jayk7CisJY2FyZC0+dGhyZWFkX3N0YXJ0X21hc2sgPSAwOworCWNhcmQtPnRocmVhZF9hbGxvd2VkX21hc2sgPSAwOworCWNhcmQtPnRocmVhZF9ydW5uaW5nX21hc2sgPSAwOworCUlOSVRfV09SSygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyLCBxZXRoX3N0YXJ0X2tlcm5lbF90aHJlYWQpOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5pcF9saXN0KTsKKwljYXJkLT5pcF90YmRfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPmlwX3RiZF9saXN0KSB7CisJCVFFVEhfREJGX1RFWFQoU0VUVVAsIDAsICJpcHRiZG5vbSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoY2FyZC0+aXBfdGJkX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jbWRfd2FpdGVyX2xpc3QpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPndhaXRfcSk7CisJLyogaW50aWFsIG9wdGlvbnMgKi8KKwlxZXRoX3NldF9pbnRpYWxfb3B0aW9ucyhjYXJkKTsKKwkvKiBJUCBhZGRyZXNzIHRha2VvdmVyICovCisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmlwYXRvLmVudHJpZXMpOworCWNhcmQtPmlwYXRvLmVuYWJsZWQgPSAwOworCWNhcmQtPmlwYXRvLmludmVydDQgPSAwOworCWNhcmQtPmlwYXRvLmludmVydDYgPSAwOworCS8qIGluaXQgUURJTyBzdHVmZiAqLworCXFldGhfaW5pdF9xZGlvX2luZm8oY2FyZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcWV0aF9jYXJkICpxZXRoX2FsbG9jX2NhcmQodm9pZCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImFsbG9jY3JkIik7CisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2NhcmQpLCBHRlBfRE1BfEdGUF9LRVJORUwpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIE5VTEw7CisJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOworCWlmIChxZXRoX3NldHVwX2NoYW5uZWwoJmNhcmQtPnJlYWQpKSB7CisJCWtmcmVlKGNhcmQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHFldGhfc2V0dXBfY2hhbm5lbCgmY2FyZC0+d3JpdGUpKSB7CisJCXFldGhfY2xlYW5fY2hhbm5lbCgmY2FyZC0+cmVhZCk7CisJCWtmcmVlKGNhcmQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAtMTsKKwlyZXR1cm4gY2FyZDsKK30KKworc3RhdGljIGludCBxZXRoX2RldGVybWluZV9jYXJkX3R5cGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgaSA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGV0Y2R0eXAiKTsKKworCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfUFJJT1FfREVGQVVMVDsKKwljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gUUVUSF9ERUZBVUxUX1FVRVVFOworCXdoaWxlIChrbm93bl9kZXZpY2VzW2ldWzRdKSB7CisJCWlmICgoQ0FSRF9SREVWKGNhcmQpLT5pZC5kZXZfdHlwZSA9PSBrbm93bl9kZXZpY2VzW2ldWzJdKSAmJgorCQkgICAgKENBUkRfUkRFVihjYXJkKS0+aWQuZGV2X21vZGVsID09IGtub3duX2RldmljZXNbaV1bM10pKSB7CisJCQljYXJkLT5pbmZvLnR5cGUgPSBrbm93bl9kZXZpY2VzW2ldWzRdOworCQkJY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID0ga25vd25fZGV2aWNlc1tpXVs4XTsKKwkJCWNhcmQtPmluZm8uaXNfbXVsdGljYXN0X2RpZmZlcmVudCA9IGtub3duX2RldmljZXNbaV1bOV07CisJCQlpZiAocWV0aF9pc18xOTIwX2RldmljZShjYXJkKSkgeworCQkJCVBSSU5UX0lORk8oIlByaW9yaXR5IFF1ZXVlaW5nIG5vdCBhYmxlICIKKwkJCQkJICAgImR1ZSB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucyFcbiIpOworCQkJCWNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9IDE7CisJCQkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDA7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpKys7CisJfQorCWNhcmQtPmluZm8udHlwZSA9IFFFVEhfQ0FSRF9UWVBFX1VOS05PV047CisJUFJJTlRfRVJSKCJ1bmtub3duIGNhcmQgdHlwZSBvbiBkZXZpY2UgJXNcbiIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBxZXRoX2NsZWFyX2NoYW5uZWwoc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImNsZWFyY2giKTsKKwljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOworCXJjID0gY2N3X2RldmljZV9jbGVhcihjaGFubmVsLT5jY3dkZXYsIFFFVEhfQ0xFQVJfQ0hBTk5FTF9QQVJNKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGNhcmQtPndhaXRfcSwKKwkJCWNoYW5uZWwtPnN0YXRlID09IENIX1NUQVRFX1NUT1BQRUQsIFFFVEhfVElNRU9VVCk7CisJaWYgKHJjID09IC1FUkVTVEFSVFNZUykKKwkJcmV0dXJuIHJjOworCWlmIChjaGFubmVsLT5zdGF0ZSAhPSBDSF9TVEFURV9TVE9QUEVEKQorCQlyZXR1cm4gLUVUSU1FOworCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfRE9XTjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2hhbHRfY2hhbm5lbChzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaGFsdGNoIik7CisJY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7CisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKKwlyYyA9IGNjd19kZXZpY2VfaGFsdChjaGFubmVsLT5jY3dkZXYsIFFFVEhfSEFMVF9DSEFOTkVMX1BBUk0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKKworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY2FyZC0+d2FpdF9xLAorCQkJY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfSEFMVEVELCBRRVRIX1RJTUVPVVQpOworCWlmIChyYyA9PSAtRVJFU1RBUlRTWVMpCisJCXJldHVybiByYzsKKwlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gQ0hfU1RBVEVfSEFMVEVEKQorCQlyZXR1cm4gLUVUSU1FOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFldGhfaGFsdF9jaGFubmVscyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzEgPSAwLCByYzIgPSAwLCByYzMgPSAwOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImhhbHRjaHMiKTsKKwlyYzEgPSBxZXRoX2hhbHRfY2hhbm5lbCgmY2FyZC0+cmVhZCk7CisJcmMyID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPndyaXRlKTsKKwlyYzMgPSBxZXRoX2hhbHRfY2hhbm5lbCgmY2FyZC0+ZGF0YSk7CisJaWYgKHJjMSkKKwkJcmV0dXJuIHJjMTsKKwlpZiAocmMyKQorCQlyZXR1cm4gcmMyOworCXJldHVybiByYzM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9jbGVhcl9jaGFubmVscyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzEgPSAwLCByYzIgPSAwLCByYzMgPSAwOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImNsZWFyY2hzIik7CisJcmMxID0gcWV0aF9jbGVhcl9jaGFubmVsKCZjYXJkLT5yZWFkKTsKKwlyYzIgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPndyaXRlKTsKKwlyYzMgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPmRhdGEpOworCWlmIChyYzEpCisJCXJldHVybiByYzE7CisJaWYgKHJjMikKKwkJcmV0dXJuIHJjMjsKKwlyZXR1cm4gcmMzOworfQorCitzdGF0aWMgaW50IHFldGhfY2xlYXJfaGFsdF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBoYWx0KQoreworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiY2xoYWNyZCIpOworCVFFVEhfREJGX0hFWChUUkFDRSwgMywgJmNhcmQsIHNpemVvZih2b2lkICopKTsKKworCWlmIChoYWx0KQorCQlyYyA9IHFldGhfaGFsdF9jaGFubmVscyhjYXJkKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyZXR1cm4gcWV0aF9jbGVhcl9jaGFubmVscyhjYXJkKTsKK30KKworaW50IHFldGhfcWRpb19jbGVhcl9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCB1c2VfaGFsdCkKK3sKKwlpbnQgcmMgPSAwOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInFkaW9jbHIiKTsKKwlzd2l0Y2ggKGF0b21pY19jbXB4Y2hnKCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fRVNUQUJMSVNIRUQsCisJCVFFVEhfUURJT19DTEVBTklORykpIHsKKwljYXNlIFFFVEhfUURJT19FU1RBQkxJU0hFRDoKKwkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCisJCQlyYyA9IHFkaW9fY2xlYW51cChDQVJEX0RERVYoY2FyZCksCisJCQkJUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfSEFMVCk7CisJCWVsc2UKKwkJCXJjID0gcWRpb19jbGVhbnVwKENBUkRfRERFVihjYXJkKSwKKwkJCQlRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7CisJCWlmIChyYykKKwkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAzLCAiMWVyciVkIiwgcmMpOworCQlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fQUxMT0NBVEVEKTsKKwkJYnJlYWs7CisJY2FzZSBRRVRIX1FESU9fQ0xFQU5JTkc6CisJCXJldHVybiByYzsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmMgPSBxZXRoX2NsZWFyX2hhbHRfY2FyZChjYXJkLCB1c2VfaGFsdCk7CisJaWYgKHJjKQorCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMywgIjJlcnIlZCIsIHJjKTsKKwljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfRE9XTjsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3FkaW9fY2xlYXJfY2FyZCk7CisKK3N0YXRpYyBpbnQgcWV0aF9yZWFkX2NvbmZfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB2b2lkICoqYnVmZmVyLAorCQkJICAgICAgIGludCAqbGVuZ3RoKQoreworCXN0cnVjdCBjaXcgKmNpdzsKKwljaGFyICpyY2RfYnVmOworCWludCByZXQ7CisJc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCA9ICZjYXJkLT5kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIHNjYW4gZm9yIFJDRCBjb21tYW5kIGluIGV4dGVuZGVkIFNlbnNlSUQgZGF0YQorCSAqLworCWNpdyA9IGNjd19kZXZpY2VfZ2V0X2NpdyhjaGFubmVsLT5jY3dkZXYsIENJV19UWVBFX1JDRCk7CisJaWYgKCFjaXcgfHwgY2l3LT5jbWQgPT0gMCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJjZF9idWYgPSBremFsbG9jKGNpdy0+Y291bnQsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIXJjZF9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJY2hhbm5lbC0+Y2N3LmNtZF9jb2RlID0gY2l3LT5jbWQ7CisJY2hhbm5lbC0+Y2N3LmNkYSA9IChfX3UzMikgX19wYShyY2RfYnVmKTsKKwljaGFubmVsLT5jY3cuY291bnQgPSBjaXctPmNvdW50OworCWNoYW5uZWwtPmNjdy5mbGFncyA9IENDV19GTEFHX1NMSTsKKwljaGFubmVsLT5zdGF0ZSA9IENIX1NUQVRFX1JDRDsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOworCXJldCA9IGNjd19kZXZpY2Vfc3RhcnRfdGltZW91dChjaGFubmVsLT5jY3dkZXYsICZjaGFubmVsLT5jY3csCisJCQkJICAgICAgIFFFVEhfUkNEX1BBUk0sIExQTV9BTllQQVRILCAwLAorCQkJCSAgICAgICBRRVRIX1JDRF9USU1FT1VUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CisJaWYgKCFyZXQpCisJCXdhaXRfZXZlbnQoY2FyZC0+d2FpdF9xLAorCQkJICAgKGNoYW5uZWwtPnN0YXRlID09IENIX1NUQVRFX1JDRF9ET05FIHx8CisJCQkgICAgY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfRE9XTikpOworCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9ET1dOKQorCQlyZXQgPSAtRUlPOworCWVsc2UKKwkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9ET1dOOworCWlmIChyZXQpIHsKKwkJa2ZyZWUocmNkX2J1Zik7CisJCSpidWZmZXIgPSBOVUxMOworCQkqbGVuZ3RoID0gMDsKKwl9IGVsc2UgeworCQkqbGVuZ3RoID0gY2l3LT5jb3VudDsKKwkJKmJ1ZmZlciA9IHJjZF9idWY7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9nZXRfdW5pdGFkZHIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgbGVuZ3RoOworCWNoYXIgKnByY2Q7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImdldHVuaXQiKTsKKwlyYyA9IHFldGhfcmVhZF9jb25mX2RhdGEoY2FyZCwgKHZvaWQgKiopICZwcmNkLCAmbGVuZ3RoKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfRVJSKCJxZXRoX3JlYWRfY29uZl9kYXRhIGZvciBkZXZpY2UgJXMgcmV0dXJuZWQgJWlcbiIsCisJCQlDQVJEX0RERVZfSUQoY2FyZCksIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwljYXJkLT5pbmZvLmNocGlkID0gcHJjZFszMF07CisJY2FyZC0+aW5mby51bml0X2FkZHIyID0gcHJjZFszMV07CisJY2FyZC0+aW5mby5jdWxhID0gcHJjZFs2M107CisJY2FyZC0+aW5mby5ndWVzdGxhbiA9ICgocHJjZFsweDEwXSA9PSBfYXNjZWJjWydWJ10pICYmCisJCQkgICAgICAgKHByY2RbMHgxMV0gPT0gX2FzY2ViY1snTSddKSk7CisJa2ZyZWUocHJjZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfaW5pdF90b2tlbnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwljYXJkLT50b2tlbi5pc3N1ZXJfcm1fdyA9IDB4MDAwMTAxMDNVTDsKKwljYXJkLT50b2tlbi5jbV9maWx0ZXJfdyA9IDB4MDAwMTAxMDhVTDsKKwljYXJkLT50b2tlbi5jbV9jb25uZWN0aW9uX3cgPSAweDAwMDEwMTBhVUw7CisJY2FyZC0+dG9rZW4udWxwX2ZpbHRlcl93ID0gMHgwMDAxMDEwYlVMOworCWNhcmQtPnRva2VuLnVscF9jb25uZWN0aW9uX3cgPSAweDAwMDEwMTBkVUw7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfaW5pdF9mdW5jX2xldmVsKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaWYgKGNhcmQtPmlwYXRvLmVuYWJsZWQpIHsKKwkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCisJCQkJY2FyZC0+aW5mby5mdW5jX2xldmVsID0KKwkJCQkJUUVUSF9JRFhfRlVOQ19MRVZFTF9JUURfRU5BX0lQQVQ7CisJCWVsc2UKKwkJCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPQorCQkJCQlRRVRIX0lEWF9GVU5DX0xFVkVMX09TQUVfRU5BX0lQQVQ7CisJfSBlbHNlIHsKKwkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCisJCS8qRklYTUU6d2h5IGRvIHdlIGhhdmUgc2FtZSB2YWx1ZXMgZm9yICBkaXMgYW5kIGVuYSBmb3IKKwkJICBvc2FlPz8/ICovCisJCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPQorCQkJCVFFVEhfSURYX0ZVTkNfTEVWRUxfSVFEX0RJU19JUEFUOworCQllbHNlCisJCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPQorCQkJCVFFVEhfSURYX0ZVTkNfTEVWRUxfT1NBRV9ESVNfSVBBVDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MTYgcWV0aF9yYXdfZGV2bm9fZnJvbV9idXNfaWQoY2hhciAqaWQpCit7CisJaWQgKz0gKHN0cmxlbihpZCkgLSA0KTsKKwlyZXR1cm4gKF9fdTE2KSBzaW1wbGVfc3RydG91bChpZCwgJmlkLCAxNik7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9pZHhfYWN0aXZhdGVfZ2V0X2Fuc3dlcihzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsLAorCQl2b2lkICgqaWR4X3JlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jaGFubmVsICosCisJCQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICopKQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImlkeGFuc3dyIik7CisJY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7CisJaW9iID0gcWV0aF9nZXRfYnVmZmVyKGNoYW5uZWwpOworCWlvYi0+Y2FsbGJhY2sgPSBpZHhfcmVwbHlfY2I7CisJbWVtY3B5KCZjaGFubmVsLT5jY3csIFJFQURfQ0NXLCBzaXplb2Yoc3RydWN0IGNjdzEpKTsKKwljaGFubmVsLT5jY3cuY291bnQgPSBRRVRIX0JVRlNJWkU7CisJY2hhbm5lbC0+Y2N3LmNkYSA9IChfX3UzMikgX19wYShpb2ItPmRhdGEpOworCisJd2FpdF9ldmVudChjYXJkLT53YWl0X3EsCisJCSAgIGF0b21pY19jbXB4Y2hnKCZjaGFubmVsLT5pcnFfcGVuZGluZywgMCwgMSkgPT0gMCk7CisJUUVUSF9EQkZfVEVYVChTRVRVUCwgNiwgIm5vaXJxcG5kIik7CisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKKwlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2hhbm5lbC0+Y2N3ZGV2LAorCQkJICAgICAgJmNoYW5uZWwtPmNjdywgKGFkZHJfdCkgaW9iLCAwLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CisKKwlpZiAocmMpIHsKKwkJUFJJTlRfRVJSKCJFcnJvcjIgaW4gYWN0aXZhdGluZyBjaGFubmVsIHJjPSVkXG4iLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCQlhdG9taWNfc2V0KCZjaGFubmVsLT5pcnFfcGVuZGluZywgMCk7CisJCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7CisJCXJldHVybiByYzsKKwl9CisJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChjYXJkLT53YWl0X3EsCisJCQkgY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfVVAsIFFFVEhfVElNRU9VVCk7CisJaWYgKHJjID09IC1FUkVTVEFSVFNZUykKKwkJcmV0dXJuIHJjOworCWlmIChjaGFubmVsLT5zdGF0ZSAhPSBDSF9TVEFURV9VUCkgeworCQlyYyA9IC1FVElNRTsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7CisJCXFldGhfY2xlYXJfY21kX2J1ZmZlcnMoY2hhbm5lbCk7CisJfSBlbHNlCisJCXJjID0gMDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9pZHhfYWN0aXZhdGVfY2hhbm5lbChzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsLAorCQl2b2lkICgqaWR4X3JlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jaGFubmVsICosCisJCQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICopKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX191MTYgdGVtcDsKKwlfX3U4IHRtcDsKKwlpbnQgcmM7CisKKwljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJpZHhhY3RjaCIpOworCisJaW9iID0gcWV0aF9nZXRfYnVmZmVyKGNoYW5uZWwpOworCWlvYi0+Y2FsbGJhY2sgPSBpZHhfcmVwbHlfY2I7CisJbWVtY3B5KCZjaGFubmVsLT5jY3csIFdSSVRFX0NDVywgc2l6ZW9mKHN0cnVjdCBjY3cxKSk7CisJY2hhbm5lbC0+Y2N3LmNvdW50ID0gSURYX0FDVElWQVRFX1NJWkU7CisJY2hhbm5lbC0+Y2N3LmNkYSA9IChfX3UzMikgX19wYShpb2ItPmRhdGEpOworCWlmIChjaGFubmVsID09ICZjYXJkLT53cml0ZSkgeworCQltZW1jcHkoaW9iLT5kYXRhLCBJRFhfQUNUSVZBVEVfV1JJVEUsIElEWF9BQ1RJVkFURV9TSVpFKTsKKwkJbWVtY3B5KFFFVEhfVFJBTlNQT1JUX0hFQURFUl9TRVFfTk8oaW9iLT5kYXRhKSwKKwkJICAgICAgICZjYXJkLT5zZXFuby50cmFuc19oZHIsIFFFVEhfU0VRX05PX0xFTkdUSCk7CisJCWNhcmQtPnNlcW5vLnRyYW5zX2hkcisrOworCX0gZWxzZSB7CisJCW1lbWNweShpb2ItPmRhdGEsIElEWF9BQ1RJVkFURV9SRUFELCBJRFhfQUNUSVZBVEVfU0laRSk7CisJCW1lbWNweShRRVRIX1RSQU5TUE9SVF9IRUFERVJfU0VRX05PKGlvYi0+ZGF0YSksCisJCSAgICAgICAmY2FyZC0+c2Vxbm8udHJhbnNfaGRyLCBRRVRIX1NFUV9OT19MRU5HVEgpOworCX0KKwl0bXAgPSAoKF9fdTgpY2FyZC0+aW5mby5wb3J0bm8pIHwgMHg4MDsKKwltZW1jcHkoUUVUSF9JRFhfQUNUX1BOTyhpb2ItPmRhdGEpLCAmdG1wLCAxKTsKKwltZW1jcHkoUUVUSF9JRFhfQUNUX0lTU1VFUl9STV9UT0tFTihpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+dG9rZW4uaXNzdWVyX3JtX3csIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7CisJbWVtY3B5KFFFVEhfSURYX0FDVF9GVU5DX0xFVkVMKGlvYi0+ZGF0YSksCisJICAgICAgICZjYXJkLT5pbmZvLmZ1bmNfbGV2ZWwsIHNpemVvZihfX3UxNikpOworCXRlbXAgPSBxZXRoX3Jhd19kZXZub19mcm9tX2J1c19pZChDQVJEX0RERVZfSUQoY2FyZCkpOworCW1lbWNweShRRVRIX0lEWF9BQ1RfUURJT19ERVZfQ1VBKGlvYi0+ZGF0YSksICZ0ZW1wLCAyKTsKKwl0ZW1wID0gKGNhcmQtPmluZm8uY3VsYSA8PCA4KSArIGNhcmQtPmluZm8udW5pdF9hZGRyMjsKKwltZW1jcHkoUUVUSF9JRFhfQUNUX1FESU9fREVWX1JFQUxBRERSKGlvYi0+ZGF0YSksICZ0ZW1wLCAyKTsKKworCXdhaXRfZXZlbnQoY2FyZC0+d2FpdF9xLAorCQkgICBhdG9taWNfY21weGNoZygmY2hhbm5lbC0+aXJxX3BlbmRpbmcsIDAsIDEpID09IDApOworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDYsICJub2lycXBuZCIpOworCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CisJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoYW5uZWwtPmNjd2RldiwKKwkJCSAgICAgICZjaGFubmVsLT5jY3csIChhZGRyX3QpIGlvYiwgMCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOworCisJaWYgKHJjKSB7CisJCVBSSU5UX0VSUigiRXJyb3IxIGluIGFjdGl2YXRpbmcgY2hhbm5lbC4gcmM9JWRcbiIsIHJjKTsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIxZXJyJWQiLCByYyk7CisJCWF0b21pY19zZXQoJmNoYW5uZWwtPmlycV9wZW5kaW5nLCAwKTsKKwkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGNhcmQtPndhaXRfcSwKKwkJCWNoYW5uZWwtPnN0YXRlID09IENIX1NUQVRFX0FDVElWQVRJTkcsIFFFVEhfVElNRU9VVCk7CisJaWYgKHJjID09IC1FUkVTVEFSVFNZUykKKwkJcmV0dXJuIHJjOworCWlmIChjaGFubmVsLT5zdGF0ZSAhPSBDSF9TVEFURV9BQ1RJVkFUSU5HKSB7CisJCVBSSU5UX1dBUk4oIklEWCBhY3RpdmF0ZSB0aW1lZCBvdXQhXG4iKTsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCAtRVRJTUUpOworCQlxZXRoX2NsZWFyX2NtZF9idWZmZXJzKGNoYW5uZWwpOworCQlyZXR1cm4gLUVUSU1FOworCX0KKwlyZXR1cm4gcWV0aF9pZHhfYWN0aXZhdGVfZ2V0X2Fuc3dlcihjaGFubmVsLCBpZHhfcmVwbHlfY2IpOworfQorCitzdGF0aWMgaW50IHFldGhfcGVlcl9mdW5jX2xldmVsKGludCBsZXZlbCkKK3sKKwlpZiAoKGxldmVsICYgMHhmZikgPT0gOCkKKwkJcmV0dXJuIChsZXZlbCAmIDB4ZmYpICsgMHg0MDA7CisJaWYgKCgobGV2ZWwgPj4gOCkgJiAzKSA9PSAxKQorCQlyZXR1cm4gKGxldmVsICYgMHhmZikgKyAweDIwMDsKKwlyZXR1cm4gbGV2ZWw7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfaWR4X3dyaXRlX2NiKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwsCisJCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCV9fdTE2IHRlbXA7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQICwgMiwgImlkeHdyY2IiKTsKKworCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9ET1dOKSB7CisJCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfQUNUSVZBVElORzsKKwkJZ290byBvdXQ7CisJfQorCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjaGFubmVsLT5jY3dkZXYpOworCisJaWYgKCEoUUVUSF9JU19JRFhfQUNUX1BPU19SRVBMWShpb2ItPmRhdGEpKSkgeworCQlpZiAoUUVUSF9JRFhfQUNUX0NBVVNFX0NPREUoaW9iLT5kYXRhKSA9PSAweDE5KQorCQkJUFJJTlRfRVJSKCJJRFhfQUNUSVZBVEUgb24gd3JpdGUgY2hhbm5lbCBkZXZpY2UgJXM6ICIKKwkJCQkiYWRhcHRlciBleGNsdXNpdmVseSB1c2VkIGJ5IGFub3RoZXIgaG9zdFxuIiwKKwkJCUNBUkRfV0RFVl9JRChjYXJkKSk7CisJCWVsc2UKKwkJCVBSSU5UX0VSUigiSURYX0FDVElWQVRFIG9uIHdyaXRlIGNoYW5uZWwgZGV2aWNlICVzOiAiCisJCQkJIm5lZ2F0aXZlIHJlcGx5XG4iLCBDQVJEX1dERVZfSUQoY2FyZCkpOworCQlnb3RvIG91dDsKKwl9CisJbWVtY3B5KCZ0ZW1wLCBRRVRIX0lEWF9BQ1RfRlVOQ19MRVZFTChpb2ItPmRhdGEpLCAyKTsKKwlpZiAoKHRlbXAgJiB+MHgwMTAwKSAhPSBxZXRoX3BlZXJfZnVuY19sZXZlbChjYXJkLT5pbmZvLmZ1bmNfbGV2ZWwpKSB7CisJCVBSSU5UX1dBUk4oIklEWF9BQ1RJVkFURSBvbiB3cml0ZSBjaGFubmVsIGRldmljZSAlczogIgorCQkJICAgImZ1bmN0aW9uIGxldmVsIG1pc21hdGNoICIKKwkJCSAgICIoc2VudDogMHgleCwgcmVjZWl2ZWQ6IDB4JXgpXG4iLAorCQkJICAgQ0FSRF9XREVWX0lEKGNhcmQpLCBjYXJkLT5pbmZvLmZ1bmNfbGV2ZWwsIHRlbXApOworCQlnb3RvIG91dDsKKwl9CisJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9VUDsKK291dDoKKwlxZXRoX3JlbGVhc2VfYnVmZmVyKGNoYW5uZWwsIGlvYik7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfaWR4X3JlYWRfY2Ioc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCwKKwkJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisJX191MTYgdGVtcDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAgLCAyLCAiaWR4cmRjYiIpOworCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9ET1dOKSB7CisJCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfQUNUSVZBVElORzsKKwkJZ290byBvdXQ7CisJfQorCisJY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7CisJaWYgKHFldGhfY2hlY2tfaWR4X3Jlc3BvbnNlKGlvYi0+ZGF0YSkpCisJCQlnb3RvIG91dDsKKworCWlmICghKFFFVEhfSVNfSURYX0FDVF9QT1NfUkVQTFkoaW9iLT5kYXRhKSkpIHsKKwkJaWYgKFFFVEhfSURYX0FDVF9DQVVTRV9DT0RFKGlvYi0+ZGF0YSkgPT0gMHgxOSkKKwkJCVBSSU5UX0VSUigiSURYX0FDVElWQVRFIG9uIHJlYWQgY2hhbm5lbCBkZXZpY2UgJXM6ICIKKwkJCQkiYWRhcHRlciBleGNsdXNpdmVseSB1c2VkIGJ5IGFub3RoZXIgaG9zdFxuIiwKKwkJCQlDQVJEX1JERVZfSUQoY2FyZCkpOworCQllbHNlCisJCQlQUklOVF9FUlIoIklEWF9BQ1RJVkFURSBvbiByZWFkIGNoYW5uZWwgZGV2aWNlICVzOiAiCisJCQkJIm5lZ2F0aXZlIHJlcGx5XG4iLCBDQVJEX1JERVZfSUQoY2FyZCkpOworCQlnb3RvIG91dDsKKwl9CisKKy8qKgorICogdGVtcG9yYXJ5IGZpeCBmb3IgbWljcm9jb2RlIGJ1ZworICogdG8gcmV2ZXJ0IGl0LHJlcGxhY2UgT1IgYnkgQU5ECisgKi8KKwlpZiAoKCFRRVRIX0lEWF9OT19QT1JUTkFNRV9SRVFVSVJFRChpb2ItPmRhdGEpKSB8fAorCSAgICAgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU0FFKSkKKwkJY2FyZC0+aW5mby5wb3J0bmFtZV9yZXF1aXJlZCA9IDE7CisKKwltZW1jcHkoJnRlbXAsIFFFVEhfSURYX0FDVF9GVU5DX0xFVkVMKGlvYi0+ZGF0YSksIDIpOworCWlmICh0ZW1wICE9IHFldGhfcGVlcl9mdW5jX2xldmVsKGNhcmQtPmluZm8uZnVuY19sZXZlbCkpIHsKKwkJUFJJTlRfV0FSTigiSURYX0FDVElWQVRFIG9uIHJlYWQgY2hhbm5lbCBkZXZpY2UgJXM6IGZ1bmN0aW9uICIKKwkJCSAgICJsZXZlbCBtaXNtYXRjaCAoc2VudDogMHgleCwgcmVjZWl2ZWQ6IDB4JXgpXG4iLAorCQkJICAgQ0FSRF9SREVWX0lEKGNhcmQpLCBjYXJkLT5pbmZvLmZ1bmNfbGV2ZWwsIHRlbXApOworCQlnb3RvIG91dDsKKwl9CisJbWVtY3B5KCZjYXJkLT50b2tlbi5pc3N1ZXJfcm1fciwKKwkgICAgICAgUUVUSF9JRFhfQUNUX0lTU1VFUl9STV9UT0tFTihpb2ItPmRhdGEpLAorCSAgICAgICBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCW1lbWNweSgmY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0sCisJICAgICAgIFFFVEhfSURYX1JFUExZX0xFVkVMKGlvYi0+ZGF0YSksIFFFVEhfTUNMX0xFTkdUSCk7CisJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9VUDsKK291dDoKKwlxZXRoX3JlbGVhc2VfYnVmZmVyKGNoYW5uZWwsIGlvYik7Cit9CisKK3ZvaWQgcWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgbGVuLAorCQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IpCit7CisJcWV0aF9zZXR1cF9jY3coJmNhcmQtPndyaXRlLCBpb2ItPmRhdGEsIGxlbik7CisJaW9iLT5jYWxsYmFjayA9IHFldGhfcmVsZWFzZV9idWZmZXI7CisKKwltZW1jcHkoUUVUSF9UUkFOU1BPUlRfSEVBREVSX1NFUV9OTyhpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+c2Vxbm8udHJhbnNfaGRyLCBRRVRIX1NFUV9OT19MRU5HVEgpOworCWNhcmQtPnNlcW5vLnRyYW5zX2hkcisrOworCW1lbWNweShRRVRIX1BEVV9IRUFERVJfU0VRX05PKGlvYi0+ZGF0YSksCisJICAgICAgICZjYXJkLT5zZXFuby5wZHVfaGRyLCBRRVRIX1NFUV9OT19MRU5HVEgpOworCWNhcmQtPnNlcW5vLnBkdV9oZHIrKzsKKwltZW1jcHkoUUVUSF9QRFVfSEVBREVSX0FDS19TRVFfTk8oaW9iLT5kYXRhKSwKKwkgICAgICAgJmNhcmQtPnNlcW5vLnBkdV9oZHJfYWNrLCBRRVRIX1NFUV9OT19MRU5HVEgpOworCVFFVEhfREJGX0hFWChDVFJMLCAyLCBpb2ItPmRhdGEsIFFFVEhfREJGX0NUUkxfTEVOKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfcHJlcGFyZV9jb250cm9sX2RhdGEpOworCitpbnQgcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgbGVuLAorCQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCisJCWludCAoKnJlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3JlcGx5ICosCisJCQl1bnNpZ25lZCBsb25nKSwKKwkJdm9pZCAqcmVwbHlfcGFyYW0pCit7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAic2VuZGN0bCIpOworCisJcmVwbHkgPSBxZXRoX2FsbG9jX3JlcGx5KGNhcmQpOworCWlmICghcmVwbHkpIHsKKwkJUFJJTlRfV0FSTigiQ291bGQgbm90IGFsbG9jIHFldGhfcmVwbHkhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJlcGx5LT5jYWxsYmFjayA9IHJlcGx5X2NiOworCXJlcGx5LT5wYXJhbSA9IHJlcGx5X3BhcmFtOworCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX0RPV04pCisJCXJlcGx5LT5zZXFubyA9IFFFVEhfSURYX0NPTU1BTkRfU0VRTk87CisJZWxzZQorCQlyZXBseS0+c2Vxbm8gPSBjYXJkLT5zZXFuby5pcGErKzsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZXBseS0+d2FpdF9xKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJlcGx5LT5saXN0LCAmY2FyZC0+Y21kX3dhaXRlcl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJUUVUSF9EQkZfSEVYKENUUkwsIDIsIGlvYi0+ZGF0YSwgUUVUSF9EQkZfQ1RSTF9MRU4pOworCisJd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZjYXJkLT53cml0ZS5pcnFfcGVuZGluZywgMCwgMSkpIDsKKwlxZXRoX3ByZXBhcmVfY29udHJvbF9kYXRhKGNhcmQsIGxlbiwgaW9iKTsKKworCWlmIChJU19JUEEoaW9iLT5kYXRhKSkKKwkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX0lQQV9USU1FT1VUOworCWVsc2UKKwkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX1RJTUVPVVQ7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAibm9pcnFwbmQiKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2FyZC0+d3JpdGUuY2N3ZGV2KSwgZmxhZ3MpOworCXJjID0gY2N3X2RldmljZV9zdGFydChjYXJkLT53cml0ZS5jY3dkZXYsICZjYXJkLT53cml0ZS5jY3csCisJCQkgICAgICAoYWRkcl90KSBpb2IsIDAsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigicWV0aF9zZW5kX2NvbnRyb2xfZGF0YTogIgorCQkJICAgImNjd19kZXZpY2Vfc3RhcnQgcmMgPSAlaVxuIiwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiBlcnIlZCIsIHJjKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9kZWxfaW5pdCgmcmVwbHktPmxpc3QpOworCQlxZXRoX3B1dF9yZXBseShyZXBseSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJcWV0aF9yZWxlYXNlX2J1ZmZlcihpb2ItPmNoYW5uZWwsIGlvYik7CisJCWF0b21pY19zZXQoJmNhcmQtPndyaXRlLmlycV9wZW5kaW5nLCAwKTsKKwkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKKwkJcmV0dXJuIHJjOworCX0KKwl3aGlsZSAoIWF0b21pY19yZWFkKCZyZXBseS0+cmVjZWl2ZWQpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmVwbHktPmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfZGVsX2luaXQoJnJlcGx5LT5saXN0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcGx5LT5jYXJkLT5sb2NrLCBmbGFncyk7CisJCQlyZXBseS0+cmMgPSAtRVRJTUU7CisJCQlhdG9taWNfaW5jKCZyZXBseS0+cmVjZWl2ZWQpOworCQkJd2FrZV91cCgmcmVwbHktPndhaXRfcSk7CisJCX0KKwkJY3B1X3JlbGF4KCk7CisJfTsKKwlyYyA9IHJlcGx5LT5yYzsKKwlxZXRoX3B1dF9yZXBseShyZXBseSk7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9zZW5kX2NvbnRyb2xfZGF0YSk7CisKK3N0YXRpYyBpbnQgcWV0aF9jbV9lbmFibGVfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorCQl1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImNtZW5ibGNiIik7CisKKwlpb2IgPSAoc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKSBkYXRhOworCW1lbWNweSgmY2FyZC0+dG9rZW4uY21fZmlsdGVyX3IsCisJICAgICAgIFFFVEhfQ01fRU5BQkxFX1JFU1BfRklMVEVSX1RPS0VOKGlvYi0+ZGF0YSksCisJICAgICAgIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7CisJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2NtX2VuYWJsZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiY21lbmFibGUiKTsKKworCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7CisJbWVtY3B5KGlvYi0+ZGF0YSwgQ01fRU5BQkxFLCBDTV9FTkFCTEVfU0laRSk7CisJbWVtY3B5KFFFVEhfQ01fRU5BQkxFX0lTU1VFUl9STV9UT0tFTihpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+dG9rZW4uaXNzdWVyX3JtX3IsIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7CisJbWVtY3B5KFFFVEhfQ01fRU5BQkxFX0ZJTFRFUl9UT0tFTihpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+dG9rZW4uY21fZmlsdGVyX3csIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7CisKKwlyYyA9IHFldGhfc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgQ01fRU5BQkxFX1NJWkUsIGlvYiwKKwkJCQkgICAgcWV0aF9jbV9lbmFibGVfY2IsIE5VTEwpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2NtX3NldHVwX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKKwkJdW5zaWduZWQgbG9uZyBkYXRhKQoreworCisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImNtc2V0cGNiIik7CisKKwlpb2IgPSAoc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKSBkYXRhOworCW1lbWNweSgmY2FyZC0+dG9rZW4uY21fY29ubmVjdGlvbl9yLAorCSAgICAgICBRRVRIX0NNX1NFVFVQX1JFU1BfREVTVF9BRERSKGlvYi0+ZGF0YSksCisJICAgICAgIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7CisJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2NtX3NldHVwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJjbXNldHVwIik7CisKKwlpb2IgPSBxZXRoX3dhaXRfZm9yX2J1ZmZlcigmY2FyZC0+d3JpdGUpOworCW1lbWNweShpb2ItPmRhdGEsIENNX1NFVFVQLCBDTV9TRVRVUF9TSVpFKTsKKwltZW1jcHkoUUVUSF9DTV9TRVRVUF9ERVNUX0FERFIoaW9iLT5kYXRhKSwKKwkgICAgICAgJmNhcmQtPnRva2VuLmlzc3Vlcl9ybV9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCW1lbWNweShRRVRIX0NNX1NFVFVQX0NPTk5FQ1RJT05fVE9LRU4oaW9iLT5kYXRhKSwKKwkgICAgICAgJmNhcmQtPnRva2VuLmNtX2Nvbm5lY3Rpb25fdywgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKKwltZW1jcHkoUUVUSF9DTV9TRVRVUF9GSUxURVJfVE9LRU4oaW9iLT5kYXRhKSwKKwkgICAgICAgJmNhcmQtPnRva2VuLmNtX2ZpbHRlcl9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCXJjID0gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShjYXJkLCBDTV9TRVRVUF9TSVpFLCBpb2IsCisJCQkJICAgIHFldGhfY21fc2V0dXBfY2IsIE5VTEwpOworCXJldHVybiByYzsKKworfQorCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2dldF9pbml0aWFsX210dV9mb3JfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKSB7CisJY2FzZSBRRVRIX0NBUkRfVFlQRV9VTktOT1dOOgorCQlyZXR1cm4gMTUwMDsKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKKwkJcmV0dXJuIGNhcmQtPmluZm8ubWF4X210dTsKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6CisJCXN3aXRjaCAoY2FyZC0+aW5mby5saW5rX3R5cGUpIHsKKwkJY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgorCQljYXNlIFFFVEhfTElOS19UWVBFX0xBTkVfVFI6CisJCQlyZXR1cm4gMjAwMDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxNDkyOworCQl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE1MDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2dldF9tYXhfbXR1X2Zvcl9jYXJkKGludCBjYXJkdHlwZSkKK3sKKwlzd2l0Y2ggKGNhcmR0eXBlKSB7CisKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX1VOS05PV046CisJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0FFOgorCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgorCQlyZXR1cm4gNjE0NDA7CisJY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6CisJCXJldHVybiA1NzM0NDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTUwMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X210dV9vdXRfb2ZfbXBjKGludCBjYXJkdHlwZSkKK3sKKwlzd2l0Y2ggKGNhcmR0eXBlKSB7CisJY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgcWV0aF9nZXRfbXR1X291dG9mX2ZyYW1lc2l6ZShpbnQgZnJhbWVzaXplKQoreworCXN3aXRjaCAoZnJhbWVzaXplKSB7CisJY2FzZSAweDQwMDA6CisJCXJldHVybiA4MTkyOworCWNhc2UgMHg2MDAwOgorCQlyZXR1cm4gMTYzODQ7CisJY2FzZSAweGEwMDA6CisJCXJldHVybiAzMjc2ODsKKwljYXNlIDB4ZmZmZjoKKwkJcmV0dXJuIDU3MzQ0OworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgcWV0aF9tdHVfaXNfdmFsaWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IG10dSkKK3sKKwlzd2l0Y2ggKGNhcmQtPmluZm8udHlwZSkgeworCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKKwkJcmV0dXJuICgobXR1ID49IDU3NikgJiYgKG10dSA8PSA2MTQ0MCkpOworCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgorCQlyZXR1cm4gKChtdHUgPj0gNTc2KSAmJgorCQkJKG10dSA8PSBjYXJkLT5pbmZvLm1heF9tdHUgKyA0MDk2IC0gMzIpKTsKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX1VOS05PV046CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgaW50IHFldGhfdWxwX2VuYWJsZV9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCisJCXVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKworCV9fdTE2IG10dSwgZnJhbWVzaXplOworCV9fdTE2IGxlbjsKKwlfX3U4IGxpbmtfdHlwZTsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAidWxwZW5hY2IiKTsKKworCWlvYiA9IChzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICopIGRhdGE7CisJbWVtY3B5KCZjYXJkLT50b2tlbi51bHBfZmlsdGVyX3IsCisJICAgICAgIFFFVEhfVUxQX0VOQUJMRV9SRVNQX0ZJTFRFUl9UT0tFTihpb2ItPmRhdGEpLAorCSAgICAgICBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCWlmIChxZXRoX2dldF9tdHVfb3V0X29mX21wYyhjYXJkLT5pbmZvLnR5cGUpKSB7CisJCW1lbWNweSgmZnJhbWVzaXplLCBRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKGlvYi0+ZGF0YSksIDIpOworCQltdHUgPSBxZXRoX2dldF9tdHVfb3V0b2ZfZnJhbWVzaXplKGZyYW1lc2l6ZSk7CisJCWlmICghbXR1KSB7CisJCQlpb2ItPnJjID0gLUVJTlZBTDsKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiICByYyVkIiwgaW9iLT5yYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXJkLT5pbmZvLm1heF9tdHUgPSBtdHU7CisJCWNhcmQtPmluZm8uaW5pdGlhbF9tdHUgPSBtdHU7CisJCWNhcmQtPnFkaW8uaW5fYnVmX3NpemUgPSBtdHUgKyAyICogUEFHRV9TSVpFOworCX0gZWxzZSB7CisJCWNhcmQtPmluZm8uaW5pdGlhbF9tdHUgPSBxZXRoX2dldF9pbml0aWFsX210dV9mb3JfY2FyZChjYXJkKTsKKwkJY2FyZC0+aW5mby5tYXhfbXR1ID0gcWV0aF9nZXRfbWF4X210dV9mb3JfY2FyZChjYXJkLT5pbmZvLnR5cGUpOworCQljYXJkLT5xZGlvLmluX2J1Zl9zaXplID0gUUVUSF9JTl9CVUZfU0laRV9ERUZBVUxUOworCX0KKworCW1lbWNweSgmbGVuLCBRRVRIX1VMUF9FTkFCTEVfUkVTUF9ESUZJTkZPX0xFTihpb2ItPmRhdGEpLCAyKTsKKwlpZiAobGVuID49IFFFVEhfTVBDX0RJRklORk9fTEVOX0lORElDQVRFU19MSU5LX1RZUEUpIHsKKwkJbWVtY3B5KCZsaW5rX3R5cGUsCisJCSAgICAgICBRRVRIX1VMUF9FTkFCTEVfUkVTUF9MSU5LX1RZUEUoaW9iLT5kYXRhKSwgMSk7CisJCWNhcmQtPmluZm8ubGlua190eXBlID0gbGlua190eXBlOworCX0gZWxzZQorCQljYXJkLT5pbmZvLmxpbmtfdHlwZSA9IDA7CisJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX3VscF9lbmFibGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisJY2hhciBwcm90X3R5cGU7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCisJLypGSVhNRTogdHJhY2UgdmlldyBjYWxsYmFja3MqLworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJ1bHBlbmFibCIpOworCisJaW9iID0gcWV0aF93YWl0X2Zvcl9idWZmZXIoJmNhcmQtPndyaXRlKTsKKwltZW1jcHkoaW9iLT5kYXRhLCBVTFBfRU5BQkxFLCBVTFBfRU5BQkxFX1NJWkUpOworCisJKihRRVRIX1VMUF9FTkFCTEVfTElOS05VTShpb2ItPmRhdGEpKSA9CisJCShfX3U4KSBjYXJkLT5pbmZvLnBvcnRubzsKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCisJCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQorCQkJcHJvdF90eXBlID0gUUVUSF9QUk9UX09TTjI7CisJCWVsc2UKKwkJCXByb3RfdHlwZSA9IFFFVEhfUFJPVF9MQVlFUjI7CisJZWxzZQorCQlwcm90X3R5cGUgPSBRRVRIX1BST1RfVENQSVA7CisKKwltZW1jcHkoUUVUSF9VTFBfRU5BQkxFX1BST1RfVFlQRShpb2ItPmRhdGEpLCAmcHJvdF90eXBlLCAxKTsKKwltZW1jcHkoUUVUSF9VTFBfRU5BQkxFX0RFU1RfQUREUihpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+dG9rZW4uY21fY29ubmVjdGlvbl9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCW1lbWNweShRRVRIX1VMUF9FTkFCTEVfRklMVEVSX1RPS0VOKGlvYi0+ZGF0YSksCisJICAgICAgICZjYXJkLT50b2tlbi51bHBfZmlsdGVyX3csIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7CisJbWVtY3B5KFFFVEhfVUxQX0VOQUJMRV9QT1JUTkFNRV9BTkRfTEwoaW9iLT5kYXRhKSwKKwkgICAgICAgY2FyZC0+aW5mby5wb3J0bmFtZSwgOSk7CisJcmMgPSBxZXRoX3NlbmRfY29udHJvbF9kYXRhKGNhcmQsIFVMUF9FTkFCTEVfU0laRSwgaW9iLAorCQkJCSAgICBxZXRoX3VscF9lbmFibGVfY2IsIE5VTEwpOworCXJldHVybiByYzsKKworfQorCitzdGF0aWMgaW50IHFldGhfdWxwX3NldHVwX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKKwkJdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJ1bHBzdHBjYiIpOworCisJaW9iID0gKHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKikgZGF0YTsKKwltZW1jcHkoJmNhcmQtPnRva2VuLnVscF9jb25uZWN0aW9uX3IsCisJICAgICAgIFFFVEhfVUxQX1NFVFVQX1JFU1BfQ09OTkVDVElPTl9UT0tFTihpb2ItPmRhdGEpLAorCSAgICAgICBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiICByYyVkIiwgaW9iLT5yYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF91bHBfc2V0dXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisJX191MTYgdGVtcDsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInVscHNldHVwIik7CisKKwlpb2IgPSBxZXRoX3dhaXRfZm9yX2J1ZmZlcigmY2FyZC0+d3JpdGUpOworCW1lbWNweShpb2ItPmRhdGEsIFVMUF9TRVRVUCwgVUxQX1NFVFVQX1NJWkUpOworCisJbWVtY3B5KFFFVEhfVUxQX1NFVFVQX0RFU1RfQUREUihpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+dG9rZW4uY21fY29ubmVjdGlvbl9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCW1lbWNweShRRVRIX1VMUF9TRVRVUF9DT05ORUNUSU9OX1RPS0VOKGlvYi0+ZGF0YSksCisJICAgICAgICZjYXJkLT50b2tlbi51bHBfY29ubmVjdGlvbl93LCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCW1lbWNweShRRVRIX1VMUF9TRVRVUF9GSUxURVJfVE9LRU4oaW9iLT5kYXRhKSwKKwkgICAgICAgJmNhcmQtPnRva2VuLnVscF9maWx0ZXJfciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKKworCWNjd19kZXZpY2VfZ2V0X2lkKENBUkRfRERFVihjYXJkKSwgJmRldl9pZCk7CisJbWVtY3B5KFFFVEhfVUxQX1NFVFVQX0NVQShpb2ItPmRhdGEpLCAmZGV2X2lkLmRldm5vLCAyKTsKKwl0ZW1wID0gKGNhcmQtPmluZm8uY3VsYSA8PCA4KSArIGNhcmQtPmluZm8udW5pdF9hZGRyMjsKKwltZW1jcHkoUUVUSF9VTFBfU0VUVVBfUkVBTF9ERVZBRERSKGlvYi0+ZGF0YSksICZ0ZW1wLCAyKTsKKwlyYyA9IHFldGhfc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgVUxQX1NFVFVQX1NJWkUsIGlvYiwKKwkJCQkgICAgcWV0aF91bHBfc2V0dXBfY2IsIE5VTEwpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2FsbG9jX3FkaW9fYnVmZmVycyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCBpLCBqOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImFsbGNxZGJmIik7CisKKwlpZiAoYXRvbWljX2NtcHhjaGcoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19VTklOSVRJQUxJWkVELAorCQlRRVRIX1FESU9fQUxMT0NBVEVEKSAhPSBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkKKwkJcmV0dXJuIDA7CisKKwljYXJkLT5xZGlvLmluX3EgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX3EpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5xZGlvLmluX3EpCisJCWdvdG8gb3V0X25vbWVtOworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJpbnEiKTsKKwlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsICZjYXJkLT5xZGlvLmluX3EsIHNpemVvZih2b2lkICopKTsKKwltZW1zZXQoY2FyZC0+cWRpby5pbl9xLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfcWRpb19xKSk7CisJLyogZ2l2ZSBpbmJvdW5kIHFldGhfcWRpb19idWZmZXJzIHRoZWlyIHFkaW9fYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyArK2kpCisJCWNhcmQtPnFkaW8uaW5fcS0+YnVmc1tpXS5idWZmZXIgPQorCQkJJmNhcmQtPnFkaW8uaW5fcS0+cWRpb19idWZzW2ldOworCS8qIGluYm91bmQgYnVmZmVyIHBvb2wgKi8KKwlpZiAocWV0aF9hbGxvY19idWZmZXJfcG9vbChjYXJkKSkKKwkJZ290byBvdXRfZnJlZWlucTsKKwkvKiBvdXRib3VuZCAqLworCWNhcmQtPnFkaW8ub3V0X3FzID0KKwkJa21hbGxvYyhjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgKgorCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiksIEdGUF9LRVJORUwpOworCWlmICghY2FyZC0+cWRpby5vdXRfcXMpCisJCWdvdG8gb3V0X2ZyZWVwb29sOworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXM7ICsraSkgeworCQljYXJkLT5xZGlvLm91dF9xc1tpXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EpLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FyZC0+cWRpby5vdXRfcXNbaV0pCisJCQlnb3RvIG91dF9mcmVlb3V0cTsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICJvdXRxICVpIiwgaSk7CisJCVFFVEhfREJGX0hFWChTRVRVUCwgMiwgJmNhcmQtPnFkaW8ub3V0X3FzW2ldLCBzaXplb2Yodm9pZCAqKSk7CisJCW1lbXNldChjYXJkLT5xZGlvLm91dF9xc1tpXSwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EpKTsKKwkJY2FyZC0+cWRpby5vdXRfcXNbaV0tPnF1ZXVlX25vID0gaTsKKwkJLyogZ2l2ZSBvdXRib3VuZCBxZXRoX3FkaW9fYnVmZmVycyB0aGVpciBxZGlvX2J1ZmZlcnMgKi8KKwkJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7ICsraikgeworCQkJY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0uYnVmZmVyID0KKwkJCQkmY2FyZC0+cWRpby5vdXRfcXNbaV0tPnFkaW9fYnVmc1tqXTsKKwkJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPnFkaW8ub3V0X3FzW2ldLT5idWZzW2pdLgorCQkJCQkgICAgc2tiX2xpc3QpOworCQkJbG9ja2RlcF9zZXRfY2xhc3MoCisJCQkJJmNhcmQtPnFkaW8ub3V0X3FzW2ldLT5idWZzW2pdLnNrYl9saXN0LmxvY2ssCisJCQkJJnFkaW9fb3V0X3NrYl9xdWV1ZV9rZXkpOworCQkJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnFkaW8ub3V0X3FzW2ldLT5idWZzW2pdLmN0eF9saXN0KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVvdXRxOgorCXdoaWxlIChpID4gMCkKKwkJa2ZyZWUoY2FyZC0+cWRpby5vdXRfcXNbLS1pXSk7CisJa2ZyZWUoY2FyZC0+cWRpby5vdXRfcXMpOworCWNhcmQtPnFkaW8ub3V0X3FzID0gTlVMTDsKK291dF9mcmVlcG9vbDoKKwlxZXRoX2ZyZWVfYnVmZmVyX3Bvb2woY2FyZCk7CitvdXRfZnJlZWlucToKKwlrZnJlZShjYXJkLT5xZGlvLmluX3EpOworCWNhcmQtPnFkaW8uaW5fcSA9IE5VTEw7CitvdXRfbm9tZW06CisJYXRvbWljX3NldCgmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX1VOSU5JVElBTElaRUQpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2NyZWF0ZV9xaWJfcGFyYW1fZmllbGQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJY2hhciAqcGFyYW1fZmllbGQpCit7CisKKwlwYXJhbV9maWVsZFswXSA9IF9hc2NlYmNbJ1AnXTsKKwlwYXJhbV9maWVsZFsxXSA9IF9hc2NlYmNbJ0MnXTsKKwlwYXJhbV9maWVsZFsyXSA9IF9hc2NlYmNbJ0knXTsKKwlwYXJhbV9maWVsZFszXSA9IF9hc2NlYmNbJ1QnXTsKKwkqKCh1bnNpZ25lZCBpbnQgKikgKCZwYXJhbV9maWVsZFs0XSkpID0gUUVUSF9QQ0lfVEhSRVNIT0xEX0EoY2FyZCk7CisJKigodW5zaWduZWQgaW50ICopICgmcGFyYW1fZmllbGRbOF0pKSA9IFFFVEhfUENJX1RIUkVTSE9MRF9CKGNhcmQpOworCSooKHVuc2lnbmVkIGludCAqKSAoJnBhcmFtX2ZpZWxkWzEyXSkpID0gUUVUSF9QQ0lfVElNRVJfVkFMVUUoY2FyZCk7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfY3JlYXRlX3FpYl9wYXJhbV9maWVsZF9ibGt0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWNoYXIgKnBhcmFtX2ZpZWxkKQoreworCXBhcmFtX2ZpZWxkWzE2XSA9IF9hc2NlYmNbJ0InXTsKKwlwYXJhbV9maWVsZFsxN10gPSBfYXNjZWJjWydMJ107CisJcGFyYW1fZmllbGRbMThdID0gX2FzY2ViY1snSyddOworCXBhcmFtX2ZpZWxkWzE5XSA9IF9hc2NlYmNbJ1QnXTsKKwkqKCh1bnNpZ25lZCBpbnQgKikgKCZwYXJhbV9maWVsZFsyMF0pKSA9IGNhcmQtPmluZm8uYmxrdC50aW1lX3RvdGFsOworCSooKHVuc2lnbmVkIGludCAqKSAoJnBhcmFtX2ZpZWxkWzI0XSkpID0gY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldDsKKwkqKCh1bnNpZ25lZCBpbnQgKikgKCZwYXJhbV9maWVsZFsyOF0pKSA9CisJCWNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXRfanVtYm87Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9xZGlvX2FjdGl2YXRlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMywgInFkaW9hY3QiKTsKKwlyZXR1cm4gcWRpb19hY3RpdmF0ZShDQVJEX0RERVYoY2FyZCksIDApOworfQorCitzdGF0aWMgaW50IHFldGhfZG1fYWN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkbWFjdCIpOworCisJaW9iID0gcWV0aF93YWl0X2Zvcl9idWZmZXIoJmNhcmQtPndyaXRlKTsKKwltZW1jcHkoaW9iLT5kYXRhLCBETV9BQ1QsIERNX0FDVF9TSVpFKTsKKworCW1lbWNweShRRVRIX0RNX0FDVF9ERVNUX0FERFIoaW9iLT5kYXRhKSwKKwkgICAgICAgJmNhcmQtPnRva2VuLmNtX2Nvbm5lY3Rpb25fciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKKwltZW1jcHkoUUVUSF9ETV9BQ1RfQ09OTkVDVElPTl9UT0tFTihpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+dG9rZW4udWxwX2Nvbm5lY3Rpb25fciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKKwlyYyA9IHFldGhfc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgRE1fQUNUX1NJWkUsIGlvYiwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbXBjX2luaXRpYWxpemUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAibXBjaW5pdCIpOworCisJcmMgPSBxZXRoX2lzc3VlX25leHRfcmVhZChjYXJkKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIxZXJyJWQiLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJcmMgPSBxZXRoX2NtX2VuYWJsZShjYXJkKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X3FkaW87CisJfQorCXJjID0gcWV0aF9jbV9zZXR1cChjYXJkKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X3FkaW87CisJfQorCXJjID0gcWV0aF91bHBfZW5hYmxlKGNhcmQpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjRlcnIlZCIsIHJjKTsKKwkJZ290byBvdXRfcWRpbzsKKwl9CisJcmMgPSBxZXRoX3VscF9zZXR1cChjYXJkKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X3FkaW87CisJfQorCXJjID0gcWV0aF9hbGxvY19xZGlvX2J1ZmZlcnMoY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCQlnb3RvIG91dF9xZGlvOworCX0KKwlyYyA9IHFldGhfcWRpb19lc3RhYmxpc2goY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOworCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOworCQlnb3RvIG91dF9xZGlvOworCX0KKwlyYyA9IHFldGhfcWRpb19hY3RpdmF0ZShjYXJkKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI3ZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X3FkaW87CisJfQorCXJjID0gcWV0aF9kbV9hY3QoY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiOGVyciVkIiwgcmMpOworCQlnb3RvIG91dF9xZGlvOworCX0KKworCXJldHVybiAwOworb3V0X3FkaW86CisJcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBxZXRoX3ByaW50X3N0YXR1c193aXRoX3BvcnRuYW1lKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJY2hhciBkYmZfdGV4dFsxNV07CisJaW50IGk7CisKKwlzcHJpbnRmKGRiZl90ZXh0LCAiJXMiLCBjYXJkLT5pbmZvLnBvcnRuYW1lICsgMSk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGJmX3RleHRbaV0gPQorCQkJKGNoYXIpIF9lYmNhc2NbKF9fdTgpIGRiZl90ZXh0W2ldXTsKKwlkYmZfdGV4dFs4XSA9IDA7CisJUFJJTlRfSU5GTygiRGV2aWNlICVzLyVzLyVzIGlzIGElcyBjYXJkJXMlcyVzXG4iCisJICAgICAgICJ3aXRoIGxpbmsgdHlwZSAlcyAocG9ydG5hbWU6ICVzKVxuIiwKKwkgICAgICAgQ0FSRF9SREVWX0lEKGNhcmQpLAorCSAgICAgICBDQVJEX1dERVZfSUQoY2FyZCksCisJICAgICAgIENBUkRfRERFVl9JRChjYXJkKSwKKwkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWUoY2FyZCksCisJICAgICAgIChjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkgPyAiIChsZXZlbDogIiA6ICIiLAorCSAgICAgICAoY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0pID8gY2FyZC0+aW5mby5tY2xfbGV2ZWwgOiAiIiwKKwkgICAgICAgKGNhcmQtPmluZm8ubWNsX2xldmVsWzBdKSA/ICIpIiA6ICIiLAorCSAgICAgICBxZXRoX2dldF9jYXJkbmFtZV9zaG9ydChjYXJkKSwKKwkgICAgICAgZGJmX3RleHQpOworCit9CisKK3N0YXRpYyB2b2lkIHFldGhfcHJpbnRfc3RhdHVzX25vX3BvcnRuYW1lKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaWYgKGNhcmQtPmluZm8ucG9ydG5hbWVbMF0pCisJCVBSSU5UX0lORk8oIkRldmljZSAlcy8lcy8lcyBpcyBhJXMgIgorCQkgICAgICAgImNhcmQlcyVzJXNcbndpdGggbGluayB0eXBlICVzICIKKwkJICAgICAgICIobm8gcG9ydG5hbWUgbmVlZGVkIGJ5IGludGVyZmFjZSkuXG4iLAorCQkgICAgICAgQ0FSRF9SREVWX0lEKGNhcmQpLAorCQkgICAgICAgQ0FSRF9XREVWX0lEKGNhcmQpLAorCQkgICAgICAgQ0FSRF9EREVWX0lEKGNhcmQpLAorCQkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWUoY2FyZCksCisJCSAgICAgICAoY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0pID8gIiAobGV2ZWw6ICIgOiAiIiwKKwkJICAgICAgIChjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkgPyBjYXJkLT5pbmZvLm1jbF9sZXZlbCA6ICIiLAorCQkgICAgICAgKGNhcmQtPmluZm8ubWNsX2xldmVsWzBdKSA/ICIpIiA6ICIiLAorCQkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoY2FyZCkpOworCWVsc2UKKwkJUFJJTlRfSU5GTygiRGV2aWNlICVzLyVzLyVzIGlzIGElcyAiCisJCSAgICAgICAiY2FyZCVzJXMlc1xud2l0aCBsaW5rIHR5cGUgJXMuXG4iLAorCQkgICAgICAgQ0FSRF9SREVWX0lEKGNhcmQpLAorCQkgICAgICAgQ0FSRF9XREVWX0lEKGNhcmQpLAorCQkgICAgICAgQ0FSRF9EREVWX0lEKGNhcmQpLAorCQkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWUoY2FyZCksCisJCSAgICAgICAoY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0pID8gIiAobGV2ZWw6ICIgOiAiIiwKKwkJICAgICAgIChjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkgPyBjYXJkLT5pbmZvLm1jbF9sZXZlbCA6ICIiLAorCQkgICAgICAgKGNhcmQtPmluZm8ubWNsX2xldmVsWzBdKSA/ICIpIiA6ICIiLAorCQkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoY2FyZCkpOworfQorCit2b2lkIHFldGhfcHJpbnRfc3RhdHVzX21lc3NhZ2Uoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlzd2l0Y2ggKGNhcmQtPmluZm8udHlwZSkgeworCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKKwkJLyogVk0gd2lsbCB1c2UgYSBub24temVybyBmaXJzdCBjaGFyYWN0ZXIKKwkJICogdG8gaW5kaWNhdGUgYSBIaXBlclNvY2tldHMgbGlrZSByZXBvcnRpbmcKKwkJICogb2YgdGhlIGxldmVsIE9TQSBzZXRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gemVybworCQkgKiAqLworCQlpZiAoIWNhcmQtPmluZm8ubWNsX2xldmVsWzBdKSB7CisJCQlzcHJpbnRmKGNhcmQtPmluZm8ubWNsX2xldmVsLCAiJTAyeCUwMngiLAorCQkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzJdLAorCQkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzNdKTsKKworCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbUUVUSF9NQ0xfTEVOR1RIXSA9IDA7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgorCQlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikgeworCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0gPSAoY2hhcikgX2ViY2FzY1soX191OCkKKwkJCQljYXJkLT5pbmZvLm1jbF9sZXZlbFswXV07CisJCQljYXJkLT5pbmZvLm1jbF9sZXZlbFsxXSA9IChjaGFyKSBfZWJjYXNjWyhfX3U4KQorCQkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzFdXTsKKwkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzJdID0gKGNoYXIpIF9lYmNhc2NbKF9fdTgpCisJCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbMl1dOworCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbM10gPSAoY2hhcikgX2ViY2FzY1soX191OCkKKwkJCQljYXJkLT5pbmZvLm1jbF9sZXZlbFszXV07CisJCQljYXJkLT5pbmZvLm1jbF9sZXZlbFtRRVRIX01DTF9MRU5HVEhdID0gMDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQltZW1zZXQoJmNhcmQtPmluZm8ubWNsX2xldmVsWzBdLCAwLCBRRVRIX01DTF9MRU5HVEggKyAxKTsKKwl9CisJaWYgKGNhcmQtPmluZm8ucG9ydG5hbWVfcmVxdWlyZWQpCisJCXFldGhfcHJpbnRfc3RhdHVzX3dpdGhfcG9ydG5hbWUoY2FyZCk7CisJZWxzZQorCQlxZXRoX3ByaW50X3N0YXR1c19ub19wb3J0bmFtZShjYXJkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfcHJpbnRfc3RhdHVzX21lc3NhZ2UpOworCit2b2lkIHFldGhfcHV0X2J1ZmZlcl9wb29sX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICplbnRyeSkKK3sKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAicHRiZnBsZW4iKTsKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuZW50cnlfbGlzdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3B1dF9idWZmZXJfcG9vbF9lbnRyeSk7CisKK3N0YXRpYyB2b2lkIHFldGhfaW5pdGlhbGl6ZV93b3JraW5nX3Bvb2xfbGlzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICplbnRyeTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJpbndya2xzdCIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwKKwkJCSAgICAmY2FyZC0+cWRpby5pbml0X3Bvb2wuZW50cnlfbGlzdCwgaW5pdF9saXN0KSB7CisJCXFldGhfcHV0X2J1ZmZlcl9wb29sX2VudHJ5KGNhcmQsIGVudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHFldGhfYnVmZmVyX3Bvb2xfZW50cnkgKnFldGhfZmluZF9mcmVlX2J1ZmZlcl9wb29sX2VudHJ5KAorCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBsaDsKKwlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqZW50cnk7CisJaW50IGksIGZyZWU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAobGlzdF9lbXB0eSgmY2FyZC0+cWRpby5pbl9idWZfcG9vbC5lbnRyeV9saXN0KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoKHBsaCwgJmNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuZW50cnlfbGlzdCkgeworCQllbnRyeSA9IGxpc3RfZW50cnkocGxoLCBzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSwgbGlzdCk7CisJCWZyZWUgPSAxOworCQlmb3IgKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpIHsKKwkJCWlmIChwYWdlX2NvdW50KHZpcnRfdG9fcGFnZShlbnRyeS0+ZWxlbWVudHNbaV0pKSA+IDEpIHsKKwkJCQlmcmVlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoZnJlZSkgeworCQkJbGlzdF9kZWxfaW5pdCgmZW50cnktPmxpc3QpOworCQkJcmV0dXJuIGVudHJ5OworCQl9CisJfQorCisJLyogbm8gZnJlZSBidWZmZXIgaW4gcG9vbCBzbyB0YWtlIGZpcnN0IG9uZSBhbmQgc3dhcCBwYWdlcyAqLworCWVudHJ5ID0gbGlzdF9lbnRyeShjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmVudHJ5X2xpc3QubmV4dCwKKwkJCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5LCBsaXN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpIHsKKwkJaWYgKHBhZ2VfY291bnQodmlydF90b19wYWdlKGVudHJ5LT5lbGVtZW50c1tpXSkpID4gMSkgeworCQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyk7CisJCQlpZiAoIXBhZ2UpIHsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWVudHJ5LT5lbGVtZW50c1tpXSk7CisJCQkJZW50cnktPmVsZW1lbnRzW2ldID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQkJCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2FsbG9jX3BhZ2VfcngrKzsKKwkJCX0KKwkJfQorCX0KKwlsaXN0X2RlbF9pbml0KCZlbnRyeS0+bGlzdCk7CisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50IHFldGhfaW5pdF9pbnB1dF9idWZmZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcWRpb19idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqcG9vbF9lbnRyeTsKKwlpbnQgaTsKKworCXBvb2xfZW50cnkgPSBxZXRoX2ZpbmRfZnJlZV9idWZmZXJfcG9vbF9lbnRyeShjYXJkKTsKKwlpZiAoIXBvb2xfZW50cnkpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBzaW5jZSB0aGUgYnVmZmVyIGlzIGFjY2Vzc2VkIG9ubHkgZnJvbSB0aGUgaW5wdXRfdGFza2xldAorCSAqIHRoZXJlIHNob3VsZG4ndCBiZSBhIG5lZWQgdG8gc3luY2hyb25pemU7IGFsc28sIHNpbmNlIHdlIHVzZQorCSAqIHRoZSBRRVRIX0lOX0JVRl9SRVFVRVVFX1RIUkVTSE9MRCB3ZSBzaG91bGQgbmV2ZXIgcnVuICBvdXQgb2ZmCisJICogYnVmZmVycworCSAqLworCUJVR19PTighcG9vbF9lbnRyeSk7CisKKwlidWYtPnBvb2xfZW50cnkgPSBwb29sX2VudHJ5OworCWZvciAoaSA9IDA7IGkgPCBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCk7ICsraSkgeworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5sZW5ndGggPSBQQUdFX1NJWkU7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgPSAgcG9vbF9lbnRyeS0+ZWxlbWVudHNbaV07CisJCWlmIChpID09IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAtIDEpCisJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwkJZWxzZQorCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZmxhZ3MgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHFldGhfaW5pdF9xZGlvX3F1ZXVlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCBpLCBqOworCWludCByYzsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJpbml0cWRxcyIpOworCisJLyogaW5ib3VuZCBxdWV1ZSAqLworCW1lbXNldChjYXJkLT5xZGlvLmluX3EtPnFkaW9fYnVmcywgMCwKKwkgICAgICAgUURJT19NQVhfQlVGRkVSU19QRVJfUSAqIHNpemVvZihzdHJ1Y3QgcWRpb19idWZmZXIpKTsKKwlxZXRoX2luaXRpYWxpemVfd29ya2luZ19wb29sX2xpc3QoY2FyZCk7CisJLypnaXZlIG9ubHkgYXMgbWFueSBidWZmZXJzIHRvIGhhcmR3YXJlIGFzIHdlIGhhdmUgYnVmZmVyIHBvb2wgZW50cmllcyovCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuYnVmX2NvdW50IC0gMTsgKytpKQorCQlxZXRoX2luaXRfaW5wdXRfYnVmZmVyKGNhcmQsICZjYXJkLT5xZGlvLmluX3EtPmJ1ZnNbaV0pOworCWNhcmQtPnFkaW8uaW5fcS0+bmV4dF9idWZfdG9faW5pdCA9CisJCWNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuYnVmX2NvdW50IC0gMTsKKwlyYyA9IGRvX1FESU8oQ0FSRF9EREVWKGNhcmQpLCBRRElPX0ZMQUdfU1lOQ19JTlBVVCwgMCwgMCwKKwkJICAgICBjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmJ1Zl9jb3VudCAtIDEsIE5VTEwpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IHFkaW9fc3luY2hyb25pemUoQ0FSRF9EREVWKGNhcmQpLCBRRElPX0ZMQUdfU1lOQ19JTlBVVCwgMCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCS8qIG91dGJvdW5kIHF1ZXVlICovCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlczsgKytpKSB7CisJCW1lbXNldChjYXJkLT5xZGlvLm91dF9xc1tpXS0+cWRpb19idWZzLCAwLAorCQkgICAgICAgUURJT19NQVhfQlVGRkVSU19QRVJfUSAqIHNpemVvZihzdHJ1Y3QgcWRpb19idWZmZXIpKTsKKwkJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7ICsraikgeworCQkJcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKGNhcmQtPnFkaW8ub3V0X3FzW2ldLAorCQkJCQkmY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0pOworCQl9CisJCWNhcmQtPnFkaW8ub3V0X3FzW2ldLT5jYXJkID0gY2FyZDsKKwkJY2FyZC0+cWRpby5vdXRfcXNbaV0tPm5leHRfYnVmX3RvX2ZpbGwgPSAwOworCQljYXJkLT5xZGlvLm91dF9xc1tpXS0+ZG9fcGFjayA9IDA7CisJCWF0b21pY19zZXQoJmNhcmQtPnFkaW8ub3V0X3FzW2ldLT51c2VkX2J1ZmZlcnMsIDApOworCQlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLm91dF9xc1tpXS0+c2V0X3BjaV9mbGFnc19jb3VudCwgMCk7CisJCWF0b21pY19zZXQoJmNhcmQtPnFkaW8ub3V0X3FzW2ldLT5zdGF0ZSwKKwkJCSAgIFFFVEhfT1VUX1FfVU5MT0NLRUQpOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfaW5pdF9xZGlvX3F1ZXVlcyk7CisKK3N0YXRpYyBpbmxpbmUgX191OCBxZXRoX2dldF9pcGFfYWRwX3R5cGUoZW51bSBxZXRoX2xpbmtfdHlwZXMgbGlua190eXBlKQoreworCXN3aXRjaCAobGlua190eXBlKSB7CisJY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgorCQlyZXR1cm4gMjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfZmlsbF9pcGFjbWRfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZCwgX191OCBjb21tYW5kLAorCQllbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90KQoreworCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSk7CisJY21kLT5oZHIuY29tbWFuZCA9IGNvbW1hbmQ7CisJY21kLT5oZHIuaW5pdGlhdG9yID0gSVBBX0NNRF9JTklUSUFUT1JfSE9TVDsKKwljbWQtPmhkci5zZXFubyA9IGNhcmQtPnNlcW5vLmlwYTsKKwljbWQtPmhkci5hZGFwdGVyX3R5cGUgPSBxZXRoX2dldF9pcGFfYWRwX3R5cGUoY2FyZC0+aW5mby5saW5rX3R5cGUpOworCWNtZC0+aGRyLnJlbF9hZGFwdGVyX25vID0gKF9fdTgpIGNhcmQtPmluZm8ucG9ydG5vOworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKKwkJY21kLT5oZHIucHJpbV92ZXJzaW9uX25vID0gMjsKKwllbHNlCisJCWNtZC0+aGRyLnByaW1fdmVyc2lvbl9ubyA9IDE7CisJY21kLT5oZHIucGFyYW1fY291bnQgPSAxOworCWNtZC0+aGRyLnByb3RfdmVyc2lvbiA9IHByb3Q7CisJY21kLT5oZHIuaXBhX3N1cHBvcnRlZCA9IDA7CisJY21kLT5oZHIuaXBhX2VuYWJsZWQgPSAwOworfQorCitzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICpxZXRoX2dldF9pcGFjbWRfYnVmZmVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCit7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCXFldGhfZmlsbF9pcGFjbWRfaGVhZGVyKGNhcmQsIGNtZCwgaXBhY21kLCBwcm90KTsKKworCXJldHVybiBpb2I7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2dldF9pcGFjbWRfYnVmZmVyKTsKKwordm9pZCBxZXRoX3ByZXBhcmVfaXBhX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCisJCWNoYXIgcHJvdF90eXBlKQoreworCW1lbWNweShpb2ItPmRhdGEsIElQQV9QRFVfSEVBREVSLCBJUEFfUERVX0hFQURFUl9TSVpFKTsKKwltZW1jcHkoUUVUSF9JUEFfQ01EX1BST1RfVFlQRShpb2ItPmRhdGEpLCAmcHJvdF90eXBlLCAxKTsKKwltZW1jcHkoUUVUSF9JUEFfQ01EX0RFU1RfQUREUihpb2ItPmRhdGEpLAorCSAgICAgICAmY2FyZC0+dG9rZW4udWxwX2Nvbm5lY3Rpb25fciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfcHJlcGFyZV9pcGFfY21kKTsKKworaW50IHFldGhfc2VuZF9pcGFfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKKwkJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkqLAorCQkJdW5zaWduZWQgbG9uZyksCisJCXZvaWQgKnJlcGx5X3BhcmFtKQoreworCWludCByYzsKKwljaGFyIHByb3RfdHlwZTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzZW5kaXBhIik7CisKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCisJCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQorCQkJcHJvdF90eXBlID0gUUVUSF9QUk9UX09TTjI7CisJCWVsc2UKKwkJCXByb3RfdHlwZSA9IFFFVEhfUFJPVF9MQVlFUjI7CisJZWxzZQorCQlwcm90X3R5cGUgPSBRRVRIX1BST1RfVENQSVA7CisJcWV0aF9wcmVwYXJlX2lwYV9jbWQoY2FyZCwgaW9iLCBwcm90X3R5cGUpOworCXJjID0gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShjYXJkLCBJUEFfQ01EX0xFTkdUSCwKKwkJCQkJCWlvYiwgcmVwbHlfY2IsIHJlcGx5X3BhcmFtKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3NlbmRfaXBhX2NtZCk7CisKK3N0YXRpYyBpbnQgcWV0aF9zZW5kX3N0YXJ0c3RvcGxhbihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQllbnVtIHFldGhfaXBhX2NtZHMgaXBhY21kLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90KQoreworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisKKwlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgcHJvdCk7CisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIHJjOworfQorCitpbnQgcWV0aF9zZW5kX3N0YXJ0bGFuKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInN0cnRsYW4iKTsKKworCXJjID0gcWV0aF9zZW5kX3N0YXJ0c3RvcGxhbihjYXJkLCBJUEFfQ01EX1NUQVJUTEFOLCAwKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3NlbmRfc3RhcnRsYW4pOworCitpbnQgcWV0aF9zZW5kX3N0b3BsYW4oc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmMgPSAwOworCisJLyoKKwkgKiBUT0RPOiBhY2NvcmRpbmcgdG8gdGhlIElQQSBmb3JtYXQgZG9jdW1lbnQgcGFnZSAxNCwKKwkgKiBUQ1AvSVAgKHdlISkgbmV2ZXIgaXNzdWUgYSBTVE9QTEFOCisJICogaXMgdGhpcyByaWdodCA/IT8KKwkgKi8KKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic3RvcGxhbiIpOworCisJcmMgPSBxZXRoX3NlbmRfc3RhcnRzdG9wbGFuKGNhcmQsIElQQV9DTURfU1RPUExBTiwgMCk7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9zZW5kX3N0b3BsYW4pOworCitpbnQgcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiZGVmYWRwY2IiKTsKKworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09IDApCisJCWNtZC0+aGRyLnJldHVybl9jb2RlID0KKwkJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnJldHVybl9jb2RlOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYik7CisKK3N0YXRpYyBpbnQgcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInF1eWFkcGNiIik7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworCWlmIChjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEucXVlcnlfY21kc19zdXBwLmxhbl90eXBlICYgMHg3ZikKKwkJY2FyZC0+aW5mby5saW5rX3R5cGUgPQorCQkgICAgICBjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEucXVlcnlfY21kc19zdXBwLmxhbl90eXBlOworCWNhcmQtPm9wdGlvbnMuYWRwLnN1cHBvcnRlZF9mdW5jcyA9CisJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5xdWVyeV9jbWRzX3N1cHAuc3VwcG9ydGVkX2NtZHM7CisJcmV0dXJuIHFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKWNtZCk7Cit9CisKK3N0cnVjdCBxZXRoX2NtZF9idWZmZXIgKnFldGhfZ2V0X2FkYXB0ZXJfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCV9fdTMyIGNvbW1hbmQsIF9fdTMyIGNtZGxlbikKK3sKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVEFEQVBURVJQQVJNUywKKwkJCQkgICAgIFFFVEhfUFJPVF9JUFY0KTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuY21kbGVuZ3RoID0gY21kbGVuOworCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNvbW1hbmQ7CisJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIudXNlZF90b3RhbCA9IDE7CisJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vID0gMTsKKworCXJldHVybiBpb2I7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2dldF9hZGFwdGVyX2NtZCk7CisKK2ludCBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAicXVlcnlhZHAiKTsKKwlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1FVRVJZX0NPTU1BTkRTX1NVUFBPUlRFRCwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zX2NiLCBOVUxMKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyk7CisKK2ludCBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKHN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmLCB1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwKKwkJdW5zaWduZWQgaW50IHNpZ2FfZXJyb3IsIGNvbnN0IGNoYXIgKmRiZnRleHQpCit7CisJaWYgKHFkaW9fZXJyb3IgfHwgc2lnYV9lcnJvcikgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCBkYmZ0ZXh0KTsKKwkJUUVUSF9EQkZfVEVYVChRRVJSLCAyLCBkYmZ0ZXh0KTsKKwkJUUVUSF9EQkZfVEVYVF8oUUVSUiwgMiwgIiBGMTU9JTAyWCIsCisJCQkgICAgICAgYnVmLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpOworCQlRRVRIX0RCRl9URVhUXyhRRVJSLCAyLCAiIEYxND0lMDJYIiwKKwkJCSAgICAgICBidWYtPmVsZW1lbnRbMTRdLmZsYWdzICYgMHhmZik7CisJCVFFVEhfREJGX1RFWFRfKFFFUlIsIDIsICIgcWVycj0lWCIsIHFkaW9fZXJyb3IpOworCQlRRVRIX0RCRl9URVhUXyhRRVJSLCAyLCAiIHNlcnI9JVgiLCBzaWdhX2Vycm9yKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jaGVja19xZGlvX2Vycm9ycyk7CisKK3ZvaWQgcWV0aF9xdWV1ZV9pbnB1dF9idWZmZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IGluZGV4KQoreworCXN0cnVjdCBxZXRoX3FkaW9fcSAqcXVldWUgPSBjYXJkLT5xZGlvLmluX3E7CisJaW50IGNvdW50OworCWludCBpOworCWludCByYzsKKwlpbnQgbmV3Y291bnQgPSAwOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgInF1ZWluYnVmIik7CisJY291bnQgPSAoaW5kZXggPCBxdWV1ZS0+bmV4dF9idWZfdG9faW5pdCk/CisJCWNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuYnVmX2NvdW50IC0KKwkJKHF1ZXVlLT5uZXh0X2J1Zl90b19pbml0IC0gaW5kZXgpIDoKKwkJY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQgLQorCQkocXVldWUtPm5leHRfYnVmX3RvX2luaXQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gaW5kZXgpOworCS8qIG9ubHkgcmVxdWV1ZSBhdCBhIGNlcnRhaW4gdGhyZXNob2xkIHRvIGF2b2lkIFNJR0FzICovCisJaWYgKGNvdW50ID49IFFFVEhfSU5fQlVGX1JFUVVFVUVfVEhSRVNIT0xEKGNhcmQpKSB7CisJCWZvciAoaSA9IHF1ZXVlLT5uZXh0X2J1Zl90b19pbml0OworCQkgICAgIGkgPCBxdWV1ZS0+bmV4dF9idWZfdG9faW5pdCArIGNvdW50OyArK2kpIHsKKwkJCWlmIChxZXRoX2luaXRfaW5wdXRfYnVmZmVyKGNhcmQsCisJCQkJJnF1ZXVlLT5idWZzW2kgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9RXSkpIHsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJbmV3Y291bnQrKzsKKwkJCX0KKwkJfQorCisJCWlmIChuZXdjb3VudCA8IGNvdW50KSB7CisJCQkvKiB3ZSBhcmUgaW4gbWVtb3J5IHNob3J0YWdlIHNvIHdlIHN3aXRjaCBiYWNrIHRvCisJCQkgICB0cmFkaXRpb25hbCBza2IgYWxsb2NhdGlvbiBhbmQgZHJvcCBwYWNrYWdlcyAqLworCQkJaWYgKCFhdG9taWNfcmVhZCgmY2FyZC0+Zm9yY2VfYWxsb2Nfc2tiKSAmJgorCQkJICAgIG5ldF9yYXRlbGltaXQoKSkKKwkJCQlQUklOVF9XQVJOKCJTd2l0Y2ggdG8gYWxsb2Mgc2tiXG4iKTsKKwkJCWF0b21pY19zZXQoJmNhcmQtPmZvcmNlX2FsbG9jX3NrYiwgMyk7CisJCQljb3VudCA9IG5ld2NvdW50OworCQl9IGVsc2UgeworCQkJaWYgKChhdG9taWNfcmVhZCgmY2FyZC0+Zm9yY2VfYWxsb2Nfc2tiKSA9PSAxKSAmJgorCQkJICAgIG5ldF9yYXRlbGltaXQoKSkKKwkJCQlQUklOVF9XQVJOKCJTd2l0Y2ggdG8gc2dcbiIpOworCQkJYXRvbWljX2FkZF91bmxlc3MoJmNhcmQtPmZvcmNlX2FsbG9jX3NrYiwgLTEsIDApOworCQl9CisKKwkJLyoKKwkJICogYWNjb3JkaW5nIHRvIG9sZCBjb2RlIGl0IHNob3VsZCBiZSBhdm9pZGVkIHRvIHJlcXVldWUgYWxsCisJCSAqIDEyOCBidWZmZXJzIGluIG9yZGVyIHRvIGJlbmVmaXQgZnJvbSBQQ0kgYXZvaWRhbmNlLgorCQkgKiB0aGlzIGZ1bmN0aW9uIGtlZXBzIGF0IGxlYXN0IG9uZSBidWZmZXIgKHRoZSBidWZmZXIgYXQKKwkJICogJ2luZGV4JykgdW4tcmVxdWV1ZWQgLT4gdGhpcyBidWZmZXIgaXMgdGhlIGZpcnN0IGJ1ZmZlciB0aGF0CisJCSAqIHdpbGwgYmUgcmVxdWV1ZWQgdGhlIG5leHQgdGltZQorCQkgKi8KKwkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX2NudCsrOworCQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fc3RhcnRfdGltZSA9CisJCQkJcWV0aF9nZXRfbWljcm9zKCk7CisJCX0KKwkJcmMgPSBkb19RRElPKENBUkRfRERFVihjYXJkKSwKKwkJCSAgICAgUURJT19GTEFHX1NZTkNfSU5QVVQgfCBRRElPX0ZMQUdfVU5ERVJfSU5URVJSVVBULAorCQkJICAgICAwLCBxdWV1ZS0+bmV4dF9idWZfdG9faW5pdCwgY291bnQsIE5VTEwpOworCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX3RpbWUgKz0KKwkJCQlxZXRoX2dldF9taWNyb3MoKSAtCisJCQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fc3RhcnRfdGltZTsKKwkJaWYgKHJjKSB7CisJCQlQUklOVF9XQVJOKCJxZXRoX3F1ZXVlX2lucHV0X2J1ZmZlcidzIGRvX1FESU8gIgorCQkJCSAgICJyZXR1cm4gJWkgKGRldmljZSAlcykuXG4iLAorCQkJCSAgIHJjLCBDQVJEX0RERVZfSUQoY2FyZCkpOworCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInFpbmJlcnIiKTsKKwkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisJCX0KKwkJcXVldWUtPm5leHRfYnVmX3RvX2luaXQgPSAocXVldWUtPm5leHRfYnVmX3RvX2luaXQgKyBjb3VudCkgJQorCQkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9xdWV1ZV9pbnB1dF9idWZmZXIpOworCitzdGF0aWMgaW50IHFldGhfaGFuZGxlX3NlbmRfZXJyb3Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGludCBxZGlvX2VyciwKKwkJdW5zaWduZWQgaW50IHNpZ2FfZXJyKQoreworCWludCBzYmFsZjE1ID0gYnVmZmVyLT5idWZmZXItPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZjsKKwlpbnQgY2MgPSBzaWdhX2VyciAmIDM7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiaGRzbmRlcnIiKTsKKwlxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLCBxZGlvX2Vyciwgc2lnYV9lcnIsICJxb3V0ZXJyIik7CisJc3dpdGNoIChjYykgeworCWNhc2UgMDoKKwkJaWYgKHFkaW9fZXJyKSB7CisJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAibG5rZmFpbCIpOworCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0eCAlMDJ4IiwKKwkJCQkgICAgICAgKHUxNilxZGlvX2VyciwgKHU4KXNiYWxmMTUpOworCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7CisJCX0KKwkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9OT05FOworCWNhc2UgMjoKKwkJaWYgKHNpZ2FfZXJyICYgUURJT19TSUdBX0VSUk9SX0JfQklUX1NFVCkgeworCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgIlNJR0FjYzJCIik7CisJCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUOworCQl9CisJCWlmICgoc2JhbGYxNSA+PSAxNSkgJiYgKHNiYWxmMTUgPD0gMzEpKQorCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9SRVRSWTsKKwkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7CisJCS8qIGxvb2sgYXQgcWRpb19lcnJvciBhbmQgc2JhbGYgMTUgKi8KKwljYXNlIDE6CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJTSUdBY2MxIik7CisJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOworCWNhc2UgMzoKKwlkZWZhdWx0OgorCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAiU0lHQWNjMyIpOworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQ7CisJfQorfQorCisvKgorICogU3dpdGNoZWQgdG8gcGFja2luZyBzdGF0ZSBpZiB0aGUgbnVtYmVyIG9mIHVzZWQgYnVmZmVycyBvbiBhIHF1ZXVlCisgKiByZWFjaGVzIGEgY2VydGFpbiBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQgcWV0aF9zd2l0Y2hfdG9fcGFja2luZ19pZl9uZWVkZWQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUpCit7CisJaWYgKCFxdWV1ZS0+ZG9fcGFjaykgeworCQlpZiAoYXRvbWljX3JlYWQoJnF1ZXVlLT51c2VkX2J1ZmZlcnMpCisJCSAgICA+PSBRRVRIX0hJR0hfV0FURVJNQVJLX1BBQ0speworCQkJLyogc3dpdGNoIG5vbi1QQUNLSU5HIC0+IFBBQ0tJTkcgKi8KKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJucC0+cGFjayIpOworCQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNjX2RwX3ArKzsKKwkJCXF1ZXVlLT5kb19wYWNrID0gMTsKKwkJfQorCX0KK30KKworLyoKKyAqIFN3aXRjaGVzIGZyb20gcGFja2luZyB0byBub24tcGFja2luZyBtb2RlLiBJZiB0aGVyZSBpcyBhIHBhY2tpbmcKKyAqIGJ1ZmZlciBvbiB0aGUgcXVldWUgdGhpcyBidWZmZXIgd2lsbCBiZSBwcmVwYXJlZCB0byBiZSBmbHVzaGVkLgorICogSW4gdGhhdCBjYXNlIDEgaXMgcmV0dXJuZWQgdG8gaW5mb3JtIHRoZSBjYWxsZXIuIElmIG5vIGJ1ZmZlcgorICogaGFzIHRvIGJlIGZsdXNoZWQsIHplcm8gaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgcWV0aF9zd2l0Y2hfdG9fbm9ucGFja2luZ19pZl9uZWVkZWQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUpCit7CisJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7CisJaW50IGZsdXNoX2NvdW50ID0gMDsKKworCWlmIChxdWV1ZS0+ZG9fcGFjaykgeworCQlpZiAoYXRvbWljX3JlYWQoJnF1ZXVlLT51c2VkX2J1ZmZlcnMpCisJCSAgICA8PSBRRVRIX0xPV19XQVRFUk1BUktfUEFDSykgeworCQkJLyogc3dpdGNoIFBBQ0tJTkcgLT4gbm9uLVBBQ0tJTkcgKi8KKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJwYWNrLT5ucCIpOworCQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNjX3BfZHArKzsKKwkJCXF1ZXVlLT5kb19wYWNrID0gMDsKKwkJCS8qIGZsdXNoIHBhY2tpbmcgYnVmZmVycyAqLworCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKKwkJCWlmICgoYXRvbWljX3JlYWQoJmJ1ZmZlci0+c3RhdGUpID09CisJCQkJCQlRRVRIX1FESU9fQlVGX0VNUFRZKSAmJgorCQkJICAgIChidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsID4gMCkpIHsKKwkJCQlhdG9taWNfc2V0KCZidWZmZXItPnN0YXRlLAorCQkJCQkJUUVUSF9RRElPX0JVRl9QUklNRUQpOworCQkJCWZsdXNoX2NvdW50Kys7CisJCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQorCQkJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCisJCQkJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGZsdXNoX2NvdW50OworfQorCisvKgorICogQ2FsbGVkIHRvIGZsdXNoIGEgcGFja2luZyBidWZmZXIgaWYgbm8gbW9yZSBwY2kgZmxhZ3MgYXJlIG9uIHRoZSBxdWV1ZS4KKyAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIHBhY2tpbmcgYnVmZmVyIGFuZCBwcmVwYXJlcyBpdCB0byBiZSBmbHVzaGVkLgorICogSW4gdGhhdCBjYXNlIHJldHVybnMgMSwgb3RoZXJ3aXNlIHplcm8uCisgKi8KK3N0YXRpYyBpbnQgcWV0aF9mbHVzaF9idWZmZXJzX29uX25vX3BjaShzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlcjsKKworCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07CisJaWYgKChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgPT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgJiYKKwkgICAoYnVmZmVyLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+IDApKSB7CisJCS8qIGl0J3MgYSBwYWNraW5nIGJ1ZmZlciAqLworCQlhdG9taWNfc2V0KCZidWZmZXItPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7CisJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KKwkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2ZsdXNoX2J1ZmZlcnMoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsIGludCB1bmRlcl9pbnQsCisJCWludCBpbmRleCwgaW50IGNvdW50KQoreworCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmOworCWludCByYzsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcWRpb19mbGFnczsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmbHVzaGJ1ZiIpOworCisJZm9yIChpID0gaW5kZXg7IGkgPCBpbmRleCArIGNvdW50OyArK2kpIHsKKwkJYnVmID0gJnF1ZXVlLT5idWZzW2kgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCAtIDFdLmZsYWdzIHw9CisJCQkJU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCisJCWlmIChxdWV1ZS0+Y2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcXVldWUtPmRvX3BhY2spIHsKKwkJCWlmICgoYXRvbWljX3JlYWQoJnF1ZXVlLT51c2VkX2J1ZmZlcnMpID49CisJCQkJKFFFVEhfSElHSF9XQVRFUk1BUktfUEFDSyAtCisJCQkJIFFFVEhfV0FURVJNQVJLX1BBQ0tfRlVaWikpICYmCisJCQkgICAgIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpIHsKKwkJCQkvKiBpdCdzIGxpa2VseSB0aGF0IHdlJ2xsIGdvIHRvIHBhY2tpbmcKKwkJCQkgKiBtb2RlIHNvb24gKi8KKwkJCQlhdG9taWNfaW5jKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7CisJCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uZmxhZ3MgfD0gMHg0MDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICghYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkgeworCQkJCS8qCisJCQkJICogdGhlcmUncyBubyBvdXRzdGFuZGluZyBQQ0kgYW55IG1vcmUsIHNvIHdlCisJCQkJICogaGF2ZSB0byByZXF1ZXN0IGEgUENJIHRvIGJlIHN1cmUgdGhlIHRoZSBQQ0kKKwkJCQkgKiB3aWxsIHdha2UgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUgdGhlbiB3ZQorCQkJCSAqIGNhbiBmbHVzaCBwYWNrZWQgYnVmZmVycyB0aGF0IG1pZ2h0IHN0aWxsIGJlCisJCQkJICogaGFuZ2luZyBhcm91bmQsIHdoaWNoIGNhbiBoYXBwZW4gaWYgbm8KKwkJCQkgKiBmdXJ0aGVyIHNlbmQgd2FzIHJlcXVlc3RlZCBieSB0aGUgc3RhY2sKKwkJCQkgKi8KKwkJCQlhdG9taWNfaW5jKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7CisJCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uZmxhZ3MgfD0gMHg0MDsKKwkJCX0KKwkJfQorCX0KKworCXF1ZXVlLT5jYXJkLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAocXVldWUtPmNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19jbnQrKzsKKwkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lID0KKwkJCXFldGhfZ2V0X21pY3JvcygpOworCX0KKwlxZGlvX2ZsYWdzID0gUURJT19GTEFHX1NZTkNfT1VUUFVUOworCWlmICh1bmRlcl9pbnQpCisJCXFkaW9fZmxhZ3MgfD0gUURJT19GTEFHX1VOREVSX0lOVEVSUlVQVDsKKwlpZiAoYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkKKwkJcWRpb19mbGFncyB8PSBRRElPX0ZMQUdfUENJX09VVDsKKwlyYyA9IGRvX1FESU8oQ0FSRF9EREVWKHF1ZXVlLT5jYXJkKSwgcWRpb19mbGFncywKKwkJICAgICBxdWV1ZS0+cXVldWVfbm8sIGluZGV4LCBjb3VudCwgTlVMTCk7CisJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3RpbWUgKz0KKwkJCXFldGhfZ2V0X21pY3JvcygpIC0KKwkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fc3RhcnRfdGltZTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZsdXNoYnVmIik7CisJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiIGVyciVkIiwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiVzIiwgQ0FSRF9EREVWX0lEKHF1ZXVlLT5jYXJkKSk7CisJCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CisJCS8qIHRoaXMgbXVzdCBub3QgaGFwcGVuIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLiBpZiBpdAorCQkgKiBoYXBwZW5zIHNvbWV0aGluZyBpcyByZWFsbHkgd3JvbmcgLT4gcmVjb3ZlciAqLworCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHF1ZXVlLT5jYXJkKTsKKwkJcmV0dXJuOworCX0KKwlhdG9taWNfYWRkKGNvdW50LCAmcXVldWUtPnVzZWRfYnVmZmVycyk7CisJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnQgKz0gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfY2hlY2tfb3V0Ym91bmRfcXVldWUoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUpCit7CisJaW50IGluZGV4OworCWludCBmbHVzaF9jbnQgPSAwOworCWludCBxX3dhc19wYWNraW5nID0gMDsKKworCS8qCisJICogY2hlY2sgaWYgd2VlZCBoYXZlIHRvIHN3aXRjaCB0byBub24tcGFja2luZyBtb2RlIG9yIGlmCisJICogd2UgaGF2ZSB0byBnZXQgYSBwY2kgZmxhZyBvdXQgb24gdGhlIHF1ZXVlCisJICovCisJaWYgKChhdG9taWNfcmVhZCgmcXVldWUtPnVzZWRfYnVmZmVycykgPD0gUUVUSF9MT1dfV0FURVJNQVJLX1BBQ0spIHx8CisJICAgICFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKSB7CisJCWlmIChhdG9taWNfeGNoZygmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX0xPQ0tFRF9GTFVTSCkgPT0KKwkJCQlRRVRIX09VVF9RX1VOTE9DS0VEKSB7CisJCQkvKgorCQkJICogSWYgd2UgZ2V0IGluIGhlcmUsIHRoZXJlIHdhcyBubyBhY3Rpb24gaW4KKwkJCSAqIGRvX3NlbmRfcGFja2V0LiBTbywgd2UgY2hlY2sgaWYgdGhlcmUgaXMgYQorCQkJICogcGFja2luZyBidWZmZXIgdG8gYmUgZmx1c2hlZCBoZXJlLgorCQkJICovCisJCQluZXRpZl9zdG9wX3F1ZXVlKHF1ZXVlLT5jYXJkLT5kZXYpOworCQkJaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKKwkJCXFfd2FzX3BhY2tpbmcgPSBxdWV1ZS0+ZG9fcGFjazsKKwkJCS8qIHF1ZXVlLT5kb19wYWNrIG1heSBjaGFuZ2UgKi8KKwkJCWJhcnJpZXIoKTsKKwkJCWZsdXNoX2NudCArPSBxZXRoX3N3aXRjaF90b19ub25wYWNraW5nX2lmX25lZWRlZChxdWV1ZSk7CisJCQlpZiAoIWZsdXNoX2NudCAmJgorCQkJICAgICFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKQorCQkJCWZsdXNoX2NudCArPQorCQkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnNfb25fbm9fcGNpKHF1ZXVlKTsKKwkJCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cyAmJgorCQkJICAgIHFfd2FzX3BhY2tpbmcpCisJCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50X3BhY2sgKz0KKwkJCQkJZmx1c2hfY250OworCQkJaWYgKGZsdXNoX2NudCkKKwkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDEsIGluZGV4LCBmbHVzaF9jbnQpOworCQkJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VEKTsKKwkJfQorCX0KK30KKwordm9pZCBxZXRoX3FkaW9fb3V0cHV0X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldiwgdW5zaWduZWQgaW50IHN0YXR1cywKKwkJdW5zaWduZWQgaW50IHFkaW9fZXJyb3IsIHVuc2lnbmVkIGludCBzaWdhX2Vycm9yLAorCQl1bnNpZ25lZCBpbnQgX19xdWV1ZSwgaW50IGZpcnN0X2VsZW1lbnQsIGludCBjb3VudCwKKwkJdW5zaWduZWQgbG9uZyBjYXJkX3B0cikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkICAgICAgICA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGNhcmRfcHRyOworCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXNbX19xdWV1ZV07CisJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7CisJaW50IGk7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAicWRvdWhkbCIpOworCWlmIChzdGF0dXMgJiBRRElPX1NUQVRVU19MT09LX0ZPUl9FUlJPUikgeworCQlpZiAoc3RhdHVzICYgUURJT19TVEFUVVNfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OKSB7CisJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiYWNoa2NvbmQiKTsKKwkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisJCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiUwOHgiLCBzdGF0dXMpOworCQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOworCQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgeworCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXJfY250Kys7CisJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl9zdGFydF90aW1lID0KKwkJCXFldGhfZ2V0X21pY3JvcygpOworCX0KKwlmb3IgKGkgPSBmaXJzdF9lbGVtZW50OyBpIDwgKGZpcnN0X2VsZW1lbnQgKyBjb3VudCk7ICsraSkgeworCQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1FdOworCQkvKndlIG9ubHkgaGFuZGxlIHRoZSBLSUNLX0lUIGVycm9yIGJ5IGRvaW5nIGEgcmVjb3ZlcnkgKi8KKwkJaWYgKHFldGhfaGFuZGxlX3NlbmRfZXJyb3IoY2FyZCwgYnVmZmVyLAorCQkJCQkgICBxZGlvX2Vycm9yLCBzaWdhX2Vycm9yKQorCQkJCT09IFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUKXsKKwkJCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKKwkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CisJCQlyZXR1cm47CisJCX0KKwkJcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKHF1ZXVlLCBidWZmZXIpOworCX0KKwlhdG9taWNfc3ViKGNvdW50LCAmcXVldWUtPnVzZWRfYnVmZmVycyk7CisJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgb24gdGhpcyBvdXRib3VuZCBxdWV1ZSAqLworCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQorCQlxZXRoX2NoZWNrX291dGJvdW5kX3F1ZXVlKHF1ZXVlKTsKKworCW5ldGlmX3dha2VfcXVldWUocXVldWUtPmNhcmQtPmRldik7CisJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCisJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl90aW1lICs9IHFldGhfZ2V0X21pY3JvcygpIC0KKwkJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl9zdGFydF90aW1lOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9xZGlvX291dHB1dF9oYW5kbGVyKTsKKworaW50IHFldGhfZ2V0X2Nhc3RfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBjYXN0X3R5cGUgPSBSVE5fVU5TUEVDOworCisJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCisJCXJldHVybiBjYXN0X3R5cGU7CisKKwlpZiAoc2tiLT5kc3QgJiYgc2tiLT5kc3QtPm5laWdoYm91cikgeworCQljYXN0X3R5cGUgPSBza2ItPmRzdC0+bmVpZ2hib3VyLT50eXBlOworCQlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSB8fAorCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fTVVMVElDQVNUKSB8fAorCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fQU5ZQ0FTVCkpCisJCQlyZXR1cm4gY2FzdF90eXBlOworCQllbHNlCisJCQlyZXR1cm4gUlROX1VOU1BFQzsKKwl9CisJLyogdHJ5IHNvbWV0aGluZyBlbHNlICovCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVBWNikKKwkJcmV0dXJuIChza2JfbmV0d29ya19oZWFkZXIoc2tiKVsyNF0gPT0gMHhmZikgPworCQkJCVJUTl9NVUxUSUNBU1QgOiAwOworCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApCisJCXJldHVybiAoKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpWzE2XSAmIDB4ZjApID09IDB4ZTApID8KKwkJCQlSVE5fTVVMVElDQVNUIDogMDsKKwkvKiAuLi4gKi8KKwlpZiAoIW1lbWNtcChza2ItPmRhdGEsIHNrYi0+ZGV2LT5icm9hZGNhc3QsIDYpKQorCQlyZXR1cm4gUlROX0JST0FEQ0FTVDsKKwllbHNlIHsKKwkJdTE2IGhkcl9tYWM7CisKKwkJaGRyX21hYyA9ICooKHUxNiAqKXNrYi0+ZGF0YSk7CisJCS8qIHRyIG11bHRpY2FzdD8gKi8KKwkJc3dpdGNoIChjYXJkLT5pbmZvLmxpbmtfdHlwZSkgeworCQljYXNlIFFFVEhfTElOS19UWVBFX0hTVFI6CisJCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKKwkJCWlmICgoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19OQykgfHwKKwkJCSAgICAoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19DKSkKKwkJCQlyZXR1cm4gUlROX01VTFRJQ0FTVDsKKwkJCWJyZWFrOworCQkvKiBldGggb3Igc28gbXVsdGljYXN0PyAqLworCQlkZWZhdWx0OgorCQlpZiAoKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y0KSB8fAorCQkJICAgIChoZHJfbWFjID09IFFFVEhfRVRIX01BQ19WNikpCisJCQkJcmV0dXJuIFJUTl9NVUxUSUNBU1Q7CisJCX0KKwl9CisJcmV0dXJuIGNhc3RfdHlwZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfZ2V0X2Nhc3RfdHlwZSk7CisKK2ludCBxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJaW50IGlwdiwgaW50IGNhc3RfdHlwZSkKK3sKKwlpZiAoIWlwdiAmJiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TQUUpKQorCQlyZXR1cm4gY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZTsKKwlzd2l0Y2ggKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcykgeworCWNhc2UgNDoKKwkJaWYgKGNhc3RfdHlwZSAmJiBjYXJkLT5pbmZvLmlzX211bHRpY2FzdF9kaWZmZXJlbnQpCisJCQlyZXR1cm4gY2FyZC0+aW5mby5pc19tdWx0aWNhc3RfZGlmZmVyZW50ICYKKwkJCQkoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzIC0gMSk7CisJCWlmIChjYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgJiYgKGlwdiA9PSA0KSkgeworCQkJY29uc3QgdTggdG9zID0gaXBfaGRyKHNrYiktPnRvczsKKworCQkJaWYgKGNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9PQorCQkJCVFFVEhfUFJJT19RX0lOR19UT1MpIHsKKwkJCQlpZiAodG9zICYgSVBfVE9TX05PVElNUE9SVEFOVCkKKwkJCQkJcmV0dXJuIDM7CisJCQkJaWYgKHRvcyAmIElQX1RPU19ISUdIUkVMSUFCSUxJVFkpCisJCQkJCXJldHVybiAyOworCQkJCWlmICh0b3MgJiBJUF9UT1NfSElHSFRIUk9VR0hQVVQpCisJCQkJCXJldHVybiAxOworCQkJCWlmICh0b3MgJiBJUF9UT1NfTE9XREVMQVkpCisJCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKGNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9PQorCQkJCVFFVEhfUFJJT19RX0lOR19QUkVDKQorCQkJCXJldHVybiAzIC0gKHRvcyA+PiA2KTsKKwkJfSBlbHNlIGlmIChjYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgJiYgKGlwdiA9PSA2KSkgeworCQkJLyogVE9ETzogSVB2NiEhISAqLworCQl9CisJCXJldHVybiBjYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlOworCWNhc2UgMTogLyogZmFsbHRocm91Z2ggZm9yIHNpbmdsZS1vdXQtcXVldWUgMTkyMC1kZXZpY2UgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2dldF9wcmlvcml0eV9xdWV1ZSk7CisKK3N0YXRpYyB2b2lkIF9fcWV0aF9mcmVlX25ld19za2Ioc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYikKK3sKKwlpZiAob3JpZ19za2IgIT0gbmV3X3NrYikKKwkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnFldGhfcmVhbGxvY19oZWFkcm9vbShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IHNrYjsKKworCWlmIChza2JfaGVhZHJvb20oc2tiKSA+PSBzaXplKQorCQlyZXR1cm4gc2tiOworCW5ld19za2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIHNpemUpOworCWlmICghbmV3X3NrYikKKwkJUFJJTlRfRVJSKCJDb3VsZCBub3QgcmVhbGxvYyBoZWFkcm9vbSBmb3IgcWV0aF9oZHIgIgorCQkJICAib24gaW50ZXJmYWNlICVzIiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJcmV0dXJuIG5ld19za2I7Cit9CisKK3N0cnVjdCBza19idWZmICpxZXRoX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCisJCSBzdHJ1Y3QgcWV0aF9oZHIgKipoZHIpCit7CisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAicHJlcHNrYiIpOworCisJbmV3X3NrYiA9IHFldGhfcmVhbGxvY19oZWFkcm9vbShjYXJkLCBza2IsCisJCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7CisJaWYgKCFuZXdfc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCSpoZHIgPSAoKHN0cnVjdCBxZXRoX2hkciAqKXFldGhfcHVzaF9za2IoY2FyZCwgbmV3X3NrYiwKKwkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKSk7CisJaWYgKCpoZHIgPT0gTlVMTCkgeworCQlfX3FldGhfZnJlZV9uZXdfc2tiKHNrYiwgbmV3X3NrYik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gbmV3X3NrYjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfcHJlcGFyZV9za2IpOworCitpbnQgcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdm9pZCAqaGRyLAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBlbGVtcykKK3sKKwlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKKworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID4gMCkKKwkJZWxlbWVudHNfbmVlZGVkID0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKTsKKwlpZiAoZWxlbWVudHNfbmVlZGVkID09IDApCisJCWVsZW1lbnRzX25lZWRlZCA9IDEgKyAoKCgoKHVuc2lnbmVkIGxvbmcpIGhkcikgJSBQQUdFX1NJWkUpCisJCQkrIHNrYi0+bGVuKSA+PiBQQUdFX1NISUZUKTsKKwlpZiAoKGVsZW1lbnRzX25lZWRlZCArIGVsZW1zKSA+IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSkgeworCQlQUklOVF9FUlIoIkludmFsaWQgc2l6ZSBvZiBJUCBwYWNrZXQgIgorCQkJIihOdW1iZXI9JWQgLyBMZW5ndGg9JWQpLiBEaXNjYXJkZWQuXG4iLAorCQkJKGVsZW1lbnRzX25lZWRlZCtlbGVtcyksIHNrYi0+bGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBlbGVtZW50c19uZWVkZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2dldF9lbGVtZW50c19ubyk7CisKK3N0YXRpYyB2b2lkIF9fcWV0aF9maWxsX2J1ZmZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlciwKKwkJaW50IGlzX3RzbywgaW50ICpuZXh0X2VsZW1lbnRfdG9fZmlsbCkKK3sKKwlpbnQgbGVuZ3RoID0gc2tiLT5sZW47CisJaW50IGxlbmd0aF9oZXJlOworCWludCBlbGVtZW50OworCWNoYXIgKmRhdGE7CisJaW50IGZpcnN0X2xhcCA7CisKKwllbGVtZW50ID0gKm5leHRfZWxlbWVudF90b19maWxsOworCWRhdGEgPSBza2ItPmRhdGE7CisJZmlyc3RfbGFwID0gKGlzX3RzbyA9PSAwID8gMSA6IDApOworCisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJLyogbGVuZ3RoX2hlcmUgaXMgdGhlIHJlbWFpbmluZyBhbW91bnQgb2YgZGF0YSBpbiB0aGlzIHBhZ2UgKi8KKwkJbGVuZ3RoX2hlcmUgPSBQQUdFX1NJWkUgLSAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgJSBQQUdFX1NJWkUpOworCQlpZiAobGVuZ3RoIDwgbGVuZ3RoX2hlcmUpCisJCQlsZW5ndGhfaGVyZSA9IGxlbmd0aDsKKworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IGRhdGE7CisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBsZW5ndGhfaGVyZTsKKwkJbGVuZ3RoIC09IGxlbmd0aF9oZXJlOworCQlpZiAoIWxlbmd0aCkgeworCQkJaWYgKGZpcnN0X2xhcCkKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSAwOworCQkJZWxzZQorCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9CisJCQkJICAgIFNCQUxfRkxBR1NfTEFTVF9GUkFHOworCQl9IGVsc2UgeworCQkJaWYgKGZpcnN0X2xhcCkKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQorCQkJCSAgICBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCQllbHNlCisJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KKwkJCQkgICAgU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwkJfQorCQlkYXRhICs9IGxlbmd0aF9oZXJlOworCQllbGVtZW50Kys7CisJCWZpcnN0X2xhcCA9IDA7CisJfQorCSpuZXh0X2VsZW1lbnRfdG9fZmlsbCA9IGVsZW1lbnQ7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9maWxsX2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKKwkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHFldGhfaGRyX3RzbyAqaGRyOworCWludCBmbHVzaF9jbnQgPSAwLCBoZHJfbGVuLCBsYXJnZV9zZW5kID0gMDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJxZGZpbGxiZiIpOworCisJYnVmZmVyID0gYnVmLT5idWZmZXI7CisJYXRvbWljX2luYygmc2tiLT51c2Vycyk7CisJc2tiX3F1ZXVlX3RhaWwoJmJ1Zi0+c2tiX2xpc3QsIHNrYik7CisKKwloZHIgID0gKHN0cnVjdCBxZXRoX2hkcl90c28gKikgc2tiLT5kYXRhOworCS8qY2hlY2sgZmlyc3Qgb24gVFNPIC4uLi4qLworCWlmIChoZHItPmhkci5oZHIubDMuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9UU08pIHsKKwkJaW50IGVsZW1lbnQgPSBidWYtPm5leHRfZWxlbWVudF90b19maWxsOworCisJCWhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykgKyBoZHItPmV4dC5kZ19oZHJfbGVuOworCQkvKmZpbGwgZmlyc3QgYnVmZmVyIGVudHJ5IG9ubHkgd2l0aCBoZWFkZXIgaW5mb3JtYXRpb24gKi8KKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmFkZHIgPSBza2ItPmRhdGE7CisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBoZHJfbGVuOworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKKwkJc2tiLT5kYXRhICs9IGhkcl9sZW47CisJCXNrYi0+bGVuICAtPSBoZHJfbGVuOworCQlsYXJnZV9zZW5kID0gMTsKKwl9CisJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkKKwkJX19xZXRoX2ZpbGxfYnVmZmVyKHNrYiwgYnVmZmVyLCBsYXJnZV9zZW5kLAorCQkJCSAgIChpbnQgKikmYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCk7CisJZWxzZQorCQlfX3FldGhfZmlsbF9idWZmZXJfZnJhZyhza2IsIGJ1ZmZlciwgbGFyZ2Vfc2VuZCwKKwkJCQkJKGludCAqKSZidWYtPm5leHRfZWxlbWVudF90b19maWxsKTsKKworCWlmICghcXVldWUtPmRvX3BhY2spIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImZpbGxiZm5wIik7CisJCS8qIHNldCBzdGF0ZSB0byBQUklNRUQgLT4gd2lsbCBiZSBmbHVzaGVkICovCisJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKKwkJZmx1c2hfY250ID0gMTsKKwl9IGVsc2UgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZmlsbGJmcGEiKTsKKwkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKKwkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPj0KKwkJCQlRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpKSB7CisJCQkvKgorCQkJICogcGFja2VkIGJ1ZmZlciBpZiBmdWxsIC0+IHNldCBzdGF0ZSBQUklNRUQKKwkJCSAqIC0+IHdpbGwgYmUgZmx1c2hlZAorCQkJICovCisJCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7CisJCQlmbHVzaF9jbnQgPSAxOworCQl9CisJfQorCXJldHVybiBmbHVzaF9jbnQ7Cit9CisKK2ludCBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBxZXRoX2hkciAqaGRyLCBpbnQgZWxlbWVudHNfbmVlZGVkLAorCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgYnVmZmVyc19uZWVkZWQgPSAwOworCWludCBmbHVzaF9jbnQgPSAwOworCWludCBpbmRleDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJkb3NuZHBmYSIpOworCisJLyogc3BpbiB1bnRpbCB3ZSBnZXQgdGhlIHF1ZXVlIC4uLiAqLworCXdoaWxlIChhdG9taWNfY21weGNoZygmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VELAorCQkJICAgICAgUUVUSF9PVVRfUV9MT0NLRUQpICE9IFFFVEhfT1VUX1FfVU5MT0NLRUQpOworCS8qIC4uLiBub3cgd2UndmUgZ290IHRoZSBxdWV1ZSAqLworCWluZGV4ID0gcXVldWUtPm5leHRfYnVmX3RvX2ZpbGw7CisJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKKwkvKgorCSAqIGNoZWNrIGlmIGJ1ZmZlciBpcyBlbXB0eSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgJ292ZXJ0YWtlJworCSAqIG91cnNlbHZlcyBhbmQgdHJ5IHRvIGZpbGwgYSBidWZmZXIgdGhhdCBpcyBhbHJlYWR5IHByaW1lZAorCSAqLworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkKKwkJZ290byBvdXQ7CisJaWYgKGN0eCA9PSBOVUxMKQorCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKKwkJCQkJICBRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCWVsc2UgeworCQlidWZmZXJzX25lZWRlZCA9IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHF1ZXVlLAorCQkJCQkJCQkJY3R4KTsKKwkJaWYgKGJ1ZmZlcnNfbmVlZGVkIDwgMCkKKwkJCWdvdG8gb3V0OworCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9CisJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyBidWZmZXJzX25lZWRlZCkgJQorCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKKwl9CisJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VEKTsKKwlpZiAoY3R4ID09IE5VTEwpIHsKKwkJcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IpOworCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDAsIGluZGV4LCAxKTsKKwl9IGVsc2UgeworCQlmbHVzaF9jbnQgPSBxZXRoX2VkZHBfZmlsbF9idWZmZXIocXVldWUsIGN0eCwgaW5kZXgpOworCQlXQVJOX09OKGJ1ZmZlcnNfbmVlZGVkICE9IGZsdXNoX2NudCk7CisJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgMCwgaW5kZXgsIGZsdXNoX2NudCk7CisJfQorCXJldHVybiAwOworb3V0OgorCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CisJcmV0dXJuIC1FQlVTWTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdCk7CisKK2ludCBxZXRoX2RvX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKKwkJaW50IGVsZW1lbnRzX25lZWRlZCwgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7CisJaW50IHN0YXJ0X2luZGV4OworCWludCBmbHVzaF9jb3VudCA9IDA7CisJaW50IGRvX3BhY2sgPSAwOworCWludCB0bXA7CisJaW50IHJjID0gMDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJkb3NuZHBrdCIpOworCisJLyogc3BpbiB1bnRpbCB3ZSBnZXQgdGhlIHF1ZXVlIC4uLiAqLworCXdoaWxlIChhdG9taWNfY21weGNoZygmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VELAorCQkJICAgICAgUUVUSF9PVVRfUV9MT0NLRUQpICE9IFFFVEhfT1VUX1FfVU5MT0NLRUQpOworCXN0YXJ0X2luZGV4ID0gcXVldWUtPm5leHRfYnVmX3RvX2ZpbGw7CisJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKKwkvKgorCSAqIGNoZWNrIGlmIGJ1ZmZlciBpcyBlbXB0eSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgJ292ZXJ0YWtlJworCSAqIG91cnNlbHZlcyBhbmQgdHJ5IHRvIGZpbGwgYSBidWZmZXIgdGhhdCBpcyBhbHJlYWR5IHByaW1lZAorCSAqLworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgeworCQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHN3aXRjaCBwYWNraW5nIHN0YXRlIG9mIHRoaXMgcXVldWUgKi8KKwlxZXRoX3N3aXRjaF90b19wYWNraW5nX2lmX25lZWRlZChxdWV1ZSk7CisJaWYgKHF1ZXVlLT5kb19wYWNrKSB7CisJCWRvX3BhY2sgPSAxOworCQlpZiAoY3R4ID09IE5VTEwpIHsKKwkJCS8qIGRvZXMgcGFja2V0IGZpdCBpbiBjdXJyZW50IGJ1ZmZlcj8gKi8KKwkJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0KKwkJCSAgICBidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsKSA8IGVsZW1lbnRzX25lZWRlZCkgeworCQkJCS8qIC4uLiBubyAtPiBzZXQgc3RhdGUgUFJJTUVEICovCisJCQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSwKKwkJCQkJUUVUSF9RRElPX0JVRl9QUklNRUQpOworCQkJCWZsdXNoX2NvdW50Kys7CisJCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQorCQkJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCisJCQkJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKKwkJCQkvKiB3ZSBkaWQgYSBzdGVwIGZvcndhcmQsIHNvIGNoZWNrIGJ1ZmZlciBzdGF0ZQorCQkJCSAqIGFnYWluICovCisJCQkJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPQorCQkJCQkJUUVUSF9RRElPX0JVRl9FTVBUWSl7CisJCQkJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgMCwKKwkJCQkJCXN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7CisJCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwKKwkJCQkJCVFFVEhfT1VUX1FfVU5MT0NLRUQpOworCQkJCQlyZXR1cm4gLUVCVVNZOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIGVsZW1lbnRzIChpbmNsdWRpbmcgZm9sbG93aW5nCisJCQkgKiBmcmVlIGJ1ZmZlcnMpIHRvIGhhbmRsZSBlZGRwIGNvbnRleHQgKi8KKwkJCWlmIChxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChxdWV1ZSwgY3R4KQorCQkJCTwgMCkgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCVBSSU5UX1dBUk4oImVkZHAgdHhfZHJvcHBlZCAxXG4iKTsKKwkJCQlyYyA9IC1FQlVTWTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY3R4ID09IE5VTEwpCisJCXRtcCA9IHFldGhfZmlsbF9idWZmZXIocXVldWUsIGJ1ZmZlciwgc2tiKTsKKwllbHNlIHsKKwkJdG1wID0gcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHF1ZXVlLCBjdHgsCisJCQkJCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCk7CisJCWlmICh0bXAgPCAwKSB7CisJCQlQUklOVF9FUlIoImVkZHAgdHhfZHJvcHBlZCAyXG4iKTsKKwkJCXJjID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPSAocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyB0bXApICUKKwkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJZmx1c2hfY291bnQgKz0gdG1wOworb3V0OgorCWlmIChmbHVzaF9jb3VudCkKKwkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCAwLCBzdGFydF9pbmRleCwgZmx1c2hfY291bnQpOworCWVsc2UgaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKQorCQlhdG9taWNfeGNoZygmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX0xPQ0tFRF9GTFVTSCk7CisJLyoKKwkgKiBxdWV1ZS0+c3RhdGUgd2lsbCBnbyBmcm9tIExPQ0tFRCAtPiBVTkxPQ0tFRCBvciBmcm9tCisJICogTE9DS0VEX0ZMVVNIIC0+IExPQ0tFRCBpZiBvdXRwdXRfaGFuZGxlciB3YW50ZWQgdG8gJ25vdGlmeScgdXMKKwkgKiAoc3dpdGNoIHBhY2tpbmcgc3RhdGUgb3IgZmx1c2ggYnVmZmVyIHRvIGdldCBhbm90aGVyIHBjaSBmbGFnIG91dCkuCisJICogSW4gdGhhdCBjYXNlIHdlIHdpbGwgZW50ZXIgdGhpcyBsb29wCisJICovCisJd2hpbGUgKGF0b21pY19kZWNfcmV0dXJuKCZxdWV1ZS0+c3RhdGUpKSB7CisJCWZsdXNoX2NvdW50ID0gMDsKKwkJc3RhcnRfaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKKwkJLyogY2hlY2sgaWYgd2UgY2FuIGdvIGJhY2sgdG8gbm9uLXBhY2tpbmcgc3RhdGUgKi8KKwkJZmx1c2hfY291bnQgKz0gcWV0aF9zd2l0Y2hfdG9fbm9ucGFja2luZ19pZl9uZWVkZWQocXVldWUpOworCQkvKgorCQkgKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGZsdXNoIGEgcGFja2luZyBidWZmZXIgdG8gZ2V0IGEgcGNpCisJCSAqIGZsYWcgb3V0IG9uIHRoZSBxdWV1ZQorCQkgKi8KKwkJaWYgKCFmbHVzaF9jb3VudCAmJiAhYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkKKwkJCWZsdXNoX2NvdW50ICs9IHFldGhfZmx1c2hfYnVmZmVyc19vbl9ub19wY2kocXVldWUpOworCQlpZiAoZmx1c2hfY291bnQpCisJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDAsIHN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7CisJfQorCS8qIGF0IHRoaXMgcG9pbnQgdGhlIHF1ZXVlIGlzIFVOTE9DS0VEIGFnYWluICovCisJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzICYmIGRvX3BhY2spCisJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudF9wYWNrICs9IGZsdXNoX2NvdW50OworCisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9kb19zZW5kX3BhY2tldCk7CisKK3N0YXRpYyBpbnQgcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKwlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMgKnNldHBhcm1zOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInBybWFkcGNiIik7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworCXNldHBhcm1zID0gJihjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zKTsKKworCXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKWNtZCk7CisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7CisJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAicHJtcmMlMi4yeCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwkJc2V0cGFybXMtPmRhdGEubW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOworCX0KKwljYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9IHNldHBhcm1zLT5kYXRhLm1vZGU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIG1vZGU7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPmRldjsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNldHByb20iKTsKKworCWlmICgoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgJiYKKwkgICAgIChjYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9PSBTRVRfUFJPTUlTQ19NT0RFX09OKSkgfHwKKwkgICAgKCEoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAmJgorCSAgICAgKGNhcmQtPmluZm8ucHJvbWlzY19tb2RlID09IFNFVF9QUk9NSVNDX01PREVfT0ZGKSkpCisJCXJldHVybjsKKwltb2RlID0gU0VUX1BST01JU0NfTU9ERV9PRkY7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJbW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT047CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJtb2RlOiV4IiwgbW9kZSk7CisKKwlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUsCisJCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhICsgSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLm1vZGUgPSBtb2RlOworCXFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfc2V0YWRwX3Byb21pc2NfbW9kZSk7CisKK2ludCBxZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKwljaGFyIGRiZl90ZXh0WzE1XTsKKworCWNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImNoZ210dSIpOworCXNwcmludGYoZGJmX3RleHQsICIlOHgiLCBuZXdfbXR1KTsKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCBkYmZfdGV4dCk7CisKKwlpZiAobmV3X210dSA8IDY0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobmV3X210dSA+IDY1NTM1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBfRlJBR01FTlRBVElPTikpICYmCisJICAgICghcWV0aF9tdHVfaXNfdmFsaWQoY2FyZCwgbmV3X210dSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2NoYW5nZV9tdHUpOworCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcWV0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCisJY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZ2V0c3RhdCIpOworCisJcmV0dXJuICZjYXJkLT5zdGF0czsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfZ2V0X3N0YXRzKTsKKworc3RhdGljIGludCBxZXRoX3NldGFkcHBhcm1zX2NoYW5nZV9tYWNhZGRyX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJjaGdtYWNjYiIpOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8CisJICAgICEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUFEKSkgeworCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwKKwkJICAgICAgICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkciwKKwkJICAgICAgIE9TQV9BRERSX0xFTik7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgfD0gUUVUSF9MQVlFUjJfTUFDX1JFQUQ7CisJfQorCXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKSBjbWQpOworCXJldHVybiAwOworfQorCitpbnQgcWV0aF9zZXRhZHBwYXJtc19jaGFuZ2VfbWFjYWRkcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImNoZ21hYyIpOworCisJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUywKKwkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5jaGFuZ2VfYWRkci5jbWQgPSBDSEFOR0VfQUREUl9SRUFEX01BQzsKKwljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkcl9zaXplID0gT1NBX0FERFJfTEVOOworCW1lbWNweSgmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmFkZHIsCisJICAgICAgIGNhcmQtPmRldi0+ZGV2X2FkZHIsIE9TQV9BRERSX0xFTik7CisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfc2V0YWRwcGFybXNfY2hhbmdlX21hY2FkZHJfY2IsCisJCQkgICAgICAgTlVMTCk7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9zZXRhZHBwYXJtc19jaGFuZ2VfbWFjYWRkcik7CisKK3ZvaWQgcWV0aF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKworCWNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOworCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3R4X3RpbWVvdXQpOworCitpbnQgcWV0aF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZ251bSkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChyZWdudW0pIHsKKwljYXNlIE1JSV9CTUNSOiAvKiBCYXNpYyBtb2RlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJcmMgPSBCTUNSX0ZVTExEUExYOworCQlpZiAoKGNhcmQtPmluZm8ubGlua190eXBlICE9IFFFVEhfTElOS19UWVBFX0dCSVRfRVRIKSAmJgorCQkgICAgKGNhcmQtPmluZm8ubGlua190eXBlICE9IFFFVEhfTElOS19UWVBFX09TTikgJiYKKwkJICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSAhPSBRRVRIX0xJTktfVFlQRV8xMEdCSVRfRVRIKSkKKwkJCXJjIHw9IEJNQ1JfU1BFRUQxMDA7CisJCWJyZWFrOworCWNhc2UgTUlJX0JNU1I6IC8qIEJhc2ljIG1vZGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCXJjID0gQk1TUl9FUkNBUCB8IEJNU1JfQU5FR0NPTVBMRVRFIHwgQk1TUl9MU1RBVFVTIHwKKwkJICAgICBCTVNSXzEwSEFMRiB8IEJNU1JfMTBGVUxMIHwgQk1TUl8xMDBIQUxGIHwgQk1TUl8xMDBGVUxMIHwKKwkJICAgICBCTVNSXzEwMEJBU0U0OworCQlicmVhazsKKwljYXNlIE1JSV9QSFlTSUQxOiAvKiBQSFlTIElEIDEgKi8KKwkJcmMgPSAoZGV2LT5kZXZfYWRkclswXSA8PCAxNikgfCAoZGV2LT5kZXZfYWRkclsxXSA8PCA4KSB8CisJCSAgICAgZGV2LT5kZXZfYWRkclsyXTsKKwkJcmMgPSAocmMgPj4gNSkgJiAweEZGRkY7CisJCWJyZWFrOworCWNhc2UgTUlJX1BIWVNJRDI6IC8qIFBIWVMgSUQgMiAqLworCQlyYyA9IChkZXYtPmRldl9hZGRyWzJdIDw8IDEwKSAmIDB4RkZGRjsKKwkJYnJlYWs7CisJY2FzZSBNSUlfQURWRVJUSVNFOiAvKiBBZHZlcnRpc2VtZW50IGNvbnRyb2wgcmVnICovCisJCXJjID0gQURWRVJUSVNFX0FMTDsKKwkJYnJlYWs7CisJY2FzZSBNSUlfTFBBOiAvKiBMaW5rIHBhcnRuZXIgYWJpbGl0eSByZWcgKi8KKwkJcmMgPSBMUEFfMTBIQUxGIHwgTFBBXzEwRlVMTCB8IExQQV8xMDBIQUxGIHwgTFBBXzEwMEZVTEwgfAorCQkgICAgIExQQV8xMDBCQVNFNCB8IExQQV9MUEFDSzsKKwkJYnJlYWs7CisJY2FzZSBNSUlfRVhQQU5TSU9OOiAvKiBFeHBhbnNpb24gcmVnaXN0ZXIgKi8KKwkJYnJlYWs7CisJY2FzZSBNSUlfRENPVU5URVI6IC8qIGRpc2Nvbm5lY3QgY291bnRlciAqLworCQlicmVhazsKKwljYXNlIE1JSV9GQ1NDT1VOVEVSOiAvKiBmYWxzZSBjYXJyaWVyIGNvdW50ZXIgKi8KKwkJYnJlYWs7CisJY2FzZSBNSUlfTldBWVRFU1Q6IC8qIE4td2F5IGF1dG8tbmVnIHRlc3QgcmVnaXN0ZXIgKi8KKwkJYnJlYWs7CisJY2FzZSBNSUlfUkVSUkNPVU5URVI6IC8qIHJ4IGVycm9yIGNvdW50ZXIgKi8KKwkJcmMgPSBjYXJkLT5zdGF0cy5yeF9lcnJvcnM7CisJCWJyZWFrOworCWNhc2UgTUlJX1NSRVZJU0lPTjogLyogc2lsaWNvbiByZXZpc2lvbiAqLworCQlicmVhazsKKwljYXNlIE1JSV9SRVNWMTogLyogcmVzZXJ2ZWQgMSAqLworCQlicmVhazsKKwljYXNlIE1JSV9MQlJFUlJPUjogLyogbG9vcGJhY2ssIHJ4LCBieXBhc3MgZXJyb3IgKi8KKwkJYnJlYWs7CisJY2FzZSBNSUlfUEhZQUREUjogLyogcGh5c2ljYWwgYWRkcmVzcyAqLworCQlicmVhazsKKwljYXNlIE1JSV9SRVNWMjogLyogcmVzZXJ2ZWQgMiAqLworCQlicmVhazsKKwljYXNlIE1JSV9UUElTVEFUVVM6IC8qIFRQSSBzdGF0dXMgZm9yIDEwbWJwcyAqLworCQlicmVhazsKKwljYXNlIE1JSV9OQ09ORklHOiAvKiBuZXR3b3JrIGludGVyZmFjZSBjb25maWcgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfbWRpb19yZWFkKTsKKworc3RhdGljIGludCBxZXRoX3NlbmRfaXBhX3NubXBfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwgaW50IGxlbiwKKwkJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkgKiwKKwkJCXVuc2lnbmVkIGxvbmcpLAorCQl2b2lkICpyZXBseV9wYXJhbSkKK3sKKwl1MTYgczEsIHMyOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNlbmRzbm1wIik7CisKKwltZW1jcHkoaW9iLT5kYXRhLCBJUEFfUERVX0hFQURFUiwgSVBBX1BEVV9IRUFERVJfU0laRSk7CisJbWVtY3B5KFFFVEhfSVBBX0NNRF9ERVNUX0FERFIoaW9iLT5kYXRhKSwKKwkgICAgICAgJmNhcmQtPnRva2VuLnVscF9jb25uZWN0aW9uX3IsIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7CisJLyogYWRqdXN0IFBEVSBsZW5ndGggZmllbGRzIGluIElQQV9QRFVfSEVBREVSICovCisJczEgPSAodTMyKSBJUEFfUERVX0hFQURFUl9TSVpFICsgbGVuOworCXMyID0gKHUzMikgbGVuOworCW1lbWNweShRRVRIX0lQQV9QRFVfTEVOX1RPVEFMKGlvYi0+ZGF0YSksICZzMSwgMik7CisJbWVtY3B5KFFFVEhfSVBBX1BEVV9MRU5fUERVMShpb2ItPmRhdGEpLCAmczIsIDIpOworCW1lbWNweShRRVRIX0lQQV9QRFVfTEVOX1BEVTIoaW9iLT5kYXRhKSwgJnMyLCAyKTsKKwltZW1jcHkoUUVUSF9JUEFfUERVX0xFTl9QRFUzKGlvYi0+ZGF0YSksICZzMiwgMik7CisJcmV0dXJuIHFldGhfc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgSVBBX1BEVV9IRUFERVJfU0laRSArIGxlbiwgaW9iLAorCQkJCSAgICAgIHJlcGx5X2NiLCByZXBseV9wYXJhbSk7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9zbm1wX2NvbW1hbmRfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIHNkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKwlzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfaW5mbyAqcWluZm87CisJc3RydWN0IHFldGhfc25tcF9jbWQgKnNubXA7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlfX3UxNiBkYXRhX2xlbjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzbnBjbWRjYiIpOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgc2RhdGE7CisJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopKChjaGFyICopY21kIC0gcmVwbHktPm9mZnNldCk7CisJcWluZm8gPSAoc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2luZm8gKikgcmVwbHktPnBhcmFtOworCXNubXAgPSAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnNubXA7CisKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJzY2VyMSVpIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnJldHVybl9jb2RlKSB7CisJCWNtZC0+aGRyLnJldHVybl9jb2RlID0KKwkJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnJldHVybl9jb2RlOworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNjZXIyJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCXJldHVybiAwOworCX0KKwlkYXRhX2xlbiA9ICooKF9fdTE2ICopUUVUSF9JUEFfUERVX0xFTl9QRFUxKGRhdGEpKTsKKwlpZiAoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vID09IDEpCisJCWRhdGFfbGVuIC09IChfX3UxNikoKGNoYXIgKikmc25tcC0+ZGF0YSAtIChjaGFyICopY21kKTsKKwllbHNlCisJCWRhdGFfbGVuIC09IChfX3UxNikoKGNoYXIgKikmc25tcC0+cmVxdWVzdCAtIChjaGFyICopY21kKTsKKworCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb29tIGluIHVzZXJzcGFjZSAqLworCWlmICgocWluZm8tPnVkYXRhX2xlbiAtIHFpbmZvLT51ZGF0YV9vZmZzZXQpIDwgZGF0YV9sZW4pIHsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJzY2VyMyVpIiwgLUVOT01FTSk7CisJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVOT01FTTsKKwkJcmV0dXJuIDA7CisJfQorCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAic25vcmUlaSIsCisJCSAgICAgICBjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci51c2VkX3RvdGFsKTsKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNzZXFuJWkiLAorCQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5zZXFfbm8pOworCS8qY29weSBlbnRyaWVzIHRvIHVzZXIgYnVmZmVyKi8KKwlpZiAoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vID09IDEpIHsKKwkJbWVtY3B5KHFpbmZvLT51ZGF0YSArIHFpbmZvLT51ZGF0YV9vZmZzZXQsCisJCSAgICAgICAoY2hhciAqKXNubXAsCisJCSAgICAgICBkYXRhX2xlbiArIG9mZnNldG9mKHN0cnVjdCBxZXRoX3NubXBfY21kLCBkYXRhKSk7CisJCXFpbmZvLT51ZGF0YV9vZmZzZXQgKz0gb2Zmc2V0b2Yoc3RydWN0IHFldGhfc25tcF9jbWQsIGRhdGEpOworCX0gZWxzZSB7CisJCW1lbWNweShxaW5mby0+dWRhdGEgKyBxaW5mby0+dWRhdGFfb2Zmc2V0LAorCQkgICAgICAgKGNoYXIgKikmc25tcC0+cmVxdWVzdCwgZGF0YV9sZW4pOworCX0KKwlxaW5mby0+dWRhdGFfb2Zmc2V0ICs9IGRhdGFfbGVuOworCS8qIGNoZWNrIGlmIGFsbCByZXBsaWVzIHJlY2VpdmVkIC4uLiAqLworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNydG90JWkiLAorCQkJICAgICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwpOworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInNyc2VxJWkiLAorCQkJICAgICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyk7CisJaWYgKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA8CisJICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgcWV0aF9zbm1wX2NvbW1hbmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgY2hhciBfX3VzZXIgKnVkYXRhKQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisJc3RydWN0IHFldGhfc25tcF91cmVxICp1cmVxOworCWludCByZXFfbGVuOworCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvIHFpbmZvID0gezAsIH07CisJaW50IHJjID0gMDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzbm1wY21kIik7CisKKwlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCghcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTCkpICYmCisJICAgICghY2FyZC0+b3B0aW9ucy5sYXllcjIpKSB7CisJCVBSSU5UX1dBUk4oIlNOTVAgUXVlcnkgTUlCUyBub3Qgc3VwcG9ydGVkICIKKwkJCSAgICJvbiAlcyFcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCS8qIHNraXAgNCBieXRlcyAoZGF0YV9sZW4gc3RydWN0IG1lbWJlcikgdG8gZ2V0IHJlcV9sZW4gKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcV9sZW4sIHVkYXRhICsgc2l6ZW9mKGludCksIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJdXJlcSA9IGttYWxsb2MocmVxX2xlbitzaXplb2Yoc3RydWN0IHFldGhfc25tcF91cmVxX2hkciksIEdGUF9LRVJORUwpOworCWlmICghdXJlcSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAic25tcG5vbWUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcih1cmVxLCB1ZGF0YSwKKwkJCXJlcV9sZW4gKyBzaXplb2Yoc3RydWN0IHFldGhfc25tcF91cmVxX2hkcikpKSB7CisJCWtmcmVlKHVyZXEpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcWluZm8udWRhdGFfbGVuID0gdXJlcS0+aGRyLmRhdGFfbGVuOworCXFpbmZvLnVkYXRhID0ga3phbGxvYyhxaW5mby51ZGF0YV9sZW4sIEdGUF9LRVJORUwpOworCWlmICghcWluZm8udWRhdGEpIHsKKwkJa2ZyZWUodXJlcSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlxaW5mby51ZGF0YV9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHFldGhfc25tcF91cmVxX2hkcik7CisKKwlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1NFVF9TTk1QX0NPTlRST0wsCisJCQkJICAgUUVUSF9TTk1QX1NFVEFEUF9DTURMRU5HVEggKyByZXFfbGVuKTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJbWVtY3B5KCZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuc25tcCwgJnVyZXEtPmNtZCwgcmVxX2xlbik7CisJcmMgPSBxZXRoX3NlbmRfaXBhX3NubXBfY21kKGNhcmQsIGlvYiwgUUVUSF9TRVRBRFBfQkFTRV9MRU4gKyByZXFfbGVuLAorCQkJCSAgICBxZXRoX3NubXBfY29tbWFuZF9jYiwgKHZvaWQgKikmcWluZm8pOworCWlmIChyYykKKwkJUFJJTlRfV0FSTigiU05NUCBjb21tYW5kIGZhaWxlZCBvbiAlczogKDB4JXgpXG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCWVsc2UgeworCQlpZiAoY29weV90b191c2VyKHVkYXRhLCBxaW5mby51ZGF0YSwgcWluZm8udWRhdGFfbGVuKSkKKwkJCXJjID0gLUVGQVVMVDsKKwl9CisKKwlrZnJlZSh1cmVxKTsKKwlrZnJlZShxaW5mby51ZGF0YSk7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9zbm1wX2NvbW1hbmQpOworCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2dldF9xZGlvX3FfZm9ybWF0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKKwkJcmV0dXJuIDI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHFldGhfcWRpb19lc3RhYmxpc2goc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgcWRpb19pbml0aWFsaXplIGluaXRfZGF0YTsKKwljaGFyICpxaWJfcGFyYW1fZmllbGQ7CisJc3RydWN0IHFkaW9fYnVmZmVyICoqaW5fc2JhbF9wdHJzOworCXN0cnVjdCBxZGlvX2J1ZmZlciAqKm91dF9zYmFsX3B0cnM7CisJaW50IGksIGosIGs7CisJaW50IHJjID0gMDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJxZGlvZXN0Iik7CisKKwlxaWJfcGFyYW1fZmllbGQgPSBremFsbG9jKFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgKiBzaXplb2YoY2hhciksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXFpYl9wYXJhbV9maWVsZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlxZXRoX2NyZWF0ZV9xaWJfcGFyYW1fZmllbGQoY2FyZCwgcWliX3BhcmFtX2ZpZWxkKTsKKwlxZXRoX2NyZWF0ZV9xaWJfcGFyYW1fZmllbGRfYmxrdChjYXJkLCBxaWJfcGFyYW1fZmllbGQpOworCisJaW5fc2JhbF9wdHJzID0ga21hbGxvYyhRRElPX01BWF9CVUZGRVJTX1BFUl9RICogc2l6ZW9mKHZvaWQgKiksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbl9zYmFsX3B0cnMpIHsKKwkJa2ZyZWUocWliX3BhcmFtX2ZpZWxkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZvciAoaSA9IDA7IGkgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyArK2kpCisJCWluX3NiYWxfcHRyc1tpXSA9IChzdHJ1Y3QgcWRpb19idWZmZXIgKikKKwkJCXZpcnRfdG9fcGh5cyhjYXJkLT5xZGlvLmluX3EtPmJ1ZnNbaV0uYnVmZmVyKTsKKworCW91dF9zYmFsX3B0cnMgPQorCQlrbWFsbG9jKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyAqIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgKgorCQkJc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOworCWlmICghb3V0X3NiYWxfcHRycykgeworCQlrZnJlZShpbl9zYmFsX3B0cnMpOworCQlrZnJlZShxaWJfcGFyYW1fZmllbGQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZm9yIChpID0gMCwgayA9IDA7IGkgPCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXM7ICsraSkKKwkJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7ICsraiwgKytrKSB7CisJCQlvdXRfc2JhbF9wdHJzW2tdID0gKHN0cnVjdCBxZGlvX2J1ZmZlciAqKXZpcnRfdG9fcGh5cygKKwkJCQljYXJkLT5xZGlvLm91dF9xc1tpXS0+YnVmc1tqXS5idWZmZXIpOworCQl9CisKKwltZW1zZXQoJmluaXRfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBxZGlvX2luaXRpYWxpemUpKTsKKwlpbml0X2RhdGEuY2RldiAgICAgICAgICAgICAgICAgICA9IENBUkRfRERFVihjYXJkKTsKKwlpbml0X2RhdGEucV9mb3JtYXQgICAgICAgICAgICAgICA9IHFldGhfZ2V0X3FkaW9fcV9mb3JtYXQoY2FyZCk7CisJaW5pdF9kYXRhLnFpYl9wYXJhbV9maWVsZF9mb3JtYXQgPSAwOworCWluaXRfZGF0YS5xaWJfcGFyYW1fZmllbGQgICAgICAgID0gcWliX3BhcmFtX2ZpZWxkOworCWluaXRfZGF0YS5taW5faW5wdXRfdGhyZXNob2xkICAgID0gUUVUSF9NSU5fSU5QVVRfVEhSRVNIT0xEOworCWluaXRfZGF0YS5tYXhfaW5wdXRfdGhyZXNob2xkICAgID0gUUVUSF9NQVhfSU5QVVRfVEhSRVNIT0xEOworCWluaXRfZGF0YS5taW5fb3V0cHV0X3RocmVzaG9sZCAgID0gUUVUSF9NSU5fT1VUUFVUX1RIUkVTSE9MRDsKKwlpbml0X2RhdGEubWF4X291dHB1dF90aHJlc2hvbGQgICA9IFFFVEhfTUFYX09VVFBVVF9USFJFU0hPTEQ7CisJaW5pdF9kYXRhLm5vX2lucHV0X3FzICAgICAgICAgICAgPSAxOworCWluaXRfZGF0YS5ub19vdXRwdXRfcXMgICAgICAgICAgID0gY2FyZC0+cWRpby5ub19vdXRfcXVldWVzOworCWluaXRfZGF0YS5pbnB1dF9oYW5kbGVyICAgICAgICAgID0gY2FyZC0+ZGlzY2lwbGluZS5pbnB1dF9oYW5kbGVyOworCWluaXRfZGF0YS5vdXRwdXRfaGFuZGxlciAgICAgICAgID0gY2FyZC0+ZGlzY2lwbGluZS5vdXRwdXRfaGFuZGxlcjsKKwlpbml0X2RhdGEuaW50X3Bhcm0gICAgICAgICAgICAgICA9ICh1bnNpZ25lZCBsb25nKSBjYXJkOworCWluaXRfZGF0YS5mbGFncyAgICAgICAgICAgICAgICAgID0gUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIHwKKwkJCQkJICAgUURJT19PVVRCT1VORF8wQ09QWV9TQkFMUyB8CisJCQkJCSAgIFFESU9fVVNFX09VVEJPVU5EX1BDSVM7CisJaW5pdF9kYXRhLmlucHV0X3NiYWxfYWRkcl9hcnJheSAgPSAodm9pZCAqKikgaW5fc2JhbF9wdHJzOworCWluaXRfZGF0YS5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIG91dF9zYmFsX3B0cnM7CisKKwlpZiAoYXRvbWljX2NtcHhjaGcoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19BTExPQ0FURUQsCisJCVFFVEhfUURJT19FU1RBQkxJU0hFRCkgPT0gUUVUSF9RRElPX0FMTE9DQVRFRCkgeworCQlyYyA9IHFkaW9faW5pdGlhbGl6ZSgmaW5pdF9kYXRhKTsKKwkJaWYgKHJjKQorCQkJYXRvbWljX3NldCgmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX0FMTE9DQVRFRCk7CisJfQorCWtmcmVlKG91dF9zYmFsX3B0cnMpOworCWtmcmVlKGluX3NiYWxfcHRycyk7CisJa2ZyZWUocWliX3BhcmFtX2ZpZWxkKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfY29yZV9mcmVlX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJmcmVlY3JkIik7CisJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOworCXFldGhfY2xlYW5fY2hhbm5lbCgmY2FyZC0+cmVhZCk7CisJcWV0aF9jbGVhbl9jaGFubmVsKCZjYXJkLT53cml0ZSk7CisJaWYgKGNhcmQtPmRldikKKwkJZnJlZV9uZXRkZXYoY2FyZC0+ZGV2KTsKKwlrZnJlZShjYXJkLT5pcF90YmRfbGlzdCk7CisJcWV0aF9mcmVlX3FkaW9fYnVmZmVycyhjYXJkKTsKKwlrZnJlZShjYXJkKTsKK30KKworc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlX2lkIHFldGhfaWRzW10gPSB7CisJe0NDV19ERVZJQ0UoMHgxNzMxLCAweDAxKSwgLmRyaXZlcl9pbmZvID0gUUVUSF9DQVJEX1RZUEVfT1NBRX0sCisJe0NDV19ERVZJQ0UoMHgxNzMxLCAweDA1KSwgLmRyaXZlcl9pbmZvID0gUUVUSF9DQVJEX1RZUEVfSVFEfSwKKwl7Q0NXX0RFVklDRSgweDE3MzEsIDB4MDYpLCAuZHJpdmVyX2luZm8gPSBRRVRIX0NBUkRfVFlQRV9PU059LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoY2N3LCBxZXRoX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgY2N3X2RyaXZlciBxZXRoX2Njd19kcml2ZXIgPSB7CisJLm5hbWUgPSAicWV0aCIsCisJLmlkcyA9IHFldGhfaWRzLAorCS5wcm9iZSA9IGNjd2dyb3VwX3Byb2JlX2Njd2RldiwKKwkucmVtb3ZlID0gY2N3Z3JvdXBfcmVtb3ZlX2Njd2RldiwKK307CisKK3N0YXRpYyBpbnQgcWV0aF9jb3JlX2RyaXZlcl9ncm91cChjb25zdCBjaGFyICpidWYsIHN0cnVjdCBkZXZpY2UgKnJvb3RfZGV2LAorCQkJCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2lkKQoreworCWNvbnN0IGNoYXIgKnN0YXJ0LCAqZW5kOworCWNoYXIgYnVzX2lkc1szXVtCVVNfSURfU0laRV0sICphcmd2WzNdOworCWludCBpOworCisJc3RhcnQgPSBidWY7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlzdGF0aWMgY29uc3QgY2hhciBkZWxpbVtdID0geyAnLCcsICcsJywgJ1xuJyB9OworCQlpbnQgbGVuOworCisJCWVuZCA9IHN0cmNocihzdGFydCwgZGVsaW1baV0pOworCQlpZiAoIWVuZCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlsZW4gPSBtaW5fdChwdHJkaWZmX3QsIEJVU19JRF9TSVpFLCBlbmQgLSBzdGFydCk7CisJCXN0cm5jcHkoYnVzX2lkc1tpXSwgc3RhcnQsIGxlbik7CisJCWJ1c19pZHNbaV1bbGVuXSA9ICdcMCc7CisJCXN0YXJ0ID0gZW5kICsgMTsKKwkJYXJndltpXSA9IGJ1c19pZHNbaV07CisJfQorCisJcmV0dXJuIChjY3dncm91cF9jcmVhdGUocm9vdF9kZXYsIGRyaXZlcl9pZCwKKwkJCQkmcWV0aF9jY3dfZHJpdmVyLCAzLCBhcmd2KSk7Cit9CisKK2ludCBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmV0cmllcyA9IDM7CisJaW50IG1wbm87CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImhyZHNldHVwIik7CisJYXRvbWljX3NldCgmY2FyZC0+Zm9yY2VfYWxsb2Nfc2tiLCAwKTsKK3JldHJ5OgorCWlmIChyZXRyaWVzIDwgMykgeworCQlQUklOVF9XQVJOKCJSZXRyeWluZyB0byBkbyBJRFggYWN0aXZhdGVzLlxuIik7CisJCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKKwkJY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1dERVYoY2FyZCkpOworCQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfUkRFVihjYXJkKSk7CisJCWNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX1JERVYoY2FyZCkpOworCQljY3dfZGV2aWNlX3NldF9vbmxpbmUoQ0FSRF9XREVWKGNhcmQpKTsKKwkJY2N3X2RldmljZV9zZXRfb25saW5lKENBUkRfRERFVihjYXJkKSk7CisJfQorCXJjID0gcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCk7CisJaWYgKHJjID09IC1FUkVTVEFSVFNZUykgeworCQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiYnJlYWsxIik7CisJCXJldHVybiByYzsKKwl9IGVsc2UgaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciVkIiwgcmMpOworCQlpZiAoLS1yZXRyaWVzIDwgMCkKKwkJCWdvdG8gb3V0OworCQllbHNlCisJCQlnb3RvIHJldHJ5OworCX0KKworCXJjID0gcWV0aF9nZXRfdW5pdGFkZHIoY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJbXBubyA9IFFFVEhfTUFYX1BPUlROTzsKKwlpZiAoY2FyZC0+aW5mby5wb3J0bm8gPiBtcG5vKSB7CisJCVBSSU5UX0VSUigiRGV2aWNlICVzIGRvZXMgbm90IG9mZmVyIHBvcnQgbnVtYmVyICVkIFxuLiIsCisJCQlDQVJEX0JVU19JRChjYXJkKSwgY2FyZC0+aW5mby5wb3J0bm8pOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlxZXRoX2luaXRfdG9rZW5zKGNhcmQpOworCXFldGhfaW5pdF9mdW5jX2xldmVsKGNhcmQpOworCXJjID0gcWV0aF9pZHhfYWN0aXZhdGVfY2hhbm5lbCgmY2FyZC0+cmVhZCwgcWV0aF9pZHhfcmVhZF9jYik7CisJaWYgKHJjID09IC1FUkVTVEFSVFNZUykgeworCQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiYnJlYWsyIik7CisJCXJldHVybiByYzsKKwl9IGVsc2UgaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiM2VyciVkIiwgcmMpOworCQlpZiAoLS1yZXRyaWVzIDwgMCkKKwkJCWdvdG8gb3V0OworCQllbHNlCisJCQlnb3RvIHJldHJ5OworCX0KKwlyYyA9IHFldGhfaWR4X2FjdGl2YXRlX2NoYW5uZWwoJmNhcmQtPndyaXRlLCBxZXRoX2lkeF93cml0ZV9jYik7CisJaWYgKHJjID09IC1FUkVTVEFSVFNZUykgeworCQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiYnJlYWszIik7CisJCXJldHVybiByYzsKKwl9IGVsc2UgaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNGVyciVkIiwgcmMpOworCQlpZiAoLS1yZXRyaWVzIDwgMCkKKwkJCWdvdG8gb3V0OworCQllbHNlCisJCQlnb3RvIHJldHJ5OworCX0KKwlyYyA9IHFldGhfbXBjX2luaXRpYWxpemUoY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCQlnb3RvIG91dDsKKwl9CisJcmV0dXJuIDA7CitvdXQ6CisJUFJJTlRfRVJSKCJJbml0aWFsaXphdGlvbiBpbiBoYXJkc2V0dXAgZmFpbGVkISByYz0lZFxuIiwgcmMpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHFldGhfY3JlYXRlX3NrYl9mcmFnKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICplbGVtZW50LAorCQlzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGludCBvZmZzZXQsIGludCAqcGZyYWcsIGludCBkYXRhX2xlbikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShlbGVtZW50LT5hZGRyKTsKKwlpZiAoKnBza2IgPT0gTlVMTCkgeworCQkvKiB0aGUgdXBwZXIgcHJvdG9jb2wgbGF5ZXJzIGFzc3VtZSB0aGF0IHRoZXJlIGlzIGRhdGEgaW4gdGhlCisJCSAqIHNrYiBpdHNlbGYuIENvcHkgYSBzbWFsbCBhbW91bnQgKDY0IGJ5dGVzKSB0byBtYWtlIHRoZW0KKwkJICogaGFwcHkuICovCisJCSpwc2tiID0gZGV2X2FsbG9jX3NrYig2NCArIEVUSF9ITEVOKTsKKwkJaWYgKCEoKnBza2IpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNrYl9yZXNlcnZlKCpwc2tiLCBFVEhfSExFTik7CisJCWlmIChkYXRhX2xlbiA8PSA2NCkgeworCQkJbWVtY3B5KHNrYl9wdXQoKnBza2IsIGRhdGFfbGVuKSwgZWxlbWVudC0+YWRkciArIG9mZnNldCwKKwkJCQlkYXRhX2xlbik7CisJCX0gZWxzZSB7CisJCQlnZXRfcGFnZShwYWdlKTsKKwkJCW1lbWNweShza2JfcHV0KCpwc2tiLCA2NCksIGVsZW1lbnQtPmFkZHIgKyBvZmZzZXQsIDY0KTsKKwkJCXNrYl9maWxsX3BhZ2VfZGVzYygqcHNrYiwgKnBmcmFnLCBwYWdlLCBvZmZzZXQgKyA2NCwKKwkJCQlkYXRhX2xlbiAtIDY0KTsKKwkJCSgqcHNrYiktPmRhdGFfbGVuICs9IGRhdGFfbGVuIC0gNjQ7CisJCQkoKnBza2IpLT5sZW4gICAgICArPSBkYXRhX2xlbiAtIDY0OworCQkJKCpwc2tiKS0+dHJ1ZXNpemUgKz0gZGF0YV9sZW4gLSA2NDsKKwkJCSgqcGZyYWcpKys7CisJCX0KKwl9IGVsc2UgeworCQlnZXRfcGFnZShwYWdlKTsKKwkJc2tiX2ZpbGxfcGFnZV9kZXNjKCpwc2tiLCAqcGZyYWcsIHBhZ2UsIG9mZnNldCwgZGF0YV9sZW4pOworCQkoKnBza2IpLT5kYXRhX2xlbiArPSBkYXRhX2xlbjsKKwkJKCpwc2tiKS0+bGVuICAgICAgKz0gZGF0YV9sZW47CisJCSgqcHNrYiktPnRydWVzaXplICs9IGRhdGFfbGVuOworCQkoKnBmcmFnKSsrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNrX2J1ZmYgKnFldGhfY29yZV9nZXRfbmV4dF9za2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXIsCisJCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoqX19lbGVtZW50LCBpbnQgKl9fb2Zmc2V0LAorCQlzdHJ1Y3QgcWV0aF9oZHIgKipoZHIpCit7CisJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKmVsZW1lbnQgPSAqX19lbGVtZW50OworCWludCBvZmZzZXQgPSAqX19vZmZzZXQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJaW50IHNrYl9sZW47CisJdm9pZCAqZGF0YV9wdHI7CisJaW50IGRhdGFfbGVuOworCWludCBoZWFkcm9vbSA9IDA7CisJaW50IHVzZV9yeF9zZyA9IDA7CisJaW50IGZyYWcgPSAwOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgIm5leHRza2IiKTsKKwkvKiBxZXRoX2hkciBtdXN0IG5vdCBjcm9zcyBlbGVtZW50IGJvdW5kYXJpZXMgKi8KKwlpZiAoZWxlbWVudC0+bGVuZ3RoIDwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpIHsKKwkJaWYgKHFldGhfaXNfbGFzdF9zYmFsZShlbGVtZW50KSkKKwkJCXJldHVybiBOVUxMOworCQllbGVtZW50Kys7CisJCW9mZnNldCA9IDA7CisJCWlmIChlbGVtZW50LT5sZW5ndGggPCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSkKKwkJCXJldHVybiBOVUxMOworCX0KKwkqaGRyID0gZWxlbWVudC0+YWRkciArIG9mZnNldDsKKworCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKKwkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKKwkJCXNrYl9sZW4gPSAoKmhkciktPmhkci5vc24ucGR1X2xlbmd0aDsKKwkJCWhlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7CisJCX0gZWxzZSB7CisJCQlza2JfbGVuID0gKCpoZHIpLT5oZHIubDIucGt0X2xlbmd0aDsKKwkJfQorCX0gZWxzZSB7CisJCXNrYl9sZW4gPSAoKmhkciktPmhkci5sMy5sZW5ndGg7CisJCWlmICgoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfTEFORV9UUikgfHwKKwkJICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9IU1RSKSkKKwkJCWhlYWRyb29tID0gVFJfSExFTjsKKwkJZWxzZQorCQkJaGVhZHJvb20gPSBFVEhfSExFTjsKKwl9CisKKwlpZiAoIXNrYl9sZW4pCisJCXJldHVybiBOVUxMOworCisJaWYgKChza2JfbGVuID49IGNhcmQtPm9wdGlvbnMucnhfc2dfY2IpICYmCisJICAgICghKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pKSAmJgorCSAgICAoIWF0b21pY19yZWFkKCZjYXJkLT5mb3JjZV9hbGxvY19za2IpKSkgeworCQl1c2Vfcnhfc2cgPSAxOworCX0gZWxzZSB7CisJCXNrYiA9IGRldl9hbGxvY19za2Ioc2tiX2xlbiArIGhlYWRyb29tKTsKKwkJaWYgKCFza2IpCisJCQlnb3RvIG5vX21lbTsKKwkJaWYgKGhlYWRyb29tKQorCQkJc2tiX3Jlc2VydmUoc2tiLCBoZWFkcm9vbSk7CisJfQorCisJZGF0YV9wdHIgPSBlbGVtZW50LT5hZGRyICsgb2Zmc2V0OworCXdoaWxlIChza2JfbGVuKSB7CisJCWRhdGFfbGVuID0gbWluKHNrYl9sZW4sIChpbnQpKGVsZW1lbnQtPmxlbmd0aCAtIG9mZnNldCkpOworCQlpZiAoZGF0YV9sZW4pIHsKKwkJCWlmICh1c2Vfcnhfc2cpIHsKKwkJCQlpZiAocWV0aF9jcmVhdGVfc2tiX2ZyYWcoZWxlbWVudCwgJnNrYiwgb2Zmc2V0LAorCQkJCSAgICAmZnJhZywgZGF0YV9sZW4pKQorCQkJCQlnb3RvIG5vX21lbTsKKwkJCX0gZWxzZSB7CisJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBkYXRhX2xlbiksIGRhdGFfcHRyLAorCQkJCQlkYXRhX2xlbik7CisJCQl9CisJCX0KKwkJc2tiX2xlbiAtPSBkYXRhX2xlbjsKKwkJaWYgKHNrYl9sZW4pIHsKKwkJCWlmIChxZXRoX2lzX2xhc3Rfc2JhbGUoZWxlbWVudCkpIHsKKwkJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAidW5leGVvYiIpOworCQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAiJXMiLAorCQkJCQlDQVJEX0JVU19JRChjYXJkKSk7CisJCQkJUUVUSF9EQkZfVEVYVChRRVJSLCAyLCAidW5leGVvYiIpOworCQkJCVFFVEhfREJGX1RFWFRfKFFFUlIsIDIsICIlcyIsCisJCQkJCUNBUkRfQlVTX0lEKGNhcmQpKTsKKwkJCQlRRVRIX0RCRl9IRVgoTUlTQywgNCwgYnVmZmVyLCBzaXplb2YoKmJ1ZmZlcikpOworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJY2FyZC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQllbGVtZW50Kys7CisJCQlvZmZzZXQgPSAwOworCQkJZGF0YV9wdHIgPSBlbGVtZW50LT5hZGRyOworCQl9IGVsc2UgeworCQkJb2Zmc2V0ICs9IGRhdGFfbGVuOworCQl9CisJfQorCSpfX2VsZW1lbnQgPSBlbGVtZW50OworCSpfX29mZnNldCA9IG9mZnNldDsKKwlpZiAodXNlX3J4X3NnICYmIGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3J4Kys7CisJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3NfcnggKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl9CisJcmV0dXJuIHNrYjsKK25vX21lbToKKwlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCVBSSU5UX1dBUk4oIk5vIG1lbW9yeSBmb3IgcGFja2V0IHJlY2VpdmVkIG9uICVzLlxuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAibm9za2JtZW0iKTsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwl9CisJY2FyZC0+c3RhdHMucnhfZHJvcHBlZCsrOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jb3JlX2dldF9uZXh0X3NrYik7CisKK3N0YXRpYyB2b2lkIHFldGhfdW5yZWdpc3Rlcl9kYmZfdmlld3Modm9pZCkKK3sKKwlpbnQgeDsKKwlmb3IgKHggPSAwOyB4IDwgUUVUSF9EQkZfSU5GT1M7IHgrKykgeworCQlkZWJ1Z191bnJlZ2lzdGVyKHFldGhfZGJmW3hdLmlkKTsKKwkJcWV0aF9kYmZbeF0uaWQgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBxZXRoX3JlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKQoreworCWludCByZXQ7CisJaW50IHg7CisKKwlmb3IgKHggPSAwOyB4IDwgUUVUSF9EQkZfSU5GT1M7IHgrKykgeworCQkvKiByZWdpc3RlciB0aGUgYXJlYXMgKi8KKwkJcWV0aF9kYmZbeF0uaWQgPSBkZWJ1Z19yZWdpc3RlcihxZXRoX2RiZlt4XS5uYW1lLAorCQkJCQkJcWV0aF9kYmZbeF0ucGFnZXMsCisJCQkJCQlxZXRoX2RiZlt4XS5hcmVhcywKKwkJCQkJCXFldGhfZGJmW3hdLmxlbik7CisJCWlmIChxZXRoX2RiZlt4XS5pZCA9PSBOVUxMKSB7CisJCQlxZXRoX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCS8qIHJlZ2lzdGVyIGEgdmlldyAqLworCQlyZXQgPSBkZWJ1Z19yZWdpc3Rlcl92aWV3KHFldGhfZGJmW3hdLmlkLCBxZXRoX2RiZlt4XS52aWV3KTsKKwkJaWYgKHJldCkgeworCQkJcWV0aF91bnJlZ2lzdGVyX2RiZl92aWV3cygpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCS8qIHNldCBhIHBhc3NpbmcgbGV2ZWwgKi8KKwkJZGVidWdfc2V0X2xldmVsKHFldGhfZGJmW3hdLmlkLCBxZXRoX2RiZlt4XS5sZXZlbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBxZXRoX2NvcmVfbG9hZF9kaXNjaXBsaW5lKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWVudW0gcWV0aF9kaXNjaXBsaW5lX2lkIGRpc2NpcGxpbmUpCit7CisJaW50IHJjID0gMDsKKwlzd2l0Y2ggKGRpc2NpcGxpbmUpIHsKKwljYXNlIFFFVEhfRElTQ0lQTElORV9MQVlFUjM6CisJCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQkJc3ltYm9sX2dldChxZXRoX2wzX2Njd2dyb3VwX2RyaXZlciksCisJCQkicWV0aF9sMyIpOworCQlicmVhazsKKwljYXNlIFFFVEhfRElTQ0lQTElORV9MQVlFUjI6CisJCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQkJc3ltYm9sX2dldChxZXRoX2wyX2Njd2dyb3VwX2RyaXZlciksCisJCQkicWV0aF9sMiIpOworCQlicmVhazsKKwl9CisJaWYgKCFjYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXIpIHsKKwkJUFJJTlRfRVJSKCJTdXBwb3J0IGZvciBkaXNjaXBsaW5lICVkIG5vdCBwcmVzZW50XG4iLAorCQkJCWRpc2NpcGxpbmUpOworCQlyYyA9IC1FSU5WQUw7CisJfQorCXJldHVybiByYzsKK30KKwordm9pZCBxZXRoX2NvcmVfZnJlZV9kaXNjaXBsaW5lKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKQorCQlzeW1ib2xfcHV0KHFldGhfbDJfY2N3Z3JvdXBfZHJpdmVyKTsKKwllbHNlCisJCXN5bWJvbF9wdXQocWV0aF9sM19jY3dncm91cF9kcml2ZXIpOworCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9jb3JlX3Byb2JlX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInByb2JlZGV2Iik7CisKKwlkZXYgPSAmZ2Rldi0+ZGV2OworCWlmICghZ2V0X2RldmljZShkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiJXMiLCBnZGV2LT5kZXYuYnVzX2lkKTsKKworCWNhcmQgPSBxZXRoX2FsbG9jX2NhcmQoKTsKKwlpZiAoIWNhcmQpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIxZXJyJWQiLCAtRU5PTUVNKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9kZXY7CisJfQorCWNhcmQtPnJlYWQuY2N3ZGV2ICA9IGdkZXYtPmNkZXZbMF07CisJY2FyZC0+d3JpdGUuY2N3ZGV2ID0gZ2Rldi0+Y2RldlsxXTsKKwljYXJkLT5kYXRhLmNjd2RldiAgPSBnZGV2LT5jZGV2WzJdOworCWRldl9zZXRfZHJ2ZGF0YSgmZ2Rldi0+ZGV2LCBjYXJkKTsKKwljYXJkLT5nZGV2ID0gZ2RldjsKKwlnZGV2LT5jZGV2WzBdLT5oYW5kbGVyID0gcWV0aF9pcnE7CisJZ2Rldi0+Y2RldlsxXS0+aGFuZGxlciA9IHFldGhfaXJxOworCWdkZXYtPmNkZXZbMl0tPmhhbmRsZXIgPSBxZXRoX2lycTsKKworCXJjID0gcWV0aF9kZXRlcm1pbmVfY2FyZF90eXBlKGNhcmQpOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCIlczogbm90IGEgdmFsaWQgY2FyZCB0eXBlXG4iLCBfX2Z1bmNfXyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiM2VyciVkIiwgcmMpOworCQlnb3RvIGVycl9jYXJkOworCX0KKwlyYyA9IHFldGhfc2V0dXBfY2FyZChjYXJkKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCWdvdG8gZXJyX2NhcmQ7CisJfQorCisJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKKwkJcmMgPSBxZXRoX2NvcmVfY3JlYXRlX29zbl9hdHRyaWJ1dGVzKGRldik7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX2NhcmQ7CisJCXJjID0gcWV0aF9jb3JlX2xvYWRfZGlzY2lwbGluZShjYXJkLCBRRVRIX0RJU0NJUExJTkVfTEFZRVIyKTsKKwkJaWYgKHJjKSB7CisJCQlxZXRoX2NvcmVfcmVtb3ZlX29zbl9hdHRyaWJ1dGVzKGRldik7CisJCQlnb3RvIGVycl9jYXJkOworCQl9CisJCXJjID0gY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyLT5wcm9iZShjYXJkLT5nZGV2KTsKKwkJaWYgKHJjKSB7CisJCQlxZXRoX2NvcmVfZnJlZV9kaXNjaXBsaW5lKGNhcmQpOworCQkJcWV0aF9jb3JlX3JlbW92ZV9vc25fYXR0cmlidXRlcyhkZXYpOworCQkJZ290byBlcnJfY2FyZDsKKwkJfQorCX0gZWxzZSB7CisJCXJjID0gcWV0aF9jb3JlX2NyZWF0ZV9kZXZpY2VfYXR0cmlidXRlcyhkZXYpOworCQlpZiAocmMpCisJCQlnb3RvIGVycl9jYXJkOworCX0KKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcWV0aF9jb3JlX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjYXJkLT5saXN0LCAmcWV0aF9jb3JlX2NhcmRfbGlzdC5saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jb3JlX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKKworZXJyX2NhcmQ6CisJcWV0aF9jb3JlX2ZyZWVfY2FyZChjYXJkKTsKK2Vycl9kZXY6CisJcHV0X2RldmljZShkZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcWV0aF9jb3JlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisKKwlpZiAoY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyKSB7CisJCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlci0+cmVtb3ZlKGdkZXYpOworCQlxZXRoX2NvcmVfZnJlZV9kaXNjaXBsaW5lKGNhcmQpOworCX0KKworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKSB7CisJCXFldGhfY29yZV9yZW1vdmVfb3NuX2F0dHJpYnV0ZXMoJmdkZXYtPmRldik7CisJfSBlbHNlIHsKKwkJcWV0aF9jb3JlX3JlbW92ZV9kZXZpY2VfYXR0cmlidXRlcygmZ2Rldi0+ZGV2KTsKKwl9CisJd3JpdGVfbG9ja19pcnFzYXZlKCZxZXRoX2NvcmVfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjYXJkLT5saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jb3JlX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKKwlxZXRoX2NvcmVfZnJlZV9jYXJkKGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YSgmZ2Rldi0+ZGV2LCBOVUxMKTsKKwlwdXRfZGV2aWNlKCZnZGV2LT5kZXYpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBxZXRoX2NvcmVfc2V0X29ubGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisJaW50IHJjID0gMDsKKwlpbnQgZGVmX2Rpc2NpcGxpbmU7CisKKwlpZiAoIWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlcikgeworCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKKwkJCWRlZl9kaXNjaXBsaW5lID0gUUVUSF9ESVNDSVBMSU5FX0xBWUVSMzsKKwkJZWxzZQorCQkJZGVmX2Rpc2NpcGxpbmUgPSBRRVRIX0RJU0NJUExJTkVfTEFZRVIyOworCQlyYyA9IHFldGhfY29yZV9sb2FkX2Rpc2NpcGxpbmUoY2FyZCwgZGVmX2Rpc2NpcGxpbmUpOworCQlpZiAocmMpCisJCQlnb3RvIGVycjsKKwkJcmMgPSBjYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXItPnByb2JlKGNhcmQtPmdkZXYpOworCQlpZiAocmMpCisJCQlnb3RvIGVycjsKKwl9CisJcmMgPSBjYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXItPnNldF9vbmxpbmUoZ2Rldik7CitlcnI6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfY29yZV9zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisJcmV0dXJuIGNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlci0+c2V0X29mZmxpbmUoZ2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfY29yZV9zaHV0ZG93bihzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisJaWYgKGNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciAmJgorCSAgICBjYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXItPnNodXRkb3duKQorCQljYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXItPnNodXRkb3duKGdkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGNjd2dyb3VwX2RyaXZlciBxZXRoX2NvcmVfY2N3Z3JvdXBfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInFldGgiLAorCS5kcml2ZXJfaWQgPSAweEQ4QzVFM0M4LAorCS5wcm9iZSA9IHFldGhfY29yZV9wcm9iZV9kZXZpY2UsCisJLnJlbW92ZSA9IHFldGhfY29yZV9yZW1vdmVfZGV2aWNlLAorCS5zZXRfb25saW5lID0gcWV0aF9jb3JlX3NldF9vbmxpbmUsCisJLnNldF9vZmZsaW5lID0gcWV0aF9jb3JlX3NldF9vZmZsaW5lLAorCS5zaHV0ZG93biA9IHFldGhfY29yZV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBzc2l6ZV90CitxZXRoX2NvcmVfZHJpdmVyX2dyb3VwX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHJ2LCBjb25zdCBjaGFyICpidWYsCisJCQkgICBzaXplX3QgY291bnQpCit7CisJaW50IGVycjsKKwllcnIgPSBxZXRoX2NvcmVfZHJpdmVyX2dyb3VwKGJ1ZiwgcWV0aF9jb3JlX3Jvb3RfZGV2LAorCQkJCQlxZXRoX2NvcmVfY2N3Z3JvdXBfZHJpdmVyLmRyaXZlcl9pZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKGdyb3VwLCAwMjAwLCBOVUxMLCBxZXRoX2NvcmVfZHJpdmVyX2dyb3VwX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciBzdHJbRVRIX0dTVFJJTkdfTEVOXTsKK30gcWV0aF9ldGh0b29sX3N0YXRzX2tleXNbXSA9IHsKKy8qICAwICoveyJyeCBza2JzIn0sCisJeyJyeCBidWZmZXJzIn0sCisJeyJ0eCBza2JzIn0sCisJeyJ0eCBidWZmZXJzIn0sCisJeyJ0eCBza2JzIG5vIHBhY2tpbmcifSwKKwl7InR4IGJ1ZmZlcnMgbm8gcGFja2luZyJ9LAorCXsidHggc2ticyBwYWNraW5nIn0sCisJeyJ0eCBidWZmZXJzIHBhY2tpbmcifSwKKwl7InR4IHNnIHNrYnMifSwKKwl7InR4IHNnIGZyYWdzIn0sCisvKiAxMCAqL3sicnggc2cgc2ticyJ9LAorCXsicnggc2cgZnJhZ3MifSwKKwl7InJ4IHNnIHBhZ2UgYWxsb2NzIn0sCisJeyJ0eCBsYXJnZSBrYnl0ZXMifSwKKwl7InR4IGxhcmdlIGNvdW50In0sCisJeyJ0eCBwayBzdGF0ZSBjaCBuLT5wIn0sCisJeyJ0eCBwayBzdGF0ZSBjaCBwLT5uIn0sCisJeyJ0eCBwayB3YXRlcm1hcmsgbG93In0sCisJeyJ0eCBwayB3YXRlcm1hcmsgaGlnaCJ9LAorCXsicXVldWUgMCBidWZmZXIgdXNhZ2UifSwKKy8qIDIwICoveyJxdWV1ZSAxIGJ1ZmZlciB1c2FnZSJ9LAorCXsicXVldWUgMiBidWZmZXIgdXNhZ2UifSwKKwl7InF1ZXVlIDMgYnVmZmVyIHVzYWdlIn0sCisJeyJyeCBoYW5kbGVyIHRpbWUifSwKKwl7InJ4IGhhbmRsZXIgY291bnQifSwKKwl7InJ4IGRvX1FESU8gdGltZSJ9LAorCXsicnggZG9fUURJTyBjb3VudCJ9LAorCXsidHggaGFuZGxlciB0aW1lIn0sCisJeyJ0eCBoYW5kbGVyIGNvdW50In0sCisJeyJ0eCB0aW1lIn0sCisvKiAzMCAqL3sidHggY291bnQifSwKKwl7InR4IGRvX1FESU8gdGltZSJ9LAorCXsidHggZG9fUURJTyBjb3VudCJ9LAorfTsKKworaW50IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHNpemVvZihxZXRoX2V0aHRvb2xfc3RhdHNfa2V5cykgLyBFVEhfR1NUUklOR19MRU4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jb3JlX2dldF9zdGF0c19jb3VudCk7CisKK3ZvaWQgcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCWRhdGFbMF0gPSBjYXJkLT5zdGF0cy5yeF9wYWNrZXRzIC0KKwkJCQljYXJkLT5wZXJmX3N0YXRzLmluaXRpYWxfcnhfcGFja2V0czsKKwlkYXRhWzFdID0gY2FyZC0+cGVyZl9zdGF0cy5idWZzX3JlYzsKKwlkYXRhWzJdID0gY2FyZC0+c3RhdHMudHhfcGFja2V0cyAtCisJCQkJY2FyZC0+cGVyZl9zdGF0cy5pbml0aWFsX3R4X3BhY2tldHM7CisJZGF0YVszXSA9IGNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50OworCWRhdGFbNF0gPSBjYXJkLT5zdGF0cy50eF9wYWNrZXRzIC0gY2FyZC0+cGVyZl9zdGF0cy5pbml0aWFsX3R4X3BhY2tldHMKKwkJCS0gY2FyZC0+cGVyZl9zdGF0cy5za2JzX3NlbnRfcGFjazsKKwlkYXRhWzVdID0gY2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnQgLSBjYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudF9wYWNrOworCWRhdGFbNl0gPSBjYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrOworCWRhdGFbN10gPSBjYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudF9wYWNrOworCWRhdGFbOF0gPSBjYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudDsKKwlkYXRhWzldID0gY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50OworCWRhdGFbMTBdID0gY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3J4OworCWRhdGFbMTFdID0gY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19yeDsKKwlkYXRhWzEyXSA9IGNhcmQtPnBlcmZfc3RhdHMuc2dfYWxsb2NfcGFnZV9yeDsKKwlkYXRhWzEzXSA9IChjYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgPj4gMTApOworCWRhdGFbMTRdID0gY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudDsKKwlkYXRhWzE1XSA9IGNhcmQtPnBlcmZfc3RhdHMuc2NfZHBfcDsKKwlkYXRhWzE2XSA9IGNhcmQtPnBlcmZfc3RhdHMuc2NfcF9kcDsKKwlkYXRhWzE3XSA9IFFFVEhfTE9XX1dBVEVSTUFSS19QQUNLOworCWRhdGFbMThdID0gUUVUSF9ISUdIX1dBVEVSTUFSS19QQUNLOworCWRhdGFbMTldID0gYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8ub3V0X3FzWzBdLT51c2VkX2J1ZmZlcnMpOworCWRhdGFbMjBdID0gKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA+IDEpID8KKwkJCWF0b21pY19yZWFkKCZjYXJkLT5xZGlvLm91dF9xc1sxXS0+dXNlZF9idWZmZXJzKSA6IDA7CisJZGF0YVsyMV0gPSAoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID4gMikgPworCQkJYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8ub3V0X3FzWzJdLT51c2VkX2J1ZmZlcnMpIDogMDsKKwlkYXRhWzIyXSA9IChjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPiAzKSA/CisJCQlhdG9taWNfcmVhZCgmY2FyZC0+cWRpby5vdXRfcXNbM10tPnVzZWRfYnVmZmVycykgOiAwOworCWRhdGFbMjNdID0gY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3RpbWU7CisJZGF0YVsyNF0gPSBjYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfY250OworCWRhdGFbMjVdID0gY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fdGltZTsKKwlkYXRhWzI2XSA9IGNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX2NudDsKKwlkYXRhWzI3XSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl90aW1lOworCWRhdGFbMjhdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyX2NudDsKKwlkYXRhWzI5XSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfdGltZTsKKwlkYXRhWzMwXSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfY250OworCWRhdGFbMzFdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3RpbWU7CisJZGF0YVszMl0gPSBjYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fY250OworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzKTsKKwordm9pZCBxZXRoX2NvcmVfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCit7CisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJbWVtY3B5KGRhdGEsICZxZXRoX2V0aHRvb2xfc3RhdHNfa2V5cywKKwkJCXNpemVvZihxZXRoX2V0aHRvb2xfc3RhdHNfa2V5cykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2NvcmVfZ2V0X3N0cmluZ3MpOworCit2b2lkIHFldGhfY29yZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKKwkJc3RyY3B5KGluZm8tPmRyaXZlciwgInFldGhfbDIiKTsKKwllbHNlCisJCXN0cmNweShpbmZvLT5kcml2ZXIsICJxZXRoX2wzIik7CisKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgIjEuMCIpOworCXN0cmNweShpbmZvLT5md192ZXJzaW9uLCBjYXJkLT5pbmZvLm1jbF9sZXZlbCk7CisJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgIiVzLyVzLyVzIiwKKwkJCUNBUkRfUkRFVl9JRChjYXJkKSwKKwkJCUNBUkRfV0RFVl9JRChjYXJkKSwKKwkJCUNBUkRfRERFVl9JRChjYXJkKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2NvcmVfZ2V0X2RydmluZm8pOworCitzdGF0aWMgaW50IF9faW5pdCBxZXRoX2NvcmVfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCVBSSU5UX0lORk8oImxvYWRpbmcgY29yZSBmdW5jdGlvbnNcbiIpOworCUlOSVRfTElTVF9IRUFEKCZxZXRoX2NvcmVfY2FyZF9saXN0Lmxpc3QpOworCXJ3bG9ja19pbml0KCZxZXRoX2NvcmVfY2FyZF9saXN0LnJ3bG9jayk7CisKKwlyYyA9IHFldGhfcmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9lcnI7CisJcmMgPSBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZxZXRoX2Njd19kcml2ZXIpOworCWlmIChyYykKKwkJZ290byBjY3dfZXJyOworCXJjID0gY2N3Z3JvdXBfZHJpdmVyX3JlZ2lzdGVyKCZxZXRoX2NvcmVfY2N3Z3JvdXBfZHJpdmVyKTsKKwlpZiAocmMpCisJCWdvdG8gY2N3Z3JvdXBfZXJyOworCXJjID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZxZXRoX2NvcmVfY2N3Z3JvdXBfZHJpdmVyLmRyaXZlciwKKwkJCQkmZHJpdmVyX2F0dHJfZ3JvdXApOworCWlmIChyYykKKwkJZ290byBkcml2ZXJfZXJyOworCXFldGhfY29yZV9yb290X2RldiA9IHMzOTBfcm9vdF9kZXZfcmVnaXN0ZXIoInFldGgiKTsKKwlyYyA9IElTX0VSUihxZXRoX2NvcmVfcm9vdF9kZXYpID8gUFRSX0VSUihxZXRoX2NvcmVfcm9vdF9kZXYpIDogMDsKKwlpZiAocmMpCisJCWdvdG8gcmVnaXN0ZXJfZXJyOworCXJldHVybiAwOworCityZWdpc3Rlcl9lcnI6CisJZHJpdmVyX3JlbW92ZV9maWxlKCZxZXRoX2NvcmVfY2N3Z3JvdXBfZHJpdmVyLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl9ncm91cCk7Citkcml2ZXJfZXJyOgorCWNjd2dyb3VwX2RyaXZlcl91bnJlZ2lzdGVyKCZxZXRoX2NvcmVfY2N3Z3JvdXBfZHJpdmVyKTsKK2Njd2dyb3VwX2VycjoKKwljY3dfZHJpdmVyX3VucmVnaXN0ZXIoJnFldGhfY2N3X2RyaXZlcik7CitjY3dfZXJyOgorCXFldGhfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKK291dF9lcnI6CisJUFJJTlRfRVJSKCJJbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBjb2RlICVkXG4iLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcWV0aF9jb3JlX2V4aXQodm9pZCkKK3sKKwlzMzkwX3Jvb3RfZGV2X3VucmVnaXN0ZXIocWV0aF9jb3JlX3Jvb3RfZGV2KTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnFldGhfY29yZV9jY3dncm91cF9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX2dyb3VwKTsKKwljY3dncm91cF9kcml2ZXJfdW5yZWdpc3RlcigmcWV0aF9jb3JlX2Njd2dyb3VwX2RyaXZlcik7CisJY2N3X2RyaXZlcl91bnJlZ2lzdGVyKCZxZXRoX2Njd19kcml2ZXIpOworCXFldGhfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKKwlQUklOVF9JTkZPKCJjb3JlIGZ1bmN0aW9ucyByZW1vdmVkXG4iKTsKK30KKworbW9kdWxlX2luaXQocWV0aF9jb3JlX2luaXQpOworbW9kdWxlX2V4aXQocWV0aF9jb3JlX2V4aXQpOworTU9EVUxFX0FVVEhPUigiRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInFldGggY29yZSBmdW5jdGlvbnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNGRlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5jCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiAgICBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPiwKKyAqCQkgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPiwKKyAqCQkgRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9jaW8uaD4KKyNpbmNsdWRlICJxZXRoX2NvcmVfbXBjLmgiCisKK3Vuc2lnbmVkIGNoYXIgSURYX0FDVElWQVRFX1JFQURbXSA9IHsKKwkweDAwLCAweDAwLCAweDgwLCAweDAwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDE5LCAweDAxLCAweDAxLCAweDgwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMSwKKwkweGQzLCAweGQzLCAweGQ2LCAweGQzLCAgMHhjNSwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwCit9OworCit1bnNpZ25lZCBjaGFyIElEWF9BQ1RJVkFURV9XUklURVtdID0geworCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4MDEsIDB4MDEsIDB4ODAsICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsICAweDAwLCAweDAwLCAweGM4LCAweGMxLAorCTB4ZDMsIDB4ZDMsIDB4ZDYsIDB4ZDMsICAweGM1LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAKK307CisKK3Vuc2lnbmVkIGNoYXIgQ01fRU5BQkxFW10gPSB7CisJMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ODEsIDB4N2UsIDB4MDAsIDB4MDEsICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAweDAwLCAweDI0LCAweDAwLCAweDIzLAorCTB4MDAsIDB4MDAsIDB4MjMsIDB4MDUsICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjMsICAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDAsIDB4MGMsIDB4NDEsIDB4MDIsICAweDAwLCAweDE3LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwYiwgMHgwNCwgMHgwMSwKKwkweDdlLCAweDA0LCAweDA1LCAweDAwLCAgMHgwMSwgMHgwMSwgMHgwZiwKKwkweDAwLAorCTB4MGMsIDB4MDQsIDB4MDIsIDB4ZmYsICAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYKK307CisKK3Vuc2lnbmVkIGNoYXIgQ01fU0VUVVBbXSA9IHsKKwkweDAwLCAweGUwLCAweDAwLCAweDAwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg4MSwgMHg3ZSwgMHgwMCwgMHgwMSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjQsCisJMHgwMCwgMHgwMCwgMHgyNCwgMHgwNSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyNCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMCwgMHgwYywgMHg0MSwgMHgwNCwgIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA5LCAweDA0LCAweDA0LAorCTB4MDUsIDB4MDAsIDB4MDEsIDB4MDEsICAweDExLAorCTB4MDAsIDB4MDksIDB4MDQsCisJMHgwNSwgMHgwNSwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwNiwKKwkweDA0LCAweDA2LCAweGM4LCAweDAwCit9OworCit1bnNpZ25lZCBjaGFyIFVMUF9FTkFCTEVbXSA9IHsKKwkweDAwLCAweGUwLCAweDAwLCAweDAwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg3ZSwgMHgwMCwgMHgwMSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmIsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwNSwgIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMCwgMHgwYywgMHg0MSwgMHgwMiwgIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDBiLCAweDA0LCAweDAxLAorCTB4MDMsIDB4MDQsIDB4MDUsIDB4MDAsICAweDAxLCAweDAxLCAweDEyLAorCTB4MDAsCisJMHgxNCwgMHgwNCwgMHgwYSwgMHgwMCwgIDB4MjAsIDB4MDAsIDB4MDAsIDB4ZmYsCisJMHhmZiwgMHgwMCwgMHgwOCwgMHhjOCwgIDB4ZTgsIDB4YzQsIDB4ZjEsIDB4YzcsCisJMHhmMSwgMHgwMCwgMHgwMAorfTsKKwordW5zaWduZWQgY2hhciBVTFBfU0VUVVBbXSA9IHsKKwkweDAwLCAweGUwLCAweDAwLCAweDAwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywKKwkweDEwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg3ZSwgMHgwMCwgMHgwMSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmMsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwNSwgIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyYywgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMCwgMHgwYywgMHg0MSwgMHgwNCwgIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA5LCAweDA0LCAweDA0LAorCTB4MDUsIDB4MDAsIDB4MDEsIDB4MDEsICAweDE0LAorCTB4MDAsIDB4MDksIDB4MDQsCisJMHgwNSwgMHgwNSwgMHgzMCwgMHgwMSwgIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwNiwKKwkweDA0LCAweDA2LCAweDQwLCAweDAwLAorCTB4MDAsIDB4MDgsIDB4MDQsIDB4MGIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKwordW5zaWduZWQgY2hhciBETV9BQ1RbXSA9IHsKKwkweDAwLCAweGUwLCAweDAwLCAweDAwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDEwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg3ZSwgMHgwMCwgMHgwMSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgIDB4MDAsIDB4MjQsIDB4MDAsIDB4MTUsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwNSwgIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxNSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMCwgMHgwYywgMHg0MywgMHg2MCwgIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA5LCAweDA0LCAweDA0LAorCTB4MDUsIDB4NDAsIDB4MDEsIDB4MDEsICAweDAwCit9OworCit1bnNpZ25lZCBjaGFyIElQQV9QRFVfSEVBREVSW10gPSB7CisJMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgIDB4NzcsIDB4NzcsIDB4NzcsIDB4NzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgIDB4MDAsIDB4MDAsCisJCShJUEFfUERVX0hFQURFUl9TSVpFK3NpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSkgLyAyNTYsCisJCShJUEFfUERVX0hFQURFUl9TSVpFK3NpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSkgJSAyNTYsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhjMSwgMHgwMywgMHgwMCwgMHgwMSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIDB4MDAsIDB4MjQsCisJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSAvIDI1NiwKKwkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYV9jbWQpICUgMjU2LAorCTB4MDAsCisJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSAvIDI1NiwKKwkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYV9jbWQpICUgMjU2LAorCTB4MDUsCisJMHg3NywgMHg3NywgMHg3NywgMHg3NywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLAorCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhX2NtZCkgLyAyNTYsCisJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSAlIDI1NiwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKElQQV9QRFVfSEVBREVSKTsKKwordW5zaWduZWQgY2hhciBXUklURV9DQ1dbXSA9IHsKKwkweDAxLCBDQ1dfRkxBR19TTEksIDAsIDAsCisJMCwgMCwgMCwgMAorfTsKKwordW5zaWduZWQgY2hhciBSRUFEX0NDV1tdID0geworCTB4MDIsIENDV19GTEFHX1NMSSwgMCwgMCwKKwkwLCAwLCAwLCAwCit9OworCisKK3N0cnVjdCBpcGFfcmNfbXNnIHsKKwllbnVtIHFldGhfaXBhX3JldHVybl9jb2RlcyByYzsKKwljaGFyICptc2c7Cit9OworCitzdGF0aWMgc3RydWN0IGlwYV9yY19tc2cgcWV0aF9pcGFfcmNfbXNnW10gPSB7CisJe0lQQV9SQ19TVUNDRVNTLAkJInN1Y2Nlc3MifSwKKwl7SVBBX1JDX05PVFNVUFAsCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIn0sCisJe0lQQV9SQ19JUF9UQUJMRV9GVUxMLAkJIkFkZCBBZGRyIElQIFRhYmxlIEZ1bGwgLSBpcHY2In0sCisJe0lQQV9SQ19VTktOT1dOX0VSUk9SLAkJIklQQSBjb21tYW5kIGZhaWxlZCAtIHJlYXNvbiB1bmtub3duIn0sCisJe0lQQV9SQ19VTlNVUFBPUlRFRF9DT01NQU5ELAkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIn0sCisJe0lQQV9SQ19EVVBfSVBWNl9SRU1PVEUsICJpcHY2IGFkZHJlc3MgYWxyZWFkeSByZWdpc3RlcmVkIHJlbW90ZSJ9LAorCXtJUEFfUkNfRFVQX0lQVjZfSE9NRSwJCSJpcHY2IGFkZHJlc3MgYWxyZWFkeSByZWdpc3RlcmVkIn0sCisJe0lQQV9SQ19VTlJFR0lTVEVSRURfQUREUiwJIkFkZHJlc3Mgbm90IHJlZ2lzdGVyZWQifSwKKwl7SVBBX1JDX05PX0lEX0FWQUlMQUJMRSwJIk5vIGlkZW50aWZpZXJzIGF2YWlsYWJsZSJ9LAorCXtJUEFfUkNfSURfTk9UX0ZPVU5ELAkJIklkZW50aWZpZXIgbm90IGZvdW5kIn0sCisJe0lQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04sCSJJUCB2ZXJzaW9uIGluY29ycmVjdCJ9LAorCXtJUEFfUkNfTEFOX0ZSQU1FX01JU01BVENILAkiTEFOIGFuZCBmcmFtZSBtaXNtYXRjaCJ9LAorCXtJUEFfUkNfTDJfVU5TVVBQT1JURURfQ01ELAkiVW5zdXBwb3J0ZWQgbGF5ZXIgMiBjb21tYW5kIn0sCisJe0lQQV9SQ19MMl9EVVBfTUFDLAkJIkR1cGxpY2F0ZSBNQUMgYWRkcmVzcyJ9LAorCXtJUEFfUkNfTDJfQUREUl9UQUJMRV9GVUxMLAkiTGF5ZXIyIGFkZHJlc3MgdGFibGUgZnVsbCJ9LAorCXtJUEFfUkNfTDJfRFVQX0xBWUVSM19NQUMsCSJEdXBsaWNhdGUgd2l0aCBsYXllciAzIE1BQyJ9LAorCXtJUEFfUkNfTDJfR01BQ19OT1RfRk9VTkQsCSJHTUFDIG5vdCBmb3VuZCJ9LAorCXtJUEFfUkNfTDJfTUFDX05PVF9GT1VORCwJIkwyIG1hYyBhZGRyZXNzIG5vdCBmb3VuZCJ9LAorCXtJUEFfUkNfTDJfSU5WQUxJRF9WTEFOX0lELAkiTDIgaW52YWxpZCB2bGFuIGlkIn0sCisJe0lQQV9SQ19MMl9EVVBfVkxBTl9JRCwJCSJMMiBkdXBsaWNhdGUgdmxhbiBpZCJ9LAorCXtJUEFfUkNfTDJfVkxBTl9JRF9OT1RfRk9VTkQsCSJMMiB2bGFuIGlkIG5vdCBmb3VuZCJ9LAorCXtJUEFfUkNfREFUQV9NSVNNQVRDSCwJCSJEYXRhIGZpZWxkIG1pc21hdGNoICh2NC92NiBtaXhlZCkifSwKKwl7SVBBX1JDX0lOVkFMSURfTVRVX1NJWkUsCSJJbnZhbGlkIE1UVSBzaXplIn0sCisJe0lQQV9SQ19JTlZBTElEX0xBTlRZUEUsCSJJbnZhbGlkIExBTiB0eXBlIn0sCisJe0lQQV9SQ19JTlZBTElEX0xBTk5VTSwJCSJJbnZhbGlkIExBTiBudW0ifSwKKwl7SVBBX1JDX0RVUExJQ0FURV9JUF9BRERSRVNTLAkiQWRkcmVzcyBhbHJlYWR5IHJlZ2lzdGVyZWQifSwKKwl7SVBBX1JDX0lQX0FERFJfVEFCTEVfRlVMTCwJIklQIGFkZHJlc3MgdGFibGUgZnVsbCJ9LAorCXtJUEFfUkNfTEFOX1BPUlRfU1RBVEVfRVJST1IsCSJMQU4gcG9ydCBzdGF0ZSBlcnJvciJ9LAorCXtJUEFfUkNfU0VUSVBfTk9fU1RBUlRMQU4sCSJTZXRpcCBubyBzdGFydGxhbiByZWNlaXZlZCJ9LAorCXtJUEFfUkNfU0VUSVBfQUxSRUFEWV9SRUNFSVZFRCwJIlNldGlwIGFscmVhZHkgcmVjZWl2ZWQifSwKKwl7SVBBX1JDX0lQX0FERFJfQUxSRUFEWV9VU0VELAkiSVAgYWRkcmVzcyBhbHJlYWR5IGluIHVzZSBvbiBMQU4ifSwKKwl7SVBBX1JDX01DX0FERFJfTk9UX0ZPVU5ELAkiTXVsdGljYXN0IGFkZHJlc3Mgbm90IGZvdW5kIn0sCisJe0lQQV9SQ19TRVRJUF9JTlZBTElEX1ZFUlNJT04sCSJTRVRJUCBpbnZhbGlkIElQIHZlcnNpb24ifSwKKwl7SVBBX1JDX1VOU1VQUE9SVEVEX1NVQkNNRCwJIlVuc3VwcG9ydGVkIGFzc2lzdCBzdWJjb21tYW5kIn0sCisJe0lQQV9SQ19BUlBfQVNTSVNUX05PX0VOQUJMRSwJIk9ubHkgcGFydGlhbCBzdWNjZXNzLCBubyBlbmFibGUifSwKKwl7SVBBX1JDX1BSSU1BUllfQUxSRUFEWV9ERUZJTkVELCAiUHJpbWFyeSBhbHJlYWR5IGRlZmluZWQifSwKKwl7SVBBX1JDX1NFQ09ORF9BTFJFQURZX0RFRklORUQsCSJTZWNvbmRhcnkgYWxyZWFkeSBkZWZpbmVkIn0sCisJe0lQQV9SQ19JTlZBTElEX1NFVFJUR19JTkRJQ0FUT1IsICJJbnZhbGlkIFNFVFJURyBpbmRpY2F0b3IifSwKKwl7SVBBX1JDX01DX0FERFJfQUxSRUFEWV9ERUZJTkVELCAiTXVsdGljYXN0IGFkZHJlc3MgYWxyZWFkeSBkZWZpbmVkIn0sCisJe0lQQV9SQ19MQU5fT0ZGTElORSwJCSJTVFJUTEFOX0xBTl9ESVNBQkxFRCAtIExBTiBvZmZsaW5lIn0sCisJe0lQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04yLAkiSW52YWxpZCBJUCB2ZXJzaW9uIn0sCisJe0lQQV9SQ19GRkZGLAkJCSJVbmtub3duIEVycm9yIn0KK307CisKKworCitjaGFyICpxZXRoX2dldF9pcGFfbXNnKGVudW0gcWV0aF9pcGFfcmV0dXJuX2NvZGVzIHJjKQoreworCWludCB4ID0gMDsKKwlxZXRoX2lwYV9yY19tc2dbc2l6ZW9mKHFldGhfaXBhX3JjX21zZykgLworCQkJc2l6ZW9mKHN0cnVjdCBpcGFfcmNfbXNnKSAtIDFdLnJjID0gcmM7CisJd2hpbGUgKHFldGhfaXBhX3JjX21zZ1t4XS5yYyAhPSByYykKKwkJeCsrOworCXJldHVybiBxZXRoX2lwYV9yY19tc2dbeF0ubXNnOworfQorCisKK3N0cnVjdCBpcGFfY21kX25hbWVzIHsKKwllbnVtIHFldGhfaXBhX2NtZHMgY21kOworCWNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgc3RydWN0IGlwYV9jbWRfbmFtZXMgcWV0aF9pcGFfY21kX25hbWVzW10gPSB7CisJe0lQQV9DTURfU1RBUlRMQU4sCSJzdGFydGxhbiJ9LAorCXtJUEFfQ01EX1NUT1BMQU4sCSJzdG9wbGFuIn0sCisJe0lQQV9DTURfU0VUVk1BQywJInNldHZtYWMifSwKKwl7SVBBX0NNRF9ERUxWTUFDLAkiZGVsdm1hYyJ9LAorCXtJUEFfQ01EX1NFVEdNQUMsCSJzZXRnbWFjIn0sCisJe0lQQV9DTURfREVMR01BQywJImRlbGdtYWMifSwKKwl7SVBBX0NNRF9TRVRWTEFOLAkic2V0dmxhbiJ9LAorCXtJUEFfQ01EX0RFTFZMQU4sCSJkZWx2bGFuIn0sCisJe0lQQV9DTURfU0VUQ0NJRCwJInNldGNjaWQifSwKKwl7SVBBX0NNRF9ERUxDQ0lELAkiZGVsY2NpZCJ9LAorCXtJUEFfQ01EX01PRENDSUQsCSJtb2RjY2lkIn0sCisJe0lQQV9DTURfU0VUSVAsCQkic2V0aXAifSwKKwl7SVBBX0NNRF9RSVBBU1NJU1QsCSJxaXBhc3Npc3QifSwKKwl7SVBBX0NNRF9TRVRBU1NQQVJNUywJInNldGFzc3Bhcm1zIn0sCisJe0lQQV9DTURfU0VUSVBNLAkic2V0aXBtIn0sCisJe0lQQV9DTURfREVMSVBNLAkiZGVsaXBtIn0sCisJe0lQQV9DTURfU0VUUlRHLAkic2V0cnRnIn0sCisJe0lQQV9DTURfREVMSVAsCQkiZGVsaXAifSwKKwl7SVBBX0NNRF9TRVRBREFQVEVSUEFSTVMsICJzZXRhZGFwdGVycGFybXMifSwKKwl7SVBBX0NNRF9TRVRfRElBR19BU1MsCSJzZXRfZGlhZ19hc3MifSwKKwl7SVBBX0NNRF9DUkVBVEVfQUREUiwJImNyZWF0ZV9hZGRyIn0sCisJe0lQQV9DTURfREVTVFJPWV9BRERSLAkiZGVzdHJveV9hZGRyIn0sCisJe0lQQV9DTURfUkVHSVNURVJfTE9DQUxfQUREUiwJInJlZ2lzdGVyX2xvY2FsX2FkZHIifSwKKwl7SVBBX0NNRF9VTlJFR0lTVEVSX0xPQ0FMX0FERFIsCSJ1bnJlZ2lzdGVyX2xvY2FsX2FkZHIifSwKKwl7SVBBX0NNRF9VTktOT1dOLAkidW5rbm93biJ9LAorfTsKKworY2hhciAqcWV0aF9nZXRfaXBhX2NtZF9uYW1lKGVudW0gcWV0aF9pcGFfY21kcyBjbWQpCit7CisJaW50IHggPSAwOworCXFldGhfaXBhX2NtZF9uYW1lc1sKKwkJc2l6ZW9mKHFldGhfaXBhX2NtZF9uYW1lcykgLworCQkJc2l6ZW9mKHN0cnVjdCBpcGFfY21kX25hbWVzKS0xXS5jbWQgPSBjbWQ7CisJd2hpbGUgKHFldGhfaXBhX2NtZF9uYW1lc1t4XS5jbWQgIT0gY21kKQorCQl4Kys7CisJcmV0dXJuIHFldGhfaXBhX2NtZF9uYW1lc1t4XS5uYW1lOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODU0ODgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiAgZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKKyAqICAgIEF1dGhvcihzKTogRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+LAorICoJCSBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAorICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KKyAqLworCisjaWZuZGVmIF9fUUVUSF9DT1JFX01QQ19IX18KKyNkZWZpbmUgX19RRVRIX0NPUkVfTVBDX0hfXworCisjaW5jbHVkZSA8YXNtL3FldGguaD4KKworI2RlZmluZSBJUEFfUERVX0hFQURFUl9TSVpFCTB4NDAKKyNkZWZpbmUgUUVUSF9JUEFfUERVX0xFTl9UT1RBTChidWZmZXIpIChidWZmZXIgKyAweDBlKQorI2RlZmluZSBRRVRIX0lQQV9QRFVfTEVOX1BEVTEoYnVmZmVyKSAoYnVmZmVyICsgMHgyNikKKyNkZWZpbmUgUUVUSF9JUEFfUERVX0xFTl9QRFUyKGJ1ZmZlcikgKGJ1ZmZlciArIDB4MjkpCisjZGVmaW5lIFFFVEhfSVBBX1BEVV9MRU5fUERVMyhidWZmZXIpIChidWZmZXIgKyAweDNhKQorCitleHRlcm4gdW5zaWduZWQgY2hhciBJUEFfUERVX0hFQURFUltdOworI2RlZmluZSBRRVRIX0lQQV9DTURfREVTVF9BRERSKGJ1ZmZlcikgKGJ1ZmZlciArIDB4MmMpCisKKyNkZWZpbmUgSVBBX0NNRF9MRU5HVEgJKElQQV9QRFVfSEVBREVSX1NJWkUgKyBzaXplb2Yoc3RydWN0IHFldGhfaXBhX2NtZCkpCisKKyNkZWZpbmUgUUVUSF9TRVFfTk9fTEVOR1RICTQKKyNkZWZpbmUgUUVUSF9NUENfVE9LRU5fTEVOR1RICTQKKyNkZWZpbmUgUUVUSF9NQ0xfTEVOR1RICQk0CisjZGVmaW5lIE9TQV9BRERSX0xFTgkJNgorCisjZGVmaW5lIFFFVEhfVElNRU9VVAkJKDEwICogSFopCisjZGVmaW5lIFFFVEhfSVBBX1RJTUVPVVQJKDQ1ICogSFopCisjZGVmaW5lIFFFVEhfSURYX0NPTU1BTkRfU0VRTk8JMHhmZmZmMDAwMAorI2RlZmluZSBTUl9JTkZPX0xFTgkJMTYKKworI2RlZmluZSBRRVRIX0NMRUFSX0NIQU5ORUxfUEFSTQktMTAKKyNkZWZpbmUgUUVUSF9IQUxUX0NIQU5ORUxfUEFSTQktMTEKKyNkZWZpbmUgUUVUSF9SQ0RfUEFSTSAtMTIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSVAgQXNzaXN0IHJlbGF0ZWQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJUEFfQ01EX0lOSVRJQVRPUl9IT1NUICAweDAwCisjZGVmaW5lIElQQV9DTURfSU5JVElBVE9SX09TQSAgIDB4MDEKKyNkZWZpbmUgSVBBX0NNRF9JTklUSUFUT1JfSE9TVF9SRVBMWSAgMHg4MAorI2RlZmluZSBJUEFfQ01EX0lOSVRJQVRPUl9PU0FfUkVQTFkgICAweDgxCisjZGVmaW5lIElQQV9DTURfUFJJTV9WRVJTSU9OX05PIDB4MDEKKworZW51bSBxZXRoX2NhcmRfdHlwZXMgeworCVFFVEhfQ0FSRF9UWVBFX1VOS05PV04gPSAwLAorCVFFVEhfQ0FSRF9UWVBFX09TQUUgICAgPSAxMCwKKwlRRVRIX0NBUkRfVFlQRV9JUUQgICAgID0gMTIzNCwKKwlRRVRIX0NBUkRfVFlQRV9PU04gICAgID0gMTEsCit9OworCisjZGVmaW5lIFFFVEhfTVBDX0RJRklORk9fTEVOX0lORElDQVRFU19MSU5LX1RZUEUgMHgxOAorLyogb25seSB0aGUgZmlyc3QgdHdvIGJ5dGVzIGFyZSBsb29rZWQgYXQgaW4gcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQgKi8KK2VudW0gcWV0aF9saW5rX3R5cGVzIHsKKwlRRVRIX0xJTktfVFlQRV9GQVNUX0VUSCAgICAgPSAweDAxLAorCVFFVEhfTElOS19UWVBFX0hTVFIgICAgICAgICA9IDB4MDIsCisJUUVUSF9MSU5LX1RZUEVfR0JJVF9FVEggICAgID0gMHgwMywKKwlRRVRIX0xJTktfVFlQRV9PU04gICAgICAgICAgPSAweDA0LAorCVFFVEhfTElOS19UWVBFXzEwR0JJVF9FVEggICA9IDB4MTAsCisJUUVUSF9MSU5LX1RZUEVfTEFORV9FVEgxMDAgID0gMHg4MSwKKwlRRVRIX0xJTktfVFlQRV9MQU5FX1RSICAgICAgPSAweDgyLAorCVFFVEhfTElOS19UWVBFX0xBTkVfRVRIMTAwMCA9IDB4ODMsCisJUUVUSF9MSU5LX1RZUEVfTEFORSAgICAgICAgID0gMHg4OCwKKwlRRVRIX0xJTktfVFlQRV9BVE1fTkFUSVZFICAgPSAweDkwLAorfTsKKworZW51bSBxZXRoX3RyX21hY2FkZHJfbW9kZXMgeworCVFFVEhfVFJfTUFDQUREUl9OT05DQU5PTklDQUwgPSAwLAorCVFFVEhfVFJfTUFDQUREUl9DQU5PTklDQUwgICAgPSAxLAorfTsKKworZW51bSBxZXRoX3RyX2Jyb2FkY2FzdF9tb2RlcyB7CisJUUVUSF9UUl9CUk9BRENBU1RfQUxMUklOR1MgPSAwLAorCVFFVEhfVFJfQlJPQURDQVNUX0xPQ0FMICAgID0gMSwKK307CisKKy8qIHRoZXNlIHZhbHVlcyBtYXRjaCBDSEVDS1NVTV8qIGluIGluY2x1ZGUvbGludXgvc2tidWZmLmggKi8KK2VudW0gcWV0aF9jaGVja3N1bV90eXBlcyB7CisJU1dfQ0hFQ0tTVU1NSU5HID0gMCwgLyogVE9ETzogc2V0IHRvIGJpdCBmbGFnIHVzZWQgaW4gSVBBIENvbW1hbmQgKi8KKwlIV19DSEVDS1NVTU1JTkcgPSAxLAorCU5PX0NIRUNLU1VNTUlORyA9IDIsCit9OworI2RlZmluZSBRRVRIX0NIRUNLU1VNX0RFRkFVTFQgU1dfQ0hFQ0tTVU1NSU5HCisKKy8qCisgKiBSb3V0aW5nIHN0dWZmCisgKi8KKyNkZWZpbmUgUkVTRVRfUk9VVElOR19GTEFHIDB4MTAgLyogaW5kaWNhdGUgdGhhdCByb3V0aW5nIHR5cGUgc2hhbGwgYmUgc2V0ICovCitlbnVtIHFldGhfcm91dGluZ190eXBlcyB7CisJLyogVE9ETzogc2V0IHRvIGJpdCBmbGFnIHVzZWQgaW4gSVBBIENvbW1hbmQgKi8KKwlOT19ST1VURVIJCT0gMCwKKwlQUklNQVJZX1JPVVRFUgkJPSAxLAorCVNFQ09OREFSWV9ST1VURVIJPSAyLAorCU1VTFRJQ0FTVF9ST1VURVIJPSAzLAorCVBSSU1BUllfQ09OTkVDVE9SCT0gNCwKKwlTRUNPTkRBUllfQ09OTkVDVE9SCT0gNSwKK307CisKKy8qIElQQSBDb21tYW5kcyAqLworZW51bSBxZXRoX2lwYV9jbWRzIHsKKwlJUEFfQ01EX1NUQVJUTEFOCQk9IDB4MDEsCisJSVBBX0NNRF9TVE9QTEFOCQkJPSAweDAyLAorCUlQQV9DTURfU0VUVk1BQwkJCT0gMHgyMSwKKwlJUEFfQ01EX0RFTFZNQUMJCQk9IDB4MjIsCisJSVBBX0NNRF9TRVRHTUFDCQkJPSAweDIzLAorCUlQQV9DTURfREVMR01BQwkJCT0gMHgyNCwKKwlJUEFfQ01EX1NFVFZMQU4JCQk9IDB4MjUsCisJSVBBX0NNRF9ERUxWTEFOCQkJPSAweDI2LAorCUlQQV9DTURfU0VUQ0NJRAkJCT0gMHg0MSwKKwlJUEFfQ01EX0RFTENDSUQJCQk9IDB4NDIsCisJSVBBX0NNRF9NT0RDQ0lECQkJPSAweDQzLAorCUlQQV9DTURfU0VUSVAJCQk9IDB4YjEsCisJSVBBX0NNRF9RSVBBU1NJU1QJCT0gMHhiMiwKKwlJUEFfQ01EX1NFVEFTU1BBUk1TCQk9IDB4YjMsCisJSVBBX0NNRF9TRVRJUE0JCQk9IDB4YjQsCisJSVBBX0NNRF9ERUxJUE0JCQk9IDB4YjUsCisJSVBBX0NNRF9TRVRSVEcJCQk9IDB4YjYsCisJSVBBX0NNRF9ERUxJUAkJCT0gMHhiNywKKwlJUEFfQ01EX1NFVEFEQVBURVJQQVJNUwkJPSAweGI4LAorCUlQQV9DTURfU0VUX0RJQUdfQVNTCQk9IDB4YjksCisJSVBBX0NNRF9DUkVBVEVfQUREUgkJPSAweGMzLAorCUlQQV9DTURfREVTVFJPWV9BRERSCQk9IDB4YzQsCisJSVBBX0NNRF9SRUdJU1RFUl9MT0NBTF9BRERSCT0gMHhkMSwKKwlJUEFfQ01EX1VOUkVHSVNURVJfTE9DQUxfQUREUgk9IDB4ZDIsCisJSVBBX0NNRF9VTktOT1dOCQkJPSAweDAwCit9OworCitlbnVtIHFldGhfaXBfYXNzX2NtZHMgeworCUlQQV9DTURfQVNTX1NUQVJUCT0gMHgwMDAxLAorCUlQQV9DTURfQVNTX1NUT1AJPSAweDAwMDIsCisJSVBBX0NNRF9BU1NfQ09ORklHVVJFCT0gMHgwMDAzLAorCUlQQV9DTURfQVNTX0VOQUJMRQk9IDB4MDAwNCwKK307CisKK2VudW0gcWV0aF9hcnBfcHJvY2Vzc19zdWJjbWRzIHsKKwlJUEFfQ01EX0FTU19BUlBfU0VUX05PX0VOVFJJRVMJPSAweDAwMDMsCisJSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0NBQ0hFCT0gMHgwMDA0LAorCUlQQV9DTURfQVNTX0FSUF9BRERfRU5UUlkJPSAweDAwMDUsCisJSVBBX0NNRF9BU1NfQVJQX1JFTU9WRV9FTlRSWQk9IDB4MDAwNiwKKwlJUEFfQ01EX0FTU19BUlBfRkxVU0hfQ0FDSEUJPSAweDAwMDcsCisJSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8JPSAweDAxMDQsCisJSVBBX0NNRF9BU1NfQVJQX1FVRVJZX1NUQVRTCT0gMHgwMjA0LAorfTsKKworCisvKiBSZXR1cm4gQ29kZXMgZm9yIElQQSBDb21tYW5kcworICogYWNjb3JkaW5nIHRvIE9TQSBjYXJkIFNwZWNzICovCisKK2VudW0gcWV0aF9pcGFfcmV0dXJuX2NvZGVzIHsKKwlJUEFfUkNfU1VDQ0VTUwkJCT0gMHgwMDAwLAorCUlQQV9SQ19OT1RTVVBQCQkJPSAweDAwMDEsCisJSVBBX1JDX0lQX1RBQkxFX0ZVTEwJCT0gMHgwMDAyLAorCUlQQV9SQ19VTktOT1dOX0VSUk9SCQk9IDB4MDAwMywKKwlJUEFfUkNfVU5TVVBQT1JURURfQ09NTUFORAk9IDB4MDAwNCwKKwlJUEFfUkNfRFVQX0lQVjZfUkVNT1RFCQk9IDB4MDAwOCwKKwlJUEFfUkNfRFVQX0lQVjZfSE9NRQkJPSAweDAwMTAsCisJSVBBX1JDX1VOUkVHSVNURVJFRF9BRERSCT0gMHgwMDExLAorCUlQQV9SQ19OT19JRF9BVkFJTEFCTEUJCT0gMHgwMDEyLAorCUlQQV9SQ19JRF9OT1RfRk9VTkQJCT0gMHgwMDEzLAorCUlQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04JPSAweDAwMjAsCisJSVBBX1JDX0xBTl9GUkFNRV9NSVNNQVRDSAk9IDB4MDA0MCwKKwlJUEFfUkNfTDJfVU5TVVBQT1JURURfQ01ECT0gMHgyMDAzLAorCUlQQV9SQ19MMl9EVVBfTUFDCQk9IDB4MjAwNSwKKwlJUEFfUkNfTDJfQUREUl9UQUJMRV9GVUxMCT0gMHgyMDA2LAorCUlQQV9SQ19MMl9EVVBfTEFZRVIzX01BQwk9IDB4MjAwYSwKKwlJUEFfUkNfTDJfR01BQ19OT1RfRk9VTkQJPSAweDIwMGIsCisJSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQJCT0gMHgyMDEwLAorCUlQQV9SQ19MMl9JTlZBTElEX1ZMQU5fSUQJPSAweDIwMTUsCisJSVBBX1JDX0wyX0RVUF9WTEFOX0lECQk9IDB4MjAxNiwKKwlJUEFfUkNfTDJfVkxBTl9JRF9OT1RfRk9VTkQJPSAweDIwMTcsCisJSVBBX1JDX0RBVEFfTUlTTUFUQ0gJCT0gMHhlMDAxLAorCUlQQV9SQ19JTlZBTElEX01UVV9TSVpFCQk9IDB4ZTAwMiwKKwlJUEFfUkNfSU5WQUxJRF9MQU5UWVBFCQk9IDB4ZTAwMywKKwlJUEFfUkNfSU5WQUxJRF9MQU5OVU0JCT0gMHhlMDA0LAorCUlQQV9SQ19EVVBMSUNBVEVfSVBfQUREUkVTUwk9IDB4ZTAwNSwKKwlJUEFfUkNfSVBfQUREUl9UQUJMRV9GVUxMCT0gMHhlMDA2LAorCUlQQV9SQ19MQU5fUE9SVF9TVEFURV9FUlJPUgk9IDB4ZTAwNywKKwlJUEFfUkNfU0VUSVBfTk9fU1RBUlRMQU4JPSAweGUwMDgsCisJSVBBX1JDX1NFVElQX0FMUkVBRFlfUkVDRUlWRUQJPSAweGUwMDksCisJSVBBX1JDX0lQX0FERFJfQUxSRUFEWV9VU0VECT0gMHhlMDBhLAorCUlQQV9SQ19NQ19BRERSX05PVF9GT1VORAk9IDB4ZTAwYiwKKwlJUEFfUkNfU0VUSVBfSU5WQUxJRF9WRVJTSU9OCT0gMHhlMDBkLAorCUlQQV9SQ19VTlNVUFBPUlRFRF9TVUJDTUQJPSAweGUwMGUsCisJSVBBX1JDX0FSUF9BU1NJU1RfTk9fRU5BQkxFCT0gMHhlMDBmLAorCUlQQV9SQ19QUklNQVJZX0FMUkVBRFlfREVGSU5FRAk9IDB4ZTAxMCwKKwlJUEFfUkNfU0VDT05EX0FMUkVBRFlfREVGSU5FRAk9IDB4ZTAxMSwKKwlJUEFfUkNfSU5WQUxJRF9TRVRSVEdfSU5ESUNBVE9SCT0gMHhlMDEyLAorCUlQQV9SQ19NQ19BRERSX0FMUkVBRFlfREVGSU5FRAk9IDB4ZTAxMywKKwlJUEFfUkNfTEFOX09GRkxJTkUJCT0gMHhlMDgwLAorCUlQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04yCT0gMHhmMDAxLAorCUlQQV9SQ19GRkZGCQkJPSAweGZmZmYKK307CisKKy8qIElQQSBmdW5jdGlvbiBmbGFnczsgZWFjaCBmbGFnIG1hcmtzIGF2YWlsYWJpbGl0eSBvZiByZXNwZWN0aXZlIGZ1bmN0aW9uICovCitlbnVtIHFldGhfaXBhX2Z1bmNzIHsKKwlJUEFfQVJQX1BST0NFU1NJTkcgICAgICA9IDB4MDAwMDAwMDFMLAorCUlQQV9JTkJPVU5EX0NIRUNLU1VNICAgID0gMHgwMDAwMDAwMkwsCisJSVBBX09VVEJPVU5EX0NIRUNLU1VNICAgPSAweDAwMDAwMDA0TCwKKwlJUEFfSVBfRlJBR01FTlRBVElPTiAgICA9IDB4MDAwMDAwMDhMLAorCUlQQV9GSUxURVJJTkcgICAgICAgICAgID0gMHgwMDAwMDAxMEwsCisJSVBBX0lQVjYgICAgICAgICAgICAgICAgPSAweDAwMDAwMDIwTCwKKwlJUEFfTVVMVElDQVNUSU5HICAgICAgICA9IDB4MDAwMDAwNDBMLAorCUlQQV9JUF9SRUFTU0VNQkxZICAgICAgID0gMHgwMDAwMDA4MEwsCisJSVBBX1FVRVJZX0FSUF9DT1VOVEVSUyAgPSAweDAwMDAwMTAwTCwKKwlJUEFfUVVFUllfQVJQX0FERFJfSU5GTyA9IDB4MDAwMDAyMDBMLAorCUlQQV9TRVRBREFQVEVSUEFSTVMgICAgID0gMHgwMDAwMDQwMEwsCisJSVBBX1ZMQU5fUFJJTyAgICAgICAgICAgPSAweDAwMDAwODAwTCwKKwlJUEFfUEFTU1RIUlUgICAgICAgICAgICA9IDB4MDAwMDEwMDBMLAorCUlQQV9GTFVTSF9BUlBfU1VQUE9SVCAgID0gMHgwMDAwMjAwMEwsCisJSVBBX0ZVTExfVkxBTiAgICAgICAgICAgPSAweDAwMDA0MDAwTCwKKwlJUEFfSU5CT1VORF9QQVNTVEhSVSAgICA9IDB4MDAwMDgwMDBMLAorCUlQQV9TT1VSQ0VfTUFDICAgICAgICAgID0gMHgwMDAxMDAwMEwsCisJSVBBX09TQV9NQ19ST1VURVIgICAgICAgPSAweDAwMDIwMDAwTCwKKwlJUEFfUVVFUllfQVJQX0FTU0lTVAk9IDB4MDAwNDAwMDBMLAorCUlQQV9JTkJPVU5EX1RTTyAgICAgICAgID0gMHgwMDA4MDAwMEwsCisJSVBBX09VVEJPVU5EX1RTTyAgICAgICAgPSAweDAwMTAwMDAwTCwKK307CisKKy8qIFNFVElQL0RFTElQIElQQSBDb21tYW5kOiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitlbnVtIHFldGhfaXBhX3NldGRlbGlwX2ZsYWdzIHsKKwlRRVRIX0lQQV9TRVRERUxJUF9ERUZBVUxUICAgICAgICAgID0gMHgwMEwsIC8qIGRlZmF1bHQgKi8KKwlRRVRIX0lQQV9TRVRJUF9WSVBBX0ZMQUcgICAgICAgICAgID0gMHgwMUwsIC8qIG5vIGdyYXQuIEFSUCAqLworCVFFVEhfSVBBX1NFVElQX1RBS0VPVkVSX0ZMQUcgICAgICAgPSAweDAyTCwgLyogbm9mYWlsIG9uIGdyYXQuIEFSUCAqLworCVFFVEhfSVBBX0RFTElQX0FERFJfMl9CX1RBS0VOX09WRVIgPSAweDIwTCwKKwlRRVRIX0lQQV9ERUxJUF9WSVBBX0ZMQUcgICAgICAgICAgID0gMHg0MEwsCisJUUVUSF9JUEFfREVMSVBfQUREUl9ORUVEU19TRVRJUCAgICA9IDB4ODBMLAorfTsKKworLyogU0VUQURBUFRFUiBJUEEgQ29tbWFuZDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0gcWV0aF9pcGFfc2V0YWRwX2NtZCB7CisJSVBBX1NFVEFEUF9RVUVSWV9DT01NQU5EU19TVVBQT1JURUQJPSAweDAwMDEsCisJSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUwkJPSAweDAwMDIsCisJSVBBX1NFVEFEUF9BRERfREVMRVRFX0dST1VQX0FERFJFU1MJPSAweDAwMDQsCisJSVBBX1NFVEFEUF9BRERfREVMRVRFX0ZVTkNUSU9OQUxfQUREUgk9IDB4MDAwOCwKKwlJUEFfU0VUQURQX1NFVF9BRERSRVNTSU5HX01PREUJCT0gMHgwMDEwLAorCUlQQV9TRVRBRFBfU0VUX0NPTkZJR19QQVJNUwkJPSAweDAwMjAsCisJSVBBX1NFVEFEUF9TRVRfQ09ORklHX1BBUk1TX0VYVEVOREVECT0gMHgwMDQwLAorCUlQQV9TRVRBRFBfU0VUX0JST0FEQ0FTVF9NT0RFCQk9IDB4MDA4MCwKKwlJUEFfU0VUQURQX1NFTkRfT1NBX01FU1NBR0UJCT0gMHgwMTAwLAorCUlQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTAkJPSAweDAyMDAsCisJSVBBX1NFVEFEUF9RVUVSWV9DQVJEX0lORk8JCT0gMHgwNDAwLAorCUlQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERQkJPSAweDA4MDAsCit9OworZW51bSBxZXRoX2lwYV9tYWNfb3BzIHsKKwlDSEFOR0VfQUREUl9SRUFEX01BQwkJPSAwLAorCUNIQU5HRV9BRERSX1JFUExBQ0VfTUFDCQk9IDEsCisJQ0hBTkdFX0FERFJfQUREX01BQwkJPSAyLAorCUNIQU5HRV9BRERSX0RFTF9NQUMJCT0gNCwKKwlDSEFOR0VfQUREUl9SRVNFVF9NQUMJCT0gOCwKK307CitlbnVtIHFldGhfaXBhX2FkZHJfb3BzIHsKKwlDSEFOR0VfQUREUl9SRUFEX0FERFIJCT0gMCwKKwlDSEFOR0VfQUREUl9BRERfQUREUgkJPSAxLAorCUNIQU5HRV9BRERSX0RFTF9BRERSCQk9IDIsCisJQ0hBTkdFX0FERFJfRkxVU0hfQUREUl9UQUJMRQk9IDQsCit9OworZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIHsKKwlTRVRfUFJPTUlTQ19NT0RFX09GRgkJPSAwLAorCVNFVF9QUk9NSVNDX01PREVfT04JCT0gMSwKK307CisKKy8qIChTRVQpREVMSVAoTSkgSVBBIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBxZXRoX2lwYWNtZF9zZXRkZWxpcDQgeworCV9fdTggICBpcF9hZGRyWzRdOworCV9fdTggICBtYXNrWzRdOworCV9fdTMyICBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXA2IHsKKwlfX3U4ICAgaXBfYWRkclsxNl07CisJX191OCAgIG1hc2tbMTZdOworCV9fdTMyICBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXBtIHsKKwlfX3U4IG1hY1s2XTsKKwlfX3U4IHBhZGRpbmdbMl07CisJX191OCBpcDZbMTJdOworCV9fdTggaXA0WzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBxZXRoX2lwYWNtZF9sYXllcjJzZXRkZWxtYWMgeworCV9fdTMyIG1hY19sZW5ndGg7CisJX191OCBtYWNbNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHFldGhfaXBhY21kX2xheWVyMnNldGRlbHZsYW4geworCV9fdTE2IHZsYW5faWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YXNzcGFybXNfaGRyIHsKKwlfX3UzMiBhc3Npc3Rfbm87CisJX191MTYgbGVuZ3RoOworCV9fdTE2IGNvbW1hbmRfY29kZTsKKwlfX3UxNiByZXR1cm5fY29kZTsKKwlfX3U4IG51bWJlcl9vZl9yZXBsaWVzOworCV9fdTggc2VxX25vOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2RhdGEgeworCV9fdTE2IHJlcXVlc3RfYml0czsKKwlfX3UxNiByZXBseV9iaXRzOworCV9fdTMyIG5vX2VudHJpZXM7CisJY2hhciBkYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogdXNlZCBhcyBwYXJhbWV0ZXIgZm9yIGFycF9xdWVyeSByZXBseSAqLworc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2luZm8geworCV9fdTMyIHVkYXRhX2xlbjsKKwlfX3UxNiBtYXNrX2JpdHM7CisJX191MzIgdWRhdGFfb2Zmc2V0OworCV9fdTMyIG5vX2VudHJpZXM7CisJY2hhciAqdWRhdGE7Cit9OworCisvKiBTRVRBU1NQQVJNUyBJUEEgQ29tbWFuZDogKi8KK3N0cnVjdCBxZXRoX2lwYWNtZF9zZXRhc3NwYXJtcyB7CisJc3RydWN0IHFldGhfaXBhY21kX3NldGFzc3Bhcm1zX2hkciBoZHI7CisJdW5pb24geworCQlfX3UzMiBmbGFnc18zMmJpdDsKKwkJc3RydWN0IHFldGhfYXJwX2NhY2hlX2VudHJ5IGFkZF9hcnBfZW50cnk7CisJCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9kYXRhIHF1ZXJ5X2FycDsKKwkJX191OCBpcFsxNl07CisJfSBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyogU0VUUlRHIElQQSBDb21tYW5kOiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IHFldGhfc2V0X3JvdXRpbmcgeworCV9fdTggdHlwZTsKK307CisKKy8qIFNFVEFEQVBURVJQQVJNUyBJUEEgQ29tbWFuZDogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBxZXRoX3F1ZXJ5X2NtZHNfc3VwcCB7CisJX191MzIgbm9fbGFudHlwZXNfc3VwcDsKKwlfX3U4IGxhbl90eXBlOworCV9fdTggcmVzZXJ2ZWQxWzNdOworCV9fdTMyIHN1cHBvcnRlZF9jbWRzOworCV9fdTggcmVzZXJ2ZWQyWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBxZXRoX2NoYW5nZV9hZGRyIHsKKwlfX3UzMiBjbWQ7CisJX191MzIgYWRkcl9zaXplOworCV9fdTMyIG5vX21hY3M7CisJX191OCBhZGRyW09TQV9BRERSX0xFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgcWV0aF9zbm1wX2NtZCB7CisJX191OCAgdG9rZW5bMTZdOworCV9fdTMyIHJlcXVlc3Q7CisJX191MzIgaW50ZXJmYWNlOworCV9fdTMyIHJldHVybmNvZGU7CisJX191MzIgZmlybXdhcmVsZXZlbDsKKwlfX3UzMiBzZXFubzsKKwlfX3U4ICBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBxZXRoX3NubXBfdXJlcV9oZHIgeworCV9fdTMyICAgZGF0YV9sZW47CisJX191MzIgICByZXFfbGVuOworCV9fdTMyICAgcmVzZXJ2ZWQxOworCV9fdTMyICAgcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBxZXRoX3NubXBfdXJlcSB7CisJc3RydWN0IHFldGhfc25tcF91cmVxX2hkciBoZHI7CisJc3RydWN0IHFldGhfc25tcF9jbWQgY21kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zX2hkciB7CisJX191MzIgc3VwcF9od19jbWRzOworCV9fdTMyIHJlc2VydmVkMTsKKwlfX3UxNiBjbWRsZW5ndGg7CisJX191MTYgcmVzZXJ2ZWQyOworCV9fdTMyIGNvbW1hbmRfY29kZTsKKwlfX3UxNiByZXR1cm5fY29kZTsKKwlfX3U4ICB1c2VkX3RvdGFsOworCV9fdTggIHNlcV9ubzsKKwlfX3UzMiByZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zIHsKKwlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyIGhkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCBxZXRoX3F1ZXJ5X2NtZHNfc3VwcCBxdWVyeV9jbWRzX3N1cHA7CisJCXN0cnVjdCBxZXRoX2NoYW5nZV9hZGRyIGNoYW5nZV9hZGRyOworCQlzdHJ1Y3QgcWV0aF9zbm1wX2NtZCBzbm1wOworCQlfX3UzMiBtb2RlOworCX0gZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBDUkVBVEVfQUREUiBJUEEgQ29tbWFuZDogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgcWV0aF9jcmVhdGVfZGVzdHJveV9hZGRyZXNzIHsKKwlfX3U4IHVuaXF1ZV9pZFs4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBIZWFkZXIgZm9yIGVhY2ggSVBBIGNvbW1hbmQgKi8KK3N0cnVjdCBxZXRoX2lwYWNtZF9oZHIgeworCV9fdTggICBjb21tYW5kOworCV9fdTggICBpbml0aWF0b3I7CisJX191MTYgIHNlcW5vOworCV9fdTE2ICByZXR1cm5fY29kZTsKKwlfX3U4ICAgYWRhcHRlcl90eXBlOworCV9fdTggICByZWxfYWRhcHRlcl9ubzsKKwlfX3U4ICAgcHJpbV92ZXJzaW9uX25vOworCV9fdTggICBwYXJhbV9jb3VudDsKKwlfX3UxNiAgcHJvdF92ZXJzaW9uOworCV9fdTMyICBpcGFfc3VwcG9ydGVkOworCV9fdTMyICBpcGFfZW5hYmxlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBUaGUgSVBBIGNvbW1hbmQgaXRzZWxmICovCitzdHJ1Y3QgcWV0aF9pcGFfY21kIHsKKwlzdHJ1Y3QgcWV0aF9pcGFjbWRfaGRyIGhkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRkZWxpcDQJCXNldGRlbGlwNDsKKwkJc3RydWN0IHFldGhfaXBhY21kX3NldGRlbGlwNgkJc2V0ZGVsaXA2OworCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXBtCQlzZXRkZWxpcG07CisJCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhc3NwYXJtcwkJc2V0YXNzcGFybXM7CisJCXN0cnVjdCBxZXRoX2lwYWNtZF9sYXllcjJzZXRkZWxtYWMJc2V0ZGVsbWFjOworCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfbGF5ZXIyc2V0ZGVsdmxhbglzZXRkZWx2bGFuOworCQlzdHJ1Y3QgcWV0aF9jcmVhdGVfZGVzdHJveV9hZGRyZXNzCWNyZWF0ZV9kZXN0cm95X2FkZHI7CisJCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcwkJc2V0YWRhcHRlcnBhcm1zOworCQlzdHJ1Y3QgcWV0aF9zZXRfcm91dGluZwkJCXNldHJ0ZzsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIHNwZWNpYWwgY29tbWFuZCBmb3IgQVJQIHByb2Nlc3NpbmcuCisgKiB0aGlzIGlzIG5vdCBpbmNsdWRlZCBpbiBzZXRhc3NwYXJtcyBjb21tYW5kIGJlZm9yZSwgYmVjYXVzZSB3ZSBnZXQKKyAqIHByb2JsZW0gd2l0aCB0aGUgc2l6ZSBvZiBzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YXNzcGFybXMgb3RoZXJ3aXNlCisgKi8KK2VudW0gcWV0aF9pcGFfYXJwX3JldHVybl9jb2RlcyB7CisJUUVUSF9JUEFfQVJQX1JDX1NVQ0NFU1MgICAgICA9IDB4MDAwMCwKKwlRRVRIX0lQQV9BUlBfUkNfRkFJTEVEICAgICAgID0gMHgwMDAxLAorCVFFVEhfSVBBX0FSUF9SQ19OT1RTVVBQICAgICAgPSAweDAwMDIsCisJUUVUSF9JUEFfQVJQX1JDX09VVF9PRl9SQU5HRSA9IDB4MDAwMywKKwlRRVRIX0lQQV9BUlBfUkNfUV9OT1RTVVBQICAgID0gMHgwMDA0LAorCVFFVEhfSVBBX0FSUF9SQ19RX05PX0RBVEEgICAgPSAweDAwMDgsCit9OworCisKK2V4dGVybiBjaGFyICpxZXRoX2dldF9pcGFfbXNnKGVudW0gcWV0aF9pcGFfcmV0dXJuX2NvZGVzIHJjKTsKK2V4dGVybiBjaGFyICpxZXRoX2dldF9pcGFfY21kX25hbWUoZW51bSBxZXRoX2lwYV9jbWRzIGNtZCk7CisKKyNkZWZpbmUgUUVUSF9TRVRBU1NfQkFTRV9MRU4gKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfaGRyKSArIFwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFzc3Bhcm1zX2hkcikpCisjZGVmaW5lIFFFVEhfSVBBX0FSUF9EQVRBX1BPUyhidWZmZXIpIChidWZmZXIgKyBJUEFfUERVX0hFQURFUl9TSVpFICsgXAorCQkJCSAgICAgICBRRVRIX1NFVEFTU19CQVNFX0xFTikKKyNkZWZpbmUgUUVUSF9TRVRBRFBfQkFTRV9MRU4gKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfaGRyKSArIFwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSkKKyNkZWZpbmUgUUVUSF9TTk1QX1NFVEFEUF9DTURMRU5HVEggMTYKKworI2RlZmluZSBRRVRIX0FSUF9EQVRBX1NJWkUgMzk2OAorI2RlZmluZSBRRVRIX0FSUF9DTURfTEVOIChRRVRIX0FSUF9EQVRBX1NJWkUgKyA4KQorLyogSGVscGVyIGZ1bmN0aW9ucyAqLworI2RlZmluZSBJU19JUEFfUkVQTFkoY21kKSAoKGNtZC0+aGRyLmluaXRpYXRvciA9PSBJUEFfQ01EX0lOSVRJQVRPUl9IT1NUKSB8fCBcCisJCQkgICAoY21kLT5oZHIuaW5pdGlhdG9yID09IElQQV9DTURfSU5JVElBVE9SX09TQV9SRVBMWSkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVORCBPRiAgIElQIEFzc2lzdCByZWxhdGVkIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitleHRlcm4gdW5zaWduZWQgY2hhciBXUklURV9DQ1dbXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIFJFQURfQ0NXW107CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIENNX0VOQUJMRVtdOworI2RlZmluZSBDTV9FTkFCTEVfU0laRSAweDYzCisjZGVmaW5lIFFFVEhfQ01fRU5BQkxFX0lTU1VFUl9STV9UT0tFTihidWZmZXIpIChidWZmZXIgKyAweDJjKQorI2RlZmluZSBRRVRIX0NNX0VOQUJMRV9GSUxURVJfVE9LRU4oYnVmZmVyKSAoYnVmZmVyICsgMHg1MykKKyNkZWZpbmUgUUVUSF9DTV9FTkFCTEVfVVNFUl9EQVRBKGJ1ZmZlcikgKGJ1ZmZlciArIDB4NWIpCisKKyNkZWZpbmUgUUVUSF9DTV9FTkFCTEVfUkVTUF9GSUxURVJfVE9LRU4oYnVmZmVyKSBcCisJCShQRFVfRU5DQVBTVUxBVElPTihidWZmZXIpICsgMHgxMykKKworCitleHRlcm4gdW5zaWduZWQgY2hhciBDTV9TRVRVUFtdOworI2RlZmluZSBDTV9TRVRVUF9TSVpFIDB4NjQKKyNkZWZpbmUgUUVUSF9DTV9TRVRVUF9ERVNUX0FERFIoYnVmZmVyKSAoYnVmZmVyICsgMHgyYykKKyNkZWZpbmUgUUVUSF9DTV9TRVRVUF9DT05ORUNUSU9OX1RPS0VOKGJ1ZmZlcikgKGJ1ZmZlciArIDB4NTEpCisjZGVmaW5lIFFFVEhfQ01fU0VUVVBfRklMVEVSX1RPS0VOKGJ1ZmZlcikgKGJ1ZmZlciArIDB4NWEpCisKKyNkZWZpbmUgUUVUSF9DTV9TRVRVUF9SRVNQX0RFU1RfQUREUihidWZmZXIpIFwKKwkJKFBEVV9FTkNBUFNVTEFUSU9OKGJ1ZmZlcikgKyAweDFhKQorCitleHRlcm4gdW5zaWduZWQgY2hhciBVTFBfRU5BQkxFW107CisjZGVmaW5lIFVMUF9FTkFCTEVfU0laRSAweDZiCisjZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9MSU5LTlVNKGJ1ZmZlcikgKGJ1ZmZlciArIDB4NjEpCisjZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9ERVNUX0FERFIoYnVmZmVyKSAoYnVmZmVyICsgMHgyYykKKyNkZWZpbmUgUUVUSF9VTFBfRU5BQkxFX0ZJTFRFUl9UT0tFTihidWZmZXIpIChidWZmZXIgKyAweDUzKQorI2RlZmluZSBRRVRIX1VMUF9FTkFCTEVfUE9SVE5BTUVfQU5EX0xMKGJ1ZmZlcikgKGJ1ZmZlciArIDB4NjIpCisjZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9SRVNQX0ZJTFRFUl9UT0tFTihidWZmZXIpIFwKKwkJKFBEVV9FTkNBUFNVTEFUSU9OKGJ1ZmZlcikgKyAweDEzKQorI2RlZmluZSBRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKGJ1ZmZlcikgXAorCQkoUERVX0VOQ0FQU1VMQVRJT04oYnVmZmVyKSArIDB4MWYpCisjZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9SRVNQX0RJRklORk9fTEVOKGJ1ZmZlcikgXAorCQkoUERVX0VOQ0FQU1VMQVRJT04oYnVmZmVyKSArIDB4MTcpCisjZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9SRVNQX0xJTktfVFlQRShidWZmZXIpIFwKKwkJKFBEVV9FTkNBUFNVTEFUSU9OKGJ1ZmZlcikgKyAweDJiKQorLyogTGF5ZXIgMiBkZWZpbnRpb25zICovCisjZGVmaW5lIFFFVEhfUFJPVF9MQVlFUjIgMHgwOAorI2RlZmluZSBRRVRIX1BST1RfVENQSVAgIDB4MDMKKyNkZWZpbmUgUUVUSF9QUk9UX09TTjIgICAweDBhCisjZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9QUk9UX1RZUEUoYnVmZmVyKSAoYnVmZmVyICsgMHg1MCkKKyNkZWZpbmUgUUVUSF9JUEFfQ01EX1BST1RfVFlQRShidWZmZXIpIChidWZmZXIgKyAweDE5KQorCitleHRlcm4gdW5zaWduZWQgY2hhciBVTFBfU0VUVVBbXTsKKyNkZWZpbmUgVUxQX1NFVFVQX1NJWkUgMHg2YworI2RlZmluZSBRRVRIX1VMUF9TRVRVUF9ERVNUX0FERFIoYnVmZmVyKSAoYnVmZmVyICsgMHgyYykKKyNkZWZpbmUgUUVUSF9VTFBfU0VUVVBfQ09OTkVDVElPTl9UT0tFTihidWZmZXIpIChidWZmZXIgKyAweDUxKQorI2RlZmluZSBRRVRIX1VMUF9TRVRVUF9GSUxURVJfVE9LRU4oYnVmZmVyKSAoYnVmZmVyICsgMHg1YSkKKyNkZWZpbmUgUUVUSF9VTFBfU0VUVVBfQ1VBKGJ1ZmZlcikgKGJ1ZmZlciArIDB4NjgpCisjZGVmaW5lIFFFVEhfVUxQX1NFVFVQX1JFQUxfREVWQUREUihidWZmZXIpIChidWZmZXIgKyAweDZhKQorCisjZGVmaW5lIFFFVEhfVUxQX1NFVFVQX1JFU1BfQ09OTkVDVElPTl9UT0tFTihidWZmZXIpIFwKKwkJKFBEVV9FTkNBUFNVTEFUSU9OKGJ1ZmZlcikgKyAweDFhKQorCisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIERNX0FDVFtdOworI2RlZmluZSBETV9BQ1RfU0laRSAweDU1CisjZGVmaW5lIFFFVEhfRE1fQUNUX0RFU1RfQUREUihidWZmZXIpIChidWZmZXIgKyAweDJjKQorI2RlZmluZSBRRVRIX0RNX0FDVF9DT05ORUNUSU9OX1RPS0VOKGJ1ZmZlcikgKGJ1ZmZlciArIDB4NTEpCisKKworCisjZGVmaW5lIFFFVEhfVFJBTlNQT1JUX0hFQURFUl9TRVFfTk8oYnVmZmVyKSAoYnVmZmVyICsgNCkKKyNkZWZpbmUgUUVUSF9QRFVfSEVBREVSX1NFUV9OTyhidWZmZXIpIChidWZmZXIgKyAweDFjKQorI2RlZmluZSBRRVRIX1BEVV9IRUFERVJfQUNLX1NFUV9OTyhidWZmZXIpIChidWZmZXIgKyAweDIwKQorCitleHRlcm4gdW5zaWduZWQgY2hhciBJRFhfQUNUSVZBVEVfUkVBRFtdOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgSURYX0FDVElWQVRFX1dSSVRFW107CisKKyNkZWZpbmUgSURYX0FDVElWQVRFX1NJWkUJMHgyMgorI2RlZmluZSBRRVRIX0lEWF9BQ1RfUE5PKGJ1ZmZlcikgKGJ1ZmZlcisweDBiKQorI2RlZmluZSBRRVRIX0lEWF9BQ1RfSVNTVUVSX1JNX1RPS0VOKGJ1ZmZlcikgKGJ1ZmZlciArIDB4MGMpCisjZGVmaW5lIFFFVEhfSURYX05PX1BPUlROQU1FX1JFUVVJUkVEKGJ1ZmZlcikgKChidWZmZXIpWzB4MGJdICYgMHg4MCkKKyNkZWZpbmUgUUVUSF9JRFhfQUNUX0ZVTkNfTEVWRUwoYnVmZmVyKSAoYnVmZmVyICsgMHgxMCkKKyNkZWZpbmUgUUVUSF9JRFhfQUNUX0RBVEFTRVRfTkFNRShidWZmZXIpIChidWZmZXIgKyAweDE2KQorI2RlZmluZSBRRVRIX0lEWF9BQ1RfUURJT19ERVZfQ1VBKGJ1ZmZlcikgKGJ1ZmZlciArIDB4MWUpCisjZGVmaW5lIFFFVEhfSURYX0FDVF9RRElPX0RFVl9SRUFMQUREUihidWZmZXIpIChidWZmZXIgKyAweDIwKQorI2RlZmluZSBRRVRIX0lTX0lEWF9BQ1RfUE9TX1JFUExZKGJ1ZmZlcikgKCgoYnVmZmVyKVsweDA4XSAmIDMpID09IDIpCisjZGVmaW5lIFFFVEhfSURYX1JFUExZX0xFVkVMKGJ1ZmZlcikgKGJ1ZmZlciArIDB4MTIpCisjZGVmaW5lIFFFVEhfSURYX0FDVF9DQVVTRV9DT0RFKGJ1ZmZlcikgKGJ1ZmZlcilbMHgwOV0KKworI2RlZmluZSBQRFVfRU5DQVBTVUxBVElPTihidWZmZXIpIFwKKwkoYnVmZmVyICsgKihidWZmZXIgKyAoKihidWZmZXIgKyAweDBiKSkgKyBcCisJICooYnVmZmVyICsgKihidWZmZXIgKyAweDBiKSArIDB4MTEpICsgMHgwNykpCisKKyNkZWZpbmUgSVNfSVBBKGJ1ZmZlcikgXAorCSgoYnVmZmVyKSAmJiBcCisJICgqKGJ1ZmZlciArICgoKihidWZmZXIgKyAweDBiKSkgKyA0KSkgPT0gMHhjMSkpCisKKyNkZWZpbmUgQUREUl9GUkFNRV9UWVBFX0RJWCAxCisjZGVmaW5lIEFERFJfRlJBTUVfVFlQRV84MDJfMyAyCisjZGVmaW5lIEFERFJfRlJBTUVfVFlQRV9UUl9XSVRIT1VUX1NSIDB4MTAKKyNkZWZpbmUgQUREUl9GUkFNRV9UWVBFX1RSX1dJVEhfU1IgMHgyMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJkZjgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCkBAIC0wLDAgKzEsNzAxIEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYworICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNworICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAorICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisKKyNpbmNsdWRlICJxZXRoX2NvcmUuaCIKKyNpbmNsdWRlICJxZXRoX2NvcmVfbXBjLmgiCisjaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKKworaW50IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAorCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKKwlpbnQgZWxlbWVudHNfbmVlZGVkID0gY3R4LT5udW1fZWxlbWVudHM7CisJaW50IGVsZW1lbnRzX2luX2J1ZmZlcjsKKwlpbnQgc2tic19pbl9idWZmZXI7CisJaW50IGJ1ZmZlcnNfbmVlZGVkID0gMDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2JmYyIpOworCXdoaWxlIChlbGVtZW50c19uZWVkZWQgPiAwKSB7CisJCWJ1ZmZlcnNfbmVlZGVkKys7CisJCWlmIChhdG9taWNfcmVhZCgmcXVldWUtPmJ1ZnNbaW5kZXhdLnN0YXRlKSAhPQorCQkJCVFFVEhfUURJT19CVUZfRU1QVFkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCWVsZW1lbnRzX2luX2J1ZmZlciA9IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkgLQorCQkJCSAgICAgcXVldWUtPmJ1ZnNbaW5kZXhdLm5leHRfZWxlbWVudF90b19maWxsOworCQlza2JzX2luX2J1ZmZlciA9IGVsZW1lbnRzX2luX2J1ZmZlciAvIGN0eC0+ZWxlbWVudHNfcGVyX3NrYjsKKwkJZWxlbWVudHNfbmVlZGVkIC09IHNrYnNfaW5fYnVmZmVyICogY3R4LT5lbGVtZW50c19wZXJfc2tiOworCQlpbmRleCA9IChpbmRleCArIDEpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKKwl9CisJcmV0dXJuIGJ1ZmZlcnNfbmVlZGVkOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2VkZHBfZnJlZV9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQoreworCWludCBpOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmY3R4Iik7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX3BhZ2VzOyArK2kpCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljdHgtPnBhZ2VzW2ldKTsKKwlrZnJlZShjdHgtPnBhZ2VzKTsKKwlrZnJlZShjdHgtPmVsZW1lbnRzKTsKKwlrZnJlZShjdHgpOworfQorCisKK3N0YXRpYyB2b2lkIHFldGhfZWRkcF9nZXRfY29udGV4dChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKK3sKKwlhdG9taWNfaW5jKCZjdHgtPnJlZmNudCk7Cit9CisKK3ZvaWQgcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQoreworCWlmIChhdG9taWNfZGVjX3JldHVybigmY3R4LT5yZWZjbnQpID09IDApCisJCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfZWRkcF9wdXRfY29udGV4dCk7CisKK3ZvaWQgcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgKnJlZjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJlZGRwcmN0eCIpOworCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5jdHhfbGlzdCkpIHsKKwkJcmVmID0gbGlzdF9lbnRyeShidWYtPmN0eF9saXN0Lm5leHQsCisJCQkJIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UsIGxpc3QpOworCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQocmVmLT5jdHgpOworCQlsaXN0X2RlbCgmcmVmLT5saXN0KTsKKwkJa2ZyZWUocmVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9lZGRwX2J1Zl9yZWZfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiwKKwkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImVkZHByZmN4Iik7CisJcmVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSksIEdGUF9BVE9NSUMpOworCWlmIChyZWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcWV0aF9lZGRwX2dldF9jb250ZXh0KGN0eCk7CisJcmVmLT5jdHggPSBjdHg7CisJbGlzdF9hZGRfdGFpbCgmcmVmLT5saXN0LCAmYnVmLT5jdHhfbGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBxZXRoX2VkZHBfZmlsbF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCisJCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYgPSBOVUxMOworCXN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmZmVyOworCWludCBlbGVtZW50cyA9IGN0eC0+bnVtX2VsZW1lbnRzOworCWludCBlbGVtZW50ID0gMDsKKwlpbnQgZmx1c2hfY250ID0gMDsKKwlpbnQgbXVzdF9yZWZjbnQgPSAxOworCWludCBpOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmaWJ1Iik7CisJd2hpbGUgKGVsZW1lbnRzID4gMCkgeworCQlidWYgPSAmcXVldWUtPmJ1ZnNbaW5kZXhdOworCQlpZiAoYXRvbWljX3JlYWQoJmJ1Zi0+c3RhdGUpICE9IFFFVEhfUURJT19CVUZfRU1QVFkpIHsKKwkJCS8qIG5vcm1hbGx5IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2Ugd2UgY2hlY2tlZCBmb3IKKwkJCSAqIGF2YWlsYWJsZSBlbGVtZW50cyBpbiBxZXRoX2NoZWNrX2VsZW1lbnRzX2Zvcl9jb250ZXh0CisJCQkgKi8KKwkJCWlmIChlbGVtZW50ID09IDApCisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWVsc2UgeworCQkJCVBSSU5UX1dBUk4oImNvdWxkIG9ubHkgcGFydGlhbGx5IGZpbGwgZWRkcCAiCisJCQkJCSAgICJidWZmZXIhXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQkvKiBjaGVjayBpZiB0aGUgd2hvbGUgbmV4dCBza2IgZml0cyBpbnRvIGN1cnJlbnQgYnVmZmVyICovCisJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCisJCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwpCisJCQkJPCBjdHgtPmVsZW1lbnRzX3Blcl9za2IpeworCQkJLyogbm8gLT4gZ28gdG8gbmV4dCBidWZmZXIgKi8KKwkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKKwkJCWluZGV4ID0gKGluZGV4ICsgMSkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCQkJZmx1c2hfY250Kys7CisJCQkvKiBuZXcgYnVmZmVyLCBzbyB3ZSBoYXZlIHRvIGFkZCBjdHggdG8gYnVmZmVyJ2N0eF9saXN0CisJCQkgKiBhbmQgaW5jcmVtZW50IGN0eCdzIHJlZmNudCAqLworCQkJbXVzdF9yZWZjbnQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG11c3RfcmVmY250KSB7CisJCQltdXN0X3JlZmNudCA9IDA7CisJCQlpZiAocWV0aF9lZGRwX2J1Zl9yZWZfY29udGV4dChidWYsIGN0eCkpIHsKKwkJCQlQUklOVF9XQVJOKCJubyBtZW1vcnkgdG8gY3JlYXRlIGVkZHAgY29udGV4dCAiCisJCQkJCSAgICJyZWZlcmVuY2VcbiIpOworCQkJCWdvdG8gb3V0X2NoZWNrOworCQkJfQorCQl9CisJCWJ1ZmZlciA9IGJ1Zi0+YnVmZmVyOworCQkvKiBmaWxsIG9uZSBza2IgaW50byBidWZmZXIgKi8KKwkJZm9yIChpID0gMDsgaSA8IGN0eC0+ZWxlbWVudHNfcGVyX3NrYjsgKytpKSB7CisJCQlpZiAoY3R4LT5lbGVtZW50c1tlbGVtZW50XS5sZW5ndGggIT0gMCkgeworCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KKwkJCQlhZGRyID0gY3R4LT5lbGVtZW50c1tlbGVtZW50XS5hZGRyOworCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KKwkJCQlsZW5ndGggPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmxlbmd0aDsKKwkJCQlidWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbF0uCisJCQkJZmxhZ3MgPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmZsYWdzOworCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKKwkJCX0KKwkJCWVsZW1lbnQrKzsKKwkJCWVsZW1lbnRzLS07CisJCX0KKwl9CitvdXRfY2hlY2s6CisJaWYgKCFxdWV1ZS0+ZG9fcGFjaykgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZmlsbGJmbnAiKTsKKwkJLyogc2V0IHN0YXRlIHRvIFBSSU1FRCAtPiB3aWxsIGJlIGZsdXNoZWQgKi8KKwkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPiAwKSB7CisJCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7CisJCQlmbHVzaF9jbnQrKzsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrKys7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsYmZwYSIpOworCQlpZiAoYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+PQorCQkJCVFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkpIHsKKwkJCS8qCisJCQkgKiBwYWNrZWQgYnVmZmVyIGlmIGZ1bGwgLT4gc2V0IHN0YXRlIFBSSU1FRAorCQkJICogLT4gd2lsbCBiZSBmbHVzaGVkCisJCQkgKi8KKwkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKKwkJCWZsdXNoX2NudCsrOworCQl9CisJfQorb3V0OgorCXJldHVybiBmbHVzaF9jbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9oZHJzKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAorCQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbikKK3sKKwl1OCAqcGFnZTsKKwlpbnQgcGFnZV9yZW1haW5kZXI7CisJaW50IHBhZ2Vfb2Zmc2V0OworCWludCBwa3RfbGVuOworCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3JzaCIpOworCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOworCXBhZ2Vfb2Zmc2V0ID0gY3R4LT5vZmZzZXQgJSBQQUdFX1NJWkU7CisJZWxlbWVudCA9ICZjdHgtPmVsZW1lbnRzW2N0eC0+bnVtX2VsZW1lbnRzXTsKKwlwa3RfbGVuID0gZWRkcC0+bmhsICsgZWRkcC0+dGhsICsgZGF0YV9sZW47CisJLyogRklYTUU6IGxheWVyMiBhbmQgVkxBTiAhISEgKi8KKwlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKQorCQlwa3RfbGVuICs9IEVUSF9ITEVOOworCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKKwkJcGt0X2xlbiArPSBWTEFOX0hMRU47CisJLyogZG9lcyBjb21wbGV0ZSBwYWNrZXQgZml0IGluIGN1cnJlbnQgcGFnZSA/ICovCisJcGFnZV9yZW1haW5kZXIgPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKKwlpZiAocGFnZV9yZW1haW5kZXIgPCAoc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBwa3RfbGVuKSkgeworCQkvKiBubyAtPiBnbyB0byBzdGFydCBvZiBuZXh0IHBhZ2UgKi8KKwkJY3R4LT5vZmZzZXQgKz0gcGFnZV9yZW1haW5kZXI7CisJCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOworCQlwYWdlX29mZnNldCA9IDA7CisJfQorCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5xaCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOworCWVsZW1lbnQtPmFkZHIgPSBwYWdlICsgcGFnZV9vZmZzZXQ7CisJZWxlbWVudC0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7CisJY3R4LT5vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7CisJcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7CisJLyogYWRkIG1hYyBoZWFkZXIgKD8pICovCisJaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgeworCQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAmZWRkcC0+bWFjLCBFVEhfSExFTik7CisJCWVsZW1lbnQtPmxlbmd0aCArPSBFVEhfSExFTjsKKwkJY3R4LT5vZmZzZXQgKz0gRVRIX0hMRU47CisJCXBhZ2Vfb2Zmc2V0ICs9IEVUSF9ITEVOOworCX0KKwkvKiBhZGQgVkxBTiB0YWcgKi8KKwlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgJmVkZHAtPnZsYW4sIFZMQU5fSExFTik7CisJCWVsZW1lbnQtPmxlbmd0aCArPSBWTEFOX0hMRU47CisJCWN0eC0+b2Zmc2V0ICs9IFZMQU5fSExFTjsKKwkJcGFnZV9vZmZzZXQgKz0gVkxBTl9ITEVOOworCX0KKwkvKiBhZGQgbmV0d29yayBoZWFkZXIgKi8KKwltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAodTggKikmZWRkcC0+bmgsIGVkZHAtPm5obCk7CisJZWxlbWVudC0+bGVuZ3RoICs9IGVkZHAtPm5obDsKKwllZGRwLT5uaF9pbl9jdHggPSBwYWdlICsgcGFnZV9vZmZzZXQ7CisJY3R4LT5vZmZzZXQgKz0gZWRkcC0+bmhsOworCXBhZ2Vfb2Zmc2V0ICs9IGVkZHAtPm5obDsKKwkvKiBhZGQgdHJhbnNwb3J0IGhlYWRlciAqLworCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICh1OCAqKSZlZGRwLT50aCwgZWRkcC0+dGhsKTsKKwllbGVtZW50LT5sZW5ndGggKz0gZWRkcC0+dGhsOworCWVkZHAtPnRoX2luX2N0eCA9IHBhZ2UgKyBwYWdlX29mZnNldDsKKwljdHgtPm9mZnNldCArPSBlZGRwLT50aGw7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKGNoYXIgKmRzdCwgc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAorCQlpbnQgbGVuLCBfX3dzdW0gKmhjc3VtKQoreworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7CisJaW50IGxlZnRfaW5fZnJhZzsKKwlpbnQgY29weV9sZW47CisJdTggKnNyYzsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2R0YyIpOworCWlmIChza2Jfc2hpbmZvKGVkZHAtPnNrYiktPm5yX2ZyYWdzID09IDApIHsKKwkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoZWRkcC0+c2tiLCBlZGRwLT5za2Jfb2Zmc2V0LAorCQkJCQkJIGRzdCwgbGVuKTsKKwkJKmhjc3VtID0gY3N1bV9wYXJ0aWFsKGVkZHAtPnNrYi0+ZGF0YSArIGVkZHAtPnNrYl9vZmZzZXQsIGxlbiwKKwkJCQkgICAgICAqaGNzdW0pOworCQllZGRwLT5za2Jfb2Zmc2V0ICs9IGxlbjsKKwl9IGVsc2UgeworCQl3aGlsZSAobGVuID4gMCkgeworCQkJaWYgKGVkZHAtPmZyYWcgPCAwKSB7CisJCQkJLyogd2UncmUgaW4gc2tiLT5kYXRhICovCisJCQkJbGVmdF9pbl9mcmFnID0gKGVkZHAtPnNrYi0+bGVuIC0KKwkJCQkJCWVkZHAtPnNrYi0+ZGF0YV9sZW4pCisJCQkJCQktIGVkZHAtPnNrYl9vZmZzZXQ7CisJCQkJc3JjID0gZWRkcC0+c2tiLT5kYXRhICsgZWRkcC0+c2tiX29mZnNldDsKKwkJCX0gZWxzZSB7CisJCQkJZnJhZyA9ICZza2Jfc2hpbmZvKGVkZHAtPnNrYiktPmZyYWdzWworCQkJCQllZGRwLT5mcmFnXTsKKwkJCQlsZWZ0X2luX2ZyYWcgPSBmcmFnLT5zaXplIC0gZWRkcC0+ZnJhZ19vZmZzZXQ7CisJCQkJc3JjID0gKHU4ICopKChwYWdlX3RvX3BmbihmcmFnLT5wYWdlKSA8PAorCQkJCQlQQUdFX1NISUZUKSArIGZyYWctPnBhZ2Vfb2Zmc2V0ICsKKwkJCQkJZWRkcC0+ZnJhZ19vZmZzZXQpOworCQkJfQorCQkJaWYgKGxlZnRfaW5fZnJhZyA8PSAwKSB7CisJCQkJZWRkcC0+ZnJhZysrOworCQkJCWVkZHAtPmZyYWdfb2Zmc2V0ID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNvcHlfbGVuID0gbWluKGxlZnRfaW5fZnJhZywgbGVuKTsKKwkJCW1lbWNweShkc3QsIHNyYywgY29weV9sZW4pOworCQkJKmhjc3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgY29weV9sZW4sICpoY3N1bSk7CisJCQlkc3QgKz0gY29weV9sZW47CisJCQllZGRwLT5mcmFnX29mZnNldCArPSBjb3B5X2xlbjsKKwkJCWVkZHAtPnNrYl9vZmZzZXQgKz0gY29weV9sZW47CisJCQlsZW4gLT0gY29weV9sZW47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLCBpbnQgZGF0YV9sZW4sIF9fd3N1bSBoY3N1bSkKK3sKKwl1OCAqcGFnZTsKKwlpbnQgcGFnZV9yZW1haW5kZXI7CisJaW50IHBhZ2Vfb2Zmc2V0OworCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudDsKKwlpbnQgZmlyc3RfbGFwID0gMTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3NkdCIpOworCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOworCXBhZ2Vfb2Zmc2V0ID0gY3R4LT5vZmZzZXQgJSBQQUdFX1NJWkU7CisJZWxlbWVudCA9ICZjdHgtPmVsZW1lbnRzW2N0eC0+bnVtX2VsZW1lbnRzXTsKKwl3aGlsZSAoZGF0YV9sZW4pIHsKKwkJcGFnZV9yZW1haW5kZXIgPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKKwkJaWYgKHBhZ2VfcmVtYWluZGVyIDwgZGF0YV9sZW4pIHsKKwkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKKwkJCQkJCXBhZ2VfcmVtYWluZGVyLCAmaGNzdW0pOworCQkJZWxlbWVudC0+bGVuZ3RoICs9IHBhZ2VfcmVtYWluZGVyOworCQkJaWYgKGZpcnN0X2xhcCkKKwkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJCWVsc2UKKwkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7CisJCQljdHgtPm51bV9lbGVtZW50cysrOworCQkJZWxlbWVudCsrOworCQkJZGF0YV9sZW4gLT0gcGFnZV9yZW1haW5kZXI7CisJCQljdHgtPm9mZnNldCArPSBwYWdlX3JlbWFpbmRlcjsKKwkJCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOworCQkJcGFnZV9vZmZzZXQgPSAwOworCQkJZWxlbWVudC0+YWRkciA9IHBhZ2UgKyBwYWdlX29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKKwkJCQkJCWRhdGFfbGVuLCAmaGNzdW0pOworCQkJZWxlbWVudC0+bGVuZ3RoICs9IGRhdGFfbGVuOworCQkJaWYgKCFmaXJzdF9sYXApCisJCQkJZWxlbWVudC0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKKwkJCWN0eC0+bnVtX2VsZW1lbnRzKys7CisJCQljdHgtPm9mZnNldCArPSBkYXRhX2xlbjsKKwkJCWRhdGFfbGVuID0gMDsKKwkJfQorCQlmaXJzdF9sYXAgPSAwOworCX0KKwkoKHN0cnVjdCB0Y3BoZHIgKillZGRwLT50aF9pbl9jdHgpLT5jaGVjayA9IGNzdW1fZm9sZChoY3N1bSk7Cit9CisKK3N0YXRpYyBfX3dzdW0gcWV0aF9lZGRwX2NoZWNrX3RjcDRfaGRyKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwKKwkJaW50IGRhdGFfbGVuKQoreworCV9fd3N1bSBwaGNzdW07IC8qIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2t0NCIpOworCWVkZHAtPnRoLnRjcC5oLmNoZWNrID0gMDsKKwkvKiBjb21wdXRlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KKwlwaGNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoZWRkcC0+bmguaXA0Lmguc2FkZHIsIGVkZHAtPm5oLmlwNC5oLmRhZGRyLAorCQkJCSAgICBlZGRwLT50aGwgKyBkYXRhX2xlbiwgSVBQUk9UT19UQ1AsIDApOworCS8qIGNvbXB1dGUgY2hlY2tzdW0gb2YgdGNwIGhlYWRlciAqLworCXJldHVybiBjc3VtX3BhcnRpYWwoKHU4ICopJmVkZHAtPnRoLCBlZGRwLT50aGwsIHBoY3N1bSk7Cit9CisKK3N0YXRpYyBfX3dzdW0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwKKwkJaW50IGRhdGFfbGVuKQoreworCV9fYmUzMiBwcm90bzsKKwlfX3dzdW0gcGhjc3VtOyAvKiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNrdDYiKTsKKwllZGRwLT50aC50Y3AuaC5jaGVjayA9IDA7CisJLyogY29tcHV0ZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCisJcGhjc3VtID0gY3N1bV9wYXJ0aWFsKCh1OCAqKSZlZGRwLT5uaC5pcDYuaC5zYWRkciwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCAwKTsKKwlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoKHU4ICopJmVkZHAtPm5oLmlwNi5oLmRhZGRyLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIHBoY3N1bSk7CisJcHJvdG8gPSBodG9ubChJUFBST1RPX1RDUCk7CisJcGhjc3VtID0gY3N1bV9wYXJ0aWFsKCh1OCAqKSZwcm90bywgc2l6ZW9mKHUzMiksIHBoY3N1bSk7CisJcmV0dXJuIHBoY3N1bTsKK30KKworc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEoc3RydWN0IHFldGhfaGRyICpxaCwKKwkJdTggKm5oLCB1OCBuaGwsIHU4ICp0aCwgdTggdGhsKQoreworCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY3JkYSIpOworCWVkZHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEpLCBHRlBfQVRPTUlDKTsKKwlpZiAoZWRkcCkgeworCQllZGRwLT5uaGwgPSBuaGw7CisJCWVkZHAtPnRobCA9IHRobDsKKwkJbWVtY3B5KCZlZGRwLT5xaCwgcWgsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKKwkJbWVtY3B5KCZlZGRwLT5uaCwgbmgsIG5obCk7CisJCW1lbWNweSgmZWRkcC0+dGgsIHRoLCB0aGwpOworCQllZGRwLT5mcmFnID0gLTE7IC8qIGluaXRpYWxseSB3ZSdyZSBpbiBza2ItPmRhdGEgKi8KKwl9CisJcmV0dXJuIGVkZHA7Cit9CisKK3N0YXRpYyB2b2lkIF9fcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCisJCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCkKK3sKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoOworCWludCBkYXRhX2xlbjsKKwlfX3dzdW0gaGNzdW07CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZ0Y3AiKTsKKwllZGRwLT5za2Jfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBlZGRwLT5uaGwgKyBlZGRwLT50aGw7CisJaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgeworCQllZGRwLT5za2Jfb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKTsKKwkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQorCQkJZWRkcC0+c2tiX29mZnNldCArPSBWTEFOX0hMRU47CisJfQorCXRjcGggPSB0Y3BfaGRyKGVkZHAtPnNrYik7CisJd2hpbGUgKGVkZHAtPnNrYl9vZmZzZXQgPCBlZGRwLT5za2ItPmxlbikgeworCQlkYXRhX2xlbiA9IG1pbigoaW50KXNrYl9zaGluZm8oZWRkcC0+c2tiKS0+Z3NvX3NpemUsCisJCQkgICAgICAgKGludCkoZWRkcC0+c2tiLT5sZW4gLSBlZGRwLT5za2Jfb2Zmc2V0KSk7CisJCS8qIHByZXBhcmUgcWRpbyBoZHIgKi8KKwkJaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgeworCQkJZWRkcC0+cWguaGRyLmwyLnBrdF9sZW5ndGggPSBkYXRhX2xlbiArIEVUSF9ITEVOICsKKwkJCQkJCSAgICAgZWRkcC0+bmhsICsgZWRkcC0+dGhsOworCQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQorCQkJCWVkZHAtPnFoLmhkci5sMi5wa3RfbGVuZ3RoICs9IFZMQU5fSExFTjsKKwkJfSBlbHNlCisJCQllZGRwLT5xaC5oZHIubDMubGVuZ3RoID0gZGF0YV9sZW4gKyBlZGRwLT5uaGwgKworCQkJCQkJIGVkZHAtPnRobDsKKwkJLyogcHJlcGFyZSBpcCBoZHIgKi8KKwkJaWYgKGVkZHAtPnNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisJCQllZGRwLT5uaC5pcDQuaC50b3RfbGVuID0gaHRvbnMoZGF0YV9sZW4gKyBlZGRwLT5uaGwgKworCQkJCQkJIGVkZHAtPnRobCk7CisJCQllZGRwLT5uaC5pcDQuaC5jaGVjayA9IDA7CisJCQllZGRwLT5uaC5pcDQuaC5jaGVjayA9CisJCQkJaXBfZmFzdF9jc3VtKCh1OCAqKSZlZGRwLT5uaC5pcDQuaCwKKwkJCQkJCWVkZHAtPm5oLmlwNC5oLmlobCk7CisJCX0gZWxzZQorCQkJZWRkcC0+bmguaXA2LmgucGF5bG9hZF9sZW4gPSBodG9ucyhkYXRhX2xlbiArCisJCQkJCQkJCWVkZHAtPnRobCk7CisJCS8qIHByZXBhcmUgdGNwIGhkciAqLworCQlpZiAoZGF0YV9sZW4gPT0gKGVkZHAtPnNrYi0+bGVuIC0gZWRkcC0+c2tiX29mZnNldCkpIHsKKwkJCS8qIGxhc3Qgc2VnbWVudCAtPiBzZXQgRklOIGFuZCBQU0ggZmxhZ3MgKi8KKwkJCWVkZHAtPnRoLnRjcC5oLmZpbiA9IHRjcGgtPmZpbjsKKwkJCWVkZHAtPnRoLnRjcC5oLnBzaCA9IHRjcGgtPnBzaDsKKwkJfQorCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCQloY3N1bSA9IHFldGhfZWRkcF9jaGVja190Y3A0X2hkcihlZGRwLCBkYXRhX2xlbik7CisJCWVsc2UKKwkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKGVkZHAsIGRhdGFfbGVuKTsKKwkJLyogZmlsbCB0aGUgbmV4dCBzZWdtZW50IGludG8gdGhlIGNvbnRleHQgKi8KKwkJcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2hkcnMoY3R4LCBlZGRwLCBkYXRhX2xlbik7CisJCXFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChjdHgsIGVkZHAsIGRhdGFfbGVuLCBoY3N1bSk7CisJCWlmIChlZGRwLT5za2Jfb2Zmc2V0ID49IGVkZHAtPnNrYi0+bGVuKQorCQkJYnJlYWs7CisJCS8qIHByZXBhcmUgaGVhZGVycyBmb3IgbmV4dCByb3VuZCAqLworCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCQllZGRwLT5uaC5pcDQuaC5pZCA9IGh0b25zKG50b2hzKGVkZHAtPm5oLmlwNC5oLmlkKSArIDEpOworCQllZGRwLT50aC50Y3AuaC5zZXEgPSBodG9ubChudG9obChlZGRwLT50aC50Y3AuaC5zZXEpICsKKwkJCWRhdGFfbGVuKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCisJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqcWhkcikKK3sKKwlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAgPSBOVUxMOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBmaWN4Iik7CisJLyogY3JlYXRlIG91ciBzZWdtZW50YXRpb24gaGVhZGVycyBhbmQgY29weSBvcmlnaW5hbCBoZWFkZXJzICovCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCQllZGRwID0gcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEocWhkciwKKwkJCQkJCSAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksCisJCQkJCQkgIGlwX2hkcmxlbihza2IpLAorCQkJCQkJICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLAorCQkJCQkJICB0Y3BfaGRybGVuKHNrYikpOworCWVsc2UKKwkJZWRkcCA9IHFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHFoZHIsCisJCQkJCQkgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLAorCQkJCQkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAorCQkJCQkJICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLAorCQkJCQkJICB0Y3BfaGRybGVuKHNrYikpOworCisJaWYgKGVkZHAgPT0gTlVMTCkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZWRkcGZjbm0iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmIChxaGRyLT5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKKwkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOworCQltZW1jcHkoJmVkZHAtPm1hYywgZXRoX2hkcihza2IpLCBFVEhfSExFTik7CisJCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCQkJZWRkcC0+dmxhblswXSA9IHNrYi0+cHJvdG9jb2w7CisJCQllZGRwLT52bGFuWzFdID0gaHRvbnModmxhbl90eF90YWdfZ2V0KHNrYikpOworCQl9CisJfQorCS8qIHRoZSBuZXh0IGZsYWdzIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIGxhc3Qgc2VnbWVudCAqLworCWVkZHAtPnRoLnRjcC5oLmZpbiA9IDA7CisJZWRkcC0+dGgudGNwLmgucHNoID0gMDsKKwllZGRwLT5za2IgPSBza2I7CisJLyogYmVnaW4gc2VnbWVudGF0aW9uIGFuZCBmaWxsIGNvbnRleHQgKi8KKwlfX3FldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgZWRkcCk7CisJa2ZyZWUoZWRkcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfZWRkcF9jYWxjX251bV9wYWdlcyhzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4pCit7CisJaW50IHNrYnNfcGVyX3BhZ2U7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGNhbnAiKTsKKwkvKiBjYW4gd2UgcHV0IG11bHRpcGxlIHNrYnMgaW4gb25lIHBhZ2U/ICovCisJc2tic19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICsgaGRyX2xlbik7CisJaWYgKHNrYnNfcGVyX3BhZ2UgPiAxKSB7CisJCWN0eC0+bnVtX3BhZ2VzID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKSAvCisJCQkJIHNrYnNfcGVyX3BhZ2UgKyAxOworCQljdHgtPmVsZW1lbnRzX3Blcl9za2IgPSAxOworCX0gZWxzZSB7CisJCS8qIG5vIC0+IGhvdyBtYW55IGVsZW1lbnRzIHBlciBza2I/ICovCisJCWN0eC0+ZWxlbWVudHNfcGVyX3NrYiA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICsgaGRyX2xlbiArCisJCQkJICAgICBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQ7CisJCWN0eC0+bnVtX3BhZ2VzID0gY3R4LT5lbGVtZW50c19wZXJfc2tiICoKKwkJCQkgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKTsKKwl9CisJY3R4LT5udW1fZWxlbWVudHMgPSBjdHgtPmVsZW1lbnRzX3Blcl9za2IgKgorCQkJICAgIChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICsgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKAorCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbikKK3sKKwlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CisJdTggKmFkZHI7CisJaW50IGk7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwY2ciKTsKKwkvKiBjcmVhdGUgdGhlIGNvbnRleHQgYW5kIGFsbG9jYXRlIHBhZ2VzICovCisJY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0KSwgR0ZQX0FUT01JQyk7CisJaWYgKGN0eCA9PSBOVUxMKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJY3R4LT50eXBlID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CisJcWV0aF9lZGRwX2NhbGNfbnVtX3BhZ2VzKGN0eCwgc2tiLCBoZHJfbGVuKTsKKwlpZiAoY3R4LT5lbGVtZW50c19wZXJfc2tiID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNpcyIpOworCQlrZnJlZShjdHgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJY3R4LT5wYWdlcyA9IGtjYWxsb2MoY3R4LT5udW1fcGFnZXMsIHNpemVvZih1OCAqKSwgR0ZQX0FUT01JQyk7CisJaWYgKGN0eC0+cGFnZXMgPT0gTlVMTCkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHBjbjIiKTsKKwkJa2ZyZWUoY3R4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9wYWdlczsgKytpKSB7CisJCWFkZHIgPSAodTggKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CisJCWlmIChhZGRyID09IE5VTEwpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMyIpOworCQkJY3R4LT5udW1fcGFnZXMgPSBpOworCQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJY3R4LT5wYWdlc1tpXSA9IGFkZHI7CisJfQorCWN0eC0+ZWxlbWVudHMgPSBrY2FsbG9jKGN0eC0+bnVtX2VsZW1lbnRzLAorCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoY3R4LT5lbGVtZW50cyA9PSBOVUxMKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuNCIpOworCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7CisJCXJldHVybiBOVUxMOworCX0KKwkvKiByZXNldCBudW1fZWxlbWVudHM7IHdpbGwgYmUgaW5jcmVtZW50ZWQgYWdhaW4gaW4gZmlsbF9idWZmZXIgdG8KKwkgKiByZWZsZWN0IG51bWJlciBvZiBhY3R1YWxseSB1c2VkIGVsZW1lbnRzICovCisJY3R4LT5udW1fZWxlbWVudHMgPSAwOworCXJldHVybiBjdHg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dF90Y3AoCisJCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBxZXRoX2hkciAqcWhkcikKK3sKKwlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwY3QiKTsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKKwkJCQkJCShzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCisJCQkJCQlpcF9oZHJsZW4oc2tiKSArCisJCQkJCQl0Y3BfaGRybGVuKHNrYikpKTsKKwllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQorCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYyhjYXJkLCBza2IsCisJCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKworCQkJdGNwX2hkcmxlbihza2IpKTsKKwllbHNlCisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZXRjcGludiIpOworCisJaWYgKGN0eCA9PSBOVUxMKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjcmVkZHBubCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHFldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgc2tiLCBxaGRyKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiY2VkZHB0ZmUiKTsKKwkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYXRvbWljX3NldCgmY3R4LT5yZWZjbnQsIDEpOworCXJldHVybiBjdHg7Cit9CisKK3N0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqcWhkciwKKwkJdW5zaWduZWQgY2hhciBza19wcm90b2NvbCkKK3sKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiY3JlZGRwYyIpOworCXN3aXRjaCAoc2tfcHJvdG9jb2wpIHsKKwljYXNlIElQUFJPVE9fVENQOgorCQlyZXR1cm4gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X3RjcChjYXJkLCBza2IsIHFoZHIpOworCWRlZmF1bHQ6CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJlZGRwaW52cCIpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfZWRkcF9jcmVhdGVfY29udGV4dCk7CisKK3ZvaWQgcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfaGRyICpxaGRyLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBxZXRoX2hkcl90c28gKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHJfdHNvICopcWhkcjsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgInRzb2ZoZHIiKTsKKworCS8qZml4IGhlYWRlciB0byBUU08gdmFsdWVzIC4uLiovCisJaGRyLT5oZHIuaGRyLmwzLmlkID0gUUVUSF9IRUFERVJfVFlQRV9UU087CisJLypzZXQgdmFsdWVzIHdoaWNoIGFyZSBmaXggZm9yIHRoZSBmaXJzdCBhcHByb2FjaCAuLi4qLworCWhkci0+ZXh0Lmhkcl90b3RfbGVuID0gKF9fdTE2KSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX2V4dF90c28pOworCWhkci0+ZXh0LmltYl9oZHJfbm8gID0gMTsKKwloZHItPmV4dC5oZHJfdHlwZSAgICA9IDE7CisJaGRyLT5leHQuaGRyX3ZlcnNpb24gPSAxOworCWhkci0+ZXh0Lmhkcl9sZW4gICAgID0gMjg7CisJLyppbnNlcnQgbm9uLWZpeCB2YWx1ZXMgKi8KKwloZHItPmV4dC5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCWhkci0+ZXh0LmRnX2hkcl9sZW4gPSAoX191MTYpKGlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQpOworCWhkci0+ZXh0LnBheWxvYWRfbGVuID0gKF9fdTE2KShza2ItPmxlbiAtIGhkci0+ZXh0LmRnX2hkcl9sZW4gLQorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOworCXRjcGgtPmNoZWNrID0gMDsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7CisJCWlwNmgtPnBheWxvYWRfbGVuID0gMDsKKwkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAorCQkJCQkgICAgICAgMCwgSVBQUk9UT19UQ1AsIDApOworCX0gZWxzZSB7CisJCS8qT1NBIHdhbnQgdXMgdG8gc2V0IHRoZXNlIHZhbHVlcyAuLi4qLworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkgMCwgSVBQUk9UT19UQ1AsIDApOworCQlpcGgtPnRvdF9sZW4gPSAwOworCQlpcGgtPmNoZWNrID0gMDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3Rzb19maWxsX2hlYWRlcik7CisKK3ZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHRsZW47CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisJCXRsZW4gPSBudG9ocyhpcF9oZHIoc2tiKS0+dG90X2xlbikgLSAoaXBfaGRyKHNrYiktPmlobCA8PCAyKTsKKwkJc3dpdGNoIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wpIHsKKwkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOworCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKAorCQkJCWlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAorCQkJCXRsZW4sIGlwX2hkcihza2IpLT5wcm90b2NvbCwKKwkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAorCQkJCQl0bGVuLCAwKSk7CisJCQlicmVhazsKKwkJY2FzZSBJUFBST1RPX1VEUDoKKwkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOworCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKAorCQkJCWlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAorCQkJCXRsZW4sIGlwX2hkcihza2IpLT5wcm90b2NvbCwKKwkJCQlza2JfY2hlY2tzdW0oc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLAorCQkJCQl0bGVuLCAwKSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgeworCQlzd2l0Y2ggKGlwdjZfaGRyKHNrYiktPm5leHRoZHIpIHsKKwkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOworCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYygKKwkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkciwKKwkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwKKwkJCQlpcHY2X2hkcihza2IpLT5uZXh0aGRyLAorCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCisJCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLCAwKSk7CisJCQlicmVhazsKKwkJY2FzZSBJUFBST1RPX1VEUDoKKwkJCXVkcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOworCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYygKKwkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkciwKKwkJCQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiwKKwkJCQlpcHY2X2hkcihza2IpLT5uZXh0aGRyLAorCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCisJCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLCAwKSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfdHhfY3N1bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiZjdkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAorICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNworICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAorICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KKyAqLworCisjaWZuZGVmIF9fUUVUSF9DT1JFX09GRkxfSF9fCisjZGVmaW5lIF9fUUVUSF9DT1JFX09GRkxfSF9fCisKK3N0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCB7CisJdTMyIGZsYWdzOworCXUzMiBsZW5ndGg7CisJdm9pZCAqYWRkcjsKK307CisKK3N0cnVjdCBxZXRoX2VkZHBfY29udGV4dCB7CisJYXRvbWljX3QgcmVmY250OworCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHR5cGU7CisJaW50IG51bV9wYWdlczsJCQkgICAgLyogIyBvZiBhbGxvY2F0ZWQgcGFnZXMgKi8KKwl1OCAqKnBhZ2VzOwkJCSAgICAvKiBwb2ludGVycyB0byBwYWdlcyAqLworCWludCBvZmZzZXQ7CQkJICAgIC8qIG9mZnNldCBpbiBjdHggZHVyaW5nIGNyZWF0aW9uICovCisJaW50IG51bV9lbGVtZW50czsJCSAgICAvKiAjIG9mIHJlcXVpcmVkICdTQkFMRXMnICovCisJc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50czsgLyogYXJyYXkgb2YgJ1NCQUxFcycgKi8KKwlpbnQgZWxlbWVudHNfcGVyX3NrYjsJCSAgICAvKiAjIG9mICdTQkFMRXMnIHBlciBza2IgKiovCit9OworCitzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHg7Cit9OworCitzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgeworCXN0cnVjdCBxZXRoX2hkciBxaDsKKwlzdHJ1Y3QgZXRoaGRyIG1hYzsKKwlfX2JlMTYgdmxhblsyXTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXBoZHIgaDsKKwkJCXU4IG9wdGlvbnNbNDBdOworCQl9IGlwNDsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBpcHY2aGRyIGg7CisJCX0gaXA2OworCX0gbmg7CisJdTggbmhsOworCXZvaWQgKm5oX2luX2N0eDsJLyogYWRkcmVzcyBvZiBuaCB3aXRoaW4gdGhlIGN0eCAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCB0Y3BoZHIgaDsKKwkJCXU4IG9wdGlvbnNbNDBdOworCQl9IHRjcDsKKwl9IHRoOworCXU4IHRobDsKKwl2b2lkICp0aF9pbl9jdHg7CS8qIGFkZHJlc3Mgb2YgdGggd2l0aGluIHRoZSBjdHggKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBza2Jfb2Zmc2V0OworCWludCBmcmFnOworCWludCBmcmFnX29mZnNldDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitleHRlcm4gc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqLAorCQkgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIHZvaWQgcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKK2V4dGVybiBpbnQgcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKKwkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICosIGludCk7CitleHRlcm4gdm9pZCBxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICopOworZXh0ZXJuIGludCBxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCisJCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKKwordm9pZCBxZXRoX3Rzb19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2hkciAqLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqKTsKK3ZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpOworCisjZW5kaWYgLyogX19RRVRIX0NPUkVfRUREUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhNTBmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiAgICBBdXRob3Iocyk6IFV0eiBCYWNoZXIgPHV0ei5iYWNoZXJAZGUuaWJtLmNvbT4sCisgKgkJIEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPiwKKyAqCQkgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPiwKKyAqCQkgRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KKworI2luY2x1ZGUgInFldGhfY29yZS5oIgorCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChjYXJkLT5zdGF0ZSkgeworCWNhc2UgQ0FSRF9TVEFURV9ET1dOOgorCQlyZXR1cm4gc3ByaW50ZihidWYsICJET1dOXG4iKTsKKwljYXNlIENBUkRfU1RBVEVfSEFSRFNFVFVQOgorCQlyZXR1cm4gc3ByaW50ZihidWYsICJIQVJEU0VUVVBcbiIpOworCWNhc2UgQ0FSRF9TVEFURV9TT0ZUU0VUVVA6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlNPRlRTRVRVUFxuIik7CisJY2FzZSBDQVJEX1NUQVRFX1VQOgorCQlpZiAoY2FyZC0+bGFuX29ubGluZSkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiVVAgKExBTiBPTkxJTkUpXG4iKTsKKwkJZWxzZQorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiVVAgKExBTiBPRkZMSU5FKVxuIik7CisJY2FzZSBDQVJEX1NUQVRFX1JFQ09WRVI6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlJFQ09WRVJcbiIpOworCWRlZmF1bHQ6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlVOS05PV05cbiIpOworCX0KK30KKworc3RhdGljIERFVklDRV9BVFRSKHN0YXRlLCAwNDQ0LCBxZXRoX2Rldl9zdGF0ZV9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfY2hwaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwMlhcbiIsIGNhcmQtPmluZm8uY2hwaWQpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY2hwaWQsIDA0NDQsIHFldGhfZGV2X2NocGlkX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9pZl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaWZfbmFtZSwgMDQ0NCwgcWV0aF9kZXZfaWZfbmFtZV9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfY2FyZF90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoY2FyZCkpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF90eXBlLCAwNDQ0LCBxZXRoX2Rldl9jYXJkX3R5cGVfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcWV0aF9nZXRfYnVmc2l6ZV9zdHIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9PSAxNjM4NCkKKwkJcmV0dXJuICIxNmsiOworCWVsc2UgaWYgKGNhcmQtPnFkaW8uaW5fYnVmX3NpemUgPT0gMjQ1NzYpCisJCXJldHVybiAiMjRrIjsKKwllbHNlIGlmIChjYXJkLT5xZGlvLmluX2J1Zl9zaXplID09IDMyNzY4KQorCQlyZXR1cm4gIjMyayI7CisJZWxzZSBpZiAoY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9PSA0MDk2MCkKKwkJcmV0dXJuICI0MGsiOworCWVsc2UKKwkJcmV0dXJuICI2NGsiOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9pbmJ1Zl9zaXplX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcWV0aF9nZXRfYnVmc2l6ZV9zdHIoY2FyZCkpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaW5idWZfc2l6ZSwgMDQ0NCwgcWV0aF9kZXZfaW5idWZfc2l6ZV9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfcG9ydG5vX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5pbmZvLnBvcnRubyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X3BvcnRub19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqdG1wOworCXVuc2lnbmVkIGludCBwb3J0bm87CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQorCQlyZXR1cm4gLUVQRVJNOworCisJcG9ydG5vID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7CisJaWYgKHBvcnRubyA+IFFFVEhfTUFYX1BPUlROTykgeworCQlQUklOVF9XQVJOKCJwb3J0bm8gMHglWCBpcyBvdXQgb2YgcmFuZ2VcbiIsIHBvcnRubyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhcmQtPmluZm8ucG9ydG5vID0gcG9ydG5vOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvcnRubywgMDY0NCwgcWV0aF9kZXZfcG9ydG5vX3Nob3csIHFldGhfZGV2X3BvcnRub19zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X3BvcnRuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgcG9ydG5hbWVbOV0gPSB7MCwgfTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2FyZC0+aW5mby5wb3J0bmFtZV9yZXF1aXJlZCkgeworCQltZW1jcHkocG9ydG5hbWUsIGNhcmQtPmluZm8ucG9ydG5hbWUgKyAxLCA4KTsKKwkJRUJDQVNDKHBvcnRuYW1lLCA4KTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHBvcnRuYW1lKTsKKwl9IGVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAibm8gcG9ydG5hbWUgcmVxdWlyZWRcbiIpOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9wb3J0bmFtZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqdG1wOworCWludCBpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7CisJaWYgKChzdHJsZW4odG1wKSA+IDgpIHx8IChzdHJsZW4odG1wKSA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYXJkLT5pbmZvLnBvcnRuYW1lWzBdID0gc3RybGVuKHRtcCk7CisJLyogZm9yIGJlYXV0eSByZWFzb25zICovCisJZm9yIChpID0gMTsgaSA8IDk7IGkrKykKKwkJY2FyZC0+aW5mby5wb3J0bmFtZVtpXSA9ICcgJzsKKwlzdHJjcHkoY2FyZC0+aW5mby5wb3J0bmFtZSArIDEsIHRtcCk7CisJQVNDRUJDKGNhcmQtPmluZm8ucG9ydG5hbWUgKyAxLCA4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvcnRuYW1lLCAwNjQ0LCBxZXRoX2Rldl9wb3J0bmFtZV9zaG93LAorCQlxZXRoX2Rldl9wb3J0bmFtZV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X3ByaW9xaW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nKSB7CisJY2FzZSBRRVRIX1BSSU9fUV9JTkdfUFJFQzoKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJieSBwcmVjZWRlbmNlIik7CisJY2FzZSBRRVRIX1BSSU9fUV9JTkdfVE9TOgorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgImJ5IHR5cGUgb2Ygc2VydmljZSIpOworCWRlZmF1bHQ6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFsd2F5cyBxdWV1ZSAlaVxuIiwKKwkJCSAgICAgICBjYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlKTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X3ByaW9xaW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICp0bXA7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogY2hlY2sgaWYgMTkyMCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgLAorCSAqIGlmIHRob3VnaCB3ZSBoYXZlIHRvIHBlcm1pdCBwcmlvcml0eSBxdWV1ZWluZworCSAqLworCWlmIChjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPT0gMSkgeworCQlQUklOVF9XQVJOKCJQcmlvcml0eSBxdWV1ZWluZyBkaXNhYmxlZCBkdWUgIgorCQkJICAgInRvIGhhcmR3YXJlIGxpbWl0YXRpb25zIVxuIik7CisJCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfUFJJT1FfREVGQVVMVDsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOworCWlmICghc3RyY21wKHRtcCwgInByaW9fcXVldWVpbmdfcHJlYyIpKQorCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX1BSSU9fUV9JTkdfUFJFQzsKKwllbHNlIGlmICghc3RyY21wKHRtcCwgInByaW9fcXVldWVpbmdfdG9zIikpCisJCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfUFJJT19RX0lOR19UT1M7CisJZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjAiKSkgeworCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7CisJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjEiKSkgeworCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7CisJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjIiKSkgeworCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7CisJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAyOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjMiKSkgeworCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7CisJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAzOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nIikpIHsKKwkJY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nID0gUUVUSF9OT19QUklPX1FVRVVFSU5HOworCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gUUVUSF9ERUZBVUxUX1FVRVVFOworCX0gZWxzZSB7CisJCVBSSU5UX1dBUk4oIlVua25vd24gcXVldWVpbmcgdHlwZSAnJXMnXG4iLCB0bXApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocHJpb3JpdHlfcXVldWVpbmcsIDA2NDQsIHFldGhfZGV2X3ByaW9xaW5nX3Nob3csCisJCXFldGhfZGV2X3ByaW9xaW5nX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfYnVmY250X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmJ1Zl9jb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X2J1ZmNudF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqdG1wOworCWludCBjbnQsIG9sZF9jbnQ7CisJaW50IHJjOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCW9sZF9jbnQgPSBjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmJ1Zl9jb3VudDsKKwljbnQgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDEwKTsKKwljbnQgPSAoY250IDwgUUVUSF9JTl9CVUZfQ09VTlRfTUlOKSA/IFFFVEhfSU5fQlVGX0NPVU5UX01JTiA6CisJCSgoY250ID4gUUVUSF9JTl9CVUZfQ09VTlRfTUFYKSA/IFFFVEhfSU5fQlVGX0NPVU5UX01BWCA6IGNudCk7CisJaWYgKG9sZF9jbnQgIT0gY250KSB7CisJCXJjID0gcWV0aF9yZWFsbG9jX2J1ZmZlcl9wb29sKGNhcmQsIGNudCk7CisJCWlmIChyYykKKwkJCVBSSU5UX1dBUk4oIkVycm9yICglZCkgd2hpbGUgc2V0dGluZyAiCisJCQkJICAgImJ1ZmZlciBjb3VudC5cbiIsIHJjKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYnVmZmVyX2NvdW50LCAwNjQ0LCBxZXRoX2Rldl9idWZjbnRfc2hvdywKKwkJcWV0aF9kZXZfYnVmY250X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqdG1wOworCWludCBpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKQorCQlyZXR1cm4gLUVQRVJNOworCisJaSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnRtcCwgMTYpOworCWlmIChpID09IDEpCisJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyZWNvdmVyLCAwMjAwLCBOVUxMLCBxZXRoX2Rldl9yZWNvdmVyX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfcGVyZm9ybWFuY2Vfc3RhdHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMgPyAxOjApOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9wZXJmb3JtYW5jZV9zdGF0c19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqdG1wOworCWludCBpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKKwlpZiAoKGkgPT0gMCkgfHwgKGkgPT0gMSkpIHsKKwkJaWYgKGkgPT0gY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCXJldHVybiBjb3VudDsKKwkJY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cyA9IGk7CisJCWlmIChpID09IDApCisJCQltZW1zZXQoJmNhcmQtPnBlcmZfc3RhdHMsIDAsCisJCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX3BlcmZfc3RhdHMpKTsKKwkJY2FyZC0+cGVyZl9zdGF0cy5pbml0aWFsX3J4X3BhY2tldHMgPSBjYXJkLT5zdGF0cy5yeF9wYWNrZXRzOworCQljYXJkLT5wZXJmX3N0YXRzLmluaXRpYWxfdHhfcGFja2V0cyA9IGNhcmQtPnN0YXRzLnR4X3BhY2tldHM7CisJfSBlbHNlIHsKKwkJUFJJTlRfV0FSTigicGVyZm9ybWFuY2Vfc3RhdHM6IHdyaXRlIDAgb3IgMSB0byB0aGlzIGZpbGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBlcmZvcm1hbmNlX3N0YXRzLCAwNjQ0LCBxZXRoX2Rldl9wZXJmb3JtYW5jZV9zdGF0c19zaG93LAorCQkgICBxZXRoX2Rldl9wZXJmb3JtYW5jZV9zdGF0c19zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X2xheWVyMl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMubGF5ZXIyID8gMTowKTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfbGF5ZXIyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICp0bXA7CisJaW50IGksIHJjOworCWVudW0gcWV0aF9kaXNjaXBsaW5lX2lkIG5ld2RpczsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCisJICAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkpCisJCXJldHVybiAtRVBFUk07CisKKwlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7CisJc3dpdGNoIChpKSB7CisJY2FzZSAwOgorCQluZXdkaXMgPSBRRVRIX0RJU0NJUExJTkVfTEFZRVIzOworCQlicmVhazsKKwljYXNlIDE6CisJCW5ld2RpcyA9IFFFVEhfRElTQ0lQTElORV9MQVlFUjI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBSSU5UX1dBUk4oImxheWVyMjogd3JpdGUgMCBvciAxIHRvIHRoaXMgZmlsZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIgPT0gbmV3ZGlzKSB7CisJCXJldHVybiBjb3VudDsKKwl9IGVsc2UgeworCQlpZiAoY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyKSB7CisJCQljYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXItPnJlbW92ZShjYXJkLT5nZGV2KTsKKwkJCXFldGhfY29yZV9mcmVlX2Rpc2NpcGxpbmUoY2FyZCk7CisJCX0KKwl9CisKKwlyYyA9IHFldGhfY29yZV9sb2FkX2Rpc2NpcGxpbmUoY2FyZCwgbmV3ZGlzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyLT5wcm9iZShjYXJkLT5nZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsYXllcjIsIDA2NDQsIHFldGhfZGV2X2xheWVyMl9zaG93LAorCQkgICBxZXRoX2Rldl9sYXllcjJfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9sYXJnZV9zZW5kX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7CisJY2FzZSBRRVRIX0xBUkdFX1NFTkRfTk86CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAibm8iKTsKKwljYXNlIFFFVEhfTEFSR0VfU0VORF9FRERQOgorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIkVERFAiKTsKKwljYXNlIFFFVEhfTEFSR0VfU0VORF9UU086CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiVFNPIik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJOL0EiKTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X2xhcmdlX3NlbmRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHR5cGU7CisJaW50IHJjID0gMDsKKwljaGFyICp0bXA7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7CisJaWYgKCFzdHJjbXAodG1wLCAibm8iKSkgeworCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX05POworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJFRERQIikpIHsKKwkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJUU08iKSkgeworCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKKwl9IGVsc2UgeworCQlQUklOVF9XQVJOKCJsYXJnZV9zZW5kOiBpbnZhbGlkIG1vZGUgJXMhXG4iLCB0bXApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSB0eXBlKQorCQlyZXR1cm4gY291bnQ7CisJcmMgPSBxZXRoX3NldF9sYXJnZV9zZW5kKGNhcmQsIHR5cGUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGxhcmdlX3NlbmQsIDA2NDQsIHFldGhfZGV2X2xhcmdlX3NlbmRfc2hvdywKKwkJICAgcWV0aF9kZXZfbGFyZ2Vfc2VuZF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X2Jsa3Rfc2hvdyhjaGFyICpidWYsIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCB2YWx1ZSkKK3sKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgdmFsdWUpOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9ibGt0X3N0b3JlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgKnZhbHVlLCBpbnQgbWF4X3ZhbHVlKQoreworCWNoYXIgKnRtcDsKKwlpbnQgaTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCisJCXJldHVybiAtRVBFUk07CisKKwlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxMCk7CisJaWYgKGkgPD0gbWF4X3ZhbHVlKSB7CisJCSp2YWx1ZSA9IGk7CisJfSBlbHNlIHsKKwkJUFJJTlRfV0FSTigiYmxrdCB0b3RhbCB0aW1lOiB3cml0ZSB2YWx1ZXMgYmV0d2VlbiIKKwkJCSAgICIgMCBhbmQgJWQgdG8gdGhpcyBmaWxlIVxuIiwgbWF4X3ZhbHVlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfYmxrdF90b3RhbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBxZXRoX2Rldl9ibGt0X3Nob3coYnVmLCBjYXJkLCBjYXJkLT5pbmZvLmJsa3QudGltZV90b3RhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X2Jsa3RfdG90YWxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHFldGhfZGV2X2Jsa3Rfc3RvcmUoY2FyZCwgYnVmLCBjb3VudCwKKwkJCQkgICAmY2FyZC0+aW5mby5ibGt0LnRpbWVfdG90YWwsIDEwMDApOworfQorCisKKworc3RhdGljIERFVklDRV9BVFRSKHRvdGFsLCAwNjQ0LCBxZXRoX2Rldl9ibGt0X3RvdGFsX3Nob3csCisJCSAgIHFldGhfZGV2X2Jsa3RfdG90YWxfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9ibGt0X2ludGVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHFldGhfZGV2X2Jsa3Rfc2hvdyhidWYsIGNhcmQsIGNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXQpOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9ibGt0X2ludGVyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBxZXRoX2Rldl9ibGt0X3N0b3JlKGNhcmQsIGJ1ZiwgY291bnQsCisJCQkJICAgJmNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXQsIDEwMCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihpbnRlciwgMDY0NCwgcWV0aF9kZXZfYmxrdF9pbnRlcl9zaG93LAorCQkgICBxZXRoX2Rldl9ibGt0X2ludGVyX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfYmxrdF9pbnRlcl9qdW1ib19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBxZXRoX2Rldl9ibGt0X3Nob3coYnVmLCBjYXJkLAorCQkJCSAgY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldF9qdW1ibyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfZGV2X2Jsa3RfaW50ZXJfanVtYm9fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHFldGhfZGV2X2Jsa3Rfc3RvcmUoY2FyZCwgYnVmLCBjb3VudCwKKwkJCQkgICAmY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldF9qdW1ibywgMTAwKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGludGVyX2p1bWJvLCAwNjQ0LCBxZXRoX2Rldl9ibGt0X2ludGVyX2p1bWJvX3Nob3csCisJCSAgIHFldGhfZGV2X2Jsa3RfaW50ZXJfanVtYm9fc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcWV0aF9ibGt0X2RldmljZV9hdHRyc1tdID0geworCSZkZXZfYXR0cl90b3RhbC5hdHRyLAorCSZkZXZfYXR0cl9pbnRlci5hdHRyLAorCSZkZXZfYXR0cl9pbnRlcl9qdW1iby5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBxZXRoX2RldmljZV9ibGt0X2dyb3VwID0geworCS5uYW1lID0gImJsa3QiLAorCS5hdHRycyA9IHFldGhfYmxrdF9kZXZpY2VfYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcWV0aF9kZXZpY2VfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfY2hwaWQuYXR0ciwKKwkmZGV2X2F0dHJfaWZfbmFtZS5hdHRyLAorCSZkZXZfYXR0cl9jYXJkX3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfaW5idWZfc2l6ZS5hdHRyLAorCSZkZXZfYXR0cl9wb3J0bm8uYXR0ciwKKwkmZGV2X2F0dHJfcG9ydG5hbWUuYXR0ciwKKwkmZGV2X2F0dHJfcHJpb3JpdHlfcXVldWVpbmcuYXR0ciwKKwkmZGV2X2F0dHJfYnVmZmVyX2NvdW50LmF0dHIsCisJJmRldl9hdHRyX3JlY292ZXIuYXR0ciwKKwkmZGV2X2F0dHJfcGVyZm9ybWFuY2Vfc3RhdHMuYXR0ciwKKwkmZGV2X2F0dHJfbGF5ZXIyLmF0dHIsCisJJmRldl9hdHRyX2xhcmdlX3NlbmQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcWV0aF9kZXZpY2VfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBxZXRoX2RldmljZV9hdHRycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpxZXRoX29zbl9kZXZpY2VfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfY2hwaWQuYXR0ciwKKwkmZGV2X2F0dHJfaWZfbmFtZS5hdHRyLAorCSZkZXZfYXR0cl9jYXJkX3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfYnVmZmVyX2NvdW50LmF0dHIsCisJJmRldl9hdHRyX3JlY292ZXIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcWV0aF9vc25fZGV2aWNlX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcWV0aF9vc25fZGV2aWNlX2F0dHJzLAorfTsKKworaW50IHFldGhfY29yZV9jcmVhdGVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYmxrdF9ncm91cCk7CisJaWYgKHJldCkKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHFldGhfY29yZV9yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9ibGt0X2dyb3VwKTsKK30KKworaW50IHFldGhfY29yZV9jcmVhdGVfb3NuX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfb3NuX2RldmljZV9hdHRyX2dyb3VwKTsKK30KKwordm9pZCBxZXRoX2NvcmVfcmVtb3ZlX29zbl9hdHRyaWJ1dGVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfb3NuX2RldmljZV9hdHRyX2dyb3VwKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjMjY4Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjM0ICswLDAgQEAKLS8qCi0gKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCi0gKgotICogRW5oYW5jZWQgRGV2aWNlIERyaXZlciBQYWNraW5nIChFRERQKSBzdXBwb3J0IGZvciB0aGUgcWV0aCBkcml2ZXIuCi0gKgotICogQ29weXJpZ2h0IDIwMDQgSUJNIENvcnBvcmF0aW9uCi0gKgotICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKgotICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxuZXQvdGNwLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0KLSNpbmNsdWRlIDxuZXQvaXAuaD4KLQotI2luY2x1ZGUgInFldGguaCIKLSNpbmNsdWRlICJxZXRoX21wYy5oIgotI2luY2x1ZGUgInFldGhfZWRkcC5oIgotCi1pbnQKLXFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAotCQkJCSAgICBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlpbnQgaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKLQlpbnQgZWxlbWVudHNfbmVlZGVkID0gY3R4LT5udW1fZWxlbWVudHM7Ci0JaW50IGVsZW1lbnRzX2luX2J1ZmZlcjsKLQlpbnQgc2tic19pbl9idWZmZXI7Ci0JaW50IGJ1ZmZlcnNfbmVlZGVkID0gMDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwY2JmYyIpOwotCXdoaWxlKGVsZW1lbnRzX25lZWRlZCA+IDApIHsKLQkJYnVmZmVyc19uZWVkZWQrKzsKLQkJaWYgKGF0b21pY19yZWFkKCZxdWV1ZS0+YnVmc1tpbmRleF0uc3RhdGUpICE9Ci0JCQkJUUVUSF9RRElPX0JVRl9FTVBUWSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJZWxlbWVudHNfaW5fYnVmZmVyID0gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCi0JCQkJICAgICBxdWV1ZS0+YnVmc1tpbmRleF0ubmV4dF9lbGVtZW50X3RvX2ZpbGw7Ci0JCXNrYnNfaW5fYnVmZmVyID0gZWxlbWVudHNfaW5fYnVmZmVyIC8gY3R4LT5lbGVtZW50c19wZXJfc2tiOwotCQllbGVtZW50c19uZWVkZWQgLT0gc2tic19pbl9idWZmZXIgKiBjdHgtPmVsZW1lbnRzX3Blcl9za2I7Ci0JCWluZGV4ID0gKGluZGV4ICsgMSkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KLQlyZXR1cm4gYnVmZmVyc19uZWVkZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2VkZHBfZnJlZV9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWludCBpOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBmY3R4Iik7Ci0JZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX3BhZ2VzOyArK2kpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljdHgtPnBhZ2VzW2ldKTsKLQlrZnJlZShjdHgtPnBhZ2VzKTsKLQlrZnJlZShjdHgtPmVsZW1lbnRzKTsKLQlrZnJlZShjdHgpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF9lZGRwX2dldF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWF0b21pY19pbmMoJmN0eC0+cmVmY250KTsKLX0KLQotdm9pZAotcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWlmIChhdG9taWNfZGVjX3JldHVybigmY3R4LT5yZWZjbnQpID09IDApCi0JCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLX0KLQotdm9pZAotcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgKnJlZjsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJlZGRwcmN0eCIpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5jdHhfbGlzdCkpewotCQlyZWYgPSBsaXN0X2VudHJ5KGJ1Zi0+Y3R4X2xpc3QubmV4dCwKLQkJCQkgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSwgbGlzdCk7Ci0JCXFldGhfZWRkcF9wdXRfY29udGV4dChyZWYtPmN0eCk7Ci0JCWxpc3RfZGVsKCZyZWYtPmxpc3QpOwotCQlrZnJlZShyZWYpOwotCX0KLX0KLQotc3RhdGljIGludAotcWV0aF9lZGRwX2J1Zl9yZWZfY29udGV4dChzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiwKLQkJCSAgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImVkZHByZmN4Iik7Ci0JcmVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSksIEdGUF9BVE9NSUMpOwotCWlmIChyZWYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcWV0aF9lZGRwX2dldF9jb250ZXh0KGN0eCk7Ci0JcmVmLT5jdHggPSBjdHg7Ci0JbGlzdF9hZGRfdGFpbCgmcmVmLT5saXN0LCAmYnVmLT5jdHhfbGlzdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAotCQkgICAgICBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJICAgICAgaW50IGluZGV4KQotewotCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmID0gTlVMTDsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlcjsKLQlpbnQgZWxlbWVudHMgPSBjdHgtPm51bV9lbGVtZW50czsKLQlpbnQgZWxlbWVudCA9IDA7Ci0JaW50IGZsdXNoX2NudCA9IDA7Ci0JaW50IG11c3RfcmVmY250ID0gMTsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwZmlidSIpOwotCXdoaWxlIChlbGVtZW50cyA+IDApIHsKLQkJYnVmID0gJnF1ZXVlLT5idWZzW2luZGV4XTsKLQkJaWYgKGF0b21pY19yZWFkKCZidWYtPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKXsKLQkJCS8qIG5vcm1hbGx5IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2Ugd2UgY2hlY2tlZCBmb3IKLQkJCSAqIGF2YWlsYWJsZSBlbGVtZW50cyBpbiBxZXRoX2NoZWNrX2VsZW1lbnRzX2Zvcl9jb250ZXh0Ci0JCQkgKi8KLQkJCWlmIChlbGVtZW50ID09IDApCi0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCWVsc2UgewotCQkJCVBSSU5UX1dBUk4oImNvdWxkIG9ubHkgcGFydGlhbGx5IGZpbGwgZWRkcCAiCi0JCQkJCSAgICJidWZmZXIhXG4iKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQkvKiBjaGVjayBpZiB0aGUgd2hvbGUgbmV4dCBza2IgZml0cyBpbnRvIGN1cnJlbnQgYnVmZmVyICovCi0JCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCi0JCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwpCi0JCQkJPCBjdHgtPmVsZW1lbnRzX3Blcl9za2IpewotCQkJLyogbm8gLT4gZ28gdG8gbmV4dCBidWZmZXIgKi8KLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWluZGV4ID0gKGluZGV4ICsgMSkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCQkJZmx1c2hfY250Kys7Ci0JCQkvKiBuZXcgYnVmZmVyLCBzbyB3ZSBoYXZlIHRvIGFkZCBjdHggdG8gYnVmZmVyJ2N0eF9saXN0Ci0JCQkgKiBhbmQgaW5jcmVtZW50IGN0eCdzIHJlZmNudCAqLwotCQkJbXVzdF9yZWZjbnQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKG11c3RfcmVmY250KXsKLQkJCW11c3RfcmVmY250ID0gMDsKLQkJCWlmIChxZXRoX2VkZHBfYnVmX3JlZl9jb250ZXh0KGJ1ZiwgY3R4KSl7Ci0JCQkJUFJJTlRfV0FSTigibm8gbWVtb3J5IHRvIGNyZWF0ZSBlZGRwIGNvbnRleHQgIgotCQkJCQkgICAicmVmZXJlbmNlXG4iKTsKLQkJCQlnb3RvIG91dF9jaGVjazsKLQkJCX0KLQkJfQotCQlidWZmZXIgPSBidWYtPmJ1ZmZlcjsKLQkJLyogZmlsbCBvbmUgc2tiIGludG8gYnVmZmVyICovCi0JCWZvciAoaSA9IDA7IGkgPCBjdHgtPmVsZW1lbnRzX3Blcl9za2I7ICsraSl7Ci0JCQlpZiAoY3R4LT5lbGVtZW50c1tlbGVtZW50XS5sZW5ndGggIT0gMCkgewotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlhZGRyID0gY3R4LT5lbGVtZW50c1tlbGVtZW50XS5hZGRyOwotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlsZW5ndGggPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmxlbmd0aDsKLQkJCQlidWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbF0uCi0JCQkJZmxhZ3MgPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmZsYWdzOwotCQkJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKLQkJCX0KLQkJCWVsZW1lbnQrKzsKLQkJCWVsZW1lbnRzLS07Ci0JCX0KLQl9Ci1vdXRfY2hlY2s6Ci0JaWYgKCFxdWV1ZS0+ZG9fcGFjaykgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAiZmlsbGJmbnAiKTsKLQkJLyogc2V0IHN0YXRlIHRvIFBSSU1FRCAtPiB3aWxsIGJlIGZsdXNoZWQgKi8KLQkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPiAwKXsKLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWZsdXNoX2NudCsrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImZpbGxiZnBhIik7Ci0JCWlmIChidWYtPm5leHRfZWxlbWVudF90b19maWxsID49Ci0JCQkJUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSkgewotCQkJLyoKLQkJCSAqIHBhY2tlZCBidWZmZXIgaWYgZnVsbCAtPiBzZXQgc3RhdGUgUFJJTUVECi0JCQkgKiAtPiB3aWxsIGJlIGZsdXNoZWQKLQkJCSAqLwotCQkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJZmx1c2hfY250Kys7Ci0JCX0KLQl9Ci1vdXQ6Ci0JcmV0dXJuIGZsdXNoX2NudDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9oZHJzKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQkJICAgICAgc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLCBpbnQgZGF0YV9sZW4pCi17Ci0JdTggKnBhZ2U7Ci0JaW50IHBhZ2VfcmVtYWluZGVyOwotCWludCBwYWdlX29mZnNldDsKLQlpbnQgcGt0X2xlbjsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgKmVsZW1lbnQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGNyc2giKTsKLQlwYWdlID0gY3R4LT5wYWdlc1tjdHgtPm9mZnNldCA+PiBQQUdFX1NISUZUXTsKLQlwYWdlX29mZnNldCA9IGN0eC0+b2Zmc2V0ICUgUEFHRV9TSVpFOwotCWVsZW1lbnQgPSAmY3R4LT5lbGVtZW50c1tjdHgtPm51bV9lbGVtZW50c107Ci0JcGt0X2xlbiA9IGVkZHAtPm5obCArIGVkZHAtPnRobCArIGRhdGFfbGVuOwotCS8qIEZJWE1FOiBsYXllcjIgYW5kIFZMQU4gISEhICovCi0JaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikKLQkJcGt0X2xlbiArPSBFVEhfSExFTjsKLQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCXBrdF9sZW4gKz0gVkxBTl9ITEVOOwotCS8qIGRvZXMgY29tcGxldGUgcGFja2V0IGZpdCBpbiBjdXJyZW50IHBhZ2UgPyAqLwotCXBhZ2VfcmVtYWluZGVyID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7Ci0JaWYgKHBhZ2VfcmVtYWluZGVyIDwgKHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgcGt0X2xlbikpewotCQkvKiBubyAtPiBnbyB0byBzdGFydCBvZiBuZXh0IHBhZ2UgKi8KLQkJY3R4LT5vZmZzZXQgKz0gcGFnZV9yZW1haW5kZXI7Ci0JCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCQlwYWdlX29mZnNldCA9IDA7Ci0JfQotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5xaCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCWVsZW1lbnQtPmFkZHIgPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JZWxlbWVudC0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JY3R4LT5vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JLyogYWRkIG1hYyBoZWFkZXIgKD8pICovCi0JaWYgKGVkZHAtPnFoLmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMil7Ci0JCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5tYWMsIEVUSF9ITEVOKTsKLQkJZWxlbWVudC0+bGVuZ3RoICs9IEVUSF9ITEVOOwotCQljdHgtPm9mZnNldCArPSBFVEhfSExFTjsKLQkJcGFnZV9vZmZzZXQgKz0gRVRIX0hMRU47Ci0JfQotCS8qIGFkZCBWTEFOIHRhZyAqLwotCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSl7Ci0JCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT52bGFuLCBWTEFOX0hMRU4pOwotCQllbGVtZW50LT5sZW5ndGggKz0gVkxBTl9ITEVOOwotCQljdHgtPm9mZnNldCArPSBWTEFOX0hMRU47Ci0JCXBhZ2Vfb2Zmc2V0ICs9IFZMQU5fSExFTjsKLQl9Ci0JLyogYWRkIG5ldHdvcmsgaGVhZGVyICovCi0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgKHU4ICopJmVkZHAtPm5oLCBlZGRwLT5uaGwpOwotCWVsZW1lbnQtPmxlbmd0aCArPSBlZGRwLT5uaGw7Ci0JZWRkcC0+bmhfaW5fY3R4ID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCWN0eC0+b2Zmc2V0ICs9IGVkZHAtPm5obDsKLQlwYWdlX29mZnNldCArPSBlZGRwLT5uaGw7Ci0JLyogYWRkIHRyYW5zcG9ydCBoZWFkZXIgKi8KLQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAodTggKikmZWRkcC0+dGgsIGVkZHAtPnRobCk7Ci0JZWxlbWVudC0+bGVuZ3RoICs9IGVkZHAtPnRobDsKLQllZGRwLT50aF9pbl9jdHggPSBwYWdlICsgcGFnZV9vZmZzZXQ7Ci0JY3R4LT5vZmZzZXQgKz0gZWRkcC0+dGhsOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AoY2hhciAqZHN0LCBzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBsZW4sCi0JCQlfX3dzdW0gKmhjc3VtKQotewotCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7Ci0JaW50IGxlZnRfaW5fZnJhZzsKLQlpbnQgY29weV9sZW47Ci0JdTggKnNyYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwY2R0YyIpOwotCWlmIChza2Jfc2hpbmZvKGVkZHAtPnNrYiktPm5yX2ZyYWdzID09IDApIHsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoZWRkcC0+c2tiLCBlZGRwLT5za2Jfb2Zmc2V0LAotCQkJCQkJIGRzdCwgbGVuKTsKLQkJKmhjc3VtID0gY3N1bV9wYXJ0aWFsKGVkZHAtPnNrYi0+ZGF0YSArIGVkZHAtPnNrYl9vZmZzZXQsIGxlbiwKLQkJCQkgICAgICAqaGNzdW0pOwotCQllZGRwLT5za2Jfb2Zmc2V0ICs9IGxlbjsKLQl9IGVsc2UgewotCQl3aGlsZSAobGVuID4gMCkgewotCQkJaWYgKGVkZHAtPmZyYWcgPCAwKSB7Ci0JCQkJLyogd2UncmUgaW4gc2tiLT5kYXRhICovCi0JCQkJbGVmdF9pbl9mcmFnID0gKGVkZHAtPnNrYi0+bGVuIC0gZWRkcC0+c2tiLT5kYXRhX2xlbikKLQkJCQkJCS0gZWRkcC0+c2tiX29mZnNldDsKLQkJCQlzcmMgPSBlZGRwLT5za2ItPmRhdGEgKyBlZGRwLT5za2Jfb2Zmc2V0OwotCQkJfSBlbHNlIHsKLQkJCQlmcmFnID0gJnNrYl9zaGluZm8oZWRkcC0+c2tiKS0+Ci0JCQkJCWZyYWdzW2VkZHAtPmZyYWddOwotCQkJCWxlZnRfaW5fZnJhZyA9IGZyYWctPnNpemUgLSBlZGRwLT5mcmFnX29mZnNldDsKLQkJCQlzcmMgPSAodTggKikoCi0JCQkJCShwYWdlX3RvX3BmbihmcmFnLT5wYWdlKSA8PCBQQUdFX1NISUZUKSsKLQkJCQkJZnJhZy0+cGFnZV9vZmZzZXQgKyBlZGRwLT5mcmFnX29mZnNldCk7Ci0JCQl9Ci0JCQlpZiAobGVmdF9pbl9mcmFnIDw9IDApIHsKLQkJCQllZGRwLT5mcmFnKys7Ci0JCQkJZWRkcC0+ZnJhZ19vZmZzZXQgPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY29weV9sZW4gPSBtaW4obGVmdF9pbl9mcmFnLCBsZW4pOwotCQkJbWVtY3B5KGRzdCwgc3JjLCBjb3B5X2xlbik7Ci0JCQkqaGNzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBjb3B5X2xlbiwgKmhjc3VtKTsKLQkJCWRzdCArPSBjb3B5X2xlbjsKLQkJCWVkZHAtPmZyYWdfb2Zmc2V0ICs9IGNvcHlfbGVuOwotCQkJZWRkcC0+c2tiX29mZnNldCArPSBjb3B5X2xlbjsKLQkJCWxlbiAtPSBjb3B5X2xlbjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJCQkgIHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwgaW50IGRhdGFfbGVuLAotCQkJCSAgX193c3VtIGhjc3VtKQotewotCXU4ICpwYWdlOwotCWludCBwYWdlX3JlbWFpbmRlcjsKLQlpbnQgcGFnZV9vZmZzZXQ7Ci0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50OwotCWludCBmaXJzdF9sYXAgPSAxOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBjc2R0Iik7Ci0JcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JcGFnZV9vZmZzZXQgPSBjdHgtPm9mZnNldCAlIFBBR0VfU0laRTsKLQllbGVtZW50ID0gJmN0eC0+ZWxlbWVudHNbY3R4LT5udW1fZWxlbWVudHNdOwotCXdoaWxlIChkYXRhX2xlbil7Ci0JCXBhZ2VfcmVtYWluZGVyID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7Ci0JCWlmIChwYWdlX3JlbWFpbmRlciA8IGRhdGFfbGVuKXsKLQkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKLQkJCQkJCXBhZ2VfcmVtYWluZGVyLCAmaGNzdW0pOwotCQkJZWxlbWVudC0+bGVuZ3RoICs9IHBhZ2VfcmVtYWluZGVyOwotCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKLQkJCWVsc2UKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7Ci0JCQljdHgtPm51bV9lbGVtZW50cysrOwotCQkJZWxlbWVudCsrOwotCQkJZGF0YV9sZW4gLT0gcGFnZV9yZW1haW5kZXI7Ci0JCQljdHgtPm9mZnNldCArPSBwYWdlX3JlbWFpbmRlcjsKLQkJCXBhZ2UgPSBjdHgtPnBhZ2VzW2N0eC0+b2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwotCQkJcGFnZV9vZmZzZXQgPSAwOwotCQkJZWxlbWVudC0+YWRkciA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQkJfSBlbHNlIHsKLQkJCXFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKHBhZ2UgKyBwYWdlX29mZnNldCwgZWRkcCwKLQkJCQkJCWRhdGFfbGVuLCAmaGNzdW0pOwotCQkJZWxlbWVudC0+bGVuZ3RoICs9IGRhdGFfbGVuOwotCQkJaWYgKCFmaXJzdF9sYXApCi0JCQkJZWxlbWVudC0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKLQkJCWN0eC0+bnVtX2VsZW1lbnRzKys7Ci0JCQljdHgtPm9mZnNldCArPSBkYXRhX2xlbjsKLQkJCWRhdGFfbGVuID0gMDsKLQkJfQotCQlmaXJzdF9sYXAgPSAwOwotCX0KLQkoKHN0cnVjdCB0Y3BoZHIgKillZGRwLT50aF9pbl9jdHgpLT5jaGVjayA9IGNzdW1fZm9sZChoY3N1bSk7Ci19Ci0KLXN0YXRpYyBfX3dzdW0KLXFldGhfZWRkcF9jaGVja190Y3A0X2hkcihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbikKLXsKLQlfX3dzdW0gcGhjc3VtOyAvKiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGNrdDQiKTsKLQllZGRwLT50aC50Y3AuaC5jaGVjayA9IDA7Ci0JLyogY29tcHV0ZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCi0JcGhjc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKGVkZHAtPm5oLmlwNC5oLnNhZGRyLCBlZGRwLT5uaC5pcDQuaC5kYWRkciwKLQkJCQkgICAgZWRkcC0+dGhsICsgZGF0YV9sZW4sIElQUFJPVE9fVENQLCAwKTsKLQkvKiBjb21wdXRlIGNoZWNrc3VtIG9mIHRjcCBoZWFkZXIgKi8KLQlyZXR1cm4gY3N1bV9wYXJ0aWFsKCh1OCAqKSZlZGRwLT50aCwgZWRkcC0+dGhsLCBwaGNzdW0pOwotfQotCi1zdGF0aWMgX193c3VtCi1xZXRoX2VkZHBfY2hlY2tfdGNwNl9oZHIoc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLCBpbnQgZGF0YV9sZW4pCi17Ci0JX19iZTMyIHByb3RvOwotCV9fd3N1bSBwaGNzdW07IC8qIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwY2t0NiIpOwotCWVkZHAtPnRoLnRjcC5oLmNoZWNrID0gMDsKLQkvKiBjb21wdXRlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoKHU4ICopJmVkZHAtPm5oLmlwNi5oLnNhZGRyLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIDApOwotCXBoY3N1bSA9IGNzdW1fcGFydGlhbCgodTggKikmZWRkcC0+bmguaXA2LmguZGFkZHIsCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgcGhjc3VtKTsKLQlwcm90byA9IGh0b25sKElQUFJPVE9fVENQKTsKLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoKHU4ICopJnByb3RvLCBzaXplb2YodTMyKSwgcGhjc3VtKTsKLQlyZXR1cm4gcGhjc3VtOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfZWRkcF9kYXRhICoKLXFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHN0cnVjdCBxZXRoX2hkciAqcWgsIHU4ICpuaCwgdTggbmhsLCB1OCAqdGgsIHU4IHRobCkKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGNyZGEiKTsKLQllZGRwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9kYXRhKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGVkZHApewotCQllZGRwLT5uaGwgPSBuaGw7Ci0JCWVkZHAtPnRobCA9IHRobDsKLQkJbWVtY3B5KCZlZGRwLT5xaCwgcWgsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQkJbWVtY3B5KCZlZGRwLT5uaCwgbmgsIG5obCk7Ci0JCW1lbWNweSgmZWRkcC0+dGgsIHRoLCB0aGwpOwotCQllZGRwLT5mcmFnID0gLTE7IC8qIGluaXRpYWxseSB3ZSdyZSBpbiBza2ItPmRhdGEgKi8KLQl9Ci0JcmV0dXJuIGVkZHA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX3FldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQkJICAgICBzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHApCi17Ci0Jc3RydWN0IHRjcGhkciAqdGNwaDsKLQlpbnQgZGF0YV9sZW47Ci0JX193c3VtIGhjc3VtOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBmdGNwIik7Ci0JZWRkcC0+c2tiX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgZWRkcC0+bmhsICsgZWRkcC0+dGhsOwotICAgICAgIGlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpIHsKLSAgICAgICAgICAgICAgIGVkZHAtPnNrYl9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpOwotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLSAgICAgICAgICAgICAgIGlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKLSAgICAgICAgICAgICAgICAgICAgICAgZWRkcC0+c2tiX29mZnNldCArPSBWTEFOX0hMRU47Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfVkxBTiAqLwotICAgICAgIH0KLQl0Y3BoID0gdGNwX2hkcihlZGRwLT5za2IpOwotCXdoaWxlIChlZGRwLT5za2Jfb2Zmc2V0IDwgZWRkcC0+c2tiLT5sZW4pIHsKLQkJZGF0YV9sZW4gPSBtaW4oKGludClza2Jfc2hpbmZvKGVkZHAtPnNrYiktPmdzb19zaXplLAotCQkJICAgICAgIChpbnQpKGVkZHAtPnNrYi0+bGVuIC0gZWRkcC0+c2tiX29mZnNldCkpOwotCQkvKiBwcmVwYXJlIHFkaW8gaGRyICovCi0JCWlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpewotCQkJZWRkcC0+cWguaGRyLmwyLnBrdF9sZW5ndGggPSBkYXRhX2xlbiArIEVUSF9ITEVOICsKLQkJCQkJCSAgICAgZWRkcC0+bmhsICsgZWRkcC0+dGhsOwotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQkJCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkKLQkJCQllZGRwLT5xaC5oZHIubDIucGt0X2xlbmd0aCArPSBWTEFOX0hMRU47Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfVkxBTiAqLwotCQl9IGVsc2UKLQkJCWVkZHAtPnFoLmhkci5sMy5sZW5ndGggPSBkYXRhX2xlbiArIGVkZHAtPm5obCArCi0JCQkJCQkgZWRkcC0+dGhsOwotCQkvKiBwcmVwYXJlIGlwIGhkciAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpewotCQkJZWRkcC0+bmguaXA0LmgudG90X2xlbiA9IGh0b25zKGRhdGFfbGVuICsgZWRkcC0+bmhsICsKLQkJCQkJCSBlZGRwLT50aGwpOwotCQkJZWRkcC0+bmguaXA0LmguY2hlY2sgPSAwOwotCQkJZWRkcC0+bmguaXA0LmguY2hlY2sgPQotCQkJCWlwX2Zhc3RfY3N1bSgodTggKikmZWRkcC0+bmguaXA0LmgsCi0JCQkJCQllZGRwLT5uaC5pcDQuaC5paGwpOwotCQl9IGVsc2UKLQkJCWVkZHAtPm5oLmlwNi5oLnBheWxvYWRfbGVuID0gaHRvbnMoZGF0YV9sZW4gKyBlZGRwLT50aGwpOwotCQkvKiBwcmVwYXJlIHRjcCBoZHIgKi8KLQkJaWYgKGRhdGFfbGVuID09IChlZGRwLT5za2ItPmxlbiAtIGVkZHAtPnNrYl9vZmZzZXQpKXsKLQkJCS8qIGxhc3Qgc2VnbWVudCAtPiBzZXQgRklOIGFuZCBQU0ggZmxhZ3MgKi8KLQkJCWVkZHAtPnRoLnRjcC5oLmZpbiA9IHRjcGgtPmZpbjsKLQkJCWVkZHAtPnRoLnRjcC5oLnBzaCA9IHRjcGgtPnBzaDsKLQkJfQotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCQloY3N1bSA9IHFldGhfZWRkcF9jaGVja190Y3A0X2hkcihlZGRwLCBkYXRhX2xlbik7Ci0JCWVsc2UKLQkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKGVkZHAsIGRhdGFfbGVuKTsKLQkJLyogZmlsbCB0aGUgbmV4dCBzZWdtZW50IGludG8gdGhlIGNvbnRleHQgKi8KLQkJcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2hkcnMoY3R4LCBlZGRwLCBkYXRhX2xlbik7Ci0JCXFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChjdHgsIGVkZHAsIGRhdGFfbGVuLCBoY3N1bSk7Ci0JCWlmIChlZGRwLT5za2Jfb2Zmc2V0ID49IGVkZHAtPnNrYi0+bGVuKQotCQkJYnJlYWs7Ci0JCS8qIHByZXBhcmUgaGVhZGVycyBmb3IgbmV4dCByb3VuZCAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCQllZGRwLT5uaC5pcDQuaC5pZCA9IGh0b25zKG50b2hzKGVkZHAtPm5oLmlwNC5oLmlkKSArIDEpOwotCQllZGRwLT50aC50Y3AuaC5zZXEgPSBodG9ubChudG9obChlZGRwLT50aC50Y3AuaC5zZXEpICsgZGF0YV9sZW4pOwotCX0KLX0KLQotc3RhdGljIGludAotcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwID0gTlVMTDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwZmljeCIpOwotCS8qIGNyZWF0ZSBvdXIgc2VnbWVudGF0aW9uIGhlYWRlcnMgYW5kIGNvcHkgb3JpZ2luYWwgaGVhZGVycyAqLwotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJZWRkcCA9IHFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHFoZHIsCi0JCQkJCQkgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLAotCQkJCQkJICBpcF9oZHJsZW4oc2tiKSwKLQkJCQkJCSAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKLQkJCQkJCSAgdGNwX2hkcmxlbihza2IpKTsKLQllbHNlCi0JCWVkZHAgPSBxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShxaGRyLAotCQkJCQkJICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwKLQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKLQkJCQkJCSAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKLQkJCQkJCSAgdGNwX2hkcmxlbihza2IpKTsKLQotCWlmIChlZGRwID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImVkZHBmY25tIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlpZiAocWhkci0+aGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQkJbWVtY3B5KCZlZGRwLT5tYWMsIGV0aF9oZHIoc2tiKSwgRVRIX0hMRU4pOwotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCQllZGRwLT52bGFuWzBdID0gc2tiLT5wcm90b2NvbDsKLQkJCWVkZHAtPnZsYW5bMV0gPSBodG9ucyh2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfUUVUSF9WTEFOICovCi0JfQotCS8qIHRoZSBuZXh0IGZsYWdzIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIGxhc3Qgc2VnbWVudCAqLwotCWVkZHAtPnRoLnRjcC5oLmZpbiA9IDA7Ci0JZWRkcC0+dGgudGNwLmgucHNoID0gMDsKLQllZGRwLT5za2IgPSBza2I7Ci0JLyogYmVnaW4gc2VnbWVudGF0aW9uIGFuZCBmaWxsIGNvbnRleHQgKi8KLQlfX3FldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgZWRkcCk7Ci0Ja2ZyZWUoZWRkcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2VkZHBfY2FsY19udW1fcGFnZXMoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgaW50IGhkcl9sZW4pCi17Ci0JaW50IHNrYnNfcGVyX3BhZ2U7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGNhbnAiKTsKLQkvKiBjYW4gd2UgcHV0IG11bHRpcGxlIHNrYnMgaW4gb25lIHBhZ2U/ICovCi0Jc2tic19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICsgaGRyX2xlbik7Ci0JaWYgKHNrYnNfcGVyX3BhZ2UgPiAxKXsKLQkJY3R4LT5udW1fcGFnZXMgPSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpIC8KLQkJCQkgc2tic19wZXJfcGFnZSArIDE7Ci0JCWN0eC0+ZWxlbWVudHNfcGVyX3NrYiA9IDE7Ci0JfSBlbHNlIHsKLQkJLyogbm8gLT4gaG93IG1hbnkgZWxlbWVudHMgcGVyIHNrYj8gKi8KLQkJY3R4LT5lbGVtZW50c19wZXJfc2tiID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgKyBoZHJfbGVuICsKLQkJCQkgICAgIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVDsKLQkJY3R4LT5udW1fcGFnZXMgPSBjdHgtPmVsZW1lbnRzX3Blcl9za2IgKgotCQkJCSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpOwotCX0KLQljdHgtPm51bV9lbGVtZW50cyA9IGN0eC0+ZWxlbWVudHNfcGVyX3NrYiAqCi0JCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqCi1xZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBpbnQgaGRyX2xlbikKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7Ci0JdTggKmFkZHI7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiY3JlZGRwY2ciKTsKLQkvKiBjcmVhdGUgdGhlIGNvbnRleHQgYW5kIGFsbG9jYXRlIHBhZ2VzICovCi0JY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGN0eCA9PSBOVUxMKXsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImNlZGRwY24xIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQljdHgtPnR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQlxZXRoX2VkZHBfY2FsY19udW1fcGFnZXMoY3R4LCBza2IsIGhkcl9sZW4pOwotCWlmIChjdHgtPmVsZW1lbnRzX3Blcl9za2IgPiBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkpewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2VkZHBjaXMiKTsKLQkJa2ZyZWUoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWN0eC0+cGFnZXMgPSBrY2FsbG9jKGN0eC0+bnVtX3BhZ2VzLCBzaXplb2YodTggKiksIEdGUF9BVE9NSUMpOwotCWlmIChjdHgtPnBhZ2VzID09IE5VTEwpewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2VkZHBjbjIiKTsKLQkJa2ZyZWUoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9wYWdlczsgKytpKXsKLQkJYWRkciA9ICh1OCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKGFkZHIgPT0gTlVMTCl7Ci0JCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2VkZHBjbjMiKTsKLQkJCWN0eC0+bnVtX3BhZ2VzID0gaTsKLQkJCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCW1lbXNldChhZGRyLCAwLCBQQUdFX1NJWkUpOwotCQljdHgtPnBhZ2VzW2ldID0gYWRkcjsKLQl9Ci0JY3R4LT5lbGVtZW50cyA9IGtjYWxsb2MoY3R4LT5udW1fZWxlbWVudHMsCi0JCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCksIEdGUF9BVE9NSUMpOwotCWlmIChjdHgtPmVsZW1lbnRzID09IE5VTEwpewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2VkZHBjbjQiKTsKLQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyogcmVzZXQgbnVtX2VsZW1lbnRzOyB3aWxsIGJlIGluY3JlbWVudGVkIGFnYWluIGluIGZpbGxfYnVmZmVyIHRvCi0JICogcmVmbGVjdCBudW1iZXIgb2YgYWN0dWFsbHkgdXNlZCBlbGVtZW50cyAqLwotCWN0eC0+bnVtX2VsZW1lbnRzID0gMDsKLQlyZXR1cm4gY3R4OwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICoKLXFldGhfZWRkcF9jcmVhdGVfY29udGV4dF90Y3Aoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgc3RydWN0IHFldGhfaGRyICpxaGRyKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJjcmVkZHBjdCIpOwotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoY2FyZCwgc2tiLAotCQkJCQkJICAgICAgIChzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCi0JCQkJCQkgICAgICAgIGlwX2hkcmxlbihza2IpICsKLQkJCQkJCQl0Y3BfaGRybGVuKHNrYikpKTsKLQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfZ2VuZXJpYyhjYXJkLCBza2IsCi0JCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKwotCQkJdGNwX2hkcmxlbihza2IpKTsKLQllbHNlCi0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJjZXRjcGludiIpOwotCi0JaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJjcmVkZHBubCIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKHFldGhfZWRkcF9maWxsX2NvbnRleHRfdGNwKGN0eCwgc2tiLCBxaGRyKSl7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJjZWRkcHRmZSIpOwotCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlhdG9taWNfc2V0KCZjdHgtPnJlZmNudCwgMSk7Ci0JcmV0dXJuIGN0eDsKLX0KLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICoKLXFldGhfZWRkcF9jcmVhdGVfY29udGV4dChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHN0cnVjdCBxZXRoX2hkciAqcWhkciwgdW5zaWduZWQgY2hhciBza19wcm90b2NvbCkKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiY3JlZGRwYyIpOwotCXN3aXRjaCAoc2tfcHJvdG9jb2wpIHsKLQljYXNlIElQUFJPVE9fVENQOgotCQlyZXR1cm4gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X3RjcChjYXJkLCBza2IsIHFoZHIpOwotCWRlZmF1bHQ6Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJlZGRwaW52cCIpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjkxMGM5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuaAotICoKLSAqIEhlYWRlciBmaWxlIGZvciBxZXRoIGVuaGFuY2VkIGRldmljZSBkcml2ZXIgcGFja2luZy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiAgICBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KLSAqCi0gKi8KLSNpZm5kZWYgX19RRVRIX0VERFBfSF9fCi0jZGVmaW5lIF9fUUVUSF9FRERQX0hfXwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgewotCXUzMiBmbGFnczsKLQl1MzIgbGVuZ3RoOwotCXZvaWQgKmFkZHI7Ci19OwotCi1zdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgewotCWF0b21pY190IHJlZmNudDsKLQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB0eXBlOwotCWludCBudW1fcGFnZXM7CQkJICAgIC8qICMgb2YgYWxsb2NhdGVkIHBhZ2VzICovCi0JdTggKipwYWdlczsJCQkgICAgLyogcG9pbnRlcnMgdG8gcGFnZXMgKi8KLQlpbnQgb2Zmc2V0OwkJCSAgICAvKiBvZmZzZXQgaW4gY3R4IGR1cmluZyBjcmVhdGlvbiAqLwotCWludCBudW1fZWxlbWVudHM7CQkgICAgLyogIyBvZiByZXF1aXJlZCAnU0JBTEVzJyAqLwotCXN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCAqZWxlbWVudHM7IC8qIGFycmF5IG9mICdTQkFMRXMnICovCi0JaW50IGVsZW1lbnRzX3Blcl9za2I7CQkgICAgLyogIyBvZiAnU0JBTEVzJyBwZXIgc2tiICoqLwotfTsKLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4OwotfTsKLQotZXh0ZXJuIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqCi1xZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqLHN0cnVjdCBza19idWZmICosCi0JCQkgc3RydWN0IHFldGhfaGRyICosIHVuc2lnbmVkIGNoYXIpOwotCi1leHRlcm4gdm9pZAotcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKLQotZXh0ZXJuIGludAotcWV0aF9lZGRwX2ZpbGxfYnVmZmVyKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKixzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKixpbnQpOwotCi1leHRlcm4gdm9pZAotcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqKTsKLQotZXh0ZXJuIGludAotcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQkJCSAgICBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKik7Ci0vKgotICogRGF0YSB1c2VkIGZvciBmcmFnbWVudGluZyBhIElQIHBhY2tldC4KLSAqLwotc3RydWN0IHFldGhfZWRkcF9kYXRhIHsKLQlzdHJ1Y3QgcWV0aF9oZHIgcWg7Ci0Jc3RydWN0IGV0aGhkciBtYWM7Ci0JX19iZTE2IHZsYW5bMl07Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJc3RydWN0IGlwaGRyIGg7Ci0JCQl1OCBvcHRpb25zWzQwXTsKLQkJfSBpcDQ7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgaXB2NmhkciBoOwotCQl9IGlwNjsKLQl9IG5oOwotCXU4IG5obDsKLQl2b2lkICpuaF9pbl9jdHg7CS8qIGFkZHJlc3Mgb2Ygbmggd2l0aGluIHRoZSBjdHggKi8KLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgdGNwaGRyIGg7Ci0JCQl1OCBvcHRpb25zWzQwXTsKLQkJfSB0Y3A7Ci0JfSB0aDsKLQl1OCB0aGw7Ci0Jdm9pZCAqdGhfaW5fY3R4OwkvKiBhZGRyZXNzIG9mIHRoIHdpdGhpbiB0aGUgY3R4ICovCi0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgc2tiX29mZnNldDsKLQlpbnQgZnJhZzsKLQlpbnQgZnJhZ19vZmZzZXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2VuZGlmIC8qIF9fUUVUSF9FRERQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2ZzLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYWYwNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX2ZzLmgKLSAqCi0gKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydC4KLSAqCi0gKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gc3lzZnMgYW5kIHByb2Nmcy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCwyMDAzIElCTSBDb3Jwb3JhdGlvbgotICogQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKgotICovCi0jaWZuZGVmIF9fUUVUSF9GU19IX18KLSNkZWZpbmUgX19RRVRIX0ZTX0hfXwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLWV4dGVybiBpbnQKLXFldGhfY3JlYXRlX3Byb2Nmc19lbnRyaWVzKHZvaWQpOwotCi1leHRlcm4gdm9pZAotcWV0aF9yZW1vdmVfcHJvY2ZzX2VudHJpZXModm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQKLXFldGhfY3JlYXRlX3Byb2Nmc19lbnRyaWVzKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF9yZW1vdmVfcHJvY2ZzX2VudHJpZXModm9pZCkKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi1leHRlcm4gaW50Ci1xZXRoX2NyZWF0ZV9kZXZpY2VfYXR0cmlidXRlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1leHRlcm4gdm9pZAotcWV0aF9yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KTsKLQotZXh0ZXJuIGludAotcWV0aF9jcmVhdGVfZGV2aWNlX2F0dHJpYnV0ZXNfb3NuKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLWV4dGVybiB2b2lkCi1xZXRoX3JlbW92ZV9kZXZpY2VfYXR0cmlidXRlc19vc24oc3RydWN0IGRldmljZSAqZGV2KTsKLQotZXh0ZXJuIGludAotcWV0aF9jcmVhdGVfZHJpdmVyX2F0dHJpYnV0ZXModm9pZCk7Ci0KLWV4dGVybiB2b2lkCi1xZXRoX3JlbW92ZV9kcml2ZXJfYXR0cmlidXRlcyh2b2lkKTsKLQotLyoKLSAqIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgaW4gcWV0aF9wcm9jLmMgYW5kIHFldGhfc3lzLmMKLSAqLwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgotcWV0aF9nZXRfY2hlY2tzdW1fc3RyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBTV19DSEVDS1NVTU1JTkcpCi0JCXJldHVybiAic3ciOwotCWVsc2UgaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBIV19DSEVDS1NVTU1JTkcpCi0JCXJldHVybiAiaHciOwotCWVsc2UKLQkJcmV0dXJuICJubyI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCi1xZXRoX2dldF9wcmlvcV9zdHIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgY2hhciAqYnVmKQotewotCWlmIChjYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPT0gUUVUSF9OT19QUklPX1FVRVVFSU5HKQotCQlzcHJpbnRmKGJ1ZiwgImFsd2F5c19xXyVpIiwgY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSk7Ci0JZWxzZQotCQlzdHJjcHkoYnVmLCAoY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nID09Ci0JCQkJCVFFVEhfUFJJT19RX0lOR19QUkVDKT8KLQkJCQkiYnlfcHJlYy4iIDogImJ5X1RvUyIpOwotCXJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCi1xZXRoX2dldF9idWZzaXplX3N0cihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWlmIChjYXJkLT5xZGlvLmluX2J1Zl9zaXplID09IDE2Mzg0KQotCQlyZXR1cm4gIjE2ayI7Ci0JZWxzZSBpZiAoY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9PSAyNDU3NikKLQkJcmV0dXJuICIyNGsiOwotCWVsc2UgaWYgKGNhcmQtPnFkaW8uaW5fYnVmX3NpemUgPT0gMzI3NjgpCi0JCXJldHVybiAiMzJrIjsKLQllbHNlIGlmIChjYXJkLT5xZGlvLmluX2J1Zl9zaXplID09IDQwOTYwKQotCQlyZXR1cm4gIjQwayI7Ci0JZWxzZQotCQlyZXR1cm4gIjY0ayI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCi1xZXRoX2dldF9jYXJkbmFtZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotIAlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikgewotIAkJc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKLSAJCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKLQkJCXJldHVybiAiIEd1ZXN0IExBTiBRRElPIjsKLSAJCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQkJcmV0dXJuICIgR3Vlc3QgTEFOIEhpcGVyIjsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAiIHVua25vd24iOwotIAkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKSB7Ci0JCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKLQkJCXJldHVybiAiIE9TRCBFeHByZXNzIjsKLQkJY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6Ci0JCQlyZXR1cm4gIiBIaXBlclNvY2tldHMiOwotCQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKLQkJCXJldHVybiAiIE9TTiBRRElPIjsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAiIHVua25vd24iOwotCQl9Ci0JfQotCXJldHVybiAiIG4vYSI7Ci19Ci0KLS8qIG1heCBsZW5ndGggdG8gYmUgcmV0dXJuZWQ6IDE0ICovCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgotcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbil7Ci0JCXN3aXRjaCAoY2FyZC0+aW5mby50eXBlKXsKLQkJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0FFOgotCQkJcmV0dXJuICJHdWVzdExBTiBRRElPIjsKLQkJY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6Ci0JCQlyZXR1cm4gIkd1ZXN0TEFOIEhpcGVyIjsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAidW5rbm93biI7Ci0JCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKGNhcmQtPmluZm8udHlwZSkgewotCQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6Ci0JCQlzd2l0Y2ggKGNhcmQtPmluZm8ubGlua190eXBlKSB7Ci0JCQljYXNlIFFFVEhfTElOS19UWVBFX0ZBU1RfRVRIOgotCQkJCXJldHVybiAiT1NEXzEwMCI7Ci0JCQljYXNlIFFFVEhfTElOS19UWVBFX0hTVFI6Ci0JCQkJcmV0dXJuICJIU1RSIjsKLQkJCWNhc2UgUUVUSF9MSU5LX1RZUEVfR0JJVF9FVEg6Ci0JCQkJcmV0dXJuICJPU0RfMTAwMCI7Ci0JCQljYXNlIFFFVEhfTElOS19UWVBFXzEwR0JJVF9FVEg6Ci0JCQkJcmV0dXJuICJPU0RfMTBHSUciOwotCQkJY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FX0VUSDEwMDoKLQkJCQlyZXR1cm4gIk9TRF9GRV9MQU5FIjsKLQkJCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKLQkJCQlyZXR1cm4gIk9TRF9UUl9MQU5FIjsKLQkJCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9FVEgxMDAwOgotCQkJCXJldHVybiAiT1NEX0diRV9MQU5FIjsKLQkJCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORToKLQkJCQlyZXR1cm4gIk9TRF9BVE1fTEFORSI7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAiT1NEX0V4cHJlc3MiOwotCQkJfQotCQljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQkJCXJldHVybiAiSGlwZXJTb2NrZXRzIjsKLQkJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046Ci0JCQlyZXR1cm4gIk9TTiI7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gInVua25vd24iOwotCQl9Ci0JfQotCXJldHVybiAibi9hIjsKLX0KLQotI2VuZGlmIC8qIF9fUUVUSF9GU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MjFkMTYzMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTAsMCArMSwxMjM0IEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKKyAqICAgIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPiwKKyAqCQkgRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+LAorICoJCSBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAorICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKworI2luY2x1ZGUgPGFzbS9zMzkwX3JkZXYuaD4KKworI2luY2x1ZGUgInFldGhfY29yZS5oIgorI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCisKKyNkZWZpbmUgUUVUSF9EQkZfVFhUX0JVRiBxZXRoX2wyX2RiZl90eHRfYnVmCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhclsyNTZdLCBxZXRoX2wyX2RiZl90eHRfYnVmKTsKKworc3RhdGljIGludCBxZXRoX2wyX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKik7CitzdGF0aWMgaW50IHFldGhfbDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICosIF9fdTggKik7CitzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqLCBfX3U4ICosCisJCQkgICBlbnVtIHFldGhfaXBhX2NtZHMsCisJCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKKwkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKTsKK3N0YXRpYyB2b2lkIHFldGhfbDJfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIGludCBxZXRoX2wyX3JlY292ZXIodm9pZCAqKTsKKworc3RhdGljIGludCBxZXRoX2wyX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlfZGF0YTsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkgJiYKKwkJKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKKwkJcmV0dXJuIC1FUEVSTTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DX1FFVEhfQURQX1NFVF9TTk1QX0NPTlRST0w6CisJCXJjID0gcWV0aF9zbm1wX2NvbW1hbmQoY2FyZCwgcnEtPmlmcl9pZnJ1LmlmcnVfZGF0YSk7CisJCWJyZWFrOworCWNhc2UgU0lPQ19RRVRIX0dFVF9DQVJEX1RZUEU6CisJCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TQUUpICYmCisJCSAgICAhY2FyZC0+aW5mby5ndWVzdGxhbikKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR01JSVBIWToKKwkJbWlpX2RhdGEgPSBpZl9taWkocnEpOworCQltaWlfZGF0YS0+cGh5X2lkID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR01JSVJFRzoKKwkJbWlpX2RhdGEgPSBpZl9taWkocnEpOworCQlpZiAobWlpX2RhdGEtPnBoeV9pZCAhPSAwKQorCQkJcmMgPSAtRUlOVkFMOworCQllbHNlCisJCQltaWlfZGF0YS0+dmFsX291dCA9IHFldGhfbWRpb19yZWFkKGRldiwKKwkJCQltaWlfZGF0YS0+cGh5X2lkLCBtaWlfZGF0YS0+cmVnX251bSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVPUE5PVFNVUFA7CisJfQorCWlmIChyYykKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJpb2NlJWQiLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDJfdmVyaWZ5X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnFldGhfY29yZV9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmcWV0aF9jb3JlX2NhcmRfbGlzdC5saXN0LCBsaXN0KSB7CisJCWlmIChjYXJkLT5kZXYgPT0gZGV2KSB7CisJCQlyYyA9IFFFVEhfUkVBTF9DQVJEOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jb3JlX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpxZXRoX2wyX25ldGRldl9ieV9kZXZubyh1bnNpZ25lZCBjaGFyICpyZWFkX2Rldl9ubykKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXVuc2lnbmVkIGNoYXIgKnJlYWRubzsKKwlfX3UxNiB0ZW1wX2Rldl9ubywgY2FyZF9kZXZfbm87CisJY2hhciAqZW5kcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbmRldiA9IE5VTEw7CisJbWVtY3B5KCZ0ZW1wX2Rldl9ubywgcmVhZF9kZXZfbm8sIDIpOworCXJlYWRfbG9ja19pcnFzYXZlKCZxZXRoX2NvcmVfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FyZCwgJnFldGhfY29yZV9jYXJkX2xpc3QubGlzdCwgbGlzdCkgeworCQlyZWFkbm8gPSBDQVJEX1JERVZfSUQoY2FyZCk7CisJCXJlYWRubyArPSAoc3RybGVuKHJlYWRubykgLSA0KTsKKwkJY2FyZF9kZXZfbm8gPSBzaW1wbGVfc3RydG91bChyZWFkbm8sICZlbmRwLCAxNik7CisJCWlmIChjYXJkX2Rldl9ubyA9PSB0ZW1wX2Rldl9ubykgeworCQkJbmRldiA9IGNhcmQtPmRldjsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnFldGhfY29yZV9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7CisJcmV0dXJuIG5kZXY7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisJX191OCAqbWFjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyU2dtYWNiIik7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwltYWMgPSAmY21kLT5kYXRhLnNldGRlbG1hYy5tYWNbMF07CisJLyogTUFDIGFscmVhZHkgcmVnaXN0ZXJlZCwgbmVlZGVkIGluIGNvdXBsZS91bmNvdXBsZSBjYXNlICovCisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09IDB4MjAwNSkgeworCQlQUklOVF9XQVJOKCJHcm91cCBNQUMgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggIiBcCisJCQkgICJhbHJlYWR5IGV4aXN0aW5nIG9uICVzIFxuIiwKKwkJCSAgbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwKKwkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gMDsKKwl9CisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKQorCQlQUklOVF9FUlIoIkNvdWxkIG5vdCBzZXQgZ3JvdXAgTUFDICIgXAorCQkJICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggb24gJXM6ICV4XG4iLAorCQkJICBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdLAorCQkJICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKK3sKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiTDJTZ21hYyIpOworCXJldHVybiBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKGNhcmQsIG1hYywgSVBBX0NNRF9TRVRHTUFDLAorCQkJCQkgIHFldGhfbDJfc2VuZF9zZXRncm91cG1hY19jYik7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbGdyb3VwbWFjX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisJX191OCAqbWFjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyRGdtYWNiIik7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwltYWMgPSAmY21kLT5kYXRhLnNldGRlbG1hYy5tYWNbMF07CisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKQorCQlQUklOVF9FUlIoIkNvdWxkIG5vdCBkZWxldGUgZ3JvdXAgTUFDICIgXAorCQkJICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggb24gJXM6ICV4XG4iLAorCQkJICBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdLAorCQkJICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbGdyb3VwbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKK3sKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiTDJEZ21hYyIpOworCXJldHVybiBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKGNhcmQsIG1hYywgSVBBX0NNRF9ERUxHTUFDLAorCQkJCQkgIHFldGhfbDJfc2VuZF9kZWxncm91cG1hY19jYik7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDJfYWRkX21jKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKK3sKKwlzdHJ1Y3QgcWV0aF9tY19tYWMgKm1jOworCisJbWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9tY19tYWMpLCBHRlBfQVRPTUlDKTsKKworCWlmICghbWMpIHsKKwkJUFJJTlRfRVJSKCJubyBtZW0gdm9yIG1jIG1hYyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1lbWNweShtYy0+bWNfYWRkciwgbWFjLCBPU0FfQUREUl9MRU4pOworCW1jLT5tY19hZGRybGVuID0gT1NBX0FERFJfTEVOOworCisJaWYgKCFxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWMoY2FyZCwgbWFjKSkKKwkJbGlzdF9hZGRfdGFpbCgmbWMtPmxpc3QsICZjYXJkLT5tY19saXN0KTsKKwllbHNlCisJCWtmcmVlKG1jKTsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sMl9kZWxfYWxsX21jKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHFldGhfbWNfbWFjICptYywgKnRtcDsKKworCXNwaW5fbG9ja19iaCgmY2FyZC0+bWNsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWMsIHRtcCwgJmNhcmQtPm1jX2xpc3QsIGxpc3QpIHsKKwkJcWV0aF9sMl9zZW5kX2RlbGdyb3VwbWFjKGNhcmQsIG1jLT5tY19hZGRyKTsKKwkJbGlzdF9kZWwoJm1jLT5saXN0KTsKKwkJa2ZyZWUobWMpOworCX0KKwlzcGluX3VubG9ja19iaCgmY2FyZC0+bWNsb2NrKTsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sMl9nZXRfcGFja2V0X3R5cGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBxZXRoX2hkciAqaGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCV9fdTE2IGhkcl9tYWM7CisKKwlpZiAoIW1lbWNtcChza2ItPmRhdGEgKyBRRVRIX0hFQURFUl9TSVpFLAorCQkgICAgc2tiLT5kZXYtPmJyb2FkY2FzdCwgNikpIHsKKwkJLyogYnJvYWRjYXN0PyAqLworCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX0JST0FEQ0FTVDsKKwkJcmV0dXJuOworCX0KKwloZHJfbWFjID0gKigoX191MTYgKilza2ItPmRhdGEpOworCS8qIHRyIG11bHRpY2FzdD8gKi8KKwlzd2l0Y2ggKGNhcmQtPmluZm8ubGlua190eXBlKSB7CisJY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgorCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKKwkJaWYgKChoZHJfbWFjID09IFFFVEhfVFJfTUFDX05DKSB8fAorCQkgICAgKGhkcl9tYWMgPT0gUUVUSF9UUl9NQUNfQykpCisJCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX01VTFRJQ0FTVDsKKwkJZWxzZQorCQkJaGRyLT5oZHIubDIuZmxhZ3NbMl0gfD0gUUVUSF9MQVlFUjJfRkxBR19VTklDQVNUOworCQlicmVhazsKKwkJLyogZXRoIG9yIHNvIG11bHRpY2FzdD8gKi8KKwlkZWZhdWx0OgorCQlpZiAoKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y0KSB8fAorCQkgICAgIChoZHJfbWFjID09IFFFVEhfRVRIX01BQ19WNikpCisJCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX01VTFRJQ0FTVDsKKwkJZWxzZQorCQkJaGRyLT5oZHIubDIuZmxhZ3NbMl0gfD0gUUVUSF9MQVlFUjJfRkxBR19VTklDQVNUOworCX0KK30KKworc3RhdGljIHZvaWQgcWV0aF9sMl9maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKKwkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBpcHYsIGludCBjYXN0X3R5cGUpCit7CisJc3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKSgoc2tiLT5kYXRhKSArCisJCQkJCVFFVEhfSEVBREVSX1NJWkUpOworCisJbWVtc2V0KGhkciwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOworCWhkci0+aGRyLmwyLmlkID0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjI7CisKKwkvKiBzZXQgYnl0ZSBieXRlIDMgdG8gY2FzdGluZyBmbGFncyAqLworCWlmIChjYXN0X3R5cGUgPT0gUlROX01VTFRJQ0FTVCkKKwkJaGRyLT5oZHIubDIuZmxhZ3NbMl0gfD0gUUVUSF9MQVlFUjJfRkxBR19NVUxUSUNBU1Q7CisJZWxzZSBpZiAoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpCisJCWhkci0+aGRyLmwyLmZsYWdzWzJdIHw9IFFFVEhfTEFZRVIyX0ZMQUdfQlJPQURDQVNUOworCWVsc2UKKwkJcWV0aF9sMl9nZXRfcGFja2V0X3R5cGUoY2FyZCwgaGRyLCBza2IpOworCisJaGRyLT5oZHIubDIucGt0X2xlbmd0aCA9IHNrYi0+bGVuLVFFVEhfSEVBREVSX1NJWkU7CisJLyogVlNXSVRDSCByZWxpZXMgb24gdGhlIFZMQU4KKwkgKiBpbmZvcm1hdGlvbiB0byBiZSBwcmVzZW50IGluCisJICogdGhlIFFESU8gaGVhZGVyICovCisJaWYgKHZldGgtPmhfdmxhbl9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX1ZMQU47CisJCWhkci0+aGRyLmwyLnZsYW5faWQgPSBudG9ocyh2ZXRoLT5oX3ZsYW5fVENJKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldGRlbHZsYW5fY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJMMnNkdmNiIik7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKKwkJUFJJTlRfRVJSKCJFcnJvciBpbiBwcm9jZXNzaW5nIFZMQU4gJWkgb24gJXM6IDB4JXguICIKKwkJCSAgIkNvbnRpbnVpbmdcbiIsIGNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQsCisJCQkgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJMMlZMJTR4IiwgY21kLT5oZHIuY29tbWFuZCk7CisJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiTDIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJlcnIlZCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191MTYgaSwKKwkJCQllbnVtIHFldGhfaXBhX2NtZHMgaXBhY21kKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgIkwyc2R2JXgiLCBpcGFjbWQpOworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgaXBhY21kLCBRRVRIX1BST1RfSVBWNCk7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCWNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQgPSBpOworCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsCisJCQkJIHFldGhfbDJfc2VuZF9zZXRkZWx2bGFuX2NiLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sMl9wcm9jZXNzX3ZsYW5zKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQ7CisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgIkwycHJjdmxuIik7CisJc3Bpbl9sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmNhcmQtPnZpZF9saXN0LCBsaXN0KSB7CisJCWlmIChjbGVhcikKKwkJCXFldGhfbDJfc2VuZF9zZXRkZWx2bGFuKGNhcmQsIGlkLT52aWQsCisJCQkJSVBBX0NNRF9ERUxWTEFOKTsKKwkJZWxzZQorCQkJcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgaWQtPnZpZCwKKwkJCQlJUEFfQ01EX1NFVFZMQU4pOworCX0KKwlzcGluX3VubG9ja19iaCgmY2FyZC0+dmxhbmxvY2spOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wyX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHFldGhfdmxhbl92aWQgKmlkOworCisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJhaWQ6JWQiLCB2aWQpOworCWlkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfdmxhbl92aWQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoaWQpIHsKKwkJaWQtPnZpZCA9IHZpZDsKKwkJcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX1NFVFZMQU4pOworCQlzcGluX2xvY2tfYmgoJmNhcmQtPnZsYW5sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmaWQtPmxpc3QsICZjYXJkLT52aWRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CisJfSBlbHNlIHsKKwkJUFJJTlRfRVJSKCJubyBtZW1vcnkgZm9yIHZpZFxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBxZXRoX2wyX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQoreworCXN0cnVjdCBxZXRoX3ZsYW5fdmlkICppZCwgKnRtcGlkID0gTlVMTDsKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAia2lkOiVkIiwgdmlkKTsKKwlzcGluX2xvY2tfYmgoJmNhcmQtPnZsYW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlkLCAmY2FyZC0+dmlkX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlkLT52aWQgPT0gdmlkKSB7CisJCQlsaXN0X2RlbCgmaWQtPmxpc3QpOworCQkJdG1waWQgPSBpZDsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CisJaWYgKHRtcGlkKSB7CisJCXFldGhfbDJfc2VuZF9zZXRkZWx2bGFuKGNhcmQsIHZpZCwgSVBBX0NNRF9ERUxWTEFOKTsKKwkJa2ZyZWUodG1waWQpOworCX0KKwlxZXRoX2wyX3NldF9tdWx0aWNhc3RfbGlzdChjYXJkLT5kZXYpOworfQorCitzdGF0aWMgaW50IHFldGhfbDJfc3RvcF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZWNvdmVyeV9tb2RlKQoreworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQICwgMiwgInN0b3BjYXJkIik7CisJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOworCisJcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDAsIDEpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgflFFVEhfUkVDT1ZFUl9USFJFQUQpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChjYXJkLT5yZWFkLnN0YXRlID09IENIX1NUQVRFX1VQICYmCisJICAgIGNhcmQtPndyaXRlLnN0YXRlID09IENIX1NUQVRFX1VQICYmCisJICAgIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKSkgeworCQlpZiAocmVjb3ZlcnlfbW9kZSAmJgorCQkgICAgY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgeworCQkJcWV0aF9sMl9zdG9wKGNhcmQtPmRldik7CisJCX0gZWxzZSB7CisJCQlydG5sX2xvY2soKTsKKwkJCWRldl9jbG9zZShjYXJkLT5kZXYpOworCQkJcnRubF91bmxvY2soKTsKKwkJfQorCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3ApIHsKKwkJCV9fdTggKm1hYyA9ICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdOworCQkJcmMgPSBxZXRoX2wyX3NlbmRfZGVsbWFjKGNhcmQsIG1hYyk7CisJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIkxlcnIlZCIsIHJjKTsKKwkJfQorCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfU09GVFNFVFVQOworCX0KKwlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApIHsKKwkJcWV0aF9sMl9wcm9jZXNzX3ZsYW5zKGNhcmQsIDEpOworCQlxZXRoX2wyX2RlbF9hbGxfbWMoY2FyZCk7CisJCXFldGhfY2xlYXJfaXBhY21kX2xpc3QoY2FyZCk7CisJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9IQVJEU0VUVVA7CisJfQorCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX0hBUkRTRVRVUCkgeworCQlxZXRoX3FkaW9fY2xlYXJfY2FyZChjYXJkLCAwKTsKKwkJcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoY2FyZCk7CisJCXFldGhfY2xlYXJfd29ya2luZ19wb29sX2xpc3QoY2FyZCk7CisJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9ET1dOOworCX0KKwlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9ET1dOKSB7CisJCXFldGhfY2xlYXJfY21kX2J1ZmZlcnMoJmNhcmQtPnJlYWQpOworCQlxZXRoX2NsZWFyX2NtZF9idWZmZXJzKCZjYXJkLT53cml0ZSk7CisJfQorCWNhcmQtPnVzZV9oYXJkX3N0b3AgPSAwOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sMl9wcm9jZXNzX2luYm91bmRfYnVmZmVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQkgICAgc3RydWN0IHFldGhfcWRpb19idWZmZXIgKmJ1ZiwgaW50IGluZGV4KQoreworCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICplbGVtZW50OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHFldGhfaGRyICpoZHI7CisJaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJLyogZ2V0IGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBidWZmZXIgKi8KKwllbGVtZW50ID0gKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICopJmJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdOworCW9mZnNldCA9IDA7CisJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCisJCWNhcmQtPnBlcmZfc3RhdHMuYnVmc19yZWMrKzsKKwl3aGlsZSAoKHNrYiA9IHFldGhfY29yZV9nZXRfbmV4dF9za2IoY2FyZCwgYnVmLT5idWZmZXIsICZlbGVtZW50LAorCQkJCSAgICAgICAmb2Zmc2V0LCAmaGRyKSkpIHsKKwkJc2tiLT5kZXYgPSBjYXJkLT5kZXY7CisJCS8qIGlzIGRldmljZSBVUCA/ICovCisJCWlmICghKGNhcmQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJY29udGludWU7CisJCX0KKworCQlzd2l0Y2ggKGhkci0+aGRyLmwyLmlkKSB7CisJCWNhc2UgUUVUSF9IRUFERVJfVFlQRV9MQVlFUjI6CisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7CisJCQlpZiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IE5PX0NIRUNLU1VNTUlORykKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJZWxzZQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMl8yKSkKKwkJCQkqKChfX3UzMiAqKXNrYi0+Y2IpID0gKytjYXJkLT5zZXFuby5wa3Rfc2Vxbm87CisJCQlsZW4gPSBza2ItPmxlbjsKKwkJCW5ldGlmX3J4KHNrYik7CisJCQlicmVhazsKKwkJY2FzZSBRRVRIX0hFQURFUl9UWVBFX09TTjoKKwkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOworCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBoZHIsCisJCQkJCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7CisJCQlsZW4gPSBza2ItPmxlbjsKKwkJCWNhcmQtPm9zbl9pbmZvLmRhdGFfY2Ioc2tiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJpbmJ1bmtubyIpOworCQkJUUVUSF9EQkZfSEVYKENUUkwsIDMsIGhkciwgUUVUSF9EQkZfQ1RSTF9MRU4pOworCQkJY29udGludWU7CisJCX0KKwkJY2FyZC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJY2FyZC0+c3RhdHMucnhfcGFja2V0cysrOworCQljYXJkLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisJfQorfQorCitzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191OCAqbWFjLAorCQkJICAgZW51bSBxZXRoX2lwYV9jbWRzIGlwYWNtZCwKKwkJCSAgIGludCAoKnJlcGx5X2NiKSAoc3RydWN0IHFldGhfY2FyZCAqLAorCQkJCQkgICAgc3RydWN0IHFldGhfcmVwbHkqLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZykpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJMMnNkbWFjIik7CisJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIFFFVEhfUFJPVF9JUFY0KTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLnNldGRlbG1hYy5tYWNfbGVuZ3RoID0gT1NBX0FERFJfTEVOOworCW1lbWNweSgmY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsIG1hYywgT1NBX0FERFJfTEVOKTsKKwlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCByZXBseV9jYiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJMMlNtYWNjYiIpOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7CisJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiTDJlciV4IiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCQljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKKwkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRUlPOworCX0gZWxzZSB7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgfD0gUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CisJCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLCBjbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYywKKwkJICAgICAgIE9TQV9BRERSX0xFTik7CisJCVBSSU5UX0lORk8oIk1BQyBhZGRyZXNzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4ICIKKwkJCSAgICJzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBvbiBkZXZpY2UgJXNcbiIsCisJCQkgICBjYXJkLT5kZXYtPmRldl9hZGRyWzBdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzFdLAorCQkJICAgY2FyZC0+ZGV2LT5kZXZfYWRkclsyXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclszXSwKKwkJCSAgIGNhcmQtPmRldi0+ZGV2X2FkZHJbNF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbNV0sCisJCQkgICBjYXJkLT5kZXYtPm5hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wyX3NlbmRfc2V0bWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKK3sKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiTDJTZXRtYWMiKTsKKwlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUVk1BQywKKwkJCQkJICBxZXRoX2wyX3NlbmRfc2V0bWFjX2NiKTsKK30KKworc3RhdGljIGludCBxZXRoX2wyX3NlbmRfZGVsbWFjX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQkgICBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCisJCQkgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkwyRG1hY2NiIik7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJlcnIlZCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRUlPOworCQlyZXR1cm4gMDsKKwl9CisJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wyX3NlbmRfZGVsbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKK3sKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiTDJEZWxtYWMiKTsKKwlpZiAoIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfREVMVk1BQywKKwkJCQkJICBxZXRoX2wyX3NlbmRfZGVsbWFjX2NiKTsKK30KKworc3RhdGljIGludCBxZXRoX2wyX3JlcXVlc3RfaW5pdGlhbF9tYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmMgPSAwOworCWNoYXIgdmVuZG9yX3ByZVtdID0gezB4MDIsIDB4MDAsIDB4MDB9OworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImRvTDJpbml0Iik7CisJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICJkb0wyJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisKKwlyYyA9IHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKGNhcmQpOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJjb3VsZCBub3QgcXVlcnkgYWRhcHRlciBwYXJhbWV0ZXJzIG9uIGRldmljZSAlczogIgorCQkJICAgIngleFxuIiwgQ0FSRF9CVVNfSUQoY2FyZCksIHJjKTsKKwl9CisKKwlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikgeworCQlyYyA9IHFldGhfc2V0YWRwcGFybXNfY2hhbmdlX21hY2FkZHIoY2FyZCk7CisJCWlmIChyYykgeworCQkJUFJJTlRfV0FSTigiY291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIG9uICIKKwkJCSAgICJkZXZpY2UgJXM6IHgleFxuIiwKKwkJCSAgIENBUkRfQlVTX0lEKGNhcmQpLCByYyk7CisJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsIGNhcmQtPmRldi0+ZGV2X2FkZHIsIE9TQV9BRERSX0xFTik7CisJfSBlbHNlIHsKKwkJcmFuZG9tX2V0aGVyX2FkZHIoY2FyZC0+ZGV2LT5kZXZfYWRkcik7CisJCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLCB2ZW5kb3JfcHJlLCAzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bWFjIik7CisKKwlpZiAocWV0aF9sMl92ZXJpZnlfZGV2KGRldikgIT0gUUVUSF9SRUFMX0NBUkQpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG1jSU5WIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikgeworCQlQUklOVF9XQVJOKCJTZXR0aW5nIE1BQyBhZGRyZXNzIG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQuXG4iLAorCQkJICAgZGV2LT5uYW1lKTsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG1jT1NOIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDMsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlRRVRIX0RCRl9IRVgoVFJBQ0UsIDMsIGFkZHItPnNhX2RhdGEsIE9TQV9BRERSX0xFTik7CisJcmMgPSBxZXRoX2wyX3NlbmRfZGVsbWFjKGNhcmQsICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdKTsKKwlpZiAoIXJjKQorCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRtYWMoY2FyZCwgYWRkci0+c2FfZGF0YSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG07CisKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKKwkJcmV0dXJuIDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKKwlzcGluX2xvY2tfYmgoJmNhcmQtPm1jbG9jayk7CisJZm9yIChkbSA9IGRldi0+bWNfbGlzdDsgZG07IGRtID0gZG0tPm5leHQpCisJCXFldGhfbDJfYWRkX21jKGNhcmQsIGRtLT5kbWlfYWRkcik7CisJc3Bpbl91bmxvY2tfYmgoJmNhcmQtPm1jbG9jayk7CisJaWYgKCFxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFKSkKKwkJcmV0dXJuOworCXFldGhfc2V0YWRwX3Byb21pc2NfbW9kZShjYXJkKTsKK30KKworc3RhdGljIGludCBxZXRoX2wyX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9oZHIgKmhkciA9IE5VTEw7CisJaW50IGVsZW1lbnRzID0gMDsKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IHNrYjsKKwlpbnQgaXB2ID0gcWV0aF9nZXRfaXBfdmVyc2lvbihza2IpOworCWludCBjYXN0X3R5cGUgPSBxZXRoX2dldF9jYXN0X3R5cGUoY2FyZCwgc2tiKTsKKwlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzCisJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CisJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47CisJZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKKwlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAibDJ4bWl0Iik7CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApIHx8ICFjYXJkLT5sYW5fb25saW5lKSB7CisJCWNhcmQtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWdvdG8gdHhfZHJvcDsKKwl9CisKKwlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pICYmCisJICAgIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkKKwkJZ290byB0eF9kcm9wOworCisJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9jbnQrKzsKKwkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9zdGFydF90aW1lID0gcWV0aF9nZXRfbWljcm9zKCk7CisJfQorCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWlmIChza2JfaXNfZ3NvKHNrYikpCisJCWxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKKworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQorCQloZHIgPSAoc3RydWN0IHFldGhfaGRyICopc2tiLT5kYXRhOworCWVsc2UgeworCQluZXdfc2tiID0gcWV0aF9wcmVwYXJlX3NrYihjYXJkLCBza2IsICZoZHIpOworCQlpZiAoIW5ld19za2IpCisJCQlnb3RvIHR4X2Ryb3A7CisJCXFldGhfbDJfZmlsbF9oZWFkZXIoY2FyZCwgaGRyLCBuZXdfc2tiLCBpcHYsIGNhc3RfdHlwZSk7CisJfQorCisJaWYgKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX0VERFApIHsKKwkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIG5ld19za2IsIGhkciwKKwkJCQkJCXNrYi0+c2stPnNrX3Byb3RvY29sKTsKKwkJaWYgKGN0eCA9PSBOVUxMKSB7CisJCQlQUklOVF9XQVJOKCJjb3VsZCBub3QgY3JlYXRlIGVkZHAgY29udGV4dFxuIik7CisJCQlnb3RvIHR4X2Ryb3A7CisJCX0KKwl9IGVsc2UgeworCQllbGVtZW50cyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLCAwKTsKKwkJaWYgKCFlbGVtZW50cykKKwkJCWdvdG8gdHhfZHJvcDsKKwl9CisKKwlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSAmJgorCSAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCisJCXFldGhfdHhfY3N1bShuZXdfc2tiKTsKKworCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQorCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKKwkJCQkJIGVsZW1lbnRzLCBjdHgpOworCWVsc2UKKwkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3QoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKKwkJCQkJICAgICAgZWxlbWVudHMsIGN0eCk7CisJaWYgKCFyYykgeworCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2J5dGVzOworCQlpZiAobmV3X3NrYiAhPSBza2IpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgeworCQkJaWYgKGxhcmdlX3NlbmQgIT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7CisJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOworCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKKwkJCX0KKwkJCWlmIChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyA+IDApIHsKKwkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCsrOworCQkJCS8qIG5yX2ZyYWdzICsgc2tiLT5kYXRhICovCisJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9CisJCQkJCXNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMTsKKwkJCX0KKwkJfQorCisJCWlmIChjdHggIT0gTlVMTCkgeworCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjdHggIT0gTlVMTCkKKwkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOworCisJCWlmIChyYyA9PSAtRUJVU1kpIHsKKwkJCWlmIChuZXdfc2tiICE9IHNrYikKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKKwkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJfSBlbHNlCisJCQlnb3RvIHR4X2Ryb3A7CisJfQorCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX3RpbWUgKz0gcWV0aF9nZXRfbWljcm9zKCkgLQorCQkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9zdGFydF90aW1lOworCXJldHVybiByYzsKKwordHhfZHJvcDoKKwljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CisJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7CisJaWYgKChuZXdfc2tiICE9IHNrYikgJiYgbmV3X3NrYikKKwkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wyX3FkaW9faW5wdXRfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2N3ZGV2LAorCQkJdW5zaWduZWQgaW50IHN0YXR1cywgdW5zaWduZWQgaW50IHFkaW9fZXJyLAorCQkJdW5zaWduZWQgaW50IHNpZ2FfZXJyLCB1bnNpZ25lZCBpbnQgcXVldWUsCisJCQlpbnQgZmlyc3RfZWxlbWVudCwgaW50IGNvdW50LCB1bnNpZ25lZCBsb25nIGNhcmRfcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisJc3RydWN0IHFldGhfcWRpb19idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgaW5kZXg7CisJaW50IGk7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAicWRpbnB1dCIpOworCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBjYXJkX3B0cjsKKwluZXRfZGV2ID0gY2FyZC0+ZGV2OworCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7CisJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9jbnQrKzsKKwkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3N0YXJ0X3RpbWUgPSBxZXRoX2dldF9taWNyb3MoKTsKKwl9CisJaWYgKHN0YXR1cyAmIFFESU9fU1RBVFVTX0xPT0tfRk9SX0VSUk9SKSB7CisJCWlmIChzdGF0dXMgJiBRRElPX1NUQVRVU19BQ1RJVkFURV9DSEVDS19DT05ESVRJT04pIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJxZGluY2hrIik7CisJCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlMDRYJTA0WCIsIGZpcnN0X2VsZW1lbnQsCisJCQkJCWNvdW50KTsKKwkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0WCUwNFgiLCBxdWV1ZSwgc3RhdHVzKTsKKwkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZm9yIChpID0gZmlyc3RfZWxlbWVudDsgaSA8IChmaXJzdF9lbGVtZW50ICsgY291bnQpOyArK2kpIHsKKwkJaW5kZXggPSBpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKKwkJYnVmZmVyID0gJmNhcmQtPnFkaW8uaW5fcS0+YnVmc1tpbmRleF07CisJCWlmICghKChzdGF0dXMgJiBRRElPX1NUQVRVU19MT09LX0ZPUl9FUlJPUikgJiYKKwkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwKKwkJCQkJICAgICBxZGlvX2Vyciwgc2lnYV9lcnIsICJxaW5lcnIiKSkpCisJCQlxZXRoX2wyX3Byb2Nlc3NfaW5ib3VuZF9idWZmZXIoY2FyZCwgYnVmZmVyLCBpbmRleCk7CisJCS8qIGNsZWFyIGJ1ZmZlciBhbmQgZ2l2ZSBiYWNrIHRvIGhhcmR3YXJlICovCisJCXFldGhfcHV0X2J1ZmZlcl9wb29sX2VudHJ5KGNhcmQsIGJ1ZmZlci0+cG9vbF9lbnRyeSk7CisJCXFldGhfcXVldWVfaW5wdXRfYnVmZmVyKGNhcmQsIGluZGV4KTsKKwl9CisJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCisJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF90aW1lICs9IHFldGhfZ2V0X21pY3JvcygpIC0KKwkJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9zdGFydF90aW1lOworfQorCitzdGF0aWMgaW50IHFldGhfbDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInFldGhvcGVuIik7CisJaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgJiYKKwkgICAgICghKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCkpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJub21hY2FkciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwljYXJkLT5kYXRhLnN0YXRlID0gQ0hfU1RBVEVfVVA7CisJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1VQOworCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX1VQOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlpZiAoIWNhcmQtPmxhbl9vbmxpbmUgJiYgbmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgcWV0aF9sMl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAicWV0aHN0b3AiKTsKKwluZXRpZl90eF9kaXNhYmxlKGRldik7CisJY2FyZC0+ZGV2LT5mbGFncyAmPSB+SUZGX1VQOworCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQorCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfU09GVFNFVFVQOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFldGhfbDJfcHJvYmVfZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZ2Rldi0+ZGV2KTsKKworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT52aWRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPm1jX2xpc3QpOworCWNhcmQtPm9wdGlvbnMubGF5ZXIyID0gMTsKKwljYXJkLT5kaXNjaXBsaW5lLmlucHV0X2hhbmRsZXIgPSAocWRpb19oYW5kbGVyX3QgKikKKwkJcWV0aF9sMl9xZGlvX2lucHV0X2hhbmRsZXI7CisJY2FyZC0+ZGlzY2lwbGluZS5vdXRwdXRfaGFuZGxlciA9IChxZGlvX2hhbmRsZXJfdCAqKQorCQlxZXRoX3FkaW9fb3V0cHV0X2hhbmRsZXI7CisJY2FyZC0+ZGlzY2lwbGluZS5yZWNvdmVyID0gcWV0aF9sMl9yZWNvdmVyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wyX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YSgmY2dkZXYtPmRldik7CisKKwl3YWl0X2V2ZW50KGNhcmQtPndhaXRfcSwgcWV0aF90aHJlYWRzX3J1bm5pbmcoY2FyZCwgMHhmZmZmZmZmZikgPT0gMCk7CisKKwlpZiAoY2dkZXYtPnN0YXRlID09IENDV0dST1VQX09OTElORSkgeworCQljYXJkLT51c2VfaGFyZF9zdG9wID0gMTsKKwkJcWV0aF9sMl9zZXRfb2ZmbGluZShjZ2Rldik7CisJfQorCisJaWYgKGNhcmQtPmRldikgeworCQl1bnJlZ2lzdGVyX25ldGRldihjYXJkLT5kZXYpOworCQljYXJkLT5kZXYgPSBOVUxMOworCX0KKworCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sMl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKKwkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAorCS5nZXRfc3RyaW5ncyA9IHFldGhfY29yZV9nZXRfc3RyaW5ncywKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zdGF0c19jb3VudCA9IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQsCisJLmdldF9kcnZpbmZvID0gcWV0aF9jb3JlX2dldF9kcnZpbmZvLAorfTsKKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wyX29zbl9vcHMgPSB7CisJLmdldF9zdHJpbmdzID0gcWV0aF9jb3JlX2dldF9zdHJpbmdzLAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3N0YXRzX2NvdW50ID0gcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudCwKKwkuZ2V0X2RydmluZm8gPSBxZXRoX2NvcmVfZ2V0X2RydmluZm8sCit9OworCitzdGF0aWMgaW50IHFldGhfbDJfc2V0dXBfbmV0ZGV2KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6CisJCWNhcmQtPmRldiA9IGFsbG9jX2V0aGVyZGV2KDApOworCQlicmVhazsKKwljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKKwkJY2FyZC0+ZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJoc2klZCIsIGV0aGVyX3NldHVwKTsKKwkJYnJlYWs7CisJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CisJCWNhcmQtPmRldiA9IGFsbG9jX25ldGRldigwLCAib3NuJWQiLCBldGhlcl9zZXR1cCk7CisJCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljYXJkLT5kZXYgPSBhbGxvY19ldGhlcmRldigwKTsKKwl9CisKKwlpZiAoIWNhcmQtPmRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljYXJkLT5kZXYtPnByaXYgPSBjYXJkOworCWNhcmQtPmRldi0+dHhfdGltZW91dCA9ICZxZXRoX3R4X3RpbWVvdXQ7CisJY2FyZC0+ZGV2LT53YXRjaGRvZ190aW1lbyA9IFFFVEhfVFhfVElNRU9VVDsKKwljYXJkLT5kZXYtPm9wZW4gPSBxZXRoX2wyX29wZW47CisJY2FyZC0+ZGV2LT5zdG9wID0gcWV0aF9sMl9zdG9wOworCWNhcmQtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gcWV0aF9sMl9oYXJkX3N0YXJ0X3htaXQ7CisJY2FyZC0+ZGV2LT5kb19pb2N0bCA9IHFldGhfbDJfZG9faW9jdGw7CisJY2FyZC0+ZGV2LT5nZXRfc3RhdHMgPSBxZXRoX2dldF9zdGF0czsKKwljYXJkLT5kZXYtPmNoYW5nZV9tdHUgPSBxZXRoX2NoYW5nZV9tdHU7CisJY2FyZC0+ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBxZXRoX2wyX3NldF9tdWx0aWNhc3RfbGlzdDsKKwljYXJkLT5kZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBxZXRoX2wyX3ZsYW5fcnhfa2lsbF92aWQ7CisJY2FyZC0+ZGV2LT52bGFuX3J4X2FkZF92aWQgPSBxZXRoX2wyX3ZsYW5fcnhfYWRkX3ZpZDsKKwljYXJkLT5kZXYtPnNldF9tYWNfYWRkcmVzcyA9IHFldGhfbDJfc2V0X21hY19hZGRyZXNzOworCWNhcmQtPmRldi0+bXR1ID0gY2FyZC0+aW5mby5pbml0aWFsX210dTsKKwlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikKKwkJU0VUX0VUSFRPT0xfT1BTKGNhcmQtPmRldiwgJnFldGhfbDJfZXRodG9vbF9vcHMpOworCWVsc2UKKwkJU0VUX0VUSFRPT0xfT1BTKGNhcmQtPmRldiwgJnFldGhfbDJfb3NuX29wcyk7CisJY2FyZC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCWNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPSAxOworCXFldGhfbDJfcmVxdWVzdF9pbml0aWFsX21hYyhjYXJkKTsKKwlTRVRfTkVUREVWX0RFVihjYXJkLT5kZXYsICZjYXJkLT5nZGV2LT5kZXYpOworCXJldHVybiByZWdpc3Rlcl9uZXRkZXYoY2FyZC0+ZGV2KTsKK30KKworc3RhdGljIGludCBfX3FldGhfbDJfc2V0X29ubGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2LCBpbnQgcmVjb3ZlcnlfbW9kZSkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZnZGV2LT5kZXYpOworCWludCByYyA9IDA7CisJZW51bSBxZXRoX2NhcmRfc3RhdGVzIHJlY292ZXJfZmxhZzsKKworCUJVR19PTighY2FyZCk7CisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInNldG9ubGluIik7CisJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOworCisJcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQsIDEpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgflFFVEhfUkVDT1ZFUl9USFJFQUQpKSB7CisJCVBSSU5UX1dBUk4oInNldF9vbmxpbmUgb2YgY2FyZCAlcyBpbnRlcnJ1cHRlZCBieSB1c2VyIVxuIiwKKwkJCSAgIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKKwlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX1JERVYoY2FyZCkpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJjID0gY2N3X2RldmljZV9zZXRfb25saW5lKENBUkRfV0RFVihjYXJkKSk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciVkIiwgcmMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmMgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIxZXJyJWQiLCByYyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJjID0gcWV0aF9jb3JlX2hhcmRzZXR1cF9jYXJkKGNhcmQpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjJlcnIlZCIsIHJjKTsKKwkJZ290byBvdXRfcmVtb3ZlOworCX0KKworCWlmICghY2FyZC0+ZGV2ICYmIHFldGhfbDJfc2V0dXBfbmV0ZGV2KGNhcmQpKQorCQlnb3RvIG91dF9yZW1vdmU7CisKKwlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikKKwkJcWV0aF9sMl9zZW5kX3NldG1hYyhjYXJkLCAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXSk7CisKKwljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfSEFSRFNFVFVQOworCXFldGhfcHJpbnRfc3RhdHVzX21lc3NhZ2UoY2FyZCk7CisKKwkvKiBzb2Z0c2V0dXAgKi8KKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic29mdHNldHAiKTsKKworCXJjID0gcWV0aF9zZW5kX3N0YXJ0bGFuKGNhcmQpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJaWYgKHJjID09IDB4ZTA4MCkgeworCQkJUFJJTlRfV0FSTigiTEFOIG9uIGNhcmQgJXMgaWYgb2ZmbGluZSEgIgorCQkJCSAgICJXYWl0aW5nIGZvciBTVEFSVExBTiBmcm9tIGNhcmQuXG4iLAorCQkJCSAgIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJCWNhcmQtPmxhbl9vbmxpbmUgPSAwOworCQl9CisJCXJldHVybiByYzsKKwl9IGVsc2UKKwkJY2FyZC0+bGFuX29ubGluZSA9IDE7CisKKwlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgeworCQlxZXRoX3NldF9sYXJnZV9zZW5kKGNhcmQsIGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCk7CisJCXFldGhfbDJfcHJvY2Vzc192bGFucyhjYXJkLCAwKTsKKwl9CisKKwluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CisKKwlyYyA9IHFldGhfaW5pdF9xZGlvX3F1ZXVlcyhjYXJkKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI2ZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X3JlbW92ZTsKKwl9CisJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1NPRlRTRVRVUDsKKwluZXRpZl9jYXJyaWVyX29uKGNhcmQtPmRldik7CisKKwlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgMHhmZmZmZmZmZiwgMCk7CisJaWYgKHJlY292ZXJfZmxhZyA9PSBDQVJEX1NUQVRFX1JFQ09WRVIpIHsKKwkJaWYgKHJlY292ZXJ5X21vZGUgJiYKKwkJICAgIGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKKwkJCXFldGhfbDJfb3BlbihjYXJkLT5kZXYpOworCQl9IGVsc2UgeworCQkJcnRubF9sb2NrKCk7CisJCQlkZXZfb3BlbihjYXJkLT5kZXYpOworCQkJcnRubF91bmxvY2soKTsKKwkJfQorCQkvKiB0aGlzIGFsc28gc2V0cyBzYXZlZCB1bmljYXN0IGFkZHJlc3NlcyAqLworCQlxZXRoX2wyX3NldF9tdWx0aWNhc3RfbGlzdChjYXJkLT5kZXYpOworCX0KKwkvKiBsZXQgdXNlcl9zcGFjZSBrbm93IHRoYXQgZGV2aWNlIGlzIG9ubGluZSAqLworCWtvYmplY3RfdWV2ZW50KCZnZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOworCXJldHVybiAwOworb3V0X3JlbW92ZToKKwljYXJkLT51c2VfaGFyZF9zdG9wID0gMTsKKwlxZXRoX2wyX3N0b3BfY2FyZChjYXJkLCAwKTsKKwljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7CisJY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1dERVYoY2FyZCkpOworCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9SREVWKGNhcmQpKTsKKwlpZiAocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfUkVDT1ZFUikKKwkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1JFQ09WRVI7CisJZWxzZQorCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfRE9XTjsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBxZXRoX2wyX3NldF9vbmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKK3sKKwlyZXR1cm4gX19xZXRoX2wyX3NldF9vbmxpbmUoZ2RldiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19xZXRoX2wyX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2LAorCQkJCQlpbnQgcmVjb3ZlcnlfbW9kZSkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKKwlpbnQgcmMgPSAwLCByYzIgPSAwLCByYzMgPSAwOworCWVudW0gcWV0aF9jYXJkX3N0YXRlcyByZWNvdmVyX2ZsYWc7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAzLCAic2V0b2ZmbCIpOworCVFFVEhfREJGX0hFWChTRVRVUCwgMywgJmNhcmQsIHNpemVvZih2b2lkICopKTsKKworCWlmIChjYXJkLT5kZXYgJiYgbmV0aWZfY2Fycmllcl9vayhjYXJkLT5kZXYpKQorCQluZXRpZl9jYXJyaWVyX29mZihjYXJkLT5kZXYpOworCXJlY292ZXJfZmxhZyA9IGNhcmQtPnN0YXRlOworCWlmIChxZXRoX2wyX3N0b3BfY2FyZChjYXJkLCByZWNvdmVyeV9tb2RlKSA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJUFJJTlRfV0FSTigiU3RvcHBpbmcgY2FyZCAlcyBpbnRlcnJ1cHRlZCBieSB1c2VyIVxuIiwKKwkJCSAgIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJcmMgID0gY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX0RERVYoY2FyZCkpOworCXJjMiA9IGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9XREVWKGNhcmQpKTsKKwlyYzMgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfUkRFVihjYXJkKSk7CisJaWYgKCFyYykKKwkJcmMgPSAocmMyKSA/IHJjMiA6IHJjMzsKKwlpZiAocmMpCisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciVkIiwgcmMpOworCWlmIChyZWNvdmVyX2ZsYWcgPT0gQ0FSRF9TVEFURV9VUCkKKwkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1JFQ09WRVI7CisJLyogbGV0IHVzZXJfc3BhY2Uga25vdyB0aGF0IGRldmljZSBpcyBvZmZsaW5lICovCisJa29iamVjdF91ZXZlbnQoJmNnZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFldGhfbDJfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYpCit7CisJcmV0dXJuIF9fcWV0aF9sMl9zZXRfb2ZmbGluZShjZ2RldiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sMl9yZWNvdmVyKHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCWludCByYyA9IDA7CisKKwljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgcHRyOworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJyZWNvdmVyMSIpOworCVFFVEhfREJGX0hFWChUUkFDRSwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKKwlpZiAoIXFldGhfZG9fcnVuX3RocmVhZChjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkKKwkJcmV0dXJuIDA7CisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInJlY292ZXIyIik7CisJUFJJTlRfV0FSTigiUmVjb3Zlcnkgb2YgZGV2aWNlICVzIHN0YXJ0ZWQgLi4uXG4iLAorCQkgICBDQVJEX0JVU19JRChjYXJkKSk7CisJY2FyZC0+dXNlX2hhcmRfc3RvcCA9IDE7CisJX19xZXRoX2wyX3NldF9vZmZsaW5lKGNhcmQtPmdkZXYsIDEpOworCXJjID0gX19xZXRoX2wyX3NldF9vbmxpbmUoY2FyZC0+Z2RldiwgMSk7CisJLyogZG9uJ3QgcnVuIGFub3RoZXIgc2NoZWR1bGVkIHJlY292ZXJ5ICovCisJcWV0aF9jbGVhcl90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpOworCXFldGhfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpOworCWlmICghcmMpCisJCVBSSU5UX0lORk8oIkRldmljZSAlcyBzdWNjZXNzZnVsbHkgcmVjb3ZlcmVkIVxuIiwKKwkJCSAgIENBUkRfQlVTX0lEKGNhcmQpKTsKKwllbHNlCisJCVBSSU5UX0lORk8oIkRldmljZSAlcyBjb3VsZCBub3QgYmUgcmVjb3ZlcmVkIVxuIiwKKwkJCSAgIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgcWV0aF9sMl9pbml0KHZvaWQpCit7CisJUFJJTlRfSU5GTygicmVnaXN0ZXIgbGF5ZXIgMiBkaXNjaXBsaW5lXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHFldGhfbDJfZXhpdCh2b2lkKQoreworCVBSSU5UX0lORk8oInVucmVnaXN0ZXIgbGF5ZXIgMiBkaXNjaXBsaW5lXG4iKTsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sMl9zaHV0ZG93bihzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisJcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgMCk7CisJcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoY2FyZCk7Cit9CisKK3N0cnVjdCBjY3dncm91cF9kcml2ZXIgcWV0aF9sMl9jY3dncm91cF9kcml2ZXIgPSB7CisJLnByb2JlID0gcWV0aF9sMl9wcm9iZV9kZXZpY2UsCisJLnJlbW92ZSA9IHFldGhfbDJfcmVtb3ZlX2RldmljZSwKKwkuc2V0X29ubGluZSA9IHFldGhfbDJfc2V0X29ubGluZSwKKwkuc2V0X29mZmxpbmUgPSBxZXRoX2wyX3NldF9vZmZsaW5lLAorCS5zaHV0ZG93biA9IHFldGhfbDJfc2h1dGRvd24sCit9OworRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9sMl9jY3dncm91cF9kcml2ZXIpOworCitzdGF0aWMgaW50IHFldGhfb3NuX3NlbmRfY29udHJvbF9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgIm9zbmRjdHJkIik7CisKKwl3YWl0X2V2ZW50KGNhcmQtPndhaXRfcSwKKwkJICAgYXRvbWljX2NtcHhjaGcoJmNhcmQtPndyaXRlLmlycV9wZW5kaW5nLCAwLCAxKSA9PSAwKTsKKwlxZXRoX3ByZXBhcmVfY29udHJvbF9kYXRhKGNhcmQsIGxlbiwgaW9iKTsKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAib3Nub2lycXAiKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2FyZC0+d3JpdGUuY2N3ZGV2KSwgZmxhZ3MpOworCXJjID0gY2N3X2RldmljZV9zdGFydChjYXJkLT53cml0ZS5jY3dkZXYsICZjYXJkLT53cml0ZS5jY3csCisJCQkgICAgICAoYWRkcl90KSBpb2IsIDAsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigicWV0aF9vc25fc2VuZF9jb250cm9sX2RhdGE6ICIKKwkJCSAgICJjY3dfZGV2aWNlX3N0YXJ0IHJjID0gJWlcbiIsIHJjKTsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICIgZXJyJWQiLCByYyk7CisJCXFldGhfcmVsZWFzZV9idWZmZXIoaW9iLT5jaGFubmVsLCBpb2IpOworCQlhdG9taWNfc2V0KCZjYXJkLT53cml0ZS5pcnFfcGVuZGluZywgMCk7CisJCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX29zbl9zZW5kX2lwYV9jbWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwgaW50IGRhdGFfbGVuKQoreworCXUxNiBzMSwgczI7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAib3NuZGlwYSIpOworCisJcWV0aF9wcmVwYXJlX2lwYV9jbWQoY2FyZCwgaW9iLCBRRVRIX1BST1RfT1NOMik7CisJczEgPSAodTE2KShJUEFfUERVX0hFQURFUl9TSVpFICsgZGF0YV9sZW4pOworCXMyID0gKHUxNilkYXRhX2xlbjsKKwltZW1jcHkoUUVUSF9JUEFfUERVX0xFTl9UT1RBTChpb2ItPmRhdGEpLCAmczEsIDIpOworCW1lbWNweShRRVRIX0lQQV9QRFVfTEVOX1BEVTEoaW9iLT5kYXRhKSwgJnMyLCAyKTsKKwltZW1jcHkoUUVUSF9JUEFfUERVX0xFTl9QRFUyKGlvYi0+ZGF0YSksICZzMiwgMik7CisJbWVtY3B5KFFFVEhfSVBBX1BEVV9MRU5fUERVMyhpb2ItPmRhdGEpLCAmczIsIDIpOworCXJldHVybiBxZXRoX29zbl9zZW5kX2NvbnRyb2xfZGF0YShjYXJkLCBzMSwgaW9iKTsKK30KKworaW50IHFldGhfb3NuX2Fzc2lzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgZGF0YV9sZW4pCit7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIm9zbnNkbWMiKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1NPRlRTRVRVUCkpCisJCXJldHVybiAtRU5PREVWOworCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7CisJbWVtY3B5KGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFLCBkYXRhLCBkYXRhX2xlbik7CisJcmMgPSBxZXRoX29zbl9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBkYXRhX2xlbik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChxZXRoX29zbl9hc3Npc3QpOworCitpbnQgcWV0aF9vc25fcmVnaXN0ZXIodW5zaWduZWQgY2hhciAqcmVhZF9kZXZfbm8sIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2LAorCQkgIGludCAoKmFzc2lzdF9jYikoc3RydWN0IG5ldF9kZXZpY2UgKiwgdm9pZCAqKSwKKwkJICBpbnQgKCpkYXRhX2NiKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIm9zbnJlZyIpOworCSpkZXYgPSBxZXRoX2wyX25ldGRldl9ieV9kZXZubyhyZWFkX2Rldl9ubyk7CisJaWYgKCpkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FyZCA9IG5ldGRldl9wcml2KCpkZXYpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKChhc3Npc3RfY2IgPT0gTlVMTCkgfHwgKGRhdGFfY2IgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCWNhcmQtPm9zbl9pbmZvLmFzc2lzdF9jYiA9IGFzc2lzdF9jYjsKKwljYXJkLT5vc25faW5mby5kYXRhX2NiID0gZGF0YV9jYjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocWV0aF9vc25fcmVnaXN0ZXIpOworCit2b2lkIHFldGhfb3NuX2RlcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIm9zbmRlcmVnIik7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKwljYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoIWNhcmQpCisJCXJldHVybjsKKwljYXJkLT5vc25faW5mby5hc3Npc3RfY2IgPSBOVUxMOworCWNhcmQtPm9zbl9pbmZvLmRhdGFfY2IgPSBOVUxMOworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0wocWV0aF9vc25fZGVyZWdpc3Rlcik7CisKK21vZHVsZV9pbml0KHFldGhfbDJfaW5pdCk7Cittb2R1bGVfZXhpdChxZXRoX2wyX2V4aXQpOworTU9EVUxFX0FVVEhPUigiRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInFldGggbGF5ZXIgMiBkaXNjaXBsaW5lIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTM1MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDMuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogIGRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiAgICBBdXRob3Iocyk6IFV0eiBCYWNoZXIgPHV0ei5iYWNoZXJAZGUuaWJtLmNvbT4sCisgKgkJIEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPiwKKyAqCQkgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPiwKKyAqCQkgRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+CisgKi8KKworI2lmbmRlZiBfX1FFVEhfTDNfSF9fCisjZGVmaW5lIF9fUUVUSF9MM19IX18KKworI2luY2x1ZGUgInFldGhfY29yZS5oIgorCisjZGVmaW5lIFFFVEhfREJGX1RYVF9CVUYgcWV0aF9sM19kYmZfdHh0X2J1ZgorREVDTEFSRV9QRVJfQ1BVKGNoYXJbMjU2XSwgcWV0aF9sM19kYmZfdHh0X2J1Zik7CisKK3N0cnVjdCBxZXRoX2lwYWRkciB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwllbnVtIHFldGhfaXBfdHlwZXMgdHlwZTsKKwllbnVtIHFldGhfaXBhX3NldGRlbGlwX2ZsYWdzIHNldF9mbGFnczsKKwllbnVtIHFldGhfaXBhX3NldGRlbGlwX2ZsYWdzIGRlbF9mbGFnczsKKwlpbnQgaXNfbXVsdGljYXN0OworCWludCB1c2VyczsKKwllbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bzsKKwl1bnNpZ25lZCBjaGFyIG1hY1tPU0FfQUREUl9MRU5dOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBhZGRyOworCQkJdW5zaWduZWQgaW50IG1hc2s7CisJCX0gYTQ7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKKwkJCXVuc2lnbmVkIGludCBwZnhsZW47CisJCX0gYTY7CisJfSB1OworfTsKKworc3RydWN0IHFldGhfaXBhdG9fZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG87CisJY2hhciBhZGRyWzE2XTsKKwlpbnQgbWFza19iaXRzOworfTsKKworCit2b2lkIHFldGhfbDNfaXBhZGRyNF90b19zdHJpbmcoY29uc3QgX191OCAqLCBjaGFyICopOworaW50IHFldGhfbDNfc3RyaW5nX3RvX2lwYWRkcjQoY29uc3QgY2hhciAqLCBfX3U4ICopOwordm9pZCBxZXRoX2wzX2lwYWRkcjZfdG9fc3RyaW5nKGNvbnN0IF9fdTggKiwgY2hhciAqKTsKK2ludCBxZXRoX2wzX3N0cmluZ190b19pcGFkZHI2KGNvbnN0IGNoYXIgKiwgX191OCAqKTsKK3ZvaWQgcWV0aF9sM19pcGFkZHJfdG9fc3RyaW5nKGVudW0gcWV0aF9wcm90X3ZlcnNpb25zLCBjb25zdCBfX3U4ICosIGNoYXIgKik7CitpbnQgcWV0aF9sM19zdHJpbmdfdG9faXBhZGRyKGNvbnN0IGNoYXIgKiwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsIF9fdTggKik7CitpbnQgcWV0aF9sM19jcmVhdGVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqKTsKK3ZvaWQgcWV0aF9sM19yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqKTsKK2ludCBxZXRoX2wzX3NldHJvdXRpbmdfdjQoc3RydWN0IHFldGhfY2FyZCAqKTsKK2ludCBxZXRoX2wzX3NldHJvdXRpbmdfdjYoc3RydWN0IHFldGhfY2FyZCAqKTsKK2ludCBxZXRoX2wzX2FkZF9pcGF0b19lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2lwYXRvX2VudHJ5ICopOwordm9pZCBxZXRoX2wzX2RlbF9pcGF0b19lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICosIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zLAorCQkJdTggKiwgaW50KTsKK2ludCBxZXRoX2wzX2FkZF92aXBhKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsIGNvbnN0IHU4ICopOwordm9pZCBxZXRoX2wzX2RlbF92aXBhKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsIGNvbnN0IHU4ICopOworaW50IHFldGhfbDNfYWRkX3J4aXAoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucywgY29uc3QgdTggKik7Cit2b2lkIHFldGhfbDNfZGVsX3J4aXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsCisJCQljb25zdCB1OCAqKTsKKworI2VuZGlmIC8qIF9fUUVUSF9MM19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmZlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0wLDAgKzEsMzM5NiBAQAorLyoKKyAqICBkcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3CisgKiAgICBBdXRob3Iocyk6IFV0eiBCYWNoZXIgPHV0ei5iYWNoZXJAZGUuaWJtLmNvbT4sCisgKgkJIEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPiwKKyAqCQkgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPiwKKyAqCQkgRnJhbmsgQmxhc2Noa2EgPGZyYW5rLmJsYXNjaGthQGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lnbXAuaD4KKworI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9hcnAuaD4KKworI2luY2x1ZGUgPGFzbS9zMzkwX3JkZXYuaD4KKworI2luY2x1ZGUgInFldGhfbDMuaCIKKyNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgorCitERUZJTkVfUEVSX0NQVShjaGFyWzI1Nl0sIHFldGhfbDNfZGJmX3R4dF9idWYpOworCitzdGF0aWMgaW50IHFldGhfbDNfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgcWV0aF9sM19yZWNvdmVyKHZvaWQgKik7CitzdGF0aWMgaW50IHFldGhfbDNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIHFldGhfbDNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIGludCBxZXRoX2wzX25laWdoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBuZWlnaF9wYXJtcyAqKTsKK3N0YXRpYyBpbnQgcWV0aF9sM19yZWdpc3Rlcl9hZGRyX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKiwKKwkJc3RydWN0IHFldGhfaXBhZGRyICopOworc3RhdGljIGludCBxZXRoX2wzX2RlcmVnaXN0ZXJfYWRkcl9lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICosCisJCXN0cnVjdCBxZXRoX2lwYWRkciAqKTsKK3N0YXRpYyBpbnQgX19xZXRoX2wzX3NldF9vbmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqLCBpbnQpOworc3RhdGljIGludCBfX3FldGhfbDNfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqLCBpbnQpOworCisKK3N0YXRpYyBpbnQgcWV0aF9sM19pc3hkaWdpdChjaGFyICpidWYpCit7CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCFpc3hkaWdpdCgqYnVmKyspKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCit2b2lkIHFldGhfbDNfaXBhZGRyNF90b19zdHJpbmcoY29uc3QgX191OCAqYWRkciwgY2hhciAqYnVmKQoreworCXNwcmludGYoYnVmLCAiJWkuJWkuJWkuJWkiLCBhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLCBhZGRyWzNdKTsKK30KKworaW50IHFldGhfbDNfc3RyaW5nX3RvX2lwYWRkcjQoY29uc3QgY2hhciAqYnVmLCBfX3U4ICphZGRyKQoreworCWludCBjb3VudCA9IDAsIHJjID0gMDsKKwlpbnQgaW5bNF07CisJY2hhciBjOworCisJcmMgPSBzc2NhbmYoYnVmLCAiJXUuJXUuJXUuJXUlYyIsCisJCSAgICAmaW5bMF0sICZpblsxXSwgJmluWzJdLCAmaW5bM10sICZjKTsKKwlpZiAocmMgIT0gNCAmJiAocmMgIT0gNSB8fCBjICE9ICdcbicpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCA0OyBjb3VudCsrKSB7CisJCWlmIChpbltjb3VudF0gPiAyNTUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYWRkcltjb3VudF0gPSBpbltjb3VudF07CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHFldGhfbDNfaXBhZGRyNl90b19zdHJpbmcoY29uc3QgX191OCAqYWRkciwgY2hhciAqYnVmKQoreworCXNwcmludGYoYnVmLCAiJTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMngiCisJCSAgICAgIjolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeCIsCisJCSAgICAgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwKKwkJICAgICBhZGRyWzRdLCBhZGRyWzVdLCBhZGRyWzZdLCBhZGRyWzddLAorCQkgICAgIGFkZHJbOF0sIGFkZHJbOV0sIGFkZHJbMTBdLCBhZGRyWzExXSwKKwkJICAgICBhZGRyWzEyXSwgYWRkclsxM10sIGFkZHJbMTRdLCBhZGRyWzE1XSk7Cit9CisKK2ludCBxZXRoX2wzX3N0cmluZ190b19pcGFkZHI2KGNvbnN0IGNoYXIgKmJ1ZiwgX191OCAqYWRkcikKK3sKKwljb25zdCBjaGFyICplbmQsICplbmRfdG1wLCAqc3RhcnQ7CisJX191MTYgKmluOworCWNoYXIgbnVtWzVdOworCWludCBudW0yLCBjbnQsIG91dCwgZm91bmQsIHNhdmVfY250OworCXVuc2lnbmVkIHNob3J0IGluX3RtcFs4XSA9IHswLCB9OworCisJY250ID0gb3V0ID0gZm91bmQgPSBzYXZlX2NudCA9IG51bTIgPSAwOworCWVuZCA9IHN0YXJ0ID0gYnVmOworCWluID0gKF9fdTE2ICopIGFkZHI7CisJbWVtc2V0KGluLCAwLCAxNik7CisJd2hpbGUgKCplbmQpIHsKKwkJZW5kID0gc3RyY2hyKHN0YXJ0LCAnOicpOworCQlpZiAoZW5kID09IE5VTEwpIHsKKwkJCWVuZCA9IGJ1ZiArIHN0cmxlbihidWYpOworCQkJZW5kX3RtcCA9IHN0cmNocihzdGFydCwgJ1xuJyk7CisJCQlpZiAoZW5kX3RtcCAhPSBOVUxMKQorCQkJCWVuZCA9IGVuZF90bXA7CisJCQlvdXQgPSAxOworCQl9CisJCWlmICgoZW5kIC0gc3RhcnQpKSB7CisJCQltZW1zZXQobnVtLCAwLCA1KTsKKwkJCWlmICgoZW5kIC0gc3RhcnQpID4gNCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW1lbWNweShudW0sIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJCQlpZiAoIXFldGhfbDNfaXN4ZGlnaXQobnVtKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXNzY2FuZihzdGFydCwgIiV4IiwgJm51bTIpOworCQkJaWYgKGZvdW5kKQorCQkJCWluX3RtcFtzYXZlX2NudCsrXSA9IG51bTI7CisJCQllbHNlCisJCQkJaW5bY250KytdID0gbnVtMjsKKwkJCWlmIChvdXQpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoZm91bmQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlmb3VuZCA9IDE7CisJCX0KKwkJc3RhcnQgPSArK2VuZDsKKwl9CisJaWYgKGNudCArIHNhdmVfY250ID4gOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY250ID0gNzsKKwl3aGlsZSAoc2F2ZV9jbnQpCisJCWluW2NudC0tXSA9IGluX3RtcFstLXNhdmVfY250XTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBxZXRoX2wzX2lwYWRkcl90b19zdHJpbmcoZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8sIGNvbnN0IF9fdTggKmFkZHIsCisJCQkJY2hhciAqYnVmKQoreworCWlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJcWV0aF9sM19pcGFkZHI0X3RvX3N0cmluZyhhZGRyLCBidWYpOworCWVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KQorCQlxZXRoX2wzX2lwYWRkcjZfdG9fc3RyaW5nKGFkZHIsIGJ1Zik7Cit9CisKK2ludCBxZXRoX2wzX3N0cmluZ190b19pcGFkZHIoY29uc3QgY2hhciAqYnVmLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKKwkJCQlfX3U4ICphZGRyKQoreworCWlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJcmV0dXJuIHFldGhfbDNfc3RyaW5nX3RvX2lwYWRkcjQoYnVmLCBhZGRyKTsKKwllbHNlIGlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNikKKwkJcmV0dXJuIHFldGhfbDNfc3RyaW5nX3RvX2lwYWRkcjYoYnVmLCBhZGRyKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wzX2NvbnZlcnRfYWRkcl90b19iaXRzKHU4ICphZGRyLCB1OCAqYml0cywgaW50IGxlbikKK3sKKwlpbnQgaSwgajsKKwl1OCBvY3RldDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworCQlvY3RldCA9IGFkZHJbaV07CisJCWZvciAoaiA9IDc7IGogPj0gMDsgLS1qKSB7CisJCQliaXRzW2kqOCArIGpdID0gb2N0ZXQgJiAxOworCQkJb2N0ZXQgPj49IDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19pc19hZGRyX2NvdmVyZWRfYnlfaXBhdG8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCQkJCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqaXBhdG9lOworCXU4IGFkZHJfYml0c1sxMjhdID0gezAsIH07CisJdTggaXBhdG9lX2JpdHNbMTI4XSA9IHswLCB9OworCWludCByYyA9IDA7CisKKwlpZiAoIWNhcmQtPmlwYXRvLmVuYWJsZWQpCisJCXJldHVybiAwOworCisJcWV0aF9sM19jb252ZXJ0X2FkZHJfdG9fYml0cygodTggKikgJmFkZHItPnUsIGFkZHJfYml0cywKKwkJCQkgIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCk/IDQ6MTYpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXBhdG9lLCAmY2FyZC0+aXBhdG8uZW50cmllcywgZW50cnkpIHsKKwkJaWYgKGFkZHItPnByb3RvICE9IGlwYXRvZS0+cHJvdG8pCisJCQljb250aW51ZTsKKwkJcWV0aF9sM19jb252ZXJ0X2FkZHJfdG9fYml0cyhpcGF0b2UtPmFkZHIsIGlwYXRvZV9iaXRzLAorCQkJCQkgIChpcGF0b2UtPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KSA/CisJCQkJCSAgNCA6IDE2KTsKKwkJaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQorCQkJcmMgPSAhbWVtY21wKGFkZHJfYml0cywgaXBhdG9lX2JpdHMsCisJCQkJICAgICBtaW4oMzIsIGlwYXRvZS0+bWFza19iaXRzKSk7CisJCWVsc2UKKwkJCXJjID0gIW1lbWNtcChhZGRyX2JpdHMsIGlwYXRvZV9iaXRzLAorCQkJCSAgICAgbWluKDEyOCwgaXBhdG9lLT5tYXNrX2JpdHMpKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJfQorCS8qIGludmVydD8gKi8KKwlpZiAoKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KSAmJiBjYXJkLT5pcGF0by5pbnZlcnQ0KQorCQlyYyA9ICFyYzsKKwllbHNlIGlmICgoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpICYmIGNhcmQtPmlwYXRvLmludmVydDYpCisJCXJjID0gIXJjOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQWRkIElQIHRvIGJlIGFkZGVkIHRvIHRvZG8gbGlzdC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiAiYWRkIHRvZG8iCisgKiBpbiB0aGlzIGxpc3Qgd2UganVzdCBpbmNyZW1lbmVudCB0aGUgcmVmZXJlbmNlIGNvdW50LgorICogUmV0dXJucyAwIGlmIHdlICBqdXN0IGluY3JlbWVudGVkIHJlZmVyZW5jZSBjb3VudC4KKyAqLworc3RhdGljIGludCBfX3FldGhfbDNfaW5zZXJ0X2lwX3RvZG8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCQkJc3RydWN0IHFldGhfaXBhZGRyICphZGRyLCBpbnQgYWRkKQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqdG1wLCAqdDsKKwlpbnQgZm91bmQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcCwgdCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CisJCWlmICgoYWRkci0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQykgJiYKKwkJICAgICh0bXAtPnR5cGUgPT0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMpKQorCQkJcmV0dXJuIDA7CisJCWlmICgodG1wLT5wcm90byAgICAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAgICAmJgorCQkgICAgKGFkZHItPnByb3RvICAgICAgID09IFFFVEhfUFJPVF9JUFY0KSAgICAgJiYKKwkJICAgICh0bXAtPnR5cGUgICAgICAgICA9PSBhZGRyLT50eXBlKSAgICAgICAgICYmCisJCSAgICAodG1wLT5pc19tdWx0aWNhc3QgPT0gYWRkci0+aXNfbXVsdGljYXN0KSAmJgorCQkgICAgKHRtcC0+dS5hNC5hZGRyICAgID09IGFkZHItPnUuYTQuYWRkcikgICAgJiYKKwkJICAgICh0bXAtPnUuYTQubWFzayAgICA9PSBhZGRyLT51LmE0Lm1hc2spKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHRtcC0+cHJvdG8gICAgICAgID09IFFFVEhfUFJPVF9JUFY2KSAgICAgICYmCisJCSAgICAoYWRkci0+cHJvdG8gICAgICAgPT0gUUVUSF9QUk9UX0lQVjYpICAgICAgJiYKKwkJICAgICh0bXAtPnR5cGUgICAgICAgICA9PSBhZGRyLT50eXBlKSAgICAgICAgICAmJgorCQkgICAgKHRtcC0+aXNfbXVsdGljYXN0ID09IGFkZHItPmlzX211bHRpY2FzdCkgICYmCisJCSAgICAodG1wLT51LmE2LnBmeGxlbiAgPT0gYWRkci0+dS5hNi5wZnhsZW4pICAgJiYKKwkJICAgIChtZW1jbXAoJnRtcC0+dS5hNi5hZGRyLCAmYWRkci0+dS5hNi5hZGRyLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGZvdW5kKSB7CisJCWlmIChhZGRyLT51c2VycyAhPSAwKQorCQkJdG1wLT51c2VycyArPSBhZGRyLT51c2VyczsKKwkJZWxzZQorCQkJdG1wLT51c2VycyArPSBhZGQgPyAxIDogLTE7CisJCWlmICh0bXAtPnVzZXJzID09IDApIHsKKwkJCWxpc3RfZGVsKCZ0bXAtPmVudHJ5KTsKKwkJCWtmcmVlKHRtcCk7CisJCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKGFkZHItPnR5cGUgPT0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMpCisJCQlsaXN0X2FkZCgmYWRkci0+ZW50cnksIGNhcmQtPmlwX3RiZF9saXN0KTsKKwkJZWxzZSB7CisJCQlpZiAoYWRkci0+dXNlcnMgPT0gMCkKKwkJCQlhZGRyLT51c2VycyArPSBhZGQgPyAxIDogLTE7CisJCQlpZiAoYWRkICYmIChhZGRyLT50eXBlID09IFFFVEhfSVBfVFlQRV9OT1JNQUwpICYmCisJCQkgICAgcWV0aF9sM19pc19hZGRyX2NvdmVyZWRfYnlfaXBhdG8oY2FyZCwgYWRkcikpIHsKKwkJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAidGtvdmFkZHIiKTsKKwkJCQlhZGRyLT5zZXRfZmxhZ3MgfD0gUUVUSF9JUEFfU0VUSVBfVEFLRU9WRVJfRkxBRzsKKwkJCX0KKwkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmVudHJ5LCBjYXJkLT5pcF90YmRfbGlzdCk7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgaW50IHFldGhfbDNfZGVsZXRlX2lwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiZGVsaXAiKTsKKworCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKKwllbHNlIHsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCA0LCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCA0LCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCXJjID0gX19xZXRoX2wzX2luc2VydF9pcF90b2RvKGNhcmQsIGFkZHIsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19hZGRfaXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfaXBhZGRyICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJhZGRpcCIpOworCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKKwllbHNlIHsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCA0LCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCA0LCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCXJjID0gX19xZXRoX2wzX2luc2VydF9pcF90b2RvKGNhcmQsIGFkZHIsIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHN0cnVjdCBxZXRoX2lwYWRkciAqcWV0aF9sM19nZXRfYWRkcl9idWZmZXIoCisJCQkJZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHI7CisKKwlhZGRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfaXBhZGRyKSwgR0ZQX0FUT01JQyk7CisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlQUklOVF9XQVJOKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBhZGQgYWRkcmVzc1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlhZGRyLT50eXBlID0gUUVUSF9JUF9UWVBFX05PUk1BTDsKKwlhZGRyLT5wcm90byA9IHByb3Q7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfZGVsZXRlX21jX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqaXB0b2RvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiZGVsbWMiKTsKKwlpcHRvZG8gPSBxZXRoX2wzX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNCk7CisJaWYgKCFpcHRvZG8pIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImRtY25vbWVtIik7CisJCXJldHVybjsKKwl9CisJaXB0b2RvLT50eXBlID0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUM7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlpZiAoIV9fcWV0aF9sM19pbnNlcnRfaXBfdG9kbyhjYXJkLCBpcHRvZG8sIDApKQorCQlrZnJlZShpcHRvZG8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIEFkZC9yZW1vdmUgYWRkcmVzcyB0by9mcm9tIGNhcmQncyBpcCBsaXN0LCBpLmUuIHRyeSB0byBhZGQgb3IgcmVtb3ZlCisgKiByZWZlcmVuY2UgdG8vZnJvbSBhbiBJUCBhZGRyZXNzIHRoYXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIG9uIHRoZSBjYXJkLgorICogUmV0dXJuczoKKyAqCTAgIGFkZHJlc3Mgd2FzIG9uIGNhcmQgYW5kIGl0cyByZWZlcmVuY2UgY291bnQgaGFzIGJlZW4gYWRqdXN0ZWQsCisgKgkgICBidXQgaXMgc3RpbGwgPiAwLCBzbyBub3RoaW5nIGhhcyB0byBiZSBkb25lCisgKgkgICBhbHNvIHJldHVybnMgMCBpZiBjYXJkIHdhcyBub3Qgb24gY2FyZCBhbmQgdGhlIHRvZG8gd2FzIHRvIGRlbGV0ZQorICoJICAgdGhlIGFkZHJlc3MgLT4gdGhlcmUgaXMgYWxzbyBub3RoaW5nIHRvIGJlIGRvbmUKKyAqCTEgIGFkZHJlc3Mgd2FzIG5vdCBvbiBjYXJkIGFuZCB0aGUgdG9kbyBpcyB0byBhZGQgaXQgdG8gdGhlIGNhcmQncyBpcAorICoJICAgbGlzdAorICoJLTEgYWRkcmVzcyB3YXMgb24gY2FyZCBhbmQgaXRzIHJlZmVyZW5jZSBjb3VudCBoYXMgYmVlbiBkZWNyZW1lbnRlZAorICoJICAgdG8gPD0gMCBieSB0aGUgdG9kbyAtPiBhZGRyZXNzIG11c3QgYmUgcmVtb3ZlZCBmcm9tIGNhcmQKKyAqLworc3RhdGljIGludCBfX3FldGhfbDNfcmVmX2lwX29uX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfaXBhZGRyICp0b2RvLCBzdHJ1Y3QgcWV0aF9pcGFkZHIgKipfX2FkZHIpCit7CisJc3RydWN0IHFldGhfaXBhZGRyICphZGRyOworCWludCBmb3VuZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkZHIsICZjYXJkLT5pcF9saXN0LCBlbnRyeSkgeworCQlpZiAoKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KSAmJgorCQkgICAgKHRvZG8tPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KSAmJgorCQkgICAgKGFkZHItPnR5cGUgPT0gdG9kby0+dHlwZSkgJiYKKwkJICAgIChhZGRyLT51LmE0LmFkZHIgPT0gdG9kby0+dS5hNC5hZGRyKSAmJgorCQkgICAgKGFkZHItPnUuYTQubWFzayA9PSB0b2RvLT51LmE0Lm1hc2spKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY2KSAmJgorCQkgICAgKHRvZG8tPnByb3RvID09IFFFVEhfUFJPVF9JUFY2KSAmJgorCQkgICAgKGFkZHItPnR5cGUgPT0gdG9kby0+dHlwZSkgJiYKKwkJICAgIChhZGRyLT51LmE2LnBmeGxlbiA9PSB0b2RvLT51LmE2LnBmeGxlbikgJiYKKwkJICAgIChtZW1jbXAoJmFkZHItPnUuYTYuYWRkciwgJnRvZG8tPnUuYTYuYWRkciwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChmb3VuZCkgeworCQlhZGRyLT51c2VycyArPSB0b2RvLT51c2VyczsKKwkJaWYgKGFkZHItPnVzZXJzIDw9IDApIHsKKwkJCSpfX2FkZHIgPSBhZGRyOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJLyogZm9yIFZJUEEgYW5kIFJYSVAgbGltaXQgcmVmY291bnQgdG8gMSAqLworCQkJaWYgKGFkZHItPnR5cGUgIT0gUUVUSF9JUF9UWVBFX05PUk1BTCkKKwkJCQlhZGRyLT51c2VycyA9IDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAodG9kby0+dXNlcnMgPiAwKSB7CisJCS8qIGZvciBWSVBBIGFuZCBSWElQIGxpbWl0IHJlZmNvdW50IHRvIDEgKi8KKwkJaWYgKHRvZG8tPnR5cGUgIT0gUUVUSF9JUF9UWVBFX05PUk1BTCkKKwkJCXRvZG8tPnVzZXJzID0gMTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX3FldGhfbDNfZGVsZXRlX2FsbF9tYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJCQl1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZhaWxfbGlzdDsKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIsICp0bXA7CisJaW50IHJjOworCisJSU5JVF9MSVNUX0hFQUQoJmZhaWxfbGlzdCk7CithZ2FpbjoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWRkciwgdG1wLCAmY2FyZC0+aXBfbGlzdCwgZW50cnkpIHsKKwkJaWYgKGFkZHItPmlzX211bHRpY2FzdCkgeworCQkJbGlzdF9kZWwoJmFkZHItPmVudHJ5KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssICpmbGFncyk7CisJCQlyYyA9IHFldGhfbDNfZGVyZWdpc3Rlcl9hZGRyX2VudHJ5KGNhcmQsIGFkZHIpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssICpmbGFncyk7CisJCQlpZiAoIXJjIHx8IChyYyA9PSBJUEFfUkNfTUNfQUREUl9OT1RfRk9VTkQpKQorCQkJCWtmcmVlKGFkZHIpOworCQkJZWxzZQorCQkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmVudHJ5LCAmZmFpbF9saXN0KTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwl9CisJbGlzdF9zcGxpY2UoJmZhaWxfbGlzdCwgJmNhcmQtPmlwX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wzX3NldF9pcF9hZGRyX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0YmRfbGlzdDsKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKnRvZG8sICphZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInNkaXBsaXN0Iik7CisJUUVUSF9EQkZfSEVYKFRSQUNFLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwl0YmRfbGlzdCA9IGNhcmQtPmlwX3RiZF9saXN0OworCWNhcmQtPmlwX3RiZF9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9BVE9NSUMpOworCWlmICghY2FyZC0+aXBfdGJkX2xpc3QpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMCwgInNpbG5vbWVtIik7CisJCWNhcmQtPmlwX3RiZF9saXN0ID0gdGJkX2xpc3Q7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlJTklUX0xJU1RfSEVBRChjYXJkLT5pcF90YmRfbGlzdCk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkodGJkX2xpc3QpKSB7CisJCXRvZG8gPSBsaXN0X2VudHJ5KHRiZF9saXN0LT5uZXh0LCBzdHJ1Y3QgcWV0aF9pcGFkZHIsIGVudHJ5KTsKKwkJbGlzdF9kZWwoJnRvZG8tPmVudHJ5KTsKKwkJaWYgKHRvZG8tPnR5cGUgPT0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMpIHsKKwkJCV9fcWV0aF9sM19kZWxldGVfYWxsX21jKGNhcmQsICZmbGFncyk7CisJCQlrZnJlZSh0b2RvKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJjID0gX19xZXRoX2wzX3JlZl9pcF9vbl9jYXJkKGNhcmQsIHRvZG8sICZhZGRyKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZTsgb25seSBhZGp1c3RlZCByZWZjb3VudCAqLworCQkJa2ZyZWUodG9kbyk7CisJCX0gZWxzZSBpZiAocmMgPT0gMSkgeworCQkJLyogbmV3IGVudHJ5IHRvIGJlIGFkZGVkIHRvIG9uLWNhcmQgbGlzdCAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCQkJcmMgPSBxZXRoX2wzX3JlZ2lzdGVyX2FkZHJfZW50cnkoY2FyZCwgdG9kbyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFyYyB8fCAocmMgPT0gSVBBX1JDX0xBTl9PRkZMSU5FKSkKKwkJCQlsaXN0X2FkZF90YWlsKCZ0b2RvLT5lbnRyeSwgJmNhcmQtPmlwX2xpc3QpOworCQkJZWxzZQorCQkJCWtmcmVlKHRvZG8pOworCQl9IGVsc2UgaWYgKHJjID09IC0xKSB7CisJCQkvKiBvbi1jYXJkIGVudHJ5IHRvIGJlIHJlbW92ZWQgKi8KKwkJCWxpc3RfZGVsX2luaXQoJmFkZHItPmVudHJ5KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwkJCXJjID0gcWV0aF9sM19kZXJlZ2lzdGVyX2FkZHJfZW50cnkoY2FyZCwgYWRkcik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFyYyB8fCAocmMgPT0gSVBBX1JDX1BSSU1BUllfQUxSRUFEWV9ERUZJTkVEKSkKKwkJCQlrZnJlZShhZGRyKTsKKwkJCWVsc2UKKwkJCQlsaXN0X2FkZF90YWlsKCZhZGRyLT5lbnRyeSwgJmNhcmQtPmlwX2xpc3QpOworCQkJa2ZyZWUodG9kbyk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCWtmcmVlKHRiZF9saXN0KTsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sM19jbGVhcl9pcF9saXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBjbGVhbiwKKwkJCQkJaW50IHJlY292ZXIpCit7CisJc3RydWN0IHFldGhfaXBhZGRyICphZGRyLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiY2xlYXJpcCIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CisJLyogY2xlYXIgdG9kbyBsaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkZHIsIHRtcCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CisJCWxpc3RfZGVsKCZhZGRyLT5lbnRyeSk7CisJCWtmcmVlKGFkZHIpOworCX0KKworCXdoaWxlICghbGlzdF9lbXB0eSgmY2FyZC0+aXBfbGlzdCkpIHsKKwkJYWRkciA9IGxpc3RfZW50cnkoY2FyZC0+aXBfbGlzdC5uZXh0LAorCQkJCSAgc3RydWN0IHFldGhfaXBhZGRyLCBlbnRyeSk7CisJCWxpc3RfZGVsX2luaXQoJmFkZHItPmVudHJ5KTsKKwkJaWYgKGNsZWFuKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CisJCQlxZXRoX2wzX2RlcmVnaXN0ZXJfYWRkcl9lbnRyeShjYXJkLCBhZGRyKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CisJCX0KKwkJaWYgKCFyZWNvdmVyIHx8IGFkZHItPmlzX211bHRpY2FzdCkgeworCQkJa2ZyZWUoYWRkcik7CisJCQljb250aW51ZTsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZhZGRyLT5lbnRyeSwgY2FyZC0+aXBfdGJkX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19hZGRyZXNzX2V4aXN0c19pbl9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkciwgaW50IHNhbWVfdHlwZSkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBsaXN0LCBlbnRyeSkgeworCQlpZiAoKHRtcC0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpICYmCisJCSAgICAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpICYmCisJCSAgICAoKHNhbWVfdHlwZSAmJiAodG1wLT50eXBlID09IGFkZHItPnR5cGUpKSB8fAorCQkgICAgKCFzYW1lX3R5cGUgJiYgKHRtcC0+dHlwZSAhPSBhZGRyLT50eXBlKSkpICYmCisJCSAgICAodG1wLT51LmE0LmFkZHIgPT0gYWRkci0+dS5hNC5hZGRyKSkKKwkJCXJldHVybiAxOworCisJCWlmICgodG1wLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgJiYKKwkJICAgIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgJiYKKwkJICAgICgoc2FtZV90eXBlICYmICh0bXAtPnR5cGUgPT0gYWRkci0+dHlwZSkpIHx8CisJCSAgICAoIXNhbWVfdHlwZSAmJiAodG1wLT50eXBlICE9IGFkZHItPnR5cGUpKSkgJiYKKwkJICAgIChtZW1jbXAoJnRtcC0+dS5hNi5hZGRyLCAmYWRkci0+dS5hNi5hZGRyLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSkKKwkJCXJldHVybiAxOworCisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfc2VuZF9zZXRkZWxtYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJc3RydWN0IHFldGhfaXBhZGRyICphZGRyLCBpbnQgaXBhY21kKQoreworCWludCByYzsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNldGRlbG1jIik7CisKKwlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwltZW1jcHkoJmNtZC0+ZGF0YS5zZXRkZWxpcG0ubWFjLCBhZGRyLT5tYWMsIE9TQV9BRERSX0xFTik7CisJaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY2KQorCQltZW1jcHkoY21kLT5kYXRhLnNldGRlbGlwbS5pcDYsICZhZGRyLT51LmE2LmFkZHIsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJZWxzZQorCQltZW1jcHkoJmNtZC0+ZGF0YS5zZXRkZWxpcG0uaXA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKKworCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sM19maWxsX25ldG1hc2sodTggKm5ldG1hc2ssIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGksIGo7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaiA9IChsZW4pIC0gKGkgKiA4KTsKKwkJaWYgKGogPj0gOCkKKwkJCW5ldG1hc2tbaV0gPSAweGZmOworCQllbHNlIGlmIChqID4gMCkKKwkJCW5ldG1hc2tbaV0gPSAodTgpKDB4RkYwMCA+PiBqKTsKKwkJZWxzZQorCQkJbmV0bWFza1tpXSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IHFldGhfbDNfc2VuZF9zZXRkZWxpcChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIsIGludCBpcGFjbWQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgcmM7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKwlfX3U4IG5ldG1hc2tbMTZdOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInNldGRlbGlwIik7CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJmbGFncyUwMlgiLCBmbGFncyk7CisKKwlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpIHsKKwkJbWVtY3B5KGNtZC0+ZGF0YS5zZXRkZWxpcDYuaXBfYWRkciwgJmFkZHItPnUuYTYuYWRkciwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJcWV0aF9sM19maWxsX25ldG1hc2sobmV0bWFzaywgYWRkci0+dS5hNi5wZnhsZW4pOworCQltZW1jcHkoY21kLT5kYXRhLnNldGRlbGlwNi5tYXNrLCBuZXRtYXNrLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQljbWQtPmRhdGEuc2V0ZGVsaXA2LmZsYWdzID0gZmxhZ3M7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGNtZC0+ZGF0YS5zZXRkZWxpcDQuaXBfYWRkciwgJmFkZHItPnUuYTQuYWRkciwgNCk7CisJCW1lbWNweShjbWQtPmRhdGEuc2V0ZGVsaXA0Lm1hc2ssICZhZGRyLT51LmE0Lm1hc2ssIDQpOworCQljbWQtPmRhdGEuc2V0ZGVsaXA0LmZsYWdzID0gZmxhZ3M7CisJfQorCisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfc2VuZF9zZXRyb3V0aW5nKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJZW51bSBxZXRoX3JvdXRpbmdfdHlwZXMgdHlwZSwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzZXRyb3V0ZyIpOworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRSVEcsIHByb3QpOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwljbWQtPmRhdGEuc2V0cnRnLnR5cGUgPSAodHlwZSk7CisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wzX2NvcnJlY3Rfcm91dGluZ190eXBlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWVudW0gcWV0aF9yb3V0aW5nX3R5cGVzICp0eXBlLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90KQoreworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CisJCXN3aXRjaCAoKnR5cGUpIHsKKwkJY2FzZSBOT19ST1VURVI6CisJCWNhc2UgUFJJTUFSWV9DT05ORUNUT1I6CisJCWNhc2UgU0VDT05EQVJZX0NPTk5FQ1RPUjoKKwkJY2FzZSBNVUxUSUNBU1RfUk9VVEVSOgorCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJZ290byBvdXRfaW52YWw7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKCp0eXBlKSB7CisJCWNhc2UgTk9fUk9VVEVSOgorCQljYXNlIFBSSU1BUllfUk9VVEVSOgorCQljYXNlIFNFQ09OREFSWV9ST1VURVI6CisJCQlyZXR1cm47CisJCWNhc2UgTVVMVElDQVNUX1JPVVRFUjoKKwkJCWlmIChxZXRoX2lzX2lwYWZ1bmNfc3VwcG9ydGVkKGNhcmQsIHByb3QsCisJCQkJCQkgICAgICBJUEFfT1NBX01DX1JPVVRFUikpCisJCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJZ290byBvdXRfaW52YWw7CisJCX0KKwl9CitvdXRfaW52YWw6CisJUFJJTlRfV0FSTigiUm91dGluZyB0eXBlICclcycgbm90IHN1cHBvcnRlZCBmb3IgaW50ZXJmYWNlICVzLlxuIgorCQkgICAiUm91dGVyIHN0YXR1cyBzZXQgdG8gJ25vIHJvdXRlcicuXG4iLAorCQkgICAoKCp0eXBlID09IFBSSU1BUllfUk9VVEVSKT8gInByaW1hcnkgcm91dGVyIiA6CisJCSAgICAoKnR5cGUgPT0gU0VDT05EQVJZX1JPVVRFUik/ICJzZWNvbmRhcnkgcm91dGVyIiA6CisJCSAgICAoKnR5cGUgPT0gUFJJTUFSWV9DT05ORUNUT1IpPyAicHJpbWFyeSBjb25uZWN0b3IiIDoKKwkJICAgICgqdHlwZSA9PSBTRUNPTkRBUllfQ09OTkVDVE9SKT8gInNlY29uZGFyeSBjb25uZWN0b3IiIDoKKwkJICAgICgqdHlwZSA9PSBNVUxUSUNBU1RfUk9VVEVSKT8gIm11bHRpY2FzdCByb3V0ZXIiIDoKKwkJICAgICJ1bmtub3duIiksCisJCSAgIGNhcmQtPmRldi0+bmFtZSk7CisJKnR5cGUgPSBOT19ST1VURVI7Cit9CisKK2ludCBxZXRoX2wzX3NldHJvdXRpbmdfdjQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0cnRnNCIpOworCisJcWV0aF9sM19jb3JyZWN0X3JvdXRpbmdfdHlwZShjYXJkLCAmY2FyZC0+b3B0aW9ucy5yb3V0ZTQudHlwZSwKKwkJCQkgIFFFVEhfUFJPVF9JUFY0KTsKKworCXJjID0gcWV0aF9sM19zZW5kX3NldHJvdXRpbmcoY2FyZCwgY2FyZC0+b3B0aW9ucy5yb3V0ZTQudHlwZSwKKwkJCQkgIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAocmMpIHsKKwkJY2FyZC0+b3B0aW9ucy5yb3V0ZTQudHlwZSA9IE5PX1JPVVRFUjsKKwkJUFJJTlRfV0FSTigiRXJyb3IgKDB4JTA0eCkgd2hpbGUgc2V0dGluZyByb3V0aW5nIHR5cGUgb24gJXMuICIKKwkJCSAgICJUeXBlIHNldCB0byAnbm8gcm91dGVyJy5cbiIsCisJCQkgICByYywgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJfQorCXJldHVybiByYzsKK30KKworaW50IHFldGhfbDNfc2V0cm91dGluZ192NihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0cnRnNiIpOworI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKQorCQlyZXR1cm4gMDsKKwlxZXRoX2wzX2NvcnJlY3Rfcm91dGluZ190eXBlKGNhcmQsICZjYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlLAorCQkJCSAgUUVUSF9QUk9UX0lQVjYpOworCisJcmMgPSBxZXRoX2wzX3NlbmRfc2V0cm91dGluZyhjYXJkLCBjYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlLAorCQkJCSAgUUVUSF9QUk9UX0lQVjYpOworCWlmIChyYykgeworCQljYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlID0gTk9fUk9VVEVSOworCQlQUklOVF9XQVJOKCJFcnJvciAoMHglMDR4KSB3aGlsZSBzZXR0aW5nIHJvdXRpbmcgdHlwZSBvbiAlcy4gIgorCQkJICAgIlR5cGUgc2V0IHRvICdubyByb3V0ZXInLlxuIiwKKwkJCSAgIHJjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBJUCBhZGRyZXNzIHRha2VvdmVyIHJlbGF0ZWQgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIHFldGhfbDNfY2xlYXJfaXBhdG9fbGlzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCisJc3RydWN0IHFldGhfaXBhdG9fZW50cnkgKmlwYXRvZSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXBhdG9lLCB0bXAsICZjYXJkLT5pcGF0by5lbnRyaWVzLCBlbnRyeSkgeworCQlsaXN0X2RlbCgmaXBhdG9lLT5lbnRyeSk7CisJCWtmcmVlKGlwYXRvZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKK30KKworaW50IHFldGhfbDNfYWRkX2lwYXRvX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQkJc3RydWN0IHFldGhfaXBhdG9fZW50cnkgKm5ldykKK3sKKwlzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqaXBhdG9lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJhZGRpcGF0byIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpcGF0b2UsICZjYXJkLT5pcGF0by5lbnRyaWVzLCBlbnRyeSkgeworCQlpZiAoaXBhdG9lLT5wcm90byAhPSBuZXctPnByb3RvKQorCQkJY29udGludWU7CisJCWlmICghbWVtY21wKGlwYXRvZS0+YWRkciwgbmV3LT5hZGRyLAorCQkJICAgIChpcGF0b2UtPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KT8gNDoxNikgJiYKKwkJICAgIChpcGF0b2UtPm1hc2tfYml0cyA9PSBuZXctPm1hc2tfYml0cykpIHsKKwkJCVBSSU5UX1dBUk4oImlwYXRvIGVudHJ5IGFscmVhZHkgZXhpc3RzIVxuIik7CisJCQlyYyA9IC1FRVhJU1Q7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIXJjKQorCQlsaXN0X2FkZF90YWlsKCZuZXctPmVudHJ5LCAmY2FyZC0+aXBhdG8uZW50cmllcyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJjOworfQorCit2b2lkIHFldGhfbDNfZGVsX2lwYXRvX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLCB1OCAqYWRkciwgaW50IG1hc2tfYml0cykKK3sKKwlzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqaXBhdG9lLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZGVsaXBhdG8iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcGF0b2UsIHRtcCwgJmNhcmQtPmlwYXRvLmVudHJpZXMsIGVudHJ5KSB7CisJCWlmIChpcGF0b2UtPnByb3RvICE9IHByb3RvKQorCQkJY29udGludWU7CisJCWlmICghbWVtY21wKGlwYXRvZS0+YWRkciwgYWRkciwKKwkJCSAgICAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpPyA0OjE2KSAmJgorCQkgICAgKGlwYXRvZS0+bWFza19iaXRzID09IG1hc2tfYml0cykpIHsKKwkJCWxpc3RfZGVsKCZpcGF0b2UtPmVudHJ5KTsKKwkJCWtmcmVlKGlwYXRvZSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogVklQQSByZWxhdGVkIGZ1bmN0aW9ucworICovCitpbnQgcWV0aF9sM19hZGRfdmlwYShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKKwkgICAgICBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmlwYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlpcGFkZHIgPSBxZXRoX2wzX2dldF9hZGRyX2J1ZmZlcihwcm90byk7CisJaWYgKGlwYWRkcikgeworCQlpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJhZGR2aXBhNCIpOworCQkJbWVtY3B5KCZpcGFkZHItPnUuYTQuYWRkciwgYWRkciwgNCk7CisJCQlpcGFkZHItPnUuYTQubWFzayA9IDA7CisJCX0gZWxzZSBpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJhZGR2aXBhNiIpOworCQkJbWVtY3B5KCZpcGFkZHItPnUuYTYuYWRkciwgYWRkciwgMTYpOworCQkJaXBhZGRyLT51LmE2LnBmeGxlbiA9IDA7CisJCX0KKwkJaXBhZGRyLT50eXBlID0gUUVUSF9JUF9UWVBFX1ZJUEE7CisJCWlwYWRkci0+c2V0X2ZsYWdzID0gUUVUSF9JUEFfU0VUSVBfVklQQV9GTEFHOworCQlpcGFkZHItPmRlbF9mbGFncyA9IFFFVEhfSVBBX0RFTElQX1ZJUEFfRkxBRzsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlpZiAocWV0aF9sM19hZGRyZXNzX2V4aXN0c19pbl9saXN0KCZjYXJkLT5pcF9saXN0LCBpcGFkZHIsIDApIHx8CisJICAgIHFldGhfbDNfYWRkcmVzc19leGlzdHNfaW5fbGlzdChjYXJkLT5pcF90YmRfbGlzdCwgaXBhZGRyLCAwKSkKKwkJcmMgPSAtRUVYSVNUOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigiQ2Fubm90IGFkZCBWSVBBLiBBZGRyZXNzIGFscmVhZHkgZXhpc3RzIVxuIik7CisJCXJldHVybiByYzsKKwl9CisJaWYgKCFxZXRoX2wzX2FkZF9pcChjYXJkLCBpcGFkZHIpKQorCQlrZnJlZShpcGFkZHIpOworCXFldGhfbDNfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgcWV0aF9sM19kZWxfdmlwYShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKKwkgICAgICBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmlwYWRkcjsKKworCWlwYWRkciA9IHFldGhfbDNfZ2V0X2FkZHJfYnVmZmVyKHByb3RvKTsKKwlpZiAoaXBhZGRyKSB7CisJCWlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCkgeworCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImRlbHZpcGE0Iik7CisJCQltZW1jcHkoJmlwYWRkci0+dS5hNC5hZGRyLCBhZGRyLCA0KTsKKwkJCWlwYWRkci0+dS5hNC5tYXNrID0gMDsKKwkJfSBlbHNlIGlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNikgeworCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImRlbHZpcGE2Iik7CisJCQltZW1jcHkoJmlwYWRkci0+dS5hNi5hZGRyLCBhZGRyLCAxNik7CisJCQlpcGFkZHItPnUuYTYucGZ4bGVuID0gMDsKKwkJfQorCQlpcGFkZHItPnR5cGUgPSBRRVRIX0lQX1RZUEVfVklQQTsKKwl9IGVsc2UKKwkJcmV0dXJuOworCWlmICghcWV0aF9sM19kZWxldGVfaXAoY2FyZCwgaXBhZGRyKSkKKwkJa2ZyZWUoaXBhZGRyKTsKKwlxZXRoX2wzX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7Cit9CisKKy8qCisgKiBwcm94eSBBUlAgcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworaW50IHFldGhfbDNfYWRkX3J4aXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8sCisJICAgICAgY29uc3QgdTggKmFkZHIpCit7CisJc3RydWN0IHFldGhfaXBhZGRyICppcGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJaXBhZGRyID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIocHJvdG8pOworCWlmIChpcGFkZHIpIHsKKwkJaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KSB7CisJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiYWRkcnhpcDQiKTsKKwkJCW1lbWNweSgmaXBhZGRyLT51LmE0LmFkZHIsIGFkZHIsIDQpOworCQkJaXBhZGRyLT51LmE0Lm1hc2sgPSAwOworCQl9IGVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KSB7CisJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiYWRkcnhpcDYiKTsKKwkJCW1lbWNweSgmaXBhZGRyLT51LmE2LmFkZHIsIGFkZHIsIDE2KTsKKwkJCWlwYWRkci0+dS5hNi5wZnhsZW4gPSAwOworCQl9CisJCWlwYWRkci0+dHlwZSA9IFFFVEhfSVBfVFlQRV9SWElQOworCQlpcGFkZHItPnNldF9mbGFncyA9IFFFVEhfSVBBX1NFVElQX1RBS0VPVkVSX0ZMQUc7CisJCWlwYWRkci0+ZGVsX2ZsYWdzID0gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlpZiAocWV0aF9sM19hZGRyZXNzX2V4aXN0c19pbl9saXN0KCZjYXJkLT5pcF9saXN0LCBpcGFkZHIsIDApIHx8CisJICAgIHFldGhfbDNfYWRkcmVzc19leGlzdHNfaW5fbGlzdChjYXJkLT5pcF90YmRfbGlzdCwgaXBhZGRyLCAwKSkKKwkJcmMgPSAtRUVYSVNUOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigiQ2Fubm90IGFkZCBSWElQLiBBZGRyZXNzIGFscmVhZHkgZXhpc3RzIVxuIik7CisJCXJldHVybiByYzsKKwl9CisJaWYgKCFxZXRoX2wzX2FkZF9pcChjYXJkLCBpcGFkZHIpKQorCQlrZnJlZShpcGFkZHIpOworCXFldGhfbDNfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBxZXRoX2wzX2RlbF9yeGlwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLAorCQkJY29uc3QgdTggKmFkZHIpCit7CisJc3RydWN0IHFldGhfaXBhZGRyICppcGFkZHI7CisKKwlpcGFkZHIgPSBxZXRoX2wzX2dldF9hZGRyX2J1ZmZlcihwcm90byk7CisJaWYgKGlwYWRkcikgeworCQlpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJhZGRyeGlwNCIpOworCQkJbWVtY3B5KCZpcGFkZHItPnUuYTQuYWRkciwgYWRkciwgNCk7CisJCQlpcGFkZHItPnUuYTQubWFzayA9IDA7CisJCX0gZWxzZSBpZiAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJhZGRyeGlwNiIpOworCQkJbWVtY3B5KCZpcGFkZHItPnUuYTYuYWRkciwgYWRkciwgMTYpOworCQkJaXBhZGRyLT51LmE2LnBmeGxlbiA9IDA7CisJCX0KKwkJaXBhZGRyLT50eXBlID0gUUVUSF9JUF9UWVBFX1JYSVA7CisJfSBlbHNlCisJCXJldHVybjsKKwlpZiAoIXFldGhfbDNfZGVsZXRlX2lwKGNhcmQsIGlwYWRkcikpCisJCWtmcmVlKGlwYWRkcik7CisJcWV0aF9sM19zZXRfaXBfYWRkcl9saXN0KGNhcmQpOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfcmVnaXN0ZXJfYWRkcl9lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKK3sKKwljaGFyIGJ1Zls1MF07CisJaW50IHJjID0gMDsKKwlpbnQgY250ID0gMzsKKworCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAic2V0YWRkcjQiKTsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAmYWRkci0+dS5hNC5hZGRyLCBzaXplb2YoaW50KSk7CisJfSBlbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAic2V0YWRkcjYiKTsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOworCX0gZWxzZSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJzZXRhZGRyPyIpOworCQlRRVRIX0RCRl9IRVgoVFJBQ0UsIDMsIGFkZHIsIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFkZHIpKTsKKwl9CisJZG8geworCQlpZiAoYWRkci0+aXNfbXVsdGljYXN0KQorCQkJcmMgPSAgcWV0aF9sM19zZW5kX3NldGRlbG1jKGNhcmQsIGFkZHIsIElQQV9DTURfU0VUSVBNKTsKKwkJZWxzZQorCQkJcmMgPSBxZXRoX2wzX3NlbmRfc2V0ZGVsaXAoY2FyZCwgYWRkciwgSVBBX0NNRF9TRVRJUCwKKwkJCQkJYWRkci0+c2V0X2ZsYWdzKTsKKwkJaWYgKHJjKQorCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZhaWxlZCIpOworCX0gd2hpbGUgKCgtLWNudCA+IDApICYmIHJjKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgIkZBSUxFRCIpOworCQlxZXRoX2wzX2lwYWRkcl90b19zdHJpbmcoYWRkci0+cHJvdG8sICh1OCAqKSZhZGRyLT51LCBidWYpOworCQlQUklOVF9XQVJOKCJDb3VsZCBub3QgcmVnaXN0ZXIgSVAgYWRkcmVzcyAlcyAocmM9MHgleC8lZClcbiIsCisJCQkgICBidWYsIHJjLCByYyk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX2RlcmVnaXN0ZXJfYWRkcl9lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJCQkJc3RydWN0IHFldGhfaXBhZGRyICphZGRyKQoreworCWludCByYyA9IDA7CisKKwlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImRlbGFkZHI0Iik7CisJCVFFVEhfREJGX0hFWChUUkFDRSwgMywgJmFkZHItPnUuYTQuYWRkciwgc2l6ZW9mKGludCkpOworCX0gZWxzZSBpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpIHsKKwkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImRlbGFkZHI2Iik7CisJCVFFVEhfREJGX0hFWChUUkFDRSwgMywgJmFkZHItPnUuYTYuYWRkciwgOCk7CisJCVFFVEhfREJGX0hFWChUUkFDRSwgMywgKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikgKyA4LCA4KTsKKwl9IGVsc2UgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAiZGVsYWRkcj8iKTsKKwkJUUVUSF9EQkZfSEVYKFRSQUNFLCAzLCBhZGRyLCBzaXplb2Yoc3RydWN0IHFldGhfaXBhZGRyKSk7CisJfQorCWlmIChhZGRyLT5pc19tdWx0aWNhc3QpCisJCXJjID0gcWV0aF9sM19zZW5kX3NldGRlbG1jKGNhcmQsIGFkZHIsIElQQV9DTURfREVMSVBNKTsKKwllbHNlCisJCXJjID0gcWV0aF9sM19zZW5kX3NldGRlbGlwKGNhcmQsIGFkZHIsIElQQV9DTURfREVMSVAsCisJCQkJCWFkZHItPmRlbF9mbGFncyk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJmYWlsZWQiKTsKKwkJLyogVE9ETzogcmUtYWN0aXZhdGUgdGhpcyB3YXJuaW5nIGFzIHNvb24gYXMgd2UgaGF2ZSBhCisJCSAqIGNsZWFuIG1pcmNvIGNvZGUKKwkJcWV0aF9pcGFkZHJfdG9fc3RyaW5nKGFkZHItPnByb3RvLCAodTggKikmYWRkci0+dSwgYnVmKTsKKwkJUFJJTlRfV0FSTigiQ291bGQgbm90IGRlcmVnaXN0ZXIgSVAgYWRkcmVzcyAlcyAocmM9JXgpXG4iLAorCQkJICAgYnVmLCByYyk7CisJCSovCisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIHU4IHFldGhfbDNfZ2V0X3FldGhfaGRyX2ZsYWdzNChpbnQgY2FzdF90eXBlKQoreworCWlmIChjYXN0X3R5cGUgPT0gUlROX01VTFRJQ0FTVCkKKwkJcmV0dXJuIFFFVEhfQ0FTVF9NVUxUSUNBU1Q7CisJaWYgKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKQorCQlyZXR1cm4gUUVUSF9DQVNUX0JST0FEQ0FTVDsKKwlyZXR1cm4gUUVUSF9DQVNUX1VOSUNBU1Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggcWV0aF9sM19nZXRfcWV0aF9oZHJfZmxhZ3M2KGludCBjYXN0X3R5cGUpCit7CisJdTggY3QgPSBRRVRIX0hEUl9QQVNTVEhSVSB8IFFFVEhfSERSX0lQVjY7CisJaWYgKGNhc3RfdHlwZSA9PSBSVE5fTVVMVElDQVNUKQorCQlyZXR1cm4gY3QgfCBRRVRIX0NBU1RfTVVMVElDQVNUOworCWlmIChjYXN0X3R5cGUgPT0gUlROX0FOWUNBU1QpCisJCXJldHVybiBjdCB8IFFFVEhfQ0FTVF9BTllDQVNUOworCWlmIChjYXN0X3R5cGUgPT0gUlROX0JST0FEQ0FTVCkKKwkJcmV0dXJuIGN0IHwgUUVUSF9DQVNUX0JST0FEQ0FTVDsKKwlyZXR1cm4gY3QgfCBRRVRIX0NBU1RfVU5JQ0FTVDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3NlbmRfc2V0YWRwX21vZGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191MzIgY29tbWFuZCwKKwkJCQkJX191MzIgbW9kZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJhZHBtb2RlIik7CisKKwlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBjb21tYW5kLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLm1vZGUgPSBtb2RlOworCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX2RlZmF1bHRfc2V0YWRhcHRlcnBhcm1zX2NiLAorCQkJICAgICAgIE5VTEwpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3NldGFkYXB0ZXJfaHN0cihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJhZHBoc3RyIik7CisKKwlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX0JST0FEQ0FTVF9NT0RFKSkgeworCQlyYyA9IHFldGhfbDNfc2VuZF9zZXRhZHBfbW9kZShjYXJkLAorCQkJCQlJUEFfU0VUQURQX1NFVF9CUk9BRENBU1RfTU9ERSwKKwkJCQkJY2FyZC0+b3B0aW9ucy5icm9hZGNhc3RfbW9kZSk7CisJCWlmIChyYykKKwkJCVBSSU5UX1dBUk4oImNvdWxkbid0IHNldCBicm9hZGNhc3QgbW9kZSBvbiAiCisJCQkJICAgImRldmljZSAlczogeCV4XG4iLAorCQkJCSAgIENBUkRfQlVTX0lEKGNhcmQpLCByYyk7CisJCXJjID0gcWV0aF9sM19zZW5kX3NldGFkcF9tb2RlKGNhcmQsCisJCQkJCUlQQV9TRVRBRFBfQUxURVJfTUFDX0FERFJFU1MsCisJCQkJCWNhcmQtPm9wdGlvbnMubWFjYWRkcl9tb2RlKTsKKwkJaWYgKHJjKQorCQkJUFJJTlRfV0FSTigiY291bGRuJ3Qgc2V0IG1hY2FkZHIgbW9kZSBvbiAiCisJCQkJICAgImRldmljZSAlczogeCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCWlmIChjYXJkLT5vcHRpb25zLmJyb2FkY2FzdF9tb2RlID09IFFFVEhfVFJfQlJPQURDQVNUX0xPQ0FMKQorCQlQUklOVF9XQVJOKCJzZXQgYWRhcHRlciBwYXJhbWV0ZXJzIG5vdCBhdmFpbGFibGUgIgorCQkJICAgInRvIHNldCBicm9hZGNhc3QgbW9kZSwgdXNpbmcgQUxMUklOR1MgIgorCQkJICAgIm9uIGRldmljZSAlczpcbiIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlpZiAoY2FyZC0+b3B0aW9ucy5tYWNhZGRyX21vZGUgPT0gUUVUSF9UUl9NQUNBRERSX0NBTk9OSUNBTCkKKwkJUFJJTlRfV0FSTigic2V0IGFkYXB0ZXIgcGFyYW1ldGVycyBub3QgYXZhaWxhYmxlICIKKwkJCSAgICJ0byBzZXQgbWFjYWRkciBtb2RlLCB1c2luZyBOT05DQU5PTklDQUwgIgorCQkJICAgIm9uIGRldmljZSAlczpcbiIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3NldGFkYXB0ZXJfcGFybXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic2V0YWRwcm0iKTsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEQVBURVJQQVJNUykpIHsKKwkJUFJJTlRfV0FSTigic2V0IGFkYXB0ZXIgcGFyYW1ldGVycyBub3Qgc3VwcG9ydGVkICIKKwkJCSAgICJvbiBkZXZpY2UgJXMuXG4iLAorCQkJICAgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiIG5vdHN1cHAiKTsKKwkJcmV0dXJuIDA7CisJfQorCXJjID0gcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7CisJaWYgKHJjKSB7CisJCVBSSU5UX1dBUk4oImNvdWxkbid0IHNldCBhZGFwdGVyIHBhcmFtZXRlcnMgb24gZGV2aWNlICVzOiAiCisJCQkgICAieCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUykpIHsKKwkJcmMgPSBxZXRoX3NldGFkcHBhcm1zX2NoYW5nZV9tYWNhZGRyKGNhcmQpOworCQlpZiAocmMpCisJCQlQUklOVF9XQVJOKCJjb3VsZG4ndCBnZXQgTUFDIGFkZHJlc3Mgb24gIgorCQkJCSAgICJkZXZpY2UgJXM6IHgleFxuIiwKKwkJCQkgICBDQVJEX0JVU19JRChjYXJkKSwgcmMpOworCX0KKworCWlmICgoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfSFNUUikgfHwKKwkgICAgKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0xBTkVfVFIpKQorCQlyYyA9IHFldGhfbDNfc2V0YWRhcHRlcl9oc3RyKGNhcmQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfZGVmYXVsdF9zZXRhc3NwYXJtc19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImRlZmFkcGNiIik7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSA9PSAwKSB7CisJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5yZXR1cm5fY29kZTsKKwkJaWYgKGNtZC0+aGRyLnByb3RfdmVyc2lvbiA9PSBRRVRIX1BST1RfSVBWNCkKKwkJCWNhcmQtPm9wdGlvbnMuaXBhNC5lbmFibGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX2VuYWJsZWQ7CisJCWlmIChjbWQtPmhkci5wcm90X3ZlcnNpb24gPT0gUUVUSF9QUk9UX0lQVjYpCisJCQljYXJkLT5vcHRpb25zLmlwYTYuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOworCX0KKwlpZiAoY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5hc3Npc3Rfbm8gPT0gSVBBX0lOQk9VTkRfQ0hFQ0tTVU0gJiYKKwkgICAgY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5jb21tYW5kX2NvZGUgPT0gSVBBX0NNRF9BU1NfU1RBUlQpIHsKKwkJY2FyZC0+aW5mby5jc3VtX21hc2sgPSBjbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5mbGFnc18zMmJpdDsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDMsICJjc3VtOiVkIiwgY2FyZC0+aW5mby5jc3VtX21hc2spOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKnFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZCgKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfaXBhX2Z1bmNzIGlwYV9mdW5jLCBfX3UxNiBjbWRfY29kZSwKKwlfX3UxNiBsZW4sIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCit7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJnZXRhc3NjbSIpOworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRBU1NQQVJNUywgcHJvdCk7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5hc3Npc3Rfbm8gPSBpcGFfZnVuYzsKKwljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmxlbmd0aCA9IDggKyBsZW47CisJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5jb21tYW5kX2NvZGUgPSBjbWRfY29kZTsKKwljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlID0gMDsKKwljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnNlcV9ubyA9IDA7CisKKwlyZXR1cm4gaW9iOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfc2VuZF9zZXRhc3NwYXJtcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwgX191MTYgbGVuLCBsb25nIGRhdGEsCisJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkgKiwKKwkJdW5zaWduZWQgbG9uZyksCisJdm9pZCAqcmVwbHlfcGFyYW0pCit7CisJaW50IHJjOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzZW5kYXNzcCIpOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCWlmIChsZW4gPD0gc2l6ZW9mKF9fdTMyKSkKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmRhdGEuZmxhZ3NfMzJiaXQgPSAoX191MzIpIGRhdGE7CisJZWxzZSAgIC8qIChsZW4gPiBzaXplb2YoX191MzIpKSAqLworCQltZW1jcHkoJmNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLCAodm9pZCAqKSBkYXRhLCBsZW4pOworCisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHJlcGx5X2NiLCByZXBseV9wYXJhbSk7CisJcmV0dXJuIHJjOworfQorCisjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgorc3RhdGljIGludCBxZXRoX2wzX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zX2lwdjYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJZW51bSBxZXRoX2lwYV9mdW5jcyBpcGFfZnVuYywgX191MTYgY21kX2NvZGUpCit7CisJaW50IHJjOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzaW1hc3NwNiIpOworCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBpcGFfZnVuYywgY21kX2NvZGUsCisJCQkJICAgICAgIDAsIFFFVEhfUFJPVF9JUFY2KTsKKwlyYyA9IHFldGhfbDNfc2VuZF9zZXRhc3NwYXJtcyhjYXJkLCBpb2IsIDAsIDAsCisJCQkJICAgcWV0aF9sM19kZWZhdWx0X3NldGFzc3Bhcm1zX2NiLCBOVUxMKTsKKwlyZXR1cm4gcmM7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBxZXRoX2wzX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWVudW0gcWV0aF9pcGFfZnVuY3MgaXBhX2Z1bmMsIF9fdTE2IGNtZF9jb2RlLCBsb25nIGRhdGEpCit7CisJaW50IHJjOworCWludCBsZW5ndGggPSAwOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJzaW1hc3NwNCIpOworCWlmIChkYXRhKQorCQlsZW5ndGggPSBzaXplb2YoX191MzIpOworCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBpcGFfZnVuYywgY21kX2NvZGUsCisJCQkJICAgICAgIGxlbmd0aCwgUUVUSF9QUk9UX0lQVjQpOworCXJjID0gcWV0aF9sM19zZW5kX3NldGFzc3Bhcm1zKGNhcmQsIGlvYiwgbGVuZ3RoLCBkYXRhLAorCQkJCSAgIHFldGhfbDNfZGVmYXVsdF9zZXRhc3NwYXJtc19jYiwgTlVMTCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfc3RhcnRfaXBhX2FycF9wcm9jZXNzaW5nKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgImlwYWFycCIpOworCisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcpKSB7CisJCVBSSU5UX1dBUk4oIkFSUCBwcm9jZXNzaW5nIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAgIm9uICVzIVxuIiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJCXJldHVybiAwOworCX0KKwlyYyA9IHFldGhfbDNfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX0FSUF9QUk9DRVNTSU5HLAorCQkJCQlJUEFfQ01EX0FTU19TVEFSVCwgMCk7CisJaWYgKHJjKSB7CisJCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBzdGFydCBBUlAgcHJvY2Vzc2luZyAiCisJCQkgICAiYXNzaXN0IG9uICVzOiAweCV4XG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19zdGFydF9pcGFfaXBfZnJhZ21lbnRhdGlvbihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJpcGFpcGZyZyIpOworCisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBfRlJBR01FTlRBVElPTikpIHsKKwkJUFJJTlRfSU5GTygiSGFyZHdhcmUgSVAgZnJhZ21lbnRhdGlvbiBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJCXJldHVybiAgLUVPUE5PVFNVUFA7CisJfQorCisJcmMgPSBxZXRoX2wzX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKGNhcmQsIElQQV9JUF9GUkFHTUVOVEFUSU9OLAorCQkJCQkgIElQQV9DTURfQVNTX1NUQVJULCAwKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigiQ291bGQgbm90IHN0YXJ0IEhhcmR3YXJlIElQIGZyYWdtZW50YXRpb24gIgorCQkJICAgImFzc2lzdCBvbiAlczogMHgleFxuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKKwl9IGVsc2UKKwkJUFJJTlRfSU5GTygiSGFyZHdhcmUgSVAgZnJhZ21lbnRhdGlvbiBlbmFibGVkIFxuIik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfc3RhcnRfaXBhX3NvdXJjZV9tYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3RzcmNtYWMiKTsKKworCWlmICghY2FyZC0+b3B0aW9ucy5mYWtlX2xsKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9TT1VSQ0VfTUFDKSkgeworCQlQUklOVF9JTkZPKCJJbmJvdW5kIHNvdXJjZSBhZGRyZXNzIG5vdCAiCisJCQkgICAic3VwcG9ydGVkIG9uICVzXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfU09VUkNFX01BQywKKwkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwgMCk7CisJaWYgKHJjKQorCQlQUklOVF9XQVJOKCJDb3VsZCBub3Qgc3RhcnQgaW5ib3VuZCBzb3VyY2UgIgorCQkJICAgImFzc2lzdCBvbiAlczogMHgleFxuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19zdGFydF9pcGFfdmxhbihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3RydHZsYW4iKTsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0ZVTExfVkxBTikpIHsKKwkJUFJJTlRfV0FSTigiVkxBTiBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLAorCQkJCVFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcmMgPSBxZXRoX2wzX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKGNhcmQsIElQQV9WTEFOX1BSSU8sCisJCQkJCSAgSVBBX0NNRF9BU1NfU1RBUlQsIDApOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJDb3VsZCBub3Qgc3RhcnQgdmxhbiAiCisJCQkgICAiYXNzaXN0IG9uICVzOiAweCV4XG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCX0gZWxzZSB7CisJCVBSSU5UX0lORk8oIlZMQU4gZW5hYmxlZCBcbiIpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19zdGFydF9pcGFfbXVsdGljYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInN0bWNhc3QiKTsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX01VTFRJQ0FTVElORykpIHsKKwkJUFJJTlRfV0FSTigiTXVsdGljYXN0IG5vdCBzdXBwb3J0ZWQgb24gJXNcbiIsCisJCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfTVVMVElDQVNUSU5HLAorCQkJCQkgIElQQV9DTURfQVNTX1NUQVJULCAwKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigiQ291bGQgbm90IHN0YXJ0IG11bHRpY2FzdCAiCisJCQkgICAiYXNzaXN0IG9uICVzOiByYz0laVxuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKKwl9IGVsc2UgeworCQlQUklOVF9JTkZPKCJNdWx0aWNhc3QgZW5hYmxlZFxuIik7CisJCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfcXVlcnlfaXBhc3Npc3RzX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJxaXBhc3NjYiIpOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlpZiAoY21kLT5oZHIucHJvdF92ZXJzaW9uID09IFFFVEhfUFJPVF9JUFY0KSB7CisJCWNhcmQtPm9wdGlvbnMuaXBhNC5zdXBwb3J0ZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfc3VwcG9ydGVkOworCQljYXJkLT5vcHRpb25zLmlwYTQuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOworCX0gZWxzZSB7CisJCWNhcmQtPm9wdGlvbnMuaXBhNi5zdXBwb3J0ZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfc3VwcG9ydGVkOworCQljYXJkLT5vcHRpb25zLmlwYTYuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOworCX0KKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic3VwcGVuYmwiKTsKKwlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiV4IiwgY21kLT5oZHIuaXBhX3N1cHBvcnRlZCk7CisJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIleCIsIGNtZC0+aGRyLmlwYV9lbmFibGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3F1ZXJ5X2lwYXNzaXN0cyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCit7CisJaW50IHJjOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAicWlwYXNzaSVpIiwgcHJvdCk7CisJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1FJUEFTU0lTVCwgcHJvdCk7CisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfbDNfcXVlcnlfaXBhc3Npc3RzX2NiLCBOVUxMKTsKKwlyZXR1cm4gcmM7Cit9CisKKyNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CitzdGF0aWMgaW50IHFldGhfbDNfc29mdHNldHVwX2lwdjYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic29mdGlwdjYiKTsKKworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKQorCQlnb3RvIG91dDsKKworCXJjID0gcWV0aF9sM19xdWVyeV9pcGFzc2lzdHMoY2FyZCwgUUVUSF9QUk9UX0lQVjYpOworCWlmIChyYykgeworCQlQUklOVF9FUlIoIklQdjYgcXVlcnkgaXBhc3Npc3QgZmFpbGVkIG9uICVzXG4iLAorCQkJICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IHFldGhfbDNfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX0lQVjYsCisJCQkJCSAgSVBBX0NNRF9BU1NfU1RBUlQsIDMpOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJJUHY2IHN0YXJ0IGFzc2lzdCAodmVyc2lvbiA0KSBmYWlsZWQgIgorCQkJICAgIm9uICVzOiAweCV4XG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtc19pcHY2KGNhcmQsIElQQV9JUFY2LAorCQkJCQkgICAgICAgSVBBX0NNRF9BU1NfU1RBUlQpOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJJUFY2IHN0YXJ0IGFzc2lzdCAodmVyc2lvbiA2KSBmYWlsZWQgICIKKwkJCSAgICJvbiAlczogMHgleFxuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IHFldGhfbDNfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXNfaXB2NihjYXJkLCBJUEFfUEFTU1RIUlUsCisJCQkJCSAgICAgICBJUEFfQ01EX0FTU19TVEFSVCk7CisJaWYgKHJjKSB7CisJCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBlbmFibGUgcGFzc3Rocm91Z2ggIgorCQkJICAgIm9uICVzOiAweCV4XG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorb3V0OgorCVBSSU5UX0lORk8oIklQVjYgZW5hYmxlZCBcbiIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcWV0aF9sM19zdGFydF9pcGFfaXB2NihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3RydGlwdjYiKTsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKSB7CisJCVBSSU5UX1dBUk4oIklQdjYgbm90IHN1cHBvcnRlZCBvbiAlc1xuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlyZXR1cm4gMDsKKwl9CisjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgorCXJjID0gcWV0aF9sM19zb2Z0c2V0dXBfaXB2NihjYXJkKTsKKyNlbmRpZgorCXJldHVybiByYyA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19zdGFydF9pcGFfYnJvYWRjYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInN0YnJkY3N0Iik7CisJY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9IDA7CisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfRklMVEVSSU5HKSkgeworCQlQUklOVF9XQVJOKCJCcm9hZGNhc3Qgbm90IHN1cHBvcnRlZCBvbiAlc1xuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlyYyA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisJcmMgPSBxZXRoX2wzX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKGNhcmQsIElQQV9GSUxURVJJTkcsCisJCQkJCSAgSVBBX0NNRF9BU1NfU1RBUlQsIDApOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJDb3VsZCBub3QgZW5hYmxlIGJyb2FkY2FzdGluZyBmaWx0ZXJpbmcgIgorCQkJICAgIm9uICVzOiAweCV4XG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IHFldGhfbDNfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX0ZJTFRFUklORywKKwkJCQkJICBJUEFfQ01EX0FTU19DT05GSUdVUkUsIDEpOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJDb3VsZCBub3Qgc2V0IHVwIGJyb2FkY2FzdCBmaWx0ZXJpbmcgb24gJXM6IDB4JXhcbiIsCisJCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJCWdvdG8gb3V0OworCX0KKwljYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID0gUUVUSF9CUk9BRENBU1RfV0lUSF9FQ0hPOworCVBSSU5UX0lORk8oIkJyb2FkY2FzdCBlbmFibGVkIFxuIik7CisJcmMgPSBxZXRoX2wzX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKGNhcmQsIElQQV9GSUxURVJJTkcsCisJCQkJCSAgSVBBX0NNRF9BU1NfRU5BQkxFLCAxKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigiQ291bGQgbm90IHNldCB1cCBicm9hZGNhc3QgZWNobyBmaWx0ZXJpbmcgb24gIgorCQkJICAgIiVzOiAweCV4XG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJCWdvdG8gb3V0OworCX0KKwljYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID0gUUVUSF9CUk9BRENBU1RfV0lUSE9VVF9FQ0hPOworb3V0OgorCWlmIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlKQorCQljYXJkLT5kZXYtPmZsYWdzIHw9IElGRl9CUk9BRENBU1Q7CisJZWxzZQorCQljYXJkLT5kZXYtPmZsYWdzICY9IH5JRkZfQlJPQURDQVNUOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3NlbmRfY2hlY2tzdW1fY29tbWFuZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYzsKKworCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfSU5CT1VORF9DSEVDS1NVTSwKKwkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwgMCk7CisJaWYgKHJjKSB7CisJCVBSSU5UX1dBUk4oIlN0YXJ0aW5nIEluYm91bmQgSFcgQ2hlY2tzdW1taW5nIGZhaWxlZCBvbiAlczogIgorCQkJICAgIjB4JXgsXG5jb250aW51aW5nIHVzaW5nIEluYm91bmQgU1cgQ2hlY2tzdW1taW5nXG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfSU5CT1VORF9DSEVDS1NVTSwKKwkJCQkJICBJUEFfQ01EX0FTU19FTkFCTEUsCisJCQkJCSAgY2FyZC0+aW5mby5jc3VtX21hc2spOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJFbmFibGluZyBJbmJvdW5kIEhXIENoZWNrc3VtbWluZyBmYWlsZWQgb24gJXM6ICIKKwkJCSAgICIweCV4LFxuY29udGludWluZyB1c2luZyBJbmJvdW5kIFNXIENoZWNrc3VtbWluZ1xuIiwKKwkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3N0YXJ0X2lwYV9jaGVja3N1bShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYyA9IDA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3RydGNzdW0iKTsKKworCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gTk9fQ0hFQ0tTVU1NSU5HKSB7CisJCVBSSU5UX1dBUk4oIlVzaW5nIG5vIGNoZWNrc3VtbWluZyBvbiAlcy5cbiIsCisJCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gU1dfQ0hFQ0tTVU1NSU5HKSB7CisJCVBSSU5UX1dBUk4oIlVzaW5nIFNXIGNoZWNrc3VtbWluZyBvbiAlcy5cbiIsCisJCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lOQk9VTkRfQ0hFQ0tTVU0pKSB7CisJCVBSSU5UX1dBUk4oIkluYm91bmQgSFcgQ2hlY2tzdW1taW5nIG5vdCAiCisJCQkgICAic3VwcG9ydGVkIG9uICVzLFxuY29udGludWluZyAiCisJCQkgICAidXNpbmcgSW5ib3VuZCBTVyBDaGVja3N1bW1pbmdcbiIsCisJCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gU1dfQ0hFQ0tTVU1NSU5HOworCQlyZXR1cm4gMDsKKwl9CisJcmMgPSBxZXRoX2wzX3NlbmRfY2hlY2tzdW1fY29tbWFuZChjYXJkKTsKKwlpZiAoIXJjKQorCQlQUklOVF9JTkZPKCJIVyBDaGVja3N1bW1pbmcgKGluYm91bmQpIGVuYWJsZWQgXG4iKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3N0YXJ0X2lwYV90c28oc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic3R0c28iKTsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX09VVEJPVU5EX1RTTykpIHsKKwkJUFJJTlRfV0FSTigiT3V0Ym91bmQgVFNPIG5vdCBzdXBwb3J0ZWQgb24gJXNcbiIsCisJCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKKwl9IGVsc2UgeworCQlyYyA9IHFldGhfbDNfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX09VVEJPVU5EX1RTTywKKwkJCQkJCUlQQV9DTURfQVNTX1NUQVJULCAwKTsKKwkJaWYgKHJjKQorCQkJUFJJTlRfV0FSTigiQ291bGQgbm90IHN0YXJ0IG91dGJvdW5kIFRTTyAiCisJCQkJICAgImFzc2lzdCBvbiAlczogcmM9JWlcbiIsCisJCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOworCQllbHNlCisJCQlQUklOVF9JTkZPKCJPdXRib3VuZCBUU08gZW5hYmxlZFxuIik7CisJfQorCWlmIChyYyAmJiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pKSB7CisJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKKwkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3N0YXJ0X2lwYXNzaXN0cyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzdHJ0aXBhcyIpOworCXFldGhfbDNfc3RhcnRfaXBhX2FycF9wcm9jZXNzaW5nKGNhcmQpOwkvKiBnbyBvbiovCisJcWV0aF9sM19zdGFydF9pcGFfaXBfZnJhZ21lbnRhdGlvbihjYXJkKTsJLyogZ28gb24qLworCXFldGhfbDNfc3RhcnRfaXBhX3NvdXJjZV9tYWMoY2FyZCk7CS8qIGdvIG9uKi8KKwlxZXRoX2wzX3N0YXJ0X2lwYV92bGFuKGNhcmQpOwkJLyogZ28gb24qLworCXFldGhfbDNfc3RhcnRfaXBhX211bHRpY2FzdChjYXJkKTsJCS8qIGdvIG9uKi8KKwlxZXRoX2wzX3N0YXJ0X2lwYV9pcHY2KGNhcmQpOwkJLyogZ28gb24qLworCXFldGhfbDNfc3RhcnRfaXBhX2Jyb2FkY2FzdChjYXJkKTsJCS8qIGdvIG9uKi8KKwlxZXRoX2wzX3N0YXJ0X2lwYV9jaGVja3N1bShjYXJkKTsJCS8qIGdvIG9uKi8KKwlxZXRoX2wzX3N0YXJ0X2lwYV90c28oY2FyZCk7CQkvKiBnbyBvbiovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19wdXRfdW5pcXVlX2lkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAicHVuaXFlaWQiKTsKKworCWlmICgoY2FyZC0+aW5mby51bmlxdWVfaWQgJiBVTklRVUVfSURfTk9UX0JZX0NBUkQpID09CisJCVVOSVFVRV9JRF9OT1RfQllfQ0FSRCkKKwkJcmV0dXJuIC0xOworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9ERVNUUk9ZX0FERFIsCisJCQkJICAgICBRRVRIX1BST1RfSVBWNik7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCSooKF9fdTE2ICopICZjbWQtPmRhdGEuY3JlYXRlX2Rlc3Ryb3lfYWRkci51bmlxdWVfaWRbNl0pID0KKwkJCQljYXJkLT5pbmZvLnVuaXF1ZV9pZDsKKwltZW1jcHkoJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFswXSwKKwkgICAgICAgY2FyZC0+ZGV2LT5kZXZfYWRkciwgT1NBX0FERFJfTEVOKTsKKwlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfaXFkX3JlYWRfaW5pdGlhbF9tYWNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUgPT0gMCkKKwkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsCisJCQljbWQtPmRhdGEuY3JlYXRlX2Rlc3Ryb3lfYWRkci51bmlxdWVfaWQsIEVUSF9BTEVOKTsKKwllbHNlCisJCXJhbmRvbV9ldGhlcl9hZGRyKGNhcmQtPmRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19pcWRfcmVhZF9pbml0aWFsX21hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWludCByYyA9IDA7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJoc3JtYWMiKTsKKworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9DUkVBVEVfQUREUiwKKwkJCQkgICAgIFFFVEhfUFJPVF9JUFY2KTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQorCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CisKKwlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9sM19pcWRfcmVhZF9pbml0aWFsX21hY19jYiwKKwkJCQlOVUxMKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19nZXRfdW5pcXVlX2lkX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09IDApCisJCWNhcmQtPmluZm8udW5pcXVlX2lkID0gKigoX191MTYgKikKKwkJCQkmY21kLT5kYXRhLmNyZWF0ZV9kZXN0cm95X2FkZHIudW5pcXVlX2lkWzZdKTsKKwllbHNlIHsKKwkJY2FyZC0+aW5mby51bmlxdWVfaWQgPSAgVU5JUVVFX0lEX0lGX0NSRUFURV9BRERSX0ZBSUxFRCB8CisJCQkJCVVOSVFVRV9JRF9OT1RfQllfQ0FSRDsKKwkJUFJJTlRfV0FSTigiY291bGRuJ3QgZ2V0IGEgdW5pcXVlIGlkIGZyb20gdGhlIGNhcmQgb24gZGV2aWNlICIKKwkJCSAgICIlcyAocmVzdWx0PXgleCksIHVzaW5nIGRlZmF1bHQgaWQuIGlwdjYgIgorCQkJICAgImF1dG9jb25maWcgb24gb3RoZXIgbHBhcnMgbWF5IGxlYWQgdG8gZHVwbGljYXRlICIKKwkJCSAgICJpcCBhZGRyZXNzZXMuIHBsZWFzZSB1c2UgbWFudWFsbHkgIgorCQkJICAgImNvbmZpZ3VyZWQgb25lcy5cbiIsCisJCQkgICBDQVJEX0JVU19JRChjYXJkKSwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX2dldF91bmlxdWVfaWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZ3VuaXFlaWQiKTsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKSB7CisJCWNhcmQtPmluZm8udW5pcXVlX2lkID0gIFVOSVFVRV9JRF9JRl9DUkVBVEVfQUREUl9GQUlMRUQgfAorCQkJCQlVTklRVUVfSURfTk9UX0JZX0NBUkQ7CisJCXJldHVybiAwOworCX0KKworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9DUkVBVEVfQUREUiwKKwkJCQkgICAgIFFFVEhfUFJPVF9JUFY2KTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQorCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CisKKwlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9sM19nZXRfdW5pcXVlX2lkX2NiLCBOVUxMKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfZ2V0X21hY19mb3JfaXBtKF9fdTMyIGlwbSwgY2hhciAqbWFjLAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMl9UUikKKwkJaXBfdHJfbWNfbWFwKGlwbSwgbWFjKTsKKwllbHNlCisJCWlwX2V0aF9tY19tYXAoaXBtLCBtYWMpOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wzX2FkZF9tYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgaW5fZGV2aWNlICppbjRfZGV2KQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBtOworCXN0cnVjdCBpcF9tY19saXN0ICppbTQ7CisJY2hhciBidWZbTUFYX0FERFJfTEVOXTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJhZGRtYyIpOworCWZvciAoaW00ID0gaW40X2Rldi0+bWNfbGlzdDsgaW00OyBpbTQgPSBpbTQtPm5leHQpIHsKKwkJcWV0aF9sM19nZXRfbWFjX2Zvcl9pcG0oaW00LT5tdWx0aWFkZHIsIGJ1ZiwgaW40X2Rldi0+ZGV2KTsKKwkJaXBtID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjQpOworCQlpZiAoIWlwbSkKKwkJCWNvbnRpbnVlOworCQlpcG0tPnUuYTQuYWRkciA9IGltNC0+bXVsdGlhZGRyOworCQltZW1jcHkoaXBtLT5tYWMsIGJ1ZiwgT1NBX0FERFJfTEVOKTsKKwkJaXBtLT5pc19tdWx0aWNhc3QgPSAxOworCQlpZiAoIXFldGhfbDNfYWRkX2lwKGNhcmQsIGlwbSkpCisJCQlrZnJlZShpcG0pOworCX0KK30KKworc3RhdGljIHZvaWQgcWV0aF9sM19hZGRfdmxhbl9tYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmc7CisJaW50IGk7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAiYWRkbWN2bCIpOworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0ZVTExfVkxBTikgfHwgKGNhcmQtPnZsYW5ncnAgPT0gTlVMTCkpCisJCXJldHVybjsKKworCXZnID0gY2FyZC0+dmxhbmdycDsKKwlmb3IgKGkgPSAwOyBpIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IGkrKykgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKHZnLCBpKTsKKwkJaWYgKG5ldGRldiA9PSBOVUxMIHx8CisJCSAgICAhKG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisJCWluX2RldiA9IGluX2Rldl9nZXQobmV0ZGV2KTsKKwkJaWYgKCFpbl9kZXYpCisJCQljb250aW51ZTsKKwkJcmVhZF9sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7CisJCXFldGhfbDNfYWRkX21jKGNhcmQsIGluX2Rldik7CisJCXJlYWRfdW5sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7CisJCWluX2Rldl9wdXQoaW5fZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfYWRkX211bHRpY2FzdF9pcHY0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGluX2RldmljZSAqaW40X2RldjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJjaGttY3Y0Iik7CisJaW40X2RldiA9IGluX2Rldl9nZXQoY2FyZC0+ZGV2KTsKKwlpZiAoaW40X2RldiA9PSBOVUxMKQorCQlyZXR1cm47CisJcmVhZF9sb2NrKCZpbjRfZGV2LT5tY19saXN0X2xvY2spOworCXFldGhfbDNfYWRkX21jKGNhcmQsIGluNF9kZXYpOworCXFldGhfbDNfYWRkX3ZsYW5fbWMoY2FyZCk7CisJcmVhZF91bmxvY2soJmluNF9kZXYtPm1jX2xpc3RfbG9jayk7CisJaW5fZGV2X3B1dChpbjRfZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKK3N0YXRpYyB2b2lkIHFldGhfbDNfYWRkX21jNihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2KQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBtOworCXN0cnVjdCBpZm1jYWRkcjYgKmltNjsKKwljaGFyIGJ1ZltNQVhfQUREUl9MRU5dOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImFkZG1jNiIpOworCWZvciAoaW02ID0gaW42X2Rldi0+bWNfbGlzdDsgaW02ICE9IE5VTEw7IGltNiA9IGltNi0+bmV4dCkgeworCQluZGlzY19tY19tYXAoJmltNi0+bWNhX2FkZHIsIGJ1ZiwgaW42X2Rldi0+ZGV2LCAwKTsKKwkJaXBtID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjYpOworCQlpZiAoIWlwbSkKKwkJCWNvbnRpbnVlOworCQlpcG0tPmlzX211bHRpY2FzdCA9IDE7CisJCW1lbWNweShpcG0tPm1hYywgYnVmLCBPU0FfQUREUl9MRU4pOworCQltZW1jcHkoJmlwbS0+dS5hNi5hZGRyLCAmaW02LT5tY2FfYWRkci5zNl9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlpZiAoIXFldGhfbDNfYWRkX2lwKGNhcmQsIGlwbSkpCisJCQlrZnJlZShpcG0pOworCX0KK30KKworc3RhdGljIHZvaWQgcWV0aF9sM19hZGRfdmxhbl9tYzYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppbl9kZXY7CisJc3RydWN0IHZsYW5fZ3JvdXAgKnZnOworCWludCBpOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImFkbWM2dmwiKTsKKwlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9GVUxMX1ZMQU4pIHx8IChjYXJkLT52bGFuZ3JwID09IE5VTEwpKQorCQlyZXR1cm47CisKKwl2ZyA9IGNhcmQtPnZsYW5ncnA7CisJZm9yIChpID0gMDsgaSA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyBpKyspIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZywgaSk7CisJCWlmIChuZXRkZXYgPT0gTlVMTCB8fAorCQkgICAgIShuZXRkZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWNvbnRpbnVlOworCQlpbl9kZXYgPSBpbjZfZGV2X2dldChuZXRkZXYpOworCQlpZiAoIWluX2RldikKKwkJCWNvbnRpbnVlOworCQlyZWFkX2xvY2tfYmgoJmluX2Rldi0+bG9jayk7CisJCXFldGhfbDNfYWRkX21jNihjYXJkLCBpbl9kZXYpOworCQlyZWFkX3VubG9ja19iaCgmaW5fZGV2LT5sb2NrKTsKKwkJaW42X2Rldl9wdXQoaW5fZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfYWRkX211bHRpY2FzdF9pcHY2KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGluZXQ2X2RldiAqaW42X2RldjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJjaGttY3Y2Iik7CisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBWNikpCisJCXJldHVybiA7CisJaW42X2RldiA9IGluNl9kZXZfZ2V0KGNhcmQtPmRldik7CisJaWYgKGluNl9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCXJlYWRfbG9ja19iaCgmaW42X2Rldi0+bG9jayk7CisJcWV0aF9sM19hZGRfbWM2KGNhcmQsIGluNl9kZXYpOworCXFldGhfbDNfYWRkX3ZsYW5fbWM2KGNhcmQpOworCXJlYWRfdW5sb2NrX2JoKCZpbjZfZGV2LT5sb2NrKTsKKwlpbjZfZGV2X3B1dChpbjZfZGV2KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUUVUSF9JUFY2ICovCisKK3N0YXRpYyB2b2lkIHFldGhfbDNfZnJlZV92bGFuX2FkZHJlc3NlczQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCXVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CisJc3RydWN0IGluX2lmYWRkciAqaWZhOworCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJmcnZhZGRyNCIpOworCisJaW5fZGV2ID0gaW5fZGV2X2dldCh2bGFuX2dyb3VwX2dldF9kZXZpY2UoY2FyZC0+dmxhbmdycCwgdmlkKSk7CisJaWYgKCFpbl9kZXYpCisJCXJldHVybjsKKwlmb3IgKGlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkgeworCQlhZGRyID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjQpOworCQlpZiAoYWRkcikgeworCQkJYWRkci0+dS5hNC5hZGRyID0gaWZhLT5pZmFfYWRkcmVzczsKKwkJCWFkZHItPnUuYTQubWFzayA9IGlmYS0+aWZhX21hc2s7CisJCQlhZGRyLT50eXBlID0gUUVUSF9JUF9UWVBFX05PUk1BTDsKKwkJCWlmICghcWV0aF9sM19kZWxldGVfaXAoY2FyZCwgYWRkcikpCisJCQkJa2ZyZWUoYWRkcik7CisJCX0KKwl9CisJaW5fZGV2X3B1dChpbl9kZXYpOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wzX2ZyZWVfdmxhbl9hZGRyZXNzZXM2KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQl1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgorCXN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXY7CisJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhOworCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJmcnZhZGRyNiIpOworCisJaW42X2RldiA9IGluNl9kZXZfZ2V0KHZsYW5fZ3JvdXBfZ2V0X2RldmljZShjYXJkLT52bGFuZ3JwLCB2aWQpKTsKKwlpZiAoIWluNl9kZXYpCisJCXJldHVybjsKKwlmb3IgKGlmYSA9IGluNl9kZXYtPmFkZHJfbGlzdDsgaWZhOyBpZmEgPSBpZmEtPmxzdF9uZXh0KSB7CisJCWFkZHIgPSBxZXRoX2wzX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNik7CisJCWlmIChhZGRyKSB7CisJCQltZW1jcHkoJmFkZHItPnUuYTYuYWRkciwgJmlmYS0+YWRkciwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQlhZGRyLT51LmE2LnBmeGxlbiA9IGlmYS0+cHJlZml4X2xlbjsKKwkJCWFkZHItPnR5cGUgPSBRRVRIX0lQX1RZUEVfTk9STUFMOworCQkJaWYgKCFxZXRoX2wzX2RlbGV0ZV9pcChjYXJkLCBhZGRyKSkKKwkJCQlrZnJlZShhZGRyKTsKKwkJfQorCX0KKwlpbjZfZGV2X3B1dChpbjZfZGV2KTsKKyNlbmRpZiAvKiBDT05GSUdfUUVUSF9JUFY2ICovCit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfZnJlZV92bGFuX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQkJdW5zaWduZWQgc2hvcnQgdmlkKQoreworCWlmICghY2FyZC0+dmxhbmdycCkKKwkJcmV0dXJuOworCXFldGhfbDNfZnJlZV92bGFuX2FkZHJlc3NlczQoY2FyZCwgdmlkKTsKKwlxZXRoX2wzX2ZyZWVfdmxhbl9hZGRyZXNzZXM2KGNhcmQsIHZpZCk7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInZsYW5yZWciKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKKwljYXJkLT52bGFuZ3JwID0gZ3JwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldjsKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKKworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKQorCQlyZXR1cm47CisKKwl2bGFuZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGNhcmQtPnZsYW5ncnAsIHZpZCk7CisJdmxhbmRldi0+bmVpZ2hfc2V0dXAgPSBxZXRoX2wzX25laWdoX3NldHVwOworCisJaW5fZGV2ID0gaW5fZGV2X2dldCh2bGFuZGV2KTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJbmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIoaW5fZGV2LT5hcnBfcGFybXMpOworI2VuZGlmCisJbmVpZ2hfcGFybXNfcmVsZWFzZSgmYXJwX3RibCwgaW5fZGV2LT5hcnBfcGFybXMpOworCisJaW5fZGV2LT5hcnBfcGFybXMgPSBuZWlnaF9wYXJtc19hbGxvYyh2bGFuZGV2LCAmYXJwX3RibCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCW5laWdoX3N5c2N0bF9yZWdpc3Rlcih2bGFuZGV2LCBpbl9kZXYtPmFycF9wYXJtcywgTkVUX0lQVjQsCisJCQkgICAgICBORVRfSVBWNF9ORUlHSCwgImlwdjQiLCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorCWluX2Rldl9wdXQoaW5fZGV2KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAia2lkOiVkIiwgdmlkKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKKwkvKiB1bnJlZ2lzdGVyIElQIGFkZHJlc3NlcyBvZiB2bGFuIGRldmljZSAqLworCXFldGhfbDNfZnJlZV92bGFuX2FkZHJlc3NlcyhjYXJkLCB2aWQpOworCXZsYW5fZ3JvdXBfc2V0X2RldmljZShjYXJkLT52bGFuZ3JwLCB2aWQsIE5VTEwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7CisJcWV0aF9sM19zZXRfbXVsdGljYXN0X2xpc3QoY2FyZC0+ZGV2KTsKK30KKworc3RhdGljIGlubGluZSBfX3UxNiBxZXRoX2wzX3JlYnVpbGRfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkcikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2bGFuX2lkID0gMDsKKwlfX2JlMTYgcHJvdDsKKwlzdHJ1Y3QgaXBoZHIgKmlwX2hkcjsKKwl1bnNpZ25lZCBjaGFyIHRnX2FkZHJbTUFYX0FERFJfTEVOXTsKKworCWlmICghKGhkci0+aGRyLmwzLmZsYWdzICYgUUVUSF9IRFJfUEFTU1RIUlUpKSB7CisJCXByb3QgPSBodG9ucygoaGRyLT5oZHIubDMuZmxhZ3MgJiBRRVRIX0hEUl9JUFY2KT8gRVRIX1BfSVBWNiA6CisJCQkgICAgICBFVEhfUF9JUCk7CisJCXN3aXRjaCAoaGRyLT5oZHIubDMuZmxhZ3MgJiBRRVRIX0hEUl9DQVNUX01BU0spIHsKKwkJY2FzZSBRRVRIX0NBU1RfTVVMVElDQVNUOgorCQkJc3dpdGNoIChwcm90KSB7CisjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgorCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCQkJCW5kaXNjX21jX21hcCgoc3RydWN0IGluNl9hZGRyICopCisJCQkJICAgICBza2ItPmRhdGEgKyAyNCwKKwkJCQkgICAgIHRnX2FkZHIsIGNhcmQtPmRldiwgMCk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCQkJaXBfaGRyID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJCQkoY2FyZC0+ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKSA/CisJCQkJaXBfdHJfbWNfbWFwKGlwX2hkci0+ZGFkZHIsIHRnX2FkZHIpOgorCQkJCWlwX2V0aF9tY19tYXAoaXBfaGRyLT5kYWRkciwgdGdfYWRkcik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1lbWNweSh0Z19hZGRyLCBjYXJkLT5kZXYtPmJyb2FkY2FzdCwKKwkJCQkJY2FyZC0+ZGV2LT5hZGRyX2xlbik7CisJCQl9CisJCQljYXJkLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfTVVMVElDQVNUOworCQkJYnJlYWs7CisJCWNhc2UgUUVUSF9DQVNUX0JST0FEQ0FTVDoKKwkJCW1lbWNweSh0Z19hZGRyLCBjYXJkLT5kZXYtPmJyb2FkY2FzdCwKKwkJCQljYXJkLT5kZXYtPmFkZHJfbGVuKTsKKwkJCWNhcmQtPnN0YXRzLm11bHRpY2FzdCsrOworCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9CUk9BRENBU1Q7CisJCQlicmVhazsKKwkJY2FzZSBRRVRIX0NBU1RfVU5JQ0FTVDoKKwkJY2FzZSBRRVRIX0NBU1RfQU5ZQ0FTVDoKKwkJY2FzZSBRRVRIX0NBU1RfTk9DQVNUOgorCQlkZWZhdWx0OgorCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCQkJbWVtY3B5KHRnX2FkZHIsIGNhcmQtPmRldi0+ZGV2X2FkZHIsCisJCQkJY2FyZC0+ZGV2LT5hZGRyX2xlbik7CisJCX0KKwkJY2FyZC0+ZGV2LT5oZWFkZXJfb3BzLT5jcmVhdGUoc2tiLCBjYXJkLT5kZXYsIHByb3QsIHRnX2FkZHIsCisJCQkJCSAgICAgICJGQUtFTEwiLCBjYXJkLT5kZXYtPmFkZHJfbGVuKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfVFIKKwlpZiAoY2FyZC0+ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKQorCQlza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsIGNhcmQtPmRldik7CisJZWxzZQorI2VuZGlmCisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNhcmQtPmRldik7CisKKwlpZiAoaGRyLT5oZHIubDMuZXh0X2ZsYWdzICYKKwkgICAgKFFFVEhfSERSX0VYVF9WTEFOX0ZSQU1FIHwgUUVUSF9IRFJfRVhUX0lOQ0xVREVfVkxBTl9UQUcpKSB7CisJCXZsYW5faWQgPSAoaGRyLT5oZHIubDMuZXh0X2ZsYWdzICYgUUVUSF9IRFJfRVhUX1ZMQU5fRlJBTUUpPworCQkgaGRyLT5oZHIubDMudmxhbl9pZCA6ICooKHUxNiAqKSZoZHItPmhkci5sMy5kZXN0X2FkZHJbMTJdKTsKKwl9CisKKwlza2ItPmlwX3N1bW1lZCA9IGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZTsKKwlpZiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IEhXX0NIRUNLU1VNTUlORykgeworCQlpZiAoKGhkci0+aGRyLmwzLmV4dF9mbGFncyAmCisJCSAgICAgIChRRVRIX0hEUl9FWFRfQ1NVTV9IRFJfUkVRIHwKKwkJICAgICAgIFFFVEhfSERSX0VYVF9DU1VNX1RSQU5TUF9SRVEpKSA9PQorCQkgICAgIChRRVRIX0hEUl9FWFRfQ1NVTV9IRFJfUkVRIHwKKwkJICAgICAgUUVUSF9IRFJfRVhUX0NTVU1fVFJBTlNQX1JFUSkpCisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQllbHNlCisJCQlza2ItPmlwX3N1bW1lZCA9IFNXX0NIRUNLU1VNTUlORzsKKwl9CisKKwlyZXR1cm4gdmxhbl9pZDsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sM19wcm9jZXNzX2luYm91bmRfYnVmZmVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQkgICAgc3RydWN0IHFldGhfcWRpb19idWZmZXIgKmJ1ZiwgaW50IGluZGV4KQoreworCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICplbGVtZW50OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHFldGhfaGRyICpoZHI7CisJaW50IG9mZnNldDsKKwlfX3UxNiB2bGFuX3RhZyA9IDA7CisJdW5zaWduZWQgaW50IGxlbjsKKworCS8qIGdldCBmaXJzdCBlbGVtZW50IG9mIGN1cnJlbnQgYnVmZmVyICovCisJZWxlbWVudCA9IChzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqKSZidWYtPmJ1ZmZlci0+ZWxlbWVudFswXTsKKwlvZmZzZXQgPSAwOworCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQljYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfcmVjKys7CisJd2hpbGUgKChza2IgPSBxZXRoX2NvcmVfZ2V0X25leHRfc2tiKGNhcmQsIGJ1Zi0+YnVmZmVyLCAmZWxlbWVudCwKKwkJCQkgICAgICAgJm9mZnNldCwgJmhkcikpKSB7CisJCXNrYi0+ZGV2ID0gY2FyZC0+ZGV2OworCQkvKiBpcyBkZXZpY2UgVVAgPyAqLworCQlpZiAoIShjYXJkLT5kZXYtPmZsYWdzICYgSUZGX1VQKSkgeworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChoZHItPmhkci5sMy5pZCkgeworCQljYXNlIFFFVEhfSEVBREVSX1RZUEVfTEFZRVIzOgorCQkJdmxhbl90YWcgPSBxZXRoX2wzX3JlYnVpbGRfc2tiKGNhcmQsIHNrYiwgaGRyKTsKKwkJCWxlbiA9IHNrYi0+bGVuOworCQkJaWYgKHZsYW5fdGFnKQorCQkJCWlmIChjYXJkLT52bGFuZ3JwKQorCQkJCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBjYXJkLT52bGFuZ3JwLAorCQkJCQkJdmxhbl90YWcpOworCQkJCWVsc2UgeworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQllbHNlCisJCQkJbmV0aWZfcngoc2tiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJpbmJ1bmtubyIpOworCQkJUUVUSF9EQkZfSEVYKENUUkwsIDMsIGhkciwgUUVUSF9EQkZfQ1RSTF9MRU4pOworCQkJY29udGludWU7CisJCX0KKworCQljYXJkLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQljYXJkLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWNhcmQtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM192ZXJpZnlfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmc7CisJaW50IGk7CisKKwl2ZyA9IGNhcmQtPnZsYW5ncnA7CisJaWYgKCF2ZykKKwkJcmV0dXJuIHJjOworCisJZm9yIChpID0gMDsgaSA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyBpKyspIHsKKwkJaWYgKHZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZywgaSkgPT0gZGV2KSB7CisJCQlyYyA9IFFFVEhfVkxBTl9DQVJEOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmMgJiYgIShuZXRkZXZfcHJpdih2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2KSA9PSAodm9pZCAqKWNhcmQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3ZlcmlmeV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZxZXRoX2NvcmVfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FyZCwgJnFldGhfY29yZV9jYXJkX2xpc3QubGlzdCwgbGlzdCkgeworCQlpZiAoY2FyZC0+ZGV2ID09IGRldikgeworCQkJcmMgPSBRRVRIX1JFQUxfQ0FSRDsKKwkJCWJyZWFrOworCQl9CisJCXJjID0gcWV0aF9sM192ZXJpZnlfdmxhbl9kZXYoZGV2LCBjYXJkKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisJfQorCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnFldGhfY29yZV9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcWV0aF9jYXJkICpxZXRoX2wzX2dldF9jYXJkX2Zyb21fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IE5VTEw7CisJaW50IHJjOworCisJcmMgPSBxZXRoX2wzX3ZlcmlmeV9kZXYoZGV2KTsKKwlpZiAocmMgPT0gUUVUSF9SRUFMX0NBUkQpCisJCWNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCWVsc2UgaWYgKHJjID09IFFFVEhfVkxBTl9DQVJEKQorCQljYXJkID0gbmV0ZGV2X3ByaXYodmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2Rldik7CisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKQorCQljYXJkID0gTlVMTDsKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgIiVkIiwgcmMpOworCXJldHVybiBjYXJkIDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3N0b3BfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgcmVjb3ZlcnlfbW9kZSkKK3sKKwlpbnQgcmMgPSAwOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInN0b3BjYXJkIik7CisJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOworCisJcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDAsIDEpOworCWlmIChxZXRoX3dhaXRfZm9yX3RocmVhZHMoY2FyZCwgflFFVEhfUkVDT1ZFUl9USFJFQUQpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChjYXJkLT5yZWFkLnN0YXRlID09IENIX1NUQVRFX1VQICYmCisJICAgIGNhcmQtPndyaXRlLnN0YXRlID09IENIX1NUQVRFX1VQICYmCisJICAgIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKSkgeworCQlpZiAocmVjb3ZlcnlfbW9kZSkKKwkJCXFldGhfbDNfc3RvcChjYXJkLT5kZXYpOworCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3ApIHsKKwkJCXJjID0gcWV0aF9zZW5kX3N0b3BsYW4oY2FyZCk7CisJCQlpZiAocmMpCisJCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIxZXJyJWQiLCByYyk7CisJCX0KKwkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1NPRlRTRVRVUDsKKwl9CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfU09GVFNFVFVQKSB7CisJCXFldGhfbDNfY2xlYXJfaXBfbGlzdChjYXJkLCAhY2FyZC0+dXNlX2hhcmRfc3RvcCwgMSk7CisJCXFldGhfY2xlYXJfaXBhY21kX2xpc3QoY2FyZCk7CisJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9IQVJEU0VUVVA7CisJfQorCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX0hBUkRTRVRVUCkgeworCQlpZiAoIWNhcmQtPnVzZV9oYXJkX3N0b3AgJiYKKwkJICAgIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKSkgeworCQkJcmMgPSBxZXRoX2wzX3B1dF91bmlxdWVfaWQoY2FyZCk7CisJCQlpZiAocmMpCisJCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCX0KKwkJcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgMCk7CisJCXFldGhfY2xlYXJfcWRpb19idWZmZXJzKGNhcmQpOworCQlxZXRoX2NsZWFyX3dvcmtpbmdfcG9vbF9saXN0KGNhcmQpOworCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfRE9XTjsKKwl9CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfRE9XTikgeworCQlxZXRoX2NsZWFyX2NtZF9idWZmZXJzKCZjYXJkLT5yZWFkKTsKKwkJcWV0aF9jbGVhcl9jbWRfYnVmZmVycygmY2FyZC0+d3JpdGUpOworCX0KKwljYXJkLT51c2VfaGFyZF9zdG9wID0gMDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAic2V0bXVsdGkiKTsKKwlxZXRoX2wzX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CisJcWV0aF9sM19hZGRfbXVsdGljYXN0X2lwdjQoY2FyZCk7CisjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgorCXFldGhfbDNfYWRkX211bHRpY2FzdF9pcHY2KGNhcmQpOworI2VuZGlmCisJcWV0aF9sM19zZXRfaXBfYWRkcl9saXN0KGNhcmQpOworCWlmICghcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSkpCisJCXJldHVybjsKKwlxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoY2FyZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpxZXRoX2wzX2FycF9nZXRfZXJyb3JfY2F1c2UoaW50ICpyYykKK3sKKwlzd2l0Y2ggKCpyYykgeworCWNhc2UgUUVUSF9JUEFfQVJQX1JDX0ZBSUxFRDoKKwkJKnJjID0gLUVJTzsKKwkJcmV0dXJuICJvcGVyYXRpb24gZmFpbGVkIjsKKwljYXNlIFFFVEhfSVBBX0FSUF9SQ19OT1RTVVBQOgorCQkqcmMgPSAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCI7CisJY2FzZSBRRVRIX0lQQV9BUlBfUkNfT1VUX09GX1JBTkdFOgorCQkqcmMgPSAtRUlOVkFMOworCQlyZXR1cm4gImFyZ3VtZW50IG91dCBvZiByYW5nZSI7CisJY2FzZSBRRVRIX0lQQV9BUlBfUkNfUV9OT1RTVVBQOgorCQkqcmMgPSAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuICJxdWVyeSBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCI7CisJY2FzZSBRRVRIX0lQQV9BUlBfUkNfUV9OT19EQVRBOgorCQkqcmMgPSAtRU5PRU5UOworCQlyZXR1cm4gIm5vIHF1ZXJ5IGRhdGEgYXZhaWxhYmxlIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24gZXJyb3IiOworCX0KK30KKworc3RhdGljIGludCBxZXRoX2wzX2FycF9zZXRfbm9fZW50cmllcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgbm9fZW50cmllcykKK3sKKwlpbnQgdG1wOworCWludCByYzsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJhcnBzdG5vZSIpOworCisJLyoKKwkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gb25seSBzdXBwb3J0cyB0aGUgQVJQIGFzc2lzdCBmdW5jdGlvbgorCSAqIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLCBidXQgbm90IElQQV9DTURfQVNTX0FSUF9TRVRfTk9fRU5UUklFUzsKKwkgKiB0aHVzIHdlIHNheSBFT1BOT1RTVVBQIGZvciB0aGlzIEFSUCBmdW5jdGlvbgorCSAqLworCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcpKSB7CisJCVBSSU5UX1dBUk4oIkFSUCBwcm9jZXNzaW5nIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAgIm9uICVzIVxuIiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmMgPSBxZXRoX2wzX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKGNhcmQsIElQQV9BUlBfUFJPQ0VTU0lORywKKwkJCQkJICBJUEFfQ01EX0FTU19BUlBfU0VUX05PX0VOVFJJRVMsCisJCQkJCSAgbm9fZW50cmllcyk7CisJaWYgKHJjKSB7CisJCXRtcCA9IHJjOworCQlQUklOVF9XQVJOKCJDb3VsZCBub3Qgc2V0IG51bWJlciBvZiBBUlAgZW50cmllcyBvbiAlczogIgorCQkJIiVzICgweCV4LyVkKVxuIiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwKKwkJCXFldGhfbDNfYXJwX2dldF9lcnJvcl9jYXVzZSgmcmMpLCB0bXAsIHRtcCk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sM19jb3B5X2FycF9lbnRyaWVzX3N0cmlwcGVkKHN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvICpxaW5mbywKKwkJc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2RhdGEgKnFkYXRhLCBpbnQgZW50cnlfc2l6ZSwKKwkJaW50IHVlbnRyeV9zaXplKQoreworCWNoYXIgKmVudHJ5X3B0cjsKKwljaGFyICp1ZW50cnlfcHRyOworCWludCBpOworCisJZW50cnlfcHRyID0gKGNoYXIgKikmcWRhdGEtPmRhdGE7CisJdWVudHJ5X3B0ciA9IChjaGFyICopKHFpbmZvLT51ZGF0YSArIHFpbmZvLT51ZGF0YV9vZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPCBxZGF0YS0+bm9fZW50cmllczsgKytpKSB7CisJCS8qIHN0cmlwIG9mZiAzMiBieXRlcyAibWVkaWEgc3BlY2lmaWMgaW5mb3JtYXRpb24iICovCisJCW1lbWNweSh1ZW50cnlfcHRyLCAoZW50cnlfcHRyICsgMzIpLCBlbnRyeV9zaXplIC0gMzIpOworCQllbnRyeV9wdHIgKz0gZW50cnlfc2l6ZTsKKwkJdWVudHJ5X3B0ciArPSB1ZW50cnlfc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19hcnBfcXVlcnlfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9kYXRhICpxZGF0YTsKKwlzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfaW5mbyAqcWluZm87CisJaW50IGVudHJ5X3NpemU7CisJaW50IHVlbnRyeV9zaXplOworCWludCBpOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImFycHF1ZWNiIik7CisKKwlxaW5mbyA9IChzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfaW5mbyAqKSByZXBseS0+cGFyYW07CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJxYWVyMSVpIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIucmV0dXJuX2NvZGUpIHsKKwkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlOworCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgInFhZXIyJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCXJldHVybiAwOworCX0KKwlxZGF0YSA9ICZjbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5xdWVyeV9hcnA7CisJc3dpdGNoIChxZGF0YS0+cmVwbHlfYml0cykgeworCWNhc2UgNToKKwkJdWVudHJ5X3NpemUgPSBlbnRyeV9zaXplID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTUpOworCQlpZiAocWluZm8tPm1hc2tfYml0cyAmIFFFVEhfUUFSUF9TVFJJUF9FTlRSSUVTKQorCQkJdWVudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5NV9zaG9ydCk7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJLyogZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgKi8KKwlkZWZhdWx0OgorCQkvKiB0ciBpcyB0aGUgc2FtZSBhcyBldGggLT4gZW50cnk3ICovCisJCXVlbnRyeV9zaXplID0gZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk3KTsKKwkJaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykKKwkJCXVlbnRyeV9zaXplID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTdfc2hvcnQpOworCQlicmVhazsKKwl9CisJLyogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gdXNlcnNwYWNlICovCisJaWYgKChxaW5mby0+dWRhdGFfbGVuIC0gcWluZm8tPnVkYXRhX29mZnNldCkgPAorCQkJcWRhdGEtPm5vX2VudHJpZXMgKiB1ZW50cnlfc2l6ZSl7CisJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAicWFlcjMlaSIsIC1FTk9NRU0pOworCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IC1FTk9NRU07CisJCVBSSU5UX1dBUk4oInF1ZXJ5IEFSUCB1c2VyIHNwYWNlIGJ1ZmZlciBpcyB0b28gc21hbGwgZm9yICIKKwkJCSAgICJ0aGUgcmV0dXJuZWQgbnVtYmVyIG9mIEFSUCBlbnRyaWVzLiAiCisJCQkgICAiQWJvcnRpbmcgcXVlcnkhXG4iKTsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCVFFVEhfREJGX1RFWFRfKFRSQUNFLCA0LCAiYW5vcmUlaSIsCisJCSAgICAgICBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLm51bWJlcl9vZl9yZXBsaWVzKTsKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImFzZXFuJWkiLCBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnNlcV9ubyk7CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDQsICJhbm9lbiVpIiwgcWRhdGEtPm5vX2VudHJpZXMpOworCisJaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykgeworCQkvKiBzdHJpcCBvZmYgIm1lZGlhIHNwZWNpZmljIGluZm9ybWF0aW9uIiAqLworCQlxZXRoX2wzX2NvcHlfYXJwX2VudHJpZXNfc3RyaXBwZWQocWluZm8sIHFkYXRhLCBlbnRyeV9zaXplLAorCQkJCQkgICAgICAgdWVudHJ5X3NpemUpOworCX0gZWxzZQorCQkvKmNvcHkgZW50cmllcyB0byB1c2VyIGJ1ZmZlciovCisJCW1lbWNweShxaW5mby0+dWRhdGEgKyBxaW5mby0+dWRhdGFfb2Zmc2V0LAorCQkgICAgICAgKGNoYXIgKikmcWRhdGEtPmRhdGEsIHFkYXRhLT5ub19lbnRyaWVzKnVlbnRyeV9zaXplKTsKKworCXFpbmZvLT5ub19lbnRyaWVzICs9IHFkYXRhLT5ub19lbnRyaWVzOworCXFpbmZvLT51ZGF0YV9vZmZzZXQgKz0gKHFkYXRhLT5ub19lbnRyaWVzKnVlbnRyeV9zaXplKTsKKwkvKiBjaGVjayBpZiBhbGwgcmVwbGllcyByZWNlaXZlZCAuLi4gKi8KKwlpZiAoY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5zZXFfbm8gPAorCSAgICBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLm51bWJlcl9vZl9yZXBsaWVzKQorCQlyZXR1cm4gMTsKKwltZW1jcHkocWluZm8tPnVkYXRhLCAmcWluZm8tPm5vX2VudHJpZXMsIDQpOworCS8qIGtlZXAgU1RSSVBfRU5UUklFUyBmbGFnIHNvIHRoZSB1c2VyIHByb2dyYW0gY2FuIGRpc3Rpbmd1aXNoCisJICogc3RyaXBwZWQgZW50cmllcyBmcm9tIG5vcm1hbCBvbmVzICovCisJaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykKKwkJcWRhdGEtPnJlcGx5X2JpdHMgfD0gUUVUSF9RQVJQX1NUUklQX0VOVFJJRVM7CisJbWVtY3B5KHFpbmZvLT51ZGF0YSArIFFFVEhfUUFSUF9NQVNLX09GRlNFVCwgJnFkYXRhLT5yZXBseV9iaXRzLCAyKTsKKwlyZXR1cm4gMDsKK291dF9lcnJvcjoKKwlpID0gMDsKKwltZW1jcHkocWluZm8tPnVkYXRhLCAmaSwgNCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19zZW5kX2lwYV9hcnBfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwgaW50IGxlbiwKKwkJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcmVwbHkgKiwKKwkJCXVuc2lnbmVkIGxvbmcpLAorCQl2b2lkICpyZXBseV9wYXJhbSkKK3sKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCA0LCAic2VuZGFycCIpOworCisJbWVtY3B5KGlvYi0+ZGF0YSwgSVBBX1BEVV9IRUFERVIsIElQQV9QRFVfSEVBREVSX1NJWkUpOworCW1lbWNweShRRVRIX0lQQV9DTURfREVTVF9BRERSKGlvYi0+ZGF0YSksCisJICAgICAgICZjYXJkLT50b2tlbi51bHBfY29ubmVjdGlvbl9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOworCXJldHVybiBxZXRoX3NlbmRfY29udHJvbF9kYXRhKGNhcmQsIElQQV9QRFVfSEVBREVSX1NJWkUgKyBsZW4sIGlvYiwKKwkJCQkgICAgICByZXBseV9jYiwgcmVwbHlfcGFyYW0pOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfYXJwX3F1ZXJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGNoYXIgX191c2VyICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2luZm8gcWluZm8gPSB7MCwgfTsKKwlpbnQgdG1wOworCWludCByYzsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJhcnBxdWVyeSIpOworCisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLC8qSVBBX1FVRVJZX0FSUF9BRERSX0lORk8qLworCQkJICAgICAgIElQQV9BUlBfUFJPQ0VTU0lORykpIHsKKwkJUFJJTlRfV0FSTigiQVJQIHByb2Nlc3Npbmcgbm90IHN1cHBvcnRlZCAiCisJCQkgICAib24gJXMhXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwkvKiBnZXQgc2l6ZSBvZiB1c2Vyc3BhY2UgYnVmZmVyIGFuZCBtYXNrX2JpdHMgLT4gNiBieXRlcyAqLworCWlmIChjb3B5X2Zyb21fdXNlcigmcWluZm8sIHVkYXRhLCA2KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcWluZm8udWRhdGEgPSBremFsbG9jKHFpbmZvLnVkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxaW5mby51ZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcWluZm8udWRhdGFfb2Zmc2V0ID0gUUVUSF9RQVJQX0VOVFJJRVNfT0ZGU0VUOworCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcsCisJCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLAorCQkJCSAgICAgICBzaXplb2YoaW50KSwgUUVUSF9QUk9UX0lQVjQpOworCisJcmMgPSBxZXRoX2wzX3NlbmRfaXBhX2FycF9jbWQoY2FyZCwgaW9iLAorCQkJCSAgIFFFVEhfU0VUQVNTX0JBU0VfTEVOK1FFVEhfQVJQX0NNRF9MRU4sCisJCQkJICAgcWV0aF9sM19hcnBfcXVlcnlfY2IsICh2b2lkICopJnFpbmZvKTsKKwlpZiAocmMpIHsKKwkJdG1wID0gcmM7CisJCVBSSU5UX1dBUk4oIkVycm9yIHdoaWxlIHF1ZXJ5aW5nIEFSUCBjYWNoZSBvbiAlczogJXMgIgorCQkJIigweCV4LyVkKVxuIiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwKKwkJCXFldGhfbDNfYXJwX2dldF9lcnJvcl9jYXVzZSgmcmMpLCB0bXAsIHRtcCk7CisJCWlmIChjb3B5X3RvX3VzZXIodWRhdGEsIHFpbmZvLnVkYXRhLCA0KSkKKwkJCXJjID0gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlpZiAoY29weV90b191c2VyKHVkYXRhLCBxaW5mby51ZGF0YSwgcWluZm8udWRhdGFfbGVuKSkKKwkJCXJjID0gLUVGQVVMVDsKKwl9CisJa2ZyZWUocWluZm8udWRhdGEpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX2FycF9hZGRfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCQlzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwljaGFyIGJ1ZlsxNl07CisJaW50IHRtcDsKKwlpbnQgcmM7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiYXJwYWRlbnQiKTsKKworCS8qCisJICogY3VycmVudGx5IEd1ZXN0TEFOIG9ubHkgc3VwcG9ydHMgdGhlIEFSUCBhc3Npc3QgZnVuY3Rpb24KKwkgKiBJUEFfQ01EX0FTU19BUlBfUVVFUllfSU5GTywgYnV0IG5vdCBJUEFfQ01EX0FTU19BUlBfQUREX0VOVFJZOworCSAqIHRodXMgd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIHRoaXMgQVJQIGZ1bmN0aW9uCisJICovCisJaWYgKGNhcmQtPmluZm8uZ3Vlc3RsYW4pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9BUlBfUFJPQ0VTU0lORykpIHsKKwkJUFJJTlRfV0FSTigiQVJQIHByb2Nlc3Npbmcgbm90IHN1cHBvcnRlZCAiCisJCQkgICAib24gJXMhXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcsCisJCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9BRERfRU5UUlksCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpLAorCQkJCSAgICAgICBRRVRIX1BST1RfSVBWNCk7CisJcmMgPSBxZXRoX2wzX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpLAorCQkJCSAgICh1bnNpZ25lZCBsb25nKSBlbnRyeSwKKwkJCQkgICBxZXRoX2wzX2RlZmF1bHRfc2V0YXNzcGFybXNfY2IsIE5VTEwpOworCWlmIChyYykgeworCQl0bXAgPSByYzsKKwkJcWV0aF9sM19pcGFkZHI0X3RvX3N0cmluZygodTggKillbnRyeS0+aXBhZGRyLCBidWYpOworCQlQUklOVF9XQVJOKCJDb3VsZCBub3QgYWRkIEFSUCBlbnRyeSBmb3IgYWRkcmVzcyAlcyBvbiAlczogIgorCQkJICAgIiVzICgweCV4LyVkKVxuIiwKKwkJCSAgIGJ1ZiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwKKwkJCSAgIHFldGhfbDNfYXJwX2dldF9lcnJvcl9jYXVzZSgmcmMpLCB0bXAsIHRtcCk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX2FycF9yZW1vdmVfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCQlzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwljaGFyIGJ1ZlsxNl0gPSB7MCwgfTsKKwlpbnQgdG1wOworCWludCByYzsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJhcnBybWVudCIpOworCisJLyoKKwkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gb25seSBzdXBwb3J0cyB0aGUgQVJQIGFzc2lzdCBmdW5jdGlvbgorCSAqIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLCBidXQgbm90IElQQV9DTURfQVNTX0FSUF9SRU1PVkVfRU5UUlk7CisJICogdGh1cyB3ZSBzYXkgRU9QTk9UU1VQUCBmb3IgdGhpcyBBUlAgZnVuY3Rpb24KKwkgKi8KKwlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0FSUF9QUk9DRVNTSU5HKSkgeworCQlQUklOVF9XQVJOKCJBUlAgcHJvY2Vzc2luZyBub3Qgc3VwcG9ydGVkICIKKwkJCSAgICJvbiAlcyFcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCW1lbWNweShidWYsIGVudHJ5LCAxMik7CisJaW9iID0gcWV0aF9sM19nZXRfc2V0YXNzcGFybXNfY21kKGNhcmQsIElQQV9BUlBfUFJPQ0VTU0lORywKKwkJCQkgICAgICAgSVBBX0NNRF9BU1NfQVJQX1JFTU9WRV9FTlRSWSwKKwkJCQkgICAgICAgMTIsCisJCQkJICAgICAgIFFFVEhfUFJPVF9JUFY0KTsKKwlyYyA9IHFldGhfbDNfc2VuZF9zZXRhc3NwYXJtcyhjYXJkLCBpb2IsCisJCQkJICAgMTIsICh1bnNpZ25lZCBsb25nKWJ1ZiwKKwkJCQkgICBxZXRoX2wzX2RlZmF1bHRfc2V0YXNzcGFybXNfY2IsIE5VTEwpOworCWlmIChyYykgeworCQl0bXAgPSByYzsKKwkJbWVtc2V0KGJ1ZiwgMCwgMTYpOworCQlxZXRoX2wzX2lwYWRkcjRfdG9fc3RyaW5nKCh1OCAqKWVudHJ5LT5pcGFkZHIsIGJ1Zik7CisJCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBkZWxldGUgQVJQIGVudHJ5IGZvciBhZGRyZXNzICVzIG9uICVzOiAiCisJCQkgICAiJXMgKDB4JXgvJWQpXG4iLAorCQkJICAgYnVmLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLAorCQkJICAgcWV0aF9sM19hcnBfZ2V0X2Vycm9yX2NhdXNlKCZyYyksIHRtcCwgdG1wKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfYXJwX2ZsdXNoX2NhY2hlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCWludCB0bXA7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiYXJwZmx1c2giKTsKKworCS8qCisJICogY3VycmVudGx5IEd1ZXN0TEFOIG9ubHkgc3VwcG9ydHMgdGhlIEFSUCBhc3Npc3QgZnVuY3Rpb24KKwkgKiBJUEFfQ01EX0FTU19BUlBfUVVFUllfSU5GTywgYnV0IG5vdCBJUEFfQ01EX0FTU19BUlBfRkxVU0hfQ0FDSEU7CisJICogdGh1cyB3ZSBzYXkgRU9QTk9UU1VQUCBmb3IgdGhpcyBBUlAgZnVuY3Rpb24KKwkqLworCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuIHx8IChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0FSUF9QUk9DRVNTSU5HKSkgeworCQlQUklOVF9XQVJOKCJBUlAgcHJvY2Vzc2luZyBub3Qgc3VwcG9ydGVkICIKKwkJCSAgICJvbiAlcyFcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcsCisJCQkJCSAgSVBBX0NNRF9BU1NfQVJQX0ZMVVNIX0NBQ0hFLCAwKTsKKwlpZiAocmMpIHsKKwkJdG1wID0gcmM7CisJCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBmbHVzaCBBUlAgY2FjaGUgb24gJXM6ICVzICgweCV4LyVkKVxuIiwKKwkJCVFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCisJCQlxZXRoX2wzX2FycF9nZXRfZXJyb3JfY2F1c2UoJnJjKSwgdG1wLCB0bXApOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBxZXRoX2FycF9jYWNoZV9lbnRyeSBhcnBfZW50cnk7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlfZGF0YTsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkgJiYKKwkJKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ19RRVRIX0FSUF9TRVRfTk9fRU5UUklFUzoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQlyYyA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CisJCXJjID0gcWV0aF9sM19hcnBfc2V0X25vX2VudHJpZXMoY2FyZCwgcnEtPmlmcl9pZnJ1LmlmcnVfaXZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DX1FFVEhfQVJQX1FVRVJZX0lORk86CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJcmMgPSAtRVBFUk07CisJCQlicmVhazsKKwkJfQorCQlyYyA9IHFldGhfbDNfYXJwX3F1ZXJ5KGNhcmQsIHJxLT5pZnJfaWZydS5pZnJ1X2RhdGEpOworCQlicmVhazsKKwljYXNlIFNJT0NfUUVUSF9BUlBfQUREX0VOVFJZOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCXJjID0gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhcnBfZW50cnksIHJxLT5pZnJfaWZydS5pZnJ1X2RhdGEsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9jYWNoZV9lbnRyeSkpKQorCQkJcmMgPSAtRUZBVUxUOworCQllbHNlCisJCQlyYyA9IHFldGhfbDNfYXJwX2FkZF9lbnRyeShjYXJkLCAmYXJwX2VudHJ5KTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DX1FFVEhfQVJQX1JFTU9WRV9FTlRSWToKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQlyYyA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXJwX2VudHJ5LCBycS0+aWZyX2lmcnUuaWZydV9kYXRhLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpKSkKKwkJCXJjID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmMgPSBxZXRoX2wzX2FycF9yZW1vdmVfZW50cnkoY2FyZCwgJmFycF9lbnRyeSk7CisJCWJyZWFrOworCWNhc2UgU0lPQ19RRVRIX0FSUF9GTFVTSF9DQUNIRToKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQlyYyA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CisJCXJjID0gcWV0aF9sM19hcnBfZmx1c2hfY2FjaGUoY2FyZCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ19RRVRIX0FEUF9TRVRfU05NUF9DT05UUk9MOgorCQlyYyA9IHFldGhfc25tcF9jb21tYW5kKGNhcmQsIHJxLT5pZnJfaWZydS5pZnJ1X2RhdGEpOworCQlicmVhazsKKwljYXNlIFNJT0NfUUVUSF9HRVRfQ0FSRF9UWVBFOgorCQlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU0FFKSAmJgorCQkgICAgIWNhcmQtPmluZm8uZ3Vlc3RsYW4pCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dNSUlQSFk6CisJCW1paV9kYXRhID0gaWZfbWlpKHJxKTsKKwkJbWlpX2RhdGEtPnBoeV9pZCA9IDA7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dNSUlSRUc6CisJCW1paV9kYXRhID0gaWZfbWlpKHJxKTsKKwkJaWYgKG1paV9kYXRhLT5waHlfaWQgIT0gMCkKKwkJCXJjID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJbWlpX2RhdGEtPnZhbF9vdXQgPSBxZXRoX21kaW9fcmVhZChkZXYsCisJCQkJCQkJbWlpX2RhdGEtPnBoeV9pZCwKKwkJCQkJCQltaWlfZGF0YS0+cmVnX251bSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVPUE5PVFNVUFA7CisJfQorCWlmIChyYykKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJpb2NlJWQiLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2wzX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2hkciAqaGRyLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXB2LCBpbnQgY2FzdF90eXBlKQoreworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsaGRyIik7CisKKwltZW1zZXQoaGRyLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7CisJaGRyLT5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMzsKKwloZHItPmhkci5sMy5leHRfZmxhZ3MgPSAwOworCisJLyoKKwkgKiBiZWZvcmUgd2UncmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoaXMgbG9jYXRpb24gd2l0aCBuZXh0IGhvcCBpcC4KKwkgKiB2NiB1c2VzIHBhc3N0aHJvdWdoLCB2NCBzZXRzIHRoZSB0YWcgaW4gdGhlIFFESU8gaGVhZGVyLgorCSAqLworCWlmIChjYXJkLT52bGFuZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQloZHItPmhkci5sMy5leHRfZmxhZ3MgPSAoaXB2ID09IDQpID8KKwkJCVFFVEhfSERSX0VYVF9WTEFOX0ZSQU1FIDoKKwkJCVFFVEhfSERSX0VYVF9JTkNMVURFX1ZMQU5fVEFHOworCQloZHItPmhkci5sMy52bGFuX2lkID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJfQorCisJaGRyLT5oZHIubDMubGVuZ3RoID0gc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKKwlpZiAoaXB2ID09IDQpIHsKKwkJLyogSVB2NCAqLworCQloZHItPmhkci5sMy5mbGFncyA9IHFldGhfbDNfZ2V0X3FldGhfaGRyX2ZsYWdzNChjYXN0X3R5cGUpOworCQltZW1zZXQoaGRyLT5oZHIubDMuZGVzdF9hZGRyLCAwLCAxMik7CisJCWlmICgoc2tiLT5kc3QpICYmIChza2ItPmRzdC0+bmVpZ2hib3VyKSkgeworCQkJKigodTMyICopICgmaGRyLT5oZHIubDMuZGVzdF9hZGRyWzEyXSkpID0KKwkJCSAgICAqKCh1MzIgKikgc2tiLT5kc3QtPm5laWdoYm91ci0+cHJpbWFyeV9rZXkpOworCQl9IGVsc2UgeworCQkJLyogZmlsbCBpbiBkZXN0aW5hdGlvbiBhZGRyZXNzIHVzZWQgaW4gaXAgaGVhZGVyICovCisJCQkqKCh1MzIgKikgKCZoZHItPmhkci5sMy5kZXN0X2FkZHJbMTJdKSkgPQorCQkJCQkJCWlwX2hkcihza2IpLT5kYWRkcjsKKwkJfQorCX0gZWxzZSBpZiAoaXB2ID09IDYpIHsKKwkJLyogSVB2NiAqLworCQloZHItPmhkci5sMy5mbGFncyA9IHFldGhfbDNfZ2V0X3FldGhfaGRyX2ZsYWdzNihjYXN0X3R5cGUpOworCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKKwkJCWhkci0+aGRyLmwzLmZsYWdzICY9IH5RRVRIX0hEUl9QQVNTVEhSVTsKKwkJaWYgKChza2ItPmRzdCkgJiYgKHNrYi0+ZHN0LT5uZWlnaGJvdXIpKSB7CisJCQltZW1jcHkoaGRyLT5oZHIubDMuZGVzdF9hZGRyLAorCQkJICAgICAgIHNrYi0+ZHN0LT5uZWlnaGJvdXItPnByaW1hcnlfa2V5LCAxNik7CisJCX0gZWxzZSB7CisJCQkvKiBmaWxsIGluIGRlc3RpbmF0aW9uIGFkZHJlc3MgdXNlZCBpbiBpcCBoZWFkZXIgKi8KKwkJCW1lbWNweShoZHItPmhkci5sMy5kZXN0X2FkZHIsCisJCQkgICAgICAgJmlwdjZfaGRyKHNrYiktPmRhZGRyLCAxNik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBwYXNzdGhyb3VnaCAqLworCQlpZiAoKHNrYi0+ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKSAmJgorCQkJIW1lbWNtcChza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCisJCQlzaXplb2YoX191MTYpLCBza2ItPmRldi0+YnJvYWRjYXN0LCA2KSkgeworCQkJaGRyLT5oZHIubDMuZmxhZ3MgPSBRRVRIX0NBU1RfQlJPQURDQVNUIHwKKwkJCQkJCVFFVEhfSERSX1BBU1NUSFJVOworCQl9IGVsc2UgaWYgKCFtZW1jbXAoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkciksCisJCQkgICAgc2tiLT5kZXYtPmJyb2FkY2FzdCwgNikpIHsKKwkJCS8qIGJyb2FkY2FzdD8gKi8KKwkJCWhkci0+aGRyLmwzLmZsYWdzID0gUUVUSF9DQVNUX0JST0FEQ0FTVCB8CisJCQkJCQlRRVRIX0hEUl9QQVNTVEhSVTsKKwkJfSBlbHNlIHsKKwkJCWhkci0+aGRyLmwzLmZsYWdzID0gKGNhc3RfdHlwZSA9PSBSVE5fTVVMVElDQVNUKSA/CisJCQkJUUVUSF9DQVNUX01VTFRJQ0FTVCB8IFFFVEhfSERSX1BBU1NUSFJVIDoKKwkJCQlRRVRIX0NBU1RfVU5JQ0FTVCB8IFFFVEhfSERSX1BBU1NUSFJVOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHFldGhfbDNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IHJjOworCXUxNiAqdGFnOworCXN0cnVjdCBxZXRoX2hkciAqaGRyID0gTlVMTDsKKwlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IE5VTEw7CisJaW50IGlwdiA9IHFldGhfZ2V0X2lwX3ZlcnNpb24oc2tiKTsKKwlpbnQgY2FzdF90eXBlID0gcWV0aF9nZXRfY2FzdF90eXBlKGNhcmQsIHNrYik7CisJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUgPSBjYXJkLT5xZGlvLm91dF9xcworCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOworCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOworCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87CisJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImwzeG1pdCIpOworCisJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJgorCSAgICAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSkgJiYKKwkgICAgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSkKKwkJCWdvdG8gdHhfZHJvcDsKKworCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkgfHwgIWNhcmQtPmxhbl9vbmxpbmUpIHsKKwkJY2FyZC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJZ290byB0eF9kcm9wOworCX0KKworCWlmICgoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpICYmCisJICAgIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID09IDApKQorCQlnb3RvIHR4X2Ryb3A7CisKKwlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgeworCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2NudCsrOworCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX3N0YXJ0X3RpbWUgPSBxZXRoX2dldF9taWNyb3MoKTsKKwl9CisKKwkvKiBjcmVhdGUgYSBjbG9uZSB3aXRoIHdyaXRlYWJsZSBoZWFkcm9vbSAqLworCW5ld19za2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSArCisJCQkJCVZMQU5fSExFTik7CisJaWYgKCFuZXdfc2tiKQorCQlnb3RvIHR4X2Ryb3A7CisKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgeworCQlza2JfcHVsbChuZXdfc2tiLCBFVEhfSExFTik7CisJfSBlbHNlIHsKKwkJaWYgKG5ld19za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgeworCQkJaWYgKGNhcmQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMl9UUikKKwkJCQlza2JfcHVsbChuZXdfc2tiLCBUUl9ITEVOKTsKKwkJCWVsc2UKKwkJCQlza2JfcHVsbChuZXdfc2tiLCBFVEhfSExFTik7CisJCX0KKworCQlpZiAobmV3X3NrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVBWNiAmJiBjYXJkLT52bGFuZ3JwICYmCisJCQkJdmxhbl90eF90YWdfcHJlc2VudChuZXdfc2tiKSkgeworCQkJc2tiX3B1c2gobmV3X3NrYiwgVkxBTl9ITEVOKTsKKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKG5ld19za2IsIG5ld19za2ItPmRhdGEgKyA0LCA0KTsKKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLCA0LAorCQkJCW5ld19za2ItPmRhdGEgKyA4LCA0KTsKKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLCA4LAorCQkJCW5ld19za2ItPmRhdGEgKyAxMiwgNCk7CisJCQl0YWcgPSAodTE2ICopKG5ld19za2ItPmRhdGEgKyAxMik7CisJCQkqdGFnID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk7CisJCQkqKHRhZyArIDEpID0gaHRvbnModmxhbl90eF90YWdfZ2V0KG5ld19za2IpKTsKKwkJCVZMQU5fVFhfU0tCX0NCKG5ld19za2IpLT5tYWdpYyA9IDA7CisJCX0KKwl9CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlpZiAoc2tiX2lzX2dzbyhuZXdfc2tiKSkKKwkJbGFyZ2Vfc2VuZCA9IGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZDsKKworCS8qIGZpeCBoYXJkd2FyZSBsaW1pdGF0aW9uOiBhcyBsb25nIGFzIHdlIGRvIG5vdCBoYXZlIHNiYWwKKwkgKiBjaGFpbmluZyB3ZSBjYW4gbm90IHNlbmQgbG9uZyBmcmFnIGxpc3RzIHNvIHdlIHRlbXBvcmFyeQorCSAqIHN3aXRjaCB0byBFRERQCisJICovCisJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCisJCSgoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAyKSA+IDE2KSkKKwkJbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCisJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCisJICAgIChjYXN0X3R5cGUgPT0gUlROX1VOU1BFQykpIHsKKwkJaGRyID0gKHN0cnVjdCBxZXRoX2hkciAqKXNrYl9wdXNoKG5ld19za2IsCisJCQkJCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOworCQltZW1zZXQoaGRyLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOworCQlxZXRoX2wzX2ZpbGxfaGVhZGVyKGNhcmQsIGhkciwgbmV3X3NrYiwgaXB2LCBjYXN0X3R5cGUpOworCQlxZXRoX3Rzb19maWxsX2hlYWRlcihjYXJkLCBoZHIsIG5ld19za2IpOworCQllbGVtZW50c19uZWVkZWQrKzsKKwl9IGVsc2UgeworCQloZHIgPSAoc3RydWN0IHFldGhfaGRyICopc2tiX3B1c2gobmV3X3NrYiwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKKwkJcWV0aF9sM19maWxsX2hlYWRlcihjYXJkLCBoZHIsIG5ld19za2IsIGlwdiwgY2FzdF90eXBlKTsKKwl9CisKKwlpZiAobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfRUREUCkgeworCQkvKiBuZXdfc2tiIGlzIG5vdCBvd25lZCBieSBhIHNvY2tldCBzbyB3ZSB1c2Ugc2tiIHRvIGdldAorCQkgKiB0aGUgcHJvdG9jb2wKKwkJICovCisJCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dChjYXJkLCBuZXdfc2tiLCBoZHIsCisJCQkJCQlza2ItPnNrLT5za19wcm90b2NvbCk7CisJCWlmIChjdHggPT0gTlVMTCkgeworCQkJUFJJTlRfV0FSTigiY291bGQgbm90IGNyZWF0ZSBlZGRwIGNvbnRleHRcbiIpOworCQkJZ290byB0eF9kcm9wOworCQl9CisJfSBlbHNlIHsKKwkJaW50IGVsZW1zID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCisJCQkJCQkgZWxlbWVudHNfbmVlZGVkKTsKKwkJaWYgKCFlbGVtcykKKwkJCWdvdG8gdHhfZHJvcDsKKwkJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOworCX0KKworCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pICYmCisJICAgIChuZXdfc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCisJCXFldGhfdHhfY3N1bShuZXdfc2tiKTsKKworCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQorCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKKwkJCQkJIGVsZW1lbnRzX25lZWRlZCwgY3R4KTsKKwllbHNlCisJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCisJCQkJCSAgICAgIGVsZW1lbnRzX25lZWRlZCwgY3R4KTsKKworCWlmICghcmMpIHsKKwkJY2FyZC0+c3RhdHMudHhfcGFja2V0cysrOworCQljYXJkLT5zdGF0cy50eF9ieXRlcyArPSB0eF9ieXRlczsKKwkJaWYgKG5ld19za2IgIT0gc2tiKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJCWlmIChsYXJnZV9zZW5kICE9IFFFVEhfTEFSR0VfU0VORF9OTykgeworCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9ieXRlcyArPSB0eF9ieXRlczsKKwkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfY250Kys7CisJCQl9CisJCQlpZiAoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgPiAwKSB7CisJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3NlbnQrKzsKKwkJCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLworCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPQorCQkJCQlza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDE7CisJCQl9CisJCX0KKworCQlpZiAoY3R4ICE9IE5VTEwpIHsKKwkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY3R4ICE9IE5VTEwpCisJCQlxZXRoX2VkZHBfcHV0X2NvbnRleHQoY3R4KTsKKworCQlpZiAocmMgPT0gLUVCVVNZKSB7CisJCQlpZiAobmV3X3NrYiAhPSBza2IpCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0gZWxzZQorCQkJZ290byB0eF9kcm9wOworCX0KKworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF90aW1lICs9IHFldGhfZ2V0X21pY3JvcygpIC0KKwkJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfc3RhcnRfdGltZTsKKwlyZXR1cm4gcmM7CisKK3R4X2Ryb3A6CisJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOworCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOworCWlmICgobmV3X3NrYiAhPSBza2IpICYmIG5ld19za2IpCisJCWRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJxZXRob3BlbiIpOworCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1NPRlRTRVRVUCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FyZC0+ZGF0YS5zdGF0ZSA9IENIX1NUQVRFX1VQOworCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9VUDsKKwljYXJkLT5kZXYtPmZsYWdzIHw9IElGRl9VUDsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJaWYgKCFjYXJkLT5sYW5fb25saW5lICYmIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDQsICJxZXRoc3RvcCIpOworCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKKwljYXJkLT5kZXYtPmZsYWdzICY9IH5JRkZfVVA7CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCisJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9TT0ZUU0VUVVA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgcWV0aF9sM19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBIV19DSEVDS1NVTU1JTkcpOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfZXRodG9vbF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwllbnVtIHFldGhfY2FyZF9zdGF0ZXMgb2xkX3N0YXRlOworCWVudW0gcWV0aF9jaGVja3N1bV90eXBlcyBjc3VtX3R5cGU7CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGRhdGEpCisJCWNzdW1fdHlwZSA9IEhXX0NIRUNLU1VNTUlORzsKKwllbHNlCisJCWNzdW1fdHlwZSA9IFNXX0NIRUNLU1VNTUlORzsKKworCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgIT0gY3N1bV90eXBlKSB7CisJCW9sZF9zdGF0ZSA9IGNhcmQtPnN0YXRlOworCQlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkKKwkJCV9fcWV0aF9sM19zZXRfb2ZmbGluZShjYXJkLT5nZGV2LCAxKTsKKwkJY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gY3N1bV90eXBlOworCQlpZiAob2xkX3N0YXRlID09IENBUkRfU1RBVEVfVVApCisJCQlfX3FldGhfbDNfc2V0X29ubGluZShjYXJkLT5nZGV2LCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoZGF0YSkgeworCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgeworCQkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCisJCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CisJCQllbHNlCisJCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJCX0KKwl9IGVsc2UgeworCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wzX2V0aHRvb2xfb3BzID0geworCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAorCS5nZXRfcnhfY3N1bSA9IHFldGhfbDNfZXRodG9vbF9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gPSBxZXRoX2wzX2V0aHRvb2xfc2V0X3J4X2NzdW0sCisJLmdldF9zZyAgICAgID0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZyAgICAgID0gZXRodG9vbF9vcF9zZXRfc2csCisJLmdldF90c28gICAgID0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5zZXRfdHNvICAgICA9IHFldGhfbDNfZXRodG9vbF9zZXRfdHNvLAorCS5nZXRfc3RyaW5ncyA9IHFldGhfY29yZV9nZXRfc3RyaW5ncywKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zdGF0c19jb3VudCA9IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQsCisJLmdldF9kcnZpbmZvID0gcWV0aF9jb3JlX2dldF9kcnZpbmZvLAorfTsKKworLyoKKyAqIHdlIG5lZWQgTk9BUlAgZm9yIElQdjQgYnV0IHdlIHdhbnQgbmVpZ2hib3Igc29saWNpdGF0aW9uIGZvciBJUHY2LiBTZXR0aW5nCisgKiBOT0FSUCBvbiB0aGUgbmV0ZGV2aWNlIGlzIG5vIG9wdGlvbiBiZWNhdXNlIGl0IGFsc28gdHVybnMgb2ZmIG5laWdoYm9yCisgKiBzb2xpY2l0YXRpb24uIEZvciBJUHY0IHdlIGluc3RhbGwgYSBuZWlnaGJvcl9zZXR1cCBmdW5jdGlvbi4gV2UgZG9uJ3Qgd2FudAorICogYXJwIHJlc29sdXRpb24gYnV0IHdlIHdhbnQgdGhlIGhhcmQgaGVhZGVyIChwYWNrZXQgc29ja2V0IHdpbGwgd29yaworICogZS5nLiB0Y3BkdW1wKQorICovCitzdGF0aWMgaW50IHFldGhfbDNfbmVpZ2hfc2V0dXBfbm9hcnAoc3RydWN0IG5laWdoYm91ciAqbikKK3sKKwluLT5udWRfc3RhdGUgPSBOVURfTk9BUlA7CisJbWVtY3B5KG4tPmhhLCAiRkFLRUxMIiwgNik7CisJbi0+b3V0cHV0ID0gbi0+b3BzLT5jb25uZWN0ZWRfb3V0cHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitxZXRoX2wzX25laWdoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaF9wYXJtcyAqbnApCit7CisJaWYgKG5wLT50YmwtPmZhbWlseSA9PSBBRl9JTkVUKQorCQlucC0+bmVpZ2hfc2V0dXAgPSBxZXRoX2wzX25laWdoX3NldHVwX25vYXJwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19zZXR1cF9uZXRkZXYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TQUUpIHsKKwkJaWYgKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSB8fAorCQkgICAgKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0hTVFIpKSB7CisjaWZkZWYgQ09ORklHX1RSCisJCQljYXJkLT5kZXYgPSBhbGxvY190cmRldigwKTsKKyNlbmRpZgorCQkJaWYgKCFjYXJkLT5kZXYpCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQljYXJkLT5kZXYgPSBhbGxvY19ldGhlcmRldigwKTsKKwkJCWlmICghY2FyZC0+ZGV2KQorCQkJCXJldHVybiAtRU5PREVWOworCQkJY2FyZC0+ZGV2LT5uZWlnaF9zZXR1cCA9IHFldGhfbDNfbmVpZ2hfc2V0dXA7CisKKwkJCS8qSVB2NiBhZGRyZXNzIGF1dG9jb25maWd1cmF0aW9uIHN0dWZmKi8KKwkJCXFldGhfbDNfZ2V0X3VuaXF1ZV9pZChjYXJkKTsKKwkJCWlmICghKGNhcmQtPmluZm8udW5pcXVlX2lkICYgVU5JUVVFX0lEX05PVF9CWV9DQVJEKSkKKwkJCQljYXJkLT5kZXYtPmRldl9pZCA9IGNhcmQtPmluZm8udW5pcXVlX2lkICYKKwkJCQkJCQkgMHhmZmZmOworCQl9CisJfSBlbHNlIGlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CisJCWNhcmQtPmRldiA9IGFsbG9jX25ldGRldigwLCAiaHNpJWQiLCBldGhlcl9zZXR1cCk7CisJCWlmICghY2FyZC0+ZGV2KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOworCQlxZXRoX2wzX2lxZF9yZWFkX2luaXRpYWxfbWFjKGNhcmQpOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNhcmQtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gcWV0aF9sM19oYXJkX3N0YXJ0X3htaXQ7CisJY2FyZC0+ZGV2LT5wcml2ID0gY2FyZDsKKwljYXJkLT5kZXYtPnR4X3RpbWVvdXQgPSAmcWV0aF90eF90aW1lb3V0OworCWNhcmQtPmRldi0+d2F0Y2hkb2dfdGltZW8gPSBRRVRIX1RYX1RJTUVPVVQ7CisJY2FyZC0+ZGV2LT5vcGVuID0gcWV0aF9sM19vcGVuOworCWNhcmQtPmRldi0+c3RvcCA9IHFldGhfbDNfc3RvcDsKKwljYXJkLT5kZXYtPmRvX2lvY3RsID0gcWV0aF9sM19kb19pb2N0bDsKKwljYXJkLT5kZXYtPmdldF9zdGF0cyA9IHFldGhfZ2V0X3N0YXRzOworCWNhcmQtPmRldi0+Y2hhbmdlX210dSA9IHFldGhfY2hhbmdlX210dTsKKwljYXJkLT5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHFldGhfbDNfc2V0X211bHRpY2FzdF9saXN0OworCWNhcmQtPmRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHFldGhfbDNfdmxhbl9yeF9yZWdpc3RlcjsKKwljYXJkLT5kZXYtPnZsYW5fcnhfYWRkX3ZpZCA9IHFldGhfbDNfdmxhbl9yeF9hZGRfdmlkOworCWNhcmQtPmRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IHFldGhfbDNfdmxhbl9yeF9raWxsX3ZpZDsKKwljYXJkLT5kZXYtPm10dSA9IGNhcmQtPmluZm8uaW5pdGlhbF9tdHU7CisJY2FyZC0+ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBOVUxMOworCVNFVF9FVEhUT09MX09QUyhjYXJkLT5kZXYsICZxZXRoX2wzX2V0aHRvb2xfb3BzKTsKKwljYXJkLT5kZXYtPmZlYXR1cmVzIHw9CU5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCQkJTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJCQlORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCisJU0VUX05FVERFVl9ERVYoY2FyZC0+ZGV2LCAmY2FyZC0+Z2Rldi0+ZGV2KTsKKwlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGNhcmQtPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfcWRpb19pbnB1dF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjY3dkZXYsCisJCXVuc2lnbmVkIGludCBzdGF0dXMsIHVuc2lnbmVkIGludCBxZGlvX2VyciwKKwkJdW5zaWduZWQgaW50IHNpZ2FfZXJyLCB1bnNpZ25lZCBpbnQgcXVldWUsIGludCBmaXJzdF9lbGVtZW50LAorCQlpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgY2FyZF9wdHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcWV0aF9xZGlvX2J1ZmZlciAqYnVmZmVyOworCWludCBpbmRleDsKKwlpbnQgaTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJxZGlucHV0Iik7CisJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGNhcmRfcHRyOworCW5ldF9kZXYgPSBjYXJkLT5kZXY7CisJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2NudCsrOworCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfc3RhcnRfdGltZSA9IHFldGhfZ2V0X21pY3JvcygpOworCX0KKwlpZiAoc3RhdHVzICYgUURJT19TVEFUVVNfTE9PS19GT1JfRVJST1IpIHsKKwkJaWYgKHN0YXR1cyAmIFFESU9fU1RBVFVTX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTikgeworCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgInFkaW5jaGsiKTsKKwkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisJCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiUwNFglMDRYIiwKKwkJCQkJZmlyc3RfZWxlbWVudCwgY291bnQpOworCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlMDRYJTA0WCIsIHF1ZXVlLCBzdGF0dXMpOworCQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlmb3IgKGkgPSBmaXJzdF9lbGVtZW50OyBpIDwgKGZpcnN0X2VsZW1lbnQgKyBjb3VudCk7ICsraSkgeworCQlpbmRleCA9IGkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCQlidWZmZXIgPSAmY2FyZC0+cWRpby5pbl9xLT5idWZzW2luZGV4XTsKKwkJaWYgKCEoKHN0YXR1cyAmIFFESU9fU1RBVFVTX0xPT0tfRk9SX0VSUk9SKSAmJgorCQkgICAgICBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLAorCQkJCQkgICAgIHFkaW9fZXJyLCBzaWdhX2VyciwgInFpbmVyciIpKSkKKwkJCXFldGhfbDNfcHJvY2Vzc19pbmJvdW5kX2J1ZmZlcihjYXJkLCBidWZmZXIsIGluZGV4KTsKKwkJLyogY2xlYXIgYnVmZmVyIGFuZCBnaXZlIGJhY2sgdG8gaGFyZHdhcmUgKi8KKwkJcWV0aF9wdXRfYnVmZmVyX3Bvb2xfZW50cnkoY2FyZCwgYnVmZmVyLT5wb29sX2VudHJ5KTsKKwkJcWV0aF9xdWV1ZV9pbnB1dF9idWZmZXIoY2FyZCwgaW5kZXgpOworCX0KKwlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3RpbWUgKz0gcWV0aF9nZXRfbWljcm9zKCkgLQorCQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3N0YXJ0X3RpbWU7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19wcm9iZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZnZGV2LT5kZXYpOworCisJcWV0aF9sM19jcmVhdGVfZGV2aWNlX2F0dHJpYnV0ZXMoJmdkZXYtPmRldik7CisJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAwOworCWNhcmQtPmRpc2NpcGxpbmUuaW5wdXRfaGFuZGxlciA9IChxZGlvX2hhbmRsZXJfdCAqKQorCQlxZXRoX2wzX3FkaW9faW5wdXRfaGFuZGxlcjsKKwljYXJkLT5kaXNjaXBsaW5lLm91dHB1dF9oYW5kbGVyID0gKHFkaW9faGFuZGxlcl90ICopCisJCXFldGhfcWRpb19vdXRwdXRfaGFuZGxlcjsKKwljYXJkLT5kaXNjaXBsaW5lLnJlY292ZXIgPSBxZXRoX2wzX3JlY292ZXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjZ2RldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKKworCXdhaXRfZXZlbnQoY2FyZC0+d2FpdF9xLCBxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCAweGZmZmZmZmZmKSA9PSAwKTsKKworCWlmIChjZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT05MSU5FKSB7CisJCWNhcmQtPnVzZV9oYXJkX3N0b3AgPSAxOworCQlxZXRoX2wzX3NldF9vZmZsaW5lKGNnZGV2KTsKKwl9CisKKwlpZiAoY2FyZC0+ZGV2KSB7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGNhcmQtPmRldik7CisJCWNhcmQtPmRldiA9IE5VTEw7CisJfQorCisJcWV0aF9sM19yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoJmNnZGV2LT5kZXYpOworCXFldGhfbDNfY2xlYXJfaXBfbGlzdChjYXJkLCAwLCAwKTsKKwlxZXRoX2wzX2NsZWFyX2lwYXRvX2xpc3QoY2FyZCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9fcWV0aF9sM19zZXRfb25saW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXYsIGludCByZWNvdmVyeV9tb2RlKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisJaW50IHJjID0gMDsKKwllbnVtIHFldGhfY2FyZF9zdGF0ZXMgcmVjb3Zlcl9mbGFnOworCisJQlVHX09OKCFjYXJkKTsKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic2V0b25saW4iKTsKKwlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CisKKwlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCwgMSk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCB+UUVUSF9SRUNPVkVSX1RIUkVBRCkpIHsKKwkJUFJJTlRfV0FSTigic2V0X29ubGluZSBvZiBjYXJkICVzIGludGVycnVwdGVkIGJ5IHVzZXIhXG4iLAorCQkJICAgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCXJlY292ZXJfZmxhZyA9IGNhcmQtPnN0YXRlOworCXJjID0gY2N3X2RldmljZV9zZXRfb25saW5lKENBUkRfUkRFVihjYXJkKSk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciVkIiwgcmMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmMgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoQ0FSRF9XREVWKGNhcmQpKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIxZXJyJWQiLCByYyk7CisJCXJldHVybiAtRUlPOworCX0KKwlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX0RERVYoY2FyZCkpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmMgPSBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCQlnb3RvIG91dF9yZW1vdmU7CisJfQorCisJcWV0aF9sM19xdWVyeV9pcGFzc2lzdHMoY2FyZCwgUUVUSF9QUk9UX0lQVjQpOworCisJaWYgKCFjYXJkLT5kZXYgJiYgcWV0aF9sM19zZXR1cF9uZXRkZXYoY2FyZCkpCisJCWdvdG8gb3V0X3JlbW92ZTsKKworCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9IQVJEU0VUVVA7CisJcWV0aF9wcmludF9zdGF0dXNfbWVzc2FnZShjYXJkKTsKKworCS8qIHNvZnRzZXR1cCAqLworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJzb2Z0c2V0cCIpOworCisJcmMgPSBxZXRoX3NlbmRfc3RhcnRsYW4oY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciVkIiwgcmMpOworCQlpZiAocmMgPT0gMHhlMDgwKSB7CisJCQlQUklOVF9XQVJOKCJMQU4gb24gY2FyZCAlcyBpZiBvZmZsaW5lISAiCisJCQkJICAgIldhaXRpbmcgZm9yIFNUQVJUTEFOIGZyb20gY2FyZC5cbiIsCisJCQkJICAgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQkJY2FyZC0+bGFuX29ubGluZSA9IDA7CisJCX0KKwkJcmV0dXJuIHJjOworCX0gZWxzZQorCQljYXJkLT5sYW5fb25saW5lID0gMTsKKwlxZXRoX3NldF9sYXJnZV9zZW5kKGNhcmQsIGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCk7CisKKwlyYyA9IHFldGhfbDNfc2V0YWRhcHRlcl9wYXJtcyhjYXJkKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCXJjID0gcWV0aF9sM19zdGFydF9pcGFzc2lzdHMoY2FyZCk7CisJaWYgKHJjKQorCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKKwlyYyA9IHFldGhfbDNfc2V0cm91dGluZ192NChjYXJkKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNGVyciVkIiwgcmMpOworCXJjID0gcWV0aF9sM19zZXRyb3V0aW5nX3Y2KGNhcmQpOworCWlmIChyYykKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CisJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOworCisJcmMgPSBxZXRoX2luaXRfcWRpb19xdWV1ZXMoY2FyZCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOworCQlnb3RvIG91dF9yZW1vdmU7CisJfQorCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9TT0ZUU0VUVVA7CisJbmV0aWZfY2Fycmllcl9vbihjYXJkLT5kZXYpOworCisJcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDB4ZmZmZmZmZmYsIDApOworCWlmICgocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfUkVDT1ZFUikgJiYgcmVjb3ZlcnlfbW9kZSkgeworCQkJcWV0aF9sM19vcGVuKGNhcmQtPmRldik7CisJCQlxZXRoX2wzX3NldF9tdWx0aWNhc3RfbGlzdChjYXJkLT5kZXYpOworCX0KKwkvKiBsZXQgdXNlcl9zcGFjZSBrbm93IHRoYXQgZGV2aWNlIGlzIG9ubGluZSAqLworCWtvYmplY3RfdWV2ZW50KCZnZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOworCXJldHVybiAwOworb3V0X3JlbW92ZToKKwljYXJkLT51c2VfaGFyZF9zdG9wID0gMTsKKwlxZXRoX2wzX3N0b3BfY2FyZChjYXJkLCAwKTsKKwljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7CisJY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1dERVYoY2FyZCkpOworCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9SREVWKGNhcmQpKTsKKwlpZiAocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfUkVDT1ZFUikKKwkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1JFQ09WRVI7CisJZWxzZQorCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfRE9XTjsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3NldF9vbmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKK3sKKwlyZXR1cm4gX19xZXRoX2wzX3NldF9vbmxpbmUoZ2RldiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19xZXRoX2wzX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2LAorCQkJaW50IHJlY292ZXJ5X21vZGUpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YSgmY2dkZXYtPmRldik7CisJaW50IHJjID0gMCwgcmMyID0gMCwgcmMzID0gMDsKKwllbnVtIHFldGhfY2FyZF9zdGF0ZXMgcmVjb3Zlcl9mbGFnOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMywgInNldG9mZmwiKTsKKwlRRVRIX0RCRl9IRVgoU0VUVVAsIDMsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CisKKwlpZiAoY2FyZC0+ZGV2ICYmIG5ldGlmX2NhcnJpZXJfb2soY2FyZC0+ZGV2KSkKKwkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKKwlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKKwlpZiAocWV0aF9sM19zdG9wX2NhcmQoY2FyZCwgcmVjb3ZlcnlfbW9kZSkgPT0gLUVSRVNUQVJUU1lTKSB7CisJCVBSSU5UX1dBUk4oIlN0b3BwaW5nIGNhcmQgJXMgaW50ZXJydXB0ZWQgYnkgdXNlciFcbiIsCisJCQkgICBDQVJEX0JVU19JRChjYXJkKSk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCXJjICA9IGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKKwlyYzIgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfV0RFVihjYXJkKSk7CisJcmMzID0gY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1JERVYoY2FyZCkpOworCWlmICghcmMpCisJCXJjID0gKHJjMikgPyByYzIgOiByYzM7CisJaWYgKHJjKQorCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwlpZiAocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfVVApCisJCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9SRUNPVkVSOworCS8qIGxldCB1c2VyX3NwYWNlIGtub3cgdGhhdCBkZXZpY2UgaXMgb2ZmbGluZSAqLworCWtvYmplY3RfdWV2ZW50KCZjZ2Rldi0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZXRoX2wzX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNnZGV2KQoreworCXJldHVybiBfX3FldGhfbDNfc2V0X29mZmxpbmUoY2dkZXYsIDApOworfQorCitzdGF0aWMgaW50IHFldGhfbDNfcmVjb3Zlcih2b2lkICpwdHIpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKwlpbnQgcmMgPSAwOworCisJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIHB0cjsKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAyLCAicmVjb3ZlcjEiKTsKKwlRRVRIX0RCRl9IRVgoVFJBQ0UsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CisJaWYgKCFxZXRoX2RvX3J1bl90aHJlYWQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpCisJCXJldHVybiAwOworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJyZWNvdmVyMiIpOworCVBSSU5UX1dBUk4oIlJlY292ZXJ5IG9mIGRldmljZSAlcyBzdGFydGVkIC4uLlxuIiwKKwkJICAgQ0FSRF9CVVNfSUQoY2FyZCkpOworCWNhcmQtPnVzZV9oYXJkX3N0b3AgPSAxOworCV9fcWV0aF9sM19zZXRfb2ZmbGluZShjYXJkLT5nZGV2LCAxKTsKKwlyYyA9IF9fcWV0aF9sM19zZXRfb25saW5lKGNhcmQtPmdkZXYsIDEpOworCS8qIGRvbid0IHJ1biBhbm90aGVyIHNjaGVkdWxlZCByZWNvdmVyeSAqLworCXFldGhfY2xlYXJfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKTsKKwlxZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKTsKKwlpZiAoIXJjKQorCQlQUklOVF9JTkZPKCJEZXZpY2UgJXMgc3VjY2Vzc2Z1bGx5IHJlY292ZXJlZCFcbiIsCisJCQkgICBDQVJEX0JVU19JRChjYXJkKSk7CisJZWxzZQorCQlQUklOVF9JTkZPKCJEZXZpY2UgJXMgY291bGQgbm90IGJlIHJlY292ZXJlZCFcbiIsCisJCQkgICBDQVJEX0JVU19JRChjYXJkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfbDNfc2h1dGRvd24oc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZnZGV2LT5kZXYpOworCXFldGhfbDNfY2xlYXJfaXBfbGlzdChjYXJkLCAwLCAwKTsKKwlxZXRoX3FkaW9fY2xlYXJfY2FyZChjYXJkLCAwKTsKKwlxZXRoX2NsZWFyX3FkaW9fYnVmZmVycyhjYXJkKTsKK30KKworc3RydWN0IGNjd2dyb3VwX2RyaXZlciBxZXRoX2wzX2Njd2dyb3VwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBxZXRoX2wzX3Byb2JlX2RldmljZSwKKwkucmVtb3ZlID0gcWV0aF9sM19yZW1vdmVfZGV2aWNlLAorCS5zZXRfb25saW5lID0gcWV0aF9sM19zZXRfb25saW5lLAorCS5zZXRfb2ZmbGluZSA9IHFldGhfbDNfc2V0X29mZmxpbmUsCisJLnNodXRkb3duID0gcWV0aF9sM19zaHV0ZG93biwKK307CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2wzX2Njd2dyb3VwX2RyaXZlcik7CisKK3N0YXRpYyBpbnQgcWV0aF9sM19pcF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBpbl9pZmFkZHIgKmlmYSA9IChzdHJ1Y3QgaW5faWZhZGRyICopcHRyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpZmEtPmlmYV9kZXYtPmRldjsKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHI7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKKworCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaXBldmVudCIpOworCWNhcmQgPSBxZXRoX2wzX2dldF9jYXJkX2Zyb21fZGV2KGRldik7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlhZGRyID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjQpOworCWlmIChhZGRyICE9IE5VTEwpIHsKKwkJYWRkci0+dS5hNC5hZGRyID0gaWZhLT5pZmFfYWRkcmVzczsKKwkJYWRkci0+dS5hNC5tYXNrID0gaWZhLT5pZmFfbWFzazsKKwkJYWRkci0+dHlwZSA9IFFFVEhfSVBfVFlQRV9OT1JNQUw7CisJfSBlbHNlCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTkVUREVWX1VQOgorCQlpZiAoIXFldGhfbDNfYWRkX2lwKGNhcmQsIGFkZHIpKQorCQkJa2ZyZWUoYWRkcik7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0RPV046CisJCWlmICghcWV0aF9sM19kZWxldGVfaXAoY2FyZCwgYWRkcikpCisJCQlrZnJlZShhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXFldGhfbDNfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKK291dDoKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcWV0aF9sM19pcF9ub3RpZmllciA9IHsKKwlxZXRoX2wzX2lwX2V2ZW50LAorCU5VTEwsCit9OworCisjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgorLyoqCisgKiBJUHY2IGV2ZW50IGhhbmRsZXIKKyAqLworc3RhdGljIGludCBxZXRoX2wzX2lwNl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmEgPSAoc3RydWN0IGluZXQ2X2lmYWRkciAqKXB0cjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaWZhLT5pZGV2LT5kZXY7CisJc3RydWN0IHFldGhfaXBhZGRyICphZGRyOworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CisKKwlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaXA2ZXZlbnQiKTsKKworCWNhcmQgPSBxZXRoX2wzX2dldF9jYXJkX2Zyb21fZGV2KGRldik7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBWNikpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWFkZHIgPSBxZXRoX2wzX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNik7CisJaWYgKGFkZHIgIT0gTlVMTCkgeworCQltZW1jcHkoJmFkZHItPnUuYTYuYWRkciwgJmlmYS0+YWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlhZGRyLT51LmE2LnBmeGxlbiA9IGlmYS0+cHJlZml4X2xlbjsKKwkJYWRkci0+dHlwZSA9IFFFVEhfSVBfVFlQRV9OT1JNQUw7CisJfSBlbHNlCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTkVUREVWX1VQOgorCQlpZiAoIXFldGhfbDNfYWRkX2lwKGNhcmQsIGFkZHIpKQorCQkJa2ZyZWUoYWRkcik7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0RPV046CisJCWlmICghcWV0aF9sM19kZWxldGVfaXAoY2FyZCwgYWRkcikpCisJCQlrZnJlZShhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXFldGhfbDNfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKK291dDoKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcWV0aF9sM19pcDZfbm90aWZpZXIgPSB7CisJcWV0aF9sM19pcDZfZXZlbnQsCisJTlVMTCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBxZXRoX2wzX3JlZ2lzdGVyX25vdGlmaWVycyh2b2lkKQoreworCWludCByYzsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJyZWdub3RpZiIpOworCXJjID0gcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnFldGhfbDNfaXBfbm90aWZpZXIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKKwlyYyA9IHJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcigmcWV0aF9sM19pcDZfbm90aWZpZXIpOworCWlmIChyYykgeworCQl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZxZXRoX2wzX2lwX25vdGlmaWVyKTsKKwkJcmV0dXJuIHJjOworCX0KKyNlbHNlCisJUFJJTlRfV0FSTigibGF5ZXIgMyBkaXNjaXBsaW5lIG5vIElQdjYgc3VwcG9ydFxuIik7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcWV0aF9sM191bnJlZ2lzdGVyX25vdGlmaWVycyh2b2lkKQoreworCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgInVucmVnbm90Iik7CisJQlVHX09OKHVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnFldGhfbDNfaXBfbm90aWZpZXIpKTsKKyNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CisJQlVHX09OKHVucmVnaXN0ZXJfaW5ldDZhZGRyX25vdGlmaWVyKCZxZXRoX2wzX2lwNl9ub3RpZmllcikpOworI2VuZGlmIC8qIFFFVEhfSVBWNiAqLworfQorCitzdGF0aWMgaW50IF9faW5pdCBxZXRoX2wzX2luaXQodm9pZCkKK3sKKwlpbnQgcmMgPSAwOworCisJUFJJTlRfSU5GTygicmVnaXN0ZXIgbGF5ZXIgMyBkaXNjaXBsaW5lXG4iKTsKKwlyYyA9IHFldGhfbDNfcmVnaXN0ZXJfbm90aWZpZXJzKCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcWV0aF9sM19leGl0KHZvaWQpCit7CisJcWV0aF9sM191bnJlZ2lzdGVyX25vdGlmaWVycygpOworCVBSSU5UX0lORk8oInVucmVnaXN0ZXIgbGF5ZXIgMyBkaXNjaXBsaW5lXG4iKTsKK30KKworbW9kdWxlX2luaXQocWV0aF9sM19pbml0KTsKK21vZHVsZV9leGl0KHFldGhfbDNfZXhpdCk7CitNT0RVTEVfQVVUSE9SKCJGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigicWV0aCBsYXllciAzIGRpc2NpcGxpbmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGY1MWZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCkBAIC0wLDAgKzEsMTA1MSBAQAorLyoKKyAqICBkcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDcKKyAqICAgIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPiwKKyAqCQkgRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+LAorICoJCSBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+LAorICoJCSBGcmFuayBCbGFzY2hrYSA8ZnJhbmsuYmxhc2Noa2FAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSAicWV0aF9sMy5oIgorCisjZGVmaW5lIFFFVEhfREVWSUNFX0FUVFIoX2lkLCBfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpIFwKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyXyMjX2lkID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKKworc3RhdGljIGNvbnN0IGNoYXIgKnFldGhfbDNfZ2V0X2NoZWNrc3VtX3N0cihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gU1dfQ0hFQ0tTVU1NSU5HKQorCQlyZXR1cm4gInN3IjsKKwllbHNlIGlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gSFdfQ0hFQ0tTVU1NSU5HKQorCQlyZXR1cm4gImh3IjsKKwllbHNlCisJCXJldHVybiAibm8iOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yb3V0ZV9zaG93KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQlzdHJ1Y3QgcWV0aF9yb3V0aW5nX2luZm8gKnJvdXRlLCBjaGFyICpidWYpCit7CisJc3dpdGNoIChyb3V0ZS0+dHlwZSkgeworCWNhc2UgUFJJTUFSWV9ST1VURVI6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAicHJpbWFyeSByb3V0ZXIiKTsKKwljYXNlIFNFQ09OREFSWV9ST1VURVI6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAic2Vjb25kYXJ5IHJvdXRlciIpOworCWNhc2UgTVVMVElDQVNUX1JPVVRFUjoKKwkJaWYgKGNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPT0gUUVUSF9CUk9BRENBU1RfV0lUSE9VVF9FQ0hPKQorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJtdWx0aWNhc3Qgcm91dGVyKyIpOworCQllbHNlCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIm11bHRpY2FzdCByb3V0ZXIiKTsKKwljYXNlIFBSSU1BUllfQ09OTkVDVE9SOgorCQlpZiAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8pCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgInByaW1hcnkgY29ubmVjdG9yKyIpOworCQllbHNlCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgInByaW1hcnkgY29ubmVjdG9yIik7CisJY2FzZSBTRUNPTkRBUllfQ09OTkVDVE9SOgorCQlpZiAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8pCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgInNlY29uZGFyeSBjb25uZWN0b3IrIik7CisJCWVsc2UKKwkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAic2Vjb25kYXJ5IGNvbm5lY3RvciIpOworCWRlZmF1bHQ6CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAibm8iKTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3JvdXRlNF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBxZXRoX2wzX2Rldl9yb3V0ZV9zaG93KGNhcmQsICZjYXJkLT5vcHRpb25zLnJvdXRlNCwgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfcm91dGVfc3RvcmUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcm91dGluZ19pbmZvICpyb3V0ZSwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJZW51bSBxZXRoX3JvdXRpbmdfdHlwZXMgb2xkX3JvdXRlX3R5cGUgPSByb3V0ZS0+dHlwZTsKKwljaGFyICp0bXA7CisJaW50IHJjOworCisJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKKworCWlmICghc3RyY21wKHRtcCwgIm5vX3JvdXRlciIpKSB7CisJCXJvdXRlLT50eXBlID0gTk9fUk9VVEVSOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJwcmltYXJ5X2Nvbm5lY3RvciIpKSB7CisJCXJvdXRlLT50eXBlID0gUFJJTUFSWV9DT05ORUNUT1I7CisJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgInNlY29uZGFyeV9jb25uZWN0b3IiKSkgeworCQlyb3V0ZS0+dHlwZSA9IFNFQ09OREFSWV9DT05ORUNUT1I7CisJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgInByaW1hcnlfcm91dGVyIikpIHsKKwkJcm91dGUtPnR5cGUgPSBQUklNQVJZX1JPVVRFUjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAic2Vjb25kYXJ5X3JvdXRlciIpKSB7CisJCXJvdXRlLT50eXBlID0gU0VDT05EQVJZX1JPVVRFUjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAibXVsdGljYXN0X3JvdXRlciIpKSB7CisJCXJvdXRlLT50eXBlID0gTVVMVElDQVNUX1JPVVRFUjsKKwl9IGVsc2UgeworCQlQUklOVF9XQVJOKCJJbnZhbGlkIHJvdXRpbmcgdHlwZSAnJXMnLlxuIiwgdG1wKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICgoKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfU09GVFNFVFVQKSB8fAorCSAgICAgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApKSAmJgorCSAgICAob2xkX3JvdXRlX3R5cGUgIT0gcm91dGUtPnR5cGUpKSB7CisJCWlmIChwcm90ID09IFFFVEhfUFJPVF9JUFY0KQorCQkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjQoY2FyZCk7CisJCWVsc2UgaWYgKHByb3QgPT0gUUVUSF9QUk9UX0lQVjYpCisJCQlyYyA9IHFldGhfbDNfc2V0cm91dGluZ192NihjYXJkKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yb3V0ZTRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBxZXRoX2wzX2Rldl9yb3V0ZV9zdG9yZShjYXJkLCAmY2FyZC0+b3B0aW9ucy5yb3V0ZTQsCisJCQkJUUVUSF9QUk9UX0lQVjQsIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocm91dGU0LCAwNjQ0LCBxZXRoX2wzX2Rldl9yb3V0ZTRfc2hvdywKKwkJCXFldGhfbDNfZGV2X3JvdXRlNF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3JvdXRlNl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIm4vYSIpOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3JvdXRlX3Nob3coY2FyZCwgJmNhcmQtPm9wdGlvbnMucm91dGU2LCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yb3V0ZTZfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKSB7CisJCVBSSU5UX1dBUk4oIklQdjYgbm90IHN1cHBvcnRlZCBmb3IgaW50ZXJmYWNlICVzLlxuIgorCQkJICAgIlJvdXRpbmcgc3RhdHVzIG5vIGNoYW5nZWQuXG4iLAorCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0dXJuIHFldGhfbDNfZGV2X3JvdXRlX3N0b3JlKGNhcmQsICZjYXJkLT5vcHRpb25zLnJvdXRlNiwKKwkJCQlRRVRIX1BST1RfSVBWNiwgYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyb3V0ZTYsIDA2NDQsIHFldGhfbDNfZGV2X3JvdXRlNl9zaG93LAorCQkJcWV0aF9sM19kZXZfcm91dGU2X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfZmFrZV9icm9hZGNhc3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgY2FyZC0+b3B0aW9ucy5mYWtlX2Jyb2FkY2FzdD8gMTowKTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfZmFrZV9icm9hZGNhc3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnRtcDsKKwlpbnQgaTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCisJCXJldHVybiAtRVBFUk07CisKKwlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7CisJaWYgKChpID09IDApIHx8IChpID09IDEpKQorCQljYXJkLT5vcHRpb25zLmZha2VfYnJvYWRjYXN0ID0gaTsKKwllbHNlIHsKKwkJUFJJTlRfV0FSTigiZmFrZV9icm9hZGNhc3Q6IHdyaXRlIDAgb3IgMSB0byB0aGlzIGZpbGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGZha2VfYnJvYWRjYXN0LCAwNjQ0LCBxZXRoX2wzX2Rldl9mYWtlX2Jyb2FkY2FzdF9zaG93LAorCQkgICBxZXRoX2wzX2Rldl9mYWtlX2Jyb2FkY2FzdF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2Jyb2FkY2FzdF9tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9IU1RSKSB8fAorCSAgICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSkpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm4vYVxuIik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGNhcmQtPm9wdGlvbnMuYnJvYWRjYXN0X21vZGUgPT0KKwkJCQkgICAgIFFFVEhfVFJfQlJPQURDQVNUX0FMTFJJTkdTKT8KKwkJICAgICAgICJhbGwgcmluZ3MiOiJsb2NhbCIpOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9icm9hZGNhc3RfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqdG1wOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9IU1RSKSB8fAorCSAgICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSkpIHsKKwkJUFJJTlRfV0FSTigiRGV2aWNlIGlzIG5vdCBhIHRva2VucmluZyBkZXZpY2UhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKKworCWlmICghc3RyY21wKHRtcCwgImxvY2FsIikpIHsKKwkJY2FyZC0+b3B0aW9ucy5icm9hZGNhc3RfbW9kZSA9IFFFVEhfVFJfQlJPQURDQVNUX0xPQ0FMOworCQlyZXR1cm4gY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgImFsbF9yaW5ncyIpKSB7CisJCWNhcmQtPm9wdGlvbnMuYnJvYWRjYXN0X21vZGUgPSBRRVRIX1RSX0JST0FEQ0FTVF9BTExSSU5HUzsKKwkJcmV0dXJuIGNvdW50OworCX0gZWxzZSB7CisJCVBSSU5UX1dBUk4oImJyb2FkY2FzdF9tb2RlOiBpbnZhbGlkIG1vZGUgJXMhXG4iLAorCQkJICAgdG1wKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJyb2FkY2FzdF9tb2RlLCAwNjQ0LCBxZXRoX2wzX2Rldl9icm9hZGNhc3RfbW9kZV9zaG93LAorCQkgICBxZXRoX2wzX2Rldl9icm9hZGNhc3RfbW9kZV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2Nhbm9uaWNhbF9tYWNhZGRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9IU1RSKSB8fAorCSAgICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSkpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm4vYVxuIik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgKGNhcmQtPm9wdGlvbnMubWFjYWRkcl9tb2RlID09CisJCQkJICAgICBRRVRIX1RSX01BQ0FERFJfQ0FOT05JQ0FMKT8gMTowKTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfY2Fub25pY2FsX21hY2FkZHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnRtcDsKKwlpbnQgaTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoISgoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfSFNUUikgfHwKKwkgICAgICAoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfTEFORV9UUikpKSB7CisJCVBSSU5UX1dBUk4oIkRldmljZSBpcyBub3QgYSB0b2tlbnJpbmcgZGV2aWNlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKKwlpZiAoKGkgPT0gMCkgfHwgKGkgPT0gMSkpCisJCWNhcmQtPm9wdGlvbnMubWFjYWRkcl9tb2RlID0gaT8KKwkJCVFFVEhfVFJfTUFDQUREUl9DQU5PTklDQUwgOgorCQkJUUVUSF9UUl9NQUNBRERSX05PTkNBTk9OSUNBTDsKKwllbHNlIHsKKwkJUFJJTlRfV0FSTigiY2Fub25pY2FsX21hY2FkZHI6IHdyaXRlIDAgb3IgMSB0byB0aGlzIGZpbGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNhbm9uaWNhbF9tYWNhZGRyLCAwNjQ0LCBxZXRoX2wzX2Rldl9jYW5vbmljYWxfbWFjYWRkcl9zaG93LAorCQkgICBxZXRoX2wzX2Rldl9jYW5vbmljYWxfbWFjYWRkcl9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2NoZWNrc3VtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMgY2hlY2tzdW1taW5nXG4iLAorCQkJcWV0aF9sM19nZXRfY2hlY2tzdW1fc3RyKGNhcmQpKTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfY2hlY2tzdW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnRtcDsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKKwkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCisJCXJldHVybiAtRVBFUk07CisKKwl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOworCWlmICghc3RyY21wKHRtcCwgInN3X2NoZWNrc3VtbWluZyIpKQorCQljYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPSBTV19DSEVDS1NVTU1JTkc7CisJZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJod19jaGVja3N1bW1pbmciKSkKKwkJY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gSFdfQ0hFQ0tTVU1NSU5HOworCWVsc2UgaWYgKCFzdHJjbXAodG1wLCAibm9fY2hlY2tzdW1taW5nIikpCisJCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IE5PX0NIRUNLU1VNTUlORzsKKwllbHNlIHsKKwkJUFJJTlRfV0FSTigiVW5rbm93biBjaGVja3N1bW1pbmcgdHlwZSAnJXMnXG4iLCB0bXApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY2hlY2tzdW1taW5nLCAwNjQ0LCBxZXRoX2wzX2Rldl9jaGVja3N1bV9zaG93LAorCQlxZXRoX2wzX2Rldl9jaGVja3N1bV9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpxZXRoX2wzX2RldmljZV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9yb3V0ZTQuYXR0ciwKKwkmZGV2X2F0dHJfcm91dGU2LmF0dHIsCisJJmRldl9hdHRyX2Zha2VfYnJvYWRjYXN0LmF0dHIsCisJJmRldl9hdHRyX2Jyb2FkY2FzdF9tb2RlLmF0dHIsCisJJmRldl9hdHRyX2Nhbm9uaWNhbF9tYWNhZGRyLmF0dHIsCisJJmRldl9hdHRyX2NoZWNrc3VtbWluZy5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBxZXRoX2wzX2RldmljZV9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHFldGhfbDNfZGV2aWNlX2F0dHJzLAorfTsKKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfaXBhdG9fZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPmlwYXRvLmVuYWJsZWQ/IDE6MCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2lwYXRvX2VuYWJsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqdG1wOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7CisJaWYgKCFzdHJjbXAodG1wLCAidG9nZ2xlIikpIHsKKwkJY2FyZC0+aXBhdG8uZW5hYmxlZCA9IChjYXJkLT5pcGF0by5lbmFibGVkKT8gMCA6IDE7CisJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjEiKSkgeworCQljYXJkLT5pcGF0by5lbmFibGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiMCIpKSB7CisJCWNhcmQtPmlwYXRvLmVuYWJsZWQgPSAwOworCX0gZWxzZSB7CisJCVBSSU5UX1dBUk4oImlwYXRvX2VuYWJsZTogd3JpdGUgMCwgMSBvciAndG9nZ2xlJyB0byAiCisJCQkgICAidGhpcyBmaWxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fZW5hYmxlLCBlbmFibGUsIDA2NDQsCisJCQlxZXRoX2wzX2Rldl9pcGF0b19lbmFibGVfc2hvdywKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2VuYWJsZV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2lwYXRvX2ludmVydDRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPmlwYXRvLmludmVydDQ/IDE6MCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2lwYXRvX2ludmVydDRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICp0bXA7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKKwlpZiAoIXN0cmNtcCh0bXAsICJ0b2dnbGUiKSkgeworCQljYXJkLT5pcGF0by5pbnZlcnQ0ID0gKGNhcmQtPmlwYXRvLmludmVydDQpPyAwIDogMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiMSIpKSB7CisJCWNhcmQtPmlwYXRvLmludmVydDQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICIwIikpIHsKKwkJY2FyZC0+aXBhdG8uaW52ZXJ0NCA9IDA7CisJfSBlbHNlIHsKKwkJUFJJTlRfV0FSTigiaXBhdG9faW52ZXJ0NDogd3JpdGUgMCwgMSBvciAndG9nZ2xlJyB0byAiCisJCQkgICAidGhpcyBmaWxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9faW52ZXJ0NCwgaW52ZXJ0NCwgMDY0NCwKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2ludmVydDRfc2hvdywKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2ludmVydDRfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9pcGF0b19hZGRfc2hvdyhjaGFyICpidWYsIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQllbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bykKK3sKKwlzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqaXBhdG9lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciBhZGRyX3N0cls0MF07CisJaW50IGVudHJ5X2xlbjsgLyogbGVuZ3RoIG9mIDEgZW50cnkgc3RyaW5nLCBkaWZmZXJzIGJldHdlZW4gdjQgYW5kIHY2ICovCisJaW50IGkgPSAwOworCisJZW50cnlfbGVuID0gKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KT8gMTIgOiA0MDsKKwkvKiBhZGQgc3RybGVuIGZvciAiLzxtYXNrPlxuIiAqLworCWVudHJ5X2xlbiArPSAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpPyA1IDogNjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXBhdG9lLCAmY2FyZC0+aXBhdG8uZW50cmllcywgZW50cnkpIHsKKwkJaWYgKGlwYXRvZS0+cHJvdG8gIT0gcHJvdG8pCisJCQljb250aW51ZTsKKwkJLyogU3RyaW5nIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuIFBBR0VfU0laRS4gU28gd2UgY2hlY2sgaWYKKwkJICogc3RyaW5nIGxlbmd0aCBnZXRzIG5lYXIgUEFHRV9TSVpFLiBUaGVuIHdlIGNhbiBzYXZlbHkgZGlzcGxheQorCQkgKiB0aGUgbmV4dCBJUHY2IGFkZHJlc3MgKHdvcnN0IGNhc2UsIGNvbXBhcmVkIHRvIElQdjQpICovCisJCWlmICgoUEFHRV9TSVpFIC0gaSkgPD0gZW50cnlfbGVuKQorCQkJYnJlYWs7CisJCXFldGhfbDNfaXBhZGRyX3RvX3N0cmluZyhwcm90bywgaXBhdG9lLT5hZGRyLCBhZGRyX3N0cik7CisJCWkgKz0gc25wcmludGYoYnVmICsgaSwgUEFHRV9TSVpFIC0gaSwKKwkJCSAgICAgICIlcy8laVxuIiwgYWRkcl9zdHIsIGlwYXRvZS0+bWFza19iaXRzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCWkgKz0gc25wcmludGYoYnVmICsgaSwgUEFHRV9TSVpFIC0gaSwgIlxuIik7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfaXBhdG9fYWRkNF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcWV0aF9sM19kZXZfaXBhdG9fYWRkX3Nob3coYnVmLCBjYXJkLCBRRVRIX1BST1RfSVBWNCk7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19wYXJzZV9pcGF0b2UoY29uc3QgY2hhciAqYnVmLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKKwkJICB1OCAqYWRkciwgaW50ICptYXNrX2JpdHMpCit7CisJY29uc3QgY2hhciAqc3RhcnQsICplbmQ7CisJY2hhciAqdG1wOworCWNoYXIgYnVmZmVyWzQwXSA9IHswLCB9OworCisJc3RhcnQgPSBidWY7CisJLyogZ2V0IGFkZHJlc3Mgc3RyaW5nICovCisJZW5kID0gc3RyY2hyKHN0YXJ0LCAnLycpOworCWlmICghZW5kIHx8IChlbmQgLSBzdGFydCA+PSA0MCkpIHsKKwkJUFJJTlRfV0FSTigiSW52YWxpZCBmb3JtYXQgZm9yIGlwYXRvX2FkZHgvZGVseC4gIgorCQkJICAgIlVzZSA8aXAgYWRkcj4vPG1hc2sgYml0cz5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3RybmNweShidWZmZXIsIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJaWYgKHFldGhfbDNfc3RyaW5nX3RvX2lwYWRkcihidWZmZXIsIHByb3RvLCBhZGRyKSkgeworCQlQUklOVF9XQVJOKCJJbnZhbGlkIElQIGFkZHJlc3MgZm9ybWF0IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzdGFydCA9IGVuZCArIDE7CisJKm1hc2tfYml0cyA9IHNpbXBsZV9zdHJ0b3VsKHN0YXJ0LCAmdG1wLCAxMCk7CisJaWYgKCFzdHJsZW4oc3RhcnQpIHx8CisJICAgICh0bXAgPT0gc3RhcnQpIHx8CisJICAgICgqbWFza19iaXRzID4gKChwcm90byA9PSBRRVRIX1BST1RfSVBWNCkgPyAzMiA6IDEyOCkpKSB7CisJCVBSSU5UX1dBUk4oIkludmFsaWQgbWFzayBiaXRzIGZvciBpcGF0b19hZGR4L2RlbHggIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfaXBhdG9fYWRkX3N0b3JlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvKQoreworCXN0cnVjdCBxZXRoX2lwYXRvX2VudHJ5ICppcGF0b2U7CisJdTggYWRkclsxNl07CisJaW50IG1hc2tfYml0czsKKwlpbnQgcmM7CisKKwlyYyA9IHFldGhfbDNfcGFyc2VfaXBhdG9lKGJ1ZiwgcHJvdG8sIGFkZHIsICZtYXNrX2JpdHMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaXBhdG9lID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfaXBhdG9fZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlwYXRvZSkgeworCQlQUklOVF9XQVJOKCJObyBtZW1vcnkgdG8gYWxsb2NhdGUgaXBhdG8gZW50cnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaXBhdG9lLT5wcm90byA9IHByb3RvOworCW1lbWNweShpcGF0b2UtPmFkZHIsIGFkZHIsIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCk/IDQ6MTYpOworCWlwYXRvZS0+bWFza19iaXRzID0gbWFza19iaXRzOworCisJcmMgPSBxZXRoX2wzX2FkZF9pcGF0b19lbnRyeShjYXJkLCBpcGF0b2UpOworCWlmIChyYykgeworCQlrZnJlZShpcGF0b2UpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9pcGF0b19hZGQ0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcWV0aF9sM19kZXZfaXBhdG9fYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fYWRkNCwgYWRkNCwgMDY0NCwKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2FkZDRfc2hvdywKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2FkZDRfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9pcGF0b19kZWxfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8pCit7CisJdTggYWRkclsxNl07CisJaW50IG1hc2tfYml0czsKKwlpbnQgcmM7CisKKwlyYyA9IHFldGhfbDNfcGFyc2VfaXBhdG9lKGJ1ZiwgcHJvdG8sIGFkZHIsICZtYXNrX2JpdHMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcWV0aF9sM19kZWxfaXBhdG9fZW50cnkoY2FyZCwgcHJvdG8sIGFkZHIsIG1hc2tfYml0cyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2lwYXRvX2RlbDRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBxZXRoX2wzX2Rldl9pcGF0b19kZWxfc3RvcmUoYnVmLCBjb3VudCwgY2FyZCwgUUVUSF9QUk9UX0lQVjQpOworfQorCitzdGF0aWMgUUVUSF9ERVZJQ0VfQVRUUihpcGF0b19kZWw0LCBkZWw0LCAwMjAwLCBOVUxMLAorCQkJcWV0aF9sM19kZXZfaXBhdG9fZGVsNF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2lwYXRvX2ludmVydDZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5pcGF0by5pbnZlcnQ2PyAxOjApOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9pcGF0b19pbnZlcnQ2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICp0bXA7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKKwlpZiAoIXN0cmNtcCh0bXAsICJ0b2dnbGUiKSkgeworCQljYXJkLT5pcGF0by5pbnZlcnQ2ID0gKGNhcmQtPmlwYXRvLmludmVydDYpPyAwIDogMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiMSIpKSB7CisJCWNhcmQtPmlwYXRvLmludmVydDYgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICIwIikpIHsKKwkJY2FyZC0+aXBhdG8uaW52ZXJ0NiA9IDA7CisJfSBlbHNlIHsKKwkJUFJJTlRfV0FSTigiaXBhdG9faW52ZXJ0Njogd3JpdGUgMCwgMSBvciAndG9nZ2xlJyB0byAiCisJCQkgICAidGhpcyBmaWxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9faW52ZXJ0NiwgaW52ZXJ0NiwgMDY0NCwKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2ludmVydDZfc2hvdywKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2ludmVydDZfc3RvcmUpOworCisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2lwYXRvX2FkZDZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X2lwYXRvX2FkZF9zaG93KGJ1ZiwgY2FyZCwgUUVUSF9QUk9UX0lQVjYpOworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9pcGF0b19hZGQ2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcWV0aF9sM19kZXZfaXBhdG9fYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fYWRkNiwgYWRkNiwgMDY0NCwKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2FkZDZfc2hvdywKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2FkZDZfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9pcGF0b19kZWw2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcWV0aF9sM19kZXZfaXBhdG9fZGVsX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fZGVsNiwgZGVsNiwgMDIwMCwgTlVMTCwKKwkJCXFldGhfbDNfZGV2X2lwYXRvX2RlbDZfc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcWV0aF9pcGF0b19kZXZpY2VfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfaXBhdG9fZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX2lwYXRvX2ludmVydDQuYXR0ciwKKwkmZGV2X2F0dHJfaXBhdG9fYWRkNC5hdHRyLAorCSZkZXZfYXR0cl9pcGF0b19kZWw0LmF0dHIsCisJJmRldl9hdHRyX2lwYXRvX2ludmVydDYuYXR0ciwKKwkmZGV2X2F0dHJfaXBhdG9fYWRkNi5hdHRyLAorCSZkZXZfYXR0cl9pcGF0b19kZWw2LmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHFldGhfZGV2aWNlX2lwYXRvX2dyb3VwID0geworCS5uYW1lID0gImlwYV90YWtlb3ZlciIsCisJLmF0dHJzID0gcWV0aF9pcGF0b19kZXZpY2VfYXR0cnMsCit9OworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl92aXBhX2FkZF9zaG93KGNoYXIgKmJ1Ziwgc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvKQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBhZGRyOworCWNoYXIgYWRkcl9zdHJbNDBdOworCWludCBlbnRyeV9sZW47IC8qIGxlbmd0aCBvZiAxIGVudHJ5IHN0cmluZywgZGlmZmVycyBiZXR3ZWVuIHY0IGFuZCB2NiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGkgPSAwOworCisJZW50cnlfbGVuID0gKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KT8gMTIgOiA0MDsKKwllbnRyeV9sZW4gKz0gMjsgLyogXG4gKyB0ZXJtaW5hdG9yICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwYWRkciwgJmNhcmQtPmlwX2xpc3QsIGVudHJ5KSB7CisJCWlmIChpcGFkZHItPnByb3RvICE9IHByb3RvKQorCQkJY29udGludWU7CisJCWlmIChpcGFkZHItPnR5cGUgIT0gUUVUSF9JUF9UWVBFX1ZJUEEpCisJCQljb250aW51ZTsKKwkJLyogU3RyaW5nIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuIFBBR0VfU0laRS4gU28gd2UgY2hlY2sgaWYKKwkJICogc3RyaW5nIGxlbmd0aCBnZXRzIG5lYXIgUEFHRV9TSVpFLiBUaGVuIHdlIGNhbiBzYXZlbHkgZGlzcGxheQorCQkgKiB0aGUgbmV4dCBJUHY2IGFkZHJlc3MgKHdvcnN0IGNhc2UsIGNvbXBhcmVkIHRvIElQdjQpICovCisJCWlmICgoUEFHRV9TSVpFIC0gaSkgPD0gZW50cnlfbGVuKQorCQkJYnJlYWs7CisJCXFldGhfbDNfaXBhZGRyX3RvX3N0cmluZyhwcm90bywgKGNvbnN0IHU4ICopJmlwYWRkci0+dSwKKwkJCWFkZHJfc3RyKTsKKwkJaSArPSBzbnByaW50ZihidWYgKyBpLCBQQUdFX1NJWkUgLSBpLCAiJXNcbiIsIGFkZHJfc3RyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCWkgKz0gc25wcmludGYoYnVmICsgaSwgUEFHRV9TSVpFIC0gaSwgIlxuIik7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfdmlwYV9hZGQ0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3ZpcGFfYWRkX3Nob3coYnVmLCBjYXJkLCBRRVRIX1BST1RfSVBWNCk7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19wYXJzZV92aXBhZShjb25zdCBjaGFyICpidWYsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLAorCQkgdTggKmFkZHIpCit7CisJaWYgKHFldGhfbDNfc3RyaW5nX3RvX2lwYWRkcihidWYsIHByb3RvLCBhZGRyKSkgeworCQlQUklOVF9XQVJOKCJJbnZhbGlkIElQIGFkZHJlc3MgZm9ybWF0IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfdmlwYV9hZGRfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bykKK3sKKwl1OCBhZGRyWzE2XSA9IHswLCB9OworCWludCByYzsKKworCXJjID0gcWV0aF9sM19wYXJzZV92aXBhZShidWYsIHByb3RvLCBhZGRyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gcWV0aF9sM19hZGRfdmlwYShjYXJkLCBwcm90bywgYWRkcik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3ZpcGFfYWRkNF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3ZpcGFfYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIodmlwYV9hZGQ0LCBhZGQ0LCAwNjQ0LAorCQkJcWV0aF9sM19kZXZfdmlwYV9hZGQ0X3Nob3csCisJCQlxZXRoX2wzX2Rldl92aXBhX2FkZDRfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl92aXBhX2RlbF9zdG9yZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSBzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bykKK3sKKwl1OCBhZGRyWzE2XTsKKwlpbnQgcmM7CisKKwlyYyA9IHFldGhfbDNfcGFyc2VfdmlwYWUoYnVmLCBwcm90bywgYWRkcik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlxZXRoX2wzX2RlbF92aXBhKGNhcmQsIHByb3RvLCBhZGRyKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfdmlwYV9kZWw0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcWV0aF9sM19kZXZfdmlwYV9kZWxfc3RvcmUoYnVmLCBjb3VudCwgY2FyZCwgUUVUSF9QUk9UX0lQVjQpOworfQorCitzdGF0aWMgUUVUSF9ERVZJQ0VfQVRUUih2aXBhX2RlbDQsIGRlbDQsIDAyMDAsIE5VTEwsCisJCQlxZXRoX2wzX2Rldl92aXBhX2RlbDRfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl92aXBhX2FkZDZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3ZpcGFfYWRkX3Nob3coYnVmLCBjYXJkLCBRRVRIX1BST1RfSVBWNik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3ZpcGFfYWRkNl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3ZpcGFfYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIodmlwYV9hZGQ2LCBhZGQ2LCAwNjQ0LAorCQkJcWV0aF9sM19kZXZfdmlwYV9hZGQ2X3Nob3csCisJCQlxZXRoX2wzX2Rldl92aXBhX2FkZDZfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl92aXBhX2RlbDZfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBxZXRoX2wzX2Rldl92aXBhX2RlbF9zdG9yZShidWYsIGNvdW50LCBjYXJkLCBRRVRIX1BST1RfSVBWNik7Cit9CisKK3N0YXRpYyBRRVRIX0RFVklDRV9BVFRSKHZpcGFfZGVsNiwgZGVsNiwgMDIwMCwgTlVMTCwKKwkJCXFldGhfbDNfZGV2X3ZpcGFfZGVsNl9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpxZXRoX3ZpcGFfZGV2aWNlX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3ZpcGFfYWRkNC5hdHRyLAorCSZkZXZfYXR0cl92aXBhX2RlbDQuYXR0ciwKKwkmZGV2X2F0dHJfdmlwYV9hZGQ2LmF0dHIsCisJJmRldl9hdHRyX3ZpcGFfZGVsNi5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBxZXRoX2RldmljZV92aXBhX2dyb3VwID0geworCS5uYW1lID0gInZpcGEiLAorCS5hdHRycyA9IHFldGhfdmlwYV9kZXZpY2VfYXR0cnMsCit9OworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yeGlwX2FkZF9zaG93KGNoYXIgKmJ1Ziwgc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJICAgICAgIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvKQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBhZGRyOworCWNoYXIgYWRkcl9zdHJbNDBdOworCWludCBlbnRyeV9sZW47IC8qIGxlbmd0aCBvZiAxIGVudHJ5IHN0cmluZywgZGlmZmVycyBiZXR3ZWVuIHY0IGFuZCB2NiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGkgPSAwOworCisJZW50cnlfbGVuID0gKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KT8gMTIgOiA0MDsKKwllbnRyeV9sZW4gKz0gMjsgLyogXG4gKyB0ZXJtaW5hdG9yICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlwYWRkciwgJmNhcmQtPmlwX2xpc3QsIGVudHJ5KSB7CisJCWlmIChpcGFkZHItPnByb3RvICE9IHByb3RvKQorCQkJY29udGludWU7CisJCWlmIChpcGFkZHItPnR5cGUgIT0gUUVUSF9JUF9UWVBFX1JYSVApCisJCQljb250aW51ZTsKKwkJLyogU3RyaW5nIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuIFBBR0VfU0laRS4gU28gd2UgY2hlY2sgaWYKKwkJICogc3RyaW5nIGxlbmd0aCBnZXRzIG5lYXIgUEFHRV9TSVpFLiBUaGVuIHdlIGNhbiBzYXZlbHkgZGlzcGxheQorCQkgKiB0aGUgbmV4dCBJUHY2IGFkZHJlc3MgKHdvcnN0IGNhc2UsIGNvbXBhcmVkIHRvIElQdjQpICovCisJCWlmICgoUEFHRV9TSVpFIC0gaSkgPD0gZW50cnlfbGVuKQorCQkJYnJlYWs7CisJCXFldGhfbDNfaXBhZGRyX3RvX3N0cmluZyhwcm90bywgKGNvbnN0IHU4ICopJmlwYWRkci0+dSwKKwkJCWFkZHJfc3RyKTsKKwkJaSArPSBzbnByaW50ZihidWYgKyBpLCBQQUdFX1NJWkUgLSBpLCAiJXNcbiIsIGFkZHJfc3RyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOworCWkgKz0gc25wcmludGYoYnVmICsgaSwgUEFHRV9TSVpFIC0gaSwgIlxuIik7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfcnhpcF9hZGQ0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3J4aXBfYWRkX3Nob3coYnVmLCBjYXJkLCBRRVRIX1BST1RfSVBWNCk7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9sM19wYXJzZV9yeGlwZShjb25zdCBjaGFyICpidWYsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLAorCQkgdTggKmFkZHIpCit7CisJaWYgKHFldGhfbDNfc3RyaW5nX3RvX2lwYWRkcihidWYsIHByb3RvLCBhZGRyKSkgeworCQlQUklOVF9XQVJOKCJJbnZhbGlkIElQIGFkZHJlc3MgZm9ybWF0IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfcnhpcF9hZGRfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bykKK3sKKwl1OCBhZGRyWzE2XSA9IHswLCB9OworCWludCByYzsKKworCXJjID0gcWV0aF9sM19wYXJzZV9yeGlwZShidWYsIHByb3RvLCBhZGRyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gcWV0aF9sM19hZGRfcnhpcChjYXJkLCBwcm90bywgYWRkcik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3J4aXBfYWRkNF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3J4aXBfYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIocnhpcF9hZGQ0LCBhZGQ0LCAwNjQ0LAorCQkJcWV0aF9sM19kZXZfcnhpcF9hZGQ0X3Nob3csCisJCQlxZXRoX2wzX2Rldl9yeGlwX2FkZDRfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yeGlwX2RlbF9zdG9yZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvKQoreworCXU4IGFkZHJbMTZdOworCWludCByYzsKKworCXJjID0gcWV0aF9sM19wYXJzZV9yeGlwZShidWYsIHByb3RvLCBhZGRyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXFldGhfbDNfZGVsX3J4aXAoY2FyZCwgcHJvdG8sIGFkZHIpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yeGlwX2RlbDRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBxZXRoX2wzX2Rldl9yeGlwX2RlbF9zdG9yZShidWYsIGNvdW50LCBjYXJkLCBRRVRIX1BST1RfSVBWNCk7Cit9CisKK3N0YXRpYyBRRVRIX0RFVklDRV9BVFRSKHJ4aXBfZGVsNCwgZGVsNCwgMDIwMCwgTlVMTCwKKwkJCXFldGhfbDNfZGV2X3J4aXBfZGVsNF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3J4aXBfYWRkNl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3J4aXBfYWRkX3Nob3coYnVmLCBjYXJkLCBRRVRIX1BST1RfSVBWNik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3J4aXBfYWRkNl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHFldGhfbDNfZGV2X3J4aXBfYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKK30KKworc3RhdGljIFFFVEhfREVWSUNFX0FUVFIocnhpcF9hZGQ2LCBhZGQ2LCAwNjQ0LAorCQkJcWV0aF9sM19kZXZfcnhpcF9hZGQ2X3Nob3csCisJCQlxZXRoX2wzX2Rldl9yeGlwX2FkZDZfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yeGlwX2RlbDZfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBxZXRoX2wzX2Rldl9yeGlwX2RlbF9zdG9yZShidWYsIGNvdW50LCBjYXJkLCBRRVRIX1BST1RfSVBWNik7Cit9CisKK3N0YXRpYyBRRVRIX0RFVklDRV9BVFRSKHJ4aXBfZGVsNiwgZGVsNiwgMDIwMCwgTlVMTCwKKwkJCXFldGhfbDNfZGV2X3J4aXBfZGVsNl9zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpxZXRoX3J4aXBfZGV2aWNlX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3J4aXBfYWRkNC5hdHRyLAorCSZkZXZfYXR0cl9yeGlwX2RlbDQuYXR0ciwKKwkmZGV2X2F0dHJfcnhpcF9hZGQ2LmF0dHIsCisJJmRldl9hdHRyX3J4aXBfZGVsNi5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBxZXRoX2RldmljZV9yeGlwX2dyb3VwID0geworCS5uYW1lID0gInJ4aXAiLAorCS5hdHRycyA9IHFldGhfcnhpcF9kZXZpY2VfYXR0cnMsCit9OworCitpbnQgcWV0aF9sM19jcmVhdGVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfbDNfZGV2aWNlX2F0dHJfZ3JvdXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2lwYXRvX2dyb3VwKTsKKwlpZiAocmV0KSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9sM19kZXZpY2VfYXR0cl9ncm91cCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV92aXBhX2dyb3VwKTsKKwlpZiAocmV0KSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9sM19kZXZpY2VfYXR0cl9ncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfaXBhdG9fZ3JvdXApOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfcnhpcF9ncm91cCk7CisJaWYgKHJldCkgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfbDNfZGV2aWNlX2F0dHJfZ3JvdXApOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2lwYXRvX2dyb3VwKTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV92aXBhX2dyb3VwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcWV0aF9sM19yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9sM19kZXZpY2VfYXR0cl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9pcGF0b19ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV92aXBhX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3J4aXBfZ3JvdXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNjA2Y2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDg5NTYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKLSAqCi0gKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAotICoKLSAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCi0gKgotICogICAgQXV0aG9yKHMpOiBPcmlnaW5hbCBDb2RlIHdyaXR0ZW4gYnkKLSAqCQkJICBVdHogQmFjaGVyICh1dHouYmFjaGVyQGRlLmlibS5jb20pCi0gKgkJIFJld3JpdHRlbiBieQotICoJCQkgIEZyYW5rIFBhdmxpYyAoZnBhdmxpY0BkZS5pYm0uY29tKSBhbmQKLSAqCQkgCSAgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2lnbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0KLSNpbmNsdWRlIDxuZXQvYXJwLmg+Ci0jaW5jbHVkZSA8bmV0L2lwLmg+Ci0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZWJjZGljLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3FldGguaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vczM5MF9yZGV2Lmg+Ci0KLSNpbmNsdWRlICJxZXRoLmgiCi0jaW5jbHVkZSAicWV0aF9tcGMuaCIKLSNpbmNsdWRlICJxZXRoX2ZzLmgiCi0jaW5jbHVkZSAicWV0aF9lZGRwLmgiCi0jaW5jbHVkZSAicWV0aF90c28uaCIKLQotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSAicWV0aCBTLzM5MCBPU0EtRXhwcmVzcyBkcml2ZXIiOwotCi0vKioKLSAqIERlYnVnIEZhY2lsaXR5IFN0dWZmCi0gKi8KLXN0YXRpYyBkZWJ1Z19pbmZvX3QgKnFldGhfZGJmX3NldHVwID0gTlVMTDsKLXN0YXRpYyBkZWJ1Z19pbmZvX3QgKnFldGhfZGJmX2RhdGEgPSBOVUxMOwotc3RhdGljIGRlYnVnX2luZm9fdCAqcWV0aF9kYmZfbWlzYyA9IE5VTEw7Ci1zdGF0aWMgZGVidWdfaW5mb190ICpxZXRoX2RiZl9jb250cm9sID0gTlVMTDsKLWRlYnVnX2luZm9fdCAqcWV0aF9kYmZfdHJhY2UgPSBOVUxMOwotc3RhdGljIGRlYnVnX2luZm9fdCAqcWV0aF9kYmZfc2Vuc2UgPSBOVUxMOwotc3RhdGljIGRlYnVnX2luZm9fdCAqcWV0aF9kYmZfcWVyciA9IE5VTEw7Ci0KLURFRklORV9QRVJfQ1BVKGNoYXJbMjU2XSwgcWV0aF9kYmZfdHh0X2J1Zik7Ci0KLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcWRpb19vdXRfc2tiX3F1ZXVlX2tleTsKLQotLyoqCi0gKiBzb21lIG1vcmUgZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGtub3duX2RldmljZXNbXVsxMF0gPSBRRVRIX01PREVMTElTVF9BUlJBWTsKLQotLyogbGlzdCBvZiBvdXIgY2FyZHMgKi8KLXN0cnVjdCBxZXRoX2NhcmRfbGlzdF9zdHJ1Y3QgcWV0aF9jYXJkX2xpc3Q7Ci0vKnByb2Nlc3MgbGlzdCB3YW50IHRvIGJlIG5vdGlmaWVkKi8KLXNwaW5sb2NrX3QgcWV0aF9ub3RpZnlfbG9jazsKLXN0cnVjdCBsaXN0X2hlYWQgcWV0aF9ub3RpZnlfbGlzdDsKLQotc3RhdGljIHZvaWQgcWV0aF9zZW5kX2NvbnRyb2xfZGF0YV9jYihzdHJ1Y3QgcWV0aF9jaGFubmVsICosCi0JCQkJICAgICAgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKTsKLQotLyoqCi0gKiBoZXJlIHdlIGdvIHdpdGggZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KLSAqLwotc3RhdGljIHZvaWQKLXFldGhfaW5pdF9xZGlvX2luZm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCk7Ci0KLXN0YXRpYyBpbnQKLXFldGhfaW5pdF9xZGlvX3F1ZXVlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKTsKLQotc3RhdGljIGludAotcWV0aF9hbGxvY19xZGlvX2J1ZmZlcnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCk7Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2ZyZWVfcWRpb19idWZmZXJzKHN0cnVjdCBxZXRoX2NhcmQgKik7Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX3FkaW9fYnVmZmVycyhzdHJ1Y3QgcWV0aF9jYXJkICopOwotCi1zdGF0aWMgdm9pZAotcWV0aF9jbGVhcl9pcF9saXN0KHN0cnVjdCBxZXRoX2NhcmQgKiwgaW50LCBpbnQpOwotCi1zdGF0aWMgdm9pZAotcWV0aF9jbGVhcl9pcGFjbWRfbGlzdChzdHJ1Y3QgcWV0aF9jYXJkICopOwotCi1zdGF0aWMgaW50Ci1xZXRoX3FkaW9fY2xlYXJfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICosIGludCk7Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX3dvcmtpbmdfcG9vbF9saXN0KHN0cnVjdCBxZXRoX2NhcmQgKik7Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX2NtZF9idWZmZXJzKHN0cnVjdCBxZXRoX2NoYW5uZWwgKik7Ci0KLXN0YXRpYyBpbnQKLXFldGhfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLQotc3RhdGljIHZvaWQKLXFldGhfY2xlYXJfaXBhdG9fbGlzdChzdHJ1Y3QgcWV0aF9jYXJkICopOwotCi1zdGF0aWMgaW50Ci1xZXRoX2lzX2FkZHJfY292ZXJlZF9ieV9pcGF0byhzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2lwYWRkciAqKTsKLQotc3RhdGljIHZvaWQKLXFldGhfaXJxX3Rhc2tsZXQodW5zaWduZWQgbG9uZyk7Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2V0X29ubGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOwotCi1zdGF0aWMgaW50Ci1fX3FldGhfc2V0X29ubGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2LCBpbnQgcmVjb3ZlcnlfbW9kZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9pcGFkZHIgKgotcWV0aF9nZXRfYWRkcl9idWZmZXIoZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMpOwotCi1zdGF0aWMgdm9pZAotcWV0aF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3NldGFkcF9wcm9taXNjX21vZGUoc3RydWN0IHFldGhfY2FyZCAqKTsKLQotc3RhdGljIGludAotcWV0aF9oYXJkX2hlYWRlcl9wYXJzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyICpoYWRkcik7Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX25vdGlmeV9wcm9jZXNzZXModm9pZCkKLXsKLQkvKm5vdGlmeSBhbGwgIHJlZ2lzdGVyZWQgcHJvY2Vzc2VzICovCi0Jc3RydWN0IHFldGhfbm90aWZ5X2xpc3Rfc3RydWN0ICpuX2VudHJ5OwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJwcm9jbm90aSIpOwotCXNwaW5fbG9jaygmcWV0aF9ub3RpZnlfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShuX2VudHJ5LCAmcWV0aF9ub3RpZnlfbGlzdCwgbGlzdCkgewotCQlzZW5kX3NpZyhuX2VudHJ5LT5zaWdudW0sIG5fZW50cnktPnRhc2ssIDEpOwotCX0KLQlzcGluX3VubG9jaygmcWV0aF9ub3RpZnlfbG9jayk7Ci0KLX0KLWludAotcWV0aF9ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlzdHJ1Y3QgcWV0aF9ub3RpZnlfbGlzdF9zdHJ1Y3QgKm5fZW50cnksICp0bXA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAibm90dW5yZWciKTsKLQlzcGluX2xvY2soJnFldGhfbm90aWZ5X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuX2VudHJ5LCB0bXAsICZxZXRoX25vdGlmeV9saXN0LCBsaXN0KSB7Ci0JCWlmIChuX2VudHJ5LT50YXNrID09IHApIHsKLQkJCWxpc3RfZGVsKCZuX2VudHJ5LT5saXN0KTsKLQkJCWtmcmVlKG5fZW50cnkpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2soJnFldGhfbm90aWZ5X2xvY2spOwotCXJldHVybiAwOwotfQotaW50Ci1xZXRoX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNpZ251bSkKLXsKLQlzdHJ1Y3QgcWV0aF9ub3RpZnlfbGlzdF9zdHJ1Y3QgKm5fZW50cnk7Ci0KLQkvKmNoZWNrIGZpcnN0IGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzKi8KLQlzcGluX2xvY2soJnFldGhfbm90aWZ5X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobl9lbnRyeSwgJnFldGhfbm90aWZ5X2xpc3QsIGxpc3QpIHsKLQkJaWYgKG5fZW50cnktPnRhc2sgPT0gcCkgewotCQkJbl9lbnRyeS0+c2lnbnVtID0gc2lnbnVtOwotCQkJc3Bpbl91bmxvY2soJnFldGhfbm90aWZ5X2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJnFldGhfbm90aWZ5X2xvY2spOwotCi0Jbl9lbnRyeSA9IChzdHJ1Y3QgcWV0aF9ub3RpZnlfbGlzdF9zdHJ1Y3QgKikKLQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfbm90aWZ5X2xpc3Rfc3RydWN0KSxHRlBfS0VSTkVMKTsKLQlpZiAoIW5fZW50cnkpCi0JCXJldHVybiAtRU5PTUVNOwotCW5fZW50cnktPnRhc2sgPSBwOwotCW5fZW50cnktPnNpZ251bSA9IHNpZ251bTsKLQlzcGluX2xvY2soJnFldGhfbm90aWZ5X2xvY2spOwotCWxpc3RfYWRkKCZuX2VudHJ5LT5saXN0LCZxZXRoX25vdGlmeV9saXN0KTsKLQlzcGluX3VubG9jaygmcWV0aF9ub3RpZnlfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBmcmVlIGNoYW5uZWwgY29tbWFuZCBidWZmZXJzCi0gKi8KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFuX2NoYW5uZWwoc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlpbnQgY250OwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgImZyZWVjaCIpOwotCWZvciAoY250ID0gMDsgY250IDwgUUVUSF9DTURfQlVGRkVSX05POyBjbnQrKykKLQkJa2ZyZWUoY2hhbm5lbC0+aW9iW2NudF0uZGF0YSk7Ci19Ci0KLS8qKgotICogZnJlZSBjYXJkCi0gKi8KLXN0YXRpYyB2b2lkCi1xZXRoX2ZyZWVfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgImZyZWVjcmQiKTsKLQlRRVRIX0RCRl9IRVgoc2V0dXAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7Ci0JcWV0aF9jbGVhbl9jaGFubmVsKCZjYXJkLT5yZWFkKTsKLQlxZXRoX2NsZWFuX2NoYW5uZWwoJmNhcmQtPndyaXRlKTsKLQlpZiAoY2FyZC0+ZGV2KQotCQlmcmVlX25ldGRldihjYXJkLT5kZXYpOwotCXFldGhfY2xlYXJfaXBfbGlzdChjYXJkLCAwLCAwKTsKLQlxZXRoX2NsZWFyX2lwYXRvX2xpc3QoY2FyZCk7Ci0Ja2ZyZWUoY2FyZC0+aXBfdGJkX2xpc3QpOwotCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7Ci0Ja2ZyZWUoY2FyZCk7Ci19Ci0KLS8qKgotICogYWxsb2MgbWVtb3J5IGZvciBjb21tYW5kIGJ1ZmZlciBwZXIgY2hhbm5lbAotICovCi1zdGF0aWMgaW50Ci1xZXRoX3NldHVwX2NoYW5uZWwoc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlpbnQgY250OwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgInNldHVwY2giKTsKLQlmb3IgKGNudD0wOyBjbnQgPCBRRVRIX0NNRF9CVUZGRVJfTk87IGNudCsrKSB7Ci0JCWNoYW5uZWwtPmlvYltjbnRdLmRhdGEgPSAoY2hhciAqKQotCQkJa21hbGxvYyhRRVRIX0JVRlNJWkUsIEdGUF9ETUF8R0ZQX0tFUk5FTCk7Ci0JCWlmIChjaGFubmVsLT5pb2JbY250XS5kYXRhID09IE5VTEwpCi0JCQlicmVhazsKLQkJY2hhbm5lbC0+aW9iW2NudF0uc3RhdGUgPSBCVUZfU1RBVEVfRlJFRTsKLQkJY2hhbm5lbC0+aW9iW2NudF0uY2hhbm5lbCA9IGNoYW5uZWw7Ci0JCWNoYW5uZWwtPmlvYltjbnRdLmNhbGxiYWNrID0gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YV9jYjsKLQkJY2hhbm5lbC0+aW9iW2NudF0ucmMgPSAwOwotCX0KLQlpZiAoY250IDwgUUVUSF9DTURfQlVGRkVSX05PKSB7Ci0JCXdoaWxlIChjbnQtLSA+IDApCi0JCQlrZnJlZShjaGFubmVsLT5pb2JbY250XS5kYXRhKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWNoYW5uZWwtPmJ1Zl9ubyA9IDA7Ci0JY2hhbm5lbC0+aW9fYnVmX25vID0gMDsKLQlhdG9taWNfc2V0KCZjaGFubmVsLT5pcnFfcGVuZGluZywgMCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNoYW5uZWwtPmlvYl9sb2NrKTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoYW5uZWwtPndhaXRfcSk7Ci0JY2hhbm5lbC0+aXJxX3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjaGFubmVsOwotCWNoYW5uZWwtPmlycV90YXNrbGV0LmZ1bmMgPSBxZXRoX2lycV90YXNrbGV0OwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGFsbG9jIG1lbW9yeSBmb3IgY2FyZCBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHN0cnVjdCBxZXRoX2NhcmQgKgotcWV0aF9hbGxvY19jYXJkKHZvaWQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJhbGxvY2NyZCIpOwotCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9jYXJkKSwgR0ZQX0RNQXxHRlBfS0VSTkVMKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOwotCVFFVEhfREJGX0hFWChzZXR1cCwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKLQlpZiAocWV0aF9zZXR1cF9jaGFubmVsKCZjYXJkLT5yZWFkKSkgewotCQlrZnJlZShjYXJkKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmIChxZXRoX3NldHVwX2NoYW5uZWwoJmNhcmQtPndyaXRlKSkgewotCQlxZXRoX2NsZWFuX2NoYW5uZWwoJmNhcmQtPnJlYWQpOwotCQlrZnJlZShjYXJkKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBjYXJkOwotfQotCi1zdGF0aWMgbG9uZwotX19xZXRoX2NoZWNrX2lyYl9lcnJvcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAotCQkgICAgICAgc3RydWN0IGlyYiAqaXJiKQotewotCWlmICghSVNfRVJSKGlyYikpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChQVFJfRVJSKGlyYikpIHsKLQljYXNlIC1FSU86Ci0JCVBSSU5UX1dBUk4oImkvby1lcnJvciBvbiBkZXZpY2UgJXNcbiIsIGNkZXYtPmRldi5idXNfaWQpOwotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2tpcmJlcnIiKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIgIHJjJWQiLCAtRUlPKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRVRJTUVET1VUOgotCQlQUklOVF9XQVJOKCJ0aW1lb3V0IG9uIGRldmljZSAlc1xuIiwgY2Rldi0+ZGV2LmJ1c19pZCk7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJja2lyYmVyciIpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIiAgcmMlZCIsIC1FVElNRURPVVQpOwotCQlpZiAoaW50cGFybSA9PSBRRVRIX1JDRF9QQVJNKSB7Ci0JCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gQ0FSRF9GUk9NX0NERVYoY2Rldik7Ci0KLQkJCWlmIChjYXJkICYmIChjYXJkLT5kYXRhLmNjd2RldiA9PSBjZGV2KSkgewotCQkJCWNhcmQtPmRhdGEuc3RhdGUgPSBDSF9TVEFURV9ET1dOOwotCQkJCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigidW5rbm93biBlcnJvciAlbGQgb24gZGV2aWNlICVzXG4iLCBQVFJfRVJSKGlyYiksCi0JCQkgICBjZGV2LT5kZXYuYnVzX2lkKTsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImNraXJiZXJyIik7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICIgIHJjPz8/Iik7Ci0JfQotCXJldHVybiBQVFJfRVJSKGlyYik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZ2V0X3Byb2JsZW0oc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHN0cnVjdCBpcmIgKmlyYikKLXsKLQlpbnQgZHN0YXQsY3N0YXQ7Ci0JY2hhciAqc2Vuc2U7Ci0KLQlzZW5zZSA9IChjaGFyICopIGlyYi0+ZWN3OwotCWNzdGF0ID0gaXJiLT5zY3N3LmNzdGF0OwotCWRzdGF0ID0gaXJiLT5zY3N3LmRzdGF0OwotCi0JaWYgKGNzdGF0ICYgKFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEsgfCBTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8Ci0JCSAgICAgU0NITl9TVEFUX0NITl9EQVRBX0NISyB8IFNDSE5fU1RBVF9DSEFJTl9DSEVDSyB8Ci0JCSAgICAgU0NITl9TVEFUX1BST1RfQ0hFQ0sgfCBTQ0hOX1NUQVRfUFJPR19DSEVDSykpIHsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwyLCAiQ0dFTkNISyIpOwotCQlQUklOVF9XQVJOKCJjaGVjayBvbiBkZXZpY2UgJXMsIGRzdGF0PXgleCwgY3N0YXQ9eCV4ICIsCi0JCQkgICBjZGV2LT5kZXYuYnVzX2lkLCBkc3RhdCwgY3N0YXQpOwotCQlIRVhEVU1QMTYoV0FSTiwgImlyYjogIiwgaXJiKTsKLQkJSEVYRFVNUDE2KFdBUk4sICJpcmI6ICIsICgoY2hhciAqKSBpcmIpICsgMzIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7Ci0JCWlmIChzZW5zZVtTRU5TRV9SRVNFVFRJTkdfRVZFTlRfQllURV0gJgotCQkgICAgU0VOU0VfUkVTRVRUSU5HX0VWRU5UX0ZMQUcpIHsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsMiwiUkVWSU5EIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAoc2Vuc2VbU0VOU0VfQ09NTUFORF9SRUpFQ1RfQllURV0gJgotCQkgICAgU0VOU0VfQ09NTUFORF9SRUpFQ1RfRkxBRykgewotCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwyLCJDTURSRUppIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAoKHNlbnNlWzJdID09IDB4YWYpICYmIChzZW5zZVszXSA9PSAweGZlKSkgewotCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwyLCJBRkZFIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAoKCFzZW5zZVswXSkgJiYgKCFzZW5zZVsxXSkgJiYgKCFzZW5zZVsyXSkgJiYgKCFzZW5zZVszXSkpIHsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsMiwiWkVST1NFTiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwyLCJER0VOQ0hLIik7Ci0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IHFldGhfaXNzdWVfbmV4dF9yZWFkKHN0cnVjdCBxZXRoX2NhcmQgKik7Ci0KLS8qKgotICogaW50ZXJydXB0IGhhbmRsZXIKLSAqLwotc3RhdGljIHZvaWQKLXFldGhfaXJxKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBsb25nIGludHBhcm0sIHN0cnVjdCBpcmIgKmlyYikKLXsKLQlpbnQgcmM7Ci0JaW50IGNzdGF0LGRzdGF0OwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmJ1ZmZlcjsKLQlzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsOwotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDUsImlycSIpOwotCi0JaWYgKF9fcWV0aF9jaGVja19pcmJfZXJyb3IoY2RldiwgaW50cGFybSwgaXJiKSkKLQkJcmV0dXJuOwotCWNzdGF0ID0gaXJiLT5zY3N3LmNzdGF0OwotCWRzdGF0ID0gaXJiLT5zY3N3LmRzdGF0OwotCi0JY2FyZCA9IENBUkRfRlJPTV9DREVWKGNkZXYpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuOwotCi0JaWYgKGNhcmQtPnJlYWQuY2N3ZGV2ID09IGNkZXYpewotCQljaGFubmVsID0gJmNhcmQtPnJlYWQ7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsNSwicmVhZCIpOwotCX0gZWxzZSBpZiAoY2FyZC0+d3JpdGUuY2N3ZGV2ID09IGNkZXYpIHsKLQkJY2hhbm5lbCA9ICZjYXJkLT53cml0ZTsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSw1LCJ3cml0ZSIpOwotCX0gZWxzZSB7Ci0JCWNoYW5uZWwgPSAmY2FyZC0+ZGF0YTsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSw1LCJkYXRhIik7Ci0JfQotCWF0b21pY19zZXQoJmNoYW5uZWwtPmlycV9wZW5kaW5nLCAwKTsKLQotCWlmIChpcmItPnNjc3cuZmN0bCAmIChTQ1NXX0ZDVExfQ0xFQVJfRlVOQykpCi0JCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfU1RPUFBFRDsKLQotCWlmIChpcmItPnNjc3cuZmN0bCAmIChTQ1NXX0ZDVExfSEFMVF9GVU5DKSkKLQkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9IQUxURUQ7Ci0KLQkvKmxldCdzIHdha2UgdXAgaW1tZWRpYXRlbHkgb24gZGF0YSBjaGFubmVsKi8KLQlpZiAoKGNoYW5uZWwgPT0gJmNhcmQtPmRhdGEpICYmIChpbnRwYXJtICE9IDApICYmCi0JICAgIChpbnRwYXJtICE9IFFFVEhfUkNEX1BBUk0pKQotCQlnb3RvIG91dDsKLQotCWlmIChpbnRwYXJtID09IFFFVEhfQ0xFQVJfQ0hBTk5FTF9QQVJNKSB7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJjbHJjaHBhciIpOwotCQkvKiB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGlzIGZ1cnRoZXIgKi8KLQkJaW50cGFybSA9IDA7Ci0JfQotCWlmIChpbnRwYXJtID09IFFFVEhfSEFMVF9DSEFOTkVMX1BBUk0pIHsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImhsdGNocGFyIik7Ci0JCS8qIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoaXMgZnVydGhlciAqLwotCQlpbnRwYXJtID0gMDsKLQl9Ci0JaWYgKChkc3RhdCAmIERFVl9TVEFUX1VOSVRfRVhDRVApIHx8Ci0JICAgIChkc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHx8Ci0JICAgIChjc3RhdCkpIHsKLQkJaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKLQkJCS8qIFRPRE86IHdlIHNob3VsZCBtYWtlIHRoaXMgczM5MGRiZiAqLwotCQkJUFJJTlRfV0FSTigic2Vuc2UgZGF0YSBhdmFpbGFibGUgb24gY2hhbm5lbCAlcy5cbiIsCi0JCQkJICAgQ0hBTk5FTF9JRChjaGFubmVsKSk7Ci0JCQlQUklOVF9XQVJOKCIgY3N0YXQgMHglWFxuIGRzdGF0IDB4JVhcbiIsIGNzdGF0LCBkc3RhdCk7Ci0JCQlIRVhEVU1QMTYoV0FSTiwiaXJiOiAiLGlyYik7Ci0JCQlIRVhEVU1QMTYoV0FSTiwic2Vuc2UgZGF0YTogIixpcmItPmVjdyk7Ci0JCX0KLQkJaWYgKGludHBhcm0gPT0gUUVUSF9SQ0RfUEFSTSkgewotCQkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9ET1dOOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcmMgPSBxZXRoX2dldF9wcm9ibGVtKGNkZXYsaXJiKTsKLQkJaWYgKHJjKSB7Ci0JCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAoaW50cGFybSA9PSBRRVRIX1JDRF9QQVJNKSB7Ci0JCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfUkNEX0RPTkU7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAoaW50cGFybSkgewotCQlidWZmZXIgPSAoc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKSBfX3ZhKChhZGRyX3QpaW50cGFybSk7Ci0JCWJ1ZmZlci0+c3RhdGUgPSBCVUZfU1RBVEVfUFJPQ0VTU0VEOwotCX0KLQlpZiAoY2hhbm5lbCA9PSAmY2FyZC0+ZGF0YSkKLQkJcmV0dXJuOwotCi0JaWYgKGNoYW5uZWwgPT0gJmNhcmQtPnJlYWQgJiYKLQkgICAgY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfVVApCi0JCXFldGhfaXNzdWVfbmV4dF9yZWFkKGNhcmQpOwotCi0JcWV0aF9pcnFfdGFza2xldCgodW5zaWduZWQgbG9uZyljaGFubmVsKTsKLQlyZXR1cm47Ci1vdXQ6Ci0Jd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKLX0KLQotLyoqCi0gKiB0YXNrbGV0IGZ1bmN0aW9uIHNjaGVkdWxlZCBmcm9tIGlycSBoYW5kbGVyCi0gKi8KLXN0YXRpYyB2b2lkCi1xZXRoX2lycV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCXN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWw7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCV9fdTggaW5kZXg7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDUsImlycXRsZXQiKTsKLQljaGFubmVsID0gKHN0cnVjdCBxZXRoX2NoYW5uZWwgKikgZGF0YTsKLQlpb2IgPSBjaGFubmVsLT5pb2I7Ci0JaW5kZXggPSBjaGFubmVsLT5idWZfbm87Ci0JY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7Ci0Jd2hpbGUgKGlvYltpbmRleF0uc3RhdGUgPT0gQlVGX1NUQVRFX1BST0NFU1NFRCkgewotCQlpZiAoaW9iW2luZGV4XS5jYWxsYmFjayAhPU5VTEwpIHsKLQkJCWlvYltpbmRleF0uY2FsbGJhY2soY2hhbm5lbCxpb2IgKyBpbmRleCk7Ci0JCX0KLQkJaW5kZXggPSAoaW5kZXggKyAxKSAlIFFFVEhfQ01EX0JVRkZFUl9OTzsKLQl9Ci0JY2hhbm5lbC0+YnVmX25vID0gaW5kZXg7Ci0Jd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKLX0KLQotc3RhdGljIGludCBxZXRoX3N0b3BfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICosIGludCk7Ci0KLXN0YXRpYyBpbnQKLV9fcWV0aF9zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjZ2RldiwgaW50IHJlY292ZXJ5X21vZGUpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7Ci0JaW50IHJjID0gMCwgcmMyID0gMCwgcmMzID0gMDsKLQllbnVtIHFldGhfY2FyZF9zdGF0ZXMgcmVjb3Zlcl9mbGFnOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMywgInNldG9mZmwiKTsKLQlRRVRIX0RCRl9IRVgoc2V0dXAsIDMsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7Ci0KLQlpZiAoY2FyZC0+ZGV2ICYmIG5ldGlmX2NhcnJpZXJfb2soY2FyZC0+ZGV2KSkKLQkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKLQlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKLQlpZiAocWV0aF9zdG9wX2NhcmQoY2FyZCwgcmVjb3ZlcnlfbW9kZSkgPT0gLUVSRVNUQVJUU1lTKXsKLQkJUFJJTlRfV0FSTigiU3RvcHBpbmcgY2FyZCAlcyBpbnRlcnJ1cHRlZCBieSB1c2VyIVxuIiwKLQkJCSAgIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQl9Ci0JcmMgID0gY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX0RERVYoY2FyZCkpOwotCXJjMiA9IGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9XREVWKGNhcmQpKTsKLQlyYzMgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfUkRFVihjYXJkKSk7Ci0JaWYgKCFyYykKLQkJcmMgPSAocmMyKSA/IHJjMiA6IHJjMzsKLQlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiMWVyciVkIiwgcmMpOwotCWlmIChyZWNvdmVyX2ZsYWcgPT0gQ0FSRF9TVEFURV9VUCkKLQkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1JFQ09WRVI7Ci0JcWV0aF9ub3RpZnlfcHJvY2Vzc2VzKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYpCi17Ci0JcmV0dXJuICBfX3FldGhfc2V0X29mZmxpbmUoY2dkZXYsIDApOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3RocmVhZHNfcnVubmluZyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZHMpOwotCi0KLXN0YXRpYyB2b2lkCi1xZXRoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqY2dkZXYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDMsICJybWRldiIpOwotCVFFVEhfREJGX0hFWChzZXR1cCwgMywgJmNhcmQsIHNpemVvZih2b2lkICopKTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuOwotCi0Jd2FpdF9ldmVudChjYXJkLT53YWl0X3EsIHFldGhfdGhyZWFkc19ydW5uaW5nKGNhcmQsIDB4ZmZmZmZmZmYpID09IDApOwotCi0JaWYgKGNnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PTkxJTkUpewotCQljYXJkLT51c2VfaGFyZF9zdG9wID0gMTsKLQkJcWV0aF9zZXRfb2ZmbGluZShjZ2Rldik7Ci0JfQotCS8qIHJlbW92ZSBmb3JtIG91ciBpbnRlcm5hbCBsaXN0ICovCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZxZXRoX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnFldGhfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOwotCWlmIChjYXJkLT5kZXYpCi0JCXVucmVnaXN0ZXJfbmV0ZGV2KGNhcmQtPmRldik7Ci0JcWV0aF9yZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoJmNnZGV2LT5kZXYpOwotCXFldGhfZnJlZV9jYXJkKGNhcmQpOwotCWNnZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBOVUxMOwotCXB1dF9kZXZpY2UoJmNnZGV2LT5kZXYpOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3JlZ2lzdGVyX2FkZHJfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9pcGFkZHIgKik7Ci1zdGF0aWMgaW50Ci1xZXRoX2RlcmVnaXN0ZXJfYWRkcl9lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2lwYWRkciAqKTsKLQotLyoqCi0gKiBBZGQvcmVtb3ZlIGFkZHJlc3MgdG8vZnJvbSBjYXJkJ3MgaXAgbGlzdCwgaS5lLiB0cnkgdG8gYWRkIG9yIHJlbW92ZQotICogcmVmZXJlbmNlIHRvL2Zyb20gYW4gSVAgYWRkcmVzcyB0aGF0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBvbiB0aGUgY2FyZC4KLSAqIFJldHVybnM6Ci0gKiAJMCAgYWRkcmVzcyB3YXMgb24gY2FyZCBhbmQgaXRzIHJlZmVyZW5jZSBjb3VudCBoYXMgYmVlbiBhZGp1c3RlZCwKLSAqIAkgICBidXQgaXMgc3RpbGwgPiAwLCBzbyBub3RoaW5nIGhhcyB0byBiZSBkb25lCi0gKiAJICAgYWxzbyByZXR1cm5zIDAgaWYgY2FyZCB3YXMgbm90IG9uIGNhcmQgYW5kIHRoZSB0b2RvIHdhcyB0byBkZWxldGUKLSAqIAkgICB0aGUgYWRkcmVzcyAtPiB0aGVyZSBpcyBhbHNvIG5vdGhpbmcgdG8gYmUgZG9uZQotICogCTEgIGFkZHJlc3Mgd2FzIG5vdCBvbiBjYXJkIGFuZCB0aGUgdG9kbyBpcyB0byBhZGQgaXQgdG8gdGhlIGNhcmQncyBpcAotICogCSAgIGxpc3QKLSAqIAktMSBhZGRyZXNzIHdhcyBvbiBjYXJkIGFuZCBpdHMgcmVmZXJlbmNlIGNvdW50IGhhcyBiZWVuIGRlY3JlbWVudGVkCi0gKiAJICAgdG8gPD0gMCBieSB0aGUgdG9kbyAtPiBhZGRyZXNzIG11c3QgYmUgcmVtb3ZlZCBmcm9tIGNhcmQKLSAqLwotc3RhdGljIGludAotX19xZXRoX3JlZl9pcF9vbl9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYWRkciAqdG9kbywKLQkJICAgICAgc3RydWN0IHFldGhfaXBhZGRyICoqX19hZGRyKQotewotCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKLQlpbnQgZm91bmQgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShhZGRyLCAmY2FyZC0+aXBfbGlzdCwgZW50cnkpIHsKLQkJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7Ci0JCQlpZiAoKGFkZHItPnR5cGUgPT0gdG9kby0+dHlwZSkgJiYKLQkJCSAgICAobWVtY21wKCZhZGRyLT5tYWMsICZ0b2RvLT5tYWMsCi0JCQkJICAgIE9TQV9BRERSX0xFTikgPT0gMCkpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKGFkZHItPnByb3RvICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICYmCi0JCSAgICAodG9kby0+cHJvdG8gICAgID09IFFFVEhfUFJPVF9JUFY0KSAgJiYKLQkJICAgIChhZGRyLT50eXBlICAgICAgPT0gdG9kby0+dHlwZSkgICAgICAmJgotCQkgICAgKGFkZHItPnUuYTQuYWRkciA9PSB0b2RvLT51LmE0LmFkZHIpICYmCi0JCSAgICAoYWRkci0+dS5hNC5tYXNrID09IHRvZG8tPnUuYTQubWFzaykpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoYWRkci0+cHJvdG8gICAgICAgPT0gUUVUSF9QUk9UX0lQVjYpICAgICAmJgotCQkgICAgKHRvZG8tPnByb3RvICAgICAgID09IFFFVEhfUFJPVF9JUFY2KSAgICAgJiYKLQkJICAgIChhZGRyLT50eXBlICAgICAgICA9PSB0b2RvLT50eXBlKSAgICAgICAgICYmCi0JCSAgICAoYWRkci0+dS5hNi5wZnhsZW4gPT0gdG9kby0+dS5hNi5wZnhsZW4pICAmJgotCQkgICAgKG1lbWNtcCgmYWRkci0+dS5hNi5hZGRyLCAmdG9kby0+dS5hNi5hZGRyLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGZvdW5kKSB7Ci0JCWFkZHItPnVzZXJzICs9IHRvZG8tPnVzZXJzOwotCQlpZiAoYWRkci0+dXNlcnMgPD0gMCl7Ci0JCQkqX19hZGRyID0gYWRkcjsKLQkJCXJldHVybiAtMTsKLQkJfSBlbHNlIHsKLQkJCS8qIGZvciBWSVBBIGFuZCBSWElQIGxpbWl0IHJlZmNvdW50IHRvIDEgKi8KLQkJCWlmIChhZGRyLT50eXBlICE9IFFFVEhfSVBfVFlQRV9OT1JNQUwpCi0JCQkJYWRkci0+dXNlcnMgPSAxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JaWYgKHRvZG8tPnVzZXJzID4gMCkgewotCQkvKiBmb3IgVklQQSBhbmQgUlhJUCBsaW1pdCByZWZjb3VudCB0byAxICovCi0JCWlmICh0b2RvLT50eXBlICE9IFFFVEhfSVBfVFlQRV9OT1JNQUwpCi0JCQl0b2RvLT51c2VycyA9IDE7Ci0JCXJldHVybiAxOwotCX0gZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotX19xZXRoX2FkZHJlc3NfZXhpc3RzX2luX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IHFldGhfaXBhZGRyICphZGRyLAotCQkgICAgICAgICAgICAgIGludCBzYW1lX3R5cGUpCi17Ci0Jc3RydWN0IHFldGhfaXBhZGRyICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgbGlzdCwgZW50cnkpIHsKLQkJaWYgKCh0bXAtPnByb3RvICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICAgICAgICAgICAmJgotCQkgICAgKGFkZHItPnByb3RvICAgID09IFFFVEhfUFJPVF9JUFY0KSAgICAgICAgICAgICYmCi0JCSAgICAoKHNhbWVfdHlwZSAmJiAodG1wLT50eXBlID09IGFkZHItPnR5cGUpKSB8fAotCQkgICAgICghc2FtZV90eXBlICYmICh0bXAtPnR5cGUgIT0gYWRkci0+dHlwZSkpICApICYmCi0JCSAgICAodG1wLT51LmE0LmFkZHIgPT0gYWRkci0+dS5hNC5hZGRyKSAgICAgICAgICAgICApewotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKCh0bXAtPnByb3RvICA9PSBRRVRIX1BST1RfSVBWNikgICAgICAgICAgICAgICAmJgotCQkgICAgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY2KSAgICAgICAgICAgICAgICYmCi0JCSAgICAoKHNhbWVfdHlwZSAmJiAodG1wLT50eXBlID09IGFkZHItPnR5cGUpKSB8fAotCQkgICAgICghc2FtZV90eXBlICYmICh0bXAtPnR5cGUgIT0gYWRkci0+dHlwZSkpICApICYmCi0JCSAgICAobWVtY21wKCZ0bXAtPnUuYTYuYWRkciwgJmFkZHItPnUuYTYuYWRkciwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkgICAgICAgICAgKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEFkZCBJUCB0byBiZSBhZGRlZCB0byB0b2RvIGxpc3QuIElmIHRoZXJlIGlzIGFscmVhZHkgYW4gImFkZCB0b2RvIgotICogaW4gdGhpcyBsaXN0IHdlIGp1c3QgaW5jcmVtZW5lbnQgdGhlIHJlZmVyZW5jZSBjb3VudC4KLSAqIFJldHVybnMgMCBpZiB3ZSAganVzdCBpbmNyZW1lbnRlZCByZWZlcmVuY2UgY291bnQuCi0gKi8KLXN0YXRpYyBpbnQKLV9fcWV0aF9pbnNlcnRfaXBfdG9kbyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIsIGludCBhZGQpCi17Ci0Jc3RydWN0IHFldGhfaXBhZGRyICp0bXAsICp0OwotCWludCBmb3VuZCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodG1wLCB0LCBjYXJkLT5pcF90YmRfbGlzdCwgZW50cnkpIHsKLQkJaWYgKChhZGRyLT50eXBlID09IFFFVEhfSVBfVFlQRV9ERUxfQUxMX01DKSAmJgotCQkgICAgKHRtcC0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQykpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7Ci0JCQlpZiAoKHRtcC0+dHlwZQk9PSBhZGRyLT50eXBlKQkmJgotCQkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICYmCi0JCQkgICAgKG1lbWNtcCgmdG1wLT5tYWMsICZhZGRyLT5tYWMsCi0JCQkJICAgIE9TQV9BRERSX0xFTikgPT0gMCkpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKHRtcC0+cHJvdG8gICAgICAgID09IFFFVEhfUFJPVF9JUFY0KSAgICAgJiYKLQkJICAgIChhZGRyLT5wcm90byAgICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICAgICYmCi0JCSAgICAodG1wLT50eXBlICAgICAgICAgPT0gYWRkci0+dHlwZSkgICAgICAgICAmJgotCQkgICAgKHRtcC0+aXNfbXVsdGljYXN0ID09IGFkZHItPmlzX211bHRpY2FzdCkgJiYKLQkJICAgICh0bXAtPnUuYTQuYWRkciAgICA9PSBhZGRyLT51LmE0LmFkZHIpICAgICYmCi0JCSAgICAodG1wLT51LmE0Lm1hc2sgICAgPT0gYWRkci0+dS5hNC5tYXNrKSkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCh0bXAtPnByb3RvICAgICAgICA9PSBRRVRIX1BST1RfSVBWNikgICAgICAmJgotCQkgICAgKGFkZHItPnByb3RvICAgICAgID09IFFFVEhfUFJPVF9JUFY2KSAgICAgICYmCi0JCSAgICAodG1wLT50eXBlICAgICAgICAgPT0gYWRkci0+dHlwZSkgICAgICAgICAgJiYKLQkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICAmJgotCQkgICAgKHRtcC0+dS5hNi5wZnhsZW4gID09IGFkZHItPnUuYTYucGZ4bGVuKSAgICYmCi0JCSAgICAobWVtY21wKCZ0bXAtPnUuYTYuYWRkciwgJmFkZHItPnUuYTYuYWRkciwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChmb3VuZCl7Ci0JCWlmIChhZGRyLT51c2VycyAhPSAwKQotCQkJdG1wLT51c2VycyArPSBhZGRyLT51c2VyczsKLQkJZWxzZQotCQkJdG1wLT51c2VycyArPSBhZGQ/IDE6LTE7Ci0JCWlmICh0bXAtPnVzZXJzID09IDApIHsKLQkJCWxpc3RfZGVsKCZ0bXAtPmVudHJ5KTsKLQkJCWtmcmVlKHRtcCk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJaWYgKGFkZHItPnR5cGUgPT0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMpCi0JCQlsaXN0X2FkZCgmYWRkci0+ZW50cnksIGNhcmQtPmlwX3RiZF9saXN0KTsKLQkJZWxzZSB7Ci0JCQlpZiAoYWRkci0+dXNlcnMgPT0gMCkKLQkJCQlhZGRyLT51c2VycyArPSBhZGQ/IDE6LTE7Ci0JCQlpZiAoYWRkICYmIChhZGRyLT50eXBlID09IFFFVEhfSVBfVFlQRV9OT1JNQUwpICYmCi0JCQkgICAgcWV0aF9pc19hZGRyX2NvdmVyZWRfYnlfaXBhdG8oY2FyZCwgYWRkcikpewotCQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJ0a292YWRkciIpOwotCQkJCWFkZHItPnNldF9mbGFncyB8PSBRRVRIX0lQQV9TRVRJUF9UQUtFT1ZFUl9GTEFHOwotCQkJfQotCQkJbGlzdF9hZGRfdGFpbCgmYWRkci0+ZW50cnksIGNhcmQtPmlwX3RiZF9saXN0KTsKLQkJfQotCQlyZXR1cm4gMTsKLQl9Ci19Ci0KLS8qKgotICogUmVtb3ZlIElQIGFkZHJlc3MgZnJvbSBsaXN0Ci0gKi8KLXN0YXRpYyBpbnQKLXFldGhfZGVsZXRlX2lwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYyA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiZGVsaXAiKTsKLQotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+bWFjLCA2KTsKLQllbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKLQllbHNlIHsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOwotCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCXJjID0gX19xZXRoX2luc2VydF9pcF90b2RvKGNhcmQsIGFkZHIsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfYWRkX2lwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYyA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiYWRkaXAiKTsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPm1hYywgNik7Ci0JZWxzZSBpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpCi0JCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPnUuYTQuYWRkciwgNCk7Ci0JZWxzZSB7Ci0JCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPnUuYTYuYWRkciwgOCk7Ci0JCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikgKyA4LCA4KTsKLQl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQlyYyA9IF9fcWV0aF9pbnNlcnRfaXBfdG9kbyhjYXJkLCBhZGRyLCAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZAotX19xZXRoX2RlbGV0ZV9hbGxfbWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCi17Ci0Jc3RydWN0IHFldGhfaXBhZGRyICphZGRyLCAqdG1wOwotCWludCByYzsKLWFnYWluOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLCB0bXAsICZjYXJkLT5pcF9saXN0LCBlbnRyeSkgewotCQlpZiAoYWRkci0+aXNfbXVsdGljYXN0KSB7Ci0JCQlsaXN0X2RlbCgmYWRkci0+ZW50cnkpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgKmZsYWdzKTsKLQkJCXJjID0gcWV0aF9kZXJlZ2lzdGVyX2FkZHJfZW50cnkoY2FyZCwgYWRkcik7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgKmZsYWdzKTsKLQkJCWlmICghcmMpIHsKLQkJCQlrZnJlZShhZGRyKTsKLQkJCQlnb3RvIGFnYWluOwotCQkJfSBlbHNlCi0JCQkJbGlzdF9hZGQoJmFkZHItPmVudHJ5LCAmY2FyZC0+aXBfbGlzdCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3NldF9pcF9hZGRyX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0YmRfbGlzdDsKLQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKnRvZG8sICphZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgInNkaXBsaXN0Iik7Ci0JUUVUSF9EQkZfSEVYKHRyYWNlLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQl0YmRfbGlzdCA9IGNhcmQtPmlwX3RiZF9saXN0OwotCWNhcmQtPmlwX3RiZF9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9BVE9NSUMpOwotCWlmICghY2FyZC0+aXBfdGJkX2xpc3QpIHsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMCwgInNpbG5vbWVtIik7Ci0JCWNhcmQtPmlwX3RiZF9saXN0ID0gdGJkX2xpc3Q7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0gZWxzZQotCQlJTklUX0xJU1RfSEVBRChjYXJkLT5pcF90YmRfbGlzdCk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkodGJkX2xpc3QpKXsKLQkJdG9kbyA9IGxpc3RfZW50cnkodGJkX2xpc3QtPm5leHQsIHN0cnVjdCBxZXRoX2lwYWRkciwgZW50cnkpOwotCQlsaXN0X2RlbCgmdG9kby0+ZW50cnkpOwotCQlpZiAodG9kby0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQyl7Ci0JCQlfX3FldGhfZGVsZXRlX2FsbF9tYyhjYXJkLCAmZmxhZ3MpOwotCQkJa2ZyZWUodG9kbyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlyYyA9IF9fcWV0aF9yZWZfaXBfb25fY2FyZChjYXJkLCB0b2RvLCAmYWRkcik7Ci0JCWlmIChyYyA9PSAwKSB7Ci0JCQkvKiBub3RoaW5nIHRvIGJlIGRvbmU7IG9ubHkgYWRqdXN0ZWQgcmVmY291bnQgKi8KLQkJCWtmcmVlKHRvZG8pOwotCQl9IGVsc2UgaWYgKHJjID09IDEpIHsKLQkJCS8qIG5ldyBlbnRyeSB0byBiZSBhZGRlZCB0byBvbi1jYXJkIGxpc3QgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQkJCXJjID0gcWV0aF9yZWdpc3Rlcl9hZGRyX2VudHJ5KGNhcmQsIHRvZG8pOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQkJCWlmICghcmMpCi0JCQkJbGlzdF9hZGRfdGFpbCgmdG9kby0+ZW50cnksICZjYXJkLT5pcF9saXN0KTsKLQkJCWVsc2UKLQkJCQlrZnJlZSh0b2RvKTsKLQkJfSBlbHNlIGlmIChyYyA9PSAtMSkgewotCQkJLyogb24tY2FyZCBlbnRyeSB0byBiZSByZW1vdmVkICovCi0JCQlsaXN0X2RlbF9pbml0KCZhZGRyLT5lbnRyeSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Ci0JCQlyYyA9IHFldGhfZGVyZWdpc3Rlcl9hZGRyX2VudHJ5KGNhcmQsIGFkZHIpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQkJCWlmICghcmMpCi0JCQkJa2ZyZWUoYWRkcik7Ci0JCQllbHNlCi0JCQkJbGlzdF9hZGRfdGFpbCgmYWRkci0+ZW50cnksICZjYXJkLT5pcF9saXN0KTsKLQkJCWtmcmVlKHRvZG8pOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQlrZnJlZSh0YmRfbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZGVsZXRlX21jX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICopOwotc3RhdGljIHZvaWQgcWV0aF9hZGRfbXVsdGljYXN0X2lwdjQoc3RydWN0IHFldGhfY2FyZCAqKTsKLXN0YXRpYyB2b2lkIHFldGhfbGF5ZXIyX2FkZF9tdWx0aWNhc3Qoc3RydWN0IHFldGhfY2FyZCAqKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci1zdGF0aWMgdm9pZCBxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NihzdHJ1Y3QgcWV0aF9jYXJkICopOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQKLXFldGhfc2V0X3RocmVhZF9zdGFydF9iaXQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyB0aHJlYWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7Ci0JaWYgKCAhKGNhcmQtPnRocmVhZF9hbGxvd2VkX21hc2sgJiB0aHJlYWQpIHx8Ci0JICAgICAgKGNhcmQtPnRocmVhZF9zdGFydF9tYXNrICYgdGhyZWFkKSApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQljYXJkLT50aHJlYWRfc3RhcnRfbWFzayB8PSB0aHJlYWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9jbGVhcl90aHJlYWRfc3RhcnRfYml0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgdGhyZWFkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCWNhcmQtPnRocmVhZF9zdGFydF9tYXNrICY9IH50aHJlYWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKLQljYXJkLT50aHJlYWRfcnVubmluZ19tYXNrICY9IH50aHJlYWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Ci19Ci0KLXN0YXRpYyBpbnQKLV9fcWV0aF9kb19ydW5fdGhyZWFkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgdGhyZWFkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7Ci0JaWYgKGNhcmQtPnRocmVhZF9zdGFydF9tYXNrICYgdGhyZWFkKXsKLQkJaWYgKChjYXJkLT50aHJlYWRfYWxsb3dlZF9tYXNrICYgdGhyZWFkKSAmJgotCQkgICAgIShjYXJkLT50aHJlYWRfcnVubmluZ19tYXNrICYgdGhyZWFkKSl7Ci0JCQlyYyA9IDE7Ci0JCQljYXJkLT50aHJlYWRfc3RhcnRfbWFzayAmPSB+dGhyZWFkOwotCQkJY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayB8PSB0aHJlYWQ7Ci0JCX0gZWxzZQotCQkJcmMgPSAtRVBFUk07Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnRocmVhZF9tYXNrX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZG9fcnVuX3RocmVhZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZCkKLXsKLQlpbnQgcmMgPSAwOwotCi0Jd2FpdF9ldmVudChjYXJkLT53YWl0X3EsCi0JCSAgIChyYyA9IF9fcWV0aF9kb19ydW5fdGhyZWFkKGNhcmQsIHRocmVhZCkpID49IDApOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9yZWNvdmVyKHZvaWQgKnB0cikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCWludCByYyA9IDA7Ci0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgcHRyOwotCWRhZW1vbml6ZSgicWV0aF9yZWNvdmVyIik7Ci0JUUVUSF9EQkZfVEVYVCh0cmFjZSwyLCJyZWNvdmVyMSIpOwotCVFFVEhfREJGX0hFWCh0cmFjZSwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKLQlpZiAoIXFldGhfZG9fcnVuX3RocmVhZChjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkKLQkJcmV0dXJuIDA7Ci0JUUVUSF9EQkZfVEVYVCh0cmFjZSwyLCJyZWNvdmVyMiIpOwotCVBSSU5UX1dBUk4oIlJlY292ZXJ5IG9mIGRldmljZSAlcyBzdGFydGVkIC4uLlxuIiwKLQkJICAgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCWNhcmQtPnVzZV9oYXJkX3N0b3AgPSAxOwotCV9fcWV0aF9zZXRfb2ZmbGluZShjYXJkLT5nZGV2LDEpOwotCXJjID0gX19xZXRoX3NldF9vbmxpbmUoY2FyZC0+Z2RldiwxKTsKLQkvKiBkb24ndCBydW4gYW5vdGhlciBzY2hlZHVsZWQgcmVjb3ZlcnkgKi8KLQlxZXRoX2NsZWFyX3RocmVhZF9zdGFydF9iaXQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCk7Ci0JcWV0aF9jbGVhcl90aHJlYWRfcnVubmluZ19iaXQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCk7Ci0JaWYgKCFyYykKLQkJUFJJTlRfSU5GTygiRGV2aWNlICVzIHN1Y2Nlc3NmdWxseSByZWNvdmVyZWQhXG4iLAotCQkJICAgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCWVsc2UKLQkJUFJJTlRfSU5GTygiRGV2aWNlICVzIGNvdWxkIG5vdCBiZSByZWNvdmVyZWQhXG4iLAotCQkJICAgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCXJldHVybiAwOwotfQotCi12b2lkCi1xZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JUUVUSF9EQkZfVEVYVCh0cmFjZSwyLCJzdGFydHJlYyIpOwotCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpID09IDApCi0JCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZG9fc3RhcnRfdGhyZWFkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgdGhyZWFkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7Ci0JUUVUSF9EQkZfVEVYVF8odHJhY2UsIDQsICIgICUwMnglMDJ4JTAyeCIsCi0JCQkodTgpIGNhcmQtPnRocmVhZF9zdGFydF9tYXNrLAotCQkJKHU4KSBjYXJkLT50aHJlYWRfYWxsb3dlZF9tYXNrLAotCQkJKHU4KSBjYXJkLT50aHJlYWRfcnVubmluZ19tYXNrKTsKLQlyYyA9IChjYXJkLT50aHJlYWRfc3RhcnRfbWFzayAmIHRocmVhZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfc3RhcnRfa2VybmVsX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWV0aF9jYXJkLCBrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOwotCVFFVEhfREJGX1RFWFQodHJhY2UgLCAyLCAic3RydGhyZCIpOwotCi0JaWYgKGNhcmQtPnJlYWQuc3RhdGUgIT0gQ0hfU1RBVEVfVVAgJiYKLQkgICAgY2FyZC0+d3JpdGUuc3RhdGUgIT0gQ0hfU1RBVEVfVVApCi0JCXJldHVybjsKLQlpZiAocWV0aF9kb19zdGFydF90aHJlYWQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQocWV0aF9yZWNvdmVyLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotcWV0aF9zZXRfaW50aWFsX29wdGlvbnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQljYXJkLT5vcHRpb25zLnJvdXRlNC50eXBlID0gTk9fUk9VVEVSOwotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQljYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlID0gTk9fUk9VVEVSOwotI2VuZGlmIC8qIFFFVEhfSVBWNiAqLwotCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IFFFVEhfQ0hFQ0tTVU1fREVGQVVMVDsKLQljYXJkLT5vcHRpb25zLmJyb2FkY2FzdF9tb2RlID0gUUVUSF9UUl9CUk9BRENBU1RfQUxMUklOR1M7Ci0JY2FyZC0+b3B0aW9ucy5tYWNhZGRyX21vZGUgPSBRRVRIX1RSX01BQ0FERFJfTk9OQ0FOT05JQ0FMOwotCWNhcmQtPm9wdGlvbnMuZmFrZV9icm9hZGNhc3QgPSAwOwotCWNhcmQtPm9wdGlvbnMuYWRkX2hobGVuID0gREVGQVVMVF9BRERfSEhMRU47Ci0JY2FyZC0+b3B0aW9ucy5mYWtlX2xsID0gMDsKLQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKLQkJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAxOwotCWVsc2UKLQkJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAwOwotCWNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMgPSAwOwotCWNhcmQtPm9wdGlvbnMucnhfc2dfY2IgPSBRRVRIX1JYX1NHX0NCOwotfQotCi0vKioKLSAqIGluaXRpYWxpemUgY2hhbm5lbHMgLGNhcmQgYW5kIGFsbCBzdGF0ZSBtYWNoaW5lcwotICovCi1zdGF0aWMgaW50Ci1xZXRoX3NldHVwX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJzZXR1cGNyZCIpOwotCVFFVEhfREJGX0hFWChzZXR1cCwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKLQotCWNhcmQtPnJlYWQuc3RhdGUgID0gQ0hfU1RBVEVfRE9XTjsKLQljYXJkLT53cml0ZS5zdGF0ZSA9IENIX1NUQVRFX0RPV047Ci0JY2FyZC0+ZGF0YS5zdGF0ZSAgPSBDSF9TVEFURV9ET1dOOwotCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9ET1dOOwotCWNhcmQtPmxhbl9vbmxpbmUgPSAwOwotCWNhcmQtPnVzZV9oYXJkX3N0b3AgPSAwOwotCWNhcmQtPmRldiA9IE5VTEw7Ci0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotCXNwaW5fbG9ja19pbml0KCZjYXJkLT52bGFubG9jayk7Ci0JY2FyZC0+dmxhbmdycCA9IE5VTEw7Ci0jZW5kaWYKLQlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmlwX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjYXJkLT50aHJlYWRfbWFza19sb2NrKTsKLQljYXJkLT50aHJlYWRfc3RhcnRfbWFzayA9IDA7Ci0JY2FyZC0+dGhyZWFkX2FsbG93ZWRfbWFzayA9IDA7Ci0JY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayA9IDA7Ci0JSU5JVF9XT1JLKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIsIHFldGhfc3RhcnRfa2VybmVsX3RocmVhZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmlwX2xpc3QpOwotCWNhcmQtPmlwX3RiZF9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOwotCWlmICghY2FyZC0+aXBfdGJkX2xpc3QpIHsKLQkJUUVUSF9EQkZfVEVYVChzZXR1cCwgMCwgImlwdGJkbm9tIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlJTklUX0xJU1RfSEVBRChjYXJkLT5pcF90YmRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+d2FpdF9xKTsKLQkvKiBpbnRpYWwgb3B0aW9ucyAqLwotCXFldGhfc2V0X2ludGlhbF9vcHRpb25zKGNhcmQpOwotCS8qIElQIGFkZHJlc3MgdGFrZW92ZXIgKi8KLQlJTklUX0xJU1RfSEVBRCgmY2FyZC0+aXBhdG8uZW50cmllcyk7Ci0JY2FyZC0+aXBhdG8uZW5hYmxlZCA9IDA7Ci0JY2FyZC0+aXBhdG8uaW52ZXJ0NCA9IDA7Ci0JY2FyZC0+aXBhdG8uaW52ZXJ0NiA9IDA7Ci0JLyogaW5pdCBRRElPIHN0dWZmICovCi0JcWV0aF9pbml0X3FkaW9faW5mbyhjYXJkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotaXNfMTkyMF9kZXZpY2UgKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHNpbmdsZV9xdWV1ZSA9IDA7Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKLQlzdHJ1Y3QgY2hhbm5lbFBhdGhfZHNjIHsKLQkJdTggZmxhZ3M7Ci0JCXU4IGxzbjsKLQkJdTggZGVzYzsKLQkJdTggY2hwaWQ7Ci0JCXU4IHN3bGE7Ci0JCXU4IHplcm9lczsKLQkJdTggY2hsYTsKLQkJdTggY2hwcDsKLQl9ICpjaHBfZHNjOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgImNoa18xOTIwIik7Ci0KLQljY3dkZXYgPSBjYXJkLT5kYXRhLmNjd2RldjsKLQljaHBfZHNjID0gKHN0cnVjdCBjaGFubmVsUGF0aF9kc2MgKiljY3dfZGV2aWNlX2dldF9jaHBfZGVzYyhjY3dkZXYsIDApOwotCWlmIChjaHBfZHNjICE9IE5VTEwpIHsKLQkJLyogQ0hQUCBmaWVsZCBiaXQgNiA9PSAxIC0+IHNpbmdsZSBxdWV1ZSAqLwotCQlzaW5nbGVfcXVldWUgPSAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKTsKLQkJa2ZyZWUoY2hwX2RzYyk7Ci0JfQotCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAicmM6JXgiLCBzaW5nbGVfcXVldWUpOwotCXJldHVybiBzaW5nbGVfcXVldWU7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZGV0ZXJtaW5lX2NhcmRfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCBpID0gMDsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJkZXRjZHR5cCIpOwotCi0JY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nID0gUUVUSF9QUklPUV9ERUZBVUxUOwotCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSBRRVRIX0RFRkFVTFRfUVVFVUU7Ci0Jd2hpbGUgKGtub3duX2RldmljZXNbaV1bNF0pIHsKLQkJaWYgKChDQVJEX1JERVYoY2FyZCktPmlkLmRldl90eXBlID09IGtub3duX2RldmljZXNbaV1bMl0pICYmCi0JCSAgICAoQ0FSRF9SREVWKGNhcmQpLT5pZC5kZXZfbW9kZWwgPT0ga25vd25fZGV2aWNlc1tpXVszXSkpIHsKLQkJCWNhcmQtPmluZm8udHlwZSA9IGtub3duX2RldmljZXNbaV1bNF07Ci0JCQljYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPSBrbm93bl9kZXZpY2VzW2ldWzhdOwotCQkJY2FyZC0+aW5mby5pc19tdWx0aWNhc3RfZGlmZmVyZW50ID0ga25vd25fZGV2aWNlc1tpXVs5XTsKLQkJCWlmIChpc18xOTIwX2RldmljZShjYXJkKSkgewotCQkJCVBSSU5UX0lORk8oIlByaW9yaXR5IFF1ZXVlaW5nIG5vdCBhYmxlICIKLQkJCQkJICAgImR1ZSB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucyFcbiIpOwotCQkJCWNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9IDE7Ci0JCQkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDA7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpKys7Ci0JfQotCWNhcmQtPmluZm8udHlwZSA9IFFFVEhfQ0FSRF9UWVBFX1VOS05PV047Ci0JUFJJTlRfRVJSKCJ1bmtub3duIGNhcmQgdHlwZSBvbiBkZXZpY2UgJXNcbiIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQlyZXR1cm4gLUVOT0VOVDsKLX0KLQotc3RhdGljIGludAotcWV0aF9wcm9iZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJwcm9iZWRldiIpOwotCi0JZGV2ID0gJmdkZXYtPmRldjsKLQlpZiAoIWdldF9kZXZpY2UoZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIiVzIiwgZ2Rldi0+ZGV2LmJ1c19pZCk7Ci0KLQljYXJkID0gcWV0aF9hbGxvY19jYXJkKCk7Ci0JaWYgKCFjYXJkKSB7Ci0JCXB1dF9kZXZpY2UoZGV2KTsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIxZXJyJWQiLCAtRU5PTUVNKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWNhcmQtPnJlYWQuY2N3ZGV2ICA9IGdkZXYtPmNkZXZbMF07Ci0JY2FyZC0+d3JpdGUuY2N3ZGV2ID0gZ2Rldi0+Y2RldlsxXTsKLQljYXJkLT5kYXRhLmNjd2RldiAgPSBnZGV2LT5jZGV2WzJdOwotCWdkZXYtPmRldi5kcml2ZXJfZGF0YSA9IGNhcmQ7Ci0JY2FyZC0+Z2RldiA9IGdkZXY7Ci0JZ2Rldi0+Y2RldlswXS0+aGFuZGxlciA9IHFldGhfaXJxOwotCWdkZXYtPmNkZXZbMV0tPmhhbmRsZXIgPSBxZXRoX2lycTsKLQlnZGV2LT5jZGV2WzJdLT5oYW5kbGVyID0gcWV0aF9pcnE7Ci0KLQlpZiAoKHJjID0gcWV0aF9kZXRlcm1pbmVfY2FyZF90eXBlKGNhcmQpKSl7Ci0JCVBSSU5UX1dBUk4oIiVzOiBub3QgYSB2YWxpZCBjYXJkIHR5cGVcbiIsIF9fZnVuY19fKTsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIzZXJyJWQiLCByYyk7Ci0JCXB1dF9kZXZpY2UoZGV2KTsKLQkJcWV0aF9mcmVlX2NhcmQoY2FyZCk7Ci0JCXJldHVybiByYzsKLQl9Ci0JaWYgKChyYyA9IHFldGhfc2V0dXBfY2FyZChjYXJkKSkpewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjJlcnIlZCIsIHJjKTsKLQkJcHV0X2RldmljZShkZXYpOwotCQlxZXRoX2ZyZWVfY2FyZChjYXJkKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyYyA9IHFldGhfY3JlYXRlX2RldmljZV9hdHRyaWJ1dGVzKGRldik7Ci0JaWYgKHJjKSB7Ci0JCXB1dF9kZXZpY2UoZGV2KTsKLQkJcWV0aF9mcmVlX2NhcmQoY2FyZCk7Ci0JCXJldHVybiByYzsKLQl9Ci0JLyogaW5zZXJ0IGludG8gb3VyIGludGVybmFsIGxpc3QgKi8KLQl3cml0ZV9sb2NrX2lycXNhdmUoJnFldGhfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxpc3QsICZxZXRoX2NhcmRfbGlzdC5saXN0KTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJjOwotfQotCi0KLXN0YXRpYyBpbnQgcWV0aF9yZWFkX2NvbmZfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB2b2lkICoqYnVmZmVyLAotCQkJICAgICAgIGludCAqbGVuZ3RoKQotewotCXN0cnVjdCBjaXcgKmNpdzsKLQljaGFyICpyY2RfYnVmOwotCWludCByZXQ7Ci0Jc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCA9ICZjYXJkLT5kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIHNjYW4gZm9yIFJDRCBjb21tYW5kIGluIGV4dGVuZGVkIFNlbnNlSUQgZGF0YQotCSAqLwotCWNpdyA9IGNjd19kZXZpY2VfZ2V0X2NpdyhjaGFubmVsLT5jY3dkZXYsIENJV19UWVBFX1JDRCk7Ci0JaWYgKCFjaXcgfHwgY2l3LT5jbWQgPT0gMCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJjZF9idWYgPSBremFsbG9jKGNpdy0+Y291bnQsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIXJjZF9idWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY2hhbm5lbC0+Y2N3LmNtZF9jb2RlID0gY2l3LT5jbWQ7Ci0JY2hhbm5lbC0+Y2N3LmNkYSA9IChfX3UzMikgX19wYSAocmNkX2J1Zik7Ci0JY2hhbm5lbC0+Y2N3LmNvdW50ID0gY2l3LT5jb3VudDsKLQljaGFubmVsLT5jY3cuZmxhZ3MgPSBDQ1dfRkxBR19TTEk7Ci0JY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9SQ0Q7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKLQlyZXQgPSBjY3dfZGV2aWNlX3N0YXJ0X3RpbWVvdXQoY2hhbm5lbC0+Y2N3ZGV2LCAmY2hhbm5lbC0+Y2N3LAotCQkJCSAgICAgICBRRVRIX1JDRF9QQVJNLCBMUE1fQU5ZUEFUSCwgMCwKLQkJCQkgICAgICAgUUVUSF9SQ0RfVElNRU9VVCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwotCWlmICghcmV0KQotCQl3YWl0X2V2ZW50KGNhcmQtPndhaXRfcSwKLQkJCSAgIChjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9SQ0RfRE9ORSB8fAotCQkJICAgIGNoYW5uZWwtPnN0YXRlID09IENIX1NUQVRFX0RPV04pKTsKLQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfRE9XTikKLQkJcmV0ID0gLUVJTzsKLQllbHNlCi0JCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfRE9XTjsKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKHJjZF9idWYpOwotCQkqYnVmZmVyID0gTlVMTDsKLQkJKmxlbmd0aCA9IDA7Ci0JfSBlbHNlIHsKLQkJKmxlbmd0aCA9IGNpdy0+Y291bnQ7Ci0JCSpidWZmZXIgPSByY2RfYnVmOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2dldF91bml0YWRkcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotIAlpbnQgbGVuZ3RoOwotCWNoYXIgKnByY2Q7Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgImdldHVuaXQiKTsKLQlyYyA9IHFldGhfcmVhZF9jb25mX2RhdGEoY2FyZCwgKHZvaWQgKiopICZwcmNkLCAmbGVuZ3RoKTsKLQlpZiAocmMpIHsKLQkJUFJJTlRfRVJSKCJxZXRoX3JlYWRfY29uZl9kYXRhIGZvciBkZXZpY2UgJXMgcmV0dXJuZWQgJWlcbiIsCi0JCQkgIENBUkRfRERFVl9JRChjYXJkKSwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWNhcmQtPmluZm8uY2hwaWQgPSBwcmNkWzMwXTsKLQljYXJkLT5pbmZvLnVuaXRfYWRkcjIgPSBwcmNkWzMxXTsKLQljYXJkLT5pbmZvLmN1bGEgPSBwcmNkWzYzXTsKLQljYXJkLT5pbmZvLmd1ZXN0bGFuID0gKChwcmNkWzB4MTBdID09IF9hc2NlYmNbJ1YnXSkgJiYKLQkJCSAgICAgICAocHJjZFsweDExXSA9PSBfYXNjZWJjWydNJ10pKTsKLQlrZnJlZShwcmNkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfaW5pdF90b2tlbnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQljYXJkLT50b2tlbi5pc3N1ZXJfcm1fdyA9IDB4MDAwMTAxMDNVTDsKLQljYXJkLT50b2tlbi5jbV9maWx0ZXJfdyA9IDB4MDAwMTAxMDhVTDsKLQljYXJkLT50b2tlbi5jbV9jb25uZWN0aW9uX3cgPSAweDAwMDEwMTBhVUw7Ci0JY2FyZC0+dG9rZW4udWxwX2ZpbHRlcl93ID0gMHgwMDAxMDEwYlVMOwotCWNhcmQtPnRva2VuLnVscF9jb25uZWN0aW9uX3cgPSAweDAwMDEwMTBkVUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX191MTYKLXJhd19kZXZub19mcm9tX2J1c19pZChjaGFyICppZCkKLXsKLSAgICAgICAgaWQgKz0gKHN0cmxlbihpZCkgLSA0KTsKLSAgICAgICAgcmV0dXJuIChfX3UxNikgc2ltcGxlX3N0cnRvdWwoaWQsICZpZCwgMTYpOwotfQotLyoqCi0gKiBzZXR1cCBjaGFubmVsCi0gKi8KLXN0YXRpYyB2b2lkCi1xZXRoX3NldHVwX2NjdyhzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsLHVuc2lnbmVkIGNoYXIgKmlvYiwgX191MzIgbGVuKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAic2V0dXBjY3ciKTsKLQljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKLQlpZiAoY2hhbm5lbCA9PSAmY2FyZC0+cmVhZCkKLQkJbWVtY3B5KCZjaGFubmVsLT5jY3csIFJFQURfQ0NXLCBzaXplb2Yoc3RydWN0IGNjdzEpKTsKLQllbHNlCi0JCW1lbWNweSgmY2hhbm5lbC0+Y2N3LCBXUklURV9DQ1csIHNpemVvZihzdHJ1Y3QgY2N3MSkpOwotCWNoYW5uZWwtPmNjdy5jb3VudCA9IGxlbjsKLQljaGFubmVsLT5jY3cuY2RhID0gKF9fdTMyKSBfX3BhKGlvYik7Ci19Ci0KLS8qKgotICogZ2V0IGZyZWUgYnVmZmVyIGZvciBjY3dzIChJRFggYWN0aXZhdGlvbiwgbGFuY21kcyxpcGFzc2lzdHMuLi4pCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICoKLV9fcWV0aF9nZXRfYnVmZmVyKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JX191OCBpbmRleDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJnZXRidWZmIik7Ci0JaW5kZXggPSBjaGFubmVsLT5pb19idWZfbm87Ci0JZG8gewotCQlpZiAoY2hhbm5lbC0+aW9iW2luZGV4XS5zdGF0ZSA9PSBCVUZfU1RBVEVfRlJFRSkgewotCQkJY2hhbm5lbC0+aW9iW2luZGV4XS5zdGF0ZSA9IEJVRl9TVEFURV9MT0NLRUQ7Ci0JCQljaGFubmVsLT5pb19idWZfbm8gPSAoY2hhbm5lbC0+aW9fYnVmX25vICsgMSkgJQotCQkJCVFFVEhfQ01EX0JVRkZFUl9OTzsKLQkJCW1lbXNldChjaGFubmVsLT5pb2JbaW5kZXhdLmRhdGEsIDAsIFFFVEhfQlVGU0laRSk7Ci0JCQlyZXR1cm4gY2hhbm5lbC0+aW9iICsgaW5kZXg7Ci0JCX0KLQkJaW5kZXggPSAoaW5kZXggKyAxKSAlIFFFVEhfQ01EX0JVRkZFUl9OTzsKLQl9IHdoaWxlKGluZGV4ICE9IGNoYW5uZWwtPmlvX2J1Zl9ubyk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiByZWxlYXNlIGNvbW1hbmQgYnVmZmVyCi0gKi8KLXN0YXRpYyB2b2lkCi1xZXRoX3JlbGVhc2VfYnVmZmVyKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgInJlbGJ1ZmYiKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+aW9iX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQoaW9iLT5kYXRhLCAwLCBRRVRIX0JVRlNJWkUpOwotCWlvYi0+c3RhdGUgPSBCVUZfU1RBVEVfRlJFRTsKLQlpb2ItPmNhbGxiYWNrID0gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YV9jYjsKLQlpb2ItPnJjID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5pb2JfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqCi1xZXRoX2dldF9idWZmZXIoc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICpidWZmZXIgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbm5lbC0+aW9iX2xvY2ssIGZsYWdzKTsKLQlidWZmZXIgPSBfX3FldGhfZ2V0X2J1ZmZlcihjaGFubmVsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5pb2JfbG9jaywgZmxhZ3MpOwotCXJldHVybiBidWZmZXI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICoKLXFldGhfd2FpdF9mb3JfYnVmZmVyKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqYnVmZmVyOwotCXdhaXRfZXZlbnQoY2hhbm5lbC0+d2FpdF9xLAotCQkgICAoKGJ1ZmZlciA9IHFldGhfZ2V0X2J1ZmZlcihjaGFubmVsKSkgIT0gTlVMTCkpOwotCXJldHVybiBidWZmZXI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX2NtZF9idWZmZXJzKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JaW50IGNudDsKLQotCWZvciAoY250PTA7IGNudCA8IFFFVEhfQ01EX0JVRkZFUl9OTzsgY250KyspCi0JCXFldGhfcmVsZWFzZV9idWZmZXIoY2hhbm5lbCwmY2hhbm5lbC0+aW9iW2NudF0pOwotCWNoYW5uZWwtPmJ1Zl9ubyA9IDA7Ci0JY2hhbm5lbC0+aW9fYnVmX25vID0gMDsKLX0KLQotLyoqCi0gKiBzdGFydCBJRFggZm9yIHJlYWQgYW5kIHdyaXRlIGNoYW5uZWwKLSAqLwotc3RhdGljIGludAotcWV0aF9pZHhfYWN0aXZhdGVfZ2V0X2Fuc3dlcihzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsLAotCQkJICAgICAgdm9pZCAoKmlkeF9yZXBseV9jYikoc3RydWN0IHFldGhfY2hhbm5lbCAqLAotCQkJCQkJICAgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKSkKLXsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJpZHhhbnN3ciIpOwotCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjaGFubmVsLT5jY3dkZXYpOwotCWlvYiA9IHFldGhfZ2V0X2J1ZmZlcihjaGFubmVsKTsKLQlpb2ItPmNhbGxiYWNrID0gaWR4X3JlcGx5X2NiOwotCW1lbWNweSgmY2hhbm5lbC0+Y2N3LCBSRUFEX0NDVywgc2l6ZW9mKHN0cnVjdCBjY3cxKSk7Ci0JY2hhbm5lbC0+Y2N3LmNvdW50ID0gUUVUSF9CVUZTSVpFOwotCWNoYW5uZWwtPmNjdy5jZGEgPSAoX191MzIpIF9fcGEoaW9iLT5kYXRhKTsKLQotCXdhaXRfZXZlbnQoY2FyZC0+d2FpdF9xLAotCQkgICBhdG9taWNfY21weGNoZygmY2hhbm5lbC0+aXJxX3BlbmRpbmcsIDAsIDEpID09IDApOwotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDYsICJub2lycXBuZCIpOwotCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7Ci0JcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoYW5uZWwtPmNjd2RldiwKLQkJCSAgICAgICZjaGFubmVsLT5jY3csKGFkZHJfdCkgaW9iLCAwLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7Ci0KLQlpZiAocmMpIHsKLQkJUFJJTlRfRVJSKCJxZXRoOiBFcnJvcjIgaW4gYWN0aXZhdGluZyBjaGFubmVsIHJjPSVkXG4iLHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIyZXJyJWQiLCByYyk7Ci0JCWF0b21pY19zZXQoJmNoYW5uZWwtPmlycV9wZW5kaW5nLCAwKTsKLQkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGNhcmQtPndhaXRfcSwKLQkJCSBjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9VUCwgUUVUSF9USU1FT1VUKTsKLQlpZiAocmMgPT0gLUVSRVNUQVJUU1lTKQotCQlyZXR1cm4gcmM7Ci0JaWYgKGNoYW5uZWwtPnN0YXRlICE9IENIX1NUQVRFX1VQKXsKLQkJcmMgPSAtRVRJTUU7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiM2VyciVkIiwgcmMpOwotCQlxZXRoX2NsZWFyX2NtZF9idWZmZXJzKGNoYW5uZWwpOwotCX0gZWxzZQotCQlyYyA9IDA7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2lkeF9hY3RpdmF0ZV9jaGFubmVsKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwsCi0JCQkgICB2b2lkICgqaWR4X3JlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jaGFubmVsICosCi0JCQkJCQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICopKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX191MTYgdGVtcDsKLQlpbnQgcmM7Ci0KLQljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJpZHhhY3RjaCIpOwotCi0JaW9iID0gcWV0aF9nZXRfYnVmZmVyKGNoYW5uZWwpOwotCWlvYi0+Y2FsbGJhY2sgPSBpZHhfcmVwbHlfY2I7Ci0JbWVtY3B5KCZjaGFubmVsLT5jY3csIFdSSVRFX0NDVywgc2l6ZW9mKHN0cnVjdCBjY3cxKSk7Ci0JY2hhbm5lbC0+Y2N3LmNvdW50ID0gSURYX0FDVElWQVRFX1NJWkU7Ci0JY2hhbm5lbC0+Y2N3LmNkYSA9IChfX3UzMikgX19wYShpb2ItPmRhdGEpOwotCWlmIChjaGFubmVsID09ICZjYXJkLT53cml0ZSkgewotCQltZW1jcHkoaW9iLT5kYXRhLCBJRFhfQUNUSVZBVEVfV1JJVEUsIElEWF9BQ1RJVkFURV9TSVpFKTsKLQkJbWVtY3B5KFFFVEhfVFJBTlNQT1JUX0hFQURFUl9TRVFfTk8oaW9iLT5kYXRhKSwKLQkJICAgICAgICZjYXJkLT5zZXFuby50cmFuc19oZHIsIFFFVEhfU0VRX05PX0xFTkdUSCk7Ci0JCWNhcmQtPnNlcW5vLnRyYW5zX2hkcisrOwotCX0gZWxzZSB7Ci0JCW1lbWNweShpb2ItPmRhdGEsIElEWF9BQ1RJVkFURV9SRUFELCBJRFhfQUNUSVZBVEVfU0laRSk7Ci0JCW1lbWNweShRRVRIX1RSQU5TUE9SVF9IRUFERVJfU0VRX05PKGlvYi0+ZGF0YSksCi0JCSAgICAgICAmY2FyZC0+c2Vxbm8udHJhbnNfaGRyLCBRRVRIX1NFUV9OT19MRU5HVEgpOwotCX0KLQltZW1jcHkoUUVUSF9JRFhfQUNUX0lTU1VFUl9STV9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4uaXNzdWVyX3JtX3csUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLQltZW1jcHkoUUVUSF9JRFhfQUNUX0ZVTkNfTEVWRUwoaW9iLT5kYXRhKSwKLQkgICAgICAgJmNhcmQtPmluZm8uZnVuY19sZXZlbCxzaXplb2YoX191MTYpKTsKLQl0ZW1wID0gcmF3X2Rldm5vX2Zyb21fYnVzX2lkKENBUkRfRERFVl9JRChjYXJkKSk7Ci0JbWVtY3B5KFFFVEhfSURYX0FDVF9RRElPX0RFVl9DVUEoaW9iLT5kYXRhKSwgJnRlbXAsIDIpOwotCXRlbXAgPSAoY2FyZC0+aW5mby5jdWxhIDw8IDgpICsgY2FyZC0+aW5mby51bml0X2FkZHIyOwotCW1lbWNweShRRVRIX0lEWF9BQ1RfUURJT19ERVZfUkVBTEFERFIoaW9iLT5kYXRhKSwgJnRlbXAsIDIpOwotCi0Jd2FpdF9ldmVudChjYXJkLT53YWl0X3EsCi0JCSAgIGF0b21pY19jbXB4Y2hnKCZjaGFubmVsLT5pcnFfcGVuZGluZywgMCwgMSkgPT0gMCk7Ci0JUUVUSF9EQkZfVEVYVChzZXR1cCwgNiwgIm5vaXJxcG5kIik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKLQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2hhbm5lbC0+Y2N3ZGV2LAotCQkJICAgICAgJmNoYW5uZWwtPmNjdywoYWRkcl90KSBpb2IsIDAsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKLQotCWlmIChyYykgewotCQlQUklOVF9FUlIoInFldGg6IEVycm9yMSBpbiBhY3RpdmF0aW5nIGNoYW5uZWwuIHJjPSVkXG4iLHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIxZXJyJWQiLCByYyk7Ci0JCWF0b21pY19zZXQoJmNoYW5uZWwtPmlycV9wZW5kaW5nLCAwKTsKLQkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGNhcmQtPndhaXRfcSwKLQkJCWNoYW5uZWwtPnN0YXRlID09IENIX1NUQVRFX0FDVElWQVRJTkcsIFFFVEhfVElNRU9VVCk7Ci0JaWYgKHJjID09IC1FUkVTVEFSVFNZUykKLQkJcmV0dXJuIHJjOwotCWlmIChjaGFubmVsLT5zdGF0ZSAhPSBDSF9TVEFURV9BQ1RJVkFUSU5HKSB7Ci0JCVBSSU5UX1dBUk4oInFldGg6IElEWCBhY3RpdmF0ZSB0aW1lZCBvdXQhXG4iKTsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIyZXJyJWQiLCAtRVRJTUUpOwotCQlxZXRoX2NsZWFyX2NtZF9idWZmZXJzKGNoYW5uZWwpOwotCQlyZXR1cm4gLUVUSU1FOwotCX0KLQlyZXR1cm4gcWV0aF9pZHhfYWN0aXZhdGVfZ2V0X2Fuc3dlcihjaGFubmVsLGlkeF9yZXBseV9jYik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfcGVlcl9mdW5jX2xldmVsKGludCBsZXZlbCkKLXsKLQlpZiAoKGxldmVsICYgMHhmZikgPT0gOCkKLQkJcmV0dXJuIChsZXZlbCAmIDB4ZmYpICsgMHg0MDA7Ci0JaWYgKCgobGV2ZWwgPj4gOCkgJiAzKSA9PSAxKQotCQlyZXR1cm4gKGxldmVsICYgMHhmZikgKyAweDIwMDsKLQlyZXR1cm4gbGV2ZWw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2lkeF93cml0ZV9jYihzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQlfX3UxNiB0ZW1wOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCAsMiwgImlkeHdyY2IiKTsKLQotCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9ET1dOKSB7Ci0JCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfQUNUSVZBVElORzsKLQkJZ290byBvdXQ7Ci0JfQotCWNhcmQgPSBDQVJEX0ZST01fQ0RFVihjaGFubmVsLT5jY3dkZXYpOwotCi0JaWYgKCEoUUVUSF9JU19JRFhfQUNUX1BPU19SRVBMWShpb2ItPmRhdGEpKSkgewotCQlpZiAoUUVUSF9JRFhfQUNUX0NBVVNFX0NPREUoaW9iLT5kYXRhKSA9PSAweDE5KQotCQkJUFJJTlRfRVJSKCJJRFhfQUNUSVZBVEUgb24gd3JpdGUgY2hhbm5lbCBkZXZpY2UgJXM6ICIKLQkJCQkiYWRhcHRlciBleGNsdXNpdmVseSB1c2VkIGJ5IGFub3RoZXIgaG9zdFxuIiwKLQkJCQlDQVJEX1dERVZfSUQoY2FyZCkpOwotCQllbHNlCi0JCQlQUklOVF9FUlIoIklEWF9BQ1RJVkFURSBvbiB3cml0ZSBjaGFubmVsIGRldmljZSAlczogIgotCQkJCSJuZWdhdGl2ZSByZXBseVxuIiwgQ0FSRF9XREVWX0lEKGNhcmQpKTsKLQkJZ290byBvdXQ7Ci0JfQotCW1lbWNweSgmdGVtcCwgUUVUSF9JRFhfQUNUX0ZVTkNfTEVWRUwoaW9iLT5kYXRhKSwgMik7Ci0JaWYgKCh0ZW1wICYgfjB4MDEwMCkgIT0gcWV0aF9wZWVyX2Z1bmNfbGV2ZWwoY2FyZC0+aW5mby5mdW5jX2xldmVsKSkgewotCQlQUklOVF9XQVJOKCJJRFhfQUNUSVZBVEUgb24gd3JpdGUgY2hhbm5lbCBkZXZpY2UgJXM6ICIKLQkJCSJmdW5jdGlvbiBsZXZlbCBtaXNtYXRjaCAiCi0JCQkiKHNlbnQ6IDB4JXgsIHJlY2VpdmVkOiAweCV4KVxuIiwKLQkJCUNBUkRfV0RFVl9JRChjYXJkKSwgY2FyZC0+aW5mby5mdW5jX2xldmVsLCB0ZW1wKTsKLQkJZ290byBvdXQ7Ci0JfQotCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfVVA7Ci1vdXQ6Ci0JcWV0aF9yZWxlYXNlX2J1ZmZlcihjaGFubmVsLCBpb2IpOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2NoZWNrX2lkeF9yZXNwb25zZSh1bnNpZ25lZCBjaGFyICpidWZmZXIpCi17Ci0JaWYgKCFidWZmZXIpCi0JCXJldHVybiAwOwotCi0JUUVUSF9EQkZfSEVYKGNvbnRyb2wsIDIsIGJ1ZmZlciwgUUVUSF9EQkZfQ09OVFJPTF9MRU4pOwotCWlmICgoYnVmZmVyWzJdICYgMHhjMCkgPT0gMHhjMCkgewotCQlQUklOVF9XQVJOKCJyZWNlaXZlZCBhbiBJRFggVEVSTUlOQVRFICIKLQkJCSAgICJ3aXRoIGNhdXNlIGNvZGUgMHglMDJ4JXNcbiIsCi0JCQkgICBidWZmZXJbNF0sCi0JCQkgICAoKGJ1ZmZlcls0XSA9PSAweDIyKSA/Ci0JCQkgICAgIiAtLSB0cnkgYW5vdGhlciBwb3J0bmFtZSIgOiAiIikpOwotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2tpZHhyZXMiKTsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIiBpZHh0ZXJtIik7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiICByYyVkIiwgLUVJTyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfaWR4X3JlYWRfY2Ioc3RydWN0IHFldGhfY2hhbm5lbCAqY2hhbm5lbCwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0JX191MTYgdGVtcDsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAgLCAyLCAiaWR4cmRjYiIpOwotCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9ET1dOKSB7Ci0JCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfQUNUSVZBVElORzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7Ci0JaWYgKHFldGhfY2hlY2tfaWR4X3Jlc3BvbnNlKGlvYi0+ZGF0YSkpIHsKLQkJCWdvdG8gb3V0OwotCX0KLQlpZiAoIShRRVRIX0lTX0lEWF9BQ1RfUE9TX1JFUExZKGlvYi0+ZGF0YSkpKSB7Ci0JCWlmIChRRVRIX0lEWF9BQ1RfQ0FVU0VfQ09ERShpb2ItPmRhdGEpID09IDB4MTkpCi0JCQlQUklOVF9FUlIoIklEWF9BQ1RJVkFURSBvbiByZWFkIGNoYW5uZWwgZGV2aWNlICVzOiAiCi0JCQkJImFkYXB0ZXIgZXhjbHVzaXZlbHkgdXNlZCBieSBhbm90aGVyIGhvc3RcbiIsCi0JCQkJQ0FSRF9SREVWX0lEKGNhcmQpKTsKLQkJZWxzZQotCQkJUFJJTlRfRVJSKCJJRFhfQUNUSVZBVEUgb24gcmVhZCBjaGFubmVsIGRldmljZSAlczogIgotCQkJCSJuZWdhdGl2ZSByZXBseVxuIiwgQ0FSRF9SREVWX0lEKGNhcmQpKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0vKioKLSAqIHRlbXBvcmFyeSBmaXggZm9yIG1pY3JvY29kZSBidWcKLSAqIHRvIHJldmVydCBpdCxyZXBsYWNlIE9SIGJ5IEFORAotICovCi0JaWYgKCAoIVFFVEhfSURYX05PX1BPUlROQU1FX1JFUVVJUkVEKGlvYi0+ZGF0YSkpIHx8Ci0JICAgICAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TQUUpICkKLQkJY2FyZC0+aW5mby5wb3J0bmFtZV9yZXF1aXJlZCA9IDE7Ci0KLQltZW1jcHkoJnRlbXAsIFFFVEhfSURYX0FDVF9GVU5DX0xFVkVMKGlvYi0+ZGF0YSksIDIpOwotCWlmICh0ZW1wICE9IHFldGhfcGVlcl9mdW5jX2xldmVsKGNhcmQtPmluZm8uZnVuY19sZXZlbCkpIHsKLQkJUFJJTlRfV0FSTigiSURYX0FDVElWQVRFIG9uIHJlYWQgY2hhbm5lbCBkZXZpY2UgJXM6IGZ1bmN0aW9uICIKLQkJCSJsZXZlbCBtaXNtYXRjaCAoc2VudDogMHgleCwgcmVjZWl2ZWQ6IDB4JXgpXG4iLAotCQkJQ0FSRF9SREVWX0lEKGNhcmQpLCBjYXJkLT5pbmZvLmZ1bmNfbGV2ZWwsIHRlbXApOwotCQlnb3RvIG91dDsKLQl9Ci0JbWVtY3B5KCZjYXJkLT50b2tlbi5pc3N1ZXJfcm1fciwKLQkgICAgICAgUUVUSF9JRFhfQUNUX0lTU1VFUl9STV9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCW1lbWNweSgmY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0sCi0JICAgICAgIFFFVEhfSURYX1JFUExZX0xFVkVMKGlvYi0+ZGF0YSksIFFFVEhfTUNMX0xFTkdUSCk7Ci0JY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9VUDsKLW91dDoKLQlxZXRoX3JlbGVhc2VfYnVmZmVyKGNoYW5uZWwsaW9iKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9pc3N1ZV9uZXh0X3JlYWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw1LCJpc3NueHJkIik7Ci0JaWYgKGNhcmQtPnJlYWQuc3RhdGUgIT0gQ0hfU1RBVEVfVVApCi0JCXJldHVybiAtRUlPOwotCWlvYiA9IHFldGhfZ2V0X2J1ZmZlcigmY2FyZC0+cmVhZCk7Ci0JaWYgKCFpb2IpIHsKLQkJUFJJTlRfV0FSTigiaXNzdWVfbmV4dF9yZWFkIGZhaWxlZDogbm8gaW9iIGF2YWlsYWJsZSFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcWV0aF9zZXR1cF9jY3coJmNhcmQtPnJlYWQsIGlvYi0+ZGF0YSwgUUVUSF9CVUZTSVpFKTsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAibm9pcnFwbmQiKTsKLQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2FyZC0+cmVhZC5jY3dkZXYsICZjYXJkLT5yZWFkLmNjdywKLQkJCSAgICAgIChhZGRyX3QpIGlvYiwgMCwgMCk7Ci0JaWYgKHJjKSB7Ci0JCVBSSU5UX0VSUigiRXJyb3IgaW4gc3RhcnRpbmcgbmV4dCByZWFkIGNjdyEgcmM9JWlcbiIsIHJjKTsKLQkJYXRvbWljX3NldCgmY2FyZC0+cmVhZC5pcnFfcGVuZGluZywgMCk7Ci0JCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7Ci0JCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX3JlcGx5ICoKLXFldGhfYWxsb2NfcmVwbHkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHk7Ci0KLQlyZXBseSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3JlcGx5KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlcGx5KXsKLQkJYXRvbWljX3NldCgmcmVwbHktPnJlZmNudCwgMSk7Ci0JCWF0b21pY19zZXQoJnJlcGx5LT5yZWNlaXZlZCwgMCk7Ci0JCXJlcGx5LT5jYXJkID0gY2FyZDsKLQl9OwotCXJldHVybiByZXBseTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfZ2V0X3JlcGx5KHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSkKLXsKLQlXQVJOX09OKGF0b21pY19yZWFkKCZyZXBseS0+cmVmY250KSA8PSAwKTsKLQlhdG9taWNfaW5jKCZyZXBseS0+cmVmY250KTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfcHV0X3JlcGx5KHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSkKLXsKLQlXQVJOX09OKGF0b21pY19yZWFkKCZyZXBseS0+cmVmY250KSA8PSAwKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmVwbHktPnJlZmNudCkpCi0JCWtmcmVlKHJlcGx5KTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfaXNzdWVfaXBhX21zZyhzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQsIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCWludCBjb207Ci0JY2hhciAqIGlwYV9uYW1lOwotCi0JY29tID0gY21kLT5oZHIuY29tbWFuZDsKLQlyYyAgPSBjbWQtPmhkci5yZXR1cm5fY29kZTsKLQlpcGFfbmFtZSA9IHFldGhfZ2V0X2lwYV9jbWRfbmFtZShjb20pOwotCi0JUFJJTlRfRVJSKCIlcyh4JVgpIGZvciAlcyByZXR1cm5lZCB4JVggXCIlc1wiXG4iLCBpcGFfbmFtZSwgY29tLAotCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYywgcWV0aF9nZXRfaXBhX21zZyhyYykpOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfaXBhX2NtZCAqCi1xZXRoX2NoZWNrX2lwYV9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQgPSBOVUxMOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw1LCJjaGtpcGFkIik7Ci0JaWYgKElTX0lQQShpb2ItPmRhdGEpKXsKLQkJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgUERVX0VOQ0FQU1VMQVRJT04oaW9iLT5kYXRhKTsKLQkJaWYgKElTX0lQQV9SRVBMWShjbWQpKSB7Ci0JCQlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpCi0JCQkJcWV0aF9pc3N1ZV9pcGFfbXNnKGNtZCwgY2FyZCk7Ci0JCQlyZXR1cm4gY21kOwotCQl9Ci0JCWVsc2UgewotCQkJc3dpdGNoIChjbWQtPmhkci5jb21tYW5kKSB7Ci0JCQljYXNlIElQQV9DTURfU1RPUExBTjoKLQkJCQlQUklOVF9XQVJOKCJMaW5rIGZhaWx1cmUgb24gJXMgKENIUElEIDB4JVgpIC0gIgotCQkJCQkgICAidGhlcmUgaXMgYSBuZXR3b3JrIHByb2JsZW0gb3IgIgotCQkJCQkgICAic29tZW9uZSBwdWxsZWQgdGhlIGNhYmxlIG9yICIKLQkJCQkJICAgImRpc2FibGVkIHRoZSBwb3J0LlxuIiwKLQkJCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwKLQkJCQkJICAgY2FyZC0+aW5mby5jaHBpZCk7Ci0JCQkJY2FyZC0+bGFuX29ubGluZSA9IDA7Ci0JCQkJaWYgKGNhcmQtPmRldiAmJiBuZXRpZl9jYXJyaWVyX29rKGNhcmQtPmRldikpCi0JCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGNhcmQtPmRldik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQljYXNlIElQQV9DTURfU1RBUlRMQU46Ci0JCQkJUFJJTlRfSU5GTygiTGluayByZWVzdGFibGlzaGVkIG9uICVzICIKLQkJCQkJICAgIihDSFBJRCAweCVYKS4gU2NoZWR1bGluZyAiCi0JCQkJCSAgICJJUCBhZGRyZXNzIHJlc2V0LlxuIiwKLQkJCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwKLQkJCQkJICAgY2FyZC0+aW5mby5jaHBpZCk7Ci0JCQkJbmV0aWZfY2Fycmllcl9vbihjYXJkLT5kZXYpOwotCQkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQljYXNlIElQQV9DTURfTU9EQ0NJRDoKLQkJCQlyZXR1cm4gY21kOwotCQkJY2FzZSBJUEFfQ01EX1JFR0lTVEVSX0xPQ0FMX0FERFI6Ci0JCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCAiaXJsYSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJUEFfQ01EX1VOUkVHSVNURVJfTE9DQUxfQUREUjoKLQkJCQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsICJ1cmxhIik7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVBSSU5UX1dBUk4oIlJlY2VpdmVkIGRhdGEgaXMgSVBBICIKLQkJCQkJICAgImJ1dCBub3QgYSByZXBseSFcbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBjbWQ7Ci19Ci0KLS8qKgotICogd2FrZSBhbGwgd2FpdGluZyBpcGEgY29tbWFuZHMKLSAqLwotc3RhdGljIHZvaWQKLXFldGhfY2xlYXJfaXBhY21kX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksICpyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiY2xpcGFsc3QiKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcGx5LCByLCAmY2FyZC0+Y21kX3dhaXRlcl9saXN0LCBsaXN0KSB7Ci0JCXFldGhfZ2V0X3JlcGx5KHJlcGx5KTsKLQkJcmVwbHktPnJjID0gLUVJTzsKLQkJYXRvbWljX2luYygmcmVwbHktPnJlY2VpdmVkKTsKLQkJbGlzdF9kZWxfaW5pdCgmcmVwbHktPmxpc3QpOwotCQl3YWtlX3VwKCZyZXBseS0+d2FpdF9xKTsKLQkJcWV0aF9wdXRfcmVwbHkocmVwbHkpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3NlbmRfY29udHJvbF9kYXRhX2NiKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwsCi0JCQkgIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgKnI7Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGtlZXBfcmVwbHk7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNuZGN0bGNiIik7Ci0KLQljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKLQlpZiAocWV0aF9jaGVja19pZHhfcmVzcG9uc2UoaW9iLT5kYXRhKSkgewotCQlxZXRoX2NsZWFyX2lwYWNtZF9saXN0KGNhcmQpOwotCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljbWQgPSBxZXRoX2NoZWNrX2lwYV9kYXRhKGNhcmQsIGlvYik7Ci0JaWYgKChjbWQgPT0gTlVMTCkgJiYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikpCi0JCWdvdG8gb3V0OwotCS8qaW4gY2FzZSBvZiBPU04gOiBjaGVjayBpZiBjbWQgaXMgc2V0ICovCi0JaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04gJiYKLQkgICAgY21kICYmCi0JICAgIGNtZC0+aGRyLmNvbW1hbmQgIT0gSVBBX0NNRF9TVEFSVExBTiAmJgotCSAgICBjYXJkLT5vc25faW5mby5hc3Npc3RfY2IgIT0gTlVMTCkgewotCQljYXJkLT5vc25faW5mby5hc3Npc3RfY2IoY2FyZC0+ZGV2LCBjbWQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXBseSwgciwgJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCwgbGlzdCkgewotCQlpZiAoKHJlcGx5LT5zZXFubyA9PSBRRVRIX0lEWF9DT01NQU5EX1NFUU5PKSB8fAotCQkgICAgKChjbWQpICYmIChyZXBseS0+c2Vxbm8gPT0gY21kLT5oZHIuc2Vxbm8pKSkgewotCQkJcWV0aF9nZXRfcmVwbHkocmVwbHkpOwotCQkJbGlzdF9kZWxfaW5pdCgmcmVwbHktPmxpc3QpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCQkJa2VlcF9yZXBseSA9IDA7Ci0JCQlpZiAocmVwbHktPmNhbGxiYWNrICE9IE5VTEwpIHsKLQkJCQlpZiAoY21kKSB7Ci0JCQkJCXJlcGx5LT5vZmZzZXQgPSAoX191MTYpKChjaGFyKiljbWQgLQotCQkJCQkJCQkoY2hhciAqKWlvYi0+ZGF0YSk7Ci0JCQkJCWtlZXBfcmVwbHkgPSByZXBseS0+Y2FsbGJhY2soY2FyZCwKLQkJCQkJCQlyZXBseSwKLQkJCQkJCQkodW5zaWduZWQgbG9uZyljbWQpOwotCQkJCX0gZWxzZQotCQkJCQlrZWVwX3JlcGx5ID0gcmVwbHktPmNhbGxiYWNrKGNhcmQsCi0JCQkJCQkJcmVwbHksCi0JCQkJCQkJKHVuc2lnbmVkIGxvbmcpaW9iKTsKLQkJCX0KLQkJCWlmIChjbWQpCi0JCQkJcmVwbHktPnJjID0gKHUxNikgY21kLT5oZHIucmV0dXJuX2NvZGU7Ci0JCQllbHNlIGlmIChpb2ItPnJjKQotCQkJCXJlcGx5LT5yYyA9IGlvYi0+cmM7Ci0JCQlpZiAoa2VlcF9yZXBseSkgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmcmVwbHktPmxpc3QsCi0JCQkJCSAgICAgICZjYXJkLT5jbWRfd2FpdGVyX2xpc3QpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYXRvbWljX2luYygmcmVwbHktPnJlY2VpdmVkKTsKLQkJCQl3YWtlX3VwKCZyZXBseS0+d2FpdF9xKTsKLQkJCX0KLQkJCXFldGhfcHV0X3JlcGx5KHJlcGx5KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLW91dDoKLQltZW1jcHkoJmNhcmQtPnNlcW5vLnBkdV9oZHJfYWNrLAotCQlRRVRIX1BEVV9IRUFERVJfU0VRX05PKGlvYi0+ZGF0YSksCi0JCVFFVEhfU0VRX05PX0xFTkdUSCk7Ci0JcWV0aF9yZWxlYXNlX2J1ZmZlcihjaGFubmVsLGlvYik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3ByZXBhcmVfY29udHJvbF9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBsZW4sCi0JCQkgIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKLXsKLQlxZXRoX3NldHVwX2NjdygmY2FyZC0+d3JpdGUsaW9iLT5kYXRhLGxlbik7Ci0JaW9iLT5jYWxsYmFjayA9IHFldGhfcmVsZWFzZV9idWZmZXI7Ci0KLQltZW1jcHkoUUVUSF9UUkFOU1BPUlRfSEVBREVSX1NFUV9OTyhpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+c2Vxbm8udHJhbnNfaGRyLCBRRVRIX1NFUV9OT19MRU5HVEgpOwotCWNhcmQtPnNlcW5vLnRyYW5zX2hkcisrOwotCW1lbWNweShRRVRIX1BEVV9IRUFERVJfU0VRX05PKGlvYi0+ZGF0YSksCi0JICAgICAgICZjYXJkLT5zZXFuby5wZHVfaGRyLCBRRVRIX1NFUV9OT19MRU5HVEgpOwotCWNhcmQtPnNlcW5vLnBkdV9oZHIrKzsKLQltZW1jcHkoUUVUSF9QRFVfSEVBREVSX0FDS19TRVFfTk8oaW9iLT5kYXRhKSwKLQkgICAgICAgJmNhcmQtPnNlcW5vLnBkdV9oZHJfYWNrLCBRRVRIX1NFUV9OT19MRU5HVEgpOwotCVFFVEhfREJGX0hFWChjb250cm9sLCAyLCBpb2ItPmRhdGEsIFFFVEhfREJGX0NPTlRST0xfTEVOKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgbGVuLAotCQkgICAgICAgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iLAotCQkgICAgICAgaW50ICgqcmVwbHlfY2IpCi0JCSAgICAgICAoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9yZXBseSosIHVuc2lnbmVkIGxvbmcpLAotCQkgICAgICAgdm9pZCAqcmVwbHlfcGFyYW0pCi0KLXsKLQlpbnQgcmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHkgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJzZW5kY3RsIik7Ci0KLQlyZXBseSA9IHFldGhfYWxsb2NfcmVwbHkoY2FyZCk7Ci0JaWYgKCFyZXBseSkgewotCQlQUklOVF9XQVJOKCJDb3VsZCBubyBhbGxvYyBxZXRoX3JlcGx5IVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXBseS0+Y2FsbGJhY2sgPSByZXBseV9jYjsKLQlyZXBseS0+cGFyYW0gPSByZXBseV9wYXJhbTsKLQlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9ET1dOKQotCQlyZXBseS0+c2Vxbm8gPSBRRVRIX0lEWF9DT01NQU5EX1NFUU5POwotCWVsc2UKLQkJcmVwbHktPnNlcW5vID0gY2FyZC0+c2Vxbm8uaXBhKys7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcmVwbHktPndhaXRfcSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZyZXBseS0+bGlzdCwgJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCVFFVEhfREJGX0hFWChjb250cm9sLCAyLCBpb2ItPmRhdGEsIFFFVEhfREJGX0NPTlRST0xfTEVOKTsKLQotCXdoaWxlIChhdG9taWNfY21weGNoZygmY2FyZC0+d3JpdGUuaXJxX3BlbmRpbmcsIDAsIDEpKSA7Ci0JcWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YShjYXJkLCBsZW4sIGlvYik7Ci0KLQlpZiAoSVNfSVBBKGlvYi0+ZGF0YSkpCi0JCXRpbWVvdXQgPSBqaWZmaWVzICsgUUVUSF9JUEFfVElNRU9VVDsKLQllbHNlCi0JCXRpbWVvdXQgPSBqaWZmaWVzICsgUUVUSF9USU1FT1VUOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgIm5vaXJxcG5kIik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKLQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2FyZC0+d3JpdGUuY2N3ZGV2LCAmY2FyZC0+d3JpdGUuY2N3LAotCQkJICAgICAgKGFkZHJfdCkgaW9iLCAwLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjYXJkLT53cml0ZS5jY3dkZXYpLCBmbGFncyk7Ci0JaWYgKHJjKXsKLQkJUFJJTlRfV0FSTigicWV0aF9zZW5kX2NvbnRyb2xfZGF0YTogIgotCQkJICAgImNjd19kZXZpY2Vfc3RhcnQgcmMgPSAlaVxuIiwgcmMpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIiBlcnIlZCIsIHJjKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJbGlzdF9kZWxfaW5pdCgmcmVwbHktPmxpc3QpOwotCQlxZXRoX3B1dF9yZXBseShyZXBseSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJcWV0aF9yZWxlYXNlX2J1ZmZlcihpb2ItPmNoYW5uZWwsIGlvYik7Ci0JCWF0b21pY19zZXQoJmNhcmQtPndyaXRlLmlycV9wZW5kaW5nLCAwKTsKLQkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKLQkJcmV0dXJuIHJjOwotCX0KLQl3aGlsZSAoIWF0b21pY19yZWFkKCZyZXBseS0+cmVjZWl2ZWQpKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmVwbHktPmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJCWxpc3RfZGVsX2luaXQoJnJlcGx5LT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcGx5LT5jYXJkLT5sb2NrLCBmbGFncyk7Ci0JCQlyZXBseS0+cmMgPSAtRVRJTUU7Ci0JCQlhdG9taWNfaW5jKCZyZXBseS0+cmVjZWl2ZWQpOwotCQkJd2FrZV91cCgmcmVwbHktPndhaXRfcSk7Ci0JCX0KLQkJY3B1X3JlbGF4KCk7Ci0JfTsKLQlyYyA9IHJlcGx5LT5yYzsKLQlxZXRoX3B1dF9yZXBseShyZXBseSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX29zbl9zZW5kX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgbGVuLAotCQkJICAgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjID0gMDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJvc25kY3RyZCIpOwotCi0Jd2FpdF9ldmVudChjYXJkLT53YWl0X3EsCi0JCSAgIGF0b21pY19jbXB4Y2hnKCZjYXJkLT53cml0ZS5pcnFfcGVuZGluZywgMCwgMSkgPT0gMCk7Ci0JcWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YShjYXJkLCBsZW4sIGlvYik7Ci0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgIm9zbm9pcnFwIik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKLQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2FyZC0+d3JpdGUuY2N3ZGV2LCAmY2FyZC0+d3JpdGUuY2N3LAotCQkJICAgICAgKGFkZHJfdCkgaW9iLCAwLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjYXJkLT53cml0ZS5jY3dkZXYpLCBmbGFncyk7Ci0JaWYgKHJjKXsKLQkJUFJJTlRfV0FSTigicWV0aF9vc25fc2VuZF9jb250cm9sX2RhdGE6ICIKLQkJCSAgICJjY3dfZGV2aWNlX3N0YXJ0IHJjID0gJWlcbiIsIHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIgZXJyJWQiLCByYyk7Ci0JCXFldGhfcmVsZWFzZV9idWZmZXIoaW9iLT5jaGFubmVsLCBpb2IpOwotCQlhdG9taWNfc2V0KCZjYXJkLT53cml0ZS5pcnFfcGVuZGluZywgMCk7Ci0JCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1xZXRoX3ByZXBhcmVfaXBhX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCi0JCSAgICAgY2hhciBwcm90X3R5cGUpCi17Ci0JbWVtY3B5KGlvYi0+ZGF0YSwgSVBBX1BEVV9IRUFERVIsIElQQV9QRFVfSEVBREVSX1NJWkUpOwotCW1lbWNweShRRVRIX0lQQV9DTURfUFJPVF9UWVBFKGlvYi0+ZGF0YSksJnByb3RfdHlwZSwxKTsKLQltZW1jcHkoUUVUSF9JUEFfQ01EX0RFU1RfQUREUihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4udWxwX2Nvbm5lY3Rpb25fciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9vc25fc2VuZF9pcGFfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKLQkJICAgICAgaW50IGRhdGFfbGVuKQotewotCXUxNiBzMSwgczI7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsIm9zbmRpcGEiKTsKLQotCXFldGhfcHJlcGFyZV9pcGFfY21kKGNhcmQsIGlvYiwgUUVUSF9QUk9UX09TTjIpOwotCXMxID0gKHUxNikoSVBBX1BEVV9IRUFERVJfU0laRSArIGRhdGFfbGVuKTsKLQlzMiA9ICh1MTYpZGF0YV9sZW47Ci0JbWVtY3B5KFFFVEhfSVBBX1BEVV9MRU5fVE9UQUwoaW9iLT5kYXRhKSwgJnMxLCAyKTsKLQltZW1jcHkoUUVUSF9JUEFfUERVX0xFTl9QRFUxKGlvYi0+ZGF0YSksICZzMiwgMik7Ci0JbWVtY3B5KFFFVEhfSVBBX1BEVV9MRU5fUERVMihpb2ItPmRhdGEpLCAmczIsIDIpOwotCW1lbWNweShRRVRIX0lQQV9QRFVfTEVOX1BEVTMoaW9iLT5kYXRhKSwgJnMyLCAyKTsKLQlyZXR1cm4gcWV0aF9vc25fc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgczEsIGlvYik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2VuZF9pcGFfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKLQkJICBpbnQgKCpyZXBseV9jYikKLQkJICAoc3RydWN0IHFldGhfY2FyZCAqLHN0cnVjdCBxZXRoX3JlcGx5KiwgdW5zaWduZWQgbG9uZyksCi0JCSAgdm9pZCAqcmVwbHlfcGFyYW0pCi17Ci0JaW50IHJjOwotCWNoYXIgcHJvdF90eXBlOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJzZW5kaXBhIik7Ci0KLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQotCQkJcHJvdF90eXBlID0gUUVUSF9QUk9UX09TTjI7Ci0JCWVsc2UKLQkJCXByb3RfdHlwZSA9IFFFVEhfUFJPVF9MQVlFUjI7Ci0JZWxzZQotCQlwcm90X3R5cGUgPSBRRVRIX1BST1RfVENQSVA7Ci0JcWV0aF9wcmVwYXJlX2lwYV9jbWQoY2FyZCxpb2IscHJvdF90eXBlKTsKLQlyYyA9IHFldGhfc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgSVBBX0NNRF9MRU5HVEgsIGlvYiwKLQkJCQkgICAgcmVwbHlfY2IsIHJlcGx5X3BhcmFtKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLQotc3RhdGljIGludAotcWV0aF9jbV9lbmFibGVfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkgIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiY21lbmJsY2IiKTsKLQotCWlvYiA9IChzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICopIGRhdGE7Ci0JbWVtY3B5KCZjYXJkLT50b2tlbi5jbV9maWx0ZXJfciwKLQkgICAgICAgUUVUSF9DTV9FTkFCTEVfUkVTUF9GSUxURVJfVE9LRU4oaW9iLT5kYXRhKSwKLQkgICAgICAgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIiAgcmMlZCIsIGlvYi0+cmMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2NtX2VuYWJsZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwLDIsImNtZW5hYmxlIik7Ci0KLQlpb2IgPSBxZXRoX3dhaXRfZm9yX2J1ZmZlcigmY2FyZC0+d3JpdGUpOwotCW1lbWNweShpb2ItPmRhdGEsIENNX0VOQUJMRSwgQ01fRU5BQkxFX1NJWkUpOwotCW1lbWNweShRRVRIX0NNX0VOQUJMRV9JU1NVRVJfUk1fVE9LRU4oaW9iLT5kYXRhKSwKLQkgICAgICAgJmNhcmQtPnRva2VuLmlzc3Vlcl9ybV9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCW1lbWNweShRRVRIX0NNX0VOQUJMRV9GSUxURVJfVE9LRU4oaW9iLT5kYXRhKSwKLQkgICAgICAgJmNhcmQtPnRva2VuLmNtX2ZpbHRlcl93LCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCi0JcmMgPSBxZXRoX3NlbmRfY29udHJvbF9kYXRhKGNhcmQsIENNX0VOQUJMRV9TSVpFLCBpb2IsCi0JCQkJICAgIHFldGhfY21fZW5hYmxlX2NiLCBOVUxMKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfY21fc2V0dXBfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCi0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgImNtc2V0cGNiIik7Ci0KLQlpb2IgPSAoc3RydWN0IHFldGhfY21kX2J1ZmZlciAqKSBkYXRhOwotCW1lbWNweSgmY2FyZC0+dG9rZW4uY21fY29ubmVjdGlvbl9yLAotCSAgICAgICBRRVRIX0NNX1NFVFVQX1JFU1BfREVTVF9BRERSKGlvYi0+ZGF0YSksCi0JICAgICAgIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcWV0aF9jbV9zZXR1cChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwLDIsImNtc2V0dXAiKTsKLQotCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7Ci0JbWVtY3B5KGlvYi0+ZGF0YSwgQ01fU0VUVVAsIENNX1NFVFVQX1NJWkUpOwotCW1lbWNweShRRVRIX0NNX1NFVFVQX0RFU1RfQUREUihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4uaXNzdWVyX3JtX3IsIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JbWVtY3B5KFFFVEhfQ01fU0VUVVBfQ09OTkVDVElPTl9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4uY21fY29ubmVjdGlvbl93LCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCW1lbWNweShRRVRIX0NNX1NFVFVQX0ZJTFRFUl9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4uY21fZmlsdGVyX3IsIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JcmMgPSBxZXRoX3NlbmRfY29udHJvbF9kYXRhKGNhcmQsIENNX1NFVFVQX1NJWkUsIGlvYiwKLQkJCQkgICAgcWV0aF9jbV9zZXR1cF9jYiwgTlVMTCk7Ci0JcmV0dXJuIHJjOwotCi19Ci0KLXN0YXRpYyBpbnQKLXFldGhfdWxwX2VuYWJsZV9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCi0JCSAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQotCV9fdTE2IG10dSwgZnJhbWVzaXplOwotCV9fdTE2IGxlbjsKLQlfX3U4IGxpbmtfdHlwZTsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAidWxwZW5hY2IiKTsKLQotCWlvYiA9IChzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICopIGRhdGE7Ci0JbWVtY3B5KCZjYXJkLT50b2tlbi51bHBfZmlsdGVyX3IsCi0JICAgICAgIFFFVEhfVUxQX0VOQUJMRV9SRVNQX0ZJTFRFUl9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCWlmIChxZXRoX2dldF9tdHVfb3V0X29mX21wYyhjYXJkLT5pbmZvLnR5cGUpKSB7Ci0JCW1lbWNweSgmZnJhbWVzaXplLCBRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKGlvYi0+ZGF0YSksIDIpOwotCQltdHUgPSBxZXRoX2dldF9tdHVfb3V0b2ZfZnJhbWVzaXplKGZyYW1lc2l6ZSk7Ci0JCWlmICghbXR1KSB7Ci0JCQlpb2ItPnJjID0gLUVJTlZBTDsKLQkJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiICByYyVkIiwgaW9iLT5yYyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXJkLT5pbmZvLm1heF9tdHUgPSBtdHU7Ci0JCWNhcmQtPmluZm8uaW5pdGlhbF9tdHUgPSBtdHU7Ci0JCWNhcmQtPnFkaW8uaW5fYnVmX3NpemUgPSBtdHUgKyAyICogUEFHRV9TSVpFOwotCX0gZWxzZSB7Ci0JCWNhcmQtPmluZm8uaW5pdGlhbF9tdHUgPSBxZXRoX2dldF9pbml0aWFsX210dV9mb3JfY2FyZChjYXJkKTsKLQkJY2FyZC0+aW5mby5tYXhfbXR1ID0gcWV0aF9nZXRfbWF4X210dV9mb3JfY2FyZChjYXJkLT5pbmZvLnR5cGUpOwotCQljYXJkLT5xZGlvLmluX2J1Zl9zaXplID0gUUVUSF9JTl9CVUZfU0laRV9ERUZBVUxUOwotCX0KLQotCW1lbWNweSgmbGVuLCBRRVRIX1VMUF9FTkFCTEVfUkVTUF9ESUZJTkZPX0xFTihpb2ItPmRhdGEpLCAyKTsKLQlpZiAobGVuID49IFFFVEhfTVBDX0RJRklORk9fTEVOX0lORElDQVRFU19MSU5LX1RZUEUpIHsKLQkJbWVtY3B5KCZsaW5rX3R5cGUsCi0JCSAgICAgICBRRVRIX1VMUF9FTkFCTEVfUkVTUF9MSU5LX1RZUEUoaW9iLT5kYXRhKSwgMSk7Ci0JCWNhcmQtPmluZm8ubGlua190eXBlID0gbGlua190eXBlOwotCX0gZWxzZQotCQljYXJkLT5pbmZvLmxpbmtfdHlwZSA9IDA7Ci0JUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcWV0aF91bHBfZW5hYmxlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCWNoYXIgcHJvdF90eXBlOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQotCS8qRklYTUU6IHRyYWNlIHZpZXcgY2FsbGJhY2tzKi8KLQlRRVRIX0RCRl9URVhUKHNldHVwLDIsInVscGVuYWJsIik7Ci0KLQlpb2IgPSBxZXRoX3dhaXRfZm9yX2J1ZmZlcigmY2FyZC0+d3JpdGUpOwotCW1lbWNweShpb2ItPmRhdGEsIFVMUF9FTkFCTEUsIFVMUF9FTkFCTEVfU0laRSk7Ci0KLQkqKFFFVEhfVUxQX0VOQUJMRV9MSU5LTlVNKGlvYi0+ZGF0YSkpID0KLQkJKF9fdTgpIGNhcmQtPmluZm8ucG9ydG5vOwotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKLQkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCi0JCQlwcm90X3R5cGUgPSBRRVRIX1BST1RfT1NOMjsKLQkJZWxzZQotCQkJcHJvdF90eXBlID0gUUVUSF9QUk9UX0xBWUVSMjsKLQllbHNlCi0JCXByb3RfdHlwZSA9IFFFVEhfUFJPVF9UQ1BJUDsKLQotCW1lbWNweShRRVRIX1VMUF9FTkFCTEVfUFJPVF9UWVBFKGlvYi0+ZGF0YSksJnByb3RfdHlwZSwxKTsKLQltZW1jcHkoUUVUSF9VTFBfRU5BQkxFX0RFU1RfQUREUihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4uY21fY29ubmVjdGlvbl9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCW1lbWNweShRRVRIX1VMUF9FTkFCTEVfRklMVEVSX1RPS0VOKGlvYi0+ZGF0YSksCi0JICAgICAgICZjYXJkLT50b2tlbi51bHBfZmlsdGVyX3csIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JbWVtY3B5KFFFVEhfVUxQX0VOQUJMRV9QT1JUTkFNRV9BTkRfTEwoaW9iLT5kYXRhKSwKLQkgICAgICAgY2FyZC0+aW5mby5wb3J0bmFtZSwgOSk7Ci0JcmMgPSBxZXRoX3NlbmRfY29udHJvbF9kYXRhKGNhcmQsIFVMUF9FTkFCTEVfU0laRSwgaW9iLAotCQkJCSAgICBxZXRoX3VscF9lbmFibGVfY2IsIE5VTEwpOwotCXJldHVybiByYzsKLQotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3VscF9zZXR1cF9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCi0JCSAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJ1bHBzdHBjYiIpOwotCi0JaW9iID0gKHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKikgZGF0YTsKLQltZW1jcHkoJmNhcmQtPnRva2VuLnVscF9jb25uZWN0aW9uX3IsCi0JICAgICAgIFFFVEhfVUxQX1NFVFVQX1JFU1BfQ09OTkVDVElPTl9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiICByYyVkIiwgaW9iLT5yYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfdWxwX3NldHVwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCV9fdTE2IHRlbXA7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsMiwidWxwc2V0dXAiKTsKLQotCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7Ci0JbWVtY3B5KGlvYi0+ZGF0YSwgVUxQX1NFVFVQLCBVTFBfU0VUVVBfU0laRSk7Ci0KLQltZW1jcHkoUUVUSF9VTFBfU0VUVVBfREVTVF9BRERSKGlvYi0+ZGF0YSksCi0JICAgICAgICZjYXJkLT50b2tlbi5jbV9jb25uZWN0aW9uX3IsIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JbWVtY3B5KFFFVEhfVUxQX1NFVFVQX0NPTk5FQ1RJT05fVE9LRU4oaW9iLT5kYXRhKSwKLQkgICAgICAgJmNhcmQtPnRva2VuLnVscF9jb25uZWN0aW9uX3csIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JbWVtY3B5KFFFVEhfVUxQX1NFVFVQX0ZJTFRFUl9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4udWxwX2ZpbHRlcl9yLCBRRVRIX01QQ19UT0tFTl9MRU5HVEgpOwotCi0JY2N3X2RldmljZV9nZXRfaWQoQ0FSRF9EREVWKGNhcmQpLCAmZGV2X2lkKTsKLQltZW1jcHkoUUVUSF9VTFBfU0VUVVBfQ1VBKGlvYi0+ZGF0YSksICZkZXZfaWQuZGV2bm8sIDIpOwotCXRlbXAgPSAoY2FyZC0+aW5mby5jdWxhIDw8IDgpICsgY2FyZC0+aW5mby51bml0X2FkZHIyOwotCW1lbWNweShRRVRIX1VMUF9TRVRVUF9SRUFMX0RFVkFERFIoaW9iLT5kYXRhKSwgJnRlbXAsIDIpOwotCXJjID0gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShjYXJkLCBVTFBfU0VUVVBfU0laRSwgaW9iLAotCQkJCSAgICBxZXRoX3VscF9zZXR1cF9jYiwgTlVMTCk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9jaGVja19xZGlvX2Vycm9ycyhzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZiwgdW5zaWduZWQgaW50IHFkaW9fZXJyb3IsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgc2lnYV9lcnJvciwgY29uc3QgY2hhciAqZGJmdGV4dCkKLXsKLQlpZiAocWRpb19lcnJvciB8fCBzaWdhX2Vycm9yKSB7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsIGRiZnRleHQpOwotCQlRRVRIX0RCRl9URVhUKHFlcnIsIDIsIGRiZnRleHQpOwotCQlRRVRIX0RCRl9URVhUXyhxZXJyLCAyLCAiIEYxNT0lMDJYIiwKLQkJCSAgICAgICBidWYtPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZik7Ci0JCVFFVEhfREJGX1RFWFRfKHFlcnIsIDIsICIgRjE0PSUwMlgiLAotCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmKTsKLQkJUUVUSF9EQkZfVEVYVF8ocWVyciwgMiwgIiBxZXJyPSVYIiwgcWRpb19lcnJvcik7Ci0JCVFFVEhfREJGX1RFWFRfKHFlcnIsIDIsICIgc2Vycj0lWCIsIHNpZ2FfZXJyb3IpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1xZXRoX2dldF9za2IodW5zaWduZWQgaW50IGxlbmd0aCwgc3RydWN0IHFldGhfaGRyICpoZHIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYqIHNrYjsKLQlpbnQgYWRkX2xlbjsKLQotCWFkZF9sZW4gPSAwOwotCWlmIChoZHItPmhkci5vc24uaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9PU04pCi0JCWFkZF9sZW4gPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCi0JZWxzZQotCQlhZGRfbGVuID0gVkxBTl9ITEVOOwotI2VuZGlmCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGggKyBhZGRfbGVuKTsKLQlpZiAoc2tiICYmIGFkZF9sZW4pCi0JCXNrYl9yZXNlcnZlKHNrYiwgYWRkX2xlbik7Ci0JcmV0dXJuIHNrYjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXFldGhfY3JlYXRlX3NrYl9mcmFnKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICplbGVtZW50LAotCQkgICAgIHN0cnVjdCBza19idWZmICoqcHNrYiwKLQkJICAgICBpbnQgb2Zmc2V0LCBpbnQgKnBmcmFnLCBpbnQgZGF0YV9sZW4pCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZWxlbWVudC0+YWRkcik7Ci0JaWYgKCpwZnJhZyA9PSAwKSB7Ci0JCS8qIHRoZSB1cHBlciBwcm90b2NvbCBsYXllcnMgYXNzdW1lIHRoYXQgdGhlcmUgaXMgZGF0YSBpbiB0aGUKLQkJICogc2tiIGl0c2VsZi4gQ29weSBhIHNtYWxsIGFtb3VudCAoNjQgYnl0ZXMpIHRvIG1ha2UgdGhlbQotCQkgKiBoYXBweS4gKi8KLQkJKnBza2IgPSBkZXZfYWxsb2Nfc2tiKDY0ICsgUUVUSF9GQUtFX0xMX0xFTl9FVEgpOwotCQlpZiAoISgqcHNrYikpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJc2tiX3Jlc2VydmUoKnBza2IsIFFFVEhfRkFLRV9MTF9MRU5fRVRIKTsKLQkJaWYgKGRhdGFfbGVuIDw9IDY0KSB7Ci0JCQltZW1jcHkoc2tiX3B1dCgqcHNrYiwgZGF0YV9sZW4pLCBlbGVtZW50LT5hZGRyICsgb2Zmc2V0LAotCQkJCWRhdGFfbGVuKTsKLQkJfSBlbHNlIHsKLQkJCWdldF9wYWdlKHBhZ2UpOwotCQkJbWVtY3B5KHNrYl9wdXQoKnBza2IsIDY0KSwgZWxlbWVudC0+YWRkciArIG9mZnNldCwgNjQpOwotCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKCpwc2tiLCAqcGZyYWcsIHBhZ2UsIG9mZnNldCArIDY0LAotCQkJCWRhdGFfbGVuIC0gNjQpOwotCQkJKCpwc2tiKS0+ZGF0YV9sZW4gKz0gZGF0YV9sZW4gLSA2NDsKLQkJCSgqcHNrYiktPmxlbgkgICs9IGRhdGFfbGVuIC0gNjQ7Ci0JCQkoKnBza2IpLT50cnVlc2l6ZSArPSBkYXRhX2xlbiAtIDY0OwotCQl9Ci0JfSBlbHNlIHsKLQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCXNrYl9maWxsX3BhZ2VfZGVzYygqcHNrYiwgKnBmcmFnLCBwYWdlLCBvZmZzZXQsIGRhdGFfbGVuKTsKLQkJKCpwc2tiKS0+ZGF0YV9sZW4gKz0gZGF0YV9sZW47Ci0JCSgqcHNrYiktPmxlbgkgICs9IGRhdGFfbGVuOwotCQkoKnBza2IpLT50cnVlc2l6ZSArPSBkYXRhX2xlbjsKLQl9Ci0JKCpwZnJhZykrKzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqCi1xZXRoX2ZpbmRfZnJlZV9idWZmZXJfcG9vbF9lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBsaDsKLQlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqZW50cnk7Ci0JaW50IGksIGZyZWU7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlpZiAobGlzdF9lbXB0eSgmY2FyZC0+cWRpby5pbl9idWZfcG9vbC5lbnRyeV9saXN0KSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoKHBsaCwgJmNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuZW50cnlfbGlzdCkgewotCQllbnRyeSA9IGxpc3RfZW50cnkocGxoLCBzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSwgbGlzdCk7Ci0JCWZyZWUgPSAxOwotCQlmb3IgKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpIHsKLQkJCWlmIChwYWdlX2NvdW50KHZpcnRfdG9fcGFnZShlbnRyeS0+ZWxlbWVudHNbaV0pKSA+IDEpIHsKLQkJCQlmcmVlID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoZnJlZSkgewotCQkJbGlzdF9kZWxfaW5pdCgmZW50cnktPmxpc3QpOwotCQkJcmV0dXJuIGVudHJ5OwotCQl9Ci0JfQotCi0JLyogbm8gZnJlZSBidWZmZXIgaW4gcG9vbCBzbyB0YWtlIGZpcnN0IG9uZSBhbmQgc3dhcCBwYWdlcyAqLwotCWVudHJ5ID0gbGlzdF9lbnRyeShjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmVudHJ5X2xpc3QubmV4dCwKLQkJCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5LCBsaXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpIHsKLQkJaWYgKHBhZ2VfY291bnQodmlydF90b19wYWdlKGVudHJ5LT5lbGVtZW50c1tpXSkpID4gMSkgewotCQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQ3xHRlBfRE1BKTsKLQkJCWlmICghcGFnZSkgewotCQkJCXJldHVybiBOVUxMOwotCQkJfSBlbHNlIHsKLQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZW50cnktPmVsZW1lbnRzW2ldKTsKLQkJCQllbnRyeS0+ZWxlbWVudHNbaV0gPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JCQkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCi0JCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfYWxsb2NfcGFnZV9yeCsrOwotCQkJfQotCQl9Ci0JfQotCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5saXN0KTsKLQlyZXR1cm4gZW50cnk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1xZXRoX2dldF9uZXh0X3NrYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlciwKLQkJICBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqKl9fZWxlbWVudCwgaW50ICpfX29mZnNldCwKLQkJICBzdHJ1Y3QgcWV0aF9oZHIgKipoZHIpCi17Ci0Jc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKmVsZW1lbnQgPSAqX19lbGVtZW50OwotCWludCBvZmZzZXQgPSAqX19vZmZzZXQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JaW50IHNrYl9sZW47Ci0Jdm9pZCAqZGF0YV9wdHI7Ci0JaW50IGRhdGFfbGVuOwotCWludCB1c2Vfcnhfc2cgPSAwOwotCWludCBmcmFnID0gMDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNiwibmV4dHNrYiIpOwotCS8qIHFldGhfaGRyIG11c3Qgbm90IGNyb3NzIGVsZW1lbnQgYm91bmRhcmllcyAqLwotCWlmIChlbGVtZW50LT5sZW5ndGggPCBvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSl7Ci0JCWlmIChxZXRoX2lzX2xhc3Rfc2JhbGUoZWxlbWVudCkpCi0JCQlyZXR1cm4gTlVMTDsKLQkJZWxlbWVudCsrOwotCQlvZmZzZXQgPSAwOwotCQlpZiAoZWxlbWVudC0+bGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0JKmhkciA9IGVsZW1lbnQtPmFkZHIgKyBvZmZzZXQ7Ci0KLQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7Ci0JaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKQotCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKLQkJCXNrYl9sZW4gPSAoKmhkciktPmhkci5vc24ucGR1X2xlbmd0aDsKLQkJZWxzZQotCQkJc2tiX2xlbiA9ICgqaGRyKS0+aGRyLmwyLnBrdF9sZW5ndGg7Ci0JZWxzZQotCQlza2JfbGVuID0gKCpoZHIpLT5oZHIubDMubGVuZ3RoOwotCi0JaWYgKCFza2JfbGVuKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoKHNrYl9sZW4gPj0gY2FyZC0+b3B0aW9ucy5yeF9zZ19jYikgJiYKLQkgICAgKCEoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikpICYmCi0JICAgICghYXRvbWljX3JlYWQoJmNhcmQtPmZvcmNlX2FsbG9jX3NrYikpKSB7Ci0JCXVzZV9yeF9zZyA9IDE7Ci0JfSBlbHNlIHsKLQkJaWYgKGNhcmQtPm9wdGlvbnMuZmFrZV9sbCkgewotCQkJaWYgKGNhcmQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMl9UUikgewotCQkJCWlmICghKHNrYiA9IHFldGhfZ2V0X3NrYihza2JfbGVuICsKLQkJCQkJCVFFVEhfRkFLRV9MTF9MRU5fVFIsICpoZHIpKSkKLQkJCQkJZ290byBub19tZW07Ci0JCQkJc2tiX3Jlc2VydmUoc2tiLCBRRVRIX0ZBS0VfTExfTEVOX1RSKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCEoc2tiID0gcWV0aF9nZXRfc2tiKHNrYl9sZW4gKwotCQkJCQkJUUVUSF9GQUtFX0xMX0xFTl9FVEgsICpoZHIpKSkKLQkJCQkJZ290byBub19tZW07Ci0JCQkJc2tiX3Jlc2VydmUoc2tiLCBRRVRIX0ZBS0VfTExfTEVOX0VUSCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlza2IgPSBxZXRoX2dldF9za2Ioc2tiX2xlbiwgKmhkcik7Ci0JCQlpZiAoIXNrYikKLQkJCQlnb3RvIG5vX21lbTsKLQkJfQotCX0KLQotCWRhdGFfcHRyID0gZWxlbWVudC0+YWRkciArIG9mZnNldDsKLQl3aGlsZSAoc2tiX2xlbikgewotCQlkYXRhX2xlbiA9IG1pbihza2JfbGVuLCAoaW50KShlbGVtZW50LT5sZW5ndGggLSBvZmZzZXQpKTsKLQkJaWYgKGRhdGFfbGVuKSB7Ci0JCQlpZiAodXNlX3J4X3NnKSB7Ci0JCQkJaWYgKHFldGhfY3JlYXRlX3NrYl9mcmFnKGVsZW1lbnQsICZza2IsIG9mZnNldCwKLQkJCQkgICAgJmZyYWcsIGRhdGFfbGVuKSkKLQkJCQkJZ290byBub19tZW07Ci0JCQl9IGVsc2UgewotCQkJCW1lbWNweShza2JfcHV0KHNrYiwgZGF0YV9sZW4pLCBkYXRhX3B0ciwKLQkJCQkJZGF0YV9sZW4pOwotCQkJfQotCQl9Ci0JCXNrYl9sZW4gLT0gZGF0YV9sZW47Ci0JCWlmIChza2JfbGVuKXsKLQkJCWlmIChxZXRoX2lzX2xhc3Rfc2JhbGUoZWxlbWVudCkpewotCQkJCVFFVEhfREJGX1RFWFQodHJhY2UsNCwidW5leGVvYiIpOwotCQkJCVFFVEhfREJGX1RFWFRfKHRyYWNlLDQsIiVzIixDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQkJUUVUSF9EQkZfVEVYVChxZXJyLDIsInVuZXhlb2IiKTsKLQkJCQlRRVRIX0RCRl9URVhUXyhxZXJyLDIsIiVzIixDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQkJUUVUSF9EQkZfSEVYKG1pc2MsNCxidWZmZXIsc2l6ZW9mKCpidWZmZXIpKTsKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJCWNhcmQtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJZWxlbWVudCsrOwotCQkJb2Zmc2V0ID0gMDsKLQkJCWRhdGFfcHRyID0gZWxlbWVudC0+YWRkcjsKLQkJfSBlbHNlIHsKLQkJCW9mZnNldCArPSBkYXRhX2xlbjsKLQkJfQotCX0KLQkqX19lbGVtZW50ID0gZWxlbWVudDsKLQkqX19vZmZzZXQgPSBvZmZzZXQ7Ci0JaWYgKHVzZV9yeF9zZyAmJiBjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7Ci0JCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19yeCsrOwotCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3J4ICs9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JfQotCXJldHVybiBza2I7Ci1ub19tZW06Ci0JaWYgKG5ldF9yYXRlbGltaXQoKSl7Ci0JCVBSSU5UX1dBUk4oIk5vIG1lbW9yeSBmb3IgcGFja2V0IHJlY2VpdmVkIG9uICVzLlxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlRRVRIX0RCRl9URVhUKHRyYWNlLDIsIm5vc2tibWVtIik7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLDIsIiVzIixDQVJEX0JVU19JRChjYXJkKSk7Ci0JfQotCWNhcmQtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIF9fYmUxNgotcWV0aF90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgZXRoaGRyICpldGg7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDYsInR5cHRyYW5zIik7Ci0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKilkZXYtPnByaXY7Ci0jaWZkZWYgQ09ORklHX1RSCi0JaWYgKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9IU1RSKSB8fAotCSAgICAoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfTEFORV9UUikpCi0JIAlyZXR1cm4gdHJfdHlwZV90cmFucyhza2IsZGV2KTsKLSNlbmRpZiAvKiBDT05GSUdfVFIgKi8KLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCXNrYl9wdWxsKHNrYiwgRVRIX0hMRU4gKTsKLQlldGggPSBldGhfaGRyKHNrYik7Ci0KLQlpZiAoKmV0aC0+aF9kZXN0ICYgMSkgewotCQlpZiAobWVtY21wKGV0aC0+aF9kZXN0LCBkZXYtPmJyb2FkY2FzdCwgRVRIX0FMRU4pID09IDApCi0JCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0JST0FEQ0FTVDsKLQkJZWxzZQotCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9NVUxUSUNBU1Q7Ci0JfSBlbHNlIGlmIChtZW1jbXAoZXRoLT5oX2Rlc3QsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKLQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0KLQlpZiAobnRvaHMoZXRoLT5oX3Byb3RvKSA+PSAxNTM2KQotCQlyZXR1cm4gZXRoLT5oX3Byb3RvOwotCWlmICgqKHVuc2lnbmVkIHNob3J0ICopIChza2ItPmRhdGEpID09IDB4RkZGRikKLQkJcmV0dXJuIGh0b25zKEVUSF9QXzgwMl8zKTsKLQlyZXR1cm4gaHRvbnMoRVRIX1BfODAyXzIpOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9yZWJ1aWxkX3NrYl9mYWtlX2xsX3RyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgc3RydWN0IHFldGhfaGRyICpoZHIpCi17Ci0Jc3RydWN0IHRyaF9oZHIgKmZha2VfaGRyOwotCXN0cnVjdCB0cmxsYyAqZmFrZV9sbGM7Ci0Jc3RydWN0IGlwaGRyICppcF9oZHI7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDUsInNrYmZrdHIiKTsKLQlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAoaW50KS1RRVRIX0ZBS0VfTExfTEVOX1RSKTsKLQkvKiB0aGlzIGlzIGEgZmFrZSBldGhlcm5ldCBoZWFkZXIgKi8KLQlmYWtlX2hkciA9IHRyX2hkcihza2IpOwotCi0JLyogdGhlIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzICovCi0Jc3dpdGNoIChza2ItPnBrdF90eXBlKXsKLQljYXNlIFBBQ0tFVF9NVUxUSUNBU1Q6Ci0JCXN3aXRjaCAoc2tiLT5wcm90b2NvbCl7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6Ci0JCQluZGlzY19tY19tYXAoKHN0cnVjdCBpbjZfYWRkciAqKQotCQkJCSAgICAgc2tiLT5kYXRhICsgUUVUSF9GQUtFX0xMX1Y2X0FERFJfUE9TLAotCQkJCSAgICAgZmFrZV9oZHItPmRhZGRyLCBjYXJkLT5kZXYsIDApOwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfSVBWNiAqLwotCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgotCQkJaXBfaGRyID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKLQkJCWlwX3RyX21jX21hcChpcF9oZHItPmRhZGRyLCBmYWtlX2hkci0+ZGFkZHIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQltZW1jcHkoZmFrZV9oZHItPmRhZGRyLCBjYXJkLT5kZXYtPmRldl9hZGRyLCBUUl9BTEVOKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6Ci0JCW1lbXNldChmYWtlX2hkci0+ZGFkZHIsIDB4ZmYsIFRSX0FMRU4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQltZW1jcHkoZmFrZV9oZHItPmRhZGRyLCBjYXJkLT5kZXYtPmRldl9hZGRyLCBUUl9BTEVOKTsKLQl9Ci0JLyogdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyAqLwotCWlmIChoZHItPmhkci5sMy5leHRfZmxhZ3MgJiBRRVRIX0hEUl9FWFRfU1JDX01BQ19BRERSKQotCQltZW1jcHkoZmFrZV9oZHItPnNhZGRyLCAmaGRyLT5oZHIubDMuZGVzdF9hZGRyWzJdLCBUUl9BTEVOKTsKLQllbHNlCi0JCW1lbXNldChmYWtlX2hkci0+c2FkZHIsIDAsIFRSX0FMRU4pOwotCWZha2VfaGRyLT5yY2Y9MDsKLQlmYWtlX2xsYyA9IChzdHJ1Y3QgdHJsbGMqKSYoZmFrZV9oZHItPnJjZik7Ci0JZmFrZV9sbGMtPmRzYXAgPSBFWFRFTkRFRF9TQVA7Ci0JZmFrZV9sbGMtPnNzYXAgPSBFWFRFTkRFRF9TQVA7Ci0JZmFrZV9sbGMtPmxsYyAgPSBVSV9DTUQ7Ci0JZmFrZV9sbGMtPnByb3RpZFswXSA9IDA7Ci0JZmFrZV9sbGMtPnByb3RpZFsxXSA9IDA7Ci0JZmFrZV9sbGMtPnByb3RpZFsyXSA9IDA7Ci0JZmFrZV9sbGMtPmV0aGVydHlwZSA9IEVUSF9QX0lQOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9yZWJ1aWxkX3NrYl9mYWtlX2xsX2V0aChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHN0cnVjdCBxZXRoX2hkciAqaGRyKQotewotCXN0cnVjdCBldGhoZHIgKmZha2VfaGRyOwotCXN0cnVjdCBpcGhkciAqaXBfaGRyOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw1LCJza2Jma2V0aCIpOwotCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIC1RRVRIX0ZBS0VfTExfTEVOX0VUSCk7Ci0JLyogdGhpcyBpcyBhIGZha2UgZXRoZXJuZXQgaGVhZGVyICovCi0JZmFrZV9oZHIgPSBldGhfaGRyKHNrYik7Ci0KLQkvKiB0aGUgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgKi8KLQlzd2l0Y2ggKHNrYi0+cGt0X3R5cGUpewotCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKLQkJc3dpdGNoIChza2ItPnByb3RvY29sKXsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKLQkJCW5kaXNjX21jX21hcCgoc3RydWN0IGluNl9hZGRyICopCi0JCQkJICAgICBza2ItPmRhdGEgKyBRRVRIX0ZBS0VfTExfVjZfQUREUl9QT1MsCi0JCQkJICAgICBmYWtlX2hkci0+aF9kZXN0LCBjYXJkLT5kZXYsIDApOwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfSVBWNiAqLwotCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgotCQkJaXBfaGRyID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKLQkJCWlwX2V0aF9tY19tYXAoaXBfaGRyLT5kYWRkciwgZmFrZV9oZHItPmhfZGVzdCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW1lbWNweShmYWtlX2hkci0+aF9kZXN0LCBjYXJkLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBQQUNLRVRfQlJPQURDQVNUOgotCQltZW1zZXQoZmFrZV9oZHItPmhfZGVzdCwgMHhmZiwgRVRIX0FMRU4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQltZW1jcHkoZmFrZV9oZHItPmhfZGVzdCwgY2FyZC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCX0KLQkvKiB0aGUgc291cmNlIE1BQyBhZGRyZXNzICovCi0JaWYgKGhkci0+aGRyLmwzLmV4dF9mbGFncyAmIFFFVEhfSERSX0VYVF9TUkNfTUFDX0FERFIpCi0JCW1lbWNweShmYWtlX2hkci0+aF9zb3VyY2UsICZoZHItPmhkci5sMy5kZXN0X2FkZHJbMl0sIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbXNldChmYWtlX2hkci0+aF9zb3VyY2UsIDAsIEVUSF9BTEVOKTsKLQkvKiB0aGUgcHJvdG9jb2wgKi8KLQlmYWtlX2hkci0+aF9wcm90byA9IHNrYi0+cHJvdG9jb2w7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF9yZWJ1aWxkX3NrYl9mYWtlX2xsKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgcWV0aF9oZHIgKmhkcikKLXsKLQlpZiAoY2FyZC0+ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKQotCQlxZXRoX3JlYnVpbGRfc2tiX2Zha2VfbGxfdHIoY2FyZCwgc2tiLCBoZHIpOwotCWVsc2UKLQkJcWV0aF9yZWJ1aWxkX3NrYl9mYWtlX2xsX2V0aChjYXJkLCBza2IsIGhkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF9sYXllcjJfcmVidWlsZF9za2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBxZXRoX2hkciAqaGRyKQotewotCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQlza2ItPnByb3RvY29sID0gcWV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwotCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gTk9fQ0hFQ0tTVU1NSU5HKQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWVsc2UKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCSooKF9fdTMyICopc2tiLT5jYikgPSArK2NhcmQtPnNlcW5vLnBrdF9zZXFubzsKLX0KLQotc3RhdGljIF9fdTE2Ci1xZXRoX3JlYnVpbGRfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSBzdHJ1Y3QgcWV0aF9oZHIgKmhkcikKLXsKLQl1bnNpZ25lZCBzaG9ydCB2bGFuX2lkID0gMDsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JaWYgKGhkci0+aGRyLmwzLmZsYWdzICYgUUVUSF9IRFJfUEFTU1RIUlUpIHsKLQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwotCQlza2ItPnByb3RvY29sID0gcWV0aF90eXBlX3RyYW5zKHNrYiwgY2FyZC0+ZGV2KTsKLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19RRVRIX0lQVjYgKi8KLQlza2ItPnByb3RvY29sID0gaHRvbnMoKGhkci0+aGRyLmwzLmZsYWdzICYgUUVUSF9IRFJfSVBWNik/IEVUSF9QX0lQVjYgOgotCQkJICAgICAgRVRIX1BfSVApOwotCXN3aXRjaCAoaGRyLT5oZHIubDMuZmxhZ3MgJiBRRVRIX0hEUl9DQVNUX01BU0spewotCWNhc2UgUUVUSF9DQVNUX1VOSUNBU1Q6Ci0JCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQkJYnJlYWs7Ci0JY2FzZSBRRVRIX0NBU1RfTVVMVElDQVNUOgotCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKLQkJY2FyZC0+c3RhdHMubXVsdGljYXN0Kys7Ci0JCWJyZWFrOwotCWNhc2UgUUVUSF9DQVNUX0JST0FEQ0FTVDoKLQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9CUk9BRENBU1Q7Ci0JCWNhcmQtPnN0YXRzLm11bHRpY2FzdCsrOwotCQlicmVhazsKLQljYXNlIFFFVEhfQ0FTVF9BTllDQVNUOgotCWNhc2UgUUVUSF9DQVNUX05PQ0FTVDoKLQlkZWZhdWx0OgotCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7Ci0JfQotCi0JaWYgKGhkci0+aGRyLmwzLmV4dF9mbGFncyAmCi0JICAgIChRRVRIX0hEUl9FWFRfVkxBTl9GUkFNRSB8IFFFVEhfSERSX0VYVF9JTkNMVURFX1ZMQU5fVEFHKSkgewotCQl2bGFuX2lkID0gKGhkci0+aGRyLmwzLmV4dF9mbGFncyAmIFFFVEhfSERSX0VYVF9WTEFOX0ZSQU1FKT8KLQkJCWhkci0+aGRyLmwzLnZsYW5faWQgOiAqKCh1MTYgKikmaGRyLT5oZHIubDMuZGVzdF9hZGRyWzEyXSk7Ci0JfQotCi0JaWYgKGNhcmQtPm9wdGlvbnMuZmFrZV9sbCkKLQkJcWV0aF9yZWJ1aWxkX3NrYl9mYWtlX2xsKGNhcmQsIHNrYiwgaGRyKTsKLQllbHNlCi0JCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tiLT5pcF9zdW1tZWQgPSBjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGU7Ci0JaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBIV19DSEVDS1NVTU1JTkcpewotCQlpZiAoIChoZHItPmhkci5sMy5leHRfZmxhZ3MgJgotCQkgICAgICAoUUVUSF9IRFJfRVhUX0NTVU1fSERSX1JFUSB8Ci0JCSAgICAgICBRRVRIX0hEUl9FWFRfQ1NVTV9UUkFOU1BfUkVRKSkgPT0KLQkJICAgICAoUUVUSF9IRFJfRVhUX0NTVU1fSERSX1JFUSB8Ci0JCSAgICAgIFFFVEhfSERSX0VYVF9DU1VNX1RSQU5TUF9SRVEpICkKLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCWVsc2UKLQkJCXNrYi0+aXBfc3VtbWVkID0gU1dfQ0hFQ0tTVU1NSU5HOwotCX0KLQlyZXR1cm4gdmxhbl9pZDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfcHJvY2Vzc19pbmJvdW5kX2J1ZmZlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJICAgIHN0cnVjdCBxZXRoX3FkaW9fYnVmZmVyICpidWYsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqZWxlbWVudDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBxZXRoX2hkciAqaGRyOwotCWludCBvZmZzZXQ7Ci0JaW50IHJ4cmM7Ci0JX191MTYgdmxhbl90YWcgPSAwOwotCi0JLyogZ2V0IGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBidWZmZXIgKi8KLQllbGVtZW50ID0gKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICopJmJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdOwotCW9mZnNldCA9IDA7Ci0JaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCi0JCWNhcmQtPnBlcmZfc3RhdHMuYnVmc19yZWMrKzsKLQl3aGlsZSgoc2tiID0gcWV0aF9nZXRfbmV4dF9za2IoY2FyZCwgYnVmLT5idWZmZXIsICZlbGVtZW50LAotCQkJCSAgICAgICAmb2Zmc2V0LCAmaGRyKSkpIHsKLQkJc2tiLT5kZXYgPSBjYXJkLT5kZXY7Ci0JCWlmIChoZHItPmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikKLQkJCXFldGhfbGF5ZXIyX3JlYnVpbGRfc2tiKGNhcmQsIHNrYiwgaGRyKTsKLQkJZWxzZSBpZiAoaGRyLT5oZHIubDMuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjMpCi0JCQl2bGFuX3RhZyA9IHFldGhfcmVidWlsZF9za2IoY2FyZCwgc2tiLCBoZHIpOwotCQllbHNlIGlmIChoZHItPmhkci5vc24uaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9PU04pIHsKLQkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBoZHIsCi0JCQkJCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JCX0gZWxzZSB7IC8qIHVua25vd24gaGVhZGVyIHR5cGUgKi8KLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAzLCAiaW5idW5rbm8iKTsKLQkJCVFFVEhfREJGX0hFWChjb250cm9sLCAzLCBoZHIsIFFFVEhfREJGX0NPTlRST0xfTEVOKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIGlzIGRldmljZSBVUCA/ICovCi0JCWlmICghKGNhcmQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKXsKLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKLQkJCXJ4cmMgPSBjYXJkLT5vc25faW5mby5kYXRhX2NiKHNrYik7Ci0JCWVsc2UKLSNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCi0JCWlmICh2bGFuX3RhZykKLQkJCWlmIChjYXJkLT52bGFuZ3JwKQotCQkJCXZsYW5faHdhY2NlbF9yeChza2IsIGNhcmQtPnZsYW5ncnAsIHZsYW5fdGFnKTsKLQkJCWVsc2UgewotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCWVsc2UKLSNlbmRpZgotCQkJcnhyYyA9IG5ldGlmX3J4KHNrYik7Ci0JCWNhcmQtPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCWNhcmQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJY2FyZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2luaXRfaW5wdXRfYnVmZmVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3FkaW9fYnVmZmVyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfYnVmZmVyX3Bvb2xfZW50cnkgKnBvb2xfZW50cnk7Ci0JaW50IGk7Ci0KLQlwb29sX2VudHJ5ID0gcWV0aF9maW5kX2ZyZWVfYnVmZmVyX3Bvb2xfZW50cnkoY2FyZCk7Ci0JaWYgKCFwb29sX2VudHJ5KQotCQlyZXR1cm4gMTsKLQkvKgotCSAqIHNpbmNlIHRoZSBidWZmZXIgaXMgYWNjZXNzZWQgb25seSBmcm9tIHRoZSBpbnB1dF90YXNrbGV0Ci0JICogdGhlcmUgc2hvdWxkbid0IGJlIGEgbmVlZCB0byBzeW5jaHJvbml6ZTsgYWxzbywgc2luY2Ugd2UgdXNlCi0JICogdGhlIFFFVEhfSU5fQlVGX1JFUVVFVUVfVEhSRVNIT0xEIHdlIHNob3VsZCBuZXZlciBydW4gIG91dCBvZmYKLQkgKiBidWZmZXJzCi0JICovCi0JQlVHX09OKCFwb29sX2VudHJ5KTsKLQotCWJ1Zi0+cG9vbF9lbnRyeSA9IHBvb2xfZW50cnk7Ci0JZm9yKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpewotCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5sZW5ndGggPSBQQUdFX1NJWkU7Ci0JCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgPSAgcG9vbF9lbnRyeS0+ZWxlbWVudHNbaV07Ci0JCWlmIChpID09IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAtIDEpCi0JCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKLQkJZWxzZQotCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZmxhZ3MgPSAwOwotCX0KLQlidWYtPnN0YXRlID0gUUVUSF9RRElPX0JVRl9FTVBUWTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKLQkJCSBzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JLyogaXMgUENJIGZsYWcgc2V0IG9uIGJ1ZmZlcj8gKi8KLQlpZiAoYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uZmxhZ3MgJiAweDQwKQotCQlhdG9taWNfZGVjKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7Ci0KLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KSkpewotCQlhdG9taWNfZGVjKCZza2ItPnVzZXJzKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9Ci0JcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKGJ1Zik7Ci0JZm9yKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKTsgKytpKXsKLQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0ubGVuZ3RoID0gMDsKLQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciA9IE5VTEw7Ci0JCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gMDsKLQl9Ci0JYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA9IDA7Ci0JYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9FTVBUWSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3F1ZXVlX2lucHV0X2J1ZmZlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IHFldGhfcWRpb19xICpxdWV1ZSA9IGNhcmQtPnFkaW8uaW5fcTsKLQlpbnQgY291bnQ7Ci0JaW50IGk7Ci0JaW50IHJjOwotCWludCBuZXdjb3VudCA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDYsInF1ZWluYnVmIik7Ci0JY291bnQgPSAoaW5kZXggPCBxdWV1ZS0+bmV4dF9idWZfdG9faW5pdCk/Ci0JCWNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuYnVmX2NvdW50IC0KLQkJKHF1ZXVlLT5uZXh0X2J1Zl90b19pbml0IC0gaW5kZXgpIDoKLQkJY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQgLQotCQkocXVldWUtPm5leHRfYnVmX3RvX2luaXQgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gaW5kZXgpOwotCS8qIG9ubHkgcmVxdWV1ZSBhdCBhIGNlcnRhaW4gdGhyZXNob2xkIHRvIGF2b2lkIFNJR0FzICovCi0JaWYgKGNvdW50ID49IFFFVEhfSU5fQlVGX1JFUVVFVUVfVEhSRVNIT0xEKGNhcmQpKXsKLQkJZm9yIChpID0gcXVldWUtPm5leHRfYnVmX3RvX2luaXQ7Ci0JCSAgICAgaSA8IHF1ZXVlLT5uZXh0X2J1Zl90b19pbml0ICsgY291bnQ7ICsraSkgewotCQkJaWYgKHFldGhfaW5pdF9pbnB1dF9idWZmZXIoY2FyZCwKLQkJCQkmcXVldWUtPmJ1ZnNbaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1FdKSkgewotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQluZXdjb3VudCsrOwotCQkJfQotCQl9Ci0KLQkJaWYgKG5ld2NvdW50IDwgY291bnQpIHsKLQkJCS8qIHdlIGFyZSBpbiBtZW1vcnkgc2hvcnRhZ2Ugc28gd2Ugc3dpdGNoIGJhY2sgdG8KLQkJCSAgIHRyYWRpdGlvbmFsIHNrYiBhbGxvY2F0aW9uIGFuZCBkcm9wIHBhY2thZ2VzICovCi0JCQlpZiAoIWF0b21pY19yZWFkKCZjYXJkLT5mb3JjZV9hbGxvY19za2IpICYmCi0JCQkgICAgbmV0X3JhdGVsaW1pdCgpKQotCQkJCVBSSU5UX1dBUk4oIlN3aXRjaCB0byBhbGxvYyBza2JcbiIpOwotCQkJYXRvbWljX3NldCgmY2FyZC0+Zm9yY2VfYWxsb2Nfc2tiLCAzKTsKLQkJCWNvdW50ID0gbmV3Y291bnQ7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGF0b21pY19yZWFkKCZjYXJkLT5mb3JjZV9hbGxvY19za2IpID09IDEpICYmCi0JCQkgICAgbmV0X3JhdGVsaW1pdCgpKQotCQkJCVBSSU5UX1dBUk4oIlN3aXRjaCB0byBzZ1xuIik7Ci0JCQlhdG9taWNfYWRkX3VubGVzcygmY2FyZC0+Zm9yY2VfYWxsb2Nfc2tiLCAtMSwgMCk7Ci0JCX0KLQotCQkvKgotCQkgKiBhY2NvcmRpbmcgdG8gb2xkIGNvZGUgaXQgc2hvdWxkIGJlIGF2b2lkZWQgdG8gcmVxdWV1ZSBhbGwKLQkJICogMTI4IGJ1ZmZlcnMgaW4gb3JkZXIgdG8gYmVuZWZpdCBmcm9tIFBDSSBhdm9pZGFuY2UuCi0JCSAqIHRoaXMgZnVuY3Rpb24ga2VlcHMgYXQgbGVhc3Qgb25lIGJ1ZmZlciAodGhlIGJ1ZmZlciBhdAotCQkgKiAnaW5kZXgnKSB1bi1yZXF1ZXVlZCAtPiB0aGlzIGJ1ZmZlciBpcyB0aGUgZmlyc3QgYnVmZmVyIHRoYXQKLQkJICogd2lsbCBiZSByZXF1ZXVlZCB0aGUgbmV4dCB0aW1lCi0JCSAqLwotCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgewotCQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fY250Kys7Ci0JCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfZG9fcWRpb19zdGFydF90aW1lID0KLQkJCQlxZXRoX2dldF9taWNyb3MoKTsKLQkJfQotCQlyYyA9IGRvX1FESU8oQ0FSRF9EREVWKGNhcmQpLAotCQkJICAgICBRRElPX0ZMQUdfU1lOQ19JTlBVVCB8IFFESU9fRkxBR19VTkRFUl9JTlRFUlJVUFQsCi0JCQkgICAgIDAsIHF1ZXVlLT5uZXh0X2J1Zl90b19pbml0LCBjb3VudCwgTlVMTCk7Ci0JCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fdGltZSArPQotCQkJCXFldGhfZ2V0X21pY3JvcygpIC0KLQkJCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfZG9fcWRpb19zdGFydF90aW1lOwotCQlpZiAocmMpewotCQkJUFJJTlRfV0FSTigicWV0aF9xdWV1ZV9pbnB1dF9idWZmZXIncyBkb19RRElPICIKLQkJCQkgICAicmV0dXJuICVpIChkZXZpY2UgJXMpLlxuIiwKLQkJCQkgICByYywgQ0FSRF9EREVWX0lEKGNhcmQpKTsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsMiwicWluYmVyciIpOwotCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsMiwiJXMiLENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJfQotCQlxdWV1ZS0+bmV4dF9idWZfdG9faW5pdCA9IChxdWV1ZS0+bmV4dF9idWZfdG9faW5pdCArIGNvdW50KSAlCi0JCQkJCSAgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF9wdXRfYnVmZmVyX3Bvb2xfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCSAgIHN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICplbnRyeSkKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicHRiZnBsZW4iKTsKLQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuZW50cnlfbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3FkaW9faW5wdXRfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqIGNjd2RldiwgdW5zaWduZWQgaW50IHN0YXR1cywKLQkJICAgICAgICB1bnNpZ25lZCBpbnQgcWRpb19lcnIsIHVuc2lnbmVkIGludCBzaWdhX2VyciwKLQkJCXVuc2lnbmVkIGludCBxdWV1ZSwgaW50IGZpcnN0X2VsZW1lbnQsIGludCBjb3VudCwKLQkJCXVuc2lnbmVkIGxvbmcgY2FyZF9wdHIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgcWV0aF9xZGlvX2J1ZmZlciAqYnVmZmVyOwotCWludCBpbmRleDsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJxZGlucHV0Iik7Ci0JY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGNhcmRfcHRyOwotCW5ldF9kZXYgPSBjYXJkLT5kZXY7Ci0JaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKLQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2NudCsrOwotCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfc3RhcnRfdGltZSA9IHFldGhfZ2V0X21pY3JvcygpOwotCX0KLQlpZiAoc3RhdHVzICYgUURJT19TVEFUVVNfTE9PS19GT1JfRVJST1IpIHsKLQkJaWYgKHN0YXR1cyAmIFFESU9fU1RBVFVTX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTil7Ci0JCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAxLCJxZGluY2hrIik7Ci0JCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwxLCIlcyIsQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsMSwiJTA0WCUwNFgiLGZpcnN0X2VsZW1lbnQsY291bnQpOwotCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsMSwiJTA0WCUwNFgiLCBxdWV1ZSwgc3RhdHVzKTsKLQkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JZm9yIChpID0gZmlyc3RfZWxlbWVudDsgaSA8IChmaXJzdF9lbGVtZW50ICsgY291bnQpOyArK2kpIHsKLQkJaW5kZXggPSBpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQkJYnVmZmVyID0gJmNhcmQtPnFkaW8uaW5fcS0+YnVmc1tpbmRleF07Ci0JCWlmICghKChzdGF0dXMgJiBRRElPX1NUQVRVU19MT09LX0ZPUl9FUlJPUikgJiYKLQkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwKLQkJCQkJICAgICBxZGlvX2Vyciwgc2lnYV9lcnIsInFpbmVyciIpKSkKLQkJCXFldGhfcHJvY2Vzc19pbmJvdW5kX2J1ZmZlcihjYXJkLCBidWZmZXIsIGluZGV4KTsKLQkJLyogY2xlYXIgYnVmZmVyIGFuZCBnaXZlIGJhY2sgdG8gaGFyZHdhcmUgKi8KLQkJcWV0aF9wdXRfYnVmZmVyX3Bvb2xfZW50cnkoY2FyZCwgYnVmZmVyLT5wb29sX2VudHJ5KTsKLQkJcWV0aF9xdWV1ZV9pbnB1dF9idWZmZXIoY2FyZCwgaW5kZXgpOwotCX0KLQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKLQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3RpbWUgKz0gcWV0aF9nZXRfbWljcm9zKCkgLQotCQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3N0YXJ0X3RpbWU7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfaGFuZGxlX3NlbmRfZXJyb3Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJICAgICAgIHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyLAotCQkgICAgICAgdW5zaWduZWQgaW50IHFkaW9fZXJyLCB1bnNpZ25lZCBpbnQgc2lnYV9lcnIpCi17Ci0JaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmOwotCWludCBjYyA9IHNpZ2FfZXJyICYgMzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJoZHNuZGVyciIpOwotCXFldGhfY2hlY2tfcWRpb19lcnJvcnMoYnVmZmVyLT5idWZmZXIsIHFkaW9fZXJyLCBzaWdhX2VyciwgInFvdXRlcnIiKTsKLQlzd2l0Y2ggKGNjKSB7Ci0JY2FzZSAwOgotCQlpZiAocWRpb19lcnIpewotCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMSwibG5rZmFpbCIpOwotCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsMSwiJXMiLENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCVFFVEhfREJGX1RFWFRfKHRyYWNlLDEsIiUwNHggJTAyeCIsCi0JCQkJICAgICAgICh1MTYpcWRpb19lcnIsICh1OClzYmFsZjE1KTsKLQkJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwotCQl9Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTk9ORTsKLQljYXNlIDI6Ci0JCWlmIChzaWdhX2VyciAmIFFESU9fU0lHQV9FUlJPUl9CX0JJVF9TRVQpIHsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDEsICJTSUdBY2MyQiIpOwotCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsMSwiJXMiLENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfS0lDS19JVDsKLQkJfQotCQlpZiAoKHNiYWxmMTUgPj0gMTUpICYmIChzYmFsZjE1IDw9IDMxKSkKLQkJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfUkVUUlk7Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwotCQkvKiBsb29rIGF0IHFkaW9fZXJyb3IgYW5kIHNiYWxmIDE1ICovCi0JY2FzZSAxOgotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAxLCAiU0lHQWNjMSIpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwxLCIlcyIsQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0xJTktfRkFJTFVSRTsKLQljYXNlIDM6Ci0JZGVmYXVsdDoKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMSwgIlNJR0FjYzMiKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsMSwiJXMiLENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUOwotCX0KLX0KLQotdm9pZAotcWV0aF9mbHVzaF9idWZmZXJzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLCBpbnQgdW5kZXJfaW50LAotCQkgICBpbnQgaW5kZXgsIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZjsKLQlpbnQgcmM7Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IHFkaW9fZmxhZ3M7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAiZmx1c2hidWYiKTsKLQotCWZvciAoaSA9IGluZGV4OyBpIDwgaW5kZXggKyBjb3VudDsgKytpKSB7Ci0JCWJ1ZiA9ICZxdWV1ZS0+YnVmc1tpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgLSAxXS5mbGFncyB8PQotCQkJCVNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKLQotCQlpZiAocXVldWUtPmNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXF1ZXVlLT5kb19wYWNrKXsKLQkJCWlmICgoYXRvbWljX3JlYWQoJnF1ZXVlLT51c2VkX2J1ZmZlcnMpID49Ci0JCSAgICAJCShRRVRIX0hJR0hfV0FURVJNQVJLX1BBQ0sgLQotCQkJCSBRRVRIX1dBVEVSTUFSS19QQUNLX0ZVWlopKSAmJgotCQkgICAgCSAgICAhYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSl7Ci0JCQkJLyogaXQncyBsaWtlbHkgdGhhdCB3ZSdsbCBnbyB0byBwYWNraW5nCi0JCQkJICogbW9kZSBzb29uICovCi0JCQkJYXRvbWljX2luYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwotCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzIHw9IDB4NDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpewotCQkJCS8qCi0JCQkJICogdGhlcmUncyBubyBvdXRzdGFuZGluZyBQQ0kgYW55IG1vcmUsIHNvIHdlCi0JCQkJICogaGF2ZSB0byByZXF1ZXN0IGEgUENJIHRvIGJlIHN1cmUgdGhhdCB0aGUgUENJCi0JCQkJICogd2lsbCB3YWtlIGF0IHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlIHRoZW4gd2UKLQkJCQkgKiBjYW4gZmx1c2ggcGFja2VkIGJ1ZmZlcnMgdGhhdCBtaWdodCBzdGlsbCBiZQotCQkJCSAqIGhhbmdpbmcgYXJvdW5kLCB3aGljaCBjYW4gaGFwcGVuIGlmIG5vCi0JCQkJICogZnVydGhlciBzZW5kIHdhcyByZXF1ZXN0ZWQgYnkgdGhlIHN0YWNrCi0JCQkJICovCi0JCQkJYXRvbWljX2luYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwotCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzIHw9IDB4NDA7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlxdWV1ZS0+Y2FyZC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7Ci0JCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fY250Kys7Ci0JCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fc3RhcnRfdGltZSA9Ci0JCQlxZXRoX2dldF9taWNyb3MoKTsKLQl9Ci0JcWRpb19mbGFncyA9IFFESU9fRkxBR19TWU5DX09VVFBVVDsKLQlpZiAodW5kZXJfaW50KQotCQlxZGlvX2ZsYWdzIHw9IFFESU9fRkxBR19VTkRFUl9JTlRFUlJVUFQ7Ci0JaWYgKGF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpCi0JCXFkaW9fZmxhZ3MgfD0gUURJT19GTEFHX1BDSV9PVVQ7Ci0JcmMgPSBkb19RRElPKENBUkRfRERFVihxdWV1ZS0+Y2FyZCksIHFkaW9fZmxhZ3MsCi0JCSAgICAgcXVldWUtPnF1ZXVlX25vLCBpbmRleCwgY291bnQsIE5VTEwpOwotCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKLQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb190aW1lICs9Ci0JCQlxZXRoX2dldF9taWNyb3MoKSAtCi0JCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7Ci0JaWYgKHJjKXsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImZsdXNoYnVmIik7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiIGVyciVkIiwgcmMpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIiVzIiwgQ0FSRF9EREVWX0lEKHF1ZXVlLT5jYXJkKSk7Ci0JCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7Ci0JCS8qIHRoaXMgbXVzdCBub3QgaGFwcGVuIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLiBpZiBpdAotCQkgKiBoYXBwZW5zIHNvbWV0aGluZyBpcyByZWFsbHkgd3JvbmcgLT4gcmVjb3ZlciAqLwotCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHF1ZXVlLT5jYXJkKTsKLQkJcmV0dXJuOwotCX0KLQlhdG9taWNfYWRkKGNvdW50LCAmcXVldWUtPnVzZWRfYnVmZmVycyk7Ci0JaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnQgKz0gY291bnQ7Ci19Ci0KLS8qCi0gKiBTd2l0Y2hlZCB0byBwYWNraW5nIHN0YXRlIGlmIHRoZSBudW1iZXIgb2YgdXNlZCBidWZmZXJzIG9uIGEgcXVldWUKLSAqIHJlYWNoZXMgYSBjZXJ0YWluIGxpbWl0LgotICovCi1zdGF0aWMgdm9pZAotcWV0aF9zd2l0Y2hfdG9fcGFja2luZ19pZl9uZWVkZWQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUpCi17Ci0JaWYgKCFxdWV1ZS0+ZG9fcGFjaykgewotCQlpZiAoYXRvbWljX3JlYWQoJnF1ZXVlLT51c2VkX2J1ZmZlcnMpCi0JCSAgICA+PSBRRVRIX0hJR0hfV0FURVJNQVJLX1BBQ0spewotCQkJLyogc3dpdGNoIG5vbi1QQUNLSU5HIC0+IFBBQ0tJTkcgKi8KLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJucC0+cGFjayIpOwotCQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNjX2RwX3ArKzsKLQkJCXF1ZXVlLT5kb19wYWNrID0gMTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIFN3aXRjaGVzIGZyb20gcGFja2luZyB0byBub24tcGFja2luZyBtb2RlLiBJZiB0aGVyZSBpcyBhIHBhY2tpbmcKLSAqIGJ1ZmZlciBvbiB0aGUgcXVldWUgdGhpcyBidWZmZXIgd2lsbCBiZSBwcmVwYXJlZCB0byBiZSBmbHVzaGVkLgotICogSW4gdGhhdCBjYXNlIDEgaXMgcmV0dXJuZWQgdG8gaW5mb3JtIHRoZSBjYWxsZXIuIElmIG5vIGJ1ZmZlcgotICogaGFzIHRvIGJlIGZsdXNoZWQsIHplcm8gaXMgcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyBpbnQKLXFldGhfc3dpdGNoX3RvX25vbnBhY2tpbmdfaWZfbmVlZGVkKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlKQotewotCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwotCWludCBmbHVzaF9jb3VudCA9IDA7Ci0KLQlpZiAocXVldWUtPmRvX3BhY2spIHsKLQkJaWYgKGF0b21pY19yZWFkKCZxdWV1ZS0+dXNlZF9idWZmZXJzKQotCQkgICAgPD0gUUVUSF9MT1dfV0FURVJNQVJLX1BBQ0spIHsKLQkJCS8qIHN3aXRjaCBQQUNLSU5HIC0+IG5vbi1QQUNLSU5HICovCi0JCQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicGFjay0+bnAiKTsKLQkJCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKLQkJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5zY19wX2RwKys7Ci0JCQlxdWV1ZS0+ZG9fcGFjayA9IDA7Ci0JCQkvKiBmbHVzaCBwYWNraW5nIGJ1ZmZlcnMgKi8KLQkJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07Ci0JCQlpZiAoKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSA9PQotCQkJCQkJUUVUSF9RRElPX0JVRl9FTVBUWSkgJiYKLQkJCSAgICAoYnVmZmVyLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+IDApKSB7Ci0JCQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSxRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQkJZmx1c2hfY291bnQrKzsKLQkJCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9Ci0JCQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKLQkJCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gZmx1c2hfY291bnQ7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgdG8gZmx1c2ggYSBwYWNraW5nIGJ1ZmZlciBpZiBubyBtb3JlIHBjaSBmbGFncyBhcmUgb24gdGhlIHF1ZXVlLgotICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcGFja2luZyBidWZmZXIgYW5kIHByZXBhcmVzIGl0IHRvIGJlIGZsdXNoZWQuCi0gKiBJbiB0aGF0IGNhc2UgcmV0dXJucyAxLCBvdGhlcndpc2UgemVyby4KLSAqLwotc3RhdGljIGludAotcWV0aF9mbHVzaF9idWZmZXJzX29uX25vX3BjaShzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSkKLXsKLQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlcjsKLQotCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07Ci0JaWYoKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSA9PSBRRVRIX1FESU9fQlVGX0VNUFRZKSAmJgotCSAgIChidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsID4gMCkpewotCQkvKiBpdCdzIGEgcGFja2luZyBidWZmZXIgKi8KLQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9Ci0JCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfY2hlY2tfb3V0Ym91bmRfcXVldWUoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUpCi17Ci0JaW50IGluZGV4OwotCWludCBmbHVzaF9jbnQgPSAwOwotCWludCBxX3dhc19wYWNraW5nID0gMDsKLQotCS8qCi0JICogY2hlY2sgaWYgd2VlZCBoYXZlIHRvIHN3aXRjaCB0byBub24tcGFja2luZyBtb2RlIG9yIGlmCi0JICogd2UgaGF2ZSB0byBnZXQgYSBwY2kgZmxhZyBvdXQgb24gdGhlIHF1ZXVlCi0JICovCi0JaWYgKChhdG9taWNfcmVhZCgmcXVldWUtPnVzZWRfYnVmZmVycykgPD0gUUVUSF9MT1dfV0FURVJNQVJLX1BBQ0spIHx8Ci0JICAgICFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKXsKLQkJaWYgKGF0b21pY194Y2hnKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfTE9DS0VEX0ZMVVNIKSA9PQotCQkJCVFFVEhfT1VUX1FfVU5MT0NLRUQpIHsKLQkJCS8qCi0JCQkgKiBJZiB3ZSBnZXQgaW4gaGVyZSwgdGhlcmUgd2FzIG5vIGFjdGlvbiBpbgotCQkJICogZG9fc2VuZF9wYWNrZXQuIFNvLCB3ZSBjaGVjayBpZiB0aGVyZSBpcyBhCi0JCQkgKiBwYWNraW5nIGJ1ZmZlciB0byBiZSBmbHVzaGVkIGhlcmUuCi0JCQkgKi8KLQkJCW5ldGlmX3N0b3BfcXVldWUocXVldWUtPmNhcmQtPmRldik7Ci0JCQlpbmRleCA9IHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsOwotCQkJcV93YXNfcGFja2luZyA9IHF1ZXVlLT5kb19wYWNrOwotCQkJZmx1c2hfY250ICs9IHFldGhfc3dpdGNoX3RvX25vbnBhY2tpbmdfaWZfbmVlZGVkKHF1ZXVlKTsKLQkJCWlmICghZmx1c2hfY250ICYmCi0JCQkgICAgIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpCi0JCQkJZmx1c2hfY250ICs9Ci0JCQkJCXFldGhfZmx1c2hfYnVmZmVyc19vbl9ub19wY2kocXVldWUpOwotCQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzICYmCi0JCQkgICAgcV93YXNfcGFja2luZykKLQkJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnRfcGFjayArPQotCQkJCQlmbHVzaF9jbnQ7Ci0JCQlpZiAoZmx1c2hfY250KQotCQkJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgMSwgaW5kZXgsIGZsdXNoX2NudCk7Ci0JCQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9xZGlvX291dHB1dF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICogY2N3ZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzLAotCQkgICAgICAgIHVuc2lnbmVkIGludCBxZGlvX2Vycm9yLCB1bnNpZ25lZCBpbnQgc2lnYV9lcnJvciwKLQkJCXVuc2lnbmVkIGludCBfX3F1ZXVlLCBpbnQgZmlyc3RfZWxlbWVudCwgaW50IGNvdW50LAotCQkJdW5zaWduZWQgbG9uZyBjYXJkX3B0cikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkICAgICAgICA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGNhcmRfcHRyOwotCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXNbX19xdWV1ZV07Ci0Jc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicWRvdWhkbCIpOwotCWlmIChzdGF0dXMgJiBRRElPX1NUQVRVU19MT09LX0ZPUl9FUlJPUikgewotCQlpZiAoc3RhdHVzICYgUURJT19TVEFUVVNfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OKXsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJhY2hrY29uZCIpOwotCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiJTA4eCIsIHN0YXR1cyk7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7Ci0JCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7Ci0JCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl9jbnQrKzsKLQkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyX3N0YXJ0X3RpbWUgPQotCQkJcWV0aF9nZXRfbWljcm9zKCk7Ci0JfQotCWZvcihpID0gZmlyc3RfZWxlbWVudDsgaSA8IChmaXJzdF9lbGVtZW50ICsgY291bnQpOyArK2kpewotCQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCQkvKndlIG9ubHkgaGFuZGxlIHRoZSBLSUNLX0lUIGVycm9yIGJ5IGRvaW5nIGEgcmVjb3ZlcnkgKi8KLQkJaWYgKHFldGhfaGFuZGxlX3NlbmRfZXJyb3IoY2FyZCwgYnVmZmVyLAotCQkJCQkgICBxZGlvX2Vycm9yLCBzaWdhX2Vycm9yKQotCQkJCT09IFFFVEhfU0VORF9FUlJPUl9LSUNLX0lUKXsKLQkJCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKLQkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKHF1ZXVlLCBidWZmZXIpOwotCX0KLQlhdG9taWNfc3ViKGNvdW50LCAmcXVldWUtPnVzZWRfYnVmZmVycyk7Ci0JLyogY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgb24gdGhpcyBvdXRib3VuZCBxdWV1ZSAqLwotCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQotCQlxZXRoX2NoZWNrX291dGJvdW5kX3F1ZXVlKHF1ZXVlKTsKLQotCW5ldGlmX3dha2VfcXVldWUocXVldWUtPmNhcmQtPmRldik7Ci0JaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCi0JCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl90aW1lICs9IHFldGhfZ2V0X21pY3JvcygpIC0KLQkJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl9zdGFydF90aW1lOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9jcmVhdGVfcWliX3BhcmFtX2ZpZWxkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGNoYXIgKnBhcmFtX2ZpZWxkKQotewotCi0JcGFyYW1fZmllbGRbMF0gPSBfYXNjZWJjWydQJ107Ci0JcGFyYW1fZmllbGRbMV0gPSBfYXNjZWJjWydDJ107Ci0JcGFyYW1fZmllbGRbMl0gPSBfYXNjZWJjWydJJ107Ci0JcGFyYW1fZmllbGRbM10gPSBfYXNjZWJjWydUJ107Ci0JKigodW5zaWduZWQgaW50ICopICgmcGFyYW1fZmllbGRbNF0pKSA9IFFFVEhfUENJX1RIUkVTSE9MRF9BKGNhcmQpOwotCSooKHVuc2lnbmVkIGludCAqKSAoJnBhcmFtX2ZpZWxkWzhdKSkgPSBRRVRIX1BDSV9USFJFU0hPTERfQihjYXJkKTsKLQkqKCh1bnNpZ25lZCBpbnQgKikgKCZwYXJhbV9maWVsZFsxMl0pKSA9IFFFVEhfUENJX1RJTUVSX1ZBTFVFKGNhcmQpOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9jcmVhdGVfcWliX3BhcmFtX2ZpZWxkX2Jsa3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgY2hhciAqcGFyYW1fZmllbGQpCi17Ci0JcGFyYW1fZmllbGRbMTZdID0gX2FzY2ViY1snQiddOwotICAgICAgICBwYXJhbV9maWVsZFsxN10gPSBfYXNjZWJjWydMJ107Ci0gICAgICAgIHBhcmFtX2ZpZWxkWzE4XSA9IF9hc2NlYmNbJ0snXTsKLSAgICAgICAgcGFyYW1fZmllbGRbMTldID0gX2FzY2ViY1snVCddOwotICAgICAgICAqKCh1bnNpZ25lZCBpbnQgKikgKCZwYXJhbV9maWVsZFsyMF0pKSA9IGNhcmQtPmluZm8uYmxrdC50aW1lX3RvdGFsOwotICAgICAgICAqKCh1bnNpZ25lZCBpbnQgKikgKCZwYXJhbV9maWVsZFsyNF0pKSA9IGNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXQ7Ci0gICAgICAgICooKHVuc2lnbmVkIGludCAqKSAoJnBhcmFtX2ZpZWxkWzI4XSkpID0gY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldF9qdW1ibzsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfaW5pdGlhbGl6ZV93b3JraW5nX3Bvb2xfbGlzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICplbnRyeTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNSwiaW53cmtsc3QiKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksCi0JCQkgICAgJmNhcmQtPnFkaW8uaW5pdF9wb29sLmVudHJ5X2xpc3QsIGluaXRfbGlzdCkgewotCQlxZXRoX3B1dF9idWZmZXJfcG9vbF9lbnRyeShjYXJkLGVudHJ5KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX3dvcmtpbmdfcG9vbF9saXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IHFldGhfYnVmZmVyX3Bvb2xfZW50cnkgKnBvb2xfZW50cnksICp0bXA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDUsImNsd3JrbHN0Iik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvb2xfZW50cnksIHRtcCwKLQkJCSAgICAmY2FyZC0+cWRpby5pbl9idWZfcG9vbC5lbnRyeV9saXN0LCBsaXN0KXsKLQkJCWxpc3RfZGVsKCZwb29sX2VudHJ5LT5saXN0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2ZyZWVfYnVmZmVyX3Bvb2woc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgcWV0aF9idWZmZXJfcG9vbF9lbnRyeSAqcG9vbF9lbnRyeSwgKnRtcDsKLQlpbnQgaT0wOwotCVFFVEhfREJGX1RFWFQodHJhY2UsNSwiZnJlZXBvb2wiKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9vbF9lbnRyeSwgdG1wLAotCQkJCSAmY2FyZC0+cWRpby5pbml0X3Bvb2wuZW50cnlfbGlzdCwgaW5pdF9saXN0KXsKLQkJZm9yIChpID0gMDsgaSA8IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKTsgKytpKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBvb2xfZW50cnktPmVsZW1lbnRzW2ldKTsKLQkJbGlzdF9kZWwoJnBvb2xfZW50cnktPmluaXRfbGlzdCk7Ci0JCWtmcmVlKHBvb2xfZW50cnkpOwotCX0KLX0KLQotc3RhdGljIGludAotcWV0aF9hbGxvY19idWZmZXJfcG9vbChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCXN0cnVjdCBxZXRoX2J1ZmZlcl9wb29sX2VudHJ5ICpwb29sX2VudHJ5OwotCXZvaWQgKnB0cjsKLQlpbnQgaSwgajsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNSwiYWxvY3Bvb2wiKTsKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+cWRpby5pbml0X3Bvb2wuYnVmX2NvdW50OyArK2kpewotCSAJcG9vbF9lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCpwb29sX2VudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcG9vbF9lbnRyeSl7Ci0JCQlxZXRoX2ZyZWVfYnVmZmVyX3Bvb2woY2FyZCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlmb3IoaiA9IDA7IGogPCBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCk7ICsrail7Ci0JCQlwdHIgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxHRlBfRE1BKTsKLQkJCWlmICghcHRyKSB7Ci0JCQkJd2hpbGUgKGogPiAwKQotCQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpCi0JCQkJCQkgIHBvb2xfZW50cnktPmVsZW1lbnRzWy0tal0pOwotCQkJCWtmcmVlKHBvb2xfZW50cnkpOwotCQkJCXFldGhfZnJlZV9idWZmZXJfcG9vbChjYXJkKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQkJCXBvb2xfZW50cnktPmVsZW1lbnRzW2pdID0gcHRyOwotCQl9Ci0JCWxpc3RfYWRkKCZwb29sX2VudHJ5LT5pbml0X2xpc3QsCi0JCQkgJmNhcmQtPnFkaW8uaW5pdF9wb29sLmVudHJ5X2xpc3QpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1xZXRoX3JlYWxsb2NfYnVmZmVyX3Bvb2woc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IGJ1ZmNudCkKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAicmVhbGNicCIpOwotCi0JaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCi0JICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogVE9ETzogc3RlZWwvYWRkIGJ1ZmZlcnMgZnJvbS90byBhIHJ1bm5pbmcgY2FyZCdzIGJ1ZmZlciBwb29sICg/KSAqLwotCXFldGhfY2xlYXJfd29ya2luZ19wb29sX2xpc3QoY2FyZCk7Ci0JcWV0aF9mcmVlX2J1ZmZlcl9wb29sKGNhcmQpOwotCWNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuYnVmX2NvdW50ID0gYnVmY250OwotCWNhcmQtPnFkaW8uaW5pdF9wb29sLmJ1Zl9jb3VudCA9IGJ1ZmNudDsKLQlyZXR1cm4gcWV0aF9hbGxvY19idWZmZXJfcG9vbChjYXJkKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9hbGxvY19xZGlvX2J1ZmZlcnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgaSwgajsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJhbGxjcWRiZiIpOwotCi0JaWYgKGF0b21pY19jbXB4Y2hnKCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCwKLQkJUUVUSF9RRElPX0FMTE9DQVRFRCkgIT0gUUVUSF9RRElPX1VOSU5JVElBTElaRUQpCi0JCXJldHVybiAwOwotCi0JY2FyZC0+cWRpby5pbl9xID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfcWRpb19xKSwKLQkJCQkgIEdGUF9LRVJORUx8R0ZQX0RNQSk7Ci0JaWYgKCFjYXJkLT5xZGlvLmluX3EpCi0JCWdvdG8gb3V0X25vbWVtOwotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJpbnEiKTsKLQlRRVRIX0RCRl9IRVgoc2V0dXAsIDIsICZjYXJkLT5xZGlvLmluX3EsIHNpemVvZih2b2lkICopKTsKLQltZW1zZXQoY2FyZC0+cWRpby5pbl9xLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfcWRpb19xKSk7Ci0JLyogZ2l2ZSBpbmJvdW5kIHFldGhfcWRpb19idWZmZXJzIHRoZWlyIHFkaW9fYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyArK2kpCi0JCWNhcmQtPnFkaW8uaW5fcS0+YnVmc1tpXS5idWZmZXIgPQotCQkJJmNhcmQtPnFkaW8uaW5fcS0+cWRpb19idWZzW2ldOwotCS8qIGluYm91bmQgYnVmZmVyIHBvb2wgKi8KLQlpZiAocWV0aF9hbGxvY19idWZmZXJfcG9vbChjYXJkKSkKLQkJZ290byBvdXRfZnJlZWlucTsKLQkvKiBvdXRib3VuZCAqLwotCWNhcmQtPnFkaW8ub3V0X3FzID0KLQkJa21hbGxvYyhjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgKgotCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiksIEdGUF9LRVJORUwpOwotCWlmICghY2FyZC0+cWRpby5vdXRfcXMpCi0JCWdvdG8gb3V0X2ZyZWVwb29sOwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXM7ICsraSkgewotCQljYXJkLT5xZGlvLm91dF9xc1tpXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EpLAotCQkJCQkgICAgICAgR0ZQX0tFUk5FTHxHRlBfRE1BKTsKLQkJaWYgKCFjYXJkLT5xZGlvLm91dF9xc1tpXSkKLQkJCWdvdG8gb3V0X2ZyZWVvdXRxOwotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIm91dHEgJWkiLCBpKTsKLQkJUUVUSF9EQkZfSEVYKHNldHVwLCAyLCAmY2FyZC0+cWRpby5vdXRfcXNbaV0sIHNpemVvZih2b2lkICopKTsKLQkJbWVtc2V0KGNhcmQtPnFkaW8ub3V0X3FzW2ldLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfcWRpb19vdXRfcSkpOwotCQljYXJkLT5xZGlvLm91dF9xc1tpXS0+cXVldWVfbm8gPSBpOwotCQkvKiBnaXZlIG91dGJvdW5kIHFldGhfcWRpb19idWZmZXJzIHRoZWlyIHFkaW9fYnVmZmVycyAqLwotCQlmb3IgKGogPSAwOyBqIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgKytqKXsKLQkJCWNhcmQtPnFkaW8ub3V0X3FzW2ldLT5idWZzW2pdLmJ1ZmZlciA9Ci0JCQkJJmNhcmQtPnFkaW8ub3V0X3FzW2ldLT5xZGlvX2J1ZnNbal07Ci0JCQlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT5xZGlvLm91dF9xc1tpXS0+YnVmc1tqXS4KLQkJCQkJICAgIHNrYl9saXN0KTsKLQkJCWxvY2tkZXBfc2V0X2NsYXNzKAotCQkJCSZjYXJkLT5xZGlvLm91dF9xc1tpXS0+YnVmc1tqXS5za2JfbGlzdC5sb2NrLAotCQkJCSZxZGlvX291dF9za2JfcXVldWVfa2V5KTsKLQkJCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5xZGlvLm91dF9xc1tpXS0+YnVmc1tqXS5jdHhfbGlzdCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci0KLW91dF9mcmVlb3V0cToKLQl3aGlsZSAoaSA+IDApCi0JCWtmcmVlKGNhcmQtPnFkaW8ub3V0X3FzWy0taV0pOwotCWtmcmVlKGNhcmQtPnFkaW8ub3V0X3FzKTsKLQljYXJkLT5xZGlvLm91dF9xcyA9IE5VTEw7Ci1vdXRfZnJlZXBvb2w6Ci0JcWV0aF9mcmVlX2J1ZmZlcl9wb29sKGNhcmQpOwotb3V0X2ZyZWVpbnE6Ci0Ja2ZyZWUoY2FyZC0+cWRpby5pbl9xKTsKLQljYXJkLT5xZGlvLmluX3EgPSBOVUxMOwotb3V0X25vbWVtOgotCWF0b21pY19zZXQoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19VTklOSVRJQUxJWkVEKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgaSwgajsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJmcmVlcWRiZiIpOwotCWlmIChhdG9taWNfeGNoZygmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX1VOSU5JVElBTElaRUQpID09Ci0JCVFFVEhfUURJT19VTklOSVRJQUxJWkVEKQotCQlyZXR1cm47Ci0Ja2ZyZWUoY2FyZC0+cWRpby5pbl9xKTsKLQljYXJkLT5xZGlvLmluX3EgPSBOVUxMOwotCS8qIGluYm91bmQgYnVmZmVyIHBvb2wgKi8KLQlxZXRoX2ZyZWVfYnVmZmVyX3Bvb2woY2FyZCk7Ci0JLyogZnJlZSBvdXRib3VuZCBxZGlvX3FzICovCi0JaWYgKGNhcmQtPnFkaW8ub3V0X3FzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXM7ICsraSkgewotCQkJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7ICsraikKLQkJCQlxZXRoX2NsZWFyX291dHB1dF9idWZmZXIoY2FyZC0+cWRpby5vdXRfcXNbaV0sCi0JCQkJCQkmY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0pOwotCQkJa2ZyZWUoY2FyZC0+cWRpby5vdXRfcXNbaV0pOwotCQl9Ci0JCWtmcmVlKGNhcmQtPnFkaW8ub3V0X3FzKTsKLQkJY2FyZC0+cWRpby5vdXRfcXMgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXFldGhfY2xlYXJfcWRpb19idWZmZXJzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IGksIGo7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2xlYXJxZGJmIik7Ci0JLyogY2xlYXIgb3V0Ym91bmQgYnVmZmVycyB0byBmcmVlIHNrYnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzOyArK2kpCi0JCWlmIChjYXJkLT5xZGlvLm91dF9xcyAmJiBjYXJkLT5xZGlvLm91dF9xc1tpXSkgewotCQkJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7ICsraikKLQkJCQlxZXRoX2NsZWFyX291dHB1dF9idWZmZXIoY2FyZC0+cWRpby5vdXRfcXNbaV0sCi0JCQkJCQkmY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0pOwotCQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2luaXRfcWRpb19pbmZvKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JUUVUSF9EQkZfVEVYVChzZXR1cCwgNCwgImludHFkaW5mIik7Ci0JYXRvbWljX3NldCgmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX1VOSU5JVElBTElaRUQpOwotCS8qIGluYm91bmQgKi8KLQljYXJkLT5xZGlvLmluX2J1Zl9zaXplID0gUUVUSF9JTl9CVUZfU0laRV9ERUZBVUxUOwotCWNhcmQtPnFkaW8uaW5pdF9wb29sLmJ1Zl9jb3VudCA9IFFFVEhfSU5fQlVGX0NPVU5UX0RFRkFVTFQ7Ci0JY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQgPSBjYXJkLT5xZGlvLmluaXRfcG9vbC5idWZfY291bnQ7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnFkaW8uaW5fYnVmX3Bvb2wuZW50cnlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnFkaW8uaW5pdF9wb29sLmVudHJ5X2xpc3QpOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2luaXRfcWRpb19xdWV1ZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgaSwgajsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiaW5pdHFkcXMiKTsKLQotCS8qIGluYm91bmQgcXVldWUgKi8KLQltZW1zZXQoY2FyZC0+cWRpby5pbl9xLT5xZGlvX2J1ZnMsIDAsCi0JICAgICAgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgKiBzaXplb2Yoc3RydWN0IHFkaW9fYnVmZmVyKSk7Ci0JcWV0aF9pbml0aWFsaXplX3dvcmtpbmdfcG9vbF9saXN0KGNhcmQpOwotCS8qZ2l2ZSBvbmx5IGFzIG1hbnkgYnVmZmVycyB0byBoYXJkd2FyZSBhcyB3ZSBoYXZlIGJ1ZmZlciBwb29sIGVudHJpZXMqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmJ1Zl9jb3VudCAtIDE7ICsraSkKLQkJcWV0aF9pbml0X2lucHV0X2J1ZmZlcihjYXJkLCAmY2FyZC0+cWRpby5pbl9xLT5idWZzW2ldKTsKLQljYXJkLT5xZGlvLmluX3EtPm5leHRfYnVmX3RvX2luaXQgPSBjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmJ1Zl9jb3VudCAtIDE7Ci0JcmMgPSBkb19RRElPKENBUkRfRERFVihjYXJkKSwgUURJT19GTEFHX1NZTkNfSU5QVVQsIDAsIDAsCi0JCSAgICAgY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQgLSAxLCBOVUxMKTsKLQlpZiAocmMpIHsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIxZXJyJWQiLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmMgPSBxZGlvX3N5bmNocm9uaXplKENBUkRfRERFVihjYXJkKSwgUURJT19GTEFHX1NZTkNfSU5QVVQsIDApOwotCWlmIChyYykgewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjJlcnIlZCIsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQkvKiBvdXRib3VuZCBxdWV1ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXM7ICsraSl7Ci0JCW1lbXNldChjYXJkLT5xZGlvLm91dF9xc1tpXS0+cWRpb19idWZzLCAwLAotCQkgICAgICAgUURJT19NQVhfQlVGRkVSU19QRVJfUSAqIHNpemVvZihzdHJ1Y3QgcWRpb19idWZmZXIpKTsKLQkJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7ICsrail7Ci0JCQlxZXRoX2NsZWFyX291dHB1dF9idWZmZXIoY2FyZC0+cWRpby5vdXRfcXNbaV0sCi0JCQkJCSZjYXJkLT5xZGlvLm91dF9xc1tpXS0+YnVmc1tqXSk7Ci0JCX0KLQkJY2FyZC0+cWRpby5vdXRfcXNbaV0tPmNhcmQgPSBjYXJkOwotCQljYXJkLT5xZGlvLm91dF9xc1tpXS0+bmV4dF9idWZfdG9fZmlsbCA9IDA7Ci0JCWNhcmQtPnFkaW8ub3V0X3FzW2ldLT5kb19wYWNrID0gMDsKLQkJYXRvbWljX3NldCgmY2FyZC0+cWRpby5vdXRfcXNbaV0tPnVzZWRfYnVmZmVycywwKTsKLQkJYXRvbWljX3NldCgmY2FyZC0+cWRpby5vdXRfcXNbaV0tPnNldF9wY2lfZmxhZ3NfY291bnQsIDApOwotCQlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLm91dF9xc1tpXS0+c3RhdGUsCi0JCQkgICBRRVRIX09VVF9RX1VOTE9DS0VEKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfcWRpb19lc3RhYmxpc2goc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgcWRpb19pbml0aWFsaXplIGluaXRfZGF0YTsKLQljaGFyICpxaWJfcGFyYW1fZmllbGQ7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICoqaW5fc2JhbF9wdHJzOwotCXN0cnVjdCBxZGlvX2J1ZmZlciAqKm91dF9zYmFsX3B0cnM7Ci0JaW50IGksIGosIGs7Ci0JaW50IHJjID0gMDsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJxZGlvZXN0Iik7Ci0KLQlxaWJfcGFyYW1fZmllbGQgPSBremFsbG9jKFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgKiBzaXplb2YoY2hhciksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLSAJaWYgKCFxaWJfcGFyYW1fZmllbGQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcWV0aF9jcmVhdGVfcWliX3BhcmFtX2ZpZWxkKGNhcmQsIHFpYl9wYXJhbV9maWVsZCk7Ci0JcWV0aF9jcmVhdGVfcWliX3BhcmFtX2ZpZWxkX2Jsa3QoY2FyZCwgcWliX3BhcmFtX2ZpZWxkKTsKLQotCWluX3NiYWxfcHRycyA9IGttYWxsb2MoUURJT19NQVhfQlVGRkVSU19QRVJfUSAqIHNpemVvZih2b2lkICopLAotCQkJICAgICAgIEdGUF9LRVJORUwpOwotCWlmICghaW5fc2JhbF9wdHJzKSB7Ci0JCWtmcmVlKHFpYl9wYXJhbV9maWVsZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlmb3IoaSA9IDA7IGkgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyArK2kpCi0JCWluX3NiYWxfcHRyc1tpXSA9IChzdHJ1Y3QgcWRpb19idWZmZXIgKikKLQkJCXZpcnRfdG9fcGh5cyhjYXJkLT5xZGlvLmluX3EtPmJ1ZnNbaV0uYnVmZmVyKTsKLQotCW91dF9zYmFsX3B0cnMgPQotCQlrbWFsbG9jKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyAqIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EgKgotCQkJc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOwotCWlmICghb3V0X3NiYWxfcHRycykgewotCQlrZnJlZShpbl9zYmFsX3B0cnMpOwotCQlrZnJlZShxaWJfcGFyYW1fZmllbGQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZm9yKGkgPSAwLCBrID0gMDsgaSA8IGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlczsgKytpKQotCQlmb3IoaiA9IDA7IGogPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyArK2osICsrayl7Ci0JCQlvdXRfc2JhbF9wdHJzW2tdID0gKHN0cnVjdCBxZGlvX2J1ZmZlciAqKQotCQkJCXZpcnRfdG9fcGh5cyhjYXJkLT5xZGlvLm91dF9xc1tpXS0+Ci0JCQkJCSAgICAgYnVmc1tqXS5idWZmZXIpOwotCQl9Ci0KLQltZW1zZXQoJmluaXRfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBxZGlvX2luaXRpYWxpemUpKTsKLQlpbml0X2RhdGEuY2RldiAgICAgICAgICAgICAgICAgICA9IENBUkRfRERFVihjYXJkKTsKLQlpbml0X2RhdGEucV9mb3JtYXQgICAgICAgICAgICAgICA9IHFldGhfZ2V0X3FkaW9fcV9mb3JtYXQoY2FyZCk7Ci0JaW5pdF9kYXRhLnFpYl9wYXJhbV9maWVsZF9mb3JtYXQgPSAwOwotCWluaXRfZGF0YS5xaWJfcGFyYW1fZmllbGQgICAgICAgID0gcWliX3BhcmFtX2ZpZWxkOwotCWluaXRfZGF0YS5taW5faW5wdXRfdGhyZXNob2xkICAgID0gUUVUSF9NSU5fSU5QVVRfVEhSRVNIT0xEOwotCWluaXRfZGF0YS5tYXhfaW5wdXRfdGhyZXNob2xkICAgID0gUUVUSF9NQVhfSU5QVVRfVEhSRVNIT0xEOwotCWluaXRfZGF0YS5taW5fb3V0cHV0X3RocmVzaG9sZCAgID0gUUVUSF9NSU5fT1VUUFVUX1RIUkVTSE9MRDsKLQlpbml0X2RhdGEubWF4X291dHB1dF90aHJlc2hvbGQgICA9IFFFVEhfTUFYX09VVFBVVF9USFJFU0hPTEQ7Ci0JaW5pdF9kYXRhLm5vX2lucHV0X3FzICAgICAgICAgICAgPSAxOwotCWluaXRfZGF0YS5ub19vdXRwdXRfcXMgICAgICAgICAgID0gY2FyZC0+cWRpby5ub19vdXRfcXVldWVzOwotCWluaXRfZGF0YS5pbnB1dF9oYW5kbGVyICAgICAgICAgID0gKHFkaW9faGFuZGxlcl90ICopCi0JCQkJCSAgIHFldGhfcWRpb19pbnB1dF9oYW5kbGVyOwotCWluaXRfZGF0YS5vdXRwdXRfaGFuZGxlciAgICAgICAgID0gKHFkaW9faGFuZGxlcl90ICopCi0JCQkJCSAgIHFldGhfcWRpb19vdXRwdXRfaGFuZGxlcjsKLQlpbml0X2RhdGEuaW50X3Bhcm0gICAgICAgICAgICAgICA9ICh1bnNpZ25lZCBsb25nKSBjYXJkOwotCWluaXRfZGF0YS5mbGFncyAgICAgICAgICAgICAgICAgID0gUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIHwKLQkJCQkJICAgUURJT19PVVRCT1VORF8wQ09QWV9TQkFMUyB8Ci0JCQkJCSAgIFFESU9fVVNFX09VVEJPVU5EX1BDSVM7Ci0JaW5pdF9kYXRhLmlucHV0X3NiYWxfYWRkcl9hcnJheSAgPSAodm9pZCAqKikgaW5fc2JhbF9wdHJzOwotCWluaXRfZGF0YS5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIG91dF9zYmFsX3B0cnM7Ci0KLQlpZiAoYXRvbWljX2NtcHhjaGcoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19BTExPQ0FURUQsCi0JCVFFVEhfUURJT19FU1RBQkxJU0hFRCkgPT0gUUVUSF9RRElPX0FMTE9DQVRFRCkKLQkJaWYgKChyYyA9IHFkaW9faW5pdGlhbGl6ZSgmaW5pdF9kYXRhKSkpCi0JCQlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fQUxMT0NBVEVEKTsKLQotCWtmcmVlKG91dF9zYmFsX3B0cnMpOwotCWtmcmVlKGluX3NiYWxfcHRycyk7Ci0Ja2ZyZWUocWliX3BhcmFtX2ZpZWxkKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfcWRpb19hY3RpdmF0ZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCVFFVEhfREJGX1RFWFQoc2V0dXAsMywicWRpb2FjdCIpOwotCXJldHVybiBxZGlvX2FjdGl2YXRlKENBUkRfRERFVihjYXJkKSwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfY2xlYXJfY2hhbm5lbChzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImNsZWFyY2giKTsKLQljYXJkID0gQ0FSRF9GUk9NX0NERVYoY2hhbm5lbC0+Y2N3ZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwotCXJjID0gY2N3X2RldmljZV9jbGVhcihjaGFubmVsLT5jY3dkZXYsIFFFVEhfQ0xFQVJfQ0hBTk5FTF9QQVJNKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7Ci0KLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGNhcmQtPndhaXRfcSwKLQkJCWNoYW5uZWwtPnN0YXRlPT1DSF9TVEFURV9TVE9QUEVELCBRRVRIX1RJTUVPVVQpOwotCWlmIChyYyA9PSAtRVJFU1RBUlRTWVMpCi0JCXJldHVybiByYzsKLQlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gQ0hfU1RBVEVfU1RPUFBFRCkKLQkJcmV0dXJuIC1FVElNRTsKLQljaGFubmVsLT5zdGF0ZSA9IENIX1NUQVRFX0RPV047Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfaGFsdF9jaGFubmVsKHN0cnVjdCBxZXRoX2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywiaGFsdGNoIik7Ci0JY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKLQlyYyA9IGNjd19kZXZpY2VfaGFsdChjaGFubmVsLT5jY3dkZXYsIFFFVEhfSEFMVF9DSEFOTkVMX1BBUk0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKLQotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY2FyZC0+d2FpdF9xLAotCQkJY2hhbm5lbC0+c3RhdGU9PUNIX1NUQVRFX0hBTFRFRCwgUUVUSF9USU1FT1VUKTsKLQlpZiAocmMgPT0gLUVSRVNUQVJUU1lTKQotCQlyZXR1cm4gcmM7Ci0JaWYgKGNoYW5uZWwtPnN0YXRlICE9IENIX1NUQVRFX0hBTFRFRCkKLQkJcmV0dXJuIC1FVElNRTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcWV0aF9oYWx0X2NoYW5uZWxzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjMSA9IDAsIHJjMj0wLCByYzMgPSAwOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJoYWx0Y2hzIik7Ci0JcmMxID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPnJlYWQpOwotCXJjMiA9IHFldGhfaGFsdF9jaGFubmVsKCZjYXJkLT53cml0ZSk7Ci0JcmMzID0gcWV0aF9oYWx0X2NoYW5uZWwoJmNhcmQtPmRhdGEpOwotCWlmIChyYzEpCi0JCXJldHVybiByYzE7Ci0JaWYgKHJjMikKLQkJcmV0dXJuIHJjMjsKLQlyZXR1cm4gcmMzOwotfQotc3RhdGljIGludAotcWV0aF9jbGVhcl9jaGFubmVscyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzEgPSAwLCByYzI9MCwgcmMzID0gMDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywiY2xlYXJjaHMiKTsKLQlyYzEgPSBxZXRoX2NsZWFyX2NoYW5uZWwoJmNhcmQtPnJlYWQpOwotCXJjMiA9IHFldGhfY2xlYXJfY2hhbm5lbCgmY2FyZC0+d3JpdGUpOwotCXJjMyA9IHFldGhfY2xlYXJfY2hhbm5lbCgmY2FyZC0+ZGF0YSk7Ci0JaWYgKHJjMSkKLQkJcmV0dXJuIHJjMTsKLQlpZiAocmMyKQotCQlyZXR1cm4gcmMyOwotCXJldHVybiByYzM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfY2xlYXJfaGFsdF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBoYWx0KQotewotCWludCByYyA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImNsaGFjcmQiKTsKLQlRRVRIX0RCRl9IRVgodHJhY2UsIDMsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7Ci0KLQlpZiAoaGFsdCkKLQkJcmMgPSBxZXRoX2hhbHRfY2hhbm5lbHMoY2FyZCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JcmV0dXJuIHFldGhfY2xlYXJfY2hhbm5lbHMoY2FyZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfcWRpb19jbGVhcl9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCB1c2VfaGFsdCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJxZGlvY2xyIik7Ci0Jc3dpdGNoIChhdG9taWNfY21weGNoZygmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX0VTVEFCTElTSEVELAotCQlRRVRIX1FESU9fQ0xFQU5JTkcpKSB7Ci0JY2FzZSBRRVRIX1FESU9fRVNUQUJMSVNIRUQ6Ci0JCWlmICgocmMgPSBxZGlvX2NsZWFudXAoQ0FSRF9EREVWKGNhcmQpLAotCQkJCShjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSA/Ci0JCQkJUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfSEFMVCA6Ci0JCQkJUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpKSkKLQkJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAzLCAiMWVyciVkIiwgcmMpOwotCQlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fQUxMT0NBVEVEKTsKLQkJYnJlYWs7Ci0JY2FzZSBRRVRIX1FESU9fQ0xFQU5JTkc6Ci0JCXJldHVybiByYzsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JaWYgKChyYyA9IHFldGhfY2xlYXJfaGFsdF9jYXJkKGNhcmQsIHVzZV9oYWx0KSkpCi0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAzLCAiMmVyciVkIiwgcmMpOwotCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9ET1dOOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9kbV9hY3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwyLCJkbWFjdCIpOwotCi0JaW9iID0gcWV0aF93YWl0X2Zvcl9idWZmZXIoJmNhcmQtPndyaXRlKTsKLQltZW1jcHkoaW9iLT5kYXRhLCBETV9BQ1QsIERNX0FDVF9TSVpFKTsKLQotCW1lbWNweShRRVRIX0RNX0FDVF9ERVNUX0FERFIoaW9iLT5kYXRhKSwKLQkgICAgICAgJmNhcmQtPnRva2VuLmNtX2Nvbm5lY3Rpb25fciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLQltZW1jcHkoUUVUSF9ETV9BQ1RfQ09OTkVDVElPTl9UT0tFTihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4udWxwX2Nvbm5lY3Rpb25fciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLQlyYyA9IHFldGhfc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgRE1fQUNUX1NJWkUsIGlvYiwgTlVMTCwgTlVMTCk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX21wY19pbml0aWFsaXplKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwyLCJtcGNpbml0Iik7Ci0KLQlpZiAoKHJjID0gcWV0aF9pc3N1ZV9uZXh0X3JlYWQoY2FyZCkpKXsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIxZXJyJWQiLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0JaWYgKChyYyA9IHFldGhfY21fZW5hYmxlKGNhcmQpKSl7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiMmVyciVkIiwgcmMpOwotCQlnb3RvIG91dF9xZGlvOwotCX0KLQlpZiAoKHJjID0gcWV0aF9jbV9zZXR1cChjYXJkKSkpewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjNlcnIlZCIsIHJjKTsKLQkJZ290byBvdXRfcWRpbzsKLQl9Ci0JaWYgKChyYyA9IHFldGhfdWxwX2VuYWJsZShjYXJkKSkpewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjRlcnIlZCIsIHJjKTsKLQkJZ290byBvdXRfcWRpbzsKLQl9Ci0JaWYgKChyYyA9IHFldGhfdWxwX3NldHVwKGNhcmQpKSl7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNWVyciVkIiwgcmMpOwotCQlnb3RvIG91dF9xZGlvOwotCX0KLQlpZiAoKHJjID0gcWV0aF9hbGxvY19xZGlvX2J1ZmZlcnMoY2FyZCkpKXsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI1ZXJyJWQiLCByYyk7Ci0JCWdvdG8gb3V0X3FkaW87Ci0JfQotCWlmICgocmMgPSBxZXRoX3FkaW9fZXN0YWJsaXNoKGNhcmQpKSl7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNmVyciVkIiwgcmMpOwotCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOwotCQlnb3RvIG91dF9xZGlvOwotCX0KLSAJaWYgKChyYyA9IHFldGhfcWRpb19hY3RpdmF0ZShjYXJkKSkpewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjdlcnIlZCIsIHJjKTsKLQkJZ290byBvdXRfcWRpbzsKLQl9Ci0JaWYgKChyYyA9IHFldGhfZG1fYWN0KGNhcmQpKSl7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiOGVyciVkIiwgcmMpOwotCQlnb3RvIG91dF9xZGlvOwotCX0KLQotCXJldHVybiAwOwotb3V0X3FkaW86Ci0JcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgY2FyZC0+aW5mby50eXBlIT1RRVRIX0NBUkRfVFlQRV9JUUQpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoKLXFldGhfZ2V0X25ldGRldmljZShlbnVtIHFldGhfY2FyZF90eXBlcyB0eXBlLCBlbnVtIHFldGhfbGlua190eXBlcyBsaW5rdHlwZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NBRToKLQkJc3dpdGNoIChsaW5rdHlwZSkgewotCQljYXNlIFFFVEhfTElOS19UWVBFX0xBTkVfVFI6Ci0JCWNhc2UgUUVUSF9MSU5LX1RZUEVfSFNUUjoKLSNpZmRlZiBDT05GSUdfVFIKLQkJCWRldiA9IGFsbG9jX3RyZGV2KDApOwotI2VuZGlmIC8qIENPTkZJR19UUiAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXYgPSBhbGxvY19ldGhlcmRldigwKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQkJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJoc2klZCIsIGV0aGVyX3NldHVwKTsKLQkJYnJlYWs7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046Ci0JCWRldiA9IGFsbG9jX25ldGRldigwLCAib3NuJWQiLCBldGhlcl9zZXR1cCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldiA9IGFsbG9jX2V0aGVyZGV2KDApOwotCX0KLQlyZXR1cm4gZGV2OwotfQotCi0vKmhhcmRfaGVhZGVyIGZha2UgZnVuY3Rpb247IHVzZWQgaW4gY2FzZSBmYWtlX2xsIGlzIHNldCAqLwotc3RhdGljIGludAotcWV0aF9mYWtlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgdW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qgdm9pZCAqZGFkZHIsIGNvbnN0IHZvaWQgKnNhZGRyLAotCQkgdW5zaWduZWQgbGVuKQotewotCWlmKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMl9UUil7Ci0JCXN0cnVjdCB0cmhfaGRyICpoZHI7Ci0gICAgICAgIAloZHIgPSAoc3RydWN0IHRyaF9oZHIgKilza2JfcHVzaChza2IsIFFFVEhfRkFLRV9MTF9MRU5fVFIpOwotCQltZW1jcHkoaGRyLT5zYWRkciwgZGV2LT5kZXZfYWRkciwgVFJfQUxFTik7Ci0gICAgICAgIAltZW1jcHkoaGRyLT5kYWRkciwgIkZBS0VMTCIsIFRSX0FMRU4pOwotCQlyZXR1cm4gUUVUSF9GQUtFX0xMX0xFTl9UUjsKLQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBldGhoZHIgKmhkcjsKLSAgICAgICAgCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLCBRRVRIX0ZBS0VfTExfTEVOX0VUSCk7Ci0JCW1lbWNweShoZHItPmhfc291cmNlLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0gICAgICAgIAltZW1jcHkoaGRyLT5oX2Rlc3QsICJGQUtFTEwiLCBFVEhfQUxFTik7Ci0gICAgICAgIAlpZiAodHlwZSAhPSBFVEhfUF84MDJfMykKLSAgICAgICAgICAgICAgICAJaGRyLT5oX3Byb3RvID0gaHRvbnModHlwZSk7Ci0gICAgICAgIAllbHNlCi0gICAgICAgICAgICAgICAgCWhkci0+aF9wcm90byA9IGh0b25zKGxlbik7Ci0JCXJldHVybiBRRVRIX0ZBS0VfTExfTEVOX0VUSDsKLQotCX0KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIHFldGhfZmFrZV9vcHMgPSB7Ci0JLmNyZWF0ZQk9IHFldGhfZmFrZV9oZWFkZXIsCi0JLnBhcnNlICA9IHFldGhfaGFyZF9oZWFkZXJfcGFyc2UsCi19OwotCi1zdGF0aWMgaW50Ci1xZXRoX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHNrX2J1ZmYgKik7Ci0KLXN0YXRpYyBpbnQKLXFldGhfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAiaHJkc3R4bWkiKTsKLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKilkZXYtPnByaXY7Ci0JaWYgKHNrYj09TlVMTCkgewotCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkvKiByZXR1cm4gT0s7IG90aGVyd2lzZSBrc29mdGlycWQgZ29lcyB0byAxMDAlICovCi0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkgfHwgIWNhcmQtPmxhbl9vbmxpbmUpIHsKLQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJY2FyZC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJLyogcmV0dXJuIE9LOyBvdGhlcndpc2Uga3NvZnRpcnFkIGdvZXMgdG8gMTAwJSAqLwotCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCX0KLQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgewotCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2NudCsrOwotCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX3N0YXJ0X3RpbWUgPSBxZXRoX2dldF9taWNyb3MoKTsKLQl9Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCWlmICgocmMgPSBxZXRoX3NlbmRfcGFja2V0KGNhcmQsIHNrYikpKSB7Ci0JCWlmIChyYyA9PSAtRUJVU1kpIHsKLQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQkJfSBlbHNlIHsKLQkJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCS8qc2V0IHRvIE9LOyBvdGhlcndpc2Uga3NvZnRpcnFkIGdvZXMgdG8gMTAwJSAqLwotCQkJcmMgPSBORVRERVZfVFhfT0s7Ci0JCX0KLQl9Ci0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX3RpbWUgKz0gcWV0aF9nZXRfbWljcm9zKCkgLQotCQkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9zdGFydF90aW1lOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF92ZXJpZnlfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmc7Ci0JaW50IGk7Ci0KLQlpZiAoISh2ZyA9IGNhcmQtPnZsYW5ncnApKQotCQlyZXR1cm4gcmM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IGkrKyl7Ci0JCWlmICh2bGFuX2dyb3VwX2dldF9kZXZpY2UodmcsIGkpID09IGRldil7Ci0JCQlyYyA9IFFFVEhfVkxBTl9DQVJEOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHJjICYmICEodmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2Rldi0+cHJpdiA9PSAodm9pZCAqKWNhcmQpKQotCQlyZXR1cm4gMDsKLQotI2VuZGlmCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3ZlcmlmeV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjID0gMDsKLQotCXJlYWRfbG9ja19pcnFzYXZlKCZxZXRoX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhcmQsICZxZXRoX2NhcmRfbGlzdC5saXN0LCBsaXN0KXsKLQkJaWYgKGNhcmQtPmRldiA9PSBkZXYpewotCQkJcmMgPSBRRVRIX1JFQUxfQ0FSRDsKLQkJCWJyZWFrOwotCQl9Ci0JCXJjID0gcWV0aF92ZXJpZnlfdmxhbl9kZXYoZGV2LCBjYXJkKTsKLQkJaWYgKHJjKQotCQkJYnJlYWs7Ci0JfQotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnFldGhfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfY2FyZCAqCi1xZXRoX2dldF9jYXJkX2Zyb21fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IE5VTEw7Ci0JaW50IHJjOwotCi0JcmMgPSBxZXRoX3ZlcmlmeV9kZXYoZGV2KTsKLQlpZiAocmMgPT0gUUVUSF9SRUFMX0NBUkQpCi0JCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKWRldi0+cHJpdjsKLQllbHNlIGlmIChyYyA9PSBRRVRIX1ZMQU5fQ0FSRCkKLQkJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopCi0JCQl2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2LT5wcml2OwotCi0JUUVUSF9EQkZfVEVYVF8odHJhY2UsIDQsICIlZCIsIHJjKTsKLQlyZXR1cm4gY2FyZCA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCi0JY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGRldi0+cHJpdjsKLQljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKLQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgInFldGhvcGVuIik7Ci0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OwotCi0JaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICggKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pICYmCi0JICAgICAoY2FyZC0+b3B0aW9ucy5sYXllcjIpICYmCi0JICAgICAoIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQpKSkgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsIm5vbWFjYWRyIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCWNhcmQtPmRhdGEuc3RhdGUgPSBDSF9TVEFURV9VUDsKLQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfVVA7Ci0JY2FyZC0+ZGV2LT5mbGFncyB8PSBJRkZfVVA7Ci0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotCWlmICghY2FyZC0+bGFuX29ubGluZSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikpCi0JCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAicWV0aHN0b3AiKTsKLQotCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBkZXYtPnByaXY7Ci0KLQluZXRpZl90eF9kaXNhYmxlKGRldik7Ci0JY2FyZC0+ZGV2LT5mbGFncyAmPSB+SUZGX1VQOwotCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQotCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfU09GVFNFVFVQOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2dldF9jYXN0X3R5cGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgY2FzdF90eXBlID0gUlROX1VOU1BFQzsKLQotCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQotCQlyZXR1cm4gY2FzdF90eXBlOwotCi0JaWYgKHNrYi0+ZHN0ICYmIHNrYi0+ZHN0LT5uZWlnaGJvdXIpewotCQljYXN0X3R5cGUgPSBza2ItPmRzdC0+bmVpZ2hib3VyLT50eXBlOwotCQlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSB8fAotCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fTVVMVElDQVNUKSB8fAotCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fQU5ZQ0FTVCkpCi0JCQlyZXR1cm4gY2FzdF90eXBlOwotCQllbHNlCi0JCQlyZXR1cm4gUlROX1VOU1BFQzsKLQl9Ci0JLyogdHJ5IHNvbWV0aGluZyBlbHNlICovCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVBWNikKLQkJcmV0dXJuIChza2JfbmV0d29ya19oZWFkZXIoc2tiKVsyNF0gPT0gMHhmZikgPwotCQkJCVJUTl9NVUxUSUNBU1QgOiAwOwotCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApCi0JCXJldHVybiAoKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpWzE2XSAmIDB4ZjApID09IDB4ZTApID8KLQkJCQlSVE5fTVVMVElDQVNUIDogMDsKLQkvKiAuLi4gKi8KLQlpZiAoIW1lbWNtcChza2ItPmRhdGEsIHNrYi0+ZGV2LT5icm9hZGNhc3QsIDYpKQotCQlyZXR1cm4gUlROX0JST0FEQ0FTVDsKLQllbHNlIHsKLQkJdTE2IGhkcl9tYWM7Ci0KLQkgICAgICAgIGhkcl9tYWMgPSAqKCh1MTYgKilza2ItPmRhdGEpOwotCSAgICAgICAgLyogdHIgbXVsdGljYXN0PyAqLwotCSAgICAgICAgc3dpdGNoIChjYXJkLT5pbmZvLmxpbmtfdHlwZSkgewotCSAgICAgICAgY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgotCSAgICAgICAgY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSOgotCSAgICAgICAgCWlmICgoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19OQykgfHwKLQkJCSAgICAoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19DKSkKLQkJCQlyZXR1cm4gUlROX01VTFRJQ0FTVDsKLQkJCWJyZWFrOwotCSAgICAgICAgLyogZXRoIG9yIHNvIG11bHRpY2FzdD8gKi8KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgIAlpZiAoKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y0KSB8fAotCQkJICAgIChoZHJfbWFjID09IFFFVEhfRVRIX01BQ19WNikpCi0JCQkgICAgICAgIHJldHVybiBSVE5fTVVMVElDQVNUOwotCSAgICAgICAgfQotICAgICAgICB9Ci0JcmV0dXJuIGNhc3RfdHlwZTsKLX0KLQotc3RhdGljIGludAotcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgICBpbnQgaXB2LCBpbnQgY2FzdF90eXBlKQotewotCWlmICghaXB2ICYmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NBRSkpCi0JCXJldHVybiBjYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlOwotCXN3aXRjaCAoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzKSB7Ci0JY2FzZSA0OgotCQlpZiAoY2FzdF90eXBlICYmIGNhcmQtPmluZm8uaXNfbXVsdGljYXN0X2RpZmZlcmVudCkKLQkJCXJldHVybiBjYXJkLT5pbmZvLmlzX211bHRpY2FzdF9kaWZmZXJlbnQgJgotCQkJCShjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgLSAxKTsKLQkJaWYgKGNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyAmJiAoaXB2ID09IDQpKSB7Ci0JCQljb25zdCB1OCB0b3MgPSBpcF9oZHIoc2tiKS0+dG9zOwotCi0JCQlpZiAoY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nPT1RRVRIX1BSSU9fUV9JTkdfVE9TKXsKLQkJCQlpZiAodG9zICYgSVBfVE9TX05PVElNUE9SVEFOVCkKLQkJCQkJcmV0dXJuIDM7Ci0JCQkJaWYgKHRvcyAmIElQX1RPU19ISUdIUkVMSUFCSUxJVFkpCi0JCQkJCXJldHVybiAyOwotCQkJCWlmICh0b3MgJiBJUF9UT1NfSElHSFRIUk9VR0hQVVQpCi0JCQkJCXJldHVybiAxOwotCQkJCWlmICh0b3MgJiBJUF9UT1NfTE9XREVMQVkpCi0JCQkJCXJldHVybiAwOwotCQkJfQotCQkJaWYgKGNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZz09UUVUSF9QUklPX1FfSU5HX1BSRUMpCi0JCQkJcmV0dXJuIDMgLSAodG9zID4+IDYpOwotCQl9IGVsc2UgaWYgKGNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyAmJiAoaXB2ID09IDYpKSB7Ci0JCQkvKiBUT0RPOiBJUHY2ISEhICovCi0JCX0KLQkJcmV0dXJuIGNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWU7Ci0JY2FzZSAxOiAvKiBmYWxsdGhyb3VnaCBmb3Igc2luZ2xlLW91dC1xdWV1ZSAxOTIwLWRldmljZSAqLwotCWRlZmF1bHQ6Ci0JCXJldHVybiBjYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXFldGhfZ2V0X2lwX3ZlcnNpb24oc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIEVUSF9QX0lQVjY6Ci0JCXJldHVybiA2OwotCWNhc2UgRVRIX1BfSVA6Ci0JCXJldHVybiA0OwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2hkciAqCi1fX3FldGhfcHJlcGFyZV9za2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwdikKLXsKLSNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCi0JdTE2ICp0YWc7Ci0JaWYgKGNhcmQtPnZsYW5ncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpICYmCi0JICAgICgoaXB2ID09IDYpIHx8IGNhcmQtPm9wdGlvbnMubGF5ZXIyKSApIHsKLQkJLyoKLQkJICogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyAoNiBieXRlcyBzcmMsIDYgYnl0ZXMgZGVzdCkKLQkJICogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGhlYWRlci4gIFdlIGFyZSB1c2luZyB0aHJlZQotCQkgKiBtZW1jcHlzIGluc3RlYWQgb2Ygb25lIG1lbW1vdmUgdG8gc2F2ZSBjeWNsZXMuCi0JCSAqLwotCQlza2JfcHVzaChza2IsIFZMQU5fSExFTik7Ci0JCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgc2tiLT5kYXRhICsgNCwgNCk7Ci0JCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChza2IsIDQsIHNrYi0+ZGF0YSArIDgsIDQpOwotCQlza2JfY29weV90b19saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCA4LCBza2ItPmRhdGEgKyAxMiwgNCk7Ci0JCXRhZyA9ICh1MTYgKikoc2tiLT5kYXRhICsgMTIpOwotCQkvKgotCQkgKiBmaXJzdCB0d28gYnl0ZXMgID0gRVRIX1BfODAyMVEgKDB4ODEwMCkKLQkJICogc2Vjb25kIHR3byBieXRlcyA9IFZMQU5JRAotCQkgKi8KLQkJKnRhZyA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpOwotCQkqKHRhZyArIDEpID0gaHRvbnModmxhbl90eF90YWdfZ2V0KHNrYikpOwotCX0KLSNlbmRpZgotCXJldHVybiAoKHN0cnVjdCBxZXRoX2hkciAqKQotCQlxZXRoX3B1c2hfc2tiKGNhcmQsIHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpKTsKLX0KLQotc3RhdGljIHZvaWQKLV9fcWV0aF9mcmVlX25ld19za2Ioc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYikKLXsKLQlpZiAob3JpZ19za2IgIT0gbmV3X3NrYikKLQkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1xZXRoX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSBzdHJ1Y3QgcWV0aF9oZHIgKipoZHIsIGludCBpcHYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2IsICpuZXdfc2tiMjsKLQkKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicHJlcHNrYiIpOwotCW5ld19za2IgPSBza2I7Ci0JbmV3X3NrYiA9IHFldGhfcHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFuZXdfc2tiKQotCQlyZXR1cm4gTlVMTDsKLQluZXdfc2tiMiA9IHFldGhfcmVhbGxvY19oZWFkcm9vbShjYXJkLCBuZXdfc2tiLAotCQkJCQkgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCWlmICghbmV3X3NrYjIpIHsKLQkJX19xZXRoX2ZyZWVfbmV3X3NrYihza2IsIG5ld19za2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKG5ld19za2IgIT0gc2tiKQotCQlfX3FldGhfZnJlZV9uZXdfc2tiKG5ld19za2IyLCBuZXdfc2tiKTsKLQluZXdfc2tiID0gbmV3X3NrYjI7Ci0JKmhkciA9IF9fcWV0aF9wcmVwYXJlX3NrYihjYXJkLCBuZXdfc2tiLCBpcHYpOwotCWlmICgqaGRyID09IE5VTEwpIHsKLQkJX19xZXRoX2ZyZWVfbmV3X3NrYihza2IsIG5ld19za2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIG5ld19za2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTgKLXFldGhfZ2V0X3FldGhfaGRyX2ZsYWdzNChpbnQgY2FzdF90eXBlKQotewotCWlmIChjYXN0X3R5cGUgPT0gUlROX01VTFRJQ0FTVCkKLQkJcmV0dXJuIFFFVEhfQ0FTVF9NVUxUSUNBU1Q7Ci0JaWYgKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKQotCQlyZXR1cm4gUUVUSF9DQVNUX0JST0FEQ0FTVDsKLQlyZXR1cm4gUUVUSF9DQVNUX1VOSUNBU1Q7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTgKLXFldGhfZ2V0X3FldGhfaGRyX2ZsYWdzNihpbnQgY2FzdF90eXBlKQotewotCXU4IGN0ID0gUUVUSF9IRFJfUEFTU1RIUlUgfCBRRVRIX0hEUl9JUFY2OwotCWlmIChjYXN0X3R5cGUgPT0gUlROX01VTFRJQ0FTVCkKLQkJcmV0dXJuIGN0IHwgUUVUSF9DQVNUX01VTFRJQ0FTVDsKLQlpZiAoY2FzdF90eXBlID09IFJUTl9BTllDQVNUKQotCQlyZXR1cm4gY3QgfCBRRVRIX0NBU1RfQU5ZQ0FTVDsKLQlpZiAoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpCi0JCXJldHVybiBjdCB8IFFFVEhfQ0FTVF9CUk9BRENBU1Q7Ci0JcmV0dXJuIGN0IHwgUUVUSF9DQVNUX1VOSUNBU1Q7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2xheWVyMl9nZXRfcGFja2V0X3R5cGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfaGRyICpoZHIsCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlfX3UxNiBoZHJfbWFjOwotCi0JaWYgKCFtZW1jbXAoc2tiLT5kYXRhK1FFVEhfSEVBREVSX1NJWkUsCi0JCSAgICBza2ItPmRldi0+YnJvYWRjYXN0LDYpKSB7IC8qIGJyb2FkY2FzdD8gKi8KLQkJKihfX3UzMiAqKWhkci0+aGRyLmwyLmZsYWdzIHw9Ci0JCQkgUUVUSF9MQVlFUjJfRkxBR19CUk9BRENBU1QgPDwgODsKLQkJcmV0dXJuOwotCX0KLQloZHJfbWFjPSooKF9fdTE2Kilza2ItPmRhdGEpOwotCS8qIHRyIG11bHRpY2FzdD8gKi8KLQlzd2l0Y2ggKGNhcmQtPmluZm8ubGlua190eXBlKSB7Ci0JY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgotCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKLQkJaWYgKChoZHJfbWFjID09IFFFVEhfVFJfTUFDX05DKSB8fAotCQkgICAgKGhkcl9tYWMgPT0gUUVUSF9UUl9NQUNfQykgKQotCQkJKihfX3UzMiAqKWhkci0+aGRyLmwyLmZsYWdzIHw9Ci0JCQkJUUVUSF9MQVlFUjJfRkxBR19NVUxUSUNBU1QgPDwgODsKLQkJZWxzZQotCQkJKihfX3UzMiAqKWhkci0+aGRyLmwyLmZsYWdzIHw9Ci0JCQkJUUVUSF9MQVlFUjJfRkxBR19VTklDQVNUIDw8IDg7Ci0JCWJyZWFrOwotCQkvKiBldGggb3Igc28gbXVsdGljYXN0PyAqLwotCWRlZmF1bHQ6Ci0JCWlmICggKGhkcl9tYWM9PVFFVEhfRVRIX01BQ19WNCkgfHwKLQkJICAgICAoaGRyX21hYz09UUVUSF9FVEhfTUFDX1Y2KSApCi0JCQkqKF9fdTMyICopaGRyLT5oZHIubDIuZmxhZ3MgfD0KLQkJCQlRRVRIX0xBWUVSMl9GTEFHX01VTFRJQ0FTVCA8PCA4OwotCQllbHNlCi0JCQkqKF9fdTMyICopaGRyLT5oZHIubDIuZmxhZ3MgfD0KLQkJCQlRRVRIX0xBWUVSMl9GTEFHX1VOSUNBU1QgPDwgODsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2xheWVyMl9maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKLQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBjYXN0X3R5cGUpCi17Ci0JbWVtc2V0KGhkciwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCWhkci0+aGRyLmwyLmlkID0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjI7Ci0KLQkvKiBzZXQgYnl0ZSAwIHRvICIweDAyIiBhbmQgYnl0ZSAzIHRvIGNhc3RpbmcgZmxhZ3MgKi8KLQlpZiAoY2FzdF90eXBlPT1SVE5fTVVMVElDQVNUKQotCQkqKF9fdTMyICopaGRyLT5oZHIubDIuZmxhZ3MgfD0gUUVUSF9MQVlFUjJfRkxBR19NVUxUSUNBU1QgPDwgODsKLQllbHNlIGlmIChjYXN0X3R5cGU9PVJUTl9CUk9BRENBU1QpCi0JCSooX191MzIgKiloZHItPmhkci5sMi5mbGFncyB8PSBRRVRIX0xBWUVSMl9GTEFHX0JST0FEQ0FTVCA8PCA4OwotCSBlbHNlCi0JCXFldGhfbGF5ZXIyX2dldF9wYWNrZXRfdHlwZShjYXJkLCBoZHIsIHNrYik7Ci0KLQloZHItPmhkci5sMi5wa3RfbGVuZ3RoID0gc2tiLT5sZW4tUUVUSF9IRUFERVJfU0laRTsKLSNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCi0JLyogVlNXSVRDSCByZWxpZXMgb24gdGhlIFZMQU4KLQkgKiBpbmZvcm1hdGlvbiB0byBiZSBwcmVzZW50IGluCi0JICogdGhlIFFESU8gaGVhZGVyICovCi0JaWYgKChjYXJkLT52bGFuZ3JwICE9IE5VTEwpICYmCi0JICAgIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewotCQkqKF9fdTMyICopaGRyLT5oZHIubDIuZmxhZ3MgfD0gUUVUSF9MQVlFUjJfRkxBR19WTEFOIDw8IDg7Ci0JCWhkci0+aGRyLmwyLnZsYW5faWQgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKLQl9Ci0jZW5kaWYKLX0KLQotdm9pZAotcWV0aF9maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwdiwgaW50IGNhc3RfdHlwZSkKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAiZmlsbGhkciIpOwotCi0JbWVtc2V0KGhkciwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQlxZXRoX2xheWVyMl9maWxsX2hlYWRlcihjYXJkLCBoZHIsIHNrYiwgY2FzdF90eXBlKTsKLQkJcmV0dXJuOwotCX0KLQloZHItPmhkci5sMy5pZCA9IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIzOwotCWhkci0+aGRyLmwzLmV4dF9mbGFncyA9IDA7Ci0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotCS8qCi0JICogYmVmb3JlIHdlJ3JlIGdvaW5nIHRvIG92ZXJ3cml0ZSB0aGlzIGxvY2F0aW9uIHdpdGggbmV4dCBob3AgaXAuCi0JICogdjYgdXNlcyBwYXNzdGhyb3VnaCwgdjQgc2V0cyB0aGUgdGFnIGluIHRoZSBRRElPIGhlYWRlci4KLQkgKi8KLQlpZiAoY2FyZC0+dmxhbmdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJaGRyLT5oZHIubDMuZXh0X2ZsYWdzID0gKGlwdiA9PSA0KSA/Ci0JCQlRRVRIX0hEUl9FWFRfVkxBTl9GUkFNRSA6Ci0JCQlRRVRIX0hEUl9FWFRfSU5DTFVERV9WTEFOX1RBRzsKLQkJaGRyLT5oZHIubDMudmxhbl9pZCA9IHZsYW5fdHhfdGFnX2dldChza2IpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUUVUSF9WTEFOICovCi0JaGRyLT5oZHIubDMubGVuZ3RoID0gc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQlpZiAoaXB2ID09IDQpIHsJIC8qIElQdjQgKi8KLQkJaGRyLT5oZHIubDMuZmxhZ3MgPSBxZXRoX2dldF9xZXRoX2hkcl9mbGFnczQoY2FzdF90eXBlKTsKLQkJbWVtc2V0KGhkci0+aGRyLmwzLmRlc3RfYWRkciwgMCwgMTIpOwotCQlpZiAoKHNrYi0+ZHN0KSAmJiAoc2tiLT5kc3QtPm5laWdoYm91cikpIHsKLQkJCSooKHUzMiAqKSAoJmhkci0+aGRyLmwzLmRlc3RfYWRkclsxMl0pKSA9Ci0JCQkgICAgKigodTMyICopIHNrYi0+ZHN0LT5uZWlnaGJvdXItPnByaW1hcnlfa2V5KTsKLQkJfSBlbHNlIHsKLQkJCS8qIGZpbGwgaW4gZGVzdGluYXRpb24gYWRkcmVzcyB1c2VkIGluIGlwIGhlYWRlciAqLwotCQkJKigodTMyICopKCZoZHItPmhkci5sMy5kZXN0X2FkZHJbMTJdKSkgPQotCQkJCQkJCSAgIGlwX2hkcihza2IpLT5kYWRkcjsKLQkJfQotCX0gZWxzZSBpZiAoaXB2ID09IDYpIHsgLyogSVB2NiBvciBwYXNzdGhydSAqLwotCQloZHItPmhkci5sMy5mbGFncyA9IHFldGhfZ2V0X3FldGhfaGRyX2ZsYWdzNihjYXN0X3R5cGUpOwotCQlpZiAoKHNrYi0+ZHN0KSAmJiAoc2tiLT5kc3QtPm5laWdoYm91cikpIHsKLQkJCW1lbWNweShoZHItPmhkci5sMy5kZXN0X2FkZHIsCi0JCQkgICAgICAgc2tiLT5kc3QtPm5laWdoYm91ci0+cHJpbWFyeV9rZXksIDE2KTsKLQkJfSBlbHNlIHsKLQkJCS8qIGZpbGwgaW4gZGVzdGluYXRpb24gYWRkcmVzcyB1c2VkIGluIGlwIGhlYWRlciAqLwotCQkJbWVtY3B5KGhkci0+aGRyLmwzLmRlc3RfYWRkciwKLQkJCSAgICAgICAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsIDE2KTsKLQkJfQotCX0gZWxzZSB7IC8qIHBhc3N0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgaWYoKHNrYi0+ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKSAmJgotCQkgICAgIW1lbWNtcChza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCi0JCSAgICBzaXplb2YoX191MTYpLCBza2ItPmRldi0+YnJvYWRjYXN0LCA2KSkgewotCQkJaGRyLT5oZHIubDMuZmxhZ3MgPSBRRVRIX0NBU1RfQlJPQURDQVNUIHwKLQkJCQkJCVFFVEhfSERSX1BBU1NUSFJVOwotCQl9IGVsc2UgaWYgKCFtZW1jbXAoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkciksCi0JCQkgICAgc2tiLT5kZXYtPmJyb2FkY2FzdCwgNikpIHsgICAvKiBicm9hZGNhc3Q/ICovCi0JCQloZHItPmhkci5sMy5mbGFncyA9IFFFVEhfQ0FTVF9CUk9BRENBU1QgfAotCQkJCQkJUUVUSF9IRFJfUEFTU1RIUlU7Ci0JCX0gZWxzZSB7Ci0gCQkJaGRyLT5oZHIubDMuZmxhZ3MgPSAoY2FzdF90eXBlID09IFJUTl9NVUxUSUNBU1QpID8KLSAJCQkJUUVUSF9DQVNUX01VTFRJQ0FTVCB8IFFFVEhfSERSX1BBU1NUSFJVIDoKLSAJCQkJUUVUSF9DQVNUX1VOSUNBU1QgfCBRRVRIX0hEUl9QQVNTVEhSVTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLV9fcWV0aF9maWxsX2J1ZmZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlciwKLQkJICAgaW50IGlzX3RzbywgaW50ICpuZXh0X2VsZW1lbnRfdG9fZmlsbCkKLXsKLQlpbnQgbGVuZ3RoID0gc2tiLT5sZW47Ci0JaW50IGxlbmd0aF9oZXJlOwotCWludCBlbGVtZW50OwotCWNoYXIgKmRhdGE7Ci0JaW50IGZpcnN0X2xhcCA7Ci0KLQllbGVtZW50ID0gKm5leHRfZWxlbWVudF90b19maWxsOwotCWRhdGEgPSBza2ItPmRhdGE7Ci0JZmlyc3RfbGFwID0gKGlzX3RzbyA9PSAwID8gMSA6IDApOwotCi0Jd2hpbGUgKGxlbmd0aCA+IDApIHsKLQkJLyogbGVuZ3RoX2hlcmUgaXMgdGhlIHJlbWFpbmluZyBhbW91bnQgb2YgZGF0YSBpbiB0aGlzIHBhZ2UgKi8KLQkJbGVuZ3RoX2hlcmUgPSBQQUdFX1NJWkUgLSAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgJSBQQUdFX1NJWkUpOwotCQlpZiAobGVuZ3RoIDwgbGVuZ3RoX2hlcmUpCi0JCQlsZW5ndGhfaGVyZSA9IGxlbmd0aDsKLQotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IGRhdGE7Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBsZW5ndGhfaGVyZTsKLQkJbGVuZ3RoIC09IGxlbmd0aF9oZXJlOwotCQlpZiAoIWxlbmd0aCkgewotCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSAwOwotCQkJZWxzZQotCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJICAgIFNCQUxfRkxBR1NfTEFTVF9GUkFHOwotCQl9IGVsc2UgewotCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCSAgICBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7Ci0JCQllbHNlCi0JCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkgICAgU0JBTF9GTEFHU19NSURETEVfRlJBRzsKLQkJfQotCQlkYXRhICs9IGxlbmd0aF9oZXJlOwotCQllbGVtZW50Kys7Ci0JCWZpcnN0X2xhcCA9IDA7Ci0JfQotCSpuZXh0X2VsZW1lbnRfdG9fZmlsbCA9IGVsZW1lbnQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZmlsbF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCi0JCSBzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiwKLQkJIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHFldGhfaGRyX3RzbyAqaGRyOwotCWludCBmbHVzaF9jbnQgPSAwLCBoZHJfbGVuLCBsYXJnZV9zZW5kID0gMDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJxZGZpbGxiZiIpOwotCi0JYnVmZmVyID0gYnVmLT5idWZmZXI7Ci0JYXRvbWljX2luYygmc2tiLT51c2Vycyk7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmJ1Zi0+c2tiX2xpc3QsIHNrYik7Ci0KLQloZHIgID0gKHN0cnVjdCBxZXRoX2hkcl90c28gKikgc2tiLT5kYXRhOwotCS8qY2hlY2sgZmlyc3Qgb24gVFNPIC4uLi4qLwotCWlmIChoZHItPmhkci5oZHIubDMuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9UU08pIHsKLQkJaW50IGVsZW1lbnQgPSBidWYtPm5leHRfZWxlbWVudF90b19maWxsOwotCi0JCWhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykgKyBoZHItPmV4dC5kZ19oZHJfbGVuOwotCQkvKmZpbGwgZmlyc3QgYnVmZmVyIGVudHJ5IG9ubHkgd2l0aCBoZWFkZXIgaW5mb3JtYXRpb24gKi8KLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmFkZHIgPSBza2ItPmRhdGE7Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBoZHJfbGVuOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7Ci0JCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKLQkJc2tiLT5kYXRhICs9IGhkcl9sZW47Ci0JCXNrYi0+bGVuICAtPSBoZHJfbGVuOwotCQlsYXJnZV9zZW5kID0gMTsKLQl9Ci0JaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkKLQkJX19xZXRoX2ZpbGxfYnVmZmVyKHNrYiwgYnVmZmVyLCBsYXJnZV9zZW5kLAotCQkJCSAgIChpbnQgKikmYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCk7Ci0JZWxzZQotCQlfX3FldGhfZmlsbF9idWZmZXJfZnJhZyhza2IsIGJ1ZmZlciwgbGFyZ2Vfc2VuZCwKLQkJCQkJKGludCAqKSZidWYtPm5leHRfZWxlbWVudF90b19maWxsKTsKLQotCWlmICghcXVldWUtPmRvX3BhY2spIHsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImZpbGxiZm5wIik7Ci0JCS8qIHNldCBzdGF0ZSB0byBQUklNRUQgLT4gd2lsbCBiZSBmbHVzaGVkICovCi0JCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJZmx1c2hfY250ID0gMTsKLQl9IGVsc2UgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAiZmlsbGJmcGEiKTsKLQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKLQkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPj0KLQkJCQlRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpKSB7Ci0JCQkvKgotCQkJICogcGFja2VkIGJ1ZmZlciBpZiBmdWxsIC0+IHNldCBzdGF0ZSBQUklNRUQKLQkJCSAqIC0+IHdpbGwgYmUgZmx1c2hlZAotCQkJICovCi0JCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQlmbHVzaF9jbnQgPSAxOwotCQl9Ci0JfQotCXJldHVybiBmbHVzaF9jbnQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKLQkJCSBpbnQgZWxlbWVudHNfbmVlZGVkLAotCQkJIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwotCWludCBidWZmZXJzX25lZWRlZCA9IDA7Ci0JaW50IGZsdXNoX2NudCA9IDA7Ci0JaW50IGluZGV4OwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImRvc25kcGZhIik7Ci0KLQkvKiBzcGluIHVudGlsIHdlIGdldCB0aGUgcXVldWUgLi4uICovCi0Jd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQsCi0JCQkgICAgICBRRVRIX09VVF9RX0xPQ0tFRCkgIT0gUUVUSF9PVVRfUV9VTkxPQ0tFRCk7Ci0JLyogLi4uIG5vdyB3ZSd2ZSBnb3QgdGhlIHF1ZXVlICovCi0JaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKLQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbcXVldWUtPm5leHRfYnVmX3RvX2ZpbGxdOwotCS8qCi0JICogY2hlY2sgaWYgYnVmZmVyIGlzIGVtcHR5IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCAnb3ZlcnRha2UnCi0JICogb3Vyc2VsdmVzIGFuZCB0cnkgdG8gZmlsbCBhIGJ1ZmZlciB0aGF0IGlzIGFscmVhZHkgcHJpbWVkCi0JICovCi0JaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKSAKLQkJZ290byBvdXQ7Ci0JaWYgKGN0eCA9PSBOVUxMKQotCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKLQkJCQkJICBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCWVsc2UgewotCQlidWZmZXJzX25lZWRlZCA9IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHF1ZXVlLGN0eCk7Ci0JCWlmIChidWZmZXJzX25lZWRlZCA8IDApIAotCQkJZ290byBvdXQ7Ci0JCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KLQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIGJ1ZmZlcnNfbmVlZGVkKSAlCi0JCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KLQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCWlmIChjdHggPT0gTlVMTCkgewotCQlxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYik7Ci0JCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgMCwgaW5kZXgsIDEpOwotCX0gZWxzZSB7Ci0JCWZsdXNoX2NudCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSwgY3R4LCBpbmRleCk7Ci0JCVdBUk5fT04oYnVmZmVyc19uZWVkZWQgIT0gZmx1c2hfY250KTsKLQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCAwLCBpbmRleCwgZmx1c2hfY250KTsKLQl9Ci0JcmV0dXJuIDA7Ci1vdXQ6Ci0JYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX1VOTE9DS0VEKTsKLQlyZXR1cm4gLUVCVVNZOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2RvX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAotCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpoZHIsCi0JCSAgICBpbnQgZWxlbWVudHNfbmVlZGVkLCBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlcjsKLQlpbnQgc3RhcnRfaW5kZXg7Ci0JaW50IGZsdXNoX2NvdW50ID0gMDsKLQlpbnQgZG9fcGFjayA9IDA7Ci0JaW50IHRtcDsKLQlpbnQgcmMgPSAwOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImRvc25kcGt0Iik7Ci0KLQkvKiBzcGluIHVudGlsIHdlIGdldCB0aGUgcXVldWUgLi4uICovCi0Jd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQsCi0JCQkgICAgICBRRVRIX09VVF9RX0xPQ0tFRCkgIT0gUUVUSF9PVVRfUV9VTkxPQ0tFRCk7Ci0Jc3RhcnRfaW5kZXggPSBxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbDsKLQlidWZmZXIgPSAmcXVldWUtPmJ1ZnNbcXVldWUtPm5leHRfYnVmX3RvX2ZpbGxdOwotCS8qCi0JICogY2hlY2sgaWYgYnVmZmVyIGlzIGVtcHR5IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCAnb3ZlcnRha2UnCi0JICogb3Vyc2VsdmVzIGFuZCB0cnkgdG8gZmlsbCBhIGJ1ZmZlciB0aGF0IGlzIGFscmVhZHkgcHJpbWVkCi0JICovCi0JaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKSB7Ci0JCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3dpdGNoIHBhY2tpbmcgc3RhdGUgb2YgdGhpcyBxdWV1ZSAqLwotCXFldGhfc3dpdGNoX3RvX3BhY2tpbmdfaWZfbmVlZGVkKHF1ZXVlKTsKLQlpZiAocXVldWUtPmRvX3BhY2spewotCQlkb19wYWNrID0gMTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQkvKiBkb2VzIHBhY2tldCBmaXQgaW4gY3VycmVudCBidWZmZXI/ICovCi0JCQlpZigoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0KLQkJCSAgICBidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsKSA8IGVsZW1lbnRzX25lZWRlZCl7Ci0JCQkJLyogLi4uIG5vIC0+IHNldCBzdGF0ZSBQUklNRUQgKi8KLQkJCQlhdG9taWNfc2V0KCZidWZmZXItPnN0YXRlLFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCQlmbHVzaF9jb3VudCsrOwotCQkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KLQkJCQkJKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQotCQkJCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCQkJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07Ci0JCQkJLyogd2UgZGlkIGEgc3RlcCBmb3J3YXJkLCBzbyBjaGVjayBidWZmZXIgc3RhdGUKLQkJCQkgKiBhZ2FpbiAqLwotCQkJCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0KLQkJCQkJCVFFVEhfUURJT19CVUZfRU1QVFkpewotCQkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDAsIHN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7Ci0JCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7Ci0JCQkJCXJldHVybiAtRUJVU1k7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJLyogY2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggZWxlbWVudHMgKGluY2x1ZGluZyBmb2xsb3dpbmcKLQkJCSAqIGZyZWUgYnVmZmVycykgdG8gaGFuZGxlIGVkZHAgY29udGV4dCAqLwotCQkJaWYgKHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHF1ZXVlLGN0eCkgPCAwKXsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlQUklOVF9XQVJOKCJlZGRwIHR4X2Ryb3BwZWQgMVxuIik7Ci0JCQkJcmMgPSAtRUJVU1k7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGN0eCA9PSBOVUxMKQotCQl0bXAgPSBxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYik7Ci0JZWxzZSB7Ci0JCXRtcCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSxjdHgscXVldWUtPm5leHRfYnVmX3RvX2ZpbGwpOwotCQlpZiAodG1wIDwgMCkgewotCQkJcHJpbnRrKCJlZGRwIHR4X2Ryb3BwZWQgMlxuIik7Ci0JCQlyYyA9IC0gRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9IChxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIHRtcCkgJQotCQkJCSAgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQlmbHVzaF9jb3VudCArPSB0bXA7Ci1vdXQ6Ci0JaWYgKGZsdXNoX2NvdW50KQotCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDAsIHN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7Ci0JZWxzZSBpZiAoIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpCi0JCWF0b21pY194Y2hnKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfTE9DS0VEX0ZMVVNIKTsKLQkvKgotCSAqIHF1ZXVlLT5zdGF0ZSB3aWxsIGdvIGZyb20gTE9DS0VEIC0+IFVOTE9DS0VEIG9yIGZyb20KLQkgKiBMT0NLRURfRkxVU0ggLT4gTE9DS0VEIGlmIG91dHB1dF9oYW5kbGVyIHdhbnRlZCB0byAnbm90aWZ5JyB1cwotCSAqIChzd2l0Y2ggcGFja2luZyBzdGF0ZSBvciBmbHVzaCBidWZmZXIgdG8gZ2V0IGFub3RoZXIgcGNpIGZsYWcgb3V0KS4KLQkgKiBJbiB0aGF0IGNhc2Ugd2Ugd2lsbCBlbnRlciB0aGlzIGxvb3AKLQkgKi8KLQl3aGlsZSAoYXRvbWljX2RlY19yZXR1cm4oJnF1ZXVlLT5zdGF0ZSkpewotCQlmbHVzaF9jb3VudCA9IDA7Ci0JCXN0YXJ0X2luZGV4ID0gcXVldWUtPm5leHRfYnVmX3RvX2ZpbGw7Ci0JCS8qIGNoZWNrIGlmIHdlIGNhbiBnbyBiYWNrIHRvIG5vbi1wYWNraW5nIHN0YXRlICovCi0JCWZsdXNoX2NvdW50ICs9IHFldGhfc3dpdGNoX3RvX25vbnBhY2tpbmdfaWZfbmVlZGVkKHF1ZXVlKTsKLQkJLyoKLQkJICogY2hlY2sgaWYgd2UgbmVlZCB0byBmbHVzaCBhIHBhY2tpbmcgYnVmZmVyIHRvIGdldCBhIHBjaQotCQkgKiBmbGFnIG91dCBvbiB0aGUgcXVldWUKLQkJICovCi0JCWlmICghZmx1c2hfY291bnQgJiYgIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpCi0JCQlmbHVzaF9jb3VudCArPSBxZXRoX2ZsdXNoX2J1ZmZlcnNfb25fbm9fcGNpKHF1ZXVlKTsKLQkJaWYgKGZsdXNoX2NvdW50KQotCQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCAwLCBzdGFydF9pbmRleCwgZmx1c2hfY291bnQpOwotCX0KLQkvKiBhdCB0aGlzIHBvaW50IHRoZSBxdWV1ZSBpcyBVTkxPQ0tFRCBhZ2FpbiAqLwotCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cyAmJiBkb19wYWNrKQotCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnRfcGFjayArPSBmbHVzaF9jb3VudDsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdm9pZCAqaGRyLAotCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBlbGVtcykKLXsKLQlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKLQotICAgICAgICBpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDApIAotICAgICAgICAgICAgICAgIGVsZW1lbnRzX25lZWRlZCA9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSk7Ci0gICAgICAgIGlmIChlbGVtZW50c19uZWVkZWQgPT0gMCkKLSAgICAgICAgICAgICAgICBlbGVtZW50c19uZWVkZWQgPSAxICsgKCgoKCh1bnNpZ25lZCBsb25nKSBoZHIpICUgUEFHRV9TSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2tiLT5sZW4pID4+IFBBR0VfU0hJRlQpOwotCWlmICgoZWxlbWVudHNfbmVlZGVkICsgZWxlbXMpID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKXsKLSAgICAgICAgICAgICAgICBQUklOVF9FUlIoIkludmFsaWQgc2l6ZSBvZiBJUCBwYWNrZXQgIgotCQkJICAiKE51bWJlcj0lZCAvIExlbmd0aD0lZCkuIERpc2NhcmRlZC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50c19uZWVkZWQrZWxlbXMpLCBza2ItPmxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnRzX25lZWRlZDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IHRsZW47Ci0KLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJdGxlbiA9IG50b2hzKGlwX2hkcihza2IpLT50b3RfbGVuKSAtIChpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwotCQlzd2l0Y2ggKGlwX2hkcihza2IpLT5wcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7Ci0JCXN3aXRjaCAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcikgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IGlwdiA9IDA7Ci0JaW50IGNhc3RfdHlwZTsKLQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZTsKLQlzdHJ1Y3QgcWV0aF9oZHIgKmhkciA9IE5VTEw7Ci0JaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7Ci0JaW50IHR4X2J5dGVzID0gc2tiLT5sZW47Ci0JdW5zaWduZWQgc2hvcnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCXVuc2lnbmVkIHNob3J0IHRzb19zaXplID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiwgKm5ld19za2IyOwotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJzZW5kcGt0Iik7Ci0KLQluZXdfc2tiID0gc2tiOwotCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikgJiYKLQkgICAgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKQotCQlyZXR1cm4gLUVQRVJNOwotCWNhc3RfdHlwZSA9IHFldGhfZ2V0X2Nhc3RfdHlwZShjYXJkLCBza2IpOwotCWlmICgoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpICYmCi0JICAgIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID09IDApKQotCQlyZXR1cm4gLUVQRVJNOwotCXF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXMKLQkJW3FldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKGNhcmQsIHNrYiwgaXB2LCBjYXN0X3R5cGUpXTsKLQlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7Ci0JCWlwdiA9IHFldGhfZ2V0X2lwX3ZlcnNpb24oc2tiKTsKLQkJaWYgKChjYXJkLT5kZXYtPmhlYWRlcl9vcHMgPT0gJnFldGhfZmFrZV9vcHMpICYmIGlwdikgewotCQkJbmV3X3NrYiA9IHFldGhfcHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIW5ld19za2IpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQlpZihjYXJkLT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDJfVFIpewotCQkJCXNrYl9wdWxsKG5ld19za2IsIFFFVEhfRkFLRV9MTF9MRU5fVFIpOwotCQkJfSBlbHNlIHsKLQkJCQlza2JfcHVsbChuZXdfc2tiLCBRRVRIX0ZBS0VfTExfTEVOX0VUSCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHNrYl9pc19nc28oc2tiKSkKLQkJbGFyZ2Vfc2VuZCA9IGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZDsKLQkvKiBjaGVjayBvbiBPU04gZGV2aWNlKi8KLQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKLQkJaGRyID0gKHN0cnVjdCBxZXRoX2hkciAqKW5ld19za2ItPmRhdGE7Ci0JLyphcmUgd2UgYWJsZSB0byBkbyBUU08gPyAqLwotCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfVFNPKSAmJgotCSAgICAoY2FzdF90eXBlID09IFJUTl9VTlNQRUMpKSB7Ci0JCXJjID0gcWV0aF90c29fcHJlcGFyZV9wYWNrZXQoY2FyZCwgbmV3X3NrYiwgaXB2LCBjYXN0X3R5cGUpOwotCQlpZiAocmMpIHsKLQkJCV9fcWV0aF9mcmVlX25ld19za2Ioc2tiLCBuZXdfc2tiKTsKLQkJCXJldHVybiByYzsKLQkJfQotCQllbGVtZW50c19uZWVkZWQrKzsKLQl9IGVsc2UgaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKLQkJbmV3X3NrYjIgPSBxZXRoX3ByZXBhcmVfc2tiKGNhcmQsIG5ld19za2IsICZoZHIsIGlwdik7Ci0JCWlmICghbmV3X3NrYjIpIHsKLQkJCV9fcWV0aF9mcmVlX25ld19za2Ioc2tiLCBuZXdfc2tiKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChuZXdfc2tiICE9IHNrYikKLQkJCV9fcWV0aF9mcmVlX25ld19za2IobmV3X3NrYjIsIG5ld19za2IpOwotCQluZXdfc2tiID0gbmV3X3NrYjI7Ci0JCXFldGhfZmlsbF9oZWFkZXIoY2FyZCwgaGRyLCBuZXdfc2tiLCBpcHYsIGNhc3RfdHlwZSk7Ci0JfQotCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9FRERQKSB7Ci0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dChjYXJkLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSAgICAgICBza2ItPnNrLT5za19wcm90b2NvbCk7Ci0JCWlmIChjdHggPT0gTlVMTCkgewotCQkJX19xZXRoX2ZyZWVfbmV3X3NrYihza2IsIG5ld19za2IpOwotCQkJUFJJTlRfV0FSTigiY291bGQgbm90IGNyZWF0ZSBlZGRwIGNvbnRleHRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgZWxlbXMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCh2b2lkKikgaGRyLCBuZXdfc2tiLAotCQkJCQkJIGVsZW1lbnRzX25lZWRlZCk7Ci0JCWlmICghZWxlbXMpIHsKLQkJCV9fcWV0aF9mcmVlX25ld19za2Ioc2tiLCBuZXdfc2tiKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWVsZW1lbnRzX25lZWRlZCArPSBlbGVtczsKLQl9Ci0KLQlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSAmJgotCSAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpCi0JCXFldGhfdHhfY3N1bShuZXdfc2tiKTsKLQotCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQotCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKLQkJCQkJIGVsZW1lbnRzX25lZWRlZCwgY3R4KTsKLQllbHNlIHsKLQkJaWYgKCghY2FyZC0+b3B0aW9ucy5sYXllcjIpICYmCi0JCSAgICAoaXB2ID09IDApKSB7Ci0JCQlfX3FldGhfZnJlZV9uZXdfc2tiKHNrYiwgbmV3X3NrYik7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9Ci0JCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSAgICAgIGVsZW1lbnRzX25lZWRlZCwgY3R4KTsKLQl9Ci0JaWYgKCFyYykgewotCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2J5dGVzOwotCQlpZiAobmV3X3NrYiAhPSBza2IpCi0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgewotCQkJaWYgKHRzb19zaXplICYmCi0JCQkgICAgIShsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykpIHsKLQkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7Ci0JCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOwotCQkJfQotCQkJaWYgKG5yX2ZyYWdzID4gMCkgewotCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19zZW50Kys7Ci0JCQkJLyogbnJfZnJhZ3MgKyBza2ItPmRhdGEgKi8KLQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3NlbnQgKz0KLQkJCQkJbnJfZnJhZ3MgKyAxOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlfX3FldGhfZnJlZV9uZXdfc2tiKHNrYiwgbmV3X3NrYik7Ci0JfQotCWlmIChjdHggIT0gTlVMTCkgewotCQkvKiBkcm9wIGNyZWF0b3IncyByZWZlcmVuY2UgKi8KLQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0JCS8qIGZyZWUgc2tiOyBpdCdzIG5vdCByZWZlcmVuY2VkIGJ5IGEgYnVmZmVyICovCi0JCWlmICghcmMpCi0JCSAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBkZXYtPnByaXY7Ci0JaW50IHJjID0gMDsKLQotCXN3aXRjaChyZWdudW0pewotCWNhc2UgTUlJX0JNQ1I6IC8qIEJhc2ljIG1vZGUgY29udHJvbCByZWdpc3RlciAqLwotCQlyYyA9IEJNQ1JfRlVMTERQTFg7Ci0JCWlmICgoY2FyZC0+aW5mby5saW5rX3R5cGUgIT0gUUVUSF9MSU5LX1RZUEVfR0JJVF9FVEgpJiYKLQkJICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSAhPSBRRVRIX0xJTktfVFlQRV9PU04pICYmCi0JCSAgICAoY2FyZC0+aW5mby5saW5rX3R5cGUgIT0gUUVUSF9MSU5LX1RZUEVfMTBHQklUX0VUSCkpCi0JCQlyYyB8PSBCTUNSX1NQRUVEMTAwOwotCQlicmVhazsKLQljYXNlIE1JSV9CTVNSOiAvKiBCYXNpYyBtb2RlIHN0YXR1cyByZWdpc3RlciAqLwotCQlyYyA9IEJNU1JfRVJDQVAgfCBCTVNSX0FORUdDT01QTEVURSB8IEJNU1JfTFNUQVRVUyB8Ci0JCSAgICAgQk1TUl8xMEhBTEYgfCBCTVNSXzEwRlVMTCB8IEJNU1JfMTAwSEFMRiB8IEJNU1JfMTAwRlVMTCB8Ci0JCSAgICAgQk1TUl8xMDBCQVNFNDsKLQkJYnJlYWs7Ci0JY2FzZSBNSUlfUEhZU0lEMTogLyogUEhZUyBJRCAxICovCi0JCXJjID0gKGRldi0+ZGV2X2FkZHJbMF0gPDwgMTYpIHwgKGRldi0+ZGV2X2FkZHJbMV0gPDwgOCkgfAotCQkgICAgIGRldi0+ZGV2X2FkZHJbMl07Ci0JCXJjID0gKHJjID4+IDUpICYgMHhGRkZGOwotCQlicmVhazsKLQljYXNlIE1JSV9QSFlTSUQyOiAvKiBQSFlTIElEIDIgKi8KLQkJcmMgPSAoZGV2LT5kZXZfYWRkclsyXSA8PCAxMCkgJiAweEZGRkY7Ci0JCWJyZWFrOwotCWNhc2UgTUlJX0FEVkVSVElTRTogLyogQWR2ZXJ0aXNlbWVudCBjb250cm9sIHJlZyAqLwotCQlyYyA9IEFEVkVSVElTRV9BTEw7Ci0JCWJyZWFrOwotCWNhc2UgTUlJX0xQQTogLyogTGluayBwYXJ0bmVyIGFiaWxpdHkgcmVnICovCi0JCXJjID0gTFBBXzEwSEFMRiB8IExQQV8xMEZVTEwgfCBMUEFfMTAwSEFMRiB8IExQQV8xMDBGVUxMIHwKLQkJICAgICBMUEFfMTAwQkFTRTQgfCBMUEFfTFBBQ0s7Ci0JCWJyZWFrOwotCWNhc2UgTUlJX0VYUEFOU0lPTjogLyogRXhwYW5zaW9uIHJlZ2lzdGVyICovCi0JCWJyZWFrOwotCWNhc2UgTUlJX0RDT1VOVEVSOiAvKiBkaXNjb25uZWN0IGNvdW50ZXIgKi8KLQkJYnJlYWs7Ci0JY2FzZSBNSUlfRkNTQ09VTlRFUjogLyogZmFsc2UgY2FycmllciBjb3VudGVyICovCi0JCWJyZWFrOwotCWNhc2UgTUlJX05XQVlURVNUOiAvKiBOLXdheSBhdXRvLW5lZyB0ZXN0IHJlZ2lzdGVyICovCi0JCWJyZWFrOwotCWNhc2UgTUlJX1JFUlJDT1VOVEVSOiAvKiByeCBlcnJvciBjb3VudGVyICovCi0JCXJjID0gY2FyZC0+c3RhdHMucnhfZXJyb3JzOwotCQlicmVhazsKLQljYXNlIE1JSV9TUkVWSVNJT046IC8qIHNpbGljb24gcmV2aXNpb24gKi8KLQkJYnJlYWs7Ci0JY2FzZSBNSUlfUkVTVjE6IC8qIHJlc2VydmVkIDEgKi8KLQkJYnJlYWs7Ci0JY2FzZSBNSUlfTEJSRVJST1I6IC8qIGxvb3BiYWNrLCByeCwgYnlwYXNzIGVycm9yICovCi0JCWJyZWFrOwotCWNhc2UgTUlJX1BIWUFERFI6IC8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSBNSUlfUkVTVjI6IC8qIHJlc2VydmVkIDIgKi8KLQkJYnJlYWs7Ci0JY2FzZSBNSUlfVFBJU1RBVFVTOiAvKiBUUEkgc3RhdHVzIGZvciAxMG1icHMgKi8KLQkJYnJlYWs7Ci0JY2FzZSBNSUlfTkNPTkZJRzogLyogbmV0d29yayBpbnRlcmZhY2UgY29uZmlnICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotcWV0aF9hcnBfZ2V0X2Vycm9yX2NhdXNlKGludCAqcmMpCi17Ci0Jc3dpdGNoICgqcmMpIHsKLQljYXNlIFFFVEhfSVBBX0FSUF9SQ19GQUlMRUQ6Ci0JCSpyYyA9IC1FSU87Ci0JCXJldHVybiAib3BlcmF0aW9uIGZhaWxlZCI7Ci0JY2FzZSBRRVRIX0lQQV9BUlBfUkNfTk9UU1VQUDoKLQkJKnJjID0gLUVPUE5PVFNVUFA7Ci0JCXJldHVybiAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOwotCWNhc2UgUUVUSF9JUEFfQVJQX1JDX09VVF9PRl9SQU5HRToKLQkJKnJjID0gLUVJTlZBTDsKLQkJcmV0dXJuICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiOwotCWNhc2UgUUVUSF9JUEFfQVJQX1JDX1FfTk9UU1VQUDoKLQkJKnJjID0gLUVPUE5PVFNVUFA7Ci0JCXJldHVybiAicXVlcnkgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOwotCWNhc2UgUUVUSF9JUEFfQVJQX1JDX1FfTk9fREFUQToKLQkJKnJjID0gLUVOT0VOVDsKLQkJcmV0dXJuICJubyBxdWVyeSBkYXRhIGF2YWlsYWJsZSI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJ1bmtub3duIGVycm9yIjsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfaXBhX2Z1bmNzLAotCQkJICAgICBfX3UxNiwgbG9uZyk7Ci0KLXN0YXRpYyBpbnQKLXFldGhfYXJwX3NldF9ub19lbnRyaWVzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBub19lbnRyaWVzKQotewotCWludCB0bXA7Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJhcnBzdG5vZSIpOwotCi0JLyoKLQkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gb25seSBzdXBwb3J0cyB0aGUgQVJQIGFzc2lzdCBmdW5jdGlvbgotCSAqIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLCBidXQgbm90IElQQV9DTURfQVNTX0FSUF9TRVRfTk9fRU5UUklFUzsKLQkgKiB0aHVzIHdlIHNheSBFT1BOT1RTVVBQIGZvciB0aGlzIEFSUCBmdW5jdGlvbgotCSAqLwotCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLElQQV9BUlBfUFJPQ0VTU0lORykpIHsKLQkJUFJJTlRfV0FSTigiQVJQIHByb2Nlc3Npbmcgbm90IHN1cHBvcnRlZCAiCi0JCQkgICAib24gJXMhXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyYyA9IHFldGhfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX0FSUF9QUk9DRVNTSU5HLAotCQkJCQkgIElQQV9DTURfQVNTX0FSUF9TRVRfTk9fRU5UUklFUywKLQkJCQkJICBub19lbnRyaWVzKTsKLQlpZiAocmMpIHsKLQkJdG1wID0gcmM7Ci0JCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBzZXQgbnVtYmVyIG9mIEFSUCBlbnRyaWVzIG9uICVzOiAiCi0JCQkgICAiJXMgKDB4JXgvJWQpXG4iLAotCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcWV0aF9hcnBfZ2V0X2Vycm9yX2NhdXNlKCZyYyksCi0JCQkgICB0bXAsIHRtcCk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfY29weV9hcnBfZW50cmllc19zdHJpcHBlZChzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfaW5mbyAqcWluZm8sCi0JCSAgICAgICAgICAgICAgIHN0cnVjdCBxZXRoX2FycF9xdWVyeV9kYXRhICpxZGF0YSwKLQkJCSAgICAgICBpbnQgZW50cnlfc2l6ZSwgaW50IHVlbnRyeV9zaXplKQotewotCWNoYXIgKmVudHJ5X3B0cjsKLQljaGFyICp1ZW50cnlfcHRyOwotCWludCBpOwotCi0JZW50cnlfcHRyID0gKGNoYXIgKikmcWRhdGEtPmRhdGE7Ci0JdWVudHJ5X3B0ciA9IChjaGFyICopKHFpbmZvLT51ZGF0YSArIHFpbmZvLT51ZGF0YV9vZmZzZXQpOwotCWZvciAoaSA9IDA7IGkgPCBxZGF0YS0+bm9fZW50cmllczsgKytpKXsKLQkJLyogc3RyaXAgb2ZmIDMyIGJ5dGVzICJtZWRpYSBzcGVjaWZpYyBpbmZvcm1hdGlvbiIgKi8KLQkJbWVtY3B5KHVlbnRyeV9wdHIsIChlbnRyeV9wdHIgKyAzMiksIGVudHJ5X3NpemUgLSAzMik7Ci0JCWVudHJ5X3B0ciArPSBlbnRyeV9zaXplOwotCQl1ZW50cnlfcHRyICs9IHVlbnRyeV9zaXplOwotCX0KLX0KLQotc3RhdGljIGludAotcWV0aF9hcnBfcXVlcnlfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkgIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0Jc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2RhdGEgKnFkYXRhOwotCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvICpxaW5mbzsKLQlpbnQgZW50cnlfc2l6ZTsKLQlpbnQgdWVudHJ5X3NpemU7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImFycHF1ZWNiIik7Ci0KLQlxaW5mbyA9IChzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfaW5mbyAqKSByZXBseS0+cGFyYW07Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsNCwicWFlcjElaSIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlKSB7Ci0JCWNtZC0+aGRyLnJldHVybl9jb2RlID0gY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5yZXR1cm5fY29kZTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsNCwicWFlcjIlaSIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXFkYXRhID0gJmNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLnF1ZXJ5X2FycDsKLQlzd2l0Y2gocWRhdGEtPnJlcGx5X2JpdHMpewotCWNhc2UgNToKLQkJdWVudHJ5X3NpemUgPSBlbnRyeV9zaXplID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTUpOwotCQlpZiAocWluZm8tPm1hc2tfYml0cyAmIFFFVEhfUUFSUF9TVFJJUF9FTlRSSUVTKQotCQkJdWVudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5NV9zaG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJLyogZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgKi8KLQlkZWZhdWx0OgotCQkvKiB0ciBpcyB0aGUgc2FtZSBhcyBldGggLT4gZW50cnk3ICovCi0JCXVlbnRyeV9zaXplID0gZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk3KTsKLQkJaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykKLQkJCXVlbnRyeV9zaXplID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTdfc2hvcnQpOwotCQlicmVhazsKLQl9Ci0JLyogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gdXNlcnNwYWNlICovCi0JaWYgKChxaW5mby0+dWRhdGFfbGVuIC0gcWluZm8tPnVkYXRhX29mZnNldCkgPAotCQkJcWRhdGEtPm5vX2VudHJpZXMgKiB1ZW50cnlfc2l6ZSl7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAicWFlcjMlaSIsIC1FTk9NRU0pOwotCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IC1FTk9NRU07Ci0JCVBSSU5UX1dBUk4oInF1ZXJ5IEFSUCB1c2VyIHNwYWNlIGJ1ZmZlciBpcyB0b28gc21hbGwgZm9yICIKLQkJCSAgICJ0aGUgcmV0dXJuZWQgbnVtYmVyIG9mIEFSUCBlbnRyaWVzLiAiCi0JCQkgICAiQWJvcnRpbmcgcXVlcnkhXG4iKTsKLQkJZ290byBvdXRfZXJyb3I7Ci0JfQotCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAiYW5vcmUlaSIsCi0JCSAgICAgICBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLm51bWJlcl9vZl9yZXBsaWVzKTsKLQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgNCwgImFzZXFuJWkiLCBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnNlcV9ubyk7Ci0JUUVUSF9EQkZfVEVYVF8odHJhY2UsIDQsICJhbm9lbiVpIiwgcWRhdGEtPm5vX2VudHJpZXMpOwotCi0JaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykgewotCQkvKiBzdHJpcCBvZmYgIm1lZGlhIHNwZWNpZmljIGluZm9ybWF0aW9uIiAqLwotCQlxZXRoX2NvcHlfYXJwX2VudHJpZXNfc3RyaXBwZWQocWluZm8sIHFkYXRhLCBlbnRyeV9zaXplLAotCQkJCQkgICAgICAgdWVudHJ5X3NpemUpOwotCX0gZWxzZQotCQkvKmNvcHkgZW50cmllcyB0byB1c2VyIGJ1ZmZlciovCi0JCW1lbWNweShxaW5mby0+dWRhdGEgKyBxaW5mby0+dWRhdGFfb2Zmc2V0LAotCQkgICAgICAgKGNoYXIgKikmcWRhdGEtPmRhdGEsIHFkYXRhLT5ub19lbnRyaWVzKnVlbnRyeV9zaXplKTsKLQotCXFpbmZvLT5ub19lbnRyaWVzICs9IHFkYXRhLT5ub19lbnRyaWVzOwotCXFpbmZvLT51ZGF0YV9vZmZzZXQgKz0gKHFkYXRhLT5ub19lbnRyaWVzKnVlbnRyeV9zaXplKTsKLQkvKiBjaGVjayBpZiBhbGwgcmVwbGllcyByZWNlaXZlZCAuLi4gKi8KLQlpZiAoY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5zZXFfbm8gPAotCSAgICBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLm51bWJlcl9vZl9yZXBsaWVzKQotCQlyZXR1cm4gMTsKLQltZW1jcHkocWluZm8tPnVkYXRhLCAmcWluZm8tPm5vX2VudHJpZXMsIDQpOwotCS8qIGtlZXAgU1RSSVBfRU5UUklFUyBmbGFnIHNvIHRoZSB1c2VyIHByb2dyYW0gY2FuIGRpc3Rpbmd1aXNoCi0JICogc3RyaXBwZWQgZW50cmllcyBmcm9tIG5vcm1hbCBvbmVzICovCi0JaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykKLQkJcWRhdGEtPnJlcGx5X2JpdHMgfD0gUUVUSF9RQVJQX1NUUklQX0VOVFJJRVM7Ci0JbWVtY3B5KHFpbmZvLT51ZGF0YSArIFFFVEhfUUFSUF9NQVNLX09GRlNFVCwmcWRhdGEtPnJlcGx5X2JpdHMsMik7Ci0JcmV0dXJuIDA7Ci1vdXRfZXJyb3I6Ci0JaSA9IDA7Ci0JbWVtY3B5KHFpbmZvLT51ZGF0YSwgJmksIDQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3NlbmRfaXBhX2FycF9jbWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iLAotCQkgICAgICBpbnQgbGVuLCBpbnQgKCpyZXBseV9jYikoc3RydWN0IHFldGhfY2FyZCAqLAotCQkJCQkgICAgICAgc3RydWN0IHFldGhfcmVwbHkgKiwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkgICAgICB2b2lkICpyZXBseV9wYXJhbSkKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNlbmRhcnAiKTsKLQotCW1lbWNweShpb2ItPmRhdGEsIElQQV9QRFVfSEVBREVSLCBJUEFfUERVX0hFQURFUl9TSVpFKTsKLQltZW1jcHkoUUVUSF9JUEFfQ01EX0RFU1RfQUREUihpb2ItPmRhdGEpLAotCSAgICAgICAmY2FyZC0+dG9rZW4udWxwX2Nvbm5lY3Rpb25fciwgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLQlyZXR1cm4gcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShjYXJkLCBJUEFfUERVX0hFQURFUl9TSVpFICsgbGVuLCBpb2IsCi0JCQkJICAgICAgcmVwbHlfY2IsIHJlcGx5X3BhcmFtKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9zZW5kX2lwYV9zbm1wX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCi0JCSAgICAgIGludCBsZW4sIGludCAoKnJlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jYXJkICosCi0JCQkJCSAgICAgICBzdHJ1Y3QgcWV0aF9yZXBseSAqLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCi0JCSAgICAgIHZvaWQgKnJlcGx5X3BhcmFtKQotewotCXUxNiBzMSwgczI7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNlbmRzbm1wIik7Ci0KLQltZW1jcHkoaW9iLT5kYXRhLCBJUEFfUERVX0hFQURFUiwgSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JbWVtY3B5KFFFVEhfSVBBX0NNRF9ERVNUX0FERFIoaW9iLT5kYXRhKSwKLQkgICAgICAgJmNhcmQtPnRva2VuLnVscF9jb25uZWN0aW9uX3IsIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JLyogYWRqdXN0IFBEVSBsZW5ndGggZmllbGRzIGluIElQQV9QRFVfSEVBREVSICovCi0JczEgPSAodTMyKSBJUEFfUERVX0hFQURFUl9TSVpFICsgbGVuOwotCXMyID0gKHUzMikgbGVuOwotCW1lbWNweShRRVRIX0lQQV9QRFVfTEVOX1RPVEFMKGlvYi0+ZGF0YSksICZzMSwgMik7Ci0JbWVtY3B5KFFFVEhfSVBBX1BEVV9MRU5fUERVMShpb2ItPmRhdGEpLCAmczIsIDIpOwotCW1lbWNweShRRVRIX0lQQV9QRFVfTEVOX1BEVTIoaW9iLT5kYXRhKSwgJnMyLCAyKTsKLQltZW1jcHkoUUVUSF9JUEFfUERVX0xFTl9QRFUzKGlvYi0+ZGF0YSksICZzMiwgMik7Ci0JcmV0dXJuIHFldGhfc2VuZF9jb250cm9sX2RhdGEoY2FyZCwgSVBBX1BEVV9IRUFERVJfU0laRSArIGxlbiwgaW9iLAotCQkJCSAgICAgIHJlcGx5X2NiLCByZXBseV9wYXJhbSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICoKLXFldGhfZ2V0X3NldGFzc3Bhcm1zX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICosIGVudW0gcWV0aF9pcGFfZnVuY3MsCi0JCQkgX191MTYsIF9fdTE2LCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyk7Ci1zdGF0aWMgaW50Ci1xZXRoX2FycF9xdWVyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBjaGFyIF9fdXNlciAqdWRhdGEpCi17Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvIHFpbmZvID0gezAsIH07Ci0JaW50IHRtcDsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImFycHF1ZXJ5Iik7Ci0KLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsLypJUEFfUVVFUllfQVJQX0FERFJfSU5GTyovCi0JCQkgICAgICAgSVBBX0FSUF9QUk9DRVNTSU5HKSkgewotCQlQUklOVF9XQVJOKCJBUlAgcHJvY2Vzc2luZyBub3Qgc3VwcG9ydGVkICIKLQkJCSAgICJvbiAlcyFcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCS8qIGdldCBzaXplIG9mIHVzZXJzcGFjZSBidWZmZXIgYW5kIG1hc2tfYml0cyAtPiA2IGJ5dGVzICovCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZxaW5mbywgdWRhdGEsIDYpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIShxaW5mby51ZGF0YSA9IGt6YWxsb2MocWluZm8udWRhdGFfbGVuLCBHRlBfS0VSTkVMKSkpCi0JCXJldHVybiAtRU5PTUVNOwotCXFpbmZvLnVkYXRhX29mZnNldCA9IFFFVEhfUUFSUF9FTlRSSUVTX09GRlNFVDsKLQlpb2IgPSBxZXRoX2dldF9zZXRhc3NwYXJtc19jbWQoY2FyZCwgSVBBX0FSUF9QUk9DRVNTSU5HLAotCQkJCSAgICAgICBJUEFfQ01EX0FTU19BUlBfUVVFUllfSU5GTywKLQkJCQkgICAgICAgc2l6ZW9mKGludCksUUVUSF9QUk9UX0lQVjQpOwotCi0JcmMgPSBxZXRoX3NlbmRfaXBhX2FycF9jbWQoY2FyZCwgaW9iLAotCQkJCSAgIFFFVEhfU0VUQVNTX0JBU0VfTEVOK1FFVEhfQVJQX0NNRF9MRU4sCi0JCQkJICAgcWV0aF9hcnBfcXVlcnlfY2IsICh2b2lkICopJnFpbmZvKTsKLQlpZiAocmMpIHsKLQkJdG1wID0gcmM7Ci0JCVBSSU5UX1dBUk4oIkVycm9yIHdoaWxlIHF1ZXJ5aW5nIEFSUCBjYWNoZSBvbiAlczogJXMgIgotCQkJICAgIigweCV4LyVkKVxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHFldGhfYXJwX2dldF9lcnJvcl9jYXVzZSgmcmMpLAotCQkJICAgdG1wLCB0bXApOwotCQlpZiAoY29weV90b191c2VyKHVkYXRhLCBxaW5mby51ZGF0YSwgNCkpCi0JCQlyYyA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih1ZGF0YSwgcWluZm8udWRhdGEsIHFpbmZvLnVkYXRhX2xlbikpCi0JCQlyYyA9IC1FRkFVTFQ7Ci0JfQotCWtmcmVlKHFpbmZvLnVkYXRhKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogU05NUCBjb21tYW5kIGNhbGxiYWNrCi0gKi8KLXN0YXRpYyBpbnQKLXFldGhfc25tcF9jb21tYW5kX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJICAgICB1bnNpZ25lZCBsb25nIHNkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQlzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfaW5mbyAqcWluZm87Ci0Jc3RydWN0IHFldGhfc25tcF9jbWQgKnNubXA7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQlfX3UxNiBkYXRhX2xlbjsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywic25wY21kY2IiKTsKLQotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIHNkYXRhOwotCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKSgoY2hhciAqKWNtZCAtIHJlcGx5LT5vZmZzZXQpOwotCXFpbmZvID0gKHN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvICopIHJlcGx5LT5wYXJhbTsKLQlzbm1wID0gJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5zbm1wOwotCi0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLDQsInNjZXIxJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIucmV0dXJuX2NvZGUpIHsKLQkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSBjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5yZXR1cm5fY29kZTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsNCwic2NlcjIlaSIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWRhdGFfbGVuID0gKigoX191MTYqKVFFVEhfSVBBX1BEVV9MRU5fUERVMShkYXRhKSk7Ci0JaWYgKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnNlcV9ubyA9PSAxKQotCQlkYXRhX2xlbiAtPSAoX191MTYpKChjaGFyICopJnNubXAtPmRhdGEgLSAoY2hhciAqKWNtZCk7Ci0JZWxzZQotCQlkYXRhX2xlbiAtPSAoX191MTYpKChjaGFyKikmc25tcC0+cmVxdWVzdCAtIChjaGFyICopY21kKTsKLQotCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb29tIGluIHVzZXJzcGFjZSAqLwotCWlmICgocWluZm8tPnVkYXRhX2xlbiAtIHFpbmZvLT51ZGF0YV9vZmZzZXQpIDwgZGF0YV9sZW4pIHsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDQsICJzY2VyMyVpIiwgLUVOT01FTSk7Ci0JCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVOT01FTTsKLQkJcmV0dXJuIDA7Ci0JfQotCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAic25vcmUlaSIsCi0JCSAgICAgICBjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci51c2VkX3RvdGFsKTsKLQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgNCwgInNzZXFuJWkiLCBjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5zZXFfbm8pOwotCS8qY29weSBlbnRyaWVzIHRvIHVzZXIgYnVmZmVyKi8KLQlpZiAoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vID09IDEpIHsKLQkJbWVtY3B5KHFpbmZvLT51ZGF0YSArIHFpbmZvLT51ZGF0YV9vZmZzZXQsCi0JCSAgICAgICAoY2hhciAqKXNubXAsCi0JCSAgICAgICBkYXRhX2xlbiArIG9mZnNldG9mKHN0cnVjdCBxZXRoX3NubXBfY21kLGRhdGEpKTsKLQkJcWluZm8tPnVkYXRhX29mZnNldCArPSBvZmZzZXRvZihzdHJ1Y3QgcWV0aF9zbm1wX2NtZCwgZGF0YSk7Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KHFpbmZvLT51ZGF0YSArIHFpbmZvLT51ZGF0YV9vZmZzZXQsCi0JCSAgICAgICAoY2hhciAqKSZzbm1wLT5yZXF1ZXN0LCBkYXRhX2xlbik7Ci0JfQotCXFpbmZvLT51ZGF0YV9vZmZzZXQgKz0gZGF0YV9sZW47Ci0JLyogY2hlY2sgaWYgYWxsIHJlcGxpZXMgcmVjZWl2ZWQgLi4uICovCi0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAic3J0b3QlaSIsCi0JCQkgICAgICAgY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIudXNlZF90b3RhbCk7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAic3JzZXElaSIsCi0JCQkgICAgICAgY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vKTsKLQlpZiAoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vIDwKLQkgICAgY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIudXNlZF90b3RhbCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICoKLXFldGhfZ2V0X2lwYWNtZF9idWZmZXIoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfaXBhX2NtZHMsCi0JCSAgICAgICBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyApOwotCi1zdGF0aWMgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqCi1xZXRoX2dldF9hZGFwdGVyX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3UzMiBjb21tYW5kLCBfX3UzMiBjbWRsZW4pCi17Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCxJUEFfQ01EX1NFVEFEQVBURVJQQVJNUywKLQkJCQkgICAgIFFFVEhfUFJPVF9JUFY0KTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuY21kbGVuZ3RoID0gY21kbGVuOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNvbW1hbmQ7Ci0JY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIudXNlZF90b3RhbCA9IDE7Ci0JY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuc2VxX25vID0gMTsKLQotCXJldHVybiBpb2I7Ci19Ci0KLS8qKgotICogZnVuY3Rpb24gdG8gc2VuZCBTTk1QIGNvbW1hbmRzIHRvIE9TQS1FIGNhcmQKLSAqLwotc3RhdGljIGludAotcWV0aF9zbm1wX2NvbW1hbmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgY2hhciBfX3VzZXIgKnVkYXRhKQotewotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0Jc3RydWN0IHFldGhfc25tcF91cmVxICp1cmVxOwotCWludCByZXFfbGVuOwotCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvIHFpbmZvID0gezAsIH07Ci0JaW50IHJjID0gMDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywic25tcGNtZCIpOwotCi0JaWYgKGNhcmQtPmluZm8uZ3Vlc3RsYW4pCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmICgoIXFldGhfYWRwX3N1cHBvcnRlZChjYXJkLElQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTCkpICYmCi0JICAgICghY2FyZC0+b3B0aW9ucy5sYXllcjIpICkgewotCQlQUklOVF9XQVJOKCJTTk1QIFF1ZXJ5IE1JQlMgbm90IHN1cHBvcnRlZCAiCi0JCQkgICAib24gJXMhXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQkvKiBza2lwIDQgYnl0ZXMgKGRhdGFfbGVuIHN0cnVjdCBtZW1iZXIpIHRvIGdldCByZXFfbGVuICovCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZyZXFfbGVuLCB1ZGF0YSArIHNpemVvZihpbnQpLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXVyZXEgPSBrbWFsbG9jKHJlcV9sZW4rc2l6ZW9mKHN0cnVjdCBxZXRoX3NubXBfdXJlcV9oZHIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVyZXEpIHsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgInNubXBub21lIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlpZiAoY29weV9mcm9tX3VzZXIodXJlcSwgdWRhdGEsCi0JCQlyZXFfbGVuK3NpemVvZihzdHJ1Y3QgcWV0aF9zbm1wX3VyZXFfaGRyKSkpewotCQlrZnJlZSh1cmVxKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXFpbmZvLnVkYXRhX2xlbiA9IHVyZXEtPmhkci5kYXRhX2xlbjsKLQlpZiAoIShxaW5mby51ZGF0YSA9IGt6YWxsb2MocWluZm8udWRhdGFfbGVuLCBHRlBfS0VSTkVMKSkpewotCQlrZnJlZSh1cmVxKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXFpbmZvLnVkYXRhX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9zbm1wX3VyZXFfaGRyKTsKLQotCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTCwKLQkJCQkgICBRRVRIX1NOTVBfU0VUQURQX0NNRExFTkdUSCArIHJlcV9sZW4pOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLQltZW1jcHkoJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5zbm1wLCAmdXJlcS0+Y21kLCByZXFfbGVuKTsKLQlyYyA9IHFldGhfc2VuZF9pcGFfc25tcF9jbWQoY2FyZCwgaW9iLCBRRVRIX1NFVEFEUF9CQVNFX0xFTiArIHJlcV9sZW4sCi0JCQkJICAgIHFldGhfc25tcF9jb21tYW5kX2NiLCAodm9pZCAqKSZxaW5mbyk7Ci0JaWYgKHJjKQotCQlQUklOVF9XQVJOKCJTTk1QIGNvbW1hbmQgZmFpbGVkIG9uICVzOiAoMHgleClcbiIsCi0JCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7Ci0JZWxzZSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodWRhdGEsIHFpbmZvLnVkYXRhLCBxaW5mby51ZGF0YV9sZW4pKQotCQkJcmMgPSAtRUZBVUxUOwotCX0KLQotCWtmcmVlKHVyZXEpOwotCWtmcmVlKHFpbmZvLnVkYXRhKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZGVmYXVsdF9zZXRhc3NwYXJtc19jYihzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3JlcGx5ICosCi0JCQkgICAgdW5zaWduZWQgbG9uZyk7Ci0KLXN0YXRpYyBpbnQKLXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpOwotc3RhdGljIGludAotcWV0aF9zZW5kX3NldGFzc3Bhcm1zKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqLAotCQkgICAgICBfX3UxNiwgbG9uZywKLQkJICAgICAgaW50ICgqcmVwbHlfY2IpCi0JCSAgICAgIChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3JlcGx5ICosIHVuc2lnbmVkIGxvbmcpLAotCQkgICAgICB2b2lkICpyZXBseV9wYXJhbSk7Ci0KLXN0YXRpYyBpbnQKLXFldGhfYXJwX2FkZF9lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkgKmVudHJ5KQotewotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQljaGFyIGJ1ZlsxNl07Ci0JaW50IHRtcDsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImFycGFkZW50Iik7Ci0KLQkvKgotCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCi0JICogSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sIGJ1dCBub3QgSVBBX0NNRF9BU1NfQVJQX0FERF9FTlRSWTsKLQkgKiB0aHVzIHdlIHNheSBFT1BOT1RTVVBQIGZvciB0aGlzIEFSUCBmdW5jdGlvbgotCSAqLwotCWlmIChjYXJkLT5pbmZvLmd1ZXN0bGFuKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLElQQV9BUlBfUFJPQ0VTU0lORykpIHsKLQkJUFJJTlRfV0FSTigiQVJQIHByb2Nlc3Npbmcgbm90IHN1cHBvcnRlZCAiCi0JCQkgICAib24gJXMhXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCWlvYiA9IHFldGhfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcsCi0JCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9BRERfRU5UUlksCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpLAotCQkJCSAgICAgICBRRVRIX1BST1RfSVBWNCk7Ci0JcmMgPSBxZXRoX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKSBlbnRyeSwKLQkJCQkgICBxZXRoX2RlZmF1bHRfc2V0YXNzcGFybXNfY2IsIE5VTEwpOwotCWlmIChyYykgewotCQl0bXAgPSByYzsKLQkJcWV0aF9pcGFkZHI0X3RvX3N0cmluZygodTggKillbnRyeS0+aXBhZGRyLCBidWYpOwotCQlQUklOVF9XQVJOKCJDb3VsZCBub3QgYWRkIEFSUCBlbnRyeSBmb3IgYWRkcmVzcyAlcyBvbiAlczogIgotCQkJICAgIiVzICgweCV4LyVkKVxuIiwKLQkJCSAgIGJ1ZiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwKLQkJCSAgIHFldGhfYXJwX2dldF9lcnJvcl9jYXVzZSgmcmMpLCB0bXAsIHRtcCk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9hcnBfcmVtb3ZlX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2FycF9jYWNoZV9lbnRyeSAqZW50cnkpCi17Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCWNoYXIgYnVmWzE2XSA9IHswLCB9OwotCWludCB0bXA7Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJhcnBybWVudCIpOwotCi0JLyoKLQkgKiBjdXJyZW50bHkgR3Vlc3RMQU4gb25seSBzdXBwb3J0cyB0aGUgQVJQIGFzc2lzdCBmdW5jdGlvbgotCSAqIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLCBidXQgbm90IElQQV9DTURfQVNTX0FSUF9SRU1PVkVfRU5UUlk7Ci0JICogdGh1cyB3ZSBzYXkgRU9QTk9UU1VQUCBmb3IgdGhpcyBBUlAgZnVuY3Rpb24KLQkgKi8KLQlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCxJUEFfQVJQX1BST0NFU1NJTkcpKSB7Ci0JCVBSSU5UX1dBUk4oIkFSUCBwcm9jZXNzaW5nIG5vdCBzdXBwb3J0ZWQgIgotCQkJICAgIm9uICVzIVxuIiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0JbWVtY3B5KGJ1ZiwgZW50cnksIDEyKTsKLQlpb2IgPSBxZXRoX2dldF9zZXRhc3NwYXJtc19jbWQoY2FyZCwgSVBBX0FSUF9QUk9DRVNTSU5HLAotCQkJCSAgICAgICBJUEFfQ01EX0FTU19BUlBfUkVNT1ZFX0VOVFJZLAotCQkJCSAgICAgICAxMiwKLQkJCQkgICAgICAgUUVUSF9QUk9UX0lQVjQpOwotCXJjID0gcWV0aF9zZW5kX3NldGFzc3Bhcm1zKGNhcmQsIGlvYiwKLQkJCQkgICAxMiwgKHVuc2lnbmVkIGxvbmcpYnVmLAotCQkJCSAgIHFldGhfZGVmYXVsdF9zZXRhc3NwYXJtc19jYiwgTlVMTCk7Ci0JaWYgKHJjKSB7Ci0JCXRtcCA9IHJjOwotCQltZW1zZXQoYnVmLCAwLCAxNik7Ci0JCXFldGhfaXBhZGRyNF90b19zdHJpbmcoKHU4ICopZW50cnktPmlwYWRkciwgYnVmKTsKLQkJUFJJTlRfV0FSTigiQ291bGQgbm90IGRlbGV0ZSBBUlAgZW50cnkgZm9yIGFkZHJlc3MgJXMgb24gJXM6ICIKLQkJCSAgICIlcyAoMHgleC8lZClcbiIsCi0JCQkgICBidWYsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCi0JCQkgICBxZXRoX2FycF9nZXRfZXJyb3JfY2F1c2UoJnJjKSwgdG1wLCB0bXApOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfYXJwX2ZsdXNoX2NhY2hlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCWludCB0bXA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsImFycGZsdXNoIik7Ci0KLQkvKgotCSAqIGN1cnJlbnRseSBHdWVzdExBTiBvbmx5IHN1cHBvcnRzIHRoZSBBUlAgYXNzaXN0IGZ1bmN0aW9uCi0JICogSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sIGJ1dCBub3QgSVBBX0NNRF9BU1NfQVJQX0ZMVVNIX0NBQ0hFOwotCSAqIHRodXMgd2Ugc2F5IEVPUE5PVFNVUFAgZm9yIHRoaXMgQVJQIGZ1bmN0aW9uCi0JKi8KLQlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbiB8fCAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsSVBBX0FSUF9QUk9DRVNTSU5HKSkgewotCQlQUklOVF9XQVJOKCJBUlAgcHJvY2Vzc2luZyBub3Qgc3VwcG9ydGVkICIKLQkJCSAgICJvbiAlcyFcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcsCi0JCQkJCSAgSVBBX0NNRF9BU1NfQVJQX0ZMVVNIX0NBQ0hFLCAwKTsKLQlpZiAocmMpewotCQl0bXAgPSByYzsKLQkJUFJJTlRfV0FSTigiQ291bGQgbm90IGZsdXNoIEFSUCBjYWNoZSBvbiAlczogJXMgKDB4JXgvJWQpXG4iLAotCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcWV0aF9hcnBfZ2V0X2Vycm9yX2NhdXNlKCZyYyksCi0JCQkgICB0bXAsIHRtcCk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKWRldi0+cHJpdjsKLQlzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkgYXJwX2VudHJ5OwotCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpX2RhdGE7Ci0JaW50IHJjID0gMDsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApICYmCi0gICAgICAgICAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQotCQlyZXR1cm4gLUVQRVJNOwotCi0Jc3dpdGNoIChjbWQpewotCWNhc2UgU0lPQ19RRVRIX0FSUF9TRVRfTk9fRU5UUklFUzoKLQkJaWYgKCAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSB8fAotCQkgICAgIChjYXJkLT5vcHRpb25zLmxheWVyMikgKSB7Ci0JCQlyYyA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJjID0gcWV0aF9hcnBfc2V0X25vX2VudHJpZXMoY2FyZCwgcnEtPmlmcl9pZnJ1LmlmcnVfaXZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBTSU9DX1FFVEhfQVJQX1FVRVJZX0lORk86Ci0JCWlmICggIWNhcGFibGUoQ0FQX05FVF9BRE1JTikgfHwKLQkJICAgICAoY2FyZC0+b3B0aW9ucy5sYXllcjIpICkgewotCQkJcmMgPSAtRVBFUk07Ci0JCQlicmVhazsKLQkJfQotCQlyYyA9IHFldGhfYXJwX3F1ZXJ5KGNhcmQsIHJxLT5pZnJfaWZydS5pZnJ1X2RhdGEpOwotCQlicmVhazsKLQljYXNlIFNJT0NfUUVUSF9BUlBfQUREX0VOVFJZOgotCQlpZiAoICFjYXBhYmxlKENBUF9ORVRfQURNSU4pIHx8Ci0JCSAgICAgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSApIHsKLQkJCXJjID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZhcnBfZW50cnksIHJxLT5pZnJfaWZydS5pZnJ1X2RhdGEsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9jYWNoZV9lbnRyeSkpKQotCQkJcmMgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyYyA9IHFldGhfYXJwX2FkZF9lbnRyeShjYXJkLCAmYXJwX2VudHJ5KTsKLQkJYnJlYWs7Ci0JY2FzZSBTSU9DX1FFVEhfQVJQX1JFTU9WRV9FTlRSWToKLQkJaWYgKCAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSB8fAotCQkgICAgIChjYXJkLT5vcHRpb25zLmxheWVyMikgKSB7Ci0JCQlyYyA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmYXJwX2VudHJ5LCBycS0+aWZyX2lmcnUuaWZydV9kYXRhLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpKSkKLQkJCXJjID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmMgPSBxZXRoX2FycF9yZW1vdmVfZW50cnkoY2FyZCwgJmFycF9lbnRyeSk7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ19RRVRIX0FSUF9GTFVTSF9DQUNIRToKLQkJaWYgKCAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSB8fAotCQkgICAgIChjYXJkLT5vcHRpb25zLmxheWVyMikgKSB7Ci0JCQlyYyA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJjID0gcWV0aF9hcnBfZmx1c2hfY2FjaGUoY2FyZCk7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ19RRVRIX0FEUF9TRVRfU05NUF9DT05UUk9MOgotCQlyYyA9IHFldGhfc25tcF9jb21tYW5kKGNhcmQsIHJxLT5pZnJfaWZydS5pZnJ1X2RhdGEpOwotCQlicmVhazsKLQljYXNlIFNJT0NfUUVUSF9HRVRfQ0FSRF9UWVBFOgotCQlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU0FFKSAmJgotCQkgICAgIWNhcmQtPmluZm8uZ3Vlc3RsYW4pCi0JCQlyZXR1cm4gMTsKLQkJcmV0dXJuIDA7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ0dNSUlQSFk6Ci0JCW1paV9kYXRhID0gaWZfbWlpKHJxKTsKLQkJbWlpX2RhdGEtPnBoeV9pZCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCW1paV9kYXRhID0gaWZfbWlpKHJxKTsKLQkJaWYgKG1paV9kYXRhLT5waHlfaWQgIT0gMCkKLQkJCXJjID0gLUVJTlZBTDsKLQkJZWxzZQotCQkJbWlpX2RhdGEtPnZhbF9vdXQgPSBxZXRoX21kaW9fcmVhZChkZXYsbWlpX2RhdGEtPnBoeV9pZCwKLQkJCQkJCQkgICBtaWlfZGF0YS0+cmVnX251bSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJjID0gLUVPUE5PVFNVUFA7Ci0JfQotCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJpb2NlJWQiLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotcWV0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCi0JY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIChkZXYtPnByaXYpOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw1LCJnZXRzdGF0Iik7Ci0KLQlyZXR1cm4gJmNhcmQtPnN0YXRzOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQljaGFyIGRiZl90ZXh0WzE1XTsKLQotCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSAoZGV2LT5wcml2KTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiY2hnbXR1Iik7Ci0Jc3ByaW50ZihkYmZfdGV4dCwgIiU4eCIsIG5ld19tdHUpOwotCVFFVEhfREJGX1RFWFQodHJhY2UsNCxkYmZfdGV4dCk7Ci0KLQlpZiAobmV3X210dSA8IDY0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAobmV3X210dSA+IDY1NTM1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLElQQV9JUF9GUkFHTUVOVEFUSU9OKSkgJiYKLQkgICAgKCFxZXRoX210dV9pc192YWxpZChjYXJkLCBuZXdfbXR1KSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWRldi0+bXR1ID0gbmV3X210dTsKLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLXN0YXRpYyB2b2lkCi1xZXRoX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInZsYW5yZWciKTsKLQotCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBkZXYtPnByaXY7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7Ci0JY2FyZC0+dmxhbmdycCA9IGdycDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT52bGFubG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9mcmVlX3ZsYW5fYnVmZmVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmLAotCQkgICAgICB1bnNpZ25lZCBzaG9ydCB2aWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRtcF9saXN0OwotCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdG1wX2xpc3QpOwotCWxvY2tkZXBfc2V0X2NsYXNzKCZ0bXBfbGlzdC5sb2NrLCAmcWRpb19vdXRfc2tiX3F1ZXVlX2tleSk7Ci0JZm9yKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpewotCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KSkpewotCQkJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSAmJgotCQkJICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA9PSB2aWQpKSB7Ci0JCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJfSBlbHNlCi0JCQkJc2tiX3F1ZXVlX3RhaWwoJnRtcF9saXN0LCBza2IpOwotCQl9Ci0JfQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnRtcF9saXN0KSkpCi0JCXNrYl9xdWV1ZV90YWlsKCZidWYtPnNrYl9saXN0LCBza2IpOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9mcmVlX3ZsYW5fc2ticyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBzaG9ydCB2aWQpCi17Ci0JaW50IGksIGo7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiZnJ2bHNrYnMiKTsKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzOyArK2kpewotCQlmb3IgKGogPSAwOyBqIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgKytqKQotCQkJcWV0aF9mcmVlX3ZsYW5fYnVmZmVyKGNhcmQsICZjYXJkLT5xZGlvLgotCQkJCQkgICAgICBvdXRfcXNbaV0tPmJ1ZnNbal0sIHZpZCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzNChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBzaG9ydCB2aWQpCi17Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKLQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHI7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiZnJ2YWRkcjQiKTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHZsYW5fZ3JvdXBfZ2V0X2RldmljZShjYXJkLT52bGFuZ3JwLCB2aWQpKTsKLQlpZiAoIWluX2RldikKLQkJZ290byBvdXQ7Ci0JZm9yIChpZmEgPSBpbl9kZXYtPmlmYV9saXN0OyBpZmE7IGlmYSA9IGlmYS0+aWZhX25leHQpIHsKLQkJYWRkciA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKFFFVEhfUFJPVF9JUFY0KTsKLQkJaWYgKGFkZHIpewotCQkJYWRkci0+dS5hNC5hZGRyID0gaWZhLT5pZmFfYWRkcmVzczsKLQkJCWFkZHItPnUuYTQubWFzayA9IGlmYS0+aWZhX21hc2s7Ci0JCQlhZGRyLT50eXBlID0gUUVUSF9JUF9UWVBFX05PUk1BTDsKLQkJCWlmICghcWV0aF9kZWxldGVfaXAoY2FyZCwgYWRkcikpCi0JCQkJa2ZyZWUoYWRkcik7Ci0JCX0KLQl9Ci1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXM2KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHVuc2lnbmVkIHNob3J0IHZpZCkKLXsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0Jc3RydWN0IGluZXQ2X2RldiAqaW42X2RldjsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7Ci0Jc3RydWN0IHFldGhfaXBhZGRyICphZGRyOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgImZydmFkZHI2Iik7Ci0KLQlpbjZfZGV2ID0gaW42X2Rldl9nZXQodmxhbl9ncm91cF9nZXRfZGV2aWNlKGNhcmQtPnZsYW5ncnAsIHZpZCkpOwotCWlmICghaW42X2RldikKLQkJcmV0dXJuOwotCWZvciAoaWZhID0gaW42X2Rldi0+YWRkcl9saXN0OyBpZmE7IGlmYSA9IGlmYS0+bHN0X25leHQpewotCQlhZGRyID0gcWV0aF9nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjYpOwotCQlpZiAoYWRkcil7Ci0JCQltZW1jcHkoJmFkZHItPnUuYTYuYWRkciwgJmlmYS0+YWRkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQlhZGRyLT51LmE2LnBmeGxlbiA9IGlmYS0+cHJlZml4X2xlbjsKLQkJCWFkZHItPnR5cGUgPSBRRVRIX0lQX1RZUEVfTk9STUFMOwotCQkJaWYgKCFxZXRoX2RlbGV0ZV9pcChjYXJkLCBhZGRyKSkKLQkJCQlrZnJlZShhZGRyKTsKLQkJfQotCX0KLQlpbjZfZGV2X3B1dChpbjZfZGV2KTsKLSNlbmRpZiAvKiBDT05GSUdfUUVUSF9JUFY2ICovCi19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMiB8fCAhY2FyZC0+dmxhbmdycCkKLQkJcmV0dXJuOwotCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlczQoY2FyZCwgdmlkKTsKLQlxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXM2KGNhcmQsIHZpZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbl9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0gICAgICAgIHN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotICAgICAgICBRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJzZHZjYiIpOwotICAgICAgICBjbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotICAgICAgICBpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKLQkJUFJJTlRfRVJSKCJFcnJvciBpbiBwcm9jZXNzaW5nIFZMQU4gJWkgb24gJXM6IDB4JXguICIKLQkJCSAgIkNvbnRpbnVpbmdcbiIsY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCwKLQkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyVkwlNHgiLCBjbWQtPmhkci5jb21tYW5kKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgImVyciVkIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCX0KLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3UxNiBpLAotCQkJICAgIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQotCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAiTDJzZHYleCIsaXBhY21kKTsKLQlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLSAgICAgICAgY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCA9IGk7Ci0JcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwKLQkJCQkgcWV0aF9sYXllcjJfc2VuZF9zZXRkZWx2bGFuX2NiLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfbGF5ZXIyX3Byb2Nlc3NfdmxhbnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IGNsZWFyKQotewotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgaTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDMsICJMMnByY3ZsbiIpOwotCi0JaWYgKCFjYXJkLT52bGFuZ3JwKQotCQlyZXR1cm47Ci0JZm9yIChpID0gMDsgaSA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyBpKyspIHsKLQkJaWYgKHZsYW5fZ3JvdXBfZ2V0X2RldmljZShjYXJkLT52bGFuZ3JwLCBpKSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChjbGVhcikKLQkJCXFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCBpLCBJUEFfQ01EX0RFTFZMQU4pOwotCQllbHNlCi0JCQlxZXRoX2xheWVyMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgaSwgSVBBX0NNRF9TRVRWTEFOKTsKLSAgICAgICAgfQotfQotCi0vKmFkZF92aWQgaXMgbGF5ZXIgMiB1c2VkIG9ubHkgLi4uLiovCi1zdGF0aWMgdm9pZAotcWV0aF92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgNCwgImFpZDolZCIsIHZpZCk7Ci0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OwotCWlmICghY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCXJldHVybjsKLQlxZXRoX2xheWVyMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX1NFVFZMQU4pOwotfQotCi0vKi4uLiBraWxsX3ZpZCB1c2VkIGZvciBib3RoIG1vZGVzKi8KLXN0YXRpYyB2b2lkCi1xZXRoX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAia2lkOiVkIiwgdmlkKTsKLQotCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBkZXYtPnByaXY7Ci0JLyogZnJlZSBhbGwgc2ticyBmb3IgdGhlIHZsYW4gZGV2aWNlICovCi0JcWV0aF9mcmVlX3ZsYW5fc2ticyhjYXJkLCB2aWQpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT52bGFubG9jaywgZmxhZ3MpOwotCS8qIHVucmVnaXN0ZXIgSVAgYWRkcmVzc2VzIG9mIHZsYW4gZGV2aWNlICovCi0JcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzKGNhcmQsIHZpZCk7Ci0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKGNhcmQtPnZsYW5ncnAsIHZpZCwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCXFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCB2aWQsIElQQV9DTURfREVMVkxBTik7Ci0JcWV0aF9zZXRfbXVsdGljYXN0X2xpc3QoY2FyZC0+ZGV2KTsKLX0KLSNlbmRpZgotLyoqCi0gKiBFeGFtaW5lIGhhcmR3YXJlIHJlc3BvbnNlIHRvIFNFVF9QUk9NSVNDX01PREUKLSAqLwotc3RhdGljIGludAotcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCQkgICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0Jc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zICpzZXRwYXJtczsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwicHJtYWRwY2IiKTsKLQotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0Jc2V0cGFybXMgPSAmKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMpOwotCi0gICAgICAgIHFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKWNtZCk7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLDQsInBybXJjJTIuMngiLGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJc2V0cGFybXMtPmRhdGEubW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOwotCX0KLQljYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9IHNldHBhcm1zLT5kYXRhLm1vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0vKgotICogU2V0IHByb21pc2N1b3VzIG1vZGUgKG9uIG9yIG9mZikgKFNFVF9QUk9NSVNDX01PREUgY29tbWFuZCkKLSAqLwotc3RhdGljIHZvaWQKLXFldGhfc2V0YWRwX3Byb21pc2NfbW9kZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWVudW0gcWV0aF9pcGFfcHJvbWlzY19tb2RlcyBtb2RlOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT5kZXY7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJzZXRwcm9tIik7Ci0KLQlpZiAoKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICYmCi0JICAgICAoY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPT0gU0VUX1BST01JU0NfTU9ERV9PTikpIHx8Ci0JICAgICghKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgJiYKLQkgICAgIChjYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9PSBTRVRfUFJPTUlTQ19NT0RFX09GRikpKQotCQlyZXR1cm47Ci0JbW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOwotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCW1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09OOwotCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAibW9kZToleCIsIG1vZGUpOwotCi0JaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFLAotCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcykpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YSArIElQQV9QRFVfSEVBREVSX1NJWkUpOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5tb2RlID0gbW9kZTsKLQlxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfc2V0YWRwX3Byb21pc2NfbW9kZV9jYiwgTlVMTCk7Ci19Ci0KLS8qKgotICogc2V0IG11bHRpY2FzdCBhZGRyZXNzIG9uIGNhcmQKLSAqLwotc3RhdGljIHZvaWQKLXFldGhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGRldi0+cHJpdjsKLQotCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQotCQlyZXR1cm4gOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgMywgInNldG11bHRpIik7Ci0JcWV0aF9kZWxldGVfbWNfYWRkcmVzc2VzKGNhcmQpOwotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQlxZXRoX2xheWVyMl9hZGRfbXVsdGljYXN0KGNhcmQpOwotCQlnb3RvIG91dDsKLQl9Ci0JcWV0aF9hZGRfbXVsdGljYXN0X2lwdjQoY2FyZCk7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCXFldGhfYWRkX211bHRpY2FzdF9pcHY2KGNhcmQpOwotI2VuZGlmCi1vdXQ6Ci0JcWV0aF9zZXRfaXBfYWRkcl9saXN0KGNhcmQpOwotCWlmICghcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSkpCi0JCXJldHVybjsKLQlxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoY2FyZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfbmVpZ2hfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoX3Bhcm1zICpucCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfZ2V0X21hY19mb3JfaXBtKF9fdTMyIGlwbSwgY2hhciAqbWFjLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDJfVFIpCi0JCWlwX3RyX21jX21hcChpcG0sIG1hYyk7Ci0JZWxzZQotCQlpcF9ldGhfbWNfbWFwKGlwbSwgbWFjKTsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2lwYWRkciAqCi1xZXRoX2dldF9hZGRyX2J1ZmZlcihlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90KQotewotCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKLQotCWFkZHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFkZHIpLCBHRlBfQVRPTUlDKTsKLQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCVBSSU5UX1dBUk4oIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBhZGRyZXNzXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWFkZHItPnR5cGUgPSBRRVRIX0lQX1RZUEVfTk9STUFMOwotCWFkZHItPnByb3RvID0gcHJvdDsKLQlyZXR1cm4gYWRkcjsKLX0KLQotaW50Ci1xZXRoX29zbl9hc3Npc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJdm9pZCAqZGF0YSwKLQkJaW50IGRhdGFfbGVuKQotewotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJvc25zZG1jIik7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKWRldi0+cHJpdjsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkgJiYKLQkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaW9iID0gcWV0aF93YWl0X2Zvcl9idWZmZXIoJmNhcmQtPndyaXRlKTsKLQltZW1jcHkoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUsIGRhdGEsIGRhdGFfbGVuKTsKLQlyYyA9IHFldGhfb3NuX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIGRhdGFfbGVuKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqCi1xZXRoX25ldGRldl9ieV9kZXZubyh1bnNpZ25lZCBjaGFyICpyZWFkX2Rldl9ubykKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwotCXVuc2lnbmVkIGNoYXIgKnJlYWRubzsKLQlfX3UxNiB0ZW1wX2Rldl9ubywgY2FyZF9kZXZfbm87Ci0JY2hhciAqZW5kcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbmRldiA9IE5VTEw7Ci0JbWVtY3B5KCZ0ZW1wX2Rldl9ubywgcmVhZF9kZXZfbm8sIDIpOwotCXJlYWRfbG9ja19pcnFzYXZlKCZxZXRoX2NhcmRfbGlzdC5yd2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhcmQsICZxZXRoX2NhcmRfbGlzdC5saXN0LCBsaXN0KSB7Ci0JCXJlYWRubyA9IENBUkRfUkRFVl9JRChjYXJkKTsKLQkJcmVhZG5vICs9IChzdHJsZW4ocmVhZG5vKSAtIDQpOwotCQljYXJkX2Rldl9ubyA9IHNpbXBsZV9zdHJ0b3VsKHJlYWRubywgJmVuZHAsIDE2KTsKLQkJaWYgKGNhcmRfZGV2X25vID09IHRlbXBfZGV2X25vKSB7Ci0JCQluZGV2ID0gY2FyZC0+ZGV2OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIG5kZXY7Ci19Ci0KLWludAotcWV0aF9vc25fcmVnaXN0ZXIodW5zaWduZWQgY2hhciAqcmVhZF9kZXZfbm8sCi0JCSAgc3RydWN0IG5ldF9kZXZpY2UgKipkZXYsCi0JCSAgaW50ICgqYXNzaXN0X2NiKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopLAotCQkgIGludCAoKmRhdGFfY2IpKHN0cnVjdCBza19idWZmICopKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKiBjYXJkOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIm9zbnJlZyIpOwotCSpkZXYgPSBxZXRoX25ldGRldl9ieV9kZXZubyhyZWFkX2Rldl9ubyk7Ci0JaWYgKCpkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopKCpkZXYpLT5wcml2OwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKChhc3Npc3RfY2IgPT0gTlVMTCkgfHwgKGRhdGFfY2IgPT0gTlVMTCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWNhcmQtPm9zbl9pbmZvLmFzc2lzdF9jYiA9IGFzc2lzdF9jYjsKLQljYXJkLT5vc25faW5mby5kYXRhX2NiID0gZGF0YV9jYjsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotcWV0aF9vc25fZGVyZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIm9zbmRlcmVnIik7Ci0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKilkZXYtPnByaXY7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm47Ci0JY2FyZC0+b3NuX2luZm8uYXNzaXN0X2NiID0gTlVMTDsKLQljYXJkLT5vc25faW5mby5kYXRhX2NiID0gTlVMTDsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2RlbGV0ZV9tY19hZGRyZXNzZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmlwdG9kbzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJkZWxtYyIpOwotCWlwdG9kbyA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKFFFVEhfUFJPVF9JUFY0KTsKLQlpZiAoIWlwdG9kbykgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiZG1jbm9tZW0iKTsKLQkJcmV0dXJuOwotCX0KLQlpcHRvZG8tPnR5cGUgPSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQzsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWlmICghX19xZXRoX2luc2VydF9pcF90b2RvKGNhcmQsIGlwdG9kbywgMCkpCi0JCWtmcmVlKGlwdG9kbyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9hZGRfbWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IGluX2RldmljZSAqaW40X2RldikKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmlwbTsKLQlzdHJ1Y3QgaXBfbWNfbGlzdCAqaW00OwotCWNoYXIgYnVmW01BWF9BRERSX0xFTl07Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImFkZG1jIik7Ci0JZm9yIChpbTQgPSBpbjRfZGV2LT5tY19saXN0OyBpbTQ7IGltNCA9IGltNC0+bmV4dCkgewotCQlxZXRoX2dldF9tYWNfZm9yX2lwbShpbTQtPm11bHRpYWRkciwgYnVmLCBpbjRfZGV2LT5kZXYpOwotCQlpcG0gPSBxZXRoX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNCk7Ci0JCWlmICghaXBtKQotCQkJY29udGludWU7Ci0JCWlwbS0+dS5hNC5hZGRyID0gaW00LT5tdWx0aWFkZHI7Ci0JCW1lbWNweShpcG0tPm1hYyxidWYsT1NBX0FERFJfTEVOKTsKLQkJaXBtLT5pc19tdWx0aWNhc3QgPSAxOwotCQlpZiAoIXFldGhfYWRkX2lwKGNhcmQsaXBtKSkKLQkJCWtmcmVlKGlwbSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXFldGhfYWRkX3ZsYW5fbWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLSNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCi0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCXN0cnVjdCB2bGFuX2dyb3VwICp2ZzsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiYWRkbWN2bCIpOwotCWlmICggKChjYXJkLT5vcHRpb25zLmxheWVyMiA9PSAwKSAmJgotCSAgICAgICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCxJUEFfRlVMTF9WTEFOKSkpIHx8Ci0JICAgICAoY2FyZC0+dmxhbmdycCA9PSBOVUxMKSApCi0JCXJldHVybiA7Ci0KLQl2ZyA9IGNhcmQtPnZsYW5ncnA7Ci0JZm9yIChpID0gMDsgaSA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyBpKyspIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZywgaSk7Ci0JCWlmIChuZXRkZXYgPT0gTlVMTCB8fAotCQkgICAgIShuZXRkZXYtPmZsYWdzICYgSUZGX1VQKSkKLQkJCWNvbnRpbnVlOwotCQlpbl9kZXYgPSBpbl9kZXZfZ2V0KG5ldGRldik7Ci0JCWlmICghaW5fZGV2KQotCQkJY29udGludWU7Ci0JCXJlYWRfbG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOwotCQlxZXRoX2FkZF9tYyhjYXJkLGluX2Rldik7Ci0JCXJlYWRfdW5sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0JCWluX2Rldl9wdXQoaW5fZGV2KTsKLQl9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfYWRkX211bHRpY2FzdF9pcHY0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IGluX2RldmljZSAqaW40X2RldjsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiY2hrbWN2NCIpOwotCWluNF9kZXYgPSBpbl9kZXZfZ2V0KGNhcmQtPmRldik7Ci0JaWYgKGluNF9kZXYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCXJlYWRfbG9jaygmaW40X2Rldi0+bWNfbGlzdF9sb2NrKTsKLQlxZXRoX2FkZF9tYyhjYXJkLCBpbjRfZGV2KTsKLQlxZXRoX2FkZF92bGFuX21jKGNhcmQpOwotCXJlYWRfdW5sb2NrKCZpbjRfZGV2LT5tY19saXN0X2xvY2spOwotCWluX2Rldl9wdXQoaW40X2Rldik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2xheWVyMl9hZGRfbXVsdGljYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IHFldGhfaXBhZGRyICppcG07Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiTDJhZGRtYyIpOwotCWZvciAoZG0gPSBjYXJkLT5kZXYtPm1jX2xpc3Q7IGRtOyBkbSA9IGRtLT5uZXh0KSB7Ci0JCWlwbSA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKFFFVEhfUFJPVF9JUFY0KTsKLQkJaWYgKCFpcG0pCi0JCQljb250aW51ZTsKLQkJbWVtY3B5KGlwbS0+bWFjLGRtLT5kbWlfYWRkcixNQVhfQUREUl9MRU4pOwotCQlpcG0tPmlzX211bHRpY2FzdCA9IDE7Ci0JCWlmICghcWV0aF9hZGRfaXAoY2FyZCwgaXBtKSkKLQkJCWtmcmVlKGlwbSk7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotc3RhdGljIHZvaWQKLXFldGhfYWRkX21jNihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2KQotewotCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBtOwotCXN0cnVjdCBpZm1jYWRkcjYgKmltNjsKLQljaGFyIGJ1ZltNQVhfQUREUl9MRU5dOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJhZGRtYzYiKTsKLQlmb3IgKGltNiA9IGluNl9kZXYtPm1jX2xpc3Q7IGltNiAhPSBOVUxMOyBpbTYgPSBpbTYtPm5leHQpIHsKLQkJbmRpc2NfbWNfbWFwKCZpbTYtPm1jYV9hZGRyLCBidWYsIGluNl9kZXYtPmRldiwgMCk7Ci0JCWlwbSA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKFFFVEhfUFJPVF9JUFY2KTsKLQkJaWYgKCFpcG0pCi0JCQljb250aW51ZTsKLQkJaXBtLT5pc19tdWx0aWNhc3QgPSAxOwotCQltZW1jcHkoaXBtLT5tYWMsYnVmLE9TQV9BRERSX0xFTik7Ci0JCW1lbWNweSgmaXBtLT51LmE2LmFkZHIsJmltNi0+bWNhX2FkZHIuczZfYWRkciwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJaWYgKCFxZXRoX2FkZF9pcChjYXJkLGlwbSkpCi0JCQlrZnJlZShpcG0pOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1xZXRoX2FkZF92bGFuX21jNihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQlzdHJ1Y3QgaW5ldDZfZGV2ICppbl9kZXY7Ci0Jc3RydWN0IHZsYW5fZ3JvdXAgKnZnOwotCWludCBpOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJhZG1jNnZsIik7Ci0JaWYgKCAoKGNhcmQtPm9wdGlvbnMubGF5ZXIyID09IDApICYmCi0JICAgICAgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLElQQV9GVUxMX1ZMQU4pKSkgfHwKLQkgICAgIChjYXJkLT52bGFuZ3JwID09IE5VTEwpKQotCQlyZXR1cm4gOwotCi0JdmcgPSBjYXJkLT52bGFuZ3JwOwotCWZvciAoaSA9IDA7IGkgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UodmcsIGkpOwotCQlpZiAobmV0ZGV2ID09IE5VTEwgfHwKLQkJICAgICEobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCQljb250aW51ZTsKLQkJaW5fZGV2ID0gaW42X2Rldl9nZXQobmV0ZGV2KTsKLQkJaWYgKCFpbl9kZXYpCi0JCQljb250aW51ZTsKLQkJcmVhZF9sb2NrX2JoKCZpbl9kZXYtPmxvY2spOwotCQlxZXRoX2FkZF9tYzYoY2FyZCxpbl9kZXYpOwotCQlyZWFkX3VubG9ja19iaCgmaW5fZGV2LT5sb2NrKTsKLQkJaW42X2Rldl9wdXQoaW5fZGV2KTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfVkxBTiAqLwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9hZGRfbXVsdGljYXN0X2lwdjYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2OwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJjaGttY3Y2Iik7Ci0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBWNikpCi0JCXJldHVybiA7Ci0JaW42X2RldiA9IGluNl9kZXZfZ2V0KGNhcmQtPmRldik7Ci0JaWYgKGluNl9kZXYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCXJlYWRfbG9ja19iaCgmaW42X2Rldi0+bG9jayk7Ci0JcWV0aF9hZGRfbWM2KGNhcmQsIGluNl9kZXYpOwotCXFldGhfYWRkX3ZsYW5fbWM2KGNhcmQpOwotCXJlYWRfdW5sb2NrX2JoKCZpbjZfZGV2LT5sb2NrKTsKLQlpbjZfZGV2X3B1dChpbjZfZGV2KTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUUVUSF9JUFY2ICovCi0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYywKLQkJCSAgIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQsCi0JCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJzZG1hYyIpOwotCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgaXBhY21kLCBRRVRIX1BST1RfSVBWNCk7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwotICAgICAgICBjbWQtPmRhdGEuc2V0ZGVsbWFjLm1hY19sZW5ndGggPSBPU0FfQUREUl9MRU47Ci0gICAgICAgIG1lbWNweSgmY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsIG1hYywgT1NBX0FERFJfTEVOKTsKLQlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCByZXBseV9jYiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIyX3NlbmRfc2V0Z3JvdXBtYWNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCQlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCi0JCQkJdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQlfX3U4ICptYWM7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJTZ21hY2IiKTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotCW1hYyA9ICZjbWQtPmRhdGEuc2V0ZGVsbWFjLm1hY1swXTsKLQkvKiBNQUMgYWxyZWFkeSByZWdpc3RlcmVkLCBuZWVkZWQgaW4gY291cGxlL3VuY291cGxlIGNhc2UgKi8KLQlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUgPT0gMHgyMDA1KSB7Ci0JCVBSSU5UX1dBUk4oIkdyb3VwIE1BQyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAiIFwKLQkJCSAgImFscmVhZHkgZXhpc3Rpbmcgb24gJXMgXG4iLAotCQkJICBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdLAotCQkJICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAwOwotCX0KLQlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpCi0JCVBSSU5UX0VSUigiQ291bGQgbm90IHNldCBncm91cCBNQUMgIiBcCi0JCQkgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBvbiAlczogJXhcbiIsCi0JCQkgIG1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sCi0JCQkgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2xheWVyMl9zZW5kX3NldGdyb3VwbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJTZ21hYyIpOwotCXJldHVybiBxZXRoX2xheWVyMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUR01BQywKLQkJCQkJICBxZXRoX2xheWVyMl9zZW5kX3NldGdyb3VwbWFjX2NiKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9sYXllcjJfc2VuZF9kZWxncm91cG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJCQl1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCV9fdTggKm1hYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJMMkRnbWFjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JbWFjID0gJmNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjWzBdOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKLQkJUFJJTlRfRVJSKCJDb3VsZCBub3QgZGVsZXRlIGdyb3VwIE1BQyAiIFwKLQkJCSAgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IG9uICVzOiAleFxuIiwKLQkJCSAgbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSwKLQkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2xheWVyMl9zZW5kX2RlbGdyb3VwbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJEZ21hYyIpOwotCXJldHVybiBxZXRoX2xheWVyMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfREVMR01BQywKLQkJCQkJICBxZXRoX2xheWVyMl9zZW5kX2RlbGdyb3VwbWFjX2NiKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9sYXllcjJfc2VuZF9zZXRtYWNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCSAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJTbWFjY2IiKTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyZXIleCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7Ci0JCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVJTzsKLQl9IGVsc2UgewotCQljYXJkLT5pbmZvLm1hY19iaXRzIHw9IFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOwotCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkcixjbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYywKLQkJICAgICAgIE9TQV9BRERSX0xFTik7Ci0JCVBSSU5UX0lORk8oIk1BQyBhZGRyZXNzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4ICIKLQkJCSAgICJzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBvbiBkZXZpY2UgJXNcbiIsCi0JCQkgICBjYXJkLT5kZXYtPmRldl9hZGRyWzBdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzFdLAotCQkJICAgY2FyZC0+ZGV2LT5kZXZfYWRkclsyXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclszXSwKLQkJCSAgIGNhcmQtPmRldi0+ZGV2X2FkZHJbNF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbNV0sCi0JCQkgICBjYXJkLT5kZXYtPm5hbWUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcWV0aF9sYXllcjJfc2VuZF9zZXRtYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191OCAqbWFjKQotewotCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJMMlNldG1hYyIpOwotCXJldHVybiBxZXRoX2xheWVyMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUVk1BQywKLQkJCQkJICBxZXRoX2xheWVyMl9zZW5kX3NldG1hY19jYik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIyX3NlbmRfZGVsbWFjX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCQkgICBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCi0JCQkgICB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIkwyRG1hY2NiIik7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJlcnIlZCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRUlPOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIyX3NlbmRfZGVsbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJEZWxtYWMiKTsKLQlpZiAoIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gcWV0aF9sYXllcjJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX0RFTFZNQUMsCi0JCQkJCSAgcWV0aF9sYXllcjJfc2VuZF9kZWxtYWNfY2IpOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2xheWVyMl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0JaW50IHJjID0gMDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDMsICJzZXRtYWMiKTsKLQotCWlmIChxZXRoX3ZlcmlmeV9kZXYoZGV2KSAhPSBRRVRIX1JFQUxfQ0FSRCkgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAzLCAic2V0bWNJTlYiKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OwotCi0JaWYgKCFjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQlQUklOVF9XQVJOKCJTZXR0aW5nIE1BQyBhZGRyZXNzIG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgIgotCQkJICAgImluIExheWVyIDMgbW9kZS5cbiIsIGRldi0+bmFtZSk7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDMsICJzZXRtY0xZMyIpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKSB7Ci0JCVBSSU5UX1dBUk4oIlNldHRpbmcgTUFDIGFkZHJlc3Mgb24gJXMgaXMgbm90IHN1cHBvcnRlZC5cbiIsCi0JCQkgICBkZXYtPm5hbWUpOwotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAzLCAic2V0bWNPU04iKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMywgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCVFFVEhfREJGX0hFWCh0cmFjZSwgMywgYWRkci0+c2FfZGF0YSwgT1NBX0FERFJfTEVOKTsKLQlyYyA9IHFldGhfbGF5ZXIyX3NlbmRfZGVsbWFjKGNhcmQsICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdKTsKLQlpZiAoIXJjKQotCQlyYyA9IHFldGhfbGF5ZXIyX3NlbmRfc2V0bWFjKGNhcmQsIGFkZHItPnNhX2RhdGEpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfZmlsbF9pcGFjbWRfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZCwKLQkJCV9fdTggY29tbWFuZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCkKLXsKLQltZW1zZXQoY21kLCAwLCBzaXplb2YgKHN0cnVjdCBxZXRoX2lwYV9jbWQpKTsKLQljbWQtPmhkci5jb21tYW5kID0gY29tbWFuZDsKLQljbWQtPmhkci5pbml0aWF0b3IgPSBJUEFfQ01EX0lOSVRJQVRPUl9IT1NUOwotCWNtZC0+aGRyLnNlcW5vID0gY2FyZC0+c2Vxbm8uaXBhOwotCWNtZC0+aGRyLmFkYXB0ZXJfdHlwZSA9IHFldGhfZ2V0X2lwYV9hZHBfdHlwZShjYXJkLT5pbmZvLmxpbmtfdHlwZSk7Ci0JY21kLT5oZHIucmVsX2FkYXB0ZXJfbm8gPSAoX191OCkgY2FyZC0+aW5mby5wb3J0bm87Ci0JaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKQotCQljbWQtPmhkci5wcmltX3ZlcnNpb25fbm8gPSAyOwotCWVsc2UKLQkJY21kLT5oZHIucHJpbV92ZXJzaW9uX25vID0gMTsKLQljbWQtPmhkci5wYXJhbV9jb3VudCA9IDE7Ci0JY21kLT5oZHIucHJvdF92ZXJzaW9uID0gcHJvdDsKLQljbWQtPmhkci5pcGFfc3VwcG9ydGVkID0gMDsKLQljbWQtPmhkci5pcGFfZW5hYmxlZCA9IDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICoKLXFldGhfZ2V0X2lwYWNtZF9idWZmZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX2lwYV9jbWRzIGlwYWNtZCwKLQkJICAgICAgIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCi17Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwotCXFldGhfZmlsbF9pcGFjbWRfaGVhZGVyKGNhcmQsIGNtZCwgaXBhY21kLCBwcm90KTsKLQotCXJldHVybiBpb2I7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2VuZF9zZXRkZWxtYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIsIGludCBpcGFjbWQpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNldGRlbG1jIik7Ci0KLQlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLQltZW1jcHkoJmNtZC0+ZGF0YS5zZXRkZWxpcG0ubWFjLGFkZHItPm1hYywgT1NBX0FERFJfTEVOKTsKLQlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpCi0JCW1lbWNweShjbWQtPmRhdGEuc2V0ZGVsaXBtLmlwNiwgJmFkZHItPnUuYTYuYWRkciwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQllbHNlCi0JCW1lbWNweSgmY21kLT5kYXRhLnNldGRlbGlwbS5pcDQsICZhZGRyLT51LmE0LmFkZHIsNCk7Ci0KLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci1zdGF0aWMgdm9pZAotcWV0aF9maWxsX25ldG1hc2sodTggKm5ldG1hc2ssIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IGksajsKLQlmb3IgKGk9MDtpPDE2O2krKykgewotCQlqPShsZW4pLShpKjgpOwotCQlpZiAoaiA+PSA4KQotCQkJbmV0bWFza1tpXSA9IDB4ZmY7Ci0JCWVsc2UgaWYgKGogPiAwKQotCQkJbmV0bWFza1tpXSA9ICh1OCkoMHhGRjAwPj5qKTsKLQkJZWxzZQotCQkJbmV0bWFza1tpXSA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3NlbmRfc2V0ZGVsaXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfaXBhZGRyICphZGRyLAotCQkgICBpbnQgaXBhY21kLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0JX191OCBuZXRtYXNrWzE2XTsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwic2V0ZGVsaXAiKTsKLQlRRVRIX0RCRl9URVhUXyh0cmFjZSw0LCJmbGFncyUwMlgiLCBmbGFncyk7Ci0KLQlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLQlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjYpIHsKLQkJbWVtY3B5KGNtZC0+ZGF0YS5zZXRkZWxpcDYuaXBfYWRkciwgJmFkZHItPnUuYTYuYWRkciwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJcWV0aF9maWxsX25ldG1hc2sobmV0bWFzayxhZGRyLT51LmE2LnBmeGxlbik7Ci0JCW1lbWNweShjbWQtPmRhdGEuc2V0ZGVsaXA2Lm1hc2ssIG5ldG1hc2ssCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCWNtZC0+ZGF0YS5zZXRkZWxpcDYuZmxhZ3MgPSBmbGFnczsKLQl9IGVsc2UgewotCQltZW1jcHkoY21kLT5kYXRhLnNldGRlbGlwNC5pcF9hZGRyLCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKLQkJbWVtY3B5KGNtZC0+ZGF0YS5zZXRkZWxpcDQubWFzaywgJmFkZHItPnUuYTQubWFzaywgNCk7Ci0JCWNtZC0+ZGF0YS5zZXRkZWxpcDQuZmxhZ3MgPSBmbGFnczsKLQl9Ci0KLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIyX3JlZ2lzdGVyX2FkZHJfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIpCi17Ci0JaWYgKCFhZGRyLT5pc19tdWx0aWNhc3QpCi0JCXJldHVybiAwOwotCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJzZXRnbWFjIik7Ci0JUUVUSF9EQkZfSEVYKHRyYWNlLDMsJmFkZHItPm1hY1swXSxPU0FfQUREUl9MRU4pOwotCXJldHVybiBxZXRoX2xheWVyMl9zZW5kX3NldGdyb3VwbWFjKGNhcmQsICZhZGRyLT5tYWNbMF0pOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2xheWVyMl9kZXJlZ2lzdGVyX2FkZHJfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCQkgIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKLXsKLQlpZiAoIWFkZHItPmlzX211bHRpY2FzdCkKLQkJcmV0dXJuIDA7Ci0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImRlbGdtYWMiKTsKLQlRRVRIX0RCRl9IRVgodHJhY2UsMywmYWRkci0+bWFjWzBdLE9TQV9BRERSX0xFTik7Ci0JcmV0dXJuIHFldGhfbGF5ZXIyX3NlbmRfZGVsZ3JvdXBtYWMoY2FyZCwgJmFkZHItPm1hY1swXSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfbGF5ZXIzX3JlZ2lzdGVyX2FkZHJfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIpCi17Ci0JY2hhciBidWZbNTBdOwotCWludCByYzsKLQlpbnQgY250ID0gMzsKLQotCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCJzZXRhZGRyNCIpOwotCQlRRVRIX0RCRl9IRVgodHJhY2UsIDMsICZhZGRyLT51LmE0LmFkZHIsIHNpemVvZihpbnQpKTsKLQl9IGVsc2UgaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY2KSB7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJzZXRhZGRyNiIpOwotCQlRRVRIX0RCRl9IRVgodHJhY2UsMywmYWRkci0+dS5hNi5hZGRyLDgpOwotCQlRRVRIX0RCRl9IRVgodHJhY2UsMywoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSs4LDgpOwotCX0gZWxzZSB7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJzZXRhZGRyPyIpOwotCQlRRVRIX0RCRl9IRVgodHJhY2UsIDMsIGFkZHIsIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFkZHIpKTsKLQl9Ci0JZG8gewotCQlpZiAoYWRkci0+aXNfbXVsdGljYXN0KQotCQkJcmMgPSAgcWV0aF9zZW5kX3NldGRlbG1jKGNhcmQsIGFkZHIsIElQQV9DTURfU0VUSVBNKTsKLQkJZWxzZQotCQkJcmMgPSBxZXRoX3NlbmRfc2V0ZGVsaXAoY2FyZCwgYWRkciwgSVBBX0NNRF9TRVRJUCwKLQkJCQkJYWRkci0+c2V0X2ZsYWdzKTsKLQkJaWYgKHJjKQotCQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImZhaWxlZCIpOwotCX0gd2hpbGUgKCgtLWNudCA+IDApICYmIHJjKTsKLQlpZiAocmMpewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiRkFJTEVEIik7Ci0JCXFldGhfaXBhZGRyX3RvX3N0cmluZyhhZGRyLT5wcm90bywgKHU4ICopJmFkZHItPnUsIGJ1Zik7Ci0JCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCByZWdpc3RlciBJUCBhZGRyZXNzICVzIChyYz0weCV4LyVkKVxuIiwKLQkJCSAgIGJ1ZiwgcmMsIHJjKTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2xheWVyM19kZXJlZ2lzdGVyX2FkZHJfZW50cnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCQkgIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKLXsKLQkvL2NoYXIgYnVmWzUwXTsKLQlpbnQgcmM7Ci0KLQlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpIHsKLQkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwiZGVsYWRkcjQiKTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLCAzLCAmYWRkci0+dS5hNC5hZGRyLCBzaXplb2YoaW50KSk7Ci0JfSBlbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiZGVsYWRkcjYiKTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDMsJmFkZHItPnUuYTYuYWRkciw4KTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDMsKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikrOCw4KTsKLQl9IGVsc2UgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiZGVsYWRkcj8iKTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLCAzLCBhZGRyLCBzaXplb2Yoc3RydWN0IHFldGhfaXBhZGRyKSk7Ci0JfQotCWlmIChhZGRyLT5pc19tdWx0aWNhc3QpCi0JCXJjID0gcWV0aF9zZW5kX3NldGRlbG1jKGNhcmQsIGFkZHIsIElQQV9DTURfREVMSVBNKTsKLQllbHNlCi0JCXJjID0gcWV0aF9zZW5kX3NldGRlbGlwKGNhcmQsIGFkZHIsIElQQV9DTURfREVMSVAsCi0JCQkJCWFkZHItPmRlbF9mbGFncyk7Ci0JaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJmYWlsZWQiKTsKLQkJLyogVE9ETzogcmUtYWN0aXZhdGUgdGhpcyB3YXJuaW5nIGFzIHNvb24gYXMgd2UgaGF2ZSBhCi0JCSAqIGNsZWFuIG1pcmNvIGNvZGUKLQkJcWV0aF9pcGFkZHJfdG9fc3RyaW5nKGFkZHItPnByb3RvLCAodTggKikmYWRkci0+dSwgYnVmKTsKLQkJUFJJTlRfV0FSTigiQ291bGQgbm90IGRlcmVnaXN0ZXIgSVAgYWRkcmVzcyAlcyAocmM9JXgpXG4iLAotCQkJICAgYnVmLCByYyk7Ci0JCSovCi0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9yZWdpc3Rlcl9hZGRyX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKLXsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCXJldHVybiBxZXRoX2xheWVyMl9yZWdpc3Rlcl9hZGRyX2VudHJ5KGNhcmQsIGFkZHIpOwotCi0JcmV0dXJuIHFldGhfbGF5ZXIzX3JlZ2lzdGVyX2FkZHJfZW50cnkoY2FyZCwgYWRkcik7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZGVyZWdpc3Rlcl9hZGRyX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKLXsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCXJldHVybiBxZXRoX2xheWVyMl9kZXJlZ2lzdGVyX2FkZHJfZW50cnkoY2FyZCwgYWRkcik7Ci0KLQlyZXR1cm4gcWV0aF9sYXllcjNfZGVyZWdpc3Rlcl9hZGRyX2VudHJ5KGNhcmQsIGFkZHIpOwotfQotCi1zdGF0aWMgdTMyCi1xZXRoX2V0aHRvb2xfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZXRodG9vbF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0hXX0NTVU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMgotcWV0aF9ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopZGV2LT5wcml2OwotCi0JcmV0dXJuIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gSFdfQ0hFQ0tTVU1NSU5HKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKWRldi0+cHJpdjsKLQotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgotCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoZGF0YSkKLQkJY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gSFdfQ0hFQ0tTVU1NSU5HOwotCWVsc2UKLQkJY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gU1dfQ0hFQ0tTVU1NSU5HOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyCi1xZXRoX2V0aHRvb2xfZ2V0X3NnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopZGV2LT5wcml2OwotCi0JcmV0dXJuICgoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kICE9IFFFVEhfTEFSR0VfU0VORF9OTykgJiYKLQkJKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfZXRodG9vbF9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopZGV2LT5wcml2OwotCi0JaWYgKGRhdGEpIHsKLQkJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCAhPSBRRVRIX0xBUkdFX1NFTkRfTk8pCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0JCWVsc2UgewotCQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfU0c7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIKLXFldGhfZXRodG9vbF9nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopZGV2LT5wcml2OwotCi0JcmV0dXJuICgoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kICE9IFFFVEhfTEFSR0VfU0VORF9OTykgJiYKLQkJKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1RTTykpOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2V0aHRvb2xfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKilkZXYtPnByaXY7Ci0KLQlpZiAoZGF0YSkgewotCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kICE9IFFFVEhfTEFSR0VfU0VORF9OTykKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCWVsc2UgewotCQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0gZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2V0aHRvb2xfb3BzID0gewotCS5nZXRfdHhfY3N1bSA9IHFldGhfZXRodG9vbF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBxZXRoX2V0aHRvb2xfc2V0X3R4X2NzdW0sCi0JLmdldF9yeF9jc3VtID0gcWV0aF9ldGh0b29sX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IHFldGhfZXRodG9vbF9zZXRfcnhfY3N1bSwKLQkuZ2V0X3NnICAgICAgPSBxZXRoX2V0aHRvb2xfZ2V0X3NnLAotCS5zZXRfc2cgICAgICA9IHFldGhfZXRodG9vbF9zZXRfc2csCi0JLmdldF90c28gICAgID0gcWV0aF9ldGh0b29sX2dldF90c28sCi0JLnNldF90c28gICAgID0gcWV0aF9ldGh0b29sX3NldF90c28sCi19OwotCi1zdGF0aWMgaW50Ci1xZXRoX2hhcmRfaGVhZGVyX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKmhhZGRyKQotewotCWNvbnN0IHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0JY29uc3Qgc3RydWN0IGV0aGhkciAqZXRoOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKLQotCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDJfVFIpCi0JCXJldHVybiAwOwotCi0JY2FyZCA9IHFldGhfZ2V0X2NhcmRfZnJvbV9kZXYoZGV2KTsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCWdvdG8gaGF2ZWhlYWRlcjsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JLyogY2F1c2Ugb2YgdGhlIG1hbmlwdWxhdGVkIGFycCBjb25zdHJ1Y3RvciBhbmQgdGhlIEFSUAotCSAgIGZsYWcgZm9yIE9TQUUgZGV2aWNlcyB3ZSBoYXZlIHNvbWUgbmFzdHkgZXhjZXB0aW9ucyAqLwotCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NBRSkgewotCQlpZiAoIWNhcmQtPm9wdGlvbnMuZmFrZV9sbCkgewotCQkJaWYgKChza2ItPnBrdF90eXBlPT1QQUNLRVRfT1VUR09JTkcpICYmCi0JCQkgICAgKHNrYi0+cHJvdG9jb2w9PUVUSF9QX0lQVjYpKQotCQkJCWdvdG8gaGF2ZWhlYWRlcjsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCWlmICgoc2tiLT5wa3RfdHlwZT09UEFDS0VUX09VVEdPSU5HKSAmJgotCQkJICAgIChza2ItPnByb3RvY29sPT1FVEhfUF9JUCkpCi0JCQkJcmV0dXJuIDA7Ci0JCQllbHNlCi0JCQkJZ290byBoYXZlaGVhZGVyOwotCQl9Ci0JfQotI2VuZGlmCi0JaWYgKCFjYXJkLT5vcHRpb25zLmZha2VfbGwpCi0JCXJldHVybiAwOwotaGF2ZWhlYWRlcjoKLQlldGggPSBldGhfaGRyKHNrYik7Ci0JbWVtY3B5KGhhZGRyLCBldGgtPmhfc291cmNlLCBFVEhfQUxFTik7Ci0JcmV0dXJuIEVUSF9BTEVOOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgcWV0aF9udWxsX29wcyA9IHsKLQkucGFyc2UgPSBxZXRoX2hhcmRfaGVhZGVyX3BhcnNlLAotfTsKLQotc3RhdGljIGludAotcWV0aF9uZXRkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJpbml0ZGV2Iik7Ci0KLQlkZXYtPnR4X3RpbWVvdXQgPSAmcWV0aF90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBRRVRIX1RYX1RJTUVPVVQ7Ci0JZGV2LT5vcGVuID0gcWV0aF9vcGVuOwotCWRldi0+c3RvcCA9IHFldGhfc3RvcDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHFldGhfaGFyZF9zdGFydF94bWl0OwotCWRldi0+ZG9faW9jdGwgPSBxZXRoX2RvX2lvY3RsOwotCWRldi0+Z2V0X3N0YXRzID0gcWV0aF9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gcWV0aF9jaGFuZ2VfbXR1OwotCWRldi0+bmVpZ2hfc2V0dXAgPSBxZXRoX25laWdoX3NldHVwOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcWV0aF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHFldGhfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBxZXRoX3ZsYW5fcnhfa2lsbF92aWQ7Ci0JZGV2LT52bGFuX3J4X2FkZF92aWQgPSBxZXRoX3ZsYW5fcnhfYWRkX3ZpZDsKLSNlbmRpZgotCWlmIChxZXRoX2dldF9uZXRkZXZfZmxhZ3MoY2FyZCkgJiBJRkZfTk9BUlApCi0JCWRldi0+aGVhZGVyX29wcyA9ICZxZXRoX251bGxfb3BzOwotCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCS8qSVB2NiBhZGRyZXNzIGF1dG9jb25maWd1cmF0aW9uIHN0dWZmKi8KLQlpZiAoIShjYXJkLT5pbmZvLnVuaXF1ZV9pZCAmIFVOSVFVRV9JRF9OT1RfQllfQ0FSRCkpCi0JCWNhcmQtPmRldi0+ZGV2X2lkID0gY2FyZC0+aW5mby51bmlxdWVfaWQgJiAweGZmZmY7Ci0jZW5kaWYKLQlpZiAoY2FyZC0+b3B0aW9ucy5mYWtlX2xsICYmCi0JCShxZXRoX2dldF9uZXRkZXZfZmxhZ3MoY2FyZCkgJiBJRkZfTk9BUlApKQotCQkJZGV2LT5oZWFkZXJfb3BzID0gJnFldGhfZmFrZV9vcHM7Ci0KLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHFldGhfbGF5ZXIyX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmZsYWdzIHw9IHFldGhfZ2V0X25ldGRldl9mbGFncyhjYXJkKTsKLQlpZiAoKGNhcmQtPm9wdGlvbnMuZmFrZV9icm9hZGNhc3QpIHx8Ci0JICAgIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlKSkKLQkJZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUOwotCWRldi0+aGFyZF9oZWFkZXJfbGVuID0KLQkJCXFldGhfZ2V0X2hsZW4oY2FyZC0+aW5mby5saW5rX3R5cGUpICsgY2FyZC0+b3B0aW9ucy5hZGRfaGhsZW47Ci0JZGV2LT5hZGRyX2xlbiA9IE9TQV9BRERSX0xFTjsKLQlkZXYtPm10dSA9IGNhcmQtPmluZm8uaW5pdGlhbF9tdHU7Ci0JaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pCi0JCVNFVF9FVEhUT09MX09QUyhkZXYsICZxZXRoX2V0aHRvb2xfb3BzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfaW5pdF9mdW5jX2xldmVsKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaWYgKGNhcmQtPmlwYXRvLmVuYWJsZWQpIHsKLQkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCi0JCQkJY2FyZC0+aW5mby5mdW5jX2xldmVsID0KLQkJCQkJUUVUSF9JRFhfRlVOQ19MRVZFTF9JUURfRU5BX0lQQVQ7Ci0JCWVsc2UKLQkJCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPQotCQkJCQlRRVRIX0lEWF9GVU5DX0xFVkVMX09TQUVfRU5BX0lQQVQ7Ci0JfSBlbHNlIHsKLQkJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCi0JCS8qRklYTUU6d2h5IGRvIHdlIGhhdmUgc2FtZSB2YWx1ZXMgZm9yICBkaXMgYW5kIGVuYSBmb3Igb3NhZT8/PyAqLwotCQkJY2FyZC0+aW5mby5mdW5jX2xldmVsID0KLQkJCQlRRVRIX0lEWF9GVU5DX0xFVkVMX0lRRF9ESVNfSVBBVDsKLQkJZWxzZQotCQkJY2FyZC0+aW5mby5mdW5jX2xldmVsID0KLQkJCQlRRVRIX0lEWF9GVU5DX0xFVkVMX09TQUVfRElTX0lQQVQ7Ci0JfQotfQotCi0vKioKLSAqIGhhcmRzZXR1cCBjYXJkLCBpbml0aWFsaXplIE1QQyBhbmQgUURJTyBzdHVmZgotICovCi1zdGF0aWMgaW50Ci1xZXRoX2hhcmRzZXR1cF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJldHJpZXMgPSAzOwotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJocmRzZXR1cCIpOwotCi0JYXRvbWljX3NldCgmY2FyZC0+Zm9yY2VfYWxsb2Nfc2tiLCAwKTsKLXJldHJ5OgotCWlmIChyZXRyaWVzIDwgMyl7Ci0JCVBSSU5UX1dBUk4oIlJldHJ5aW5nIHRvIGRvIElEWCBhY3RpdmF0ZXMuXG4iKTsKLQkJY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX0RERVYoY2FyZCkpOwotCQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfV0RFVihjYXJkKSk7Ci0JCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9SREVWKGNhcmQpKTsKLQkJY2N3X2RldmljZV9zZXRfb25saW5lKENBUkRfUkRFVihjYXJkKSk7Ci0JCWNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX1dERVYoY2FyZCkpOwotCQljY3dfZGV2aWNlX3NldF9vbmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKLQl9Ci0JcmMgPSBxZXRoX3FkaW9fY2xlYXJfY2FyZChjYXJkLGNhcmQtPmluZm8udHlwZSE9UUVUSF9DQVJEX1RZUEVfSVFEKTsKLQlpZiAocmMgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJicmVhazEiKTsKLQkJcmV0dXJuIHJjOwotCX0gZWxzZSBpZiAocmMpIHsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIxZXJyJWQiLCByYyk7Ci0JCWlmICgtLXJldHJpZXMgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWVsc2UKLQkJCWdvdG8gcmV0cnk7Ci0JfQotCWlmICgocmMgPSBxZXRoX2dldF91bml0YWRkcihjYXJkKSkpewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjJlcnIlZCIsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlxZXRoX2luaXRfdG9rZW5zKGNhcmQpOwotCXFldGhfaW5pdF9mdW5jX2xldmVsKGNhcmQpOwotCXJjID0gcWV0aF9pZHhfYWN0aXZhdGVfY2hhbm5lbCgmY2FyZC0+cmVhZCwgcWV0aF9pZHhfcmVhZF9jYik7Ci0JaWYgKHJjID09IC1FUkVTVEFSVFNZUykgewotCQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiYnJlYWsyIik7Ci0JCXJldHVybiByYzsKLQl9IGVsc2UgaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiM2VyciVkIiwgcmMpOwotCQlpZiAoLS1yZXRyaWVzIDwgMCkKLQkJCWdvdG8gb3V0OwotCQllbHNlCi0JCQlnb3RvIHJldHJ5OwotCX0KLQlyYyA9IHFldGhfaWR4X2FjdGl2YXRlX2NoYW5uZWwoJmNhcmQtPndyaXRlLCBxZXRoX2lkeF93cml0ZV9jYik7Ci0JaWYgKHJjID09IC1FUkVTVEFSVFNZUykgewotCQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiYnJlYWszIik7Ci0JCXJldHVybiByYzsKLQl9IGVsc2UgaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNGVyciVkIiwgcmMpOwotCQlpZiAoLS1yZXRyaWVzIDwgMCkKLQkJCWdvdG8gb3V0OwotCQllbHNlCi0JCQlnb3RvIHJldHJ5OwotCX0KLQlpZiAoKHJjID0gcWV0aF9tcGNfaW5pdGlhbGl6ZShjYXJkKSkpewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjVlcnIlZCIsIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQotCS8qbmV0d29yayBkZXZpY2Ugd2lsbCBiZSByZWNvdmVyZWQqLwotCWlmIChjYXJkLT5kZXYpIHsKLQkJY2FyZC0+ZGV2LT5oZWFkZXJfb3BzID0gY2FyZC0+b3JpZ19oZWFkZXJfb3BzOwotCQlpZiAoY2FyZC0+b3B0aW9ucy5mYWtlX2xsICYmCi0JCSAgICAocWV0aF9nZXRfbmV0ZGV2X2ZsYWdzKGNhcmQpICYgSUZGX05PQVJQKSkKLQkJCWNhcmQtPmRldi0+aGVhZGVyX29wcyA9ICZxZXRoX2Zha2Vfb3BzOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogYXQgZmlyc3Qgc2V0X29ubGluZSBhbGxvY2F0ZSBuZXRkZXYgKi8KLQljYXJkLT5kZXYgPSBxZXRoX2dldF9uZXRkZXZpY2UoY2FyZC0+aW5mby50eXBlLAotCQkJCSAgICAgICBjYXJkLT5pbmZvLmxpbmtfdHlwZSk7Ci0JaWYgKCFjYXJkLT5kZXYpewotCQlxZXRoX3FkaW9fY2xlYXJfY2FyZChjYXJkLCBjYXJkLT5pbmZvLnR5cGUgIT0KLQkJCQkgICAgIFFFVEhfQ0FSRF9UWVBFX0lRRCk7Ci0JCXJjID0gLUVOT0RFVjsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI2ZXJyJWQiLCByYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQljYXJkLT5kZXYtPnByaXYgPSBjYXJkOwotCWNhcmQtPm9yaWdfaGVhZGVyX29wcyA9IGNhcmQtPmRldi0+aGVhZGVyX29wczsKLQljYXJkLT5kZXYtPnR5cGUgPSBxZXRoX2dldF9hcnBoZHJfdHlwZShjYXJkLT5pbmZvLnR5cGUsCi0JCQkJCSAgICAgICBjYXJkLT5pbmZvLmxpbmtfdHlwZSk7Ci0JY2FyZC0+ZGV2LT5pbml0ID0gcWV0aF9uZXRkZXZfaW5pdDsKLQlyZXR1cm4gMDsKLW91dDoKLQlQUklOVF9FUlIoIkluaXRpYWxpemF0aW9uIGluIGhhcmRzZXR1cCBmYWlsZWQhIHJjPSVkXG4iLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2RlZmF1bHRfc2V0YXNzcGFybXNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImRlZmFkcGNiIik7Ci0KLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSA9PSAwKXsKLQkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlOwotCQlpZiAoY21kLT5oZHIucHJvdF92ZXJzaW9uID09IFFFVEhfUFJPVF9JUFY0KQotCQkJY2FyZC0+b3B0aW9ucy5pcGE0LmVuYWJsZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfZW5hYmxlZDsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JCWlmIChjbWQtPmhkci5wcm90X3ZlcnNpb24gPT0gUUVUSF9QUk9UX0lQVjYpCi0JCQljYXJkLT5vcHRpb25zLmlwYTYuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOwotI2VuZGlmCi0JfQotCWlmIChjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmFzc2lzdF9ubyA9PSBJUEFfSU5CT1VORF9DSEVDS1NVTSAmJgotCSAgICBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9PSBJUEFfQ01EX0FTU19TVEFSVCkgewotCQljYXJkLT5pbmZvLmNzdW1fbWFzayA9IGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLmZsYWdzXzMyYml0OwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMywgImNzdW06JWQiLCBjYXJkLT5pbmZvLmNzdW1fbWFzayk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2RlZmF1bHRfc2V0YWRhcHRlcnBhcm1zX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImRlZmFkcGNiIik7Ci0KLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSA9PSAwKQotCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnJldHVybl9jb2RlOwotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludAotcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywicXV5YWRwY2IiKTsKLQotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5xdWVyeV9jbWRzX3N1cHAubGFuX3R5cGUgJiAweDdmKQotCQljYXJkLT5pbmZvLmxpbmtfdHlwZSA9Ci0JCSAgICAgIGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5xdWVyeV9jbWRzX3N1cHAubGFuX3R5cGU7Ci0JY2FyZC0+b3B0aW9ucy5hZHAuc3VwcG9ydGVkX2Z1bmNzID0KLQkJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnF1ZXJ5X2NtZHNfc3VwcC5zdXBwb3J0ZWRfY21kczsKLQlyZXR1cm4gcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihjYXJkLCByZXBseSwgKHVuc2lnbmVkIGxvbmcpY21kKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJxdWVyeWFkcCIpOwotCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfQ09NTUFORFNfU1VQUE9SVEVELAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXNfY2IsIE5VTEwpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zZXRhZHBwYXJtc19jaGFuZ2VfbWFjYWRkcl9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJCSAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJjaGdtYWNjYiIpOwotCi0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8Ci0JICAgICEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUFEKSkgewotCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwKLQkJICAgICAgICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkciwKLQkJICAgICAgIE9TQV9BRERSX0xFTik7Ci0JCWNhcmQtPmluZm8ubWFjX2JpdHMgfD0gUUVUSF9MQVlFUjJfTUFDX1JFQUQ7Ci0JfQotCXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKSBjbWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3NldGFkcHBhcm1zX2NoYW5nZV9tYWNhZGRyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImNoZ21hYyIpOwotCi0JaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCxJUEFfU0VUQURQX0FMVEVSX01BQ19BRERSRVNTLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmNtZCA9IENIQU5HRV9BRERSX1JFQURfTUFDOwotCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5jaGFuZ2VfYWRkci5hZGRyX3NpemUgPSBPU0FfQUREUl9MRU47Ci0JbWVtY3B5KCZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkciwKLQkgICAgICAgY2FyZC0+ZGV2LT5kZXZfYWRkciwgT1NBX0FERFJfTEVOKTsKLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9zZXRhZHBwYXJtc19jaGFuZ2VfbWFjYWRkcl9jYiwKLQkJCSAgICAgICBOVUxMKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2VuZF9zZXRhZHBfbW9kZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3UzMiBjb21tYW5kLCBfX3UzMiBtb2RlKQotewotCWludCByYzsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJhZHBtb2RlIik7Ci0KLQlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBjb21tYW5kLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLm1vZGUgPSBtb2RlOwotCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX2RlZmF1bHRfc2V0YWRhcHRlcnBhcm1zX2NiLAotCQkJICAgICAgIE5VTEwpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zZXRhZGFwdGVyX2hzdHIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImFkcGhzdHIiKTsKLQotCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCxJUEFfU0VUQURQX1NFVF9CUk9BRENBU1RfTU9ERSkpIHsKLQkJcmMgPSBxZXRoX3NlbmRfc2V0YWRwX21vZGUoY2FyZCwgSVBBX1NFVEFEUF9TRVRfQlJPQURDQVNUX01PREUsCi0JCQkJCSAgIGNhcmQtPm9wdGlvbnMuYnJvYWRjYXN0X21vZGUpOwotCQlpZiAocmMpCi0JCQlQUklOVF9XQVJOKCJjb3VsZG4ndCBzZXQgYnJvYWRjYXN0IG1vZGUgb24gIgotCQkJCSAgICJkZXZpY2UgJXM6IHgleFxuIiwKLQkJCQkgICBDQVJEX0JVU19JRChjYXJkKSwgcmMpOwotCQlyYyA9IHFldGhfc2VuZF9zZXRhZHBfbW9kZShjYXJkLCBJUEFfU0VUQURQX0FMVEVSX01BQ19BRERSRVNTLAotCQkJCQkgICBjYXJkLT5vcHRpb25zLm1hY2FkZHJfbW9kZSk7Ci0JCWlmIChyYykKLQkJCVBSSU5UX1dBUk4oImNvdWxkbid0IHNldCBtYWNhZGRyIG1vZGUgb24gIgotCQkJCSAgICJkZXZpY2UgJXM6IHgleFxuIiwgQ0FSRF9CVVNfSUQoY2FyZCksIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlpZiAoY2FyZC0+b3B0aW9ucy5icm9hZGNhc3RfbW9kZSA9PSBRRVRIX1RSX0JST0FEQ0FTVF9MT0NBTCkKLQkJUFJJTlRfV0FSTigic2V0IGFkYXB0ZXIgcGFyYW1ldGVycyBub3QgYXZhaWxhYmxlICIKLQkJCSAgICJ0byBzZXQgYnJvYWRjYXN0IG1vZGUsIHVzaW5nIEFMTFJJTkdTICIKLQkJCSAgICJvbiBkZXZpY2UgJXM6XG4iLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JaWYgKGNhcmQtPm9wdGlvbnMubWFjYWRkcl9tb2RlID09IFFFVEhfVFJfTUFDQUREUl9DQU5PTklDQUwpCi0JCVBSSU5UX1dBUk4oInNldCBhZGFwdGVyIHBhcmFtZXRlcnMgbm90IGF2YWlsYWJsZSAiCi0JCQkgICAidG8gc2V0IG1hY2FkZHIgbW9kZSwgdXNpbmcgTk9OQ0FOT05JQ0FMICIKLQkJCSAgICJvbiBkZXZpY2UgJXM6XG4iLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2V0YWRhcHRlcl9wYXJtcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJzZXRhZHBybSIpOwotCi0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURBUFRFUlBBUk1TKSl7Ci0JCVBSSU5UX1dBUk4oInNldCBhZGFwdGVyIHBhcmFtZXRlcnMgbm90IHN1cHBvcnRlZCAiCi0JCQkgICAib24gZGV2aWNlICVzLlxuIiwKLQkJCSAgIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgIiBub3RzdXBwIik7Ci0JCXJldHVybiAwOwotCX0KLQlyYyA9IHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKGNhcmQpOwotCWlmIChyYykgewotCQlQUklOVF9XQVJOKCJjb3VsZG4ndCBzZXQgYWRhcHRlciBwYXJhbWV0ZXJzIG9uIGRldmljZSAlczogIgotCQkJICAgIngleFxuIiwgQ0FSRF9CVVNfSUQoY2FyZCksIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlpZiAocWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUykpIHsKLQkJcmMgPSBxZXRoX3NldGFkcHBhcm1zX2NoYW5nZV9tYWNhZGRyKGNhcmQpOwotCQlpZiAocmMpCi0JCQlQUklOVF9XQVJOKCJjb3VsZG4ndCBnZXQgTUFDIGFkZHJlc3Mgb24gIgotCQkJCSAgICJkZXZpY2UgJXM6IHgleFxuIiwKLQkJCQkgICBDQVJEX0JVU19JRChjYXJkKSwgcmMpOwotCX0KLQotCWlmICgoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfSFNUUikgfHwKLQkgICAgKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0xBTkVfVFIpKQotCQlyYyA9IHFldGhfc2V0YWRhcHRlcl9oc3RyKGNhcmQpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX2xheWVyMl9pbml0aWFsaXplKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0gICAgICAgIGludCByYyA9IDA7Ci0KLQotICAgICAgICBRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiZG9MMmluaXQiKTsKLSAgICAgICAgUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICJkb0wyJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0KLQlyYyA9IHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKGNhcmQpOwotCWlmIChyYykgewotCQlQUklOVF9XQVJOKCJjb3VsZCBub3QgcXVlcnkgYWRhcHRlciBwYXJhbWV0ZXJzIG9uIGRldmljZSAlczogIgotCQkJICAgIngleFxuIiwgQ0FSRF9CVVNfSUQoY2FyZCksIHJjKTsKLQl9Ci0KLQlyYyA9IHFldGhfc2V0YWRwcGFybXNfY2hhbmdlX21hY2FkZHIoY2FyZCk7Ci0JaWYgKHJjKSB7Ci0JCVBSSU5UX1dBUk4oImNvdWxkbid0IGdldCBNQUMgYWRkcmVzcyBvbiAiCi0JCQkgICAiZGV2aWNlICVzOiB4JXhcbiIsCi0JCQkgICBDQVJEX0JVU19JRChjYXJkKSwgcmMpOwotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwiMWVyciVkIixyYyk7Ci0JCXJldHVybiByYzsKLSAgICAgICAgfQotCVFFVEhfREJGX0hFWChzZXR1cCwyLCBjYXJkLT5kZXYtPmRldl9hZGRyLCBPU0FfQUREUl9MRU4pOwotCi0JcmMgPSBxZXRoX2xheWVyMl9zZW5kX3NldG1hYyhjYXJkLCAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXSk7Ci0gICAgICAgIGlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsIjJlcnIlZCIscmMpOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci1xZXRoX3NlbmRfc3RhcnRzdG9wbGFuKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQsCi0JCSAgICAgICBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90KQotewotCWludCByYzsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0KLQlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsaXBhY21kLHByb3QpOwotCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBOVUxMLCBOVUxMKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zZW5kX3N0YXJ0bGFuKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCi17Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICJzdHJ0bGFuJWkiLCBwcm90KTsKLQotCXJjID0gcWV0aF9zZW5kX3N0YXJ0c3RvcGxhbihjYXJkLCBJUEFfQ01EX1NUQVJUTEFOLCBwcm90KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2VuZF9zdG9wbGFuKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjID0gMDsKLQotCS8qCi0JICogVE9ETzogYWNjb3JkaW5nIHRvIHRoZSBJUEEgZm9ybWF0IGRvY3VtZW50IHBhZ2UgMTQsCi0JICogVENQL0lQICh3ZSEpIG5ldmVyIGlzc3VlIGEgU1RPUExBTgotCSAqIGlzIHRoaXMgcmlnaHQgPyE/Ci0JICovCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgInN0b3BsYW4iKTsKLQotCXJjID0gcWV0aF9zZW5kX3N0YXJ0c3RvcGxhbihjYXJkLCBJUEFfQ01EX1NUT1BMQU4sIFFFVEhfUFJPVF9JUFY0KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfcXVlcnlfaXBhc3Npc3RzX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAicWlwYXNzY2IiKTsKLQotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnByb3RfdmVyc2lvbiA9PSBRRVRIX1BST1RfSVBWNCkgewotCQljYXJkLT5vcHRpb25zLmlwYTQuc3VwcG9ydGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX3N1cHBvcnRlZDsKLQkJY2FyZC0+b3B0aW9ucy5pcGE0LmVuYWJsZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfZW5hYmxlZDsKLQkJLyogRGlzYWJsZSBJUFY2IHN1cHBvcnQgaGFyZCBjb2RlZCBmb3IgSGlwZXJzb2NrZXRzICovCi0JCWlmKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCi0JCQljYXJkLT5vcHRpb25zLmlwYTQuc3VwcG9ydGVkX2Z1bmNzICY9IH5JUEFfSVBWNjsKLQl9IGVsc2UgewotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQkJY2FyZC0+b3B0aW9ucy5pcGE2LnN1cHBvcnRlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9zdXBwb3J0ZWQ7Ci0JCWNhcmQtPm9wdGlvbnMuaXBhNi5lbmFibGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX2VuYWJsZWQ7Ci0jZW5kaWYKLQl9Ci0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgInN1cHBlbmJsIik7Ci0JUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIleCIsY21kLT5oZHIuaXBhX3N1cHBvcnRlZCk7Ci0JUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIleCIsY21kLT5oZHIuaXBhX2VuYWJsZWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3F1ZXJ5X2lwYXNzaXN0cyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90KQotewotCWludCByYzsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0KLQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgInFpcGFzc2klaSIsIHByb3QpOwotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAibm9wcm1seTIiKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsSVBBX0NNRF9RSVBBU1NJU1QscHJvdCk7Ci0JcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfaXBhc3Npc3RzX2NiLCBOVUxMKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICoKLXFldGhfZ2V0X3NldGFzc3Bhcm1zX2NtZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfaXBhX2Z1bmNzIGlwYV9mdW5jLAotCQkJIF9fdTE2IGNtZF9jb2RlLCBfX3UxNiBsZW4sCi0JCQkgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCkKLXsKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJnZXRhc3NjbSIpOwotCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCxJUEFfQ01EX1NFVEFTU1BBUk1TLHByb3QpOwotCi0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuYXNzaXN0X25vID0gaXBhX2Z1bmM7Ci0JY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5sZW5ndGggPSA4ICsgbGVuOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuY29tbWFuZF9jb2RlID0gY21kX2NvZGU7Ci0JY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5yZXR1cm5fY29kZSA9IDA7Ci0JY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5zZXFfbm8gPSAwOwotCi0JcmV0dXJuIGlvYjsKLX0KLQotc3RhdGljIGludAotcWV0aF9zZW5kX3NldGFzc3Bhcm1zKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKLQkJICAgICAgX191MTYgbGVuLCBsb25nIGRhdGEsCi0JCSAgICAgIGludCAoKnJlcGx5X2NiKQotCQkgICAgICAoc3RydWN0IHFldGhfY2FyZCAqLHN0cnVjdCBxZXRoX3JlcGx5ICosdW5zaWduZWQgbG9uZyksCi0JCSAgICAgIHZvaWQgKnJlcGx5X3BhcmFtKQotewotCWludCByYzsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNlbmRhc3NwIik7Ci0KLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JaWYgKGxlbiA8PSBzaXplb2YoX191MzIpKQotCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5mbGFnc18zMmJpdCA9IChfX3UzMikgZGF0YTsKLQllbHNlICAgLyogKGxlbiA+IHNpemVvZihfX3UzMikpICovCi0JCW1lbWNweSgmY21kLT5kYXRhLnNldGFzc3Bhcm1zLmRhdGEsICh2b2lkICopIGRhdGEsIGxlbik7Ci0KLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcmVwbHlfY2IsIHJlcGx5X3BhcmFtKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci1zdGF0aWMgaW50Ci1xZXRoX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zX2lwdjYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCQkgIGVudW0gcWV0aF9pcGFfZnVuY3MgaXBhX2Z1bmMsIF9fdTE2IGNtZF9jb2RlKQotCi17Ci0JaW50IHJjOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwic2ltYXNzcDYiKTsKLQlpb2IgPSBxZXRoX2dldF9zZXRhc3NwYXJtc19jbWQoY2FyZCwgaXBhX2Z1bmMsIGNtZF9jb2RlLAotCQkJCSAgICAgICAwLCBRRVRIX1BST1RfSVBWNik7Ci0JcmMgPSBxZXRoX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLCAwLCAwLAotCQkJCSAgIHFldGhfZGVmYXVsdF9zZXRhc3NwYXJtc19jYiwgTlVMTCk7Ci0JcmV0dXJuIHJjOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQKLXFldGhfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCSAgICAgZW51bSBxZXRoX2lwYV9mdW5jcyBpcGFfZnVuYywKLQkJCSAgICAgX191MTYgY21kX2NvZGUsIGxvbmcgZGF0YSkKLXsKLQlpbnQgcmM7Ci0JaW50IGxlbmd0aCA9IDA7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJzaW1hc3NwNCIpOwotCWlmIChkYXRhKQotCQlsZW5ndGggPSBzaXplb2YoX191MzIpOwotCWlvYiA9IHFldGhfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBpcGFfZnVuYywgY21kX2NvZGUsCi0JCQkJICAgICAgIGxlbmd0aCwgUUVUSF9QUk9UX0lQVjQpOwotCXJjID0gcWV0aF9zZW5kX3NldGFzc3Bhcm1zKGNhcmQsIGlvYiwgbGVuZ3RoLCBkYXRhLAotCQkJCSAgIHFldGhfZGVmYXVsdF9zZXRhc3NwYXJtc19jYiwgTlVMTCk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3N0YXJ0X2lwYV9hcnBfcHJvY2Vzc2luZyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywiaXBhYXJwIik7Ci0KLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsSVBBX0FSUF9QUk9DRVNTSU5HKSkgewotCQlQUklOVF9XQVJOKCJBUlAgcHJvY2Vzc2luZyBub3Qgc3VwcG9ydGVkICIKLQkJCSAgICJvbiAlcyFcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmMgPSBxZXRoX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKGNhcmQsSVBBX0FSUF9QUk9DRVNTSU5HLAotCQkJCQkgIElQQV9DTURfQVNTX1NUQVJULCAwKTsKLQlpZiAocmMpIHsKLQkJUFJJTlRfV0FSTigiQ291bGQgbm90IHN0YXJ0IEFSUCBwcm9jZXNzaW5nICIKLQkJCSAgICJhc3Npc3Qgb24gJXM6IDB4JXhcbiIsCi0JCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zdGFydF9pcGFfaXBfZnJhZ21lbnRhdGlvbihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywiaXBhaXBmcmciKTsKLQotCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQX0ZSQUdNRU5UQVRJT04pKSB7Ci0JCVBSSU5UX0lORk8oIkhhcmR3YXJlIElQIGZyYWdtZW50YXRpb24gbm90IHN1cHBvcnRlZCBvbiAlc1xuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gIC1FT1BOT1RTVVBQOwotCX0KLQotCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfSVBfRlJBR01FTlRBVElPTiwKLQkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwgMCk7Ci0JaWYgKHJjKSB7Ci0JCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBzdGFydCBIYXJkd2FyZSBJUCBmcmFnbWVudGF0aW9uICIKLQkJCSAgICJhc3Npc3Qgb24gJXM6IDB4JXhcbiIsCi0JCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7Ci0JfSBlbHNlCi0JCVBSSU5UX0lORk8oIkhhcmR3YXJlIElQIGZyYWdtZW50YXRpb24gZW5hYmxlZCBcbiIpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zdGFydF9pcGFfc291cmNlX21hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywic3RzcmNtYWMiKTsKLQotCWlmICghY2FyZC0+b3B0aW9ucy5mYWtlX2xsKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9TT1VSQ0VfTUFDKSkgewotCQlQUklOVF9JTkZPKCJJbmJvdW5kIHNvdXJjZSBhZGRyZXNzIG5vdCAiCi0JCQkgICAic3VwcG9ydGVkIG9uICVzXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfU09VUkNFX01BQywKLQkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwgMCk7Ci0JaWYgKHJjKQotCQlQUklOVF9XQVJOKCJDb3VsZCBub3Qgc3RhcnQgaW5ib3VuZCBzb3VyY2UgIgotCQkJICAgImFzc2lzdCBvbiAlczogMHgleFxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc3RhcnRfaXBhX3ZsYW4oc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJzdHJ0dmxhbiIpOwotCi0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0ZVTExfVkxBTikpIHsKLQkJUFJJTlRfV0FSTigiVkxBTiBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfVkxBTl9QUklPLAotCQkJCQkgIElQQV9DTURfQVNTX1NUQVJULDApOwotCWlmIChyYykgewotCQlQUklOVF9XQVJOKCJDb3VsZCBub3Qgc3RhcnQgdmxhbiAiCi0JCQkgICAiYXNzaXN0IG9uICVzOiAweCV4XG4iLAotCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOwotCX0gZWxzZSB7Ci0JCVBSSU5UX0lORk8oIlZMQU4gZW5hYmxlZCBcbiIpOwotCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9Ci0JCQlORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwKLQkJCU5FVElGX0ZfSFdfVkxBTl9UWCB8Ci0JCQlORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JfQotI2VuZGlmIC8qIFFFVEhfVkxBTiAqLwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zdGFydF9pcGFfbXVsdGljYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJzdG1jYXN0Iik7Ci0KLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9NVUxUSUNBU1RJTkcpKSB7Ci0JCVBSSU5UX1dBUk4oIk11bHRpY2FzdCBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLAotCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlyYyA9IHFldGhfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX01VTFRJQ0FTVElORywKLQkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwwKTsKLQlpZiAocmMpIHsKLQkJUFJJTlRfV0FSTigiQ291bGQgbm90IHN0YXJ0IG11bHRpY2FzdCAiCi0JCQkgICAiYXNzaXN0IG9uICVzOiByYz0laVxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQl9IGVsc2UgewotCQlQUklOVF9JTkZPKCJNdWx0aWNhc3QgZW5hYmxlZFxuIik7Ci0JCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotc3RhdGljIGludAotcWV0aF9zb2Z0c2V0dXBfaXB2NihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywic29mdGlwdjYiKTsKLQotCXJjID0gcWV0aF9zZW5kX3N0YXJ0bGFuKGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKLQlpZiAocmMpIHsKLQkJUFJJTlRfRVJSKCJJUHY2IHN0YXJ0bGFuIGZhaWxlZCBvbiAlc1xuIiwKLQkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmMgPSBxZXRoX3F1ZXJ5X2lwYXNzaXN0cyhjYXJkLFFFVEhfUFJPVF9JUFY2KTsKLQlpZiAocmMpIHsKLQkJUFJJTlRfRVJSKCJJUHY2IHF1ZXJ5IGlwYXNzaXN0IGZhaWxlZCBvbiAlc1xuIiwKLQkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmMgPSBxZXRoX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zKGNhcmQsIElQQV9JUFY2LAotCQkJCQkgIElQQV9DTURfQVNTX1NUQVJULCAzKTsKLQlpZiAocmMpIHsKLQkJUFJJTlRfV0FSTigiSVB2NiBzdGFydCBhc3Npc3QgKHZlcnNpb24gNCkgZmFpbGVkICIKLQkJCSAgICJvbiAlczogMHgleFxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyYyA9IHFldGhfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXNfaXB2NihjYXJkLCBJUEFfSVBWNiwKLQkJCQkJICAgICAgIElQQV9DTURfQVNTX1NUQVJUKTsKLQlpZiAocmMpIHsKLQkJUFJJTlRfV0FSTigiSVBWNiBzdGFydCBhc3Npc3QgKHZlcnNpb24gNikgZmFpbGVkICAiCi0JCQkgICAib24gJXM6IDB4JXhcbiIsCi0JCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmMgPSBxZXRoX3NlbmRfc2ltcGxlX3NldGFzc3Bhcm1zX2lwdjYoY2FyZCwgSVBBX1BBU1NUSFJVLAotCQkJCQkgICAgICAgSVBBX0NNRF9BU1NfU1RBUlQpOwotCWlmIChyYykgewotCQlQUklOVF9XQVJOKCJDb3VsZCBub3QgZW5hYmxlIHBhc3N0aHJvdWdoICIKLQkJCSAgICJvbiAlczogMHgleFxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlQUklOVF9JTkZPKCJJUFY2IGVuYWJsZWQgXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBpbnQKLXFldGhfc3RhcnRfaXBhX2lwdjYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsInN0cnRpcHY2Iik7Ci0KLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9JUFY2KSkgewotCQlQUklOVF9XQVJOKCJJUHY2IG5vdCBzdXBwb3J0ZWQgb24gJXNcbiIsCi0JCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJjID0gcWV0aF9zb2Z0c2V0dXBfaXB2NihjYXJkKTsKLSNlbmRpZgotCXJldHVybiByYyA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc3RhcnRfaXBhX2Jyb2FkY2FzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywic3RicmRjc3QiKTsKLQljYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID0gMDsKLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9GSUxURVJJTkcpKSB7Ci0JCVBSSU5UX1dBUk4oIkJyb2FkY2FzdCBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLAotCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0JCXJjID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQlyYyA9IHFldGhfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX0ZJTFRFUklORywKLQkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwgMCk7Ci0JaWYgKHJjKSB7Ci0JCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBlbmFibGUgYnJvYWRjYXN0aW5nIGZpbHRlcmluZyAiCi0JCQkgICAib24gJXM6IDB4JXhcbiIsCi0JCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfRklMVEVSSU5HLAotCQkJCQkgIElQQV9DTURfQVNTX0NPTkZJR1VSRSwgMSk7Ci0JaWYgKHJjKSB7Ci0JCVBSSU5UX1dBUk4oIkNvdWxkIG5vdCBzZXQgdXAgYnJvYWRjYXN0IGZpbHRlcmluZyBvbiAlczogMHgleFxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQotCWNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPSBRRVRIX0JST0FEQ0FTVF9XSVRIX0VDSE87Ci0JUFJJTlRfSU5GTygiQnJvYWRjYXN0IGVuYWJsZWQgXG4iKTsKLQlyYyA9IHFldGhfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwgSVBBX0ZJTFRFUklORywKLQkJCQkJICBJUEFfQ01EX0FTU19FTkFCTEUsIDEpOwotCWlmIChyYykgewotCQlQUklOVF9XQVJOKCJDb3VsZCBub3Qgc2V0IHVwIGJyb2FkY2FzdCBlY2hvIGZpbHRlcmluZyBvbiAiCi0JCQkgICAiJXM6IDB4JXhcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQotCWNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE87Ci1vdXQ6Ci0JaWYgKGNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUpCi0JCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVDsKLQllbHNlCi0JCWNhcmQtPmRldi0+ZmxhZ3MgJj0gfklGRl9CUk9BRENBU1Q7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3NlbmRfY2hlY2tzdW1fY29tbWFuZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQotCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfSU5CT1VORF9DSEVDS1NVTSwKLQkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwgMCk7Ci0JaWYgKHJjKSB7Ci0JCVBSSU5UX1dBUk4oIlN0YXJ0aW5nIEluYm91bmQgSFcgQ2hlY2tzdW1taW5nIGZhaWxlZCBvbiAlczogIgotCQkJICAgIjB4JXgsXG5jb250aW51aW5nIHVzaW5nIEluYm91bmQgU1cgQ2hlY2tzdW1taW5nXG4iLAotCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfSU5CT1VORF9DSEVDS1NVTSwKLQkJCQkJICBJUEFfQ01EX0FTU19FTkFCTEUsCi0JCQkJCSAgY2FyZC0+aW5mby5jc3VtX21hc2spOwotCWlmIChyYykgewotCQlQUklOVF9XQVJOKCJFbmFibGluZyBJbmJvdW5kIEhXIENoZWNrc3VtbWluZyBmYWlsZWQgb24gJXM6ICIKLQkJCSAgICIweCV4LFxuY29udGludWluZyB1c2luZyBJbmJvdW5kIFNXIENoZWNrc3VtbWluZ1xuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcWV0aF9zdGFydF9pcGFfY2hlY2tzdW0oc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJzdHJ0Y3N1bSIpOwotCi0JaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBOT19DSEVDS1NVTU1JTkcpIHsKLQkJUFJJTlRfV0FSTigiVXNpbmcgbm8gY2hlY2tzdW1taW5nIG9uICVzLlxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBTV19DSEVDS1NVTU1JTkcpIHsKLQkJUFJJTlRfV0FSTigiVXNpbmcgU1cgY2hlY2tzdW1taW5nIG9uICVzLlxuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSU5CT1VORF9DSEVDS1NVTSkpIHsKLQkJUFJJTlRfV0FSTigiSW5ib3VuZCBIVyBDaGVja3N1bW1pbmcgbm90ICIKLQkJCSAgICJzdXBwb3J0ZWQgb24gJXMsXG5jb250aW51aW5nICIKLQkJCSAgICJ1c2luZyBJbmJvdW5kIFNXIENoZWNrc3VtbWluZ1xuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQljYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPSBTV19DSEVDS1NVTU1JTkc7Ci0JCXJldHVybiAwOwotCX0KLQlyYyA9IHFldGhfc2VuZF9jaGVja3N1bV9jb21tYW5kKGNhcmQpOwotCWlmICghcmMpIHsKLQkJUFJJTlRfSU5GTygiSFcgQ2hlY2tzdW1taW5nIChpbmJvdW5kKSBlbmFibGVkIFxuIik7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zdGFydF9pcGFfdHNvKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJzdHRzbyIpOwotCi0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfVFNPKSkgewotCQlQUklOVF9XQVJOKCJPdXRib3VuZCBUU08gbm90IHN1cHBvcnRlZCBvbiAlc1xuIiwKLQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyYyA9IC1FT1BOT1RTVVBQOwotCX0gZWxzZSB7Ci0JCXJjID0gcWV0aF9zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLCBJUEFfT1VUQk9VTkRfVFNPLAotCQkJCQkJICBJUEFfQ01EX0FTU19TVEFSVCwwKTsKLQkJaWYgKHJjKQotCQkJUFJJTlRfV0FSTigiQ291bGQgbm90IHN0YXJ0IG91dGJvdW5kIFRTTyAiCi0JCQkJICAgImFzc2lzdCBvbiAlczogcmM9JWlcbiIsCi0JCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOwotCQllbHNlCi0JCQlQUklOVF9JTkZPKCJPdXRib3VuZCBUU08gZW5hYmxlZFxuIik7Ci0JfQotCWlmIChyYyAmJiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pKXsKLQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJCU5FVElGX0ZfSFdfQ1NVTSk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotcWV0aF9zdGFydF9pcGFzc2lzdHMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsInN0cnRpcGFzIik7Ci0JcWV0aF9zdGFydF9pcGFfYXJwX3Byb2Nlc3NpbmcoY2FyZCk7CS8qIGdvIG9uKi8KLQlxZXRoX3N0YXJ0X2lwYV9pcF9mcmFnbWVudGF0aW9uKGNhcmQpOyAJLyogZ28gb24qLwotCXFldGhfc3RhcnRfaXBhX3NvdXJjZV9tYWMoY2FyZCk7CS8qIGdvIG9uKi8KLQlxZXRoX3N0YXJ0X2lwYV92bGFuKGNhcmQpOwkJLyogZ28gb24qLwotCXFldGhfc3RhcnRfaXBhX211bHRpY2FzdChjYXJkKTsJCS8qIGdvIG9uKi8KLQlxZXRoX3N0YXJ0X2lwYV9pcHY2KGNhcmQpOwkJLyogZ28gb24qLwotCXFldGhfc3RhcnRfaXBhX2Jyb2FkY2FzdChjYXJkKTsJCS8qIGdvIG9uKi8KLQlxZXRoX3N0YXJ0X2lwYV9jaGVja3N1bShjYXJkKTsJCS8qIGdvIG9uKi8KLQlxZXRoX3N0YXJ0X2lwYV90c28oY2FyZCk7CQkvKiBnbyBvbiovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc2VuZF9zZXRyb3V0aW5nKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9yb3V0aW5nX3R5cGVzIHR5cGUsCi0JCSAgICAgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwic2V0cm91dGciKTsKLQlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUUlRHLCBwcm90KTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JY21kLT5kYXRhLnNldHJ0Zy50eXBlID0gKHR5cGUpOwotCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBOVUxMLCBOVUxMKTsKLQotCXJldHVybiByYzsKLQotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9jb3JyZWN0X3JvdXRpbmdfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcm91dGluZ190eXBlcyAqdHlwZSwKLQkJCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCi17Ci0JaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKLQkJc3dpdGNoICgqdHlwZSkgewotCQljYXNlIE5PX1JPVVRFUjoKLQkJY2FzZSBQUklNQVJZX0NPTk5FQ1RPUjoKLQkJY2FzZSBTRUNPTkRBUllfQ09OTkVDVE9SOgotCQljYXNlIE1VTFRJQ0FTVF9ST1VURVI6Ci0JCQlyZXR1cm47Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIG91dF9pbnZhbDsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoKnR5cGUpIHsKLQkJY2FzZSBOT19ST1VURVI6Ci0JCWNhc2UgUFJJTUFSWV9ST1VURVI6Ci0JCWNhc2UgU0VDT05EQVJZX1JPVVRFUjoKLQkJCXJldHVybjsKLQkJY2FzZSBNVUxUSUNBU1RfUk9VVEVSOgotCQkJaWYgKHFldGhfaXNfaXBhZnVuY19zdXBwb3J0ZWQoY2FyZCwgcHJvdCwKLQkJCQkJCSAgICAgIElQQV9PU0FfTUNfUk9VVEVSKSkKLQkJCQlyZXR1cm47Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIG91dF9pbnZhbDsKLQkJfQotCX0KLW91dF9pbnZhbDoKLQlQUklOVF9XQVJOKCJSb3V0aW5nIHR5cGUgJyVzJyBub3Qgc3VwcG9ydGVkIGZvciBpbnRlcmZhY2UgJXMuXG4iCi0JCSAgICJSb3V0ZXIgc3RhdHVzIHNldCB0byAnbm8gcm91dGVyJy5cbiIsCi0JCSAgICgoKnR5cGUgPT0gUFJJTUFSWV9ST1VURVIpPyAicHJpbWFyeSByb3V0ZXIiIDoKLQkJICAgICgqdHlwZSA9PSBTRUNPTkRBUllfUk9VVEVSKT8gInNlY29uZGFyeSByb3V0ZXIiIDoKLQkJICAgICgqdHlwZSA9PSBQUklNQVJZX0NPTk5FQ1RPUik/ICJwcmltYXJ5IGNvbm5lY3RvciIgOgotCQkgICAgKCp0eXBlID09IFNFQ09OREFSWV9DT05ORUNUT1IpPyAic2Vjb25kYXJ5IGNvbm5lY3RvciIgOgotCQkgICAgKCp0eXBlID09IE1VTFRJQ0FTVF9ST1VURVIpPyAibXVsdGljYXN0IHJvdXRlciIgOgotCQkgICAgInVua25vd24iKSwKLQkJICAgY2FyZC0+ZGV2LT5uYW1lKTsKLQkqdHlwZSA9IE5PX1JPVVRFUjsKLX0KLQotaW50Ci1xZXRoX3NldHJvdXRpbmdfdjQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsInNldHJ0ZzQiKTsKLQotCXFldGhfY29ycmVjdF9yb3V0aW5nX3R5cGUoY2FyZCwgJmNhcmQtPm9wdGlvbnMucm91dGU0LnR5cGUsCi0JCQkJICBRRVRIX1BST1RfSVBWNCk7Ci0KLQlyYyA9IHFldGhfc2VuZF9zZXRyb3V0aW5nKGNhcmQsIGNhcmQtPm9wdGlvbnMucm91dGU0LnR5cGUsCi0JCQkJICBRRVRIX1BST1RfSVBWNCk7Ci0JaWYgKHJjKSB7Ci0gCQljYXJkLT5vcHRpb25zLnJvdXRlNC50eXBlID0gTk9fUk9VVEVSOwotCQlQUklOVF9XQVJOKCJFcnJvciAoMHglMDR4KSB3aGlsZSBzZXR0aW5nIHJvdXRpbmcgdHlwZSBvbiAlcy4gIgotCQkJICAgIlR5cGUgc2V0IHRvICdubyByb3V0ZXInLlxuIiwKLQkJCSAgIHJjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQKLXFldGhfc2V0cm91dGluZ192NihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYyA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDMsInNldHJ0ZzYiKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0KLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9JUFY2KSkKLQkJcmV0dXJuIDA7Ci0JcWV0aF9jb3JyZWN0X3JvdXRpbmdfdHlwZShjYXJkLCAmY2FyZC0+b3B0aW9ucy5yb3V0ZTYudHlwZSwKLQkJCQkgIFFFVEhfUFJPVF9JUFY2KTsKLQotCXJjID0gcWV0aF9zZW5kX3NldHJvdXRpbmcoY2FyZCwgY2FyZC0+b3B0aW9ucy5yb3V0ZTYudHlwZSwKLQkJCQkgIFFFVEhfUFJPVF9JUFY2KTsKLQlpZiAocmMpIHsKLQkgCWNhcmQtPm9wdGlvbnMucm91dGU2LnR5cGUgPSBOT19ST1VURVI7Ci0JCVBSSU5UX1dBUk4oIkVycm9yICgweCUwNHgpIHdoaWxlIHNldHRpbmcgcm91dGluZyB0eXBlIG9uICVzLiAiCi0JCQkgICAiVHlwZSBzZXQgdG8gJ25vIHJvdXRlcicuXG4iLAotCQkJICAgcmMsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCX0KLSNlbmRpZgotCXJldHVybiByYzsKLX0KLQotaW50Ci1xZXRoX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHR5cGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmIChjYXJkLT5kZXYgPT0gTlVMTCkgewotCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCi0JCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKLQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwotCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfRUREUDoKLQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAotCQkJCQlORVRJRl9GX0hXX0NTVU07Ci0JCWJyZWFrOwotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX1RTTzoKLQkJaWYgKHFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9PVVRCT1VORF9UU08pKXsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJCU5FVElGX0ZfSFdfQ1NVTTsKLQkJfSBlbHNlIHsKLQkJCVBSSU5UX1dBUk4oIlRTTyBub3Qgc3VwcG9ydGVkIG9uICVzLiAiCi0JCQkJICAgImxhcmdlX3NlbmQgc2V0IHRvICdubycuXG4iLAotCQkJCSAgIGNhcmQtPmRldi0+bmFtZSk7Ci0JCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJCU5FVElGX0ZfSFdfQ1NVTSk7Ci0JCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JCQlyYyA9IC1FT1BOT1RTVVBQOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6IC8qIGluY2x1ZGVzIFFFVEhfTEFSR0VfU0VORF9OTyAqLwotCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJTkVUSUZfRl9IV19DU1VNKTsKLQkJYnJlYWs7Ci0JfQotCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQotCQluZXRpZl93YWtlX3F1ZXVlKGNhcmQtPmRldik7Ci0JcmV0dXJuIHJjOwotfQotCi0vKgotICogc29mdHNldHVwIGNhcmQ6IGluaXQgSVBBIHN0dWZmCi0gKi8KLXN0YXRpYyBpbnQKLXFldGhfc29mdHNldHVwX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmM7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAic29mdHNldHAiKTsKLQotCWlmICgocmMgPSBxZXRoX3NlbmRfc3RhcnRsYW4oY2FyZCwgUUVUSF9QUk9UX0lQVjQpKSl7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiMWVyciVkIiwgcmMpOwotCQlpZiAocmMgPT0gMHhlMDgwKXsKLQkJCVBSSU5UX1dBUk4oIkxBTiBvbiBjYXJkICVzIGlmIG9mZmxpbmUhICIKLQkJCQkgICAiV2FpdGluZyBmb3IgU1RBUlRMQU4gZnJvbSBjYXJkLlxuIiwKLQkJCQkgICBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQljYXJkLT5sYW5fb25saW5lID0gMDsKLQkJfQotCQlyZXR1cm4gcmM7Ci0JfSBlbHNlCi0JCWNhcmQtPmxhbl9vbmxpbmUgPSAxOwotCWlmIChjYXJkLT5pbmZvLnR5cGU9PVFFVEhfQ0FSRF9UWVBFX09TTikKLQkJZ290byBvdXQ7Ci0JcWV0aF9zZXRfbGFyZ2Vfc2VuZChjYXJkLCBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpOwotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9Ci0JCQlORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwKLQkJCU5FVElGX0ZfSFdfVkxBTl9UWCB8Ci0JCQlORVRJRl9GX0hXX1ZMQU5fUlg7Ci0JCWNhcmQtPmRldi0+ZmxhZ3N8PUlGRl9NVUxUSUNBU1R8SUZGX0JST0FEQ0FTVDsKLQkJY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZT0xOwotCQlpZiAoKHJjID0gcWV0aF9sYXllcjJfaW5pdGlhbGl6ZShjYXJkKSkpIHsKLQkJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiTDJlcnIlZCIsIHJjKTsKLQkJCXJldHVybiByYzsKLQkJfQotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQkJcWV0aF9sYXllcjJfcHJvY2Vzc192bGFucyhjYXJkLCAwKTsKLSNlbmRpZgotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKChyYyA9IHFldGhfc2V0YWRhcHRlcl9wYXJtcyhjYXJkKSkpCi0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiMmVyciVkIiwgcmMpOwotCWlmICgocmMgPSBxZXRoX3N0YXJ0X2lwYXNzaXN0cyhjYXJkKSkpCi0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiM2VyciVkIiwgcmMpOwotCWlmICgocmMgPSBxZXRoX3NldHJvdXRpbmdfdjQoY2FyZCkpKQotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjRlcnIlZCIsIHJjKTsKLQlpZiAoKHJjID0gcWV0aF9zZXRyb3V0aW5nX3Y2KGNhcmQpKSkKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI1ZXJyJWQiLCByYyk7Ci1vdXQ6Ci0JbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOwotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotc3RhdGljIGludAotcWV0aF9nZXRfdW5pcXVlX2lkX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09IDApCi0JCWNhcmQtPmluZm8udW5pcXVlX2lkID0gKigoX191MTYgKikKLQkJCQkmY21kLT5kYXRhLmNyZWF0ZV9kZXN0cm95X2FkZHIudW5pcXVlX2lkWzZdKTsKLQllbHNlIHsKLQkJY2FyZC0+aW5mby51bmlxdWVfaWQgPSAgVU5JUVVFX0lEX0lGX0NSRUFURV9BRERSX0ZBSUxFRCB8Ci0JCQkJCVVOSVFVRV9JRF9OT1RfQllfQ0FSRDsKLQkJUFJJTlRfV0FSTigiY291bGRuJ3QgZ2V0IGEgdW5pcXVlIGlkIGZyb20gdGhlIGNhcmQgb24gZGV2aWNlICIKLQkJCSAgICIlcyAocmVzdWx0PXgleCksIHVzaW5nIGRlZmF1bHQgaWQuIGlwdjYgIgotCQkJICAgImF1dG9jb25maWcgb24gb3RoZXIgbHBhcnMgbWF5IGxlYWQgdG8gZHVwbGljYXRlICIKLQkJCSAgICJpcCBhZGRyZXNzZXMuIHBsZWFzZSB1c2UgbWFudWFsbHkgIgotCQkJICAgImNvbmZpZ3VyZWQgb25lcy5cbiIsCi0JCQkgICBDQVJEX0JVU19JRChjYXJkKSwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50Ci1xZXRoX3B1dF91bmlxdWVfaWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQotCWludCByYyA9IDA7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDIsInB1bmlxZWlkIik7Ci0KLQlpZiAoKGNhcmQtPmluZm8udW5pcXVlX2lkICYgVU5JUVVFX0lEX05PVF9CWV9DQVJEKSA9PQotCSAgICAJVU5JUVVFX0lEX05PVF9CWV9DQVJEKQotCQlyZXR1cm4gLTE7Ci0JaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX0RFU1RST1lfQUREUiwKLQkJCQkgICAgIFFFVEhfUFJPVF9JUFY2KTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQotCQkgICAgICAgICAgICBjYXJkLT5pbmZvLnVuaXF1ZV9pZDsKLQltZW1jcHkoJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFswXSwKLQkgICAgICAgY2FyZC0+ZGV2LT5kZXZfYWRkciwgT1NBX0FERFJfTEVOKTsKLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7Ci0jZWxzZQotCWNhcmQtPmluZm8udW5pcXVlX2lkID0gIFVOSVFVRV9JRF9JRl9DUkVBVEVfQUREUl9GQUlMRUQgfAotCQkJCVVOSVFVRV9JRF9OT1RfQllfQ0FSRDsKLSNlbmRpZgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBDbGVhciBJUCBMaXN0Ci0gKi8KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX2lwX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IGNsZWFuLCBpbnQgcmVjb3ZlcikKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiY2xlYXJpcCIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Ci0JLyogY2xlYXIgdG9kbyBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkZHIsIHRtcCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KXsKLQkJbGlzdF9kZWwoJmFkZHItPmVudHJ5KTsKLQkJa2ZyZWUoYWRkcik7Ci0JfQotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZjYXJkLT5pcF9saXN0KSkgewotCQlhZGRyID0gbGlzdF9lbnRyeShjYXJkLT5pcF9saXN0Lm5leHQsCi0JCQkJICBzdHJ1Y3QgcWV0aF9pcGFkZHIsIGVudHJ5KTsKLQkJbGlzdF9kZWxfaW5pdCgmYWRkci0+ZW50cnkpOwotCQlpZiAoY2xlYW4pIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQkJCXFldGhfZGVyZWdpc3Rlcl9hZGRyX2VudHJ5KGNhcmQsIGFkZHIpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQkJfQotCQlpZiAoIXJlY292ZXIgfHwgYWRkci0+aXNfbXVsdGljYXN0KSB7Ci0JCQlrZnJlZShhZGRyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWxpc3RfYWRkX3RhaWwoJmFkZHItPmVudHJ5LCBjYXJkLT5pcF90YmRfbGlzdCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfc2V0X2FsbG93ZWRfdGhyZWFkcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIHRocmVhZHMsCi0JCQkgaW50IGNsZWFyX3N0YXJ0X21hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7Ci0JY2FyZC0+dGhyZWFkX2FsbG93ZWRfbWFzayA9IHRocmVhZHM7Ci0JaWYgKGNsZWFyX3N0YXJ0X21hc2spCi0JCWNhcmQtPnRocmVhZF9zdGFydF9tYXNrICY9IHRocmVhZHM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfdGhyZWFkc19ydW5uaW5nKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgdGhyZWFkcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYyA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dGhyZWFkX21hc2tfbG9jaywgZmxhZ3MpOwotCXJjID0gKGNhcmQtPnRocmVhZF9ydW5uaW5nX21hc2sgJiB0aHJlYWRzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50aHJlYWRfbWFza19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1xZXRoX3dhaXRfZm9yX3RocmVhZHMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyB0aHJlYWRzKQotewotCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FyZC0+d2FpdF9xLAotCQkJcWV0aF90aHJlYWRzX3J1bm5pbmcoY2FyZCwgdGhyZWFkcykgPT0gMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfc3RvcF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZWNvdmVyeV9tb2RlKQotewotCWludCByYyA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKHNldHVwICwyLCJzdG9wY2FyZCIpOwotCVFFVEhfREJGX0hFWChzZXR1cCwgMiwgJmNhcmQsIHNpemVvZih2b2lkICopKTsKLQotCXFldGhfc2V0X2FsbG93ZWRfdGhyZWFkcyhjYXJkLCAwLCAxKTsKLQlpZiAocWV0aF93YWl0X2Zvcl90aHJlYWRzKGNhcmQsIH5RRVRIX1JFQ09WRVJfVEhSRUFEKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlpZiAoY2FyZC0+cmVhZC5zdGF0ZSA9PSBDSF9TVEFURV9VUCAmJgotCSAgICBjYXJkLT53cml0ZS5zdGF0ZSA9PSBDSF9TVEFURV9VUCAmJgotCSAgICAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkpIHsKLQkJaWYgKHJlY292ZXJ5X21vZGUgJiYKLQkJICAgIGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKLQkJCXFldGhfc3RvcChjYXJkLT5kZXYpOwotCQl9IGVsc2UgewotCQkJcnRubF9sb2NrKCk7Ci0JCQlkZXZfY2xvc2UoY2FyZC0+ZGV2KTsKLQkJCXJ0bmxfdW5sb2NrKCk7Ci0JCX0KLQkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wKSB7Ci0JCQlfX3U4ICptYWMgPSAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXTsKLQkJCXJjID0gcWV0aF9sYXllcjJfc2VuZF9kZWxtYWMoY2FyZCwgbWFjKTsKLQkJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiTGVyciVkIiwgcmMpOwotCQkJaWYgKChyYyA9IHFldGhfc2VuZF9zdG9wbGFuKGNhcmQpKSkKLQkJCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjFlcnIlZCIsIHJjKTsKLQkJfQotCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfU09GVFNFVFVQOwotCX0KLQlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApIHsKLSNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCi0JCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKLQkJCXFldGhfbGF5ZXIyX3Byb2Nlc3NfdmxhbnMoY2FyZCwgMSk7Ci0jZW5kaWYKLQkJcWV0aF9jbGVhcl9pcF9saXN0KGNhcmQsICFjYXJkLT51c2VfaGFyZF9zdG9wLCAxKTsKLQkJcWV0aF9jbGVhcl9pcGFjbWRfbGlzdChjYXJkKTsKLQkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX0hBUkRTRVRVUDsKLQl9Ci0JaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfSEFSRFNFVFVQKSB7Ci0JCWlmICgoIWNhcmQtPnVzZV9oYXJkX3N0b3ApICYmCi0JCSAgICAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyKSkKLQkJCWlmICgocmMgPSBxZXRoX3B1dF91bmlxdWVfaWQoY2FyZCkpKQotCQkJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiMmVyciVkIiwgcmMpOwotCQlxZXRoX3FkaW9fY2xlYXJfY2FyZChjYXJkLCAwKTsKLQkJcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoY2FyZCk7Ci0JCXFldGhfY2xlYXJfd29ya2luZ19wb29sX2xpc3QoY2FyZCk7Ci0JCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9ET1dOOwotCX0KLQlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9ET1dOKSB7Ci0JCXFldGhfY2xlYXJfY21kX2J1ZmZlcnMoJmNhcmQtPnJlYWQpOwotCQlxZXRoX2NsZWFyX2NtZF9idWZmZXJzKCZjYXJkLT53cml0ZSk7Ci0JfQotCWNhcmQtPnVzZV9oYXJkX3N0b3AgPSAwOwotCXJldHVybiByYzsKLX0KLQotCi1zdGF0aWMgaW50Ci1xZXRoX2dldF91bmlxdWVfaWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCi0JUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgImd1bmlxZWlkIik7Ci0KLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsSVBBX0lQVjYpKSB7Ci0JCWNhcmQtPmluZm8udW5pcXVlX2lkID0gIFVOSVFVRV9JRF9JRl9DUkVBVEVfQUREUl9GQUlMRUQgfAotCQkJCQlVTklRVUVfSURfTk9UX0JZX0NBUkQ7Ci0JCXJldHVybiAwOwotCX0KLQotCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9DUkVBVEVfQUREUiwKLQkJCQkgICAgIFFFVEhfUFJPVF9JUFY2KTsKLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7Ci0JKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQotCQkgICAgICAgICAgICBjYXJkLT5pbmZvLnVuaXF1ZV9pZDsKLQotCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX2dldF91bmlxdWVfaWRfY2IsIE5VTEwpOwotI2Vsc2UKLQljYXJkLT5pbmZvLnVuaXF1ZV9pZCA9ICBVTklRVUVfSURfSUZfQ1JFQVRFX0FERFJfRkFJTEVEIHwKLQkJCQlVTklRVUVfSURfTk9UX0JZX0NBUkQ7Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci19Ci1zdGF0aWMgdm9pZAotcWV0aF9wcmludF9zdGF0dXNfd2l0aF9wb3J0bmFtZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWNoYXIgZGJmX3RleHRbMTVdOwotCWludCBpOwotCi0Jc3ByaW50ZihkYmZfdGV4dCwgIiVzIiwgY2FyZC0+aW5mby5wb3J0bmFtZSArIDEpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRiZl90ZXh0W2ldID0KLQkJCShjaGFyKSBfZWJjYXNjWyhfX3U4KSBkYmZfdGV4dFtpXV07Ci0JZGJmX3RleHRbOF0gPSAwOwotCXByaW50aygicWV0aDogRGV2aWNlICVzLyVzLyVzIGlzIGElcyBjYXJkJXMlcyVzXG4iCi0JICAgICAgICJ3aXRoIGxpbmsgdHlwZSAlcyAocG9ydG5hbWU6ICVzKVxuIiwKLQkgICAgICAgQ0FSRF9SREVWX0lEKGNhcmQpLAotCSAgICAgICBDQVJEX1dERVZfSUQoY2FyZCksCi0JICAgICAgIENBUkRfRERFVl9JRChjYXJkKSwKLQkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWUoY2FyZCksCi0JICAgICAgIChjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkgPyAiIChsZXZlbDogIiA6ICIiLAotCSAgICAgICAoY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0pID8gY2FyZC0+aW5mby5tY2xfbGV2ZWwgOiAiIiwKLQkgICAgICAgKGNhcmQtPmluZm8ubWNsX2xldmVsWzBdKSA/ICIpIiA6ICIiLAotCSAgICAgICBxZXRoX2dldF9jYXJkbmFtZV9zaG9ydChjYXJkKSwKLQkgICAgICAgZGJmX3RleHQpOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3ByaW50X3N0YXR1c19ub19wb3J0bmFtZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWlmIChjYXJkLT5pbmZvLnBvcnRuYW1lWzBdKQotCQlwcmludGsoInFldGg6IERldmljZSAlcy8lcy8lcyBpcyBhJXMgIgotCQkgICAgICAgImNhcmQlcyVzJXNcbndpdGggbGluayB0eXBlICVzICIKLQkJICAgICAgICIobm8gcG9ydG5hbWUgbmVlZGVkIGJ5IGludGVyZmFjZSkuXG4iLAotCQkgICAgICAgQ0FSRF9SREVWX0lEKGNhcmQpLAotCQkgICAgICAgQ0FSRF9XREVWX0lEKGNhcmQpLAotCQkgICAgICAgQ0FSRF9EREVWX0lEKGNhcmQpLAotCQkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWUoY2FyZCksCi0JCSAgICAgICAoY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0pID8gIiAobGV2ZWw6ICIgOiAiIiwKLQkJICAgICAgIChjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkgPyBjYXJkLT5pbmZvLm1jbF9sZXZlbCA6ICIiLAotCQkgICAgICAgKGNhcmQtPmluZm8ubWNsX2xldmVsWzBdKSA/ICIpIiA6ICIiLAotCQkgICAgICAgcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoY2FyZCkpOwotCWVsc2UKLQkJcHJpbnRrKCJxZXRoOiBEZXZpY2UgJXMvJXMvJXMgaXMgYSVzICIKLQkJICAgICAgICJjYXJkJXMlcyVzXG53aXRoIGxpbmsgdHlwZSAlcy5cbiIsCi0JCSAgICAgICBDQVJEX1JERVZfSUQoY2FyZCksCi0JCSAgICAgICBDQVJEX1dERVZfSUQoY2FyZCksCi0JCSAgICAgICBDQVJEX0RERVZfSUQoY2FyZCksCi0JCSAgICAgICBxZXRoX2dldF9jYXJkbmFtZShjYXJkKSwKLQkJICAgICAgIChjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkgPyAiIChsZXZlbDogIiA6ICIiLAotCQkgICAgICAgKGNhcmQtPmluZm8ubWNsX2xldmVsWzBdKSA/IGNhcmQtPmluZm8ubWNsX2xldmVsIDogIiIsCi0JCSAgICAgICAoY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0pID8gIikiIDogIiIsCi0JCSAgICAgICBxZXRoX2dldF9jYXJkbmFtZV9zaG9ydChjYXJkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX3ByaW50X3N0YXR1c19tZXNzYWdlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0Jc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TQUU6Ci0JCS8qIFZNIHdpbGwgdXNlIGEgbm9uLXplcm8gZmlyc3QgY2hhcmFjdGVyCi0JCSAqIHRvIGluZGljYXRlIGEgSGlwZXJTb2NrZXRzIGxpa2UgcmVwb3J0aW5nCi0JCSAqIG9mIHRoZSBsZXZlbCBPU0Egc2V0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHplcm8KLQkJICogKi8KLQkJaWYgKCFjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkgewotCQkJc3ByaW50ZihjYXJkLT5pbmZvLm1jbF9sZXZlbCwiJTAyeCUwMngiLAotCQkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzJdLAotCQkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzNdKTsKLQotCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbUUVUSF9NQ0xfTEVOR1RIXSA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBmYWxsdGhyb3VnaCAqLwotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlpZiAoY2FyZC0+aW5mby5ndWVzdGxhbikgewotCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0gPSAoY2hhcikgX2ViY2FzY1soX191OCkKLQkJCQljYXJkLT5pbmZvLm1jbF9sZXZlbFswXV07Ci0JCQljYXJkLT5pbmZvLm1jbF9sZXZlbFsxXSA9IChjaGFyKSBfZWJjYXNjWyhfX3U4KQotCQkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzFdXTsKLQkJCWNhcmQtPmluZm8ubWNsX2xldmVsWzJdID0gKGNoYXIpIF9lYmNhc2NbKF9fdTgpCi0JCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbMl1dOwotCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWxbM10gPSAoY2hhcikgX2ViY2FzY1soX191OCkKLQkJCQljYXJkLT5pbmZvLm1jbF9sZXZlbFszXV07Ci0JCQljYXJkLT5pbmZvLm1jbF9sZXZlbFtRRVRIX01DTF9MRU5HVEhdID0gMDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQltZW1zZXQoJmNhcmQtPmluZm8ubWNsX2xldmVsWzBdLCAwLCBRRVRIX01DTF9MRU5HVEggKyAxKTsKLQl9Ci0JaWYgKGNhcmQtPmluZm8ucG9ydG5hbWVfcmVxdWlyZWQpCi0JCXFldGhfcHJpbnRfc3RhdHVzX3dpdGhfcG9ydG5hbWUoY2FyZCk7Ci0JZWxzZQotCQlxZXRoX3ByaW50X3N0YXR1c19ub19wb3J0bmFtZShjYXJkKTsKLX0KLQotc3RhdGljIGludAotcWV0aF9yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlRRVRIX0RCRl9URVhUKHNldHVwLCAzLCAicmVnbmV0ZCIpOwotCWlmIChjYXJkLT5kZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5JTklUSUFMSVpFRCkKLQkJcmV0dXJuIDA7Ci0JLyogc3lzZnMgbWFnaWMgKi8KLQlTRVRfTkVUREVWX0RFVihjYXJkLT5kZXYsICZjYXJkLT5nZGV2LT5kZXYpOwotCXJldHVybiByZWdpc3Rlcl9uZXRkZXYoY2FyZC0+ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfc3RhcnRfYWdhaW4oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IHJlY292ZXJ5X21vZGUpCi17Ci0JUUVUSF9EQkZfVEVYVChzZXR1cCAsMiwgInN0YXJ0YWciKTsKLQotCWlmIChyZWNvdmVyeV9tb2RlICYmCi0JICAgIGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKLQkJcWV0aF9vcGVuKGNhcmQtPmRldik7Ci0JfSBlbHNlIHsKLQkJcnRubF9sb2NrKCk7Ci0JCWRldl9vcGVuKGNhcmQtPmRldik7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0JfQotCS8qIHRoaXMgYWxzbyBzZXRzIHNhdmVkIHVuaWNhc3QgYWRkcmVzc2VzICovCi0JcWV0aF9zZXRfbXVsdGljYXN0X2xpc3QoY2FyZC0+ZGV2KTsKLX0KLQotCi0vKiBMYXllciAyIHNwZWNpZmljIHN0dWZmICovCi0jZGVmaW5lIElHTk9SRV9QQVJBTV9FUShvcHRpb24sdmFsdWUscmVzZXRfdmFsdWUsbXNnKSBcCi0gICAgICAgIGlmIChjYXJkLT5vcHRpb25zLm9wdGlvbiA9PSB2YWx1ZSkgeyBcCi0gICAgICAgICAgICAgICAgUFJJTlRfRVJSKCIlcyBub3Qgc3VwcG9ydGVkIHdpdGggbGF5ZXIgMiAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uYWxpdHksIGlnbm9yaW5nIG9wdGlvbiBvbiByZWFkIiBcCi0JCQkgICJjaGFubmVsIGRldmljZSAlcyAuXG4iLG1zZyxDQVJEX1JERVZfSUQoY2FyZCkpOyBcCi0gICAgICAgICAgICAgICAgY2FyZC0+b3B0aW9ucy5vcHRpb24gPSByZXNldF92YWx1ZTsgXAotICAgICAgICB9Ci0jZGVmaW5lIElHTk9SRV9QQVJBTV9ORVEob3B0aW9uLHZhbHVlLHJlc2V0X3ZhbHVlLG1zZykgXAotICAgICAgICBpZiAoY2FyZC0+b3B0aW9ucy5vcHRpb24gIT0gdmFsdWUpIHsgXAotICAgICAgICAgICAgICAgIFBSSU5UX0VSUigiJXMgbm90IHN1cHBvcnRlZCB3aXRoIGxheWVyIDIgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbmFsaXR5LCBpZ25vcmluZyBvcHRpb24gb24gcmVhZCIgXAotCQkJICAiY2hhbm5lbCBkZXZpY2UgJXMgLlxuIixtc2csQ0FSRF9SREVWX0lEKGNhcmQpKTsgXAotICAgICAgICAgICAgICAgIGNhcmQtPm9wdGlvbnMub3B0aW9uID0gcmVzZXRfdmFsdWU7IFwKLSAgICAgICAgfQotCi0KLXN0YXRpYyB2b2lkIHFldGhfbWFrZV9wYXJhbWV0ZXJzX2NvbnNpc3RlbnQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMiA9PSAwKQotCQlyZXR1cm47Ci0JaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCi0JCXJldHVybjsKLQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewotICAgICAgIAkJUFJJTlRfRVJSKCJEZXZpY2UgJXMgZG9lcyBub3Qgc3VwcG9ydCBsYXllciAyIGZ1bmN0aW9uYWxpdHkuIiBcCi0JICAgICAgICAgICAgICAgCSAgIiBJZ25vcmluZyBsYXllcjIgb3B0aW9uLlxuIixDQVJEX0JVU19JRChjYXJkKSk7Ci0gICAgICAgCQljYXJkLT5vcHRpb25zLmxheWVyMiA9IDA7Ci0JCXJldHVybjsKLQl9Ci0gICAgICAgCUlHTk9SRV9QQVJBTV9ORVEocm91dGU0LnR5cGUsIE5PX1JPVVRFUiwgTk9fUk9VVEVSLAotICAgICAgICAgICAgICAgCSAgICAgICAgICJSb3V0aW5nIG9wdGlvbnMgYXJlIik7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotICAgICAgIAlJR05PUkVfUEFSQU1fTkVRKHJvdXRlNi50eXBlLCBOT19ST1VURVIsIE5PX1JPVVRFUiwKLSAgICAgICAgICAgICAgIAkgICAgICAgICAiUm91dGluZyBvcHRpb25zIGFyZSIpOwotI2VuZGlmCi0gICAgICAgCUlHTk9SRV9QQVJBTV9FUShjaGVja3N1bV90eXBlLCBIV19DSEVDS1NVTU1JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgIAlRRVRIX0NIRUNLU1VNX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAJICAgICAgICAiQ2hlY2tzdW1taW5nIG9wdGlvbnMgYXJlIik7Ci0gICAgICAgCUlHTk9SRV9QQVJBTV9ORVEoYnJvYWRjYXN0X21vZGUsIFFFVEhfVFJfQlJPQURDQVNUX0FMTFJJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAJIFFFVEhfVFJfQlJPQURDQVNUX0FMTFJJTkdTLAotICAgICAgICAgICAgICAgCSAgICAgICAgICJCcm9hZGNhc3QgbW9kZSBvcHRpb25zIGFyZSIpOwotICAgICAgIAlJR05PUkVfUEFSQU1fTkVRKG1hY2FkZHJfbW9kZSwgUUVUSF9UUl9NQUNBRERSX05PTkNBTk9OSUNBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgCSBRRVRIX1RSX01BQ0FERFJfTk9OQ0FOT05JQ0FMLAotICAgICAgICAgICAgICAgCSAgICAgICAgICJDYW5vbmljYWwgTUFDIGFkZHIgb3B0aW9ucyBhcmUiKTsKLSAgICAgICAJSUdOT1JFX1BBUkFNX05FUShmYWtlX2Jyb2FkY2FzdCwgMCwgMCwKLQkJCSAiQnJvYWRjYXN0IGZha2luZyBvcHRpb25zIGFyZSIpOwotICAgICAgIAlJR05PUkVfUEFSQU1fTkVRKGFkZF9oaGxlbiwgREVGQVVMVF9BRERfSEhMRU4sCi0gICAgICAgCSAgICAgICAgICAgICAgICAgREVGQVVMVF9BRERfSEhMRU4sIk9wdGlvbiBhZGRfaGhsZW4gaXMiKTsKLSAgICAgICAgSUdOT1JFX1BBUkFNX05FUShmYWtlX2xsLCAwLCAwLCJPcHRpb24gZmFrZV9sbCBpcyIpOwotfQotCi0KLXN0YXRpYyBpbnQKLV9fcWV0aF9zZXRfb25saW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXYsIGludCByZWNvdmVyeV9tb2RlKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBnZGV2LT5kZXYuZHJpdmVyX2RhdGE7Ci0JaW50IHJjID0gMDsKLQllbnVtIHFldGhfY2FyZF9zdGF0ZXMgcmVjb3Zlcl9mbGFnOwotCi0JQlVHX09OKCFjYXJkKTsKLQlRRVRIX0RCRl9URVhUKHNldHVwICwyLCAic2V0b25saW4iKTsKLQlRRVRIX0RCRl9IRVgoc2V0dXAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7Ci0KLQlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCwgMSk7Ci0JaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCB+UUVUSF9SRUNPVkVSX1RIUkVBRCkpewotCQlQUklOVF9XQVJOKCJzZXRfb25saW5lIG9mIGNhcmQgJXMgaW50ZXJydXB0ZWQgYnkgdXNlciFcbiIsCi0JCQkgICBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQotCi0JcmVjb3Zlcl9mbGFnID0gY2FyZC0+c3RhdGU7Ci0JaWYgKChyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX1JERVYoY2FyZCkpKSB8fAotCSAgICAocmMgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoQ0FSRF9XREVWKGNhcmQpKSkgfHwKLQkgICAgKHJjID0gY2N3X2RldmljZV9zZXRfb25saW5lKENBUkRfRERFVihjYXJkKSkpKXsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIxZXJyJWQiLCByYyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXFldGhfbWFrZV9wYXJhbWV0ZXJzX2NvbnNpc3RlbnQoY2FyZCk7Ci0KLQlpZiAoKHJjID0gcWV0aF9oYXJkc2V0dXBfY2FyZChjYXJkKSkpewotCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIjJlcnIlZCIsIHJjKTsKLQkJZ290byBvdXRfcmVtb3ZlOwotCX0KLQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfSEFSRFNFVFVQOwotCi0JaWYgKCEocmMgPSBxZXRoX3F1ZXJ5X2lwYXNzaXN0cyhjYXJkLFFFVEhfUFJPVF9JUFY0KSkpCi0JCXJjID0gcWV0aF9nZXRfdW5pcXVlX2lkKGNhcmQpOwotCi0JaWYgKHJjICYmIGNhcmQtPm9wdGlvbnMubGF5ZXIyID09IDApIHsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIzZXJyJWQiLCByYyk7Ci0JCWdvdG8gb3V0X3JlbW92ZTsKLQl9Ci0JcWV0aF9wcmludF9zdGF0dXNfbWVzc2FnZShjYXJkKTsKLQlpZiAoKHJjID0gcWV0aF9yZWdpc3Rlcl9uZXRkZXYoY2FyZCkpKXsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI0ZXJyJWQiLCByYyk7Ci0JCWdvdG8gb3V0X3JlbW92ZTsKLQl9Ci0JaWYgKChyYyA9IHFldGhfc29mdHNldHVwX2NhcmQoY2FyZCkpKXsKLQkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICI1ZXJyJWQiLCByYyk7Ci0JCWdvdG8gb3V0X3JlbW92ZTsKLQl9Ci0KLQlpZiAoKHJjID0gcWV0aF9pbml0X3FkaW9fcXVldWVzKGNhcmQpKSl7Ci0JCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNmVyciVkIiwgcmMpOwotCQlnb3RvIG91dF9yZW1vdmU7Ci0JfQotCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9TT0ZUU0VUVVA7Ci0JbmV0aWZfY2Fycmllcl9vbihjYXJkLT5kZXYpOwotCi0JcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDB4ZmZmZmZmZmYsIDApOwotCWlmIChyZWNvdmVyX2ZsYWcgPT0gQ0FSRF9TVEFURV9SRUNPVkVSKQotCQlxZXRoX3N0YXJ0X2FnYWluKGNhcmQsIHJlY292ZXJ5X21vZGUpOwotCXFldGhfbm90aWZ5X3Byb2Nlc3NlcygpOwotCXJldHVybiAwOwotb3V0X3JlbW92ZToKLQljYXJkLT51c2VfaGFyZF9zdG9wID0gMTsKLQlxZXRoX3N0b3BfY2FyZChjYXJkLCAwKTsKLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7Ci0JY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1dERVYoY2FyZCkpOwotCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9SREVWKGNhcmQpKTsKLQlpZiAocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfUkVDT1ZFUikKLQkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1JFQ09WRVI7Ci0JZWxzZQotCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfRE9XTjsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIGludAotcWV0aF9zZXRfb25saW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXYpCi17Ci0JcmV0dXJuIF9fcWV0aF9zZXRfb25saW5lKGdkZXYsIDApOwotfQotCi1zdGF0aWMgc3RydWN0IGNjd19kZXZpY2VfaWQgcWV0aF9pZHNbXSA9IHsKLQl7Q0NXX0RFVklDRSgweDE3MzEsIDB4MDEpLCAuZHJpdmVyX2luZm8gPSBRRVRIX0NBUkRfVFlQRV9PU0FFfSwKLQl7Q0NXX0RFVklDRSgweDE3MzEsIDB4MDUpLCAuZHJpdmVyX2luZm8gPSBRRVRIX0NBUkRfVFlQRV9JUUR9LAotCXtDQ1dfREVWSUNFKDB4MTczMSwgMHgwNiksIC5kcml2ZXJfaW5mbyA9IFFFVEhfQ0FSRF9UWVBFX09TTn0sCi0Je30sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShjY3csIHFldGhfaWRzKTsKLQotc3RydWN0IGRldmljZSAqcWV0aF9yb290X2RldiA9IE5VTEw7Ci0KLXN0cnVjdCBjY3dncm91cF9kcml2ZXIgcWV0aF9jY3dncm91cF9kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSAicWV0aCIsCi0JLmRyaXZlcl9pZCA9IDB4RDhDNUUzQzgsCi0JLnByb2JlID0gcWV0aF9wcm9iZV9kZXZpY2UsCi0JLnJlbW92ZSA9IHFldGhfcmVtb3ZlX2RldmljZSwKLQkuc2V0X29ubGluZSA9IHFldGhfc2V0X29ubGluZSwKLQkuc2V0X29mZmxpbmUgPSBxZXRoX3NldF9vZmZsaW5lLAotfTsKLQotc3RydWN0IGNjd19kcml2ZXIgcWV0aF9jY3dfZHJpdmVyID0gewotCS5uYW1lID0gInFldGgiLAotCS5pZHMgPSBxZXRoX2lkcywKLQkucHJvYmUgPSBjY3dncm91cF9wcm9iZV9jY3dkZXYsCi0JLnJlbW92ZSA9IGNjd2dyb3VwX3JlbW92ZV9jY3dkZXYsCi19OwotCi0KLXN0YXRpYyB2b2lkCi1xZXRoX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKHZvaWQpCi17Ci0JaWYgKHFldGhfZGJmX3NldHVwKQotCQlkZWJ1Z191bnJlZ2lzdGVyKHFldGhfZGJmX3NldHVwKTsKLQlpZiAocWV0aF9kYmZfcWVycikKLQkJZGVidWdfdW5yZWdpc3RlcihxZXRoX2RiZl9xZXJyKTsKLQlpZiAocWV0aF9kYmZfc2Vuc2UpCi0JCWRlYnVnX3VucmVnaXN0ZXIocWV0aF9kYmZfc2Vuc2UpOwotCWlmIChxZXRoX2RiZl9taXNjKQotCQlkZWJ1Z191bnJlZ2lzdGVyKHFldGhfZGJmX21pc2MpOwotCWlmIChxZXRoX2RiZl9kYXRhKQotCQlkZWJ1Z191bnJlZ2lzdGVyKHFldGhfZGJmX2RhdGEpOwotCWlmIChxZXRoX2RiZl9jb250cm9sKQotCQlkZWJ1Z191bnJlZ2lzdGVyKHFldGhfZGJmX2NvbnRyb2wpOwotCWlmIChxZXRoX2RiZl90cmFjZSkKLQkJZGVidWdfdW5yZWdpc3RlcihxZXRoX2RiZl90cmFjZSk7Ci19Ci1zdGF0aWMgaW50Ci1xZXRoX3JlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKQotewotCXFldGhfZGJmX3NldHVwID0gZGVidWdfcmVnaXN0ZXIoUUVUSF9EQkZfU0VUVVBfTkFNRSwKLQkJCQkJUUVUSF9EQkZfU0VUVVBfUEFHRVMsCi0JCQkJCVFFVEhfREJGX1NFVFVQX05SX0FSRUFTLAotCQkJCQlRRVRIX0RCRl9TRVRVUF9MRU4pOwotCXFldGhfZGJmX21pc2MgPSBkZWJ1Z19yZWdpc3RlcihRRVRIX0RCRl9NSVNDX05BTUUsCi0JCQkJICAgICAgIFFFVEhfREJGX01JU0NfUEFHRVMsCi0JCQkJICAgICAgIFFFVEhfREJGX01JU0NfTlJfQVJFQVMsCi0JCQkJICAgICAgIFFFVEhfREJGX01JU0NfTEVOKTsKLQlxZXRoX2RiZl9kYXRhID0gZGVidWdfcmVnaXN0ZXIoUUVUSF9EQkZfREFUQV9OQU1FLAotCQkJCSAgICAgICBRRVRIX0RCRl9EQVRBX1BBR0VTLAotCQkJCSAgICAgICBRRVRIX0RCRl9EQVRBX05SX0FSRUFTLAotCQkJCSAgICAgICBRRVRIX0RCRl9EQVRBX0xFTik7Ci0JcWV0aF9kYmZfY29udHJvbCA9IGRlYnVnX3JlZ2lzdGVyKFFFVEhfREJGX0NPTlRST0xfTkFNRSwKLQkJCQkJICBRRVRIX0RCRl9DT05UUk9MX1BBR0VTLAotCQkJCQkgIFFFVEhfREJGX0NPTlRST0xfTlJfQVJFQVMsCi0JCQkJCSAgUUVUSF9EQkZfQ09OVFJPTF9MRU4pOwotCXFldGhfZGJmX3NlbnNlID0gZGVidWdfcmVnaXN0ZXIoUUVUSF9EQkZfU0VOU0VfTkFNRSwKLQkJCQkJUUVUSF9EQkZfU0VOU0VfUEFHRVMsCi0JCQkJCVFFVEhfREJGX1NFTlNFX05SX0FSRUFTLAotCQkJCQlRRVRIX0RCRl9TRU5TRV9MRU4pOwotCXFldGhfZGJmX3FlcnIgPSBkZWJ1Z19yZWdpc3RlcihRRVRIX0RCRl9RRVJSX05BTUUsCi0JCQkJICAgICAgIFFFVEhfREJGX1FFUlJfUEFHRVMsCi0JCQkJICAgICAgIFFFVEhfREJGX1FFUlJfTlJfQVJFQVMsCi0JCQkJICAgICAgIFFFVEhfREJGX1FFUlJfTEVOKTsKLQlxZXRoX2RiZl90cmFjZSA9IGRlYnVnX3JlZ2lzdGVyKFFFVEhfREJGX1RSQUNFX05BTUUsCi0JCQkJCVFFVEhfREJGX1RSQUNFX1BBR0VTLAotCQkJCQlRRVRIX0RCRl9UUkFDRV9OUl9BUkVBUywKLQkJCQkJUUVUSF9EQkZfVFJBQ0VfTEVOKTsKLQotCWlmICgocWV0aF9kYmZfc2V0dXAgPT0gTlVMTCkgfHwgKHFldGhfZGJmX21pc2MgPT0gTlVMTCkgICAgfHwKLQkgICAgKHFldGhfZGJmX2RhdGEgPT0gTlVMTCkgIHx8IChxZXRoX2RiZl9jb250cm9sID09IE5VTEwpIHx8Ci0JICAgIChxZXRoX2RiZl9zZW5zZSA9PSBOVUxMKSB8fCAocWV0aF9kYmZfcWVyciA9PSBOVUxMKSAgICB8fAotCSAgICAocWV0aF9kYmZfdHJhY2UgPT0gTlVMTCkpIHsKLQkJcWV0aF91bnJlZ2lzdGVyX2RiZl92aWV3cygpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhxZXRoX2RiZl9zZXR1cCwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwocWV0aF9kYmZfc2V0dXAsIFFFVEhfREJGX1NFVFVQX0xFVkVMKTsKLQotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcocWV0aF9kYmZfbWlzYywgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwocWV0aF9kYmZfbWlzYywgUUVUSF9EQkZfTUlTQ19MRVZFTCk7Ci0KLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KHFldGhfZGJmX2RhdGEsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKHFldGhfZGJmX2RhdGEsIFFFVEhfREJGX0RBVEFfTEVWRUwpOwotCi0JZGVidWdfcmVnaXN0ZXJfdmlldyhxZXRoX2RiZl9jb250cm9sLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChxZXRoX2RiZl9jb250cm9sLCBRRVRIX0RCRl9DT05UUk9MX0xFVkVMKTsKLQotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcocWV0aF9kYmZfc2Vuc2UsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKHFldGhfZGJmX3NlbnNlLCBRRVRIX0RCRl9TRU5TRV9MRVZFTCk7Ci0KLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KHFldGhfZGJmX3FlcnIsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKHFldGhfZGJmX3FlcnIsIFFFVEhfREJGX1FFUlJfTEVWRUwpOwotCi0JZGVidWdfcmVnaXN0ZXJfdmlldyhxZXRoX2RiZl90cmFjZSwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwocWV0aF9kYmZfdHJhY2UsIFFFVEhfREJGX1RSQUNFX0xFVkVMKTsKLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotZXh0ZXJuIHN0cnVjdCBuZWlnaF90YWJsZSBhcnBfdGJsOwotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgKmFycF9kaXJlY3Rfb3BzOwotc3RhdGljIGludCAoKnFldGhfb2xkX2FycF9jb25zdHJ1Y3RvcikgKHN0cnVjdCBuZWlnaGJvdXIgKik7Ci0KLXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9kaXJlY3Rfb3BzX3RlbXBsYXRlID0gewotCS5mYW1pbHkgPSBBRl9JTkVULAotCS5zb2xpY2l0ID0gTlVMTCwKLQkuZXJyb3JfcmVwb3J0ID0gTlVMTCwKLQkub3V0cHV0ID0gZGV2X3F1ZXVlX3htaXQsCi0JLmNvbm5lY3RlZF9vdXRwdXQgPSBkZXZfcXVldWVfeG1pdCwKLQkuaGhfb3V0cHV0ID0gZGV2X3F1ZXVlX3htaXQsCi0JLnF1ZXVlX3htaXQgPSBkZXZfcXVldWVfeG1pdAotfTsKLQotc3RhdGljIGludAotcWV0aF9hcnBfY29uc3RydWN0b3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5laWdoLT5kZXY7Ci0Jc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCXN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXM7Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQotCWNhcmQgPSBxZXRoX2dldF9jYXJkX2Zyb21fZGV2KGRldik7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0JaWYoKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB8fAotCSAgIChjYXJkLT5kZXYtPmhlYWRlcl9vcHMgPT0gJnFldGhfZmFrZV9vcHMpKQotCQlnb3RvIG91dDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7Ci0JaWYgKGluX2RldiA9PSBOVUxMKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwYXJtcyA9IGluX2Rldi0+YXJwX3Bhcm1zOwotCV9fbmVpZ2hfcGFybXNfcHV0KG5laWdoLT5wYXJtcyk7Ci0JbmVpZ2gtPnBhcm1zID0gbmVpZ2hfcGFybXNfY2xvbmUocGFybXMpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JbmVpZ2gtPnR5cGUgPSBpbmV0X2FkZHJfdHlwZSgmaW5pdF9uZXQsICooX19iZTMyICopIG5laWdoLT5wcmltYXJ5X2tleSk7Ci0JbmVpZ2gtPm51ZF9zdGF0ZSA9IE5VRF9OT0FSUDsKLQluZWlnaC0+b3BzID0gYXJwX2RpcmVjdF9vcHM7Ci0JbmVpZ2gtPm91dHB1dCA9IG5laWdoLT5vcHMtPnF1ZXVlX3htaXQ7Ci0JcmV0dXJuIDA7Ci1vdXQ6Ci0JcmV0dXJuIHFldGhfb2xkX2FycF9jb25zdHJ1Y3RvcihuZWlnaCk7Ci19Ci0jZW5kaWYgIC8qQ09ORklHX1FFVEhfSVBWNiovCi0KLS8qCi0gKiBJUCBhZGRyZXNzIHRha2VvdmVyIHJlbGF0ZWQgZnVuY3Rpb25zCi0gKi8KLXN0YXRpYyB2b2lkCi1xZXRoX2NsZWFyX2lwYXRvX2xpc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqaXBhdG9lLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcGF0b2UsIHRtcCwgJmNhcmQtPmlwYXRvLmVudHJpZXMsIGVudHJ5KSB7Ci0JCWxpc3RfZGVsKCZpcGF0b2UtPmVudHJ5KTsKLQkJa2ZyZWUoaXBhdG9lKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotfQotCi1pbnQKLXFldGhfYWRkX2lwYXRvX2VudHJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYXRvX2VudHJ5ICpuZXcpCi17Ci0Jc3RydWN0IHFldGhfaXBhdG9fZW50cnkgKmlwYXRvZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYyA9IDA7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiYWRkaXBhdG8iKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXBhdG9lLCAmY2FyZC0+aXBhdG8uZW50cmllcywgZW50cnkpewotCQlpZiAoaXBhdG9lLT5wcm90byAhPSBuZXctPnByb3RvKQotCQkJY29udGludWU7Ci0JCWlmICghbWVtY21wKGlwYXRvZS0+YWRkciwgbmV3LT5hZGRyLAotCQkJICAgIChpcGF0b2UtPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KT8gNDoxNikgJiYKLQkJICAgIChpcGF0b2UtPm1hc2tfYml0cyA9PSBuZXctPm1hc2tfYml0cykpewotCQkJUFJJTlRfV0FSTigiaXBhdG8gZW50cnkgYWxyZWFkeSBleGlzdHMhXG4iKTsKLQkJCXJjID0gLUVFWElTVDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghcmMpIHsKLQkJbGlzdF9hZGRfdGFpbCgmbmV3LT5lbnRyeSwgJmNhcmQtPmlwYXRvLmVudHJpZXMpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJjOwotfQotCi12b2lkCi1xZXRoX2RlbF9pcGF0b19lbnRyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKLQkJICAgICB1OCAqYWRkciwgaW50IG1hc2tfYml0cykKLXsKLQlzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqaXBhdG9lLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiZGVsaXBhdG8iKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcGF0b2UsIHRtcCwgJmNhcmQtPmlwYXRvLmVudHJpZXMsIGVudHJ5KXsKLQkJaWYgKGlwYXRvZS0+cHJvdG8gIT0gcHJvdG8pCi0JCQljb250aW51ZTsKLQkJaWYgKCFtZW1jbXAoaXBhdG9lLT5hZGRyLCBhZGRyLAotCQkJICAgIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCk/IDQ6MTYpICYmCi0JCSAgICAoaXBhdG9lLT5tYXNrX2JpdHMgPT0gbWFza19iaXRzKSl7Ci0JCQlsaXN0X2RlbCgmaXBhdG9lLT5lbnRyeSk7Ci0JCQlrZnJlZShpcGF0b2UpOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXFldGhfY29udmVydF9hZGRyX3RvX2JpdHModTggKmFkZHIsIHU4ICpiaXRzLCBpbnQgbGVuKQotewotCWludCBpLCBqOwotCXU4IG9jdGV0OwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKXsKLQkJb2N0ZXQgPSBhZGRyW2ldOwotCQlmb3IgKGogPSA3OyBqID49IDA7IC0tail7Ci0JCQliaXRzW2kqOCArIGpdID0gb2N0ZXQgJiAxOwotCQkJb2N0ZXQgPj49IDE7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfaXNfYWRkcl9jb3ZlcmVkX2J5X2lwYXRvKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcikKLXsKLQlzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSAqaXBhdG9lOwotCXU4IGFkZHJfYml0c1sxMjhdID0gezAsIH07Ci0JdTggaXBhdG9lX2JpdHNbMTI4XSA9IHswLCB9OwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWNhcmQtPmlwYXRvLmVuYWJsZWQpCi0JCXJldHVybiAwOwotCi0JcWV0aF9jb252ZXJ0X2FkZHJfdG9fYml0cygodTggKikgJmFkZHItPnUsIGFkZHJfYml0cywKLQkJCQkgIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCk/IDQ6MTYpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXBhdG9lLCAmY2FyZC0+aXBhdG8uZW50cmllcywgZW50cnkpewotCQlpZiAoYWRkci0+cHJvdG8gIT0gaXBhdG9lLT5wcm90bykKLQkJCWNvbnRpbnVlOwotCQlxZXRoX2NvbnZlcnRfYWRkcl90b19iaXRzKGlwYXRvZS0+YWRkciwgaXBhdG9lX2JpdHMsCi0JCQkJCSAgKGlwYXRvZS0+cHJvdG89PVFFVEhfUFJPVF9JUFY0KSA/Ci0JCQkJCSAgNDoxNik7Ci0JCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKLQkJCXJjID0gIW1lbWNtcChhZGRyX2JpdHMsIGlwYXRvZV9iaXRzLAotCQkJCSAgICAgbWluKDMyLCBpcGF0b2UtPm1hc2tfYml0cykpOwotCQllbHNlCi0JCQlyYyA9ICFtZW1jbXAoYWRkcl9iaXRzLCBpcGF0b2VfYml0cywKLQkJCQkgICAgIG1pbigxMjgsIGlwYXRvZS0+bWFza19iaXRzKSk7Ci0JCWlmIChyYykKLQkJCWJyZWFrOwotCX0KLQkvKiBpbnZlcnQ/ICovCi0JaWYgKChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkgJiYgY2FyZC0+aXBhdG8uaW52ZXJ0NCkKLQkJcmMgPSAhcmM7Ci0JZWxzZSBpZiAoKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY2KSAmJiBjYXJkLT5pcGF0by5pbnZlcnQ2KQotCQlyYyA9ICFyYzsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIFZJUEEgcmVsYXRlZCBmdW5jdGlvbnMKLSAqLwotaW50Ci1xZXRoX2FkZF92aXBhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLAotCSAgICAgIGNvbnN0IHU4ICphZGRyKQotewotCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBhZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjID0gMDsKLQotCWlwYWRkciA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKHByb3RvKTsKLQlpZiAoaXBhZGRyKXsKLQkJaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KXsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJhZGR2aXBhNCIpOwotCQkJbWVtY3B5KCZpcGFkZHItPnUuYTQuYWRkciwgYWRkciwgNCk7Ci0JCQlpcGFkZHItPnUuYTQubWFzayA9IDA7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCQl9IGVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KXsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJhZGR2aXBhNiIpOwotCQkJbWVtY3B5KCZpcGFkZHItPnUuYTYuYWRkciwgYWRkciwgMTYpOwotCQkJaXBhZGRyLT51LmE2LnBmeGxlbiA9IDA7Ci0jZW5kaWYKLQkJfQotCQlpcGFkZHItPnR5cGUgPSBRRVRIX0lQX1RZUEVfVklQQTsKLQkJaXBhZGRyLT5zZXRfZmxhZ3MgPSBRRVRIX0lQQV9TRVRJUF9WSVBBX0ZMQUc7Ci0JCWlwYWRkci0+ZGVsX2ZsYWdzID0gUUVUSF9JUEFfREVMSVBfVklQQV9GTEFHOwotCX0gZWxzZQotCQlyZXR1cm4gLUVOT01FTTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWlmIChfX3FldGhfYWRkcmVzc19leGlzdHNfaW5fbGlzdCgmY2FyZC0+aXBfbGlzdCwgaXBhZGRyLCAwKSB8fAotCSAgICBfX3FldGhfYWRkcmVzc19leGlzdHNfaW5fbGlzdChjYXJkLT5pcF90YmRfbGlzdCwgaXBhZGRyLCAwKSkKLQkJcmMgPSAtRUVYSVNUOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQlpZiAocmMpewotCQlQUklOVF9XQVJOKCJDYW5ub3QgYWRkIFZJUEEuIEFkZHJlc3MgYWxyZWFkeSBleGlzdHMhXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlpZiAoIXFldGhfYWRkX2lwKGNhcmQsIGlwYWRkcikpCi0JCWtmcmVlKGlwYWRkcik7Ci0JcWV0aF9zZXRfaXBfYWRkcl9saXN0KGNhcmQpOwotCXJldHVybiByYzsKLX0KLQotdm9pZAotcWV0aF9kZWxfdmlwYShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKLQkgICAgICBjb25zdCB1OCAqYWRkcikKLXsKLQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmlwYWRkcjsKLQotCWlwYWRkciA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKHByb3RvKTsKLQlpZiAoaXBhZGRyKXsKLQkJaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KXsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJkZWx2aXBhNCIpOwotCQkJbWVtY3B5KCZpcGFkZHItPnUuYTQuYWRkciwgYWRkciwgNCk7Ci0JCQlpcGFkZHItPnUuYTQubWFzayA9IDA7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCQl9IGVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KXsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJkZWx2aXBhNiIpOwotCQkJbWVtY3B5KCZpcGFkZHItPnUuYTYuYWRkciwgYWRkciwgMTYpOwotCQkJaXBhZGRyLT51LmE2LnBmeGxlbiA9IDA7Ci0jZW5kaWYKLQkJfQotCQlpcGFkZHItPnR5cGUgPSBRRVRIX0lQX1RZUEVfVklQQTsKLQl9IGVsc2UKLQkJcmV0dXJuOwotCWlmICghcWV0aF9kZWxldGVfaXAoY2FyZCwgaXBhZGRyKSkKLQkJa2ZyZWUoaXBhZGRyKTsKLQlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7Ci19Ci0KLS8qCi0gKiBwcm94eSBBUlAgcmVsYXRlZCBmdW5jdGlvbnMKLSAqLwotaW50Ci1xZXRoX2FkZF9yeGlwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLAotCSAgICAgIGNvbnN0IHU4ICphZGRyKQotewotCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBhZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjID0gMDsKLQotCWlwYWRkciA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKHByb3RvKTsKLQlpZiAoaXBhZGRyKXsKLQkJaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KXsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJhZGRyeGlwNCIpOwotCQkJbWVtY3B5KCZpcGFkZHItPnUuYTQuYWRkciwgYWRkciwgNCk7Ci0JCQlpcGFkZHItPnUuYTQubWFzayA9IDA7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCQl9IGVsc2UgaWYgKHByb3RvID09IFFFVEhfUFJPVF9JUFY2KXsKLQkJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJhZGRyeGlwNiIpOwotCQkJbWVtY3B5KCZpcGFkZHItPnUuYTYuYWRkciwgYWRkciwgMTYpOwotCQkJaXBhZGRyLT51LmE2LnBmeGxlbiA9IDA7Ci0jZW5kaWYKLQkJfQotCQlpcGFkZHItPnR5cGUgPSBRRVRIX0lQX1RZUEVfUlhJUDsKLQkJaXBhZGRyLT5zZXRfZmxhZ3MgPSBRRVRIX0lQQV9TRVRJUF9UQUtFT1ZFUl9GTEFHOwotCQlpcGFkZHItPmRlbF9mbGFncyA9IDA7Ci0JfSBlbHNlCi0JCXJldHVybiAtRU5PTUVNOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Ci0JaWYgKF9fcWV0aF9hZGRyZXNzX2V4aXN0c19pbl9saXN0KCZjYXJkLT5pcF9saXN0LCBpcGFkZHIsIDApIHx8Ci0JICAgIF9fcWV0aF9hZGRyZXNzX2V4aXN0c19pbl9saXN0KGNhcmQtPmlwX3RiZF9saXN0LCBpcGFkZHIsIDApKQotCQlyYyA9IC1FRVhJU1Q7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWlmIChyYyl7Ci0JCVBSSU5UX1dBUk4oIkNhbm5vdCBhZGQgUlhJUC4gQWRkcmVzcyBhbHJlYWR5IGV4aXN0cyFcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWlmICghcWV0aF9hZGRfaXAoY2FyZCwgaXBhZGRyKSkKLQkJa2ZyZWUoaXBhZGRyKTsKLQlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXFldGhfZGVsX3J4aXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8sCi0JICAgICAgY29uc3QgdTggKmFkZHIpCi17Ci0Jc3RydWN0IHFldGhfaXBhZGRyICppcGFkZHI7Ci0KLQlpcGFkZHIgPSBxZXRoX2dldF9hZGRyX2J1ZmZlcihwcm90byk7Ci0JaWYgKGlwYWRkcil7Ci0JCWlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCl7Ci0JCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiYWRkcnhpcDQiKTsKLQkJCW1lbWNweSgmaXBhZGRyLT51LmE0LmFkZHIsIGFkZHIsIDQpOwotCQkJaXBhZGRyLT51LmE0Lm1hc2sgPSAwOwotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQkJfSBlbHNlIGlmIChwcm90byA9PSBRRVRIX1BST1RfSVBWNil7Ci0JCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiYWRkcnhpcDYiKTsKLQkJCW1lbWNweSgmaXBhZGRyLT51LmE2LmFkZHIsIGFkZHIsIDE2KTsKLQkJCWlwYWRkci0+dS5hNi5wZnhsZW4gPSAwOwotI2VuZGlmCi0JCX0KLQkJaXBhZGRyLT50eXBlID0gUUVUSF9JUF9UWVBFX1JYSVA7Ci0JfSBlbHNlCi0JCXJldHVybjsKLQlpZiAoIXFldGhfZGVsZXRlX2lwKGNhcmQsIGlwYWRkcikpCi0JCWtmcmVlKGlwYWRkcik7Ci0JcWV0aF9zZXRfaXBfYWRkcl9saXN0KGNhcmQpOwotfQotCi0vKioKLSAqIElQIGV2ZW50IGhhbmRsZXIKLSAqLwotc3RhdGljIGludAotcWV0aF9pcF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0JICAgICAgdW5zaWduZWQgbG9uZyBldmVudCx2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGluX2lmYWRkciAqaWZhID0gKHN0cnVjdCBpbl9pZmFkZHIgKilwdHI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9KHN0cnVjdCBuZXRfZGV2aWNlICopIGlmYS0+aWZhX2Rldi0+ZGV2OwotCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJpcGV2ZW50Iik7Ci0JY2FyZCA9IHFldGhfZ2V0X2NhcmRfZnJvbV9kZXYoZGV2KTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCWFkZHIgPSBxZXRoX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNCk7Ci0JaWYgKGFkZHIgIT0gTlVMTCkgewotCQlhZGRyLT51LmE0LmFkZHIgPSBpZmEtPmlmYV9hZGRyZXNzOwotCQlhZGRyLT51LmE0Lm1hc2sgPSBpZmEtPmlmYV9tYXNrOwotCQlhZGRyLT50eXBlID0gUUVUSF9JUF9UWVBFX05PUk1BTDsKLQl9IGVsc2UKLQkJZ290byBvdXQ7Ci0KLQlzd2l0Y2goZXZlbnQpIHsKLQljYXNlIE5FVERFVl9VUDoKLQkJaWYgKCFxZXRoX2FkZF9pcChjYXJkLCBhZGRyKSkKLQkJCWtmcmVlKGFkZHIpOwotCQlicmVhazsKLQljYXNlIE5FVERFVl9ET1dOOgotCQlpZiAoIXFldGhfZGVsZXRlX2lwKGNhcmQsIGFkZHIpKQotCQkJa2ZyZWUoYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7Ci1vdXQ6Ci0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHFldGhfaXBfbm90aWZpZXIgPSB7Ci0JcWV0aF9pcF9ldmVudCwKLQlOVUxMLAotfTsKLQotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLS8qKgotICogSVB2NiBldmVudCBoYW5kbGVyCi0gKi8KLXN0YXRpYyBpbnQKLXFldGhfaXA2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKLQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LHZvaWQgKnB0cikKLXsKLQotCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSA9IChzdHJ1Y3QgaW5ldDZfaWZhZGRyICopcHRyOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpZmEtPmlkZXYtPmRldjsKLQlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHI7Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMywiaXA2ZXZlbnQiKTsKLQotCWNhcmQgPSBxZXRoX2dldF9jYXJkX2Zyb21fZGV2KGRldik7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBWNikpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCWFkZHIgPSBxZXRoX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNik7Ci0JaWYgKGFkZHIgIT0gTlVMTCkgewotCQltZW1jcHkoJmFkZHItPnUuYTYuYWRkciwgJmlmYS0+YWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQlhZGRyLT51LmE2LnBmeGxlbiA9IGlmYS0+cHJlZml4X2xlbjsKLQkJYWRkci0+dHlwZSA9IFFFVEhfSVBfVFlQRV9OT1JNQUw7Ci0JfSBlbHNlCi0JCWdvdG8gb3V0OwotCi0Jc3dpdGNoKGV2ZW50KSB7Ci0JY2FzZSBORVRERVZfVVA6Ci0JCWlmICghcWV0aF9hZGRfaXAoY2FyZCwgYWRkcikpCi0JCQlrZnJlZShhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBORVRERVZfRE9XTjoKLQkJaWYgKCFxZXRoX2RlbGV0ZV9pcChjYXJkLCBhZGRyKSkKLQkJCWtmcmVlKGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcWV0aF9zZXRfaXBfYWRkcl9saXN0KGNhcmQpOwotb3V0OgotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBxZXRoX2lwNl9ub3RpZmllciA9IHsKLQlxZXRoX2lwNl9ldmVudCwKLQlOVUxMLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgaW50Ci1fX3FldGhfcmVib290X2V2ZW50X2NhcmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5kcml2ZXJfZGF0YTsKLQlxZXRoX2NsZWFyX2lwX2xpc3QoY2FyZCwgMCwgMCk7Ci0JcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgMCk7Ci0JcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoY2FyZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXFldGhfcmVib290X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCZxZXRoX2Njd2dyb3VwX2RyaXZlci5kcml2ZXIsIE5VTEwsIE5VTEwsCi0JCQkJICAgICBfX3FldGhfcmVib290X2V2ZW50X2NhcmQpOwotCXJldHVybiByZXQgPyBOT1RJRllfQkFEIDogTk9USUZZX0RPTkU7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBxZXRoX3JlYm9vdF9ub3RpZmllciA9IHsKLQlxZXRoX3JlYm9vdF9ldmVudCwKLQlOVUxMLAotfTsKLQotc3RhdGljIGludAotcWV0aF9yZWdpc3Rlcl9ub3RpZmllcnModm9pZCkKLXsKLSAgICAgICAgaW50IHI7Ci0KLQlRRVRIX0RCRl9URVhUKHRyYWNlLDUsInJlZ25vdGlmIik7Ci0JaWYgKChyID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZxZXRoX3JlYm9vdF9ub3RpZmllcikpKQotCQlyZXR1cm4gcjsKLQlpZiAoKHIgPSByZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmcWV0aF9pcF9ub3RpZmllcikpKQotCQlnb3RvIG91dF9yZWJvb3Q7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCWlmICgociA9IHJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcigmcWV0aF9pcDZfbm90aWZpZXIpKSkKLQkJZ290byBvdXRfaXB2NDsKLSNlbmRpZgotCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotb3V0X2lwdjQ6Ci0JdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmcWV0aF9pcF9ub3RpZmllcik7Ci0jZW5kaWYKLW91dF9yZWJvb3Q6Ci0JdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnFldGhfcmVib290X25vdGlmaWVyKTsKLQlyZXR1cm4gcjsKLX0KLQotLyoqCi0gKiB1bnJlZ2lzdGVyIGFsbCBldmVudCBub3RpZmllcnMKLSAqLwotc3RhdGljIHZvaWQKLXFldGhfdW5yZWdpc3Rlcl9ub3RpZmllcnModm9pZCkKLXsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsNSwidW5yZWdub3QiKTsKLQlCVUdfT04odW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnFldGhfcmVib290X25vdGlmaWVyKSk7Ci0JQlVHX09OKHVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnFldGhfaXBfbm90aWZpZXIpKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JQlVHX09OKHVucmVnaXN0ZXJfaW5ldDZhZGRyX25vdGlmaWVyKCZxZXRoX2lwNl9ub3RpZmllcikpOwotI2VuZGlmIC8qIFFFVEhfSVBWNiAqLwotCi19Ci0KLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci1zdGF0aWMgaW50Ci1xZXRoX2lwdjZfaW5pdCh2b2lkKQotewotCXFldGhfb2xkX2FycF9jb25zdHJ1Y3RvciA9IGFycF90YmwuY29uc3RydWN0b3I7Ci0Jd3JpdGVfbG9ja19iaCgmYXJwX3RibC5sb2NrKTsKLQlhcnBfdGJsLmNvbnN0cnVjdG9yID0gcWV0aF9hcnBfY29uc3RydWN0b3I7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZhcnBfdGJsLmxvY2spOwotCi0JYXJwX2RpcmVjdF9vcHMgPSAoc3RydWN0IG5laWdoX29wcyopCi0JCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZWlnaF9vcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFycF9kaXJlY3Rfb3BzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShhcnBfZGlyZWN0X29wcywgJmFycF9kaXJlY3Rfb3BzX3RlbXBsYXRlLAotCSAgICAgICBzaXplb2Yoc3RydWN0IG5laWdoX29wcykpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xZXRoX2lwdjZfdW5pbml0KHZvaWQpCi17Ci0Jd3JpdGVfbG9ja19iaCgmYXJwX3RibC5sb2NrKTsKLQlhcnBfdGJsLmNvbnN0cnVjdG9yID0gcWV0aF9vbGRfYXJwX2NvbnN0cnVjdG9yOwotCXdyaXRlX3VubG9ja19iaCgmYXJwX3RibC5sb2NrKTsKLQlrZnJlZShhcnBfZGlyZWN0X29wcyk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfSVBWNiAqLwotCi1zdGF0aWMgdm9pZAotcWV0aF9zeXNmc191bnJlZ2lzdGVyKHZvaWQpCi17Ci0JczM5MF9yb290X2Rldl91bnJlZ2lzdGVyKHFldGhfcm9vdF9kZXYpOwotCXFldGhfcmVtb3ZlX2RyaXZlcl9hdHRyaWJ1dGVzKCk7Ci0JY2N3X2RyaXZlcl91bnJlZ2lzdGVyKCZxZXRoX2Njd19kcml2ZXIpOwotCWNjd2dyb3VwX2RyaXZlcl91bnJlZ2lzdGVyKCZxZXRoX2Njd2dyb3VwX2RyaXZlcik7Ci19Ci0KLS8qKgotICogcmVnaXN0ZXIgcWV0aCBhdCBzeXNmcwotICovCi1zdGF0aWMgaW50Ci1xZXRoX3N5c2ZzX3JlZ2lzdGVyKHZvaWQpCi17Ci0JaW50IHJjOwotCi0JcmMgPSBjY3dncm91cF9kcml2ZXJfcmVnaXN0ZXIoJnFldGhfY2N3Z3JvdXBfZHJpdmVyKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OwotCi0JcmMgPSBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZxZXRoX2Njd19kcml2ZXIpOwotCWlmIChyYykKLQkJZ290byBvdXRfY2N3X2RyaXZlcjsKLQotCXJjID0gcWV0aF9jcmVhdGVfZHJpdmVyX2F0dHJpYnV0ZXMoKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X3FldGhfYXR0cjsKLQotCXFldGhfcm9vdF9kZXYgPSBzMzkwX3Jvb3RfZGV2X3JlZ2lzdGVyKCJxZXRoIik7Ci0JcmMgPSBJU19FUlIocWV0aF9yb290X2RldikgPyBQVFJfRVJSKHFldGhfcm9vdF9kZXYpIDogMDsKLQlpZiAoIXJjKQotCQlnb3RvIG91dDsKLQotCXFldGhfcmVtb3ZlX2RyaXZlcl9hdHRyaWJ1dGVzKCk7Ci1vdXRfcWV0aF9hdHRyOgotCWNjd19kcml2ZXJfdW5yZWdpc3RlcigmcWV0aF9jY3dfZHJpdmVyKTsKLW91dF9jY3dfZHJpdmVyOgotCWNjd2dyb3VwX2RyaXZlcl91bnJlZ2lzdGVyKCZxZXRoX2Njd2dyb3VwX2RyaXZlcik7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioqCi0gKiBpbml0IGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0Ci1xZXRoX2luaXQodm9pZCkKLXsKLQlpbnQgcmM7Ci0KLQlQUklOVF9JTkZPKCJsb2FkaW5nICVzXG4iLCB2ZXJzaW9uKTsKLQotCUlOSVRfTElTVF9IRUFEKCZxZXRoX2NhcmRfbGlzdC5saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcWV0aF9ub3RpZnlfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnFldGhfbm90aWZ5X2xvY2spOwotCXJ3bG9ja19pbml0KCZxZXRoX2NhcmRfbGlzdC5yd2xvY2spOwotCi0JcmMgPSBxZXRoX3JlZ2lzdGVyX2RiZl92aWV3cygpOwotCWlmIChyYykKLQkJZ290byBvdXRfZXJyOwotCi0JcmMgPSBxZXRoX3N5c2ZzX3JlZ2lzdGVyKCk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9kYmY7Ci0KLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JcmMgPSBxZXRoX2lwdjZfaW5pdCgpOwotCWlmIChyYykgewotCQlQUklOVF9FUlIoIk91dCBvZiBtZW1vcnkgZHVyaW5nIGlwdjYgaW5pdCBjb2RlID0gJWRcbiIsIHJjKTsKLQkJZ290byBvdXRfc3lzZnM7Ci0JfQotI2VuZGlmIC8qIFFFVEhfSVBWNiAqLwotCXJjID0gcWV0aF9yZWdpc3Rlcl9ub3RpZmllcnMoKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2lwdjY7Ci0JcmMgPSBxZXRoX2NyZWF0ZV9wcm9jZnNfZW50cmllcygpOwotCWlmIChyYykKLQkJZ290byBvdXRfbm90aWZpZXJzOwotCi0JcmV0dXJuIHJjOwotCi1vdXRfbm90aWZpZXJzOgotCXFldGhfdW5yZWdpc3Rlcl9ub3RpZmllcnMoKTsKLW91dF9pcHY2OgotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQlxZXRoX2lwdjZfdW5pbml0KCk7Ci1vdXRfc3lzZnM6Ci0jZW5kaWYgLyogUUVUSF9JUFY2ICovCi0JcWV0aF9zeXNmc191bnJlZ2lzdGVyKCk7Ci1vdXRfZGJmOgotCXFldGhfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKLW91dF9lcnI6Ci0JUFJJTlRfRVJSKCJJbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBjb2RlICVkXG4iLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZAotX19leGl0IHFldGhfZXhpdCh2b2lkKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsMSwgImNsZWFudXAuIik7Ci0KLQkvKgotCSAqIFdlZWQgd291bGQgbm90IG5lZWQgdG8gY2xlYW4gdXAgb3VyIGRldmljZXMgaGVyZSwgYmVjYXVzZSB0aGUKLQkgKiBjb21tb24gZGV2aWNlIGxheWVyIGNhbGxzIHFldGhfcmVtb3ZlX2RldmljZSBmb3IgZWFjaCBkZXZpY2UKLQkgKiBhcyBzb29uIGFzIHdlIHVucmVnaXN0ZXIgb3VyIGRyaXZlciAoZG9uZSBpbiBxZXRoX3N5c2ZzX3VucmVnaXN0ZXIpLgotCSAqIEJ1dCB3ZSBkbyBjbGVhbnVwIGhlcmUgc28gd2UgY2FuIGRvIGEgInNvZnQiIHNodXRkb3duIG9mIG91ciBjYXJkcy4KLQkgKiBxZXRoX3JlbW92ZV9kZXZpY2UgY2FsbGVkIGJ5IHRoZSBjb21tb24gZGV2aWNlIGxheWVyIHdvdWxkIG90aGVyd2lzZQotCSAqIGRvIGEgImhhcmQiIHNodXRkb3duIChjYXJkLT51c2VfaGFyZF9zdG9wIGlzIHNldCB0byBvbmUgaW4KLQkgKiBxZXRoX3JlbW92ZV9kZXZpY2UpLgotCSAqLwotYWdhaW46Ci0JcmVhZF9sb2NrX2lycXNhdmUoJnFldGhfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYXJkLCB0bXAsICZxZXRoX2NhcmRfbGlzdC5saXN0LCBsaXN0KXsKLQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7Ci0JCXFldGhfc2V0X29mZmxpbmUoY2FyZC0+Z2Rldik7Ci0JCXFldGhfcmVtb3ZlX2RldmljZShjYXJkLT5nZGV2KTsKLQkJZ290byBhZ2FpbjsKLQl9Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcWV0aF9jYXJkX2xpc3Qucndsb2NrLCBmbGFncyk7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCXFldGhfaXB2Nl91bmluaXQoKTsKLSNlbmRpZgotCXFldGhfdW5yZWdpc3Rlcl9ub3RpZmllcnMoKTsKLQlxZXRoX3JlbW92ZV9wcm9jZnNfZW50cmllcygpOwotCXFldGhfc3lzZnNfdW5yZWdpc3RlcigpOwotCXFldGhfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKLQlwcmludGsoInFldGg6IHJlbW92ZWRcbiIpOwotfQotCi1FWFBPUlRfU1lNQk9MKHFldGhfb3NuX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wocWV0aF9vc25fZGVyZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKHFldGhfb3NuX2Fzc2lzdCk7Ci1tb2R1bGVfaW5pdChxZXRoX2luaXQpOwotbW9kdWxlX2V4aXQocWV0aF9leGl0KTsKLU1PRFVMRV9BVVRIT1IoIkZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydFxuIiBcCi0JCSAgICAgICAgICAgICAgICAgICAgICAiQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb25cbiIpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOWE0YmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMKLSAqCi0gKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAotICoKLSAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCi0gKiBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgotICogCSAgICAgIFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KLSAqCi0gKi8KLSNpbmNsdWRlIDxhc20vY2lvLmg+Ci0jaW5jbHVkZSAicWV0aF9tcGMuaCIKLQotdW5zaWduZWQgY2hhciBJRFhfQUNUSVZBVEVfUkVBRFtdPXsKLQkweDAwLDB4MDAsMHg4MCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLAotCTB4MTksMHgwMSwweDAxLDB4ODAsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4YzgsMHhjMSwKLQkweGQzLDB4ZDMsMHhkNiwweGQzLCAweGM1LDB4NDAsMHgwMCwweDAwLAotCTB4MDAsMHgwMAotfTsKLQotdW5zaWduZWQgY2hhciBJRFhfQUNUSVZBVEVfV1JJVEVbXT17Ci0JMHgwMCwweDAwLDB4ODAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDE1LDB4MDEsMHgwMSwweDgwLCAweDAwLDB4MDAsMHgwMCwweDAwLAotCTB4ZmYsMHhmZiwweDAwLDB4MDAsIDB4MDAsMHgwMCwweGM4LDB4YzEsCi0JMHhkMywweGQzLDB4ZDYsMHhkMywgMHhjNSwweDQwLDB4MDAsMHgwMCwKLQkweDAwLDB4MDAKLX07Ci0KLXVuc2lnbmVkIGNoYXIgQ01fRU5BQkxFW109ewotCTB4MDAsMHhlMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsCi0JMHgwMCwweDAwLDB4MDAsMHgxNCwgMHgwMCwweDAwLDB4MDAsMHg2MywKLQkweDEwLDB4MDAsMHgwMCwweDAxLAotCTB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHg4MSwweDdlLDB4MDAsMHgwMSwgMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MjQsMHgwMCwweDIzLAotCTB4MDAsMHgwMCwweDIzLDB4MDUsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDAxLDB4MDAsMHgwMCwweDIzLCAweDAwLDB4MDAsMHgwMCwweDQwLAotCTB4MDAsMHgwYywweDQxLDB4MDIsIDB4MDAsMHgxNywweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDAwLDB4MGIsMHgwNCwweDAxLAotCTB4N2UsMHgwNCwweDA1LDB4MDAsIDB4MDEsMHgwMSwweDBmLAotCTB4MDAsCi0JMHgwYywweDA0LDB4MDIsMHhmZiwgMHhmZiwweGZmLDB4ZmYsMHhmZiwKLQkweGZmLDB4ZmYsMHhmZgotfTsKLQotdW5zaWduZWQgY2hhciBDTV9TRVRVUFtdPXsKLQkweDAwLDB4ZTAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLAotCTB4MDAsMHgwMCwweDAwLDB4MTQsIDB4MDAsMHgwMCwweDAwLDB4NjQsCi0JMHgxMCwweDAwLDB4MDAsMHgwMSwKLQkweDAwLDB4MDAsMHgwMCwweDAwLAotCTB4ODEsMHg3ZSwweDAwLDB4MDEsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDI0LDB4MDAsMHgyNCwKLQkweDAwLDB4MDAsMHgyNCwweDA1LCAweDAwLDB4MDAsMHgwMCwweDAwLAotCTB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMSwweDAwLDB4MDAsMHgyNCwgMHgwMCwweDAwLDB4MDAsMHg0MCwKLQkweDAwLDB4MGMsMHg0MSwweDA0LCAweDAwLDB4MTgsMHgwMCwweDAwLAotCTB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMCwweDA5LDB4MDQsMHgwNCwKLQkweDA1LDB4MDAsMHgwMSwweDAxLCAweDExLAotCTB4MDAsMHgwOSwweDA0LAotCTB4MDUsMHgwNSwweDAwLDB4MDAsIDB4MDAsMHgwMCwKLQkweDAwLDB4MDYsCi0JMHgwNCwweDA2LDB4YzgsMHgwMAotfTsKLQotdW5zaWduZWQgY2hhciBVTFBfRU5BQkxFW109ewotCTB4MDAsMHhlMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDMsCi0JMHgwMCwweDAwLDB4MDAsMHgxNCwgMHgwMCwweDAwLDB4MDAsMHg2YiwKLQkweDEwLDB4MDAsMHgwMCwweDAxLAotCTB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHg0MSwweDdlLDB4MDAsMHgwMSwgMHgwMCwweDAwLDB4MDAsMHgwMSwKLQkweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MjQsMHgwMCwweDJiLAotCTB4MDAsMHgwMCwweDJiLDB4MDUsIDB4MjAsMHgwMSwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDAxLDB4MDAsMHgwMCwweDJiLCAweDAwLDB4MDAsMHgwMCwweDQwLAotCTB4MDAsMHgwYywweDQxLDB4MDIsIDB4MDAsMHgxZiwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDAwLDB4MGIsMHgwNCwweDAxLAotCTB4MDMsMHgwNCwweDA1LDB4MDAsIDB4MDEsMHgwMSwweDEyLAotCTB4MDAsCi0JMHgxNCwweDA0LDB4MGEsMHgwMCwgMHgyMCwweDAwLDB4MDAsMHhmZiwKLQkweGZmLDB4MDAsMHgwOCwweGM4LCAweGU4LDB4YzQsMHhmMSwweGM3LAotCTB4ZjEsMHgwMCwweDAwCi19OwotCi11bnNpZ25lZCBjaGFyIFVMUF9TRVRVUFtdPXsKLQkweDAwLDB4ZTAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDA0LAotCTB4MDAsMHgwMCwweDAwLDB4MTQsIDB4MDAsMHgwMCwweDAwLDB4NmMsCi0JMHgxMCwweDAwLDB4MDAsMHgwMSwKLQkweDAwLDB4MDAsMHgwMCwweDAwLAotCTB4NDEsMHg3ZSwweDAwLDB4MDEsIDB4MDAsMHgwMCwweDAwLDB4MDIsCi0JMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgwMCwweDI0LDB4MDAsMHgyYywKLQkweDAwLDB4MDAsMHgyYywweDA1LCAweDIwLDB4MDEsMHgwMCwweDAwLAotCTB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMSwweDAwLDB4MDAsMHgyYywgMHgwMCwweDAwLDB4MDAsMHg0MCwKLQkweDAwLDB4MGMsMHg0MSwweDA0LCAweDAwLDB4MjAsMHgwMCwweDAwLAotCTB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMCwweDA5LDB4MDQsMHgwNCwKLQkweDA1LDB4MDAsMHgwMSwweDAxLCAweDE0LAotCTB4MDAsMHgwOSwweDA0LAotCTB4MDUsMHgwNSwweDMwLDB4MDEsIDB4MDAsMHgwMCwKLQkweDAwLDB4MDYsCi0JMHgwNCwweDA2LDB4NDAsMHgwMCwKLQkweDAwLDB4MDgsMHgwNCwweDBiLAotCTB4MDAsMHgwMCwweDAwLDB4MDAKLX07Ci0KLXVuc2lnbmVkIGNoYXIgRE1fQUNUW109ewotCTB4MDAsMHhlMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDUsCi0JMHgwMCwweDAwLDB4MDAsMHgxNCwgMHgwMCwweDAwLDB4MDAsMHg1NSwKLQkweDEwLDB4MDAsMHgwMCwweDAxLAotCTB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHg0MSwweDdlLDB4MDAsMHgwMSwgMHgwMCwweDAwLDB4MDAsMHgwMywKLQkweDAwLDB4MDAsMHgwMCwweDAyLCAweDAwLDB4MjQsMHgwMCwweDE1LAotCTB4MDAsMHgwMCwweDJjLDB4MDUsIDB4MjAsMHgwMSwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDAxLDB4MDAsMHgwMCwweDE1LCAweDAwLDB4MDAsMHgwMCwweDQwLAotCTB4MDAsMHgwYywweDQzLDB4NjAsIDB4MDAsMHgwOSwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkweDAwLDB4MDksMHgwNCwweDA0LAotCTB4MDUsMHg0MCwweDAxLDB4MDEsIDB4MDAKLX07Ci0KLXVuc2lnbmVkIGNoYXIgSVBBX1BEVV9IRUFERVJbXT17Ci0JMHgwMCwweGUwLDB4MDAsMHgwMCwgMHg3NywweDc3LDB4NzcsMHg3NywKLQkweDAwLDB4MDAsMHgwMCwweDE0LCAweDAwLDB4MDAsCi0JCShJUEFfUERVX0hFQURFUl9TSVpFK3NpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSkvMjU2LAotCQkoSVBBX1BEVV9IRUFERVJfU0laRStzaXplb2Yoc3RydWN0IHFldGhfaXBhX2NtZCkpJTI1NiwKLQkweDEwLDB4MDAsMHgwMCwweDAxLCAweDAwLDB4MDAsMHgwMCwweDAwLAotCTB4YzEsMHgwMywweDAwLDB4MDEsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDI0LAotCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhX2NtZCkvMjU2LAotCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhX2NtZCklMjU2LAotCTB4MDAsCi0JCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKS8yNTYsCi0JCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSUyNTYsCi0JMHgwNSwKLQkweDc3LDB4NzcsMHg3NywweDc3LAotCTB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JMHgwMSwweDAwLAotCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhX2NtZCkvMjU2LAotCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhX2NtZCklMjU2LAotCTB4MDAsMHgwMCwweDAwLDB4NDAsCi19OwotCi11bnNpZ25lZCBjaGFyIFdSSVRFX0NDV1tdPXsKLQkweDAxLENDV19GTEFHX1NMSSwwLDAsCi0JMCwwLDAsMAotfTsKLQotdW5zaWduZWQgY2hhciBSRUFEX0NDV1tdPXsKLQkweDAyLENDV19GTEFHX1NMSSwwLDAsCi0JMCwwLDAsMAotfTsKLQotCi1zdHJ1Y3QgaXBhX3JjX21zZyB7Ci0JZW51bSBxZXRoX2lwYV9yZXR1cm5fY29kZXMgcmM7Ci0JY2hhciAqbXNnOwotfTsKLQotc3RhdGljIHN0cnVjdCBpcGFfcmNfbXNnIHFldGhfaXBhX3JjX21zZ1tdID0gewotCXtJUEFfUkNfU1VDQ0VTUywJCSJzdWNjZXNzIn0sCi0Je0lQQV9SQ19OT1RTVVBQLAkJIkNvbW1hbmQgbm90IHN1cHBvcnRlZCJ9LAotCXtJUEFfUkNfSVBfVEFCTEVfRlVMTCwJCSJBZGQgQWRkciBJUCBUYWJsZSBGdWxsIC0gaXB2NiJ9LAotCXtJUEFfUkNfVU5LTk9XTl9FUlJPUiwJCSJJUEEgY29tbWFuZCBmYWlsZWQgLSByZWFzb24gdW5rbm93biJ9LAotCXtJUEFfUkNfVU5TVVBQT1JURURfQ09NTUFORCwJIkNvbW1hbmQgbm90IHN1cHBvcnRlZCJ9LAotCXtJUEFfUkNfRFVQX0lQVjZfUkVNT1RFLCJpcHY2IGFkZHJlc3MgYWxyZWFkeSByZWdpc3RlcmVkIHJlbW90ZSJ9LAotCXtJUEFfUkNfRFVQX0lQVjZfSE9NRSwJCSJpcHY2IGFkZHJlc3MgYWxyZWFkeSByZWdpc3RlcmVkIn0sCi0Je0lQQV9SQ19VTlJFR0lTVEVSRURfQUREUiwJIkFkZHJlc3Mgbm90IHJlZ2lzdGVyZWQifSwKLQl7SVBBX1JDX05PX0lEX0FWQUlMQUJMRSwJIk5vIGlkZW50aWZpZXJzIGF2YWlsYWJsZSJ9LAotCXtJUEFfUkNfSURfTk9UX0ZPVU5ELAkJIklkZW50aWZpZXIgbm90IGZvdW5kIn0sCi0Je0lQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04sCSJJUCB2ZXJzaW9uIGluY29ycmVjdCJ9LAotCXtJUEFfUkNfTEFOX0ZSQU1FX01JU01BVENILAkiTEFOIGFuZCBmcmFtZSBtaXNtYXRjaCJ9LAotCXtJUEFfUkNfTDJfVU5TVVBQT1JURURfQ01ELAkiVW5zdXBwb3J0ZWQgbGF5ZXIgMiBjb21tYW5kIn0sCi0Je0lQQV9SQ19MMl9EVVBfTUFDLAkJIkR1cGxpY2F0ZSBNQUMgYWRkcmVzcyJ9LAotCXtJUEFfUkNfTDJfQUREUl9UQUJMRV9GVUxMLAkiTGF5ZXIyIGFkZHJlc3MgdGFibGUgZnVsbCJ9LAotCXtJUEFfUkNfTDJfRFVQX0xBWUVSM19NQUMsCSJEdXBsaWNhdGUgd2l0aCBsYXllciAzIE1BQyJ9LAotCXtJUEFfUkNfTDJfR01BQ19OT1RfRk9VTkQsCSJHTUFDIG5vdCBmb3VuZCJ9LAotCXtJUEFfUkNfTDJfTUFDX05PVF9GT1VORCwJIkwyIG1hYyBhZGRyZXNzIG5vdCBmb3VuZCJ9LAotCXtJUEFfUkNfTDJfSU5WQUxJRF9WTEFOX0lELAkiTDIgaW52YWxpZCB2bGFuIGlkIn0sCi0Je0lQQV9SQ19MMl9EVVBfVkxBTl9JRCwJCSJMMiBkdXBsaWNhdGUgdmxhbiBpZCJ9LAotCXtJUEFfUkNfTDJfVkxBTl9JRF9OT1RfRk9VTkQsCSJMMiB2bGFuIGlkIG5vdCBmb3VuZCJ9LAotCXtJUEFfUkNfREFUQV9NSVNNQVRDSCwJCSJEYXRhIGZpZWxkIG1pc21hdGNoICh2NC92NiBtaXhlZCkifSwKLQl7SVBBX1JDX0lOVkFMSURfTVRVX1NJWkUsCSJJbnZhbGlkIE1UVSBzaXplIn0sCi0Je0lQQV9SQ19JTlZBTElEX0xBTlRZUEUsCSJJbnZhbGlkIExBTiB0eXBlIn0sCi0Je0lQQV9SQ19JTlZBTElEX0xBTk5VTSwJCSJJbnZhbGlkIExBTiBudW0ifSwKLQl7SVBBX1JDX0RVUExJQ0FURV9JUF9BRERSRVNTLAkiQWRkcmVzcyBhbHJlYWR5IHJlZ2lzdGVyZWQifSwKLQl7SVBBX1JDX0lQX0FERFJfVEFCTEVfRlVMTCwJIklQIGFkZHJlc3MgdGFibGUgZnVsbCJ9LAotCXtJUEFfUkNfTEFOX1BPUlRfU1RBVEVfRVJST1IsCSJMQU4gcG9ydCBzdGF0ZSBlcnJvciJ9LAotCXtJUEFfUkNfU0VUSVBfTk9fU1RBUlRMQU4sCSJTZXRpcCBubyBzdGFydGxhbiByZWNlaXZlZCJ9LAotCXtJUEFfUkNfU0VUSVBfQUxSRUFEWV9SRUNFSVZFRCwJIlNldGlwIGFscmVhZHkgcmVjZWl2ZWQifSwKLQl7SVBBX1JDX0lQX0FERFJfQUxSRUFEWV9VU0VELAkiSVAgYWRkcmVzcyBhbHJlYWR5IGluIHVzZSBvbiBMQU4ifSwKLQl7SVBBX1JDX01VTFRJQ0FTVF9GVUxMLAkJIk5vIHRhc2sgYXZhaWxhYmxlLCBtdWx0aWNhc3QgZnVsbCJ9LAotCXtJUEFfUkNfU0VUSVBfSU5WQUxJRF9WRVJTSU9OLAkiU0VUSVAgaW52YWxpZCBJUCB2ZXJzaW9uIn0sCi0Je0lQQV9SQ19VTlNVUFBPUlRFRF9TVUJDTUQsCSJVbnN1cHBvcnRlZCBhc3Npc3Qgc3ViY29tbWFuZCJ9LAotCXtJUEFfUkNfQVJQX0FTU0lTVF9OT19FTkFCTEUsCSJPbmx5IHBhcnRpYWwgc3VjY2Vzcywgbm8gZW5hYmxlIn0sCi0Je0lQQV9SQ19QUklNQVJZX0FMUkVBRFlfREVGSU5FRCwiUHJpbWFyeSBhbHJlYWR5IGRlZmluZWQifSwKLQl7SVBBX1JDX1NFQ09ORF9BTFJFQURZX0RFRklORUQsCSJTZWNvbmRhcnkgYWxyZWFkeSBkZWZpbmVkIn0sCi0Je0lQQV9SQ19JTlZBTElEX1NFVFJUR19JTkRJQ0FUT1IsIkludmFsaWQgU0VUUlRHIGluZGljYXRvciJ9LAotCXtJUEFfUkNfTUNfQUREUl9BTFJFQURZX0RFRklORUQsIk11bHRpY2FzdCBhZGRyZXNzIGFscmVhZHkgZGVmaW5lZCJ9LAotCXtJUEFfUkNfTEFOX09GRkxJTkUsCQkiU1RSVExBTl9MQU5fRElTQUJMRUQgLSBMQU4gb2ZmbGluZSJ9LAotCXtJUEFfUkNfSU5WQUxJRF9JUF9WRVJTSU9OMiwJIkludmFsaWQgSVAgdmVyc2lvbiJ9LAotCXtJUEFfUkNfRkZGRiwJCQkiVW5rbm93biBFcnJvciJ9Ci19OwotCi0KLQotY2hhciAqCi1xZXRoX2dldF9pcGFfbXNnKGVudW0gcWV0aF9pcGFfcmV0dXJuX2NvZGVzIHJjKQotewotCWludCB4ID0gMDsKLQlxZXRoX2lwYV9yY19tc2dbc2l6ZW9mKHFldGhfaXBhX3JjX21zZykgLwotCQkJc2l6ZW9mKHN0cnVjdCBpcGFfcmNfbXNnKSAtIDFdLnJjID0gcmM7Ci0Jd2hpbGUocWV0aF9pcGFfcmNfbXNnW3hdLnJjICE9IHJjKQotCQl4Kys7Ci0JcmV0dXJuIHFldGhfaXBhX3JjX21zZ1t4XS5tc2c7Ci19Ci0KLQotc3RydWN0IGlwYV9jbWRfbmFtZXMgewotCWVudW0gcWV0aF9pcGFfY21kcyBjbWQ7Ci0JY2hhciAqbmFtZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBhX2NtZF9uYW1lcyBxZXRoX2lwYV9jbWRfbmFtZXNbXSA9IHsKLQl7SVBBX0NNRF9TVEFSVExBTiwJInN0YXJ0bGFuIn0sCi0Je0lQQV9DTURfU1RPUExBTiwJInN0b3BsYW4ifSwKLQl7SVBBX0NNRF9TRVRWTUFDLAkic2V0dm1hYyJ9LAotCXtJUEFfQ01EX0RFTFZNQUMsCSJkZWx2bWNhIn0sCi0Je0lQQV9DTURfU0VUR01BQywJInNldGdtYWMifSwKLQl7SVBBX0NNRF9ERUxHTUFDLAkiZGVsZ21hYyJ9LAotCXtJUEFfQ01EX1NFVFZMQU4sCSJzZXR2bGFuIn0sCi0Je0lQQV9DTURfREVMVkxBTiwJImRlbHZsYW4ifSwKLQl7SVBBX0NNRF9TRVRDQ0lELAkic2V0Y2NpZCJ9LAotCXtJUEFfQ01EX0RFTENDSUQsCSJkZWxjY2lkIn0sCi0Je0lQQV9DTURfTU9EQ0NJRCwJInNldGlwIn0sCi0Je0lQQV9DTURfU0VUSVAsCQkic2V0aXAifSwKLQl7SVBBX0NNRF9RSVBBU1NJU1QsCSJxaXBhc3Npc3QifSwKLQl7SVBBX0NNRF9TRVRBU1NQQVJNUywJInNldGFzc3Bhcm1zIn0sCi0Je0lQQV9DTURfU0VUSVBNLAkic2V0aXBtIn0sCi0Je0lQQV9DTURfREVMSVBNLAkiZGVsaXBtIn0sCi0Je0lQQV9DTURfU0VUUlRHLAkic2V0cnRnIn0sCi0Je0lQQV9DTURfREVMSVAsCQkiZGVsaXAifSwKLQl7SVBBX0NNRF9TRVRBREFQVEVSUEFSTVMsICJzZXRhZGFwdGVycGFybXMifSwKLQl7SVBBX0NNRF9TRVRfRElBR19BU1MsCSJzZXRfZGlhZ19hc3MifSwKLQl7SVBBX0NNRF9DUkVBVEVfQUREUiwJImNyZWF0ZV9hZGRyIn0sCi0Je0lQQV9DTURfREVTVFJPWV9BRERSLAkiZGVzdHJveV9hZGRyIn0sCi0Je0lQQV9DTURfUkVHSVNURVJfTE9DQUxfQUREUiwJInJlZ2lzdGVyX2xvY2FsX2FkZHIifSwKLQl7SVBBX0NNRF9VTlJFR0lTVEVSX0xPQ0FMX0FERFIsCSJ1bnJlZ2lzdGVyX2xvY2FsX2FkZHIifSwKLQl7SVBBX0NNRF9VTktOT1dOLAkidW5rbm93biJ9LAotfTsKLQotY2hhciAqCi1xZXRoX2dldF9pcGFfY21kX25hbWUoZW51bSBxZXRoX2lwYV9jbWRzIGNtZCkKLXsKLQlpbnQgeCA9IDA7Ci0JcWV0aF9pcGFfY21kX25hbWVzWwotCQlzaXplb2YocWV0aF9pcGFfY21kX25hbWVzKS8KLQkJCXNpemVvZihzdHJ1Y3QgaXBhX2NtZF9uYW1lcyktMV0uY21kID0gY21kOwotCXdoaWxlKHFldGhfaXBhX2NtZF9uYW1lc1t4XS5jbWQgIT0gY21kKQotCQl4Kys7Ci0JcmV0dXJuIHFldGhfaXBhX2NtZF9uYW1lc1t4XS5uYW1lOwotfQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlMmRhNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ODMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaAotICoKLSAqIExpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0Ci0gKgotICogQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb24KLSAqIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPgotICogICAgICAgICAgICBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKiAgICAgICAgICAgIEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgotICoKLSAqLwotI2lmbmRlZiBfX1FFVEhfTVBDX0hfXwotI2RlZmluZSBfX1FFVEhfTVBDX0hfXwotCi0jaW5jbHVkZSA8YXNtL3FldGguaD4KLQotI2RlZmluZSBJUEFfUERVX0hFQURFUl9TSVpFCTB4NDAKLSNkZWZpbmUgUUVUSF9JUEFfUERVX0xFTl9UT1RBTChidWZmZXIpIChidWZmZXIrMHgwZSkKLSNkZWZpbmUgUUVUSF9JUEFfUERVX0xFTl9QRFUxKGJ1ZmZlcikgKGJ1ZmZlcisweDI2KQotI2RlZmluZSBRRVRIX0lQQV9QRFVfTEVOX1BEVTIoYnVmZmVyKSAoYnVmZmVyKzB4MjkpCi0jZGVmaW5lIFFFVEhfSVBBX1BEVV9MRU5fUERVMyhidWZmZXIpIChidWZmZXIrMHgzYSkKLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgSVBBX1BEVV9IRUFERVJbXTsKLSNkZWZpbmUgUUVUSF9JUEFfQ01EX0RFU1RfQUREUihidWZmZXIpIChidWZmZXIrMHgyYykKLQotI2RlZmluZSBJUEFfQ01EX0xFTkdUSAkoSVBBX1BEVV9IRUFERVJfU0laRSArIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFfY21kKSkKLQotI2RlZmluZSBRRVRIX1NFUV9OT19MRU5HVEgJNAotI2RlZmluZSBRRVRIX01QQ19UT0tFTl9MRU5HVEgJNAotI2RlZmluZSBRRVRIX01DTF9MRU5HVEgJCTQKLSNkZWZpbmUgT1NBX0FERFJfTEVOCQk2Ci0KLSNkZWZpbmUgUUVUSF9USU1FT1VUCQkoMTAgKiBIWikKLSNkZWZpbmUgUUVUSF9JUEFfVElNRU9VVAkoNDUgKiBIWikKLSNkZWZpbmUgUUVUSF9JRFhfQ09NTUFORF9TRVFOTwkweGZmZmYwMDAwCi0jZGVmaW5lIFNSX0lORk9fTEVOCQkxNgotCi0jZGVmaW5lIFFFVEhfQ0xFQVJfQ0hBTk5FTF9QQVJNCS0xMAotI2RlZmluZSBRRVRIX0hBTFRfQ0hBTk5FTF9QQVJNCS0xMQotI2RlZmluZSBRRVRIX1JDRF9QQVJNIC0xMgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJUCBBc3Npc3QgcmVsYXRlZCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIElQQV9DTURfSU5JVElBVE9SX0hPU1QgIDB4MDAKLSNkZWZpbmUgSVBBX0NNRF9JTklUSUFUT1JfT1NBICAgMHgwMQotI2RlZmluZSBJUEFfQ01EX0lOSVRJQVRPUl9IT1NUX1JFUExZICAweDgwCi0jZGVmaW5lIElQQV9DTURfSU5JVElBVE9SX09TQV9SRVBMWSAgIDB4ODEKLSNkZWZpbmUgSVBBX0NNRF9QUklNX1ZFUlNJT05fTk8gMHgwMQotCi1lbnVtIHFldGhfY2FyZF90eXBlcyB7Ci0JUUVUSF9DQVJEX1RZUEVfVU5LTk9XTiA9IDAsCi0JUUVUSF9DQVJEX1RZUEVfT1NBRSAgICA9IDEwLAotCVFFVEhfQ0FSRF9UWVBFX0lRRCAgICAgPSAxMjM0LAotCVFFVEhfQ0FSRF9UWVBFX09TTiAgICAgPSAxMSwKLX07Ci0KLSNkZWZpbmUgUUVUSF9NUENfRElGSU5GT19MRU5fSU5ESUNBVEVTX0xJTktfVFlQRSAweDE4Ci0vKiBvbmx5IHRoZSBmaXJzdCB0d28gYnl0ZXMgYXJlIGxvb2tlZCBhdCBpbiBxZXRoX2dldF9jYXJkbmFtZV9zaG9ydCAqLwotZW51bSBxZXRoX2xpbmtfdHlwZXMgewotCVFFVEhfTElOS19UWVBFX0ZBU1RfRVRIICAgICA9IDB4MDEsCi0JUUVUSF9MSU5LX1RZUEVfSFNUUiAgICAgICAgID0gMHgwMiwKLQlRRVRIX0xJTktfVFlQRV9HQklUX0VUSCAgICAgPSAweDAzLAotCVFFVEhfTElOS19UWVBFX09TTiAgICAgICAgICA9IDB4MDQsCi0JUUVUSF9MSU5LX1RZUEVfMTBHQklUX0VUSCAgID0gMHgxMCwKLQlRRVRIX0xJTktfVFlQRV9MQU5FX0VUSDEwMCAgPSAweDgxLAotCVFFVEhfTElOS19UWVBFX0xBTkVfVFIgICAgICA9IDB4ODIsCi0JUUVUSF9MSU5LX1RZUEVfTEFORV9FVEgxMDAwID0gMHg4MywKLQlRRVRIX0xJTktfVFlQRV9MQU5FICAgICAgICAgPSAweDg4LAotCVFFVEhfTElOS19UWVBFX0FUTV9OQVRJVkUgICA9IDB4OTAsCi19OwotCi1lbnVtIHFldGhfdHJfbWFjYWRkcl9tb2RlcyB7Ci0JUUVUSF9UUl9NQUNBRERSX05PTkNBTk9OSUNBTCA9IDAsCi0JUUVUSF9UUl9NQUNBRERSX0NBTk9OSUNBTCAgICA9IDEsCi19OwotCi1lbnVtIHFldGhfdHJfYnJvYWRjYXN0X21vZGVzIHsKLQlRRVRIX1RSX0JST0FEQ0FTVF9BTExSSU5HUyA9IDAsCi0JUUVUSF9UUl9CUk9BRENBU1RfTE9DQUwgICAgPSAxLAotfTsKLQotLyogdGhlc2UgdmFsdWVzIG1hdGNoIENIRUNLU1VNXyogaW4gaW5jbHVkZS9saW51eC9za2J1ZmYuaCAqLwotZW51bSBxZXRoX2NoZWNrc3VtX3R5cGVzIHsKLQlTV19DSEVDS1NVTU1JTkcgPSAwLCAvKiBUT0RPOiBzZXQgdG8gYml0IGZsYWcgdXNlZCBpbiBJUEEgQ29tbWFuZCAqLwotCUhXX0NIRUNLU1VNTUlORyA9IDEsCi0JTk9fQ0hFQ0tTVU1NSU5HID0gMiwKLX07Ci0jZGVmaW5lIFFFVEhfQ0hFQ0tTVU1fREVGQVVMVCBTV19DSEVDS1NVTU1JTkcKLQotLyoKLSAqIFJvdXRpbmcgc3R1ZmYKLSAqLwotI2RlZmluZSBSRVNFVF9ST1VUSU5HX0ZMQUcgMHgxMCAvKiBpbmRpY2F0ZSB0aGF0IHJvdXRpbmcgdHlwZSBzaGFsbCBiZSBzZXQgKi8KLWVudW0gcWV0aF9yb3V0aW5nX3R5cGVzIHsKLQlOT19ST1VURVIJCT0gMCwgLyogVE9ETzogc2V0IHRvIGJpdCBmbGFnIHVzZWQgaW4gSVBBIENvbW1hbmQgKi8KLQlQUklNQVJZX1JPVVRFUgkJPSAxLAotCVNFQ09OREFSWV9ST1VURVIJPSAyLAotCU1VTFRJQ0FTVF9ST1VURVIJPSAzLAotCVBSSU1BUllfQ09OTkVDVE9SCT0gNCwKLQlTRUNPTkRBUllfQ09OTkVDVE9SCT0gNSwKLX07Ci0KLS8qIElQQSBDb21tYW5kcyAqLwotZW51bSBxZXRoX2lwYV9jbWRzIHsKLQlJUEFfQ01EX1NUQVJUTEFOCQk9IDB4MDEsCi0JSVBBX0NNRF9TVE9QTEFOCQkJPSAweDAyLAotCUlQQV9DTURfU0VUVk1BQwkJCT0gMHgyMSwKLQlJUEFfQ01EX0RFTFZNQUMJCQk9IDB4MjIsCi0JSVBBX0NNRF9TRVRHTUFDCQkJPSAweDIzLAotCUlQQV9DTURfREVMR01BQwkJCT0gMHgyNCwKLQlJUEFfQ01EX1NFVFZMQU4JCQk9IDB4MjUsCi0JSVBBX0NNRF9ERUxWTEFOCQkJPSAweDI2LAotCUlQQV9DTURfU0VUQ0NJRAkJCT0gMHg0MSwKLQlJUEFfQ01EX0RFTENDSUQJCQk9IDB4NDIsCi0JSVBBX0NNRF9NT0RDQ0lECQkJPSAweDQzLAotCUlQQV9DTURfU0VUSVAJCQk9IDB4YjEsCi0JSVBBX0NNRF9RSVBBU1NJU1QJCT0gMHhiMiwKLQlJUEFfQ01EX1NFVEFTU1BBUk1TCQk9IDB4YjMsCi0JSVBBX0NNRF9TRVRJUE0JCQk9IDB4YjQsCi0JSVBBX0NNRF9ERUxJUE0JCQk9IDB4YjUsCi0JSVBBX0NNRF9TRVRSVEcJCQk9IDB4YjYsCi0JSVBBX0NNRF9ERUxJUAkJCT0gMHhiNywKLQlJUEFfQ01EX1NFVEFEQVBURVJQQVJNUwkJPSAweGI4LAotCUlQQV9DTURfU0VUX0RJQUdfQVNTCQk9IDB4YjksCi0JSVBBX0NNRF9DUkVBVEVfQUREUgkJPSAweGMzLAotCUlQQV9DTURfREVTVFJPWV9BRERSCQk9IDB4YzQsCi0JSVBBX0NNRF9SRUdJU1RFUl9MT0NBTF9BRERSCT0gMHhkMSwKLQlJUEFfQ01EX1VOUkVHSVNURVJfTE9DQUxfQUREUgk9IDB4ZDIsCi0JSVBBX0NNRF9VTktOT1dOCQkJPSAweDAwCi19OwotCi1lbnVtIHFldGhfaXBfYXNzX2NtZHMgewotCUlQQV9DTURfQVNTX1NUQVJUCT0gMHgwMDAxLAotCUlQQV9DTURfQVNTX1NUT1AJPSAweDAwMDIsCi0JSVBBX0NNRF9BU1NfQ09ORklHVVJFCT0gMHgwMDAzLAotCUlQQV9DTURfQVNTX0VOQUJMRQk9IDB4MDAwNCwKLX07Ci0KLWVudW0gcWV0aF9hcnBfcHJvY2Vzc19zdWJjbWRzIHsKLQlJUEFfQ01EX0FTU19BUlBfU0VUX05PX0VOVFJJRVMJPSAweDAwMDMsCi0JSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0NBQ0hFCT0gMHgwMDA0LAotCUlQQV9DTURfQVNTX0FSUF9BRERfRU5UUlkJPSAweDAwMDUsCi0JSVBBX0NNRF9BU1NfQVJQX1JFTU9WRV9FTlRSWQk9IDB4MDAwNiwKLQlJUEFfQ01EX0FTU19BUlBfRkxVU0hfQ0FDSEUJPSAweDAwMDcsCi0JSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8JPSAweDAxMDQsCi0JSVBBX0NNRF9BU1NfQVJQX1FVRVJZX1NUQVRTCT0gMHgwMjA0LAotfTsKLQotCi0vKiBSZXR1cm4gQ29kZXMgZm9yIElQQSBDb21tYW5kcwotICogYWNjb3JkaW5nIHRvIE9TQSBjYXJkIFNwZWNzICovCi0KLWVudW0gcWV0aF9pcGFfcmV0dXJuX2NvZGVzIHsKLQlJUEFfUkNfU1VDQ0VTUwkJCT0gMHgwMDAwLAotCUlQQV9SQ19OT1RTVVBQCQkJPSAweDAwMDEsCi0JSVBBX1JDX0lQX1RBQkxFX0ZVTEwJCT0gMHgwMDAyLAotCUlQQV9SQ19VTktOT1dOX0VSUk9SCQk9IDB4MDAwMywKLQlJUEFfUkNfVU5TVVBQT1JURURfQ09NTUFORAk9IDB4MDAwNCwKLQlJUEFfUkNfRFVQX0lQVjZfUkVNT1RFCQk9IDB4MDAwOCwKLQlJUEFfUkNfRFVQX0lQVjZfSE9NRQkJPSAweDAwMTAsCi0JSVBBX1JDX1VOUkVHSVNURVJFRF9BRERSCT0gMHgwMDExLAotCUlQQV9SQ19OT19JRF9BVkFJTEFCTEUJCT0gMHgwMDEyLAotCUlQQV9SQ19JRF9OT1RfRk9VTkQJCT0gMHgwMDEzLAotCUlQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04JPSAweDAwMjAsCi0JSVBBX1JDX0xBTl9GUkFNRV9NSVNNQVRDSAk9IDB4MDA0MCwKLQlJUEFfUkNfTDJfVU5TVVBQT1JURURfQ01ECT0gMHgyMDAzLAotCUlQQV9SQ19MMl9EVVBfTUFDCQk9IDB4MjAwNSwKLQlJUEFfUkNfTDJfQUREUl9UQUJMRV9GVUxMCT0gMHgyMDA2LAotCUlQQV9SQ19MMl9EVVBfTEFZRVIzX01BQwk9IDB4MjAwYSwKLQlJUEFfUkNfTDJfR01BQ19OT1RfRk9VTkQJPSAweDIwMGIsCi0JSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQJCT0gMHgyMDEwLAotCUlQQV9SQ19MMl9JTlZBTElEX1ZMQU5fSUQJPSAweDIwMTUsCi0JSVBBX1JDX0wyX0RVUF9WTEFOX0lECQk9IDB4MjAxNiwKLQlJUEFfUkNfTDJfVkxBTl9JRF9OT1RfRk9VTkQJPSAweDIwMTcsCi0JSVBBX1JDX0RBVEFfTUlTTUFUQ0gJCT0gMHhlMDAxLAotCUlQQV9SQ19JTlZBTElEX01UVV9TSVpFCQk9IDB4ZTAwMiwKLQlJUEFfUkNfSU5WQUxJRF9MQU5UWVBFCQk9IDB4ZTAwMywKLQlJUEFfUkNfSU5WQUxJRF9MQU5OVU0JCT0gMHhlMDA0LAotCUlQQV9SQ19EVVBMSUNBVEVfSVBfQUREUkVTUwk9IDB4ZTAwNSwKLQlJUEFfUkNfSVBfQUREUl9UQUJMRV9GVUxMCT0gMHhlMDA2LAotCUlQQV9SQ19MQU5fUE9SVF9TVEFURV9FUlJPUgk9IDB4ZTAwNywKLQlJUEFfUkNfU0VUSVBfTk9fU1RBUlRMQU4JPSAweGUwMDgsCi0JSVBBX1JDX1NFVElQX0FMUkVBRFlfUkVDRUlWRUQJPSAweGUwMDksCi0JSVBBX1JDX0lQX0FERFJfQUxSRUFEWV9VU0VECT0gMHhlMDBhLAotCUlQQV9SQ19NVUxUSUNBU1RfRlVMTAkJPSAweGUwMGIsCi0JSVBBX1JDX1NFVElQX0lOVkFMSURfVkVSU0lPTgk9IDB4ZTAwZCwKLQlJUEFfUkNfVU5TVVBQT1JURURfU1VCQ01ECT0gMHhlMDBlLAotCUlQQV9SQ19BUlBfQVNTSVNUX05PX0VOQUJMRQk9IDB4ZTAwZiwKLQlJUEFfUkNfUFJJTUFSWV9BTFJFQURZX0RFRklORUQJPSAweGUwMTAsCi0JSVBBX1JDX1NFQ09ORF9BTFJFQURZX0RFRklORUQJPSAweGUwMTEsCi0JSVBBX1JDX0lOVkFMSURfU0VUUlRHX0lORElDQVRPUgk9IDB4ZTAxMiwKLQlJUEFfUkNfTUNfQUREUl9BTFJFQURZX0RFRklORUQJPSAweGUwMTMsCi0JSVBBX1JDX0xBTl9PRkZMSU5FCQk9IDB4ZTA4MCwKLQlJUEFfUkNfSU5WQUxJRF9JUF9WRVJTSU9OMgk9IDB4ZjAwMSwKLQlJUEFfUkNfRkZGRgkJCT0gMHhmZmZmCi19OwotCi0vKiBJUEEgZnVuY3Rpb24gZmxhZ3M7IGVhY2ggZmxhZyBtYXJrcyBhdmFpbGFiaWxpdHkgb2YgcmVzcGVjdGl2ZSBmdW5jdGlvbiAqLwotZW51bSBxZXRoX2lwYV9mdW5jcyB7Ci0JSVBBX0FSUF9QUk9DRVNTSU5HICAgICAgPSAweDAwMDAwMDAxTCwKLQlJUEFfSU5CT1VORF9DSEVDS1NVTSAgICA9IDB4MDAwMDAwMDJMLAotCUlQQV9PVVRCT1VORF9DSEVDS1NVTSAgID0gMHgwMDAwMDAwNEwsCi0JSVBBX0lQX0ZSQUdNRU5UQVRJT04gICAgPSAweDAwMDAwMDA4TCwKLQlJUEFfRklMVEVSSU5HICAgICAgICAgICA9IDB4MDAwMDAwMTBMLAotCUlQQV9JUFY2ICAgICAgICAgICAgICAgID0gMHgwMDAwMDAyMEwsCi0JSVBBX01VTFRJQ0FTVElORyAgICAgICAgPSAweDAwMDAwMDQwTCwKLQlJUEFfSVBfUkVBU1NFTUJMWSAgICAgICA9IDB4MDAwMDAwODBMLAotCUlQQV9RVUVSWV9BUlBfQ09VTlRFUlMgID0gMHgwMDAwMDEwMEwsCi0JSVBBX1FVRVJZX0FSUF9BRERSX0lORk8gPSAweDAwMDAwMjAwTCwKLQlJUEFfU0VUQURBUFRFUlBBUk1TICAgICA9IDB4MDAwMDA0MDBMLAotCUlQQV9WTEFOX1BSSU8gICAgICAgICAgID0gMHgwMDAwMDgwMEwsCi0JSVBBX1BBU1NUSFJVICAgICAgICAgICAgPSAweDAwMDAxMDAwTCwKLQlJUEFfRkxVU0hfQVJQX1NVUFBPUlQgICA9IDB4MDAwMDIwMDBMLAotCUlQQV9GVUxMX1ZMQU4gICAgICAgICAgID0gMHgwMDAwNDAwMEwsCi0JSVBBX0lOQk9VTkRfUEFTU1RIUlUgICAgPSAweDAwMDA4MDAwTCwKLQlJUEFfU09VUkNFX01BQyAgICAgICAgICA9IDB4MDAwMTAwMDBMLAotCUlQQV9PU0FfTUNfUk9VVEVSICAgICAgID0gMHgwMDAyMDAwMEwsCi0JSVBBX1FVRVJZX0FSUF9BU1NJU1QJPSAweDAwMDQwMDAwTCwKLQlJUEFfSU5CT1VORF9UU08gICAgICAgICA9IDB4MDAwODAwMDBMLAotCUlQQV9PVVRCT1VORF9UU08gICAgICAgID0gMHgwMDEwMDAwMEwsCi19OwotCi0vKiBTRVRJUC9ERUxJUCBJUEEgQ29tbWFuZDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZW51bSBxZXRoX2lwYV9zZXRkZWxpcF9mbGFncyB7Ci0JUUVUSF9JUEFfU0VUREVMSVBfREVGQVVMVCAgICAgICAgICA9IDB4MDBMLCAvKiBkZWZhdWx0ICovCi0JUUVUSF9JUEFfU0VUSVBfVklQQV9GTEFHICAgICAgICAgICA9IDB4MDFMLCAvKiBubyBncmF0LiBBUlAgKi8KLQlRRVRIX0lQQV9TRVRJUF9UQUtFT1ZFUl9GTEFHICAgICAgID0gMHgwMkwsIC8qIG5vZmFpbCBvbiBncmF0LiBBUlAgKi8KLQlRRVRIX0lQQV9ERUxJUF9BRERSXzJfQl9UQUtFTl9PVkVSID0gMHgyMEwsCi0JUUVUSF9JUEFfREVMSVBfVklQQV9GTEFHICAgICAgICAgICA9IDB4NDBMLAotCVFFVEhfSVBBX0RFTElQX0FERFJfTkVFRFNfU0VUSVAgICAgPSAweDgwTCwKLX07Ci0KLS8qIFNFVEFEQVBURVIgSVBBIENvbW1hbmQ6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1lbnVtIHFldGhfaXBhX3NldGFkcF9jbWQgewotCUlQQV9TRVRBRFBfUVVFUllfQ09NTUFORFNfU1VQUE9SVEVECT0gMHgwMSwKLQlJUEFfU0VUQURQX0FMVEVSX01BQ19BRERSRVNTCQk9IDB4MDIsCi0JSVBBX1NFVEFEUF9BRERfREVMRVRFX0dST1VQX0FERFJFU1MJPSAweDA0LAotCUlQQV9TRVRBRFBfQUREX0RFTEVURV9GVU5DVElPTkFMX0FERFIJPSAweDA4LAotCUlQQV9TRVRBRFBfU0VUX0FERFJFU1NJTkdfTU9ERQkJPSAweDEwLAotCUlQQV9TRVRBRFBfU0VUX0NPTkZJR19QQVJNUwkJPSAweDIwLAotCUlQQV9TRVRBRFBfU0VUX0NPTkZJR19QQVJNU19FWFRFTkRFRAk9IDB4NDAsCi0JSVBBX1NFVEFEUF9TRVRfQlJPQURDQVNUX01PREUJCT0gMHg4MCwKLQlJUEFfU0VUQURQX1NFTkRfT1NBX01FU1NBR0UJCT0gMHgwMTAwLAotCUlQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTAkJPSAweDAyMDAsCi0JSVBBX1NFVEFEUF9RVUVSWV9DQVJEX0lORk8JCT0gMHgwNDAwLAotCUlQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERQkJPSAweDA4MDAsCi19OwotZW51bSBxZXRoX2lwYV9tYWNfb3BzIHsKLQlDSEFOR0VfQUREUl9SRUFEX01BQwkJPSAwLAotCUNIQU5HRV9BRERSX1JFUExBQ0VfTUFDCQk9IDEsCi0JQ0hBTkdFX0FERFJfQUREX01BQwkJPSAyLAotCUNIQU5HRV9BRERSX0RFTF9NQUMJCT0gNCwKLQlDSEFOR0VfQUREUl9SRVNFVF9NQUMJCT0gOCwKLX07Ci1lbnVtIHFldGhfaXBhX2FkZHJfb3BzIHsKLQlDSEFOR0VfQUREUl9SRUFEX0FERFIJCT0gMCwKLQlDSEFOR0VfQUREUl9BRERfQUREUgkJPSAxLAotCUNIQU5HRV9BRERSX0RFTF9BRERSCQk9IDIsCi0JQ0hBTkdFX0FERFJfRkxVU0hfQUREUl9UQUJMRQk9IDQsCi19OwotZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIHsKLQlTRVRfUFJPTUlTQ19NT0RFX09GRgkJPSAwLAotCVNFVF9QUk9NSVNDX01PREVfT04JCT0gMSwKLX07Ci0KLS8qIChTRVQpREVMSVAoTSkgSVBBIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRkZWxpcDQgewotCV9fdTggICBpcF9hZGRyWzRdOwotCV9fdTggICBtYXNrWzRdOwotCV9fdTMyICBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXA2IHsKLQlfX3U4ICAgaXBfYWRkclsxNl07Ci0JX191OCAgIG1hc2tbMTZdOwotCV9fdTMyICBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXBtIHsKLQlfX3U4IG1hY1s2XTsKLQlfX3U4IHBhZGRpbmdbMl07Ci0JX191OCBpcDZbMTJdOwotCV9fdTggaXA0WzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBxZXRoX2lwYWNtZF9sYXllcjJzZXRkZWxtYWMgewotCV9fdTMyIG1hY19sZW5ndGg7Ci0JX191OCBtYWNbNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHFldGhfaXBhY21kX2xheWVyMnNldGRlbHZsYW4gewotCV9fdTE2IHZsYW5faWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi1zdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YXNzcGFybXNfaGRyIHsKLQlfX3UzMiBhc3Npc3Rfbm87Ci0JX191MTYgbGVuZ3RoOwotCV9fdTE2IGNvbW1hbmRfY29kZTsKLQlfX3UxNiByZXR1cm5fY29kZTsKLQlfX3U4IG51bWJlcl9vZl9yZXBsaWVzOwotCV9fdTggc2VxX25vOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2RhdGEgewotCV9fdTE2IHJlcXVlc3RfYml0czsKLQlfX3UxNiByZXBseV9iaXRzOwotCV9fdTMyIG5vX2VudHJpZXM7Ci0JY2hhciBkYXRhOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyogdXNlZCBhcyBwYXJhbWV0ZXIgZm9yIGFycF9xdWVyeSByZXBseSAqLwotc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2luZm8gewotCV9fdTMyIHVkYXRhX2xlbjsKLQlfX3UxNiBtYXNrX2JpdHM7Ci0JX191MzIgdWRhdGFfb2Zmc2V0OwotCV9fdTMyIG5vX2VudHJpZXM7Ci0JY2hhciAqdWRhdGE7Ci19OwotCi0vKiBTRVRBU1NQQVJNUyBJUEEgQ29tbWFuZDogKi8KLXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhc3NwYXJtcyB7Ci0Jc3RydWN0IHFldGhfaXBhY21kX3NldGFzc3Bhcm1zX2hkciBoZHI7Ci0JdW5pb24gewotCQlfX3UzMiBmbGFnc18zMmJpdDsKLQkJc3RydWN0IHFldGhfYXJwX2NhY2hlX2VudHJ5IGFkZF9hcnBfZW50cnk7Ci0JCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9kYXRhIHF1ZXJ5X2FycDsKLQkJX191OCBpcFsxNl07Ci0JfSBkYXRhOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotLyogU0VUUlRHIElQQSBDb21tYW5kOiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHFldGhfc2V0X3JvdXRpbmcgewotCV9fdTggdHlwZTsKLX07Ci0KLS8qIFNFVEFEQVBURVJQQVJNUyBJUEEgQ29tbWFuZDogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBxZXRoX3F1ZXJ5X2NtZHNfc3VwcCB7Ci0JX191MzIgbm9fbGFudHlwZXNfc3VwcDsKLQlfX3U4IGxhbl90eXBlOwotCV9fdTggcmVzZXJ2ZWQxWzNdOwotCV9fdTMyIHN1cHBvcnRlZF9jbWRzOwotCV9fdTggcmVzZXJ2ZWQyWzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBxZXRoX2NoYW5nZV9hZGRyIHsKLQlfX3UzMiBjbWQ7Ci0JX191MzIgYWRkcl9zaXplOwotCV9fdTMyIG5vX21hY3M7Ci0JX191OCBhZGRyW09TQV9BRERSX0xFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi1zdHJ1Y3QgcWV0aF9zbm1wX2NtZCB7Ci0JX191OCAgdG9rZW5bMTZdOwotCV9fdTMyIHJlcXVlc3Q7Ci0JX191MzIgaW50ZXJmYWNlOwotCV9fdTMyIHJldHVybmNvZGU7Ci0JX191MzIgZmlybXdhcmVsZXZlbDsKLQlfX3UzMiBzZXFubzsKLQlfX3U4ICBkYXRhOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBxZXRoX3NubXBfdXJlcV9oZHIgewotCV9fdTMyICAgZGF0YV9sZW47Ci0JX191MzIgICByZXFfbGVuOwotCV9fdTMyICAgcmVzZXJ2ZWQxOwotCV9fdTMyICAgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBxZXRoX3NubXBfdXJlcSB7Ci0Jc3RydWN0IHFldGhfc25tcF91cmVxX2hkciBoZHI7Ci0Jc3RydWN0IHFldGhfc25tcF9jbWQgY21kOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zX2hkciB7Ci0JX191MzIgc3VwcF9od19jbWRzOwotCV9fdTMyIHJlc2VydmVkMTsKLQlfX3UxNiBjbWRsZW5ndGg7Ci0JX191MTYgcmVzZXJ2ZWQyOwotCV9fdTMyIGNvbW1hbmRfY29kZTsKLQlfX3UxNiByZXR1cm5fY29kZTsKLQlfX3U4ICB1c2VkX3RvdGFsOwotCV9fdTggIHNlcV9ubzsKLQlfX3UzMiByZXNlcnZlZDM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zIHsKLQlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyIGhkcjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBxZXRoX3F1ZXJ5X2NtZHNfc3VwcCBxdWVyeV9jbWRzX3N1cHA7Ci0JCXN0cnVjdCBxZXRoX2NoYW5nZV9hZGRyIGNoYW5nZV9hZGRyOwotCQlzdHJ1Y3QgcWV0aF9zbm1wX2NtZCBzbm1wOwotCQlfX3UzMiBtb2RlOwotCX0gZGF0YTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBJUEZSQU1FIElQQSBDb21tYW5kOiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUT0RPOiBkZWZpbmUgaW4gYW5hbG9neSB0byBjb21tYW5kcyBkZWZpbmUgYWJvdmUgKi8KLQotLyogQUREX0FERFJfRU5UUlkgSVBBIENvbW1hbmQ6ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVE9ETzogZGVmaW5lIGluIGFuYWxvZ3kgdG8gY29tbWFuZHMgZGVmaW5lIGFib3ZlICovCi0KLS8qIERFTEVURV9BRERSX0VOVFJZIElQQSBDb21tYW5kOiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFRPRE86IGRlZmluZSBpbiBhbmFsb2d5IHRvIGNvbW1hbmRzIGRlZmluZSBhYm92ZSAqLwotCi0vKiBDUkVBVEVfQUREUiBJUEEgQ29tbWFuZDogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgcWV0aF9jcmVhdGVfZGVzdHJveV9hZGRyZXNzIHsKLQlfX3U4IHVuaXF1ZV9pZFs4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBSRUdJU1RFUl9MT0NBTF9BRERSIElQQSBDb21tYW5kOiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUT0RPOiBkZWZpbmUgaW4gYW5hbG9neSB0byBjb21tYW5kcyBkZWZpbmUgYWJvdmUgKi8KLQotLyogVU5SRUdJU1RFUl9MT0NBTF9BRERSIElQQSBDb21tYW5kOiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVE9ETzogZGVmaW5lIGluIGFuYWxvZ3kgdG8gY29tbWFuZHMgZGVmaW5lIGFib3ZlICovCi0KLS8qIEhlYWRlciBmb3IgZWFjaCBJUEEgY29tbWFuZCAqLwotc3RydWN0IHFldGhfaXBhY21kX2hkciB7Ci0JX191OCAgIGNvbW1hbmQ7Ci0JX191OCAgIGluaXRpYXRvcjsKLQlfX3UxNiAgc2Vxbm87Ci0JX191MTYgIHJldHVybl9jb2RlOwotCV9fdTggICBhZGFwdGVyX3R5cGU7Ci0JX191OCAgIHJlbF9hZGFwdGVyX25vOwotCV9fdTggICBwcmltX3ZlcnNpb25fbm87Ci0JX191OCAgIHBhcmFtX2NvdW50OwotCV9fdTE2ICBwcm90X3ZlcnNpb247Ci0JX191MzIgIGlwYV9zdXBwb3J0ZWQ7Ci0JX191MzIgIGlwYV9lbmFibGVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFRoZSBJUEEgY29tbWFuZCBpdHNlbGYgKi8KLXN0cnVjdCBxZXRoX2lwYV9jbWQgewotCXN0cnVjdCBxZXRoX2lwYWNtZF9oZHIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IHFldGhfaXBhY21kX3NldGRlbGlwNAkJc2V0ZGVsaXA0OwotCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXA2CQlzZXRkZWxpcDY7Ci0JCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRkZWxpcG0JCXNldGRlbGlwbTsKLQkJc3RydWN0IHFldGhfaXBhY21kX3NldGFzc3Bhcm1zCQlzZXRhc3NwYXJtczsKLQkJc3RydWN0IHFldGhfaXBhY21kX2xheWVyMnNldGRlbG1hYwlzZXRkZWxtYWM7Ci0JCXN0cnVjdCBxZXRoX2lwYWNtZF9sYXllcjJzZXRkZWx2bGFuCXNldGRlbHZsYW47Ci0JCXN0cnVjdCBxZXRoX2NyZWF0ZV9kZXN0cm95X2FkZHJlc3MJY3JlYXRlX2Rlc3Ryb3lfYWRkcjsKLQkJc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zCQlzZXRhZGFwdGVycGFybXM7Ci0JCXN0cnVjdCBxZXRoX3NldF9yb3V0aW5nCQkJc2V0cnRnOwotCX0gZGF0YTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogc3BlY2lhbCBjb21tYW5kIGZvciBBUlAgcHJvY2Vzc2luZy4KLSAqIHRoaXMgaXMgbm90IGluY2x1ZGVkIGluIHNldGFzc3Bhcm1zIGNvbW1hbmQgYmVmb3JlLCBiZWNhdXNlIHdlIGdldAotICogcHJvYmxlbSB3aXRoIHRoZSBzaXplIG9mIHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhc3NwYXJtcyBvdGhlcndpc2UKLSAqLwotZW51bSBxZXRoX2lwYV9hcnBfcmV0dXJuX2NvZGVzIHsKLQlRRVRIX0lQQV9BUlBfUkNfU1VDQ0VTUyAgICAgID0gMHgwMDAwLAotCVFFVEhfSVBBX0FSUF9SQ19GQUlMRUQgICAgICAgPSAweDAwMDEsCi0JUUVUSF9JUEFfQVJQX1JDX05PVFNVUFAgICAgICA9IDB4MDAwMiwKLQlRRVRIX0lQQV9BUlBfUkNfT1VUX09GX1JBTkdFID0gMHgwMDAzLAotCVFFVEhfSVBBX0FSUF9SQ19RX05PVFNVUFAgICAgPSAweDAwMDQsCi0JUUVUSF9JUEFfQVJQX1JDX1FfTk9fREFUQSAgICA9IDB4MDAwOCwKLX07Ci0KLQotZXh0ZXJuIGNoYXIgKgotcWV0aF9nZXRfaXBhX21zZyhlbnVtIHFldGhfaXBhX3JldHVybl9jb2RlcyByYyk7Ci1leHRlcm4gY2hhciAqCi1xZXRoX2dldF9pcGFfY21kX25hbWUoZW51bSBxZXRoX2lwYV9jbWRzIGNtZCk7Ci0KLSNkZWZpbmUgUUVUSF9TRVRBU1NfQkFTRV9MRU4gKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfaGRyKSArIFwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFzc3Bhcm1zX2hkcikpCi0jZGVmaW5lIFFFVEhfSVBBX0FSUF9EQVRBX1BPUyhidWZmZXIpIChidWZmZXIgKyBJUEFfUERVX0hFQURFUl9TSVpFICsgXAotCQkJCSAgICAgICBRRVRIX1NFVEFTU19CQVNFX0xFTikKLSNkZWZpbmUgUUVUSF9TRVRBRFBfQkFTRV9MRU4gKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfaGRyKSArIFwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSkKLSNkZWZpbmUgUUVUSF9TTk1QX1NFVEFEUF9DTURMRU5HVEggMTYKLQotI2RlZmluZSBRRVRIX0FSUF9EQVRBX1NJWkUgMzk2OAotI2RlZmluZSBRRVRIX0FSUF9DTURfTEVOIChRRVRIX0FSUF9EQVRBX1NJWkUgKyA4KQotLyogSGVscGVyIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBJU19JUEFfUkVQTFkoY21kKSAoKGNtZC0+aGRyLmluaXRpYXRvciA9PSBJUEFfQ01EX0lOSVRJQVRPUl9IT1NUKSB8fCBcCi0JCQkgICAoY21kLT5oZHIuaW5pdGlhdG9yID09IElQQV9DTURfSU5JVElBVE9SX09TQV9SRVBMWSkpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEVORCBPRiAgIElQIEFzc2lzdCByZWxhdGVkIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1leHRlcm4gdW5zaWduZWQgY2hhciBXUklURV9DQ1dbXTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIFJFQURfQ0NXW107Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIENNX0VOQUJMRVtdOwotI2RlZmluZSBDTV9FTkFCTEVfU0laRSAweDYzCi0jZGVmaW5lIFFFVEhfQ01fRU5BQkxFX0lTU1VFUl9STV9UT0tFTihidWZmZXIpIChidWZmZXIrMHgyYykKLSNkZWZpbmUgUUVUSF9DTV9FTkFCTEVfRklMVEVSX1RPS0VOKGJ1ZmZlcikgKGJ1ZmZlcisweDUzKQotI2RlZmluZSBRRVRIX0NNX0VOQUJMRV9VU0VSX0RBVEEoYnVmZmVyKSAoYnVmZmVyKzB4NWIpCi0KLSNkZWZpbmUgUUVUSF9DTV9FTkFCTEVfUkVTUF9GSUxURVJfVE9LRU4oYnVmZmVyKSBcCi0JCShQRFVfRU5DQVBTVUxBVElPTihidWZmZXIpKyAweDEzKQotCi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIENNX1NFVFVQW107Ci0jZGVmaW5lIENNX1NFVFVQX1NJWkUgMHg2NAotI2RlZmluZSBRRVRIX0NNX1NFVFVQX0RFU1RfQUREUihidWZmZXIpIChidWZmZXIrMHgyYykKLSNkZWZpbmUgUUVUSF9DTV9TRVRVUF9DT05ORUNUSU9OX1RPS0VOKGJ1ZmZlcikgKGJ1ZmZlcisweDUxKQotI2RlZmluZSBRRVRIX0NNX1NFVFVQX0ZJTFRFUl9UT0tFTihidWZmZXIpIChidWZmZXIrMHg1YSkKLQotI2RlZmluZSBRRVRIX0NNX1NFVFVQX1JFU1BfREVTVF9BRERSKGJ1ZmZlcikgXAotCQkoUERVX0VOQ0FQU1VMQVRJT04oYnVmZmVyKSArIDB4MWEpCi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIFVMUF9FTkFCTEVbXTsKLSNkZWZpbmUgVUxQX0VOQUJMRV9TSVpFIDB4NmIKLSNkZWZpbmUgUUVUSF9VTFBfRU5BQkxFX0xJTktOVU0oYnVmZmVyKSAoYnVmZmVyKzB4NjEpCi0jZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9ERVNUX0FERFIoYnVmZmVyKSAoYnVmZmVyKzB4MmMpCi0jZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9GSUxURVJfVE9LRU4oYnVmZmVyKSAoYnVmZmVyKzB4NTMpCi0jZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9QT1JUTkFNRV9BTkRfTEwoYnVmZmVyKSAoYnVmZmVyKzB4NjIpCi0jZGVmaW5lIFFFVEhfVUxQX0VOQUJMRV9SRVNQX0ZJTFRFUl9UT0tFTihidWZmZXIpIFwKLQkJKFBEVV9FTkNBUFNVTEFUSU9OKGJ1ZmZlcikgKyAweDEzKQotI2RlZmluZSBRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKGJ1ZmZlcikgXAotCQkoUERVX0VOQ0FQU1VMQVRJT04oYnVmZmVyKSsgMHgxZikKLSNkZWZpbmUgUUVUSF9VTFBfRU5BQkxFX1JFU1BfRElGSU5GT19MRU4oYnVmZmVyKSBcCi0JCShQRFVfRU5DQVBTVUxBVElPTihidWZmZXIpICsgMHgxNykKLSNkZWZpbmUgUUVUSF9VTFBfRU5BQkxFX1JFU1BfTElOS19UWVBFKGJ1ZmZlcikgXAotCQkoUERVX0VOQ0FQU1VMQVRJT04oYnVmZmVyKSsgMHgyYikKLS8qIExheWVyIDIgZGVmaW50aW9ucyAqLwotI2RlZmluZSBRRVRIX1BST1RfTEFZRVIyIDB4MDgKLSNkZWZpbmUgUUVUSF9QUk9UX1RDUElQICAweDAzCi0jZGVmaW5lIFFFVEhfUFJPVF9PU04yICAgMHgwYQotI2RlZmluZSBRRVRIX1VMUF9FTkFCTEVfUFJPVF9UWVBFKGJ1ZmZlcikgKGJ1ZmZlcisweDUwKQotI2RlZmluZSBRRVRIX0lQQV9DTURfUFJPVF9UWVBFKGJ1ZmZlcikgKGJ1ZmZlcisweDE5KQotCi1leHRlcm4gdW5zaWduZWQgY2hhciBVTFBfU0VUVVBbXTsKLSNkZWZpbmUgVUxQX1NFVFVQX1NJWkUgMHg2YwotI2RlZmluZSBRRVRIX1VMUF9TRVRVUF9ERVNUX0FERFIoYnVmZmVyKSAoYnVmZmVyKzB4MmMpCi0jZGVmaW5lIFFFVEhfVUxQX1NFVFVQX0NPTk5FQ1RJT05fVE9LRU4oYnVmZmVyKSAoYnVmZmVyKzB4NTEpCi0jZGVmaW5lIFFFVEhfVUxQX1NFVFVQX0ZJTFRFUl9UT0tFTihidWZmZXIpIChidWZmZXIrMHg1YSkKLSNkZWZpbmUgUUVUSF9VTFBfU0VUVVBfQ1VBKGJ1ZmZlcikgKGJ1ZmZlcisweDY4KQotI2RlZmluZSBRRVRIX1VMUF9TRVRVUF9SRUFMX0RFVkFERFIoYnVmZmVyKSAoYnVmZmVyKzB4NmEpCi0KLSNkZWZpbmUgUUVUSF9VTFBfU0VUVVBfUkVTUF9DT05ORUNUSU9OX1RPS0VOKGJ1ZmZlcikgXAotCQkoUERVX0VOQ0FQU1VMQVRJT04oYnVmZmVyKSsweDFhKQotCi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIERNX0FDVFtdOwotI2RlZmluZSBETV9BQ1RfU0laRSAweDU1Ci0jZGVmaW5lIFFFVEhfRE1fQUNUX0RFU1RfQUREUihidWZmZXIpIChidWZmZXIrMHgyYykKLSNkZWZpbmUgUUVUSF9ETV9BQ1RfQ09OTkVDVElPTl9UT0tFTihidWZmZXIpIChidWZmZXIrMHg1MSkKLQotCi0KLSNkZWZpbmUgUUVUSF9UUkFOU1BPUlRfSEVBREVSX1NFUV9OTyhidWZmZXIpIChidWZmZXIrNCkKLSNkZWZpbmUgUUVUSF9QRFVfSEVBREVSX1NFUV9OTyhidWZmZXIpIChidWZmZXIrMHgxYykKLSNkZWZpbmUgUUVUSF9QRFVfSEVBREVSX0FDS19TRVFfTk8oYnVmZmVyKSAoYnVmZmVyKzB4MjApCi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIElEWF9BQ1RJVkFURV9SRUFEW107Ci1leHRlcm4gdW5zaWduZWQgY2hhciBJRFhfQUNUSVZBVEVfV1JJVEVbXTsKLQotI2RlZmluZSBJRFhfQUNUSVZBVEVfU0laRQkweDIyCi0jZGVmaW5lIFFFVEhfSURYX0FDVF9JU1NVRVJfUk1fVE9LRU4oYnVmZmVyKSAoYnVmZmVyKzB4MGMpCi0jZGVmaW5lIFFFVEhfSURYX05PX1BPUlROQU1FX1JFUVVJUkVEKGJ1ZmZlcikgKChidWZmZXIpWzB4MGJdJjB4ODApCi0jZGVmaW5lIFFFVEhfSURYX0FDVF9GVU5DX0xFVkVMKGJ1ZmZlcikgKGJ1ZmZlcisweDEwKQotI2RlZmluZSBRRVRIX0lEWF9BQ1RfREFUQVNFVF9OQU1FKGJ1ZmZlcikgKGJ1ZmZlcisweDE2KQotI2RlZmluZSBRRVRIX0lEWF9BQ1RfUURJT19ERVZfQ1VBKGJ1ZmZlcikgKGJ1ZmZlcisweDFlKQotI2RlZmluZSBRRVRIX0lEWF9BQ1RfUURJT19ERVZfUkVBTEFERFIoYnVmZmVyKSAoYnVmZmVyKzB4MjApCi0jZGVmaW5lIFFFVEhfSVNfSURYX0FDVF9QT1NfUkVQTFkoYnVmZmVyKSAoKChidWZmZXIpWzB4MDhdJjMpPT0yKQotI2RlZmluZSBRRVRIX0lEWF9SRVBMWV9MRVZFTChidWZmZXIpIChidWZmZXIrMHgxMikKLSNkZWZpbmUgUUVUSF9JRFhfQUNUX0NBVVNFX0NPREUoYnVmZmVyKSAoYnVmZmVyKVsweDA5XQotCi0jZGVmaW5lIFBEVV9FTkNBUFNVTEFUSU9OKGJ1ZmZlcikgXAotCShidWZmZXIgKyAqKGJ1ZmZlciArICgqKGJ1ZmZlcisweDBiKSkgKyBcCi0JICooYnVmZmVyICsgKihidWZmZXIrMHgwYikrMHgxMSkgKzB4MDcpKQotCi0jZGVmaW5lIElTX0lQQShidWZmZXIpIFwKLQkoKGJ1ZmZlcikgJiYgXAotCSAoICooYnVmZmVyICsgKCgqKGJ1ZmZlcisweDBiKSkrNCkgKT09MHhjMSkgKQotCi0jZGVmaW5lIEFERFJfRlJBTUVfVFlQRV9ESVggMQotI2RlZmluZSBBRERSX0ZSQU1FX1RZUEVfODAyXzMgMgotI2RlZmluZSBBRERSX0ZSQU1FX1RZUEVfVFJfV0lUSE9VVF9TUiAweDEwCi0jZGVmaW5lIEFERFJfRlJBTUVfVFlQRV9UUl9XSVRIX1NSIDB4MjAKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZlY2QwMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0gKgotICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX2ZzLmMKLSAqCi0gKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAotICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgcmVsYXRlZCB0byBwcm9jZnMuCi0gKgotICogQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KLSNpbmNsdWRlICJxZXRoLmgiCi0jaW5jbHVkZSAicWV0aF9tcGMuaCIKLSNpbmNsdWRlICJxZXRoX2ZzLmgiCi0KLS8qKioqKiAvcHJvYy9xZXRoICoqKioqLwotI2RlZmluZSBRRVRIX1BST0NGSUxFX05BTUUgInFldGgiCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpxZXRoX3Byb2NmaWxlOwotCi1zdGF0aWMgaW50Ci1xZXRoX3Byb2NmaWxlX3NlcV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuKGRldiA/IDEgOiAwKTsKLX0KLQotc3RhdGljIHZvaWQgKgotcWV0aF9wcm9jZmlsZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOwotCWxvZmZfdCBuciA9IDA7Ci0KLQlpZiAoKm9mZnNldCA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCXdoaWxlICgxKSB7Ci0JCWRldiA9IGRyaXZlcl9maW5kX2RldmljZSgmcWV0aF9jY3dncm91cF9kcml2ZXIuZHJpdmVyLCBkZXYsCi0JCQkJCSBOVUxMLCBxZXRoX3Byb2NmaWxlX3NlcV9tYXRjaCk7Ci0JCWlmICgrK25yID09ICpvZmZzZXQpCi0JCQlicmVhazsKLQkJcHV0X2RldmljZShkZXYpOwotCX0KLQlyZXR1cm4gZGV2OwotfQotCi1zdGF0aWMgdm9pZAotcWV0aF9wcm9jZmlsZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQqIGl0KQotewotfQotCi1zdGF0aWMgdm9pZCAqCi1xZXRoX3Byb2NmaWxlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQsIGxvZmZfdCAqb2Zmc2V0KQotewotCXN0cnVjdCBkZXZpY2UgKnByZXYsICpuZXh0OwotCi0JaWYgKGl0ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcHJldiA9IE5VTEw7Ci0JZWxzZQotCQlwcmV2ID0gKHN0cnVjdCBkZXZpY2UgKikgaXQ7Ci0JbmV4dCA9IGRyaXZlcl9maW5kX2RldmljZSgmcWV0aF9jY3dncm91cF9kcml2ZXIuZHJpdmVyLAotCQkJCSAgcHJldiwgTlVMTCwgcWV0aF9wcm9jZmlsZV9zZXFfbWF0Y2gpOwotCSgqb2Zmc2V0KSsrOwotCXJldHVybiAodm9pZCAqKSBuZXh0OwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgotcWV0aF9nZXRfcm91dGVyX3N0cihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgaXB2KQotewotCWVudW0gcWV0aF9yb3V0aW5nX3R5cGVzIHJvdXRpbmdfdHlwZSA9IE5PX1JPVVRFUjsKLQotCWlmIChpcHYgPT0gNCkgewotCQlyb3V0aW5nX3R5cGUgPSBjYXJkLT5vcHRpb25zLnJvdXRlNC50eXBlOwotCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotCQlyb3V0aW5nX3R5cGUgPSBjYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlOwotI2Vsc2UKLQkJcmV0dXJuICJuL2EiOwotI2VuZGlmIC8qIENPTkZJR19RRVRIX0lQVjYgKi8KLQl9Ci0KLQlzd2l0Y2ggKHJvdXRpbmdfdHlwZSl7Ci0JY2FzZSBQUklNQVJZX1JPVVRFUjoKLQkJcmV0dXJuICJwcmkiOwotCWNhc2UgU0VDT05EQVJZX1JPVVRFUjoKLQkJcmV0dXJuICJzZWMiOwotCWNhc2UgTVVMVElDQVNUX1JPVVRFUjoKLQkJaWYgKGNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPT0gUUVUSF9CUk9BRENBU1RfV0lUSE9VVF9FQ0hPKQotCQkJcmV0dXJuICJtYysiOwotCQlyZXR1cm4gIm1jIjsKLQljYXNlIFBSSU1BUllfQ09OTkVDVE9SOgotCQlpZiAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8pCi0JCQlyZXR1cm4gInArYyI7Ci0JCXJldHVybiAicC5jIjsKLQljYXNlIFNFQ09OREFSWV9DT05ORUNUT1I6Ci0JCWlmIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID09IFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITykKLQkJCXJldHVybiAicytjIjsKLQkJcmV0dXJuICJzLmMiOwotCWRlZmF1bHQ6ICAgLyogTk9fUk9VVEVSICovCi0JCXJldHVybiAibm8iOwotCX0KLX0KLQotc3RhdGljIGludAotcWV0aF9wcm9jZmlsZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KQotewotCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCWNoYXIgdG1wWzEyXTsgLyogZm9yIHFldGhfZ2V0X3ByaW9xX3N0ciAqLwotCi0JaWYgKGl0ID09IFNFUV9TVEFSVF9UT0tFTil7Ci0JCXNlcV9wcmludGYocywgImRldmljZXMgICAgICAgICAgICAgICAgICAgIENIUElEIGludGVyZmFjZSAgIgotCQkgICAgICAgICAgICAgICJjYXJkdHlwZSAgICAgICBwb3J0IGNoa3N1bSBwcmlvLXEnaW5nIHJ0cjQgIgotCQkJICAgICAgInJ0cjYgZnN6ICAgY250XG4iKTsKLQkJc2VxX3ByaW50ZihzLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tLS0tLSAiCi0JCQkgICAgICAiLS0tLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0gLS0tLS0tLS0tLSAtLS0tICIKLQkJCSAgICAgICItLS0tIC0tLS0tIC0tLS0tXG4iKTsKLQl9IGVsc2UgewotCQlkZXZpY2UgPSAoc3RydWN0IGRldmljZSAqKSBpdDsKLQkJY2FyZCA9IGRldmljZS0+ZHJpdmVyX2RhdGE7Ci0JCXNlcV9wcmludGYocywgIiVzLyVzLyVzIHglMDJYICAgJS0xMHMgJS0xNHMgJS00aSAiLAotCQkJCUNBUkRfUkRFVl9JRChjYXJkKSwKLQkJCQlDQVJEX1dERVZfSUQoY2FyZCksCi0JCQkJQ0FSRF9EREVWX0lEKGNhcmQpLAotCQkJCWNhcmQtPmluZm8uY2hwaWQsCi0JCQkJUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwKLQkJCQlxZXRoX2dldF9jYXJkbmFtZV9zaG9ydChjYXJkKSwKLQkJCQljYXJkLT5pbmZvLnBvcnRubyk7Ci0JCWlmIChjYXJkLT5sYW5fb25saW5lKQotCQkJc2VxX3ByaW50ZihzLCAiJS02cyAlLTEwcyAlLTRzICUtNHMgJS01cyAlLTVpXG4iLAotCQkJCQlxZXRoX2dldF9jaGVja3N1bV9zdHIoY2FyZCksCi0JCQkJCXFldGhfZ2V0X3ByaW9xX3N0cihjYXJkLCB0bXApLAotCQkJCQlxZXRoX2dldF9yb3V0ZXJfc3RyKGNhcmQsIDQpLAotCQkJCQlxZXRoX2dldF9yb3V0ZXJfc3RyKGNhcmQsIDYpLAotCQkJCQlxZXRoX2dldF9idWZzaXplX3N0cihjYXJkKSwKLQkJCQkJY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQpOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKHMsICIgICsrKyBMQU4gT0ZGTElORSArKytcbiIpOwotCQlwdXRfZGV2aWNlKGRldmljZSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHFldGhfcHJvY2ZpbGVfc2VxX29wcyA9IHsKLQkuc3RhcnQgPSBxZXRoX3Byb2NmaWxlX3NlcV9zdGFydCwKLQkuc3RvcCAgPSBxZXRoX3Byb2NmaWxlX3NlcV9zdG9wLAotCS5uZXh0ICA9IHFldGhfcHJvY2ZpbGVfc2VxX25leHQsCi0JLnNob3cgID0gcWV0aF9wcm9jZmlsZV9zZXFfc2hvdywKLX07Ci0KLXN0YXRpYyBpbnQKLXFldGhfcHJvY2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnFldGhfcHJvY2ZpbGVfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFldGhfcHJvY2ZpbGVfZm9wcyA9IHsKLQkub3duZXIgICA9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgID0gcWV0aF9wcm9jZmlsZV9vcGVuLAotCS5yZWFkICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qKioqKiAvcHJvYy9xZXRoX3BlcmYgKioqKiovCi0jZGVmaW5lIFFFVEhfUEVSRl9QUk9DRklMRV9OQU1FICJxZXRoX3BlcmYiCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpxZXRoX3BlcmZfcHJvY2ZpbGU7Ci0KLXN0YXRpYyBpbnQKLXFldGhfcGVyZl9wcm9jZmlsZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KQotewotCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwotCi0KLQlpZiAoaXQgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gMDsKLQotCWRldmljZSA9IChzdHJ1Y3QgZGV2aWNlICopIGl0OwotCWNhcmQgPSBkZXZpY2UtPmRyaXZlcl9kYXRhOwotCXNlcV9wcmludGYocywgIkZvciBjYXJkIHdpdGggZGV2bm9zICVzLyVzLyVzICglcyk6XG4iLAotCQkJQ0FSRF9SREVWX0lEKGNhcmQpLAotCQkJQ0FSRF9XREVWX0lEKGNhcmQpLAotCQkJQ0FSRF9EREVWX0lEKGNhcmQpLAotCQkJUUVUSF9DQVJEX0lGTkFNRShjYXJkKQotCQkgICk7Ci0JaWYgKCFjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQlzZXFfcHJpbnRmKHMsICJQZXJmb3JtYW5jZSBzdGF0aXN0aWNzIGFyZSBkZWFjdGl2YXRlZC5cbiIpOwotCXNlcV9wcmludGYocywgIiAgU2tiJ3MvYnVmZmVycyByZWNlaXZlZCAgICAgICAgICAgICAgICAgOiAlbHUvJXVcbiIKLQkJICAgICAgIiAgU2tiJ3MvYnVmZmVycyBzZW50ICAgICAgICAgICAgICAgICAgICAgOiAlbHUvJXVcblxuIiwKLQkJICAgICAgICBjYXJkLT5zdGF0cy5yeF9wYWNrZXRzIC0KLQkJCQljYXJkLT5wZXJmX3N0YXRzLmluaXRpYWxfcnhfcGFja2V0cywKLQkJCWNhcmQtPnBlcmZfc3RhdHMuYnVmc19yZWMsCi0JCSAgICAgICAgY2FyZC0+c3RhdHMudHhfcGFja2V0cyAtCi0JCQkJY2FyZC0+cGVyZl9zdGF0cy5pbml0aWFsX3R4X3BhY2tldHMsCi0JCQljYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudAotCQkgICk7Ci0Jc2VxX3ByaW50ZihzLCAiICBTa2Incy9idWZmZXJzIHNlbnQgd2l0aG91dCBwYWNraW5nICAgICA6ICVsdS8ldVxuIgotCQkgICAgICAiICBTa2Incy9idWZmZXJzIHNlbnQgd2l0aCBwYWNraW5nICAgICAgICA6ICV1LyV1XG5cbiIsCi0JCSAgIGNhcmQtPnN0YXRzLnR4X3BhY2tldHMgLSBjYXJkLT5wZXJmX3N0YXRzLmluaXRpYWxfdHhfcGFja2V0cwotCQkJCQkgIC0gY2FyZC0+cGVyZl9zdGF0cy5za2JzX3NlbnRfcGFjaywKLQkJICAgY2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnQgLSBjYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudF9wYWNrLAotCQkgICBjYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrLAotCQkgICBjYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudF9wYWNrCi0JCSAgKTsKLQlzZXFfcHJpbnRmKHMsICIgIFNrYnMgc2VudCBpbiBTRyBtb2RlICAgICAgICAgICAgICAgICAgIDogJXVcbiIKLQkJICAgICAgIiAgU2tiIGZyYWdtZW50cyBzZW50IGluIFNHIG1vZGUgICAgICAgICAgOiAldVxuXG4iLAotCQkgICAgICBjYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCwKLQkJICAgICAgY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50KTsKLQlzZXFfcHJpbnRmKHMsICIgIFNrYnMgcmVjZWl2ZWQgaW4gU0cgbW9kZSAgICAgICAgICAgICAgIDogJXVcbiIKLQkJICAgICAgIiAgU2tiIGZyYWdtZW50cyByZWNlaXZlZCBpbiBTRyBtb2RlICAgICAgOiAldVxuIgotCQkgICAgICAiICBQYWdlIGFsbG9jYXRpb25zIGZvciByeCBTRyBtb2RlICAgICAgICA6ICV1XG5cbiIsCi0JCSAgICAgIGNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19yeCwKLQkJICAgICAgY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19yeCwKLQkJICAgICAgY2FyZC0+cGVyZl9zdGF0cy5zZ19hbGxvY19wYWdlX3J4KTsKLQlzZXFfcHJpbnRmKHMsICIgIGxhcmdlX3NlbmQgdHggKGluIEtieXRlcykgICAgICAgICAgICAgIDogJXVcbiIKLQkJICAgICAgIiAgbGFyZ2Vfc2VuZCBjb3VudCAgICAgICAgICAgICAgICAgICAgICAgOiAldVxuXG4iLAotCQkgICAgICBjYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgPj4gMTAsCi0JCSAgICAgIGNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQpOwotCXNlcV9wcmludGYocywgIiAgUGFja2luZyBzdGF0ZSBjaGFuZ2VzIG5vIHBrZy4tPnBhY2tpbmcgOiAldS8ldVxuIgotCQkgICAgICAiICBXYXRlcm1hcmtzIEwvSCAgICAgICAgICAgICAgICAgICAgICAgICA6ICVpLyVpXG4iCi0JCSAgICAgICIgIEN1cnJlbnQgYnVmZmVyIHVzYWdlIChvdXRib3VuZCBxJ3MpICAgIDogIgotCQkgICAgICAiJWkvJWkvJWkvJWlcblxuIiwKLQkJICAgICAgICBjYXJkLT5wZXJmX3N0YXRzLnNjX2RwX3AsIGNhcmQtPnBlcmZfc3RhdHMuc2NfcF9kcCwKLQkJCVFFVEhfTE9XX1dBVEVSTUFSS19QQUNLLCBRRVRIX0hJR0hfV0FURVJNQVJLX1BBQ0ssCi0JCQlhdG9taWNfcmVhZCgmY2FyZC0+cWRpby5vdXRfcXNbMF0tPnVzZWRfYnVmZmVycyksCi0JCQkoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID4gMSk/Ci0JCQkJYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8ub3V0X3FzWzFdLT51c2VkX2J1ZmZlcnMpCi0JCQkJOiAwLAotCQkJKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA+IDIpPwotCQkJCWF0b21pY19yZWFkKCZjYXJkLT5xZGlvLm91dF9xc1syXS0+dXNlZF9idWZmZXJzKQotCQkJCTogMCwKLQkJCShjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPiAzKT8KLQkJCQlhdG9taWNfcmVhZCgmY2FyZC0+cWRpby5vdXRfcXNbM10tPnVzZWRfYnVmZmVycykKLQkJCQk6IDAKLQkJICApOwotCXNlcV9wcmludGYocywgIiAgSW5ib3VuZCBoYW5kbGVyIHRpbWUgKGluIHVzKSAgICAgICAgICAgOiAldVxuIgotCQkgICAgICAiICBJbmJvdW5kIGhhbmRsZXIgY291bnQgICAgICAgICAgICAgICAgICA6ICV1XG4iCi0JCSAgICAgICIgIEluYm91bmQgZG9fUURJTyB0aW1lIChpbiB1cykgICAgICAgICAgIDogJXVcbiIKLQkJICAgICAgIiAgSW5ib3VuZCBkb19RRElPIGNvdW50ICAgICAgICAgICAgICAgICAgOiAldVxuXG4iCi0JCSAgICAgICIgIE91dGJvdW5kIGhhbmRsZXIgdGltZSAoaW4gdXMpICAgICAgICAgIDogJXVcbiIKLQkJICAgICAgIiAgT3V0Ym91bmQgaGFuZGxlciBjb3VudCAgICAgICAgICAgICAgICAgOiAldVxuXG4iCi0JCSAgICAgICIgIE91dGJvdW5kIHRpbWUgKGluIHVzLCBpbmNsIFFESU8pICAgICAgIDogJXVcbiIKLQkJICAgICAgIiAgT3V0Ym91bmQgY291bnQgICAgICAgICAgICAgICAgICAgICAgICAgOiAldVxuIgotCQkgICAgICAiICBPdXRib3VuZCBkb19RRElPIHRpbWUgKGluIHVzKSAgICAgICAgICA6ICV1XG4iCi0JCSAgICAgICIgIE91dGJvdW5kIGRvX1FESU8gY291bnQgICAgICAgICAgICAgICAgIDogJXVcblxuIiwKLQkJICAgICAgICBjYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfdGltZSwKLQkJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9jbnQsCi0JCSAgICAgICAgY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fdGltZSwKLQkJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX2NudCwKLQkJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl90aW1lLAotCQkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyX2NudCwKLQkJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfdGltZSwKLQkJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfY250LAotCQkgICAgICAgIGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb190aW1lLAotCQkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX2NudAotCQkgICk7Ci0JcHV0X2RldmljZShkZXZpY2UpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHFldGhfcGVyZl9wcm9jZmlsZV9zZXFfb3BzID0gewotCS5zdGFydCA9IHFldGhfcHJvY2ZpbGVfc2VxX3N0YXJ0LAotCS5zdG9wICA9IHFldGhfcHJvY2ZpbGVfc2VxX3N0b3AsCi0JLm5leHQgID0gcWV0aF9wcm9jZmlsZV9zZXFfbmV4dCwKLQkuc2hvdyAgPSBxZXRoX3BlcmZfcHJvY2ZpbGVfc2VxX3Nob3csCi19OwotCi1zdGF0aWMgaW50Ci1xZXRoX3BlcmZfcHJvY2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnFldGhfcGVyZl9wcm9jZmlsZV9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWV0aF9wZXJmX3Byb2NmaWxlX2ZvcHMgPSB7Ci0JLm93bmVyICAgPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICA9IHFldGhfcGVyZl9wcm9jZmlsZV9vcGVuLAotCS5yZWFkICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLWludCBfX2luaXQKLXFldGhfY3JlYXRlX3Byb2Nmc19lbnRyaWVzKHZvaWQpCi17Ci0JcWV0aF9wcm9jZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFFFVEhfUFJPQ0ZJTEVfTkFNRSwKLQkJCQkJICAgU19JRlJFRyB8IDA0NDQsIE5VTEwpOwotCWlmIChxZXRoX3Byb2NmaWxlKQotCQlxZXRoX3Byb2NmaWxlLT5wcm9jX2ZvcHMgPSAmcWV0aF9wcm9jZmlsZV9mb3BzOwotCi0JcWV0aF9wZXJmX3Byb2NmaWxlID0gY3JlYXRlX3Byb2NfZW50cnkoUUVUSF9QRVJGX1BST0NGSUxFX05BTUUsCi0JCQkJCSAgIFNfSUZSRUcgfCAwNDQ0LCBOVUxMKTsKLQlpZiAocWV0aF9wZXJmX3Byb2NmaWxlKQotCQlxZXRoX3BlcmZfcHJvY2ZpbGUtPnByb2NfZm9wcyA9ICZxZXRoX3BlcmZfcHJvY2ZpbGVfZm9wczsKLQotCWlmIChxZXRoX3Byb2NmaWxlICYmCi0JICAgIHFldGhfcGVyZl9wcm9jZmlsZSkKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVOT01FTTsKLX0KLQotdm9pZCBfX2V4aXQKLXFldGhfcmVtb3ZlX3Byb2Nmc19lbnRyaWVzKHZvaWQpCi17Ci0JaWYgKHFldGhfcHJvY2ZpbGUpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFFFVEhfUFJPQ0ZJTEVfTkFNRSwgTlVMTCk7Ci0JaWYgKHFldGhfcGVyZl9wcm9jZmlsZSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoUUVUSF9QRVJGX1BST0NGSUxFX05BTUUsIE5VTEwpOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYzNmM2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg1OCArMCwwIEBACi0vKgotICoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwotICoKLSAqIExpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0Ci0gKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSByZWxhdGVkIHRvIHN5c2ZzLgotICoKLSAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCi0gKgotICogQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKiAJICAgICAgRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+Ci0gKgotICovCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KLSNpbmNsdWRlIDxhc20vZWJjZGljLmg+Ci0KLSNpbmNsdWRlICJxZXRoLmgiCi0jaW5jbHVkZSAicWV0aF9tcGMuaCIKLSNpbmNsdWRlICJxZXRoX2ZzLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIC9zeXMtZnMgc3R1ZmYgVU5ERVIgREVWRUxPUE1FTlQgISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vbG93L2hpZ2ggd2F0ZXJtYXJrCi0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoIChjYXJkLT5zdGF0ZSkgewotCWNhc2UgQ0FSRF9TVEFURV9ET1dOOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJET1dOXG4iKTsKLQljYXNlIENBUkRfU1RBVEVfSEFSRFNFVFVQOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJIQVJEU0VUVVBcbiIpOwotCWNhc2UgQ0FSRF9TVEFURV9TT0ZUU0VUVVA6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlNPRlRTRVRVUFxuIik7Ci0JY2FzZSBDQVJEX1NUQVRFX1VQOgotCQlpZiAoY2FyZC0+bGFuX29ubGluZSkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiVVAgKExBTiBPTkxJTkUpXG4iKTsKLQkJZWxzZQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiVVAgKExBTiBPRkZMSU5FKVxuIik7Ci0JY2FzZSBDQVJEX1NUQVRFX1JFQ09WRVI6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlJFQ09WRVJcbiIpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlVOS05PV05cbiIpOwotCX0KLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHN0YXRlLCAwNDQ0LCBxZXRoX2Rldl9zdGF0ZV9zaG93LCBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2NocGlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJYXG4iLCBjYXJkLT5pbmZvLmNocGlkKTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGNocGlkLCAwNDQ0LCBxZXRoX2Rldl9jaHBpZF9zaG93LCBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2lmX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihpZl9uYW1lLCAwNDQ0LCBxZXRoX2Rldl9pZl9uYW1lX3Nob3csIE5VTEwpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfY2FyZF90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoY2FyZCkpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoY2FyZF90eXBlLCAwNDQ0LCBxZXRoX2Rldl9jYXJkX3R5cGVfc2hvdywgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9wb3J0bm9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5pbmZvLnBvcnRubyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9wb3J0bm9fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqdG1wOwotCXVuc2lnbmVkIGludCBwb3J0bm87Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCi0JICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JcG9ydG5vID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7Ci0JaWYgKHBvcnRubyA+IE1BWF9QT1JUTk8pewotCQlQUklOVF9XQVJOKCJwb3J0bm8gMHglWCBpcyBvdXQgb2YgcmFuZ2VcbiIsIHBvcnRubyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNhcmQtPmluZm8ucG9ydG5vID0gcG9ydG5vOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHBvcnRubywgMDY0NCwgcWV0aF9kZXZfcG9ydG5vX3Nob3csIHFldGhfZGV2X3BvcnRub19zdG9yZSk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9wb3J0bmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQljaGFyIHBvcnRuYW1lWzldID0gezAsIH07Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNhcmQtPmluZm8ucG9ydG5hbWVfcmVxdWlyZWQpIHsKLQkJbWVtY3B5KHBvcnRuYW1lLCBjYXJkLT5pbmZvLnBvcnRuYW1lICsgMSwgOCk7Ci0JCUVCQ0FTQyhwb3J0bmFtZSwgOCk7Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBwb3J0bmFtZSk7Ci0JfSBlbHNlCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vIHBvcnRuYW1lIHJlcXVpcmVkXG4iKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3BvcnRuYW1lX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWNoYXIgKnRtcDsKLQlpbnQgaTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKLQkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICgoc3RybGVuKHRtcCkgPiA4KSB8fCAoc3RybGVuKHRtcCkgPT0gMCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2FyZC0+aW5mby5wb3J0bmFtZVswXSA9IHN0cmxlbih0bXApOwotCS8qIGZvciBiZWF1dHkgcmVhc29ucyAqLwotCWZvciAoaSA9IDE7IGkgPCA5OyBpKyspCi0JCWNhcmQtPmluZm8ucG9ydG5hbWVbaV0gPSAnICc7Ci0Jc3RyY3B5KGNhcmQtPmluZm8ucG9ydG5hbWUgKyAxLCB0bXApOwotCUFTQ0VCQyhjYXJkLT5pbmZvLnBvcnRuYW1lICsgMSwgOCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3J0bmFtZSwgMDY0NCwgcWV0aF9kZXZfcG9ydG5hbWVfc2hvdywKLQkJcWV0aF9kZXZfcG9ydG5hbWVfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfY2hlY2tzdW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXMgY2hlY2tzdW1taW5nXG4iLCBxZXRoX2dldF9jaGVja3N1bV9zdHIoY2FyZCkpOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfY2hlY2tzdW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqdG1wOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgotCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7Ci0JaWYgKCFzdHJjbXAodG1wLCAic3dfY2hlY2tzdW1taW5nIikpCi0JCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IFNXX0NIRUNLU1VNTUlORzsKLQllbHNlIGlmICghc3RyY21wKHRtcCwgImh3X2NoZWNrc3VtbWluZyIpKQotCQljYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPSBIV19DSEVDS1NVTU1JTkc7Ci0JZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19jaGVja3N1bW1pbmciKSkKLQkJY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gTk9fQ0hFQ0tTVU1NSU5HOwotCWVsc2UgewotCQlQUklOVF9XQVJOKCJVbmtub3duIGNoZWNrc3VtbWluZyB0eXBlICclcydcbiIsIHRtcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihjaGVja3N1bW1pbmcsIDA2NDQsIHFldGhfZGV2X2NoZWNrc3VtX3Nob3csCi0JCXFldGhfZGV2X2NoZWNrc3VtX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3ByaW9xaW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAoY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nKSB7Ci0JY2FzZSBRRVRIX1BSSU9fUV9JTkdfUFJFQzoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJieSBwcmVjZWRlbmNlIik7Ci0JY2FzZSBRRVRIX1BSSU9fUV9JTkdfVE9TOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgImJ5IHR5cGUgb2Ygc2VydmljZSIpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFsd2F5cyBxdWV1ZSAlaVxuIiwKLQkJCSAgICAgICBjYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlKTsKLQl9Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9wcmlvcWluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQljaGFyICp0bXA7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCi0JICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogY2hlY2sgaWYgMTkyMCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgLAotCSAqIGlmIHRob3VnaCB3ZSBoYXZlIHRvIHBlcm1pdCBwcmlvcml0eSBxdWV1ZWluZwotCSAqLwotCWlmIChjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPT0gMSkgewotCQlQUklOVF9XQVJOKCJQcmlvcml0eSBxdWV1ZWluZyBkaXNhYmxlZCBkdWUgIgotCQkJICAgInRvIGhhcmR3YXJlIGxpbWl0YXRpb25zIVxuIik7Ci0JCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfUFJJT1FfREVGQVVMVDsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgInByaW9fcXVldWVpbmdfcHJlYyIpKQotCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX1BSSU9fUV9JTkdfUFJFQzsKLQllbHNlIGlmICghc3RyY21wKHRtcCwgInByaW9fcXVldWVpbmdfdG9zIikpCi0JCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfUFJJT19RX0lOR19UT1M7Ci0JZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjAiKSkgewotCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7Ci0JCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjEiKSkgewotCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7Ci0JCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAxOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjIiKSkgewotCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7Ci0JCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAyOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjMiKSkgewotCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7Ci0JCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAzOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nIikpIHsKLQkJY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nID0gUUVUSF9OT19QUklPX1FVRVVFSU5HOwotCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gUUVUSF9ERUZBVUxUX1FVRVVFOwotCX0gZWxzZSB7Ci0JCVBSSU5UX1dBUk4oIlVua25vd24gcXVldWVpbmcgdHlwZSAnJXMnXG4iLCB0bXApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocHJpb3JpdHlfcXVldWVpbmcsIDA2NDQsIHFldGhfZGV2X3ByaW9xaW5nX3Nob3csCi0JCXFldGhfZGV2X3ByaW9xaW5nX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2J1ZmNudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQpOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfYnVmY250X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWNoYXIgKnRtcDsKLQlpbnQgY250LCBvbGRfY250OwotCWludCByYzsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKLQkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlvbGRfY250ID0gY2FyZC0+cWRpby5pbl9idWZfcG9vbC5idWZfY291bnQ7Ci0JY250ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxMCk7Ci0JY250ID0gKGNudCA8IFFFVEhfSU5fQlVGX0NPVU5UX01JTikgPyBRRVRIX0lOX0JVRl9DT1VOVF9NSU4gOgotCQkoKGNudCA+IFFFVEhfSU5fQlVGX0NPVU5UX01BWCkgPyBRRVRIX0lOX0JVRl9DT1VOVF9NQVggOiBjbnQpOwotCWlmIChvbGRfY250ICE9IGNudCkgewotCQlpZiAoKHJjID0gcWV0aF9yZWFsbG9jX2J1ZmZlcl9wb29sKGNhcmQsIGNudCkpKQotCQkJUFJJTlRfV0FSTigiRXJyb3IgKCVkKSB3aGlsZSBzZXR0aW5nICIKLQkJCQkgICAiYnVmZmVyIGNvdW50LlxuIiwgcmMpOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihidWZmZXJfY291bnQsIDA2NDQsIHFldGhfZGV2X2J1ZmNudF9zaG93LAotCQlxZXRoX2Rldl9idWZjbnRfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcm91dGVfc2hvdyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9yb3V0aW5nX2luZm8gKnJvdXRlLAotCQkgICAgY2hhciAqYnVmKQotewotCXN3aXRjaCAocm91dGUtPnR5cGUpIHsKLQljYXNlIFBSSU1BUllfUk9VVEVSOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgInByaW1hcnkgcm91dGVyIik7Ci0JY2FzZSBTRUNPTkRBUllfUk9VVEVSOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgInNlY29uZGFyeSByb3V0ZXIiKTsKLQljYXNlIE1VTFRJQ0FTVF9ST1VURVI6Ci0JCWlmIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID09IFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITykKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAibXVsdGljYXN0IHJvdXRlcisiKTsKLQkJZWxzZQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJtdWx0aWNhc3Qgcm91dGVyIik7Ci0JY2FzZSBQUklNQVJZX0NPTk5FQ1RPUjoKLQkJaWYgKGNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPT0gUUVUSF9CUk9BRENBU1RfV0lUSE9VVF9FQ0hPKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJwcmltYXJ5IGNvbm5lY3RvcisiKTsKLQkJZWxzZQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJwcmltYXJ5IGNvbm5lY3RvciIpOwotCWNhc2UgU0VDT05EQVJZX0NPTk5FQ1RPUjoKLQkJaWYgKGNhcmQtPmluZm8uYnJvYWRjYXN0X2NhcGFibGUgPT0gUUVUSF9CUk9BRENBU1RfV0lUSE9VVF9FQ0hPKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJzZWNvbmRhcnkgY29ubmVjdG9yKyIpOwotCQllbHNlCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgInNlY29uZGFyeSBjb25uZWN0b3IiKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIm5vIik7Ci0JfQotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcm91dGU0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBxZXRoX2Rldl9yb3V0ZV9zaG93KGNhcmQsICZjYXJkLT5vcHRpb25zLnJvdXRlNCwgYnVmKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3JvdXRlX3N0b3JlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JvdXRpbmdfaW5mbyAqcm91dGUsCi0JCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWVudW0gcWV0aF9yb3V0aW5nX3R5cGVzIG9sZF9yb3V0ZV90eXBlID0gcm91dGUtPnR5cGU7Ci0JY2hhciAqdG1wOwotCWludCByYzsKLQotCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7Ci0KLQlpZiAoIXN0cmNtcCh0bXAsICJub19yb3V0ZXIiKSl7Ci0JCXJvdXRlLT50eXBlID0gTk9fUk9VVEVSOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJwcmltYXJ5X2Nvbm5lY3RvciIpKSB7Ci0JCXJvdXRlLT50eXBlID0gUFJJTUFSWV9DT05ORUNUT1I7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgInNlY29uZGFyeV9jb25uZWN0b3IiKSkgewotCQlyb3V0ZS0+dHlwZSA9IFNFQ09OREFSWV9DT05ORUNUT1I7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgInByaW1hcnlfcm91dGVyIikpIHsKLQkJcm91dGUtPnR5cGUgPSBQUklNQVJZX1JPVVRFUjsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAic2Vjb25kYXJ5X3JvdXRlciIpKSB7Ci0JCXJvdXRlLT50eXBlID0gU0VDT05EQVJZX1JPVVRFUjsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAibXVsdGljYXN0X3JvdXRlciIpKSB7Ci0JCXJvdXRlLT50eXBlID0gTVVMVElDQVNUX1JPVVRFUjsKLQl9IGVsc2UgewotCQlQUklOVF9XQVJOKCJJbnZhbGlkIHJvdXRpbmcgdHlwZSAnJXMnLlxuIiwgdG1wKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICgoKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfU09GVFNFVFVQKSB8fAotCSAgICAgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApKSAmJgotCSAgICAob2xkX3JvdXRlX3R5cGUgIT0gcm91dGUtPnR5cGUpKXsKLQkJaWYgKHByb3QgPT0gUUVUSF9QUk9UX0lQVjQpCi0JCQlyYyA9IHFldGhfc2V0cm91dGluZ192NChjYXJkKTsKLQkJZWxzZSBpZiAocHJvdCA9PSBRRVRIX1BST1RfSVBWNikKLQkJCXJjID0gcWV0aF9zZXRyb3V0aW5nX3Y2KGNhcmQpOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9yb3V0ZTRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHFldGhfZGV2X3JvdXRlX3N0b3JlKGNhcmQsICZjYXJkLT5vcHRpb25zLnJvdXRlNCwKLQkJCSAgICAgICAgICAgIFFFVEhfUFJPVF9JUFY0LCBidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHJvdXRlNCwgMDY0NCwgcWV0aF9kZXZfcm91dGU0X3Nob3csIHFldGhfZGV2X3JvdXRlNF9zdG9yZSk7Ci0KLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcm91dGU2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIm4vYSIpOwotCi0JcmV0dXJuIHFldGhfZGV2X3JvdXRlX3Nob3coY2FyZCwgJmNhcmQtPm9wdGlvbnMucm91dGU2LCBidWYpOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcm91dGU2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKXsKLQkJUFJJTlRfV0FSTigiSVB2NiBub3Qgc3VwcG9ydGVkIGZvciBpbnRlcmZhY2UgJXMuXG4iCi0JCQkgICAiUm91dGluZyBzdGF0dXMgbm8gY2hhbmdlZC5cbiIsCi0JCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gcWV0aF9kZXZfcm91dGVfc3RvcmUoY2FyZCwgJmNhcmQtPm9wdGlvbnMucm91dGU2LAotCQkJICAgICAgICAgICAgUUVUSF9QUk9UX0lQVjYsIGJ1ZiwgY291bnQpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocm91dGU2LCAwNjQ0LCBxZXRoX2Rldl9yb3V0ZTZfc2hvdywgcWV0aF9kZXZfcm91dGU2X3N0b3JlKTsKLSNlbmRpZgotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfYWRkX2hobGVuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5vcHRpb25zLmFkZF9oaGxlbik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9hZGRfaGhsZW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqdG1wOwotCWludCBpOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgotCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDEwKTsKLQlpZiAoKGkgPCAwKSB8fCAoaSA+IE1BWF9BRERfSEhMRU4pKSB7Ci0JCVBSSU5UX1dBUk4oImFkZF9oaGxlbiBvdXQgb2YgcmFuZ2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JY2FyZC0+b3B0aW9ucy5hZGRfaGhsZW4gPSBpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoYWRkX2hobGVuLCAwNjQ0LCBxZXRoX2Rldl9hZGRfaGhsZW5fc2hvdywKLQkJICAgcWV0aF9kZXZfYWRkX2hobGVuX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Zha2VfbGxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMuZmFrZV9sbD8gMTowKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Zha2VfbGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqdG1wOwotCWludCBpOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgotCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKLQlpZiAoKGkgIT0gMCkgJiYgKGkgIT0gMSkpIHsKLQkJUFJJTlRfV0FSTigiZmFrZV9sbDogd3JpdGUgMCBvciAxIHRvIHRoaXMgZmlsZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JY2FyZC0+b3B0aW9ucy5mYWtlX2xsID0gaTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihmYWtlX2xsLCAwNjQ0LCBxZXRoX2Rldl9mYWtlX2xsX3Nob3csCi0JCSAgIHFldGhfZGV2X2Zha2VfbGxfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfZmFrZV9icm9hZGNhc3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMuZmFrZV9icm9hZGNhc3Q/IDE6MCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9mYWtlX2Jyb2FkY2FzdF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQljaGFyICp0bXA7Ci0JaW50IGk7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCi0JICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnRtcCwgMTYpOwotCWlmICgoaSA9PSAwKSB8fCAoaSA9PSAxKSkKLQkJY2FyZC0+b3B0aW9ucy5mYWtlX2Jyb2FkY2FzdCA9IGk7Ci0JZWxzZSB7Ci0JCVBSSU5UX1dBUk4oImZha2VfYnJvYWRjYXN0OiB3cml0ZSAwIG9yIDEgdG8gdGhpcyBmaWxlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihmYWtlX2Jyb2FkY2FzdCwgMDY0NCwgcWV0aF9kZXZfZmFrZV9icm9hZGNhc3Rfc2hvdywKLQkJICAgcWV0aF9kZXZfZmFrZV9icm9hZGNhc3Rfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQljaGFyICp0bXA7Ci0JaW50IGk7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7Ci0JaWYgKGkgPT0gMSkKLQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKHJlY292ZXIsIDAyMDAsIE5VTEwsIHFldGhfZGV2X3JlY292ZXJfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfYnJvYWRjYXN0X21vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCEoKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0hTVFIpIHx8Ci0JICAgICAgKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0xBTkVfVFIpKSkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAibi9hXG4iKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY2FyZC0+b3B0aW9ucy5icm9hZGNhc3RfbW9kZSA9PQotCQkJCSAgICAgUUVUSF9UUl9CUk9BRENBU1RfQUxMUklOR1MpPwotCQkgICAgICAgImFsbCByaW5ncyI6ImxvY2FsIik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9icm9hZGNhc3RfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQljaGFyICp0bXA7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCi0JICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKCEoKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0hTVFIpIHx8Ci0JICAgICAgKGNhcmQtPmluZm8ubGlua190eXBlID09IFFFVEhfTElOS19UWVBFX0xBTkVfVFIpKSl7Ci0JCVBSSU5UX1dBUk4oIkRldmljZSBpcyBub3QgYSB0b2tlbnJpbmcgZGV2aWNlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7Ci0KLQlpZiAoIXN0cmNtcCh0bXAsICJsb2NhbCIpKXsKLQkJY2FyZC0+b3B0aW9ucy5icm9hZGNhc3RfbW9kZSA9IFFFVEhfVFJfQlJPQURDQVNUX0xPQ0FMOwotCQlyZXR1cm4gY291bnQ7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgImFsbF9yaW5ncyIpKSB7Ci0JCWNhcmQtPm9wdGlvbnMuYnJvYWRjYXN0X21vZGUgPSBRRVRIX1RSX0JST0FEQ0FTVF9BTExSSU5HUzsKLQkJcmV0dXJuIGNvdW50OwotCX0gZWxzZSB7Ci0JCVBSSU5UX1dBUk4oImJyb2FkY2FzdF9tb2RlOiBpbnZhbGlkIG1vZGUgJXMhXG4iLAotCQkJICAgdG1wKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGJyb2FkY2FzdF9tb2RlLCAwNjQ0LCBxZXRoX2Rldl9icm9hZGNhc3RfbW9kZV9zaG93LAotCQkgICBxZXRoX2Rldl9icm9hZGNhc3RfbW9kZV9zdG9yZSk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9jYW5vbmljYWxfbWFjYWRkcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoISgoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfSFNUUikgfHwKLQkgICAgICAoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfTEFORV9UUikpKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJuL2FcbiIpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIChjYXJkLT5vcHRpb25zLm1hY2FkZHJfbW9kZSA9PQotCQkJCSAgICAgUUVUSF9UUl9NQUNBRERSX0NBTk9OSUNBTCk/IDE6MCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9jYW5vbmljYWxfbWFjYWRkcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCi0JCQkJICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqdG1wOwotCWludCBpOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgotCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmICghKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9IU1RSKSB8fAotCSAgICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSkpewotCQlQUklOVF9XQVJOKCJEZXZpY2UgaXMgbm90IGEgdG9rZW5yaW5nIGRldmljZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7Ci0JaWYgKChpID09IDApIHx8IChpID09IDEpKQotCQljYXJkLT5vcHRpb25zLm1hY2FkZHJfbW9kZSA9IGk/Ci0JCQlRRVRIX1RSX01BQ0FERFJfQ0FOT05JQ0FMIDoKLQkJCVFFVEhfVFJfTUFDQUREUl9OT05DQU5PTklDQUw7Ci0JZWxzZSB7Ci0JCVBSSU5UX1dBUk4oImNhbm9uaWNhbF9tYWNhZGRyOiB3cml0ZSAwIG9yIDEgdG8gdGhpcyBmaWxlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihjYW5vbmljYWxfbWFjYWRkciwgMDY0NCwgcWV0aF9kZXZfY2Fub25pY2FsX21hY2FkZHJfc2hvdywKLQkJICAgcWV0aF9kZXZfY2Fub25pY2FsX21hY2FkZHJfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfbGF5ZXIyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5vcHRpb25zLmxheWVyMiA/IDE6MCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9sYXllcjJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqdG1wOwotCWludCBpOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewotICAgICAgICAgICAgICAgIFBSSU5UX1dBUk4oIkxheWVyMiBvbiBIaXBlcnNvY2tldHMgaXMgbm90IHN1cHBvcnRlZCEgXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOwotICAgICAgICB9Ci0KLQlpZiAoKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCi0JICAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7Ci0JaWYgKChpID09IDApIHx8IChpID09IDEpKQotCQljYXJkLT5vcHRpb25zLmxheWVyMiA9IGk7Ci0JZWxzZSB7Ci0JCVBSSU5UX1dBUk4oImxheWVyMjogd3JpdGUgMCBvciAxIHRvIHRoaXMgZmlsZSFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobGF5ZXIyLCAwNjQ0LCBxZXRoX2Rldl9sYXllcjJfc2hvdywKLQkJICAgcWV0aF9kZXZfbGF5ZXIyX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3BlcmZvcm1hbmNlX3N0YXRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzID8gMTowKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3BlcmZvcm1hbmNlX3N0YXRzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWNoYXIgKnRtcDsKLQlpbnQgaTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7Ci0JaWYgKChpID09IDApIHx8IChpID09IDEpKSB7Ci0JCWlmIChpID09IGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCi0JCQlyZXR1cm4gY291bnQ7Ci0JCWNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMgPSBpOwotCQlpZiAoaSA9PSAwKQotCQkJbWVtc2V0KCZjYXJkLT5wZXJmX3N0YXRzLCAwLAotCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9wZXJmX3N0YXRzKSk7Ci0JCWNhcmQtPnBlcmZfc3RhdHMuaW5pdGlhbF9yeF9wYWNrZXRzID0gY2FyZC0+c3RhdHMucnhfcGFja2V0czsKLQkJY2FyZC0+cGVyZl9zdGF0cy5pbml0aWFsX3R4X3BhY2tldHMgPSBjYXJkLT5zdGF0cy50eF9wYWNrZXRzOwotCX0gZWxzZSB7Ci0JCVBSSU5UX1dBUk4oInBlcmZvcm1hbmNlX3N0YXRzOiB3cml0ZSAwIG9yIDEgdG8gdGhpcyBmaWxlIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwZXJmb3JtYW5jZV9zdGF0cywgMDY0NCwgcWV0aF9kZXZfcGVyZm9ybWFuY2Vfc3RhdHNfc2hvdywKLQkJICAgcWV0aF9kZXZfcGVyZm9ybWFuY2Vfc3RhdHNfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfbGFyZ2Vfc2VuZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgewotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX05POgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIm5vIik7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfRUREUDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJFRERQIik7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfVFNPOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIlRTTyIpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiTi9BIik7Ci0JfQotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfbGFyZ2Vfc2VuZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB0eXBlOwotCWludCByYyA9IDA7Ci0JY2hhciAqdG1wOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgIm5vIikpewotCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX05POwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJFRERQIikpIHsKLQkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9FRERQOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJUU08iKSkgewotCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKLQl9IGVsc2UgewotCQlQUklOVF9XQVJOKCJsYXJnZV9zZW5kOiBpbnZhbGlkIG1vZGUgJXMhXG4iLCB0bXApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSB0eXBlKQotCQlyZXR1cm4gY291bnQ7Ci0JaWYgKChyYyA9IHFldGhfc2V0X2xhcmdlX3NlbmQoY2FyZCwgdHlwZSkpKQotCQlyZXR1cm4gcmM7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobGFyZ2Vfc2VuZCwgMDY0NCwgcWV0aF9kZXZfbGFyZ2Vfc2VuZF9zaG93LAotCQkgICBxZXRoX2Rldl9sYXJnZV9zZW5kX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Jsa3Rfc2hvdyhjaGFyICpidWYsIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCB2YWx1ZSApCi17Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHZhbHVlKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Jsa3Rfc3RvcmUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGludCAqdmFsdWUsIGludCBtYXhfdmFsdWUpCi17Ci0JY2hhciAqdG1wOwotCWludCBpOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSAmJgotCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9SRUNPVkVSKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDEwKTsKLQlpZiAoaSA8PSBtYXhfdmFsdWUpIHsKLQkJKnZhbHVlID0gaTsKLQl9IGVsc2UgewotCQlQUklOVF9XQVJOKCJibGt0IHRvdGFsIHRpbWU6IHdyaXRlIHZhbHVlcyBiZXR3ZWVuIgotCQkJICAgIiAwIGFuZCAlZCB0byB0aGlzIGZpbGUhXG4iLCBtYXhfdmFsdWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfYmxrdF90b3RhbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCXJldHVybiBxZXRoX2Rldl9ibGt0X3Nob3coYnVmLCBjYXJkLCBjYXJkLT5pbmZvLmJsa3QudGltZV90b3RhbCk7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Jsa3RfdG90YWxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfYmxrdF9zdG9yZShjYXJkLCBidWYsIGNvdW50LAotCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QudGltZV90b3RhbCwxMDAwKTsKLX0KLQotCi0KLXN0YXRpYyBERVZJQ0VfQVRUUih0b3RhbCwgMDY0NCwgcWV0aF9kZXZfYmxrdF90b3RhbF9zaG93LAotCQkgICBxZXRoX2Rldl9ibGt0X3RvdGFsX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Jsa3RfaW50ZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfYmxrdF9zaG93KGJ1ZiwgY2FyZCwgY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldCk7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Jsa3RfaW50ZXJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfYmxrdF9zdG9yZShjYXJkLCBidWYsIGNvdW50LAotCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QuaW50ZXJfcGFja2V0LDEwMCk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihpbnRlciwgMDY0NCwgcWV0aF9kZXZfYmxrdF9pbnRlcl9zaG93LAotCQkgICBxZXRoX2Rldl9ibGt0X2ludGVyX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2Jsa3RfaW50ZXJfanVtYm9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfYmxrdF9zaG93KGJ1ZiwgY2FyZCwKLQkJCQkgIGNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXRfanVtYm8pOwotfQotCi0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9ibGt0X2ludGVyX2p1bWJvX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JcmV0dXJuIHFldGhfZGV2X2Jsa3Rfc3RvcmUoY2FyZCwgYnVmLCBjb3VudCwKLQkJCQkgICAmY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldF9qdW1ibywxMDApOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJfanVtYm8sIDA2NDQsIHFldGhfZGV2X2Jsa3RfaW50ZXJfanVtYm9fc2hvdywKLQkJICAgcWV0aF9kZXZfYmxrdF9pbnRlcl9qdW1ib19zdG9yZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIHFldGhfYmxrdF9kZXZpY2VfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfdG90YWwsCi0JJmRldl9hdHRyX2ludGVyLAotCSZkZXZfYXR0cl9pbnRlcl9qdW1ibywKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcWV0aF9kZXZpY2VfYmxrdF9ncm91cCA9IHsKLQkubmFtZSA9ICJibGt0IiwKLQkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKilxZXRoX2Jsa3RfZGV2aWNlX2F0dHJzLAotfTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogcWV0aF9kZXZpY2VfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfc3RhdGUsCi0JJmRldl9hdHRyX2NocGlkLAotCSZkZXZfYXR0cl9pZl9uYW1lLAotCSZkZXZfYXR0cl9jYXJkX3R5cGUsCi0JJmRldl9hdHRyX3BvcnRubywKLQkmZGV2X2F0dHJfcG9ydG5hbWUsCi0JJmRldl9hdHRyX2NoZWNrc3VtbWluZywKLQkmZGV2X2F0dHJfcHJpb3JpdHlfcXVldWVpbmcsCi0JJmRldl9hdHRyX2J1ZmZlcl9jb3VudCwKLQkmZGV2X2F0dHJfcm91dGU0LAotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQkmZGV2X2F0dHJfcm91dGU2LAotI2VuZGlmCi0JJmRldl9hdHRyX2FkZF9oaGxlbiwKLQkmZGV2X2F0dHJfZmFrZV9sbCwKLQkmZGV2X2F0dHJfZmFrZV9icm9hZGNhc3QsCi0JJmRldl9hdHRyX3JlY292ZXIsCi0JJmRldl9hdHRyX2Jyb2FkY2FzdF9tb2RlLAotCSZkZXZfYXR0cl9jYW5vbmljYWxfbWFjYWRkciwKLQkmZGV2X2F0dHJfbGF5ZXIyLAotCSZkZXZfYXR0cl9sYXJnZV9zZW5kLAotCSZkZXZfYXR0cl9wZXJmb3JtYW5jZV9zdGF0cywKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcWV0aF9kZXZpY2VfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKilxZXRoX2RldmljZV9hdHRycywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIHFldGhfb3NuX2RldmljZV9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9zdGF0ZSwKLQkmZGV2X2F0dHJfY2hwaWQsCi0JJmRldl9hdHRyX2lmX25hbWUsCi0JJmRldl9hdHRyX2NhcmRfdHlwZSwKLQkmZGV2X2F0dHJfYnVmZmVyX2NvdW50LAotCSZkZXZfYXR0cl9yZWNvdmVyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBxZXRoX29zbl9kZXZpY2VfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKilxZXRoX29zbl9kZXZpY2VfYXR0cnMsCi19OwotCi0jZGVmaW5lIFFFVEhfREVWSUNFX0FUVFIoX2lkLF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkJCQkgICAgIFwKLXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyXyMjX2lkID0gewkJCQkgICAgIFwKLQkuYXR0ciA9IHsubmFtZT1fX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlPV9tb2RlLCB9LFwKLQkuc2hvdwk9IF9zaG93LAkJCQkJCSAgICAgXAotCS5zdG9yZQk9IF9zdG9yZSwJCQkJCQkgICAgIFwKLX07Ci0KLXN0YXRpYyBpbnQKLXFldGhfY2hlY2tfbGF5ZXIyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKQotCQlyZXR1cm4gLUVQRVJNOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9pcGF0b19lbmFibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHFldGhfY2hlY2tfbGF5ZXIyKGNhcmQpKQotCQlyZXR1cm4gLUVQRVJNOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5pcGF0by5lbmFibGVkPyAxOjApOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfaXBhdG9fZW5hYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWNoYXIgKnRtcDsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgJiYKLQkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfUkVDT1ZFUikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAocWV0aF9jaGVja19sYXllcjIoY2FyZCkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgInRvZ2dsZSIpKXsKLQkJY2FyZC0+aXBhdG8uZW5hYmxlZCA9IChjYXJkLT5pcGF0by5lbmFibGVkKT8gMCA6IDE7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjEiKSl7Ci0JCWNhcmQtPmlwYXRvLmVuYWJsZWQgPSAxOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICIwIikpewotCQljYXJkLT5pcGF0by5lbmFibGVkID0gMDsKLQl9IGVsc2UgewotCQlQUklOVF9XQVJOKCJpcGF0b19lbmFibGU6IHdyaXRlIDAsIDEgb3IgJ3RvZ2dsZScgdG8gIgotCQkJICAgInRoaXMgZmlsZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBRRVRIX0RFVklDRV9BVFRSKGlwYXRvX2VuYWJsZSwgZW5hYmxlLCAwNjQ0LAotCQkJcWV0aF9kZXZfaXBhdG9fZW5hYmxlX3Nob3csCi0JCQlxZXRoX2Rldl9pcGF0b19lbmFibGVfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfaXBhdG9faW52ZXJ0NF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocWV0aF9jaGVja19sYXllcjIoY2FyZCkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgY2FyZC0+aXBhdG8uaW52ZXJ0ND8gMTowKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2lwYXRvX2ludmVydDRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JY2hhciAqdG1wOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChxZXRoX2NoZWNrX2xheWVyMihjYXJkKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7Ci0JaWYgKCFzdHJjbXAodG1wLCAidG9nZ2xlIikpewotCQljYXJkLT5pcGF0by5pbnZlcnQ0ID0gKGNhcmQtPmlwYXRvLmludmVydDQpPyAwIDogMTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiMSIpKXsKLQkJY2FyZC0+aXBhdG8uaW52ZXJ0NCA9IDE7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjAiKSl7Ci0JCWNhcmQtPmlwYXRvLmludmVydDQgPSAwOwotCX0gZWxzZSB7Ci0JCVBSSU5UX1dBUk4oImlwYXRvX2ludmVydDQ6IHdyaXRlIDAsIDEgb3IgJ3RvZ2dsZScgdG8gIgotCQkJICAgInRoaXMgZmlsZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBRRVRIX0RFVklDRV9BVFRSKGlwYXRvX2ludmVydDQsIGludmVydDQsIDA2NDQsCi0JCQlxZXRoX2Rldl9pcGF0b19pbnZlcnQ0X3Nob3csCi0JCQlxZXRoX2Rldl9pcGF0b19pbnZlcnQ0X3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2lwYXRvX2FkZF9zaG93KGNoYXIgKmJ1Ziwgc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvKQotewotCXN0cnVjdCBxZXRoX2lwYXRvX2VudHJ5ICppcGF0b2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyIGFkZHJfc3RyWzQwXTsKLQlpbnQgZW50cnlfbGVuOyAvKiBsZW5ndGggb2YgMSBlbnRyeSBzdHJpbmcsIGRpZmZlcnMgYmV0d2VlbiB2NCBhbmQgdjYgKi8KLQlpbnQgaSA9IDA7Ci0KLQlpZiAocWV0aF9jaGVja19sYXllcjIoY2FyZCkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQllbnRyeV9sZW4gPSAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpPyAxMiA6IDQwOwotCS8qIGFkZCBzdHJsZW4gZm9yICIvPG1hc2s+XG4iICovCi0JZW50cnlfbGVuICs9IChwcm90byA9PSBRRVRIX1BST1RfSVBWNCk/IDUgOiA2OwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShpcGF0b2UsICZjYXJkLT5pcGF0by5lbnRyaWVzLCBlbnRyeSl7Ci0JCWlmIChpcGF0b2UtPnByb3RvICE9IHByb3RvKQotCQkJY29udGludWU7Ci0JCS8qIFN0cmluZyBtdXN0IG5vdCBiZSBsb25nZXIgdGhhbiBQQUdFX1NJWkUuIFNvIHdlIGNoZWNrIGlmCi0JCSAqIHN0cmluZyBsZW5ndGggZ2V0cyBuZWFyIFBBR0VfU0laRS4gVGhlbiB3ZSBjYW4gc2F2ZWx5IGRpc3BsYXkKLQkJICogdGhlIG5leHQgSVB2NiBhZGRyZXNzICh3b3JzdCBjYXNlLCBjb21wYXJlZCB0byBJUHY0KSAqLwotCQlpZiAoKFBBR0VfU0laRSAtIGkpIDw9IGVudHJ5X2xlbikKLQkJCWJyZWFrOwotCQlxZXRoX2lwYWRkcl90b19zdHJpbmcocHJvdG8sIGlwYXRvZS0+YWRkciwgYWRkcl9zdHIpOwotCQlpICs9IHNucHJpbnRmKGJ1ZiArIGksIFBBR0VfU0laRSAtIGksCi0JCQkgICAgICAiJXMvJWlcbiIsIGFkZHJfc3RyLCBpcGF0b2UtPm1hc2tfYml0cyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKLQlpICs9IHNucHJpbnRmKGJ1ZiArIGksIFBBR0VfU0laRSAtIGksICJcbiIpOwotCi0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9pcGF0b19hZGQ0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBxZXRoX2Rldl9pcGF0b19hZGRfc2hvdyhidWYsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLX0KLQotc3RhdGljIGludAotcWV0aF9wYXJzZV9pcGF0b2UoY29uc3QgY2hhciogYnVmLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bywKLQkJICB1OCAqYWRkciwgaW50ICptYXNrX2JpdHMpCi17Ci0JY29uc3QgY2hhciAqc3RhcnQsICplbmQ7Ci0JY2hhciAqdG1wOwotCWNoYXIgYnVmZmVyWzQwXSA9IHswLCB9OwotCi0Jc3RhcnQgPSBidWY7Ci0JLyogZ2V0IGFkZHJlc3Mgc3RyaW5nICovCi0JZW5kID0gc3RyY2hyKHN0YXJ0LCAnLycpOwotCWlmICghZW5kIHx8IChlbmQgLSBzdGFydCA+PSA0MCkpewotCQlQUklOVF9XQVJOKCJJbnZhbGlkIGZvcm1hdCBmb3IgaXBhdG9fYWRkeC9kZWx4LiAiCi0JCQkgICAiVXNlIDxpcCBhZGRyPi88bWFzayBiaXRzPlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlzdHJuY3B5KGJ1ZmZlciwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQlpZiAocWV0aF9zdHJpbmdfdG9faXBhZGRyKGJ1ZmZlciwgcHJvdG8sIGFkZHIpKXsKLQkJUFJJTlRfV0FSTigiSW52YWxpZCBJUCBhZGRyZXNzIGZvcm1hdCFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0Jc3RhcnQgPSBlbmQgKyAxOwotCSptYXNrX2JpdHMgPSBzaW1wbGVfc3RydG91bChzdGFydCwgJnRtcCwgMTApOwotCWlmICghc3RybGVuKHN0YXJ0KSB8fAotCSAgICAodG1wID09IHN0YXJ0KSB8fAotCSAgICAoKm1hc2tfYml0cyA+ICgocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpID8gMzIgOiAxMjgpKSkgewotCQlQUklOVF9XQVJOKCJJbnZhbGlkIG1hc2sgYml0cyBmb3IgaXBhdG9fYWRkeC9kZWx4ICFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9pcGF0b19hZGRfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8pCi17Ci0Jc3RydWN0IHFldGhfaXBhdG9fZW50cnkgKmlwYXRvZTsKLQl1OCBhZGRyWzE2XTsKLQlpbnQgbWFza19iaXRzOwotCWludCByYzsKLQotCWlmIChxZXRoX2NoZWNrX2xheWVyMihjYXJkKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoKHJjID0gcWV0aF9wYXJzZV9pcGF0b2UoYnVmLCBwcm90bywgYWRkciwgJm1hc2tfYml0cykpKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoIShpcGF0b2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSksIEdGUF9LRVJORUwpKSl7Ci0JCVBSSU5UX1dBUk4oIk5vIG1lbW9yeSB0byBhbGxvY2F0ZSBpcGF0byBlbnRyeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlpcGF0b2UtPnByb3RvID0gcHJvdG87Ci0JbWVtY3B5KGlwYXRvZS0+YWRkciwgYWRkciwgKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KT8gNDoxNik7Ci0JaXBhdG9lLT5tYXNrX2JpdHMgPSBtYXNrX2JpdHM7Ci0KLQlpZiAoKHJjID0gcWV0aF9hZGRfaXBhdG9fZW50cnkoY2FyZCwgaXBhdG9lKSkpewotCQlrZnJlZShpcGF0b2UpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfaXBhdG9fYWRkNF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfaXBhdG9fYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLX0KLQotc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fYWRkNCwgYWRkNCwgMDY0NCwKLQkJCXFldGhfZGV2X2lwYXRvX2FkZDRfc2hvdywKLQkJCXFldGhfZGV2X2lwYXRvX2FkZDRfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfaXBhdG9fZGVsX3N0b3JlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvKQotewotCXU4IGFkZHJbMTZdOwotCWludCBtYXNrX2JpdHM7Ci0JaW50IHJjOwotCi0JaWYgKHFldGhfY2hlY2tfbGF5ZXIyKGNhcmQpKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmICgocmMgPSBxZXRoX3BhcnNlX2lwYXRvZShidWYsIHByb3RvLCBhZGRyLCAmbWFza19iaXRzKSkpCi0JCXJldHVybiByYzsKLQotCXFldGhfZGVsX2lwYXRvX2VudHJ5KGNhcmQsIHByb3RvLCBhZGRyLCBtYXNrX2JpdHMpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfaXBhdG9fZGVsNF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfaXBhdG9fZGVsX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLX0KLQotc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fZGVsNCwgZGVsNCwgMDIwMCwgTlVMTCwKLQkJCXFldGhfZGV2X2lwYXRvX2RlbDRfc3RvcmUpOwotCi0jaWZkZWYgQ09ORklHX1FFVEhfSVBWNgotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2lwYXRvX2ludmVydDZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHFldGhfY2hlY2tfbGF5ZXIyKGNhcmQpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPmlwYXRvLmludmVydDY/IDE6MCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9pcGF0b19pbnZlcnQ2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCWNoYXIgKnRtcDsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocWV0aF9jaGVja19sYXllcjIoY2FyZCkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgInRvZ2dsZSIpKXsKLQkJY2FyZC0+aXBhdG8uaW52ZXJ0NiA9IChjYXJkLT5pcGF0by5pbnZlcnQ2KT8gMCA6IDE7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjEiKSl7Ci0JCWNhcmQtPmlwYXRvLmludmVydDYgPSAxOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICIwIikpewotCQljYXJkLT5pcGF0by5pbnZlcnQ2ID0gMDsKLQl9IGVsc2UgewotCQlQUklOVF9XQVJOKCJpcGF0b19pbnZlcnQ2OiB3cml0ZSAwLCAxIG9yICd0b2dnbGUnIHRvICIKLQkJCSAgICJ0aGlzIGZpbGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgUUVUSF9ERVZJQ0VfQVRUUihpcGF0b19pbnZlcnQ2LCBpbnZlcnQ2LCAwNjQ0LAotCQkJcWV0aF9kZXZfaXBhdG9faW52ZXJ0Nl9zaG93LAotCQkJcWV0aF9kZXZfaXBhdG9faW52ZXJ0Nl9zdG9yZSk7Ci0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X2lwYXRvX2FkZDZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHFldGhfZGV2X2lwYXRvX2FkZF9zaG93KGJ1ZiwgY2FyZCwgUUVUSF9QUk9UX0lQVjYpOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfaXBhdG9fYWRkNl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfaXBhdG9fYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKLX0KLQotc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fYWRkNiwgYWRkNiwgMDY0NCwKLQkJCXFldGhfZGV2X2lwYXRvX2FkZDZfc2hvdywKLQkJCXFldGhfZGV2X2lwYXRvX2FkZDZfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfaXBhdG9fZGVsNl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfaXBhdG9fZGVsX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKLX0KLQotc3RhdGljIFFFVEhfREVWSUNFX0FUVFIoaXBhdG9fZGVsNiwgZGVsNiwgMDIwMCwgTlVMTCwKLQkJCXFldGhfZGV2X2lwYXRvX2RlbDZfc3RvcmUpOwotI2VuZGlmIC8qIENPTkZJR19RRVRIX0lQVjYgKi8KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogcWV0aF9pcGF0b19kZXZpY2VfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfaXBhdG9fZW5hYmxlLAotCSZkZXZfYXR0cl9pcGF0b19pbnZlcnQ0LAotCSZkZXZfYXR0cl9pcGF0b19hZGQ0LAotCSZkZXZfYXR0cl9pcGF0b19kZWw0LAotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQkmZGV2X2F0dHJfaXBhdG9faW52ZXJ0NiwKLQkmZGV2X2F0dHJfaXBhdG9fYWRkNiwKLQkmZGV2X2F0dHJfaXBhdG9fZGVsNiwKLSNlbmRpZgotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBxZXRoX2RldmljZV9pcGF0b19ncm91cCA9IHsKLQkubmFtZSA9ICJpcGFfdGFrZW92ZXIiLAotCS5hdHRycyA9IChzdHJ1Y3QgYXR0cmlidXRlICoqKXFldGhfaXBhdG9fZGV2aWNlX2F0dHJzLAotfTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3ZpcGFfYWRkX3Nob3coY2hhciAqYnVmLCBzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8pCi17Ci0Jc3RydWN0IHFldGhfaXBhZGRyICppcGFkZHI7Ci0JY2hhciBhZGRyX3N0cls0MF07Ci0JaW50IGVudHJ5X2xlbjsgLyogbGVuZ3RoIG9mIDEgZW50cnkgc3RyaW5nLCBkaWZmZXJzIGJldHdlZW4gdjQgYW5kIHY2ICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAocWV0aF9jaGVja19sYXllcjIoY2FyZCkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQllbnRyeV9sZW4gPSAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpPyAxMiA6IDQwOwotCWVudHJ5X2xlbiArPSAyOyAvKiBcbiArIHRlcm1pbmF0b3IgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXBhZGRyLCAmY2FyZC0+aXBfbGlzdCwgZW50cnkpewotCQlpZiAoaXBhZGRyLT5wcm90byAhPSBwcm90bykKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXBhZGRyLT50eXBlICE9IFFFVEhfSVBfVFlQRV9WSVBBKQotCQkJY29udGludWU7Ci0JCS8qIFN0cmluZyBtdXN0IG5vdCBiZSBsb25nZXIgdGhhbiBQQUdFX1NJWkUuIFNvIHdlIGNoZWNrIGlmCi0JCSAqIHN0cmluZyBsZW5ndGggZ2V0cyBuZWFyIFBBR0VfU0laRS4gVGhlbiB3ZSBjYW4gc2F2ZWx5IGRpc3BsYXkKLQkJICogdGhlIG5leHQgSVB2NiBhZGRyZXNzICh3b3JzdCBjYXNlLCBjb21wYXJlZCB0byBJUHY0KSAqLwotCQlpZiAoKFBBR0VfU0laRSAtIGkpIDw9IGVudHJ5X2xlbikKLQkJCWJyZWFrOwotCQlxZXRoX2lwYWRkcl90b19zdHJpbmcocHJvdG8sIChjb25zdCB1OCAqKSZpcGFkZHItPnUsIGFkZHJfc3RyKTsKLQkJaSArPSBzbnByaW50ZihidWYgKyBpLCBQQUdFX1NJWkUgLSBpLCAiJXNcbiIsIGFkZHJfc3RyKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWkgKz0gc25wcmludGYoYnVmICsgaSwgUEFHRV9TSVpFIC0gaSwgIlxuIik7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3ZpcGFfYWRkNF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfdmlwYV9hZGRfc2hvdyhidWYsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLX0KLQotc3RhdGljIGludAotcWV0aF9wYXJzZV92aXBhZShjb25zdCBjaGFyKiBidWYsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLAotCQkgdTggKmFkZHIpCi17Ci0JaWYgKHFldGhfc3RyaW5nX3RvX2lwYWRkcihidWYsIHByb3RvLCBhZGRyKSl7Ci0JCVBSSU5UX1dBUk4oIkludmFsaWQgSVAgYWRkcmVzcyBmb3JtYXQhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfdmlwYV9hZGRfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8pCi17Ci0JdTggYWRkclsxNl0gPSB7MCwgfTsKLQlpbnQgcmM7Ci0KLQlpZiAocWV0aF9jaGVja19sYXllcjIoY2FyZCkpCi0JCXJldHVybiAtRVBFUk07Ci0JaWYgKChyYyA9IHFldGhfcGFyc2VfdmlwYWUoYnVmLCBwcm90bywgYWRkcikpKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoKHJjID0gcWV0aF9hZGRfdmlwYShjYXJkLCBwcm90bywgYWRkcikpKQotCQlyZXR1cm4gcmM7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl92aXBhX2FkZDRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHFldGhfZGV2X3ZpcGFfYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLX0KLQotc3RhdGljIFFFVEhfREVWSUNFX0FUVFIodmlwYV9hZGQ0LCBhZGQ0LCAwNjQ0LAotCQkJcWV0aF9kZXZfdmlwYV9hZGQ0X3Nob3csCi0JCQlxZXRoX2Rldl92aXBhX2FkZDRfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfdmlwYV9kZWxfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8pCi17Ci0JdTggYWRkclsxNl07Ci0JaW50IHJjOwotCi0JaWYgKHFldGhfY2hlY2tfbGF5ZXIyKGNhcmQpKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmICgocmMgPSBxZXRoX3BhcnNlX3ZpcGFlKGJ1ZiwgcHJvdG8sIGFkZHIpKSkKLQkJcmV0dXJuIHJjOwotCi0JcWV0aF9kZWxfdmlwYShjYXJkLCBwcm90bywgYWRkcik7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl92aXBhX2RlbDRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHFldGhfZGV2X3ZpcGFfZGVsX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLX0KLQotc3RhdGljIFFFVEhfREVWSUNFX0FUVFIodmlwYV9kZWw0LCBkZWw0LCAwMjAwLCBOVUxMLAotCQkJcWV0aF9kZXZfdmlwYV9kZWw0X3N0b3JlKTsKLQotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl92aXBhX2FkZDZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHFldGhfZGV2X3ZpcGFfYWRkX3Nob3coYnVmLCBjYXJkLCBRRVRIX1BST1RfSVBWNik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl92aXBhX2FkZDZfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHFldGhfZGV2X3ZpcGFfYWRkX3N0b3JlKGJ1ZiwgY291bnQsIGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKLX0KLQotc3RhdGljIFFFVEhfREVWSUNFX0FUVFIodmlwYV9hZGQ2LCBhZGQ2LCAwNjQ0LAotCQkJcWV0aF9kZXZfdmlwYV9hZGQ2X3Nob3csCi0JCQlxZXRoX2Rldl92aXBhX2FkZDZfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfdmlwYV9kZWw2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChxZXRoX2NoZWNrX2xheWVyMihjYXJkKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXJldHVybiBxZXRoX2Rldl92aXBhX2RlbF9zdG9yZShidWYsIGNvdW50LCBjYXJkLCBRRVRIX1BST1RfSVBWNik7Ci19Ci0KLXN0YXRpYyBRRVRIX0RFVklDRV9BVFRSKHZpcGFfZGVsNiwgZGVsNiwgMDIwMCwgTlVMTCwKLQkJCXFldGhfZGV2X3ZpcGFfZGVsNl9zdG9yZSk7Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfSVBWNiAqLwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBxZXRoX3ZpcGFfZGV2aWNlX2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX3ZpcGFfYWRkNCwKLQkmZGV2X2F0dHJfdmlwYV9kZWw0LAotI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKLQkmZGV2X2F0dHJfdmlwYV9hZGQ2LAotCSZkZXZfYXR0cl92aXBhX2RlbDYsCi0jZW5kaWYKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcWV0aF9kZXZpY2VfdmlwYV9ncm91cCA9IHsKLQkubmFtZSA9ICJ2aXBhIiwKLQkuYXR0cnMgPSAoc3RydWN0IGF0dHJpYnV0ZSAqKilxZXRoX3ZpcGFfZGV2aWNlX2F0dHJzLAotfTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3J4aXBfYWRkX3Nob3coY2hhciAqYnVmLCBzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkgICAgICAgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdG8pCi17Ci0Jc3RydWN0IHFldGhfaXBhZGRyICppcGFkZHI7Ci0JY2hhciBhZGRyX3N0cls0MF07Ci0JaW50IGVudHJ5X2xlbjsgLyogbGVuZ3RoIG9mIDEgZW50cnkgc3RyaW5nLCBkaWZmZXJzIGJldHdlZW4gdjQgYW5kIHY2ICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAocWV0aF9jaGVja19sYXllcjIoY2FyZCkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQllbnRyeV9sZW4gPSAocHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpPyAxMiA6IDQwOwotCWVudHJ5X2xlbiArPSAyOyAvKiBcbiArIHRlcm1pbmF0b3IgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXBhZGRyLCAmY2FyZC0+aXBfbGlzdCwgZW50cnkpewotCQlpZiAoaXBhZGRyLT5wcm90byAhPSBwcm90bykKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXBhZGRyLT50eXBlICE9IFFFVEhfSVBfVFlQRV9SWElQKQotCQkJY29udGludWU7Ci0JCS8qIFN0cmluZyBtdXN0IG5vdCBiZSBsb25nZXIgdGhhbiBQQUdFX1NJWkUuIFNvIHdlIGNoZWNrIGlmCi0JCSAqIHN0cmluZyBsZW5ndGggZ2V0cyBuZWFyIFBBR0VfU0laRS4gVGhlbiB3ZSBjYW4gc2F2ZWx5IGRpc3BsYXkKLQkJICogdGhlIG5leHQgSVB2NiBhZGRyZXNzICh3b3JzdCBjYXNlLCBjb21wYXJlZCB0byBJUHY0KSAqLwotCQlpZiAoKFBBR0VfU0laRSAtIGkpIDw9IGVudHJ5X2xlbikKLQkJCWJyZWFrOwotCQlxZXRoX2lwYWRkcl90b19zdHJpbmcocHJvdG8sIChjb25zdCB1OCAqKSZpcGFkZHItPnUsIGFkZHJfc3RyKTsKLQkJaSArPSBzbnByaW50ZihidWYgKyBpLCBQQUdFX1NJWkUgLSBpLCAiJXNcbiIsIGFkZHJfc3RyKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwotCWkgKz0gc25wcmludGYoYnVmICsgaSwgUEFHRV9TSVpFIC0gaSwgIlxuIik7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3J4aXBfYWRkNF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfcnhpcF9hZGRfc2hvdyhidWYsIGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLX0KLQotc3RhdGljIGludAotcWV0aF9wYXJzZV9yeGlwZShjb25zdCBjaGFyKiBidWYsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvLAotCQkgdTggKmFkZHIpCi17Ci0JaWYgKHFldGhfc3RyaW5nX3RvX2lwYWRkcihidWYsIHByb3RvLCBhZGRyKSl7Ci0JCVBSSU5UX1dBUk4oIkludmFsaWQgSVAgYWRkcmVzcyBmb3JtYXQhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcnhpcF9hZGRfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90bykKLXsKLQl1OCBhZGRyWzE2XSA9IHswLCB9OwotCWludCByYzsKLQotCWlmIChxZXRoX2NoZWNrX2xheWVyMihjYXJkKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoKHJjID0gcWV0aF9wYXJzZV9yeGlwZShidWYsIHByb3RvLCBhZGRyKSkpCi0JCXJldHVybiByYzsKLQotCWlmICgocmMgPSBxZXRoX2FkZF9yeGlwKGNhcmQsIHByb3RvLCBhZGRyKSkpCi0JCXJldHVybiByYzsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3J4aXBfYWRkNF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfcnhpcF9hZGRfc3RvcmUoYnVmLCBjb3VudCwgY2FyZCwgUUVUSF9QUk9UX0lQVjQpOwotfQotCi1zdGF0aWMgUUVUSF9ERVZJQ0VfQVRUUihyeGlwX2FkZDQsIGFkZDQsIDA2NDQsCi0JCQlxZXRoX2Rldl9yeGlwX2FkZDRfc2hvdywKLQkJCXFldGhfZGV2X3J4aXBfYWRkNF9zdG9yZSk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2Rldl9yeGlwX2RlbF9zdG9yZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKLQkJCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3RvKQotewotCXU4IGFkZHJbMTZdOwotCWludCByYzsKLQotCWlmIChxZXRoX2NoZWNrX2xheWVyMihjYXJkKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoKHJjID0gcWV0aF9wYXJzZV9yeGlwZShidWYsIHByb3RvLCBhZGRyKSkpCi0JCXJldHVybiByYzsKLQotCXFldGhfZGVsX3J4aXAoY2FyZCwgcHJvdG8sIGFkZHIpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcnhpcF9kZWw0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBxZXRoX2Rldl9yeGlwX2RlbF9zdG9yZShidWYsIGNvdW50LCBjYXJkLCBRRVRIX1BST1RfSVBWNCk7Ci19Ci0KLXN0YXRpYyBRRVRIX0RFVklDRV9BVFRSKHJ4aXBfZGVsNCwgZGVsNCwgMDIwMCwgTlVMTCwKLQkJCXFldGhfZGV2X3J4aXBfZGVsNF9zdG9yZSk7Ci0KLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcnhpcF9hZGQ2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBxZXRoX2Rldl9yeGlwX2FkZF9zaG93KGJ1ZiwgY2FyZCwgUUVUSF9QUk9UX0lQVjYpOwotfQotCi1zdGF0aWMgc3NpemVfdAotcWV0aF9kZXZfcnhpcF9hZGQ2X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBxZXRoX2Rldl9yeGlwX2FkZF9zdG9yZShidWYsIGNvdW50LCBjYXJkLCBRRVRIX1BST1RfSVBWNik7Ci19Ci0KLXN0YXRpYyBRRVRIX0RFVklDRV9BVFRSKHJ4aXBfYWRkNiwgYWRkNiwgMDY0NCwKLQkJCXFldGhfZGV2X3J4aXBfYWRkNl9zaG93LAotCQkJcWV0aF9kZXZfcnhpcF9hZGQ2X3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QKLXFldGhfZGV2X3J4aXBfZGVsNl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcWV0aF9kZXZfcnhpcF9kZWxfc3RvcmUoYnVmLCBjb3VudCwgY2FyZCwgUUVUSF9QUk9UX0lQVjYpOwotfQotCi1zdGF0aWMgUUVUSF9ERVZJQ0VfQVRUUihyeGlwX2RlbDYsIGRlbDYsIDAyMDAsIE5VTEwsCi0JCQlxZXRoX2Rldl9yeGlwX2RlbDZfc3RvcmUpOwotI2VuZGlmIC8qIENPTkZJR19RRVRIX0lQVjYgKi8KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogcWV0aF9yeGlwX2RldmljZV9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9yeGlwX2FkZDQsCi0JJmRldl9hdHRyX3J4aXBfZGVsNCwKLSNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JJmRldl9hdHRyX3J4aXBfYWRkNiwKLQkmZGV2X2F0dHJfcnhpcF9kZWw2LAotI2VuZGlmCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHFldGhfZGV2aWNlX3J4aXBfZ3JvdXAgPSB7Ci0JLm5hbWUgPSAicnhpcCIsCi0JLmF0dHJzID0gKHN0cnVjdCBhdHRyaWJ1dGUgKiopcWV0aF9yeGlwX2RldmljZV9hdHRycywKLX07Ci0KLWludAotcWV0aF9jcmVhdGVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKLQkJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAotCQkJCQkgICZxZXRoX29zbl9kZXZpY2VfYXR0cl9ncm91cCk7Ci0KLQlpZiAoKHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCkpKQotCQlyZXR1cm4gcmV0OwotCWlmICgocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9pcGF0b19ncm91cCkpKXsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaWYgKChyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3ZpcGFfZ3JvdXApKSl7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCk7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfaXBhdG9fZ3JvdXApOwotCQlyZXR1cm4gcmV0OwotCX0KLQlpZiAoKHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfcnhpcF9ncm91cCkpKXsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKTsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9pcGF0b19ncm91cCk7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfdmlwYV9ncm91cCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWlmICgocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9ibGt0X2dyb3VwKSkpewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2F0dHJfZ3JvdXApOwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2lwYXRvX2dyb3VwKTsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV92aXBhX2dyb3VwKTsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9yeGlwX2dyb3VwKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLXFldGhfcmVtb3ZlX2RldmljZV9hdHRyaWJ1dGVzKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5kcml2ZXJfZGF0YTsKLQotCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKSB7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9vc25fZGV2aWNlX2F0dHJfZ3JvdXApOwotCQlyZXR1cm47Ci0JfQotCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9pcGF0b19ncm91cCk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV92aXBhX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3J4aXBfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYmxrdF9ncm91cCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqLwotLyogRFJJVkVSIEFUVFJJQlVURVMgICovCi0vKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2RyaXZlcl9ncm91cF9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGRydiwgY29uc3QgY2hhciAqYnVmLAotCQkJc2l6ZV90IGNvdW50KQotewotCWNvbnN0IGNoYXIgKnN0YXJ0LCAqZW5kOwotCWNoYXIgYnVzX2lkc1szXVtCVVNfSURfU0laRV0sICphcmd2WzNdOwotCWludCBpOwotCWludCBlcnI7Ci0KLQlzdGFydCA9IGJ1ZjsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXN0YXRpYyBjb25zdCBjaGFyIGRlbGltW10gPSB7ICcsJywgJywnLCAnXG4nIH07Ci0JCWludCBsZW47Ci0KLQkJaWYgKCEoZW5kID0gc3RyY2hyKHN0YXJ0LCBkZWxpbVtpXSkpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWxlbiA9IG1pbl90KHB0cmRpZmZfdCwgQlVTX0lEX1NJWkUsIGVuZCAtIHN0YXJ0KTsKLQkJc3RybmNweShidXNfaWRzW2ldLCBzdGFydCwgbGVuKTsKLQkJYnVzX2lkc1tpXVtsZW5dID0gJ1wwJzsKLQkJc3RhcnQgPSBlbmQgKyAxOwotCQlhcmd2W2ldID0gYnVzX2lkc1tpXTsKLQl9Ci0JZXJyID0gY2N3Z3JvdXBfY3JlYXRlKHFldGhfcm9vdF9kZXYsIHFldGhfY2N3Z3JvdXBfZHJpdmVyLmRyaXZlcl9pZCwKLQkJCSZxZXRoX2Njd19kcml2ZXIsIDMsIGFyZ3YpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZWxzZQotCQlyZXR1cm4gY291bnQ7Ci19Ci0KLQotc3RhdGljIERSSVZFUl9BVFRSKGdyb3VwLCAwMjAwLCBOVUxMLCBxZXRoX2RyaXZlcl9ncm91cF9zdG9yZSk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1xZXRoX2RyaXZlcl9ub3RpZmllcl9yZWdpc3Rlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGRydiwgY29uc3QgY2hhciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCkKLXsKLQlpbnQgcmM7Ci0JaW50IHNpZ251bTsKLQljaGFyICp0bXAsICp0bXAyOwotCi0JdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKLQlpZiAoIXN0cm5jbXAodG1wLCAidW5yZWdpc3RlciIsIDEwKSl7Ci0JCWlmICgocmMgPSBxZXRoX25vdGlmaWVyX3VucmVnaXN0ZXIoY3VycmVudCkpKQotCQkJcmV0dXJuIHJjOwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0Jc2lnbnVtID0gc2ltcGxlX3N0cnRvdWwodG1wLCAmdG1wMiwgMTApOwotCWlmICgoc2lnbnVtIDwgMCkgfHwgKHNpZ251bSA+IDMyKSl7Ci0JCVBSSU5UX1dBUk4oIlNpZ25hbCBudW1iZXIgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLCBzaWdudW0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKChyYyA9IHFldGhfbm90aWZpZXJfcmVnaXN0ZXIoY3VycmVudCwgc2lnbnVtKSkpCi0JCXJldHVybiByYzsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERSSVZFUl9BVFRSKG5vdGlmaWVyX3JlZ2lzdGVyLCAwMjAwLCBOVUxMLAotCQkgICBxZXRoX2RyaXZlcl9ub3RpZmllcl9yZWdpc3Rlcl9zdG9yZSk7Ci0KLWludAotcWV0aF9jcmVhdGVfZHJpdmVyX2F0dHJpYnV0ZXModm9pZCkKLXsKLQlpbnQgcmM7Ci0KLQlpZiAoKHJjID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZxZXRoX2Njd2dyb3VwX2RyaXZlci5kcml2ZXIsCi0JCQkJICAgICAmZHJpdmVyX2F0dHJfZ3JvdXApKSkKLQkJcmV0dXJuIHJjOwotCXJldHVybiBkcml2ZXJfY3JlYXRlX2ZpbGUoJnFldGhfY2N3Z3JvdXBfZHJpdmVyLmRyaXZlciwKLQkJCQkgICZkcml2ZXJfYXR0cl9ub3RpZmllcl9yZWdpc3Rlcik7Ci19Ci0KLXZvaWQKLXFldGhfcmVtb3ZlX2RyaXZlcl9hdHRyaWJ1dGVzKHZvaWQpCi17Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZxZXRoX2Njd2dyb3VwX2RyaXZlci5kcml2ZXIsCi0JCQkmZHJpdmVyX2F0dHJfZ3JvdXApOwotCWRyaXZlcl9yZW1vdmVfZmlsZSgmcWV0aF9jY3dncm91cF9kcml2ZXIuZHJpdmVyLAotCQkJJmRyaXZlcl9hdHRyX25vdGlmaWVyX3JlZ2lzdGVyKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwZTkyMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAotICoKLSAqIEhlYWRlciBmaWxlIGZvciBxZXRoIFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCBzdXBwb3J0LgotICoKLSAqIENvcHlyaWdodCAyMDA0IElCTSBDb3Jwb3JhdGlvbgotICoKLSAqICAgIEF1dGhvcihzKTogRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+Ci0gKgotICovCi0jaWZuZGVmIF9fUUVUSF9UU09fSF9fCi0jZGVmaW5lIF9fUUVUSF9UU09fSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KLSNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSAicWV0aC5oIgotI2luY2x1ZGUgInFldGhfbXBjLmgiCi0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcWV0aF9oZHJfdHNvICoKLXFldGhfdHNvX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICoqc2tiKQotewotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJ0c29wcnNrIik7Ci0JcmV0dXJuIHFldGhfcHVzaF9za2IoY2FyZCwgKnNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pKTsKLX0KLQotLyoqCi0gKiBmaWxsIGhlYWRlciBmb3IgYSBUU08gcGFja2V0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcWV0aF9oZHJfdHNvICpoZHI7Ci0Jc3RydWN0IHRjcGhkciAqdGNwaDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJ0c29maGRyIik7Ci0KLQloZHIgID0gKHN0cnVjdCBxZXRoX2hkcl90c28gKikgc2tiLT5kYXRhOwotCWlwaCAgPSBpcF9oZHIoc2tiKTsKLQl0Y3BoID0gdGNwX2hkcihza2IpOwotCS8qZml4IGhlYWRlciB0byBUU08gdmFsdWVzIC4uLiovCi0JaGRyLT5oZHIuaGRyLmwzLmlkID0gUUVUSF9IRUFERVJfVFlQRV9UU087Ci0JLypzZXQgdmFsdWVzIHdoaWNoIGFyZSBmaXggZm9yIHRoZSBmaXJzdCBhcHByb2FjaCAuLi4qLwotCWhkci0+ZXh0Lmhkcl90b3RfbGVuID0gKF9fdTE2KSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX2V4dF90c28pOwotCWhkci0+ZXh0LmltYl9oZHJfbm8gID0gMTsKLQloZHItPmV4dC5oZHJfdHlwZSAgICA9IDE7Ci0JaGRyLT5leHQuaGRyX3ZlcnNpb24gPSAxOwotCWhkci0+ZXh0Lmhkcl9sZW4gICAgID0gMjg7Ci0JLyppbnNlcnQgbm9uLWZpeCB2YWx1ZXMgKi8KLQloZHItPmV4dC5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwotCWhkci0+ZXh0LmRnX2hkcl9sZW4gPSAoX191MTYpKGlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQpOwotCWhkci0+ZXh0LnBheWxvYWRfbGVuID0gKF9fdTE2KShza2ItPmxlbiAtIGhkci0+ZXh0LmRnX2hkcl9sZW4gLQotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOwotfQotCi0vKioKLSAqIGNoYW5nZSBzb21lIGhlYWRlciB2YWx1ZXMgYXMgcmVxdWVzdGVkIGJ5IGhhcmR3YXJlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF90c29fc2V0X3RjcGlwX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpcGhkciAqaXBoICAgID0gaXBfaGRyKHNrYik7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOwotCXN0cnVjdCB0Y3BoZHIgKnRjcGggID0gdGNwX2hkcihza2IpOwotCi0JdGNwaC0+Y2hlY2sgPSAwOwotCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpIHsKLQkJaXA2aC0+cGF5bG9hZF9sZW4gPSAwOwotCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCi0JCQkJCSAgICAgICAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JCXJldHVybjsKLQl9Ci0JLypPU0Egd2FudCB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIC4uLiovCi0JdGNwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKLQkJCQkJIDAsIElQUFJPVE9fVENQLCAwKTsKLQlpcGgtPnRvdF9sZW4gPSAwOwotCWlwaC0+Y2hlY2sgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF90c29fcHJlcGFyZV9wYWNrZXQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCWludCBpcHYsIGludCBjYXN0X3R5cGUpCi17Ci0Jc3RydWN0IHFldGhfaGRyX3RzbyAqaGRyOwotCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgInRzb3ByZXAiKTsKLQotCWhkciA9IChzdHJ1Y3QgcWV0aF9oZHJfdHNvICopIHFldGhfdHNvX3ByZXBhcmVfc2tiKGNhcmQsICZza2IpOwotCWlmIChoZHIgPT0gTlVMTCkgewotCQlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAidHNvcGVyciIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWVtc2V0KGhkciwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcl90c28pKTsKLQkvKmZpbGwgZmlyc3QgMzIgYnl0ZXMgb2YgIHFkaW8gaGVhZGVyIGFzIHVzZWQKLQkgKkZJWE1FOiBUU08gaGFzIHR3byBzdHJ1Y3QgbWVtYmVycwotCSAqIHdpdGggZGlmZmVyZW50IG5hbWVzIGJ1dCBzYW1lIHNpemUKLQkgKiAqLwotCXFldGhfZmlsbF9oZWFkZXIoY2FyZCwgJmhkci0+aGRyLCBza2IsIGlwdiwgY2FzdF90eXBlKTsKLQlxZXRoX3Rzb19maWxsX2hlYWRlcihjYXJkLCBza2IpOwotCXFldGhfdHNvX3NldF90Y3BpcF9oZWFkZXIoY2FyZCwgc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1fX3FldGhfZmlsbF9idWZmZXJfZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZmZlciwKLQkJCWludCBpc190c28sIGludCAqbmV4dF9lbGVtZW50X3RvX2ZpbGwpCi17Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKLQlpbnQgZnJhZ25vOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgZWxlbWVudCwgY250LCBkbGVuOwotCi0JZnJhZ25vID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQllbGVtZW50ID0gKm5leHRfZWxlbWVudF90b19maWxsOwotCWRsZW4gPSAwOwotCi0JaWYgKGlzX3RzbykKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCVNCQUxfRkxBR1NfTUlERExFX0ZSQUc7Ci0JZWxzZQotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJU0JBTF9GTEFHU19GSVJTVF9GUkFHOwotCWlmICggKGRsZW4gPSAoc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuKSkgKSB7Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5hZGRyID0gc2tiLT5kYXRhOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0ubGVuZ3RoID0gZGxlbjsKLQkJZWxlbWVudCsrOwotCX0KLQlmb3IgKGNudCA9IDA7IGNudCA8IGZyYWdubzsgY250KyspIHsKLQkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2NudF07Ci0JCWFkZHIgPSAocGFnZV90b19wZm4oZnJhZy0+cGFnZSkgPDwgUEFHRV9TSElGVCkgKwotCQkJZnJhZy0+cGFnZV9vZmZzZXQ7Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5hZGRyID0gKGNoYXIgKilhZGRyOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0ubGVuZ3RoID0gZnJhZy0+c2l6ZTsKLQkJaWYgKGNudCA8IChmcmFnbm8gLSAxKSkKLQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJU0JBTF9GTEFHU19NSURETEVfRlJBRzsKLQkJZWxzZQotCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQlTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKLQkJZWxlbWVudCsrOwotCX0KLQkqbmV4dF9lbGVtZW50X3RvX2ZpbGwgPSBlbGVtZW50OwotfQotI2VuZGlmIC8qIF9fUUVUSF9UU09fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYyBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCmluZGV4IDY0NGEwNmUuLjRkNGI1NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCisrKyBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCkBAIC01OSwxNSArNTksMTUgQEAKIAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogQ29kZSBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgIgogCQkJICAgICAgICJ0aGFuIHR3byBjaGFpbmVkIGNyd3M7IHBsZWFzZSByZXBvcnQgdG8gIgotCQkJICAgICAgICJsaW51eDM5MEBkZS5pYm0uY29tIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKIAkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgogCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCB0bXBfY3J3LnNsY3QsIHRtcF9jcncub2ZsdywKKwkJCSAgICAgICBfX2Z1bmNfXywgdG1wX2Nydy5zbGN0LCB0bXBfY3J3Lm9mbHcsCiAJCQkgICAgICAgdG1wX2Nydy5jaG4sIHRtcF9jcncucnNjLCB0bXBfY3J3LmFuYywKIAkJCSAgICAgICB0bXBfY3J3LmVyYywgdG1wX2Nydy5yc2lkKTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IFRoaXMgd2FzIGNydyBudW1iZXIgJXggaW4gdGhlICIKLQkJCSAgICAgICAiY2hhaW5cbiIsIF9fRlVOQ1RJT05fXywgY2hhaW4pOworCQkJICAgICAgICJjaGFpblxuIiwgX19mdW5jX18sIGNoYWluKTsKIAkJCWlmIChjY29kZSAhPSAwKQogCQkJCWJyZWFrOwogCQkJY2hhaW4gPSB0bXBfY3J3LmNobiA/IGNoYWluICsgMSA6IDA7CkBAIC04Myw3ICs4Myw3IEBACiAJCSAgICAgICBjcndbY2hhaW5dLnJzaWQpOwogCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLwogCQlpZiAoY3J3W2NoYWluXS5vZmx3KSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKIAkJCWNzc19zY2hlZHVsZV9ldmFsX2FsbCgpOwogCQkJY2hhaW4gPSAwOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaCBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCmluZGV4IGQzY2E0MjguLmNhNjgxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCisrKyBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCkBAIC0xMDUsNCArMTA1LDggQEAKICNkZWZpbmUgRURfRVRSX1NZTkMJMTIJLyogRXh0ZXJuYWwgZGFtYWdlIEVUUiBzeW5jIGNoZWNrICovCiAjZGVmaW5lIEVEX0VUUl9TV0lUQ0gJMTMJLyogRXh0ZXJuYWwgZGFtYWdlIEVUUiBzd2l0Y2ggdG8gbG9jYWwgKi8KIAorc3RydWN0IHB0X3JlZ3M7CisKK3ZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKK3ZvaWQgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKICNlbmRpZiAvKiBfX3MzOTBtYWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCA4NzRiNTVlLi44YzdlMmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTEwMzAsMTAgKzEwMzAsMTAgQEAKIAogCS8qIGluaXRpYWxpemUgZGVidWcgbG9ja3MgKi8KIAotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5lcnBfZGJmX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5oYmFfZGJmX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5zYW5fZGJmX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5zY3NpX2RiZl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVjX2RiZl9sb2NrKTsKIAogCXJldHZhbCA9IHpmY3BfYWRhcHRlcl9kZWJ1Z19yZWdpc3RlcihhZGFwdGVyKTsKIAlpZiAocmV0dmFsKQpAQCAtMTMyNSwxMCArMTMyNSwxMCBAQAogCiAjZGVmaW5lIFpGQ1BfTE9HX0FSRUEgICAgICAgICAgICAgICAgICAgWkZDUF9MT0dfQVJFQV9GQwogCi1zdGF0aWMgdm9pZAotemZjcF9mc2ZfaW5jb21pbmdfZWxzX3JzY24oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyKQorc3RhdGljIHZvaWQgemZjcF9mc2ZfaW5jb21pbmdfZWxzX3JzY24oc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKKwlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlciA9ICh2b2lkKilmc2ZfcmVxLT5kYXRhOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwogCXN0cnVjdCBmY3BfcnNjbl9oZWFkICpmY3BfcnNjbl9oZWFkOwogCXN0cnVjdCBmY3BfcnNjbl9lbGVtZW50ICpmY3BfcnNjbl9lbGVtZW50OwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CkBAIC0xMzc1LDcgKzEzNzUsOCBAQAogCQkJCVpGQ1BfTE9HX0lORk8oImluY29taW5nIFJTQ04sIHRyeWluZyB0byBvcGVuICIKIAkJCQkJICAgICAgInBvcnQgMHglMDE2THhcbiIsIHBvcnQtPnd3cG4pOwogCQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsCi0JCQkJCQkgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKTsKKwkJCQkJCSAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCisJCQkJCQkgICAgIDgyLCBmc2ZfcmVxKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMTQwNiwxMCArMTQwNywxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLXpmY3BfZnNmX2luY29taW5nX2Vsc19wbG9naShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyKQorc3RhdGljIHZvaWQgemZjcF9mc2ZfaW5jb21pbmdfZWxzX3Bsb2dpKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CisJc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnN0YXR1c19idWZmZXIgPSAodm9pZCopZnNmX3JlcS0+ZGF0YTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKIAlzdHJ1Y3QgZnNmX3Bsb2dpICplbHNfcGxvZ2k7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQyOCwxNCArMTQyOSwxNCBAQAogCQkJICAgICAgIHN0YXR1c19idWZmZXItPmRfaWQsCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJfSBlbHNlIHsKLQkJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDApOworCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgODMsIGZzZl9yZXEpOwogCX0KIH0KIAotc3RhdGljIHZvaWQKLXpmY3BfZnNmX2luY29taW5nX2Vsc19sb2dvKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlcikKK3N0YXRpYyB2b2lkIHpmY3BfZnNmX2luY29taW5nX2Vsc19sb2dvKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CisJc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnN0YXR1c19idWZmZXIgPSAodm9pZCopZnNmX3JlcS0+ZGF0YTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKIAlzdHJ1Y3QgZmNwX2xvZ28gKmVsc19sb2dvID0gKHN0cnVjdCBmY3BfbG9nbyAqKSBzdGF0dXNfYnVmZmVyLT5wYXlsb2FkOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NTMsNyArMTQ1NCw3IEBACiAJCQkgICAgICAgc3RhdHVzX2J1ZmZlci0+ZF9pZCwKIAkJCSAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAl9IGVsc2UgewotCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCk7CisJCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCA4NCwgZnNmX3JlcSk7CiAJfQogfQogCkBAIC0xNDgwLDEyICsxNDgxLDEyIEBACiAKIAl6ZmNwX3Nhbl9kYmZfZXZlbnRfaW5jb21pbmdfZWxzKGZzZl9yZXEpOwogCWlmIChlbHNfdHlwZSA9PSBMU19QTE9HSSkKLQkJemZjcF9mc2ZfaW5jb21pbmdfZWxzX3Bsb2dpKGFkYXB0ZXIsIHN0YXR1c19idWZmZXIpOworCQl6ZmNwX2ZzZl9pbmNvbWluZ19lbHNfcGxvZ2koZnNmX3JlcSk7CiAJZWxzZSBpZiAoZWxzX3R5cGUgPT0gTFNfTE9HTykKLQkJemZjcF9mc2ZfaW5jb21pbmdfZWxzX2xvZ28oYWRhcHRlciwgc3RhdHVzX2J1ZmZlcik7CisJCXpmY3BfZnNmX2luY29taW5nX2Vsc19sb2dvKGZzZl9yZXEpOwogCWVsc2UgaWYgKChlbHNfdHlwZSAmIDB4ZmZmZjAwMDApID09IExTX1JTQ04pCiAJCS8qIHdlIGFyZSBvbmx5IGNvbmNlcm5lZCB3aXRoIHRoZSBjb21tYW5kLCBub3QgdGhlIGxlbmd0aCAqLwotCQl6ZmNwX2ZzZl9pbmNvbWluZ19lbHNfcnNjbihhZGFwdGVyLCBzdGF0dXNfYnVmZmVyKTsKKwkJemZjcF9mc2ZfaW5jb21pbmdfZWxzX3JzY24oZnNmX3JlcSk7CiAJZWxzZQogCQl6ZmNwX2ZzZl9pbmNvbWluZ19lbHNfdW5rbm93bihhZGFwdGVyLCBzdGF0dXNfYnVmZmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IGVkYzUwMTUuLjY2ZDNiODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMTcwLDkgKzE3MCwxMCBAQAogCUJVR19PTighemZjcF9yZXFsaXN0X2lzZW1wdHkoYWRhcHRlcikpOwogCWFkYXB0ZXItPnJlcV9ubyA9IDA7CiAKLQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcsCi0JCQkJICAgICAgIFpGQ1BfU0VUKTsKLQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCk7CisJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIDEwLCBOVUxMLAorCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywgWkZDUF9TRVQpOworCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCA4NSwKKwkJCQlOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCWdvdG8gb3V0OwogCkBAIC0xOTcsNyArMTk4LDcgQEAKIAogCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKLQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgODYsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJemZjcF9lcnBfdGhyZWFkX2tpbGwoYWRhcHRlcik7CiAJdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CkBAIC0yMjMsMjQgKzIyNCwyMSBAQAogCWNhc2UgQ0lPX0dPTkU6CiAJCVpGQ1BfTE9HX05PUk1BTCgiYWRhcHRlciAlczogZGV2aWNlIGdvbmVcbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwxLCJkZXZfZ29uZSIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDg3LCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBDSU9fTk9fUEFUSDoKIAkJWkZDUF9MT0dfTk9STUFMKCJhZGFwdGVyICVzOiBubyBwYXRoXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsMSwibm9fcGF0aCIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDg4LCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBDSU9fT1BFUjoKIAkJWkZDUF9MT0dfTk9STUFMKCJhZGFwdGVyICVzOiBvcGVyYXRpb25hbCBhZ2FpblxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLDEsImRldl9vcGVyIik7Ci0JCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLAorCQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgMTEsIE5VTEwsCiAJCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywKIAkJCQkJICAgICAgIFpGQ1BfU0VUKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwKLQkJCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKKwkJCQkJODksIE5VTEwpOwogCQlicmVhazsKIAl9CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKQEAgLTI3Miw3ICsyNzAsNyBAQAogCiAJZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwotCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCk7CisJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCA5MCwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCmluZGV4IDcwMTA0NmMuLjM3Yjg1YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwpAQCAtMzEsMTIzICszMSwxMjggQEAKIAogI2RlZmluZSBaRkNQX0xPR19BUkVBCQkJWkZDUF9MT0dfQVJFQV9PVEhFUgogCi1zdGF0aWMgaW50Ci16ZmNwX2RiZl9zdGNrKGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmxhYmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgc3RjaykKK3N0YXRpYyB2b2lkIHpmY3BfZGJmX2hleGR1bXAoZGVidWdfaW5mb190ICpkYmYsIHZvaWQgKnRvLCBpbnQgdG9fbGVuLAorCQkJICAgICBpbnQgbGV2ZWwsIGNoYXIgKmZyb20sIGludCBmcm9tX2xlbikKK3sKKwlpbnQgb2Zmc2V0OworCXN0cnVjdCB6ZmNwX2RiZl9kdW1wICpkdW1wID0gdG87CisJaW50IHJvb20gPSB0b19sZW4gLSBzaXplb2YoKmR1bXApOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBmcm9tX2xlbjsgb2Zmc2V0ICs9IGR1bXAtPnNpemUpIHsKKwkJbWVtc2V0KHRvLCAwLCB0b19sZW4pOworCQlzdHJuY3B5KGR1bXAtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSk7CisJCWR1bXAtPnRvdGFsX3NpemUgPSBmcm9tX2xlbjsKKwkJZHVtcC0+b2Zmc2V0ID0gb2Zmc2V0OworCQlkdW1wLT5zaXplID0gbWluKGZyb21fbGVuIC0gb2Zmc2V0LCByb29tKTsKKwkJbWVtY3B5KGR1bXAtPmRhdGEsIGZyb20gKyBvZmZzZXQsIGR1bXAtPnNpemUpOworCQlkZWJ1Z19ldmVudChkYmYsIGxldmVsLCBkdW1wLCBkdW1wLT5zaXplKTsKKwl9Cit9CisKKy8qIEZJWE1FOiB0aGlzIGR1cGxpY2F0ZSB0aGlzIGNvZGUgaW4gczM5MCBkZWJ1ZyBmZWF0dXJlICovCitzdGF0aWMgdm9pZCB6ZmNwX2RiZl90aW1lc3RhbXAodW5zaWduZWQgbG9uZyBsb25nIHN0Y2ssIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2VjOwotCXN0cnVjdCB0aW1lc3BlYyBkYmZ0aW1lOwotCWludCBsZW4gPSAwOwogCiAJc3RjayAtPSAweDgxMjZkNjBlNDYwMDAwMDBMTCAtICgweDNjMjY3MDBMTCAqIDEwMDAwMDAgKiA0MDk2KTsKIAlzZWMgPSBzdGNrID4+IDEyOwogCWRvX2RpdihzZWMsIDEwMDAwMDApOwotCWRiZnRpbWUudHZfc2VjID0gc2VjOworCXRpbWUtPnR2X3NlYyA9IHNlYzsKIAlzdGNrIC09IChzZWMgKiAxMDAwMDAwKSA8PCAxMjsKLQlkYmZ0aW1lLnR2X25zZWMgPSAoKHN0Y2sgKiAxMDAwKSA+PiAxMik7Ci0JbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiUtMjRzJTAxMWx1OiUwNmx1XG4iLAotCQkgICAgICAgbGFiZWwsIGRiZnRpbWUudHZfc2VjLCBkYmZ0aW1lLnR2X25zZWMpOwotCi0JcmV0dXJuIGxlbjsKKwl0aW1lLT50dl9uc2VjID0gKChzdGNrICogMTAwMCkgPj4gMTIpOwogfQogCi1zdGF0aWMgaW50IHpmY3BfZGJmX3RhZyhjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgY2hhciAqdGFnKQorc3RhdGljIHZvaWQgemZjcF9kYmZfdGFnKGNoYXIgKipwLCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgY2hhciAqdGFnKQogewotCWludCBsZW4gPSAwLCBpOworCWludCBpOwogCi0JbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiUtMjRzIiwgbGFiZWwpOworCSpwICs9IHNwcmludGYoKnAsICIlLTI0cyIsIGxhYmVsKTsKIAlmb3IgKGkgPSAwOyBpIDwgWkZDUF9EQkZfVEFHX1NJWkU7IGkrKykKLQkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiVjIiwgdGFnW2ldKTsKLQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKLQotCXJldHVybiBsZW47CisJCSpwICs9IHNwcmludGYoKnAsICIlYyIsIHRhZ1tpXSk7CisJKnAgKz0gc3ByaW50ZigqcCwgIlxuIik7CiB9CiAKLXN0YXRpYyBpbnQKLXpmY3BfZGJmX3ZpZXcoY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorc3RhdGljIHZvaWQgemZjcF9kYmZfb3V0cyhjaGFyICoqYnVmLCBjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJKmJ1ZiArPSBzcHJpbnRmKCpidWYsICIlLTI0cyVzXG4iLCBzMSwgczIpOworfQorCitzdGF0aWMgdm9pZCB6ZmNwX2RiZl9vdXQoY2hhciAqKmJ1ZiwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmc7Ci0JaW50IGxlbiA9IDA7CiAKLQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiJS0yNHMiLCBsYWJlbCk7CisJKmJ1ZiArPSBzcHJpbnRmKCpidWYsICIlLTI0cyIsIHMpOwogCXZhX3N0YXJ0KGFyZywgZm9ybWF0KTsKLQlsZW4gKz0gdnNwcmludGYob3V0X2J1ZiArIGxlbiwgZm9ybWF0LCBhcmcpOworCSpidWYgKz0gdnNwcmludGYoKmJ1ZiwgZm9ybWF0LCBhcmcpOwogCXZhX2VuZChhcmcpOwotCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOwotCi0JcmV0dXJuIGxlbjsKKwkqYnVmICs9IHNwcmludGYoKmJ1ZiwgIlxuIik7CiB9CiAKLXN0YXRpYyBpbnQKLXpmY3BfZGJmX3ZpZXdfZHVtcChjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICpsYWJlbCwKLQkJICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgb2Zmc2V0LCBpbnQgdG90YWxfc2l6ZSkKK3N0YXRpYyB2b2lkIHpmY3BfZGJmX291dGQoY2hhciAqKnAsIGNvbnN0IGNoYXIgKmxhYmVsLCBjaGFyICpidWZmZXIsCisJCQkgIGludCBidWZsZW4sIGludCBvZmZzZXQsIGludCB0b3RhbF9zaXplKQogewotCWludCBsZW4gPSAwOwotCi0JaWYgKG9mZnNldCA9PSAwKQotCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiJS0yNHMgICIsIGxhYmVsKTsKLQorCWlmICghb2Zmc2V0KQorCQkqcCArPSBzcHJpbnRmKCpwLCAiJS0yNHMgICIsIGxhYmVsKTsKIAl3aGlsZSAoYnVmbGVuLS0pIHsKIAkJaWYgKG9mZnNldCA+IDApIHsKIAkJCWlmICgob2Zmc2V0ICUgMzIpID09IDApCi0JCQkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuJS0yNGMgICIsICcgJyk7CisJCQkJKnAgKz0gc3ByaW50ZigqcCwgIlxuJS0yNGMgICIsICcgJyk7CiAJCQllbHNlIGlmICgob2Zmc2V0ICUgNCkgPT0gMCkKLQkJCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiICIpOworCQkJCSpwICs9IHNwcmludGYoKnAsICIgIik7CiAJCX0KLQkJbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIiUwMngiLCAqYnVmZmVyKyspOworCQkqcCArPSBzcHJpbnRmKCpwLCAiJTAyeCIsICpidWZmZXIrKyk7CiAJCWlmICgrK29mZnNldCA9PSB0b3RhbF9zaXplKSB7Ci0JCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKKwkJCSpwICs9IHNwcmludGYoKnAsICJcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlpZiAodG90YWxfc2l6ZSA9PSAwKQotCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKLQotCXJldHVybiBsZW47CisJaWYgKCF0b3RhbF9zaXplKQorCQkqcCArPSBzcHJpbnRmKCpwLCAiXG4iKTsKIH0KIAotc3RhdGljIGludAotemZjcF9kYmZfdmlld19oZWFkZXIoZGVidWdfaW5mb190ICogaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LCBpbnQgYXJlYSwKLQkJICAgICBkZWJ1Z19lbnRyeV90ICogZW50cnksIGNoYXIgKm91dF9idWYpCitzdGF0aWMgaW50IHpmY3BfZGJmX3ZpZXdfaGVhZGVyKGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAorCQkJCWludCBhcmVhLCBkZWJ1Z19lbnRyeV90ICplbnRyeSwgY2hhciAqb3V0X2J1ZikKIHsKIAlzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqZHVtcCA9IChzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqKURFQlVHX0RBVEEoZW50cnkpOwotCWludCBsZW4gPSAwOworCXN0cnVjdCB0aW1lc3BlYyB0OworCWNoYXIgKnAgPSBvdXRfYnVmOwogCiAJaWYgKHN0cm5jbXAoZHVtcC0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSAhPSAwKSB7Ci0JCWxlbiArPSB6ZmNwX2RiZl9zdGNrKG91dF9idWYgKyBsZW4sICJ0aW1lc3RhbXAiLAotCQkJCSAgICAgZW50cnktPmlkLnN0Y2spOwotCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiY3B1IiwgIiUwMmkiLAotCQkJCSAgICAgZW50cnktPmlkLmZpZWxkcy5jcHVpZCk7Ci0JfSBlbHNlIHsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCBOVUxMLAotCQkJCQkgIGR1bXAtPmRhdGEsCi0JCQkJCSAgZHVtcC0+c2l6ZSwKLQkJCQkJICBkdW1wLT5vZmZzZXQsIGR1bXAtPnRvdGFsX3NpemUpOworCQl6ZmNwX2RiZl90aW1lc3RhbXAoZW50cnktPmlkLnN0Y2ssICZ0KTsKKwkJemZjcF9kYmZfb3V0KCZwLCAidGltZXN0YW1wIiwgIiUwMTFsdTolMDZsdSIsCisJCQkgICAgIHQudHZfc2VjLCB0LnR2X25zZWMpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJjcHUiLCAiJTAyaSIsIGVudHJ5LT5pZC5maWVsZHMuY3B1aWQpOworCX0gZWxzZQl7CisJCXpmY3BfZGJmX291dGQoJnAsIE5VTEwsIGR1bXAtPmRhdGEsIGR1bXAtPnNpemUsIGR1bXAtPm9mZnNldCwKKwkJCSAgICAgIGR1bXAtPnRvdGFsX3NpemUpOwogCQlpZiAoKGR1bXAtPm9mZnNldCArIGR1bXAtPnNpemUpID09IGR1bXAtPnRvdGFsX3NpemUpCi0JCQlsZW4gKz0gc3ByaW50ZihvdXRfYnVmICsgbGVuLCAiXG4iKTsKKwkJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKIAl9Ci0KLQlyZXR1cm4gbGVuOworCXJldHVybiBwIC0gb3V0X2J1ZjsKIH0KIAorLyoqCisgKiB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlIC0gdHJhY2UgZXZlbnQgZm9yIHJlcXVlc3QgY29tcGxldGlvbgorICogQGZzZl9yZXE6IHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQKKyAqLwogdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CiAJc3RydWN0IGZzZl9xdGNiICpxdGNiID0gZnNmX3JlcS0+cXRjYjsKIAl1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCAqcHJvdF9zdGF0dXNfcXVhbCA9Ci0JICAgICZxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbDsKKwkJCQkJJnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsOwogCXVuaW9uIGZzZl9zdGF0dXNfcXVhbCAqZnNmX3N0YXR1c19xdWFsID0gJnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWw7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAlzdHJ1Y3QgemZjcF9zZW5kX2VscyAqc2VuZF9lbHM7CiAJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5oYmFfZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9yZXNwb25zZSAqcmVzcG9uc2UgPSAmcmVjLT50eXBlLnJlc3BvbnNlOworCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlICpyZXNwb25zZSA9ICZyZWMtPnUucmVzcG9uc2U7CiAJaW50IGxldmVsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKIAlzdHJuY3B5KHJlYy0+dGFnLCAicmVzcCIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAogCWlmICgocXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzICE9IEZTRl9QUk9UX0dPT0QpICYmCkBAIC0xNjEsNiArMTY2LDkgQEAKIAkJICAgKGZzZl9yZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX09QRU5fTFVOKSkgewogCQlzdHJuY3B5KHJlYy0+dGFnMiwgIm9wZW4iLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAJCWxldmVsID0gNDsKKwl9IGVsc2UgaWYgKHF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoKSB7CisJCXN0cm5jcHkocmVjLT50YWcyLCAicXRjYiIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwkJbGV2ZWwgPSA1OwogCX0gZWxzZSB7CiAJCXN0cm5jcHkocmVjLT50YWcyLCAibm9ybSIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAkJbGV2ZWwgPSA2OwpAQCAtMTg4LDExICsxOTYsOSBAQAogCQlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RBU0tfTUFOQUdFTUVOVCkKIAkJCWJyZWFrOwogCQlzY3NpX2NtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWZzZl9yZXEtPmRhdGE7Ci0JCWlmIChzY3NpX2NtbmQgIT0gTlVMTCkgewotCQkJcmVzcG9uc2UtPmRhdGEuc2VuZF9mY3Auc2NzaV9jbW5kCi0JCQkgICAgPSAodW5zaWduZWQgbG9uZylzY3NpX2NtbmQ7Ci0JCQlyZXNwb25zZS0+ZGF0YS5zZW5kX2ZjcC5zY3NpX3NlcmlhbAotCQkJICAgID0gc2NzaV9jbW5kLT5zZXJpYWxfbnVtYmVyOworCQlpZiAoc2NzaV9jbW5kKSB7CisJCQlyZXNwb25zZS0+dS5mY3AuY21uZCA9ICh1bnNpZ25lZCBsb25nKXNjc2lfY21uZDsKKwkJCXJlc3BvbnNlLT51LmZjcC5zZXJpYWwgPSBzY3NpX2NtbmQtPnNlcmlhbF9udW1iZXI7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTIwMCwyNSArMjA2LDI1IEBACiAJY2FzZSBGU0ZfUVRDQl9DTE9TRV9QT1JUOgogCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVDoKIAkJcG9ydCA9IChzdHJ1Y3QgemZjcF9wb3J0ICopZnNmX3JlcS0+ZGF0YTsKLQkJcmVzcG9uc2UtPmRhdGEucG9ydC53d3BuID0gcG9ydC0+d3dwbjsKLQkJcmVzcG9uc2UtPmRhdGEucG9ydC5kX2lkID0gcG9ydC0+ZF9pZDsKLQkJcmVzcG9uc2UtPmRhdGEucG9ydC5wb3J0X2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZTsKKwkJcmVzcG9uc2UtPnUucG9ydC53d3BuID0gcG9ydC0+d3dwbjsKKwkJcmVzcG9uc2UtPnUucG9ydC5kX2lkID0gcG9ydC0+ZF9pZDsKKwkJcmVzcG9uc2UtPnUucG9ydC5wb3J0X2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9RVENCX09QRU5fTFVOOgogCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfTFVOOgogCQl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKilmc2ZfcmVxLT5kYXRhOwogCQlwb3J0ID0gdW5pdC0+cG9ydDsKLQkJcmVzcG9uc2UtPmRhdGEudW5pdC53d3BuID0gcG9ydC0+d3dwbjsKLQkJcmVzcG9uc2UtPmRhdGEudW5pdC5mY3BfbHVuID0gdW5pdC0+ZmNwX2x1bjsKLQkJcmVzcG9uc2UtPmRhdGEudW5pdC5wb3J0X2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZTsKLQkJcmVzcG9uc2UtPmRhdGEudW5pdC5sdW5faGFuZGxlID0gcXRjYi0+aGVhZGVyLmx1bl9oYW5kbGU7CisJCXJlc3BvbnNlLT51LnVuaXQud3dwbiA9IHBvcnQtPnd3cG47CisJCXJlc3BvbnNlLT51LnVuaXQuZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47CisJCXJlc3BvbnNlLT51LnVuaXQucG9ydF9oYW5kbGUgPSBxdGNiLT5oZWFkZXIucG9ydF9oYW5kbGU7CisJCXJlc3BvbnNlLT51LnVuaXQubHVuX2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5sdW5faGFuZGxlOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1FUQ0JfU0VORF9FTFM6CiAJCXNlbmRfZWxzID0gKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopZnNmX3JlcS0+ZGF0YTsKLQkJcmVzcG9uc2UtPmRhdGEuc2VuZF9lbHMuZF9pZCA9IHF0Y2ItPmJvdHRvbS5zdXBwb3J0LmRfaWQ7Ci0JCXJlc3BvbnNlLT5kYXRhLnNlbmRfZWxzLmxzX2NvZGUgPSBzZW5kX2Vscy0+bHNfY29kZSA+PiAyNDsKKwkJcmVzcG9uc2UtPnUuZWxzLmRfaWQgPSBxdGNiLT5ib3R0b20uc3VwcG9ydC5kX2lkOworCQlyZXNwb25zZS0+dS5lbHMubHNfY29kZSA9IHNlbmRfZWxzLT5sc19jb2RlID4+IDI0OwogCQlicmVhazsKIAogCWNhc2UgRlNGX1FUQ0JfQUJPUlRfRkNQX0NNTkQ6CkBAIC0yMzAsMzkgKzIzNiw1NCBAQAogCQlicmVhazsKIAl9CiAKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCBsZXZlbCwKLQkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+aGJhX2RiZiwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKKworCS8qIGhhdmUgZmNwIGNoYW5uZWwgbWljcm9jb2RlIGZpeGVkIHRvIHVzZSBhcyBsaXR0bGUgYXMgcG9zc2libGUgKi8KKwlpZiAoZnNmX3JlcS0+ZnNmX2NvbW1hbmQgIT0gRlNGX1FUQ0JfRkNQX0NNTkQpIHsKKwkJLyogYWRqdXN0IGxlbmd0aCBza2lwcGluZyB0cmFpbGluZyB6ZXJvcyAqLworCQljaGFyICpidWYgPSAoY2hhciAqKXF0Y2IgKyBxdGNiLT5oZWFkZXIubG9nX3N0YXJ0OworCQlpbnQgbGVuID0gcXRjYi0+aGVhZGVyLmxvZ19sZW5ndGg7CisJCWZvciAoOyBsZW4gJiYgIWJ1ZltsZW4gLSAxXTsgbGVuLS0pOworCQl6ZmNwX2RiZl9oZXhkdW1wKGFkYXB0ZXItPmhiYV9kYmYsIHJlYywgc2l6ZW9mKCpyZWMpLCBsZXZlbCwKKwkJCQkgYnVmLCBsZW4pOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkCi16ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnN0YXR1c19idWZmZXIpCisvKioKKyAqIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2wgLSB0cmFjZSBldmVudCBmb3IgYW4gdW5zb2xpY2l0ZWQgc3RhdHVzIGJ1ZmZlcgorICogQHRhZzogdGFnIGluZGljYXRpbmcgd2hpY2gga2luZCBvZiB1bnNvbGljaXRlZCBzdGF0dXMgaGFzIGJlZW4gcmVjZWl2ZWQKKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoYXQgaGFzIGlzc3VlZCB0aGUgdW5zb2xpY2l0ZWQgc3RhdHVzIGJ1ZmZlcgorICogQHN0YXR1c19idWZmZXI6IGJ1ZmZlciBjb250YWluaW5nIHBheWxvYWQgb2YgdW5zb2xpY2l0ZWQgc3RhdHVzCisgKi8KK3ZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbChjb25zdCBjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlcikKIHsKIAlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPmhiYV9kYmZfYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKIAlzdHJuY3B5KHJlYy0+dGFnLCAic3RhdCIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAlzdHJuY3B5KHJlYy0+dGFnMiwgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAKLQlyZWMtPnR5cGUuc3RhdHVzLmZhaWxlZCA9IGFkYXB0ZXItPnN0YXR1c19yZWFkX2ZhaWxlZDsKKwlyZWMtPnUuc3RhdHVzLmZhaWxlZCA9IGFkYXB0ZXItPnN0YXR1c19yZWFkX2ZhaWxlZDsKIAlpZiAoc3RhdHVzX2J1ZmZlciAhPSBOVUxMKSB7Ci0JCXJlYy0+dHlwZS5zdGF0dXMuc3RhdHVzX3R5cGUgPSBzdGF0dXNfYnVmZmVyLT5zdGF0dXNfdHlwZTsKLQkJcmVjLT50eXBlLnN0YXR1cy5zdGF0dXNfc3VidHlwZSA9IHN0YXR1c19idWZmZXItPnN0YXR1c19zdWJ0eXBlOwotCQltZW1jcHkoJnJlYy0+dHlwZS5zdGF0dXMucXVldWVfZGVzaWduYXRvciwKKwkJcmVjLT51LnN0YXR1cy5zdGF0dXNfdHlwZSA9IHN0YXR1c19idWZmZXItPnN0YXR1c190eXBlOworCQlyZWMtPnUuc3RhdHVzLnN0YXR1c19zdWJ0eXBlID0gc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3N1YnR5cGU7CisJCW1lbWNweSgmcmVjLT51LnN0YXR1cy5xdWV1ZV9kZXNpZ25hdG9yLAogCQkgICAgICAgJnN0YXR1c19idWZmZXItPnF1ZXVlX2Rlc2lnbmF0b3IsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yKSk7CiAKIAkJc3dpdGNoIChzdGF0dXNfYnVmZmVyLT5zdGF0dXNfdHlwZSkgewogCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TRU5TRV9EQVRBX0FWQUlMOgotCQkJcmVjLT50eXBlLnN0YXR1cy5wYXlsb2FkX3NpemUgPQorCQkJcmVjLT51LnN0YXR1cy5wYXlsb2FkX3NpemUgPQogCQkJICAgIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfU0VOU0VfREFUQV9BVkFJTDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRlNGX1NUQVRVU19SRUFEX0JJVF9FUlJPUl9USFJFU0hPTEQ6Ci0JCQlyZWMtPnR5cGUuc3RhdHVzLnBheWxvYWRfc2l6ZSA9CisJCQlyZWMtPnUuc3RhdHVzLnBheWxvYWRfc2l6ZSA9CiAJCQkgICAgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9CSVRfRVJST1JfVEhSRVNIT0xEOwogCQkJYnJlYWs7CiAKQEAgLTI3MCwxMTkgKzI5MSwxMDEgQEAKIAkJCXN3aXRjaCAoc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3N1YnR5cGUpIHsKIAkJCWNhc2UgRlNGX1NUQVRVU19SRUFEX1NVQl9OT19QSFlTSUNBTF9MSU5LOgogCQkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX0ZESVNDX0ZBSUxFRDoKLQkJCQlyZWMtPnR5cGUuc3RhdHVzLnBheWxvYWRfc2l6ZSA9CisJCQkJcmVjLT51LnN0YXR1cy5wYXlsb2FkX3NpemUgPQogCQkJCQlzaXplb2Yoc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyk7CiAJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9GRUFUVVJFX1VQREFURV9BTEVSVDoKLQkJCXJlYy0+dHlwZS5zdGF0dXMucGF5bG9hZF9zaXplID0KKwkJCXJlYy0+dS5zdGF0dXMucGF5bG9hZF9zaXplID0KIAkJCSAgICBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX0ZFQVRVUkVfVVBEQVRFX0FMRVJUOwogCQkJYnJlYWs7CiAJCX0KLQkJbWVtY3B5KCZyZWMtPnR5cGUuc3RhdHVzLnBheWxvYWQsCi0JCSAgICAgICAmc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCwgcmVjLT50eXBlLnN0YXR1cy5wYXlsb2FkX3NpemUpOworCQltZW1jcHkoJnJlYy0+dS5zdGF0dXMucGF5bG9hZCwKKwkJICAgICAgICZzdGF0dXNfYnVmZmVyLT5wYXlsb2FkLCByZWMtPnUuc3RhdHVzLnBheWxvYWRfc2l6ZSk7CiAJfQogCi0JZGVidWdfZXZlbnQoYWRhcHRlci0+aGJhX2RiZiwgMiwKLQkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+aGJhX2RiZiwgMiwgcmVjLCBzaXplb2YoKnJlYykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkCi16ZmNwX2hiYV9kYmZfZXZlbnRfcWRpbyhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgc3RhdHVzLAotCQkJdW5zaWduZWQgaW50IHFkaW9fZXJyb3IsIHVuc2lnbmVkIGludCBzaWdhX2Vycm9yLAotCQkJaW50IHNiYWxfaW5kZXgsIGludCBzYmFsX2NvdW50KQorLyoqCisgKiB6ZmNwX2hiYV9kYmZfZXZlbnRfcWRpbyAtIHRyYWNlIGV2ZW50IGZvciBRRElPIHJlbGF0ZWQgZmFpbHVyZQorICogQGFkYXB0ZXI6IGFkYXB0ZXIgYWZmZWN0ZWQgYnkgdGhpcyBRRElPIHJlbGF0ZWQgZXZlbnQKKyAqIEBzdGF0dXM6IGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQorICogQHFkaW9fZXJyb3I6IGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQorICogQHNpZ2FfZXJyb3I6IGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQorICogQHNiYWxfaW5kZXg6IGZpcnN0IGJ1ZmZlciB3aXRoIGVycm9yIGNvbmRpdGlvbiwgYXMgcGFzc2VkIGJ5IHFkaW8gbW9kdWxlCisgKiBAc2JhbF9jb3VudDogbnVtYmVyIG9mIGJ1ZmZlcnMgYWZmZWN0ZWQsIGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQorICovCit2b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9xZGlvKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBzdGF0dXMsCisJCQkgICAgIHVuc2lnbmVkIGludCBxZGlvX2Vycm9yLCB1bnNpZ25lZCBpbnQgc2lnYV9lcnJvciwKKwkJCSAgICAgaW50IHNiYWxfaW5kZXgsIGludCBzYmFsX2NvdW50KQogewotCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+aGJhX2RiZl9idWY7CisJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+aGJhX2RiZl9idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQocmVjLCAwLCBzaXplb2Yoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQpKTsKLQlzdHJuY3B5KHJlYy0+dGFnLCAicWRpbyIsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQlyZWMtPnR5cGUucWRpby5zdGF0dXMgPSBzdGF0dXM7Ci0JcmVjLT50eXBlLnFkaW8ucWRpb19lcnJvciA9IHFkaW9fZXJyb3I7Ci0JcmVjLT50eXBlLnFkaW8uc2lnYV9lcnJvciA9IHNpZ2FfZXJyb3I7Ci0JcmVjLT50eXBlLnFkaW8uc2JhbF9pbmRleCA9IHNiYWxfaW5kZXg7Ci0JcmVjLT50eXBlLnFkaW8uc2JhbF9jb3VudCA9IHNiYWxfY291bnQ7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+aGJhX2RiZiwgMCwKLQkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkKSk7CisJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOworCXN0cm5jcHkoci0+dGFnLCAicWRpbyIsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwlyLT51LnFkaW8uc3RhdHVzID0gc3RhdHVzOworCXItPnUucWRpby5xZGlvX2Vycm9yID0gcWRpb19lcnJvcjsKKwlyLT51LnFkaW8uc2lnYV9lcnJvciA9IHNpZ2FfZXJyb3I7CisJci0+dS5xZGlvLnNiYWxfaW5kZXggPSBzYmFsX2luZGV4OworCXItPnUucWRpby5zYmFsX2NvdW50ID0gc2JhbF9jb3VudDsKKwlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCAwLCByLCBzaXplb2YoKnIpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludAotemZjcF9oYmFfZGJmX3ZpZXdfcmVzcG9uc2UoY2hhciAqb3V0X2J1ZiwKLQkJCSAgIHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlICpyZWMpCitzdGF0aWMgdm9pZCB6ZmNwX2hiYV9kYmZfdmlld19yZXNwb25zZShjaGFyICoqcCwKKwkJCQkgICAgICAgc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcmVzcG9uc2UgKnIpCiB7Ci0JaW50IGxlbiA9IDA7CisJc3RydWN0IHRpbWVzcGVjIHQ7CiAKLQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZnNmX2NvbW1hbmQiLCAiMHglMDh4IiwKLQkJCSAgICAgcmVjLT5mc2ZfY29tbWFuZCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFpZCIsICIweCUwTHgiLAotCQkJICAgICByZWMtPmZzZl9yZXFpZCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9zZXFubyIsICIweCUwOHgiLAotCQkJICAgICByZWMtPmZzZl9zZXFubyk7Ci0JbGVuICs9IHpmY3BfZGJmX3N0Y2sob3V0X2J1ZiArIGxlbiwgImZzZl9pc3N1ZWQiLCByZWMtPmZzZl9pc3N1ZWQpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2ZfcHJvdF9zdGF0dXMiLCAiMHglMDh4IiwKLQkJCSAgICAgcmVjLT5mc2ZfcHJvdF9zdGF0dXMpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2Zfc3RhdHVzIiwgIjB4JTA4eCIsCi0JCQkgICAgIHJlYy0+ZnNmX3N0YXR1cyk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAiZnNmX3Byb3Rfc3RhdHVzX3F1YWwiLAotCQkJCSAgcmVjLT5mc2ZfcHJvdF9zdGF0dXNfcXVhbCwKLQkJCQkgIEZTRl9QUk9UX1NUQVRVU19RVUFMX1NJWkUsCi0JCQkJICAwLCBGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFKTsKLQlsZW4gKz0gemZjcF9kYmZfdmlld19kdW1wKG91dF9idWYgKyBsZW4sICJmc2Zfc3RhdHVzX3F1YWwiLAotCQkJCSAgcmVjLT5mc2Zfc3RhdHVzX3F1YWwsCi0JCQkJICBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFLAotCQkJCSAgMCwgRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFfc3RhdHVzIiwgIjB4JTA4eCIsCi0JCQkgICAgIHJlYy0+ZnNmX3JlcV9zdGF0dXMpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzYmFsX2ZpcnN0IiwgIjB4JTAyeCIsCi0JCQkgICAgIHJlYy0+c2JhbF9maXJzdCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNiYWxfY3VyciIsICIweCUwMngiLAotCQkJICAgICByZWMtPnNiYWxfY3Vycik7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNiYWxfbGFzdCIsICIweCUwMngiLAotCQkJICAgICByZWMtPnNiYWxfbGFzdCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInBvb2wiLCAiMHglMDJ4IiwgcmVjLT5wb29sKTsKKwl6ZmNwX2RiZl9vdXQocCwgImZzZl9jb21tYW5kIiwgIjB4JTA4eCIsIHItPmZzZl9jb21tYW5kKTsKKwl6ZmNwX2RiZl9vdXQocCwgImZzZl9yZXFpZCIsICIweCUwTHgiLCByLT5mc2ZfcmVxaWQpOworCXpmY3BfZGJmX291dChwLCAiZnNmX3NlcW5vIiwgIjB4JTA4eCIsIHItPmZzZl9zZXFubyk7CisJemZjcF9kYmZfdGltZXN0YW1wKHItPmZzZl9pc3N1ZWQsICZ0KTsKKwl6ZmNwX2RiZl9vdXQocCwgImZzZl9pc3N1ZWQiLCAiJTAxMWx1OiUwNmx1IiwgdC50dl9zZWMsIHQudHZfbnNlYyk7CisJemZjcF9kYmZfb3V0KHAsICJmc2ZfcHJvdF9zdGF0dXMiLCAiMHglMDh4Iiwgci0+ZnNmX3Byb3Rfc3RhdHVzKTsKKwl6ZmNwX2RiZl9vdXQocCwgImZzZl9zdGF0dXMiLCAiMHglMDh4Iiwgci0+ZnNmX3N0YXR1cyk7CisJemZjcF9kYmZfb3V0ZChwLCAiZnNmX3Byb3Rfc3RhdHVzX3F1YWwiLCByLT5mc2ZfcHJvdF9zdGF0dXNfcXVhbCwKKwkJICAgICAgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRSwgMCwgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRSk7CisJemZjcF9kYmZfb3V0ZChwLCAiZnNmX3N0YXR1c19xdWFsIiwgci0+ZnNmX3N0YXR1c19xdWFsLAorCQkgICAgICBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFLCAwLCBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFKTsKKwl6ZmNwX2RiZl9vdXQocCwgImZzZl9yZXFfc3RhdHVzIiwgIjB4JTA4eCIsIHItPmZzZl9yZXFfc3RhdHVzKTsKKwl6ZmNwX2RiZl9vdXQocCwgInNiYWxfZmlyc3QiLCAiMHglMDJ4Iiwgci0+c2JhbF9maXJzdCk7CisJemZjcF9kYmZfb3V0KHAsICJzYmFsX2N1cnIiLCAiMHglMDJ4Iiwgci0+c2JhbF9jdXJyKTsKKwl6ZmNwX2RiZl9vdXQocCwgInNiYWxfbGFzdCIsICIweCUwMngiLCByLT5zYmFsX2xhc3QpOworCXpmY3BfZGJmX291dChwLCAicG9vbCIsICIweCUwMngiLCByLT5wb29sKTsKIAotCXN3aXRjaCAocmVjLT5mc2ZfY29tbWFuZCkgeworCXN3aXRjaCAoci0+ZnNmX2NvbW1hbmQpIHsKIAljYXNlIEZTRl9RVENCX0ZDUF9DTU5EOgotCQlpZiAocmVjLT5mc2ZfcmVxX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQpCisJCWlmIChyLT5mc2ZfcmVxX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQpCiAJCQlicmVhazsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfY21uZCIsICIweCUwTHgiLAotCQkJCSAgICAgcmVjLT5kYXRhLnNlbmRfZmNwLnNjc2lfY21uZCk7Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX3NlcmlhbCIsICIweCUwMTZMeCIsCi0JCQkJICAgICByZWMtPmRhdGEuc2VuZF9mY3Auc2NzaV9zZXJpYWwpOworCQl6ZmNwX2RiZl9vdXQocCwgInNjc2lfY21uZCIsICIweCUwTHgiLCByLT51LmZjcC5jbW5kKTsKKwkJemZjcF9kYmZfb3V0KHAsICJzY3NpX3NlcmlhbCIsICIweCUwMTZMeCIsIHItPnUuZmNwLnNlcmlhbCk7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQ6CiAJY2FzZSBGU0ZfUVRDQl9DTE9TRV9QT1JUOgogCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVDoKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInd3cG4iLCAiMHglMDE2THgiLAotCQkJCSAgICAgcmVjLT5kYXRhLnBvcnQud3dwbik7Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJkX2lkIiwgIjB4JTA2eCIsCi0JCQkJICAgICByZWMtPmRhdGEucG9ydC5kX2lkKTsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInBvcnRfaGFuZGxlIiwgIjB4JTA4eCIsCi0JCQkJICAgICByZWMtPmRhdGEucG9ydC5wb3J0X2hhbmRsZSk7CisJCXpmY3BfZGJmX291dChwLCAid3dwbiIsICIweCUwMTZMeCIsIHItPnUucG9ydC53d3BuKTsKKwkJemZjcF9kYmZfb3V0KHAsICJkX2lkIiwgIjB4JTA2eCIsIHItPnUucG9ydC5kX2lkKTsKKwkJemZjcF9kYmZfb3V0KHAsICJwb3J0X2hhbmRsZSIsICIweCUwOHgiLCByLT51LnBvcnQucG9ydF9oYW5kbGUpOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1FUQ0JfT1BFTl9MVU46CiAJY2FzZSBGU0ZfUVRDQl9DTE9TRV9MVU46Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJ3d3BuIiwgIjB4JTAxNkx4IiwKLQkJCQkgICAgIHJlYy0+ZGF0YS51bml0Lnd3cG4pOwotCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmNwX2x1biIsICIweCUwMTZMeCIsCi0JCQkJICAgICByZWMtPmRhdGEudW5pdC5mY3BfbHVuKTsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInBvcnRfaGFuZGxlIiwgIjB4JTA4eCIsCi0JCQkJICAgICByZWMtPmRhdGEudW5pdC5wb3J0X2hhbmRsZSk7Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJsdW5faGFuZGxlIiwgIjB4JTA4eCIsCi0JCQkJICAgICByZWMtPmRhdGEudW5pdC5sdW5faGFuZGxlKTsKKwkJemZjcF9kYmZfb3V0KHAsICJ3d3BuIiwgIjB4JTAxNkx4Iiwgci0+dS51bml0Lnd3cG4pOworCQl6ZmNwX2RiZl9vdXQocCwgImZjcF9sdW4iLCAiMHglMDE2THgiLCByLT51LnVuaXQuZmNwX2x1bik7CisJCXpmY3BfZGJmX291dChwLCAicG9ydF9oYW5kbGUiLCAiMHglMDh4Iiwgci0+dS51bml0LnBvcnRfaGFuZGxlKTsKKwkJemZjcF9kYmZfb3V0KHAsICJsdW5faGFuZGxlIiwgIjB4JTA4eCIsIHItPnUudW5pdC5sdW5faGFuZGxlKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9RVENCX1NFTkRfRUxTOgotCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZF9pZCIsICIweCUwNngiLAotCQkJCSAgICAgcmVjLT5kYXRhLnNlbmRfZWxzLmRfaWQpOwotCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAibHNfY29kZSIsICIweCUwMngiLAotCQkJCSAgICAgcmVjLT5kYXRhLnNlbmRfZWxzLmxzX2NvZGUpOworCQl6ZmNwX2RiZl9vdXQocCwgImRfaWQiLCAiMHglMDZ4Iiwgci0+dS5lbHMuZF9pZCk7CisJCXpmY3BfZGJmX291dChwLCAibHNfY29kZSIsICIweCUwMngiLCByLT51LmVscy5sc19jb2RlKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5EOgpAQCAtMzkzLDc0ICszOTYsNTIgQEAKIAljYXNlIEZTRl9RVENCX1VQTE9BRF9DT05UUk9MX0ZJTEU6CiAJCWJyZWFrOwogCX0KLQotCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBpbnQKLXpmY3BfaGJhX2RiZl92aWV3X3N0YXR1cyhjaGFyICpvdXRfYnVmLCBzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgKnJlYykKK3N0YXRpYyB2b2lkIHpmY3BfaGJhX2RiZl92aWV3X3N0YXR1cyhjaGFyICoqcCwKKwkJCQkgICAgIHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3N0YXR1cyAqcikKIHsKLQlpbnQgbGVuID0gMDsKLQotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmYWlsZWQiLCAiMHglMDJ4IiwgcmVjLT5mYWlsZWQpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzdGF0dXNfdHlwZSIsICIweCUwOHgiLAotCQkJICAgICByZWMtPnN0YXR1c190eXBlKTsKLQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic3RhdHVzX3N1YnR5cGUiLCAiMHglMDh4IiwKLQkJCSAgICAgcmVjLT5zdGF0dXNfc3VidHlwZSk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAicXVldWVfZGVzaWduYXRvciIsCi0JCQkJICAoY2hhciAqKSZyZWMtPnF1ZXVlX2Rlc2lnbmF0b3IsCi0JCQkJICBzaXplb2Yoc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yKSwKLQkJCQkgIDAsIHNpemVvZihzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IpKTsKLQlsZW4gKz0gemZjcF9kYmZfdmlld19kdW1wKG91dF9idWYgKyBsZW4sICJwYXlsb2FkIiwKLQkJCQkgIChjaGFyICopJnJlYy0+cGF5bG9hZCwKLQkJCQkgIHJlYy0+cGF5bG9hZF9zaXplLCAwLCByZWMtPnBheWxvYWRfc2l6ZSk7Ci0KLQlyZXR1cm4gbGVuOworCXpmY3BfZGJmX291dChwLCAiZmFpbGVkIiwgIjB4JTAyeCIsIHItPmZhaWxlZCk7CisJemZjcF9kYmZfb3V0KHAsICJzdGF0dXNfdHlwZSIsICIweCUwOHgiLCByLT5zdGF0dXNfdHlwZSk7CisJemZjcF9kYmZfb3V0KHAsICJzdGF0dXNfc3VidHlwZSIsICIweCUwOHgiLCByLT5zdGF0dXNfc3VidHlwZSk7CisJemZjcF9kYmZfb3V0ZChwLCAicXVldWVfZGVzaWduYXRvciIsIChjaGFyICopJnItPnF1ZXVlX2Rlc2lnbmF0b3IsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IpLCAwLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yKSk7CisJemZjcF9kYmZfb3V0ZChwLCAicGF5bG9hZCIsIChjaGFyICopJnItPnBheWxvYWQsIHItPnBheWxvYWRfc2l6ZSwgMCwKKwkJICAgICAgci0+cGF5bG9hZF9zaXplKTsKIH0KIAotc3RhdGljIGludAotemZjcF9oYmFfZGJmX3ZpZXdfcWRpbyhjaGFyICpvdXRfYnVmLCBzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9xZGlvICpyZWMpCitzdGF0aWMgdm9pZCB6ZmNwX2hiYV9kYmZfdmlld19xZGlvKGNoYXIgKipwLCBzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9xZGlvICpyKQogewotCWludCBsZW4gPSAwOwotCi0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInN0YXR1cyIsICIweCUwOHgiLCByZWMtPnN0YXR1cyk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInFkaW9fZXJyb3IiLCAiMHglMDh4IiwKLQkJCSAgICAgcmVjLT5xZGlvX2Vycm9yKTsKLQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2lnYV9lcnJvciIsICIweCUwOHgiLAotCQkJICAgICByZWMtPnNpZ2FfZXJyb3IpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzYmFsX2luZGV4IiwgIjB4JTAyeCIsCi0JCQkgICAgIHJlYy0+c2JhbF9pbmRleCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNiYWxfY291bnQiLCAiMHglMDJ4IiwKLQkJCSAgICAgcmVjLT5zYmFsX2NvdW50KTsKLQotCXJldHVybiBsZW47CisJemZjcF9kYmZfb3V0KHAsICJzdGF0dXMiLCAiMHglMDh4Iiwgci0+c3RhdHVzKTsKKwl6ZmNwX2RiZl9vdXQocCwgInFkaW9fZXJyb3IiLCAiMHglMDh4Iiwgci0+cWRpb19lcnJvcik7CisJemZjcF9kYmZfb3V0KHAsICJzaWdhX2Vycm9yIiwgIjB4JTA4eCIsIHItPnNpZ2FfZXJyb3IpOworCXpmY3BfZGJmX291dChwLCAic2JhbF9pbmRleCIsICIweCUwMngiLCByLT5zYmFsX2luZGV4KTsKKwl6ZmNwX2RiZl9vdXQocCwgInNiYWxfY291bnQiLCAiMHglMDJ4Iiwgci0+c2JhbF9jb3VudCk7CiB9CiAKLXN0YXRpYyBpbnQKLXpmY3BfaGJhX2RiZl92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKiBpZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCi0JCQkgY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqaW5fYnVmKQorc3RhdGljIGludCB6ZmNwX2hiYV9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCisJCQkJICAgIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZikKIHsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqcmVjID0gKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICopaW5fYnVmOwotCWludCBsZW4gPSAwOworCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICopaW5fYnVmOworCWNoYXIgKnAgPSBvdXRfYnVmOwogCi0JaWYgKHN0cm5jbXAocmVjLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCisJaWYgKHN0cm5jbXAoci0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWxlbiArPSB6ZmNwX2RiZl90YWcob3V0X2J1ZiArIGxlbiwgInRhZyIsIHJlYy0+dGFnKTsKLQlpZiAoaXNhbHBoYShyZWMtPnRhZzJbMF0pKQotCQlsZW4gKz0gemZjcF9kYmZfdGFnKG91dF9idWYgKyBsZW4sICJ0YWcyIiwgcmVjLT50YWcyKTsKLQlpZiAoc3RybmNtcChyZWMtPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJbGVuICs9IHpmY3BfaGJhX2RiZl92aWV3X3Jlc3BvbnNlKG91dF9idWYgKyBsZW4sCi0JCQkJCQkgICZyZWMtPnR5cGUucmVzcG9uc2UpOwotCWVsc2UgaWYgKHN0cm5jbXAocmVjLT50YWcsICJzdGF0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCi0JCWxlbiArPSB6ZmNwX2hiYV9kYmZfdmlld19zdGF0dXMob3V0X2J1ZiArIGxlbiwKLQkJCQkJCSZyZWMtPnR5cGUuc3RhdHVzKTsKLQllbHNlIGlmIChzdHJuY21wKHJlYy0+dGFnLCAicWRpbyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQotCQlsZW4gKz0gemZjcF9oYmFfZGJmX3ZpZXdfcWRpbyhvdXRfYnVmICsgbGVuLCAmcmVjLT50eXBlLnFkaW8pOworCXpmY3BfZGJmX3RhZygmcCwgInRhZyIsIHItPnRhZyk7CisJaWYgKGlzYWxwaGEoci0+dGFnMlswXSkpCisJCXpmY3BfZGJmX3RhZygmcCwgInRhZzIiLCByLT50YWcyKTsKIAotCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOworCWlmIChzdHJuY21wKHItPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwkJemZjcF9oYmFfZGJmX3ZpZXdfcmVzcG9uc2UoJnAsICZyLT51LnJlc3BvbnNlKTsKKwllbHNlIGlmIChzdHJuY21wKHItPnRhZywgInN0YXQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwkJemZjcF9oYmFfZGJmX3ZpZXdfc3RhdHVzKCZwLCAmci0+dS5zdGF0dXMpOworCWVsc2UgaWYgKHN0cm5jbXAoci0+dGFnLCAicWRpbyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQorCQl6ZmNwX2hiYV9kYmZfdmlld19xZGlvKCZwLCAmci0+dS5xZGlvKTsKIAotCXJldHVybiBsZW47CisJcCArPSBzcHJpbnRmKHAsICJcbiIpOworCXJldHVybiBwIC0gb3V0X2J1ZjsKIH0KIAogc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3BfaGJhX2RiZl92aWV3ID0gewpAQCAtNDcyLDIxOSArNDUzLDU3MCBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyB2b2lkCi1femZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9jdChjb25zdCBjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsCi0JCQkgICAgICB1MzIgc19pZCwgdTMyIGRfaWQsIHZvaWQgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKLXsKLQlzdHJ1Y3QgemZjcF9zZW5kX2N0ICpzZW5kX2N0ID0gKHN0cnVjdCB6ZmNwX3NlbmRfY3QgKilmc2ZfcmVxLT5kYXRhOwotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBzZW5kX2N0LT5wb3J0OwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwotCXN0cnVjdCBjdF9oZHIgKmhlYWRlciA9IChzdHJ1Y3QgY3RfaGRyICopYnVmZmVyOwotCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+c2FuX2RiZl9idWY7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3QgKmN0ID0gJnJlYy0+dHlwZS5jdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworc3RhdGljIGNvbnN0IGNoYXIgKnpmY3BfcmVjX2RiZl90YWdzW10gPSB7CisJW1pGQ1BfUkVDX0RCRl9JRF9USFJFQURdID0gInRocmVhZCIsCisJW1pGQ1BfUkVDX0RCRl9JRF9UQVJHRVRdID0gInRhcmdldCIsCisJW1pGQ1BfUkVDX0RCRl9JRF9UUklHR0VSXSA9ICJ0cmlnZ2VyIiwKKwlbWkZDUF9SRUNfREJGX0lEX0FDVElPTl0gPSAiYWN0aW9uIiwKK307CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KHJlYywgMCwgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkKSk7Ci0Jc3RybmNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JcmVjLT5mc2ZfcmVxaWQgPSAodW5zaWduZWQgbG9uZylmc2ZfcmVxOwotCXJlYy0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOwotCXJlYy0+c19pZCA9IHNfaWQ7Ci0JcmVjLT5kX2lkID0gZF9pZDsKLQlpZiAoc3RybmNtcCh0YWcsICJvY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKLQkJY3QtPnR5cGUucmVxdWVzdC5jbWRfcmVxX2NvZGUgPSBoZWFkZXItPmNtZF9yc3BfY29kZTsKLQkJY3QtPnR5cGUucmVxdWVzdC5yZXZpc2lvbiA9IGhlYWRlci0+cmV2aXNpb247Ci0JCWN0LT50eXBlLnJlcXVlc3QuZ3NfdHlwZSA9IGhlYWRlci0+Z3NfdHlwZTsKLQkJY3QtPnR5cGUucmVxdWVzdC5nc19zdWJ0eXBlID0gaGVhZGVyLT5nc19zdWJ0eXBlOwotCQljdC0+dHlwZS5yZXF1ZXN0Lm9wdGlvbnMgPSBoZWFkZXItPm9wdGlvbnM7Ci0JCWN0LT50eXBlLnJlcXVlc3QubWF4X3Jlc19zaXplID0gaGVhZGVyLT5tYXhfcmVzX3NpemU7Ci0JfSBlbHNlIGlmIChzdHJuY21wKHRhZywgInJjdGMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgewotCQljdC0+dHlwZS5yZXNwb25zZS5jbWRfcnNwX2NvZGUgPSBoZWFkZXItPmNtZF9yc3BfY29kZTsKLQkJY3QtPnR5cGUucmVzcG9uc2UucmV2aXNpb24gPSBoZWFkZXItPnJldmlzaW9uOwotCQljdC0+dHlwZS5yZXNwb25zZS5yZWFzb25fY29kZSA9IGhlYWRlci0+cmVhc29uX2NvZGU7Ci0JCWN0LT50eXBlLnJlc3BvbnNlLnJlYXNvbl9jb2RlX2V4cGwgPSBoZWFkZXItPnJlYXNvbl9jb2RlX2V4cGw7Ci0JCWN0LT50eXBlLnJlc3BvbnNlLnZlbmRvcl91bmlxdWUgPSBoZWFkZXItPnZlbmRvcl91bmlxdWU7CitzdGF0aWMgY29uc3QgY2hhciAqemZjcF9yZWNfZGJmX2lkc1tdID0geworCVsxXQk9ICJuZXciLAorCVsyXQk9ICJyZWFkeSIsCisJWzNdCT0gImtpbGwiLAorCVs0XQk9ICJkb3duIHNsZWVwIiwKKwlbNV0JPSAiZG93biB3YWtldXAiLAorCVs2XQk9ICJkb3duIHNsZWVwIGVjZCIsCisJWzddCT0gImRvd24gd2FrZXVwIGVjZCIsCisJWzhdCT0gImRvd24gc2xlZXAgZXBkIiwKKwlbOV0JPSAiZG93biB3YWtldXAgZXBkIiwKKwlbMTBdCT0gIm9ubGluZSIsCisJWzExXQk9ICJvcGVyYXRpb25hbCIsCisJWzEyXQk9ICJzY3NpIHNsYXZlIGRlc3Ryb3kiLAorCVsxM10JPSAicHJvcGFnYXRlIGZhaWxlZCBhZGFwdGVyIiwKKwlbMTRdCT0gInByb3BhZ2F0ZSBmYWlsZWQgcG9ydCIsCisJWzE1XQk9ICJibG9jayBhZGFwdGVyIiwKKwlbMTZdCT0gInVuYmxvY2sgYWRhcHRlciIsCisJWzE3XQk9ICJibG9jayBwb3J0IiwKKwlbMThdCT0gInVuYmxvY2sgcG9ydCIsCisJWzE5XQk9ICJibG9jayB1bml0IiwKKwlbMjBdCT0gInVuYmxvY2sgdW5pdCIsCisJWzIxXQk9ICJ1bml0IHJlY292ZXJ5IGZhaWxlZCIsCisJWzIyXQk9ICJwb3J0IHJlY292ZXJ5IGZhaWxlZCIsCisJWzIzXQk9ICJhZGFwdGVyIHJlY292ZXJ5IGZhaWxlZCIsCisJWzI0XQk9ICJxZGlvIHF1ZXVlcyBkb3duIiwKKwlbMjVdCT0gInAycCBmYWlsZWQiLAorCVsyNl0JPSAibmFtZXNlcnZlciBsb29rdXAgZmFpbGVkIiwKKwlbMjddCT0gIm5hbWVzZXJ2ZXIgcG9ydCBmYWlsZWQiLAorCVsyOF0JPSAibGluayB1cCIsCisJWzI5XQk9ICJsaW5rIGRvd24iLAorCVszMF0JPSAibGluayB1cCBzdGF0dXMgcmVhZCIsCisJWzMxXQk9ICJvcGVuIHBvcnQgZmFpbGVkIiwKKwlbMzJdCT0gIm9wZW4gcG9ydCBmYWlsZWQiLAorCVszM10JPSAiY2xvc2UgcG9ydCIsCisJWzM0XQk9ICJvcGVuIHVuaXQgZmFpbGVkIiwKKwlbMzVdCT0gImV4Y2x1c2l2ZSBvcGVuIHVuaXQgZmFpbGVkIiwKKwlbMzZdCT0gInNoYXJlZCBvcGVuIHVuaXQgZmFpbGVkIiwKKwlbMzddCT0gImxpbmsgZG93biIsCisJWzM4XQk9ICJsaW5rIGRvd24gc3RhdHVzIHJlYWQgbm8gbGluayIsCisJWzM5XQk9ICJsaW5rIGRvd24gc3RhdHVzIHJlYWQgZmRpc2MgbG9naW4iLAorCVs0MF0JPSAibGluayBkb3duIHN0YXR1cyByZWFkIGZpcm13YXJlIHVwZGF0ZSIsCisJWzQxXQk9ICJsaW5rIGRvd24gc3RhdHVzIHJlYWQgdW5rbm93biByZWFzb24iLAorCVs0Ml0JPSAibGluayBkb3duIGVjZCBpbmNvbXBsZXRlIiwKKwlbNDNdCT0gImxpbmsgZG93biBlcGQgaW5jb21wbGV0ZSIsCisJWzQ0XQk9ICJzeXNmcyBhZGFwdGVyIHJlY292ZXJ5IiwKKwlbNDVdCT0gInN5c2ZzIHBvcnQgcmVjb3ZlcnkiLAorCVs0Nl0JPSAic3lzZnMgdW5pdCByZWNvdmVyeSIsCisJWzQ3XQk9ICJwb3J0IGJveGVkIGFib3J0IiwKKwlbNDhdCT0gInVuaXQgYm94ZWQgYWJvcnQiLAorCVs0OV0JPSAicG9ydCBib3hlZCBjdCIsCisJWzUwXQk9ICJwb3J0IGJveGVkIGNsb3NlIHBoeXNpY2FsIiwKKwlbNTFdCT0gInBvcnQgYm94ZWQgb3BlbiB1bml0IiwKKwlbNTJdCT0gInBvcnQgYm94ZWQgY2xvc2UgdW5pdCIsCisJWzUzXQk9ICJwb3J0IGJveGVkIGZjcCIsCisJWzU0XQk9ICJ1bml0IGJveGVkIGZjcCIsCisJWzU1XQk9ICJwb3J0IGFjY2VzcyBkZW5pZWQgY3QiLAorCVs1Nl0JPSAicG9ydCBhY2Nlc3MgZGVuaWVkIGVscyIsCisJWzU3XQk9ICJwb3J0IGFjY2VzcyBkZW5pZWQgb3BlbiBwb3J0IiwKKwlbNThdCT0gInBvcnQgYWNjZXNzIGRlbmllZCBjbG9zZSBwaHlzaWNhbCIsCisJWzU5XQk9ICJ1bml0IGFjY2VzcyBkZW5pZWQgb3BlbiB1bml0IiwKKwlbNjBdCT0gInNoYXJlZCB1bml0IGFjY2VzcyBkZW5pZWQgb3BlbiB1bml0IiwKKwlbNjFdCT0gInVuaXQgYWNjZXNzIGRlbmllZCBmY3AiLAorCVs2Ml0JPSAicmVxdWVzdCB0aW1lb3V0IiwKKwlbNjNdCT0gImFkaXNjIGxpbmsgdGVzdCByZWplY3Qgb3IgdGltZW91dCIsCisJWzY0XQk9ICJhZGlzYyBsaW5rIHRlc3QgZF9pZCBjaGFuZ2VkIiwKKwlbNjVdCT0gImFkaXNjIGxpbmsgdGVzdCBmYWlsZWQiLAorCVs2Nl0JPSAicmVjb3Zlcnkgb3V0IG9mIG1lbW9yeSIsCisJWzY3XQk9ICJhZGFwdGVyIHJlY292ZXJ5IHJlcGVhdGVkIGFmdGVyIHN0YXRlIGNoYW5nZSIsCisJWzY4XQk9ICJwb3J0IHJlY292ZXJ5IHJlcGVhdGVkIGFmdGVyIHN0YXRlIGNoYW5nZSIsCisJWzY5XQk9ICJ1bml0IHJlY292ZXJ5IHJlcGVhdGVkIGFmdGVyIHN0YXRlIGNoYW5nZSIsCisJWzcwXQk9ICJwb3J0IHJlY292ZXJ5IGZvbGxvdy11cCBhZnRlciBzdWNjZXNzZnVsIGFkYXB0ZXIgcmVjb3ZlcnkiLAorCVs3MV0JPSAiYWRhcHRlciByZWNvdmVyeSBlc2NhbGF0aW9uIGFmdGVyIGZhaWxlZCBhZGFwdGVyIHJlY292ZXJ5IiwKKwlbNzJdCT0gInBvcnQgcmVjb3ZlcnkgZm9sbG93LXVwIGFmdGVyIHN1Y2Nlc3NmdWwgcGh5c2ljYWwgcG9ydCAiCisJCSAgInJlY292ZXJ5IiwKKwlbNzNdCT0gImFkYXB0ZXIgcmVjb3ZlcnkgZXNjYWxhdGlvbiBhZnRlciBmYWlsZWQgcGh5c2ljYWwgcG9ydCAiCisJCSAgInJlY292ZXJ5IiwKKwlbNzRdCT0gInVuaXQgcmVjb3ZlcnkgZm9sbG93LXVwIGFmdGVyIHN1Y2Nlc3NmdWwgcG9ydCByZWNvdmVyeSIsCisJWzc1XQk9ICJwaHlzaWNhbCBwb3J0IHJlY292ZXJ5IGVzY2FsYXRpb24gYWZ0ZXIgZmFpbGVkIHBvcnQgIgorCQkgICJyZWNvdmVyeSIsCisJWzc2XQk9ICJwb3J0IHJlY292ZXJ5IGVzY2FsYXRpb24gYWZ0ZXIgZmFpbGVkIHVuaXQgcmVjb3ZlcnkiLAorCVs3N10JPSAicmVjb3Zlcnkgb3BlbmluZyBuYW1lc2VydmVyIHBvcnQiLAorCVs3OF0JPSAiZHVwbGljYXRlIHJlcXVlc3QgaWQiLAorCVs3OV0JPSAibGluayBkb3duIiwKKwlbODBdCT0gImV4Y2x1c2l2ZSByZWFkLW9ubHkgdW5pdCBhY2Nlc3MgdW5zdXBwb3J0ZWQiLAorCVs4MV0JPSAic2hhcmVkIHJlYWQtd3JpdGUgdW5pdCBhY2Nlc3MgdW5zdXBwb3J0ZWQiLAorCVs4Ml0JPSAiaW5jb21pbmcgcnNjbiIsCisJWzgzXQk9ICJpbmNvbWluZyBwbG9naSIsCisJWzg0XQk9ICJpbmNvbWluZyBsb2dvIiwKKwlbODVdCT0gIm9ubGluZSIsCisJWzg2XQk9ICJvZmZsaW5lIiwKKwlbODddCT0gImNjdyBkZXZpY2UgZ29uZSIsCisJWzg4XQk9ICJjY3cgZGV2aWNlIG5vIHBhdGgiLAorCVs4OV0JPSAiY2N3IGRldmljZSBvcGVyYXRpb25hbCIsCisJWzkwXQk9ICJjY3cgZGV2aWNlIHNodXRkb3duIiwKKwlbOTFdCT0gInN5c2ZzIHBvcnQgYWRkaXRpb24iLAorCVs5Ml0JPSAic3lzZnMgcG9ydCByZW1vdmFsIiwKKwlbOTNdCT0gInN5c2ZzIGFkYXB0ZXIgcmVjb3ZlcnkiLAorCVs5NF0JPSAic3lzZnMgdW5pdCBhZGRpdGlvbiIsCisJWzk1XQk9ICJzeXNmcyB1bml0IHJlbW92YWwiLAorCVs5Nl0JPSAic3lzZnMgcG9ydCByZWNvdmVyeSIsCisJWzk3XQk9ICJzeXNmcyB1bml0IHJlY292ZXJ5IiwKKwlbOThdCT0gInNlcXVlbmNlIG51bWJlciBtaXNtYXRjaCIsCisJWzk5XQk9ICJsaW5rIHVwIiwKKwlbMTAwXQk9ICJlcnJvciBzdGF0ZSIsCisJWzEwMV0JPSAic3RhdHVzIHJlYWQgcGh5c2ljYWwgcG9ydCBjbG9zZWQiLAorCVsxMDJdCT0gImxpbmsgdXAgc3RhdHVzIHJlYWQiLAorCVsxMDNdCT0gInRvbyBtYW55IGZhaWxlZCBzdGF0dXMgcmVhZCBidWZmZXJzIiwKKwlbMTA0XQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgYWJvcnQiLAorCVsxMDVdCT0gImx1biBoYW5kbGUgbm90IHZhbGlkIGFib3J0IiwKKwlbMTA2XQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgY3QiLAorCVsxMDddCT0gInBvcnQgaGFuZGxlIG5vdCB2YWxpZCBjbG9zZSBwb3J0IiwKKwlbMTA4XQk9ICJwb3J0IGhhbmRsZSBub3QgdmFsaWQgY2xvc2UgcGh5c2ljYWwgcG9ydCIsCisJWzEwOV0JPSAicG9ydCBoYW5kbGUgbm90IHZhbGlkIG9wZW4gdW5pdCIsCisJWzExMF0JPSAicG9ydCBoYW5kbGUgbm90IHZhbGlkIGNsb3NlIHVuaXQiLAorCVsxMTFdCT0gImx1biBoYW5kbGUgbm90IHZhbGlkIGNsb3NlIHVuaXQiLAorCVsxMTJdCT0gInBvcnQgaGFuZGxlIG5vdCB2YWxpZCBmY3AiLAorCVsxMTNdCT0gImx1biBoYW5kbGUgbm90IHZhbGlkIGZjcCIsCisJWzExNF0JPSAiaGFuZGxlIG1pc21hdGNoIGZjcCIsCisJWzExNV0JPSAibHVuIG5vdCB2YWxpZCBmY3AiLAorCVsxMTZdCT0gInFkaW8gc2VuZCBmYWlsZWQiLAorCVsxMTddCT0gInZlcnNpb24gbWlzbWF0Y2giLAorCVsxMThdCT0gImluY29tcGF0aWJsZSBxdGNiIHR5cGUiLAorCVsxMTldCT0gInVua25vd24gcHJvdG9jb2wgc3RhdHVzIiwKKwlbMTIwXQk9ICJ1bmtub3duIGZzZiBjb21tYW5kIiwKKwlbMTIxXQk9ICJubyByZWNvbW1lbmRhdGlvbiBmb3Igc3RhdHVzIHF1YWxpZmllciIsCisJWzEyMl0JPSAic3RhdHVzIHJlYWQgcGh5c2ljYWwgcG9ydCBjbG9zZWQgaW4gZXJyb3IiLAorCVsxMjNdCT0gImZjIHNlcnZpY2UgY2xhc3Mgbm90IHN1cHBvcnRlZCBjdCIsCisJWzEyNF0JPSAiZmMgc2VydmljZSBjbGFzcyBub3Qgc3VwcG9ydGVkIGVscyIsCisJWzEyNV0JPSAibmVlZCBuZXdlciB6ZmNwIiwKKwlbMTI2XQk9ICJuZWVkIG5ld2VyIG1pY3JvY29kZSIsCisJWzEyN10JPSAiYXJiaXRyYXRlZCBsb29wIG5vdCBzdXBwb3J0ZWQiLAorCVsxMjhdCT0gInVua25vd24gdG9wb2xvZ3kiLAorCVsxMjldCT0gInF0Y2Igc2l6ZSBtaXNtYXRjaCIsCisJWzEzMF0JPSAidW5rbm93biBmc2Ygc3RhdHVzIGVjZCIsCisJWzEzMV0JPSAiZmNwIHJlcXVlc3QgdG9vIGJpZyIsCisJWzEzMl0JPSAiZmMgc2VydmljZSBjbGFzcyBub3Qgc3VwcG9ydGVkIGZjcCIsCisJWzEzM10JPSAiZGF0YSBkaXJlY3Rpb24gbm90IHZhbGlkIGZjcCIsCisJWzEzNF0JPSAiY29tbWFuZCBsZW5ndGggbm90IHZhbGlkIGZjcCIsCisJWzEzNV0JPSAic3RhdHVzIHJlYWQgYWN0IHVwZGF0ZSIsCisJWzEzNl0JPSAic3RhdHVzIHJlYWQgY2ZkYyB1cGRhdGUiLAorCVsxMzddCT0gImhiYWFwaSBwb3J0IG9wZW4iLAorCVsxMzhdCT0gImhiYWFwaSB1bml0IG9wZW4iLAorCVsxMzldCT0gImhiYWFwaSB1bml0IHNodXRkb3duIiwKKwlbMTQwXQk9ICJxZGlvIGVycm9yIiwKKwlbMTQxXQk9ICJzY3NpIGhvc3QgcmVzZXQiLAorCVsxNDJdCT0gImRpc21pc3NpbmcgZnNmIHJlcXVlc3QgZm9yIHJlY292ZXJ5IGFjdGlvbiIsCisJWzE0M10JPSAicmVjb3ZlcnkgYWN0aW9uIHRpbWVkIG91dCIsCisJWzE0NF0JPSAicmVjb3ZlcnkgYWN0aW9uIGdvbmUiLAorCVsxNDVdCT0gInJlY292ZXJ5IGFjdGlvbiBiZWluZyBwcm9jZXNzZWQiLAorCVsxNDZdCT0gInJlY292ZXJ5IGFjdGlvbiByZWFkeSBmb3IgbmV4dCBzdGVwIiwKK307CisKK3N0YXRpYyBpbnQgemZjcF9yZWNfZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAorCQkJCSAgICBjaGFyICpidWYsIGNvbnN0IGNoYXIgKl9yZWMpCit7CisJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKnIgPSAoc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKilfcmVjOworCWNoYXIgKnAgPSBidWY7CisKKwl6ZmNwX2RiZl9vdXRzKCZwLCAidGFnIiwgemZjcF9yZWNfZGJmX3RhZ3Nbci0+aWRdKTsKKwl6ZmNwX2RiZl9vdXRzKCZwLCAiaGludCIsIHpmY3BfcmVjX2RiZl9pZHNbci0+aWQyXSk7CisJemZjcF9kYmZfb3V0KCZwLCAiaWQiLCAiJWQiLCByLT5pZDIpOworCXN3aXRjaCAoci0+aWQpIHsKKwljYXNlIFpGQ1BfUkVDX0RCRl9JRF9USFJFQUQ6CisJCXpmY3BfZGJmX291dCgmcCwgInRvdGFsIiwgIiVkIiwgci0+dS50aHJlYWQudG90YWwpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJyZWFkeSIsICIlZCIsIHItPnUudGhyZWFkLnJlYWR5KTsKKwkJemZjcF9kYmZfb3V0KCZwLCAicnVubmluZyIsICIlZCIsIHItPnUudGhyZWFkLnJ1bm5pbmcpOworCQlicmVhazsKKwljYXNlIFpGQ1BfUkVDX0RCRl9JRF9UQVJHRVQ6CisJCXpmY3BfZGJmX291dCgmcCwgInJlZmVyZW5jZSIsICIweCUwMTZMeCIsIHItPnUudGFyZ2V0LnJlZik7CisJCXpmY3BfZGJmX291dCgmcCwgInN0YXR1cyIsICIweCUwOHgiLCByLT51LnRhcmdldC5zdGF0dXMpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJlcnBfY291bnQiLCAiJWQiLCByLT51LnRhcmdldC5lcnBfY291bnQpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJkX2lkIiwgIjB4JTA2eCIsIHItPnUudGFyZ2V0LmRfaWQpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJ3d3BuIiwgIjB4JTAxNkx4Iiwgci0+dS50YXJnZXQud3dwbik7CisJCXpmY3BfZGJmX291dCgmcCwgImZjcF9sdW4iLCAiMHglMDE2THgiLCByLT51LnRhcmdldC5mY3BfbHVuKTsKKwkJYnJlYWs7CisJY2FzZSBaRkNQX1JFQ19EQkZfSURfVFJJR0dFUjoKKwkJemZjcF9kYmZfb3V0KCZwLCAicmVmZXJlbmNlIiwgIjB4JTAxNkx4Iiwgci0+dS50cmlnZ2VyLnJlZik7CisJCXpmY3BfZGJmX291dCgmcCwgImVycF9hY3Rpb24iLCAiMHglMDE2THgiLCByLT51LnRyaWdnZXIuYWN0aW9uKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAicmVxdWVzdGVkIiwgIiVkIiwgci0+dS50cmlnZ2VyLndhbnQpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJleGVjdXRlZCIsICIlZCIsIHItPnUudHJpZ2dlci5uZWVkKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAid3dwbiIsICIweCUwMTZMeCIsIHItPnUudHJpZ2dlci53d3BuKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAiZmNwX2x1biIsICIweCUwMTZMeCIsIHItPnUudHJpZ2dlci5mY3BfbHVuKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAiYWRhcHRlcl9zdGF0dXMiLCAiMHglMDh4Iiwgci0+dS50cmlnZ2VyLmFzKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAicG9ydF9zdGF0dXMiLCAiMHglMDh4Iiwgci0+dS50cmlnZ2VyLnBzKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAidW5pdF9zdGF0dXMiLCAiMHglMDh4Iiwgci0+dS50cmlnZ2VyLnVzKTsKKwkJYnJlYWs7CisJY2FzZSBaRkNQX1JFQ19EQkZfSURfQUNUSU9OOgorCQl6ZmNwX2RiZl9vdXQoJnAsICJlcnBfYWN0aW9uIiwgIjB4JTAxNkx4Iiwgci0+dS5hY3Rpb24uYWN0aW9uKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAiZnNmX3JlcSIsICIweCUwMTZMeCIsIHItPnUuYWN0aW9uLmZzZl9yZXEpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJzdGF0dXMiLCAiMHglMDhMeCIsIHItPnUuYWN0aW9uLnN0YXR1cyk7CisJCXpmY3BfZGJmX291dCgmcCwgInN0ZXAiLCAiMHglMDhMeCIsIHItPnUuYWN0aW9uLnN0ZXApOworCQlicmVhazsKIAl9Ci0JY3QtPnBheWxvYWRfc2l6ZSA9Ci0JICAgIG1pbihidWZsZW4gLSAoaW50KXNpemVvZihzdHJ1Y3QgY3RfaGRyKSwgWkZDUF9EQkZfQ1RfUEFZTE9BRCk7Ci0JbWVtY3B5KGN0LT5wYXlsb2FkLCBidWZmZXIgKyBzaXplb2Yoc3RydWN0IGN0X2hkciksIGN0LT5wYXlsb2FkX3NpemUpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNhbl9kYmYsIDMsCi0JCSAgICByZWMsIHNpemVvZihzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwlyZXR1cm4gcCAtIGJ1ZjsKIH0KIAorc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3BfcmVjX2RiZl92aWV3ID0geworCSJzdHJ1Y3R1cmVkIiwKKwlOVUxMLAorCSZ6ZmNwX2RiZl92aWV3X2hlYWRlciwKKwkmemZjcF9yZWNfZGJmX3ZpZXdfZm9ybWF0LAorCU5VTEwsCisJTlVMTAorfTsKKworLyoqCisgKiB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byByZWNvdmVyeSB0aHJlYWQgb3BlcmF0aW9uCisgKiBAaWQyOiBpZGVudGlmaWVyIGZvciBldmVudAorICogQGFkYXB0ZXI6IGFkYXB0ZXIKKyAqIEBsb2NrOiBub24temVybyB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBlcnBfbG9jayBoYXMgbm90IHlldCBiZWVuIGFjcXVpcmVkCisgKi8KK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCh1OCBpZDIsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBsb2NrKQoreworCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnJlY19kYmZfYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCXVuc2lnbmVkIHJlYWR5ID0gMCwgcnVubmluZyA9IDAsIHRvdGFsOworCisJaWYgKGxvY2spCisJCXJlYWRfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2goZW50cnksICZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCkKKwkJcmVhZHkrKzsKKwlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmYWRhcHRlci0+ZXJwX3J1bm5pbmdfaGVhZCkKKwkJcnVubmluZysrOworCXRvdGFsID0gYWRhcHRlci0+ZXJwX3RvdGFsX2NvdW50OworCWlmIChsb2NrKQorCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKKwlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9USFJFQUQ7CisJci0+aWQyID0gaWQyOworCXItPnUudGhyZWFkLnRvdGFsID0gdG90YWw7CisJci0+dS50aHJlYWQucmVhZHkgPSByZWFkeTsKKwlyLT51LnRocmVhZC5ydW5uaW5nID0gcnVubmluZzsKKwlkZWJ1Z19ldmVudChhZGFwdGVyLT5yZWNfZGJmLCA1LCByLCBzaXplb2YoKnIpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldCh1OCBpZDIsIHZvaWQgKnJlZiwKKwkJCQkgICAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgIGF0b21pY190ICpzdGF0dXMsIGF0b21pY190ICplcnBfY291bnQsCisJCQkJICAgICAgdTY0IHd3cG4sIHUzMiBkX2lkLCB1NjQgZmNwX2x1bikKK3sKKwlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5yZWNfZGJmX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKKwlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9UQVJHRVQ7CisJci0+aWQyID0gaWQyOworCXItPnUudGFyZ2V0LnJlZiA9ICh1bnNpZ25lZCBsb25nKXJlZjsKKwlyLT51LnRhcmdldC5zdGF0dXMgPSBhdG9taWNfcmVhZChzdGF0dXMpOworCXItPnUudGFyZ2V0Lnd3cG4gPSB3d3BuOworCXItPnUudGFyZ2V0LmRfaWQgPSBkX2lkOworCXItPnUudGFyZ2V0LmZjcF9sdW4gPSBmY3BfbHVuOworCXItPnUudGFyZ2V0LmVycF9jb3VudCA9IGF0b21pY19yZWFkKGVycF9jb3VudCk7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+cmVjX2RiZiwgMywgciwgc2l6ZW9mKCpyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIgLSB0cmFjZSBldmVudCBmb3IgYWRhcHRlciBzdGF0ZSBjaGFuZ2UKKyAqIEBpZDogaWRlbnRpZmllciBmb3IgdHJpZ2dlciBvZiBzdGF0ZSBjaGFuZ2UKKyAqIEByZWY6IGFkZGl0aW9uYWwgcmVmZXJlbmNlIChlLmcuIHJlcXVlc3QpCisgKiBAYWRhcHRlcjogYWRhcHRlcgorICovCit2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKHU4IGlkLCB2b2lkICpyZWYsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChpZCwgcmVmLCBhZGFwdGVyLCAmYWRhcHRlci0+c3RhdHVzLAorCQkJCSAgJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwLCAwLCAwKTsKK30KKworLyoqCisgKiB6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydCAtIHRyYWNlIGV2ZW50IGZvciBwb3J0IHN0YXRlIGNoYW5nZQorICogQGlkOiBpZGVudGlmaWVyIGZvciB0cmlnZ2VyIG9mIHN0YXRlIGNoYW5nZQorICogQHJlZjogYWRkaXRpb25hbCByZWZlcmVuY2UgKGUuZy4gcmVxdWVzdCkKKyAqIEBwb3J0OiBwb3J0CisgKi8KK3ZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQodTggaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKworCXpmY3BfcmVjX2RiZl9ldmVudF90YXJnZXQoaWQsIHJlZiwgYWRhcHRlciwgJnBvcnQtPnN0YXR1cywKKwkJCQkgICZwb3J0LT5lcnBfY291bnRlciwgcG9ydC0+d3dwbiwgcG9ydC0+ZF9pZCwKKwkJCQkgIDApOworfQorCisvKioKKyAqIHpmY3BfcmVjX2RiZl9ldmVudF91bml0IC0gdHJhY2UgZXZlbnQgZm9yIHVuaXQgc3RhdGUgY2hhbmdlCisgKiBAaWQ6IGlkZW50aWZpZXIgZm9yIHRyaWdnZXIgb2Ygc3RhdGUgY2hhbmdlCisgKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQorICogQHVuaXQ6IHVuaXQKKyAqLwordm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdCh1OCBpZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQoreworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSB1bml0LT5wb3J0OworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCisJemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChpZCwgcmVmLCBhZGFwdGVyLCAmdW5pdC0+c3RhdHVzLAorCQkJCSAgJnVuaXQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAorCQkJCSAgdW5pdC0+ZmNwX2x1bik7Cit9CisKKy8qKgorICogemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIgLSB0cmFjZSBldmVudCBmb3IgdHJpZ2dlcmVkIGVycm9yIHJlY292ZXJ5CisgKiBAaWQyOiBpZGVudGlmaWVyIGZvciBlcnJvciByZWNvdmVyeSB0cmlnZ2VyCisgKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQorICogQHdhbnQ6IG9yaWdpbmFsbHkgcmVxdWVzdGVkIGVycm9yIHJlY292ZXJ5IGFjdGlvbgorICogQG5lZWQ6IGVycm9yIHJlY292ZXJ5IGFjdGlvbiBhY3R1YWxseSBpbml0aWF0ZWQKKyAqIEBhY3Rpb246IGFkZHJlc3Mgb2YgZXJyb3IgcmVjb3ZlcnkgYWN0aW9uIHN0cnVjdAorICogQGFkYXB0ZXI6IGFkYXB0ZXIKKyAqIEBwb3J0OiBwb3J0CisgKiBAdW5pdDogdW5pdAorICovCit2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKHU4IGlkMiwgdm9pZCAqcmVmLCB1OCB3YW50LCB1OCBuZWVkLAorCQkJCXZvaWQgKmFjdGlvbiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQoreworCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnJlY19kYmZfYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CisJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOworCXItPmlkID0gWkZDUF9SRUNfREJGX0lEX1RSSUdHRVI7CisJci0+aWQyID0gaWQyOworCXItPnUudHJpZ2dlci5yZWYgPSAodW5zaWduZWQgbG9uZylyZWY7CisJci0+dS50cmlnZ2VyLndhbnQgPSB3YW50OworCXItPnUudHJpZ2dlci5uZWVkID0gbmVlZDsKKwlyLT51LnRyaWdnZXIuYWN0aW9uID0gKHVuc2lnbmVkIGxvbmcpYWN0aW9uOworCXItPnUudHJpZ2dlci5hcyA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpOworCWlmIChwb3J0KSB7CisJCXItPnUudHJpZ2dlci5wcyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOworCQlyLT51LnRyaWdnZXIud3dwbiA9IHBvcnQtPnd3cG47CisJfQorCWlmICh1bml0KSB7CisJCXItPnUudHJpZ2dlci51cyA9IGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpOworCQlyLT51LnRyaWdnZXIuZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47CisJfQorCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnJlY19kYmYsIGFjdGlvbiA/IDEgOiA0LCByLCBzaXplb2YoKnIpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiB6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uIC0gdHJhY2UgZXZlbnQgc2hvd2luZyBwcm9ncmVzcyBvZiByZWNvdmVyeSBhY3Rpb24KKyAqIEBpZDI6IGlkZW50aWZpZXIKKyAqIEBlcnBfYWN0aW9uOiBlcnJvciByZWNvdmVyeSBhY3Rpb24gc3RydWN0IHBvaW50ZXIKKyAqLwordm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKHU4IGlkMiwgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKK3sKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5yZWNfZGJmX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKKwlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9BQ1RJT047CisJci0+aWQyID0gaWQyOworCXItPnUuYWN0aW9uLmFjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWVycF9hY3Rpb247CisJci0+dS5hY3Rpb24uc3RhdHVzID0gZXJwX2FjdGlvbi0+c3RhdHVzOworCXItPnUuYWN0aW9uLnN0ZXAgPSBlcnBfYWN0aW9uLT5zdGVwOworCXItPnUuYWN0aW9uLmZzZl9yZXEgPSAodW5zaWduZWQgbG9uZyllcnBfYWN0aW9uLT5mc2ZfcmVxOworCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnJlY19kYmYsIDQsIHIsIHNpemVvZigqcikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXF1ZXN0IC0gdHJhY2UgZXZlbnQgZm9yIGlzc3VlZCBDVCByZXF1ZXN0CisgKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGlzc3VlZCBDVCBkYXRhCisgKi8KIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9zZW5kX2N0ICpjdCA9IChzdHJ1Y3QgemZjcF9zZW5kX2N0ICopZnNmX3JlcS0+ZGF0YTsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY3QtPnBvcnQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJc3RydWN0IGN0X2hkciAqaGRyID0gemZjcF9zZ190b19hZGRyZXNzKGN0LT5yZXEpOworCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnNhbl9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3JlcXVlc3QgKm9jdCA9ICZyLT51LmN0X3JlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fY3QoIm9jdGMiLCBmc2ZfcmVxLAotCQkJCSAgICAgIGZjX2hvc3RfcG9ydF9pZChhZGFwdGVyLT5zY3NpX2hvc3QpLAotCQkJCSAgICAgIHBvcnQtPmRfaWQsIHpmY3Bfc2dfdG9fYWRkcmVzcyhjdC0+cmVxKSwKLQkJCQkgICAgICBjdC0+cmVxLT5sZW5ndGgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zYW5fZGJmX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CisJc3RybmNweShyLT50YWcsICJvY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCXItPmZzZl9yZXFpZCA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJci0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOworCXItPnNfaWQgPSBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KTsKKwlyLT5kX2lkID0gcG9ydC0+ZF9pZDsKKwlvY3QtPmNtZF9yZXFfY29kZSA9IGhkci0+Y21kX3JzcF9jb2RlOworCW9jdC0+cmV2aXNpb24gPSBoZHItPnJldmlzaW9uOworCW9jdC0+Z3NfdHlwZSA9IGhkci0+Z3NfdHlwZTsKKwlvY3QtPmdzX3N1YnR5cGUgPSBoZHItPmdzX3N1YnR5cGU7CisJb2N0LT5vcHRpb25zID0gaGRyLT5vcHRpb25zOworCW9jdC0+bWF4X3Jlc19zaXplID0gaGRyLT5tYXhfcmVzX3NpemU7CisJb2N0LT5sZW4gPSBtaW4oKGludCljdC0+cmVxLT5sZW5ndGggLSAoaW50KXNpemVvZihzdHJ1Y3QgY3RfaGRyKSwKKwkJICAgICAgIFpGQ1BfREJGX0NUX1BBWUxPQUQpOworCW1lbWNweShvY3QtPnBheWxvYWQsICh2b2lkICopaGRyICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHIpLCBvY3QtPmxlbik7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+c2FuX2RiZiwgMywgciwgc2l6ZW9mKCpyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7CiB9CiAKKy8qKgorICogemZjcF9zYW5fZGJmX2V2ZW50X2N0X3Jlc3BvbnNlIC0gdHJhY2UgZXZlbnQgZm9yIGNvbXBsZXRpb24gb2YgQ1QgcmVxdWVzdAorICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyBDVCByZXNwb25zZQorICovCiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewogCXN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0ID0gKHN0cnVjdCB6ZmNwX3NlbmRfY3QgKilmc2ZfcmVxLT5kYXRhOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjdC0+cG9ydDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKLQotCV96ZmNwX3Nhbl9kYmZfZXZlbnRfY29tbW9uX2N0KCJyY3RjIiwgZnNmX3JlcSwgcG9ydC0+ZF9pZCwKLQkJCQkgICAgICBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KSwKLQkJCQkgICAgICB6ZmNwX3NnX3RvX2FkZHJlc3MoY3QtPnJlc3ApLAotCQkJCSAgICAgIGN0LT5yZXNwLT5sZW5ndGgpOwotfQotCi1zdGF0aWMgdm9pZAotX3pmY3Bfc2FuX2RiZl9ldmVudF9jb21tb25fZWxzKGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLAotCQkJICAgICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHUzMiBzX2lkLAotCQkJICAgICAgIHUzMiBkX2lkLCB1OCBsc19jb2RlLCB2b2lkICpidWZmZXIsIGludCBidWZsZW4pCi17Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5zYW5fZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqZHVtcCA9IChzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqKXJlYzsKKwlzdHJ1Y3QgY3RfaGRyICpoZHIgPSB6ZmNwX3NnX3RvX2FkZHJlc3MoY3QtPnJlc3ApOworCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnNhbl9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3Jlc3BvbnNlICpyY3QgPSAmci0+dS5jdF9yZXNwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9mZnNldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7Ci0JZG8gewotCQltZW1zZXQocmVjLCAwLCBzaXplb2Yoc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQpKTsKLQkJaWYgKG9mZnNldCA9PSAwKSB7Ci0JCQlzdHJuY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQkJCXJlYy0+ZnNmX3JlcWlkID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcTsKLQkJCXJlYy0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOwotCQkJcmVjLT5zX2lkID0gc19pZDsKLQkJCXJlYy0+ZF9pZCA9IGRfaWQ7Ci0JCQlyZWMtPnR5cGUuZWxzLmxzX2NvZGUgPSBsc19jb2RlOwotCQkJYnVmbGVuID0gbWluKGJ1ZmxlbiwgWkZDUF9EQkZfRUxTX01BWF9QQVlMT0FEKTsKLQkJCXJlYy0+dHlwZS5lbHMucGF5bG9hZF9zaXplID0gYnVmbGVuOwotCQkJbWVtY3B5KHJlYy0+dHlwZS5lbHMucGF5bG9hZCwKLQkJCSAgICAgICBidWZmZXIsIG1pbihidWZsZW4sIFpGQ1BfREJGX0VMU19QQVlMT0FEKSk7Ci0JCQlvZmZzZXQgKz0gbWluKGJ1ZmxlbiwgWkZDUF9EQkZfRUxTX1BBWUxPQUQpOwotCQl9IGVsc2UgewotCQkJc3RybmNweShkdW1wLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpOwotCQkJZHVtcC0+dG90YWxfc2l6ZSA9IGJ1ZmxlbjsKLQkJCWR1bXAtPm9mZnNldCA9IG9mZnNldDsKLQkJCWR1bXAtPnNpemUgPSBtaW4oYnVmbGVuIC0gb2Zmc2V0LAotCQkJCQkgKGludClzaXplb2Yoc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQpCi0JCQkJCSAtIChpbnQpc2l6ZW9mKHN0cnVjdCB6ZmNwX2RiZl9kdW1wKSk7Ci0JCQltZW1jcHkoZHVtcC0+ZGF0YSwgYnVmZmVyICsgb2Zmc2V0LCBkdW1wLT5zaXplKTsKLQkJCW9mZnNldCArPSBkdW1wLT5zaXplOwotCQl9Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNhbl9kYmYsIGxldmVsLAotCQkJICAgIHJlYywgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkKSk7Ci0JfSB3aGlsZSAob2Zmc2V0IDwgYnVmbGVuKTsKKwltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CisJc3RybmNweShyLT50YWcsICJyY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpOworCXItPmZzZl9yZXFpZCA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJci0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOworCXItPnNfaWQgPSBwb3J0LT5kX2lkOworCXItPmRfaWQgPSBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KTsKKwlyY3QtPmNtZF9yc3BfY29kZSA9IGhkci0+Y21kX3JzcF9jb2RlOworCXJjdC0+cmV2aXNpb24gPSBoZHItPnJldmlzaW9uOworCXJjdC0+cmVhc29uX2NvZGUgPSBoZHItPnJlYXNvbl9jb2RlOworCXJjdC0+ZXhwbCA9IGhkci0+cmVhc29uX2NvZGVfZXhwbDsKKwlyY3QtPnZlbmRvcl91bmlxdWUgPSBoZHItPnZlbmRvcl91bmlxdWU7CisJcmN0LT5sZW4gPSBtaW4oKGludCljdC0+cmVzcC0+bGVuZ3RoIC0gKGludClzaXplb2Yoc3RydWN0IGN0X2hkciksCisJCSAgICAgICBaRkNQX0RCRl9DVF9QQVlMT0FEKTsKKwltZW1jcHkocmN0LT5wYXlsb2FkLCAodm9pZCAqKWhkciArIHNpemVvZihzdHJ1Y3QgY3RfaGRyKSwgcmN0LT5sZW4pOworCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNhbl9kYmYsIDMsIHIsIHNpemVvZigqcikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzKGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLAorCQkJCSAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHUzMiBzX2lkLAorCQkJCSAgIHUzMiBkX2lkLCB1OCBsc19jb2RlLCB2b2lkICpidWZmZXIsCisJCQkJICAgaW50IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPnNhbl9kYmZfYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKKwlzdHJuY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKKwlyZWMtPmZzZl9yZXFpZCA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJcmVjLT5mc2Zfc2Vxbm8gPSBmc2ZfcmVxLT5zZXFfbm87CisJcmVjLT5zX2lkID0gc19pZDsKKwlyZWMtPmRfaWQgPSBkX2lkOworCXJlYy0+dS5lbHMubHNfY29kZSA9IGxzX2NvZGU7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+c2FuX2RiZiwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKKwl6ZmNwX2RiZl9oZXhkdW1wKGFkYXB0ZXItPnNhbl9kYmYsIHJlYywgc2l6ZW9mKCpyZWMpLCBsZXZlbCwKKwkJCSBidWZmZXIsIG1pbihidWZsZW4sIFpGQ1BfREJGX0VMU19NQVhfUEFZTE9BRCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVxdWVzdCAtIHRyYWNlIGV2ZW50IGZvciBpc3N1ZWQgRUxTCisgKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGlzc3VlZCBFTFMKKyAqLwogdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9zZW5kX2VscyAqZWxzID0gKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICopZnNmX3JlcS0+ZGF0YTsKIAotCV96ZmNwX3Nhbl9kYmZfZXZlbnRfY29tbW9uX2Vscygib2VscyIsIDIsIGZzZl9yZXEsCi0JCQkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChlbHMtPmFkYXB0ZXItPnNjc2lfaG9zdCksCi0JCQkJICAgICAgIGVscy0+ZF9pZCwKLQkJCQkgICAgICAgKih1OCAqKSB6ZmNwX3NnX3RvX2FkZHJlc3MoZWxzLT5yZXEpLAotCQkJCSAgICAgICB6ZmNwX3NnX3RvX2FkZHJlc3MoZWxzLT5yZXEpLAotCQkJCSAgICAgICBlbHMtPnJlcS0+bGVuZ3RoKTsKKwl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzKCJvZWxzIiwgMiwgZnNmX3JlcSwKKwkJCSAgICAgICBmY19ob3N0X3BvcnRfaWQoZWxzLT5hZGFwdGVyLT5zY3NpX2hvc3QpLAorCQkJICAgICAgIGVscy0+ZF9pZCwgKih1OCAqKSB6ZmNwX3NnX3RvX2FkZHJlc3MoZWxzLT5yZXEpLAorCQkJICAgICAgIHpmY3Bfc2dfdG9fYWRkcmVzcyhlbHMtPnJlcSksIGVscy0+cmVxLT5sZW5ndGgpOwogfQogCisvKioKKyAqIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgY29tcGxldGVkIEVMUworICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyBFTFMgcmVzcG9uc2UKKyAqLwogdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKmVscyA9IChzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKWZzZl9yZXEtPmRhdGE7CiAKLQlfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9lbHMoInJlbHMiLCAyLCBmc2ZfcmVxLCBlbHMtPmRfaWQsCi0JCQkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChlbHMtPmFkYXB0ZXItPnNjc2lfaG9zdCksCi0JCQkJICAgICAgICoodTggKikgemZjcF9zZ190b19hZGRyZXNzKGVscy0+cmVxKSwKLQkJCQkgICAgICAgemZjcF9zZ190b19hZGRyZXNzKGVscy0+cmVzcCksCi0JCQkJICAgICAgIGVscy0+cmVzcC0+bGVuZ3RoKTsKKwl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzKCJyZWxzIiwgMiwgZnNmX3JlcSwgZWxzLT5kX2lkLAorCQkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChlbHMtPmFkYXB0ZXItPnNjc2lfaG9zdCksCisJCQkgICAgICAgKih1OCAqKXpmY3Bfc2dfdG9fYWRkcmVzcyhlbHMtPnJlcSksCisJCQkgICAgICAgemZjcF9zZ190b19hZGRyZXNzKGVscy0+cmVzcCksCisJCQkgICAgICAgZWxzLT5yZXNwLT5sZW5ndGgpOwogfQogCisvKioKKyAqIHpmY3Bfc2FuX2RiZl9ldmVudF9pbmNvbWluZ19lbHMgLSB0cmFjZSBldmVudCBmb3IgaW5jb21pZyBFTFMKKyAqIEBmc2ZfcmVxOiByZXF1ZXN0IGNvbnRhaW5pbmcgdW5zb2xpY2l0ZWQgc3RhdHVzIGJ1ZmZlciB3aXRoIGluY29taW5nIEVMUworICovCiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9pbmNvbWluZ19lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKLQlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlciA9Ci0JICAgIChzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqKWZzZl9yZXEtPmRhdGE7Ci0JaW50IGxlbmd0aCA9IChpbnQpc3RhdHVzX2J1ZmZlci0+bGVuZ3RoIC0KLQkgICAgKGludCkoKHZvaWQgKikmc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCAtICh2b2lkICopc3RhdHVzX2J1ZmZlcik7CisJc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKmJ1ZiA9CisJCQkoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKilmc2ZfcmVxLT5kYXRhOworCWludCBsZW5ndGggPSAoaW50KWJ1Zi0+bGVuZ3RoIC0KKwkJICAgICAoaW50KSgodm9pZCAqKSZidWYtPnBheWxvYWQgLSAodm9pZCAqKWJ1Zik7CiAKLQlfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9lbHMoImllbHMiLCAxLCBmc2ZfcmVxLCBzdGF0dXNfYnVmZmVyLT5kX2lkLAotCQkJCSAgICAgICBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KSwKLQkJCQkgICAgICAgKih1OCAqKSBzdGF0dXNfYnVmZmVyLT5wYXlsb2FkLAotCQkJCSAgICAgICAodm9pZCAqKXN0YXR1c19idWZmZXItPnBheWxvYWQsIGxlbmd0aCk7CisJemZjcF9zYW5fZGJmX2V2ZW50X2VscygiaWVscyIsIDEsIGZzZl9yZXEsIGJ1Zi0+ZF9pZCwKKwkJCSAgICAgICBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KSwKKwkJCSAgICAgICAqKHU4ICopYnVmLT5wYXlsb2FkLCAodm9pZCAqKWJ1Zi0+cGF5bG9hZCwKKwkJCSAgICAgICBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW50Ci16ZmNwX3Nhbl9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICogaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAotCQkJIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZikKK3N0YXRpYyBpbnQgemZjcF9zYW5fZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAorCQkJCSAgICBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYpCiB7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgKnJlYyA9IChzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqKWluX2J1ZjsKKwlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqKWluX2J1ZjsKIAljaGFyICpidWZmZXIgPSBOVUxMOwogCWludCBidWZsZW4gPSAwLCB0b3RhbCA9IDA7Ci0JaW50IGxlbiA9IDA7CisJY2hhciAqcCA9IG91dF9idWY7CiAKLQlpZiAoc3RybmNtcChyZWMtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwlpZiAoc3RybmNtcChyLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCiAJCXJldHVybiAwOwogCi0JbGVuICs9IHpmY3BfZGJmX3RhZyhvdXRfYnVmICsgbGVuLCAidGFnIiwgcmVjLT50YWcpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2ZfcmVxaWQiLCAiMHglMEx4IiwKLQkJCSAgICAgcmVjLT5mc2ZfcmVxaWQpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmc2Zfc2Vxbm8iLCAiMHglMDh4IiwKLQkJCSAgICAgcmVjLT5mc2Zfc2Vxbm8pOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzX2lkIiwgIjB4JTA2eCIsIHJlYy0+c19pZCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImRfaWQiLCAiMHglMDZ4IiwgcmVjLT5kX2lkKTsKKwl6ZmNwX2RiZl90YWcoJnAsICJ0YWciLCByLT50YWcpOworCXpmY3BfZGJmX291dCgmcCwgImZzZl9yZXFpZCIsICIweCUwTHgiLCByLT5mc2ZfcmVxaWQpOworCXpmY3BfZGJmX291dCgmcCwgImZzZl9zZXFubyIsICIweCUwOHgiLCByLT5mc2Zfc2Vxbm8pOworCXpmY3BfZGJmX291dCgmcCwgInNfaWQiLCAiMHglMDZ4Iiwgci0+c19pZCk7CisJemZjcF9kYmZfb3V0KCZwLCAiZF9pZCIsICIweCUwNngiLCByLT5kX2lkKTsKIAotCWlmIChzdHJuY21wKHJlYy0+dGFnLCAib2N0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJjbWRfcmVxX2NvZGUiLCAiMHglMDR4IiwKLQkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlcXVlc3QuY21kX3JlcV9jb2RlKTsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInJldmlzaW9uIiwgIjB4JTAyeCIsCi0JCQkJICAgICByZWMtPnR5cGUuY3QudHlwZS5yZXF1ZXN0LnJldmlzaW9uKTsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImdzX3R5cGUiLCAiMHglMDJ4IiwKLQkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlcXVlc3QuZ3NfdHlwZSk7Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJnc19zdWJ0eXBlIiwgIjB4JTAyeCIsCi0JCQkJICAgICByZWMtPnR5cGUuY3QudHlwZS5yZXF1ZXN0LmdzX3N1YnR5cGUpOwotCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAib3B0aW9ucyIsICIweCUwMngiLAotCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVxdWVzdC5vcHRpb25zKTsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgIm1heF9yZXNfc2l6ZSIsICIweCUwNHgiLAotCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVxdWVzdC5tYXhfcmVzX3NpemUpOwotCQl0b3RhbCA9IHJlYy0+dHlwZS5jdC5wYXlsb2FkX3NpemU7Ci0JCWJ1ZmZlciA9IHJlYy0+dHlwZS5jdC5wYXlsb2FkOworCWlmIChzdHJuY21wKHItPnRhZywgIm9jdGMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgeworCQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdF9yZXF1ZXN0ICpjdCA9ICZyLT51LmN0X3JlcTsKKwkJemZjcF9kYmZfb3V0KCZwLCAiY21kX3JlcV9jb2RlIiwgIjB4JTA0eCIsIGN0LT5jbWRfcmVxX2NvZGUpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJyZXZpc2lvbiIsICIweCUwMngiLCBjdC0+cmV2aXNpb24pOworCQl6ZmNwX2RiZl9vdXQoJnAsICJnc190eXBlIiwgIjB4JTAyeCIsIGN0LT5nc190eXBlKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAiZ3Nfc3VidHlwZSIsICIweCUwMngiLCBjdC0+Z3Nfc3VidHlwZSk7CisJCXpmY3BfZGJmX291dCgmcCwgIm9wdGlvbnMiLCAiMHglMDJ4IiwgY3QtPm9wdGlvbnMpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJtYXhfcmVzX3NpemUiLCAiMHglMDR4IiwgY3QtPm1heF9yZXNfc2l6ZSk7CisJCXRvdGFsID0gY3QtPmxlbjsKKwkJYnVmZmVyID0gY3QtPnBheWxvYWQ7CiAJCWJ1ZmxlbiA9IG1pbih0b3RhbCwgWkZDUF9EQkZfQ1RfUEFZTE9BRCk7Ci0JfSBlbHNlIGlmIChzdHJuY21wKHJlYy0+dGFnLCAicmN0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJjbWRfcnNwX2NvZGUiLCAiMHglMDR4IiwKLQkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlc3BvbnNlLmNtZF9yc3BfY29kZSk7Ci0JCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJyZXZpc2lvbiIsICIweCUwMngiLAotCQkJCSAgICAgcmVjLT50eXBlLmN0LnR5cGUucmVzcG9uc2UucmV2aXNpb24pOwotCQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAicmVhc29uX2NvZGUiLCAiMHglMDJ4IiwKLQkJCQkgICAgIHJlYy0+dHlwZS5jdC50eXBlLnJlc3BvbnNlLnJlYXNvbl9jb2RlKTsKLQkJbGVuICs9Ci0JCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJyZWFzb25fY29kZV9leHBsIiwgIjB4JTAyeCIsCi0JCQkJICByZWMtPnR5cGUuY3QudHlwZS5yZXNwb25zZS5yZWFzb25fY29kZV9leHBsKTsKLQkJbGVuICs9Ci0JCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJ2ZW5kb3JfdW5pcXVlIiwgIjB4JTAyeCIsCi0JCQkJICByZWMtPnR5cGUuY3QudHlwZS5yZXNwb25zZS52ZW5kb3JfdW5pcXVlKTsKLQkJdG90YWwgPSByZWMtPnR5cGUuY3QucGF5bG9hZF9zaXplOwotCQlidWZmZXIgPSByZWMtPnR5cGUuY3QucGF5bG9hZDsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoci0+dGFnLCAicmN0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7CisJCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3Jlc3BvbnNlICpjdCA9ICZyLT51LmN0X3Jlc3A7CisJCXpmY3BfZGJmX291dCgmcCwgImNtZF9yc3BfY29kZSIsICIweCUwNHgiLCBjdC0+Y21kX3JzcF9jb2RlKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAicmV2aXNpb24iLCAiMHglMDJ4IiwgY3QtPnJldmlzaW9uKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAicmVhc29uX2NvZGUiLCAiMHglMDJ4IiwgY3QtPnJlYXNvbl9jb2RlKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAicmVhc29uX2NvZGVfZXhwbCIsICIweCUwMngiLCBjdC0+ZXhwbCk7CisJCXpmY3BfZGJmX291dCgmcCwgInZlbmRvcl91bmlxdWUiLCAiMHglMDJ4IiwgY3QtPnZlbmRvcl91bmlxdWUpOworCQl0b3RhbCA9IGN0LT5sZW47CisJCWJ1ZmZlciA9IGN0LT5wYXlsb2FkOwogCQlidWZsZW4gPSBtaW4odG90YWwsIFpGQ1BfREJGX0NUX1BBWUxPQUQpOwotCX0gZWxzZSBpZiAoc3RybmNtcChyZWMtPnRhZywgIm9lbHMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCB8fAotCQkgICBzdHJuY21wKHJlYy0+dGFnLCAicmVscyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwIHx8Ci0JCSAgIHN0cm5jbXAocmVjLT50YWcsICJpZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImxzX2NvZGUiLCAiMHglMDJ4IiwKLQkJCQkgICAgIHJlYy0+dHlwZS5lbHMubHNfY29kZSk7Ci0JCXRvdGFsID0gcmVjLT50eXBlLmVscy5wYXlsb2FkX3NpemU7Ci0JCWJ1ZmZlciA9IHJlYy0+dHlwZS5lbHMucGF5bG9hZDsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoci0+dGFnLCAib2VscyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwIHx8CisJCSAgIHN0cm5jbXAoci0+dGFnLCAicmVscyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwIHx8CisJCSAgIHN0cm5jbXAoci0+dGFnLCAiaWVscyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7CisJCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2VscyAqZWxzID0gJnItPnUuZWxzOworCQl6ZmNwX2RiZl9vdXQoJnAsICJsc19jb2RlIiwgIjB4JTAyeCIsIGVscy0+bHNfY29kZSk7CisJCXRvdGFsID0gZWxzLT5sZW47CisJCWJ1ZmZlciA9IGVscy0+cGF5bG9hZDsKIAkJYnVmbGVuID0gbWluKHRvdGFsLCBaRkNQX0RCRl9FTFNfUEFZTE9BRCk7CiAJfQogCi0JbGVuICs9IHpmY3BfZGJmX3ZpZXdfZHVtcChvdXRfYnVmICsgbGVuLCAicGF5bG9hZCIsCi0JCQkJICBidWZmZXIsIGJ1ZmxlbiwgMCwgdG90YWwpOwotCisJemZjcF9kYmZfb3V0ZCgmcCwgInBheWxvYWQiLCBidWZmZXIsIGJ1ZmxlbiwgMCwgdG90YWwpOwogCWlmIChidWZsZW4gPT0gdG90YWwpCi0JCWxlbiArPSBzcHJpbnRmKG91dF9idWYgKyBsZW4sICJcbiIpOworCQlwICs9IHNwcmludGYocCwgIlxuIik7CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiBwIC0gb3V0X2J1ZjsKIH0KIAogc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3Bfc2FuX2RiZl92aWV3ID0gewpAQCAtNjk2LDEyICsxMDI4LDExIEBACiAJTlVMTAogfTsKIAotc3RhdGljIHZvaWQKLV96ZmNwX3Njc2lfZGJmX2V2ZW50X2NvbW1vbihjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKLQkJCSAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKLQkJCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkX3JlcV9pZCkKK3N0YXRpYyB2b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnQoY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICp0YWcyLCBpbnQgbGV2ZWwsCisJCQkJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQsCisJCQkJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwKKwkJCQl1bnNpZ25lZCBsb25nIG9sZF9yZXFfaWQpCiB7CiAJc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+c2NzaV9kYmZfYnVmOwogCXN0cnVjdCB6ZmNwX2RiZl9kdW1wICpkdW1wID0gKHN0cnVjdCB6ZmNwX2RiZl9kdW1wICopcmVjOwpAQCAtNzEyLDcgKzEwNDMsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjc2lfZGJmX2xvY2ssIGZsYWdzKTsKIAlkbyB7Ci0JCW1lbXNldChyZWMsIDAsIHNpemVvZihzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQpKTsKKwkJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKIAkJaWYgKG9mZnNldCA9PSAwKSB7CiAJCQlzdHJuY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAkJCXN0cm5jcHkocmVjLT50YWcyLCB0YWcyLCBaRkNQX0RCRl9UQUdfU0laRSk7CkBAIC03MzgsMjAgKzEwNjksMTYgQEAKIAkJCQlmY3Bfc25zX2luZm8gPQogCQkJCSAgICB6ZmNwX2dldF9mY3Bfc25zX2luZm9fcHRyKGZjcF9yc3ApOwogCi0JCQkJcmVjLT50eXBlLmZjcC5yc3BfdmFsaWRpdHkgPQotCQkJCSAgICBmY3BfcnNwLT52YWxpZGl0eS52YWx1ZTsKLQkJCQlyZWMtPnR5cGUuZmNwLnJzcF9zY3NpX3N0YXR1cyA9Ci0JCQkJICAgIGZjcF9yc3AtPnNjc2lfc3RhdHVzOwotCQkJCXJlYy0+dHlwZS5mY3AucnNwX3Jlc2lkID0gZmNwX3JzcC0+ZmNwX3Jlc2lkOworCQkJCXJlYy0+cnNwX3ZhbGlkaXR5ID0gZmNwX3JzcC0+dmFsaWRpdHkudmFsdWU7CisJCQkJcmVjLT5yc3Bfc2NzaV9zdGF0dXMgPSBmY3BfcnNwLT5zY3NpX3N0YXR1czsKKwkJCQlyZWMtPnJzcF9yZXNpZCA9IGZjcF9yc3AtPmZjcF9yZXNpZDsKIAkJCQlpZiAoZmNwX3JzcC0+dmFsaWRpdHkuYml0cy5mY3BfcnNwX2xlbl92YWxpZCkKLQkJCQkJcmVjLT50eXBlLmZjcC5yc3BfY29kZSA9Ci0JCQkJCSAgICAqKGZjcF9yc3BfaW5mbyArIDMpOworCQkJCQlyZWMtPnJzcF9jb2RlID0gKihmY3BfcnNwX2luZm8gKyAzKTsKIAkJCQlpZiAoZmNwX3JzcC0+dmFsaWRpdHkuYml0cy5mY3Bfc25zX2xlbl92YWxpZCkgewogCQkJCQlidWZsZW4gPSBtaW4oKGludClmY3BfcnNwLT5mY3Bfc25zX2xlbiwKIAkJCQkJCSAgICAgWkZDUF9EQkZfU0NTSV9NQVhfRkNQX1NOU19JTkZPKTsKLQkJCQkJcmVjLT50eXBlLmZjcC5zbnNfaW5mb19sZW4gPSBidWZsZW47Ci0JCQkJCW1lbWNweShyZWMtPnR5cGUuZmNwLnNuc19pbmZvLAotCQkJCQkgICAgICAgZmNwX3Nuc19pbmZvLAorCQkJCQlyZWMtPnNuc19pbmZvX2xlbiA9IGJ1ZmxlbjsKKwkJCQkJbWVtY3B5KHJlYy0+c25zX2luZm8sIGZjcF9zbnNfaW5mbywKIAkJCQkJICAgICAgIG1pbihidWZsZW4sCiAJCQkJCQkgICBaRkNQX0RCRl9TQ1NJX0ZDUF9TTlNfSU5GTykpOwogCQkJCQlvZmZzZXQgKz0gbWluKGJ1ZmxlbiwKQEAgLTc2Miw3ICsxMDg5LDcgQEAKIAkJCQlyZWMtPmZzZl9zZXFubyA9IGZzZl9yZXEtPnNlcV9ubzsKIAkJCQlyZWMtPmZzZl9pc3N1ZWQgPSBmc2ZfcmVxLT5pc3N1ZWQ7CiAJCQl9Ci0JCQlyZWMtPnR5cGUub2xkX2ZzZl9yZXFpZCA9IG9sZF9yZXFfaWQ7CisJCQlyZWMtPm9sZF9mc2ZfcmVxaWQgPSBvbGRfcmVxX2lkOwogCQl9IGVsc2UgewogCQkJc3RybmNweShkdW1wLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpOwogCQkJZHVtcC0+dG90YWxfc2l6ZSA9IGJ1ZmxlbjsKQEAgLTc3NCwxMDggKzExMDEsMTAxIEBACiAJCQltZW1jcHkoZHVtcC0+ZGF0YSwgZmNwX3Nuc19pbmZvICsgb2Zmc2V0LCBkdW1wLT5zaXplKTsKIAkJCW9mZnNldCArPSBkdW1wLT5zaXplOwogCQl9Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNjc2lfZGJmLCBsZXZlbCwKLQkJCSAgICByZWMsIHNpemVvZihzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQpKTsKKwkJZGVidWdfZXZlbnQoYWRhcHRlci0+c2NzaV9kYmYsIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7CiAJfSB3aGlsZSAob2Zmc2V0IDwgYnVmbGVuKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY3NpX2RiZl9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQKLXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLAotCQkJICAgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKLQkJCSAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCisvKioKKyAqIHpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0IC0gdHJhY2UgZXZlbnQgZm9yIFNDU0kgY29tbWFuZCBjb21wbGV0aW9uCisgKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgU0NTSSBjb21tYW5kCisgKiBAbGV2ZWw6IHRyYWNlIGxldmVsIGFwcGxpY2FibGUgZm9yIHRoaXMgZXZlbnQKKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoYXQgaGFzIGJlZW4gdXNlZCB0byBpc3N1ZSB0aGUgU0NTSSBjb21tYW5kCisgKiBAc2NzaV9jbW5kOiBTQ1NJIGNvbW1hbmQgcG9pbnRlcgorICogQGZzZl9yZXE6IHJlcXVlc3QgdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQgKG1pZ2h0IGJlIE5VTEwpCisgKi8KK3ZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsCisJCQkJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQsCisJCQkJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKLQlfemZjcF9zY3NpX2RiZl9ldmVudF9jb21tb24oInJzbHQiLCB0YWcsIGxldmVsLAotCQkJYWRhcHRlciwgc2NzaV9jbW5kLCBmc2ZfcmVxLCAwKTsKKwl6ZmNwX3Njc2lfZGJmX2V2ZW50KCJyc2x0IiwgdGFnLCBsZXZlbCwgYWRhcHRlciwgc2NzaV9jbW5kLCBmc2ZfcmVxLCAwKTsKIH0KIAotdm9pZAotemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydChjb25zdCBjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKLQkJCSAgc3RydWN0IHpmY3BfZnNmX3JlcSAqbmV3X2ZzZl9yZXEsCi0JCQkgIHVuc2lnbmVkIGxvbmcgb2xkX3JlcV9pZCkKKy8qKgorICogemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCAtIHRyYWNlIGV2ZW50IGZvciBTQ1NJIGNvbW1hbmQgYWJvcnQKKyAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBhYm9ydCBvcGVyYXRpb24KKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoYXMgaGFzIGJlZW4gdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAorICogQHNjc2lfY21uZDogU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKKyAqIEBuZXdfZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGFib3J0IChtaWdodCBiZSBOVUxMKQorICogQG9sZF9yZXFfaWQ6IGlkZW50aWZpZXIgb2YgcmVxdWVzdCBjb250YWluZyBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAorICovCit2b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKKwkJCSAgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpuZXdfZnNmX3JlcSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9sZF9yZXFfaWQpCiB7Ci0JX3pmY3Bfc2NzaV9kYmZfZXZlbnRfY29tbW9uKCJhYnJ0IiwgdGFnLCAxLAotCQkJYWRhcHRlciwgc2NzaV9jbW5kLCBuZXdfZnNmX3JlcSwgb2xkX3JlcV9pZCk7CisJemZjcF9zY3NpX2RiZl9ldmVudCgiYWJydCIsIHRhZywgMSwgYWRhcHRlciwgc2NzaV9jbW5kLCBuZXdfZnNmX3JlcSwKKwkJCSAgICBvbGRfcmVxX2lkKTsKIH0KIAotdm9pZAotemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldChjb25zdCBjaGFyICp0YWcsIHU4IGZsYWcsIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsCi0JCQkgICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCkKKy8qKgorICogemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCAtIHRyYWNlIGV2ZW50IGZvciBMb2dpY2FsIFVuaXQgb3IgVGFyZ2V0IFJlc2V0CisgKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgcmVzZXQgb3BlcmF0aW9uCisgKiBAZmxhZzogaW5kaWNhdGVzIHR5cGUgb2YgcmVzZXQgKFRhcmdldCBSZXNldCwgTG9naWNhbCBVbml0IFJlc2V0KQorICogQHVuaXQ6IHVuaXQgdGhhdCBuZWVkcyByZXNldAorICogQHNjc2lfY21uZDogU0NTSSBjb21tYW5kIHdoaWNoIGNhdXNlZCB0aGlzIGVycm9yIHJlY292ZXJ5CisgKi8KK3ZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldChjb25zdCBjaGFyICp0YWcsIHU4IGZsYWcsCisJCQkJICBzdHJ1Y3QgemZjcF91bml0ICp1bml0LAorCQkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwotCi0JX3pmY3Bfc2NzaV9kYmZfZXZlbnRfY29tbW9uKGZsYWcgPT0gRkNQX1RBUkdFVF9SRVNFVCA/ICJ0cnN0IiA6ICJscnN0IiwKLQkJCXRhZywgMSwgYWRhcHRlciwgc2NzaV9jbW5kLCBOVUxMLCAwKTsKKwl6ZmNwX3Njc2lfZGJmX2V2ZW50KGZsYWcgPT0gRkNQX1RBUkdFVF9SRVNFVCA/ICJ0cnN0IiA6ICJscnN0IiwgdGFnLCAxLAorCQkJICAgIHVuaXQtPnBvcnQtPmFkYXB0ZXIsIHNjc2lfY21uZCwgTlVMTCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQKLXpmY3Bfc2NzaV9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICogaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAotCQkJICBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYpCitzdGF0aWMgaW50IHpmY3Bfc2NzaV9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCisJCQkJICAgICBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYpCiB7Ci0Jc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkICpyZWMgPQotCSAgICAoc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkICopaW5fYnVmOwotCWludCBsZW4gPSAwOworCXN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgKilpbl9idWY7CisJc3RydWN0IHRpbWVzcGVjIHQ7CisJY2hhciAqcCA9IG91dF9idWY7CiAKLQlpZiAoc3RybmNtcChyZWMtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKKwlpZiAoc3RybmNtcChyLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCiAJCXJldHVybiAwOwogCi0JbGVuICs9IHpmY3BfZGJmX3RhZyhvdXRfYnVmICsgbGVuLCAidGFnIiwgcmVjLT50YWcpOwotCWxlbiArPSB6ZmNwX2RiZl90YWcob3V0X2J1ZiArIGxlbiwgInRhZzIiLCByZWMtPnRhZzIpOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX2lkIiwgIjB4JTA4eCIsIHJlYy0+c2NzaV9pZCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfbHVuIiwgIjB4JTA4eCIsCi0JCQkgICAgIHJlYy0+c2NzaV9sdW4pOwotCWxlbiArPSB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJzY3NpX3Jlc3VsdCIsICIweCUwOHgiLAotCQkJICAgICByZWMtPnNjc2lfcmVzdWx0KTsKLQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9jbW5kIiwgIjB4JTBMeCIsCi0JCQkgICAgIHJlYy0+c2NzaV9jbW5kKTsKLQlsZW4gKz0gemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAic2NzaV9zZXJpYWwiLCAiMHglMDE2THgiLAotCQkJICAgICByZWMtPnNjc2lfc2VyaWFsKTsKLQlsZW4gKz0gemZjcF9kYmZfdmlld19kdW1wKG91dF9idWYgKyBsZW4sICJzY3NpX29wY29kZSIsCi0JCQkJICByZWMtPnNjc2lfb3Bjb2RlLAotCQkJCSAgWkZDUF9EQkZfU0NTSV9PUENPREUsCi0JCQkJICAwLCBaRkNQX0RCRl9TQ1NJX09QQ09ERSk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfcmV0cmllcyIsICIweCUwMngiLAotCQkJICAgICByZWMtPnNjc2lfcmV0cmllcyk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgInNjc2lfYWxsb3dlZCIsICIweCUwMngiLAotCQkJICAgICByZWMtPnNjc2lfYWxsb3dlZCk7Ci0JaWYgKHN0cm5jbXAocmVjLT50YWcsICJhYnJ0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKLQkJbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgIm9sZF9mc2ZfcmVxaWQiLCAiMHglMEx4IiwKLQkJCQkgICAgIHJlYy0+dHlwZS5vbGRfZnNmX3JlcWlkKTsKLQl9Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9yZXFpZCIsICIweCUwTHgiLAotCQkJICAgICByZWMtPmZzZl9yZXFpZCk7Ci0JbGVuICs9IHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZzZl9zZXFubyIsICIweCUwOHgiLAotCQkJICAgICByZWMtPmZzZl9zZXFubyk7Ci0JbGVuICs9IHpmY3BfZGJmX3N0Y2sob3V0X2J1ZiArIGxlbiwgImZzZl9pc3N1ZWQiLCByZWMtPmZzZl9pc3N1ZWQpOwotCWlmIChzdHJuY21wKHJlYy0+dGFnLCAicnNsdCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7Ci0JCWxlbiArPQotCQkgICAgemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmNwX3JzcF92YWxpZGl0eSIsICIweCUwMngiLAotCQkJCSAgcmVjLT50eXBlLmZjcC5yc3BfdmFsaWRpdHkpOwotCQlsZW4gKz0KLQkJICAgIHpmY3BfZGJmX3ZpZXcob3V0X2J1ZiArIGxlbiwgImZjcF9yc3Bfc2NzaV9zdGF0dXMiLAotCQkJCSAgIjB4JTAyeCIsIHJlYy0+dHlwZS5mY3AucnNwX3Njc2lfc3RhdHVzKTsKLQkJbGVuICs9Ci0JCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmY3BfcnNwX3Jlc2lkIiwgIjB4JTA4eCIsCi0JCQkJICByZWMtPnR5cGUuZmNwLnJzcF9yZXNpZCk7Ci0JCWxlbiArPQotCQkgICAgemZjcF9kYmZfdmlldyhvdXRfYnVmICsgbGVuLCAiZmNwX3JzcF9jb2RlIiwgIjB4JTA4eCIsCi0JCQkJICByZWMtPnR5cGUuZmNwLnJzcF9jb2RlKTsKLQkJbGVuICs9Ci0JCSAgICB6ZmNwX2RiZl92aWV3KG91dF9idWYgKyBsZW4sICJmY3Bfc25zX2luZm9fbGVuIiwgIjB4JTA4eCIsCi0JCQkJICByZWMtPnR5cGUuZmNwLnNuc19pbmZvX2xlbik7Ci0JCWxlbiArPQotCQkgICAgemZjcF9kYmZfdmlld19kdW1wKG91dF9idWYgKyBsZW4sICJmY3Bfc25zX2luZm8iLAotCQkJCSAgICAgICByZWMtPnR5cGUuZmNwLnNuc19pbmZvLAotCQkJCSAgICAgICBtaW4oKGludClyZWMtPnR5cGUuZmNwLnNuc19pbmZvX2xlbiwKLQkJCQkJICAgWkZDUF9EQkZfU0NTSV9GQ1BfU05TX0lORk8pLCAwLAotCQkJCSAgICAgICByZWMtPnR5cGUuZmNwLnNuc19pbmZvX2xlbik7Ci0JfQorCXpmY3BfZGJmX3RhZygmcCwgInRhZyIsIHItPnRhZyk7CisJemZjcF9kYmZfdGFnKCZwLCAidGFnMiIsIHItPnRhZzIpOworCXpmY3BfZGJmX291dCgmcCwgInNjc2lfaWQiLCAiMHglMDh4Iiwgci0+c2NzaV9pZCk7CisJemZjcF9kYmZfb3V0KCZwLCAic2NzaV9sdW4iLCAiMHglMDh4Iiwgci0+c2NzaV9sdW4pOworCXpmY3BfZGJmX291dCgmcCwgInNjc2lfcmVzdWx0IiwgIjB4JTA4eCIsIHItPnNjc2lfcmVzdWx0KTsKKwl6ZmNwX2RiZl9vdXQoJnAsICJzY3NpX2NtbmQiLCAiMHglMEx4Iiwgci0+c2NzaV9jbW5kKTsKKwl6ZmNwX2RiZl9vdXQoJnAsICJzY3NpX3NlcmlhbCIsICIweCUwMTZMeCIsIHItPnNjc2lfc2VyaWFsKTsKKwl6ZmNwX2RiZl9vdXRkKCZwLCAic2NzaV9vcGNvZGUiLCByLT5zY3NpX29wY29kZSwgWkZDUF9EQkZfU0NTSV9PUENPREUsCisJCSAgICAgIDAsIFpGQ1BfREJGX1NDU0lfT1BDT0RFKTsKKwl6ZmNwX2RiZl9vdXQoJnAsICJzY3NpX3JldHJpZXMiLCAiMHglMDJ4Iiwgci0+c2NzaV9yZXRyaWVzKTsKKwl6ZmNwX2RiZl9vdXQoJnAsICJzY3NpX2FsbG93ZWQiLCAiMHglMDJ4Iiwgci0+c2NzaV9hbGxvd2VkKTsKKwlpZiAoc3RybmNtcChyLT50YWcsICJhYnJ0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCisJCXpmY3BfZGJmX291dCgmcCwgIm9sZF9mc2ZfcmVxaWQiLCAiMHglMEx4Iiwgci0+b2xkX2ZzZl9yZXFpZCk7CisJemZjcF9kYmZfb3V0KCZwLCAiZnNmX3JlcWlkIiwgIjB4JTBMeCIsIHItPmZzZl9yZXFpZCk7CisJemZjcF9kYmZfb3V0KCZwLCAiZnNmX3NlcW5vIiwgIjB4JTA4eCIsIHItPmZzZl9zZXFubyk7CisJemZjcF9kYmZfdGltZXN0YW1wKHItPmZzZl9pc3N1ZWQsICZ0KTsKKwl6ZmNwX2RiZl9vdXQoJnAsICJmc2ZfaXNzdWVkIiwgIiUwMTFsdTolMDZsdSIsIHQudHZfc2VjLCB0LnR2X25zZWMpOwogCi0JbGVuICs9IHNwcmludGYob3V0X2J1ZiArIGxlbiwgIlxuIik7Ci0KLQlyZXR1cm4gbGVuOworCWlmIChzdHJuY21wKHItPnRhZywgInJzbHQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgeworCQl6ZmNwX2RiZl9vdXQoJnAsICJmY3BfcnNwX3ZhbGlkaXR5IiwgIjB4JTAyeCIsIHItPnJzcF92YWxpZGl0eSk7CisJCXpmY3BfZGJmX291dCgmcCwgImZjcF9yc3Bfc2NzaV9zdGF0dXMiLCAiMHglMDJ4IiwKKwkJCSAgICAgci0+cnNwX3Njc2lfc3RhdHVzKTsKKwkJemZjcF9kYmZfb3V0KCZwLCAiZmNwX3JzcF9yZXNpZCIsICIweCUwOHgiLCByLT5yc3BfcmVzaWQpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJmY3BfcnNwX2NvZGUiLCAiMHglMDh4Iiwgci0+cnNwX2NvZGUpOworCQl6ZmNwX2RiZl9vdXQoJnAsICJmY3Bfc25zX2luZm9fbGVuIiwgIjB4JTA4eCIsIHItPnNuc19pbmZvX2xlbik7CisJCXpmY3BfZGJmX291dGQoJnAsICJmY3Bfc25zX2luZm8iLCByLT5zbnNfaW5mbywKKwkJCSAgICAgIG1pbigoaW50KXItPnNuc19pbmZvX2xlbiwKKwkJCSAgICAgIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPKSwgMCwKKwkJCSAgICAgIHItPnNuc19pbmZvX2xlbik7CisJfQorCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwlyZXR1cm4gcCAtIG91dF9idWY7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX3Njc2lfZGJmX3ZpZXcgPSB7CkBAIC04OTcsMTMgKzEyMTcsMTQgQEAKIAljaGFyIGRiZl9uYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CiAKIAkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyByZWNvdmVyeSBhY3Rpdml0eSAqLwotCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX2VycCIsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCWFkYXB0ZXItPmVycF9kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgZGJmc2l6ZSwgMiwKLQkJCQkJICBzaXplb2Yoc3RydWN0IHpmY3BfZXJwX2RiZl9yZWNvcmQpKTsKLQlpZiAoIWFkYXB0ZXItPmVycF9kYmYpCisJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfcmVjIiwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CisJYWRhcHRlci0+cmVjX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAxLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCkpOworCWlmICghYWRhcHRlci0+cmVjX2RiZikKIAkJZ290byBmYWlsZWQ7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5lcnBfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5lcnBfZGJmLCAzKTsKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnJlY19kYmYsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7CisJZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5yZWNfZGJmLCAmemZjcF9yZWNfZGJmX3ZpZXcpOworCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5yZWNfZGJmLCAzKTsKIAogCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIEhCQSAoRlNGIGFuZCBRRElPKSBjb25kaXRpb25zICovCiAJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfaGJhIiwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CkBAIC05NTIsMTEgKzEyNzMsMTEgQEAKIAlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPnNjc2lfZGJmKTsKIAlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPnNhbl9kYmYpOwogCWRlYnVnX3VucmVnaXN0ZXIoYWRhcHRlci0+aGJhX2RiZik7Ci0JZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5lcnBfZGJmKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPnJlY19kYmYpOwogCWFkYXB0ZXItPnNjc2lfZGJmID0gTlVMTDsKIAlhZGFwdGVyLT5zYW5fZGJmID0gTlVMTDsKIAlhZGFwdGVyLT5oYmFfZGJmID0gTlVMTDsKLQlhZGFwdGVyLT5lcnBfZGJmID0gTlVMTDsKKwlhZGFwdGVyLT5yZWNfZGJmID0gTlVMTDsKIH0KIAogI3VuZGVmIFpGQ1BfTE9HX0FSRUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YzM0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHpmY3AgZGV2aWNlIGRyaXZlciBmb3IKKyAqIEZDUCBhZGFwdGVycyBmb3IgSUJNIFN5c3RlbSB6OSBhbmQgelNlcmllcy4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsIDIwMDgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFpGQ1BfREJGX0gKKyNkZWZpbmUgWkZDUF9EQkZfSAorCisjaW5jbHVkZSAiemZjcF9mc2YuaCIKKworI2RlZmluZSBaRkNQX0RCRl9UQUdfU0laRSAgICAgIDQKKworc3RydWN0IHpmY3BfZGJmX2R1bXAgeworCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CisJdTMyIHRvdGFsX3NpemU7CQkvKiBzaXplIG9mIHRvdGFsIGR1bXAgZGF0YSAqLworCXUzMiBvZmZzZXQ7CQkvKiBob3cgbXVjaCBkYXRhIGhhcyBiZWluZyBhbHJlYWR5IGR1bXBlZCAqLworCXUzMiBzaXplOwkJLyogaG93IG11Y2ggZGF0YSBjb21lcyB3aXRoIHRoaXMgcmVjb3JkICovCisJdTggZGF0YVtdOwkJLyogZHVtcCBkYXRhICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdGhyZWFkIHsKKwl1MzIgdG90YWw7CisJdTMyIHJlYWR5OworCXUzMiBydW5uaW5nOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkX3RhcmdldCB7CisJdTY0IHJlZjsKKwl1MzIgc3RhdHVzOworCXUzMiBkX2lkOworCXU2NCB3d3BuOworCXU2NCBmY3BfbHVuOworCXUzMiBlcnBfY291bnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdHJpZ2dlciB7CisJdTggd2FudDsKKwl1OCBuZWVkOworCXUzMiBhczsKKwl1MzIgcHM7CisJdTMyIHVzOworCXU2NCByZWY7CisJdTY0IGFjdGlvbjsKKwl1NjQgd3dwbjsKKwl1NjQgZmNwX2x1bjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF9hY3Rpb24geworCXUzMiBzdGF0dXM7CisJdTMyIHN0ZXA7CisJdTY0IGFjdGlvbjsKKwl1NjQgZnNmX3JlcTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCB7CisJdTggaWQ7CisJdTggaWQyOworCXVuaW9uIHsKKwkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfYWN0aW9uIGFjdGlvbjsKKwkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdGhyZWFkIHRocmVhZDsKKwkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdGFyZ2V0IHRhcmdldDsKKwkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdHJpZ2dlciB0cmlnZ2VyOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsKKwlaRkNQX1JFQ19EQkZfSURfQUNUSU9OLAorCVpGQ1BfUkVDX0RCRl9JRF9USFJFQUQsCisJWkZDUF9SRUNfREJGX0lEX1RBUkdFVCwKKwlaRkNQX1JFQ19EQkZfSURfVFJJR0dFUiwKK307CisKK3N0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlIHsKKwl1MzIgZnNmX2NvbW1hbmQ7CisJdTY0IGZzZl9yZXFpZDsKKwl1MzIgZnNmX3NlcW5vOworCXU2NCBmc2ZfaXNzdWVkOworCXUzMiBmc2ZfcHJvdF9zdGF0dXM7CisJdTMyIGZzZl9zdGF0dXM7CisJdTggZnNmX3Byb3Rfc3RhdHVzX3F1YWxbRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRV07CisJdTggZnNmX3N0YXR1c19xdWFsW0ZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkVdOworCXUzMiBmc2ZfcmVxX3N0YXR1czsKKwl1OCBzYmFsX2ZpcnN0OworCXU4IHNiYWxfY3VycjsKKwl1OCBzYmFsX2xhc3Q7CisJdTggcG9vbDsKKwl1NjQgZXJwX2FjdGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1NjQgY21uZDsKKwkJCXU2NCBzZXJpYWw7CisJCX0gZmNwOworCQlzdHJ1Y3QgeworCQkJdTY0IHd3cG47CisJCQl1MzIgZF9pZDsKKwkJCXUzMiBwb3J0X2hhbmRsZTsKKwkJfSBwb3J0OworCQlzdHJ1Y3QgeworCQkJdTY0IHd3cG47CisJCQl1NjQgZmNwX2x1bjsKKwkJCXUzMiBwb3J0X2hhbmRsZTsKKwkJCXUzMiBsdW5faGFuZGxlOworCQl9IHVuaXQ7CisJCXN0cnVjdCB7CisJCQl1MzIgZF9pZDsKKwkJCXU4IGxzX2NvZGU7CisJCX0gZWxzOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgeworCXU4IGZhaWxlZDsKKwl1MzIgc3RhdHVzX3R5cGU7CisJdTMyIHN0YXR1c19zdWJ0eXBlOworCXN0cnVjdCBmc2ZfcXVldWVfZGVzaWduYXRvcgorCSBxdWV1ZV9kZXNpZ25hdG9yOworCXUzMiBwYXlsb2FkX3NpemU7CisjZGVmaW5lIFpGQ1BfREJGX1VOU09MX1BBWUxPQUQJCQkJODAKKyNkZWZpbmUgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9TRU5TRV9EQVRBX0FWQUlMCQkzMgorI2RlZmluZSBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX0JJVF9FUlJPUl9USFJFU0hPTEQJNTYKKyNkZWZpbmUgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9GRUFUVVJFX1VQREFURV9BTEVSVAkyICogc2l6ZW9mKHUzMikKKwl1OCBwYXlsb2FkW1pGQ1BfREJGX1VOU09MX1BBWUxPQURdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3FkaW8geworCXUzMiBzdGF0dXM7CisJdTMyIHFkaW9fZXJyb3I7CisJdTMyIHNpZ2FfZXJyb3I7CisJdTggc2JhbF9pbmRleDsKKwl1OCBzYmFsX2NvdW50OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkIHsKKwl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOworCXU4IHRhZzJbWkZDUF9EQkZfVEFHX1NJWkVdOworCXVuaW9uIHsKKwkJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcmVzcG9uc2UgcmVzcG9uc2U7CisJCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3N0YXR1cyBzdGF0dXM7CisJCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3FkaW8gcWRpbzsKKwl9IHU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVxdWVzdCB7CisJdTE2IGNtZF9yZXFfY29kZTsKKwl1OCByZXZpc2lvbjsKKwl1OCBnc190eXBlOworCXU4IGdzX3N1YnR5cGU7CisJdTggb3B0aW9uczsKKwl1MTYgbWF4X3Jlc19zaXplOworCXUzMiBsZW47CisjZGVmaW5lIFpGQ1BfREJGX0NUX1BBWUxPQUQJMjQKKwl1OCBwYXlsb2FkW1pGQ1BfREJGX0NUX1BBWUxPQURdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3Jlc3BvbnNlIHsKKwl1MTYgY21kX3JzcF9jb2RlOworCXU4IHJldmlzaW9uOworCXU4IHJlYXNvbl9jb2RlOworCXU4IGV4cGw7CisJdTggdmVuZG9yX3VuaXF1ZTsKKwl1MzIgbGVuOworCXU4IHBheWxvYWRbWkZDUF9EQkZfQ1RfUEFZTE9BRF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfZWxzIHsKKwl1OCBsc19jb2RlOworCXUzMiBsZW47CisjZGVmaW5lIFpGQ1BfREJGX0VMU19QQVlMT0FECTMyCisjZGVmaW5lIFpGQ1BfREJGX0VMU19NQVhfUEFZTE9BRCAxMDI0CisJdTggcGF5bG9hZFtaRkNQX0RCRl9FTFNfUEFZTE9BRF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgeworCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CisJdTY0IGZzZl9yZXFpZDsKKwl1MzIgZnNmX3NlcW5vOworCXUzMiBzX2lkOworCXUzMiBkX2lkOworCXVuaW9uIHsKKwkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVxdWVzdCBjdF9yZXE7CisJCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3Jlc3BvbnNlIGN0X3Jlc3A7CisJCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2VscyBlbHM7CisJfSB1OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCB7CisJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1OCB0YWcyW1pGQ1BfREJGX1RBR19TSVpFXTsKKwl1MzIgc2NzaV9pZDsKKwl1MzIgc2NzaV9sdW47CisJdTMyIHNjc2lfcmVzdWx0OworCXU2NCBzY3NpX2NtbmQ7CisJdTY0IHNjc2lfc2VyaWFsOworI2RlZmluZSBaRkNQX0RCRl9TQ1NJX09QQ09ERQkxNgorCXU4IHNjc2lfb3Bjb2RlW1pGQ1BfREJGX1NDU0lfT1BDT0RFXTsKKwl1OCBzY3NpX3JldHJpZXM7CisJdTggc2NzaV9hbGxvd2VkOworCXU2NCBmc2ZfcmVxaWQ7CisJdTMyIGZzZl9zZXFubzsKKwl1NjQgZnNmX2lzc3VlZDsKKwl1NjQgb2xkX2ZzZl9yZXFpZDsKKwl1OCByc3BfdmFsaWRpdHk7CisJdTggcnNwX3Njc2lfc3RhdHVzOworCXUzMiByc3BfcmVzaWQ7CisJdTggcnNwX2NvZGU7CisjZGVmaW5lIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPCTE2CisjZGVmaW5lIFpGQ1BfREJGX1NDU0lfTUFYX0ZDUF9TTlNfSU5GTwkyNTYKKwl1MzIgc25zX2luZm9fbGVuOworCXU4IHNuc19pbmZvW1pGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogWkZDUF9EQkZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggOWU5ZjZjMS4uYmRhOGM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3FkaW8uaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CisjaW5jbHVkZSAiemZjcF9kYmYuaCIKICNpbmNsdWRlICJ6ZmNwX2ZzZi5oIgogCiAKQEAgLTI2MiwxNjcgKzI2Myw2IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKgotICogREJGIHN0dWZmCi0gKi8KLSNkZWZpbmUgWkZDUF9EQkZfVEFHX1NJWkUgICAgICA0Ci0KLXN0cnVjdCB6ZmNwX2RiZl9kdW1wIHsKLQl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXUzMiB0b3RhbF9zaXplOwkJLyogc2l6ZSBvZiB0b3RhbCBkdW1wIGRhdGEgKi8KLQl1MzIgb2Zmc2V0OwkJLyogaG93IG11Y2ggZGF0YSBoYXMgYmVpbmcgYWxyZWFkeSBkdW1wZWQgKi8KLQl1MzIgc2l6ZTsJCS8qIGhvdyBtdWNoIGRhdGEgY29tZXMgd2l0aCB0aGlzIHJlY29yZCAqLwotCXU4IGRhdGFbXTsJCS8qIGR1bXAgZGF0YSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIEZJWE1FOiB0byBiZSBpbmZsYXRlZCB3aGVuIHJld29ya2luZyB0aGUgZXJwIGRiZiAqLwotc3RydWN0IHpmY3BfZXJwX2RiZl9yZWNvcmQgewotCXU4IGR1bW15WzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9yZXNwb25zZSB7Ci0JdTMyIGZzZl9jb21tYW5kOwotCXU2NCBmc2ZfcmVxaWQ7Ci0JdTMyIGZzZl9zZXFubzsKLQl1NjQgZnNmX2lzc3VlZDsKLQl1MzIgZnNmX3Byb3Rfc3RhdHVzOwotCXUzMiBmc2Zfc3RhdHVzOwotCXU4IGZzZl9wcm90X3N0YXR1c19xdWFsW0ZTRl9QUk9UX1NUQVRVU19RVUFMX1NJWkVdOwotCXU4IGZzZl9zdGF0dXNfcXVhbFtGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFXTsKLQl1MzIgZnNmX3JlcV9zdGF0dXM7Ci0JdTggc2JhbF9maXJzdDsKLQl1OCBzYmFsX2N1cnI7Ci0JdTggc2JhbF9sYXN0OwotCXU4IHBvb2w7Ci0JdTY0IGVycF9hY3Rpb247Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTY0IHNjc2lfY21uZDsKLQkJCXU2NCBzY3NpX3NlcmlhbDsKLQkJfSBzZW5kX2ZjcDsKLQkJc3RydWN0IHsKLQkJCXU2NCB3d3BuOwotCQkJdTMyIGRfaWQ7Ci0JCQl1MzIgcG9ydF9oYW5kbGU7Ci0JCX0gcG9ydDsKLQkJc3RydWN0IHsKLQkJCXU2NCB3d3BuOwotCQkJdTY0IGZjcF9sdW47Ci0JCQl1MzIgcG9ydF9oYW5kbGU7Ci0JCQl1MzIgbHVuX2hhbmRsZTsKLQkJfSB1bml0OwotCQlzdHJ1Y3QgewotCQkJdTMyIGRfaWQ7Ci0JCQl1OCBsc19jb2RlOwotCQl9IHNlbmRfZWxzOwotCX0gZGF0YTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgewotCXU4IGZhaWxlZDsKLQl1MzIgc3RhdHVzX3R5cGU7Ci0JdTMyIHN0YXR1c19zdWJ0eXBlOwotCXN0cnVjdCBmc2ZfcXVldWVfZGVzaWduYXRvcgotCSBxdWV1ZV9kZXNpZ25hdG9yOwotCXUzMiBwYXlsb2FkX3NpemU7Ci0jZGVmaW5lIFpGQ1BfREJGX1VOU09MX1BBWUxPQUQJCQkJODAKLSNkZWZpbmUgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9TRU5TRV9EQVRBX0FWQUlMCQkzMgotI2RlZmluZSBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX0JJVF9FUlJPUl9USFJFU0hPTEQJNTYKLSNkZWZpbmUgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9GRUFUVVJFX1VQREFURV9BTEVSVAkyICogc2l6ZW9mKHUzMikKLQl1OCBwYXlsb2FkW1pGQ1BfREJGX1VOU09MX1BBWUxPQURdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3FkaW8gewotCXUzMiBzdGF0dXM7Ci0JdTMyIHFkaW9fZXJyb3I7Ci0JdTMyIHNpZ2FfZXJyb3I7Ci0JdTggc2JhbF9pbmRleDsKLQl1OCBzYmFsX2NvdW50OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkIHsKLQl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXU4IHRhZzJbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXVuaW9uIHsKLQkJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcmVzcG9uc2UgcmVzcG9uc2U7Ci0JCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3N0YXR1cyBzdGF0dXM7Ci0JCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3FkaW8gcWRpbzsKLQl9IHR5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3QgewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXUxNiBjbWRfcmVxX2NvZGU7Ci0JCQl1OCByZXZpc2lvbjsKLQkJCXU4IGdzX3R5cGU7Ci0JCQl1OCBnc19zdWJ0eXBlOwotCQkJdTggb3B0aW9uczsKLQkJCXUxNiBtYXhfcmVzX3NpemU7Ci0JCX0gcmVxdWVzdDsKLQkJc3RydWN0IHsKLQkJCXUxNiBjbWRfcnNwX2NvZGU7Ci0JCQl1OCByZXZpc2lvbjsKLQkJCXU4IHJlYXNvbl9jb2RlOwotCQkJdTggcmVhc29uX2NvZGVfZXhwbDsKLQkJCXU4IHZlbmRvcl91bmlxdWU7Ci0JCX0gcmVzcG9uc2U7Ci0JfSB0eXBlOwotCXUzMiBwYXlsb2FkX3NpemU7Ci0jZGVmaW5lIFpGQ1BfREJGX0NUX1BBWUxPQUQJMjQKLQl1OCBwYXlsb2FkW1pGQ1BfREJGX0NUX1BBWUxPQURdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2VscyB7Ci0JdTggbHNfY29kZTsKLQl1MzIgcGF5bG9hZF9zaXplOwotI2RlZmluZSBaRkNQX0RCRl9FTFNfUEFZTE9BRAkzMgotI2RlZmluZSBaRkNQX0RCRl9FTFNfTUFYX1BBWUxPQUQgMTAyNAotCXU4IHBheWxvYWRbWkZDUF9EQkZfRUxTX1BBWUxPQURdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkIHsKLQl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXU2NCBmc2ZfcmVxaWQ7Ci0JdTMyIGZzZl9zZXFubzsKLQl1MzIgc19pZDsKLQl1MzIgZF9pZDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0IGN0OwotCQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9lbHMgZWxzOwotCX0gdHlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgewotCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07Ci0JdTggdGFnMltaRkNQX0RCRl9UQUdfU0laRV07Ci0JdTMyIHNjc2lfaWQ7Ci0JdTMyIHNjc2lfbHVuOwotCXUzMiBzY3NpX3Jlc3VsdDsKLQl1NjQgc2NzaV9jbW5kOwotCXU2NCBzY3NpX3NlcmlhbDsKLSNkZWZpbmUgWkZDUF9EQkZfU0NTSV9PUENPREUJMTYKLQl1OCBzY3NpX29wY29kZVtaRkNQX0RCRl9TQ1NJX09QQ09ERV07Ci0JdTggc2NzaV9yZXRyaWVzOwotCXU4IHNjc2lfYWxsb3dlZDsKLQl1NjQgZnNmX3JlcWlkOwotCXUzMiBmc2Zfc2Vxbm87Ci0JdTY0IGZzZl9pc3N1ZWQ7Ci0JdW5pb24gewotCQl1NjQgb2xkX2ZzZl9yZXFpZDsKLQkJc3RydWN0IHsKLQkJCXU4IHJzcF92YWxpZGl0eTsKLQkJCXU4IHJzcF9zY3NpX3N0YXR1czsKLQkJCXUzMiByc3BfcmVzaWQ7Ci0JCQl1OCByc3BfY29kZTsKLSNkZWZpbmUgWkZDUF9EQkZfU0NTSV9GQ1BfU05TX0lORk8JMTYKLSNkZWZpbmUgWkZDUF9EQkZfU0NTSV9NQVhfRkNQX1NOU19JTkZPCTI1NgotCQkJdTMyIHNuc19pbmZvX2xlbjsKLQkJCXU4IHNuc19pbmZvW1pGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPXTsKLQkJfSBmY3A7Ci0JfSB0eXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCiAgKiBGQy1GUyBzdHVmZgogICovCiAjZGVmaW5lIFJfQV9UT1YJCQkJMTAgLyogc2Vjb25kcyAqLwpAQCAtNTM5LDcgKzM3OSw3IEBACiAKIC8qIGxvZ2dpbmcgcm91dGluZSBmb3IgemZjcCAqLwogI2RlZmluZSBfWkZDUF9MT0coZm10LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fRVJSIFpGQ1BfTkFNRSI6ICVzKCVkKTogIiBmbXQsIF9fRlVOQ1RJT05fXywgXAorCXByaW50ayhLRVJOX0VSUiBaRkNQX05BTUUiOiAlcyglZCk6ICIgZm10LCBfX2Z1bmNfXywgXAogCSAgICAgICBfX0xJTkVfXyAsICMjYXJncykKIAogI2RlZmluZSBaRkNQX0xPRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCkBAIC02MzQsNyArNDc0LDYgQEAKIAkJIFpGQ1BfU1RBVFVTX1BPUlRfTk9fU0NTSV9JRCkKIAogLyogbG9naWNhbCB1bml0IHN0YXR1cyAqLwotI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX05PVFNVUFBVTklUUkVTRVQJMHgwMDAwMDAwMQogI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX1RFTVBPUkFSWQkJMHgwMDAwMDAwMgogI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX1NIQVJFRAkJCTB4MDAwMDAwMDQKICNkZWZpbmUgWkZDUF9TVEFUVVNfVU5JVF9SRUFET05MWQkJMHgwMDAwMDAwOApAQCAtOTE3LDE1ICs3NTYsMTUgQEAKIAl1MzIJCQllcnBfbG93X21lbV9jb3VudDsgLyogbnIgb2YgZXJwIGFjdGlvbnMgd2FpdGluZwogCQkJCQkJICAgICAgZm9yIG1lbW9yeSAqLwogCXN0cnVjdCB6ZmNwX3BvcnQJKm5hbWVzZXJ2ZXJfcG9ydDsgIC8qIGFkYXB0ZXIncyBuYW1lc2VydmVyICovCi0JZGVidWdfaW5mb190CQkqZXJwX2RiZjsKKwlkZWJ1Z19pbmZvX3QJCSpyZWNfZGJmOwogCWRlYnVnX2luZm9fdAkJKmhiYV9kYmY7CiAJZGVidWdfaW5mb190CQkqc2FuX2RiZjsgICAgICAgICAgLyogZGVidWcgZmVhdHVyZSBhcmVhcyAqLwogCWRlYnVnX2luZm9fdAkJKnNjc2lfZGJmOwotCXNwaW5sb2NrX3QJCWVycF9kYmZfbG9jazsKKwlzcGlubG9ja190CQlyZWNfZGJmX2xvY2s7CiAJc3BpbmxvY2tfdAkJaGJhX2RiZl9sb2NrOwogCXNwaW5sb2NrX3QJCXNhbl9kYmZfbG9jazsKIAlzcGlubG9ja190CQlzY3NpX2RiZl9sb2NrOwotCXN0cnVjdCB6ZmNwX2VycF9kYmZfcmVjb3JkCWVycF9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkCXJlY19kYmZfYnVmOwogCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkCWhiYV9kYmZfYnVmOwogCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkCXNhbl9kYmZfYnVmOwogCXN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZAlzY3NpX2RiZl9idWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCAyZGM4MTEwLi44MDU0ODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTI2LDEzICsyNiwxNyBAQAogc3RhdGljIGludCB6ZmNwX2VycF9hZGlzYyhzdHJ1Y3QgemZjcF9wb3J0ICopOwogc3RhdGljIHZvaWQgemZjcF9lcnBfYWRpc2NfaGFuZGxlcih1bnNpZ25lZCBsb25nKTsKIAotc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbl9pbnRlcm5hbChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCk7Ci1zdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbl9pbnRlcm5hbChzdHJ1Y3QgemZjcF9wb3J0ICosIGludCk7Ci1zdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfcmVvcGVuX2ludGVybmFsKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50KTsKLXN0YXRpYyBpbnQgemZjcF9lcnBfdW5pdF9yZW9wZW5faW50ZXJuYWwoc3RydWN0IHpmY3BfdW5pdCAqLCBpbnQpOworc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbl9pbnRlcm5hbChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCwgdTgsCisJCQkJCSAgICB2b2lkICopOworc3RhdGljIGludCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW5faW50ZXJuYWwoc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIHU4LAorCQkJCQkJdm9pZCAqKTsKK3N0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9yZW9wZW5faW50ZXJuYWwoc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIHU4LCB2b2lkICopOworc3RhdGljIGludCB6ZmNwX2VycF91bml0X3Jlb3Blbl9pbnRlcm5hbChzdHJ1Y3QgemZjcF91bml0ICosIGludCwgdTgsIHZvaWQgKik7CiAKLXN0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsX2ludGVybmFsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50KTsKLXN0YXRpYyBpbnQgemZjcF9lcnBfdW5pdF9yZW9wZW5fYWxsX2ludGVybmFsKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50KTsKK3N0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsX2ludGVybmFsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCB1OCwKKwkJCQkJICAgICB2b2lkICopOworc3RhdGljIGludCB6ZmNwX2VycF91bml0X3Jlb3Blbl9hbGxfaW50ZXJuYWwoc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIHU4LAorCQkJCQkgICAgIHZvaWQgKik7CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqLCBpbnQpOwogc3RhdGljIHZvaWQgemZjcF9lcnBfYWRhcHRlcl91bmJsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CkBAIC05Nyw3ICsxMDEsOCBAQAogc3RhdGljIHZvaWQgemZjcF9lcnBfYWN0aW9uX2Rpc21pc3Moc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIAogc3RhdGljIGludCB6ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShpbnQsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkgICBzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCB6ZmNwX3VuaXQgKik7CisJCQkJICAgc3RydWN0IHpmY3BfcG9ydCAqLCBzdHJ1Y3QgemZjcF91bml0ICosCisJCQkJICAgdTggaWQsIHZvaWQgKnJlZik7CiBzdGF0aWMgaW50IHpmY3BfZXJwX2FjdGlvbl9kZXF1ZXVlKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fY2xlYW51cChpbnQsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKIAkJCQkgICAgc3RydWN0IHpmY3BfcG9ydCAqLCBzdHJ1Y3QgemZjcF91bml0ICosCkBAIC0xMjgsMTEgKzEzMyw5IEBACiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVAsICZhZGFwdGVyLT5zdGF0dXMpOwogCXdyaXRlX3VubG9ja19pcnEoJnJlcV9xdWV1ZS0+cXVldWVfbG9jayk7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJxZGlvX2Rvd24yYSIpOwogCXdoaWxlIChxZGlvX3NodXRkb3duKGFkYXB0ZXItPmNjd19kZXZpY2UsCiAJCQkgICAgIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSKSA9PSAtRUlOUFJPR1JFU1MpCiAJCXNzbGVlcCgxKTsKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJxZGlvX2Rvd24yYiIpOwogCiAJLyogY2xlYW51cCB1c2VkIG91dGJvdW5kIHNiYWxzICovCiAJY291bnQgPSBhdG9taWNfcmVhZCgmcmVxX3F1ZXVlLT5mcmVlX2NvdW50KTsKQEAgLTE2Myw3ICsxNjYsNyBAQAogCS8qIHJlc2V0IEZTRiByZXF1ZXN0IHNlcXVlbmNlIG51bWJlciAqLwogCWFkYXB0ZXItPmZzZl9yZXFfc2VxX25vID0gMDsKIAkvKiBhbGwgcG9ydHMgYW5kIHVuaXRzIGFyZSBjbG9zZWQgKi8KLQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwKKwl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgMjQsIE5VTEwsCiAJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOLCBaRkNQX0NMRUFSKTsKIH0KIApAQCAtMTc5LDcgKzE4Miw4IEBACiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9yZXF1ZXN0X3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgemZjcF9hZGFwdGVyICopIGRhdGE7Ci0JemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOworCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCA2MiwKKwkJCQlOVUxMKTsKIH0KIAogdm9pZCB6ZmNwX2ZzZl9zdGFydF90aW1lcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCkBAIC0yMDAsMTIgKzIwNCwxMSBAQAogICogcmV0dXJuczoJMAktIGluaXRpYXRlZCBhY3Rpb24gc3VjY2Vzc2Z1bGx5CiAgKgkJPDAJLSBmYWlsZWQgdG8gaW5pdGlhdGUgYWN0aW9uCiAgKi8KLXN0YXRpYyBpbnQKLXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuX2ludGVybmFsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbGVhcl9tYXNrKQorc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbl9pbnRlcm5hbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgICAgaW50IGNsZWFyX21hc2ssIHU4IGlkLCB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKIAotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgImFfcm8iKTsKIAlaRkNQX0xPR19ERUJVRygicmVvcGVuIGFkYXB0ZXIgJXNcbiIsCiAJCSAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIApAQCAtMjE0LDE0ICsyMTcsMTMgQEAKIAlpZiAoYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgJmFkYXB0ZXItPnN0YXR1cykpIHsKIAkJWkZDUF9MT0dfREVCVUcoInNraXBwZWQgcmVvcGVuIG9mIGZhaWxlZCBhZGFwdGVyICVzXG4iLAogCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJhX3JvX2YiKTsKIAkJLyogZW5zdXJlIHByb3BhZ2F0aW9uIG9mIGZhaWxlZCBzdGF0dXMgdG8gbmV3IGRldmljZXMgKi8KLQkJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlcik7CisJCXpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKGFkYXB0ZXIsIDEzLCBOVUxMKTsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCXJldHZhbCA9IHpmY3BfZXJwX2FjdGlvbl9lbnF1ZXVlKFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fQURBUFRFUiwKLQkJCQkJIGFkYXB0ZXIsIE5VTEwsIE5VTEwpOworCQkJCQkgYWRhcHRlciwgTlVMTCwgTlVMTCwgaWQsIHJlZik7CiAKICBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTIzNiw1NiArMjM4LDU2IEBACiAgKiByZXR1cm5zOgkwCS0gaW5pdGlhdGVkIGFjdGlvbiBzdWNjZXNzZnVsbHkKICAqCQk8MAktIGZhaWxlZCB0byBpbml0aWF0ZSBhY3Rpb24KICAqLwotaW50Ci16ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXJfbWFzaykKK2ludCB6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXJfbWFzaywKKwkJCSAgICB1OCBpZCwgdm9pZCAqcmVmKQogewogCWludCByZXR2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJlYWRfbG9ja19pcnFzYXZlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAl3cml0ZV9sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7Ci0JcmV0dmFsID0gemZjcF9lcnBfYWRhcHRlcl9yZW9wZW5faW50ZXJuYWwoYWRhcHRlciwgY2xlYXJfbWFzayk7CisJcmV0dmFsID0gemZjcF9lcnBfYWRhcHRlcl9yZW9wZW5faW50ZXJuYWwoYWRhcHRlciwgY2xlYXJfbWFzaywgaWQsIHJlZik7CiAJd3JpdGVfdW5sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQKLXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgaW50IGNsZWFyX21hc2spCitpbnQgemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXJfbWFzaywKKwkJCSAgICAgIHU4IGlkLCB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKIAogCXJldHZhbCA9IHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCiAJCQkJCSBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORyB8CiAJCQkJCSBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCB8Ci0JCQkJCSBjbGVhcl9tYXNrKTsKKwkJCQkJIGNsZWFyX21hc2ssIGlkLCByZWYpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50Ci16ZmNwX2VycF9wb3J0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhcl9tYXNrKQoraW50IHpmY3BfZXJwX3BvcnRfc2h1dGRvd24oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyX21hc2ssIHU4IGlkLAorCQkJICAgdm9pZCAqcmVmKQogewogCWludCByZXR2YWw7CiAKIAlyZXR2YWwgPSB6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LAogCQkJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HIHwKIAkJCQkgICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCB8Ci0JCQkJICAgICAgY2xlYXJfbWFzayk7CisJCQkJICAgICAgY2xlYXJfbWFzaywgaWQsIHJlZik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQKLXpmY3BfZXJwX3VuaXRfc2h1dGRvd24oc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IGNsZWFyX21hc2spCitpbnQgemZjcF9lcnBfdW5pdF9zaHV0ZG93bihzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBpbnQgY2xlYXJfbWFzaywgdTggaWQsCisJCQkgICB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKIAogCXJldHZhbCA9IHpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsCiAJCQkJICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcgfAogCQkJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEIHwKLQkJCQkgICAgICBjbGVhcl9tYXNrKTsKKwkJCQkgICAgICBjbGVhcl9tYXNrLCBpZCwgcmVmKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zOTksOCArNDAxLDcgQEAKIAkJCQkiZm9yY2UgcGh5c2ljYWwgcG9ydCByZW9wZW4gIgogCQkJCSIoYWRhcHRlciAlcywgcG9ydCBkX2lkPTB4JTA2eClcbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwgZF9pZCk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgImZvcmNyZW9wIik7Ci0JCWlmICh6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCkpCisJCWlmICh6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgNjMsIE5VTEwpKQogCQkJWkZDUF9MT0dfTk9STUFMKCJmYWlsZWQgcmVvcGVuIG9mIHBvcnQgIgogCQkJCQkiKGFkYXB0ZXIgJXMsIHd3cG49MHglMDE2THgpXG4iLAogCQkJCQl6ZmNwX2dldF9idXNpZF9ieV9wb3J0KHBvcnQpLApAQCAtNDI3LDcgKzQyOCw3IEBACiAJCQkJImFkaXNjX3Jlc3Bfd3dwbj0weCUwMTZMeClcbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSwKIAkJCQlwb3J0LT53d3BuLCAod3duX3QpIGFkaXNjLT53d3BuKTsKLQkJaWYgKHpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDApKQorCQlpZiAoemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgNjQsIE5VTEwpKQogCQkJWkZDUF9MT0dfTk9STUFMKCJmYWlsZWQgcmVvcGVuIG9mIHBvcnQgIgogCQkJCQkiKGFkYXB0ZXIgJXMsIHd3cG49MHglMDE2THgpXG4iLAogCQkJCQl6ZmNwX2dldF9idXNpZF9ieV9wb3J0KHBvcnQpLApAQCAtNDYxLDcgKzQ2Miw3IEBACiAJCVpGQ1BfTE9HX05PUk1BTCgicmVvcGVuIG5lZWRlZCBmb3IgcG9ydCAweCUwMTZMeCAiCiAJCQkJIm9uIGFkYXB0ZXIgJXNcbiAiLCBwb3J0LT53d3BuLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X3BvcnQocG9ydCkpOwotCQlyZXR2YWwgPSB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCk7CisJCXJldHZhbCA9IHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCA2NSwgTlVMTCk7CiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJWkZDUF9MT0dfTk9STUFMKCJyZW9wZW4gb2YgcmVtb3RlIHBvcnQgMHglMDE2THggIgogCQkJCQkib24gYWRhcHRlciAlcyBmYWlsZWRcbiIsIHBvcnQtPnd3cG4sCkBAIC00ODQsMTQgKzQ4NSwxMSBAQAogICogcmV0dXJuczoJMAktIGluaXRpYXRlZCBhY3Rpb24gc3VjY2Vzc2Z1bGx5CiAgKgkJPDAJLSBmYWlsZWQgdG8gaW5pdGlhdGUgYWN0aW9uCiAgKi8KLXN0YXRpYyBpbnQKLXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbl9pbnRlcm5hbChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXJfbWFzaykKK3N0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuX2ludGVybmFsKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCisJCQkJCQlpbnQgY2xlYXJfbWFzaywgdTggaWQsCisJCQkJCQl2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKLQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInBmX3JvIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgJnBvcnQtPnd3cG4sIHNpemVvZiAod3duX3QpKTsKIAogCVpGQ1BfTE9HX0RFQlVHKCJmb3JjZWQgcmVvcGVuIG9mIHBvcnQgMHglMDE2THggb24gYWRhcHRlciAlc1xuIiwKIAkJICAgICAgIHBvcnQtPnd3cG4sIHpmY3BfZ2V0X2J1c2lkX2J5X3BvcnQocG9ydCkpOwpAQCAtNTAyLDE0ICs1MDAsMTIgQEAKIAkJWkZDUF9MT0dfREVCVUcoInNraXBwZWQgZm9yY2VkIHJlb3BlbiBvZiBmYWlsZWQgcG9ydCAweCUwMTZMeCAiCiAJCQkgICAgICAgIm9uIGFkYXB0ZXIgJXNcbiIsIHBvcnQtPnd3cG4sCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInBmX3JvX2YiKTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgJnBvcnQtPnd3cG4sIHNpemVvZiAod3duX3QpKTsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCiAJcmV0dmFsID0gemZjcF9lcnBfYWN0aW9uX2VucXVldWUoWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRCwKLQkJCQkJIHBvcnQtPmFkYXB0ZXIsIHBvcnQsIE5VTEwpOworCQkJCQkgcG9ydC0+YWRhcHRlciwgcG9ydCwgTlVMTCwgaWQsIHJlZik7CiAKICBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTUyNCw4ICs1MjAsOCBAQAogICogcmV0dXJuczoJMAktIGluaXRpYXRlZCBhY3Rpb24gc3VjY2Vzc2Z1bGx5CiAgKgkJPDAJLSBmYWlsZWQgdG8gaW5pdGlhdGUgYWN0aW9uCiAgKi8KLWludAotemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhcl9tYXNrKQoraW50IHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXJfbWFzaywgdTggaWQsCisJCQkJdm9pZCAqcmVmKQogewogCWludCByZXR2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUzNCw3ICs1MzAsOCBAQAogCWFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCXJlYWRfbG9ja19pcnFzYXZlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAl3cml0ZV9sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7Ci0JcmV0dmFsID0gemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuX2ludGVybmFsKHBvcnQsIGNsZWFyX21hc2spOworCXJldHZhbCA9IHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbl9pbnRlcm5hbChwb3J0LCBjbGVhcl9tYXNrLCBpZCwKKwkJCQkJCSAgICAgIHJlZik7CiAJd3JpdGVfdW5sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAKQEAgLTU1MSwxNCArNTQ4LDEwIEBACiAgKiByZXR1cm5zOgkwCS0gaW5pdGlhdGVkIGFjdGlvbiBzdWNjZXNzZnVsbHkKICAqCQk8MAktIGZhaWxlZCB0byBpbml0aWF0ZSBhY3Rpb24KICAqLwotc3RhdGljIGludAotemZjcF9lcnBfcG9ydF9yZW9wZW5faW50ZXJuYWwoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyX21hc2spCitzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfcmVvcGVuX2ludGVybmFsKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhcl9tYXNrLAorCQkJCQkgdTggaWQsIHZvaWQgKnJlZikKIHsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwotCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAicF9ybyIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7CiAKIAlaRkNQX0xPR19ERUJVRygicmVvcGVuIG9mIHBvcnQgMHglMDE2THggb24gYWRhcHRlciAlc1xuIiwKIAkJICAgICAgIHBvcnQtPnd3cG4sIHpmY3BfZ2V0X2J1c2lkX2J5X3BvcnQocG9ydCkpOwpAQCAtNTY5LDE2ICs1NjIsMTQgQEAKIAkJWkZDUF9MT0dfREVCVUcoInNraXBwZWQgcmVvcGVuIG9mIGZhaWxlZCBwb3J0IDB4JTAxNkx4ICIKIAkJCSAgICAgICAib24gYWRhcHRlciAlc1xuIiwgcG9ydC0+d3dwbiwKIAkJCSAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9wb3J0KHBvcnQpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAicF9yb19mIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7CiAJCS8qIGVuc3VyZSBwcm9wYWdhdGlvbiBvZiBmYWlsZWQgc3RhdHVzIHRvIG5ldyBkZXZpY2VzICovCi0JCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQpOworCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0LCAxNCwgTlVMTCk7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAogCXJldHZhbCA9IHpmY3BfZXJwX2FjdGlvbl9lbnF1ZXVlKFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVCwKLQkJCQkJIHBvcnQtPmFkYXB0ZXIsIHBvcnQsIE5VTEwpOworCQkJCQkgcG9ydC0+YWRhcHRlciwgcG9ydCwgTlVMTCwgaWQsIHJlZik7CiAKICBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTU5NCw4ICs1ODUsOCBAQAogICogY29ycmVjdCBsb2NraW5nLiBBbiBlcnJvciByZWNvdmVyeSB0YXNrIGlzIGluaXRpYXRlZCB0byBkbyB0aGUgcmVvcGVuLgogICogVG8gd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlb3BlbiB6ZmNwX2VycF93YWl0IHNob3VsZCBiZSB1c2VkLgogICovCi1pbnQKLXpmY3BfZXJwX3BvcnRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhcl9tYXNrKQoraW50IHpmY3BfZXJwX3BvcnRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhcl9tYXNrLCB1OCBpZCwKKwkJCSB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjAzLDcgKzU5NCw3IEBACiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAJd3JpdGVfbG9jaygmYWRhcHRlci0+ZXJwX2xvY2spOwotCXJldHZhbCA9IHpmY3BfZXJwX3BvcnRfcmVvcGVuX2ludGVybmFsKHBvcnQsIGNsZWFyX21hc2spOworCXJldHZhbCA9IHpmY3BfZXJwX3BvcnRfcmVvcGVuX2ludGVybmFsKHBvcnQsIGNsZWFyX21hc2ssIGlkLCByZWYpOwogCXdyaXRlX3VubG9jaygmYWRhcHRlci0+ZXJwX2xvY2spOwogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogCkBAIC02MjAsMTQgKzYxMSwxMiBAQAogICogcmV0dXJuczoJMAktIGluaXRpYXRlZCBhY3Rpb24gc3VjY2Vzc2Z1bGx5CiAgKgkJPDAJLSBmYWlsZWQgdG8gaW5pdGlhdGUgYWN0aW9uCiAgKi8KLXN0YXRpYyBpbnQKLXpmY3BfZXJwX3VuaXRfcmVvcGVuX2ludGVybmFsKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhcl9tYXNrKQorc3RhdGljIGludCB6ZmNwX2VycF91bml0X3Jlb3Blbl9pbnRlcm5hbChzdHJ1Y3QgemZjcF91bml0ICp1bml0LCBpbnQgY2xlYXJfbWFzaywKKwkJCQkJIHU4IGlkLCB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKIAotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInVfcm8iKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmdW5pdC0+ZmNwX2x1biwgc2l6ZW9mIChmY3BfbHVuX3QpKTsKIAlaRkNQX0xPR19ERUJVRygicmVvcGVuIG9mIHVuaXQgMHglMDE2THggb24gcG9ydCAweCUwMTZMeCAiCiAJCSAgICAgICAib24gYWRhcHRlciAlc1xuIiwgdW5pdC0+ZmNwX2x1biwKIAkJICAgICAgIHVuaXQtPnBvcnQtPnd3cG4sIHpmY3BfZ2V0X2J1c2lkX2J5X3VuaXQodW5pdCkpOwpAQCAtNjM5LDE1ICs2MjgsMTIgQEAKIAkJCSAgICAgICAib24gcG9ydCAweCUwMTZMeCBvbiBhZGFwdGVyICVzXG4iLAogCQkJICAgICAgIHVuaXQtPmZjcF9sdW4sIHVuaXQtPnBvcnQtPnd3cG4sCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfdW5pdCh1bml0KSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInVfcm9fZiIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmdW5pdC0+ZmNwX2x1biwKLQkJCSAgICBzaXplb2YgKGZjcF9sdW5fdCkpOwogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKIAlyZXR2YWwgPSB6ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQsCi0JCQkJCSB1bml0LT5wb3J0LT5hZGFwdGVyLCB1bml0LT5wb3J0LCB1bml0KTsKKwkJCQkJIGFkYXB0ZXIsIHVuaXQtPnBvcnQsIHVuaXQsIGlkLCByZWYpOwogIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNjYyLDggKzY0OCw4IEBACiAgKiBsb2NraW5nLiBBbiBlcnJvciByZWNvdmVyeSB0YXNrIGlzIGluaXRpYXRlZCB0byBkbyB0aGUgcmVvcGVuLgogICogVG8gd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlb3BlbiB6ZmNwX2VycF93YWl0IHNob3VsZCBiZSB1c2VkLgogICovCi1pbnQKLXpmY3BfZXJwX3VuaXRfcmVvcGVuKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhcl9tYXNrKQoraW50IHpmY3BfZXJwX3VuaXRfcmVvcGVuKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIGludCBjbGVhcl9tYXNrLCB1OCBpZCwKKwkJCSB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjc1LDcgKzY2MSw3IEBACiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAJd3JpdGVfbG9jaygmYWRhcHRlci0+ZXJwX2xvY2spOwotCXJldHZhbCA9IHpmY3BfZXJwX3VuaXRfcmVvcGVuX2ludGVybmFsKHVuaXQsIGNsZWFyX21hc2spOworCXJldHZhbCA9IHpmY3BfZXJwX3VuaXRfcmVvcGVuX2ludGVybmFsKHVuaXQsIGNsZWFyX21hc2ssIGlkLCByZWYpOwogCXdyaXRlX3VubG9jaygmYWRhcHRlci0+ZXJwX2xvY2spOwogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogCkBAIC02ODcsMTkgKzY3Myw0MyBAQAogICovCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2Jsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbGVhcl9tYXNrKQogewotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgImFfYmwiKTsKLQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwKKwl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgMTUsIE5VTEwsCiAJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQgfAogCQkJCSAgICAgICBjbGVhcl9tYXNrLCBaRkNQX0NMRUFSKTsKIH0KIAorLyogRklYTUU6IGlzbid0IHJlYWxseSBhdG9taWMgKi8KKy8qCisgKiByZXR1cm5zIHRoZSBtYXNrIHdoaWNoIGhhcyBub3QgYmVlbiBzZXQgc28gZmFyLCBpLmUuCisgKiAwIGlmIG5vIGJpdCBoYXMgYmVlbiBjaGFuZ2VkLCAhMCBpZiBzb21lIGJpdCBoYXMgYmVlbiBjaGFuZ2VkCisgKi8KK3N0YXRpYyBpbnQgYXRvbWljX3Rlc3RfYW5kX3NldF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgYXRvbWljX3QgKnYpCit7CisJaW50IGNoYW5nZWRfYml0cyA9IChhdG9taWNfcmVhZCh2KSAvKlhPUiovXiBtYXNrKSAmIG1hc2s7CisJYXRvbWljX3NldF9tYXNrKG1hc2ssIHYpOworCXJldHVybiBjaGFuZ2VkX2JpdHM7Cit9CisKKy8qIEZJWE1FOiBpc24ndCByZWFsbHkgYXRvbWljICovCisvKgorICogcmV0dXJucyB0aGUgbWFzayB3aGljaCBoYXMgbm90IGJlZW4gY2xlYXJlZCBzbyBmYXIsIGkuZS4KKyAqIDAgaWYgbm8gYml0IGhhcyBiZWVuIGNoYW5nZWQsICEwIGlmIHNvbWUgYml0IGhhcyBiZWVuIGNoYW5nZWQKKyAqLworc3RhdGljIGludCBhdG9taWNfdGVzdF9hbmRfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIGF0b21pY190ICp2KQoreworCWludCBjaGFuZ2VkX2JpdHMgPSBhdG9taWNfcmVhZCh2KSAmIG1hc2s7CisJYXRvbWljX2NsZWFyX21hc2sobWFzaywgdik7CisJcmV0dXJuIGNoYW5nZWRfYml0czsKK30KKwogLyoqCiAgKiB6ZmNwX2VycF9hZGFwdGVyX3VuYmxvY2sgLSBtYXJrIGFkYXB0ZXIgYXMgdW5ibG9ja2VkLCBhbGxvdyBzY3NpIHJlcXVlc3RzCiAgKi8KIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfdW5ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgImFfdWJsIik7Ci0JYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZhZGFwdGVyLT5zdGF0dXMpOworCWlmIChhdG9taWNfdGVzdF9hbmRfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwKKwkJCQkgICAgICZhZGFwdGVyLT5zdGF0dXMpKQorCQl6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcigxNiwgTlVMTCwgYWRhcHRlcik7CiB9CiAKIC8qCkBAIC03MTQsMTEgKzcyNCw3IEBACiBzdGF0aWMgdm9pZAogemZjcF9lcnBfcG9ydF9ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXJfbWFzaykKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKLQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgInBfYmwiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwotCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LAorCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCAxNywgTlVMTCwKIAkJCQkgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCB8IGNsZWFyX21hc2ssCiAJCQkJICAgIFpGQ1BfQ0xFQVIpOwogfQpAQCAtNzMzLDExICs3MzksOSBAQAogc3RhdGljIHZvaWQKIHpmY3BfZXJwX3BvcnRfdW5ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwotCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAicF91YmwiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwotCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmcG9ydC0+c3RhdHVzKTsKKwlpZiAoYXRvbWljX3Rlc3RfYW5kX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsCisJCQkJICAgICAmcG9ydC0+c3RhdHVzKSkKKwkJemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoMTgsIE5VTEwsIHBvcnQpOwogfQogCiAvKgpAQCAtNzUyLDExICs3NTYsNyBAQAogc3RhdGljIHZvaWQKIHpmY3BfZXJwX3VuaXRfYmxvY2soc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IGNsZWFyX21hc2spCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJ1X2JsIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgJnVuaXQtPmZjcF9sdW4sIHNpemVvZiAoZmNwX2x1bl90KSk7Ci0JemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsCisJemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsIDE5LCBOVUxMLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEIHwgY2xlYXJfbWFzaywKIAkJCQkgICAgWkZDUF9DTEVBUik7CiB9CkBAIC03NzEsMTEgKzc3MSw5IEBACiBzdGF0aWMgdm9pZAogemZjcF9lcnBfdW5pdF91bmJsb2NrKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJ1X3VibCIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICZ1bml0LT5mY3BfbHVuLCBzaXplb2YgKGZjcF9sdW5fdCkpOwotCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmdW5pdC0+c3RhdHVzKTsKKwlpZiAoYXRvbWljX3Rlc3RfYW5kX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsCisJCQkJICAgICAmdW5pdC0+c3RhdHVzKSkKKwkJemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoMjAsIE5VTEwsIHVuaXQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNzgzLDExICs3ODEsOSBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOwogCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAiYV9hciIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICZlcnBfYWN0aW9uLT5hY3Rpb24sIHNpemVvZiAoaW50KSk7Ci0KIAl6ZmNwX2VycF9hY3Rpb25fdG9fcmVhZHkoZXJwX2FjdGlvbik7CiAJdXAoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOworCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoMiwgYWRhcHRlciwgMCk7CiB9CiAKIC8qCkBAIC04NDksMTggKzg0NSwxNSBAQAogCQlpZiAoemZjcF9yZXFsaXN0X2ZpbmRfc2FmZShhZGFwdGVyLCBlcnBfYWN0aW9uLT5mc2ZfcmVxKSAmJgogCQkgICAgZXJwX2FjdGlvbi0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9PSBlcnBfYWN0aW9uKSB7CiAJCQkvKiBmc2ZfcmVxIHN0aWxsIGV4aXN0cyAqLwotCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9jYV9yZXEiKTsKLQkJCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZlcnBfYWN0aW9uLT5mc2ZfcmVxLAotCQkJCSAgICBzaXplb2YgKHVuc2lnbmVkIGxvbmcpKTsKIAkJCS8qIGRpc21pc3MgZnNmX3JlcSBvZiB0aW1lZCBvdXQvZGlzbWlzc2VkIGVycF9hY3Rpb24gKi8KIAkJCWlmIChlcnBfYWN0aW9uLT5zdGF0dXMgJiAoWkZDUF9TVEFUVVNfRVJQX0RJU01JU1NFRCB8CiAJCQkJCQkgIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkpIHsKLQkJCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsCi0JCQkJCQkgImFfY2FfZGlzcmVxIik7CiAJCQkJZXJwX2FjdGlvbi0+ZnNmX3JlcS0+c3RhdHVzIHw9CiAJCQkJCVpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7CisJCQkJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigxNDIsIGVycF9hY3Rpb24pOwogCQkJfQogCQkJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkgeworCQkJCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oMTQzLCBlcnBfYWN0aW9uKTsKIAkJCQlaRkNQX0xPR19OT1JNQUwoImVycm9yOiBlcnAgc3RlcCB0aW1lZCBvdXQgIgogCQkJCQkJIihhY3Rpb249JWQsIGZzZl9yZXE9JXApXG4gIiwKIAkJCQkJCWVycF9hY3Rpb24tPmFjdGlvbiwKQEAgLTg3OSw3ICs4NzIsNiBAQAogCQkJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCQkJfQogCQl9IGVsc2UgewotCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9jYV9nb25lcmVxIik7CiAJCQkvKgogCQkJICogZXZlbiBpZiB0aGlzIGZzZl9yZXEgaGFzIGdvbmUsIGZvcmdldCBhYm91dAogCQkJICogYXNzb2NpYXRpb24gYmV0d2VlbiBlcnBfYWN0aW9uIGFuZCBmc2ZfcmVxCkBAIC04ODcsOCArODc5LDcgQEAKIAkJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQl9IGVsc2UKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9jYV9ub3JlcSIpOworCX0KIH0KIAogLyoqCkBAIC05MDAsMTkgKzg5MSwxMSBAQAogc3RhdGljIHZvaWQgemZjcF9lcnBfYXN5bmNfaGFuZGxlcl9ub2xvY2soc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbiwKIAkJCQkJICB1bnNpZ25lZCBsb25nIHNldF9tYXNrKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOwotCiAJaWYgKHpmY3BfZXJwX2FjdGlvbl9leGlzdHMoZXJwX2FjdGlvbikgPT0gWkZDUF9FUlBfQUNUSU9OX1JVTk5JTkcpIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAiYV9hc3loX2V4Iik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDIsICZlcnBfYWN0aW9uLT5hY3Rpb24sCi0JCQkgICAgc2l6ZW9mIChpbnQpKTsKIAkJZXJwX2FjdGlvbi0+c3RhdHVzIHw9IHNldF9tYXNrOwogCQl6ZmNwX2VycF9hY3Rpb25fcmVhZHkoZXJwX2FjdGlvbik7CiAJfSBlbHNlIHsKIAkJLyogYWN0aW9uIGlzIHJlYWR5IG9yIGdvbmUgLSBub3RoaW5nIHRvIGRvICovCi0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgImFfYXN5aF9nb25lIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZlcnBfYWN0aW9uLT5hY3Rpb24sCi0JCQkgICAgc2l6ZW9mIChpbnQpKTsKIAl9CiB9CiAKQEAgLTkzOSwxMCArOTIyLDYgQEAKIHpmY3BfZXJwX21lbXdhaXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbiA9IChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopIGRhdGE7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDIsICJhX213aCIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDIsICZlcnBfYWN0aW9uLT5hY3Rpb24sIHNpemVvZiAoaW50KSk7CiAKIAl6ZmNwX2VycF9hc3luY19oYW5kbGVyKGVycF9hY3Rpb24sIDApOwogfQpAQCAtOTU1LDEwICs5MzQsNiBAQAogc3RhdGljIHZvaWQgemZjcF9lcnBfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uID0gKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKikgZGF0YTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMiwgImFfdGgiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwogCiAJemZjcF9lcnBfYXN5bmNfaGFuZGxlcihlcnBfYWN0aW9uLCBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpOwogfQpAQCAtOTczLDExICs5NDgsNiBAQAogICovCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fZGlzbWlzcyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOwotCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAiYV9hZGlzIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMiwgJmVycF9hY3Rpb24tPmFjdGlvbiwgc2l6ZW9mIChpbnQpKTsKLQogCWVycF9hY3Rpb24tPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19FUlBfRElTTUlTU0VEOwogCWlmICh6ZmNwX2VycF9hY3Rpb25fZXhpc3RzKGVycF9hY3Rpb24pID09IFpGQ1BfRVJQX0FDVElPTl9SVU5OSU5HKQogCQl6ZmNwX2VycF9hY3Rpb25fcmVhZHkoZXJwX2FjdGlvbik7CkBAIC05OTUsMTIgKzk2NSwxMCBAQAogCQlaRkNQX0xPR19OT1JNQUwoImVycm9yOiBjcmVhdGlvbiBvZiBlcnAgdGhyZWFkIGZhaWxlZCBmb3IgIgogCQkJCSJhZGFwdGVyICVzXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJhX3Roc2V0X2ZhaWwiKTsKIAl9IGVsc2UgewogCQl3YWl0X2V2ZW50KGFkYXB0ZXItPmVycF90aHJlYWRfd3FoLAogCQkJICAgYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfVVAsCiAJCQkJCSAgICAmYWRhcHRlci0+c3RhdHVzKSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgImFfdGhzZXRfb2siKTsKIAl9CiAKIAlyZXR1cm4gKHJldHZhbCA8IDApOwpAQCAtMTAyNyw2ICs5OTUsNyBAQAogCiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9LSUxMLCAmYWRhcHRlci0+c3RhdHVzKTsKIAl1cCgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7CisJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCgyLCBhZGFwdGVyLCAxKTsKIAogCXdhaXRfZXZlbnQoYWRhcHRlci0+ZXJwX3RocmVhZF93cWgsCiAJCSAgICFhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCwKQEAgLTEwMzUsOCArMTAwNCw2IEBACiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX0tJTEwsCiAJCQkgICZhZGFwdGVyLT5zdGF0dXMpOwogCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAiYV90aGtpX29rIik7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMDU5LDcgKzEwMjYsNiBAQAogCS8qIEJsb2NrIGFsbCBzaWduYWxzICovCiAJc2lnaW5pdHNldGludigmY3VycmVudC0+YmxvY2tlZCwgMCk7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCwgJmFkYXB0ZXItPnN0YXR1cyk7Ci0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAiYV90aF9ydW4iKTsKIAl3YWtlX3VwKCZhZGFwdGVyLT5lcnBfdGhyZWFkX3dxaCk7CiAKIAl3aGlsZSAoIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX0tJTEwsCkBAIC0xMDg0LDEyICsxMDUwLDEyIEBACiAJCSAqIG5vIGFjdGlvbiBpbiAncmVhZHknIHF1ZXVlIHRvIGJlIHByb2Nlc3NlZCBhbmQKIAkJICogdGhyZWFkIGlzIG5vdCB0byBiZSBraWxsZWQKIAkJICovCisJCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoNCwgYWRhcHRlciwgMSk7CiAJCWRvd25faW50ZXJydXB0aWJsZSgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgImFfdGhfd29rZW4iKTsKKwkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCg1LCBhZGFwdGVyLCAxKTsKIAl9CiAKIAlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfVVAsICZhZGFwdGVyLT5zdGF0dXMpOwotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgImFfdGhfc3RvcCIpOwogCXdha2VfdXAoJmFkYXB0ZXItPmVycF90aHJlYWRfd3FoKTsKIAogCXJldHVybiAwOwpAQCAtMTEyNSw3ICsxMDkxLDYgQEAKIAkvKiBkZXF1ZXVlIGRpc21pc3NlZCBhY3Rpb24gYW5kIGxlYXZlLCBpZiByZXF1aXJlZCAqLwogCXJldHZhbCA9IHpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX2FjdGlvbihlcnBfYWN0aW9uLCByZXR2YWwpOwogCWlmIChyZXR2YWwgPT0gWkZDUF9FUlBfRElTTUlTU0VEKSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgImFfc3RfZGlzMSIpOwogCQlnb3RvIHVubG9jazsKIAl9CiAKQEAgLTExNzYsMjAgKzExNDEsMTcgQEAKIAkJICAgZWxlbWVudCB3YXMgdGltZWQgb3V0LgogCQkgKi8KIAkJaWYgKGFkYXB0ZXItPmVycF90b3RhbF9jb3VudCA9PSBhZGFwdGVyLT5lcnBfbG93X21lbV9jb3VudCkgewotCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9zdF9sb3dtZW0iKTsKIAkJCVpGQ1BfTE9HX05PUk1BTCgiZXJyb3I6IG5vIG1lbXBvb2wgZWxlbWVudHMgYXZhaWxhYmxlLCAiCiAJCQkJCSJyZXN0YXJ0aW5nIEkvTyBvbiBhZGFwdGVyICVzICIKIAkJCQkJInRvIGZyZWUgbWVtcG9vbFxuIiwKIAkJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbl9pbnRlcm5hbChhZGFwdGVyLCAwKTsKKwkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuX2ludGVybmFsKGFkYXB0ZXIsIDAsIDY2LCBOVUxMKTsKIAkJfSBlbHNlIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAiYV9zdF9tZW13Iik7CiAJCXJldHZhbCA9IHpmY3BfZXJwX3N0cmF0ZWd5X21lbXdhaXQoZXJwX2FjdGlvbik7CiAJCX0KIAkJZ290byB1bmxvY2s7CiAJY2FzZSBaRkNQX0VSUF9DT05USU5VRVM6CiAJCS8qIGxlYXZlIHNpbmNlIHRoaXMgYWN0aW9uIHJ1bnMgYXN5bmNocm9ub3VzbHkgKi8KLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAiYV9zdF9jb250Iik7CiAJCWlmIChlcnBfYWN0aW9uLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfTE9XTUVNKSB7CiAJCQktLWFkYXB0ZXItPmVycF9sb3dfbWVtX2NvdW50OwogCQkJZXJwX2FjdGlvbi0+c3RhdHVzICY9IH5aRkNQX1NUQVRVU19FUlBfTE9XTUVNOwpAQCAtMTIxOCw3ICsxMTgwLDYgQEAKIAkgKiBhY3Rpb24gaXMgcmVwZWF0ZWQgaW4gb3JkZXIgdG8gcHJvY2VzcyBzdGF0ZSBjaGFuZ2UKIAkgKi8KIAlpZiAocmV0dmFsID09IFpGQ1BfRVJQX0VYSVQpIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAiYV9zdF9leGl0Iik7CiAJCWdvdG8gdW5sb2NrOwogCX0KIApAQCAtMTI0NCw4ICsxMjA1LDYgQEAKIAlpZiAocmV0dmFsICE9IFpGQ1BfRVJQX0RJU01JU1NFRCkKIAkJemZjcF9lcnBfc3RyYXRlZ3lfY2hlY2tfcXVldWVzKGFkYXB0ZXIpOwogCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAiYV9zdF9kb25lIik7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMjYwLDE3ICsxMjE5LDEyIEBACiBzdGF0aWMgaW50CiB6ZmNwX2VycF9zdHJhdGVneV9jaGVja19hY3Rpb24oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbiwgaW50IHJldHZhbCkKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQogCXpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX2ZzZnJlcShlcnBfYWN0aW9uKTsKIAotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZlcnBfYWN0aW9uLT5hY3Rpb24sIHNpemVvZiAoaW50KSk7CiAJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9ESVNNSVNTRUQpIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9zdGNkX2RpcyIpOwogCQl6ZmNwX2VycF9hY3Rpb25fZGVxdWV1ZShlcnBfYWN0aW9uKTsKIAkJcmV0dmFsID0gWkZDUF9FUlBfRElTTUlTU0VEOwotCX0gZWxzZQotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJhX3N0Y2Rfbm9kaXMiKTsKKwl9CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTI3OSw3ICsxMjMzLDYgQEAKIHpmY3BfZXJwX3N0cmF0ZWd5X2RvX2FjdGlvbihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCWludCByZXR2YWwgPSBaRkNQX0VSUF9GQUlMRUQ7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAKIAkvKgogCSAqIHRyeSB0byBleGVjdXRlL2NvbnRpbnVlIGFjdGlvbiBhcyBmYXIgYXMgcG9zc2libGUsCkBAIC0xMzA5LDkgKzEyNjIsNiBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDEsICJhX3N0ZGFfYnVnIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICZlcnBfYWN0aW9uLT5hY3Rpb24sCi0JCQkgICAgc2l6ZW9mIChpbnQpKTsKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IHVua25vd24gZXJwIGFjdGlvbiByZXF1ZXN0ZWQgb24gIgogCQkJCSJhZGFwdGVyICVzIChhY3Rpb249JWQpXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoZXJwX2FjdGlvbi0+YWRhcHRlciksCkBAIC0xMzMzLDEwICsxMjgzLDcgQEAKIHpmY3BfZXJwX3N0cmF0ZWd5X21lbXdhaXQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlpbnQgcmV0dmFsID0gWkZDUF9FUlBfQ09OVElOVUVTOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOwogCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAiYV9td2luaXQiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwogCWluaXRfdGltZXIoJmVycF9hY3Rpb24tPnRpbWVyKTsKIAllcnBfYWN0aW9uLT50aW1lci5mdW5jdGlvbiA9IHpmY3BfZXJwX21lbXdhaXRfaGFuZGxlcjsKIAllcnBfYWN0aW9uLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVycF9hY3Rpb247CkBAIC0xMzUzLDEzICsxMzAwLDEyIEBACiAgKgogICovCiB2b2lkCi16ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoremZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgdTggaWQsIHZvaWQgKnJlZikKIHsKLQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwKKwl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgaWQsIHJlZiwKIAkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsIFpGQ1BfU0VUKTsKIAlaRkNQX0xPR19OT1JNQUwoImFkYXB0ZXIgZXJwIGZhaWxlZCBvbiBhZGFwdGVyICVzXG4iLAogCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAiYV9hZmFpbCIpOwogfQogCiAvKgpAQCAtMTM2OSw5ICsxMzE1LDkgQEAKICAqCiAgKi8KIHZvaWQKLXpmY3BfZXJwX3BvcnRfZmFpbGVkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit6ZmNwX2VycF9wb3J0X2ZhaWxlZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCB1OCBpZCwgdm9pZCAqcmVmKQogewotCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LAorCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCBpZCwgcmVmLAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgWkZDUF9TRVQpOwogCiAJaWYgKGF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfUE9SVF9XS0EsICZwb3J0LT5zdGF0dXMpKQpAQCAtMTM4MSw5ICsxMzI3LDYgQEAKIAllbHNlCiAJCVpGQ1BfTE9HX05PUk1BTCgicG9ydCBlcnAgZmFpbGVkIChhZGFwdGVyICVzLCB3d3BuPTB4JTAxNkx4KVxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9wb3J0KHBvcnQpLCBwb3J0LT53d3BuKTsKLQotCWRlYnVnX3RleHRfZXZlbnQocG9ydC0+YWRhcHRlci0+ZXJwX2RiZiwgMiwgInBfcGZhaWwiKTsKLQlkZWJ1Z19ldmVudChwb3J0LT5hZGFwdGVyLT5lcnBfZGJmLCAyLCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogfQogCiAvKgpAQCAtMTM5MywxNyArMTMzNiwxNCBAQAogICoKICAqLwogdm9pZAotemZjcF9lcnBfdW5pdF9mYWlsZWQoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCkKK3pmY3BfZXJwX3VuaXRfZmFpbGVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IGlkLCB2b2lkICpyZWYpCiB7Ci0JemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsCisJemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsIGlkLCByZWYsCiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBaRkNQX1NFVCk7CiAKIAlaRkNQX0xPR19OT1JNQUwoInVuaXQgZXJwIGZhaWxlZCBvbiB1bml0IDB4JTAxNkx4IG9uIHBvcnQgMHglMDE2THggIgogCQkJIiBvbiBhZGFwdGVyICVzXG4iLCB1bml0LT5mY3BfbHVuLAogCQkJdW5pdC0+cG9ydC0+d3dwbiwgemZjcF9nZXRfYnVzaWRfYnlfdW5pdCh1bml0KSk7Ci0JZGVidWdfdGV4dF9ldmVudCh1bml0LT5wb3J0LT5hZGFwdGVyLT5lcnBfZGJmLCAyLCAidV91ZmFpbCIpOwotCWRlYnVnX2V2ZW50KHVuaXQtPnBvcnQtPmFkYXB0ZXItPmVycF9kYmYsIDIsCi0JCSAgICAmdW5pdC0+ZmNwX2x1biwgc2l6ZW9mIChmY3BfbHVuX3QpKTsKIH0KIAogLyoKQEAgLTE0MjcsMTAgKzEzNjcsNiBAQAogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBlcnBfYWN0aW9uLT51bml0OwogCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAiYV9zdGN0X25vcm0iKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZyZXN1bHQsIHNpemVvZiAoaW50KSk7Ci0KIAlzd2l0Y2ggKGVycF9hY3Rpb24tPmFjdGlvbikgewogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6CkBAIC0xNDU3LDE1ICsxMzkzLDE0IEBACiAJCQkgICAgICBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LAogCQkJICAgICAgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IHJldHZhbCkKIHsKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX3N0c2MiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmYWN0aW9uLCBzaXplb2YgKGludCkpOwotCiAJc3dpdGNoIChhY3Rpb24pIHsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgogCQlpZiAoemZjcF9lcnBfc3RyYXRlZ3lfc3RhdGVjaGFuZ2VfZGV0ZWN0ZWQoJmFkYXB0ZXItPnN0YXR1cywKIAkJCQkJCQkgICBzdGF0dXMpKSB7Ci0JCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbl9pbnRlcm5hbChhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCk7CisJCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbl9pbnRlcm5hbChhZGFwdGVyLAorCQkJCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCisJCQkJCQk2NywgTlVMTCk7CiAJCQlyZXR2YWwgPSBaRkNQX0VSUF9FWElUOwogCQl9CiAJCWJyZWFrOwpAQCAtMTQ3NCw3ICsxNDA5LDkgQEAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKIAkJaWYgKHpmY3BfZXJwX3N0cmF0ZWd5X3N0YXRlY2hhbmdlX2RldGVjdGVkKCZwb3J0LT5zdGF0dXMsCiAJCQkJCQkJICAgc3RhdHVzKSkgewotCQkJemZjcF9lcnBfcG9ydF9yZW9wZW5faW50ZXJuYWwocG9ydCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOworCQkJemZjcF9lcnBfcG9ydF9yZW9wZW5faW50ZXJuYWwocG9ydCwKKwkJCQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAorCQkJCQkJNjgsIE5VTEwpOwogCQkJcmV0dmFsID0gWkZDUF9FUlBfRVhJVDsKIAkJfQogCQlicmVhazsKQEAgLTE0ODIsNyArMTQxOSw5IEBACiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6CiAJCWlmICh6ZmNwX2VycF9zdHJhdGVneV9zdGF0ZWNoYW5nZV9kZXRlY3RlZCgmdW5pdC0+c3RhdHVzLAogCQkJCQkJCSAgIHN0YXR1cykpIHsKLQkJCXpmY3BfZXJwX3VuaXRfcmVvcGVuX2ludGVybmFsKHVuaXQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKTsKKwkJCXpmY3BfZXJwX3VuaXRfcmVvcGVuX2ludGVybmFsKHVuaXQsCisJCQkJCQlaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKKwkJCQkJCTY5LCBOVUxMKTsKIAkJCXJldHZhbCA9IFpGQ1BfRVJQX0VYSVQ7CiAJCX0KIAkJYnJlYWs7CkBAIC0xNTA2LDEwICsxNDQ1LDYgQEAKIHN0YXRpYyBpbnQKIHpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX3VuaXQoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IHJlc3VsdCkKIHsKLQlkZWJ1Z190ZXh0X2V2ZW50KHVuaXQtPnBvcnQtPmFkYXB0ZXItPmVycF9kYmYsIDUsICJ1X3N0Y3QiKTsKLQlkZWJ1Z19ldmVudCh1bml0LT5wb3J0LT5hZGFwdGVyLT5lcnBfZGJmLCA1LCAmdW5pdC0+ZmNwX2x1biwKLQkJICAgIHNpemVvZiAoZmNwX2x1bl90KSk7Ci0KIAlzd2l0Y2ggKHJlc3VsdCkgewogCWNhc2UgWkZDUF9FUlBfU1VDQ0VFREVEIDoKIAkJYXRvbWljX3NldCgmdW5pdC0+ZXJwX2NvdW50ZXIsIDApOwpAQCAtMTUxOCw3ICsxNDUzLDcgQEAKIAljYXNlIFpGQ1BfRVJQX0ZBSUxFRCA6CiAJCWF0b21pY19pbmMoJnVuaXQtPmVycF9jb3VudGVyKTsKIAkJaWYgKGF0b21pY19yZWFkKCZ1bml0LT5lcnBfY291bnRlcikgPiBaRkNQX01BWF9FUlBTKQotCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCk7CisJCQl6ZmNwX2VycF91bml0X2ZhaWxlZCh1bml0LCAyMSwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgWkZDUF9FUlBfRVhJVCA6CiAJCS8qIG5vdGhpbmcgKi8KQEAgLTE1MzYsOSArMTQ3MSw2IEBACiBzdGF0aWMgaW50CiB6ZmNwX2VycF9zdHJhdGVneV9jaGVja19wb3J0KHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCByZXN1bHQpCiB7Ci0JZGVidWdfdGV4dF9ldmVudChwb3J0LT5hZGFwdGVyLT5lcnBfZGJmLCA1LCAicF9zdGN0Iik7Ci0JZGVidWdfZXZlbnQocG9ydC0+YWRhcHRlci0+ZXJwX2RiZiwgNSwgJnBvcnQtPnd3cG4sIHNpemVvZiAod3duX3QpKTsKLQogCXN3aXRjaCAocmVzdWx0KSB7CiAJY2FzZSBaRkNQX0VSUF9TVUNDRUVERUQgOgogCQlhdG9taWNfc2V0KCZwb3J0LT5lcnBfY291bnRlciwgMCk7CkBAIC0xNTQ3LDcgKzE0NzksNyBAQAogCWNhc2UgWkZDUF9FUlBfRkFJTEVEIDoKIAkJYXRvbWljX2luYygmcG9ydC0+ZXJwX2NvdW50ZXIpOwogCQlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPmVycF9jb3VudGVyKSA+IFpGQ1BfTUFYX0VSUFMpCi0JCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0KTsKKwkJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDIyLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBaRkNQX0VSUF9FWElUIDoKIAkJLyogbm90aGluZyAqLwpAQCAtMTU2NSw4ICsxNDk3LDYgQEAKIHN0YXRpYyBpbnQKIHpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX2FkYXB0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgaW50IHJlc3VsdCkKIHsKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJhX3N0Y3QiKTsKLQogCXN3aXRjaCAocmVzdWx0KSB7CiAJY2FzZSBaRkNQX0VSUF9TVUNDRUVERUQgOgogCQlhdG9taWNfc2V0KCZhZGFwdGVyLT5lcnBfY291bnRlciwgMCk7CkBAIC0xNTc1LDcgKzE1MDUsNyBAQAogCWNhc2UgWkZDUF9FUlBfRkFJTEVEIDoKIAkJYXRvbWljX2luYygmYWRhcHRlci0+ZXJwX2NvdW50ZXIpOwogCQlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPmVycF9jb3VudGVyKSA+IFpGQ1BfTUFYX0VSUFMpCi0JCQl6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChhZGFwdGVyKTsKKwkJCXpmY3BfZXJwX2FkYXB0ZXJfZmFpbGVkKGFkYXB0ZXIsIDIzLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBaRkNQX0VSUF9FWElUIDoKIAkJLyogbm90aGluZyAqLwpAQCAtMTY1OCwzNyArMTU4OCwzNCBAQAogCQkJCSAgIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCiAJCQkJICAgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgaW50IHN0YXR1cykKIHsKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJhX3N0Zm9sIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgJmFjdGlvbiwgc2l6ZW9mIChpbnQpKTsKLQogCS8qIGluaXRpYXRlIGZvbGxvdy11cCBhY3Rpb25zIGRlcGVuZGluZyBvbiBzdWNjZXNzIG9mIGZpbmlzaGVkIGFjdGlvbiAqLwogCXN3aXRjaCAoYWN0aW9uKSB7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fQURBUFRFUjoKIAkJaWYgKHN0YXR1cyA9PSBaRkNQX0VSUF9TVUNDRUVERUQpCi0JCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbl9hbGxfaW50ZXJuYWwoYWRhcHRlciwgMCk7CisJCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbl9hbGxfaW50ZXJuYWwoYWRhcHRlciwgMCwgNzAsIE5VTEwpOwogCQllbHNlCi0JCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbl9pbnRlcm5hbChhZGFwdGVyLCAwKTsKKwkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuX2ludGVybmFsKGFkYXB0ZXIsIDAsIDcxLCBOVUxMKTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6CiAJCWlmIChzdGF0dXMgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKQotCQkJemZjcF9lcnBfcG9ydF9yZW9wZW5faW50ZXJuYWwocG9ydCwgMCk7CisJCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbl9pbnRlcm5hbChwb3J0LCAwLCA3MiwgTlVMTCk7CiAJCWVsc2UKLQkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuX2ludGVybmFsKGFkYXB0ZXIsIDApOworCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW5faW50ZXJuYWwoYWRhcHRlciwgMCwgNzMsIE5VTEwpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUOgogCQlpZiAoc3RhdHVzID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkKLQkJCXpmY3BfZXJwX3VuaXRfcmVvcGVuX2FsbF9pbnRlcm5hbChwb3J0LCAwKTsKKwkJCXpmY3BfZXJwX3VuaXRfcmVvcGVuX2FsbF9pbnRlcm5hbChwb3J0LCAwLCA3NCwgTlVMTCk7CiAJCWVsc2UKLQkJCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbl9pbnRlcm5hbChwb3J0LCAwKTsKKwkJCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbl9pbnRlcm5hbChwb3J0LCAwLCA3NSwgTlVMTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6CiAJCS8qIE5vdGhpbmcgdG8gZG8gaWYgc3RhdHVzID09IFpGQ1BfRVJQX1NVQ0NFRURFRCAqLwogCQlpZiAoc3RhdHVzICE9IFpGQ1BfRVJQX1NVQ0NFRURFRCkKLQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuX2ludGVybmFsKHVuaXQtPnBvcnQsIDApOworCQkJemZjcF9lcnBfcG9ydF9yZW9wZW5faW50ZXJuYWwodW5pdC0+cG9ydCwgMCwgNzYsIE5VTEwpOwogCQlicmVhazsKIAl9CiAKQEAgLTE3MDQsMTIgKzE2MzEsMTAgQEAKIAlyZWFkX2xvY2soJmFkYXB0ZXItPmVycF9sb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpICYmCiAJICAgIGxpc3RfZW1wdHkoJmFkYXB0ZXItPmVycF9ydW5uaW5nX2hlYWQpKSB7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICJhX2NxX3dha2UiKTsKIAkJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1BFTkRJTkcsCiAJCQkJCSAgJmFkYXB0ZXItPnN0YXR1cyk7CiAJCQl3YWtlX3VwKCZhZGFwdGVyLT5lcnBfZG9uZV93cWgpOwotCX0gZWxzZQotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJhX2NxX25vdGVtcHR5Iik7CisJfQogCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiAKQEAgLTE3MzMsMjkgKzE2NTgsMjcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi12b2lkCi16ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICB1MzIgbWFzaywgaW50IHNldF9vcl9jbGVhcikKK3ZvaWQgemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGlkLAorCQkJCSAgICB2b2lkICpyZWYsIHUzMiBtYXNrLCBpbnQgc2V0X29yX2NsZWFyKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7Ci0JdTMyIGNvbW1vbl9tYXNrID0gbWFzayAmIFpGQ1BfQ09NTU9OX0ZMQUdTOworCXUzMiBjaGFuZ2VkLCBjb21tb25fbWFzayA9IG1hc2sgJiBaRkNQX0NPTU1PTl9GTEFHUzsKIAogCWlmIChzZXRfb3JfY2xlYXIgPT0gWkZDUF9TRVQpIHsKLQkJYXRvbWljX3NldF9tYXNrKG1hc2ssICZhZGFwdGVyLT5zdGF0dXMpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX21vZF9hc19zIik7CisJCWNoYW5nZWQgPSBhdG9taWNfdGVzdF9hbmRfc2V0X21hc2sobWFzaywgJmFkYXB0ZXItPnN0YXR1cyk7CiAJfSBlbHNlIHsKLQkJYXRvbWljX2NsZWFyX21hc2sobWFzaywgJmFkYXB0ZXItPnN0YXR1cyk7CisJCWNoYW5nZWQgPSBhdG9taWNfdGVzdF9hbmRfY2xlYXJfbWFzayhtYXNrLCAmYWRhcHRlci0+c3RhdHVzKTsKIAkJaWYgKG1hc2sgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkKIAkJCWF0b21pY19zZXQoJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9tb2RfYXNfYyIpOwogCX0KLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmbWFzaywgc2l6ZW9mICh1MzIpKTsKKwlpZiAoY2hhbmdlZCkKKwkJemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIoaWQsIHJlZiwgYWRhcHRlcik7CiAKIAkvKiBEZWFsIHdpdGggYWxsIHVuZGVybHlpbmcgZGV2aWNlcywgb25seSBwYXNzIGNvbW1vbl9tYXNrICovCiAJaWYgKGNvbW1vbl9tYXNrKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkKLQkJICAgIHpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCBjb21tb25fbWFzaywKLQkJCQkJCXNldF9vcl9jbGVhcik7CisJCQl6ZmNwX2VycF9tb2RpZnlfcG9ydF9zdGF0dXMocG9ydCwgaWQsIHJlZiwgY29tbW9uX21hc2ssCisJCQkJCQkgICAgc2V0X29yX2NsZWFyKTsKIH0KIAogLyoKQEAgLTE3NjQsMjkgKzE2ODcsMjcgQEAKICAqIHB1cnBvc2U6CXNldHMgdGhlIHBvcnQgYW5kIGFsbCB1bmRlcmx5aW5nIGRldmljZXMgdG8gRVJQX0ZBSUxFRAogICoKICAqLwotdm9pZAotemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHUzMiBtYXNrLCBpbnQgc2V0X29yX2NsZWFyKQordm9pZCB6ZmNwX2VycF9tb2RpZnlfcG9ydF9zdGF0dXMoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgdTggaWQsIHZvaWQgKnJlZiwKKwkJCQkgdTMyIG1hc2ssIGludCBzZXRfb3JfY2xlYXIpCiB7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKLQl1MzIgY29tbW9uX21hc2sgPSBtYXNrICYgWkZDUF9DT01NT05fRkxBR1M7CisJdTMyIGNoYW5nZWQsIGNvbW1vbl9tYXNrID0gbWFzayAmIFpGQ1BfQ09NTU9OX0ZMQUdTOwogCiAJaWYgKHNldF9vcl9jbGVhciA9PSBaRkNQX1NFVCkgewotCQlhdG9taWNfc2V0X21hc2sobWFzaywgJnBvcnQtPnN0YXR1cyk7Ci0JCWRlYnVnX3RleHRfZXZlbnQocG9ydC0+YWRhcHRlci0+ZXJwX2RiZiwgMywgInBfbW9kX3BzX3MiKTsKKwkJY2hhbmdlZCA9IGF0b21pY190ZXN0X2FuZF9zZXRfbWFzayhtYXNrLCAmcG9ydC0+c3RhdHVzKTsKIAl9IGVsc2UgewotCQlhdG9taWNfY2xlYXJfbWFzayhtYXNrLCAmcG9ydC0+c3RhdHVzKTsKKwkJY2hhbmdlZCA9IGF0b21pY190ZXN0X2FuZF9jbGVhcl9tYXNrKG1hc2ssICZwb3J0LT5zdGF0dXMpOwogCQlpZiAobWFzayAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKQogCQkJYXRvbWljX3NldCgmcG9ydC0+ZXJwX2NvdW50ZXIsIDApOwotCQlkZWJ1Z190ZXh0X2V2ZW50KHBvcnQtPmFkYXB0ZXItPmVycF9kYmYsIDMsICJwX21vZF9wc19jIik7CiAJfQotCWRlYnVnX2V2ZW50KHBvcnQtPmFkYXB0ZXItPmVycF9kYmYsIDMsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7Ci0JZGVidWdfZXZlbnQocG9ydC0+YWRhcHRlci0+ZXJwX2RiZiwgMywgJm1hc2ssIHNpemVvZiAodTMyKSk7CisJaWYgKGNoYW5nZWQpCisJCXpmY3BfcmVjX2RiZl9ldmVudF9wb3J0KGlkLCByZWYsIHBvcnQpOwogCiAJLyogTW9kaWZ5IHN0YXR1cyBvZiBhbGwgdW5kZXJseWluZyBkZXZpY2VzLCBvbmx5IHBhc3MgY29tbW9uIG1hc2sgKi8KIAlpZiAoY29tbW9uX21hc2spCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodW5pdCwgJnBvcnQtPnVuaXRfbGlzdF9oZWFkLCBsaXN0KQotCQkgICAgemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsIGNvbW1vbl9tYXNrLAotCQkJCQkJc2V0X29yX2NsZWFyKTsKKwkJCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCBpZCwgcmVmLCBjb21tb25fbWFzaywKKwkJCQkJCSAgICBzZXRfb3JfY2xlYXIpOwogfQogCiAvKgpAQCAtMTc5NSwyMiArMTcxNiwyMSBAQAogICogcHVycG9zZToJc2V0cyB0aGUgdW5pdCB0byBFUlBfRkFJTEVECiAgKgogICovCi12b2lkCi16ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXMoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTMyIG1hc2ssIGludCBzZXRfb3JfY2xlYXIpCit2b2lkIHpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyhzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCBpZCwgdm9pZCAqcmVmLAorCQkJCSB1MzIgbWFzaywgaW50IHNldF9vcl9jbGVhcikKIHsKKwl1MzIgY2hhbmdlZDsKKwogCWlmIChzZXRfb3JfY2xlYXIgPT0gWkZDUF9TRVQpIHsKLQkJYXRvbWljX3NldF9tYXNrKG1hc2ssICZ1bml0LT5zdGF0dXMpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KHVuaXQtPnBvcnQtPmFkYXB0ZXItPmVycF9kYmYsIDMsICJ1X21vZF91c19zIik7CisJCWNoYW5nZWQgPSBhdG9taWNfdGVzdF9hbmRfc2V0X21hc2sobWFzaywgJnVuaXQtPnN0YXR1cyk7CiAJfSBlbHNlIHsKLQkJYXRvbWljX2NsZWFyX21hc2sobWFzaywgJnVuaXQtPnN0YXR1cyk7CisJCWNoYW5nZWQgPSBhdG9taWNfdGVzdF9hbmRfY2xlYXJfbWFzayhtYXNrLCAmdW5pdC0+c3RhdHVzKTsKIAkJaWYgKG1hc2sgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkgewogCQkJYXRvbWljX3NldCgmdW5pdC0+ZXJwX2NvdW50ZXIsIDApOwogCQl9Ci0JCWRlYnVnX3RleHRfZXZlbnQodW5pdC0+cG9ydC0+YWRhcHRlci0+ZXJwX2RiZiwgMywgInVfbW9kX3VzX2MiKTsKIAl9Ci0JZGVidWdfZXZlbnQodW5pdC0+cG9ydC0+YWRhcHRlci0+ZXJwX2RiZiwgMywgJnVuaXQtPmZjcF9sdW4sCi0JCSAgICBzaXplb2YgKGZjcF9sdW5fdCkpOwotCWRlYnVnX2V2ZW50KHVuaXQtPnBvcnQtPmFkYXB0ZXItPmVycF9kYmYsIDMsICZtYXNrLCBzaXplb2YgKHUzMikpOworCWlmIChjaGFuZ2VkKQorCQl6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdChpZCwgcmVmLCB1bml0KTsKIH0KIAogLyoKQEAgLTE4MjIsMzAgKzE3NDIsMzIgQEAKICAqIHJldHVybnM6CTAJLSBpbml0aWF0ZWQgYWN0aW9uIHN1Y2Nlc3NmdWxseQogICoJCTwwCS0gZmFpbGVkIHRvIGluaXRpYXRlIGFjdGlvbgogICovCi1pbnQKLXpmY3BfZXJwX3BvcnRfcmVvcGVuX2FsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXJfbWFzaykKK2ludCB6ZmNwX2VycF9wb3J0X3Jlb3Blbl9hbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgaW50IGNsZWFyX21hc2ssCisJCQkgICAgIHU4IGlkLCB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmVhZF9sb2NrX2lycXNhdmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogCXdyaXRlX2xvY2soJmFkYXB0ZXItPmVycF9sb2NrKTsKLQlyZXR2YWwgPSB6ZmNwX2VycF9wb3J0X3Jlb3Blbl9hbGxfaW50ZXJuYWwoYWRhcHRlciwgY2xlYXJfbWFzayk7CisJcmV0dmFsID0gemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsX2ludGVybmFsKGFkYXB0ZXIsIGNsZWFyX21hc2ssIGlkLAorCQkJCQkJICAgcmVmKTsKIAl3cml0ZV91bmxvY2soJmFkYXB0ZXItPmVycF9sb2NrKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQKLXpmY3BfZXJwX3BvcnRfcmVvcGVuX2FsbF9pbnRlcm5hbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXJfbWFzaykKK3N0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsX2ludGVybmFsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgICAgaW50IGNsZWFyX21hc2ssIHU4IGlkLCB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KQogCQlpZiAoIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfUE9SVF9XS0EsICZwb3J0LT5zdGF0dXMpKQotCQkJemZjcF9lcnBfcG9ydF9yZW9wZW5faW50ZXJuYWwocG9ydCwgY2xlYXJfbWFzayk7CisJCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbl9pbnRlcm5hbChwb3J0LCBjbGVhcl9tYXNrLCBpZCwKKwkJCQkJCSAgICAgIHJlZik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTg1NywxNCArMTc3OSwxNCBAQAogICoKICAqIHJldHVybnM6CUZJWE1FCiAgKi8KLXN0YXRpYyBpbnQKLXpmY3BfZXJwX3VuaXRfcmVvcGVuX2FsbF9pbnRlcm5hbChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXJfbWFzaykKK3N0YXRpYyBpbnQgemZjcF9lcnBfdW5pdF9yZW9wZW5fYWxsX2ludGVybmFsKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCisJCQkJCSAgICAgaW50IGNsZWFyX21hc2ssIHU4IGlkLCB2b2lkICpyZWYpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodW5pdCwgJnBvcnQtPnVuaXRfbGlzdF9oZWFkLCBsaXN0KQotCSAgICB6ZmNwX2VycF91bml0X3Jlb3Blbl9pbnRlcm5hbCh1bml0LCBjbGVhcl9tYXNrKTsKKwkJemZjcF9lcnBfdW5pdF9yZW9wZW5faW50ZXJuYWwodW5pdCwgY2xlYXJfbWFzaywgaWQsIHJlZik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTg5MiwxMCArMTgxNCw2IEBACiAJZWxzZQogCQlyZXR2YWwgPSB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW4oZXJwX2FjdGlvbik7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX2FzdC9yZXQiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZyZXR2YWwsIHNpemVvZiAoaW50KSk7Ci0KIAlpZiAocmV0dmFsID09IFpGQ1BfRVJQX0ZBSUxFRCkgewogCQlaRkNQX0xPR19JTkZPKCJXYWl0aW5nIHRvIGFsbG93IHRoZSBhZGFwdGVyICVzICIKIAkJCSAgICAgICJ0byByZWNvdmVyIGl0c2VsZlxuIiwKQEAgLTIwMjEsNyArMTkzOSw2IEBACiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJZ290byBmYWlsZWRfcWRpb19lc3RhYmxpc2g7CiAJfQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInFkaW9fZXN0Iik7CiAKIAlpZiAocWRpb19hY3RpdmF0ZShhZGFwdGVyLT5jY3dfZGV2aWNlLCAwKSAhPSAwKSB7CiAJCVpGQ1BfTE9HX0lORk8oImVycm9yOiBhY3RpdmF0aW9uIG9mIFFESU8gcXVldWVzIGZhaWxlZCAiCkBAIC0yMDI5LDcgKzE5NDYsNiBAQAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCWdvdG8gZmFpbGVkX3FkaW9fYWN0aXZhdGU7CiAJfQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInFkaW9fYWN0Iik7CiAKIAkvKgogCSAqIHB1dCBidWZmZXJzIGludG8gcmVzcG9uc2UgcXVldWUsCkBAIC0yMDc3LDExICsxOTkzLDkgQEAKIAkvKiBOT1AgKi8KIAogIGZhaWxlZF9xZGlvX2FjdGl2YXRlOgotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInFkaW9fZG93bjFhIik7CiAJd2hpbGUgKHFkaW9fc2h1dGRvd24oYWRhcHRlci0+Y2N3X2RldmljZSwKIAkJCSAgICAgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpID09IC1FSU5QUk9HUkVTUykKIAkJc3NsZWVwKDEpOwotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInFkaW9fZG93bjFiIik7CiAKICBmYWlsZWRfcWRpb19lc3RhYmxpc2g6CiAgZmFpbGVkX3Nhbml0eToKQEAgLTIxMjcsMTQgKzIwNDEsMTIgQEAKIAkJd3JpdGVfdW5sb2NrX2lycSgmYWRhcHRlci0+ZXJwX2xvY2spOwogCQlpZiAoemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGEoZXJwX2FjdGlvbikpIHsKIAkJCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKLQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgImFfZnN0eF94ZiIpOwogCQkJWkZDUF9MT0dfSU5GTygiZXJyb3I6ICBpbml0aWF0aW9uIG9mIGV4Y2hhbmdlIG9mICIKIAkJCQkgICAgICAiY29uZmlndXJhdGlvbiBkYXRhIGZhaWxlZCBmb3IgIgogCQkJCSAgICAgICJhZGFwdGVyICVzXG4iLAogCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCQkJYnJlYWs7CiAJCX0KLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAiYV9mc3R4X3hvayIpOwogCQlaRkNQX0xPR19ERUJVRygiWGNoYW5nZSB1bmRlcndheVxuIik7CiAKIAkJLyoKQEAgLTIxNTAsNyArMjA2Miw5IEBACiAJCSAqIF9tdXN0XyBiZSB0aGUgb25lIGJlbG9uZ2luZyB0byB0aGUgJ2V4Y2hhbmdlIGNvbmZpZwogCQkgKiBkYXRhJyByZXF1ZXN0LgogCQkgKi8KKwkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCg2LCBhZGFwdGVyLCAxKTsKIAkJZG93bigmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7CisJCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoNywgYWRhcHRlciwgMSk7CiAJCWlmIChlcnBfYWN0aW9uLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpIHsKIAkJCVpGQ1BfTE9HX0lORk8oImVycm9yOiBleGNoYW5nZSBvZiBjb25maWd1cmF0aW9uIGRhdGEgIgogCQkJCSAgICAgICJmb3IgYWRhcHRlciAlcyB0aW1lZCBvdXRcbiIsCkBAIC0yMTk4LDE2ICsyMTEyLDE1IEBACiAKIAlyZXQgPSB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGEoZXJwX2FjdGlvbik7CiAJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkgewotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX3hwb3J0X25vdHN1cHAiKTsKIAkJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKIAl9IGVsc2UgaWYgKHJldCkgewotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX3hwb3J0X2ZhaWxlZCIpOwogCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCX0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJhX3hwb3J0X29rIik7CiAKIAlyZXQgPSBaRkNQX0VSUF9TVUNDRUVERUQ7CisJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCg4LCBhZGFwdGVyLCAxKTsKIAlkb3duKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKDksIGFkYXB0ZXIsIDEpOwogCWlmIChlcnBfYWN0aW9uLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpIHsKIAkJWkZDUF9MT0dfSU5GTygiZXJyb3I6IGV4Y2hhbmdlIHBvcnQgZGF0YSB0aW1lZCBvdXQgKGFkYXB0ZXIgIgogCQkJICAgICAgIiVzKVxuIiwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CkBAIC0yMjYxLDcgKzIxNzQsNiBAQAogewogCWludCByZXR2YWwgPSBaRkNQX0VSUF9GQUlMRUQ7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGVycF9hY3Rpb24tPnBvcnQ7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPnN0ZXApIHsKIApAQCAtMjI5OCwxMSArMjIxMCw2IEBACiAJCWJyZWFrOwogCX0KIAotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInBfcGZzdC9yZXQiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZlcnBfYWN0aW9uLT5hY3Rpb24sIHNpemVvZiAoaW50KSk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJnJldHZhbCwgc2l6ZW9mIChpbnQpKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIzMjAsNyArMjIyNyw2IEBACiB7CiAJaW50IHJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKIAogCXN3aXRjaCAoZXJwX2FjdGlvbi0+c3RlcCkgewogCkBAIC0yMzUzLDExICsyMjU5LDYgQEAKIAkJcmV0dmFsID0gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuKGVycF9hY3Rpb24pOwogCiAgb3V0OgotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgInBfcHN0L3JldCIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJmVycF9hY3Rpb24tPmFjdGlvbiwgc2l6ZW9mIChpbnQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmcmV0dmFsLCBzaXplb2YgKGludCkpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjM5NSw3ICsyMjk2LDcgQEAKIAkJCQkJCXBvcnQtPnd3cG4sCiAJCQkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAogCQkJCQkJYWRhcHRlci0+cGVlcl93d3BuKTsKLQkJCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0KTsKKwkJCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0LCAyNSwgTlVMTCk7CiAJCQkJcmV0dmFsID0gWkZDUF9FUlBfRkFJTEVEOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjQyMSw4ICsyMzIyLDggQEAKIAkJCS8qIG5hbWVzZXJ2ZXIgcG9ydCBtYXkgbGl2ZSBhZ2FpbiAqLwogCQkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLAogCQkJCQkmYWRhcHRlci0+bmFtZXNlcnZlcl9wb3J0LT5zdGF0dXMpOwotCQkJaWYgKHpmY3BfZXJwX3BvcnRfcmVvcGVuKGFkYXB0ZXItPm5hbWVzZXJ2ZXJfcG9ydCwgMCkKLQkJCSAgICA+PSAwKSB7CisJCQlpZiAoemZjcF9lcnBfcG9ydF9yZW9wZW4oYWRhcHRlci0+bmFtZXNlcnZlcl9wb3J0LCAwLAorCQkJCQkJIDc3LCBlcnBfYWN0aW9uKSA+PSAwKSB7CiAJCQkJZXJwX2FjdGlvbi0+c3RlcCA9CiAJCQkJCVpGQ1BfRVJQX1NURVBfTkFNRVNFUlZFUl9PUEVOOwogCQkJCXJldHZhbCA9IFpGQ1BfRVJQX0NPTlRJTlVFUzsKQEAgLTI0NTMsNyArMjM1NCw3IEBACiAJCQkJCSAgICAgICAiZm9yIHBvcnQgMHglMDE2THggIgogCQkJCQkgICAgICAgIihtaXNjb25maWd1cmVkIFdXUE4/KVxuIiwKIAkJCQkJICAgICAgIHBvcnQtPnd3cG4pOwotCQkJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQpOworCQkJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDI2LCBOVUxMKTsKIAkJCQlyZXR2YWwgPSBaRkNQX0VSUF9FWElUOwogCQkJfSBlbHNlIHsKIAkJCQlaRkNQX0xPR19ERUJVRygibmFtZXNlcnZlciBsb29rLXVwIGZhaWxlZCBmb3IgIgpAQCAtMjU0OSwxNyArMjQ1MCwxMiBAQAogCXJlYWRfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcnBfYWN0aW9uLCB0bXAsICZhZGFwdGVyLT5lcnBfcnVubmluZ19oZWFkLAogCQkJCSBsaXN0KSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgInBfcHN0bnN3X24iKTsKLQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgJmVycF9hY3Rpb24tPnBvcnQtPnd3cG4sCi0JCQkgICAgc2l6ZW9mICh3d25fdCkpOwogCQlpZiAoZXJwX2FjdGlvbi0+c3RlcCA9PSBaRkNQX0VSUF9TVEVQX05BTUVTRVJWRVJfT1BFTikgewotCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAicF9wc3Ruc3dfdyIpOwotCQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywKLQkJCQkgICAgJmVycF9hY3Rpb24tPnBvcnQtPnd3cG4sIHNpemVvZiAod3duX3QpKTsKIAkJCWlmIChhdG9taWNfdGVzdF9tYXNrKAogCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKIAkJCQkgICAgJmFkYXB0ZXItPm5hbWVzZXJ2ZXJfcG9ydC0+c3RhdHVzKSkKLQkJCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChlcnBfYWN0aW9uLT5wb3J0KTsKKwkJCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChlcnBfYWN0aW9uLT5wb3J0LCAyNywKKwkJCQkJCSAgICAgTlVMTCk7CiAJCQl6ZmNwX2VycF9hY3Rpb25fcmVhZHkoZXJwX2FjdGlvbik7CiAJCX0KIAl9CkBAIC0yNTgwLDI2ICsyNDc2LDE4IEBACiB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9zdHJhdGVneV9jbG9zZShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCWludCByZXR2YWw7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGVycF9hY3Rpb24tPnBvcnQ7CiAKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9jbG9zZV9waHlzaWNhbF9wb3J0KGVycF9hY3Rpb24pOwogCWlmIChyZXR2YWwgPT0gLUVOT01FTSkgewotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJvX3Bmc3RjX25vbWVtIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7CiAJCXJldHZhbCA9IFpGQ1BfRVJQX05PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAJZXJwX2FjdGlvbi0+c3RlcCA9IFpGQ1BfRVJQX1NURVBfUEhZU19QT1JUX0NMT1NJTkc7CiAJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgIm9fcGZzdGNfY3BmIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7CiAJCS8qIGNvdWxkIG5vdCBzZW5kICdvcGVuJywgZmFpbCAqLwogCQlyZXR2YWwgPSBaRkNQX0VSUF9GQUlMRUQ7CiAJCWdvdG8gb3V0OwogCX0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJvX3Bmc3RjX2Nwb2siKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCXJldHZhbCA9IFpGQ1BfRVJQX0NPTlRJTlVFUzsKICBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTI2MDksMTAgKzI0OTcsNiBAQAogemZjcF9lcnBfcG9ydF9zdHJhdGVneV9jbGVhcnN0YXRpKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7CiAJaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJwX3BzdGNsc3QiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU5JTkcgfAogCQkJICBaRkNQX1NUQVRVU19DT01NT05fQ0xPU0lORyB8CkBAIC0yNjM2LDI2ICsyNTIwLDE4IEBACiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X2Nsb3NlKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKIAogCXJldHZhbCA9IHpmY3BfZnNmX2Nsb3NlX3BvcnQoZXJwX2FjdGlvbik7CiAJaWYgKHJldHZhbCA9PSAtRU5PTUVNKSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInBfcHN0Y19ub21lbSIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCQlyZXR2YWwgPSBaRkNQX0VSUF9OT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCWVycF9hY3Rpb24tPnN0ZXAgPSBaRkNQX0VSUF9TVEVQX1BPUlRfQ0xPU0lORzsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAicF9wc3RjX2NwZiIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCQkvKiBjb3VsZCBub3Qgc2VuZCAnY2xvc2UnLCBmYWlsICovCiAJCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKIAkJZ290byBvdXQ7CiAJfQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgInBfcHN0Y19jcG9rIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgJnBvcnQtPnd3cG4sIHNpemVvZiAod3duX3QpKTsKIAlyZXR2YWwgPSBaRkNQX0VSUF9DT05USU5VRVM7CiAgb3V0OgogCXJldHVybiByZXR2YWw7CkBAIC0yNjczLDI2ICsyNTQ5LDE4IEBACiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fcG9ydChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCWludCByZXR2YWw7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGVycF9hY3Rpb24tPnBvcnQ7CiAKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9vcGVuX3BvcnQoZXJwX2FjdGlvbik7CiAJaWYgKHJldHZhbCA9PSAtRU5PTUVNKSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInBfcHN0b19ub21lbSIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCQlyZXR2YWwgPSBaRkNQX0VSUF9OT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCWVycF9hY3Rpb24tPnN0ZXAgPSBaRkNQX0VSUF9TVEVQX1BPUlRfT1BFTklORzsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAicF9wc3RvX29wZiIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCQkvKiBjb3VsZCBub3Qgc2VuZCAnb3BlbicsIGZhaWwgKi8KIAkJcmV0dmFsID0gWkZDUF9FUlBfRkFJTEVEOwogCQlnb3RvIG91dDsKIAl9Ci0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAicF9wc3RvX29wb2siKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCXJldHZhbCA9IFpGQ1BfRVJQX0NPTlRJTlVFUzsKICBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTI3MTAsMjYgKzI1NzgsMTggQEAKIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9jb21tb25fbG9va3VwKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKIAogCXJldHZhbCA9IHpmY3BfbnNfZ2lkX3BuX3JlcXVlc3QoZXJwX2FjdGlvbik7CiAJaWYgKHJldHZhbCA9PSAtRU5PTUVNKSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInBfcHN0bl9ub21lbSIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmcG9ydC0+d3dwbiwgc2l6ZW9mICh3d25fdCkpOwogCQlyZXR2YWwgPSBaRkNQX0VSUF9OT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCWVycF9hY3Rpb24tPnN0ZXAgPSBaRkNQX0VSUF9TVEVQX05BTUVTRVJWRVJfTE9PS1VQOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJwX3BzdG5fcmVmIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7CiAJCS8qIGNvdWxkIG5vdCBzZW5kIG5hbWVzZXJ2ZXIgcmVxdWVzdCwgZmFpbCAqLwogCQlyZXR2YWwgPSBaRkNQX0VSUF9GQUlMRUQ7CiAJCWdvdG8gb3V0OwogCX0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJwX3BzdG5fcmVvayIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICZwb3J0LT53d3BuLCBzaXplb2YgKHd3bl90KSk7CiAJcmV0dmFsID0gWkZDUF9FUlBfQ09OVElOVUVTOwogIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjc1MCw3ICsyNjEwLDYgQEAKIHsKIAlpbnQgcmV0dmFsID0gWkZDUF9FUlBfRkFJTEVEOwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBlcnBfYWN0aW9uLT51bml0OwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOwogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5zdGVwKSB7CiAKQEAgLTI3OTcsMTAgKzI2NTYsNiBAQAogCQlicmVhazsKIAl9CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJ1X3VzdC9yZXQiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmdW5pdC0+ZmNwX2x1biwgc2l6ZW9mIChmY3BfbHVuX3QpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZyZXR2YWwsIHNpemVvZiAoaW50KSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjgwOCwxMCArMjY2Myw2IEBACiB6ZmNwX2VycF91bml0X3N0cmF0ZWd5X2NsZWFyc3RhdGkoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKLQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInVfdXN0Y2xzdCIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZ1bml0LT5mY3BfbHVuLCBzaXplb2YgKGZjcF9sdW5fdCkpOwogCiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU5JTkcgfAogCQkJICBaRkNQX1NUQVRVU19DT01NT05fQ0xPU0lORyB8CkBAIC0yODM1LDI4ICsyNjg2LDE4IEBACiB6ZmNwX2VycF91bml0X3N0cmF0ZWd5X2Nsb3NlKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gZXJwX2FjdGlvbi0+dW5pdDsKIAogCXJldHZhbCA9IHpmY3BfZnNmX2Nsb3NlX3VuaXQoZXJwX2FjdGlvbik7CiAJaWYgKHJldHZhbCA9PSAtRU5PTUVNKSB7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgInVfdXN0Y19ub21lbSIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmdW5pdC0+ZmNwX2x1biwKLQkJCSAgICBzaXplb2YgKGZjcF9sdW5fdCkpOwogCQlyZXR2YWwgPSBaRkNQX0VSUF9OT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCWVycF9hY3Rpb24tPnN0ZXAgPSBaRkNQX0VSUF9TVEVQX1VOSVRfQ0xPU0lORzsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAidV91c3RjX2N1ZiIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAmdW5pdC0+ZmNwX2x1biwKLQkJCSAgICBzaXplb2YgKGZjcF9sdW5fdCkpOwogCQkvKiBjb3VsZCBub3Qgc2VuZCAnY2xvc2UnLCBmYWlsICovCiAJCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKIAkJZ290byBvdXQ7CiAJfQotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgInVfdXN0Y19jdW9rIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNiwgJnVuaXQtPmZjcF9sdW4sIHNpemVvZiAoZmNwX2x1bl90KSk7CiAJcmV0dmFsID0gWkZDUF9FUlBfQ09OVElOVUVTOwogCiAgb3V0OgpAQCAtMjg3NSwyOCArMjcxNiwxOCBAQAogemZjcF9lcnBfdW5pdF9zdHJhdGVneV9vcGVuKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gZXJwX2FjdGlvbi0+dW5pdDsKIAogCXJldHZhbCA9IHpmY3BfZnNmX29wZW5fdW5pdChlcnBfYWN0aW9uKTsKIAlpZiAocmV0dmFsID09IC1FTk9NRU0pIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAidV91c3RvX25vbWVtIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZ1bml0LT5mY3BfbHVuLAotCQkJICAgIHNpemVvZiAoZmNwX2x1bl90KSk7CiAJCXJldHZhbCA9IFpGQ1BfRVJQX05PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAJZXJwX2FjdGlvbi0+c3RlcCA9IFpGQ1BfRVJQX1NURVBfVU5JVF9PUEVOSU5HOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJ1X3VzdG9fb3VmIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZ1bml0LT5mY3BfbHVuLAotCQkJICAgIHNpemVvZiAoZmNwX2x1bl90KSk7CiAJCS8qIGNvdWxkIG5vdCBzZW5kICdvcGVuJywgZmFpbCAqLwogCQlyZXR2YWwgPSBaRkNQX0VSUF9GQUlMRUQ7CiAJCWdvdG8gb3V0OwogCX0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJ1X3VzdG9fb3VvayIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICZ1bml0LT5mY3BfbHVuLCBzaXplb2YgKGZjcF9sdW5fdCkpOwogCXJldHZhbCA9IFpGQ1BfRVJQX0NPTlRJTlVFUzsKICBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTI5MTgsMTQgKzI3NDksMTIgQEAKICAqCiAgKiByZXR1cm5zOgogICovCi1zdGF0aWMgaW50Ci16ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShpbnQgYWN0aW9uLAotCQkJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCitzdGF0aWMgaW50IHpmY3BfZXJwX2FjdGlvbl9lbnF1ZXVlKGludCB3YW50LCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCisJCQkJICAgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwgdTggaWQsIHZvaWQgKnJlZikKIHsKLQlpbnQgcmV0dmFsID0gMTsKKwlpbnQgcmV0dmFsID0gMSwgbmVlZCA9IHdhbnQ7CiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbiA9IE5VTEw7Ci0JaW50IHN0cm9uZ2VyX2FjdGlvbiA9IDA7CiAJdTMyIHN0YXR1cyA9IDA7CiAKIAkvKgpAQCAtMjk0NCwxNyArMjc3MywxMSBAQAogCQkJICAgICAgJmFkYXB0ZXItPnN0YXR1cykpCiAJCXJldHVybiAtRUlPOwogCi0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgJmFjdGlvbiwgc2l6ZW9mIChpbnQpKTsKIAkvKiBjaGVjayB3aGV0aGVyIHdlIHJlYWxseSBuZWVkIHRoaXMgKi8KLQlzd2l0Y2ggKGFjdGlvbikgeworCXN3aXRjaCAod2FudCkgewogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9VTklUOgogCQlpZiAoYXRvbWljX3Rlc3RfbWFzawogCQkgICAgKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsICZ1bml0LT5zdGF0dXMpKSB7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICJ1X2FjdGVucV9kcnAiKTsKLQkJCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICZwb3J0LT53d3BuLAotCQkJCSAgICBzaXplb2YgKHd3bl90KSk7Ci0JCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAmdW5pdC0+ZmNwX2x1biwKLQkJCQkgICAgc2l6ZW9mIChmY3BfbHVuX3QpKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWlmICghYXRvbWljX3Rlc3RfbWFzawpAQCAtMjk2NCwxOCArMjc4NywxMyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKCFhdG9taWNfdGVzdF9tYXNrCi0JCSAgICAoWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJnBvcnQtPnN0YXR1cykpIHsKLQkJCXN0cm9uZ2VyX2FjdGlvbiA9IFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDsKLQkJCXVuaXQgPSBOVUxMOwotCQl9CisJCSAgICAoWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJnBvcnQtPnN0YXR1cykpCisJCQluZWVkID0gWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUOwogCQkvKiBmYWxsIHRocm91Z2ggISEhICovCiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKIAkJaWYgKGF0b21pY190ZXN0X21hc2sKIAkJICAgIChaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmcG9ydC0+c3RhdHVzKSkgewotCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAicF9hY3RlbnFfZHJwIik7Ci0JCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAmcG9ydC0+d3dwbiwKLQkJCQkgICAgc2l6ZW9mICh3d25fdCkpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICEhISAqLwpAQCAtMjk4NywxNSArMjgwNSw5IEBACiAJCQkgICAgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRCkgewogCQkJCVpGQ1BfTE9HX0lORk8oImRyb3BwZWQgZXJwIGFjdGlvbiAlaSAocG9ydCAiCiAJCQkJCSAgICAgICIweCUwMTZMeCwgYWN0aW9uIGluIHVzZTogJWkpXG4iLAotCQkJCQkgICAgICBhY3Rpb24sIHBvcnQtPnd3cG4sCisJCQkJCSAgICAgIHdhbnQsIHBvcnQtPnd3cG4sCiAJCQkJCSAgICAgIHBvcnQtPmVycF9hY3Rpb24uYWN0aW9uKTsKLQkJCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsCi0JCQkJCQkgInBmX2FjdGVucV9kcnAiKTsKLQkJCX0gZWxzZQotCQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwKLQkJCQkJCSAicGZfYWN0ZW5xX2RycGNwIik7Ci0JCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAmcG9ydC0+d3dwbiwKLQkJCQkgICAgc2l6ZW9mICh3d25fdCkpOworCQkJfQogCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKCFhdG9taWNfdGVzdF9tYXNrCkBAIC0zMDA1LDQ2ICsyODE3LDM2IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAoIWF0b21pY190ZXN0X21hc2sKLQkJICAgIChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmYWRhcHRlci0+c3RhdHVzKSkgewotCQkJc3Ryb25nZXJfYWN0aW9uID0gWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOwotCQkJcG9ydCA9IE5VTEw7Ci0JCX0KKwkJICAgIChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmYWRhcHRlci0+c3RhdHVzKSkKKwkJCW5lZWQgPSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0FEQVBURVI7CiAJCS8qIGZhbGwgdGhyb3VnaCAhISEgKi8KIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgogCQlpZiAoYXRvbWljX3Rlc3RfbWFzawogCQkgICAgKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsICZhZGFwdGVyLT5zdGF0dXMpKSB7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICJhX2FjdGVucV9kcnAiKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGVidWdfdGV4dF9leGNlcHRpb24oYWRhcHRlci0+ZXJwX2RiZiwgMSwgImFfYWN0ZW5xX2J1ZyIpOwotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAmYWN0aW9uLCBzaXplb2YgKGludCkpOwogCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogdW5rbm93biBlcnAgYWN0aW9uIHJlcXVlc3RlZCAiCiAJCQkJIm9uIGFkYXB0ZXIgJXMgKGFjdGlvbj0lZClcbiIsCi0JCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwgYWN0aW9uKTsKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLCB3YW50KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogY2hlY2sgd2hldGhlciB3ZSBuZWVkIHNvbWV0aGluZyBzdHJvbmdlciBmaXJzdCAqLwotCWlmIChzdHJvbmdlcl9hY3Rpb24pIHsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAiYV9hY3RlbnFfc3RyIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICZzdHJvbmdlcl9hY3Rpb24sCi0JCQkgICAgc2l6ZW9mIChpbnQpKTsKKwlpZiAobmVlZCkgewogCQlaRkNQX0xPR19ERUJVRygic3Ryb25nZXIgZXJwIGFjdGlvbiAlZCBuZWVkZWQgYmVmb3JlICIKIAkJCSAgICAgICAiZXJwIGFjdGlvbiAlZCBvbiBhZGFwdGVyICVzXG4iLAotCQkJICAgICAgIHN0cm9uZ2VyX2FjdGlvbiwgYWN0aW9uLAotCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQlhY3Rpb24gPSBzdHJvbmdlcl9hY3Rpb247CisJCQkgICAgICAgbmVlZCwgd2FudCwgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJfQogCiAJLyogbWFyayBhZGFwdGVyIHRvIGhhdmUgc29tZSBlcnJvciByZWNvdmVyeSBwZW5kaW5nICovCiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1BFTkRJTkcsICZhZGFwdGVyLT5zdGF0dXMpOwogCiAJLyogc2V0dXAgZXJyb3IgcmVjb3ZlcnkgYWN0aW9uICovCi0Jc3dpdGNoIChhY3Rpb24pIHsKKwlzd2l0Y2ggKG5lZWQpIHsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9VTklUOgogCQl6ZmNwX3VuaXRfZ2V0KHVuaXQpOwpAQCAtMzA3NywxMyArMjg3OSwxMSBAQAogCQlicmVhazsKIAl9CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICJhX2FjdGVucSIpOwotCiAJbWVtc2V0KGVycF9hY3Rpb24sIDAsIHNpemVvZiAoc3RydWN0IHpmY3BfZXJwX2FjdGlvbikpOwogCWVycF9hY3Rpb24tPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWVycF9hY3Rpb24tPnBvcnQgPSBwb3J0OwogCWVycF9hY3Rpb24tPnVuaXQgPSB1bml0OwotCWVycF9hY3Rpb24tPmFjdGlvbiA9IGFjdGlvbjsKKwllcnBfYWN0aW9uLT5hY3Rpb24gPSBuZWVkOwogCWVycF9hY3Rpb24tPnN0YXR1cyA9IHN0YXR1czsKIAogCSsrYWRhcHRlci0+ZXJwX3RvdGFsX2NvdW50OwpAQCAtMzA5MSw4ICsyODkxLDExIEBACiAJLyogZmluYWxseSBwdXQgaXQgaW50byAncmVhZHknIHF1ZXVlIGFuZCBraWNrIGVycCB0aHJlYWQgKi8KIAlsaXN0X2FkZF90YWlsKCZlcnBfYWN0aW9uLT5saXN0LCAmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpOwogCXVwKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKDEsIGFkYXB0ZXIsIDApOwogCXJldHZhbCA9IDA7CiAgb3V0OgorCXpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKGlkLCByZWYsIHdhbnQsIG5lZWQsIGVycF9hY3Rpb24sCisJCQkJICAgYWRhcHRlciwgcG9ydCwgdW5pdCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzEwOCw5ICsyOTExLDkgQEAKIAkJZXJwX2FjdGlvbi0+c3RhdHVzICY9IH5aRkNQX1NUQVRVU19FUlBfTE9XTUVNOwogCX0KIAotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgImFfYWN0ZGVxIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgJmVycF9hY3Rpb24tPmFjdGlvbiwgc2l6ZW9mIChpbnQpKTsKIAlsaXN0X2RlbCgmZXJwX2FjdGlvbi0+bGlzdCk7CisJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigxNDQsIGVycF9hY3Rpb24pOworCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5hY3Rpb24pIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKIAkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSwKQEAgLTMyMTUsNyArMzAxOCw2IEBACiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgImFfYWN0YWIiKTsKIAlpZiAoYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmYWRhcHRlci0+c3RhdHVzKSkKIAkJemZjcF9lcnBfYWN0aW9uX2Rpc21pc3MoJmFkYXB0ZXItPmVycF9hY3Rpb24pOwogCWVsc2UKQEAgLTMyMjYsMTAgKzMwMjgsNyBAQAogc3RhdGljIHZvaWQgemZjcF9lcnBfYWN0aW9uX2Rpc21pc3NfcG9ydChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJwX2FjdGFiIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNSwgJnBvcnQtPnd3cG4sIHNpemVvZiAod3duX3QpKTsKIAlpZiAoYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmcG9ydC0+c3RhdHVzKSkKIAkJemZjcF9lcnBfYWN0aW9uX2Rpc21pc3MoJnBvcnQtPmVycF9hY3Rpb24pOwogCWVsc2UKQEAgLTMyMzksOTIgKzMwMzgsNjAgQEAKIAogc3RhdGljIHZvaWQgemZjcF9lcnBfYWN0aW9uX2Rpc21pc3NfdW5pdChzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwotCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAidV9hY3RhYiIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZ1bml0LT5mY3BfbHVuLCBzaXplb2YgKGZjcF9sdW5fdCkpOwogCWlmIChhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsICZ1bml0LT5zdGF0dXMpKQogCQl6ZmNwX2VycF9hY3Rpb25fZGlzbWlzcygmdW5pdC0+ZXJwX2FjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl90b19ydW5uaW5nKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJhX3RvcnUiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwogCWxpc3RfbW92ZSgmZXJwX2FjdGlvbi0+bGlzdCwgJmVycF9hY3Rpb24tPmFkYXB0ZXItPmVycF9ydW5uaW5nX2hlYWQpOworCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oMTQ1LCBlcnBfYWN0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfYWN0aW9uX3RvX3JlYWR5KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJhX3RvcmUiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA2LCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwogCWxpc3RfbW92ZSgmZXJwX2FjdGlvbi0+bGlzdCwgJmVycF9hY3Rpb24tPmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKTsKKwl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKDE0NiwgZXJwX2FjdGlvbik7CiB9CiAKLXZvaWQKLXpmY3BfZXJwX3BvcnRfYm94ZWQoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3ZvaWQgemZjcF9lcnBfcG9ydF9ib3hlZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCB1OCBpZCwgdm9pZCAqcmVmKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJwX2FjY2Vzc19ib3hlZCIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZwb3J0LT53d3BuLCBzaXplb2Yod3duX3QpKTsKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7Ci0JemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHBvcnQsCi0JCQlaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVELAotCQkJWkZDUF9TRVQpOworCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCBpZCwgcmVmLAorCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVELCBaRkNQX1NFVCk7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7Ci0JemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOworCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBpZCwgcmVmKTsKIH0KIAotdm9pZAotemZjcF9lcnBfdW5pdF9ib3hlZChzdHJ1Y3QgemZjcF91bml0ICp1bml0KQordm9pZCB6ZmNwX2VycF91bml0X2JveGVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IGlkLCB2b2lkICpyZWYpCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7Ci0KLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJ1X2FjY2Vzc19ib3hlZCIpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICZ1bml0LT5mY3BfbHVuLCBzaXplb2YoZmNwX2x1bl90KSk7Ci0JemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsCi0JCQlaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVELAotCQkJWkZDUF9TRVQpOwotCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKTsKKwl6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXModW5pdCwgaWQsIHJlZiwKKwkJCQkgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwgWkZDUF9TRVQpOworCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBpZCwgcmVmKTsKIH0KIAotdm9pZAotemZjcF9lcnBfcG9ydF9hY2Nlc3NfZGVuaWVkKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCit2b2lkIHpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCB1OCBpZCwgdm9pZCAqcmVmKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJwX2FjY2Vzc19kZW5pZWQiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmcG9ydC0+d3dwbiwgc2l6ZW9mKHd3bl90KSk7CiAJcmVhZF9sb2NrX2lycXNhdmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwotCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LAotCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQgfAotCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQsCi0JCQlaRkNQX1NFVCk7CisJemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHBvcnQsIGlkLCByZWYsCisJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEIHwKKwkJCQkgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19ERU5JRUQsIFpGQ1BfU0VUKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZAotemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCit2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF91bml0ICp1bml0LCB1OCBpZCwgdm9pZCAqcmVmKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwotCi0JZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAidV9hY2Nlc3NfZGVuaWVkIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJnVuaXQtPmZjcF9sdW4sIHNpemVvZihmY3BfbHVuX3QpKTsKLQl6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXModW5pdCwKLQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEIHwKLQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVELAotCQkJWkZDUF9TRVQpOworCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCBpZCwgcmVmLAorCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCB8CisJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVELCBaRkNQX1NFVCk7CiB9CiAKLXZvaWQKLXpmY3BfZXJwX2FkYXB0ZXJfYWNjZXNzX2NoYW5nZWQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1OCBpZCwKKwkJCQkgICAgIHZvaWQgKnJlZikKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMzMyLDU0ICszMDk5LDQzIEBACiAJaWYgKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpCiAJCXJldHVybjsKIAotCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgImFfYWNjZXNzX3JlY292ZXIiKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLCA4KTsKLQogCXJlYWRfbG9ja19pcnFzYXZlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAlpZiAoYWRhcHRlci0+bmFtZXNlcnZlcl9wb3J0KQotCQl6ZmNwX2VycF9wb3J0X2FjY2Vzc19jaGFuZ2VkKGFkYXB0ZXItPm5hbWVzZXJ2ZXJfcG9ydCk7CisJCXpmY3BfZXJwX3BvcnRfYWNjZXNzX2NoYW5nZWQoYWRhcHRlci0+bmFtZXNlcnZlcl9wb3J0LCBpZCwgcmVmKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkKIAkJaWYgKHBvcnQgIT0gYWRhcHRlci0+bmFtZXNlcnZlcl9wb3J0KQotCQkJemZjcF9lcnBfcG9ydF9hY2Nlc3NfY2hhbmdlZChwb3J0KTsKKwkJCXpmY3BfZXJwX3BvcnRfYWNjZXNzX2NoYW5nZWQocG9ydCwgaWQsIHJlZik7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQKLXpmY3BfZXJwX3BvcnRfYWNjZXNzX2NoYW5nZWQoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3ZvaWQgemZjcF9lcnBfcG9ydF9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCB1OCBpZCwgdm9pZCAqcmVmKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJwX2FjY2Vzc19yZWNvdmVyIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJnBvcnQtPnd3cG4sIHNpemVvZih3d25fdCkpOwotCiAJaWYgKCFhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfREVOSUVELAogCQkJICAgICAgJnBvcnQtPnN0YXR1cykgJiYKIAkgICAgIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCwKIAkJCSAgICAgICZwb3J0LT5zdGF0dXMpKSB7CiAJCWlmICghYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19QT1JUX1dLQSwgJnBvcnQtPnN0YXR1cykpCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVuaXQsICZwb3J0LT51bml0X2xpc3RfaGVhZCwgbGlzdCkKLQkJCQl6ZmNwX2VycF91bml0X2FjY2Vzc19jaGFuZ2VkKHVuaXQpOworCQkJCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2NoYW5nZWQodW5pdCwgaWQsIHJlZik7CiAJCXJldHVybjsKIAl9CiAKIAlaRkNQX0xPR19OT1JNQUwoInJlb3BlbiBvZiBwb3J0IDB4JTAxNkx4IG9uIGFkYXB0ZXIgJXMgIgogCQkJIihkdWUgdG8gQUNUIHVwZGF0ZSlcbiIsCiAJCQlwb3J0LT53d3BuLCB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQlpZiAoemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpICE9IDApCisJaWYgKHpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBpZCwgcmVmKSkKIAkJWkZDUF9MT0dfTk9STUFMKCJmYWlsZWQgcmVvcGVuIG9mIHBvcnQiCiAJCQkJIihhZGFwdGVyICVzLCB3d3BuPTB4JTAxNkx4KVxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLCBwb3J0LT53d3BuKTsKIH0KIAotdm9pZAotemZjcF9lcnBfdW5pdF9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF91bml0ICp1bml0KQordm9pZCB6ZmNwX2VycF91bml0X2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsIHU4IGlkLCB2b2lkICpyZWYpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CiAKLQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJ1X2FjY2Vzc19yZWNvdmVyIik7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJnVuaXQtPmZjcF9sdW4sIHNpemVvZihmY3BfbHVuX3QpKTsKLQogCWlmICghYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0RFTklFRCwKIAkJCSAgICAgICZ1bml0LT5zdGF0dXMpICYmCiAJICAgICFhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfQk9YRUQsCkBAIC0zMzkwLDcgKzMxNDYsNyBAQAogCQkJIiBvbiBhZGFwdGVyICVzIChkdWUgdG8gQUNUIHVwZGF0ZSlcbiIsCiAJCQl1bml0LT5mY3BfbHVuLCB1bml0LT5wb3J0LT53d3BuLAogCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JaWYgKHpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKSAhPSAwKQorCWlmICh6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgaWQsIHJlZikpCiAJCVpGQ1BfTE9HX05PUk1BTCgiZmFpbGVkIHJlb3BlbiBvZiB1bml0IChhZGFwdGVyICVzLCAiCiAJCQkJInd3cG49MHglMDE2THgsIGZjcF9sdW49MHglMDE2THgpXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAppbmRleCAwNmIxMDc5Li42YWJmMTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKQEAgLTEzMSwyMiArMTMxLDI1IEBACiBleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHpmY3BfdHJhbnNwb3J0X2Z1bmN0aW9uczsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVSUCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdTMyLCBpbnQpOwotZXh0ZXJuIGludCAgemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oc3RydWN0IHpmY3BfYWRhcHRlciAqLCBpbnQpOwotZXh0ZXJuIGludCAgemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCk7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdTgsIHZvaWQgKiwKKwkJCQkJICAgdTMyLCBpbnQpOworZXh0ZXJuIGludCAgemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oc3RydWN0IHpmY3BfYWRhcHRlciAqLCBpbnQsIHU4LCB2b2lkICopOworZXh0ZXJuIGludCAgemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCwgdTgsIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2ZhaWxlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHU4LCB2b2lkICopOwogCi1leHRlcm4gdm9pZCB6ZmNwX2VycF9tb2RpZnlfcG9ydF9zdGF0dXMoc3RydWN0IHpmY3BfcG9ydCAqLCB1MzIsIGludCk7Ci1leHRlcm4gaW50ICB6ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCk7Ci1leHRlcm4gaW50ICB6ZmNwX2VycF9wb3J0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50KTsKLWV4dGVybiBpbnQgIHpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCk7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2ZhaWxlZChzdHJ1Y3QgemZjcF9wb3J0ICopOwotZXh0ZXJuIGludCAgemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhzdHJ1Y3QgemZjcF9wb3J0ICosIHU4LCB2b2lkICosIHUzMiwKKwkJCQkJaW50KTsKK2V4dGVybiBpbnQgIHpmY3BfZXJwX3BvcnRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50LCB1OCwgdm9pZCAqKTsKK2V4dGVybiBpbnQgIHpmY3BfZXJwX3BvcnRfc2h1dGRvd24oc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIHU4LCB2b2lkICopOworZXh0ZXJuIGludCAgemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50LCB1OCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfZmFpbGVkKHN0cnVjdCB6ZmNwX3BvcnQgKiwgdTgsIHZvaWQgKik7CitleHRlcm4gaW50ICB6ZmNwX2VycF9wb3J0X3Jlb3Blbl9hbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqLCBpbnQsIHU4LCB2b2lkICopOwogCi1leHRlcm4gdm9pZCB6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXMoc3RydWN0IHpmY3BfdW5pdCAqLCB1MzIsIGludCk7Ci1leHRlcm4gaW50ICB6ZmNwX2VycF91bml0X3Jlb3BlbihzdHJ1Y3QgemZjcF91bml0ICosIGludCk7Ci1leHRlcm4gaW50ICB6ZmNwX2VycF91bml0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3VuaXQgKiwgaW50KTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfZmFpbGVkKHN0cnVjdCB6ZmNwX3VuaXQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9tb2RpZnlfdW5pdF9zdGF0dXMoc3RydWN0IHpmY3BfdW5pdCAqLCB1OCwgdm9pZCAqLCB1MzIsCisJCQkJCWludCk7CitleHRlcm4gaW50ICB6ZmNwX2VycF91bml0X3Jlb3BlbihzdHJ1Y3QgemZjcF91bml0ICosIGludCwgdTgsIHZvaWQgKik7CitleHRlcm4gaW50ICB6ZmNwX2VycF91bml0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3VuaXQgKiwgaW50LCB1OCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfZmFpbGVkKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTgsIHZvaWQgKik7CiAKIGV4dGVybiBpbnQgIHpmY3BfZXJwX3RocmVhZF9zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIGludCAgemZjcF9lcnBfdGhyZWFkX2tpbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKQEAgLTE1NSwxNSArMTU4LDI1IEBACiAKIGV4dGVybiBpbnQgIHpmY3BfdGVzdF9saW5rKHN0cnVjdCB6ZmNwX3BvcnQgKik7CiAKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfYm94ZWQoc3RydWN0IHpmY3BfcG9ydCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfYm94ZWQoc3RydWN0IHpmY3BfdW5pdCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF9wb3J0ICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHN0cnVjdCB6ZmNwX3VuaXQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX3BvcnQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX3VuaXQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2JveGVkKHN0cnVjdCB6ZmNwX3BvcnQgKiwgdTggaWQsIHZvaWQgKnJlZik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF91bml0X2JveGVkKHN0cnVjdCB6ZmNwX3VuaXQgKiwgdTggaWQsIHZvaWQgKnJlZik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQoc3RydWN0IHpmY3BfcG9ydCAqLCB1OCBpZCwgdm9pZCAqcmVmKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZChzdHJ1Y3QgemZjcF91bml0ICosIHU4IGlkLCB2b2lkICpyZWYpOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHU4LCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9wb3J0ICosIHU4LCB2b2lkICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfdW5pdF9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF91bml0ICosIHU4LCB2b2lkICopOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQVVYICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKHU4IGlkLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgIGludCBsb2NrKTsKK2V4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKHU4IGlkLCB2b2lkICpyZWYsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydCh1OCBpZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KTsKK2V4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF91bml0KHU4IGlkLCB2b2lkICpyZWYsIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpOworZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIodTggaWQsIHZvaWQgKnJlZiwgdTggd2FudCwgdTggbmVlZCwKKwkJCQkgICAgICAgdm9pZCAqYWN0aW9uLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCisJCQkJICAgICAgIHN0cnVjdCB6ZmNwX3BvcnQgKiwgc3RydWN0IHpmY3BfdW5pdCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24odTggaWQsIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CisKIGV4dGVybiB2b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woY29uc3QgY2hhciAqLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCiAJCQkJCSBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDBkZmYwNTguLjdjM2YwMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtNDYsNyArNDYsNyBAQAogc3RhdGljIGludCB6ZmNwX2ZzZl9wcm90c3RhdHVzX2V2YWwoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIHN0YXRpYyBpbnQgemZjcF9mc2ZfZnNmc3RhdHVzX2V2YWwoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIHN0YXRpYyBpbnQgemZjcF9mc2ZfZnNmc3RhdHVzX3F1YWxfZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotc3RhdGljIHZvaWQgemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChzdHJ1Y3QgemZjcF9hZGFwdGVyICosCitzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKiwgdTgsCiAJc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyAqKTsKIHN0YXRpYyBpbnQgemZjcF9mc2ZfcmVxX2Rpc3BhdGNoKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiAKQEAgLTI4NCwzNyArMjg0LDYgQEAKIAkJZ290byBza2lwX3Byb3RzdGF0dXM7CiAJfQogCi0JLyogbG9nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgRlNGIChpZiBhbnkpICovCi0JaWYgKGxpa2VseShxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCkpIHsKLQkJLyogZG8gbm90IHRydXN0IHRoZW0gOy0pICovCi0JCWlmICh1bmxpa2VseShxdGNiLT5oZWFkZXIubG9nX3N0YXJ0ID4KLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYikpKSB7Ci0JCQlaRkNQX0xPR19OT1JNQUwKLQkJCSAgICAoImJ1ZzogVUxQIChGU0YgbG9nZ2luZykgbG9nIGRhdGEgc3RhcnRzICIKLQkJCSAgICAgImJleW9uZCBlbmQgb2YgcGFja2V0IGhlYWRlci4gSWdub3JlZC4gIgotCQkJICAgICAiKHN0YXJ0PSVpLCBzaXplPSVsaSlcbiIsCi0JCQkgICAgIHF0Y2ItPmhlYWRlci5sb2dfc3RhcnQsCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKTsKLQkJCWdvdG8gZm9yZ2V0X2xvZzsKLQkJfQotCQlpZiAodW5saWtlbHkoKHNpemVfdCkgKHF0Y2ItPmhlYWRlci5sb2dfc3RhcnQgKwotCQkJCSAgICAgICBxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCkgPgotCQkJICAgICBzaXplb2Yoc3RydWN0IGZzZl9xdGNiKSkpIHsKLQkJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBVTFAgKEZTRiBsb2dnaW5nKSBsb2cgZGF0YSBlbmRzICIKLQkJCQkJImJleW9uZCBlbmQgb2YgcGFja2V0IGhlYWRlci4gSWdub3JlZC4gIgotCQkJCQkiKHN0YXJ0PSVpLCBsZW5ndGg9JWksIHNpemU9JWxpKVxuIiwKLQkJCQkJcXRjYi0+aGVhZGVyLmxvZ19zdGFydCwKLQkJCQkJcXRjYi0+aGVhZGVyLmxvZ19sZW5ndGgsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKTsKLQkJCWdvdG8gZm9yZ2V0X2xvZzsKLQkJfQotCQlaRkNQX0xPR19UUkFDRSgiVUxQIGxvZyBkYXRhOiBcbiIpOwotCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX1RSQUNFLAotCQkJICAgICAgKGNoYXIgKikgcXRjYiArIHF0Y2ItPmhlYWRlci5sb2dfc3RhcnQsCi0JCQkgICAgICBxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCk7Ci0JfQotIGZvcmdldF9sb2c6Ci0KIAkvKiBldmFsdWF0ZSBGU0YgUHJvdG9jb2wgU3RhdHVzICovCiAJc3dpdGNoIChxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMpIHsKIApAQCAtMzI5LDcgKzI5OCw3IEBACiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKIAkJCQlwcm90X3N0YXR1c19xdWFsLT52ZXJzaW9uX2Vycm9yLmZzZl92ZXJzaW9uLAogCQkJCVpGQ1BfUVRDQl9WRVJTSU9OKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAxMTcsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzQwLDcgKzMwOSw3IEBACiAJCQkJcXRjYi0+cHJlZml4LnJlcV9zZXFfbm8sCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKIAkJCQlwcm90X3N0YXR1c19xdWFsLT5zZXF1ZW5jZV9lcnJvci5leHBfcmVxX3NlcV9ubyk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCA5OCwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwpAQCAtMzUxLDcgKzMyMCw3IEBACiAJCQkJInRoYXQgdXNlZCBvbiBhZGFwdGVyICVzLiAiCiAJCQkJIlN0b3BwaW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoaXMgYWRhcHRlci5cbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTE4LCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM2OCwxNCArMzM3LDE1IEBACiAJCQkJKih1bnNpZ25lZCBsb25nIGxvbmcqKQogCQkJCSgmcXRjYi0+Ym90dG9tLnN1cHBvcnQucmVxX2hhbmRsZSksCiAJCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDc4LCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9QUk9UX0xJTktfRE9XTjoKLQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChhZGFwdGVyLAorCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKGZzZl9yZXEsIDM3LAogCQkJCQkgICAgICZwcm90X3N0YXR1c19xdWFsLT5saW5rX2Rvd25faW5mbyk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOworCQkvKiBGSVhNRTogcmVvcGVuaW5nIGFkYXB0ZXIgbm93PyBiZXR0ZXIgd2FpdCBmb3IgbGluayB1cCAqLworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCA3OSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zODUsMTIgKzM1NSwxMyBAQAogCQkJICAgICAgIlJlLXN0YXJ0aW5nIG9wZXJhdGlvbnMgb24gdGhpcyBhZGFwdGVyLlxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCQkvKiBBbGwgcG9ydHMgc2hvdWxkIGJlIG1hcmtlZCBhcyByZWFkeSB0byBydW4gYWdhaW4gKi8KLQkJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsCisJCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAyOCwgTlVMTCwKIAkJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLAogCQkJCQkgICAgICAgWkZDUF9TRVQpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLAogCQkJCQlaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VECi0JCQkJCXwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOworCQkJCQl8IFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAorCQkJCQk5OSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC00MDAsNyArMzcxLDcgQEAKIAkJCQkiUmVzdGFydGluZyBhbGwgb3BlcmF0aW9ucyBvbiB0aGlzICIKIAkJCQkiYWRhcHRlci5cbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAxMDAsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKQEAgLTQxMyw3ICszODQsNyBAQAogCQkJCSIoZGVidWcgaW5mbyAweCV4KS5cbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKIAkJCQlxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDExOSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJfQogCkBAIC00NTIsNyArNDIzLDcgQEAKIAkJCQkiKGRlYnVnIGluZm8gMHgleCkuXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoZnNmX3JlcS0+YWRhcHRlciksCiAJCQkJZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9jb21tYW5kKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihmc2ZfcmVxLT5hZGFwdGVyLCAwKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihmc2ZfcmVxLT5hZGFwdGVyLCAwLCAxMjAsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtNTA2LDcgKzQ3Nyw3IEBACiAJCQkJInByb2JsZW0gb24gdGhlIGFkYXB0ZXIgJXMgIgogCQkJCSJTdG9wcGluZyBhbGwgb3BlcmF0aW9ucyBvbiB0aGlzIGFkYXB0ZXIuICIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihmc2ZfcmVxLT5hZGFwdGVyKSk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oZnNmX3JlcS0+YWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oZnNmX3JlcS0+YWRhcHRlciwgMCwgMTIxLCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1FfVUxQX1BST0dSQU1NSU5HX0VSUk9SOgpAQCAtNTM3LDkgKzUwOCwxMSBAQAogICogemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbCAtIGV2YWx1YXRlIGxpbmsgZG93biBpbmZvcm1hdGlvbiBibG9jawogICovCiBzdGF0aWMgdm9pZAotemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAoremZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLCB1OCBpZCwKIAkJCSAgICAgc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyAqbGlua19kb3duKQogeworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOworCiAJaWYgKGF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCwKIAkgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNjMwLDcgKzYwMyw3IEBACiAJCQkJbGlua19kb3duLT52ZW5kb3Jfc3BlY2lmaWNfY29kZSk7CiAKICBvdXQ6Ci0JemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlcik7CisJemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoYWRhcHRlciwgaWQsIGZzZl9yZXEpOwogfQogCiAvKgpAQCAtODI0LDE5ICs3OTcsMTQgQEAKIAlzd2l0Y2ggKHN0YXR1c19idWZmZXItPnN0YXR1c19zdWJ0eXBlKSB7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfQ0xPU0VfUEhZU19QT1JUOgotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJ1bnNvbF9wY19waHlzOiIpOwotCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwKTsKKwkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgMTAxLCBmc2ZfcmVxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfRVJST1JfUE9SVDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAidW5zb2xfcGNfZXJyOiIpOwotCQl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDApOworCQl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsIDEyMiwgZnNmX3JlcSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAwLCAidW5zb2xfdW5rX3N1YjoiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJnN0YXR1c19idWZmZXItPnN0YXR1c19zdWJ0eXBlLCBzaXplb2YgKHUzMikpOwogCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogVW5kZWZpbmVkIHN0YXR1cyBzdWJ0eXBlIHJlY2VpdmVkICIKIAkJCQkiZm9yIGEgcmVvcGVuIGluZGljYXRpb24gb24gcG9ydCB3aXRoICIKIAkJCQkiZF9pZCAweCUwNnggb24gdGhlIGFkYXB0ZXIgJXMuICIKQEAgLTkyOCw3ICs4OTYsNyBAQAogCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfTk9fUEhZU0lDQUxfTElOSzoKIAkJCVpGQ1BfTE9HX0lORk8oIlBoeXNpY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duXG4iLAogCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChhZGFwdGVyLAorCQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChmc2ZfcmVxLCAzOCwKIAkJCQkoc3RydWN0IGZzZl9saW5rX2Rvd25faW5mbyAqKQogCQkJCSZzdGF0dXNfYnVmZmVyLT5wYXlsb2FkKTsKIAkJCWJyZWFrOwpAQCAtOTM2LDcgKzkwNCw3IEBACiAJCQlaRkNQX0xPR19JTkZPKCJMb2NhbCBsaW5rIHRvIGFkYXB0ZXIgJXMgaXMgZG93biAiCiAJCQkJICAgICAgImR1ZSB0byBmYWlsZWQgRkRJU0MgbG9naW5cbiIsCiAJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKGFkYXB0ZXIsCisJCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKGZzZl9yZXEsIDM5LAogCQkJCShzdHJ1Y3QgZnNmX2xpbmtfZG93bl9pbmZvICopCiAJCQkJJnN0YXR1c19idWZmZXItPnBheWxvYWQpOwogCQkJYnJlYWs7CkBAIC05NDQsMTMgKzkxMiwxMyBAQAogCQkJWkZDUF9MT0dfSU5GTygiTG9jYWwgbGluayB0byBhZGFwdGVyICVzIGlzIGRvd24gIgogCQkJCSAgICAgICJkdWUgdG8gZmlybXdhcmUgdXBkYXRlIG9uIGFkYXB0ZXJcbiIsCiAJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCQl6ZmNwX2ZzZl9saW5rX2Rvd25faW5mb19ldmFsKGFkYXB0ZXIsIE5VTEwpOworCQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChmc2ZfcmVxLCA0MCwgTlVMTCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVpGQ1BfTE9HX0lORk8oIkxvY2FsIGxpbmsgdG8gYWRhcHRlciAlcyBpcyBkb3duICIKIAkJCQkgICAgICAiZHVlIHRvIHVua25vd24gcmVhc29uXG4iLAogCQkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChhZGFwdGVyLCBOVUxMKTsKKwkJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoZnNmX3JlcSwgNDEsIE5VTEwpOwogCQl9OwogCQlicmVhazsKIApAQCAtOTU5LDEyICs5MjcsMTMgQEAKIAkJCQkiUmVzdGFydGluZyBvcGVyYXRpb25zIG9uIHRoaXMgYWRhcHRlclxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJLyogQWxsIHBvcnRzIHNob3VsZCBiZSBtYXJrZWQgYXMgcmVhZHkgdG8gcnVuIGFnYWluICovCi0JCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLAorCQl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgMzAsIE5VTEwsCiAJCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywKIAkJCQkJICAgICAgIFpGQ1BfU0VUKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwKIAkJCQkJWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRAotCQkJCQl8IFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKTsKKwkJCQkJfCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKKwkJCQkJMTAyLCBmc2ZfcmVxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9OT1RJRklDQVRJT05fTE9TVDoKQEAgLTk5OCwxMyArOTY3LDEzIEBACiAKIAkJaWYgKHN0YXR1c19idWZmZXItPnN0YXR1c19zdWJ0eXBlICYKIAkJICAgIEZTRl9TVEFUVVNfUkVBRF9TVUJfQUNUX1VQREFURUQpCi0JCQl6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKGFkYXB0ZXIpOworCQkJemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChhZGFwdGVyLCAxMzUsIGZzZl9yZXEpOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0NGRENfVVBEQVRFRDoKIAkJWkZDUF9MT0dfTk9STUFMKCJDRkRDIGhhcyBiZWVuIHVwZGF0ZWQgb24gdGhlIGFkYXB0ZXIgJXNcbiIsCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChhZGFwdGVyKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChhZGFwdGVyLCAxMzYsIGZzZl9yZXEpOwogCQlicmVhazsKIAogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0NGRENfSEFSREVORUQ6CkBAIC0xMDI1LDcgKzk5NCw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfRkVBVFVSRV9VUERBVEVfQUxFUlQ6Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMiwgInVuc29sX2ZlYXR1cmVzOiIpOwogCQlaRkNQX0xPR19JTkZPKCJMaXN0IG9mIHN1cHBvcnRlZCBmZWF0dXJlcyBvbiBhZGFwdGVyICVzIGhhcyAiCiAJCQkgICAgICAiYmVlbiBjaGFuZ2VkIGZyb20gMHglMDhYIHRvIDB4JTA4WFxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCkBAIC0xMDczLDcgKzEwNDEsNyBAQAogCQkJWkZDUF9MT0dfSU5GTygicmVzdGFydCBhZGFwdGVyICVzIGR1ZSB0byBzdGF0dXMgcmVhZCAiCiAJCQkJICAgICAgImJ1ZmZlciBzaG9ydGFnZVxuIiwKIAkJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOworCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgMTAzLCBmc2ZfcmVxKTsKIAkJfQogCX0KICBvdXQ6CkBAIC0xMTc0LDggKzExNDIsNiBAQAogCiAJY2FzZSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEOgogCQlpZiAoZnNmX3N0YXRfcXVhbC0+d29yZFswXSAhPSBmc2Zfc3RhdF9xdWFsLT53b3JkWzFdKSB7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KG5ld19mc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAzLAotCQkJCQkgImZzZl9zX3BoYW5kX252MCIpOwogCQkJLyoKIAkJCSAqIEluIHRoaXMgY2FzZSBhIGNvbW1hbmQgdGhhdCB3YXMgc2VudCBwcmlvciB0byBhIHBvcnQKIAkJCSAqIHJlb3BlbiB3YXMgYWJvcnRlZCAoaGFuZGxlcyBhcmUgZGlmZmVyZW50KS4gVGhpcyBpcwpAQCAtMTE5NCwxNyArMTE2MCwxNCBAQAogCQkJCSAgICAgIGZzZl9zdGF0dXNfcXVhbCwKIAkJCQkgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwogCQkJLyogTGV0J3MgaG9wZSB0aGlzIHNvcnRzIG91dCB0aGUgbWVzcyAqLwotCQkJZGVidWdfdGV4dF9ldmVudChuZXdfZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkJICJmc2Zfc19waGFuZF9udjEiKTsKLQkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOworCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTA0LAorCQkJCQkJbmV3X2ZzZl9yZXEpOwogCQkJbmV3X2ZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEZTRl9MVU5fSEFORExFX05PVF9WQUxJRDoKIAkJaWYgKGZzZl9zdGF0X3F1YWwtPndvcmRbMF0gIT0gZnNmX3N0YXRfcXVhbC0+d29yZFsxXSkgewotCQkJZGVidWdfdGV4dF9ldmVudChuZXdfZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMywKLQkJCQkJICJmc2Zfc19saGFuZF9udjAiKTsKIAkJCS8qCiAJCQkgKiBJbiB0aGlzIGNhc2UgYSBjb21tYW5kIHRoYXQgd2FzIHNlbnQgcHJpb3IgdG8gYSB1bml0CiAJCQkgKiByZW9wZW4gd2FzIGFib3J0ZWQgKGhhbmRsZXMgYXJlIGRpZmZlcmVudCkuCkBAIC0xMjI2LDE3ICsxMTg5LDEzIEBACiAJCQkJICAgICAgZnNmX3N0YXR1c19xdWFsLAogCQkJCSAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7CiAJCQkvKiBMZXQncyBob3BlIHRoaXMgc29ydHMgb3V0IHRoZSBtZXNzICovCi0JCQlkZWJ1Z190ZXh0X2V2ZW50KG5ld19mc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCQkgImZzZl9zX2xoYW5kX252MSIpOwotCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCk7CisJCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih1bml0LT5wb3J0LCAwLCAxMDUsIG5ld19mc2ZfcmVxKTsKIAkJCW5ld19mc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfRkNQX0NPTU1BTkRfRE9FU19OT1RfRVhJU1Q6CiAJCXJldHZhbCA9IDA7Ci0JCWRlYnVnX3RleHRfZXZlbnQobmV3X2ZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDMsCi0JCQkJICJmc2Zfc19ub19leGlzdCIpOwogCQluZXdfZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVE5PVE5FRURFRDsKIAkJYnJlYWs7CiAKQEAgLTEyNDQsOSArMTIwMyw3IEBACiAJCVpGQ1BfTE9HX0lORk8oIlJlbW90ZSBwb3J0IDB4JTAxNkx4IG9uIGFkYXB0ZXIgJXMgbmVlZHMgdG8gIgogCQkJICAgICAgImJlIHJlb3BlbmVkXG4iLCB1bml0LT5wb3J0LT53d3BuLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfdW5pdCh1bml0KSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQobmV3X2ZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDIsCi0JCQkJICJmc2Zfc19wYm94ZWQiKTsKLQkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0KTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCA0NywgbmV3X2ZzZl9yZXEpOwogCQluZXdfZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUgogCQkgICAgfCBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWJyZWFrOwpAQCAtMTI1Nyw4ICsxMjE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBiZSByZW9wZW5lZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQtPmZjcF9sdW4sIHVuaXQtPnBvcnQtPnd3cG4sCiAgICAgICAgICAgICAgICAgICAgICAgICB6ZmNwX2dldF9idXNpZF9ieV91bml0KHVuaXQpKTsKLSAgICAgICAgICAgICAgICBkZWJ1Z190ZXh0X2V2ZW50KG5ld19mc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLCAiZnNmX3NfbGJveGVkIik7Ci0JCXpmY3BfZXJwX3VuaXRfYm94ZWQodW5pdCk7CisJCXpmY3BfZXJwX3VuaXRfYm94ZWQodW5pdCwgNDgsIG5ld19mc2ZfcmVxKTsKICAgICAgICAgICAgICAgICBuZXdfZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUgogICAgICAgICAgICAgICAgICAgICAgICAgfCBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjY2LDI2ICsxMjIyLDE3IEBACiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlzd2l0Y2ggKG5ld19mc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KG5ld19mc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCQkgImZzZl9zcV9sdGVzdCIpOwogCQkJemZjcF90ZXN0X2xpbmsodW5pdC0+cG9ydCk7CiAJCQluZXdfZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKIAkJCS8qIFNDU0kgc3RhY2sgd2lsbCBlc2NhbGF0ZSAqLwotCQkJZGVidWdfdGV4dF9ldmVudChuZXdfZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkJICJmc2Zfc3FfdWxwIik7CiAJCQluZXdfZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJWkZDUF9MT0dfTk9STUFMCiAJCQkgICAgKCJidWc6IFdyb25nIHN0YXR1cyBxdWFsaWZpZXIgMHgleCBhcnJpdmVkLlxuIiwKIAkJCSAgICAgbmV3X2ZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSk7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KG5ld19mc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCQkgImZzZl9zcV9pbnZhbDoiKTsKLQkJCWRlYnVnX2V4Y2VwdGlvbihuZXdfZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkJJm5ld19mc2ZfcmVxLT5xdGNiLT5oZWFkZXIuCi0JCQkJCWZzZl9zdGF0dXNfcXVhbC53b3JkWzBdLCBzaXplb2YgKHUzMikpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMjk5LDExICsxMjQ2LDYgQEAKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IEFuIHVua25vd24gRlNGIFN0YXR1cyB3YXMgcHJlc2VudGVkICIKIAkJCQkiKGRlYnVnIGluZm8gMHgleClcbiIsCiAJCQkJbmV3X2ZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzKTsKLQkJZGVidWdfdGV4dF9ldmVudChuZXdfZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkgImZzZl9zX2ludmFsOiIpOwotCQlkZWJ1Z19leGNlcHRpb24obmV3X2ZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJm5ld19mc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cywKLQkJCQlzaXplb2YgKHUzMikpOwogCQlicmVhazsKIAl9CiAgc2tpcF9mc2ZzdGF0dXM6CkBAIC0xNTA2LDggKzE0NDgsNyBAQAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSwKIAkJCSAgICAgIFpGQ1BfRkNfU0VSVklDRV9DTEFTU19ERUZBVUxUKTsKIAkJLyogc3RvcCBvcGVyYXRpb24gZm9yIHRoaXMgYWRhcHRlciAqLwotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihhZGFwdGVyLT5lcnBfZGJmLCAwLCAiZnNmX3NfY2xhc3NfbnN1cCIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDEyMywgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0xNTE1LDEzICsxNDU2LDExIEBACiAgICAgICAgICAgICAgICAgc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdKXsKICAgICAgICAgICAgICAgICBjYXNlIEZTRl9TUV9JTlZPS0VfTElOS19URVNUX1BST0NFRFVSRToKIAkJCS8qIHJlb3BlbmluZyBsaW5rIHRvIHBvcnQgKi8KLQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwgImZzZl9zcV9sdGVzdCIpOwogCQkJemZjcF90ZXN0X2xpbmsocG9ydCk7CiAJCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQkJYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGU0ZfU1FfVUxQX0RFUEVOREVOVF9FUlBfUkVRVUlSRUQ6CiAJCQkvKiBFUlAgc3RyYXRlZ3kgd2lsbCBlc2NhbGF0ZSAqLwotCQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAiZnNmX3NxX3VscCIpOwogCQkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNTQ5LDggKzE0ODgsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwgImZzZl9zX2FjY2VzcyIpOwotCQl6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQocG9ydCk7CisJCXpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChwb3J0LCA1NSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0xNTYyLDcgKzE1MDAsNiBAQAogCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX0lORk8sCiAJCQkgICAgICAoY2hhciAqKSAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwsCiAJCQkgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICJmc2Zfc19nY29tX3JlaiIpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMTU3NSw4ICsxNTEyLDcgQEAKIAkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9JTkZPLAogCQkJICAgICAgKGNoYXIgKikgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAogCQkJICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAiZnNmX3NfcGhhbmRsZV9udiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgMTA2LCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTE1ODQsOCArMTUyMCw3IEBACiAJCVpGQ1BfTE9HX0lORk8oInBvcnQgbmVlZHMgdG8gYmUgcmVvcGVuZWQgIgogCQkJICAgICAgIihhZGFwdGVyICVzLCBwb3J0IGRfaWQ9MHglMDZ4KVxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X3BvcnQocG9ydCksIHBvcnQtPmRfaWQpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDIsICJmc2Zfc19wYm94ZWQiKTsKLQkJemZjcF9lcnBfcG9ydF9ib3hlZChwb3J0KTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZChwb3J0LCA0OSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IKIAkJICAgIHwgWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKQEAgLTE2MjQsOSArMTU1OSw2IEBACiAgICAgICAgZGVmYXVsdDoKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IEFuIHVua25vd24gRlNGIFN0YXR1cyB3YXMgcHJlc2VudGVkICIKIAkJCQkiKGRlYnVnIGluZm8gMHgleClcbiIsIGhlYWRlci0+ZnNmX3N0YXR1cyk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMCwgImZzZl9zcV9pbnZhbDoiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0sIHNpemVvZiAodTMyKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTgxMCwyMSArMTc0MiwxOCBAQAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKIAkJCSAgICAgIFpGQ1BfRkNfU0VSVklDRV9DTEFTU19ERUZBVUxUKTsKIAkJLyogc3RvcCBvcGVyYXRpb24gZm9yIHRoaXMgYWRhcHRlciAqLwotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihhZGFwdGVyLT5lcnBfZGJmLCAwLCAiZnNmX3NfY2xhc3NfbnN1cCIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDEyNCwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pewogCQljYXNlIEZTRl9TUV9JTlZPS0VfTElOS19URVNUX1BST0NFRFVSRToKLQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwgImZzZl9zcV9sdGVzdCIpOwogCQkJaWYgKHBvcnQgJiYgKHNlbmRfZWxzLT5sc19jb2RlICE9IFpGQ1BfTFNfQURJU0MpKQogCQkJCXpmY3BfdGVzdF9saW5rKHBvcnQpOwogCQkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKLQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwgImZzZl9zcV91bHAiKTsKIAkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCQlyZXR2YWwgPQogCQkJICB6ZmNwX2hhbmRsZV9lbHNfcmp0KGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMV0sCkBAIC0xODMyLDcgKzE3NjEsNiBAQAogCQkJCQkgICAgICAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFsyXSk7CiAJCQlicmVhazsKIAkJY2FzZSBGU0ZfU1FfUkVUUllfSUZfUE9TU0lCTEU6Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsICJmc2Zfc3FfcmV0cnkiKTsKIAkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTE5MDksOSArMTgzNyw4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAiZnNmX3NfYWNjZXNzIik7CiAJCWlmIChwb3J0ICE9IE5VTEwpCi0JCQl6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQocG9ydCk7CisJCQl6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQocG9ydCwgNTYsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMTkyMSw5ICsxODQ4LDYgQEAKIAkJCSIoYWRhcHRlcjogJXMsIGZzZl9zdGF0dXM9MHglMDh4KVxuIiwKIAkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCiAJCQloZWFkZXItPmZzZl9zdGF0dXMpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsICJmc2Zfc3FfaW52YWwiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSwgc2l6ZW9mKHUzMikpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAl9CkBAIC0yMTMyLDggKzIwNTYsNyBAQAogCQkJCSJ2ZXJzaW9ucyBpbiBjb21wYXJpc29uIHRvIHRoaXMgZGV2aWNlICIKIAkJCQkiZHJpdmVyICh0cnkgdXBkYXRlZCBkZXZpY2UgZHJpdmVyKVxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAwLCAibG93X3F0Y2JfdmVyIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTI1LCBmc2ZfcmVxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmIChaRkNQX1FUQ0JfVkVSU0lPTiA+IGJvdHRvbS0+aGlnaF9xdGNiX3ZlcnNpb24pIHsKQEAgLTIxNDIsOCArMjA2NSw3IEBACiAJCQkJInZlcnNpb25zIHRoYW4gdGhpcyBkZXZpY2UgZHJpdmVyIHVzZXMiCiAJCQkJIihjb25zaWRlciBhIG1pY3JvY29kZSB1cGdyYWRlKVxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAwLCAiaGlnaF9xdGNiX3ZlciIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDEyNiwgZnNmX3JlcSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTIxODMsMTcgKzIxMDUsMTMgQEAKIAkJCQkJYWRhcHRlci0+cGVlcl93d25uLAogCQkJCQlhZGFwdGVyLT5wZWVyX3d3cG4sCiAJCQkJCWFkYXB0ZXItPnBlZXJfZF9pZCk7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSJ0b3AtcC10by1wIik7CiAJCQlicmVhazsKIAkJY2FzZSBGQ19QT1JUVFlQRV9OTFBPUlQ6CiAJCQlaRkNQX0xPR19OT1JNQUwoImVycm9yOiBBcmJpdHJhdGVkIGxvb3AgZmlicmVjaGFubmVsICIKIAkJCQkJInRvcG9sb2d5IGRldGVjdGVkIGF0IGFkYXB0ZXIgJXMgIgogCQkJCQkidW5zdXBwb3J0ZWQsIHNodXR0aW5nIGRvd24gYWRhcHRlclxuIiwKIAkJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSAidG9wLWFsIik7Ci0JCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDApOworCQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAxMjcsIGZzZl9yZXEpOwogCQkJcmV0dXJuIC1FSU87CiAJCWNhc2UgRkNfUE9SVFRZUEVfTlBPUlQ6CiAJCQlaRkNQX0xPR19OT1JNQUwoIlN3aXRjaGVkIGZhYnJpYyBmaWJyZWNoYW5uZWwgIgpAQCAtMjIwOCw5ICsyMTI2LDcgQEAKIAkJCQkJIm9mIGEgdHlwZSBrbm93biB0byB0aGUgemZjcCAiCiAJCQkJCSJkcml2ZXIsIHNodXR0aW5nIGRvd24gYWRhcHRlclxuIiwKIAkJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCQkgICAgICJ1bmtub3duLXRvcG8iKTsKLQkJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCk7CisJCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsIDEyOCwgZnNmX3JlcSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlib3R0b20gPSAmcXRjYi0+Ym90dG9tLmNvbmZpZzsKQEAgLTIyMjIsMzMgKzIxMzgsMjQgQEAKIAkJCQkJYm90dG9tLT5tYXhfcXRjYl9zaXplLAogCQkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAogCQkJCQlzaXplb2Yoc3RydWN0IGZzZl9xdGNiKSk7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSAicXRjYi1zaXplIik7Ci0JCQlkZWJ1Z19ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSAgICAmYm90dG9tLT5tYXhfcXRjYl9zaXplLCBzaXplb2YgKHUzMikpOwotCQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKKwkJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTI5LCBmc2ZfcmVxKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1hDT05GSUdfT0ssCiAJCQkJJmFkYXB0ZXItPnN0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0VYQ0hBTkdFX0NPTkZJR19EQVRBX0lOQ09NUExFVEU6Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMCwgInhjaGctaW5jbyIpOwotCiAJCWlmICh6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZXZhbHVhdGUoZnNmX3JlcSwgMCkpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YQ09ORklHX09LLAogCQkJCSZhZGFwdGVyLT5zdGF0dXMpOwogCi0JCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoYWRhcHRlciwKKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChmc2ZfcmVxLCA0MiwKIAkJCSZxdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLmxpbmtfZG93bl9pbmZvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLCAiZnNmLXN0YXQtbmciKTsKLQkJZGVidWdfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCSAgICAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMsIHNpemVvZih1MzIpKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAxMzAsIGZzZl9yZXEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yNDI0LDEzICsyMzMxLDkgQEAKIAljYXNlIEZTRl9FWENIQU5HRV9DT05GSUdfREFUQV9JTkNPTVBMRVRFOgogCQl6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2V2YWx1YXRlKGZzZl9yZXEsIDApOwogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YUE9SVF9PSywgJmFkYXB0ZXItPnN0YXR1cyk7Ci0JCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoYWRhcHRlciwKKwkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChmc2ZfcmVxLCA0MywKIAkJCSZxdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLmxpbmtfZG93bl9pbmZvKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAwLCAieGNoZy1wb3J0LW5nIik7Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkgICAgJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzLCBzaXplb2YodTMyKSk7CiAJfQogfQogCkBAIC0yNTI4LDggKzI0MzEsNiBAQAogCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogcmVtb3RlIHBvcnQgMHglMDE2THggb24gYWRhcHRlciAlcyAiCiAJCQkJImlzIGFscmVhZHkgb3Blbi5cbiIsCiAJCQkJcG9ydC0+d3dwbiwgemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSk7Ci0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJICAgICAiZnNmX3NfcG9wZW4iKTsKIAkJLyoKIAkJICogVGhpcyBpcyBhIGJ1ZywgaG93ZXZlciBvcGVyYXRpb24gc2hvdWxkIGNvbnRpbnVlIG5vcm1hbGx5CiAJCSAqIGlmIGl0IGlzIHNpbXBseSBpZ25vcmVkCkBAIC0yNTUzLDggKzI0NTQsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwgImZzZl9zX2FjY2VzcyIpOwotCQl6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQocG9ydCk7CisJCXpmY3BfZXJwX3BvcnRfYWNjZXNzX2RlbmllZChwb3J0LCA1NywgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0yNTYzLDI0ICsyNDYzLDE4IEBACiAJCQkgICAgICAiVGhlIHJlbW90ZSBwb3J0IDB4JTAxNkx4IG9uIGFkYXB0ZXIgJXMgIgogCQkJICAgICAgImNvdWxkIG5vdCBiZSBvcGVuZWQuIERpc2FibGluZyBpdC5cbiIsCiAJCQkgICAgICBwb3J0LT53d3BuLCB6ZmNwX2dldF9idXNpZF9ieV9wb3J0KHBvcnQpKTsKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCSAiZnNmX3NfbWF4X3BvcnRzIik7Ci0JCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQpOworCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0LCAzMSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCSAiZnNmX3NxX2x0ZXN0Iik7CiAJCQkvKiBFUlAgc3RyYXRlZ3kgd2lsbCBlc2NhbGF0ZSAqLwogCQkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKIAkJCS8qIEVSUCBzdHJhdGVneSB3aWxsIGVzY2FsYXRlICovCi0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCSAiZnNmX3NxX3VscCIpOwogCQkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogCQljYXNlIEZTRl9TUV9OT19SRVRSWV9QT1NTSUJMRToKQEAgLTI1ODksMjEgKzI0ODMsMTMgQEAKIAkJCQkJIkRpc2FibGluZyBpdC5cbiIsCiAJCQkJCXBvcnQtPnd3cG4sCiAJCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X3BvcnQocG9ydCkpOwotCQkJZGVidWdfdGV4dF9leGNlcHRpb24oZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkJICAgICAiZnNmX3NxX25vX3JldHJ5Iik7Ci0JCQl6ZmNwX2VycF9wb3J0X2ZhaWxlZChwb3J0KTsKKwkJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsIDMyLCBmc2ZfcmVxKTsKIAkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVpGQ1BfTE9HX05PUk1BTAogCQkJICAgICgiYnVnOiBXcm9uZyBzdGF0dXMgcXVhbGlmaWVyIDB4JXggYXJyaXZlZC5cbiIsCiAJCQkgICAgIGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pOwotCQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCQkgImZzZl9zcV9pbnZhbDoiKTsKLQkJCWRlYnVnX2V4Y2VwdGlvbigKLQkJCQlmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdLAotCQkJCXNpemVvZiAodTMyKSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTI2NDYsMTcgKzI1MzIsMTIgQEAKIAkJCQkJIndhcm5pbmc6IGluc3VmZmljaWVudCBsZW5ndGggb2YgIgogCQkJCQkiUExPR0kgcGF5bG9hZCAoJWkpXG4iLAogCQkJCQlmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHMxX2xlbmd0aCk7Ci0JCQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCQkJICJmc2Zfc19zaG9ydF9wbG9naToiKTsKIAkJCQkvKiBza2lwIHNhbml0eSBjaGVjayBhbmQgYXNzdW1lIHd3cG4gaXMgb2sgKi8KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4gIT0gcG9ydC0+d3dwbikgewogCQkJCQlaRkNQX0xPR19JTkZPKCJ3YXJuaW5nOiBkX2lkIG9mIHBvcnQgIgogCQkJCQkJICAgICAgIjB4JTAxNkx4IGNoYW5nZWQgZHVyaW5nICIKIAkJCQkJCSAgICAgICJvcGVuXG4iLCBwb3J0LT53d3BuKTsKLQkJCQkJZGVidWdfdGV4dF9ldmVudCgKLQkJCQkJCWZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCQkiZnNmX3NfZGlkX2NoYW5nZToiKTsKIAkJCQkJYXRvbWljX2NsZWFyX21hc2soCiAJCQkJCQlaRkNQX1NUQVRVU19QT1JUX0RJRF9ESUQsCiAJCQkJCQkmcG9ydC0+c3RhdHVzKTsKQEAgLTI2ODEsOSArMjU2Miw2IEBACiAJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBBbiB1bmtub3duIEZTRiBTdGF0dXMgd2FzIHByZXNlbnRlZCAiCiAJCQkJIihkZWJ1ZyBpbmZvIDB4JXgpXG4iLAogCQkJCWhlYWRlci0+ZnNmX3N0YXR1cyk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwgImZzZl9zX2ludmFsOiIpOwotCQlkZWJ1Z19leGNlcHRpb24oZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkmaGVhZGVyLT5mc2Zfc3RhdHVzLCBzaXplb2YgKHUzMikpOwogCQlicmVhazsKIAl9CiAKQEAgLTI3ODcsOSArMjY2NSw3IEBACiAJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfREVCVUcsCiAJCQkgICAgICAoY2hhciAqKSAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKIAkJCSAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkgImZzZl9zX3BoYW5kX252Iik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHBvcnQtPmFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAxMDcsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMjgwNCw3ICsyNjgwLDcgQEAKIAkJWkZDUF9MT0dfVFJBQ0UoInJlbW90ZSBwb3J0IDB4MDE2JUx4IG9uIGFkYXB0ZXIgJXMgY2xvc2VkLCAiCiAJCQkgICAgICAgInBvcnQgaGFuZGxlIDB4JXhcbiIsIHBvcnQtPnd3cG4sCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSwgcG9ydC0+aGFuZGxlKTsKLQkJemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHBvcnQsCisJCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCAzMywgZnNmX3JlcSwKIAkJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOLAogCQkJCQkgICAgWkZDUF9DTEVBUik7CiAJCXJldHZhbCA9IDA7CkBAIC0yODE0LDEwICsyNjkwLDYgQEAKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IEFuIHVua25vd24gRlNGIFN0YXR1cyB3YXMgcHJlc2VudGVkICIKIAkJCQkiKGRlYnVnIGluZm8gMHgleClcbiIsCiAJCQkJZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsICJmc2Zfc19pbnZhbDoiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzLAotCQkJCXNpemVvZiAodTMyKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjkzMCw5ICsyODAyLDcgQEAKIAkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9ERUJVRywKIAkJCSAgICAgIChjaGFyICopICZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbCwKIAkJCSAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkgImZzZl9zX3BoYW5kX252Iik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHBvcnQtPmFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAxMDgsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMjk1Myw4ICsyODIzLDcgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsICJmc2Zfc19hY2Nlc3MiKTsKLQkJemZjcF9lcnBfcG9ydF9hY2Nlc3NfZGVuaWVkKHBvcnQpOworCQl6ZmNwX2VycF9wb3J0X2FjY2Vzc19kZW5pZWQocG9ydCwgNTgsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMjk2NCwzNSArMjgzMywzMiBAQAogCQkJICAgICAgICJ0byBjbG9zZSBpdCBwaHlzaWNhbGx5LlxuIiwKIAkJCSAgICAgICBwb3J0LT53d3BuLAogCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X3BvcnQocG9ydCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsICJmc2Zfc19wYm94ZWQiKTsKLQkJemZjcF9lcnBfcG9ydF9ib3hlZChwb3J0KTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZChwb3J0LCA1MCwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOworCisJCS8qIGNhbid0IHVzZSBnZW5lcmljIHpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyBiZWNhdXNlCisJCSAqIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOIG11c3Qgbm90IGJlIHJlc2V0IGZvciB0aGUgcG9ydCAqLworCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19QT1JUX1BIWVNfT1BFTiwgJnBvcnQtPnN0YXR1cyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodW5pdCwgJnBvcnQtPnVuaXRfbGlzdF9oZWFkLCBsaXN0KQorCQkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4sCisJCQkJCSAgJnVuaXQtPnN0YXR1cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCSAiZnNmX3NxX2x0ZXN0Iik7CiAJCQkvKiBUaGlzIHdpbGwgbm93IGJlIGVzY2FsYXRlZCBieSBFUlAgKi8KIAkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCQlicmVhazsKIAkJY2FzZSBGU0ZfU1FfVUxQX0RFUEVOREVOVF9FUlBfUkVRVUlSRUQ6CiAJCQkvKiBFUlAgc3RyYXRlZ3kgd2lsbCBlc2NhbGF0ZSAqLwotCQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCQkgImZzZl9zcV91bHAiKTsKIAkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVpGQ1BfTE9HX05PUk1BTAogCQkJICAgICgiYnVnOiBXcm9uZyBzdGF0dXMgcXVhbGlmaWVyIDB4JXggYXJyaXZlZC5cbiIsCiAJCQkgICAgIGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pOwotCQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCQkgImZzZl9zcV9pbnZhbDoiKTsKLQkJCWRlYnVnX2V4Y2VwdGlvbigKLQkJCQlmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdLCBzaXplb2YgKHUzMikpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC0zMDE1LDkgKzI4ODEsNiBAQAogCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogQW4gdW5rbm93biBGU0YgU3RhdHVzIHdhcyBwcmVzZW50ZWQgIgogCQkJCSIoZGVidWcgaW5mbyAweCV4KVxuIiwKIAkJCQloZWFkZXItPmZzZl9zdGF0dXMpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsICJmc2Zfc19pbnZhbDoiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJmhlYWRlci0+ZnNmX3N0YXR1cywgc2l6ZW9mICh1MzIpKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMTQ5LDggKzMwMTIsNyBAQAogCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX0RFQlVHLAogCQkJICAgICAgKGNoYXIgKikgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAogCQkJICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAiZnNmX3NfcGhfbnYiKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsIDEwOSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zMTU5LDggKzMwMjEsNiBAQAogCQkJCSJyZW1vdGUgcG9ydCAweCUwMTZMeCBvbiBhZGFwdGVyICVzIHR3aWNlLlxuIiwKIAkJCQl1bml0LT5mY3BfbHVuLAogCQkJCXVuaXQtPnBvcnQtPnd3cG4sIHpmY3BfZ2V0X2J1c2lkX2J5X3VuaXQodW5pdCkpOwotCQlkZWJ1Z190ZXh0X2V4Y2VwdGlvbihhZGFwdGVyLT5lcnBfZGJmLCAwLAotCQkJCSAgICAgImZzZl9zX3VvcGVuIik7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zMTgyLDggKzMwNDIsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwgImZzZl9zX2FjY2VzcyIpOwotCQl6ZmNwX2VycF91bml0X2FjY2Vzc19kZW5pZWQodW5pdCk7CisJCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZCh1bml0LCA1OSwgZnNmX3JlcSk7CiAJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfU0hBUkVELCAmdW5pdC0+c3RhdHVzKTsKICAgICAgICAgICAgICAgICBhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19VTklUX1JFQURPTkxZLCAmdW5pdC0+c3RhdHVzKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKQEAgLTMxOTMsOCArMzA1Miw3IEBACiAJCVpGQ1BfTE9HX0RFQlVHKCJUaGUgcmVtb3RlIHBvcnQgMHglMDE2THggb24gYWRhcHRlciAlcyAiCiAJCQkgICAgICAgIm5lZWRzIHRvIGJlIHJlb3BlbmVkXG4iLAogCQkJICAgICAgIHVuaXQtPnBvcnQtPnd3cG4sIHpmY3BfZ2V0X2J1c2lkX2J5X3VuaXQodW5pdCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDIsICJmc2Zfc19wYm94ZWQiKTsKLQkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0KTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCA1MSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKQEAgLTMyMzQsOSArMzA5Miw3IEBACiAJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfREVCVUcsCiAJCQkgICAgICAoY2hhciAqKSAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwsCiAJCQkgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDIsCi0JCQkJICJmc2Zfc19sX3NoX3ZpbyIpOwotCQl6ZmNwX2VycF91bml0X2FjY2Vzc19kZW5pZWQodW5pdCk7CisJCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZCh1bml0LCA2MCwgZnNmX3JlcSk7CiAJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfU0hBUkVELCAmdW5pdC0+c3RhdHVzKTsKIAkJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfVU5JVF9SRUFET05MWSwgJnVuaXQtPnN0YXR1cyk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CkBAIC0zMjUwLDkgKzMxMDYsNyBAQAogCQkJICAgICAgdW5pdC0+ZmNwX2x1biwKIAkJCSAgICAgIHVuaXQtPnBvcnQtPnd3cG4sCiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV91bml0KHVuaXQpKTsKLQkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCSAiZnNmX3NfbWF4X3VuaXRzIik7Ci0JCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQpOworCQl6ZmNwX2VycF91bml0X2ZhaWxlZCh1bml0LCAzNCwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zMjYwLDI2ICszMTE0LDE3IEBACiAJCXN3aXRjaCAoaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSkgewogCQljYXNlIEZTRl9TUV9JTlZPS0VfTElOS19URVNUX1BST0NFRFVSRToKIAkJCS8qIFJlLWVzdGFibGlzaCBsaW5rIHRvIHBvcnQgKi8KLQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkJICJmc2Zfc3FfbHRlc3QiKTsKIAkJCXpmY3BfdGVzdF9saW5rKHVuaXQtPnBvcnQpOwogCQkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKIAkJCS8qIEVSUCBzdHJhdGVneSB3aWxsIGVzY2FsYXRlICovCi0JCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCSAiZnNmX3NxX3VscCIpOwogCQkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJWkZDUF9MT0dfTk9STUFMCiAJCQkgICAgKCJidWc6IFdyb25nIHN0YXR1cyBxdWFsaWZpZXIgMHgleCBhcnJpdmVkLlxuIiwKIAkJCSAgICAgaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSk7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSAiZnNmX3NxX2ludmFsOiIpOwotCQkJZGVidWdfZXhjZXB0aW9uKGFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdLAotCQkJCXNpemVvZiAodTMyKSk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTMzMzEsMTUgKzMxNzYsMTUgQEAKICAgICAgICAgCQlpZiAoZXhjbHVzaXZlICYmICFyZWFkd3JpdGUpIHsKICAgICAgICAgICAgICAgICAJCVpGQ1BfTE9HX05PUk1BTCgiZXhjbHVzaXZlIGFjY2VzcyBvZiByZWFkLW9ubHkgIgogCQkJCQkJInVuaXQgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCk7CisJCQkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgMzUsIGZzZl9yZXEpOwogCQkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7Ci0JCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwKTsKKwkJCQl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsIDgwLCBmc2ZfcmVxKTsKICAgICAgICAgCQl9IGVsc2UgaWYgKCFleGNsdXNpdmUgJiYgcmVhZHdyaXRlKSB7CiAgICAgICAgICAgICAgICAgCQlaRkNQX0xPR19OT1JNQUwoInNoYXJlZCBhY2Nlc3Mgb2YgcmVhZC13cml0ZSAiCiAJCQkJCQkidW5pdCBub3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAgICAgICAgICAJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQpOworCQkJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQsIDM2LCBmc2ZfcmVxKTsKIAkJCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwotCQkJCXpmY3BfZXJwX3VuaXRfc2h1dGRvd24odW5pdCwgMCk7CisJCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCA4MSwgZnNmX3JlcSk7CiAgICAgICAgIAkJfQogCQl9CiAKQEAgLTMzNTAsOSArMzE5NSw2IEBACiAJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBBbiB1bmtub3duIEZTRiBTdGF0dXMgd2FzIHByZXNlbnRlZCAiCiAJCQkJIihkZWJ1ZyBpbmZvIDB4JXgpXG4iLAogCQkJCWhlYWRlci0+ZnNmX3N0YXR1cyk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMCwgImZzZl9zX2ludmFsOiIpOwotCQlkZWJ1Z19leGNlcHRpb24oYWRhcHRlci0+ZXJwX2RiZiwgMCwKLQkJCQkmaGVhZGVyLT5mc2Zfc3RhdHVzLCBzaXplb2YgKHUzMikpOwogCQlicmVhazsKIAl9CiAKQEAgLTM0NjUsOSArMzMwNyw3IEBACiAJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfREVCVUcsCiAJCQkgICAgICAoY2hhciAqKSAmZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbCwKIAkJCSAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkgImZzZl9zX3BoYW5kX252Iik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwLCAxMTAsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzQ4Myw5ICszMzIzLDcgQEAKIAkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9ERUJVRywKIAkJCSAgICAgIChjaGFyICopICZmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLAogCQkJICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCSAiZnNmX3NfbGhhbmRfbnYiKTsKLQkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCk7CisJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDAsIDExMSwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zNDk0LDggKzMzMzIsNyBAQAogCQkJICAgICAgICJuZWVkcyB0byBiZSByZW9wZW5lZFxuIiwKIAkJCSAgICAgICB1bml0LT5wb3J0LT53d3BuLAogCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X3VuaXQodW5pdCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDIsICJmc2Zfc19wYm94ZWQiKTsKLQkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0KTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCA1MiwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKQEAgLTM1MDQsMjcgKzMzNDEsMTcgQEAKIAkJc3dpdGNoIChmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6CiAJCQkvKiByZS1lc3RhYmxpc2ggbGluayB0byBwb3J0ICovCi0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCSAiZnNmX3NxX2x0ZXN0Iik7CiAJCQl6ZmNwX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKIAkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCQlicmVhazsKIAkJY2FzZSBGU0ZfU1FfVUxQX0RFUEVOREVOVF9FUlBfUkVRVUlSRUQ6CiAJCQkvKiBFUlAgc3RyYXRlZ3kgd2lsbCBlc2NhbGF0ZSAqLwotCQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCQkgImZzZl9zcV91bHAiKTsKIAkJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVpGQ1BfTE9HX05PUk1BTAogCQkJICAgICgiYnVnOiBXcm9uZyBzdGF0dXMgcXVhbGlmaWVyIDB4JXggYXJyaXZlZC5cbiIsCiAJCQkgICAgIGZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSk7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSAiZnNmX3NxX2ludmFsOiIpOwotCQkJZGVidWdfZXhjZXB0aW9uKAotCQkJCWZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSwKLQkJCQlzaXplb2YgKHUzMikpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC0zNTQ1LDEwICszMzcyLDYgQEAKIAkJWkZDUF9MT0dfTk9STUFMKCJidWc6IEFuIHVua25vd24gRlNGIFN0YXR1cyB3YXMgcHJlc2VudGVkICIKIAkJCQkiKGRlYnVnIGluZm8gMHgleClcbiIsCiAJCQkJZnNmX3JlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsICJmc2Zfc19pbnZhbDoiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJmZzZl9yZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzLAotCQkJCXNpemVvZiAodTMyKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzcwMyw3ICszNTI2LDcgQEAKIAkJCQkJemZjcF9nZXRfYnVzaWRfYnlfdW5pdCh1bml0KSwKIAkJCQkJdW5pdC0+cG9ydC0+d3dwbiwKIAkJCQkJdW5pdC0+ZmNwX2x1bik7Ci0JCQl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDApOworCQkJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAxMzEsIGZzZl9yZXEpOwogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJfQogCQlnb3RvIG5vX2ZpdDsKQEAgLTM3MzksOCArMzU2Miw4IEBACiAgc2VuZF9mYWlsZWQ6CiAgbm9fZml0OgogIGZhaWxlZF9zY3NpX2NtbmQ6Ci0gdW5pdF9ibG9ja2VkOgogCXpmY3BfdW5pdF9wdXQodW5pdCk7CisgdW5pdF9ibG9ja2VkOgogCXpmY3BfZnNmX3JlcV9mcmVlKGZzZl9yZXEpOwogCWZzZl9yZXEgPSBOVUxMOwogCXNjc2lfY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CkBAIC0zODYxLDkgKzM2ODQsNyBAQAogCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX0RFQlVHLAogCQkJICAgICAgKGNoYXIgKikgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAogCQkJICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCSAiZnNmX3NfcGhhbmRfbnYiKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsIDExMiwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zODc5LDkgKzM3MDAsNyBAQAogCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX05PUk1BTCwKIAkJCSAgICAgIChjaGFyICopICZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbCwKIAkJCSAgICAgIHNpemVvZiAodW5pb24gZnNmX3N0YXR1c19xdWFsKSk7Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwKLQkJCQkgImZzZl9zX3VoYW5kX252Iik7Ci0JCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHVuaXQtPnBvcnQsIDApOworCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih1bml0LT5wb3J0LCAwLCAxMTMsIGZzZl9yZXEpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIApAQCAtMzg5Nyw5ICszNzE2LDcgQEAKIAkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9OT1JNQUwsCiAJCQkgICAgICAoY2hhciAqKSAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwsCiAJCQkgICAgICBzaXplb2YgKHVuaW9uIGZzZl9zdGF0dXNfcXVhbCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJICJmc2Zfc19oYW5kX21pcyIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih1bml0LT5wb3J0LT5hZGFwdGVyLCAwKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTE0LCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM5MDksOSArMzcyNiw3IEBACiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV91bml0KHVuaXQpLAogCQkJICAgICAgWkZDUF9GQ19TRVJWSUNFX0NMQVNTX0RFRkFVTFQpOwogCQkvKiBzdG9wIG9wZXJhdGlvbiBmb3IgdGhpcyBhZGFwdGVyICovCi0JCWRlYnVnX3RleHRfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJICAgICAiZnNmX3NfY2xhc3NfbnN1cCIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDApOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHVuaXQtPnBvcnQtPmFkYXB0ZXIsIDAsIDEzMiwgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCkBAIC0zOTI3LDkgKzM3NDIsNyBAQAogCQlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX0RFQlVHLAogCQkJICAgICAgKGNoYXIgKikgJmhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLAogCQkJICAgICAgc2l6ZW9mICh1bmlvbiBmc2Zfc3RhdHVzX3F1YWwpKTsKLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLAotCQkJCSAiZnNmX3NfZmNwX2x1bl9udiIpOwotCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih1bml0LT5wb3J0LCAwKTsKKwkJemZjcF9lcnBfcG9ydF9yZW9wZW4odW5pdC0+cG9ydCwgMCwgMTE1LCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM5NTEsOCArMzc2NCw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJZGVidWdfdGV4dF9ldmVudChmc2ZfcmVxLT5hZGFwdGVyLT5lcnBfZGJmLCAxLCAiZnNmX3NfYWNjZXNzIik7Ci0JCXpmY3BfZXJwX3VuaXRfYWNjZXNzX2RlbmllZCh1bml0KTsKKwkJemZjcF9lcnBfdW5pdF9hY2Nlc3NfZGVuaWVkKHVuaXQsIDYxLCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM5NjUsOSArMzc3Nyw3IEBACiAJCQkgICAgICB6ZmNwX2dldF9idXNpZF9ieV91bml0KHVuaXQpLAogCQkJICAgICAgZnNmX3JlcS0+cXRjYi0+Ym90dG9tLmlvLmRhdGFfZGlyZWN0aW9uKTsKIAkJLyogc3RvcCBvcGVyYXRpb24gZm9yIHRoaXMgYWRhcHRlciAqLwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJICJmc2Zfc19kaXJfaW5kX252Iik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24odW5pdC0+cG9ydC0+YWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTMzLCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM5ODAsOSArMzc5MCw3IEBACiAJCSAgICAgemZjcF9nZXRfYnVzaWRfYnlfdW5pdCh1bml0KSwKIAkJICAgICBmc2ZfcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX2NtbmRfbGVuZ3RoKTsKIAkJLyogc3RvcCBvcGVyYXRpb24gZm9yIHRoaXMgYWRhcHRlciAqLwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJICJmc2Zfc19jbWRfbGVuX252Iik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24odW5pdC0+cG9ydC0+YWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24odW5pdC0+cG9ydC0+YWRhcHRlciwgMCwgMTM0LCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAKQEAgLTM5OTAsOCArMzc5OCw3IEBACiAJCVpGQ1BfTE9HX0RFQlVHKCJUaGUgcmVtb3RlIHBvcnQgMHglMDE2THggb24gYWRhcHRlciAlcyAiCiAJCQkgICAgICAgIm5lZWRzIHRvIGJlIHJlb3BlbmVkXG4iLAogCQkJICAgICAgIHVuaXQtPnBvcnQtPnd3cG4sIHpmY3BfZ2V0X2J1c2lkX2J5X3VuaXQodW5pdCkpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDIsICJmc2Zfc19wYm94ZWQiKTsKLQkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0KTsKKwkJemZjcF9lcnBfcG9ydF9ib3hlZCh1bml0LT5wb3J0LCA1MywgZnNmX3JlcSk7CiAJCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IgfAogCQkJWkZDUF9TVEFUVVNfRlNGUkVRX1JFVFJZOwogCQlicmVhazsKQEAgLTQwMDEsOCArMzgwOCw3IEBACiAJCQkJInd3cG49MHglMDE2THgsIGZjcF9sdW49MHglMDE2THgpXG4iLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X3VuaXQodW5pdCksCiAJCQkJdW5pdC0+cG9ydC0+d3dwbiwgdW5pdC0+ZmNwX2x1bik7Ci0JCWRlYnVnX3RleHRfZXZlbnQoZnNmX3JlcS0+YWRhcHRlci0+ZXJwX2RiZiwgMSwgImZzZl9zX2xib3hlZCIpOwotCQl6ZmNwX2VycF91bml0X2JveGVkKHVuaXQpOworCQl6ZmNwX2VycF91bml0X2JveGVkKHVuaXQsIDU0LCBmc2ZfcmVxKTsKIAkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUgogCQkJfCBaRkNQX1NUQVRVU19GU0ZSRVFfUkVUUlk7CiAJCWJyZWFrOwpAQCAtNDAxMSwyNSArMzgxNywxNiBAQAogCQlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6CiAJCQkvKiByZS1lc3RhYmxpc2ggbGluayB0byBwb3J0ICovCi0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCSAiZnNmX3NxX2x0ZXN0Iik7CiAgCQkJemZjcF90ZXN0X2xpbmsodW5pdC0+cG9ydCk7CiAJCQlicmVhazsKIAkJY2FzZSBGU0ZfU1FfVUxQX0RFUEVOREVOVF9FUlBfUkVRVUlSRUQ6CiAJCQkvKiBGSVhNRShodykgbmVlZCBwcm9wZXIgc3BlY3MgZm9yIHByb3BlciBhY3Rpb24gKi8KIAkJCS8qIGxldCBzY3NpIHN0YWNrIGRlYWwgd2l0aCByZXRyaWVzIGFuZCBlc2NhbGF0aW9uICovCi0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDEsCi0JCQkJCSAiZnNmX3NxX3VscCIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlaRkNQX0xPR19OT1JNQUwKICAJCQkgICAgKCJVbmtub3duIHN0YXR1cyBxdWFsaWZpZXIgMHgleCBhcnJpdmVkLlxuIiwKIAkJCSAgICAgaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSk7Ci0JCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSAiZnNmX3NxX2ludmFsOiIpOwotCQkJZGVidWdfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJCSZoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdLAotCQkJCQlzaXplb2YodTMyKSk7CiAJCQlicmVhazsKIAkJfQogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwpAQCAtNDA0MCwxMiArMzgzNyw2IEBACiAKIAljYXNlIEZTRl9GQ1BfUlNQX0FWQUlMQUJMRToKIAkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsICJmc2Zfc19pbnZhbDoiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkJJmhlYWRlci0+ZnNmX3N0YXR1cywgc2l6ZW9mKHUzMikpOwotCQlicmVhazsKIAl9CiAKICBza2lwX2ZzZnN0YXR1czoKQEAgLTQ2MjUsOSArNDQxNiw2IEBACiAJCQkid2FzIHByZXNlbnRlZCBvbiB0aGUgYWRhcHRlciAlc1xuIiwKIAkJCWhlYWRlci0+ZnNmX3N0YXR1cywKIAkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwotCQlkZWJ1Z190ZXh0X2V2ZW50KGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsICJmc2Zfc3FfaW52YWwiKTsKLQkJZGVidWdfZXhjZXB0aW9uKGZzZl9yZXEtPmFkYXB0ZXItPmVycF9kYmYsIDAsCi0JCQkmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSwgc2l6ZW9mKHUzMikpOwogCQlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTQ4MTcsNyArNDYwNSw2IEBACiAJdm9sYXRpbGUgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCWludCBpbmNfc2VxX25vOwogCWludCBuZXdfZGlzdGFuY2VfZnJvbV9pbnQ7Ci0JdTY0IGRiZ190bXBbMl07CiAJaW50IHJldHZhbCA9IDA7CiAKIAlhZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKQEAgLTQ4NjcsMTAgKzQ2NTQsNiBAQAogCQkJIFFESU9fRkxBR19TWU5DX09VVFBVVCwKIAkJCSAwLCBmc2ZfcmVxLT5zYmFsX2ZpcnN0LCBmc2ZfcmVxLT5zYmFsX251bWJlciwgTlVMTCk7CiAKLQlkYmdfdG1wWzBdID0gKHVuc2lnbmVkIGxvbmcpIHNiYWxlWzBdLmFkZHI7Ci0JZGJnX3RtcFsxXSA9ICh1NjQpIHJldHZhbDsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAodm9pZCAqKSBkYmdfdG1wLCAxNik7Ci0KIAlpZiAodW5saWtlbHkocmV0dmFsKSkgewogCQkvKiBRdWV1ZXMgYXJlIGRvd24uLi4uLiAqLwogCQlyZXR2YWwgPSAtRUlPOwpAQCAtNDg4NSw3ICs0NjY4LDcgQEAKIAkJcmVxX3F1ZXVlLT5mcmVlX2luZGV4IC09IGZzZl9yZXEtPnNiYWxfbnVtYmVyOwogCQlyZXFfcXVldWUtPmZyZWVfaW5kZXggKz0gUURJT19NQVhfQlVGRkVSU19QRVJfUTsKIAkJcmVxX3F1ZXVlLT5mcmVlX2luZGV4ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IC8qIHdyYXAgKi8KLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsIDExNiwgZnNmX3JlcSk7CiAJfSBlbHNlIHsKIAkJcmVxX3F1ZXVlLT5kaXN0YW5jZV9mcm9tX2ludCA9IG5ld19kaXN0YW5jZV9mcm9tX2ludDsKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggMjJmZGMxNy4uOGNhNWYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTE3NSw4ICsxNzUsOSBAQAogICAgICAgICAgICAgICAgICogd2hpY2ggaXMgc2V0IGFnYWluIGluIGNhc2Ugd2UgaGF2ZSBtaXNzZWQgYnkgYSBtaWxlLgogICAgICAgICAgICAgICAgICovCiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCi0JCQkJICAgICAgIFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAotCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCk7CisJCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAorCQkJCQlaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgMTQwLAorCQkJCQlOVUxMKTsKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTIzOSw4ICsyNDAsNiBAQAogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRlYnVnX2xvbmdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgcmVxX2lkKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CiAJZnNmX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIHJlcV9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggYjlkYWY1Yy4uZjgxODUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAkJCQkgIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSk7CiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKik7CiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICopOworc3RhdGljIGludCB6ZmNwX3Njc2lfZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICopOwogc3RhdGljIGludCB6ZmNwX3Rhc2tfbWFuYWdlbWVudF9mdW5jdGlvbihzdHJ1Y3QgemZjcF91bml0ICosIHU4LAogCQkJCQkgc3RydWN0IHNjc2lfY21uZCAqKTsKQEAgLTUxLDYgKzUyLDcgQEAKIAkJLnF1ZXVlY29tbWFuZAkJPSB6ZmNwX3Njc2lfcXVldWVjb21tYW5kLAogCQkuZWhfYWJvcnRfaGFuZGxlcgk9IHpmY3Bfc2NzaV9laF9hYm9ydF9oYW5kbGVyLAogCQkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSB6ZmNwX3Njc2lfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIsCisJCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IHpmY3Bfc2NzaV9laF90YXJnZXRfcmVzZXRfaGFuZGxlciwKIAkJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHpmY3Bfc2NzaV9laF9ob3N0X3Jlc2V0X2hhbmRsZXIsCiAJCS5jYW5fcXVldWUJCT0gNDA5NiwKIAkJLnRoaXNfaWQJCT0gLTEsCkBAIC0xNzksMTEgKzE4MSwxMCBAQAogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzZHBudC0+aG9zdGRhdGE7CiAKIAlpZiAodW5pdCkgewotCQl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwogCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19VTklUX1JFR0lTVEVSRUQsICZ1bml0LT5zdGF0dXMpOwogCQlzZHBudC0+aG9zdGRhdGEgPSBOVUxMOwogCQl1bml0LT5kZXZpY2UgPSBOVUxMOwotCQl6ZmNwX2VycF91bml0X2ZhaWxlZCh1bml0KTsKKwkJemZjcF9lcnBfdW5pdF9mYWlsZWQodW5pdCwgMTIsIE5VTEwpOwogCQl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogCX0gZWxzZQogCQlaRkNQX0xPR19OT1JNQUwoImJ1Zzogbm8gdW5pdCBhc3NvY2lhdGVkIHdpdGggU0NTSSBkZXZpY2UgYXQgIgpAQCAtNDQyLDU4ICs0NDMsMzIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50Ci16ZmNwX3Njc2lfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCitzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAKIAlpZiAoIXVuaXQpIHsKLQkJWkZDUF9MT0dfTk9STUFMKCJidWc6IFRyaWVkIHJlc2V0IGZvciBub25leGlzdGVudCB1bml0XG4iKTsKLQkJcmV0dmFsID0gU1VDQ0VTUzsKLQkJZ290byBvdXQ7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiBTVUNDRVNTOwogCX0KLQlaRkNQX0xPR19OT1JNQUwoInJlc2V0dGluZyB1bml0IDB4JTAxNkx4IG9uIHBvcnQgMHglMDE2THgsIGFkYXB0ZXIgJXNcbiIsCi0JCQl1bml0LT5mY3BfbHVuLCB1bml0LT5wb3J0LT53d3BuLAotCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcih1bml0LT5wb3J0LT5hZGFwdGVyKSk7CisJcmV0dmFsID0gemZjcF90YXNrX21hbmFnZW1lbnRfZnVuY3Rpb24odW5pdCwKKwkJCQkJICAgICAgIEZDUF9MT0dJQ0FMX1VOSVRfUkVTRVQsCisJCQkJCSAgICAgICBzY3BudCk7CisJcmV0dXJuIHJldHZhbCA/IEZBSUxFRCA6IFNVQ0NFU1M7Cit9CiAKLQkvKgotCSAqIElmIHdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhlIHVuaXQgc3VwcG9ydHMgJ2xvZ2ljYWwgdW5pdCByZXNldCcKLQkgKiB0aGVuIHRyeSAnbG9naWNhbCB1bml0IHJlc2V0JyBhbmQgcHJvY2VlZCB3aXRoICd0YXJnZXQgcmVzZXQnCi0JICogaWYgJ2xvZ2ljYWwgdW5pdCByZXNldCcgZmFpbHMuCi0JICogSWYgdGhlIHVuaXQgaXMga25vd24gbm90IHRvIHN1cHBvcnQgJ2xvZ2ljYWwgdW5pdCByZXNldCcgdGhlbgotCSAqIHNraXAgJ2xvZ2ljYWwgdW5pdCByZXNldCcgYW5kIHRyeSAndGFyZ2V0IHJlc2V0JyBpbW1lZGlhdGVseS4KLQkgKi8KLQlpZiAoIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfVU5JVF9OT1RTVVBQVU5JVFJFU0VULAotCQkJICAgICAgJnVuaXQtPnN0YXR1cykpIHsKLQkJcmV0dmFsID0gemZjcF90YXNrX21hbmFnZW1lbnRfZnVuY3Rpb24odW5pdCwKLQkJCQkJCSAgICAgICBGQ1BfTE9HSUNBTF9VTklUX1JFU0VULAotCQkJCQkJICAgICAgIHNjcG50KTsKLQkJaWYgKHJldHZhbCkgewotCQkJWkZDUF9MT0dfREVCVUcoInVuaXQgcmVzZXQgZmFpbGVkICh1bml0PSVwKVxuIiwgdW5pdCk7Ci0JCQlpZiAocmV0dmFsID09IC1FTk9UU1VQUCkKLQkJCQlhdG9taWNfc2V0X21hc2sKLQkJCQkgICAgKFpGQ1BfU1RBVFVTX1VOSVRfTk9UU1VQUFVOSVRSRVNFVCwKLQkJCQkgICAgICZ1bml0LT5zdGF0dXMpOwotCQkJLyogZmFsbCB0aHJvdWdoIGFuZCB0cnkgJ3RhcmdldCByZXNldCcgbmV4dCAqLwotCQl9IGVsc2UgewotCQkJWkZDUF9MT0dfREVCVUcoInVuaXQgcmVzZXQgc3VjY2VlZGVkICh1bml0PSVwKVxuIiwKLQkJCQkgICAgICAgdW5pdCk7Ci0JCQkvKiBhdm9pZCAndGFyZ2V0IHJlc2V0JyAqLwotCQkJcmV0dmFsID0gU1VDQ0VTUzsKLQkJCWdvdG8gb3V0OwotCQl9CitzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF90YXJnZXRfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKworCWlmICghdW5pdCkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAJcmV0dmFsID0gemZjcF90YXNrX21hbmFnZW1lbnRfZnVuY3Rpb24odW5pdCwgRkNQX1RBUkdFVF9SRVNFVCwgc2NwbnQpOwotCWlmIChyZXR2YWwpIHsKLQkJWkZDUF9MT0dfREVCVUcoInRhcmdldCByZXNldCBmYWlsZWQgKHVuaXQ9JXApXG4iLCB1bml0KTsKLQkJcmV0dmFsID0gRkFJTEVEOwotCX0gZWxzZSB7Ci0JCVpGQ1BfTE9HX0RFQlVHKCJ0YXJnZXQgcmVzZXQgc3VjY2VlZGVkICh1bml0PSVwKVxuIiwgdW5pdCk7Ci0JCXJldHZhbCA9IFNVQ0NFU1M7Ci0JfQotIG91dDoKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiByZXR2YWwgPyBGQUlMRUQgOiBTVUNDRVNTOwogfQogCiBzdGF0aWMgaW50CkBAIC01NTMsNyArNTI4LDcgQEAKIAkJdW5pdC0+ZmNwX2x1biwgdW5pdC0+cG9ydC0+d3dwbiwKIAkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcih1bml0LT5wb3J0LT5hZGFwdGVyKSk7CiAKLQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAxNDEsIHNjcG50KTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCiAJcmV0dXJuIFNVQ0NFU1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzX2FkYXB0ZXIuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnNfYWRhcHRlci5jCmluZGV4IDcwNWM2ZDQuLmNjYmJhNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnNfYWRhcHRlci5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnNfYWRhcHRlci5jCkBAIC04OSw3ICs4OSw3IEBACiAKIAlyZXR2YWwgPSAwOwogCi0JemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCk7CisJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgOTEsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQocG9ydC0+YWRhcHRlcik7CiAJemZjcF9wb3J0X3B1dChwb3J0KTsKICBvdXQ6CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwKTsKKwl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsIDkyLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCXpmY3BfcG9ydF9wdXQocG9ydCk7CiAJemZjcF9wb3J0X2RlcXVldWUocG9ydCk7CkBAIC0xOTEsOSArMTkxLDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywKLQkJCQkgICAgICAgWkZDUF9TRVQpOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKTsKKwl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgNDQsIE5VTEwsCisJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLCBaRkNQX1NFVCk7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsIDkzLAorCQkJCU5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAgb3V0OgogCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc19wb3J0LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzX3BvcnQuYwppbmRleCAxMzIwYzA1Li43MDNjMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzX3BvcnQuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzX3BvcnQuYwpAQCAtOTQsNyArOTQsNyBAQAogCiAJcmV0dmFsID0gMDsKIAotCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDApOworCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDAsIDk0LCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiAgb3V0OgpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXpmY3BfZXJwX3VuaXRfc2h1dGRvd24odW5pdCwgMCk7CisJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCA5NSwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKIAl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogCXpmY3BfdW5pdF9kZXF1ZXVlKHVuaXQpOwpAQCAtMTkzLDggKzE5Myw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXpmY3BfZXJwX21vZGlmeV9wb3J0X3N0YXR1cyhwb3J0LCBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywgWkZDUF9TRVQpOwotCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKTsKKwl6ZmNwX2VycF9tb2RpZnlfcG9ydF9zdGF0dXMocG9ydCwgNDUsIE5VTEwsCisJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLCBaRkNQX1NFVCk7CisJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsIDk2LCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KHBvcnQtPmFkYXB0ZXIpOwogIG91dDoKIAl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnNfdW5pdC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc191bml0LmMKaW5kZXggNjNmNzVlZS4uODBmYjJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc191bml0LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmc191bml0LmMKQEAgLTk0LDggKzk0LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JemZjcF9lcnBfbW9kaWZ5X3VuaXRfc3RhdHVzKHVuaXQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLCBaRkNQX1NFVCk7Ci0JemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOworCXpmY3BfZXJwX21vZGlmeV91bml0X3N0YXR1cyh1bml0LCA0NiwgTlVMTCwKKwkJCQkgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcsIFpGQ1BfU0VUKTsKKwl6ZmNwX2VycF91bml0X3Jlb3Blbih1bml0LCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgOTcsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CiAgb3V0OgogCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYyBiL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMKaW5kZXggMjkxZmY2Mi4uYzNlNGFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYworKysgYi9kcml2ZXJzL3MzOTAvc3lzaW5mby5jCkBAIC0xMSwxMTEgKzExLDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgorI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+CiAKIC8qIFNpZ2gsIG1hdGgtZW11LiBEb24ndCBhc2suICovCiAjaW5jbHVkZSA8YXNtL3NmcC11dGlsLmg+CiAjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCi1zdHJ1Y3Qgc3lzaW5mb18xXzFfMSB7Ci0JY2hhciByZXNlcnZlZF8wWzMyXTsKLQljaGFyIG1hbnVmYWN0dXJlclsxNl07Ci0JY2hhciB0eXBlWzRdOwotCWNoYXIgcmVzZXJ2ZWRfMVsxMl07Ci0JY2hhciBtb2RlbF9jYXBhY2l0eVsxNl07Ci0JY2hhciBzZXF1ZW5jZVsxNl07Ci0JY2hhciBwbGFudFs0XTsKLQljaGFyIG1vZGVsWzE2XTsKLX07Ci0KLXN0cnVjdCBzeXNpbmZvXzFfMl8xIHsKLQljaGFyIHJlc2VydmVkXzBbODBdOwotCWNoYXIgc2VxdWVuY2VbMTZdOwotCWNoYXIgcGxhbnRbNF07Ci0JY2hhciByZXNlcnZlZF8xWzJdOwotCXVuc2lnbmVkIHNob3J0IGNwdV9hZGRyZXNzOwotfTsKLQotc3RydWN0IHN5c2luZm9fMV8yXzIgewotCWNoYXIgZm9ybWF0OwotCWNoYXIgcmVzZXJ2ZWRfMFsxXTsKLQl1bnNpZ25lZCBzaG9ydCBhY2Nfb2Zmc2V0OwotCWNoYXIgcmVzZXJ2ZWRfMVsyNF07Ci0JdW5zaWduZWQgaW50IHNlY29uZGFyeV9jYXBhYmlsaXR5OwotCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OwotCXVuc2lnbmVkIHNob3J0IGNwdXNfdG90YWw7Ci0JdW5zaWduZWQgc2hvcnQgY3B1c19jb25maWd1cmVkOwotCXVuc2lnbmVkIHNob3J0IGNwdXNfc3RhbmRieTsKLQl1bnNpZ25lZCBzaG9ydCBjcHVzX3Jlc2VydmVkOwotCXVuc2lnbmVkIHNob3J0IGFkanVzdG1lbnRbMF07Ci19OwotCi1zdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gewotCXVuc2lnbmVkIGludCBhbHRfY2FwYWJpbGl0eTsKLQl1bnNpZ25lZCBzaG9ydCBhbHRfYWRqdXN0bWVudFswXTsKLX07Ci0KLXN0cnVjdCBzeXNpbmZvXzJfMl8xIHsKLQljaGFyIHJlc2VydmVkXzBbODBdOwotCWNoYXIgc2VxdWVuY2VbMTZdOwotCWNoYXIgcGxhbnRbNF07Ci0JdW5zaWduZWQgc2hvcnQgY3B1X2lkOwotCXVuc2lnbmVkIHNob3J0IGNwdV9hZGRyZXNzOwotfTsKLQotc3RydWN0IHN5c2luZm9fMl8yXzIgewotCWNoYXIgcmVzZXJ2ZWRfMFszMl07Ci0JdW5zaWduZWQgc2hvcnQgbHBhcl9udW1iZXI7Ci0JY2hhciByZXNlcnZlZF8xOwotCXVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyaXN0aWNzOwotCXVuc2lnbmVkIHNob3J0IGNwdXNfdG90YWw7Ci0JdW5zaWduZWQgc2hvcnQgY3B1c19jb25maWd1cmVkOwotCXVuc2lnbmVkIHNob3J0IGNwdXNfc3RhbmRieTsKLQl1bnNpZ25lZCBzaG9ydCBjcHVzX3Jlc2VydmVkOwotCWNoYXIgbmFtZVs4XTsKLQl1bnNpZ25lZCBpbnQgY2FmOwotCWNoYXIgcmVzZXJ2ZWRfMlsxNl07Ci0JdW5zaWduZWQgc2hvcnQgY3B1c19kZWRpY2F0ZWQ7Ci0JdW5zaWduZWQgc2hvcnQgY3B1c19zaGFyZWQ7Ci19OwotCi0jZGVmaW5lIExQQVJfQ0hBUl9ERURJQ0FURUQJKDEgPDwgNykKLSNkZWZpbmUgTFBBUl9DSEFSX1NIQVJFRAkoMSA8PCA2KQotI2RlZmluZSBMUEFSX0NIQVJfTElNSVRFRAkoMSA8PCA1KQotCi1zdHJ1Y3Qgc3lzaW5mb18zXzJfMiB7Ci0JY2hhciByZXNlcnZlZF8wWzMxXTsKLQl1bnNpZ25lZCBjaGFyIGNvdW50OwotCXN0cnVjdCB7Ci0JCWNoYXIgcmVzZXJ2ZWRfMFs0XTsKLQkJdW5zaWduZWQgc2hvcnQgY3B1c190b3RhbDsKLQkJdW5zaWduZWQgc2hvcnQgY3B1c19jb25maWd1cmVkOwotCQl1bnNpZ25lZCBzaG9ydCBjcHVzX3N0YW5kYnk7Ci0JCXVuc2lnbmVkIHNob3J0IGNwdXNfcmVzZXJ2ZWQ7Ci0JCWNoYXIgbmFtZVs4XTsKLQkJdW5zaWduZWQgaW50IGNhZjsKLQkJY2hhciBjcGlbMTZdOwotCQljaGFyIHJlc2VydmVkXzFbMjRdOwotCi0JfSB2bVs4XTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHN0c2kodm9pZCAqc3lzaW5mbywgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCi17Ci0JcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gKGZjIDw8IDI4KSB8IHNlbDE7Ci0JcmVnaXN0ZXIgaW50IHIxIGFzbSgiMSIpID0gc2VsMjsKLQotCWFzbSB2b2xhdGlsZSgKLQkJIiAgIHN0c2kgMCglMilcbiIKLQkJIjA6IGp6ICAgMmZcbiIKLQkJIjE6IGxoaSAgJTAsJTNcbiIKLQkJIjI6XG4iCi0JCUVYX1RBQkxFKDBiLDFiKQotCQk6ICIrZCIgKHIwKSA6ICJkIiAocjEpLCAiYSIgKHN5c2luZm8pLCAiSyIgKC1FTk9TWVMpCi0JCTogImNjIiwgIm1lbW9yeSIgKTsKLQlyZXR1cm4gcjA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHN0c2lfMCh2b2lkKQogewogCWludCByYyA9IHN0c2kgKE5VTEwsIDAsIDAsIDApOwpAQCAtMTMzLDYgKzM1LDggQEAKIAlFQkNBU0MoaW5mby0+c2VxdWVuY2UsIHNpemVvZihpbmZvLT5zZXF1ZW5jZSkpOwogCUVCQ0FTQyhpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7CiAJRUJDQVNDKGluZm8tPm1vZGVsX2NhcGFjaXR5LCBzaXplb2YoaW5mby0+bW9kZWxfY2FwYWNpdHkpKTsKKwlFQkNBU0MoaW5mby0+bW9kZWxfcGVybV9jYXAsIHNpemVvZihpbmZvLT5tb2RlbF9wZXJtX2NhcCkpOworCUVCQ0FTQyhpbmZvLT5tb2RlbF90ZW1wX2NhcCwgc2l6ZW9mKGluZm8tPm1vZGVsX3RlbXBfY2FwKSk7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1hbnVmYWN0dXJlcjogICAgICAgICAlLTE2LjE2c1xuIiwKIAkJICAgICAgIGluZm8tPm1hbnVmYWN0dXJlcik7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlR5cGU6ICAgICAgICAgICAgICAgICAlLTQuNHNcbiIsCkBAIC0xNTUsOCArNTksMTggQEAKIAkJICAgICAgIGluZm8tPnNlcXVlbmNlKTsKIAlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiUGxhbnQ6ICAgICAgICAgICAgICAgICUtNC40c1xuIiwKIAkJICAgICAgIGluZm8tPnBsYW50KTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWwgQ2FwYWNpdHk6ICAgICAgICUtMTYuMTZzXG4iLAotCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHkpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJNb2RlbCBDYXBhY2l0eTogICAgICAgJS0xNi4xNnMgJTA4dVxuIiwKKwkJICAgICAgIGluZm8tPm1vZGVsX2NhcGFjaXR5LCAqKHUzMiAqKSBpbmZvLT5tb2RlbF9jYXBfcmF0aW5nKTsKKwlpZiAoaW5mby0+bW9kZWxfcGVybV9jYXBbMF0gIT0gJ1wwJykKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCSAgICAgICAiTW9kZWwgUGVybS4gQ2FwYWNpdHk6ICUtMTYuMTZzICUwOHVcbiIsCisJCQkgICAgICAgaW5mby0+bW9kZWxfcGVybV9jYXAsCisJCQkgICAgICAgKih1MzIgKikgaW5mby0+bW9kZWxfcGVybV9jYXBfcmF0aW5nKTsKKwlpZiAoaW5mby0+bW9kZWxfdGVtcF9jYXBbMF0gIT0gJ1wwJykKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCSAgICAgICAiTW9kZWwgVGVtcC4gQ2FwYWNpdHk6ICUtMTYuMTZzICUwOHVcbiIsCisJCQkgICAgICAgaW5mby0+bW9kZWxfdGVtcF9jYXAsCisJCQkgICAgICAgKih1MzIgKikgaW5mby0+bW9kZWxfdGVtcF9jYXBfcmF0aW5nKTsKIAlyZXR1cm4gbGVuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwppbmRleCBiNDkxMmQxLi5iMzFmYWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKQEAgLTE0MCw5ICsxNDAsMTAgQEAKIC8qIEZ1bmN0aW9ucyAqLwogCiAvKiBTaG93IHNvbWUgc3RhdGlzdGljcyBhYm91dCB0aGUgY2FyZCAqLwotc3RhdGljIHNzaXplX3QgdHdhX3Nob3dfc3RhdHMoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCB0d2Ffc2hvd19zdGF0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCVRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiA9IChUV19EZXZpY2VfRXh0ZW5zaW9uICopaG9zdC0+aG9zdGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJc3NpemVfdCBsZW47CkBAIC0xODQsNyArMTg1LDcgQEAKIH0gLyogRW5kIHR3YV9jaGFuZ2VfcXVldWVfZGVwdGgoKSAqLwogCiAvKiBDcmVhdGUgc3lzZnMgJ3N0YXRzJyBlbnRyeSAqLwotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHR3YV9ob3N0X3N0YXRzX2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdHdhX2hvc3Rfc3RhdHNfYXR0ciA9IHsKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAJInN0YXRzIiwKIAkJLm1vZGUgPQkJU19JUlVHTywKQEAgLTE5Myw3ICsxOTQsNyBAQAogfTsKIAogLyogSG9zdCBhdHRyaWJ1dGVzIGluaXRpYWxpemVyICovCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnR3YV9ob3N0X2F0dHJzW10gPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnR3YV9ob3N0X2F0dHJzW10gPSB7CiAJJnR3YV9ob3N0X3N0YXRzX2F0dHIsCiAJTlVMTCwKIH07CkBAIC0xODM4LDEyICsxODM5LDExIEBACiAJCWlmIChzY3NpX3NnX2NvdW50KHNyYikpIHsKIAkJCWlmICgoc2NzaV9zZ19jb3VudChzcmIpID09IDEpICYmCiAJCQkgICAgKHNjc2lfYnVmZmxlbihzcmIpIDwgVFdfTUlOX1NHTF9MRU5HVEgpKSB7Ci0JCQkJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSB8fCBzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMKSB7Ci0JCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzY3NpX3NnbGlzdChzcmIpOwotCQkJCQljaGFyICpidWYgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OwotCQkJCQltZW1jcHkodHdfZGV2LT5nZW5lcmljX2J1ZmZlcl92aXJ0W3JlcXVlc3RfaWRdLCBidWYsIHNnLT5sZW5ndGgpOwotCQkJCQlrdW5tYXBfYXRvbWljKGJ1ZiAtIHNnLT5vZmZzZXQsIEtNX0lSUTApOwotCQkJCX0KKwkJCQlpZiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFIHx8CisJCQkJICAgIHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNUSU9OQUwpCisJCQkJCXNjc2lfc2dfY29weV90b19idWZmZXIoc3JiLAorCQkJCQkJCSAgICAgICB0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3ZpcnRbcmVxdWVzdF9pZF0sCisJCQkJCQkJICAgICAgIFRXX1NFQ1RPUl9TSVpFKTsKIAkJCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFswXS5hZGRyZXNzID0gVFdfQ1BVX1RPX1NHTCh0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3BoeXNbcmVxdWVzdF9pZF0pOwogCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0WzBdLmxlbmd0aCA9IGNwdV90b19sZTMyKFRXX01JTl9TR0xfTEVOR1RIKTsKIAkJCX0gZWxzZSB7CkBAIC0xOTE1LDEzICsxOTE1LDExIEBACiAJICAgIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSB8fAogCSAgICAgY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkpIHsKIAkJaWYgKHNjc2lfc2dfY291bnQoY21kKSA9PSAxKSB7Ci0JCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2NzaV9zZ2xpc3QodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0pOwotCQkJY2hhciAqYnVmOwotCQkJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJdm9pZCAqYnVmID0gdHdfZGV2LT5nZW5lcmljX2J1ZmZlcl92aXJ0W3JlcXVlc3RfaWRdOworCiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlidWYgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OwotCQkJbWVtY3B5KGJ1ZiwgdHdfZGV2LT5nZW5lcmljX2J1ZmZlcl92aXJ0W3JlcXVlc3RfaWRdLCBzZy0+bGVuZ3RoKTsKLQkJCWt1bm1hcF9hdG9taWMoYnVmIC0gc2ctPm9mZnNldCwgS01fSVJRMCk7CisJCQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoY21kLCBidWYsIFRXX1NFQ1RPUl9TSVpFKTsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJfQogCX0KQEAgLTIwMjgsOCArMjAyNiw2IEBACiAJfQogCXR3X2RldiA9IChUV19EZXZpY2VfRXh0ZW5zaW9uICopaG9zdC0+aG9zdGRhdGE7CiAKLQltZW1zZXQodHdfZGV2LCAwLCBzaXplb2YoVFdfRGV2aWNlX0V4dGVuc2lvbikpOwotCiAJLyogU2F2ZSB2YWx1ZXMgdG8gZGV2aWNlIGV4dGVuc2lvbiAqLwogCXR3X2Rldi0+aG9zdCA9IGhvc3Q7CiAJdHdfZGV2LT50d19wY2lfZGV2ID0gcGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCmluZGV4IGQwOTUzMjEuLjhjMjIzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguYwpAQCAtNDg0LDkgKzQ4NCwxMCBAQAogfSAvKiBFbmQgdHdfc3RhdGVfcmVxdWVzdF9zdGFydCgpICovCiAKIC8qIFNob3cgc29tZSBzdGF0aXN0aWNzIGFib3V0IHRoZSBjYXJkICovCi1zdGF0aWMgc3NpemVfdCB0d19zaG93X3N0YXRzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdHdfc2hvd19zdGF0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2ID0gKFRXX0RldmljZV9FeHRlbnNpb24gKilob3N0LT5ob3N0ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzc2l6ZV90IGxlbjsKQEAgLTUyOCw3ICs1MjksNyBAQAogfSAvKiBFbmQgdHdfY2hhbmdlX3F1ZXVlX2RlcHRoKCkgKi8KIAogLyogQ3JlYXRlIHN5c2ZzICdzdGF0cycgZW50cnkgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSB0d19ob3N0X3N0YXRzX2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdHdfaG9zdF9zdGF0c19hdHRyID0gewogCS5hdHRyID0gewogCQkubmFtZSA9IAkic3RhdHMiLAogCQkubW9kZSA9CQlTX0lSVUdPLApAQCAtNTM3LDcgKzUzOCw3IEBACiB9OwogCiAvKiBIb3N0IGF0dHJpYnV0ZXMgaW5pdGlhbGl6ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqdHdfaG9zdF9hdHRyc1tdID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICp0d19ob3N0X2F0dHJzW10gPSB7CiAJJnR3X2hvc3Rfc3RhdHNfYXR0ciwKIAlOVUxMLAogfTsKQEAgLTE0NjMsMTggKzE0NjQsMTAgQEAKIAkJCQkgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSB0d19kZXYtPnNyYltyZXF1ZXN0X2lkXTsKLQl2b2lkICpidWY7Ci0JdW5zaWduZWQgaW50IHRyYW5zZmVyX2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2NzaV9zZ2xpc3QoY21kKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWJ1ZiA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7Ci0JdHJhbnNmZXJfbGVuID0gbWluKHNnLT5sZW5ndGgsIGxlbik7Ci0KLQltZW1jcHkoYnVmLCBkYXRhLCB0cmFuc2Zlcl9sZW4pOwotCi0Ja3VubWFwX2F0b21pYyhidWYgLSBzZy0+b2Zmc2V0LCBLTV9JUlEwKTsKKwlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoY21kLCBkYXRhLCBsZW4pOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjI5NCw4ICsyMjg3LDYgQEAKIAl9CiAJdHdfZGV2ID0gKFRXX0RldmljZV9FeHRlbnNpb24gKilob3N0LT5ob3N0ZGF0YTsKIAotCW1lbXNldCh0d19kZXYsIDAsIHNpemVvZihUV19EZXZpY2VfRXh0ZW5zaW9uKSk7Ci0KIAkvKiBTYXZlIHZhbHVlcyB0byBkZXZpY2UgZXh0ZW5zaW9uICovCiAJdHdfZGV2LT5ob3N0ID0gaG9zdDsKIAl0d19kZXYtPnR3X3BjaV9kZXYgPSBwZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmMgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwppbmRleCA0ZDNlYmIxLi4yZDY4OWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYworKysgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwpAQCAtODk2LDcgKzg5Niw3IEBACiAJCUlSUV9DaGFubmVsID0gUENJX0RldmljZS0+aXJxOwogCQlJT19BZGRyZXNzID0gQmFzZUFkZHJlc3MwID0gcGNpX3Jlc291cmNlX3N0YXJ0KFBDSV9EZXZpY2UsIDApOwogCQlQQ0lfQWRkcmVzcyA9IEJhc2VBZGRyZXNzMSA9IHBjaV9yZXNvdXJjZV9zdGFydChQQ0lfRGV2aWNlLCAxKTsKLSNpZm5kZWYgQ09ORklHX1NDU0lfT01JVF9GTEFTSFBPSU5UCisjaWZkZWYgQ09ORklHX1NDU0lfRkxBU0hQT0lOVAogCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKFBDSV9EZXZpY2UsIDApICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJCUJ1c0xvZ2ljX0Vycm9yKCJCdXNMb2dpYzogQmFzZSBBZGRyZXNzMCAweCVYIG5vdCBJL08gZm9yICIgIkZsYXNoUG9pbnQgSG9zdCBBZGFwdGVyXG4iLCBOVUxMLCBCYXNlQWRkcmVzczApOwogCQkJQnVzTG9naWNfRXJyb3IoImF0IFBDSSBCdXMgJWQgRGV2aWNlICVkIEkvTyBBZGRyZXNzIDB4JVhcbiIsIE5VTEwsIEJ1cywgRGV2aWNlLCBJT19BZGRyZXNzKTsKQEAgLTEwMDYsNiArMTAwNiw5IEBACiB9CiAKIAorI2Vsc2UKKyNkZWZpbmUgQnVzTG9naWNfSW5pdGlhbGl6ZVByb2JlSW5mb0xpc3QoYWRhcHRlcikgXAorCQlCdXNMb2dpY19Jbml0aWFsaXplUHJvYmVJbmZvTGlzdElTQShhZGFwdGVyKQogI2VuZGlmCQkJCS8qIENPTkZJR19QQ0kgKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuaCBiL2RyaXZlcnMvc2NzaS9CdXNMb2dpYy5oCmluZGV4IGJmYmZiNWMuLjczZjIzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9CdXNMb2dpYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9CdXNMb2dpYy5oCkBAIC0zNCwyMyArMzQsNiBAQAogI2VuZGlmCiAKIC8qCi0gIEZsYXNoUG9pbnQgc3VwcG9ydCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIEludGVsIHg4NiBBcmNoaXRlY3R1cmUgd2l0aAotICBDT05GSUdfUENJIHNldC4KLSovCi0KLSNpZm5kZWYgX19pMzg2X18KLSN1bmRlZiBDT05GSUdfU0NTSV9PTUlUX0ZMQVNIUE9JTlQKLSNkZWZpbmUgQ09ORklHX1NDU0lfT01JVF9GTEFTSFBPSU5UCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfUENJCi0jdW5kZWYgQ09ORklHX1NDU0lfT01JVF9GTEFTSFBPSU5UCi0jZGVmaW5lIENPTkZJR19TQ1NJX09NSVRfRkxBU0hQT0lOVAotI2RlZmluZSBCdXNMb2dpY19Jbml0aWFsaXplUHJvYmVJbmZvTGlzdElTQSBCdXNMb2dpY19Jbml0aWFsaXplUHJvYmVJbmZvTGlzdAotI2VuZGlmCi0KLQotLyoKICAgRGVmaW5lIHRoZSBtYXhpbXVtIG51bWJlciBvZiBCdXNMb2dpYyBIb3N0IEFkYXB0ZXJzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KICovCiAKQEAgLTE3OCw3ICsxNjEsNyBAQAogICBEZWZpbmUgbWFjcm9zIGZvciB0ZXN0aW5nIHRoZSBIb3N0IEFkYXB0ZXIgVHlwZS4KICovCiAKLSNpZm5kZWYgQ09ORklHX1NDU0lfT01JVF9GTEFTSFBPSU5UCisjaWZkZWYgQ09ORklHX1NDU0lfRkxBU0hQT0lOVAogCiAjZGVmaW5lIEJ1c0xvZ2ljX011bHRpTWFzdGVySG9zdEFkYXB0ZXJQKEhvc3RBZGFwdGVyKSBcCiAgIChIb3N0QWRhcHRlci0+SG9zdEFkYXB0ZXJUeXBlID09IEJ1c0xvZ2ljX011bHRpTWFzdGVyKQpAQCAtODcxLDcgKzg1NCw3IEBACiAJdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pIChzdHJ1Y3QgQnVzTG9naWNfQ0NCICopOwkvKiBCeXRlcyA0MC00MyAqLwogCXUzMiBCYXNlQWRkcmVzczsJLyogQnl0ZXMgNDQtNDcgKi8KIAllbnVtIEJ1c0xvZ2ljX0NvbXBsZXRpb25Db2RlIENvbXBsZXRpb25Db2RlOwkvKiBCeXRlIDQ4ICovCi0jaWZuZGVmIENPTkZJR19TQ1NJX09NSVRfRkxBU0hQT0lOVAorI2lmZGVmIENPTkZJR19TQ1NJX0ZMQVNIUE9JTlQKIAl1bnNpZ25lZCBjaGFyOjg7CS8qIEJ5dGUgNDkgKi8KIAl1bnNpZ25lZCBzaG9ydCBPU19GbGFnczsJLyogQnl0ZXMgNTAtNTEgKi8KIAl1bnNpZ25lZCBjaGFyIFByaXZhdGVbNDhdOwkvKiBCeXRlcyA1Mi05OSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKaW5kZXggMWM5MDc4MS4uYjM3NGU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYworKysgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCkBAIC0xNiw3ICsxNiw3IEBACiAqLwogCiAKLSNpZm5kZWYgQ09ORklHX1NDU0lfT01JVF9GTEFTSFBPSU5UCisjaWZkZWYgQ09ORklHX1NDU0lfRkxBU0hQT0lOVAogCiAjZGVmaW5lIE1BWF9DQVJEUwk4CiAjdW5kZWYgQlVTVFlQRV9QQ0kKQEAgLTc2MjYsNyArNzYyNiw3IEBACiAjZGVmaW5lIEZsYXNoUG9pbnRfSW50ZXJydXB0UGVuZGluZwkgICAgRmxhc2hQb2ludF9fSW50ZXJydXB0UGVuZGluZwogI2RlZmluZSBGbGFzaFBvaW50X0hhbmRsZUludGVycnVwdAkgICAgRmxhc2hQb2ludF9fSGFuZGxlSW50ZXJydXB0CiAKLSNlbHNlCQkJCS8qIENPTkZJR19TQ1NJX09NSVRfRkxBU0hQT0lOVCAqLworI2Vsc2UJCQkJLyogIUNPTkZJR19TQ1NJX0ZMQVNIUE9JTlQgKi8KIAogLyoKICAgRGVmaW5lIHByb3RvdHlwZXMgZm9yIHRoZSBGbGFzaFBvaW50IFNDQ0IgTWFuYWdlciBGdW5jdGlvbnMuCkBAIC03NjQxLDQgKzc2NDEsNCBAQAogZXh0ZXJuIGludCBGbGFzaFBvaW50X0hhbmRsZUludGVycnVwdChGbGFzaFBvaW50X0NhcmRIYW5kbGVfVCk7CiBleHRlcm4gdm9pZCBGbGFzaFBvaW50X1JlbGVhc2VIb3N0QWRhcHRlcihGbGFzaFBvaW50X0NhcmRIYW5kbGVfVCk7CiAKLSNlbmRpZgkJCQkvKiBDT05GSUdfU0NTSV9PTUlUX0ZMQVNIUE9JTlQgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfU0NTSV9GTEFTSFBPSU5UICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IGE3YTA4MTMuLjdmNzhlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0zMjUsNyArMzI1LDcgQEAKIAlkZXBlbmRzIG9uIFNDU0khPW4KIAlkZWZhdWx0IHkKIAotaWYgU0NTSV9MT1dMRVZFTAoraWYgU0NTSV9MT1dMRVZFTCAmJiBTQ1NJCiAKIGNvbmZpZyBJU0NTSV9UQ1AKIAl0cmlzdGF0ZSAiaVNDU0kgSW5pdGlhdG9yIG92ZXIgVENQL0lQIgpAQCAtNTg4LDE4ICs1ODgsMjAgQEAKIAkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4sIGFuZCB0aGUgZmlsZXMKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vc2NzaS9CdXNMb2dpYy50eHQ+IGFuZAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwkgIE5vdGUgdGhhdCBzdXBwb3J0IGZvciBGbGFzaFBvaW50IGlzIG9ubHkgYXZhaWxhYmxlIGZvciAzMi1iaXQKKwkgIHg4NiBjb25maWd1cmF0aW9ucy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgQnVzTG9naWMuCiAKLWNvbmZpZyBTQ1NJX09NSVRfRkxBU0hQT0lOVAotCWJvb2wgIk9taXQgRmxhc2hQb2ludCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0NTSV9CVVNMT0dJQworY29uZmlnIFNDU0lfRkxBU0hQT0lOVAorCWJvb2wgIkZsYXNoUG9pbnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNDU0lfQlVTTE9HSUMgJiYgUENJICYmIFg4Nl8zMgogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gb21pdCB0aGUgRmxhc2hQb2ludCBzdXBwb3J0IGZyb20gdGhlCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGFkZCBGbGFzaFBvaW50IHN1cHBvcnQgdG8gdGhlCiAJICBCdXNMb2dpYyBTQ1NJIGRyaXZlci4gVGhlIEZsYXNoUG9pbnQgU0NDQiBNYW5hZ2VyIGNvZGUgaXMKLQkgIHN1YnN0YW50aWFsLCBzbyB1c2VycyBvZiBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXJzIG1heSB3aXNoIHRvIG9taXQKLQkgIGl0LgorCSAgc3Vic3RhbnRpYWwsIHNvIHVzZXJzIG9mIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMgbWF5IG5vdAorCSAgd2lzaCB0byBpbmNsdWRlIGl0LgogCiBjb25maWcgU0NTSV9ETVgzMTkxRAogCXRyaXN0YXRlICJETVgzMTkxRCBTQ1NJIHN1cHBvcnQiCkBAIC05OTIsNiArOTk0LDE2IEBACiAKIAkgIEdlbmVyYWxseSwgc2F5aW5nIE4gaXMgZmluZS4KIAorY29uZmlnIFNDU0lfTVZTQVMKKwl0cmlzdGF0ZSAiTWFydmVsbCA4OFNFNjQ0MCBTQVMvU0FUQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9TQVNfTElCU0FTCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCBTQVMvU0FUQSBQQ0kgZGV2aWNlcy4KKworCSAgVG8gY29tcGlsZXIgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG12c2FzLgorCiBjb25maWcgU0NTSV9OQ1I1M0M0MDZBCiAJdHJpc3RhdGUgIk5DUjUzYzQwNmEgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVNBICYmIFNDU0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCA5MjVjMjZiLi4yM2U2ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC0xMTksNiArMTE5LDcgQEAKIG9iai0kKENPTkZJR19TQ1NJX0lCTVZTQ1NJUykJKz0gaWJtdnNjc2kvCiBvYmotJChDT05GSUdfU0NTSV9IUFRJT1ApCSs9IGhwdGlvcC5vCiBvYmotJChDT05GSUdfU0NTSV9TVEVYKQkJKz0gc3RleC5vCitvYmotJChDT05GSUdfU0NTSV9NVlNBUykJKz0gbXZzYXMubwogb2JqLSQoQ09ORklHX1BTM19ST00pCQkrPSBwczNyb20ubwogCiBvYmotJChDT05GSUdfQVJNKQkJKz0gYXJtLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ExMDB1MncuYyBiL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMKaW5kZXggZjYwOGQ0YS4uNzkyYjJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ExMDB1MncuYworKysgYi9kcml2ZXJzL3Njc2kvYTEwMHUydy5jCkBAIC02NzQsMTIgKzY3NCwxMyBAQAogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzMjsgaW5kZXgrKykgewogCQkJaWYgKChob3N0LT5hbGxvY2F0aW9uX21hcFtjaGFubmVsXVtpXSA+PiBpbmRleCkgJiAweDAxKSB7CiAJCQkJaG9zdC0+YWxsb2NhdGlvbl9tYXBbY2hhbm5lbF1baV0gJj0gfigxIDw8IGluZGV4KTsKLQkJCQlicmVhazsKKwkJCQlpZHggPSBpbmRleCArIDMyICogaTsKKwkJCQkvKgorCQkJCSAqIFRyYW5zbGF0ZSB0aGUgaW5kZXggdG8gYSBzdHJ1Y3R1cmUgaW5zdGFuY2UKKwkJCQkgKi8KKwkJCQlyZXR1cm4gaG9zdC0+c2NiX3ZpcnQgKyBpZHg7CiAJCQl9CiAJCX0KLQkJaWR4ID0gaW5kZXggKyAzMiAqIGk7Ci0JCS8qIFRyYW5zbGF0ZSB0aGUgaW5kZXggdG8gYSBzdHJ1Y3R1cmUgaW5zdGFuY2UgKi8KLQkJcmV0dXJuIChzdHJ1Y3Qgb3JjX3NjYiAqKSAoKHVuc2lnbmVkIGxvbmcpIGhvc3QtPnNjYl92aXJ0ICsgKGlkeCAqIHNpemVvZihzdHJ1Y3Qgb3JjX3NjYikpKTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTIwOTEuYyBiL2RyaXZlcnMvc2NzaS9hMjA5MS5jCmluZGV4IDVhYzNhM2UuLjA3ZDU3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hMjA5MS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hMjA5MS5jCkBAIC0xNzksNiArMTc5LDkgQEAKIAlETUEoaW5zdGFuY2UpLT5EQVdSID0gREFXUl9BMjA5MTsKIAlyZWdzLlNBU1IgPSAmKERNQShpbnN0YW5jZSktPlNBU1IpOwogCXJlZ3MuU0NNRCA9ICYoRE1BKGluc3RhbmNlKS0+U0NNRCk7CisJSERBVEEoaW5zdGFuY2UpLT5ub19zeW5jID0gMHhmZjsKKwlIREFUQShpbnN0YW5jZSktPmZhc3QgPSAwOworCUhEQVRBKGluc3RhbmNlKS0+ZG1hX21vZGUgPSBDVFJMX0RNQTsKIAl3ZDMzYzkzX2luaXQoaW5zdGFuY2UsIHJlZ3MsIGRtYV9zZXR1cCwgZG1hX3N0b3AsIFdEMzNDOTNfRlNfOF8xMCk7CiAJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBhMjA5MV9pbnRyLCBJUlFGX1NIQVJFRCwgIkEyMDkxIFNDU0kiLAogCQkgICAgaW5zdGFuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2EzMDAwLmMgYi9kcml2ZXJzL3Njc2kvYTMwMDAuYwppbmRleCAzYWVlYzk2Li44YjQ0OWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYTMwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvYTMwMDAuYwpAQCAtMTc4LDYgKzE3OCw5IEBACiAgICAgRE1BKGEzMDAwX2hvc3QpLT5EQVdSID0gREFXUl9BMzAwMDsKICAgICByZWdzLlNBU1IgPSAmKERNQShhMzAwMF9ob3N0KS0+U0FTUik7CiAgICAgcmVncy5TQ01EID0gJihETUEoYTMwMDBfaG9zdCktPlNDTUQpOworICAgIEhEQVRBKGEzMDAwX2hvc3QpLT5ub19zeW5jID0gMHhmZjsKKyAgICBIREFUQShhMzAwMF9ob3N0KS0+ZmFzdCA9IDA7CisgICAgSERBVEEoYTMwMDBfaG9zdCktPmRtYV9tb2RlID0gQ1RSTF9ETUE7CiAgICAgd2QzM2M5M19pbml0KGEzMDAwX2hvc3QsIHJlZ3MsIGRtYV9zZXR1cCwgZG1hX3N0b3AsIFdEMzNDOTNfRlNfMTJfMTUpOwogICAgIGlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGEzMDAwX2ludHIsIElSUUZfU0hBUkVELCAiQTMwMDAgU0NTSSIsCiAJCSAgICBhMzAwMF9pbnRyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKaW5kZXggYzA1MDkyZi4uNDYwZDQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4gLyogRm9yIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZSAqLwogCkBAIC0yMDUsNyArMjA0LDcgQEAKIAogaW50IGFhY19jaGVja19yZXNldCA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQoY2hlY2tfcmVzZXQsIGFhY19jaGVja19yZXNldCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhhYWNfY2hlY2tfcmVzZXQsICJJZiBhZGFwdGVyIGZhaWxzIGhlYWx0aCBjaGVjaywgcmVzZXQgdGhlIgorTU9EVUxFX1BBUk1fREVTQyhjaGVja19yZXNldCwgIklmIGFkYXB0ZXIgZmFpbHMgaGVhbHRoIGNoZWNrLCByZXNldCB0aGUiCiAJIiBhZGFwdGVyLiBhIHZhbHVlIG9mIC0xIGZvcmNlcyB0aGUgcmVzZXQgdG8gYWRhcHRlcnMgcHJvZ3JhbW1lZCB0byIKIAkiIGlnbm9yZSBpdC4iKTsKIApAQCAtMzc5LDI0ICszNzgsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIGFhY19pbnRlcm5hbF90cmFuc2ZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXZvaWQgKmJ1ZjsKLQlpbnQgdHJhbnNmZXJfbGVuOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzY3NpX3NnbGlzdChzY3NpY21kKTsKLQotCWJ1ZiA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7Ci0JdHJhbnNmZXJfbGVuID0gbWluKHNnLT5sZW5ndGgsIGxlbiArIG9mZnNldCk7Ci0KLQl0cmFuc2Zlcl9sZW4gLT0gb2Zmc2V0OwotCWlmIChidWYgJiYgdHJhbnNmZXJfbGVuID4gMCkKLQkJbWVtY3B5KGJ1ZiArIG9mZnNldCwgZGF0YSwgdHJhbnNmZXJfbGVuKTsKLQotCWZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShrbWFwX2F0b21pY190b19wYWdlKGJ1ZiAtIHNnLT5vZmZzZXQpKTsKLQlrdW5tYXBfYXRvbWljKGJ1ZiAtIHNnLT5vZmZzZXQsIEtNX0lSUTApOwotCi19Ci0KIHN0YXRpYyB2b2lkIGdldF9jb250YWluZXJfbmFtZV9jYWxsYmFjayh2b2lkICpjb250ZXh0LCBzdHJ1Y3QgZmliICogZmlicHRyKQogewogCXN0cnVjdCBhYWNfZ2V0X25hbWVfcmVzcCAqIGdldF9uYW1lX3JlcGx5OwpAQCAtNDE5LDE0ICs0MDAsMTcgQEAKIAkJd2hpbGUgKCpzcCA9PSAnICcpCiAJCQkrK3NwOwogCQlpZiAoKnNwKSB7CisJCQlzdHJ1Y3QgaW5xdWlyeV9kYXRhIGlucTsKIAkJCWNoYXIgZFtzaXplb2YoKChzdHJ1Y3QgaW5xdWlyeV9kYXRhICopTlVMTCktPmlucWRfcGlkKV07CiAJCQlpbnQgY291bnQgPSBzaXplb2YoZCk7CiAJCQljaGFyICpkcCA9IGQ7CiAJCQlkbyB7CiAJCQkJKmRwKysgPSAoKnNwKSA/ICpzcCsrIDogJyAnOwogCQkJfSB3aGlsZSAoLS1jb3VudCA+IDApOwotCQkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIGQsCi0JCQkgIG9mZnNldG9mKHN0cnVjdCBpbnF1aXJ5X2RhdGEsIGlucWRfcGlkKSwgc2l6ZW9mKGQpKTsKKworCQkJc2NzaV9zZ19jb3B5X3RvX2J1ZmZlcihzY3NpY21kLCAmaW5xLCBzaXplb2YoaW5xKSk7CisJCQltZW1jcHkoaW5xLmlucWRfcGlkLCBkLCBzaXplb2YoZCkpOworCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsICZpbnEsIHNpemVvZihpbnEpKTsKIAkJfQogCX0KIApAQCAtODExLDcgKzc5NSw3IEBACiAJCXNwWzJdID0gMDsKIAkJc3BbM10gPSBzbnByaW50ZihzcCs0LCBzaXplb2Yoc3ApLTQsICIlMDhYIiwKIAkJICBsZTMyX3RvX2NwdShnZXRfc2VyaWFsX3JlcGx5LT51aWQpKTsKLQkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIHNwLCAwLCBzaXplb2Yoc3ApKTsKKwkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsIHNwLCBzaXplb2Yoc3ApKTsKIAl9CiAKIAlzY3NpY21kLT5yZXN1bHQgPSBESURfT0sgPDwgMTYgfCBDT01NQU5EX0NPTVBMRVRFIDw8IDggfCBTQU1fU1RBVF9HT09EOwpAQCAtMTMzMSw3ICsxMzE1LDcgQEAKIAkJCXRtcD4+MjQsKHRtcD4+MTYpJjB4ZmYsdG1wJjB4ZmYsCiAJCQlsZTMyX3RvX2NwdShkZXYtPmFkYXB0ZXJfaW5mby5iaW9zYnVpbGQpKTsKIAkJYnVmZmVyWzBdID0gJ1wwJzsKLQkJaWYgKGFhY19zaG93X3NlcmlhbF9udW1iZXIoCisJCWlmIChhYWNfZ2V0X3NlcmlhbF9udW1iZXIoCiAJCSAgc2hvc3RfdG9fY2xhc3MoZGV2LT5zY3NpX2hvc3RfcHRyKSwgYnVmZmVyKSkKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzJWQ6IHNlcmlhbCAlcyIsCiAJCQkgIGRldi0+bmFtZSwgZGV2LT5pZCwgYnVmZmVyKTsKQEAgLTE5ODYsOCArMTk3MCw4IEBACiAJCQkJYXJyWzRdID0gMHgwOwogCQkJCWFycls1XSA9IDB4ODA7CiAJCQkJYXJyWzFdID0gc2NzaWNtZC0+Y21uZFsyXTsKLQkJCQlhYWNfaW50ZXJuYWxfdHJhbnNmZXIoc2NzaWNtZCwgJmlucV9kYXRhLCAwLAotCQkJCSAgc2l6ZW9mKGlucV9kYXRhKSk7CisJCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsICZpbnFfZGF0YSwKKwkJCQkJCQkgc2l6ZW9mKGlucV9kYXRhKSk7CiAJCQkJc2NzaWNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2IHwKIAkJCQkgIENPTU1BTkRfQ09NUExFVEUgPDwgOCB8IFNBTV9TVEFUX0dPT0Q7CiAJCQl9IGVsc2UgaWYgKHNjc2ljbWQtPmNtbmRbMl0gPT0gMHg4MCkgewpAQCAtMTk5NSw4ICsxOTc5LDggQEAKIAkJCQlhcnJbM10gPSBzZXRpbnFzZXJpYWwoZGV2LCAmYXJyWzRdLAogCQkJCSAgc2NtZF9pZChzY3NpY21kKSk7CiAJCQkJYXJyWzFdID0gc2NzaWNtZC0+Y21uZFsyXTsKLQkJCQlhYWNfaW50ZXJuYWxfdHJhbnNmZXIoc2NzaWNtZCwgJmlucV9kYXRhLCAwLAotCQkJCSAgc2l6ZW9mKGlucV9kYXRhKSk7CisJCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsICZpbnFfZGF0YSwKKwkJCQkJCQkgc2l6ZW9mKGlucV9kYXRhKSk7CiAJCQkJcmV0dXJuIGFhY19nZXRfY29udGFpbmVyX3NlcmlhbChzY3NpY21kKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogdnBkIHBhZ2Ugbm90IGltcGxlbWVudGVkICovCkBAIC0yMDI3LDcgKzIwMTEsOCBAQAogCQlpZiAoY2lkID09IGhvc3QtPnRoaXNfaWQpIHsKIAkJCXNldGlucXN0cihkZXYsICh2b2lkICopIChpbnFfZGF0YS5pbnFkX3ZpZCksIEFSUkFZX1NJWkUoY29udGFpbmVyX3R5cGVzKSk7CiAJCQlpbnFfZGF0YS5pbnFkX3BkdCA9IElOUURfUERUX1BST0M7CS8qIFByb2Nlc3NvciBkZXZpY2UgKi8KLQkJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCAmaW5xX2RhdGEsIDAsIHNpemVvZihpbnFfZGF0YSkpOworCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsICZpbnFfZGF0YSwKKwkJCQkJCSBzaXplb2YoaW5xX2RhdGEpKTsKIAkJCXNjc2ljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNiB8IENPTU1BTkRfQ09NUExFVEUgPDwgOCB8IFNBTV9TVEFUX0dPT0Q7CiAJCQlzY3NpY21kLT5zY3NpX2RvbmUoc2NzaWNtZCk7CiAJCQlyZXR1cm4gMDsKQEAgLTIwMzYsNyArMjAyMSw3IEBACiAJCQlyZXR1cm4gLTE7CiAJCXNldGlucXN0cihkZXYsICh2b2lkICopIChpbnFfZGF0YS5pbnFkX3ZpZCksIGZzYV9kZXZfcHRyW2NpZF0udHlwZSk7CiAJCWlucV9kYXRhLmlucWRfcGR0ID0gSU5RRF9QRFRfREE7CS8qIERpcmVjdC9yYW5kb20gYWNjZXNzIGRldmljZSAqLwotCQlhYWNfaW50ZXJuYWxfdHJhbnNmZXIoc2NzaWNtZCwgJmlucV9kYXRhLCAwLCBzaXplb2YoaW5xX2RhdGEpKTsKKwkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsICZpbnFfZGF0YSwgc2l6ZW9mKGlucV9kYXRhKSk7CiAJCXJldHVybiBhYWNfZ2V0X2NvbnRhaW5lcl9uYW1lKHNjc2ljbWQpOwogCX0KIAljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgpAQCAtMjA0Nyw2ICsyMDMyLDcgQEAKIAl7CiAJCXU2NCBjYXBhY2l0eTsKIAkJY2hhciBjcFsxM107CisJCXVuc2lnbmVkIGludCBhbGxvY19sZW47CiAKIAkJZHByaW50aygoS0VSTl9ERUJVRyAiUkVBRCBDQVBBQ0lUWV8xNiBjb21tYW5kLlxuIikpOwogCQljYXBhY2l0eSA9IGZzYV9kZXZfcHRyW2NpZF0uc2l6ZSAtIDE7CkBAIC0yMDYzLDE4ICsyMDQ5LDE2IEBACiAJCWNwWzEwXSA9IDI7CiAJCWNwWzExXSA9IDA7CiAJCWNwWzEyXSA9IDA7Ci0JCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgMCwKLQkJICBtaW5fdChzaXplX3QsIHNjc2ljbWQtPmNtbmRbMTNdLCBzaXplb2YoY3ApKSk7Ci0JCWlmIChzaXplb2YoY3ApIDwgc2NzaWNtZC0+Y21uZFsxM10pIHsKLQkJCXVuc2lnbmVkIGludCBsZW4sIG9mZnNldCA9IHNpemVvZihjcCk7CiAKLQkJCW1lbXNldChjcCwgMCwgb2Zmc2V0KTsKLQkJCWRvIHsKLQkJCQlsZW4gPSBtaW5fdChzaXplX3QsIHNjc2ljbWQtPmNtbmRbMTNdIC0gb2Zmc2V0LAotCQkJCQkJc2l6ZW9mKGNwKSk7Ci0JCQkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIGNwLCBvZmZzZXQsIGxlbik7Ci0JCQl9IHdoaWxlICgob2Zmc2V0ICs9IGxlbikgPCBzY3NpY21kLT5jbW5kWzEzXSk7Ci0JCX0KKwkJYWxsb2NfbGVuID0gKChzY3NpY21kLT5jbW5kWzEwXSA8PCAyNCkKKwkJCSAgICAgKyAoc2NzaWNtZC0+Y21uZFsxMV0gPDwgMTYpCisJCQkgICAgICsgKHNjc2ljbWQtPmNtbmRbMTJdIDw8IDgpICsgc2NzaWNtZC0+Y21uZFsxM10pOworCisJCWFsbG9jX2xlbiA9IG1pbl90KHNpemVfdCwgYWxsb2NfbGVuLCBzaXplb2YoY3ApKTsKKwkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsIGNwLCBhbGxvY19sZW4pOworCQlpZiAoYWxsb2NfbGVuIDwgc2NzaV9idWZmbGVuKHNjc2ljbWQpKQorCQkJc2NzaV9zZXRfcmVzaWQoc2NzaWNtZCwKKwkJCQkgICAgICAgc2NzaV9idWZmbGVuKHNjc2ljbWQpIC0gYWxsb2NfbGVuKTsKIAogCQkvKiBEbyBub3QgY2FjaGUgcGFydGl0aW9uIHRhYmxlIGZvciBhcnJheXMgKi8KIAkJc2NzaWNtZC0+ZGV2aWNlLT5yZW1vdmFibGUgPSAxOwpAQCAtMjEwNCw3ICsyMDg4LDcgQEAKIAkJY3BbNV0gPSAwOwogCQljcFs2XSA9IDI7CiAJCWNwWzddID0gMDsKLQkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIGNwLCAwLCBzaXplb2YoY3ApKTsKKwkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjc2ljbWQsIGNwLCBzaXplb2YoY3ApKTsKIAkJLyogRG8gbm90IGNhY2hlIHBhcnRpdGlvbiB0YWJsZSBmb3IgYXJyYXlzICovCiAJCXNjc2ljbWQtPmRldmljZS0+cmVtb3ZhYmxlID0gMTsKIApAQCAtMjEzOSw3ICsyMTIzLDcgQEAKIAkJCWlmIChtb2RlX2J1Zl9sZW5ndGggPiBzY3NpY21kLT5jbW5kWzRdKQogCQkJCW1vZGVfYnVmX2xlbmd0aCA9IHNjc2ljbWQtPmNtbmRbNF07CiAJCX0KLQkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIG1vZGVfYnVmLCAwLCBtb2RlX2J1Zl9sZW5ndGgpOworCQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoc2NzaWNtZCwgbW9kZV9idWYsIG1vZGVfYnVmX2xlbmd0aCk7CiAJCXNjc2ljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNiB8IENPTU1BTkRfQ09NUExFVEUgPDwgOCB8IFNBTV9TVEFUX0dPT0Q7CiAJCXNjc2ljbWQtPnNjc2lfZG9uZShzY3NpY21kKTsKIApAQCAtMjE3NCw3ICsyMTU4LDcgQEAKIAkJCWlmIChtb2RlX2J1Zl9sZW5ndGggPiBzY3NpY21kLT5jbW5kWzhdKQogCQkJCW1vZGVfYnVmX2xlbmd0aCA9IHNjc2ljbWQtPmNtbmRbOF07CiAJCX0KLQkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIG1vZGVfYnVmLCAwLCBtb2RlX2J1Zl9sZW5ndGgpOworCQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoc2NzaWNtZCwgbW9kZV9idWYsIG1vZGVfYnVmX2xlbmd0aCk7CiAKIAkJc2NzaWNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2IHwgQ09NTUFORF9DT01QTEVURSA8PCA4IHwgU0FNX1NUQVRfR09PRDsKIAkJc2NzaWNtZC0+c2NzaV9kb25lKHNjc2ljbWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCmluZGV4IGFjZTBiNzUuLjExM2NhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKQEAgLTE4NTAsOSArMTg1MCw5IEBACiBpbnQgYWFjX3Njc2lfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBpbnQgYWFjX2Rldl9pb2N0bChzdHJ1Y3QgYWFjX2RldiAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKICNpZm5kZWYgc2hvc3RfdG9fY2xhc3MKLSNkZWZpbmUgc2hvc3RfdG9fY2xhc3Moc2hvc3QpICZzaG9zdC0+c2hvc3RfY2xhc3NkZXYKKyNkZWZpbmUgc2hvc3RfdG9fY2xhc3Moc2hvc3QpICZzaG9zdC0+c2hvc3RfZGV2CiAjZW5kaWYKLXNzaXplX3QgYWFjX3Nob3dfc2VyaWFsX251bWJlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1Zik7Citzc2l6ZV90IGFhY19nZXRfc2VyaWFsX251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1Zik7CiBpbnQgYWFjX2RvX2lvY3RsKHN0cnVjdCBhYWNfZGV2ICogZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIGludCBhYWNfcnhfaW5pdChzdHJ1Y3QgYWFjX2RldiAqZGV2KTsKIGludCBhYWNfcmt0X2luaXQoc3RydWN0IGFhY19kZXYgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tY3RybC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWN0cmwuYwppbmRleCBhYmVmMDUxLi41ZmQ4M2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tY3RybC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1jdHJsLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPiAvKiBzc2xlZXAgcHJvdG90eXBlICovCiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiYWFjcmFpZC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1pbml0LmMKaW5kZXggODljYzhiNy4uMjk0YTgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlICJhYWNyYWlkLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYwppbmRleCA0NzQzNDQ5Li5lZjY3ODE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCkBAIC00MSwxMSArNDEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgImFhY3JhaWQuaCIKIApAQCAtNTE1LDEwICs1MTUsMTIgQEAKIAkJCQl9CiAJCQkJdWRlbGF5KDUpOwogCQkJfQotCQl9IGVsc2UKLQkJCSh2b2lkKWRvd25faW50ZXJydXB0aWJsZSgmZmlicHRyLT5ldmVudF93YWl0KTsKKwkJfSBlbHNlIGlmIChkb3duX2ludGVycnVwdGlibGUoJmZpYnB0ci0+ZXZlbnRfd2FpdCkgPT0gMCkgeworCQkJZmlicHRyLT5kb25lID0gMjsKKwkJCXVwKCZmaWJwdHItPmV2ZW50X3dhaXQpOworCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZmaWJwdHItPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQkJaWYgKGZpYnB0ci0+ZG9uZSA9PSAwKSB7CisJCWlmICgoZmlicHRyLT5kb25lID09IDApIHx8IChmaWJwdHItPmRvbmUgPT0gMikpIHsKIAkJCWZpYnB0ci0+ZG9uZSA9IDI7IC8qIFRlbGwgaW50ZXJydXB0IHdlIGFib3J0ZWQgKi8KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpYnB0ci0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIC1FSU5UUjsKQEAgLTU5NCw3ICs1OTYsNyBAQAogCWlmIChsZTMyX3RvX2NwdSgqcS0+aGVhZGVycy5jb25zdW1lcikgPj0gcS0+ZW50cmllcykKIAkJKnEtPmhlYWRlcnMuY29uc3VtZXIgPSBjcHVfdG9fbGUzMigxKTsKIAllbHNlCi0JCSpxLT5oZWFkZXJzLmNvbnN1bWVyID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoKnEtPmhlYWRlcnMuY29uc3VtZXIpKzEpOworCQlsZTMyX2FkZF9jcHUocS0+aGVhZGVycy5jb25zdW1lciwgMSk7CiAKIAlpZiAod2FzZnVsbCkgewogCQlzd2l0Y2ggKHFpZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvZHBjc3VwLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9kcGNzdXAuYwppbmRleCBkMTE2M2RlLi45MzNmMjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9kcGNzdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9kcGNzdXAuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSAiYWFjcmFpZC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYwppbmRleCBhZTVmNzRmLi5jMTA5ZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CkBAIC03NTUsMTAgKzc1NCwxMCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzc2l6ZV90IGFhY19zaG93X21vZGVsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKLQkJY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfbW9kZWwoc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChjbGFzc19kZXYpLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChkZXZpY2UpLT5ob3N0ZGF0YTsKIAlpbnQgbGVuOwogCiAJaWYgKGRldi0+c3VwcGxlbWVudF9hZGFwdGVyX2luZm8uQWRhcHRlclR5cGVUZXh0WzBdKSB7CkBAIC03NzQsMTAgKzc3MywxMCBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFhY19zaG93X3ZlbmRvcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCi0JCWNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGFhY19zaG93X3ZlbmRvcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChjbGFzc19kZXYpLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChkZXZpY2UpLT5ob3N0ZGF0YTsKIAlpbnQgbGVuOwogCiAJaWYgKGRldi0+c3VwcGxlbWVudF9hZGFwdGVyX2luZm8uQWRhcHRlclR5cGVUZXh0WzBdKSB7CkBAIC03OTMsMTAgKzc5MiwxMSBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFhY19zaG93X2ZsYWdzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfZmxhZ3Moc3RydWN0IGRldmljZSAqY2RldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJaW50IGxlbiA9IDA7Ci0Jc3RydWN0IGFhY19kZXYgKmRldiA9IChzdHJ1Y3QgYWFjX2RldiopY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KS0+aG9zdGRhdGE7CisJc3RydWN0IGFhY19kZXYgKmRldiA9IChzdHJ1Y3QgYWFjX2RldiopY2xhc3NfdG9fc2hvc3QoY2RldiktPmhvc3RkYXRhOwogCiAJaWYgKG5ibGFuayhkcHJpbnRrKHgpKSkKIAkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJkcHJpbnRrXG4iKTsKQEAgLTgxMiwxMCArODEyLDExIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfa2VybmVsX3ZlcnNpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAotCQljaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBhYWNfc2hvd19rZXJuZWxfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGFhY19kZXYgKmRldiA9IChzdHJ1Y3QgYWFjX2RldiopY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KS0+aG9zdGRhdGE7CisJc3RydWN0IGFhY19kZXYgKmRldiA9IChzdHJ1Y3QgYWFjX2RldiopY2xhc3NfdG9fc2hvc3QoZGV2aWNlKS0+aG9zdGRhdGE7CiAJaW50IGxlbiwgdG1wOwogCiAJdG1wID0gbGUzMl90b19jcHUoZGV2LT5hZGFwdGVyX2luZm8ua2VybmVscmV2KTsKQEAgLTgyNSwxMCArODI2LDExIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfbW9uaXRvcl92ZXJzaW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKLQkJY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfbW9uaXRvcl92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChjbGFzc19kZXYpLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChkZXZpY2UpLT5ob3N0ZGF0YTsKIAlpbnQgbGVuLCB0bXA7CiAKIAl0bXAgPSBsZTMyX3RvX2NwdShkZXYtPmFkYXB0ZXJfaW5mby5tb25pdG9ycmV2KTsKQEAgLTgzOCwxMCArODQwLDExIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfYmlvc192ZXJzaW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKLQkJY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfYmlvc192ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBhYWNfZGV2ICpkZXYgPSAoc3RydWN0IGFhY19kZXYqKWNsYXNzX3RvX3Nob3N0KGNsYXNzX2RldiktPmhvc3RkYXRhOworCXN0cnVjdCBhYWNfZGV2ICpkZXYgPSAoc3RydWN0IGFhY19kZXYqKWNsYXNzX3RvX3Nob3N0KGRldmljZSktPmhvc3RkYXRhOwogCWludCBsZW4sIHRtcDsKIAogCXRtcCA9IGxlMzJfdG9fY3B1KGRldi0+YWRhcHRlcl9pbmZvLmJpb3NyZXYpOwpAQCAtODUxLDkgKzg1NCwxMCBAQAogCXJldHVybiBsZW47CiB9CiAKLXNzaXplX3QgYWFjX3Nob3dfc2VyaWFsX251bWJlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3NzaXplX3QgYWFjX3Nob3dfc2VyaWFsX251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChjbGFzc19kZXYpLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChkZXZpY2UpLT5ob3N0ZGF0YTsKIAlpbnQgbGVuID0gMDsKIAogCWlmIChsZTMyX3RvX2NwdShkZXYtPmFkYXB0ZXJfaW5mby5zZXJpYWxbMF0pICE9IDB4QkFEMCkKQEAgLTg2OSwzNSArODczLDM5IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfbWF4X2NoYW5uZWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBhYWNfc2hvd19tYXhfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JICBjbGFzc190b19zaG9zdChjbGFzc19kZXYpLT5tYXhfY2hhbm5lbCk7CisJICBjbGFzc190b19zaG9zdChkZXZpY2UpLT5tYXhfY2hhbm5lbCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFhY19zaG93X21heF9pZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGFhY19zaG93X21heF9pZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkgIGNsYXNzX3RvX3Nob3N0KGNsYXNzX2RldiktPm1heF9pZCk7CisJICBjbGFzc190b19zaG9zdChkZXZpY2UpLT5tYXhfaWQpOwogfQogCi1zdGF0aWMgc3NpemVfdCBhYWNfc3RvcmVfcmVzZXRfYWRhcHRlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgYWFjX3N0b3JlX3Jlc2V0X2FkYXB0ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IHJldHZhbCA9IC1FQUNDRVM7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiByZXR2YWw7Ci0JcmV0dmFsID0gYWFjX3Jlc2V0X2FkYXB0ZXIoKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChjbGFzc19kZXYpLT5ob3N0ZGF0YSwgYnVmWzBdID09ICchJyk7CisJcmV0dmFsID0gYWFjX3Jlc2V0X2FkYXB0ZXIoKHN0cnVjdCBhYWNfZGV2KiljbGFzc190b19zaG9zdChkZXZpY2UpLT5ob3N0ZGF0YSwgYnVmWzBdID09ICchJyk7CiAJaWYgKHJldHZhbCA+PSAwKQogCQlyZXR2YWwgPSBjb3VudDsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgc3NpemVfdCBhYWNfc2hvd19yZXNldF9hZGFwdGVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKLQkJY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgYWFjX3Nob3dfcmVzZXRfYWRhcHRlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBhYWNfZGV2ICpkZXYgPSAoc3RydWN0IGFhY19kZXYqKWNsYXNzX3RvX3Nob3N0KGNsYXNzX2RldiktPmhvc3RkYXRhOworCXN0cnVjdCBhYWNfZGV2ICpkZXYgPSAoc3RydWN0IGFhY19kZXYqKWNsYXNzX3RvX3Nob3N0KGRldmljZSktPmhvc3RkYXRhOwogCWludCBsZW4sIHRtcDsKIAogCXRtcCA9IGFhY19hZGFwdGVyX2NoZWNrX2hlYWx0aChkZXYpOwpAQCAtOTA3LDcwICs5MTUsNzAgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX21vZGVsID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFhY19tb2RlbCA9IHsKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibW9kZWwiLAogCQkubW9kZSA9IFNfSVJVR08sCiAJfSwKIAkuc2hvdyA9IGFhY19zaG93X21vZGVsLAogfTsKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhYWNfdmVuZG9yID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFhY192ZW5kb3IgPSB7CiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gInZlbmRvciIsCiAJCS5tb2RlID0gU19JUlVHTywKIAl9LAogCS5zaG93ID0gYWFjX3Nob3dfdmVuZG9yLAogfTsKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhYWNfZmxhZ3MgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYWFjX2ZsYWdzID0gewogCS5hdHRyID0gewogCQkubmFtZSA9ICJmbGFncyIsCiAJCS5tb2RlID0gU19JUlVHTywKIAl9LAogCS5zaG93ID0gYWFjX3Nob3dfZmxhZ3MsCiB9Owotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGFhY19rZXJuZWxfdmVyc2lvbiA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhYWNfa2VybmVsX3ZlcnNpb24gPSB7CiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gImhiYV9rZXJuZWxfdmVyc2lvbiIsCiAJCS5tb2RlID0gU19JUlVHTywKIAl9LAogCS5zaG93ID0gYWFjX3Nob3dfa2VybmVsX3ZlcnNpb24sCiB9Owotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGFhY19tb25pdG9yX3ZlcnNpb24gPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYWFjX21vbml0b3JfdmVyc2lvbiA9IHsKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAiaGJhX21vbml0b3JfdmVyc2lvbiIsCiAJCS5tb2RlID0gU19JUlVHTywKIAl9LAogCS5zaG93ID0gYWFjX3Nob3dfbW9uaXRvcl92ZXJzaW9uLAogfTsKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhYWNfYmlvc192ZXJzaW9uID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFhY19iaW9zX3ZlcnNpb24gPSB7CiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gImhiYV9iaW9zX3ZlcnNpb24iLAogCQkubW9kZSA9IFNfSVJVR08sCiAJfSwKIAkuc2hvdyA9IGFhY19zaG93X2Jpb3NfdmVyc2lvbiwKIH07Ci1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX3NlcmlhbF9udW1iZXIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYWFjX3NlcmlhbF9udW1iZXIgPSB7CiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gInNlcmlhbF9udW1iZXIiLAogCQkubW9kZSA9IFNfSVJVR08sCiAJfSwKIAkuc2hvdyA9IGFhY19zaG93X3NlcmlhbF9udW1iZXIsCiB9Owotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGFhY19tYXhfY2hhbm5lbCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhYWNfbWF4X2NoYW5uZWwgPSB7CiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm1heF9jaGFubmVsIiwKIAkJLm1vZGUgPSBTX0lSVUdPLAogCX0sCiAJLnNob3cgPSBhYWNfc2hvd19tYXhfY2hhbm5lbCwKIH07Ci1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX21heF9pZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhYWNfbWF4X2lkID0gewogCS5hdHRyID0gewogCQkubmFtZSA9ICJtYXhfaWQiLAogCQkubW9kZSA9IFNfSVJVR08sCiAJfSwKIAkuc2hvdyA9IGFhY19zaG93X21heF9pZCwKIH07Ci1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYWFjX3Jlc2V0ID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFhY19yZXNldCA9IHsKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAicmVzZXRfaG9zdCIsCiAJCS5tb2RlID0gU19JV1VTUnxTX0lSVUdPLApAQCAtOTc5LDcgKzk4Nyw3IEBACiAJLnNob3cgPSBhYWNfc2hvd19yZXNldF9hZGFwdGVyLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphYWNfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYWFjX2F0dHJzW10gPSB7CiAJJmFhY19tb2RlbCwKIAkmYWFjX3ZlbmRvciwKIAkmYWFjX2ZsYWdzLApAQCAtOTkzLDYgKzEwMDEsMTAgQEAKIAlOVUxMCiB9OwogCitzc2l6ZV90IGFhY19nZXRfc2VyaWFsX251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWFjX3Nob3dfc2VyaWFsX251bWJlcihkZXZpY2UsICZhYWNfc2VyaWFsX251bWJlciwgYnVmKTsKK30KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWFjX2NmZ19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jCmluZGV4IDFmMThiODMuLjA3MzIwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMKaW5kZXggY2ZjMzQxMC4uZmMxYTU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9zYS5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCmluZGV4IDNjMmQ2ODguLjg1OTE1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCkBAIC02NDM5LDcgKzY0MzksNyBAQAogCQkJaSArPSAyOwogCQkJbGVuICs9IDI7CiAJCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBjaGFyIG9mZiA9IGJ1ZltpXSAqIDI7CisJCQl1bnNpZ25lZCBpbnQgb2ZmID0gYnVmW2ldICogMjsKIAkJCXVuc2lnbmVkIHNob3J0IHdvcmQgPSAoYnVmW29mZiArIDFdIDw8IDgpIHwgYnVmW29mZl07CiAJCQlBZHZXcml0ZVdvcmRBdXRvSW5jTHJhbShpb3BfYmFzZSwgd29yZCk7CiAJCQlsZW4gKz0gMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCmluZGV4IDcyZmNjZDkuLjAwODFhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwpAQCAtMTQxMyw2ICsxNDEzLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbnNlZzsKIAorCW5zZWcgPSBzY3NpX2RtYV9tYXAoY21kKTsKKwlpZiAobnNlZyA8IDApCisJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCiAJYWhkX2xvY2soYWhkLCAmZmxhZ3MpOwogCiAJLyoKQEAgLTE0MzAsNiArMTQzNCw3IEBACiAJaWYgKChzY2IgPSBhaGRfZ2V0X3NjYihhaGQsIGNvbF9pZHgpKSA9PSBOVUxMKSB7CiAJCWFoZC0+ZmxhZ3MgfD0gQUhEX1JFU09VUkNFX1NIT1JUQUdFOwogCQlhaGRfdW5sb2NrKGFoZCwgJmZsYWdzKTsKKwkJc2NzaV9kbWFfdW5tYXAoY21kKTsKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAJfQogCkBAIC0xNDg1LDggKzE0OTAsNiBAQAogCWFoZF9zZXRfc2Vuc2VfcmVzaWR1YWwoc2NiLCAwKTsKIAlzY2ItPnNnX2NvdW50ID0gMDsKIAotCW5zZWcgPSBzY3NpX2RtYV9tYXAoY21kKTsKLQlCVUdfT04obnNlZyA8IDApOwogCWlmIChuc2VnID4gMCkgewogCQl2b2lkICpzZyA9IHNjYi0+c2dfbGlzdDsKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJfc2VnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwppbmRleCA0MTUwYzhhLi5kZmFhYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwpAQCAtODksNyArODksNyBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAotCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpCisJaWYgKG1lc2cuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwppbmRleCA2ZDJhZTY0Li42NGU2MmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwpAQCAtNjk1LDE1ICs2OTUsMTYgQEAKIAkJCXNjYl9pbmRleCA9IGFoY19pbmIoYWhjLCBTQ0JfVEFHKTsKIAkJCXNjYiA9IGFoY19sb29rdXBfc2NiKGFoYywgc2NiX2luZGV4KTsKIAkJCWlmIChkZXZpbmZvLnJvbGUgPT0gUk9MRV9JTklUSUFUT1IpIHsKLQkJCQlpZiAoc2NiID09IE5VTEwpCi0JCQkJCXBhbmljKCJIT1NUX01TR19MT09QIHdpdGggIgotCQkJCQkgICAgICAiaW52YWxpZCBTQ0IgJXhcbiIsIHNjYl9pbmRleCk7CisJCQkJaWYgKGJ1c19waGFzZSA9PSBQX01FU0dPVVQpIHsKKwkJCQkJaWYgKHNjYiA9PSBOVUxMKQorCQkJCQkJcGFuaWMoIkhPU1RfTVNHX0xPT1Agd2l0aCAiCisJCQkJCQkgICAgICAiaW52YWxpZCBTQ0IgJXhcbiIsCisJCQkJCQkgICAgICBzY2JfaW5kZXgpOwogCi0JCQkJaWYgKGJ1c19waGFzZSA9PSBQX01FU0dPVVQpCiAJCQkJCWFoY19zZXR1cF9pbml0aWF0b3JfbXNnb3V0KGFoYywKIAkJCQkJCQkJICAgJmRldmluZm8sCiAJCQkJCQkJCSAgIHNjYik7Ci0JCQkJZWxzZSB7CisJCQkJfSBlbHNlIHsKIAkJCQkJYWhjLT5tc2dfdHlwZSA9CiAJCQkJCSAgICBNU0dfVFlQRV9JTklUSUFUT1JfTVNHSU47CiAJCQkJCWFoYy0+bXNnaW5faW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKaW5kZXggMjgyYWZmNi4uNDJhZDQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCkBAIC0xMzk4LDEyICsxMzk4LDE4IEBACiAJCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwogCX0KIAorCW5zZWcgPSBzY3NpX2RtYV9tYXAoY21kKTsKKwlpZiAobnNlZyA8IDApCisJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCiAJLyoKIAkgKiBHZXQgYW4gc2NiIHRvIHVzZS4KIAkgKi8KIAlzY2IgPSBhaGNfZ2V0X3NjYihhaGMpOwotCWlmICghc2NiKQorCWlmICghc2NiKSB7CisJCXNjc2lfZG1hX3VubWFwKGNtZCk7CiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCX0KIAogCXNjYi0+aW9fY3R4ID0gY21kOwogCXNjYi0+cGxhdGZvcm1fZGF0YS0+ZGV2ID0gZGV2OwpAQCAtMTQ2NCw4ICsxNDcwLDYgQEAKIAlhaGNfc2V0X3NlbnNlX3Jlc2lkdWFsKHNjYiwgMCk7CiAJc2NiLT5zZ19jb3VudCA9IDA7CiAKLQluc2VnID0gc2NzaV9kbWFfbWFwKGNtZCk7Ci0JQlVHX09OKG5zZWcgPCAwKTsKIAlpZiAobnNlZyA+IDApIHsKIAkJc3RydWN0CWFoY19kbWFfc2VnICpzZzsKIAkJc3RydWN0CXNjYXR0ZXJsaXN0ICpjdXJfc2VnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbV9wY2kuYwppbmRleCBkZDZlMjFkLi4zZDNlYWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbV9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbV9wY2kuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCi0JaWYgKG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkKKwlpZiAobWVzZy5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKQogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiAKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CmluZGV4IDYwNjY5OTguLjcwMmUyZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CkBAIC0xODM3LDcgKzE4MzcsNyBAQAogCWludCBhbmRfb3A7CiAKIAlhbmRfb3AgPSBGQUxTRTsKLQlpZiAob3Bjb2RlID09IEFJQ19PUF9BTkQgfHwgb3Bjb2RlID09IEFJQ19PUF9KTlogfHwgQUlDX09QX0paKQorCWlmIChvcGNvZGUgPT0gQUlDX09QX0FORCB8fCBvcGNvZGUgPT0gQUlDX09QX0pOWiB8fCBvcGNvZGUgPT0gQUlDX09QX0paKQogCQlhbmRfb3AgPSBUUlVFOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHguaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHguaAppbmRleCAzMmY1MTNiLi4yZWY0NTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eC5oCkBAIC01OCw3ICs1OCw2IEBACiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqYXNkX2RtYV90b2tlbl9jYWNoZTsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqYXNkX2FzY2JfY2FjaGU7Ci1leHRlcm4gY2hhciBzYXNfYWRkcl9zdHJbMipTQVNfQUREUl9TSVpFICsgMV07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhc2Rfc3RyaW5naWZ5X3Nhc19hZGRyKGNoYXIgKnAsIGNvbnN0IHU4ICpzYXNfYWRkcikKIHsKQEAgLTY4LDIxICs2Nyw2IEBACiAJKnAgPSAnXDAnOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2Rlc3RyaW5naWZ5X3Nhc19hZGRyKHU4ICpzYXNfYWRkciwgY29uc3QgY2hhciAqcCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgU0FTX0FERFJfU0laRTsgaSsrKSB7Ci0JCXU4IGgsIGw7Ci0JCWlmICghKnApCi0JCQlicmVhazsKLQkJaCA9IGlzZGlnaXQoKnApID8gKnAtJzAnIDogKnAtJ0EnKzEwOwotCQlwKys7Ci0JCWwgPSBpc2RpZ2l0KCpwKSA/ICpwLScwJyA6ICpwLSdBJysxMDsKLQkJcCsrOwotCQlzYXNfYWRkcltpXSA9IChoPDw0KSB8IGw7Ci0JfQotfQotCiBzdHJ1Y3QgYXNkX2hhX3N0cnVjdDsKIHN0cnVjdCBhc2RfYXNjYjsKIApAQCAtMTAyLDYgKzg2LDcgQEAKIGludCAgYXNkX2NsZWFyX2FjYShzdHJ1Y3QgZG9tYWluX2RldmljZSAqLCB1OCAqbHVuKTsKIGludCAgYXNkX2NsZWFyX3Rhc2tfc2V0KHN0cnVjdCBkb21haW5fZGV2aWNlICosIHU4ICpsdW4pOwogaW50ICBhc2RfbHVfcmVzZXQoc3RydWN0IGRvbWFpbl9kZXZpY2UgKiwgdTggKmx1bik7CitpbnQgIGFzZF9JX1RfbmV4dXNfcmVzZXQoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldik7CiBpbnQgIGFzZF9xdWVyeV90YXNrKHN0cnVjdCBzYXNfdGFzayAqKTsKIAogLyogLS0tLS0tLS0tLSBBZGFwdGVyIGFuZCBQb3J0IG1hbmFnZW1lbnQgLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9kZXYuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZGV2LmMKaW5kZXggNzIwNDJjYS4uMmUyZGRlYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZGV2LmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9kZXYuYwpAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBTRVRfRERCKF9kZGIsIF9oYSkgc2V0X2JpdChfZGRiLCAoX2hhKS0+aHdfcHJvZi5kZGJfYml0bWFwKQogI2RlZmluZSBDTEVBUl9EREIoX2RkYiwgX2hhKSBjbGVhcl9iaXQoX2RkYiwgKF9oYSktPmh3X3Byb2YuZGRiX2JpdG1hcCkKIAotc3RhdGljIGlubGluZSBpbnQgYXNkX2dldF9kZGIoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKK3N0YXRpYyBpbnQgYXNkX2dldF9kZGIoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKIHsKIAlpbnQgZGRiLCBpOwogCkBAIC03MSw3ICs3MSw3IEBACiAjZGVmaW5lIE5DUV9EQVRBX1NDQl9QVFIgb2Zmc2V0b2Yoc3RydWN0IGFzZF9kZGJfc3RwX3NhdGFfdGFyZ2V0X3BvcnQsIG5jcV9kYXRhX3NjYl9wdHIpCiAjZGVmaW5lIElUTkxfVElNRU9VVCAgICBvZmZzZXRvZihzdHJ1Y3QgYXNkX2RkYl9zc3Bfc21wX3RhcmdldF9wb3J0LCBpdG5sX3RpbWVvdXQpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfZnJlZV9kZGIoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgaW50IGRkYikKK3N0YXRpYyB2b2lkIGFzZF9mcmVlX2RkYihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBpbnQgZGRiKQogewogCWlmICghZGRiIHx8IGRkYiA+PSAweEZGRkYpCiAJCXJldHVybjsKQEAgLTc5LDcgKzc5LDcgQEAKIAlDTEVBUl9EREIoZGRiLCBhc2RfaGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX3NldF9kZGJfdHlwZShzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYXNkX3NldF9kZGJfdHlwZShzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEgPSBkZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwogCWludCBkZGIgPSAoaW50KSAodW5zaWduZWQgbG9uZykgZGV2LT5sbGRkX2RldjsKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhc2RfaW5pdF9zYXRhKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFzZF9pbml0X3NhdGEoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhID0gZGV2LT5wb3J0LT5oYS0+bGxkZF9oYTsKIAlpbnQgZGRiID0gKGludCkgKHVuc2lnbmVkIGxvbmcpIGRldi0+bGxkZF9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2R1bXAuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZHVtcC5jCmluZGV4IDNkOGM0ZmYuLjY3ZWViYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZHVtcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZHVtcC5jCkBAIC03MzgsNiArNzM4LDggQEAKIAlQUklOVF9MTUlQX2R3b3JkKGFzZF9oYSwgbHNlcSwgREVWX1BSRVNfVElNRVJfVEVSTV9UUyk7CiB9CiAKKyNpZiAwCisKIC8qKgogICogYXNkX2R1bXBfZGRiX3NpdGUgLS0gZHVtcCBhIENTRVEgRERCIHNpdGUKICAqIEBhc2RfaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZQpAQCAtODgwLDYgKzg4Miw4IEBACiAJfQogfQogCisjZW5kaWYgIC8qICAwICAqLworCiAvKioKICAqIGFkc19kdW1wX3NlcV9zdGF0ZSAtLSBkdW1wIENTRVEgYW5kIExTRVEgc3RhdGVzCiAgKiBAYXNkX2hhOiBwb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUKQEAgLTkyMiw3ICs5MjYsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoeS0+c2FzX3BoeS5mcmFtZV9yY3ZkX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzZF9kdW1wX3NjYihzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IsIGludCBpbmQpCisjaWYgMAorCitzdGF0aWMgdm9pZCBhc2RfZHVtcF9zY2Ioc3RydWN0IGFzZF9hc2NiICphc2NiLCBpbnQgaW5kKQogewogCWFzZF9wcmludGsoInNjYiVkOiB2YWRkcjogMHglcCwgZG1hX2hhbmRsZTogMHglbGx4LCBuZXh0OiAweCVsbHgsICIKIAkJICAgImluZGV4OiVkLCBvcGNvZGU6MHglMDJ4XG4iLApAQCAtOTU2LDQgKzk2Miw2IEBACiAJfQogfQogCisjZW5kaWYgIC8qICAwICAqLworCiAjZW5kaWYgLyogQVNEX0RFQlVHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2R1bXAuaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZHVtcC5oCmluZGV4IDBjMzg4ZTcuLjE5MWE3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZHVtcC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfZHVtcC5oCkBAIC0yOSwyNCArMjksMTUgQEAKIAogI2lmZGVmIEFTRF9ERUJVRwogCi12b2lkIGFzZF9kdW1wX2RkYl8wKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpOwotdm9pZCBhc2RfZHVtcF90YXJnZXRfZGRiKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIHUxNiBzaXRlX25vKTsKLXZvaWQgYXNkX2R1bXBfc2NiX3NpdGVzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpOwogdm9pZCBhc2RfZHVtcF9zZXFfc3RhdGUoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgdTggbHNlcV9tYXNrKTsKIHZvaWQgYXNkX2R1bXBfZnJhbWVfcmN2ZChzdHJ1Y3QgYXNkX3BoeSAqcGh5LAogCQkJIHN0cnVjdCBkb25lX2xpc3Rfc3RydWN0ICpkbCk7Ci12b2lkIGFzZF9kdW1wX3NjYl9saXN0KHN0cnVjdCBhc2RfYXNjYiAqYXNjYiwgaW50IG51bSk7CiAjZWxzZSAvKiBBU0RfREVCVUcgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGFzZF9kdW1wX2RkYl8wKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGFzZF9kdW1wX3RhcmdldF9kZGIoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwKLQkJCQkgICAgIHUxNiBzaXRlX25vKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfZHVtcF9zY2Jfc2l0ZXMoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXNkX2R1bXBfc2VxX3N0YXRlKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsCiAJCQkJICAgICAgdTggbHNlcV9tYXNrKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfZHVtcF9mcmFtZV9yY3ZkKHN0cnVjdCBhc2RfcGh5ICpwaHksCiAJCQkJICAgICAgIHN0cnVjdCBkb25lX2xpc3Rfc3RydWN0ICpkbCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2R1bXBfc2NiX2xpc3Qoc3RydWN0IGFzZF9hc2NiICphc2NiLCBpbnQgbnVtKSB7IH0KICNlbmRpZiAvKiBBU0RfREVCVUcgKi8KIAogI2VuZGlmIC8qIF9BSUM5NFhYX0RVTVBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5jCmluZGV4IDA5OGI1ZjMuLjgzYTc4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgImFpYzk0eHguaCIKICNpbmNsdWRlICJhaWM5NHh4X3JlZy5oIgpAQCAtMzgsMTYgKzM5LDE0IEBACiAKIC8qIC0tLS0tLS0tLS0gSW5pdGlhbGl6YXRpb24gLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBhc2RfZ2V0X3VzZXJfc2FzX2FkZHIoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKK3N0YXRpYyBpbnQgYXNkX2dldF91c2VyX3Nhc19hZGRyKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCiB7Ci0JZXh0ZXJuIGNoYXIgc2FzX2FkZHJfc3RyW107Ci0JLyogSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIFdXTiBpdCBvdmVycmlkZXMgb3RoZXIgc2V0dGluZ3MKLQkgKi8KLQlpZiAoc2FzX2FkZHJfc3RyWzBdICE9ICdcMCcpCi0JCWFzZF9kZXN0cmluZ2lmeV9zYXNfYWRkcihhc2RfaGEtPmh3X3Byb2Yuc2FzX2FkZHIsCi0JCQkJCSBzYXNfYWRkcl9zdHIpOwotCWVsc2UgaWYgKGFzZF9oYS0+aHdfcHJvZi5zYXNfYWRkclswXSAhPSAwKQotCQlhc2Rfc3RyaW5naWZ5X3Nhc19hZGRyKHNhc19hZGRyX3N0ciwgYXNkX2hhLT5od19wcm9mLnNhc19hZGRyKTsKKwkvKiBhZGFwdGVyIGNhbWUgd2l0aCBhIHNhcyBhZGRyZXNzICovCisJaWYgKGFzZF9oYS0+aHdfcHJvZi5zYXNfYWRkclswXSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2FzX3JlcXVlc3RfYWRkcihhc2RfaGEtPnNhc19oYS5jb3JlLnNob3N0LAorCQkJCWFzZF9oYS0+aHdfcHJvZi5zYXNfYWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGFzZF9wcm9wYWdhdGVfc2FzX2FkZHIoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKQEAgLTI1MSw3ICsyNTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2dldF9tYXhfc2NiX2RkYihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKQorc3RhdGljIHZvaWQgYXNkX2dldF9tYXhfc2NiX2RkYihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKQogewogCWFzZF9oYS0+aHdfcHJvZi5tYXhfc2NicyA9IGFzZF9nZXRfY21kY3R4X3NpemUoYXNkX2hhKS9BU0RfU0NCX1NJWkU7CiAJYXNkX2hhLT5od19wcm9mLm1heF9kZGJzID0gYXNkX2dldF9kZXZjdHhfc2l6ZShhc2RfaGEpL0FTRF9EREJfU0laRTsKQEAgLTY1Nyw4ICs2NTYsNyBAQAogCiAJYXNkX2luaXRfY3R4bWVtKGFzZF9oYSk7CiAKLQlhc2RfZ2V0X3VzZXJfc2FzX2FkZHIoYXNkX2hhKTsKLQlpZiAoIWFzZF9oYS0+aHdfcHJvZi5zYXNfYWRkclswXSkgeworCWlmIChhc2RfZ2V0X3VzZXJfc2FzX2FkZHIoYXNkX2hhKSkgewogCQlhc2RfcHJpbnRrKCJObyBTQVMgQWRkcmVzcyBwcm92aWRlZCBmb3IgJXNcbiIsCiAJCQkgICBwY2lfbmFtZShhc2RfaGEtPnBjaWRldikpOwogCQllcnIgPSAtRU5PREVWOwpAQCAtNzczLDcgKzc3MSw3IEBACiAgKiBhc2RfcHJvY2Vzc19kb25lbGlzdF9pc3IgLS0gc2NoZWR1bGUgcHJvY2Vzc2luZyBvZiBkb25lIGxpc3QgZW50cmllcwogICogQGFzZF9oYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfcHJvY2Vzc19kb25lbGlzdF9pc3Ioc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKK3N0YXRpYyB2b2lkIGFzZF9wcm9jZXNzX2RvbmVsaXN0X2lzcihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKQogewogCXRhc2tsZXRfc2NoZWR1bGUoJmFzZF9oYS0+c2VxLmRsX3Rhc2tsZXQpOwogfQpAQCAtNzgyLDcgKzc4MCw3IEBACiAgKiBhc2RfY29tX3Nhc19pc3IgLS0gcHJvY2VzcyBkZXZpY2UgY29tbXVuaWNhdGlvbiBpbnRlcnJ1cHQgKENPTUlOVCkKICAqIEBhc2RfaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2NvbV9zYXNfaXNyKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCitzdGF0aWMgdm9pZCBhc2RfY29tX3Nhc19pc3Ioc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKIHsKIAl1MzIgY29tc3RhdCA9IGFzZF9yZWFkX3JlZ19kd29yZChhc2RfaGEsIENPTVNUQVQpOwogCkBAIC04MjEsNyArODE5LDcgQEAKIAlhc2RfY2hpcF9yZXNldChhc2RfaGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2FycDJfZXJyKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIHUzMiBkY2hzdGF0dXMpCitzdGF0aWMgdm9pZCBhc2RfYXJwMl9lcnIoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgdTMyIGRjaHN0YXR1cykKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqaGFsdF9jb2RlWzI1Nl0gPSB7CiAJCSJVTkVYUEVDVEVEX0lOVEVSUlVQVDAiLApAQCAtOTA4LDcgKzkwNiw3IEBACiAgKiBhc2RfZGNoX3Nhc19pc3IgLS0gcHJvY2VzcyBkZXZpY2UgY2hhbm5lbCBpbnRlcnJ1cHQgKERFVklOVCkKICAqIEBhc2RfaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2RjaF9zYXNfaXNyKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCitzdGF0aWMgdm9pZCBhc2RfZGNoX3Nhc19pc3Ioc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKIHsKIAl1MzIgZGNoc3RhdHVzID0gYXNkX3JlYWRfcmVnX2R3b3JkKGFzZF9oYSwgRENIU1RBVFVTKTsKIApAQCAtOTIzLDcgKzkyMSw3IEBACiAgKiBhZHNfcmJpX2V4c2lfaXNyIC0tIHByb2Nlc3MgZXh0ZXJuYWwgc3lzdGVtIGludGVyZmFjZSBpbnRlcnJ1cHQgKElOSVRFUlIpCiAgKiBAYXNkX2hhOiBwb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGFzZF9yYmlfZXhzaV9pc3Ioc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKK3N0YXRpYyB2b2lkIGFzZF9yYmlfZXhzaV9pc3Ioc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKIHsKIAl1MzIgc3RhdDByID0gYXNkX3JlYWRfcmVnX2R3b3JkKGFzZF9oYSwgQVNJU1RBVDBSKTsKIApAQCAtOTcxLDcgKzk2OSw3IEBACiAgKgogICogQXNzZXJ0ZWQgb24gUENJWCBlcnJvcnM6IHRhcmdldCBhYm9ydCwgZXRjLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2hzdF9wY2l4X2lzcihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKQorc3RhdGljIHZvaWQgYXNkX2hzdF9wY2l4X2lzcihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKQogewogCXUxNiBzdGF0dXM7CiAJdTMyIHBjaXhfc3RhdHVzOwpAQCAtMTA0NCw4ICsxMDQyLDggQEAKIAogLyogLS0tLS0tLS0tLSBTQ0IgaGFuZGxpbmcgLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhc2RfYXNjYiAqYXNkX2FzY2JfYWxsb2Moc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwKLQkJCQkJICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQorc3RhdGljIHN0cnVjdCBhc2RfYXNjYiAqYXNkX2FzY2JfYWxsb2Moc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwKKwkJCQkgICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqYXNkX2FzY2JfY2FjaGU7CiAJc3RydWN0IGFzZF9zZXFfZGF0YSAqc2VxID0gJmFzZF9oYS0+c2VxOwpAQCAtMTE0NCw4ICsxMTQyLDggQEAKICAqCiAgKiBMT0NLSU5HOiBjYWxsZWQgd2l0aCB0aGUgcGVuZGluZyBsaXN0IGxvY2sgaGVsZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGFzZF9zd2FwX2hlYWRfc2NiKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsCi0JCQkJICAgICBzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IpCitzdGF0aWMgdm9pZCBhc2Rfc3dhcF9oZWFkX3NjYihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAorCQkJICAgICAgc3RydWN0IGFzZF9hc2NiICphc2NiKQogewogCXN0cnVjdCBhc2Rfc2VxX2RhdGEgKnNlcSA9ICZhc2RfaGEtPnNlcTsKIAlzdHJ1Y3QgYXNkX2FzY2IgKmxhc3QgPSBsaXN0X2VudHJ5KGFzY2ItPmxpc3QucHJldiwKQEAgLTExNzEsNyArMTE2OSw3IEBACiAgKiBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBhc2RfcG9zdF9hc2NiX2xpc3QoKSwganVzdCBwcmlvciB0bwogICogcG9zdGluZyB0aGUgU0NCcyB0byB0aGUgc2VxdWVuY2VyLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX3N0YXJ0X3NjYl90aW1lcnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyB2b2lkIGFzZF9zdGFydF9zY2JfdGltZXJzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJc3RydWN0IGFzZF9hc2NiICphc2NiOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNjYiwgbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaHdpLmgKaW5kZXggMTUwZjY3MC4uOGMxYzI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9od2kuaAorKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2h3aS5oCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogCS8qIGludGVybmFsbHkgZ2VuZXJhdGVkIGNvbW1hbmQgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOworCXN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0aW9uOwogCXU4ICAgICAgICB0YWdfdmFsaWQ6MTsKIAlfX2JlMTYgICAgdGFnOwkJICAvKiBlcnJvciByZWNvdmVyeSBvbmx5ICovCiAKQEAgLTI5NCw3ICsyOTQsNiBAQAogCWFzY2ItPnRpbWVyLmZ1bmN0aW9uID0gTlVMTDsKIAlpbml0X3RpbWVyKCZhc2NiLT50aW1lcik7CiAJYXNjYi0+dGNfaW5kZXggPSAtMTsKLQlpbml0X2NvbXBsZXRpb24oJmFzY2ItPmNvbXBsZXRpb24pOwogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0Y19pbmRleF9sb2NrIGhlbGQhCkBAIC0zOTIsOCArMzkxLDYgQEAKIHZvaWQgYXNkX2NvbnRyb2xfbGVkKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIGludCBwaHlfaWQsIGludCBvcCk7CiB2b2lkIGFzZF90dXJuX2xlZChzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBpbnQgcGh5X2lkLCBpbnQgb3ApOwogaW50ICBhc2RfZW5hYmxlX3BoeXMoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgY29uc3QgdTggcGh5X21hc2spOwotdm9pZCBhc2RfYnVpbGRfaW5pdGlhdGVfbGlua19hZG1fdGFzayhzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IsIGludCBwaHlfaWQsCi0JCQkJICAgICAgdTggc3ViZnVuYyk7CiAKIHZvaWQgYXNkX2FzY2JfdGltZWRvdXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIGludCAgYXNkX2NoaXBfaGFyZHJzdChzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKaW5kZXggNWQ3NjFlYi4uOTBmNWUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9pbml0LmMKQEAgLTU2LDggKzU2LDYgQEAKIAkiXHRUaGUgYWljOTR4eCBTQVMgTExERCBzdXBwb3J0cyBib3RoIG1vZGVzLlxuIgogCSJcdERlZmF1bHQ6IDAgKERpcmVjdCBNb2RlKS5cbiIpOwogCi1jaGFyIHNhc19hZGRyX3N0clsyKlNBU19BRERSX1NJWkUgKyAxXSA9ICIiOwotCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICphaWM5NHh4X3RyYW5zcG9ydF90ZW1wbGF0ZTsKIHN0YXRpYyBpbnQgYXNkX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqLCB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGFzZF9zY2FuX3N0YXJ0KHN0cnVjdCBTY3NpX0hvc3QgKik7CkBAIC01NDcsNyArNTQ1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgYXNkX2NyZWF0ZV9oYV9jYWNoZXMoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKK3N0YXRpYyBpbnQgYXNkX2NyZWF0ZV9oYV9jYWNoZXMoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKIHsKIAlhc2RfaGEtPnNjYl9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKEFTRF9EUklWRVJfTkFNRSAiX3NjYl9wb29sIiwKIAkJCQkJICAgJmFzZF9oYS0+cGNpZGV2LT5kZXYsCkBAIC01NjUsNyArNTYzLDcgQEAKICAqIGFzZF9mcmVlX2VkYnMgLS0gZnJlZSBlbXB0eSBkYXRhIGJ1ZmZlcnMKICAqIGFzZF9oYTogcG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfZnJlZV9lZGJzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCitzdGF0aWMgdm9pZCBhc2RfZnJlZV9lZGJzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCiB7CiAJc3RydWN0IGFzZF9zZXFfZGF0YSAqc2VxID0gJmFzZF9oYS0+c2VxOwogCWludCBpOwpAQCAtNTc2LDcgKzU3NCw3IEBACiAJc2VxLT5lZGJfYXJyID0gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzZF9mcmVlX2VzY2JzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCitzdGF0aWMgdm9pZCBhc2RfZnJlZV9lc2NicyhzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKQogewogCXN0cnVjdCBhc2Rfc2VxX2RhdGEgKnNlcSA9ICZhc2RfaGEtPnNlcTsKIAlpbnQgaTsKQEAgLTU5MSw3ICs1ODksNyBAQAogCXNlcS0+ZXNjYl9hcnIgPSBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2Rlc3Ryb3lfaGFfY2FjaGVzKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCitzdGF0aWMgdm9pZCBhc2RfZGVzdHJveV9oYV9jYWNoZXMoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKIHsKIAlpbnQgaTsKIApAQCAtMTAwMyw3ICsxMDAxLDcgQEAKIAkubGxkZF9hYm9ydF90YXNrX3NldAk9IGFzZF9hYm9ydF90YXNrX3NldCwKIAkubGxkZF9jbGVhcl9hY2EJCT0gYXNkX2NsZWFyX2FjYSwKIAkubGxkZF9jbGVhcl90YXNrX3NldAk9IGFzZF9jbGVhcl90YXNrX3NldCwKLQkubGxkZF9JX1RfbmV4dXNfcmVzZXQJPSBOVUxMLAorCS5sbGRkX0lfVF9uZXh1c19yZXNldAk9IGFzZF9JX1RfbmV4dXNfcmVzZXQsCiAJLmxsZGRfbHVfcmVzZXQJCT0gYXNkX2x1X3Jlc2V0LAogCS5sbGRkX3F1ZXJ5X3Rhc2sJPSBhc2RfcXVlcnlfdGFzaywKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9yZWcuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfcmVnLmMKaW5kZXggZjIxMGRhYy4uNTZiMTdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9yZWcuYworKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3JlZy5jCkBAIC0zMiw4ICszMiw4IEBACiAgKiBPZmZzZXQgY29tZXMgYmVmb3JlIHZhbHVlIHRvIHJlbWluZCB0aGF0IHRoZSBvcGVyYXRpb24gb2YKICAqIHRoaXMgZnVuY3Rpb24gaXMgKm9mZnMgPSB2YWwuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2Rfd3JpdGVfYnl0ZShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAotCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzLCB1OCB2YWwpCitzdGF0aWMgdm9pZCBhc2Rfd3JpdGVfYnl0ZShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAorCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzLCB1OCB2YWwpCiB7CiAJaWYgKHVubGlrZWx5KGFzZF9oYS0+aW9zcGFjZSkpCiAJCW91dGIodmFsLApAQCAtNDMsOCArNDMsOCBAQAogCXdtYigpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX3dyaXRlX3dvcmQoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgb2ZmcywgdTE2IHZhbCkKK3N0YXRpYyB2b2lkIGFzZF93cml0ZV93b3JkKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsCisJCQkgICB1bnNpZ25lZCBsb25nIG9mZnMsIHUxNiB2YWwpCiB7CiAJaWYgKHVubGlrZWx5KGFzZF9oYS0+aW9zcGFjZSkpCiAJCW91dHcodmFsLApAQCAtNTQsOCArNTQsOCBAQAogCXdtYigpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX3dyaXRlX2R3b3JkKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzLCB1MzIgdmFsKQorc3RhdGljIHZvaWQgYXNkX3dyaXRlX2R3b3JkKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsCisJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzLCB1MzIgdmFsKQogewogCWlmICh1bmxpa2VseShhc2RfaGEtPmlvc3BhY2UpKQogCQlvdXRsKHZhbCwKQEAgLTY3LDggKzY3LDcgQEAKIAogLyogUmVhZGluZyBmcm9tIGRldmljZSBhZGRyZXNzIHNwYWNlLgogICovCi1zdGF0aWMgaW5saW5lIHU4IGFzZF9yZWFkX2J5dGUoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnMpCitzdGF0aWMgdTggYXNkX3JlYWRfYnl0ZShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCB1bnNpZ25lZCBsb25nIG9mZnMpCiB7CiAJdTggdmFsOwogCWlmICh1bmxpa2VseShhc2RfaGEtPmlvc3BhY2UpKQpAQCAtODAsOCArNzksOCBAQAogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGFzZF9yZWFkX3dvcmQoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwKLQkJCQl1bnNpZ25lZCBsb25nIG9mZnMpCitzdGF0aWMgdTE2IGFzZF9yZWFkX3dvcmQoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwKKwkJCSB1bnNpZ25lZCBsb25nIG9mZnMpCiB7CiAJdTE2IHZhbDsKIAlpZiAodW5saWtlbHkoYXNkX2hhLT5pb3NwYWNlKSkKQEAgLTkzLDggKzkyLDggQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBhc2RfcmVhZF9kd29yZChzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAotCQkJCSB1bnNpZ25lZCBsb25nIG9mZnMpCitzdGF0aWMgdTMyIGFzZF9yZWFkX2R3b3JkKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsCisJCQkgIHVuc2lnbmVkIGxvbmcgb2ZmcykKIHsKIAl1MzIgdmFsOwogCWlmICh1bmxpa2VseShhc2RfaGEtPmlvc3BhY2UpKQpAQCAtMTI0LDIyICsxMjMsMjIgQEAKIC8qIFdlIGtub3cgdGhhdCB0aGUgcmVnaXN0ZXIgd2FudGVkIGlzIGluIHRoZSByYW5nZQogICogb2YgdGhlIHNsaWRpbmcgd2luZG93LgogICovCi0jZGVmaW5lIEFTRF9SRUFEX1NXKHd3LCB0eXBlLCBvcmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyBpbmxpbmUgdHlwZSBhc2RfcmVhZF8jI3d3IyNfIyNvcmQgKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsXAotCQkJCQkgIHUzMiByZWcpICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0Jc3RydWN0IGFzZF9oYV9hZGRyc3BhY2UgKmlvX2hhbmRsZSA9ICZhc2RfaGEtPmlvX2hhbmRsZVswXTsgICAgXAotCXUzMiBtYXBfb2Zmcz0ocmVnIC0gaW9faGFuZGxlLT4gd3cjI19iYXNlICkrYXNkX21lbV9vZmZzXyMjd3cgKCk7XAotCXJldHVybiBhc2RfcmVhZF8jI29yZCAoYXNkX2hhLCAodW5zaWduZWQgbG9uZykgbWFwX29mZnMpOyAgICAgIFwKKyNkZWZpbmUgQVNEX1JFQURfU1cod3csIHR5cGUsIG9yZCkJCQkJCVwKK3N0YXRpYyB0eXBlIGFzZF9yZWFkXyMjd3cjI18jI29yZChzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAkJXAorCQkJCSAgIHUzMiByZWcpCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IGFzZF9oYV9hZGRyc3BhY2UgKmlvX2hhbmRsZSA9ICZhc2RfaGEtPmlvX2hhbmRsZVswXTsJXAorCXUzMiBtYXBfb2ZmcyA9IChyZWcgLSBpb19oYW5kbGUtPnd3IyNfYmFzZSkgKyBhc2RfbWVtX29mZnNfIyN3dygpO1wKKwlyZXR1cm4gYXNkX3JlYWRfIyNvcmQoYXNkX2hhLCAodW5zaWduZWQgbG9uZyltYXBfb2Zmcyk7CVwKIH0KIAotI2RlZmluZSBBU0RfV1JJVEVfU1cod3csIHR5cGUsIG9yZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX3dyaXRlXyMjd3cjI18jI29yZCAoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSxcCi0JCQkJICB1MzIgcmVnLCB0eXBlIHZhbCkgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0Jc3RydWN0IGFzZF9oYV9hZGRyc3BhY2UgKmlvX2hhbmRsZSA9ICZhc2RfaGEtPmlvX2hhbmRsZVswXTsgICAgXAotCXUzMiBtYXBfb2Zmcz0ocmVnIC0gaW9faGFuZGxlLT4gd3cjI19iYXNlICkrYXNkX21lbV9vZmZzXyMjd3cgKCk7XAotCWFzZF93cml0ZV8jI29yZCAoYXNkX2hhLCAodW5zaWduZWQgbG9uZykgbWFwX29mZnMsIHZhbCk7ICAgICAgIFwKKyNkZWZpbmUgQVNEX1dSSVRFX1NXKHd3LCB0eXBlLCBvcmQpCQkJCQlcCitzdGF0aWMgdm9pZCBhc2Rfd3JpdGVfIyN3dyMjXyMjb3JkKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsCVwKKwkJCQkgICAgdTMyIHJlZywgdHlwZSB2YWwpCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgYXNkX2hhX2FkZHJzcGFjZSAqaW9faGFuZGxlID0gJmFzZF9oYS0+aW9faGFuZGxlWzBdOwlcCisJdTMyIG1hcF9vZmZzID0gKHJlZyAtIGlvX2hhbmRsZS0+d3cjI19iYXNlKSArIGFzZF9tZW1fb2Zmc18jI3d3KCk7XAorCWFzZF93cml0ZV8jI29yZChhc2RfaGEsICh1bnNpZ25lZCBsb25nKW1hcF9vZmZzLCB2YWwpOwkJXAogfQogCiBBU0RfUkVBRF9TVyhzd2EsIHU4LCAgYnl0ZSk7CkBAIC0xODYsNyArMTg1LDcgQEAKICAqIEBhc2RfaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZQogICogQHJlZzogcmVnaXN0ZXIgZGVzaXJlZCB0byBiZSB3aXRoaW4gcmFuZ2Ugb2YgdGhlIG5ldyB3aW5kb3cKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGFzZF9tb3ZlX3N3YihzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCB1MzIgcmVnKQorc3RhdGljIHZvaWQgYXNkX21vdmVfc3diKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIHUzMiByZWcpCiB7CiAJdTMyIGJhc2UgPSByZWcgJiB+KE1CQVIwX1NXQl9TSVpFLTEpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYXNkX2hhLT5wY2lkZXYsIFBDSV9DT05GX01CQVIwX1NXQiwgYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NjYi5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zY2IuYwppbmRleCAwZmViYWQ0Li40NjY0MzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NjYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2NiLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkJCSAgIHwgQ1VSUkVOVF9TUElOVVBfSE9MRCB8IENVUlJFTlRfR1RPX1RJTUVPVVQgXAogCQkJICAgfCBDVVJSRU5UX09PQl9FUlJPUikKIAotc3RhdGljIGlubGluZSB2b2lkIGdldF9scmF0ZV9tb2RlKHN0cnVjdCBhc2RfcGh5ICpwaHksIHU4IG9vYl9tb2RlKQorc3RhdGljIHZvaWQgZ2V0X2xyYXRlX21vZGUoc3RydWN0IGFzZF9waHkgKnBoeSwgdTggb29iX21vZGUpCiB7CiAJc3RydWN0IHNhc19waHkgKnNhc19waHkgPSBwaHktPnNhc19waHkucGh5OwogCkBAIC04MSw3ICs4MSw3IEBACiAJCXBoeS0+c2FzX3BoeS5vb2JfbW9kZSA9IFNBVEFfT09CX01PREU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfcGh5X2V2ZW50X3Rhc2tsZXQoc3RydWN0IGFzZF9hc2NiICphc2NiLAorc3RhdGljIHZvaWQgYXNkX3BoeV9ldmVudF90YXNrbGV0KHN0cnVjdCBhc2RfYXNjYiAqYXNjYiwKIAkJCQkJIHN0cnVjdCBkb25lX2xpc3Rfc3RydWN0ICpkbCkKIHsKIAlzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhID0gYXNjYi0+aGE7CkBAIC0xMjUsOCArMTI1LDcgQEAKIH0KIAogLyogSWYgcGh5cyBhcmUgZW5hYmxlZCBzcGFyc2VseSwgdGhpcyB3aWxsIGRvIHRoZSByaWdodCB0aGluZy4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgb3JkX3BoeShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAotCQkJICAgICAgIHN0cnVjdCBhc2RfcGh5ICpwaHkpCitzdGF0aWMgdW5zaWduZWQgb3JkX3BoeShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBzdHJ1Y3QgYXNkX3BoeSAqcGh5KQogewogCXU4IGVuYWJsZWRfbWFzayA9IGFzZF9oYS0+aHdfcHJvZi5lbmFibGVkX3BoeXM7CiAJaW50IGksIGsgPSAwOwpAQCAtMTUxLDcgKzE1MCw3IEBACiAgKiBMT0NLSU5HOiB0aGUgZnJhbWVfcmN2ZF9sb2NrIG5lZWRzIHRvIGJlIGhlbGQgc2luY2UgdGhpcyBwYXJzZXMgdGhlIGZyYW1lCiAgKiBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfZ2V0X2F0dGFjaGVkX3Nhc19hZGRyKHN0cnVjdCBhc2RfcGh5ICpwaHksIHU4ICpzYXNfYWRkcikKK3N0YXRpYyB2b2lkIGFzZF9nZXRfYXR0YWNoZWRfc2FzX2FkZHIoc3RydWN0IGFzZF9waHkgKnBoeSwgdTggKnNhc19hZGRyKQogewogCWlmIChwaHktPnNhc19waHkuZnJhbWVfcmN2ZFswXSA9PSAweDM0CiAJICAgICYmIHBoeS0+c2FzX3BoeS5vb2JfbW9kZSA9PSBTQVRBX09PQl9NT0RFKSB7CkBAIC0yMzIsOSArMjMxLDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2RfaGEtPmFzZF9wb3J0c19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfYnl0ZXNfZG1hZWRfdGFza2xldChzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IsCi0JCQkJCSAgIHN0cnVjdCBkb25lX2xpc3Rfc3RydWN0ICpkbCwKLQkJCQkJICAgaW50IGVkYl9pZCwgaW50IHBoeV9pZCkKK3N0YXRpYyB2b2lkIGFzZF9ieXRlc19kbWFlZF90YXNrbGV0KHN0cnVjdCBhc2RfYXNjYiAqYXNjYiwKKwkJCQkgICAgc3RydWN0IGRvbmVfbGlzdF9zdHJ1Y3QgKmRsLAorCQkJCSAgICBpbnQgZWRiX2lkLCBpbnQgcGh5X2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVkYl9lbCA9IGVkYl9pZCArIGFzY2ItPmVkYl9pbmRleDsKQEAgLTI1NSw5ICsyNTQsOSBAQAogCXNhc19oYS0+bm90aWZ5X3BvcnRfZXZlbnQoJnBoeS0+c2FzX3BoeSwgUE9SVEVfQllURVNfRE1BRUQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX2xpbmtfcmVzZXRfZXJyX3Rhc2tsZXQoc3RydWN0IGFzZF9hc2NiICphc2NiLAotCQkJCQkgICAgICBzdHJ1Y3QgZG9uZV9saXN0X3N0cnVjdCAqZGwsCi0JCQkJCSAgICAgIGludCBwaHlfaWQpCitzdGF0aWMgdm9pZCBhc2RfbGlua19yZXNldF9lcnJfdGFza2xldChzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IsCisJCQkJICAgICAgIHN0cnVjdCBkb25lX2xpc3Rfc3RydWN0ICpkbCwKKwkJCQkgICAgICAgaW50IHBoeV9pZCkKIHsKIAlzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhID0gYXNjYi0+aGE7CiAJc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSA9ICZhc2RfaGEtPnNhc19oYTsKQEAgLTMwOCw5ICszMDcsOSBAQAogCTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFzZF9wcmltaXRpdmVfcmN2ZF90YXNrbGV0KHN0cnVjdCBhc2RfYXNjYiAqYXNjYiwKLQkJCQkJICAgICAgc3RydWN0IGRvbmVfbGlzdF9zdHJ1Y3QgKmRsLAotCQkJCQkgICAgICBpbnQgcGh5X2lkKQorc3RhdGljIHZvaWQgYXNkX3ByaW1pdGl2ZV9yY3ZkX3Rhc2tsZXQoc3RydWN0IGFzZF9hc2NiICphc2NiLAorCQkJCSAgICAgICBzdHJ1Y3QgZG9uZV9saXN0X3N0cnVjdCAqZGwsCisJCQkJICAgICAgIGludCBwaHlfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gJmFzY2ItPmhhLT5zYXNfaGE7CkBAIC00NTgsMTMgKzQ1NywxOSBAQAogCQl0Y19hYm9ydCA9IGxlMTZfdG9fY3B1KHRjX2Fib3J0KTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYSwgYiwgJmFzZF9oYS0+c2VxLnBlbmRfcSwgbGlzdCkgewotCQkJc3RydWN0IHNhc190YXNrICp0YXNrID0gYXNjYi0+dWxkZF90YXNrOworCQkJc3RydWN0IHNhc190YXNrICp0YXNrID0gYS0+dWxkZF90YXNrOwogCi0JCQlpZiAodGFzayAmJiBhLT50Y19pbmRleCA9PSB0Y19hYm9ydCkgeworCQkJaWYgKGEtPnRjX2luZGV4ICE9IHRjX2Fib3J0KQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAodGFzaykgewogCQkJCWZhaWxlZF9kZXYgPSB0YXNrLT5kZXY7CiAJCQkJc2FzX3Rhc2tfYWJvcnQodGFzayk7Ci0JCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCUFTRF9EUFJJTlRLKCJSX1RfQSBmb3Igbm9uIFRBU0sgc2NiIDB4JXhcbiIsCisJCQkJCSAgICBhLT5zY2ItPmhlYWRlci5vcGNvZGUpOwogCQkJfQorCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoIWZhaWxlZF9kZXYpIHsKQEAgLTQ3OCw3ICs0ODMsNyBAQAogCQkgKiB0aGF0IHRoZSBFSCB3aWxsIHdha2UgdXAgYW5kIGRvIHNvbWV0aGluZy4KIAkJICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhLCBiLCAmYXNkX2hhLT5zZXEucGVuZF9xLCBsaXN0KSB7Ci0JCQlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBhc2NiLT51bGRkX3Rhc2s7CisJCQlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBhLT51bGRkX3Rhc2s7CiAKIAkJCWlmICh0YXNrICYmCiAJCQkgICAgdGFzay0+ZGV2ID09IGZhaWxlZF9kZXYgJiYKQEAgLTcwOSw3ICs3MTQsNyBAQAogCWFzZF9hc2NiX2ZyZWUoYXNjYik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3BlZWRfbWFzayh1OCAqc3BlZWRfbWFzaywgc3RydWN0IGFzZF9waHlfZGVzYyAqcGQpCitzdGF0aWMgdm9pZCBzZXRfc3BlZWRfbWFzayh1OCAqc3BlZWRfbWFzaywgc3RydWN0IGFzZF9waHlfZGVzYyAqcGQpCiB7CiAJLyogZGlzYWJsZSBhbGwgc3BlZWRzLCB0aGVuIGVuYWJsZSBkZWZhdWx0cyAqLwogCSpzcGVlZF9tYXNrID0gU0FTX1NQRUVEXzYwX0RJUyB8IFNBU19TUEVFRF8zMF9ESVMgfCBTQVNfU1BFRURfMTVfRElTCkBAIC04MTQsNiArODE5LDggQEAKIAogLyogLS0tLS0tLS0tLSBJTklUSUFURSBMSU5LIEFETSBUQVNLIC0tLS0tLS0tLS0gKi8KIAorI2lmIDAKKwogc3RhdGljIHZvaWQgbGlua19hZG1fdGFza2xldF9jb21wbGV0ZShzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IsCiAJCQkJICAgICAgc3RydWN0IGRvbmVfbGlzdF9zdHJ1Y3QgKmRsKQogewpAQCAtODQ2LDYgKzg1Myw4IEBACiAJYXNjYi0+dGFza2xldF9jb21wbGV0ZSA9IGxpbmtfYWRtX3Rhc2tsZXRfY29tcGxldGU7CiB9CiAKKyNlbmRpZiAgLyogIDAgICovCisKIC8qIC0tLS0tLS0tLS0gU0NCIHRpbWVyIC0tLS0tLS0tLS0gKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Nkcy5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZHMuYwppbmRleCAyYTRjOTMzLi40NDQ2ZTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Nkcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2RzLmMKQEAgLTU5MCw4ICs1OTAsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFzZF9yZWFkX2ZsYXNoX3NlZyhzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAotCQkJCSAgICAgdm9pZCAqYnVmZmVyLCB1MzIgb2ZmcywgaW50IHNpemUpCitzdGF0aWMgaW50IGFzZF9yZWFkX2ZsYXNoX3NlZyhzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLAorCQkJICAgICAgdm9pZCAqYnVmZmVyLCB1MzIgb2ZmcywgaW50IHNpemUpCiB7CiAJYXNkX3JlYWRfcmVnX3N0cmluZyhhc2RfaGEsIGJ1ZmZlciwgYXNkX2hhLT5od19wcm9mLmZsYXNoLmJhcitvZmZzLAogCQkJICAgIHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmMKaW5kZXggYzc1MGZiZi4uZjQyNzJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuYworKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jCkBAIC02MCw3ICs2MCw3IEBACiAgKgogICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KICAqLwotaW50IGFzZF9wYXVzZV9jc2VxKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCitzdGF0aWMgaW50IGFzZF9wYXVzZV9jc2VxKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCiB7CiAJaW50CWNvdW50ID0gUEFVU0VfVFJJRVM7CiAJdTMyCWFycDJjdGw7CkBAIC04Nyw3ICs4Nyw3IEBACiAgKgogICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3IuCiAgKi8KLWludCBhc2RfdW5wYXVzZV9jc2VxKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpCitzdGF0aWMgaW50IGFzZF91bnBhdXNlX2NzZXEoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSkKIHsKIAl1MzIJYXJwMmN0bDsKIAlpbnQJY291bnQgPSBQQVVTRV9UUklFUzsKQEAgLTExNSw3ICsxMTUsNyBAQAogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yLgogICovCi1zdGF0aWMgaW5saW5lIGludCBhc2Rfc2VxX3BhdXNlX2xzZXEoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgaW50IGxzZXEpCitzdGF0aWMgaW50IGFzZF9zZXFfcGF1c2VfbHNlcShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBpbnQgbHNlcSkKIHsKIAl1MzIgICAgYXJwMmN0bDsKIAlpbnQgICAgY291bnQgPSBQQVVTRV9UUklFUzsKQEAgLTE0Myw3ICsxNDMsNyBAQAogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCiAgKi8KLWludCBhc2RfcGF1c2VfbHNlcShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCB1OCBsc2VxX21hc2spCitzdGF0aWMgaW50IGFzZF9wYXVzZV9sc2VxKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIHU4IGxzZXFfbWFzaykKIHsKIAlpbnQgbHNlcTsKIAlpbnQgZXJyID0gMDsKQEAgLTE2NCw3ICsxNjQsNyBAQAogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yLgogICovCi1zdGF0aWMgaW5saW5lIGludCBhc2Rfc2VxX3VucGF1c2VfbHNlcShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBpbnQgbHNlcSkKK3N0YXRpYyBpbnQgYXNkX3NlcV91bnBhdXNlX2xzZXEoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgaW50IGxzZXEpCiB7CiAJdTMyIGFycDJjdGw7CiAJaW50IGNvdW50ID0gUEFVU0VfVFJJRVM7CkBAIC0xODYsMjcgKzE4Niw2IEBACiB9CiAKIAotLyoqCi0gKiBhc2RfdW5wYXVzZV9sc2VxIC0gdW5wYXVzZSB0aGUgbGluayBzZXF1ZW5jZXIocykKLSAqIEBhc2RfaGE6IHBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZQotICogQGxzZXFfbWFzazogbWFzayBvZiBsaW5rIHNlcXVlbmNlcnMgb2YgaW50ZXJlc3QKLSAqCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgotICovCi1pbnQgYXNkX3VucGF1c2VfbHNlcShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCB1OCBsc2VxX21hc2spCi17Ci0JaW50IGxzZXE7Ci0JaW50IGVyciA9IDA7Ci0KLQlmb3JfZWFjaF9zZXF1ZW5jZXIobHNlcV9tYXNrLCBsc2VxX21hc2ssIGxzZXEpIHsKLQkJZXJyID0gYXNkX3NlcV91bnBhdXNlX2xzZXEoYXNkX2hhLCBsc2VxKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQogLyogLS0tLS0tLS0tLSBEb3dubG9hZGluZyBDU0VRL0xTRVEgbWljcm9jb2RlIC0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBhc2RfdmVyaWZ5X2NzZXEoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgY29uc3QgdTggKl9wcm9nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmgKaW5kZXggMmVhNmEwZC4uYWQ3ODdjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuaAorKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5oCkBAIC01OCwxMCArNTgsNiBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2lmZGVmIF9fS0VSTkVMX18KLWludCBhc2RfcGF1c2VfY3NlcShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhKTsKLWludCBhc2RfdW5wYXVzZV9jc2VxKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEpOwotaW50IGFzZF9wYXVzZV9sc2VxKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIHU4IGxzZXFfbWFzayk7Ci1pbnQgYXNkX3VucGF1c2VfbHNlcShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCB1OCBsc2VxX21hc2spOwogaW50IGFzZF9pbml0X3NlcXMoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSk7CiBpbnQgYXNkX3N0YXJ0X3NlcXMoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSk7CiBpbnQgYXNkX3JlbGVhc2VfZmlybXdhcmUodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3Rhc2suYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfdGFzay5jCmluZGV4IDk2NWQ0YmIuLjMyNjc2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfdGFzay5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfdGFzay5jCkBAIC0zMyw3ICszMyw3IEBACiBzdGF0aWMgdm9pZCBhc2RfdW5idWlsZF9zbXBfYXNjYihzdHJ1Y3QgYXNkX2FzY2IgKmEpOwogc3RhdGljIHZvaWQgYXNkX3VuYnVpbGRfc3NwX2FzY2Ioc3RydWN0IGFzZF9hc2NiICphKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGFzZF9jYW5fZGVxdWV1ZShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBpbnQgbnVtKQorc3RhdGljIHZvaWQgYXNkX2Nhbl9kZXF1ZXVlKHN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEsIGludCBudW0pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNTEsOSArNTEsOSBAQAogCVtQQ0lfRE1BX05PTkVdICAgICAgICAgID0gREFUQV9ESVJfTk9ORSwgLyogTk8gVFJBTlNGRVIgKi8KIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFzZF9tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHNhc190YXNrICp0YXNrLAotCQkJCSAgICAgIHN0cnVjdCBzZ19lbCAqc2dfYXJyLAotCQkJCSAgICAgIGdmcF90IGdmcF9mbGFncykKK3N0YXRpYyBpbnQgYXNkX21hcF9zY2F0dGVybGlzdChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssCisJCQkgICAgICAgc3RydWN0IHNnX2VsICpzZ19hcnIsCisJCQkgICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBhc2RfYXNjYiAqYXNjYiA9IHRhc2stPmxsZGRfdGFzazsKIAlzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhID0gYXNjYi0+aGE7CkBAIC0xMzEsNyArMTMxLDcgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNkX3VubWFwX3NjYXR0ZXJsaXN0KHN0cnVjdCBhc2RfYXNjYiAqYXNjYikKK3N0YXRpYyB2b2lkIGFzZF91bm1hcF9zY2F0dGVybGlzdChzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IpCiB7CiAJc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSA9IGFzY2ItPmhhOwogCXN0cnVjdCBzYXNfdGFzayAqdGFzayA9IGFzY2ItPnVsZGRfdGFzazsKQEAgLTM0MywxMSArMzQzLDEzIEBACiAJdGFzay0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOwogCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfU1RBVEVfRE9ORTsKIAlpZiAodW5saWtlbHkoKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSkpIHsKKwkJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24gPSBhc2NiLT5jb21wbGV0aW9uOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAkJQVNEX0RQUklOVEsoInRhc2sgMHglcCBkb25lIHdpdGggb3Bjb2RlIDB4JXggcmVzcCAweCV4ICIKIAkJCSAgICAic3RhdCAweCV4IGJ1dCBhYm9ydGVkIGJ5IHVwcGVyIGxheWVyIVxuIiwKIAkJCSAgICB0YXNrLCBvcGNvZGUsIHRzLT5yZXNwLCB0cy0+c3RhdCk7Ci0JCWNvbXBsZXRlKCZhc2NiLT5jb21wbGV0aW9uKTsKKwkJaWYgKGNvbXBsZXRpb24pCisJCQljb21wbGV0ZShjb21wbGV0aW9uKTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAkJdGFzay0+bGxkZF90YXNrID0gTlVMTDsKQEAgLTUyNSw3ICs1MjcsNyBAQAogCiAvKiAtLS0tLS0tLS0tIEV4ZWN1dGUgVGFzayAtLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGFzZF9jYW5fcXVldWUoc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSwgaW50IG51bSkKK3N0YXRpYyBpbnQgYXNkX2Nhbl9xdWV1ZShzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhLCBpbnQgbnVtKQogewogCWludCByZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3RtZi5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90bWYuYwppbmRleCBiNTIxMjRmLi42MzNmZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3RtZi5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfdG1mLmMKQEAgLTUzLDUwICs1Myw2NCBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc2RfdGltZWRvdXRfY29tbW9uKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IgPSAodm9pZCAqKSBkYXRhOwotCXN0cnVjdCBhc2Rfc2VxX2RhdGEgKnNlcSA9ICZhc2NiLT5oYS0+c2VxOwotICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlcS0+cGVuZF9xX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgc2VxLT5wZW5kaW5nLS07Ci0gICAgICAgIGxpc3RfZGVsX2luaXQoJmFzY2ItPmxpc3QpOwotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXEtPnBlbmRfcV9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0gQ0xFQVIgTkVYVVMgLS0tLS0tLS0tLSAqLwogCitzdHJ1Y3QgdGFza2xldF9jb21wbGV0aW9uX3N0YXR1cyB7CisJaW50CWRsX29wY29kZTsKKwlpbnQJdG1mX3N0YXRlOworCXU4CXRhZ192YWxpZDoxOworCV9fYmUxNgl0YWc7Cit9OworCisjZGVmaW5lIERFQ0xBUkVfVENTKHRjcykgXAorCXN0cnVjdCB0YXNrbGV0X2NvbXBsZXRpb25fc3RhdHVzIHRjcyA9IHsgXAorCQkuZGxfb3Bjb2RlID0gMCwgXAorCQkudG1mX3N0YXRlID0gMCwgXAorCQkudGFnX3ZhbGlkID0gMCwgXAorCQkudGFnID0gMCwgXAorCX0KKworCiBzdGF0aWMgdm9pZCBhc2RfY2xlYXJfbmV4dXNfdGFza2xldF9jb21wbGV0ZShzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IsCiAJCQkJCSAgICAgc3RydWN0IGRvbmVfbGlzdF9zdHJ1Y3QgKmRsKQogeworCXN0cnVjdCB0YXNrbGV0X2NvbXBsZXRpb25fc3RhdHVzICp0Y3MgPSBhc2NiLT51bGRkX3Rhc2s7CiAJQVNEX0RQUklOVEsoIiVzOiBoZXJlXG4iLCBfX0ZVTkNUSU9OX18pOwogCWlmICghZGVsX3RpbWVyKCZhc2NiLT50aW1lcikpIHsKIAkJQVNEX0RQUklOVEsoIiVzOiBjb3VsZG4ndCBkZWxldGUgdGltZXJcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9CiAJQVNEX0RQUklOVEsoIiVzOiBvcGNvZGU6IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgZGwtPm9wY29kZSk7Ci0JYXNjYi0+dWxkZF90YXNrID0gKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpIGRsLT5vcGNvZGU7Ci0JY29tcGxldGUoJmFzY2ItPmNvbXBsZXRpb24pOworCXRjcy0+ZGxfb3Bjb2RlID0gZGwtPm9wY29kZTsKKwljb21wbGV0ZShhc2NiLT5jb21wbGV0aW9uKTsKKwlhc2RfYXNjYl9mcmVlKGFzY2IpOwogfQogCiBzdGF0aWMgdm9pZCBhc2RfY2xlYXJfbmV4dXNfdGltZWRvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBhc2RfYXNjYiAqYXNjYiA9ICh2b2lkICopIGRhdGE7CisJc3RydWN0IGFzZF9hc2NiICphc2NiID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCB0YXNrbGV0X2NvbXBsZXRpb25fc3RhdHVzICp0Y3MgPSBhc2NiLT51bGRkX3Rhc2s7CiAKIAlBU0RfRFBSSU5USygiJXM6IGhlcmVcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JYXNkX3RpbWVkb3V0X2NvbW1vbihkYXRhKTsKLQlhc2NiLT51bGRkX3Rhc2sgPSAodm9pZCAqKSBUTUZfUkVTUF9GVU5DX0ZBSUxFRDsKLQljb21wbGV0ZSgmYXNjYi0+Y29tcGxldGlvbik7CisJdGNzLT5kbF9vcGNvZGUgPSBUTUZfUkVTUF9GVU5DX0ZBSUxFRDsKKwljb21wbGV0ZShhc2NiLT5jb21wbGV0aW9uKTsKIH0KIAogI2RlZmluZSBDTEVBUl9ORVhVU19QUkUgICAgICAgICBcCisJc3RydWN0IGFzZF9hc2NiICphc2NiOyBcCisJc3RydWN0IHNjYiAqc2NiOyBcCisJaW50IHJlczsgXAorCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRpb24pOyBcCisJREVDTEFSRV9UQ1ModGNzKTsgXAorCQlcCiAJQVNEX0RQUklOVEsoIiVzOiBQUkVcbiIsIF9fRlVOQ1RJT05fXyk7IFwKICAgICAgICAgcmVzID0gMTsgICAgICAgICAgICAgICAgXAogCWFzY2IgPSBhc2RfYXNjYl9hbGxvY19saXN0KGFzZF9oYSwgJnJlcywgR0ZQX0tFUk5FTCk7IFwKIAlpZiAoIWFzY2IpICAgICAgICAgICAgICBcCiAJCXJldHVybiAtRU5PTUVNOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlhc2NiLT5jb21wbGV0aW9uID0gJmNvbXBsZXRpb247IFwKKwlhc2NiLT51bGRkX3Rhc2sgPSAmdGNzOyBcCiAJc2NiID0gYXNjYi0+c2NiOyAgICAgICAgXAogCXNjYi0+aGVhZGVyLm9wY29kZSA9IENMRUFSX05FWFVTCiAKQEAgLTEwNywxMCArMTIxLDExIEBACiAJaWYgKHJlcykgICAgICAgICAgICAgICAgXAogCQlnb3RvIG91dF9lcnI7ICAgXAogCUFTRF9EUFJJTlRLKCIlczogY2xlYXIgbmV4dXMgcG9zdGVkLCB3YWl0aW5nLi4uXG4iLCBfX0ZVTkNUSU9OX18pOyBcCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmYXNjYi0+Y29tcGxldGlvbik7IFwKLQlyZXMgPSAoaW50KSAodW5zaWduZWQgbG9uZykgYXNjYi0+dWxkZF90YXNrOyBcCisJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcGxldGlvbik7IFwKKwlyZXMgPSB0Y3MuZGxfb3Bjb2RlOyBcCiAJaWYgKHJlcyA9PSBUQ19OT19FUlJPUikgXAogCQlyZXMgPSBUTUZfUkVTUF9GVU5DX0NPTVBMRVRFOyAgIFwKKwlyZXR1cm4gcmVzOyBcCiBvdXRfZXJyOiAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlhc2RfYXNjYl9mcmVlKGFzY2IpOyAgICBcCiAJcmV0dXJuIHJlcwpAQCAtMTE4LDkgKzEzMyw2IEBACiBpbnQgYXNkX2NsZWFyX25leHVzX2hhKHN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEpCiB7CiAJc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSA9IHNhc19oYS0+bGxkZF9oYTsKLQlzdHJ1Y3QgYXNkX2FzY2IgKmFzY2I7Ci0Jc3RydWN0IHNjYiAqc2NiOwotCWludCByZXM7CiAKIAlDTEVBUl9ORVhVU19QUkU7CiAJc2NiLT5jbGVhcl9uZXh1cy5uZXh1cyA9IE5FWFVTX0FEQVBURVI7CkBAIC0xMzAsOSArMTQyLDYgQEAKIGludCBhc2RfY2xlYXJfbmV4dXNfcG9ydChzdHJ1Y3QgYXNkX3Nhc19wb3J0ICpwb3J0KQogewogCXN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEgPSBwb3J0LT5oYS0+bGxkZF9oYTsKLQlzdHJ1Y3QgYXNkX2FzY2IgKmFzY2I7Ci0Jc3RydWN0IHNjYiAqc2NiOwotCWludCByZXM7CiAKIAlDTEVBUl9ORVhVU19QUkU7CiAJc2NiLT5jbGVhcl9uZXh1cy5uZXh1cyA9IE5FWFVTX1BPUlQ7CkBAIC0xNDAsMzcgKzE0OSw3NyBAQAogCUNMRUFSX05FWFVTX1BPU1Q7CiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50IGFzZF9jbGVhcl9uZXh1c19JX1Qoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldikKK2VudW0gY2xlYXJfbmV4dXNfcGhhc2UgeworCU5FWFVTX1BIQVNFX1BSRSwKKwlORVhVU19QSEFTRV9QT1NULAorCU5FWFVTX1BIQVNFX1JFU1VNRSwKK307CisKK3N0YXRpYyBpbnQgYXNkX2NsZWFyX25leHVzX0lfVChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LAorCQkJICAgICAgIGVudW0gY2xlYXJfbmV4dXNfcGhhc2UgcGhhc2UpCiB7CiAJc3RydWN0IGFzZF9oYV9zdHJ1Y3QgKmFzZF9oYSA9IGRldi0+cG9ydC0+aGEtPmxsZGRfaGE7Ci0Jc3RydWN0IGFzZF9hc2NiICphc2NiOwotCXN0cnVjdCBzY2IgKnNjYjsKLQlpbnQgcmVzOwogCiAJQ0xFQVJfTkVYVVNfUFJFOwogCXNjYi0+Y2xlYXJfbmV4dXMubmV4dXMgPSBORVhVU19JX1Q7Ci0Jc2NiLT5jbGVhcl9uZXh1cy5mbGFncyA9IFNFTkRfUSB8IEVYRUNfUSB8IE5PVElOUTsKLQlpZiAoZGV2LT50cHJvdG8pCi0JCXNjYi0+Y2xlYXJfbmV4dXMuZmxhZ3MgfD0gU1VTUEVORF9UWDsKKwlzd2l0Y2ggKHBoYXNlKSB7CisJY2FzZSBORVhVU19QSEFTRV9QUkU6CisJCXNjYi0+Y2xlYXJfbmV4dXMuZmxhZ3MgPSBFWEVDX1EgfCBTVVNQRU5EX1RYOworCQlicmVhazsKKwljYXNlIE5FWFVTX1BIQVNFX1BPU1Q6CisJCXNjYi0+Y2xlYXJfbmV4dXMuZmxhZ3MgPSBTRU5EX1EgfCBOT1RJTlE7CisJCWJyZWFrOworCWNhc2UgTkVYVVNfUEhBU0VfUkVTVU1FOgorCQlzY2ItPmNsZWFyX25leHVzLmZsYWdzID0gUkVTVU1FX1RYOworCX0KIAlzY2ItPmNsZWFyX25leHVzLmNvbm5faGFuZGxlID0gY3B1X3RvX2xlMTYoKHUxNikodW5zaWduZWQgbG9uZykKIAkJCQkJCSAgIGRldi0+bGxkZF9kZXYpOwogCUNMRUFSX05FWFVTX1BPU1Q7CiB9Ci0jZW5kaWYKKworaW50IGFzZF9JX1RfbmV4dXNfcmVzZXQoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmVzLCB0bXBfcmVzLCBpOworCXN0cnVjdCBzYXNfcGh5ICpwaHkgPSBzYXNfZmluZF9sb2NhbF9waHkoZGV2KTsKKwkvKiBTdGFuZGFyZCBtYW5kYXRlcyBsaW5rIHJlc2V0IGZvciBBVEEgICh0eXBlIDApIGFuZAorCSAqIGhhcmQgcmVzZXQgZm9yIFNTUCAodHlwZSAxKSAqLworCWludCByZXNldF90eXBlID0gKGRldi0+ZGV2X3R5cGUgPT0gU0FUQV9ERVYgfHwKKwkJCSAgKGRldi0+dHByb3RvICYgU0FTX1BST1RPQ09MX1NUUCkpID8gMCA6IDE7CisKKwlhc2RfY2xlYXJfbmV4dXNfSV9UKGRldiwgTkVYVVNfUEhBU0VfUFJFKTsKKwkvKiBzZW5kIGEgaGFyZCByZXNldCAqLworCUFTRF9EUFJJTlRLKCJzZW5kaW5nICVzIHJlc2V0IHRvICVzXG4iLAorCQkgICAgcmVzZXRfdHlwZSA/ICJoYXJkIiA6ICJzb2Z0IiwgcGh5LT5kZXYuYnVzX2lkKTsKKwlyZXMgPSBzYXNfcGh5X3Jlc2V0KHBoeSwgcmVzZXRfdHlwZSk7CisJaWYgKHJlcyA9PSBUTUZfUkVTUF9GVU5DX0NPTVBMRVRFKSB7CisJCS8qIHdhaXQgZm9yIHRoZSBtYXhpbXVtIHNldHRsZSB0aW1lICovCisJCW1zbGVlcCg1MDApOworCQkvKiBjbGVhciBhbGwgb3V0c3RhbmRpbmcgY29tbWFuZHMgKGtlZXAgbmV4dXMgc3VzcGVuZGVkKSAqLworCQlhc2RfY2xlYXJfbmV4dXNfSV9UKGRldiwgTkVYVVNfUEhBU0VfUE9TVCk7CisJfQorCWZvciAoaSA9IDAgOyBpIDwgMzsgaSsrKSB7CisJCXRtcF9yZXMgPSBhc2RfY2xlYXJfbmV4dXNfSV9UKGRldiwgTkVYVVNfUEhBU0VfUkVTVU1FKTsKKwkJaWYgKHRtcF9yZXMgPT0gVENfUkVTVU1FKQorCQkJcmV0dXJuIHJlczsKKwkJbXNsZWVwKDUwMCk7CisJfQorCisJLyogVGhpcyBpcyBhIGJpdCBvZiBhIHByb2JsZW06ICB0aGUgc2VxdWVuY2VyIGlzIHN0aWxsIHN1c3BlbmRlZAorCSAqIGFuZCBpcyByZWZ1c2luZyB0byByZXN1bWUuICBIb3BlIGl0IHdpbGwgcmVzdW1lIG9uIGEgYmlnZ2VyIGhhbW1lcgorCSAqIG9yIHRoZSBkaXNrIGlzIGxvc3QgKi8KKwlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGh5LT5kZXYsCisJCSAgICJGYWlsZWQgdG8gcmVzdW1lIG5leHVzIGFmdGVyIHJlc2V0IDB4JXhcbiIsIHRtcF9yZXMpOworCisJcmV0dXJuIFRNRl9SRVNQX0ZVTkNfRkFJTEVEOworfQogCiBzdGF0aWMgaW50IGFzZF9jbGVhcl9uZXh1c19JX1RfTChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LCB1OCAqbHVuKQogewogCXN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEgPSBkZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwotCXN0cnVjdCBhc2RfYXNjYiAqYXNjYjsKLQlzdHJ1Y3Qgc2NiICpzY2I7Ci0JaW50IHJlczsKIAogCUNMRUFSX05FWFVTX1BSRTsKIAlzY2ItPmNsZWFyX25leHVzLm5leHVzID0gTkVYVVNfSV9UX0w7CiAJc2NiLT5jbGVhcl9uZXh1cy5mbGFncyA9IFNFTkRfUSB8IEVYRUNfUSB8IE5PVElOUTsKLQlpZiAoZGV2LT50cHJvdG8pCi0JCXNjYi0+Y2xlYXJfbmV4dXMuZmxhZ3MgfD0gU1VTUEVORF9UWDsKIAltZW1jcHkoc2NiLT5jbGVhcl9uZXh1cy5zc3BfdGFzay5sdW4sIGx1biwgOCk7CiAJc2NiLT5jbGVhcl9uZXh1cy5jb25uX2hhbmRsZSA9IGNwdV90b19sZTE2KCh1MTYpKHVuc2lnbmVkIGxvbmcpCiAJCQkJCQkgICBkZXYtPmxsZGRfZGV2KTsKQEAgLTE4MSw5ICsyMzAsNiBAQAogewogCXN0cnVjdCBhc2RfaGFfc3RydWN0ICphc2RfaGEgPSB0YXNrLT5kZXYtPnBvcnQtPmhhLT5sbGRkX2hhOwogCXN0cnVjdCBhc2RfYXNjYiAqdGFzY2IgPSB0YXNrLT5sbGRkX3Rhc2s7Ci0Jc3RydWN0IGFzZF9hc2NiICphc2NiOwotCXN0cnVjdCBzY2IgKnNjYjsKLQlpbnQgcmVzOwogCiAJQ0xFQVJfTkVYVVNfUFJFOwogCXNjYi0+Y2xlYXJfbmV4dXMubmV4dXMgPSBORVhVU19UQUc7CkBAIC0xOTksOSArMjQ1LDYgQEAKIHsKIAlzdHJ1Y3QgYXNkX2hhX3N0cnVjdCAqYXNkX2hhID0gdGFzay0+ZGV2LT5wb3J0LT5oYS0+bGxkZF9oYTsKIAlzdHJ1Y3QgYXNkX2FzY2IgKnRhc2NiID0gdGFzay0+bGxkZF90YXNrOwotCXN0cnVjdCBhc2RfYXNjYiAqYXNjYjsKLQlzdHJ1Y3Qgc2NiICpzY2I7Ci0JaW50IHJlczsKIAogCUNMRUFSX05FWFVTX1BSRTsKIAlzY2ItPmNsZWFyX25leHVzLm5leHVzID0gTkVYVVNfVFJBTlNfQ1g7CkBAIC0yMTcsMTEgKzI2MCwxMSBAQAogc3RhdGljIHZvaWQgYXNkX3RtZl90aW1lZG91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGFzZF9hc2NiICphc2NiID0gKHZvaWQgKikgZGF0YTsKKwlzdHJ1Y3QgdGFza2xldF9jb21wbGV0aW9uX3N0YXR1cyAqdGNzID0gYXNjYi0+dWxkZF90YXNrOwogCiAJQVNEX0RQUklOVEsoInRtZiB0aW1lZCBvdXRcbiIpOwotCWFzZF90aW1lZG91dF9jb21tb24oZGF0YSk7Ci0JYXNjYi0+dWxkZF90YXNrID0gKHZvaWQgKikgVE1GX1JFU1BfRlVOQ19GQUlMRUQ7Ci0JY29tcGxldGUoJmFzY2ItPmNvbXBsZXRpb24pOworCXRjcy0+dG1mX3N0YXRlID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CisJY29tcGxldGUoYXNjYi0+Y29tcGxldGlvbik7CiB9CiAKIHN0YXRpYyBpbnQgYXNkX2dldF90bWZfcmVzcF90YXNrbGV0KHN0cnVjdCBhc2RfYXNjYiAqYXNjYiwKQEAgLTI3MywzNCArMzE2LDQ0IEBACiBzdGF0aWMgdm9pZCBhc2RfdG1mX3Rhc2tsZXRfY29tcGxldGUoc3RydWN0IGFzZF9hc2NiICphc2NiLAogCQkJCSAgICAgc3RydWN0IGRvbmVfbGlzdF9zdHJ1Y3QgKmRsKQogeworCXN0cnVjdCB0YXNrbGV0X2NvbXBsZXRpb25fc3RhdHVzICp0Y3M7CisKIAlpZiAoIWRlbF90aW1lcigmYXNjYi0+dGltZXIpKQogCQlyZXR1cm47CiAKKwl0Y3MgPSBhc2NiLT51bGRkX3Rhc2s7CiAJQVNEX0RQUklOVEsoInRtZiB0YXNrbGV0IGNvbXBsZXRlXG4iKTsKIAotCWlmIChkbC0+b3Bjb2RlID09IFRDX1NTUF9SRVNQKQotCQlhc2NiLT51bGRkX3Rhc2sgPSAodm9pZCAqKSAodW5zaWduZWQgbG9uZykKLQkJCWFzZF9nZXRfdG1mX3Jlc3BfdGFza2xldChhc2NiLCBkbCk7Ci0JZWxzZQotCQlhc2NiLT51bGRkX3Rhc2sgPSAodm9pZCAqKSAweEZGMDAgKyAodW5zaWduZWQgbG9uZykgZGwtPm9wY29kZTsKKwl0Y3MtPmRsX29wY29kZSA9IGRsLT5vcGNvZGU7CiAKLQljb21wbGV0ZSgmYXNjYi0+Y29tcGxldGlvbik7CisJaWYgKGRsLT5vcGNvZGUgPT0gVENfU1NQX1JFU1ApIHsKKwkJdGNzLT50bWZfc3RhdGUgPSBhc2RfZ2V0X3RtZl9yZXNwX3Rhc2tsZXQoYXNjYiwgZGwpOworCQl0Y3MtPnRhZ192YWxpZCA9IGFzY2ItPnRhZ192YWxpZDsKKwkJdGNzLT50YWcgPSBhc2NiLT50YWc7CisJfQorCisJY29tcGxldGUoYXNjYi0+Y29tcGxldGlvbik7CisJYXNkX2FzY2JfZnJlZShhc2NiKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXNkX2NsZWFyX25leHVzKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKK3N0YXRpYyBpbnQgYXNkX2NsZWFyX25leHVzKHN0cnVjdCBzYXNfdGFzayAqdGFzaykKIHsKIAlpbnQgcmVzID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CiAJaW50IGxlZnRvdmVyOwogCXN0cnVjdCBhc2RfYXNjYiAqdGFzY2IgPSB0YXNrLT5sbGRkX3Rhc2s7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGlvbik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXRhc2NiLT5jb21wbGV0aW9uID0gJmNvbXBsZXRpb247CisKIAlBU0RfRFBSSU5USygidGFzayBub3QgZG9uZSwgY2xlYXJpbmcgbmV4dXNcbiIpOwogCWlmICh0YXNjYi0+dGFnX3ZhbGlkKQogCQlyZXMgPSBhc2RfY2xlYXJfbmV4dXNfdGFnKHRhc2spOwogCWVsc2UKIAkJcmVzID0gYXNkX2NsZWFyX25leHVzX2luZGV4KHRhc2spOwotCWxlZnRvdmVyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ0YXNjYi0+Y29tcGxldGlvbiwKKwlsZWZ0b3ZlciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY29tcGxldGlvbiwKIAkJCQkJICAgICAgIEFJQzk0WFhfU0NCX1RJTUVPVVQpOworCXRhc2NiLT5jb21wbGV0aW9uID0gTlVMTDsKIAlBU0RfRFBSSU5USygiY2FtZSBiYWNrIGZyb20gY2xlYXIgbmV4dXNcbiIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAlpZiAobGVmdG92ZXIgPCAxKQpAQCAtMzU0LDYgKzQwNywxMSBAQAogCXN0cnVjdCBhc2RfYXNjYiAqYXNjYiA9IE5VTEw7CiAJc3RydWN0IHNjYiAqc2NiOwogCWludCBsZWZ0b3ZlcjsKKwlERUNMQVJFX1RDUyh0Y3MpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRpb24pOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHRhc2NiX2NvbXBsZXRpb24pOworCisJdGFzY2ItPmNvbXBsZXRpb24gPSAmdGFzY2JfY29tcGxldGlvbjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAlpZiAodGFzay0+dGFza19zdGF0ZV9mbGFncyAmIFNBU19UQVNLX1NUQVRFX0RPTkUpIHsKQEAgLTM2Nyw4ICs0MjUsMTAgQEAKIAlhc2NiID0gYXNkX2FzY2JfYWxsb2NfbGlzdChhc2RfaGEsICZyZXMsIEdGUF9LRVJORUwpOwogCWlmICghYXNjYikKIAkJcmV0dXJuIC1FTk9NRU07Ci0Jc2NiID0gYXNjYi0+c2NiOwogCisJYXNjYi0+dWxkZF90YXNrID0gJnRjczsKKwlhc2NiLT5jb21wbGV0aW9uID0gJmNvbXBsZXRpb247CisJc2NiID0gYXNjYi0+c2NiOwogCXNjYi0+aGVhZGVyLm9wY29kZSA9IFNDQl9BQk9SVF9UQVNLOwogCiAJc3dpdGNoICh0YXNrLT50YXNrX3Byb3RvKSB7CkBAIC00MTAsMTMgKzQ3MCwxMiBAQAogCXJlcyA9IGFzZF9lbnF1ZXVlX2ludGVybmFsKGFzY2IsIGFzZF90bWZfdGFza2xldF9jb21wbGV0ZSwKIAkJCQkgICBhc2RfdG1mX3RpbWVkb3V0KTsKIAlpZiAocmVzKQotCQlnb3RvIG91dDsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhc2NiLT5jb21wbGV0aW9uKTsKKwkJZ290byBvdXRfZnJlZTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0aW9uKTsKIAlBU0RfRFBSSU5USygidG1mIGNhbWUgYmFja1xuIik7CiAKLQlyZXMgPSAoaW50KSAodW5zaWduZWQgbG9uZykgYXNjYi0+dWxkZF90YXNrOwotCXRhc2NiLT50YWcgPSBhc2NiLT50YWc7Ci0JdGFzY2ItPnRhZ192YWxpZCA9IGFzY2ItPnRhZ192YWxpZDsKKwl0YXNjYi0+dGFnID0gdGNzLnRhZzsKKwl0YXNjYi0+dGFnX3ZhbGlkID0gdGNzLnRhZ192YWxpZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAlpZiAodGFzay0+dGFza19zdGF0ZV9mbGFncyAmIFNBU19UQVNLX1NUQVRFX0RPTkUpIHsKQEAgLTQyNyw2MyArNDg2LDY4IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwogCi0Jc3dpdGNoIChyZXMpIHsKLQkvKiBUaGUgdGFzayB0byBiZSBhYm9ydGVkIGhhcyBiZWVuIHNlbnQgdG8gdGhlIGRldmljZS4KLQkgKiBXZSBnb3QgYSBSZXNwb25zZSBJVSBmb3IgdGhlIEFCT1JUIFRBU0sgVE1GLiAqLwotCWNhc2UgVENfTk9fRVJST1IgKyAweEZGMDA6Ci0JY2FzZSBUTUZfUkVTUF9GVU5DX0NPTVBMRVRFOgotCWNhc2UgVE1GX1JFU1BfRlVOQ19GQUlMRUQ6Ci0JCXJlcyA9IGFzZF9jbGVhcl9uZXh1cyh0YXNrKTsKLQkJYnJlYWs7Ci0JY2FzZSBUTUZfUkVTUF9JTlZBTElEX0ZSQU1FOgotCWNhc2UgVE1GX1JFU1BfT1ZFUkxBUFBFRF9UQUc6Ci0JY2FzZSBUTUZfUkVTUF9GVU5DX0VTVVBQOgotCWNhc2UgVE1GX1JFU1BfTk9fTFVOOgotCQlnb3RvIG91dF9kb25lOyBicmVhazsKLQl9Ci0JLyogSW4gdGhlIGZvbGxvd2luZyB3ZSBhc3N1bWUgdGhhdCB0aGUgbWFuYWdpbmcgbGF5ZXIKLQkgKiB3aWxsIF9uZXZlcl8gbWFrZSBhIG1pc3Rha2UsIHdoZW4gaXNzdWluZyBBQk9SVCBUQVNLLgotCSAqLwotCXN3aXRjaCAocmVzKSB7Ci0JZGVmYXVsdDoKLQkJcmVzID0gYXNkX2NsZWFyX25leHVzKHRhc2spOwotCQkvKiBmYWxsdGhyb3VnaCAqLwotCWNhc2UgVENfTk9fRVJST1IgKyAweEZGMDA6Ci0JY2FzZSBUTUZfUkVTUF9GVU5DX0NPTVBMRVRFOgotCQlicmVhazsKLQkvKiBUaGUgdGFzayBoYXNuJ3QgYmVlbiBzZW50IHRvIHRoZSBkZXZpY2UgeG9yIHdlIG5ldmVyIGdvdAotCSAqIGEgKHNhbmUpIFJlc3BvbnNlIElVIGZvciB0aGUgQUJPUlQgVEFTSyBUTUYuCi0JICovCi0JY2FzZSBURl9OQUtfUkVDViArIDB4RkYwMDoKLQkJcmVzID0gVE1GX1JFU1BfSU5WQUxJRF9GUkFNRTsKLQkJYnJlYWs7Ci0JY2FzZSBURl9UTUZfVEFTS19ET05FICsgMHhGRjAwOgkvKiBkb25lIGJ1dCBub3QgcmVwb3J0ZWQgeWV0ICovCisJaWYgKHRjcy5kbF9vcGNvZGUgPT0gVENfU1NQX1JFU1ApIHsKKwkJLyogVGhlIHRhc2sgdG8gYmUgYWJvcnRlZCBoYXMgYmVlbiBzZW50IHRvIHRoZSBkZXZpY2UuCisJCSAqIFdlIGdvdCBhIFJlc3BvbnNlIElVIGZvciB0aGUgQUJPUlQgVEFTSyBUTUYuICovCisJCWlmICh0Y3MudG1mX3N0YXRlID09IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEUpCisJCQlyZXMgPSBhc2RfY2xlYXJfbmV4dXModGFzayk7CisJCWVsc2UKKwkJCXJlcyA9IHRjcy50bWZfc3RhdGU7CisJfSBlbHNlIGlmICh0Y3MuZGxfb3Bjb2RlID09IFRDX05PX0VSUk9SICYmCisJCSAgIHRjcy50bWZfc3RhdGUgPT0gVE1GX1JFU1BfRlVOQ19GQUlMRUQpIHsKKwkJLyogdGltZW91dCAqLwogCQlyZXMgPSBUTUZfUkVTUF9GVU5DX0ZBSUxFRDsKLQkJbGVmdG92ZXIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnRhc2NiLT5jb21wbGV0aW9uLAotCQkJCQkJICAgICAgIEFJQzk0WFhfU0NCX1RJTUVPVVQpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7Ci0JCWlmIChsZWZ0b3ZlciA8IDEpCisJfSBlbHNlIHsKKwkJLyogSW4gdGhlIGZvbGxvd2luZyB3ZSBhc3N1bWUgdGhhdCB0aGUgbWFuYWdpbmcgbGF5ZXIKKwkJICogd2lsbCBfbmV2ZXJfIG1ha2UgYSBtaXN0YWtlLCB3aGVuIGlzc3VpbmcgQUJPUlQKKwkJICogVEFTSy4KKwkJICovCisJCXN3aXRjaCAodGNzLmRsX29wY29kZSkgeworCQlkZWZhdWx0OgorCQkJcmVzID0gYXNkX2NsZWFyX25leHVzKHRhc2spOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBUQ19OT19FUlJPUjoKKwkJCWJyZWFrOworCQkJLyogVGhlIHRhc2sgaGFzbid0IGJlZW4gc2VudCB0byB0aGUgZGV2aWNlIHhvcgorCQkJICogd2UgbmV2ZXIgZ290IGEgKHNhbmUpIFJlc3BvbnNlIElVIGZvciB0aGUKKwkJCSAqIEFCT1JUIFRBU0sgVE1GLgorCQkJICovCisJCWNhc2UgVEZfTkFLX1JFQ1Y6CisJCQlyZXMgPSBUTUZfUkVTUF9JTlZBTElEX0ZSQU1FOworCQkJYnJlYWs7CisJCWNhc2UgVEZfVE1GX1RBU0tfRE9ORToJLyogZG9uZSBidXQgbm90IHJlcG9ydGVkIHlldCAqLwogCQkJcmVzID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7Ci0JCWlmICh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfRE9ORSkKKwkJCWxlZnRvdmVyID0KKwkJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnRhc2NiX2NvbXBsZXRpb24sCisJCQkJCQkJICBBSUM5NFhYX1NDQl9USU1FT1VUKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJCWlmIChsZWZ0b3ZlciA8IDEpCisJCQkJcmVzID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CisJCQlpZiAodGFzay0+dGFza19zdGF0ZV9mbGFncyAmIFNBU19UQVNLX1NUQVRFX0RPTkUpCisJCQkJcmVzID0gVE1GX1JFU1BfRlVOQ19DT01QTEVURTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgVEZfVE1GX05PX1RBRzoKKwkJY2FzZSBURl9UTUZfVEFHX0ZSRUU6IC8qIHRoZSB0YWcgaXMgaW4gdGhlIGZyZWUgbGlzdCAqLworCQljYXNlIFRGX1RNRl9OT19DT05OX0hBTkRMRTogLyogbm8gc3VjaCBkZXZpY2UgKi8KIAkJCXJlcyA9IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwotCQlnb3RvIG91dF9kb25lOwotCWNhc2UgVEZfVE1GX05PX1RBRyArIDB4RkYwMDoKLQljYXNlIFRGX1RNRl9UQUdfRlJFRSArIDB4RkYwMDogLyogdGhlIHRhZyBpcyBpbiB0aGUgZnJlZSBsaXN0ICovCi0JY2FzZSBURl9UTUZfTk9fQ09OTl9IQU5ETEUgKyAweEZGMDA6IC8qIG5vIHN1Y2ggZGV2aWNlICovCi0JCXJlcyA9IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU7Ci0JCWdvdG8gb3V0X2RvbmU7Ci0JY2FzZSBURl9UTUZfTk9fQ1RYICsgMHhGRjAwOiAvKiBub3QgaW4gc2VxLCBvciBwcm90byAhPSBTU1AgKi8KLQkJcmVzID0gVE1GX1JFU1BfRlVOQ19FU1VQUDsKLQkJZ290byBvdXQ7CisJCQlicmVhazsKKwkJY2FzZSBURl9UTUZfTk9fQ1RYOiAvKiBub3QgaW4gc2VxLCBvciBwcm90byAhPSBTU1AgKi8KKwkJCXJlcyA9IFRNRl9SRVNQX0ZVTkNfRVNVUFA7CisJCQlicmVhazsKKwkJfQogCX0KLW91dF9kb25lOgorIG91dF9kb25lOgorCXRhc2NiLT5jb21wbGV0aW9uID0gTlVMTDsKIAlpZiAocmVzID09IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEUpIHsKIAkJdGFzay0+bGxkZF90YXNrID0gTlVMTDsKIAkJbWIoKTsKIAkJYXNkX2FzY2JfZnJlZSh0YXNjYik7CiAJfQotb3V0OgorCUFTRF9EUFJJTlRLKCJ0YXNrIDB4JXAgYWJvcnRlZCwgcmVzOiAweCV4XG4iLCB0YXNrLCByZXMpOworCXJldHVybiByZXM7CisKKyBvdXRfZnJlZToKIAlhc2RfYXNjYl9mcmVlKGFzY2IpOwogCUFTRF9EUFJJTlRLKCJ0YXNrIDB4JXAgYWJvcnRlZCwgcmVzOiAweCV4XG4iLCB0YXNrLCByZXMpOwogCXJldHVybiByZXM7CkBAIC01MTEsNiArNTc1LDggQEAKIAlzdHJ1Y3QgYXNkX2FzY2IgKmFzY2I7CiAJaW50IHJlcyA9IDE7CiAJc3RydWN0IHNjYiAqc2NiOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRpb24pOworCURFQ0xBUkVfVENTKHRjcyk7CiAKIAlpZiAoIShkZXYtPnRwcm90byAmIFNBU19QUk9UT0NPTF9TU1ApKQogCQlyZXR1cm4gVE1GX1JFU1BfRlVOQ19FU1VQUDsKQEAgLTUxOCw2ICs1ODQsOSBAQAogCWFzY2IgPSBhc2RfYXNjYl9hbGxvY19saXN0KGFzZF9oYSwgJnJlcywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhc2NiKQogCQlyZXR1cm4gLUVOT01FTTsKKworCWFzY2ItPmNvbXBsZXRpb24gPSAmY29tcGxldGlvbjsKKwlhc2NiLT51bGRkX3Rhc2sgPSAmdGNzOwogCXNjYiA9IGFzY2ItPnNjYjsKIAogCWlmICh0bWYgPT0gVE1GX1FVRVJZX1RBU0spCkBAIC01NTAsMzEgKzYxOSwzMiBAQAogCQkJCSAgIGFzZF90bWZfdGltZWRvdXQpOwogCWlmIChyZXMpCiAJCWdvdG8gb3V0X2VycjsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhc2NiLT5jb21wbGV0aW9uKTsKLQlyZXMgPSAoaW50KSAodW5zaWduZWQgbG9uZykgYXNjYi0+dWxkZF90YXNrOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRpb24pOwogCi0Jc3dpdGNoIChyZXMpIHsKLQljYXNlIFRDX05PX0VSUk9SICsgMHhGRjAwOgorCXN3aXRjaCAodGNzLmRsX29wY29kZSkgeworCWNhc2UgVENfTk9fRVJST1I6CiAJCXJlcyA9IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU7CiAJCWJyZWFrOwotCWNhc2UgVEZfTkFLX1JFQ1YgKyAweEZGMDA6CisJY2FzZSBURl9OQUtfUkVDVjoKIAkJcmVzID0gVE1GX1JFU1BfSU5WQUxJRF9GUkFNRTsKIAkJYnJlYWs7Ci0JY2FzZSBURl9UTUZfVEFTS19ET05FICsgMHhGRjAwOgorCWNhc2UgVEZfVE1GX1RBU0tfRE9ORToKIAkJcmVzID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CiAJCWJyZWFrOwotCWNhc2UgVEZfVE1GX05PX1RBRyArIDB4RkYwMDoKLQljYXNlIFRGX1RNRl9UQUdfRlJFRSArIDB4RkYwMDogLyogdGhlIHRhZyBpcyBpbiB0aGUgZnJlZSBsaXN0ICovCi0JY2FzZSBURl9UTUZfTk9fQ09OTl9IQU5ETEUgKyAweEZGMDA6IC8qIG5vIHN1Y2ggZGV2aWNlICovCisJY2FzZSBURl9UTUZfTk9fVEFHOgorCWNhc2UgVEZfVE1GX1RBR19GUkVFOiAvKiB0aGUgdGFnIGlzIGluIHRoZSBmcmVlIGxpc3QgKi8KKwljYXNlIFRGX1RNRl9OT19DT05OX0hBTkRMRTogLyogbm8gc3VjaCBkZXZpY2UgKi8KIAkJcmVzID0gVE1GX1JFU1BfRlVOQ19DT01QTEVURTsKIAkJYnJlYWs7Ci0JY2FzZSBURl9UTUZfTk9fQ1RYICsgMHhGRjAwOiAvKiBub3QgaW4gc2VxLCBvciBwcm90byAhPSBTU1AgKi8KKwljYXNlIFRGX1RNRl9OT19DVFg6IC8qIG5vdCBpbiBzZXEsIG9yIHByb3RvICE9IFNTUCAqLwogCQlyZXMgPSBUTUZfUkVTUF9GVU5DX0VTVVBQOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBBbGxvdyBUTUYgcmVzcG9uc2UgY29kZXMgdG8gcHJvcGFnYXRlIHVwd2FyZHMgKi8KKwkJcmVzID0gdGNzLmRsX29wY29kZTsKIAkJYnJlYWs7CiAJfQorCXJldHVybiByZXM7CiBvdXRfZXJyOgogCWFzZF9hc2NiX2ZyZWUoYXNjYik7CiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmggYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCmluZGV4IDU3Nzg2NTAuLmFiNjQ2ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaApAQCAtNDQsMTEgKzQ0LDExIEBACiAqLwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCi1zdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZTsKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlOwogLypUaGUgbGltaXQgb2Ygb3V0c3RhbmRpbmcgc2NzaSBjb21tYW5kIHRoYXQgZmlybXdhcmUgY2FuIGhhbmRsZSovCiAjZGVmaW5lIEFSQ01TUl9NQVhfT1VUU1RBTkRJTkdfQ01ECQkJCQkJMjU2CiAjZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JCQkJCQkJMzIwCi0jZGVmaW5lIEFSQ01TUl9EUklWRVJfVkVSU0lPTgkJICAgICAiRHJpdmVyIFZlcnNpb24gMS4yMC4wMC4xNSAyMDA3LzEyLzI0IgorI2RlZmluZSBBUkNNU1JfRFJJVkVSX1ZFUlNJT04JCSAgICAgIkRyaXZlciBWZXJzaW9uIDEuMjAuMDAuMTUgMjAwOC8wMi8yNyIKICNkZWZpbmUgQVJDTVNSX1NDU0lfSU5JVElBVE9SX0lECQkJCQkJMjU1CiAjZGVmaW5lIEFSQ01TUl9NQVhfWEZFUl9TRUNUT1JTCQkJCQkJCTUxMgogI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SU19CCQkJCQkJNDA5NgpAQCAtMzQxLDEzICszNDEsMTMgQEAKIAl1aW50MzJfdAlkb25lX3FidWZmZXJbQVJDTVNSX01BWF9IQkJfUE9TVFFVRVVFXTsKIAl1aW50MzJfdAlwb3N0cV9pbmRleDsKIAl1aW50MzJfdAlkb25lcV9pbmRleDsKLQl1aW50MzJfdAlfX2lvbWVtICpkcnYyaW9wX2Rvb3JiZWxsX3JlZzsKLQl1aW50MzJfdAlfX2lvbWVtICpkcnYyaW9wX2Rvb3JiZWxsX21hc2tfcmVnOwotCXVpbnQzMl90CV9faW9tZW0gKmlvcDJkcnZfZG9vcmJlbGxfcmVnOwotCXVpbnQzMl90CV9faW9tZW0gKmlvcDJkcnZfZG9vcmJlbGxfbWFza19yZWc7Ci0JdWludDMyX3QJX19pb21lbSAqbXNnY29kZV9yd2J1ZmZlcl9yZWc7Ci0JdWludDMyX3QJX19pb21lbSAqaW9jdGxfd2J1ZmZlcl9yZWc7Ci0JdWludDMyX3QJX19pb21lbSAqaW9jdGxfcmJ1ZmZlcl9yZWc7CisJdm9pZAkJX19pb21lbSAqZHJ2MmlvcF9kb29yYmVsbF9yZWc7CisJdm9pZAkJX19pb21lbSAqZHJ2MmlvcF9kb29yYmVsbF9tYXNrX3JlZzsKKwl2b2lkCQlfX2lvbWVtICppb3AyZHJ2X2Rvb3JiZWxsX3JlZzsKKwl2b2lkCQlfX2lvbWVtICppb3AyZHJ2X2Rvb3JiZWxsX21hc2tfcmVnOworCXZvaWQJCV9faW9tZW0gKm1zZ2NvZGVfcndidWZmZXJfcmVnOworCXZvaWQJCV9faW9tZW0gKmlvY3RsX3didWZmZXJfcmVnOworCXZvaWQJCV9faW9tZW0gKmlvY3RsX3JidWZmZXJfcmVnOwogfTsKIAogLyoKQEAgLTU1Niw2ICs1NTYsNiBAQAogZXh0ZXJuIHZvaWQgYXJjbXNyX3Bvc3RfaW9jdGxkYXRhMmlvcChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKTsKIGV4dGVybiB2b2lkIGFyY21zcl9pb3BfbWVzc2FnZV9yZWFkKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopOwogZXh0ZXJuIHN0cnVjdCBRQlVGRkVSIF9faW9tZW0gKmFyY21zcl9nZXRfaW9wX3JxYnVmZmVyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopOwotZXh0ZXJuIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphcmNtc3JfaG9zdF9hdHRyc1tdOworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphcmNtc3JfaG9zdF9hdHRyc1tdOwogZXh0ZXJuIGludCBhcmNtc3JfYWxsb2Nfc3lzZnNfYXR0cihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKTsKIHZvaWQgYXJjbXNyX2ZyZWVfc3lzZnNfYXR0cihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwppbmRleCA3ZDdiMGE1Li42OWY4MzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCkBAIC01NywxNSArNTcsMTUgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSAiYXJjbXNyLmgiCiAKLXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphcmNtc3JfaG9zdF9hdHRyc1tdOworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmFyY21zcl9ob3N0X2F0dHJzW107CiAKIHN0YXRpYyBzc2l6ZV90IGFyY21zcl9zeXNmc19pb3BfbWVzc2FnZV9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCQkgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW4sCiAJCQkJCSAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLAogCQkJCQkgICAgIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0gY29udGFpbmVyX29mKGtvYmosc3RydWN0IGNsYXNzX2RldmljZSxrb2JqKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosc3RydWN0IGRldmljZSxrb2JqKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0gKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopIGhvc3QtPmhvc3RkYXRhOwogCXVpbnQ4X3QgKnBRYnVmZmVyLCpwdG1wUWJ1ZmZlcjsKIAlpbnQzMl90IGFsbHhmZXJfbGVuID0gMDsKQEAgLTExMCw4ICsxMTAsOCBAQAogCQkJCQkgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsCiAJCQkJCSAgICAgIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0gY29udGFpbmVyX29mKGtvYmosc3RydWN0IGNsYXNzX2RldmljZSxrb2JqKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosc3RydWN0IGRldmljZSxrb2JqKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0gKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopIGhvc3QtPmhvc3RkYXRhOwogCWludDMyX3QgbXlfZW1wdHlfbGVuLCB1c2VyX2xlbiwgd3FidWZfZmlyc3RpbmRleCwgd3FidWZfbGFzdGluZGV4OwogCXVpbnQ4X3QgKnBRYnVmZmVyLCAqcHRtcHVzZXJidWZmZXI7CkBAIC0xNTgsOCArMTU4LDggQEAKIAkJCQkJICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLAogCQkJCQkgICAgICBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9IGNvbnRhaW5lcl9vZihrb2JqLHN0cnVjdCBjbGFzc19kZXZpY2Usa29iaik7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLHN0cnVjdCBkZXZpY2Usa29iaik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9IChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKIAl1aW50OF90ICpwUWJ1ZmZlcjsKIApAQCAtMjIwLDg3ICsyMjAsMTA0IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGFjYi0+aG9zdDsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwgJmFyY21zcl9zeXNmc19tZXNzYWdlX3JlYWRfYXR0cik7CisJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2Rldi5rb2JqLCAmYXJjbXNyX3N5c2ZzX21lc3NhZ2VfcmVhZF9hdHRyKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3I6IGFsbG9jIHN5c2ZzIG11X3JlYWQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9iaW5fZmlsZV9tZXNzYWdlX3JlYWQ7CiAJfQotCWVycm9yID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9jbGFzc2Rldi5rb2JqLCAmYXJjbXNyX3N5c2ZzX21lc3NhZ2Vfd3JpdGVfYXR0cik7CisJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2Rldi5rb2JqLCAmYXJjbXNyX3N5c2ZzX21lc3NhZ2Vfd3JpdGVfYXR0cik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBhbGxvYyBzeXNmcyBtdV93cml0ZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX2Jpbl9maWxlX21lc3NhZ2Vfd3JpdGU7CiAJfQotCWVycm9yID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9jbGFzc2Rldi5rb2JqLCAmYXJjbXNyX3N5c2ZzX21lc3NhZ2VfY2xlYXJfYXR0cik7CisJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2Rldi5rb2JqLCAmYXJjbXNyX3N5c2ZzX21lc3NhZ2VfY2xlYXJfYXR0cik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBhbGxvYyBzeXNmcyBtdV9jbGVhciBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX2Jpbl9maWxlX21lc3NhZ2VfY2xlYXI7CiAJfQogCXJldHVybiAwOwogZXJyb3JfYmluX2ZpbGVfbWVzc2FnZV9jbGVhcjoKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2NsYXNzZGV2LmtvYmosICZhcmNtc3Jfc3lzZnNfbWVzc2FnZV93cml0ZV9hdHRyKTsKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2Rldi5rb2JqLCAmYXJjbXNyX3N5c2ZzX21lc3NhZ2Vfd3JpdGVfYXR0cik7CiBlcnJvcl9iaW5fZmlsZV9tZXNzYWdlX3dyaXRlOgotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwgJmFyY21zcl9zeXNmc19tZXNzYWdlX3JlYWRfYXR0cik7CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9kZXYua29iaiwgJmFyY21zcl9zeXNmc19tZXNzYWdlX3JlYWRfYXR0cik7CiBlcnJvcl9iaW5fZmlsZV9tZXNzYWdlX3JlYWQ6CiAJcmV0dXJuIGVycm9yOwogfQogCi12b2lkCi1hcmNtc3JfZnJlZV9zeXNmc19hdHRyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IpIHsKK3ZvaWQgYXJjbXNyX2ZyZWVfc3lzZnNfYXR0cihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQorewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBhY2ItPmhvc3Q7CiAKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2NsYXNzZGV2LmtvYmosICZhcmNtc3Jfc3lzZnNfbWVzc2FnZV9jbGVhcl9hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2NsYXNzZGV2LmtvYmosICZhcmNtc3Jfc3lzZnNfbWVzc2FnZV93cml0ZV9hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2NsYXNzZGV2LmtvYmosICZhcmNtc3Jfc3lzZnNfbWVzc2FnZV9yZWFkX2F0dHIpOworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZGV2LmtvYmosICZhcmNtc3Jfc3lzZnNfbWVzc2FnZV9jbGVhcl9hdHRyKTsKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2Rldi5rb2JqLCAmYXJjbXNyX3N5c2ZzX21lc3NhZ2Vfd3JpdGVfYXR0cik7CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9kZXYua29iaiwgJmFyY21zcl9zeXNmc19tZXNzYWdlX3JlYWRfYXR0cik7CiB9CiAKIAogc3RhdGljIHNzaXplX3QKLWFyY21zcl9hdHRyX2hvc3RfZHJpdmVyX3ZlcnNpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKSB7CithcmNtc3JfYXR0cl9ob3N0X2RyaXZlcl92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorewogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKIAkJCSIlc1xuIiwKIAkJCUFSQ01TUl9EUklWRVJfVkVSU0lPTik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1hcmNtc3JfYXR0cl9ob3N0X2RyaXZlcl9wb3N0ZWRfY21kKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikgewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0gKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopIGhvc3QtPmhvc3RkYXRhOworYXJjbXNyX2F0dHJfaG9zdF9kcml2ZXJfcG9zdGVkX2NtZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0KKwkJKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopIGhvc3QtPmhvc3RkYXRhOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKIAkJCSIlNGRcbiIsCiAJCQlhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1hcmNtc3JfYXR0cl9ob3N0X2RyaXZlcl9yZXNldChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7Ci0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9IChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKK2FyY21zcl9hdHRyX2hvc3RfZHJpdmVyX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9CisJCShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsCiAJCQkiJTRkXG4iLAogCQkJYWNiLT5udW1fcmVzZXRzKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLWFyY21zcl9hdHRyX2hvc3RfZHJpdmVyX2Fib3J0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikgewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0gKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopIGhvc3QtPmhvc3RkYXRhOworYXJjbXNyX2F0dHJfaG9zdF9kcml2ZXJfYWJvcnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0KKwkJKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopIGhvc3QtPmhvc3RkYXRhOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKIAkJCSIlNGRcbiIsCiAJCQlhY2ItPm51bV9hYm9ydHMpOwogfQogCiBzdGF0aWMgc3NpemVfdAotYXJjbXNyX2F0dHJfaG9zdF9md19tb2RlbChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpIHsKLSAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7Ci0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9IChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKK2FyY21zcl9hdHRyX2hvc3RfZndfbW9kZWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPQorCQkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKikgaG9zdC0+aG9zdGRhdGE7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAogCQkJIiVzXG4iLAogCQkJYWNiLT5maXJtX21vZGVsKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLWFyY21zcl9hdHRyX2hvc3RfZndfdmVyc2lvbihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7Ci0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9IChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKK2FyY21zcl9hdHRyX2hvc3RfZndfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0KKwkJCShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKIAkJCSIlc1xuIiwKQEAgLTMwOCw5ICszMjUsMTIgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWFyY21zcl9hdHRyX2hvc3RfZndfcmVxdWVzdF9sZW4oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKSB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPSAoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKikgaG9zdC0+aG9zdGRhdGE7CithcmNtc3JfYXR0cl9ob3N0X2Z3X3JlcXVlc3RfbGVuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPQorCQkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKikgaG9zdC0+aG9zdGRhdGE7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsCiAJCQkiJTRkXG4iLApAQCAtMzE4LDkgKzMzOCwxMiBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotYXJjbXNyX2F0dHJfaG9zdF9md19udW1iZXJzX3F1ZXVlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikgewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0gKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopIGhvc3QtPmhvc3RkYXRhOworYXJjbXNyX2F0dHJfaG9zdF9md19udW1iZXJzX3F1ZXVlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9CisJCShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKIAkJCSIlNGRcbiIsCkBAIC0zMjgsOSArMzUxLDEyIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1hcmNtc3JfYXR0cl9ob3N0X2Z3X3NkcmFtX3NpemUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKSB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IgPSAoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKikgaG9zdC0+aG9zdGRhdGE7CithcmNtc3JfYXR0cl9ob3N0X2Z3X3NkcmFtX3NpemUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9CisJCShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKIAkJCSIlNGRcbiIsCkBAIC0zMzgsMzYgKzM2NCwzOSBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotYXJjbXNyX2F0dHJfaG9zdF9md19oZF9jaGFubmVscyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7Ci0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9IChzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKK2FyY21zcl9hdHRyX2hvc3RfZndfaGRfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9CisJCShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKSBob3N0LT5ob3N0ZGF0YTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKIAkJCSIlNGRcbiIsCiAJCQlhY2ItPmZpcm1faGRfY2hhbm5lbHMpOwogfQogCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaG9zdF9kcml2ZXJfdmVyc2lvbiwgU19JUlVHTywgYXJjbXNyX2F0dHJfaG9zdF9kcml2ZXJfdmVyc2lvbiwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaG9zdF9kcml2ZXJfcG9zdGVkX2NtZCwgU19JUlVHTywgYXJjbXNyX2F0dHJfaG9zdF9kcml2ZXJfcG9zdGVkX2NtZCwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaG9zdF9kcml2ZXJfcmVzZXQsIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZHJpdmVyX3Jlc2V0LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihob3N0X2RyaXZlcl9hYm9ydCwgU19JUlVHTywgYXJjbXNyX2F0dHJfaG9zdF9kcml2ZXJfYWJvcnQsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGhvc3RfZndfbW9kZWwsIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZndfbW9kZWwsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGhvc3RfZndfdmVyc2lvbiwgU19JUlVHTywgYXJjbXNyX2F0dHJfaG9zdF9md192ZXJzaW9uLCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihob3N0X2Z3X3JlcXVlc3RfbGVuLCBTX0lSVUdPLCBhcmNtc3JfYXR0cl9ob3N0X2Z3X3JlcXVlc3RfbGVuLCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihob3N0X2Z3X251bWJlcnNfcXVldWUsIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZndfbnVtYmVyc19xdWV1ZSwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaG9zdF9md19zZHJhbV9zaXplLCBTX0lSVUdPLCBhcmNtc3JfYXR0cl9ob3N0X2Z3X3NkcmFtX3NpemUsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGhvc3RfZndfaGRfY2hhbm5lbHMsIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZndfaGRfY2hhbm5lbHMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhvc3RfZHJpdmVyX3ZlcnNpb24sIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZHJpdmVyX3ZlcnNpb24sIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhvc3RfZHJpdmVyX3Bvc3RlZF9jbWQsIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZHJpdmVyX3Bvc3RlZF9jbWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhvc3RfZHJpdmVyX3Jlc2V0LCBTX0lSVUdPLCBhcmNtc3JfYXR0cl9ob3N0X2RyaXZlcl9yZXNldCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaG9zdF9kcml2ZXJfYWJvcnQsIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZHJpdmVyX2Fib3J0LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihob3N0X2Z3X21vZGVsLCBTX0lSVUdPLCBhcmNtc3JfYXR0cl9ob3N0X2Z3X21vZGVsLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihob3N0X2Z3X3ZlcnNpb24sIFNfSVJVR08sIGFyY21zcl9hdHRyX2hvc3RfZndfdmVyc2lvbiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaG9zdF9md19yZXF1ZXN0X2xlbiwgU19JUlVHTywgYXJjbXNyX2F0dHJfaG9zdF9md19yZXF1ZXN0X2xlbiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaG9zdF9md19udW1iZXJzX3F1ZXVlLCBTX0lSVUdPLCBhcmNtc3JfYXR0cl9ob3N0X2Z3X251bWJlcnNfcXVldWUsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhvc3RfZndfc2RyYW1fc2l6ZSwgU19JUlVHTywgYXJjbXNyX2F0dHJfaG9zdF9md19zZHJhbV9zaXplLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihob3N0X2Z3X2hkX2NoYW5uZWxzLCBTX0lSVUdPLCBhcmNtc3JfYXR0cl9ob3N0X2Z3X2hkX2NoYW5uZWxzLCBOVUxMKTsKIAotc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmFyY21zcl9ob3N0X2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZHJpdmVyX3ZlcnNpb24sCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZHJpdmVyX3Bvc3RlZF9jbWQsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZHJpdmVyX3Jlc2V0LAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X2RyaXZlcl9hYm9ydCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9md19tb2RlbCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9md192ZXJzaW9uLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X2Z3X3JlcXVlc3RfbGVuLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X2Z3X251bWJlcnNfcXVldWUsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZndfc2RyYW1fc2l6ZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9md19oZF9jaGFubmVscywKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphcmNtc3JfaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9ob3N0X2RyaXZlcl92ZXJzaW9uLAorCSZkZXZfYXR0cl9ob3N0X2RyaXZlcl9wb3N0ZWRfY21kLAorCSZkZXZfYXR0cl9ob3N0X2RyaXZlcl9yZXNldCwKKwkmZGV2X2F0dHJfaG9zdF9kcml2ZXJfYWJvcnQsCisJJmRldl9hdHRyX2hvc3RfZndfbW9kZWwsCisJJmRldl9hdHRyX2hvc3RfZndfdmVyc2lvbiwKKwkmZGV2X2F0dHJfaG9zdF9md19yZXF1ZXN0X2xlbiwKKwkmZGV2X2F0dHJfaG9zdF9md19udW1iZXJzX3F1ZXVlLAorCSZkZXZfYXR0cl9ob3N0X2Z3X3NkcmFtX3NpemUsCisJJmRldl9hdHRyX2hvc3RfZndfaGRfY2hhbm5lbHMsCiAJTlVMTCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCmluZGV4IDRmOWZmMzIuLmY5MWY3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCkBAIC0xMzg3LDE4ICsxMzg3LDE2IEBACiAJc3dpdGNoKGNvbnRyb2xjb2RlKSB7CiAKIAljYXNlIEFSQ01TUl9NRVNTQUdFX1JFQURfUlFCVUZGRVI6IHsKLQkJdW5zaWduZWQgbG9uZyAqdmVyX2FkZHI7CisJCXVuc2lnbmVkIGNoYXIgKnZlcl9hZGRyOwogCQl1aW50OF90ICpwUWJ1ZmZlciwgKnB0bXBRYnVmZmVyOwogCQlpbnQzMl90IGFsbHhmZXJfbGVuID0gMDsKLQkJdm9pZCAqdG1wOwogCi0JCXRtcCA9IGttYWxsb2MoMTAzMiwgR0ZQX0tFUk5FTHxHRlBfRE1BKTsKLQkJdmVyX2FkZHIgPSAodW5zaWduZWQgbG9uZyAqKXRtcDsKLQkJaWYgKCF0bXApIHsKKwkJdmVyX2FkZHIgPSBrbWFsbG9jKDEwMzIsIEdGUF9BVE9NSUMpOworCQlpZiAoIXZlcl9hZGRyKSB7CiAJCQlyZXR2YWx1ZSA9IEFSQ01TUl9NRVNTQUdFX0ZBSUw7CiAJCQlnb3RvIG1lc3NhZ2Vfb3V0OwogCQl9Ci0JCXB0bXBRYnVmZmVyID0gKHVpbnQ4X3QgKikgdmVyX2FkZHI7CisJCXB0bXBRYnVmZmVyID0gdmVyX2FkZHI7CiAJCXdoaWxlICgoYWNiLT5ycWJ1Zl9maXJzdGluZGV4ICE9IGFjYi0+cnFidWZfbGFzdGluZGV4KQogCQkJJiYgKGFsbHhmZXJfbGVuIDwgMTAzMSkpIHsKIAkJCXBRYnVmZmVyID0gJmFjYi0+cnFidWZmZXJbYWNiLT5ycWJ1Zl9maXJzdGluZGV4XTsKQEAgLTE0MjcsMjYgKzE0MjUsMjQgQEAKIAkJCX0KIAkJCWFyY21zcl9pb3BfbWVzc2FnZV9yZWFkKGFjYik7CiAJCX0KLQkJbWVtY3B5KHBjbWRtZXNzYWdlZmxkLT5tZXNzYWdlZGF0YWJ1ZmZlciwgKHVpbnQ4X3QgKil2ZXJfYWRkciwgYWxseGZlcl9sZW4pOworCQltZW1jcHkocGNtZG1lc3NhZ2VmbGQtPm1lc3NhZ2VkYXRhYnVmZmVyLCB2ZXJfYWRkciwgYWxseGZlcl9sZW4pOwogCQlwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5MZW5ndGggPSBhbGx4ZmVyX2xlbjsKIAkJcGNtZG1lc3NhZ2VmbGQtPmNtZG1lc3NhZ2UuUmV0dXJuQ29kZSA9IEFSQ01TUl9NRVNTQUdFX1JFVFVSTkNPREVfT0s7Ci0JCWtmcmVlKHRtcCk7CisJCWtmcmVlKHZlcl9hZGRyKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgQVJDTVNSX01FU1NBR0VfV1JJVEVfV1FCVUZGRVI6IHsKLQkJdW5zaWduZWQgbG9uZyAqdmVyX2FkZHI7CisJCXVuc2lnbmVkIGNoYXIgKnZlcl9hZGRyOwogCQlpbnQzMl90IG15X2VtcHR5X2xlbiwgdXNlcl9sZW4sIHdxYnVmX2ZpcnN0aW5kZXgsIHdxYnVmX2xhc3RpbmRleDsKIAkJdWludDhfdCAqcFFidWZmZXIsICpwdG1wdXNlcmJ1ZmZlcjsKLQkJdm9pZCAqdG1wOwogCi0JCXRtcCA9IGttYWxsb2MoMTAzMiwgR0ZQX0tFUk5FTHxHRlBfRE1BKTsKLQkJdmVyX2FkZHIgPSAodW5zaWduZWQgbG9uZyAqKXRtcDsKLQkJaWYgKCF0bXApIHsKKwkJdmVyX2FkZHIgPSBrbWFsbG9jKDEwMzIsIEdGUF9BVE9NSUMpOworCQlpZiAoIXZlcl9hZGRyKSB7CiAJCQlyZXR2YWx1ZSA9IEFSQ01TUl9NRVNTQUdFX0ZBSUw7CiAJCQlnb3RvIG1lc3NhZ2Vfb3V0OwogCQl9Ci0JCXB0bXB1c2VyYnVmZmVyID0gKHVpbnQ4X3QgKil2ZXJfYWRkcjsKKwkJcHRtcHVzZXJidWZmZXIgPSB2ZXJfYWRkcjsKIAkJdXNlcl9sZW4gPSBwY21kbWVzc2FnZWZsZC0+Y21kbWVzc2FnZS5MZW5ndGg7CiAJCW1lbWNweShwdG1wdXNlcmJ1ZmZlciwgcGNtZG1lc3NhZ2VmbGQtPm1lc3NhZ2VkYXRhYnVmZmVyLCB1c2VyX2xlbik7CiAJCXdxYnVmX2xhc3RpbmRleCA9IGFjYi0+d3FidWZfbGFzdGluZGV4OwpAQCAtMTQ5Miw3ICsxNDg4LDcgQEAKIAkJCQlyZXR2YWx1ZSA9IEFSQ01TUl9NRVNTQUdFX0ZBSUw7CiAJCQl9CiAJCQl9Ci0JCQlrZnJlZSh0bXApOworCQkJa2ZyZWUodmVyX2FkZHIpOwogCQl9CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwppbmRleCAzYmVkZjI0Li44ZTUzZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKQEAgLTI5ODMsNyArMjk4Myw2IEBACiAJLnRoaXNfaWQJCT0gNywKIAkuc2dfdGFibGVzaXplCQk9IFNHX0FMTCwKIAkuY21kX3Blcl9sdW4JCT0gMiwKLQkudW5jaGVja2VkX2lzYV9kbWEJPSAwLAogCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnByb2NfbmFtZQkJPSAiYWNvcm5zY3NpIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKaW5kZXggNDlkODM4ZS4uYTMzOThmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYwpAQCAtMjIyLDcgKzIyMiw2IEBACiAJLnRoaXNfaWQJCT0gNywKIAkuc2dfdGFibGVzaXplCQk9IFNHX0FMTCwKIAkuY21kX3Blcl9sdW4JCT0gMiwKLQkudW5jaGVja2VkX2lzYV9kbWEJPSAwLAogCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnByb2NfbmFtZQkJPSAiQ3VtYW5hU0NTSS0xIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5oIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuaAppbmRleCAzZTczZTI2Li5iNjVmNGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5oCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmgKQEAgLTMxMyw3ICszMTMsNyBAQAogCiAJLyogbWlzY2VsbGFuZW91cyAqLwogCWludAkJCWludGVybmFsX2RvbmU7CQkvKiBmbGFnIHRvIGluZGljYXRlIHJlcXVlc3QgZG9uZSAqLwotCXN0cnVjdCBzY3NpX2VoX3NhdmUJKnNlczsJCS8qIGhvbGRzIHJlcXVlc3Qgc2Vuc2UgcmVzdG9yZSBpbmZvICovCisJc3RydWN0IHNjc2lfZWhfc2F2ZQlzZXM7CQkvKiBob2xkcyByZXF1ZXN0IHNlbnNlIHJlc3RvcmUgaW5mbyAqLwogCXVuc2lnbmVkIGxvbmcJCW1hZ2ljX2VuZDsKIH0gRkFTMjE2X0luZm87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jaC5jIGIvZHJpdmVycy9zY3NpL2NoLmMKaW5kZXggN2FhZDE1NC4uNzVjODRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NoLmMKKysrIGIvZHJpdmVycy9zY3NpL2NoLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXVuc2lnbmVkIGNoYXIgIGFzYzsKIAl1bnNpZ25lZCBjaGFyICBhc2NxOwogCWludAkgICAgICAgZXJybm87Ci19IGVycltdID0geworfSBjaF9lcnJbXSA9IHsKIC8qIEp1c3QgZmlsbGVkIGluIHdoYXQgbG9va3MgcmlnaHQuIEhhdidudCBjaGVja2VkIGFueSBzdGFuZGFyZCBwYXBlciBmb3IKICAgIHRoZXNlIGVycm5vIGFzc2lnbm1lbnRzLCBzbyB0aGV5IG1heSBiZSB3cm9uZy4uLiAqLwogCXsKQEAgLTE1NSwxMSArMTU1LDExIEBACiAJLyogQ2hlY2sgdG8gc2VlIGlmIGFkZGl0aW9uYWwgc2Vuc2UgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlICovCiAJaWYgKHNjc2lfc2Vuc2VfdmFsaWQoc3NoZHIpICYmCiAJICAgIHNzaGRyLT5hc2MgIT0gMCkgewotCQlmb3IgKGkgPSAwOyBlcnJbaV0uZXJybm8gIT0gMDsgaSsrKSB7Ci0JCQlpZiAoZXJyW2ldLnNlbnNlID09IHNzaGRyLT5zZW5zZV9rZXkgJiYKLQkJCSAgICBlcnJbaV0uYXNjICAgPT0gc3NoZHItPmFzYyAmJgotCQkJICAgIGVycltpXS5hc2NxICA9PSBzc2hkci0+YXNjcSkgewotCQkJCWVycm5vID0gLWVycltpXS5lcnJubzsKKwkJZm9yIChpID0gMDsgY2hfZXJyW2ldLmVycm5vICE9IDA7IGkrKykgeworCQkJaWYgKGNoX2VycltpXS5zZW5zZSA9PSBzc2hkci0+c2Vuc2Vfa2V5ICYmCisJCQkgICAgY2hfZXJyW2ldLmFzYyAgID09IHNzaGRyLT5hc2MgJiYKKwkJCSAgICBjaF9lcnJbaV0uYXNjcSAgPT0gc3NoZHItPmFzY3EpIHsKKwkJCQllcnJubyA9IC1jaF9lcnJbaV0uZXJybm87CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTcyMSw4ICs3MjEsOCBAQAogCWNhc2UgQ0hJT0dFTEVNOgogCXsKIAkJc3RydWN0IGNoYW5nZXJfZ2V0X2VsZW1lbnQgY2dlOwotCQl1X2NoYXIgIGNtZFsxMl07Ci0JCXVfY2hhciAgKmJ1ZmZlcjsKKwkJdV9jaGFyIGNoX2NtZFsxMl07CisJCXVfY2hhciAqYnVmZmVyOwogCQl1bnNpZ25lZCBpbnQgZWxlbTsKIAkJaW50ICAgICByZXN1bHQsaTsKIApAQCAtNzM5LDE3ICs3MzksMTggQEAKIAkJbXV0ZXhfbG9jaygmY2gtPmxvY2spOwogCiAJdm9sdGFnX3JldHJ5OgotCQltZW1zZXQoY21kLDAsc2l6ZW9mKGNtZCkpOwotCQljbWRbMF0gPSBSRUFEX0VMRU1FTlRfU1RBVFVTOwotCQljbWRbMV0gPSAoY2gtPmRldmljZS0+bHVuIDw8IDUpIHwKKwkJbWVtc2V0KGNoX2NtZCwgMCwgc2l6ZW9mKGNoX2NtZCkpOworCQljaF9jbWRbMF0gPSBSRUFEX0VMRU1FTlRfU1RBVFVTOworCQljaF9jbWRbMV0gPSAoY2gtPmRldmljZS0+bHVuIDw8IDUpIHwKIAkJCShjaC0+dm9sdGFncyA/IDB4MTAgOiAwKSB8CiAJCQljaF9lbGVtX3RvX3R5cGVjb2RlKGNoLGVsZW0pOwotCQljbWRbMl0gPSAoZWxlbSA+PiA4KSAmIDB4ZmY7Ci0JCWNtZFszXSA9IGVsZW0gICAgICAgICYgMHhmZjsKLQkJY21kWzVdID0gMTsKLQkJY21kWzldID0gMjU1OworCQljaF9jbWRbMl0gPSAoZWxlbSA+PiA4KSAmIDB4ZmY7CisJCWNoX2NtZFszXSA9IGVsZW0gICAgICAgICYgMHhmZjsKKwkJY2hfY21kWzVdID0gMTsKKwkJY2hfY21kWzldID0gMjU1OwogCi0JCWlmICgwID09IChyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjbWQsIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpKSkgeworCQlyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjaF9jbWQsIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoIXJlc3VsdCkgewogCQkJY2dlLmNnZV9zdGF0dXMgPSBidWZmZXJbMThdOwogCQkJY2dlLmNnZV9mbGFncyA9IDA7CiAJCQlpZiAoYnVmZmVyWzE4XSAmIENFU1RBVFVTX0VYQ0VQVCkgewpAQCAtODgwLDcgKzg4MSw3IEBACiBzdGF0aWMgaW50IGNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2OwogCWludCBtaW5vciwgcmV0ID0gLUVOT01FTTsKIAlzY3NpX2NoYW5nZXIgKmNoOwogCkBAIC05MDksMTEgKzkxMCwxMSBAQAogCWNoLT5taW5vciA9IG1pbm9yOwogCXNwcmludGYoY2gtPm5hbWUsImNoJWQiLGNoLT5taW5vcik7CiAKLQljbGFzc19kZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKGNoX3N5c2ZzX2NsYXNzLCBOVUxMLAotCQkJCQlNS0RFVihTQ1NJX0NIQU5HRVJfTUFKT1IsIGNoLT5taW5vciksCi0JCQkJCWRldiwgInMlcyIsIGNoLT5uYW1lKTsKKwljbGFzc19kZXYgPSBkZXZpY2VfY3JlYXRlKGNoX3N5c2ZzX2NsYXNzLCBkZXYsCisJCQkJICBNS0RFVihTQ1NJX0NIQU5HRVJfTUFKT1IsY2gtPm1pbm9yKSwKKwkJCQkgICJzJXMiLCBjaC0+bmFtZSk7CiAJaWYgKElTX0VSUihjbGFzc19kZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNoJWQ6IGNsYXNzX2RldmljZV9jcmVhdGUgZmFpbGVkXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjaCVkOiBkZXZpY2VfY3JlYXRlIGZhaWxlZFxuIiwKIAkJICAgICAgIGNoLT5taW5vcik7CiAJCXJldCA9IFBUUl9FUlIoY2xhc3NfZGV2KTsKIAkJZ290byByZW1vdmVfaWRyOwpAQCAtOTQ0LDggKzk0NSw3IEBACiAJaWRyX3JlbW92ZSgmY2hfaW5kZXhfaWRyLCBjaC0+bWlub3IpOwogCXNwaW5fdW5sb2NrKCZjaF9pbmRleF9sb2NrKTsKIAotCWNsYXNzX2RldmljZV9kZXN0cm95KGNoX3N5c2ZzX2NsYXNzLAotCQkJICAgICBNS0RFVihTQ1NJX0NIQU5HRVJfTUFKT1IsY2gtPm1pbm9yKSk7CisJZGV2aWNlX2Rlc3Ryb3koY2hfc3lzZnNfY2xhc3MsIE1LREVWKFNDU0lfQ0hBTkdFUl9NQUpPUixjaC0+bWlub3IpKTsKIAlrZnJlZShjaC0+ZHQpOwogCWtmcmVlKGNoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kYzM5NXguYyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwppbmRleCBlMzUxZGI2Li4wNzVlMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKKysrIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5jCkBAIC00NzYxLDcgKzQ3NjEsNiBAQAogCS5jbWRfcGVyX2x1biAgICAgICAgICAgID0gREMzOTV4X01BWF9DTURfUEVSX0xVTiwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGRjMzk1eF9laF9hYm9ydCwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgICA9IGRjMzk1eF9laF9idXNfcmVzZXQsCi0JLnVuY2hlY2tlZF9pc2FfZG1hICAgICAgPSAwLAogCS51c2VfY2x1c3RlcmluZyAgICAgICAgID0gRElTQUJMRV9DTFVTVEVSSU5HLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdC9kcHRpX2kyby5oIGIvZHJpdmVycy9zY3NpL2RwdC9kcHRpX2kyby5oCmluZGV4IDEwMGI0OWJhLi4xOTQwNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHB0L2RwdGlfaTJvLmgKKysrIGIvZHJpdmVycy9zY3NpL2RwdC9kcHRpX2kyby5oCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pMm8tZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+IC8qIE5lZWRlZCBmb3IgTVVURVggaW5pdCBtYWNyb3MgKi8KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYyBiL2RyaXZlcnMvc2NzaS9lYXRhX3Bpby5jCmluZGV4IGI1YTYwOTIuLjk1MjUwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lYXRhX3Bpby5jCisrKyBiL2RyaXZlcnMvc2NzaS9lYXRhX3Bpby5jCkBAIC04MTUsOCArODE1LDYgQEAKIAllbHNlCiAJCWhkLT5wcmltYXJ5ID0gMTsKIAotCXNoLT51bmNoZWNrZWRfaXNhX2RtYSA9IDA7CS8qIFdlIGNhbiBvbmx5IGRvIFBJTyAqLwotCiAJaGQtPm5leHQgPSBOVUxMOwkvKiBidWlsZCBhIGxpbmtlZCBsaXN0IG9mIGFsbCBIQkFzICovCiAJaGQtPnByZXYgPSBsYXN0X0hCQTsKIAlpZiAoaGQtPnByZXYgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmMgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCmluZGV4IDZkNjdmNWMuLmM2ZDZlN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmMKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguYwpAQCAtODUsMTAgKzg1LDEwIEBACiAKIC8qIFRoZSBtZWFuaW5nIG9mIHRoZSBTY3NpX1BvaW50ZXIgbWVtYmVycyBpbiB0aGlzIGRyaXZlciBpcyBhcyBmb2xsb3dzOgogICogcHRyOiAgICAgICAgICAgICAgICAgICAgIENoYWluaW5nCi0gKiB0aGlzX3Jlc2lkdWFsOiAgICAgICAgICAgZ2R0aF9idWZmbGVuCi0gKiBidWZmZXI6ICAgICAgICAgICAgICAgICAgZ2R0aF9zZ2xpc3QKKyAqIHRoaXNfcmVzaWR1YWw6ICAgICAgICAgICB1bnVzZWQKKyAqIGJ1ZmZlcjogICAgICAgICAgICAgICAgICB1bnVzZWQKICAqIGRtYV9oYW5kbGU6ICAgICAgICAgICAgICB1bnVzZWQKLSAqIGJ1ZmZlcnNfcmVzaWR1YWw6ICAgICAgICBnZHRoX3NnX2NvdW50CisgKiBidWZmZXJzX3Jlc2lkdWFsOiAgICAgICAgdW51c2VkCiAgKiBTdGF0dXM6ICAgICAgICAgICAgICAgICAgdW51c2VkCiAgKiBNZXNzYWdlOiAgICAgICAgICAgICAgICAgdW51c2VkCiAgKiBoYXZlX2RhdGFfaW46ICAgICAgICAgICAgdW51c2VkCkBAIC0xNjAsNyArMTYwLDcgQEAKIHN0YXRpYyB2b2lkIGdkdGhfY2xlYXJfZXZlbnRzKHZvaWQpOwogCiBzdGF0aWMgdm9pZCBnZHRoX2NvcHlfaW50ZXJuYWxfZGF0YShnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCB1c2hvcnQgY291bnQsIGludCB0b19idWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCB1c2hvcnQgY291bnQpOwogc3RhdGljIGludCBnZHRoX2ludGVybmFsX2NhY2hlX2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwKTsKIHN0YXRpYyBpbnQgZ2R0aF9maWxsX2NhY2hlX2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1c2hvcnQgaGRyaXZlKTsKIApAQCAtMTgyLDcgKzE4Miw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCiBzdGF0aWMgdm9pZCBnZHRoX2ZsdXNoKGdkdGhfaGFfc3RyICpoYSk7Ci1zdGF0aWMgaW50IGdkdGhfaGFsdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bG9uZyBldmVudCwgdm9pZCAqYnVmKTsKIHN0YXRpYyBpbnQgZ2R0aF9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICpzY3Asdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSk7CiBzdGF0aWMgaW50IF9fZ2R0aF9xdWV1ZWNvbW1hbmQoZ2R0aF9oYV9zdHIgKmhhLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsCiAJCQkJc3RydWN0IGdkdGhfY21uZGluZm8gKmNtbmRpbmZvKTsKQEAgLTM3Myw1NiArMzcyLDkgQEAKICAgICAucmVsZWFzZSA9IGdkdGhfY2xvc2UsCiB9OwogCi0vKgotICogZ2R0aCBzY3NpX2NvbW1hbmQgYWNjZXNzIHdyYXBwZXJzLgotICogICBiZWxvdyA2IGZ1bmN0aW9ucyBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSBkcml2ZXIgdG8gYWNjZXNzIHNjc2lfY29tbWFuZCdzCi0gKiAgIGlvIHBhcmFtZXRlcnMuIFRoZSByZWFzb24gd2UgZG8gbm90IHVzZSB0aGUgcmVndWxhciBhY2Nlc3NvcnMgZnJvbQotICogICBzY3NpX2NtbmQuaCBpcyBiZWNhdXNlIG9mIGdkdGhfZXhlY3V0ZSgpLiBTaW5jZSBpdCBpcyB1bnJlY29tbWVuZGVkIGZvcgotICogICBsbGRzIHRvIGRpcmVjdGx5IHNldCBzY3NpX2NtbmQncyBJTyBtZW1iZXJzLiBUaGlzIGRyaXZlciB3aWxsIHVzZSBTQ3AKLSAqICAgbWVtYmVycyBmb3IgSU8gcGFyYW1ldGVycywgYW5kIHdpbGwgY29weSBzY3NpX2NtbmQncyBtZW1iZXJzIHRvIFNjcAotICogICBtZW1iZXJzIGluIHF1ZXVlY29tbWFuZC4gRm9yIGludGVybmFsIGNvbW1hbmRzIHRocm91Z2ggZ2R0aF9leGVjdXRlKCkKLSAqICAgU0NwJ3MgbWVtYmVycyB3aWxsIGJlIHNldCBkaXJlY3RseS4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZHRoX2J1ZmZsZW4oc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCXJldHVybiAodW5zaWduZWQpY21kLT5TQ3AudGhpc19yZXNpZHVhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdkdGhfc2V0X2J1ZmZsZW4oc3RydWN0IHNjc2lfY21uZCAqY21kLCB1bnNpZ25lZCBidWZmbGVuKQotewotCWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwgPSBidWZmbGVuOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdkdGhfc2dfY291bnQoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCXJldHVybiAodW5zaWduZWQpY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdkdGhfc2V0X3NnX2NvdW50KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgc2dfY291bnQpCi17Ci0JY21kLT5TQ3AuYnVmZmVyc19yZXNpZHVhbCA9IHNnX2NvdW50OwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzY2F0dGVybGlzdCAqZ2R0aF9zZ2xpc3Qoc3RydWN0IHNjc2lfY21uZCAqY21kKQotewotCXJldHVybiBjbWQtPlNDcC5idWZmZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZHRoX3NldF9zZ2xpc3Qoc3RydWN0IHNjc2lfY21uZCAqY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCkKLXsKLQljbWQtPlNDcC5idWZmZXIgPSBzZ2xpc3Q7Ci19Ci0KICNpbmNsdWRlICJnZHRoX3Byb2MuaCIKICNpbmNsdWRlICJnZHRoX3Byb2MuYyIKIAotLyogbm90aWZpZXIgYmxvY2sgdG8gZ2V0IGEgbm90aWZ5IG9uIHN5c3RlbSBzaHV0ZG93bi9oYWx0L3JlYm9vdCAqLwotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBnZHRoX25vdGlmaWVyID0gewotICAgIGdkdGhfaGFsdCwgTlVMTCwgMAotfTsKLXN0YXRpYyBpbnQgbm90aWZpZXJfZGlzYWJsZWQgPSAwOwotCiBzdGF0aWMgZ2R0aF9oYV9zdHIgKmdkdGhfZmluZF9oYShpbnQgaGFudW0pCiB7CiAJZ2R0aF9oYV9zdHIgKmhhOwpAQCAtNDQ1LDggKzM5Nyw4IEBACiAJZm9yIChpPTA7IGk8R0RUSF9NQVhDTURTOyArK2kpIHsKIAkJaWYgKGhhLT5jbW5kaW5mb1tpXS5pbmRleCA9PSAwKSB7CiAJCQlwcml2ID0gJmhhLT5jbW5kaW5mb1tpXTsKLQkJCXByaXYtPmluZGV4ID0gaSsxOwogCQkJbWVtc2V0KHByaXYsIDAsIHNpemVvZigqcHJpdikpOworCQkJcHJpdi0+aW5kZXggPSBpKzE7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTQ5Myw3ICs0NDUsNiBAQAogICAgIGdkdGhfaGFfc3RyICpoYSA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CiAgICAgU2NzaV9DbW5kICpzY3A7CiAgICAgc3RydWN0IGdkdGhfY21uZGluZm8gY21uZGluZm87Ci0gICAgc3RydWN0IHNjYXR0ZXJsaXN0IG9uZV9zZzsKICAgICBERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKICAgICBpbnQgcnZhbDsKIApAQCAtNTAxLDE5ICs0NTIsMjIgQEAKICAgICBpZiAoIXNjcCkKICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAKKyAgICBzY3AtPnNlbnNlX2J1ZmZlciA9IGt6YWxsb2MoU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAoIXNjcC0+c2Vuc2VfYnVmZmVyKSB7CisJa2ZyZWUoc2NwKTsKKwlyZXR1cm4gLUVOT01FTTsKKyAgICB9CisKICAgICBzY3AtPmRldmljZSA9IHNkZXY7CiAgICAgbWVtc2V0KCZjbW5kaW5mbywgMCwgc2l6ZW9mKGNtbmRpbmZvKSk7CiAKICAgICAvKiB1c2UgcmVxdWVzdCBmaWVsZCB0byBzYXZlIHRoZSBwdHIuIHRvIGNvbXBsZXRpb24gc3RydWN0LiAqLwogICAgIHNjcC0+cmVxdWVzdCA9IChzdHJ1Y3QgcmVxdWVzdCAqKSZ3YWl0OwogICAgIHNjcC0+dGltZW91dF9wZXJfY29tbWFuZCA9IHRpbWVvdXQqSFo7Ci0gICAgc2dfaW5pdF9vbmUoJm9uZV9zZywgZ2R0Y21kLCBzaXplb2YoKmdkdGNtZCkpOwotICAgIGdkdGhfc2V0X3NnbGlzdChzY3AsICZvbmVfc2cpOwotICAgIGdkdGhfc2V0X3NnX2NvdW50KHNjcCwgMSk7Ci0gICAgZ2R0aF9zZXRfYnVmZmxlbihzY3AsIHNpemVvZigqZ2R0Y21kKSk7CiAgICAgc2NwLT5jbWRfbGVuID0gMTI7CiAgICAgbWVtY3B5KHNjcC0+Y21uZCwgY21uZCwgMTIpOwogICAgIGNtbmRpbmZvLnByaW9yaXR5ID0gSU9DVExfUFJJOworICAgIGNtbmRpbmZvLmludGVybmFsX2NtZF9zdHIgPSBnZHRjbWQ7CiAgICAgY21uZGluZm8uaW50ZXJuYWxfY29tbWFuZCA9IDE7CiAKICAgICBUUkFDRSgoIl9fZ2R0aF9leGVjdXRlKCkgY21kIDB4JXhcbiIsIHNjcC0+Y21uZFswXSkpOwpAQCAtNTI0LDYgKzQ3OCw3IEBACiAgICAgcnZhbCA9IGNtbmRpbmZvLnN0YXR1czsKICAgICBpZiAoaW5mbykKICAgICAgICAgKmluZm8gPSBjbW5kaW5mby5pbmZvOworICAgIGtmcmVlKHNjcC0+c2Vuc2VfYnVmZmVyKTsKICAgICBrZnJlZShzY3ApOwogICAgIHJldHVybiBydmFsOwogfQpAQCAtNTk1LDEyNSArNTUwLDExMSBAQAogI2VuZGlmIC8qIENPTkZJR19JU0EgKi8KIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyB2b2lkIGdkdGhfc2VhcmNoX2RldihnZHRoX3BjaV9zdHIgKnBjaXN0ciwgdXNob3J0ICpjbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0IHZlbmRvciwgdXNob3J0IGRldik7CitzdGF0aWMgYm9vbCBnZHRoX3BjaV9yZWdpc3RlcmVkOwogCi1zdGF0aWMgaW50IF9faW5pdCBnZHRoX3NlYXJjaF9wY2koZ2R0aF9wY2lfc3RyICpwY2lzdHIpCitzdGF0aWMgYm9vbCBnZHRoX3NlYXJjaF92b3J0ZXgodXNob3J0IGRldmljZSkKIHsKLSAgICB1c2hvcnQgZGV2aWNlLCBjbnQ7Ci0gICAgCi0gICAgVFJBQ0UoKCJnZHRoX3NlYXJjaF9wY2koKVxuIikpOwotCi0gICAgY250ID0gMDsKLSAgICBmb3IgKGRldmljZSA9IDA7IGRldmljZSA8PSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTU1OyArK2RldmljZSkKLSAgICAgICAgZ2R0aF9zZWFyY2hfZGV2KHBjaXN0ciwgJmNudCwgUENJX1ZFTkRPUl9JRF9WT1JURVgsIGRldmljZSk7Ci0gICAgZm9yIChkZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDE3UlA7IAotICAgICAgICAgZGV2aWNlIDw9IFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVE1BWFJQOyArK2RldmljZSkKLSAgICAgICAgZ2R0aF9zZWFyY2hfZGV2KHBjaXN0ciwgJmNudCwgUENJX1ZFTkRPUl9JRF9WT1JURVgsIGRldmljZSk7Ci0gICAgZ2R0aF9zZWFyY2hfZGV2KHBjaXN0ciwgJmNudCwgUENJX1ZFTkRPUl9JRF9WT1JURVgsIAotICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFRORVdSWCk7Ci0gICAgZ2R0aF9zZWFyY2hfZGV2KHBjaXN0ciwgJmNudCwgUENJX1ZFTkRPUl9JRF9WT1JURVgsIAotICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFRORVdSWDIpOwotICAgIGdkdGhfc2VhcmNoX2RldihwY2lzdHIsICZjbnQsIFBDSV9WRU5ET1JfSURfSU5URUwsCi0gICAgICAgICAgICAgICAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfU1JDKTsKLSAgICBnZHRoX3NlYXJjaF9kZXYocGNpc3RyLCAmY250LCBQQ0lfVkVORE9SX0lEX0lOVEVMLAotICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMX1NSQ19YU0NBTEUpOwotICAgIHJldHVybiBjbnQ7CisJaWYgKGRldmljZSA8PSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTU1KQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoZGV2aWNlID49IFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MTdSUCAmJgorCSAgICBkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9WT1JURVhfR0RUTUFYUlApCisJCXJldHVybiB0cnVlOworCWlmIChkZXZpY2UgPT0gUENJX0RFVklDRV9JRF9WT1JURVhfR0RUTkVXUlggfHwKKwkgICAgZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVE5FV1JYMikKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgaW50IGdkdGhfcGNpX3Byb2JlX29uZShnZHRoX3BjaV9zdHIgKnBjaXN0ciwgZ2R0aF9oYV9zdHIgKipoYV9vdXQpOworc3RhdGljIGludCBnZHRoX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CitzdGF0aWMgdm9pZCBnZHRoX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyB2b2lkIGdkdGhfcmVtb3ZlX29uZShnZHRoX2hhX3N0ciAqaGEpOworCiAvKiBWb3J0ZXggb25seSBtYWtlcyBSQUlEIGNvbnRyb2xsZXJzLgogICogV2UgZG8gbm90IHJlYWxseSB3YW50IHRvIHNwZWNpZnkgYWxsIDU1MCBpZHMgaGVyZSwgc28gd2lsZGNhcmQgbWF0Y2guCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBnZHRodGFibGVbXSBfX21heWJlX3VudXNlZCA9IHsKLSAgICB7UENJX1ZFTkRPUl9JRF9WT1JURVgsUENJX0FOWV9JRCxQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLSAgICB7UENJX1ZFTkRPUl9JRF9JTlRFTCxQQ0lfREVWSUNFX0lEX0lOVEVMX1NSQyxQQ0lfQU5ZX0lELFBDSV9BTllfSUR9LCAKLSAgICB7UENJX1ZFTkRPUl9JRF9JTlRFTCxQQ0lfREVWSUNFX0lEX0lOVEVMX1NSQ19YU0NBTEUsUENJX0FOWV9JRCxQQ0lfQU5ZX0lEfSwgCi0gICAgezB9CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZ2R0aHRhYmxlW10gPSB7CisJeyBQQ0lfVkRFVklDRShWT1JURVgsIFBDSV9BTllfSUQpIH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9TUkMpIH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9TUkNfWFNDQUxFKSB9LAorCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLGdkdGh0YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ2R0aHRhYmxlKTsKIAotc3RhdGljIHZvaWQgX19pbml0IGdkdGhfc2VhcmNoX2RldihnZHRoX3BjaV9zdHIgKnBjaXN0ciwgdXNob3J0ICpjbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydCB2ZW5kb3IsIHVzaG9ydCBkZXZpY2UpCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ2R0aF9wY2lfZHJpdmVyID0geworCS5uYW1lCQk9ICJnZHRoIiwKKwkuaWRfdGFibGUJPSBnZHRodGFibGUsCisJLnByb2JlCQk9IGdkdGhfcGNpX2luaXRfb25lLAorCS5yZW1vdmUJCT0gZ2R0aF9wY2lfcmVtb3ZlX29uZSwKK307CisKK3N0YXRpYyB2b2lkIGdkdGhfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0gICAgdWxvbmcgYmFzZTAsIGJhc2UxLCBiYXNlMjsKLSAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLSAgICAKLSAgICBUUkFDRSgoImdkdGhfc2VhcmNoX2RldigpIGNudCAlZCB2ZW5kb3IgJXggZGV2aWNlICV4XG4iLAotICAgICAgICAgICpjbnQsIHZlbmRvciwgZGV2aWNlKSk7CisJZ2R0aF9oYV9zdHIgKmhhID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCi0gICAgcGRldiA9IE5VTEw7Ci0gICAgd2hpbGUgKChwZGV2ID0gcGNpX2dldF9kZXZpY2UodmVuZG9yLCBkZXZpY2UsIHBkZXYpKQotICAgICAgICAgICAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoKmNudCA+PSBNQVhIQSkgewotICAgICAgICAgICAgcGNpX2Rldl9wdXQocGRldik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlsaXN0X2RlbCgmaGEtPmxpc3QpOworCWdkdGhfcmVtb3ZlX29uZShoYSk7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBpbnQgZ2R0aF9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJdXNob3J0IHZlbmRvciA9IHBkZXYtPnZlbmRvcjsKKwl1c2hvcnQgZGV2aWNlID0gcGRldi0+ZGV2aWNlOworCXVsb25nIGJhc2UwLCBiYXNlMSwgYmFzZTI7CisJaW50IHJjOworCWdkdGhfcGNpX3N0ciBnZHRoX3BjaXN0cjsKKwlnZHRoX2hhX3N0ciAqaGEgPSBOVUxMOworICAgIAorCVRSQUNFKCgiZ2R0aF9zZWFyY2hfZGV2KCkgY250ICVkIHZlbmRvciAleCBkZXZpY2UgJXhcbiIsCisJICAgICAgIGdkdGhfY3RyX2NvdW50LCB2ZW5kb3IsIGRldmljZSkpOworCisJbWVtc2V0KCZnZHRoX3BjaXN0ciwgMCwgc2l6ZW9mKGdkdGhfcGNpc3RyKSk7CisKKwlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfVk9SVEVYICYmICFnZHRoX3NlYXJjaF92b3J0ZXgoZGV2aWNlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKGdkdGhfY3RyX2NvdW50ID49IE1BWEhBKQorCQlyZXR1cm4gLUVCVVNZOwogCiAgICAgICAgIC8qIEdEVCBQQ0kgY29udHJvbGxlciBmb3VuZCwgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IGluIHBkZXYgKi8KLSAgICAgICAgcGNpc3RyWypjbnRdLnBkZXYgPSBwZGV2OwotICAgICAgICBwY2lzdHJbKmNudF0uaXJxID0gcGRldi0+aXJxOworCWdkdGhfcGNpc3RyLnBkZXYgPSBwZGV2OwogICAgICAgICBiYXNlMCA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKTsKICAgICAgICAgYmFzZTEgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMSk7CiAgICAgICAgIGJhc2UyID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIpOwogICAgICAgICBpZiAoZGV2aWNlIDw9IFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDYwMDBCIHx8ICAgLyogR0RUNjAwMC9CICovCiAgICAgICAgICAgICBkZXZpY2UgPj0gUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxN1JQKSB7ICAvKiBNUFIgKi8KICAgICAgICAgICAgIGlmICghKGJhc2UwICYgSU9SRVNPVVJDRV9NRU0pKSAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHBjaXN0clsqY250XS5kcG1lbSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJICAgIGdkdGhfcGNpc3RyLmRwbWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHRFQ2MTEwLCBHRFQ2MTIwLCAuLiAqLwogICAgICAgICAgICAgaWYgKCEoYmFzZTAgJiBJT1JFU09VUkNFX01FTSkgfHwKICAgICAgICAgICAgICAgICAhKGJhc2UyICYgSU9SRVNPVVJDRV9NRU0pIHx8CiAgICAgICAgICAgICAgICAgIShiYXNlMSAmIElPUkVTT1VSQ0VfSU8pKSAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHBjaXN0clsqY250XS5kcG1lbSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKLSAgICAgICAgICAgIHBjaXN0clsqY250XS5pb19tbSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLSAgICAgICAgICAgIHBjaXN0clsqY250XS5pbyAgICA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJICAgIGdkdGhfcGNpc3RyLmRwbWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCSAgICBnZHRoX3BjaXN0ci5pbyAgICA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKICAgICAgICAgfQogICAgICAgICBUUkFDRTIoKCJDb250cm9sbGVyIGZvdW5kIGF0ICVkLyVkLCBpcnEgJWQsIGRwbWVtIDB4JWx4XG4iLAotICAgICAgICAgICAgICAgIHBjaXN0clsqY250XS5wZGV2LT5idXMtPm51bWJlciwKLQkJUENJX1NMT1QocGNpc3RyWypjbnRdLnBkZXYtPmRldmZuKSwKLSAgICAgICAgICAgICAgICBwY2lzdHJbKmNudF0uaXJxLCBwY2lzdHJbKmNudF0uZHBtZW0pKTsKLSAgICAgICAgKCpjbnQpKys7Ci0gICAgfSAgICAgICAKLX0gICAKKwkJZ2R0aF9wY2lzdHIucGRldi0+YnVzLT5udW1iZXIsCisJCVBDSV9TTE9UKGdkdGhfcGNpc3RyLnBkZXYtPmRldmZuKSwKKwkJZ2R0aF9wY2lzdHIuaXJxLAorCQlnZHRoX3BjaXN0ci5kcG1lbSkpOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZ2R0aF9zb3J0X3BjaShnZHRoX3BjaV9zdHIgKnBjaXN0ciwgaW50IGNudCkKLXsgICAgCi0gICAgZ2R0aF9wY2lfc3RyIHRlbXA7Ci0gICAgaW50IGksIGNoYW5nZWQ7Ci0gICAgCi0gICAgVFJBQ0UoKCJnZHRoX3NvcnRfcGNpKCkgY250ICVkXG4iLGNudCkpOwotICAgIGlmIChjbnQgPT0gMCkKLSAgICAgICAgcmV0dXJuOworCXJjID0gZ2R0aF9wY2lfcHJvYmVfb25lKCZnZHRoX3BjaXN0ciwgJmhhKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotICAgIGRvIHsKLSAgICAgICAgY2hhbmdlZCA9IEZBTFNFOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY250LTE7ICsraSkgewotICAgICAgICAgICAgaWYgKCFyZXZlcnNlX3NjYW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoKHBjaXN0cltpXS5wZGV2LT5idXMtPm51bWJlciA+IHBjaXN0cltpKzFdLnBkZXYtPmJ1cy0+bnVtYmVyKSB8fAotICAgICAgICAgICAgICAgICAgICAocGNpc3RyW2ldLnBkZXYtPmJ1cy0+bnVtYmVyID09IHBjaXN0cltpKzFdLnBkZXYtPmJ1cy0+bnVtYmVyICYmCi0gICAgICAgICAgICAgICAgICAgICBQQ0lfU0xPVChwY2lzdHJbaV0ucGRldi0+ZGV2Zm4pID4KLSAgICAgICAgICAgICAgICAgICAgIFBDSV9TTE9UKHBjaXN0cltpKzFdLnBkZXYtPmRldmZuKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHBjaXN0cltpXTsKLSAgICAgICAgICAgICAgICAgICAgcGNpc3RyW2ldID0gcGNpc3RyW2krMV07Ci0gICAgICAgICAgICAgICAgICAgIHBjaXN0cltpKzFdID0gdGVtcDsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoKHBjaXN0cltpXS5wZGV2LT5idXMtPm51bWJlciA8IHBjaXN0cltpKzFdLnBkZXYtPmJ1cy0+bnVtYmVyKSB8fAotICAgICAgICAgICAgICAgICAgICAocGNpc3RyW2ldLnBkZXYtPmJ1cy0+bnVtYmVyID09IHBjaXN0cltpKzFdLnBkZXYtPmJ1cy0+bnVtYmVyICYmCi0gICAgICAgICAgICAgICAgICAgICBQQ0lfU0xPVChwY2lzdHJbaV0ucGRldi0+ZGV2Zm4pIDwKLSAgICAgICAgICAgICAgICAgICAgIFBDSV9TTE9UKHBjaXN0cltpKzFdLnBkZXYtPmRldmZuKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHBjaXN0cltpXTsKLSAgICAgICAgICAgICAgICAgICAgcGNpc3RyW2ldID0gcGNpc3RyW2krMV07Ci0gICAgICAgICAgICAgICAgICAgIHBjaXN0cltpKzFdID0gdGVtcDsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoY2hhbmdlZCk7CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCkBAIC05MTMsNyArODU0LDggQEAKICNlbmRpZiAvKiBDT05GSUdfSVNBICovCiAKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgaW50IF9faW5pdCBnZHRoX2luaXRfcGNpKGdkdGhfcGNpX3N0ciAqcGNpc3RyLGdkdGhfaGFfc3RyICpoYSkKK3N0YXRpYyBpbnQgZ2R0aF9pbml0X3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZ2R0aF9wY2lfc3RyICpwY2lzdHIsCisJCQkJICAgZ2R0aF9oYV9zdHIgKmhhKQogewogICAgIHJlZ2lzdGVyIGdkdDZfZHByYW1fc3RyIF9faW9tZW0gKmRwNl9wdHI7CiAgICAgcmVnaXN0ZXIgZ2R0NmNfZHByYW1fc3RyIF9faW9tZW0gKmRwNmNfcHRyOwpAQCAtOTI1LDE0ICs4NjcsMTQgQEAKIAogICAgIFRSQUNFKCgiZ2R0aF9pbml0X3BjaSgpXG4iKSk7CiAKLSAgICBpZiAocGNpc3RyLT5wZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkKKyAgICBpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwpCiAgICAgICAgIGhhLT5vZW1faWQgPSBPRU1fSURfSU5URUw7CiAgICAgZWxzZQogICAgICAgICBoYS0+b2VtX2lkID0gT0VNX0lEX0lDUDsKLSAgICBoYS0+YnJkX3BoeXMgPSAocGNpc3RyLT5wZGV2LT5idXMtPm51bWJlciA8PCA4KSB8IChwY2lzdHItPnBkZXYtPmRldmZuICYgMHhmOCk7Ci0gICAgaGEtPnN0eXBlID0gKHVsb25nMzIpcGNpc3RyLT5wZGV2LT5kZXZpY2U7Ci0gICAgaGEtPmlycSA9IHBjaXN0ci0+aXJxOwotICAgIGhhLT5wZGV2ID0gcGNpc3RyLT5wZGV2OworICAgIGhhLT5icmRfcGh5cyA9IChwZGV2LT5idXMtPm51bWJlciA8PCA4KSB8IChwZGV2LT5kZXZmbiAmIDB4ZjgpOworICAgIGhhLT5zdHlwZSA9ICh1bG9uZzMyKXBkZXYtPmRldmljZTsKKyAgICBoYS0+aXJxID0gcGRldi0+aXJxOworICAgIGhhLT5wZGV2ID0gcGRldjsKICAgICAKICAgICBpZiAoaGEtPnBkZXYtPmRldmljZSA8PSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2MDAwQikgeyAgLyogR0RUNjAwMC9CICovCiAgICAgICAgIFRSQUNFMigoImluaXRfcGNpKCkgZHBtZW0gJWx4IGlycSAlZFxuIixwY2lzdHItPmRwbWVtLGhhLT5pcnEpKTsKQEAgLTk2MCw4ICs5MDIsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaW91bm1hcChoYS0+YnJkKTsKLSAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaXN0ci0+cGRldiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQkFTRV9BRERSRVNTXzAsIGkpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgaSk7CiAgICAgICAgICAgICAgICAgaGEtPmJyZCA9IGlvcmVtYXAoaSwgc2l6ZW9mKGdkdDZfZHByYW1fc3RyKSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKQEAgLTEwNzAsOCArMTAxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpb3VubWFwKGhhLT5icmQpOwotICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpc3RyLT5wZGV2LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9CQVNFX0FERFJFU1NfMiwgaSk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0JBU0VfQUREUkVTU18yLCBpKTsKICAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YoZ2R0NmNfZHByYW1fc3RyKSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKQEAgLTExNjMsMTYgKzExMDMsMTYgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIG1hbmlwdWxhdGUgY29uZmlnLiBzcGFjZSB0byBlbmFibGUgRFBNRU0sIHN0YXJ0IFJQIGNvbnRyb2xsZXIgKi8KLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpc3RyLT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CiAgICAgICAgIGNvbW1hbmQgfD0gNjsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaXN0ci0+cGRldiwgUENJX0NPTU1BTkQsIGNvbW1hbmQpOwotICAgICAgICBpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaXN0ci0+cGRldiwgOCkgPT0gMVVMKQotICAgICAgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaXN0ci0+cGRldiwgOCkgPSAwVUw7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKKwlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDgpID09IDFVTCkKKwkgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDgpID0gMFVMOwogICAgICAgICBpID0gMHhGRUZGMDAwMVVMOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaXN0ci0+cGRldiwgUENJX1JPTV9BRERSRVNTLCBpKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9ST01fQUREUkVTUywgaSk7CiAgICAgICAgIGdkdGhfZGVsYXkoMSk7Ci0gICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpc3RyLT5wZGV2LCBQQ0lfUk9NX0FERFJFU1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaXN0ci0+cGRldiwgOCkpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX1JPTV9BRERSRVNTLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA4KSk7CiAgICAgICAgIAogICAgICAgICBkcDZtX3B0ciA9IGhhLT5icmQ7CiAKQEAgLTExOTksOCArMTEzOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpb3VubWFwKGhhLT5icmQpOwotICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpc3RyLT5wZGV2LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9CQVNFX0FERFJFU1NfMCwgaSk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0JBU0VfQUREUkVTU18wLCBpKTsKICAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YoZ2R0Nm1fZHByYW1fc3RyKSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKQEAgLTIzNTUsMTQgKzIyOTQsMTQgQEAKICAqIGJ1ZmZlcnMsIGttYXBfYXRvbWljKCkgYXMgbmVlZGVkLgogICovCiBzdGF0aWMgdm9pZCBnZHRoX2NvcHlfaW50ZXJuYWxfZGF0YShnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCB1c2hvcnQgY291bnQsIGludCB0b19idWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHVzaG9ydCBjb3VudCkKIHsKLSAgICB1c2hvcnQgY3Bjb3VudCxpLCBtYXhfc2cgPSBnZHRoX3NnX2NvdW50KHNjcCk7CisgICAgdXNob3J0IGNwY291bnQsaSwgbWF4X3NnID0gc2NzaV9zZ19jb3VudChzY3ApOwogICAgIHVzaG9ydCBjcHN1bSxjcG5vdzsKICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogICAgIGNoYXIgKmFkZHJlc3M7CiAKLSAgICBjcGNvdW50ID0gbWluX3QodXNob3J0LCBjb3VudCwgZ2R0aF9idWZmbGVuKHNjcCkpOworICAgIGNwY291bnQgPSBtaW5fdCh1c2hvcnQsIGNvdW50LCBzY3NpX2J1ZmZsZW4oc2NwKSk7CiAKICAgICBpZiAoY3Bjb3VudCkgewogICAgICAgICBjcHN1bT0wOwpAQCAtMjM3MCw3ICsyMzA5LDcgQEAKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgICAgICBjcG5vdyA9ICh1c2hvcnQpc2wtPmxlbmd0aDsKICAgICAgICAgICAgIFRSQUNFKCgiY29weV9pbnRlcm5hbCgpIG5vdyAlZCBzdW0gJWQgY291bnQgJWQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNwbm93LCBjcHN1bSwgY3Bjb3VudCwgZ2R0aF9idWZmbGVuKHNjcCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3Bub3csIGNwc3VtLCBjcGNvdW50LCBzY3NpX2J1ZmZsZW4oc2NwKSkpOwogICAgICAgICAgICAgaWYgKGNwc3VtK2Nwbm93ID4gY3Bjb3VudCkgCiAgICAgICAgICAgICAgICAgY3Bub3cgPSBjcGNvdW50IC0gY3BzdW07CiAgICAgICAgICAgICBjcHN1bSArPSBjcG5vdzsKQEAgLTIzODEsMTAgKzIzMjAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogICAgICAgICAgICAgYWRkcmVzcyA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2wpLCBLTV9CSU9fU1JDX0lSUSkgKyBzbC0+b2Zmc2V0OwotICAgICAgICAgICAgaWYgKHRvX2J1ZmZlcikKLSAgICAgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBhZGRyZXNzLCBjcG5vdyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJlc3MsIGJ1ZmZlciwgY3Bub3cpOworICAgICAgICAgICAgbWVtY3B5KGFkZHJlc3MsIGJ1ZmZlciwgY3Bub3cpOwogICAgICAgICAgICAgZmx1c2hfZGNhY2hlX3BhZ2Uoc2dfcGFnZShzbCkpOwogICAgICAgICAgICAga3VubWFwX2F0b21pYyhhZGRyZXNzLCBLTV9CSU9fU1JDX0lSUSk7CiAgICAgICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0yNDM4LDcgKzIzNzQsNyBAQAogICAgICAgICBzdHJjcHkoaW5xLnZlbmRvcixoYS0+b2VtX25hbWUpOwogICAgICAgICBzcHJpbnRmKGlucS5wcm9kdWN0LCJIb3N0IERyaXZlICAjJTAyZCIsdCk7CiAgICAgICAgIHN0cmNweShpbnEucmV2aXNpb24sIiAgICIpOwotICAgICAgICBnZHRoX2NvcHlfaW50ZXJuYWxfZGF0YShoYSwgc2NwLCAoY2hhciopJmlucSwgc2l6ZW9mKGdkdGhfaW5xX2RhdGEpLCAwKTsKKyAgICAgICAgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoaGEsIHNjcCwgKGNoYXIqKSZpbnEsIHNpemVvZihnZHRoX2lucV9kYXRhKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIFJFUVVFU1RfU0VOU0U6CkBAIC0yNDQ4LDcgKzIzODQsNyBAQAogICAgICAgICBzZC5rZXkgICAgICAgPSBOT19TRU5TRTsKICAgICAgICAgc2QuaW5mbyAgICAgID0gMDsKICAgICAgICAgc2QuYWRkX2xlbmd0aD0gMDsKLSAgICAgICAgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoaGEsIHNjcCwgKGNoYXIqKSZzZCwgc2l6ZW9mKGdkdGhfc2Vuc2VfZGF0YSksIDApOworICAgICAgICBnZHRoX2NvcHlfaW50ZXJuYWxfZGF0YShoYSwgc2NwLCAoY2hhciopJnNkLCBzaXplb2YoZ2R0aF9zZW5zZV9kYXRhKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIE1PREVfU0VOU0U6CkBAIC0yNDYwLDcgKzIzOTYsNyBAQAogICAgICAgICBtcGQuYmQuYmxvY2tfbGVuZ3RoWzBdID0gKFNFQ1RPUl9TSVpFICYgMHgwMGZmMDAwMCkgPj4gMTY7CiAgICAgICAgIG1wZC5iZC5ibG9ja19sZW5ndGhbMV0gPSAoU0VDVE9SX1NJWkUgJiAweDAwMDBmZjAwKSA+PiA4OwogICAgICAgICBtcGQuYmQuYmxvY2tfbGVuZ3RoWzJdID0gKFNFQ1RPUl9TSVpFICYgMHgwMDAwMDBmZik7Ci0gICAgICAgIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGhhLCBzY3AsIChjaGFyKikmbXBkLCBzaXplb2YoZ2R0aF9tb2RlcF9kYXRhKSwgMCk7CisgICAgICAgIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGhhLCBzY3AsIChjaGFyKikmbXBkLCBzaXplb2YoZ2R0aF9tb2RlcF9kYXRhKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIFJFQURfQ0FQQUNJVFk6CkBAIC0yNDcwLDcgKzI0MDYsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZGMubGFzdF9ibG9ja19ubyA9IGNwdV90b19iZTMyKGhhLT5oZHJbdF0uc2l6ZS0xKTsKICAgICAgICAgcmRjLmJsb2NrX2xlbmd0aCAgPSBjcHVfdG9fYmUzMihTRUNUT1JfU0laRSk7Ci0gICAgICAgIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGhhLCBzY3AsIChjaGFyKikmcmRjLCBzaXplb2YoZ2R0aF9yZGNhcF9kYXRhKSwgMCk7CisgICAgICAgIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGhhLCBzY3AsIChjaGFyKikmcmRjLCBzaXplb2YoZ2R0aF9yZGNhcF9kYXRhKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgpAQCAtMjQ4Miw3ICsyNDE4LDcgQEAKICAgICAgICAgICAgIHJkYzE2Lmxhc3RfYmxvY2tfbm8gPSBjcHVfdG9fYmU2NChoYS0+aGRyW3RdLnNpemUtMSk7CiAgICAgICAgICAgICByZGMxNi5ibG9ja19sZW5ndGggID0gY3B1X3RvX2JlMzIoU0VDVE9SX1NJWkUpOwogICAgICAgICAgICAgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoaGEsIHNjcCwgKGNoYXIqKSZyZGMxNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2R0aF9yZGNhcDE2X2RhdGEpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2R0aF9yZGNhcDE2X2RhdGEpKTsKICAgICAgICAgfSBlbHNlIHsgCiAgICAgICAgICAgICBzY3AtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKICAgICAgICAgfQpAQCAtMjU5NiwxMCArMjUzMiwxMCBAQAogICAgICAgICAgICAgY21kcC0+dS5jYWNoZS5CbG9ja0NudCA9IGJsb2NrY250OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGdkdGhfYnVmZmxlbihzY3ApKSB7CisgICAgICAgIGlmIChzY3NpX2J1ZmZsZW4oc2NwKSkgewogICAgICAgICAgICAgY21uZGluZm8tPmRtYV9kaXIgPSAocmVhZF93cml0ZSA9PSAxID8KICAgICAgICAgICAgICAgICBQQ0lfRE1BX1RPREVWSUNFIDogUENJX0RNQV9GUk9NREVWSUNFKTsgICAKLSAgICAgICAgICAgIHNnY250ID0gcGNpX21hcF9zZyhoYS0+cGRldiwgZ2R0aF9zZ2xpc3Qoc2NwKSwgZ2R0aF9zZ19jb3VudChzY3ApLAorICAgICAgICAgICAgc2djbnQgPSBwY2lfbWFwX3NnKGhhLT5wZGV2LCBzY3NpX3NnbGlzdChzY3ApLCBzY3NpX3NnX2NvdW50KHNjcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21uZGluZm8tPmRtYV9kaXIpOwogICAgICAgICAgICAgaWYgKG1vZGU2NCkgewogICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2w7CkBAIC0yNzQ2LDcgKzI2ODIsNyBAQAogICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5sdW4gICAgICAgID0gbDsKICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuYnVzICAgICAgICA9IGI7CiAgICAgICAgICAgICBjbWRwLT51LnJhdzY0LnByaW9yaXR5ICAgPSAwOwotICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZGxlbiAgICAgID0gZ2R0aF9idWZmbGVuKHNjcCk7CisgICAgICAgICAgICBjbWRwLT51LnJhdzY0LnNkbGVuICAgICAgPSBzY3NpX2J1ZmZsZW4oc2NwKTsKICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2Vuc2VfbGVuICA9IDE2OwogICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZW5zZV9kYXRhID0gc2Vuc2VfcGFkZHI7CiAgICAgICAgICAgICBjbWRwLT51LnJhdzY0LmRpcmVjdGlvbiAgPSAKQEAgLTI3NjMsNyArMjY5OSw3IEBACiAgICAgICAgICAgICBjbWRwLT51LnJhdy5idXMgICAgICAgID0gYjsKICAgICAgICAgICAgIGNtZHAtPnUucmF3LnByaW9yaXR5ICAgPSAwOwogICAgICAgICAgICAgY21kcC0+dS5yYXcubGlua19wICAgICA9IDA7Ci0gICAgICAgICAgICBjbWRwLT51LnJhdy5zZGxlbiAgICAgID0gZ2R0aF9idWZmbGVuKHNjcCk7CisgICAgICAgICAgICBjbWRwLT51LnJhdy5zZGxlbiAgICAgID0gc2NzaV9idWZmbGVuKHNjcCk7CiAgICAgICAgICAgICBjbWRwLT51LnJhdy5zZW5zZV9sZW4gID0gMTY7CiAgICAgICAgICAgICBjbWRwLT51LnJhdy5zZW5zZV9kYXRhID0gc2Vuc2VfcGFkZHI7CiAgICAgICAgICAgICBjbWRwLT51LnJhdy5kaXJlY3Rpb24gID0gCkBAIC0yNzcyLDkgKzI3MDgsOSBAQAogICAgICAgICAgICAgY21kcC0+dS5yYXcuc2dfcmFueiAgICA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZ2R0aF9idWZmbGVuKHNjcCkpIHsKKyAgICAgICAgaWYgKHNjc2lfYnVmZmxlbihzY3ApKSB7CiAgICAgICAgICAgICBjbW5kaW5mby0+ZG1hX2RpciA9IFBDSV9ETUFfQklESVJFQ1RJT05BTDsKLSAgICAgICAgICAgIHNnY250ID0gcGNpX21hcF9zZyhoYS0+cGRldiwgZ2R0aF9zZ2xpc3Qoc2NwKSwgZ2R0aF9zZ19jb3VudChzY3ApLAorICAgICAgICAgICAgc2djbnQgPSBwY2lfbWFwX3NnKGhhLT5wZGV2LCBzY3NpX3NnbGlzdChzY3ApLCBzY3NpX3NnX2NvdW50KHNjcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21uZGluZm8tPmRtYV9kaXIpOwogICAgICAgICAgICAgaWYgKG1vZGU2NCkgewogICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2w7CkBAIC0yODUyLDYgKzI3ODgsNyBAQAogc3RhdGljIGludCBnZHRoX3NwZWNpYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3ApCiB7CiAgICAgcmVnaXN0ZXIgZ2R0aF9jbWRfc3RyICpjbWRwOworICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7CiAgICAgaW50IGNtZF9pbmRleDsKIAogICAgIGNtZHA9IGhhLT5wY2NiOwpAQCAtMjg2MCw3ICsyNzk3LDcgQEAKICAgICBpZiAoaGEtPnR5cGU9PUdEVF9FSVNBICYmIGhhLT5jbWRfY250PjApIAogICAgICAgICByZXR1cm4gMDsKIAotICAgIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGhhLCBzY3AsIChjaGFyICopY21kcCwgc2l6ZW9mKGdkdGhfY21kX3N0ciksIDEpOworICAgICpjbWRwID0gKmNtbmRpbmZvLT5pbnRlcm5hbF9jbWRfc3RyOwogICAgIGNtZHAtPlJlcXVlc3RCdWZmZXIgPSBzY3A7CiAKICAgICAvKiBzZWFyY2ggZnJlZSBjb21tYW5kIGluZGV4ICovCkBAIC0zMzk0LDggKzMzMzEsOCBAQAogICAgICAgICAgICAgLyogcmV0cnkgKi8KICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICB9Ci0gICAgICAgIGlmIChnZHRoX2J1ZmZsZW4oc2NwKSkKLSAgICAgICAgICAgIHBjaV91bm1hcF9zZyhoYS0+cGRldiwgZ2R0aF9zZ2xpc3Qoc2NwKSwgZ2R0aF9zZ19jb3VudChzY3ApLAorICAgICAgICBpZiAoc2NzaV9idWZmbGVuKHNjcCkpCisgICAgICAgICAgICBwY2lfdW5tYXBfc2coaGEtPnBkZXYsIHNjc2lfc2dsaXN0KHNjcCksIHNjc2lfc2dfY291bnQoc2NwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjbW5kaW5mby0+ZG1hX2Rpcik7CiAKICAgICAgICAgaWYgKGNtbmRpbmZvLT5zZW5zZV9wYWRkcikKQEAgLTM3OTQsNiArMzczMSw4IEBACiAgICAgZ2R0aF9oYV9zdHIgKmhhOwogICAgIHVsb25nIGZsYWdzOwogCisgICAgQlVHX09OKGxpc3RfZW1wdHkoJmdkdGhfaW5zdGFuY2VzKSk7CisKICAgICBoYSA9IGxpc3RfZmlyc3RfZW50cnkoJmdkdGhfaW5zdGFuY2VzLCBnZHRoX2hhX3N0ciwgbGlzdCk7CiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogCkBAIC00MDM1LDEwICszOTc0LDYgQEAKICAgICBnZHRoX3VwZGF0ZV90aW1lb3V0KHNjcCwgc2NwLT50aW1lb3V0X3Blcl9jb21tYW5kICogNik7CiAgICAgY21uZGluZm8tPnByaW9yaXR5ID0gREVGQVVMVF9QUkk7CiAKLSAgICBnZHRoX3NldF9idWZmbGVuKHNjcCwgc2NzaV9idWZmbGVuKHNjcCkpOwotICAgIGdkdGhfc2V0X3NnX2NvdW50KHNjcCwgc2NzaV9zZ19jb3VudChzY3ApKTsKLSAgICBnZHRoX3NldF9zZ2xpc3Qoc2NwLCBzY3NpX3NnbGlzdChzY3ApKTsKLQogICAgIHJldHVybiBfX2dkdGhfcXVldWVjb21tYW5kKGhhLCBzY3AsIGNtbmRpbmZvKTsKIH0KIApAQCAtNDY2OSw0NSArNDYwNCw2IEBACiAgICAgfQogfQogCi0vKiBzaHV0ZG93biByb3V0aW5lICovCi1zdGF0aWMgaW50IGdkdGhfaGFsdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bG9uZyBldmVudCwgdm9pZCAqYnVmKQotewotICAgIGdkdGhfaGFfc3RyICpoYTsKLSNpZm5kZWYgX19hbHBoYV9fCi0gICAgZ2R0aF9jbWRfc3RyICAgIGdkdGNtZDsKLSAgICBjaGFyICAgICAgICAgICAgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsgICAKLSNlbmRpZgotCi0gICAgaWYgKG5vdGlmaWVyX2Rpc2FibGVkKQotICAgICAgICByZXR1cm4gTk9USUZZX09LOwotCi0gICAgVFJBQ0UyKCgiZ2R0aF9oYWx0KCkgZXZlbnQgJWRcbiIsKGludClldmVudCkpOwotICAgIGlmIChldmVudCAhPSBTWVNfUkVTVEFSVCAmJiBldmVudCAhPSBTWVNfSEFMVCAmJiBldmVudCAhPSBTWVNfUE9XRVJfT0ZGKQotICAgICAgICByZXR1cm4gTk9USUZZX0RPTkU7Ci0KLSAgICBub3RpZmllcl9kaXNhYmxlZCA9IDE7Ci0gICAgcHJpbnRrKCJHRFQtSEE6IEZsdXNoaW5nIGFsbCBob3N0IGRyaXZlcyAuLiAiKTsKLSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmZ2R0aF9pbnN0YW5jZXMsIGxpc3QpIHsKLSAgICAgICAgZ2R0aF9mbHVzaChoYSk7Ci0KLSNpZm5kZWYgX19hbHBoYV9fCi0gICAgICAgIC8qIGNvbnRyb2xsZXIgcmVzZXQgKi8KLSAgICAgICAgbWVtc2V0KGNtbmQsIDB4ZmYsIE1BWF9DT01NQU5EX1NJWkUpOwotICAgICAgICBnZHRjbWQuQm9hcmROb2RlID0gTE9DQUxCT0FSRDsKLSAgICAgICAgZ2R0Y21kLlNlcnZpY2UgPSBDQUNIRVNFUlZJQ0U7Ci0gICAgICAgIGdkdGNtZC5PcENvZGUgPSBHRFRfUkVTRVQ7Ci0gICAgICAgIFRSQUNFMigoImdkdGhfaGFsdCgpOiByZXNldCBjb250cm9sbGVyICVkXG4iLCBoYS0+aGFudW0pKTsKLSAgICAgICAgZ2R0aF9leGVjdXRlKGhhLT5zaG9zdCwgJmdkdGNtZCwgY21uZCwgMTAsIE5VTEwpOwotI2VuZGlmCi0gICAgfQotICAgIHByaW50aygiRG9uZS5cbiIpOwotCi0jaWZkZWYgR0RUSF9TVEFUSVNUSUNTCi0gICAgZGVsX3RpbWVyKCZnZHRoX3RpbWVyKTsKLSNlbmRpZgotICAgIHJldHVybiBOT1RJRllfT0s7Ci19Ci0KIC8qIGNvbmZpZ3VyZSBsdW4gKi8KIHN0YXRpYyBpbnQgZ2R0aF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewpAQCAtNDk5OCwxMiArNDg5NCwxNiBAQAogI2VuZGlmIC8qIENPTkZJR19FSVNBICovCiAKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgaW50IF9faW5pdCBnZHRoX3BjaV9wcm9iZV9vbmUoZ2R0aF9wY2lfc3RyICpwY2lzdHIsIGludCBjdHIpCitzdGF0aWMgaW50IGdkdGhfcGNpX3Byb2JlX29uZShnZHRoX3BjaV9zdHIgKnBjaXN0ciwKKwkJCSAgICAgZ2R0aF9oYV9zdHIgKipoYV9vdXQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hwOwogCWdkdGhfaGFfc3RyICpoYTsKIAlkbWFfYWRkcl90IHNjcmF0Y2hfZG1hX2hhbmRsZSA9IDA7CiAJaW50IGVycm9yLCBpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGNpc3RyLT5wZGV2OworCisJKmhhX291dCA9IE5VTEw7CiAKIAlzaHAgPSBzY3NpX2hvc3RfYWxsb2MoJmdkdGhfdGVtcGxhdGUsIHNpemVvZihnZHRoX2hhX3N0cikpOwogCWlmICghc2hwKQpAQCAtNTAxMSwxMyArNDkxMSwxMyBAQAogCWhhID0gc2hvc3RfcHJpdihzaHApOwogCiAJZXJyb3IgPSAtRU5PREVWOwotCWlmICghZ2R0aF9pbml0X3BjaSgmcGNpc3RyW2N0cl0saGEpKQorCWlmICghZ2R0aF9pbml0X3BjaShwZGV2LCBwY2lzdHIsIGhhKSkKIAkJZ290byBvdXRfaG9zdF9wdXQ7CiAKIAkvKiBjb250cm9sbGVyIGZvdW5kIGFuZCBpbml0aWFsaXplZCAqLwogCXByaW50aygiQ29uZmlndXJpbmcgR0RULVBDSSBIQSBhdCAlZC8lZCBJUlEgJXVcbiIsCi0JCXBjaXN0cltjdHJdLnBkZXYtPmJ1cy0+bnVtYmVyLAotCQlQQ0lfU0xPVChwY2lzdHJbY3RyXS5wZGV2LT5kZXZmbiksCisJCXBkZXYtPmJ1cy0+bnVtYmVyLAorCQlQQ0lfU0xPVChwZGV2LT5kZXZmbiksCiAJCWhhLT5pcnEpOwogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShoYS0+aXJxLCBnZHRoX2ludGVycnVwdCwKQEAgLTUwNjIsNyArNDk2Miw3IEBACiAKIAloYS0+c2NyYXRjaF9idXN5ID0gRkFMU0U7CiAJaGEtPnJlcV9maXJzdCA9IE5VTEw7Ci0JaGEtPnRpZF9jbnQgPSBwY2lzdHJbY3RyXS5wZGV2LT5kZXZpY2UgPj0gMHgyMDAgPyBNQVhJRCA6IE1BWF9IRFJJVkVTOworCWhhLT50aWRfY250ID0gcGRldi0+ZGV2aWNlID49IDB4MjAwID8gTUFYSUQgOiBNQVhfSERSSVZFUzsKIAlpZiAobWF4X2lkcyA+IDAgJiYgbWF4X2lkcyA8IGhhLT50aWRfY250KQogCQloYS0+dGlkX2NudCA9IG1heF9pZHM7CiAJZm9yIChpID0gMDsgaSA8IEdEVEhfTUFYQ01EUzsgKytpKQpAQCAtNTA4MiwxNiArNDk4MiwxNiBAQAogCS8qIDY0LWJpdCBETUEgb25seSBzdXBwb3J0ZWQgZnJvbSBGVyA+PSB4LjQzICovCiAJaWYgKCEoaGEtPmNhY2hlX2ZlYXQgJiBoYS0+cmF3X2ZlYXQgJiBoYS0+c2NyZWVuX2ZlYXQgJiBHRFRfNjRCSVQpIHx8CiAJICAgICFoYS0+ZG1hNjRfc3VwcG9ydCkgewotCQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2lzdHJbY3RyXS5wZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRFQtUENJICVkOiAiCiAJCQkJIlVuYWJsZSB0byBzZXQgMzItYml0IERNQVxuIiwgaGEtPmhhbnVtKTsKIAkJCQlnb3RvIG91dF9mcmVlX2NvYWxfc3RhdDsKIAkJfQogCX0gZWxzZSB7CiAJCXNocC0+bWF4X2NtZF9sZW4gPSAxNjsKLQkJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaXN0cltjdHJdLnBkZXYsIERNQV82NEJJVF9NQVNLKSkgeworCQlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSB7CiAJCQlwcmludGsoIkdEVC1QQ0kgJWQ6IDY0LWJpdCBETUEgZW5hYmxlZFxuIiwgaGEtPmhhbnVtKTsKLQkJfSBlbHNlIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaXN0cltjdHJdLnBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCQl9IGVsc2UgaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRFQtUENJICVkOiAiCiAJCQkJIlVuYWJsZSB0byBzZXQgNjQvMzItYml0IERNQVxuIiwgaGEtPmhhbnVtKTsKIAkJCWdvdG8gb3V0X2ZyZWVfY29hbF9zdGF0OwpAQCAtNTEwNSwxMyArNTAwNSwxNyBAQAogCXNwaW5fbG9ja19pbml0KCZoYS0+c21wX2xvY2spOwogCWdkdGhfZW5hYmxlX2ludChoYSk7CiAKLQllcnJvciA9IHNjc2lfYWRkX2hvc3Qoc2hwLCAmcGNpc3RyW2N0cl0ucGRldi0+ZGV2KTsKKwllcnJvciA9IHNjc2lfYWRkX2hvc3Qoc2hwLCAmcGRldi0+ZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2ZyZWVfY29hbF9zdGF0OwogCWxpc3RfYWRkX3RhaWwoJmhhLT5saXN0LCAmZ2R0aF9pbnN0YW5jZXMpOwogCisJcGNpX3NldF9kcnZkYXRhKGhhLT5wZGV2LCBoYSk7CisKIAlzY3NpX3NjYW5faG9zdChzaHApOwogCisJKmhhX291dCA9IGhhOworCiAJcmV0dXJuIDA7CiAKICBvdXRfZnJlZV9jb2FsX3N0YXQ6CkBAIC01MTQyLDEzICs1MDQ2LDEzIEBACiAKIAlzY3NpX3JlbW92ZV9ob3N0KHNocCk7CiAKKwlnZHRoX2ZsdXNoKGhhKTsKKwogCWlmIChoYS0+c2RldikgewogCQlzY3NpX2ZyZWVfaG9zdF9kZXYoaGEtPnNkZXYpOwogCQloYS0+c2RldiA9IE5VTEw7CiAJfQogCi0JZ2R0aF9mbHVzaChoYSk7Ci0KIAlpZiAoc2hwLT5pcnEpCiAJCWZyZWVfaXJxKHNocC0+aXJxLGhhKTsKIApAQCAtNTE3NCw2ICs1MDc4LDI0IEBACiAJc2NzaV9ob3N0X3B1dChzaHApOwogfQogCitzdGF0aWMgaW50IGdkdGhfaGFsdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bG9uZyBldmVudCwgdm9pZCAqYnVmKQoreworCWdkdGhfaGFfc3RyICpoYTsKKworCVRSQUNFMigoImdkdGhfaGFsdCgpIGV2ZW50ICVkXG4iLCAoaW50KWV2ZW50KSk7CisJaWYgKGV2ZW50ICE9IFNZU19SRVNUQVJUICYmIGV2ZW50ICE9IFNZU19IQUxUICYmIGV2ZW50ICE9IFNZU19QT1dFUl9PRkYpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZnZHRoX2luc3RhbmNlcywgbGlzdCkKKwkJZ2R0aF9mbHVzaChoYSk7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGdkdGhfbm90aWZpZXIgPSB7CisgICAgZ2R0aF9oYWx0LCBOVUxMLCAwCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBnZHRoX2luaXQodm9pZCkKIHsKIAlpZiAoZGlzYWJsZSkgewpAQCAtNTIxMCwxNiArNTEzMiw4IEBACiAKICNpZmRlZiBDT05GSUdfUENJCiAJLyogc2Nhbm5pbmcgZm9yIFBDSSBjb250cm9sbGVycyAqLwotCXsKLQkJZ2R0aF9wY2lfc3RyIHBjaXN0cltNQVhIQV07Ci0JCWludCBjbnQsY3RyOwotCi0JCWNudCA9IGdkdGhfc2VhcmNoX3BjaShwY2lzdHIpOwotCQlwcmludGsoIkdEVC1IQTogRm91bmQgJWQgUENJIFN0b3JhZ2UgUkFJRCBDb250cm9sbGVyc1xuIiwgY250KTsKLQkJZ2R0aF9zb3J0X3BjaShwY2lzdHIsY250KTsKLQkJZm9yIChjdHIgPSAwOyBjdHIgPCBjbnQ7ICsrY3RyKQotCQkJZ2R0aF9wY2lfcHJvYmVfb25lKHBjaXN0ciwgY3RyKTsKLQl9CisJaWYgKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmdkdGhfcGNpX2RyaXZlcikgPT0gMCkKKwkJZ2R0aF9wY2lfcmVnaXN0ZXJlZCA9IHRydWU7CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAJVFJBQ0UyKCgiZ2R0aF9kZXRlY3QoKSAlZCBjb250cm9sbGVyIGRldGVjdGVkXG4iLCBnZHRoX2N0cl9jb3VudCkpOwpAQCAtNTIzNiw3ICs1MTUwLDYgQEAKIAlhZGRfdGltZXIoJmdkdGhfdGltZXIpOwogI2VuZGlmCiAJbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwiZ2R0aCIsICZnZHRoX2ZvcHMpOwotCW5vdGlmaWVyX2Rpc2FibGVkID0gMDsKIAlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmdkdGhfbm90aWZpZXIpOwogCWdkdGhfcG9sbGluZyA9IEZBTFNFOwogCXJldHVybiAwOwpAQCAtNTI0NiwxNCArNTE1OSwyMCBAQAogewogCWdkdGhfaGFfc3RyICpoYTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZnZHRoX2luc3RhbmNlcywgbGlzdCkKLQkJZ2R0aF9yZW1vdmVfb25lKGhhKTsKKwl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgImdkdGgiKTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZ2R0aF9ub3RpZmllcik7CiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKLQlkZWxfdGltZXIoJmdkdGhfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZnZHRoX3RpbWVyKTsKICNlbmRpZgotCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCJnZHRoIik7Ci0JdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmdkdGhfbm90aWZpZXIpOworCisjaWZkZWYgQ09ORklHX1BDSQorCWlmIChnZHRoX3BjaV9yZWdpc3RlcmVkKQorCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmdkdGhfcGNpX2RyaXZlcik7CisjZW5kaWYKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZnZHRoX2luc3RhbmNlcywgbGlzdCkKKwkJZ2R0aF9yZW1vdmVfb25lKGhhKTsKIH0KIAogbW9kdWxlX2luaXQoZ2R0aF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmggYi9kcml2ZXJzL3Njc2kvZ2R0aC5oCmluZGV4IDE0MzRjNmIuLmNhOTI0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmgKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguaApAQCAtODM5LDggKzgzOSw2IEBACiAgICAgc3RydWN0IHBjaV9kZXYgICAgICAqcGRldjsKICAgICB1bG9uZyAgICAgICAgICAgICAgIGRwbWVtOyAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KICAgICB1bG9uZyAgICAgICAgICAgICAgIGlvOyAgICAgICAgICAgICAgICAgICAgIC8qIElPIGFkZHJlc3MgKi8KLSAgICB1bG9uZyAgICAgICAgICAgICAgIGlvX21tOyAgICAgICAgICAgICAgICAgIC8qIElPIGFkZHJlc3MgbWVtLiBtYXBwZWQgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGlycTsgICAgICAgICAgICAgICAgICAgIC8qIElSUSAqLwogfSBnZHRoX3BjaV9zdHI7CiAKIApAQCAtOTE1LDYgKzkxMyw3IEBACiAgICAgc3RydWN0IGdkdGhfY21uZGluZm8geyAgICAgICAgICAgICAgICAgICAgICAvKiBwZXItY29tbWFuZCBwcml2YXRlIGluZm8gKi8KICAgICAgICAgaW50IGluZGV4OwogICAgICAgICBpbnQgaW50ZXJuYWxfY29tbWFuZDsgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgY2FsbCBzY3NpX2RvbmUgKi8KKyAgICAgICAgZ2R0aF9jbWRfc3RyICppbnRlcm5hbF9jbWRfc3RyOyAgICAgICAgIC8qIGNyaWVyIGZvciBpbnRlcm5hbCBtZXNzYWdlcyovCiAgICAgICAgIGRtYV9hZGRyX3Qgc2Vuc2VfcGFkZHI7ICAgICAgICAgICAgICAgICAvKiBzZW5zZSBkbWEtYWRkciAqLwogICAgICAgICB1bmNoYXIgcHJpb3JpdHk7CiAgICAgICAgIGludCB0aW1lb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCmluZGV4IGRlNTc3MzQuLmNlMDIyOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKQEAgLTY5NCwxNSArNjk0LDEzIEBACiB7CiAgICAgdWxvbmcgZmxhZ3M7CiAKLSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7Ci0KICAgICBpZiAoYnVmID09IGhhLT5wc2NyYXRjaCkgeworCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgaGEtPnNjcmF0Y2hfYnVzeSA9IEZBTFNFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoaGEtPnBkZXYsIHNpemUsIGJ1ZiwgcGFkZHIpOwogICAgIH0KLQotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogfQogCiAjaWZkZWYgR0RUSF9JT0NUTF9QUk9DCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ3ZwMTEuYyBiL2RyaXZlcnMvc2NzaS9ndnAxMS5jCmluZGV4IDkxZjg1MjIuLmNhNzM2MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ndnAxMS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ndnAxMS5jCkBAIC0zMjIsNiArMzIyLDkgQEAKIAkgKi8KIAlyZWdzLlNBU1IgPSAmKERNQShpbnN0YW5jZSktPlNBU1IpOwogCXJlZ3MuU0NNRCA9ICYoRE1BKGluc3RhbmNlKS0+U0NNRCk7CisJSERBVEEoaW5zdGFuY2UpLT5ub19zeW5jID0gMHhmZjsKKwlIREFUQShpbnN0YW5jZSktPmZhc3QgPSAwOworCUhEQVRBKGluc3RhbmNlKS0+ZG1hX21vZGUgPSBDVFJMX0RNQTsKIAl3ZDMzYzkzX2luaXQoaW5zdGFuY2UsIHJlZ3MsIGRtYV9zZXR1cCwgZG1hX3N0b3AsCiAJCSAgICAgKGVwYyAmIEdWUF9TQ1NJQ0xLTUFTSykgPyBXRDMzQzkzX0ZTXzhfMTAKIAkJCQkJICAgICA6IFdEMzNDOTNfRlNfMTJfMTUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hvc3RzLmMgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwppbmRleCA4ODBjNzhiLi5jMjY0YThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaG9zdHMuYworKysgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwpAQCAtNDMsMTQgKzQzLDE0IEBACiBzdGF0aWMgaW50IHNjc2lfaG9zdF9uZXh0X2huOwkJLyogaG9zdF9ubyBmb3IgbmV4dCBuZXcgaG9zdCAqLwogCiAKLXN0YXRpYyB2b2lkIHNjc2lfaG9zdF9jbHNfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpCitzdGF0aWMgdm9pZCBzY3NpX2hvc3RfY2xzX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXB1dF9kZXZpY2UoJmNsYXNzX3RvX3Nob3N0KGNsYXNzX2RldiktPnNob3N0X2dlbmRldik7CisJcHV0X2RldmljZSgmY2xhc3NfdG9fc2hvc3QoZGV2KS0+c2hvc3RfZ2VuZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGFzcyBzaG9zdF9jbGFzcyA9IHsKIAkubmFtZQkJPSAic2NzaV9ob3N0IiwKLQkucmVsZWFzZQk9IHNjc2lfaG9zdF9jbHNfcmVsZWFzZSwKKwkuZGV2X3JlbGVhc2UJPSBzY3NpX2hvc3RfY2xzX3JlbGVhc2UsCiB9OwogCiAvKioKQEAgLTE3NCw3ICsxNzQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJdHJhbnNwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKLQljbGFzc19kZXZpY2VfdW5yZWdpc3Rlcigmc2hvc3QtPnNob3N0X2NsYXNzZGV2KTsKKwlkZXZpY2VfdW5yZWdpc3Rlcigmc2hvc3QtPnNob3N0X2Rldik7CiAJZGV2aWNlX2RlbCgmc2hvc3QtPnNob3N0X2dlbmRldik7CiAJc2NzaV9wcm9jX2hvc3RkaXJfcm0oc2hvc3QtPmhvc3R0KTsKIH0KQEAgLTIxMiwyNCArMjEyLDMwIEBACiAJc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfUlVOTklORyk7CiAJZ2V0X2RldmljZShzaG9zdC0+c2hvc3RfZ2VuZGV2LnBhcmVudCk7CiAKLQllcnJvciA9IGNsYXNzX2RldmljZV9hZGQoJnNob3N0LT5zaG9zdF9jbGFzc2Rldik7CisJZXJyb3IgPSBkZXZpY2VfYWRkKCZzaG9zdC0+c2hvc3RfZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RlbF9nZW5kZXY7CiAKIAlnZXRfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIAotCWlmIChzaG9zdC0+dHJhbnNwb3J0dC0+aG9zdF9zaXplICYmCi0JICAgIChzaG9zdC0+c2hvc3RfZGF0YSA9IGt6YWxsb2Moc2hvc3QtPnRyYW5zcG9ydHQtPmhvc3Rfc2l6ZSwKLQkJCQkJIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotCQlnb3RvIG91dF9kZWxfY2xhc3NkZXY7CisJaWYgKHNob3N0LT50cmFuc3BvcnR0LT5ob3N0X3NpemUpIHsKKwkJc2hvc3QtPnNob3N0X2RhdGEgPSBremFsbG9jKHNob3N0LT50cmFuc3BvcnR0LT5ob3N0X3NpemUsCisJCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKHNob3N0LT5zaG9zdF9kYXRhID09IE5VTEwpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2RlbF9kZXY7CisJCX0KKwl9CiAKIAlpZiAoc2hvc3QtPnRyYW5zcG9ydHQtPmNyZWF0ZV93b3JrX3F1ZXVlKSB7CiAJCXNucHJpbnRmKHNob3N0LT53b3JrX3FfbmFtZSwgS09CSl9OQU1FX0xFTiwgInNjc2lfd3FfJWQiLAogCQkJc2hvc3QtPmhvc3Rfbm8pOwogCQlzaG9zdC0+d29ya19xID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCiAJCQkJCXNob3N0LT53b3JrX3FfbmFtZSk7Ci0JCWlmICghc2hvc3QtPndvcmtfcSkKKwkJaWYgKCFzaG9zdC0+d29ya19xKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlX3Nob3N0X2RhdGE7CisJCX0KIAl9CiAKIAllcnJvciA9IHNjc2lfc3lzZnNfYWRkX2hvc3Qoc2hvc3QpOwpAQCAtMjQ0LDggKzI1MCw4IEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHNob3N0LT53b3JrX3EpOwogIG91dF9mcmVlX3Nob3N0X2RhdGE6CiAJa2ZyZWUoc2hvc3QtPnNob3N0X2RhdGEpOwotIG91dF9kZWxfY2xhc3NkZXY6Ci0JY2xhc3NfZGV2aWNlX2RlbCgmc2hvc3QtPnNob3N0X2NsYXNzZGV2KTsKKyBvdXRfZGVsX2RldjoKKwlkZXZpY2VfZGVsKCZzaG9zdC0+c2hvc3RfZGV2KTsKICBvdXRfZGVsX2dlbmRldjoKIAlkZXZpY2VfZGVsKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKICBvdXQ6CkBAIC0zNDEsNyArMzQ3LDYgQEAKIAlzaG9zdC0+dW5jaGVja2VkX2lzYV9kbWEgPSBzaHQtPnVuY2hlY2tlZF9pc2FfZG1hOwogCXNob3N0LT51c2VfY2x1c3RlcmluZyA9IHNodC0+dXNlX2NsdXN0ZXJpbmc7CiAJc2hvc3QtPm9yZGVyZWRfdGFnID0gc2h0LT5vcmRlcmVkX3RhZzsKLQlzaG9zdC0+YWN0aXZlX21vZGUgPSBzaHQtPnN1cHBvcnRlZF9tb2RlOwogCiAJaWYgKHNodC0+c3VwcG9ydGVkX21vZGUgPT0gTU9ERV9VTktOT1dOKQogCQkvKiBtZWFucyB3ZSBkaWRuJ3Qgc2V0IGl0IC4uLiBkZWZhdWx0IHRvIElOSVRJQVRPUiAqLwpAQCAtMzgwLDExICszODUsMTEgQEAKIAkJc2hvc3QtPmhvc3Rfbm8pOwogCXNob3N0LT5zaG9zdF9nZW5kZXYucmVsZWFzZSA9IHNjc2lfaG9zdF9kZXZfcmVsZWFzZTsKIAotCWNsYXNzX2RldmljZV9pbml0aWFsaXplKCZzaG9zdC0+c2hvc3RfY2xhc3NkZXYpOwotCXNob3N0LT5zaG9zdF9jbGFzc2Rldi5kZXYgPSAmc2hvc3QtPnNob3N0X2dlbmRldjsKLQlzaG9zdC0+c2hvc3RfY2xhc3NkZXYuY2xhc3MgPSAmc2hvc3RfY2xhc3M7Ci0Jc25wcmludGYoc2hvc3QtPnNob3N0X2NsYXNzZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwgImhvc3QlZCIsCi0JCSAgc2hvc3QtPmhvc3Rfbm8pOworCWRldmljZV9pbml0aWFsaXplKCZzaG9zdC0+c2hvc3RfZGV2KTsKKwlzaG9zdC0+c2hvc3RfZGV2LnBhcmVudCA9ICZzaG9zdC0+c2hvc3RfZ2VuZGV2OworCXNob3N0LT5zaG9zdF9kZXYuY2xhc3MgPSAmc2hvc3RfY2xhc3M7CisJc25wcmludGYoc2hvc3QtPnNob3N0X2Rldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiaG9zdCVkIiwKKwkJIHNob3N0LT5ob3N0X25vKTsKIAogCXNob3N0LT5laGFuZGxlciA9IGt0aHJlYWRfcnVuKHNjc2lfZXJyb3JfaGFuZGxlciwgc2hvc3QsCiAJCQkic2NzaV9laF8lZCIsIHNob3N0LT5ob3N0X25vKTsKQEAgLTQyNywxMiArNDMyLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfdW5yZWdpc3Rlcik7CiAKLXN0YXRpYyBpbnQgX19zY3NpX2hvc3RfbWF0Y2goc3RydWN0IGNsYXNzX2RldmljZSAqY2Rldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgX19zY3NpX2hvc3RfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnA7CiAJdW5zaWduZWQgc2hvcnQgKmhvc3RudW0gPSAodW5zaWduZWQgc2hvcnQgKilkYXRhOwogCi0JcCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXAgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXJldHVybiBwLT5ob3N0X25vID09ICpob3N0bnVtOwogfQogCkBAIC00NDUsMTAgKzQ1MCwxMCBAQAogICoqLwogc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0X2xvb2t1cCh1bnNpZ25lZCBzaG9ydCBob3N0bnVtKQogewotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXY7CisJc3RydWN0IGRldmljZSAqY2RldjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IEVSUl9QVFIoLUVOWElPKTsKIAotCWNkZXYgPSBjbGFzc19maW5kX2NoaWxkKCZzaG9zdF9jbGFzcywgJmhvc3RudW0sIF9fc2NzaV9ob3N0X21hdGNoKTsKKwljZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJnNob3N0X2NsYXNzLCAmaG9zdG51bSwgX19zY3NpX2hvc3RfbWF0Y2gpOwogCWlmIChjZGV2KQogCQlzaG9zdCA9IHNjc2lfaG9zdF9nZXQoY2xhc3NfdG9fc2hvc3QoY2RldikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKaW5kZXggZmYxNDlhZC4uNWI3YmUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwpAQCAtMzM4LDcgKzMzOCw4IEBACiAJcmVxLT5oZWFkZXIuc2l6ZSA9CiAJCWNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgaHB0X2lvcF9yZXF1ZXN0X2dldF9jb25maWcpKTsKIAlyZXEtPmhlYWRlci5yZXN1bHQgPSBjcHVfdG9fbGUzMihJT1BfUkVTVUxUX1BFTkRJTkcpOwotCXJlcS0+aGVhZGVyLmNvbnRleHQgPSBjcHVfdG9fbGU2NChJT1BfUkVRVUVTVF9UWVBFX0dFVF9DT05GSUc8PDUpOworCXJlcS0+aGVhZGVyLmNvbnRleHQgPSBjcHVfdG9fbGUzMihJT1BfUkVRVUVTVF9UWVBFX0dFVF9DT05GSUc8PDUpOworCXJlcS0+aGVhZGVyLmNvbnRleHRfaGkzMiA9IDA7CiAKIAlpZiAoaW9wX3NlbmRfc3luY19yZXF1ZXN0X212KGhiYSwgMCwgMjAwMDApKSB7CiAJCWRwcmludGsoIkdldCBjb25maWcgc2VuZCBjbWQgZmFpbGVkXG4iKTsKQEAgLTM5Miw3ICszOTMsOCBAQAogCXJlcS0+aGVhZGVyLnNpemUgPQogCQljcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IGhwdF9pb3BfcmVxdWVzdF9zZXRfY29uZmlnKSk7CiAJcmVxLT5oZWFkZXIucmVzdWx0ID0gY3B1X3RvX2xlMzIoSU9QX1JFU1VMVF9QRU5ESU5HKTsKLQlyZXEtPmhlYWRlci5jb250ZXh0ID0gY3B1X3RvX2xlNjQoSU9QX1JFUVVFU1RfVFlQRV9TRVRfQ09ORklHPDw1KTsKKwlyZXEtPmhlYWRlci5jb250ZXh0ID0gY3B1X3RvX2xlMzIoSU9QX1JFUVVFU1RfVFlQRV9TRVRfQ09ORklHPDw1KTsKKwlyZXEtPmhlYWRlci5jb250ZXh0X2hpMzIgPSAwOwogCiAJaWYgKGlvcF9zZW5kX3N5bmNfcmVxdWVzdF9tdihoYmEsIDAsIDIwMDAwKSkgewogCQlkcHJpbnRrKCJTZXQgY29uZmlnIHNlbmQgY21kIGZhaWxlZFxuIik7CkBAIC04NTcsMTQgKzg1OSwxNiBAQAogCXJldHVybiBxdWV1ZV9kZXB0aDsKIH0KIAotc3RhdGljIHNzaXplX3QgaHB0aW9wX3Nob3dfdmVyc2lvbihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGhwdGlvcF9zaG93X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGRyaXZlcl92ZXIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBocHRpb3Bfc2hvd19md192ZXJzaW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaHB0aW9wX3Nob3dfZndfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhID0gKHN0cnVjdCBocHRpb3BfaGJhICopaG9zdC0+aG9zdGRhdGE7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZC4lZC4lZC4lZFxuIiwKQEAgLTg3NCw3ICs4NzgsNyBAQAogCQkJCWhiYS0+ZmlybXdhcmVfdmVyc2lvbiAmIDB4ZmYpOwogfQogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgaHB0aW9wX2F0dHJfdmVyc2lvbiA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBocHRpb3BfYXR0cl92ZXJzaW9uID0gewogCS5hdHRyID0gewogCQkubmFtZSA9ICJkcml2ZXItdmVyc2lvbiIsCiAJCS5tb2RlID0gU19JUlVHTywKQEAgLTg4Miw3ICs4ODYsNyBAQAogCS5zaG93ID0gaHB0aW9wX3Nob3dfdmVyc2lvbiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBocHRpb3BfYXR0cl9md192ZXJzaW9uID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGhwdGlvcF9hdHRyX2Z3X3ZlcnNpb24gPSB7CiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gImZpcm13YXJlLXZlcnNpb24iLAogCQkubW9kZSA9IFNfSVJVR08sCkBAIC04OTAsNyArODk0LDcgQEAKIAkuc2hvdyA9IGhwdGlvcF9zaG93X2Z3X3ZlcnNpb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmhwdGlvcF9hdHRyc1tdID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpocHRpb3BfYXR0cnNbXSA9IHsKIAkmaHB0aW9wX2F0dHJfdmVyc2lvbiwKIAkmaHB0aW9wX2F0dHJfZndfdmVyc2lvbiwKIAlOVUxMCkBAIC05MDMsNyArOTA3LDYgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgICAgPSBocHRpb3BfcmVzZXQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyICAgICAgID0gaHB0aW9wX3Jlc2V0LAogCS5pbmZvICAgICAgICAgICAgICAgICAgICAgICA9IGhwdGlvcF9pbmZvLAotCS51bmNoZWNrZWRfaXNhX2RtYSAgICAgICAgICA9IDAsCiAJLmVtdWxhdGVkICAgICAgICAgICAgICAgICAgID0gMCwKIAkudXNlX2NsdXN0ZXJpbmcgICAgICAgICAgICAgPSBFTkFCTEVfQ0xVU1RFUklORywKIAkucHJvY19uYW1lICAgICAgICAgICAgICAgICAgPSBkcml2ZXJfbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggNzhkNDZhOS4uNGE5MjJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTE0NTYsOSArMTQ1NiwxMCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBzeXNmcyBhdHRyaWJ1dGVzCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfaG9zdF9zcnBfdmVyc2lvbihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaG9zdF9zcnBfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KHNob3N0KTsKIAlpbnQgbGVuOwogCkBAIC0xNDY3LDcgKzE0NjgsNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpYm12c2NzaV9ob3N0X3NycF92ZXJzaW9uID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGlibXZzY3NpX2hvc3Rfc3JwX3ZlcnNpb24gPSB7CiAJLmF0dHIgPSB7CiAJCSAubmFtZSA9ICJzcnBfdmVyc2lvbiIsCiAJCSAubW9kZSA9IFNfSVJVR08sCkBAIC0xNDc1LDEwICsxNDc2LDExIEBACiAJLnNob3cgPSBzaG93X2hvc3Rfc3JwX3ZlcnNpb24sCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X2hvc3RfcGFydGl0aW9uX25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorc3RhdGljIHNzaXplX3Qgc2hvd19ob3N0X3BhcnRpdGlvbl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCWNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihzaG9zdCk7CiAJaW50IGxlbjsKIApAQCAtMTQ4Nyw3ICsxNDg5LDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgaWJtdnNjc2lfaG9zdF9wYXJ0aXRpb25fbmFtZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpYm12c2NzaV9ob3N0X3BhcnRpdGlvbl9uYW1lID0gewogCS5hdHRyID0gewogCQkgLm5hbWUgPSAicGFydGl0aW9uX25hbWUiLAogCQkgLm1vZGUgPSBTX0lSVUdPLApAQCAtMTQ5NSwxMCArMTQ5NywxMSBAQAogCS5zaG93ID0gc2hvd19ob3N0X3BhcnRpdGlvbl9uYW1lLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19ob3N0X3BhcnRpdGlvbl9udW1iZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorc3RhdGljIHNzaXplX3Qgc2hvd19ob3N0X3BhcnRpdGlvbl9udW1iZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihzaG9zdCk7CiAJaW50IGxlbjsKIApAQCAtMTUwNyw3ICsxNTEwLDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgaWJtdnNjc2lfaG9zdF9wYXJ0aXRpb25fbnVtYmVyID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGlibXZzY3NpX2hvc3RfcGFydGl0aW9uX251bWJlciA9IHsKIAkuYXR0ciA9IHsKIAkJIC5uYW1lID0gInBhcnRpdGlvbl9udW1iZXIiLAogCQkgLm1vZGUgPSBTX0lSVUdPLApAQCAtMTUxNSw5ICsxNTE4LDEwIEBACiAJLnNob3cgPSBzaG93X2hvc3RfcGFydGl0aW9uX251bWJlciwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaG9zdF9tYWRfdmVyc2lvbihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaG9zdF9tYWRfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KHNob3N0KTsKIAlpbnQgbGVuOwogCkBAIC0xNTI2LDcgKzE1MzAsNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpYm12c2NzaV9ob3N0X21hZF92ZXJzaW9uID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGlibXZzY3NpX2hvc3RfbWFkX3ZlcnNpb24gPSB7CiAJLmF0dHIgPSB7CiAJCSAubmFtZSA9ICJtYWRfdmVyc2lvbiIsCiAJCSAubW9kZSA9IFNfSVJVR08sCkBAIC0xNTM0LDkgKzE1MzgsMTAgQEAKIAkuc2hvdyA9IHNob3dfaG9zdF9tYWRfdmVyc2lvbiwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaG9zdF9vc190eXBlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19ob3N0X29zX3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGlibXZzY3NpX2hvc3RfZGF0YSAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KHNob3N0KTsKIAlpbnQgbGVuOwogCkBAIC0xNTQ0LDcgKzE1NDksNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpYm12c2NzaV9ob3N0X29zX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaWJtdnNjc2lfaG9zdF9vc190eXBlID0gewogCS5hdHRyID0gewogCQkgLm5hbWUgPSAib3NfdHlwZSIsCiAJCSAubW9kZSA9IFNfSVJVR08sCkBAIC0xNTUyLDkgKzE1NTcsMTAgQEAKIAkuc2hvdyA9IHNob3dfaG9zdF9vc190eXBlLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19ob3N0X2NvbmZpZyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfaG9zdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgaWJtdnNjc2lfaG9zdF9kYXRhICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoc2hvc3QpOwogCiAJLyogcmV0dXJucyBudWxsLXRlcm1pbmF0ZWQgaG9zdCBjb25maWcgZGF0YSAqLwpAQCAtMTU2NCw3ICsxNTcwLDcgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpYm12c2NzaV9ob3N0X2NvbmZpZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpYm12c2NzaV9ob3N0X2NvbmZpZyA9IHsKIAkuYXR0ciA9IHsKIAkJIC5uYW1lID0gImNvbmZpZyIsCiAJCSAubW9kZSA9IFNfSVJVR08sCkBAIC0xNTcyLDcgKzE1NzgsNyBAQAogCS5zaG93ID0gc2hvd19ob3N0X2NvbmZpZywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaWJtdnNjc2lfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqaWJtdnNjc2lfYXR0cnNbXSA9IHsKIAkmaWJtdnNjc2lfaG9zdF9zcnBfdmVyc2lvbiwKIAkmaWJtdnNjc2lfaG9zdF9wYXJ0aXRpb25fbmFtZSwKIAkmaWJtdnNjc2lfaG9zdF9wYXJ0aXRpb25fbnVtYmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzdGd0LmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYwppbmRleCBiZDYyMTMxLi4zYjk1MTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJaW50IGVyciA9IDA7CiAKIAlkcHJpbnRrKCIlcCAlcCAleCAldVxuIiwgaXVlLCB0YXJnZXQsIHZpb19pdShpdWUpLT5zcnAuY21kLmNkYlswXSwKLQkJY21kLT51c2dfc2cpOworCQlzY3NpX3NnX2NvdW50KHNjKSk7CiAKIAlpZiAoc2NzaV9zZ19jb3VudChzYykpCiAJCWVyciA9IHNycF90cmFuc2Zlcl9kYXRhKHNjLCAmdmlvX2l1KGl1ZSktPnNycC5jbWQsIGlibXZzdGd0X3JkbWEsIDEsIDEpOwpAQCAtNzgwLDMyICs3ODAsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3lzdGVtX2lkX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc3lzdGVtX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgc3lzdGVtX2lkKTsKIH0KIAotc3RhdGljIHNzaXplX3QgcGFydGl0aW9uX251bWJlcl9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHBhcnRpdGlvbl9udW1iZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV4XG4iLCBwYXJ0aXRpb25fbnVtYmVyKTsKIH0KIAotc3RhdGljIHNzaXplX3QgdW5pdF9hZGRyZXNzX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdW5pdF9hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3Qgc3JwX3RhcmdldCAqdGFyZ2V0ID0gaG9zdF90b19zcnBfdGFyZ2V0KHNob3N0KTsKIAlzdHJ1Y3QgdmlvX3BvcnQgKnZwb3J0ID0gdGFyZ2V0X3RvX3BvcnQodGFyZ2V0KTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIleFxuIiwgdnBvcnQtPmRtYV9kZXYtPnVuaXRfYWRkcmVzcyk7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzeXN0ZW1faWQsIFNfSVJVR08sIHN5c3RlbV9pZF9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihwYXJ0aXRpb25fbnVtYmVyLCBTX0lSVUdPLCBwYXJ0aXRpb25fbnVtYmVyX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHVuaXRfYWRkcmVzcywgU19JUlVHTywgdW5pdF9hZGRyZXNzX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN5c3RlbV9pZCwgU19JUlVHTywgc3lzdGVtX2lkX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbl9udW1iZXIsIFNfSVJVR08sIHBhcnRpdGlvbl9udW1iZXJfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodW5pdF9hZGRyZXNzLCBTX0lSVUdPLCB1bml0X2FkZHJlc3Nfc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaWJtdnN0Z3RfYXR0cnNbXSA9IHsKLQkmY2xhc3NfZGV2aWNlX2F0dHJfc3lzdGVtX2lkLAotCSZjbGFzc19kZXZpY2VfYXR0cl9wYXJ0aXRpb25fbnVtYmVyLAotCSZjbGFzc19kZXZpY2VfYXR0cl91bml0X2FkZHJlc3MsCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmlibXZzdGd0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3N5c3RlbV9pZCwKKwkmZGV2X2F0dHJfcGFydGl0aW9uX251bWJlciwKKwkmZGV2X2F0dHJfdW5pdF9hZGRyZXNzLAogCU5VTEwsCiB9OwogCkBAIC04MzgsOSArODQxLDYgQEAKIAlpZiAoIXNob3N0KQogCQlnb3RvIGZyZWVfdnBvcnQ7CiAJc2hvc3QtPnRyYW5zcG9ydHQgPSBpYm12c3RndF90cmFuc3BvcnRfdGVtcGxhdGU7Ci0JZXJyID0gc2NzaV90Z3RfYWxsb2NfcXVldWUoc2hvc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gcHV0X2hvc3Q7CiAKIAl0YXJnZXQgPSBob3N0X3RvX3NycF90YXJnZXQoc2hvc3QpOwogCXRhcmdldC0+c2hvc3QgPSBzaG9zdDsKQEAgLTg3Miw2ICs4NzIsMTAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGRlc3Ryb3lfcXVldWU7CiAKKwllcnIgPSBzY3NpX3RndF9hbGxvY19xdWV1ZShzaG9zdCk7CisJaWYgKGVycikKKwkJZ290byBkZXN0cm95X3F1ZXVlOworCiAJcmV0dXJuIDA7CiBkZXN0cm95X3F1ZXVlOgogCWNycV9xdWV1ZV9kZXN0cm95KHRhcmdldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCmluZGV4IDY4ZTVjNjMyLi45M2MzZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtNjAsMzEgKzYwLDYgQEAKIAogI2RlZmluZSBJREVTQ1NJX0RFQlVHX0xPRwkJMAogCi10eXBlZGVmIHN0cnVjdCBpZGVzY3NpX3BjX3MgewotCXU4IGNbMTJdOwkJCQkvKiBBY3R1YWwgcGFja2V0IGJ5dGVzICovCi0JaW50IHJlcXVlc3RfdHJhbnNmZXI7CQkJLyogQnl0ZXMgdG8gdHJhbnNmZXIgKi8KLQlpbnQgYWN0dWFsbHlfdHJhbnNmZXJyZWQ7CQkvKiBCeXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLwotCWludCBidWZmZXJfc2l6ZTsJCQkvKiBTaXplIG9mIG91ciBkYXRhIGJ1ZmZlciAqLwotCXN0cnVjdCByZXF1ZXN0ICpycTsJCQkvKiBUaGUgY29ycmVzcG9uZGluZyByZXF1ZXN0ICovCi0JdTggKmJ1ZmZlcjsJCQkJLyogRGF0YSBidWZmZXIgKi8KLQl1OCAqY3VycmVudF9wb3NpdGlvbjsJCQkvKiBQb2ludGVyIGludG8gdGhlIGFib3ZlIGJ1ZmZlciAqLwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CQkJLyogU2NhdHRlciBnYXRoZXIgdGFibGUgKi8KLQl1bnNpZ25lZCBpbnQgc2dfY250OwkJCS8qIE51bWJlciBvZiBlbnRyaWVzIGluIHNnICovCi0JaW50IGJfY291bnQ7CQkJCS8qIEJ5dGVzIHRyYW5zZmVycmVkIGZyb20gY3VycmVudCBlbnRyeSAqLwotCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kOwkJLyogU0NTSSBjb21tYW5kICovCi0Jdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKik7CS8qIFNjc2kgY29tcGxldGlvbiByb3V0aW5lICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkvKiBTdGF0dXMvQWN0aW9uIGZsYWdzICovCi0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwkJCS8qIENvbW1hbmQgdGltZW91dCAqLwotfSBpZGVzY3NpX3BjX3Q7Ci0KLS8qCi0gKglQYWNrZXQgY29tbWFuZCBzdGF0dXMgYml0cy4KLSAqLwotI2RlZmluZSBQQ19ETUFfSU5fUFJPR1JFU1MJCTAJLyogMSB3aGlsZSBETUEgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgUENfV1JJVElORwkJCTEJLyogRGF0YSBkaXJlY3Rpb24gKi8KLSNkZWZpbmUgUENfVElNRURPVVQJCQkzCS8qIGNvbW1hbmQgdGltZWQgb3V0ICovCi0jZGVmaW5lIFBDX0RNQV9PSwkJCTQJLyogVXNlIERNQSAqLwotCiAvKgogICoJU0NTSSBjb21tYW5kIHRyYW5zZm9ybWF0aW9uIGxheWVyCiAgKi8KQEAgLTEwMSwxNCArNzYsMTUgQEAKIAlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7CiAJc3RydWN0IFNjc2lfSG9zdAkqaG9zdDsKIAotCWlkZXNjc2lfcGNfdCAqcGM7CQkJLyogQ3VycmVudCBwYWNrZXQgY29tbWFuZCAqLworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwkJLyogQ3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJLyogU3RhdHVzL0FjdGlvbiBmbGFncyAqLwogCXVuc2lnbmVkIGxvbmcgdHJhbnNmb3JtOwkJLyogU0NTSSBjbWQgdHJhbnNsYXRpb24gbGF5ZXIgKi8KIAl1bnNpZ25lZCBsb25nIGxvZzsJCQkvKiBsb2cgZmxhZ3MgKi8KIH0gaWRlc2NzaV9zY3NpX3Q7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoaWRlc2NzaV9yZWZfbXV0ZXgpOwotc3RhdGljIGludCBpZGVzY3NpX25vY2Q7CQkJLyogU2V0IGJ5IG1vZHVsZSBwYXJhbSB0byBza2lwIGNkICovCisvKiBTZXQgYnkgbW9kdWxlIHBhcmFtIHRvIHNraXAgY2QgKi8KK3N0YXRpYyBpbnQgaWRlc2NzaV9ub2NkOwogCiAjZGVmaW5lIGlkZV9zY3NpX2coZGlzaykgXAogCWNvbnRhaW5lcl9vZigoZGlzayktPnByaXZhdGVfZGF0YSwgc3RydWN0IGlkZV9zY3NpX29iaiwgZHJpdmVyKQpAQCAtMTUyLDIyICsxMjgsMTEgQEAKICAqLwogI2RlZmluZSBJREVTQ1NJX1BDX1JRCQkJOTAKIAotc3RhdGljIHZvaWQgaWRlc2NzaV9kaXNjYXJkX2RhdGEgKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IGJjb3VudCkKLXsKLQl3aGlsZSAoYmNvdW50LS0pCi0JCSh2b2lkKSBIV0lGKGRyaXZlKS0+SU5CKElERV9EQVRBX1JFRyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZXNjc2lfb3V0cHV0X3plcm9zIChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGludCBiY291bnQpCi17Ci0Jd2hpbGUgKGJjb3VudC0tKQotCQlIV0lGKGRyaXZlKS0+T1VUQigwLCBJREVfREFUQV9SRUcpOwotfQotCiAvKgogICoJUElPIGRhdGEgdHJhbnNmZXIgcm91dGluZXMgdXNpbmcgdGhlIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlLgogICovCi1zdGF0aWMgdm9pZCBpZGVzY3NpX2lucHV0X2J1ZmZlcnMgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlc2NzaV9wY190ICpwYywgdW5zaWduZWQgaW50IGJjb3VudCkKK3N0YXRpYyB2b2lkIGlkZXNjc2lfaW5wdXRfYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAorCQl1bnNpZ25lZCBpbnQgYmNvdW50KQogewogCWludCBjb3VudDsKIAljaGFyICpidWY7CkBAIC0yMDAsMTEgKzE2NSwxMiBAQAogCiAJaWYgKGJjb3VudCkgewogCQlwcmludGsgKEtFUk5fRVJSICJpZGUtc2NzaTogc2NhdHRlciBnYXRoZXIgdGFibGUgdG9vIHNtYWxsLCBkaXNjYXJkaW5nIGRhdGFcbiIpOwotCQlpZGVzY3NpX2Rpc2NhcmRfZGF0YSAoZHJpdmUsIGJjb3VudCk7CisJCWlkZV9hdGFwaV9kaXNjYXJkX2RhdGEoZHJpdmUsIGJjb3VudCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpZGVzY3NpX291dHB1dF9idWZmZXJzIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXNjc2lfcGNfdCAqcGMsIHVuc2lnbmVkIGludCBiY291bnQpCitzdGF0aWMgdm9pZCBpZGVzY3NpX291dHB1dF9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCisJCXVuc2lnbmVkIGludCBiY291bnQpCiB7CiAJaW50IGNvdW50OwogCWNoYXIgKmJ1ZjsKQEAgLTIzNyw3ICsyMDMsNyBAQAogCiAJaWYgKGJjb3VudCkgewogCQlwcmludGsgKEtFUk5fRVJSICJpZGUtc2NzaTogc2NhdHRlciBnYXRoZXIgdGFibGUgdG9vIHNtYWxsLCBwYWRkaW5nIHdpdGggemVyb3NcbiIpOwotCQlpZGVzY3NpX291dHB1dF96ZXJvcyAoZHJpdmUsIGJjb3VudCk7CisJCWlkZV9hdGFwaV93cml0ZV96ZXJvcyhkcml2ZSwgYmNvdW50KTsKIAl9CiB9CiAKQEAgLTI0NiwxNSArMjEyLDE2IEBACiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9DT05ULCAiIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsIGRhdGEsIGxlbiwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgaWRlc2NzaV9jaGVja19jb25kaXRpb24oaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqZmFpbGVkX2NvbW1hbmQpCitzdGF0aWMgaW50IGlkZXNjc2lfY2hlY2tfY29uZGl0aW9uKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJc3RydWN0IHJlcXVlc3QgKmZhaWxlZF9jbWQpCiB7CiAJaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKLQlpZGVzY3NpX3BjX3QgICAqcGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAgICpwYzsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJdTggICAgICAgICAgICAgKmJ1ZjsKIAogCS8qIHN0dWZmIGEgc2Vuc2UgcmVxdWVzdCBpbiBmcm9udCBvZiBvdXIgY3VycmVudCByZXF1ZXN0ICovCi0JcGMgPSBremFsbG9jKHNpemVvZihpZGVzY3NpX3BjX3QpLCBHRlBfQVRPTUlDKTsKKwlwYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZGVfYXRhcGlfcGMpLCBHRlBfQVRPTUlDKTsKIAlycSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CiAJYnVmID0ga3phbGxvYyhTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIEdGUF9BVE9NSUMpOwogCWlmICghcGMgfHwgIXJxIHx8ICFidWYpIHsKQEAgLTI2NiwxNCArMjMzLDE0IEBACiAJaWRlX2luaXRfZHJpdmVfY21kKHJxKTsKIAlycS0+c3BlY2lhbCA9IChjaGFyICopIHBjOwogCXBjLT5ycSA9IHJxOwotCXBjLT5idWZmZXIgPSBidWY7CisJcGMtPmJ1ZiA9IGJ1ZjsKIAlwYy0+Y1swXSA9IFJFUVVFU1RfU0VOU0U7Ci0JcGMtPmNbNF0gPSBwYy0+cmVxdWVzdF90cmFuc2ZlciA9IHBjLT5idWZmZXJfc2l6ZSA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKKwlwYy0+Y1s0XSA9IHBjLT5yZXFfeGZlciA9IHBjLT5idWZfc2l6ZSA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TRU5TRTsKIAlwYy0+dGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1JFQURZOwogCS8qIE5PVEUhIFNhdmUgdGhlIGZhaWxlZCBwYWNrZXQgY29tbWFuZCBpbiAicnEtPmJ1ZmZlciIgKi8KLQlycS0+YnVmZmVyID0gKHZvaWQgKikgZmFpbGVkX2NvbW1hbmQtPnNwZWNpYWw7Ci0JcGMtPnNjc2lfY21kID0gKChpZGVzY3NpX3BjX3QgKikgZmFpbGVkX2NvbW1hbmQtPnNwZWNpYWwpLT5zY3NpX2NtZDsKKwlycS0+YnVmZmVyID0gKHZvaWQgKikgZmFpbGVkX2NtZC0+c3BlY2lhbDsKKwlwYy0+c2NzaV9jbWQgPSAoKHN0cnVjdCBpZGVfYXRhcGlfcGMgKikgZmFpbGVkX2NtZC0+c3BlY2lhbCktPnNjc2lfY21kOwogCWlmICh0ZXN0X2JpdChJREVTQ1NJX0xPR19DTUQsICZzY3NpLT5sb2cpKSB7CiAJCXByaW50ayAoImlkZS1zY3NpOiAlczogcXVldWUgY21kID0gIiwgZHJpdmUtPm5hbWUpOwogCQlpZGVfc2NzaV9oZXhfZHVtcChwYy0+YywgNik7CkBAIC0yODcsOSArMjU0LDEyIEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90CiBpZGVzY3NpX2F0YXBpX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0LCB1OCBlcnIpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCiAJaWYgKGlkZV9yZWFkX3N0YXR1cyhkcml2ZSkgJiAoQlVTWV9TVEFUIHwgRFJRX1NUQVQpKQogCQkvKiBmb3JjZSBhbiBhYm9ydCAqLwotCQlIV0lGKGRyaXZlKS0+T1VUQihXSU5fSURMRUlNTUVESUFURSxJREVfQ09NTUFORF9SRUcpOworCQlod2lmLT5PVVRCKFdJTl9JRExFSU1NRURJQVRFLAorCQkJICAgaHdpZi0+aW9fcG9ydHNbSURFX0NPTU1BTkRfT0ZGU0VUXSk7CiAKIAlycS0+ZXJyb3JzKys7CiAKQEAgLTMwMyw3ICsyNzMsNyBAQAogewogI2lmIElERVNDU0lfREVCVUdfTE9HCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRlc2NzaV9hdGFwaV9hYm9ydCBjYWxsZWQgZm9yICVsdVxuIiwKLQkJCSgoaWRlc2NzaV9wY190ICopIHJxLT5zcGVjaWFsKS0+c2NzaV9jbWQtPnNlcmlhbF9udW1iZXIpOworCQkoKHN0cnVjdCBpZGVfYXRhcGlfcGMgKikgcnEtPnNwZWNpYWwpLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlcik7CiAjZW5kaWYKIAlycS0+ZXJyb3JzIHw9IEVSUk9SX01BWDsKIApAQCAtMzE2LDcgKzI4Niw3IEBACiB7CiAJaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7Ci0JaWRlc2NzaV9wY190ICpwYyA9IChpZGVzY3NpX3BjX3QgKikgcnEtPnNwZWNpYWw7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSAoc3RydWN0IGlkZV9hdGFwaV9wYyAqKSBycS0+c3BlY2lhbDsKIAlpbnQgbG9nID0gdGVzdF9iaXQoSURFU0NTSV9MT0dfQ01ELCAmc2NzaS0+bG9nKTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCWludCBlcnJvcnMgPSBycS0+ZXJyb3JzOwpAQCAtMzI4LDIwICsyOTgsMjMgQEAKIAl9CiAJaWRlX2VuZF9kcml2ZV9jbWQgKGRyaXZlLCAwLCAwKTsKIAlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpKSB7Ci0JCWlkZXNjc2lfcGNfdCAqb3BjID0gKGlkZXNjc2lfcGNfdCAqKSBycS0+YnVmZmVyOworCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpvcGMgPSAoc3RydWN0IGlkZV9hdGFwaV9wYyAqKSBycS0+YnVmZmVyOwogCQlpZiAobG9nKSB7CiAJCQlwcmludGsgKCJpZGUtc2NzaTogJXM6IHdyYXAgdXAgY2hlY2sgJWx1LCByc3QgPSAiLCBkcml2ZS0+bmFtZSwgb3BjLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlcik7Ci0JCQlpZGVfc2NzaV9oZXhfZHVtcChwYy0+YnVmZmVyLCAxNik7CisJCQlpZGVfc2NzaV9oZXhfZHVtcChwYy0+YnVmLCAxNik7CiAJCX0KLQkJbWVtY3B5KCh2b2lkICopIG9wYy0+c2NzaV9jbWQtPnNlbnNlX2J1ZmZlciwgcGMtPmJ1ZmZlciwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQkJa2ZyZWUocGMtPmJ1ZmZlcik7CisJCW1lbWNweSgodm9pZCAqKSBvcGMtPnNjc2lfY21kLT5zZW5zZV9idWZmZXIsIHBjLT5idWYsCisJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCQlrZnJlZShwYy0+YnVmKTsKIAkJa2ZyZWUocGMpOwogCQlrZnJlZShycSk7CiAJCXBjID0gb3BjOwogCQlycSA9IHBjLT5ycTsKIAkJcGMtPnNjc2lfY21kLT5yZXN1bHQgPSAoQ0hFQ0tfQ09ORElUSU9OIDw8IDEpIHwKLQkJCQkJKCh0ZXN0X2JpdChQQ19USU1FRE9VVCwgJnBjLT5mbGFncyk/RElEX1RJTUVfT1VUOkRJRF9PSykgPDwgMTYpOwotCX0gZWxzZSBpZiAodGVzdF9iaXQoUENfVElNRURPVVQsICZwYy0+ZmxhZ3MpKSB7CisJCQkJKCgocGMtPmZsYWdzICYgUENfRkxBR19USU1FRE9VVCkgPworCQkJCSAgRElEX1RJTUVfT1VUIDoKKwkJCQkgIERJRF9PSykgPDwgMTYpOworCX0gZWxzZSBpZiAocGMtPmZsYWdzICYgUENfRkxBR19USU1FRE9VVCkgewogCQlpZiAobG9nKQogCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgImlkZS1zY3NpOiAlczogdGltZWQgb3V0IGZvciAlbHVcbiIsCiAJCQkJCWRyaXZlLT5uYW1lLCBwYy0+c2NzaV9jbWQtPnNlcmlhbF9udW1iZXIpOwpAQCAtMzcwLDcgKzM0Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdGltZW91dChpZGVzY3NpX3BjX3QgKnBjKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF90aW1lb3V0KHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCXJldHVybiBtYXhfdCh1bnNpZ25lZCBsb25nLCBXQUlUX0NNRCwgcGMtPnRpbWVvdXQgLSBqaWZmaWVzKTsKIH0KQEAgLTM3OCwxMiArMzUxLDEyIEBACiBzdGF0aWMgaW50IGlkZXNjc2lfZXhwaXJ5KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVzY3NpX3Njc2lfdCAqc2NzaSA9IGRyaXZlX3RvX2lkZXNjc2koZHJpdmUpOwotCWlkZXNjc2lfcGNfdCAgICpwYyAgID0gc2NzaS0+cGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAgICpwYyAgID0gc2NzaS0+cGM7CiAKICNpZiBJREVTQ1NJX0RFQlVHX0xPRwogCXByaW50ayhLRVJOX1dBUk5JTkcgImlkZXNjc2lfZXhwaXJ5IGNhbGxlZCBmb3IgJWx1IGF0ICVsdVxuIiwgcGMtPnNjc2lfY21kLT5zZXJpYWxfbnVtYmVyLCBqaWZmaWVzKTsKICNlbmRpZgotCXNldF9iaXQoUENfVElNRURPVVQsICZwYy0+ZmxhZ3MpOworCXBjLT5mbGFncyB8PSBQQ19GTEFHX1RJTUVET1VUOwogCiAJcmV0dXJuIDA7CQkJCQkvKiB3ZSBkbyBub3Qgd2FudCB0aGUgaWRlIHN1YnN5c3RlbSB0byByZXRyeSAqLwogfQpAQCAtMzk1LDcgKzM2OCw3IEBACiB7CiAJaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlc2NzaV9wY190ICpwYyA9IHNjc2ktPnBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gc2NzaS0+cGM7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gcGMtPnJxOwogCXVuc2lnbmVkIGludCB0ZW1wOwogCXUxNiBiY291bnQ7CkBAIC00MDUsNyArMzc4LDcgQEAKIAlwcmludGsgKEtFUk5fSU5GTyAiaWRlLXNjc2k6IFJlYWNoZWQgaWRlc2NzaV9wY19pbnRyIGludGVycnVwdCBoYW5kbGVyXG4iKTsKICNlbmRpZiAvKiBJREVTQ1NJX0RFQlVHX0xPRyAqLwogCi0JaWYgKHRlc3RfYml0KFBDX1RJTUVET1VULCAmcGMtPmZsYWdzKSl7CisJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfVElNRURPVVQpIHsKICNpZiBJREVTQ1NJX0RFQlVHX0xPRwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpZGVzY3NpX3BjX2ludHI6IGdvdCB0aW1lZCBvdXQgcGFja2V0ICAlbHUgYXQgJWx1XG4iLAogCQkJCXBjLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlciwgamlmZmllcyk7CkBAIC00MTQsMTEgKzM4NywxMiBAQAogCQlpZGVzY3NpX2VuZF9yZXF1ZXN0IChkcml2ZSwgMSwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCAoUENfRE1BX0lOX1BST0dSRVNTLCAmcGMtPmZsYWdzKSkgeworCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9JTl9QUk9HUkVTUykgeworCQlwYy0+ZmxhZ3MgJj0gflBDX0ZMQUdfRE1BX0lOX1BST0dSRVNTOwogI2lmIElERVNDU0lfREVCVUdfTE9HCiAJCXByaW50ayAoImlkZS1zY3NpOiAlczogRE1BIGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CiAjZW5kaWYgLyogSURFU0NTSV9ERUJVR19MT0cgKi8KLQkJcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkPXBjLT5yZXF1ZXN0X3RyYW5zZmVyOworCQlwYy0+eGZlcnJlZCA9IHBjLT5yZXFfeGZlcjsKIAkJKHZvaWQpIEhXSUYoZHJpdmUpLT5pZGVfZG1hX2VuZChkcml2ZSk7CiAJfQogCkBAIC00MjgsNDIgKzQwMiw0NCBAQAogCWlmICgoc3RhdCAmIERSUV9TVEFUKSA9PSAwKSB7CiAJCS8qIE5vIG1vcmUgaW50ZXJydXB0cyAqLwogCQlpZiAodGVzdF9iaXQoSURFU0NTSV9MT0dfQ01ELCAmc2NzaS0+bG9nKSkKLQkJCXByaW50ayAoS0VSTl9JTkZPICJQYWNrZXQgY29tbWFuZCBjb21wbGV0ZWQsICVkIGJ5dGVzIHRyYW5zZmVycmVkXG4iLCBwYy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiUGFja2V0IGNvbW1hbmQgY29tcGxldGVkLCAlZCBieXRlcyIKKwkJCQkJIiB0cmFuc2ZlcnJlZFxuIiwgcGMtPnhmZXJyZWQpOwogCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAkJaWYgKHN0YXQgJiBFUlJfU1RBVCkKIAkJCXJxLT5lcnJvcnMrKzsKIAkJaWRlc2NzaV9lbmRfcmVxdWVzdCAoZHJpdmUsIDEsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQotCWJjb3VudCA9IChod2lmLT5JTkIoSURFX0JDT1VOVEhfUkVHKSA8PCA4KSB8Ci0JCSAgaHdpZi0+SU5CKElERV9CQ09VTlRMX1JFRyk7Ci0JaXJlYXNvbiA9IGh3aWYtPklOQihJREVfSVJFQVNPTl9SRUcpOworCWJjb3VudCA9IChod2lmLT5JTkIoaHdpZi0+aW9fcG9ydHNbSURFX0JDT1VOVEhfT0ZGU0VUXSkgPDwgOCkgfAorCQkgIGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfQkNPVU5UTF9PRkZTRVRdKTsKKwlpcmVhc29uID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9JUkVBU09OX09GRlNFVF0pOwogCiAJaWYgKGlyZWFzb24gJiBDRCkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS1zY3NpOiBDb0QgIT0gMCBpbiBpZGVzY3NpX3BjX2ludHJcbiIpOwogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0IChkcml2ZSk7CiAJfQogCWlmIChpcmVhc29uICYgSU8pIHsKLQkJdGVtcCA9IHBjLT5hY3R1YWxseV90cmFuc2ZlcnJlZCArIGJjb3VudDsKLQkJaWYgKHRlbXAgPiBwYy0+cmVxdWVzdF90cmFuc2ZlcikgewotCQkJaWYgKHRlbXAgPiBwYy0+YnVmZmVyX3NpemUpIHsKKwkJdGVtcCA9IHBjLT54ZmVycmVkICsgYmNvdW50OworCQlpZiAodGVtcCA+IHBjLT5yZXFfeGZlcikgeworCQkJaWYgKHRlbXAgPiBwYy0+YnVmX3NpemUpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgImlkZS1zY3NpOiBUaGUgc2NzaSB3YW50cyB0byAiCiAJCQkJCSJzZW5kIHVzIG1vcmUgZGF0YSB0aGFuIGV4cGVjdGVkICIKIAkJCQkJIi0gZGlzY2FyZGluZyBkYXRhXG4iKTsKLQkJCQl0ZW1wID0gcGMtPmJ1ZmZlcl9zaXplIC0gcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkOworCQkJCXRlbXAgPSBwYy0+YnVmX3NpemUgLSBwYy0+eGZlcnJlZDsKIAkJCQlpZiAodGVtcCkgewotCQkJCQljbGVhcl9iaXQoUENfV1JJVElORywgJnBjLT5mbGFncyk7CisJCQkJCXBjLT5mbGFncyAmPSB+UENfRkxBR19XUklUSU5HOwogCQkJCQlpZiAocGMtPnNnKQotCQkJCQkJaWRlc2NzaV9pbnB1dF9idWZmZXJzKGRyaXZlLCBwYywgdGVtcCk7CisJCQkJCQlpZGVzY3NpX2lucHV0X2J1ZmZlcnMoZHJpdmUsIHBjLAorCQkJCQkJCQkJdGVtcCk7CiAJCQkJCWVsc2UKLQkJCQkJCWRyaXZlLT5od2lmLT5hdGFwaV9pbnB1dF9ieXRlcyhkcml2ZSwgcGMtPmN1cnJlbnRfcG9zaXRpb24sIHRlbXApOworCQkJCQkJZHJpdmUtPmh3aWYtPmF0YXBpX2lucHV0X2J5dGVzKGRyaXZlLCBwYy0+Y3VyX3BvcywgdGVtcCk7CiAJCQkJCXByaW50ayhLRVJOX0VSUiAiaWRlLXNjc2k6IHRyYW5zZmVycmVkIgogCQkJCQkJCSIgJWQgb2YgJWQgYnl0ZXNcbiIsCiAJCQkJCQkJdGVtcCwgYmNvdW50KTsKIAkJCQl9Ci0JCQkJcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkICs9IHRlbXA7Ci0JCQkJcGMtPmN1cnJlbnRfcG9zaXRpb24gKz0gdGVtcDsKLQkJCQlpZGVzY3NpX2Rpc2NhcmRfZGF0YShkcml2ZSwgYmNvdW50IC0gdGVtcCk7CisJCQkJcGMtPnhmZXJyZWQgKz0gdGVtcDsKKwkJCQlwYy0+Y3VyX3BvcyArPSB0ZW1wOworCQkJCWlkZV9hdGFwaV9kaXNjYXJkX2RhdGEoZHJpdmUsIGJjb3VudCAtIHRlbXApOwogCQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmlkZXNjc2lfcGNfaW50ciwgZ2V0X3RpbWVvdXQocGMpLCBpZGVzY3NpX2V4cGlyeSk7CiAJCQkJcmV0dXJuIGlkZV9zdGFydGVkOwogCQkJfQpAQCAtNDczLDIzICs0NDksMjMgQEAKIAkJfQogCX0KIAlpZiAoaXJlYXNvbiAmIElPKSB7Ci0JCWNsZWFyX2JpdChQQ19XUklUSU5HLCAmcGMtPmZsYWdzKTsKKwkJcGMtPmZsYWdzICY9IH5QQ19GTEFHX1dSSVRJTkc7CiAJCWlmIChwYy0+c2cpCiAJCQlpZGVzY3NpX2lucHV0X2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQpOwogCQllbHNlCi0JCQlod2lmLT5hdGFwaV9pbnB1dF9ieXRlcyhkcml2ZSwgcGMtPmN1cnJlbnRfcG9zaXRpb24sCisJCQlod2lmLT5hdGFwaV9pbnB1dF9ieXRlcyhkcml2ZSwgcGMtPmN1cl9wb3MsCiAJCQkJCQliY291bnQpOwogCX0gZWxzZSB7Ci0JCXNldF9iaXQoUENfV1JJVElORywgJnBjLT5mbGFncyk7CisJCXBjLT5mbGFncyB8PSBQQ19GTEFHX1dSSVRJTkc7CiAJCWlmIChwYy0+c2cpCiAJCQlpZGVzY3NpX291dHB1dF9idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50KTsKIAkJZWxzZQotCQkJaHdpZi0+YXRhcGlfb3V0cHV0X2J5dGVzKGRyaXZlLCBwYy0+Y3VycmVudF9wb3NpdGlvbiwKKwkJCWh3aWYtPmF0YXBpX291dHB1dF9ieXRlcyhkcml2ZSwgcGMtPmN1cl9wb3MsCiAJCQkJCQkgYmNvdW50KTsKIAl9CiAJLyogVXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uICovCi0JcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkICs9IGJjb3VudDsKLQlwYy0+Y3VycmVudF9wb3NpdGlvbiArPSBiY291bnQ7CisJcGMtPnhmZXJyZWQgKz0gYmNvdW50OworCXBjLT5jdXJfcG9zICs9IGJjb3VudDsKIAogCS8qIEFuZCBzZXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGFnYWluICovCiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmaWRlc2NzaV9wY19pbnRyLCBnZXRfdGltZW91dChwYyksIGlkZXNjc2lfZXhwaXJ5KTsKQEAgLTUwMCw3ICs0NzYsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpZGVzY3NpX3Njc2lfdCAqc2NzaSA9IGRyaXZlX3RvX2lkZXNjc2koZHJpdmUpOwotCWlkZXNjc2lfcGNfdCAqcGMgPSBzY3NpLT5wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IHNjc2ktPnBjOwogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAJdTggaXJlYXNvbjsKIApAQCAtNTA5LDcgKzQ4NSw3IEBACiAJCQkiaW5pdGlhdGVkIHlldCBEUlEgaXNuJ3QgYXNzZXJ0ZWRcbiIpOwogCQlyZXR1cm4gc3RhcnRzdG9wOwogCX0KLQlpcmVhc29uID0gaHdpZi0+SU5CKElERV9JUkVBU09OX1JFRyk7CisJaXJlYXNvbiA9IGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfSVJFQVNPTl9PRkZTRVRdKTsKIAlpZiAoKGlyZWFzb24gJiBDRCkgPT0gMCB8fCAoaXJlYXNvbiAmIElPKSkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS1zY3NpOiAoSU8sQ29EKSAhPSAoMCwxKSB3aGlsZSAiCiAJCQkJImlzc3VpbmcgYSBwYWNrZXQgY29tbWFuZFxuIik7CkBAIC01MjAsMzQgKzQ5NiwzNCBAQAogCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmlkZXNjc2lfcGNfaW50ciwgZ2V0X3RpbWVvdXQocGMpLCBpZGVzY3NpX2V4cGlyeSk7CiAJLyogU2VuZCB0aGUgYWN0dWFsIHBhY2tldCAqLwogCWRyaXZlLT5od2lmLT5hdGFwaV9vdXRwdXRfYnl0ZXMoZHJpdmUsIHNjc2ktPnBjLT5jLCAxMik7Ci0JaWYgKHRlc3RfYml0IChQQ19ETUFfT0ssICZwYy0+ZmxhZ3MpKSB7Ci0JCXNldF9iaXQgKFBDX0RNQV9JTl9QUk9HUkVTUywgJnBjLT5mbGFncyk7CisJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX09LKSB7CisJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9JTl9QUk9HUkVTUzsKIAkJaHdpZi0+ZG1hX3N0YXJ0KGRyaXZlKTsKIAl9CiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpZGVzY3NpX3NldF9kaXJlY3Rpb24oaWRlc2NzaV9wY190ICpwYykKK3N0YXRpYyBpbmxpbmUgaW50IGlkZXNjc2lfc2V0X2RpcmVjdGlvbihzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlzd2l0Y2ggKHBjLT5jWzBdKSB7CiAJCWNhc2UgUkVBRF82OiBjYXNlIFJFQURfMTA6IGNhc2UgUkVBRF8xMjoKLQkJCWNsZWFyX2JpdChQQ19XUklUSU5HLCAmcGMtPmZsYWdzKTsKKwkJCXBjLT5mbGFncyAmPSB+UENfRkxBR19XUklUSU5HOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgV1JJVEVfNjogY2FzZSBXUklURV8xMDogY2FzZSBXUklURV8xMjoKLQkJCXNldF9iaXQoUENfV1JJVElORywgJnBjLT5mbGFncyk7CisJCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19XUklUSU5HOwogCQkJcmV0dXJuIDA7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaWRlc2NzaV9tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVzY3NpX3BjX3QgKnBjKQorc3RhdGljIGludCBpZGVzY3NpX21hcF9zZyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCAqc2NzaV9zZzsKIAlpbnQgc2VnbWVudHM7CiAKLQlpZiAoIXBjLT5yZXF1ZXN0X3RyYW5zZmVyIHx8IHBjLT5yZXF1ZXN0X3RyYW5zZmVyICUgMTAyNCkKKwlpZiAoIXBjLT5yZXFfeGZlciB8fCBwYy0+cmVxX3hmZXIgJSAxMDI0KQogCQlyZXR1cm4gMTsKIAogCWlmIChpZGVzY3NpX3NldF9kaXJlY3Rpb24ocGMpKQpAQCAtNTY2LDIxICs1NDIsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqCUlzc3VlIGEgcGFja2V0IGNvbW1hbmQKLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVzY3NpX2lzc3VlX3BjIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXNjc2lfcGNfdCAqcGMpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXNjc2lfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlpZGVzY3NpX3Njc2lfdCAqc2NzaSA9IGRyaXZlX3RvX2lkZXNjc2koZHJpdmUpOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1MTYgYmNvdW50OwogCXU4IGRtYSA9IDA7CiAKLQlzY3NpLT5wYz1wYzsJCQkJCQkJLyogU2V0IHRoZSBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCi0JcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkPTA7CQkJCQkvKiBXZSBoYXZlbid0IHRyYW5zZmVycmVkIGFueSBkYXRhIHlldCAqLwotCXBjLT5jdXJyZW50X3Bvc2l0aW9uPXBjLT5idWZmZXI7CisJLyogU2V0IHRoZSBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCisJc2NzaS0+cGMgPSBwYzsKKwkvKiBXZSBoYXZlbid0IHRyYW5zZmVycmVkIGFueSBkYXRhIHlldCAqLworCXBjLT54ZmVycmVkID0gMDsKKwlwYy0+Y3VyX3BvcyA9IHBjLT5idWY7CiAJLyogUmVxdWVzdCB0byB0cmFuc2ZlciB0aGUgZW50aXJlIGJ1ZmZlciBhdCBvbmNlICovCi0JYmNvdW50ID0gbWluKHBjLT5yZXF1ZXN0X3RyYW5zZmVyLCA2MyAqIDEwMjQpOworCWJjb3VudCA9IG1pbihwYy0+cmVxX3hmZXIsIDYzICogMTAyNCk7CiAKIAlpZiAoZHJpdmUtPnVzaW5nX2RtYSAmJiAhaWRlc2NzaV9tYXBfc2coZHJpdmUsIHBjKSkgewogCQlod2lmLT5zZ19tYXBwZWQgPSAxOwpAQCAtNTkxLDcgKzU2Nyw3IEBACiAJaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCBJREVfVEZMQUdfTk9fU0VMRUNUX01BU0ssIGJjb3VudCwgZG1hKTsKIAogCWlmIChkbWEpCi0JCXNldF9iaXQoUENfRE1BX09LLCAmcGMtPmZsYWdzKTsKKwkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfRE1BX09LOwogCiAJaWYgKHRlc3RfYml0KElERVNDU0lfRFJRX0lOVEVSUlVQVCwgJnNjc2ktPmZsYWdzKSkgewogCQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBXSU5fUEFDS0VUQ01ELCAmaWRlc2NzaV90cmFuc2Zlcl9wYywKQEAgLTU5OSw3ICs1NzUsNyBAQAogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJfSBlbHNlIHsKIAkJLyogSXNzdWUgdGhlIHBhY2tldCBjb21tYW5kICovCi0JCUhXSUYoZHJpdmUpLT5PVVRCKFdJTl9QQUNLRVRDTUQsIElERV9DT01NQU5EX1JFRyk7CisJCWh3aWYtPk9VVEIoV0lOX1BBQ0tFVENNRCwgaHdpZi0+aW9fcG9ydHNbSURFX0NPTU1BTkRfT0ZGU0VUXSk7CiAJCXJldHVybiBpZGVzY3NpX3RyYW5zZmVyX3BjKGRyaXZlKTsKIAl9CiB9CkBAIC02MTUsNyArNTkxLDggQEAKICNlbmRpZiAvKiBJREVTQ1NJX0RFQlVHX0xPRyAqLwogCiAJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSB8fCBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewotCQlyZXR1cm4gaWRlc2NzaV9pc3N1ZV9wYyAoZHJpdmUsIChpZGVzY3NpX3BjX3QgKikgcnEtPnNwZWNpYWwpOworCQlyZXR1cm4gaWRlc2NzaV9pc3N1ZV9wYyhkcml2ZSwKKwkJCQkoc3RydWN0IGlkZV9hdGFwaV9wYyAqKSBycS0+c3BlY2lhbCk7CiAJfQogCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiaWRlLXNjc2k6IHVuc3VwIGNvbW1hbmQiKTsKIAlpZGVzY3NpX2VuZF9yZXF1ZXN0IChkcml2ZSwgMCwgMCk7CkBAIC03NzMsMTUgKzc1MCwxNSBAQAogCWlkZXNjc2lfc2NzaV90ICpzY3NpID0gc2NzaWhvc3RfdG9faWRlc2NzaShob3N0KTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBzY3NpLT5kcml2ZTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBOVUxMOwotCWlkZXNjc2lfcGNfdCAqcGMgPSBOVUxMOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gTlVMTDsKIAogCWlmICghZHJpdmUpIHsKIAkJc2NtZF9wcmludGsgKEtFUk5fRVJSLCBjbWQsICJkcml2ZSBub3QgcHJlc2VudFxuIik7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCXNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKLQlwYyA9IGttYWxsb2MgKHNpemVvZiAoaWRlc2NzaV9wY190KSwgR0ZQX0FUT01JQyk7Ci0JcnEgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCByZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CisJcGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWRlX2F0YXBpX3BjKSwgR0ZQX0FUT01JQyk7CisJcnEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVxdWVzdCksIEdGUF9BVE9NSUMpOwogCWlmIChycSA9PSBOVUxMIHx8IHBjID09IE5VTEwpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiAiaWRlLXNjc2k6ICVzOiBvdXQgb2YgbWVtb3J5XG4iLCBkcml2ZS0+bmFtZSk7CiAJCWdvdG8gYWJvcnQ7CkBAIC03OTEsMTEgKzc2OCwxMSBAQAogCXBjLT5mbGFncyA9IDA7CiAJcGMtPnJxID0gcnE7CiAJbWVtY3B5IChwYy0+YywgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwotCXBjLT5idWZmZXIgPSBOVUxMOworCXBjLT5idWYgPSBOVUxMOwogCXBjLT5zZyA9IHNjc2lfc2dsaXN0KGNtZCk7CiAJcGMtPnNnX2NudCA9IHNjc2lfc2dfY291bnQoY21kKTsKIAlwYy0+Yl9jb3VudCA9IDA7Ci0JcGMtPnJlcXVlc3RfdHJhbnNmZXIgPSBwYy0+YnVmZmVyX3NpemUgPSBzY3NpX2J1ZmZsZW4oY21kKTsKKwlwYy0+cmVxX3hmZXIgPSBwYy0+YnVmX3NpemUgPSBzY3NpX2J1ZmZsZW4oY21kKTsKIAlwYy0+c2NzaV9jbWQgPSBjbWQ7CiAJcGMtPmRvbmUgPSBkb25lOwogCXBjLT50aW1lb3V0ID0gamlmZmllcyArIGNtZC0+dGltZW91dF9wZXJfY29tbWFuZDsKQEAgLTg2Niw3ICs4NDMsNyBAQAogCQlwcmludGsgKEtFUk5fRVJSICJpZGUtc2NzaTogY21kIGFib3J0ZWQhXG4iKTsKIAogCQlpZiAoYmxrX3NlbnNlX3JlcXVlc3Qoc2NzaS0+cGMtPnJxKSkKLQkJCWtmcmVlKHNjc2ktPnBjLT5idWZmZXIpOworCQkJa2ZyZWUoc2NzaS0+cGMtPmJ1Zik7CiAJCWtmcmVlKHNjc2ktPnBjLT5ycSk7CiAJCWtmcmVlKHNjc2ktPnBjKTsKIAkJc2NzaS0+cGMgPSBOVUxMOwpAQCAtOTE2LDcgKzg5Myw3IEBACiAJaWYgKF9fYmxrX2VuZF9yZXF1ZXN0KHJlcSwgLUVJTywgMCkpCiAJCUJVRygpOwogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChyZXEpKQotCQlrZnJlZShzY3NpLT5wYy0+YnVmZmVyKTsKKwkJa2ZyZWUoc2NzaS0+cGMtPmJ1Zik7CiAJa2ZyZWUoc2NzaS0+cGMpOwogCXNjc2ktPnBjID0gTlVMTDsKIAlrZnJlZShyZXEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2luaXRpby5jIGIvZHJpdmVycy9zY3NpL2luaXRpby5jCmluZGV4IDBjYzg4NjguLmRiYWUzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pbml0aW8uYworKysgYi9kcml2ZXJzL3Njc2kvaW5pdGlvLmMKQEAgLTI1ODEsOCArMjU4MSw4IEBACiAJLyogTWFwIHRoZSBzZW5zZSBidWZmZXIgaW50byBidXMgbWVtb3J5ICovCiAJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmaG9zdC0+cGNpX2Rldi0+ZGV2LCBjbW5kLT5zZW5zZV9idWZmZXIsCiAJCQkJICBTRU5TRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwotCWNibGstPnNlbnNlcHRyID0gY3B1X3RvX2xlMzIoKHUzMilkbWFfYWRkcik7Ci0JY2Jsay0+c2Vuc2VsZW4gPSBjcHVfdG9fbGUzMihTRU5TRV9TSVpFKTsKKwljYmxrLT5zZW5zZXB0ciA9ICh1MzIpZG1hX2FkZHI7CisJY2Jsay0+c2Vuc2VsZW4gPSBTRU5TRV9TSVpFOwogCWNtbmQtPlNDcC5wdHIgPSAoY2hhciAqKSh1bnNpZ25lZCBsb25nKWRtYV9hZGRyOwogCWNibGstPmNkYmxlbiA9IGNtbmQtPmNtZF9sZW47CiAKQEAgLTI2MDYsNyArMjYwNiw3IEBACiAJCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmhvc3QtPnBjaV9kZXYtPmRldiwgJmNibGstPnNnbGlzdFswXSwKIAkJCQkJICBzaXplb2Yoc3RydWN0IHNnX2VudHJ5KSAqIFRPVEFMX1NHX0VOVFJZLAogCQkJCQkgIERNQV9CSURJUkVDVElPTkFMKTsKLQkJY2Jsay0+YnVmcHRyID0gY3B1X3RvX2xlMzIoKHUzMilkbWFfYWRkcik7CisJCWNibGstPmJ1ZnB0ciA9ICh1MzIpZG1hX2FkZHI7CiAJCWNtbmQtPlNDcC5kbWFfaGFuZGxlID0gZG1hX2FkZHI7CiAKIAkJY2Jsay0+c2dsZW4gPSBuc2VnOwpAQCAtMjYxNiw3ICsyNjE2LDggQEAKIAkJc2cgPSAmY2Jsay0+c2dsaXN0WzBdOwogCQlzY3NpX2Zvcl9lYWNoX3NnKGNtbmQsIHNnbGlzdCwgY2Jsay0+c2dsZW4sIGkpIHsKIAkJCXNnLT5kYXRhID0gY3B1X3RvX2xlMzIoKHUzMilzZ19kbWFfYWRkcmVzcyhzZ2xpc3QpKTsKLQkJCXRvdGFsX2xlbiArPSBzZy0+bGVuID0gY3B1X3RvX2xlMzIoKHUzMilzZ19kbWFfbGVuKHNnbGlzdCkpOworCQkJc2ctPmxlbiA9IGNwdV90b19sZTMyKCh1MzIpc2dfZG1hX2xlbihzZ2xpc3QpKTsKKwkJCXRvdGFsX2xlbiArPSBzZ19kbWFfbGVuKHNnbGlzdCk7CiAJCQkrK3NnOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCAyMDc0NzAxLi5kZTVhZTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC0yNDMxLDcgKzI0MzEsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQlrb2JqZWN0X3VldmVudCgmaW9hX2NmZy0+aG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwgS09CSl9DSEFOR0UpOworCWtvYmplY3RfdWV2ZW50KCZpb2FfY2ZnLT5ob3N0LT5zaG9zdF9kZXYua29iaiwgS09CSl9DSEFOR0UpOwogCUxFQVZFOwogfQogCkBAIC0yNDUxLDggKzI0NTEsOCBAQAogCQkJICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQkJICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9IGNvbnRhaW5lcl9vZihrb2JqLHN0cnVjdCBjbGFzc19kZXZpY2Usa29iaik7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIAlpbnQgc2l6ZSA9IElQUl9UUkFDRV9TSVpFOwpAQCAtMjQ5MiwxNSArMjQ5MiwxNiBAQAogCiAvKioKICAqIGlwcl9zaG93X3dyaXRlX2NhY2hpbmcgLSBTaG93IHRoZSB3cml0ZSBjYWNoaW5nIGF0dHJpYnV0ZQotICogQGNsYXNzX2RldjoJY2xhc3MgZGV2aWNlIHN0cnVjdAotICogQGJ1ZjoJCWJ1ZmZlcgorICogQGRldjoJZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJYnVmZmVyCiAgKgogICogUmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgdG8gYnVmZmVyCiAgKiovCi1zdGF0aWMgc3NpemVfdCBpcHJfc2hvd193cml0ZV9jYWNoaW5nKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaXByX3Nob3dfd3JpdGVfY2FjaGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIAlpbnQgaSwgbGVuID0gMDsKQEAgLTI1MTksMTkgKzI1MjAsMjAgQEAKIAogLyoqCiAgKiBpcHJfc3RvcmVfd3JpdGVfY2FjaGluZyAtIEVuYWJsZS9kaXNhYmxlIGFkYXB0ZXIgd3JpdGUgY2FjaGUKLSAqIEBjbGFzc19kZXY6CWNsYXNzX2RldmljZSBzdHJ1Y3QKLSAqIEBidWY6CQlidWZmZXIKLSAqIEBjb3VudDoJCWJ1ZmZlciBzaXplCisgKiBAZGV2OglkZXZpY2Ugc3RydWN0CisgKiBAYnVmOglidWZmZXIKKyAqIEBjb3VudDoJYnVmZmVyIHNpemUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlL2Rpc2FibGUgYWRhcHRlciB3cml0ZSBjYWNoZS4KICAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKiAJY291bnQgb24gc3VjY2VzcyAvIG90aGVyIG9uIGZhaWx1cmUKICAqKi8KLXN0YXRpYyBzc2l6ZV90IGlwcl9zdG9yZV93cml0ZV9jYWNoaW5nKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBpcHJfc3RvcmVfd3JpdGVfY2FjaGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIAllbnVtIGlwcl9jYWNoZV9zdGF0ZSBuZXdfc3RhdGUgPSBDQUNIRV9JTlZBTElEOwpAQCAtMjU2OSw3ICsyNTcxLDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpcHJfaW9hX2NhY2hlX2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaXByX2lvYV9jYWNoZV9hdHRyID0gewogCS5hdHRyID0gewogCQkubmFtZSA9CQkid3JpdGVfY2FjaGUiLAogCQkubW9kZSA9CQlTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTI1ODAsMTUgKzI1ODIsMTYgQEAKIAogLyoqCiAgKiBpcHJfc2hvd19md192ZXJzaW9uIC0gU2hvdyB0aGUgZmlybXdhcmUgdmVyc2lvbgotICogQGNsYXNzX2RldjoJY2xhc3MgZGV2aWNlIHN0cnVjdAotICogQGJ1ZjoJCWJ1ZmZlcgorICogQGRldjoJY2xhc3MgZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJYnVmZmVyCiAgKgogICogUmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgdG8gYnVmZmVyCiAgKiovCi1zdGF0aWMgc3NpemVfdCBpcHJfc2hvd19md192ZXJzaW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaXByX3Nob3dfZndfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGlwcl9pbnF1aXJ5X3BhZ2UzICp1Y29kZV92cGQgPSAmaW9hX2NmZy0+dnBkX2Nicy0+cGFnZTNfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwpAQCAtMjYwMyw3ICsyNjA2LDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgaXByX2Z3X3ZlcnNpb25fYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpcHJfZndfdmVyc2lvbl9hdHRyID0gewogCS5hdHRyID0gewogCQkubmFtZSA9CQkiZndfdmVyc2lvbiIsCiAJCS5tb2RlID0JCVNfSVJVR08sCkBAIC0yNjEzLDE1ICsyNjE2LDE2IEBACiAKIC8qKgogICogaXByX3Nob3dfbG9nX2xldmVsIC0gU2hvdyB0aGUgYWRhcHRlcidzIGVycm9yIGxvZ2dpbmcgbGV2ZWwKLSAqIEBjbGFzc19kZXY6CWNsYXNzIGRldmljZSBzdHJ1Y3QKLSAqIEBidWY6CQlidWZmZXIKKyAqIEBkZXY6CWNsYXNzIGRldmljZSBzdHJ1Y3QKKyAqIEBidWY6CWJ1ZmZlcgogICoKICAqIFJldHVybiB2YWx1ZToKICAqIAludW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKICAqKi8KLXN0YXRpYyBzc2l6ZV90IGlwcl9zaG93X2xvZ19sZXZlbChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGlwcl9zaG93X2xvZ19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIAlpbnQgbGVuOwpAQCAtMjYzNCwxNiArMjYzOCwxNyBAQAogCiAvKioKICAqIGlwcl9zdG9yZV9sb2dfbGV2ZWwgLSBDaGFuZ2UgdGhlIGFkYXB0ZXIncyBlcnJvciBsb2dnaW5nIGxldmVsCi0gKiBAY2xhc3NfZGV2OgljbGFzcyBkZXZpY2Ugc3RydWN0Ci0gKiBAYnVmOgkJYnVmZmVyCisgKiBAZGV2OgljbGFzcyBkZXZpY2Ugc3RydWN0CisgKiBAYnVmOglidWZmZXIKICAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKiAJbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgdG8gYnVmZmVyCiAgKiovCi1zdGF0aWMgc3NpemVfdCBpcHJfc3RvcmVfbG9nX2xldmVsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKK3N0YXRpYyBzc2l6ZV90IGlwcl9zdG9yZV9sb2dfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIApAQCAtMjY1Myw3ICsyNjU4LDcgQEAKIAlyZXR1cm4gc3RybGVuKGJ1Zik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpcHJfbG9nX2xldmVsX2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaXByX2xvZ19sZXZlbF9hdHRyID0gewogCS5hdHRyID0gewogCQkubmFtZSA9CQkibG9nX2xldmVsIiwKIAkJLm1vZGUgPQkJU19JUlVHTyB8IFNfSVdVU1IsCkBAIC0yNjY0LDkgKzI2NjksOSBAQAogCiAvKioKICAqIGlwcl9zdG9yZV9kaWFnbm9zdGljcyAtIElPQSBEaWFnbm9zdGljcyBpbnRlcmZhY2UKLSAqIEBjbGFzc19kZXY6CWNsYXNzX2RldmljZSBzdHJ1Y3QKLSAqIEBidWY6CQlidWZmZXIKLSAqIEBjb3VudDoJCWJ1ZmZlciBzaXplCisgKiBAZGV2OglkZXZpY2Ugc3RydWN0CisgKiBAYnVmOglidWZmZXIKKyAqIEBjb3VudDoJYnVmZmVyIHNpemUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXQgdGhlIGFkYXB0ZXIgYW5kIHdhaXQgYSByZWFzb25hYmxlCiAgKiBhbW91bnQgb2YgdGltZSBmb3IgYW55IGVycm9ycyB0aGF0IHRoZSBhZGFwdGVyIG1pZ2h0IGxvZy4KQEAgLTI2NzQsMTAgKzI2NzksMTEgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIAljb3VudCBvbiBzdWNjZXNzIC8gb3RoZXIgb24gZmFpbHVyZQogICoqLwotc3RhdGljIHNzaXplX3QgaXByX3N0b3JlX2RpYWdub3N0aWNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKK3N0YXRpYyBzc2l6ZV90IGlwcl9zdG9yZV9kaWFnbm9zdGljcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKXNob3N0LT5ob3N0ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCWludCByYyA9IGNvdW50OwpAQCAtMjcxNCw3ICsyNzIwLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpcHJfZGlhZ25vc3RpY3NfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpcHJfZGlhZ25vc3RpY3NfYXR0ciA9IHsKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPQkJInJ1bl9kaWFnbm9zdGljcyIsCiAJCS5tb2RlID0JCVNfSVdVU1IsCkBAIC0yNzI0LDE1ICsyNzMwLDE2IEBACiAKIC8qKgogICogaXByX3Nob3dfYWRhcHRlcl9zdGF0ZSAtIFNob3cgdGhlIGFkYXB0ZXIncyBzdGF0ZQotICogQGNsYXNzX2RldjoJY2xhc3MgZGV2aWNlIHN0cnVjdAotICogQGJ1ZjoJCWJ1ZmZlcgorICogQGNsYXNzX2RldjoJZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJYnVmZmVyCiAgKgogICogUmV0dXJuIHZhbHVlOgogICogCW51bWJlciBvZiBieXRlcyBwcmludGVkIHRvIGJ1ZmZlcgogICoqLwotc3RhdGljIHNzaXplX3QgaXByX3Nob3dfYWRhcHRlcl9zdGF0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGlwcl9zaG93X2FkYXB0ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopc2hvc3QtPmhvc3RkYXRhOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFncyA9IDA7CiAJaW50IGxlbjsKQEAgLTI3NDgsMTkgKzI3NTUsMjAgQEAKIAogLyoqCiAgKiBpcHJfc3RvcmVfYWRhcHRlcl9zdGF0ZSAtIENoYW5nZSBhZGFwdGVyIHN0YXRlCi0gKiBAY2xhc3NfZGV2OgljbGFzc19kZXZpY2Ugc3RydWN0Ci0gKiBAYnVmOgkJYnVmZmVyCi0gKiBAY291bnQ6CQlidWZmZXIgc2l6ZQorICogQGRldjoJZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJYnVmZmVyCisgKiBAY291bnQ6CWJ1ZmZlciBzaXplCiAgKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIGNoYW5nZSB0aGUgYWRhcHRlcidzIHN0YXRlLgogICoKICAqIFJldHVybiB2YWx1ZToKICAqIAljb3VudCBvbiBzdWNjZXNzIC8gb3RoZXIgb24gZmFpbHVyZQogICoqLwotc3RhdGljIHNzaXplX3QgaXByX3N0b3JlX2FkYXB0ZXJfc3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorc3RhdGljIHNzaXplX3QgaXByX3N0b3JlX2FkYXB0ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopc2hvc3QtPmhvc3RkYXRhOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlpbnQgcmVzdWx0ID0gY291bnQ7CkBAIC0yNzgxLDcgKzI3ODksNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpcHJfaW9hX3N0YXRlX2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaXByX2lvYV9zdGF0ZV9hdHRyID0gewogCS5hdHRyID0gewogCQkubmFtZSA9CQkic3RhdGUiLAogCQkubW9kZSA9CQlTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTI3OTIsMTkgKzI4MDAsMjAgQEAKIAogLyoqCiAgKiBpcHJfc3RvcmVfcmVzZXRfYWRhcHRlciAtIFJlc2V0IHRoZSBhZGFwdGVyCi0gKiBAY2xhc3NfZGV2OgljbGFzc19kZXZpY2Ugc3RydWN0Ci0gKiBAYnVmOgkJYnVmZmVyCi0gKiBAY291bnQ6CQlidWZmZXIgc2l6ZQorICogQGRldjoJZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJYnVmZmVyCisgKiBAY291bnQ6CWJ1ZmZlciBzaXplCiAgKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSBhZGFwdGVyLgogICoKICAqIFJldHVybiB2YWx1ZToKICAqIAljb3VudCBvbiBzdWNjZXNzIC8gb3RoZXIgb24gZmFpbHVyZQogICoqLwotc3RhdGljIHNzaXplX3QgaXByX3N0b3JlX3Jlc2V0X2FkYXB0ZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorc3RhdGljIHNzaXplX3QgaXByX3N0b3JlX3Jlc2V0X2FkYXB0ZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopc2hvc3QtPmhvc3RkYXRhOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlpbnQgcmVzdWx0ID0gY291bnQ7CkBAIC0yODIxLDcgKzI4MzAsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpcHJfaW9hX3Jlc2V0X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaXByX2lvYV9yZXNldF9hdHRyID0gewogCS5hdHRyID0gewogCQkubmFtZSA9CQkicmVzZXRfaG9zdCIsCiAJCS5tb2RlID0JCVNfSVdVU1IsCkBAIC0zMDU0LDE5ICszMDYzLDIwIEBACiAKIC8qKgogICogaXByX3N0b3JlX3VwZGF0ZV9mdyAtIFVwZGF0ZSB0aGUgZmlybXdhcmUgb24gdGhlIGFkYXB0ZXIKLSAqIEBjbGFzc19kZXY6CWNsYXNzX2RldmljZSBzdHJ1Y3QKLSAqIEBidWY6CQlidWZmZXIKLSAqIEBjb3VudDoJCWJ1ZmZlciBzaXplCisgKiBAY2xhc3NfZGV2OglkZXZpY2Ugc3RydWN0CisgKiBAYnVmOglidWZmZXIKKyAqIEBjb3VudDoJYnVmZmVyIHNpemUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRoZSBmaXJtd2FyZSBvbiB0aGUgYWRhcHRlci4KICAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKiAJY291bnQgb24gc3VjY2VzcyAvIG90aGVyIG9uIGZhaWx1cmUKICAqKi8KLXN0YXRpYyBzc2l6ZV90IGlwcl9zdG9yZV91cGRhdGVfZncoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAotCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGlwcl9zdG9yZV91cGRhdGVfZncoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKXNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgaXByX3Vjb2RlX2ltYWdlX2hlYWRlciAqaW1hZ2VfaGRyOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CkBAIC0zMTI0LDcgKzMxMzQsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpcHJfdXBkYXRlX2Z3X2F0dHIgPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaXByX3VwZGF0ZV9md19hdHRyID0gewogCS5hdHRyID0gewogCQkubmFtZSA9CQkidXBkYXRlX2Z3IiwKIAkJLm1vZGUgPQkJU19JV1VTUiwKQEAgLTMxMzIsNyArMzE0Miw3IEBACiAJLnN0b3JlID0gaXByX3N0b3JlX3VwZGF0ZV9mdwogfTsKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICppcHJfaW9hX2F0dHJzW10gPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmlwcl9pb2FfYXR0cnNbXSA9IHsKIAkmaXByX2Z3X3ZlcnNpb25fYXR0ciwKIAkmaXByX2xvZ19sZXZlbF9hdHRyLAogCSZpcHJfZGlhZ25vc3RpY3NfYXR0ciwKQEAgLTMxNTksNyArMzE2OSw3IEBACiAJCQkgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJCSAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9IGNvbnRhaW5lcl9vZihrb2JqLHN0cnVjdCBjbGFzc19kZXZpY2Usa29iaik7CisJc3RydWN0IGRldmljZSAqY2RldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGlwcl9kdW1wICpkdW1wOwpAQCAtMzMyMiw3ICszMzMyLDcgQEAKIAkJCSAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKIAkJCSAgICAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYgPSBjb250YWluZXJfb2Yoa29iaixzdHJ1Y3QgY2xhc3NfZGV2aWNlLGtvYmopOworCXN0cnVjdCBkZXZpY2UgKmNkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopc2hvc3QtPmhvc3RkYXRhOwogCWludCByYzsKQEAgLTM5MzcsNyArMzk0Nyw3IEBACiAJaWYgKGlwcl9pc19nYXRhKHJlcykgJiYgcmVzLT5zYXRhX3BvcnQpIHsKIAkJYXAgPSByZXMtPnNhdGFfcG9ydC0+YXA7CiAJCXNwaW5fdW5sb2NrX2lycShzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCQlhdGFfZG9fZWgoYXAsIE5VTEwsIE5VTEwsIGlwcl9zYXRhX3Jlc2V0LCBOVUxMKTsKKwkJYXRhX3N0ZF9lcnJvcl9oYW5kbGVyKGFwKTsKIAkJc3Bpbl9sb2NrX2lycShzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXByX2NtZCwgJmlvYV9jZmctPnBlbmRpbmdfcSwgcXVldWUpIHsKQEAgLTUwNDEsMzMgKzUwNTEsNiBAQAogfQogCiAvKioKLSAqIGlwcl90Zl9yZWFkIC0gUmVhZCB0aGUgY3VycmVudCBBVEEgdGFza2ZpbGUgZm9yIHRoZSBBVEEgcG9ydAotICogQGFwOglBVEEgcG9ydAotICogQHRmOglkZXN0aW5hdGlvbiBBVEEgdGFza2ZpbGUKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKiAJbm9uZQotICoqLwotc3RhdGljIHZvaWQgaXByX3RmX3JlYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCi17Ci0Jc3RydWN0IGlwcl9zYXRhX3BvcnQgKnNhdGFfcG9ydCA9IGFwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGlwcl9pb2FzYV9nYXRhICpnID0gJnNhdGFfcG9ydC0+aW9hc2E7Ci0KLQl0Zi0+ZmVhdHVyZSA9IGctPmVycm9yOwotCXRmLT5uc2VjdCA9IGctPm5zZWN0OwotCXRmLT5sYmFsID0gZy0+bGJhbDsKLQl0Zi0+bGJhbSA9IGctPmxiYW07Ci0JdGYtPmxiYWggPSBnLT5sYmFoOwotCXRmLT5kZXZpY2UgPSBnLT5kZXZpY2U7Ci0JdGYtPmNvbW1hbmQgPSBnLT5zdGF0dXM7Ci0JdGYtPmhvYl9uc2VjdCA9IGctPmhvYl9uc2VjdDsKLQl0Zi0+aG9iX2xiYWwgPSBnLT5ob2JfbGJhbDsKLQl0Zi0+aG9iX2xiYW0gPSBnLT5ob2JfbGJhbTsKLQl0Zi0+aG9iX2xiYWggPSBnLT5ob2JfbGJhaDsKLQl0Zi0+Y3RsID0gZy0+YWx0X3N0YXR1czsKLX0KLQotLyoqCiAgKiBpcHJfY29weV9zYXRhX3RmIC0gQ29weSBhIFNBVEEgdGFza2ZpbGUgdG8gYW4gSU9BIGRhdGEgc3RydWN0dXJlCiAgKiBAcmVnczoJZGVzdGluYXRpb24KICAqIEB0ZjoJc291cmNlIEFUQSB0YXNrZmlsZQpAQCAtNTE0MCw3ICs1MTIzLDcgQEAKIAlzdHJ1Y3QgaXByX2lvYXJjYiAqaW9hcmNiID0gJmlwcl9jbWQtPmlvYXJjYjsKIAlzdHJ1Y3QgaXByX2lvYWRsX2Rlc2MgKmlvYWRsID0gaXByX2NtZC0+aW9hZGw7CiAJc3RydWN0IGlwcl9pb2FkbF9kZXNjICpsYXN0X2lvYWRsID0gTlVMTDsKLQlpbnQgbGVuID0gcWMtPm5ieXRlcyArIHFjLT5wYWRfbGVuOworCWludCBsZW4gPSBxYy0+bmJ5dGVzOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdW5zaWduZWQgaW50IHNpOwogCkBAIC01MjA2LDcgKzUxODksNyBAQAogCWlvYXJjYi0+Y21kX3BrdC5yZXF1ZXN0X3R5cGUgPSBJUFJfUlFUWVBFX0FUQV9QQVNTVEhSVTsKIAlpb2FyY2ItPmNtZF9wa3QuZmxhZ3NfaGkgfD0gSVBSX0ZMQUdTX0hJX05PX0xJTktfREVTQzsKIAlpb2FyY2ItPmNtZF9wa3QuZmxhZ3NfaGkgfD0gSVBSX0ZMQUdTX0hJX05PX1VMRU5fQ0hLOwotCWlwcl9jbWQtPmRtYV91c2Vfc2cgPSBxYy0+cGFkX2xlbiA/IHFjLT5uX2VsZW0gKyAxIDogcWMtPm5fZWxlbTsKKwlpcHJfY21kLT5kbWFfdXNlX3NnID0gcWMtPm5fZWxlbTsKIAogCWlwcl9idWlsZF9hdGFfaW9hZGwoaXByX2NtZCwgcWMpOwogCXJlZ3MtPmZsYWdzIHw9IElQUl9BVEFfRkxBR19TVEFUVVNfT05fR09PRF9DT01QTEVUSU9OOwpAQCAtNTI0NSw0MCArNTIyOCw0MSBAQAogfQogCiAvKioKLSAqIGlwcl9hdGFfY2hlY2tfc3RhdHVzIC0gUmV0dXJuIGxhc3QgQVRBIHN0YXR1cwotICogQGFwOglBVEEgcG9ydAorICogaXByX3FjX2ZpbGxfcnRmIC0gUmVhZCByZXN1bHQgVEYKKyAqIEBxYzogQVRBIHF1ZXVlZCBjb21tYW5kCiAgKgogICogUmV0dXJuIHZhbHVlOgotICogCUFUQSBzdGF0dXMKKyAqIAl0cnVlCiAgKiovCi1zdGF0aWMgdTggaXByX2F0YV9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBib29sIGlwcl9xY19maWxsX3J0ZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCXN0cnVjdCBpcHJfc2F0YV9wb3J0ICpzYXRhX3BvcnQgPSBhcC0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBzYXRhX3BvcnQtPmlvYXNhLnN0YXR1czsKLX0KKwlzdHJ1Y3QgaXByX3NhdGFfcG9ydCAqc2F0YV9wb3J0ID0gcWMtPmFwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGlwcl9pb2FzYV9nYXRhICpnID0gJnNhdGFfcG9ydC0+aW9hc2E7CisJc3RydWN0IGF0YV90YXNrZmlsZSAqdGYgPSAmcWMtPnJlc3VsdF90ZjsKIAotLyoqCi0gKiBpcHJfYXRhX2NoZWNrX2FsdHN0YXR1cyAtIFJldHVybiBsYXN0IEFUQSBhbHRzdGF0dXMKLSAqIEBhcDoJQVRBIHBvcnQKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKiAJQWx0IEFUQSBzdGF0dXMKLSAqKi8KLXN0YXRpYyB1OCBpcHJfYXRhX2NoZWNrX2FsdHN0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCBpcHJfc2F0YV9wb3J0ICpzYXRhX3BvcnQgPSBhcC0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBzYXRhX3BvcnQtPmlvYXNhLmFsdF9zdGF0dXM7CisJdGYtPmZlYXR1cmUgPSBnLT5lcnJvcjsKKwl0Zi0+bnNlY3QgPSBnLT5uc2VjdDsKKwl0Zi0+bGJhbCA9IGctPmxiYWw7CisJdGYtPmxiYW0gPSBnLT5sYmFtOworCXRmLT5sYmFoID0gZy0+bGJhaDsKKwl0Zi0+ZGV2aWNlID0gZy0+ZGV2aWNlOworCXRmLT5jb21tYW5kID0gZy0+c3RhdHVzOworCXRmLT5ob2JfbnNlY3QgPSBnLT5ob2JfbnNlY3Q7CisJdGYtPmhvYl9sYmFsID0gZy0+aG9iX2xiYWw7CisJdGYtPmhvYl9sYmFtID0gZy0+aG9iX2xiYW07CisJdGYtPmhvYl9sYmFoID0gZy0+aG9iX2xiYWg7CisJdGYtPmN0bCA9IGctPmFsdF9zdGF0dXM7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGlwcl9zYXRhX29wcyA9IHsKLQkuY2hlY2tfc3RhdHVzID0gaXByX2F0YV9jaGVja19zdGF0dXMsCi0JLmNoZWNrX2FsdHN0YXR1cyA9IGlwcl9hdGFfY2hlY2tfYWx0c3RhdHVzLAotCS5kZXZfc2VsZWN0ID0gYXRhX25vb3BfZGV2X3NlbGVjdCwKIAkucGh5X3Jlc2V0ID0gaXByX2F0YV9waHlfcmVzZXQsCisJLmhhcmRyZXNldCA9IGlwcl9zYXRhX3Jlc2V0LAogCS5wb3N0X2ludGVybmFsX2NtZCA9IGlwcl9hdGFfcG9zdF9pbnRlcm5hbCwKLQkudGZfcmVhZCA9IGlwcl90Zl9yZWFkLAogCS5xY19wcmVwID0gYXRhX25vb3BfcWNfcHJlcCwKIAkucWNfaXNzdWUgPSBpcHJfcWNfaXNzdWUsCisJLnFjX2ZpbGxfcnRmID0gaXByX3FjX2ZpbGxfcnRmLAogCS5wb3J0X3N0YXJ0ID0gYXRhX3Nhc19wb3J0X3N0YXJ0LAogCS5wb3J0X3N0b3AgPSBhdGFfc2FzX3BvcnRfc3RvcAogfTsKQEAgLTc2OTcsOSArNzY4MSw5IEBACiAKIAlFTlRFUjsKIAotCWlwcl9yZW1vdmVfdHJhY2VfZmlsZSgmaW9hX2NmZy0+aG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwKKwlpcHJfcmVtb3ZlX3RyYWNlX2ZpbGUoJmlvYV9jZmctPmhvc3QtPnNob3N0X2Rldi5rb2JqLAogCQkJICAgICAgJmlwcl90cmFjZV9hdHRyKTsKLQlpcHJfcmVtb3ZlX2R1bXBfZmlsZSgmaW9hX2NmZy0+aG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwKKwlpcHJfcmVtb3ZlX2R1bXBfZmlsZSgmaW9hX2NmZy0+aG9zdC0+c2hvc3RfZGV2LmtvYmosCiAJCQkgICAgICZpcHJfZHVtcF9hdHRyKTsKIAlzY3NpX3JlbW92ZV9ob3N0KGlvYV9jZmctPmhvc3QpOwogCkBAIC03NzQwLDcgKzc3MjQsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmMgPSBpcHJfY3JlYXRlX3RyYWNlX2ZpbGUoJmlvYV9jZmctPmhvc3QtPnNob3N0X2NsYXNzZGV2LmtvYmosCisJcmMgPSBpcHJfY3JlYXRlX3RyYWNlX2ZpbGUoJmlvYV9jZmctPmhvc3QtPnNob3N0X2Rldi5rb2JqLAogCQkJCSAgICZpcHJfdHJhY2VfYXR0cik7CiAKIAlpZiAocmMpIHsKQEAgLTc3NDksMTEgKzc3MzMsMTEgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXJjID0gaXByX2NyZWF0ZV9kdW1wX2ZpbGUoJmlvYV9jZmctPmhvc3QtPnNob3N0X2NsYXNzZGV2LmtvYmosCisJcmMgPSBpcHJfY3JlYXRlX2R1bXBfZmlsZSgmaW9hX2NmZy0+aG9zdC0+c2hvc3RfZGV2LmtvYmosCiAJCQkJICAgJmlwcl9kdW1wX2F0dHIpOwogCiAJaWYgKHJjKSB7Ci0JCWlwcl9yZW1vdmVfdHJhY2VfZmlsZSgmaW9hX2NmZy0+aG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwKKwkJaXByX3JlbW92ZV90cmFjZV9maWxlKCZpb2FfY2ZnLT5ob3N0LT5zaG9zdF9kZXYua29iaiwKIAkJCQkgICAgICAmaXByX3RyYWNlX2F0dHIpOwogCQlzY3NpX3JlbW92ZV9ob3N0KGlvYV9jZmctPmhvc3QpOwogCQlfX2lwcl9yZW1vdmUocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXBzLmMgYi9kcml2ZXJzL3Njc2kvaXBzLmMKaW5kZXggYmIxNTJmYjkuLjdjNjE1YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHMuYworKysgYi9kcml2ZXJzL3Njc2kvaXBzLmMKQEAgLTE1NzYsNyArMTU3Niw3IEBACiAJTUVUSE9EX1RSQUNFKCJpcHNfbWFrZV9wYXNzdGhydSIsIDEpOwogCiAgICAgICAgIHNjc2lfZm9yX2VhY2hfc2coU0MsIHNnLCBzY3NpX3NnX2NvdW50KFNDKSwgaSkKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gc2dbaV0ubGVuZ3RoOworCQlsZW5ndGggKz0gc2ctPmxlbmd0aDsKIAogCWlmIChsZW5ndGggPCBzaXplb2YgKGlwc19wYXNzdGhydV90KSkgewogCQkvKiB3cm9uZyBzaXplICovCkBAIC0yMzc3LDcgKzIzNzcsNyBAQAogCQkJaWYgKGluYihoYS0+aW9fYWRkciArIElQU19SRUdfRkxEUCkgIT0gMHg1NSkKIAkJCQlyZXR1cm47CiAKLQkJCW91dGwoY3B1X3RvX2xlMzIoMSksIGhhLT5pb19hZGRyICsgSVBTX1JFR19GTEFQKTsKKwkJCW91dGwoMSwgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0ZMQVApOwogCQkJaWYgKGhhLT5wY2lkZXYtPnJldmlzaW9uID09IElQU19SRVZJRF9UUk9NQk9ORTY0KQogCQkJCXVkZWxheSgyNSk7CS8qIDI1IHVzICovCiAKQEAgLTIzODUsMjEgKzIzODUsMjEgQEAKIAkJCQlyZXR1cm47CiAKIAkJCS8qIEdldCBNYWpvciB2ZXJzaW9uICovCi0JCQlvdXRsKGNwdV90b19sZTMyKDB4MUZGKSwgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0ZMQVApOworCQkJb3V0bCgweDFGRiwgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0ZMQVApOwogCQkJaWYgKGhhLT5wY2lkZXYtPnJldmlzaW9uID09IElQU19SRVZJRF9UUk9NQk9ORTY0KQogCQkJCXVkZWxheSgyNSk7CS8qIDI1IHVzICovCiAKIAkJCW1ham9yID0gaW5iKGhhLT5pb19hZGRyICsgSVBTX1JFR19GTERQKTsKIAogCQkJLyogR2V0IE1pbm9yIHZlcnNpb24gKi8KLQkJCW91dGwoY3B1X3RvX2xlMzIoMHgxRkUpLCBoYS0+aW9fYWRkciArIElQU19SRUdfRkxBUCk7CisJCQlvdXRsKDB4MUZFLCBoYS0+aW9fYWRkciArIElQU19SRUdfRkxBUCk7CiAJCQlpZiAoaGEtPnBjaWRldi0+cmV2aXNpb24gPT0gSVBTX1JFVklEX1RST01CT05FNjQpCiAJCQkJdWRlbGF5KDI1KTsJLyogMjUgdXMgKi8KIAogCQkJbWlub3IgPSBpbmIoaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0ZMRFApOwogCiAJCQkvKiBHZXQgU3ViTWlub3IgdmVyc2lvbiAqLwotCQkJb3V0bChjcHVfdG9fbGUzMigweDFGRCksIGhhLT5pb19hZGRyICsgSVBTX1JFR19GTEFQKTsKKwkJCW91dGwoMHgxRkQsIGhhLT5pb19hZGRyICsgSVBTX1JFR19GTEFQKTsKIAkJCWlmIChoYS0+cGNpZGV2LT5yZXZpc2lvbiA9PSBJUFNfUkVWSURfVFJPTUJPTkU2NCkKIAkJCQl1ZGVsYXkoMjUpOwkvKiAyNSB1cyAqLwogCkBAIC0zNTAyLDI3ICszNTAyLDExIEBACiBzdGF0aWMgdm9pZAogaXBzX3NjbWRfYnVmX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIHVuc2lnbmVkIGludCBtaW5fY250LCB4ZmVyX2NudDsKLSAgICAgICAgY2hhciAqY2RhdGEgPSAoY2hhciAqKSBkYXRhOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzY3NpX3NnbGlzdChzY21kKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgICAgIGZvciAoaSA9IDAsIHhmZXJfY250ID0gMDsKLSAgICAgICAgICAgICAoaSA8IHNjc2lfc2dfY291bnQoc2NtZCkpICYmICh4ZmVyX2NudCA8IGNvdW50KTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbWluX2NudCA9IG1pbihjb3VudCAtIHhmZXJfY250LCBzZ1tpXS5sZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgLyoga21hcF9hdG9taWMoKSBlbnN1cmVzIGFkZHJlc3NhYmlsaXR5IG9mIHRoZSBkYXRhIGJ1ZmZlci4qLwotICAgICAgICAgICAgICAgIC8qIGxvY2FsX2lycV9zYXZlKCkgcHJvdGVjdHMgdGhlIEtNX0lSUTAgYWRkcmVzcyBzbG90LiAgICAgKi8KLSAgICAgICAgICAgICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0ga21hcF9hdG9taWMoc2dfcGFnZSgmc2dbaV0pLCBLTV9JUlEwKSArIHNnW2ldLm9mZnNldDsKLSAgICAgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCAmY2RhdGFbeGZlcl9jbnRdLCBtaW5fY250KTsKLSAgICAgICAgICAgICAgICBrdW5tYXBfYXRvbWljKGJ1ZmZlciAtIHNnW2ldLm9mZnNldCwgS01fSVJRMCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gICAgICAgICAgICAgICAgeGZlcl9jbnQgKz0gbWluX2NudDsKLSAgICAgICAgfQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoc2NtZCwgZGF0YSwgY291bnQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNTM1LDI3ICszNTE5LDExIEBACiBzdGF0aWMgdm9pZAogaXBzX3NjbWRfYnVmX3JlYWQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgICAgICBpbnQgaTsKLSAgICAgICAgdW5zaWduZWQgaW50IG1pbl9jbnQsIHhmZXJfY250OwotICAgICAgICBjaGFyICpjZGF0YSA9IChjaGFyICopIGRhdGE7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNjc2lfc2dsaXN0KHNjbWQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgICAgICAgZm9yIChpID0gMCwgeGZlcl9jbnQgPSAwOwotICAgICAgICAgICAgIChpIDwgc2NzaV9zZ19jb3VudChzY21kKSkgJiYgKHhmZXJfY250IDwgY291bnQpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtaW5fY250ID0gbWluKGNvdW50IC0geGZlcl9jbnQsIHNnW2ldLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAvKiBrbWFwX2F0b21pYygpIGVuc3VyZXMgYWRkcmVzc2FiaWxpdHkgb2YgdGhlIGRhdGEgYnVmZmVyLiovCi0gICAgICAgICAgICAgICAgLyogbG9jYWxfaXJxX3NhdmUoKSBwcm90ZWN0cyB0aGUgS01fSVJRMCBhZGRyZXNzIHNsb3QuICAgICAqLwotICAgICAgICAgICAgICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBrbWFwX2F0b21pYyhzZ19wYWdlKCZzZ1tpXSksIEtNX0lSUTApICsgc2dbaV0ub2Zmc2V0OwotICAgICAgICAgICAgICAgIG1lbWNweSgmY2RhdGFbeGZlcl9jbnRdLCBidWZmZXIsIG1pbl9jbnQpOwotICAgICAgICAgICAgICAgIGt1bm1hcF9hdG9taWMoYnVmZmVyIC0gc2dbaV0ub2Zmc2V0LCBLTV9JUlEwKTsKLSAgICAgICAgICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLSAgICAgICAgICAgICAgICB4ZmVyX2NudCArPSBtaW5fY250OwotICAgICAgICB9CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNjc2lfc2dfY29weV90b19idWZmZXIoc2NtZCwgZGF0YSwgY291bnQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNjk2LDkgKzM2NjQsNyBAQAogCQkJc2NiLT5jbWQuYmFzaWNfaW8uc2dfY291bnQgPSBzY2ItPnNnX2xlbjsKIAogCQkJaWYgKHNjYi0+Y21kLmJhc2ljX2lvLmxiYSkKLQkJCQlzY2ItPmNtZC5iYXNpY19pby5sYmEgPQotCQkJCSAgICBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdQotCQkJCQkJKHNjYi0+Y21kLmJhc2ljX2lvLmxiYSkgKworCQkJCWxlMzJfYWRkX2NwdSgmc2NiLT5jbWQuYmFzaWNfaW8ubGJhLAogCQkJCQkJbGUxNl90b19jcHUoc2NiLT5jbWQuYmFzaWNfaW8uCiAJCQkJCQkJICAgIHNlY3Rvcl9jb3VudCkpOwogCQkJZWxzZQpAQCAtMzc0NCw5ICszNzEwLDcgQEAKIAkJCXNjYi0+Y21kLmJhc2ljX2lvLnNnX2NvdW50ID0gc2NiLT5zZ19sZW47CiAKIAkJCWlmIChzY2ItPmNtZC5iYXNpY19pby5sYmEpCi0JCQkJc2NiLT5jbWQuYmFzaWNfaW8ubGJhID0KLQkJCQkgICAgY3B1X3RvX2xlMzIobGUzMl90b19jcHUKLQkJCQkJCShzY2ItPmNtZC5iYXNpY19pby5sYmEpICsKKwkJCQlsZTMyX2FkZF9jcHUoJnNjYi0+Y21kLmJhc2ljX2lvLmxiYSwKIAkJCQkJCWxlMTZfdG9fY3B1KHNjYi0+Y21kLmJhc2ljX2lvLgogCQkJCQkJCSAgICBzZWN0b3JfY291bnQpKTsKIAkJCWVsc2UKQEAgLTQ4ODgsNyArNDg1Miw3IEBACiAJCXJldHVybiAoMCk7CiAKIAkvKiBzZXR1cCBDQ0NSICovCi0Jb3V0bChjcHVfdG9fbGUzMigweDEwMTApLCBoYS0+aW9fYWRkciArIElQU19SRUdfQ0NDUik7CisJb3V0bCgweDEwMTAsIGhhLT5pb19hZGRyICsgSVBTX1JFR19DQ0NSKTsKIAogCS8qIEVuYWJsZSBidXNtYXN0ZXJpbmcgKi8KIAlvdXRiKElQU19CSVRfRUJNLCBoYS0+aW9fYWRkciArIElQU19SRUdfU0NQUik7CkBAIC01MjcwLDEyICs1MjM0LDEyIEBACiAJaGEtPmFkYXB0LT5wX3N0YXR1c190YWlsID0gaGEtPmFkYXB0LT5zdGF0dXM7CiAKIAlwaHlzX3N0YXR1c19zdGFydCA9IGhhLT5hZGFwdC0+aHdfc3RhdHVzX3N0YXJ0OwotCW91dGwoY3B1X3RvX2xlMzIocGh5c19zdGF0dXNfc3RhcnQpLCBoYS0+aW9fYWRkciArIElQU19SRUdfU1FTUik7Ci0Jb3V0bChjcHVfdG9fbGUzMihwaHlzX3N0YXR1c19zdGFydCArIElQU19TVEFUVVNfUV9TSVpFKSwKKwlvdXRsKHBoeXNfc3RhdHVzX3N0YXJ0LCBoYS0+aW9fYWRkciArIElQU19SRUdfU1FTUik7CisJb3V0bChwaHlzX3N0YXR1c19zdGFydCArIElQU19TVEFUVVNfUV9TSVpFLAogCSAgICAgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX1NRRVIpOwotCW91dGwoY3B1X3RvX2xlMzIocGh5c19zdGF0dXNfc3RhcnQgKyBJUFNfU1RBVFVTX1NJWkUpLAorCW91dGwocGh5c19zdGF0dXNfc3RhcnQgKyBJUFNfU1RBVFVTX1NJWkUsCiAJICAgICBoYS0+aW9fYWRkciArIElQU19SRUdfU1FIUik7Ci0Jb3V0bChjcHVfdG9fbGUzMihwaHlzX3N0YXR1c19zdGFydCksIGhhLT5pb19hZGRyICsgSVBTX1JFR19TUVRSKTsKKwlvdXRsKHBoeXNfc3RhdHVzX3N0YXJ0LCBoYS0+aW9fYWRkciArIElQU19SRUdfU1FUUik7CiAKIAloYS0+YWRhcHQtPmh3X3N0YXR1c190YWlsID0gcGh5c19zdGF0dXNfc3RhcnQ7CiB9CkBAIC01MzMyLDcgKzUyOTYsNyBAQAogCQloYS0+YWRhcHQtPmh3X3N0YXR1c190YWlsID0gaGEtPmFkYXB0LT5od19zdGF0dXNfc3RhcnQ7CiAJfQogCi0Jb3V0bChjcHVfdG9fbGUzMihoYS0+YWRhcHQtPmh3X3N0YXR1c190YWlsKSwKKwlvdXRsKGhhLT5hZGFwdC0+aHdfc3RhdHVzX3RhaWwsCiAJICAgICBoYS0+aW9fYWRkciArIElQU19SRUdfU1FUUik7CiAKIAlyZXR1cm4gKGhhLT5hZGFwdC0+cF9zdGF0dXNfdGFpbC0+dmFsdWUpOwpAQCAtNTQzNCw4ICs1Mzk4LDggQEAKIAkJfQkJLyogZW5kIGlmICovCiAJfQkJCS8qIGVuZCB3aGlsZSAqLwogCi0Jb3V0bChjcHVfdG9fbGUzMihzY2ItPnNjYl9idXNhZGRyKSwgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0NDU0FSKTsKLQlvdXR3KGNwdV90b19sZTMyKElQU19CSVRfU1RBUlRfQ01EKSwgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0NDQ1IpOworCW91dGwoc2NiLT5zY2JfYnVzYWRkciwgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0NDU0FSKTsKKwlvdXR3KElQU19CSVRfU1RBUlRfQ01ELCBoYS0+aW9fYWRkciArIElQU19SRUdfQ0NDUik7CiAKIAlyZXR1cm4gKElQU19TVUNDRVNTKTsKIH0KQEAgLTU1MjAsNyArNTQ4NCw3IEBACiAJCQkgIGlwc19uYW1lLCBoYS0+aG9zdF9udW0sIHNjYi0+Y21kLmJhc2ljX2lvLmNvbW1hbmRfaWQpOwogCX0KIAotCW91dGwoY3B1X3RvX2xlMzIoc2NiLT5zY2JfYnVzYWRkciksIGhhLT5pb19hZGRyICsgSVBTX1JFR19JMk9fSU5NU0dRKTsKKwlvdXRsKHNjYi0+c2NiX2J1c2FkZHIsIGhhLT5pb19hZGRyICsgSVBTX1JFR19JMk9fSU5NU0dRKTsKIAogCXJldHVybiAoSVBTX1NVQ0NFU1MpOwogfQpAQCAtNjQxMiw3ICs2Mzc2LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBidWZmZXJzaXplOyBpKyspIHsKIAkJLyogd3JpdGUgYSBieXRlICovCi0JCW91dGwoY3B1X3RvX2xlMzIoaSArIG9mZnNldCksIGhhLT5pb19hZGRyICsgSVBTX1JFR19GTEFQKTsKKwkJb3V0bChpICsgb2Zmc2V0LCBoYS0+aW9fYWRkciArIElQU19SRUdfRkxBUCk7CiAJCWlmIChoYS0+cGNpZGV2LT5yZXZpc2lvbiA9PSBJUFNfUkVWSURfVFJPTUJPTkU2NCkKIAkJCXVkZWxheSgyNSk7CS8qIDI1IHVzICovCiAKQEAgLTY1OTcsNyArNjU2MSw3IEBACiAJaWYgKGluYihoYS0+aW9fYWRkciArIElQU19SRUdfRkxEUCkgIT0gMHg1NSkKIAkJcmV0dXJuICgxKTsKIAotCW91dGwoY3B1X3RvX2xlMzIoMSksIGhhLT5pb19hZGRyICsgSVBTX1JFR19GTEFQKTsKKwlvdXRsKDEsIGhhLT5pb19hZGRyICsgSVBTX1JFR19GTEFQKTsKIAlpZiAoaGEtPnBjaWRldi0+cmV2aXNpb24gPT0gSVBTX1JFVklEX1RST01CT05FNjQpCiAJCXVkZWxheSgyNSk7CS8qIDI1IHVzICovCiAJaWYgKGluYihoYS0+aW9fYWRkciArIElQU19SRUdfRkxEUCkgIT0gMHhBQSkKQEAgLTY2MDYsNyArNjU3MCw3IEBACiAJY2hlY2tzdW0gPSAweGZmOwogCWZvciAoaSA9IDI7IGkgPCBidWZmZXJzaXplOyBpKyspIHsKIAotCQlvdXRsKGNwdV90b19sZTMyKGkgKyBvZmZzZXQpLCBoYS0+aW9fYWRkciArIElQU19SRUdfRkxBUCk7CisJCW91dGwoaSArIG9mZnNldCwgaGEtPmlvX2FkZHIgKyBJUFNfUkVHX0ZMQVApOwogCQlpZiAoaGEtPnBjaWRldi0+cmV2aXNpb24gPT0gSVBTX1JFVklEX1RST01CT05FNjQpCiAJCQl1ZGVsYXkoMjUpOwkvKiAyNSB1cyAqLwogCkBAIC02ODQyLDcgKzY4MDYsNiBAQAogCXNoLT5zZ190YWJsZXNpemUgPSBzaC0+aG9zdHQtPnNnX3RhYmxlc2l6ZTsKIAlzaC0+Y2FuX3F1ZXVlID0gc2gtPmhvc3R0LT5jYW5fcXVldWU7CiAJc2gtPmNtZF9wZXJfbHVuID0gc2gtPmhvc3R0LT5jbWRfcGVyX2x1bjsKLQlzaC0+dW5jaGVja2VkX2lzYV9kbWEgPSBzaC0+aG9zdHQtPnVuY2hlY2tlZF9pc2FfZG1hOwogCXNoLT51c2VfY2x1c3RlcmluZyA9IHNoLT5ob3N0dC0+dXNlX2NsdXN0ZXJpbmc7CiAJc2gtPm1heF9zZWN0b3JzID0gMTI4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggOGExNzg2NzQuLjcyYjliMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTUyOCw2ICs1MjgsNyBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IGN0YXNrLT5zYzsKIAlpbnQgZGF0YXNuID0gYmUzMl90b19jcHUocmhkci0+ZGF0YXNuKTsKKwl1bnNpZ25lZCB0b3RhbF9pbl9sZW5ndGggPSBzY3NpX2luKHNjKS0+bGVuZ3RoOwogCiAJaXNjc2lfdXBkYXRlX2NtZHNuKHNlc3Npb24sIChzdHJ1Y3QgaXNjc2lfbm9waW4qKXJoZHIpOwogCWlmICh0Y3BfY29ubi0+aW4uZGF0YWxlbiA9PSAwKQpAQCAtNTQyLDEwICs1NDMsMTAgQEAKIAl0Y3BfY3Rhc2stPmV4cF9kYXRhc24rKzsKIAogCXRjcF9jdGFzay0+ZGF0YV9vZmZzZXQgPSBiZTMyX3RvX2NwdShyaGRyLT5vZmZzZXQpOwotCWlmICh0Y3BfY3Rhc2stPmRhdGFfb2Zmc2V0ICsgdGNwX2Nvbm4tPmluLmRhdGFsZW4gPiBzY3NpX2J1ZmZsZW4oc2MpKSB7CisJaWYgKHRjcF9jdGFzay0+ZGF0YV9vZmZzZXQgKyB0Y3BfY29ubi0+aW4uZGF0YWxlbiA+IHRvdGFsX2luX2xlbmd0aCkgewogCQlkZWJ1Z190Y3AoIiVzOiBkYXRhX29mZnNldCglZCkgKyBkYXRhX2xlbiglZCkgPiB0b3RhbF9sZW5ndGhfaW4oJWQpXG4iLAogCQkgICAgICAgICAgX19GVU5DVElPTl9fLCB0Y3BfY3Rhc2stPmRhdGFfb2Zmc2V0LAotCQkgICAgICAgICAgdGNwX2Nvbm4tPmluLmRhdGFsZW4sIHNjc2lfYnVmZmxlbihzYykpOworCQkgICAgICAgICAgdGNwX2Nvbm4tPmluLmRhdGFsZW4sIHRvdGFsX2luX2xlbmd0aCk7CiAJCXJldHVybiBJU0NTSV9FUlJfREFUQV9PRkZTRVQ7CiAJfQogCkBAIC01NTgsOCArNTU5LDggQEAKIAogCQkJaWYgKHJlc19jb3VudCA+IDAgJiYKIAkJCSAgICAocmhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVyB8fAotCQkJICAgICByZXNfY291bnQgPD0gc2NzaV9idWZmbGVuKHNjKSkpCi0JCQkJc2NzaV9zZXRfcmVzaWQoc2MsIHJlc19jb3VudCk7CisJCQkgICAgIHJlc19jb3VudCA8PSB0b3RhbF9pbl9sZW5ndGgpKQorCQkJCXNjc2lfaW4oc2MpLT5yZXNpZCA9IHJlc19jb3VudDsKIAkJCWVsc2UKIAkJCQlzYy0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KSB8CiAJCQkJCXJoZHItPmNtZF9zdGF0dXM7CkBAIC02NzAsMTEgKzY3MSwxMSBAQAogCQkJICAgIHIydC0+ZGF0YV9sZW5ndGgsIHNlc3Npb24tPm1heF9idXJzdCk7CiAKIAlyMnQtPmRhdGFfb2Zmc2V0ID0gYmUzMl90b19jcHUocmhkci0+ZGF0YV9vZmZzZXQpOwotCWlmIChyMnQtPmRhdGFfb2Zmc2V0ICsgcjJ0LT5kYXRhX2xlbmd0aCA+IHNjc2lfYnVmZmxlbihjdGFzay0+c2MpKSB7CisJaWYgKHIydC0+ZGF0YV9vZmZzZXQgKyByMnQtPmRhdGFfbGVuZ3RoID4gc2NzaV9vdXQoY3Rhc2stPnNjKS0+bGVuZ3RoKSB7CiAJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLAogCQkJCSAgImludmFsaWQgUjJUIHdpdGggZGF0YSBsZW4gJXUgYXQgb2Zmc2V0ICV1ICIKIAkJCQkgICJhbmQgdG90YWwgbGVuZ3RoICVkXG4iLCByMnQtPmRhdGFfbGVuZ3RoLAotCQkJCSAgcjJ0LT5kYXRhX29mZnNldCwgc2NzaV9idWZmbGVuKGN0YXNrLT5zYykpOworCQkJCSAgcjJ0LT5kYXRhX29mZnNldCwgc2NzaV9vdXQoY3Rhc2stPnNjKS0+bGVuZ3RoKTsKIAkJX19rZmlmb19wdXQodGNwX2N0YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBTEVOOwpAQCAtNzcxLDYgKzc3Miw3IEBACiAJCWlmICh0Y3BfY29ubi0+aW4uZGF0YWxlbikgewogCQkJc3RydWN0IGlzY3NpX3RjcF9jbWRfdGFzayAqdGNwX2N0YXNrID0gY3Rhc2stPmRkX2RhdGE7CiAJCQlzdHJ1Y3QgaGFzaF9kZXNjICpyeF9oYXNoID0gTlVMTDsKKwkJCXN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIgPSBzY3NpX2luKGN0YXNrLT5zYyk7CiAKIAkJCS8qCiAJCQkgKiBTZXR1cCBjb3B5IG9mIERhdGEtSW4gaW50byB0aGUgU2NzaV9DbW5kCkBAIC03ODgsOCArNzkwLDggQEAKIAkJCQkgIHRjcF9jdGFzay0+ZGF0YV9vZmZzZXQsCiAJCQkJICB0Y3BfY29ubi0+aW4uZGF0YWxlbik7CiAJCQlyZXR1cm4gaXNjc2lfc2VnbWVudF9zZWVrX3NnKCZ0Y3BfY29ubi0+aW4uc2VnbWVudCwKLQkJCQkJCSAgICAgc2NzaV9zZ2xpc3QoY3Rhc2stPnNjKSwKLQkJCQkJCSAgICAgc2NzaV9zZ19jb3VudChjdGFzay0+c2MpLAorCQkJCQkJICAgICBzZGItPnRhYmxlLnNnbCwKKwkJCQkJCSAgICAgc2RiLT50YWJsZS5uZW50cywKIAkJCQkJCSAgICAgdGNwX2N0YXNrLT5kYXRhX29mZnNldCwKIAkJCQkJCSAgICAgdGNwX2Nvbm4tPmluLmRhdGFsZW4sCiAJCQkJCQkgICAgIGlzY3NpX3RjcF9wcm9jZXNzX2RhdGFfaW4sCkBAIC0xMzMyLDcgKzEzMzQsOCBAQAogCQlyZXR1cm4gMDsKIAogCS8qIElmIHdlIGhhdmUgaW1tZWRpYXRlIGRhdGEsIGF0dGFjaCBhIHBheWxvYWQgKi8KLQllcnIgPSBpc2NzaV90Y3Bfc2VuZF9kYXRhX3ByZXAoY29ubiwgc2NzaV9zZ2xpc3Qoc2MpLCBzY3NpX3NnX2NvdW50KHNjKSwKKwllcnIgPSBpc2NzaV90Y3Bfc2VuZF9kYXRhX3ByZXAoY29ubiwgc2NzaV9vdXQoc2MpLT50YWJsZS5zZ2wsCisJCQkJICAgICAgIHNjc2lfb3V0KHNjKS0+dGFibGUubmVudHMsCiAJCQkJICAgICAgIDAsIGN0YXNrLT5pbW1fY291bnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xMzg2LDYgKzEzODksNyBAQAogewogCXN0cnVjdCBpc2NzaV90Y3BfY21kX3Rhc2sgKnRjcF9jdGFzayA9IGN0YXNrLT5kZF9kYXRhOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNjID0gY3Rhc2stPnNjOworCXN0cnVjdCBzY3NpX2RhdGFfYnVmZmVyICpzZGIgPSBzY3NpX291dChzYyk7CiAJaW50IHJjID0gMDsKIAogZmx1c2g6CkBAIC0xNDEyLDkgKzE0MTYsOCBAQAogCQkJCWN0YXNrLT5pdHQsIHRjcF9jdGFzay0+c2VudCwgY3Rhc2stPmRhdGFfY291bnQpOwogCiAJCWlzY3NpX3RjcF9zZW5kX2hkcl9wcmVwKGNvbm4sIGhkciwgc2l6ZW9mKCpoZHIpKTsKLQkJcmMgPSBpc2NzaV90Y3Bfc2VuZF9kYXRhX3ByZXAoY29ubiwgc2NzaV9zZ2xpc3Qoc2MpLAotCQkJCQkgICAgICBzY3NpX3NnX2NvdW50KHNjKSwKLQkJCQkJICAgICAgdGNwX2N0YXNrLT5zZW50LAorCQlyYyA9IGlzY3NpX3RjcF9zZW5kX2RhdGFfcHJlcChjb25uLCBzZGItPnRhYmxlLnNnbCwKKwkJCQkJICAgICAgc2RiLT50YWJsZS5uZW50cywgdGNwX2N0YXNrLT5zZW50LAogCQkJCQkgICAgICBjdGFzay0+ZGF0YV9jb3VudCk7CiAJCWlmIChyYykKIAkJCWdvdG8gZmFpbDsKQEAgLTE0NjAsOCArMTQ2Myw4IEBACiAJCWlzY3NpX3RjcF9zZW5kX2hkcl9wcmVwKGNvbm4sICZyMnQtPmR0YXNrLmhkciwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpKTsKIAotCQlyYyA9IGlzY3NpX3RjcF9zZW5kX2RhdGFfcHJlcChjb25uLCBzY3NpX3NnbGlzdChzYyksCi0JCQkJCSAgICAgIHNjc2lfc2dfY291bnQoc2MpLAorCQlyYyA9IGlzY3NpX3RjcF9zZW5kX2RhdGFfcHJlcChjb25uLCBzZGItPnRhYmxlLnNnbCwKKwkJCQkJICAgICAgc2RiLT50YWJsZS5uZW50cywKIAkJCQkJICAgICAgcjJ0LT5kYXRhX29mZnNldCArIHIydC0+c2VudCwKIAkJCQkJICAgICAgcjJ0LT5kYXRhX2NvdW50KTsKIAkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCA1OWY4NDQ1Li4wMTBjMWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtMTM3LDYgKzEzNyw3MCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogbWFrZSBhbiBleHRlbmRlZCBjZGIgQUhTCisgKi8KK3N0YXRpYyBpbnQgaXNjc2lfcHJlcF9lY2RiX2FocyhzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKmN0YXNrKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGN0YXNrLT5zYzsKKwl1bnNpZ25lZCBybGVuLCBwYWRfbGVuOworCXVuc2lnbmVkIHNob3J0IGFoc2xlbmd0aDsKKwlzdHJ1Y3QgaXNjc2lfZWNkYl9haGRyICplY2RiX2FoZHI7CisJaW50IHJjOworCisJZWNkYl9haGRyID0gaXNjc2lfbmV4dF9oZHIoY3Rhc2spOworCXJsZW4gPSBjbWQtPmNtZF9sZW4gLSBJU0NTSV9DREJfU0laRTsKKworCUJVR19PTihybGVuID4gc2l6ZW9mKGVjZGJfYWhkci0+ZWNkYikpOworCWFoc2xlbmd0aCA9IHJsZW4gKyBzaXplb2YoZWNkYl9haGRyLT5yZXNlcnZlZCk7CisKKwlwYWRfbGVuID0gaXNjc2lfcGFkZGluZyhybGVuKTsKKworCXJjID0gaXNjc2lfYWRkX2hkcihjdGFzaywgc2l6ZW9mKGVjZGJfYWhkci0+YWhzbGVuZ3RoKSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihlY2RiX2FoZHItPmFoc3R5cGUpICsgYWhzbGVuZ3RoICsgcGFkX2xlbik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAocGFkX2xlbikKKwkJbWVtc2V0KCZlY2RiX2FoZHItPmVjZGJbcmxlbl0sIDAsIHBhZF9sZW4pOworCisJZWNkYl9haGRyLT5haHNsZW5ndGggPSBjcHVfdG9fYmUxNihhaHNsZW5ndGgpOworCWVjZGJfYWhkci0+YWhzdHlwZSA9IElTQ1NJX0FIU1RZUEVfQ0RCOworCWVjZGJfYWhkci0+cmVzZXJ2ZWQgPSAwOworCW1lbWNweShlY2RiX2FoZHItPmVjZGIsIGNtZC0+Y21uZCArIElTQ1NJX0NEQl9TSVpFLCBybGVuKTsKKworCWRlYnVnX3Njc2koImlzY3NpX3ByZXBfZWNkYl9haHM6IHZhcmxlbl9jZGJfbGVuICVkICIKKwkJICAgInJsZW4gJWQgcGFkX2xlbiAlZCBhaHNfbGVuZ3RoICVkIGlzY3NpX2hlYWRlcnNfc2l6ZSAldVxuIiwKKwkJICAgY21kLT5jbWRfbGVuLCBybGVuLCBwYWRfbGVuLCBhaHNsZW5ndGgsIGN0YXNrLT5oZHJfbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzY3NpX3ByZXBfYmlkaV9haHMoc3RydWN0IGlzY3NpX2NtZF90YXNrICpjdGFzaykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IGN0YXNrLT5zYzsKKwlzdHJ1Y3QgaXNjc2lfcmxlbmd0aF9haGRyICpybGVuX2FoZHI7CisJaW50IHJjOworCisJcmxlbl9haGRyID0gaXNjc2lfbmV4dF9oZHIoY3Rhc2spOworCXJjID0gaXNjc2lfYWRkX2hkcihjdGFzaywgc2l6ZW9mKCpybGVuX2FoZHIpKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJsZW5fYWhkci0+YWhzbGVuZ3RoID0KKwkJY3B1X3RvX2JlMTYoc2l6ZW9mKHJsZW5fYWhkci0+cmVhZF9sZW5ndGgpICsKKwkJCQkJCSAgc2l6ZW9mKHJsZW5fYWhkci0+cmVzZXJ2ZWQpKTsKKwlybGVuX2FoZHItPmFoc3R5cGUgPSBJU0NTSV9BSFNUWVBFX1JMRU5HVEg7CisJcmxlbl9haGRyLT5yZXNlcnZlZCA9IDA7CisJcmxlbl9haGRyLT5yZWFkX2xlbmd0aCA9IGNwdV90b19iZTMyKHNjc2lfaW4oc2MpLT5sZW5ndGgpOworCisJZGVidWdfc2NzaSgiYmlkaS1pbiBybGVuX2FoZHItPnJlYWRfbGVuZ3RoKCVkKSAiCisJCSAgICJybGVuX2FoZHItPmFoc2xlbmd0aCglZClcbiIsCisJCSAgIGJlMzJfdG9fY3B1KHJsZW5fYWhkci0+cmVhZF9sZW5ndGgpLAorCQkgICBiZTE2X3RvX2NwdShybGVuX2FoZHItPmFoc2xlbmd0aCkpOworCXJldHVybiAwOworfQorCiAvKioKICAqIGlzY3NpX3ByZXBfc2NzaV9jbWRfcGR1IC0gcHJlcCBpc2NzaSBzY3NpIGNtZCBwZHUKICAqIEBjdGFzazogaXNjc2kgY21kIHRhc2sKQEAgLTE1MCw3ICsyMTQsNyBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfY21kICpoZHIgPSBjdGFzay0+aGRyOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNjID0gY3Rhc2stPnNjOwotCXVuc2lnbmVkIGhkcmxlbmd0aDsKKwl1bnNpZ25lZCBoZHJsZW5ndGgsIGNtZF9sZW47CiAJaW50IHJjOwogCiAJY3Rhc2stPmhkcl9sZW4gPSAwOwpAQCAtMTYxLDE3ICsyMjUsMzAgQEAKIAloZHItPmZsYWdzID0gSVNDU0lfQVRUUl9TSU1QTEU7CiAJaW50X3RvX3Njc2lsdW4oc2MtPmRldmljZS0+bHVuLCAoc3RydWN0IHNjc2lfbHVuICopaGRyLT5sdW4pOwogCWhkci0+aXR0ID0gYnVpbGRfaXR0KGN0YXNrLT5pdHQsIHNlc3Npb24tPmFnZSk7Ci0JaGRyLT5kYXRhX2xlbmd0aCA9IGNwdV90b19iZTMyKHNjc2lfYnVmZmxlbihzYykpOwogCWhkci0+Y21kc24gPSBjcHVfdG9fYmUzMihzZXNzaW9uLT5jbWRzbik7CiAJc2Vzc2lvbi0+Y21kc24rKzsKIAloZHItPmV4cF9zdGF0c24gPSBjcHVfdG9fYmUzMihjb25uLT5leHBfc3RhdHNuKTsKLQltZW1jcHkoaGRyLT5jZGIsIHNjLT5jbW5kLCBzYy0+Y21kX2xlbik7Ci0JaWYgKHNjLT5jbWRfbGVuIDwgTUFYX0NPTU1BTkRfU0laRSkKLQkJbWVtc2V0KCZoZHItPmNkYltzYy0+Y21kX2xlbl0sIDAsCi0JCQlNQVhfQ09NTUFORF9TSVpFIC0gc2MtPmNtZF9sZW4pOworCWNtZF9sZW4gPSBzYy0+Y21kX2xlbjsKKwlpZiAoY21kX2xlbiA8IElTQ1NJX0NEQl9TSVpFKQorCQltZW1zZXQoJmhkci0+Y2RiW2NtZF9sZW5dLCAwLCBJU0NTSV9DREJfU0laRSAtIGNtZF9sZW4pOworCWVsc2UgaWYgKGNtZF9sZW4gPiBJU0NTSV9DREJfU0laRSkgeworCQlyYyA9IGlzY3NpX3ByZXBfZWNkYl9haHMoY3Rhc2spOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJCWNtZF9sZW4gPSBJU0NTSV9DREJfU0laRTsKKwl9CisJbWVtY3B5KGhkci0+Y2RiLCBzYy0+Y21uZCwgY21kX2xlbik7CiAKIAljdGFzay0+aW1tX2NvdW50ID0gMDsKKwlpZiAoc2NzaV9iaWRpX2NtbmQoc2MpKSB7CisJCWhkci0+ZmxhZ3MgfD0gSVNDU0lfRkxBR19DTURfUkVBRDsKKwkJcmMgPSBpc2NzaV9wcmVwX2JpZGlfYWhzKGN0YXNrKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCX0KIAlpZiAoc2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwkJdW5zaWduZWQgb3V0X2xlbiA9IHNjc2lfb3V0KHNjKS0+bGVuZ3RoOworCQloZHItPmRhdGFfbGVuZ3RoID0gY3B1X3RvX2JlMzIob3V0X2xlbik7CiAJCWhkci0+ZmxhZ3MgfD0gSVNDU0lfRkxBR19DTURfV1JJVEU7CiAJCS8qCiAJCSAqIFdyaXRlIGNvdW50ZXJzOgpAQCAtMTkyLDE5ICsyNjksMTkgQEAKIAkJY3Rhc2stPnVuc29sX2RhdGFzbiA9IDA7CiAKIAkJaWYgKHNlc3Npb24tPmltbV9kYXRhX2VuKSB7Ci0JCQlpZiAoc2NzaV9idWZmbGVuKHNjKSA+PSBzZXNzaW9uLT5maXJzdF9idXJzdCkKKwkJCWlmIChvdXRfbGVuID49IHNlc3Npb24tPmZpcnN0X2J1cnN0KQogCQkJCWN0YXNrLT5pbW1fY291bnQgPSBtaW4oc2Vzc2lvbi0+Zmlyc3RfYnVyc3QsCiAJCQkJCQkJY29ubi0+bWF4X3htaXRfZGxlbmd0aCk7CiAJCQllbHNlCi0JCQkJY3Rhc2stPmltbV9jb3VudCA9IG1pbihzY3NpX2J1ZmZsZW4oc2MpLAorCQkJCWN0YXNrLT5pbW1fY291bnQgPSBtaW4ob3V0X2xlbiwKIAkJCQkJCQljb25uLT5tYXhfeG1pdF9kbGVuZ3RoKTsKIAkJCWh0b24yNChoZHItPmRsZW5ndGgsIGN0YXNrLT5pbW1fY291bnQpOwogCQl9IGVsc2UKIAkJCXplcm9fZGF0YShoZHItPmRsZW5ndGgpOwogCiAJCWlmICghc2Vzc2lvbi0+aW5pdGlhbF9yMnRfZW4pIHsKLQkJCWN0YXNrLT51bnNvbF9jb3VudCA9IG1pbigoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QpLAotCQkJCShzY3NpX2J1ZmZsZW4oc2MpKSkgLSBjdGFzay0+aW1tX2NvdW50OworCQkJY3Rhc2stPnVuc29sX2NvdW50ID0gbWluKHNlc3Npb24tPmZpcnN0X2J1cnN0LCBvdXRfbGVuKQorCQkJCQkJCSAgICAgLSBjdGFzay0+aW1tX2NvdW50OwogCQkJY3Rhc2stPnVuc29sX29mZnNldCA9IGN0YXNrLT5pbW1fY291bnQ7CiAJCX0KIApAQCAtMjE0LDYgKzI5MSw3IEBACiAJfSBlbHNlIHsKIAkJaGRyLT5mbGFncyB8PSBJU0NTSV9GTEFHX0NNRF9GSU5BTDsKIAkJemVyb19kYXRhKGhkci0+ZGxlbmd0aCk7CisJCWhkci0+ZGF0YV9sZW5ndGggPSBjcHVfdG9fYmUzMihzY3NpX2luKHNjKS0+bGVuZ3RoKTsKIAogCQlpZiAoc2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKIAkJCWhkci0+ZmxhZ3MgfD0gSVNDU0lfRkxBR19DTURfUkVBRDsKQEAgLTIzMiwxMCArMzEwLDEyIEBACiAJCXJldHVybiBFSU87CiAKIAljb25uLT5zY3NpY21kX3BkdXNfY250Kys7Ci0JZGVidWdfc2NzaSgiaXNjc2kgcHJlcCBbJXMgY2lkICVkIHNjICVwIGNkYiAweCV4IGl0dCAweCV4IGxlbiAlZCAiCi0JCSJjbWRzbiAlZCB3aW4gJWRdXG4iLAotCQlzYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSA/ICJ3cml0ZSIgOiAicmVhZCIsCi0JCWNvbm4tPmlkLCBzYywgc2MtPmNtbmRbMF0sIGN0YXNrLT5pdHQsIHNjc2lfYnVmZmxlbihzYyksCisJZGVidWdfc2NzaSgiaXNjc2kgcHJlcCBbJXMgY2lkICVkIHNjICVwIGNkYiAweCV4IGl0dCAweCV4ICIKKwkJImxlbiAlZCBiaWRpX2xlbiAlZCBjbWRzbiAlZCB3aW4gJWRdXG4iLAorCQlzY3NpX2JpZGlfY21uZChzYykgPyAiYmlkaXJlY3Rpb25hbCIgOgorCQkgICAgIHNjLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFID8gIndyaXRlIiA6ICJyZWFkIiwKKwkJY29ubi0+aWQsIHNjLCBzYy0+Y21uZFswXSwgY3Rhc2stPml0dCwKKwkJc2NzaV9idWZmbGVuKHNjKSwgc2NzaV9iaWRpX2NtbmQoc2MpID8gc2NzaV9pbihzYyktPmxlbmd0aCA6IDAsCiAJCXNlc3Npb24tPmNtZHNuLCBzZXNzaW9uLT5tYXhfY21kc24gLSBzZXNzaW9uLT5leHBfY21kc24gKyAxKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI5OCw3ICszNzgsMTIgQEAKIAkJY29ubi0+c2Vzc2lvbi0+dHQtPmNsZWFudXBfY21kX3Rhc2soY29ubiwgY3Rhc2spOwogCiAJc2MtPnJlc3VsdCA9IGVycjsKLQlzY3NpX3NldF9yZXNpZChzYywgc2NzaV9idWZmbGVuKHNjKSk7CisJaWYgKCFzY3NpX2JpZGlfY21uZChzYykpCisJCXNjc2lfc2V0X3Jlc2lkKHNjLCBzY3NpX2J1ZmZsZW4oc2MpKTsKKwllbHNlIHsKKwkJc2NzaV9vdXQoc2MpLT5yZXNpZCA9IHNjc2lfb3V0KHNjKS0+bGVuZ3RoOworCQlzY3NpX2luKHNjKS0+cmVzaWQgPSBzY3NpX2luKHNjKS0+bGVuZ3RoOworCX0KIAlpZiAoY29ubi0+Y3Rhc2sgPT0gY3Rhc2spCiAJCWNvbm4tPmN0YXNrID0gTlVMTDsKIAkvKiByZWxlYXNlIHJlZiBmcm9tIHF1ZXVlY29tbWFuZCAqLwpAQCAtNDMzLDYgKzUxOCwxOCBAQAogCQkJICAgbWluX3QodWludDE2X3QsIHNlbnNlbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKIAl9CiAKKwlpZiAocmhkci0+ZmxhZ3MgJiAoSVNDU0lfRkxBR19DTURfQklESV9VTkRFUkZMT1cgfAorCQkJICAgSVNDU0lfRkxBR19DTURfQklESV9PVkVSRkxPVykpIHsKKwkJaW50IHJlc19jb3VudCA9IGJlMzJfdG9fY3B1KHJoZHItPmJpX3Jlc2lkdWFsX2NvdW50KTsKKworCQlpZiAoc2NzaV9iaWRpX2NtbmQoc2MpICYmIHJlc19jb3VudCA+IDAgJiYKKwkJCQkocmhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9CSURJX09WRVJGTE9XIHx8CisJCQkJIHJlc19jb3VudCA8PSBzY3NpX2luKHNjKS0+bGVuZ3RoKSkKKwkJCXNjc2lfaW4oc2MpLT5yZXNpZCA9IHJlc19jb3VudDsKKwkJZWxzZQorCQkJc2MtPnJlc3VsdCA9IChESURfQkFEX1RBUkdFVCA8PCAxNikgfCByaGRyLT5jbWRfc3RhdHVzOworCX0KKwogCWlmIChyaGRyLT5mbGFncyAmIChJU0NTSV9GTEFHX0NNRF9VTkRFUkZMT1cgfAogCSAgICAgICAgICAgICAgICAgICBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVykpIHsKIAkJaW50IHJlc19jb3VudCA9IGJlMzJfdG9fY3B1KHJoZHItPnJlc2lkdWFsX2NvdW50KTsKQEAgLTQ0MCwxMyArNTM3LDExIEBACiAJCWlmIChyZXNfY291bnQgPiAwICYmCiAJCSAgICAocmhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVyB8fAogCQkgICAgIHJlc19jb3VudCA8PSBzY3NpX2J1ZmZsZW4oc2MpKSkKKwkJCS8qIHdyaXRlIHNpZGUgZm9yIGJpZGkgb3IgdW5pLWlvIHNldF9yZXNpZCAqLwogCQkJc2NzaV9zZXRfcmVzaWQoc2MsIHJlc19jb3VudCk7CiAJCWVsc2UKIAkJCXNjLT5yZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpIHwgcmhkci0+Y21kX3N0YXR1czsKLQl9IGVsc2UgaWYgKHJoZHItPmZsYWdzICYgKElTQ1NJX0ZMQUdfQ01EX0JJRElfVU5ERVJGTE9XIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIElTQ1NJX0ZMQUdfQ01EX0JJRElfT1ZFUkZMT1cpKQotCQlzYy0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KSB8IHJoZHItPmNtZF9zdGF0dXM7Ci0KKwl9CiBvdXQ6CiAJZGVidWdfc2NzaSgiZG9uZSBbc2MgJWx4IHJlcyAlZCBpdHQgMHgleF1cbiIsCiAJCSAgIChsb25nKXNjLCBzYy0+cmVzdWx0LCBjdGFzay0+aXR0KTsKQEAgLTExMDIsNyArMTE5NywxMiBAQAogZmF1bHQ6CiAJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwogCWRlYnVnX3Njc2koImlzY3NpOiBjbWQgMHgleCBpcyBub3QgcXVldWVkICglZClcbiIsIHNjLT5jbW5kWzBdLCByZWFzb24pOwotCXNjc2lfc2V0X3Jlc2lkKHNjLCBzY3NpX2J1ZmZsZW4oc2MpKTsKKwlpZiAoIXNjc2lfYmlkaV9jbW5kKHNjKSkKKwkJc2NzaV9zZXRfcmVzaWQoc2MsIHNjc2lfYnVmZmxlbihzYykpOworCWVsc2UgeworCQlzY3NpX291dChzYyktPnJlc2lkID0gc2NzaV9vdXQoc2MpLT5sZW5ndGg7CisJCXNjc2lfaW4oc2MpLT5yZXNpZCA9IHNjc2lfaW4oc2MpLT5sZW5ndGg7CisJfQogCXNjLT5zY3NpX2RvbmUoc2MpOwogCXNwaW5fbG9jayhob3N0LT5ob3N0X2xvY2spOwogCXJldHVybiAwOwpAQCAtMTcwOCw4ICsxODA4LDggQEAKIAkJcWRlcHRoID0gSVNDU0lfREVGX0NNRF9QRVJfTFVOOwogCX0KIAotCWlmICghaXNfcG93ZXJfb2ZfMihjbWRzX21heCkgfHwKLQkgICAgY21kc19tYXggPj0gSVNDU0lfTUdNVF9JVFRfT0ZGU0VUKSB7CisJaWYgKCFpc19wb3dlcl9vZl8yKGNtZHNfbWF4KSB8fCBjbWRzX21heCA+PSBJU0NTSV9NR01UX0lUVF9PRkZTRVQgfHwKKwkgICAgY21kc19tYXggPCAyKSB7CiAJCWlmIChjbWRzX21heCAhPSAwKQogCQkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaTogaW52YWxpZCBjYW5fcXVldWUgb2YgJWQuICIKIAkJCSAgICAgICAiY2FuX3F1ZXVlIG11c3QgYmUgYSBwb3dlciBvZiAyIGFuZCBiZXR3ZWVuICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMKaW5kZXggMDk5NmY4Ni4uNzQ0ZjA2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMKQEAgLTE3OCw4ICsxNzgsOCBAQAogCXRhc2stPnVsZGRfdGFzayA9IHFjOwogCWlmIChhdGFfaXNfYXRhcGkocWMtPnRmLnByb3RvY29sKSkgewogCQltZW1jcHkodGFzay0+YXRhX3Rhc2suYXRhcGlfcGFja2V0LCBxYy0+Y2RiLCBxYy0+ZGV2LT5jZGJfbGVuKTsKLQkJdGFzay0+dG90YWxfeGZlcl9sZW4gPSBxYy0+bmJ5dGVzICsgcWMtPnBhZF9sZW47Ci0JCXRhc2stPm51bV9zY2F0dGVyID0gcWMtPnBhZF9sZW4gPyBxYy0+bl9lbGVtICsgMSA6IHFjLT5uX2VsZW07CisJCXRhc2stPnRvdGFsX3hmZXJfbGVuID0gcWMtPm5ieXRlczsKKwkJdGFzay0+bnVtX3NjYXR0ZXIgPSBxYy0+bl9lbGVtOwogCX0gZWxzZSB7CiAJCWZvcl9lYWNoX3NnKHFjLT5zZywgc2csIHFjLT5uX2VsZW0sIHNpKQogCQkJeGZlciArPSBzZy0+bGVuZ3RoOwpAQCAtMjI1LDEwICsyMjUsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHU4IHNhc19hdGFfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgYm9vbCBzYXNfYXRhX3FjX2ZpbGxfcnRmKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IGFwLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGRldi0+c2F0YV9kZXYudGYuY29tbWFuZDsKKwlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gcWMtPmFwLT5wcml2YXRlX2RhdGE7CisKKwltZW1jcHkoJnFjLT5yZXN1bHRfdGYsICZkZXYtPnNhdGFfZGV2LnRmLCBzaXplb2YocWMtPnJlc3VsdF90ZikpOworCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBzYXNfYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMjM2LDEyICsyMzgsMTIgQEAKIAlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gYXAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc2FzX2ludGVybmFsICppID0KIAkJdG9fc2FzX2ludGVybmFsKGRldi0+cG9ydC0+aGEtPmNvcmUuc2hvc3QtPnRyYW5zcG9ydHQpOwotCWludCByZXMgPSAwOworCWludCByZXMgPSBUTUZfUkVTUF9GVU5DX0ZBSUxFRDsKIAogCWlmIChpLT5kZnQtPmxsZGRfSV9UX25leHVzX3Jlc2V0KQogCQlyZXMgPSBpLT5kZnQtPmxsZGRfSV9UX25leHVzX3Jlc2V0KGRldik7CiAKLQlpZiAocmVzKQorCWlmIChyZXMgIT0gVE1GX1JFU1BfRlVOQ19DT01QTEVURSkKIAkJU0FTX0RQUklOVEsoIiVzOiBVbmFibGUgdG8gcmVzZXQgSSBUIG5leHVzP1xuIiwgX19GVU5DVElPTl9fKTsKIAogCXN3aXRjaCAoZGV2LT5zYXRhX2Rldi5jb21tYW5kX3NldCkgewpAQCAtMjkyLDEyICsyOTQsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2FzX2F0YV90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSBhcC0+cHJpdmF0ZV9kYXRhOwotCW1lbWNweSh0ZiwgJmRldi0+c2F0YV9kZXYudGYsIHNpemVvZiAoKnRmKSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2FzX2F0YV9zY3Jfd3JpdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZ19pbiwKIAkJCSAgICAgIHUzMiB2YWwpCiB7CkBAIC0zNDgsMTQgKzM0NCwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2FzX3NhdGFfb3BzID0gewotCS5jaGVja19zdGF0dXMJCT0gc2FzX2F0YV9jaGVja19zdGF0dXMsCi0JLmNoZWNrX2FsdHN0YXR1cwk9IHNhc19hdGFfY2hlY2tfc3RhdHVzLAotCS5kZXZfc2VsZWN0CQk9IGF0YV9ub29wX2Rldl9zZWxlY3QsCiAJLnBoeV9yZXNldAkJPSBzYXNfYXRhX3BoeV9yZXNldCwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBzYXNfYXRhX3Bvc3RfaW50ZXJuYWwsCi0JLnRmX3JlYWQJCT0gc2FzX2F0YV90Zl9yZWFkLAogCS5xY19wcmVwCQk9IGF0YV9ub29wX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IHNhc19hdGFfcWNfaXNzdWUsCisJLnFjX2ZpbGxfcnRmCQk9IHNhc19hdGFfcWNfZmlsbF9ydGYsCiAJLnBvcnRfc3RhcnQJCT0gYXRhX3Nhc19wb3J0X3N0YXJ0LAogCS5wb3J0X3N0b3AJCT0gYXRhX3Nhc19wb3J0X3N0b3AsCiAJLnNjcl9yZWFkCQk9IHNhc19hdGFfc2NyX3JlYWQsCkBAIC02NTYsMjEgKzY0OSw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHZvaWQgc2FzX3NhdGFfcHJvcGFnYXRlX3Nhc19hZGRyKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICpwb3J0ID0gZGV2LT5wb3J0OwotCXN0cnVjdCBhc2Rfc2FzX3BoeSAgKnBoeTsKLQotCUJVR19PTihkZXYtPnBhcmVudCk7Ci0KLQltZW1jcHkocG9ydC0+YXR0YWNoZWRfc2FzX2FkZHIsIGRldi0+c2FzX2FkZHIsIFNBU19BRERSX1NJWkUpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5waHlfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwaHksICZwb3J0LT5waHlfbGlzdCwgcG9ydF9waHlfZWwpCi0JCW1lbWNweShwaHktPmF0dGFjaGVkX3Nhc19hZGRyLCBkZXYtPnNhc19hZGRyLCBTQVNfQUREUl9TSVpFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5waHlfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci0KICNkZWZpbmUgQVRBX0lERU5USUZZX0RFViAgICAgICAgIDB4RUMKICNkZWZpbmUgQVRBX0lERU5USUZZX1BBQ0tFVF9ERVYgIDB4QTEKICNkZWZpbmUgQVRBX1NFVF9GRUFUVVJFUyAgICAgICAgIDB4RUYKQEAgLTcxMyw3ICs2OTEsNyBAQAogCQkvKiBpbmNvbXBsZXRlIHJlc3BvbnNlICovCiAJCVNBU19EUFJJTlRLKCJzZW5kaW5nIFNFVCBGRUFUVVJFL1BVUF9TVEJZX1NQSU5fVVAgdG8gIgogCQkJICAgICJkZXYgJWxseFxuIiwgU0FTX0FERFIoZGV2LT5zYXNfYWRkcikpOwotCQlpZiAoIWxlMTZfdG9fY3B1KGlkZW50aWZ5X3hbODNdICYgKDE8PDYpKSkKKwkJaWYgKCEoaWRlbnRpZnlfeFs4M10gJiBjcHVfdG9fbGUxNigxPDw2KSkpCiAJCQlnb3RvIGNvbnQxOwogCQlyZXMgPSBzYXNfaXNzdWVfYXRhX2NtZChkZXYsIEFUQV9TRVRfRkVBVFVSRVMsCiAJCQkJCUFUQV9GRUFUVVJFX1BVUF9TVEJZX1NQSU5fVVAsCkBAIC03MjgsMjYgKzcwNiw2IEBACiAJCQlnb3RvIG91dF9lcnI7CiAJfQogY29udDE6Ci0JLyogR2V0IFdXTiAqLwotCWlmIChkZXYtPnBvcnQtPm9vYl9tb2RlICE9IFNBVEFfT09CX01PREUpIHsKLQkJbWVtY3B5KGRldi0+c2FzX2FkZHIsIGRldi0+c2F0YV9kZXYucnBzX3Jlc3AucnBzLnN0cF9zYXNfYWRkciwKLQkJICAgICAgIFNBU19BRERSX1NJWkUpOwotCX0gZWxzZSBpZiAoZGV2LT5zYXRhX2Rldi5jb21tYW5kX3NldCA9PSBBVEFfQ09NTUFORF9TRVQgJiYKLQkJICAgKGxlMTZfdG9fY3B1KGRldi0+c2F0YV9kZXYuaWRlbnRpZnlfZGV2aWNlWzEwOF0pICYgMHhGMDAwKQotCQkgICA9PSAweDUwMDApIHsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJZGV2LT5zYXNfYWRkclsyKmldID0KLQkgICAgIChsZTE2X3RvX2NwdShkZXYtPnNhdGFfZGV2LmlkZW50aWZ5X2RldmljZVsxMDgraV0pICYgMHhGRjAwKSA+PiA4OwotCQkJZGV2LT5zYXNfYWRkclsyKmkrMV0gPQotCSAgICAgIGxlMTZfdG9fY3B1KGRldi0+c2F0YV9kZXYuaWRlbnRpZnlfZGV2aWNlWzEwOCtpXSkgJiAweDAwRkY7Ci0JCX0KLQl9Ci0Jc2FzX2hhc2hfYWRkcihkZXYtPmhhc2hlZF9zYXNfYWRkciwgZGV2LT5zYXNfYWRkcik7Ci0JaWYgKCFkZXYtPnBhcmVudCkKLQkJc2FzX3NhdGFfcHJvcGFnYXRlX3Nhc19hZGRyKGRldik7Ci0KIAkvKiBYWFggSGludDogcmVnaXN0ZXIgdGhpcyBTQVRBIGRldmljZSB3aXRoIFNBVEwuCiAJICAgV2hlbiB0aGlzIHJldHVybnMsIGRldi0+c2F0YV9kZXYtPmx1IGlzIGFsaXZlIGFuZAogCSAgIHByZXNlbnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19kaXNjb3Zlci5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZGlzY292ZXIuYwppbmRleCAzMWI5YWYyLi43MDlhNmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19kaXNjb3Zlci5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2Rpc2NvdmVyLmMKQEAgLTI5NSwxMSArMjk1LDE0IEBACiAJY2FzZSBGQU5PVVRfREVWOgogCQllcnJvciA9IHNhc19kaXNjb3Zlcl9yb290X2V4cGFuZGVyKGRldik7CiAJCWJyZWFrOwotI2lmZGVmIENPTkZJR19TQ1NJX1NBU19BVEEKIAljYXNlIFNBVEFfREVWOgogCWNhc2UgU0FUQV9QTToKKyNpZmRlZiBDT05GSUdfU0NTSV9TQVNfQVRBCiAJCWVycm9yID0gc2FzX2Rpc2NvdmVyX3NhdGEoZGV2KTsKIAkJYnJlYWs7CisjZWxzZQorCQlTQVNfRFBSSU5USygiQVRBIGRldmljZSBzZWVuIGJ1dCBDT05GSUdfU0NTSV9TQVNfQVRBPU4gc28gY2Fubm90IGF0dGFjaFxuIik7CisJCS8qIEZhbGwgdGhyb3VnaCAqLwogI2VuZGlmCiAJZGVmYXVsdDoKIAkJZXJyb3IgPSAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19wb3J0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19wb3J0LmMKaW5kZXggZTFlMmQwOC4uMzlhZTY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3BvcnQuYwpAQCAtOTIsOSArOTIsNiBAQAogCWlmICghcG9ydC0+cGh5KQogCQlwb3J0LT5waHkgPSBwaHktPnBoeTsKIAotCVNBU19EUFJJTlRLKCJwaHklZCBhZGRlZCB0byBwb3J0JWQsIHBoeV9tYXNrOjB4JXhcbiIsIHBoeS0+aWQsCi0JCSAgICBwb3J0LT5pZCwgcG9ydC0+cGh5X21hc2spOwotCiAJaWYgKCoodTY0ICopcG9ydC0+YXR0YWNoZWRfc2FzX2FkZHIgPT0gMCkgewogCQlwb3J0LT5jbGFzcyA9IHBoeS0+Y2xhc3M7CiAJCW1lbWNweShwb3J0LT5hdHRhY2hlZF9zYXNfYWRkciwgcGh5LT5hdHRhY2hlZF9zYXNfYWRkciwKQEAgLTExNSw2ICsxMTIsMTEgQEAKIAl9CiAJc2FzX3BvcnRfYWRkX3BoeShwb3J0LT5wb3J0LCBwaHktPnBoeSk7CiAKKwlTQVNfRFBSSU5USygiJXMgYWRkZWQgdG8gJXMsIHBoeV9tYXNrOjB4JXggKCUxNmxseClcbiIsCisJCSAgICBwaHktPnBoeS0+ZGV2LmJ1c19pZCxwb3J0LT5wb3J0LT5kZXYuYnVzX2lkLAorCQkgICAgcG9ydC0+cGh5X21hc2ssCisJCSAgICBTQVNfQUREUihwb3J0LT5hdHRhY2hlZF9zYXNfYWRkcikpOworCiAJaWYgKHBvcnQtPnBvcnRfZGV2KQogCQlwb3J0LT5wb3J0X2Rldi0+cGF0aHdheXMgPSBwb3J0LT5udW1fcGh5czsKIApAQCAtMjU1LDEyICsyNTcsMTEgQEAKIHN0YXRpYyB2b2lkIHNhc19pbml0X3BvcnQoc3RydWN0IGFzZF9zYXNfcG9ydCAqcG9ydCwKIAkJCSAgc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSwgaW50IGkpCiB7CisJbWVtc2V0KHBvcnQsIDAsIHNpemVvZigqcG9ydCkpOwogCXBvcnQtPmlkID0gaTsKIAlJTklUX0xJU1RfSEVBRCgmcG9ydC0+ZGV2X2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZwb3J0LT5waHlfbGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcG9ydC0+cGh5X2xpc3QpOwotCXBvcnQtPm51bV9waHlzID0gMDsKLQlwb3J0LT5waHlfbWFzayA9IDA7CiAJcG9ydC0+aGEgPSBzYXNfaGE7CiAKIAlzcGluX2xvY2tfaW5pdCgmcG9ydC0+ZGV2X2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jCmluZGV4IGY4NjlmYmEuLjYwMWVjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jCkBAIC0yNCw2ICsyNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNpbmNsdWRlICJzYXNfaW50ZXJuYWwuaCIKIApAQCAtNTEsMTAgKzUzLDE0IEBACiB7CiAJc3RydWN0IHRhc2tfc3RhdHVzX3N0cnVjdCAqdHMgPSAmdGFzay0+dGFza19zdGF0dXM7CiAJc3RydWN0IHNjc2lfY21uZCAqc2MgPSB0YXNrLT51bGRkX3Rhc2s7Ci0Jc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSA9IFNIT1NUX1RPX1NBU19IQShzYy0+ZGV2aWNlLT5ob3N0KTsKLQl1bnNpZ25lZCB0c19mbGFncyA9IHRhc2stPnRhc2tfc3RhdGVfZmxhZ3M7CiAJaW50IGhzID0gMCwgc3RhdCA9IDA7CiAKKwlpZiAodW5saWtlbHkodGFzay0+dGFza19zdGF0ZV9mbGFncyAmIFNBU19UQVNLX1NUQVRFX0FCT1JURUQpKSB7CisJCS8qIEFib3J0ZWQgdGFza3Mgd2lsbCBiZSBjb21wbGV0ZWQgYnkgdGhlIGVycm9yIGhhbmRsZXIgKi8KKwkJU0FTX0RQUklOVEsoInRhc2sgZG9uZSBidXQgYWJvcnRlZFxuIik7CisJCXJldHVybjsKKwl9CisKIAlpZiAodW5saWtlbHkoIXNjKSkgewogCQlTQVNfRFBSSU5USygidGFza19kb25lIGNhbGxlZCB3aXRoIG5vbiBleGlzdGluZyBTQ1NJIGNtbmQhXG4iKTsKIAkJbGlzdF9kZWxfaW5pdCgmdGFzay0+bGlzdCk7CkBAIC0xMjAsMTEgKzEyNiw3IEBACiAJc2MtPnJlc3VsdCA9IChocyA8PCAxNikgfCBzdGF0OwogCWxpc3RfZGVsX2luaXQoJnRhc2stPmxpc3QpOwogCXNhc19mcmVlX3Rhc2sodGFzayk7Ci0JLyogVGhpcyBpcyB2ZXJ5IHVnbHkgYnV0IHRoaXMgaXMgaG93IFNDU0kgQ29yZSB3b3Jrcy4gKi8KLQlpZiAodHNfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKQotCQlzY3NpX2VoX2ZpbmlzaF9jbWQoc2MsICZzYXNfaGEtPmVoX2RvbmVfcSk7Ci0JZWxzZQotCQlzYy0+c2NzaV9kb25lKHNjKTsKKwlzYy0+c2NzaV9kb25lKHNjKTsKIH0KIAogc3RhdGljIGVudW0gdGFza19hdHRyaWJ1dGUgc2FzX3Njc2lfZ2V0X3Rhc2tfYXR0cihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCkBAIC0yNTUsMTMgKzI1NywzNCBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyB2b2lkIHNhc19laF9maW5pc2hfY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBUT19TQVNfVEFTSyhjbWQpOworCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBTSE9TVF9UT19TQVNfSEEoY21kLT5kZXZpY2UtPmhvc3QpOworCisJLyogcmVtb3ZlIHRoZSBhYm9ydGVkIHRhc2sgZmxhZyB0byBhbGxvdyB0aGUgdGFzayB0byBiZQorCSAqIGNvbXBsZXRlZCBub3cuIEF0IHRoaXMgcG9pbnQsIHdlIG9ubHkgZ2V0IGNhbGxlZCBmb2xsb3dpbmcKKwkgKiBhbiBhY3R1YWwgYWJvcnQgb2YgdGhlIHRhc2ssIHNvIHdlIHNob3VsZCBiZSBndWFyYW50ZWVkIG5vdAorCSAqIHRvIGJlIHJhY2luZyB3aXRoIGFueSBjb21wbGV0aW9ucyBmcm9tIHRoZSBMTEQgKGhlbmNlIHdlCisJICogZG9uJ3QgbmVlZCB0aGUgdGFzayBzdGF0ZSBsb2NrIHRvIGNsZWFyIHRoZSBmbGFnKSAqLworCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX1NUQVRFX0FCT1JURUQ7CisJLyogTm93IGNhbGwgdGFza19kb25lLiAgSG93ZXZlciwgdGFzayB3aWxsIGJlIGZyZWUnZCBhZnRlcgorCSAqIHRoaXMgKi8KKwl0YXNrLT50YXNrX2RvbmUodGFzayk7CisJLyogbm93IGZpbmlzaCB0aGUgY29tbWFuZCBhbmQgbW92ZSBpdCBvbiB0byB0aGUgZXJyb3IKKwkgKiBoYW5kbGVyIGRvbmUgbGlzdCwgdGhpcyBhbHNvIHRha2VzIGl0IG9mZiB0aGUKKwkgKiBlcnJvciBoYW5kbGVyIHBlbmRpbmcgbGlzdCAqLworCXNjc2lfZWhfZmluaXNoX2NtZChjbWQsICZzYXNfaGEtPmVoX2RvbmVfcSk7Cit9CisKIHN0YXRpYyB2b2lkIHNhc19zY3NpX2NsZWFyX3F1ZXVlX2x1KHN0cnVjdCBsaXN0X2hlYWQgKmVycm9yX3EsIHN0cnVjdCBzY3NpX2NtbmQgKm15X2NtZCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsICpuOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgbiwgZXJyb3JfcSwgZWhfZW50cnkpIHsKLQkJaWYgKGNtZCA9PSBteV9jbWQpCi0JCQlsaXN0X2RlbF9pbml0KCZjbWQtPmVoX2VudHJ5KTsKKwkJaWYgKGNtZC0+ZGV2aWNlLT5zZGV2X3RhcmdldCA9PSBteV9jbWQtPmRldmljZS0+c2Rldl90YXJnZXQgJiYKKwkJICAgIGNtZC0+ZGV2aWNlLT5sdW4gPT0gbXlfY21kLT5kZXZpY2UtPmx1bikKKwkJCXNhc19laF9maW5pc2hfY21kKGNtZCk7CiAJfQogfQogCkBAIC0yNzQsNyArMjk3LDcgQEAKIAkJc3RydWN0IGRvbWFpbl9kZXZpY2UgKnggPSBjbWRfdG9fZG9tYWluX2RldihjbWQpOwogCiAJCWlmICh4ID09IGRldikKLQkJCWxpc3RfZGVsX2luaXQoJmNtZC0+ZWhfZW50cnkpOworCQkJc2FzX2VoX2ZpbmlzaF9jbWQoY21kKTsKIAl9CiB9CiAKQEAgLTI4OCw3ICszMTEsNyBAQAogCQlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICp4ID0gZGV2LT5wb3J0OwogCiAJCWlmICh4ID09IHBvcnQpCi0JCQlsaXN0X2RlbF9pbml0KCZjbWQtPmVoX2VudHJ5KTsKKwkJCXNhc19laF9maW5pc2hfY21kKGNtZCk7CiAJfQogfQogCkBAIC00MTMsNyArNDM2LDcgQEAKIH0KIAogLyogRmluZCB0aGUgc2FzX3BoeSB0aGF0J3MgYXR0YWNoZWQgdG8gdGhpcyBkZXZpY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2FzX3BoeSAqZmluZF9sb2NhbF9zYXNfcGh5KHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYpCitzdHJ1Y3Qgc2FzX3BoeSAqc2FzX2ZpbmRfbG9jYWxfcGh5KHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRvbWFpbl9kZXZpY2UgKnBkZXYgPSBkZXYtPnBhcmVudDsKIAlzdHJ1Y3QgZXhfcGh5ICpleHBoeSA9IE5VTEw7CkBAIC00MzUsNiArNDU4LDcgQEAKIAlCVUdfT04oIWV4cGh5KTsKIAlyZXR1cm4gZXhwaHktPnBoeTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19maW5kX2xvY2FsX3BoeSk7CiAKIC8qIEF0dGVtcHQgdG8gc2VuZCBhIExVTiByZXNldCBtZXNzYWdlIHRvIGEgZGV2aWNlICovCiBpbnQgc2FzX2VoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKQEAgLTQ2MSw3ICs0ODUsNyBAQAogaW50IHNhc19laF9idXNfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IGNtZF90b19kb21haW5fZGV2KGNtZCk7Ci0Jc3RydWN0IHNhc19waHkgKnBoeSA9IGZpbmRfbG9jYWxfc2FzX3BoeShkZXYpOworCXN0cnVjdCBzYXNfcGh5ICpwaHkgPSBzYXNfZmluZF9sb2NhbF9waHkoZGV2KTsKIAlpbnQgcmVzOwogCiAJcmVzID0gc2FzX3BoeV9yZXNldChwaHksIDEpOwpAQCAtNDc2LDEwICs1MDAsMTAgQEAKIH0KIAogLyogVHJ5IHRvIHJlc2V0IGEgZGV2aWNlICovCi1zdGF0aWMgaW50IHRyeV90b19yZXNldF9jbWRfZGV2aWNlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAotCQkJCSAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3N0YXRpYyBpbnQgdHJ5X3RvX3Jlc2V0X2NtZF9kZXZpY2Uoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCWludCByZXM7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKIAogCWlmICghc2hvc3QtPmhvc3R0LT5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcikKIAkJZ290byB0cnlfYnVzX3Jlc2V0OwpAQCAtNTE5LDYgKzU0MywxMiBAQAogCQluZWVkX3Jlc2V0ID0gdGFzay0+dGFza19zdGF0ZV9mbGFncyAmIFNBU19UQVNLX05FRURfREVWX1JFU0VUOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAorCQlpZiAobmVlZF9yZXNldCkgeworCQkJU0FTX0RQUklOVEsoIiVzOiB0YXNrIDB4JXAgcmVxdWVzdHMgcmVzZXRcbiIsCisJCQkJICAgIF9fRlVOQ1RJT05fXywgdGFzayk7CisJCQlnb3RvIHJlc2V0OworCQl9CisKIAkJU0FTX0RQUklOVEsoInRyeWluZyB0byBmaW5kIHRhc2sgMHglcFxuIiwgdGFzayk7CiAJCXJlcyA9IHNhc19zY3NpX2ZpbmRfdGFzayh0YXNrKTsKIApAQCAtNTI4LDI4ICs1NTgsMjMgQEAKIAkJY2FzZSBUQVNLX0lTX0RPTkU6CiAJCQlTQVNfRFBSSU5USygiJXM6IHRhc2sgMHglcCBpcyBkb25lXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQkJICAgIHRhc2spOwotCQkJdGFzay0+dGFza19kb25lKHRhc2spOwotCQkJaWYgKG5lZWRfcmVzZXQpCi0JCQkJdHJ5X3RvX3Jlc2V0X2NtZF9kZXZpY2Uoc2hvc3QsIGNtZCk7CisJCQlzYXNfZWhfZmluaXNoX2NtZChjbWQpOwogCQkJY29udGludWU7CiAJCWNhc2UgVEFTS19JU19BQk9SVEVEOgogCQkJU0FTX0RQUklOVEsoIiVzOiB0YXNrIDB4JXAgaXMgYWJvcnRlZFxuIiwKIAkJCQkgICAgX19GVU5DVElPTl9fLCB0YXNrKTsKLQkJCXRhc2stPnRhc2tfZG9uZSh0YXNrKTsKLQkJCWlmIChuZWVkX3Jlc2V0KQotCQkJCXRyeV90b19yZXNldF9jbWRfZGV2aWNlKHNob3N0LCBjbWQpOworCQkJc2FzX2VoX2ZpbmlzaF9jbWQoY21kKTsKIAkJCWNvbnRpbnVlOwogCQljYXNlIFRBU0tfSVNfQVRfTFU6CiAJCQlTQVNfRFBSSU5USygidGFzayAweCVwIGlzIGF0IExVOiBsdSByZWNvdmVyXG4iLCB0YXNrKTsKKyByZXNldDoKIAkJCXRtZl9yZXNwID0gc2FzX3JlY292ZXJfbHUodGFzay0+ZGV2LCBjbWQpOwogCQkJaWYgKHRtZl9yZXNwID09IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEUpIHsKIAkJCQlTQVNfRFBSSU5USygiZGV2ICUwMTZsbHggTFUgJXggaXMgIgogCQkJCQkgICAgInJlY292ZXJlZFxuIiwKIAkJCQkJICAgIFNBU19BRERSKHRhc2stPmRldiksCiAJCQkJCSAgICBjbWQtPmRldmljZS0+bHVuKTsKLQkJCQl0YXNrLT50YXNrX2RvbmUodGFzayk7Ci0JCQkJaWYgKG5lZWRfcmVzZXQpCi0JCQkJCXRyeV90b19yZXNldF9jbWRfZGV2aWNlKHNob3N0LCBjbWQpOworCQkJCXNhc19laF9maW5pc2hfY21kKGNtZCk7CiAJCQkJc2FzX3Njc2lfY2xlYXJfcXVldWVfbHUod29ya19xLCBjbWQpOwogCQkJCWdvdG8gQWdhaW47CiAJCQl9CkBAIC01NjAsMTUgKzU4NSwxNSBAQAogCQkJCSAgICB0YXNrKTsKIAkJCXRtZl9yZXNwID0gc2FzX3JlY292ZXJfSV9UKHRhc2stPmRldik7CiAJCQlpZiAodG1mX3Jlc3AgPT0gVE1GX1JFU1BfRlVOQ19DT01QTEVURSkgeworCQkJCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7CiAJCQkJU0FTX0RQUklOVEsoIklfVCAlMDE2bGx4IHJlY292ZXJlZFxuIiwKIAkJCQkJICAgIFNBU19BRERSKHRhc2stPmRldi0+c2FzX2FkZHIpKTsKLQkJCQl0YXNrLT50YXNrX2RvbmUodGFzayk7Ci0JCQkJaWYgKG5lZWRfcmVzZXQpCi0JCQkJCXRyeV90b19yZXNldF9jbWRfZGV2aWNlKHNob3N0LCBjbWQpOwotCQkJCXNhc19zY3NpX2NsZWFyX3F1ZXVlX0lfVCh3b3JrX3EsIHRhc2stPmRldik7CisJCQkJc2FzX2VoX2ZpbmlzaF9jbWQoY21kKTsKKwkJCQlzYXNfc2NzaV9jbGVhcl9xdWV1ZV9JX1Qod29ya19xLCBkZXYpOwogCQkJCWdvdG8gQWdhaW47CiAJCQl9CiAJCQkvKiBIYW1tZXIgdGltZSA6LSkgKi8KKwkJCXRyeV90b19yZXNldF9jbWRfZGV2aWNlKGNtZCk7CiAJCQlpZiAoaS0+ZGZ0LT5sbGRkX2NsZWFyX25leHVzX3BvcnQpIHsKIAkJCQlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICpwb3J0ID0gdGFzay0+ZGV2LT5wb3J0OwogCQkJCVNBU19EUFJJTlRLKCJjbGVhcmluZyBuZXh1cyBmb3IgcG9ydDolZFxuIiwKQEAgLTU3Nyw5ICs2MDIsNyBAQAogCQkJCWlmIChyZXMgPT0gVE1GX1JFU1BfRlVOQ19DT01QTEVURSkgewogCQkJCQlTQVNfRFBSSU5USygiY2xlYXIgbmV4dXMgcG9ydDolZCAiCiAJCQkJCQkgICAgInN1Y2NlZWRlZFxuIiwgcG9ydC0+aWQpOwotCQkJCQl0YXNrLT50YXNrX2RvbmUodGFzayk7Ci0JCQkJCWlmIChuZWVkX3Jlc2V0KQotCQkJCQkJdHJ5X3RvX3Jlc2V0X2NtZF9kZXZpY2Uoc2hvc3QsIGNtZCk7CisJCQkJCXNhc19laF9maW5pc2hfY21kKGNtZCk7CiAJCQkJCXNhc19zY3NpX2NsZWFyX3F1ZXVlX3BvcnQod29ya19xLAogCQkJCQkJCQkgIHBvcnQpOwogCQkJCQlnb3RvIEFnYWluOwpAQCAtNTkxLDEwICs2MTQsOCBAQAogCQkJCWlmIChyZXMgPT0gVE1GX1JFU1BfRlVOQ19DT01QTEVURSkgewogCQkJCQlTQVNfRFBSSU5USygiY2xlYXIgbmV4dXMgaGEgIgogCQkJCQkJICAgICJzdWNjZWVkZWRcbiIpOwotCQkJCQl0YXNrLT50YXNrX2RvbmUodGFzayk7Ci0JCQkJCWlmIChuZWVkX3Jlc2V0KQotCQkJCQkJdHJ5X3RvX3Jlc2V0X2NtZF9kZXZpY2Uoc2hvc3QsIGNtZCk7Ci0JCQkJCWdvdG8gb3V0OworCQkJCQlzYXNfZWhfZmluaXNoX2NtZChjbWQpOworCQkJCQlnb3RvIGNsZWFyX3E7CiAJCQkJfQogCQkJfQogCQkJLyogSWYgd2UgYXJlIGhlcmUgLS0gdGhpcyBtZWFucyB0aGF0IG5vIGFtb3VudApAQCAtNjA2LDIxICs2MjcsMTYgQEAKIAkJCQkgICAgU0FTX0FERFIodGFzay0+ZGV2LT5zYXNfYWRkciksCiAJCQkJICAgIGNtZC0+ZGV2aWNlLT5sdW4pOwogCi0JCQl0YXNrLT50YXNrX2RvbmUodGFzayk7Ci0JCQlpZiAobmVlZF9yZXNldCkKLQkJCQl0cnlfdG9fcmVzZXRfY21kX2RldmljZShzaG9zdCwgY21kKTsKKwkJCXNhc19laF9maW5pc2hfY21kKGNtZCk7CiAJCQlnb3RvIGNsZWFyX3E7CiAJCX0KIAl9Ci1vdXQ6CiAJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIGNsZWFyX3E6CiAJU0FTX0RQUklOVEsoIi0tLSBFeGl0ICVzIC0tIGNsZWFyX3FcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgbiwgd29ya19xLCBlaF9lbnRyeSkgewotCQlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBUT19TQVNfVEFTSyhjbWQpOwotCQlsaXN0X2RlbF9pbml0KCZjbWQtPmVoX2VudHJ5KTsKLQkJdGFzay0+dGFza19kb25lKHRhc2spOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCBuLCB3b3JrX3EsIGVoX2VudHJ5KQorCQlzYXNfZWhfZmluaXNoX2NtZChjbWQpOworCiAJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIH0KIApAQCAtMTA1MCw2ICsxMDY2LDQ1IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgdm9pZCBzYXNfcGFyc2VfYWRkcih1OCAqc2FzX2FkZHIsIGNvbnN0IGNoYXIgKnApCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFNBU19BRERSX1NJWkU7IGkrKykgeworCQl1OCBoLCBsOworCQlpZiAoISpwKQorCQkJYnJlYWs7CisJCWggPSBpc2RpZ2l0KCpwKSA/ICpwLScwJyA6IHRvdXBwZXIoKnApLSdBJysxMDsKKwkJcCsrOworCQlsID0gaXNkaWdpdCgqcCkgPyAqcC0nMCcgOiB0b3VwcGVyKCpwKS0nQScrMTA7CisJCXArKzsKKwkJc2FzX2FkZHJbaV0gPSAoaDw8NCkgfCBsOworCX0KK30KKworI2RlZmluZSBTQVNfU1RSSU5HX0FERFJfU0laRQkxNgorCitpbnQgc2FzX3JlcXVlc3RfYWRkcihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdTggKmFkZHIpCit7CisJaW50IHJlczsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCisJcmVzID0gcmVxdWVzdF9maXJtd2FyZSgmZncsICJzYXNfYWRkciIsICZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJaWYgKGZ3LT5zaXplIDwgU0FTX1NUUklOR19BRERSX1NJWkUpIHsKKwkJcmVzID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJc2FzX3BhcnNlX2FkZHIoYWRkciwgZnctPmRhdGEpOworCitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19yZXF1ZXN0X2FkZHIpOworCiBFWFBPUlRfU1lNQk9MX0dQTChzYXNfcXVldWVjb21tYW5kKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNhc190YXJnZXRfYWxsb2MpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2FzX3NsYXZlX2NvbmZpZ3VyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggMmFiMmQyNC4uZWMwYjBmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtMjMsNyArMjMsNyBAQAogCiBzdHJ1Y3QgbHBmY19zbGkyX3NsaW07CiAKLSNkZWZpbmUgTFBGQ19NQVhfVEFSR0VUCQkyNTYJLyogbWF4IG51bWJlciBvZiB0YXJnZXRzIHN1cHBvcnRlZCAqLworI2RlZmluZSBMUEZDX01BWF9UQVJHRVQJCTQwOTYJLyogbWF4IG51bWJlciBvZiB0YXJnZXRzIHN1cHBvcnRlZCAqLwogI2RlZmluZSBMUEZDX01BWF9ESVNDX1RIUkVBRFMJNjQJLyogbWF4IG91dHN0YW5kaW5nIGRpc2NvdmVyeSBlbHMKIAkJCQkJICAgcmVxdWVzdHMgKi8KICNkZWZpbmUgTFBGQ19NQVhfTlNfUkVUUlkJMwkvKiBOdW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgdG8gY29udGFjdApAQCAtMjY4LDcgKzI2OCw2IEBACiAjZGVmaW5lIEZDX05MUF9NT1JFICAgICAgICAgICAgIDB4NDAJIC8qIE1vcmUgbm9kZSB0byBwcm9jZXNzIGluIG5vZGUgdGJsICovCiAjZGVmaW5lIEZDX09GRkxJTkVfTU9ERSAgICAgICAgIDB4ODAJIC8qIEludGVyZmFjZSBpcyBvZmZsaW5lIGZvciBkaWFnICovCiAjZGVmaW5lIEZDX0ZBQlJJQyAgICAgICAgICAgICAgIDB4MTAwCSAvKiBXZSBhcmUgZmFicmljIGF0dGFjaGVkICovCi0jZGVmaW5lIEZDX0VTVEFCTElTSF9MSU5LICAgICAgIDB4MjAwCSAvKiBSZWVzdGFibGlzaCBMaW5rICovCiAjZGVmaW5lIEZDX1JTQ05fRElTQ09WRVJZICAgICAgIDB4NDAwCSAvKiBBdXRoIGFsbCBkZXZpY2VzIGFmdGVyIFJTQ04gKi8KICNkZWZpbmUgRkNfU0NTSV9TQ0FOX1RNTyAgICAgICAgMHg0MDAwCSAvKiBzY3NpIHNjYW4gdGltZXIgcnVubmluZyAqLwogI2RlZmluZSBGQ19BQk9SVF9ESVNDT1ZFUlkgICAgICAweDgwMDAJIC8qIHdlIHdhbnQgdG8gYWJvcnQgZGlzY292ZXJ5ICovCkBAIC00MzMsOCArNDMyLDYgQEAKIAogCXVpbnQzMl90IGZjX2V2ZW50VGFnOwkvKiBldmVudCB0YWcgZm9yIGxpbmsgYXR0ZW50aW9uICovCiAKLQotCXN0cnVjdCB0aW1lcl9saXN0IGZjX2VzdGFidG1vOwkvKiBsaW5rIGVzdGFibGlzaG1lbnQgdGltZXIgKi8KIAkvKiBUaGVzZSBmaWVsZHMgdXNlZCB0byBiZSBiaW5mbyAqLwogCXVpbnQzMl90IGZjX3ByZWZfRElEOwkvKiBwcmVmZXJyZWQgRF9JRCAqLwogCXVpbnQ4X3QgIGZjX3ByZWZfQUxQQTsJLyogcHJlZmVycmVkIEFMX1BBICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IGIxMmE4NDEuLmE5ZmJiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC02NiwyMyArNjYsMjYgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfZHJ2cl92ZXJzaW9uX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbHBmY19kcnZyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICAgY2hhciAqYnVmKQogewogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgTFBGQ19NT0RVTEVfREVTQyAiXG4iKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfaW5mb19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfaW5mb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixscGZjX2luZm8oaG9zdCkpOwogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY19zZXJpYWxudW1fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX3NlcmlhbG51bV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAKQEAgLTkwLDE4ICs5MywyMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY190ZW1wX3NlbnNvcl9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfdGVtcF9zZW5zb3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLHBoYmEtPnRlbXBfc2Vuc29yX3N1cHBvcnQpOwogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY19tb2RlbGRlc2Nfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX21vZGVsZGVzY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAKQEAgLTEwOSw5ICsxMTQsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfbW9kZWxuYW1lX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbHBmY19tb2RlbG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCkBAIC0xMTksOSArMTI1LDEwIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1scGZjX3Byb2dyYW10eXBlX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbHBmY19wcm9ncmFtdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIApAQCAtMTI5LDkgKzEzNiwxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY192cG9ydG51bV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfdnBvcnRudW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAKQEAgLTEzOSw5ICsxNDcsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfZndyZXZfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX2Z3cmV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCWNoYXIgZndyZXZbMzJdOwpAQCAtMTUxLDEwICsxNjAsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfaGR3X3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbHBmY19oZHdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJY2hhciBoZHdbOV07Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJbHBmY192cGRfdCAqdnAgPSAmcGhiYS0+dnBkOwpAQCAtMTYzLDE4ICsxNzIsMjAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgaGR3KTsKIH0KIHN0YXRpYyBzc2l6ZV90Ci1scGZjX29wdGlvbl9yb21fdmVyc2lvbl9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHBoYmEtPk9wdGlvblJPTVZlcnNpb24pOwogfQogc3RhdGljIHNzaXplX3QKLWxwZmNfc3RhdGVfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCWludCAgbGVuID0gMDsKQEAgLTI0Myw5ICsyNTQsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfbnVtX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCkBAIC0zNjcsOSArMzc5LDEwIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1scGZjX2lzc3VlX3Jlc2V0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorbHBmY19pc3N1ZV9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAKQEAgLTM4NSw5ICszOTgsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfbnBvcnRfZXZ0X2NudF9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfbnBvcnRfZXZ0X2NudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAKQEAgLTM5NSw5ICs0MDksMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfYm9hcmRfbW9kZV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfYm9hcmRfbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCWNoYXIgICogc3RhdGU7CkBAIC00MTUsOSArNDMwLDEwIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1scGZjX2JvYXJkX21vZGVfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitscGZjX2JvYXJkX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGNvbXBsZXRpb24gb25saW5lX2NvbXBsOwpAQCAtNTA5LDkgKzUyNSwxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY19tYXhfcnBpX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbHBmY19tYXhfcnBpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJdWludDMyX3QgY250OwpAQCAtNTIyLDkgKzUzOSwxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY191c2VkX3JwaV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfdXNlZF9ycGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJdWludDMyX3QgY250LCBhY250OwpAQCAtNTM1LDkgKzU1MywxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY19tYXhfeHJpX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbHBmY19tYXhfeHJpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJdWludDMyX3QgY250OwpAQCAtNTQ4LDkgKzU2NywxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY191c2VkX3hyaV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfdXNlZF94cmlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJdWludDMyX3QgY250LCBhY250OwpAQCAtNTYxLDkgKzU4MSwxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY19tYXhfdnBpX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorbHBmY19tYXhfdnBpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJdWludDMyX3QgY250OwpAQCAtNTc0LDkgKzU5NSwxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY191c2VkX3ZwaV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfdXNlZF92cGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJdWludDMyX3QgY250LCBhY250OwpAQCAtNTg3LDkgKzYwOSwxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotbHBmY19ucGl2X2luZm9fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX25waXZfaW5mb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAKQEAgLTYwMSw5ICs2MjQsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfcG9sbF9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfcG9sbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIApAQCAtNjExLDEwICs2MzUsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWxwZmNfcG9sbF9zdG9yZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBjb3VudCkKK2xwZmNfcG9sbF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAl1aW50MzJfdCBjcmVnX3ZhbDsKQEAgLTY3MCw5ICs2OTQsMTAgQEAKIAogI2RlZmluZSBscGZjX3BhcmFtX3Nob3coYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAotbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikgXAorbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJICAgY2hhciAqYnVmKSBcCiB7IFwKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTtcCisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTtcCiAJaW50IHZhbCA9IDA7XApAQCAtNjgzLDkgKzcwOCwxMCBAQAogCiAjZGVmaW5lIGxwZmNfcGFyYW1faGV4X3Nob3coYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAotbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikgXAorbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJICAgY2hhciAqYnVmKSBcCiB7IFwKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTtcCisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTtcCiAJaW50IHZhbCA9IDA7XApAQCAtNzI1LDkgKzc1MSwxMCBAQAogCiAjZGVmaW5lIGxwZmNfcGFyYW1fc3RvcmUoYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAotbHBmY18jI2F0dHIjI19zdG9yZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAorbHBmY18jI2F0dHIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAogeyBcCi0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7XAorCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7XAogCWludCB2YWw9MDtcCkBAIC03NDMsOSArNzcwLDEwIEBACiAKICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9zaG93KGF0dHIpCVwKIHN0YXRpYyBzc2l6ZV90IFwKLWxwZmNfIyNhdHRyIyNfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpIFwKK2xwZmNfIyNhdHRyIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJCSAgIGNoYXIgKmJ1ZikgXAogeyBcCi0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7XAorCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCWludCB2YWwgPSAwO1wKIAl2YWwgPSB2cG9ydC0+Y2ZnXyMjYXR0cjtcCkBAIC03NTQsOSArNzgyLDEwIEBACiAKICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9oZXhfc2hvdyhhdHRyKQlcCiBzdGF0aWMgc3NpemVfdCBcCi1scGZjXyMjYXR0ciMjX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKSBcCitscGZjXyMjYXR0ciMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAorCQkgICBjaGFyICpidWYpIFwKIHsgXAotCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpO1wKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKIAlpbnQgdmFsID0gMDtcCiAJdmFsID0gdnBvcnQtPmNmZ18jI2F0dHI7XApAQCAtNzk0LDkgKzgyMywxMCBAQAogCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1fc3RvcmUoYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAotbHBmY18jI2F0dHIjI19zdG9yZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAorbHBmY18jI2F0dHIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAogeyBcCi0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7XAorCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCWludCB2YWw9MDtcCiAJaWYgKCFpc2RpZ2l0KGJ1ZlswXSkpXApAQCAtODIyLDcgKzg1Miw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCiAKICNkZWZpbmUgTFBGQ19BVFRSX1JXKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKIHN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XApAQCAtODMyLDggKzg2Miw4IEBACiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBscGZjX3BhcmFtX3NldChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIGxwZmNfcGFyYW1fc3RvcmUobmFtZSlcCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLFwKLQkJCSBscGZjXyMjbmFtZSMjX3Nob3csIGxwZmNfIyNuYW1lIyNfc3RvcmUpCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJICAgbHBmY18jI25hbWUjI19zaG93LCBscGZjXyMjbmFtZSMjX3N0b3JlKQogCiAjZGVmaW5lIExQRkNfQVRUUl9IRVhfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCiBzdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKQEAgLTg0MSw3ICs4NzEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY19wYXJhbV9oZXhfc2hvdyhuYW1lKVwKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX0FUVFJfSEVYX1JXKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKIHN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XApAQCAtODUxLDggKzg4MSw4IEBACiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBscGZjX3BhcmFtX3NldChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIGxwZmNfcGFyYW1fc3RvcmUobmFtZSlcCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLFwKLQkJCSBscGZjXyMjbmFtZSMjX3Nob3csIGxwZmNfIyNuYW1lIyNfc3RvcmUpCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJICAgbHBmY18jI25hbWUjI19zaG93LCBscGZjXyMjbmFtZSMjX3N0b3JlKQogCiAjZGVmaW5lIExQRkNfVlBPUlRfQVRUUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCiBzdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKQEAgLTg2Niw3ICs4OTYsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQorc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfVlBPUlRfQVRUUl9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCiBzdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKQEAgLTg3Niw4ICs5MDYsOCBAQAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogbHBmY192cG9ydF9wYXJhbV9zZXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBscGZjX3Zwb3J0X3BhcmFtX3N0b3JlKG5hbWUpXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPIHwgU19JV1VTUixcCi0JCQkgbHBmY18jI25hbWUjI19zaG93LCBscGZjXyMjbmFtZSMjX3N0b3JlKQorc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPIHwgU19JV1VTUixcCisJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfSEVYX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAogc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCkBAIC04ODUsNyArOTE1LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfdnBvcnRfcGFyYW1faGV4X3Nob3cobmFtZSlcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSX0hFWF9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCiBzdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKQEAgLTg5NSw0NiArOTI1LDQ0IEBACiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBscGZjX3Zwb3J0X3BhcmFtX3NldChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIGxwZmNfdnBvcnRfcGFyYW1fc3RvcmUobmFtZSlcCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLFwKLQkJCSBscGZjXyMjbmFtZSMjX3Nob3csIGxwZmNfIyNuYW1lIyNfc3RvcmUpCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJICAgbHBmY18jI25hbWUjI19zaG93LCBscGZjXyMjbmFtZSMjX3N0b3JlKQogCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaW5mbywgU19JUlVHTywgbHBmY19pbmZvX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNlcmlhbG51bSwgU19JUlVHTywgbHBmY19zZXJpYWxudW1fc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobW9kZWxkZXNjLCBTX0lSVUdPLCBscGZjX21vZGVsZGVzY19zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtb2RlbG5hbWUsIFNfSVJVR08sIGxwZmNfbW9kZWxuYW1lX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHByb2dyYW10eXBlLCBTX0lSVUdPLCBscGZjX3Byb2dyYW10eXBlX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHBvcnRudW0sIFNfSVJVR08sIGxwZmNfdnBvcnRudW1fc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZndyZXYsIFNfSVJVR08sIGxwZmNfZndyZXZfc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaGR3LCBTX0lSVUdPLCBscGZjX2hkd19zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzdGF0ZSwgU19JUlVHTywgbHBmY19zdGF0ZV9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sCi0JCQkJCWxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG51bV9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLAotCQkJCQlscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5wb3J0X2V2dF9jbnQsIFNfSVJVR08sIGxwZmNfbnBvcnRfZXZ0X2NudF9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihscGZjX2RydnJfdmVyc2lvbiwgU19JUlVHTywgbHBmY19kcnZyX3ZlcnNpb25fc2hvdywKLQkJCSBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihib2FyZF9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCSBscGZjX2JvYXJkX21vZGVfc2hvdywgbHBmY19ib2FyZF9tb2RlX3N0b3JlKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpc3N1ZV9yZXNldCwgU19JV1VTUiwgTlVMTCwgbHBmY19pc3N1ZV9yZXNldCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobWF4X3ZwaSwgU19JUlVHTywgbHBmY19tYXhfdnBpX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHVzZWRfdnBpLCBTX0lSVUdPLCBscGZjX3VzZWRfdnBpX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG1heF9ycGksIFNfSVJVR08sIGxwZmNfbWF4X3JwaV9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih1c2VkX3JwaSwgU19JUlVHTywgbHBmY191c2VkX3JwaV9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtYXhfeHJpLCBTX0lSVUdPLCBscGZjX21heF94cmlfc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodXNlZF94cmksIFNfSVJVR08sIGxwZmNfdXNlZF94cmlfc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobnBpdl9pbmZvLCBTX0lSVUdPLCBscGZjX25waXZfaW5mb19zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihscGZjX3RlbXBfc2Vuc29yLCBTX0lSVUdPLCBscGZjX3RlbXBfc2Vuc29yX3Nob3csCi0JCQkgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW5mbywgU19JUlVHTywgbHBmY19pbmZvX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHNlcmlhbG51bSwgU19JUlVHTywgbHBmY19zZXJpYWxudW1fc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kZWxkZXNjLCBTX0lSVUdPLCBscGZjX21vZGVsZGVzY19zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlbG5hbWUsIFNfSVJVR08sIGxwZmNfbW9kZWxuYW1lX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHByb2dyYW10eXBlLCBTX0lSVUdPLCBscGZjX3Byb2dyYW10eXBlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBvcnRudW0sIFNfSVJVR08sIGxwZmNfdnBvcnRudW1fc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZndyZXYsIFNfSVJVR08sIGxwZmNfZndyZXZfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaGR3LCBTX0lSVUdPLCBscGZjX2hkd19zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0ZSwgU19JUlVHTywgbHBmY19zdGF0ZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sCisJCSAgIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG51bV9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLAorCQkgICBscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG5wb3J0X2V2dF9jbnQsIFNfSVJVR08sIGxwZmNfbnBvcnRfZXZ0X2NudF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX2RydnJfdmVyc2lvbiwgU19JUlVHTywgbHBmY19kcnZyX3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYm9hcmRfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIGxwZmNfYm9hcmRfbW9kZV9zaG93LCBscGZjX2JvYXJkX21vZGVfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGlzc3VlX3Jlc2V0LCBTX0lXVVNSLCBOVUxMLCBscGZjX2lzc3VlX3Jlc2V0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtYXhfdnBpLCBTX0lSVUdPLCBscGZjX21heF92cGlfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodXNlZF92cGksIFNfSVJVR08sIGxwZmNfdXNlZF92cGlfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobWF4X3JwaSwgU19JUlVHTywgbHBmY19tYXhfcnBpX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHVzZWRfcnBpLCBTX0lSVUdPLCBscGZjX3VzZWRfcnBpX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG1heF94cmksIFNfSVJVR08sIGxwZmNfbWF4X3hyaV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih1c2VkX3hyaSwgU19JUlVHTywgbHBmY191c2VkX3hyaV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihucGl2X2luZm8sIFNfSVJVR08sIGxwZmNfbnBpdl9pbmZvX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxwZmNfdGVtcF9zZW5zb3IsIFNfSVJVR08sIGxwZmNfdGVtcF9zZW5zb3Jfc2hvdywgTlVMTCk7CiAKIAogc3RhdGljIGNoYXIgKmxwZmNfc29mdF93d25fa2V5ID0gIkM5OUc3MVNMODAzMkEiOwogCiBzdGF0aWMgc3NpemVfdAotbHBmY19zb2Z0X3d3bl9lbmFibGVfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCkKK2xwZmNfc29mdF93d25fZW5hYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAl1bnNpZ25lZCBpbnQgY250ID0gY291bnQ7CkBAIC05NjMsMTMgKzk5MSwxNCBAQAogCXBoYmEtPnNvZnRfd3duX2VuYWJsZSA9IDE7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxwZmNfc29mdF93d25fZW5hYmxlLCBTX0lXVVNSLCBOVUxMLAotCQkJCWxwZmNfc29mdF93d25fZW5hYmxlX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX3NvZnRfd3duX2VuYWJsZSwgU19JV1VTUiwgTlVMTCwKKwkJICAgbHBmY19zb2Z0X3d3bl9lbmFibGVfc3RvcmUpOwogCiBzdGF0aWMgc3NpemVfdAotbHBmY19zb2Z0X3d3cG5fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX3NvZnRfd3dwbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAKQEAgLTk3OSw5ICsxMDA4LDEwIEBACiAKIAogc3RhdGljIHNzaXplX3QKLWxwZmNfc29mdF93d3BuX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorbHBmY19zb2Z0X3d3cG5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgY29tcGxldGlvbiBvbmxpbmVfY29tcGw7CkBAIC0xMDQ3LDEzICsxMDc3LDE0IEBACiAJCQkJInJlaW5pdCBhZGFwdGVyIC0gJWRcbiIsIHN0YXQyKTsKIAlyZXR1cm4gKHN0YXQxIHx8IHN0YXQyKSA/IC1FSU8gOiBjb3VudDsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihscGZjX3NvZnRfd3dwbiwgU19JUlVHTyB8IFNfSVdVU1IsXAotCQkJIGxwZmNfc29mdF93d3BuX3Nob3csIGxwZmNfc29mdF93d3BuX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX3NvZnRfd3dwbiwgU19JUlVHTyB8IFNfSVdVU1IsXAorCQkgICBscGZjX3NvZnRfd3dwbl9zaG93LCBscGZjX3NvZnRfd3dwbl9zdG9yZSk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1scGZjX3NvZnRfd3dubl9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK2xwZmNfc29mdF93d25uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoKHN0cnVjdCBscGZjX3Zwb3J0ICopc2hvc3QtPmhvc3RkYXRhKS0+cGhiYTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCVsbHhcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoYmEtPmNmZ19zb2Z0X3d3bm4pOwpAQCAtMTA2MSw5ICsxMDkyLDEwIEBACiAKIAogc3RhdGljIHNzaXplX3QKLWxwZmNfc29mdF93d25uX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorbHBmY19zb2Z0X3d3bm5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoKHN0cnVjdCBscGZjX3Zwb3J0ICopc2hvc3QtPmhvc3RkYXRhKS0+cGhiYTsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgY250PWNvdW50OwogCXU4IHd3bm5bOF07CkBAIC0xMTA3LDggKzExMzksOCBAQAogCiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxwZmNfc29mdF93d25uLCBTX0lSVUdPIHwgU19JV1VTUixcCi0JCQkgbHBmY19zb2Z0X3d3bm5fc2hvdywgbHBmY19zb2Z0X3d3bm5fc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGxwZmNfc29mdF93d25uLCBTX0lSVUdPIHwgU19JV1VTUixcCisJCSAgIGxwZmNfc29mdF93d25uX3Nob3csIGxwZmNfc29mdF93d25uX3N0b3JlKTsKIAogCiBzdGF0aWMgaW50IGxwZmNfcG9sbCA9IDA7CkBAIC0xMTE4LDggKzExNTAsOCBAQAogCQkgIiAxIC0gcG9sbCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCIKIAkJICIgMyAtIHBvbGwgYW5kIGRpc2FibGUgRkNQIHJpbmcgaW50ZXJydXB0cyIpOwogCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY19wb2xsLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCSBscGZjX3BvbGxfc2hvdywgbHBmY19wb2xsX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX3BvbGwsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBscGZjX3BvbGxfc2hvdywgbHBmY19wb2xsX3N0b3JlKTsKIAogaW50ICBscGZjX3NsaV9tb2RlID0gMDsKIG1vZHVsZV9wYXJhbShscGZjX3NsaV9tb2RlLCBpbnQsIDApOwpAQCAtMTEzMyw3ICsxMTY1LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MobHBmY19lbmFibGVfbnBpdiwgIkVuYWJsZSBOUElWIGZ1bmN0aW9uYWxpdHkiKTsKIGxwZmNfcGFyYW1fc2hvdyhlbmFibGVfbnBpdik7CiBscGZjX3BhcmFtX2luaXQoZW5hYmxlX25waXYsIDAsIDAsIDEpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxwZmNfZW5hYmxlX25waXYsIFNfSVJVR08sCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY19lbmFibGVfbnBpdiwgU19JUlVHTywKIAkJCSBscGZjX2VuYWJsZV9ucGl2X3Nob3csIE5VTEwpOwogCiAvKgpAQCAtMTE0Nyw5ICsxMTc5LDEwIEBACiAJCSAiU2Vjb25kcyBkcml2ZXIgd2lsbCBob2xkIEkvTyB3YWl0aW5nICIKIAkJICJmb3IgYSBkZXZpY2UgdG8gY29tZSBiYWNrIik7CiBzdGF0aWMgc3NpemVfdAotbHBmY19ub2Rldl90bW9fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitscGZjX25vZGV2X3Rtb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCWludCB2YWwgPSAwOwogCXZhbCA9IHZwb3J0LT5jZmdfZGV2bG9zc190bW87CkBAIC0xMjIxLDggKzEyNTQsOCBAQAogCiBscGZjX3Zwb3J0X3BhcmFtX3N0b3JlKG5vZGV2X3RtbykKIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxwZmNfbm9kZXZfdG1vLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCSBscGZjX25vZGV2X3Rtb19zaG93LCBscGZjX25vZGV2X3Rtb19zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobHBmY19ub2Rldl90bW8sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBscGZjX25vZGV2X3Rtb19zaG93LCBscGZjX25vZGV2X3Rtb19zdG9yZSk7CiAKIC8qCiAjIGxwZmNfZGV2bG9zc190bW86IElmIHNldCwgaXQgd2lsbCBob2xkIGFsbCBJL08gZXJyb3JzIG9uIGRldmljZXMgdGhhdApAQCAtMTI1NSw4ICsxMjg4LDggQEAKIH0KIAogbHBmY192cG9ydF9wYXJhbV9zdG9yZShkZXZsb3NzX3RtbykKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihscGZjX2Rldmxvc3NfdG1vLCBTX0lSVUdPIHwgU19JV1VTUiwKLQlscGZjX2Rldmxvc3NfdG1vX3Nob3csIGxwZmNfZGV2bG9zc190bW9fc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGxwZmNfZGV2bG9zc190bW8sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBscGZjX2Rldmxvc3NfdG1vX3Nob3csIGxwZmNfZGV2bG9zc190bW9fc3RvcmUpOwogCiAvKgogIyBscGZjX2xvZ192ZXJib3NlOiBPbmx5IHR1cm4gdGhpcyBmbGFnIG9uIGlmIHlvdSBhcmUgd2lsbGluZyB0byByaXNrIGJlaW5nCkBAIC0xMzc0LDggKzE0MDcsOCBAQAogCXJldHVybiAwOwogfQogbHBmY192cG9ydF9wYXJhbV9zdG9yZShyZXN0cmljdF9sb2dpbik7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY19yZXN0cmljdF9sb2dpbiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkgbHBmY19yZXN0cmljdF9sb2dpbl9zaG93LCBscGZjX3Jlc3RyaWN0X2xvZ2luX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX3Jlc3RyaWN0X2xvZ2luLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgbHBmY19yZXN0cmljdF9sb2dpbl9zaG93LCBscGZjX3Jlc3RyaWN0X2xvZ2luX3N0b3JlKTsKIAogLyoKICMgU29tZSBkaXNrIGRldmljZXMgaGF2ZSBhICJzZWxlY3QgSUQiIG9yICJzZWxlY3QgVGFyZ2V0IiBjYXBhYmlsaXR5LgpAQCAtMTQzMyw3ICsxNDY2LDcgQEAKIGxwZmNfcGFyYW1fc2hvdyh0b3BvbG9neSkKIGxwZmNfcGFyYW1faW5pdCh0b3BvbG9neSwgMCwgMCwgNikKIGxwZmNfcGFyYW1fc3RvcmUodG9wb2xvZ3kpCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY190b3BvbG9neSwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgREVWSUNFX0FUVFIobHBmY190b3BvbG9neSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCWxwZmNfdG9wb2xvZ3lfc2hvdywgbHBmY190b3BvbG9neV9zdG9yZSk7CiAKIC8qCkBAIC0xNDk3LDcgKzE1MzAsNyBAQAogfQogCiBscGZjX3BhcmFtX3N0b3JlKGxpbmtfc3BlZWQpCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobHBmY19saW5rX3NwZWVkLCBTX0lSVUdPIHwgU19JV1VTUiwKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX2xpbmtfc3BlZWQsIFNfSVJVR08gfCBTX0lXVVNSLAogCQlscGZjX2xpbmtfc3BlZWRfc2hvdywgbHBmY19saW5rX3NwZWVkX3N0b3JlKTsKIAogLyoKQEAgLTE2MjMsODIgKzE2NTYsODEgQEAKIExQRkNfQVRUUl9SKHNnX3NlZ19jbnQsIExQRkNfREVGQVVMVF9TR19TRUdfQ05ULCBMUEZDX0RFRkFVTFRfU0dfU0VHX0NOVCwKIAkgICAgTFBGQ19NQVhfU0dfU0VHX0NOVCwgIk1heCBTY2F0dGVyIEdhdGhlciBTZWdtZW50IENvdW50Iik7CiAKLXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpscGZjX2hiYV9hdHRyc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9pbmZvLAotCSZjbGFzc19kZXZpY2VfYXR0cl9zZXJpYWxudW0sCi0JJmNsYXNzX2RldmljZV9hdHRyX21vZGVsZGVzYywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbW9kZWxuYW1lLAotCSZjbGFzc19kZXZpY2VfYXR0cl9wcm9ncmFtdHlwZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfcG9ydG51bSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfZndyZXYsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hkdywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfb3B0aW9uX3JvbV92ZXJzaW9uLAotCSZjbGFzc19kZXZpY2VfYXR0cl9zdGF0ZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbnVtX2Rpc2NvdmVyZWRfcG9ydHMsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfZHJ2cl92ZXJzaW9uLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX3RlbXBfc2Vuc29yLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2xvZ192ZXJib3NlLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2x1bl9xdWV1ZV9kZXB0aCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19oYmFfcXVldWVfZGVwdGgsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfcGVlcl9wb3J0X2xvZ2luLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX25vZGV2X3RtbywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19kZXZsb3NzX3RtbywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19mY3BfY2xhc3MsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfdXNlX2FkaXNjLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2FjazAsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfdG9wb2xvZ3ksCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfc2Nhbl9kb3duLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2xpbmtfc3BlZWQsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfY3JfZGVsYXksCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfY3JfY291bnQsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfbXVsdGlfcmluZ19zdXBwb3J0LAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX211bHRpX3JpbmdfcmN0bCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19tdWx0aV9yaW5nX3R5cGUsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfZmRtaV9vbiwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19tYXhfbHVucywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19lbmFibGVfbnBpdiwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbnBvcnRfZXZ0X2NudCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfbW9kZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbWF4X3ZwaSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfdXNlZF92cGksCi0JJmNsYXNzX2RldmljZV9hdHRyX21heF9ycGksCi0JJmNsYXNzX2RldmljZV9hdHRyX3VzZWRfcnBpLAotCSZjbGFzc19kZXZpY2VfYXR0cl9tYXhfeHJpLAotCSZjbGFzc19kZXZpY2VfYXR0cl91c2VkX3hyaSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbnBpdl9pbmZvLAotCSZjbGFzc19kZXZpY2VfYXR0cl9pc3N1ZV9yZXNldCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19wb2xsLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX3BvbGxfdG1vLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX3VzZV9tc2ksCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfc29mdF93d25uLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX3NvZnRfd3dwbiwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19zb2Z0X3d3bl9lbmFibGUsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfZW5hYmxlX2hiYV9yZXNldCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19lbmFibGVfaGJhX2hlYXJ0YmVhdCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19zZ19zZWdfY250LAorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmxwZmNfaGJhX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2luZm8sCisJJmRldl9hdHRyX3NlcmlhbG51bSwKKwkmZGV2X2F0dHJfbW9kZWxkZXNjLAorCSZkZXZfYXR0cl9tb2RlbG5hbWUsCisJJmRldl9hdHRyX3Byb2dyYW10eXBlLAorCSZkZXZfYXR0cl9wb3J0bnVtLAorCSZkZXZfYXR0cl9md3JldiwKKwkmZGV2X2F0dHJfaGR3LAorCSZkZXZfYXR0cl9vcHRpb25fcm9tX3ZlcnNpb24sCisJJmRldl9hdHRyX3N0YXRlLAorCSZkZXZfYXR0cl9udW1fZGlzY292ZXJlZF9wb3J0cywKKwkmZGV2X2F0dHJfbHBmY19kcnZyX3ZlcnNpb24sCisJJmRldl9hdHRyX2xwZmNfdGVtcF9zZW5zb3IsCisJJmRldl9hdHRyX2xwZmNfbG9nX3ZlcmJvc2UsCisJJmRldl9hdHRyX2xwZmNfbHVuX3F1ZXVlX2RlcHRoLAorCSZkZXZfYXR0cl9scGZjX2hiYV9xdWV1ZV9kZXB0aCwKKwkmZGV2X2F0dHJfbHBmY19wZWVyX3BvcnRfbG9naW4sCisJJmRldl9hdHRyX2xwZmNfbm9kZXZfdG1vLAorCSZkZXZfYXR0cl9scGZjX2Rldmxvc3NfdG1vLAorCSZkZXZfYXR0cl9scGZjX2ZjcF9jbGFzcywKKwkmZGV2X2F0dHJfbHBmY191c2VfYWRpc2MsCisJJmRldl9hdHRyX2xwZmNfYWNrMCwKKwkmZGV2X2F0dHJfbHBmY190b3BvbG9neSwKKwkmZGV2X2F0dHJfbHBmY19zY2FuX2Rvd24sCisJJmRldl9hdHRyX2xwZmNfbGlua19zcGVlZCwKKwkmZGV2X2F0dHJfbHBmY19jcl9kZWxheSwKKwkmZGV2X2F0dHJfbHBmY19jcl9jb3VudCwKKwkmZGV2X2F0dHJfbHBmY19tdWx0aV9yaW5nX3N1cHBvcnQsCisJJmRldl9hdHRyX2xwZmNfbXVsdGlfcmluZ19yY3RsLAorCSZkZXZfYXR0cl9scGZjX211bHRpX3JpbmdfdHlwZSwKKwkmZGV2X2F0dHJfbHBmY19mZG1pX29uLAorCSZkZXZfYXR0cl9scGZjX21heF9sdW5zLAorCSZkZXZfYXR0cl9scGZjX2VuYWJsZV9ucGl2LAorCSZkZXZfYXR0cl9ucG9ydF9ldnRfY250LAorCSZkZXZfYXR0cl9ib2FyZF9tb2RlLAorCSZkZXZfYXR0cl9tYXhfdnBpLAorCSZkZXZfYXR0cl91c2VkX3ZwaSwKKwkmZGV2X2F0dHJfbWF4X3JwaSwKKwkmZGV2X2F0dHJfdXNlZF9ycGksCisJJmRldl9hdHRyX21heF94cmksCisJJmRldl9hdHRyX3VzZWRfeHJpLAorCSZkZXZfYXR0cl9ucGl2X2luZm8sCisJJmRldl9hdHRyX2lzc3VlX3Jlc2V0LAorCSZkZXZfYXR0cl9scGZjX3BvbGwsCisJJmRldl9hdHRyX2xwZmNfcG9sbF90bW8sCisJJmRldl9hdHRyX2xwZmNfdXNlX21zaSwKKwkmZGV2X2F0dHJfbHBmY19zb2Z0X3d3bm4sCisJJmRldl9hdHRyX2xwZmNfc29mdF93d3BuLAorCSZkZXZfYXR0cl9scGZjX3NvZnRfd3duX2VuYWJsZSwKKwkmZGV2X2F0dHJfbHBmY19lbmFibGVfaGJhX3Jlc2V0LAorCSZkZXZfYXR0cl9scGZjX2VuYWJsZV9oYmFfaGVhcnRiZWF0LAorCSZkZXZfYXR0cl9scGZjX3NnX3NlZ19jbnQsCiAJTlVMTCwKIH07CiAKLXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpscGZjX3Zwb3J0X2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX2luZm8sCi0JJmNsYXNzX2RldmljZV9hdHRyX3N0YXRlLAotCSZjbGFzc19kZXZpY2VfYXR0cl9udW1fZGlzY292ZXJlZF9wb3J0cywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19kcnZyX3ZlcnNpb24sCi0KLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19sb2dfdmVyYm9zZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19sdW5fcXVldWVfZGVwdGgsCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfbm9kZXZfdG1vLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2Rldmxvc3NfdG1vLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2hiYV9xdWV1ZV9kZXB0aCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19wZWVyX3BvcnRfbG9naW4sCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfcmVzdHJpY3RfbG9naW4sCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfZmNwX2NsYXNzLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX3VzZV9hZGlzYywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19mZG1pX29uLAotCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX21heF9sdW5zLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ucG9ydF9ldnRfY250LAotCSZjbGFzc19kZXZpY2VfYXR0cl9ucGl2X2luZm8sCi0JJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfZW5hYmxlX2RhX2lkLAorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmxwZmNfdnBvcnRfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfaW5mbywKKwkmZGV2X2F0dHJfc3RhdGUsCisJJmRldl9hdHRyX251bV9kaXNjb3ZlcmVkX3BvcnRzLAorCSZkZXZfYXR0cl9scGZjX2RydnJfdmVyc2lvbiwKKwkmZGV2X2F0dHJfbHBmY19sb2dfdmVyYm9zZSwKKwkmZGV2X2F0dHJfbHBmY19sdW5fcXVldWVfZGVwdGgsCisJJmRldl9hdHRyX2xwZmNfbm9kZXZfdG1vLAorCSZkZXZfYXR0cl9scGZjX2Rldmxvc3NfdG1vLAorCSZkZXZfYXR0cl9scGZjX2hiYV9xdWV1ZV9kZXB0aCwKKwkmZGV2X2F0dHJfbHBmY19wZWVyX3BvcnRfbG9naW4sCisJJmRldl9hdHRyX2xwZmNfcmVzdHJpY3RfbG9naW4sCisJJmRldl9hdHRyX2xwZmNfZmNwX2NsYXNzLAorCSZkZXZfYXR0cl9scGZjX3VzZV9hZGlzYywKKwkmZGV2X2F0dHJfbHBmY19mZG1pX29uLAorCSZkZXZfYXR0cl9scGZjX21heF9sdW5zLAorCSZkZXZfYXR0cl9ucG9ydF9ldnRfY250LAorCSZkZXZfYXR0cl9ucGl2X2luZm8sCisJJmRldl9hdHRyX2xwZmNfZW5hYmxlX2RhX2lkLAogCU5VTEwsCiB9OwogCkBAIC0xNzA3LDkgKzE3MzksOCBAQAogCQkgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKIAlzaXplX3QgYnVmX29mZjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBjbGFzc19kZXZpY2UsCi0JCQkJCQkga29iaik7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCkBAIC0xNzQxLDkgKzE3NzIsOCBAQAogewogCXNpemVfdCBidWZfb2ZmOwogCXVpbnQzMl90ICogdG1wX3B0cjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBjbGFzc19kZXZpY2UsCi0JCQkJCQkga29iaik7Ci0Jc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCkBAIC0xNzk4LDkgKzE4MjgsOCBAQAogc3lzZnNfbWJveF93cml0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQkgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgY2xhc3NfZGV2aWNlLAotCQkJCQkJIGtvYmopOwotCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgbHBmY01ib3hxICAqbWJveCA9IE5VTEw7CkBAIC0xODUzLDkgKzE4ODIsOCBAQAogc3lzZnNfbWJveF9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGNsYXNzX2RldmljZSwKLQkJCQkJCSBrb2JqKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJaW50IHJjOwpAQCAtMTk1NCw3ICsxOTgyLDkgQEAKIAkJCShwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0KIAkJCQlNQlhfRFVNUF9NRU1PUlkgJiYKIAkJCSBwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0KLQkJCQlNQlhfUkVTVEFSVCkpIHsKKwkJCQlNQlhfUkVTVEFSVCAmJgorCQkJIHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPQorCQkJCU1CWF9XUklURV9WUEFSTVMpKSB7CiAJCQlzeXNmc19tYm94X2lkbGUocGhiYSk7CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJcmV0dXJuIC1FUEVSTTsKQEAgLTE5NjIsNyArMTk5MiwxMSBAQAogCiAJCXBoYmEtPnN5c2ZzX21ib3gubWJveC0+dnBvcnQgPSB2cG9ydDsKIAotCQlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19CTE9DS19NR01UX0lPKSB7CisJCS8qIERvbid0IGFsbG93IG1haWxib3ggY29tbWFuZHMgdG8gYmUgc2VudCB3aGVuIGJsb2NrZWQKKwkJICogb3Igd2hlbiBpbiB0aGUgbWlkZGxlIG9mIGRpc2NvdmVyeQorCQkgKi8KKwkJaWYgKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTyB8fAorCQkgICAgdnBvcnQtPmZjX2ZsYWcgJiBGQ19ORElTQ19BQ1RJVkUpIHsKIAkJCXN5c2ZzX21ib3hfaWRsZShwaGJhKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCQlyZXR1cm4gIC1FQUdBSU47CkBAIC0yMDMyLDE5ICsyMDY2LDE5IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLAogCQkJCSAgICAgICZzeXNmc19jdGxyZWdfYXR0cik7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfY2xhc3NkZXYua29iaiwKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLAogCQkJCSAgICAgICZzeXNmc19tYm94X2F0dHIpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfcmVtb3ZlX2N0bHJlZ19hdHRyOwogCiAJcmV0dXJuIDA7CiBvdXRfcmVtb3ZlX2N0bHJlZ19hdHRyOgotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2NsYXNzZGV2LmtvYmosICZzeXNmc19jdGxyZWdfYXR0cik7CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LmtvYmosICZzeXNmc19jdGxyZWdfYXR0cik7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjA1NCw4ICsyMDg4LDggQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9jbGFzc2Rldi5rb2JqLCAmc3lzZnNfbWJveF9hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9jbGFzc2Rldi5rb2JqLCAmc3lzZnNfY3RscmVnX2F0dHIpOworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLCAmc3lzZnNfbWJveF9hdHRyKTsKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYua29iaiwgJnN5c2ZzX2N0bHJlZ19hdHRyKTsKIH0KIAogCkBAIC0yNDM3LDkgKzI0NzEsMTEgQEAKIAogI2RlZmluZSBscGZjX3Jwb3J0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCBjYXN0KQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotbHBmY19zaG93X3Jwb3J0XyMjZmllbGQgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK2xwZmNfc2hvd19ycG9ydF8jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCQkgY2hhciAqYnVmKQkJCQkJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGNkZXYpOwlcCisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChkZXYpOwkJXAogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gcnBvcnQtPmhvc3RkYXRhOwkJXAogCXJldHVybiBzbnByaW50ZihidWYsIHN6LCBmb3JtYXRfc3RyaW5nLAkJCQlcCiAJCShyZGF0YS0+dGFyZ2V0KSA/IGNhc3QgcmRhdGEtPnRhcmdldC0+ZmllbGQgOiAwKTsJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAppbmRleCA4NDhkOTc3Li43YzlmODMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaApAQCAtNTUsNyArNTUsNiBAQAogdm9pZCBscGZjX21ieF9jbXBsX2ZkbWlfcmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfZW5xdWV1ZV9ub2RlKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX2RlcXVldWVfbm9kZShzdHJ1Y3QgbHBmY192cG9ydCAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKLXZvaWQgbHBmY19kaXNhYmxlX25vZGUoc3RydWN0IGxwZmNfdnBvcnQgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19lbmFibGVfbm9kZShzdHJ1Y3QgbHBmY192cG9ydCAqLAogCQkJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCBpbnQpOwogdm9pZCBscGZjX25scF9zZXRfc3RhdGUoc3RydWN0IGxwZmNfdnBvcnQgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwgaW50KTsKQEAgLTI1NCw4ICsyNTMsOCBAQAogdm9pZCBscGZjX2dldF92cG9ydF9jZmdwYXJhbShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX2FsbG9jX3N5c2ZzX2F0dHIoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfZnJlZV9zeXNmc19hdHRyKHN0cnVjdCBscGZjX3Zwb3J0ICopOwotZXh0ZXJuIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpscGZjX2hiYV9hdHRyc1tdOwotZXh0ZXJuIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpscGZjX3Zwb3J0X2F0dHJzW107CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmxwZmNfaGJhX2F0dHJzW107CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmxwZmNfdnBvcnRfYXR0cnNbXTsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGxwZmNfdGVtcGxhdGU7CiBleHRlcm4gc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBscGZjX3Zwb3J0X3RlbXBsYXRlOwogZXh0ZXJuIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBscGZjX3RyYW5zcG9ydF9mdW5jdGlvbnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKaW5kZXggM2QwY2NkOS4uMTUzYWZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtNjMsNyArNjMsNyBAQAogewogCWlmICghbXApIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCQkiMDE0NiBJZ25vcmluZyB1bnNvbGljdGVkIENUIE5vIEhCUSAiCisJCQkJIjAxNDYgSWdub3JpbmcgdW5zb2xpY2l0ZWQgQ1QgTm8gSEJRICIKIAkJCQkic3RhdHVzID0geCV4XG4iLAogCQkJCXBpb2NicS0+aW9jYi51bHBTdGF0dXMpOwogCX0KQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJCSAgICAoISh2cG9ydC0+Y3RfZmxhZ3MgJiBGQ19DVF9SRkZfSUQpKSB8fAogCQkJCSAgICAoIXZwb3J0LT5jZmdfcmVzdHJpY3RfbG9naW4pKSB7CiAJCQkJCW5kbHAgPSBscGZjX3NldHVwX2Rpc2Nfbm9kZSh2cG9ydCwgRGlkKTsKLQkJCQkJaWYgKG5kbHApIHsKKwkJCQkJaWYgKG5kbHAgJiYgTkxQX0NIS19OT0RFX0FDVChuZGxwKSkgewogCQkJCQkJbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjKHZwb3J0LAogCQkJCQkJTFBGQ19ESVNDX1RSQ19DVCwKIAkJCQkJCSJQYXJzZSBHSURfRlRyc3A6ICIKQEAgLTU0Myw3ICs1NDMsNyBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqb3V0cDsKIAlzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqQ1Ryc3A7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0JaW50IHJjLCByZXRyeTsKKwlpbnQgcmM7CiAKIAkvKiBGaXJzdCBzYXZlIG5kbHAsIGJlZm9yZSB3ZSBvdmVyd3JpdGUgaXQgKi8KIAluZGxwID0gY21kaW9jYi0+Y29udGV4dF91bi5uZGxwOwpAQCAtNTYzLDQ1ICs1NjMsMjkgQEAKIAlpZiAodnBvcnQtPmxvYWRfZmxhZyAmIEZDX1VOTE9BRElORykKIAkJZ290byBvdXQ7CiAKLQlpZiAobHBmY19lbHNfY2hrX2xhdHQodnBvcnQpIHx8IGxwZmNfZXJyb3JfbG9zdF9saW5rKGlyc3ApKSB7CisJaWYgKGxwZmNfZWxzX2Noa19sYXR0KHZwb3J0KSkgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCiAJCQkJICIwMjE2IExpbmsgZXZlbnQgZHVyaW5nIE5TIHF1ZXJ5XG4iKTsKIAkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0ZBSUxFRCk7CiAJCWdvdG8gb3V0OwogCX0KLQorCWlmIChscGZjX2Vycm9yX2xvc3RfbGluayhpcnNwKSkgeworCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCisJCQkJICIwMjI2IE5TIHF1ZXJ5IGZhaWxlZCBkdWUgdG8gbGluayBldmVudFxuIik7CisJCWdvdG8gb3V0OworCX0KIAlpZiAoaXJzcC0+dWxwU3RhdHVzKSB7CiAJCS8qIENoZWNrIGZvciByZXRyeSAqLwogCQlpZiAodnBvcnQtPmZjX25zX3JldHJ5IDwgTFBGQ19NQVhfTlNfUkVUUlkpIHsKLQkJCXJldHJ5ID0gMTsKLQkJCWlmIChpcnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgewotCQkJCXN3aXRjaCAoaXJzcC0+dW4udWxwV29yZFs0XSkgewotCQkJCWNhc2UgSU9FUlJfTk9fUkVTT1VSQ0VTOgotCQkJCQkvKiBXZSBkb24ndCBpbmNyZW1lbnQgdGhlIHJldHJ5Ci0JCQkJCSAqIGNvdW50IGZvciB0aGlzIGNhc2UuCi0JCQkJCSAqLwotCQkJCQlicmVhazsKLQkJCQljYXNlIElPRVJSX0xJTktfRE9XTjoKLQkJCQljYXNlIElPRVJSX1NMSV9BQk9SVEVEOgotCQkJCWNhc2UgSU9FUlJfU0xJX0RPV046Ci0JCQkJCXJldHJ5ID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJdnBvcnQtPmZjX25zX3JldHJ5Kys7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQorCQkJaWYgKGlyc3AtPnVscFN0YXR1cyAhPSBJT1NUQVRfTE9DQUxfUkVKRUNUIHx8CisJCQkgICAgaXJzcC0+dW4udWxwV29yZFs0XSAhPSBJT0VSUl9OT19SRVNPVVJDRVMpCiAJCQkJdnBvcnQtPmZjX25zX3JldHJ5Kys7CiAKLQkJCWlmIChyZXRyeSkgewotCQkJCS8qIENUIGNvbW1hbmQgaXMgYmVpbmcgcmV0cmllZCAqLwotCQkJCXJjID0gbHBmY19uc19jbWQodnBvcnQsIFNMSV9DVE5TX0dJRF9GVCwKKwkJCS8qIENUIGNvbW1hbmQgaXMgYmVpbmcgcmV0cmllZCAqLworCQkJcmMgPSBscGZjX25zX2NtZCh2cG9ydCwgU0xJX0NUTlNfR0lEX0ZULAogCQkJCQkgdnBvcnQtPmZjX25zX3JldHJ5LCAwKTsKLQkJCQlpZiAocmMgPT0gMCkgewotCQkJCQkvKiBzdWNjZXNzICovCi0JCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCX0KKwkJCWlmIChyYyA9PSAwKQorCQkJCWdvdG8gb3V0OwogCQl9CiAJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9GQUlMRUQpOwogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0VMUywKQEAgLTc4MCw3ICs3NjQsNyBAQAogCiAJLyogVGhpcyBpcyBhIHRhcmdldCBwb3J0LCB1bnJlZ2lzdGVyZWQgcG9ydCwgb3IgdGhlIEdGRl9JRCBmYWlsZWQgKi8KIAluZGxwID0gbHBmY19zZXR1cF9kaXNjX25vZGUodnBvcnQsIGRpZCk7Ci0JaWYgKG5kbHApIHsKKwlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0RJU0NPVkVSWSwKIAkJCQkgIjAyNDIgUHJvY2VzcyB4JXggR0ZGICIKIAkJCQkgIk5hbWVTZXJ2ZXIgUnNwIERhdGE6IHgleCB4JXggeCV4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwppbmRleCA3ODNkMWVlLi45MDI3MmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwpAQCAtNTAzLDYgKzUwMyw4IEBACiAJCQkJbmRscC0+bmxwX3NpZCk7CiAJCWlmIChuZGxwLT5ubHBfdHlwZSAmIE5MUF9GQ1BfSU5JVElBVE9SKQogCQkJbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwgIkZDUF9JTklUSUFUT1IgIik7CisJCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwgInVzZ21hcDoleCAiLAorCQkJbmRscC0+bmxwX3VzZ19tYXApOwogCQlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sICJyZWZjbnQ6JXgiLAogCQkJYXRvbWljX3JlYWQoJm5kbHAtPmtyZWYucmVmY291bnQpKTsKIAkJbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwgIlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCBjYmI2OGE5Li44ODZjNWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTcxOSw5ICs3MTksOSBAQAogCQlpZiAoaWNtZC0+dWxwQ29tbWFuZCA9PSBDTURfRUxTX1JFUVVFU1Q2NF9DUiAmJgogCQkgICAgaWNtZC0+dW4uZWxzcmVxNjQuYmRsLnVscElvVGFnMzIpIHsKIAkJCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikoaW9jYi0+Y29udGV4dDEpOwotCQkJaWYgKG5kbHAgJiYgKG5kbHAtPm5scF9ESUQgPT0gRmFicmljX0RJRCkpIHsKKwkJCWlmIChuZGxwICYmIE5MUF9DSEtfTk9ERV9BQ1QobmRscCkgJiYKKwkJCSAgICAobmRscC0+bmxwX0RJRCA9PSBGYWJyaWNfRElEKSkKIAkJCQlscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhwaGJhLCBwcmluZywgaW9jYik7Ci0JCQl9CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKQEAgLTgyOSw3ICs4MjksNyBAQAogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CiAJc3RydWN0IHNlcnZfcGFybSAqc3A7CiAJdWludDhfdCAgbmFtZVtzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSldOwotCXVpbnQzMl90IHJjOworCXVpbnQzMl90IHJjLCBrZWVwRElEID0gMDsKIAogCS8qIEZhYnJpYyBub2RlcyBjYW4gaGF2ZSB0aGUgc2FtZSBXV1BOIHNvIHdlIGRvbid0IGJvdGhlciBzZWFyY2hpbmcKIAkgKiBieSBXV1BOLiAgSnVzdCByZXR1cm4gdGhlIG5kbHAgdGhhdCB3YXMgZ2l2ZW4gdG8gdXMuCkBAIC04NTgsMTEgKzg1OCwxNyBAQAogCQkJcmV0dXJuIG5kbHA7CiAJCWxwZmNfbmxwX2luaXQodnBvcnQsIG5ld19uZGxwLCBuZGxwLT5ubHBfRElEKTsKIAl9IGVsc2UgaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5ld19uZGxwKSkgeworCQlyYyA9IG1lbWNtcCgmbmRscC0+bmxwX3BvcnRuYW1lLCBuYW1lLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCWlmICghcmMpCisJCQlyZXR1cm4gbmRscDsKIAkJbmV3X25kbHAgPSBscGZjX2VuYWJsZV9ub2RlKHZwb3J0LCBuZXdfbmRscCwKIAkJCQkJCU5MUF9TVEVfVU5VU0VEX05PREUpOwogCQlpZiAoIW5ld19uZGxwKQogCQkJcmV0dXJuIG5kbHA7Ci0JfQorCQlrZWVwRElEID0gbmV3X25kbHAtPm5scF9ESUQ7CisJfSBlbHNlCisJCWtlZXBESUQgPSBuZXdfbmRscC0+bmxwX0RJRDsKIAogCWxwZmNfdW5yZWdfcnBpKHZwb3J0LCBuZXdfbmRscCk7CiAJbmV3X25kbHAtPm5scF9ESUQgPSBuZGxwLT5ubHBfRElEOwpAQCAtODkzLDEyICs4OTksMjQgQEAKIAkJCX0KIAkJCW5ld19uZGxwLT5ubHBfdHlwZSA9IG5kbHAtPm5scF90eXBlOwogCQl9CisJCS8qIFdlIHNoYWxsIGFjdHVhbGx5IGZyZWUgdGhlIG5kbHAgd2l0aCBib3RoIG5scF9ESUQgYW5kCisJCSAqIG5scF9wb3J0bmFtZSBmaWVsZHMgZXF1YWxzIDAgdG8gYXZvaWQgYW55IG5kbHAgb24gdGhlCisJCSAqIG5vZGVsaXN0IG5ldmVyIHRvIGJlIHVzZWQuCisJCSAqLworCQlpZiAobmRscC0+bmxwX0RJRCA9PSAwKSB7CisJCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5uZGxwX2xvY2spOworCQkJTkxQX1NFVF9GUkVFX1JFUShuZGxwKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+bmRscF9sb2NrKTsKKwkJfQogCisJCS8qIFR3byBuZGxwcyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBkaWQgb24gdGhlIG5vZGVsaXN0ICovCisJCW5kbHAtPm5scF9ESUQgPSBrZWVwRElEOwogCQlscGZjX2Ryb3Bfbm9kZSh2cG9ydCwgbmRscCk7CiAJfQogCWVsc2UgewogCQlscGZjX3VucmVnX3JwaSh2cG9ydCwgbmRscCk7Ci0JCW5kbHAtPm5scF9ESUQgPSAwOyAvKiBUd28gbmRscHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgZGlkICovCisJCS8qIFR3byBuZGxwcyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBkaWQgKi8KKwkJbmRscC0+bmxwX0RJRCA9IGtlZXBESUQ7CiAJCWxwZmNfbmxwX3NldF9zdGF0ZSh2cG9ydCwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7CiAJfQogCXJldHVybiBuZXdfbmRscDsKQEAgLTIwOTEsNyArMjEwOSw3IEBACiAJCX0KIAogCQlwaGJhLT5mY19zdGF0LmVsc1htaXRSZXRyeSsrOwotCQlpZiAobmRscCAmJiBkZWxheSkgeworCQlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApICYmIGRlbGF5KSB7CiAJCQlwaGJhLT5mY19zdGF0LmVsc0RlbGF5UmV0cnkrKzsKIAkJCW5kbHAtPm5scF9yZXRyeSA9IGNtZGlvY2ItPnJldHJ5OwogCkBAIC0yMTIxLDcgKzIxMzksNyBAQAogCQkJbHBmY19pc3N1ZV9lbHNfZmRpc2ModnBvcnQsIG5kbHAsIGNtZGlvY2ItPnJldHJ5KTsKIAkJCXJldHVybiAxOwogCQljYXNlIEVMU19DTURfUExPR0k6Ci0JCQlpZiAobmRscCkgeworCQkJaWYgKG5kbHAgJiYgTkxQX0NIS19OT0RFX0FDVChuZGxwKSkgewogCQkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwogCQkJCWxwZmNfbmxwX3NldF9zdGF0ZSh2cG9ydCwgbmRscCwKIAkJCQkJCSAgIE5MUF9TVEVfUExPR0lfSVNTVUUpOwpAQCAtMjMwMiw3ICsyMzIwLDcgQEAKIAlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCWtmcmVlKG1wKTsKIAltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKLQlpZiAobmRscCkgeworCWlmIChuZGxwICYmIE5MUF9DSEtfTk9ERV9BQ1QobmRscCkpIHsKIAkJbHBmY19ubHBfcHV0KG5kbHApOwogCQkvKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGRlZmF1bHQgUlBJIGNsZWFudXAgbG9naWMgZm9yIHRoaXMKIAkJICogbmRscC4gSWYgbm8gb3RoZXIgZGlzY292ZXJ5IHRocmVhZHMgYXJlIHVzaW5nIHRoaXMgbmRscC4KQEAgLTIzMzUsNyArMjM1Myw4IEBACiAJICogZnVuY3Rpb24gY2FuIGhhdmUgY21kaW9jYi0+Y29udGVzdDEgKG5kbHApIGZpZWxkIHNldCB0byBOVUxMLgogCSAqLwogCXBjbWQgPSAodWludDhfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgY21kaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKLQlpZiAobmRscCAmJiAoKigodWludDMyX3QgKikgKHBjbWQpKSA9PSBFTFNfQ01EX0xTX1JKVCkpIHsKKwlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApICYmCisJICAgICgqKCh1aW50MzJfdCAqKSAocGNtZCkpID09IEVMU19DTURfTFNfUkpUKSkgewogCQkvKiBBIExTX1JKVCBhc3NvY2lhdGVkIHdpdGggRGVmYXVsdCBSUEkgY2xlYW51cCBoYXMgaXRzIG93bgogCQkgKiBzZXBlcmF0ZSBjb2RlIHBhdGguCiAJCSAqLwpAQCAtMjM0NCw3ICsyMzYzLDcgQEAKIAl9CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgbGluayB3ZW50IGRvd24gZHVyaW5nIGRpc2NvdmVyeSAqLwotCWlmICghbmRscCB8fCBscGZjX2Vsc19jaGtfbGF0dCh2cG9ydCkpIHsKKwlpZiAoIW5kbHAgfHwgIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkgfHwgbHBmY19lbHNfY2hrX2xhdHQodnBvcnQpKSB7CiAJCWlmIChtYm94KSB7CiAJCQltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgbWJveC0+Y29udGV4dDE7CiAJCQlpZiAobXApIHsKQEAgLTIzNTMsNyArMjM3Miw4IEBACiAJCQl9CiAJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCX0KLQkJaWYgKG5kbHAgJiYgKG5kbHAtPm5scF9mbGFnICYgTkxQX1JNX0RGTFRfUlBJKSkKKwkJaWYgKG5kbHAgJiYgTkxQX0NIS19OT0RFX0FDVChuZGxwKSAmJgorCQkgICAgKG5kbHAtPm5scF9mbGFnICYgTkxQX1JNX0RGTFRfUlBJKSkKIAkJCWlmIChscGZjX25scF9ub3RfdXNlZChuZGxwKSkgewogCQkJCW5kbHAgPSBOVUxMOwogCQkJCS8qIEluZGljYXRlIHRoZSBub2RlIGhhcyBhbHJlYWR5IHJlbGVhc2VkLApAQCAtMjQ0Myw3ICsyNDYzLDcgQEAKIAkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCX0KIG91dDoKLQlpZiAobmRscCkgeworCWlmIChuZGxwICYmIE5MUF9DSEtfTk9ERV9BQ1QobmRscCkpIHsKIAkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfQUNDX1JFR0xPR0lOIHwgTkxQX1JNX0RGTFRfUlBJKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwpAQCAtMzEzOSw2ICszMTU5LDggQEAKIAkJLyogQW5vdGhlciB0aHJlYWQgaXMgd2Fsa2luZyBmY19yc2NuX2lkX2xpc3Qgb24gdGhpcyB2cG9ydCAqLwogCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1JTQ05fRElTQ09WRVJZOworCQkvKiBTZW5kIGJhY2sgQUNDICovCisJCWxwZmNfZWxzX3JzcF9hY2ModnBvcnQsIEVMU19DTURfQUNDLCBjbWRpb2NiLCBuZGxwLCBOVUxMKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIEluZGljYXRlIHdlIGFyZSB3YWxraW5nIGZjX3JzY25faWRfbGlzdCBvbiB0aGlzIHZwb3J0ICovCkBAIC0zOTI4LDcgKzM5NTAsNyBAQAogCQllbHNlIHsKIAkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwogCQkJbmRscCA9IF9fbHBmY19maW5kbm9kZV9ycGkodnBvcnQsIGNtZC0+dWxwQ29udGV4dCk7Ci0JCQlpZiAobmRscCkKKwkJCWlmIChuZGxwICYmIE5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCiAJCQkJcmVtb3RlX0lEID0gbmRscC0+bmxwX0RJRDsKIAkJfQogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0VMUywKQEAgLTQwOTcsMjEgKzQxMTksMjIgQEAKIAkJbmV3bm9kZSA9IDE7CiAJCWlmICgoZGlkICYgRmFicmljX0RJRF9NQVNLKSA9PSBGYWJyaWNfRElEX01BU0spCiAJCQluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwotCX0gZWxzZSB7Ci0JCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSkgewotCQkJbmRscCA9IGxwZmNfZW5hYmxlX25vZGUodnBvcnQsIG5kbHAsCi0JCQkJCQlOTFBfU1RFX1VOVVNFRF9OT0RFKTsKLQkJCWlmICghbmRscCkKLQkJCQlnb3RvIGRyb3BpdDsKLQkJfQotCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfVU5VU0VEX05PREUpIHsKLQkJCS8qIFRoaXMgaXMgc2ltdWxhciB0byB0aGUgbmV3IG5vZGUgcGF0aCAqLwotCQkJbmRscCA9IGxwZmNfbmxwX2dldChuZGxwKTsKLQkJCWlmICghbmRscCkKLQkJCQlnb3RvIGRyb3BpdDsKLQkJCWxwZmNfbmxwX3NldF9zdGF0ZSh2cG9ydCwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7Ci0JCQluZXdub2RlID0gMTsKLQkJfQorCX0gZWxzZSBpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpIHsKKwkJbmRscCA9IGxwZmNfZW5hYmxlX25vZGUodnBvcnQsIG5kbHAsCisJCQkJCU5MUF9TVEVfVU5VU0VEX05PREUpOworCQlpZiAoIW5kbHApCisJCQlnb3RvIGRyb3BpdDsKKwkJbHBmY19ubHBfc2V0X3N0YXRlKHZwb3J0LCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKKwkJbmV3bm9kZSA9IDE7CisJCWlmICgoZGlkICYgRmFicmljX0RJRF9NQVNLKSA9PSBGYWJyaWNfRElEX01BU0spCisJCQluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOworCX0gZWxzZSBpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfVU5VU0VEX05PREUpIHsKKwkJLyogVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBuZXcgbm9kZSBwYXRoICovCisJCW5kbHAgPSBscGZjX25scF9nZXQobmRscCk7CisJCWlmICghbmRscCkKKwkJCWdvdG8gZHJvcGl0OworCQlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOworCQluZXdub2RlID0gMTsKIAl9CiAKIAlwaGJhLT5mY19zdGF0LmVsc1JjdkZyYW1lKys7CkBAIC00NDUxLDcgKzQ0NzQsNiBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWxwZmNfbmxwX2luaXQodnBvcnQsIG5kbHAsIE5hbWVTZXJ2ZXJfRElEKTsKLQkJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKIAl9IGVsc2UgaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7CiAJCW5kbHAgPSBscGZjX2VuYWJsZV9ub2RlKHZwb3J0LCBuZGxwLCBOTFBfU1RFX1VOVVNFRF9OT0RFKTsKIAkJaWYgKCFuZGxwKSB7CkBAIC00NDY1LDYgKzQ0ODcsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJfQorCW5kbHAtPm5scF90eXBlIHw9IE5MUF9GQUJSSUM7CiAKIAlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfUExPR0lfSVNTVUUpOwogCkBAIC00NDgxLDggKzQ1MDQsOCBAQAogCQlpZiAobmRscF9mZG1pKSB7CiAJCQlscGZjX25scF9pbml0KHZwb3J0LCBuZGxwX2ZkbWksIEZETUlfRElEKTsKIAkJCW5kbHBfZmRtaS0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKLQkJCW5kbHBfZmRtaS0+bmxwX3N0YXRlID0KLQkJCQlOTFBfU1RFX1BMT0dJX0lTU1VFOworCQkJbHBmY19ubHBfc2V0X3N0YXRlKHZwb3J0LCBuZGxwX2ZkbWksCisJCQkJTkxQX1NURV9QTE9HSV9JU1NVRSk7CiAJCQlscGZjX2lzc3VlX2Vsc19wbG9naSh2cG9ydCwgbmRscF9mZG1pLT5ubHBfRElELAogCQkJCQkgICAgIDApOwogCQl9CkBAIC01MDc0LDM5ICs1MDk3LDMgQEAKIAkJKHBpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBwaW9jYiwgcGlvY2IpOwogCX0KIH0KLQotCi0jaWYgMAotdm9pZCBscGZjX2ZhYnJpY19hYm9ydF9mbG9naShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCi17Ci0JTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKLQlzdHJ1Y3QgbHBmY19pb2NicSAqdG1wX2lvY2IsICpwaW9jYjsKLQlJT0NCX3QgKmNtZDsKLQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKLQotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwaW9jYiwgdG1wX2lvY2IsICZwaGJhLT5mYWJyaWNfaW9jYl9saXN0LAotCQkJCSBsaXN0KSB7Ci0KLQkJY21kID0gJnBpb2NiLT5pb2NiOwotCQluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopIHBpb2NiLT5jb250ZXh0MTsKLQkJaWYgKGNtZC0+dWxwQ29tbWFuZCA9PSBDTURfRUxTX1JFUVVFU1Q2NF9DUiAmJgotCQkgICAgbmRscCAhPSBOVUxMICYmCi0JCSAgICBuZGxwLT5ubHBfRElEID09IEZhYnJpY19ESUQpCi0JCQlsaXN0X21vdmVfdGFpbCgmcGlvY2ItPmxpc3QsICZjb21wbGV0aW9ucyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmNvbXBsZXRpb25zKSkgewotCQlwaW9jYiA9IGxpc3RfZ2V0X2ZpcnN0KCZjb21wbGV0aW9ucywgc3RydWN0IGxwZmNfaW9jYnEsIGxpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZwaW9jYi0+bGlzdCk7Ci0KLQkJY21kID0gJnBpb2NiLT5pb2NiOwotCQljbWQtPnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7Ci0JCWNtZC0+dW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9BQk9SVEVEOwotCQkocGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsIHBpb2NiLCBwaW9jYik7Ci0JfQotfQotI2VuZGlmICAvKiAgMCAgKi8KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IGJkNTcyZDYuLjdjYjY4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC02OSw3ICs2OSw3IEBACiAJcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAluZGxwID0gcmRhdGEtPnBub2RlOwogCi0JaWYgKCFuZGxwKSB7CisJaWYgKCFuZGxwIHx8ICFOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7CiAJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpCiAJCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBmaW5kIHJlbW90ZSBub2RlIgogCQkJIiB0byB0ZXJtaW5hdGUgSS9PIERhdGEgeCV4XG4iLApAQCAtMTE0LDcgKzExNCw3IEBACiAKIAlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCW5kbHAgPSByZGF0YS0+cG5vZGU7Ci0JaWYgKCFuZGxwKQorCWlmICghbmRscCB8fCAhTkxQX0NIS19OT0RFX0FDVChuZGxwKSkKIAkJcmV0dXJuOwogCiAJdnBvcnQgPSBuZGxwLT52cG9ydDsKQEAgLTI0Myw4ICsyNDMsOCBAQAogCWlmICh3YXJuX29uKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAogCQkJCSAiMDIwMyBEZXZsb3NzIHRpbWVvdXQgb24gIgotCQkJCSAiV1dQTiAleDoleDoleDoleDoleDoleDoleDoleCAiCi0JCQkJICJOUG9ydCB4JXggRGF0YTogeCV4IHgleCB4JXhcbiIsCisJCQkJICJXV1BOICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAiCisJCQkJICJOUG9ydCB4JTA2eCBEYXRhOiB4JXggeCV4IHgleFxuIiwKIAkJCQkgKm5hbWUsICoobmFtZSsxKSwgKihuYW1lKzIpLCAqKG5hbWUrMyksCiAJCQkJICoobmFtZSs0KSwgKihuYW1lKzUpLCAqKG5hbWUrNiksICoobmFtZSs3KSwKIAkJCQkgbmRscC0+bmxwX0RJRCwgbmRscC0+bmxwX2ZsYWcsCkBAIC0yNTIsOCArMjUyLDggQEAKIAl9IGVsc2UgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCiAJCQkJICIwMjA0IERldmxvc3MgdGltZW91dCBvbiAiCi0JCQkJICJXV1BOICV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4ICIKLQkJCQkgIk5Qb3J0IHgleCBEYXRhOiB4JXggeCV4IHgleFxuIiwKKwkJCQkgIldXUE4gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4ICIKKwkJCQkgIk5Qb3J0IHglMDZ4IERhdGE6IHgleCB4JXggeCV4XG4iLAogCQkJCSAqbmFtZSwgKihuYW1lKzEpLCAqKG5hbWUrMiksICoobmFtZSszKSwKIAkJCQkgKihuYW1lKzQpLCAqKG5hbWUrNSksICoobmFtZSs2KSwgKihuYW1lKzcpLAogCQkJCSBuZGxwLT5ubHBfRElELCBuZGxwLT5ubHBfZmxhZywKQEAgLTM5OSw3ICszOTksMTAgQEAKIAkJCQl2cG9ydCA9IHZwb3J0c1tpXTsKIAkJCWlmICh2cG9ydCA9PSBOVUxMKQogCQkJCWJyZWFrOworCQkJc3Bpbl9sb2NrX2lycSgmdnBvcnQtPndvcmtfcG9ydF9sb2NrKTsKIAkJCXdvcmtfcG9ydF9ldmVudHMgPSB2cG9ydC0+d29ya19wb3J0X2V2ZW50czsKKwkJCXZwb3J0LT53b3JrX3BvcnRfZXZlbnRzICY9IH53b3JrX3BvcnRfZXZlbnRzOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ2cG9ydC0+d29ya19wb3J0X2xvY2spOwogCQkJaWYgKHdvcmtfcG9ydF9ldmVudHMgJiBXT1JLRVJfRElTQ19UTU8pCiAJCQkJbHBmY19kaXNjX3RpbWVvdXRfaGFuZGxlcih2cG9ydCk7CiAJCQlpZiAod29ya19wb3J0X2V2ZW50cyAmIFdPUktFUl9FTFNfVE1PKQpAQCAtNDE2LDkgKzQxOSw2IEBACiAJCQkJbHBmY19yYW1wX2Rvd25fcXVldWVfaGFuZGxlcihwaGJhKTsKIAkJCWlmICh3b3JrX3BvcnRfZXZlbnRzICYgV09SS0VSX1JBTVBfVVBfUVVFVUUpCiAJCQkJbHBmY19yYW1wX3VwX3F1ZXVlX2hhbmRsZXIocGhiYSk7Ci0JCQlzcGluX2xvY2tfaXJxKCZ2cG9ydC0+d29ya19wb3J0X2xvY2spOwotCQkJdnBvcnQtPndvcmtfcG9ydF9ldmVudHMgJj0gfndvcmtfcG9ydF9ldmVudHM7Ci0JCQlzcGluX3VubG9ja19pcnEoJnZwb3J0LT53b3JrX3BvcnRfbG9jayk7CiAJCX0KIAlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwogCkBAIC00MzAsMTAgKzQzMCwxMCBAQAogCQlpZiAocHJpbmctPmZsYWcgJiBMUEZDX1NUT1BfSU9DQl9FVkVOVCkgewogCQkJcHJpbmctPmZsYWcgfD0gTFBGQ19ERUZFUlJFRF9SSU5HX0VWRU5UOwogCQl9IGVsc2UgeworCQkJcHJpbmctPmZsYWcgJj0gfkxQRkNfREVGRVJSRURfUklOR19FVkVOVDsKIAkJCWxwZmNfc2xpX2hhbmRsZV9zbG93X3JpbmdfZXZlbnQocGhiYSwgcHJpbmcsCiAJCQkJCQkJKHN0YXR1cyAmCiAJCQkJCQkJIEhBX1JYTUFTSykpOwotCQkJcHJpbmctPmZsYWcgJj0gfkxQRkNfREVGRVJSRURfUklOR19FVkVOVDsKIAkJfQogCQkvKgogCQkgKiBUdXJuIG9uIFJpbmcgaW50ZXJydXB0cwpAQCAtNTE5LDcgKzUxOSw5IEBACiAJCQlzY2hlZHVsZSgpOwogCQl9CiAJfQorCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXBoYmEtPndvcmtfd2FpdCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODA5LDExICs4MTEsOSBAQAogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQl2cG9ydC0+ZmNfZmxhZyAmPSB+KEZDX0FCT1JUX0RJU0NPVkVSWSB8IEZDX0VTVEFCTElTSF9MSU5LKTsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfQUJPUlRfRElTQ09WRVJZOwogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAotCWRlbF90aW1lcl9zeW5jKCZwaGJhLT5mY19lc3RhYnRtbyk7Ci0KIAlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKIAogCS8qIHR1cm4gb24gTGluayBBdHRlbnRpb24gaW50ZXJydXB0cyAqLwpAQCAtMTM0MCwxMCArMTM0MCwxNCBAQAogCQkJICAgIGkrKykgewogCQkJCWlmICh2cG9ydHNbaV0tPnBvcnRfdHlwZSA9PSBMUEZDX1BIWVNJQ0FMX1BPUlQpCiAJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSB7CisJCQkJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0c1tpXSwKKwkJCQkJCQlGQ19WUE9SVF9MSU5LRE9XTik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KIAkJCQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTlBJVl9GQUJfU1VQUE9SVEVEKQogCQkJCQlscGZjX2luaXRpYWxfZmRpc2ModnBvcnRzW2ldKTsKLQkJCQllbHNlIGlmIChwaGJhLT5zbGkzX29wdGlvbnMgJgotCQkJCQkJTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkgeworCQkJCWVsc2UgewogCQkJCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydHNbaV0sCiAJCQkJCQlGQ19WUE9SVF9OT19GQUJSSUNfU1VQUCk7CiAJCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLApAQCAtMTY5NCw3ICsxNjk4LDcgQEAKIAkJCQlOTFBfU1RFX1VOVVNFRF9OT0RFKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGxwZmNfZGlzYWJsZV9ub2RlKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CiAJaWYgKChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pICE9IDApCkBAIC0yMTkwLDEwICsyMTk0LDYgQEAKIAlpZiAoZGlkID09IEJjYXN0X0RJRCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobmRscC0+bmxwX0RJRCA9PSAwKSB7Ci0JCXJldHVybiAwOwotCX0KLQogCS8qIEZpcnN0IGNoZWNrIGZvciBEaXJlY3QgbWF0Y2ggKi8KIAlpZiAobmRscC0+bmxwX0RJRCA9PSBkaWQpCiAJCXJldHVybiAxOwpAQCAtMjMwMSw3ICsyMzAxLDggQEAKIAkJcmV0dXJuIG5kbHA7CiAJfQogCi0JaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSB7CisJaWYgKCh2cG9ydC0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkgJiYKKwkgICAgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX05ESVNDX0FDVElWRSkpIHsKIAkJaWYgKGxwZmNfcnNjbl9wYXlsb2FkX2NoZWNrKHZwb3J0LCBkaWQpKSB7CiAJCQkvKiBJZiB3ZSd2ZSBhbHJlYWR5IHJlY2lldmVkIGEgUExPR0kgZnJvbSB0aGlzIE5Qb3J0CiAJCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyeSB0byBkaXNjb3ZlciBpdCBhZ2Fpbi4KQEAgLTI5NDcsMjQgKzI5NDgsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0jaWYgMAotLyoKLSAqIFNlYXJjaCBub2RlIGxpc3RzIGZvciBhIHJlbW90ZSBwb3J0IG1hdGNoaW5nIGZpbHRlciBjcml0ZXJpYQotICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgaG9zdF9sb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMgcm91dGluZS4KLSAqLwotc3RydWN0IGxwZmNfbm9kZWxpc3QgKgotbHBmY19maW5kX25vZGUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBub2RlX2ZpbHRlciBmaWx0ZXIsIHZvaWQgKnBhcmFtKQotewotCXN0cnVjdCBTY3NpX0hvc3QgICAgICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7Ci0Jc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0KLQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCW5kbHAgPSBfX2xwZmNfZmluZF9ub2RlKHZwb3J0LCBmaWx0ZXIsIHBhcmFtKTsKLQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIG5kbHA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiAvKgogICogVGhpcyByb3V0aW5lIGxvb2tzIHVwIHRoZSBuZGxwIGxpc3RzIGZvciB0aGUgZ2l2ZW4gUlBJLiBJZiBycGkgZm91bmQgaXQKICAqIHJldHVybnMgdGhlIG5vZGUgbGlzdCBlbGVtZW50IHBvaW50ZXIgZWxzZSByZXR1cm4gTlVMTC4KQEAgLTI5NzUsMjAgKzI5NTgsNiBAQAogCXJldHVybiBfX2xwZmNfZmluZF9ub2RlKHZwb3J0LCBscGZjX2ZpbHRlcl9ieV9ycGksICZycGkpOwogfQogCi0jaWYgMAotc3RydWN0IGxwZmNfbm9kZWxpc3QgKgotbHBmY19maW5kbm9kZV9ycGkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MTZfdCBycGkpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOwotCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwotCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQluZGxwID0gX19scGZjX2ZpbmRub2RlX3JwaSh2cG9ydCwgcnBpKTsKLQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIG5kbHA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiAvKgogICogVGhpcyByb3V0aW5lIGxvb2tzIHVwIHRoZSBuZGxwIGxpc3RzIGZvciB0aGUgZ2l2ZW4gV1dQTi4gSWYgV1dQTiBmb3VuZCBpdAogICogcmV0dXJucyB0aGUgbm9kZSBlbGVtZW50IGxpc3QgcG9pbnRlciBlbHNlIHJldHVybiBOVUxMLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCAyMjg0Mzc1Li5mYTc1N2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtNTU5LDggKzU1OSwxMCBAQAogCQlwaGJhLT5wcG9ydC0+d29ya19wb3J0X2V2ZW50cyB8PSBXT1JLRVJfSEJfVE1POwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPnBwb3J0LT53b3JrX3BvcnRfbG9jaywgaWZsYWcpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKIAlpZiAocGhiYS0+d29ya193YWl0KQogCQl3YWtlX3VwKHBoYmEtPndvcmtfd2FpdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWcpOwogCXJldHVybjsKIH0KIApAQCAtNzE0LDEyICs3MTYsMTAgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBwaGJhLT5wcG9ydDsKIAlzdHJ1Y3QgbHBmY19zbGkgICAqcHNsaSA9ICZwaGJhLT5zbGk7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgICpwcmluZzsKLQlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKIAl1aW50MzJfdCBldmVudF9kYXRhOwogCXVuc2lnbmVkIGxvbmcgdGVtcGVyYXR1cmU7CiAJc3RydWN0IHRlbXBfZXZlbnQgdGVtcF9ldmVudF9kYXRhOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKLQlpbnQgaTsKIAogCS8qIElmIHRoZSBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgcG9zc2libGUgZXJyb3JzLAogCSAqIHNpbmNlIHdlIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwY2kgY2FyZCBhbnl3YXkuICovCkBAIC03MjksMjUgKzcyOSwxNCBAQAogCWlmICghcGhiYS0+Y2ZnX2VuYWJsZV9oYmFfcmVzZXQpCiAJCXJldHVybjsKIAotCWlmIChwaGJhLT53b3JrX2hzICYgSFNfRkZFUjYgfHwKLQkgICAgcGhiYS0+d29ya19ocyAmIEhTX0ZGRVI1KSB7CisJaWYgKHBoYmEtPndvcmtfaHMgJiBIU19GRkVSNikgewogCQkvKiBSZS1lc3RhYmxpc2hpbmcgTGluayAqLwogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfTElOS19FVkVOVCwKIAkJCQkiMTMwMSBSZS1lc3RhYmxpc2hpbmcgTGluayAiCiAJCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAogCQkJCXBoYmEtPndvcmtfaHMsCiAJCQkJcGhiYS0+d29ya19zdGF0dXNbMF0sIHBoYmEtPndvcmtfc3RhdHVzWzFdKTsKLQkJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKLQkJaWYgKHZwb3J0cyAhPSBOVUxMKQotCQkJZm9yKGkgPSAwOwotCQkJICAgIGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsKLQkJCSAgICBpKyspewotCQkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7Ci0JCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQl2cG9ydHNbaV0tPmZjX2ZsYWcgfD0gRkNfRVNUQUJMSVNIX0xJTks7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJfQotCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCiAJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQlwc2xpLT5zbGlfZmxhZyAmPSB+TFBGQ19TTEkyX0FDVElWRTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKQEAgLTc2MSw3ICs3NTAsNiBAQAogCQlwcmluZyA9ICZwc2xpLT5yaW5nW3BzbGktPmZjcF9yaW5nXTsKIAkJbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nKHBoYmEsIHByaW5nKTsKIAotCiAJCS8qCiAJCSAqIFRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAgVGFrZSB0aGUgaGJhIG9mZmxpbmUgYW5kIHRoZW4KIAkJICogYXR0ZW1wdCB0byByZXN0YXJ0IGl0LgpAQCAtNzcwLDcgKzc1OCw2IEBACiAJCWxwZmNfb2ZmbGluZShwaGJhKTsKIAkJbHBmY19zbGlfYnJkcmVzdGFydChwaGJhKTsKIAkJaWYgKGxwZmNfb25saW5lKHBoYmEpID09IDApIHsJLyogSW5pdGlhbGl6ZSB0aGUgSEJBICovCi0JCQltb2RfdGltZXIoJnBoYmEtPmZjX2VzdGFidG1vLCBqaWZmaWVzICsgSFogKiA2MCk7CiAJCQlscGZjX3VuYmxvY2tfbWdtdF9pbyhwaGJhKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTQ1NCw2ICsxNDQxLDEzIEBACiAJCQlOTFBfU0VUX0ZSRUVfUkVRKG5kbHApOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPm5kbHBfbG9jayk7CiAKKwkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgIT0gTFBGQ19QSFlTSUNBTF9QT1JUICYmCisJCSAgICBuZGxwLT5ubHBfRElEID09IEZhYnJpY19ESUQpIHsKKwkJCS8qIEp1c3QgZnJlZSB1cCBuZGxwIHdpdGggRmFicmljX0RJRCBmb3IgdnBvcnRzICovCisJCQlscGZjX25scF9wdXQobmRscCk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmIChuZGxwLT5ubHBfdHlwZSAmIE5MUF9GQUJSSUMpCiAJCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZSh2cG9ydCwgbmRscCwgTlVMTCwKIAkJCQkJTkxQX0VWVF9ERVZJQ0VfUkVDT1ZFUlkpOwpAQCAtMTQ5MSwzMSArMTQ4NSw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZAotbHBmY19lc3RhYmxpc2hfbGlua190bW8odW5zaWduZWQgbG9uZyBwdHIpCi17Ci0Jc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIHB0cjsKLQlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKLQl1bnNpZ25lZCBsb25nIGlmbGFnOwotCWludCBpOwotCi0JLyogUmUtZXN0YWJsaXNoaW5nIExpbmssIHRpbWVyIGV4cGlyZWQgKi8KLQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSU5LX0VWRU5ULAotCQkJIjEzMDAgUmUtZXN0YWJsaXNoaW5nIExpbmssIHRpbWVyIGV4cGlyZWQgIgotCQkJIkRhdGE6IHgleCB4JXhcbiIsCi0JCQlwaGJhLT5wcG9ydC0+ZmNfZmxhZywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOwotCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7Ci0JaWYgKHZwb3J0cyAhPSBOVUxMKQotCQlmb3IoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKLQkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBpZmxhZyk7Ci0JCQl2cG9ydHNbaV0tPmZjX2ZsYWcgJj0gfkZDX0VTVEFCTElTSF9MSU5LOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBpZmxhZyk7Ci0JCX0KLQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwotfQotCiB2b2lkCiBscGZjX3N0b3BfdnBvcnRfdGltZXJzKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTE1MjksNyArMTQ5OCw2IEBACiBscGZjX3N0b3BfcGhiYV90aW1lcnMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCWRlbF90aW1lcl9zeW5jKCZwaGJhLT5mY3BfcG9sbF90aW1lcik7Ci0JZGVsX3RpbWVyX3N5bmMoJnBoYmEtPmZjX2VzdGFidG1vKTsKIAlscGZjX3N0b3BfdnBvcnRfdGltZXJzKHBoYmEtPnBwb3J0KTsKIAlkZWxfdGltZXJfc3luYygmcGhiYS0+c2xpLm1ib3hfdG1vKTsKIAlkZWxfdGltZXJfc3luYygmcGhiYS0+ZmFicmljX2Jsb2NrX3RpbWVyKTsKQEAgLTIwMDUsMTAgKzE5NzMsNiBAQAogCXBoYmEtPm1heF92cGkgPSBMUEZDX01BWF9WUEk7CiAKIAkvKiBJbml0aWFsaXplIHRpbWVycyB1c2VkIGJ5IGRyaXZlciAqLwotCWluaXRfdGltZXIoJnBoYmEtPmZjX2VzdGFidG1vKTsKLQlwaGJhLT5mY19lc3RhYnRtby5mdW5jdGlvbiA9IGxwZmNfZXN0YWJsaXNoX2xpbmtfdG1vOwotCXBoYmEtPmZjX2VzdGFidG1vLmRhdGEgPSAodW5zaWduZWQgbG9uZylwaGJhOwotCiAJaW5pdF90aW1lcigmcGhiYS0+aGJfdG1vZnVuYyk7CiAJcGhiYS0+aGJfdG1vZnVuYy5mdW5jdGlvbiA9IGxwZmNfaGJfdGltZW91dDsKIAlwaGJhLT5oYl90bW9mdW5jLmRhdGEgPSAodW5zaWduZWQgbG9uZylwaGJhOwpAQCAtMjQwNiw2ICsyMzcwLDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoKHN0cnVjdCBscGZjX3Zwb3J0ICopc2hvc3QtPmhvc3RkYXRhKS0+cGhiYTsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOworCWludCBlcnJvciwgcmV0dmFsOwogCiAJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJyZWNvdmVyaW5nIGZyb20gYSBzbG90IHJlc2V0LlxuIik7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewpAQCAtMjQxNiwxNSArMjM4MSw0MCBAQAogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQkvKiBSZS1lc3RhYmxpc2hpbmcgTGluayAqLwotCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JcGhiYS0+cHBvcnQtPmZjX2ZsYWcgfD0gRkNfRVNUQUJMSVNIX0xJTks7Ci0Jc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJcHNsaS0+c2xpX2ZsYWcgJj0gfkxQRkNfU0xJMl9BQ1RJVkU7CiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAorCS8qIEVuYWJsZSBjb25maWd1cmVkIGludGVycnVwdCBtZXRob2QgKi8KKwlwaGJhLT5pbnRyX3R5cGUgPSBOT05FOworCWlmIChwaGJhLT5jZmdfdXNlX21zaSA9PSAyKSB7CisJCWVycm9yID0gbHBmY19lbmFibGVfbXNpeChwaGJhKTsKKwkJaWYgKCFlcnJvcikKKwkJCXBoYmEtPmludHJfdHlwZSA9IE1TSVg7CisJfQorCisJLyogRmFsbGJhY2sgdG8gTVNJIGlmIE1TSS1YIGluaXRpYWxpemF0aW9uIGZhaWxlZCAqLworCWlmIChwaGJhLT5jZmdfdXNlX21zaSA+PSAxICYmIHBoYmEtPmludHJfdHlwZSA9PSBOT05FKSB7CisJCXJldHZhbCA9IHBjaV9lbmFibGVfbXNpKHBoYmEtPnBjaWRldik7CisJCWlmICghcmV0dmFsKQorCQkJcGhiYS0+aW50cl90eXBlID0gTVNJOworCQllbHNlCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkJIjA0NzAgRW5hYmxlIE1TSSBmYWlsZWQsIGNvbnRpbnVpbmcgIgorCQkJCQkid2l0aCBJUlFcbiIpOworCX0KKworCS8qIE1TSS1YIGlzIHRoZSBvbmx5IGNhc2UgdGhlIGRvZXNuJ3QgbmVlZCB0byBjYWxsIHJlcXVlc3RfaXJxICovCisJaWYgKHBoYmEtPmludHJfdHlwZSAhPSBNU0lYKSB7CisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBscGZjX2ludHJfaGFuZGxlciwKKwkJCQkgICAgIElSUUZfU0hBUkVELCBMUEZDX0RSSVZFUl9OQU1FLCBwaGJhKTsKKwkJaWYgKHJldHZhbCkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjA0NzEgRW5hYmxlIGludGVycnVwdCBoYW5kbGVyICIKKwkJCQkJImZhaWxlZFxuIik7CisJCX0gZWxzZSBpZiAocGhiYS0+aW50cl90eXBlICE9IE1TSSkKKwkJCXBoYmEtPmludHJfdHlwZSA9IElOVHg7CisJfQogCiAJLyogVGFrZSBkZXZpY2Ugb2ZmbGluZTsgdGhpcyB3aWxsIHBlcmZvcm0gY2xlYW51cCAqLwogCWxwZmNfb2ZmbGluZShwaGJhKTsKQEAgLTI0NDUsOSArMjQzNSw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKChzdHJ1Y3QgbHBmY192cG9ydCAqKXNob3N0LT5ob3N0ZGF0YSktPnBoYmE7CiAKLQlpZiAobHBmY19vbmxpbmUocGhiYSkgPT0gMCkgewotCQltb2RfdGltZXIoJnBoYmEtPmZjX2VzdGFidG1vLCBqaWZmaWVzICsgSFogKiA2MCk7Ci0JfQorCWxwZmNfb25saW5lKHBoYmEpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbHBmY19pZF90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKaW5kZXggZDUxMzgxMy4uZDA4YzRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCQkJaWYgKChuZGxwLT5ubHBfZmxhZyAmIE5MUF9BRElTQ19TTkQpICYmCi0JCQkJKHZwb3J0LT5udW1fZGlzY19ub2RlcykpIHsKKwkJCSAgICAodnBvcnQtPm51bV9kaXNjX25vZGVzKSkgewogCQkJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgbW9yZQogCQkJCSAqIEFESVNDcyB0byBiZSBzZW50CiAJCQkJICovCkBAIC00NjksMjAgKzQ2OSwyMyBAQAogCQkJCQlscGZjX2VuZF9yc2NuKHZwb3J0KTsKIAkJCQl9CiAJCQl9Ci0JCQllbHNlIGlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMpIHsKLQkJCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG1vcmUKLQkJCQkgKiBQTE9HSXMgdG8gYmUgc2VudAotCQkJCSAqLwotCQkJCWxwZmNfbW9yZV9wbG9naSh2cG9ydCk7Ci0KLQkJCQlpZiAodnBvcnQtPm51bV9kaXNjX25vZGVzID09IDApIHsKLQkJCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQkJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKLQkJCQkJbHBmY19lbmRfcnNjbih2cG9ydCk7Ci0JCQkJfQotCQkJfQorCQl9CisJfSBlbHNlIGlmICgobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfUExPR0lfSVNTVUUpICYmCisJCSAgIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgJiYKKwkJICAgKHZwb3J0LT5udW1fZGlzY19ub2RlcykpIHsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG1vcmUKKwkJICogUExPR0lzIHRvIGJlIHNlbnQKKwkJICovCisJCWxwZmNfbW9yZV9wbG9naSh2cG9ydCk7CisJCWlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgeworCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0LT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKKwkJCWxwZmNfZW5kX3JzY24odnBvcnQpOwogCQl9CiAJfQogCkBAIC04NjksOCArODcyLDExIEBACiAKIAlscCA9ICh1aW50MzJfdCAqKSBwcnNwLT52aXJ0OwogCXNwID0gKHN0cnVjdCBzZXJ2X3Bhcm0gKikgKCh1aW50OF90ICopIGxwICsgc2l6ZW9mICh1aW50MzJfdCkpOwotCWlmICh3d25fdG9fdTY0KHNwLT5wb3J0TmFtZS51Lnd3bikgPT0gMCB8fAotCSAgICB3d25fdG9fdTY0KHNwLT5ub2RlTmFtZS51Lnd3bikgPT0gMCkgeworCisJLyogU29tZSBzd2l0Y2hlcyBoYXZlIEZETUkgc2VydmVycyByZXR1cm5pbmcgMCBmb3IgV1dOICovCisJaWYgKChuZGxwLT5ubHBfRElEICE9IEZETUlfRElEKSAmJgorCQkod3duX3RvX3U2NChzcC0+cG9ydE5hbWUudS53d24pID09IDAgfHwKKwkJd3duX3RvX3U2NChzcC0+bm9kZU5hbWUudS53d24pID09IDApKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAogCQkJCSAiMDE0MiBQTE9HSSBSU1A6IEludmFsaWQgV1dOLlxuIik7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCA3MDI1NWMxLi4wOTEwYTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMTY5LDYgKzE2OSw5IEBACiAJCWZvcihpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKIAkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CiAJCQlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2Rldiwgc2hvc3QpIHsKKwkJCQlpZiAodnBvcnRzW2ldLT5jZmdfbHVuX3F1ZXVlX2RlcHRoIDw9CisJCQkJICAgIHNkZXYtPnF1ZXVlX2RlcHRoKQorCQkJCQljb250aW51ZTsKIAkJCQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQogCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAogCQkJCQkJCU1TR19PUkRFUkVEX1RBRywKQEAgLTU3OCwxNCArNTgxLDE0IEBACiAJCQkgICAgbHBmY19jbWQtPnJlc3VsdCA9PSBJT0VSUl9OT19SRVNPVVJDRVMgfHwKIAkJCSAgICBscGZjX2NtZC0+cmVzdWx0ID09IFJKVF9MT0dJTl9SRVFVSVJFRCkgewogCQkJCWNtZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfUkVRVUVVRSwgMCk7Ci0JCQlicmVhazsKLQkJfSAvKiBlbHNlOiBmYWxsIHRocm91Z2ggKi8KKwkJCQlicmVhazsKKwkJCX0gLyogZWxzZTogZmFsbCB0aHJvdWdoICovCiAJCWRlZmF1bHQ6CiAJCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0VSUk9SLCAwKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKChwbm9kZSA9PSBOVUxMICkKKwkJaWYgKCFwbm9kZSB8fCAhTkxQX0NIS19OT0RFX0FDVChwbm9kZSkKIAkJICAgIHx8IChwbm9kZS0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTUFQUEVEX05PREUpKQogCQkJY21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9CVVNfQlVTWSwgU0FNX1NUQVRfQlVTWSk7CiAJfSBlbHNlIHsKQEAgLTYwNiw2ICs2MDksOSBAQAogCXJlc3VsdCA9IGNtZC0+cmVzdWx0OwogCXNkZXYgPSBjbWQtPmRldmljZTsKIAlscGZjX3Njc2lfdW5wcmVwX2RtYV9idWYocGhiYSwgbHBmY19jbWQpOworCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWxwZmNfY21kLT5wQ21kID0gTlVMTDsJLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNjc2lfZG9uZSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJY21kLT5zY3NpX2RvbmUoY21kKTsKIAogCWlmIChwaGJhLT5jZmdfcG9sbCAmIEVOQUJMRV9GQ1BfUklOR19QT0xMSU5HKSB7CkBAIC02MTQsNyArNjIwLDYgQEAKIAkJICogd2FrZSB1cCB0aGUgdGhyZWFkLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCWxwZmNfY21kLT5wQ21kID0gTlVMTDsKIAkJaWYgKGxwZmNfY21kLT53YWl0cSkKIAkJCXdha2VfdXAobHBmY19jbWQtPndhaXRxKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKQEAgLTYyNiw3ICs2MzEsNyBAQAogCWlmICghcmVzdWx0KQogCQlscGZjX3JhbXB1cF9xdWV1ZV9kZXB0aCh2cG9ydCwgc2Rldik7CiAKLQlpZiAoIXJlc3VsdCAmJiBwbm9kZSAhPSBOVUxMICYmCisJaWYgKCFyZXN1bHQgJiYgcG5vZGUgJiYgTkxQX0NIS19OT0RFX0FDVChwbm9kZSkgJiYKIAkgICAoKGppZmZpZXMgLSBwbm9kZS0+bGFzdF9yYW1wX3VwX3RpbWUpID4KIAkJTFBGQ19RX1JBTVBfVVBfSU5URVJWQUwgKiBIWikgJiYKIAkgICAoKGppZmZpZXMgLSBwbm9kZS0+bGFzdF9xX2Z1bGxfdGltZSkgPgpAQCAtNjU0LDcgKzY1OSw4IEBACiAJICogQ2hlY2sgZm9yIHF1ZXVlIGZ1bGwuICBJZiB0aGUgbHVuIGlzIHJlcG9ydGluZyBxdWV1ZSBmdWxsLCB0aGVuCiAJICogYmFjayBvZmYgdGhlIGx1biBxdWV1ZSBkZXB0aCB0byBwcmV2ZW50IHRhcmdldCBvdmVybG9hZHMuCiAJICovCi0JaWYgKHJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMICYmIHBub2RlICE9IE5VTEwpIHsKKwlpZiAocmVzdWx0ID09IFNBTV9TVEFUX1RBU0tfU0VUX0ZVTEwgJiYgcG5vZGUgJiYKKwkgICAgTkxQX0NIS19OT0RFX0FDVChwbm9kZSkpIHsKIAkJcG5vZGUtPmxhc3RfcV9mdWxsX3RpbWUgPSBqaWZmaWVzOwogCiAJCXNob3N0X2Zvcl9lYWNoX2RldmljZSh0bXBfc2Rldiwgc2Rldi0+aG9zdCkgewpAQCAtNjg0LDcgKzY5MCw2IEBACiAJICogd2FrZSB1cCB0aGUgdGhyZWFkLgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWxwZmNfY21kLT5wQ21kID0gTlVMTDsKIAlpZiAobHBmY19jbWQtPndhaXRxKQogCQl3YWtlX3VwKGxwZmNfY21kLT53YWl0cSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKQEAgLTcwNCw2ICs3MDksOSBAQAogCWludCBkYXRhZGlyID0gc2NzaV9jbW5kLT5zY19kYXRhX2RpcmVjdGlvbjsKIAljaGFyIHRhZ1syXTsKIAorCWlmICghcG5vZGUgfHwgIU5MUF9DSEtfTk9ERV9BQ1QocG5vZGUpKQorCQlyZXR1cm47CisKIAlscGZjX2NtZC0+ZmNwX3JzcC0+cnNwU25zTGVuID0gMDsKIAkvKiBjbGVhciB0YXNrIG1hbmFnZW1lbnQgYml0cyAqLwogCWxwZmNfY21kLT5mY3BfY21uZC0+ZmNwQ250bDIgPSAwOwpAQCAtNzg1LDkgKzc5Myw5IEBACiAJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBscGZjX2NtZC0+cmRhdGE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSByZGF0YS0+cG5vZGU7CiAKLQlpZiAoKG5kbHAgPT0gTlVMTCkgfHwgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSkgeworCWlmICghbmRscCB8fCAhTkxQX0NIS19OT0RFX0FDVChuZGxwKSB8fAorCSAgICBuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJcGlvY2JxID0gJihscGZjX2NtZC0+Y3VyX2lvY2JxKTsKIAlwaW9jYnEtPnZwb3J0ID0gdnBvcnQ7CkBAIC04NDIsNyArODUwLDcgQEAKIAlzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYnFyc3A7CiAJaW50IHJldDsKIAotCWlmICghcmRhdGEtPnBub2RlKQorCWlmICghcmRhdGEtPnBub2RlIHx8ICFOTFBfQ0hLX05PREVfQUNUKHJkYXRhLT5wbm9kZSkpCiAJCXJldHVybiBGQUlMRUQ7CiAKIAlscGZjX2NtZC0+cmRhdGEgPSByZGF0YTsKQEAgLTk1OSw3ICs5NjcsNyBAQAogCSAqIENhdGNoIHJhY2Ugd2hlcmUgb3VyIG5vZGUgaGFzIHRyYW5zaXRpb25lZCwgYnV0IHRoZQogCSAqIHRyYW5zcG9ydCBpcyBzdGlsbCB0cmFuc2l0aW9uaW5nLgogCSAqLwotCWlmICghbmRscCkgeworCWlmICghbmRscCB8fCAhTkxQX0NIS19OT0RFX0FDVChuZGxwKSkgewogCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9CVVNfQlVTWSwgMCk7CiAJCWdvdG8gb3V0X2ZhaWxfY29tbWFuZDsKIAl9CkBAIC0xMTQ2LDcgKzExNTQsNyBAQAogCSAqIHRhcmdldCBpcyByZWRpc2NvdmVyZWQgb3IgZGV2bG9zcyB0aW1lb3V0IGV4cGlyZXMuCiAJICovCiAJd2hpbGUgKDEpIHsKLQkJaWYgKCFwbm9kZSkKKwkJaWYgKCFwbm9kZSB8fCAhTkxQX0NIS19OT0RFX0FDVChwbm9kZSkpCiAJCQlnb3RvIG91dDsKIAogCQlpZiAocG5vZGUtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSB7CkBAIC0xMTYyLDcgKzExNzAsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJcG5vZGUgPSByZGF0YS0+cG5vZGU7Ci0JCQlpZiAoIXBub2RlKQorCQkJaWYgKCFwbm9kZSB8fCAhTkxQX0NIS19OT0RFX0FDVChwbm9kZSkpCiAJCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKHBub2RlLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9NQVBQRURfTk9ERSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IGY1MzIwNjQuLjcwYTBhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtNjQ4LDI4ICs2NDgsMjQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBoYnFfZG1hYnVmICpoYnFfYnVmZmVyOwogCi0JaWYgKCFwaGJhLT5oYnFzW2hicW5vXS5oYnFfYWxsb2NfYnVmZmVyKSB7CisJaWYgKCFwaGJhLT5oYnFzW2hicW5vXS5oYnFfYWxsb2NfYnVmZmVyKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlzdGFydCA9IHBoYmEtPmhicXNbaGJxbm9dLmJ1ZmZlcl9jb3VudDsKIAllbmQgPSBjb3VudCArIHN0YXJ0OwotCWlmIChlbmQgPiBscGZjX2hicV9kZWZzW2hicW5vXS0+ZW50cnlfY291bnQpIHsKKwlpZiAoZW5kID4gbHBmY19oYnFfZGVmc1toYnFub10tPmVudHJ5X2NvdW50KQogCQllbmQgPSBscGZjX2hicV9kZWZzW2hicW5vXS0+ZW50cnlfY291bnQ7Ci0JfQogCiAJLyogQ2hlY2sgd2hldGhlciBIQlEgaXMgc3RpbGwgaW4gdXNlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKLQlpZiAoIXBoYmEtPmhicV9pbl91c2UpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFwaGJhLT5oYnFfaW5fdXNlKQorCQlnb3RvIG91dDsKIAogCS8qIFBvcHVsYXRlIEhCUSBlbnRyaWVzICovCiAJZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogCQloYnFfYnVmZmVyID0gKHBoYmEtPmhicXNbaGJxbm9dLmhicV9hbGxvY19idWZmZXIpKHBoYmEpOwogCQlpZiAoIWhicV9idWZmZXIpCi0JCQlyZXR1cm4gMTsKKwkJCWdvdG8gZXJyOwogCQloYnFfYnVmZmVyLT50YWcgPSAoaSB8IChoYnFubyA8PCAxNikpOwogCQlpZiAobHBmY19zbGlfaGJxX3RvX2Zpcm13YXJlKHBoYmEsIGhicW5vLCBoYnFfYnVmZmVyKSkKIAkJCXBoYmEtPmhicXNbaGJxbm9dLmJ1ZmZlcl9jb3VudCsrOwpAQCAtNjc3LDggKzY3MywxMiBAQAogCQkJKHBoYmEtPmhicXNbaGJxbm9dLmhicV9mcmVlX2J1ZmZlcikocGhiYSwgaGJxX2J1ZmZlcik7CiAJfQogCisgb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKKyBlcnI6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXJldHVybiAxOwogfQogCiBpbnQKQEAgLTI2NDgsNyArMjY0OCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5wcG9ydC0+d29ya19wb3J0X2xvY2spOwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0xJTktfVU5LTk9XTjsKLQlwaGJhLT5wcG9ydC0+ZmNfZmxhZyB8PSBGQ19FU1RBQkxJU0hfTElOSzsKIAlwc2xpLT5zbGlfZmxhZyAmPSB+TFBGQ19TTEkyX0FDVElWRTsKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCkBAIC0yNjY5LDggKzI2NjgsNyBAQAogCWxwZmNfb2ZmbGluZV9wcmVwKHBoYmEpOwogCWxwZmNfb2ZmbGluZShwaGJhKTsKIAlscGZjX3NsaV9icmRyZXN0YXJ0KHBoYmEpOwotCWlmIChscGZjX29ubGluZShwaGJhKSA9PSAwKQkJLyogSW5pdGlhbGl6ZSB0aGUgSEJBICovCi0JCW1vZF90aW1lcigmcGhiYS0+ZmNfZXN0YWJ0bW8sIGppZmZpZXMgKyBIWiAqIDYwKTsKKwlscGZjX29ubGluZShwaGJhKTsKIAlscGZjX3VuYmxvY2tfbWdtdF9pbyhwaGJhKTsKIAlyZXR1cm47CiB9CkBAIC0yNjg3LDI4ICsyNjg1LDQxIEBACiAJdW5zaWduZWQgbG9uZyBkcnZyX2ZsYWcgPSAwOwogCXZvbGF0aWxlIHVpbnQzMl90IHdvcmQwLCBsZGF0YTsKIAl2b2lkIF9faW9tZW0gKnRvX3NsaW07CisJaW50IHByb2Nlc3NpbmdfcXVldWUgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGRydnJfZmxhZyk7CisJaWYgKCFwbWJveCkgeworCQkvKiBwcm9jZXNzaW5nIG1ib3ggcXVldWUgZnJvbSBpbnRyX2hhbmRsZXIgKi8KKwkJcHJvY2Vzc2luZ19xdWV1ZSA9IDE7CisJCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CisJCXBtYm94ID0gbHBmY19tYm94X2dldChwaGJhKTsKKwkJaWYgKCFwbWJveCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKKwkJCXJldHVybiBNQlhfU1VDQ0VTUzsKKwkJfQorCX0KIAogCWlmIChwbWJveC0+bWJveF9jbXBsICYmIHBtYm94LT5tYm94X2NtcGwgIT0gbHBmY19zbGlfZGVmX21ib3hfY21wbCAmJgogCQlwbWJveC0+bWJveF9jbXBsICE9IGxwZmNfc2xpX3dha2VfbWJveF93YWl0KSB7CiAJCWlmKCFwbWJveC0+dnBvcnQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGRydnJfZmxhZyk7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsCiAJCQkJCUxPR19NQk9YIHwgTE9HX1ZQT1JULAogCQkJCQkiMTgwNiBNYm94IHgleCBmYWlsZWQuIE5vIHZwb3J0XG4iLAogCQkJCQlwbWJveC0+bWIubWJ4Q29tbWFuZCk7CiAJCQlkdW1wX3N0YWNrKCk7Ci0JCQlyZXR1cm4gTUJYX05PVF9GSU5JU0hFRDsKKwkJCWdvdG8gb3V0X25vdF9maW5pc2hlZDsKIAkJfQogCX0KIAotCiAJLyogSWYgdGhlIFBDSSBjaGFubmVsIGlzIGluIG9mZmxpbmUgc3RhdGUsIGRvIG5vdCBwb3N0IG1ib3guICovCi0JaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUocGhiYS0+cGNpZGV2KSkpCi0JCXJldHVybiBNQlhfTk9UX0ZJTklTSEVEOworCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHBoYmEtPnBjaWRldikpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGRydnJfZmxhZyk7CisJCWdvdG8gb3V0X25vdF9maW5pc2hlZDsKKwl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKIAlwc2xpID0gJnBoYmEtPnNsaTsKIAotCiAJbWIgPSAmcG1ib3gtPm1iOwogCXN0YXR1cyA9IE1CWF9TVUNDRVNTOwogCkBAIC0yNzE3LDE0ICsyNzI4LDE0IEBACiAKIAkJLyogTWJveCBjb21tYW5kIDxtYnhDb21tYW5kPiBjYW5ub3QgaXNzdWUgKi8KIAkJTE9HX01CT1hfQ0FOTk9UX0lTU1VFX0RBVEEocGhiYSwgcG1ib3gsIHBzbGksIGZsYWcpOwotCQlyZXR1cm4gTUJYX05PVF9GSU5JU0hFRDsKKwkJZ290byBvdXRfbm90X2ZpbmlzaGVkOwogCX0KIAogCWlmIChtYi0+bWJ4Q29tbWFuZCAhPSBNQlhfS0lMTF9CT0FSRCAmJiBmbGFnICYgTUJYX05PV0FJVCAmJgogCSAgICAhKHJlYWRsKHBoYmEtPkhDcmVnYWRkcikgJiBIQ19NQklOVF9FTkEpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGRydnJfZmxhZyk7CiAJCUxPR19NQk9YX0NBTk5PVF9JU1NVRV9EQVRBKHBoYmEsIHBtYm94LCBwc2xpLCBmbGFnKTsKLQkJcmV0dXJuIE1CWF9OT1RfRklOSVNIRUQ7CisJCWdvdG8gb3V0X25vdF9maW5pc2hlZDsKIAl9CiAKIAlpZiAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9NQk9YX0FDVElWRSkgewpAQCAtMjczOCwxNCArMjc0OSwxNCBAQAogCiAJCQkvKiBNYm94IGNvbW1hbmQgPG1ieENvbW1hbmQ+IGNhbm5vdCBpc3N1ZSAqLwogCQkJTE9HX01CT1hfQ0FOTk9UX0lTU1VFX0RBVEEocGhiYSwgcG1ib3gsIHBzbGksIGZsYWcpOwotCQkJcmV0dXJuIE1CWF9OT1RfRklOSVNIRUQ7CisJCQlnb3RvIG91dF9ub3RfZmluaXNoZWQ7CiAJCX0KIAogCQlpZiAoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBkcnZyX2ZsYWcpOwogCQkJLyogTWJveCBjb21tYW5kIDxtYnhDb21tYW5kPiBjYW5ub3QgaXNzdWUgKi8KIAkJCUxPR19NQk9YX0NBTk5PVF9JU1NVRV9EQVRBKHBoYmEsIHBtYm94LCBwc2xpLCBmbGFnKTsKLQkJCXJldHVybiBNQlhfTk9UX0ZJTklTSEVEOworCQkJZ290byBvdXRfbm90X2ZpbmlzaGVkOwogCQl9CiAKIAkJLyogQW5vdGhlciBtYWlsYm94IGNvbW1hbmQgaXMgc3RpbGwgYmVpbmcgcHJvY2Vzc2VkLCBxdWV1ZSB0aGlzCkBAIC0yNzkyLDcgKzI4MDMsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKIAkJCS8qIE1ib3ggY29tbWFuZCA8bWJ4Q29tbWFuZD4gY2Fubm90IGlzc3VlICovCiAJCQlMT0dfTUJPWF9DQU5OT1RfSVNTVUVfREFUQShwaGJhLCBwbWJveCwgcHNsaSwgZmxhZyk7Ci0JCQlyZXR1cm4gTUJYX05PVF9GSU5JU0hFRDsKKwkJCWdvdG8gb3V0X25vdF9maW5pc2hlZDsKIAkJfQogCQkvKiB0aW1lb3V0IGFjdGl2ZSBtYm94IGNvbW1hbmQgKi8KIAkJbW9kX3RpbWVyKCZwc2xpLT5tYm94X3RtbywgKGppZmZpZXMgKwpAQCAtMjkwMCw3ICsyOTExLDcgQEAKIAkJCQlwc2xpLT5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKIAkJCQkJCSAgICAgICBkcnZyX2ZsYWcpOwotCQkJCXJldHVybiBNQlhfTk9UX0ZJTklTSEVEOworCQkJCWdvdG8gb3V0X25vdF9maW5pc2hlZDsKIAkJCX0KIAogCQkJLyogQ2hlY2sgaWYgd2UgdG9vayBhIG1ib3ggaW50ZXJydXB0IHdoaWxlIHdlIHdlcmUKQEAgLTI5NjcsNiArMjk3OCwxMyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKIAlyZXR1cm4gc3RhdHVzOworCitvdXRfbm90X2ZpbmlzaGVkOgorCWlmIChwcm9jZXNzaW5nX3F1ZXVlKSB7CisJCXBtYm94LT5tYi5tYnhTdGF0dXMgPSBNQlhfTk9UX0ZJTklTSEVEOworCQlscGZjX21ib3hfY21wbF9wdXQocGhiYSwgcG1ib3gpOworCX0KKwlyZXR1cm4gTUJYX05PVF9GSU5JU0hFRDsKIH0KIAogLyoKQEAgLTM0NjMsMjYgKzM0ODEsMjEgQEAKIAlwaGJhLT5wcG9ydC0+d29ya19wb3J0X2V2ZW50cyAmPSB+V09SS0VSX01CT1hfVE1POwogCXNwaW5fdW5sb2NrKCZwaGJhLT5wcG9ydC0+d29ya19wb3J0X2xvY2spOwogCisJLyogUmV0dXJuIGFueSBwZW5kaW5nIG9yIGNvbXBsZXRlZCBtYm94IGNtZHMgKi8KKwlsaXN0X3NwbGljZV9pbml0KCZwaGJhLT5zbGkubWJveHEsICZjb21wbGV0aW9ucyk7CiAJaWYgKHBzbGktPm1ib3hfYWN0aXZlKSB7CiAJCWxpc3RfYWRkX3RhaWwoJnBzbGktPm1ib3hfYWN0aXZlLT5saXN0LCAmY29tcGxldGlvbnMpOwogCQlwc2xpLT5tYm94X2FjdGl2ZSA9IE5VTEw7CiAJCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSV9NQk9YX0FDVElWRTsKIAl9Ci0KLQkvKiBSZXR1cm4gYW55IHBlbmRpbmcgb3IgY29tcGxldGVkIG1ib3ggY21kcyAqLwotCWxpc3Rfc3BsaWNlX2luaXQoJnBoYmEtPnNsaS5tYm94cSwgJmNvbXBsZXRpb25zKTsKIAlsaXN0X3NwbGljZV9pbml0KCZwaGJhLT5zbGkubWJveHFfY21wbCwgJmNvbXBsZXRpb25zKTsKLQlJTklUX0xJU1RfSEVBRCgmcHNsaS0+bWJveHEpOwotCUlOSVRfTElTVF9IRUFEKCZwc2xpLT5tYm94cV9jbXBsKTsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmY29tcGxldGlvbnMpKSB7CiAJCWxpc3RfcmVtb3ZlX2hlYWQoJmNvbXBsZXRpb25zLCBwbWIsIExQRkNfTUJPWFFfdCwgbGlzdCk7CiAJCXBtYi0+bWIubWJ4U3RhdHVzID0gTUJYX05PVF9GSU5JU0hFRDsKLQkJaWYgKHBtYi0+bWJveF9jbXBsKSB7CisJCWlmIChwbWItPm1ib3hfY21wbCkKIAkJCXBtYi0+bWJveF9jbXBsKHBoYmEscG1iKTsKLQkJfQogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTM2MTMsNiArMzYyNiwxNSBAQAogCQkJCWlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSk7CiAKIAkJLyoKKwkJICogIElmIHRoZSBpb2NiIGlzIG5vdCBmb3VuZCBpbiBGaXJtd2FyZSBxdWV1ZSB0aGUgaW9jYgorCQkgKiAgbWlnaHQgaGF2ZSBjb21wbGV0ZWQgYWxyZWFkeS4gRG8gbm90IGZyZWUgaXQgYWdhaW4uCisJCSAqLworCQlpZiAoaXJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2IpOworCQkJcmV0dXJuOworCQl9CisJCS8qCiAJCSAqIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBpb2NicSBiZWZvcmUgdGFraW5nIGl0CiAJCSAqIG9mZiB0aGUgdHhjbXBscSBhbmQgdHJ5IHRvIGNhbGwgY29tcGxldGlvbiByb3V0aW5lLgogCQkgKi8KQEAgLTQxNzQsNiArNDE5Niw3IEBACiAJCQlwaGJhLT5wcG9ydC0+c3RvcHBlZCA9IDE7CiAJCX0KIAorCQlzcGluX2xvY2soJnBoYmEtPmhiYWxvY2spOwogCQlpZiAoKHdvcmtfaGFfY29weSAmIEhBX01CQVRUKSAmJgogCQkgICAgKHBoYmEtPnNsaS5tYm94X2FjdGl2ZSkpIHsKIAkJCXBtYiA9IHBoYmEtPnNsaS5tYm94X2FjdGl2ZTsKQEAgLTQxODQsNiArNDIwNyw3IEBACiAJCQkvKiBGaXJzdCBjaGVjayBvdXQgdGhlIHN0YXR1cyB3b3JkICovCiAJCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkobWJveCwgcG1ib3gsIHNpemVvZih1aW50MzJfdCkpOwogCQkJaWYgKHBtYm94LT5tYnhPd25lciAhPSBPV05fSE9TVCkgeworCQkJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKIAkJCQkvKgogCQkJCSAqIFN0cmF5IE1haWxib3ggSW50ZXJydXB0LCBtYnhDb21tYW5kIDxjbWQ+CiAJCQkJICogbWJ4U3RhdHVzIDxzdGF0dXM+CkBAIC00MTk5LDEwICs0MjIzLDEwIEBACiAJCQkJLyogY2xlYXIgbWFpbGJveCBhdHRlbnRpb24gYml0ICovCiAJCQkJd29ya19oYV9jb3B5ICY9IH5IQV9NQkFUVDsKIAkJCX0gZWxzZSB7CisJCQkJcGhiYS0+c2xpLm1ib3hfYWN0aXZlID0gTlVMTDsKKwkJCQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7CiAJCQkJcGhiYS0+bGFzdF9jb21wbGV0aW9uX3RpbWUgPSBqaWZmaWVzOwogCQkJCWRlbF90aW1lcigmcGhiYS0+c2xpLm1ib3hfdG1vKTsKLQotCQkJCXBoYmEtPnNsaS5tYm94X2FjdGl2ZSA9IE5VTEw7CiAJCQkJaWYgKHBtYi0+bWJveF9jbXBsKSB7CiAJCQkJCWxwZmNfc2xpX3BjaW1lbV9iY29weShtYm94LCBwbWJveCwKIAkJCQkJCQlNQUlMQk9YX0NNRF9TSVpFKTsKQEAgLTQyMzcsMTAgKzQyNjEsMTUgQEAKIAkJCQkJCXBtYi0+Y29udGV4dDEgPSBtcDsKIAkJCQkJCXBtYi0+Y29udGV4dDIgPSBuZGxwOwogCQkJCQkJcG1iLT52cG9ydCA9IHZwb3J0OwotCQkJCQkJc3Bpbl9sb2NrKCZwaGJhLT5oYmFsb2NrKTsKLQkJCQkJCXBoYmEtPnNsaS5zbGlfZmxhZyAmPQotCQkJCQkJCX5MUEZDX1NMSV9NQk9YX0FDVElWRTsKLQkJCQkJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwkJCQkJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLAorCQkJCQkJCQlwbWIsCisJCQkJCQkJCU1CWF9OT1dBSVQpOworCQkJCQkJaWYgKHJjICE9IE1CWF9CVVNZKQorCQkJCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAorCQkJCQkJCUtFUk5fRVJSLAorCQkJCQkJCUxPR19NQk9YIHwgTE9HX1NMSSwKKwkJCQkJCQkiMDMwNiByYyBzaG91bGQgaGF2ZSIKKwkJCQkJCQkiYmVlbiBNQlhfQlVTWSIpOwogCQkJCQkJZ290byBzZW5kX2N1cnJlbnRfbWJveDsKIAkJCQkJfQogCQkJCX0KQEAgLTQyNTAsMjUgKzQyNzksMjAgQEAKIAkJCQlzcGluX3VubG9jaygmcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9sb2NrKTsKIAkJCQlscGZjX21ib3hfY21wbF9wdXQocGhiYSwgcG1iKTsKIAkJCX0KLQkJfQorCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKIAkJaWYgKCh3b3JrX2hhX2NvcHkgJiBIQV9NQkFUVCkgJiYKIAkJICAgIChwaGJhLT5zbGkubWJveF9hY3RpdmUgPT0gTlVMTCkpIHsKLXNlbmRfbmV4dF9tYm94OgotCQkJc3Bpbl9sb2NrKCZwaGJhLT5oYmFsb2NrKTsKLQkJCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7Ci0JCQlwbWIgPSBscGZjX21ib3hfZ2V0KHBoYmEpOwotCQkJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOwogc2VuZF9jdXJyZW50X21ib3g6CiAJCQkvKiBQcm9jZXNzIG5leHQgbWFpbGJveCBjb21tYW5kIGlmIHRoZXJlIGlzIG9uZSAqLwotCQkJaWYgKHBtYiAhPSBOVUxMKSB7Ci0JCQkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7Ci0JCQkJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKLQkJCQkJcG1iLT5tYi5tYnhTdGF0dXMgPSBNQlhfTk9UX0ZJTklTSEVEOwotCQkJCQlscGZjX21ib3hfY21wbF9wdXQocGhiYSwgcG1iKTsKLQkJCQkJZ290byBzZW5kX25leHRfbWJveDsKLQkJCQl9Ci0JCQl9Ci0KKwkJCWRvIHsKKwkJCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgTlVMTCwKKwkJCQkJCQkgTUJYX05PV0FJVCk7CisJCQl9IHdoaWxlIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKTsKKwkJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykKKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YIHwKKwkJCQkJCUxPR19TTEksICIwMzQ5IHJjIHNob3VsZCBiZSAiCisJCQkJCQkiTUJYX1NVQ0NFU1MiKTsKIAkJfQogCiAJCXNwaW5fbG9jaygmcGhiYS0+aGJhbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IGNhNTQwZDEuLmIyMmI4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4yLjUiCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMi42IgogCiAjZGVmaW5lIExQRkNfRFJJVkVSX05BTUUgImxwZmMiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwppbmRleCA4NmQwNWJlLi42ZmVhZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCkBAIC01MzgsNyArNTM4LDggQEAKIAkvKiBPdGhlcndpc2UsIHdlIHdpbGwgcGVyZm9ybSBmYWJyaWMgbG9nbyBhcyBuZWVkZWQgKi8KIAlpZiAobmRscCAmJiBOTFBfQ0hLX05PREVfQUNUKG5kbHApICYmCiAJICAgIG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1VOTUFQUEVEX05PREUgJiYKLQkgICAgcGhiYS0+bGlua19zdGF0ZSA+PSBMUEZDX0xJTktfVVApIHsKKwkgICAgcGhiYS0+bGlua19zdGF0ZSA+PSBMUEZDX0xJTktfVVAgJiYKKwkgICAgcGhiYS0+ZmNfdG9wb2xvZ3kgIT0gVE9QT0xPR1lfTE9PUCkgewogCQlpZiAodnBvcnQtPmNmZ19lbmFibGVfZGFfaWQpIHsKIAkJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHBoYmEtPmZjX3JhdG92ICogMjAwMCk7CiAJCQlpZiAoIWxwZmNfbnNfY21kKHZwb3J0LCBTTElfQ1ROU19EQV9JRCwgMCwgMCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWFjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCmluZGV4IDNiMDlhYjIuLjAyNDg5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCkBAIC01OTIsNyArNTkyLDYgQEAKIAkudGhpc19pZAkJCT0gNywKIAkuc2dfdGFibGVzaXplCQkJPSBTR19BTEwsCiAJLmNtZF9wZXJfbHVuCQkJPSBDTURfUEVSX0xVTiwKLQkudW5jaGVja2VkX2lzYV9kbWEJCT0gMCwKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IERJU0FCTEVfQ0xVU1RFUklORwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCA0ZDU5YWU4Li5iMTM1YTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtMTUxLDE5ICsxNTEsMTkgQEAKIAkgKi8KIAlpZiggYWRhcHRlci0+ZmxhZyAmIEJPQVJEX0lPTUFQICkgewogCi0JCW91dGJfcChhZGFwdGVyLT5tYm94X2RtYSAmIDB4RkYsCisJCW91dGIoYWRhcHRlci0+bWJveF9kbWEgJiAweEZGLAogCQkJCWFkYXB0ZXItPmhvc3QtPmlvX3BvcnQgKyBNQk9YX1BPUlQwKTsKIAotCQlvdXRiX3AoKGFkYXB0ZXItPm1ib3hfZG1hID4+IDgpICYgMHhGRiwKKwkJb3V0YigoYWRhcHRlci0+bWJveF9kbWEgPj4gOCkgJiAweEZGLAogCQkJCWFkYXB0ZXItPmhvc3QtPmlvX3BvcnQgKyBNQk9YX1BPUlQxKTsKIAotCQlvdXRiX3AoKGFkYXB0ZXItPm1ib3hfZG1hID4+IDE2KSAmIDB4RkYsCisJCW91dGIoKGFkYXB0ZXItPm1ib3hfZG1hID4+IDE2KSAmIDB4RkYsCiAJCQkJYWRhcHRlci0+aG9zdC0+aW9fcG9ydCArIE1CT1hfUE9SVDIpOwogCi0JCW91dGJfcCgoYWRhcHRlci0+bWJveF9kbWEgPj4gMjQpICYgMHhGRiwKKwkJb3V0YigoYWRhcHRlci0+bWJveF9kbWEgPj4gMjQpICYgMHhGRiwKIAkJCQlhZGFwdGVyLT5ob3N0LT5pb19wb3J0ICsgTUJPWF9QT1JUMyk7CiAKLQkJb3V0Yl9wKEVOQUJMRV9NQk9YX0JZVEUsCisJCW91dGIoRU5BQkxFX01CT1hfQllURSwKIAkJCQlhZGFwdGVyLT5ob3N0LT5pb19wb3J0ICsgRU5BQkxFX01CT1hfUkVHSU9OKTsKIAogCQlpcnFfYWNrKGFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FfY29tbW9uLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYV9jb21tb24uaAppbmRleCBmZWY5YWM5Li5mNjJlZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYV9jb21tb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYV9jb21tb24uaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX2lvY3RsLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfaW9jdGwuaAppbmRleCA3MDZmYTA1Li4wNWY2ZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfaW9jdGwuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfaW9jdGwuaApAQCAtMTgsNyArMTgsNyBAQAogI2RlZmluZSBfTUVHQVJBSURfSU9DVExfSF8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSAibWJveF9kZWZzLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDlmMDQxOTIuLjgyMGY5MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAKIHN0YXRpYyB2b2lkIG1lZ2FyYWlkX21ib3hfZHBjKHVuc2lnbmVkIGxvbmcpOwogCi1zdGF0aWMgc3NpemVfdCBtZWdhcmFpZF9zeXNmc19zaG93X2FwcF9obmRsKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwgY2hhciAqKTsKK3N0YXRpYyBzc2l6ZV90IG1lZ2FyYWlkX3N5c2ZzX3Nob3dfYXBwX2huZGwoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKIHN0YXRpYyBzc2l6ZV90IG1lZ2FyYWlkX3N5c2ZzX3Nob3dfbGRudW0oc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqKTsKIAogc3RhdGljIGludCBtZWdhcmFpZF9jbW1fcmVnaXN0ZXIoYWRhcHRlcl90ICopOwpAQCAtMzEzLDEyICszMTMsMTIgQEAKIC8vIGRlZmluaXRpb25zIGZvciB0aGUgZGV2aWNlIGF0dHJpYnV0ZXMgZm9yIGV4cG9ydGluZyBsb2dpY2FsIGRyaXZlIG51bWJlcgogLy8gZm9yIGEgc2NzaSBhZGRyZXNzIChIb3N0LCBDaGFubmVsLCBJZCwgTHVuKQogCi1DTEFTU19ERVZJQ0VfQVRUUihtZWdhcmFpZF9tYm94X2FwcF9obmRsLCBTX0lSVVNSLCBtZWdhcmFpZF9zeXNmc19zaG93X2FwcF9obmRsLAorREVWSUNFX0FUVFIobWVnYXJhaWRfbWJveF9hcHBfaG5kbCwgU19JUlVTUiwgbWVnYXJhaWRfc3lzZnNfc2hvd19hcHBfaG5kbCwKIAkJTlVMTCk7CiAKIC8vIEhvc3QgdGVtcGxhdGUgaW5pdGlhbGl6ZXIgZm9yIG1lZ2FyYWlkIG1ib3ggc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXMKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqbWVnYXJhaWRfc2hvc3RfYXR0cnNbXSA9IHsKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbWVnYXJhaWRfbWJveF9hcHBfaG5kbCwKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWVnYXJhaWRfc2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfbWVnYXJhaWRfbWJveF9hcHBfaG5kbCwKIAlOVUxMLAogfTsKIApAQCAtNDA2Myw5ICs0MDYzLDEwIEBACiAgKiBoYW5kbGUsIHNpbmNlIHdlIGRvIG5vdCBpbnRlcmZhY2Ugd2l0aCBhcHBsaWNhdGlvbnMgZGlyZWN0bHkuCiAgKi8KIHN0YXRpYyBzc2l6ZV90Ci1tZWdhcmFpZF9zeXNmc19zaG93X2FwcF9obmRsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK21lZ2FyYWlkX3N5c2ZzX3Nob3dfYXBwX2huZGwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCWFkYXB0ZXJfdAkqYWRhcHRlciA9IChhZGFwdGVyX3QgKilTQ1NJSE9TVDJBREFQKHNob3N0KTsKIAl1aW50MzJfdAlhcHBfaG5kbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCmluZGV4IDc3YTYyYTEuLmI5MzdlOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKQEAgLTY4LDYgKzY4LDggQEAKIAkvKiB4c2NhbGUgSU9QICovCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhSKX0sCiAJLyogcHBjIElPUCAqLworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4REUpfSwKKwkvKiBwcGMgSU9QICovCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1ZFUkRFX1pDUil9LAogCS8qIHhzY2FsZSBJT1AsIHZlZ2EgKi8KIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RFTEwsIFBDSV9ERVZJQ0VfSURfREVMTF9QRVJDNSl9LApAQCAtNDg4LDEyICs0OTAsMTMgQEAKIAogIC8qKgogICogbWVnYXNhc19nZXRfZnJhbWVfY291bnQgLSBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGZyYW1lcworICogQGZyYW1lX3R5cGUJCTogdHlwZSBvZiBmcmFtZS0gaW8gb3IgcHRocnUgZnJhbWUKICAqIEBzZ2VfY291bnQJCTogbnVtYmVyIG9mIHNnIGVsZW1lbnRzCiAgKgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyYW1lcyByZXF1aXJlZCBmb3IgbnVtbmJlciBvZiBzZ2UncyAoc2dlX2NvdW50KQogICovCiAKLXN0YXRpYyB1MzIgbWVnYXNhc19nZXRfZnJhbWVfY291bnQodTggc2dlX2NvdW50KQorc3RhdGljIHUzMiBtZWdhc2FzX2dldF9mcmFtZV9jb3VudCh1OCBzZ2VfY291bnQsIHU4IGZyYW1lX3R5cGUpCiB7CiAJaW50IG51bV9jbnQ7CiAJaW50IHNnZV9ieXRlczsKQEAgLTUwNCwxMyArNTA3LDIyIEBACiAJICAgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19zZ2UzMik7CiAKIAkvKgotCSogTWFpbiBmcmFtZSBjYW4gY29udGFpbiAyIFNHRXMgZm9yIDY0LWJpdCBTR0xzIGFuZAotCSogMyBTR0VzIGZvciAzMi1iaXQgU0dMcwotCSovCi0JaWYgKElTX0RNQTY0KQotCQludW1fY250ID0gc2dlX2NvdW50IC0gMjsKLQllbHNlCi0JCW51bV9jbnQgPSBzZ2VfY291bnQgLSAzOworCSAqIE1haW4gZnJhbWUgY2FuIGNvbnRhaW4gMiBTR0VzIGZvciA2NC1iaXQgU0dMcyBhbmQKKwkgKiAzIFNHRXMgZm9yIDMyLWJpdCBTR0xzIGZvciBsZGlvICYKKwkgKiAxIFNHRXMgZm9yIDY0LWJpdCBTR0xzIGFuZAorCSAqIDIgU0dFcyBmb3IgMzItYml0IFNHTHMgZm9yIHB0aHJ1IGZyYW1lCisJICovCisJaWYgKHVubGlrZWx5KGZyYW1lX3R5cGUgPT0gUFRIUlVfRlJBTUUpKSB7CisJCWlmIChJU19ETUE2NCkKKwkJCW51bV9jbnQgPSBzZ2VfY291bnQgLSAxOworCQllbHNlCisJCQludW1fY250ID0gc2dlX2NvdW50IC0gMjsKKwl9IGVsc2UgeworCQlpZiAoSVNfRE1BNjQpCisJCQludW1fY250ID0gc2dlX2NvdW50IC0gMjsKKwkJZWxzZQorCQkJbnVtX2NudCA9IHNnZV9jb3VudCAtIDM7CisJfQogCiAJaWYobnVtX2NudD4wKXsKIAkJc2dlX2J5dGVzID0gc2dlX3N6ICogbnVtX2NudDsKQEAgLTU5Miw3ICs2MDQsOCBAQAogCSAqIENvbXB1dGUgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgdGhpcyBjb21tYW5kIGNvbnN1bWVzLiBGVyB1c2VzCiAJICogdGhpcyBudW1iZXIgdG8gcHVsbCBzdWZmaWNpZW50IG51bWJlciBvZiBmcmFtZXMgZnJvbSBob3N0IG1lbW9yeS4KIAkgKi8KLQljbWQtPmZyYW1lX2NvdW50ID0gbWVnYXNhc19nZXRfZnJhbWVfY291bnQocHRocnUtPnNnZV9jb3VudCk7CisJY21kLT5mcmFtZV9jb3VudCA9IG1lZ2FzYXNfZ2V0X2ZyYW1lX2NvdW50KHB0aHJ1LT5zZ2VfY291bnQsCisJCQkJCQkJUFRIUlVfRlJBTUUpOwogCiAJcmV0dXJuIGNtZC0+ZnJhbWVfY291bnQ7CiB9CkBAIC03MDksNyArNzIyLDcgQEAKIAkgKiBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHRoaXMgY29tbWFuZCBjb25zdW1lcy4gRlcgdXNlcwogCSAqIHRoaXMgbnVtYmVyIHRvIHB1bGwgc3VmZmljaWVudCBudW1iZXIgb2YgZnJhbWVzIGZyb20gaG9zdCBtZW1vcnkuCiAJICovCi0JY21kLT5mcmFtZV9jb3VudCA9IG1lZ2FzYXNfZ2V0X2ZyYW1lX2NvdW50KGxkaW8tPnNnZV9jb3VudCk7CisJY21kLT5mcmFtZV9jb3VudCA9IG1lZ2FzYXNfZ2V0X2ZyYW1lX2NvdW50KGxkaW8tPnNnZV9jb3VudCwgSU9fRlJBTUUpOwogCiAJcmV0dXJuIGNtZC0+ZnJhbWVfY291bnQ7CiB9CkBAIC0xNDYwLDcgKzE0NzMsNyBAQAogCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKIAkJCXdyaXRlbChNRklfUkVTRVRfRkxBR1MsICZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9kb29yYmVsbCk7CiAKLQkJCW1heF93YWl0ID0gMTA7CisJCQltYXhfd2FpdCA9IDYwOwogCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX09QRVJBVElPTkFMOwogCQkJYnJlYWs7CiAKQEAgLTE5ODAsNyArMTk5Myw4IEBACiAKIAlzd2l0Y2goaW5zdGFuY2UtPnBkZXYtPmRldmljZSkKIAl7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFI6CQorCQljYXNlIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhSOgorCQljYXNlIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhERToKIAkJCWluc3RhbmNlLT5pbnN0YW5jZXQgPSAmbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9wcGM7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0UjoKQEAgLTI5MDksNyArMjkyMyw2IEBACiAJdm9pZCAqc2Vuc2UgPSBOVUxMOwogCWRtYV9hZGRyX3Qgc2Vuc2VfaGFuZGxlOwogCXUzMiAqc2Vuc2VfcHRyOwotCXVuc2lnbmVkIGxvbmcgKnNlbnNlX2J1ZmY7CiAKIAltZW1zZXQoa2J1ZmZfYXJyLCAwLCBzaXplb2Yoa2J1ZmZfYXJyKSk7CiAKQEAgLTMwMTQsMTQgKzMwMjcsMTQgQEAKIAkgKi8KIAlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKIAkJLyoKLQkJICogc2Vuc2VfYnVmZiBwb2ludHMgdG8gdGhlIGxvY2F0aW9uIHRoYXQgaGFzIHRoZSB1c2VyCisJCSAqIHNlbnNlX3B0ciBwb2ludHMgdG8gdGhlIGxvY2F0aW9uIHRoYXQgaGFzIHRoZSB1c2VyCiAJCSAqIHNlbnNlIGJ1ZmZlciBhZGRyZXNzCiAJCSAqLwotCQlzZW5zZV9idWZmID0gKHVuc2lnbmVkIGxvbmcgKikgKCh1bnNpZ25lZCBsb25nKWlvYy0+ZnJhbWUucmF3ICsKLQkJCQkJCQkJaW9jLT5zZW5zZV9vZmYpOworCQlzZW5zZV9wdHIgPSAodTMyICopICgodW5zaWduZWQgbG9uZylpb2MtPmZyYW1lLnJhdyArCisJCQkJICAgICBpb2MtPnNlbnNlX29mZik7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykoKnNlbnNlX2J1ZmYpLAotCQkJCXNlbnNlLCBpb2MtPnNlbnNlX2xlbikpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikoKHVuc2lnbmVkIGxvbmcpKCpzZW5zZV9wdHIpKSwKKwkJCQkgc2Vuc2UsIGlvYy0+c2Vuc2VfbGVuKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBGYWlsZWQgdG8gY29weSBvdXQgdG8gdXNlciAiCiAJCQkJCSJzZW5zZSBkYXRhXG4iKTsKIAkJCWVycm9yID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAppbmRleCA2NDY2YmRmLi4zYTk5N2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCkBAIC0yNiw2ICsyNiw3IEBACiAgKiBEZXZpY2UgSURzCiAgKi8KICNkZWZpbmUJUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFIJCTB4MDA2MAorI2RlZmluZQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4REUJCTB4MDA3QwogI2RlZmluZQlQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IJCTB4MDQxMwogCiAvKgpAQCAtNTQyLDYgKzU0MywxMCBAQAogCiAjZGVmaW5lIE1FR0FTQVNfRldfQlVTWQkJCQkxCiAKKy8qIEZyYW1lIFR5cGUgKi8KKyNkZWZpbmUgSU9fRlJBTUUJCQkJMAorI2RlZmluZSBQVEhSVV9GUkFNRQkJCQkxCisKIC8qCiAgKiBXaGVuIFNDU0kgbWlkLWxheWVyIGNhbGxzIGRyaXZlcidzIHJlc2V0IHJvdXRpbmUsIGRyaXZlciB3YWl0cyBmb3IKICAqIE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FIHNlY29uZHMgZm9yIGFsbCBvdXRzdGFuZGluZyBJTyB0byBjb21wbGV0ZS4gTm90ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lc2guYyBiL2RyaXZlcnMvc2NzaS9tZXNoLmMKaW5kZXggNjUxZDA5Yi4uZmQ2M2IwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lc2guYworKysgYi9kcml2ZXJzL3Njc2kvbWVzaC5jCkBAIC0xNzU5LDYgKzE3NTksNyBAQAogCiAJc3dpdGNoIChtZXNnLmV2ZW50KSB7CiAJY2FzZSBQTV9FVkVOVF9TVVNQRU5EOgorCWNhc2UgUE1fRVZFTlRfSElCRVJOQVRFOgogCWNhc2UgUE1fRVZFTlRfRlJFRVpFOgogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212bWUxNDcuYyBiL2RyaXZlcnMvc2NzaS9tdm1lMTQ3LmMKaW5kZXggYmU0MWFhZC4uZDcyMjIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212bWUxNDcuYworKysgYi9kcml2ZXJzL3Njc2kvbXZtZTE0Ny5jCkBAIC04Miw2ICs4Miw5IEBACiAgICAgbXZtZTE0N19ob3N0LT5pcnEgPSBNVk1FMTQ3X0lSUV9TQ1NJX1BPUlQ7CiAgICAgcmVncy5TQVNSID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweGZmZmU0MDAwOwogICAgIHJlZ3MuU0NNRCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhmZmZlNDAwMTsKKyAgICBIREFUQShtdm1lMTQ3X2hvc3QpLT5ub19zeW5jID0gMHhmZjsKKyAgICBIREFUQShtdm1lMTQ3X2hvc3QpLT5mYXN0ID0gMDsKKyAgICBIREFUQShtdm1lMTQ3X2hvc3QpLT5kbWFfbW9kZSA9IENUUkxfRE1BOwogICAgIHdkMzNjOTNfaW5pdChtdm1lMTQ3X2hvc3QsIHJlZ3MsIGRtYV9zZXR1cCwgZG1hX3N0b3AsIFdEMzNDOTNfRlNfOF8xMCk7CiAKICAgICBpZiAocmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NTSV9QT1JULCBtdm1lMTQ3X2ludHIsIDAsICJNVk1FMTQ3IFNDU0kgUE9SVCIsIG12bWUxNDdfaW50cikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMuYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NWI5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMuYwpAQCAtMCwwICsxLDMyMjAgQEAKKy8qCisJbXZzYXMuYyAtIE1hcnZlbGwgODhTRTY0NDAgU0FTL1NBVEEgc3VwcG9ydAorCisJQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgorCUNvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKworCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKwltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLAorCW9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKwlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKwlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorCW9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKwlTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKwlMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4JSWYgbm90LAorCXdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLAorCU1BIDAyMTM5LCBVU0EuCisKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVJhbmRvbSBub3RlczoKKwkqIGhhcmR3YXJlIHN1cHBvcnRzIGNvbnRyb2xsaW5nIHRoZSBlbmRpYW4tbmVzcyBvZiBkYXRhCisJICBzdHJ1Y3R1cmVzLiAgdGhpcyBwZXJtaXRzIGVsaW1pbmF0aW9uIG9mIGFsbCB0aGUgbGUzMl90b19jcHUoKQorCSAgYW5kIGNwdV90b19sZTMyKCkgY29udmVyc2lvbnMuCisKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxzY3NpL2xpYnNhcy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Nhc19hdGEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBEUlZfTkFNRQkibXZzYXMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjUuMiIKKyNkZWZpbmUgX01WX0RVTVAJMAorI2RlZmluZSBNVlNfRElTQUJMRV9OVlJBTQorI2RlZmluZSBNVlNfRElTQUJMRV9NU0kKKworI2RlZmluZSBtcjMyKHJlZykJcmVhZGwocmVncyArIE1WU18jI3JlZykKKyNkZWZpbmUgbXczMihyZWcsdmFsKQl3cml0ZWwoKHZhbCksIHJlZ3MgKyBNVlNfIyNyZWcpCisjZGVmaW5lIG13MzJfZihyZWcsdmFsKQlkbyB7CQkJXAorCXdyaXRlbCgodmFsKSwgcmVncyArIE1WU18jI3JlZyk7CVwKKwlyZWFkbChyZWdzICsgTVZTXyMjcmVnKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIE1WU19JRF9OT1RfTUFQUEVECTB4N2YKKyNkZWZpbmUgTVZTX0NISVBfU0xPVF9TWgkoMVUgPDwgbXZpLT5jaGlwLT5zbG90X3dpZHRoKQorCisvKiBvZmZzZXQgZm9yIEQySCBGSVMgaW4gdGhlIFJlY2VpdmVkIEZJUyBMaXN0IFN0cnVjdHVyZSAqLworI2RlZmluZSBTQVRBX1JFQ0VJVkVEX0QySF9GSVMocmVnX3NldCkJXAorCSgodm9pZCAqKSBtdmktPnJ4X2ZpcyArIDB4NDAwICsgMHgxMDAgKiByZWdfc2V0ICsgMHg0MCkKKyNkZWZpbmUgU0FUQV9SRUNFSVZFRF9QSU9fRklTKHJlZ19zZXQpCVwKKwkoKHZvaWQgKikgbXZpLT5yeF9maXMgKyAweDQwMCArIDB4MTAwICogcmVnX3NldCArIDB4MjApCisjZGVmaW5lIFVOQVNTT0NfRDJIX0ZJUyhpZCkJCVwKKwkoKHZvaWQgKikgbXZpLT5yeF9maXMgKyAweDEwMCAqIGlkKQorCisjZGVmaW5lIGZvcl9lYWNoX3BoeShfX2xzZXFfbWFzaywgX19tYywgX19sc2VxLCBfX3Jlc3QpCQkJXAorCWZvciAoKF9fbWMpID0gKF9fbHNlcV9tYXNrKSwgKF9fbHNlcSkgPSAwOwkJCVwKKwkJCQkJKF9fbWMpICE9IDAgJiYgX19yZXN0OwkJXAorCQkJCQkoKytfX2xzZXEpLCAoX19tYykgPj49IDEpCisKKy8qIGRyaXZlciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiAqLworZW51bSBkcml2ZXJfY29uZmlndXJhdGlvbiB7CisJTVZTX1RYX1JJTkdfU1oJCT0gMTAyNCwJLyogVFggcmluZyBzaXplICgxMi1iaXQpICovCisJTVZTX1JYX1JJTkdfU1oJCT0gMTAyNCwgLyogUlggcmluZyBzaXplICgxMi1iaXQpICovCisJCQkJCS8qIHNvZnR3YXJlIHJlcXVpcmVzIHBvd2VyLW9mLTIKKwkJCQkJICAgcmluZyBzaXplICovCisKKwlNVlNfU0xPVFMJCT0gNTEyLAkvKiBjb21tYW5kIHNsb3RzICovCisJTVZTX1NMT1RfQlVGX1NaCQk9IDgxOTIsIC8qIGNtZCB0YmwgKyBJVSArIHN0YXR1cyArIFBSRCAqLworCU1WU19TU1BfQ01EX1NaCQk9IDY0LAkvKiBTU1AgY29tbWFuZCB0YWJsZSBidWZmZXIgc2l6ZSAqLworCU1WU19BVEFfQ01EX1NaCQk9IDk2LAkvKiBTQVRBIGNvbW1hbmQgdGFibGUgYnVmZmVyIHNpemUgKi8KKwlNVlNfT0FGX1NaCQk9IDY0LAkvKiBPcGVuIGFkZHJlc3MgZnJhbWUgYnVmZmVyIHNpemUgKi8KKworCU1WU19SWF9GSVNfQ09VTlQJPSAxNywJLyogT3B0aW9uYWwgcngnZCBGSVNzIChtYXggMTcpICovCisKKwlNVlNfUVVFVUVfU0laRQkJPSAzMCwJLyogU3VwcG9ydCBRdWV1ZSBkZXB0aCAqLworCU1WU19DQU5fUVVFVUUJCT0gTVZTX1NMT1RTIC0gMSwJLyogU0NTSSBRdWV1ZSBkZXB0aCAqLworfTsKKworLyogdW5jaGFuZ2VhYmxlIGhhcmR3YXJlIGRldGFpbHMgKi8KK2VudW0gaGFyZHdhcmVfZGV0YWlscyB7CisJTVZTX01BWF9QSFlTCQk9IDgsCS8qIG1heC4gcG9zc2libGUgcGh5cyAqLworCU1WU19NQVhfUE9SVFMJCT0gOCwJLyogbWF4LiBwb3NzaWJsZSBwb3J0cyAqLworCU1WU19SWF9GSVNMX1NaCQk9IDB4NDAwICsgKE1WU19SWF9GSVNfQ09VTlQgKiAweDEwMCksCit9OworCisvKiBwZXJpcGhlcmFsIHJlZ2lzdGVycyAoQkFSMikgKi8KK2VudW0gcGVyaXBoZXJhbF9yZWdpc3RlcnMgeworCVNQSV9DVEwJCQk9IDB4MTAsCS8qIEVFUFJPTSBjb250cm9sICovCisJU1BJX0NNRAkJCT0gMHgxNCwJLyogRUVQUk9NIGNvbW1hbmQgKi8KKwlTUElfREFUQQkJPSAweDE4LCAvKiBFRVBST00gZGF0YSAqLworfTsKKworZW51bSBwZXJpcGhlcmFsX3JlZ2lzdGVyX2JpdHMgeworCVRXU0lfUkRZCQk9ICgxVSA8PCA3KSwJLyogRUVQUk9NIGludGVyZmFjZSByZWFkeSAqLworCVRXU0lfUkQJCQk9ICgxVSA8PCA0KSwJLyogRUVQUk9NIHJlYWQgYWNjZXNzICovCisKKwlTUElfQUREUl9NQVNLCQk9IDB4M2ZmZmYsCS8qIGJpdHMgMTc6MCAqLworfTsKKworLyogZW5oYW5jZWQgbW9kZSByZWdpc3RlcnMgKEJBUjQpICovCitlbnVtIGh3X3JlZ2lzdGVycyB7CisJTVZTX0dCTF9DVEwJCT0gMHgwNCwgIC8qIGdsb2JhbCBjb250cm9sICovCisJTVZTX0dCTF9JTlRfU1RBVAk9IDB4MDgsICAvKiBnbG9iYWwgaXJxIHN0YXR1cyAqLworCU1WU19HQkxfUEkJCT0gMHgwQywgIC8qIHBvcnRzIGltcGxlbWVudGVkIGJpdG1hc2sgKi8KKwlNVlNfR0JMX1BPUlRfVFlQRQk9IDB4YTAsICAvKiBwb3J0IHR5cGUgKi8KKworCU1WU19DVEwJCQk9IDB4MTAwLCAvKiBTQVMvU0FUQSBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwlNVlNfUENTCQkJPSAweDEwNCwgLyogU0FTL1NBVEEgcG9ydCBjb250cm9sL3N0YXR1cyAqLworCU1WU19DTURfTElTVF9MTwkJPSAweDEwOCwgLyogY21kIGxpc3QgYWRkciAqLworCU1WU19DTURfTElTVF9ISQkJPSAweDEwQywKKwlNVlNfUlhfRklTX0xPCQk9IDB4MTEwLCAvKiBSWCBGSVMgbGlzdCBhZGRyICovCisJTVZTX1JYX0ZJU19ISQkJPSAweDExNCwKKworCU1WU19UWF9DRkcJCT0gMHgxMjAsIC8qIFRYIGNvbmZpZ3VyYXRpb24gKi8KKwlNVlNfVFhfTE8JCT0gMHgxMjQsIC8qIFRYIChkZWxpdmVyeSkgcmluZyBhZGRyICovCisJTVZTX1RYX0hJCQk9IDB4MTI4LAorCisJTVZTX1RYX1BST0RfSURYCQk9IDB4MTJDLCAvKiBUWCBwcm9kdWNlciBwb2ludGVyICovCisJTVZTX1RYX0NPTlNfSURYCQk9IDB4MTMwLCAvKiBUWCBjb25zdW1lciBwb2ludGVyIChSTykgKi8KKwlNVlNfUlhfQ0ZHCQk9IDB4MTM0LCAvKiBSWCBjb25maWd1cmF0aW9uICovCisJTVZTX1JYX0xPCQk9IDB4MTM4LCAvKiBSWCAoY29tcGxldGlvbikgcmluZyBhZGRyICovCisJTVZTX1JYX0hJCQk9IDB4MTNDLAorCU1WU19SWF9DT05TX0lEWAkJPSAweDE0MCwgLyogUlggY29uc3VtZXIgcG9pbnRlciAoUk8pICovCisKKwlNVlNfSU5UX0NPQUwJCT0gMHgxNDgsIC8qIEludCBjb2FsZXNjaW5nIGNvbmZpZyAqLworCU1WU19JTlRfQ09BTF9UTU9VVAk9IDB4MTRDLCAvKiBJbnQgY29hbGVzY2luZyB0aW1lb3V0ICovCisJTVZTX0lOVF9TVEFUCQk9IDB4MTUwLCAvKiBDZW50cmFsIGludCBzdGF0dXMgKi8KKwlNVlNfSU5UX01BU0sJCT0gMHgxNTQsIC8qIENlbnRyYWwgaW50IGVuYWJsZSAqLworCU1WU19JTlRfU1RBVF9TUlMJPSAweDE1OCwgLyogU0FUQSByZWdpc3RlciBzZXQgc3RhdHVzICovCisJTVZTX0lOVF9NQVNLX1NSUwk9IDB4MTVDLAorCisJCQkJCSAvKiBwb3J0cyAxLTMgZm9sbG93IGFmdGVyIHRoaXMgKi8KKwlNVlNfUDBfSU5UX1NUQVQJCT0gMHgxNjAsIC8qIHBvcnQwIGludGVycnVwdCBzdGF0dXMgKi8KKwlNVlNfUDBfSU5UX01BU0sJCT0gMHgxNjQsIC8qIHBvcnQwIGludGVycnVwdCBtYXNrICovCisJTVZTX1A0X0lOVF9TVEFUCQk9IDB4MjAwLCAvKiBQb3J0IDQgaW50ZXJydXB0IHN0YXR1cyAqLworCU1WU19QNF9JTlRfTUFTSwkJPSAweDIwNCwgLyogUG9ydCA0IGludGVycnVwdCBlbmFibGUgbWFzayAqLworCisJCQkJCSAvKiBwb3J0cyAxLTMgZm9sbG93IGFmdGVyIHRoaXMgKi8KKwlNVlNfUDBfU0VSX0NUTFNUQVQJPSAweDE4MCwgLyogcG9ydDAgc2VyaWFsIGNvbnRyb2wvc3RhdHVzICovCisJTVZTX1A0X1NFUl9DVExTVEFUCT0gMHgyMjAsIC8qIHBvcnQ0IHNlcmlhbCBjb250cm9sL3N0YXR1cyAqLworCisJTVZTX0NNRF9BRERSCQk9IDB4MUI4LCAvKiBDb21tYW5kIHJlZ2lzdGVyIHBvcnQgKGFkZHIpICovCisJTVZTX0NNRF9EQVRBCQk9IDB4MUJDLCAvKiBDb21tYW5kIHJlZ2lzdGVyIHBvcnQgKGRhdGEpICovCisKKwkJCQkJIC8qIHBvcnRzIDEtMyBmb2xsb3cgYWZ0ZXIgdGhpcyAqLworCU1WU19QMF9DRkdfQUREUgkJPSAweDFDMCwgLyogcG9ydDAgcGh5IHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwlNVlNfUDBfQ0ZHX0RBVEEJCT0gMHgxQzQsIC8qIHBvcnQwIHBoeSByZWdpc3RlciBkYXRhICovCisJTVZTX1A0X0NGR19BRERSCQk9IDB4MjMwLCAvKiBQb3J0IDQgY29uZmlnIGFkZHJlc3MgKi8KKwlNVlNfUDRfQ0ZHX0RBVEEJCT0gMHgyMzQsIC8qIFBvcnQgNCBjb25maWcgZGF0YSAqLworCisJCQkJCSAvKiBwb3J0cyAxLTMgZm9sbG93IGFmdGVyIHRoaXMgKi8KKwlNVlNfUDBfVlNSX0FERFIJCT0gMHgxRTAsIC8qIHBvcnQwIFZTUiBhZGRyZXNzICovCisJTVZTX1AwX1ZTUl9EQVRBCQk9IDB4MUU0LCAvKiBwb3J0MCBWU1IgZGF0YSAqLworCU1WU19QNF9WU1JfQUREUgkJPSAweDI1MCwgLyogcG9ydCA0IFZTUiBhZGRyICovCisJTVZTX1A0X1ZTUl9EQVRBCQk9IDB4MjU0LCAvKiBwb3J0IDQgVlNSIGRhdGEgKi8KK307CisKK2VudW0gaHdfcmVnaXN0ZXJfYml0cyB7CisJLyogTVZTX0dCTF9DVEwgKi8KKwlJTlRfRU4JCQk9ICgxVSA8PCAxKSwJLyogR2xvYmFsIGludCBlbmFibGUgKi8KKwlIQkFfUlNUCQkJPSAoMVUgPDwgMCksCS8qIEhCQSByZXNldCAqLworCisJLyogTVZTX0dCTF9JTlRfU1RBVCAqLworCUlOVF9YT1IJCQk9ICgxVSA8PCA0KSwJLyogWE9SIGVuZ2luZSBldmVudCAqLworCUlOVF9TQVNfU0FUQQkJPSAoMVUgPDwgMCksCS8qIFNBUy9TQVRBIGV2ZW50ICovCisKKwkvKiBNVlNfR0JMX1BPUlRfVFlQRSAqLwkJCS8qIHNobCBmb3IgcG9ydHMgMS0zICovCisJU0FUQV9UQVJHRVQJCT0gKDFVIDw8IDE2KSwJLyogcG9ydDAgU0FUQSB0YXJnZXQgZW5hYmxlICovCisJTU9ERV9BVVRPX0RFVF9QT1JUNyA9ICgxVSA8PCAxNSksCS8qIHBvcnQwIFNBUy9TQVRBIGF1dG9kZXRlY3QgKi8KKwlNT0RFX0FVVE9fREVUX1BPUlQ2ID0gKDFVIDw8IDE0KSwKKwlNT0RFX0FVVE9fREVUX1BPUlQ1ID0gKDFVIDw8IDEzKSwKKwlNT0RFX0FVVE9fREVUX1BPUlQ0ID0gKDFVIDw8IDEyKSwKKwlNT0RFX0FVVE9fREVUX1BPUlQzID0gKDFVIDw8IDExKSwKKwlNT0RFX0FVVE9fREVUX1BPUlQyID0gKDFVIDw8IDEwKSwKKwlNT0RFX0FVVE9fREVUX1BPUlQxID0gKDFVIDw8IDkpLAorCU1PREVfQVVUT19ERVRfUE9SVDAgPSAoMVUgPDwgOCksCisJTU9ERV9BVVRPX0RFVF9FTiAgICA9CU1PREVfQVVUT19ERVRfUE9SVDAgfCBNT0RFX0FVVE9fREVUX1BPUlQxIHwKKwkJCQlNT0RFX0FVVE9fREVUX1BPUlQyIHwgTU9ERV9BVVRPX0RFVF9QT1JUMyB8CisJCQkJTU9ERV9BVVRPX0RFVF9QT1JUNCB8IE1PREVfQVVUT19ERVRfUE9SVDUgfAorCQkJCU1PREVfQVVUT19ERVRfUE9SVDYgfCBNT0RFX0FVVE9fREVUX1BPUlQ3LAorCU1PREVfU0FTX1BPUlQ3X01BU0sgPSAoMVUgPDwgNyksICAvKiBwb3J0MCBTQVMoMSksIFNBVEEoMCkgbW9kZSAqLworCU1PREVfU0FTX1BPUlQ2X01BU0sgPSAoMVUgPDwgNiksCisJTU9ERV9TQVNfUE9SVDVfTUFTSyA9ICgxVSA8PCA1KSwKKwlNT0RFX1NBU19QT1JUNF9NQVNLID0gKDFVIDw8IDQpLAorCU1PREVfU0FTX1BPUlQzX01BU0sgPSAoMVUgPDwgMyksCisJTU9ERV9TQVNfUE9SVDJfTUFTSyA9ICgxVSA8PCAyKSwKKwlNT0RFX1NBU19QT1JUMV9NQVNLID0gKDFVIDw8IDEpLAorCU1PREVfU0FTX1BPUlQwX01BU0sgPSAoMVUgPDwgMCksCisJTU9ERV9TQVNfU0FUQQk9CU1PREVfU0FTX1BPUlQwX01BU0sgfCBNT0RFX1NBU19QT1JUMV9NQVNLIHwKKwkJCQlNT0RFX1NBU19QT1JUMl9NQVNLIHwgTU9ERV9TQVNfUE9SVDNfTUFTSyB8CisJCQkJTU9ERV9TQVNfUE9SVDRfTUFTSyB8IE1PREVfU0FTX1BPUlQ1X01BU0sgfAorCQkJCU1PREVfU0FTX1BPUlQ2X01BU0sgfCBNT0RFX1NBU19QT1JUN19NQVNLLAorCisJCQkJLyogU0FTX01PREUgdmFsdWUgbWF5IGJlCisJCQkJICogZGljdGF0ZWQgKGluIGh3KSBieSB2YWx1ZXMKKwkJCQkgKiBvZiBTQVRBX1RBUkdFVCAmIEFVVE9fREVUCisJCQkJICovCisKKwkvKiBNVlNfVFhfQ0ZHICovCisJVFhfRU4JCQk9ICgxVSA8PCAxNiksCS8qIEVuYWJsZSBUWCAqLworCVRYX1JJTkdfU1pfTUFTSwkJPSAweGZmZiwJLyogVFggcmluZyBzaXplLCBiaXRzIDExOjAgKi8KKworCS8qIE1WU19SWF9DRkcgKi8KKwlSWF9FTgkJCT0gKDFVIDw8IDE2KSwJLyogRW5hYmxlIFJYICovCisJUlhfUklOR19TWl9NQVNLCQk9IDB4ZmZmLAkvKiBSWCByaW5nIHNpemUsIGJpdHMgMTE6MCAqLworCisJLyogTVZTX0lOVF9DT0FMICovCisJQ09BTF9FTgkJCT0gKDFVIDw8IDE2KSwJLyogRW5hYmxlIGludCBjb2FsZXNjaW5nICovCisKKwkvKiBNVlNfSU5UX1NUQVQsIE1WU19JTlRfTUFTSyAqLworCUNJTlRfSTJDCQk9ICgxVSA8PCAzMSksCS8qIEkyQyBldmVudCAqLworCUNJTlRfU1cwCQk9ICgxVSA8PCAzMCksCS8qIHNvZnR3YXJlIGV2ZW50IDAgKi8KKwlDSU5UX1NXMQkJPSAoMVUgPDwgMjkpLAkvKiBzb2Z0d2FyZSBldmVudCAxICovCisJQ0lOVF9QUkRfQkMJCT0gKDFVIDw8IDI4KSwJLyogUFJEIEJDIGVyciBmb3IgcmVhZCBjbWQgKi8KKwlDSU5UX0RNQV9QQ0lFCQk9ICgxVSA8PCAyNyksCS8qIERNQSB0byBQQ0lFIHRpbWVvdXQgKi8KKwlDSU5UX01FTQkJPSAoMVUgPDwgMjYpLAkvKiBpbnQgbWVtIHBhcml0eSBlcnIgKi8KKwlDSU5UX0kyQ19TTEFWRQkJPSAoMVUgPDwgMjUpLAkvKiBzbGF2ZSBJMkMgZXZlbnQgKi8KKwlDSU5UX1NSUwkJPSAoMVUgPDwgMyksCS8qIFNSUyBldmVudCAqLworCUNJTlRfQ0lfU1RPUAkJPSAoMVUgPDwgMSksCS8qIGNtZCBpc3N1ZSBzdG9wcGVkICovCisJQ0lOVF9ET05FCQk9ICgxVSA8PCAwKSwJLyogY21kIGNvbXBsZXRpb24gKi8KKworCQkJCQkJLyogc2hsIGZvciBwb3J0cyAxLTMgKi8KKwlDSU5UX1BPUlRfU1RPUFBFRAk9ICgxVSA8PCAxNiksCS8qIHBvcnQwIHN0b3BwZWQgKi8KKwlDSU5UX1BPUlQJCT0gKDFVIDw8IDgpLAkvKiBwb3J0MCBldmVudCAqLworCUNJTlRfUE9SVF9NQVNLX09GRlNFVAk9IDgsCisJQ0lOVF9QT1JUX01BU0sJCT0gKDB4RkYgPDwgQ0lOVF9QT1JUX01BU0tfT0ZGU0VUKSwKKworCS8qIFRYIChkZWxpdmVyeSkgcmluZyBiaXRzICovCisJVFhRX0NNRF9TSElGVAkJPSAyOSwKKwlUWFFfQ01EX1NTUAkJPSAxLAkJLyogU1NQIHByb3RvY29sICovCisJVFhRX0NNRF9TTVAJCT0gMiwJCS8qIFNNUCBwcm90b2NvbCAqLworCVRYUV9DTURfU1RQCQk9IDMsCQkvKiBTVFAvU0FUQSBwcm90b2NvbCAqLworCVRYUV9DTURfU1NQX0ZSRUVfTElTVAk9IDQsCQkvKiBhZGQgdG8gU1NQIHRhcmcgZnJlZSBsaXN0ICovCisJVFhRX0NNRF9TTE9UX1JFU0VUCT0gNywJCS8qIHJlc2V0IGNvbW1hbmQgc2xvdCAqLworCVRYUV9NT0RFX0kJCT0gKDFVIDw8IDI4KSwJLyogbW9kZTogMD10YXJnZXQsMT1pbml0aWF0b3IgKi8KKwlUWFFfUFJJT19ISQkJPSAoMVUgPDwgMjcpLAkvKiBwcmlvcml0eTogMD1ub3JtYWwsIDE9aGlnaCAqLworCVRYUV9TUlNfU0hJRlQJCT0gMjAsCQkvKiBTQVRBIHJlZ2lzdGVyIHNldCAqLworCVRYUV9TUlNfTUFTSwkJPSAweDdmLAorCVRYUV9QSFlfU0hJRlQJCT0gMTIsCQkvKiBQSFkgYml0bWFwICovCisJVFhRX1BIWV9NQVNLCQk9IDB4ZmYsCisJVFhRX1NMT1RfTUFTSwkJPSAweGZmZiwJLyogc2xvdCBudW1iZXIgKi8KKworCS8qIFJYIChjb21wbGV0aW9uKSByaW5nIGJpdHMgKi8KKwlSWFFfR09PRAkJPSAoMVUgPDwgMjMpLAkvKiBSZXNwb25zZSBnb29kICovCisJUlhRX1NMT1RfUkVTRVQJCT0gKDFVIDw8IDIxKSwJLyogU2xvdCByZXNldCBjb21wbGV0ZSAqLworCVJYUV9DTURfUlgJCT0gKDFVIDw8IDIwKSwJLyogdGFyZ2V0IGNtZCByZWNlaXZlZCAqLworCVJYUV9BVFROCQk9ICgxVSA8PCAxOSksCS8qIGF0dGVudGlvbiAqLworCVJYUV9SU1AJCQk9ICgxVSA8PCAxOCksCS8qIHJlc3BvbnNlIGZyYW1lIHhmZXInZCAqLworCVJYUV9FUlIJCQk9ICgxVSA8PCAxNyksCS8qIGVyciBpbmZvIHJlYyB4ZmVyJ2QgKi8KKwlSWFFfRE9ORQkJPSAoMVUgPDwgMTYpLAkvKiBjbWQgY29tcGxldGUgKi8KKwlSWFFfU0xPVF9NQVNLCQk9IDB4ZmZmLAkvKiBzbG90IG51bWJlciAqLworCisJLyogbXZzX2NtZF9oZHIgYml0cyAqLworCU1DSF9QUkRfTEVOX1NISUZUCT0gMTYsCQkvKiAxNi1iaXQgUFJEIHRhYmxlIGxlbiAqLworCU1DSF9TU1BfRlJfVFlQRV9TSElGVAk9IDEzLAkJLyogU1NQIGZyYW1lIHR5cGUgKi8KKworCQkJCQkJLyogU1NQIGluaXRpYXRvciBvbmx5ICovCisJTUNIX1NTUF9GUl9DTUQJCT0gMHgwLAkJLyogQ09NTUFORCBmcmFtZSAqLworCisJCQkJCQkvKiBTU1AgaW5pdGlhdG9yIG9yIHRhcmdldCAqLworCU1DSF9TU1BfRlJfVEFTSwkJPSAweDEsCQkvKiBUQVNLIGZyYW1lICovCisKKwkJCQkJCS8qIFNTUCB0YXJnZXQgb25seSAqLworCU1DSF9TU1BfRlJfWEZFUl9SRFkJPSAweDQsCQkvKiBYRkVSX1JEWSBmcmFtZSAqLworCU1DSF9TU1BfRlJfUkVTUAkJPSAweDUsCQkvKiBSRVNQT05TRSBmcmFtZSAqLworCU1DSF9TU1BfRlJfUkVBRAkJPSAweDYsCQkvKiBSZWFkIERBVEEgZnJhbWUocykgKi8KKwlNQ0hfU1NQX0ZSX1JFQURfUkVTUAk9IDB4NywJCS8qIGRpdHRvLCBwbHVzIFJFU1BPTlNFICovCisKKwlNQ0hfUEFTU1RIUlUJCT0gKDFVIDw8IDEyKSwJLyogcGFzcy10aHJvdWdoIChTU1ApICovCisJTUNIX0ZCVVJTVAkJPSAoMVUgPDwgMTEpLAkvKiBmaXJzdCBidXJzdCAoU1NQKSAqLworCU1DSF9DSEtfTEVOCQk9ICgxVSA8PCAxMCksCS8qIGNoayB4ZmVyIGxlbiAoU1NQKSAqLworCU1DSF9SRVRSWQkJPSAoMVUgPDwgOSksCS8qIHRwb3J0IGxheWVyIHJldHJ5IChTU1ApICovCisJTUNIX1BST1RFQ1RJT04JCT0gKDFVIDw8IDgpLAkvKiBwcm90ZWN0aW9uIGluZm8gcmVjIChTU1ApICovCisJTUNIX1JFU0VUCQk9ICgxVSA8PCA3KSwJLyogUmVzZXQgKFNUUC9TQVRBKSAqLworCU1DSF9GUERNQQkJPSAoMVUgPDwgNiksCS8qIEZpcnN0IHBhcnR5IERNQSAoU1RQL1NBVEEpICovCisJTUNIX0FUQVBJCQk9ICgxVSA8PCA1KSwJLyogQVRBUEkgKFNUUC9TQVRBKSAqLworCU1DSF9CSVNUCQk9ICgxVSA8PCA0KSwJLyogQklTVCBhY3RpdmF0ZSAoU1RQL1NBVEEpICovCisJTUNIX1BNUF9NQVNLCQk9IDB4ZiwJCS8qIFBNUCBmcm9tIGNtZCBGSVMgKFNUUC9TQVRBKSovCisKKwlDQ1RMX1JTVAkJPSAoMVUgPDwgNSksCS8qIHBvcnQgbG9naWMgcmVzZXQgKi8KKworCQkJCQkJLyogMChMU0IgZmlyc3QpLCAxKE1TQiBmaXJzdCkgKi8KKwlDQ1RMX0VORElBTl9EQVRBCT0gKDFVIDw8IDMpLAkvKiBQUkQgZGF0YSAqLworCUNDVExfRU5ESUFOX1JTUAkJPSAoMVUgPDwgMiksCS8qIHJlc3BvbnNlIGZyYW1lICovCisJQ0NUTF9FTkRJQU5fT1BFTgk9ICgxVSA8PCAxKSwJLyogb3BlbiBhZGRyZXNzIGZyYW1lICovCisJQ0NUTF9FTkRJQU5fQ01ECQk9ICgxVSA8PCAwKSwJLyogY29tbWFuZCB0YWJsZSAqLworCisJLyogTVZTX1B4X1NFUl9DVExTVEFUIChwZXItcGh5IGNvbnRyb2wpICovCisJUEhZX1NTUF9SU1QJCT0gKDFVIDw8IDMpLAkvKiByZXNldCBTU1AgbGluayBsYXllciAqLworCVBIWV9CQ0FTVF9DSEcJCT0gKDFVIDw8IDIpLAkvKiBicm9hZGNhc3QoY2hhbmdlKSBub3RpZiAqLworCVBIWV9SU1RfSEFSRAkJPSAoMVUgPDwgMSksCS8qIGhhcmQgcmVzZXQgKyBwaHkgcmVzZXQgKi8KKwlQSFlfUlNUCQkJPSAoMVUgPDwgMCksCS8qIHBoeSByZXNldCAqLworCVBIWV9NSU5fU1BQX1BIWVNfTElOS19SQVRFX01BU0sgPSAoMHhGIDw8IDgpLAorCVBIWV9NQVhfU1BQX1BIWVNfTElOS19SQVRFX01BU0sgPSAoMHhGIDw8IDEyKSwKKwlQSFlfTkVHX1NQUF9QSFlTX0xJTktfUkFURV9NQVNLX09GRlNFVCA9ICgxNiksCisJUEhZX05FR19TUFBfUEhZU19MSU5LX1JBVEVfTUFTSyA9CisJCQkoMHhGIDw8IFBIWV9ORUdfU1BQX1BIWVNfTElOS19SQVRFX01BU0tfT0ZGU0VUKSwKKwlQSFlfUkVBRFlfTUFTSwkJPSAoMVUgPDwgMjApLAorCisJLyogTVZTX1B4X0lOVF9TVEFULCBNVlNfUHhfSU5UX01BU0sgKHBlci1waHkgZXZlbnRzKSAqLworCVBIWUVWX0RFQ19FUlIJCT0gKDFVIDw8IDI0KSwJLyogUGh5IERlY29kaW5nIEVycm9yICovCisJUEhZRVZfVU5BU1NPQ19GSVMJPSAoMVUgPDwgMTkpLAkvKiB1bmFzc29jaWF0ZWQgRklTIHJ4J2QgKi8KKwlQSFlFVl9BTgkJPSAoMVUgPDwgMTgpLAkvKiBTQVRBIGFzeW5jIG5vdGlmaWNhdGlvbiAqLworCVBIWUVWX0JJU1RfQUNUCQk9ICgxVSA8PCAxNyksCS8qIEJJU1QgYWN0aXZhdGUgRklTICovCisJUEhZRVZfU0lHX0ZJUwkJPSAoMVUgPDwgMTYpLAkvKiBzaWduYXR1cmUgRklTICovCisJUEhZRVZfUE9PRgkJPSAoMVUgPDwgMTIpLAkvKiBwaHkgcmVhZHkgZnJvbSAxIC0+IDAgKi8KKwlQSFlFVl9JVV9CSUcJCT0gKDFVIDw8IDExKSwJLyogSVUgdG9vIGxvbmcgZXJyICovCisJUEhZRVZfSVVfU01BTEwJCT0gKDFVIDw8IDEwKSwJLyogSVUgdG9vIHNob3J0IGVyciAqLworCVBIWUVWX1VOS19UQUcJCT0gKDFVIDw8IDkpLAkvKiB1bmtub3duIHRhZyAqLworCVBIWUVWX0JST0FEX0NICQk9ICgxVSA8PCA4KSwJLyogYnJvYWRjYXN0KENIQU5HRSkgKi8KKwlQSFlFVl9DT01XQUtFCQk9ICgxVSA8PCA3KSwJLyogQ09NV0FLRSByeCdkICovCisJUEhZRVZfUE9SVF9TRUwJCT0gKDFVIDw8IDYpLAkvKiBwb3J0IHNlbGVjdG9yIHByZXNlbnQgKi8KKwlQSFlFVl9IQVJEX1JTVAkJPSAoMVUgPDwgNSksCS8qIGhhcmQgcmVzZXQgcngnZCAqLworCVBIWUVWX0lEX1RNT1VUCQk9ICgxVSA8PCA0KSwJLyogaWRlbnRpZnkgdGltZW91dCAqLworCVBIWUVWX0lEX0ZBSUwJCT0gKDFVIDw8IDMpLAkvKiBpZGVudGlmeSBmYWlsZWQgKi8KKwlQSFlFVl9JRF9ET05FCQk9ICgxVSA8PCAyKSwJLyogaWRlbnRpZnkgZG9uZSAqLworCVBIWUVWX0hBUkRfUlNUX0RPTkUJPSAoMVUgPDwgMSksCS8qIGhhcmQgcmVzZXQgZG9uZSAqLworCVBIWUVWX1JEWV9DSAkJPSAoMVUgPDwgMCksCS8qIHBoeSByZWFkeSBjaGFuZ2VkIHN0YXRlICovCisKKwkvKiBNVlNfUENTICovCisJUENTX0VOX1NBVEFfUkVHX1NISUZUCT0gKDE2KSwJCS8qIEVuYWJsZSBTQVRBIFJlZ2lzdGVyIFNldCAqLworCVBDU19FTl9QT1JUX1hNVF9TSElGVAk9ICgxMiksCQkvKiBFbmFibGUgUG9ydCBUcmFuc21pdCAqLworCVBDU19FTl9QT1JUX1hNVF9TSElGVDIJPSAoOCksCQkvKiBGb3IgNjQ4MCAqLworCVBDU19TQVRBX1JFVFJZCQk9ICgxVSA8PCA4KSwJLyogcmV0cnkgY3RsIEZJUyBvbiBSX0VSUiAqLworCVBDU19SU1BfUlhfRU4JCT0gKDFVIDw8IDcpLAkvKiByYXcgcmVzcG9uc2UgcnggKi8KKwlQQ1NfU0VMRl9DTEVBUgkJPSAoMVUgPDwgNSksCS8qIHNlbGYtY2xlYXJpbmcgaW50IG1vZGUgKi8KKwlQQ1NfRklTX1JYX0VOCQk9ICgxVSA8PCA0KSwJLyogRklTIHJ4IGVuYWJsZSAqLworCVBDU19DTURfU1RPUF9FUlIJPSAoMVUgPDwgMyksCS8qIGNtZCBzdG9wLW9uLWVyciBlbmFibGUgKi8KKwlQQ1NfQ01EX1JTVAkJPSAoMVUgPDwgMSksCS8qIHJlc2V0IGNtZCBpc3N1ZSAqLworCVBDU19DTURfRU4JCT0gKDFVIDw8IDApLAkvKiBlbmFibGUgY21kIGlzc3VlICovCisKKwkvKiBQb3J0IG4gQXR0YWNoZWQgRGV2aWNlIEluZm8gKi8KKwlQT1JUX0RFVl9TU1BfVFJHVAk9ICgxVSA8PCAxOSksCisJUE9SVF9ERVZfU01QX1RSR1QJPSAoMVUgPDwgMTgpLAorCVBPUlRfREVWX1NUUF9UUkdUCT0gKDFVIDw8IDE3KSwKKwlQT1JUX0RFVl9TU1BfSU5JVAk9ICgxVSA8PCAxMSksCisJUE9SVF9ERVZfU01QX0lOSVQJPSAoMVUgPDwgMTApLAorCVBPUlRfREVWX1NUUF9JTklUCT0gKDFVIDw8IDkpLAorCVBPUlRfUEhZX0lEX01BU0sJPSAoMHhGRlUgPDwgMjQpLAorCVBPUlRfREVWX1RSR1RfTUFTSwk9ICgweDdVIDw8IDE3KSwKKwlQT1JUX0RFVl9JTklUX01BU0sJPSAoMHg3VSA8PCA5KSwKKwlQT1JUX0RFVl9UWVBFX01BU0sJPSAoMHg3VSA8PCAwKSwKKworCS8qIFBvcnQgbiBQSFkgU3RhdHVzICovCisJUEhZX1JEWQkJCT0gKDFVIDw8IDIpLAorCVBIWV9EV19TWU5DCQk9ICgxVSA8PCAxKSwKKwlQSFlfT09CX0RUQ1RECQk9ICgxVSA8PCAwKSwKKworCS8qIFZTUiAqLworCS8qIFBIWU1PREUgNiAoQ0RCKSAqLworCVBIWV9NT0RFNl9MQVRFQ0xLCT0gKDFVIDw8IDI5KSwJLyogTG9jayBDbG9jayAqLworCVBIWV9NT0RFNl9EVExfU1BFRUQJPSAoMVUgPDwgMjcpLAkvKiBEaWdpdGFsIExvb3AgU3BlZWQgKi8KKwlQSFlfTU9ERTZfRkNfT1JERVIJPSAoMVUgPDwgMjYpLAkvKiBGaWJyZSBDaGFubmVsIE1vZGUgT3JkZXIqLworCVBIWV9NT0RFNl9NVUNOVF9FTgk9ICgxVSA8PCAyNCksCS8qIHUgQ291bnQgRW5hYmxlICovCisJUEhZX01PREU2X1NFTF9NVUNOVF9MRU4JPSAoMVUgPDwgMjIpLAkvKiBUcmFpbmluZyBMZW5ndGggU2VsZWN0ICovCisJUEhZX01PREU2X1NFTE1VUEkJPSAoMVUgPDwgMjApLAkvKiBQaGFzZSBNdWx0aSBTZWxlY3QgKGluaXQpICovCisJUEhZX01PREU2X1NFTE1VUEYJPSAoMVUgPDwgMTgpLAkvKiBQaGFzZSBNdWx0aSBTZWxlY3QgKGZpbmFsKSAqLworCVBIWV9NT0RFNl9TRUxNVUZGCT0gKDFVIDw8IDE2KSwJLyogRnJlcSBMb29wIE11bHRpIFNlbChmaW5hbCkgKi8KKwlQSFlfTU9ERTZfU0VMTVVGSQk9ICgxVSA8PCAxNCksCS8qIEZyZXEgTG9vcCBNdWx0aSBTZWwoaW5pdCkgKi8KKwlQSFlfTU9ERTZfRlJFRVpFX0xPT1AJPSAoMVUgPDwgMTIpLAkvKiBGcmVlemUgUnggQ0RSIExvb3AgKi8KKwlQSFlfTU9ERTZfSU5UX1JYRk9GRlMJPSAoMVUgPDwgMyksCS8qIFJ4IENEUiBGcmVxIExvb3AgRW5hYmxlICovCisJUEhZX01PREU2X0ZSQ19SWEZPRkZTCT0gKDFVIDw8IDIpLAkvKiBJbml0aWFsIFJ4IENEUiBPZmZzZXQgKi8KKwlQSFlfTU9ERTZfU1RBVV8wRDgJPSAoMVUgPDwgMSksCS8qIFJ4IENEUiBGcmVxIExvb3AgU2F0dXJhdGUgKi8KKwlQSFlfTU9ERTZfUlhTQVRfRElTCT0gKDFVIDw8IDApLAkvKiBTYXR1cmF0ZSBDdGwgKi8KK307CisKK2VudW0gbXZzX2luZm9fZmxhZ3MgeworCU1WRl9NU0kJCQk9ICgxVSA8PCAwKSwJLyogTVNJIGlzIGVuYWJsZWQgKi8KKwlNVkZfUEhZX1BXUl9GSVgJCT0gKDFVIDw8IDEpLAkvKiBidWcgd29ya2Fyb3VuZCAqLworfTsKKworZW51bSBzYXNfY21kX3BvcnRfcmVnaXN0ZXJzIHsKKwlDTURfQ01SU1RfT09CX0RFVAk9IDB4MTAwLCAvKiBDT01SRVNFVCBPT0IgZGV0ZWN0IHJlZ2lzdGVyICovCisJQ01EX0NNV0tfT09CX0RFVAk9IDB4MTA0LCAvKiBDT01XQUtFIE9PQiBkZXRlY3QgcmVnaXN0ZXIgKi8KKwlDTURfQ01TQVNfT09CX0RFVAk9IDB4MTA4LCAvKiBDT01TQVMgT09CIGRldGVjdCByZWdpc3RlciAqLworCUNNRF9CUlNUX09PQl9ERVQJPSAweDEwYywgLyogYnVyc3QgT09CIGRldGVjdCByZWdpc3RlciAqLworCUNNRF9PT0JfU1BBQ0UJCT0gMHgxMTAsIC8qIE9PQiBzcGFjZSBjb250cm9sIHJlZ2lzdGVyICovCisJQ01EX09PQl9CVVJTVAkJPSAweDExNCwgLyogT09CIGJ1cnN0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlDTURfUEhZX1RJTUVSCQk9IDB4MTE4LCAvKiBQSFkgdGltZXIgY29udHJvbCByZWdpc3RlciAqLworCUNNRF9QSFlfQ09ORklHMAkJPSAweDExYywgLyogUEhZIGNvbmZpZyByZWdpc3RlciAwICovCisJQ01EX1BIWV9DT05GSUcxCQk9IDB4MTIwLCAvKiBQSFkgY29uZmlnIHJlZ2lzdGVyIDEgKi8KKwlDTURfU0FTX0NUTDAJCT0gMHgxMjQsIC8qIFNBUyBjb250cm9sIHJlZ2lzdGVyIDAgKi8KKwlDTURfU0FTX0NUTDEJCT0gMHgxMjgsIC8qIFNBUyBjb250cm9sIHJlZ2lzdGVyIDEgKi8KKwlDTURfU0FTX0NUTDIJCT0gMHgxMmMsIC8qIFNBUyBjb250cm9sIHJlZ2lzdGVyIDIgKi8KKwlDTURfU0FTX0NUTDMJCT0gMHgxMzAsIC8qIFNBUyBjb250cm9sIHJlZ2lzdGVyIDMgKi8KKwlDTURfSURfVEVTVAkJPSAweDEzNCwgLyogSUQgdGVzdCByZWdpc3RlciAqLworCUNNRF9QTF9USU1FUgkJPSAweDEzOCwgLyogUEwgdGltZXIgcmVnaXN0ZXIgKi8KKwlDTURfV0RfVElNRVIJCT0gMHgxM2MsIC8qIFdEIHRpbWVyIHJlZ2lzdGVyICovCisJQ01EX1BPUlRfU0VMX0NPVU5UCT0gMHgxNDAsIC8qIHBvcnQgc2VsZWN0b3IgY291bnQgcmVnaXN0ZXIgKi8KKwlDTURfQVBQX01FTV9DVEwJCT0gMHgxNDQsIC8qIEFwcGxpY2F0aW9uIE1lbW9yeSBDb250cm9sICovCisJQ01EX1hPUl9NRU1fQ1RMCQk9IDB4MTQ4LCAvKiBYT1IgQmxvY2sgTWVtb3J5IENvbnRyb2wgKi8KKwlDTURfRE1BX01FTV9DVEwJCT0gMHgxNGMsIC8qIERNQSBCbG9jayBNZW1vcnkgQ29udHJvbCAqLworCUNNRF9QT1JUX01FTV9DVEwwCT0gMHgxNTAsIC8qIFBvcnQgTWVtb3J5IENvbnRyb2wgMCAqLworCUNNRF9QT1JUX01FTV9DVEwxCT0gMHgxNTQsIC8qIFBvcnQgTWVtb3J5IENvbnRyb2wgMSAqLworCUNNRF9TQVRBX1BPUlRfTUVNX0NUTDAJPSAweDE1OCwgLyogU0FUQSBQb3J0IE1lbW9yeSBDb250cm9sIDAgKi8KKwlDTURfU0FUQV9QT1JUX01FTV9DVEwxCT0gMHgxNWMsIC8qIFNBVEEgUG9ydCBNZW1vcnkgQ29udHJvbCAxICovCisJQ01EX1hPUl9NRU1fQklTVF9DVEwJPSAweDE2MCwgLyogWE9SIE1lbW9yeSBCSVNUIENvbnRyb2wgKi8KKwlDTURfWE9SX01FTV9CSVNUX1NUQVQJPSAweDE2NCwgLyogWE9SIE1lbXJveSBCSVNUIFN0YXR1cyAqLworCUNNRF9ETUFfTUVNX0JJU1RfQ1RMCT0gMHgxNjgsIC8qIERNQSBNZW1vcnkgQklTVCBDb250cm9sICovCisJQ01EX0RNQV9NRU1fQklTVF9TVEFUCT0gMHgxNmMsIC8qIERNQSBNZW1vcnkgQklTVCBTdGF0dXMgKi8KKwlDTURfUE9SVF9NRU1fQklTVF9DVEwJPSAweDE3MCwgLyogUG9ydCBNZW1vcnkgQklTVCBDb250cm9sICovCisJQ01EX1BPUlRfTUVNX0JJU1RfU1RBVDAgPSAweDE3NCwgLyogUG9ydCBNZW1vcnkgQklTVCBTdGF0dXMgMCAqLworCUNNRF9QT1JUX01FTV9CSVNUX1NUQVQxID0gMHgxNzgsIC8qIFBvcnQgTWVtb3J5IEJJU1QgU3RhdHVzIDEgKi8KKwlDTURfU1RQX01FTV9CSVNUX0NUTAk9IDB4MTdjLCAvKiBTVFAgTWVtb3J5IEJJU1QgQ29udHJvbCAqLworCUNNRF9TVFBfTUVNX0JJU1RfU1RBVDAJPSAweDE4MCwgLyogU1RQIE1lbW9yeSBCSVNUIFN0YXR1cyAwICovCisJQ01EX1NUUF9NRU1fQklTVF9TVEFUMQk9IDB4MTg0LCAvKiBTVFAgTWVtb3J5IEJJU1QgU3RhdHVzIDEgKi8KKwlDTURfUkVTRVRfQ09VTlQJCT0gMHgxODgsIC8qIFJlc2V0IENvdW50ICovCisJQ01EX01PTlRSX0RBVEFfU0VMCT0gMHgxOEMsIC8qIE1vbml0b3IgRGF0YS9TZWxlY3QgKi8KKwlDTURfUExMX1BIWV9DT05GSUcJPSAweDE5MCwgLyogUExML1BIWSBDb25maWd1cmF0aW9uICovCisJQ01EX1BIWV9DVEwJCT0gMHgxOTQsIC8qIFBIWSBDb250cm9sIGFuZCBTdGF0dXMgKi8KKwlDTURfUEhZX1RFU1RfQ09VTlQwCT0gMHgxOTgsIC8qIFBoeSBUZXN0IENvdW50IDAgKi8KKwlDTURfUEhZX1RFU1RfQ09VTlQxCT0gMHgxOUMsIC8qIFBoeSBUZXN0IENvdW50IDEgKi8KKwlDTURfUEhZX1RFU1RfQ09VTlQyCT0gMHgxQTAsIC8qIFBoeSBUZXN0IENvdW50IDIgKi8KKwlDTURfQVBQX0VSUl9DT05GSUcJPSAweDFBNCwgLyogQXBwbGljYXRpb24gRXJyb3IgQ29uZmlndXJhdGlvbiAqLworCUNNRF9QTkRfRklGT19DVEwwCT0gMHgxQTgsIC8qIFBlbmRpbmcgRklGTyBDb250cm9sIDAgKi8KKwlDTURfSE9TVF9DVEwJCT0gMHgxQUMsIC8qIEhvc3QgQ29udHJvbCBTdGF0dXMgKi8KKwlDTURfSE9TVF9XUl9EQVRBCT0gMHgxQjAsIC8qIEhvc3QgV3JpdGUgRGF0YSAqLworCUNNRF9IT1NUX1JEX0RBVEEJPSAweDFCNCwgLyogSG9zdCBSZWFkIERhdGEgKi8KKwlDTURfUEhZX01PREVfMjEJCT0gMHgxQjgsIC8qIFBoeSBNb2RlIDIxICovCisJQ01EX1NMX01PREUwCQk9IDB4MUJDLCAvKiBTTCBNb2RlIDAgKi8KKwlDTURfU0xfTU9ERTEJCT0gMHgxQzAsIC8qIFNMIE1vZGUgMSAqLworCUNNRF9QTkRfRklGT19DVEwxCT0gMHgxQzQsIC8qIFBlbmRpbmcgRklGTyBDb250cm9sIDEgKi8KK307CisKKy8qIFNBUy9TQVRBIGNvbmZpZ3VyYXRpb24gcG9ydCByZWdpc3RlcnMsIGFrYSBwaHkgcmVnaXN0ZXJzICovCitlbnVtIHNhc19zYXRhX2NvbmZpZ19wb3J0X3JlZ3MgeworCVBIWVJfSURFTlRJRlkJCT0gMHgwMCwJLyogaW5mbyBmb3IgSURFTlRJRlkgZnJhbWUgKi8KKwlQSFlSX0FERFJfTE8JCT0gMHgwNCwJLyogbXkgU0FTIGFkZHJlc3MgKGxvdykgKi8KKwlQSFlSX0FERFJfSEkJCT0gMHgwOCwJLyogbXkgU0FTIGFkZHJlc3MgKGhpZ2gpICovCisJUEhZUl9BVFRfREVWX0lORk8JPSAweDBDLAkvKiBhdHRhY2hlZCBkZXZpY2UgaW5mbyAqLworCVBIWVJfQVRUX0FERFJfTE8JPSAweDEwLAkvKiBhdHRhY2hlZCBkZXYgU0FTIGFkZHIgKGxvdykgKi8KKwlQSFlSX0FUVF9BRERSX0hJCT0gMHgxNCwJLyogYXR0YWNoZWQgZGV2IFNBUyBhZGRyIChoaWdoKSAqLworCVBIWVJfU0FUQV9DVEwJCT0gMHgxOCwJLyogU0FUQSBjb250cm9sICovCisJUEhZUl9QSFlfU1RBVAkJPSAweDFDLAkvKiBQSFkgc3RhdHVzICovCisJUEhZUl9TQVRBX1NJRzAJCT0gMHgyMCwJLypwb3J0IFNBVEEgc2lnbmF0dXJlIEZJUyhCeXRlIDAtMykgKi8KKwlQSFlSX1NBVEFfU0lHMQkJPSAweDI0LAkvKnBvcnQgU0FUQSBzaWduYXR1cmUgRklTKEJ5dGUgNC03KSAqLworCVBIWVJfU0FUQV9TSUcyCQk9IDB4MjgsCS8qcG9ydCBTQVRBIHNpZ25hdHVyZSBGSVMoQnl0ZSA4LTExKSAqLworCVBIWVJfU0FUQV9TSUczCQk9IDB4MmMsCS8qcG9ydCBTQVRBIHNpZ25hdHVyZSBGSVMoQnl0ZSAxMi0xNSkgKi8KKwlQSFlSX1JfRVJSX0NPVU5UCT0gMHgzMCwgLyogcG9ydCBSX0VSUiBjb3VudCByZWdpc3RlciAqLworCVBIWVJfQ1JDX0VSUl9DT1VOVAk9IDB4MzQsIC8qIHBvcnQgQ1JDIGVycm9yIGNvdW50IHJlZ2lzdGVyICovCisJUEhZUl9XSURFX1BPUlQJCT0gMHgzOCwJLyogd2lkZSBwb3J0IHBhcnRpY2lwYXRpbmcgKi8KKwlQSFlSX0NVUlJFTlQwCQk9IDB4ODAsCS8qIGN1cnJlbnQgY29ubmVjdGlvbiBpbmZvIDAgKi8KKwlQSFlSX0NVUlJFTlQxCQk9IDB4ODQsCS8qIGN1cnJlbnQgY29ubmVjdGlvbiBpbmZvIDEgKi8KKwlQSFlSX0NVUlJFTlQyCQk9IDB4ODgsCS8qIGN1cnJlbnQgY29ubmVjdGlvbiBpbmZvIDIgKi8KK307CisKKy8qICBTQVMvU0FUQSBWZW5kb3IgU3BlY2lmaWMgUG9ydCBSZWdpc3RlcnMgKi8KK2VudW0gc2FzX3NhdGFfdnNwX3JlZ3MgeworCVZTUl9QSFlfU1RBVAkJPSAweDAwLCAvKiBQaHkgU3RhdHVzICovCisJVlNSX1BIWV9NT0RFMQkJPSAweDAxLCAvKiBwaHkgdHggKi8KKwlWU1JfUEhZX01PREUyCQk9IDB4MDIsIC8qIHR4IHNjYyAqLworCVZTUl9QSFlfTU9ERTMJCT0gMHgwMywgLyogcGxsICovCisJVlNSX1BIWV9NT0RFNAkJPSAweDA0LCAvKiBWQ08gKi8KKwlWU1JfUEhZX01PREU1CQk9IDB4MDUsIC8qIFJ4ICovCisJVlNSX1BIWV9NT0RFNgkJPSAweDA2LCAvKiBDRFIgKi8KKwlWU1JfUEhZX01PREU3CQk9IDB4MDcsIC8qIEltcGVkYW5jZSAqLworCVZTUl9QSFlfTU9ERTgJCT0gMHgwOCwgLyogVm9sdGFnZSAqLworCVZTUl9QSFlfTU9ERTkJCT0gMHgwOSwgLyogVGVzdCAqLworCVZTUl9QSFlfTU9ERTEwCQk9IDB4MEEsIC8qIFBvd2VyICovCisJVlNSX1BIWV9NT0RFMTEJCT0gMHgwQiwgLyogUGh5IE1vZGUgKi8KKwlWU1JfUEhZX1ZTMAkJPSAweDBDLCAvKiBWZWRub3IgU3BlY2lmaWMgMCAqLworCVZTUl9QSFlfVlMxCQk9IDB4MEQsIC8qIFZlZG5vciBTcGVjaWZpYyAxICovCit9OworCitlbnVtIHBjaV9jZmdfcmVnaXN0ZXJzIHsKKwlQQ1JfUEhZX0NUTAk9IDB4NDAsCisJUENSX1BIWV9DVEwyCT0gMHg5MCwKKwlQQ1JfREVWX0NUUkwJPSAweEU4LAorfTsKKworZW51bSBwY2lfY2ZnX3JlZ2lzdGVyX2JpdHMgeworCVBDVExfUFdSX09OCT0gKDB4RlUgPDwgMjQpLAorCVBDVExfT0ZGCT0gKDB4RlUgPDwgMTIpLAorCVBSRF9SRVFfU0laRQk9ICgweDQwMDApLAorCVBSRF9SRVFfTUFTSwk9ICgweDAwMDA3MDAwKSwKK307CisKK2VudW0gbnZyYW1fbGF5b3V0X29mZnNldHMgeworCU5WUl9TSUcJCT0gMHgwMCwJCS8qIDB4QUEsIDB4NTUgKi8KKwlOVlJfU0FTX0FERFIJPSAweDAyLAkJLyogOC1ieXRlIFNBUyBhZGRyZXNzICovCit9OworCitlbnVtIGNoaXBfZmxhdm9ycyB7CisJY2hpcF82MzIwLAorCWNoaXBfNjQ0MCwKKwljaGlwXzY0ODAsCit9OworCitlbnVtIHBvcnRfdHlwZSB7CisJUE9SVF9UWVBFX1NBUwk9ICAoMUwgPDwgMSksCisJUE9SVF9UWVBFX1NBVEEJPSAgKDFMIDw8IDApLAorfTsKKworLyogQ29tbWFuZCBUYWJsZSBGb3JtYXQgKi8KK2VudW0gY3RfZm9ybWF0IHsKKwkvKiBTU1AgKi8KKwlTU1BfRl9ICQk9ICAweDAwLAorCVNTUF9GX0lVCT0gIDB4MTgsCisJU1NQX0ZfTUFYCT0gIDB4NEQsCisJLyogU1RQICovCisJU1RQX0NNRF9GSVMJPSAgMHgwMCwKKwlTVFBfQVRBUElfQ01ECT0gIDB4NDAsCisJU1RQX0ZfTUFYCT0gIDB4MTAsCisJLyogU01QICovCisJU01QX0ZfVAkJPSAgMHgwMCwKKwlTTVBfRl9ERVAJPSAgMHgwMSwKKwlTTVBfRl9NQVgJPSAgMHgxMDEsCit9OworCitlbnVtIHN0YXR1c19idWZmZXIgeworCVNCX0VJUl9PRkYJPSAgMHgwMCwJLyogRXJyb3IgSW5mb3JtYXRpb24gUmVjb3JkICovCisJU0JfUkZCX09GRgk9ICAweDA4LAkvKiBSZXNwb25zZSBGcmFtZSBCdWZmZXIgKi8KKwlTQl9SRkJfTUFYCT0gIDB4NDAwLAkvKiBSRkIgc2l6ZSovCit9OworCitlbnVtIGVycm9yX2luZm9fcmVjIHsKKwlDTURfSVNTX1NUUEQJPSAoMVUgPDwgMzEpLAkvKiBDbWQgSXNzdWUgU3RvcHBlZCAqLworCUNNRF9QSV9FUlIJPSAoMVUgPDwgMzApLAkvKiBQcm90ZWN0aW9uIGluZm8gZXJyb3IuICBzZWUgZmxhZ3MyICovCisJUlNQX09WRVIJPSAoMVUgPDwgMjkpLAkvKiByc3AgYnVmZmVyIG92ZXJmbG93ICovCisJUkVUUllfTElNCT0gKDFVIDw8IDI4KSwJLyogRklTL2ZyYW1lIHJldHJ5IGxpbWl0IGV4Y2VlZGVkICovCisJVU5LX0ZJUyAJPSAoMVUgPDwgMjcpLAkvKiB1bmtub3duIEZJUyAqLworCURNQV9URVJNCT0gKDFVIDw8IDI2KSwJLyogRE1BIHRlcm1pbmF0ZSBwcmltaXRpdmUgcngnZCAqLworCVNZTkNfRVJSCT0gKDFVIDw8IDI1KSwJLyogU1lOQyByeCdkIGR1cmluZyBmcmFtZSB4bWl0ICovCisJVEZJTEVfRVJSCT0gKDFVIDw8IDI0KSwJLyogU0FUQSB0YXNrZmlsZSBFcnJvciBiaXQgc2V0ICovCisJUl9FUlIJCT0gKDFVIDw8IDIzKSwJLyogU0FUQSByZXR1cm5lZCBSX0VSUiBwcmltICovCisJUkRfT0ZTCQk9ICgxVSA8PCAyMCksCS8qIFJlYWQgREFUQSBmcmFtZSBpbnZhbGlkIG9mZnNldCAqLworCVhGRVJfUkRZX09GUwk9ICgxVSA8PCAxOSksCS8qIFhGRVJfUkRZIG9mZnNldCBlcnJvciAqLworCVVORVhQX1hGRVJfUkRZCT0gKDFVIDw8IDE4KSwJLyogdW5leHBlY3RlZCBYRkVSX1JEWSBlcnJvciAqLworCURBVEFfT1ZFUl9VTkRFUiA9ICgxVSA8PCAxNiksCS8qIGRhdGEgb3ZlcmZsb3cvdW5kZXJmbG93ICovCisJSU5URVJMT0NLCT0gKDFVIDw8IDE1KSwJLyogaW50ZXJsb2NrIGVycm9yICovCisJTkFLCQk9ICgxVSA8PCAxNCksCS8qIE5BSyByeCdkICovCisJQUNLX05BS19UTwk9ICgxVSA8PCAxMyksCS8qIEFDSy9OQUsgdGltZW91dCAqLworCUNYTl9DTE9TRUQJPSAoMVUgPDwgMTIpLAkvKiBjeG4gY2xvc2VkIHcvb3V0IGFjay9uYWsgKi8KKwlPUEVOX1RPIAk9ICgxVSA8PCAxMSksCS8qIElfVCBuZXh1cyBsb3N0LCBvcGVuIGN4biB0aW1lb3V0ICovCisJUEFUSF9CTE9DS0VECT0gKDFVIDw8IDEwKSwJLyogSV9UIG5leHVzIGxvc3QsIHBhdGh3YXkgYmxvY2tlZCAqLworCU5PX0RFU1QgCT0gKDFVIDw8IDkpLAkvKiBJX1QgbmV4dXMgbG9zdCwgbm8gZGVzdGluYXRpb24gKi8KKwlTVFBfUkVTX0JTWQk9ICgxVSA8PCA4KSwJLyogU1RQIHJlc291cmNlcyBidXN5ICovCisJQlJFQUsJCT0gKDFVIDw8IDcpLAkvKiBicmVhayByZWNlaXZlZCAqLworCUJBRF9ERVNUCT0gKDFVIDw8IDYpLAkvKiBiYWQgZGVzdGluYXRpb24gKi8KKwlCQURfUFJPVE8JPSAoMVUgPDwgNSksCS8qIHByb3RvY29sIG5vdCBzdXBwb3J0ZWQgKi8KKwlCQURfUkFURQk9ICgxVSA8PCA0KSwJLyogY3huIHJhdGUgbm90IHN1cHBvcnRlZCAqLworCVdST05HX0RFU1QJPSAoMVUgPDwgMyksCS8qIHdyb25nIGRlc3RpbmF0aW9uIGVycm9yICovCisJQ1JFRElUX1RPCT0gKDFVIDw8IDIpLAkvKiBjcmVkaXQgdGltZW91dCAqLworCVdET0dfVE8gCT0gKDFVIDw8IDEpLAkvKiB3YXRjaGRvZyB0aW1lb3V0ICovCisJQlVGX1BBUiAJPSAoMVUgPDwgMCksCS8qIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KK307CisKK2VudW0gZXJyb3JfaW5mb19yZWNfMiB7CisJU0xPVF9CU1lfRVJSCT0gKDFVIDw8IDMxKSwJLyogU2xvdCBCdXN5IEVycm9yICovCisJR1JEX0NIS19FUlIJPSAoMVUgPDwgMTQpLAkvKiBHdWFyZCBDaGVjayBFcnJvciAqLworCUFQUF9DSEtfRVJSCT0gKDFVIDw8IDEzKSwJLyogQXBwbGljYXRpb24gQ2hlY2sgZXJyb3IgKi8KKwlSRUZfQ0hLX0VSUgk9ICgxVSA8PCAxMiksCS8qIFJlZmVyZW5jZSBDaGVjayBFcnJvciAqLworCVVTUl9CTEtfTk0JPSAoMVUgPDwgMCksCS8qIFVzZXIgQmxvY2sgTnVtYmVyICovCit9OworCitzdHJ1Y3QgbXZzX2NoaXBfaW5mbyB7CisJdTMyCQluX3BoeTsKKwl1MzIJCXNyc19zejsKKwl1MzIJCXNsb3Rfd2lkdGg7Cit9OworCitzdHJ1Y3QgbXZzX2Vycl9pbmZvIHsKKwlfX2xlMzIJCQlmbGFnczsKKwlfX2xlMzIJCQlmbGFnczI7Cit9OworCitzdHJ1Y3QgbXZzX3ByZCB7CisJX19sZTY0CQkJYWRkcjsJCS8qIDY0LWJpdCBidWZmZXIgYWRkcmVzcyAqLworCV9fbGUzMgkJCXJlc2VydmVkOworCV9fbGUzMgkJCWxlbjsJCS8qIDE2LWJpdCBsZW5ndGggKi8KK307CisKK3N0cnVjdCBtdnNfY21kX2hkciB7CisJX19sZTMyCQkJZmxhZ3M7CQkvKiBQUkQgdGJsIGxlbjsgU0FTLCBTQVRBIGN0bCAqLworCV9fbGUzMgkJCWxlbnM7CQkvKiBjbWQsIG1heCByZXNwIGZyYW1lIGxlbiAqLworCV9fbGUzMgkJCXRhZ3M7CQkvKiB0YXJnIHBvcnQgeGZlciB0YWc7IHRhZyAqLworCV9fbGUzMgkJCWRhdGFfbGVuOwkvKiBkYXRhIHhmZXIgbGVuICovCisJX19sZTY0CQkJY21kX3RibDsJLyogY29tbWFuZCB0YWJsZSBhZGRyZXNzICovCisJX19sZTY0CQkJb3Blbl9mcmFtZTsJLyogb3BlbiBhZGRyIGZyYW1lIGFkZHJlc3MgKi8KKwlfX2xlNjQJCQlzdGF0dXNfYnVmOwkvKiBzdGF0dXMgYnVmZmVyIGFkZHJlc3MgKi8KKwlfX2xlNjQJCQlwcmRfdGJsOwkvKiBQUkQgdGJsIGFkZHJlc3MgKi8KKwlfX2xlMzIJCQlyZXNlcnZlZFs0XTsKK307CisKK3N0cnVjdCBtdnNfcG9ydCB7CisJc3RydWN0IGFzZF9zYXNfcG9ydAlzYXNfcG9ydDsKKwl1OAkJCXBvcnRfYXR0YWNoZWQ7CisJdTgJCQl0YXNrZmlsZXNldDsKKwl1OAkJCXdpZGVfcG9ydF9waHltYXA7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworfTsKKworc3RydWN0IG12c19waHkgeworCXN0cnVjdCBtdnNfcG9ydAkJKnBvcnQ7CisJc3RydWN0IGFzZF9zYXNfcGh5CXNhc19waHk7CisJc3RydWN0IHNhc19pZGVudGlmeQlpZGVudGlmeTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UJKnNkZXY7CisJdTY0CQlkZXZfc2FzX2FkZHI7CisJdTY0CQlhdHRfZGV2X3Nhc19hZGRyOworCXUzMgkJYXR0X2Rldl9pbmZvOworCXUzMgkJZGV2X2luZm87CisJdTMyCQlwaHlfdHlwZTsKKwl1MzIJCXBoeV9zdGF0dXM7CisJdTMyCQlpcnFfc3RhdHVzOworCXUzMgkJZnJhbWVfcmN2ZF9zaXplOworCXU4CQlmcmFtZV9yY3ZkWzMyXTsKKwl1OAkJcGh5X2F0dGFjaGVkOworCWVudW0gc2FzX2xpbmtyYXRlCW1pbmltdW1fbGlua3JhdGU7CisJZW51bSBzYXNfbGlua3JhdGUJbWF4aW11bV9saW5rcmF0ZTsKK307CisKK3N0cnVjdCBtdnNfc2xvdF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHNhc190YXNrCQkqdGFzazsKKwl1MzIJCQluX2VsZW07CisJdTMyCQkJdHg7CisKKwkvKiBETUEgYnVmZmVyIGZvciBzdG9yaW5nIGNtZCB0YmwsIG9wZW4gYWRkciBmcmFtZSwgc3RhdHVzIGJ1ZmZlciwKKwkgKiBhbmQgUFJEIHRhYmxlCisJICovCisJdm9pZAkJCSpidWY7CisJZG1hX2FkZHJfdAkJYnVmX2RtYTsKKyNpZiBfTVZfRFVNUAorCXUzMgkJCWNtZF9zaXplOworI2VuZGlmCisKKwl2b2lkCQkJKnJlc3BvbnNlOworCXN0cnVjdCBtdnNfcG9ydAkJKnBvcnQ7Cit9OworCitzdHJ1Y3QgbXZzX2luZm8geworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3BpbmxvY2tfdAkJbG9jazsJCS8qIGhvc3Qtd2lkZSBsb2NrICovCisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OwkJLyogb3VyIGRldmljZSAqLworCXZvaWQgX19pb21lbQkJKnJlZ3M7CQkvKiBlbmhhbmNlZCBtb2RlIHJlZ2lzdGVycyAqLworCXZvaWQgX19pb21lbQkJKnBlcmlfcmVnczsJLyogcGVyaXBoZXJhbCByZWdpc3RlcnMgKi8KKworCXU4CQkJc2FzX2FkZHJbU0FTX0FERFJfU0laRV07CisJc3RydWN0IHNhc19oYV9zdHJ1Y3QJc2FzOwkJLyogU0NTSS9TQVMgZ2x1ZSAqLworCXN0cnVjdCBTY3NpX0hvc3QJKnNob3N0OworCisJX19sZTMyCQkJKnR4OwkJLyogVFggKGRlbGl2ZXJ5KSBETUEgcmluZyAqLworCWRtYV9hZGRyX3QJCXR4X2RtYTsKKwl1MzIJCQl0eF9wcm9kOwkvKiBjYWNoZWQgbmV4dC1wcm9kdWNlciBpZHggKi8KKworCV9fbGUzMgkJCSpyeDsJCS8qIFJYIChjb21wbGV0aW9uKSBETUEgcmluZyAqLworCWRtYV9hZGRyX3QJCXJ4X2RtYTsKKwl1MzIJCQlyeF9jb25zOwkvKiBSWCBjb25zdW1lciBpZHggKi8KKworCV9fbGUzMgkJCSpyeF9maXM7CS8qIFJYJ2QgRklTIGFyZWEgKi8KKwlkbWFfYWRkcl90CQlyeF9maXNfZG1hOworCisJc3RydWN0IG12c19jbWRfaGRyCSpzbG90OwkvKiBETUEgY29tbWFuZCBoZWFkZXIgc2xvdHMgKi8KKwlkbWFfYWRkcl90CQlzbG90X2RtYTsKKworCWNvbnN0IHN0cnVjdCBtdnNfY2hpcF9pbmZvICpjaGlwOworCisJdTgJCQl0YWdzW01WU19TTE9UU107CisJc3RydWN0IG12c19zbG90X2luZm8Jc2xvdF9pbmZvW01WU19TTE9UU107CisJCQkJLyogZnVydGhlciBwZXItc2xvdCBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBtdnNfcGh5CQlwaHlbTVZTX01BWF9QSFlTXTsKKwlzdHJ1Y3QgbXZzX3BvcnQJCXBvcnRbTVZTX01BWF9QSFlTXTsKKyNpZmRlZiBNVlNfVVNFX1RBU0tMRVQKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGFza2xldDsKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBtdnNfcGh5X2NvbnRyb2woc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5LCBlbnVtIHBoeV9mdW5jIGZ1bmMsCisJCQkgICB2b2lkICpmdW5jZGF0YSk7CitzdGF0aWMgdTMyIG12c19yZWFkX3BoeV9jdGwoc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwb3J0KTsKK3N0YXRpYyB2b2lkIG12c193cml0ZV9waHlfY3RsKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcG9ydCwgdTMyIHZhbCk7CitzdGF0aWMgdTMyIG12c19yZWFkX3BvcnRfaXJxX3N0YXQoc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwb3J0KTsKK3N0YXRpYyB2b2lkIG12c193cml0ZV9wb3J0X2lycV9zdGF0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcG9ydCwgdTMyIHZhbCk7CitzdGF0aWMgdm9pZCBtdnNfd3JpdGVfcG9ydF9pcnFfbWFzayhzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHBvcnQsIHUzMiB2YWwpOworc3RhdGljIHUzMiBtdnNfcmVhZF9wb3J0X2lycV9tYXNrKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcG9ydCk7CisKK3N0YXRpYyB1MzIgbXZzX2lzX3BoeV9yZWFkeShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGkpOworc3RhdGljIHZvaWQgbXZzX2RldGVjdF9wb3J0dHlwZShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGkpOworc3RhdGljIHZvaWQgbXZzX3VwZGF0ZV9waHlpbmZvKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgaSwgaW50IGdldF9zdCk7CitzdGF0aWMgdm9pZCBtdnNfcmVsZWFzZV90YXNrKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgcGh5X25vKTsKKworc3RhdGljIGludCBtdnNfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQgbXZzX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqKTsKK3N0YXRpYyBpbnQgbXZzX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworCitzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICptdnNfc3R0OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG12c19jaGlwX2luZm8gbXZzX2NoaXBzW10gPSB7CisJW2NoaXBfNjMyMF0gPQkJeyAyLCAxNiwgOSAgfSwKKwlbY2hpcF82NDQwXSA9CQl7IDQsIDE2LCA5ICB9LAorCVtjaGlwXzY0ODBdID0JCXsgOCwgMzIsIDEwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtdnNfc2h0ID0geworCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSBEUlZfTkFNRSwKKwkucXVldWVjb21tYW5kCQk9IHNhc19xdWV1ZWNvbW1hbmQsCisJLnRhcmdldF9hbGxvYwkJPSBzYXNfdGFyZ2V0X2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUJPSBtdnNfc2xhdmVfY29uZmlndXJlLAorCS5zbGF2ZV9kZXN0cm95CQk9IHNhc19zbGF2ZV9kZXN0cm95LAorCS5zY2FuX2ZpbmlzaGVkCQk9IG12c19zY2FuX2ZpbmlzaGVkLAorCS5zY2FuX3N0YXJ0CQk9IG12c19zY2FuX3N0YXJ0LAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfdHlwZQk9IHNhc19jaGFuZ2VfcXVldWVfdHlwZSwKKwkuYmlvc19wYXJhbQkJPSBzYXNfYmlvc19wYXJhbSwKKwkuY2FuX3F1ZXVlCQk9IDEsCisJLmNtZF9wZXJfbHVuCQk9IDEsCisJLnRoaXNfaWQJCT0gLTEsCisJLnNnX3RhYmxlc2l6ZQkJPSBTR19BTEwsCisJLm1heF9zZWN0b3JzCQk9IFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUywKKwkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gc2FzX2VoX2RldmljZV9yZXNldF9oYW5kbGVyLAorCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IHNhc19laF9idXNfcmVzZXRfaGFuZGxlciwKKwkuc2xhdmVfYWxsb2MJCT0gc2FzX3NsYXZlX2FsbG9jLAorCS50YXJnZXRfZGVzdHJveQkJPSBzYXNfdGFyZ2V0X2Rlc3Ryb3ksCisJLmlvY3RsCQkJPSBzYXNfaW9jdGwsCit9OworCitzdGF0aWMgdm9pZCBtdnNfaGV4ZHVtcCh1MzIgc2l6ZSwgdTggKmRhdGEsIHUzMiBiYXNlYWRkcikKK3sKKwl1MzIgaTsKKwl1MzIgcnVuOworCXUzMiBvZmZzZXQ7CisKKwlvZmZzZXQgPSAwOworCXdoaWxlIChzaXplKSB7CisJCXByaW50aygiJTA4WCA6ICIsIGJhc2VhZGRyICsgb2Zmc2V0KTsKKwkJaWYgKHNpemUgPj0gMTYpCisJCQlydW4gPSAxNjsKKwkJZWxzZQorCQkJcnVuID0gc2l6ZTsKKwkJc2l6ZSAtPSBydW47CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQlpZiAoaSA8IHJ1bikKKwkJCQlwcmludGsoIiUwMlggIiwgKHUzMilkYXRhW2ldKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoIiAgICIpOworCQl9CisJCXByaW50aygiOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IHJ1bjsgaSsrKQorCQkJcHJpbnRrKCIlYyIsIGlzYWxudW0oZGF0YVtpXSkgPyBkYXRhW2ldIDogJy4nKTsKKwkJcHJpbnRrKCJcbiIpOworCQlkYXRhID0gJmRhdGFbMTZdOworCQlvZmZzZXQgKz0gcnVuOworCX0KKwlwcmludGsoIlxuIik7Cit9CisKKyNpZiBfTVZfRFVNUAorc3RhdGljIHZvaWQgbXZzX2hiYV9zYl9kdW1wKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgdGFnLAorCQkJCSAgIGVudW0gc2FzX3Byb3RvY29sIHByb3RvKQoreworCXUzMiBvZmZzZXQ7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtdmktPnBkZXY7CisJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9bdGFnXTsKKworCW9mZnNldCA9IHNsb3QtPmNtZF9zaXplICsgTVZTX09BRl9TWiArCisJICAgIHNpemVvZihzdHJ1Y3QgbXZzX3ByZCkgKiBzbG90LT5uX2VsZW07CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiKy0tLS0+U3RhdHVzIGJ1ZmZlclslZF0gOlxuIiwKKwkJCXRhZyk7CisJbXZzX2hleGR1bXAoMzIsICh1OCAqKSBzbG90LT5yZXNwb25zZSwKKwkJICAgICh1MzIpIHNsb3QtPmJ1Zl9kbWEgKyBvZmZzZXQpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG12c19oYmFfbWVtb3J5X2R1bXAoc3RydWN0IG12c19pbmZvICptdmksIHUzMiB0YWcsCisJCQkJZW51bSBzYXNfcHJvdG9jb2wgcHJvdG8pCit7CisjaWYgX01WX0RVTVAKKwl1MzIgc3osIHdfcHRyOworCXU2NCBhZGRyOworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG12aS0+cGRldjsKKwlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqc2xvdCA9ICZtdmktPnNsb3RfaW5mb1t0YWddOworCisJLypEZWxpdmVyeSBRdWV1ZSAqLworCXN6ID0gbXIzMihUWF9DRkcpICYgVFhfUklOR19TWl9NQVNLOworCXdfcHRyID0gc2xvdC0+dHg7CisJYWRkciA9IG1yMzIoVFhfSEkpIDw8IDE2IDw8IDE2IHwgbXIzMihUWF9MTyk7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAorCQkiRGVsaXZlcnkgUXVldWUgU2l6ZT0lMDRkICwgV1JUX1BUUj0lMDRYXG4iLCBzeiwgd19wdHIpOworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKKwkJIkRlbGl2ZXJ5IFF1ZXVlIEJhc2UgQWRkcmVzcz0weCVsbFggKFBBKSIKKwkJIih0eF9kbWE9MHglbGxYKSwgRW50cnk9JTA0ZFxuIiwKKwkJYWRkciwgbXZpLT50eF9kbWEsIHdfcHRyKTsKKwltdnNfaGV4ZHVtcChzaXplb2YodTMyKSwgKHU4ICopKCZtdmktPnR4W212aS0+dHhfcHJvZF0pLAorCQkJKHUzMikgbXZpLT50eF9kbWEgKyBzaXplb2YodTMyKSAqIHdfcHRyKTsKKwkvKkNvbW1hbmQgTGlzdCAqLworCWFkZHIgPSBtdmktPnNsb3RfZG1hOworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKKwkJIkNvbW1hbmQgTGlzdCBCYXNlIEFkZHJlc3M9MHglbGxYIChQQSkiCisJCSIoc2xvdF9kbWE9MHglbGxYKSwgSGVhZGVyPSUwM2RcbiIsCisJCWFkZHIsIHNsb3QtPmJ1Zl9kbWEsIHRhZyk7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiQ29tbWFuZCBIZWFkZXJbJTAzZF06XG4iLCB0YWcpOworCS8qbXZzX2NtZF9oZHIgKi8KKwltdnNfaGV4ZHVtcChzaXplb2Yoc3RydWN0IG12c19jbWRfaGRyKSwgKHU4ICopKCZtdmktPnNsb3RbdGFnXSksCisJCSh1MzIpIG12aS0+c2xvdF9kbWEgKyB0YWcgKiBzaXplb2Yoc3RydWN0IG12c19jbWRfaGRyKSk7CisJLyoxLmNvbW1hbmQgdGFibGUgYXJlYSAqLworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgIistLS0tPkNvbW1hbmQgVGFibGUgOlxuIik7CisJbXZzX2hleGR1bXAoc2xvdC0+Y21kX3NpemUsICh1OCAqKSBzbG90LT5idWYsICh1MzIpIHNsb3QtPmJ1Zl9kbWEpOworCS8qMi5vcGVuIGFkZHJlc3MgZnJhbWUgYXJlYSAqLworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgIistLS0tPk9wZW4gQWRkcmVzcyBGcmFtZSA6XG4iKTsKKwltdnNfaGV4ZHVtcChNVlNfT0FGX1NaLCAodTggKikgc2xvdC0+YnVmICsgc2xvdC0+Y21kX3NpemUsCisJCQkJKHUzMikgc2xvdC0+YnVmX2RtYSArIHNsb3QtPmNtZF9zaXplKTsKKwkvKjMuc3RhdHVzIGJ1ZmZlciAqLworCW12c19oYmFfc2JfZHVtcChtdmksIHRhZywgcHJvdG8pOworCS8qNC5QUkQgdGFibGUgKi8KKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICIrLS0tLT5QUkQgdGFibGUgOlxuIik7CisJbXZzX2hleGR1bXAoc2l6ZW9mKHN0cnVjdCBtdnNfcHJkKSAqIHNsb3QtPm5fZWxlbSwKKwkJKHU4ICopIHNsb3QtPmJ1ZiArIHNsb3QtPmNtZF9zaXplICsgTVZTX09BRl9TWiwKKwkJKHUzMikgc2xvdC0+YnVmX2RtYSArIHNsb3QtPmNtZF9zaXplICsgTVZTX09BRl9TWik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbXZzX2hiYV9jcV9kdW1wKHN0cnVjdCBtdnNfaW5mbyAqbXZpKQoreworI2lmIChfTVZfRFVNUCA+IDIpCisJdTY0IGFkZHI7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbXZpLT5wZGV2OworCXUzMiBlbnRyeSA9IG12aS0+cnhfY29ucyArIDE7CisJdTMyIHJ4X2Rlc2MgPSBsZTMyX3RvX2NwdShtdmktPnJ4W2VudHJ5XSk7CisKKwkvKkNvbXBsZXRpb24gUXVldWUgKi8KKwlhZGRyID0gbXIzMihSWF9ISSkgPDwgMTYgPDwgMTYgfCBtcjMyKFJYX0xPKTsKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJDb21wbGV0aW9uIFRhc2sgPSAweCVwXG4iLAorCQkgICBtdmktPnNsb3RfaW5mb1tyeF9kZXNjICYgUlhRX1NMT1RfTUFTS10udGFzayk7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAorCQkiQ29tcGxldGlvbiBMaXN0IEJhc2UgQWRkcmVzcz0weCVsbFggKFBBKSwgIgorCQkiQ1FfRW50cnk9JTA0ZCwgQ1FfV1A9MHglMDhYXG4iLAorCQlhZGRyLCBlbnRyeSAtIDEsIG12aS0+cnhbMF0pOworCW12c19oZXhkdW1wKHNpemVvZih1MzIpLCAodTggKikoJnJ4X2Rlc2MpLAorCQkgICAgbXZpLT5yeF9kbWEgKyBzaXplb2YodTMyKSAqIGVudHJ5KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBtdnNfaGJhX2ludGVycnVwdF9lbmFibGUoc3RydWN0IG12c19pbmZvICptdmkpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXUzMiB0bXA7CisKKwl0bXAgPSBtcjMyKEdCTF9DVEwpOworCisJbXczMihHQkxfQ1RMLCB0bXAgfCBJTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdnNfaGJhX2ludGVycnVwdF9kaXNhYmxlKHN0cnVjdCBtdnNfaW5mbyAqbXZpKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwl1MzIgdG1wOworCisJdG1wID0gbXIzMihHQkxfQ1RMKTsKKworCW13MzIoR0JMX0NUTCwgdG1wICYgfklOVF9FTik7Cit9CisKK3N0YXRpYyBpbnQgbXZzX2ludF9yeChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgYm9vbCBzZWxmX2NsZWFyKTsKKworLyogbW92ZSB0byBQQ0kgbGF5ZXIgb3IgbGliYXRhIGNvcmU/ICovCitzdGF0aWMgaW50IHBjaV9nb182NChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcmM7CisKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSB7CisJCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKKwkJaWYgKHJjKSB7CisJCQlyYyA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJCQlpZiAocmMpIHsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJCQkgICAiNjQtYml0IERNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAocmMpIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkJICAgIjMyLWJpdCBETUEgZW5hYmxlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAocmMpIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkJICAgIjMyLWJpdCBjb25zaXN0ZW50IERNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtdnNfZmluZF90YWcoc3RydWN0IG12c19pbmZvICptdmksIHN0cnVjdCBzYXNfdGFzayAqdGFzaywgdTMyICp0YWcpCit7CisJaWYgKHRhc2stPmxsZGRfdGFzaykgeworCQlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqc2xvdDsKKwkJc2xvdCA9IChzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqKSB0YXNrLT5sbGRkX3Rhc2s7CisJCSp0YWcgPSBzbG90IC0gbXZpLT5zbG90X2luZm87CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXZzX3RhZ19jbGVhcihzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHRhZykKK3sKKwl2b2lkICpiaXRtYXAgPSAodm9pZCAqKSAmbXZpLT50YWdzOworCWNsZWFyX2JpdCh0YWcsIGJpdG1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIG12c190YWdfZnJlZShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHRhZykKK3sKKwltdnNfdGFnX2NsZWFyKG12aSwgdGFnKTsKK30KKworc3RhdGljIHZvaWQgbXZzX3RhZ19zZXQoc3RydWN0IG12c19pbmZvICptdmksIHVuc2lnbmVkIGludCB0YWcpCit7CisJdm9pZCAqYml0bWFwID0gKHZvaWQgKikgJm12aS0+dGFnczsKKwlzZXRfYml0KHRhZywgYml0bWFwKTsKK30KKworc3RhdGljIGludCBtdnNfdGFnX2FsbG9jKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgKnRhZ19vdXQpCit7CisJdW5zaWduZWQgaW50IGluZGV4LCB0YWc7CisJdm9pZCAqYml0bWFwID0gKHZvaWQgKikgJm12aS0+dGFnczsKKworCWluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChiaXRtYXAsIE1WU19TTE9UUyk7CisJdGFnID0gaW5kZXg7CisJaWYgKHRhZyA+PSBNVlNfU0xPVFMpCisJCXJldHVybiAtU0FTX1FVRVVFX0ZVTEw7CisJbXZzX3RhZ19zZXQobXZpLCB0YWcpOworCSp0YWdfb3V0ID0gdGFnOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdnNfdGFnX2luaXQoc3RydWN0IG12c19pbmZvICptdmkpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE1WU19TTE9UUzsgKytpKQorCQltdnNfdGFnX2NsZWFyKG12aSwgaSk7Cit9CisKKyNpZm5kZWYgTVZTX0RJU0FCTEVfTlZSQU0KK3N0YXRpYyBpbnQgbXZzX2VlcF9yZWFkKHZvaWQgX19pb21lbSAqcmVncywgdTMyIGFkZHIsIHUzMiAqZGF0YSkKK3sKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwlpZiAoYWRkciAmIH5TUElfQUREUl9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlbChhZGRyLCByZWdzICsgU1BJX0NNRCk7CisJd3JpdGVsKFRXU0lfUkQsIHJlZ3MgKyBTUElfQ1RMKTsKKworCXdoaWxlICh0aW1lb3V0LS0gPiAwKSB7CisJCWlmIChyZWFkbChyZWdzICsgU1BJX0NUTCkgJiBUV1NJX1JEWSkgeworCQkJKmRhdGEgPSByZWFkbChyZWdzICsgU1BJX0RBVEEpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQl1ZGVsYXkoMTApOworCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgbXZzX2VlcF9yZWFkX2J1Zih2b2lkIF9faW9tZW0gKnJlZ3MsIHUzMiBhZGRyLAorCQkJICAgIHZvaWQgKmJ1ZiwgdTMyIGJ1ZmxlbikKK3sKKwl1MzIgYWRkcl9lbmQsIHRtcF9hZGRyLCBpLCBqOworCXUzMiB0bXAgPSAwOworCWludCByYzsKKwl1OCAqdG1wOCwgKmJ1ZjggPSBidWY7CisKKwlhZGRyX2VuZCA9IGFkZHIgKyBidWZsZW47CisJdG1wX2FkZHIgPSBBTElHTihhZGRyLCA0KTsKKwlpZiAoYWRkciA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaiA9IGFkZHIgJiAweDM7CisJaWYgKGopIHsKKwkJcmMgPSBtdnNfZWVwX3JlYWQocmVncywgdG1wX2FkZHIsICZ0bXApOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisKKwkJdG1wOCA9ICh1OCAqKSZ0bXA7CisJCWZvciAoaSA9IGo7IGkgPCA0OyBpKyspCisJCQkqYnVmOCsrID0gdG1wOFtpXTsKKworCQl0bXBfYWRkciArPSA0OworCX0KKworCWZvciAoaiA9IEFMSUdOKGFkZHJfZW5kLCA0KTsgdG1wX2FkZHIgPCBqOyB0bXBfYWRkciArPSA0KSB7CisJCXJjID0gbXZzX2VlcF9yZWFkKHJlZ3MsIHRtcF9hZGRyLCAmdG1wKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCW1lbWNweShidWY4LCAmdG1wLCA0KTsKKwkJYnVmOCArPSA0OworCX0KKworCWlmICh0bXBfYWRkciA8IGFkZHJfZW5kKSB7CisJCXJjID0gbXZzX2VlcF9yZWFkKHJlZ3MsIHRtcF9hZGRyLCAmdG1wKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCXRtcDggPSAodTggKikmdG1wOworCQlqID0gYWRkcl9lbmQgLSB0bXBfYWRkcjsKKwkJZm9yIChpID0gMDsgaSA8IGo7IGkrKykKKwkJCSpidWY4KysgPSB0bXA4W2ldOworCisJCXRtcF9hZGRyICs9IDQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBtdnNfbnZyYW1fcmVhZChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIGFkZHIsCisJCQkgIHZvaWQgKmJ1ZiwgdTMyIGJ1ZmxlbikKK3sKKyNpZm5kZWYgTVZTX0RJU0FCTEVfTlZSQU0KKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBtdmktPnJlZ3M7CisJaW50IHJjLCBpOworCXUzMiBzdW07CisJdTggaGRyWzJdLCAqdG1wOworCWNvbnN0IGNoYXIgKm1zZzsKKworCXJjID0gbXZzX2VlcF9yZWFkX2J1ZihyZWdzLCBhZGRyLCAmaGRyLCAyKTsKKwlpZiAocmMpIHsKKwkJbXNnID0gIm52cmFtIGhkciByZWFkIGZhaWxlZCI7CisJCWdvdG8gZXJyX291dDsKKwl9CisJcmMgPSBtdnNfZWVwX3JlYWRfYnVmKHJlZ3MsIGFkZHIgKyAyLCBidWYsIGJ1Zmxlbik7CisJaWYgKHJjKSB7CisJCW1zZyA9ICJudnJhbSByZWFkIGZhaWxlZCI7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAoaGRyWzBdICE9IDB4NUEpIHsKKwkJLyogZW50cnkgaWQgKi8KKwkJbXNnID0gImludmFsaWQgbnZyYW0gZW50cnkgaWQiOworCQlyYyA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwl0bXAgPSBidWY7CisJc3VtID0gKCh1MzIpaGRyWzBdKSArICgodTMyKWhkclsxXSk7CisJZm9yIChpID0gMDsgaSA8IGJ1ZmxlbjsgaSsrKQorCQlzdW0gKz0gKCh1MzIpdG1wW2ldKTsKKworCWlmIChzdW0pIHsKKwkJbXNnID0gIm52cmFtIGNoZWNrc3VtIGZhaWx1cmUiOworCQlyYyA9IC1FSUxTRVE7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmbXZpLT5wZGV2LT5kZXYsICIlcyIsIG1zZyk7CisJcmV0dXJuIHJjOworI2Vsc2UKKwkvKiBGSVhNRSAsIEZvciBTQVMgdGFyZ2V0IG1vZGUgKi8KKwltZW1jcHkoYnVmLCAiXHg1MFx4MDVceDA0XHgzMFx4MTFceGFiXHgwMFx4MDAiLCA4KTsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBtdnNfYnl0ZXNfZG1hZWQoc3RydWN0IG12c19pbmZvICptdmksIGludCBpKQoreworCXN0cnVjdCBtdnNfcGh5ICpwaHkgPSAmbXZpLT5waHlbaV07CisJc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5ID0gbXZpLT5zYXMuc2FzX3BoeVtpXTsKKworCWlmICghcGh5LT5waHlfYXR0YWNoZWQpCisJCXJldHVybjsKKworCWlmIChzYXNfcGh5LT5waHkpIHsKKwkJc3RydWN0IHNhc19waHkgKnNwaHkgPSBzYXNfcGh5LT5waHk7CisKKwkJc3BoeS0+bmVnb3RpYXRlZF9saW5rcmF0ZSA9IHNhc19waHktPmxpbmtyYXRlOworCQlzcGh5LT5taW5pbXVtX2xpbmtyYXRlID0gcGh5LT5taW5pbXVtX2xpbmtyYXRlOworCQlzcGh5LT5taW5pbXVtX2xpbmtyYXRlX2h3ID0gU0FTX0xJTktfUkFURV8xXzVfR0JQUzsKKwkJc3BoeS0+bWF4aW11bV9saW5rcmF0ZSA9IHBoeS0+bWF4aW11bV9saW5rcmF0ZTsKKwkJc3BoeS0+bWF4aW11bV9saW5rcmF0ZV9odyA9IFNBU19MSU5LX1JBVEVfM18wX0dCUFM7CisJfQorCisJaWYgKHBoeS0+cGh5X3R5cGUgJiBQT1JUX1RZUEVfU0FTKSB7CisJCXN0cnVjdCBzYXNfaWRlbnRpZnlfZnJhbWUgKmlkOworCisJCWlkID0gKHN0cnVjdCBzYXNfaWRlbnRpZnlfZnJhbWUgKilwaHktPmZyYW1lX3JjdmQ7CisJCWlkLT5kZXZfdHlwZSA9IHBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGU7CisJCWlkLT5pbml0aWF0b3JfYml0cyA9IFNBU19QUk9UT0NPTF9BTEw7CisJCWlkLT50YXJnZXRfYml0cyA9IHBoeS0+aWRlbnRpZnkudGFyZ2V0X3BvcnRfcHJvdG9jb2xzOworCX0gZWxzZSBpZiAocGh5LT5waHlfdHlwZSAmIFBPUlRfVFlQRV9TQVRBKSB7CisJCS8qIFRPRE8gKi8KKwl9CisJbXZpLT5zYXMuc2FzX3BoeVtpXS0+ZnJhbWVfcmN2ZF9zaXplID0gcGh5LT5mcmFtZV9yY3ZkX3NpemU7CisJbXZpLT5zYXMubm90aWZ5X3BvcnRfZXZlbnQobXZpLT5zYXMuc2FzX3BoeVtpXSwKKwkJCQkgICBQT1JURV9CWVRFU19ETUFFRCk7Cit9CisKK3N0YXRpYyBpbnQgbXZzX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGxvbmcgdGltZSkKK3sKKwkvKiBnaXZlIHRoZSBwaHkgZW5hYmxpbmcgaW50ZXJydXB0IGV2ZW50IHRpbWUgdG8gY29tZSBpbiAoMXMKKwkgKiBpcyBlbXBpcmljYWxseSBhYm91dCBhbGwgaXQgdGFrZXMpICovCisJaWYgKHRpbWUgPCBIWikKKwkJcmV0dXJuIDA7CisJLyogV2FpdCBmb3IgZGlzY292ZXJ5IHRvIGZpbmlzaCAqLworCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG12c19zY2FuX3N0YXJ0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCWludCBpOworCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gU0hPU1RfVE9fU0FTX0hBKHNob3N0KS0+bGxkZF9oYTsKKworCWZvciAoaSA9IDA7IGkgPCBtdmktPmNoaXAtPm5fcGh5OyArK2kpIHsKKwkJbXZzX2J5dGVzX2RtYWVkKG12aSwgaSk7CisJfQorfQorCitzdGF0aWMgaW50IG12c19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSBzZGV2X3RvX2RvbWFpbl9kZXYoc2Rldik7CisJaW50IHJldCA9IHNhc19zbGF2ZV9jb25maWd1cmUoc2Rldik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGRldl9pc19zYXRhKGRldikpIHsKKwkJLyogc3RydWN0IGF0YV9wb3J0ICphcCA9IGRldi0+c2F0YV9kZXYuYXA7ICovCisJCS8qIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gYXAtPmxpbmsuZGV2aWNlOyAqLworCisJCS8qIGNsYW1wIGF0IG5vIE5DUSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KKwkJLyogYWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX05DUV9PRkY7ICovCisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG12c19pbnRfcG9ydChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IHBoeV9ubywgdTMyIGV2ZW50cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG12aS0+cGRldjsKKwlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gJm12aS0+c2FzOworCXN0cnVjdCBtdnNfcGh5ICpwaHkgPSAmbXZpLT5waHlbcGh5X25vXTsKKwlzdHJ1Y3QgYXNkX3Nhc19waHkgKnNhc19waHkgPSAmcGh5LT5zYXNfcGh5OworCisJcGh5LT5pcnFfc3RhdHVzID0gbXZzX3JlYWRfcG9ydF9pcnFfc3RhdChtdmksIHBoeV9ubyk7CisJLyoKKwkqIGV2ZW50cyBpcyBwb3J0IGV2ZW50IG5vdyAsCisJKiB3ZSBuZWVkIGNoZWNrIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHdoaWNoIGJlbG9uZ3MgdG8gcGVyIHBvcnQuCisJKi8KKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCisJCSJQb3J0ICVkIEV2ZW50ID0gJVhcbiIsCisJCXBoeV9ubywgcGh5LT5pcnFfc3RhdHVzKTsKKworCWlmIChwaHktPmlycV9zdGF0dXMgJiAoUEhZRVZfUE9PRiB8IFBIWUVWX0RFQ19FUlIpKSB7CisJCW12c19yZWxlYXNlX3Rhc2sobXZpLCBwaHlfbm8pOworCQlpZiAoIW12c19pc19waHlfcmVhZHkobXZpLCBwaHlfbm8pKSB7CisJCQlzYXNfcGh5X2Rpc2Nvbm5lY3RlZChzYXNfcGh5KTsKKwkJCXNhc19oYS0+bm90aWZ5X3BoeV9ldmVudChzYXNfcGh5LCBQSFlFX0xPU1NfT0ZfU0lHTkFMKTsKKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJCSJQb3J0ICVkIFVucGx1ZyBOb3RpY2VcbiIsIHBoeV9ubyk7CisKKwkJfSBlbHNlCisJCQltdnNfcGh5X2NvbnRyb2woc2FzX3BoeSwgUEhZX0ZVTkNfTElOS19SRVNFVCwgTlVMTCk7CisJfQorCWlmICghKHBoeS0+aXJxX3N0YXR1cyAmIFBIWUVWX0RFQ19FUlIpKSB7CisJCWlmIChwaHktPmlycV9zdGF0dXMgJiBQSFlFVl9DT01XQUtFKSB7CisJCQl1MzIgdG1wID0gbXZzX3JlYWRfcG9ydF9pcnFfbWFzayhtdmksIHBoeV9ubyk7CisJCQltdnNfd3JpdGVfcG9ydF9pcnFfbWFzayhtdmksIHBoeV9ubywKKwkJCQkJCXRtcCB8IFBIWUVWX1NJR19GSVMpOworCQl9CisJCWlmIChwaHktPmlycV9zdGF0dXMgJiAoUEhZRVZfU0lHX0ZJUyB8IFBIWUVWX0lEX0RPTkUpKSB7CisJCQlwaHktPnBoeV9zdGF0dXMgPSBtdnNfaXNfcGh5X3JlYWR5KG12aSwgcGh5X25vKTsKKwkJCWlmIChwaHktPnBoeV9zdGF0dXMpIHsKKwkJCQltdnNfZGV0ZWN0X3BvcnR0eXBlKG12aSwgcGh5X25vKTsKKworCQkJCWlmIChwaHktPnBoeV90eXBlICYgUE9SVF9UWVBFX1NBVEEpIHsKKwkJCQkJdTMyIHRtcCA9IG12c19yZWFkX3BvcnRfaXJxX21hc2sobXZpLAorCQkJCQkJCQlwaHlfbm8pOworCQkJCQl0bXAgJj0gflBIWUVWX1NJR19GSVM7CisJCQkJCW12c193cml0ZV9wb3J0X2lycV9tYXNrKG12aSwKKwkJCQkJCQkJcGh5X25vLCB0bXApOworCQkJCX0KKworCQkJCW12c191cGRhdGVfcGh5aW5mbyhtdmksIHBoeV9ubywgMCk7CisJCQkJc2FzX2hhLT5ub3RpZnlfcGh5X2V2ZW50KHNhc19waHksCisJCQkJCQkJUEhZRV9PT0JfRE9ORSk7CisJCQkJbXZzX2J5dGVzX2RtYWVkKG12aSwgcGh5X25vKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAorCQkJCQkicGx1Z2luIGludGVycnVwdCBidXQgcGh5IGlzIGdvbmVcbiIpOworCQkJCW12c19waHlfY29udHJvbChzYXNfcGh5LCBQSFlfRlVOQ19MSU5LX1JFU0VULAorCQkJCQkJCU5VTEwpOworCQkJfQorCQl9IGVsc2UgaWYgKHBoeS0+aXJxX3N0YXR1cyAmIFBIWUVWX0JST0FEX0NIKSB7CisJCQltdnNfcmVsZWFzZV90YXNrKG12aSwgcGh5X25vKTsKKwkJCXNhc19oYS0+bm90aWZ5X3BvcnRfZXZlbnQoc2FzX3BoeSwKKwkJCQkJCVBPUlRFX0JST0FEQ0FTVF9SQ1ZEKTsKKwkJfQorCX0KKwltdnNfd3JpdGVfcG9ydF9pcnFfc3RhdChtdmksIHBoeV9ubywgcGh5LT5pcnFfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgbXZzX2ludF9zYXRhKHN0cnVjdCBtdnNfaW5mbyAqbXZpKQoreworCXUzMiB0bXA7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXRtcCA9IG1yMzIoSU5UX1NUQVRfU1JTKTsKKwltdzMyKElOVF9TVEFUX1NSUywgdG1wICYgMHhGRkZGKTsKK30KKworc3RhdGljIHZvaWQgbXZzX3Nsb3RfcmVzZXQoc3RydWN0IG12c19pbmZvICptdmksIHN0cnVjdCBzYXNfdGFzayAqdGFzaywKKwkJCQl1MzIgc2xvdF9pZHgpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7CisJc3RydWN0IGFzZF9zYXNfcG9ydCAqc2FzX3BvcnQgPSBkZXYtPnBvcnQ7CisJc3RydWN0IG12c19wb3J0ICpwb3J0ID0gbXZpLT5zbG90X2luZm9bc2xvdF9pZHhdLnBvcnQ7CisJdTMyIHJlZ19zZXQsIHBoeV9tYXNrOworCisJaWYgKCFzYXNfcHJvdG9jb2xfYXRhKHRhc2stPnRhc2tfcHJvdG8pKSB7CisJCXJlZ19zZXQgPSAwOworCQlwaHlfbWFzayA9IChwb3J0LT53aWRlX3BvcnRfcGh5bWFwKSA/IHBvcnQtPndpZGVfcG9ydF9waHltYXAgOgorCQkJCXNhc19wb3J0LT5waHlfbWFzazsKKwl9IGVsc2UgeworCQlyZWdfc2V0ID0gcG9ydC0+dGFza2ZpbGVzZXQ7CisJCXBoeV9tYXNrID0gc2FzX3BvcnQtPnBoeV9tYXNrOworCX0KKwltdmktPnR4W212aS0+dHhfcHJvZF0gPSBjcHVfdG9fbGUzMihUWFFfTU9ERV9JIHwgc2xvdF9pZHggfAorCQkJCQkoVFhRX0NNRF9TTE9UX1JFU0VUIDw8IFRYUV9DTURfU0hJRlQpIHwKKwkJCQkJKHBoeV9tYXNrIDw8IFRYUV9QSFlfU0hJRlQpIHwKKwkJCQkJKHJlZ19zZXQgPDwgVFhRX1NSU19TSElGVCkpOworCisJbXczMihUWF9QUk9EX0lEWCwgbXZpLT50eF9wcm9kKTsKKwltdmktPnR4X3Byb2QgPSAobXZpLT50eF9wcm9kICsgMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpOworfQorCitzdGF0aWMgaW50IG12c19zYXRhX2RvbmUoc3RydWN0IG12c19pbmZvICptdmksIHN0cnVjdCBzYXNfdGFzayAqdGFzaywKKwkJCXUzMiBzbG90X2lkeCwgaW50IGVycikKK3sKKwlzdHJ1Y3QgbXZzX3BvcnQgKnBvcnQgPSBtdmktPnNsb3RfaW5mb1tzbG90X2lkeF0ucG9ydDsKKwlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0c3RhdCA9ICZ0YXNrLT50YXNrX3N0YXR1czsKKwlzdHJ1Y3QgYXRhX3Rhc2tfcmVzcCAqcmVzcCA9IChzdHJ1Y3QgYXRhX3Rhc2tfcmVzcCAqKXRzdGF0LT5idWY7CisJaW50IHN0YXQgPSBTQU1fR09PRDsKKworCXJlc3AtPmZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgZGV2X3RvX2hvc3RfZmlzKTsKKwltZW1jcHkoJnJlc3AtPmVuZGluZ19maXNbMF0sCisJICAgICAgIFNBVEFfUkVDRUlWRURfRDJIX0ZJUyhwb3J0LT50YXNrZmlsZXNldCksCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZGV2X3RvX2hvc3RfZmlzKSk7CisJdHN0YXQtPmJ1Zl92YWxpZF9zaXplID0gc2l6ZW9mKCpyZXNwKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJc3RhdCA9IFNBU19QUk9UT19SRVNQT05TRTsKKwlyZXR1cm4gc3RhdDsKK30KKworc3RhdGljIHZvaWQgbXZzX3Nsb3RfZnJlZShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHJ4X2Rlc2MpCit7CisJdTMyIHNsb3RfaWR4ID0gcnhfZGVzYyAmIFJYUV9TTE9UX01BU0s7CisJbXZzX3RhZ19jbGVhcihtdmksIHNsb3RfaWR4KTsKK30KKworc3RhdGljIHZvaWQgbXZzX3Nsb3RfdGFza19mcmVlKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssCisJCQkgIHN0cnVjdCBtdnNfc2xvdF9pbmZvICpzbG90LCB1MzIgc2xvdF9pZHgpCit7CisJaWYgKCFzYXNfcHJvdG9jb2xfYXRhKHRhc2stPnRhc2tfcHJvdG8pKQorCQlpZiAoc2xvdC0+bl9lbGVtKQorCQkJcGNpX3VubWFwX3NnKG12aS0+cGRldiwgdGFzay0+c2NhdHRlciwKKwkJCQkgICAgIHNsb3QtPm5fZWxlbSwgdGFzay0+ZGF0YV9kaXIpOworCisJc3dpdGNoICh0YXNrLT50YXNrX3Byb3RvKSB7CisJY2FzZSBTQVNfUFJPVE9DT0xfU01QOgorCQlwY2lfdW5tYXBfc2cobXZpLT5wZGV2LCAmdGFzay0+c21wX3Rhc2suc21wX3Jlc3AsIDEsCisJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXBjaV91bm1hcF9zZyhtdmktPnBkZXYsICZ0YXNrLT5zbXBfdGFzay5zbXBfcmVxLCAxLAorCQkJICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnJlYWs7CisKKwljYXNlIFNBU19QUk9UT0NPTF9TQVRBOgorCWNhc2UgU0FTX1BST1RPQ09MX1NUUDoKKwljYXNlIFNBU19QUk9UT0NPTF9TU1A6CisJZGVmYXVsdDoKKwkJLyogZG8gbm90aGluZyAqLworCQlicmVhazsKKwl9CisJbGlzdF9kZWwoJnNsb3QtPmxpc3QpOworCXRhc2stPmxsZGRfdGFzayA9IE5VTEw7CisJc2xvdC0+dGFzayA9IE5VTEw7CisJc2xvdC0+cG9ydCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXZzX3Nsb3RfZXJyKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssCisJCQkgdTMyIHNsb3RfaWR4KQoreworCXN0cnVjdCBtdnNfc2xvdF9pbmZvICpzbG90ID0gJm12aS0+c2xvdF9pbmZvW3Nsb3RfaWR4XTsKKwl1MzIgZXJyX2R3MCA9IGxlMzJfdG9fY3B1KCoodTMyICopIChzbG90LT5yZXNwb25zZSkpOworCXUzMiBlcnJfZHcxID0gbGUzMl90b19jcHUoKih1MzIgKikgKHNsb3QtPnJlc3BvbnNlICsgNCkpOworCWludCBzdGF0ID0gU0FNX0NIRUNLX0NPTkQ7CisKKwlpZiAoZXJyX2R3MSAmIFNMT1RfQlNZX0VSUikgeworCQlzdGF0ID0gU0FTX1FVRVVFX0ZVTEw7CisJCW12c19zbG90X3Jlc2V0KG12aSwgdGFzaywgc2xvdF9pZHgpOworCX0KKwlzd2l0Y2ggKHRhc2stPnRhc2tfcHJvdG8pIHsKKwljYXNlIFNBU19QUk9UT0NPTF9TU1A6CisJCWJyZWFrOworCWNhc2UgU0FTX1BST1RPQ09MX1NNUDoKKwkJYnJlYWs7CisJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQToKKwljYXNlIFNBU19QUk9UT0NPTF9TVFA6CisJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQSB8IFNBU19QUk9UT0NPTF9TVFA6CisJCWlmIChlcnJfZHcwICYgVEZJTEVfRVJSKQorCQkJc3RhdCA9IG12c19zYXRhX2RvbmUobXZpLCB0YXNrLCBzbG90X2lkeCwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW12c19oZXhkdW1wKDE2LCAodTggKikgc2xvdC0+cmVzcG9uc2UsIDApOworCXJldHVybiBzdGF0OworfQorCitzdGF0aWMgaW50IG12c19zbG90X2NvbXBsZXRlKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcnhfZGVzYywgdTMyIGZsYWdzKQoreworCXUzMiBzbG90X2lkeCA9IHJ4X2Rlc2MgJiBSWFFfU0xPVF9NQVNLOworCXN0cnVjdCBtdnNfc2xvdF9pbmZvICpzbG90ID0gJm12aS0+c2xvdF9pbmZvW3Nsb3RfaWR4XTsKKwlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2sgPSBzbG90LT50YXNrOworCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzdGF0OworCXN0cnVjdCBtdnNfcG9ydCAqcG9ydDsKKwlib29sIGFib3J0ZWQ7CisJdm9pZCAqdG87CisKKwlpZiAodW5saWtlbHkoIXRhc2sgfHwgIXRhc2stPmxsZGRfdGFzaykpCisJCXJldHVybiAtMTsKKworCW12c19oYmFfY3FfZHVtcChtdmkpOworCisJc3Bpbl9sb2NrKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2spOworCWFib3J0ZWQgPSB0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfQUJPUlRFRDsKKwlpZiAoIWFib3J0ZWQpIHsKKwkJdGFzay0+dGFza19zdGF0ZV9mbGFncyAmPQorCQkgICAgfihTQVNfVEFTS19TVEFURV9QRU5ESU5HIHwgU0FTX1RBU0tfQVRfSU5JVElBVE9SKTsKKwkJdGFzay0+dGFza19zdGF0ZV9mbGFncyB8PSBTQVNfVEFTS19TVEFURV9ET05FOworCX0KKwlzcGluX3VubG9jaygmdGFzay0+dGFza19zdGF0ZV9sb2NrKTsKKworCWlmIChhYm9ydGVkKSB7CisJCW12c19zbG90X3Rhc2tfZnJlZShtdmksIHRhc2ssIHNsb3QsIHNsb3RfaWR4KTsKKwkJbXZzX3Nsb3RfZnJlZShtdmksIHJ4X2Rlc2MpOworCQlyZXR1cm4gLTE7CisJfQorCisJcG9ydCA9IHNsb3QtPnBvcnQ7CisJdHN0YXQgPSAmdGFzay0+dGFza19zdGF0dXM7CisJbWVtc2V0KHRzdGF0LCAwLCBzaXplb2YoKnRzdGF0KSk7CisJdHN0YXQtPnJlc3AgPSBTQVNfVEFTS19DT01QTEVURTsKKworCWlmICh1bmxpa2VseSghcG9ydC0+cG9ydF9hdHRhY2hlZCB8fCBmbGFncykpIHsKKwkJbXZzX3Nsb3RfZXJyKG12aSwgdGFzaywgc2xvdF9pZHgpOworCQlpZiAoIXNhc19wcm90b2NvbF9hdGEodGFzay0+dGFza19wcm90bykpCisJCQl0c3RhdC0+c3RhdCA9IFNBU19QSFlfRE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogZXJyb3IgaW5mbyByZWNvcmQgcHJlc2VudCAqLworCWlmICh1bmxpa2VseSgocnhfZGVzYyAmIFJYUV9FUlIpICYmICgqKHU2NCAqKSBzbG90LT5yZXNwb25zZSkpKSB7CisJCXRzdGF0LT5zdGF0ID0gbXZzX3Nsb3RfZXJyKG12aSwgdGFzaywgc2xvdF9pZHgpOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKHRhc2stPnRhc2tfcHJvdG8pIHsKKwljYXNlIFNBU19QUk9UT0NPTF9TU1A6CisJCS8qIGh3IHNheXMgc3RhdHVzID09IDAsIGRhdGFwcmVzID09IDAgKi8KKwkJaWYgKHJ4X2Rlc2MgJiBSWFFfR09PRCkgeworCQkJdHN0YXQtPnN0YXQgPSBTQU1fR09PRDsKKwkJCXRzdGF0LT5yZXNwID0gU0FTX1RBU0tfQ09NUExFVEU7CisJCX0KKwkJLyogcmVzcG9uc2UgZnJhbWUgcHJlc2VudCAqLworCQllbHNlIGlmIChyeF9kZXNjICYgUlhRX1JTUCkgeworCQkJc3RydWN0IHNzcF9yZXNwb25zZV9pdSAqaXUgPQorCQkJICAgIHNsb3QtPnJlc3BvbnNlICsgc2l6ZW9mKHN0cnVjdCBtdnNfZXJyX2luZm8pOworCQkJc2FzX3NzcF90YXNrX3Jlc3BvbnNlKCZtdmktPnBkZXYtPmRldiwgdGFzaywgaXUpOworCQl9CisKKwkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbj8gKi8KKwkJZWxzZQorCQkJdHN0YXQtPnN0YXQgPSBTQU1fQ0hFQ0tfQ09ORDsKKwkJYnJlYWs7CisKKwljYXNlIFNBU19QUk9UT0NPTF9TTVA6IHsKKwkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVzcCA9ICZ0YXNrLT5zbXBfdGFzay5zbXBfcmVzcDsKKwkJCXRzdGF0LT5zdGF0ID0gU0FNX0dPT0Q7CisJCQl0byA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2dfcmVzcCksIEtNX0lSUTApOworCQkJbWVtY3B5KHRvICsgc2dfcmVzcC0+b2Zmc2V0LAorCQkJCXNsb3QtPnJlc3BvbnNlICsgc2l6ZW9mKHN0cnVjdCBtdnNfZXJyX2luZm8pLAorCQkJCXNnX2RtYV9sZW4oc2dfcmVzcCkpOworCQkJa3VubWFwX2F0b21pYyh0bywgS01fSVJRMCk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQToKKwljYXNlIFNBU19QUk9UT0NPTF9TVFA6CisJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQSB8IFNBU19QUk9UT0NPTF9TVFA6IHsKKwkJCXRzdGF0LT5zdGF0ID0gbXZzX3NhdGFfZG9uZShtdmksIHRhc2ssIHNsb3RfaWR4LCAwKTsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl0c3RhdC0+c3RhdCA9IFNBTV9DSEVDS19DT05EOworCQlicmVhazsKKwl9CisKK291dDoKKwltdnNfc2xvdF90YXNrX2ZyZWUobXZpLCB0YXNrLCBzbG90LCBzbG90X2lkeCk7CisJaWYgKHVubGlrZWx5KHRzdGF0LT5zdGF0ICE9IFNBU19RVUVVRV9GVUxMKSkKKwkJbXZzX3Nsb3RfZnJlZShtdmksIHJ4X2Rlc2MpOworCisJc3Bpbl91bmxvY2soJm12aS0+bG9jayk7CisJdGFzay0+dGFza19kb25lKHRhc2spOworCXNwaW5fbG9jaygmbXZpLT5sb2NrKTsKKwlyZXR1cm4gdHN0YXQtPnN0YXQ7Cit9CisKK3N0YXRpYyB2b2lkIG12c19yZWxlYXNlX3Rhc2soc3RydWN0IG12c19pbmZvICptdmksIGludCBwaHlfbm8pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbjsKKwlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqc2xvdDsKKwlzdHJ1Y3QgbXZzX3BoeSAqcGh5ID0gJm12aS0+cGh5W3BoeV9ub107CisJc3RydWN0IG12c19wb3J0ICpwb3J0ID0gcGh5LT5wb3J0OworCXUzMiByeF9kZXNjOworCisJaWYgKCFwb3J0KQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCAmcG9ydC0+bGlzdCkgeworCQlzbG90ID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IG12c19zbG90X2luZm8sIGxpc3QpOworCQlyeF9kZXNjID0gKHUzMikgKHNsb3QgLSBtdmktPnNsb3RfaW5mbyk7CisJCW12c19zbG90X2NvbXBsZXRlKG12aSwgcnhfZGVzYywgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdnNfaW50X2Z1bGwoc3RydWN0IG12c19pbmZvICptdmkpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXUzMiB0bXAsIHN0YXQ7CisJaW50IGk7CisKKwlzdGF0ID0gbXIzMihJTlRfU1RBVCk7CisKKwltdnNfaW50X3J4KG12aSwgZmFsc2UpOworCisJZm9yIChpID0gMDsgaSA8IE1WU19NQVhfUE9SVFM7IGkrKykgeworCQl0bXAgPSAoc3RhdCA+PiBpKSAmIChDSU5UX1BPUlQgfCBDSU5UX1BPUlRfU1RPUFBFRCk7CisJCWlmICh0bXApCisJCQltdnNfaW50X3BvcnQobXZpLCBpLCB0bXApOworCX0KKworCWlmIChzdGF0ICYgQ0lOVF9TUlMpCisJCW12c19pbnRfc2F0YShtdmkpOworCisJbXczMihJTlRfU1RBVCwgc3RhdCk7Cit9CisKK3N0YXRpYyBpbnQgbXZzX2ludF9yeChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgYm9vbCBzZWxmX2NsZWFyKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwl1MzIgcnhfcHJvZF9pZHgsIHJ4X2Rlc2M7CisJYm9vbCBhdHRuID0gZmFsc2U7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtdmktPnBkZXY7CisKKwkvKiB0aGUgZmlyc3QgZHdvcmQgaW4gdGhlIFJYIHJpbmcgaXMgc3BlY2lhbDogaXQgY29udGFpbnMKKwkgKiBhIG1pcnJvciBvZiB0aGUgaGFyZHdhcmUncyBSWCBwcm9kdWNlciBpbmRleCwgc28gdGhhdAorCSAqIHdlIGRvbid0IGhhdmUgdG8gc3RhbGwgdGhlIENQVSByZWFkaW5nIHRoYXQgcmVnaXN0ZXIuCisJICogVGhlIGFjdHVhbCBSWCByaW5nIGlzIG9mZnNldCBieSBvbmUgZHdvcmQsIGR1ZSB0byB0aGlzLgorCSAqLworCXJ4X3Byb2RfaWR4ID0gbXZpLT5yeF9jb25zOworCW12aS0+cnhfY29ucyA9IGxlMzJfdG9fY3B1KG12aS0+cnhbMF0pOworCWlmIChtdmktPnJ4X2NvbnMgPT0gMHhmZmYpCS8qIGgvdyBoYXNuJ3QgdG91Y2hlZCBSWCByaW5nIHlldCAqLworCQlyZXR1cm4gMDsKKworCS8qIFRoZSBDTVBMX1EgbWF5IGNvbWUgbGF0ZSwgcmVhZCBmcm9tIHJlZ2lzdGVyIGFuZCB0cnkgYWdhaW4KKwkqIG5vdGU6IGlmIGNvYWxlc2NpbmcgaXMgZW5hYmxlZCwKKwkqIGl0IHdpbGwgbmVlZCB0byByZWFkIGZyb20gcmVnaXN0ZXIgZXZlcnkgdGltZSBmb3Igc3VyZQorCSovCisJaWYgKG12aS0+cnhfY29ucyA9PSByeF9wcm9kX2lkeCkKKwkJbXZpLT5yeF9jb25zID0gbXIzMihSWF9DT05TX0lEWCkgJiBSWF9SSU5HX1NaX01BU0s7CisKKwlpZiAobXZpLT5yeF9jb25zID09IHJ4X3Byb2RfaWR4KQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChtdmktPnJ4X2NvbnMgIT0gcnhfcHJvZF9pZHgpIHsKKworCQkvKiBpbmNyZW1lbnQgb3VyIGludGVybmFsIFJYIGNvbnN1bWVyIHBvaW50ZXIgKi8KKwkJcnhfcHJvZF9pZHggPSAocnhfcHJvZF9pZHggKyAxKSAmIChNVlNfUlhfUklOR19TWiAtIDEpOworCisJCXJ4X2Rlc2MgPSBsZTMyX3RvX2NwdShtdmktPnJ4W3J4X3Byb2RfaWR4ICsgMV0pOworCisJCWlmIChsaWtlbHkocnhfZGVzYyAmIFJYUV9ET05FKSkKKwkJCW12c19zbG90X2NvbXBsZXRlKG12aSwgcnhfZGVzYywgMCk7CisJCWlmIChyeF9kZXNjICYgUlhRX0FUVE4pIHsKKwkJCWF0dG4gPSB0cnVlOworCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiQVRUTiAlWFxuIiwKKwkJCQlyeF9kZXNjKTsKKwkJfSBlbHNlIGlmIChyeF9kZXNjICYgUlhRX0VSUikgeworCQkJaWYgKCEocnhfZGVzYyAmIFJYUV9ET05FKSkKKwkJCQltdnNfc2xvdF9jb21wbGV0ZShtdmksIHJ4X2Rlc2MsIDApOworCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiUlhRX0VSUiAlWFxuIiwKKwkJCQlyeF9kZXNjKTsKKwkJfSBlbHNlIGlmIChyeF9kZXNjICYgUlhRX1NMT1RfUkVTRVQpIHsKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgIlNsb3QgcmVzZXRbJVhdXG4iLAorCQkJCXJ4X2Rlc2MpOworCQkJbXZzX3Nsb3RfZnJlZShtdmksIHJ4X2Rlc2MpOworCQl9CisJfQorCisJaWYgKGF0dG4gJiYgc2VsZl9jbGVhcikKKwkJbXZzX2ludF9mdWxsKG12aSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIE1WU19VU0VfVEFTS0xFVAorc3RhdGljIHZvaWQgbXZzX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gKHN0cnVjdCBtdnNfaW5mbyAqKSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBNVlNfRElTQUJMRV9NU0kKKwltdnNfaW50X2Z1bGwobXZpKTsKKyNlbHNlCisJbXZzX2ludF9yeChtdmksIHRydWUpOworI2VuZGlmCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7Cit9CisjZW5kaWYKKworc3RhdGljIGlycXJldHVybl90IG12c19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gb3BhcXVlOworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwl1MzIgc3RhdDsKKworCXN0YXQgPSBtcjMyKEdCTF9JTlRfU1RBVCk7CisKKwlpZiAoc3RhdCA9PSAwIHx8IHN0YXQgPT0gMHhmZmZmZmZmZikKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogY2xlYXIgQ01EX0NNUExUIEFTQVAgKi8KKwltdzMyX2YoSU5UX1NUQVQsIENJTlRfRE9ORSk7CisKKyNpZm5kZWYgTVZTX1VTRV9UQVNLTEVUCisJc3Bpbl9sb2NrKCZtdmktPmxvY2spOworCisJbXZzX2ludF9mdWxsKG12aSk7CisKKwlzcGluX3VubG9jaygmbXZpLT5sb2NrKTsKKyNlbHNlCisJdGFza2xldF9zY2hlZHVsZSgmbXZpLT50YXNrbGV0KTsKKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmbmRlZiBNVlNfRElTQUJMRV9NU0kKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdnNfbXNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpvcGFxdWUpCit7CisJc3RydWN0IG12c19pbmZvICptdmkgPSBvcGFxdWU7CisKKyNpZm5kZWYgTVZTX1VTRV9UQVNLTEVUCisJc3Bpbl9sb2NrKCZtdmktPmxvY2spOworCisJbXZzX2ludF9yeChtdmksIHRydWUpOworCisJc3Bpbl91bmxvY2soJm12aS0+bG9jayk7CisjZWxzZQorCXRhc2tsZXRfc2NoZWR1bGUoJm12aS0+dGFza2xldCk7CisjZW5kaWYKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisjZW5kaWYKKworc3RydWN0IG12c190YXNrX2V4ZWNfaW5mbyB7CisJc3RydWN0IHNhc190YXNrICp0YXNrOworCXN0cnVjdCBtdnNfY21kX2hkciAqaGRyOworCXN0cnVjdCBtdnNfcG9ydCAqcG9ydDsKKwl1MzIgdGFnOworCWludCBuX2VsZW07Cit9OworCitzdGF0aWMgaW50IG12c190YXNrX3ByZXBfc21wKHN0cnVjdCBtdnNfaW5mbyAqbXZpLAorCQkJICAgICBzdHJ1Y3QgbXZzX3Rhc2tfZXhlY19pbmZvICp0ZWkpCit7CisJaW50IGVsZW0sIHJjLCBpOworCXN0cnVjdCBzYXNfdGFzayAqdGFzayA9IHRlaS0+dGFzazsKKwlzdHJ1Y3QgbXZzX2NtZF9oZHIgKmhkciA9IHRlaS0+aGRyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVxLCAqc2dfcmVzcDsKKwl1MzIgcmVxX2xlbiwgcmVzcF9sZW4sIHRhZyA9IHRlaS0+dGFnOworCXZvaWQgKmJ1Zl90bXA7CisJdTggKmJ1Zl9vYWY7CisJZG1hX2FkZHJfdCBidWZfdG1wX2RtYTsKKwlzdHJ1Y3QgbXZzX3ByZCAqYnVmX3ByZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBtdnNfc2xvdF9pbmZvICpzbG90ID0gJm12aS0+c2xvdF9pbmZvW3RhZ107CisJc3RydWN0IGFzZF9zYXNfcG9ydCAqc2FzX3BvcnQgPSB0YXNrLT5kZXYtPnBvcnQ7CisJdTMyIGZsYWdzID0gKHRlaS0+bl9lbGVtIDw8IE1DSF9QUkRfTEVOX1NISUZUKTsKKyNpZiBfTVZfRFVNUAorCXU4ICpidWZfY21kOworCXZvaWQgKmZyb207CisjZW5kaWYKKwkvKgorCSAqIERNQS1tYXAgU01QIHJlcXVlc3QsIHJlc3BvbnNlIGJ1ZmZlcnMKKwkgKi8KKwlzZ19yZXEgPSAmdGFzay0+c21wX3Rhc2suc21wX3JlcTsKKwllbGVtID0gcGNpX21hcF9zZyhtdmktPnBkZXYsIHNnX3JlcSwgMSwgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKCFlbGVtKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXFfbGVuID0gc2dfZG1hX2xlbihzZ19yZXEpOworCisJc2dfcmVzcCA9ICZ0YXNrLT5zbXBfdGFzay5zbXBfcmVzcDsKKwllbGVtID0gcGNpX21hcF9zZyhtdmktPnBkZXYsIHNnX3Jlc3AsIDEsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJaWYgKCFlbGVtKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlyZXNwX2xlbiA9IHNnX2RtYV9sZW4oc2dfcmVzcCk7CisKKwkvKiBtdXN0IGJlIGluIGR3b3JkcyAqLworCWlmICgocmVxX2xlbiAmIDB4MykgfHwgKHJlc3BfbGVuICYgMHgzKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dF8yOworCX0KKworCS8qCisJICogYXJyYW5nZSBNVlNfU0xPVF9CVUZfU1otc2l6ZWQgRE1BIGJ1ZmZlciBhY2NvcmRpbmcgdG8gb3VyIG5lZWRzCisJICovCisKKwkvKiByZWdpb24gMTogY29tbWFuZCB0YWJsZSBhcmVhIChNVlNfU1NQX0NNRF9TWiBieXRlcykgKioqKioqKioqKioqKiogKi8KKwlidWZfdG1wID0gc2xvdC0+YnVmOworCWJ1Zl90bXBfZG1hID0gc2xvdC0+YnVmX2RtYTsKKworI2lmIF9NVl9EVU1QCisJYnVmX2NtZCA9IGJ1Zl90bXA7CisJaGRyLT5jbWRfdGJsID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCWJ1Zl90bXAgKz0gcmVxX2xlbjsKKwlidWZfdG1wX2RtYSArPSByZXFfbGVuOworCXNsb3QtPmNtZF9zaXplID0gcmVxX2xlbjsKKyNlbHNlCisJaGRyLT5jbWRfdGJsID0gY3B1X3RvX2xlNjQoc2dfZG1hX2FkZHJlc3Moc2dfcmVxKSk7CisjZW5kaWYKKworCS8qIHJlZ2lvbiAyOiBvcGVuIGFkZHJlc3MgZnJhbWUgYXJlYSAoTVZTX09BRl9TWiBieXRlcykgKioqKioqKioqICovCisJYnVmX29hZiA9IGJ1Zl90bXA7CisJaGRyLT5vcGVuX2ZyYW1lID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCisJYnVmX3RtcCArPSBNVlNfT0FGX1NaOworCWJ1Zl90bXBfZG1hICs9IE1WU19PQUZfU1o7CisKKwkvKiByZWdpb24gMzogUFJEIHRhYmxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWJ1Zl9wcmQgPSBidWZfdG1wOworCWlmICh0ZWktPm5fZWxlbSkKKwkJaGRyLT5wcmRfdGJsID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCWVsc2UKKwkJaGRyLT5wcmRfdGJsID0gMDsKKworCWkgPSBzaXplb2Yoc3RydWN0IG12c19wcmQpICogdGVpLT5uX2VsZW07CisJYnVmX3RtcCArPSBpOworCWJ1Zl90bXBfZG1hICs9IGk7CisKKwkvKiByZWdpb24gNDogc3RhdHVzIGJ1ZmZlciAobGFyZ2VyIHRoZSBQUkQsIHNtYWxsZXIgdGhpcyBidWYpICoqKioqKiAqLworCXNsb3QtPnJlc3BvbnNlID0gYnVmX3RtcDsKKwloZHItPnN0YXR1c19idWYgPSBjcHVfdG9fbGU2NChidWZfdG1wX2RtYSk7CisKKwkvKgorCSAqIEZpbGwgaW4gVFggcmluZyBhbmQgY29tbWFuZCBzbG90IGhlYWRlcgorCSAqLworCXNsb3QtPnR4ID0gbXZpLT50eF9wcm9kOworCW12aS0+dHhbbXZpLT50eF9wcm9kXSA9IGNwdV90b19sZTMyKChUWFFfQ01EX1NNUCA8PCBUWFFfQ01EX1NISUZUKSB8CisJCQkJCVRYUV9NT0RFX0kgfCB0YWcgfAorCQkJCQkoc2FzX3BvcnQtPnBoeV9tYXNrIDw8IFRYUV9QSFlfU0hJRlQpKTsKKworCWhkci0+ZmxhZ3MgfD0gZmxhZ3M7CisJaGRyLT5sZW5zID0gY3B1X3RvX2xlMzIoKChyZXNwX2xlbiAvIDQpIDw8IDE2KSB8ICgocmVxX2xlbiAtIDQpIC8gNCkpOworCWhkci0+dGFncyA9IGNwdV90b19sZTMyKHRhZyk7CisJaGRyLT5kYXRhX2xlbiA9IDA7CisKKwkvKiBnZW5lcmF0ZSBvcGVuIGFkZHJlc3MgZnJhbWUgaGRyIChmaXJzdCAxMiBieXRlcykgKi8KKwlidWZfb2FmWzBdID0gKDEgPDwgNykgfCAoMCA8PCA0KSB8IDB4MDE7IC8qIGluaXRpYXRvciwgU01QLCBmdHlwZSAxaCAqLworCWJ1Zl9vYWZbMV0gPSB0YXNrLT5kZXYtPmxpbmtyYXRlICYgMHhmOworCSoodTE2ICopKGJ1Zl9vYWYgKyAyKSA9IDB4RkZGRjsJCS8qIFNBUyBTUEVDICovCisJbWVtY3B5KGJ1Zl9vYWYgKyA0LCB0YXNrLT5kZXYtPnNhc19hZGRyLCBTQVNfQUREUl9TSVpFKTsKKworCS8qIGZpbGwgaW4gUFJEIChzY2F0dGVyL2dhdGhlcikgdGFibGUsIGlmIGFueSAqLworCWZvcl9lYWNoX3NnKHRhc2stPnNjYXR0ZXIsIHNnLCB0ZWktPm5fZWxlbSwgaSkgeworCQlidWZfcHJkLT5hZGRyID0gY3B1X3RvX2xlNjQoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJYnVmX3ByZC0+bGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQlidWZfcHJkKys7CisJfQorCisjaWYgX01WX0RVTVAKKwkvKiBjb3B5IGNtZCB0YWJsZSAqLworCWZyb20gPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnX3JlcSksIEtNX0lSUTApOworCW1lbWNweShidWZfY21kLCBmcm9tICsgc2dfcmVxLT5vZmZzZXQsIHJlcV9sZW4pOworCWt1bm1hcF9hdG9taWMoZnJvbSwgS01fSVJRMCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKKworZXJyX291dF8yOgorCXBjaV91bm1hcF9zZyhtdmktPnBkZXYsICZ0ZWktPnRhc2stPnNtcF90YXNrLnNtcF9yZXNwLCAxLAorCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CitlcnJfb3V0OgorCXBjaV91bm1hcF9zZyhtdmktPnBkZXYsICZ0ZWktPnRhc2stPnNtcF90YXNrLnNtcF9yZXEsIDEsCisJCSAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtdnNfZnJlZV9yZWdfc2V0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBzdHJ1Y3QgbXZzX3BvcnQgKnBvcnQpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXUzMiB0bXAsIG9mZnM7CisJdTggKnRmcyA9ICZwb3J0LT50YXNrZmlsZXNldDsKKworCWlmICgqdGZzID09IE1WU19JRF9OT1RfTUFQUEVEKQorCQlyZXR1cm47CisKKwlvZmZzID0gMVUgPDwgKCgqdGZzICYgMHgwZikgKyBQQ1NfRU5fU0FUQV9SRUdfU0hJRlQpOworCWlmICgqdGZzIDwgMTYpIHsKKwkJdG1wID0gbXIzMihQQ1MpOworCQltdzMyKFBDUywgdG1wICYgfm9mZnMpOworCX0gZWxzZSB7CisJCXRtcCA9IG1yMzIoQ1RMKTsKKwkJbXczMihDVEwsIHRtcCAmIH5vZmZzKTsKKwl9CisKKwl0bXAgPSBtcjMyKElOVF9TVEFUX1NSUykgJiAoMVUgPDwgKnRmcyk7CisJaWYgKHRtcCkKKwkJbXczMihJTlRfU1RBVF9TUlMsIHRtcCk7CisKKwkqdGZzID0gTVZTX0lEX05PVF9NQVBQRUQ7Cit9CisKK3N0YXRpYyB1OCBtdnNfYXNzaWduX3JlZ19zZXQoc3RydWN0IG12c19pbmZvICptdmksIHN0cnVjdCBtdnNfcG9ydCAqcG9ydCkKK3sKKwlpbnQgaTsKKwl1MzIgdG1wLCBvZmZzOworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKworCWlmIChwb3J0LT50YXNrZmlsZXNldCAhPSBNVlNfSURfTk9UX01BUFBFRCkKKwkJcmV0dXJuIDA7CisKKwl0bXAgPSBtcjMyKFBDUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXZpLT5jaGlwLT5zcnNfc3o7IGkrKykgeworCQlpZiAoaSA9PSAxNikKKwkJCXRtcCA9IG1yMzIoQ1RMKTsKKwkJb2ZmcyA9IDFVIDw8ICgoaSAmIDB4MGYpICsgUENTX0VOX1NBVEFfUkVHX1NISUZUKTsKKwkJaWYgKCEodG1wICYgb2ZmcykpIHsKKwkJCXBvcnQtPnRhc2tmaWxlc2V0ID0gaTsKKworCQkJaWYgKGkgPCAxNikKKwkJCQltdzMyKFBDUywgdG1wIHwgb2Zmcyk7CisJCQllbHNlCisJCQkJbXczMihDVEwsIHRtcCB8IG9mZnMpOworCQkJdG1wID0gbXIzMihJTlRfU1RBVF9TUlMpICYgKDFVIDw8IGkpOworCQkJaWYgKHRtcCkKKwkJCQltdzMyKElOVF9TVEFUX1NSUywgdG1wKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiBNVlNfSURfTk9UX01BUFBFRDsKK30KKworc3RhdGljIHUzMiBtdnNfZ2V0X25jcV90YWcoc3RydWN0IHNhc190YXNrICp0YXNrLCB1MzIgKnRhZykKK3sKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjID0gdGFzay0+dWxkZF90YXNrOworCisJaWYgKHFjKSB7CisJCWlmIChxYy0+dGYuY29tbWFuZCA9PSBBVEFfQ01EX0ZQRE1BX1dSSVRFIHx8CisJCQlxYy0+dGYuY29tbWFuZCA9PSBBVEFfQ01EX0ZQRE1BX1JFQUQpIHsKKwkJCSp0YWcgPSBxYy0+dGFnOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdnNfdGFza19wcmVwX2F0YShzdHJ1Y3QgbXZzX2luZm8gKm12aSwKKwkJCSAgICAgc3RydWN0IG12c190YXNrX2V4ZWNfaW5mbyAqdGVpKQoreworCXN0cnVjdCBzYXNfdGFzayAqdGFzayA9IHRlaS0+dGFzazsKKwlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gdGFzay0+ZGV2OworCXN0cnVjdCBtdnNfY21kX2hkciAqaGRyID0gdGVpLT5oZHI7CisJc3RydWN0IGFzZF9zYXNfcG9ydCAqc2FzX3BvcnQgPSBkZXYtPnBvcnQ7CisJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3QgbXZzX3ByZCAqYnVmX3ByZDsKKwlzdHJ1Y3QgbXZzX3BvcnQgKnBvcnQgPSB0ZWktPnBvcnQ7CisJdTMyIHRhZyA9IHRlaS0+dGFnOworCXUzMiBmbGFncyA9ICh0ZWktPm5fZWxlbSA8PCBNQ0hfUFJEX0xFTl9TSElGVCk7CisJdm9pZCAqYnVmX3RtcDsKKwl1OCAqYnVmX2NtZCwgKmJ1Zl9vYWY7CisJZG1hX2FkZHJfdCBidWZfdG1wX2RtYTsKKwl1MzIgaSwgcmVxX2xlbiwgcmVzcF9sZW47CisJY29uc3QgdTMyIG1heF9yZXNwX2xlbiA9IFNCX1JGQl9NQVg7CisKKwlpZiAobXZzX2Fzc2lnbl9yZWdfc2V0KG12aSwgcG9ydCkgPT0gTVZTX0lEX05PVF9NQVBQRUQpCisJCXJldHVybiAtRUJVU1k7CisKKwlzbG90ID0gJm12aS0+c2xvdF9pbmZvW3RhZ107CisJc2xvdC0+dHggPSBtdmktPnR4X3Byb2Q7CisJbXZpLT50eFttdmktPnR4X3Byb2RdID0gY3B1X3RvX2xlMzIoVFhRX01PREVfSSB8IHRhZyB8CisJCQkJCShUWFFfQ01EX1NUUCA8PCBUWFFfQ01EX1NISUZUKSB8CisJCQkJCShzYXNfcG9ydC0+cGh5X21hc2sgPDwgVFhRX1BIWV9TSElGVCkgfAorCQkJCQkocG9ydC0+dGFza2ZpbGVzZXQgPDwgVFhRX1NSU19TSElGVCkpOworCisJaWYgKHRhc2stPmF0YV90YXNrLnVzZV9uY3EpCisJCWZsYWdzIHw9IE1DSF9GUERNQTsKKwlpZiAoZGV2LT5zYXRhX2Rldi5jb21tYW5kX3NldCA9PSBBVEFQSV9DT01NQU5EX1NFVCkgeworCQlpZiAodGFzay0+YXRhX3Rhc2suZmlzLmNvbW1hbmQgIT0gQVRBX0NNRF9JRF9BVEFQSSkKKwkJCWZsYWdzIHw9IE1DSF9BVEFQSTsKKwl9CisKKwkvKiBGSVhNRTogZmlsbCBpbiBwb3J0IG11bHRpcGxpZXIgbnVtYmVyICovCisKKwloZHItPmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOworCisJLyogRklYTUU6IHRoZSBsb3cgb3JkZXIgb3JkZXIgNSBiaXRzIGZvciB0aGUgVEFHIGlmIGVuYWJsZSBOQ1EgKi8KKwlpZiAodGFzay0+YXRhX3Rhc2sudXNlX25jcSAmJiBtdnNfZ2V0X25jcV90YWcodGFzaywgJmhkci0+dGFncykpCisJCXRhc2stPmF0YV90YXNrLmZpcy5zZWN0b3JfY291bnQgfD0gaGRyLT50YWdzIDw8IDM7CisJZWxzZQorCQloZHItPnRhZ3MgPSBjcHVfdG9fbGUzMih0YWcpOworCWhkci0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMih0YXNrLT50b3RhbF94ZmVyX2xlbik7CisKKwkvKgorCSAqIGFycmFuZ2UgTVZTX1NMT1RfQlVGX1NaLXNpemVkIERNQSBidWZmZXIgYWNjb3JkaW5nIHRvIG91ciBuZWVkcworCSAqLworCisJLyogcmVnaW9uIDE6IGNvbW1hbmQgdGFibGUgYXJlYSAoTVZTX0FUQV9DTURfU1ogYnl0ZXMpICoqKioqKioqKioqKioqICovCisJYnVmX2NtZCA9IGJ1Zl90bXAgPSBzbG90LT5idWY7CisJYnVmX3RtcF9kbWEgPSBzbG90LT5idWZfZG1hOworCisJaGRyLT5jbWRfdGJsID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCisJYnVmX3RtcCArPSBNVlNfQVRBX0NNRF9TWjsKKwlidWZfdG1wX2RtYSArPSBNVlNfQVRBX0NNRF9TWjsKKyNpZiBfTVZfRFVNUAorCXNsb3QtPmNtZF9zaXplID0gTVZTX0FUQV9DTURfU1o7CisjZW5kaWYKKworCS8qIHJlZ2lvbiAyOiBvcGVuIGFkZHJlc3MgZnJhbWUgYXJlYSAoTVZTX09BRl9TWiBieXRlcykgKioqKioqKioqICovCisJLyogdXNlZCBmb3IgU1RQLiAgdW51c2VkIGZvciBTQVRBPyAqLworCWJ1Zl9vYWYgPSBidWZfdG1wOworCWhkci0+b3Blbl9mcmFtZSA9IGNwdV90b19sZTY0KGJ1Zl90bXBfZG1hKTsKKworCWJ1Zl90bXAgKz0gTVZTX09BRl9TWjsKKwlidWZfdG1wX2RtYSArPSBNVlNfT0FGX1NaOworCisJLyogcmVnaW9uIDM6IFBSRCB0YWJsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwlidWZfcHJkID0gYnVmX3RtcDsKKwlpZiAodGVpLT5uX2VsZW0pCisJCWhkci0+cHJkX3RibCA9IGNwdV90b19sZTY0KGJ1Zl90bXBfZG1hKTsKKwllbHNlCisJCWhkci0+cHJkX3RibCA9IDA7CisKKwlpID0gc2l6ZW9mKHN0cnVjdCBtdnNfcHJkKSAqIHRlaS0+bl9lbGVtOworCWJ1Zl90bXAgKz0gaTsKKwlidWZfdG1wX2RtYSArPSBpOworCisJLyogcmVnaW9uIDQ6IHN0YXR1cyBidWZmZXIgKGxhcmdlciB0aGUgUFJELCBzbWFsbGVyIHRoaXMgYnVmKSAqKioqKiogKi8KKwkvKiBGSVhNRTogcHJvYmFibHkgdW51c2VkLCBmb3IgU0FUQS4gIGtlcHQgaGVyZSBqdXN0IGluIGNhc2UKKwkgKiB3ZSBnZXQgYSBTVFAvU0FUQSBlcnJvciBpbmZvcm1hdGlvbiByZWNvcmQKKwkgKi8KKwlzbG90LT5yZXNwb25zZSA9IGJ1Zl90bXA7CisJaGRyLT5zdGF0dXNfYnVmID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCisJcmVxX2xlbiA9IHNpemVvZihzdHJ1Y3QgaG9zdF90b19kZXZfZmlzKTsKKwlyZXNwX2xlbiA9IE1WU19TTE9UX0JVRl9TWiAtIE1WU19BVEFfQ01EX1NaIC0KKwkgICAgc2l6ZW9mKHN0cnVjdCBtdnNfZXJyX2luZm8pIC0gaTsKKworCS8qIHJlcXVlc3QsIHJlc3BvbnNlIGxlbmd0aHMgKi8KKwlyZXNwX2xlbiA9IG1pbihyZXNwX2xlbiwgbWF4X3Jlc3BfbGVuKTsKKwloZHItPmxlbnMgPSBjcHVfdG9fbGUzMigoKHJlc3BfbGVuIC8gNCkgPDwgMTYpIHwgKHJlcV9sZW4gLyA0KSk7CisKKwl0YXNrLT5hdGFfdGFzay5maXMuZmxhZ3MgfD0gMHg4MDsgLyogQz0xOiB1cGRhdGUgQVRBIGNtZCByZWcgKi8KKwkvKiBmaWxsIGluIGNvbW1hbmQgRklTIGFuZCBBVEFQSSBDREIgKi8KKwltZW1jcHkoYnVmX2NtZCwgJnRhc2stPmF0YV90YXNrLmZpcywgc2l6ZW9mKHN0cnVjdCBob3N0X3RvX2Rldl9maXMpKTsKKwlpZiAoZGV2LT5zYXRhX2Rldi5jb21tYW5kX3NldCA9PSBBVEFQSV9DT01NQU5EX1NFVCkKKwkJbWVtY3B5KGJ1Zl9jbWQgKyBTVFBfQVRBUElfQ01ELAorCQkJdGFzay0+YXRhX3Rhc2suYXRhcGlfcGFja2V0LCAxNik7CisKKwkvKiBnZW5lcmF0ZSBvcGVuIGFkZHJlc3MgZnJhbWUgaGRyIChmaXJzdCAxMiBieXRlcykgKi8KKwlidWZfb2FmWzBdID0gKDEgPDwgNykgfCAoMiA8PCA0KSB8IDB4MTsJLyogaW5pdGlhdG9yLCBTVFAsIGZ0eXBlIDFoICovCisJYnVmX29hZlsxXSA9IHRhc2stPmRldi0+bGlua3JhdGUgJiAweGY7CisJKih1MTYgKikoYnVmX29hZiArIDIpID0gY3B1X3RvX2JlMTYodGFnKTsKKwltZW1jcHkoYnVmX29hZiArIDQsIHRhc2stPmRldi0+c2FzX2FkZHIsIFNBU19BRERSX1NJWkUpOworCisJLyogZmlsbCBpbiBQUkQgKHNjYXR0ZXIvZ2F0aGVyKSB0YWJsZSwgaWYgYW55ICovCisJZm9yX2VhY2hfc2codGFzay0+c2NhdHRlciwgc2csIHRlaS0+bl9lbGVtLCBpKSB7CisJCWJ1Zl9wcmQtPmFkZHIgPSBjcHVfdG9fbGU2NChzZ19kbWFfYWRkcmVzcyhzZykpOworCQlidWZfcHJkLT5sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7CisJCWJ1Zl9wcmQrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdnNfdGFza19wcmVwX3NzcChzdHJ1Y3QgbXZzX2luZm8gKm12aSwKKwkJCSAgICAgc3RydWN0IG12c190YXNrX2V4ZWNfaW5mbyAqdGVpKQoreworCXN0cnVjdCBzYXNfdGFzayAqdGFzayA9IHRlaS0+dGFzazsKKwlzdHJ1Y3QgbXZzX2NtZF9oZHIgKmhkciA9IHRlaS0+aGRyOworCXN0cnVjdCBtdnNfcG9ydCAqcG9ydCA9IHRlaS0+cG9ydDsKKwlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqc2xvdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBtdnNfcHJkICpidWZfcHJkOworCXN0cnVjdCBzc3BfZnJhbWVfaGRyICpzc3BfaGRyOworCXZvaWQgKmJ1Zl90bXA7CisJdTggKmJ1Zl9jbWQsICpidWZfb2FmLCBmYnVyc3QgPSAwOworCWRtYV9hZGRyX3QgYnVmX3RtcF9kbWE7CisJdTMyIGZsYWdzOworCXUzMiByZXNwX2xlbiwgcmVxX2xlbiwgaSwgdGFnID0gdGVpLT50YWc7CisJY29uc3QgdTMyIG1heF9yZXNwX2xlbiA9IFNCX1JGQl9NQVg7CisJdTggcGh5X21hc2s7CisKKwlzbG90ID0gJm12aS0+c2xvdF9pbmZvW3RhZ107CisKKwlwaHlfbWFzayA9IChwb3J0LT53aWRlX3BvcnRfcGh5bWFwKSA/IHBvcnQtPndpZGVfcG9ydF9waHltYXAgOgorCQl0YXNrLT5kZXYtPnBvcnQtPnBoeV9tYXNrOworCXNsb3QtPnR4ID0gbXZpLT50eF9wcm9kOworCW12aS0+dHhbbXZpLT50eF9wcm9kXSA9IGNwdV90b19sZTMyKFRYUV9NT0RFX0kgfCB0YWcgfAorCQkJCShUWFFfQ01EX1NTUCA8PCBUWFFfQ01EX1NISUZUKSB8CisJCQkJKHBoeV9tYXNrIDw8IFRYUV9QSFlfU0hJRlQpKTsKKworCWZsYWdzID0gTUNIX1JFVFJZOworCWlmICh0YXNrLT5zc3BfdGFzay5lbmFibGVfZmlyc3RfYnVyc3QpIHsKKwkJZmxhZ3MgfD0gTUNIX0ZCVVJTVDsKKwkJZmJ1cnN0ID0gKDEgPDwgNyk7CisJfQorCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyB8CisJCQkJICh0ZWktPm5fZWxlbSA8PCBNQ0hfUFJEX0xFTl9TSElGVCkgfAorCQkJCSAoTUNIX1NTUF9GUl9DTUQgPDwgTUNIX1NTUF9GUl9UWVBFX1NISUZUKSk7CisKKwloZHItPnRhZ3MgPSBjcHVfdG9fbGUzMih0YWcpOworCWhkci0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMih0YXNrLT50b3RhbF94ZmVyX2xlbik7CisKKwkvKgorCSAqIGFycmFuZ2UgTVZTX1NMT1RfQlVGX1NaLXNpemVkIERNQSBidWZmZXIgYWNjb3JkaW5nIHRvIG91ciBuZWVkcworCSAqLworCisJLyogcmVnaW9uIDE6IGNvbW1hbmQgdGFibGUgYXJlYSAoTVZTX1NTUF9DTURfU1ogYnl0ZXMpICoqKioqKioqKioqKioqICovCisJYnVmX2NtZCA9IGJ1Zl90bXAgPSBzbG90LT5idWY7CisJYnVmX3RtcF9kbWEgPSBzbG90LT5idWZfZG1hOworCisJaGRyLT5jbWRfdGJsID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCisJYnVmX3RtcCArPSBNVlNfU1NQX0NNRF9TWjsKKwlidWZfdG1wX2RtYSArPSBNVlNfU1NQX0NNRF9TWjsKKyNpZiBfTVZfRFVNUAorCXNsb3QtPmNtZF9zaXplID0gTVZTX1NTUF9DTURfU1o7CisjZW5kaWYKKworCS8qIHJlZ2lvbiAyOiBvcGVuIGFkZHJlc3MgZnJhbWUgYXJlYSAoTVZTX09BRl9TWiBieXRlcykgKioqKioqKioqICovCisJYnVmX29hZiA9IGJ1Zl90bXA7CisJaGRyLT5vcGVuX2ZyYW1lID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCisJYnVmX3RtcCArPSBNVlNfT0FGX1NaOworCWJ1Zl90bXBfZG1hICs9IE1WU19PQUZfU1o7CisKKwkvKiByZWdpb24gMzogUFJEIHRhYmxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWJ1Zl9wcmQgPSBidWZfdG1wOworCWlmICh0ZWktPm5fZWxlbSkKKwkJaGRyLT5wcmRfdGJsID0gY3B1X3RvX2xlNjQoYnVmX3RtcF9kbWEpOworCWVsc2UKKwkJaGRyLT5wcmRfdGJsID0gMDsKKworCWkgPSBzaXplb2Yoc3RydWN0IG12c19wcmQpICogdGVpLT5uX2VsZW07CisJYnVmX3RtcCArPSBpOworCWJ1Zl90bXBfZG1hICs9IGk7CisKKwkvKiByZWdpb24gNDogc3RhdHVzIGJ1ZmZlciAobGFyZ2VyIHRoZSBQUkQsIHNtYWxsZXIgdGhpcyBidWYpICoqKioqKiAqLworCXNsb3QtPnJlc3BvbnNlID0gYnVmX3RtcDsKKwloZHItPnN0YXR1c19idWYgPSBjcHVfdG9fbGU2NChidWZfdG1wX2RtYSk7CisKKwlyZXNwX2xlbiA9IE1WU19TTE9UX0JVRl9TWiAtIE1WU19TU1BfQ01EX1NaIC0gTVZTX09BRl9TWiAtCisJICAgIHNpemVvZihzdHJ1Y3QgbXZzX2Vycl9pbmZvKSAtIGk7CisJcmVzcF9sZW4gPSBtaW4ocmVzcF9sZW4sIG1heF9yZXNwX2xlbik7CisKKwlyZXFfbGVuID0gc2l6ZW9mKHN0cnVjdCBzc3BfZnJhbWVfaGRyKSArIDI4OworCisJLyogcmVxdWVzdCwgcmVzcG9uc2UgbGVuZ3RocyAqLworCWhkci0+bGVucyA9IGNwdV90b19sZTMyKCgocmVzcF9sZW4gLyA0KSA8PCAxNikgfCAocmVxX2xlbiAvIDQpKTsKKworCS8qIGdlbmVyYXRlIG9wZW4gYWRkcmVzcyBmcmFtZSBoZHIgKGZpcnN0IDEyIGJ5dGVzKSAqLworCWJ1Zl9vYWZbMF0gPSAoMSA8PCA3KSB8ICgxIDw8IDQpIHwgMHgxOwkvKiBpbml0aWF0b3IsIFNTUCwgZnR5cGUgMWggKi8KKwlidWZfb2FmWzFdID0gdGFzay0+ZGV2LT5saW5rcmF0ZSAmIDB4ZjsKKwkqKHUxNiAqKShidWZfb2FmICsgMikgPSBjcHVfdG9fYmUxNih0YWcpOworCW1lbWNweShidWZfb2FmICsgNCwgdGFzay0+ZGV2LT5zYXNfYWRkciwgU0FTX0FERFJfU0laRSk7CisKKwkvKiBmaWxsIGluIFNTUCBmcmFtZSBoZWFkZXIgKENvbW1hbmQgVGFibGUuU1NQIGZyYW1lIGhlYWRlcikgKi8KKwlzc3BfaGRyID0gKHN0cnVjdCBzc3BfZnJhbWVfaGRyICopYnVmX2NtZDsKKwlzc3BfaGRyLT5mcmFtZV90eXBlID0gU1NQX0NPTU1BTkQ7CisJbWVtY3B5KHNzcF9oZHItPmhhc2hlZF9kZXN0X2FkZHIsIHRhc2stPmRldi0+aGFzaGVkX3Nhc19hZGRyLAorCSAgICAgICBIQVNIRURfU0FTX0FERFJfU0laRSk7CisJbWVtY3B5KHNzcF9oZHItPmhhc2hlZF9zcmNfYWRkciwKKwkgICAgICAgdGFzay0+ZGV2LT5wb3J0LT5oYS0+aGFzaGVkX3Nhc19hZGRyLCBIQVNIRURfU0FTX0FERFJfU0laRSk7CisJc3NwX2hkci0+dGFnID0gY3B1X3RvX2JlMTYodGFnKTsKKworCS8qIGZpbGwgaW4gY29tbWFuZCBmcmFtZSBJVSAqLworCWJ1Zl9jbWQgKz0gc2l6ZW9mKCpzc3BfaGRyKTsKKwltZW1jcHkoYnVmX2NtZCwgJnRhc2stPnNzcF90YXNrLkxVTiwgOCk7CisJYnVmX2NtZFs5XSA9IGZidXJzdCB8IHRhc2stPnNzcF90YXNrLnRhc2tfYXR0ciB8CisJCQkodGFzay0+c3NwX3Rhc2sudGFza19wcmlvIDw8IDMpOworCW1lbWNweShidWZfY21kICsgMTIsICZ0YXNrLT5zc3BfdGFzay5jZGIsIDE2KTsKKworCS8qIGZpbGwgaW4gUFJEIChzY2F0dGVyL2dhdGhlcikgdGFibGUsIGlmIGFueSAqLworCWZvcl9lYWNoX3NnKHRhc2stPnNjYXR0ZXIsIHNnLCB0ZWktPm5fZWxlbSwgaSkgeworCQlidWZfcHJkLT5hZGRyID0gY3B1X3RvX2xlNjQoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJYnVmX3ByZC0+bGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQlidWZfcHJkKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXZzX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gdGFzay0+ZGV2OworCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gZGV2LT5wb3J0LT5oYS0+bGxkZF9oYTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG12aS0+cGRldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBtdmktPnJlZ3M7CisJc3RydWN0IG12c190YXNrX2V4ZWNfaW5mbyB0ZWk7CisJc3RydWN0IHNhc190YXNrICp0ID0gdGFzazsKKwlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqc2xvdDsKKwl1MzIgdGFnID0gMHhkZWFkYmVlZiwgcmMsIG5fZWxlbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbiA9IG51bSwgcGFzcyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7CisJZG8geworCQlkZXYgPSB0LT5kZXY7CisJCXRlaS5wb3J0ID0gJm12aS0+cG9ydFtkZXYtPnBvcnQtPmlkXTsKKworCQlpZiAoIXRlaS5wb3J0LT5wb3J0X2F0dGFjaGVkKSB7CisJCQlpZiAoc2FzX3Byb3RvY29sX2F0YSh0LT50YXNrX3Byb3RvKSkgeworCQkJCXJjID0gU0FTX1BIWV9ET1dOOworCQkJCWdvdG8gb3V0X2RvbmU7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOworCQkJCXRzLT5yZXNwID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7CisJCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CisJCQkJdC0+dGFza19kb25lKHQpOworCQkJCWlmIChuID4gMSkKKwkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAorCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoIXNhc19wcm90b2NvbF9hdGEodC0+dGFza19wcm90bykpIHsKKwkJCWlmICh0LT5udW1fc2NhdHRlcikgeworCQkJCW5fZWxlbSA9IHBjaV9tYXBfc2cobXZpLT5wZGV2LCB0LT5zY2F0dGVyLAorCQkJCQkJICAgIHQtPm51bV9zY2F0dGVyLAorCQkJCQkJICAgIHQtPmRhdGFfZGlyKTsKKwkJCQlpZiAoIW5fZWxlbSkgeworCQkJCQlyYyA9IC1FTk9NRU07CisJCQkJCWdvdG8gZXJyX291dDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQluX2VsZW0gPSB0LT5udW1fc2NhdHRlcjsKKwkJfQorCisJCXJjID0gbXZzX3RhZ19hbGxvYyhtdmksICZ0YWcpOworCQlpZiAocmMpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJc2xvdCA9ICZtdmktPnNsb3RfaW5mb1t0YWddOworCQl0LT5sbGRkX3Rhc2sgPSBOVUxMOworCQlzbG90LT5uX2VsZW0gPSBuX2VsZW07CisJCW1lbXNldChzbG90LT5idWYsIDAsIE1WU19TTE9UX0JVRl9TWik7CisJCXRlaS50YXNrID0gdDsKKwkJdGVpLmhkciA9ICZtdmktPnNsb3RbdGFnXTsKKwkJdGVpLnRhZyA9IHRhZzsKKwkJdGVpLm5fZWxlbSA9IG5fZWxlbTsKKworCQlzd2l0Y2ggKHQtPnRhc2tfcHJvdG8pIHsKKwkJY2FzZSBTQVNfUFJPVE9DT0xfU01QOgorCQkJcmMgPSBtdnNfdGFza19wcmVwX3NtcChtdmksICZ0ZWkpOworCQkJYnJlYWs7CisJCWNhc2UgU0FTX1BST1RPQ09MX1NTUDoKKwkJCXJjID0gbXZzX3Rhc2tfcHJlcF9zc3AobXZpLCAmdGVpKTsKKwkJCWJyZWFrOworCQljYXNlIFNBU19QUk9UT0NPTF9TQVRBOgorCQljYXNlIFNBU19QUk9UT0NPTF9TVFA6CisJCWNhc2UgU0FTX1BST1RPQ09MX1NBVEEgfCBTQVNfUFJPVE9DT0xfU1RQOgorCQkJcmMgPSBtdnNfdGFza19wcmVwX2F0YShtdmksICZ0ZWkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJCSJ1bmtub3duIHNhc190YXNrIHByb3RvOiAweCV4XG4iLAorCQkJCXQtPnRhc2tfcHJvdG8pOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmMpCisJCQlnb3RvIGVycl9vdXRfdGFnOworCisJCXNsb3QtPnRhc2sgPSB0OworCQlzbG90LT5wb3J0ID0gdGVpLnBvcnQ7CisJCXQtPmxsZGRfdGFzayA9ICh2b2lkICopIHNsb3Q7CisJCWxpc3RfYWRkX3RhaWwoJnNsb3QtPmxpc3QsICZzbG90LT5wb3J0LT5saXN0KTsKKwkJLyogVE9ETzogc2VsZWN0IG5vcm1hbCBvciBoaWdoIHByaW9yaXR5ICovCisKKwkJc3Bpbl9sb2NrKCZ0LT50YXNrX3N0YXRlX2xvY2spOworCQl0LT50YXNrX3N0YXRlX2ZsYWdzIHw9IFNBU19UQVNLX0FUX0lOSVRJQVRPUjsKKwkJc3Bpbl91bmxvY2soJnQtPnRhc2tfc3RhdGVfbG9jayk7CisKKwkJbXZzX2hiYV9tZW1vcnlfZHVtcChtdmksIHRhZywgdC0+dGFza19wcm90byk7CisKKwkJKytwYXNzOworCQltdmktPnR4X3Byb2QgPSAobXZpLT50eF9wcm9kICsgMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpOworCQlpZiAobiA+IDEpCisJCQl0ID0gbGlzdF9lbnRyeSh0LT5saXN0Lm5leHQsIHN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CisJfSB3aGlsZSAoLS1uKTsKKworCXJjID0gMDsKKwlnb3RvIG91dF9kb25lOworCitlcnJfb3V0X3RhZzoKKwltdnNfdGFnX2ZyZWUobXZpLCB0YWcpOworZXJyX291dDoKKwlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LCAibXZzYXMgZXhlYyBmYWlsZWRbJWRdIVxuIiwgcmMpOworCWlmICghc2FzX3Byb3RvY29sX2F0YSh0LT50YXNrX3Byb3RvKSkKKwkJaWYgKG5fZWxlbSkKKwkJCXBjaV91bm1hcF9zZyhtdmktPnBkZXYsIHQtPnNjYXR0ZXIsIG5fZWxlbSwKKwkJCQkgICAgIHQtPmRhdGFfZGlyKTsKK291dF9kb25lOgorCWlmIChwYXNzKQorCQltdzMyKFRYX1BST0RfSURYLCAobXZpLT50eF9wcm9kIC0gMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdmktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXZzX3Rhc2tfYWJvcnQoc3RydWN0IHNhc190YXNrICp0YXNrKQoreworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gdGFzay0+ZGV2LT5wb3J0LT5oYS0+bGxkZF9oYTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG12aS0+cGRldjsKKwlpbnQgdGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOworCWlmICh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfRE9ORSkgeworCQlyYyA9IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOworCQlnb3RvIG91dF9kb25lOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAodGFzay0+dGFza19wcm90bykgeworCWNhc2UgU0FTX1BST1RPQ09MX1NNUDoKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiU01QIEFib3J0ISBcbiIpOworCQlicmVhazsKKwljYXNlIFNBU19QUk9UT0NPTF9TU1A6CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgIlNTUCBBYm9ydCEgXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQToKKwljYXNlIFNBU19QUk9UT0NPTF9TVFA6CisJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQSB8IFNBU19QUk9UT0NPTF9TVFA6eworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJTVFAgQWJvcnQhIFxuIik7CisjaWYgX01WX0RVTVAKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiRHVtcCBEMkggRklTOiBcbiIpOworCQltdnNfaGV4ZHVtcChzaXplb2Yoc3RydWN0IGhvc3RfdG9fZGV2X2ZpcyksCisJCQkJKHZvaWQgKikmdGFzay0+YXRhX3Rhc2suZmlzLCAwKTsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiRHVtcCBBVEFQSSBDbWQgOiBcbiIpOworCQltdnNfaGV4ZHVtcCgxNiwgdGFzay0+YXRhX3Rhc2suYXRhcGlfcGFja2V0LCAwKTsKKyNlbmRpZgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CisJCWlmICh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfTkVFRF9ERVZfUkVTRVQpIHsKKwkJCS8qIFRPRE8gKi8KKwkJCTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChtdnNfZmluZF90YWcobXZpLCB0YXNrLCAmdGFnKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7CisJCW12c19zbG90X3Rhc2tfZnJlZShtdmksIHRhc2ssICZtdmktPnNsb3RfaW5mb1t0YWddLCB0YWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdmktPmxvY2ssIGZsYWdzKTsKKwl9CisJaWYgKCFtdnNfdGFza19leGVjKHRhc2ssIDEsIEdGUF9BVE9NSUMpKQorCQlyYyA9IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU7CisJZWxzZQorCQlyYyA9IFRNRl9SRVNQX0ZVTkNfRkFJTEVEOworb3V0X2RvbmU6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtdnNfZnJlZShzdHJ1Y3QgbXZzX2luZm8gKm12aSkKK3sKKwlpbnQgaTsKKworCWlmICghbXZpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgTVZTX1NMT1RTOyBpKyspIHsKKwkJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9baV07CisKKwkJaWYgKHNsb3QtPmJ1ZikKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZtdmktPnBkZXYtPmRldiwgTVZTX1NMT1RfQlVGX1NaLAorCQkJCQkgIHNsb3QtPmJ1Ziwgc2xvdC0+YnVmX2RtYSk7CisJfQorCisJaWYgKG12aS0+dHgpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZtdmktPnBkZXYtPmRldiwKKwkJCQkgIHNpemVvZigqbXZpLT50eCkgKiBNVlNfQ0hJUF9TTE9UX1NaLAorCQkJCSAgbXZpLT50eCwgbXZpLT50eF9kbWEpOworCWlmIChtdmktPnJ4X2ZpcykKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJm12aS0+cGRldi0+ZGV2LCBNVlNfUlhfRklTTF9TWiwKKwkJCQkgIG12aS0+cnhfZmlzLCBtdmktPnJ4X2Zpc19kbWEpOworCWlmIChtdmktPnJ4KQorCQlkbWFfZnJlZV9jb2hlcmVudCgmbXZpLT5wZGV2LT5kZXYsCisJCQkJICBzaXplb2YoKm12aS0+cngpICogKE1WU19SWF9SSU5HX1NaICsgMSksCisJCQkJICBtdmktPnJ4LCBtdmktPnJ4X2RtYSk7CisJaWYgKG12aS0+c2xvdCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJm12aS0+cGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKCptdmktPnNsb3QpICogTVZTX1NMT1RTLAorCQkJCSAgbXZpLT5zbG90LCBtdmktPnNsb3RfZG1hKTsKKyNpZmRlZiBNVlNfRU5BQkxFX1BFUkkKKwlpZiAobXZpLT5wZXJpX3JlZ3MpCisJCWlvdW5tYXAobXZpLT5wZXJpX3JlZ3MpOworI2VuZGlmCisJaWYgKG12aS0+cmVncykKKwkJaW91bm1hcChtdmktPnJlZ3MpOworCWlmIChtdmktPnNob3N0KQorCQlzY3NpX2hvc3RfcHV0KG12aS0+c2hvc3QpOworCWtmcmVlKG12aS0+c2FzLnNhc19wb3J0KTsKKwlrZnJlZShtdmktPnNhcy5zYXNfcGh5KTsKKwlrZnJlZShtdmkpOworfQorCisvKiBGSVhNRTogbG9ja2luZz8gKi8KK3N0YXRpYyBpbnQgbXZzX3BoeV9jb250cm9sKHN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSwgZW51bSBwaHlfZnVuYyBmdW5jLAorCQkJICAgdm9pZCAqZnVuY2RhdGEpCit7CisJc3RydWN0IG12c19pbmZvICptdmkgPSBzYXNfcGh5LT5oYS0+bGxkZF9oYTsKKwlpbnQgcmMgPSAwLCBwaHlfaWQgPSBzYXNfcGh5LT5pZDsKKwl1MzIgdG1wOworCisJdG1wID0gbXZzX3JlYWRfcGh5X2N0bChtdmksIHBoeV9pZCk7CisKKwlzd2l0Y2ggKGZ1bmMpIHsKKwljYXNlIFBIWV9GVU5DX1NFVF9MSU5LX1JBVEU6eworCQkJc3RydWN0IHNhc19waHlfbGlua3JhdGVzICpyYXRlcyA9IGZ1bmNkYXRhOworCQkJdTMyIGxybWluID0gMCwgbHJtYXggPSAwOworCisJCQlscm1pbiA9IChyYXRlcy0+bWluaW11bV9saW5rcmF0ZSA8PCA4KTsKKwkJCWxybWF4ID0gKHJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlIDw8IDEyKTsKKworCQkJaWYgKGxybWluKSB7CisJCQkJdG1wICY9IH4oMHhmIDw8IDgpOworCQkJCXRtcCB8PSBscm1pbjsKKwkJCX0KKwkJCWlmIChscm1heCkgeworCQkJCXRtcCAmPSB+KDB4ZiA8PCAxMik7CisJCQkJdG1wIHw9IGxybWF4OworCQkJfQorCQkJbXZzX3dyaXRlX3BoeV9jdGwobXZpLCBwaHlfaWQsIHRtcCk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBQSFlfRlVOQ19IQVJEX1JFU0VUOgorCQlpZiAodG1wICYgUEhZX1JTVF9IQVJEKQorCQkJYnJlYWs7CisJCW12c193cml0ZV9waHlfY3RsKG12aSwgcGh5X2lkLCB0bXAgfCBQSFlfUlNUX0hBUkQpOworCQlicmVhazsKKworCWNhc2UgUEhZX0ZVTkNfTElOS19SRVNFVDoKKwkJbXZzX3dyaXRlX3BoeV9jdGwobXZpLCBwaHlfaWQsIHRtcCB8IFBIWV9SU1QpOworCQlicmVhazsKKworCWNhc2UgUEhZX0ZVTkNfRElTQUJMRToKKwljYXNlIFBIWV9GVU5DX1JFTEVBU0VfU1BJTlVQX0hPTEQ6CisJZGVmYXVsdDoKKwkJcmMgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBtdnNfcGh5X2luaXQoc3RydWN0IG12c19pbmZvICptdmksIGludCBwaHlfaWQpCit7CisJc3RydWN0IG12c19waHkgKnBoeSA9ICZtdmktPnBoeVtwaHlfaWRdOworCXN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSA9ICZwaHktPnNhc19waHk7CisKKwlzYXNfcGh5LT5lbmFibGVkID0gKHBoeV9pZCA8IG12aS0+Y2hpcC0+bl9waHkpID8gMSA6IDA7CisJc2FzX3BoeS0+Y2xhc3MgPSBTQVM7CisJc2FzX3BoeS0+aXByb3RvID0gU0FTX1BST1RPQ09MX0FMTDsKKwlzYXNfcGh5LT50cHJvdG8gPSAwOworCXNhc19waHktPnR5cGUgPSBQSFlfVFlQRV9QSFlTSUNBTDsKKwlzYXNfcGh5LT5yb2xlID0gUEhZX1JPTEVfSU5JVElBVE9SOworCXNhc19waHktPm9vYl9tb2RlID0gT09CX05PVF9DT05ORUNURUQ7CisJc2FzX3BoeS0+bGlua3JhdGUgPSBTQVNfTElOS19SQVRFX1VOS05PV047CisKKwlzYXNfcGh5LT5pZCA9IHBoeV9pZDsKKwlzYXNfcGh5LT5zYXNfYWRkciA9ICZtdmktPnNhc19hZGRyWzBdOworCXNhc19waHktPmZyYW1lX3JjdmQgPSAmcGh5LT5mcmFtZV9yY3ZkWzBdOworCXNhc19waHktPmhhID0gJm12aS0+c2FzOworCXNhc19waHktPmxsZGRfcGh5ID0gcGh5OworfQorCitzdGF0aWMgc3RydWN0IG12c19pbmZvICpfX2RldmluaXQgbXZzX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbXZzX2luZm8gKm12aTsKKwl1bnNpZ25lZCBsb25nIHJlc19zdGFydCwgcmVzX2xlbiwgcmVzX2ZsYWc7CisJc3RydWN0IGFzZF9zYXNfcGh5ICoqYXJyX3BoeTsKKwlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICoqYXJyX3BvcnQ7CisJY29uc3Qgc3RydWN0IG12c19jaGlwX2luZm8gKmNoaXAgPSAmbXZzX2NoaXBzW2VudC0+ZHJpdmVyX2RhdGFdOworCWludCBpOworCisJLyoKKwkgKiBhbGxvYyBhbmQgaW5pdCBvdXIgcGVyLUhCQSBtdnNfaW5mbyBzdHJ1Y3QKKwkgKi8KKworCW12aSA9IGt6YWxsb2Moc2l6ZW9mKCptdmkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW12aSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2tfaW5pdCgmbXZpLT5sb2NrKTsKKyNpZmRlZiBNVlNfVVNFX1RBU0tMRVQKKwl0YXNrbGV0X2luaXQoJm12aS0+dGFza2xldCwgbXZzX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKW12aSk7CisjZW5kaWYKKwltdmktPnBkZXYgPSBwZGV2OworCW12aS0+Y2hpcCA9IGNoaXA7CisKKwlpZiAocGRldi0+ZGV2aWNlID09IDB4NjQ0MCAmJiBwZGV2LT5yZXZpc2lvbiA9PSAwKQorCQltdmktPmZsYWdzIHw9IE1WRl9QSFlfUFdSX0ZJWDsKKworCS8qCisJICogYWxsb2MgYW5kIGluaXQgU0NTSSwgU0FTIGdsdWUKKwkgKi8KKworCW12aS0+c2hvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJm12c19zaHQsIHNpemVvZih2b2lkICopKTsKKwlpZiAoIW12aS0+c2hvc3QpCisJCWdvdG8gZXJyX291dDsKKworCWFycl9waHkgPSBrY2FsbG9jKE1WU19NQVhfUEhZUywgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOworCWFycl9wb3J0ID0ga2NhbGxvYyhNVlNfTUFYX1BIWVMsIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFycl9waHkgfHwgIWFycl9wb3J0KQorCQlnb3RvIGVycl9vdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVZTX01BWF9QSFlTOyBpKyspIHsKKwkJbXZzX3BoeV9pbml0KG12aSwgaSk7CisJCWFycl9waHlbaV0gPSAmbXZpLT5waHlbaV0uc2FzX3BoeTsKKwkJYXJyX3BvcnRbaV0gPSAmbXZpLT5wb3J0W2ldLnNhc19wb3J0OworCQltdmktPnBvcnRbaV0udGFza2ZpbGVzZXQgPSBNVlNfSURfTk9UX01BUFBFRDsKKwkJbXZpLT5wb3J0W2ldLndpZGVfcG9ydF9waHltYXAgPSAwOworCQltdmktPnBvcnRbaV0ucG9ydF9hdHRhY2hlZCA9IDA7CisJCUlOSVRfTElTVF9IRUFEKCZtdmktPnBvcnRbaV0ubGlzdCk7CisJfQorCisJU0hPU1RfVE9fU0FTX0hBKG12aS0+c2hvc3QpID0gJm12aS0+c2FzOworCW12aS0+c2hvc3QtPnRyYW5zcG9ydHQgPSBtdnNfc3R0OworCW12aS0+c2hvc3QtPm1heF9pZCA9IDIxOworCW12aS0+c2hvc3QtPm1heF9sdW4gPSB+MDsKKwltdmktPnNob3N0LT5tYXhfY2hhbm5lbCA9IDA7CisJbXZpLT5zaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKKworCW12aS0+c2FzLnNhc19oYV9uYW1lID0gRFJWX05BTUU7CisJbXZpLT5zYXMuZGV2ID0gJnBkZXYtPmRldjsKKwltdmktPnNhcy5sbGRkX21vZHVsZSA9IFRISVNfTU9EVUxFOworCW12aS0+c2FzLnNhc19hZGRyID0gJm12aS0+c2FzX2FkZHJbMF07CisJbXZpLT5zYXMuc2FzX3BoeSA9IGFycl9waHk7CisJbXZpLT5zYXMuc2FzX3BvcnQgPSBhcnJfcG9ydDsKKwltdmktPnNhcy5udW1fcGh5cyA9IGNoaXAtPm5fcGh5OworCW12aS0+c2FzLmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gMTsKKwltdmktPnNhcy5sbGRkX3F1ZXVlX3NpemUgPSBNVlNfUVVFVUVfU0laRTsKKwltdmktPnNob3N0LT5jYW5fcXVldWUgPSBNVlNfQ0FOX1FVRVVFOworCW12aS0+c2hvc3QtPmNtZF9wZXJfbHVuID0gTVZTX1NMT1RTIC8gbXZpLT5zYXMubnVtX3BoeXM7CisJbXZpLT5zYXMubGxkZF9oYSA9IG12aTsKKwltdmktPnNhcy5jb3JlLnNob3N0ID0gbXZpLT5zaG9zdDsKKworCW12c190YWdfaW5pdChtdmkpOworCisJLyoKKwkgKiBpb3JlbWFwIG1haW4gYW5kIHBlcmlwaGVyYWwgcmVnaXN0ZXJzCisJICovCisKKyNpZmRlZiBNVlNfRU5BQkxFX1BFUkkKKwlyZXNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CisJcmVzX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CisJaWYgKCFyZXNfc3RhcnQgfHwgIXJlc19sZW4pCisJCWdvdG8gZXJyX291dDsKKworCW12aS0+cGVyaV9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHJlc19zdGFydCwgcmVzX2xlbik7CisJaWYgKCFtdmktPnBlcmlfcmVncykKKwkJZ290byBlcnJfb3V0OworI2VuZGlmCisKKwlyZXNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCk7CisJcmVzX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCk7CisJaWYgKCFyZXNfc3RhcnQgfHwgIXJlc19sZW4pCisJCWdvdG8gZXJyX291dDsKKworCXJlc19mbGFnID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDQpOworCWlmIChyZXNfZmxhZyAmIElPUkVTT1VSQ0VfQ0FDSEVBQkxFKQorCQltdmktPnJlZ3MgPSBpb3JlbWFwKHJlc19zdGFydCwgcmVzX2xlbik7CisJZWxzZQorCQltdmktPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUocmVzX3N0YXJ0LCByZXNfbGVuKTsKKworCWlmICghbXZpLT5yZWdzKQorCQlnb3RvIGVycl9vdXQ7CisKKwkvKgorCSAqIGFsbG9jIGFuZCBpbml0IG91ciBETUEgYXJlYXMKKwkgKi8KKworCW12aS0+dHggPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKKwkJCQkgICAgIHNpemVvZigqbXZpLT50eCkgKiBNVlNfQ0hJUF9TTE9UX1NaLAorCQkJCSAgICAgJm12aS0+dHhfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW12aS0+dHgpCisJCWdvdG8gZXJyX291dDsKKwltZW1zZXQobXZpLT50eCwgMCwgc2l6ZW9mKCptdmktPnR4KSAqIE1WU19DSElQX1NMT1RfU1opOworCisJbXZpLT5yeF9maXMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgTVZTX1JYX0ZJU0xfU1osCisJCQkJCSAmbXZpLT5yeF9maXNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW12aS0+cnhfZmlzKQorCQlnb3RvIGVycl9vdXQ7CisJbWVtc2V0KG12aS0+cnhfZmlzLCAwLCBNVlNfUlhfRklTTF9TWik7CisKKwltdmktPnJ4ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCisJCQkJICAgICBzaXplb2YoKm12aS0+cngpICogKE1WU19SWF9SSU5HX1NaICsgMSksCisJCQkJICAgICAmbXZpLT5yeF9kbWEsIEdGUF9LRVJORUwpOworCWlmICghbXZpLT5yeCkKKwkJZ290byBlcnJfb3V0OworCW1lbXNldChtdmktPnJ4LCAwLCBzaXplb2YoKm12aS0+cngpICogKE1WU19SWF9SSU5HX1NaICsgMSkpOworCisJbXZpLT5yeFswXSA9IGNwdV90b19sZTMyKDB4ZmZmKTsKKwltdmktPnJ4X2NvbnMgPSAweGZmZjsKKworCW12aS0+c2xvdCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCSAgICAgICBzaXplb2YoKm12aS0+c2xvdCkgKiBNVlNfU0xPVFMsCisJCQkJICAgICAgICZtdmktPnNsb3RfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW12aS0+c2xvdCkKKwkJZ290byBlcnJfb3V0OworCW1lbXNldChtdmktPnNsb3QsIDAsIHNpemVvZigqbXZpLT5zbG90KSAqIE1WU19TTE9UUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVZTX1NMT1RTOyBpKyspIHsKKwkJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9baV07CisKKwkJc2xvdC0+YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIE1WU19TTE9UX0JVRl9TWiwKKwkJCQkJICAgICAgICZzbG90LT5idWZfZG1hLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzbG90LT5idWYpCisJCQlnb3RvIGVycl9vdXQ7CisJCW1lbXNldChzbG90LT5idWYsIDAsIE1WU19TTE9UX0JVRl9TWik7CisJfQorCisJLyogZmluYWxseSwgcmVhZCBOVlJBTSB0byBnZXQgb3VyIFNBUyBhZGRyZXNzICovCisJaWYgKG12c19udnJhbV9yZWFkKG12aSwgTlZSX1NBU19BRERSLCAmbXZpLT5zYXNfYWRkciwgOCkpCisJCWdvdG8gZXJyX291dDsKKwlyZXR1cm4gbXZpOworCitlcnJfb3V0OgorCW12c19mcmVlKG12aSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1MzIgbXZzX2NyMzIodm9pZCBfX2lvbWVtICpyZWdzLCB1MzIgYWRkcikKK3sKKwltdzMyKENNRF9BRERSLCBhZGRyKTsKKwlyZXR1cm4gbXIzMihDTURfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIG12c19jdzMyKHZvaWQgX19pb21lbSAqcmVncywgdTMyIGFkZHIsIHUzMiB2YWwpCit7CisJbXczMihDTURfQUREUiwgYWRkcik7CisJbXczMihDTURfREFUQSwgdmFsKTsKK30KKworc3RhdGljIHUzMiBtdnNfcmVhZF9waHlfY3RsKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcG9ydCkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBtdmktPnJlZ3M7CisJcmV0dXJuIChwb3J0IDwgNCk/bXIzMihQMF9TRVJfQ1RMU1RBVCArIHBvcnQgKiA0KToKKwkJbXIzMihQNF9TRVJfQ1RMU1RBVCArIChwb3J0IC0gNCkgKiA0KTsKK30KKworc3RhdGljIHZvaWQgbXZzX3dyaXRlX3BoeV9jdGwoc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwb3J0LCB1MzIgdmFsKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwlpZiAocG9ydCA8IDQpCisJCW13MzIoUDBfU0VSX0NUTFNUQVQgKyBwb3J0ICogNCwgdmFsKTsKKwllbHNlCisJCW13MzIoUDRfU0VSX0NUTFNUQVQgKyAocG9ydCAtIDQpICogNCwgdmFsKTsKK30KKworc3RhdGljIHUzMiBtdnNfcmVhZF9wb3J0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgb2ZmLCB1MzIgb2ZmMiwgdTMyIHBvcnQpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzICsgb2ZmOworCXZvaWQgX19pb21lbSAqcmVnczIgPSBtdmktPnJlZ3MgKyBvZmYyOworCXJldHVybiAocG9ydCA8IDQpP3JlYWRsKHJlZ3MgKyBwb3J0ICogOCk6CisJCXJlYWRsKHJlZ3MyICsgKHBvcnQgLSA0KSAqIDgpOworfQorCitzdGF0aWMgdm9pZCBtdnNfd3JpdGVfcG9ydChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIG9mZiwgdTMyIG9mZjIsCisJCQkJdTMyIHBvcnQsIHUzMiB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzICsgb2ZmOworCXZvaWQgX19pb21lbSAqcmVnczIgPSBtdmktPnJlZ3MgKyBvZmYyOworCWlmIChwb3J0IDwgNCkKKwkJd3JpdGVsKHZhbCwgcmVncyArIHBvcnQgKiA4KTsKKwllbHNlCisJCXdyaXRlbCh2YWwsIHJlZ3MyICsgKHBvcnQgLSA0KSAqIDgpOworfQorCitzdGF0aWMgdTMyIG12c19yZWFkX3BvcnRfY2ZnX2RhdGEoc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwb3J0KQoreworCXJldHVybiBtdnNfcmVhZF9wb3J0KG12aSwgTVZTX1AwX0NGR19EQVRBLCBNVlNfUDRfQ0ZHX0RBVEEsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBtdnNfd3JpdGVfcG9ydF9jZmdfZGF0YShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHBvcnQsIHUzMiB2YWwpCit7CisJbXZzX3dyaXRlX3BvcnQobXZpLCBNVlNfUDBfQ0ZHX0RBVEEsIE1WU19QNF9DRkdfREFUQSwgcG9ydCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIoc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwb3J0LCB1MzIgYWRkcikKK3sKKwltdnNfd3JpdGVfcG9ydChtdmksIE1WU19QMF9DRkdfQUREUiwgTVZTX1A0X0NGR19BRERSLCBwb3J0LCBhZGRyKTsKK30KKworc3RhdGljIHUzMiBtdnNfcmVhZF9wb3J0X3Zzcl9kYXRhKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcG9ydCkKK3sKKwlyZXR1cm4gbXZzX3JlYWRfcG9ydChtdmksIE1WU19QMF9WU1JfREFUQSwgTVZTX1A0X1ZTUl9EQVRBLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEoc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwb3J0LCB1MzIgdmFsKQoreworCW12c193cml0ZV9wb3J0KG12aSwgTVZTX1AwX1ZTUl9EQVRBLCBNVlNfUDRfVlNSX0RBVEEsIHBvcnQsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIG12c193cml0ZV9wb3J0X3Zzcl9hZGRyKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcG9ydCwgdTMyIGFkZHIpCit7CisJbXZzX3dyaXRlX3BvcnQobXZpLCBNVlNfUDBfVlNSX0FERFIsIE1WU19QNF9WU1JfQUREUiwgcG9ydCwgYWRkcik7Cit9CisKK3N0YXRpYyB1MzIgbXZzX3JlYWRfcG9ydF9pcnFfc3RhdChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHBvcnQpCit7CisJcmV0dXJuIG12c19yZWFkX3BvcnQobXZpLCBNVlNfUDBfSU5UX1NUQVQsIE1WU19QNF9JTlRfU1RBVCwgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIG12c193cml0ZV9wb3J0X2lycV9zdGF0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcG9ydCwgdTMyIHZhbCkKK3sKKwltdnNfd3JpdGVfcG9ydChtdmksIE1WU19QMF9JTlRfU1RBVCwgTVZTX1A0X0lOVF9TVEFULCBwb3J0LCB2YWwpOworfQorCitzdGF0aWMgdTMyIG12c19yZWFkX3BvcnRfaXJxX21hc2soc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwb3J0KQoreworCXJldHVybiBtdnNfcmVhZF9wb3J0KG12aSwgTVZTX1AwX0lOVF9NQVNLLCBNVlNfUDRfSU5UX01BU0ssIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBtdnNfd3JpdGVfcG9ydF9pcnFfbWFzayhzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHBvcnQsIHUzMiB2YWwpCit7CisJbXZzX3dyaXRlX3BvcnQobXZpLCBNVlNfUDBfSU5UX01BU0ssIE1WU19QNF9JTlRfTUFTSywgcG9ydCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IG12c19waHlfaGFja3Moc3RydWN0IG12c19pbmZvICptdmkpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXUzMiB0bXA7CisKKwkvKiB3b3JrYXJvdW5kIGZvciBTQVRBIFItRVJSLCB0byBpZ25vcmUgcGh5IGdsaXRjaCAqLworCXRtcCA9IG12c19jcjMyKHJlZ3MsIENNRF9QSFlfVElNRVIpOworCXRtcCAmPSB+KDEgPDwgOSk7CisJdG1wIHw9ICgxIDw8IDEwKTsKKwltdnNfY3czMihyZWdzLCBDTURfUEhZX1RJTUVSLCB0bXApOworCisJLyogZW5hYmxlIHJldHJ5IDEyNyB0aW1lcyAqLworCW12c19jdzMyKHJlZ3MsIENNRF9TQVNfQ1RMMSwgMHg3ZjdmKTsKKworCS8qIGV4dGVuZCBvcGVuIGZyYW1lIHRpbWVvdXQgdG8gbWF4ICovCisJdG1wID0gbXZzX2NyMzIocmVncywgQ01EX1NBU19DVEwwKTsKKwl0bXAgJj0gfjB4ZmZmZjsKKwl0bXAgfD0gMHgzZmZmOworCW12c19jdzMyKHJlZ3MsIENNRF9TQVNfQ1RMMCwgdG1wKTsKKworCS8qIHdvcmthcm91bmQgZm9yIFdEVElNRU9VVCAsIHNldCB0byA1NTAgbXMgKi8KKwltdnNfY3czMihyZWdzLCBDTURfV0RfVElNRVIsIDB4ODY0NzApOworCisJLyogbm90IHRvIGhhbHQgZm9yIGRpZmZlcmVudCBwb3J0IG9wIGR1cmluZyB3aWRlcG9ydCBsaW5rIGNoYW5nZSAqLworCW12c19jdzMyKHJlZ3MsIENNRF9BUFBfRVJSX0NPTkZJRywgMHhmZmVmYmY3ZCk7CisKKwkvKiB3b3JrYXJvdW5kIGZvciBTZWFnYXRlIGRpc2sgbm90LWZvdW5kIE9PQiBzZXF1ZW5jZSwgcmVjdgorCSAqIENPTUlOSVQgYmVmb3JlIHNlbmRpbmcgb3V0IENPTVdBS0UgKi8KKwl0bXAgPSBtdnNfY3IzMihyZWdzLCBDTURfUEhZX01PREVfMjEpOworCXRtcCAmPSAweDAwMDBmZmZmOworCXRtcCB8PSAweDAwZmEwMDAwOworCW12c19jdzMyKHJlZ3MsIENNRF9QSFlfTU9ERV8yMSwgdG1wKTsKKworCXRtcCA9IG12c19jcjMyKHJlZ3MsIENNRF9QSFlfVElNRVIpOworCXRtcCAmPSAweDFmZmZmZmZmOworCXRtcCB8PSAoMlUgPDwgMjkpOwkvKiA4IG1zIHJldHJ5ICovCisJbXZzX2N3MzIocmVncywgQ01EX1BIWV9USU1FUiwgdG1wKTsKKworCS8qIFRFU1QgLSBmb3IgcGh5IGRlY29kaW5nIGVycm9yLCBhZGp1c3Qgdm9sdGFnZSBsZXZlbHMgKi8KKwltdzMyKFAwX1ZTUl9BRERSICsgMCwgMHg4KTsKKwltdzMyKFAwX1ZTUl9EQVRBICsgMCwgMHgyRjApOworCisJbXczMihQMF9WU1JfQUREUiArIDgsIDB4OCk7CisJbXczMihQMF9WU1JfREFUQSArIDgsIDB4MkYwKTsKKworCW13MzIoUDBfVlNSX0FERFIgKyAxNiwgMHg4KTsKKwltdzMyKFAwX1ZTUl9EQVRBICsgMTYsIDB4MkYwKTsKKworCW13MzIoUDBfVlNSX0FERFIgKyAyNCwgMHg4KTsKKwltdzMyKFAwX1ZTUl9EQVRBICsgMjQsIDB4MkYwKTsKKworfQorCitzdGF0aWMgdm9pZCBtdnNfZW5hYmxlX3htdChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IFBoeUlkKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwl1MzIgdG1wOworCisJdG1wID0gbXIzMihQQ1MpOworCWlmIChtdmktPmNoaXAtPm5fcGh5IDw9IDQpCisJCXRtcCB8PSAxIDw8IChQaHlJZCArIFBDU19FTl9QT1JUX1hNVF9TSElGVCk7CisJZWxzZQorCQl0bXAgfD0gMSA8PCAoUGh5SWQgKyBQQ1NfRU5fUE9SVF9YTVRfU0hJRlQyKTsKKwltdzMyKFBDUywgdG1wKTsKK30KKworc3RhdGljIHZvaWQgbXZzX2RldGVjdF9wb3J0dHlwZShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGkpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXUzMiByZWc7CisJc3RydWN0IG12c19waHkgKnBoeSA9ICZtdmktPnBoeVtpXTsKKworCS8qIFRPRE8gY2hlY2sgJiBzYXZlIGRldmljZSB0eXBlICovCisJcmVnID0gbXIzMihHQkxfUE9SVF9UWVBFKTsKKworCWlmIChyZWcgJiBNT0RFX1NBU19TQVRBICYgKDEgPDwgaSkpCisJCXBoeS0+cGh5X3R5cGUgfD0gUE9SVF9UWVBFX1NBUzsKKwllbHNlCisJCXBoeS0+cGh5X3R5cGUgfD0gUE9SVF9UWVBFX1NBVEE7Cit9CisKK3N0YXRpYyB2b2lkICptdnNfZ2V0X2QyaF9yZWcoc3RydWN0IG12c19pbmZvICptdmksIGludCBpLCB2b2lkICpidWYpCit7CisJdTMyICpzID0gKHUzMiAqKSBidWY7CisKKwlpZiAoIXMpCisJCXJldHVybiBOVUxMOworCisJbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBpLCBQSFlSX1NBVEFfU0lHMyk7CisJc1szXSA9IG12c19yZWFkX3BvcnRfY2ZnX2RhdGEobXZpLCBpKTsKKworCW12c193cml0ZV9wb3J0X2NmZ19hZGRyKG12aSwgaSwgUEhZUl9TQVRBX1NJRzIpOworCXNbMl0gPSBtdnNfcmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgaSk7CisKKwltdnNfd3JpdGVfcG9ydF9jZmdfYWRkcihtdmksIGksIFBIWVJfU0FUQV9TSUcxKTsKKwlzWzFdID0gbXZzX3JlYWRfcG9ydF9jZmdfZGF0YShtdmksIGkpOworCisJbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBpLCBQSFlSX1NBVEFfU0lHMCk7CisJc1swXSA9IG12c19yZWFkX3BvcnRfY2ZnX2RhdGEobXZpLCBpKTsKKworCXJldHVybiAodm9pZCAqKXM7Cit9CisKK3N0YXRpYyB1MzIgbXZzX2lzX3NpZ19maXNfcmVjZWl2ZWQodTMyIGlycV9zdGF0dXMpCit7CisJcmV0dXJuIGlycV9zdGF0dXMgJiBQSFlFVl9TSUdfRklTOworfQorCitzdGF0aWMgdm9pZCBtdnNfdXBkYXRlX3dpZGVwb3J0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgaSkKK3sKKwlzdHJ1Y3QgbXZzX3BoeSAqcGh5ID0gJm12aS0+cGh5W2ldOworCXN0cnVjdCBtdnNfcG9ydCAqcG9ydCA9IHBoeS0+cG9ydDsKKwlpbnQgaiwgbm87CisKKwlmb3JfZWFjaF9waHkocG9ydC0+d2lkZV9wb3J0X3BoeW1hcCwgbm8sIGosIG12aS0+Y2hpcC0+bl9waHkpCisJCWlmIChubyAmIDEpIHsKKwkJCW12c193cml0ZV9wb3J0X2NmZ19hZGRyKG12aSwgbm8sIFBIWVJfV0lERV9QT1JUKTsKKwkJCW12c193cml0ZV9wb3J0X2NmZ19kYXRhKG12aSwgbm8sCisJCQkJCQlwb3J0LT53aWRlX3BvcnRfcGh5bWFwKTsKKwkJfSBlbHNlIHsKKwkJCW12c193cml0ZV9wb3J0X2NmZ19hZGRyKG12aSwgbm8sIFBIWVJfV0lERV9QT1JUKTsKKwkJCW12c193cml0ZV9wb3J0X2NmZ19kYXRhKG12aSwgbm8sIDApOworCQl9Cit9CisKK3N0YXRpYyB1MzIgbXZzX2lzX3BoeV9yZWFkeShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGkpCit7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgbXZzX3BoeSAqcGh5ID0gJm12aS0+cGh5W2ldOworCXN0cnVjdCBtdnNfcG9ydCAqcG9ydCA9IHBoeS0+cG9ydDs7CisKKwl0bXAgPSBtdnNfcmVhZF9waHlfY3RsKG12aSwgaSk7CisKKwlpZiAoKHRtcCAmIFBIWV9SRUFEWV9NQVNLKSAmJiAhKHBoeS0+aXJxX3N0YXR1cyAmIFBIWUVWX1BPT0YpKSB7CisJCWlmICghcG9ydCkKKwkJCXBoeS0+cGh5X2F0dGFjaGVkID0gMTsKKwkJcmV0dXJuIHRtcDsKKwl9CisKKwlpZiAocG9ydCkgeworCQlpZiAocGh5LT5waHlfdHlwZSAmIFBPUlRfVFlQRV9TQVMpIHsKKwkJCXBvcnQtPndpZGVfcG9ydF9waHltYXAgJj0gfigxVSA8PCBpKTsKKwkJCWlmICghcG9ydC0+d2lkZV9wb3J0X3BoeW1hcCkKKwkJCQlwb3J0LT5wb3J0X2F0dGFjaGVkID0gMDsKKwkJCW12c191cGRhdGVfd2lkZXBvcnQobXZpLCBpKTsKKwkJfSBlbHNlIGlmIChwaHktPnBoeV90eXBlICYgUE9SVF9UWVBFX1NBVEEpCisJCQlwb3J0LT5wb3J0X2F0dGFjaGVkID0gMDsKKwkJbXZzX2ZyZWVfcmVnX3NldChtdmksIHBoeS0+cG9ydCk7CisJCXBoeS0+cG9ydCA9IE5VTEw7CisJCXBoeS0+cGh5X2F0dGFjaGVkID0gMDsKKwkJcGh5LT5waHlfdHlwZSAmPSB+KFBPUlRfVFlQRV9TQVMgfCBQT1JUX1RZUEVfU0FUQSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdnNfdXBkYXRlX3BoeWluZm8oc3RydWN0IG12c19pbmZvICptdmksIGludCBpLAorCQkJCQlpbnQgZ2V0X3N0KQoreworCXN0cnVjdCBtdnNfcGh5ICpwaHkgPSAmbXZpLT5waHlbaV07CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtdmktPnBkZXY7CisJdTMyIHRtcDsKKwl1NjQgdG1wNjQ7CisKKwltdnNfd3JpdGVfcG9ydF9jZmdfYWRkcihtdmksIGksIFBIWVJfSURFTlRJRlkpOworCXBoeS0+ZGV2X2luZm8gPSBtdnNfcmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgaSk7CisKKwltdnNfd3JpdGVfcG9ydF9jZmdfYWRkcihtdmksIGksIFBIWVJfQUREUl9ISSk7CisJcGh5LT5kZXZfc2FzX2FkZHIgPSAodTY0KSBtdnNfcmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgaSkgPDwgMzI7CisKKwltdnNfd3JpdGVfcG9ydF9jZmdfYWRkcihtdmksIGksIFBIWVJfQUREUl9MTyk7CisJcGh5LT5kZXZfc2FzX2FkZHIgfD0gbXZzX3JlYWRfcG9ydF9jZmdfZGF0YShtdmksIGkpOworCisJaWYgKGdldF9zdCkgeworCQlwaHktPmlycV9zdGF0dXMgPSBtdnNfcmVhZF9wb3J0X2lycV9zdGF0KG12aSwgaSk7CisJCXBoeS0+cGh5X3N0YXR1cyA9IG12c19pc19waHlfcmVhZHkobXZpLCBpKTsKKwl9CisKKwlpZiAocGh5LT5waHlfc3RhdHVzKSB7CisJCXUzMiBwaHlfc3Q7CisJCXN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSA9IG12aS0+c2FzLnNhc19waHlbaV07CisKKwkJbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBpLCBQSFlSX1BIWV9TVEFUKTsKKwkJcGh5X3N0ID0gbXZzX3JlYWRfcG9ydF9jZmdfZGF0YShtdmksIGkpOworCisJCXNhc19waHktPmxpbmtyYXRlID0KKwkJCShwaHktPnBoeV9zdGF0dXMgJiBQSFlfTkVHX1NQUF9QSFlTX0xJTktfUkFURV9NQVNLKSA+PgorCQkJCVBIWV9ORUdfU1BQX1BIWVNfTElOS19SQVRFX01BU0tfT0ZGU0VUOworCQlwaHktPm1pbmltdW1fbGlua3JhdGUgPQorCQkJKHBoeS0+cGh5X3N0YXR1cyAmCisJCQkJUEhZX01JTl9TUFBfUEhZU19MSU5LX1JBVEVfTUFTSykgPj4gODsKKwkJcGh5LT5tYXhpbXVtX2xpbmtyYXRlID0KKwkJCShwaHktPnBoeV9zdGF0dXMgJgorCQkJCVBIWV9NQVhfU1BQX1BIWVNfTElOS19SQVRFX01BU0spID4+IDEyOworCisJCWlmIChwaHktPnBoeV90eXBlICYgUE9SVF9UWVBFX1NBUykgeworCQkJLyogVXBkYXRlZCBhdHRhY2hlZF9zYXNfYWRkciAqLworCQkJbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBpLCBQSFlSX0FUVF9BRERSX0hJKTsKKwkJCXBoeS0+YXR0X2Rldl9zYXNfYWRkciA9CisJCQkJKHU2NCkgbXZzX3JlYWRfcG9ydF9jZmdfZGF0YShtdmksIGkpIDw8IDMyOworCQkJbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBpLCBQSFlSX0FUVF9BRERSX0xPKTsKKwkJCXBoeS0+YXR0X2Rldl9zYXNfYWRkciB8PSBtdnNfcmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgaSk7CisJCQltdnNfd3JpdGVfcG9ydF9jZmdfYWRkcihtdmksIGksIFBIWVJfQVRUX0RFVl9JTkZPKTsKKwkJCXBoeS0+YXR0X2Rldl9pbmZvID0gbXZzX3JlYWRfcG9ydF9jZmdfZGF0YShtdmksIGkpOworCQkJcGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSA9CisJCQkgICAgcGh5LT5hdHRfZGV2X2luZm8gJiBQT1JUX0RFVl9UWVBFX01BU0s7CisKKwkJCWlmIChwaHktPmlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19FTkRfREVWKQorCQkJCXBoeS0+aWRlbnRpZnkudGFyZ2V0X3BvcnRfcHJvdG9jb2xzID0KKwkJCQkJCQlTQVNfUFJPVE9DT0xfU1NQOworCQkJZWxzZSBpZiAocGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBOT19ERVZJQ0UpCisJCQkJcGh5LT5pZGVudGlmeS50YXJnZXRfcG9ydF9wcm90b2NvbHMgPQorCQkJCQkJCVNBU19QUk9UT0NPTF9TTVA7CisJCQlpZiAocGh5X3N0ICYgUEhZX09PQl9EVENURCkKKwkJCQlzYXNfcGh5LT5vb2JfbW9kZSA9IFNBU19PT0JfTU9ERTsKKwkJCXBoeS0+ZnJhbWVfcmN2ZF9zaXplID0KKwkJCSAgICBzaXplb2Yoc3RydWN0IHNhc19pZGVudGlmeV9mcmFtZSk7CisJCX0gZWxzZSBpZiAocGh5LT5waHlfdHlwZSAmIFBPUlRfVFlQRV9TQVRBKSB7CisJCQlwaHktPmlkZW50aWZ5LnRhcmdldF9wb3J0X3Byb3RvY29scyA9IFNBU19QUk9UT0NPTF9TVFA7CisJCQlpZiAobXZzX2lzX3NpZ19maXNfcmVjZWl2ZWQocGh5LT5pcnFfc3RhdHVzKSkgeworCQkJCXBoeS0+YXR0X2Rldl9zYXNfYWRkciA9IGk7CS8qIHRlbXAgKi8KKwkJCQlpZiAocGh5X3N0ICYgUEhZX09PQl9EVENURCkKKwkJCQkJc2FzX3BoeS0+b29iX21vZGUgPSBTQVRBX09PQl9NT0RFOworCQkJCXBoeS0+ZnJhbWVfcmN2ZF9zaXplID0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkZXZfdG9faG9zdF9maXMpOworCQkJCW12c19nZXRfZDJoX3JlZyhtdmksIGksCisJCQkJCQkodm9pZCAqKXNhc19waHktPmZyYW1lX3JjdmQpOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCisJCQkJCSJObyBzaWcgZmlzXG4iKTsKKwkJCQlwaHktPnBoeV90eXBlICY9IH4oUE9SVF9UWVBFX1NBVEEpOworCQkJCWdvdG8gb3V0X2RvbmU7CisJCQl9CisJCX0KKwkJdG1wNjQgPSBjcHVfdG9fYmU2NChwaHktPmF0dF9kZXZfc2FzX2FkZHIpOworCQltZW1jcHkoc2FzX3BoeS0+YXR0YWNoZWRfc2FzX2FkZHIsICZ0bXA2NCwgU0FTX0FERFJfU0laRSk7CisKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAorCQkJInBoeVslZF0gR2V0IEF0dGFjaGVkIEFkZHJlc3MgMHglbGxYICwiCisJCQkiIFNBUyBBZGRyZXNzIDB4JWxsWFxuIiwKKwkJCWksIHBoeS0+YXR0X2Rldl9zYXNfYWRkciwgcGh5LT5kZXZfc2FzX2FkZHIpOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCisJCQkiUmF0ZSA9ICV4ICwgdHlwZSA9ICVkXG4iLAorCQkJc2FzX3BoeS0+bGlua3JhdGUsIHBoeS0+cGh5X3R5cGUpOworCisJCS8qIHdvcmthcm91bmQgZm9yIEhXIHBoeSBkZWNvZGluZyBlcnJvciBvbiAxLjVnIGRpc2sgZHJpdmUgKi8KKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBpLCBWU1JfUEhZX01PREU2KTsKKwkJdG1wID0gbXZzX3JlYWRfcG9ydF92c3JfZGF0YShtdmksIGkpOworCQlpZiAoKChwaHktPnBoeV9zdGF0dXMgJiBQSFlfTkVHX1NQUF9QSFlTX0xJTktfUkFURV9NQVNLKSA+PgorCQkgICAgIFBIWV9ORUdfU1BQX1BIWVNfTElOS19SQVRFX01BU0tfT0ZGU0VUKSA9PQorCQkJU0FTX0xJTktfUkFURV8xXzVfR0JQUykKKwkJCXRtcCAmPSB+UEhZX01PREU2X0xBVEVDTEs7CisJCWVsc2UKKwkJCXRtcCB8PSBQSFlfTU9ERTZfTEFURUNMSzsKKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBpLCB0bXApOworCisJfQorb3V0X2RvbmU6CisJaWYgKGdldF9zdCkKKwkJbXZzX3dyaXRlX3BvcnRfaXJxX3N0YXQobXZpLCBpLCBwaHktPmlycV9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBtdnNfcG9ydF9mb3JtZWQoc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5KQoreworCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBzYXNfcGh5LT5oYTsKKwlzdHJ1Y3QgbXZzX2luZm8gKm12aSA9IHNhc19oYS0+bGxkZF9oYTsKKwlzdHJ1Y3QgYXNkX3Nhc19wb3J0ICpzYXNfcG9ydCA9IHNhc19waHktPnBvcnQ7CisJc3RydWN0IG12c19waHkgKnBoeSA9IHNhc19waHktPmxsZGRfcGh5OworCXN0cnVjdCBtdnNfcG9ydCAqcG9ydCA9ICZtdmktPnBvcnRbc2FzX3BvcnQtPmlkXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm12aS0+bG9jaywgZmxhZ3MpOworCXBvcnQtPnBvcnRfYXR0YWNoZWQgPSAxOworCXBoeS0+cG9ydCA9IHBvcnQ7CisJcG9ydC0+dGFza2ZpbGVzZXQgPSBNVlNfSURfTk9UX01BUFBFRDsKKwlpZiAocGh5LT5waHlfdHlwZSAmIFBPUlRfVFlQRV9TQVMpIHsKKwkJcG9ydC0+d2lkZV9wb3J0X3BoeW1hcCA9IHNhc19wb3J0LT5waHlfbWFzazsKKwkJbXZzX3VwZGF0ZV93aWRlcG9ydChtdmksIHNhc19waHktPmlkKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXZzX0lfVF9uZXh1c19yZXNldChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2KQoreworCXJldHVybiBUTUZfUkVTUF9GVU5DX0ZBSUxFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXZzX2h3X2luaXQoc3RydWN0IG12c19pbmZvICptdmkpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCWludCBpOworCXUzMiB0bXAsIGNjdGw7CisKKwkvKiBtYWtlIHN1cmUgaW50ZXJydXB0cyBhcmUgbWFza2VkIGltbWVkaWF0ZWx5IChwYXJhbm9pYSkgKi8KKwltdzMyKEdCTF9DVEwsIDApOworCXRtcCA9IG1yMzIoR0JMX0NUTCk7CisKKwkvKiBSZXNldCBDb250cm9sbGVyICovCisJaWYgKCEodG1wICYgSEJBX1JTVCkpIHsKKwkJaWYgKG12aS0+ZmxhZ3MgJiBNVkZfUEhZX1BXUl9GSVgpIHsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtdmktPnBkZXYsIFBDUl9QSFlfQ1RMLCAmdG1wKTsKKwkJCXRtcCAmPSB+UENUTF9QV1JfT047CisJCQl0bXAgfD0gUENUTF9PRkY7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG12aS0+cGRldiwgUENSX1BIWV9DVEwsIHRtcCk7CisKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtdmktPnBkZXYsIFBDUl9QSFlfQ1RMMiwgJnRtcCk7CisJCQl0bXAgJj0gflBDVExfUFdSX09OOworCQkJdG1wIHw9IFBDVExfT0ZGOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtdmktPnBkZXYsIFBDUl9QSFlfQ1RMMiwgdG1wKTsKKwkJfQorCisJCS8qIGdsb2JhbCByZXNldCwgaW5jbC4gQ09NUkVTRVQvSF9SRVNFVF9OIChzZWxmLWNsZWFyaW5nKSAqLworCQltdzMyX2YoR0JMX0NUTCwgSEJBX1JTVCk7CisJfQorCisJLyogd2FpdCBmb3IgcmVzZXQgdG8gZmluaXNoOyB0aW1lb3V0IGlzIGp1c3QgYSBndWVzcyAqLworCWkgPSAxMDAwOworCXdoaWxlIChpLS0gPiAwKSB7CisJCW1zbGVlcCgxMCk7CisKKwkJaWYgKCEobXIzMihHQkxfQ1RMKSAmIEhCQV9SU1QpKQorCQkJYnJlYWs7CisJfQorCWlmIChtcjMyKEdCTF9DVEwpICYgSEJBX1JTVCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmbXZpLT5wZGV2LT5kZXYsICJIQkEgcmVzZXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBJbml0IENoaXAgKi8KKwkvKiBtYWtlIHN1cmUgUlNUIGlzIHNldDsgSEJBX1JTVCAvc2hvdWxkLyBoYXZlIGRvbmUgdGhhdCBmb3IgdXMgKi8KKwljY3RsID0gbXIzMihDVEwpOworCWlmIChjY3RsICYgQ0NUTF9SU1QpCisJCWNjdGwgJj0gfkNDVExfUlNUOworCWVsc2UKKwkJbXczMl9mKENUTCwgY2N0bCB8IENDVExfUlNUKTsKKworCS8qIHdyaXRlIHRvIGRldmljZSBjb250cm9sIF9BTkRfIGRldmljZSBzdGF0dXMgcmVnaXN0ZXI/IC0gQS5DLiAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtdmktPnBkZXYsIFBDUl9ERVZfQ1RSTCwgJnRtcCk7CisJdG1wICY9IH5QUkRfUkVRX01BU0s7CisJdG1wIHw9IFBSRF9SRVFfU0laRTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG12aS0+cGRldiwgUENSX0RFVl9DVFJMLCB0bXApOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG12aS0+cGRldiwgUENSX1BIWV9DVEwsICZ0bXApOworCXRtcCB8PSBQQ1RMX1BXUl9PTjsKKwl0bXAgJj0gflBDVExfT0ZGOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobXZpLT5wZGV2LCBQQ1JfUEhZX0NUTCwgdG1wKTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtdmktPnBkZXYsIFBDUl9QSFlfQ1RMMiwgJnRtcCk7CisJdG1wIHw9IFBDVExfUFdSX09OOworCXRtcCAmPSB+UENUTF9PRkY7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtdmktPnBkZXYsIFBDUl9QSFlfQ1RMMiwgdG1wKTsKKworCW13MzJfZihDVEwsIGNjdGwpOworCisJLyogcmVzZXQgY29udHJvbCAqLworCW13MzIoUENTLCAwKTsJCS8qTVZTX1BDUyAqLworCisJbXZzX3BoeV9oYWNrcyhtdmkpOworCisJbXczMihDTURfTElTVF9MTywgbXZpLT5zbG90X2RtYSk7CisJbXczMihDTURfTElTVF9ISSwgKG12aS0+c2xvdF9kbWEgPj4gMTYpID4+IDE2KTsKKworCW13MzIoUlhfRklTX0xPLCBtdmktPnJ4X2Zpc19kbWEpOworCW13MzIoUlhfRklTX0hJLCAobXZpLT5yeF9maXNfZG1hID4+IDE2KSA+PiAxNik7CisKKwltdzMyKFRYX0NGRywgTVZTX0NISVBfU0xPVF9TWik7CisJbXczMihUWF9MTywgbXZpLT50eF9kbWEpOworCW13MzIoVFhfSEksIChtdmktPnR4X2RtYSA+PiAxNikgPj4gMTYpOworCisJbXczMihSWF9DRkcsIE1WU19SWF9SSU5HX1NaKTsKKwltdzMyKFJYX0xPLCBtdmktPnJ4X2RtYSk7CisJbXczMihSWF9ISSwgKG12aS0+cnhfZG1hID4+IDE2KSA+PiAxNik7CisKKwkvKiBlbmFibGUgYXV0byBwb3J0IGRldGVjdGlvbiAqLworCW13MzIoR0JMX1BPUlRfVFlQRSwgTU9ERV9BVVRPX0RFVF9FTik7CisJbXNsZWVwKDEwMCk7CisJLyogaW5pdCBhbmQgcmVzZXQgcGh5cyAqLworCWZvciAoaSA9IDA7IGkgPCBtdmktPmNoaXAtPm5fcGh5OyBpKyspIHsKKwkJdTMyIGxvID0gYmUzMl90b19jcHUoKih1MzIgKikmbXZpLT5zYXNfYWRkcls0XSk7CisJCXUzMiBoaSA9IGJlMzJfdG9fY3B1KCoodTMyICopJm12aS0+c2FzX2FkZHJbMF0pOworCisJCW12c19kZXRlY3RfcG9ydHR5cGUobXZpLCBpKTsKKworCQkvKiBzZXQgcGh5IGxvY2FsIFNBUyBhZGRyZXNzICovCisJCW12c193cml0ZV9wb3J0X2NmZ19hZGRyKG12aSwgaSwgUEhZUl9BRERSX0xPKTsKKwkJbXZzX3dyaXRlX3BvcnRfY2ZnX2RhdGEobXZpLCBpLCBsbyk7CisJCW12c193cml0ZV9wb3J0X2NmZ19hZGRyKG12aSwgaSwgUEhZUl9BRERSX0hJKTsKKwkJbXZzX3dyaXRlX3BvcnRfY2ZnX2RhdGEobXZpLCBpLCBoaSk7CisKKwkJLyogcmVzZXQgcGh5ICovCisJCXRtcCA9IG12c19yZWFkX3BoeV9jdGwobXZpLCBpKTsKKwkJdG1wIHw9IFBIWV9SU1Q7CisJCW12c193cml0ZV9waHlfY3RsKG12aSwgaSwgdG1wKTsKKwl9CisKKwltc2xlZXAoMTAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBtdmktPmNoaXAtPm5fcGh5OyBpKyspIHsKKwkJLyogY2xlYXIgcGh5IGludCBzdGF0dXMgKi8KKwkJdG1wID0gbXZzX3JlYWRfcG9ydF9pcnFfc3RhdChtdmksIGkpOworCQl0bXAgJj0gflBIWUVWX1NJR19GSVM7CisJCW12c193cml0ZV9wb3J0X2lycV9zdGF0KG12aSwgaSwgdG1wKTsKKworCQkvKiBzZXQgcGh5IGludCBtYXNrICovCisJCXRtcCA9IFBIWUVWX1JEWV9DSCB8IFBIWUVWX0JST0FEX0NIIHwgUEhZRVZfVU5BU1NPQ19GSVMgfAorCQkJUEhZRVZfSURfRE9ORSB8IFBIWUVWX0RFQ19FUlI7CisJCW12c193cml0ZV9wb3J0X2lycV9tYXNrKG12aSwgaSwgdG1wKTsKKworCQltc2xlZXAoMTAwKTsKKwkJbXZzX3VwZGF0ZV9waHlpbmZvKG12aSwgaSwgMSk7CisJCW12c19lbmFibGVfeG10KG12aSwgaSk7CisJfQorCisJLyogRklYTUU6IHVwZGF0ZSB3aWRlIHBvcnQgYml0bWFwcyAqLworCisJLyogbGl0dGxlIGVuZGlhbiBmb3Igb3BlbiBhZGRyZXNzIGFuZCBjb21tYW5kIHRhYmxlLCBldGMuICovCisJLyogQS5DLgorCSAqIGl0IHNlZW1zIHRoYXQgKCBmcm9tIHRoZSBzcGVjICkgdHVybmluZyBvbiBiaWctZW5kaWFuIHdvbid0CisJICogZG8gdXMgYW55IGdvb2Qgb24gYmlnLWVuZGlhbiBtYWNoaW5lcywgbmVlZCBmdXJ0aGVyIGNvbmZpcm1hdGlvbgorCSAqLworCWNjdGwgPSBtcjMyKENUTCk7CisJY2N0bCB8PSBDQ1RMX0VORElBTl9DTUQ7CisJY2N0bCB8PSBDQ1RMX0VORElBTl9EQVRBOworCWNjdGwgJj0gfkNDVExfRU5ESUFOX09QRU47CisJY2N0bCB8PSBDQ1RMX0VORElBTl9SU1A7CisJbXczMl9mKENUTCwgY2N0bCk7CisKKwkvKiByZXNldCBDTUQgcXVldWUgKi8KKwl0bXAgPSBtcjMyKFBDUyk7CisJdG1wIHw9IFBDU19DTURfUlNUOworCW13MzIoUENTLCB0bXApOworCS8qIGludGVycnVwdCBjb2FsZXNjaW5nIG1heSBjYXVzZSBtaXNzaW5nIEhXIGludGVycnB1dCBpbiBzb21lIGNhc2UsCisJICogYW5kIHRoZSBtYXggY291bnQgaXMgMHgxZmYsIHdoaWxlIG91ciBtYXggc2xvdCBpcyAweDIwMCwKKwkgKiBpdCB3aWxsIG1ha2UgY291bnQgMC4KKwkgKi8KKwl0bXAgPSAwOworCW13MzIoSU5UX0NPQUwsIHRtcCk7CisKKwl0bXAgPSAweDEwMDsKKwltdzMyKElOVF9DT0FMX1RNT1VULCB0bXApOworCisJLyogbGFkaWVzIGFuZCBnZW50bGVtZW4sIHN0YXJ0IHlvdXIgZW5naW5lcyAqLworCW13MzIoVFhfQ0ZHLCAwKTsKKwltdzMyKFRYX0NGRywgTVZTX0NISVBfU0xPVF9TWiB8IFRYX0VOKTsKKwltdzMyKFJYX0NGRywgTVZTX1JYX1JJTkdfU1ogfCBSWF9FTik7CisJLyogZW5hYmxlIENNRC9DTVBMX1EvUkVTUCBtb2RlICovCisJbXczMihQQ1MsIFBDU19TQVRBX1JFVFJZIHwgUENTX0ZJU19SWF9FTiB8IFBDU19DTURfRU4pOworCisJLyogZW5hYmxlIGNvbXBsZXRpb24gcXVldWUgaW50ZXJydXB0ICovCisJdG1wID0gKENJTlRfUE9SVF9NQVNLIHwgQ0lOVF9ET05FIHwgQ0lOVF9NRU0gfCBDSU5UX1NSUyk7CisJbXczMihJTlRfTUFTSywgdG1wKTsKKworCS8qIEVuYWJsZSBTUlMgaW50ZXJydXB0ICovCisJbXczMihJTlRfTUFTS19TUlMsIDB4RkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbXZzX3ByaW50X2luZm8oc3RydWN0IG12c19pbmZvICptdmkpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtdmktPnBkZXY7CisJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CisKKwlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQorCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LCAiJXUgcGh5cywgYWRkciAlbGx4XG4iLAorCQkgICBtdmktPmNoaXAtPm5fcGh5LCBTQVNfQUREUihtdmktPnNhc19hZGRyKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG12c19wY2lfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IHJjOworCXN0cnVjdCBtdnNfaW5mbyAqbXZpOworCWlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXIgPSBtdnNfaW50ZXJydXB0OworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX291dF9kaXNhYmxlOworCisJcmMgPSBwY2lfZ29fNjQocGRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9vdXRfcmVnaW9uczsKKworCW12aSA9IG12c19hbGxvYyhwZGV2LCBlbnQpOworCWlmICghbXZpKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X3JlZ2lvbnM7CisJfQorCisJcmMgPSBtdnNfaHdfaW5pdChtdmkpOworCWlmIChyYykKKwkJZ290byBlcnJfb3V0X212aTsKKworI2lmbmRlZiBNVlNfRElTQUJMRV9NU0kKKwlpZiAoIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7CisJCXUzMiB0bXA7CisJCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwkJbXZpLT5mbGFncyB8PSBNVkZfTVNJOworCQlpcnFfaGFuZGxlciA9IG12c19tc2lfaW50ZXJydXB0OworCQl0bXAgPSBtcjMyKFBDUyk7CisJCW13MzIoUENTLCB0bXAgfCBQQ1NfU0VMRl9DTEVBUik7CisJfQorI2VuZGlmCisKKwlyYyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgbXZpKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX291dF9tc2k7CisKKwlyYyA9IHNjc2lfYWRkX2hvc3QobXZpLT5zaG9zdCwgJnBkZXYtPmRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9vdXRfaXJxOworCisJcmMgPSBzYXNfcmVnaXN0ZXJfaGEoJm12aS0+c2FzKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX291dF9zaG9zdDsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtdmkpOworCisJbXZzX3ByaW50X2luZm8obXZpKTsKKworCW12c19oYmFfaW50ZXJydXB0X2VuYWJsZShtdmkpOworCisJc2NzaV9zY2FuX2hvc3QobXZpLT5zaG9zdCk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9zaG9zdDoKKwlzY3NpX3JlbW92ZV9ob3N0KG12aS0+c2hvc3QpOworZXJyX291dF9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBtdmkpOworZXJyX291dF9tc2k6CisJaWYgKG12aS0+ZmxhZ3MgfD0gTVZGX01TSSkKKwkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworZXJyX291dF9tdmk6CisJbXZzX2ZyZWUobXZpKTsKK2Vycl9vdXRfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX291dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtdnNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbXZzX2luZm8gKm12aSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWlmIChtdmkpIHsKKwkJc2FzX3VucmVnaXN0ZXJfaGEoJm12aS0+c2FzKTsKKwkJbXZzX2hiYV9pbnRlcnJ1cHRfZGlzYWJsZShtdmkpOworCQlzYXNfcmVtb3ZlX2hvc3QobXZpLT5zaG9zdCk7CisJCXNjc2lfcmVtb3ZlX2hvc3QobXZpLT5zaG9zdCk7CisKKwkJZnJlZV9pcnEocGRldi0+aXJxLCBtdmkpOworCQlpZiAobXZpLT5mbGFncyAmIE1WRl9NU0kpCisJCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisJCW12c19mcmVlKG12aSk7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJfQorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBzYXNfZG9tYWluX2Z1bmN0aW9uX3RlbXBsYXRlIG12c190cmFuc3BvcnRfb3BzID0geworCS5sbGRkX2V4ZWN1dGVfdGFzawk9IG12c190YXNrX2V4ZWMsCisJLmxsZGRfY29udHJvbF9waHkJPSBtdnNfcGh5X2NvbnRyb2wsCisJLmxsZGRfYWJvcnRfdGFzawk9IG12c190YXNrX2Fib3J0LAorCS5sbGRkX3BvcnRfZm9ybWVkCT0gbXZzX3BvcnRfZm9ybWVkLAorCS5sbGRkX0lfVF9uZXh1c19yZXNldAk9IG12c19JX1RfbmV4dXNfcmVzZXQsCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBtdnNfcGNpX3RhYmxlW10gPSB7CisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDYzMjApLCBjaGlwXzYzMjAgfSwKKwl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4NjM0MCksIGNoaXBfNjQ0MCB9LAorCXsKKwkJLnZlbmRvciAJPSBQQ0lfVkVORE9SX0lEX01BUlZFTEwsCisJCS5kZXZpY2UgCT0gMHg2NDQwLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IDB4NjQ4MCwKKwkJLmNsYXNzCQk9IDAsCisJCS5jbGFzc19tYXNrCT0gMCwKKwkJLmRyaXZlcl9kYXRhCT0gY2hpcF82NDgwLAorCX0sCisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDY0NDApLCBjaGlwXzY0NDAgfSwKKwl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4NjQ4MCksIGNoaXBfNjQ4MCB9LAorCisJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXZzX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRFJWX05BTUUsCisJLmlkX3RhYmxlCT0gbXZzX3BjaV90YWJsZSwKKwkucHJvYmUJCT0gbXZzX3BjaV9pbml0LAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXZzX3BjaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXZzX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwltdnNfc3R0ID0gc2FzX2RvbWFpbl9hdHRhY2hfdHJhbnNwb3J0KCZtdnNfdHJhbnNwb3J0X29wcyk7CisJaWYgKCFtdnNfc3R0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbXZzX3BjaV9kcml2ZXIpOworCWlmIChyYykKKwkJZ290byBlcnJfb3V0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG12c19zdHQpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG12c19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7CisJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG12c19zdHQpOworfQorCittb2R1bGVfaW5pdChtdnNfaW5pdCk7Cittb2R1bGVfZXhpdChtdnNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCA4OFNFNjQ0MCBTQVMvU0FUQSBjb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG12c19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCmluZGV4IGM1ZWJmMDEuLmQ4OTI4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYworKysgYi9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKQEAgLTgyNDMsNyArODI0Myw4IEBACiAKICN1bmRlZiBuZXh0X3djbWQKIAotc3RhdGljIHNzaXplX3Qgc2hvd19uY3I1M2M4eHhfcmV2aXNpb24oc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X25jcjUzYzh4eF9yZXZpc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGhvc3RfZGF0YSAqaG9zdF9kYXRhID0gKHN0cnVjdCBob3N0X2RhdGEgKilob3N0LT5ob3N0ZGF0YTsKQEAgLTgyNTEsMTIgKzgyNTIsMTIgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIjB4JXhcbiIsIGhvc3RfZGF0YS0+bmNiLT5yZXZpc2lvbl9pZCk7CiB9CiAgIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIG5jcjUzYzh4eF9yZXZpc2lvbl9hdHRyID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG5jcjUzYzh4eF9yZXZpc2lvbl9hdHRyID0gewogCS5hdHRyCT0geyAubmFtZSA9ICJyZXZpc2lvbiIsIC5tb2RlID0gU19JUlVHTywgfSwKIAkuc2hvdwk9IHNob3dfbmNyNTNjOHh4X3JldmlzaW9uLAogfTsKICAgCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKm5jcjUzYzh4eF9ob3N0X2F0dHJzW10gPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm5jcjUzYzh4eF9ob3N0X2F0dHJzW10gPSB7CiAJJm5jcjUzYzh4eF9yZXZpc2lvbl9hdHRyLAogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NzdC5jIGIvZHJpdmVycy9zY3NpL29zc3QuYwppbmRleCBhYmVmNzA0Li4zMWY3YWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb3NzdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKQEAgLTU1OTEsOSArNTU5MSwxMCBAQAogICogc3lzZnMgc3VwcG9ydCBmb3IgYWNjZXNzaW5nIEFEUiBoZWFkZXIgaW5mb3JtYXRpb24KICAqLwogCi1zdGF0aWMgc3NpemVfdCBvc3N0X2Fkcl9yZXZfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IG9zc3RfYWRyX3Jldl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgb3NzdF90YXBlICogU1RwID0gKHN0cnVjdCBvc3N0X3RhcGUgKikgY2xhc3NfZ2V0X2RldmRhdGEgKGNsYXNzX2Rldik7CisJc3RydWN0IG9zc3RfdGFwZSAqIFNUcCA9IChzdHJ1Y3Qgb3NzdF90YXBlICopIGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAlzc2l6ZV90IGwgPSAwOwogCiAJaWYgKFNUcCAmJiBTVHAtPmhlYWRlcl9vayAmJiBTVHAtPmxpbnV4X21lZGlhKQpAQCAtNTYwMSwxMSArNTYwMiwxMyBAQAogCXJldHVybiBsOwogfQogCi1DTEFTU19ERVZJQ0VfQVRUUihBRFJfcmV2LCBTX0lSVUdPLCBvc3N0X2Fkcl9yZXZfc2hvdywgTlVMTCk7CitERVZJQ0VfQVRUUihBRFJfcmV2LCBTX0lSVUdPLCBvc3N0X2Fkcl9yZXZfc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IG9zc3RfbGludXhfbWVkaWFfdmVyc2lvbl9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgb3NzdF9saW51eF9tZWRpYV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgb3NzdF90YXBlICogU1RwID0gKHN0cnVjdCBvc3N0X3RhcGUgKikgY2xhc3NfZ2V0X2RldmRhdGEgKGNsYXNzX2Rldik7CisJc3RydWN0IG9zc3RfdGFwZSAqIFNUcCA9IChzdHJ1Y3Qgb3NzdF90YXBlICopIGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAlzc2l6ZV90IGwgPSAwOwogCiAJaWYgKFNUcCAmJiBTVHAtPmhlYWRlcl9vayAmJiBTVHAtPmxpbnV4X21lZGlhKQpAQCAtNTYxMywxMSArNTYxNiwxMiBAQAogCXJldHVybiBsOwogfQogCi1DTEFTU19ERVZJQ0VfQVRUUihtZWRpYV92ZXJzaW9uLCBTX0lSVUdPLCBvc3N0X2xpbnV4X21lZGlhX3ZlcnNpb25fc2hvdywgTlVMTCk7CitERVZJQ0VfQVRUUihtZWRpYV92ZXJzaW9uLCBTX0lSVUdPLCBvc3N0X2xpbnV4X21lZGlhX3ZlcnNpb25fc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IG9zc3RfY2FwYWNpdHlfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IG9zc3RfY2FwYWNpdHlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBvc3N0X3RhcGUgKiBTVHAgPSAoc3RydWN0IG9zc3RfdGFwZSAqKSBjbGFzc19nZXRfZGV2ZGF0YSAoY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgb3NzdF90YXBlICogU1RwID0gKHN0cnVjdCBvc3N0X3RhcGUgKikgZGV2X2dldF9kcnZkYXRhIChkZXYpOwogCXNzaXplX3QgbCA9IDA7CiAKIAlpZiAoU1RwICYmIFNUcC0+aGVhZGVyX29rICYmIFNUcC0+bGludXhfbWVkaWEpCkBAIC01NjI1LDExICs1NjI5LDEzIEBACiAJcmV0dXJuIGw7CiB9CiAKLUNMQVNTX0RFVklDRV9BVFRSKGNhcGFjaXR5LCBTX0lSVUdPLCBvc3N0X2NhcGFjaXR5X3Nob3csIE5VTEwpOworREVWSUNFX0FUVFIoY2FwYWNpdHksIFNfSVJVR08sIG9zc3RfY2FwYWNpdHlfc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IG9zc3RfZmlyc3RfZGF0YV9wcG9zX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBvc3N0X2ZpcnN0X2RhdGFfcHBvc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgY2hhciAqYnVmKQogewotCXN0cnVjdCBvc3N0X3RhcGUgKiBTVHAgPSAoc3RydWN0IG9zc3RfdGFwZSAqKSBjbGFzc19nZXRfZGV2ZGF0YSAoY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgb3NzdF90YXBlICogU1RwID0gKHN0cnVjdCBvc3N0X3RhcGUgKikgZGV2X2dldF9kcnZkYXRhIChkZXYpOwogCXNzaXplX3QgbCA9IDA7CiAKIAlpZiAoU1RwICYmIFNUcC0+aGVhZGVyX29rICYmIFNUcC0+bGludXhfbWVkaWEpCkBAIC01NjM3LDExICs1NjQzLDEzIEBACiAJcmV0dXJuIGw7CiB9CiAKLUNMQVNTX0RFVklDRV9BVFRSKEJPVF9mcmFtZSwgU19JUlVHTywgb3NzdF9maXJzdF9kYXRhX3Bwb3Nfc2hvdywgTlVMTCk7CitERVZJQ0VfQVRUUihCT1RfZnJhbWUsIFNfSVJVR08sIG9zc3RfZmlyc3RfZGF0YV9wcG9zX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBvc3N0X2VvZF9mcmFtZV9wcG9zX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBvc3N0X2VvZF9mcmFtZV9wcG9zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBvc3N0X3RhcGUgKiBTVHAgPSAoc3RydWN0IG9zc3RfdGFwZSAqKSBjbGFzc19nZXRfZGV2ZGF0YSAoY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgb3NzdF90YXBlICogU1RwID0gKHN0cnVjdCBvc3N0X3RhcGUgKikgZGV2X2dldF9kcnZkYXRhIChkZXYpOwogCXNzaXplX3QgbCA9IDA7CiAKIAlpZiAoU1RwICYmIFNUcC0+aGVhZGVyX29rICYmIFNUcC0+bGludXhfbWVkaWEpCkBAIC01NjQ5LDExICs1NjU3LDEyIEBACiAJcmV0dXJuIGw7CiB9CiAKLUNMQVNTX0RFVklDRV9BVFRSKEVPRF9mcmFtZSwgU19JUlVHTywgb3NzdF9lb2RfZnJhbWVfcHBvc19zaG93LCBOVUxMKTsKK0RFVklDRV9BVFRSKEVPRF9mcmFtZSwgU19JUlVHTywgb3NzdF9lb2RfZnJhbWVfcHBvc19zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgb3NzdF9maWxlbWFya19jbnRfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IG9zc3RfZmlsZW1hcmtfY250X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG9zc3RfdGFwZSAqIFNUcCA9IChzdHJ1Y3Qgb3NzdF90YXBlICopIGNsYXNzX2dldF9kZXZkYXRhIChjbGFzc19kZXYpOworCXN0cnVjdCBvc3N0X3RhcGUgKiBTVHAgPSAoc3RydWN0IG9zc3RfdGFwZSAqKSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CiAJc3NpemVfdCBsID0gMDsKIAogCWlmIChTVHAgJiYgU1RwLT5oZWFkZXJfb2sgJiYgU1RwLT5saW51eF9tZWRpYSkKQEAgLTU2NjEsNyArNTY3MCw3IEBACiAJcmV0dXJuIGw7CiB9CiAKLUNMQVNTX0RFVklDRV9BVFRSKGZpbGVfY291bnQsIFNfSVJVR08sIG9zc3RfZmlsZW1hcmtfY250X3Nob3csIE5VTEwpOworREVWSUNFX0FUVFIoZmlsZV9jb3VudCwgU19JUlVHTywgb3NzdF9maWxlbWFya19jbnRfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKm9zc3Rfc3lzZnNfY2xhc3M7CiAKQEAgLTU2NzgsNDQgKzU2ODcsMzcgQEAKIAogc3RhdGljIHZvaWQgb3NzdF9zeXNmc19kZXN0cm95KGRldl90IGRldikKIHsKLQljbGFzc19kZXZpY2VfZGVzdHJveShvc3N0X3N5c2ZzX2NsYXNzLCBkZXYpOworCWRldmljZV9kZXN0cm95KG9zc3Rfc3lzZnNfY2xhc3MsIGRldik7CiB9CiAKIHN0YXRpYyBpbnQgb3NzdF9zeXNmc19hZGQoZGV2X3QgZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIGNoYXIgKiBuYW1lKQogewotCXN0cnVjdCBjbGFzc19kZXZpY2UgKm9zc3RfY2xhc3NfbWVtYmVyOworCXN0cnVjdCBkZXZpY2UgKm9zc3RfbWVtYmVyOwogCWludCBlcnI7CiAKLQlvc3N0X2NsYXNzX21lbWJlciA9IGNsYXNzX2RldmljZV9jcmVhdGUob3NzdF9zeXNmc19jbGFzcywgTlVMTCwgZGV2LAotCQkJCQkJZGV2aWNlLCAiJXMiLCBuYW1lKTsKLQlpZiAoSVNfRVJSKG9zc3RfY2xhc3NfbWVtYmVyKSkgeworCW9zc3RfbWVtYmVyID0gZGV2aWNlX2NyZWF0ZShvc3N0X3N5c2ZzX2NsYXNzLCBkZXZpY2UsIGRldiwgIiVzIiwgbmFtZSk7CisJaWYgKElTX0VSUihvc3N0X21lbWJlcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAib3NzdCA6VzogVW5hYmxlIHRvIGFkZCBzeXNmcyBjbGFzcyBtZW1iZXIgJXNcbiIsIG5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihvc3N0X2NsYXNzX21lbWJlcik7CisJCXJldHVybiBQVFJfRVJSKG9zc3RfbWVtYmVyKTsKIAl9CiAKLQljbGFzc19zZXRfZGV2ZGF0YShvc3N0X2NsYXNzX21lbWJlciwgU1RwKTsKLQllcnIgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUob3NzdF9jbGFzc19tZW1iZXIsCi0JCQkJICAgICAgICZjbGFzc19kZXZpY2VfYXR0cl9BRFJfcmV2KTsKKwlkZXZfc2V0X2RydmRhdGEob3NzdF9tZW1iZXIsIFNUcCk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9zc3RfbWVtYmVyLCAmZGV2X2F0dHJfQURSX3Jldik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwotCWVyciA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShvc3N0X2NsYXNzX21lbWJlciwKLQkJCQkgICAgICAgJmNsYXNzX2RldmljZV9hdHRyX21lZGlhX3ZlcnNpb24pOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShvc3N0X21lbWJlciwgJmRldl9hdHRyX21lZGlhX3ZlcnNpb24pOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKLQllcnIgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUob3NzdF9jbGFzc19tZW1iZXIsCi0JCQkJICAgICAgICZjbGFzc19kZXZpY2VfYXR0cl9jYXBhY2l0eSk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9zc3RfbWVtYmVyLCAmZGV2X2F0dHJfY2FwYWNpdHkpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKLQllcnIgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUob3NzdF9jbGFzc19tZW1iZXIsCi0JCQkJICAgICAgICZjbGFzc19kZXZpY2VfYXR0cl9CT1RfZnJhbWUpOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShvc3N0X21lbWJlciwgJmRldl9hdHRyX0JPVF9mcmFtZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwotCWVyciA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShvc3N0X2NsYXNzX21lbWJlciwKLQkJCQkgICAgICAgJmNsYXNzX2RldmljZV9hdHRyX0VPRF9mcmFtZSk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9zc3RfbWVtYmVyLCAmZGV2X2F0dHJfRU9EX2ZyYW1lKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7Ci0JZXJyID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKG9zc3RfY2xhc3NfbWVtYmVyLAotCQkJCSAgICAgICAmY2xhc3NfZGV2aWNlX2F0dHJfZmlsZV9jb3VudCk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9zc3RfbWVtYmVyLCAmZGV2X2F0dHJfZmlsZV9jb3VudCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwppbmRleCAzNDU0YTU3Li4wYmUyMzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKQEAgLTYzMiw5ICs2MzIsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLVNZTTUzQzUwMF9zaG93X3BpbyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitTWU01M0M1MDBfc2hvd19waW8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKlNIcCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKlNIcCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IHN5bTUzYzUwMF9kYXRhICpkYXRhID0KIAkgICAgKHN0cnVjdCBzeW01M2M1MDBfZGF0YSAqKVNIcC0+aG9zdGRhdGE7CiAKQEAgLTY0MiwxMCArNjQzLDExIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1TWU01M0M1MDBfc3RvcmVfcGlvKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorU1lNNTNDNTAwX3N0b3JlX3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IHBpbzsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpTSHAgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpTSHAgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBzeW01M2M1MDBfZGF0YSAqZGF0YSA9CiAJICAgIChzdHJ1Y3Qgc3ltNTNjNTAwX2RhdGEgKilTSHAtPmhvc3RkYXRhOwogCkBAIC02NjIsNyArNjY0LDcgQEAKICogIFNDU0kgSEJBIGRldmljZSBhdHRyaWJ1dGVzIHdlIHdhbnQgdG8KICogIG1ha2UgYXZhaWxhYmxlIHZpYSBzeXNmcy4KICovCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgU1lNNTNDNTAwX3Bpb19hdHRyID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIFNZTTUzQzUwMF9waW9fYXR0ciA9IHsKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAiZmFzdF9waW8iLAogCQkubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUiksCkBAIC02NzEsNyArNjczLDcgQEAKIAkuc3RvcmUgPSBTWU01M0M1MDBfc3RvcmVfcGlvLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpTWU01M0M1MDBfc2hvc3RfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqU1lNNTNDNTAwX3Nob3N0X2F0dHJzW10gPSB7CiAJJlNZTTUzQzUwMF9waW9fYXR0ciwKIAlOVUxMLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wczNyb20uYyBiL2RyaXZlcnMvc2NzaS9wczNyb20uYwppbmRleCAwY2Q2MTRhLi5jZTQ4ZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcHMzcm9tLmMKKysrIGIvZHJpdmVycy9zY3NpL3BzM3JvbS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogCiAjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KICNpbmNsdWRlIDxhc20vcHMzc3Rvci5oPgpAQCAtOTAsNzggKzkxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGNvcHkgZGF0YSBmcm9tIGRldmljZSBpbnRvIHNjYXR0ZXIvZ2F0aGVyIGJ1ZmZlcgotICovCi1zdGF0aWMgaW50IGZpbGxfZnJvbV9kZXZfYnVmZmVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgY29uc3Qgdm9pZCAqYnVmKQotewotCWludCBrLCByZXFfbGVuLCBhY3RfbGVuLCBsZW4sIGFjdGl2ZTsKLQl2b2lkICprYWRkcjsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNncG50OwotCXVuc2lnbmVkIGludCBidWZsZW47Ci0KLQlidWZsZW4gPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQlpZiAoIWJ1ZmxlbikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIXNjc2lfc2dsaXN0KGNtZCkpCi0JCXJldHVybiAtMTsKLQotCWFjdGl2ZSA9IDE7Ci0JcmVxX2xlbiA9IGFjdF9sZW4gPSAwOwotCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZ3BudCwgc2NzaV9zZ19jb3VudChjbWQpLCBrKSB7Ci0JCWlmIChhY3RpdmUpIHsKLQkJCWthZGRyID0ga21hcF9hdG9taWMoc2dfcGFnZShzZ3BudCksIEtNX0lSUTApOwotCQkJbGVuID0gc2dwbnQtPmxlbmd0aDsKLQkJCWlmICgocmVxX2xlbiArIGxlbikgPiBidWZsZW4pIHsKLQkJCQlhY3RpdmUgPSAwOwotCQkJCWxlbiA9IGJ1ZmxlbiAtIHJlcV9sZW47Ci0JCQl9Ci0JCQltZW1jcHkoa2FkZHIgKyBzZ3BudC0+b2Zmc2V0LCBidWYgKyByZXFfbGVuLCBsZW4pOwotCQkJZmx1c2hfa2VybmVsX2RjYWNoZV9wYWdlKHNnX3BhZ2Uoc2dwbnQpKTsKLQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX0lSUTApOwotCQkJYWN0X2xlbiArPSBsZW47Ci0JCX0KLQkJcmVxX2xlbiArPSBzZ3BudC0+bGVuZ3RoOwotCX0KLQlzY3NpX3NldF9yZXNpZChjbWQsIHJlcV9sZW4gLSBhY3RfbGVuKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNvcHkgZGF0YSBmcm9tIHNjYXR0ZXIvZ2F0aGVyIGludG8gZGV2aWNlJ3MgYnVmZmVyCi0gKi8KLXN0YXRpYyBpbnQgZmV0Y2hfdG9fZGV2X2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKmJ1ZikKLXsKLQlpbnQgaywgcmVxX2xlbiwgbGVuLCBmaW47Ci0Jdm9pZCAqa2FkZHI7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ3BudDsKLQl1bnNpZ25lZCBpbnQgYnVmbGVuOwotCi0JYnVmbGVuID0gc2NzaV9idWZmbGVuKGNtZCk7Ci0JaWYgKCFidWZsZW4pCi0JCXJldHVybiAwOwotCi0JaWYgKCFzY3NpX3NnbGlzdChjbWQpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXFfbGVuID0gZmluID0gMDsKLQlzY3NpX2Zvcl9lYWNoX3NnKGNtZCwgc2dwbnQsIHNjc2lfc2dfY291bnQoY21kKSwgaykgewotCQlrYWRkciA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2dwbnQpLCBLTV9JUlEwKTsKLQkJbGVuID0gc2dwbnQtPmxlbmd0aDsKLQkJaWYgKChyZXFfbGVuICsgbGVuKSA+IGJ1ZmxlbikgewotCQkJbGVuID0gYnVmbGVuIC0gcmVxX2xlbjsKLQkJCWZpbiA9IDE7Ci0JCX0KLQkJbWVtY3B5KGJ1ZiArIHJlcV9sZW4sIGthZGRyICsgc2dwbnQtPm9mZnNldCwgbGVuKTsKLQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fSVJRMCk7Ci0JCWlmIChmaW4pCi0JCQlyZXR1cm4gcmVxX2xlbiArIGxlbjsKLQkJcmVxX2xlbiArPSBzZ3BudC0+bGVuZ3RoOwotCX0KLQlyZXR1cm4gcmVxX2xlbjsKLX0KLQogc3RhdGljIGludCBwczNyb21fYXRhcGlfcmVxdWVzdChzdHJ1Y3QgcHMzX3N0b3JhZ2VfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IHNjc2lfY21uZCAqY21kKQogewpAQCAtMTk1LDkgKzEyNCw3IEBACiAJCWVsc2UKIAkJCWF0YXBpX2NtbmQucHJvdG8gPSBQSU9fREFUQV9PVVRfUFJPVE87CiAJCWF0YXBpX2NtbmQuaW5fb3V0ID0gRElSX1dSSVRFOwotCQlyZXMgPSBmZXRjaF90b19kZXZfYnVmZmVyKGNtZCwgZGV2LT5ib3VuY2VfYnVmKTsKLQkJaWYgKHJlcyA8IDApCi0JCQlyZXR1cm4gRElEX0VSUk9SIDw8IDE2OworCQlzY3NpX3NnX2NvcHlfdG9fYnVmZmVyKGNtZCwgZGV2LT5ib3VuY2VfYnVmLCBkZXYtPmJvdW5jZV9zaXplKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjY5LDkgKzE5Niw3IEBACiAJZGV2X2RiZygmZGV2LT5zYmQuY29yZSwgIiVzOiV1OiB3cml0ZSAldSBzZWN0b3JzIHN0YXJ0aW5nIGF0ICV1XG4iLAogCQlfX2Z1bmNfXywgX19MSU5FX18sIHNlY3RvcnMsIHN0YXJ0X3NlY3Rvcik7CiAKLQlyZXMgPSBmZXRjaF90b19kZXZfYnVmZmVyKGNtZCwgZGV2LT5ib3VuY2VfYnVmKTsKLQlpZiAocmVzIDwgMCkKLQkJcmV0dXJuIERJRF9FUlJPUiA8PCAxNjsKKwlzY3NpX3NnX2NvcHlfdG9fYnVmZmVyKGNtZCwgZGV2LT5ib3VuY2VfYnVmLCBkZXYtPmJvdW5jZV9zaXplKTsKIAogCXJlcyA9IGx2MV9zdG9yYWdlX3dyaXRlKGRldi0+c2JkLmRldl9pZCwKIAkJCQlkZXYtPnJlZ2lvbnNbZGV2LT5yZWdpb25faWR4XS5pZCwgc3RhcnRfc2VjdG9yLApAQCAtMzgxLDExICszMDYsMTMgQEAKIAlpZiAoIXN0YXR1cykgewogCQkvKiBPSywgY29tcGxldGVkICovCiAJCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgewotCQkJcmVzID0gZmlsbF9mcm9tX2Rldl9idWZmZXIoY21kLCBkZXYtPmJvdW5jZV9idWYpOwotCQkJaWYgKHJlcykgewotCQkJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KKwkJCWludCBsZW47CisKKwkJCWxlbiA9IHNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihjbWQsCisJCQkJCQkgICAgICAgZGV2LT5ib3VuY2VfYnVmLAorCQkJCQkJICAgICAgIGRldi0+Ym91bmNlX3NpemUpOworCisJCQlzY3NpX3NldF9yZXNpZChjbWQsIHNjc2lfYnVmZmxlbihjbWQpIC0gbGVuKTsKIAkJfQogCQljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKIAkJZ290byBkb25lOwpAQCAtNDA0LDExICszMzEsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JY21kLT5zZW5zZV9idWZmZXJbMF0gID0gMHg3MDsKLQljbWQtPnNlbnNlX2J1ZmZlclsyXSAgPSBzZW5zZV9rZXk7Ci0JY21kLT5zZW5zZV9idWZmZXJbN10gID0gMTYgLSA2OwotCWNtZC0+c2Vuc2VfYnVmZmVyWzEyXSA9IGFzYzsKLQljbWQtPnNlbnNlX2J1ZmZlclsxM10gPSBhc2NxOworCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDAsIGNtZC0+c2Vuc2VfYnVmZmVyLCBzZW5zZV9rZXksIGFzYywgYXNjcSk7CiAJY21kLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAKIGRvbmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwppbmRleCA2OGMwZDA5Li4wOWFiM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKQEAgLTMzMyw3ICszMzMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzY3LDEwICszNjYsNiBAQAogI2luY2x1ZGUgPGFzbS9zbi9pby5oPgogI2VuZGlmCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCAweDAyMDYwMAotI2Vycm9yICJLZXJuZWxzIG9sZGVyIHRoYW4gMi42LjAgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQiCi0jZW5kaWYKLQogCiAvKgogICogQ29tcGlsZSB0aW1lIE9wdGlvbnM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9LY29uZmlnIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvS2NvbmZpZwppbmRleCA4Yzg2NWI5Li42MjA4ZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L0tjb25maWcKQEAgLTE2LDcgKzE2LDggQEAKIAkyMnh4ICAgICAgICAgICAgICBxbDIyMDBfZncuYmluCiAJMjMwMCwgMjMxMiwgNjMxMiAgcWwyMzAwX2Z3LmJpbgogCTIzMjIsIDYzMjIgICAgICAgIHFsMjMyMl9mdy5iaW4KLQkyNHh4ICAgICAgICAgICAgICBxbDI0MDBfZncuYmluCisJMjR4eCwgNTR4eCAgICAgICAgcWwyNDAwX2Z3LmJpbgorCTI1eHggICAgICAgICAgICAgIHFsMjUwMF9mdy5iaW4KIAogCVVwb24gcmVxdWVzdCwgdGhlIGRyaXZlciBjYWNoZXMgdGhlIGZpcm13YXJlIGltYWdlIHVudGlsCiAJdGhlIGRyaXZlciBpcyB1bmxvYWRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDQ4OTRkYzguLmQ2MWRmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtNTMwLDE1ICs1MzAsMTcgQEAKIC8qIFNjc2lfSG9zdCBhdHRyaWJ1dGVzLiAqLwogCiBzdGF0aWMgc3NpemVfdAotcWxhMngwMF9kcnZyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitxbGEyeDAwX2RydnJfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcWxhMngwMF92ZXJzaW9uX3N0cik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX2Z3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitxbGEyeDAwX2Z3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKIAljaGFyIGZ3X3N0clszMF07CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKQEAgLTU0Niw5ICs1NDgsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfc2VyaWFsX251bV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3FsYTJ4MDBfc2VyaWFsX251bV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCXVpbnQzMl90IHNuOwogCiAJaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkpCkBAIC01NjAsNDAgKzU2Myw0NSBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotcWxhMngwMF9pc3BfbmFtZV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3FsYTJ4MDBfaXNwX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjaGFyICpidWYpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIklTUCUwNFhcbiIsIGhhLT5wZGV2LT5kZXZpY2UpOwogfQogCiBzdGF0aWMgc3NpemVfdAotcWxhMngwMF9pc3BfaWRfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitxbGEyeDAwX2lzcF9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjaGFyICpidWYpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCiAJICAgIGhhLT5wcm9kdWN0X2lkWzBdLCBoYS0+cHJvZHVjdF9pZFsxXSwgaGEtPnByb2R1Y3RfaWRbMl0sCiAJICAgIGhhLT5wcm9kdWN0X2lkWzNdKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfbW9kZWxfbmFtZV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3FsYTJ4MDBfbW9kZWxfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBoYS0+bW9kZWxfbnVtYmVyKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfbW9kZWxfZGVzY19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3FsYTJ4MDBfbW9kZWxfZGVzY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAogCSAgICBoYS0+bW9kZWxfZGVzYyA/IGhhLT5tb2RlbF9kZXNjOiAiIik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX3BjaV9pbmZvX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorcWxhMngwMF9wY2lfaW5mb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChjZGV2KSk7CisJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAJY2hhciBwY2lfaW5mb1szMF07CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKQEAgLTYwMSw5ICs2MDksMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfc3RhdGVfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitxbGEyeDAwX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgY2hhciAqYnVmKQogewotCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKIAlpbnQgbGVuID0gMDsKIAogCWlmIChhdG9taWNfcmVhZCgmaGEtPmxvb3Bfc3RhdGUpID09IExPT1BfRE9XTiB8fApAQCAtNjM5LDkgKzY0OCwxMCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotcWxhMngwMF96aW9fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitxbGEyeDAwX3ppb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSBjaGFyICpidWYpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCWludCBsZW4gPSAwOwogCiAJc3dpdGNoIChoYS0+emlvX21vZGUpIHsKQEAgLTY1Niw5ICs2NjYsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfemlvX3N0b3JlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorcWxhMngwMF96aW9fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChjZGV2KSk7CisJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAJaW50IHZhbCA9IDA7CiAJdWludDE2X3QgemlvX21vZGU7CiAKQEAgLTY4MiwxOCArNjkzLDE5IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX3ppb190aW1lcl9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3FsYTJ4MDBfemlvX3RpbWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNoYXIgKmJ1ZikKIHsKLQlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChjZGV2KSk7CisJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCB1c1xuIiwgaGEtPnppb190aW1lciAqIDEwMCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX3ppb190aW1lcl9zdG9yZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0gICAgc2l6ZV90IGNvdW50KQorcWxhMngwMF96aW9fdGltZXJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKIAlpbnQgdmFsID0gMDsKIAl1aW50MTZfdCB6aW9fdGltZXI7CiAKQEAgLTcwOSw5ICs3MjEsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfYmVhY29uX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorcWxhMngwMF9iZWFjb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgY2hhciAqYnVmKQogewotCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKIAlpbnQgbGVuID0gMDsKIAogCWlmIChoYS0+YmVhY29uX2JsaW5rX2xlZCkKQEAgLTcyMiwxMCArNzM1LDEwIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX2JlYWNvbl9zdG9yZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0gICAgc2l6ZV90IGNvdW50KQorcWxhMngwMF9iZWFjb25fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChjZGV2KSk7CisJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAJaW50IHZhbCA9IDA7CiAJaW50IHJ2YWw7CiAKQEAgLTc1Myw4NCArNzY2LDg2IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX29wdHJvbV9iaW9zX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitxbGEyeDAwX29wdHJvbV9iaW9zX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQuJTAyZFxuIiwgaGEtPmJpb3NfcmV2aXNpb25bMV0sCiAJICAgIGhhLT5iaW9zX3JldmlzaW9uWzBdKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfb3B0cm9tX2VmaV92ZXJzaW9uX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorcWxhMngwMF9vcHRyb21fZWZpX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChjZGV2KSk7CisJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZC4lMDJkXG4iLCBoYS0+ZWZpX3JldmlzaW9uWzFdLAogCSAgICBoYS0+ZWZpX3JldmlzaW9uWzBdKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLXFsYTJ4MDBfb3B0cm9tX2Zjb2RlX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitxbGEyeDAwX29wdHJvbV9mY29kZV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChjZGV2KSk7CisJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZC4lMDJkXG4iLCBoYS0+ZmNvZGVfcmV2aXNpb25bMV0sCiAJICAgIGhhLT5mY29kZV9yZXZpc2lvblswXSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX29wdHJvbV9md192ZXJzaW9uX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorcWxhMngwMF9vcHRyb21fZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKwlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkLiUwMmQuJTAyZCAlZFxuIiwKIAkgICAgaGEtPmZ3X3JldmlzaW9uWzBdLCBoYS0+ZndfcmV2aXNpb25bMV0sIGhhLT5md19yZXZpc2lvblsyXSwKIAkgICAgaGEtPmZ3X3JldmlzaW9uWzNdKTsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGRyaXZlcl92ZXJzaW9uLCBTX0lSVUdPLCBxbGEyeDAwX2RydnJfdmVyc2lvbl9zaG93LAotCU5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZ3X3ZlcnNpb24sIFNfSVJVR08sIHFsYTJ4MDBfZndfdmVyc2lvbl9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzZXJpYWxfbnVtLCBTX0lSVUdPLCBxbGEyeDAwX3NlcmlhbF9udW1fc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaXNwX25hbWUsIFNfSVJVR08sIHFsYTJ4MDBfaXNwX25hbWVfc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaXNwX2lkLCBTX0lSVUdPLCBxbGEyeDAwX2lzcF9pZF9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtb2RlbF9uYW1lLCBTX0lSVUdPLCBxbGEyeDAwX21vZGVsX25hbWVfc2hvdywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobW9kZWxfZGVzYywgU19JUlVHTywgcWxhMngwMF9tb2RlbF9kZXNjX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHBjaV9pbmZvLCBTX0lSVUdPLCBxbGEyeDAwX3BjaV9pbmZvX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHN0YXRlLCBTX0lSVUdPLCBxbGEyeDAwX3N0YXRlX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHppbywgU19JUlVHTyB8IFNfSVdVU1IsIHFsYTJ4MDBfemlvX3Nob3csCi0gICAgcWxhMngwMF96aW9fc3RvcmUpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHppb190aW1lciwgU19JUlVHTyB8IFNfSVdVU1IsIHFsYTJ4MDBfemlvX3RpbWVyX3Nob3csCi0gICAgcWxhMngwMF96aW9fdGltZXJfc3RvcmUpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJlYWNvbiwgU19JUlVHTyB8IFNfSVdVU1IsIHFsYTJ4MDBfYmVhY29uX3Nob3csCi0gICAgcWxhMngwMF9iZWFjb25fc3RvcmUpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG9wdHJvbV9iaW9zX3ZlcnNpb24sIFNfSVJVR08sCi0gICAgcWxhMngwMF9vcHRyb21fYmlvc192ZXJzaW9uX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG9wdHJvbV9lZmlfdmVyc2lvbiwgU19JUlVHTywKLSAgICBxbGEyeDAwX29wdHJvbV9lZmlfdmVyc2lvbl9zaG93LCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihvcHRyb21fZmNvZGVfdmVyc2lvbiwgU19JUlVHTywKLSAgICBxbGEyeDAwX29wdHJvbV9mY29kZV92ZXJzaW9uX3Nob3csIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG9wdHJvbV9md192ZXJzaW9uLCBTX0lSVUdPLAotICAgIHFsYTJ4MDBfb3B0cm9tX2Z3X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZHJpdmVyX3ZlcnNpb24sIFNfSVJVR08sIHFsYTJ4MDBfZHJ2cl92ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGZ3X3ZlcnNpb24sIFNfSVJVR08sIHFsYTJ4MDBfZndfdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzZXJpYWxfbnVtLCBTX0lSVUdPLCBxbGEyeDAwX3NlcmlhbF9udW1fc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaXNwX25hbWUsIFNfSVJVR08sIHFsYTJ4MDBfaXNwX25hbWVfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaXNwX2lkLCBTX0lSVUdPLCBxbGEyeDAwX2lzcF9pZF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlbF9uYW1lLCBTX0lSVUdPLCBxbGEyeDAwX21vZGVsX25hbWVfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kZWxfZGVzYywgU19JUlVHTywgcWxhMngwMF9tb2RlbF9kZXNjX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBjaV9pbmZvLCBTX0lSVUdPLCBxbGEyeDAwX3BjaV9pbmZvX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN0YXRlLCBTX0lSVUdPLCBxbGEyeDAwX3N0YXRlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHppbywgU19JUlVHTyB8IFNfSVdVU1IsIHFsYTJ4MDBfemlvX3Nob3csIHFsYTJ4MDBfemlvX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih6aW9fdGltZXIsIFNfSVJVR08gfCBTX0lXVVNSLCBxbGEyeDAwX3ppb190aW1lcl9zaG93LAorCQkgICBxbGEyeDAwX3ppb190aW1lcl9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmVhY29uLCBTX0lSVUdPIHwgU19JV1VTUiwgcWxhMngwMF9iZWFjb25fc2hvdywKKwkJICAgcWxhMngwMF9iZWFjb25fc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKG9wdHJvbV9iaW9zX3ZlcnNpb24sIFNfSVJVR08sCisJCSAgIHFsYTJ4MDBfb3B0cm9tX2Jpb3NfdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihvcHRyb21fZWZpX3ZlcnNpb24sIFNfSVJVR08sCisJCSAgIHFsYTJ4MDBfb3B0cm9tX2VmaV92ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG9wdHJvbV9mY29kZV92ZXJzaW9uLCBTX0lSVUdPLAorCQkgICBxbGEyeDAwX29wdHJvbV9mY29kZV92ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG9wdHJvbV9md192ZXJzaW9uLCBTX0lSVUdPLCBxbGEyeDAwX29wdHJvbV9md192ZXJzaW9uX3Nob3csCisJCSAgIE5VTEwpOwogCi1zdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcWxhMngwMF9ob3N0X2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX2RyaXZlcl92ZXJzaW9uLAotCSZjbGFzc19kZXZpY2VfYXR0cl9md192ZXJzaW9uLAotCSZjbGFzc19kZXZpY2VfYXR0cl9zZXJpYWxfbnVtLAotCSZjbGFzc19kZXZpY2VfYXR0cl9pc3BfbmFtZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaXNwX2lkLAotCSZjbGFzc19kZXZpY2VfYXR0cl9tb2RlbF9uYW1lLAotCSZjbGFzc19kZXZpY2VfYXR0cl9tb2RlbF9kZXNjLAotCSZjbGFzc19kZXZpY2VfYXR0cl9wY2lfaW5mbywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfc3RhdGUsCi0JJmNsYXNzX2RldmljZV9hdHRyX3ppbywKLQkmY2xhc3NfZGV2aWNlX2F0dHJfemlvX3RpbWVyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9iZWFjb24sCi0JJmNsYXNzX2RldmljZV9hdHRyX29wdHJvbV9iaW9zX3ZlcnNpb24sCi0JJmNsYXNzX2RldmljZV9hdHRyX29wdHJvbV9lZmlfdmVyc2lvbiwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfb3B0cm9tX2Zjb2RlX3ZlcnNpb24sCi0JJmNsYXNzX2RldmljZV9hdHRyX29wdHJvbV9md192ZXJzaW9uLAorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnFsYTJ4MDBfaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9kcml2ZXJfdmVyc2lvbiwKKwkmZGV2X2F0dHJfZndfdmVyc2lvbiwKKwkmZGV2X2F0dHJfc2VyaWFsX251bSwKKwkmZGV2X2F0dHJfaXNwX25hbWUsCisJJmRldl9hdHRyX2lzcF9pZCwKKwkmZGV2X2F0dHJfbW9kZWxfbmFtZSwKKwkmZGV2X2F0dHJfbW9kZWxfZGVzYywKKwkmZGV2X2F0dHJfcGNpX2luZm8sCisJJmRldl9hdHRyX3N0YXRlLAorCSZkZXZfYXR0cl96aW8sCisJJmRldl9hdHRyX3ppb190aW1lciwKKwkmZGV2X2F0dHJfYmVhY29uLAorCSZkZXZfYXR0cl9vcHRyb21fYmlvc192ZXJzaW9uLAorCSZkZXZfYXR0cl9vcHRyb21fZWZpX3ZlcnNpb24sCisJJmRldl9hdHRyX29wdHJvbV9mY29kZV92ZXJzaW9uLAorCSZkZXZfYXR0cl9vcHRyb21fZndfdmVyc2lvbiwKIAlOVUxMLAogfTsKIApAQCAtODQ5LDIwICs4NjQsMjAgQEAKIHFsYTJ4MDBfZ2V0X2hvc3Rfc3BlZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHRvX3FsYV9wYXJlbnQoc2hvc3RfcHJpdihzaG9zdCkpOwotCXVpbnQzMl90IHNwZWVkID0gMDsKKwl1MzIgc3BlZWQgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKIAogCXN3aXRjaCAoaGEtPmxpbmtfZGF0YV9yYXRlKSB7CiAJY2FzZSBQT1JUX1NQRUVEXzFHQjoKLQkJc3BlZWQgPSAxOworCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF8xR0JJVDsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX1NQRUVEXzJHQjoKLQkJc3BlZWQgPSAyOworCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF8yR0JJVDsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX1NQRUVEXzRHQjoKLQkJc3BlZWQgPSA0OworCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF80R0JJVDsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX1NQRUVEXzhHQjoKLQkJc3BlZWQgPSA4OworCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF84R0JJVDsKIAkJYnJlYWs7CiAJfQogCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gc3BlZWQ7CkBAIC05MDAsNyArOTE1LDggQEAKIAl1NjQgbm9kZV9uYW1lID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmaGEtPmZjcG9ydHMsIGxpc3QpIHsKLQkJaWYgKHN0YXJnZXQtPmlkID09IGZjcG9ydC0+b3NfdGFyZ2V0X2lkKSB7CisJCWlmIChmY3BvcnQtPnJwb3J0ICYmCisJCSAgICBzdGFyZ2V0LT5pZCA9PSBmY3BvcnQtPnJwb3J0LT5zY3NpX3RhcmdldF9pZCkgewogCQkJbm9kZV9uYW1lID0gd3duX3RvX3U2NChmY3BvcnQtPm5vZGVfbmFtZSk7CiAJCQlicmVhazsKIAkJfQpAQCAtOTE4LDcgKzkzNCw4IEBACiAJdTY0IHBvcnRfbmFtZSA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJmhhLT5mY3BvcnRzLCBsaXN0KSB7Ci0JCWlmIChzdGFyZ2V0LT5pZCA9PSBmY3BvcnQtPm9zX3RhcmdldF9pZCkgeworCQlpZiAoZmNwb3J0LT5ycG9ydCAmJgorCQkgICAgc3RhcmdldC0+aWQgPT0gZmNwb3J0LT5ycG9ydC0+c2NzaV90YXJnZXRfaWQpIHsKIAkJCXBvcnRfbmFtZSA9IHd3bl90b191NjQoZmNwb3J0LT5wb3J0X25hbWUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTkzNiw3ICs5NTMsOCBAQAogCXVpbnQzMl90IHBvcnRfaWQgPSB+MFU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJmhhLT5mY3BvcnRzLCBsaXN0KSB7Ci0JCWlmIChzdGFyZ2V0LT5pZCA9PSBmY3BvcnQtPm9zX3RhcmdldF9pZCkgeworCQlpZiAoZmNwb3J0LT5ycG9ydCAmJgorCQkgICAgc3RhcmdldC0+aWQgPT0gZmNwb3J0LT5ycG9ydC0+c2NzaV90YXJnZXRfaWQpIHsKIAkJCXBvcnRfaWQgPSBmY3BvcnQtPmRfaWQuYi5kb21haW4gPDwgMTYgfAogCQkJICAgIGZjcG9ydC0+ZF9pZC5iLmFyZWEgPDwgOCB8IGZjcG9ydC0+ZF9pZC5iLmFsX3BhOwogCQkJYnJlYWs7CkBAIC0xMTk2LDYgKzEyMTQsNyBAQAogCS5zaG93X2hvc3Rfbm9kZV9uYW1lID0gMSwKIAkuc2hvd19ob3N0X3BvcnRfbmFtZSA9IDEsCiAJLnNob3dfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyA9IDEsCisJLnNob3dfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzID0gMSwKIAogCS5nZXRfaG9zdF9wb3J0X2lkID0gcWxhMngwMF9nZXRfaG9zdF9wb3J0X2lkLAogCS5zaG93X2hvc3RfcG9ydF9pZCA9IDEsCkBAIC0xMjc2LDkgKzEyOTUsMjMgQEAKIHZvaWQKIHFsYTJ4MDBfaW5pdF9ob3N0X2F0dHIoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKKwl1MzIgc3BlZWQgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKKwogCWZjX2hvc3Rfbm9kZV9uYW1lKGhhLT5ob3N0KSA9IHd3bl90b191NjQoaGEtPm5vZGVfbmFtZSk7CiAJZmNfaG9zdF9wb3J0X25hbWUoaGEtPmhvc3QpID0gd3duX3RvX3U2NChoYS0+cG9ydF9uYW1lKTsKIAlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKGhhLT5ob3N0KSA9IEZDX0NPU19DTEFTUzM7CiAJZmNfaG9zdF9tYXhfbnBpdl92cG9ydHMoaGEtPmhvc3QpID0gaGEtPm1heF9ucGl2X3Zwb3J0czs7CiAJZmNfaG9zdF9ucGl2X3Zwb3J0c19pbnVzZShoYS0+aG9zdCkgPSBoYS0+Y3VyX3Zwb3J0X2NvdW50OworCisJaWYgKElTX1FMQTI1WFgoaGEpKQorCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF84R0JJVCB8IEZDX1BPUlRTUEVFRF80R0JJVCB8CisJCSAgICBGQ19QT1JUU1BFRURfMkdCSVQgfCBGQ19QT1JUU1BFRURfMUdCSVQ7CisJZWxzZSBpZiAoSVNfUUxBMjRYWF9UWVBFKGhhKSkKKwkJc3BlZWQgPSBGQ19QT1JUU1BFRURfNEdCSVQgfCBGQ19QT1JUU1BFRURfMkdCSVQgfAorCQkgICAgRkNfUE9SVFNQRUVEXzFHQklUOworCWVsc2UgaWYgKElTX1FMQTIzWFgoaGEpKQorCQlzcGVlZCA9IEZDX1BPUlRTUEVFRF8yR0JJVCB8IEZDX1BPUlRTUEVFRF8xR0JJVDsKKwllbHNlCisJCXNwZWVkID0gRkNfUE9SVFNQRUVEXzFHQklUOworCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhoYS0+aG9zdCkgPSBzcGVlZDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYwppbmRleCBkODhlOThjLi45ZDEyZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xNDEwLDEyNSArMTQxMCwzIEBACiAJaWYgKGNudCAlIDE2KQogCQlwcmludGsoIlxuIik7CiB9Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICBxbGEyeDAwX3ByaW50X3Njc2lfY21kCi0gKgkgRHVtcHMgb3V0IGluZm8gYWJvdXQgdGhlIHNjc2kgY21kIGFuZCBzcmIuCi0gKiAgIElucHV0Ci0gKgkgY21kIDogc3RydWN0IHNjc2lfY21uZAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotcWxhMngwMF9wcmludF9zY3NpX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICogY21kKQotewotCWludCBpOwotCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYTsKLQlzcmJfdCAqc3A7Ci0KLQloYSA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOwotCi0Jc3AgPSAoc3JiX3QgKikgY21kLT5TQ3AucHRyOwotCXByaW50aygiU0NTSSBDb21tYW5kIEA9MHglcCwgSGFuZGxlPTB4JXBcbiIsIGNtZCwgY21kLT5ob3N0X3NjcmliYmxlKTsKLQlwcmludGsoIiAgY2hhbj0weCUwMngsIHRhcmdldD0weCUwMngsIGx1bj0weCUwMngsIGNtZF9sZW49MHglMDJ4XG4iLAotCSAgICBjbWQtPmRldmljZS0+Y2hhbm5lbCwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLAotCSAgICBjbWQtPmNtZF9sZW4pOwotCXByaW50aygiIENEQjogIik7Ci0JZm9yIChpID0gMDsgaSA8IGNtZC0+Y21kX2xlbjsgaSsrKSB7Ci0JCXByaW50aygiMHglMDJ4ICIsIGNtZC0+Y21uZFtpXSk7Ci0JfQotCXByaW50aygiXG4gIHNlZ19jbnQ9JWQsIGFsbG93ZWQ9JWQsIHJldHJpZXM9JWRcbiIsCi0JICAgICAgIHNjc2lfc2dfY291bnQoY21kKSwgY21kLT5hbGxvd2VkLCBjbWQtPnJldHJpZXMpOwotCXByaW50aygiICByZXF1ZXN0IGJ1ZmZlcj0weCVwLCByZXF1ZXN0IGJ1ZmZlciBsZW49MHgleFxuIiwKLQkgICAgICAgc2NzaV9zZ2xpc3QoY21kKSwgc2NzaV9idWZmbGVuKGNtZCkpOwotCXByaW50aygiICB0YWc9JWQsIHRyYW5zZmVyc2l6ZT0weCV4XG4iLAotCSAgICBjbWQtPnRhZywgY21kLT50cmFuc2ZlcnNpemUpOwotCXByaW50aygiICBzZXJpYWxfbnVtYmVyPSVseCwgU1A9JXBcbiIsIGNtZC0+c2VyaWFsX251bWJlciwgc3ApOwotCXByaW50aygiICBkYXRhIGRpcmVjdGlvbj0lZFxuIiwgY21kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0KLQlpZiAoIXNwKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIiAgc3AgZmxhZ3M9MHgleFxuIiwgc3AtPmZsYWdzKTsKLX0KLQotI2lmIGRlZmluZWQoUUxfREVCVUdfUk9VVElORVMpCi0vKgotICogcWxhMngwMF9mb3JtYXR0ZWRfZHVtcF9idWZmZXIKLSAqICAgICAgIFByaW50cyBzdHJpbmcgcGx1cyBidWZmZXIuCi0gKgotICogSW5wdXQ6Ci0gKiAgICAgICBzdHJpbmcgID0gTnVsbCB0ZXJtaW5hdGVkIHN0cmluZyAobm8gbmV3bGluZSBhdCBlbmQpLgotICogICAgICAgYnVmZmVyICA9IGJ1ZmZlciBhZGRyZXNzLgotICogICAgICAgd2Rfc2l6ZSA9IHdvcmQgc2l6ZSA4LCAxNiwgMzIgb3IgNjQgYml0cwotICogICAgICAgY291bnQgICA9IG51bWJlciBvZiB3b3Jkcy4KLSAqLwotdm9pZAotcWxhMngwMF9mb3JtYXR0ZWRfZHVtcF9idWZmZXIoY2hhciAqc3RyaW5nLCB1aW50OF90ICogYnVmZmVyLAotCQkJCXVpbnQ4X3Qgd2Rfc2l6ZSwgdWludDMyX3QgY291bnQpCi17Ci0JdWludDMyX3QgY250OwotCXVpbnQxNl90ICpidWYxNjsKLQl1aW50MzJfdCAqYnVmMzI7Ci0KLQlpZiAoc3RyY21wKHN0cmluZywgIiIpICE9IDApCi0JCXByaW50aygiJXNcbiIsc3RyaW5nKTsKLQotCXN3aXRjaCAod2Rfc2l6ZSkgewotCQljYXNlIDg6Ci0JCQlwcmludGsoIiAwICAgIDEgICAgMiAgICAzICAgIDQgICAgNSAgICA2ICAgIDcgICAgIgotCQkJCSI4ICAgIDkgICAgQWggICBCaCAgIENoICAgRGggICBFaCAgIEZoXG4iKTsKLQkJCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0JCQkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCi0JCQlmb3IgKGNudCA9IDE7IGNudCA8PSBjb3VudDsgY250KyssIGJ1ZmZlcisrKSB7Ci0JCQkJcHJpbnRrKCIlMDJ4IiwqYnVmZmVyKTsKLQkJCQlpZiAoY250ICUgMTYgPT0gMCkKLQkJCQkJcHJpbnRrKCJcbiIpOwotCQkJCWVsc2UKLQkJCQkJcHJpbnRrKCIgICIpOwotCQkJfQotCQkJaWYgKGNudCAlIDE2ICE9IDApCi0JCQkJcHJpbnRrKCJcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTY6Ci0JCQlwcmludGsoIiAgIDAgICAgICAyICAgICAgNCAgICAgIDYgICAgICA4ICAgICAgQWggIgotCQkJCSIJQ2ggICAgIEVoXG4iKTsKLQkJCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0JCQkJIi0tLS0tLS0tLS0tLS1cbiIpOwotCi0JCQlidWYxNiA9ICh1aW50MTZfdCAqKSBidWZmZXI7Ci0JCQlmb3IgKGNudCA9IDE7IGNudCA8PSBjb3VudDsgY250KyssIGJ1ZjE2KyspIHsKLQkJCQlwcmludGsoIiU0eCIsKmJ1ZjE2KTsKLQotCQkJCWlmIChjbnQgJSA4ID09IDApCi0JCQkJCXByaW50aygiXG4iKTsKLQkJCQllbHNlIGlmICgqYnVmMTYgPCAxMCkKLQkJCQkJcHJpbnRrKCIgICAiKTsKLQkJCQllbHNlCi0JCQkJCXByaW50aygiICAiKTsKLQkJCX0KLQkJCWlmIChjbnQgJSA4ICE9IDApCi0JCQkJcHJpbnRrKCJcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzI6Ci0JCQlwcmludGsoIiAgICAgICAwICAgICAgICAgIDQgICAgICAgICAgOCAgICAgICAgICBDaFxuIik7Ci0JCQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLQkJCWJ1ZjMyID0gKHVpbnQzMl90ICopIGJ1ZmZlcjsKLQkJCWZvciAoY250ID0gMTsgY250IDw9IGNvdW50OyBjbnQrKywgYnVmMzIrKykgewotCQkJCXByaW50aygiJTh4IiwgKmJ1ZjMyKTsKLQotCQkJCWlmIChjbnQgJSA0ID09IDApCi0JCQkJCXByaW50aygiXG4iKTsKLQkJCQllbHNlIGlmICgqYnVmMzIgPCAxMCkKLQkJCQkJcHJpbnRrKCIgICAiKTsKLQkJCQllbHNlCi0JCQkJCXByaW50aygiICAiKTsKLQkJCX0KLQkJCWlmIChjbnQgJSA0ICE9IDApCi0JCQkJcHJpbnRrKCJcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQl9Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaAppbmRleCA1MjQ1OThhLi4yZTljMGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0yMiwxOSArMjIsNyBAQAogLyogI2RlZmluZSBRTF9ERUJVR19MRVZFTF8xMyAqLyAvKiBPdXRwdXQgZmRtaSBmdW5jdGlvbiB0cmFjZSBtc2dzICovCiAvKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE0ICovIC8qIE91dHB1dCBSU0NOIHRyYWNlIG1zZ3MgKi8KIC8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTUgKi8gLyogT3V0cHV0IE5QSVYgdHJhY2UgbXNncyAqLwotLyoKLSAqICBMb2NhbCBNYWNybyBEZWZpbml0aW9ucy4KLSAqLwotI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMSkgIHx8IGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMikgfHwgXAotICAgIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMykgIHx8IGRlZmluZWQoUUxfREVCVUdfTEVWRUxfNCkgfHwgXAotICAgIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfNSkgIHx8IGRlZmluZWQoUUxfREVCVUdfTEVWRUxfNikgfHwgXAotICAgIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfNykgIHx8IGRlZmluZWQoUUxfREVCVUdfTEVWRUxfOCkgfHwgXAotICAgIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfOSkgIHx8IGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTApIHx8IFwKLSAgICBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzExKSB8fCBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzEyKSB8fCBcCi0gICAgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xMykgfHwgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xNCkgfHwgXAotICAgIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTUpCi0gICAgI2RlZmluZSBRTF9ERUJVR19ST1VUSU5FUwotI2VuZGlmCisvKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE2ICovIC8qIE91dHB1dCBJU1A4NFhYIHRyYWNlIG1zZ3MgKi8KIAogLyoKICogTWFjcm9zIHVzZSBmb3IgZGVidWdnaW5nIHRoZSBkcml2ZXIuCkBAIC01NCw2ICs0Miw3IEBACiAjZGVmaW5lIERFQlVHMl85XzEwKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKICNkZWZpbmUgREVCVUcyXzExKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKICNkZWZpbmUgREVCVUcyXzEzKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUcyXzE2KHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKIAogI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMykKICNkZWZpbmUgREVCVUczKHgpCWRvIHt4O30gd2hpbGUgKDApCkBAIC0xMzMsNiArMTIyLDEyIEBACiAjZGVmaW5lIERFQlVHMTUoeCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTYpCisjZGVmaW5lIERFQlVHMTYoeCkJZG8ge3g7fSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERFQlVHMTYoeCkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKwogLyoKICAqIEZpcm13YXJlIER1bXAgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IDM3NTAzMTkuLjI5OWVjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA1IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTI0LDcgKzI0LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KQEAgLTE5Miw5ICsxOTMsNiBAQAogCiAJdWludDE2X3QgZmxhZ3M7CiAKLQkvKiBTaW5nbGUgdHJhbnNmZXIgRE1BIGNvbnRleHQgKi8KLQlkbWFfYWRkcl90IGRtYV9oYW5kbGU7Ci0KIAl1aW50MzJfdCByZXF1ZXN0X3NlbnNlX2xlbmd0aDsKIAl1aW50OF90ICpyZXF1ZXN0X3NlbnNlX3B0cjsKIH0gc3JiX3Q7CkBAIC0xNTQyLDggKzE1NDAsNiBAQAogCWF0b21pY190IHN0YXRlOwogCXVpbnQzMl90IGZsYWdzOwogCi0JdW5zaWduZWQgaW50IG9zX3RhcmdldF9pZDsKLQogCWludCBwb3J0X2xvZ2luX3JldHJ5X2NvdW50OwogCWludCBsb2dpbl9yZXRyeTsKIAlhdG9taWNfdCBwb3J0X2Rvd25fdGltZXI7CkBAIC0xNjEzLDYgKzE2MDksNyBAQAogI2RlZmluZSBDVF9BQ0NFUFRfUkVTUE9OU0UJMHg4MDAyCiAjZGVmaW5lIENUX1JFQVNPTl9JTlZBTElEX0NPTU1BTkRfQ09ERQkweDAxCiAjZGVmaW5lIENUX1JFQVNPTl9DQU5OT1RfUEVSRk9STQkweDA5CisjZGVmaW5lIENUX1JFQVNPTl9DT01NQU5EX1VOU1VQUE9SVEVECTB4MGIKICNkZWZpbmUgQ1RfRVhQTF9BTFJFQURZX1JFR0lTVEVSRUQJMHgxMAogCiAjZGVmaW5lIE5TX05fUE9SVF9UWVBFCTB4MDEKQEAgLTIwNjMsNyArMjA2MCw4IEBACiAJdm9pZCAoKmRpc2FibGVfaW50cnMpIChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKIAogCWludCAoKmFib3J0X2NvbW1hbmQpIChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzcmJfdCAqKTsKLQlpbnQgKCphYm9ydF90YXJnZXQpIChzdHJ1Y3QgZmNfcG9ydCAqKTsKKwlpbnQgKCp0YXJnZXRfcmVzZXQpIChzdHJ1Y3QgZmNfcG9ydCAqLCB1bnNpZ25lZCBpbnQpOworCWludCAoKmx1bl9yZXNldCkgKHN0cnVjdCBmY19wb3J0ICosIHVuc2lnbmVkIGludCk7CiAJaW50ICgqZmFicmljX2xvZ2luKSAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgdWludDE2X3QsIHVpbnQ4X3QsCiAJCXVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQxNl90ICosIHVpbnQ4X3QpOwogCWludCAoKmZhYnJpY19sb2dvdXQpIChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCB1aW50MTZfdCwgdWludDhfdCwKQEAgLTIxMTcsNiArMjExNSw0NiBAQAogCiAjZGVmaW5lCVdBVENIX0lOVEVSVkFMCQkxICAgICAgIC8qIG51bWJlciBvZiBzZWNvbmRzICovCiAKKy8qIFdvcmsgZXZlbnRzLiAgKi8KK2VudW0gcWxhX3dvcmtfdHlwZSB7CisJUUxBX0VWVF9BRU4sCisJUUxBX0VWVF9IV0VfTE9HLAorfTsKKworCitzdHJ1Y3QgcWxhX3dvcmtfZXZ0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJZW51bSBxbGFfd29ya190eXBlCXR5cGU7CisJdTMyCQkJZmxhZ3M7CisjZGVmaW5lIFFMQV9FVlRfRkxBR19GUkVFCTB4MQorCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJZW51bSBmY19ob3N0X2V2ZW50X2NvZGUgY29kZTsKKwkJCXUzMiBkYXRhOworCQl9IGFlbjsKKwkJc3RydWN0IHsKKwkJCXVpbnQxNl90IGNvZGU7CisJCQl1aW50MTZfdCBkMSwgZDIsIGQzOworCQl9IGh3ZTsKKwl9IHU7Cit9OworCitzdHJ1Y3QgcWxhX2NoaXBfc3RhdGVfODR4eCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBrcmVmIGtyZWY7CisKKwl2b2lkICpidXM7CisJc3BpbmxvY2tfdCBhY2Nlc3NfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggZndfdXBkYXRlX211dGV4OworCXVpbnQzMl90IGZ3X3VwZGF0ZTsKKwl1aW50MzJfdCBvcF9md192ZXJzaW9uOworCXVpbnQzMl90IG9wX2Z3X3NpemU7CisJdWludDMyX3Qgb3BfZndfc2VxX3NpemU7CisJdWludDMyX3QgZGlhZ19md192ZXJzaW9uOworCXVpbnQzMl90IGdvbGRfZndfdmVyc2lvbjsKK307CisKIC8qCiAgKiBMaW51eCBIb3N0IEFkYXB0ZXIgc3RydWN0dXJlCiAgKi8KQEAgLTIxNTUsNiArMjE5Myw3IEBACiAJCXVpbnQzMl90ICAgICAgICB2c2FuX2VuYWJsZWQgICAgICAgICAgICA6MTsKIAkJdWludDMyX3QJbnBpdl9zdXBwb3J0ZWQJCToxOwogCQl1aW50MzJfdAlmY2VfZW5hYmxlZAkJOjE7CisJCXVpbnQzMl90CWh3X2V2ZW50X21hcmtlcl9mb3VuZAk6MTsKIAl9IGZsYWdzOwogCiAJYXRvbWljX3QJbG9vcF9zdGF0ZTsKQEAgLTIyMDQsNiArMjI0Myw3IEBACiAjZGVmaW5lCURGTEdfTk9fQ0FCTEUJCQlCSVRfNAogCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI1MzIJMHgyNTMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDg0MzIJMHg4NDMyCiAJdWludDMyX3QJZGV2aWNlX3R5cGU7CiAjZGVmaW5lIERUX0lTUDIxMDAJCQlCSVRfMAogI2RlZmluZSBEVF9JU1AyMjAwCQkJQklUXzEKQEAgLTIyMTcsNyArMjI1Nyw4IEBACiAjZGVmaW5lIERUX0lTUDU0MjIJCQlCSVRfOQogI2RlZmluZSBEVF9JU1A1NDMyCQkJQklUXzEwCiAjZGVmaW5lIERUX0lTUDI1MzIJCQlCSVRfMTEKLSNkZWZpbmUgRFRfSVNQX0xBU1QJCQkoRFRfSVNQMjUzMiA8PCAxKQorI2RlZmluZSBEVF9JU1A4NDMyCQkJQklUXzEyCisjZGVmaW5lIERUX0lTUF9MQVNUCQkJKERUX0lTUDg0MzIgPDwgMSkKIAogI2RlZmluZSBEVF9JSURNQQkJCUJJVF8yNgogI2RlZmluZSBEVF9GV0kyCQkJCUJJVF8yNwpAQCAtMjIzOSwxMiArMjI4MCwxNiBAQAogI2RlZmluZSBJU19RTEE1NDIyKGhhKQkoRFRfTUFTSyhoYSkgJiBEVF9JU1A1NDIyKQogI2RlZmluZSBJU19RTEE1NDMyKGhhKQkoRFRfTUFTSyhoYSkgJiBEVF9JU1A1NDMyKQogI2RlZmluZSBJU19RTEEyNTMyKGhhKQkoRFRfTUFTSyhoYSkgJiBEVF9JU1AyNTMyKQorI2RlZmluZSBJU19RTEE4NDMyKGhhKQkoRFRfTUFTSyhoYSkgJiBEVF9JU1A4NDMyKQogCiAjZGVmaW5lIElTX1FMQTIzWFgoaGEpCShJU19RTEEyMzAwKGhhKSB8fCBJU19RTEEyMzEyKGhhKSB8fCBJU19RTEEyMzIyKGhhKSB8fCBcCiAgICAgCQkJIElTX1FMQTYzMTIoaGEpIHx8IElTX1FMQTYzMjIoaGEpKQogI2RlZmluZSBJU19RTEEyNFhYKGhhKQkoSVNfUUxBMjQyMihoYSkgfHwgSVNfUUxBMjQzMihoYSkpCiAjZGVmaW5lIElTX1FMQTU0WFgoaGEpCShJU19RTEE1NDIyKGhhKSB8fCBJU19RTEE1NDMyKGhhKSkKICNkZWZpbmUgSVNfUUxBMjVYWChoYSkJKElTX1FMQTI1MzIoaGEpKQorI2RlZmluZSBJU19RTEE4NFhYKGhhKQkoSVNfUUxBODQzMihoYSkpCisjZGVmaW5lIElTX1FMQTI0WFhfVFlQRShoYSkJKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpIHx8IFwKKwkJCUlTX1FMQTg0WFgoaGEpKQogCiAjZGVmaW5lIElTX0lJRE1BX0NBUEFCTEUoaGEpCSgoaGEpLT5kZXZpY2VfdHlwZSAmIERUX0lJRE1BKQogI2RlZmluZSBJU19GV0kyX0NBUEFCTEUoaGEpCSgoaGEpLT5kZXZpY2VfdHlwZSAmIERUX0ZXSTIpCkBAIC0yMzU2LDYgKzI0MDEsOCBAQAogICAgICAgICB1aW50MzJfdAlsb2dpbl9yZXRyeV9jb3VudDsKIAlpbnQJCW1heF9xX2RlcHRoOwogCisJc3RydWN0IGxpc3RfaGVhZAl3b3JrX2xpc3Q7CisKIAkvKiBGaWJyZSBDaGFubmVsIERldmljZSBMaXN0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZmNwb3J0czsKIApAQCAtMjQyMyw4ICsyNDcwLDYgQEAKICNkZWZpbmUgIE1CWF9USU1FRE9VVAkJQklUXzUKICNkZWZpbmUgIE1CWF9BQ0NFU1NfVElNRURPVVQJQklUXzYKIAotCW1ieF9jbWRfdCAJbWM7Ci0KIAkvKiBCYXNpYyBmaXJtd2FyZSByZWxhdGVkIGluZm9ybWF0aW9uLiAqLwogCXVpbnQxNl90CWZ3X21ham9yX3ZlcnNpb247CiAJdWludDE2X3QJZndfbWlub3JfdmVyc2lvbjsKQEAgLTI0NTgsNiArMjUwMywxMCBAQAogCXVpbnQ2NF90CWZjZV93ciwgZmNlX3JkOwogCXN0cnVjdCBtdXRleAlmY2VfbXV0ZXg7CiAKKwl1aW50MzJfdAlod19ldmVudF9zdGFydDsKKwl1aW50MzJfdAlod19ldmVudF9wdHI7CisJdWludDMyX3QJaHdfZXZlbnRfcGF1c2VfZXJyb3JzOworCiAJdWludDhfdAkJaG9zdF9zdHJbMTZdOwogCXVpbnQzMl90CXBjaV9hdHRyOwogCXVpbnQxNl90CWNoaXBfcmV2aXNpb247CkBAIC0yNDkzLDYgKzI1NDIsMTMgQEAKIAl1aW50OF90CQlmY29kZV9yZXZpc2lvblsxNl07CiAJdWludDMyX3QJZndfcmV2aXNpb25bNF07CiAKKwl1aW50MTZfdAlmZHRfb2RkX2luZGV4OworCXVpbnQzMl90CWZkdF93cnRfZGlzYWJsZTsKKwl1aW50MzJfdAlmZHRfZXJhc2VfY21kOworCXVpbnQzMl90CWZkdF9ibG9ja19zaXplOworCXVpbnQzMl90CWZkdF91bnByb3RlY3Rfc2VjX2NtZDsKKwl1aW50MzJfdAlmZHRfcHJvdGVjdF9zZWNfY21kOworCiAJLyogTmVlZGVkIGZvciBCRUFDT04gKi8KIAl1aW50MTZfdAliZWFjb25fYmxpbmtfbGVkOwogCXVpbnQ4X3QJCWJlYWNvbl9jb2xvcl9zdGF0ZTsKQEAgLTI1MzgsNiArMjU5NCw4IEBACiAjZGVmaW5lIFZQX0VSUl9BREFQX05PUkVTT1VSQ0VTCTUKIAl1aW50MTZfdAltYXhfbnBpdl92cG9ydHM7CS8qIDYzIG9yIDEyNSBwZXIgdG9wb2xvdHkgKi8KIAlpbnQJCWN1cl92cG9ydF9jb3VudDsKKworCXN0cnVjdCBxbGFfY2hpcF9zdGF0ZV84NHh4ICpjczg0eHg7CiB9IHNjc2lfcWxhX2hvc3RfdDsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMKaW5kZXggMTQ3OWM2MC4uNTYxYTQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Rmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMjMsNyArMjMsNyBAQAogCW11dGV4X2xvY2soJmhhLT5mY2VfbXV0ZXgpOwogCiAJc2VxX3ByaW50ZihzLCAiRkNFIFRyYWNlIEJ1ZmZlclxuIik7Ci0Jc2VxX3ByaW50ZihzLCAiSW4gUG9pbnRlciA9ICVsbHhcblxuIiwgaGEtPmZjZV93cik7CisJc2VxX3ByaW50ZihzLCAiSW4gUG9pbnRlciA9ICVsbHhcblxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyloYS0+ZmNlX3dyKTsKIAlzZXFfcHJpbnRmKHMsICJCYXNlID0gJWxseFxuXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBoYS0+ZmNlX2RtYSk7CiAJc2VxX3ByaW50ZihzLCAiRkNFIEVuYWJsZSBSZWdpc3RlcnNcbiIpOwogCXNlcV9wcmludGYocywgIiUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAppbmRleCA5MzM3ZTEzLi4wNzhmMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtNzE5LDcgKzcxOSw3IEBACiAKIAl1aW50MTZfdCB0aW1lb3V0OwkJLyogQ29tbWFuZCB0aW1lb3V0LiAqLwogCi0JdWludDhfdCBsdW5bOF07CQkJLyogRkNQIExVTiAoQkUpLiAqLworCXN0cnVjdCBzY3NpX2x1biBsdW47CQkvKiBGQ1AgTFVOIChCRSkuICovCiAKIAl1aW50MzJfdCBjb250cm9sX2ZsYWdzOwkJLyogQ29udHJvbCBGbGFncy4gKi8KICNkZWZpbmUgVENGX05PVE1DTURfVE9fVEFSR0VUCUJJVF8zMQpAQCAtNzkzLDcgKzc5MywxOSBAQAogI2RlZmluZSBGQV9WUERfTlZSQU1fQUREUgkweDQ4MDAwCiAjZGVmaW5lIEZBX0ZFQVRVUkVfQUREUgkJMHg0QzAwMAogI2RlZmluZSBGQV9GTEFTSF9ERVNDUl9BRERSCTB4NTAwMDAKLSNkZWZpbmUgRkFfSFdfRVZFTlRfQUREUgkweDU0MDAwCisjZGVmaW5lIEZBX0hXX0VWRU5UMF9BRERSCTB4NTQwMDAKKyNkZWZpbmUgRkFfSFdfRVZFTlQxX0FERFIJMHg1NDIwMAorI2RlZmluZSBGQV9IV19FVkVOVF9TSVpFCTB4MjAwCisjZGVmaW5lIEZBX0hXX0VWRU5UX0VOVFJZX1NJWkUJNAorLyoKKyAqIEZsYXNoIEVycm9yIExvZyBFdmVudCBDb2Rlcy4KKyAqLworI2RlZmluZSBIV19FVkVOVF9SRVNFVF9FUlIJMHhGMDBCCisjZGVmaW5lIEhXX0VWRU5UX0lTUF9FUlIJMHhGMDIwCisjZGVmaW5lIEhXX0VWRU5UX1BBUklUWV9FUlIJMHhGMDIyCisjZGVmaW5lIEhXX0VWRU5UX05WUkFNX0NIS1NVTV9FUlIJMHhGMDIzCisjZGVmaW5lIEhXX0VWRU5UX0ZMQVNIX0ZXX0VSUgkweEYwMjQKKwogI2RlZmluZSBGQV9CT09UX0xPR19BRERSCTB4NTgwMDAKICNkZWZpbmUgRkFfRldfRFVNUDBfQUREUgkweDYwMDAwCiAjZGVmaW5lIEZBX0ZXX0RVTVAxX0FERFIJMHg3MDAwMApAQCAtMTE3NCw0ICsxMTg2LDE1OSBAQAogfTsKIAogLyogRU5EIE1JRCBTdXBwb3J0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGbGFzaCBEZXNjcmlwdGlvbiBUYWJsZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBxbGFfZmR0X2xheW91dCB7CisJdWludDhfdCBzaWdbNF07CisJdWludDE2X3QgdmVyc2lvbjsKKwl1aW50MTZfdCBsZW47CisJdWludDE2X3QgY2hlY2tzdW07CisJdWludDhfdCB1bnVzZWQxWzJdOworCXVpbnQ4X3QgbW9kZWxbMTZdOworCXVpbnQxNl90IG1hbl9pZDsKKwl1aW50MTZfdCBpZDsKKwl1aW50OF90IGZsYWdzOworCXVpbnQ4X3QgZXJhc2VfY21kOworCXVpbnQ4X3QgYWx0X2VyYXNlX2NtZDsKKwl1aW50OF90IHdydF9lbmFibGVfY21kOworCXVpbnQ4X3Qgd3J0X2VuYWJsZV9iaXRzOworCXVpbnQ4X3Qgd3J0X3N0c19yZWdfY21kOworCXVpbnQ4X3QgdW5wcm90ZWN0X3NlY19jbWQ7CisJdWludDhfdCByZWFkX21hbl9pZF9jbWQ7CisJdWludDMyX3QgYmxvY2tfc2l6ZTsKKwl1aW50MzJfdCBhbHRfYmxvY2tfc2l6ZTsKKwl1aW50MzJfdCBmbGFzaF9zaXplOworCXVpbnQzMl90IHdydF9lbmFibGVfZGF0YTsKKwl1aW50OF90IHJlYWRfaWRfYWRkcl9sZW47CisJdWludDhfdCB3cnRfZGlzYWJsZV9iaXRzOworCXVpbnQ4X3QgcmVhZF9kZXZfaWRfbGVuOworCXVpbnQ4X3QgY2hpcF9lcmFzZV9jbWQ7CisJdWludDE2X3QgcmVhZF90aW1lb3V0OworCXVpbnQ4X3QgcHJvdGVjdF9zZWNfY21kOworCXVpbnQ4X3QgdW51c2VkMls2NV07Cit9OworCisvKiA4NFhYIFN1cHBvcnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTUJBX0lTUDg0WFhfQUxFUlQJMHg4MDBmICAvKiBBbGVydCBOb3RpZmljYXRpb24uICovCisjZGVmaW5lIEE4NF9QQU5JQ19SRUNPVkVSWQkweDEKKyNkZWZpbmUgQTg0X09QX0xPR0lOX0NPTVBMRVRFCTB4MgorI2RlZmluZSBBODRfRElBR19MT0dJTl9DT01QTEVURQkweDMKKyNkZWZpbmUgQTg0X0dPTERfTE9HSU5fQ09NUExFVEUJMHg0CisKKyNkZWZpbmUgTUJDX0lTUDg0WFhfUkVTRVQJMHgzYSAgICAvKiBSZXNldC4gKi8KKworI2RlZmluZSBGU1RBVEVfUkVNT1RFX0ZDX0RPV04JQklUXzAKKyNkZWZpbmUgRlNUQVRFX05TTF9MSU5LX0RPV04JQklUXzEKKyNkZWZpbmUgRlNUQVRFX0lTX0RJQUdfRlcJQklUXzIKKyNkZWZpbmUgRlNUQVRFX0xPR0dFRF9JTglCSVRfMworI2RlZmluZSBGU1RBVEVfV0FJVElOR19GT1JfVkVSSUZZCUJJVF80CisKKyNkZWZpbmUgVkVSSUZZX0NISVBfSU9DQl9UWVBFCTB4MUIKK3N0cnVjdCB2ZXJpZnlfY2hpcF9lbnRyeV84NHh4IHsKKwl1aW50OF90IGVudHJ5X3R5cGU7CisJdWludDhfdCBlbnRyeV9jb3VudDsKKwl1aW50OF90IHN5c19kZWZpbmVkOworCXVpbnQ4X3QgZW50cnlfc3RhdHVzOworCisJdWludDMyX3QgaGFuZGxlOworCisJdWludDE2X3Qgb3B0aW9uczsKKyNkZWZpbmUgVkNPX0RPTlRfVVBEQVRFX0ZXCUJJVF8wCisjZGVmaW5lIFZDT19GT1JDRV9VUERBVEUJQklUXzEKKyNkZWZpbmUgVkNPX0RPTlRfUkVTRVRfVVBEQVRFCUJJVF8yCisjZGVmaW5lIFZDT19ESUFHX0ZXCQlCSVRfMworI2RlZmluZSBWQ09fRU5EX09GX0RBVEEJCUJJVF8xNAorI2RlZmluZSBWQ09fRU5BQkxFX0RTRAkJQklUXzE1CisKKwl1aW50MTZfdCByZXNlcnZlZF8xOworCisJdWludDE2X3QgZGF0YV9zZWdfY250OworCXVpbnQxNl90IHJlc2VydmVkXzJbM107CisKKwl1aW50MzJfdCBmd192ZXI7CisJdWludDMyX3QgZXhjaGFuZ2VfYWRkcmVzczsKKworCXVpbnQzMl90IHJlc2VydmVkXzNbM107CisJdWludDMyX3QgZndfc2l6ZTsKKwl1aW50MzJfdCBmd19zZXFfc2l6ZTsKKwl1aW50MzJfdCByZWxhdGl2ZV9vZmZzZXQ7CisKKwl1aW50MzJfdCBkc2VnX2FkZHJlc3NbMl07CisJdWludDMyX3QgZHNlZ19sZW5ndGg7Cit9OworCitzdHJ1Y3QgdmVyaWZ5X2NoaXBfcnNwXzg0eHggeworCXVpbnQ4X3QgZW50cnlfdHlwZTsKKwl1aW50OF90IGVudHJ5X2NvdW50OworCXVpbnQ4X3Qgc3lzX2RlZmluZWQ7CisJdWludDhfdCBlbnRyeV9zdGF0dXM7CisKKwl1aW50MzJfdCBoYW5kbGU7CisKKwl1aW50MTZfdCBjb21wX3N0YXR1czsKKyNkZWZpbmUgQ1NfVkNTX0NISVBfRkFJTFVSRQkweDMKKyNkZWZpbmUgQ1NfVkNTX0JBRF9FWENIQU5HRQkweDgKKyNkZWZpbmUgQ1NfVkNTX1NFUV9DT01QTEVURWkJMHg0MAorCisJdWludDE2X3QgZmFpbHVyZV9jb2RlOworI2RlZmluZSBWRkNfQ0hFQ0tTVU1fRVJST1IJMHgxCisjZGVmaW5lIFZGQ19JTlZBTElEX0xFTgkJMHgyCisjZGVmaW5lIFZGQ19BTFJFQURZX0lOX1BST0dSRVNTCTB4OAorCisJdWludDE2X3QgcmVzZXJ2ZWRfMVs0XTsKKworCXVpbnQzMl90IGZ3X3ZlcjsKKwl1aW50MzJfdCBleGNoYW5nZV9hZGRyZXNzOworCisJdWludDMyX3QgcmVzZXJ2ZWRfMls2XTsKK307CisKKyNkZWZpbmUgQUNDRVNTX0NISVBfSU9DQl9UWVBFCTB4MkIKK3N0cnVjdCBhY2Nlc3NfY2hpcF84NHh4IHsKKwl1aW50OF90IGVudHJ5X3R5cGU7CisJdWludDhfdCBlbnRyeV9jb3VudDsKKwl1aW50OF90IHN5c19kZWZpbmVkOworCXVpbnQ4X3QgZW50cnlfc3RhdHVzOworCisJdWludDMyX3QgaGFuZGxlOworCisJdWludDE2X3Qgb3B0aW9uczsKKyNkZWZpbmUgQUNPX0RVTVBfTUVNT1JZCQkweDAKKyNkZWZpbmUgQUNPX0xPQURfTUVNT1JZCQkweDEKKyNkZWZpbmUgQUNPX0NIQU5HRV9DT05GSUdfUEFSQU0JMHgyCisjZGVmaW5lIEFDT19SRVFVRVNUX0lORk8JMHgzCisKKwl1aW50MTZfdCByZXNlcnZlZDE7CisKKwl1aW50MTZfdCBkc2VnX2NvdW50OworCXVpbnQxNl90IHJlc2VydmVkMlszXTsKKworCXVpbnQzMl90IHBhcmFtZXRlcjE7CisJdWludDMyX3QgcGFyYW1ldGVyMjsKKwl1aW50MzJfdCBwYXJhbWV0ZXIzOworCisJdWludDMyX3QgcmVzZXJ2ZWQzWzNdOworCXVpbnQzMl90IHRvdGFsX2J5dGVfY250OworCXVpbnQzMl90IHJlc2VydmVkNDsKKworCXVpbnQzMl90IGRzZWdfYWRkcmVzc1syXTsKKwl1aW50MzJfdCBkc2VnX2xlbmd0aDsKK307CisKK3N0cnVjdCBhY2Nlc3NfY2hpcF9yc3BfODR4eCB7CisJdWludDhfdCBlbnRyeV90eXBlOworCXVpbnQ4X3QgZW50cnlfY291bnQ7CisJdWludDhfdCBzeXNfZGVmaW5lZDsKKwl1aW50OF90IGVudHJ5X3N0YXR1czsKKworCXVpbnQzMl90IGhhbmRsZTsKKworCXVpbnQxNl90IGNvbXBfc3RhdHVzOworCXVpbnQxNl90IGZhaWx1cmVfY29kZTsKKwl1aW50MzJfdCByZXNpZHVhbF9jb3VudDsKKworCXVpbnQzMl90IHJlc2VydmVkWzEyXTsKK307CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAppbmRleCAxOTNmNjg4Li43NmViNGZlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMzgsOSArMzgsNiBAQAogZXh0ZXJuIGludCBxbGEyeDAwX2ZhYnJpY19sb2dpbihzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICosIHVpbnQxNl90ICopOwogZXh0ZXJuIGludCBxbGEyeDAwX2xvY2FsX2RldmljZV9sb2dpbihzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogCi1leHRlcm4gdm9pZCBxbGEyeDAwX3Jlc3RhcnRfcXVldWVzKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50OF90KTsKLQotZXh0ZXJuIHZvaWQgcWxhMngwMF9yZXNjYW5fZmNwb3J0cyhzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX3VwZGF0ZV9mY3BvcnRzKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAogZXh0ZXJuIGludCBxbGEyeDAwX2Fib3J0X2lzcChzY3NpX3FsYV9ob3N0X3QgKik7CkBAIC01MCw2ICs0Nyw4IEBACiBleHRlcm4gdm9pZCBxbGEyeDAwX2FsbG9jX2Z3X2R1bXAoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF90cnlfdG9fc3RvcF9maXJtd2FyZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKK2V4dGVybiB2b2lkIHFsYTg0eHhfcHV0X2NoaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CisKIC8qCiAgKiBHbG9iYWwgRGF0YSBpbiBxbGFfb3MuYyBzb3VyY2UgZmlsZS4KICAqLwpAQCAtNjcsNiArNjYsMTAgQEAKIAogZXh0ZXJuIGludCBxbGEyeDAwX2xvb3BfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9hYm9ydF9hbGxfY21kcyhzY3NpX3FsYV9ob3N0X3QgKiwgaW50KTsKK2V4dGVybiBpbnQgcWxhMngwMF9wb3N0X2Flbl93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGVudW0KKyAgICBmY19ob3N0X2V2ZW50X2NvZGUsIHUzMik7CitleHRlcm4gaW50IHFsYTJ4MDBfcG9zdF9od2Vfd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCB1aW50MTZfdCAsIHVpbnQxNl90LAorICAgIHVpbnQxNl90LCB1aW50MTZfdCk7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb25zIGluIHFsYV9taWQuYyBzb3VyY2UgZmlsZS4KQEAgLTE0OSwxMiArMTUyLDE3IEBACiBxbGEyeDAwX2lzc3VlX2lvY2Ioc2NzaV9xbGFfaG9zdF90ICosIHZvaWQgKiwgZG1hX2FkZHJfdCwgc2l6ZV90KTsKIAogZXh0ZXJuIGludAorcWxhMngwMF9pc3N1ZV9pb2NiX3RpbWVvdXQoc2NzaV9xbGFfaG9zdF90ICosIHZvaWQgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LAorICAgIHVpbnQzMl90KTsKKworZXh0ZXJuIGludAogcWxhMngwMF9hYm9ydF9jb21tYW5kKHNjc2lfcWxhX2hvc3RfdCAqLCBzcmJfdCAqKTsKIAotI2lmIFVTRV9BQk9SVF9UR1QKIGV4dGVybiBpbnQKLXFsYTJ4MDBfYWJvcnRfdGFyZ2V0KGZjX3BvcnRfdCAqKTsKLSNlbmRpZgorcWxhMngwMF9hYm9ydF90YXJnZXQoc3RydWN0IGZjX3BvcnQgKiwgdW5zaWduZWQgaW50KTsKKworZXh0ZXJuIGludAorcWxhMngwMF9sdW5fcmVzZXQoc3RydWN0IGZjX3BvcnQgKiwgdW5zaWduZWQgaW50KTsKIAogZXh0ZXJuIGludAogcWxhMngwMF9nZXRfYWRhcHRlcl9pZChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QgKiwgdWludDhfdCAqLCB1aW50OF90ICosCkBAIC0yMjAsNyArMjI4LDggQEAKICAgICBkbWFfYWRkcl90KTsKIAogZXh0ZXJuIGludCBxbGEyNHh4X2Fib3J0X2NvbW1hbmQoc2NzaV9xbGFfaG9zdF90ICosIHNyYl90ICopOwotZXh0ZXJuIGludCBxbGEyNHh4X2Fib3J0X3RhcmdldChmY19wb3J0X3QgKik7CitleHRlcm4gaW50IHFsYTI0eHhfYWJvcnRfdGFyZ2V0KHN0cnVjdCBmY19wb3J0ICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHFsYTI0eHhfbHVuX3Jlc2V0KHN0cnVjdCBmY19wb3J0ICosIHVuc2lnbmVkIGludCk7CiAKIGV4dGVybiBpbnQKIHFsYTJ4MDBfc2V0X3NlcmRlc19wYXJhbXMoc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QpOwpAQCAtMjQ2LDYgKzI1NSw4IEBACiBleHRlcm4gaW50CiBxbGEyeDAwX3NldF9pZG1hX3NwZWVkKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQxNl90ICopOwogCitleHRlcm4gaW50IHFsYTg0eHhfdmVyaWZ5X2NoaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgdWludDE2X3QgKik7CisKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfaXNyLmMgc291cmNlIGZpbGUuCiAgKi8KQEAgLTI5OCw2ICszMDksMTEgQEAKIGV4dGVybiBpbnQgcWxhMngwMF9nZXRfZmxhc2hfdmVyc2lvbihzY3NpX3FsYV9ob3N0X3QgKiwgdm9pZCAqKTsKIGV4dGVybiBpbnQgcWxhMjR4eF9nZXRfZmxhc2hfdmVyc2lvbihzY3NpX3FsYV9ob3N0X3QgKiwgdm9pZCAqKTsKIAorZXh0ZXJuIGludCBxbGEyeHh4X2h3X2V2ZW50X2xvZyhzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QgLCB1aW50MTZfdCwKKyAgICB1aW50MTZfdCwgdWludDE2X3QpOworCitleHRlcm4gdm9pZCBxbGEyeHh4X2dldF9mbGFzaF9pbmZvKHNjc2lfcWxhX2hvc3RfdCAqKTsKKwogLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9kYmcuYyBzb3VyY2UgZmlsZS4KICAqLwpAQCAtMzA3LDcgKzMyMyw2IEBACiBleHRlcm4gdm9pZCBxbGEyNXh4X2Z3X2R1bXAoc2NzaV9xbGFfaG9zdF90ICosIGludCk7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2R1bXBfcmVncyhzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2R1bXBfYnVmZmVyKHVpbnQ4X3QgKiwgdWludDMyX3QpOwotZXh0ZXJuIHZvaWQgcWxhMngwMF9wcmludF9zY3NpX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCiAvKgogICogR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgaW4gcWxhX2dzLmMgc291cmNlIGZpbGUuCkBAIC0zMzIsOCArMzQ3LDggQEAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfYXR0ci5jIHNvdXJjZSBmaWxlLgogICovCi1zdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZTsKLWV4dGVybiBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcWxhMngwMF9ob3N0X2F0dHJzW107CitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqcWxhMngwMF9ob3N0X2F0dHJzW107CiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGU7CiBleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHFsYTJ4eHhfdHJhbnNwb3J0X2Z1bmN0aW9uczsKIGV4dGVybiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgcWxhMnh4eF90cmFuc3BvcnRfdnBvcnRfZnVuY3Rpb25zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwppbmRleCA2MjI2ZDg4Li43NTBkN2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwpAQCAtMSwxNyArMSwxMSBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCiAjaW5jbHVkZSAicWxhX2RlZi5oIgogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjdF9zbnNfcmVxICoKLXFsYTJ4MDBfcHJlcF9jdF9yZXEoc3RydWN0IGN0X3Nuc19yZXEgKiwgdWludDE2X3QsIHVpbnQxNl90KTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc25zX2NtZF9wa3QgKgotcWxhMngwMF9wcmVwX3Nuc19jbWQoc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QpOwotCiBzdGF0aWMgaW50IHFsYTJ4MDBfc25zX2dhX254dChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogc3RhdGljIGludCBxbGEyeDAwX3Nuc19naWRfcHQoc2NzaV9xbGFfaG9zdF90ICosIHN3X2luZm9fdCAqKTsKIHN0YXRpYyBpbnQgcWxhMngwMF9zbnNfZ3BuX2lkKHNjc2lfcWxhX2hvc3RfdCAqLCBzd19pbmZvX3QgKik7CkBAIC0zOSw3ICszMyw3IEBACiAJbXNfcGt0LT5lbnRyeV9jb3VudCA9IDE7CiAJU0VUX1RBUkdFVF9JRChoYSwgbXNfcGt0LT5sb29wX2lkLCBTSU1QTEVfTkFNRV9TRVJWRVIpOwogCW1zX3BrdC0+Y29udHJvbF9mbGFncyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0ZfUkVBRCB8IENGX0hFQURfVEFHKTsKLQltc19wa3QtPnRpbWVvdXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDI1KTsKKwltc19wa3QtPnRpbWVvdXQgPSBjcHVfdG9fbGUxNihoYS0+cl9hX3RvdiAvIDEwICogMik7CiAJbXNfcGt0LT5jbWRfZHNkX2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigxKTsKIAltc19wa3QtPnRvdGFsX2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMik7CiAJbXNfcGt0LT5yc3BfYnl0ZWNvdW50ID0gY3B1X3RvX2xlMzIocnNwX3NpemUpOwpAQCAtNzUsNyArNjksNyBAQAogCWN0X3BrdC0+ZW50cnlfdHlwZSA9IENUX0lPQ0JfVFlQRTsKIAljdF9wa3QtPmVudHJ5X2NvdW50ID0gMTsKIAljdF9wa3QtPm5wb3J0X2hhbmRsZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoTlBIX1NOUyk7Ci0JY3RfcGt0LT50aW1lb3V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigyNSk7CisJY3RfcGt0LT50aW1lb3V0ID0gY3B1X3RvX2xlMTYoaGEtPnJfYV90b3YgLyAxMCAqIDIpOwogCWN0X3BrdC0+Y21kX2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSk7CiAJY3RfcGt0LT5yc3BfZHNkX2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigxKTsKIAljdF9wa3QtPnJzcF9ieXRlX2NvdW50ID0gY3B1X3RvX2xlMzIocnNwX3NpemUpOwpAQCAtMTE0NCw3ICsxMTM4LDcgQEAKIAltc19wa3QtPmVudHJ5X2NvdW50ID0gMTsKIAlTRVRfVEFSR0VUX0lEKGhhLCBtc19wa3QtPmxvb3BfaWQsIGhhLT5tZ210X3N2cl9sb29wX2lkKTsKIAltc19wa3QtPmNvbnRyb2xfZmxhZ3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENGX1JFQUQgfCBDRl9IRUFEX1RBRyk7Ci0JbXNfcGt0LT50aW1lb3V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1OSk7CisJbXNfcGt0LT50aW1lb3V0ID0gY3B1X3RvX2xlMTYoaGEtPnJfYV90b3YgLyAxMCAqIDIpOwogCW1zX3BrdC0+Y21kX2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSk7CiAJbXNfcGt0LT50b3RhbF9kc2RfY291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDIpOwogCW1zX3BrdC0+cnNwX2J5dGVjb3VudCA9IGNwdV90b19sZTMyKHJzcF9zaXplKTsKQEAgLTExODEsNyArMTE3NSw3IEBACiAJY3RfcGt0LT5lbnRyeV90eXBlID0gQ1RfSU9DQl9UWVBFOwogCWN0X3BrdC0+ZW50cnlfY291bnQgPSAxOwogCWN0X3BrdC0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoaGEtPm1nbXRfc3ZyX2xvb3BfaWQpOwotCWN0X3BrdC0+dGltZW91dCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTkpOworCWN0X3BrdC0+dGltZW91dCA9IGNwdV90b19sZTE2KGhhLT5yX2FfdG92IC8gMTAgKiAyKTsKIAljdF9wa3QtPmNtZF9kc2RfY291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpOwogCWN0X3BrdC0+cnNwX2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSk7CiAJY3RfcGt0LT5yc3BfYnl0ZV9jb3VudCA9IGNwdV90b19sZTMyKHJzcF9zaXplKTsKQEAgLTE1MzgsNyArMTUzMiw3IEBACiAJCWVpdGVyLT5hLnN1cF9zcGVlZCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoCiAJCSAgICBGRE1JX1BPUlRfU1BFRURfMUdCfEZETUlfUE9SVF9TUEVFRF8yR0J8CiAJCSAgICBGRE1JX1BPUlRfU1BFRURfNEdCfEZETUlfUE9SVF9TUEVFRF84R0IpOwotCWVsc2UgaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKQorCWVsc2UgaWYgKElTX1FMQTI0WFhfVFlQRShoYSkpCiAJCWVpdGVyLT5hLnN1cF9zcGVlZCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoCiAJCSAgICBGRE1JX1BPUlRfU1BFRURfMUdCfEZETUlfUE9SVF9TUEVFRF8yR0J8CiAJCSAgICBGRE1JX1BPUlRfU1BFRURfNEdCKTsKQEAgLTE3NjEsNyArMTc1NSw3IEBACiAJY3RfcGt0LT5lbnRyeV90eXBlID0gQ1RfSU9DQl9UWVBFOwogCWN0X3BrdC0+ZW50cnlfY291bnQgPSAxOwogCWN0X3BrdC0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoaGEtPm1nbXRfc3ZyX2xvb3BfaWQpOwotCWN0X3BrdC0+dGltZW91dCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTkpOworCWN0X3BrdC0+dGltZW91dCA9IGNwdV90b19sZTE2KGhhLT5yX2FfdG92IC8gMTAgKiAyKTsKIAljdF9wa3QtPmNtZF9kc2RfY291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpOwogCWN0X3BrdC0+cnNwX2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSk7CiAJY3RfcGt0LT5yc3BfYnl0ZV9jb3VudCA9IGNwdV90b19sZTMyKHJzcF9zaXplKTsKQEAgLTE4NDcsOCArMTg0MSwxMCBAQAogCQkgICAgIkdQU0MiKSkgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCS8qIEZNIGNvbW1hbmQgdW5zdXBwb3J0ZWQ/ICovCiAJCQlpZiAocnZhbCA9PSBRTEFfSU5WQUxJRF9DT01NQU5EICYmCi0JCQkgICAgY3RfcnNwLT5oZWFkZXIucmVhc29uX2NvZGUgPT0KLQkJCSAgICBDVF9SRUFTT05fSU5WQUxJRF9DT01NQU5EX0NPREUpIHsKKwkJCSAgICAoY3RfcnNwLT5oZWFkZXIucmVhc29uX2NvZGUgPT0KKwkJCQlDVF9SRUFTT05fSU5WQUxJRF9DT01NQU5EX0NPREUgfHwKKwkJCSAgICAgY3RfcnNwLT5oZWFkZXIucmVhc29uX2NvZGUgPT0KKwkJCQlDVF9SRUFTT05fQ09NTUFORF9VTlNVUFBPUlRFRCkpIHsKIAkJCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEdQU0MgY29tbWFuZCAiCiAJCQkJICAgICJ1bnN1cHBvcnRlZCwgZGlzYWJsaW5nIHF1ZXJ5Li4uXG4iLAogCQkJCSAgICBoYS0+aG9zdF9ubykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggZDVjNzg1My4uMDFlMjYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xNSwxNCArMTUsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjZW5kaWYKIAotLyogWFhYKGhjaCk6IHRoaXMgaXMgdWdseSwgYnV0IHdlIGRvbid0IHdhbnQgdG8gcHVsbCBpbiBleGlvY3RsLmggKi8KLSNpZm5kZWYgRVhUX0lTX0xVTl9CSVRfU0VUCi0jZGVmaW5lIEVYVF9JU19MVU5fQklUX1NFVChQLEwpIFwKLSAgICAoKChQKS0+bWFza1tMLzhdICYgKDB4ODAgPj4gKEwlOCkpKT8xOjApCi0jZGVmaW5lIEVYVF9TRVRfTFVOX0JJVChQLEwpIFwKLSAgICAoKFApLT5tYXNrW0wvOF0gfD0gKDB4ODAgPj4gKEwlOCkpKQotI2VuZGlmCi0KIC8qCiAqICBRTG9naWMgSVNQMngwMCBIYXJkd2FyZSBTdXBwb3J0IEZ1bmN0aW9uIFByb3RvdHlwZXMuCiAqLwpAQCAtNDUsNiArMzcsOSBAQAogCiBzdGF0aWMgaW50IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZChzY3NpX3FsYV9ob3N0X3QgKmhhLCBmY19wb3J0X3QgKmRldik7CiAKK3N0YXRpYyBzdHJ1Y3QgcWxhX2NoaXBfc3RhdGVfODR4eCAqcWxhODR4eF9nZXRfY2hpcChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKK3N0YXRpYyBpbnQgcWxhODR4eF9pbml0X2NoaXAoc2NzaV9xbGFfaG9zdF90ICopOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgIFFMb2dpYyBJU1AyeDAwIEhhcmR3YXJlIFN1cHBvcnQgRnVuY3Rpb25zLiAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMTQsNiArMTA5LDE1IEBACiAJCXJ2YWwgPSBxbGEyeDAwX3NldHVwX2NoaXAoaGEpOwogCQlpZiAocnZhbCkKIAkJCXJldHVybiAocnZhbCk7CisJCXFsYTJ4eHhfZ2V0X2ZsYXNoX2luZm8oaGEpOworCX0KKwlpZiAoSVNfUUxBODRYWChoYSkpIHsKKwkJaGEtPmNzODR4eCA9IHFsYTg0eHhfZ2V0X2NoaXAoaGEpOworCQlpZiAoIWhhLT5jczg0eHgpIHsKKwkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkJICAgICJVbmFibGUgdG8gY29uZmlndXJlIElTUDg0WFguXG4iKTsKKwkJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCQl9CiAJfQogCXJ2YWwgPSBxbGEyeDAwX2luaXRfcmluZ3MoaGEpOwogCkBAIC01MDAsNiArNTA0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWxhMjR4eF9yZXNldF9yaXNjKHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7CisJaW50IGh3X2V2dCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJc3RydWN0IGRldmljZV9yZWdfMjR4eCBfX2lvbWVtICpyZWcgPSAmaGEtPmlvYmFzZS0+aXNwMjQ7CiAJdWludDMyX3QgY250LCBkMjsKQEAgLTUyOCw2ICs1MzMsOCBAQAogCQlkMiA9ICh1aW50MzJfdCkgUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDApOwogCQliYXJyaWVyKCk7CiAJfQorCWlmIChjbnQgPT0gMCkKKwkJaHdfZXZ0ID0gMTsKIAogCS8qIFdhaXQgZm9yIHNvZnQtcmVzZXQgdG8gY29tcGxldGUuICovCiAJZDIgPSBSRF9SRUdfRFdPUkQoJnJlZy0+Y3RybF9zdGF0dXMpOwpAQCAtNTM2LDYgKzU0MywxMCBAQAogCQlkMiA9IFJEX1JFR19EV09SRCgmcmVnLT5jdHJsX3N0YXR1cyk7CiAJCWJhcnJpZXIoKTsKIAl9CisJaWYgKGNudCA9PSAwIHx8IGh3X2V2dCkKKwkJcWxhMnh4eF9od19ldmVudF9sb2coaGEsIEhXX0VWRU5UX1JFU0VUX0VSUiwKKwkJICAgIFJEX1JFR19XT1JEKCZyZWctPm1haWxib3gxKSwgUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDIpLAorCQkgICAgUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDMpKTsKIAogCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfU0VUX1JJU0NfUkVTRVQpOwogCVJEX1JFR19EV09SRCgmcmVnLT5oY2NyKTsKQEAgLTEyNDMsMTAgKzEyNTQsMTAgQEAKIHFsYTJ4MDBfZndfcmVhZHkoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKIAlpbnQJCXJ2YWw7Ci0JdW5zaWduZWQgbG9uZwl3dGltZSwgbXRpbWU7CisJdW5zaWduZWQgbG9uZwl3dGltZSwgbXRpbWUsIGNzODR4eF90aW1lOwogCXVpbnQxNl90CW1pbl93YWl0OwkvKiBNaW5pbXVtIHdhaXQgdGltZSBpZiBsb29wIGlzIGRvd24gKi8KIAl1aW50MTZfdAl3YWl0X3RpbWU7CS8qIFdhaXQgdGltZSBpZiBsb29wIGlzIGNvbWluZyByZWFkeSAqLwotCXVpbnQxNl90CWZ3X3N0YXRlOworCXVpbnQxNl90CXN0YXRlWzNdOwogCiAJcnZhbCA9IFFMQV9TVUNDRVNTOwogCkBAIC0xMjc1LDEyICsxMjg2LDM0IEBACiAJICAgIGhhLT5ob3N0X25vKSk7CiAKIAlkbyB7Ci0JCXJ2YWwgPSBxbGEyeDAwX2dldF9maXJtd2FyZV9zdGF0ZShoYSwgJmZ3X3N0YXRlKTsKKwkJcnZhbCA9IHFsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKGhhLCBzdGF0ZSk7CiAJCWlmIChydmFsID09IFFMQV9TVUNDRVNTKSB7Ci0JCQlpZiAoZndfc3RhdGUgPCBGU1RBVEVfTE9TU19PRl9TWU5DKSB7CisJCQlpZiAoc3RhdGVbMF0gPCBGU1RBVEVfTE9TU19PRl9TWU5DKSB7CiAJCQkJaGEtPmRldmljZV9mbGFncyAmPSB+REZMR19OT19DQUJMRTsKIAkJCX0KLQkJCWlmIChmd19zdGF0ZSA9PSBGU1RBVEVfUkVBRFkpIHsKKwkJCWlmIChJU19RTEE4NFhYKGhhKSAmJiBzdGF0ZVswXSAhPSBGU1RBVEVfUkVBRFkpIHsKKwkJCQlERUJVRzE2KHByaW50aygic2NzaSglbGQpOiBmd19zdGF0ZT0leCAiCisJCQkJICAgICI4NHh4PSV4LlxuIiwgaGEtPmhvc3Rfbm8sIHN0YXRlWzBdLAorCQkJCSAgICBzdGF0ZVsyXSkpOworCQkJCWlmICgoc3RhdGVbMl0gJiBGU1RBVEVfTE9HR0VEX0lOKSAmJgorCQkJCSAgICAgKHN0YXRlWzJdICYgRlNUQVRFX1dBSVRJTkdfRk9SX1ZFUklGWSkpIHsKKwkJCQkJREVCVUcxNihwcmludGsoInNjc2koJWxkKTogU2VuZGluZyAiCisJCQkJCSAgICAidmVyaWZ5IGlvY2IuXG4iLCBoYS0+aG9zdF9ubykpOworCisJCQkJCWNzODR4eF90aW1lID0gamlmZmllczsKKwkJCQkJcnZhbCA9IHFsYTg0eHhfaW5pdF9jaGlwKGhhKTsKKwkJCQkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCQkJCQlicmVhazsKKworCQkJCQkvKiBBZGQgdGltZSB0YWtlbiB0byBpbml0aWFsaXplLiAqLworCQkJCQljczg0eHhfdGltZSA9IGppZmZpZXMgLSBjczg0eHhfdGltZTsKKwkJCQkJd3RpbWUgKz0gY3M4NHh4X3RpbWU7CisJCQkJCW10aW1lICs9IGNzODR4eF90aW1lOworCQkJCQlERUJVRzE2KHByaW50aygic2NzaSglbGQpOiBJbmNyZWFzaW5nICIKKwkJCQkJICAgICJ3YWl0IHRpbWUgYnkgJWxkLiBOZXcgdGltZSAlbGRcbiIsCisJCQkJCSAgICBoYS0+aG9zdF9ubywgY3M4NHh4X3RpbWUsIHd0aW1lKSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChzdGF0ZVswXSA9PSBGU1RBVEVfUkVBRFkpIHsKIAkJCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogRi9XIFJlYWR5IC0gT0sgXG4iLAogCQkJCSAgICBoYS0+aG9zdF9ubykpOwogCkBAIC0xMjk0LDcgKzEzMjcsNyBAQAogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAkJCWlmIChhdG9taWNfcmVhZCgmaGEtPmxvb3BfZG93bl90aW1lcikgJiYKLQkJCSAgICBmd19zdGF0ZSAhPSBGU1RBVEVfUkVBRFkpIHsKKwkJCSAgICBzdGF0ZVswXSAhPSBGU1RBVEVfUkVBRFkpIHsKIAkJCQkvKiBMb29wIGRvd24uIFRpbWVvdXQgb24gbWluX3dhaXQgZm9yIHN0YXRlcwogCQkJCSAqIG90aGVyIHRoYW4gV2FpdCBmb3IgTG9naW4uCiAJCQkJICovCkBAIC0xMzE5LDExICsxMzUyLDExIEBACiAJCW1zbGVlcCg1MDApOwogCiAJCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogZndfc3RhdGU9JXggY3VyciB0aW1lPSVseC5cbiIsCi0JCSAgICBoYS0+aG9zdF9ubywgZndfc3RhdGUsIGppZmZpZXMpKTsKKwkJICAgIGhhLT5ob3N0X25vLCBzdGF0ZVswXSwgamlmZmllcykpOwogCX0gd2hpbGUgKDEpOwogCiAJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IGZ3X3N0YXRlPSV4IGN1cnIgdGltZT0lbHguXG4iLAotCSAgICBoYS0+aG9zdF9ubywgZndfc3RhdGUsIGppZmZpZXMpKTsKKwkgICAgaGEtPmhvc3Rfbm8sIHN0YXRlWzBdLCBqaWZmaWVzKSk7CiAKIAlpZiAocnZhbCkgewogCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogRmlybXdhcmUgcmVhZHkgKioqKiBGQUlMRUQgKioqKi5cbiIsCkBAIC0xNTU1LDYgKzE1ODgsMTAgQEAKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiRmFsbGluZyBiYWNrIHRvIGZ1bmN0aW9uaW5nICh5ZXQgIgogCQkgICAgImludmFsaWQgLS0gV1dQTikgZGVmYXVsdHMuXG4iKTsKIAorCQlpZiAoY2hrc3VtKQorCQkJcWxhMnh4eF9od19ldmVudF9sb2coaGEsIEhXX0VWRU5UX05WUkFNX0NIS1NVTV9FUlIsIDAsCisJCQkgICAgTVNXKGNoa3N1bSksIExTVyhjaGtzdW0pKTsKKwogCQkvKgogCQkgKiBTZXQgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBjb250cm9sIGJsb2NrLgogCQkgKi8KQEAgLTE3MzMsOCArMTc3MCw4IEBACiAJaGEtPmxvZ2luX3RpbWVvdXQgPSBudi0+bG9naW5fdGltZW91dDsKIAlpY2ItPmxvZ2luX3RpbWVvdXQgPSBudi0+bG9naW5fdGltZW91dDsKIAotCS8qIFNldCBtaW5pbXVtIFJBVE9WIHRvIDIwMCB0ZW50aHMgb2YgYSBzZWNvbmQuICovCi0JaGEtPnJfYV90b3YgPSAyMDA7CisJLyogU2V0IG1pbmltdW0gUkFUT1YgdG8gMTAwIHRlbnRocyBvZiBhIHNlY29uZC4gKi8KKwloYS0+cl9hX3RvdiA9IDEwMDsKIAogCWhhLT5sb29wX3Jlc2V0X2RlbGF5ID0gbnYtPnJlc2V0X2RlbGF5OwogCkBAIC0yMTY1LDIwICsyMjAyLDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLXFsYTJ4MDBfcHJvYmVfZm9yX2FsbF9sdW5zKHNjc2lfcWxhX2hvc3RfdCAqaGEpCi17Ci0JZmNfcG9ydF90CSpmY3BvcnQ7Ci0KLQlxbGEyeDAwX21hcmtfYWxsX2RldmljZXNfbG9zdChoYSwgMCk7Ci0gCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmaGEtPmZjcG9ydHMsIGxpc3QpIHsKLQkJaWYgKGZjcG9ydC0+cG9ydF90eXBlICE9IEZDVF9UQVJHRVQpCi0JCQljb250aW51ZTsKLQotCQlxbGEyeDAwX3VwZGF0ZV9mY3BvcnQoaGEsIGZjcG9ydCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAogcWxhMngwMF9paWRtYV9mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICpoYSwgZmNfcG9ydF90ICpmY3BvcnQpCiB7CiAjZGVmaW5lIExTX1VOS05PV04gICAgICAyCkBAIC0yMjUxLDEwICsyMjc0LDYgQEAKIAlpZiAoZmNwb3J0LT5wb3J0X3R5cGUgPT0gRkNUX1RBUkdFVCkKIAkJcnBvcnRfaWRzLnJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKIAlmY19yZW1vdGVfcG9ydF9yb2xlY2hnKHJwb3J0LCBycG9ydF9pZHMucm9sZXMpOwotCi0JaWYgKHJwb3J0LT5zY3NpX3RhcmdldF9pZCAhPSAtMSAmJgotCSAgICBycG9ydC0+c2NzaV90YXJnZXRfaWQgPCBoYS0+aG9zdC0+bWF4X2lkKQotCQlmY3BvcnQtPm9zX3RhcmdldF9pZCA9IHJwb3J0LT5zY3NpX3RhcmdldF9pZDsKIH0KIAogLyoKQEAgLTI0MzQsNyArMjQ1Myw4IEBACiAKIAkJCWlmIChmY3BvcnQtPmxvb3BfaWQgPT0gRkNfTk9fTE9PUF9JRCkgewogCQkJCWZjcG9ydC0+bG9vcF9pZCA9IG5leHRfbG9vcGlkOwotCQkJCXJ2YWwgPSBxbGEyeDAwX2ZpbmRfbmV3X2xvb3BfaWQoaGEsIGZjcG9ydCk7CisJCQkJcnZhbCA9IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZCgKKwkJCQkgICAgdG9fcWxhX3BhcmVudChoYSksIGZjcG9ydCk7CiAJCQkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCQkJLyogUmFuIG91dCBvZiBJRHMgdG8gdXNlICovCiAJCQkJCWJyZWFrOwpAQCAtMjQ1OSw3ICsyNDc5LDggQEAKIAogCQkJLyogRmluZCBhIG5ldyBsb29wIElEIHRvIHVzZS4gKi8KIAkJCWZjcG9ydC0+bG9vcF9pZCA9IG5leHRfbG9vcGlkOwotCQkJcnZhbCA9IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZChoYSwgZmNwb3J0KTsKKwkJCXJ2YWwgPSBxbGEyeDAwX2ZpbmRfbmV3X2xvb3BfaWQodG9fcWxhX3BhcmVudChoYSksCisJCQkgICAgZmNwb3J0KTsKIAkJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCQkJLyogUmFuIG91dCBvZiBJRHMgdG8gdXNlICovCiAJCQkJYnJlYWs7CkBAIC0zMTkzLDI1ICszMjE0LDYgQEAKIH0KIAogdm9pZAotcWxhMngwMF9yZXNjYW5fZmNwb3J0cyhzY3NpX3FsYV9ob3N0X3QgKmhhKQotewotCWludCByZXNjYW5fZG9uZTsKLQlmY19wb3J0X3QgKmZjcG9ydDsKLQotCXJlc2Nhbl9kb25lID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJmhhLT5mY3BvcnRzLCBsaXN0KSB7Ci0JCWlmICgoZmNwb3J0LT5mbGFncyAmIEZDRl9SRVNDQU5fTkVFREVEKSA9PSAwKQotCQkJY29udGludWU7Ci0KLQkJcWxhMngwMF91cGRhdGVfZmNwb3J0KGhhLCBmY3BvcnQpOwotCQlmY3BvcnQtPmZsYWdzICY9IH5GQ0ZfUkVTQ0FOX05FRURFRDsKLQotCQlyZXNjYW5fZG9uZSA9IDE7Ci0JfQotCXFsYTJ4MDBfcHJvYmVfZm9yX2FsbF9sdW5zKGhhKTsKLX0KLQotdm9pZAogcWxhMngwMF91cGRhdGVfZmNwb3J0cyhzY3NpX3FsYV9ob3N0X3QgKmhhKQogewogCWZjX3BvcnRfdCAqZmNwb3J0OwpAQCAtMzY0NSw4ICszNjQ3LDggQEAKIAloYS0+bG9naW5fdGltZW91dCA9IGxlMTZfdG9fY3B1KG52LT5sb2dpbl90aW1lb3V0KTsKIAlpY2ItPmxvZ2luX3RpbWVvdXQgPSBjcHVfdG9fbGUxNihudi0+bG9naW5fdGltZW91dCk7CiAKLQkvKiBTZXQgbWluaW11bSBSQVRPViB0byAyMDAgdGVudGhzIG9mIGEgc2Vjb25kLiAqLwotCWhhLT5yX2FfdG92ID0gMjAwOworCS8qIFNldCBtaW5pbXVtIFJBVE9WIHRvIDEwMCB0ZW50aHMgb2YgYSBzZWNvbmQuICovCisJaGEtPnJfYV90b3YgPSAxMDA7CiAKIAloYS0+bG9vcF9yZXNldF9kZWxheSA9IG52LT5yZXNldF9kZWxheTsKIApAQCAtNDAyMiw3ICs0MDI0LDggQEAKIAkJcmV0dXJuOwogCiAJcmV0ID0gcWxhMngwMF9zdG9wX2Zpcm13YXJlKGhhKTsKLQlmb3IgKHJldHJpZXMgPSA1OyByZXQgIT0gUUxBX1NVQ0NFU1MgJiYgcmV0cmllcyA7IHJldHJpZXMtLSkgeworCWZvciAocmV0cmllcyA9IDU7IHJldCAhPSBRTEFfU1VDQ0VTUyAmJiByZXQgIT0gUUxBX0ZVTkNUSU9OX1RJTUVPVVQgJiYKKwkgICAgcmV0cmllcyA7IHJldHJpZXMtLSkgewogCQlxbGEyeDAwX3Jlc2V0X2NoaXAoaGEpOwogCQlpZiAocWxhMngwMF9jaGlwX2RpYWcoaGEpICE9IFFMQV9TVUNDRVNTKQogCQkJY29udGludWU7CkBAIC00MDQzLDE2ICs0MDQ2LDE2IEBACiAJaWYgKCFoYS0+cGFyZW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ2YWwgPSBxbGEyeDAwX2Z3X3JlYWR5KGhhKTsKKwlydmFsID0gcWxhMngwMF9md19yZWFkeShoYS0+cGFyZW50KTsKIAlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewogCQljbGVhcl9iaXQoUkVTRVRfTUFSS0VSX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwotCQlxbGEyeDAwX21hcmtlcihoYSwgMCwgMCwgTUtfU1lOQ19BTEwpOworCQlxbGEyeDAwX21hcmtlcihoYS0+cGFyZW50LCAwLCAwLCBNS19TWU5DX0FMTCk7CiAJfQogCiAJaGEtPmZsYWdzLm1hbmFnZW1lbnRfc2VydmVyX2xvZ2dlZF9pbiA9IDA7CiAKIAkvKiBMb2dpbiB0byBTTlMgZmlyc3QgKi8KLQlxbGEyNHh4X2xvZ2luX2ZhYnJpYyhoYSwgTlBIX1NOUywgMHhmZiwgMHhmZiwgMHhmYywKKwlxbGEyNHh4X2xvZ2luX2ZhYnJpYyhoYS0+cGFyZW50LCBOUEhfU05TLCAweGZmLCAweGZmLCAweGZjLAogCSAgICBtYiwgQklUXzEpOwogCWlmIChtYlswXSAhPSBNQlNfQ09NTUFORF9DT01QTEVURSkgewogCQlERUJVRzE1KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKQEAgLTQwNjYsNyArNDA2OSw3NyBAQAogCWF0b21pY19zZXQoJmhhLT5sb29wX3N0YXRlLCBMT09QX1VQKTsKIAlzZXRfYml0KExPT1BfUkVTWU5DX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCXNldF9iaXQoTE9DQUxfTE9PUF9VUERBVEUsICZoYS0+ZHBjX2ZsYWdzKTsKLQlydmFsID0gcWxhMngwMF9sb29wX3Jlc3luYyhoYSk7CisJcnZhbCA9IHFsYTJ4MDBfbG9vcF9yZXN5bmMoaGEtPnBhcmVudCk7CiAKIAlyZXR1cm4gcnZhbDsKIH0KKworLyogODRYWCBTdXBwb3J0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgTElTVF9IRUFEKHFsYV9jczg0eHhfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHFsYV9jczg0eHhfbXV0ZXgpOworCitzdGF0aWMgc3RydWN0IHFsYV9jaGlwX3N0YXRlXzg0eHggKgorcWxhODR4eF9nZXRfY2hpcChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJc3RydWN0IHFsYV9jaGlwX3N0YXRlXzg0eHggKmNzODR4eDsKKworCW11dGV4X2xvY2soJnFsYV9jczg0eHhfbXV0ZXgpOworCisJLyogRmluZCBhbnkgc2hhcmVkIDg0eHggY2hpcC4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNzODR4eCwgJnFsYV9jczg0eHhfbGlzdCwgbGlzdCkgeworCQlpZiAoY3M4NHh4LT5idXMgPT0gaGEtPnBkZXYtPmJ1cykgeworCQkJa3JlZl9nZXQoJmNzODR4eC0+a3JlZik7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwljczg0eHggPSBremFsbG9jKHNpemVvZigqY3M4NHh4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjczg0eHgpCisJCWdvdG8gZG9uZTsKKworCWtyZWZfaW5pdCgmY3M4NHh4LT5rcmVmKTsKKwlzcGluX2xvY2tfaW5pdCgmY3M4NHh4LT5hY2Nlc3NfbG9jayk7CisJbXV0ZXhfaW5pdCgmY3M4NHh4LT5md191cGRhdGVfbXV0ZXgpOworCWNzODR4eC0+YnVzID0gaGEtPnBkZXYtPmJ1czsKKworCWxpc3RfYWRkX3RhaWwoJmNzODR4eC0+bGlzdCwgJnFsYV9jczg0eHhfbGlzdCk7Citkb25lOgorCW11dGV4X3VubG9jaygmcWxhX2NzODR4eF9tdXRleCk7CisJcmV0dXJuIGNzODR4eDsKK30KKworc3RhdGljIHZvaWQKK19fcWxhODR4eF9jaGlwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHFsYV9jaGlwX3N0YXRlXzg0eHggKmNzODR4eCA9CisJICAgIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcWxhX2NoaXBfc3RhdGVfODR4eCwga3JlZik7CisKKwltdXRleF9sb2NrKCZxbGFfY3M4NHh4X211dGV4KTsKKwlsaXN0X2RlbCgmY3M4NHh4LT5saXN0KTsKKwltdXRleF91bmxvY2soJnFsYV9jczg0eHhfbXV0ZXgpOworCWtmcmVlKGNzODR4eCk7Cit9CisKK3ZvaWQKK3FsYTg0eHhfcHV0X2NoaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCWlmIChoYS0+Y3M4NHh4KQorCQlrcmVmX3B1dCgmaGEtPmNzODR4eC0+a3JlZiwgX19xbGE4NHh4X2NoaXBfcmVsZWFzZSk7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTg0eHhfaW5pdF9jaGlwKHNjc2lfcWxhX2hvc3RfdCAqaGEpCit7CisJaW50IHJ2YWw7CisJdWludDE2X3Qgc3RhdHVzWzJdOworCisJbXV0ZXhfbG9jaygmaGEtPmNzODR4eC0+ZndfdXBkYXRlX211dGV4KTsKKworCXJ2YWwgPSBxbGE4NHh4X3ZlcmlmeV9jaGlwKGhhLCBzdGF0dXMpOworCisJbXV0ZXhfdW5sb2NrKCZoYS0+Y3M4NHh4LT5md191cGRhdGVfbXV0ZXgpOworCisJcmV0dXJuIHJ2YWwgIT0gUUxBX1NVQ0NFU1MgfHwgc3RhdHVzWzBdID8gUUxBX0ZVTkNUSU9OX0ZBSUxFRDoKKwkgICAgUUxBX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmgKaW5kZXggNWQxYTNmNy4uZTliYWUyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lubGluZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaApAQCAtMSwxMSArMSwxMCBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHVpbnQxNl90IHFsYTJ4MDBfZGVib3VuY2VfcmVnaXN0ZXIodm9sYXRpbGUgdWludDE2X3QgX19pb21lbSAqKTsKIC8qCiAgKiBxbGEyeDAwX2RlYm91bmNlX3JlZ2lzdGVyCiAgKiAgICAgIERlYm91bmNlIHJlZ2lzdGVyLgpAQCAtMzIsOTQgKzMxLDEyIEBACiAJcmV0dXJuIChmaXJzdCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBxbGEyeDAwX25vcm1hbGl6ZV9kbWFfYWRkcigKLSAgICBkbWFfYWRkcl90ICplX2FkZHIsICB1aW50MzJfdCAqZV9sZW4sCi0gICAgZG1hX2FkZHJfdCAqbmVfYWRkciwgdWludDMyX3QgKm5lX2xlbik7Ci0KLS8qKgotICogcWxhMngwMF9ub3JtYWxpemVfZG1hX2FkZHIoKSAtIE5vcm1hbGl6ZSBhbiBETUEgYWRkcmVzcy4KLSAqIEBlX2FkZHI6IFJhdyBETUEgYWRkcmVzcwotICogQGVfbGVuOiBSYXcgRE1BIGxlbmd0aAotICogQG5lX2FkZHI6IE5vcm1hbGl6ZWQgc2Vjb25kIERNQSBhZGRyZXNzCi0gKiBAbmVfbGVuOiBOb3JtYWxpemVkIHNlY29uZCBETUEgbGVuZ3RoCi0gKgotICogSWYgdGhlIGFkZHJlc3MgZG9lcyBub3Qgc3BhbiBhIDRHQiBwYWdlIGJvdW5kYXJ5LCB0aGUgY29udGVudHMgb2YgQG5lX2FkZHIKLSAqIGFuZCBAbmVfbGVuIGFyZSB1bmRlZmluZWQuICBAZV9sZW4gaXMgdXBkYXRlZCB0byByZWZsZWN0IGEgbm9ybWFsaXphdGlvbi4KLSAqCi0gKiBFeGFtcGxlOgotICoKLSAqIAlmZmZmYWJjMGZmZmZlZWVlCShlX2FkZHIpIHN0YXJ0IG9mIERNQSBhZGRyZXNzCi0gKiAJMDAwMDAwMDAyMDAwMDAwMAkoZV9sZW4pICBsZW5ndGggb2YgRE1BIHRyYW5zZmVyCi0gKglmZmZmYWJjMTFmZmZlZWVkCWVuZCBvZiBETUEgdHJhbnNmZXIKLSAqCi0gKiBJcyB0aGUgNEdCIGJvdW5kYXJ5IGNyb3NzZWQ/Ci0gKgotICogCWZmZmZhYmMwZmZmZmVlZWUJKGVfYWRkcikKLSAqCWZmZmZhYmMxMWZmZmVlZWQJKGVfYWRkciArIGVfbGVuIC0gMSkKLSAqCTAwMDAwMDAxZTAwMDAwMDMJKChlX2FkZHIgXiAoZV9hZGRyICsgZV9sZW4gLSAxKSkKLSAqCTAwMDAwMDAxMDAwMDAwMDAJKChlX2FkZHIgXiAoZV9hZGRyICsgZV9sZW4gLSAxKSkgJiB+KDB4ZmZmZmZmZmYpCi0gKgotICogQ29tcHV0ZSBzdGFydCBvZiBzZWNvbmQgRE1BIHNlZ21lbnQ6Ci0gKgotICogCWZmZmZhYmMwZmZmZmVlZWUJKGVfYWRkcikKLSAqCWZmZmZhYmMxZmZmZmVlZWUJKDB4MTAwMDAwMDAwICsgZV9hZGRyKQotICoJZmZmZmFiYzEwMDAwMDAwMAkoMHgxMDAwMDAwMDAgKyBlX2FkZHIpICYgfigweGZmZmZmZmZmKQotICoJZmZmZmFiYzEwMDAwMDAwMAkobmVfYWRkcikKLSAqCi0gKiBDb21wdXRlIGxlbmd0aCBvZiBzZWNvbmQgRE1BIHNlZ21lbnQ6Ci0gKgotICoJMDAwMDAwMDBmZmZmZWVlZQkoZV9hZGRyICYgMHhmZmZmZmZmZikKLSAqCTAwMDAwMDAwMDAwMDExMTIJKDB4MTAwMDAwMDAwIC0gKGVfYWRkciAmIDB4ZmZmZmZmZmYpKQotICoJMDAwMDAwMDAxZmZmZWVlZQkoZV9sZW4gLSAoMHgxMDAwMDAwMDAgLSAoZV9hZGRyICYgMHhmZmZmZmZmZikpCi0gKgkwMDAwMDAwMDFmZmZlZWVlCShuZV9sZW4pCi0gKgotICogQWRqdXN0IGxlbmd0aCBvZiBmaXJzdCBETUEgc2VnbWVudAotICoKLSAqIAkwMDAwMDAwMDIwMDAwMDAwCShlX2xlbikKLSAqCTAwMDAwMDAwMDAwMDExMTIJKGVfbGVuIC0gbmVfbGVuKQotICoJMDAwMDAwMDAwMDAwMTExMgkoZV9sZW4pCi0gKgotICogUmV0dXJucyBub24temVybyBpZiB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgd2FzIG5vcm1hbGl6ZWQsIGVsc2UgemVyby4KLSAqLwotc3RhdGljIF9faW5saW5lX18gaW50Ci1xbGEyeDAwX25vcm1hbGl6ZV9kbWFfYWRkcigKLSAgICBkbWFfYWRkcl90ICplX2FkZHIsICB1aW50MzJfdCAqZV9sZW4sCi0gICAgZG1hX2FkZHJfdCAqbmVfYWRkciwgdWludDMyX3QgKm5lX2xlbikKLXsKLQlpbnQgbm9ybWFsaXplZDsKLQotCW5vcm1hbGl6ZWQgPSAwOwotCWlmICgoKmVfYWRkciBeICgqZV9hZGRyICsgKmVfbGVuIC0gMSkpICYgfigweEZGRkZGRkZGVUxMKSkgewotCQkvKiBDb21wdXRlIG5vcm1hbGl6ZWQgY3Jvc3NlZCBhZGRyZXNzIGFuZCBsZW4gKi8KLQkJKm5lX2FkZHIgPSAoMHgxMDAwMDAwMDBVTEwgKyAqZV9hZGRyKSAmIH4oMHhGRkZGRkZGRlVMTCk7Ci0JCSpuZV9sZW4gPSAqZV9sZW4gLSAoMHgxMDAwMDAwMDBVTEwgLSAoKmVfYWRkciAmIDB4RkZGRkZGRkZVTEwpKTsKLQkJKmVfbGVuIC09ICpuZV9sZW47Ci0KLQkJbm9ybWFsaXplZCsrOwotCX0KLQlyZXR1cm4gKG5vcm1hbGl6ZWQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHFsYTJ4MDBfcG9sbChzY3NpX3FsYV9ob3N0X3QgKik7CiBzdGF0aWMgaW5saW5lIHZvaWQKIHFsYTJ4MDBfcG9sbChzY3NpX3FsYV9ob3N0X3QgKmhhKQogewogCWhhLT5pc3Bfb3BzLT5pbnRyX2hhbmRsZXIoMCwgaGEpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHFsYTJ4MDBfY2hlY2tfZmFicmljX2RldmljZXMoc2NzaV9xbGFfaG9zdF90ICopOwotLyoKLSAqIFRoaXMgcm91dGluZSB3aWxsIHdhaXQgZm9yIGZhYnJpYyBkZXZpY2VzIGZvcgotICogdGhlIHJlc2V0IGRlbGF5LgotICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHFsYTJ4MDBfY2hlY2tfZmFicmljX2RldmljZXMoc2NzaV9xbGFfaG9zdF90ICpoYSkKLXsKLQl1aW50MTZfdAlmd19zdGF0ZTsKLQotCXFsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKGhhLCAmZndfc3RhdGUpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBzY3NpX3FsYV9ob3N0X3QgKiB0b19xbGFfcGFyZW50KHNjc2lfcWxhX2hvc3RfdCAqKTsKIHN0YXRpYyBfX2lubGluZV9fIHNjc2lfcWxhX2hvc3RfdCAqCiB0b19xbGFfcGFyZW50KHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7CkBAIC0xNTIsNyArNjksNiBAQAogCXJldHVybiAoUUxBX1NVQ0NFU1MpOwogfQogCi1zdGF0aWMgaW5saW5lIHVpbnQ4X3QgKmhvc3RfdG9fZmNwX3N3YXAodWludDhfdCAqLCB1aW50MzJfdCk7CiBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgKgogaG9zdF90b19mY3Bfc3dhcCh1aW50OF90ICpmY3AsIHVpbnQzMl90IGJzaXplKQogewpAQCAtMTY2LDcgKzgyLDYgQEAKICAgICAgICByZXR1cm4gZmNwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBxbGEyeDAwX2lzX3Jlc2VydmVkX2lkKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCk7CiBzdGF0aWMgaW5saW5lIGludAogcWxhMngwMF9pc19yZXNlcnZlZF9pZChzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MTZfdCBsb29wX2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKaW5kZXggMDI0YzY2Mi4uNTQ4OWQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xMSw5ICsxMSw2IEBACiAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CiAKLXN0YXRpYyBpbmxpbmUgdWludDE2X3QgcWxhMngwMF9nZXRfY21kX2RpcmVjdGlvbihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwotc3RhdGljIGlubGluZSBjb250X2VudHJ5X3QgKnFsYTJ4MDBfcHJlcF9jb250X3R5cGUwX2lvY2Ioc2NzaV9xbGFfaG9zdF90ICopOwotc3RhdGljIGlubGluZSBjb250X2E2NF9lbnRyeV90ICpxbGEyeDAwX3ByZXBfY29udF90eXBlMV9pb2NiKHNjc2lfcWxhX2hvc3RfdCAqKTsKIHN0YXRpYyByZXF1ZXN0X3QgKnFsYTJ4MDBfcmVxX3BrdChzY3NpX3FsYV9ob3N0X3QgKmhhKTsKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfaXNwX2NtZChzY3NpX3FsYV9ob3N0X3QgKmhhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IDE0ZTZmMjIuLjI4NTQ3OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA1IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTE0LDkgKzE0LDYgQEAKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfc3RhdHVzX2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqLCB2b2lkICopOwogc3RhdGljIHZvaWQgcWxhMngwMF9zdGF0dXNfY29udF9lbnRyeShzY3NpX3FsYV9ob3N0X3QgKiwgc3RzX2NvbnRfZW50cnlfdCAqKTsKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfZXJyb3JfZW50cnkoc2NzaV9xbGFfaG9zdF90ICosIHN0c19lbnRyeV90ICopOwotc3RhdGljIHZvaWQgcWxhMngwMF9tc19lbnRyeShzY3NpX3FsYV9ob3N0X3QgKiwgbXNfaW9jYl9lbnRyeV90ICopOwotCi1zdGF0aWMgdm9pZCBxbGEyNHh4X21zX2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgY3RfZW50cnlfMjR4eCAqKTsKIAogLyoqCiAgKiBxbGEyMTAwX2ludHJfaGFuZGxlcigpIC0gUHJvY2VzcyBpbnRlcnJ1cHRzIGZvciB0aGUgSVNQMjEwMCBhbmQgSVNQMjIwMC4KQEAgLTMzLDcgKzMwLDYgQEAKIAlzY3NpX3FsYV9ob3N0X3QJKmhhOwogCXN0cnVjdCBkZXZpY2VfcmVnXzJ4eHggX19pb21lbSAqcmVnOwogCWludAkJc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdW5zaWduZWQgbG9uZwlpdGVyOwogCXVpbnQxNl90CWhjY3I7CiAJdWludDE2X3QJbWJbNF07CkBAIC00OCw3ICs0NCw3IEBACiAJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDsKIAlzdGF0dXMgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAJZm9yIChpdGVyID0gNTA7IGl0ZXItLTsgKSB7CiAJCWhjY3IgPSBSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKIAkJaWYgKGhjY3IgJiBIQ0NSX1JJU0NfUEFVU0UpIHsKQEAgLTk5LDcgKzk1LDcgQEAKIAkJCVJEX1JFR19XT1JEKCZyZWctPmhjY3IpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJmhhLT5oYXJkd2FyZV9sb2NrKTsKIAogCWlmICh0ZXN0X2JpdChNQlhfSU5UUl9XQUlULCAmaGEtPm1ieF9jbWRfZmxhZ3MpICYmCiAJICAgIChzdGF0dXMgJiBNQlhfSU5URVJSVVBUKSAmJiBoYS0+ZmxhZ3MubWJveF9pbnQpIHsKQEAgLTEyNSw3ICsxMjEsNiBAQAogCXNjc2lfcWxhX2hvc3RfdAkqaGE7CiAJc3RydWN0IGRldmljZV9yZWdfMnh4eCBfX2lvbWVtICpyZWc7CiAJaW50CQlzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKIAl1bnNpZ25lZCBsb25nCWl0ZXI7CiAJdWludDMyX3QJc3RhdDsKIAl1aW50MTZfdAloY2NyOwpAQCAtMTQxLDcgKzEzNiw3IEBACiAJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDsKIAlzdGF0dXMgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAJZm9yIChpdGVyID0gNTA7IGl0ZXItLTsgKSB7CiAJCXN0YXQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+dS5pc3AyMzAwLmhvc3Rfc3RhdHVzKTsKIAkJaWYgKHN0YXQgJiBIU1JfUklTQ19QQVVTRUQpIHsKQEAgLTIxMSw3ICsyMDYsNyBAQAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwgSENDUl9DTFJfUklTQ19JTlQpOwogCQlSRF9SRUdfV09SRF9SRUxBWEVEKCZyZWctPmhjY3IpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAKIAlpZiAodGVzdF9iaXQoTUJYX0lOVFJfV0FJVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSAmJgogCSAgICAoc3RhdHVzICYgTUJYX0lOVEVSUlVQVCkgJiYgaGEtPmZsYWdzLm1ib3hfaW50KSB7CkBAIC0yNzYsNiArMjcxLDkgQEAKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAJdWludDMyX3QJcnNjbl9lbnRyeSwgaG9zdF9waWQ7CiAJdWludDhfdAkJcnNjbl9xdWV1ZV9pbmRleDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXNjc2lfcWxhX2hvc3RfdAkqdmhhOworCWludAkJaTsKIAogCS8qIFNldHVwIHRvIHByb2Nlc3MgUklPIGNvbXBsZXRpb24uICovCiAJaGFuZGxlX2NudCA9IDA7CkBAIC0zNTEsNiArMzQ5LDcgQEAKIAkJICAgICJJU1AgU3lzdGVtIEVycm9yIC0gbWJ4MT0leGggbWJ4Mj0leGggbWJ4Mz0leGguXG4iLAogCQkgICAgbWJbMV0sIG1iWzJdLCBtYlszXSk7CiAKKwkJcWxhMngwMF9wb3N0X2h3ZV93b3JrKGhhLCBtYlswXSwgbWJbMV0sIG1iWzJdLCBtYlszXSk7CiAJCWhhLT5pc3Bfb3BzLT5md19kdW1wKGhhLCAxKTsKIAogCQlpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkgewpAQCAtMzc1LDYgKzM3NCw3IEBACiAJCSAgICBoYS0+aG9zdF9ubykpOwogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJJU1AgUmVxdWVzdCBUcmFuc2ZlciBFcnJvci5cbiIpOwogCisJCXFsYTJ4MDBfcG9zdF9od2Vfd29yayhoYSwgbWJbMF0sIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKIAkJYnJlYWs7CiAKQEAgLTM4Myw2ICszODMsNyBAQAogCQkgICAgaGEtPmhvc3Rfbm8pKTsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiSVNQIFJlc3BvbnNlIFRyYW5zZmVyIEVycm9yLlxuIik7CiAKKwkJcWxhMngwMF9wb3N0X2h3ZV93b3JrKGhhLCBtYlswXSwgbWJbMV0sIG1iWzJdLCBtYlszXSk7CiAJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCQlicmVhazsKIApAQCAtNDEwLDYgKzQxMSw3IEBACiAJCXNldF9iaXQoUkVHSVNURVJfRkM0X05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCiAJCWhhLT5mbGFncy5tYW5hZ2VtZW50X3NlcnZlcl9sb2dnZWRfaW4gPSAwOworCQlxbGEyeDAwX3Bvc3RfYWVuX3dvcmsoaGEsIEZDSF9FVlRfTElQLCBtYlsxXSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfTE9PUF9VUDoJCS8qIExvb3AgVXAgRXZlbnQgKi8KQEAgLTQyOSwxMiArNDMxLDE0IEBACiAJCSAgICBsaW5rX3NwZWVkKTsKIAogCQloYS0+ZmxhZ3MubWFuYWdlbWVudF9zZXJ2ZXJfbG9nZ2VkX2luID0gMDsKKwkJcWxhMngwMF9wb3N0X2Flbl93b3JrKGhhLCBGQ0hfRVZUX0xJTktVUCwgaGEtPmxpbmtfZGF0YV9yYXRlKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1CQV9MT09QX0RPV046CQkvKiBMb29wIERvd24gRXZlbnQgKi8KLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgTE9PUCBET1dOICgleCkuXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8sIG1iWzFdKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkxPT1AgRE9XTiBkZXRlY3RlZCAoJXgpLlxuIiwgbWJbMV0pOworCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEFzeW5jaHJvbm91cyBMT09QIERPV04gIgorCQkgICAgIigleCAleCAleCkuXG4iLCBoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLCBtYlszXSkpOworCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJMT09QIERPV04gZGV0ZWN0ZWQgKCV4ICV4ICV4KS5cbiIsCisJCSAgICBtYlsxXSwgbWJbMl0sIG1iWzNdKTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKIAkJCWF0b21pY19zZXQoJmhhLT5sb29wX3N0YXRlLCBMT09QX0RPV04pOwpAQCAtNDUyLDYgKzQ1Niw3IEBACiAJCWhhLT5saW5rX2RhdGFfcmF0ZSA9IFBPUlRfU1BFRURfVU5LTk9XTjsKIAkJaWYgKHFsMnhmZG1pZW5hYmxlKQogCQkJc2V0X2JpdChSRUdJU1RFUl9GRE1JX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOworCQlxbGEyeDAwX3Bvc3RfYWVuX3dvcmsoaGEsIEZDSF9FVlRfTElOS0RPV04sIDApOwogCQlicmVhazsKIAogCWNhc2UgTUJBX0xJUF9SRVNFVDoJCS8qIExJUCByZXNldCBvY2N1cnJlZCAqLwpAQCAtNDc1LDYgKzQ4MCw3IEBACiAKIAkJaGEtPm9wZXJhdGluZ19tb2RlID0gTE9PUDsKIAkJaGEtPmZsYWdzLm1hbmFnZW1lbnRfc2VydmVyX2xvZ2dlZF9pbiA9IDA7CisJCXFsYTJ4MDBfcG9zdF9hZW5fd29yayhoYSwgRkNIX0VWVF9MSVBSRVNFVCwgbWJbMV0pOwogCQlicmVhazsKIAogCWNhc2UgTUJBX1BPSU5UX1RPX1BPSU5UOgkvKiBQb2ludC10by1Qb2ludCAqLwpAQCAtNTM4LDYgKzU0NCwxOCBAQAogCQlicmVhazsKIAogCWNhc2UgTUJBX1BPUlRfVVBEQVRFOgkJLyogUG9ydCBkYXRhYmFzZSB1cGRhdGUgKi8KKwkJaWYgKChoYS0+ZmxhZ3MubnBpdl9zdXBwb3J0ZWQpICYmIChoYS0+bnVtX3Zob3N0cykpIHsKKwkJCWZvcl9lYWNoX21hcHBlZF92cF9pZHgoaGEsIGkpIHsKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZoYSwgJmhhLT52cF9saXN0LAorCQkJCSAgICB2cF9saXN0KSB7CisJCQkJCWlmICgobWJbM10gJiAweGZmKQorCQkJCQkgICAgPT0gdmhhLT52cF9pZHgpIHsKKwkJCQkJCWhhID0gdmhhOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KIAkJLyoKIAkJICogSWYgUE9SVCBVUERBVEUgaXMgZ2xvYmFsIChyZWNpZXZlZCBMSVBfT0NDVVJFRC9MSVBfUkVTRVQKIAkJICogZXZlbnQgZXRjLiBlYXJsaWVyIGluZGljYXRpbmcgbG9vcCBpcyBkb3duKSB0aGVuIHByb2Nlc3MKQEAgLTU3MiwxMiArNTkwLDE4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfUlNDTl9VUERBVEU6CQkvKiBTdGF0ZSBDaGFuZ2UgUmVnaXN0cmF0aW9uICovCi0JCS8qIENoZWNrIGlmIHRoZSBWcG9ydCBoYXMgaXNzdWVkIGEgU0NSICovCi0JCWlmIChoYS0+cGFyZW50ICYmIHRlc3RfYml0KFZQX1NDUl9ORUVERUQsICZoYS0+dnBfZmxhZ3MpKQotCQkJYnJlYWs7Ci0JCS8qIE9ubHkgaGFuZGxlIFNDTnMgZm9yIG91ciBWcG9ydCBpbmRleC4gKi8KLQkJaWYgKGhhLT5mbGFncy5ucGl2X3N1cHBvcnRlZCAmJiBoYS0+dnBfaWR4ICE9IG1iWzNdKQotCQkJYnJlYWs7CisJCWlmICgoaGEtPmZsYWdzLm5waXZfc3VwcG9ydGVkKSAmJiAoaGEtPm51bV92aG9zdHMpKSB7CisJCQlmb3JfZWFjaF9tYXBwZWRfdnBfaWR4KGhhLCBpKSB7CisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2aGEsICZoYS0+dnBfbGlzdCwKKwkJCQkgICAgdnBfbGlzdCkgeworCQkJCQlpZiAoKG1iWzNdICYgMHhmZikKKwkJCQkJICAgID09IHZoYS0+dnBfaWR4KSB7CisJCQkJCQloYSA9IHZoYTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CiAKIAkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgUlNDUiBVUERBVEUuXG4iLAogCQkgICAgaGEtPmhvc3Rfbm8pKTsKQEAgLTYxMiw2ICs2MzYsNyBAQAogCiAJCXNldF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmaGEtPmRwY19mbGFncyk7CiAJCXNldF9iaXQoUlNDTl9VUERBVEUsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJcWxhMngwMF9wb3N0X2Flbl93b3JrKGhhLCBGQ0hfRVZUX1JTQ04sIHJzY25fZW50cnkpOwogCQlicmVhazsKIAogCS8qIGNhc2UgTUJBX1JJT19SRVNQT05TRTogKi8KQEAgLTYzNyw2ICs2NjIsNDIgQEAKIAkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBUcmFjZSBOb3RpZmljYXRpb24gLS0gJTA0eCAlMDR4LlxuIiwKIAkJaGEtPmhvc3Rfbm8sIG1iWzFdLCBtYlsyXSkpOwogCQlicmVhazsKKworCWNhc2UgTUJBX0lTUDg0WFhfQUxFUlQ6CisJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogSVNQODRYWCBBbGVydCBOb3RpZmljYXRpb24gLS0gIgorCQkgICAgIiUwNHggJTA0eCAlMDR4XG4iLCBoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLCBtYlszXSkpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+Y3M4NHh4LT5hY2Nlc3NfbG9jaywgZmxhZ3MpOworCQlzd2l0Y2ggKG1iWzFdKSB7CisJCWNhc2UgQTg0X1BBTklDX1JFQ09WRVJZOgorCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQWxlcnQgODRYWDogcGFuaWMgcmVjb3ZlcnkgIgorCQkJICAgICIlMDR4ICUwNHhcbiIsIG1iWzJdLCBtYlszXSk7CisJCQlicmVhazsKKwkJY2FzZSBBODRfT1BfTE9HSU5fQ09NUExFVEU6CisJCQloYS0+Y3M4NHh4LT5vcF9md192ZXJzaW9uID0gbWJbM10gPDwgMTYgfCBtYlsyXTsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJBbGVydCA4NFhYOiIKKwkJCSAgICAiZmlybXdhcmUgdmVyc2lvbiAleFxuIiwgaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbikpOworCQkJYnJlYWs7CisJCWNhc2UgQTg0X0RJQUdfTE9HSU5fQ09NUExFVEU6CisJCQloYS0+Y3M4NHh4LT5kaWFnX2Z3X3ZlcnNpb24gPSBtYlszXSA8PCAxNiB8IG1iWzJdOworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkFsZXJ0IDg0WFg6IgorCQkJICAgICJkaWFnbm9zdGljIGZpcm13YXJlIHZlcnNpb24gJXhcbiIsCisJCQkgICAgaGEtPmNzODR4eC0+ZGlhZ19md192ZXJzaW9uKSk7CisJCQlicmVhazsKKwkJY2FzZSBBODRfR09MRF9MT0dJTl9DT01QTEVURToKKwkJCWhhLT5jczg0eHgtPmRpYWdfZndfdmVyc2lvbiA9IG1iWzNdIDw8IDE2IHwgbWJbMl07CisJCQloYS0+Y3M4NHh4LT5md191cGRhdGUgPSAxOworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkFsZXJ0IDg0WFg6IGdvbGQgIgorCQkJICAgICJmaXJtd2FyZSB2ZXJzaW9uICV4XG4iLAorCQkJICAgIGhhLT5jczg0eHgtPmdvbGRfZndfdmVyc2lvbikpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKKwkJCSAgICAiQWxlcnQgODR4eDogSW52YWxpZCBBbGVydCAlMDR4ICUwNHggJTA0eFxuIiwKKwkJCSAgICBtYlsxXSwgbWJbMl0sIG1iWzNdKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+Y3M4NHh4LT5hY2Nlc3NfbG9jaywgZmxhZ3MpOworCQlicmVhazsKIAl9CiAKIAlpZiAoIWhhLT5wYXJlbnQgJiYgaGEtPm51bV92aG9zdHMpCkBAIC04MDMsOSArODY0LDYgQEAKIAkJY2FzZSBTVEFUVVNfQ09OVF9UWVBFOgogCQkJcWxhMngwMF9zdGF0dXNfY29udF9lbnRyeShoYSwgKHN0c19jb250X2VudHJ5X3QgKilwa3QpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTVNfSU9DQl9UWVBFOgotCQkJcWxhMngwMF9tc19lbnRyeShoYSwgKG1zX2lvY2JfZW50cnlfdCAqKXBrdCk7Ci0JCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIFR5cGUgTm90IFN1cHBvcnRlZC4gKi8KIAkJCURFQlVHNChwcmludGsoS0VSTl9XQVJOSU5HCkBAIC05NTgsNiArMTAxNiwxMSBAQAogCQl9CiAJfQogCisJLyogQ2hlY2sgZm9yIG92ZXJydW4uICovCisJaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkgJiYgY29tcF9zdGF0dXMgPT0gQ1NfQ09NUExFVEUgJiYKKwkgICAgc2NzaV9zdGF0dXMgJiBTU19SRVNJRFVBTF9PVkVSKQorCQljb21wX3N0YXR1cyA9IENTX0RBVEFfT1ZFUlJVTjsKKwogCS8qCiAJICogQmFzZWQgb24gSG9zdCBhbmQgc2NzaSBzdGF0dXMgZ2VuZXJhdGUgc3RhdHVzIGNvZGUgZm9yIExpbnV4CiAJICovCkBAIC0xMzM1LDQ0ICsxMzk4LDYgQEAKIH0KIAogLyoqCi0gKiBxbGEyeDAwX21zX2VudHJ5KCkgLSBQcm9jZXNzIGEgTWFuYWdlbWVudCBTZXJ2ZXIgZW50cnkuCi0gKiBAaGE6IFNDU0kgZHJpdmVyIEhBIGNvbnRleHQKLSAqIEBpbmRleDogUmVzcG9uc2UgcXVldWUgb3V0IHBvaW50ZXIKLSAqLwotc3RhdGljIHZvaWQKLXFsYTJ4MDBfbXNfZW50cnkoc2NzaV9xbGFfaG9zdF90ICpoYSwgbXNfaW9jYl9lbnRyeV90ICpwa3QpCi17Ci0Jc3JiX3QgICAgICAgICAgKnNwOwotCi0JREVCVUczKHByaW50aygiJXMoJWxkKTogcGt0PSVwIHBrdGhhbmRsZT0lZC5cbiIsCi0JICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcGt0LCBwa3QtPmhhbmRsZTEpKTsKLQotCS8qIFZhbGlkYXRlIGhhbmRsZS4gKi8KLSAJaWYgKHBrdC0+aGFuZGxlMSA8IE1BWF9PVVRTVEFORElOR19DT01NQU5EUykKLSAJCXNwID0gaGEtPm91dHN0YW5kaW5nX2NtZHNbcGt0LT5oYW5kbGUxXTsKLQllbHNlCi0JCXNwID0gTlVMTDsKLQotCWlmIChzcCA9PSBOVUxMKSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogTVMgZW50cnkgLSBpbnZhbGlkIGhhbmRsZVxuIiwKLQkJICAgIGhhLT5ob3N0X25vKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIk1TIGVudHJ5IC0gaW52YWxpZCBoYW5kbGVcbiIpOwotCi0JCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JQ01EX0NPTVBMX1NUQVRVUyhzcC0+Y21kKSA9IGxlMTZfdG9fY3B1KHBrdC0+c3RhdHVzKTsKLQlDTURfRU5UUllfU1RBVFVTKHNwLT5jbWQpID0gcGt0LT5lbnRyeV9zdGF0dXM7Ci0KLQkvKiBGcmVlIG91dHN0YW5kaW5nIGNvbW1hbmQgc2xvdC4gKi8KLQloYS0+b3V0c3RhbmRpbmdfY21kc1twa3QtPmhhbmRsZTFdID0gTlVMTDsKLQotCXFsYTJ4MDBfc3BfY29tcGwoaGEsIHNwKTsKLX0KLQotCi0vKioKICAqIHFsYTI0eHhfbWJ4X2NvbXBsZXRpb24oKSAtIFByb2Nlc3MgbWFpbGJveCBjb21tYW5kIGNvbXBsZXRpb25zLgogICogQGhhOiBTQ1NJIGRyaXZlciBIQSBjb250ZXh0CiAgKiBAbWIwOiBNYWlsYm94MCByZWdpc3RlcgpAQCAtMTQ0NCw5ICsxNDY5LDYgQEAKIAkJY2FzZSBTVEFUVVNfQ09OVF9UWVBFOgogCQkJcWxhMngwMF9zdGF0dXNfY29udF9lbnRyeShoYSwgKHN0c19jb250X2VudHJ5X3QgKilwa3QpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTVNfSU9DQl9UWVBFOgotCQkJcWxhMjR4eF9tc19lbnRyeShoYSwgKHN0cnVjdCBjdF9lbnRyeV8yNHh4ICopcGt0KTsKLQkJCWJyZWFrOwogCQljYXNlIFZQX1JQVF9JRF9JT0NCX1RZUEU6CiAJCQlxbGEyNHh4X3JlcG9ydF9pZF9hY3F1aXNpdGlvbihoYSwKIAkJCSAgICAoc3RydWN0IHZwX3JwdF9pZF9lbnRyeV8yNHh4ICopcGt0KTsKQEAgLTE1MjgsNyArMTU1MCw2IEBACiAJc2NzaV9xbGFfaG9zdF90CSpoYTsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZzsKIAlpbnQJCXN0YXR1czsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXVuc2lnbmVkIGxvbmcJaXRlcjsKIAl1aW50MzJfdAlzdGF0OwogCXVpbnQzMl90CWhjY3I7CkBAIC0xNTQ0LDEzICsxNTY1LDE5IEBACiAJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OwogCXN0YXR1cyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmhhLT5oYXJkd2FyZV9sb2NrKTsKIAlmb3IgKGl0ZXIgPSA1MDsgaXRlci0tOyApIHsKIAkJc3RhdCA9IFJEX1JFR19EV09SRCgmcmVnLT5ob3N0X3N0YXR1cyk7CiAJCWlmIChzdGF0ICYgSFNSWF9SSVNDX1BBVVNFRCkgewogCQkJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKQogCQkJCWJyZWFrOwogCisJCQlpZiAoaGEtPmh3X2V2ZW50X3BhdXNlX2Vycm9ycyA9PSAwKQorCQkJCXFsYTJ4MDBfcG9zdF9od2Vfd29yayhoYSwgSFdfRVZFTlRfUEFSSVRZX0VSUiwKKwkJCQkgICAgMCwgTVNXKHN0YXQpLCBMU1coc3RhdCkpOworCQkJZWxzZSBpZiAoaGEtPmh3X2V2ZW50X3BhdXNlX2Vycm9ycyA8IDB4ZmZmZmZmZmYpCisJCQkJaGEtPmh3X2V2ZW50X3BhdXNlX2Vycm9ycysrOworCiAJCQloY2NyID0gUkRfUkVHX0RXT1JEKCZyZWctPmhjY3IpOwogCiAJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJSSVNDIHBhdXNlZCAtLSBIQ0NSPSV4LCAiCkBAIC0xNTkyLDcgKzE2MTksNyBAQAogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmhjY3IsIEhDQ1JYX0NMUl9SSVNDX0lOVCk7CiAJCVJEX1JFR19EV09SRF9SRUxBWEVEKCZyZWctPmhjY3IpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAKIAlpZiAodGVzdF9iaXQoTUJYX0lOVFJfV0FJVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSAmJgogCSAgICAoc3RhdHVzICYgTUJYX0lOVEVSUlVQVCkgJiYgaGEtPmZsYWdzLm1ib3hfaW50KSB7CkBAIC0xNjAzLDY2ICsxNjMwLDIxIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKioKLSAqIHFsYTI0eHhfbXNfZW50cnkoKSAtIFByb2Nlc3MgYSBNYW5hZ2VtZW50IFNlcnZlciBlbnRyeS4KLSAqIEBoYTogU0NTSSBkcml2ZXIgSEEgY29udGV4dAotICogQGluZGV4OiBSZXNwb25zZSBxdWV1ZSBvdXQgcG9pbnRlcgotICovCi1zdGF0aWMgdm9pZAotcWxhMjR4eF9tc19lbnRyeShzY3NpX3FsYV9ob3N0X3QgKmhhLCBzdHJ1Y3QgY3RfZW50cnlfMjR4eCAqcGt0KQotewotCXNyYl90ICAgICAgICAgICpzcDsKLQotCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IHBrdD0lcCBwa3RoYW5kbGU9JWQuXG4iLAotCSAgICBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHBrdCwgcGt0LT5oYW5kbGUpKTsKLQotCURFQlVHOShwcmludGsoIiVzOiBjdCBwa3QgZHVtcDpcbiIsIF9fZnVuY19fKSk7Ci0JREVCVUc5KHFsYTJ4MDBfZHVtcF9idWZmZXIoKHZvaWQgKilwa3QsIHNpemVvZihzdHJ1Y3QgY3RfZW50cnlfMjR4eCkpKTsKLQotCS8qIFZhbGlkYXRlIGhhbmRsZS4gKi8KLSAJaWYgKHBrdC0+aGFuZGxlIDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKQotIAkJc3AgPSBoYS0+b3V0c3RhbmRpbmdfY21kc1twa3QtPmhhbmRsZV07Ci0JZWxzZQotCQlzcCA9IE5VTEw7Ci0KLQlpZiAoc3AgPT0gTlVMTCkgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IE1TIGVudHJ5IC0gaW52YWxpZCBoYW5kbGVcbiIsCi0JCSAgICBoYS0+aG9zdF9ubykpOwotCQlERUJVRzEwKHByaW50aygic2NzaSglbGQpOiBNUyBlbnRyeSAtIGludmFsaWQgaGFuZGxlXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8pKTsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiTVMgZW50cnkgLSBpbnZhbGlkIGhhbmRsZSAlZFxuIiwKLQkJICAgIHBrdC0+aGFuZGxlKTsKLQotCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCUNNRF9DT01QTF9TVEFUVVMoc3AtPmNtZCkgPSBsZTE2X3RvX2NwdShwa3QtPmNvbXBfc3RhdHVzKTsKLQlDTURfRU5UUllfU1RBVFVTKHNwLT5jbWQpID0gcGt0LT5lbnRyeV9zdGF0dXM7Ci0KLQkvKiBGcmVlIG91dHN0YW5kaW5nIGNvbW1hbmQgc2xvdC4gKi8KLQloYS0+b3V0c3RhbmRpbmdfY21kc1twa3QtPmhhbmRsZV0gPSBOVUxMOwotCi0JcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QKIHFsYTI0eHhfbXNpeF9yc3BfcShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc2NzaV9xbGFfaG9zdF90CSpoYTsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaGEgPSBkZXZfaWQ7CiAJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAKIAlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUoaGEpOwotCiAJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmaGEtPmhhcmR3YXJlX2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTY3Myw3ICsxNjU1LDYgQEAKIAlzY3NpX3FsYV9ob3N0X3QJKmhhOwogCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnOwogCWludAkJc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdWludDMyX3QJc3RhdDsKIAl1aW50MzJfdAloY2NyOwogCXVpbnQxNl90CW1iWzRdOwpAQCAtMTY4MiwxMyArMTY2MywxOSBAQAogCXJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKIAlzdGF0dXMgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAJZG8gewogCQlzdGF0ID0gUkRfUkVHX0RXT1JEKCZyZWctPmhvc3Rfc3RhdHVzKTsKIAkJaWYgKHN0YXQgJiBIU1JYX1JJU0NfUEFVU0VEKSB7CiAJCQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpCiAJCQkJYnJlYWs7CiAKKwkJCWlmIChoYS0+aHdfZXZlbnRfcGF1c2VfZXJyb3JzID09IDApCisJCQkJcWxhMngwMF9wb3N0X2h3ZV93b3JrKGhhLCBIV19FVkVOVF9QQVJJVFlfRVJSLAorCQkJCSAgICAwLCBNU1coc3RhdCksIExTVyhzdGF0KSk7CisJCQllbHNlIGlmIChoYS0+aHdfZXZlbnRfcGF1c2VfZXJyb3JzIDwgMHhmZmZmZmZmZikKKwkJCQloYS0+aHdfZXZlbnRfcGF1c2VfZXJyb3JzKys7CisKIAkJCWhjY3IgPSBSRF9SRUdfRFdPUkQoJnJlZy0+aGNjcik7CiAKIAkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlJJU0MgcGF1c2VkIC0tIEhDQ1I9JXgsICIKQEAgLTE3MjksNyArMTcxNiw3IEBACiAJCX0KIAkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwogCX0gd2hpbGUgKDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJmhhLT5oYXJkd2FyZV9sb2NrKTsKIAogCWlmICh0ZXN0X2JpdChNQlhfSU5UUl9XQUlULCAmaGEtPm1ieF9jbWRfZmxhZ3MpICYmCiAJICAgIChzdGF0dXMgJiBNQlhfSU5URVJSVVBUKSAmJiBoYS0+ZmxhZ3MubWJveF9pbnQpIHsKQEAgLTE4MTYsMTAgKzE4MDMsOSBAQAogewogCWludCByZXQ7CiAJZGV2aWNlX3JlZ190IF9faW9tZW0gKnJlZyA9IGhhLT5pb2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIElmIHBvc3NpYmxlLCBlbmFibGUgTVNJLVguICovCi0JaWYgKCFJU19RTEEyNDMyKGhhKSAmJiAhSVNfUUxBMjUzMihoYSkpCisJaWYgKCFJU19RTEEyNDMyKGhhKSAmJiAhSVNfUUxBMjUzMihoYSkgJiYgIUlTX1FMQTg0MzIoaGEpKQogCQlnb3RvIHNraXBfbXNpeDsKIAogICAgICAgICBpZiAoSVNfUUxBMjQzMihoYSkgJiYgKGhhLT5jaGlwX3JldmlzaW9uIDwgUUxBX01TSVhfQ0hJUF9SRVZfMjRYWCB8fApAQCAtMTg1NCw3ICsxODQwLDcgQEAKIAkgICAgIk1TSS1YOiBGYWxsaW5nIGJhY2stdG8gSU5UYSBtb2RlIC0tICVkLlxuIiwgcmV0KTsKIHNraXBfbXNpeDoKIAotCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTI1MzIoaGEpKQorCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTI1MzIoaGEpICYmICFJU19RTEE4NDMyKGhhKSkKIAkJZ290byBza2lwX21zaTsKIAogCXJldCA9IHBjaV9lbmFibGVfbXNpKGhhLT5wZGV2KTsKQEAgLTE4NzcsNyArMTg2Myw3IEBACiBjbGVhcl9yaXNjX2ludHM6CiAKIAloYS0+aXNwX29wcy0+ZGlzYWJsZV9pbnRycyhoYSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOwogCWlmIChJU19GV0kyX0NBUEFCTEUoaGEpKSB7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjQuaGNjciwgSENDUlhfQ0xSX0hPU1RfSU5UKTsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pc3AyNC5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwpAQCAtMTg4Niw3ICsxODcyLDcgQEAKIAkJV1JUX1JFR19XT1JEKCZyZWctPmlzcC5oY2NyLCBIQ0NSX0NMUl9SSVNDX0lOVCk7CiAJCVdSVF9SRUdfV09SRCgmcmVnLT5pc3AuaGNjciwgSENDUl9DTFJfSE9TVF9JTlQpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOwogCWhhLT5pc3Bfb3BzLT5lbmFibGVfaW50cnMoaGEpOwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCmluZGV4IDk5ZDI5ZmYuLjdkMGE4YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA1IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTMxMCw3ICszMTAsNyBAQAogCX0KIAogCW1jcC0+aW5fbWIgPSBNQlhfMDsKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCX0KIAl9CiAKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtNDE3LDcgKzQxNyw3IEBACiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzZ8TUJYXzV8TUJYXzR8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CiAJbWNwLT5mbGFncyA9IDA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKIAkvKiBSZXR1cm4gbWFpbGJveCBkYXRhLiAqLwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfRklSTVdBUkVfT1BUSU9OOwogCW1jcC0+b3V0X21iID0gTUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwotCW1jcC0+dG92ID0gMzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCkBAIC01MjQsNyArNTI0LDcgQEAKIAkJbWNwLT5tYlsxMl0gPSAwOwkvKiBVbmRvY3VtZW50ZWQsIGJ1dCB1c2VkICovCiAJCW1jcC0+b3V0X21iIHw9IE1CWF8xMnxNQlhfMTF8TUJYXzEwOwogCX0KLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtNTc2LDcgKzU3Niw3IEBACiAJbWNwLT5tYls3XSA9IDB4MjUyNTsKIAltY3AtPm91dF9tYiA9IE1CWF83fE1CWF82fE1CWF81fE1CWF80fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfN3xNQlhfNnxNQlhfNXxNQlhfNHxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtNTg3LDYgKzU4NywxNCBAQAogCQlpZiAobWNwLT5tYls1XSAhPSAweEE1QTUgfHwgbWNwLT5tYls2XSAhPSAweDVBNUEgfHwKIAkJICAgIG1jcC0+bWJbN10gIT0gMHgyNTI1KQogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CisJCWlmIChydmFsID09IFFMQV9GVU5DVElPTl9GQUlMRUQpIHsKKwkJCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnID0KKwkJCSAgICAmaGEtPmlvYmFzZS0+aXNwMjQ7CisKKwkJCXFsYTJ4eHhfaHdfZXZlbnRfbG9nKGhhLCBIV19FVkVOVF9JU1BfRVJSLCAwLAorCQkJICAgIExTVyhSRF9SRUdfRFdPUkQoJnJlZy0+aGNjcikpLAorCQkJICAgIExTVyhSRF9SRUdfRFdPUkQoJnJlZy0+aXN0YXR1cykpKTsKKwkJfQogCX0KIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CkBAIC02NDAsNyArNjQ4LDcgQEAKIAkJbWNwLT5pbl9tYiB8PSBNQlhfMTsKIAl9CiAKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtNjc0LDggKzY4Miw4IEBACiAgKglLZXJuZWwgY29udGV4dC4KICAqLwogaW50Ci1xbGEyeDAwX2lzc3VlX2lvY2Ioc2NzaV9xbGFfaG9zdF90ICpoYSwgdm9pZCogIGJ1ZmZlciwgZG1hX2FkZHJfdCBwaHlzX2FkZHIsCi0gICAgc2l6ZV90IHNpemUpCitxbGEyeDAwX2lzc3VlX2lvY2JfdGltZW91dChzY3NpX3FsYV9ob3N0X3QgKmhhLCB2b2lkICpidWZmZXIsCisgICAgZG1hX2FkZHJfdCBwaHlzX2FkZHIsIHNpemVfdCBzaXplLCB1aW50MzJfdCB0b3YpCiB7CiAJaW50CQlydmFsOwogCW1ieF9jbWRfdAltYzsKQEAgLTY4OSw3ICs2OTcsNyBAQAogCW1jcC0+bWJbN10gPSBMU1coTVNEKHBoeXNfYWRkcikpOwogCW1jcC0+b3V0X21iID0gTUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF8yfE1CWF8wOwotCW1jcC0+dG92ID0gMzA7CisJbWNwLT50b3YgPSB0b3Y7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCkBAIC03MTAsNiArNzE4LDE0IEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKK2ludAorcWxhMngwMF9pc3N1ZV9pb2NiKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHZvaWQgKmJ1ZmZlciwgZG1hX2FkZHJfdCBwaHlzX2FkZHIsCisgICAgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIHFsYTJ4MDBfaXNzdWVfaW9jYl90aW1lb3V0KGhhLCBidWZmZXIsIHBoeXNfYWRkciwgc2l6ZSwKKwkgICAgTUJYX1RPVl9TRUNPTkRTKTsKK30KKwogLyoKICAqIHFsYTJ4MDBfYWJvcnRfY29tbWFuZAogICoJQWJvcnQgY29tbWFuZCBhYm9ydHMgYSBzcGVjaWZpZWQgSU9DQi4KQEAgLTc2MCw3ICs3NzYsNyBAQAogCW1jcC0+bWJbNl0gPSAodWludDE2X3Qpc3AtPmNtZC0+ZGV2aWNlLT5sdW47CiAJbWNwLT5vdXRfbWIgPSBNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKQEAgLTc3NiwzNiArNzkyLDIwIEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKLSNpZiBVU0VfQUJPUlRfVEdUCi0vKgotICogcWxhMngwMF9hYm9ydF90YXJnZXQKLSAqCUlzc3VlIGFib3J0IHRhcmdldCBtYWlsYm94IGNvbW1hbmQuCi0gKgotICogSW5wdXQ6Ci0gKgloYSA9IGFkYXB0ZXIgYmxvY2sgcG9pbnRlci4KLSAqCi0gKiBSZXR1cm5zOgotICoJcWxhMngwMCBsb2NhbCBmdW5jdGlvbiByZXR1cm4gc3RhdHVzIGNvZGUuCi0gKgotICogQ29udGV4dDoKLSAqCUtlcm5lbCBjb250ZXh0LgotICovCiBpbnQKLXFsYTJ4MDBfYWJvcnRfdGFyZ2V0KGZjX3BvcnRfdCAqZmNwb3J0KQorcWxhMngwMF9hYm9ydF90YXJnZXQoc3RydWN0IGZjX3BvcnQgKmZjcG9ydCwgdW5zaWduZWQgaW50IGwpCiB7Ci0JaW50ICAgICAgICBydmFsOworCWludCBydmFsLCBydmFsMjsKIAltYnhfY21kX3QgIG1jOwogCW1ieF9jbWRfdCAgKm1jcCA9ICZtYzsKIAlzY3NpX3FsYV9ob3N0X3QgKmhhOwogCi0JaWYgKGZjcG9ydCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGZjcG9ydC0+aGEtPmhvc3Rfbm8pKTsKIAorCWwgPSBsOwogCWhhID0gZmNwb3J0LT5oYTsKIAltY3AtPm1iWzBdID0gTUJDX0FCT1JUX1RBUkdFVDsKLQltY3AtPm91dF9tYiA9IE1CWF8yfE1CWF8xfE1CWF8wOworCW1jcC0+b3V0X21iID0gTUJYXzl8TUJYXzJ8TUJYXzF8TUJYXzA7CiAJaWYgKEhBU19FWFRFTkRFRF9JRFMoaGEpKSB7CiAJCW1jcC0+bWJbMV0gPSBmY3BvcnQtPmxvb3BfaWQ7CiAJCW1jcC0+bWJbMTBdID0gMDsKQEAgLTgxNCwyNyArODE0LDcwIEBACiAJCW1jcC0+bWJbMV0gPSBmY3BvcnQtPmxvb3BfaWQgPDwgODsKIAl9CiAJbWNwLT5tYlsyXSA9IGhhLT5sb29wX3Jlc2V0X2RlbGF5OworCW1jcC0+bWJbOV0gPSBoYS0+dnBfaWR4OwogCiAJbWNwLT5pbl9tYiA9IE1CWF8wOwotCW1jcC0+dG92ID0gMzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwotCi0JLyogSXNzdWUgbWFya2VyIGNvbW1hbmQuICovCi0JaGEtPm1hcmtlcl9uZWVkZWQgPSAxOwotCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCJxbGEyeDAwX2Fib3J0X3RhcmdldCglbGQpOiBmYWlsZWQ9JXguXG4iLAorCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLAogCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwl9CisKKwkvKiBJc3N1ZSBtYXJrZXIgSU9DQi4gKi8KKwlydmFsMiA9IHFsYTJ4MDBfbWFya2VyKGhhLCBmY3BvcnQtPmxvb3BfaWQsIDAsIE1LX1NZTkNfSUQpOworCWlmIChydmFsMiAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBNYXJrZXIgSU9DQiAiCisJCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbDIpKTsKIAl9IGVsc2UgewotCQkvKkVNUFRZKi8KLQkJREVCVUcxMShwcmludGsoInFsYTJ4MDBfYWJvcnRfdGFyZ2V0KCVsZCk6IGRvbmUuXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8pKTsKKwkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKIH0KLSNlbmRpZgorCitpbnQKK3FsYTJ4MDBfbHVuX3Jlc2V0KHN0cnVjdCBmY19wb3J0ICpmY3BvcnQsIHVuc2lnbmVkIGludCBsKQoreworCWludCBydmFsLCBydmFsMjsKKwltYnhfY21kX3QgIG1jOworCW1ieF9jbWRfdCAgKm1jcCA9ICZtYzsKKwlzY3NpX3FsYV9ob3N0X3QgKmhhOworCisJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgZmNwb3J0LT5oYS0+aG9zdF9ubykpOworCisJaGEgPSBmY3BvcnQtPmhhOworCW1jcC0+bWJbMF0gPSBNQkNfTFVOX1JFU0VUOworCW1jcC0+b3V0X21iID0gTUJYXzl8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CisJaWYgKEhBU19FWFRFTkRFRF9JRFMoaGEpKQorCQltY3AtPm1iWzFdID0gZmNwb3J0LT5sb29wX2lkOworCWVsc2UKKwkJbWNwLT5tYlsxXSA9IGZjcG9ydC0+bG9vcF9pZCA8PCA4OworCW1jcC0+bWJbMl0gPSBsOworCW1jcC0+bWJbM10gPSAwOworCW1jcC0+bWJbOV0gPSBoYS0+dnBfaWR4OworCisJbWNwLT5pbl9tYiA9IE1CWF8wOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSAwOworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLAorCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwl9CisKKwkvKiBJc3N1ZSBtYXJrZXIgSU9DQi4gKi8KKwlydmFsMiA9IHFsYTJ4MDBfbWFya2VyKGhhLCBmY3BvcnQtPmxvb3BfaWQsIGwsIE1LX1NZTkNfSURfTFVOKTsKKwlpZiAocnZhbDIgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gaXNzdWUgTWFya2VyIElPQ0IgIgorCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHJ2YWwyKSk7CisJfSBlbHNlIHsKKwkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwl9CisKKwlyZXR1cm4gcnZhbDsKK30KIAogLyoKICAqIHFsYTJ4MDBfZ2V0X2FkYXB0ZXJfaWQKQEAgLTg3MSw3ICs5MTQsNyBAQAogCW1jcC0+bWJbOV0gPSBoYS0+dnBfaWR4OwogCW1jcC0+b3V0X21iID0gTUJYXzl8TUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF85fE1CWF83fE1CWF82fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwotCW1jcC0+dG92ID0gMzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCWlmIChtY3AtPm1iWzBdID09IE1CU19DT01NQU5EX0VSUk9SKQpAQCAtOTI4LDcgKzk3MSw3IEBACiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfUkVUUllfQ09VTlQ7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKQEAgLTk5NSw3ICsxMDM4LDcgQEAKIAltY3AtPmluX21iID0gTUJYXzV8TUJYXzR8TUJYXzA7CiAJbWNwLT5idWZfc2l6ZSA9IHNpemU7CiAJbWNwLT5mbGFncyA9IE1CWF9ETUFfT1VUOwotCW1jcC0+dG92ID0gMzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKQEAgLTExNzMsNyArMTIxNiw3IEBACiAgKglLZXJuZWwgY29udGV4dC4KICAqLwogaW50Ci1xbGEyeDAwX2dldF9maXJtd2FyZV9zdGF0ZShzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MTZfdCAqZHB0cikKK3FsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQxNl90ICpzdGF0ZXMpCiB7CiAJaW50IHJ2YWw7CiAJbWJ4X2NtZF90IG1jOwpAQCAtMTE4NCwxMyArMTIyNywxNSBAQAogCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfRklSTVdBUkVfU1RBVEU7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKLQltY3AtPmluX21iID0gTUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPmluX21iID0gTUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCi0JLyogUmV0dXJuIGZpcm13YXJlIHN0YXRlLiAqLwotCSpkcHRyID0gbWNwLT5tYlsxXTsKKwkvKiBSZXR1cm4gZmlybXdhcmUgc3RhdGVzLiAqLworCXN0YXRlc1swXSA9IG1jcC0+bWJbMV07CisJc3RhdGVzWzFdID0gbWNwLT5tYlsyXTsKKwlzdGF0ZXNbMl0gPSBtY3AtPm1iWzNdOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCkBAIC0xMjQ2LDcgKzEyOTEsNyBAQAogCX0KIAogCW1jcC0+aW5fbWIgPSBNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtMTMxOCw3ICsxMzYzLDcgQEAKIAkJbWNwLT5tYlszXSA9IDA7CiAJfQogCW1jcC0+aW5fbWIgPSBNQlhfMDsKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtMTc0Myw3ICsxNzg4LDcgQEAKIAl9CiAKIAltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKQEAgLTE3OTEsNyArMTgzNiw3IEBACiAJbWNwLT5tYlszXSA9IDA7CiAJbWNwLT5vdXRfbWIgPSBNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKQEAgLTE4NTIsNyArMTg5Nyw3IEBACiAJCW1jcC0+b3V0X21iIHw9IE1CWF82fE1CWF8zfE1CWF8yfE1CWF8xOwogCX0KIAltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKQEAgLTE4OTYsNyArMTk0MSw3IEBACiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfUkVTT1VSQ0VfQ09VTlRTOwogCW1jcC0+b3V0X21iID0gTUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF8xMXxNQlhfMTB8TUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKQEAgLTIwMzYsNyArMjA4MSw3IEBACiAJCW1jcC0+bWJbMV0gPSBsb29wX2lkIDw8IDg7CiAJCW1jcC0+b3V0X21iIHw9IE1CWF8xOwogCX0KLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSBJT0NUTF9DTUQ7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCkBAIC0yMDgyLDcgKzIxMjcsNyBAQAogCW1jcC0+bWJbMTBdID0gMDsKIAltY3AtPm91dF9tYiA9IE1CWF8xMHxNQlhfOXxNQlhfOHxNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gSU9DVExfQ01EOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtMjE4MCwxNyArMjIyNSwxNSBAQAogCX0gcDsKIH07CiAKLWludAotcWxhMjR4eF9hYm9ydF90YXJnZXQoZmNfcG9ydF90ICpmY3BvcnQpCitzdGF0aWMgaW50CitfX3FsYTI0eHhfaXNzdWVfdG1mKGNoYXIgKm5hbWUsIHVpbnQzMl90IHR5cGUsIHN0cnVjdCBmY19wb3J0ICpmY3BvcnQsCisgICAgdW5zaWduZWQgaW50IGwpCiB7Ci0JaW50CQlydmFsOworCWludAkJcnZhbCwgcnZhbDI7CiAJc3RydWN0IHRza19tZ210X2NtZCAqdHNrOwogCWRtYV9hZGRyX3QJdHNrX2RtYTsKIAlzY3NpX3FsYV9ob3N0X3QgKmhhLCAqcGhhOwogCi0JaWYgKGZjcG9ydCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGZjcG9ydC0+aGEtPmhvc3Rfbm8pKTsKIAogCWhhID0gZmNwb3J0LT5oYTsKQEAgLTIyMDYsNDggKzIyNDksNjIgQEAKIAl0c2stPnAudHNrLmVudHJ5X3R5cGUgPSBUU0tfTUdNVF9JT0NCX1RZUEU7CiAJdHNrLT5wLnRzay5lbnRyeV9jb3VudCA9IDE7CiAJdHNrLT5wLnRzay5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihmY3BvcnQtPmxvb3BfaWQpOwotCXRzay0+cC50c2sudGltZW91dCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMjUpOwotCXRzay0+cC50c2suY29udHJvbF9mbGFncyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVENGX1RBUkdFVF9SRVNFVCk7CisJdHNrLT5wLnRzay50aW1lb3V0ID0gY3B1X3RvX2xlMTYoaGEtPnJfYV90b3YgLyAxMCAqIDIpOworCXRzay0+cC50c2suY29udHJvbF9mbGFncyA9IGNwdV90b19sZTMyKHR5cGUpOwogCXRzay0+cC50c2sucG9ydF9pZFswXSA9IGZjcG9ydC0+ZF9pZC5iLmFsX3BhOwogCXRzay0+cC50c2sucG9ydF9pZFsxXSA9IGZjcG9ydC0+ZF9pZC5iLmFyZWE7CiAJdHNrLT5wLnRzay5wb3J0X2lkWzJdID0gZmNwb3J0LT5kX2lkLmIuZG9tYWluOwogCXRzay0+cC50c2sudnBfaW5kZXggPSBmY3BvcnQtPnZwX2lkeDsKKwlpZiAodHlwZSA9PSBUQ0ZfTFVOX1JFU0VUKSB7CisJCWludF90b19zY3NpbHVuKGwsICZ0c2stPnAudHNrLmx1bik7CisJCWhvc3RfdG9fZmNwX3N3YXAoKHVpbnQ4X3QgKikmdHNrLT5wLnRzay5sdW4sCisJCSAgICBzaXplb2YodHNrLT5wLnRzay5sdW4pKTsKKwl9CiAKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKGhhLCB0c2ssIHRza19kbWEsIDApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGlzc3VlIFRhcmdldCBSZXNldCBJT0NCICIKLQkJICAgICIoJXgpLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBydmFsKSk7Ci0JCWdvdG8gYXRhcmdldF9kb25lOworCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSAlcyBSZXNldCBJT0NCICIKKwkJICAgICIoJXgpLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBuYW1lLCBydmFsKSk7CiAJfSBlbHNlIGlmICh0c2stPnAuc3RzLmVudHJ5X3N0YXR1cyAhPSAwKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgIgogCQkgICAgIi0tIGVycm9yIHN0YXR1cyAoJXgpLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLAogCQkgICAgdHNrLT5wLnN0cy5lbnRyeV9zdGF0dXMpKTsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7Ci0JCWdvdG8gYXRhcmdldF9kb25lOwogCX0gZWxzZSBpZiAodHNrLT5wLnN0cy5jb21wX3N0YXR1cyAhPQogCSAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KENTX0NPTVBMRVRFKSkgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKIAkJICAgICItLSBjb21wbGV0aW9uIHN0YXR1cyAoJXgpLlxuIiwgX19mdW5jX18sCiAJCSAgICBoYS0+aG9zdF9ubywgbGUxNl90b19jcHUodHNrLT5wLnN0cy5jb21wX3N0YXR1cykpKTsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7Ci0JCWdvdG8gYXRhcmdldF9kb25lOwogCX0KIAogCS8qIElzc3VlIG1hcmtlciBJT0NCLiAqLwotCXJ2YWwgPSBxbGEyeDAwX21hcmtlcihoYSwgZmNwb3J0LT5sb29wX2lkLCAwLCBNS19TWU5DX0lEKTsKLQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCXJ2YWwyID0gcWxhMngwMF9tYXJrZXIoaGEsIGZjcG9ydC0+bG9vcF9pZCwgbCwKKwkgICAgdHlwZSA9PSBUQ0ZfTFVOX1JFU0VUID8gTUtfU1lOQ19JRF9MVU46IE1LX1NZTkNfSUQpOworCWlmIChydmFsMiAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBNYXJrZXIgSU9DQiAiCi0JCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCkpOworCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHJ2YWwyKSk7CiAJfSBlbHNlIHsKIAkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAl9CiAKLWF0YXJnZXRfZG9uZToKIAlkbWFfcG9vbF9mcmVlKHBoYS0+c19kbWFfcG9vbCwgdHNrLCB0c2tfZG1hKTsKIAogCXJldHVybiBydmFsOwogfQogCitpbnQKK3FsYTI0eHhfYWJvcnRfdGFyZ2V0KHN0cnVjdCBmY19wb3J0ICpmY3BvcnQsIHVuc2lnbmVkIGludCBsKQoreworCXJldHVybiBfX3FsYTI0eHhfaXNzdWVfdG1mKCJUYXJnZXQiLCBUQ0ZfVEFSR0VUX1JFU0VULCBmY3BvcnQsIGwpOworfQorCitpbnQKK3FsYTI0eHhfbHVuX3Jlc2V0KHN0cnVjdCBmY19wb3J0ICpmY3BvcnQsIHVuc2lnbmVkIGludCBsKQoreworCXJldHVybiBfX3FsYTI0eHhfaXNzdWVfdG1mKCJMdW4iLCBUQ0ZfTFVOX1JFU0VULCBmY3BvcnQsIGwpOworfQorCiAjaWYgMAogCiBpbnQKQEAgLTIzMDQsNyArMjM2MSw3IEBACiAJbWNwLT5tYls0XSA9IHN3X2VtXzRnIHwgQklUXzE1OwogCW1jcC0+b3V0X21iID0gTUJYXzR8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF8wOwotCW1jcC0+dG92ID0gMzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCkBAIC0yMzcyLDcgKzI0MjksNyBAQAogCW1jcC0+bWJbN10gPSBUQ19BRU5fRElTQUJMRTsKIAltY3AtPm91dF9tYiA9IE1CWF83fE1CWF82fE1CWF81fE1CWF80fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfMXxNQlhfMDsKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewpAQCAtMjQwMSw3ICsyNDU4LDcgQEAKIAltY3AtPm1iWzFdID0gVENfRUZUX0RJU0FCTEU7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMXxNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKQEAgLTI0NDEsNyArMjQ5OCw3IEBACiAJbWNwLT5vdXRfbWIgPSBNQlhfMTB8TUJYXzl8TUJYXzh8TUJYXzd8TUJYXzZ8TUJYXzV8TUJYXzR8TUJYXzN8TUJYXzJ8CiAJICAgIE1CWF8xfE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfNnxNQlhfNXxNQlhfNHxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewpAQCAtMjQ3Nyw3ICsyNTM0LDcgQEAKIAltY3AtPm91dF9tYiA9IE1CWF8yfE1CWF8xfE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfOXxNQlhfOHxNQlhfN3xNQlhfNnxNQlhfNXxNQlhfNHxNQlhfM3xNQlhfMnwKIAkgICAgTUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKQEAgLTI1MjUsNyArMjU4Miw3IEBACiAJbWNwLT5tYlsxMF0gPSAwOwogCW1jcC0+b3V0X21iID0gTUJYXzEwfE1CWF85fE1CWF84fE1CWF83fE1CWF82fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfMDsKLQltY3AtPnRvdiA9IDMwOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKIApAQCAtMjU1OSw3ICsyNjE2LDcgQEAKIAltY3AtPm1iWzRdID0gbWNwLT5tYls1XSA9IDA7CiAJbWNwLT5vdXRfbWIgPSBNQlhfNXxNQlhfNHxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzV8TUJYXzR8TUJYXzN8TUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSAzMDsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CiAKQEAgLTI4NzcsNyArMjkzNCw3IEBACiAJfQogCiAJbWNwLT5pbl9tYiA9IE1CWF8wOwotCW1jcC0+dG92ID0gMzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOwogCkBAIC0yODkwLDMgKzI5NDcsMTA0IEBACiAKIAlyZXR1cm4gcnZhbDsKIH0KKworLyogODRYWCBTdXBwb3J0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgY3M4NHh4X21nbXRfY21kIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB2ZXJpZnlfY2hpcF9lbnRyeV84NHh4IHJlcTsKKwkJc3RydWN0IHZlcmlmeV9jaGlwX3JzcF84NHh4IHJzcDsKKwl9IHA7Cit9OworCitpbnQKK3FsYTg0eHhfdmVyaWZ5X2NoaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MTZfdCAqc3RhdHVzKQoreworCWludCBydmFsLCByZXRyeTsKKwlzdHJ1Y3QgY3M4NHh4X21nbXRfY21kICptbjsKKwlkbWFfYWRkcl90IG1uX2RtYTsKKwl1aW50MTZfdCBvcHRpb25zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCisJbW4gPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJm1uX2RtYSk7CisJaWYgKG1uID09IE5VTEwpIHsKKwkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gYWxsb2NhdGUgVmVyaWZ5IElTUDg0WFggIgorCQkgICAgIklPQ0IuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwkJcmV0dXJuIFFMQV9NRU1PUllfQUxMT0NfRkFJTEVEOworCX0KKworCS8qIEZvcmNlIFVwZGF0ZT8gKi8KKwlvcHRpb25zID0gaGEtPmNzODR4eC0+ZndfdXBkYXRlID8gVkNPX0ZPUkNFX1VQREFURSA6IDA7CisJLyogRGlhZ25vc3RpYyBmaXJtd2FyZT8gKi8KKwkvKiBvcHRpb25zIHw9IE1FTkxPX0RJQUdfRlc7ICovCisJLyogV2UgdXBkYXRlIHRoZSBmaXJtd2FyZSB3aXRoIG9ubHkgb25lIGRhdGEgc2VxdWVuY2UuICovCisJb3B0aW9ucyB8PSBWQ09fRU5EX09GX0RBVEE7CisKKwlyZXRyeSA9IDA7CisJZG8geworCQltZW1zZXQobW4sIDAsIHNpemVvZigqbW4pKTsKKwkJbW4tPnAucmVxLmVudHJ5X3R5cGUgPSBWRVJJRllfQ0hJUF9JT0NCX1RZUEU7CisJCW1uLT5wLnJlcS5lbnRyeV9jb3VudCA9IDE7CisJCW1uLT5wLnJlcS5vcHRpb25zID0gY3B1X3RvX2xlMTYob3B0aW9ucyk7CisKKwkJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IER1bXAgb2YgVmVyaWZ5IFJlcXVlc3QuXG4iLCBfX2Z1bmNfXywKKwkJICAgIGhhLT5ob3N0X25vKSk7CisJCURFQlVHMTYocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKW1uLAorCQkgICAgc2l6ZW9mKCptbikpKTsKKworCQlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiX3RpbWVvdXQoaGEsIG1uLCBtbl9kbWEsIDAsIDEyMCk7CisJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCQlERUJVRzJfMTYocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gaXNzdWUgVmVyaWZ5ICIKKwkJCSAgICAiSU9DQiAoJXgpLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBydmFsKSk7CisJCQlnb3RvIHZlcmlmeV9kb25lOworCQl9CisKKwkJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IER1bXAgb2YgVmVyaWZ5IFJlc3BvbnNlLlxuIiwgX19mdW5jX18sCisJCSAgICBoYS0+aG9zdF9ubykpOworCQlERUJVRzE2KHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKiltbiwKKwkJICAgIHNpemVvZigqbW4pKSk7CisKKwkJc3RhdHVzWzBdID0gbGUxNl90b19jcHUobW4tPnAucnNwLmNvbXBfc3RhdHVzKTsKKwkJc3RhdHVzWzFdID0gc3RhdHVzWzBdID09IENTX1ZDU19DSElQX0ZBSUxVUkUgPworCQkgICAgbGUxNl90b19jcHUobW4tPnAucnNwLmZhaWx1cmVfY29kZSkgOiAwOworCQlERUJVRzJfMTYocHJpbnRrKCIlcyglbGQpOiBjcz0leCBmYz0leFxuIiwgX19mdW5jX18sCisJCSAgICBoYS0+aG9zdF9ubywgc3RhdHVzWzBdLCBzdGF0dXNbMV0pKTsKKworCQlpZiAoc3RhdHVzWzBdICE9IENTX0NPTVBMRVRFKSB7CisJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwkJCWlmICghKG9wdGlvbnMgJiBWQ09fRE9OVF9VUERBVEVfRlcpKSB7CisJCQkJREVCVUcyXzE2KHByaW50aygiJXMoJWxkKTogRmlybXdhcmUgdXBkYXRlICIKKwkJCQkgICAgImZhaWxlZC4gUmV0cnlpbmcgd2l0aG91dCB1cGRhdGUgIgorCQkJCSAgICAiZmlybXdhcmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwkJCQlvcHRpb25zIHw9IFZDT19ET05UX1VQREFURV9GVzsKKwkJCQlvcHRpb25zICY9IH5WQ09fRk9SQ0VfVVBEQVRFOworCQkJCXJldHJ5ID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCURFQlVHMl8xNihwcmludGsoIiVzKCVsZCk6IGZpcm13YXJlIHVwZGF0ZWQgdG8gJXguXG4iLAorCQkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubywKKwkJCSAgICBsZTMyX3RvX2NwdShtbi0+cC5yc3AuZndfdmVyKSkpOworCisJCQkvKiBOT1RFOiB3ZSBvbmx5IHVwZGF0ZSBPUCBmaXJtd2FyZS4gKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+Y3M4NHh4LT5hY2Nlc3NfbG9jaywgZmxhZ3MpOworCQkJaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbiA9CisJCQkgICAgbGUzMl90b19jcHUobW4tPnAucnNwLmZ3X3Zlcik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+Y3M4NHh4LT5hY2Nlc3NfbG9jaywKKwkJCSAgICBmbGFncyk7CisJCX0KKwl9IHdoaWxlIChyZXRyeSk7CisKK3ZlcmlmeV9kb25lOgorCWRtYV9wb29sX2ZyZWUoaGEtPnNfZG1hX3Bvb2wsIG1uLCBtbl9kbWEpOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyXzE2KHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sCisJCSAgICBoYS0+aG9zdF9ubywgcnZhbCkpOworCX0gZWxzZSB7CisJCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJfQorCisJcmV0dXJuIHJ2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKaW5kZXggY2Y3ODRjZC4uZjJiMDQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwpAQCAtMSwyMCArMSw4IEBACiAvKgotICogICAgICAgICAgICAgICAgICBRTE9HSUMgTElOVVggU09GVFdBUkUKKyAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCi0gKiBRTG9naWMgSVNQMngwMCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCAyLjYueAotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCi0gKiAod3d3LnFsb2dpYy5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKKyAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlICJxbGFfZGVmLmgiCiAKQEAgLTI4LDggKzE2LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi12b2lkIHFsYTJ4MDBfdnBfc3RvcF90aW1lcihzY3NpX3FsYV9ob3N0X3QgKik7Ci0KIHZvaWQKIHFsYTJ4MDBfdnBfc3RvcF90aW1lcihzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKQEAgLTI2OCw5ICsyNTQsMTcgQEAKIHN0YXRpYyBpbnQKIHFsYTJ4MDBfZG9fZHBjX3ZwKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogeworCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSB2aGEtPnBhcmVudDsKKwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVlBfSURYX0FDUVVJUkVELCAmdmhhLT52cF9mbGFncykpIHsKIAkJLyogVlAgYWNxdWlyZWQuIGNvbXBsZXRlIHBvcnQgY29uZmlndXJhdGlvbiAqLwotCQlxbGEyNHh4X2NvbmZpZ3VyZV92cCh2aGEpOworCQlpZiAoYXRvbWljX3JlYWQoJmhhLT5sb29wX3N0YXRlKSA9PSBMT09QX1JFQURZKSB7CisJCQlxbGEyNHh4X2NvbmZpZ3VyZV92cCh2aGEpOworCQl9IGVsc2UgeworCQkJc2V0X2JpdChWUF9JRFhfQUNRVUlSRUQsICZ2aGEtPnZwX2ZsYWdzKTsKKwkJCXNldF9iaXQoVlBfRFBDX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOworCQl9CisKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDNjMWI0MzMuLjhiMzNiMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0yNiw5ICsyNiw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc3JiX2NhY2hlcDsKIAotLyoKLSAqIElvY3RsIHJlbGF0ZWQgaW5mb3JtYXRpb24uCi0gKi8KIGludCBudW1faG9zdHM7CiBpbnQgcWwyeGxvZ2ludGltZW91dCA9IDIwOwogbW9kdWxlX3BhcmFtKHFsMnhsb2dpbnRpbWVvdXQsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKQEAgLTEwMyw5ICsxMDAsOSBAQAogCQl2b2lkICgqZm4pKHN0cnVjdCBzY3NpX2NtbmQgKikpOwogc3RhdGljIGludCBxbGEyeHh4X2VoX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiBzdGF0aWMgaW50IHFsYTJ4eHhfZWhfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CitzdGF0aWMgaW50IHFsYTJ4eHhfZWhfdGFyZ2V0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiBzdGF0aWMgaW50IHFsYTJ4eHhfZWhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7CiBzdGF0aWMgaW50IHFsYTJ4eHhfZWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCBxbGEyeDAwX2RldmljZV9yZXNldChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogCiBzdGF0aWMgaW50IHFsYTJ4MDBfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOwogc3RhdGljIGludCBxbGEyeDAwX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOwpAQCAtMTE3LDYgKzExNCw3IEBACiAKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IHFsYTJ4eHhfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gcWxhMnh4eF9laF9kZXZpY2VfcmVzZXQsCisJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyID0gcWxhMnh4eF9laF90YXJnZXRfcmVzZXQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCT0gcWxhMnh4eF9laF9idXNfcmVzZXQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHFsYTJ4eHhfZWhfaG9zdF9yZXNldCwKIApAQCAtMTQ4LDYgKzE0Niw3IEBACiAKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IHFsYTJ4eHhfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gcWxhMnh4eF9laF9kZXZpY2VfcmVzZXQsCisJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyID0gcWxhMnh4eF9laF90YXJnZXRfcmVzZXQsCiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCT0gcWxhMnh4eF9laF9idXNfcmVzZXQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHFsYTJ4eHhfZWhfaG9zdF9yZXNldCwKIApAQCAtMjUzLDkgKzI1Miw5IEBACiAKIAkJc3RyY3B5KHN0ciwgIlBDSWUgKCIpOwogCQlpZiAobHNwZWVkID09IDEpCi0JCQlzdHJjYXQoc3RyLCAiMi41R2IvcyAiKTsKKwkJCXN0cmNhdChzdHIsICIyLjVHVC9zICIpOwogCQllbHNlIGlmIChsc3BlZWQgPT0gMikKLQkJCXN0cmNhdChzdHIsICI1LjBHYi9zICIpOworCQkJc3RyY2F0KHN0ciwgIjUuMEdUL3MgIik7CiAJCWVsc2UKIAkJCXN0cmNhdChzdHIsICI8dW5rbm93bj4gIik7CiAJCXNucHJpbnRmKGx3c3RyLCBzaXplb2YobHdzdHIpLCAieCVkKSIsIGx3aWR0aCk7CkBAIC0zNDAsNiArMzM5LDggQEAKIAkJc3RyY2F0KHN0ciwgIltUMTAgQ1JDXSAiKTsKIAlpZiAoaGEtPmZ3X2F0dHJpYnV0ZXMgJiBCSVRfNSkKIAkJc3RyY2F0KHN0ciwgIltWSV0gIik7CisJaWYgKGhhLT5md19hdHRyaWJ1dGVzICYgQklUXzEwKQorCQlzdHJjYXQoc3RyLCAiWzg0WFhdICIpOwogCWlmIChoYS0+ZndfYXR0cmlidXRlcyAmIEJJVF8xMykKIAkJc3RyY2F0KHN0ciwgIltFeHBlcmltZW50YWxdIik7CiAJcmV0dXJuIHN0cjsKQEAgLTU3MCw4ICs1NzEsNiBAQAogCWVsc2UKIAkJcmV0dXJuX3N0YXR1cyA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzIocHJpbnRrKCIlcyByZXR1cm5fc3RhdHVzPSVkXG4iLF9fZnVuY19fLHJldHVybl9zdGF0dXMpKTsKLQogCXJldHVybiAocmV0dXJuX3N0YXR1cyk7CiB9CiAKQEAgLTY4NSw3ICs2ODQsNiBAQAogCiAJCURFQlVHMihwcmludGsoIiVzKCVsZCk6IGFib3J0aW5nIHNwICVwIGZyb20gUklTQy4gcGlkPSVsZC5cbiIsCiAJCSAgICBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHNwLCBzZXJpYWwpKTsKLQkJREVCVUczKHFsYTJ4MDBfcHJpbnRfc2NzaV9jbWQoY21kKSk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJCWlmIChoYS0+aXNwX29wcy0+YWJvcnRfY29tbWFuZChoYSwgc3ApKSB7CkBAIC03MTksMTkwICs3MTcsMTIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIHFsYTJ4MDBfZWhfd2FpdF9mb3JfcGVuZGluZ190YXJnZXRfY29tbWFuZHMKLSoKLSogRGVzY3JpcHRpb246Ci0qICAgIFdhaXRzIGZvciBhbGwgdGhlIGNvbW1hbmRzIHRvIGNvbWUgYmFjayBmcm9tIHRoZSBzcGVjaWZpZWQgdGFyZ2V0LgotKgotKiBJbnB1dDoKLSogICAgaGEgLSBwb2ludGVyIHRvIHNjc2lfcWxhX2hvc3Qgc3RydWN0dXJlLgotKiAgICB0ICAtIHRhcmdldAotKiBSZXR1cm5zOgotKiAgICBFaXRoZXIgU1VDQ0VTUyBvciBGQUlMRUQuCi0qCi0qIE5vdGU6Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0gbmV4dXNfd2FpdF90eXBlIHsKKwlXQUlUX0hPU1QgPSAwLAorCVdBSVRfVEFSR0VULAorCVdBSVRfTFVOLAorfTsKKwogc3RhdGljIGludAotcWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX3RhcmdldF9jb21tYW5kcyhzY3NpX3FsYV9ob3N0X3QgKmhhLCB1bnNpZ25lZCBpbnQgdCkKK3FsYTJ4MDBfZWhfd2FpdF9mb3JfcGVuZGluZ19jb21tYW5kcyhzY3NpX3FsYV9ob3N0X3QgKmhhLCB1bnNpZ25lZCBpbnQgdCwKKyAgICB1bnNpZ25lZCBpbnQgbCwgZW51bSBuZXh1c193YWl0X3R5cGUgdHlwZSkKIHsKLQlpbnQJY250OwotCWludAlzdGF0dXM7Ci0Jc3JiX3QJCSpzcDsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CisJaW50IGNudCwgbWF0Y2gsIHN0YXR1czsKKwlzcmJfdCAqc3A7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzY3NpX3FsYV9ob3N0X3QgKnBoYSA9IHRvX3FsYV9wYXJlbnQoaGEpOwogCi0Jc3RhdHVzID0gMDsKLQotCS8qCi0JICogV2FpdGluZyBmb3IgYWxsIGNvbW1hbmRzIGZvciB0aGUgZGVzaWduYXRlZCB0YXJnZXQgaW4gdGhlIGFjdGl2ZQotCSAqIGFycmF5Ci0JICovCi0JZm9yIChjbnQgPSAxOyBjbnQgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFM7IGNudCsrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBRTEFfU1VDQ0VTUzsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJZm9yIChjbnQgPSAxOyBzdGF0dXMgPT0gUUxBX1NVQ0NFU1MgJiYgY250IDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOworCSAgICBjbnQrKykgewogCQlzcCA9IHBoYS0+b3V0c3RhbmRpbmdfY21kc1tjbnRdOwotCQlpZiAoc3ApIHsKLQkJCWNtZCA9IHNwLT5jbWQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQkJCWlmIChjbWQtPmRldmljZS0+aWQgPT0gdCAmJgotCQkJICAgIGhhLT52cF9pZHggPT0gc3AtPmhhLT52cF9pZHgpIHsKLQkJCQlpZiAoIXFsYTJ4MDBfZWhfd2FpdF9vbl9jb21tYW5kKGhhLCBjbWQpKSB7Ci0JCQkJCXN0YXR1cyA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCQlpZiAoIXNwKQorCQkJY29udGludWU7CisJCWlmIChoYS0+dnBfaWR4ICE9IHNwLT5oYS0+dnBfaWR4KQorCQkJY29udGludWU7CisJCW1hdGNoID0gMDsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgV0FJVF9IT1NUOgorCQkJbWF0Y2ggPSAxOworCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9UQVJHRVQ6CisJCQltYXRjaCA9IHNwLT5jbWQtPmRldmljZS0+aWQgPT0gdDsKKwkJCWJyZWFrOworCQljYXNlIFdBSVRfTFVOOgorCQkJbWF0Y2ggPSAoc3AtPmNtZC0+ZGV2aWNlLT5pZCA9PSB0ICYmCisJCQkgICAgc3AtPmNtZC0+ZGV2aWNlLT5sdW4gPT0gbCk7CisJCQlicmVhazsKIAkJfQorCQlpZiAoIW1hdGNoKQorCQkJY29udGludWU7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJCXN0YXR1cyA9IHFsYTJ4MDBfZWhfd2FpdF9vbl9jb21tYW5kKGhhLCBzcC0+Y21kKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCX0KLQlyZXR1cm4gKHN0YXR1cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgY2hhciAqcmVzZXRfZXJyb3JzW10gPSB7CisJIkhCQSBub3Qgb25saW5lIiwKKwkiSEJBIG5vdCByZWFkeSIsCisJIlRhc2sgbWFuYWdlbWVudCBmYWlsZWQiLAorCSJXYWl0aW5nIGZvciBjb21tYW5kIGNvbXBsZXRpb25zIiwKK307CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBxbGEyeHh4X2VoX2RldmljZV9yZXNldAotKgotKiBEZXNjcmlwdGlvbjoKLSogICAgVGhlIGRldmljZSByZXNldCBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZSB0YXJnZXQgYW5kIGFib3J0IGFueQotKiAgICBleGVjdXRpbmcgY29tbWFuZHMuCi0qCi0qICAgIE5PVEU6IFRoZSB1c2Ugb2YgU1AgaXMgdW5kZWZpbmVkIHdpdGhpbiB0aGlzIGNvbnRleHQuICBEbyAqTk9UKgotKiAgICAgICAgICBhdHRlbXB0IHRvIHVzZSB0aGlzIHZhbHVlLCBldmVuIGlmIHlvdSBkZXRlcm1pbmUgaXQgaXMKLSogICAgICAgICAgbm9uLW51bGwuCi0qCi0qIElucHV0OgotKiAgICBjbWQgPSBMaW51eCBTQ1NJIGNvbW1hbmQgcGFja2V0IG9mIHRoZSBjb21tYW5kIHRoYXQgY2F1c2UgdGhlCi0qICAgICAgICAgIGJ1cyBkZXZpY2UgcmVzZXQuCi0qCi0qIFJldHVybnM6Ci0qICAgIFNVQ0NFU1MvRkFJTFVSRSAoZGVmaW5lZCBhcyBtYWNybyBpbiBzY3NpLmgpLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitfX3FsYTJ4eHhfZWhfZ2VuZXJpY19yZXNldChjaGFyICpuYW1lLCBlbnVtIG5leHVzX3dhaXRfdHlwZSB0eXBlLAorICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgaW50ICgqZG9fcmVzZXQpKHN0cnVjdCBmY19wb3J0ICosIHVuc2lnbmVkIGludCkpCit7CisJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOworCWZjX3BvcnRfdCAqZmNwb3J0ID0gKHN0cnVjdCBmY19wb3J0ICopIGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlpbnQgZXJyOworCisJcWxhMngwMF9ibG9ja19lcnJvcl9oYW5kbGVyKGNtZCk7CisKKwlpZiAoIWZjcG9ydCkKKwkJcmV0dXJuIEZBSUxFRDsKKworCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgInNjc2koJWxkOiVkOiVkKTogJXMgUkVTRVQgSVNTVUVELlxuIiwKKwkgICAgaGEtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgbmFtZSk7CisKKwllcnIgPSAwOworCWlmIChxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUoaGEpICE9IFFMQV9TVUNDRVNTKQorCQlnb3RvIGVoX3Jlc2V0X2ZhaWxlZDsKKwllcnIgPSAxOworCWlmIChxbGEyeDAwX3dhaXRfZm9yX2xvb3BfcmVhZHkoaGEpICE9IFFMQV9TVUNDRVNTKQorCQlnb3RvIGVoX3Jlc2V0X2ZhaWxlZDsKKwllcnIgPSAyOworCWlmIChkb19yZXNldChmY3BvcnQsIGNtZC0+ZGV2aWNlLT5sdW4pICE9IFFMQV9TVUNDRVNTKQorCQlnb3RvIGVoX3Jlc2V0X2ZhaWxlZDsKKwllcnIgPSAzOworCWlmIChxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHMoaGEsIGNtZC0+ZGV2aWNlLT5pZCwKKwkgICAgY21kLT5kZXZpY2UtPmx1biwgdHlwZSkgIT0gUUxBX1NVQ0NFU1MpCisJCWdvdG8gZWhfcmVzZXRfZmFpbGVkOworCisJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAic2NzaSglbGQ6JWQ6JWQpOiAlcyBSRVNFVCBTVUNDRUVERUQuXG4iLAorCSAgICBoYS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBuYW1lKTsKKworCXJldHVybiBTVUNDRVNTOworCisgZWhfcmVzZXRfZmFpbGVkOgorCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgInNjc2koJWxkOiVkOiVkKTogJXMgUkVTRVQgRkFJTEVEOiAlcy5cbiIsCisJICAgIGhhLT5ob3N0X25vLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIG5hbWUsCisJICAgIHJlc2V0X2Vycm9yc1tlcnJdKTsKKwlyZXR1cm4gRkFJTEVEOworfQorCiBzdGF0aWMgaW50CiBxbGEyeHh4X2VoX2RldmljZV9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHNob3N0X3ByaXYoY21kLT5kZXZpY2UtPmhvc3QpOwotCWZjX3BvcnRfdCAqZmNwb3J0ID0gKHN0cnVjdCBmY19wb3J0ICopIGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCXVuc2lnbmVkIGludCBpZCwgbHVuOwotCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwogCi0JcWxhMngwMF9ibG9ja19lcnJvcl9oYW5kbGVyKGNtZCk7Ci0KLQlpZCA9IGNtZC0+ZGV2aWNlLT5pZDsKLQlsdW4gPSBjbWQtPmRldmljZS0+bHVuOwotCXNlcmlhbCA9IGNtZC0+c2VyaWFsX251bWJlcjsKLQotCWlmICghZmNwb3J0KQotCQlyZXR1cm4gcmV0OwotCi0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCSAgICAic2NzaSglbGQ6JWQ6JWQpOiBERVZJQ0UgUkVTRVQgSVNTVUVELlxuIiwgaGEtPmhvc3Rfbm8sIGlkLCBsdW4pOwotCi0JaWYgKHFsYTJ4MDBfd2FpdF9mb3JfaGJhX29ubGluZShoYSkgIT0gUUxBX1NVQ0NFU1MpCi0JCWdvdG8gZWhfZGV2X3Jlc2V0X2RvbmU7Ci0KLQlpZiAocWxhMngwMF93YWl0X2Zvcl9sb29wX3JlYWR5KGhhKSA9PSBRTEFfU1VDQ0VTUykgewotCQlpZiAocWxhMngwMF9kZXZpY2VfcmVzZXQoaGEsIGZjcG9ydCkgPT0gMCkKLQkJCXJldCA9IFNVQ0NFU1M7Ci0KLSNpZiBkZWZpbmVkKExPR09VVF9BRlRFUl9ERVZJQ0VfUkVTRVQpCi0JCWlmIChyZXQgPT0gU1VDQ0VTUykgewotCQkJaWYgKGZjcG9ydC0+ZmxhZ3MgJiBGQ19GQUJSSUNfREVWSUNFKSB7Ci0JCQkJaGEtPmlzcF9vcHMtPmZhYnJpY19sb2dvdXQoaGEsIGZjcG9ydC0+bG9vcF9pZCk7Ci0JCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KGhhLCBmY3BvcnQsIDAsIDApOwotCQkJfQotCQl9Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwotCQkgICAgIiVzIGZhaWxlZDogbG9vcCBub3QgcmVhZHlcbiIsX19mdW5jX18pKTsKLQl9Ci0KLQlpZiAocmV0ID09IEZBSUxFRCkgewotCQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBkZXZpY2UgcmVzZXQgZmFpbGVkXG4iLAotCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIiVzOiBkZXZpY2UgcmVzZXQgZmFpbGVkXG4iLAotCQkgICAgX19mdW5jX18pOwotCi0JCWdvdG8gZWhfZGV2X3Jlc2V0X2RvbmU7Ci0JfQotCi0JLyogRmx1c2ggb3V0c3RhbmRpbmcgY29tbWFuZHMuICovCi0JaWYgKHFsYTJ4MDBfZWhfd2FpdF9mb3JfcGVuZGluZ190YXJnZXRfY29tbWFuZHMoaGEsIGlkKSkKLQkJcmV0ID0gRkFJTEVEOwotCWlmIChyZXQgPT0gRkFJTEVEKSB7Ci0JCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB3aGlsZSB3YWl0aW5nIGZvciBjb21tYW5kc1xuIiwKLQkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAiJXM6IGZhaWxlZCB3aGlsZSB3YWl0aW5nIGZvciBjb21tYW5kc1xuIiwgX19mdW5jX18pOwotCX0gZWxzZQotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAic2NzaSglbGQ6JWQ6JWQpOiBERVZJQ0UgUkVTRVQgU1VDQ0VFREVELlxuIiwgaGEtPmhvc3Rfbm8sCi0JCSAgICBpZCwgbHVuKTsKLSBlaF9kZXZfcmVzZXRfZG9uZToKLQlyZXR1cm4gcmV0OworCXJldHVybiBfX3FsYTJ4eHhfZWhfZ2VuZXJpY19yZXNldCgiREVWSUNFIiwgV0FJVF9MVU4sIGNtZCwKKwkgICAgaGEtPmlzcF9vcHMtPmx1bl9yZXNldCk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHMKLSoKLSogRGVzY3JpcHRpb246Ci0qICAgIFdhaXRzIGZvciBhbGwgdGhlIGNvbW1hbmRzIHRvIGNvbWUgYmFjayBmcm9tIHRoZSBzcGVjaWZpZWQgaG9zdC4KLSoKLSogSW5wdXQ6Ci0qICAgIGhhIC0gcG9pbnRlciB0byBzY3NpX3FsYV9ob3N0IHN0cnVjdHVyZS4KLSoKLSogUmV0dXJuczoKLSogICAgMSA6IFNVQ0NFU1MKLSogICAgMCA6IEZBSUxFRAotKgotKiBOb3RlOgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50Ci1xbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHMoc2NzaV9xbGFfaG9zdF90ICpoYSkKK3FsYTJ4eHhfZWhfdGFyZ2V0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlpbnQJY250OwotCWludAlzdGF0dXM7Ci0Jc3JiX3QJCSpzcDsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CiAKLQlzdGF0dXMgPSAxOwotCi0JLyoKLQkgKiBXYWl0aW5nIGZvciBhbGwgY29tbWFuZHMgZm9yIHRoZSBkZXNpZ25hdGVkIHRhcmdldCBpbiB0aGUgYWN0aXZlCi0JICogYXJyYXkKLQkgKi8KLQlmb3IgKGNudCA9IDE7IGNudCA8IE1BWF9PVVRTVEFORElOR19DT01NQU5EUzsgY250KyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JCXNwID0gaGEtPm91dHN0YW5kaW5nX2NtZHNbY250XTsKLQkJaWYgKHNwKSB7Ci0JCQljbWQgPSBzcC0+Y21kOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQkJCXN0YXR1cyA9IHFsYTJ4MDBfZWhfd2FpdF9vbl9jb21tYW5kKGhhLCBjbWQpOwotCQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JCWVsc2UgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQlyZXR1cm4gKHN0YXR1cyk7CisJcmV0dXJuIF9fcWxhMnh4eF9laF9nZW5lcmljX3Jlc2V0KCJUQVJHRVQiLCBXQUlUX1RBUkdFVCwgY21kLAorCSAgICBoYS0+aXNwX29wcy0+dGFyZ2V0X3Jlc2V0KTsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogcWxhMnh4eF9laF9idXNfcmVzZXQKICoKQEAgLTk1Myw3ICs4ODMsOCBAQAogCQlnb3RvIGVoX2J1c19yZXNldF9kb25lOwogCiAJLyogRmx1c2ggb3V0c3RhbmRpbmcgY29tbWFuZHMuICovCi0JaWYgKCFxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHMocGhhKSkKKwlpZiAocWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHBoYSwgMCwgMCwgV0FJVF9IT1NUKSAhPQorCSAgICBRTEFfU1VDQ0VTUykKIAkJcmV0ID0gRkFJTEVEOwogCiBlaF9idXNfcmVzZXRfZG9uZToKQEAgLTEwMjQsNyArOTU1LDggQEAKIAljbGVhcl9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnBoYS0+ZHBjX2ZsYWdzKTsKIAogCS8qIFdhaXRpbmcgZm9yIG91ciBjb21tYW5kIGluIGRvbmVfcXVldWUgdG8gYmUgcmV0dXJuZWQgdG8gT1MuKi8KLQlpZiAocWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHBoYSkpCisJaWYgKHFsYTJ4MDBfZWhfd2FpdF9mb3JfcGVuZGluZ19jb21tYW5kcyhwaGEsIDAsIDAsIFdBSVRfSE9TVCkgPT0KKwkgICAgUUxBX1NVQ0NFU1MpCiAJCXJldCA9IFNVQ0NFU1M7CiAKIAlpZiAoaGEtPnBhcmVudCkKQEAgLTEwODAsNyArMTAxMiw3IEBACiAJCQlpZiAoZmNwb3J0LT5wb3J0X3R5cGUgIT0gRkNUX1RBUkdFVCkKIAkJCQljb250aW51ZTsKIAotCQkJcmV0ID0gcWxhMngwMF9kZXZpY2VfcmVzZXQoaGEsIGZjcG9ydCk7CisJCQlyZXQgPSBoYS0+aXNwX29wcy0+dGFyZ2V0X3Jlc2V0KGZjcG9ydCwgMCk7CiAJCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7CiAJCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBidXNfcmVzZXQgZmFpbGVkOiAiCiAJCQkJICAgICJ0YXJnZXRfcmVzZXQ9JWQgZF9pZD0leC5cbiIsIF9fZnVuY19fLApAQCAtMTA5NSwyNiArMTAyNyw2IEBACiAJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCi0vKgotICogcWxhMngwMF9kZXZpY2VfcmVzZXQKLSAqCUlzc3VlIGJ1cyBkZXZpY2UgcmVzZXQgbWVzc2FnZSB0byB0aGUgdGFyZ2V0LgotICoKLSAqIElucHV0OgotICoJaGEgPSBhZGFwdGVyIGJsb2NrIHBvaW50ZXIuCi0gKgl0ID0gU0NTSSBJRC4KLSAqCVRBUkdFVF9RVUVVRV9MT0NLIG11c3QgYmUgcmVsZWFzZWQuCi0gKglBREFQVEVSX1NUQVRFX0xPQ0sgbXVzdCBiZSByZWxlYXNlZC4KLSAqCi0gKiBDb250ZXh0OgotICoJS2VybmVsIGNvbnRleHQuCi0gKi8KLXN0YXRpYyBpbnQKLXFsYTJ4MDBfZGV2aWNlX3Jlc2V0KHNjc2lfcWxhX2hvc3RfdCAqaGEsIGZjX3BvcnRfdCAqcmVzZXRfZmNwb3J0KQotewotCS8qIEFib3J0IFRhcmdldCBjb21tYW5kIHdpbGwgY2xlYXIgUmVzZXJ2YXRpb24gKi8KLQlyZXR1cm4gaGEtPmlzcF9vcHMtPmFib3J0X3RhcmdldChyZXNldF9mY3BvcnQpOwotfQotCiB2b2lkCiBxbGEyeDAwX2Fib3J0X2FsbF9jbWRzKHNjc2lfcWxhX2hvc3RfdCAqaGEsIGludCByZXMpCiB7CkBAIC0xMjkyLDcgKzEyMDQsOCBAQAogCS5lbmFibGVfaW50cnMJCT0gcWxhMngwMF9lbmFibGVfaW50cnMsCiAJLmRpc2FibGVfaW50cnMJCT0gcWxhMngwMF9kaXNhYmxlX2ludHJzLAogCS5hYm9ydF9jb21tYW5kCQk9IHFsYTJ4MDBfYWJvcnRfY29tbWFuZCwKLQkuYWJvcnRfdGFyZ2V0CQk9IHFsYTJ4MDBfYWJvcnRfdGFyZ2V0LAorCS50YXJnZXRfcmVzZXQJCT0gcWxhMngwMF9hYm9ydF90YXJnZXQsCisJLmx1bl9yZXNldAkJPSBxbGEyeDAwX2x1bl9yZXNldCwKIAkuZmFicmljX2xvZ2luCQk9IHFsYTJ4MDBfbG9naW5fZmFicmljLAogCS5mYWJyaWNfbG9nb3V0CQk9IHFsYTJ4MDBfZmFicmljX2xvZ291dCwKIAkuY2FsY19yZXFfZW50cmllcwk9IHFsYTJ4MDBfY2FsY19pb2Nic18zMiwKQEAgLTEzMjUsNyArMTIzOCw4IEBACiAJLmVuYWJsZV9pbnRycwkJPSBxbGEyeDAwX2VuYWJsZV9pbnRycywKIAkuZGlzYWJsZV9pbnRycwkJPSBxbGEyeDAwX2Rpc2FibGVfaW50cnMsCiAJLmFib3J0X2NvbW1hbmQJCT0gcWxhMngwMF9hYm9ydF9jb21tYW5kLAotCS5hYm9ydF90YXJnZXQJCT0gcWxhMngwMF9hYm9ydF90YXJnZXQsCisJLnRhcmdldF9yZXNldAkJPSBxbGEyeDAwX2Fib3J0X3RhcmdldCwKKwkubHVuX3Jlc2V0CQk9IHFsYTJ4MDBfbHVuX3Jlc2V0LAogCS5mYWJyaWNfbG9naW4JCT0gcWxhMngwMF9sb2dpbl9mYWJyaWMsCiAJLmZhYnJpY19sb2dvdXQJCT0gcWxhMngwMF9mYWJyaWNfbG9nb3V0LAogCS5jYWxjX3JlcV9lbnRyaWVzCT0gcWxhMngwMF9jYWxjX2lvY2JzXzMyLApAQCAtMTM1OCw3ICsxMjcyLDggQEAKIAkuZW5hYmxlX2ludHJzCQk9IHFsYTI0eHhfZW5hYmxlX2ludHJzLAogCS5kaXNhYmxlX2ludHJzCQk9IHFsYTI0eHhfZGlzYWJsZV9pbnRycywKIAkuYWJvcnRfY29tbWFuZAkJPSBxbGEyNHh4X2Fib3J0X2NvbW1hbmQsCi0JLmFib3J0X3RhcmdldAkJPSBxbGEyNHh4X2Fib3J0X3RhcmdldCwKKwkudGFyZ2V0X3Jlc2V0CQk9IHFsYTI0eHhfYWJvcnRfdGFyZ2V0LAorCS5sdW5fcmVzZXQJCT0gcWxhMjR4eF9sdW5fcmVzZXQsCiAJLmZhYnJpY19sb2dpbgkJPSBxbGEyNHh4X2xvZ2luX2ZhYnJpYywKIAkuZmFicmljX2xvZ291dAkJPSBxbGEyNHh4X2ZhYnJpY19sb2dvdXQsCiAJLmNhbGNfcmVxX2VudHJpZXMJPSBOVUxMLApAQCAtMTM5MSw3ICsxMzA2LDggQEAKIAkuZW5hYmxlX2ludHJzCQk9IHFsYTI0eHhfZW5hYmxlX2ludHJzLAogCS5kaXNhYmxlX2ludHJzCQk9IHFsYTI0eHhfZGlzYWJsZV9pbnRycywKIAkuYWJvcnRfY29tbWFuZAkJPSBxbGEyNHh4X2Fib3J0X2NvbW1hbmQsCi0JLmFib3J0X3RhcmdldAkJPSBxbGEyNHh4X2Fib3J0X3RhcmdldCwKKwkudGFyZ2V0X3Jlc2V0CQk9IHFsYTI0eHhfYWJvcnRfdGFyZ2V0LAorCS5sdW5fcmVzZXQJCT0gcWxhMjR4eF9sdW5fcmVzZXQsCiAJLmZhYnJpY19sb2dpbgkJPSBxbGEyNHh4X2xvZ2luX2ZhYnJpYywKIAkuZmFicmljX2xvZ291dAkJPSBxbGEyNHh4X2ZhYnJpY19sb2dvdXQsCiAJLmNhbGNfcmVxX2VudHJpZXMJPSBOVUxMLApAQCAtMTQ2NCw2ICsxMzgwLDEzIEBACiAJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9JSURNQTsKIAkJaGEtPmZ3X3NyaXNjX2FkZHJlc3MgPSBSSVNDX1NUQVJUX0FERFJFU1NfMjQwMDsKIAkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A4NDMyOgorCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfSVNQODQzMjsKKwkJaGEtPmRldmljZV90eXBlIHw9IERUX1pJT19TVVBQT1JURUQ7CisJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9GV0kyOworCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfSUlETUE7CisJCWhhLT5md19zcmlzY19hZGRyZXNzID0gUklTQ19TVEFSVF9BRERSRVNTXzI0MDA7CisJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNTQyMjoKIAkJaGEtPmRldmljZV90eXBlIHw9IERUX0lTUDU0MjI7CiAJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9GV0kyOwpAQCAtMTU4Nyw2ICsxNTEwLDcgQEAKIAlzaHQgPSAmcWxhMngwMF9kcml2ZXJfdGVtcGxhdGU7CiAJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDIyIHx8CiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDMyIHx8CisJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A4NDMyIHx8CiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDIyIHx8CiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDMyIHx8CiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNTMyKSB7CkBAIC0xNjc3LDcgKzE2MDEsNyBAQAogCQlpZiAoSVNfUUxBMjMyMihoYSkgfHwgSVNfUUxBNjMyMihoYSkpCiAJCQloYS0+b3B0cm9tX3NpemUgPSBPUFRST01fU0laRV8yMzIyOwogCQloYS0+aXNwX29wcyA9ICZxbGEyMzAwX2lzcF9vcHM7Ci0JfSBlbHNlIGlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgeworCX0gZWxzZSBpZiAoSVNfUUxBMjRYWF9UWVBFKGhhKSkgewogCQlob3N0LT5tYXhfaWQgPSBNQVhfVEFSR0VUU18yMjAwOwogCQloYS0+bWJ4X2NvdW50ID0gTUFJTEJPWF9SRUdJU1RFUl9DT1VOVDsKIAkJaGEtPnJlcXVlc3RfcV9sZW5ndGggPSBSRVFVRVNUX0VOVFJZX0NOVF8yNFhYOwpAQCAtMTY5OSw2ICsxNjIzLDggQEAKIAkJaGEtPmdpZF9saXN0X2luZm9fc2l6ZSA9IDg7CiAJCWhhLT5vcHRyb21fc2l6ZSA9IE9QVFJPTV9TSVpFXzI1WFg7CiAJCWhhLT5pc3Bfb3BzID0gJnFsYTI1eHhfaXNwX29wczsKKwkJaGEtPmh3X2V2ZW50X3N0YXJ0ID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pID8KKwkJICAgIEZBX0hXX0VWRU5UMV9BRERSOiBGQV9IV19FVkVOVDBfQUREUjsKIAl9CiAJaG9zdC0+Y2FuX3F1ZXVlID0gaGEtPnJlcXVlc3RfcV9sZW5ndGggKyAxMjg7CiAKQEAgLTE3MTMsNiArMTYzOSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmhhLT5saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmaGEtPmZjcG9ydHMpOwogCUlOSVRfTElTVF9IRUFEKCZoYS0+dnBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmhhLT53b3JrX2xpc3QpOwogCiAJc2V0X2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKSBoYS0+dnBfaWR4X21hcCk7CiAKQEAgLTE4MTksNiArMTc0Niw4IEBACiAKIAlxbGEyeDAwX2Rmc19yZW1vdmUoaGEpOwogCisJcWxhODR4eF9wdXRfY2hpcChoYSk7CisKIAlxbGEyeDAwX2ZyZWVfc3lzZnNfYXR0cihoYSk7CiAKIAlmY19yZW1vdmVfaG9zdChoYS0+aG9zdCk7CkBAIC0yMjA2LDYgKzIxMzUsOTcgQEAKIAlrZnJlZShoYS0+bnZyYW0pOwogfQogCitzdHJ1Y3QgcWxhX3dvcmtfZXZ0ICoKK3FsYTJ4MDBfYWxsb2Nfd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIGVudW0gcWxhX3dvcmtfdHlwZSB0eXBlLAorICAgIGludCBsb2NrZWQpCit7CisJc3RydWN0IHFsYV93b3JrX2V2dCAqZTsKKworCWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWxhX3dvcmtfZXZ0KSwgbG9ja2VkID8gR0ZQX0FUT01JQzoKKwkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZlLT5saXN0KTsKKwllLT50eXBlID0gdHlwZTsKKwllLT5mbGFncyA9IFFMQV9FVlRfRkxBR19GUkVFOworCXJldHVybiBlOworfQorCitpbnQKK3FsYTJ4MDBfcG9zdF93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgc3RydWN0IHFsYV93b3JrX2V2dCAqZSwgaW50IGxvY2tlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFsb2NrZWQpCisJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmUtPmxpc3QsICZoYS0+d29ya19saXN0KTsKKwlxbGEyeHh4X3dha2VfZHBjKGhhKTsKKwlpZiAoIWxvY2tlZCkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gUUxBX1NVQ0NFU1M7Cit9CisKK2ludAorcWxhMngwMF9wb3N0X2Flbl93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgZW51bSBmY19ob3N0X2V2ZW50X2NvZGUgY29kZSwKKyAgICB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcWxhX3dvcmtfZXZ0ICplOworCisJZSA9IHFsYTJ4MDBfYWxsb2Nfd29yayhoYSwgUUxBX0VWVF9BRU4sIDEpOworCWlmICghZSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CisKKwllLT51LmFlbi5jb2RlID0gY29kZTsKKwllLT51LmFlbi5kYXRhID0gZGF0YTsKKwlyZXR1cm4gcWxhMngwMF9wb3N0X3dvcmsoaGEsIGUsIDEpOworfQorCitpbnQKK3FsYTJ4MDBfcG9zdF9od2Vfd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHVpbnQxNl90IGNvZGUsIHVpbnQxNl90IGQxLAorICAgIHVpbnQxNl90IGQyLCB1aW50MTZfdCBkMykKK3sKKwlzdHJ1Y3QgcWxhX3dvcmtfZXZ0ICplOworCisJZSA9IHFsYTJ4MDBfYWxsb2Nfd29yayhoYSwgUUxBX0VWVF9IV0VfTE9HLCAxKTsKKwlpZiAoIWUpCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCisJZS0+dS5od2UuY29kZSA9IGNvZGU7CisJZS0+dS5od2UuZDEgPSBkMTsKKwllLT51Lmh3ZS5kMiA9IGQyOworCWUtPnUuaHdlLmQzID0gZDM7CisJcmV0dXJuIHFsYTJ4MDBfcG9zdF93b3JrKGhhLCBlLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3FsYTJ4MDBfZG9fd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCit7CisJc3RydWN0IHFsYV93b3JrX2V2dCAqZTsKKworCXNwaW5fbG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmhhLT53b3JrX2xpc3QpKSB7CisJCWUgPSBsaXN0X2VudHJ5KGhhLT53b3JrX2xpc3QubmV4dCwgc3RydWN0IHFsYV93b3JrX2V2dCwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmUtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmhhLT5oYXJkd2FyZV9sb2NrKTsKKworCQlzd2l0Y2ggKGUtPnR5cGUpIHsKKwkJY2FzZSBRTEFfRVZUX0FFTjoKKwkJCWZjX2hvc3RfcG9zdF9ldmVudChoYS0+aG9zdCwgZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQkJICAgIGUtPnUuYWVuLmNvZGUsIGUtPnUuYWVuLmRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgUUxBX0VWVF9IV0VfTE9HOgorCQkJcWxhMnh4eF9od19ldmVudF9sb2coaGEsIGUtPnUuaHdlLmNvZGUsIGUtPnUuaHdlLmQxLAorCQkJICAgIGUtPnUuaHdlLmQyLCBlLT51Lmh3ZS5kMyk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZS0+ZmxhZ3MgJiBRTEFfRVZUX0ZMQUdfRlJFRSkKKwkJCWtmcmVlKGUpOworCQlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogcWxhMngwMF9kb19kcGMKICogICBUaGlzIGtlcm5lbCB0aHJlYWQgaXMgYSB0YXNrIHRoYXQgaXMgc2NoZWR1bGUgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyCkBAIC0yMjU3LDYgKzIyNzcsOCBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQlxbGEyeDAwX2RvX3dvcmsoaGEpOworCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpKSB7CiAKIAkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBkcGM6IHNjaGVkICIKQEAgLTIyOTEsMTIgKzIzMTMsNiBAQAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmaGEtPmRwY19mbGFncykpCiAJCQlxbGEyeDAwX3VwZGF0ZV9mY3BvcnRzKGhhKTsKIAotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExPT1BfUkVTRVRfTkVFREVELCAmaGEtPmRwY19mbGFncykpIHsKLQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBkcGM6IHNjaGVkIGxvb3BfcmVzZXQoKVxuIiwKLQkJCSAgICBoYS0+aG9zdF9ubykpOwotCQkJcWxhMngwMF9sb29wX3Jlc2V0KGhhKTsKLQkJfQotCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkVTRVRfTUFSS0VSX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpICYmCiAJCSAgICAoISh0ZXN0X2FuZF9zZXRfYml0KFJFU0VUX0FDVElWRSwgJmhhLT5kcGNfZmxhZ3MpKSkpIHsKIApAQCAtMjM2NywxOSArMjM4Myw2IEBACiAJCQkgICAgaGEtPmhvc3Rfbm8pKTsKIAkJfQogCi0JCWlmICgodGVzdF9iaXQoTE9HSU5fUkVUUllfTkVFREVELCAmaGEtPmRwY19mbGFncykpICYmCi0JCSAgICBhdG9taWNfcmVhZCgmaGEtPmxvb3Bfc3RhdGUpICE9IExPT1BfRE9XTikgewotCi0JCQljbGVhcl9iaXQoTE9HSU5fUkVUUllfTkVFREVELCAmaGEtPmRwY19mbGFncyk7Ci0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogcWxhMngwMF9sb2dpbl9yZXRyeSgpXG4iLAotCQkJICAgIGhhLT5ob3N0X25vKSk7Ci0KLQkJCXNldF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmaGEtPmRwY19mbGFncyk7Ci0KLQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBxbGEyeDAwX2xvZ2luX3JldHJ5IC0gZW5kXG4iLAotCQkJICAgIGhhLT5ob3N0X25vKSk7Ci0JCX0KLQogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExPT1BfUkVTWU5DX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpKSB7CiAKIAkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBxbGEyeDAwX2xvb3BfcmVzeW5jKClcbiIsCkBAIC0yMzk3LDE4ICsyNDAwLDYgQEAKIAkJCSAgICBoYS0+aG9zdF9ubykpOwogCQl9CiAKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGQ1BPUlRfUkVTQ0FOX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpKSB7Ci0KLQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBSZXNjYW4gZmxhZ2dlZCBmY3BvcnRzLi4uXG4iLAotCQkJICAgIGhhLT5ob3N0X25vKSk7Ci0KLQkJCXFsYTJ4MDBfcmVzY2FuX2ZjcG9ydHMoaGEpOwotCi0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogUmVzY2FuIGZsYWdnZWQgZmNwb3J0cy4uLiIKLQkJCSAgICAiZW5kLlxuIiwKLQkJCSAgICBoYS0+aG9zdF9ubykpOwotCQl9Ci0KIAkJaWYgKCFoYS0+aW50ZXJydXB0c19vbikKIAkJCWhhLT5pc3Bfb3BzLT5lbmFibGVfaW50cnMoaGEpOwogCkBAIC0yNTg2LDcgKzI1NzcsOCBAQAogCQkJc2V0X2JpdChSRVNUQVJUX1FVRVVFU19ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKIAkJCXN0YXJ0X2RwYysrOwogCi0JCQlpZiAoIShoYS0+ZGV2aWNlX2ZsYWdzICYgREZMR19OT19DQUJMRSkpIHsKKwkJCWlmICghKGhhLT5kZXZpY2VfZmxhZ3MgJiBERkxHX05PX0NBQkxFKSAmJgorCQkJICAgICFoYS0+cGFyZW50KSB7CiAJCQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IExvb3AgZG93biAtICIKIAkJCQkgICAgImFib3J0aW5nIElTUC5cbiIsCiAJCQkJICAgIGhhLT5ob3N0X25vKSk7CkBAIC0yNjEwLDEwICsyNjAyLDggQEAKIAkvKiBTY2hlZHVsZSB0aGUgRFBDIHJvdXRpbmUgaWYgbmVlZGVkICovCiAJaWYgKCh0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgdGVzdF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmaGEtPmRwY19mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoTE9PUF9SRVNFVF9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChGQ1BPUlRfVVBEQVRFX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpIHx8CiAJICAgIHN0YXJ0X2RwYyB8fAotCSAgICB0ZXN0X2JpdChMT0dJTl9SRVRSWV9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChSRVNFVF9NQVJLRVJfTkVFREVELCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgdGVzdF9iaXQoQkVBQ09OX0JMSU5LX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpIHx8CiAJICAgIHRlc3RfYml0KFZQX0RQQ19ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKSB8fApAQCAtMjY2NSw3ICsyNjU1LDcgQEAKIAkJYmxvYiA9ICZxbGFfZndfYmxvYnNbRldfSVNQMjMwMF07CiAJfSBlbHNlIGlmIChJU19RTEEyMzIyKGhhKSB8fCBJU19RTEE2MzIyKGhhKSkgewogCQlibG9iID0gJnFsYV9md19ibG9ic1tGV19JU1AyMzIyXTsKLQl9IGVsc2UgaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CisJfSBlbHNlIGlmIChJU19RTEEyNFhYX1RZUEUoaGEpKSB7CiAJCWJsb2IgPSAmcWxhX2Z3X2Jsb2JzW0ZXX0lTUDI0WFhdOwogCX0gZWxzZSBpZiAoSVNfUUxBMjVYWChoYSkpIHsKIAkJYmxvYiA9ICZxbGFfZndfYmxvYnNbRldfSVNQMjVYWF07CkBAIC0yODE1LDYgKzI4MDUsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNjMyMikgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MjIpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDMyKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQODQzMikgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDU0MjIpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDMyKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjUzMikgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zZXR0aW5ncy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKaW5kZXggMjQ5ZTRkOS4uMjgwMWMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKQEAgLTEsMjYgKzEsMTIgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDggUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwotLyoKLSAqIENvbXBpbGUgdGltZSBPcHRpb25zOgotICogICAgIDAgLSBEaXNhYmxlIGFuZCAxIC0gRW5hYmxlCi0gKi8KLSNkZWZpbmUgREVCVUdfUUxBMjEwMAkJMAkvKiBGb3IgRGVidWcgb2YgcWxhMngwMCAqLwotCi0jZGVmaW5lIFVTRV9BQk9SVF9UR1QJCTEJLyogVXNlIEFib3J0IFRhcmdldCBtYnggY21kICovCi0KICNkZWZpbmUgTUFYX1JFVFJJRVNfT0ZfSVNQX0FCT1JUCTUKIAogLyogTWF4IHRpbWUgdG8gd2FpdCBmb3IgdGhlIGxvb3AgdG8gYmUgaW4gTE9PUF9SRUFEWSBzdGF0ZSAqLwogI2RlZmluZSBNQVhfTE9PUF9USU1FT1VUCSg2MCAqIDUpCiAKLS8qCi0gKiBTb21lIHZlbmRvciBzdWJzeXN0ZW1zIGRvIG5vdCByZWNvdmVyIHByb3Blcmx5IGFmdGVyIGEgZGV2aWNlIHJlc2V0LiAgRGVmaW5lCi0gKiB0aGUgZm9sbG93aW5nIHRvIGZvcmNlIGEgbG9nb3V0IGFmdGVyIGEgc3VjY2Vzc2Z1bCBkZXZpY2UgcmVzZXQuCi0gKi8KLSN1bmRlZiBMT0dPVVRfQUZURVJfREVWSUNFX1JFU0VUCi0KICNpbmNsdWRlICJxbGFfdmVyc2lvbi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCmluZGV4IDI2ODIyYzguLjE3MjhhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA1IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTU0MywxNiArNTQzLDE0OSBAQAogCX0KIH0KIAordm9pZAorcWxhMnh4eF9nZXRfZmxhc2hfaW5mbyhzY3NpX3FsYV9ob3N0X3QgKmhhKQoreworI2RlZmluZSBGTEFTSF9CTEtfU0laRV8zMksJMHg4MDAwCisjZGVmaW5lIEZMQVNIX0JMS19TSVpFXzY0SwkweDEwMDAwCisJdWludDE2X3QgY250LCBjaGtzdW07CisJdWludDE2X3QgKndwdHI7CisJc3RydWN0IHFsYV9mZHRfbGF5b3V0ICpmZHQ7CisJdWludDhfdAltYW5faWQsIGZsYXNoX2lkOworCisJaWYgKCFJU19RTEEyNFhYX1RZUEUoaGEpICYmICFJU19RTEEyNVhYKGhhKSkKKwkJcmV0dXJuOworCisJd3B0ciA9ICh1aW50MTZfdCAqKWhhLT5yZXF1ZXN0X3Jpbmc7CisJZmR0ID0gKHN0cnVjdCBxbGFfZmR0X2xheW91dCAqKWhhLT5yZXF1ZXN0X3Jpbmc7CisJaGEtPmlzcF9vcHMtPnJlYWRfb3B0cm9tKGhhLCAodWludDhfdCAqKWhhLT5yZXF1ZXN0X3JpbmcsCisJICAgIEZBX0ZMQVNIX0RFU0NSX0FERFIgPDwgMiwgT1BUUk9NX0JVUlNUX1NJWkUpOworCWlmICgqd3B0ciA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ZmZmZikpCisJCWdvdG8gbm9fZmxhc2hfZGF0YTsKKwlpZiAoZmR0LT5zaWdbMF0gIT0gJ1EnIHx8IGZkdC0+c2lnWzFdICE9ICdMJyB8fCBmZHQtPnNpZ1syXSAhPSAnSScgfHwKKwkgICAgZmR0LT5zaWdbM10gIT0gJ0QnKQorCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CisKKwlmb3IgKGNudCA9IDAsIGNoa3N1bSA9IDA7IGNudCA8IHNpemVvZihzdHJ1Y3QgcWxhX2ZkdF9sYXlvdXQpID4+IDE7CisJICAgIGNudCsrKQorCQljaGtzdW0gKz0gbGUxNl90b19jcHUoKndwdHIrKyk7CisJaWYgKGNoa3N1bSkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSW5jb25zaXN0ZW50IEZEVCBkZXRlY3RlZDogIgorCQkgICAgImNoZWNrc3VtPTB4JXggaWQ9JWMgdmVyc2lvbj0weCV4LlxuIiwgY2hrc3VtLCBmZHQtPnNpZ1swXSwKKwkJICAgIGxlMTZfdG9fY3B1KGZkdC0+dmVyc2lvbikpKTsKKwkJREVCVUc5KHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilmZHQsIHNpemVvZigqZmR0KSkpOworCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CisJfQorCisJaGEtPmZkdF9vZGRfaW5kZXggPSBsZTE2X3RvX2NwdShmZHQtPm1hbl9pZCkgPT0gMHgxZjsKKwloYS0+ZmR0X3dydF9kaXNhYmxlID0gZmR0LT53cnRfZGlzYWJsZV9iaXRzOworCWhhLT5mZHRfZXJhc2VfY21kID0gZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAzMDAgfCBmZHQtPmVyYXNlX2NtZCk7CisJaGEtPmZkdF9ibG9ja19zaXplID0gbGUzMl90b19jcHUoZmR0LT5ibG9ja19zaXplKTsKKwlpZiAoZmR0LT51bnByb3RlY3Rfc2VjX2NtZCkgeworCQloYS0+ZmR0X3VucHJvdGVjdF9zZWNfY21kID0gZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAzMDAgfAorCQkgICAgZmR0LT51bnByb3RlY3Rfc2VjX2NtZCk7CisJCWhhLT5mZHRfcHJvdGVjdF9zZWNfY21kID0gZmR0LT5wcm90ZWN0X3NlY19jbWQgPworCQkgICAgZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAzMDAgfCBmZHQtPnByb3RlY3Rfc2VjX2NtZCk6CisJCSAgICBmbGFzaF9jb25mX3RvX2FjY2Vzc19hZGRyKDB4MDMzNik7CisJfQorCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9ERUJVRywgaGEsICJGbGFzaFtGRFRdOiAoMHgleC8weCV4KSBlcmFzZT0weCV4ICIKKwkgICAgInBybz0leCB1cHJvPSV4IGlkeD0lZCB3cnRkPTB4JXggYmxrPTB4JXguXG4iLAorCSAgICBsZTE2X3RvX2NwdShmZHQtPm1hbl9pZCksIGxlMTZfdG9fY3B1KGZkdC0+aWQpLCBoYS0+ZmR0X2VyYXNlX2NtZCwKKwkgICAgaGEtPmZkdF9wcm90ZWN0X3NlY19jbWQsIGhhLT5mZHRfdW5wcm90ZWN0X3NlY19jbWQsCisJICAgIGhhLT5mZHRfb2RkX2luZGV4LCBoYS0+ZmR0X3dydF9kaXNhYmxlLCBoYS0+ZmR0X2Jsb2NrX3NpemUpKTsKKwlyZXR1cm47CisKK25vX2ZsYXNoX2RhdGE6CisJcWxhMjR4eF9nZXRfZmxhc2hfbWFudWZhY3R1cmVyKGhhLCAmbWFuX2lkLCAmZmxhc2hfaWQpOworCWhhLT5mZHRfd3J0X2Rpc2FibGUgPSAweDljOworCWhhLT5mZHRfZXJhc2VfY21kID0gZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAzZDgpOworCXN3aXRjaCAobWFuX2lkKSB7CisJY2FzZSAweGJmOiAvKiBTVFQgZmxhc2guICovCisJCWlmIChmbGFzaF9pZCA9PSAweDhlKQorCQkJaGEtPmZkdF9ibG9ja19zaXplID0gRkxBU0hfQkxLX1NJWkVfNjRLOworCQllbHNlCisJCQloYS0+ZmR0X2Jsb2NrX3NpemUgPSBGTEFTSF9CTEtfU0laRV8zMks7CisKKwkJaWYgKGZsYXNoX2lkID09IDB4ODApCisJCQloYS0+ZmR0X2VyYXNlX2NtZCA9IGZsYXNoX2NvbmZfdG9fYWNjZXNzX2FkZHIoMHgwMzUyKTsKKwkJYnJlYWs7CisJY2FzZSAweDEzOiAvKiBTVCBNMjVQODAuICovCisJCWhhLT5mZHRfYmxvY2tfc2l6ZSA9IEZMQVNIX0JMS19TSVpFXzY0SzsKKwkJYnJlYWs7CisJY2FzZSAweDFmOiAvKiBBdG1lbCAyNkRGMDgxQS4gKi8KKwkJaGEtPmZkdF9vZGRfaW5kZXggPSAxOworCQloYS0+ZmR0X2Jsb2NrX3NpemUgPSBGTEFTSF9CTEtfU0laRV82NEs7CisJCWhhLT5mZHRfZXJhc2VfY21kID0gZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAzMjApOworCQloYS0+ZmR0X3VucHJvdGVjdF9zZWNfY21kID0gZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAzMzkpOworCQloYS0+ZmR0X3Byb3RlY3Rfc2VjX2NtZCA9IGZsYXNoX2NvbmZfdG9fYWNjZXNzX2FkZHIoMHgwMzM2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogRGVmYXVsdCB0byA2NCBrYiBzZWN0b3Igc2l6ZS4gKi8KKwkJaGEtPmZkdF9ibG9ja19zaXplID0gRkxBU0hfQkxLX1NJWkVfNjRLOworCQlicmVhazsKKwl9CisKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0RFQlVHLCBoYSwgIkZsYXNoW01JRF06ICgweCV4LzB4JXgpIGVyYXNlPTB4JXggIgorCSAgICAicHJvPSV4IHVwcm89JXggaWR4PSVkIHdydGQ9MHgleCBibGs9MHgleC5cbiIsIG1hbl9pZCwgZmxhc2hfaWQsCisJICAgIGhhLT5mZHRfZXJhc2VfY21kLCBoYS0+ZmR0X3Byb3RlY3Rfc2VjX2NtZCwKKwkgICAgaGEtPmZkdF91bnByb3RlY3Rfc2VjX2NtZCwgaGEtPmZkdF9vZGRfaW5kZXgsIGhhLT5mZHRfd3J0X2Rpc2FibGUsCisJICAgIGhhLT5mZHRfYmxvY2tfc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZAorcWxhMjR4eF91bnByb3RlY3RfZmxhc2goc2NzaV9xbGFfaG9zdF90ICpoYSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKKworCS8qIEVuYWJsZSBmbGFzaCB3cml0ZS4gKi8KKwlXUlRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzLAorCSAgICBSRF9SRUdfRFdPUkQoJnJlZy0+Y3RybF9zdGF0dXMpIHwgQ1NSWF9GTEFTSF9FTkFCTEUpOworCVJEX1JFR19EV09SRCgmcmVnLT5jdHJsX3N0YXR1cyk7CS8qIFBDSSBQb3N0aW5nLiAqLworCisJaWYgKCFoYS0+ZmR0X3dydF9kaXNhYmxlKQorCQlyZXR1cm47CisKKwkvKiBEaXNhYmxlIGZsYXNoIHdyaXRlLXByb3RlY3Rpb24uICovCisJcWxhMjR4eF93cml0ZV9mbGFzaF9kd29yZChoYSwgZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDEwMSksIDApOworCS8qIFNvbWUgZmxhc2ggcGFydHMgbmVlZCBhbiBhZGRpdGlvbmFsIHplcm8td3JpdGUgdG8gY2xlYXIgYml0cy4qLworCXFsYTI0eHhfd3JpdGVfZmxhc2hfZHdvcmQoaGEsIGZsYXNoX2NvbmZfdG9fYWNjZXNzX2FkZHIoMHgxMDEpLCAwKTsKK30KKworc3RhdGljIHZvaWQKK3FsYTI0eHhfcHJvdGVjdF9mbGFzaChzY3NpX3FsYV9ob3N0X3QgKmhhKQoreworCXVpbnQzMl90IGNudDsKKwlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKKworCWlmICghaGEtPmZkdF93cnRfZGlzYWJsZSkKKwkJZ290byBza2lwX3dydF9wcm90ZWN0OworCisJLyogRW5hYmxlIGZsYXNoIHdyaXRlLXByb3RlY3Rpb24gYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24uICovCisJcWxhMjR4eF93cml0ZV9mbGFzaF9kd29yZChoYSwgZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDEwMSksCisJICAgIGhhLT5mZHRfd3J0X2Rpc2FibGUpOworCWZvciAoY250ID0gMzAwOyBjbnQgJiYKKwkgICAgcWxhMjR4eF9yZWFkX2ZsYXNoX2R3b3JkKGhhLAorCQkgICAgZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAwNSkpICYgQklUXzA7CisJICAgIGNudC0tKSB7CisJCXVkZWxheSgxMCk7CisJfQorCitza2lwX3dydF9wcm90ZWN0OgorCS8qIERpc2FibGUgZmxhc2ggd3JpdGUuICovCisJV1JUX1JFR19EV09SRCgmcmVnLT5jdHJsX3N0YXR1cywKKwkgICAgUkRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzKSAmIH5DU1JYX0ZMQVNIX0VOQUJMRSk7CisJUkRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzKTsJLyogUENJIFBvc3RpbmcuICovCit9CisKIHN0YXRpYyBpbnQKIHFsYTI0eHhfd3JpdGVfZmxhc2hfZGF0YShzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MzJfdCAqZHdwdHIsIHVpbnQzMl90IGZhZGRyLAogICAgIHVpbnQzMl90IGR3b3JkcykKIHsKIAlpbnQgcmV0OwogCXVpbnQzMl90IGxpdGVyLCBtaXRlcjsKLQl1aW50MzJfdCBzZWNfbWFzaywgcmVzdF9hZGRyLCBjb25mX2FkZHI7Ci0JdWludDMyX3QgZmRhdGEsIGZpbmRleCwgY250OwotCXVpbnQ4X3QJbWFuX2lkLCBmbGFzaF9pZDsKLQlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKKwl1aW50MzJfdCBzZWNfbWFzaywgcmVzdF9hZGRyOworCXVpbnQzMl90IGZkYXRhLCBmaW5kZXg7CiAJZG1hX2FkZHJfdCBvcHRyb21fZG1hOwogCXZvaWQgKm9wdHJvbSA9IE5VTEw7CiAJdWludDMyX3QgKnMsICpkOwpAQCAtNTcxLDUxICs3MDQsMTMgQEAKIAkJfQogCX0KIAotCXFsYTI0eHhfZ2V0X2ZsYXNoX21hbnVmYWN0dXJlcihoYSwgJm1hbl9pZCwgJmZsYXNoX2lkKTsKLQlERUJVRzkocHJpbnRrKCIlcyglbGQpOiBGbGFzaCBtYW5faWQ9JWQgZmxhc2hfaWQ9JWRcbiIsIF9fZnVuY19fLAotCSAgICBoYS0+aG9zdF9ubywgbWFuX2lkLCBmbGFzaF9pZCkpOworCXJlc3RfYWRkciA9IChoYS0+ZmR0X2Jsb2NrX3NpemUgPj4gMikgLSAxOworCXNlY19tYXNrID0gMHg4MDAwMCAtIChoYS0+ZmR0X2Jsb2NrX3NpemUgPj4gMik7CiAKLQljb25mX2FkZHIgPSBmbGFzaF9jb25mX3RvX2FjY2Vzc19hZGRyKDB4MDNkOCk7Ci0Jc3dpdGNoIChtYW5faWQpIHsKLQljYXNlIDB4YmY6IC8qIFNUVCBmbGFzaC4gKi8KLQkJaWYgKGZsYXNoX2lkID09IDB4OGUpIHsKLQkJCXJlc3RfYWRkciA9IDB4M2ZmZjsKLQkJCXNlY19tYXNrID0gMHg3YzAwMDsKLQkJfSBlbHNlIHsKLQkJCXJlc3RfYWRkciA9IDB4MWZmZjsKLQkJCXNlY19tYXNrID0gMHg3ZTAwMDsKLQkJfQotCQlpZiAoZmxhc2hfaWQgPT0gMHg4MCkKLQkJCWNvbmZfYWRkciA9IGZsYXNoX2NvbmZfdG9fYWNjZXNzX2FkZHIoMHgwMzUyKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDEzOiAvKiBTVCBNMjVQODAuICovCi0JCXJlc3RfYWRkciA9IDB4M2ZmZjsKLQkJc2VjX21hc2sgPSAweDdjMDAwOwotCQlicmVhazsKLQljYXNlIDB4MWY6IC8vIEF0bWVsIDI2REYwODFBCi0JCXJlc3RfYWRkciA9IDB4M2ZmZjsKLQkJc2VjX21hc2sgPSAweDdjMDAwOwotCQljb25mX2FkZHIgPSBmbGFzaF9jb25mX3RvX2FjY2Vzc19hZGRyKDB4MDMyMCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIERlZmF1bHQgdG8gNjQga2Igc2VjdG9yIHNpemUuICovCi0JCXJlc3RfYWRkciA9IDB4M2ZmZjsKLQkJc2VjX21hc2sgPSAweDdjMDAwOwotCQlicmVhazsKLQl9Ci0KLQkvKiBFbmFibGUgZmxhc2ggd3JpdGUuICovCi0JV1JUX1JFR19EV09SRCgmcmVnLT5jdHJsX3N0YXR1cywKLQkgICAgUkRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzKSB8IENTUlhfRkxBU0hfRU5BQkxFKTsKLQlSRF9SRUdfRFdPUkQoJnJlZy0+Y3RybF9zdGF0dXMpOwkvKiBQQ0kgUG9zdGluZy4gKi8KLQotCS8qIERpc2FibGUgZmxhc2ggd3JpdGUtcHJvdGVjdGlvbi4gKi8KLQlxbGEyNHh4X3dyaXRlX2ZsYXNoX2R3b3JkKGhhLCBmbGFzaF9jb25mX3RvX2FjY2Vzc19hZGRyKDB4MTAxKSwgMCk7Ci0JLyogU29tZSBmbGFzaCBwYXJ0cyBuZWVkIGFuIGFkZGl0aW9uYWwgemVyby13cml0ZSB0byBjbGVhciBiaXRzLiovCi0JcWxhMjR4eF93cml0ZV9mbGFzaF9kd29yZChoYSwgZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDEwMSksIDApOworCXFsYTI0eHhfdW5wcm90ZWN0X2ZsYXNoKGhhKTsKIAogCWZvciAobGl0ZXIgPSAwOyBsaXRlciA8IGR3b3JkczsgbGl0ZXIrKywgZmFkZHIrKywgZHdwdHIrKykgewotCQlpZiAobWFuX2lkID09IDB4MWYpIHsKKwkJaWYgKGhhLT5mZHRfb2RkX2luZGV4KSB7CiAJCQlmaW5kZXggPSBmYWRkciA8PCAyOwogCQkJZmRhdGEgPSBmaW5kZXggJiBzZWNfbWFzazsKIAkJfSBlbHNlIHsKQEAgLTYyNSwxMyArNzIwLDEzIEBACiAKIAkJLyogQXJlIHdlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzZWN0b3I/ICovCiAJCWlmICgoZmluZGV4ICYgcmVzdF9hZGRyKSA9PSAwKSB7Ci0JCQkvKiBEbyBzZWN0b3IgdW5wcm90ZWN0IGF0IDRLIGJvdW5kcnkgZm9yIEF0bWVsIHBhcnQuICovCi0JCQlpZiAobWFuX2lkID09IDB4MWYpCisJCQkvKiBEbyBzZWN0b3IgdW5wcm90ZWN0LiAqLworCQkJaWYgKGhhLT5mZHRfdW5wcm90ZWN0X3NlY19jbWQpCiAJCQkJcWxhMjR4eF93cml0ZV9mbGFzaF9kd29yZChoYSwKLQkJCQkgICAgZmxhc2hfY29uZl90b19hY2Nlc3NfYWRkcigweDAzMzkpLAorCQkJCSAgICBoYS0+ZmR0X3VucHJvdGVjdF9zZWNfY21kLAogCQkJCSAgICAoZmRhdGEgJiAweGZmMDApIHwgKChmZGF0YSA8PCAxNikgJgogCQkJCSAgICAweGZmMDAwMCkgfCAoKGZkYXRhID4+IDE2KSAmIDB4ZmYpKTsKLQkJCXJldCA9IHFsYTI0eHhfd3JpdGVfZmxhc2hfZHdvcmQoaGEsIGNvbmZfYWRkciwKKwkJCXJldCA9IHFsYTI0eHhfd3JpdGVfZmxhc2hfZHdvcmQoaGEsIGhhLT5mZHRfZXJhc2VfY21kLAogCQkJICAgIChmZGF0YSAmIDB4ZmYwMCkgfCgoZmRhdGEgPDwgMTYpICYKIAkJCSAgICAweGZmMDAwMCkgfCAoKGZkYXRhID4+IDE2KSAmIDB4ZmYpKTsKIAkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKQEAgLTY4MSwyOCArNzc2LDE2IEBACiAJCQlicmVhazsKIAkJfQogCi0JCS8qIERvIHNlY3RvciBwcm90ZWN0IGF0IDRLIGJvdW5kcnkgZm9yIEF0bWVsIHBhcnQuICovCi0JCWlmIChtYW5faWQgPT0gMHgxZiAmJgorCQkvKiBEbyBzZWN0b3IgcHJvdGVjdC4gKi8KKwkJaWYgKGhhLT5mZHRfdW5wcm90ZWN0X3NlY19jbWQgJiYKIAkJICAgICgoZmFkZHIgJiByZXN0X2FkZHIpID09IHJlc3RfYWRkcikpCiAJCQlxbGEyNHh4X3dyaXRlX2ZsYXNoX2R3b3JkKGhhLAotCQkJICAgIGZsYXNoX2NvbmZfdG9fYWNjZXNzX2FkZHIoMHgwMzM2KSwKKwkJCSAgICBoYS0+ZmR0X3Byb3RlY3Rfc2VjX2NtZCwKIAkJCSAgICAoZmRhdGEgJiAweGZmMDApIHwgKChmZGF0YSA8PCAxNikgJgogCQkJICAgIDB4ZmYwMDAwKSB8ICgoZmRhdGEgPj4gMTYpICYgMHhmZikpOwogCX0KIAotCS8qIEVuYWJsZSBmbGFzaCB3cml0ZS1wcm90ZWN0aW9uIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uLiAqLwotCXFsYTI0eHhfd3JpdGVfZmxhc2hfZHdvcmQoaGEsIGZsYXNoX2NvbmZfdG9fYWNjZXNzX2FkZHIoMHgxMDEpLCAweDljKTsKLQlmb3IgKGNudCA9IDMwMDsgY250ICYmCi0JICAgIHFsYTI0eHhfcmVhZF9mbGFzaF9kd29yZChoYSwKLQkJICAgIGZsYXNoX2NvbmZfdG9fYWNjZXNzX2FkZHIoMHgwMDUpKSAmIEJJVF8wOwotCSAgICBjbnQtLSkgewotCQl1ZGVsYXkoMTApOwotCX0KLQotCS8qIERpc2FibGUgZmxhc2ggd3JpdGUuICovCi0JV1JUX1JFR19EV09SRCgmcmVnLT5jdHJsX3N0YXR1cywKLQkgICAgUkRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzKSAmIH5DU1JYX0ZMQVNIX0VOQUJMRSk7Ci0JUkRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzKTsJLyogUENJIFBvc3RpbmcuICovCisJcWxhMjR4eF9wcm90ZWN0X2ZsYXNoKGhhKTsKIAogCWlmIChvcHRyb20pCiAJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LApAQCAtMjIyMSwzICsyMzA0LDEwNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludAorcWxhMnh4eF9od19ldmVudF9zdG9yZShzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MzJfdCAqZmRhdGEpCit7CisJdWludDMyX3QgZFsyXSwgZmFkZHI7CisKKwkvKiBMb2NhdGUgZmlyc3QgZW1wdHkgZW50cnkuICovCisJZm9yICg7OykgeworCQlpZiAoaGEtPmh3X2V2ZW50X3B0ciA+PQorCQkgICAgaGEtPmh3X2V2ZW50X3N0YXJ0ICsgRkFfSFdfRVZFTlRfU0laRSkgeworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAiSFcgZXZlbnQgLS0gTG9nIEZ1bGwhXG4iKSk7CisJCQlyZXR1cm4gUUxBX01FTU9SWV9BTExPQ19GQUlMRUQ7CisJCX0KKworCQlxbGEyNHh4X3JlYWRfZmxhc2hfZGF0YShoYSwgZCwgaGEtPmh3X2V2ZW50X3B0ciwgMik7CisJCWZhZGRyID0gZmxhc2hfZGF0YV90b19hY2Nlc3NfYWRkcihoYS0+aHdfZXZlbnRfcHRyKTsKKwkJaGEtPmh3X2V2ZW50X3B0ciArPSBGQV9IV19FVkVOVF9FTlRSWV9TSVpFOworCQlpZiAoZFswXSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZmZmZmZmZmYpICYmCisJCSAgICBkWzFdID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHhmZmZmZmZmZikpIHsKKwkJCXFsYTI0eHhfdW5wcm90ZWN0X2ZsYXNoKGhhKTsKKworCQkJcWxhMjR4eF93cml0ZV9mbGFzaF9kd29yZChoYSwgZmFkZHIrKywKKwkJCSAgICBjcHVfdG9fbGUzMihqaWZmaWVzKSk7CisJCQlxbGEyNHh4X3dyaXRlX2ZsYXNoX2R3b3JkKGhhLCBmYWRkcisrLCAwKTsKKwkJCXFsYTI0eHhfd3JpdGVfZmxhc2hfZHdvcmQoaGEsIGZhZGRyKyssICpmZGF0YSsrKTsKKwkJCXFsYTI0eHhfd3JpdGVfZmxhc2hfZHdvcmQoaGEsIGZhZGRyKyssICpmZGF0YSk7CisKKwkJCXFsYTI0eHhfcHJvdGVjdF9mbGFzaChoYSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gUUxBX1NVQ0NFU1M7Cit9CisKK2ludAorcWxhMnh4eF9od19ldmVudF9sb2coc2NzaV9xbGFfaG9zdF90ICpoYSwgdWludDE2X3QgY29kZSwgdWludDE2X3QgZDEsCisgICAgdWludDE2X3QgZDIsIHVpbnQxNl90IGQzKQoreworI2RlZmluZSBRTUFSSyhhLCBiLCBjLCBkKSBcCisgICAgY3B1X3RvX2xlMzIoTFNCKGEpIDw8IDI0IHwgTFNCKGIpIDw8IDE2IHwgTFNCKGMpIDw8IDggfCBMU0IoZCkpCisKKwlpbnQgcnZhbDsKKwl1aW50MzJfdCBtYXJrZXJbMl0sIGZkYXRhWzRdOworCisJaWYgKGhhLT5od19ldmVudF9zdGFydCA9PSAwKQorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJICAgICJIVyBldmVudCAtLSBjb2RlPSV4LCBkMT0leCwgZDI9JXgsIGQzPSV4LlxuIiwgY29kZSwgZDEsIGQyLCBkMykpOworCisJLyogSWYgbWFya2VyIG5vdCBhbHJlYWR5IGZvdW5kLCBsb2NhdGUgb3Igd3JpdGUuICAqLworCWlmICghaGEtPmZsYWdzLmh3X2V2ZW50X21hcmtlcl9mb3VuZCkgeworCQkvKiBDcmVhdGUgbWFya2VyLiAqLworCQltYXJrZXJbMF0gPSBRTUFSSygnTCcsIGhhLT5md19tYWpvcl92ZXJzaW9uLAorCQkgICAgaGEtPmZ3X21pbm9yX3ZlcnNpb24sIGhhLT5md19zdWJtaW5vcl92ZXJzaW9uKTsKKwkJbWFya2VyWzFdID0gUU1BUksoUUxBX0RSSVZFUl9NQUpPUl9WRVIsIFFMQV9EUklWRVJfTUlOT1JfVkVSLAorCQkgICAgUUxBX0RSSVZFUl9QQVRDSF9WRVIsIFFMQV9EUklWRVJfQkVUQV9WRVIpOworCisJCS8qIExvY2F0ZSBtYXJrZXIuICovCisJCWhhLT5od19ldmVudF9wdHIgPSBoYS0+aHdfZXZlbnRfc3RhcnQ7CisJCWZvciAoOzspIHsKKwkJCXFsYTI0eHhfcmVhZF9mbGFzaF9kYXRhKGhhLCBmZGF0YSwgaGEtPmh3X2V2ZW50X3B0ciwKKwkJCSAgICA0KTsKKwkJCWlmIChmZGF0YVswXSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZmZmZmZmZmYpICYmCisJCQkgICAgZmRhdGFbMV0gPT0gX19jb25zdGFudF9jcHVfdG9fbGUzMigweGZmZmZmZmZmKSkKKwkJCQlicmVhazsKKwkJCWhhLT5od19ldmVudF9wdHIgKz0gRkFfSFdfRVZFTlRfRU5UUllfU0laRTsKKwkJCWlmIChoYS0+aHdfZXZlbnRfcHRyID49CisJCQkgICAgaGEtPmh3X2V2ZW50X3N0YXJ0ICsgRkFfSFdfRVZFTlRfU0laRSkgeworCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJICAgICJIVyBldmVudCAtLSBMb2cgRnVsbCFcbiIpKTsKKwkJCQlyZXR1cm4gUUxBX01FTU9SWV9BTExPQ19GQUlMRUQ7CisJCQl9CisJCQlpZiAoZmRhdGFbMl0gPT0gbWFya2VyWzBdICYmIGZkYXRhWzNdID09IG1hcmtlclsxXSkgeworCQkJCWhhLT5mbGFncy5od19ldmVudF9tYXJrZXJfZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qIE5vIG1hcmtlciwgd3JpdGUgaXQuICovCisJCWlmICghaGEtPmZsYWdzLmh3X2V2ZW50X21hcmtlcl9mb3VuZCkgeworCQkJcnZhbCA9IHFsYTJ4eHhfaHdfZXZlbnRfc3RvcmUoaGEsIG1hcmtlcik7CisJCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJICAgICJIVyBldmVudCAtLSBGYWlsZWQgbWFya2VyIHdyaXRlPSV4LiFcbiIsCisJCQkJICAgIHJ2YWwpKTsKKwkJCQlyZXR1cm4gcnZhbDsKKwkJCX0KKwkJCWhhLT5mbGFncy5od19ldmVudF9tYXJrZXJfZm91bmQgPSAxOworCQl9CisJfQorCisJLyogU3RvcmUgZXJyb3IuICAqLworCWZkYXRhWzBdID0gY3B1X3RvX2xlMzIoY29kZSA8PCAxNiB8IGQxKTsKKwlmZGF0YVsxXSA9IGNwdV90b19sZTMyKGQyIDw8IDE2IHwgZDMpOworCXJ2YWwgPSBxbGEyeHh4X2h3X2V2ZW50X3N0b3JlKGhhLCBmZGF0YSk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJIVyBldmVudCAtLSBGYWlsZWQgZXJyb3Igd3JpdGU9JXguIVxuIiwKKwkJICAgIHJ2YWwpKTsKKwl9CisKKwlyZXR1cm4gcnZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCmluZGV4IGM1NzQyY2MuLmY0MmYxN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaApAQCAtMSwxNSArMSwxNSBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwOCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMi4wMC1rOCIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDIuMDEtazEiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkyCi0jZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTAKKyNkZWZpbmUgUUxBX0RSSVZFUl9QQVRDSF9WRVIJMQogI2RlZmluZSBRTEFfRFJJVkVSX0JFVEFfVkVSCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9mdy5oIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2Z3LmgKaW5kZXggZmU0MTVlYy4uMWI2NjdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2Z3LmgKQEAgLTIxNiw2ICsyMTYsNyBAQAogI2RlZmluZSBNQk9YX0NNRF9BQk9VVF9GVwkJCTB4MDAwOQogI2RlZmluZSBNQk9YX0NNRF9QSU5HCQkJCTB4MDAwQgogI2RlZmluZSBNQk9YX0NNRF9MVU5fUkVTRVQJCQkweDAwMTYKKyNkZWZpbmUgTUJPWF9DTURfVEFSR0VUX1dBUk1fUkVTRVQJCTB4MDAxNwogI2RlZmluZSBNQk9YX0NNRF9HRVRfTUFOQUdFTUVOVF9EQVRBCQkweDAwMUUKICNkZWZpbmUgTUJPWF9DTURfR0VUX0ZXX1NUQVRVUwkJCTB4MDAxRgogI2RlZmluZSBNQk9YX0NNRF9TRVRfSVNOU19TRVJWSUNFCQkweDAwMjEKQEAgLTY3Nyw3ICs2NzgsOCBAQAogCXVpbnQzMl90IHN5c3RlbV9kZWZpbmVkOyAvKiAwNC0wNyAqLwogCXVpbnQxNl90IHRhcmdldDsJLyogMDgtMDkgKi8KIAl1aW50MTZfdCBtb2RpZmllcjsJLyogMEEtMEIgKi8KLSNkZWZpbmUgTU1fTFVOX1JFU0VUCSAgICAgMAorI2RlZmluZSBNTV9MVU5fUkVTRVQJCTAKKyNkZWZpbmUgTU1fVEdUX1dBUk1fUkVTRVQJMQogCiAJdWludDE2X3QgZmxhZ3M7CQkvKiAwQy0wRCAqLwogCXVpbnQxNl90IHJlc2VydmVkMTsJLyogMEUtMEYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oCmluZGV4IGEzNjA4ZTAuLjk2ZWJmYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaApAQCAtMjcsNiArMjcsOCBAQAogCQkJICAgc3RydWN0IGRkYl9lbnRyeSAqIGRkYl9lbnRyeSk7CiBpbnQgcWxhNHh4eF9yZXNldF9sdW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwgc3RydWN0IGRkYl9lbnRyeSAqIGRkYl9lbnRyeSwKIAkJICAgICAgaW50IGx1bik7CitpbnQgcWxhNHh4eF9yZXNldF90YXJnZXQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwKKwkJCSBzdHJ1Y3QgZGRiX2VudHJ5ICogZGRiX2VudHJ5KTsKIGludCBxbGE0eHh4X2dldF9mbGFzaChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhLCBkbWFfYWRkcl90IGRtYV9hZGRyLAogCQkgICAgICB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbik7CiBpbnQgcWxhNHh4eF9nZXRfZmlybXdhcmVfc3RhdHVzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOwpAQCAtNjgsNiArNzAsOCBAQAogaW50IHFsYTR4eHhfcHJvY2Vzc19kZGJfY2hhbmdlZChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhLAogCQkJCXVpbnQzMl90IGZ3X2RkYl9pbmRleCwgdWludDMyX3Qgc3RhdGUpOwogdm9pZCBxbGE0eHh4X2R1bXBfYnVmZmVyKHZvaWQgKmIsIHVpbnQzMl90IHNpemUpOworaW50IHFsYTR4eHhfc2VuZF9tYXJrZXJfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisJc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5LCBpbnQgbHVuLCB1aW50MTZfdCBtcmtyX21vZCk7CiAKIGV4dGVybiBpbnQgcWw0eGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7CiBleHRlcm4gaW50IHFsNHhkaXNjb3Zlcnl3YWl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKaW5kZXggMTBiM2I5YS4uMTA5YzVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCkBAIC0xMjk5LDkgKzEyOTksOSBAQAogCWRkYl9lbnRyeS0+ZndfZGRiX2RldmljZV9zdGF0ZSA9IHN0YXRlOwogCS8qIERldmljZSBpcyBiYWNrIG9ubGluZS4gKi8KIAlpZiAoZGRiX2VudHJ5LT5md19kZGJfZGV2aWNlX3N0YXRlID09IEREQl9EU19TRVNTSU9OX0FDVElWRSkgeworCQlhdG9taWNfc2V0KCZkZGJfZW50cnktPnN0YXRlLCBEREJfU1RBVEVfT05MSU5FKTsKIAkJYXRvbWljX3NldCgmZGRiX2VudHJ5LT5wb3J0X2Rvd25fdGltZXIsCiAJCQkgICBoYS0+cG9ydF9kb3duX3JldHJ5X2NvdW50KTsKLQkJYXRvbWljX3NldCgmZGRiX2VudHJ5LT5zdGF0ZSwgRERCX1NUQVRFX09OTElORSk7CiAJCWF0b21pY19zZXQoJmRkYl9lbnRyeS0+cmVsb2dpbl9yZXRyeV9jb3VudCwgMCk7CiAJCWF0b21pY19zZXQoJmRkYl9lbnRyeS0+cmVsb2dpbl90aW1lciwgMCk7CiAJCWNsZWFyX2JpdChERl9SRUxPR0lOLCAmZGRiX2VudHJ5LT5mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYwppbmRleCBlNDQ2MWI1Li45MTJhNjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKQEAgLTY2LDggKzY2LDggQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgbWFya2VyIElPQ0IuCiAgKiovCi1zdGF0aWMgaW50IHFsYTR4eHhfc2VuZF9tYXJrZXJfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCi0JCQkJICAgIHN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSwgaW50IGx1bikKK2ludCBxbGE0eHh4X3NlbmRfbWFya2VyX2lvY2Ioc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAorCXN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSwgaW50IGx1biwgdWludDE2X3QgbXJrcl9tb2QpCiB7CiAJc3RydWN0IHFsYTRfbWFya2VyX2VudHJ5ICptYXJrZXJfZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CkBAIC04Nyw3ICs4Nyw3IEBACiAJbWFya2VyX2VudHJ5LT5oZHIuZW50cnlUeXBlID0gRVRfTUFSS0VSOwogCW1hcmtlcl9lbnRyeS0+aGRyLmVudHJ5Q291bnQgPSAxOwogCW1hcmtlcl9lbnRyeS0+dGFyZ2V0ID0gY3B1X3RvX2xlMTYoZGRiX2VudHJ5LT5md19kZGJfaW5kZXgpOwotCW1hcmtlcl9lbnRyeS0+bW9kaWZpZXIgPSBjcHVfdG9fbGUxNihNTV9MVU5fUkVTRVQpOworCW1hcmtlcl9lbnRyeS0+bW9kaWZpZXIgPSBjcHVfdG9fbGUxNihtcmtyX21vZCk7CiAJaW50X3RvX3Njc2lsdW4obHVuLCAmbWFya2VyX2VudHJ5LT5sdW4pOwogCXdtYigpOwogCkBAIC0yMTAsMTQgKzIxMCw2IEBACiAJLyogR2V0IHJlYWwgbHVuIGFuZCBhZGFwdGVyICovCiAJZGRiX2VudHJ5ID0gc3JiLT5kZGI7CiAKLQkvKiBTZW5kIG1hcmtlcihzKSBpZiBuZWVkZWQuICovCi0JaWYgKGhhLT5tYXJrZXJfbmVlZGVkID09IDEpIHsKLQkJaWYgKHFsYTR4eHhfc2VuZF9tYXJrZXJfaW9jYihoYSwgZGRiX2VudHJ5LAotCQkJCQkgICAgIGNtZC0+ZGV2aWNlLT5sdW4pICE9IFFMQV9TVUNDRVNTKQotCQkJcmV0dXJuIFFMQV9FUlJPUjsKLQotCQloYS0+bWFya2VyX25lZWRlZCA9IDA7Ci0JfQogCXRvdF9kc2RzID0gMDsKIAogCS8qIEFjcXVpcmUgaGFyZHdhcmUgc3BlY2lmaWMgbG9jayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCmluZGV4IDBmMDI5ZDAuLmE5MWE1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKQEAgLTExLDI4ICsxMSw2IEBACiAjaW5jbHVkZSAicWw0X2lubGluZS5oIgogCiAvKioKLSAqIHFsYTJ4MDBfcHJvY2Vzc19jb21wbGV0ZWRfcmVxdWVzdCgpIC0gUHJvY2VzcyBhIEZhc3QgUG9zdCByZXNwb25zZS4KLSAqIEBoYTogU0NTSSBkcml2ZXIgSEEgY29udGV4dAotICogQGluZGV4OiBTUkIgaW5kZXgKLSAqKi8KLXN0YXRpYyB2b2lkIHFsYTR4eHhfcHJvY2Vzc19jb21wbGV0ZWRfcmVxdWVzdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCi0JCQkJCSAgICAgIHVpbnQzMl90IGluZGV4KQotewotCXN0cnVjdCBzcmIgKnNyYjsKLQotCXNyYiA9IHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5KGhhLCBpbmRleCk7Ci0JaWYgKHNyYikgewotCQkvKiBTYXZlIElTUCBjb21wbGV0aW9uIHN0YXR1cyAqLwotCQlzcmItPmNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OwotCQlxbGE0eHh4X3NyYl9jb21wbChoYSwgc3JiKTsKLQl9IGVsc2UgewotCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiBJbnZhbGlkIElTUCBTQ1NJIGNvbXBsZXRpb24gaGFuZGxlID0gIgotCQkJICAgICAgIiVkXG4iLCBoYS0+aG9zdF9ubywgaW5kZXgpKTsKLQkJc2V0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKTsKLQl9Ci19Ci0KLS8qKgogICogcWxhNHh4eF9zdGF0dXNfZW50cnkgLSBwcm9jZXNzZXMgc3RhdHVzIElPQ0JzCiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqIEBzdHNfZW50cnk6IFBvaW50ZXIgdG8gc3RhdHVzIGVudHJ5IHN0cnVjdHVyZS4KQEAgLTQ3LDE0ICsyNSw2IEBACiAJdWludDMyX3QgcmVzaWR1YWw7CiAJdWludDE2X3Qgc2Vuc2VieXRlY250OwogCi0JaWYgKHN0c19lbnRyeS0+Y29tcGxldGlvblN0YXR1cyA9PSBTQ1NfQ09NUExFVEUgJiYKLQkgICAgc3RzX2VudHJ5LT5zY3NpU3RhdHVzID09IDApIHsKLQkJcWxhNHh4eF9wcm9jZXNzX2NvbXBsZXRlZF9yZXF1ZXN0KGhhLAotCQkJCQkJICBsZTMyX3RvX2NwdShzdHNfZW50cnktPgotCQkJCQkJCSAgICAgIGhhbmRsZSkpOwotCQlyZXR1cm47Ci0JfQotCiAJc3JiID0gcWxhNHh4eF9kZWxfZnJvbV9hY3RpdmVfYXJyYXkoaGEsIGxlMzJfdG9fY3B1KHN0c19lbnRyeS0+aGFuZGxlKSk7CiAJaWYgKCFzcmIpIHsKIAkJLyogRklYTUVkZzogRG9uJ3Qgd2UgbmVlZCB0byByZXNldCBJU1AgaW4gdGhpcyBjYXNlPz8/ICovCkBAIC02Miw2ICszMiw5IEBACiAJCQkgICAgICAiaGFuZGxlIDB4JXgsIHNwPSVwLiBUaGlzIGNtZCBtYXkgaGF2ZSBhbHJlYWR5ICIKIAkJCSAgICAgICJiZWVuIGNvbXBsZXRlZC5cbiIsIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywKIAkJCSAgICAgIGxlMzJfdG9fY3B1KHN0c19lbnRyeS0+aGFuZGxlKSwgc3JiKSk7CisJCWRldl93YXJuKCZoYS0+cGRldi0+ZGV2LCAiJXMgaW52YWxpZCBzdGF0dXMgZW50cnk6IgorCQkJIiBoYW5kbGU9MHglMHhcbiIsIF9fZnVuY19fLCBzdHNfZW50cnktPmhhbmRsZSk7CisJCXNldF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg4LDEwICs2MSw2IEBACiAJc2NzaV9zdGF0dXMgPSBzdHNfZW50cnktPnNjc2lTdGF0dXM7CiAJc3dpdGNoIChzdHNfZW50cnktPmNvbXBsZXRpb25TdGF0dXMpIHsKIAljYXNlIFNDU19DT01QTEVURToKLQkJaWYgKHNjc2lfc3RhdHVzID09IDApIHsKLQkJCWNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OwotCQkJYnJlYWs7Ci0JCX0KIAogCQlpZiAoc3RzX2VudHJ5LT5pc2NzaUZsYWdzICYgSVNDU0lfRkxBR19SRVNJRFVBTF9PVkVSKSB7CiAJCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYwppbmRleCAzNWNkNzNjLi5jNTc3ZDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jCkBAIC03MTMsNiArNzEzLDQ1IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoqCisgKiBxbGE0eHh4X3Jlc2V0X3RhcmdldCAtIGlzc3VlcyB0YXJnZXQgUmVzZXQKKyAqIEBoYTogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgorICogQGRiX2VudHJ5OiBQb2ludGVyIHRvIGRldmljZSBkYXRhYmFzZSBlbnRyeQorICogQHVuX2VudHJ5OiBQb2ludGVyIHRvIGx1biBlbnRyeSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgYSBUQVJHRVQgUkVTRVQgb24gdGhlIHNwZWNpZmllZCB0YXJnZXQuCisgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIGRkYl9lbnRyeSBwb2ludGVycworICogYXJlIHZhbGlkIGJlZm9yZSBjYWxsaW5nIHRoaXMgcm91dGluZS4KKyAqKi8KK2ludCBxbGE0eHh4X3Jlc2V0X3RhcmdldChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisJCQkgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5KQoreworCXVpbnQzMl90IG1ib3hfY21kW01CT1hfUkVHX0NPVU5UXTsKKwl1aW50MzJfdCBtYm94X3N0c1tNQk9YX1JFR19DT1VOVF07CisJaW50IHN0YXR1cyA9IFFMQV9TVUNDRVNTOworCisJREVCVUcyKHByaW50aygic2NzaSVsZDolZDogdGFyZ2V0IHJlc2V0IGlzc3VlZFxuIiwgaGEtPmhvc3Rfbm8sCisJCSAgICAgIGRkYl9lbnRyeS0+b3NfdGFyZ2V0X2lkKSk7CisKKwkvKgorCSAqIFNlbmQgdGFyZ2V0IHJlc2V0IGNvbW1hbmQgdG8gSVNQLCBzbyB0aGF0IHRoZSBJU1Agd2lsbCByZXR1cm4gYWxsCisJICogb3V0c3RhbmRpbmcgcmVxdWVzdHMgd2l0aCBSRVNFVCBzdGF0dXMKKwkgKi8KKwltZW1zZXQoJm1ib3hfY21kLCAwLCBzaXplb2YobWJveF9jbWQpKTsKKwltZW1zZXQoJm1ib3hfc3RzLCAwLCBzaXplb2YobWJveF9zdHMpKTsKKworCW1ib3hfY21kWzBdID0gTUJPWF9DTURfVEFSR0VUX1dBUk1fUkVTRVQ7CisJbWJveF9jbWRbMV0gPSBkZGJfZW50cnktPmZ3X2RkYl9pbmRleDsKKwltYm94X2NtZFs1XSA9IDB4MDE7CS8qIEltbWVkaWF0ZSBDb21tYW5kIEVuYWJsZSAqLworCisJcWxhNHh4eF9tYWlsYm94X2NvbW1hbmQoaGEsIE1CT1hfUkVHX0NPVU5ULCAxLCAmbWJveF9jbWRbMF0sCisJCQkJJm1ib3hfc3RzWzBdKTsKKwlpZiAobWJveF9zdHNbMF0gIT0gTUJPWF9TVFNfQ09NTUFORF9DT01QTEVURSAmJgorCSAgICBtYm94X3N0c1swXSAhPSBNQk9YX1NUU19DT01NQU5EX0VSUk9SKQorCQlzdGF0dXMgPSBRTEFfRVJST1I7CisKKwlyZXR1cm4gc3RhdHVzOworfQogCiBpbnQgcWxhNHh4eF9nZXRfZmxhc2goc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwgZG1hX2FkZHJfdCBkbWFfYWRkciwKIAkJICAgICAgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCmluZGV4IGMzYzU5ZDcuLjBjNzg2OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCkBAIC03MSwxMCArNzEsMTIgQEAKIHN0YXRpYyBpbnQgcWxhNHh4eF9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kLAogCQkJCXZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSk7CiBzdGF0aWMgaW50IHFsYTR4eHhfZWhfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CitzdGF0aWMgaW50IHFsYTR4eHhfZWhfdGFyZ2V0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBzdGF0aWMgaW50IHFsYTR4eHhfZWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogc3RhdGljIGludCBxbGE0eHh4X3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgcWxhNHh4eF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIHZvaWQgcWxhNHh4eF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitzdGF0aWMgdm9pZCBxbGE0eHh4X3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBxbGE0eHh4X2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKQEAgLTgzLDYgKzg1LDcgQEAKIAkucXVldWVjb21tYW5kCQk9IHFsYTR4eHhfcXVldWVjb21tYW5kLAogCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gcWxhNHh4eF9laF9kZXZpY2VfcmVzZXQsCisJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyID0gcWxhNHh4eF9laF90YXJnZXRfcmVzZXQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHFsYTR4eHhfZWhfaG9zdF9yZXNldCwKIAogCS5zbGF2ZV9jb25maWd1cmUJPSBxbGE0eHh4X3NsYXZlX2NvbmZpZ3VyZSwKQEAgLTkwLDYgKzkzLDcgQEAKIAkuc2xhdmVfZGVzdHJveQkJPSBxbGE0eHh4X3NsYXZlX2Rlc3Ryb3ksCiAKIAkuc2Nhbl9maW5pc2hlZAkJPSBpc2NzaV9zY2FuX2ZpbmlzaGVkLAorCS5zY2FuX3N0YXJ0CQk9IHFsYTR4eHhfc2Nhbl9zdGFydCwKIAogCS50aGlzX2lkCQk9IC0xLAogCS5jbWRfcGVyX2x1bgkJPSAzLApAQCAtMjk5LDYgKzMwMywxOCBAQAogCXJldHVybiBkZGJfZW50cnk7CiB9CiAKK3N0YXRpYyB2b2lkIHFsYTR4eHhfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEgPSBzaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnksICpkZGJ0ZW1wOworCisJLyogZmluaXNoIHNldHVwIG9mIHNlc3Npb25zIHRoYXQgd2VyZSBhbHJlYWR5IHNldHVwIGluIGZpcm13YXJlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkYl9lbnRyeSwgZGRidGVtcCwgJmhhLT5kZGJfbGlzdCwgbGlzdCkgeworCQlpZiAoZGRiX2VudHJ5LT5md19kZGJfZGV2aWNlX3N0YXRlID09IEREQl9EU19TRVNTSU9OX0FDVElWRSkKKwkJCXFsYTR4eHhfYWRkX3Nlc3MoZGRiX2VudHJ5KTsKKwl9Cit9CisKIC8qCiAgKiBUaW1lciByb3V0aW5lcwogICovCkBAIC04NjQsOCArODgwLDkgQEAKICAqIHFsYTR4eHhfcmVjb3Zlcl9hZGFwdGVyIC0gcmVjb3ZlcnMgYWRhcHRlciBhZnRlciBhIGZhdGFsIGVycm9yCiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqIEByZW5ld19kZGJfbGlzdDogSW5kaWNhdGVzIHdoYXQgdG8gZG8gd2l0aCB0aGUgYWRhcHRlcidzIGRkYiBsaXN0Ci0gKglhZnRlciBhZGFwdGVyIHJlY292ZXJ5IGhhcyBjb21wbGV0ZWQuCi0gKgkwPXByZXNlcnZlIGRkYiBsaXN0LCAxPWRlc3Ryb3kgYW5kIHJlYnVpbGQgZGRiIGxpc3QKKyAqCisgKiByZW5ld19kZGJfbGlzdCB2YWx1ZSBjYW4gYmUgMD1wcmVzZXJ2ZSBkZGIgbGlzdCwgMT1kZXN0cm95IGFuZCByZWJ1aWxkCisgKiBkZGIgbGlzdC4KICAqKi8KIHN0YXRpYyBpbnQgcWxhNHh4eF9yZWNvdmVyX2FkYXB0ZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAogCQkJCXVpbnQ4X3QgcmVuZXdfZGRiX2xpc3QpCkBAIC04NzQsNiArODkxLDcgQEAKIAogCS8qIFN0YWxsIGluY29taW5nIEkvTyB1bnRpbCB3ZSBhcmUgZG9uZSAqLwogCWNsZWFyX2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpOworCiAJREVCVUcyKHByaW50aygic2NzaSVsZDogJXMgY2FsbGluZyBxbGE0eHh4X2NtZF93YWl0XG4iLCBoYS0+aG9zdF9ubywKIAkJICAgICAgX19mdW5jX18pKTsKIApAQCAtMTE3Niw3ICsxMTk0LDYgQEAKIAlpbnQgcmV0ID0gLUVOT0RFViwgc3RhdHVzOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhOwotCXN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSwgKmRkYnRlbXA7CiAJdWludDhfdCBpbml0X3JldHJ5X2NvdW50ID0gMDsKIAljaGFyIGJ1ZlszNF07CiAKQEAgLTEyOTUsMTMgKzEzMTIsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gcHJvYmVfZmFpbGVkOwogCi0JLyogVXBkYXRlIHRyYW5zcG9ydCBkZXZpY2UgaW5mb3JtYXRpb24gZm9yIGFsbCBkZXZpY2VzLiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZGJfZW50cnksIGRkYnRlbXAsICZoYS0+ZGRiX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRkYl9lbnRyeS0+ZndfZGRiX2RldmljZV9zdGF0ZSA9PSBEREJfRFNfU0VTU0lPTl9BQ1RJVkUpCi0JCQlpZiAocWxhNHh4eF9hZGRfc2VzcyhkZGJfZW50cnkpKQotCQkJCWdvdG8gcmVtb3ZlX2hvc3Q7Ci0JfQotCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiIFFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyIHZlcnNpb246ICVzXG4iCiAJICAgICAgICIgIFFMb2dpYyBJU1AlMDR4IEAgJXMsIGhvc3QjPSVsZCwgZnc9JTAyZC4lMDJkLiUwMmQuJTAyZFxuIiwKQEAgLTEzMTEsMTAgKzEzMjEsNiBAQAogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCXJldHVybiAwOwogCi1yZW1vdmVfaG9zdDoKLQlxbGE0eHh4X2ZyZWVfZGRiX2xpc3QoaGEpOwotCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7Ci0KIHByb2JlX2ZhaWxlZDoKIAlxbGE0eHh4X2ZyZWVfYWRhcHRlcihoYSk7CiAJc2NzaV9ob3N0X3B1dChoYS0+aG9zdCk7CkBAIC0xNDc4LDcgKzE0ODQsNyBAQAogfQogCiAvKioKLSAqIHFsYTR4eHhfZWhfd2FpdF9mb3JfYWN0aXZlX3RhcmdldF9jb21tYW5kcyAtIHdhaXQgZm9yIGFjdGl2ZSBjbWRzIHRvIGZpbmlzaC4KKyAqIHFsYTR4eHhfZWhfd2FpdF9mb3JfY29tbWFuZHMgLSB3YWl0IGZvciBhY3RpdmUgY21kcyB0byBmaW5pc2guCiAgKiBAaGE6IHBvaW50ZXIgdG8gdG8gSEJBCiAgKiBAdDogdGFyZ2V0IGlkCiAgKiBAbDogbHVuIGlkCkBAIC0xNDg2LDIwICsxNDkyLDIyIEBACiAgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciBhbGwgb3V0c3RhbmRpbmcgY29tbWFuZHMgdG8gYSBsdW4gdG8gY29tcGxldGUuIEl0CiAgKiByZXR1cm5zIDAgaWYgYWxsIHBlbmRpbmcgY29tbWFuZHMgYXJlIHJldHVybmVkIGFuZCAxIG90aGVyd2lzZS4KICAqKi8KLXN0YXRpYyBpbnQgcWxhNHh4eF9laF93YWl0X2Zvcl9hY3RpdmVfdGFyZ2V0X2NvbW1hbmRzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKLQkJCQkJCSBpbnQgdCwgaW50IGwpCitzdGF0aWMgaW50IHFsYTR4eHhfZWhfd2FpdF9mb3JfY29tbWFuZHMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAorCQkJCQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0Z3QsCisJCQkJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlpbnQgY250OwogCWludCBzdGF0dXMgPSAwOwogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKIAogCS8qCi0JICogV2FpdGluZyBmb3IgYWxsIGNvbW1hbmRzIGZvciB0aGUgZGVzaWduYXRlZCB0YXJnZXQgaW4gdGhlIGFjdGl2ZQotCSAqIGFycmF5CisJICogV2FpdGluZyBmb3IgYWxsIGNvbW1hbmRzIGZvciB0aGUgZGVzaWduYXRlZCB0YXJnZXQgb3IgZGV2CisJICogaW4gdGhlIGFjdGl2ZSBhcnJheQogCSAqLwogCWZvciAoY250ID0gMDsgY250IDwgaGEtPmhvc3QtPmNhbl9xdWV1ZTsgY250KyspIHsKIAkJY21kID0gc2NzaV9ob3N0X2ZpbmRfdGFnKGhhLT5ob3N0LCBjbnQpOwotCQlpZiAoY21kICYmIGNtZC0+ZGV2aWNlLT5pZCA9PSB0ICYmIGNtZC0+ZGV2aWNlLT5sdW4gPT0gbCkgeworCQlpZiAoY21kICYmIHN0Z3QgPT0gc2NzaV90YXJnZXQoY21kLT5kZXZpY2UpICYmCisJCSAgICAoIXNkZXYgfHwgc2RldiA9PSBjbWQtPmRldmljZSkpIHsKIAkJCWlmICghcWxhNHh4eF9laF93YWl0X29uX2NvbW1hbmQoaGEsIGNtZCkpIHsKIAkJCQlzdGF0dXMrKzsKIAkJCQlicmVhazsKQEAgLTE1NDQsMjQgKzE1NTIsMTkgQEAKIAkJZ290byBlaF9kZXZfcmVzZXRfZG9uZTsKIAl9CiAKLQkvKiBTZW5kIG1hcmtlci4gKi8KLQloYS0+bWFya2VyX25lZWRlZCA9IDE7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBjb21pbmcgZG93biB0aGUgRUggcGF0aCwgd2FpdCBmb3IgYWxsIGNvbW1hbmRzIHRvIGNvbXBsZXRlCi0JICogZm9yIHRoZSBkZXZpY2UuCi0JICovCi0JaWYgKGNtZC0+ZGV2aWNlLT5ob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSkgewotCQlpZiAocWxhNHh4eF9laF93YWl0X2Zvcl9hY3RpdmVfdGFyZ2V0X2NvbW1hbmRzKGhhLAotCQkJCQkJCSAgY21kLT5kZXZpY2UtPmlkLAotCQkJCQkJCSAgY21kLT5kZXZpY2UtPmx1bikpewotCQkJZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsCi0JCQkJICAgIkRFVklDRSBSRVNFVCBGQUlMRUQgLSB3YWl0aW5nIGZvciAiCi0JCQkJICAgImNvbW1hbmRzLlxuIik7Ci0JCQlnb3RvIGVoX2Rldl9yZXNldF9kb25lOwotCQl9CisJaWYgKHFsYTR4eHhfZWhfd2FpdF9mb3JfY29tbWFuZHMoaGEsIHNjc2lfdGFyZ2V0KGNtZC0+ZGV2aWNlKSwKKwkJCQkJIGNtZC0+ZGV2aWNlKSkgeworCQlkZXZfaW5mbygmaGEtPnBkZXYtPmRldiwKKwkJCSAgICJERVZJQ0UgUkVTRVQgRkFJTEVEIC0gd2FpdGluZyBmb3IgIgorCQkJICAgImNvbW1hbmRzLlxuIik7CisJCWdvdG8gZWhfZGV2X3Jlc2V0X2RvbmU7CiAJfQogCisJLyogU2VuZCBtYXJrZXIuICovCisJaWYgKHFsYTR4eHhfc2VuZF9tYXJrZXJfaW9jYihoYSwgZGRiX2VudHJ5LCBjbWQtPmRldmljZS0+bHVuLAorCQlNTV9MVU5fUkVTRVQpICE9IFFMQV9TVUNDRVNTKQorCQlnb3RvIGVoX2Rldl9yZXNldF9kb25lOworCiAJZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsCiAJCSAgICJzY3NpKCVsZDolZDolZDolZCk6IERFVklDRSBSRVNFVCBTVUNDRUVERUQuXG4iLAogCQkgICBoYS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmNoYW5uZWwsIGNtZC0+ZGV2aWNlLT5pZCwKQEAgLTE1NzUsNiArMTU3OCw1OSBAQAogfQogCiAvKioKKyAqIHFsYTR4eHhfZWhfdGFyZ2V0X3Jlc2V0IC0gY2FsbGJhY2sgZm9yIHRhcmdldCByZXNldC4KKyAqIEBjbWQ6IFBvaW50ZXIgdG8gTGludXgncyBTQ1NJIGNvbW1hbmQgc3RydWN0dXJlCisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgTGludXggT1MgdG8gcmVzZXQgdGhlIHRhcmdldC4KKyAqKi8KK3N0YXRpYyBpbnQgcWxhNHh4eF9laF90YXJnZXRfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSA9IHRvX3FsYV9ob3N0KGNtZC0+ZGV2aWNlLT5ob3N0KTsKKwlzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnkgPSBjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJaW50IHN0YXQ7CisKKwlpZiAoIWRkYl9lbnRyeSkKKwkJcmV0dXJuIEZBSUxFRDsKKworCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2NzaV90YXJnZXQoY21kLT5kZXZpY2UpLAorCQkgICAgICAgIldBUk0gVEFSR0VUIFJFU0VUIElTU1VFRC5cbiIpOworCisJREVCVUcyKHByaW50ayhLRVJOX0lORk8KKwkJICAgICAgInNjc2klbGQ6IFRBUkdFVF9ERVZJQ0VfUkVTRVQgY21kPSVwIGppZmZpZXMgPSAweCVseCwgIgorCQkgICAgICAidG89JXgsZHBjX2ZsYWdzPSVseCwgc3RhdHVzPSV4IGFsbG93ZWQ9JWRcbiIsCisJCSAgICAgIGhhLT5ob3N0X25vLCBjbWQsIGppZmZpZXMsIGNtZC0+dGltZW91dF9wZXJfY29tbWFuZCAvIEhaLAorCQkgICAgICBoYS0+ZHBjX2ZsYWdzLCBjbWQtPnJlc3VsdCwgY21kLT5hbGxvd2VkKSk7CisKKwlzdGF0ID0gcWxhNHh4eF9yZXNldF90YXJnZXQoaGEsIGRkYl9lbnRyeSk7CisJaWYgKHN0YXQgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX3RhcmdldChjbWQtPmRldmljZSksCisJCQkgICAgICAgIldBUk0gVEFSR0VUIFJFU0VUIEZBSUxFRC5cbiIpOworCQlyZXR1cm4gRkFJTEVEOworCX0KKworCWlmIChxbGE0eHh4X2VoX3dhaXRfZm9yX2NvbW1hbmRzKGhhLCBzY3NpX3RhcmdldChjbWQtPmRldmljZSksCisJCQkJCSBOVUxMKSkgeworCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNjc2lfdGFyZ2V0KGNtZC0+ZGV2aWNlKSwKKwkJCSAgICAgICAiV0FSTSBUQVJHRVQgREVWSUNFIFJFU0VUIEZBSUxFRCAtICIKKwkJCSAgICAgICAid2FpdGluZyBmb3IgY29tbWFuZHMuXG4iKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisKKwkvKiBTZW5kIG1hcmtlci4gKi8KKwlpZiAocWxhNHh4eF9zZW5kX21hcmtlcl9pb2NiKGhhLCBkZGJfZW50cnksIGNtZC0+ZGV2aWNlLT5sdW4sCisJCU1NX1RHVF9XQVJNX1JFU0VUKSAhPSBRTEFfU1VDQ0VTUykgeworCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNjc2lfdGFyZ2V0KGNtZC0+ZGV2aWNlKSwKKwkJCSAgICAgICAiV0FSTSBUQVJHRVQgREVWSUNFIFJFU0VUIEZBSUxFRCAtICIKKwkJCSAgICAgICAibWFya2VyIGlvY2IgZmFpbGVkLlxuIik7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCisJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX3RhcmdldChjbWQtPmRldmljZSksCisJCSAgICAgICAiV0FSTSBUQVJHRVQgUkVTRVQgU1VDQ0VFREVELlxuIik7CisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKKy8qKgogICogcWxhNHh4eF9laF9ob3N0X3Jlc2V0IC0ga2VybmVsIGNhbGxiYWNrCiAgKiBAY21kOiBQb2ludGVyIHRvIExpbnV4J3MgU0NTSSBjb21tYW5kIHN0cnVjdHVyZQogICoKQEAgLTE2MDAsOSArMTY1NiwxMiBAQAogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAotCWlmIChxbGE0eHh4X3JlY292ZXJfYWRhcHRlcihoYSwgUFJFU0VSVkVfRERCX0xJU1QpID09IFFMQV9TVUNDRVNTKSB7CisJLyogbWFrZSBzdXJlIHRoZSBkcGMgdGhyZWFkIGlzIHN0b3BwZWQgd2hpbGUgd2UgcmVzZXQgdGhlIGhiYSAqLworCWNsZWFyX2JpdChBRl9PTkxJTkUsICZoYS0+ZmxhZ3MpOworCWZsdXNoX3dvcmtxdWV1ZShoYS0+ZHBjX3RocmVhZCk7CisKKwlpZiAocWxhNHh4eF9yZWNvdmVyX2FkYXB0ZXIoaGEsIFBSRVNFUlZFX0REQl9MSVNUKSA9PSBRTEFfU1VDQ0VTUykKIAkJcmV0dXJuX3N0YXR1cyA9IFNVQ0NFU1M7Ci0JfQogCiAJZGV2X2luZm8oJmhhLT5wZGV2LT5kZXYsICJIT1NUIFJFU0VUICVzLlxuIiwKIAkJICAgcmV0dXJuX3N0YXR1cyA9PSBGQUlMRUQgPyAiRkFJTEVEIiA6ICJTVUNDRURFRCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jIGIvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jCmluZGV4IDY1NDU1YWIuLjRhMWNmNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYworKysgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMKQEAgLTY1MSw3ICs2NTEsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcXB0aV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBxcHRpX2NoYWluX2FkZChzdHJ1Y3QgcWxvZ2ljcHRpICpxcHRpKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHFwdGlfY2hhaW5fYWRkKHN0cnVjdCBxbG9naWNwdGkgKnFwdGkpCiB7CiAJc3Bpbl9sb2NrX2lycSgmcXB0aWNoYWluX2xvY2spOwogCWlmIChxcHRpY2hhaW4gIT0gTlVMTCkgewpAQCAtNjY3LDcgKzY2Nyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZxcHRpY2hhaW5fbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBxcHRpX2NoYWluX2RlbChzdHJ1Y3QgcWxvZ2ljcHRpICpxcHRpKQorc3RhdGljIHZvaWQgX19kZXZleGl0IHFwdGlfY2hhaW5fZGVsKHN0cnVjdCBxbG9naWNwdGkgKnFwdGkpCiB7CiAJc3Bpbl9sb2NrX2lycSgmcXB0aWNoYWluX2xvY2spOwogCWlmIChxcHRpY2hhaW4gPT0gcXB0aSkgewpAQCAtNjgyLDcgKzY4Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZxcHRpY2hhaW5fbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHFwdGlfbWFwX3JlZ3Moc3RydWN0IHFsb2dpY3B0aSAqcXB0aSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHFwdGlfbWFwX3JlZ3Moc3RydWN0IHFsb2dpY3B0aSAqcXB0aSkKIHsKIAlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYgPSBxcHRpLT5zZGV2OwogCkBAIC03MDUsNyArNzA1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcXB0aV9yZWdpc3Rlcl9pcnEoc3RydWN0IHFsb2dpY3B0aSAqcXB0aSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHFwdGlfcmVnaXN0ZXJfaXJxKHN0cnVjdCBxbG9naWNwdGkgKnFwdGkpCiB7CiAJc3RydWN0IHNidXNfZGV2ICpzZGV2ID0gcXB0aS0+c2RldjsKIApAQCAtNzMwLDcgKzczMCw3IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcXB0aV9nZXRfc2NzaV9pZChzdHJ1Y3QgcWxvZ2ljcHRpICpxcHRpKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHFwdGlfZ2V0X3Njc2lfaWQoc3RydWN0IHFsb2dpY3B0aSAqcXB0aSkKIHsKIAlxcHRpLT5zY3NpX2lkID0gcHJvbV9nZXRpbnRkZWZhdWx0KHFwdGktPnByb21fbm9kZSwKIAkJCQkJICAgImluaXRpYXRvci1pZCIsCkBAIC03ODMsNyArNzgzLDcgQEAKIC8qIFRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSBxdWV1ZXMgbXVzdCBlYWNoIGJlIGFsaWduZWQKICAqIG9uIGEgcGFnZSBib3VuZGFyeS4KICAqLwotc3RhdGljIGludCBfX2luaXQgcXB0aV9tYXBfcXVldWVzKHN0cnVjdCBxbG9naWNwdGkgKnFwdGkpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxcHRpX21hcF9xdWV1ZXMoc3RydWN0IHFsb2dpY3B0aSAqcXB0aSkKIHsKIAlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYgPSBxcHRpLT5zZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jIGIvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYwppbmRleCA4NmUxMzE4Li45MTNhOTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKQEAgLTI0LDE1ICsyNCwxNSBAQAogCXN0cnVjdCByYWlkX3RlbXBsYXRlIHI7CiAJc3RydWN0IHJhaWRfZnVuY3Rpb25fdGVtcGxhdGUgKmY7CiAJLyogVGhlIGFjdHVhbCBhdHRyaWJ1dGVzICovCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9hdHRyc1tSQUlEX05VTV9BVFRSU107CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9hdHRyc1tSQUlEX05VTV9BVFRSU107CiAJLyogVGhlIGFycmF5IG9mIG51bGwgdGVybWluYXRlZCBwb2ludGVycyB0byBhdHRyaWJ1dGVzIAogCSAqIG5lZWRlZCBieSBzY3NpX3N5c2ZzLmMgKi8KLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnNbUkFJRF9OVU1fQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnNbUkFJRF9OVU1fQVRUUlMgKyAxXTsKIH07CiAKIHN0cnVjdCByYWlkX2NvbXBvbmVudCB7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBjbGFzc19kZXZpY2UgY2RldjsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKIAlpbnQgbnVtOwogfTsKIApAQCAtNTAsOSArNTAsOSBAQAogCXRjX3RvX3JhaWRfaW50ZXJuYWwodGMpOwkJCQkJXAogfSkKIAotI2RlZmluZSBjbGFzc19kZXZpY2VfdG9fcmFpZF9pbnRlcm5hbChjZGV2KSAoewkJCQlcCisjZGVmaW5lIGRldmljZV90b19yYWlkX2ludGVybmFsKGRldikgKHsJCQkJXAogCXN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICphYyA9CQkJCVwKLQkJYXR0cmlidXRlX2NvbnRhaW5lcl9jbGFzc2Rldl90b19jb250YWluZXIoY2Rldik7CVwKKwkJYXR0cmlidXRlX2NvbnRhaW5lcl9jbGFzc2Rldl90b19jb250YWluZXIoZGV2KTsJXAogCWFjX3RvX3JhaWRfaW50ZXJuYWwoYWMpOwkJCQkJXAogfSkKIAkKQEAgLTc2LDMzICs3NiwzMyBAQAogfQogCiBzdGF0aWMgaW50IHJhaWRfc2V0dXAoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCSAgICAgICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorCQkgICAgICAgc3RydWN0IGRldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgcmFpZF9kYXRhICpyZDsKIAotCUJVR19PTihjbGFzc19nZXRfZGV2ZGF0YShjZGV2KSk7CisJQlVHX09OKGRldl9nZXRfZHJ2ZGF0YShjZGV2KSk7CiAKIAlyZCA9IGt6YWxsb2Moc2l6ZW9mKCpyZCksIEdGUF9LRVJORUwpOwogCWlmICghcmQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJSU5JVF9MSVNUX0hFQUQoJnJkLT5jb21wb25lbnRfbGlzdCk7Ci0JY2xhc3Nfc2V0X2RldmRhdGEoY2RldiwgcmQpOworCWRldl9zZXRfZHJ2ZGF0YShjZGV2LCByZCk7CiAJCQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJhaWRfcmVtb3ZlKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Yywgc3RydWN0IGRldmljZSAqZGV2LAotCQkgICAgICAgc3RydWN0IGNsYXNzX2RldmljZSAqY2RldikKKwkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmNkZXYpCiB7Ci0Jc3RydWN0IHJhaWRfZGF0YSAqcmQgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsKKwlzdHJ1Y3QgcmFpZF9kYXRhICpyZCA9IGRldl9nZXRfZHJ2ZGF0YShjZGV2KTsKIAlzdHJ1Y3QgcmFpZF9jb21wb25lbnQgKnJjLCAqbmV4dDsKIAlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJSQUlEIFJFTU9WRVxuIik7Ci0JY2xhc3Nfc2V0X2RldmRhdGEoY2RldiwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKGNkZXYsIE5VTEwpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyYywgbmV4dCwgJnJkLT5jb21wb25lbnRfbGlzdCwgbm9kZSkgewogCQlsaXN0X2RlbCgmcmMtPm5vZGUpOwotCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCByYy0+Y2Rldi5kZXYsICJSQUlEIENPTVBPTkVOVCBSRU1PVkVcbiIpOwotCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmcmMtPmNkZXYpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCByYy0+ZGV2LnBhcmVudCwgIlJBSUQgQ09NUE9ORU5UIFJFTU9WRVxuIik7CisJCWRldmljZV91bnJlZ2lzdGVyKCZyYy0+ZGV2KTsKIAl9CiAJZGV2X3ByaW50ayhLRVJOX0VSUiwgZGV2LCAiUkFJRCBSRU1PVkUgRE9ORVxuIik7CiAJa2ZyZWUocmQpOwpAQCAtMTcxLDkgKzE3MSwxMSBAQAogfQogCiAjZGVmaW5lIHJhaWRfYXR0cl9zaG93X2ludGVybmFsKGF0dHIsIGZtdCwgdmFyLCBjb2RlKQkJCVwKLXN0YXRpYyBzc2l6ZV90IHJhaWRfc2hvd18jI2F0dHIoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQlcCitzdGF0aWMgc3NpemVfdCByYWlkX3Nob3dfIyNhdHRyKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCAJCVwKKwkJCQljaGFyICpidWYpCQkJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHJhaWRfZGF0YSAqcmQgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsJCQlcCisJc3RydWN0IHJhaWRfZGF0YSAqcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCiAJY29kZQkJCQkJCQkJXAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAjZm10ICJcbiIsIHZhcik7CQkJXAogfQpAQCAtMTg0LDE3ICsxODYsMTcgQEAKIAljb2RlCQkJCQkJCQlcCiAJbmFtZSA9IHJhaWRfIyNzdGF0ZXMjI19uYW1lKHJkLT5hdHRyKTsJCQkJXAogKQkJCQkJCQkJCVwKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihhdHRyLCBTX0lSVUdPLCByYWlkX3Nob3dfIyNhdHRyLCBOVUxMKQorc3RhdGljIERFVklDRV9BVFRSKGF0dHIsIFNfSVJVR08sIHJhaWRfc2hvd18jI2F0dHIsIE5VTEwpCiAKIAogI2RlZmluZSByYWlkX2F0dHJfcm9faW50ZXJuYWwoYXR0ciwgY29kZSkJCQkJXAogcmFpZF9hdHRyX3Nob3dfaW50ZXJuYWwoYXR0ciwgJWQsIHJkLT5hdHRyLCBjb2RlKQkJCVwKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihhdHRyLCBTX0lSVUdPLCByYWlkX3Nob3dfIyNhdHRyLCBOVUxMKQorc3RhdGljIERFVklDRV9BVFRSKGF0dHIsIFNfSVJVR08sIHJhaWRfc2hvd18jI2F0dHIsIE5VTEwpCiAKICNkZWZpbmUgQVRUUl9DT0RFKGF0dHIpCQkJCQkJCVwKLQlzdHJ1Y3QgcmFpZF9pbnRlcm5hbCAqaSA9IGNsYXNzX2RldmljZV90b19yYWlkX2ludGVybmFsKGNkZXYpOwlcCisJc3RydWN0IHJhaWRfaW50ZXJuYWwgKmkgPSBkZXZpY2VfdG9fcmFpZF9pbnRlcm5hbChkZXYpOwkJXAogCWlmIChpLT5mLT5nZXRfIyNhdHRyKQkJCQkJCVwKLQkJaS0+Zi0+Z2V0XyMjYXR0cihjZGV2LT5kZXYpOworCQlpLT5mLT5nZXRfIyNhdHRyKGRldi0+cGFyZW50KTsKIAogI2RlZmluZSByYWlkX2F0dHJfcm8oYXR0cikJcmFpZF9hdHRyX3JvX2ludGVybmFsKGF0dHIsICkKICNkZWZpbmUgcmFpZF9hdHRyX3JvX2ZuKGF0dHIpCXJhaWRfYXR0cl9yb19pbnRlcm5hbChhdHRyLCBBVFRSX0NPREUoYXR0cikpCkBAIC0yMDYsMjMgKzIwOCwyMyBAQAogcmFpZF9hdHRyX3JvX2ZuKHJlc3luYyk7CiByYWlkX2F0dHJfcm9fc3RhdGVfZm4oc3RhdGUpOwogCi1zdGF0aWMgdm9pZCByYWlkX2NvbXBvbmVudF9yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCitzdGF0aWMgdm9pZCByYWlkX2NvbXBvbmVudF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcmFpZF9jb21wb25lbnQgKnJjID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCByYWlkX2NvbXBvbmVudCwKLQkJCQkJCSBjZGV2KTsKLQlkZXZfcHJpbnRrKEtFUk5fRVJSLCByYy0+Y2Rldi5kZXYsICJDT01QT05FTlQgUkVMRUFTRVxuIik7Ci0JcHV0X2RldmljZShyYy0+Y2Rldi5kZXYpOworCXN0cnVjdCByYWlkX2NvbXBvbmVudCAqcmMgPQorCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcmFpZF9jb21wb25lbnQsIGRldik7CisJZGV2X3ByaW50ayhLRVJOX0VSUiwgcmMtPmRldi5wYXJlbnQsICJDT01QT05FTlQgUkVMRUFTRVxuIik7CisJcHV0X2RldmljZShyYy0+ZGV2LnBhcmVudCk7CiAJa2ZyZWUocmMpOwogfQogCiBpbnQgcmFpZF9jb21wb25lbnRfYWRkKHN0cnVjdCByYWlkX3RlbXBsYXRlICpyLHN0cnVjdCBkZXZpY2UgKnJhaWRfZGV2LAogCQkgICAgICAgc3RydWN0IGRldmljZSAqY29tcG9uZW50X2RldikKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0KKwlzdHJ1Y3QgZGV2aWNlICpjZGV2ID0KIAkJYXR0cmlidXRlX2NvbnRhaW5lcl9maW5kX2NsYXNzX2RldmljZSgmci0+cmFpZF9hdHRycy5hYywKIAkJCQkJCSAgICAgIHJhaWRfZGV2KTsKIAlzdHJ1Y3QgcmFpZF9jb21wb25lbnQgKnJjOwotCXN0cnVjdCByYWlkX2RhdGEgKnJkID0gY2xhc3NfZ2V0X2RldmRhdGEoY2Rldik7CisJc3RydWN0IHJhaWRfZGF0YSAqcmQgPSBkZXZfZ2V0X2RydmRhdGEoY2Rldik7CiAJaW50IGVycjsKIAogCXJjID0ga3phbGxvYyhzaXplb2YoKnJjKSwgR0ZQX0tFUk5FTCk7CkBAIC0yMzAsMTcgKzIzMiwxNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCUlOSVRfTElTVF9IRUFEKCZyYy0+bm9kZSk7Ci0JY2xhc3NfZGV2aWNlX2luaXRpYWxpemUoJnJjLT5jZGV2KTsKLQlyYy0+Y2Rldi5yZWxlYXNlID0gcmFpZF9jb21wb25lbnRfcmVsZWFzZTsKLQlyYy0+Y2Rldi5kZXYgPSBnZXRfZGV2aWNlKGNvbXBvbmVudF9kZXYpOworCWRldmljZV9pbml0aWFsaXplKCZyYy0+ZGV2KTsKKwlyYy0+ZGV2LnJlbGVhc2UgPSByYWlkX2NvbXBvbmVudF9yZWxlYXNlOworCXJjLT5kZXYucGFyZW50ID0gZ2V0X2RldmljZShjb21wb25lbnRfZGV2KTsKIAlyYy0+bnVtID0gcmQtPmNvbXBvbmVudF9jb3VudCsrOwogCi0Jc25wcmludGYocmMtPmNkZXYuY2xhc3NfaWQsIHNpemVvZihyYy0+Y2Rldi5jbGFzc19pZCksCisJc25wcmludGYocmMtPmRldi5idXNfaWQsIHNpemVvZihyYy0+ZGV2LmJ1c19pZCksCiAJCSAiY29tcG9uZW50LSVkIiwgcmMtPm51bSk7CiAJbGlzdF9hZGRfdGFpbCgmcmMtPm5vZGUsICZyZC0+Y29tcG9uZW50X2xpc3QpOwotCXJjLT5jZGV2LnBhcmVudCA9IGNkZXY7Ci0JcmMtPmNkZXYuY2xhc3MgPSAmcmFpZF9jbGFzcy5jbGFzczsKLQllcnIgPSBjbGFzc19kZXZpY2VfYWRkKCZyYy0+Y2Rldik7CisJcmMtPmRldi5jbGFzcyA9ICZyYWlkX2NsYXNzLmNsYXNzOworCWVyciA9IGRldmljZV9hZGQoJnJjLT5kZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKIApAQCAtMjczLDkgKzI3NCw5IEBACiAKIAlhdHRyaWJ1dGVfY29udGFpbmVyX3JlZ2lzdGVyKCZpLT5yLnJhaWRfYXR0cnMuYWMpOwogCi0JaS0+YXR0cnNbY291bnQrK10gPSAmY2xhc3NfZGV2aWNlX2F0dHJfbGV2ZWw7Ci0JaS0+YXR0cnNbY291bnQrK10gPSAmY2xhc3NfZGV2aWNlX2F0dHJfcmVzeW5jOwotCWktPmF0dHJzW2NvdW50KytdID0gJmNsYXNzX2RldmljZV9hdHRyX3N0YXRlOworCWktPmF0dHJzW2NvdW50KytdID0gJmRldl9hdHRyX2xldmVsOworCWktPmF0dHJzW2NvdW50KytdID0gJmRldl9hdHRyX3Jlc3luYzsKKwlpLT5hdHRyc1tjb3VudCsrXSA9ICZkZXZfYXR0cl9zdGF0ZTsKIAogCWktPmF0dHJzW2NvdW50XSA9IE5VTEw7CiAJQlVHX09OKGNvdW50ID4gUkFJRF9OVU1fQVRUUlMpOwpAQCAtMjg5LDcgKzI5MCw3IEBACiB7CiAJc3RydWN0IHJhaWRfaW50ZXJuYWwgKmkgPSB0b19yYWlkX2ludGVybmFsKHIpOwogCi0JYXR0cmlidXRlX2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZpLT5yLnJhaWRfYXR0cnMuYWMpOworCUJVR19PTihhdHRyaWJ1dGVfY29udGFpbmVyX3VucmVnaXN0ZXIoJmktPnIucmFpZF9hdHRycy5hYykpOwogCiAJa2ZyZWUoaSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCBmZWNiYTA1Li4xMmQ2OWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTE2Niw2ICsxNjYsNTEgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoaG9zdF9jbWRfcG9vbF9tdXRleCk7CiAKIC8qKgorICogc2NzaV9wb29sX2FsbG9jX2NvbW1hbmQgLSBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZXQgYSBmdWxseSBhbGxvY2F0ZWQgY29tbWFuZAorICogQHBvb2w6CXNsYWIgcG9vbCB0byBhbGxvY2F0ZSB0aGUgY29tbWFuZCBmcm9tCisgKiBAZ2ZwX21hc2s6CW1hc2sgZm9yIHRoZSBhbGxvY2F0aW9uCisgKgorICogUmV0dXJucyBhIGZ1bGx5IGFsbG9jYXRlZCBjb21tYW5kICh3aXRoIHRoZSBhbGxpZWQgc2Vuc2UgYnVmZmVyKSBvcgorICogTlVMTCBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICoKK3Njc2lfcG9vbF9hbGxvY19jb21tYW5kKHN0cnVjdCBzY3NpX2hvc3RfY21kX3Bvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKKworCWNtZCA9IGttZW1fY2FjaGVfYWxsb2MocG9vbC0+Y21kX3NsYWIsIGdmcF9tYXNrIHwgcG9vbC0+Z2ZwX21hc2spOworCWlmICghY21kKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisKKwljbWQtPnNlbnNlX2J1ZmZlciA9IGttZW1fY2FjaGVfYWxsb2MocG9vbC0+c2Vuc2Vfc2xhYiwKKwkJCQkJICAgICBnZnBfbWFzayB8IHBvb2wtPmdmcF9tYXNrKTsKKwlpZiAoIWNtZC0+c2Vuc2VfYnVmZmVyKSB7CisJCWttZW1fY2FjaGVfZnJlZShwb29sLT5jbWRfc2xhYiwgY21kKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBzY3NpX3Bvb2xfZnJlZV9jb21tYW5kIC0gaW50ZXJuYWwgZnVuY3Rpb24gdG8gcmVsZWFzZSBhIGNvbW1hbmQKKyAqIEBwb29sOglzbGFiIHBvb2wgdG8gYWxsb2NhdGUgdGhlIGNvbW1hbmQgZnJvbQorICogQGNtZDoJY29tbWFuZCB0byByZWxlYXNlCisgKgorICogdGhlIGNvbW1hbmQgbXVzdCBwcmV2aW91c2x5IGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkKKyAqIHNjc2lfcG9vbF9hbGxvY19jb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorc2NzaV9wb29sX2ZyZWVfY29tbWFuZChzdHJ1Y3Qgc2NzaV9ob3N0X2NtZF9wb29sICpwb29sLAorCQkJIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocG9vbC0+c2Vuc2Vfc2xhYiwgY21kLT5zZW5zZV9idWZmZXIpOworCWttZW1fY2FjaGVfZnJlZShwb29sLT5jbWRfc2xhYiwgY21kKTsKK30KKworLyoqCiAgKiBfX3Njc2lfZ2V0X2NvbW1hbmQgLSBBbGxvY2F0ZSBhIHN0cnVjdCBzY3NpX2NtbmQKICAqIEBzaG9zdDogaG9zdCB0byB0cmFuc21pdCBjb21tYW5kCiAgKiBAZ2ZwX21hc2s6IGFsbG9jYXRpb24gbWFzawpAQCAtMTc4LDggKzIyMyw3IEBACiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAotCWNtZCA9IGttZW1fY2FjaGVfYWxsb2Moc2hvc3QtPmNtZF9wb29sLT5jbWRfc2xhYiwKLQkJCSAgICAgICBnZnBfbWFzayB8IHNob3N0LT5jbWRfcG9vbC0+Z2ZwX21hc2spOworCWNtZCA9IHNjc2lfcG9vbF9hbGxvY19jb21tYW5kKHNob3N0LT5jbWRfcG9vbCwgZ2ZwX21hc2spOwogCiAJaWYgKHVubGlrZWx5KCFjbWQpKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xOTcsMTYgKzI0MSw2IEBACiAJCQltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwogCQkJY21kLT5zZW5zZV9idWZmZXIgPSBidWY7CiAJCX0KLQl9IGVsc2UgewotCQlidWYgPSBrbWVtX2NhY2hlX2FsbG9jKHNob3N0LT5jbWRfcG9vbC0+c2Vuc2Vfc2xhYiwKLQkJCQkgICAgICAgZ2ZwX21hc2sgfCBzaG9zdC0+Y21kX3Bvb2wtPmdmcF9tYXNrKTsKLQkJaWYgKGxpa2VseShidWYpKSB7Ci0JCQltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwotCQkJY21kLT5zZW5zZV9idWZmZXIgPSBidWY7Ci0JCX0gZWxzZSB7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUoc2hvc3QtPmNtZF9wb29sLT5jbWRfc2xhYiwgY21kKTsKLQkJCWNtZCA9IE5VTEw7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gY21kOwpAQCAtMjY2LDExICszMDAsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaG9zdC0+ZnJlZV9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWlmIChsaWtlbHkoY21kICE9IE5VTEwpKSB7Ci0JCWttZW1fY2FjaGVfZnJlZShzaG9zdC0+Y21kX3Bvb2wtPnNlbnNlX3NsYWIsCi0JCQkJY21kLT5zZW5zZV9idWZmZXIpOwotCQlrbWVtX2NhY2hlX2ZyZWUoc2hvc3QtPmNtZF9wb29sLT5jbWRfc2xhYiwgY21kKTsKLQl9CisJaWYgKGxpa2VseShjbWQgIT0gTlVMTCkpCisJCXNjc2lfcG9vbF9mcmVlX2NvbW1hbmQoc2hvc3QtPmNtZF9wb29sLCBjbWQpOwogCiAJcHV0X2RldmljZShkZXYpOwogfQpAQCAtMjk5LDMwICszMzAsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9wdXRfY29tbWFuZCk7CiAKLS8qKgotICogc2NzaV9zZXR1cF9jb21tYW5kX2ZyZWVsaXN0IC0gU2V0dXAgdGhlIGNvbW1hbmQgZnJlZWxpc3QgZm9yIGEgc2NzaSBob3N0LgotICogQHNob3N0OiBob3N0IHRvIGFsbG9jYXRlIHRoZSBmcmVlbGlzdCBmb3IuCi0gKgotICogRGVzY3JpcHRpb246IFRoZSBjb21tYW5kIGZyZWVsaXN0IHByb3RlY3RzIGFnYWluc3Qgc3lzdGVtLXdpZGUgb3V0IG9mIG1lbW9yeQotICogZGVhZGxvY2sgYnkgcHJlYWxsb2NhdGluZyBvbmUgU0NTSSBjb21tYW5kIHN0cnVjdHVyZSBmb3IgZWFjaCBob3N0LCBzbyB0aGUKLSAqIHN5c3RlbSBjYW4gYWx3YXlzIHdyaXRlIHRvIGEgc3dhcCBmaWxlIG9uIGEgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGhvc3QuCi0gKgotICogUmV0dXJuczoJTm90aGluZy4KLSAqLwotaW50IHNjc2lfc2V0dXBfY29tbWFuZF9mcmVlbGlzdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X2NtZF9wb29sICpzY3NpX2dldF9ob3N0X2NtZF9wb29sKGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBzY3NpX2hvc3RfY21kX3Bvb2wgKnBvb2w7Ci0Jc3RydWN0IHNjc2lfY21uZCAqY21kOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnNob3N0LT5mcmVlX2xpc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnNob3N0LT5mcmVlX2xpc3QpOwotCisJc3RydWN0IHNjc2lfaG9zdF9jbWRfcG9vbCAqcmV0dmFsID0gTlVMTCwgKnBvb2w7CiAJLyoKIAkgKiBTZWxlY3QgYSBjb21tYW5kIHNsYWIgZm9yIHRoaXMgaG9zdCBhbmQgY3JlYXRlIGl0IGlmIG5vdAogCSAqIHlldCBleGlzdGVudC4KIAkgKi8KIAltdXRleF9sb2NrKCZob3N0X2NtZF9wb29sX211dGV4KTsKLQlwb29sID0gKHNob3N0LT51bmNoZWNrZWRfaXNhX2RtYSA/ICZzY3NpX2NtZF9kbWFfcG9vbCA6ICZzY3NpX2NtZF9wb29sKTsKKwlwb29sID0gKGdmcF9tYXNrICYgX19HRlBfRE1BKSA/ICZzY3NpX2NtZF9kbWFfcG9vbCA6CisJCSZzY3NpX2NtZF9wb29sOwogCWlmICghcG9vbC0+dXNlcnMpIHsKIAkJcG9vbC0+Y21kX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShwb29sLT5jbWRfbmFtZSwKIAkJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2NzaV9jbW5kKSwgMCwKQEAgLTM0MCwzNyArMzU3LDEyMiBAQAogCX0KIAogCXBvb2wtPnVzZXJzKys7Ci0Jc2hvc3QtPmNtZF9wb29sID0gcG9vbDsKKwlyZXR2YWwgPSBwb29sOworIGZhaWw6CiAJbXV0ZXhfdW5sb2NrKCZob3N0X2NtZF9wb29sX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOworfQogCi0JLyoKLQkgKiBHZXQgb25lIGJhY2t1cCBjb21tYW5kIGZvciB0aGlzIGhvc3QuCi0JICovCi0JY21kID0ga21lbV9jYWNoZV9hbGxvYyhzaG9zdC0+Y21kX3Bvb2wtPmNtZF9zbGFiLAotCQkJICAgICAgIEdGUF9LRVJORUwgfCBzaG9zdC0+Y21kX3Bvb2wtPmdmcF9tYXNrKTsKLQlpZiAoIWNtZCkKLQkJZ290byBmYWlsMjsKK3N0YXRpYyB2b2lkIHNjc2lfcHV0X2hvc3RfY21kX3Bvb2woZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHNjc2lfaG9zdF9jbWRfcG9vbCAqcG9vbDsKIAotCWNtZC0+c2Vuc2VfYnVmZmVyID0ga21lbV9jYWNoZV9hbGxvYyhzaG9zdC0+Y21kX3Bvb2wtPnNlbnNlX3NsYWIsCi0JCQkJCSAgICAgR0ZQX0tFUk5FTCB8Ci0JCQkJCSAgICAgc2hvc3QtPmNtZF9wb29sLT5nZnBfbWFzayk7Ci0JaWYgKCFjbWQtPnNlbnNlX2J1ZmZlcikKLQkJZ290byBmYWlsMjsKLQotCWxpc3RfYWRkKCZjbWQtPmxpc3QsICZzaG9zdC0+ZnJlZV9saXN0KTsKLQlyZXR1cm4gMDsKLQotIGZhaWwyOgotCWlmIChjbWQpCi0JCWttZW1fY2FjaGVfZnJlZShzaG9zdC0+Y21kX3Bvb2wtPmNtZF9zbGFiLCBjbWQpOwogCW11dGV4X2xvY2soJmhvc3RfY21kX3Bvb2xfbXV0ZXgpOworCXBvb2wgPSAoZ2ZwX21hc2sgJiBfX0dGUF9ETUEpID8gJnNjc2lfY21kX2RtYV9wb29sIDoKKwkJJnNjc2lfY21kX3Bvb2w7CisJLyoKKwkgKiBUaGlzIG1heSBoYXBwZW4gaWYgYSBkcml2ZXIgaGFzIGEgbWlzbWF0Y2hlZCBnZXQgYW5kIHB1dAorCSAqIG9mIHRoZSBjb21tYW5kIHBvb2w7IHRoZSBkcml2ZXIgc2hvdWxkIGJlIGltcGxpY2F0ZWQgaW4KKwkgKiB0aGUgc3RhY2sgdHJhY2UKKwkgKi8KKwlCVUdfT04ocG9vbC0+dXNlcnMgPT0gMCk7CisKIAlpZiAoIS0tcG9vbC0+dXNlcnMpIHsKIAkJa21lbV9jYWNoZV9kZXN0cm95KHBvb2wtPmNtZF9zbGFiKTsKIAkJa21lbV9jYWNoZV9kZXN0cm95KHBvb2wtPnNlbnNlX3NsYWIpOwogCX0KLSBmYWlsOgogCW11dGV4X3VubG9jaygmaG9zdF9jbWRfcG9vbF9tdXRleCk7Ci0JcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogc2NzaV9hbGxvY2F0ZV9jb21tYW5kIC0gZ2V0IGEgZnVsbHkgYWxsb2NhdGVkIFNDU0kgY29tbWFuZAorICogQGdmcF9tYXNrOglhbGxvY2F0aW9uIG1hc2sKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGUgbm9ybWFsIGhvc3QgYmFzZWQgcG9vbHMuCisgKiBJdCBhbGxvY2F0ZXMgdGhlIHJlbGV2YW50IGNvbW1hbmQgYW5kIHRha2VzIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlCisgKiBvbiB0aGUgcG9vbCBpdCB1c2VkLiAgVGhpcyBmdW5jdGlvbiAqbXVzdCogYmUgcGFpcmVkIHdpdGgKKyAqIHNjc2lfZnJlZV9jb21tYW5kIHdoaWNoIGFsc28gaGFzIHRoZSBpZGVudGljYWwgbWFzaywgb3RoZXJ3aXNlIHRoZQorICogZnJlZSBwb29sIGNvdW50cyB3aWxsIGV2ZW50dWFsbHkgZ28gd3JvbmcgYW5kIHlvdSdsbCB0cmlnZ2VyIGEgYnVnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkICpvbmx5KiBiZSB1c2VkIGJ5IGRyaXZlcnMgdGhhdCBuZWVkIGEgc3RhdGljCisgKiBjb21tYW5kIGFsbG9jYXRpb24gYXQgc3RhcnQgb2YgZGF5IGZvciBpbnRlcm5hbCBmdW5jdGlvbnMuCisgKi8KK3N0cnVjdCBzY3NpX2NtbmQgKnNjc2lfYWxsb2NhdGVfY29tbWFuZChnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3Qgc2NzaV9ob3N0X2NtZF9wb29sICpwb29sID0gc2NzaV9nZXRfaG9zdF9jbWRfcG9vbChnZnBfbWFzayk7CisKKwlpZiAoIXBvb2wpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHNjc2lfcG9vbF9hbGxvY19jb21tYW5kKHBvb2wsIGdmcF9tYXNrKTsKK30KK0VYUE9SVF9TWU1CT0woc2NzaV9hbGxvY2F0ZV9jb21tYW5kKTsKKworLyoqCisgKiBzY3NpX2ZyZWVfY29tbWFuZCAtIGZyZWUgYSBjb21tYW5kIGFsbG9jYXRlZCBieSBzY3NpX2FsbG9jYXRlX2NvbW1hbmQKKyAqIEBnZnBfbWFzazoJbWFzayB1c2VkIGluIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uCisgKiBAY21kOgljb21tYW5kIHRvIGZyZWUKKyAqCisgKiBOb3RlOiB1c2luZyB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbiBtYXNrIGlzIHZpdGFsIGJlY2F1c2UgdGhhdCdzCisgKiB3aGF0IGRldGVybWluZXMgd2hpY2ggY29tbWFuZCBwb29sIHdlIHVzZSB0byBmcmVlIHRoZSBjb21tYW5kLiAgQW55CisgKiBtaXNtYXRjaCB3aWxsIGNhdXNlIHRoZSBzeXN0ZW0gdG8gQlVHIGV2ZW50dWFsbHkuCisgKi8KK3ZvaWQgc2NzaV9mcmVlX2NvbW1hbmQoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc2NzaV9ob3N0X2NtZF9wb29sICpwb29sID0gc2NzaV9nZXRfaG9zdF9jbWRfcG9vbChnZnBfbWFzayk7CisKKwkvKgorCSAqIHRoaXMgY291bGQgdHJpZ2dlciBpZiB0aGUgbWFzayB0byBzY3NpX2FsbG9jYXRlX2NvbW1hbmQKKwkgKiBkb2Vzbid0IG1hdGNoIHRoaXMgbWFzay4gIE90aGVyd2lzZSB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgdGhpcworCSAqIHN1Y2NlZWRzIGJlY2F1c2Ugc2NzaV9hbGxvY2F0ZV9jb21tYW5kIG11c3QgaGF2ZSB0YWtlbiBhIHJlZmVyZW5jZQorCSAqIG9uIHRoZSBwb29sCisJICovCisJQlVHX09OKCFwb29sKTsKKworCXNjc2lfcG9vbF9mcmVlX2NvbW1hbmQocG9vbCwgY21kKTsKKwkvKgorCSAqIHNjc2lfcHV0X2hvc3RfY21kX3Bvb2wgaXMgY2FsbGVkIHR3aWNlOyBvbmNlIHRvIHJlbGVhc2UgdGhlCisJICogcmVmZXJlbmNlIHdlIHRvb2sgYWJvdmUsIGFuZCBvbmNlIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZQorCSAqIG9yaWdpbmFsbHkgdGFrZW4gYnkgc2NzaV9hbGxvY2F0ZV9jb21tYW5kCisJICovCisJc2NzaV9wdXRfaG9zdF9jbWRfcG9vbChnZnBfbWFzayk7CisJc2NzaV9wdXRfaG9zdF9jbWRfcG9vbChnZnBfbWFzayk7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfZnJlZV9jb21tYW5kKTsKKworLyoqCisgKiBzY3NpX3NldHVwX2NvbW1hbmRfZnJlZWxpc3QgLSBTZXR1cCB0aGUgY29tbWFuZCBmcmVlbGlzdCBmb3IgYSBzY3NpIGhvc3QuCisgKiBAc2hvc3Q6IGhvc3QgdG8gYWxsb2NhdGUgdGhlIGZyZWVsaXN0IGZvci4KKyAqCisgKiBEZXNjcmlwdGlvbjogVGhlIGNvbW1hbmQgZnJlZWxpc3QgcHJvdGVjdHMgYWdhaW5zdCBzeXN0ZW0td2lkZSBvdXQgb2YgbWVtb3J5CisgKiBkZWFkbG9jayBieSBwcmVhbGxvY2F0aW5nIG9uZSBTQ1NJIGNvbW1hbmQgc3RydWN0dXJlIGZvciBlYWNoIGhvc3QsIHNvIHRoZQorICogc3lzdGVtIGNhbiBhbHdheXMgd3JpdGUgdG8gYSBzd2FwIGZpbGUgb24gYSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaG9zdC4KKyAqCisgKiBSZXR1cm5zOglOb3RoaW5nLgorICovCitpbnQgc2NzaV9zZXR1cF9jb21tYW5kX2ZyZWVsaXN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKKwljb25zdCBnZnBfdCBnZnBfbWFzayA9IHNob3N0LT51bmNoZWNrZWRfaXNhX2RtYSA/IEdGUF9ETUEgOiBHRlBfS0VSTkVMOworCisJc3Bpbl9sb2NrX2luaXQoJnNob3N0LT5mcmVlX2xpc3RfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnNob3N0LT5mcmVlX2xpc3QpOworCisJc2hvc3QtPmNtZF9wb29sID0gc2NzaV9nZXRfaG9zdF9jbWRfcG9vbChnZnBfbWFzayk7CisKKwlpZiAoIXNob3N0LT5jbWRfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIEdldCBvbmUgYmFja3VwIGNvbW1hbmQgZm9yIHRoaXMgaG9zdC4KKwkgKi8KKwljbWQgPSBzY3NpX3Bvb2xfYWxsb2NfY29tbWFuZChzaG9zdC0+Y21kX3Bvb2wsIGdmcF9tYXNrKTsKKwlpZiAoIWNtZCkgeworCQlzY3NpX3B1dF9ob3N0X2NtZF9wb29sKGdmcF9tYXNrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWxpc3RfYWRkKCZjbWQtPmxpc3QsICZzaG9zdC0+ZnJlZV9saXN0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0zODQsMTcgKzQ4NiwxMCBAQAogCiAJCWNtZCA9IGxpc3RfZW50cnkoc2hvc3QtPmZyZWVfbGlzdC5uZXh0LCBzdHJ1Y3Qgc2NzaV9jbW5kLCBsaXN0KTsKIAkJbGlzdF9kZWxfaW5pdCgmY21kLT5saXN0KTsKLQkJa21lbV9jYWNoZV9mcmVlKHNob3N0LT5jbWRfcG9vbC0+c2Vuc2Vfc2xhYiwKLQkJCQljbWQtPnNlbnNlX2J1ZmZlcik7Ci0JCWttZW1fY2FjaGVfZnJlZShzaG9zdC0+Y21kX3Bvb2wtPmNtZF9zbGFiLCBjbWQpOworCQlzY3NpX3Bvb2xfZnJlZV9jb21tYW5kKHNob3N0LT5jbWRfcG9vbCwgY21kKTsKIAl9Ci0KLQltdXRleF9sb2NrKCZob3N0X2NtZF9wb29sX211dGV4KTsKLQlpZiAoIS0tc2hvc3QtPmNtZF9wb29sLT51c2VycykgewotCQlrbWVtX2NhY2hlX2Rlc3Ryb3koc2hvc3QtPmNtZF9wb29sLT5jbWRfc2xhYik7Ci0JCWttZW1fY2FjaGVfZGVzdHJveShzaG9zdC0+Y21kX3Bvb2wtPnNlbnNlX3NsYWIpOwotCX0KLQltdXRleF91bmxvY2soJmhvc3RfY21kX3Bvb2xfbXV0ZXgpOworCXNob3N0LT5jbWRfcG9vbCA9IE5VTEw7CisJc2NzaV9wdXRfaG9zdF9jbWRfcG9vbChzaG9zdC0+dW5jaGVja2VkX2lzYV9kbWEgPyBHRlBfRE1BIDogR0ZQX0tFUk5FTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0NTSV9MT0dHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCAxNTQxYzE3Li4wNzEwM2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTM5LDE2ICszOSwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlICJzY3NpLmgiCisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogCiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogCiAjaW5jbHVkZSAic2NzaV9sb2dnaW5nLmgiCi0jaW5jbHVkZSAic2NzaV9kZWJ1Zy5oIgogCiAjZGVmaW5lIFNDU0lfREVCVUdfVkVSU0lPTiAiMS44MSIKIHN0YXRpYyBjb25zdCBjaGFyICogc2NzaV9kZWJ1Z192ZXJzaW9uX2RhdGUgPSAiMjAwNzAxMDQiOwpAQCAtMTQ2LDcgKzE0OCw2IEBACiAjZGVmaW5lIERFVl9SRUFET05MWShUR1QpICAgICAgKDApCiAjZGVmaW5lIERFVl9SRU1PVkVBQkxFKFRHVCkgICAgKDApCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2RlYnVnX3N0b3JlX3NpemU7CS8qIGluIGJ5dGVzICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHNkZWJ1Z19zdG9yZV9zZWN0b3JzOwogc3RhdGljIHNlY3Rvcl90IHNkZWJ1Z19jYXBhY2l0eTsJLyogaW4gc2VjdG9ycyAqLwogCkBAIC0xNjUsNiArMTY2LDkgQEAKIAogI2RlZmluZSBTREVCVUdfU0VOU0VfTEVOIDMyCiAKKyNkZWZpbmUgU0NTSV9ERUJVR19DQU5RVUVVRSAgMjU1CisjZGVmaW5lIFNDU0lfREVCVUdfTUFYX0NNRF9MRU4gMTYKKwogc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsKIAl1bnNpZ25lZCBjaGFyIHNlbnNlX2J1ZmZbU0RFQlVHX1NFTlNFX0xFTl07CS8qIHdlYWsgbmV4dXMgKi8KQEAgLTIwMiwzMCArMjA2LDYgQEAKIH07CiBzdGF0aWMgc3RydWN0IHNkZWJ1Z19xdWV1ZWRfY21kIHF1ZXVlZF9hcnJbU0NTSV9ERUJVR19DQU5RVUVVRV07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNkZWJ1Z19kcml2ZXJfdGVtcGxhdGUgPSB7Ci0JLnByb2NfaW5mbyA9CQlzY3NpX2RlYnVnX3Byb2NfaW5mbywKLQkubmFtZSA9CQkJIlNDU0kgREVCVUciLAotCS5pbmZvID0JCQlzY3NpX2RlYnVnX2luZm8sCi0JLnNsYXZlX2FsbG9jID0JCXNjc2lfZGVidWdfc2xhdmVfYWxsb2MsCi0JLnNsYXZlX2NvbmZpZ3VyZSA9CXNjc2lfZGVidWdfc2xhdmVfY29uZmlndXJlLAotCS5zbGF2ZV9kZXN0cm95ID0Jc2NzaV9kZWJ1Z19zbGF2ZV9kZXN0cm95LAotCS5pb2N0bCA9CQlzY3NpX2RlYnVnX2lvY3RsLAotCS5xdWV1ZWNvbW1hbmQgPQkJc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQsCi0JLmVoX2Fib3J0X2hhbmRsZXIgPQlzY3NpX2RlYnVnX2Fib3J0LAotCS5laF9idXNfcmVzZXRfaGFuZGxlciA9IHNjc2lfZGVidWdfYnVzX3Jlc2V0LAotCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IHNjc2lfZGVidWdfZGV2aWNlX3Jlc2V0LAotCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIgPSBzY3NpX2RlYnVnX2hvc3RfcmVzZXQsCi0JLmJpb3NfcGFyYW0gPQkJc2NzaV9kZWJ1Z19iaW9zcGFyYW0sCi0JLmNhbl9xdWV1ZSA9CQlTQ1NJX0RFQlVHX0NBTlFVRVVFLAotCS50aGlzX2lkID0JCTcsCi0JLnNnX3RhYmxlc2l6ZSA9CQkyNTYsCi0JLmNtZF9wZXJfbHVuID0JCTE2LAotCS5tYXhfc2VjdG9ycyA9CQkweGZmZmYsCi0JLnVuY2hlY2tlZF9pc2FfZG1hID0gCTAsCi0JLnVzZV9jbHVzdGVyaW5nID0gCUVOQUJMRV9DTFVTVEVSSU5HLAotCS5tb2R1bGUgPQkJVEhJU19NT0RVTEUsCi19OwotCiBzdGF0aWMgdW5zaWduZWQgY2hhciAqIGZha2Vfc3RvcmVwOwkvKiByYW1kaXNrIHN0b3JhZ2UgKi8KIAogc3RhdGljIGludCBudW1fYWJvcnRzID0gMDsKQEAgLTIzOCw4ICsyMTgsNiBAQAogCiBzdGF0aWMgY2hhciBzZGVidWdfcHJvY19uYW1lW10gPSAic2NzaV9kZWJ1ZyI7CiAKLXN0YXRpYyBpbnQgc2RlYnVnX2RyaXZlcl9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOwotc3RhdGljIGludCBzZGVidWdfZHJpdmVyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOwogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBwc2V1ZG9fbGxkX2J1czsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNkZWJ1Z19kcml2ZXJmc19kcml2ZXIgPSB7CkBAIC0yNTUsOTQgKzIzMyw3NyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaWVjX21fcGdbXSA9IHsweDFjLCAweGEsIDB4MDgsIDAsIDAsIDAsIDAsIDAsCiAJCQkgICAgICAgICAgIDAsIDAsIDB4MCwgMHgwfTsKIAotLyogZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCi1zdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQsIGludCB0YXJnZXQsCi0JCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX3JlcXVlc3RzKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwKLQkJCSBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX3N0YXJ0X3N0b3Aoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwKLQkJCSAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7Ci1zdGF0aWMgaW50IHJlc3BfcmVwb3J0X3RndHBncyhzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAotCQkJICAgICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKLXN0YXRpYyBpbnQgcmVzcF9yZWFkY2FwKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwKLQkJCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7Ci1zdGF0aWMgaW50IHJlc3BfcmVhZGNhcDE2KHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwKLQkJCSAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKLXN0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIGludCB0YXJnZXQsCi0JCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX21vZGVfc2VsZWN0KHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIGludCBtc2VsZWN0NiwKLQkJCSAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX2xvZ19zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAotCQkJICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX3JlYWQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7Ci1zdGF0aWMgaW50IHJlc3Bfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX3JlcG9ydF9sdW5zKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwKLQkJCSAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX3hkd3JpdGVyZWFkKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKLQkJCSAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCk7Ci1zdGF0aWMgaW50IGZpbGxfZnJvbV9kZXZfYnVmZmVyKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIHVuc2lnbmVkIGNoYXIgKiBhcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcnJfbGVuKTsKLXN0YXRpYyBpbnQgZmV0Y2hfdG9fZGV2X2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLCB1bnNpZ25lZCBjaGFyICogYXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfYXJyX2xlbik7Ci1zdGF0aWMgdm9pZCB0aW1lcl9pbnRyX2hhbmRsZXIodW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldkluZm9SZWcoc3RydWN0IHNjc2lfZGV2aWNlICogc2Rldik7Ci1zdGF0aWMgdm9pZCBta19zZW5zZV9idWZmZXIoc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwLCBpbnQga2V5LAotCQkJICAgIGludCBhc2MsIGludCBhc3EpOwotc3RhdGljIGludCBjaGVja19yZWFkaW5lc3Moc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCBpbnQgcmVzZXRfb25seSwKLQkJCSAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7Ci1zdGF0aWMgaW50IHNjaGVkdWxlX3Jlc3Aoc3RydWN0IHNjc2lfY21uZCAqIGNtbmQsCi0JCQkgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwLAotCQkJIGRvbmVfZnVuY3RfdCBkb25lLCBpbnQgc2NzaV9yZXN1bHQsIGludCBkZWx0YV9qaWZmKTsKLXN0YXRpYyB2b2lkIF9faW5pdCBzZGVidWdfYnVpbGRfcGFydHModW5zaWduZWQgY2hhciAqIHJhbXApOwotc3RhdGljIHZvaWQgX19pbml0IGluaXRfYWxsX3F1ZXVlZCh2b2lkKTsKLXN0YXRpYyB2b2lkIHN0b3BfYWxsX3F1ZXVlZCh2b2lkKTsKLXN0YXRpYyBpbnQgc3RvcF9xdWV1ZWRfY21uZChzdHJ1Y3Qgc2NzaV9jbW5kICogY21uZCk7Ci1zdGF0aWMgaW50IGlucXVpcnlfZXZwZF84Myh1bnNpZ25lZCBjaGFyICogYXJyLCBpbnQgcG9ydF9ncm91cF9pZCwKLQkJCSAgIGludCB0YXJnZXRfZGV2X2lkLCBpbnQgZGV2X2lkX251bSwKLQkJCSAgIGNvbnN0IGNoYXIgKiBkZXZfaWRfc3RyLCBpbnQgZGV2X2lkX3N0cl9sZW4pOwotc3RhdGljIGludCBpbnF1aXJ5X2V2cGRfODgodW5zaWduZWQgY2hhciAqIGFyciwgaW50IHRhcmdldF9kZXZfaWQpOwotc3RhdGljIGludCBkb19jcmVhdGVfZHJpdmVyZnNfZmlsZXModm9pZCk7Ci1zdGF0aWMgdm9pZCBkb19yZW1vdmVfZHJpdmVyZnNfZmlsZXModm9pZCk7Ci0KIHN0YXRpYyBpbnQgc2RlYnVnX2FkZF9hZGFwdGVyKHZvaWQpOwogc3RhdGljIHZvaWQgc2RlYnVnX3JlbW92ZV9hZGFwdGVyKHZvaWQpOwotc3RhdGljIHZvaWQgc2RlYnVnX21heF90Z3RzX2x1bnModm9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlIHBzZXVkb19wcmltYXJ5Owotc3RhdGljIHN0cnVjdCBidXNfdHlwZSBwc2V1ZG9fbGxkX2J1czsKK3N0YXRpYyB2b2lkIHNkZWJ1Z19tYXhfdGd0c19sdW5zKHZvaWQpCit7CisJc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKnNkYmdfaG9zdDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpocG50OworCisJc3Bpbl9sb2NrKCZzZGVidWdfaG9zdF9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RiZ19ob3N0LCAmc2RlYnVnX2hvc3RfbGlzdCwgaG9zdF9saXN0KSB7CisJCWhwbnQgPSBzZGJnX2hvc3QtPnNob3N0OworCQlpZiAoKGhwbnQtPnRoaXNfaWQgPj0gMCkgJiYKKwkJICAgIChzY3NpX2RlYnVnX251bV90Z3RzID4gaHBudC0+dGhpc19pZCkpCisJCQlocG50LT5tYXhfaWQgPSBzY3NpX2RlYnVnX251bV90Z3RzICsgMTsKKwkJZWxzZQorCQkJaHBudC0+bWF4X2lkID0gc2NzaV9kZWJ1Z19udW1fdGd0czsKKwkJLyogc2NzaV9kZWJ1Z19tYXhfbHVuczsgKi8KKwkJaHBudC0+bWF4X2x1biA9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUzsKKwl9CisJc3Bpbl91bmxvY2soJnNkZWJ1Z19ob3N0X2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG1rX3NlbnNlX2J1ZmZlcihzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCwgaW50IGtleSwKKwkJCSAgICBpbnQgYXNjLCBpbnQgYXNxKQoreworCXVuc2lnbmVkIGNoYXIgKnNidWZmOworCisJc2J1ZmYgPSBkZXZpcC0+c2Vuc2VfYnVmZjsKKwltZW1zZXQoc2J1ZmYsIDAsIFNERUJVR19TRU5TRV9MRU4pOworCisJc2NzaV9idWlsZF9zZW5zZV9idWZmZXIoc2NzaV9kZWJ1Z19kc2Vuc2UsIHNidWZmLCBrZXksIGFzYywgYXNxKTsKKworCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogICAgW3NlbnNlX2tleSxhc2MsYXNjcV06ICIKKwkJICAgICAgIlsweCV4LDB4JXgsMHgleF1cbiIsIGtleSwgYXNjLCBhc3EpOworfQogCiBzdGF0aWMgdm9pZCBnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKHVuc2lnbmVkIGNoYXIgKmNtZCwKIAkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0pCiB7Ci0JaW50IGk7Ci0KIAlzd2l0Y2ggKCpjbWQpIHsKIAljYXNlIFdSSVRFXzE2OgogCWNhc2UgUkVBRF8xNjoKLQkJZm9yICgqbGJhID0gMCwgaSA9IDA7IGkgPCA4OyArK2kpIHsKLQkJCWlmIChpID4gMCkKLQkJCQkqbGJhIDw8PSA4OwotCQkJKmxiYSArPSBjbWRbMiArIGldOwotCQl9Ci0JCSpudW0gPSBjbWRbMTNdICsgKGNtZFsxMl0gPDwgOCkgKwotCQkJKGNtZFsxMV0gPDwgMTYpICsgKGNtZFsxMF0gPDwgMjQpOworCQkqbGJhID0gKHU2NCljbWRbOV0gfCAodTY0KWNtZFs4XSA8PCA4IHwKKwkJCSh1NjQpY21kWzddIDw8IDE2IHwgKHU2NCljbWRbNl0gPDwgMjQgfAorCQkJKHU2NCljbWRbNV0gPDwgMzIgfCAodTY0KWNtZFs0XSA8PCA0MCB8CisJCQkodTY0KWNtZFszXSA8PCA0OCB8ICh1NjQpY21kWzJdIDw8IDU2OworCisJCSpudW0gPSAodTMyKWNtZFsxM10gfCAodTMyKWNtZFsxMl0gPDwgOCB8ICh1MzIpY21kWzExXSA8PCAxNiB8CisJCQkodTMyKWNtZFsxMF0gPDwgMjQ7CiAJCWJyZWFrOwogCWNhc2UgV1JJVEVfMTI6CiAJY2FzZSBSRUFEXzEyOgotCQkqbGJhID0gY21kWzVdICsgKGNtZFs0XSA8PCA4KSArCShjbWRbM10gPDwgMTYpICsgKGNtZFsyXSA8PCAyNCk7Ci0JCSpudW0gPSBjbWRbOV0gKyAoY21kWzhdIDw8IDgpICsJKGNtZFs3XSA8PCAxNikgKyAoY21kWzZdIDw8IDI0KTsKKwkJKmxiYSA9ICh1MzIpY21kWzVdIHwgKHUzMiljbWRbNF0gPDwgOCB8ICh1MzIpY21kWzNdIDw8IDE2IHwKKwkJCSh1MzIpY21kWzJdIDw8IDI0OworCisJCSpudW0gPSAodTMyKWNtZFs5XSB8ICh1MzIpY21kWzhdIDw8IDggfCAodTMyKWNtZFs3XSA8PCAxNiB8CisJCQkodTMyKWNtZFs2XSA8PCAyNDsKIAkJYnJlYWs7CiAJY2FzZSBXUklURV8xMDoKIAljYXNlIFJFQURfMTA6CiAJY2FzZSBYRFdSSVRFUkVBRF8xMDoKLQkJKmxiYSA9IGNtZFs1XSArIChjbWRbNF0gPDwgOCkgKwkoY21kWzNdIDw8IDE2KSArIChjbWRbMl0gPDwgMjQpOwotCQkqbnVtID0gY21kWzhdICsgKGNtZFs3XSA8PCA4KTsKKwkJKmxiYSA9ICh1MzIpY21kWzVdIHwgKHUzMiljbWRbNF0gPDwgOCB8CSh1MzIpY21kWzNdIDw8IDE2IHwKKwkJCSh1MzIpY21kWzJdIDw8IDI0OworCisJCSpudW0gPSAodTMyKWNtZFs4XSB8ICh1MzIpY21kWzddIDw8IDg7CiAJCWJyZWFrOwogCWNhc2UgV1JJVEVfNjoKIAljYXNlIFJFQURfNjoKLQkJKmxiYSA9IGNtZFszXSArIChjbWRbMl0gPDwgOCkgKyAoKGNtZFsxXSAmIDB4MWYpIDw8IDE2KTsKKwkJKmxiYSA9ICh1MzIpY21kWzNdIHwgKHUzMiljbWRbMl0gPDwgOCB8CisJCQkodTMyKShjbWRbMV0gJiAweDFmKSA8PCAxNjsKIAkJKm51bSA9ICgwID09IGNtZFs0XSkgPyAyNTYgOiBjbWRbNF07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zNTAsMjM3ICszMTEsNiBAQAogCX0KIH0KIAotc3RhdGljCi1pbnQgc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCBkb25lX2Z1bmN0X3QgZG9uZSkKLXsKLQl1bnNpZ25lZCBjaGFyICpjbWQgPSAodW5zaWduZWQgY2hhciAqKSBTQ3BudC0+Y21uZDsKLQlpbnQgbGVuLCBrOwotCXVuc2lnbmVkIGludCBudW07Ci0JdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKLQlpbnQgZXJyc3RzID0gMDsKLQlpbnQgdGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aWQ7Ci0Jc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwID0gTlVMTDsKLQlpbnQgaW5qX3JlY292ZXJlZCA9IDA7Ci0JaW50IGlual90cmFuc3BvcnQgPSAwOwotCWludCBkZWxheV9vdmVycmlkZSA9IDA7Ci0KLQlpZiAoZG9uZSA9PSBOVUxMKQotCQlyZXR1cm4gMDsJLyogYXNzdW1lIG1pZCBsZXZlbCByZXByb2Nlc3NpbmcgY29tbWFuZCAqLwotCi0Jc2NzaV9zZXRfcmVzaWQoU0NwbnQsIDApOwotCWlmICgoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpICYmIGNtZCkgewotCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBjbWQgIik7Ci0JCWZvciAoayA9IDAsIGxlbiA9IFNDcG50LT5jbWRfbGVuOyBrIDwgbGVuOyArK2spCi0JCQlwcmludGsoIiUwMnggIiwgKGludCljbWRba10pOwotCQlwcmludGsoIlxuIik7Ci0JfQotICAgICAgICBpZih0YXJnZXQgPT0gc2RlYnVnX2RyaXZlcl90ZW1wbGF0ZS50aGlzX2lkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IGluaXRpYXRvcidzIGlkIHVzZWQgYXMgIgotCQkgICAgICAgInRhcmdldCFcbiIpOwotCQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgTlVMTCwgZG9uZSwKLQkJCQkgICAgIERJRF9OT19DT05ORUNUIDw8IDE2LCAwKTsKLSAgICAgICAgfQotCi0JaWYgKChTQ3BudC0+ZGV2aWNlLT5sdW4gPj0gc2NzaV9kZWJ1Z19tYXhfbHVucykgJiYKLQkgICAgKFNDcG50LT5kZXZpY2UtPmx1biAhPSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpKQotCQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgTlVMTCwgZG9uZSwKLQkJCQkgICAgIERJRF9OT19DT05ORUNUIDw8IDE2LCAwKTsKLQlkZXZpcCA9IGRldkluZm9SZWcoU0NwbnQtPmRldmljZSk7Ci0JaWYgKE5VTEwgPT0gZGV2aXApCi0JCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBOVUxMLCBkb25lLAotCQkJCSAgICAgRElEX05PX0NPTk5FQ1QgPDwgMTYsIDApOwotCi0gICAgICAgIGlmICgoc2NzaV9kZWJ1Z19ldmVyeV9udGggIT0gMCkgJiYKLSAgICAgICAgICAgICgrK3Njc2lfZGVidWdfY21uZF9jb3VudCA+PSBhYnMoc2NzaV9kZWJ1Z19ldmVyeV9udGgpKSkgewotICAgICAgICAgICAgICAgIHNjc2lfZGVidWdfY21uZF9jb3VudCA9IDA7Ci0JCWlmIChzY3NpX2RlYnVnX2V2ZXJ5X250aCA8IC0xKQotCQkJc2NzaV9kZWJ1Z19ldmVyeV9udGggPSAtMTsKLQkJaWYgKFNDU0lfREVCVUdfT1BUX1RJTUVPVVQgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlyZXR1cm4gMDsgLyogaWdub3JlIGNvbW1hbmQgY2F1c2luZyB0aW1lb3V0ICovCi0JCWVsc2UgaWYgKFNDU0lfREVCVUdfT1BUX1JFQ09WRVJFRF9FUlIgJiBzY3NpX2RlYnVnX29wdHMpCi0JCQlpbmpfcmVjb3ZlcmVkID0gMTsgLyogdG8gcmVhZHMgYW5kIHdyaXRlcyBiZWxvdyAqLwotCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9UUkFOU1BPUlRfRVJSICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJaW5qX3RyYW5zcG9ydCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KLSAgICAgICAgfQotCi0JaWYgKGRldmlwLT53bHVuKSB7Ci0JCXN3aXRjaCAoKmNtZCkgewotCQljYXNlIElOUVVJUlk6Ci0JCWNhc2UgUkVRVUVTVF9TRU5TRToKLQkJY2FzZSBURVNUX1VOSVRfUkVBRFk6Ci0JCWNhc2UgUkVQT1JUX0xVTlM6Ci0JCQlicmVhazsgIC8qIG9ubHkgYWxsb3dhYmxlIHdsdW4gY29tbWFuZHMgKi8KLQkJZGVmYXVsdDoKLQkJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBPcGNvZGU6IDB4JXggIgotCQkJCSAgICAgICAibm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgKmNtZCk7Ci0JCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKLQkJCQkJSU5WQUxJRF9PUENPREUsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZG9uZSwgZXJyc3RzLAotCQkJCQkgICAgIDApOwotCQl9Ci0JfQotCi0Jc3dpdGNoICgqY21kKSB7Ci0JY2FzZSBJTlFVSVJZOiAgICAgLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KLQkJZGVsYXlfb3ZlcnJpZGUgPSAxOwotCQllcnJzdHMgPSByZXNwX2lucXVpcnkoU0NwbnQsIHRhcmdldCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFUVVFU1RfU0VOU0U6CS8qIG1hbmRhdG9yeSwgaWdub3JlIHVuaXQgYXR0ZW50aW9uICovCi0JCWRlbGF5X292ZXJyaWRlID0gMTsKLQkJZXJyc3RzID0gcmVzcF9yZXF1ZXN0cyhTQ3BudCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIFJFWkVST19VTklUOgkvKiBhY3R1YWxseSB0aGlzIGlzIFJFV0lORCBmb3IgU1NDICovCi0JY2FzZSBTVEFSVF9TVE9QOgotCQllcnJzdHMgPSByZXNwX3N0YXJ0X3N0b3AoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDoKLQkJaWYgKChlcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKSkpCi0JCQlicmVhazsKLQkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogTWVkaXVtIHJlbW92YWwgJXNcbiIsCi0JCQkgICAgICAgIGNtZFs0XSA/ICJpbmhpYml0ZWQiIDogImVuYWJsZWQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5EX0RJQUdOT1NUSUM6ICAgICAvKiBtYW5kYXRvcnkgKi8KLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAxLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgVEVTVF9VTklUX1JFQURZOiAgICAgLyogbWFuZGF0b3J5ICovCi0JCWRlbGF5X292ZXJyaWRlID0gMTsKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7Ci0JCWJyZWFrOwotICAgICAgICBjYXNlIFJFU0VSVkU6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMSwgZGV2aXApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJFU0VSVkVfMTA6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMSwgZGV2aXApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJFTEVBU0U6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMSwgZGV2aXApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJFTEVBU0VfMTA6Ci0JCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMSwgZGV2aXApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgUkVBRF9DQVBBQ0lUWToKLQkJZXJyc3RzID0gcmVzcF9yZWFkY2FwKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VSVklDRV9BQ1RJT05fSU46Ci0JCWlmIChTQUlfUkVBRF9DQVBBQ0lUWV8xNiAhPSBjbWRbMV0pIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX09QQ09ERSwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQkJYnJlYWs7Ci0JCX0KLQkJZXJyc3RzID0gcmVzcF9yZWFkY2FwMTYoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNQUlOVEVOQU5DRV9JTjoKLQkJaWYgKE1JX1JFUE9SVF9UQVJHRVRfUEdTICE9IGNtZFsxXSkgewotCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCi0JCQkJCUlOVkFMSURfT1BDT0RFLCAwKTsKLQkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0JCQlicmVhazsKLQkJfQotCQllcnJzdHMgPSByZXNwX3JlcG9ydF90Z3RwZ3MoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRUFEXzE2OgotCWNhc2UgUkVBRF8xMjoKLQljYXNlIFJFQURfMTA6Ci0JY2FzZSBSRUFEXzY6Ci0JCWlmICgoZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCkpKQotCQkJYnJlYWs7Ci0JCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCi0JCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0pOwotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7Ci0JCWlmIChpbmpfcmVjb3ZlcmVkICYmICgwID09IGVycnN0cykpIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgUkVDT1ZFUkVEX0VSUk9SLAotCQkJCQlUSFJFU0hPTERfRVhDRUVERUQsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfSBlbHNlIGlmIChpbmpfdHJhbnNwb3J0ICYmICgwID09IGVycnN0cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgQUJPUlRFRF9DT01NQU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQU5TUE9SVF9QUk9CTEVNLCBBQ0tfTkFLX1RPKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQotCQlicmVhazsKLQljYXNlIFJFUE9SVF9MVU5TOgkvKiBtYW5kYXRvcnksIGlnbm9yZSB1bml0IGF0dGVudGlvbiAqLwotCQlkZWxheV9vdmVycmlkZSA9IDE7Ci0JCWVycnN0cyA9IHJlc3BfcmVwb3J0X2x1bnMoU0NwbnQsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBWRVJJRlk6CQkvKiAxMCBieXRlIFNCQy0yIGNvbW1hbmQgKi8KLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfMTY6Ci0JY2FzZSBXUklURV8xMjoKLQljYXNlIFdSSVRFXzEwOgotCWNhc2UgV1JJVEVfNjoKLQkJaWYgKChlcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDAsIGRldmlwKSkpCi0JCQlicmVhazsKLQkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKLQkJCWJyZWFrOwotCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7Ci0JCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7Ci0JCWlmIChpbmpfcmVjb3ZlcmVkICYmICgwID09IGVycnN0cykpIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgUkVDT1ZFUkVEX0VSUk9SLAotCQkJCQlUSFJFU0hPTERfRVhDRUVERUQsIDApOwotCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJfQotCQlicmVhazsKLQljYXNlIE1PREVfU0VOU0U6Ci0JY2FzZSBNT0RFX1NFTlNFXzEwOgotCQllcnJzdHMgPSByZXNwX21vZGVfc2Vuc2UoU0NwbnQsIHRhcmdldCwgZGV2aXApOwotCQlicmVhazsKLQljYXNlIE1PREVfU0VMRUNUOgotCQllcnJzdHMgPSByZXNwX21vZGVfc2VsZWN0KFNDcG50LCAxLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgTU9ERV9TRUxFQ1RfMTA6Ci0JCWVycnN0cyA9IHJlc3BfbW9kZV9zZWxlY3QoU0NwbnQsIDAsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBMT0dfU0VOU0U6Ci0JCWVycnN0cyA9IHJlc3BfbG9nX3NlbnNlKFNDcG50LCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6Ci0JCWRlbGF5X292ZXJyaWRlID0gMTsKLQkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7Ci0JCWJyZWFrOwotCWNhc2UgV1JJVEVfQlVGRkVSOgotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBYRFdSSVRFUkVBRF8xMDoKLQkJaWYgKCFzY3NpX2JpZGlfY21uZChTQ3BudCkpIHsKLQkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAotCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7Ci0JCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCQkJYnJlYWs7Ci0JCX0KLQotCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDAsIGRldmlwKTsKLQkJaWYgKGVycnN0cykKLQkJCWJyZWFrOwotCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQotCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtKTsKLQkJZXJyc3RzID0gcmVzcF9yZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOwotCQlpZiAoZXJyc3RzKQotCQkJYnJlYWs7Ci0JCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7Ci0JCWlmIChlcnJzdHMpCi0JCQlicmVhazsKLQkJZXJyc3RzID0gcmVzcF94ZHdyaXRlcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogT3Bjb2RlOiAweCV4IG5vdCAiCi0JCQkgICAgICAgInN1cHBvcnRlZFxuIiwgKmNtZCk7Ci0JCWlmICgoZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAxLCBkZXZpcCkpKQotCQkJYnJlYWs7CS8qIFVuaXQgYXR0ZW50aW9uIHRha2VzIHByZWNlZGVuY2UgKi8KLQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfT1BDT0RFLCAwKTsKLQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZG9uZSwgZXJyc3RzLAotCQkJICAgICAoZGVsYXlfb3ZlcnJpZGUgPyAwIDogc2NzaV9kZWJ1Z19kZWxheSkpOwotfQotCiBzdGF0aWMgaW50IHNjc2lfZGVidWdfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCiB7CiAJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKSB7CkBAIC02MTMsODEgKzM0MywzNyBAQAogfQogCiAvKiBSZXR1cm5zIDAgaWYgb2sgZWxzZSAoRElEX0VSUk9SIDw8IDE2KS4gU2V0cyBzY3AtPnJlc2lkIC4gKi8KLXN0YXRpYyBpbnQgZmlsbF9mcm9tX2Rldl9idWZmZXIoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwgdW5zaWduZWQgY2hhciAqIGFyciwKK3N0YXRpYyBpbnQgZmlsbF9mcm9tX2Rldl9idWZmZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwLCB1bnNpZ25lZCBjaGFyICphcnIsCiAJCQkJaW50IGFycl9sZW4pCiB7Ci0JaW50IGssIHJlcV9sZW4sIGFjdF9sZW4sIGxlbiwgYWN0aXZlOwotCXZvaWQgKiBrYWRkcjsKLQl2b2lkICoga2FkZHJfb2ZmOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGFjdF9sZW47CiAJc3RydWN0IHNjc2lfZGF0YV9idWZmZXIgKnNkYiA9IHNjc2lfaW4oc2NwKTsKIAogCWlmICghc2RiLT5sZW5ndGgpCiAJCXJldHVybiAwOwotCWlmICghc2RiLT50YWJsZS5zZ2wpCi0JCXJldHVybiAoRElEX0VSUk9SIDw8IDE2KTsKIAlpZiAoIShzY3NpX2JpZGlfY21uZChzY3ApIHx8IHNjcC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSkKIAkJcmV0dXJuIChESURfRVJST1IgPDwgMTYpOwotCWFjdGl2ZSA9IDE7Ci0JcmVxX2xlbiA9IGFjdF9sZW4gPSAwOwotCWZvcl9lYWNoX3NnKHNkYi0+dGFibGUuc2dsLCBzZywgc2RiLT50YWJsZS5uZW50cywgaykgewotCQlpZiAoYWN0aXZlKSB7Ci0JCQlrYWRkciA9ICh1bnNpZ25lZCBjaGFyICopCi0JCQkJa21hcF9hdG9taWMoc2dfcGFnZShzZyksIEtNX1VTRVIwKTsKLQkJCWlmIChOVUxMID09IGthZGRyKQotCQkJCXJldHVybiAoRElEX0VSUk9SIDw8IDE2KTsKLQkJCWthZGRyX29mZiA9ICh1bnNpZ25lZCBjaGFyICopa2FkZHIgKyBzZy0+b2Zmc2V0OwotCQkJbGVuID0gc2ctPmxlbmd0aDsKLQkJCWlmICgocmVxX2xlbiArIGxlbikgPiBhcnJfbGVuKSB7Ci0JCQkJYWN0aXZlID0gMDsKLQkJCQlsZW4gPSBhcnJfbGVuIC0gcmVxX2xlbjsKLQkJCX0KLQkJCW1lbWNweShrYWRkcl9vZmYsIGFyciArIHJlcV9sZW4sIGxlbik7Ci0JCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQlhY3RfbGVuICs9IGxlbjsKLQkJfQotCQlyZXFfbGVuICs9IHNnLT5sZW5ndGg7Ci0JfQorCisJYWN0X2xlbiA9IHNnX2NvcHlfZnJvbV9idWZmZXIoc2RiLT50YWJsZS5zZ2wsIHNkYi0+dGFibGUubmVudHMsCisJCQkJICAgICAgYXJyLCBhcnJfbGVuKTsKIAlpZiAoc2RiLT5yZXNpZCkKIAkJc2RiLT5yZXNpZCAtPSBhY3RfbGVuOwogCWVsc2UKLQkJc2RiLT5yZXNpZCA9IHJlcV9sZW4gLSBhY3RfbGVuOworCQlzZGItPnJlc2lkID0gc2NzaV9idWZmbGVuKHNjcCkgLSBhY3RfbGVuOworCiAJcmV0dXJuIDA7CiB9CiAKIC8qIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGZldGNoZWQgaW50byAnYXJyJyBvciAtMSBpZiBlcnJvci4gKi8KLXN0YXRpYyBpbnQgZmV0Y2hfdG9fZGV2X2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLCB1bnNpZ25lZCBjaGFyICogYXJyLAotCQkJICAgICAgIGludCBtYXhfYXJyX2xlbikKK3N0YXRpYyBpbnQgZmV0Y2hfdG9fZGV2X2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsIHVuc2lnbmVkIGNoYXIgKmFyciwKKwkJCSAgICAgICBpbnQgYXJyX2xlbikKIHsKLQlpbnQgaywgcmVxX2xlbiwgbGVuLCBmaW47Ci0Jdm9pZCAqIGthZGRyOwotCXZvaWQgKiBrYWRkcl9vZmY7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICogc2c7Ci0KLQlpZiAoMCA9PSBzY3NpX2J1ZmZsZW4oc2NwKSkKKwlpZiAoIXNjc2lfYnVmZmxlbihzY3ApKQogCQlyZXR1cm4gMDsKLQlpZiAoTlVMTCA9PSBzY3NpX3NnbGlzdChzY3ApKQotCQlyZXR1cm4gLTE7CiAJaWYgKCEoc2NzaV9iaWRpX2NtbmQoc2NwKSB8fCBzY3AtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpKQogCQlyZXR1cm4gLTE7Ci0JcmVxX2xlbiA9IGZpbiA9IDA7Ci0Jc2NzaV9mb3JfZWFjaF9zZyhzY3AsIHNnLCBzY3NpX3NnX2NvdW50KHNjcCksIGspIHsKLQkJa2FkZHIgPSAodW5zaWduZWQgY2hhciAqKWttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9VU0VSMCk7Ci0JCWlmIChOVUxMID09IGthZGRyKQotCQkJcmV0dXJuIC0xOwotCQlrYWRkcl9vZmYgPSAodW5zaWduZWQgY2hhciAqKWthZGRyICsgc2ctPm9mZnNldDsKLQkJbGVuID0gc2ctPmxlbmd0aDsKLQkJaWYgKChyZXFfbGVuICsgbGVuKSA+IG1heF9hcnJfbGVuKSB7Ci0JCQlsZW4gPSBtYXhfYXJyX2xlbiAtIHJlcV9sZW47Ci0JCQlmaW4gPSAxOwotCQl9Ci0JCW1lbWNweShhcnIgKyByZXFfbGVuLCBrYWRkcl9vZmYsIGxlbik7Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJaWYgKGZpbikKLQkJCXJldHVybiByZXFfbGVuICsgbGVuOwotCQlyZXFfbGVuICs9IHNnLT5sZW5ndGg7Ci0JfQotCXJldHVybiByZXFfbGVuOworCisJcmV0dXJuIHNjc2lfc2dfY29weV90b19idWZmZXIoc2NwLCBhcnIsIGFycl9sZW4pOwogfQogCiAKQEAgLTExNTksNiArODQ1LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzZWN0b3JfdCBnZXRfc2RlYnVnX2NhcGFjaXR5KHZvaWQpCit7CisJaWYgKHNjc2lfZGVidWdfdmlydHVhbF9nYiA+IDApCisJCXJldHVybiAyMDQ4ICogMTAyNCAqIHNjc2lfZGVidWdfdmlydHVhbF9nYjsKKwllbHNlCisJCXJldHVybiBzZGVidWdfc3RvcmVfc2VjdG9yczsKK30KKwogI2RlZmluZSBTREVCVUdfUkVBRENBUF9BUlJfU1ogOAogc3RhdGljIGludCByZXNwX3JlYWRjYXAoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwKIAkJCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKQEAgLTExNzAsMTEgKzg2NCw3IEBACiAJaWYgKChlcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCAxLCBkZXZpcCkpKQogCQlyZXR1cm4gZXJyc3RzOwogCS8qIGZvbGxvd2luZyBqdXN0IGluIGNhc2UgdmlydHVhbF9nYiBjaGFuZ2VkICovCi0JaWYgKHNjc2lfZGVidWdfdmlydHVhbF9nYiA+IDApIHsKLQkJc2RlYnVnX2NhcGFjaXR5ID0gMjA0OCAqIDEwMjQ7Ci0JCXNkZWJ1Z19jYXBhY2l0eSAqPSBzY3NpX2RlYnVnX3ZpcnR1YWxfZ2I7Ci0JfSBlbHNlCi0JCXNkZWJ1Z19jYXBhY2l0eSA9IHNkZWJ1Z19zdG9yZV9zZWN0b3JzOworCXNkZWJ1Z19jYXBhY2l0eSA9IGdldF9zZGVidWdfY2FwYWNpdHkoKTsKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfUkVBRENBUF9BUlJfU1opOwogCWlmIChzZGVidWdfY2FwYWNpdHkgPCAweGZmZmZmZmZmKSB7CiAJCWNhcGFjID0gKHVuc2lnbmVkIGludClzZGVidWdfY2FwYWNpdHkgLSAxOwpAQCAtMTIwNywxMSArODk3LDcgQEAKIAlhbGxvY19sZW4gPSAoKGNtZFsxMF0gPDwgMjQpICsgKGNtZFsxMV0gPDwgMTYpICsgKGNtZFsxMl0gPDwgOCkKIAkJICAgICArIGNtZFsxM10pOwogCS8qIGZvbGxvd2luZyBqdXN0IGluIGNhc2UgdmlydHVhbF9nYiBjaGFuZ2VkICovCi0JaWYgKHNjc2lfZGVidWdfdmlydHVhbF9nYiA+IDApIHsKLQkJc2RlYnVnX2NhcGFjaXR5ID0gMjA0OCAqIDEwMjQ7Ci0JCXNkZWJ1Z19jYXBhY2l0eSAqPSBzY3NpX2RlYnVnX3ZpcnR1YWxfZ2I7Ci0JfSBlbHNlCi0JCXNkZWJ1Z19jYXBhY2l0eSA9IHNkZWJ1Z19zdG9yZV9zZWN0b3JzOworCXNkZWJ1Z19jYXBhY2l0eSA9IGdldF9zZGVidWdfY2FwYWNpdHkoKTsKIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfUkVBRENBUDE2X0FSUl9TWik7CiAJY2FwYWMgPSBzZGVidWdfY2FwYWNpdHkgLSAxOwogCWZvciAoayA9IDA7IGsgPCA4OyArK2ssIGNhcGFjID4+PSA4KQpAQCAtMTUwNSwxMyArMTE5MSw5IEBACiAJCW9mZnNldCA9IDg7CiAJfQogCWFwID0gYXJyICsgb2Zmc2V0OwotCWlmICgoYmRfbGVuID4gMCkgJiYgKDAgPT0gc2RlYnVnX2NhcGFjaXR5KSkgewotCQlpZiAoc2NzaV9kZWJ1Z192aXJ0dWFsX2diID4gMCkgewotCQkJc2RlYnVnX2NhcGFjaXR5ID0gMjA0OCAqIDEwMjQ7Ci0JCQlzZGVidWdfY2FwYWNpdHkgKj0gc2NzaV9kZWJ1Z192aXJ0dWFsX2diOwotCQl9IGVsc2UKLQkJCXNkZWJ1Z19jYXBhY2l0eSA9IHNkZWJ1Z19zdG9yZV9zZWN0b3JzOwotCX0KKwlpZiAoKGJkX2xlbiA+IDApICYmICghc2RlYnVnX2NhcGFjaXR5KSkKKwkJc2RlYnVnX2NhcGFjaXR5ID0gZ2V0X3NkZWJ1Z19jYXBhY2l0eSgpOworCiAJaWYgKDggPT0gYmRfbGVuKSB7CiAJCWlmIChzZGVidWdfY2FwYWNpdHkgPiAweGZmZmZmZmZlKSB7CiAJCQlhcFswXSA9IDB4ZmY7CkBAIC0xODA4LDI1ICsxNDkwLDUzIEBACiAJCSAgICBtaW4obGVuLCBTREVCVUdfTUFYX0lOUV9BUlJfU1opKTsKIH0KIAotc3RhdGljIGludCByZXNwX3JlYWQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKK3N0YXRpYyBpbnQgY2hlY2tfZGV2aWNlX2FjY2Vzc19wYXJhbXMoc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtKQogewotCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwotCXVuc2lnbmVkIGludCBibG9jaywgZnJvbV9ib3R0b207Ci0JdW5zaWduZWQgbG9uZyBsb25nIHU7Ci0JaW50IHJldDsKLQogCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKLQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsIEFERFJfT1VUX09GX1JBTkdFLAotCQkJCTApOworCQlta19zZW5zZV9idWZmZXIoZGV2aSwgSUxMRUdBTF9SRVFVRVNULCBBRERSX09VVF9PRl9SQU5HRSwgMCk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAkvKiB0cmFuc2ZlciBsZW5ndGggZXhjZXNzaXZlICh0aWUgaW4gdG8gYmxvY2sgbGltaXRzIFZQRCBwYWdlKSAqLwogCWlmIChudW0gPiBzZGVidWdfc3RvcmVfc2VjdG9ycykgewotCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCi0JCQkJMCk7CisJCW1rX3NlbnNlX2J1ZmZlcihkZXZpLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX2RldmljZV9hY2Nlc3Moc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKKwkJCSAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsYmEsIHVuc2lnbmVkIGludCBudW0sIGludCB3cml0ZSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBibG9jaywgcmVzdCA9IDA7CisJaW50ICgqZnVuYykoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CisKKwlmdW5jID0gd3JpdGUgPyBmZXRjaF90b19kZXZfYnVmZmVyIDogZmlsbF9mcm9tX2Rldl9idWZmZXI7CisKKwlibG9jayA9IGRvX2RpdihsYmEsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKKwlpZiAoYmxvY2sgKyBudW0gPiBzZGVidWdfc3RvcmVfc2VjdG9ycykKKwkJcmVzdCA9IGJsb2NrICsgbnVtIC0gc2RlYnVnX3N0b3JlX3NlY3RvcnM7CisKKwlyZXQgPSBmdW5jKHNjbWQsIGZha2Vfc3RvcmVwICsgKGJsb2NrICogU0VDVF9TSVpFKSwKKwkJICAgKG51bSAtIHJlc3QpICogU0VDVF9TSVpFKTsKKwlpZiAoIXJldCAmJiByZXN0KQorCQlyZXQgPSBmdW5jKHNjbWQsIGZha2Vfc3RvcmVwLCByZXN0ICogU0VDVF9TSVpFKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVzcF9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAorCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCWludCByZXQ7CisKKwlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhkZXZpcCwgbGJhLCBudW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoKFNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIgJiBzY3NpX2RlYnVnX29wdHMpICYmCiAJICAgIChsYmEgPD0gT1BUX01FRElVTV9FUlJfQUREUikgJiYKIAkgICAgKChsYmEgKyBudW0pID4gT1BUX01FRElVTV9FUlJfQUREUikpIHsKQEAgLTE4NDUsNzQgKzE1NTUsMzAgQEAKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQogCXJlYWRfbG9ja19pcnFzYXZlKCZhdG9taWNfcncsIGlmbGFncyk7Ci0JaWYgKChsYmEgKyBudW0pIDw9IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKQotCQlyZXQgPSBmaWxsX2Zyb21fZGV2X2J1ZmZlcihTQ3BudCwKLQkJCQkJICAgZmFrZV9zdG9yZXAgKyAobGJhICogU0VDVF9TSVpFKSwKLQkJCSAgIAkJICAgbnVtICogU0VDVF9TSVpFKTsKLQllbHNlIHsKLQkJLyogbW9kdWxvIHdoZW4gb25lIGFyZyBpcyA2NCBiaXRzIG5lZWRzIGRvX2RpdigpICovCi0JCXUgPSBsYmE7Ci0JCWJsb2NrID0gZG9fZGl2KHUsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKLQkJZnJvbV9ib3R0b20gPSAwOwotCQlpZiAoKGJsb2NrICsgbnVtKSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKQotCQkJZnJvbV9ib3R0b20gPSAoYmxvY2sgKyBudW0pIC0gc2RlYnVnX3N0b3JlX3NlY3RvcnM7Ci0JCXJldCA9IGZpbGxfZnJvbV9kZXZfYnVmZmVyKFNDcG50LAotCQkJCQkgICBmYWtlX3N0b3JlcCArIChibG9jayAqIFNFQ1RfU0laRSksCi0JCQkgICAJCSAgIChudW0gLSBmcm9tX2JvdHRvbSkgKiBTRUNUX1NJWkUpOwotCQlpZiAoKDAgPT0gcmV0KSAmJiAoZnJvbV9ib3R0b20gPiAwKSkKLQkJCXJldCA9IGZpbGxfZnJvbV9kZXZfYnVmZmVyKFNDcG50LCBmYWtlX3N0b3JlcCwKLQkJCQkJCSAgIGZyb21fYm90dG9tICogU0VDVF9TSVpFKTsKLQl9CisJcmV0ID0gZG9fZGV2aWNlX2FjY2VzcyhTQ3BudCwgZGV2aXAsIGxiYSwgbnVtLCAwKTsKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKLQkJICAgICAgdW5zaWduZWQgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQorc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAorCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKLQl1bnNpZ25lZCBpbnQgYmxvY2ssIHRvX2JvdHRvbTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdTsKLQlpbnQgcmVzOworCWludCByZXQ7CiAKLQlpZiAobGJhICsgbnVtID4gc2RlYnVnX2NhcGFjaXR5KSB7Ci0JCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCBBRERSX09VVF9PRl9SQU5HRSwKLQkJCSAgICAgICAJMCk7Ci0JCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCX0KLQkvKiB0cmFuc2ZlciBsZW5ndGggZXhjZXNzaXZlICh0aWUgaW4gdG8gYmxvY2sgbGltaXRzIFZQRCBwYWdlKSAqLwotCWlmIChudW0gPiBzZGVidWdfc3RvcmVfc2VjdG9ycykgewotCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCi0JCQkJMCk7Ci0JCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwotCX0KKwlyZXQgPSBjaGVja19kZXZpY2VfYWNjZXNzX3BhcmFtcyhkZXZpcCwgbGJhLCBudW0pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmF0b21pY19ydywgaWZsYWdzKTsKLQlpZiAoKGxiYSArIG51bSkgPD0gc2RlYnVnX3N0b3JlX3NlY3RvcnMpCi0JCXJlcyA9IGZldGNoX3RvX2Rldl9idWZmZXIoU0NwbnQsCi0JCQkJCSAgZmFrZV9zdG9yZXAgKyAobGJhICogU0VDVF9TSVpFKSwKLQkJCSAgIAkJICBudW0gKiBTRUNUX1NJWkUpOwotCWVsc2UgewotCQkvKiBtb2R1bG8gd2hlbiBvbmUgYXJnIGlzIDY0IGJpdHMgbmVlZHMgZG9fZGl2KCkgKi8KLQkJdSA9IGxiYTsKLQkJYmxvY2sgPSBkb19kaXYodSwgc2RlYnVnX3N0b3JlX3NlY3RvcnMpOwotCQl0b19ib3R0b20gPSAwOwotCQlpZiAoKGJsb2NrICsgbnVtKSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKQotCQkJdG9fYm90dG9tID0gKGJsb2NrICsgbnVtKSAtIHNkZWJ1Z19zdG9yZV9zZWN0b3JzOwotCQlyZXMgPSBmZXRjaF90b19kZXZfYnVmZmVyKFNDcG50LAotCQkJCQkgIGZha2Vfc3RvcmVwICsgKGJsb2NrICogU0VDVF9TSVpFKSwKLQkJCSAgIAkJICAobnVtIC0gdG9fYm90dG9tKSAqIFNFQ1RfU0laRSk7Ci0JCWlmICgoMCA9PSByZXMpICYmICh0b19ib3R0b20gPiAwKSkKLQkJCXJlcyA9IGZldGNoX3RvX2Rldl9idWZmZXIoU0NwbnQsIGZha2Vfc3RvcmVwLAotCQkJCQkJICB0b19ib3R0b20gKiBTRUNUX1NJWkUpOwotCX0KKwlyZXQgPSBkb19kZXZpY2VfYWNjZXNzKFNDcG50LCBkZXZpcCwgbGJhLCBudW0sIDEpOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7Ci0JaWYgKC0xID09IHJlcykKKwlpZiAoLTEgPT0gcmV0KQogCQlyZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7Ci0JZWxzZSBpZiAoKHJlcyA8IChudW0gKiBTRUNUX1NJWkUpKSAmJgorCWVsc2UgaWYgKChyZXQgPCAobnVtICogU0VDVF9TSVpFKSkgJiYKIAkJIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpCiAJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IHdyaXRlOiBjZGIgaW5kaWNhdGVkPSV1LCAiCi0JCSAgICAgICAiIElPIHNlbnQ9JWQgYnl0ZXNcbiIsIG51bSAqIFNFQ1RfU0laRSwgcmVzKTsKKwkJICAgICAgICIgSU8gc2VudD0lZCBieXRlc1xuIiwgbnVtICogU0VDVF9TSVpFLCByZXQpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTg3LDE2ICsxNjUzLDcgQEAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIHJldDsKIAotCW9mZnNldCA9IDA7Ci0Jc2NzaV9mb3JfZWFjaF9zZyhzY3AsIHNnLCBzY3NpX3NnX2NvdW50KHNjcCksIGkpIHsKLQkJa2FkZHIgPSAodW5zaWduZWQgY2hhciAqKWttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9VU0VSMCk7Ci0JCWlmICgha2FkZHIpCi0JCQlnb3RvIG91dDsKLQotCQltZW1jcHkoYnVmICsgb2Zmc2V0LCBrYWRkciArIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgpOwotCQlvZmZzZXQgKz0gc2ctPmxlbmd0aDsKLQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCX0KKwlzY3NpX3NnX2NvcHlfdG9fYnVmZmVyKHNjcCwgYnVmLCBzY3NpX2J1ZmZsZW4oc2NwKSk7CiAKIAlvZmZzZXQgPSAwOwogCWZvcl9lYWNoX3NnKHNkYi0+dGFibGUuc2dsLCBzZywgc2RiLT50YWJsZS5uZW50cywgaSkgewpAQCAtMjA0NSw3ICsxNzAyLDczIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWVkX2Fycl9sb2NrLCBpZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHNjc2lfZGVidWdfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICogc2RwKQorCitzdGF0aWMgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqCitzZGVidWdfZGV2aWNlX2NyZWF0ZShzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqc2RiZ19ob3N0LCBnZnBfdCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcDsKKworCWRldmlwID0ga3phbGxvYyhzaXplb2YoKmRldmlwKSwgZmxhZ3MpOworCWlmIChkZXZpcCkgeworCQlkZXZpcC0+c2RiZ19ob3N0ID0gc2RiZ19ob3N0OworCQlsaXN0X2FkZF90YWlsKCZkZXZpcC0+ZGV2X2xpc3QsICZzZGJnX2hvc3QtPmRldl9pbmZvX2xpc3QpOworCX0KKwlyZXR1cm4gZGV2aXA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2SW5mb1JlZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2KQoreworCXN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICogc2RiZ19ob3N0OworCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBvcGVuX2RldmlwID0gTlVMTDsKKwlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXAgPQorCQkJKHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKilzZGV2LT5ob3N0ZGF0YTsKKworCWlmIChkZXZpcCkKKwkJcmV0dXJuIGRldmlwOworCXNkYmdfaG9zdCA9ICooc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKiopc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKKwlpZiAoIXNkYmdfaG9zdCkgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiSG9zdCBpbmZvIE5VTExcbiIpOworCQlyZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aXAsICZzZGJnX2hvc3QtPmRldl9pbmZvX2xpc3QsIGRldl9saXN0KSB7CisJCWlmICgoZGV2aXAtPnVzZWQpICYmIChkZXZpcC0+Y2hhbm5lbCA9PSBzZGV2LT5jaGFubmVsKSAmJgorICAgICAgICAgICAgICAgICAgICAoZGV2aXAtPnRhcmdldCA9PSBzZGV2LT5pZCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKGRldmlwLT5sdW4gPT0gc2Rldi0+bHVuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXZpcDsKKwkJZWxzZSB7CisJCQlpZiAoKCFkZXZpcC0+dXNlZCkgJiYgKCFvcGVuX2RldmlwKSkKKwkJCQlvcGVuX2RldmlwID0gZGV2aXA7CisJCX0KKwl9CisJaWYgKCFvcGVuX2RldmlwKSB7IC8qIHRyeSBhbmQgbWFrZSBhIG5ldyBvbmUgKi8KKwkJb3Blbl9kZXZpcCA9IHNkZWJ1Z19kZXZpY2VfY3JlYXRlKHNkYmdfaG9zdCwgR0ZQX0FUT01JQyk7CisJCWlmICghb3Blbl9kZXZpcCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIG1lbW9yeSBhdCBsaW5lICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlvcGVuX2RldmlwLT5jaGFubmVsID0gc2Rldi0+Y2hhbm5lbDsKKwlvcGVuX2RldmlwLT50YXJnZXQgPSBzZGV2LT5pZDsKKwlvcGVuX2RldmlwLT5sdW4gPSBzZGV2LT5sdW47CisJb3Blbl9kZXZpcC0+c2RiZ19ob3N0ID0gc2RiZ19ob3N0OworCW9wZW5fZGV2aXAtPnJlc2V0ID0gMTsKKwlvcGVuX2RldmlwLT51c2VkID0gMTsKKwltZW1zZXQob3Blbl9kZXZpcC0+c2Vuc2VfYnVmZiwgMCwgU0RFQlVHX1NFTlNFX0xFTik7CisJaWYgKHNjc2lfZGVidWdfZHNlbnNlKQorCQlvcGVuX2RldmlwLT5zZW5zZV9idWZmWzBdID0gMHg3MjsKKwllbHNlIHsKKwkJb3Blbl9kZXZpcC0+c2Vuc2VfYnVmZlswXSA9IDB4NzA7CisJCW9wZW5fZGV2aXAtPnNlbnNlX2J1ZmZbN10gPSAweGE7CisJfQorCWlmIChzZGV2LT5sdW4gPT0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TKQorCQlvcGVuX2RldmlwLT53bHVuID0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TICYgMHhmZjsKKworCXJldHVybiBvcGVuX2RldmlwOworfQorCitzdGF0aWMgaW50IHNjc2lfZGVidWdfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCiB7CiAJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQogCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBzbGF2ZV9hbGxvYyA8JXUgJXUgJXUgJXU+XG4iLApAQCAtMjA1NCw5ICsxNzc3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY3NpX2RlYnVnX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZHApCitzdGF0aWMgaW50IHNjc2lfZGVidWdfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKQogewotCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcDsKKwlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcDsKIAogCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKIAkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1Zzogc2xhdmVfY29uZmlndXJlIDwldSAldSAldSAldT5cbiIsCkBAIC0yMDc0LDEwICsxNzk3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNjc2lfZGVidWdfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZHApCitzdGF0aWMgdm9pZCBzY3NpX2RlYnVnX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCiB7Ci0Jc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwID0KLQkJCQkoc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKXNkcC0+aG9zdGRhdGE7CisJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXAgPQorCQkoc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKXNkcC0+aG9zdGRhdGE7CiAKIAlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCiAJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IHNsYXZlX2Rlc3Ryb3kgPCV1ICV1ICV1ICV1PlxuIiwKQEAgLTIwODksODQgKzE4MTIsNDQgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2SW5mb1JlZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2KQorLyogUmV0dXJucyAxIGlmIGZvdW5kICdjbW5kJyBhbmQgZGVsZXRlZCBpdHMgdGltZXIuIGVsc2UgcmV0dXJucyAwICovCitzdGF0aWMgaW50IHN0b3BfcXVldWVkX2NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKIHsKLQlzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqIHNkYmdfaG9zdDsKLQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogb3Blbl9kZXZpcCA9IE5VTEw7Ci0Jc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwID0KLQkJCShzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICopc2Rldi0+aG9zdGRhdGE7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisJaW50IGs7CisJc3RydWN0IHNkZWJ1Z19xdWV1ZWRfY21kICpzcWNwOwogCi0JaWYgKGRldmlwKQotCQlyZXR1cm4gZGV2aXA7Ci0Jc2RiZ19ob3N0ID0gKihzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqKikgc2Rldi0+aG9zdC0+aG9zdGRhdGE7Ci0gICAgICAgIGlmKCEgc2RiZ19ob3N0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJIb3N0IGluZm8gTlVMTFxuIik7Ci0JCXJldHVybiBOVUxMOwotICAgICAgICB9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpcCwgJnNkYmdfaG9zdC0+ZGV2X2luZm9fbGlzdCwgZGV2X2xpc3QpIHsKLQkJaWYgKChkZXZpcC0+dXNlZCkgJiYgKGRldmlwLT5jaGFubmVsID09IHNkZXYtPmNoYW5uZWwpICYmCi0gICAgICAgICAgICAgICAgICAgIChkZXZpcC0+dGFyZ2V0ID09IHNkZXYtPmlkKSAmJgotICAgICAgICAgICAgICAgICAgICAoZGV2aXAtPmx1biA9PSBzZGV2LT5sdW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmlwOwotCQllbHNlIHsKLQkJCWlmICgoIWRldmlwLT51c2VkKSAmJiAoIW9wZW5fZGV2aXApKQotCQkJCW9wZW5fZGV2aXAgPSBkZXZpcDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWVkX2Fycl9sb2NrLCBpZmxhZ3MpOworCWZvciAoayA9IDA7IGsgPCBTQ1NJX0RFQlVHX0NBTlFVRVVFOyArK2spIHsKKwkJc3FjcCA9ICZxdWV1ZWRfYXJyW2tdOworCQlpZiAoc3FjcC0+aW5fdXNlICYmIChjbW5kID09IHNxY3AtPmFfY21uZCkpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZzcWNwLT5jbW5kX3RpbWVyKTsKKwkJCXNxY3AtPmluX3VzZSA9IDA7CisJCQlzcWNwLT5hX2NtbmQgPSBOVUxMOworCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKE5VTEwgPT0gb3Blbl9kZXZpcCkgeyAvKiB0cnkgYW5kIG1ha2UgYSBuZXcgb25lICovCi0JCW9wZW5fZGV2aXAgPSBremFsbG9jKHNpemVvZigqb3Blbl9kZXZpcCksR0ZQX0FUT01JQyk7Ci0JCWlmIChOVUxMID09IG9wZW5fZGV2aXApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBtZW1vcnkgYXQgbGluZSAlZFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCW9wZW5fZGV2aXAtPnNkYmdfaG9zdCA9IHNkYmdfaG9zdDsKLQkJbGlzdF9hZGRfdGFpbCgmb3Blbl9kZXZpcC0+ZGV2X2xpc3QsCi0JCSZzZGJnX2hvc3QtPmRldl9pbmZvX2xpc3QpOwotCX0KLSAgICAgICAgaWYgKG9wZW5fZGV2aXApIHsKLQkJb3Blbl9kZXZpcC0+Y2hhbm5lbCA9IHNkZXYtPmNoYW5uZWw7Ci0JCW9wZW5fZGV2aXAtPnRhcmdldCA9IHNkZXYtPmlkOwotCQlvcGVuX2RldmlwLT5sdW4gPSBzZGV2LT5sdW47Ci0JCW9wZW5fZGV2aXAtPnNkYmdfaG9zdCA9IHNkYmdfaG9zdDsKLQkJb3Blbl9kZXZpcC0+cmVzZXQgPSAxOwotCQlvcGVuX2RldmlwLT51c2VkID0gMTsKLQkJbWVtc2V0KG9wZW5fZGV2aXAtPnNlbnNlX2J1ZmYsIDAsIFNERUJVR19TRU5TRV9MRU4pOwotCQlpZiAoc2NzaV9kZWJ1Z19kc2Vuc2UpCi0JCQlvcGVuX2RldmlwLT5zZW5zZV9idWZmWzBdID0gMHg3MjsKLQkJZWxzZSB7Ci0JCQlvcGVuX2RldmlwLT5zZW5zZV9idWZmWzBdID0gMHg3MDsKLQkJCW9wZW5fZGV2aXAtPnNlbnNlX2J1ZmZbN10gPSAweGE7Ci0JCX0KLQkJaWYgKHNkZXYtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpCi0JCQlvcGVuX2RldmlwLT53bHVuID0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TICYgMHhmZjsKLQkJcmV0dXJuIG9wZW5fZGV2aXA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWVkX2Fycl9sb2NrLCBpZmxhZ3MpOworCXJldHVybiAoayA8IFNDU0lfREVCVUdfQ0FOUVVFVUUpID8gMSA6IDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1rX3NlbnNlX2J1ZmZlcihzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXAsIGludCBrZXksCi0JCQkgICAgaW50IGFzYywgaW50IGFzcSkKKy8qIERlbGV0ZXMgKHN0b3BzKSB0aW1lcnMgb2YgYWxsIHF1ZXVlZCBjb21tYW5kcyAqLworc3RhdGljIHZvaWQgc3RvcF9hbGxfcXVldWVkKHZvaWQpCiB7Ci0JdW5zaWduZWQgY2hhciAqIHNidWZmOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCWludCBrOworCXN0cnVjdCBzZGVidWdfcXVldWVkX2NtZCAqc3FjcDsKIAotCXNidWZmID0gZGV2aXAtPnNlbnNlX2J1ZmY7Ci0JbWVtc2V0KHNidWZmLCAwLCBTREVCVUdfU0VOU0VfTEVOKTsKLQlpZiAoc2NzaV9kZWJ1Z19kc2Vuc2UpIHsKLQkJc2J1ZmZbMF0gPSAweDcyOyAgLyogZGVzY3JpcHRvciwgY3VycmVudCAqLwotCQlzYnVmZlsxXSA9IGtleTsKLQkJc2J1ZmZbMl0gPSBhc2M7Ci0JCXNidWZmWzNdID0gYXNxOwotCX0gZWxzZSB7Ci0JCXNidWZmWzBdID0gMHg3MDsgIC8qIGZpeGVkLCBjdXJyZW50ICovCi0JCXNidWZmWzJdID0ga2V5OwotCQlzYnVmZls3XSA9IDB4YTsJICAvKiBpbXBsaWVzIDE4IGJ5dGUgc2Vuc2UgYnVmZmVyICovCi0JCXNidWZmWzEyXSA9IGFzYzsKLQkJc2J1ZmZbMTNdID0gYXNxOworCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZWRfYXJyX2xvY2ssIGlmbGFncyk7CisJZm9yIChrID0gMDsgayA8IFNDU0lfREVCVUdfQ0FOUVVFVUU7ICsraykgeworCQlzcWNwID0gJnF1ZXVlZF9hcnJba107CisJCWlmIChzcWNwLT5pbl91c2UgJiYgc3FjcC0+YV9jbW5kKSB7CisJCQlkZWxfdGltZXJfc3luYygmc3FjcC0+Y21uZF90aW1lcik7CisJCQlzcWNwLT5pbl91c2UgPSAwOworCQkJc3FjcC0+YV9jbW5kID0gTlVMTDsKKwkJfQogCX0KLQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCi0JCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6ICAgIFtzZW5zZV9rZXksYXNjLGFzY3FdOiAiCi0JCSAgICAgICJbMHgleCwweCV4LDB4JXhdXG4iLCBrZXksIGFzYywgYXNxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZWRfYXJyX2xvY2ssIGlmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQpCkBAIC0yMjI2LDcgKzE5MDksNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBidXNfcmVzZXRcbiIpOwogCSsrbnVtX2J1c19yZXNldHM7CiAJaWYgKFNDcG50ICYmICgoc2RwID0gU0NwbnQtPmRldmljZSkpICYmICgoaHAgPSBzZHAtPmhvc3QpKSkgewotCQlzZGJnX2hvc3QgPSAqKHN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICoqKSBocC0+aG9zdGRhdGE7CisJCXNkYmdfaG9zdCA9ICooc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKiopc2hvc3RfcHJpdihocCk7CiAJCWlmIChzZGJnX2hvc3QpIHsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZGJnX2hvc3QtPmRldl9pbmZvX2xpc3QsCkBAIC0yMjU2LDQ2ICsxOTM5LDYgQEAKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIAotLyogUmV0dXJucyAxIGlmIGZvdW5kICdjbW5kJyBhbmQgZGVsZXRlZCBpdHMgdGltZXIuIGVsc2UgcmV0dXJucyAwICovCi1zdGF0aWMgaW50IHN0b3BfcXVldWVkX2NtbmQoc3RydWN0IHNjc2lfY21uZCAqIGNtbmQpCi17Ci0JdW5zaWduZWQgbG9uZyBpZmxhZ3M7Ci0JaW50IGs7Ci0Jc3RydWN0IHNkZWJ1Z19xdWV1ZWRfY21kICogc3FjcDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZWRfYXJyX2xvY2ssIGlmbGFncyk7Ci0JZm9yIChrID0gMDsgayA8IFNDU0lfREVCVUdfQ0FOUVVFVUU7ICsraykgewotCQlzcWNwID0gJnF1ZXVlZF9hcnJba107Ci0JCWlmIChzcWNwLT5pbl91c2UgJiYgKGNtbmQgPT0gc3FjcC0+YV9jbW5kKSkgewotCQkJZGVsX3RpbWVyX3N5bmMoJnNxY3AtPmNtbmRfdGltZXIpOwotCQkJc3FjcC0+aW5fdXNlID0gMDsKLQkJCXNxY3AtPmFfY21uZCA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZWRfYXJyX2xvY2ssIGlmbGFncyk7Ci0JcmV0dXJuIChrIDwgU0NTSV9ERUJVR19DQU5RVUVVRSkgPyAxIDogMDsKLX0KLQotLyogRGVsZXRlcyAoc3RvcHMpIHRpbWVycyBvZiBhbGwgcXVldWVkIGNvbW1hbmRzICovCi1zdGF0aWMgdm9pZCBzdG9wX2FsbF9xdWV1ZWQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlmbGFnczsKLQlpbnQgazsKLQlzdHJ1Y3Qgc2RlYnVnX3F1ZXVlZF9jbWQgKiBzcWNwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlZF9hcnJfbG9jaywgaWZsYWdzKTsKLQlmb3IgKGsgPSAwOyBrIDwgU0NTSV9ERUJVR19DQU5RVUVVRTsgKytrKSB7Ci0JCXNxY3AgPSAmcXVldWVkX2FycltrXTsKLQkJaWYgKHNxY3AtPmluX3VzZSAmJiBzcWNwLT5hX2NtbmQpIHsKLQkJCWRlbF90aW1lcl9zeW5jKCZzcWNwLT5jbW5kX3RpbWVyKTsKLQkJCXNxY3AtPmluX3VzZSA9IDA7Ci0JCQlzcWNwLT5hX2NtbmQgPSBOVUxMOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlZF9hcnJfbG9jaywgaWZsYWdzKTsKLX0KLQogLyogSW5pdGlhbGl6ZXMgdGltZXJzIGluIHF1ZXVlZCBhcnJheSAqLwogc3RhdGljIHZvaWQgX19pbml0IGluaXRfYWxsX3F1ZXVlZCh2b2lkKQogewpAQCAtMjMxMyw3ICsxOTU2LDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZWRfYXJyX2xvY2ssIGlmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZGVidWdfYnVpbGRfcGFydHModW5zaWduZWQgY2hhciAqIHJhbXApCitzdGF0aWMgdm9pZCBfX2luaXQgc2RlYnVnX2J1aWxkX3BhcnRzKHVuc2lnbmVkIGNoYXIgKnJhbXAsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdG9yZV9zaXplKQogewogCXN0cnVjdCBwYXJ0aXRpb24gKiBwcDsKIAlpbnQgc3RhcnRzW1NERUJVR19NQVhfUEFSVFMgKyAyXTsKQEAgLTIzMjEsNyArMTk2NSw3IEBACiAJaW50IGhlYWRzX2J5X3NlY3RzLCBzdGFydF9zZWMsIGVuZF9zZWM7CiAKIAkvKiBhc3N1bWUgcGFydGl0aW9uIHRhYmxlIGFscmVhZHkgemVyb2VkICovCi0JaWYgKChzY3NpX2RlYnVnX251bV9wYXJ0cyA8IDEpIHx8IChzZGVidWdfc3RvcmVfc2l6ZSA8IDEwNDg1NzYpKQorCWlmICgoc2NzaV9kZWJ1Z19udW1fcGFydHMgPCAxKSB8fCAoc3RvcmVfc2l6ZSA8IDEwNDg1NzYpKQogCQlyZXR1cm47CiAJaWYgKHNjc2lfZGVidWdfbnVtX3BhcnRzID4gU0RFQlVHX01BWF9QQVJUUykgewogCQlzY3NpX2RlYnVnX251bV9wYXJ0cyA9IFNERUJVR19NQVhfUEFSVFM7CkBAIC0yNDE5LDcgKzIwNjMsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiB9Ci0KIC8qIE5vdGU6IFRoZSBmb2xsb3dpbmcgbWFjcm9zIGNyZWF0ZSBhdHRyaWJ1dGUgZmlsZXMgaW4gdGhlCiAgICAvc3lzL21vZHVsZS9zY3NpX2RlYnVnL3BhcmFtZXRlcnMgZGlyZWN0b3J5LiBVbmZvcnR1bmF0ZWx5IHRoaXMKICAgIGRyaXZlciBpcyB1bmF3YXJlIG9mIGEgY2hhbmdlIGFuZCBjYW5ub3QgdHJpZ2dlciBhdXhpbGlhcnkgYWN0aW9ucwpAQCAtMjczNiwxMSArMjM3OSw5IEBACiAKIAlpZiAoKGNvdW50ID4gMCkgJiYgKDEgPT0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm4pKSAmJiAobiA+PSAwKSkgewogCQlzY3NpX2RlYnVnX3ZpcnR1YWxfZ2IgPSBuOwotCQlpZiAoc2NzaV9kZWJ1Z192aXJ0dWFsX2diID4gMCkgewotCQkJc2RlYnVnX2NhcGFjaXR5ID0gMjA0OCAqIDEwMjQ7Ci0JCQlzZGVidWdfY2FwYWNpdHkgKj0gc2NzaV9kZWJ1Z192aXJ0dWFsX2diOwotCQl9IGVsc2UKLQkJCXNkZWJ1Z19jYXBhY2l0eSA9IHNkZWJ1Z19zdG9yZV9zZWN0b3JzOworCisJCXNkZWJ1Z19jYXBhY2l0eSA9IGdldF9zZGVidWdfY2FwYWNpdHkoKTsKKwogCQlyZXR1cm4gY291bnQ7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMjc1NiwyMSArMjM5NywxMCBAQAogc3RhdGljIHNzaXplX3Qgc2RlYnVnX2FkZF9ob3N0X3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZGRwLAogCQkJCSAgICAgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KQogewotICAgICAgICBpbnQgZGVsdGFfaG9zdHM7Ci0JY2hhciB3b3JrWzIwXTsKKwlpbnQgZGVsdGFfaG9zdHM7CiAKLSAgICAgICAgaWYgKDEgIT0gc3NjYW5mKGJ1ZiwgIiUxMHMiLCB3b3JrKSkKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmRlbHRhX2hvc3RzKSAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl7CS8qIHRlbXBvcmFyeSBoYWNrIGFyb3VuZCBzc2NhbmYoKSBwcm9ibGVtIHdpdGggLXZlIG51bXMgKi8KLQkJaW50IG5lZyA9IDA7Ci0KLQkJaWYgKCctJyA9PSAqd29yaykKLQkJCW5lZyA9IDE7Ci0JCWlmICgxICE9IHNzY2FuZih3b3JrICsgbmVnLCAiJWQiLCAmZGVsdGFfaG9zdHMpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChuZWcpCi0JCQlkZWx0YV9ob3N0cyA9IC1kZWx0YV9ob3N0czsKLQl9CiAJaWYgKGRlbHRhX2hvc3RzID4gMCkgewogCQlkbyB7CiAJCQlzZGVidWdfYWRkX2FkYXB0ZXIoKTsKQEAgLTI3ODIsNyArMjQxMiw3IEBACiAJfQogCXJldHVybiBjb3VudDsKIH0KLURSSVZFUl9BVFRSKGFkZF9ob3N0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2RlYnVnX2FkZF9ob3N0X3Nob3csIAorRFJJVkVSX0FUVFIoYWRkX2hvc3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzZGVidWdfYWRkX2hvc3Rfc2hvdywKIAkgICAgc2RlYnVnX2FkZF9ob3N0X3N0b3JlKTsKIAogc3RhdGljIHNzaXplX3Qgc2RlYnVnX3ZwZF91c2VfaG9zdG5vX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKiBkZHAsCkBAIC0yODUxLDIyICsyNDgxLDI5IEBACiAJZHJpdmVyX3JlbW92ZV9maWxlKCZzZGVidWdfZHJpdmVyZnNfZHJpdmVyLCAmZHJpdmVyX2F0dHJfYWRkX2hvc3QpOwogfQogCitzdGF0aWMgdm9pZCBwc2V1ZG9fMF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCisJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IHBzZXVkb18wX3JlbGVhc2UoKSBjYWxsZWRcbiIpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSBwc2V1ZG9fcHJpbWFyeSA9IHsKKwkuYnVzX2lkCQk9ICJwc2V1ZG9fMCIsCisJLnJlbGVhc2UJPSBwc2V1ZG9fMF9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgc2NzaV9kZWJ1Z19pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHN6OworCXVuc2lnbmVkIGxvbmcgc3o7CiAJaW50IGhvc3RfdG9fYWRkOwogCWludCBrOwogCWludCByZXQ7CiAKIAlpZiAoc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiA8IDEpCiAJCXNjc2lfZGVidWdfZGV2X3NpemVfbWIgPSAxOyAgLyogZm9yY2UgbWluaW11bSAxIE1CIHJhbWRpc2sgKi8KLQlzZGVidWdfc3RvcmVfc2l6ZSA9ICh1bnNpZ25lZCBpbnQpc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiAqIDEwNDg1NzY7Ci0Jc2RlYnVnX3N0b3JlX3NlY3RvcnMgPSBzZGVidWdfc3RvcmVfc2l6ZSAvIFNFQ1RfU0laRTsKLQlpZiAoc2NzaV9kZWJ1Z192aXJ0dWFsX2diID4gMCkgewotCQlzZGVidWdfY2FwYWNpdHkgPSAyMDQ4ICogMTAyNDsKLQkJc2RlYnVnX2NhcGFjaXR5ICo9IHNjc2lfZGVidWdfdmlydHVhbF9nYjsKLQl9IGVsc2UKLQkJc2RlYnVnX2NhcGFjaXR5ID0gc2RlYnVnX3N0b3JlX3NlY3RvcnM7CisJc3ogPSAodW5zaWduZWQgbG9uZylzY3NpX2RlYnVnX2Rldl9zaXplX21iICogMTA0ODU3NjsKKwlzZGVidWdfc3RvcmVfc2VjdG9ycyA9IHN6IC8gU0VDVF9TSVpFOworCXNkZWJ1Z19jYXBhY2l0eSA9IGdldF9zZGVidWdfY2FwYWNpdHkoKTsKIAogCS8qIHBsYXkgYXJvdW5kIHdpdGggZ2VvbWV0cnksIGRvbid0IHdhc3RlIHRvbyBtdWNoIG9uIHRyYWNrIDAgKi8KIAlzZGVidWdfaGVhZHMgPSA4OwpAQCAtMjg4NSw3ICsyNTIyLDYgQEAKIAkJCSAgICAgICAoc2RlYnVnX3NlY3RvcnNfcGVyICogc2RlYnVnX2hlYWRzKTsKIAl9CiAKLQlzeiA9IHNkZWJ1Z19zdG9yZV9zaXplOwogCWZha2Vfc3RvcmVwID0gdm1hbGxvYyhzeik7CiAJaWYgKE5VTEwgPT0gZmFrZV9zdG9yZXApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IG91dCBvZiBtZW1vcnksIDFcbiIpOwpAQCAtMjg5Myw3ICsyNTI5LDcgQEAKIAl9CiAJbWVtc2V0KGZha2Vfc3RvcmVwLCAwLCBzeik7CiAJaWYgKHNjc2lfZGVidWdfbnVtX3BhcnRzID4gMCkKLQkJc2RlYnVnX2J1aWxkX3BhcnRzKGZha2Vfc3RvcmVwKTsKKwkJc2RlYnVnX2J1aWxkX3BhcnRzKGZha2Vfc3RvcmVwLCBzeik7CiAKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnBzZXVkb19wcmltYXJ5KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMjkyMiw4ICsyNTU4LDYgQEAKIAogCWluaXRfYWxsX3F1ZXVlZCgpOwogCi0Jc2RlYnVnX2RyaXZlcl90ZW1wbGF0ZS5wcm9jX25hbWUgPSBzZGVidWdfcHJvY19uYW1lOwotCiAJaG9zdF90b19hZGQgPSBzY3NpX2RlYnVnX2FkZF9ob3N0OwogICAgICAgICBzY3NpX2RlYnVnX2FkZF9ob3N0ID0gMDsKIApAQCAtMjk3MiwzMCArMjYwNiw2IEBACiBkZXZpY2VfaW5pdGNhbGwoc2NzaV9kZWJ1Z19pbml0KTsKIG1vZHVsZV9leGl0KHNjc2lfZGVidWdfZXhpdCk7CiAKLXN0YXRpYyB2b2lkIHBzZXVkb18wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqIGRldikKLXsKLQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCi0JCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IHBzZXVkb18wX3JlbGVhc2UoKSBjYWxsZWRcbiIpOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZSBwc2V1ZG9fcHJpbWFyeSA9IHsKLQkuYnVzX2lkCQk9ICJwc2V1ZG9fMCIsCi0JLnJlbGVhc2UJPSBwc2V1ZG9fMF9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBwc2V1ZG9fbGxkX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXZfZHJpdmVyKQotewotICAgICAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBidXNfdHlwZSBwc2V1ZG9fbGxkX2J1cyA9IHsKLSAgICAgICAgLm5hbWUgPSAicHNldWRvIiwKLSAgICAgICAgLm1hdGNoID0gcHNldWRvX2xsZF9idXNfbWF0Y2gsCi0JLnByb2JlID0gc2RlYnVnX2RyaXZlcl9wcm9iZSwKLQkucmVtb3ZlID0gc2RlYnVnX2RyaXZlcl9yZW1vdmUsCi19OwotCiBzdGF0aWMgdm9pZCBzZGVidWdfcmVsZWFzZV9hZGFwdGVyKHN0cnVjdCBkZXZpY2UgKiBkZXYpCiB7CiAgICAgICAgIHN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGJnX2hvc3Q7CkBAIC0zMDA5LDggKzI2MTksNyBAQAogCWludCBrLCBkZXZzX3Blcl9ob3N0OwogICAgICAgICBpbnQgZXJyb3IgPSAwOwogICAgICAgICBzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqc2RiZ19ob3N0OwotICAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpzZGJnX2RldmluZm87Ci0gICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxoLCAqbGhfc2Y7CisJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqc2RiZ19kZXZpbmZvLCAqdG1wOwogCiAgICAgICAgIHNkYmdfaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKCpzZGJnX2hvc3QpLEdGUF9LRVJORUwpOwogICAgICAgICBpZiAoTlVMTCA9PSBzZGJnX2hvc3QpIHsKQEAgLTMwMjMsMTYgKzI2MzIsMTMgQEAKIAogCWRldnNfcGVyX2hvc3QgPSBzY3NpX2RlYnVnX251bV90Z3RzICogc2NzaV9kZWJ1Z19tYXhfbHVuczsKICAgICAgICAgZm9yIChrID0gMDsgayA8IGRldnNfcGVyX2hvc3Q7IGsrKykgewotICAgICAgICAgICAgICAgIHNkYmdfZGV2aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCpzZGJnX2RldmluZm8pLEdGUF9LRVJORUwpOwotICAgICAgICAgICAgICAgIGlmIChOVUxMID09IHNkYmdfZGV2aW5mbykgeworCQlzZGJnX2RldmluZm8gPSBzZGVidWdfZGV2aWNlX2NyZWF0ZShzZGJnX2hvc3QsIEdGUF9LRVJORUwpOworCQlpZiAoIXNkYmdfZGV2aW5mbykgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIG1lbW9yeSBhdCBsaW5lICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAtRU5PTUVNOwogCQkJZ290byBjbGVhbjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2RiZ19kZXZpbmZvLT5zZGJnX2hvc3QgPSBzZGJnX2hvc3Q7Ci0gICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmc2RiZ19kZXZpbmZvLT5kZXZfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZGJnX2hvc3QtPmRldl9pbmZvX2xpc3QpOwogICAgICAgICB9CiAKICAgICAgICAgc3Bpbl9sb2NrKCZzZGVidWdfaG9zdF9saXN0X2xvY2spOwpAQCAtMzA1Myw5ICsyNjU5LDggQEAKICAgICAgICAgcmV0dXJuIGVycm9yOwogCiBjbGVhbjoKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobGgsIGxoX3NmLCAmc2RiZ19ob3N0LT5kZXZfaW5mb19saXN0KSB7Ci0JCXNkYmdfZGV2aW5mbyA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8sCi0JCQkJCSAgZGV2X2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZGJnX2RldmluZm8sIHRtcCwgJnNkYmdfaG9zdC0+ZGV2X2luZm9fbGlzdCwKKwkJCQkgZGV2X2xpc3QpIHsKIAkJbGlzdF9kZWwoJnNkYmdfZGV2aW5mby0+ZGV2X2xpc3QpOwogCQlrZnJlZShzZGJnX2RldmluZm8pOwogCX0KQEAgLTMwODMsNiArMjY4OCwyNjMgQEAKICAgICAgICAgLS1zY3NpX2RlYnVnX2FkZF9ob3N0OwogfQogCitzdGF0aWMKK2ludCBzY3NpX2RlYnVnX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwgZG9uZV9mdW5jdF90IGRvbmUpCit7CisJdW5zaWduZWQgY2hhciAqY21kID0gKHVuc2lnbmVkIGNoYXIgKikgU0NwbnQtPmNtbmQ7CisJaW50IGxlbiwgazsKKwl1bnNpZ25lZCBpbnQgbnVtOworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYmE7CisJaW50IGVycnN0cyA9IDA7CisJaW50IHRhcmdldCA9IFNDcG50LT5kZXZpY2UtPmlkOworCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwID0gTlVMTDsKKwlpbnQgaW5qX3JlY292ZXJlZCA9IDA7CisJaW50IGlual90cmFuc3BvcnQgPSAwOworCWludCBkZWxheV9vdmVycmlkZSA9IDA7CisKKwlzY3NpX3NldF9yZXNpZChTQ3BudCwgMCk7CisJaWYgKChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykgJiYgY21kKSB7CisJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IGNtZCAiKTsKKwkJZm9yIChrID0gMCwgbGVuID0gU0NwbnQtPmNtZF9sZW47IGsgPCBsZW47ICsraykKKwkJCXByaW50aygiJTAyeCAiLCAoaW50KWNtZFtrXSk7CisJCXByaW50aygiXG4iKTsKKwl9CisKKwlpZiAodGFyZ2V0ID09IFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3R0LT50aGlzX2lkKSB7CisJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IGluaXRpYXRvcidzIGlkIHVzZWQgYXMgIgorCQkgICAgICAgInRhcmdldCFcbiIpOworCQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgTlVMTCwgZG9uZSwKKwkJCQkgICAgIERJRF9OT19DT05ORUNUIDw8IDE2LCAwKTsKKwl9CisKKwlpZiAoKFNDcG50LT5kZXZpY2UtPmx1biA+PSBzY3NpX2RlYnVnX21heF9sdW5zKSAmJgorCSAgICAoU0NwbnQtPmRldmljZS0+bHVuICE9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUykpCisJCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBOVUxMLCBkb25lLAorCQkJCSAgICAgRElEX05PX0NPTk5FQ1QgPDwgMTYsIDApOworCWRldmlwID0gZGV2SW5mb1JlZyhTQ3BudC0+ZGV2aWNlKTsKKwlpZiAoTlVMTCA9PSBkZXZpcCkKKwkJcmV0dXJuIHNjaGVkdWxlX3Jlc3AoU0NwbnQsIE5VTEwsIGRvbmUsCisJCQkJICAgICBESURfTk9fQ09OTkVDVCA8PCAxNiwgMCk7CisKKwlpZiAoKHNjc2lfZGVidWdfZXZlcnlfbnRoICE9IDApICYmCisJICAgICgrK3Njc2lfZGVidWdfY21uZF9jb3VudCA+PSBhYnMoc2NzaV9kZWJ1Z19ldmVyeV9udGgpKSkgeworCQlzY3NpX2RlYnVnX2NtbmRfY291bnQgPSAwOworCQlpZiAoc2NzaV9kZWJ1Z19ldmVyeV9udGggPCAtMSkKKwkJCXNjc2lfZGVidWdfZXZlcnlfbnRoID0gLTE7CisJCWlmIChTQ1NJX0RFQlVHX09QVF9USU1FT1VUICYgc2NzaV9kZWJ1Z19vcHRzKQorCQkJcmV0dXJuIDA7IC8qIGlnbm9yZSBjb21tYW5kIGNhdXNpbmcgdGltZW91dCAqLworCQllbHNlIGlmIChTQ1NJX0RFQlVHX09QVF9SRUNPVkVSRURfRVJSICYgc2NzaV9kZWJ1Z19vcHRzKQorCQkJaW5qX3JlY292ZXJlZCA9IDE7IC8qIHRvIHJlYWRzIGFuZCB3cml0ZXMgYmVsb3cgKi8KKwkJZWxzZSBpZiAoU0NTSV9ERUJVR19PUFRfVFJBTlNQT1JUX0VSUiAmIHNjc2lfZGVidWdfb3B0cykKKwkJCWlual90cmFuc3BvcnQgPSAxOyAvKiB0byByZWFkcyBhbmQgd3JpdGVzIGJlbG93ICovCisJfQorCisJaWYgKGRldmlwLT53bHVuKSB7CisJCXN3aXRjaCAoKmNtZCkgeworCQljYXNlIElOUVVJUlk6CisJCWNhc2UgUkVRVUVTVF9TRU5TRToKKwkJY2FzZSBURVNUX1VOSVRfUkVBRFk6CisJCWNhc2UgUkVQT1JUX0xVTlM6CisJCQlicmVhazsgIC8qIG9ubHkgYWxsb3dhYmxlIHdsdW4gY29tbWFuZHMgKi8KKwkJZGVmYXVsdDoKKwkJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKKwkJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBPcGNvZGU6IDB4JXggIgorCQkJCSAgICAgICAibm90IHN1cHBvcnRlZCBmb3Igd2x1blxuIiwgKmNtZCk7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9PUENPREUsIDApOworCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBkZXZpcCwgZG9uZSwgZXJyc3RzLAorCQkJCQkgICAgIDApOworCQl9CisJfQorCisJc3dpdGNoICgqY21kKSB7CisJY2FzZSBJTlFVSVJZOiAgICAgLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KKwkJZGVsYXlfb3ZlcnJpZGUgPSAxOworCQllcnJzdHMgPSByZXNwX2lucXVpcnkoU0NwbnQsIHRhcmdldCwgZGV2aXApOworCQlicmVhazsKKwljYXNlIFJFUVVFU1RfU0VOU0U6CS8qIG1hbmRhdG9yeSwgaWdub3JlIHVuaXQgYXR0ZW50aW9uICovCisJCWRlbGF5X292ZXJyaWRlID0gMTsKKwkJZXJyc3RzID0gcmVzcF9yZXF1ZXN0cyhTQ3BudCwgZGV2aXApOworCQlicmVhazsKKwljYXNlIFJFWkVST19VTklUOgkvKiBhY3R1YWxseSB0aGlzIGlzIFJFV0lORCBmb3IgU1NDICovCisJY2FzZSBTVEFSVF9TVE9QOgorCQllcnJzdHMgPSByZXNwX3N0YXJ0X3N0b3AoU0NwbnQsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDoKKwkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAxLCBkZXZpcCk7CisJCWlmIChlcnJzdHMpCisJCQlicmVhazsKKwkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogTWVkaXVtIHJlbW92YWwgJXNcbiIsCisJCQkgICAgICAgY21kWzRdID8gImluaGliaXRlZCIgOiAiZW5hYmxlZCIpOworCQlicmVhazsKKwljYXNlIFNFTkRfRElBR05PU1RJQzogICAgIC8qIG1hbmRhdG9yeSAqLworCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX1VOSVRfUkVBRFk6ICAgICAvKiBtYW5kYXRvcnkgKi8KKwkJZGVsYXlfb3ZlcnJpZGUgPSAxOworCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDAsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNFUlZFOgorCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNFUlZFXzEwOgorCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBSRUxFQVNFOgorCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBSRUxFQVNFXzEwOgorCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBSRUFEX0NBUEFDSVRZOgorCQllcnJzdHMgPSByZXNwX3JlYWRjYXAoU0NwbnQsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTjoKKwkJaWYgKFNBSV9SRUFEX0NBUEFDSVRZXzE2ICE9IGNtZFsxXSkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJCUlOVkFMSURfT1BDT0RFLCAwKTsKKwkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCQlicmVhazsKKwkJfQorCQllcnJzdHMgPSByZXNwX3JlYWRjYXAxNihTQ3BudCwgZGV2aXApOworCQlicmVhazsKKwljYXNlIE1BSU5URU5BTkNFX0lOOgorCQlpZiAoTUlfUkVQT1JUX1RBUkdFVF9QR1MgIT0gY21kWzFdKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9PUENPREUsIDApOworCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCWJyZWFrOworCQl9CisJCWVycnN0cyA9IHJlc3BfcmVwb3J0X3RndHBncyhTQ3BudCwgZGV2aXApOworCQlicmVhazsKKwljYXNlIFJFQURfMTY6CisJY2FzZSBSRUFEXzEyOgorCWNhc2UgUkVBRF8xMDoKKwljYXNlIFJFQURfNjoKKwkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7CisJCWlmIChlcnJzdHMpCisJCQlicmVhazsKKwkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKKwkJCWJyZWFrOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7CisJCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBSRUNPVkVSRURfRVJST1IsCisJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CisJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQl9IGVsc2UgaWYgKGlual90cmFuc3BvcnQgJiYgKDAgPT0gZXJyc3RzKSkgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBBQk9SVEVEX0NPTU1BTkQsCisJCQkJCVRSQU5TUE9SVF9QUk9CTEVNLCBBQ0tfTkFLX1RPKTsKKwkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSRVBPUlRfTFVOUzoJLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KKwkJZGVsYXlfb3ZlcnJpZGUgPSAxOworCQllcnJzdHMgPSByZXNwX3JlcG9ydF9sdW5zKFNDcG50LCBkZXZpcCk7CisJCWJyZWFrOworCWNhc2UgVkVSSUZZOgkJLyogMTAgYnl0ZSBTQkMtMiBjb21tYW5kICovCisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOworCQlicmVhazsKKwljYXNlIFdSSVRFXzE2OgorCWNhc2UgV1JJVEVfMTI6CisJY2FzZSBXUklURV8xMDoKKwljYXNlIFdSSVRFXzY6CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOworCQlpZiAoZXJyc3RzKQorCQkJYnJlYWs7CisJCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCisJCQlicmVhazsKKwkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0pOworCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIFJFQ09WRVJFRF9FUlJPUiwKKwkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKKwkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNT0RFX1NFTlNFOgorCWNhc2UgTU9ERV9TRU5TRV8xMDoKKwkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbnNlKFNDcG50LCB0YXJnZXQsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVDoKKwkJZXJyc3RzID0gcmVzcF9tb2RlX3NlbGVjdChTQ3BudCwgMSwgZGV2aXApOworCQlicmVhazsKKwljYXNlIE1PREVfU0VMRUNUXzEwOgorCQllcnJzdHMgPSByZXNwX21vZGVfc2VsZWN0KFNDcG50LCAwLCBkZXZpcCk7CisJCWJyZWFrOworCWNhc2UgTE9HX1NFTlNFOgorCQllcnJzdHMgPSByZXNwX2xvZ19zZW5zZShTQ3BudCwgZGV2aXApOworCQlicmVhazsKKwljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgorCQlkZWxheV9vdmVycmlkZSA9IDE7CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOworCQlicmVhazsKKwljYXNlIFdSSVRFX0JVRkZFUjoKKwkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAxLCBkZXZpcCk7CisJCWJyZWFrOworCWNhc2UgWERXUklURVJFQURfMTA6CisJCWlmICghc2NzaV9iaWRpX2NtbmQoU0NwbnQpKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7CisJCWlmIChlcnJzdHMpCisJCQlicmVhazsKKwkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKKwkJCWJyZWFrOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7CisJCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJaWYgKGVycnN0cykKKwkJCWJyZWFrOworCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlpZiAoZXJyc3RzKQorCQkJYnJlYWs7CisJCWVycnN0cyA9IHJlc3BfeGR3cml0ZXJlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKKwkJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IE9wY29kZTogMHgleCBub3QgIgorCQkJICAgICAgICJzdXBwb3J0ZWRcbiIsICpjbWQpOworCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKKwkJaWYgKGVycnN0cykKKwkJCWJyZWFrOwkvKiBVbml0IGF0dGVudGlvbiB0YWtlcyBwcmVjZWRlbmNlICovCisJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX09QQ09ERSwgMCk7CisJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgZGV2aXAsIGRvbmUsIGVycnN0cywKKwkJCSAgICAgKGRlbGF5X292ZXJyaWRlID8gMCA6IHNjc2lfZGVidWdfZGVsYXkpKTsKK30KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2RlYnVnX2RyaXZlcl90ZW1wbGF0ZSA9IHsKKwkucHJvY19pbmZvID0JCXNjc2lfZGVidWdfcHJvY19pbmZvLAorCS5wcm9jX25hbWUgPQkJc2RlYnVnX3Byb2NfbmFtZSwKKwkubmFtZSA9CQkJIlNDU0kgREVCVUciLAorCS5pbmZvID0JCQlzY3NpX2RlYnVnX2luZm8sCisJLnNsYXZlX2FsbG9jID0JCXNjc2lfZGVidWdfc2xhdmVfYWxsb2MsCisJLnNsYXZlX2NvbmZpZ3VyZSA9CXNjc2lfZGVidWdfc2xhdmVfY29uZmlndXJlLAorCS5zbGF2ZV9kZXN0cm95ID0Jc2NzaV9kZWJ1Z19zbGF2ZV9kZXN0cm95LAorCS5pb2N0bCA9CQlzY3NpX2RlYnVnX2lvY3RsLAorCS5xdWV1ZWNvbW1hbmQgPQkJc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIgPQlzY3NpX2RlYnVnX2Fib3J0LAorCS5laF9idXNfcmVzZXRfaGFuZGxlciA9IHNjc2lfZGVidWdfYnVzX3Jlc2V0LAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IHNjc2lfZGVidWdfZGV2aWNlX3Jlc2V0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIgPSBzY3NpX2RlYnVnX2hvc3RfcmVzZXQsCisJLmJpb3NfcGFyYW0gPQkJc2NzaV9kZWJ1Z19iaW9zcGFyYW0sCisJLmNhbl9xdWV1ZSA9CQlTQ1NJX0RFQlVHX0NBTlFVRVVFLAorCS50aGlzX2lkID0JCTcsCisJLnNnX3RhYmxlc2l6ZSA9CQkyNTYsCisJLmNtZF9wZXJfbHVuID0JCTE2LAorCS5tYXhfc2VjdG9ycyA9CQkweGZmZmYsCisJLnVzZV9jbHVzdGVyaW5nID0gCURJU0FCTEVfQ0xVU1RFUklORywKKwkubW9kdWxlID0JCVRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBzZGVidWdfZHJpdmVyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKiBkZXYpCiB7CiAgICAgICAgIGludCBlcnJvciA9IDA7CkBAIC0zMTIwLDkgKzI5ODIsOCBAQAogCiBzdGF0aWMgaW50IHNkZWJ1Z19kcml2ZXJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiBkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxoLCAqbGhfc2Y7CiAgICAgICAgIHN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGJnX2hvc3Q7Ci0gICAgICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKnNkYmdfZGV2aW5mbzsKKwlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpzZGJnX2RldmluZm8sICp0bXA7CiAKIAlzZGJnX2hvc3QgPSB0b19zZGVidWdfaG9zdChkZXYpOwogCkBAIC0zMTM0LDkgKzI5OTUsOCBAQAogCiAgICAgICAgIHNjc2lfcmVtb3ZlX2hvc3Qoc2RiZ19ob3N0LT5zaG9zdCk7CiAKLSAgICAgICAgbGlzdF9mb3JfZWFjaF9zYWZlKGxoLCBsaF9zZiwgJnNkYmdfaG9zdC0+ZGV2X2luZm9fbGlzdCkgewotICAgICAgICAgICAgICAgIHNkYmdfZGV2aW5mbyA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBzZGVidWdfZGV2X2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYmdfZGV2aW5mbywgdG1wLCAmc2RiZ19ob3N0LT5kZXZfaW5mb19saXN0LAorCQkJCSBkZXZfbGlzdCkgewogICAgICAgICAgICAgICAgIGxpc3RfZGVsKCZzZGJnX2RldmluZm8tPmRldl9saXN0KTsKICAgICAgICAgICAgICAgICBrZnJlZShzZGJnX2RldmluZm8pOwogICAgICAgICB9CkBAIC0zMTQ1LDIwICszMDA1LDE1IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZGVidWdfbWF4X3RndHNfbHVucyh2b2lkKQorc3RhdGljIGludCBwc2V1ZG9fbGxkX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9kcml2ZXIgKmRldl9kcml2ZXIpCiB7Ci0Jc3RydWN0IHNkZWJ1Z19ob3N0X2luZm8gKiBzZGJnX2hvc3Q7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaHBudDsKLQotCXNwaW5fbG9jaygmc2RlYnVnX2hvc3RfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYmdfaG9zdCwgJnNkZWJ1Z19ob3N0X2xpc3QsIGhvc3RfbGlzdCkgewotCQlocG50ID0gc2RiZ19ob3N0LT5zaG9zdDsKLQkJaWYgKChocG50LT50aGlzX2lkID49IDApICYmCi0JCSAgICAoc2NzaV9kZWJ1Z19udW1fdGd0cyA+IGhwbnQtPnRoaXNfaWQpKQotCQkJaHBudC0+bWF4X2lkID0gc2NzaV9kZWJ1Z19udW1fdGd0cyArIDE7Ci0JCWVsc2UKLQkJCWhwbnQtPm1heF9pZCA9IHNjc2lfZGVidWdfbnVtX3RndHM7Ci0JCWhwbnQtPm1heF9sdW4gPSBTQU0yX1dMVU5fUkVQT1JUX0xVTlM7IC8qIHNjc2lfZGVidWdfbWF4X2x1bnM7ICovCi0JfQotCXNwaW5fdW5sb2NrKCZzZGVidWdfaG9zdF9saXN0X2xvY2spOworCXJldHVybiAxOwogfQorCitzdGF0aWMgc3RydWN0IGJ1c190eXBlIHBzZXVkb19sbGRfYnVzID0geworCS5uYW1lID0gInBzZXVkbyIsCisJLm1hdGNoID0gcHNldWRvX2xsZF9idXNfbWF0Y2gsCisJLnByb2JlID0gc2RlYnVnX2RyaXZlcl9wcm9iZSwKKwkucmVtb3ZlID0gc2RlYnVnX2RyaXZlcl9yZW1vdmUsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NWRkNWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSNpZm5kZWYgX1NDU0lfREVCVUdfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RhdGljIGludCBzY3NpX2RlYnVnX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKLXN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICopOwotc3RhdGljIHZvaWQgc2NzaV9kZWJ1Z19zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqKTsKLXN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqLAotCQkJCSAgIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSk7Ci1zdGF0aWMgaW50IHNjc2lfZGVidWdfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgdm9pZCBfX3VzZXIgKik7Ci1zdGF0aWMgaW50IHNjc2lfZGVidWdfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCi0JCXNlY3Rvcl90LCBpbnRbXSk7Ci1zdGF0aWMgaW50IHNjc2lfZGVidWdfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqKTsKLXN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1zdGF0aWMgaW50IHNjc2lfZGVidWdfcHJvY19pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKiwgY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQpOwotc3RhdGljIGNvbnN0IGNoYXIgKiBzY3NpX2RlYnVnX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqKTsKLQotI2RlZmluZSBTQ1NJX0RFQlVHX0NBTlFVRVVFICAyNTUgCS8qIG5lZWRzIHRvIGJlID49IDEgKi8KLQotI2RlZmluZSBTQ1NJX0RFQlVHX01BWF9DTURfTEVOIDE2Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggMDQ1YTA4Ni4uMjIxZjMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC01MjQsNiArNTI0LDQxIEBACiAJcmV0dXJuIHJ0bjsKIH0KIAorc3RhdGljIHZvaWQgX19zY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKQoreworCXNkZXYtPndhc19yZXNldCA9IDE7CisJc2Rldi0+ZXhwZWN0aW5nX2NjX3VhID0gMTsKK30KKworLyoqCisgKiBzY3NpX3RyeV90YXJnZXRfcmVzZXQgLSBBc2sgaG9zdCB0byBwZXJmb3JtIGEgdGFyZ2V0IHJlc2V0CisgKiBAc2NtZDoJU0NTSSBjbWQgdXNlZCB0byBzZW5kIGEgdGFyZ2V0IHJlc2V0CisgKgorICogTm90ZXM6CisgKiAgICBUaGVyZSBpcyBubyB0aW1lb3V0IGZvciB0aGlzIG9wZXJhdGlvbi4gIGlmIHRoaXMgb3BlcmF0aW9uIGlzCisgKiAgICB1bnJlbGlhYmxlIGZvciBhIGdpdmVuIGhvc3QsIHRoZW4gdGhlIGhvc3QgaXRzZWxmIG5lZWRzIHRvIHB1dCBhCisgKiAgICB0aW1lciBvbiBpdCwgYW5kIHNldCB0aGUgaG9zdCBiYWNrIHRvIGEgY29uc2lzdGVudCBzdGF0ZSBwcmlvciB0bworICogICAgcmV0dXJuaW5nLgorICovCitzdGF0aWMgaW50IHNjc2lfdHJ5X3RhcmdldF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJ0bjsKKworCWlmICghc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+ZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIpCisJCXJldHVybiBGQUlMRUQ7CisKKwlydG4gPSBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT5laF90YXJnZXRfcmVzZXRfaGFuZGxlcihzY21kKTsKKwlpZiAocnRuID09IFNVQ0NFU1MpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJX19zdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzY3NpX3RhcmdldChzY21kLT5kZXZpY2UpLCBOVUxMLAorCQkJCQkgIF9fc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBydG47Cit9CisKIC8qKgogICogc2NzaV90cnlfYnVzX2RldmljZV9yZXNldCAtIEFzayBob3N0IHRvIHBlcmZvcm0gYSBCRFIgb24gYSBkZXYKICAqIEBzY21kOglTQ1NJIGNtZCB1c2VkIHRvIHNlbmQgQkRSCkBAIC01NDIsMTEgKzU3Nyw4IEBACiAJCXJldHVybiBGQUlMRUQ7CiAKIAlydG4gPSBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzY21kKTsKLQlpZiAocnRuID09IFNVQ0NFU1MpIHsKLQkJc2NtZC0+ZGV2aWNlLT53YXNfcmVzZXQgPSAxOwotCQlzY21kLT5kZXZpY2UtPmV4cGVjdGluZ19jY191YSA9IDE7Ci0JfQotCisJaWYgKHJ0biA9PSBTVUNDRVNTKQorCQlfX3Njc2lfcmVwb3J0X2RldmljZV9yZXNldChzY21kLT5kZXZpY2UsIE5VTEwpOwogCXJldHVybiBydG47CiB9CiAKQEAgLTU4NCw4ICs2MTYsOSBAQAogewogCWlmIChfX3Njc2lfdHJ5X3RvX2Fib3J0X2NtZChzY21kKSAhPSBTVUNDRVNTKQogCQlpZiAoc2NzaV90cnlfYnVzX2RldmljZV9yZXNldChzY21kKSAhPSBTVUNDRVNTKQotCQkJaWYgKHNjc2lfdHJ5X2J1c19yZXNldChzY21kKSAhPSBTVUNDRVNTKQotCQkJCXNjc2lfdHJ5X2hvc3RfcmVzZXQoc2NtZCk7CisJCQlpZiAoc2NzaV90cnlfdGFyZ2V0X3Jlc2V0KHNjbWQpICE9IFNVQ0NFU1MpCisJCQkJaWYgKHNjc2lfdHJ5X2J1c19yZXNldChzY21kKSAhPSBTVUNDRVNTKQorCQkJCQlzY3NpX3RyeV9ob3N0X3Jlc2V0KHNjbWQpOwogfQogCiAvKioKQEAgLTEwNjAsNiArMTA5Myw1NiBAQAogfQogCiAvKioKKyAqIHNjc2lfZWhfdGFyZ2V0X3Jlc2V0IC0gc2VuZCB0YXJnZXQgcmVzZXQgaWYgbmVlZGVkCisgKiBAc2hvc3Q6CXNjc2kgaG9zdCBiZWluZyByZWNvdmVyZWQuCisgKiBAd29ya19xOiAgICAgJmxpc3RfaGVhZCBmb3IgcGVuZGluZyBjb21tYW5kcy4KKyAqIEBkb25lX3E6CSZsaXN0X2hlYWQgZm9yIHByb2Nlc3NlZCBjb21tYW5kcy4KKyAqCisgKiBOb3RlczoKKyAqICAgIFRyeSBhIHRhcmdldCByZXNldC4KKyAqLworc3RhdGljIGludCBzY3NpX2VoX3RhcmdldF9yZXNldChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICp3b3JrX3EsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsICp0Z3RyX3NjbWQsICpuZXh0OworCXVuc2lnbmVkIGludCBpZDsKKwlpbnQgcnRuOworCisJZm9yIChpZCA9IDA7IGlkIDw9IHNob3N0LT5tYXhfaWQ7IGlkKyspIHsKKwkJdGd0cl9zY21kID0gTlVMTDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzY21kLCB3b3JrX3EsIGVoX2VudHJ5KSB7CisJCQlpZiAoaWQgPT0gc2NtZF9pZChzY21kKSkgeworCQkJCXRndHJfc2NtZCA9IHNjbWQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCF0Z3RyX3NjbWQpCisJCQljb250aW51ZTsKKworCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBTZW5kaW5nIHRhcmdldCByZXNldCAiCisJCQkJCQkgICJ0byB0YXJnZXQgJWRcbiIsCisJCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGlkKSk7CisJCXJ0biA9IHNjc2lfdHJ5X3RhcmdldF9yZXNldCh0Z3RyX3NjbWQpOworCQlpZiAocnRuID09IFNVQ0NFU1MpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY21kLCBuZXh0LCB3b3JrX3EsIGVoX2VudHJ5KSB7CisJCQkJaWYgKGlkID09IHNjbWRfaWQoc2NtZCkpCisJCQkJCWlmICghc2NzaV9kZXZpY2Vfb25saW5lKHNjbWQtPmRldmljZSkgfHwKKwkJCQkJICAgICFzY3NpX2VoX3R1cih0Z3RyX3NjbWQpKQorCQkJCQkJc2NzaV9laF9maW5pc2hfY21kKHNjbWQsCisJCQkJCQkJCSAgIGRvbmVfcSk7CisJCQl9CisJCX0gZWxzZQorCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgcHJpbnRrKCIlczogVGFyZ2V0IHJlc2V0IgorCQkJCQkJCSAgIiBmYWlsZWQgdGFyZ2V0OiAiCisJCQkJCQkJICAiJWRcbiIsCisJCQkJCQkJICBjdXJyZW50LT5jb21tLCBpZCkpOworCX0KKworCXJldHVybiBsaXN0X2VtcHR5KHdvcmtfcSk7Cit9CisKKy8qKgogICogc2NzaV9laF9idXNfcmVzZXQgLSBzZW5kIGEgYnVzIHJlc2V0IAogICogQHNob3N0Ogkmc2NzaSBob3N0IGJlaW5nIHJlY292ZXJlZC4KICAqIEB3b3JrX3E6ICAgICAmbGlzdF9oZWFkIGZvciBwZW5kaW5nIGNvbW1hbmRzLgpAQCAtMTQ0Nyw5ICsxNTMwLDExIEBACiB7CiAJaWYgKCFzY3NpX2VoX3N0dShzaG9zdCwgd29ya19xLCBkb25lX3EpKQogCQlpZiAoIXNjc2lfZWhfYnVzX2RldmljZV9yZXNldChzaG9zdCwgd29ya19xLCBkb25lX3EpKQotCQkJaWYgKCFzY3NpX2VoX2J1c19yZXNldChzaG9zdCwgd29ya19xLCBkb25lX3EpKQotCQkJCWlmICghc2NzaV9laF9ob3N0X3Jlc2V0KHdvcmtfcSwgZG9uZV9xKSkKLQkJCQkJc2NzaV9laF9vZmZsaW5lX3NkZXZzKHdvcmtfcSwgZG9uZV9xKTsKKwkJCWlmICghc2NzaV9laF90YXJnZXRfcmVzZXQoc2hvc3QsIHdvcmtfcSwgZG9uZV9xKSkKKwkJCQlpZiAoIXNjc2lfZWhfYnVzX3Jlc2V0KHNob3N0LCB3b3JrX3EsIGRvbmVfcSkpCisJCQkJCWlmICghc2NzaV9laF9ob3N0X3Jlc2V0KHdvcmtfcSwgZG9uZV9xKSkKKwkJCQkJCXNjc2lfZWhfb2ZmbGluZV9zZGV2cyh3b3JrX3EsCisJCQkJCQkJCSAgICAgIGRvbmVfcSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2VoX3JlYWR5X2RldnMpOwogCkBAIC0xNjE5LDEwICsxNzA0LDggQEAKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAKIAlfX3Nob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgewotCQlpZiAoY2hhbm5lbCA9PSBzZGV2X2NoYW5uZWwoc2RldikpIHsKLQkJCXNkZXYtPndhc19yZXNldCA9IDE7Ci0JCQlzZGV2LT5leHBlY3RpbmdfY2NfdWEgPSAxOwotCQl9CisJCWlmIChjaGFubmVsID09IHNkZXZfY2hhbm5lbChzZGV2KSkKKwkJCV9fc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KHNkZXYsIE5VTEwpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KTsKQEAgLTE2NTUsMTAgKzE3MzgsOCBAQAogCiAJX19zaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2Rldiwgc2hvc3QpIHsKIAkJaWYgKGNoYW5uZWwgPT0gc2Rldl9jaGFubmVsKHNkZXYpICYmCi0JCSAgICB0YXJnZXQgPT0gc2Rldl9pZChzZGV2KSkgewotCQkJc2Rldi0+d2FzX3Jlc2V0ID0gMTsKLQkJCXNkZXYtPmV4cGVjdGluZ19jY191YSA9IDE7Ci0JCX0KKwkJICAgIHRhcmdldCA9PSBzZGV2X2lkKHNkZXYpKQorCQkJX19zY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoc2RldiwgTlVMTCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQpOwpAQCAtMTcxNCw2ICsxNzk1LDExIEBACiAJCWlmIChydG4gPT0gU1VDQ0VTUykKIAkJCWJyZWFrOwogCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgU0NTSV9UUllfUkVTRVRfVEFSR0VUOgorCQlydG4gPSBzY3NpX3RyeV90YXJnZXRfcmVzZXQoc2NtZCk7CisJCWlmIChydG4gPT0gU1VDQ0VTUykKKwkJCWJyZWFrOworCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgU0NTSV9UUllfUkVTRVRfQlVTOgogCQlydG4gPSBzY3NpX3RyeV9idXNfcmVzZXQoc2NtZCk7CiAJCWlmIChydG4gPT0gU1VDQ0VTUykKQEAgLTE5MDcsMyArMTk5MywzMSBAQAogCX0KIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9nZXRfc2Vuc2VfaW5mb19mbGQpOworCisvKioKKyAqIHNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyIC0gYnVpbGQgc2Vuc2UgZGF0YSBpbiBhIGJ1ZmZlcgorICogQGRlc2M6CVNlbnNlIGZvcm1hdCAobm9uIHplcm8gPT0gZGVzY3JpcHRvciBmb3JtYXQsCisgKiAJCTAgPT0gZml4ZWQgZm9ybWF0KQorICogQGJ1ZjoJV2hlcmUgdG8gYnVpbGQgc2Vuc2UgZGF0YQorICogQGtleToJU2Vuc2Uga2V5CisgKiBAYXNjOglBZGRpdGlvbmFsIHNlbnNlIGNvZGUKKyAqIEBhc2NxOglBZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyCisgKgorICoqLwordm9pZCBzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcihpbnQgZGVzYywgdTggKmJ1ZiwgdTgga2V5LCB1OCBhc2MsIHU4IGFzY3EpCit7CisJaWYgKGRlc2MpIHsKKwkJYnVmWzBdID0gMHg3MjsJLyogZGVzY3JpcHRvciwgY3VycmVudCAqLworCQlidWZbMV0gPSBrZXk7CisJCWJ1ZlsyXSA9IGFzYzsKKwkJYnVmWzNdID0gYXNjcTsKKwkJYnVmWzddID0gMDsKKwl9IGVsc2UgeworCQlidWZbMF0gPSAweDcwOwkvKiBmaXhlZCwgY3VycmVudCAqLworCQlidWZbMl0gPSBrZXk7CisJCWJ1Zls3XSA9IDB4YTsKKwkJYnVmWzEyXSA9IGFzYzsKKwkJYnVmWzEzXSA9IGFzY3E7CisJfQorfQorRVhQT1JUX1NZTUJPTChzY3NpX2J1aWxkX3NlbnNlX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDEzNWMxZDAuLjY3ZjQxMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC03ODQsNyArNzg0LDcgQEAKICAqIGluIHJlcS0+ZGF0YV9sZW4gYW5kIHJlcS0+bmV4dF9ycS0+ZGF0YV9sZW4uIFRoZSB1cHBlci1sYXllciBkcml2ZXIgY2FuCiAgKiBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCiAgKi8KLXZvaWQgc2NzaV9lbmRfYmlkaV9yZXF1ZXN0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3N0YXRpYyB2b2lkIHNjc2lfZW5kX2JpZGlfcmVxdWVzdChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJlcSA9IGNtZC0+cmVxdWVzdDsKIAl1bnNpZ25lZCBpbnQgZGxlbiA9IHJlcS0+ZGF0YV9sZW47CkBAIC04MzksNyArODM5LDcgQEAKIAlpbnQgdGhpc19jb3VudCA9IHNjc2lfYnVmZmxlbihjbWQpOwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gY21kLT5kZXZpY2UtPnJlcXVlc3RfcXVldWU7CiAJc3RydWN0IHJlcXVlc3QgKnJlcSA9IGNtZC0+cmVxdWVzdDsKLQlpbnQgY2xlYXJfZXJyb3JzID0gMTsKKwlpbnQgZXJyb3IgPSAwOwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKIAlpbnQgc2Vuc2VfdmFsaWQgPSAwOwogCWludCBzZW5zZV9kZWZlcnJlZCA9IDA7CkBAIC04NTMsNyArODUzLDYgQEAKIAlpZiAoYmxrX3BjX3JlcXVlc3QocmVxKSkgeyAvKiBTR19JTyBpb2N0bCBmcm9tIGJsb2NrIGxldmVsICovCiAJCXJlcS0+ZXJyb3JzID0gcmVzdWx0OwogCQlpZiAocmVzdWx0KSB7Ci0JCQljbGVhcl9lcnJvcnMgPSAwOwogCQkJaWYgKHNlbnNlX3ZhbGlkICYmIHJlcS0+c2Vuc2UpIHsKIAkJCQkvKgogCQkJCSAqIFNHX0lPIHdhbnRzIGN1cnJlbnQgYW5kIGRlZmVycmVkIGVycm9ycwpAQCAtODY1LDYgKzg2NCw4IEBACiAJCQkJbWVtY3B5KHJlcS0+c2Vuc2UsIGNtZC0+c2Vuc2VfYnVmZmVyLCAgbGVuKTsKIAkJCQlyZXEtPnNlbnNlX2xlbiA9IGxlbjsKIAkJCX0KKwkJCWlmICghc2Vuc2VfZGVmZXJyZWQpCisJCQkJZXJyb3IgPSAtRUlPOwogCQl9CiAJCWlmIChzY3NpX2JpZGlfY21uZChjbWQpKSB7CiAJCQkvKiB3aWxsIGFsc28gcmVsZWFzZV9idWZmZXJzICovCkBAIC04ODUsMTQgKzg4NiwxMSBAQAogCQkJCSAgICAgICIlZCBieXRlcyBkb25lLlxuIiwKIAkJCQkgICAgICByZXEtPm5yX3NlY3RvcnMsIGdvb2RfYnl0ZXMpKTsKIAotCWlmIChjbGVhcl9lcnJvcnMpCi0JCXJlcS0+ZXJyb3JzID0gMDsKLQogCS8qIEEgbnVtYmVyIG9mIGJ5dGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHJlYWQuICBJZiB0aGVyZQogCSAqIGFyZSBsZWZ0b3ZlcnMgYW5kIHRoZXJlIGlzIHNvbWUga2luZCBvZiBlcnJvcgogCSAqIChyZXN1bHQgIT0gMCksIHJldHJ5IHRoZSByZXN0LgogCSAqLwotCWlmIChzY3NpX2VuZF9yZXF1ZXN0KGNtZCwgMCwgZ29vZF9ieXRlcywgcmVzdWx0ID09IDApID09IE5VTEwpCisJaWYgKHNjc2lfZW5kX3JlcXVlc3QoY21kLCBlcnJvciwgZ29vZF9ieXRlcywgcmVzdWx0ID09IDApID09IE5VTEwpCiAJCXJldHVybjsKIAogCS8qIGdvb2RfYnl0ZXMgPSAwLCBvciAoaW5jbHVzaXZlKSB0aGVyZSB3ZXJlIGxlZnRvdmVycyBhbmQKQEAgLTEwMTQsMTAgKzEwMTIsNiBAQAogCX0KIAogCXJlcS0+YnVmZmVyID0gTlVMTDsKLQlpZiAoYmxrX3BjX3JlcXVlc3QocmVxKSkKLQkJc2RiLT5sZW5ndGggPSByZXEtPmRhdGFfbGVuOwotCWVsc2UKLQkJc2RiLT5sZW5ndGggPSByZXEtPm5yX3NlY3RvcnMgPDwgOTsKIAogCS8qIAogCSAqIE5leHQsIHdhbGsgdGhlIGxpc3QsIGFuZCBmaWxsIGluIHRoZSBhZGRyZXNzZXMgYW5kIHNpemVzIG9mCkBAIC0xMDI2LDYgKzEwMjAsMTAgQEAKIAljb3VudCA9IGJsa19ycV9tYXBfc2cocmVxLT5xLCByZXEsIHNkYi0+dGFibGUuc2dsKTsKIAlCVUdfT04oY291bnQgPiBzZGItPnRhYmxlLm5lbnRzKTsKIAlzZGItPnRhYmxlLm5lbnRzID0gY291bnQ7CisJaWYgKGJsa19wY19yZXF1ZXN0KHJlcSkpCisJCXNkYi0+bGVuZ3RoID0gcmVxLT5kYXRhX2xlbjsKKwllbHNlCisJCXNkYi0+bGVuZ3RoID0gcmVxLT5ucl9zZWN0b3JzIDw8IDk7CiAJcmV0dXJuIEJMS1BSRVBfT0s7CiB9CiAKQEAgLTIxNjIsMTAgKzIxNjAsMTUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisjaWYgMAorCS8qIEZJWE1FOiBjdXJyZW50bHkgdGhpcyBjaGVjayBlbGltaW5hdGVzIGFsbCBtZWRpYSBjaGFuZ2UgZXZlbnRzCisJICogZm9yIHBvbGxlZCBkZXZpY2VzLiAgTmVlZCB0byB1cGRhdGUgdG8gZGlzY3JpbWluYXRlIGJldHdlZW4gQU4KKwkgKiBhbmQgcG9sbGVkIGV2ZW50cyAqLwogCWlmICghdGVzdF9iaXQoZXZ0LT5ldnRfdHlwZSwgc2Rldi0+c3VwcG9ydGVkX2V2ZW50cykpIHsKIAkJa2ZyZWUoZXZ0KTsKIAkJcmV0dXJuOwogCX0KKyNlbmRpZgogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPmxpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmV2dC0+bm9kZSwgJnNkZXYtPmV2ZW50X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmggYi9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaAppbmRleCBlMWVkYWI0Li45OThjYjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaApAQCAtMTMsMTIgKzEzLDEyIEBACiAJc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSAqZjsKIAlzdHJ1Y3Qgc2FzX2RvbWFpbl9mdW5jdGlvbl90ZW1wbGF0ZSAqZGZ0OwogCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9ob3N0X2F0dHJzW1NBU19IT1NUX0FUVFJTXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3BoeV9hdHRyc1tTQVNfUEhZX0FUVFJTXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3BvcnRfYXR0cnNbU0FTX1BPUlRfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9leHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlNdOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfaG9zdF9hdHRyc1tTQVNfSE9TVF9BVFRSU107CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9waHlfYXR0cnNbU0FTX1BIWV9BVFRSU107CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9wb3J0X2F0dHJzW1NBU19QT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3JwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2VuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlNdOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTXTsKIAogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHBoeV9hdHRyX2NvbnQ7CiAJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgcG9ydF9hdHRyX2NvbnQ7CkBAIC0zMCwxMiArMzAsMTIgQEAKIAkgKiBUaGUgYXJyYXkgb2YgbnVsbCB0ZXJtaW5hdGVkIHBvaW50ZXJzIHRvIGF0dHJpYnV0ZXMKIAkgKiBuZWVkZWQgYnkgc2NzaV9zeXNmcy5jCiAJICovCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcGh5X2F0dHJzW1NBU19QSFlfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcG9ydF9hdHRyc1tTQVNfUE9SVF9BVFRSUyArIDFdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpycGh5X2F0dHJzW1NBU19SUE9SVF9BVFRSUyArIDFdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICplbmRfZGV2X2F0dHJzW1NBU19FTkRfREVWX0FUVFJTICsgMV07Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmV4cGFuZGVyX2F0dHJzW1NBU19FWFBBTkRFUl9BVFRSUyArIDFdOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpob3N0X2F0dHJzW1NBU19IT1NUX0FUVFJTICsgMV07CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnBoeV9hdHRyc1tTQVNfUEhZX0FUVFJTICsgMV07CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnBvcnRfYXR0cnNbU0FTX1BPUlRfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSUyArIDFdOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpleHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlMgKyAxXTsKIH07CiAjZGVmaW5lIHRvX3Nhc19pbnRlcm5hbCh0bXBsKQljb250YWluZXJfb2YodG1wbCwgc3RydWN0IHNhc19pbnRlcm5hbCwgdCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDFkYzE2NWEuLmU2N2MxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTE1NzcsOCArMTU3Nyw3IEBACiB9CiAKIC8qKgotICogc2NzaV9zY2FuX3RhcmdldCAtIHNjYW4gYSB0YXJnZXQgaWQsIHBvc3NpYmx5IGluY2x1ZGluZyBhbGwgTFVOcyBvbiB0aGUKLSAqICAgICB0YXJnZXQuCisgKiBzY3NpX3NjYW5fdGFyZ2V0IC0gc2NhbiBhIHRhcmdldCBpZCwgcG9zc2libHkgaW5jbHVkaW5nIGFsbCBMVU5zIG9uIHRoZSB0YXJnZXQuCiAgKiBAcGFyZW50Oglob3N0IHRvIHNjYW4KICAqIEBjaGFubmVsOgljaGFubmVsIHRvIHNjYW4KICAqIEBpZDoJCXRhcmdldCBpZCB0byBzY2FuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBlZDgzY2RiLi42N2JiMjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTExOSw5ICsxMTksMTAgQEAKICAqLwogI2RlZmluZSBzaG9zdF9zaG93X2Z1bmN0aW9uKG5hbWUsIGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93XyMjbmFtZSAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCQkJXAorc2hvd18jI25hbWUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIAlcCisJICAgICBjaGFyICpidWYpCQkJCQkJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOwkJXAorCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsJCQlcCiAJcmV0dXJuIHNucHJpbnRmIChidWYsIDIwLCBmb3JtYXRfc3RyaW5nLCBzaG9zdC0+ZmllbGQpOwkJXAogfQogCkBAIC0xMzEsNyArMTMyLDcgQEAKICAqLwogI2RlZmluZSBzaG9zdF9yZF9hdHRyMihuYW1lLCBmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCiAJc2hvc3Rfc2hvd19mdW5jdGlvbihuYW1lLCBmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfIyNuYW1lLCBOVUxMKTsKIAogI2RlZmluZSBzaG9zdF9yZF9hdHRyKGZpZWxkLCBmb3JtYXRfc3RyaW5nKSBcCiBzaG9zdF9yZF9hdHRyMihmaWVsZCwgZmllbGQsIGZvcm1hdF9zdHJpbmcpCkBAIC0xNDAsMTAgKzE0MSwxMSBAQAogICogQ3JlYXRlIHRoZSBhY3R1YWwgc2hvdy9zdG9yZSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KICAqLwogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9zY2FuKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY29uc3QgY2hhciAqYnVmLAotCQkJICBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdAorc3RvcmVfc2NhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJaW50IHJlczsKIAogCXJlcyA9IHNjc2lfc2NhbihzaG9zdCwgYnVmKTsKQEAgLTE1MSwxMyArMTUzLDE0IEBACiAJCXJlcyA9IGNvdW50OwogCXJldHVybiByZXM7CiB9Owotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNjYW4sIFNfSVdVU1IsIE5VTEwsIHN0b3JlX3NjYW4pOworc3RhdGljIERFVklDRV9BVFRSKHNjYW4sIFNfSVdVU1IsIE5VTEwsIHN0b3JlX3NjYW4pOwogCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfc2hvc3Rfc3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0b3JlX3Nob3N0X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAllbnVtIHNjc2lfaG9zdF9zdGF0ZSBzdGF0ZSA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaG9zdF9zdGF0ZXMpOyBpKyspIHsKQEAgLTE3Nyw5ICsxODAsOSBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotc2hvd19zaG9zdF9zdGF0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3Nob3dfc2hvc3Rfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJY29uc3QgY2hhciAqbmFtZSA9IHNjc2lfaG9zdF9zdGF0ZV9uYW1lKHNob3N0LT5zaG9zdF9zdGF0ZSk7CiAKIAlpZiAoIW5hbWUpCkBAIC0xODgsNyArMTkxLDkgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVzXG4iLCBuYW1lKTsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHN0YXRlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19zaG9zdF9zdGF0ZSwgc3RvcmVfc2hvc3Rfc3RhdGUpOworLyogREVWSUNFX0FUVFIoc3RhdGUpIGNsYXNoZXMgd2l0aCBkZXZfYXR0cl9zdGF0ZSBmb3Igc2RldiAqLworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfaHN0YXRlID0KKwlfX0FUVFIoc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3Nob3N0X3N0YXRlLCBzdG9yZV9zaG9zdF9zdGF0ZSk7CiAKIHN0YXRpYyBzc2l6ZV90CiBzaG93X3Nob3N0X21vZGUodW5zaWduZWQgaW50IG1vZGUsIGNoYXIgKmJ1ZikKQEAgLTIwNiw5ICsyMTEsMTEgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3Nob3N0X3N1cHBvcnRlZF9tb2RlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QKK3Nob3dfc2hvc3Rfc3VwcG9ydGVkX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9tb2RlID0gc2hvc3QtPmhvc3R0LT5zdXBwb3J0ZWRfbW9kZTsKIAogCWlmIChzdXBwb3J0ZWRfbW9kZSA9PSBNT0RFX1VOS05PV04pCkBAIC0yMTgsMTEgKzIyNSwxMyBAQAogCXJldHVybiBzaG93X3Nob3N0X21vZGUoc3VwcG9ydGVkX21vZGUsIGJ1Zik7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzdXBwb3J0ZWRfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfc2hvc3Rfc3VwcG9ydGVkX21vZGUsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHN1cHBvcnRlZF9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19zaG9zdF9zdXBwb3J0ZWRfbW9kZSwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc2hvc3RfYWN0aXZlX21vZGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorc2hvd19zaG9zdF9hY3RpdmVfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAKIAlpZiAoc2hvc3QtPmFjdGl2ZV9tb2RlID09IE1PREVfVU5LTk9XTikKIAkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICJ1bmtub3duXG4iKTsKQEAgLTIzMCw3ICsyMzksNyBAQAogCQlyZXR1cm4gc2hvd19zaG9zdF9tb2RlKHNob3N0LT5hY3RpdmVfbW9kZSwgYnVmKTsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGFjdGl2ZV9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19zaG9zdF9hY3RpdmVfbW9kZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWN0aXZlX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3Nob3N0X2FjdGl2ZV9tb2RlLCBOVUxMKTsKIAogc2hvc3RfcmRfYXR0cih1bmlxdWVfaWQsICIldVxuIik7CiBzaG9zdF9yZF9hdHRyKGhvc3RfYnVzeSwgIiVodVxuIik7CkBAIC0yNDAsMjIgKzI0OSwyMiBAQAogc2hvc3RfcmRfYXR0cih1bmNoZWNrZWRfaXNhX2RtYSwgIiVkXG4iKTsKIHNob3N0X3JkX2F0dHIyKHByb2NfbmFtZSwgaG9zdHQtPnByb2NfbmFtZSwgIiVzXG4iKTsKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpzY3NpX3N5c2ZzX3Nob3N0X2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX3VuaXF1ZV9pZCwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9idXN5LAotCSZjbGFzc19kZXZpY2VfYXR0cl9jbWRfcGVyX2x1biwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfY2FuX3F1ZXVlLAotCSZjbGFzc19kZXZpY2VfYXR0cl9zZ190YWJsZXNpemUsCi0JJmNsYXNzX2RldmljZV9hdHRyX3VuY2hlY2tlZF9pc2FfZG1hLAotCSZjbGFzc19kZXZpY2VfYXR0cl9wcm9jX25hbWUsCi0JJmNsYXNzX2RldmljZV9hdHRyX3NjYW4sCi0JJmNsYXNzX2RldmljZV9hdHRyX3N0YXRlLAotCSZjbGFzc19kZXZpY2VfYXR0cl9zdXBwb3J0ZWRfbW9kZSwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfYWN0aXZlX21vZGUsCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnNjc2lfc3lzZnNfc2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfdW5pcXVlX2lkLAorCSZkZXZfYXR0cl9ob3N0X2J1c3ksCisJJmRldl9hdHRyX2NtZF9wZXJfbHVuLAorCSZkZXZfYXR0cl9jYW5fcXVldWUsCisJJmRldl9hdHRyX3NnX3RhYmxlc2l6ZSwKKwkmZGV2X2F0dHJfdW5jaGVja2VkX2lzYV9kbWEsCisJJmRldl9hdHRyX3Byb2NfbmFtZSwKKwkmZGV2X2F0dHJfc2NhbiwKKwkmZGV2X2F0dHJfaHN0YXRlLAorCSZkZXZfYXR0cl9zdXBwb3J0ZWRfbW9kZSwKKwkmZGV2X2F0dHJfYWN0aXZlX21vZGUsCiAJTlVMTAogfTsKIAotc3RhdGljIHZvaWQgc2NzaV9kZXZpY2VfY2xzX3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2KQorc3RhdGljIHZvaWQgc2NzaV9kZXZpY2VfY2xzX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqY2xhc3NfZGV2KQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIApAQCAtMzIwLDcgKzMyOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc2Rldl9jbGFzcyA9IHsKIAkubmFtZQkJPSAic2NzaV9kZXZpY2UiLAotCS5yZWxlYXNlCT0gc2NzaV9kZXZpY2VfY2xzX3JlbGVhc2UsCisJLmRldl9yZWxlYXNlCT0gc2NzaV9kZXZpY2VfY2xzX3JlbGVhc2UsCiB9OwogCiAvKiBhbGwgcHJvYmluZyBpcyBkb25lIGluIHRoZSBpbmRpdmlkdWFsIC0+cHJvYmUgcm91dGluZXMgKi8KQEAgLTQyNCw3ICs0MzMsOCBAQAogICovCiAjZGVmaW5lIHNkZXZfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNkZXZfc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQkJCVwKK3NkZXZfc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCSAgIGNoYXIgKmJ1ZikJCQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsJCQkJCVwKIAlzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsJCQkJCVwKQEAgLTQ0OCw3ICs0NTgsOCBAQAogCXNkZXZfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQkJXAogCQkJCQkJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNkZXZfc3RvcmVfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKK3NkZXZfc3RvcmVfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CQkJCQlcCiAJc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CQkJCQlcCkBAIC00NjgsNyArNDc5LDggQEAKIAlzZGV2X3Nob3dfZnVuY3Rpb24oZmllbGQsICIlZFxuIikJCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zZGV2X3N0b3JlXyMjZmllbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCitzZGV2X3N0b3JlXyMjZmllbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKKwkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJCVwKIHsJCQkJCQkJCQlcCiAJaW50IHJldDsJCQkJCQkJXAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsJCQkJCVwKQEAgLTUxOSw3ICs1MzEsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotc2Rldl9zdG9yZV90aW1lb3V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3NkZXZfc3RvcmVfdGltZW91dCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlpbnQgdGltZW91dDsKQEAgLTUzMSw3ICs1NDQsOCBAQAogc3RhdGljIERFVklDRV9BVFRSKHRpbWVvdXQsIFNfSVJVR08gfCBTX0lXVVNSLCBzZGV2X3Nob3dfdGltZW91dCwgc2Rldl9zdG9yZV90aW1lb3V0KTsKIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX3Jlc2Nhbl9maWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdG9yZV9yZXNjYW5fZmllbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzY3NpX3Jlc2Nhbl9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gY291bnQ7CkBAIC01NDMsOCArNTU3LDkgQEAKIAlzY3NpX3JlbW92ZV9kZXZpY2UodG9fc2NzaV9kZXZpY2UoZGV2KSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNkZXZfc3RvcmVfZGVsZXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QKK3NkZXZfc3RvcmVfZGVsZXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IHJjOwogCkBAIC01NTksNyArNTc0LDggQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihkZWxldGUsIFNfSVdVU1IsIE5VTEwsIHNkZXZfc3RvcmVfZGVsZXRlKTsKIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX3N0YXRlX2ZpZWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RvcmVfc3RhdGVfZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwpAQCAtNTk2LDcgKzYxMiw4IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3N0YXRlX2ZpZWxkLCBzdG9yZV9zdGF0ZV9maWVsZCk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1zaG93X3F1ZXVlX3R5cGVfZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc2hvd19xdWV1ZV90eXBlX2ZpZWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCWNvbnN0IGNoYXIgKm5hbWUgPSAibm9uZSI7CkBAIC02MTIsNyArNjI5LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihxdWV1ZV90eXBlLCBTX0lSVUdPLCBzaG93X3F1ZXVlX3R5cGVfZmllbGQsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19pb3N0YXRfY291bnRlcmJpdHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc2hvd19pb3N0YXRfY291bnRlcmJpdHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgCQkJCWNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLCAoaW50KXNpemVvZihhdG9taWNfdCkgKiA4KTsKIH0KQEAgLTYyMSw3ICs2MzgsOCBAQAogCiAjZGVmaW5lIHNob3dfc2Rldl9pb3N0YXQoZmllbGQpCQkJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfaW9zdGF0XyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJCVwKK3Nob3dfaW9zdGF0XyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkgICAgY2hhciAqYnVmKQkJCQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsJCQlcCiAJdW5zaWduZWQgbG9uZyBsb25nIGNvdW50ID0gYXRvbWljX3JlYWQoJnNkZXYtPmZpZWxkKTsJCVwKQEAgLTY0NSw3ICs2NjMsNyBAQAogI2RlZmluZSBERUNMQVJFX0VWVF9TSE9XKG5hbWUsIENhcF9uYW1lKQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAogc2Rldl9zaG93X2V2dF8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCWNoYXIgKmJ1ZikJCQkJXAorCQkgICAgIGNoYXIgKmJ1ZikJCQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CQkJXAogCWludCB2YWwgPSB0ZXN0X2JpdChTREVWX0VWVF8jI0NhcF9uYW1lLCBzZGV2LT5zdXBwb3J0ZWRfZXZlbnRzKTtcCkBAIC02NTQsNyArNjcyLDcgQEAKIAogI2RlZmluZSBERUNMQVJFX0VWVF9TVE9SRShuYW1lLCBDYXBfbmFtZSkJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNkZXZfc3RvcmVfZXZ0XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCitzZGV2X3N0b3JlX2V2dF8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsJCQlcCkBAIC03MDcsOCArNzI1LDkgQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzZGV2X3N0b3JlX3F1ZXVlX2RlcHRoX3J3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkJIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90CitzZGV2X3N0b3JlX3F1ZXVlX2RlcHRoX3J3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWludCBkZXB0aCwgcmV0dmFsOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CkBAIC03MzMsOCArNzUyLDkgQEAKIAlfX0FUVFIocXVldWVfZGVwdGgsIFNfSVJVR08gfCBTX0lXVVNSLCBzZGV2X3Nob3dfcXVldWVfZGVwdGgsCiAJICAgICAgIHNkZXZfc3RvcmVfcXVldWVfZGVwdGhfcncpOwogCi1zdGF0aWMgc3NpemVfdCBzZGV2X3N0b3JlX3F1ZXVlX3R5cGVfcncoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAotCQkJCQlzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdAorc2Rldl9zdG9yZV9xdWV1ZV90eXBlX3J3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQgPSBzZGV2LT5ob3N0LT5ob3N0dDsKQEAgLTc4NiwxMyArODA2LDEzIEBACiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDFcbiIpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCWVycm9yID0gY2xhc3NfZGV2aWNlX2FkZCgmc2Rldi0+c2Rldl9jbGFzc2Rldik7CisJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2Rldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDJcbiIpOwogCQlnb3RvIGNsZWFuX2RldmljZTsKIAl9CiAKLQkvKiB0YWtlIGEgcmVmZXJlbmNlIGZvciB0aGUgc2Rldl9jbGFzc2RldjsgdGhpcyBpcworCS8qIHRha2UgYSByZWZlcmVuY2UgZm9yIHRoZSBzZGV2X2RldjsgdGhpcyBpcwogCSAqIHJlbGVhc2VkIGJ5IHRoZSBzZGV2X2NsYXNzIC5yZWxlYXNlICovCiAJZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCkBAIC04NTgsNyArODc4LDcgQEAKIAkJcmV0dXJuOwogCiAJYnNnX3VucmVnaXN0ZXJfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0JY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJnNkZXYtPnNkZXZfY2xhc3NkZXYpOworCWRldmljZV91bnJlZ2lzdGVyKCZzZGV2LT5zZGV2X2Rldik7CiAJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKIAlkZXZpY2VfZGVsKGRldik7CiAJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfREVMKTsKQEAgLTk1Miw5ICs5NzIsOSBAQAogRVhQT1JUX1NZTUJPTChzY3NpX3JlZ2lzdGVyX2ludGVyZmFjZSk7CiAKIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpjbGFzc19hdHRyX292ZXJyaWRkZW4oCi0JCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICoqYXR0cnMsCi0JCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphdHRyKQorc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpjbGFzc19hdHRyX292ZXJyaWRkZW4oCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICoqYXR0cnMsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQogewogCWludCBpOwogCkBAIC05NjYsMTAgKzk4NiwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGNsYXNzX2F0dHJfYWRkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2LAotCQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKK3N0YXRpYyBpbnQgY2xhc3NfYXR0cl9hZGQoc3RydWN0IGRldmljZSAqY2xhc3NkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQogewotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpiYXNlX2F0dHI7CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmJhc2VfYXR0cjsKIAogCS8qCiAJICogU3BhcmUgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byBjb3B5IHRoaW5ncyBpdCdzIG5vdCBpbnRlcmVzdGVkIGluLgpAQCAtOTg2LDcgKzEwMDYsNyBAQAogCQkJYXR0ci0+c3RvcmUgPSBiYXNlX2F0dHItPnN0b3JlOwogCX0KIAotCXJldHVybiBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xhc3NkZXYsIGF0dHIpOworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoY2xhc3NkZXYsIGF0dHIpOwogfQogCiAvKioKQEAgLTEwMDAsNyArMTAyMCw3IEBACiAKIAlpZiAoc2hvc3QtPmhvc3R0LT5zaG9zdF9hdHRycykgewogCQlmb3IgKGkgPSAwOyBzaG9zdC0+aG9zdHQtPnNob3N0X2F0dHJzW2ldOyBpKyspIHsKLQkJCWVycm9yID0gY2xhc3NfYXR0cl9hZGQoJnNob3N0LT5zaG9zdF9jbGFzc2RldiwKKwkJCWVycm9yID0gY2xhc3NfYXR0cl9hZGQoJnNob3N0LT5zaG9zdF9kZXYsCiAJCQkJCXNob3N0LT5ob3N0dC0+c2hvc3RfYXR0cnNbaV0pOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybiBlcnJvcjsKQEAgLTEwMTAsNyArMTAzMCw3IEBACiAJZm9yIChpID0gMDsgc2NzaV9zeXNmc19zaG9zdF9hdHRyc1tpXTsgaSsrKSB7CiAJCWlmICghY2xhc3NfYXR0cl9vdmVycmlkZGVuKHNob3N0LT5ob3N0dC0+c2hvc3RfYXR0cnMsCiAJCQkJCXNjc2lfc3lzZnNfc2hvc3RfYXR0cnNbaV0pKSB7Ci0JCQllcnJvciA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmc2hvc3QtPnNob3N0X2NsYXNzZGV2LAorCQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYsCiAJCQkJCXNjc2lfc3lzZnNfc2hvc3RfYXR0cnNbaV0pOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybiBlcnJvcjsKQEAgLTEwNDEsMTAgKzEwNjEsMTAgQEAKIAkJc2Rldi0+aG9zdC0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsCiAJCXNkZXYtPmx1bik7CiAJCi0JY2xhc3NfZGV2aWNlX2luaXRpYWxpemUoJnNkZXYtPnNkZXZfY2xhc3NkZXYpOwotCXNkZXYtPnNkZXZfY2xhc3NkZXYuZGV2ID0gJnNkZXYtPnNkZXZfZ2VuZGV2OwotCXNkZXYtPnNkZXZfY2xhc3NkZXYuY2xhc3MgPSAmc2Rldl9jbGFzczsKLQlzbnByaW50ZihzZGV2LT5zZGV2X2NsYXNzZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmc2Rldi0+c2Rldl9kZXYpOworCXNkZXYtPnNkZXZfZGV2LnBhcmVudCA9ICZzZGV2LT5zZGV2X2dlbmRldjsKKwlzZGV2LT5zZGV2X2Rldi5jbGFzcyA9ICZzZGV2X2NsYXNzOworCXNucHJpbnRmKHNkZXYtPnNkZXZfZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsCiAJCSAiJWQ6JWQ6JWQ6JWQiLCBzZGV2LT5ob3N0LT5ob3N0X25vLAogCQkgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1bik7CiAJc2Rldi0+c2NzaV9sZXZlbCA9IHN0YXJnZXQtPnNjc2lfbGV2ZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMKaW5kZXggMzY3N2ZiYi4uZWU4NDk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RndF9saWIuYwpAQCAtMTAzLDcgKzEwMyw2IEBACiAJaWYgKCFjbWQpCiAJCWdvdG8gcmVsZWFzZV9ycTsKIAotCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CiAJY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9IGRhdGFfZGlyOwogCWNtZC0+amlmZmllc19hdF9hbGxvYyA9IGppZmZpZXM7CiAJY21kLT5yZXF1ZXN0ID0gcnE7CkBAIC0zODIsNiArMzgxLDExIEBACiAJCXNjc2lfcmVsZWFzZV9idWZmZXJzKGNtZCk7CiAJCWdvdG8gdW5tYXBfcnE7CiAJfQorCS8qCisJICogd2UgdXNlIFJFUV9UWVBFX0JMT0NLX1BDIHNvIHNjc2lfaW5pdF9pbyBkb2Vzbid0IHNldCB0aGUKKwkgKiBsZW5ndGggZm9yIHVzLgorCSAqLworCWNtZC0+c2RiLmxlbmd0aCA9IHJxLT5kYXRhX2xlbjsKIAogCXJldHVybiAwOwogCkBAIC02MTcsOSArNjIxLDcgQEAKIHsKIAlpbnQgZXJyOwogCi0Jc2NzaV90Z3RfY21kX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNjc2lfdGd0X2NtZCIsCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNjc2lfdGd0X2NtZCksCi0JCQkJCSAgICAgICAwLCAwLCBOVUxMKTsKKwlzY3NpX3RndF9jbWRfY2FjaGUgPSAgS01FTV9DQUNIRShzY3NpX3RndF9jbWQsIDApOwogCWlmICghc2NzaV90Z3RfY21kX2NhY2hlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBiMTExOWRhLi42YjA5MmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtNzIsOCArNzIsOCBAQAogICogUmVkZWZpbmUgc28gdGhhdCB3ZSBjYW4gaGF2ZSBzYW1lIG5hbWVkIGF0dHJpYnV0ZXMgaW4gdGhlCiAgKiBzZGV2L3N0YXJnZXQvaG9zdCBvYmplY3RzLgogICovCi0jZGVmaW5lIEZDX0NMQVNTX0RFVklDRV9BVFRSKF9wcmVmaXgsX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQkJXAotc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgY2xhc3NfZGV2aWNlX2F0dHJfIyNfcHJlZml4IyNfIyNfbmFtZSA9IAlcCisjZGVmaW5lIEZDX0RFVklDRV9BVFRSKF9wcmVmaXgsX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQkJXAorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2aWNlX2F0dHJfIyNfcHJlZml4IyNfIyNfbmFtZSA9IAlcCiAJX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKIAogI2RlZmluZSBmY19lbnVtX25hbWVfc2VhcmNoKHRpdGxlLCB0YWJsZV90eXBlLCB0YWJsZSkJCQlcCkBAIC0zMjYsMjYgKzMyNiwyNiBAQAogCSAqIHBhcnQgb2YgdGhlIG1pZGxheWVyLiBBcyB0aGUgcmVtb3RlIHBvcnQgaXMgc3BlY2lmaWMgdG8gdGhlCiAJICogZmMgdHJhbnNwb3J0LCB3ZSBtdXN0IHByb3ZpZGUgdGhlIGF0dHJpYnV0ZSBjb250YWluZXIuCiAJICovCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9zdGFyZ2V0X2F0dHJzWworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfc3RhcmdldF9hdHRyc1sKIAkJCQkJCQlGQ19TVEFSR0VUX05VTV9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnN0YXJnZXRfYXR0cnNbRkNfU1RBUkdFVF9OVU1fQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqc3RhcmdldF9hdHRyc1tGQ19TVEFSR0VUX05VTV9BVFRSUyArIDFdOwogCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9ob3N0X2F0dHJzW0ZDX0hPU1RfTlVNX0FUVFJTXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaG9zdF9hdHRyc1tGQ19IT1NUX05VTV9BVFRSUyArIDFdOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfaG9zdF9hdHRyc1tGQ19IT1NUX05VTV9BVFRSU107CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbRkNfSE9TVF9OVU1fQVRUUlMgKyAxXTsKIAogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHJwb3J0X2F0dHJfY29udDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3Jwb3J0X2F0dHJzW0ZDX1JQT1JUX05VTV9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnJwb3J0X2F0dHJzW0ZDX1JQT1JUX05VTV9BVFRSUyArIDFdOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcnBvcnRfYXR0cnNbRkNfUlBPUlRfTlVNX0FUVFJTXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqcnBvcnRfYXR0cnNbRkNfUlBPUlRfTlVNX0FUVFJTICsgMV07CiAKIAlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciB2cG9ydF9hdHRyX2NvbnQ7Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV92cG9ydF9hdHRyc1tGQ19WUE9SVF9OVU1fQVRUUlNdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICp2cG9ydF9hdHRyc1tGQ19WUE9SVF9OVU1fQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3Zwb3J0X2F0dHJzW0ZDX1ZQT1JUX05VTV9BVFRSU107CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnZwb3J0X2F0dHJzW0ZDX1ZQT1JUX05VTV9BVFRSUyArIDFdOwogfTsKIAogI2RlZmluZSB0b19mY19pbnRlcm5hbCh0bXBsKQljb250YWluZXJfb2YodG1wbCwgc3RydWN0IGZjX2ludGVybmFsLCB0KQogCiBzdGF0aWMgaW50IGZjX3RhcmdldF9zZXR1cChzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqdGMsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCisJCQkgICBzdHJ1Y3QgZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRvX3Njc2lfdGFyZ2V0KGRldik7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc3RhcmdldCk7CkBAIC0zNzUsNyArMzc1LDcgQEAKIAkJCSAgICAgICBOVUxMKTsKIAogc3RhdGljIGludCBmY19ob3N0X3NldHVwKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Yywgc3RydWN0IGRldmljZSAqZGV2LAotCQkJIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCisJCQkgc3RydWN0IGRldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChkZXYpOwogCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CkBAIC02ODIsOSArNjgyLDEwIEBACiAKICNkZWZpbmUgZmNfcnBvcnRfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osIGNhc3QpCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19mY19ycG9ydF8jI2ZpZWxkIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCQlcCitzaG93X2ZjX3Jwb3J0XyMjZmllbGQgKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJCVwKKwkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChjZGV2KTsJXAorCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBvcnQoZGV2KTsJCVwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsJCVwKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CVwKIAlpZiAoKGktPmYtPmdldF9ycG9ydF8jI2ZpZWxkKSAmJgkJCQlcCkBAIC02OTcsMTEgKzY5OCwxMiBAQAogCiAjZGVmaW5lIGZjX3Jwb3J0X3N0b3JlX2Z1bmN0aW9uKGZpZWxkKQkJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXN0b3JlX2ZjX3Jwb3J0XyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAlcCi0JCQkgICBzaXplX3QgY291bnQpCQkJCVwKK3N0b3JlX2ZjX3Jwb3J0XyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsCXNpemVfdCBjb3VudCkJCQlcCiB7CQkJCQkJCQkJXAogCWludCB2YWw7CQkJCQkJCVwKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGNkZXYpOwlcCisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChkZXYpOwkJXAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOwkJXAogCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsJXAogCWNoYXIgKmNwOwkJCQkJCQlcCkBAIC03MTgsNTggKzcyMCw2MCBAQAogCiAjZGVmaW5lIGZjX3Jwb3J0X3JkX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6KQkJCVwKIAlmY19ycG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKQkJXAotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKHJwb3J0LCBmaWVsZCwgU19JUlVHTywJCQlcCitzdGF0aWMgRkNfREVWSUNFX0FUVFIocnBvcnQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKIAkJCSBzaG93X2ZjX3Jwb3J0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgZmNfcnBvcnRfcmRfYXR0cl9jYXN0KGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgY2FzdCkJCVwKIAlmY19ycG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKGNhc3QpKQlcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIocnBvcnQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUihycG9ydCwgZmllbGQsIFNfSVJVR08sCQkJXAogCQkJICBzaG93X2ZjX3Jwb3J0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgZmNfcnBvcnRfcndfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3opCQkJXAogCWZjX3Jwb3J0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCApCQlcCiAJZmNfcnBvcnRfc3RvcmVfZnVuY3Rpb24oZmllbGQpCQkJCQlcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIocnBvcnQsIGZpZWxkLCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUihycG9ydCwgZmllbGQsIFNfSVJVR08gfCBTX0lXVVNSLAkJXAogCQkJc2hvd19mY19ycG9ydF8jI2ZpZWxkLAkJCQlcCiAJCQlzdG9yZV9mY19ycG9ydF8jI2ZpZWxkKQogCiAKICNkZWZpbmUgZmNfcHJpdmF0ZV9ycG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgY2FzdCkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfZmNfcnBvcnRfIyNmaWVsZCAoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19mY19ycG9ydF8jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBvcnQoY2Rldik7CVwKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGRldik7CQlcCiAJcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc3osIGZvcm1hdF9zdHJpbmcsIGNhc3QgcnBvcnQtPmZpZWxkKTsgCVwKIH0KIAogI2RlZmluZSBmY19wcml2YXRlX3Jwb3J0X3JkX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6KQkJXAogCWZjX3ByaXZhdGVfcnBvcnRfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osICkJXAotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKHJwb3J0LCBmaWVsZCwgU19JUlVHTywJCQlcCitzdGF0aWMgRkNfREVWSUNFX0FUVFIocnBvcnQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKIAkJCSBzaG93X2ZjX3Jwb3J0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgZmNfcHJpdmF0ZV9ycG9ydF9yZF9hdHRyX2Nhc3QoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCBjYXN0KQlcCiAJZmNfcHJpdmF0ZV9ycG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKGNhc3QpKSBcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIocnBvcnQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUihycG9ydCwgZmllbGQsIFNfSVJVR08sCQkJXAogCQkJICBzaG93X2ZjX3Jwb3J0XyMjZmllbGQsIE5VTEwpCiAKIAogI2RlZmluZSBmY19wcml2YXRlX3Jwb3J0X3JkX2VudW1fYXR0cih0aXRsZSwgbWF4bGVuKQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X2ZjX3Jwb3J0XyMjdGl0bGUgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfZmNfcnBvcnRfIyN0aXRsZSAoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBvcnQoY2Rldik7CVwKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGRldik7CQlcCiAJY29uc3QgY2hhciAqbmFtZTsJCQkJCQlcCiAJbmFtZSA9IGdldF9mY18jI3RpdGxlIyNfbmFtZShycG9ydC0+dGl0bGUpOwkJCVwKIAlpZiAoIW5hbWUpCQkJCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAogCXJldHVybiBzbnByaW50ZihidWYsIG1heGxlbiwgIiVzXG4iLCBuYW1lKTsJCQlcCiB9CQkJCQkJCQkJXAotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKHJwb3J0LCB0aXRsZSwgU19JUlVHTywJCQlcCitzdGF0aWMgRkNfREVWSUNFX0FUVFIocnBvcnQsIHRpdGxlLCBTX0lSVUdPLAkJCVwKIAkJCXNob3dfZmNfcnBvcnRfIyN0aXRsZSwgTlVMTCkKIAogCiAjZGVmaW5lIFNFVFVQX1JQT1JUX0FUVFJJQlVURV9SRChmaWVsZCkJCQkJCVwKLQlpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyX3Jwb3J0XyMjZmllbGQ7IFwKKwlpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XSA9IGRldmljZV9hdHRyX3Jwb3J0XyMjZmllbGQ7IFwKIAlpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XS5hdHRyLm1vZGUgPSBTX0lSVUdPOwkJXAogCWktPnByaXZhdGVfcnBvcnRfYXR0cnNbY291bnRdLnN0b3JlID0gTlVMTDsJCQlcCiAJaS0+cnBvcnRfYXR0cnNbY291bnRdID0gJmktPnByaXZhdGVfcnBvcnRfYXR0cnNbY291bnRdOwkJXApAQCAtNzc3LDE0ICs3ODEsMTQgQEAKIAkJY291bnQrKwogCiAjZGVmaW5lIFNFVFVQX1BSSVZBVEVfUlBPUlRfQVRUUklCVVRFX1JEKGZpZWxkKQkJCQlcCi0JaS0+cHJpdmF0ZV9ycG9ydF9hdHRyc1tjb3VudF0gPSBjbGFzc19kZXZpY2VfYXR0cl9ycG9ydF8jI2ZpZWxkOyBcCisJaS0+cHJpdmF0ZV9ycG9ydF9hdHRyc1tjb3VudF0gPSBkZXZpY2VfYXR0cl9ycG9ydF8jI2ZpZWxkOyBcCiAJaS0+cHJpdmF0ZV9ycG9ydF9hdHRyc1tjb3VudF0uYXR0ci5tb2RlID0gU19JUlVHTzsJCVwKIAlpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XS5zdG9yZSA9IE5VTEw7CQkJXAogCWktPnJwb3J0X2F0dHJzW2NvdW50XSA9ICZpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XTsJCVwKIAljb3VudCsrCiAKICNkZWZpbmUgU0VUVVBfUlBPUlRfQVRUUklCVVRFX1JXKGZpZWxkKQkJCQkJXAotCWktPnByaXZhdGVfcnBvcnRfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfcnBvcnRfIyNmaWVsZDsgXAorCWktPnByaXZhdGVfcnBvcnRfYXR0cnNbY291bnRdID0gZGV2aWNlX2F0dHJfcnBvcnRfIyNmaWVsZDsgXAogCWlmICghaS0+Zi0+c2V0X3Jwb3J0XyMjZmllbGQpIHsJCQkJCVwKIAkJaS0+cHJpdmF0ZV9ycG9ydF9hdHRyc1tjb3VudF0uYXR0ci5tb2RlID0gU19JUlVHTzsJXAogCQlpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XS5zdG9yZSA9IE5VTEw7CQlcCkBAIC03OTUsNyArNzk5LDcgQEAKIAogI2RlZmluZSBTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SVyhmaWVsZCkJCQkJXAogewkJCQkJCQkJCVwKLQlpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyX3Jwb3J0XyMjZmllbGQ7IFwKKwlpLT5wcml2YXRlX3Jwb3J0X2F0dHJzW2NvdW50XSA9IGRldmljZV9hdHRyX3Jwb3J0XyMjZmllbGQ7IFwKIAlpLT5ycG9ydF9hdHRyc1tjb3VudF0gPSAmaS0+cHJpdmF0ZV9ycG9ydF9hdHRyc1tjb3VudF07CQlcCiAJY291bnQrKzsJCQkJCQkJXAogfQpAQCAtODA4LDE0ICs4MTIsMTUgQEAKIGZjX3ByaXZhdGVfcnBvcnRfcmRfYXR0cihtYXhmcmFtZV9zaXplLCAiJXUgYnl0ZXNcbiIsIDIwKTsKIAogc3RhdGljIHNzaXplX3QKLXNob3dfZmNfcnBvcnRfc3VwcG9ydGVkX2NsYXNzZXMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfZmNfcnBvcnRfc3VwcG9ydGVkX2NsYXNzZXMgKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGNkZXYpOworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBvcnQoZGV2KTsKIAlpZiAocnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID09IEZDX0NPU19VTlNQRUNJRklFRCkKIAkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICJ1bnNwZWNpZmllZFxuIik7CiAJcmV0dXJuIGdldF9mY19jb3NfbmFtZXMocnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzLCBidWYpOwogfQotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKHJwb3J0LCBzdXBwb3J0ZWRfY2xhc3NlcywgU19JUlVHTywKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUihycG9ydCwgc3VwcG9ydGVkX2NsYXNzZXMsIFNfSVJVR08sCiAJCXNob3dfZmNfcnBvcnRfc3VwcG9ydGVkX2NsYXNzZXMsIE5VTEwpOwogCiAvKiBEeW5hbWljIFJlbW90ZSBQb3J0IEF0dHJpYnV0ZXMgKi8KQEAgLTgyNSwxMSArODMwLDExIEBACiAgKi8KIGZjX3Jwb3J0X3Nob3dfZnVuY3Rpb24oZGV2X2xvc3NfdG1vLCAiJWRcbiIsIDIwLCApCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfZmNfcnBvcnRfZGV2X2xvc3NfdG1vKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgIHNpemVfdCBjb3VudCkKK3N0b3JlX2ZjX3Jwb3J0X2Rldl9sb3NzX3RtbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWludCB2YWw7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChjZGV2KTsKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGRldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCWNoYXIgKmNwOwpAQCAtODQ0LDcgKzg0OSw3IEBACiAJaS0+Zi0+c2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyhycG9ydCwgdmFsKTsKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIocnBvcnQsIGRldl9sb3NzX3RtbywgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgRkNfREVWSUNFX0FUVFIocnBvcnQsIGRldl9sb3NzX3RtbywgU19JUlVHTyB8IFNfSVdVU1IsCiAJCXNob3dfZmNfcnBvcnRfZGV2X2xvc3NfdG1vLCBzdG9yZV9mY19ycG9ydF9kZXZfbG9zc190bW8pOwogCiAKQEAgLTg1NSw5ICs4NjAsMTAgQEAKIGZjX3ByaXZhdGVfcnBvcnRfcmRfYXR0cihwb3J0X2lkLCAiMHglMDZ4XG4iLCAyMCk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1zaG93X2ZjX3Jwb3J0X3JvbGVzIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzaG93X2ZjX3Jwb3J0X3JvbGVzIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGNkZXYpOworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBvcnQoZGV2KTsKIAogCS8qIGlkZW50aWZ5IGFueSByb2xlcyB0aGF0IGFyZSBwb3J0X2lkIHNwZWNpZmljICovCiAJaWYgKChycG9ydC0+cG9ydF9pZCAhPSAtMSkgJiYKQEAgLTg4Myw3ICs4ODksNyBAQAogCQlyZXR1cm4gZ2V0X2ZjX3BvcnRfcm9sZXNfbmFtZXMocnBvcnQtPnJvbGVzLCBidWYpOwogCX0KIH0KLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUihycG9ydCwgcm9sZXMsIFNfSVJVR08sCitzdGF0aWMgRkNfREVWSUNFX0FUVFIocnBvcnQsIHJvbGVzLCBTX0lSVUdPLAogCQlzaG93X2ZjX3Jwb3J0X3JvbGVzLCBOVUxMKTsKIAogZmNfcHJpdmF0ZV9ycG9ydF9yZF9lbnVtX2F0dHIocG9ydF9zdGF0ZSwgRkNfUE9SVFNUQVRFX01BWF9OQU1FTEVOKTsKQEAgLTg5Myw5ICs4OTksMTAgQEAKICAqIGZhc3RfaW9fZmFpbF90bW8gYXR0cmlidXRlCiAgKi8KIHN0YXRpYyBzc2l6ZV90Ci1zaG93X2ZjX3Jwb3J0X2Zhc3RfaW9fZmFpbF90bW8gKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfZmNfcnBvcnRfZmFzdF9pb19mYWlsX3RtbyAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChjZGV2KTsKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGRldik7CiAKIAlpZiAocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPT0gLTEpCiAJCXJldHVybiBzbnByaW50ZihidWYsIDUsICJvZmZcbiIpOwpAQCAtOTAzLDEyICs5MTAsMTMgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX2ZjX3Jwb3J0X2Zhc3RfaW9fZmFpbF90bW8oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAotCQkJICAgc2l6ZV90IGNvdW50KQorc3RvcmVfZmNfcnBvcnRfZmFzdF9pb19mYWlsX3RtbyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQpCiB7CiAJaW50IHZhbDsKIAljaGFyICpjcDsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Jwb3J0KGNkZXYpOworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBvcnQoZGV2KTsKIAogCWlmICgocnBvcnQtPnBvcnRfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX0JMT0NLRUQpIHx8CiAJICAgIChycG9ydC0+cG9ydF9zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfREVMRVRFRCkgfHwKQEAgLTkyNSw3ICs5MzMsNyBAQAogCX0KIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIocnBvcnQsIGZhc3RfaW9fZmFpbF90bW8sIFNfSVJVR08gfCBTX0lXVVNSLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKHJwb3J0LCBmYXN0X2lvX2ZhaWxfdG1vLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlzaG93X2ZjX3Jwb3J0X2Zhc3RfaW9fZmFpbF90bW8sIHN0b3JlX2ZjX3Jwb3J0X2Zhc3RfaW9fZmFpbF90bW8pOwogCiAKQEAgLTk0MSw5ICs5NDksMTAgQEAKICAqLwogI2RlZmluZSBmY19zdGFyZ2V0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCBjYXN0KQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19mY19zdGFyZ2V0XyMjZmllbGQgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfZmNfc3RhcmdldF8jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChjZGV2KTsJXAorCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGRldik7CVwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsJXAogCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsJXAogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHN0YXJnZXQpOwkJXApAQCAtOTU3LDE2ICs5NjYsMTYgQEAKIAogI2RlZmluZSBmY19zdGFyZ2V0X3JkX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6KQkJCVwKIAlmY19zdGFyZ2V0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCApCQlcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoc3RhcmdldCwgZmllbGQsIFNfSVJVR08sCQkJXAorc3RhdGljIEZDX0RFVklDRV9BVFRSKHN0YXJnZXQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKIAkJCSBzaG93X2ZjX3N0YXJnZXRfIyNmaWVsZCwgTlVMTCkKIAogI2RlZmluZSBmY19zdGFyZ2V0X3JkX2F0dHJfY2FzdChmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osIGNhc3QpCQlcCiAJZmNfc3RhcmdldF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKGNhc3QpKQlcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoc3RhcmdldCwgZmllbGQsIFNfSVJVR08sCQkJXAorc3RhdGljIEZDX0RFVklDRV9BVFRSKHN0YXJnZXQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKIAkJCSAgc2hvd19mY19zdGFyZ2V0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgU0VUVVBfU1RBUkdFVF9BVFRSSUJVVEVfUkQoZmllbGQpCQkJCVwKLQlpLT5wcml2YXRlX3N0YXJnZXRfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfc3RhcmdldF8jI2ZpZWxkOyBcCisJaS0+cHJpdmF0ZV9zdGFyZ2V0X2F0dHJzW2NvdW50XSA9IGRldmljZV9hdHRyX3N0YXJnZXRfIyNmaWVsZDsgXAogCWktPnByaXZhdGVfc3RhcmdldF9hdHRyc1tjb3VudF0uYXR0ci5tb2RlID0gU19JUlVHTzsJCVwKIAlpLT5wcml2YXRlX3N0YXJnZXRfYXR0cnNbY291bnRdLnN0b3JlID0gTlVMTDsJCQlcCiAJaS0+c3RhcmdldF9hdHRyc1tjb3VudF0gPSAmaS0+cHJpdmF0ZV9zdGFyZ2V0X2F0dHJzW2NvdW50XTsJXApAQCAtOTc0LDcgKzk4Myw3IEBACiAJCWNvdW50KysKIAogI2RlZmluZSBTRVRVUF9TVEFSR0VUX0FUVFJJQlVURV9SVyhmaWVsZCkJCQkJXAotCWktPnByaXZhdGVfc3RhcmdldF9hdHRyc1tjb3VudF0gPSBjbGFzc19kZXZpY2VfYXR0cl9zdGFyZ2V0XyMjZmllbGQ7IFwKKwlpLT5wcml2YXRlX3N0YXJnZXRfYXR0cnNbY291bnRdID0gZGV2aWNlX2F0dHJfc3RhcmdldF8jI2ZpZWxkOyBcCiAJaWYgKCFpLT5mLT5zZXRfc3RhcmdldF8jI2ZpZWxkKSB7CQkJCVwKIAkJaS0+cHJpdmF0ZV9zdGFyZ2V0X2F0dHJzW2NvdW50XS5hdHRyLm1vZGUgPSBTX0lSVUdPOwlcCiAJCWktPnByaXZhdGVfc3RhcmdldF9hdHRyc1tjb3VudF0uc3RvcmUgPSBOVUxMOwkJXApAQCAtOTk1LDkgKzEwMDQsMTAgQEAKIAogI2RlZmluZSBmY192cG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgY2FzdCkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X2ZjX3Zwb3J0XyMjZmllbGQgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfZmNfdnBvcnRfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LCAJCQkJXAorCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3QgZmNfdnBvcnQgKnZwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Zwb3J0KGNkZXYpOwlcCisJc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b192cG9ydChkZXYpOwkJXAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdnBvcnRfdG9fc2hvc3QodnBvcnQpOwkJXAogCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsJXAogCWlmICgoaS0+Zi0+Z2V0X3Zwb3J0XyMjZmllbGQpICYmCQkJCVwKQEAgLTEwMDgsMTEgKzEwMTgsMTIgQEAKIAogI2RlZmluZSBmY192cG9ydF9zdG9yZV9mdW5jdGlvbihmaWVsZCkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9mY192cG9ydF8jI2ZpZWxkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwJXAotCQkJICAgc2l6ZV90IGNvdW50KQkJCQlcCitzdG9yZV9mY192cG9ydF8jI2ZpZWxkKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCQkJXAorCQkgICAgICAgY29uc3QgY2hhciAqYnVmLAlzaXplX3QgY291bnQpCQkJXAogewkJCQkJCQkJCVwKIAlpbnQgdmFsOwkJCQkJCQlcCi0Jc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b192cG9ydChjZGV2KTsJXAorCXN0cnVjdCBmY192cG9ydCAqdnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fdnBvcnQoZGV2KTsJCVwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHZwb3J0X3RvX3Nob3N0KHZwb3J0KTsJCVwKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CVwKIAljaGFyICpjcDsJCQkJCQkJXApAQCAtMTAyNywxMCArMTAzOCwxMSBAQAogCiAjZGVmaW5lIGZjX3Zwb3J0X3N0b3JlX3N0cl9mdW5jdGlvbihmaWVsZCwgc2xlbikJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc3RvcmVfZmNfdnBvcnRfIyNmaWVsZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCVwKLQkJCSAgIHNpemVfdCBjb3VudCkJCQkJXAorc3RvcmVfZmNfdnBvcnRfIyNmaWVsZChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCAJCQlcCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsCXNpemVfdCBjb3VudCkJCQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBmY192cG9ydCAqdnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fdnBvcnQoY2Rldik7CVwKKwlzdHJ1Y3QgZmNfdnBvcnQgKnZwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Zwb3J0KGRldik7CQlcCiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB2cG9ydF90b19zaG9zdCh2cG9ydCk7CQlcCiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwlcCiAJdW5zaWduZWQgaW50IGNudD1jb3VudDsJCQkJCQlcCkBAIC0xMDQ3LDM2ICsxMDU5LDM4IEBACiAKICNkZWZpbmUgZmNfdnBvcnRfcmRfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3opCQkJXAogCWZjX3Zwb3J0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCApCQlcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIodnBvcnQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUih2cG9ydCwgZmllbGQsIFNfSVJVR08sCQkJXAogCQkJIHNob3dfZmNfdnBvcnRfIyNmaWVsZCwgTlVMTCkKIAogI2RlZmluZSBmY192cG9ydF9yZF9hdHRyX2Nhc3QoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCBjYXN0KQkJXAogCWZjX3Zwb3J0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCAoY2FzdCkpCVwKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUih2cG9ydCwgZmllbGQsIFNfSVJVR08sCQkJXAorc3RhdGljIEZDX0RFVklDRV9BVFRSKHZwb3J0LCBmaWVsZCwgU19JUlVHTywJCQlcCiAJCQkgIHNob3dfZmNfdnBvcnRfIyNmaWVsZCwgTlVMTCkKIAogI2RlZmluZSBmY192cG9ydF9yd19hdHRyKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeikJCQlcCiAJZmNfdnBvcnRfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osICkJCVwKIAlmY192cG9ydF9zdG9yZV9mdW5jdGlvbihmaWVsZCkJCQkJCVwKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUih2cG9ydCwgZmllbGQsIFNfSVJVR08gfCBTX0lXVVNSLAkJXAorc3RhdGljIEZDX0RFVklDRV9BVFRSKHZwb3J0LCBmaWVsZCwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCiAJCQlzaG93X2ZjX3Zwb3J0XyMjZmllbGQsCQkJCVwKIAkJCXN0b3JlX2ZjX3Zwb3J0XyMjZmllbGQpCiAKICNkZWZpbmUgZmNfcHJpdmF0ZV92cG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgY2FzdCkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfZmNfdnBvcnRfIyNmaWVsZCAoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19mY192cG9ydF8jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b192cG9ydChjZGV2KTsJXAorCXN0cnVjdCBmY192cG9ydCAqdnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fdnBvcnQoZGV2KTsJCVwKIAlyZXR1cm4gc25wcmludGYoYnVmLCBzeiwgZm9ybWF0X3N0cmluZywgY2FzdCB2cG9ydC0+ZmllbGQpOyAJXAogfQogCiAjZGVmaW5lIGZjX3ByaXZhdGVfdnBvcnRfc3RvcmVfdTMyX2Z1bmN0aW9uKGZpZWxkKQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9mY192cG9ydF8jI2ZpZWxkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwJXAotCQkJICAgc2l6ZV90IGNvdW50KQkJCQlcCitzdG9yZV9mY192cG9ydF8jI2ZpZWxkKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCQkJXAorCQkgICAgICAgY29uc3QgY2hhciAqYnVmLAlzaXplX3QgY291bnQpCQkJXAogewkJCQkJCQkJCVwKIAl1MzIgdmFsOwkJCQkJCQlcCi0Jc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b192cG9ydChjZGV2KTsJXAorCXN0cnVjdCBmY192cG9ydCAqdnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fdnBvcnQoZGV2KTsJCVwKIAljaGFyICpjcDsJCQkJCQkJXAogCWlmICh2cG9ydC0+ZmxhZ3MgJiAoRkNfVlBPUlRfREVMIHwgRkNfVlBPUlRfQ1JFQVRJTkcpKQkJXAogCQlyZXR1cm4gLUVCVVNZOwkJCQkJCVwKQEAgLTEwOTAsMzkgKzExMDQsNDEgQEAKIAogI2RlZmluZSBmY19wcml2YXRlX3Zwb3J0X3JkX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6KQkJXAogCWZjX3ByaXZhdGVfdnBvcnRfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osICkJXAotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKHZwb3J0LCBmaWVsZCwgU19JUlVHTywJCQlcCitzdGF0aWMgRkNfREVWSUNFX0FUVFIodnBvcnQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKIAkJCSBzaG93X2ZjX3Zwb3J0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgZmNfcHJpdmF0ZV92cG9ydF9yZF9hdHRyX2Nhc3QoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCBjYXN0KQlcCiAJZmNfcHJpdmF0ZV92cG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKGNhc3QpKSBcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIodnBvcnQsIGZpZWxkLCBTX0lSVUdPLAkJCVwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUih2cG9ydCwgZmllbGQsIFNfSVJVR08sCQkJXAogCQkJICBzaG93X2ZjX3Zwb3J0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgZmNfcHJpdmF0ZV92cG9ydF9yd191MzJfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3opCQlcCiAJZmNfcHJpdmF0ZV92cG9ydF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKQlcCiAJZmNfcHJpdmF0ZV92cG9ydF9zdG9yZV91MzJfZnVuY3Rpb24oZmllbGQpCQkJXAotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKHZwb3J0LCBmaWVsZCwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCitzdGF0aWMgRkNfREVWSUNFX0FUVFIodnBvcnQsIGZpZWxkLCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKIAkJCXNob3dfZmNfdnBvcnRfIyNmaWVsZCwJCQkJXAogCQkJc3RvcmVfZmNfdnBvcnRfIyNmaWVsZCkKIAogCiAjZGVmaW5lIGZjX3ByaXZhdGVfdnBvcnRfcmRfZW51bV9hdHRyKHRpdGxlLCBtYXhsZW4pCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfZmNfdnBvcnRfIyN0aXRsZSAoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19mY192cG9ydF8jI3RpdGxlIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJCVwKKwkJICAgICAgIGNoYXIgKmJ1ZikJCQkJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b192cG9ydChjZGV2KTsJXAorCXN0cnVjdCBmY192cG9ydCAqdnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fdnBvcnQoZGV2KTsJCVwKIAljb25zdCBjaGFyICpuYW1lOwkJCQkJCVwKIAluYW1lID0gZ2V0X2ZjXyMjdGl0bGUjI19uYW1lKHZwb3J0LT50aXRsZSk7CQkJXAogCWlmICghbmFtZSkJCQkJCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgbWF4bGVuLCAiJXNcbiIsIG5hbWUpOwkJCVwKIH0JCQkJCQkJCQlcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIodnBvcnQsIHRpdGxlLCBTX0lSVUdPLAkJCVwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUih2cG9ydCwgdGl0bGUsIFNfSVJVR08sCQkJXAogCQkJc2hvd19mY192cG9ydF8jI3RpdGxlLCBOVUxMKQogCiAKICNkZWZpbmUgU0VUVVBfVlBPUlRfQVRUUklCVVRFX1JEKGZpZWxkKQkJCQkJXAotCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAorCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAogCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdLmF0dHIubW9kZSA9IFNfSVJVR087CQlcCiAJaS0+cHJpdmF0ZV92cG9ydF9hdHRyc1tjb3VudF0uc3RvcmUgPSBOVUxMOwkJCVwKIAlpLT52cG9ydF9hdHRyc1tjb3VudF0gPSAmaS0+cHJpdmF0ZV92cG9ydF9hdHRyc1tjb3VudF07CQlcCkBAIC0xMTMxLDIxICsxMTQ3LDIxIEBACiAJLyogTk9URTogQWJvdmUgTUFDUk8gZGlmZmVyczogY2hlY2tzIGZ1bmN0aW9uIG5vdCBzaG93IGJpdCAqLwogCiAjZGVmaW5lIFNFVFVQX1BSSVZBVEVfVlBPUlRfQVRUUklCVVRFX1JEKGZpZWxkKQkJCQlcCi0JaS0+cHJpdmF0ZV92cG9ydF9hdHRyc1tjb3VudF0gPSBjbGFzc19kZXZpY2VfYXR0cl92cG9ydF8jI2ZpZWxkOyBcCisJaS0+cHJpdmF0ZV92cG9ydF9hdHRyc1tjb3VudF0gPSBkZXZpY2VfYXR0cl92cG9ydF8jI2ZpZWxkOyBcCiAJaS0+cHJpdmF0ZV92cG9ydF9hdHRyc1tjb3VudF0uYXR0ci5tb2RlID0gU19JUlVHTzsJCVwKIAlpLT5wcml2YXRlX3Zwb3J0X2F0dHJzW2NvdW50XS5zdG9yZSA9IE5VTEw7CQkJXAogCWktPnZwb3J0X2F0dHJzW2NvdW50XSA9ICZpLT5wcml2YXRlX3Zwb3J0X2F0dHJzW2NvdW50XTsJCVwKIAljb3VudCsrCiAKICNkZWZpbmUgU0VUVVBfVlBPUlRfQVRUUklCVVRFX1dSKGZpZWxkKQkJCQkJXAotCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAorCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAogCWktPnZwb3J0X2F0dHJzW2NvdW50XSA9ICZpLT5wcml2YXRlX3Zwb3J0X2F0dHJzW2NvdW50XTsJCVwKIAlpZiAoaS0+Zi0+ZmllbGQpCQkJCQkJXAogCQljb3VudCsrCiAJLyogTk9URTogQWJvdmUgTUFDUk8gZGlmZmVyczogY2hlY2tzIGZ1bmN0aW9uICovCiAKICNkZWZpbmUgU0VUVVBfVlBPUlRfQVRUUklCVVRFX1JXKGZpZWxkKQkJCQkJXAotCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAorCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAogCWlmICghaS0+Zi0+c2V0X3Zwb3J0XyMjZmllbGQpIHsJCQkJCVwKIAkJaS0+cHJpdmF0ZV92cG9ydF9hdHRyc1tjb3VudF0uYXR0ci5tb2RlID0gU19JUlVHTzsJXAogCQlpLT5wcml2YXRlX3Zwb3J0X2F0dHJzW2NvdW50XS5zdG9yZSA9IE5VTEw7CQlcCkBAIC0xMTU2LDcgKzExNzIsNyBAQAogCiAjZGVmaW5lIFNFVFVQX1BSSVZBVEVfVlBPUlRfQVRUUklCVVRFX1JXKGZpZWxkKQkJCQlcCiB7CQkJCQkJCQkJXAotCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAorCWktPnByaXZhdGVfdnBvcnRfYXR0cnNbY291bnRdID0gZGV2aWNlX2F0dHJfdnBvcnRfIyNmaWVsZDsgXAogCWktPnZwb3J0X2F0dHJzW2NvdW50XSA9ICZpLT5wcml2YXRlX3Zwb3J0X2F0dHJzW2NvdW50XTsJCVwKIAljb3VudCsrOwkJCQkJCQlcCiB9CkBAIC0xMTc2LDM1ICsxMTkyLDM2IEBACiBmY19wcml2YXRlX3Zwb3J0X3JkX2F0dHJfY2FzdChwb3J0X25hbWUsICIweCVsbHhcbiIsIDIwLCB1bnNpZ25lZCBsb25nIGxvbmcpOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19mY192cG9ydF9yb2xlcyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19mY192cG9ydF9yb2xlcyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b192cG9ydChjZGV2KTsKKwlzdHJ1Y3QgZmNfdnBvcnQgKnZwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Zwb3J0KGRldik7CiAKIAlpZiAodnBvcnQtPnJvbGVzID09IEZDX1BPUlRfUk9MRV9VTktOT1dOKQogCQlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgInVua25vd25cbiIpOwogCXJldHVybiBnZXRfZmNfcG9ydF9yb2xlc19uYW1lcyh2cG9ydC0+cm9sZXMsIGJ1Zik7CiB9Ci1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIodnBvcnQsIHJvbGVzLCBTX0lSVUdPLCBzaG93X2ZjX3Zwb3J0X3JvbGVzLCBOVUxMKTsKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUih2cG9ydCwgcm9sZXMsIFNfSVJVR08sIHNob3dfZmNfdnBvcnRfcm9sZXMsIE5VTEwpOwogCiBmY19wcml2YXRlX3Zwb3J0X3JkX2VudW1fYXR0cih2cG9ydF90eXBlLCBGQ19QT1JUVFlQRV9NQVhfTkFNRUxFTik7CiAKIGZjX3ByaXZhdGVfdnBvcnRfc2hvd19mdW5jdGlvbihzeW1ib2xpY19uYW1lLCAiJXNcbiIsCiAJCUZDX1ZQT1JUX1NZTUJPTElDX05BTUVMRU4gKyAxLCApCiBmY192cG9ydF9zdG9yZV9zdHJfZnVuY3Rpb24oc3ltYm9saWNfbmFtZSwgRkNfVlBPUlRfU1lNQk9MSUNfTkFNRUxFTikKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUih2cG9ydCwgc3ltYm9saWNfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgRkNfREVWSUNFX0FUVFIodnBvcnQsIHN5bWJvbGljX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLAogCQlzaG93X2ZjX3Zwb3J0X3N5bWJvbGljX25hbWUsIHN0b3JlX2ZjX3Zwb3J0X3N5bWJvbGljX25hbWUpOwogCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfZmNfdnBvcnRfZGVsZXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgIHNpemVfdCBjb3VudCkKK3N0b3JlX2ZjX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgZmNfdnBvcnQgKnZwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Zwb3J0KGNkZXYpOworCXN0cnVjdCBmY192cG9ydCAqdnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fdnBvcnQoZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHZwb3J0X3RvX3Nob3N0KHZwb3J0KTsKIAogCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZ2cG9ydC0+dnBvcnRfZGVsZXRlX3dvcmspOwogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUih2cG9ydCwgdnBvcnRfZGVsZXRlLCBTX0lXVVNSLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKHZwb3J0LCB2cG9ydF9kZWxldGUsIFNfSVdVU1IsCiAJCQlOVUxMLCBzdG9yZV9mY192cG9ydF9kZWxldGUpOwogCiAKQEAgLTEyMTMsMTAgKzEyMzAsMTEgQEAKICAqICBXcml0ZSAiMSIgdG8gZGlzYWJsZSwgd3JpdGUgIjAiIHRvIGVuYWJsZQogICovCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfZmNfdnBvcnRfZGlzYWJsZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCitzdG9yZV9mY192cG9ydF9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsCiAJCQkgICBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGZjX3Zwb3J0ICp2cG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b192cG9ydChjZGV2KTsKKwlzdHJ1Y3QgZmNfdnBvcnQgKnZwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Zwb3J0KGRldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB2cG9ydF90b19zaG9zdCh2cG9ydCk7CiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCWludCBzdGF0OwpAQCAtMTIzNiw3ICsxMjU0LDcgQEAKIAlzdGF0ID0gaS0+Zi0+dnBvcnRfZGlzYWJsZSh2cG9ydCwgKCgqYnVmID09ICcwJykgPyBmYWxzZSA6IHRydWUpKTsKIAlyZXR1cm4gc3RhdCA/IHN0YXQgOiBjb3VudDsKIH0KLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUih2cG9ydCwgdnBvcnRfZGlzYWJsZSwgU19JV1VTUiwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUih2cG9ydCwgdnBvcnRfZGlzYWJsZSwgU19JV1VTUiwKIAkJCU5VTEwsIHN0b3JlX2ZjX3Zwb3J0X2Rpc2FibGUpOwogCiAKQEAgLTEyNDYsOSArMTI2NCwxMCBAQAogCiAjZGVmaW5lIGZjX2hvc3Rfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osIGNhc3QpCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19mY19ob3N0XyMjZmllbGQgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfZmNfaG9zdF8jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CVwKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwlcCiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwlcCiAJaWYgKGktPmYtPmdldF9ob3N0XyMjZmllbGQpCQkJCQlcCiAJCWktPmYtPmdldF9ob3N0XyMjZmllbGQoc2hvc3QpOwkJCQlcCkBAIC0xMjU3LDExICsxMjc2LDEyIEBACiAKICNkZWZpbmUgZmNfaG9zdF9zdG9yZV9mdW5jdGlvbihmaWVsZCkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9mY19ob3N0XyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAlcCi0JCQkgICBzaXplX3QgY291bnQpCQkJCVwKK3N0b3JlX2ZjX2hvc3RfIyNmaWVsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJCVwKKwkJICAgICAgY29uc3QgY2hhciAqYnVmLAlzaXplX3QgY291bnQpCQkJXAogewkJCQkJCQkJCVwKIAlpbnQgdmFsOwkJCQkJCQlcCi0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CVwKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwlcCiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwlcCiAJY2hhciAqY3A7CQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTEyNzQsMTAgKzEyOTQsMTEgQEAKIAogI2RlZmluZSBmY19ob3N0X3N0b3JlX3N0cl9mdW5jdGlvbihmaWVsZCwgc2xlbikJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXN0b3JlX2ZjX2hvc3RfIyNmaWVsZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCVwKLQkJCSAgIHNpemVfdCBjb3VudCkJCQkJXAorc3RvcmVfZmNfaG9zdF8jI2ZpZWxkKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CVwKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwlcCiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwlcCiAJdW5zaWduZWQgaW50IGNudD1jb3VudDsJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC0xMjkzLDI2ICsxMzE0LDI3IEBACiAKICNkZWZpbmUgZmNfaG9zdF9yZF9hdHRyKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeikJCQlcCiAJZmNfaG9zdF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKQkJXAotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKGhvc3QsIGZpZWxkLCBTX0lSVUdPLAkJCVwKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUihob3N0LCBmaWVsZCwgU19JUlVHTywJCQlcCiAJCQkgc2hvd19mY19ob3N0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgZmNfaG9zdF9yZF9hdHRyX2Nhc3QoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCBjYXN0KQkJXAogCWZjX2hvc3Rfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osIChjYXN0KSkJCVwKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUihob3N0LCBmaWVsZCwgU19JUlVHTywJCQlcCitzdGF0aWMgRkNfREVWSUNFX0FUVFIoaG9zdCwgZmllbGQsIFNfSVJVR08sCQkJXAogCQkJICBzaG93X2ZjX2hvc3RfIyNmaWVsZCwgTlVMTCkKIAogI2RlZmluZSBmY19ob3N0X3J3X2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6KQkJCVwKIAlmY19ob3N0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6LCApCQlcCiAJZmNfaG9zdF9zdG9yZV9mdW5jdGlvbihmaWVsZCkJCQkJCVwKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUihob3N0LCBmaWVsZCwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCitzdGF0aWMgRkNfREVWSUNFX0FUVFIoaG9zdCwgZmllbGQsIFNfSVJVR08gfCBTX0lXVVNSLAkJXAogCQkJc2hvd19mY19ob3N0XyMjZmllbGQsCQkJCVwKIAkJCXN0b3JlX2ZjX2hvc3RfIyNmaWVsZCkKIAogI2RlZmluZSBmY19ob3N0X3JkX2VudW1fYXR0cih0aXRsZSwgbWF4bGVuKQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19mY19ob3N0XyMjdGl0bGUgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfZmNfaG9zdF8jI3RpdGxlIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CVwKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwlcCiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwlcCiAJY29uc3QgY2hhciAqbmFtZTsJCQkJCQlcCiAJaWYgKGktPmYtPmdldF9ob3N0XyMjdGl0bGUpCQkJCQlcCkBAIC0xMzIyLDEwICsxMzQ0LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAlyZXR1cm4gc25wcmludGYoYnVmLCBtYXhsZW4sICIlc1xuIiwgbmFtZSk7CQkJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUihob3N0LCB0aXRsZSwgU19JUlVHTywgc2hvd19mY19ob3N0XyMjdGl0bGUsIE5VTEwpCitzdGF0aWMgRkNfREVWSUNFX0FUVFIoaG9zdCwgdGl0bGUsIFNfSVJVR08sIHNob3dfZmNfaG9zdF8jI3RpdGxlLCBOVUxMKQogCiAjZGVmaW5lIFNFVFVQX0hPU1RfQVRUUklCVVRFX1JEKGZpZWxkKQkJCQkJXAotCWktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF0gPSBjbGFzc19kZXZpY2VfYXR0cl9ob3N0XyMjZmllbGQ7CVwKKwlpLT5wcml2YXRlX2hvc3RfYXR0cnNbY291bnRdID0gZGV2aWNlX2F0dHJfaG9zdF8jI2ZpZWxkOwlcCiAJaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XS5hdHRyLm1vZGUgPSBTX0lSVUdPOwkJXAogCWktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF0uc3RvcmUgPSBOVUxMOwkJCVwKIAlpLT5ob3N0X2F0dHJzW2NvdW50XSA9ICZpLT5wcml2YXRlX2hvc3RfYXR0cnNbY291bnRdOwkJXApAQCAtMTMzMywxNCArMTM1NSwxNCBAQAogCQljb3VudCsrCiAKICNkZWZpbmUgU0VUVVBfSE9TVF9BVFRSSUJVVEVfUkRfTlMoZmllbGQpCQkJCVwKLQlpLT5wcml2YXRlX2hvc3RfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF8jI2ZpZWxkOwlcCisJaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XSA9IGRldmljZV9hdHRyX2hvc3RfIyNmaWVsZDsJXAogCWktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF0uYXR0ci5tb2RlID0gU19JUlVHTzsJCVwKIAlpLT5wcml2YXRlX2hvc3RfYXR0cnNbY291bnRdLnN0b3JlID0gTlVMTDsJCQlcCiAJaS0+aG9zdF9hdHRyc1tjb3VudF0gPSAmaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XTsJCVwKIAljb3VudCsrCiAKICNkZWZpbmUgU0VUVVBfSE9TVF9BVFRSSUJVVEVfUlcoZmllbGQpCQkJCQlcCi0JaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyX2hvc3RfIyNmaWVsZDsJXAorCWktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF0gPSBkZXZpY2VfYXR0cl9ob3N0XyMjZmllbGQ7CVwKIAlpZiAoIWktPmYtPnNldF9ob3N0XyMjZmllbGQpIHsJCQkJCVwKIAkJaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XS5hdHRyLm1vZGUgPSBTX0lSVUdPOwlcCiAJCWktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF0uc3RvcmUgPSBOVUxMOwkJXApAQCAtMTM1MiwyNCArMTM3NCwyNSBAQAogCiAjZGVmaW5lIGZjX3ByaXZhdGVfaG9zdF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgY2FzdCkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfZmNfaG9zdF8jI2ZpZWxkIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCQlcCitzaG93X2ZjX2hvc3RfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOwlcCisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoZGV2KTsJXAogCXJldHVybiBzbnByaW50ZihidWYsIHN6LCBmb3JtYXRfc3RyaW5nLCBjYXN0IGZjX2hvc3RfIyNmaWVsZChzaG9zdCkpOyBcCiB9CiAKICNkZWZpbmUgZmNfcHJpdmF0ZV9ob3N0X3JkX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcsIHN6KQkJXAogCWZjX3ByaXZhdGVfaG9zdF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKQlcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoaG9zdCwgZmllbGQsIFNfSVJVR08sCQkJXAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIGZpZWxkLCBTX0lSVUdPLAkJCVwKIAkJCSBzaG93X2ZjX2hvc3RfIyNmaWVsZCwgTlVMTCkKIAogI2RlZmluZSBmY19wcml2YXRlX2hvc3RfcmRfYXR0cl9jYXN0KGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgY2FzdCkJXAogCWZjX3ByaXZhdGVfaG9zdF9zaG93X2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nLCBzeiwgKGNhc3QpKSBcCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoaG9zdCwgZmllbGQsIFNfSVJVR08sCQkJXAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIGZpZWxkLCBTX0lSVUdPLAkJCVwKIAkJCSAgc2hvd19mY19ob3N0XyMjZmllbGQsIE5VTEwpCiAKICNkZWZpbmUgU0VUVVBfUFJJVkFURV9IT1NUX0FUVFJJQlVURV9SRChmaWVsZCkJCQlcCi0JaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyX2hvc3RfIyNmaWVsZDsJXAorCWktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF0gPSBkZXZpY2VfYXR0cl9ob3N0XyMjZmllbGQ7CVwKIAlpLT5wcml2YXRlX2hvc3RfYXR0cnNbY291bnRdLmF0dHIubW9kZSA9IFNfSVJVR087CQlcCiAJaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XS5zdG9yZSA9IE5VTEw7CQkJXAogCWktPmhvc3RfYXR0cnNbY291bnRdID0gJmktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF07CQlcCkBAIC0xMzc3LDcgKzE0MDAsNyBAQAogCiAjZGVmaW5lIFNFVFVQX1BSSVZBVEVfSE9TVF9BVFRSSUJVVEVfUlcoZmllbGQpCQkJXAogewkJCQkJCQkJCVwKLQlpLT5wcml2YXRlX2hvc3RfYXR0cnNbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF8jI2ZpZWxkOwlcCisJaS0+cHJpdmF0ZV9ob3N0X2F0dHJzW2NvdW50XSA9IGRldmljZV9hdHRyX2hvc3RfIyNmaWVsZDsJXAogCWktPmhvc3RfYXR0cnNbY291bnRdID0gJmktPnByaXZhdGVfaG9zdF9hdHRyc1tjb3VudF07CQlcCiAJY291bnQrKzsJCQkJCQkJXAogfQpAQCAtMTM4NiwzOCArMTQwOSw0MSBAQAogLyogRml4ZWQgSG9zdCBBdHRyaWJ1dGVzICovCiAKIHN0YXRpYyBzc2l6ZV90Ci1zaG93X2ZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfZmNfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGRldik7CiAKIAlpZiAoZmNfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyhzaG9zdCkgPT0gRkNfQ09TX1VOU1BFQ0lGSUVEKQogCQlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgInVuc3BlY2lmaWVkXG4iKTsKIAogCXJldHVybiBnZXRfZmNfY29zX25hbWVzKGZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpLCBidWYpOwogfQotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKGhvc3QsIHN1cHBvcnRlZF9jbGFzc2VzLCBTX0lSVUdPLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIHN1cHBvcnRlZF9jbGFzc2VzLCBTX0lSVUdPLAogCQlzaG93X2ZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19mY19ob3N0X3N1cHBvcnRlZF9mYzRzIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzaG93X2ZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMgKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwogCXJldHVybiAoc3NpemVfdClzaG93X2ZjX2ZjNHMoYnVmLCBmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KSk7CiB9Ci1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoaG9zdCwgc3VwcG9ydGVkX2ZjNHMsIFNfSVJVR08sCitzdGF0aWMgRkNfREVWSUNFX0FUVFIoaG9zdCwgc3VwcG9ydGVkX2ZjNHMsIFNfSVJVR08sCiAJCXNob3dfZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1zaG93X2ZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19mY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMgKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGRldik7CiAKIAlpZiAoZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9PSBGQ19QT1JUU1BFRURfVU5LTk9XTikKIAkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICJ1bmtub3duXG4iKTsKIAogCXJldHVybiBnZXRfZmNfcG9ydF9zcGVlZF9uYW1lcyhmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoc2hvc3QpLCBidWYpOwogfQotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKGhvc3QsIHN1cHBvcnRlZF9zcGVlZHMsIFNfSVJVR08sCitzdGF0aWMgRkNfREVWSUNFX0FUVFIoaG9zdCwgc3VwcG9ydGVkX3NwZWVkcywgU19JUlVHTywKIAkJc2hvd19mY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMsIE5VTEwpOwogCiAKQEAgLTE0MzMsOSArMTQ1OSwxMCBAQAogLyogRHluYW1pYyBIb3N0IEF0dHJpYnV0ZXMgKi8KIAogc3RhdGljIHNzaXplX3QKLXNob3dfZmNfaG9zdF9hY3RpdmVfZmM0cyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19mY19ob3N0X2FjdGl2ZV9mYzRzIChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKIAlpZiAoaS0+Zi0+Z2V0X2hvc3RfYWN0aXZlX2ZjNHMpCkBAIC0xNDQzLDEzICsxNDcwLDE0IEBACiAKIAlyZXR1cm4gKHNzaXplX3Qpc2hvd19mY19mYzRzKGJ1ZiwgZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCkpOwogfQotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKGhvc3QsIGFjdGl2ZV9mYzRzLCBTX0lSVUdPLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIGFjdGl2ZV9mYzRzLCBTX0lSVUdPLAogCQlzaG93X2ZjX2hvc3RfYWN0aXZlX2ZjNHMsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19mY19ob3N0X3NwZWVkIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzaG93X2ZjX2hvc3Rfc3BlZWQgKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKIAlpZiAoaS0+Zi0+Z2V0X2hvc3Rfc3BlZWQpCkBAIC0xNDYwLDcgKzE0ODgsNyBAQAogCiAJcmV0dXJuIGdldF9mY19wb3J0X3NwZWVkX25hbWVzKGZjX2hvc3Rfc3BlZWQoc2hvc3QpLCBidWYpOwogfQotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKGhvc3QsIHNwZWVkLCBTX0lSVUdPLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIHNwZWVkLCBTX0lSVUdPLAogCQlzaG93X2ZjX2hvc3Rfc3BlZWQsIE5VTEwpOwogCiAKQEAgLTE0NzMsMTYgKzE1MDEsMTcgQEAKIGZjX3ByaXZhdGVfaG9zdF9zaG93X2Z1bmN0aW9uKHN5c3RlbV9ob3N0bmFtZSwgIiVzXG4iLAogCQlGQ19TWU1CT0xJQ19OQU1FX1NJWkUgKyAxLCApCiBmY19ob3N0X3N0b3JlX3N0cl9mdW5jdGlvbihzeXN0ZW1faG9zdG5hbWUsIEZDX1NZTUJPTElDX05BTUVfU0laRSkKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUihob3N0LCBzeXN0ZW1faG9zdG5hbWUsIFNfSVJVR08gfCBTX0lXVVNSLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIHN5c3RlbV9ob3N0bmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCXNob3dfZmNfaG9zdF9zeXN0ZW1faG9zdG5hbWUsIHN0b3JlX2ZjX2hvc3Rfc3lzdGVtX2hvc3RuYW1lKTsKIAogCiAvKiBQcml2YXRlIEhvc3QgQXR0cmlidXRlcyAqLwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19mY19wcml2YXRlX2hvc3RfdGd0aWRfYmluZF90eXBlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfZmNfcHJpdmF0ZV9ob3N0X3RndGlkX2JpbmRfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGRldik7CiAJY29uc3QgY2hhciAqbmFtZTsKIAogCW5hbWUgPSBnZXRfZmNfdGd0aWRfYmluZF90eXBlX25hbWUoZmNfaG9zdF90Z3RpZF9iaW5kX3R5cGUoc2hvc3QpKTsKQEAgLTE0OTUsMTAgKzE1MjQsMTAgQEAKIAlwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpCiAKIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9mY19wcml2YXRlX2hvc3RfdGd0aWRfYmluZF90eXBlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCi0JY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdG9yZV9mY19wcml2YXRlX2hvc3RfdGd0aWRfYmluZF90eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogIAllbnVtIGZjX3RndGlkX2JpbmRpbmdfdHlwZSB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MjMsMTUgKzE1NTIsMTUgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBGQ19DTEFTU19ERVZJQ0VfQVRUUihob3N0LCB0Z3RpZF9iaW5kX3R5cGUsIFNfSVJVR08gfCBTX0lXVVNSLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIHRndGlkX2JpbmRfdHlwZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQlzaG93X2ZjX3ByaXZhdGVfaG9zdF90Z3RpZF9iaW5kX3R5cGUsCiAJCQlzdG9yZV9mY19wcml2YXRlX2hvc3RfdGd0aWRfYmluZF90eXBlKTsKIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX2ZjX3ByaXZhdGVfaG9zdF9pc3N1ZV9saXAoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKLQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0b3JlX2ZjX3ByaXZhdGVfaG9zdF9pc3N1ZV9saXAoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAlpbnQgcmV0OwogCkBAIC0xNTQ0LDcgKzE1NzMsNyBAQAogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoaG9zdCwgaXNzdWVfbGlwLCBTX0lXVVNSLCBOVUxMLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIGlzc3VlX2xpcCwgU19JV1VTUiwgTlVMTCwKIAkJCXN0b3JlX2ZjX3ByaXZhdGVfaG9zdF9pc3N1ZV9saXApOwogCiBmY19wcml2YXRlX2hvc3RfcmRfYXR0cihucGl2X3Zwb3J0c19pbnVzZSwgIiV1XG4iLCAyMCk7CkBAIC0xNTU2LDkgKzE1ODUsOSBAQAogCiAvKiBTaG93IGEgZ2l2ZW4gYW4gYXR0cmlidXRlIGluIHRoZSBzdGF0aXN0aWNzIGdyb3VwICovCiBzdGF0aWMgc3NpemVfdAotZmNfc3RhdF9zaG93KGNvbnN0IHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCitmY19zdGF0X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKnN0YXRzOwogCXNzaXplX3QgcmV0ID0gLUVOT0VOVDsKQEAgLTE1NzksMTIgKzE2MDgsMTQgQEAKIAogLyogZ2VuZXJhdGUgYSByZWFkLW9ubHkgc3RhdGlzdGljcyBhdHRyaWJ1dGUgKi8KICNkZWZpbmUgZmNfaG9zdF9zdGF0aXN0aWMobmFtZSkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2Zjc3RhdF8jI25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikgCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmNzdGF0XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpjZCwJCQlcCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCSAgY2hhciAqYnVmKQkJCQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiBmY19zdGF0X3Nob3coY2QsIGJ1ZiwgCQkJCQlcCiAJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcywgbmFtZSkpOwlcCiB9CQkJCQkJCQkJXAotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKGhvc3QsIG5hbWUsIFNfSVJVR08sIHNob3dfZmNzdGF0XyMjbmFtZSwgTlVMTCkKK3N0YXRpYyBGQ19ERVZJQ0VfQVRUUihob3N0LCBuYW1lLCBTX0lSVUdPLCBzaG93X2Zjc3RhdF8jI25hbWUsIE5VTEwpCiAKIGZjX2hvc3Rfc3RhdGlzdGljKHNlY29uZHNfc2luY2VfbGFzdF9yZXNldCk7CiBmY19ob3N0X3N0YXRpc3RpYyh0eF9mcmFtZXMpOwpAQCAtMTYwOCwxMCArMTYzOSwxMCBAQAogZmNfaG9zdF9zdGF0aXN0aWMoZmNwX291dHB1dF9tZWdhYnl0ZXMpOwogCiBzdGF0aWMgc3NpemVfdAotZmNfcmVzZXRfc3RhdGlzdGljcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkgICBzaXplX3QgY291bnQpCitmY19yZXNldF9zdGF0aXN0aWNzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAogCS8qIGlnbm9yZSBhbnkgZGF0YSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBhdHRyaWJ1dGUgKi8KQEAgLTE2MjIsMzEgKzE2NTMsMzEgQEAKIAogCXJldHVybiAtRU5PRU5UOwogfQotc3RhdGljIEZDX0NMQVNTX0RFVklDRV9BVFRSKGhvc3QsIHJlc2V0X3N0YXRpc3RpY3MsIFNfSVdVU1IsIE5VTEwsCitzdGF0aWMgRkNfREVWSUNFX0FUVFIoaG9zdCwgcmVzZXRfc3RhdGlzdGljcywgU19JV1VTUiwgTlVMTCwKIAkJCQlmY19yZXNldF9zdGF0aXN0aWNzKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZjX3N0YXRpc3RpY3NfYXR0cnNbXSA9IHsKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9zZWNvbmRzX3NpbmNlX2xhc3RfcmVzZXQuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF90eF9mcmFtZXMuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF90eF93b3Jkcy5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X3J4X2ZyYW1lcy5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X3J4X3dvcmRzLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfbGlwX2NvdW50LmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3Rfbm9zX2NvdW50LmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZXJyb3JfZnJhbWVzLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZHVtcGVkX2ZyYW1lcy5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X2xpbmtfZmFpbHVyZV9jb3VudC5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X2xvc3Nfb2Zfc3luY19jb3VudC5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ob3N0X2xvc3Nfb2Zfc2lnbmFsX2NvdW50LmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfcHJpbV9zZXFfcHJvdG9jb2xfZXJyX2NvdW50LmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfaW52YWxpZF90eF93b3JkX2NvdW50LmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfaW52YWxpZF9jcmNfY291bnQuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9mY3BfaW5wdXRfcmVxdWVzdHMuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9mY3Bfb3V0cHV0X3JlcXVlc3RzLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZmNwX2NvbnRyb2xfcmVxdWVzdHMuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9mY3BfaW5wdXRfbWVnYWJ5dGVzLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX2hvc3RfZmNwX291dHB1dF9tZWdhYnl0ZXMuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9zdF9yZXNldF9zdGF0aXN0aWNzLmF0dHIsCisJJmRldmljZV9hdHRyX2hvc3Rfc2Vjb25kc19zaW5jZV9sYXN0X3Jlc2V0LmF0dHIsCisJJmRldmljZV9hdHRyX2hvc3RfdHhfZnJhbWVzLmF0dHIsCisJJmRldmljZV9hdHRyX2hvc3RfdHhfd29yZHMuYXR0ciwKKwkmZGV2aWNlX2F0dHJfaG9zdF9yeF9mcmFtZXMuYXR0ciwKKwkmZGV2aWNlX2F0dHJfaG9zdF9yeF93b3Jkcy5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X2xpcF9jb3VudC5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X25vc19jb3VudC5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X2Vycm9yX2ZyYW1lcy5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X2R1bXBlZF9mcmFtZXMuYXR0ciwKKwkmZGV2aWNlX2F0dHJfaG9zdF9saW5rX2ZhaWx1cmVfY291bnQuYXR0ciwKKwkmZGV2aWNlX2F0dHJfaG9zdF9sb3NzX29mX3N5bmNfY291bnQuYXR0ciwKKwkmZGV2aWNlX2F0dHJfaG9zdF9sb3NzX29mX3NpZ25hbF9jb3VudC5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X3ByaW1fc2VxX3Byb3RvY29sX2Vycl9jb3VudC5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X2ludmFsaWRfdHhfd29yZF9jb3VudC5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X2ludmFsaWRfY3JjX2NvdW50LmF0dHIsCisJJmRldmljZV9hdHRyX2hvc3RfZmNwX2lucHV0X3JlcXVlc3RzLmF0dHIsCisJJmRldmljZV9hdHRyX2hvc3RfZmNwX291dHB1dF9yZXF1ZXN0cy5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X2ZjcF9jb250cm9sX3JlcXVlc3RzLmF0dHIsCisJJmRldmljZV9hdHRyX2hvc3RfZmNwX2lucHV0X21lZ2FieXRlcy5hdHRyLAorCSZkZXZpY2VfYXR0cl9ob3N0X2ZjcF9vdXRwdXRfbWVnYWJ5dGVzLmF0dHIsCisJJmRldmljZV9hdHRyX2hvc3RfcmVzZXRfc3RhdGlzdGljcy5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTE2OTUsMTAgKzE3MjYsMTAgQEAKICAqIGFzIGhleCBjaGFyYWN0ZXJzLCBhbmQgbWF5ICpub3QqIGNvbnRhaW4gYW55IHByZWZpeGVzIChlLmcuIDB4LCB4LCBldGMpCiAgKi8KIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9mY19ob3N0X3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkgICBzaXplX3QgY291bnQpCitzdG9yZV9mY19ob3N0X3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgZmNfdnBvcnRfaWRlbnRpZmllcnMgdmlkOwogCXN0cnVjdCBmY192cG9ydCAqdnBvcnQ7CiAJdW5zaWduZWQgaW50IGNudD1jb3VudDsKQEAgLTE3MzEsNyArMTc2Miw3IEBACiAJc3RhdCA9IGZjX3Zwb3J0X2NyZWF0ZShzaG9zdCwgMCwgJnNob3N0LT5zaG9zdF9nZW5kZXYsICZ2aWQsICZ2cG9ydCk7CiAJcmV0dXJuIHN0YXQgPyBzdGF0IDogY291bnQ7CiB9Ci1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoaG9zdCwgdnBvcnRfY3JlYXRlLCBTX0lXVVNSLCBOVUxMLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIHZwb3J0X2NyZWF0ZSwgU19JV1VTUiwgTlVMTCwKIAkJCXN0b3JlX2ZjX2hvc3RfdnBvcnRfY3JlYXRlKTsKIAogCkBAIC0xNzQyLDEwICsxNzczLDEwIEBACiAgKiBhbnkgcHJlZml4ZXMgKGUuZy4gMHgsIHgsIGV0YykKICAqLwogc3RhdGljIHNzaXplX3QKLXN0b3JlX2ZjX2hvc3RfdnBvcnRfZGVsZXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgIHNpemVfdCBjb3VudCkKK3N0b3JlX2ZjX2hvc3RfdnBvcnRfZGVsZXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBmY19ob3N0X2F0dHJzICpmY19ob3N0ID0gc2hvc3RfdG9fZmNfaG9zdChzaG9zdCk7CiAJc3RydWN0IGZjX3Zwb3J0ICp2cG9ydDsKIAl1NjQgd3dwbiwgd3dubjsKQEAgLTE3ODcsNyArMTgxOCw3IEBACiAJc3RhdCA9IGZjX3Zwb3J0X3Rlcm1pbmF0ZSh2cG9ydCk7CiAJcmV0dXJuIHN0YXQgPyBzdGF0IDogY291bnQ7CiB9Ci1zdGF0aWMgRkNfQ0xBU1NfREVWSUNFX0FUVFIoaG9zdCwgdnBvcnRfZGVsZXRlLCBTX0lXVVNSLCBOVUxMLAorc3RhdGljIEZDX0RFVklDRV9BVFRSKGhvc3QsIHZwb3J0X2RlbGV0ZSwgU19JV1VTUiwgTlVMTCwKIAkJCXN0b3JlX2ZjX2hvc3RfdnBvcnRfZGVsZXRlKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCmluZGV4IGZhYzc1MzQuLjY1ZDE3MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCkBAIC0zMywyMCArMzMsMjAgQEAKICNkZWZpbmUgSVNDU0lfU0VTU0lPTl9BVFRSUyAxOQogI2RlZmluZSBJU0NTSV9DT05OX0FUVFJTIDEzCiAjZGVmaW5lIElTQ1NJX0hPU1RfQVRUUlMgNAotI2RlZmluZSBJU0NTSV9UUkFOU1BPUlRfVkVSU0lPTiAiMi4wLTg2OCIKKyNkZWZpbmUgSVNDU0lfVFJBTlNQT1JUX1ZFUlNJT04gIjIuMC04NjkiCiAKIHN0cnVjdCBpc2NzaV9pbnRlcm5hbCB7CiAJaW50IGRhZW1vbl9waWQ7CiAJc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIHQ7CiAJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqaXNjc2lfdHJhbnNwb3J0OwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNkZXY7CisJc3RydWN0IGRldmljZSBkZXY7CiAKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaG9zdF9hdHRyc1tJU0NTSV9IT1NUX0FUVFJTICsgMV07CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbSVNDU0lfSE9TVF9BVFRSUyArIDFdOwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIGNvbm5fY29udDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqY29ubl9hdHRyc1tJU0NTSV9DT05OX0FUVFJTICsgMV07CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmNvbm5fYXR0cnNbSVNDU0lfQ09OTl9BVFRSUyArIDFdOwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHNlc3Npb25fY29udDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vzc2lvbl9hdHRyc1tJU0NTSV9TRVNTSU9OX0FUVFJTICsgMV07CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnNlc3Npb25fYXR0cnNbSVNDU0lfU0VTU0lPTl9BVFRSUyArIDFdOwogfTsKIAogc3RhdGljIGF0b21pY190IGlzY3NpX3Nlc3Npb25fbnI7IC8qIHN5c2ZzIHNlc3Npb24gaWQgZm9yIG5leHQgbmV3IHNlc3Npb24gKi8KQEAgLTYzLDEyICs2MywxMiBAQAogI2RlZmluZSB0b19pc2NzaV9pbnRlcm5hbCh0bXBsKSBcCiAJY29udGFpbmVyX29mKHRtcGwsIHN0cnVjdCBpc2NzaV9pbnRlcm5hbCwgdCkKIAotI2RlZmluZSBjZGV2X3RvX2lzY3NpX2ludGVybmFsKF9jZGV2KSBcCi0JY29udGFpbmVyX29mKF9jZGV2LCBzdHJ1Y3QgaXNjc2lfaW50ZXJuYWwsIGNkZXYpCisjZGVmaW5lIGRldl90b19pc2NzaV9pbnRlcm5hbChfZGV2KSBcCisJY29udGFpbmVyX29mKF9kZXYsIHN0cnVjdCBpc2NzaV9pbnRlcm5hbCwgZGV2KQogCi1zdGF0aWMgdm9pZCBpc2NzaV90cmFuc3BvcnRfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorc3RhdGljIHZvaWQgaXNjc2lfdHJhbnNwb3J0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpc2NzaV9pbnRlcm5hbCAqcHJpdiA9IGNkZXZfdG9faXNjc2lfaW50ZXJuYWwoY2Rldik7CisJc3RydWN0IGlzY3NpX2ludGVybmFsICpwcml2ID0gZGV2X3RvX2lzY3NpX2ludGVybmFsKGRldik7CiAJa2ZyZWUocHJpdik7CiB9CiAKQEAgLTc4LDI1ICs3OCwyNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsYXNzIGlzY3NpX3RyYW5zcG9ydF9jbGFzcyA9IHsKIAkubmFtZSA9ICJpc2NzaV90cmFuc3BvcnQiLAotCS5yZWxlYXNlID0gaXNjc2lfdHJhbnNwb3J0X3JlbGVhc2UsCisJLmRldl9yZWxlYXNlID0gaXNjc2lfdHJhbnNwb3J0X3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3NpemVfdAotc2hvd190cmFuc3BvcnRfaGFuZGxlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfdHJhbnNwb3J0X2hhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGlzY3NpX2ludGVybmFsICpwcml2ID0gY2Rldl90b19pc2NzaV9pbnRlcm5hbChjZGV2KTsKKwlzdHJ1Y3QgaXNjc2lfaW50ZXJuYWwgKnByaXYgPSBkZXZfdG9faXNjc2lfaW50ZXJuYWwoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWlzY3NpX2hhbmRsZShwcml2LT5pc2NzaV90cmFuc3BvcnQpKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihoYW5kbGUsIFNfSVJVR08sIHNob3dfdHJhbnNwb3J0X2hhbmRsZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaGFuZGxlLCBTX0lSVUdPLCBzaG93X3RyYW5zcG9ydF9oYW5kbGUsIE5VTEwpOwogCiAjZGVmaW5lIHNob3dfdHJhbnNwb3J0X2F0dHIobmFtZSwgZm9ybWF0KQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd190cmFuc3BvcnRfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfdHJhbnNwb3J0XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGlzY3NpX2ludGVybmFsICpwcml2ID0gY2Rldl90b19pc2NzaV9pbnRlcm5hbChjZGV2KTsJXAorCXN0cnVjdCBpc2NzaV9pbnRlcm5hbCAqcHJpdiA9IGRldl90b19pc2NzaV9pbnRlcm5hbChkZXYpOwlcCiAJcmV0dXJuIHNwcmludGYoYnVmLCBmb3JtYXQiXG4iLCBwcml2LT5pc2NzaV90cmFuc3BvcnQtPm5hbWUpOwlcCiB9CQkJCQkJCQkJXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfdHJhbnNwb3J0XyMjbmFtZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd190cmFuc3BvcnRfIyNuYW1lLCBOVUxMKTsKIAogc2hvd190cmFuc3BvcnRfYXR0cihjYXBzLCAiMHgleCIpOwogc2hvd190cmFuc3BvcnRfYXR0cihtYXhfbHVuLCAiJWQiKTsKQEAgLTEwNCwxMSArMTA2LDExIEBACiBzaG93X3RyYW5zcG9ydF9hdHRyKG1heF9jbWRfbGVuLCAiJWQiKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlzY3NpX3RyYW5zcG9ydF9hdHRyc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9oYW5kbGUuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfY2Fwcy5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9tYXhfbHVuLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX21heF9jb25uLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX21heF9jbWRfbGVuLmF0dHIsCisJJmRldl9hdHRyX2hhbmRsZS5hdHRyLAorCSZkZXZfYXR0cl9jYXBzLmF0dHIsCisJJmRldl9hdHRyX21heF9sdW4uYXR0ciwKKwkmZGV2X2F0dHJfbWF4X2Nvbm4uYXR0ciwKKwkmZGV2X2F0dHJfbWF4X2NtZF9sZW4uYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMTE5LDcgKzEyMSw3IEBACiAKIAogc3RhdGljIGludCBpc2NzaV9zZXR1cF9ob3N0KHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Yywgc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCisJCQkgICAgc3RydWN0IGRldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChkZXYpOwogCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdCA9IHNob3N0LT5zaG9zdF9kYXRhOwpAQCAtMTM5LDcgKzE0MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaXNjc2lfcmVtb3ZlX2hvc3Qoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCisJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmNkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3QgPSBzaG9zdC0+c2hvc3RfZGF0YTsKQEAgLTIzMSw3ICsyMzMsNyBAQAogCXsgSVNDU0lfU0VTU0lPTl9GUkVFLAkJIkZSRUUiIH0sCiB9OwogCi1jb25zdCBjaGFyICppc2NzaV9zZXNzaW9uX3N0YXRlX25hbWUoaW50IHN0YXRlKQorc3RhdGljIGNvbnN0IGNoYXIgKmlzY3NpX3Nlc3Npb25fc3RhdGVfbmFtZShpbnQgc3RhdGUpCiB7CiAJaW50IGk7CiAJY2hhciAqbmFtZSA9IE5VTEw7CkBAIC0zNzMsMjQgKzM3NSwyNSBAQAogCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnNlc3Npb24tPmRldik7CiB9CiAKLXZvaWQgX19pc2NzaV91bmJsb2NrX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKQorc3RhdGljIHZvaWQgX19pc2NzaV91bmJsb2NrX3Nlc3Npb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmc2Vzc2lvbi0+cmVjb3Zlcnlfd29yaykpCi0JCWZsdXNoX3dvcmtxdWV1ZShpc2NzaV9laF90aW1lcl93b3JrcSk7Ci0Jc2NzaV90YXJnZXRfdW5ibG9jaygmc2Vzc2lvbi0+ZGV2KTsKLX0KLQotdm9pZCBpc2NzaV91bmJsb2NrX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKQoteworCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbiA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uLAorCQkJCSAgICAgdW5ibG9ja193b3JrKTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbik7CiAJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qCisJICogVGhlIHJlY292ZXJ5IGFuZCB1bmJsb2NrIHdvcmsgZ2V0IHJ1biBmcm9tIHRoZSBzYW1lIHdvcmtxdWV1ZSwKKwkgKiBzbyB0cnkgdG8gY2FuY2VsIGl0IGlmIGl0IHdhcyBnb2luZyB0byBydW4gYWZ0ZXIgdGhpcyB1bmJsb2NrLgorCSAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnNlc3Npb24tPnJlY292ZXJ5X3dvcmspOwogCXNwaW5fbG9ja19pcnFzYXZlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CiAJc2Vzc2lvbi0+c3RhdGUgPSBJU0NTSV9TRVNTSU9OX0xPR0dFRF9JTjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7Ci0KLQlfX2lzY3NpX3VuYmxvY2tfc2Vzc2lvbihzZXNzaW9uKTsKKwkvKiBzdGFydCBJTyAqLworCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnNlc3Npb24tPmRldik7CiAJLyoKIAkgKiBPbmx5IGRvIGtlcm5lbCBzY2FubmluZyBpZiB0aGUgZHJpdmVyIGlzIHByb3Blcmx5IGhvb2tlZCBpbnRvCiAJICogdGhlIGFzeW5jIHNjYW5uaW5nIGNvZGUgKGRyaXZlcnMgbGlrZSBpc2NzaV90Y3AgZG8gbG9naW4gYW5kCkBAIC00MDEsMjAgKzQwNCw0MyBAQAogCQkJYXRvbWljX2luYygmaWhvc3QtPm5yX3NjYW5zKTsKIAl9CiB9CisKKy8qKgorICogaXNjc2lfdW5ibG9ja19zZXNzaW9uIC0gc2V0IGEgc2Vzc2lvbiBhcyBsb2dnZWQgaW4gYW5kIHN0YXJ0IElPLgorICogQHNlc3Npb246IGlzY3NpIHNlc3Npb24KKyAqCisgKiBNYXJrIGEgc2Vzc2lvbiBhcyByZWFkeSB0byBhY2NlcHQgSU8uCisgKi8KK3ZvaWQgaXNjc2lfdW5ibG9ja19zZXNzaW9uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlxdWV1ZV93b3JrKGlzY3NpX2VoX3RpbWVyX3dvcmtxLCAmc2Vzc2lvbi0+dW5ibG9ja193b3JrKTsKKwkvKgorCSAqIG1ha2Ugc3VyZSBhbGwgdGhlIGV2ZW50cyBoYXZlIGNvbXBsZXRlZCBiZWZvcmUgdGVsbCB0aGUgZHJpdmVyCisJICogaXQgaXMgc2FmZQorCSAqLworCWZsdXNoX3dvcmtxdWV1ZShpc2NzaV9laF90aW1lcl93b3JrcSk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV91bmJsb2NrX3Nlc3Npb24pOwogCi12b2lkIGlzY3NpX2Jsb2NrX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKQorc3RhdGljIHZvaWQgX19pc2NzaV9ibG9ja19zZXNzaW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24gPQorCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiwKKwkJCQkgICAgIGJsb2NrX3dvcmspOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwogCXNlc3Npb24tPnN0YXRlID0gSVNDU0lfU0VTU0lPTl9GQUlMRUQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwotCiAJc2NzaV90YXJnZXRfYmxvY2soJnNlc3Npb24tPmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKGlzY3NpX2VoX3RpbWVyX3dvcmtxLCAmc2Vzc2lvbi0+cmVjb3Zlcnlfd29yaywKIAkJCSAgIHNlc3Npb24tPnJlY292ZXJ5X3RtbyAqIEhaKTsKIH0KKwordm9pZCBpc2NzaV9ibG9ja19zZXNzaW9uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlxdWV1ZV93b3JrKGlzY3NpX2VoX3RpbWVyX3dvcmtxLCAmc2Vzc2lvbi0+YmxvY2tfd29yayk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ibG9ja19zZXNzaW9uKTsKIAogc3RhdGljIHZvaWQgX19pc2NzaV91bmJpbmRfc2Vzc2lvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC00NjMsNiArNDg5LDggQEAKIAlJTklUX0RFTEFZRURfV09SSygmc2Vzc2lvbi0+cmVjb3Zlcnlfd29yaywgc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dCk7CiAJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPmhvc3RfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPnNlc3NfbGlzdCk7CisJSU5JVF9XT1JLKCZzZXNzaW9uLT51bmJsb2NrX3dvcmssIF9faXNjc2lfdW5ibG9ja19zZXNzaW9uKTsKKwlJTklUX1dPUksoJnNlc3Npb24tPmJsb2NrX3dvcmssIF9faXNjc2lfYmxvY2tfc2Vzc2lvbik7CiAJSU5JVF9XT1JLKCZzZXNzaW9uLT51bmJpbmRfd29yaywgX19pc2NzaV91bmJpbmRfc2Vzc2lvbik7CiAJSU5JVF9XT1JLKCZzZXNzaW9uLT5zY2FuX3dvcmssIGlzY3NpX3NjYW5fc2Vzc2lvbik7CiAJc3Bpbl9sb2NrX2luaXQoJnNlc3Npb24tPmxvY2spOwpAQCAtNTc1LDI0ICs2MDMsMjUgQEAKIAlsaXN0X2RlbCgmc2Vzc2lvbi0+c2Vzc19saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzbG9jaywgZmxhZ3MpOwogCisJLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBibG9ja3MvdW5ibG9ja3MgcXVldWVkICovCisJZmx1c2hfd29ya3F1ZXVlKGlzY3NpX2VoX3RpbWVyX3dvcmtxKTsKKwkvKiBtYWtlIHN1cmUgdGhlIHRpbWVkb3V0IGNhbGxvdXQgaXMgbm90IHJ1bm5pbmcgKi8KKwlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsoJnNlc3Npb24tPnJlY292ZXJ5X3dvcmspKQorCQlmbHVzaF93b3JrcXVldWUoaXNjc2lfZWhfdGltZXJfd29ya3EpOwogCS8qCiAJICogSWYgd2UgYXJlIGJsb2NrZWQgbGV0IGNvbW1hbmRzIGZsb3cgYWdhaW4uIFRoZSBsbGQgb3IgaXNjc2kKIAkgKiBsYXllciBzaG91bGQgc2V0IHVwIHRoZSBxdWV1ZWNvbW1hbmQgdG8gZmFpbCBjb21tYW5kcy4KKwkgKiBXZSBhc3N1bWUgdGhhdCBMTEQgd2lsbCBub3QgYmUgY2FsbGluZyBibG9jay91bmJsb2NrIHdoaWxlCisJICogcmVtb3ZpbmcgdGhlIHNlc3Npb24uCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKIAlzZXNzaW9uLT5zdGF0ZSA9IElTQ1NJX1NFU1NJT05fRlJFRTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7Ci0JX19pc2NzaV91bmJsb2NrX3Nlc3Npb24oc2Vzc2lvbik7Ci0JX19pc2NzaV91bmJpbmRfc2Vzc2lvbigmc2Vzc2lvbi0+dW5iaW5kX3dvcmspOwogCi0JLyogZmx1c2ggcnVubmluZyBzY2FucyAqLworCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnNlc3Npb24tPmRldik7CisJLyogZmx1c2ggcnVubmluZyBzY2FucyB0aGVuIGRlbGV0ZSBkZXZpY2VzICovCiAJZmx1c2hfd29ya3F1ZXVlKGlob3N0LT5zY2FuX3dvcmtxKTsKLQkvKgotCSAqIElmIHRoZSBzZXNzaW9uIGRyb3BwZWQgd2hpbGUgcmVtb3ZpbmcgZGV2aWNlcyB0aGVuIHdlIG5lZWQgdG8gbWFrZQotCSAqIHN1cmUgaXQgaXMgbm90IGJsb2NrZWQKLQkgKi8KLQlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsoJnNlc3Npb24tPnJlY292ZXJ5X3dvcmspKQotCQlmbHVzaF93b3JrcXVldWUoaXNjc2lfZWhfdGltZXJfd29ya3EpOworCV9faXNjc2lfdW5iaW5kX3Nlc3Npb24oJnNlc3Npb24tPnVuYmluZF93b3JrKTsKIAogCS8qIGh3IGlzY3NpIG1heSBub3QgaGF2ZSByZW1vdmVkIGFsbCBjb25uZWN0aW9ucyBmcm9tIHNlc3Npb24gKi8KIAllcnIgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJnNlc3Npb24tPmRldiwgTlVMTCwKQEAgLTgwMiwyMyArODMxLDE2IEBACiAKIHZvaWQgaXNjc2lfY29ubl9lcnJvcihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKQogewotCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbiA9IGlzY3NpX2Nvbm5fdG9fc2Vzc2lvbihjb25uKTsKIAlzdHJ1Y3Qgbmxtc2doZHIJKm5saDsKIAlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwogCXN0cnVjdCBpc2NzaV91ZXZlbnQgKmV2OwogCXN0cnVjdCBpc2NzaV9pbnRlcm5hbCAqcHJpdjsKIAlpbnQgbGVuID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKCpldikpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcml2ID0gaXNjc2lfaWZfdHJhbnNwb3J0X2xvb2t1cChjb25uLT50cmFuc3BvcnQpOwogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKLQlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU0VTU0lPTl9MT0dHRURfSU4pCi0JCXNlc3Npb24tPnN0YXRlID0gSVNDU0lfU0VTU0lPTl9GQUlMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwotCiAJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJaXNjc2lfY2xzX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLCAiZ3JhY2VmdWxseSBpZ25vcmVkICIKQEAgLTEzMTcsMTEgKzEzMzksOCBAQAogCW11dGV4X3VubG9jaygmcnhfcXVldWVfbXV0ZXgpOwogfQogCi0jZGVmaW5lIGlzY3NpX2NkZXZfdG9fY29ubihfY2RldikgXAotCWlzY3NpX2Rldl90b19jb25uKF9jZGV2LT5kZXYpCi0KICNkZWZpbmUgSVNDU0lfQ0xBU1NfQVRUUihfcHJlZml4LF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkJCVwKLXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGNsYXNzX2RldmljZV9hdHRyXyMjX3ByZWZpeCMjXyMjX25hbWUgPQlcCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19wcmVmaXgjI18jI19uYW1lID0JXAogCV9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCiAKIC8qCkBAIC0xMzI5LDkgKzEzNDgsMTAgQEAKICAqLwogI2RlZmluZSBpc2NzaV9jb25uX2F0dHJfc2hvdyhwYXJhbSkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X2Nvbm5fcGFyYW1fIyNwYXJhbShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCQlcCitzaG93X2Nvbm5fcGFyYW1fIyNwYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiA9IGlzY3NpX2NkZXZfdG9fY29ubihjZGV2KTsJCVwKKwlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4gPSBpc2NzaV9kZXZfdG9fY29ubihkZXYtPnBhcmVudCk7CVwKIAlzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0ID0gY29ubi0+dHJhbnNwb3J0OwkJCVwKIAlyZXR1cm4gdC0+Z2V0X2Nvbm5fcGFyYW0oY29ubiwgcGFyYW0sIGJ1Zik7CQkJXAogfQpAQCAtMTM1NSwxNyArMTM3NSwxNiBAQAogaXNjc2lfY29ubl9hdHRyKHBpbmdfdG1vLCBJU0NTSV9QQVJBTV9QSU5HX1RNTyk7CiBpc2NzaV9jb25uX2F0dHIocmVjdl90bW8sIElTQ1NJX1BBUkFNX1JFQ1ZfVE1PKTsKIAotI2RlZmluZSBpc2NzaV9jZGV2X3RvX3Nlc3Npb24oX2NkZXYpIFwKLQlpc2NzaV9kZXZfdG9fc2Vzc2lvbihfY2Rldi0+ZGV2KQotCiAvKgogICogaVNDU0kgc2Vzc2lvbiBhdHRycwogICovCiAjZGVmaW5lIGlzY3NpX3Nlc3Npb25fYXR0cl9zaG93KHBhcmFtLCBwZXJtKQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19zZXNzaW9uX3BhcmFtXyMjcGFyYW0oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQlcCitzaG93X3Nlc3Npb25fcGFyYW1fIyNwYXJhbShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0gaXNjc2lfY2Rldl90b19zZXNzaW9uKGNkZXYpOyBcCisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0gCQkJCVwKKwkJaXNjc2lfZGV2X3RvX3Nlc3Npb24oZGV2LT5wYXJlbnQpOwkJCVwKIAlzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0ID0gc2Vzc2lvbi0+dHJhbnNwb3J0OwkJCVwKIAkJCQkJCQkJCVwKIAlpZiAocGVybSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkJCQkJXApAQCAtMTM5Nyw5ICsxNDE2LDEwIEBACiBpc2NzaV9zZXNzaW9uX2F0dHIobHVfcmVzZXRfdG1vLCBJU0NTSV9QQVJBTV9MVV9SRVNFVF9UTU8sIDApOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19wcml2X3Nlc3Npb25fc3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19wcml2X3Nlc3Npb25fc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24gPSBpc2NzaV9jZGV2X3RvX3Nlc3Npb24oY2Rldik7CisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0gaXNjc2lfZGV2X3RvX3Nlc3Npb24oZGV2LT5wYXJlbnQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBpc2NzaV9zZXNzaW9uX3N0YXRlX25hbWUoc2Vzc2lvbi0+c3RhdGUpKTsKIH0KIHN0YXRpYyBJU0NTSV9DTEFTU19BVFRSKHByaXZfc2Vzcywgc3RhdGUsIFNfSVJVR08sIHNob3dfcHJpdl9zZXNzaW9uX3N0YXRlLApAQCAtMTQwNyw5ICsxNDI3LDExIEBACiAKICNkZWZpbmUgaXNjc2lfcHJpdl9zZXNzaW9uX2F0dHJfc2hvdyhmaWVsZCwgZm9ybWF0KQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X3ByaXZfc2Vzc2lvbl8jI2ZpZWxkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfcHJpdl9zZXNzaW9uXyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCAJCQkJXAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbiA9IGlzY3NpX2NkZXZfdG9fc2Vzc2lvbihjZGV2KTtcCisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0gCQkJCVwKKwkJCWlzY3NpX2Rldl90b19zZXNzaW9uKGRldi0+cGFyZW50KTsJCVwKIAlyZXR1cm4gc3ByaW50ZihidWYsIGZvcm1hdCJcbiIsIHNlc3Npb24tPmZpZWxkKTsJCVwKIH0KIApAQCAtMTQyNCw5ICsxNDQ2LDEwIEBACiAgKi8KICNkZWZpbmUgaXNjc2lfaG9zdF9hdHRyX3Nob3cocGFyYW0pCQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19ob3N0X3BhcmFtXyMjcGFyYW0oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19ob3N0X3BhcmFtXyMjcGFyYW0oc3RydWN0IGRldmljZSAqZGV2LCAJCQkJXAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsJXAorCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGRldik7CVwKIAlzdHJ1Y3QgaXNjc2lfaW50ZXJuYWwgKnByaXYgPSB0b19pc2NzaV9pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7IFwKIAlyZXR1cm4gcHJpdi0+aXNjc2lfdHJhbnNwb3J0LT5nZXRfaG9zdF9wYXJhbShzaG9zdCwgcGFyYW0sIGJ1Zik7IFwKIH0KQEAgLTE0NDMsNyArMTQ2Niw3IEBACiAKICNkZWZpbmUgU0VUVVBfUFJJVl9TRVNTSU9OX1JEX0FUVFIoZmllbGQpCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JcHJpdi0+c2Vzc2lvbl9hdHRyc1tjb3VudF0gPSAmY2xhc3NfZGV2aWNlX2F0dHJfcHJpdl9zZXNzXyMjZmllbGQ7IFwKKwlwcml2LT5zZXNzaW9uX2F0dHJzW2NvdW50XSA9ICZkZXZfYXR0cl9wcml2X3Nlc3NfIyNmaWVsZDsgXAogCWNvdW50Kys7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTE0NTEsNyArMTQ3NCw3IEBACiAjZGVmaW5lIFNFVFVQX1NFU1NJT05fUkRfQVRUUihmaWVsZCwgcGFyYW1fZmxhZykJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmICh0dC0+cGFyYW1fbWFzayAmIHBhcmFtX2ZsYWcpIHsJCQkJXAotCQlwcml2LT5zZXNzaW9uX2F0dHJzW2NvdW50XSA9ICZjbGFzc19kZXZpY2VfYXR0cl9zZXNzXyMjZmllbGQ7IFwKKwkJcHJpdi0+c2Vzc2lvbl9hdHRyc1tjb3VudF0gPSAmZGV2X2F0dHJfc2Vzc18jI2ZpZWxkOyBcCiAJCWNvdW50Kys7CQkJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCkBAIC0xNDU5LDcgKzE0ODIsNyBAQAogI2RlZmluZSBTRVRVUF9DT05OX1JEX0FUVFIoZmllbGQsIHBhcmFtX2ZsYWcpCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaWYgKHR0LT5wYXJhbV9tYXNrICYgcGFyYW1fZmxhZykgewkJCQlcCi0JCXByaXYtPmNvbm5fYXR0cnNbY291bnRdID0gJmNsYXNzX2RldmljZV9hdHRyX2Nvbm5fIyNmaWVsZDsgXAorCQlwcml2LT5jb25uX2F0dHJzW2NvdW50XSA9ICZkZXZfYXR0cl9jb25uXyMjZmllbGQ7IFwKIAkJY291bnQrKzsJCQkJCQlcCiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKQEAgLTE0NjcsNyArMTQ5MCw3IEBACiAjZGVmaW5lIFNFVFVQX0hPU1RfUkRfQVRUUihmaWVsZCwgcGFyYW1fZmxhZykJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlpZiAodHQtPmhvc3RfcGFyYW1fbWFzayAmIHBhcmFtX2ZsYWcpIHsJCQkJXAotCQlwcml2LT5ob3N0X2F0dHJzW2NvdW50XSA9ICZjbGFzc19kZXZpY2VfYXR0cl9ob3N0XyMjZmllbGQ7IFwKKwkJcHJpdi0+aG9zdF9hdHRyc1tjb3VudF0gPSAmZGV2X2F0dHJfaG9zdF8jI2ZpZWxkOyBcCiAJCWNvdW50Kys7CQkJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCkBAIC0xNTU4LDE1ICsxNTgxLDE1IEBACiAJcHJpdi0+aXNjc2lfdHJhbnNwb3J0ID0gdHQ7CiAJcHJpdi0+dC51c2VyX3NjYW4gPSBpc2NzaV91c2VyX3NjYW47CiAKLQlwcml2LT5jZGV2LmNsYXNzID0gJmlzY3NpX3RyYW5zcG9ydF9jbGFzczsKLQlzbnByaW50Zihwcml2LT5jZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwgIiVzIiwgdHQtPm5hbWUpOwotCWVyciA9IGNsYXNzX2RldmljZV9yZWdpc3RlcigmcHJpdi0+Y2Rldik7CisJcHJpdi0+ZGV2LmNsYXNzID0gJmlzY3NpX3RyYW5zcG9ydF9jbGFzczsKKwlzbnByaW50Zihwcml2LT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIiVzIiwgdHQtPm5hbWUpOworCWVyciA9IGRldmljZV9yZWdpc3RlcigmcHJpdi0+ZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfcHJpdjsKIAotCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcHJpdi0+Y2Rldi5rb2JqLCAmaXNjc2lfdHJhbnNwb3J0X2dyb3VwKTsKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnByaXYtPmRldi5rb2JqLCAmaXNjc2lfdHJhbnNwb3J0X2dyb3VwKTsKIAlpZiAoZXJyKQotCQlnb3RvIHVucmVnaXN0ZXJfY2RldjsKKwkJZ290byB1bnJlZ2lzdGVyX2RldjsKIAogCS8qIGhvc3QgcGFyYW1ldGVycyAqLwogCXByaXYtPnQuaG9zdF9hdHRycy5hYy5hdHRycyA9ICZwcml2LT5ob3N0X2F0dHJzWzBdOwpAQCAtMTY0Myw4ICsxNjY2LDggQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgImlzY3NpOiByZWdpc3RlcmVkIHRyYW5zcG9ydCAoJXMpXG4iLCB0dC0+bmFtZSk7CiAJcmV0dXJuICZwcml2LT50OwogCi11bnJlZ2lzdGVyX2NkZXY6Ci0JY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJnByaXYtPmNkZXYpOwordW5yZWdpc3Rlcl9kZXY6CisJZGV2aWNlX3VucmVnaXN0ZXIoJnByaXYtPmRldik7CiBmcmVlX3ByaXY6CiAJa2ZyZWUocHJpdik7CiAJcmV0dXJuIE5VTEw7CkBAIC0xNjcxLDggKzE2OTQsOCBAQAogCXRyYW5zcG9ydF9jb250YWluZXJfdW5yZWdpc3RlcigmcHJpdi0+c2Vzc2lvbl9jb250KTsKIAl0cmFuc3BvcnRfY29udGFpbmVyX3VucmVnaXN0ZXIoJnByaXYtPnQuaG9zdF9hdHRycyk7CiAKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnByaXYtPmNkZXYua29iaiwgJmlzY3NpX3RyYW5zcG9ydF9ncm91cCk7Ci0JY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJnByaXYtPmNkZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcHJpdi0+ZGV2LmtvYmosICZpc2NzaV90cmFuc3BvcnRfZ3JvdXApOworCWRldmljZV91bnJlZ2lzdGVyKCZwcml2LT5kZXYpOwogCW11dGV4X3VubG9jaygmcnhfcXVldWVfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKaW5kZXggNDNhOTY0ZC4uMjdlYzYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwpAQCAtNTMsOCArNTMsOCBAQAogLyoKICAqIEhhY2sgdG8gYWxsb3cgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lIGluIGRpZmZlcmVudCBvYmplY3RzLgogICovCi0jZGVmaW5lIFNBU19DTEFTU19ERVZJQ0VfQVRUUihfcHJlZml4LF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgXAotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGNsYXNzX2RldmljZV9hdHRyXyMjX3ByZWZpeCMjXyMjX25hbWUgPSBcCisjZGVmaW5lIFNBU19ERVZJQ0VfQVRUUihfcHJlZml4LF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgXAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyXyMjX3ByZWZpeCMjXyMjX25hbWUgPSBcCiAJX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKIAogCkBAIC0yNjEsNyArMjYxLDcgQEAKICAqLwogCiBzdGF0aWMgaW50IHNhc19ob3N0X3NldHVwKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Yywgc3RydWN0IGRldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorCQkJICBzdHJ1Y3QgZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KGRldik7CiAJc3RydWN0IHNhc19ob3N0X2F0dHJzICpzYXNfaG9zdCA9IHRvX3Nhc19ob3N0X2F0dHJzKHNob3N0KTsKQEAgLTI4MCw3ICsyODAsNyBAQAogfQogCiBzdGF0aWMgaW50IHNhc19ob3N0X3JlbW92ZShzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqdGMsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCisJCQkgICBzdHJ1Y3QgZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KGRldik7CiAKQEAgLTM1NiwyMiArMzU2LDI0IEBACiAKICNkZWZpbmUgc2FzX3BoeV9zaG93X3NpbXBsZShmaWVsZCwgbmFtZSwgZm9ybWF0X3N0cmluZywgY2FzdCkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X3Nhc19waHlfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfc2FzX3BoeV8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCAJCQkJXAorCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoY2Rldik7CQlcCisJc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoZGV2KTsJCVwKIAkJCQkJCQkJCVwKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgZm9ybWF0X3N0cmluZywgY2FzdCBwaHktPmZpZWxkKTsJXAogfQogCiAjZGVmaW5lIHNhc19waHlfc2ltcGxlX2F0dHIoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIHR5cGUpCQlcCiAJc2FzX3BoeV9zaG93X3NpbXBsZShmaWVsZCwgbmFtZSwgZm9ybWF0X3N0cmluZywgKHR5cGUpKQlcCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19zYXNfcGh5XyMjbmFtZSwgTlVMTCkKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X3Nhc19waHlfIyNuYW1lLCBOVUxMKQogCiAjZGVmaW5lIHNhc19waHlfc2hvd19wcm90b2NvbChmaWVsZCwgbmFtZSkJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfc2FzX3BoeV8jI25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19zYXNfcGh5XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc2FzX3BoeSAqcGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3BoeShjZGV2KTsJCVwKKwlzdHJ1Y3Qgc2FzX3BoeSAqcGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3BoeShkZXYpOwkJXAogCQkJCQkJCQkJXAogCWlmICghcGh5LT5maWVsZCkJCQkJCQlcCiAJCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAibm9uZVxuIik7CQkJXApAQCAtMzgwLDEzICszODIsMTQgQEAKIAogI2RlZmluZSBzYXNfcGh5X3Byb3RvY29sX2F0dHIoZmllbGQsIG5hbWUpCQkJCVwKIAlzYXNfcGh5X3Nob3dfcHJvdG9jb2woZmllbGQsIG5hbWUpCQkJCVwKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X3Nhc19waHlfIyNuYW1lLCBOVUxMKQorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfc2FzX3BoeV8jI25hbWUsIE5VTEwpCiAKICNkZWZpbmUgc2FzX3BoeV9zaG93X2xpbmtzcGVlZChmaWVsZCkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X3Nhc19waHlfIyNmaWVsZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCQlcCitzaG93X3Nhc19waHlfIyNmaWVsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoY2Rldik7CQlcCisJc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoZGV2KTsJCVwKIAkJCQkJCQkJCVwKIAlyZXR1cm4gZ2V0X3Nhc19saW5rc3BlZWRfbmFtZXMocGh5LT5maWVsZCwgYnVmKTsJCVwKIH0KQEAgLTM5NCwxMCArMzk3LDExIEBACiAvKiBGdWRnZSB0byB0ZWxsIGlmIHdlJ3JlIG1pbmltdW0gb3IgbWF4aW11bSAqLwogI2RlZmluZSBzYXNfcGh5X3N0b3JlX2xpbmtzcGVlZChmaWVsZCkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9zYXNfcGh5XyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAlcCi0JCSAgICAgIHNpemVfdCBjb3VudCkJCQkJCVwKK3N0b3JlX3Nhc19waHlfIyNmaWVsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCAJCQlcCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwJc2l6ZV90IGNvdW50KQkJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoY2Rldik7CQlcCisJc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoZGV2KTsJCVwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChwaHktPmRldi5wYXJlbnQpOwlcCiAJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CVwKIAl1MzIgdmFsdWU7CQkJCQkJCVwKQEAgLTQxNiwxOSArNDIwLDIwIEBACiAjZGVmaW5lIHNhc19waHlfbGlua3NwZWVkX3J3X2F0dHIoZmllbGQpCQkJCVwKIAlzYXNfcGh5X3Nob3dfbGlua3NwZWVkKGZpZWxkKQkJCQkJXAogCXNhc19waHlfc3RvcmVfbGlua3NwZWVkKGZpZWxkKQkJCQkJXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZpZWxkLCBTX0lSVUdPLCBzaG93X3Nhc19waHlfIyNmaWVsZCwJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd19zYXNfcGh5XyMjZmllbGQsCQlcCiAJc3RvcmVfc2FzX3BoeV8jI2ZpZWxkKQogCiAjZGVmaW5lIHNhc19waHlfbGlua3NwZWVkX2F0dHIoZmllbGQpCQkJCQlcCiAJc2FzX3BoeV9zaG93X2xpbmtzcGVlZChmaWVsZCkJCQkJCVwKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd19zYXNfcGh5XyMjZmllbGQsIE5VTEwpCitzdGF0aWMgREVWSUNFX0FUVFIoZmllbGQsIFNfSVJVR08sIHNob3dfc2FzX3BoeV8jI2ZpZWxkLCBOVUxMKQogCiAKICNkZWZpbmUgc2FzX3BoeV9zaG93X2xpbmtlcnJvcihmaWVsZCkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X3Nhc19waHlfIyNmaWVsZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCQlcCitzaG93X3Nhc19waHlfIyNmaWVsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCQlcCisJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoY2Rldik7CQlcCisJc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoZGV2KTsJCVwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChwaHktPmRldi5wYXJlbnQpOwlcCiAJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CVwKIAlpbnQgZXJyb3I7CQkJCQkJCVwKQEAgLTQ0MSwyNCArNDQ2LDI1IEBACiAKICNkZWZpbmUgc2FzX3BoeV9saW5rZXJyb3JfYXR0cihmaWVsZCkJCQkJCVwKIAlzYXNfcGh5X3Nob3dfbGlua2Vycm9yKGZpZWxkKQkJCQkJXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZpZWxkLCBTX0lSVUdPLCBzaG93X3Nhc19waHlfIyNmaWVsZCwgTlVMTCkKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd19zYXNfcGh5XyMjZmllbGQsIE5VTEwpCiAKIAogc3RhdGljIHNzaXplX3QKLXNob3dfc2FzX2RldmljZV90eXBlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfc2FzX2RldmljZV90eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBzYXNfcGh5ICpwaHkgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcGh5KGNkZXYpOworCXN0cnVjdCBzYXNfcGh5ICpwaHkgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcGh5KGRldik7CiAKIAlpZiAoIXBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUpCiAJCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAibm9uZVxuIik7CiAJcmV0dXJuIGdldF9zYXNfZGV2aWNlX3R5cGVfbmFtZXMocGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSwgYnVmKTsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihkZXZpY2VfdHlwZSwgU19JUlVHTywgc2hvd19zYXNfZGV2aWNlX3R5cGUsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGRldmljZV90eXBlLCBTX0lSVUdPLCBzaG93X3Nhc19kZXZpY2VfdHlwZSwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IGRvX3Nhc19waHlfZW5hYmxlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCitzdGF0aWMgc3NpemVfdCBkb19zYXNfcGh5X2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXNpemVfdCBjb3VudCwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3Qgc2FzX3BoeSAqcGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3BoeShjZGV2KTsKKwlzdHJ1Y3Qgc2FzX3BoeSAqcGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3BoeShkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHBoeS0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAJaW50IGVycm9yOwpAQCAtNDcwLDE4ICs0NzYsMTkgQEAKIAlyZXR1cm4gY291bnQ7CiB9OwogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9zYXNfcGh5X2VuYWJsZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9zYXNfcGh5X2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWlmIChjb3VudCA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChidWZbMF0pIHsKIAljYXNlICcwJzoKLQkJZG9fc2FzX3BoeV9lbmFibGUoY2RldiwgY291bnQsIDApOworCQlkb19zYXNfcGh5X2VuYWJsZShkZXYsIGNvdW50LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSAnMSc6Ci0JCWRvX3Nhc19waHlfZW5hYmxlKGNkZXYsIGNvdW50LCAxKTsKKwkJZG9fc2FzX3BoeV9lbmFibGUoZGV2LCBjb3VudCwgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDkwLDIwICs0OTcsMjIgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc2FzX3BoeV9lbmFibGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QKK3Nob3dfc2FzX3BoeV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc2FzX3BoeSAqcGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3BoeShjZGV2KTsKKwlzdHJ1Y3Qgc2FzX3BoeSAqcGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3BoeShkZXYpOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIlZCIsIHBoeS0+ZW5hYmxlZCk7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihlbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3Nhc19waHlfZW5hYmxlLAorc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfc2FzX3BoeV9lbmFibGUsCiAJCQkgc3RvcmVfc2FzX3BoeV9lbmFibGUpOwogCi1zdGF0aWMgc3NpemVfdCBkb19zYXNfcGh5X3Jlc2V0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCi0JCXNpemVfdCBjb3VudCwgaW50IGhhcmRfcmVzZXQpCitzdGF0aWMgc3NpemVfdAorZG9fc2FzX3BoeV9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBjb3VudCwgaW50IGhhcmRfcmVzZXQpCiB7Ci0Jc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoY2Rldik7CisJc3RydWN0IHNhc19waHkgKnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19waHkoZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChwaHktPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzYXNfaW50ZXJuYWwgKmkgPSB0b19zYXNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCWludCBlcnJvcjsKQEAgLTUxNCwxOSArNTIzLDIxIEBACiAJcmV0dXJuIGNvdW50OwogfTsKIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfc2FzX2xpbmtfcmVzZXQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdAorc3RvcmVfc2FzX2xpbmtfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlyZXR1cm4gZG9fc2FzX3BoeV9yZXNldChjZGV2LCBjb3VudCwgMCk7CisJcmV0dXJuIGRvX3Nhc19waHlfcmVzZXQoZGV2LCBjb3VudCwgMCk7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobGlua19yZXNldCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfc2FzX2xpbmtfcmVzZXQpOworc3RhdGljIERFVklDRV9BVFRSKGxpbmtfcmVzZXQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX3Nhc19saW5rX3Jlc2V0KTsKIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfc2FzX2hhcmRfcmVzZXQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdAorc3RvcmVfc2FzX2hhcmRfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlyZXR1cm4gZG9fc2FzX3BoeV9yZXNldChjZGV2LCBjb3VudCwgMSk7CisJcmV0dXJuIGRvX3Nhc19waHlfcmVzZXQoZGV2LCBjb3VudCwgMSk7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaGFyZF9yZXNldCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfc2FzX2hhcmRfcmVzZXQpOworc3RhdGljIERFVklDRV9BVFRSKGhhcmRfcmVzZXQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX3Nhc19oYXJkX3Jlc2V0KTsKIAogc2FzX3BoeV9wcm90b2NvbF9hdHRyKGlkZW50aWZ5LmluaXRpYXRvcl9wb3J0X3Byb3RvY29scywKIAkJaW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzKTsKQEAgLTY5NSwxNiArNzA2LDE3IEBACiAgKi8KICNkZWZpbmUgc2FzX3BvcnRfc2hvd19zaW1wbGUoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIGNhc3QpCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19zYXNfcG9ydF8jI25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19zYXNfcG9ydF8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCAJCQkJXAorCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBzYXNfcG9ydCAqcG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19zYXNfcG9ydChjZGV2KTsJXAorCXN0cnVjdCBzYXNfcG9ydCAqcG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19zYXNfcG9ydChkZXYpOwlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsIGZvcm1hdF9zdHJpbmcsIGNhc3QgcG9ydC0+ZmllbGQpOwlcCiB9CiAKICNkZWZpbmUgc2FzX3BvcnRfc2ltcGxlX2F0dHIoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIHR5cGUpCQlcCiAJc2FzX3BvcnRfc2hvd19zaW1wbGUoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsICh0eXBlKSkJXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfc2FzX3BvcnRfIyNuYW1lLCBOVUxMKQorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfc2FzX3BvcnRfIyNuYW1lLCBOVUxMKQogCiBzYXNfcG9ydF9zaW1wbGVfYXR0cihudW1fcGh5cywgbnVtX3BoeXMsICIlZFxuIiwgaW50KTsKIApAQCAtMTAxNywyMyArMTAyOSwyNSBAQAogCiAjZGVmaW5lIHNhc19ycGh5X3Nob3dfc2ltcGxlKGZpZWxkLCBuYW1lLCBmb3JtYXRfc3RyaW5nLCBjYXN0KQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfc2FzX3JwaHlfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfc2FzX3JwaHlfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJCVwKKwkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBoeShjZGV2KTsJXAorCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGRldik7CQlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsIGZvcm1hdF9zdHJpbmcsIGNhc3QgcnBoeS0+ZmllbGQpOwlcCiB9CiAKICNkZWZpbmUgc2FzX3JwaHlfc2ltcGxlX2F0dHIoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIHR5cGUpCQlcCiAJc2FzX3JwaHlfc2hvd19zaW1wbGUoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsICh0eXBlKSkJXAotc3RhdGljIFNBU19DTEFTU19ERVZJQ0VfQVRUUihycGh5LCBuYW1lLCBTX0lSVUdPLCAJCQlcCitzdGF0aWMgU0FTX0RFVklDRV9BVFRSKHJwaHksIG5hbWUsIFNfSVJVR08sIAkJCVwKIAkJc2hvd19zYXNfcnBoeV8jI25hbWUsIE5VTEwpCiAKICNkZWZpbmUgc2FzX3JwaHlfc2hvd19wcm90b2NvbChmaWVsZCwgbmFtZSkJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfc2FzX3JwaHlfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3Nob3dfc2FzX3JwaHlfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJCVwKKwkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBoeShjZGV2KTsJXAorCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGRldik7CQlcCiAJCQkJCQkJCQlcCiAJaWYgKCFycGh5LT5maWVsZCkJCQkJCVwKIAkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICJub25lXG4iKTsJCQlcCkBAIC0xMDQyLDEzICsxMDU2LDE0IEBACiAKICNkZWZpbmUgc2FzX3JwaHlfcHJvdG9jb2xfYXR0cihmaWVsZCwgbmFtZSkJCQkJXAogCXNhc19ycGh5X3Nob3dfcHJvdG9jb2woZmllbGQsIG5hbWUpCQkJCVwKLXN0YXRpYyBTQVNfQ0xBU1NfREVWSUNFX0FUVFIocnBoeSwgbmFtZSwgU19JUlVHTywJCQlcCitzdGF0aWMgU0FTX0RFVklDRV9BVFRSKHJwaHksIG5hbWUsIFNfSVJVR08sCQkJXAogCQlzaG93X3Nhc19ycGh5XyMjbmFtZSwgTlVMTCkKIAogc3RhdGljIHNzaXplX3QKLXNob3dfc2FzX3JwaHlfZGV2aWNlX3R5cGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19zYXNfcnBoeV9kZXZpY2VfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3JwaHkoY2Rldik7CisJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3JwaHkoZGV2KTsKIAogCWlmICghcnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUpCiAJCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAibm9uZVxuIik7CkBAIC0xMDU2LDEzICsxMDcxLDE0IEBACiAJCQlycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSwgYnVmKTsKIH0KIAotc3RhdGljIFNBU19DTEFTU19ERVZJQ0VfQVRUUihycGh5LCBkZXZpY2VfdHlwZSwgU19JUlVHTywKK3N0YXRpYyBTQVNfREVWSUNFX0FUVFIocnBoeSwgZGV2aWNlX3R5cGUsIFNfSVJVR08sCiAJCXNob3dfc2FzX3JwaHlfZGV2aWNlX3R5cGUsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19zYXNfcnBoeV9lbmNsb3N1cmVfaWRlbnRpZmllcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzaG93X3Nhc19ycGh5X2VuY2xvc3VyZV9pZGVudGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGNkZXYpOworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGRldik7CiAJc3RydWN0IHNhc19waHkgKnBoeSA9IGRldl90b19waHkocnBoeS0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QocGh5LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2FzX2ludGVybmFsICppID0gdG9fc2FzX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKQEAgLTEwODIsMTMgKzEwOTgsMTQgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpaWRlbnRpZmllcik7CiB9CiAKLXN0YXRpYyBTQVNfQ0xBU1NfREVWSUNFX0FUVFIocnBoeSwgZW5jbG9zdXJlX2lkZW50aWZpZXIsIFNfSVJVR08sCitzdGF0aWMgU0FTX0RFVklDRV9BVFRSKHJwaHksIGVuY2xvc3VyZV9pZGVudGlmaWVyLCBTX0lSVUdPLAogCQlzaG93X3Nhc19ycGh5X2VuY2xvc3VyZV9pZGVudGlmaWVyLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3QKLXNob3dfc2FzX3JwaHlfYmF5X2lkZW50aWZpZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19zYXNfcnBoeV9iYXlfaWRlbnRpZmllcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3JwaHkoY2Rldik7CisJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3JwaHkoZGV2KTsKIAlzdHJ1Y3Qgc2FzX3BoeSAqcGh5ID0gZGV2X3RvX3BoeShycGh5LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChwaHktPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzYXNfaW50ZXJuYWwgKmkgPSB0b19zYXNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwpAQCAtMTEwMyw3ICsxMTIwLDcgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKIH0KIAotc3RhdGljIFNBU19DTEFTU19ERVZJQ0VfQVRUUihycGh5LCBiYXlfaWRlbnRpZmllciwgU19JUlVHTywKK3N0YXRpYyBTQVNfREVWSUNFX0FUVFIocnBoeSwgYmF5X2lkZW50aWZpZXIsIFNfSVJVR08sCiAJCXNob3dfc2FzX3JwaHlfYmF5X2lkZW50aWZpZXIsIE5VTEwpOwogCiBzYXNfcnBoeV9wcm90b2NvbF9hdHRyKGlkZW50aWZ5LmluaXRpYXRvcl9wb3J0X3Byb3RvY29scywKQEAgLTExNjEsOSArMTE3OCwxMCBAQAogCiAjZGVmaW5lIHNhc19lbmRfZGV2X3Nob3dfc2ltcGxlKGZpZWxkLCBuYW1lLCBmb3JtYXRfc3RyaW5nLCBjYXN0KQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19zYXNfZW5kX2Rldl8jI25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19zYXNfZW5kX2Rldl8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCAJCQkJXAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBoeShjZGV2KTsJCVwKKwlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBoeShkZXYpOwkJXAogCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldiA9IHJwaHlfdG9fZW5kX2RldmljZShycGh5KTsJCVwKIAkJCQkJCQkJCVwKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgZm9ybWF0X3N0cmluZywgY2FzdCByZGV2LT5maWVsZCk7CVwKQEAgLTExNzEsNyArMTE4OSw3IEBACiAKICNkZWZpbmUgc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIHR5cGUpCVwKIAlzYXNfZW5kX2Rldl9zaG93X3NpbXBsZShmaWVsZCwgbmFtZSwgZm9ybWF0X3N0cmluZywgKHR5cGUpKQlcCi1zdGF0aWMgU0FTX0NMQVNTX0RFVklDRV9BVFRSKGVuZF9kZXYsIG5hbWUsIFNfSVJVR08sIAkJCVwKK3N0YXRpYyBTQVNfREVWSUNFX0FUVFIoZW5kX2RldiwgbmFtZSwgU19JUlVHTywgCQkJXAogCQlzaG93X3Nhc19lbmRfZGV2XyMjbmFtZSwgTlVMTCkKIAogc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIocmVhZHlfbGVkX21lYW5pbmcsIHJlYWR5X2xlZF9tZWFuaW5nLCAiJWRcbiIsIGludCk7CkBAIC0xMTg1LDkgKzEyMDMsMTAgQEAKIAogI2RlZmluZSBzYXNfZXhwYW5kZXJfc2hvd19zaW1wbGUoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIGNhc3QpCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X3Nhc19leHBhbmRlcl8jI25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorc2hvd19zYXNfZXhwYW5kZXJfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJCVwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGNkZXYpOwkJXAorCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGRldik7CQlcCiAJc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UgKmVkZXYgPSBycGh5X3RvX2V4cGFuZGVyX2RldmljZShycGh5KTsgXAogCQkJCQkJCQkJXAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCBmb3JtYXRfc3RyaW5nLCBjYXN0IGVkZXYtPmZpZWxkKTsJXApAQCAtMTE5NSw3ICsxMjE0LDcgQEAKIAogI2RlZmluZSBzYXNfZXhwYW5kZXJfc2ltcGxlX2F0dHIoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIHR5cGUpCVwKIAlzYXNfZXhwYW5kZXJfc2hvd19zaW1wbGUoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsICh0eXBlKSkJXAotc3RhdGljIFNBU19DTEFTU19ERVZJQ0VfQVRUUihleHBhbmRlciwgbmFtZSwgU19JUlVHTywgCQkJXAorc3RhdGljIFNBU19ERVZJQ0VfQVRUUihleHBhbmRlciwgbmFtZSwgU19JUlVHTywgCQkJXAogCQlzaG93X3Nhc19leHBhbmRlcl8jI25hbWUsIE5VTEwpCiAKIHNhc19leHBhbmRlcl9zaW1wbGVfYXR0cih2ZW5kb3JfaWQsIHZlbmRvcl9pZCwgIiVzXG4iLCBjaGFyICopOwpAQCAtMTU1NCwxNCArMTU3MywxNCBAQAogICovCiAKICNkZWZpbmUgU0VUVVBfVEVNUExBVEUoYXR0cmIsIGZpZWxkLCBwZXJtLCB0ZXN0KQkJCVwKLQlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfIyNmaWVsZDsJCVwKKwlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdID0gZGV2X2F0dHJfIyNmaWVsZDsJCVwKIAlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdLmF0dHIubW9kZSA9IHBlcm07CQkJXAogCWktPmF0dHJiW2NvdW50XSA9ICZpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdOwkJCVwKIAlpZiAodGVzdCkJCQkJCQkJXAogCQljb3VudCsrCiAKICNkZWZpbmUgU0VUVVBfVEVNUExBVEVfUlcoYXR0cmIsIGZpZWxkLCBwZXJtLCB0ZXN0LCByb190ZXN0LCByb19wZXJtKQlcCi0JaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyXyMjZmllbGQ7CQlcCisJaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XSA9IGRldl9hdHRyXyMjZmllbGQ7CQlcCiAJaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XS5hdHRyLm1vZGUgPSBwZXJtOwkJCVwKIAlpZiAocm9fdGVzdCkgewkJCQkJCQlcCiAJCWktPnByaXZhdGVfIyNhdHRyYltjb3VudF0uYXR0ci5tb2RlID0gcm9fcGVybTsJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwppbmRleCAxZmI2MDMxLi5iYzEyYjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIH0KIAogc3RhdGljIGludCBzcGlfaG9zdF9zZXR1cChzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqdGMsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IGNsYXNzX2RldmljZSAqY2RldikKKwkJCSAgc3RydWN0IGRldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChkZXYpOwogCkBAIC0xNjksNyArMTY5LDcgQEAKIAogc3RhdGljIGludCBzcGlfaG9zdF9jb25maWd1cmUoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLAogCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGNsYXNzX2RldmljZSAqY2Rldik7CisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpjZGV2KTsKIAogc3RhdGljIERFQ0xBUkVfVFJBTlNQT1JUX0NMQVNTKHNwaV9ob3N0X2NsYXNzLAogCQkJICAgICAgICJzcGlfaG9zdCIsCkBAIC0xOTUsMTEgKzE5NSwxMSBAQAogCiBzdGF0aWMgaW50IHNwaV90YXJnZXRfY29uZmlndXJlKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0YywKIAkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGNsYXNzX2RldmljZSAqY2Rldik7CisJCQkJc3RydWN0IGRldmljZSAqY2Rldik7CiAKIHN0YXRpYyBpbnQgc3BpX2RldmljZV9jb25maWd1cmUoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLAogCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorCQkJCXN0cnVjdCBkZXZpY2UgKmNkZXYpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzZGV2LT5zZGV2X3RhcmdldDsKQEAgLTIxOSw3ICsyMTksNyBAQAogCiBzdGF0aWMgaW50IHNwaV9zZXR1cF90cmFuc3BvcnRfYXR0cnMoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLAogCQkJCSAgICAgc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGNsYXNzX2RldmljZSAqY2RldikKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmNkZXYpCiB7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdG9fc2NzaV90YXJnZXQoZGV2KTsKIApAQCAtMjQ4LDkgKzI0OCwxMCBAQAogI2RlZmluZSBzcGlfdHJhbnNwb3J0X3Nob3dfc2ltcGxlKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X3NwaV90cmFuc3BvcnRfIyNmaWVsZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCVwKK3Nob3dfc3BpX3RyYW5zcG9ydF8jI2ZpZWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChjZGV2KTsJXAorCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGRldik7CVwKIAlzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyAqdHA7CQkJCQlcCiAJCQkJCQkJCQlcCiAJdHAgPSAoc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKikmc3RhcmdldC0+c3RhcmdldF9kYXRhOwlcCkBAIC0yNjAsMTEgKzI2MSwxMiBAQAogI2RlZmluZSBzcGlfdHJhbnNwb3J0X3N0b3JlX3NpbXBsZShmaWVsZCwgZm9ybWF0X3N0cmluZykJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBcCi0JCQkgICAgc2l6ZV90IGNvdW50KQkJCQlcCitzdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIAkJXAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAogewkJCQkJCQkJCVwKIAlpbnQgdmFsOwkJCQkJCQlcCi0Jc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3N0YXJnZXQoY2Rldik7CVwKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChkZXYpOwlcCiAJc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKnRwOwkJCQkJXAogCQkJCQkJCQkJXAogCXRwID0gKHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICopJnN0YXJnZXQtPnN0YXJnZXRfZGF0YTsJXApAQCAtMjc2LDkgKzI3OCwxMCBAQAogI2RlZmluZSBzcGlfdHJhbnNwb3J0X3Nob3dfZnVuY3Rpb24oZmllbGQsIGZvcm1hdF9zdHJpbmcpCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19zcGlfdHJhbnNwb3J0XyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQlcCitzaG93X3NwaV90cmFuc3BvcnRfIyNmaWVsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3N0YXJnZXQoY2Rldik7CVwKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChkZXYpOwlcCiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7CVwKIAlzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyAqdHA7CQkJCQlcCiAJc3RydWN0IHNwaV9pbnRlcm5hbCAqaSA9IHRvX3NwaV9pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CVwKQEAgLTI5MCwxMSArMjkzLDEyIEBACiAKICNkZWZpbmUgc3BpX3RyYW5zcG9ydF9zdG9yZV9mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZykJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBcCi0JCQkgICAgc2l6ZV90IGNvdW50KQkJCQlcCitzdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCQlcCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCiB7CQkJCQkJCQkJXAogCWludCB2YWw7CQkJCQkJCVwKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChjZGV2KTsJXAorCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGRldik7CVwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsJXAogCXN0cnVjdCBzcGlfaW50ZXJuYWwgKmkgPSB0b19zcGlfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwlcCiAJCQkJCQkJCQlcCkBAIC0zMDcsMTEgKzMxMSwxMiBAQAogCiAjZGVmaW5lIHNwaV90cmFuc3BvcnRfc3RvcmVfbWF4KGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBcCi0JCQkgICAgc2l6ZV90IGNvdW50KQkJCQlcCitzdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCQlcCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCiB7CQkJCQkJCQkJXAogCWludCB2YWw7CQkJCQkJCVwKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChjZGV2KTsJXAorCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGRldik7CVwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsJXAogCXN0cnVjdCBzcGlfaW50ZXJuYWwgKmkgPSB0b19zcGlfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwlcCiAJc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKnRwCQkJCQlcCkBAIC0zMjksMjQgKzMzNCwyNCBAQAogI2RlZmluZSBzcGlfdHJhbnNwb3J0X3JkX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAogCXNwaV90cmFuc3BvcnRfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZykJCVwKIAlzcGlfdHJhbnNwb3J0X3N0b3JlX2Z1bmN0aW9uKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZpZWxkLCBTX0lSVUdPLAkJCQlcCi0JCQkgc2hvd19zcGlfdHJhbnNwb3J0XyMjZmllbGQsCQkJXAotCQkJIHN0b3JlX3NwaV90cmFuc3BvcnRfIyNmaWVsZCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmllbGQsIFNfSVJVR08sCQkJCVwKKwkJICAgc2hvd19zcGlfdHJhbnNwb3J0XyMjZmllbGQsCQkJXAorCQkgICBzdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQpOwogCiAjZGVmaW5lIHNwaV90cmFuc3BvcnRfc2ltcGxlX2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAogCXNwaV90cmFuc3BvcnRfc2hvd19zaW1wbGUoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAogCXNwaV90cmFuc3BvcnRfc3RvcmVfc2ltcGxlKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZpZWxkLCBTX0lSVUdPLAkJCQlcCi0JCQkgc2hvd19zcGlfdHJhbnNwb3J0XyMjZmllbGQsCQkJXAotCQkJIHN0b3JlX3NwaV90cmFuc3BvcnRfIyNmaWVsZCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmllbGQsIFNfSVJVR08sCQkJCVwKKwkJICAgc2hvd19zcGlfdHJhbnNwb3J0XyMjZmllbGQsCQkJXAorCQkgICBzdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQpOwogCiAjZGVmaW5lIHNwaV90cmFuc3BvcnRfbWF4X2F0dHIoZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAogCXNwaV90cmFuc3BvcnRfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZykJCVwKIAlzcGlfdHJhbnNwb3J0X3N0b3JlX21heChmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCiAJc3BpX3RyYW5zcG9ydF9zaW1wbGVfYXR0cihtYXhfIyNmaWVsZCwgZm9ybWF0X3N0cmluZykJCVwKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywJCQkJXAotCQkJIHNob3dfc3BpX3RyYW5zcG9ydF8jI2ZpZWxkLAkJCVwKLQkJCSBzdG9yZV9zcGlfdHJhbnNwb3J0XyMjZmllbGQpOworc3RhdGljIERFVklDRV9BVFRSKGZpZWxkLCBTX0lSVUdPLAkJCQlcCisJCSAgIHNob3dfc3BpX3RyYW5zcG9ydF8jI2ZpZWxkLAkJCVwKKwkJICAgc3RvcmVfc3BpX3RyYW5zcG9ydF8jI2ZpZWxkKTsKIAogLyogVGhlIFBhcmFsbGVsIFNDU0kgVHJhbnBvcnQgQXR0cmlidXRlczogKi8KIHNwaV90cmFuc3BvcnRfbWF4X2F0dHIob2Zmc2V0LCAiJWRcbiIpOwpAQCAtMzcwLDE0ICszNzUsMTUgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX3NwaV9yZXZhbGlkYXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RvcmVfc3BpX3JldmFsaWRhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChjZGV2KTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChkZXYpOwogCiAJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZzdGFyZ2V0LT5kZXYsIE5VTEwsIGNoaWxkX2l0ZXIpOwogCXJldHVybiBjb3VudDsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihyZXZhbGlkYXRlLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9zcGlfcmV2YWxpZGF0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2YWxpZGF0ZSwgU19JV1VTUiwgTlVMTCwgc3RvcmVfc3BpX3JldmFsaWRhdGUpOwogCiAvKiBUcmFuc2xhdGUgdGhlIHBlcmlvZCBpbnRvIG5zIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzcGVjCiAgKiBmb3IgU0RUUi9QUFIgbWVzc2FnZXMgKi8KQEAgLTQxMiw3ICs0MTgsNyBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfc3BpX3RyYW5zcG9ydF9wZXJpb2RfaGVscGVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0b3JlX3NwaV90cmFuc3BvcnRfcGVyaW9kX2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkgIHNpemVfdCBjb3VudCwgaW50ICpwZXJpb2RwKQogewogCWludCBqLCBwaWNvc2VjLCBwZXJpb2QgPSAtMTsKQEAgLTQ0OSw5ICs0NTUsMTAgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXNob3dfc3BpX3RyYW5zcG9ydF9wZXJpb2Qoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19zcGlfdHJhbnNwb3J0X3BlcmlvZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3N0YXJnZXQoY2Rldik7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3N0YXJnZXQoZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc3BpX2ludGVybmFsICppID0gdG9fc3BpX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zcG9ydF9hdHRycyAqdHAgPQpAQCAtNDY0LDggKzQ3MSw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9zcGlfdHJhbnNwb3J0X3BlcmlvZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50KQorc3RvcmVfc3BpX3RyYW5zcG9ydF9wZXJpb2Qoc3RydWN0IGRldmljZSAqY2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3RhcmdldChjZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKQEAgLTQ4NywxMiArNDk0LDEzIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHBlcmlvZCwgU19JUlVHTywKLQkJCSBzaG93X3NwaV90cmFuc3BvcnRfcGVyaW9kLAotCQkJIHN0b3JlX3NwaV90cmFuc3BvcnRfcGVyaW9kKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwZXJpb2QsIFNfSVJVR08sCisJCSAgIHNob3dfc3BpX3RyYW5zcG9ydF9wZXJpb2QsCisJCSAgIHN0b3JlX3NwaV90cmFuc3BvcnRfcGVyaW9kKTsKIAogc3RhdGljIHNzaXplX3QKLXNob3dfc3BpX3RyYW5zcG9ydF9taW5fcGVyaW9kKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfc3BpX3RyYW5zcG9ydF9taW5fcGVyaW9kKHN0cnVjdCBkZXZpY2UgKmNkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGNkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwpAQCAtNTA3LDggKzUxNSw5IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9zcGlfdHJhbnNwb3J0X21pbl9wZXJpb2Qoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCkKK3N0b3JlX3NwaV90cmFuc3BvcnRfbWluX3BlcmlvZChzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGNkZXYpOwogCXN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICp0cCA9CkBAIC01MTksMTIgKzUyOCwxNCBAQAogfQogCiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtaW5fcGVyaW9kLCBTX0lSVUdPLAotCQkJIHNob3dfc3BpX3RyYW5zcG9ydF9taW5fcGVyaW9kLAotCQkJIHN0b3JlX3NwaV90cmFuc3BvcnRfbWluX3BlcmlvZCk7CitzdGF0aWMgREVWSUNFX0FUVFIobWluX3BlcmlvZCwgU19JUlVHTywKKwkJICAgc2hvd19zcGlfdHJhbnNwb3J0X21pbl9wZXJpb2QsCisJCSAgIHN0b3JlX3NwaV90cmFuc3BvcnRfbWluX3BlcmlvZCk7CiAKIAotc3RhdGljIHNzaXplX3Qgc2hvd19zcGlfaG9zdF9zaWduYWxsaW5nKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3BpX2hvc3Rfc2lnbmFsbGluZyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOwogCXN0cnVjdCBzcGlfaW50ZXJuYWwgKmkgPSB0b19zcGlfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwpAQCAtNTM0LDEwICs1NDUsMTEgQEAKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzcGlfc2lnbmFsX3RvX3N0cmluZyhzcGlfc2lnbmFsbGluZyhzaG9zdCkpKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3NwaV9ob3N0X3NpZ25hbGxpbmcoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3NwaV9ob3N0X3NpZ25hbGxpbmcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBzcGlfaW50ZXJuYWwgKmkgPSB0b19zcGlfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCWVudW0gc3BpX3NpZ25hbF90eXBlIHR5cGUgPSBzcGlfc2lnbmFsX3RvX3ZhbHVlKGJ1Zik7CiAKQEAgLTU0OSw5ICs1NjEsOSBAQAogCiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNpZ25hbGxpbmcsIFNfSVJVR08sCi0JCQkgc2hvd19zcGlfaG9zdF9zaWduYWxsaW5nLAotCQkJIHN0b3JlX3NwaV9ob3N0X3NpZ25hbGxpbmcpOworc3RhdGljIERFVklDRV9BVFRSKHNpZ25hbGxpbmcsIFNfSVJVR08sCisJCSAgIHNob3dfc3BpX2hvc3Rfc2lnbmFsbGluZywKKwkJICAgc3RvcmVfc3BpX2hvc3Rfc2lnbmFsbGluZyk7CiAKICNkZWZpbmUgRFZfU0VUKHgsIHkpCQkJXAogCWlmKGktPmYtPnNldF8jI3gpCQlcCkBAIC0xMzM0LDcgKzEzNDYsNyBAQAogCQkJCSAgICBzcGlfZGV2aWNlX2NvbmZpZ3VyZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpob3N0X2F0dHJpYnV0ZXNbXSA9IHsKLQkmY2xhc3NfZGV2aWNlX2F0dHJfc2lnbmFsbGluZy5hdHRyLAorCSZkZXZfYXR0cl9zaWduYWxsaW5nLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMTM0NCwxMiArMTM1NiwxMiBAQAogCiBzdGF0aWMgaW50IHNwaV9ob3N0X2NvbmZpZ3VyZShzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqdGMsCiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorCQkJICAgICAgc3RydWN0IGRldmljZSAqY2RldikKIHsKIAlzdHJ1Y3Qga29iamVjdCAqa29iaiA9ICZjZGV2LT5rb2JqOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOwogCXN0cnVjdCBzcGlfaW50ZXJuYWwgKnNpID0gdG9fc3BpX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKLQlzdHJ1Y3QgYXR0cmlidXRlICphdHRyID0gJmNsYXNzX2RldmljZV9hdHRyX3NpZ25hbGxpbmcuYXR0cjsKKwlzdHJ1Y3QgYXR0cmlidXRlICphdHRyID0gJmRldl9hdHRyX3NpZ25hbGxpbmcuYXR0cjsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKHNpLT5mLT5zZXRfc2lnbmFsbGluZykKQEAgLTEzNjgsNzYgKzEzODAsNzUgQEAKIHN0YXRpYyBpbnQgdGFyZ2V0X2F0dHJpYnV0ZV9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaSkKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0KLQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBjbGFzc19kZXZpY2UsIGtvYmopOworCXN0cnVjdCBkZXZpY2UgKmNkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3N0YXJnZXQoY2Rldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc2hvc3QoY2Rldik7CiAJc3RydWN0IHNwaV9pbnRlcm5hbCAqc2kgPSB0b19zcGlfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCi0JaWYgKGF0dHIgPT0gJmNsYXNzX2RldmljZV9hdHRyX3BlcmlvZC5hdHRyICYmCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX3BlcmlvZC5hdHRyICYmCiAJICAgIHNwaV9zdXBwb3J0X3N5bmMoc3RhcmdldCkpCiAJCXJldHVybiBUQVJHRVRfQVRUUklCVVRFX0hFTFBFUihwZXJpb2QpOwotCWVsc2UgaWYgKGF0dHIgPT0gJmNsYXNzX2RldmljZV9hdHRyX21pbl9wZXJpb2QuYXR0ciAmJgorCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX21pbl9wZXJpb2QuYXR0ciAmJgogCQkgc3BpX3N1cHBvcnRfc3luYyhzdGFyZ2V0KSkKIAkJcmV0dXJuIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKHBlcmlvZCk7Ci0JZWxzZSBpZiAoYXR0ciA9PSAmY2xhc3NfZGV2aWNlX2F0dHJfb2Zmc2V0LmF0dHIgJiYKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9vZmZzZXQuYXR0ciAmJgogCQkgc3BpX3N1cHBvcnRfc3luYyhzdGFyZ2V0KSkKIAkJcmV0dXJuIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKG9mZnNldCk7Ci0JZWxzZSBpZiAoYXR0ciA9PSAmY2xhc3NfZGV2aWNlX2F0dHJfbWF4X29mZnNldC5hdHRyICYmCisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfbWF4X29mZnNldC5hdHRyICYmCiAJCSBzcGlfc3VwcG9ydF9zeW5jKHN0YXJnZXQpKQogCQlyZXR1cm4gVEFSR0VUX0FUVFJJQlVURV9IRUxQRVIob2Zmc2V0KTsKLQllbHNlIGlmIChhdHRyID09ICZjbGFzc19kZXZpY2VfYXR0cl93aWR0aC5hdHRyICYmCisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfd2lkdGguYXR0ciAmJgogCQkgc3BpX3N1cHBvcnRfd2lkZShzdGFyZ2V0KSkKIAkJcmV0dXJuIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKHdpZHRoKTsKLQllbHNlIGlmIChhdHRyID09ICZjbGFzc19kZXZpY2VfYXR0cl9tYXhfd2lkdGguYXR0ciAmJgorCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX21heF93aWR0aC5hdHRyICYmCiAJCSBzcGlfc3VwcG9ydF93aWRlKHN0YXJnZXQpKQogCQlyZXR1cm4gVEFSR0VUX0FUVFJJQlVURV9IRUxQRVIod2lkdGgpOwotCWVsc2UgaWYgKGF0dHIgPT0gJmNsYXNzX2RldmljZV9hdHRyX2l1LmF0dHIgJiYKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9pdS5hdHRyICYmCiAJCSBzcGlfc3VwcG9ydF9pdXMoc3RhcmdldCkpCiAJCXJldHVybiBUQVJHRVRfQVRUUklCVVRFX0hFTFBFUihpdSk7Ci0JZWxzZSBpZiAoYXR0ciA9PSAmY2xhc3NfZGV2aWNlX2F0dHJfZHQuYXR0ciAmJgorCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2R0LmF0dHIgJiYKIAkJIHNwaV9zdXBwb3J0X2R0KHN0YXJnZXQpKQogCQlyZXR1cm4gVEFSR0VUX0FUVFJJQlVURV9IRUxQRVIoZHQpOwotCWVsc2UgaWYgKGF0dHIgPT0gJmNsYXNzX2RldmljZV9hdHRyX3Fhcy5hdHRyICYmCisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcWFzLmF0dHIgJiYKIAkJIHNwaV9zdXBwb3J0X3FhcyhzdGFyZ2V0KSkKIAkJcmV0dXJuIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKHFhcyk7Ci0JZWxzZSBpZiAoYXR0ciA9PSAmY2xhc3NfZGV2aWNlX2F0dHJfd3JfZmxvdy5hdHRyICYmCisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfd3JfZmxvdy5hdHRyICYmCiAJCSBzcGlfc3VwcG9ydF9pdXMoc3RhcmdldCkpCiAJCXJldHVybiBUQVJHRVRfQVRUUklCVVRFX0hFTFBFUih3cl9mbG93KTsKLQllbHNlIGlmIChhdHRyID09ICZjbGFzc19kZXZpY2VfYXR0cl9yZF9zdHJtLmF0dHIgJiYKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9yZF9zdHJtLmF0dHIgJiYKIAkJIHNwaV9zdXBwb3J0X2l1cyhzdGFyZ2V0KSkKIAkJcmV0dXJuIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKHJkX3N0cm0pOwotCWVsc2UgaWYgKGF0dHIgPT0gJmNsYXNzX2RldmljZV9hdHRyX3J0aS5hdHRyICYmCisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfcnRpLmF0dHIgJiYKIAkJIHNwaV9zdXBwb3J0X2l1cyhzdGFyZ2V0KSkKIAkJcmV0dXJuIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKHJ0aSk7Ci0JZWxzZSBpZiAoYXR0ciA9PSAmY2xhc3NfZGV2aWNlX2F0dHJfcGNvbXBfZW4uYXR0ciAmJgorCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3Bjb21wX2VuLmF0dHIgJiYKIAkJIHNwaV9zdXBwb3J0X2l1cyhzdGFyZ2V0KSkKIAkJcmV0dXJuIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKHBjb21wX2VuKTsKLQllbHNlIGlmIChhdHRyID09ICZjbGFzc19kZXZpY2VfYXR0cl9ob2xkX21jcy5hdHRyICYmCisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfaG9sZF9tY3MuYXR0ciAmJgogCQkgc3BpX3N1cHBvcnRfaXVzKHN0YXJnZXQpKQogCQlyZXR1cm4gVEFSR0VUX0FUVFJJQlVURV9IRUxQRVIoaG9sZF9tY3MpOwotCWVsc2UgaWYgKGF0dHIgPT0gJmNsYXNzX2RldmljZV9hdHRyX3JldmFsaWRhdGUuYXR0cikKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9yZXZhbGlkYXRlLmF0dHIpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0YXJnZXRfYXR0cmlidXRlc1tdID0gewotCSZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2QuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbWluX3BlcmlvZC5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9vZmZzZXQuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfbWF4X29mZnNldC5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl93aWR0aC5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9tYXhfd2lkdGguYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaXUuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfZHQuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfcWFzLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX3dyX2Zsb3cuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfcmRfc3RybS5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl9ydGkuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfcGNvbXBfZW4uYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfaG9sZF9tY3MuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfcmV2YWxpZGF0ZS5hdHRyLAorCSZkZXZfYXR0cl9wZXJpb2QuYXR0ciwKKwkmZGV2X2F0dHJfbWluX3BlcmlvZC5hdHRyLAorCSZkZXZfYXR0cl9vZmZzZXQuYXR0ciwKKwkmZGV2X2F0dHJfbWF4X29mZnNldC5hdHRyLAorCSZkZXZfYXR0cl93aWR0aC5hdHRyLAorCSZkZXZfYXR0cl9tYXhfd2lkdGguYXR0ciwKKwkmZGV2X2F0dHJfaXUuYXR0ciwKKwkmZGV2X2F0dHJfZHQuYXR0ciwKKwkmZGV2X2F0dHJfcWFzLmF0dHIsCisJJmRldl9hdHRyX3dyX2Zsb3cuYXR0ciwKKwkmZGV2X2F0dHJfcmRfc3RybS5hdHRyLAorCSZkZXZfYXR0cl9ydGkuYXR0ciwKKwkmZGV2X2F0dHJfcGNvbXBfZW4uYXR0ciwKKwkmZGV2X2F0dHJfaG9sZF9tY3MuYXR0ciwKKwkmZGV2X2F0dHJfcmV2YWxpZGF0ZS5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTE0NDgsNyArMTQ1OSw3IEBACiAKIHN0YXRpYyBpbnQgc3BpX3RhcmdldF9jb25maWd1cmUoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjLAogCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorCQkJCXN0cnVjdCBkZXZpY2UgKmNkZXYpCiB7CiAJc3RydWN0IGtvYmplY3QgKmtvYmogPSAmY2Rldi0+a29iajsKIAlpbnQgaTsKQEAgLTE0NjIsNyArMTQ3Myw3IEBACiAJCSAqIHRvIGlnbm9yZSwgc3lzZnMgYWxzbyBkb2VzIGEgV0FSTl9PTiBhbmQgZHVtcHMgYSB0cmFjZSwKIAkJICogd2hpY2ggaXMgYmFkLCBzbyB0ZW1wb3JhcmlseSwgc2tpcCBhdHRyaWJ1dGVzIHRoYXQgYXJlCiAJCSAqIGFscmVhZHkgdmlzaWJsZSAodGhlIHJldmFsaWRhdGUgb25lKSAqLwotCQlpZiAoaiAmJiBhdHRyICE9ICZjbGFzc19kZXZpY2VfYXR0cl9yZXZhbGlkYXRlLmF0dHIpCisJCWlmIChqICYmIGF0dHIgIT0gJmRldl9hdHRyX3JldmFsaWRhdGUuYXR0cikKIAkJCXJjID0gc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoa29iaiwgYXR0ciwKIAkJCQkJCXRhcmdldF9hdHRyaWJ1dGVfZ3JvdXAubmFtZSk7CiAJCS8qIGFuZCBtYWtlIHRoZSBhdHRyaWJ1dGUgd3JpdGVhYmxlIGlmIHdlIGhhdmUgYSBzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcnAuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcnAuYwppbmRleCAyNDQ1Yzk4Li44YTdhZjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3JwLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NycC5jCkBAIC00NCwyMCArNDQsMjAgQEAKIAlzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgdDsKIAlzdHJ1Y3Qgc3JwX2Z1bmN0aW9uX3RlbXBsYXRlICpmOwogCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbU1JQX0hPU1RfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqaG9zdF9hdHRyc1tTUlBfSE9TVF9BVFRSUyArIDFdOwogCi0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnJwb3J0X2F0dHJzW1NSUF9SUE9SVF9BVFRSUyArIDFdOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcnBvcnRfYXR0cnNbU1JQX1JQT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqcnBvcnRfYXR0cnNbU1JQX1JQT1JUX0FUVFJTICsgMV07CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9ycG9ydF9hdHRyc1tTUlBfUlBPUlRfQVRUUlNdOwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHJwb3J0X2F0dHJfY29udDsKIH07CiAKICNkZWZpbmUgdG9fc3JwX2ludGVybmFsKHRtcGwpIGNvbnRhaW5lcl9vZih0bXBsLCBzdHJ1Y3Qgc3JwX2ludGVybmFsLCB0KQogCiAjZGVmaW5lCWRldl90b19ycG9ydChkKQljb250YWluZXJfb2YoZCwgc3RydWN0IHNycF9ycG9ydCwgZGV2KQotI2RlZmluZSB0cmFuc3BvcnRfY2xhc3NfdG9fc3JwX3Jwb3J0KGNkZXYpIGRldl90b19ycG9ydCgoY2RldiktPmRldikKKyNkZWZpbmUgdHJhbnNwb3J0X2NsYXNzX3RvX3NycF9ycG9ydChkZXYpIGRldl90b19ycG9ydCgoZGV2KS0+cGFyZW50KQogCiBzdGF0aWMgaW50IHNycF9ob3N0X3NldHVwKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICp0Yywgc3RydWN0IGRldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorCQkJICBzdHJ1Y3QgZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KGRldik7CiAJc3RydWN0IHNycF9ob3N0X2F0dHJzICpzcnBfaG9zdCA9IHRvX3NycF9ob3N0X2F0dHJzKHNob3N0KTsKQEAgLTczLDcgKzczLDcgQEAKIAkJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKIAogI2RlZmluZSBTRVRVUF9URU1QTEFURShhdHRyYiwgZmllbGQsIHBlcm0sIHRlc3QsIHJvX3Rlc3QsIHJvX3Blcm0pCVwKLQlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdID0gY2xhc3NfZGV2aWNlX2F0dHJfIyNmaWVsZDsJCVwKKwlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdID0gZGV2X2F0dHJfIyNmaWVsZDsJCVwKIAlpLT5wcml2YXRlXyMjYXR0cmJbY291bnRdLmF0dHIubW9kZSA9IHBlcm07CQkJXAogCWlmIChyb190ZXN0KSB7CQkJCQkJCVwKIAkJaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XS5hdHRyLm1vZGUgPSByb19wZXJtOwkJXApAQCAtMTAwLDEzICsxMDAsMTQgQEAKIAkiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgogCiBzdGF0aWMgc3NpemVfdAotc2hvd19zcnBfcnBvcnRfaWQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc2hvd19zcnBfcnBvcnRfaWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNycF9ycG9ydCAqcnBvcnQgPSB0cmFuc3BvcnRfY2xhc3NfdG9fc3JwX3Jwb3J0KGNkZXYpOworCXN0cnVjdCBzcnBfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3NycF9ycG9ydChkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgU1JQX1BJRF9GTVQgIlxuIiwgU1JQX1BJRChycG9ydCkpOwogfQogCi1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIocG9ydF9pZCwgU19JUlVHTywgc2hvd19zcnBfcnBvcnRfaWQsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBvcnRfaWQsIFNfSVJVR08sIHNob3dfc3JwX3Jwb3J0X2lkLCBOVUxMKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTMyIHZhbHVlOwpAQCAtMTE3LDkgKzExOCwxMCBAQAogfTsKIAogc3RhdGljIHNzaXplX3QKLXNob3dfc3JwX3Jwb3J0X3JvbGVzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3Nob3dfc3JwX3Jwb3J0X3JvbGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBzcnBfcnBvcnQgKnJwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3NycF9ycG9ydChjZGV2KTsKKwlzdHJ1Y3Qgc3JwX3Jwb3J0ICpycG9ydCA9IHRyYW5zcG9ydF9jbGFzc190b19zcnBfcnBvcnQoZGV2KTsKIAlpbnQgaTsKIAljaGFyICpuYW1lID0gTlVMTDsKIApAQCAtMTMxLDcgKzEzMyw3IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG5hbWUgPyA6ICJ1bmtub3duIik7CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihyb2xlcywgU19JUlVHTywgc2hvd19zcnBfcnBvcnRfcm9sZXMsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHJvbGVzLCBTX0lSVUdPLCBzaG93X3NycF9ycG9ydF9yb2xlcywgTlVMTCk7CiAKIHN0YXRpYyB2b2lkIHNycF9ycG9ydF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMzdkZjhiYi4uM2NlYTE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTk1LDcgKzk1LDcgQEAKIHN0YXRpYyB2b2lkIHNkX3Jlc2NhbihzdHJ1Y3QgZGV2aWNlICopOwogc3RhdGljIGludCBzZF9kb25lKHN0cnVjdCBzY3NpX2NtbmQgKik7CiBzdGF0aWMgdm9pZCBzZF9yZWFkX2NhcGFjaXR5KHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcik7Ci1zdGF0aWMgdm9pZCBzY3NpX2Rpc2tfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KTsKK3N0YXRpYyB2b2lkIHNjc2lfZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmNkZXYpOwogc3RhdGljIHZvaWQgc2RfcHJpbnRfc2Vuc2VfaGRyKHN0cnVjdCBzY3NpX2Rpc2sgKiwgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICopOwogc3RhdGljIHZvaWQgc2RfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2Rpc2sgKiwgaW50KTsKIApAQCAtMTEyLDExICsxMTIsMTIgQEAKIAkid3JpdGUgYmFjaywgbm8gcmVhZCAoZGFmdCkiCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzZF9zdG9yZV9jYWNoZV90eXBlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdAorc2Rfc3RvcmVfY2FjaGVfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IGksIGN0ID0gLTEsIHJjZCwgd2NlLCBzcDsKLQlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGNkZXYpOworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soZGV2KTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCA9IHNka3AtPmRldmljZTsKIAljaGFyIGJ1ZmZlcls2NF07CiAJY2hhciAqYnVmZmVyX2RhdGE7CkBAIC0xNjMsMTAgKzE2NCwxMSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2Rfc3RvcmVfbWFuYWdlX3N0YXJ0X3N0b3Aoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKLQkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90CitzZF9zdG9yZV9tYW5hZ2Vfc3RhcnRfc3RvcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHRvX3Njc2lfZGlzayhjZGV2KTsKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGRldik7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSBzZGtwLT5kZXZpY2U7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCkBAIC0xNzcsMTAgKzE3OSwxMSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2Rfc3RvcmVfYWxsb3dfcmVzdGFydChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCQkJICAgICAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QKK3NkX3N0b3JlX2FsbG93X3Jlc3RhcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soY2Rldik7CisJc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHRvX3Njc2lfZGlzayhkZXYpOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQpAQCAtMTk0LDM3ICsxOTcsNDQgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNkX3Nob3dfY2FjaGVfdHlwZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorc2Rfc2hvd19jYWNoZV90eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGNkZXYpOworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soZGV2KTsKIAlpbnQgY3QgPSBzZGtwLT5SQ0QgKyAyKnNka3AtPldDRTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIDQwLCAiJXNcbiIsIHNkX2NhY2hlX3R5cGVzW2N0XSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNkX3Nob3dfZnVhKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90CitzZF9zaG93X2Z1YShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHRvX3Njc2lfZGlzayhjZGV2KTsKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGRldik7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiV1XG4iLCBzZGtwLT5EUE9GVUEpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZF9zaG93X21hbmFnZV9zdGFydF9zdG9wKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90CitzZF9zaG93X21hbmFnZV9zdGFydF9zdG9wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGNkZXYpOworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soZGV2KTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCA9IHNka3AtPmRldmljZTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXVcbiIsIHNkcC0+bWFuYWdlX3N0YXJ0X3N0b3ApOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZF9zaG93X2FsbG93X3Jlc3RhcnQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QKK3NkX3Nob3dfYWxsb3dfcmVzdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHRvX3Njc2lfZGlzayhjZGV2KTsKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGRldik7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCA0MCwgIiVkXG4iLCBzZGtwLT5kZXZpY2UtPmFsbG93X3Jlc3RhcnQpOwogfQogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgc2RfZGlza19hdHRyc1tdID0geworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHNkX2Rpc2tfYXR0cnNbXSA9IHsKIAlfX0FUVFIoY2FjaGVfdHlwZSwgU19JUlVHT3xTX0lXVVNSLCBzZF9zaG93X2NhY2hlX3R5cGUsCiAJICAgICAgIHNkX3N0b3JlX2NhY2hlX3R5cGUpLAogCV9fQVRUUihGVUEsIFNfSVJVR08sIHNkX3Nob3dfZnVhLCBOVUxMKSwKQEAgLTIzOCw4ICsyNDgsOCBAQAogc3RhdGljIHN0cnVjdCBjbGFzcyBzZF9kaXNrX2NsYXNzID0gewogCS5uYW1lCQk9ICJzY3NpX2Rpc2siLAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucmVsZWFzZQk9IHNjc2lfZGlza19yZWxlYXNlLAotCS5jbGFzc19kZXZfYXR0cnMgPSBzZF9kaXNrX2F0dHJzLAorCS5kZXZfcmVsZWFzZQk9IHNjc2lfZGlza19yZWxlYXNlLAorCS5kZXZfYXR0cnMJPSBzZF9kaXNrX2F0dHJzLAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBzZF90ZW1wbGF0ZSA9IHsKQEAgLTI5Nyw3ICszMDcsNyBAQAogCWlmIChkaXNrLT5wcml2YXRlX2RhdGEpIHsKIAkJc2RrcCA9IHNjc2lfZGlzayhkaXNrKTsKIAkJaWYgKHNjc2lfZGV2aWNlX2dldChzZGtwLT5kZXZpY2UpID09IDApCi0JCQljbGFzc19kZXZpY2VfZ2V0KCZzZGtwLT5jZGV2KTsKKwkJCWdldF9kZXZpY2UoJnNka3AtPmRldik7CiAJCWVsc2UKIAkJCXNka3AgPSBOVUxMOwogCX0KQEAgLTMzMSw3ICszNDEsNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNka3AtPmRldmljZTsKIAogCW11dGV4X2xvY2soJnNkX3JlZl9tdXRleCk7Ci0JY2xhc3NfZGV2aWNlX3B1dCgmc2RrcC0+Y2Rldik7CisJcHV0X2RldmljZSgmc2RrcC0+ZGV2KTsKIAlzY3NpX2RldmljZV9wdXQoc2Rldik7CiAJbXV0ZXhfdW5sb2NrKCZzZF9yZWZfbXV0ZXgpOwogfQpAQCAtMTY1NCw2ICsxNjY0LDcgQEAKIAlzZGtwLT5kaXNrID0gZ2Q7CiAJc2RrcC0+aW5kZXggPSBpbmRleDsKIAlzZGtwLT5vcGVuZXJzID0gMDsKKwlzZGtwLT5wcmV2aW91c19zdGF0ZSA9IDE7CiAKIAlpZiAoIXNkcC0+dGltZW91dCkgewogCQlpZiAoc2RwLT50eXBlICE9IFRZUEVfTU9EKQpAQCAtMTY2MiwxMiArMTY3MywxMiBAQAogCQkJc2RwLT50aW1lb3V0ID0gU0RfTU9EX1RJTUVPVVQ7CiAJfQogCi0JY2xhc3NfZGV2aWNlX2luaXRpYWxpemUoJnNka3AtPmNkZXYpOwotCXNka3AtPmNkZXYuZGV2ID0gJnNkcC0+c2Rldl9nZW5kZXY7Ci0Jc2RrcC0+Y2Rldi5jbGFzcyA9ICZzZF9kaXNrX2NsYXNzOwotCXN0cm5jcHkoc2RrcC0+Y2Rldi5jbGFzc19pZCwgc2RwLT5zZGV2X2dlbmRldi5idXNfaWQsIEJVU19JRF9TSVpFKTsKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmc2RrcC0+ZGV2KTsKKwlzZGtwLT5kZXYucGFyZW50ID0gJnNkcC0+c2Rldl9nZW5kZXY7CisJc2RrcC0+ZGV2LmNsYXNzID0gJnNkX2Rpc2tfY2xhc3M7CisJc3RybmNweShzZGtwLT5kZXYuYnVzX2lkLCBzZHAtPnNkZXZfZ2VuZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUpOwogCi0JaWYgKGNsYXNzX2RldmljZV9hZGQoJnNka3AtPmNkZXYpKQorCWlmIChkZXZpY2VfYWRkKCZzZGtwLT5kZXYpKQogCQlnb3RvIG91dF9wdXQ7CiAKIAlnZXRfZGV2aWNlKCZzZHAtPnNkZXZfZ2VuZGV2KTsKQEAgLTE3MzMsMTMgKzE3NDQsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQljbGFzc19kZXZpY2VfZGVsKCZzZGtwLT5jZGV2KTsKKwlkZXZpY2VfZGVsKCZzZGtwLT5kZXYpOwogCWRlbF9nZW5kaXNrKHNka3AtPmRpc2spOwogCXNkX3NodXRkb3duKGRldik7CiAKIAltdXRleF9sb2NrKCZzZF9yZWZfbXV0ZXgpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCWNsYXNzX2RldmljZV9wdXQoJnNka3AtPmNkZXYpOworCXB1dF9kZXZpY2UoJnNka3AtPmRldik7CiAJbXV0ZXhfdW5sb2NrKCZzZF9yZWZfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0xNzQ3LDE2ICsxNzU4LDE2IEBACiAKIC8qKgogICoJc2NzaV9kaXNrX3JlbGVhc2UgLSBDYWxsZWQgdG8gZnJlZSB0aGUgc2NzaV9kaXNrIHN0cnVjdHVyZQotICoJQGNkZXY6IHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCisgKglAZGV2OiBwb2ludGVyIHRvIGVtYmVkZGVkIGNsYXNzIGRldmljZQogICoKICAqCXNkX3JlZl9tdXRleCBtdXN0IGJlIGhlbGQgZW50ZXJpbmcgdGhpcyByb3V0aW5lLiAgQmVjYXVzZSBpdCBpcwogICoJY2FsbGVkIG9uIGxhc3QgcHV0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHNjc2lfZGlza19nZXQoKQogICoJc2NzaV9kaXNrX3B1dCgpIGhlbHBlcnMgd2hpY2ggbWFuaXB1bGF0ZSB0aGUgc2VtYXBob3JlIGRpcmVjdGx5Ci0gKglhbmQgbmV2ZXIgZG8gYSBkaXJlY3QgY2xhc3NfZGV2aWNlX3B1dCgpLgorICoJYW5kIG5ldmVyIGRvIGEgZGlyZWN0IHB1dF9kZXZpY2UuCiAgKiovCi1zdGF0aWMgdm9pZCBzY3NpX2Rpc2tfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQorc3RhdGljIHZvaWQgc2NzaV9kaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soY2Rldik7CisJc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHRvX3Njc2lfZGlzayhkZXYpOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gc2RrcC0+ZGlzazsKIAkKIAlzcGluX2xvY2soJnNkX2luZGV4X2xvY2spOwpAQCAtMTgzNSw4ICsxODQ2LDcgQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EICYmCi0JICAgIHNka3AtPmRldmljZS0+bWFuYWdlX3N0YXJ0X3N0b3ApIHsKKwlpZiAoKG1lc2cuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkgJiYgc2RrcC0+ZGV2aWNlLT5tYW5hZ2Vfc3RhcnRfc3RvcCkgewogCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJTdG9wcGluZyBkaXNrXG4iKTsKIAkJcmV0ID0gc2Rfc3RhcnRfc3RvcF9kZXZpY2Uoc2RrcCwgMCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Nlcy5jIGIvZHJpdmVycy9zY3NpL3Nlcy5jCmluZGV4IGE1N2ZlZDQuLjQ1ZGY4M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2VzLmMKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogCiBzdHJ1Y3Qgc2VzX2RldmljZSB7Ci0JY2hhciAqcGFnZTE7Ci0JY2hhciAqcGFnZTI7Ci0JY2hhciAqcGFnZTEwOworCXVuc2lnbmVkIGNoYXIgKnBhZ2UxOworCXVuc2lnbmVkIGNoYXIgKnBhZ2UyOworCXVuc2lnbmVkIGNoYXIgKnBhZ2UxMDsKIAlzaG9ydCBwYWdlMV9sZW47CiAJc2hvcnQgcGFnZTJfbGVuOwogCXNob3J0IHBhZ2UxMF9sZW47CkBAIC02Nyw3ICs2Nyw3IEBACiBzdGF0aWMgaW50IHNlc19yZWN2X2RpYWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcGFnZV9jb2RlLAogCQkJIHZvaWQgKmJ1ZiwgaW50IGJ1ZmZsZW4pCiB7Ci0JY2hhciBjbWRbXSA9IHsKKwl1bnNpZ25lZCBjaGFyIGNtZFtdID0gewogCQlSRUNFSVZFX0RJQUdOT1NUSUMsCiAJCTEsCQkvKiBTZXQgUENWIGJpdCAqLwogCQlwYWdlX2NvZGUsCkBAIC04NSw3ICs4NSw3IEBACiB7CiAJdTMyIHJlc3VsdDsKIAotCWNoYXIgY21kW10gPSB7CisJdW5zaWduZWQgY2hhciBjbWRbXSA9IHsKIAkJU0VORF9ESUFHTk9TVElDLAogCQkweDEwLAkJLyogU2V0IFBGIGJpdCAqLwogCQkwLApAQCAtMTA0LDEzICsxMDQsMTMgQEAKIAogc3RhdGljIGludCBzZXNfc2V0X3BhZ2UyX2Rlc2NyaXB0b3Ioc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCiAJCQkJICAgICAgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wLAotCQkJCSAgICAgIGNoYXIgKmRlc2MpCisJCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGVzYykKIHsKIAlpbnQgaSwgaiwgY291bnQgPSAwLCBkZXNjcmlwdG9yID0gZWNvbXAtPm51bWJlcjsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShlZGV2LT5jZGV2LmRldik7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZWRldi0+ZWRldi5wYXJlbnQpOwogCXN0cnVjdCBzZXNfZGV2aWNlICpzZXNfZGV2ID0gZWRldi0+c2NyYXRjaDsKLQljaGFyICp0eXBlX3B0ciA9IHNlc19kZXYtPnBhZ2UxICsgMTIgKyBzZXNfZGV2LT5wYWdlMVsxMV07Ci0JY2hhciAqZGVzY19wdHIgPSBzZXNfZGV2LT5wYWdlMiArIDg7CisJdW5zaWduZWQgY2hhciAqdHlwZV9wdHIgPSBzZXNfZGV2LT5wYWdlMSArIDEyICsgc2VzX2Rldi0+cGFnZTFbMTFdOworCXVuc2lnbmVkIGNoYXIgKmRlc2NfcHRyID0gc2VzX2Rldi0+cGFnZTIgKyA4OwogCiAJLyogQ2xlYXIgZXZlcnl0aGluZyAqLwogCW1lbXNldChkZXNjX3B0ciwgMCwgc2VzX2Rldi0+cGFnZTJfbGVuIC0gOCk7CkBAIC0xMzMsMTQgKzEzMywxNCBAQAogCXJldHVybiBzZXNfc2VuZF9kaWFnKHNkZXYsIDIsIHNlc19kZXYtPnBhZ2UyLCBzZXNfZGV2LT5wYWdlMl9sZW4pOwogfQogCi1zdGF0aWMgY2hhciAqc2VzX2dldF9wYWdlMl9kZXNjcmlwdG9yKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKnNlc19nZXRfcGFnZTJfZGVzY3JpcHRvcihzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwKIAkJCQkgICAgICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXApCiB7CiAJaW50IGksIGosIGNvdW50ID0gMCwgZGVzY3JpcHRvciA9IGVjb21wLT5udW1iZXI7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZWRldi0+Y2Rldi5kZXYpOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGVkZXYtPmVkZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2VzX2RldmljZSAqc2VzX2RldiA9IGVkZXYtPnNjcmF0Y2g7Ci0JY2hhciAqdHlwZV9wdHIgPSBzZXNfZGV2LT5wYWdlMSArIDEyICsgc2VzX2Rldi0+cGFnZTFbMTFdOwotCWNoYXIgKmRlc2NfcHRyID0gc2VzX2Rldi0+cGFnZTIgKyA4OworCXVuc2lnbmVkIGNoYXIgKnR5cGVfcHRyID0gc2VzX2Rldi0+cGFnZTEgKyAxMiArIHNlc19kZXYtPnBhZ2UxWzExXTsKKwl1bnNpZ25lZCBjaGFyICpkZXNjX3B0ciA9IHNlc19kZXYtPnBhZ2UyICsgODsKIAogCXNlc19yZWN2X2RpYWcoc2RldiwgMiwgc2VzX2Rldi0+cGFnZTIsIHNlc19kZXYtPnBhZ2UyX2xlbik7CiAKQEAgLTE2MCwxNyArMTYwLDE4IEBACiBzdGF0aWMgdm9pZCBzZXNfZ2V0X2ZhdWx0KHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LAogCQkJICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXApCiB7Ci0JY2hhciAqZGVzYzsKKwl1bnNpZ25lZCBjaGFyICpkZXNjOwogCiAJZGVzYyA9IHNlc19nZXRfcGFnZTJfZGVzY3JpcHRvcihlZGV2LCBlY29tcCk7Ci0JZWNvbXAtPmZhdWx0ID0gKGRlc2NbM10gJiAweDYwKSA+PiA0OworCWlmIChkZXNjKQorCQllY29tcC0+ZmF1bHQgPSAoZGVzY1szXSAmIDB4NjApID4+IDQ7CiB9CiAKIHN0YXRpYyBpbnQgc2VzX3NldF9mYXVsdChzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwKIAkJCSAgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wLAogCQkJIGVudW0gZW5jbG9zdXJlX2NvbXBvbmVudF9zZXR0aW5nIHZhbCkKIHsKLQljaGFyIGRlc2NbNF0gPSB7MCB9OworCXVuc2lnbmVkIGNoYXIgZGVzY1s0XSA9IHswIH07CiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgRU5DTE9TVVJFX1NFVFRJTkdfRElTQUJMRUQ6CkBAIC0xOTAsMjYgKzE5MSwyOCBAQAogc3RhdGljIHZvaWQgc2VzX2dldF9zdGF0dXMoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCiAJCQkgICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXApCiB7Ci0JY2hhciAqZGVzYzsKKwl1bnNpZ25lZCBjaGFyICpkZXNjOwogCiAJZGVzYyA9IHNlc19nZXRfcGFnZTJfZGVzY3JpcHRvcihlZGV2LCBlY29tcCk7Ci0JZWNvbXAtPnN0YXR1cyA9IChkZXNjWzBdICYgMHgwZik7CisJaWYgKGRlc2MpCisJCWVjb21wLT5zdGF0dXMgPSAoZGVzY1swXSAmIDB4MGYpOwogfQogCiBzdGF0aWMgdm9pZCBzZXNfZ2V0X2xvY2F0ZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwKIAkJCSAgIHN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcCkKIHsKLQljaGFyICpkZXNjOworCXVuc2lnbmVkIGNoYXIgKmRlc2M7CiAKIAlkZXNjID0gc2VzX2dldF9wYWdlMl9kZXNjcmlwdG9yKGVkZXYsIGVjb21wKTsKLQllY29tcC0+bG9jYXRlID0gKGRlc2NbMl0gJiAweDAyKSA/IDEgOiAwOworCWlmIChkZXNjKQorCQllY29tcC0+bG9jYXRlID0gKGRlc2NbMl0gJiAweDAyKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IHNlc19zZXRfbG9jYXRlKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LAogCQkJICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXAsCiAJCQkgIGVudW0gZW5jbG9zdXJlX2NvbXBvbmVudF9zZXR0aW5nIHZhbCkKIHsKLQljaGFyIGRlc2NbNF0gPSB7MCB9OworCXVuc2lnbmVkIGNoYXIgZGVzY1s0XSA9IHswIH07CiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgRU5DTE9TVVJFX1NFVFRJTkdfRElTQUJMRUQ6CkBAIC0yMjksNyArMjMyLDcgQEAKIAkJCSAgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wLAogCQkJICBlbnVtIGVuY2xvc3VyZV9jb21wb25lbnRfc2V0dGluZyB2YWwpCiB7Ci0JY2hhciBkZXNjWzRdID0gezAgfTsKKwl1bnNpZ25lZCBjaGFyIGRlc2NbNF0gPSB7MCB9OwogCiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIEVOQ0xPU1VSRV9TRVRUSU5HX0RJU0FCTEVEOgpAQCAtMjY2LDEwICsyNjksMTAgQEAKIAlzdHJ1Y3Qgc2VzX2hvc3RfZWRldiAqc2VkID0gZGF0YTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAKLQlpZiAoIXNjc2lfaXNfc2Rldl9kZXZpY2UoZWRldi0+Y2Rldi5kZXYpKQorCWlmICghc2NzaV9pc19zZGV2X2RldmljZShlZGV2LT5lZGV2LnBhcmVudCkpCiAJCXJldHVybiAwOwogCi0Jc2RldiA9IHRvX3Njc2lfZGV2aWNlKGVkZXYtPmNkZXYuZGV2KTsKKwlzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZWRldi0+ZWRldi5wYXJlbnQpOwogCiAJaWYgKHNkZXYtPmhvc3QgIT0gc2VkLT5zaG9zdCkKIAkJcmV0dXJuIDA7CkBAIC00MDQsMTYgKzQwNywxNiBAQAogCiAjZGVmaW5lIElOSVRfQUxMT0NfU0laRSAzMgogCi1zdGF0aWMgaW50IHNlc19pbnRmX2FkZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LAorc3RhdGljIGludCBzZXNfaW50Zl9hZGQoc3RydWN0IGRldmljZSAqY2RldiwKIAkJCXN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoY2Rldi0+ZGV2KTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShjZGV2LT5wYXJlbnQpOwogCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTCwgKmhkcl9idWYsICp0eXBlX3B0ciwgKmRlc2NfcHRyLAotCQkqYWRkbF9kZXNjX3B0cjsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMLCAqaGRyX2J1ZiwgKnR5cGVfcHRyLCAqZGVzY19wdHIgPSBOVUxMLAorCQkqYWRkbF9kZXNjX3B0ciA9IE5VTEw7CiAJc3RydWN0IHNlc19kZXZpY2UgKnNlc19kZXY7CiAJdTMyIHJlc3VsdDsKLQlpbnQgaSwgaiwgdHlwZXMsIGxlbiwgY29tcG9uZW50cyA9IDA7CisJaW50IGksIGosIHR5cGVzLCBsZW4sIHBhZ2U3X2xlbiA9IDAsIGNvbXBvbmVudHMgPSAwOwogCWludCBlcnIgPSAtRU5PTUVNOwogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2OwogCXN0cnVjdCBzZXNfY29tcG9uZW50ICpzY29tcCA9IE5VTEw7CkBAIC00MjMsNyArNDI2LDcgQEAKIAkJZWRldiA9IGVuY2xvc3VyZV9maW5kKCZzZGV2LT5ob3N0LT5zaG9zdF9nZW5kZXYpOwogCQlpZiAoZWRldikgewogCQkJc2VzX21hdGNoX3RvX2VuY2xvc3VyZShlZGV2LCBzZGV2KTsKLQkJCWNsYXNzX2RldmljZV9wdXQoJmVkZXYtPmNkZXYpOworCQkJcHV0X2RldmljZSgmZWRldi0+ZWRldik7CiAJCX0KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDQ3LDcgKzQ1MCw3IEBACiAJCSAqIHRyYXZlcnNhbCByb3V0aW5lcyBtb3JlIGNvbXBsZXggKi8KIAkJc2Rldl9wcmludGsoS0VSTl9FUlIsIHNkZXYsCiAJCQkiRklYTUUgZHJpdmVyIGhhcyBubyBzdXBwb3J0IGZvciBzdWJlbmNsb3N1cmVzICglZClcbiIsCi0JCQlidWZbMV0pOworCQkJaGRyX2J1ZlsxXSk7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCkBAIC00NjEsOSArNDY0LDggQEAKIAkJZ290byByZWN2X2ZhaWxlZDsKIAogCXR5cGVzID0gYnVmWzEwXTsKLQlsZW4gPSBidWZbMTFdOwogCi0JdHlwZV9wdHIgPSBidWYgKyAxMiArIGxlbjsKKwl0eXBlX3B0ciA9IGJ1ZiArIDEyICsgYnVmWzExXTsKIAogCWZvciAoaSA9IDA7IGkgPCB0eXBlczsgaSsrLCB0eXBlX3B0ciArPSA0KSB7CiAJCWlmICh0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0RFVklDRSB8fApAQCAtNDk0LDI3ICs0OTYsMjYgQEAKIAkvKiBUaGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBwYWdlIC0tLSBhbGxvd3MgdXMKIAkgKiB0byBtYXRjaCB1cCB0aGUgZGV2aWNlcyAqLwogCXJlc3VsdCA9IHNlc19yZWN2X2RpYWcoc2RldiwgMTAsIGhkcl9idWYsIElOSVRfQUxMT0NfU0laRSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBub19wYWdlMTA7CisJaWYgKCFyZXN1bHQpIHsKIAotCWxlbiA9IChoZHJfYnVmWzJdIDw8IDgpICsgaGRyX2J1ZlszXSArIDQ7Ci0JYnVmID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlnb3RvIGVycl9mcmVlOworCQlsZW4gPSAoaGRyX2J1ZlsyXSA8PCA4KSArIGhkcl9idWZbM10gKyA0OworCQlidWYgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKQorCQkJZ290byBlcnJfZnJlZTsKIAotCXJlc3VsdCA9IHNlc19yZWN2X2RpYWcoc2RldiwgMTAsIGJ1ZiwgbGVuKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIHJlY3ZfZmFpbGVkOwotCXNlc19kZXYtPnBhZ2UxMCA9IGJ1ZjsKLQlzZXNfZGV2LT5wYWdlMTBfbGVuID0gbGVuOwotCWJ1ZiA9IE5VTEw7CisJCXJlc3VsdCA9IHNlc19yZWN2X2RpYWcoc2RldiwgMTAsIGJ1ZiwgbGVuKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gcmVjdl9mYWlsZWQ7CisJCXNlc19kZXYtPnBhZ2UxMCA9IGJ1ZjsKKwkJc2VzX2Rldi0+cGFnZTEwX2xlbiA9IGxlbjsKKwkJYnVmID0gTlVMTDsKKwl9CiAKLSBub19wYWdlMTA6CiAJc2NvbXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VzX2NvbXBvbmVudCkgKiBjb21wb25lbnRzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNjb21wKQogCQlnb3RvIGVycl9mcmVlOwogCi0JZWRldiA9IGVuY2xvc3VyZV9yZWdpc3RlcihjZGV2LT5kZXYsIHNkZXYtPnNkZXZfZ2VuZGV2LmJ1c19pZCwKKwllZGV2ID0gZW5jbG9zdXJlX3JlZ2lzdGVyKGNkZXYtPnBhcmVudCwgc2Rldi0+c2Rldl9nZW5kZXYuYnVzX2lkLAogCQkJCSAgY29tcG9uZW50cywgJnNlc19lbmNsb3N1cmVfY2FsbGJhY2tzKTsKIAlpZiAoSVNfRVJSKGVkZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZWRldik7CkBAIC01MzAsNyArNTMxLDcgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIHNpbXBsZV9wb3B1bGF0ZTsKIAotCWxlbiA9IChoZHJfYnVmWzJdIDw8IDgpICsgaGRyX2J1ZlszXSArIDQ7CisJcGFnZTdfbGVuID0gbGVuID0gKGhkcl9idWZbMl0gPDwgOCkgKyBoZHJfYnVmWzNdICsgNDsKIAkvKiBhZGQgMSBmb3IgdHJhaWxpbmcgJ1wwJyB3ZSdsbCB1c2UgKi8KIAlidWYgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQpAQCAtNTQ3LDcgKzU0OCw4IEBACiAJCWxlbiA9IChkZXNjX3B0clsyXSA8PCA4KSArIGRlc2NfcHRyWzNdOwogCQkvKiBza2lwIHBhc3Qgb3ZlcmFsbCBkZXNjcmlwdG9yICovCiAJCWRlc2NfcHRyICs9IGxlbiArIDQ7Ci0JCWFkZGxfZGVzY19wdHIgPSBzZXNfZGV2LT5wYWdlMTAgKyA4OworCQlpZiAoc2VzX2Rldi0+cGFnZTEwKQorCQkJYWRkbF9kZXNjX3B0ciA9IHNlc19kZXYtPnBhZ2UxMCArIDg7CiAJfQogCXR5cGVfcHRyID0gc2VzX2Rldi0+cGFnZTEgKyAxMiArIHNlc19kZXYtPnBhZ2UxWzExXTsKIAljb21wb25lbnRzID0gMDsKQEAgLTU1NywyOSArNTU5LDM1IEBACiAJCQlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXA7CiAKIAkJCWlmIChkZXNjX3B0cikgewotCQkJCWxlbiA9IChkZXNjX3B0clsyXSA8PCA4KSArIGRlc2NfcHRyWzNdOwotCQkJCWRlc2NfcHRyICs9IDQ7Ci0JCQkJLyogQWRkIHRyYWlsaW5nIHplcm8gLSBwdXNoZXMgaW50bwotCQkJCSAqIHJlc2VydmVkIHNwYWNlICovCi0JCQkJZGVzY19wdHJbbGVuXSA9ICdcMCc7Ci0JCQkJbmFtZSA9IGRlc2NfcHRyOworCQkJCWlmIChkZXNjX3B0ciA+PSBidWYgKyBwYWdlN19sZW4pIHsKKwkJCQkJZGVzY19wdHIgPSBOVUxMOworCQkJCX0gZWxzZSB7CisJCQkJCWxlbiA9IChkZXNjX3B0clsyXSA8PCA4KSArIGRlc2NfcHRyWzNdOworCQkJCQlkZXNjX3B0ciArPSA0OworCQkJCQkvKiBBZGQgdHJhaWxpbmcgemVybyAtIHB1c2hlcyBpbnRvCisJCQkJCSAqIHJlc2VydmVkIHNwYWNlICovCisJCQkJCWRlc2NfcHRyW2xlbl0gPSAnXDAnOworCQkJCQluYW1lID0gZGVzY19wdHI7CisJCQkJfQogCQkJfQotCQkJaWYgKHR5cGVfcHRyWzBdICE9IEVOQ0xPU1VSRV9DT01QT05FTlRfREVWSUNFICYmCi0JCQkgICAgdHlwZV9wdHJbMF0gIT0gRU5DTE9TVVJFX0NPTVBPTkVOVF9BUlJBWV9ERVZJQ0UpCi0JCQkJY29udGludWU7Ci0JCQllY29tcCA9CWVuY2xvc3VyZV9jb21wb25lbnRfcmVnaXN0ZXIoZWRldiwKKwkJCWlmICh0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0RFVklDRSB8fAorCQkJICAgIHR5cGVfcHRyWzBdID09IEVOQ0xPU1VSRV9DT01QT05FTlRfQVJSQVlfREVWSUNFKSB7CisKKwkJCQllY29tcCA9CWVuY2xvc3VyZV9jb21wb25lbnRfcmVnaXN0ZXIoZWRldiwKIAkJCQkJCQkgICAgIGNvbXBvbmVudHMrKywKIAkJCQkJCQkgICAgIHR5cGVfcHRyWzBdLAogCQkJCQkJCSAgICAgbmFtZSk7Ci0JCQlpZiAoZGVzY19wdHIpIHsKLQkJCQlkZXNjX3B0ciArPSBsZW47Ci0JCQkJaWYgKCFJU19FUlIoZWNvbXApKQorCisJCQkJaWYgKCFJU19FUlIoZWNvbXApICYmIGFkZGxfZGVzY19wdHIpCiAJCQkJCXNlc19wcm9jZXNzX2Rlc2NyaXB0b3IoZWNvbXAsCiAJCQkJCQkJICAgICAgIGFkZGxfZGVzY19wdHIpOwotCi0JCQkJaWYgKGFkZGxfZGVzY19wdHIpCi0JCQkJCWFkZGxfZGVzY19wdHIgKz0gYWRkbF9kZXNjX3B0clsxXSArIDI7CiAJCQl9CisJCQlpZiAoZGVzY19wdHIpCisJCQkJZGVzY19wdHIgKz0gbGVuOworCisJCQlpZiAoYWRkbF9kZXNjX3B0cikKKwkJCQlhZGRsX2Rlc2NfcHRyICs9IGFkZGxfZGVzY19wdHJbMV0gKyAyOworCiAJCX0KIAl9CiAJa2ZyZWUoYnVmKTsKQEAgLTYxNywxNyArNjI1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNlc19pbnRmX3JlbW92ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LAorc3RhdGljIHZvaWQgc2VzX2ludGZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmNkZXYsCiAJCQkgICAgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqaW50ZikKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShjZGV2LT5kZXYpOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGNkZXYtPnBhcmVudCk7CiAJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXY7CiAJc3RydWN0IHNlc19kZXZpY2UgKnNlc19kZXY7CiAKIAlpZiAoIXNjc2lfZGV2aWNlX2VuY2xvc3VyZShzZGV2KSkKIAkJcmV0dXJuOwogCi0JZWRldiA9IGVuY2xvc3VyZV9maW5kKGNkZXYtPmRldik7CisJZWRldiA9IGVuY2xvc3VyZV9maW5kKGNkZXYtPnBhcmVudCk7CiAJaWYgKCFlZGV2KQogCQlyZXR1cm47CiAKQEAgLTY0MSwxMyArNjQ5LDEzIEBACiAKIAlrZnJlZShlZGV2LT5jb21wb25lbnRbMF0uc2NyYXRjaCk7CiAKLQljbGFzc19kZXZpY2VfcHV0KCZlZGV2LT5jZGV2KTsKKwlwdXRfZGV2aWNlKCZlZGV2LT5lZGV2KTsKIAllbmNsb3N1cmVfdW5yZWdpc3RlcihlZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGFzc19pbnRlcmZhY2Ugc2VzX2ludGVyZmFjZSA9IHsKLQkuYWRkCT0gc2VzX2ludGZfYWRkLAotCS5yZW1vdmUJPSBzZXNfaW50Zl9yZW1vdmUsCisJLmFkZF9kZXYJPSBzZXNfaW50Zl9hZGQsCisJLnJlbW92ZV9kZXYJPSBzZXNfaW50Zl9yZW1vdmUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNjc2lfZHJpdmVyIHNlc190ZW1wbGF0ZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggZTUxNTZhYS4uMjAyOTQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTEwMSwxNiArMTAxLDE2IEBACiAjZGVmaW5lIFNHX1NFQ1RPUl9TWiA1MTIKICNkZWZpbmUgU0dfU0VDVE9SX01TSyAoU0dfU0VDVE9SX1NaIC0gMSkKIAotc3RhdGljIGludCBzZ19hZGQoc3RydWN0IGNsYXNzX2RldmljZSAqLCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICopOwotc3RhdGljIHZvaWQgc2dfcmVtb3ZlKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqKTsKK3N0YXRpYyBpbnQgc2dfYWRkKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqKTsKK3N0YXRpYyB2b2lkIHNnX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7CiAKIHN0YXRpYyBERUZJTkVfSURSKHNnX2luZGV4X2lkcik7CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhzZ19pbmRleF9sb2NrKTsJLyogQWxzbyB1c2VkIHRvIGxvY2sKIAkJCQkJCQkgICBmaWxlIGRlc2NyaXB0b3IgbGlzdCBmb3IgZGV2aWNlICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlIHNnX2ludGVyZmFjZSA9IHsKLQkuYWRkCQk9IHNnX2FkZCwKLQkucmVtb3ZlCQk9IHNnX3JlbW92ZSwKKwkuYWRkX2Rldgk9IHNnX2FkZCwKKwkucmVtb3ZlX2Rldgk9IHNnX3JlbW92ZSwKIH07CiAKIHR5cGVkZWYgc3RydWN0IHNnX3NjYXR0ZXJfaG9sZCB7IC8qIGhvbGRpbmcgYXJlYSBmb3Igc2NzaSBzY2F0dGVyIGdhdGhlciBpbmZvICovCkBAIC0xNDAxLDkgKzE0MDEsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1zZ19hZGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2xfZGV2LCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbF9pbnRmKQorc2dfYWRkKHN0cnVjdCBkZXZpY2UgKmNsX2Rldiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqY2xfaW50ZikKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkcCA9IHRvX3Njc2lfZGV2aWNlKGNsX2Rldi0+ZGV2KTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkcCA9IHRvX3Njc2lfZGV2aWNlKGNsX2Rldi0+cGFyZW50KTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKIAlTZ19kZXZpY2UgKnNkcCA9IE5VTEw7CiAJc3RydWN0IGNkZXYgKiBjZGV2ID0gTlVMTDsKQEAgLTE0MzksMTkgKzE0MzksMTkgQEAKIAogCXNkcC0+Y2RldiA9IGNkZXY7CiAJaWYgKHNnX3N5c2ZzX3ZhbGlkKSB7Ci0JCXN0cnVjdCBjbGFzc19kZXZpY2UgKiBzZ19jbGFzc19tZW1iZXI7CisJCXN0cnVjdCBkZXZpY2UgKnNnX2NsYXNzX21lbWJlcjsKIAotCQlzZ19jbGFzc19tZW1iZXIgPSBjbGFzc19kZXZpY2VfY3JlYXRlKHNnX3N5c2ZzX2NsYXNzLCBOVUxMLAotCQkJCU1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwgc2RwLT5pbmRleCksCi0JCQkJY2xfZGV2LT5kZXYsICIlcyIsCi0JCQkJZGlzay0+ZGlza19uYW1lKTsKKwkJc2dfY2xhc3NfbWVtYmVyID0gZGV2aWNlX2NyZWF0ZShzZ19zeXNmc19jbGFzcywgY2xfZGV2LT5wYXJlbnQsCisJCQkJCQlNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsCisJCQkJCQkgICAgICBzZHAtPmluZGV4KSwKKwkJCQkJCSIlcyIsIGRpc2stPmRpc2tfbmFtZSk7CiAJCWlmIChJU19FUlIoc2dfY2xhc3NfbWVtYmVyKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzZ19hZGQ6ICIKLQkJCSAgICAgICAiY2xhc3NfZGV2aWNlX2NyZWF0ZSBmYWlsZWRcbiIpOworCQkJICAgICAgICJkZXZpY2VfY3JlYXRlIGZhaWxlZFxuIik7CiAJCQllcnJvciA9IFBUUl9FUlIoc2dfY2xhc3NfbWVtYmVyKTsKIAkJCWdvdG8gY2Rldl9hZGRfZXJyOwogCQl9Ci0JCWNsYXNzX3NldF9kZXZkYXRhKHNnX2NsYXNzX21lbWJlciwgc2RwKTsKKwkJZGV2X3NldF9kcnZkYXRhKHNnX2NsYXNzX21lbWJlciwgc2RwKTsKIAkJZXJyb3IgPSBzeXNmc19jcmVhdGVfbGluaygmc2NzaWRwLT5zZGV2X2dlbmRldi5rb2JqLAogCQkJCQkgICZzZ19jbGFzc19tZW1iZXItPmtvYmosICJnZW5lcmljIik7CiAJCWlmIChlcnJvcikKQEAgLTE0NjQsNyArMTQ2NCw3IEBACiAJCSAgICAiQXR0YWNoZWQgc2NzaSBnZW5lcmljIHNnJWQgdHlwZSAlZFxuIiwgc2RwLT5pbmRleCwKIAkJICAgIHNjc2lkcC0+dHlwZSk7CiAKLQljbGFzc19zZXRfZGV2ZGF0YShjbF9kZXYsIHNkcCk7CisJZGV2X3NldF9kcnZkYXRhKGNsX2Rldiwgc2RwKTsKIAogCXJldHVybiAwOwogCkBAIC0xNDgyLDEwICsxNDgyLDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zZ19yZW1vdmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xfZGV2LCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbF9pbnRmKQorc2dfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmNsX2Rldiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqY2xfaW50ZikKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkcCA9IHRvX3Njc2lfZGV2aWNlKGNsX2Rldi0+ZGV2KTsKLQlTZ19kZXZpY2UgKnNkcCA9IGNsYXNzX2dldF9kZXZkYXRhKGNsX2Rldik7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpZHAgPSB0b19zY3NpX2RldmljZShjbF9kZXYtPnBhcmVudCk7CisJU2dfZGV2aWNlICpzZHAgPSBkZXZfZ2V0X2RydmRhdGEoY2xfZGV2KTsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAlTZ19mZCAqc2ZwOwogCVNnX2ZkICp0c2ZwOwpAQCAtMTUyOCw3ICsxNTI4LDcgQEAKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2dfaW5kZXhfbG9jaywgaWZsYWdzKTsKIAogCXN5c2ZzX3JlbW92ZV9saW5rKCZzY3NpZHAtPnNkZXZfZ2VuZGV2LmtvYmosICJnZW5lcmljIik7Ci0JY2xhc3NfZGV2aWNlX2Rlc3Ryb3koc2dfc3lzZnNfY2xhc3MsIE1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwgc2RwLT5pbmRleCkpOworCWRldmljZV9kZXN0cm95KHNnX3N5c2ZzX2NsYXNzLCBNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIHNkcC0+aW5kZXgpKTsKIAljZGV2X2RlbChzZHAtPmNkZXYpOwogCXNkcC0+Y2RldiA9IE5VTEw7CiAJcHV0X2Rpc2soc2RwLT5kaXNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMgYi9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCmluZGV4IDI2Y2ZjNTYuLjAzZTM1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnaXdkOTMuYwpAQCAtMjYzLDEwICsyNjMsMTEgQEAKIAlyZWdzLlNBU1IgPSB3ZHJlZ3MgKyAzOwogCXJlZ3MuU0NNRCA9IHdkcmVncyArIDc7CiAKLQl3ZDMzYzkzX2luaXQoaG9zdCwgcmVncywgZG1hX3NldHVwLCBkbWFfc3RvcCwgV0QzM0M5M19GU19NSFooMjApKTsKKwloZGF0YS0+d2gubm9fc3luYyA9IDA7CisJaGRhdGEtPndoLmZhc3QgPSAxOworCWhkYXRhLT53aC5kbWFfbW9kZSA9IENUUkxfQlVSU1Q7CiAKLQlpZiAoaGRhdGEtPndoLm5vX3N5bmMgPT0gMHhmZikKLQkJaGRhdGEtPndoLm5vX3N5bmMgPSAwOworCXdkMzNjOTNfaW5pdChob3N0LCByZWdzLCBkbWFfc2V0dXAsIGRtYV9zdG9wLCBXRDMzQzkzX0ZTX01IWigyMCkpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCBzZ2l3ZDkzX2ludHIsIDAsICJTR0kgV0Q5MyIsIGhvc3QpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggMjA4NTY1Yi4uN2VlODZkNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNjIzLDYgKzYyMyw3IEBACiAJY2QtPmRpc2sgPSBkaXNrOwogCWNkLT5jYXBhY2l0eSA9IDB4MWZmZmZmOwogCWNkLT5kZXZpY2UtPmNoYW5nZWQgPSAxOwkvKiBmb3JjZSByZWNoZWNrIENEIHR5cGUgKi8KKwljZC0+cHJldmlvdXNfc3RhdGUgPSAxOwogCWNkLT51c2UgPSAxOwogCWNkLT5yZWFkY2Rfa25vd24gPSAwOwogCWNkLT5yZWFkY2RfY2RkYSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IDcxOTUyNzAuLmE4NjBjM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0xNyw3ICsxNyw3IEBACiAgICBMYXN0IG1vZGlmaWVkOiAxOC1KQU4tMTk5OCBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4gRGV2ZnMgc3VwcG9ydAogICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICp2ZXJzdHIgPSAiMjAwODAxMTciOworc3RhdGljIGNvbnN0IGNoYXIgKnZlcnN0ciA9ICIyMDA4MDIyNCI7CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApAQCAtMTgzLDYgKzE4Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3RfYnVmZmVyICpuZXdfdGFwZV9idWZmZXIoaW50LCBpbnQsIGludCk7CiBzdGF0aWMgaW50IGVubGFyZ2VfYnVmZmVyKHN0cnVjdCBzdF9idWZmZXIgKiwgaW50LCBpbnQpOworc3RhdGljIHZvaWQgY2xlYXJfYnVmZmVyKHN0cnVjdCBzdF9idWZmZXIgKik7CiBzdGF0aWMgdm9pZCBub3JtYWxpemVfYnVmZmVyKHN0cnVjdCBzdF9idWZmZXIgKik7CiBzdGF0aWMgaW50IGFwcGVuZF90b19idWZmZXIoY29uc3QgY2hhciBfX3VzZXIgKiwgc3RydWN0IHN0X2J1ZmZlciAqLCBpbnQpOwogc3RhdGljIGludCBmcm9tX2J1ZmZlcihzdHJ1Y3Qgc3RfYnVmZmVyICosIGNoYXIgX191c2VyICosIGludCk7CkBAIC00NDIsNiArNDQzLDcgQEAKIAogCW1lbWNweShTUnBudC0+c2Vuc2UsIHNlbnNlLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCShTVHAtPmJ1ZmZlciktPmNtZHN0YXQubWlkbGV2ZWxfcmVzdWx0ID0gU1JwbnQtPnJlc3VsdCA9IHJlc3VsdDsKKwkoU1RwLT5idWZmZXIpLT5jbWRzdGF0LnJlc2lkdWFsID0gcmVzaWQ7CiAJREVCKCBTVHAtPndyaXRlX3BlbmRpbmcgPSAwOyApCiAKIAlpZiAoU1JwbnQtPndhaXRpbmcpCkBAIC02MjYsNyArNjI4LDcgQEAKIAogCiAvKiBGbHVzaCB0aGUgd3JpdGUgYnVmZmVyIChuZXZlciBuZWVkIHRvIHdyaXRlIGlmIHZhcmlhYmxlIGJsb2Nrc2l6ZSkuICovCi1zdGF0aWMgaW50IGZsdXNoX3dyaXRlX2J1ZmZlcihzdHJ1Y3Qgc2NzaV90YXBlICogU1RwKQorc3RhdGljIGludCBzdF9mbHVzaF93cml0ZV9idWZmZXIoc3RydWN0IHNjc2lfdGFwZSAqIFNUcCkKIHsKIAlpbnQgb2Zmc2V0LCB0cmFuc2ZlciwgYmxrczsKIAlpbnQgcmVzdWx0OwpAQCAtNzE3LDcgKzcxOSw3IEBACiAJCXJldHVybiAwOwogCVNUcHMgPSAmKFNUcC0+cHNbU1RwLT5wYXJ0aXRpb25dKTsKIAlpZiAoU1Rwcy0+cncgPT0gU1RfV1JJVElORykJLyogV3JpdGluZyAqLwotCQlyZXR1cm4gZmx1c2hfd3JpdGVfYnVmZmVyKFNUcCk7CisJCXJldHVybiBzdF9mbHVzaF93cml0ZV9idWZmZXIoU1RwKTsKIAogCWlmIChTVHAtPmJsb2NrX3NpemUgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0xMTU5LDYgKzExNjEsNyBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJKFNUcC0+YnVmZmVyKS0+Y2xlYXJlZCA9IDA7CiAJKFNUcC0+YnVmZmVyKS0+d3JpdGluZyA9IDA7CiAJKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgPSAwOwogCkBAIC0xMTcyLDcgKzExNzUsNyBAQAogCVNUcC0+dHJ5X2Rpb19ub3cgPSBTVHAtPnRyeV9kaW87CiAJU1RwLT5yZWNvdmVyX2NvdW50ID0gMDsKIAlERUIoIFNUcC0+bmJyX3dhaXRzID0gU1RwLT5uYnJfZmluaXNoZWQgPSAwOwotCSAgICAgU1RwLT5uYnJfcmVxdWVzdHMgPSBTVHAtPm5icl9kaW8gPSBTVHAtPm5icl9wYWdlcyA9IFNUcC0+bmJyX2NvbWJpbmFibGUgPSAwOyApCisJICAgICBTVHAtPm5icl9yZXF1ZXN0cyA9IFNUcC0+bmJyX2RpbyA9IFNUcC0+bmJyX3BhZ2VzID0gMDsgKQogCiAJcmV0dmFsID0gY2hlY2tfdGFwZShTVHAsIGZpbHApOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMTIxMSw3ICsxMjE0LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoU1Rwcy0+cncgPT0gU1RfV1JJVElORyAmJiAhU1RwLT5wb3NfdW5rbm93bikgewotCQlyZXN1bHQgPSBmbHVzaF93cml0ZV9idWZmZXIoU1RwKTsKKwkJcmVzdWx0ID0gc3RfZmx1c2hfd3JpdGVfYnVmZmVyKFNUcCk7CiAJCWlmIChyZXN1bHQgIT0gMCAmJiByZXN1bHQgIT0gKC1FTk9TUEMpKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMTIyNiw4ICsxMjI5LDggQEAKIAl9CiAKIAlERUJDKCBpZiAoU1RwLT5uYnJfcmVxdWVzdHMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTnVtYmVyIG9mIHIvdyByZXF1ZXN0cyAlZCwgZGlvIHVzZWQgaW4gJWQsIHBhZ2VzICVkICglZCkuXG4iLAotCQkgICAgICAgbmFtZSwgU1RwLT5uYnJfcmVxdWVzdHMsIFNUcC0+bmJyX2RpbywgU1RwLT5uYnJfcGFnZXMsIFNUcC0+bmJyX2NvbWJpbmFibGUpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBOdW1iZXIgb2Ygci93IHJlcXVlc3RzICVkLCBkaW8gdXNlZCBpbiAlZCwgcGFnZXMgJWQuXG4iLAorCQkgICAgICAgbmFtZSwgU1RwLT5uYnJfcmVxdWVzdHMsIFNUcC0+bmJyX2RpbywgU1RwLT5uYnJfcGFnZXMpKTsKIAogCWlmIChTVHBzLT5ydyA9PSBTVF9XUklUSU5HICYmICFTVHAtPnBvc191bmtub3duKSB7CiAJCXN0cnVjdCBzdF9jbWRzdGF0dXMgKmNtZHN0YXRwID0gJlNUcC0+YnVmZmVyLT5jbWRzdGF0OwpAQCAtMTQyMiw5ICsxNDI1LDYgQEAKIAkJICAgICBpZiAoU1RicC0+ZG9fZGlvKSB7CiAJCQlTVHAtPm5icl9kaW8rKzsKIAkJCVNUcC0+bmJyX3BhZ2VzICs9IFNUYnAtPmRvX2RpbzsKLQkJCWZvciAoaT0xOyBpIDwgU1RicC0+ZG9fZGlvOyBpKyspCi0JCQkJaWYgKHBhZ2VfdG9fcGZuKFNUYnAtPnNnW2ldLnBhZ2UpID09IHBhZ2VfdG9fcGZuKFNUYnAtPnNnW2ktMV0ucGFnZSkgKyAxKQotCQkJCQlTVHAtPm5icl9jb21iaW5hYmxlKys7CiAJCSAgICAgfQogCQkpCiAJfSBlbHNlCkBAIC0xNDM1LDggKzE0MzUsMTQgQEAKIAkJaWYgKFNUcC0+YmxvY2tfc2l6ZSkKIAkJCWJ1ZnNpemUgPSBTVHAtPmJsb2NrX3NpemUgPiBzdF9maXhlZF9idWZmZXJfc2l6ZSA/CiAJCQkJU1RwLT5ibG9ja19zaXplIDogc3RfZml4ZWRfYnVmZmVyX3NpemU7Ci0JCWVsc2UKKwkJZWxzZSB7CiAJCQlidWZzaXplID0gY291bnQ7CisJCQkvKiBNYWtlIHN1cmUgdGhhdCBkYXRhIGZyb20gcHJldmlvdXMgdXNlciBpcyBub3QgbGVha2VkIGV2ZW4gaWYKKwkJCSAgIEhCQSBkb2VzIG5vdCByZXR1cm4gY29ycmVjdCByZXNpZHVhbCAqLworCQkJaWYgKGlzX3JlYWQgJiYgU1RwLT5zaWxpICYmICFTVGJwLT5jbGVhcmVkKQorCQkJCWNsZWFyX2J1ZmZlcihTVGJwKTsKKwkJfQorCiAJCWlmIChidWZzaXplID4gU1RicC0+YnVmZmVyX3NpemUgJiYKIAkJICAgICFlbmxhcmdlX2J1ZmZlcihTVGJwLCBidWZzaXplLCBTVHAtPnJlc3RyX2RtYSkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBhbGxvY2F0ZSAlZCBieXRlIHRhcGUgYnVmZmVyLlxuIiwKQEAgLTE3ODYsNiArMTc5Miw4IEBACiAJbWVtc2V0KGNtZCwgMCwgTUFYX0NPTU1BTkRfU0laRSk7CiAJY21kWzBdID0gUkVBRF82OwogCWNtZFsxXSA9IChTVHAtPmJsb2NrX3NpemUgIT0gMCk7CisJaWYgKCFjbWRbMV0gJiYgU1RwLT5zaWxpKQorCQljbWRbMV0gfD0gMjsKIAljbWRbMl0gPSBibGtzID4+IDE2OwogCWNtZFszXSA9IGJsa3MgPj4gODsKIAljbWRbNF0gPSBibGtzOwpAQCAtMTkxNCw4ICsxOTIyLDExIEBACiAKIAl9CiAJLyogRW5kIG9mIGVycm9yIGhhbmRsaW5nICovIAotCWVsc2UJCQkvKiBSZWFkIHN1Y2Nlc3NmdWwgKi8KKwllbHNlIHsJCQkvKiBSZWFkIHN1Y2Nlc3NmdWwgKi8KIAkJU1RicC0+YnVmZmVyX2J5dGVzID0gYnl0ZXM7CisJCWlmIChTVHAtPnNpbGkpIC8qIEluIGZpeGVkIGJsb2NrIG1vZGUgcmVzaWR1YWwgaXMgYWx3YXlzIHplcm8gaGVyZSAqLworCQkJU1RicC0+YnVmZmVyX2J5dGVzIC09IFNUcC0+YnVmZmVyLT5jbWRzdGF0LnJlc2lkdWFsOworCX0KIAogCWlmIChTVHBzLT5kcnZfYmxvY2sgPj0gMCkgewogCQlpZiAoU1RwLT5ibG9ja19zaXplID09IDApCkBAIC0yMDkzLDcgKzIxMDQsOCBAQAogCQkgICAgICAgbmFtZSwgU1RtLT5kZWZhdWx0c19mb3Jfd3JpdGVzLCBTVHAtPm9taXRfYmxrbGltcywgU1RwLT5jYW5fcGFydGl0aW9ucywKIAkJICAgICAgIFNUcC0+c2NzaTJfbG9naWNhbCk7CiAJCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICIlczogICAgc3lzdjogJWQgbm93YWl0OiAlZFxuIiwgbmFtZSwgU1RtLT5zeXN2LCBTVHAtPmltbWVkaWF0ZSk7CisJCSAgICAgICAiJXM6ICAgIHN5c3Y6ICVkIG5vd2FpdDogJWQgc2lsaTogJWRcbiIsIG5hbWUsIFNUbS0+c3lzdiwgU1RwLT5pbW1lZGlhdGUsCisJCQlTVHAtPnNpbGkpOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogICAgZGVidWdnaW5nOiAlZFxuIiwKIAkJICAgICAgIG5hbWUsIGRlYnVnZ2luZyk7CiAJfQpAQCAtMjEzNiw2ICsyMTQ4LDcgQEAKIAkJU1RwLT5zY3NpMl9sb2dpY2FsID0gKG9wdGlvbnMgJiBNVF9TVF9TQ1NJMkxPR0lDQUwpICE9IDA7CiAJCVNUcC0+aW1tZWRpYXRlID0gKG9wdGlvbnMgJiBNVF9TVF9OT1dBSVQpICE9IDA7CiAJCVNUbS0+c3lzdiA9IChvcHRpb25zICYgTVRfU1RfU1lTVikgIT0gMDsKKwkJU1RwLT5zaWxpID0gKG9wdGlvbnMgJiBNVF9TVF9TSUxJKSAhPSAwOwogCQlERUIoIGRlYnVnZ2luZyA9IChvcHRpb25zICYgTVRfU1RfREVCVUdHSU5HKSAhPSAwOwogCQkgICAgIHN0X2xvZ19vcHRpb25zKFNUcCwgU1RtLCBuYW1lKTsgKQogCX0gZWxzZSBpZiAoY29kZSA9PSBNVF9TVF9TRVRCT09MRUFOUyB8fCBjb2RlID09IE1UX1NUX0NMRUFSQk9PTEVBTlMpIHsKQEAgLTIxNjcsNiArMjE4MCw4IEBACiAJCQlTVHAtPmltbWVkaWF0ZSA9IHZhbHVlOwogCQlpZiAoKG9wdGlvbnMgJiBNVF9TVF9TWVNWKSAhPSAwKQogCQkJU1RtLT5zeXN2ID0gdmFsdWU7CisJCWlmICgob3B0aW9ucyAmIE1UX1NUX1NJTEkpICE9IDApCisJCQlTVHAtPnNpbGkgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICBERUIoCiAJCWlmICgob3B0aW9ucyAmIE1UX1NUX0RFQlVHR0lORykgIT0gMCkKIAkJCWRlYnVnZ2luZyA9IHZhbHVlOwpAQCAtMzY1OCw2ICszNjczLDggQEAKIAkJU1RidWZmZXItPmZycF9zZWdzICs9IDE7CiAJCWdvdCArPSBiX3NpemU7CiAJCVNUYnVmZmVyLT5idWZmZXJfc2l6ZSA9IGdvdDsKKwkJaWYgKFNUYnVmZmVyLT5jbGVhcmVkKQorCQkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhTVGJ1ZmZlci0+ZnJwW3NlZ3NdLnBhZ2UpLCAwLCBiX3NpemUpOwogCQlzZWdzKys7CiAJfQogCVNUYnVmZmVyLT5iX2RhdGEgPSBwYWdlX2FkZHJlc3MoU1RidWZmZXItPmZycFswXS5wYWdlKTsKQEAgLTM2NjYsNiArMzY4MywxNyBAQAogfQogCiAKKy8qIE1ha2Ugc3VyZSB0aGF0IG5vIGRhdGEgZnJvbSBwcmV2aW91cyB1c2VyIGlzIGluIHRoZSBpbnRlcm5hbCBidWZmZXIgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX2J1ZmZlcihzdHJ1Y3Qgc3RfYnVmZmVyICogc3RfYnApCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaSA8IHN0X2JwLT5mcnBfc2VnczsgaSsrKQorCQltZW1zZXQocGFnZV9hZGRyZXNzKHN0X2JwLT5mcnBbaV0ucGFnZSksIDAsIHN0X2JwLT5mcnBbaV0ubGVuZ3RoKTsKKwlzdF9icC0+Y2xlYXJlZCA9IDE7Cit9CisKKwogLyogUmVsZWFzZSB0aGUgZXh0cmEgYnVmZmVyICovCiBzdGF0aWMgdm9pZCBub3JtYWxpemVfYnVmZmVyKHN0cnVjdCBzdF9idWZmZXIgKiBTVGJ1ZmZlcikKIHsKQEAgLTM5OTAsNiArNDAxOCw3IEBACiAJdHBudC0+dHdvX2ZtID0gU1RfVFdPX0ZNOwogCXRwbnQtPmZhc3RfbXRlb20gPSBTVF9GQVNUX01URU9NOwogCXRwbnQtPnNjc2kyX2xvZ2ljYWwgPSBTVF9TQ1NJMkxPR0lDQUw7CisJdHBudC0+c2lsaSA9IFNUX1NJTEk7CiAJdHBudC0+aW1tZWRpYXRlID0gU1RfTk9XQUlUOwogCXRwbnQtPmRlZmF1bHRfZHJ2YnVmZmVyID0gMHhmZjsJCS8qIE5vIGZvcmNlZCBidWZmZXJpbmcgKi8KIAl0cG50LT5wYXJ0aXRpb24gPSAwOwpAQCAtNDA3OSw5ICs0MTA4LDkgQEAKIAkJCWlmIChTVG0tPmNkZXZzW2pdKSB7CiAJCQkJaWYgKGNkZXYgPT0gU1RtLT5jZGV2c1tqXSkKIAkJCQkJY2RldiA9IE5VTEw7Ci0JCQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koc3Rfc3lzZnNfY2xhc3MsCi0JCQkJCQkgICAgIE1LREVWKFNDU0lfVEFQRV9NQUpPUiwKLQkJCQkJCQkgICBUQVBFX01JTk9SKGksIG1vZGUsIGopKSk7CisJCQkJCWRldmljZV9kZXN0cm95KHN0X3N5c2ZzX2NsYXNzLAorCQkJCQkJICAgICAgIE1LREVWKFNDU0lfVEFQRV9NQUpPUiwKKwkJCQkJCQkgICAgIFRBUEVfTUlOT1IoaSwgbW9kZSwgaikpKTsKIAkJCQljZGV2X2RlbChTVG0tPmNkZXZzW2pdKTsKIAkJCX0KIAkJfQpAQCAtNDExOSw5ICs0MTQ4LDkgQEAKIAkJCQkJICAidGFwZSIpOwogCQkJZm9yIChtb2RlID0gMDsgbW9kZSA8IFNUX05CUl9NT0RFUzsgKyttb2RlKSB7CiAJCQkJZm9yIChqPTA7IGogPCAyOyBqKyspIHsKLQkJCQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koc3Rfc3lzZnNfY2xhc3MsCi0JCQkJCQkJICAgICBNS0RFVihTQ1NJX1RBUEVfTUFKT1IsCi0JCQkJCQkJCSAgIFRBUEVfTUlOT1IoaSwgbW9kZSwgaikpKTsKKwkJCQkJZGV2aWNlX2Rlc3Ryb3koc3Rfc3lzZnNfY2xhc3MsCisJCQkJCQkgICAgICAgTUtERVYoU0NTSV9UQVBFX01BSk9SLAorCQkJCQkJCSAgICAgVEFQRV9NSU5PUihpLCBtb2RlLCBqKSkpOwogCQkJCQljZGV2X2RlbCh0cG50LT5tb2Rlc1ttb2RlXS5jZGV2c1tqXSk7CiAJCQkJCXRwbnQtPm1vZGVzW21vZGVdLmNkZXZzW2pdID0gTlVMTDsKIAkJCQl9CkBAIC00MjkwLDMxICs0MzE5LDM0IEBACiAKIAogLyogVGhlIHN5c2ZzIHNpbXBsZSBjbGFzcyBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzc2l6ZV90IHN0X2RlZmluZWRfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90CitzdF9kZWZpbmVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBzdF9tb2RlZGVmICpTVG0gPSAoc3RydWN0IHN0X21vZGVkZWYgKiljbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCXN0cnVjdCBzdF9tb2RlZGVmICpTVG0gPSAoc3RydWN0IHN0X21vZGVkZWYgKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzc2l6ZV90IGwgPSAwOwogCiAJbCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIFNUbS0+ZGVmaW5lZCk7CiAJcmV0dXJuIGw7CiB9CiAKLUNMQVNTX0RFVklDRV9BVFRSKGRlZmluZWQsIFNfSVJVR08sIHN0X2RlZmluZWRfc2hvdywgTlVMTCk7CitERVZJQ0VfQVRUUihkZWZpbmVkLCBTX0lSVUdPLCBzdF9kZWZpbmVkX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdF9kZWZibGtfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90CitzdF9kZWZibGtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHN0X21vZGVkZWYgKlNUbSA9IChzdHJ1Y3Qgc3RfbW9kZWRlZiAqKWNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisJc3RydWN0IHN0X21vZGVkZWYgKlNUbSA9IChzdHJ1Y3Qgc3RfbW9kZWRlZiAqKWRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXNzaXplX3QgbCA9IDA7CiAKIAlsID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgU1RtLT5kZWZhdWx0X2Jsa3NpemUpOwogCXJldHVybiBsOwogfQogCi1DTEFTU19ERVZJQ0VfQVRUUihkZWZhdWx0X2Jsa3NpemUsIFNfSVJVR08sIHN0X2RlZmJsa19zaG93LCBOVUxMKTsKK0RFVklDRV9BVFRSKGRlZmF1bHRfYmxrc2l6ZSwgU19JUlVHTywgc3RfZGVmYmxrX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdF9kZWZkZW5zaXR5X3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorc3RfZGVmZGVuc2l0eV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gKHN0cnVjdCBzdF9tb2RlZGVmICopY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gKHN0cnVjdCBzdF9tb2RlZGVmICopZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3NpemVfdCBsID0gMDsKIAljaGFyICpmbXQ7CiAKQEAgLTQzMjMsMjQgKzQzNTUsNjcgQEAKIAlyZXR1cm4gbDsKIH0KIAotQ0xBU1NfREVWSUNFX0FUVFIoZGVmYXVsdF9kZW5zaXR5LCBTX0lSVUdPLCBzdF9kZWZkZW5zaXR5X3Nob3csIE5VTEwpOworREVWSUNFX0FUVFIoZGVmYXVsdF9kZW5zaXR5LCBTX0lSVUdPLCBzdF9kZWZkZW5zaXR5X3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdF9kZWZjb21wcmVzc2lvbl9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QKK3N0X2RlZmNvbXByZXNzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gKHN0cnVjdCBzdF9tb2RlZGVmICopY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gKHN0cnVjdCBzdF9tb2RlZGVmICopZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3NpemVfdCBsID0gMDsKIAogCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBTVG0tPmRlZmF1bHRfY29tcHJlc3Npb24gLSAxKTsKIAlyZXR1cm4gbDsKIH0KIAotQ0xBU1NfREVWSUNFX0FUVFIoZGVmYXVsdF9jb21wcmVzc2lvbiwgU19JUlVHTywgc3RfZGVmY29tcHJlc3Npb25fc2hvdywgTlVMTCk7CitERVZJQ0VfQVRUUihkZWZhdWx0X2NvbXByZXNzaW9uLCBTX0lSVUdPLCBzdF9kZWZjb21wcmVzc2lvbl9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK3N0X29wdGlvbnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHN0X21vZGVkZWYgKlNUbSA9IChzdHJ1Y3Qgc3RfbW9kZWRlZiAqKWRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY3NpX3RhcGUgKlNUcDsKKwlpbnQgaSwgaiwgb3B0aW9uczsKKwlzc2l6ZV90IGwgPSAwOworCisJZm9yIChpPTA7IGkgPCBzdF9kZXZfbWF4OyBpKyspIHsKKwkJZm9yIChqPTA7IGogPCBTVF9OQlJfTU9ERVM7IGorKykKKwkJCWlmICgmc2NzaV90YXBlc1tpXS0+bW9kZXNbal0gPT0gU1RtKQorCQkJCWJyZWFrOworCQlpZiAoaiA8IFNUX05CUl9NT0RFUykKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBzdF9kZXZfbWF4KQorCQlyZXR1cm4gMDsgIC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKworCVNUcCA9IHNjc2lfdGFwZXNbaV07CisKKwlvcHRpb25zID0gU1RtLT5kb19idWZmZXJfd3JpdGVzID8gTVRfU1RfQlVGRkVSX1dSSVRFUyA6IDA7CisJb3B0aW9ucyB8PSBTVG0tPmRvX2FzeW5jX3dyaXRlcyA/IE1UX1NUX0FTWU5DX1dSSVRFUyA6IDA7CisJb3B0aW9ucyB8PSBTVG0tPmRvX3JlYWRfYWhlYWQgPyBNVF9TVF9SRUFEX0FIRUFEIDogMDsKKwlERUIoIG9wdGlvbnMgfD0gZGVidWdnaW5nID8gTVRfU1RfREVCVUdHSU5HIDogMCApOworCW9wdGlvbnMgfD0gU1RwLT50d29fZm0gPyBNVF9TVF9UV09fRk0gOiAwOworCW9wdGlvbnMgfD0gU1RwLT5mYXN0X210ZW9tID8gTVRfU1RfRkFTVF9NVEVPTSA6IDA7CisJb3B0aW9ucyB8PSBTVG0tPmRlZmF1bHRzX2Zvcl93cml0ZXMgPyBNVF9TVF9ERUZfV1JJVEVTIDogMDsKKwlvcHRpb25zIHw9IFNUcC0+Y2FuX2JzciA/IE1UX1NUX0NBTl9CU1IgOiAwOworCW9wdGlvbnMgfD0gU1RwLT5vbWl0X2Jsa2xpbXMgPyBNVF9TVF9OT19CTEtMSU1TIDogMDsKKwlvcHRpb25zIHw9IFNUcC0+Y2FuX3BhcnRpdGlvbnMgPyBNVF9TVF9DQU5fUEFSVElUSU9OUyA6IDA7CisJb3B0aW9ucyB8PSBTVHAtPnNjc2kyX2xvZ2ljYWwgPyBNVF9TVF9TQ1NJMkxPR0lDQUwgOiAwOworCW9wdGlvbnMgfD0gU1RtLT5zeXN2ID8gTVRfU1RfU1lTViA6IDA7CisJb3B0aW9ucyB8PSBTVHAtPmltbWVkaWF0ZSA/IE1UX1NUX05PV0FJVCA6IDA7CisJb3B0aW9ucyB8PSBTVHAtPnNpbGkgPyBNVF9TVF9TSUxJIDogMDsKKworCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgb3B0aW9ucyk7CisJcmV0dXJuIGw7Cit9CisKK0RFVklDRV9BVFRSKG9wdGlvbnMsIFNfSVJVR08sIHN0X29wdGlvbnNfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBpbnQgZG9fY3JlYXRlX2NsYXNzX2ZpbGVzKHN0cnVjdCBzY3NpX3RhcGUgKlNUcCwgaW50IGRldl9udW0sIGludCBtb2RlKQogewogCWludCBpLCByZXcsIGVycm9yOwogCWNoYXIgbmFtZVsxMF07Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqc3RfY2xhc3NfbWVtYmVyOworCXN0cnVjdCBkZXZpY2UgKnN0X2NsYXNzX21lbWJlcjsKIAogCWZvciAocmV3PTA7IHJldyA8IDI7IHJldysrKSB7CiAJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtaW5vciBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZvdXIKQEAgLTQzNDksMjkgKzQ0MjQsMzIgQEAKIAkJc25wcmludGYobmFtZSwgMTAsICIlcyVzJXMiLCByZXcgPyAibiIgOiAiIiwKIAkJCSBTVHAtPmRpc2stPmRpc2tfbmFtZSwgc3RfZm9ybWF0c1tpXSk7CiAJCXN0X2NsYXNzX21lbWJlciA9Ci0JCQljbGFzc19kZXZpY2VfY3JlYXRlKHN0X3N5c2ZzX2NsYXNzLCBOVUxMLAotCQkJCQkgICAgTUtERVYoU0NTSV9UQVBFX01BSk9SLAotCQkJCQkJICBUQVBFX01JTk9SKGRldl9udW0sIG1vZGUsIHJldykpLAotCQkJCQkgICAgJlNUcC0+ZGV2aWNlLT5zZGV2X2dlbmRldiwgIiVzIiwgbmFtZSk7CisJCQlkZXZpY2VfY3JlYXRlKHN0X3N5c2ZzX2NsYXNzLCAmU1RwLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LAorCQkJCSAgICAgIE1LREVWKFNDU0lfVEFQRV9NQUpPUiwKKwkJCQkJCVRBUEVfTUlOT1IoZGV2X251bSwgbW9kZSwgcmV3KSksCisJCQkJICAgICAgIiVzIiwgbmFtZSk7CiAJCWlmIChJU19FUlIoc3RfY2xhc3NfbWVtYmVyKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3QlZDogY2xhc3NfZGV2aWNlX2NyZWF0ZSBmYWlsZWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzdCVkOiBkZXZpY2VfY3JlYXRlIGZhaWxlZFxuIiwKIAkJCSAgICAgICBkZXZfbnVtKTsKIAkJCWVycm9yID0gUFRSX0VSUihzdF9jbGFzc19tZW1iZXIpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJY2xhc3Nfc2V0X2RldmRhdGEoc3RfY2xhc3NfbWVtYmVyLCAmU1RwLT5tb2Rlc1ttb2RlXSk7CisJCWRldl9zZXRfZHJ2ZGF0YShzdF9jbGFzc19tZW1iZXIsICZTVHAtPm1vZGVzW21vZGVdKTsKIAotCQllcnJvciA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShzdF9jbGFzc19tZW1iZXIsCi0JCQkJCSAgICAgICAmY2xhc3NfZGV2aWNlX2F0dHJfZGVmaW5lZCk7CisJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKHN0X2NsYXNzX21lbWJlciwKKwkJCQkJICAgJmRldl9hdHRyX2RlZmluZWQpOwogCQlpZiAoZXJyb3IpIGdvdG8gb3V0OwotCQllcnJvciA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShzdF9jbGFzc19tZW1iZXIsCi0JCQkJCSAgICAmY2xhc3NfZGV2aWNlX2F0dHJfZGVmYXVsdF9ibGtzaXplKTsKKwkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RfY2xhc3NfbWVtYmVyLAorCQkJCQkgICAmZGV2X2F0dHJfZGVmYXVsdF9ibGtzaXplKTsKIAkJaWYgKGVycm9yKSBnb3RvIG91dDsKLQkJZXJyb3IgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoc3RfY2xhc3NfbWVtYmVyLAotCQkJCQkgICAgJmNsYXNzX2RldmljZV9hdHRyX2RlZmF1bHRfZGVuc2l0eSk7CisJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKHN0X2NsYXNzX21lbWJlciwKKwkJCQkJICAgJmRldl9hdHRyX2RlZmF1bHRfZGVuc2l0eSk7CiAJCWlmIChlcnJvcikgZ290byBvdXQ7Ci0JCWVycm9yID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHN0X2NsYXNzX21lbWJlciwKLQkJCQkgICAgICAgICZjbGFzc19kZXZpY2VfYXR0cl9kZWZhdWx0X2NvbXByZXNzaW9uKTsKKwkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RfY2xhc3NfbWVtYmVyLAorCQkJCQkgICAmZGV2X2F0dHJfZGVmYXVsdF9jb21wcmVzc2lvbik7CisJCWlmIChlcnJvcikgZ290byBvdXQ7CisJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKHN0X2NsYXNzX21lbWJlciwKKwkJCQkJICAgJmRldl9hdHRyX29wdGlvbnMpOwogCQlpZiAoZXJyb3IpIGdvdG8gb3V0OwogCiAJCWlmIChtb2RlID09IDAgJiYgcmV3ID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5oIGIvZHJpdmVycy9zY3NpL3N0LmgKaW5kZXggNmM4MDc1Ny4uYjkyNzEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmgKKysrIGIvZHJpdmVycy9zY3NpL3N0LmgKQEAgLTEyLDYgKzEyLDcgQEAKIAlpbnQgbWlkbGV2ZWxfcmVzdWx0OwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzZW5zZV9oZHI7CiAJaW50IGhhdmVfc2Vuc2U7CisJaW50IHJlc2lkdWFsOwogCXU2NCB1cmVtYWluZGVyNjQ7CiAJdTggZmxhZ3M7CiAJdTggcmVtYWluZGVyX3ZhbGlkOwpAQCAtMzQsNiArMzUsNyBAQAogc3RydWN0IHN0X2J1ZmZlciB7CiAJdW5zaWduZWQgY2hhciBkbWE7CS8qIERNQS1hYmxlIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGNoYXIgZG9fZGlvOyAgIC8qIGRpcmVjdCBpL28gc2V0IHVwPyAqLworCXVuc2lnbmVkIGNoYXIgY2xlYXJlZDsgIC8qIGludGVybmFsIGJ1ZmZlciBjbGVhcmVkIGFmdGVyIG9wZW4/ICovCiAJaW50IGJ1ZmZlcl9zaXplOwogCWludCBidWZmZXJfYmxvY2tzOwogCWludCBidWZmZXJfYnl0ZXM7CkBAIC0xMjIsNiArMTI0LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHRyeV9kaW9fbm93OwkJLyogdHJ5IGRpcmVjdCBpL28gYmVmb3JlIG5leHQgY2xvc2U/ICovCiAJdW5zaWduZWQgY2hhciBjX2FsZ287CQkJLyogY29tcHJlc3Npb24gYWxnb3JpdGhtICovCiAJdW5zaWduZWQgY2hhciBwb3NfdW5rbm93bjsJCQkvKiBhZnRlciByZXNldCBwb3NpdGlvbiB1bmtub3duICovCisJdW5zaWduZWQgY2hhciBzaWxpOwkJCS8qIHVzZSBTSUxJIHdoZW4gcmVhZGluZyBpbiB2YXJpYWJsZSBiIG1vZGUgKi8KIAlpbnQgdGFwZV90eXBlOwogCWludCBsb25nX3RpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGNvbW1hbmRzIGtub3duIHRvIHRha2UgbG9uZyB0aW1lICovCiAKQEAgLTE2NCw3ICsxNjcsNiBAQAogCWludCBuYnJfcmVxdWVzdHM7CiAJaW50IG5icl9kaW87CiAJaW50IG5icl9wYWdlczsKLQlpbnQgbmJyX2NvbWJpbmFibGU7CiAJdW5zaWduZWQgY2hhciBsYXN0X2NtbmRbNl07CiAJdW5zaWduZWQgY2hhciBsYXN0X3NlbnNlWzE2XTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0X29wdGlvbnMuaCBiL2RyaXZlcnMvc2NzaS9zdF9vcHRpb25zLmgKaW5kZXggYjZiNWM5Yy4uZDJmOTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0X29wdGlvbnMuaAorKysgYi9kcml2ZXJzL3Njc2kvc3Rfb3B0aW9ucy5oCkBAIC0zLDcgKzMsNyBAQAogCiAgICBDb3B5cmlnaHQgMTk5NS0yMDAzIEthaSBNYWtpc2FyYS4KIAotICAgTGFzdCBtb2RpZmllZDogTW9uIEFwciAgNyAyMjo0OToxOCAyMDAzIGJ5IG1ha2lzYXJhCisgICBMYXN0IG1vZGlmaWVkOiBUaHUgRmViIDIxIDIxOjQ3OjA3IDIwMDggYnkga2FpLm1ha2lzYXJhCiAqLwogCiAjaWZuZGVmIF9TVF9PUFRJT05TX0gKQEAgLTk0LDYgKzk0LDEwIEBACiAgICBUaGUgZGVmYXVsdCBpcyBCU0Qgc2VtYW50aWNzLiAqLwogI2RlZmluZSBTVF9TWVNWIDAKIAorLyogSWYgU1RfU0lMSSBpcyBub24temVybywgdGhlIFNJTEkgYml0IGlzIHNldCB3aGVuIHJlYWRpbmcgaW4gdmFyaWFibGUgYmxvY2sKKyAgIG1vZGUgYW5kIHRoZSBibG9jayBzaXplIGlzIGRldGVybWluZWQgdXNpbmcgdGhlIHJlc2lkdWFsIHJldHVybmVkIGJ5IHRoZSBIQkEuICovCisjZGVmaW5lIFNUX1NJTEkgMAorCiAvKiBUaW1lIHRvIHdhaXQgZm9yIHRoZSBkcml2ZSB0byBiZWNvbWUgcmVhZHkgaWYgYmxvY2tpbmcgb3BlbiAqLwogI2RlZmluZSBTVF9CTE9DS19TRUNPTkRTICAgICAxMjAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0ZXguYyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKaW5kZXggNzJmNmQ4MC4uZjMwOGEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0ZXguYworKysgYi9kcml2ZXJzL3Njc2kvc3RleC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJzdGV4IgogI2RlZmluZSBTVF9EUklWRVJfVkVSU0lPTiAiMy42LjAwMDAuMSIKQEAgLTM2MiwyMiArMzYzLDE0IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgc3RleF9zZXRfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqY21kLCB1OCBzaywgdTggYXNjLCB1OCBhc2NxKQotewotCWNtZC0+cmVzdWx0ID0gKERSSVZFUl9TRU5TRSA8PCAyNCkgfCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047Ci0KLQljbWQtPnNlbnNlX2J1ZmZlclswXSA9IDB4NzA7ICAgIC8qIGZpeGVkIGZvcm1hdCwgY3VycmVudCAqLwotCWNtZC0+c2Vuc2VfYnVmZmVyWzJdID0gc2s7Ci0JY21kLT5zZW5zZV9idWZmZXJbN10gPSAxOCAtIDg7ICAvKiBhZGRpdGlvbmFsIHNlbnNlIGxlbmd0aCAqLwotCWNtZC0+c2Vuc2VfYnVmZmVyWzEyXSA9IGFzYzsKLQljbWQtPnNlbnNlX2J1ZmZlclsxM10gPSBhc2NxOwotfQotCiBzdGF0aWMgdm9pZCBzdGV4X2ludmFsaWRfZmllbGQoc3RydWN0IHNjc2lfY21uZCAqY21kLAogCQkJICAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQogeworCWNtZC0+cmVzdWx0ID0gKERSSVZFUl9TRU5TRSA8PCAyNCkgfCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisKIAkvKiAiSW52YWxpZCBmaWVsZCBpbiBjYmQiICovCi0Jc3RleF9zZXRfc2Vuc2UoY21kLCBJTExFR0FMX1JFUVVFU1QsIDB4MjQsIDB4MCk7CisJc2NzaV9idWlsZF9zZW5zZV9idWZmZXIoMCwgY21kLT5zZW5zZV9idWZmZXIsIElMTEVHQUxfUkVRVUVTVCwgMHgyNCwKKwkJCQkweDApOwogCWRvbmUoY21kKTsKIH0KIApAQCAtNDI2LDY1ICs0MTksMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3RleF9pbnRlcm5hbF9jb3B5KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKLQljb25zdCB2b2lkICpzcmMsIHNpemVfdCAqY291bnQsIGludCBzZ19jb3VudCwgaW50IGRpcmVjdGlvbikKLXsKLQlzaXplX3QgbGNvdW50OwotCXNpemVfdCBsZW47Ci0Jdm9pZCAqcywgKmQsICpiYXNlID0gTlVMTDsKLQlzaXplX3Qgb2Zmc2V0OwotCi0JaWYgKCpjb3VudCA+IHNjc2lfYnVmZmxlbihjbWQpKQotCQkqY291bnQgPSBzY3NpX2J1ZmZsZW4oY21kKTsKLQlsY291bnQgPSAqY291bnQ7Ci0Jd2hpbGUgKGxjb3VudCkgewotCQlsZW4gPSBsY291bnQ7Ci0JCXMgPSAodm9pZCAqKXNyYzsKLQotCQlvZmZzZXQgPSAqY291bnQgLSBsY291bnQ7Ci0JCXMgKz0gb2Zmc2V0OwotCQliYXNlID0gc2NzaV9rbWFwX2F0b21pY19zZyhzY3NpX3NnbGlzdChjbWQpLAotCQkJCQkgICBzZ19jb3VudCwgJm9mZnNldCwgJmxlbik7Ci0JCWlmICghYmFzZSkgewotCQkJKmNvdW50IC09IGxjb3VudDsKLQkJCXJldHVybjsKLQkJfQotCQlkID0gYmFzZSArIG9mZnNldDsKLQotCQlpZiAoZGlyZWN0aW9uID09IFNUX1RPX0NNRCkKLQkJCW1lbWNweShkLCBzLCBsZW4pOwotCQllbHNlCi0JCQltZW1jcHkocywgZCwgbGVuKTsKLQotCQlsY291bnQgLT0gbGVuOwotCQlzY3NpX2t1bm1hcF9hdG9taWNfc2coYmFzZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHN0ZXhfZGlyZWN0X2NvcHkoc3RydWN0IHNjc2lfY21uZCAqY21kLAotCWNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQotewotCXNpemVfdCBjcF9sZW4gPSBjb3VudDsKLQlpbnQgbl9lbGVtID0gMDsKLQotCW5fZWxlbSA9IHNjc2lfZG1hX21hcChjbWQpOwotCWlmIChuX2VsZW0gPCAwKQotCQlyZXR1cm4gMDsKLQotCXN0ZXhfaW50ZXJuYWxfY29weShjbWQsIHNyYywgJmNwX2xlbiwgbl9lbGVtLCBTVF9UT19DTUQpOwotCi0Jc2NzaV9kbWFfdW5tYXAoY21kKTsKLQotCXJldHVybiBjcF9sZW4gPT0gY291bnQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHN0ZXhfY29udHJvbGxlcl9pbmZvKHN0cnVjdCBzdF9oYmEgKmhiYSwgc3RydWN0IHN0X2NjYiAqY2NiKQogewogCXN0cnVjdCBzdF9mcmFtZSAqcDsKIAlzaXplX3QgY291bnQgPSBzaXplb2Yoc3RydWN0IHN0X2ZyYW1lKTsKIAogCXAgPSBoYmEtPmNvcHlfYnVmZmVyOwotCXN0ZXhfaW50ZXJuYWxfY29weShjY2ItPmNtZCwgcCwgJmNvdW50LCBjY2ItPnNnX2NvdW50LCBTVF9GUk9NX0NNRCk7CisJY291bnQgPSBzY3NpX3NnX2NvcHlfdG9fYnVmZmVyKGNjYi0+Y21kLCBwLCBjb3VudCk7CiAJbWVtc2V0KHAtPmJhc2UsIDAsIHNpemVvZih1MzIpKjYpOwogCSoodW5zaWduZWQgbG9uZyAqKShwLT5iYXNlKSA9IHBjaV9yZXNvdXJjZV9zdGFydChoYmEtPnBkZXYsIDApOwogCXAtPnJvbV9hZGRyID0gMDsKQEAgLTUwMiw3ICs0NDMsNyBAQAogCXAtPnN1YmlkID0KIAkJaGJhLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yIDw8IDE2IHwgaGJhLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwogCi0Jc3RleF9pbnRlcm5hbF9jb3B5KGNjYi0+Y21kLCBwLCAmY291bnQsIGNjYi0+c2dfY291bnQsIFNUX1RPX0NNRCk7CisJY291bnQgPSBzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoY2NiLT5jbWQsIHAsIGNvdW50KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTU2OSw4ICs1MTAsOCBAQAogCQl1bnNpZ25lZCBjaGFyIHBhZ2U7CiAJCXBhZ2UgPSBjbWQtPmNtbmRbMl0gJiAweDNmOwogCQlpZiAocGFnZSA9PSAweDggfHwgcGFnZSA9PSAweDNmKSB7Ci0JCQlzdGV4X2RpcmVjdF9jb3B5KGNtZCwgbXMxMF9jYWNoaW5nX3BhZ2UsCi0JCQkJCXNpemVvZihtczEwX2NhY2hpbmdfcGFnZSkpOworCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKGNtZCwgbXMxMF9jYWNoaW5nX3BhZ2UsCisJCQkJCQkgc2l6ZW9mKG1zMTBfY2FjaGluZ19wYWdlKSk7CiAJCQljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNiB8IENPTU1BTkRfQ09NUExFVEUgPDwgODsKIAkJCWRvbmUoY21kKTsKIAkJfSBlbHNlCkBAIC01OTksOCArNTQwLDggQEAKIAkJaWYgKGlkICE9IGhvc3QtPm1heF9pZCAtIDEpCiAJCQlicmVhazsKIAkJaWYgKGx1biA9PSAwICYmIChjbWQtPmNtbmRbMV0gJiBJTlFVSVJZX0VWUEQpID09IDApIHsKLQkJCXN0ZXhfZGlyZWN0X2NvcHkoY21kLCBjb25zb2xlX2lucV9wYWdlLAotCQkJCXNpemVvZihjb25zb2xlX2lucV9wYWdlKSk7CisJCQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoY21kLCAodm9pZCAqKWNvbnNvbGVfaW5xX3BhZ2UsCisJCQkJCQkgc2l6ZW9mKGNvbnNvbGVfaW5xX3BhZ2UpKTsKIAkJCWNtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2IHwgQ09NTUFORF9DT01QTEVURSA8PCA4OwogCQkJZG9uZShjbWQpOwogCQl9IGVsc2UKQEAgLTYwOSw2ICs1NTAsNyBAQAogCWNhc2UgUEFTU1RIUlVfQ01EOgogCQlpZiAoY21kLT5jbW5kWzFdID09IFBBU1NUSFJVX0dFVF9EUlZWRVIpIHsKIAkJCXN0cnVjdCBzdF9kcnZ2ZXIgdmVyOworCQkJc2l6ZV90IGNwX2xlbiA9IHNpemVvZih2ZXIpOwogCQkJdmVyLm1ham9yID0gU1RfVkVSX01BSk9SOwogCQkJdmVyLm1pbm9yID0gU1RfVkVSX01JTk9SOwogCQkJdmVyLm9lbSA9IFNUX09FTTsKQEAgLTYxNiw3ICs1NTgsOCBAQAogCQkJdmVyLnNpZ25hdHVyZVswXSA9IFBBU1NUSFJVX1NJR05BVFVSRTsKIAkJCXZlci5jb25zb2xlX2lkID0gaG9zdC0+bWF4X2lkIC0gMTsKIAkJCXZlci5ob3N0X25vID0gaGJhLT5ob3N0LT5ob3N0X25vOwotCQkJY21kLT5yZXN1bHQgPSBzdGV4X2RpcmVjdF9jb3B5KGNtZCwgJnZlciwgc2l6ZW9mKHZlcikpID8KKwkJCWNwX2xlbiA9IHNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihjbWQsICZ2ZXIsIGNwX2xlbik7CisJCQljbWQtPnJlc3VsdCA9IHNpemVvZih2ZXIpID09IGNwX2xlbiA/CiAJCQkJRElEX09LIDw8IDE2IHwgQ09NTUFORF9DT01QTEVURSA8PCA4IDoKIAkJCQlESURfRVJST1IgPDwgMTYgfCBDT01NQU5EX0NPTVBMRVRFIDw8IDg7CiAJCQlkb25lKGNtZCk7CkBAIC03MDgsMTUgKzY1MSwxMiBAQAogCiAJaWYgKGNjYi0+Y21kID09IE5VTEwpCiAJCXJldHVybjsKLQlzdGV4X2ludGVybmFsX2NvcHkoY2NiLT5jbWQsCi0JCXJlc3AtPnZhcmlhYmxlLCAmY291bnQsIGNjYi0+c2dfY291bnQsIFNUX1RPX0NNRCk7CisJY291bnQgPSBzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoY2NiLT5jbWQsIHJlc3AtPnZhcmlhYmxlLCBjb3VudCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0ZXhfeXNfY29tbWFuZHMoc3RydWN0IHN0X2hiYSAqaGJhLAogCXN0cnVjdCBzdF9jY2IgKmNjYiwgc3RydWN0IHN0YXR1c19tc2cgKnJlc3ApCiB7Ci0Jc2l6ZV90IGNvdW50OwotCiAJaWYgKGNjYi0+Y21kLT5jbW5kWzBdID09IE1HVF9DTUQgJiYKIAkJcmVzcC0+c2NzaV9zdGF0dXMgIT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKSB7CiAJCXNjc2lfc2V0X3Jlc2lkKGNjYi0+Y21kLCBzY3NpX2J1ZmZsZW4oY2NiLT5jbWQpIC0KQEAgLTczMiw5ICs2NzIsOCBAQAogCQlyZXNwLT5zY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9HT09EKSB7CiAJCVNUX0lOUSAqaW5xX2RhdGE7CiAKLQkJY291bnQgPSBTVEVYX0VYVFJBX1NJWkU7Ci0JCXN0ZXhfaW50ZXJuYWxfY29weShjY2ItPmNtZCwgaGJhLT5jb3B5X2J1ZmZlciwKLQkJCSZjb3VudCwgY2NiLT5zZ19jb3VudCwgU1RfRlJPTV9DTUQpOworCQlzY3NpX3NnX2NvcHlfdG9fYnVmZmVyKGNjYi0+Y21kLCBoYmEtPmNvcHlfYnVmZmVyLAorCQkJCSAgICAgICBTVEVYX0VYVFJBX1NJWkUpOwogCQlpbnFfZGF0YSA9IChTVF9JTlEgKiloYmEtPmNvcHlfYnVmZmVyOwogCQlpZiAoaW5xX2RhdGEtPkRldmljZVR5cGVRdWFsaWZpZXIgIT0gMCkKIAkJCWNjYi0+c3JiX3N0YXR1cyA9IFNSQl9TVEFUVVNfU0VMRUNUSU9OX1RJTUVPVVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYwppbmRleCAwMmQ5NzI3Li5hYWE0ZmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMKQEAgLTU4MiwzICs1ODIsNCBAQAogCiAjaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKIAorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggZjI4NmMzNy4uNWZkYTg4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC0xOTczLDEwICsxOTczLDcgQEAKIAlob3N0ZGF0YS0+aW5jb21pbmdfcHRyID0gMDsKIAlob3N0ZGF0YS0+b3V0Z29pbmdfbGVuID0gMDsKIAlob3N0ZGF0YS0+ZGVmYXVsdF9zeF9wZXIgPSBERUZBVUxUX1NYX1BFUjsKLQlob3N0ZGF0YS0+bm9fc3luYyA9IDB4ZmY7CS8qIHN5bmMgZGVmYXVsdHMgdG8gb2ZmICovCiAJaG9zdGRhdGEtPm5vX2RtYSA9IDA7CS8qIGRlZmF1bHQgaXMgRE1BIGVuYWJsZWQgKi8KLQlob3N0ZGF0YS0+ZmFzdCA9IDA7CS8qIGRlZmF1bHQgaXMgRmFzdCBTQ1NJIHRyYW5zZmVycyBkaXNhYmxlZCAqLwotCWhvc3RkYXRhLT5kbWFfbW9kZSA9IENUUkxfRE1BOwkvKiBkZWZhdWx0IGlzIFNpbmdsZSBCeXRlIERNQSAqLwogCiAjaWZkZWYgUFJPQ19JTlRFUkZBQ0UKIAlob3N0ZGF0YS0+cHJvYyA9IFBSX1ZFUlNJT04gfCBQUl9JTkZPIHwgUFJfU1RBVElTVElDUyB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggNzdmN2E3Zi4uOTZhNTg1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTc0MCw2ICsxNzQwLDYwIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTAorLyoKKyAqIENvbnNvbGUgcG9sbGluZyByb3V0aW5lcyBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBmcm9tIHRoZSB1YXJ0IHdoaWxlCisgKiBpbiBhbiBpbnRlcnJ1cHQgb3IgZGVidWcgY29udGV4dC4KKyAqLworCitzdGF0aWMgaW50IHNlcmlhbDgyNTBfZ2V0X3BvbGxfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICopcG9ydDsKKwl1bnNpZ25lZCBjaGFyIGxzciA9IHNlcmlhbF9pbnAodXAsIFVBUlRfTFNSKTsKKworCXdoaWxlICghKGxzciAmIFVBUlRfTFNSX0RSKSkKKwkJbHNyID0gc2VyaWFsX2lucCh1cCwgVUFSVF9MU1IpOworCisJcmV0dXJuIHNlcmlhbF9pbnAodXAsIFVBUlRfUlgpOworfQorCisKK3N0YXRpYyB2b2lkIHNlcmlhbDgyNTBfcHV0X3BvbGxfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJIHVuc2lnbmVkIGNoYXIgYykKK3sKKwl1bnNpZ25lZCBpbnQgaWVyOworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICopcG9ydDsKKworCS8qCisJICoJRmlyc3Qgc2F2ZSB0aGUgSUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cworCSAqLworCWllciA9IHNlcmlhbF9pbih1cCwgVUFSVF9JRVIpOworCWlmICh1cC0+Y2FwYWJpbGl0aWVzICYgVUFSVF9DQVBfVVVFKQorCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgVUFSVF9JRVJfVVVFKTsKKwllbHNlCisJCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCAwKTsKKworCXdhaXRfZm9yX3htaXRyKHVwLCBCT1RIX0VNUFRZKTsKKwkvKgorCSAqCVNlbmQgdGhlIGNoYXJhY3RlciBvdXQuCisJICoJSWYgYSBMRiwgYWxzbyBkbyBDUi4uLgorCSAqLworCXNlcmlhbF9vdXQodXAsIFVBUlRfVFgsIGMpOworCWlmIChjID09IDEwKSB7CisJCXdhaXRfZm9yX3htaXRyKHVwLCBCT1RIX0VNUFRZKTsKKwkJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgMTMpOworCX0KKworCS8qCisJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CisJICoJYW5kIHJlc3RvcmUgdGhlIElFUgorCSAqLworCXdhaXRfZm9yX3htaXRyKHVwLCBCT1RIX0VNUFRZKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgaWVyKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgKi8KKwogc3RhdGljIGludCBzZXJpYWw4MjUwX3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CkBAIC0yMzg2LDYgKzI0NDAsMTAgQEAKIAkucmVxdWVzdF9wb3J0CT0gc2VyaWFsODI1MF9yZXF1ZXN0X3BvcnQsCiAJLmNvbmZpZ19wb3J0CT0gc2VyaWFsODI1MF9jb25maWdfcG9ydCwKIAkudmVyaWZ5X3BvcnQJPSBzZXJpYWw4MjUwX3ZlcmlmeV9wb3J0LAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKKwkucG9sbF9nZXRfY2hhciA9IHNlcmlhbDgyNTBfZ2V0X3BvbGxfY2hhciwKKwkucG9sbF9wdXRfY2hhciA9IHNlcmlhbDgyNTBfcHV0X3BvbGxfY2hhciwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCBzZXJpYWw4MjUwX3BvcnRzW1VBUlRfTlJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggYThiZWM0OS4uZjk3MjI0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xMjE0LDEzICsxMjE0LDYgQEAKIAkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKIAkJLnVhcnRfb2Zmc2V0CT0gOCwKIAl9LAotCVtwYm5fYjBfOF8xMTUyMDBdID0gewotCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCi0JCS5udW1fcG9ydHMJPSA4LAotCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAotCQkudWFydF9vZmZzZXQJPSA4LAotCX0sCi0KIAlbcGJuX2IwXzFfOTIxNjAwXSA9IHsKIAkJLmZsYWdzCQk9IEZMX0JBU0UwLAogCQkubnVtX3BvcnRzCT0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BucC5jCmluZGV4IDZmMDljYmQuLjk3YzY4ZDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BucC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMKQEAgLTkxLDYgKzkxLDggQEAKIAkvKiBBcmNodGVrIEFtZXJpY2EgQ29ycC4gKi8KIAkvKiBBcmNodGVrIFNtYXJ0TGluayBNb2RlbSAzMzM0QlQgUGx1ZyAmIFBsYXkgKi8KIAl7CSJHVkMwMDBGIiwJCTAJfSwKKwkvKiBBcmNodGVrIFNtYXJ0TGluayBNb2RlbSAzMzM0QlJWIDMzLjZLIERhdGEgRmF4IFZvaWNlICovCisJewkiR1ZDMDMwMyIsCQkwCX0sCiAJLyogSGF5ZXMgKi8KIAkvKiBIYXllcyBPcHRpbWEgMjg4IFYuMzQtVi5GQyArIEZBWCArIFZvaWNlIFBsdWcgJiBQbGF5ICovCiAJewkiSEFZMDAwMSIsCQkwCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCBiODI1OTVjLi5mN2NkOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTY4Niw3ICs2ODYsNyBAQAogCiBjb25maWcgU0VSSUFMX0JGSU5fVUFSVDEKIAlib29sICJFbmFibGUgVUFSVDEiCi0JZGVwZW5kcyBvbiBTRVJJQUxfQkZJTiAmJiAoQkY1MzQgfHwgQkY1MzYgfHwgQkY1MzcgfHwgQkY1NHgpCisJZGVwZW5kcyBvbiBTRVJJQUxfQkZJTiAmJiAoIUJGNTMxICYmICFCRjUzMiAmJiAhQkY1MzMgJiYgIUJGNTYxKQogCWhlbHAKIAkgIEVuYWJsZSBVQVJUMQogCkBAIC02OTksMTQgKzY5OSwxNCBAQAogCiBjb25maWcgVUFSVDFfQ1RTX1BJTgogCWludCAiVUFSVDEgQ1RTIHBpbiIKLQlkZXBlbmRzIG9uIEJGSU5fVUFSVDFfQ1RTUlRTICYmIChCRjUzeCB8fCBCRjU2MSkKKwlkZXBlbmRzIG9uIEJGSU5fVUFSVDFfQ1RTUlRTICYmICFCRjU0eAogCWRlZmF1bHQgLTEKIAloZWxwCiAJICBSZWZlciB0byAuL2luY2x1ZGUvYXNtLWJsYWNrZmluL2dwaW8uaCB0byBzZWUgdGhlIEdQSU8gbWFwLgogCiBjb25maWcgVUFSVDFfUlRTX1BJTgogCWludCAiVUFSVDEgUlRTIHBpbiIKLQlkZXBlbmRzIG9uIEJGSU5fVUFSVDFfQ1RTUlRTICYmIChCRjUzeCB8fCBCRjU2MSkKKwlkZXBlbmRzIG9uIEJGSU5fVUFSVDFfQ1RTUlRTICYmICFCRjU0eAogCWRlZmF1bHQgLTEKIAloZWxwCiAJICBSZWZlciB0byAuL2luY2x1ZGUvYXNtLWJsYWNrZmluL2dwaW8uaCB0byBzZWUgdGhlIEdQSU8gbWFwLgpAQCAtOTYxLDYgKzk2MSw5IEBACiBjb25maWcgU0VSSUFMX0NPUkVfQ09OU09MRQogCWJvb2wKIAorY29uZmlnIENPTlNPTEVfUE9MTAorCWJvb2wKKwogY29uZmlnIFNFUklBTF82ODMyOAogCWJvb2wgIjY4MzI4IHNlcmlhbCBzdXBwb3J0IgogCWRlcGVuZHMgb24gTTY4MzI4IHx8IE02OEVaMzI4IHx8IE02OFZaMzI4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IDY0MGNmZTQuLjNjYmVhNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC02Niw0ICs2Niw1IEBACiBvYmotJChDT05GSUdfU0VSSUFMX05FVFgpICs9IG5ldHgtc2VyaWFsLm8KIG9iai0kKENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0pICs9IG9mX3NlcmlhbC5vCiBvYmotJChDT05GSUdfU0VSSUFMX0tTODY5NSkgKz0gc2VyaWFsX2tzODY5NS5vCitvYmotJChDT05GSUdfS0dEQl9TRVJJQUxfQ09OU09MRSkgKz0ga2dkYm9jLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUUUpICs9IHVjY191YXJ0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCA0MDYwNGEwLi4wOGFkYzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCkBAIC0zMTQsNiArMzE0LDMyIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWFwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIH0KIAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKK3N0YXRpYyBpbnQgcGwwMTBfZ2V0X3BvbGxfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0gKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqKXBvcnQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCWRvIHsKKwkJc3RhdHVzID0gcmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKTsKKwl9IHdoaWxlIChzdGF0dXMgJiBVQVJUMDF4X0ZSX1JYRkUpOworCisJcmV0dXJuIHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9EUik7Cit9CisKK3N0YXRpYyB2b2lkIHBsMDEwX3B1dF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCSB1bnNpZ25lZCBjaGFyIGNoKQoreworCXN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0gKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqKXBvcnQ7CisKKwl3aGlsZSAocmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKSAmIFVBUlQwMXhfRlJfVFhGRikKKwkJYmFycmllcigpOworCisJd3JpdGV3KGNoLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMXhfRFIpOworfQorCisjZW5kaWYgLyogQ09ORklHX0NPTlNPTEVfUE9MTCAqLworCiBzdGF0aWMgaW50IHBsMDExX3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKilwb3J0OwpAQCAtNTcyLDYgKzU5OCwxMCBAQAogCS5yZXF1ZXN0X3BvcnQJPSBwbDAxMF9yZXF1ZXN0X3BvcnQsCiAJLmNvbmZpZ19wb3J0CT0gcGwwMTBfY29uZmlnX3BvcnQsCiAJLnZlcmlmeV9wb3J0CT0gcGwwMTBfdmVyaWZ5X3BvcnQsCisjaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTAorCS5wb2xsX2dldF9jaGFyID0gcGwwMTBfZ2V0X3BvbGxfY2hhciwKKwkucG9sbF9wdXRfY2hhciA9IHBsMDEwX3B1dF9wb2xsX2NoYXIsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKmFtYmFfcG9ydHNbVUFSVF9OUl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IGZhZDI0NWIuLjU1NDkyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCkBAIC05Niw2ICs5Niw3IEBACiAKICAvKiBQREMgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFVBUlRfUFVUX1BUQ1IocG9ydCx2KQlfX3Jhd193cml0ZWwodiwgKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1BUQ1IpCisjZGVmaW5lIFVBUlRfR0VUX1RDUihwb3J0KSAgICAgIF9fcmF3X3JlYWRsKChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1BEQ19UQ1IpCiAjZGVmaW5lIFVBUlRfR0VUX1BUU1IocG9ydCkJX19yYXdfcmVhZGwoKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1BUU1IpCiAKICNkZWZpbmUgVUFSVF9QVVRfUlBSKHBvcnQsdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1BEQ19SUFIpCkBAIC0xMDYsNiArMTA3LDcgQEAKIAogI2RlZmluZSBVQVJUX1BVVF9UUFIocG9ydCx2KQlfX3Jhd193cml0ZWwodiwgKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1RQUikKICNkZWZpbmUgVUFSVF9QVVRfVENSKHBvcnQsdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1BEQ19UQ1IpCisjZGVmaW5lIFVBUlRfR0VUX1RDUihwb3J0KQlfX3Jhd19yZWFkbCgocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9QRENfVENSKQogCiBzdGF0aWMgaW50ICgqYXRtZWxfb3Blbl9ob29rKShzdHJ1Y3QgdWFydF9wb3J0ICopOwogc3RhdGljIHZvaWQgKCphdG1lbF9jbG9zZV9ob29rKShzdHJ1Y3QgdWFydF9wb3J0ICopOwpAQCAtNTQ5LDcgKzU1MSw3IEBACiAJCWF0bWVsX2hhbmRsZV90cmFuc21pdChwb3J0LCBwZW5kaW5nKTsKIAl9IHdoaWxlIChwYXNzX2NvdW50ZXIrKyA8IEFUTUVMX0lTUl9QQVNTX0xJTUlUKTsKIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gcGFzc19jb3VudGVyID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKIH0KIAogLyoKQEAgLTU2MiwxNyArNTY0LDIyIEBACiAJc3RydWN0IGF0bWVsX2RtYV9idWZmZXIgKnBkYyA9ICZhdG1lbF9wb3J0LT5wZGNfdHg7CiAJaW50IGNvdW50OwogCisJLyogbm90aGluZyBsZWZ0IHRvIHRyYW5zbWl0PyAqLworCWlmIChVQVJUX0dFVF9UQ1IocG9ydCkpCisJCXJldHVybjsKKwogCXhtaXQtPnRhaWwgKz0gcGRjLT5vZnM7CiAJeG1pdC0+dGFpbCAmPSBVQVJUX1hNSVRfU0laRSAtIDE7CiAKIAlwb3J0LT5pY291bnQudHggKz0gcGRjLT5vZnM7CiAJcGRjLT5vZnMgPSAwOwogCi0JaWYgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKLQkJLyogbW9yZSB0byB0cmFuc21pdCAtIHNldHVwIG5leHQgdHJhbnNmZXIgKi8KKwkvKiBtb3JlIHRvIHRyYW5zbWl0IC0gc2V0dXAgbmV4dCB0cmFuc2ZlciAqLwogCi0JCS8qIGRpc2FibGUgUERDIHRyYW5zbWl0ICovCi0JCVVBUlRfUFVUX1BUQ1IocG9ydCwgQVRNRUxfUERDX1RYVERJUyk7CisJLyogZGlzYWJsZSBQREMgdHJhbnNtaXQgKi8KKwlVQVJUX1BVVF9QVENSKHBvcnQsIEFUTUVMX1BEQ19UWFRESVMpOworCisJaWYgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocG9ydC0+ZGV2LAogCQkJCQkgICBwZGMtPmRtYV9hZGRyLAogCQkJCQkgICBwZGMtPmRtYV9zaXplLApAQCAtNTg2LDExICs1OTMsNiBAQAogCQkvKiByZS1lbmFibGUgUERDIHRyYW5zbWl0IGFuZCBpbnRlcnJ1cHRzICovCiAJCVVBUlRfUFVUX1BUQ1IocG9ydCwgQVRNRUxfUERDX1RYVEVOKTsKIAkJVUFSVF9QVVRfSUVSKHBvcnQsIEFUTUVMX1VTX0VORFRYIHwgQVRNRUxfVVNfVFhCVUZFKTsKLQl9IGVsc2UgewotCQkvKiBub3RoaW5nIGxlZnQgdG8gdHJhbnNtaXQgLSBkaXNhYmxlIHRoZSB0cmFuc21pdHRlciAqLwotCi0JCS8qIGRpc2FibGUgUERDIHRyYW5zbWl0ICovCi0JCVVBUlRfUFVUX1BUQ1IocG9ydCwgQVRNRUxfUERDX1RYVERJUyk7CiAJfQogCiAJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQpAQCAtMTI3NCw2ICsxMjc2LDcgQEAKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmF0bWVsX3BvcnRzW2NvLT5pbmRleF0udWFydDsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCBpbXI7CisJdW5zaWduZWQgaW50IHBkY190eDsKIAogCS8qCiAJICogRmlyc3QsIHNhdmUgSU1SIGFuZCB0aGVuIGRpc2FibGUgaW50ZXJydXB0cwpAQCAtMTI4MSw2ICsxMjg0LDEwIEBACiAJaW1yID0gVUFSVF9HRVRfSU1SKHBvcnQpOwogCVVBUlRfUFVUX0lEUihwb3J0LCBBVE1FTF9VU19SWFJEWSB8IEFUTUVMX1VTX1RYUkRZKTsKIAorCS8qIFN0b3JlIFBEQyB0cmFuc21pdCBzdGF0dXMgYW5kIGRpc2FibGUgaXQgKi8KKwlwZGNfdHggPSBVQVJUX0dFVF9QVFNSKHBvcnQpICYgQVRNRUxfUERDX1RYVEVOOworCVVBUlRfUFVUX1BUQ1IocG9ydCwgQVRNRUxfUERDX1RYVERJUyk7CisKIAl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIGF0bWVsX2NvbnNvbGVfcHV0Y2hhcik7CiAKIAkvKgpAQCAtMTI5MCw2ICsxMjk3LDExIEBACiAJZG8gewogCQlzdGF0dXMgPSBVQVJUX0dFVF9DU1IocG9ydCk7CiAJfSB3aGlsZSAoIShzdGF0dXMgJiBBVE1FTF9VU19UWFJEWSkpOworCisJLyogUmVzdG9yZSBQREMgdHJhbnNtaXQgc3RhdHVzICovCisJaWYgKHBkY190eCkKKwkJVUFSVF9QVVRfUFRDUihwb3J0LCBBVE1FTF9QRENfVFhURU4pOworCiAJLyogc2V0IGludGVycnVwdHMgYmFjayB0aGUgd2F5IHRoZXkgd2VyZSAqLwogCVVBUlRfUFVUX0lFUihwb3J0LCBpbXIpOwogfQpAQCAtMTU2NSwzICsxNTc3LDQgQEAKIE1PRFVMRV9BVVRIT1IoIlJpY2sgQnJvbnNvbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBdG1lbCBBVDkxIC8gQVQzMiBzZXJpYWwgcG9ydCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXRtZWxfdXNhcnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCmluZGV4IGFjMmEzZWYuLjQ2YmI0N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwpAQCAtMSwzMCArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwotICogQmFzZWQgb246ICAgICBCYXNlZCBvbiBkcml2ZXJzL3NlcmlhbC9zYTExMDAuYwotICogQXV0aG9yOiAgICAgICBBdWJyZXkgTGkgPGF1YnJleS5saUBhbmFsb2cuY29tPgorICogQmxhY2tmaW4gT24tQ2hpcCBTZXJpYWwgRHJpdmVyCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgRHJpdmVyIGZvciBibGFja2ZpbiA1eHggc2VyaWFsIHBvcnRzCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQpAQCAtNjcsMTQgKzQ4LDEyIEBACiAjZGVmaW5lIERNQV9SWF9YQ09VTlQJCTUxMgogI2RlZmluZSBETUFfUlhfWUNPVU5UCQkoUEFHRV9TSVpFIC8gRE1BX1JYX1hDT1VOVCkKIAotI2RlZmluZSBETUFfUlhfRkxVU0hfSklGRklFUwk1CisjZGVmaW5lIERNQV9SWF9GTFVTSF9KSUZGSUVTCShIWiAvIDUwKQogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfZG1hX3R4X2NoYXJzKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KTsKICNlbHNlCi1zdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9kb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF90eF9jaGFycyhzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCk7Ci1zdGF0aWMgdm9pZCBsb2NhbF9wdXRfY2hhcihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCwgY2hhciBjaCk7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfbWN0cmxfY2hlY2soc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpOwpAQCAtODUsMjMgKzY0LDI2IEBACiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0LT5wb3J0LmluZm8tPnhtaXQ7CisjaWYgIWRlZmluZWQoQ09ORklHX0JGNTR4KSAmJiAhZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fRE1BKQorCXVuc2lnbmVkIHNob3J0IGllcjsKKyNlbmRpZgogCiAJd2hpbGUgKCEoVUFSVF9HRVRfTFNSKHVhcnQpICYgVEVNVCkpCi0JCWNvbnRpbnVlOworCQljcHVfcmVsYXgoKTsKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKIAlkaXNhYmxlX2RtYSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CisJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgdWFydC0+dHhfY291bnQpICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CisJdWFydC0+cG9ydC5pY291bnQudHggKz0gdWFydC0+dHhfY291bnQ7CisJdWFydC0+dHhfY291bnQgPSAwOworCXVhcnQtPnR4X2RvbmUgPSAxOwogI2Vsc2UKICNpZmRlZiBDT05GSUdfQkY1NHgKLQkvKiBXYWl0aW5nIGZvciBUcmFuc21pc3Npb24gRmluaXNoZWQgKi8KLQl3aGlsZSAoIShVQVJUX0dFVF9MU1IodWFydCkgJiBURkkpKQotCQljb250aW51ZTsKIAkvKiBDbGVhciBURkkgYml0ICovCiAJVUFSVF9QVVRfTFNSKHVhcnQsIFRGSSk7CiAJVUFSVF9DTEVBUl9JRVIodWFydCwgRVRCRUkpOwogI2Vsc2UKLQl1bnNpZ25lZCBzaG9ydCBpZXI7Ci0KIAlpZXIgPSBVQVJUX0dFVF9JRVIodWFydCk7CiAJaWVyICY9IH5FVEJFSTsKIAlVQVJUX1BVVF9JRVIodWFydCwgaWVyKTsKQEAgLTExNyw3ICs5OSw4IEBACiAJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQotCWJmaW5fc2VyaWFsX2RtYV90eF9jaGFycyh1YXJ0KTsKKwlpZiAodWFydC0+dHhfZG9uZSkKKwkJYmZpbl9zZXJpYWxfZG1hX3R4X2NoYXJzKHVhcnQpOwogI2Vsc2UKICNpZmRlZiBDT05GSUdfQkY1NHgKIAlVQVJUX1NFVF9JRVIodWFydCwgRVRCRUkpOwpAQCAtMjA5LDM0ICsxOTIsMjcgQEAKIH0KICNlbmRpZgogCisjaWYgQU5PTUFMWV8wNTAwMDIzMCAmJiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9QSU8pCisjIGRlZmluZSBVQVJUX0dFVF9BTk9NQUxZX1RIUkVTSE9MRCh1YXJ0KSAgICAoKHVhcnQpLT5hbm9tYWx5X3RocmVzaG9sZCkKKyMgZGVmaW5lIFVBUlRfU0VUX0FOT01BTFlfVEhSRVNIT0xEKHVhcnQsIHYpICgodWFydCktPmFub21hbHlfdGhyZXNob2xkID0gKHYpKQorI2Vsc2UKKyMgZGVmaW5lIFVBUlRfR0VUX0FOT01BTFlfVEhSRVNIT0xEKHVhcnQpICAgIDAKKyMgZGVmaW5lIFVBUlRfU0VUX0FOT01BTFlfVEhSRVNIT0xEKHVhcnQsIHYpCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9QSU8KLXN0YXRpYyB2b2lkIGxvY2FsX3B1dF9jaGFyKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0LCBjaGFyIGNoKQotewotCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKLQlpbnQgZmxhZ3MgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVhcnQtPnBvcnQubG9jaywgZmxhZ3MpOwotCi0JZG8gewotCQlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7Ci0JfSB3aGlsZSAoIShzdGF0dXMgJiBUSFJFKSk7Ci0KLQlVQVJUX1BVVF9DSEFSKHVhcnQsIGNoKTsKLQlTU1lOQygpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWFydC0+cG9ydC5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX3J4X2NoYXJzKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnR0eTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjaCwgZmxnOwotCXN0YXRpYyBpbnQgaW5fYnJlYWsgPSAwOworCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBhbm9tYWx5X3N0YXJ0ID0geyAudHZfc2VjID0gMCB9OwogI2lmZGVmIENPTkZJR19LR0RCX1VBUlQKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwogI2VuZGlmCiAKIAlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7CisJVUFSVF9DTEVBUl9MU1IodWFydCk7CisKICAJY2ggPSBVQVJUX0dFVF9DSEFSKHVhcnQpOwogIAl1YXJ0LT5wb3J0Lmljb3VudC5yeCsrOwogCkBAIC0yNjIsMjggKzIzOCw1NiBAQAogI2VuZGlmCiAKIAlpZiAoQU5PTUFMWV8wNTAwMDIzMCkgewotCQkvKiBUaGUgQkY1MzMgZmFtaWx5IG9mIHByb2Nlc3NvcnMgaGF2ZSBhIG5pY2UgbWlzYmVoYXZpb3Igd2hlcmUKLQkJICogdGhleSBjb250aW51b3VzbHkgZ2VuZXJhdGUgY2hhcmFjdGVycyBmb3IgYSAic2luZ2xlIiBicmVhay4KKwkJLyogVGhlIEJGNTMzIChhbmQgQkY1NjEpIGZhbWlseSBvZiBwcm9jZXNzb3JzIGhhdmUgYSBuaWNlIGFub21hbHkKKwkJICogd2hlcmUgdGhleSBjb250aW51b3VzbHkgZ2VuZXJhdGUgY2hhcmFjdGVycyBmb3IgYSAic2luZ2xlIiBicmVhay4KIAkJICogV2UgaGF2ZSB0byBiYXNpY2FsbHkgaWdub3JlIHRoaXMgZmxvb2QgdW50aWwgdGhlICJuZXh0IiB2YWxpZAotCQkgKiBjaGFyYWN0ZXIgY29tZXMgYWNyb3NzLiAgQWxsIG90aGVyIEJsYWNrZmluIGZhbWlsaWVzIG9wZXJhdGUKLQkJICogcHJvcGVybHkgdGhvdWdoLgorCQkgKiBjaGFyYWN0ZXIgY29tZXMgYWNyb3NzLiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGZsb29kLCBpdCBpcworCQkgKiBub3QgcG9zc2libGUgdG8gcmVsaWFibHkgY2F0Y2ggYnl0ZXMgdGhhdCBhcmUgc2VudCB0b28gcXVpY2tseQorCQkgKiBhZnRlciB0aGlzIGJyZWFrLiAgU28gYXBwbGljYXRpb24gY29kZSB0YWxraW5nIHRvIHRoZSBCbGFja2ZpbgorCQkgKiB3aGljaCBzZW5kcyBhIGJyZWFrIHNpZ25hbCBtdXN0IGFsbG93IGF0IGxlYXN0IDEuNSBjaGFyYWN0ZXIKKwkJICogdGltZXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgYnJlYWsgZm9yIHRoaW5ncyB0byBzdGFiaWxpemUuICBUaGlzCisJCSAqIHRpbWVvdXQgd2FzIHBpY2tlZCBhcyBpdCBtdXN0IGFic29sdXRlbHkgYmUgbGFyZ2VyIHRoYW4gMQorCQkgKiBjaGFyYWN0ZXIgdGltZSArLy0gc29tZSBwZXJjZW50LiAgU28gMS41IHNvdW5kcyBnb29kLiAgQWxsIG90aGVyCisJCSAqIEJsYWNrZmluIGZhbWlsaWVzIG9wZXJhdGUgcHJvcGVybHkuICBXb28uCiAJCSAqIE5vdGU6IFdoaWxlIEFub21hbHkgMDUwMDAyMzAgZG9lcyBub3QgZGlyZWN0bHkgYWRkcmVzcyB0aGlzLAogCQkgKiAgICAgICB0aGUgY2hhbmdlcyB0aGF0IHdlbnQgaW4gZm9yIGl0IGFsc28gZml4ZWQgdGhpcyBpc3N1ZS4KKwkJICogICAgICAgVGhhdCBhbm9tYWx5IHdhcyBmaXhlZCBpbiAwLjUrIHNpbGljb24uICBJIGxpa2UgYnVubmllcy4KIAkJICovCi0JCWlmIChpbl9icmVhaykgewotCQkJaWYgKGNoICE9IDApIHsKLQkJCQlpbl9icmVhayA9IDA7Ci0JCQkJY2ggPSBVQVJUX0dFVF9DSEFSKHVhcnQpOwotCQkJCWlmIChiZmluX3JldmlkKCkgPCA1KQotCQkJCQlyZXR1cm47Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm47CisJCWlmIChhbm9tYWx5X3N0YXJ0LnR2X3NlYykgeworCQkJc3RydWN0IHRpbWV2YWwgY3VycjsKKwkJCXN1c2Vjb25kc190IHVzZWNzOworCisJCQlpZiAoKH5jaCAmICh+Y2ggKyAxKSkgJiAweGZmKQorCQkJCWdvdG8ga25vd25fZ29vZF9jaGFyOworCisJCQlkb19nZXR0aW1lb2ZkYXkoJmN1cnIpOworCQkJaWYgKGN1cnIudHZfc2VjIC0gYW5vbWFseV9zdGFydC50dl9zZWMgPiAxKQorCQkJCWdvdG8ga25vd25fZ29vZF9jaGFyOworCisJCQl1c2VjcyA9IDA7CisJCQlpZiAoY3Vyci50dl9zZWMgIT0gYW5vbWFseV9zdGFydC50dl9zZWMpCisJCQkJdXNlY3MgKz0gVVNFQ19QRVJfU0VDOworCQkJdXNlY3MgKz0gY3Vyci50dl91c2VjIC0gYW5vbWFseV9zdGFydC50dl91c2VjOworCisJCQlpZiAodXNlY3MgPiBVQVJUX0dFVF9BTk9NQUxZX1RIUkVTSE9MRCh1YXJ0KSkKKwkJCQlnb3RvIGtub3duX2dvb2RfY2hhcjsKKworCQkJaWYgKGNoKQorCQkJCWFub21hbHlfc3RhcnQudHZfc2VjID0gMDsKKwkJCWVsc2UKKwkJCQlhbm9tYWx5X3N0YXJ0ID0gY3VycjsKKworCQkJcmV0dXJuOworCisga25vd25fZ29vZF9jaGFyOgorCQkJYW5vbWFseV9zdGFydC50dl9zZWMgPSAwOwogCQl9CiAJfQogCiAJaWYgKHN0YXR1cyAmIEJJKSB7CiAJCWlmIChBTk9NQUxZXzA1MDAwMjMwKQotCQkJaW5fYnJlYWsgPSAxOworCQkJaWYgKGJmaW5fcmV2aWQoKSA8IDUpCisJCQkJZG9fZ2V0dGltZW9mZGF5KCZhbm9tYWx5X3N0YXJ0KTsKIAkJdWFydC0+cG9ydC5pY291bnQuYnJrKys7CiAJCWlmICh1YXJ0X2hhbmRsZV9icmVhaygmdWFydC0+cG9ydCkpCiAJCQlnb3RvIGlnbm9yZV9jaGFyOwpAQCAtMzI0LDcgKzMyOCw2IEBACiAJCVVBUlRfUFVUX0NIQVIodWFydCwgdWFydC0+cG9ydC54X2NoYXIpOwogCQl1YXJ0LT5wb3J0Lmljb3VudC50eCsrOwogCQl1YXJ0LT5wb3J0LnhfY2hhciA9IDA7Ci0JCXJldHVybjsKIAl9CiAJLyoKIAkgKiBDaGVjayB0aGUgbW9kZW0gY29udHJvbCBsaW5lcyBiZWZvcmUKQEAgLTMzNyw5ICszNDAsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCWxvY2FsX3B1dF9jaGFyKHVhcnQsIHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSk7Ci0JeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKLQl1YXJ0LT5wb3J0Lmljb3VudC50eCsrOworCXdoaWxlICgoVUFSVF9HRVRfTFNSKHVhcnQpICYgVEhSRSkgJiYgeG1pdC0+dGFpbCAhPSB4bWl0LT5oZWFkKSB7CisJCVVBUlRfUFVUX0NIQVIodWFydCwgeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJdWFydC0+cG9ydC5pY291bnQudHgrKzsKKwkJU1NZTkMoKTsKKwl9CiAKIAlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCiAJCXVhcnRfd3JpdGVfd2FrZXVwKCZ1YXJ0LT5wb3J0KTsKQEAgLTM1MiwyMSArMzU4LDExIEBACiB7CiAJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSBkZXZfaWQ7CiAKLSNpZmRlZiBDT05GSUdfQkY1NHgKLQl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJc3Bpbl9sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwotCXN0YXR1cyA9IFVBUlRfR0VUX0xTUih1YXJ0KTsKLQl3aGlsZSAoKFVBUlRfR0VUX0lFUih1YXJ0KSAmIEVSQkZJKSAmJiAoc3RhdHVzICYgRFIpKSB7Ci0JCWJmaW5fc2VyaWFsX3J4X2NoYXJzKHVhcnQpOwotCQlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwotI2Vsc2UKLQlzcGluX2xvY2soJnVhcnQtPnBvcnQubG9jayk7Ci0Jd2hpbGUgKChVQVJUX0dFVF9JSVIodWFydCkgJiBJSVJfU1RBVFVTKSA9PSBJSVJfUlhfUkVBRFkpCisJd2hpbGUgKFVBUlRfR0VUX0xTUih1YXJ0KSAmIERSKQogCQliZmluX3NlcmlhbF9yeF9jaGFycyh1YXJ0KTsKIAlzcGluX3VubG9jaygmdWFydC0+cG9ydC5sb2NrKTsKLSNlbmRpZgorCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0zNzQsMjUgKzM3MCwxNiBAQAogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gZGV2X2lkOwogCi0jaWZkZWYgQ09ORklHX0JGNTR4Ci0JdW5zaWduZWQgc2hvcnQgc3RhdHVzOwogCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKLQlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7Ci0Jd2hpbGUgKChVQVJUX0dFVF9JRVIodWFydCkgJiBFVEJFSSkgJiYgKHN0YXR1cyAmIFRIUkUpKSB7Ci0JCWJmaW5fc2VyaWFsX3R4X2NoYXJzKHVhcnQpOwotCQlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwotI2Vsc2UKLQlzcGluX2xvY2soJnVhcnQtPnBvcnQubG9jayk7Ci0Jd2hpbGUgKChVQVJUX0dFVF9JSVIodWFydCkgJiBJSVJfU1RBVFVTKSA9PSBJSVJfVFhfUkVBRFkpCisJaWYgKFVBUlRfR0VUX0xTUih1YXJ0KSAmIFRIUkUpCiAJCWJmaW5fc2VyaWFsX3R4X2NoYXJzKHVhcnQpOwogCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwotI2VuZGlmCisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CisjZW5kaWYKIAotCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfZG9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQsIGN0c193b3JrcXVldWUpOwpAQCAtNDA2LDMzICszOTMsMjcgQEAKIHsKIAlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFydC0+cG9ydC5pbmZvLT54bWl0OwogCXVuc2lnbmVkIHNob3J0IGllcjsKLQlpbnQgZmxhZ3MgPSAwOwotCi0JaWYgKCF1YXJ0LT50eF9kb25lKQotCQlyZXR1cm47CiAKIAl1YXJ0LT50eF9kb25lID0gMDsKIAorCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKCZ1YXJ0LT5wb3J0KSkgeworCQl1YXJ0LT50eF9jb3VudCA9IDA7CisJCXVhcnQtPnR4X2RvbmUgPSAxOworCQlyZXR1cm47CisJfQorCiAJaWYgKHVhcnQtPnBvcnQueF9jaGFyKSB7CiAJCVVBUlRfUFVUX0NIQVIodWFydCwgdWFydC0+cG9ydC54X2NoYXIpOwogCQl1YXJ0LT5wb3J0Lmljb3VudC50eCsrOwogCQl1YXJ0LT5wb3J0LnhfY2hhciA9IDA7Ci0JCXVhcnQtPnR4X2RvbmUgPSAxOwotCQlyZXR1cm47CiAJfQorCiAJLyoKIAkgKiBDaGVjayB0aGUgbW9kZW0gY29udHJvbCBsaW5lcyBiZWZvcmUKIAkgKiB0cmFuc21pdHRpbmcgYW55dGhpbmcuCiAJICovCiAJYmZpbl9zZXJpYWxfbWN0cmxfY2hlY2sodWFydCk7CiAKLQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZCgmdWFydC0+cG9ydCkpIHsKLQkJYmZpbl9zZXJpYWxfc3RvcF90eCgmdWFydC0+cG9ydCk7Ci0JCXVhcnQtPnR4X2RvbmUgPSAxOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVhcnQtPnBvcnQubG9jaywgZmxhZ3MpOwogCXVhcnQtPnR4X2NvdW50ID0gQ0lSQ19DTlQoeG1pdC0+aGVhZCwgeG1pdC0+dGFpbCwgVUFSVF9YTUlUX1NJWkUpOwogCWlmICh1YXJ0LT50eF9jb3VudCA+IChVQVJUX1hNSVRfU0laRSAtIHhtaXQtPnRhaWwpKQogCQl1YXJ0LT50eF9jb3VudCA9IFVBUlRfWE1JVF9TSVpFIC0geG1pdC0+dGFpbDsKQEAgLTQ0OCw2ICs0MjksNyBAQAogCXNldF9kbWFfeF9jb3VudCh1YXJ0LT50eF9kbWFfY2hhbm5lbCwgdWFydC0+dHhfY291bnQpOwogCXNldF9kbWFfeF9tb2RpZnkodWFydC0+dHhfZG1hX2NoYW5uZWwsIDEpOwogCWVuYWJsZV9kbWEodWFydC0+dHhfZG1hX2NoYW5uZWwpOworCiAjaWZkZWYgQ09ORklHX0JGNTR4CiAJVUFSVF9TRVRfSUVSKHVhcnQsIEVUQkVJKTsKICNlbHNlCkBAIC00NTUsNyArNDM3LDYgQEAKIAlpZXIgfD0gRVRCRUk7CiAJVUFSVF9QVVRfSUVSKHVhcnQsIGllcik7CiAjZW5kaWYKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YXJ0LT5wb3J0LmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfZG1hX3J4X2NoYXJzKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQpAQCAtNDY0LDcgKzQ0NSwxMSBAQAogCWludCBpLCBmbGcsIHN0YXR1czsKIAogCXN0YXR1cyA9IFVBUlRfR0VUX0xTUih1YXJ0KTsKLQl1YXJ0LT5wb3J0Lmljb3VudC5yeCArPSBDSVJDX0NOVCh1YXJ0LT5yeF9kbWFfYnVmLmhlYWQsIHVhcnQtPnJ4X2RtYV9idWYudGFpbCwgVUFSVF9YTUlUX1NJWkUpOzsKKwlVQVJUX0NMRUFSX0xTUih1YXJ0KTsKKworCXVhcnQtPnBvcnQuaWNvdW50LnJ4ICs9CisJCUNJUkNfQ05UKHVhcnQtPnJ4X2RtYV9idWYuaGVhZCwgdWFydC0+cnhfZG1hX2J1Zi50YWlsLAorCQlVQVJUX1hNSVRfU0laRSk7CiAKIAlpZiAoc3RhdHVzICYgQkkpIHsKIAkJdWFydC0+cG9ydC5pY291bnQuYnJrKys7CkBAIC00OTAsMTAgKzQ3NSwxMiBAQAogCWVsc2UKIAkJZmxnID0gVFRZX05PUk1BTDsKIAotCWZvciAoaSA9IHVhcnQtPnJ4X2RtYV9idWYuaGVhZDsgaSA8IHVhcnQtPnJ4X2RtYV9idWYudGFpbDsgaSsrKSB7Ci0JCWlmICh1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKCZ1YXJ0LT5wb3J0LCB1YXJ0LT5yeF9kbWFfYnVmLmJ1ZltpXSkpCi0JCQlnb3RvIGRtYV9pZ25vcmVfY2hhcjsKLQkJdWFydF9pbnNlcnRfY2hhcigmdWFydC0+cG9ydCwgc3RhdHVzLCBPRSwgdWFydC0+cnhfZG1hX2J1Zi5idWZbaV0sIGZsZyk7CisJZm9yIChpID0gdWFydC0+cnhfZG1hX2J1Zi50YWlsOyBpICE9IHVhcnQtPnJ4X2RtYV9idWYuaGVhZDsgaSsrKSB7CisJCWlmIChpID49IFVBUlRfWE1JVF9TSVpFKQorCQkJaSA9IDA7CisJCWlmICghdWFydF9oYW5kbGVfc3lzcnFfY2hhcigmdWFydC0+cG9ydCwgdWFydC0+cnhfZG1hX2J1Zi5idWZbaV0pKQorCQkJdWFydF9pbnNlcnRfY2hhcigmdWFydC0+cG9ydCwgc3RhdHVzLCBPRSwKKwkJCQl1YXJ0LT5yeF9kbWFfYnVmLmJ1ZltpXSwgZmxnKTsKIAl9CiAKICBkbWFfaWdub3JlX2NoYXI6CkBAIC01MDMsMjMgKzQ5MCwyMyBAQAogdm9pZCBiZmluX3NlcmlhbF9yeF9kbWFfdGltZW91dChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKIHsKIAlpbnQgeF9wb3MsIHBvczsKLQlpbnQgZmxhZ3MgPSAwOwogCi0JYmZpbl9zZXJpYWxfZG1hX3R4X2NoYXJzKHVhcnQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVhcnQtPnBvcnQubG9jaywgZmxhZ3MpOwotCXhfcG9zID0gRE1BX1JYX1hDT1VOVCAtIGdldF9kbWFfY3Vycl94Y291bnQodWFydC0+cnhfZG1hX2NoYW5uZWwpOworCXVhcnQtPnJ4X2RtYV9ucm93cyA9IGdldF9kbWFfY3Vycl95Y291bnQodWFydC0+cnhfZG1hX2NoYW5uZWwpOworCXhfcG9zID0gZ2V0X2RtYV9jdXJyX3hjb3VudCh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CisJdWFydC0+cnhfZG1hX25yb3dzID0gRE1BX1JYX1lDT1VOVCAtIHVhcnQtPnJ4X2RtYV9ucm93czsKKwlpZiAodWFydC0+cnhfZG1hX25yb3dzID09IERNQV9SWF9ZQ09VTlQpCisJCXVhcnQtPnJ4X2RtYV9ucm93cyA9IDA7CisJeF9wb3MgPSBETUFfUlhfWENPVU5UIC0geF9wb3M7CiAJaWYgKHhfcG9zID09IERNQV9SWF9YQ09VTlQpCiAJCXhfcG9zID0gMDsKIAogCXBvcyA9IHVhcnQtPnJ4X2RtYV9ucm93cyAqIERNQV9SWF9YQ09VTlQgKyB4X3BvczsKLQotCWlmIChwb3M+dWFydC0+cnhfZG1hX2J1Zi50YWlsKSB7Ci0JCXVhcnQtPnJ4X2RtYV9idWYudGFpbCA9IHBvczsKKwlpZiAocG9zICE9IHVhcnQtPnJ4X2RtYV9idWYudGFpbCkgeworCQl1YXJ0LT5yeF9kbWFfYnVmLmhlYWQgPSBwb3M7CiAJCWJmaW5fc2VyaWFsX2RtYV9yeF9jaGFycyh1YXJ0KTsKLQkJdWFydC0+cnhfZG1hX2J1Zi5oZWFkID0gdWFydC0+cnhfZG1hX2J1Zi50YWlsOworCQl1YXJ0LT5yeF9kbWFfYnVmLnRhaWwgPSB1YXJ0LT5yeF9kbWFfYnVmLmhlYWQ7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhcnQtPnBvcnQubG9jaywgZmxhZ3MpOworCiAJdWFydC0+cnhfZG1hX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgRE1BX1JYX0ZMVVNIX0pJRkZJRVM7CiAJYWRkX3RpbWVyKCYodWFydC0+cnhfZG1hX3RpbWVyKSk7CiB9CkBAIC01MzIsOCArNTE5LDggQEAKIAogCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKIAlpZiAoIShnZXRfZG1hX2N1cnJfaXJxc3RhdCh1YXJ0LT50eF9kbWFfY2hhbm5lbCkmRE1BX1JVTikpIHsKLQkJY2xlYXJfZG1hX2lycXN0YXQodWFydC0+dHhfZG1hX2NoYW5uZWwpOwogCQlkaXNhYmxlX2RtYSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CisJCWNsZWFyX2RtYV9pcnFzdGF0KHVhcnQtPnR4X2RtYV9jaGFubmVsKTsKICNpZmRlZiBDT05GSUdfQkY1NHgKIAkJVUFSVF9DTEVBUl9JRVIodWFydCwgRVRCRUkpOwogI2Vsc2UKQEAgLTU0MSwxNSArNTI4LDEzIEBACiAJCWllciAmPSB+RVRCRUk7CiAJCVVBUlRfUFVUX0lFUih1YXJ0LCBpZXIpOwogI2VuZGlmCi0JCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCt1YXJ0LT50eF9jb3VudCkgJihVQVJUX1hNSVRfU0laRSAtMSk7Ci0JCXVhcnQtPnBvcnQuaWNvdW50LnR4Kz11YXJ0LT50eF9jb3VudDsKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgdWFydC0+dHhfY291bnQpICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CisJCXVhcnQtPnBvcnQuaWNvdW50LnR4ICs9IHVhcnQtPnR4X2NvdW50OwogCiAJCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKIAkJCXVhcnRfd3JpdGVfd2FrZXVwKCZ1YXJ0LT5wb3J0KTsKIAotCQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQotCQkJYmZpbl9zZXJpYWxfc3RvcF90eCgmdWFydC0+cG9ydCk7Ci0JCXVhcnQtPnR4X2RvbmUgPSAxOworCQliZmluX3NlcmlhbF9kbWFfdHhfY2hhcnModWFydCk7CiAJfQogCiAJc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CkBAIC01NjEsMTggKzU0NiwxNSBAQAogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gZGV2X2lkOwogCXVuc2lnbmVkIHNob3J0IGlycXN0YXQ7CiAKLQl1YXJ0LT5yeF9kbWFfbnJvd3MrKzsKLQlpZiAodWFydC0+cnhfZG1hX25yb3dzID09IERNQV9SWF9ZQ09VTlQpIHsKLQkJdWFydC0+cnhfZG1hX25yb3dzID0gMDsKLQkJdWFydC0+cnhfZG1hX2J1Zi50YWlsID0gRE1BX1JYX1hDT1VOVCpETUFfUlhfWUNPVU5UOwotCQliZmluX3NlcmlhbF9kbWFfcnhfY2hhcnModWFydCk7Ci0JCXVhcnQtPnJ4X2RtYV9idWYuaGVhZCA9IHVhcnQtPnJ4X2RtYV9idWYudGFpbCA9IDA7Ci0JfQogCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKIAlpcnFzdGF0ID0gZ2V0X2RtYV9jdXJyX2lycXN0YXQodWFydC0+cnhfZG1hX2NoYW5uZWwpOwogCWNsZWFyX2RtYV9pcnFzdGF0KHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKLQogCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOworCisJZGVsX3RpbWVyKCYodWFydC0+cnhfZG1hX3RpbWVyKSk7CisJdWFydC0+cnhfZG1hX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzOworCWFkZF90aW1lcigmKHVhcnQtPnJ4X2RtYV90aW1lcikpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogI2VuZGlmCkBAIC01OTksNyArNTgxLDExIEBACiAJaWYgKHVhcnQtPmN0c19waW4gPCAwKQogCQlyZXR1cm4gVElPQ01fQ1RTIHwgVElPQ01fRFNSIHwgVElPQ01fQ0FSOwogCisjIGlmZGVmIEJGNTR4CisJaWYgKFVBUlRfR0VUX01TUih1YXJ0KSAmIENUUykKKyMgZWxzZQogCWlmIChncGlvX2dldF92YWx1ZSh1YXJ0LT5jdHNfcGluKSkKKyMgZW5kaWYKIAkJcmV0dXJuIFRJT0NNX0RTUiB8IFRJT0NNX0NBUjsKIAllbHNlCiAjZW5kaWYKQEAgLTYxNCw5ICs2MDAsMTcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKG1jdHJsICYgVElPQ01fUlRTKQorIyBpZmRlZiBCRjU0eAorCQlVQVJUX1BVVF9NQ1IodWFydCwgVUFSVF9HRVRfTUNSKHVhcnQpICYgfk1SVFMpOworIyBlbHNlCiAJCWdwaW9fc2V0X3ZhbHVlKHVhcnQtPnJ0c19waW4sIDApOworIyBlbmRpZgogCWVsc2UKKyMgaWZkZWYgQkY1NHgKKwkJVUFSVF9QVVRfTUNSKHVhcnQsIFVBUlRfR0VUX01DUih1YXJ0KSB8IE1SVFMpOworIyBlbHNlCiAJCWdwaW9fc2V0X3ZhbHVlKHVhcnQtPnJ0c19waW4sIDEpOworIyBlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTYyNywyMiArNjIxLDE3IEBACiB7CiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwogCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0jIGlmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKIAlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gdWFydC0+cG9ydC5pbmZvOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CiAKIAlzdGF0dXMgPSBiZmluX3NlcmlhbF9nZXRfbWN0cmwoJnVhcnQtPnBvcnQpOworCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnVhcnQtPnBvcnQsIHN0YXR1cyAmIFRJT0NNX0NUUyk7CiAJaWYgKCEoc3RhdHVzICYgVElPQ01fQ1RTKSkgewogCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQlzY2hlZHVsZV93b3JrKCZ1YXJ0LT5jdHNfd29ya3F1ZXVlKTsKIAl9IGVsc2UgewogCQl0dHktPmh3X3N0b3BwZWQgPSAwOwogCX0KLSMgZWxzZQotCXN0YXR1cyA9IGJmaW5fc2VyaWFsX2dldF9tY3RybCgmdWFydC0+cG9ydCk7Ci0JdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdWFydC0+cG9ydCwgc3RhdHVzICYgVElPQ01fQ1RTKTsKLQlpZiAoIShzdGF0dXMgJiBUSU9DTV9DVFMpKQotCQlzY2hlZHVsZV93b3JrKCZ1YXJ0LT5jdHNfd29ya3F1ZXVlKTsKLSMgZW5kaWYKICNlbmRpZgogfQogCkBAIC03NDMsNiArNzMyLDcgQEAKIAlkaXNhYmxlX2RtYSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAJZnJlZV9kbWEodWFydC0+cnhfZG1hX2NoYW5uZWwpOwogCWRlbF90aW1lcigmKHVhcnQtPnJ4X2RtYV90aW1lcikpOworCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwgdWFydC0+cnhfZG1hX2J1Zi5idWYsIDApOwogI2Vsc2UKICNpZmRlZglDT05GSUdfS0dEQl9VQVJUCiAJaWYgKHVhcnQtPnBvcnQubGluZSAhPSBDT05GSUdfS0dEQl9VQVJUX1BPUlQpCkBAIC04MTQsNiArODA0LDggQEAKIAlxdW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWFydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAKKwlVQVJUX1NFVF9BTk9NQUxZX1RIUkVTSE9MRCh1YXJ0LCBVU0VDX1BFUl9TRUMgLyBiYXVkICogMTUpOworCiAJZG8gewogCQlsc3IgPSBVQVJUX0dFVF9MU1IodWFydCk7CiAJfSB3aGlsZSAoIShsc3IgJiBURU1UKSk7CkBAIC05NTYsMTAgKzk0OCw5IEBACiAJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnJ4X2RtYV9jaGFubmVsID0KIAkJCWJmaW5fc2VyaWFsX3Jlc291cmNlW2ldLnVhcnRfcnhfZG1hX2NoYW5uZWw7CiAJCWluaXRfdGltZXIoJihiZmluX3NlcmlhbF9wb3J0c1tpXS5yeF9kbWFfdGltZXIpKTsKLSNlbHNlCi0JCUlOSVRfV09SSygmYmZpbl9zZXJpYWxfcG9ydHNbaV0uY3RzX3dvcmtxdWV1ZSwgYmZpbl9zZXJpYWxfZG9fd29yayk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCisJCUlOSVRfV09SSygmYmZpbl9zZXJpYWxfcG9ydHNbaV0uY3RzX3dvcmtxdWV1ZSwgYmZpbl9zZXJpYWxfZG9fd29yayk7CiAJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLmN0c19waW4JICAgID0KIAkJCWJmaW5fc2VyaWFsX3Jlc291cmNlW2ldLnVhcnRfY3RzX3BpbjsKIAkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucnRzX3BpbgkgICAgPQpAQCAtMTI1Miw2ICsxMjQzLDcgQEAKIAkucmVzdW1lCQk9IGJmaW5fc2VyaWFsX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiYmZpbi11YXJ0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTEzMTAsMyArMTMwMiw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkJsYWNrZmluIGdlbmVyaWMgc2VyaWFsIHBvcnQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihCRklOX1NFUklBTF9NQUpPUik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmJmaW4tdWFydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaCBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmgKaW5kZXggMzJiOTczNy4uMGNjMzlmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydC5oCkBAIC05Miw2ICs5Miw5IEBACiAKIC8qIHRoZXNlIGFyZSBsb2NhdGVkIGluIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMgKi8KIHZvaWQgY3BtX2xpbmVfY3JfY21kKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwb3J0LCBpbnQgY21kKTsKK3ZvaWQgX19pb21lbSAqY3BtX3VhcnRfbWFwX3ByYW0oc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCk7Cit2b2lkIGNwbV91YXJ0X3VubWFwX3ByYW0oc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBvcnQsIHZvaWQgX19pb21lbSAqcHJhbSk7CiBpbnQgY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYyh2b2lkKTsKIGludCBjcG1fdWFydF9hbGxvY2J1ZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8sIHVuc2lnbmVkIGludCBpc19jb24pOwogdm9pZCBjcG1fdWFydF9mcmVlYnVmKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggMjM2YWY5ZC4uYTYzOGJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtOTY2LDI0ICs5NjYsMjMgQEAKIAlpZiAoIW1lbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcmFtID0gb2ZfaW9tYXAobnAsIDEpOwotCWlmICghcHJhbSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9tZW07Ci0JfQotCiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGNwbTEtc2NjLXVhcnQiKSB8fAogCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxjcG0yLXNjYy11YXJ0IikpIHsKIAkJcGluZm8tPnNjY3AgPSBtZW07Ci0JCXBpbmZvLT5zY2N1cCA9IHByYW07CisJCXBpbmZvLT5zY2N1cCA9IHByYW0gPSBjcG1fdWFydF9tYXBfcHJhbShwaW5mbywgbnApOwogCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsY3BtMS1zbWMtdWFydCIpIHx8CiAJICAgICAgICAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxjcG0yLXNtYy11YXJ0IikpIHsKIAkJcGluZm8tPmZsYWdzIHw9IEZMQUdfU01DOwogCQlwaW5mby0+c21jcCA9IG1lbTsKLQkJcGluZm8tPnNtY3VwID0gcHJhbTsKKwkJcGluZm8tPnNtY3VwID0gcHJhbSA9IGNwbV91YXJ0X21hcF9wcmFtKHBpbmZvLCBucCk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXRfcHJhbTsKKwkJZ290byBvdXRfbWVtOworCX0KKworCWlmICghcHJhbSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9tZW07CiAJfQogCiAJcGluZm8tPnR4X25yZmlmb3MgPSBUWF9OVU1fRklGTzsKQEAgLTEwMDcsNyArMTAwNiw3IEBACiAJcmV0dXJuIGNwbV91YXJ0X3JlcXVlc3RfcG9ydCgmcGluZm8tPnBvcnQpOwogCiBvdXRfcHJhbToKLQlpb3VubWFwKHByYW0pOworCWNwbV91YXJ0X3VubWFwX3ByYW0ocGluZm8sIHByYW0pOwogb3V0X21lbToKIAlpb3VubWFwKG1lbSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwppbmRleCA2ZWEwMzY2Li43NGYxNDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCkBAIC00NSw2ICs0NSw4IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKICNpbmNsdWRlICJjcG1fdWFydC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NCw2ICs1NiwxOCBAQAogewogCWNwbV9jb21tYW5kKHBvcnQtPmNvbW1hbmQsIGNtZCk7CiB9CisKK3ZvaWQgX19pb21lbSAqY3BtX3VhcnRfbWFwX3ByYW0oc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlyZXR1cm4gb2ZfaW9tYXAobnAsIDEpOworfQorCit2b2lkIGNwbV91YXJ0X3VubWFwX3ByYW0oc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBvcnQsIHZvaWQgX19pb21lbSAqcHJhbSkKK3sKKwlpb3VubWFwKHByYW0pOworfQorCiAjZWxzZQogdm9pZCBjcG1fbGluZV9jcl9jbWQoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBvcnQsIGludCBjbWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKaW5kZXggZDlhZjA2YS4uYmI4NjJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwpAQCAtNDEsNiArNDEsOSBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZnNfcGQuaD4KKyNpZmRlZiBDT05GSUdfUFBDX0NQTV9ORVdfQklORElORworI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01NCw2ICs1Nyw1NSBAQAogewogCWNwbV9jb21tYW5kKHBvcnQtPmNvbW1hbmQsIGNtZCk7CiB9CisKK3ZvaWQgX19pb21lbSAqY3BtX3VhcnRfbWFwX3ByYW0oc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwl2b2lkIF9faW9tZW0gKnByYW07CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKworCS8qIERvbid0IHJlbWFwIHBhcmFtZXRlciBSQU0gaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZAorCSAqIGR1cmluZyBjb25zb2xlIHNldHVwLgorCSAqLworCWlmIChJU19TTUMocG9ydCkgJiYgcG9ydC0+c21jdXApCisJCXJldHVybiBwb3J0LT5zbWN1cDsKKwllbHNlIGlmICghSVNfU01DKHBvcnQpICYmIHBvcnQtPnNjY3VwKQorCQlyZXR1cm4gcG9ydC0+c2NjdXA7CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMSwgJnJlcykpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gMSArIHJlcy5lbmQgLSByZXMuc3RhcnQ7CisJcHJhbSA9IGlvcmVtYXAocmVzLnN0YXJ0LCBsZW4pOworCWlmICghcHJhbSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIUlTX1NNQyhwb3J0KSkKKwkJcmV0dXJuIHByYW07CisKKwlpZiAobGVuICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3BtX3VhcnRbJWRdOiBkZXZpY2UgdHJlZSByZWZlcmVuY2VzICIKKwkJCSJTTUMgcHJhbSwgdXNpbmcgYm9vdCBsb2FkZXIvd3JhcHBlciBwcmFtIG1hcHBpbmcuICIKKwkJCSJQbGVhc2UgZml4IHlvdXIgZGV2aWNlIHRyZWUgdG8gcmVmZXJlbmNlIHRoZSBwcmFtICIKKwkJCSJiYXNlIHJlZ2lzdGVyIGluc3RlYWQuXG4iLAorCQkJcG9ydC0+cG9ydC5saW5lKTsKKwkJcmV0dXJuIHByYW07CisJfQorCisJb2Zmc2V0ID0gY3BtX2RwYWxsb2MoUFJPRkZfU01DX1NJWkUsIDY0KTsKKwlvdXRfYmUxNihwcmFtLCBvZmZzZXQpOworCWlvdW5tYXAocHJhbSk7CisJcmV0dXJuIGNwbV9tdXJhbV9hZGRyKG9mZnNldCk7Cit9CisKK3ZvaWQgY3BtX3VhcnRfdW5tYXBfcHJhbShzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcG9ydCwgdm9pZCBfX2lvbWVtICpwcmFtKQoreworCWlmICghSVNfU01DKHBvcnQpKQorCQlpb3VubWFwKHByYW0pOworfQorCiAjZWxzZQogdm9pZCBjcG1fbGluZV9jcl9jbWQoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBvcnQsIGludCBjbWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IDU2YWYxZjUuLjVhMzc1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC0xNjYsMTUgKzE2Niw2IEBACiAjZGVmaW5lIFNFUklBTF9JTVhfTUFKT1IJMjA0CiAjZGVmaW5lIE1JTk9SX1NUQVJUCQk0MQogCi0jZGVmaW5lIE5SX1BPUlRTCQkyCi0KLSNkZWZpbmUgSU1YX0lTUl9QQVNTX0xJTUlUCTI1NgotCi0vKgotICogVGhpcyBpcyB0aGUgc2l6ZSBvZiBvdXIgc2VyaWFsIHBvcnQgcmVnaXN0ZXIgc2V0LgotICovCi0jZGVmaW5lIFVBUlRfUE9SVF9TSVpFCTB4MTAwCi0KIC8qCiAgKiBUaGlzIGRldGVybWluZXMgaG93IG9mdGVuIHdlIGNoZWNrIHRoZSBtb2RlbSBzdGF0dXMgc2lnbmFscwogICogZm9yIGFueSBjaGFuZ2UuICBUaGV5IGdlbmVyYWxseSBhcmVuJ3QgY29ubmVjdGVkIHRvIGFuIElSUQpAQCAtMzU4LDY2ICszNDksNjAgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gc3BvcnQtPnBvcnQuaW5mby0+dHR5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRlbXA7CiAKLQlyeCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVUlhEMCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNwb3J0LT5wb3J0LmxvY2ssZmxhZ3MpOwogCi0JZG8geworCXdoaWxlIChyZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMikgJiBVU1IyX1JEUikgewogCQlmbGcgPSBUVFlfTk9STUFMOwogCQlzcG9ydC0+cG9ydC5pY291bnQucngrKzsKIAorCQlyeCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVUlhEMCk7CisKIAkJdGVtcCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVU1IyKTsKLQkJaWYoIHRlbXAgJiBVU1IyX0JSQ0QgKSB7CisJCWlmICh0ZW1wICYgVVNSMl9CUkNEKSB7CiAJCQl3cml0ZWwodGVtcCB8IFVTUjJfQlJDRCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjIpOwotCQkJaWYodWFydF9oYW5kbGVfYnJlYWsoJnNwb3J0LT5wb3J0KSkKLQkJCQlnb3RvIGlnbm9yZV9jaGFyOworCQkJaWYgKHVhcnRfaGFuZGxlX2JyZWFrKCZzcG9ydC0+cG9ydCkpCisJCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcgogCQkgICAgICAgICAgICAoJnNwb3J0LT5wb3J0LCAodW5zaWduZWQgY2hhcilyeCkpCi0JCQlnb3RvIGlnbm9yZV9jaGFyOworCQkJY29udGludWU7CiAKLQkJaWYoIHJ4ICYgKFVSWERfUFJFUlIgfCBVUlhEX09WUlJVTiB8IFVSWERfRlJNRVJSKSApCi0JCQlnb3RvIGhhbmRsZV9lcnJvcjsKKwkJaWYgKHJ4ICYgKFVSWERfUFJFUlIgfCBVUlhEX09WUlJVTiB8IFVSWERfRlJNRVJSKSApIHsKKwkJCWlmIChyeCAmIFVSWERfUFJFUlIpCisJCQkJc3BvcnQtPnBvcnQuaWNvdW50LnBhcml0eSsrOworCQkJZWxzZSBpZiAocnggJiBVUlhEX0ZSTUVSUikKKwkJCQlzcG9ydC0+cG9ydC5pY291bnQuZnJhbWUrKzsKKwkJCWlmIChyeCAmIFVSWERfT1ZSUlVOKQorCQkJCXNwb3J0LT5wb3J0Lmljb3VudC5vdmVycnVuKys7CiAKLQllcnJvcl9yZXR1cm46CisJCQlpZiAocnggJiBzcG9ydC0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2spIHsKKwkJCQlpZiAoKytpZ25vcmVkID4gMTAwKQorCQkJCQlnb3RvIG91dDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcnggJj0gc3BvcnQtPnBvcnQucmVhZF9zdGF0dXNfbWFzazsKKworCQkJaWYgKHJ4ICYgVVJYRF9QUkVSUikKKwkJCQlmbGcgPSBUVFlfUEFSSVRZOworCQkJZWxzZSBpZiAocnggJiBVUlhEX0ZSTUVSUikKKwkJCQlmbGcgPSBUVFlfRlJBTUU7CisJCQlpZiAocnggJiBVUlhEX09WUlJVTikKKwkJCQlmbGcgPSBUVFlfT1ZFUlJVTjsKKworI2lmZGVmIFNVUFBPUlRfU1lTUlEKKwkJCXNwb3J0LT5wb3J0LnN5c3JxID0gMDsKKyNlbmRpZgorCQl9CisKIAkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCByeCwgZmxnKTsKLQotCWlnbm9yZV9jaGFyOgotCQlyeCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVUlhEMCk7Ci0JfSB3aGlsZShyeCAmIFVSWERfQ0hBUlJEWSk7CisJfQogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BvcnQtPnBvcnQubG9jayxmbGFncyk7CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLWhhbmRsZV9lcnJvcjoKLQlpZiAocnggJiBVUlhEX1BSRVJSKQotCQlzcG9ydC0+cG9ydC5pY291bnQucGFyaXR5Kys7Ci0JZWxzZSBpZiAocnggJiBVUlhEX0ZSTUVSUikKLQkJc3BvcnQtPnBvcnQuaWNvdW50LmZyYW1lKys7Ci0JaWYgKHJ4ICYgVVJYRF9PVlJSVU4pCi0JCXNwb3J0LT5wb3J0Lmljb3VudC5vdmVycnVuKys7Ci0KLQlpZiAocnggJiBzcG9ydC0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2spIHsKLQkJaWYgKCsraWdub3JlZCA+IDEwMCkKLQkJCWdvdG8gb3V0OwotCQlnb3RvIGlnbm9yZV9jaGFyOwotCX0KLQotCXJ4ICY9IHNwb3J0LT5wb3J0LnJlYWRfc3RhdHVzX21hc2s7Ci0KLQlpZiAocnggJiBVUlhEX1BSRVJSKQotCQlmbGcgPSBUVFlfUEFSSVRZOwotCWVsc2UgaWYgKHJ4ICYgVVJYRF9GUk1FUlIpCi0JCWZsZyA9IFRUWV9GUkFNRTsKLQlpZiAocnggJiBVUlhEX09WUlJVTikKLQkJZmxnID0gVFRZX09WRVJSVU47Ci0KLSNpZmRlZiBTVVBQT1JUX1NZU1JRCi0Jc3BvcnQtPnBvcnQuc3lzcnEgPSAwOwotI2VuZGlmCi0JZ290byBlcnJvcl9yZXR1cm47CiB9CiAKIC8qCkBAIC01NDYsNyArNTMxLDcgQEAKIAl3cml0ZWwoVVNSMV9SVFNELCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMSk7CiAKIAl0ZW1wID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjEpOwotCXRlbXAgfD0gKFVDUjFfVFhNUFRZRU4gfCBVQ1IxX1JSRFlFTiB8IFVDUjFfUlRTREVOIHwgVUNSMV9VQVJURU4pOworCXRlbXAgfD0gVUNSMV9SUkRZRU4gfCBVQ1IxX1JUU0RFTiB8IFVDUjFfVUFSVEVOOwogCXdyaXRlbCh0ZW1wLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMSk7CiAKIAl0ZW1wID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjIpOwpAQCAtNzMxLDkgKzcxNiwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpbXhfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3QgaW14X3BvcnQgKilwb3J0OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UocG9ydC0+ZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1tcmVzOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKHNwb3J0LT5wb3J0Lm1hcGJhc2UsIFVBUlRfUE9SVF9TSVpFKTsKKwltbXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1tcmVzLT5zdGFydCwgbW1yZXMtPmVuZCAtIG1tcmVzLT5zdGFydCArIDEpOwogfQogCiAvKgpAQCAtNzQxLDEwICs3MjgsMTggQEAKICAqLwogc3RhdGljIGludCBpbXhfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3QgaW14X3BvcnQgKilwb3J0OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UocG9ydC0+ZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1tcmVzOworCXZvaWQgKnJldDsKIAotCXJldHVybiByZXF1ZXN0X21lbV9yZWdpb24oc3BvcnQtPnBvcnQubWFwYmFzZSwgVUFSVF9QT1JUX1NJWkUsCi0JCQkiaW14LXVhcnQiKSAhPSBOVUxMID8gMCA6IC1FQlVTWTsKKwltbXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtbXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSByZXF1ZXN0X21lbV9yZWdpb24obW1yZXMtPnN0YXJ0LCBtbXJlcy0+ZW5kIC0gbW1yZXMtPnN0YXJ0ICsgMSwKKwkJCSJpbXgtdWFydCIpOworCisJcmV0dXJuICByZXQgPyAwIDogLUVCVVNZOwogfQogCiAvKgpAQCAtODE1LDcgKzgxMCw3IEBACiAJCS50eXBlCQk9IFBPUlRfSU1YLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkubWVtYmFzZQk9ICh2b2lkICopSU1YX1VBUlQxX0JBU0UsCi0JCS5tYXBiYXNlCT0gSU1YX1VBUlQxX0JBU0UsIC8qIEZJWE1FICovCisJCS5tYXBiYXNlCT0gMHgwMDIwNjAwMCwKIAkJLmlycQkJPSBVQVJUMV9NSU5UX1JYLAogCQkudWFydGNsawk9IDE2MDAwMDAwLAogCQkuZmlmb3NpemUJPSAzMiwKQEAgLTgzMSw3ICs4MjYsNyBAQAogCQkudHlwZQkJPSBQT1JUX0lNWCwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKIAkJLm1lbWJhc2UJPSAodm9pZCAqKUlNWF9VQVJUMl9CQVNFLAotCQkubWFwYmFzZQk9IElNWF9VQVJUMl9CQVNFLCAvKiBGSVhNRSAqLworCQkubWFwYmFzZQk9IDB4MDAyMDcwMDAsCiAJCS5pcnEJCT0gVUFSVDJfTUlOVF9SWCwKIAkJLnVhcnRjbGsJPSAxNjAwMDAwMCwKIAkJLmZpZm9zaXplCT0gMzIsCkBAIC0xMDkwLDYgKzEwODUsNyBAQAogCS5yZXN1bWUJCT0gc2VyaWFsX2lteF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJICAgICAgICAubmFtZQk9ICJpbXgtdWFydCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0xMTI0LDMgKzExMjAsNCBAQAogTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklNWCBnZW5lcmljIHNlcmlhbCBwb3J0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTppbXgtdWFydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwva2dkYm9jLmMgYi9kcml2ZXJzL3NlcmlhbC9rZ2Rib2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YwMzMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZXJpYWwva2dkYm9jLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBCYXNlZCBvbiB0aGUgc2FtZSBwcmluY2lwbGUgYXMga2dkYm9lIHVzaW5nIHRoZSBORVRQT0xMIGFwaSwgdGhpcworICogZHJpdmVyIHVzZXMgYSBjb25zb2xlIHBvbGxpbmcgYXBpIHRvIGltcGxlbWVudCBhIGdkYiBzZXJpYWwgaW50ZWZhY2UKKyAqIHdoaWNoIGlzIG11bHRpcGxleGVkIG9uIGEgY29uc29sZSBwb3J0LgorICoKKyAqIE1haW50YWluZXI6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisgKgorICogMjAwNy0yMDA4IChjKSBKYXNvbiBXZXNzZWwgLSBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisKKyNkZWZpbmUgTUFYX0NPTkZJR19MRU4JCTQwCisKK3N0YXRpYyBzdHJ1Y3Qga2dkYl9pbwkJa2dkYm9jX2lvX29wczsKKworLyogLTEgPSBpbml0IG5vdCBydW4geWV0LCAwID0gdW5jb25maWd1cmVkLCAxID0gY29uZmlndXJlZC4gKi8KK3N0YXRpYyBpbnQgY29uZmlndXJlZAkJPSAtMTsKKworc3RhdGljIGNoYXIgY29uZmlnW01BWF9DT05GSUdfTEVOXTsKK3N0YXRpYyBzdHJ1Y3Qga3BhcmFtX3N0cmluZyBrcHMgPSB7CisJLnN0cmluZwkJCT0gY29uZmlnLAorCS5tYXhsZW4JCQk9IE1BWF9DT05GSUdfTEVOLAorfTsKKworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyCSprZ2RiX3R0eV9kcml2ZXI7CitzdGF0aWMgaW50CQkJa2dkYl90dHlfbGluZTsKKworc3RhdGljIGludCBrZ2Rib2Nfb3B0aW9uX3NldHVwKGNoYXIgKm9wdCkKK3sKKwlpZiAoc3RybGVuKG9wdCkgPiBNQVhfQ09ORklHX0xFTikgeworCQlwcmludGsoS0VSTl9FUlIgImtnZGJvYzogY29uZmlnIHN0cmluZyB0b28gbG9uZ1xuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwlzdHJjcHkoY29uZmlnLCBvcHQpOworCisJcmV0dXJuIDA7Cit9CisKK19fc2V0dXAoImtnZGJvYz0iLCBrZ2Rib2Nfb3B0aW9uX3NldHVwKTsKKworc3RhdGljIGludCBjb25maWd1cmVfa2dkYm9jKHZvaWQpCit7CisJc3RydWN0IHR0eV9kcml2ZXIgKnA7CisJaW50IHR0eV9saW5lID0gMDsKKwlpbnQgZXJyOworCisJZXJyID0ga2dkYm9jX29wdGlvbl9zZXR1cChjb25maWcpOworCWlmIChlcnIgfHwgIXN0cmxlbihjb25maWcpIHx8IGlzc3BhY2UoY29uZmlnWzBdKSkKKwkJZ290byBub2NvbmZpZzsKKworCWVyciA9IC1FTk9ERVY7CisKKwlwID0gdHR5X2ZpbmRfcG9sbGluZ19kcml2ZXIoY29uZmlnLCAmdHR5X2xpbmUpOworCWlmICghcCkKKwkJZ290byBub2NvbmZpZzsKKworCWtnZGJfdHR5X2RyaXZlciA9IHA7CisJa2dkYl90dHlfbGluZSA9IHR0eV9saW5lOworCisJZXJyID0ga2dkYl9yZWdpc3Rlcl9pb19tb2R1bGUoJmtnZGJvY19pb19vcHMpOworCWlmIChlcnIpCisJCWdvdG8gbm9jb25maWc7CisKKwljb25maWd1cmVkID0gMTsKKworCXJldHVybiAwOworCitub2NvbmZpZzoKKwljb25maWdbMF0gPSAwOworCWNvbmZpZ3VyZWQgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9rZ2Rib2Modm9pZCkKK3sKKwkvKiBBbHJlYWR5IGNvbmZpZ3VyZWQ/ICovCisJaWYgKGNvbmZpZ3VyZWQgPT0gMSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY29uZmlndXJlX2tnZGJvYygpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2tnZGJvYyh2b2lkKQoreworCWlmIChjb25maWd1cmVkID09IDEpCisJCWtnZGJfdW5yZWdpc3Rlcl9pb19tb2R1bGUoJmtnZGJvY19pb19vcHMpOworfQorCitzdGF0aWMgaW50IGtnZGJvY19nZXRfY2hhcih2b2lkKQoreworCXJldHVybiBrZ2RiX3R0eV9kcml2ZXItPnBvbGxfZ2V0X2NoYXIoa2dkYl90dHlfZHJpdmVyLCBrZ2RiX3R0eV9saW5lKTsKK30KKworc3RhdGljIHZvaWQga2dkYm9jX3B1dF9jaGFyKHU4IGNocikKK3sKKwlrZ2RiX3R0eV9kcml2ZXItPnBvbGxfcHV0X2NoYXIoa2dkYl90dHlfZHJpdmVyLCBrZ2RiX3R0eV9saW5lLCBjaHIpOworfQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9rZ2Rib2NfdmFyKGNvbnN0IGNoYXIgKmttZXNzYWdlLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKGttZXNzYWdlKTsKKworCWlmIChsZW4gPj0gTUFYX0NPTkZJR19MRU4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJrZ2Rib2M6IGNvbmZpZyBzdHJpbmcgdG9vIGxvbmdcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwkvKiBPbmx5IGNvcHkgaW4gdGhlIHN0cmluZyBpZiB0aGUgaW5pdCBmdW5jdGlvbiBoYXMgbm90IHJ1biB5ZXQgKi8KKwlpZiAoY29uZmlndXJlZCA8IDApIHsKKwkJc3RyY3B5KGNvbmZpZywga21lc3NhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoa2dkYl9jb25uZWN0ZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAia2dkYm9jOiBDYW5ub3QgcmVjb25maWd1cmUgd2hpbGUgS0dEQiBpcyBjb25uZWN0ZWQuXG4iKTsKKworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXN0cmNweShjb25maWcsIGttZXNzYWdlKTsKKwkvKiBDaG9wIG91dCBcbiBjaGFyIGFzIGEgcmVzdWx0IG9mIGVjaG8gKi8KKwlpZiAoY29uZmlnW2xlbiAtIDFdID09ICdcbicpCisJCWNvbmZpZ1tsZW4gLSAxXSA9ICdcMCc7CisKKwlpZiAoY29uZmlndXJlZCA9PSAxKQorCQljbGVhbnVwX2tnZGJvYygpOworCisJLyogR28gYW5kIGNvbmZpZ3VyZSB3aXRoIHRoZSBuZXcgcGFyYW1zLiAqLworCXJldHVybiBjb25maWd1cmVfa2dkYm9jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGtnZGJvY19wcmVfZXhwX2hhbmRsZXIodm9pZCkKK3sKKwkvKiBJbmNyZW1lbnQgdGhlIG1vZHVsZSBjb3VudCB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBhY3RpdmUgKi8KKwlpZiAoIWtnZGJfY29ubmVjdGVkKQorCQl0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGtnZGJvY19wb3N0X2V4cF9oYW5kbGVyKHZvaWQpCit7CisJLyogZGVjcmVtZW50IHRoZSBtb2R1bGUgY291bnQgd2hlbiB0aGUgZGVidWdnZXIgZGV0YWNoZXMgKi8KKwlpZiAoIWtnZGJfY29ubmVjdGVkKQorCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCBrZ2RiX2lvIGtnZGJvY19pb19vcHMgPSB7CisJLm5hbWUJCQk9ICJrZ2Rib2MiLAorCS5yZWFkX2NoYXIJCT0ga2dkYm9jX2dldF9jaGFyLAorCS53cml0ZV9jaGFyCQk9IGtnZGJvY19wdXRfY2hhciwKKwkucHJlX2V4Y2VwdGlvbgkJPSBrZ2Rib2NfcHJlX2V4cF9oYW5kbGVyLAorCS5wb3N0X2V4Y2VwdGlvbgkJPSBrZ2Rib2NfcG9zdF9leHBfaGFuZGxlciwKK307CisKK21vZHVsZV9pbml0KGluaXRfa2dkYm9jKTsKK21vZHVsZV9leGl0KGNsZWFudXBfa2dkYm9jKTsKK21vZHVsZV9wYXJhbV9jYWxsKGtnZGJvYywgcGFyYW1fc2V0X2tnZGJvY192YXIsIHBhcmFtX2dldF9zdHJpbmcsICZrcHMsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhrZ2Rib2MsICI8c2VyaWFsX2RldmljZT5bLGJhdWRdIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIktHREIgQ29uc29sZSBUVFkgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwppbmRleCAzNDhlZTJjLi5jMmJiMTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCQl1cC0+cG9ydC5pY291bnQudHgrKzsKIAkJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKIAkJCWJyZWFrOwotCQl3aGlsZSAoIXNlcmlhbF9pbih1cCwgVUFSVF9MU1IpICYgVUFSVF9MU1JfVEhSRSk7CisJCXdoaWxlICghKHNlcmlhbF9pbih1cCwgVUFSVF9MU1IpICYgVUFSVF9MU1JfVEhSRSkpOwogCiAJfSB3aGlsZSAoLS1jb3VudCA+IDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tY2YuYyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCmluZGV4IGU3NmZjNzIuLjdlMTY0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCkBAIC02NDksNSArNjQ5LDYgQEAKIE1PRFVMRV9BVVRIT1IoIkdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBDb2xkRmlyZSBVQVJUIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptY2Z1YXJ0Iik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYwppbmRleCA5OWFmMDg0Li5kZGQzYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9tY2ZzaW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggYTYzOGYyMy4uZDkzYjM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTExODgsNiArMTE4OCw4IEBACiB9CiAjZW5kaWYKIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1wYzUyeHgtcHNjIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG1wYzUyeHhfdWFydF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwppbmRleCBjYjNhOTE5Li5lODgxOWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCkBAIC0xOTY0LDYgKzE5NjQsNyBAQAogCS5yZW1vdmUJPSBtcHNjX2Rydl9yZW1vdmUsCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSBNUFNDX0NUTFJfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTIwMDcsMyArMjAwOCw0IEBACiBNT0RVTEVfVkVSU0lPTihNUFNDX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoTVBTQ19NQUpPUik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgTVBTQ19DVExSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL25ldHgtc2VyaWFsLmMKaW5kZXggYjU2ZjdkYi4uMzEyM2ZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jCkBAIC03MTMsNiArNzEzLDcgQEAKIAogCS5kcml2ZXIJCT0gewogCQkubmFtZSAgID0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC03NDUsMyArNzQ2LDQgQEAKIE1PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRYIHNlcmlhbCBwb3J0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL29mX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvb2Zfc2VyaWFsLmMKaW5kZXggYTY0ZDg1OC4uOGFhY2ZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvb2Zfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvb2Zfc2VyaWFsLmMKQEAgLTU2LDcgKzU2LDkgQEAKIAlwb3J0LT5mbGFncyA9IFVQRl9TSEFSRV9JUlEgfCBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9JT1JFTUFQCiAJCXwgVVBGX0ZJWEVEX1BPUlQ7CiAJcG9ydC0+ZGV2ID0gJm9mZGV2LT5kZXY7Ci0JcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSAqY2xrIC8gKDE2ICogKCpzcGQpKTsKKwkvKiBJZiBjdXJyZW50LXNwZWVkIHdhcyBzZXQsIHRoZW4gdHJ5IG5vdCB0byBjaGFuZ2UgaXQuICovCisJaWYgKHNwZCkKKwkJcG9ydC0+Y3VzdG9tX2Rpdmlzb3IgPSAqY2xrIC8gKDE2ICogKCpzcGQpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM4LDcgKzE0MCw3IEBACiAJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgX19kZXZpbml0ZGF0YSBvZl9wbGF0Zm9ybV9zZXJpYWxfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgb2ZfcGxhdGZvcm1fc2VyaWFsX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJvZl9zZXJpYWwiLAogCS5wcm9iZSA9IG9mX3BsYXRmb3JtX3NlcmlhbF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BueDh4eHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvcG54OHh4eF91YXJ0LmMKaW5kZXggOGQwMWM1OS4uZDBlNWE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvcG54OHh4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcG54OHh4eF91YXJ0LmMKQEAgLTg1MCwzICs4NTAsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQTlg4WFhYIFNvQ3Mgc2VyaWFsIHBvcnQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTRVJJQUxfUE5YOFhYWF9NQUpPUik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnBueDh4eHgtdWFydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCAzNTJmY2I4Li5iNGY3ZmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtODMzLDYgKzgzMyw3IEBACiAJLnJlc3VtZQkJPSBzZXJpYWxfcHhhX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkgICAgICAgIC5uYW1lCT0gInB4YTJ4eC11YXJ0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTg2MSw0ICs4NjIsNCBAQAogbW9kdWxlX2V4aXQoc2VyaWFsX3B4YV9leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnB4YTJ4eC11YXJ0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggNDVkZTE5My4uNGZmYTI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtMTkzNSwzICsxOTM1LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTM0MyNDEwL1MzQzI0NDAvUzNDMjQxMiBTZXJpYWwgcG9ydCBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQwMC11YXJ0Iik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0MTAtdWFydCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEyLXVhcnQiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQ0MC11YXJ0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCmluZGV4IDU4YTgzYzIuLjY3YjIzMzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtODg0LDYgKzg4NCw3IEBACiAJLnJlc3VtZQkJPSBzYTExMDBfc2VyaWFsX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAic2ExMXgwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtOTE3LDMgKzkxOCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNBMTEwMCBnZW5lcmljIHNlcmlhbCBwb3J0IGRyaXZlciAkUmV2aXNpb246IDEuNTAgJCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0VSSUFMX1NBMTEwMF9NQUpPUik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNhMTF4MC11YXJ0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYzI2eHguYyBiL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCmluZGV4IGEzNTBiNmQuLmFlMmE5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NjMjZ4eC5jCkBAIC03MzIsNiArNzMyLDcgQEAKIAkucmVtb3ZlCT0gX19kZXZleGl0X3Aoc2MyNnh4X2RyaXZlcl9yZW1vdmUpLAogCS5kcml2ZXIJPSB7CiAJCS5uYW1lCT0gIlNDMjZ4eCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC03NTMsMyArNzU0LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU0M2ODEvU0MyNjkyIHNlcmlhbCBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06U0MyNnh4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCAwZjVhMTc5Li5hOWNhMDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTE3NzEsNyArMTc3MSw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRSkgfHwgZGVmaW5lZChDT05GSUdfQ09OU09MRV9QT0xMKQogLyoKICAqCXVhcnRfY29uc29sZV93cml0ZSAtIHdyaXRlIGEgY29uc29sZSBtZXNzYWdlIHRvIGEgc2VyaWFsIHBvcnQKICAqCUBwb3J0OiB0aGUgcG9ydCB0byB3cml0ZSB0aGUgbWVzc2FnZQpAQCAtMTgyNyw3ICsxODI3LDcgQEAKICAqCW9wdGlvbnMuICBUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgPGJhdWQ+PHBhcml0eT48Yml0cz48Zmxvdz4sCiAgKgllZzogMTE1MjAwbjhyCiAgKi8KLXZvaWQgX19pbml0Cit2b2lkCiB1YXJ0X3BhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucywgaW50ICpiYXVkLCBpbnQgKnBhcml0eSwgaW50ICpiaXRzLCBpbnQgKmZsb3cpCiB7CiAJY2hhciAqcyA9IG9wdGlvbnM7CkBAIC0xODQyLDYgKzE4NDIsNyBAQAogCWlmICgqcykKIAkJKmZsb3cgPSAqczsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVhcnRfcGFyc2Vfb3B0aW9ucyk7CiAKIHN0cnVjdCBiYXVkX3JhdGVzIHsKIAl1bnNpZ25lZCBpbnQgcmF0ZTsKQEAgLTE4NzIsNyArMTg3Myw3IEBACiAgKglAYml0czogbnVtYmVyIG9mIGRhdGEgYml0cwogICoJQGZsb3c6IGZsb3cgY29udHJvbCBjaGFyYWN0ZXIgLSAncicgKHJ0cykKICAqLwotaW50IF9faW5pdAoraW50CiB1YXJ0X3NldF9vcHRpb25zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBjb25zb2xlICpjbywKIAkJIGludCBiYXVkLCBpbnQgcGFyaXR5LCBpbnQgYml0cywgaW50IGZsb3cpCiB7CkBAIC0xOTI0LDEwICsxOTI1LDE2IEBACiAJcG9ydC0+bWN0cmwgfD0gVElPQ01fRFRSOwogCiAJcG9ydC0+b3BzLT5zZXRfdGVybWlvcyhwb3J0LCAmdGVybWlvcywgJmR1bW15KTsKLQljby0+Y2ZsYWcgPSB0ZXJtaW9zLmNfY2ZsYWc7CisJLyoKKwkgKiBBbGxvdyB0aGUgc2V0dGluZyBvZiB0aGUgVUFSVCBwYXJhbWV0ZXJzIHdpdGggYSBOVUxMIGNvbnNvbGUKKwkgKiB0b286CisJICovCisJaWYgKGNvKQorCQljby0+Y2ZsYWcgPSB0ZXJtaW9zLmNfY2ZsYWc7CiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVhcnRfc2V0X29wdGlvbnMpOwogI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFICovCiAKIHN0YXRpYyB2b2lkIHVhcnRfY2hhbmdlX3BtKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgaW50IHBtX3N0YXRlKQpAQCAtMjE4Miw2ICsyMTg5LDYwIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTAorCitzdGF0aWMgaW50IHVhcnRfcG9sbF9pbml0KHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBsaW5lLCBjaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2ID0gZHJpdmVyLT5kcml2ZXJfc3RhdGU7CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlpbnQgYmF1ZCA9IDk2MDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cgPSAnbic7CisKKwlpZiAoIXN0YXRlIHx8ICFzdGF0ZS0+cG9ydCkKKwkJcmV0dXJuIC0xOworCisJcG9ydCA9IHN0YXRlLT5wb3J0OworCWlmICghKHBvcnQtPm9wcy0+cG9sbF9nZXRfY2hhciAmJiBwb3J0LT5vcHMtPnBvbGxfcHV0X2NoYXIpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAob3B0aW9ucykgeworCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7CisJCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIE5VTEwsIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWFydF9wb2xsX2dldF9jaGFyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBsaW5lKQoreworCXN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2ID0gZHJpdmVyLT5kcml2ZXJfc3RhdGU7CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKworCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCQlyZXR1cm4gLTE7CisKKwlwb3J0ID0gc3RhdGUtPnBvcnQ7CisJcmV0dXJuIHBvcnQtPm9wcy0+cG9sbF9nZXRfY2hhcihwb3J0KTsKK30KKworc3RhdGljIHZvaWQgdWFydF9wb2xsX3B1dF9jaGFyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBsaW5lLCBjaGFyIGNoKQoreworCXN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2ID0gZHJpdmVyLT5kcml2ZXJfc3RhdGU7CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gZHJ2LT5zdGF0ZSArIGxpbmU7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKworCWlmICghc3RhdGUgfHwgIXN0YXRlLT5wb3J0KQorCQlyZXR1cm47CisKKwlwb3J0ID0gc3RhdGUtPnBvcnQ7CisJcG9ydC0+b3BzLT5wb2xsX3B1dF9jaGFyKHBvcnQsIGNoKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIHVhcnRfb3BzID0gewogCS5vcGVuCQk9IHVhcnRfb3BlbiwKIAkuY2xvc2UJCT0gdWFydF9jbG9zZSwKQEAgLTIyMDYsNiArMjI2NywxMSBAQAogI2VuZGlmCiAJLnRpb2NtZ2V0CT0gdWFydF90aW9jbWdldCwKIAkudGlvY21zZXQJPSB1YXJ0X3Rpb2Ntc2V0LAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKKwkucG9sbF9pbml0CT0gdWFydF9wb2xsX2luaXQsCisJLnBvbGxfZ2V0X2NoYXIJPSB1YXJ0X3BvbGxfZ2V0X2NoYXIsCisJLnBvbGxfcHV0X2NoYXIJPSB1YXJ0X3BvbGxfcHV0X2NoYXIsCisjZW5kaWYKIH07CiAKIC8qKgpAQCAtMjM1Niw3ICsyNDIyLDcgQEAKIAkgKi8KIAl0dHlfZGV2ID0gdHR5X3JlZ2lzdGVyX2RldmljZShkcnYtPnR0eV9kcml2ZXIsIHBvcnQtPmxpbmUsIHBvcnQtPmRldik7CiAJaWYgKGxpa2VseSghSVNfRVJSKHR0eV9kZXYpKSkgewotCQlkZXZpY2VfY2FuX3dha2V1cCh0dHlfZGV2KSA9IDE7CisJCWRldmljZV9pbml0X3dha2V1cCh0dHlfZGV2LCAxKTsKIAkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKHR0eV9kZXYsIDApOwogCX0gZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCByZWdpc3RlciB0dHkgZGV2aWNlIG9uIGxpbmUgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDljZTEyY2IuLmMyZWE1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KQEAgLTU0LDcgKzU1LDYgQEAKICNpbmNsdWRlIDxhc20va2dkYi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhc20vc2NpLmg+CiAjaW5jbHVkZSAic2gtc2NpLmgiCiAKIHN0cnVjdCBzY2lfcG9ydCB7CkBAIC0zMzMsNyArMzMzLDYgQEAKIAl9CiAJc2NpX291dChwb3J0LCBTQ0ZDUiwgZmNyX3ZhbCk7CiB9Ci0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCiAvKiBGb3IgU0g3NzA1LCBTSDc3MDYsIFNINzcwNywgU0g3NzA5LCBTSDc3MDlBLCBTSDc3MjkgKi8KIHN0YXRpYyB2b2lkIHNjaV9pbml0X3BpbnNfc2NpZihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCkBAIC0zODQsNiArMzgzLDEyIEBACiAKIAlzY2lfb3V0KHBvcnQsIFNDRkNSLCBmY3JfdmFsKTsKIH0KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKK3N0YXRpYyB2b2lkIHNjaV9pbml0X3BpbnNfc2NpZihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCit7CisJLyogTm90aGluZyB0byBkbyBoZXJlLi4gKi8KKwlzY2lfb3V0KHBvcnQsIFNDRkNSLCAwKTsKK30KICNlbHNlCiAvKiBGb3IgU0g3NzUwICovCiBzdGF0aWMgdm9pZCBzY2lfaW5pdF9waW5zX3NjaWYoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQpAQCAtNDE0LDEyICs0MTksMTIgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCiBzdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweDdmKTsKKwlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHhmZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaWZfcnhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1JGRFIpICYgMHg3ZjsKKwlyZXR1cm4gc2NpX2luKHBvcnQsIFNDUkZEUikgJiAweGZmOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0xNTUyLDMgKzE1NTcsNCBAQAogbW9kdWxlX2V4aXQoc2NpX2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNoLXNjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCAwMWE5ZGQ3Li5mYTg3MDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtMSwyMCArMSw1IEBACi0vKiAkSWQ6IHNoLXNjaS5oLHYgMS40IDIwMDQvMDIvMTkgMTY6NDM6NTYgbGV0aGFsIEV4cCAkCi0gKgotICogIGxpbnV4L2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCi0gKgotICogIFN1cGVySCBvbi1jaGlwIHNlcmlhbCBtb2R1bGUgc3VwcG9ydC4gIChTQ0kgd2l0aCBubyBGSUZPIC8gd2l0aCBGSUZPKQotICogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwICBHcmVnIEJhbmtzCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzICBQYXVsIE11bmR0Ci0gKiAgTW9kaWZpZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBzZXJpYWwgcG9ydHMuIFN0dWFydCBNZW5lZnkgKE1heSAyMDAwKS4KLSAqICBNb2RpZmllZCB0byBzdXBwb3J0IFNINzMwMChTSC1Nb2JpbGUpIFNDSUYuIFRha2FzaGkgS3VzdWRhIChKdW4gMjAwMykuCi0gKiAgTW9kaWZpZWQgdG8gc3VwcG9ydCBIOC8zMDAgU2VyaWVzIFlvc2hpbm9yaSBTYXRvIChGZWIgMjAwNCkuCi0gKiAgUmVtb3ZlZCBTSDczMDAgc3VwcG9ydCAoSnVsIDIwMDcpLgotICogIE1vZGlmaWVkIHRvIHN1cHBvcnQgU0g3NzIwIFNDSUYuIE1hcmt1cyBCcnVubmVyLCBNYXJrIEpvbmFzIChBdWcgMjAwNykuCi0gKi8KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotCiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQpAQCAtMTAyLDYgKzg3LDE1IEBACiAjIGRlZmluZSBTQ1NQVFIwCQlTQ1BEUjAKICMgZGVmaW5lIFNDSUZfT1JFUgkJMHgwMDAxICAvKiBvdmVycnVuIGVycm9yIGJpdCAqLwogIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KQkweDAwMzggIC8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSxSRUlFPTEgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKKyMgZGVmaW5lIFNDU1BUUjAgICAgICAgICAgICAgICAgMHhhNDA1MDE2MAorIyBkZWZpbmUgU0NTUFRSMSAgICAgICAgICAgICAgICAweGE0MDUwMTNlCisjIGRlZmluZSBTQ1NQVFIyICAgICAgICAgICAgICAgIDB4YTQwNTAxNjAKKyMgZGVmaW5lIFNDU1BUUjMgICAgICAgICAgICAgICAgMHhhNDA1MDEzZQorIyBkZWZpbmUgU0NTUFRSNCAgICAgICAgICAgICAgICAweGE0MDUwMTI4CisjIGRlZmluZSBTQ1NQVFI1ICAgICAgICAgICAgICAgIDB4YTQwNTAxMjgKKyMgZGVmaW5lIFNDSUZfT1JFUiAgICAgICAgICAgICAgMHgwMDAxICAvKiBvdmVycnVuIGVycm9yIGJpdCAqLworIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KSAgICAgICAweDAwMzggIC8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSxSRUlFPTEgKi8KICMgZGVmaW5lIFNDSUZfT05MWQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikKICMgZGVmaW5lIFNDU1BUUjIgMHhmZmU4MDAyMCAvKiAxNiBiaXQgU0NJRiAqLwpAQCAtMzk1LDYgKzM4OSwxMSBAQAogICAgICAgICAgICAgICAgICBoOF9zY2lfb2Zmc2V0LCBoOF9zY2lfc2l6ZSkgXAogICBDUFVfU0NJX0ZOUyhuYW1lLCBoOF9zY2lfb2Zmc2V0LCBoOF9zY2lfc2l6ZSkKICNkZWZpbmUgU0NJRl9GTlMobmFtZSwgc2gzX3NjaWZfb2Zmc2V0LCBzaDNfc2NpZl9zaXplLCBzaDRfc2NpZl9vZmZzZXQsIHNoNF9zY2lmX3NpemUpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCisgICAgICAgICNkZWZpbmUgU0NJeF9GTlMobmFtZSwgc2g0X3NjaWZhX29mZnNldCwgc2g0X3NjaWZhX3NpemUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSkgXAorICAgICAgICAgICAgICAgIENQVV9TQ0l4X0ZOUyhuYW1lLCBzaDRfc2NpZmFfb2Zmc2V0LCBzaDRfc2NpZmFfc2l6ZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKQorICAgICAgICAjZGVmaW5lIFNDSUZfRk5TKG5hbWUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSkgXAorICAgICAgICAgICAgICAgIENQVV9TQ0lGX0ZOUyhuYW1lLCBzaDRfc2NpZl9vZmZzZXQsIHNoNF9zY2lmX3NpemUpCiAjZWxzZQogI2RlZmluZSBTQ0l4X0ZOUyhuYW1lLCBzaDNfc2NpX29mZnNldCwgc2gzX3NjaV9zaXplLCBzaDRfc2NpX29mZnNldCwgc2g0X3NjaV9zaXplLCBcCiAJCSBzaDNfc2NpZl9vZmZzZXQsIHNoM19zY2lmX3NpemUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSwgXApAQCAtNDE5LDYgKzQxOCwxOCBAQAogU0NJRl9GTlMoU0N4VERSLCAweDIwLCAgOCkKIFNDSUZfRk5TKFNDeFJEUiwgMHgyNCwgIDgpCiBTQ0lGX0ZOUyhTQ0xTUiwgIDB4MjQsIDE2KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQorU0NJeF9GTlMoU0NTTVIsICAweDAwLCAxNiwgMHgwMCwgMTYpCitTQ0l4X0ZOUyhTQ0JSUiwgIDB4MDQsICA4LCAweDA0LCAgOCkKK1NDSXhfRk5TKFNDU0NSLCAgMHgwOCwgMTYsIDB4MDgsIDE2KQorU0NJeF9GTlMoU0N4VERSLCAweDIwLCAgOCwgMHgwYywgIDgpCitTQ0l4X0ZOUyhTQ3hTUiwgIDB4MTQsIDE2LCAweDEwLCAxNikKK1NDSXhfRk5TKFNDeFJEUiwgMHgyNCwgIDgsIDB4MTQsICA4KQorU0NJRl9GTlMoU0NURFNSLCAweDBjLCAgOCkKK1NDSUZfRk5TKFNDRkVSLCAgMHgxMCwgMTYpCitTQ0lGX0ZOUyhTQ0ZDUiwgIDB4MTgsIDE2KQorU0NJRl9GTlMoU0NGRFIsICAweDFjLCAxNikKK1NDSUZfRk5TKFNDTFNSLCAgMHgyNCwgMTYpCiAjZWxzZQogLyogICAgICByZWcgICAgICBTQ0kvU0gzICAgU0NJL1NINCAgU0NJRi9TSDMgICBTQ0lGL1NINCAgU0NJL0g4Ki8KIC8qICAgICAgbmFtZSAgICAgb2ZmICBzeiAgIG9mZiAgc3ogICBvZmYgIHN6ICAgb2ZmICBzeiAgIG9mZiAgc3oqLwpAQCAtNTg5LDYgKzYwMCwyMyBAQAogCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGMCAqLwogCXJldHVybiAxOwogfQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQorc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihTQ1NQVFIwKSAmIDB4MDAwOCA/IDEgOiAwOyAvKiBTQ0lGMCAqLworICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihTQ1NQVFIxKSAmIDB4MDAyMCA/IDEgOiAwOyAvKiBTQ0lGMSAqLworICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTIwMDAwKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGMiAqLworICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0ZTMwMDAwKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGMyAqLworICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0ZTQwMDAwKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihTQ1NQVFI0KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGNCAqLworICAgICAgICBpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0ZTUwMDAwKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihTQ1NQVFI1KSAmIDB4MDAwOCA/IDEgOiAwOyAvKiBTQ0lGNSAqLworICAgICAgICByZXR1cm4gMTsKK30KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CkBAIC03MjcsNiArNzU1LDggQEAKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQogI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKCgoY2xrKjIpKzE2KmJwcykvKDMyKmJwcyktMSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKKyNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoyKSsxNipicHMpLygxNipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzKSAoKChDT05GSUdfQ1BVX0NMT0NLKjEwMDAvMzIpL2JwcyktMSkKICNlbGlmIGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYyBiL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKaW5kZXggNGUwNmFiNi4uYjU2NWQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCkBAIC01NjEsNiArNTYxLDkgQEAKIAlyZXR1cm4gdWxpdGVfcmVsZWFzZSgmcGRldi0+ZGV2KTsKIH0KIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnVhcnRsaXRlIik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVsaXRlX3BsYXRmb3JtX2RyaXZlciA9IHsKIAkucHJvYmUJPSB1bGl0ZV9wcm9iZSwKIAkucmVtb3ZlCT0gX19kZXZleGl0X3AodWxpdGVfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCmluZGV4IGUwOTk0ZjAuLjVlNDMxMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYwpAQCAtMTI3MCwxMCArMTI3MCwxOCBAQAogCiAJLyogR2V0IHRoZSBVQ0MgbnVtYmVyIChkZXZpY2UgSUQpICovCiAJLyogVUNDcyBhcmUgbnVtYmVyZWQgMS03ICovCi0JaXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKLQlpZiAoIWlwcm9wIHx8ICgqaXByb3AgPCAxKSB8fCAoKmlwcm9wID4gVUNDX01BWF9OVU0pKSB7Ci0JCWRldl9lcnIoJm9mZGV2LT5kZXYsCi0JCQkibWlzc2luZyBvciBpbnZhbGlkIFVDQyBzcGVjaWZpZWQgaW4gZGV2aWNlIHRyZWVcbiIpOworCWlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOworCWlmICghaXByb3ApIHsKKwkJaXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJaWYgKCFpcHJvcCkgeworCQkJZGV2X2Vycigmb2ZkZXYtPmRldiwgIlVDQyBpcyB1bnNwZWNpZmllZCBpbiAiCisJCQkJImRldmljZSB0cmVlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKCgqaXByb3AgPCAxKSB8fCAoKmlwcm9wID4gVUNDX01BWF9OVU0pKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJubyBzdXBwb3J0IGZvciBVQ0MldVxuIiwgKmlwcm9wKTsKIAkJa2ZyZWUocWVfcG9ydCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYyBiL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYwppbmRleCA2ZmQ1MWIwLi45OGFiNjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCkBAIC05NjAsMyArOTYwLDYgQEAKIAogbW9kdWxlX2luaXQodnI0MXh4X3NpdV9pbml0KTsKIG1vZHVsZV9leGl0KHZyNDF4eF9zaXVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06U0lVIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMgYi9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKaW5kZXggOWNmY2ZkOC4uNjE3ZWZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCisrKyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3JlIG1hcGxlIGJ1cyBmdW5jdGlvbmFsaXR5CiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBZHJpYW4gTWNNZW5hbWluCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFkcmlhbiBNY01lbmFtaW4KICAqCiAgKiBCYXNlZCBvbiAyLjQgY29kZSBieToKICAqCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtNTQsNyArNTMsNyBAQAogc3RhdGljIGludCBzdWJkZXZpY2VfbWFwW01BUExFX1BPUlRTXTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nICptYXBsZV9zZW5kYnVmLCAqbWFwbGVfc2VuZHB0ciwgKm1hcGxlX2xhc3RwdHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXBsZV9wbnBfdGltZTsKLXN0YXRpYyBpbnQgc3RhcnRlZCwgc2Nhbm5pbmcsIGxpc3RzdGF0dXMsIHJlYWxzY2FuOworc3RhdGljIGludCBzdGFydGVkLCBzY2FubmluZywgbGlzdHN0YXR1cywgZnVsbHNjYW47CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1hcGxlX3F1ZXVlX2NhY2hlOwogCiBzdHJ1Y3QgbWFwbGVfZGV2aWNlX3NwZWNpZnkgewpAQCAtNjIsNiArNjEsOSBAQAogCWludCB1bml0OwogfTsKIAorc3RhdGljIGJvb2wgY2hlY2tlZFs0XTsKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZGV2aWNlICpiYXNldW5pdHNbNF07CisKIC8qKgogICogIG1hcGxlX2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgZGV2aWNlIGRyaXZlcgogICogIGF1dG9tYXRpY2FsbHkgbWFrZXMgdGhlIGRyaXZlciBidXMgYSBtYXBsZSBidXMKQEAgLTMwOSwxMSArMzExLDkgQEAKIAkJZWxzZQogCQkJYnJlYWs7CiAKLQlpZiAocmVhbHNjYW4pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgZGV2aWNlIGRldGVjdGVkOiAlc1xuIiwKLQkJCW1kZXYtPnByb2R1Y3RfbmFtZSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZTogJXNcbiIsIG1kZXYtPnByb2R1Y3RfbGljZW5jZSk7Ci0JfQorCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZSBkZXRlY3RlZDogJXNcbiIsCisJCW1kZXYtPnByb2R1Y3RfbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgZGV2aWNlOiAlc1xuIiwgbWRldi0+cHJvZHVjdF9saWNlbmNlKTsKIAogCWZ1bmN0aW9uID0gYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbik7CiAKQEAgLTMyMywxMCArMzIzLDkgQEAKIAkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX2R1bW15X2RyaXZlcjsKIAkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CiAJfSBlbHNlIHsKLQkJaWYgKHJlYWxzY2FuKQotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJNYXBsZSBidXMgYXQgKCVkLCAlZCk6IEZ1bmN0aW9uIDB4JWxYXG4iLAotCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIk1hcGxlIGJ1cyBhdCAoJWQsICVkKTogRnVuY3Rpb24gMHglbFhcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBmdW5jdGlvbik7CiAKIAkJbWF0Y2hlZCA9CiAJCSAgICBidXNfZm9yX2VhY2hfZHJ2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgbWRldiwKQEAgLTMzNCw5ICszMzMsOCBAQAogCiAJCWlmIChtYXRjaGVkID09IDApIHsKIAkJCS8qIERyaXZlciBkb2VzIG5vdCBleGlzdCB5ZXQgKi8KLQkJCWlmIChyZWFsc2NhbikKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSJObyBtYXBsZSBkcml2ZXIgZm91bmQuXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkiTm8gbWFwbGUgZHJpdmVyIGZvdW5kLlxuIik7CiAJCQltZGV2LT5kcml2ZXIgPSAmbWFwbGVfZHVtbXlfZHJpdmVyOwogCQl9CiAJCXNwcmludGYobWRldi0+ZGV2LmJ1c19pZCwgIiVkOjAlZC4lbFgiLCBtZGV2LT5wb3J0LApAQCAtNDcyLDkgKzQ3MCwxMiBAQAogCQltYXBsZV9kZXRhY2hfZHJpdmVyKG1kZXYpOwogCQlyZXR1cm47CiAJfQotCWlmICghc3RhcnRlZCkgewotCQlwcmludGsoS0VSTl9JTkZPICJObyBtYXBsZSBkZXZpY2VzIGF0dGFjaGVkIHRvIHBvcnQgJWRcbiIsCi0JCSAgICAgICBtZGV2LT5wb3J0KTsKKwlpZiAoIXN0YXJ0ZWQgfHwgIWZ1bGxzY2FuKSB7CisJCWlmIChjaGVja2VkW21kZXYtPnBvcnRdID09IGZhbHNlKSB7CisJCQljaGVja2VkW21kZXYtPnBvcnRdID0gdHJ1ZTsKKwkJCXByaW50ayhLRVJOX0lORk8gIk5vIG1hcGxlIGRldmljZXMgYXR0YWNoZWQiCisJCQkJIiB0byBwb3J0ICVkXG4iLCBtZGV2LT5wb3J0KTsKKwkJfQogCQlyZXR1cm47CiAJfQogCW1hcGxlX2NsZWFuX3N1Ym1hcChtZGV2KTsKQEAgLTQ4NSw4ICs0ODYsMTQgQEAKIAkJCQkgICBjaGFyICpyZWN2YnVmKQogewogCWNoYXIgc3VibWFzazsKLQlpZiAoKCFzdGFydGVkKSB8fCAoc2Nhbm5pbmcgPT0gMikpIHsKLQkJbWFwbGVfYXR0YWNoX2RyaXZlcihtZGV2KTsKKwlpZiAoIXN0YXJ0ZWQgfHwgKHNjYW5uaW5nID09IDIpIHx8ICFmdWxsc2NhbikgeworCQlpZiAoKG1kZXYtPnVuaXQgPT0gMCkgJiYgKGNoZWNrZWRbbWRldi0+cG9ydF0gPT0gZmFsc2UpKSB7CisJCQljaGVja2VkW21kZXYtPnBvcnRdID0gdHJ1ZTsKKwkJCW1hcGxlX2F0dGFjaF9kcml2ZXIobWRldik7CisJCX0gZWxzZSB7CisJCQlpZiAobWRldi0+dW5pdCAhPSAwKQorCQkJCW1hcGxlX2F0dGFjaF9kcml2ZXIobWRldik7CisJCX0KIAkJcmV0dXJuOwogCX0KIAlpZiAobWRldi0+dW5pdCA9PSAwKSB7CkBAIC01MDUsNiArNTEyLDcgQEAKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7CiAJY2hhciAqcmVjdmJ1ZjsKIAllbnVtIG1hcGxlX2NvZGUgY29kZTsKKwlpbnQgaTsKIAogCWlmICghbWFwbGVfZG1hX2RvbmUoKSkKIAkJcmV0dXJuOwpAQCAtNTU3LDYgKzU2NSwxOSBAQAogCQl9IGVsc2UKIAkJCXNjYW5uaW5nID0gMDsKIAorCQlpZiAoIWZ1bGxzY2FuKSB7CisJCQlmdWxsc2NhbiA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUFQTEVfUE9SVFM7IGkrKykgeworCQkJCWlmIChjaGVja2VkW2ldID09IGZhbHNlKSB7CisJCQkJCWZ1bGxzY2FuID0gMDsKKwkJCQkJZGV2ID0gYmFzZXVuaXRzW2ldOworCQkJCQlkZXYtPm1xLT5jb21tYW5kID0KKwkJCQkJCU1BUExFX0NPTU1BTkRfREVWSU5GTzsKKwkJCQkJZGV2LT5tcS0+bGVuZ3RoID0gMDsKKwkJCQkJbWFwbGVfYWRkX3BhY2tldChkZXYtPm1xKTsKKwkJCQl9CisJCQl9CisJCX0KIAkJaWYgKHN0YXJ0ZWQgPT0gMCkKIAkJCXN0YXJ0ZWQgPSAxOwogCX0KQEAgLTY5NCw3ICs3MTUsOSBAQAogCiAJLyogc2V0dXAgbWFwbGUgcG9ydHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFQTEVfUE9SVFM7IGkrKykgeworCQljaGVja2VkW2ldID0gZmFsc2U7CiAJCW1kZXZbaV0gPSBtYXBsZV9hbGxvY19kZXYoaSwgMCk7CisJCWJhc2V1bml0c1tpXSA9IG1kZXZbaV07CiAJCWlmICghbWRldltpXSkgewogCQkJd2hpbGUgKGktLSA+IDApCiAJCQkJbWFwbGVfZnJlZV9kZXYobWRldltpXSk7CkBAIC03MDMsMTIgKzcyNiw5IEBACiAJCW1kZXZbaV0tPm1xLT5jb21tYW5kID0gTUFQTEVfQ09NTUFORF9ERVZJTkZPOwogCQltZGV2W2ldLT5tcS0+bGVuZ3RoID0gMDsKIAkJbWFwbGVfYWRkX3BhY2tldChtZGV2W2ldLT5tcSk7Ci0JCS8qIGRlbGF5IGFpZHMgaGFyZHdhcmUgZGV0ZWN0aW9uICovCi0JCW1kZWxheSg1KTsKIAkJc3ViZGV2aWNlX21hcFtpXSA9IDA7CiAJfQogCi0JcmVhbHNjYW4gPSAxOwogCS8qIHNldHVwIG1hcGxlYnVzIGhhcmR3YXJlICovCiAJbWFwbGVidXNfZG1hX3Jlc2V0KCk7CiAJLyogaW5pdGlhbCBkZXRlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc24vaW9jMy5jIGIvZHJpdmVycy9zbi9pb2MzLmMKaW5kZXggMjlmY2Q2ZC4uYTBhYTMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zbi9pb2MzLmMKKysrIGIvZHJpdmVycy9zbi9pb2MzLmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSAgICAgICAiJXM6IElPQzMgc3VibW9kdWxlICVzIHJlbW92ZSBmYWlsZWQgIgogCQkJCQkgICAgICAgImZvciBwY2lfZGV2ICVzLlxuIiwKLQkJCQkJICAgICAgIF9fRlVOQ1RJT05fXywgbW9kdWxlX25hbWUoaXMtPm93bmVyKSwKKwkJCQkJICAgICAgIF9fZnVuY19fLCBtb2R1bGVfbmFtZShpcy0+b3duZXIpLAogCQkJCQkgICAgICAgcGNpX25hbWUoaWRkLT5wZGV2KSk7CiAJCQlpZGQtPmFjdGl2ZVtpcy0+aWRdID0gMDsKIAkJCWlmKGlzLT5pcnFfbWFzaykKQEAgLTYxMSw3ICs2MTEsNyBAQAogCWlmICgocmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlczogRmFpbGVkIHRvIGVuYWJsZSBJT0MzIGRldmljZSBmb3IgcGNpX2RldiAlcy5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKHBkZXYpKTsKKwkJICAgICAgIF9fZnVuY19fLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gb3V0OwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKQEAgLTYyMyw3ICs2MjMsNyBAQAogICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIG9idGFpbiA2NCBiaXQgRE1BICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIsCi0JCQkJX19GVU5DVElPTl9fKTsKKwkJCQlfX2Z1bmNfXyk7CiAgICAgICAgICAgICAgICAgfQogCX0KICNlbmRpZgpAQCAtNjMzLDcgKzYzMyw3IEBACiAJaWYgKCFpZGQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgSU9DMyBkYXRhIGZvciBwY2lfZGV2ICVzLlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUocGRldikpOworCQkgICAgICAgX19mdW5jX18sIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfaWRkOwogCX0KQEAgLTY0OSw3ICs2NDksNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IFVuYWJsZSB0byBmaW5kIElPQzMgcmVzb3VyY2UgIgogCQkgICAgICAgImZvciBwY2lfZGV2ICVzLlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUocGRldikpOworCQkgICAgICAgX19mdW5jX18sIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcGNpOwogCX0KQEAgLTY1Nyw3ICs2NTcsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IFVuYWJsZSB0byByZXF1ZXN0IElPQzMgcmVnaW9uICIKIAkJICAgICAgICJmb3IgcGNpX2RldiAlcy5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKHBkZXYpKTsKKwkJICAgICAgIF9fZnVuY19fLCBwY2lfbmFtZShwZGV2KSk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3BjaTsKIAl9CkBAIC02NjYsNyArNjY2LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBVbmFibGUgdG8gcmVtYXAgSU9DMyByZWdpb24gIgogCQkgICAgICAgImZvciBwY2lfZGV2ICVzLlxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGNpX25hbWUocGRldikpOworCQkgICAgICAgX19mdW5jX18sIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfbWlzY19yZWdpb247CiAJfQpAQCAtNzA5LDcgKzcwOSw3IEBACiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIiVzIDogcmVxdWVzdF9pcnEgZmFpbHMgZm9yIElSUSAweCV4XG4gIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHBkZXYtPmlycSk7CisJCQkgICAgICAgX19mdW5jX18sIHBkZXYtPmlycSk7CiAJCX0KIAkJaWYgKCFyZXF1ZXN0X2lycShwZGV2LT5pcnErMiwgaW9jM19pbnRyX2lvLCBJUlFGX1NIQVJFRCwKIAkJCQkgImlvYzMtaW8iLCAodm9pZCAqKWlkZCkpIHsKQEAgLTcxNyw3ICs3MTcsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICIlcyA6IHJlcXVlc3RfaXJxIGZhaWxzIGZvciBJUlEgMHgleFxuICIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBwZGV2LT5pcnErMik7CisJCQkgICAgICAgX19mdW5jX18sIHBkZXYtPmlycSsyKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpb2MzX2ludHJfaW8sIElSUUZfU0hBUkVELApAQCAtNzI2LDcgKzcyNiw3IEBACiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIiVzIDogcmVxdWVzdF9pcnEgZmFpbHMgZm9yIElSUSAweCV4XG4gIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHBkZXYtPmlycSk7CisJCQkgICAgICAgX19mdW5jX18sIHBkZXYtPmlycSk7CiAJCX0KIAl9CiAKQEAgLTc2OSw3ICs3NjksNyBAQAogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSAgICAgICAiJXM6IElPQzMgc3VibW9kdWxlIDB4JXMgcmVtb3ZlIGZhaWxlZCAiCiAJCQkJCSAgICAgICAiZm9yIHBjaV9kZXYgJXMuXG4iLAotCQkJCQkgICAgICAgIF9fRlVOQ1RJT05fXywKKwkJCQkJCV9fZnVuY19fLAogCQkJCQkJbW9kdWxlX25hbWUoaW9jM19zdWJtb2R1bGVzW2lkXS0+b3duZXIpLAogCQkJCQkgICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJCWlkZC0+YWN0aXZlW2lkXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCmluZGV4IDI5M2I3Y2EuLjE3NDlhMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCkBAIC04Nyw2ICs4NywxNiBAQAogCXVuc2lnbmVkIGdwaW8gPSAodW5zaWduZWQpIHNwaS0+Y29udHJvbGxlcl9kYXRhOwogCXVuc2lnbmVkIGFjdGl2ZSA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIOwogCXUzMiBtcjsKKwlpbnQgaTsKKwl1MzIgY3NyOworCXUzMiBjcG9sID0gKHNwaS0+bW9kZSAmIFNQSV9DUE9MKSA/IFNQSV9CSVQoQ1BPTCkgOiAwOworCisJLyogTWFrZSBzdXJlIGNsb2NrIHBvbGFyaXR5IGlzIGNvcnJlY3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BpLT5tYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspIHsKKwkJY3NyID0gc3BpX3JlYWRsKGFzLCBDU1IwICsgNCAqIGkpOworCQlpZiAoKGNzciBeIGNwb2wpICYgU1BJX0JJVChDUE9MKSkKKwkJCXNwaV93cml0ZWwoYXMsIENTUjAgKyA0ICogaSwgY3NyIF4gU1BJX0JJVChDUE9MKSk7CisJfQogCiAJbXIgPSBzcGlfcmVhZGwoYXMsIE1SKTsKIAltciA9IFNQSV9CRklOUyhQQ1MsIH4oMSA8PCBzcGktPmNoaXBfc2VsZWN0KSwgbXIpOwpAQCAtODUzLDMgKzg2Myw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkF0bWVsIEFUMzIvQVQ5MSBTUEkgQ29udHJvbGxlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdG1lbF9zcGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYwppbmRleCBjNDdhNjUwLi4wNzJjNGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCkBAIC05OSw3ICs5OSw3IEBACiBzdGF0aWMgdm9pZCBhdTE1NTBfc3BpX2JpdHNfaGFuZGxlcnNfc2V0KHN0cnVjdCBhdTE1NTBfc3BpICpodywgaW50IGJwdyk7CiAKIAotLyoqCisvKgogICogIGNvbXB1dGUgQlJHIGFuZCBESVYgYml0cyB0byBzZXR1cCBzcGkgY2xvY2sgYmFzZWQgb24gbWFpbiBpbnB1dCBjbG9jayByYXRlCiAgKiAgdGhhdCB3YXMgc3BlY2lmaWVkIGluIHBsYXRmb3JtIGRhdGEgc3RydWN0dXJlCiAgKiAgYWNjb3JkaW5nIHRvIGF1MTU1MCBkYXRhc2hlZXQ6CkBAIC02NTAsNyArNjUwLDcgQEAKIAlyZXR1cm4gaHctPnR4cnhfYnVmcyhzcGksIHQpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXUxNTUwX3NwaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCBhdTE1NTBfc3BpX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IGF1MTU1MF9zcGkgKmh3ID0gZGV2OwogCXJldHVybiBody0+aXJxX2NhbGxiYWNrKGh3KTsKQEAgLTk1OCw2ICs5NTgsOSBAQAogCXJldHVybiAwOwogfQogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06YXUxNTUwLXNwaSIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTE1NTBfc3BpX2RydiA9IHsKIAkucmVtb3ZlID0gX19leGl0X3AoYXUxNTUwX3NwaV9yZW1vdmUpLAogCS5kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCmluZGV4IDI1M2VkNTYuLjkwNzI5NDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwpAQCAtNDIsNiArNDIsNyBAQAogCiAJLyogZHJpdmVyIGludGVybmFsIGRhdGEgKi8KIAlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjOworCXN0cnVjdCBtcGM1Mnh4X3BzY19maWZvIF9faW9tZW0gKmZpZm87CiAJdW5zaWduZWQgaW50IGlycTsKIAl1OCBiaXRzX3Blcl93b3JkOwogCXU4IGJ1c3k7CkBAIC0xMzksNiArMTQwLDcgQEAKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9wc2Nfc3BpICptcHMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjID0gbXBzLT5wc2M7CisJc3RydWN0IG1wYzUyeHhfcHNjX2ZpZm8gX19pb21lbSAqZmlmbyA9IG1wcy0+ZmlmbzsKIAl1bnNpZ25lZCByYiA9IDA7CS8qIG51bWJlciBvZiBieXRlcyByZWNlaWV2ZWQgKi8KIAl1bnNpZ25lZCBzYiA9IDA7CS8qIG51bWJlciBvZiBieXRlcyBzZW50ICovCiAJdW5zaWduZWQgY2hhciAqcnhfYnVmID0gKHVuc2lnbmVkIGNoYXIgKil0LT5yeF9idWY7CkBAIC0xOTAsMTEgKzE5MiwxMSBAQAogCQkJb3V0XzgoJnBzYy0+bW9kZSwgMCk7CiAJCX0gZWxzZSB7CiAJCQlvdXRfOCgmcHNjLT5tb2RlLCBNUEM1Mnh4X1BTQ19NT0RFX0ZGVUxMKTsKLQkJCW91dF9iZTE2KCZwc2MtPnJmYWxhcm0sIHJmYWxhcm0pOworCQkJb3V0X2JlMTYoJmZpZm8tPnJmYWxhcm0sIHJmYWxhcm0pOwogCQl9CiAJCW91dF9iZTE2KCZwc2MtPm1wYzUyeHhfcHNjX2ltciwgTVBDNTJ4eF9QU0NfSU1SX1JYUkRZKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmbXBzLT5kb25lKTsKLQkJcmVjdl9hdF9vbmNlID0gaW5fYmUxNigmcHNjLT5yZm51bSk7CisJCXJlY3ZfYXRfb25jZSA9IGluX2JlMTYoJmZpZm8tPnJmbnVtKTsKIAkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBieXRlcyByZWNlaXZlZFxuIiwgcmVjdl9hdF9vbmNlKTsKIAogCQlzZW5kX2F0X29uY2UgPSByZWN2X2F0X29uY2U7CkBAIC0zMzEsNiArMzMzLDcgQEAKIHN0YXRpYyBpbnQgbXBjNTJ4eF9wc2Nfc3BpX3BvcnRfY29uZmlnKGludCBwc2NfaWQsIHN0cnVjdCBtcGM1Mnh4X3BzY19zcGkgKm1wcykKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjID0gbXBzLT5wc2M7CisJc3RydWN0IG1wYzUyeHhfcHNjX2ZpZm8gX19pb21lbSAqZmlmbyA9IG1wcy0+ZmlmbzsKIAl1MzIgbWNsa2VuX2RpdjsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMzQ2LDcgKzM0OSw3IEBACiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLCBpbnRlcnJ1cHRzIGFyZSBiYXNlZCBvbiBhbGFybSBsZXZlbCAqLwogCW91dF9iZTE2KCZwc2MtPm1wYzUyeHhfcHNjX2ltciwgMCk7CiAJb3V0XzgoJnBzYy0+Y29tbWFuZCwgTVBDNTJ4eF9QU0NfU0VMX01PREVfUkVHXzEpOwotCW91dF84KCZwc2MtPnJmY250bCwgMCk7CisJb3V0XzgoJmZpZm8tPnJmY250bCwgMCk7CiAJb3V0XzgoJnBzYy0+bW9kZSwgTVBDNTJ4eF9QU0NfTU9ERV9GRlVMTCk7CiAKIAkvKiBDb25maWd1cmUgOGJpdCBjb2RlYyBtb2RlIGFzIGEgU1BJIG1hc3RlciBhbmQgdXNlIEVPRiBmbGFncyAqLwpAQCAtNDE5LDYgKzQyMiw4IEBACiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZnJlZV9tYXN0ZXI7CiAJfQorCS8qIE9uIHRoZSA1MjAwLCBmaWZvIHJlZ3MgYXJlIGltbWVkaWF0ZWx5IGFqYWNlbnQgdG8gdGhlIHBzYyByZWdzICovCisJbXBzLT5maWZvID0gKCh2b2lkIF9faW9tZW0gKiltcHMtPnBzYykgKyBzaXplb2Yoc3RydWN0IG1wYzUyeHhfcHNjKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKG1wcy0+aXJxLCBtcGM1Mnh4X3BzY19zcGlfaXNyLCAwLCAibXBjNTJ4eC1wc2Mtc3BpIiwKIAkJCQltcHMpOwpAQCAtNDk1LDYgKzUwMCw5IEBACiAJcmV0dXJuIG1wYzUyeHhfcHNjX3NwaV9kb19yZW1vdmUoJmRldi0+ZGV2KTsKIH0KIAorLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1wYzUyeHgtcHNjLXNwaSIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X3BzY19zcGlfcGxhdGZvcm1fZHJpdmVyID0gewogCS5yZW1vdmUgPSBfX2V4aXRfcChtcGM1Mnh4X3BzY19zcGlfcmVtb3ZlKSwKIAkuZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggYTZiYTExYS4uYjFjYzE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0xMDg0LDYgKzEwODQsOSBAQAogCXJldHVybiAwOwogfQogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06b21hcDJfbWNzcGkiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfbWNzcGlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0JCSJvbWFwMl9tY3NwaSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggODI0NWI1MS4uNWYwMGJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtNTM3LDEwICs1MzcsMTIgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06b21hcF91d2lyZSIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1d2lyZV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJCT0gIm9tYXBfdXdpcmUiLAotCQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnJlbW92ZQkJPSBfX2V4aXRfcCh1d2lyZV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCmluZGV4IDM2NWUwZTMuLjE0N2UyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gU3RyZWV0Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBYQTJ4eCBTU1AgU1BJIENvbnRyb2xsZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cHhhMnh4LXNwaSIpOwogCiAjZGVmaW5lIE1BWF9CVVNFUyAzCiAKQEAgLTUxLDEzICs1MiwxOSBAQAogI2RlZmluZSBSRVNFVF9ETUFfQ0hBTk5FTCAoRENTUl9OT0RFU0MgfCBETUFfSU5UX01BU0spCiAjZGVmaW5lIElTX0RNQV9BTElHTkVEKHgpICgoKHUzMikoeCkmMHgwNyk9PTApCiAKLS8qIGZvciB0ZXN0aW5nIFNTQ1IxIGNoYW5nZXMgdGhhdCByZXF1aXJlIFNTUCByZXN0YXJ0LCBiYXNpY2FsbHkKLSAqIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBzZXJ2aWNlIGFuZCBpbnRlcnJ1cHQgZW5hYmxlcyAqLwotI2RlZmluZSBTU0NSMV9DSEFOR0VfTUFTSyAoU1NDUjFfVFRFTFAgfCBTU0NSMV9UVEUgfCBTU0NSMV9FQkNFSSB8IFNTQ1IxX1NDRlIgXAorLyoKKyAqIGZvciB0ZXN0aW5nIFNTQ1IxIGNoYW5nZXMgdGhhdCByZXF1aXJlIFNTUCByZXN0YXJ0LCBiYXNpY2FsbHkKKyAqIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBzZXJ2aWNlIGFuZCBpbnRlcnJ1cHQgZW5hYmxlcywgdGhlIHB4YTI3MCBkZXZlbG9wZXIKKyAqIG1hbnVhbCBzYXlzIG9ubHkgU1NDUjFfU0NGUiwgU1NDUjFfU1BILCBTU0NSMV9TUE8gbmVlZCB0byBiZSBpbiB0aGlzCisgKiBsaXN0LCBidXQgdGhlIFBYQTI1NSBkZXYgbWFuIHNheXMgYWxsIGJpdHMgd2l0aG91dCByZWFsbHkgbWVhbmluZyB0aGUKKyAqIHNlcnZpY2UgYW5kIGludGVycnVwdCBlbmFibGVzCisgKi8KKyNkZWZpbmUgU1NDUjFfQ0hBTkdFX01BU0sgKFNTQ1IxX1RURUxQIHwgU1NDUjFfVFRFIHwgU1NDUjFfU0NGUiBcCiAJCQkJfCBTU0NSMV9FQ1JBIHwgU1NDUjFfRUNSQiB8IFNTQ1IxX1NDTEtESVIgXAotCQkJCXwgU1NDUjFfUldPVCB8IFNTQ1IxX1RSQUlMIHwgU1NDUjFfUElOVEUgXAotCQkJCXwgU1NDUjFfU1RSRiB8IFNTQ1IxX0VGV1IgfFNTQ1IxX1JGVCBcCi0JCQkJfCBTU0NSMV9URlQgfCBTU0NSMV9TUEggfCBTU0NSMV9TUE8gfCBTU0NSMV9MQk0pCisJCQkJfCBTU0NSMV9TRlJNRElSIHwgU1NDUjFfUldPVCB8IFNTQ1IxX1RSQUlMIFwKKwkJCQl8IFNTQ1IxX0lGUyB8IFNTQ1IxX1NUUkYgfCBTU0NSMV9FRldSIFwKKwkJCQl8IFNTQ1IxX1JGVCB8IFNTQ1IxX1RGVCB8IFNTQ1IxX01XRFMgXAorCQkJCXwgU1NDUjFfU1BIIHwgU1NDUjFfU1BPIHwgU1NDUjFfTEJNKQogCiAjZGVmaW5lIERFRklORV9TU1BfUkVHKHJlZywgb2ZmKSBcCiBzdGF0aWMgaW5saW5lIHUzMiByZWFkXyMjcmVnKHZvaWQgKnApIHsgcmV0dXJuIF9fcmF3X3JlYWRsKHAgKyAob2ZmKSk7IH0gXApAQCAtOTczLDkgKzk4MCw2IEBACiAJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgPT0gUFhBMjV4X1NTUCkKIAkJCURDTUQoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpIHw9IERDTURfRU5ESVJRRU47CiAKLQkJLyogRml4IG1lLCBuZWVkIHRvIGhhbmRsZSBjcyBwb2xhcml0eSAqLwotCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfQVNTRVJUKTsKLQogCQkvKiBDbGVhciBzdGF0dXMgYW5kIHN0YXJ0IERNQSBlbmdpbmUgKi8KIAkJY3IxID0gY2hpcC0+Y3IxIHwgZG1hX3RocmVzaCB8IGRydl9kYXRhLT5kbWFfY3IxOwogCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKQEAgLTk4NSw5ICs5ODksNiBAQAogCQkvKiBFbnN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBpbnRlcnJ1cHQgaGFuZGxlcgkqLwogCQlkcnZfZGF0YS0+dHJhbnNmZXJfaGFuZGxlciA9IGludGVycnVwdF90cmFuc2ZlcjsKIAotCQkvKiBGaXggbWUsIG5lZWQgdG8gaGFuZGxlIGNzIHBvbGFyaXR5ICovCi0JCWRydl9kYXRhLT5jc19jb250cm9sKFBYQTJYWF9DU19BU1NFUlQpOwotCiAJCS8qIENsZWFyIHN0YXR1cyAgKi8KIAkJY3IxID0gY2hpcC0+Y3IxIHwgY2hpcC0+dGhyZXNob2xkIHwgZHJ2X2RhdGEtPmludF9jcjE7CiAJCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwpAQCAtOTk4LDE2ICs5OTksMjkgQEAKIAkJfHwgKHJlYWRfU1NDUjEocmVnKSAmIFNTQ1IxX0NIQU5HRV9NQVNLKSAhPQogCQkJKGNyMSAmIFNTQ1IxX0NIQU5HRV9NQVNLKSkgewogCisJCS8qIHN0b3AgdGhlIFNTUCwgYW5kIHVwZGF0ZSB0aGUgb3RoZXIgYml0cyAqLwogCQl3cml0ZV9TU0NSMChjcjAgJiB+U1NDUjBfU1NFLCByZWcpOwogCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCiAJCQl3cml0ZV9TU1RPKGNoaXAtPnRpbWVvdXQsIHJlZyk7Ci0JCXdyaXRlX1NTQ1IxKGNyMSwgcmVnKTsKKwkJLyogZmlyc3Qgc2V0IENSMSB3aXRob3V0IGludGVycnVwdCBhbmQgc2VydmljZSBlbmFibGVzICovCisJCXdyaXRlX1NTQ1IxKGNyMSAmIFNTQ1IxX0NIQU5HRV9NQVNLLCByZWcpOworCQkvKiByZXN0YXJ0IHRoZSBTU1AgKi8KIAkJd3JpdGVfU1NDUjAoY3IwLCByZWcpOworCiAJfSBlbHNlIHsKIAkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQogCQkJd3JpdGVfU1NUTyhjaGlwLT50aW1lb3V0LCByZWcpOwotCQl3cml0ZV9TU0NSMShjcjEsIHJlZyk7CiAJfQorCisJLyogRklYTUUsIG5lZWQgdG8gaGFuZGxlIGNzIHBvbGFyaXR5LAorCSAqIHRoaXMgZHJpdmVyIHVzZXMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcC5jc19jb250cm9sIHRvCisJICogc3BlY2lmeSBhIENTIGhhbmRsaW5nIGZ1bmN0aW9uLCBhbmQgaXQgaWdub3JlcyBtb3N0CisJICogc3RydWN0IHNwaV9kZXZpY2UubW9kZVtzXSwgaW5jbHVkaW5nIFNQSV9DU19ISUdIICovCisJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0FTU0VSVCk7CisKKwkvKiBhZnRlciBjaGlwIHNlbGVjdCwgcmVsZWFzZSB0aGUgZGF0YSBieSBlbmFibGluZyBzZXJ2aWNlCisJICogcmVxdWVzdHMgYW5kIGludGVycnVwdHMsIHdpdGhvdXQgY2hhbmdpbmcgYW55IG1vZGUgYml0cyAqLworCXdyaXRlX1NTQ1IxKGNyMSwgcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgcHVtcF9tZXNzYWdlcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xNTY4LDcgKzE1ODIsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInB4YTJ4eC1zcGkiLAotCQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5yZW1vdmUgPSBweGEyeHhfc3BpX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCmluZGV4IGQ4NTNmY2ViLi5hOWFjMWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKQEAgLTcxMyw4ICs3MTMsOCBAQAogCX0gZWxzZSB7CiAJCWRydl9kYXRhLT5sZW4gPSB0cmFuc2Zlci0+bGVuOwogCX0KLQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAidHJhbnNmZXI6ICIsCi0JCSJkcnZfZGF0YS0+d3JpdGUgaXMgJXAsIGNoaXAtPndyaXRlIGlzICVwLCBudWxsX3dyIGlzICVwXG4iLAorCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCSJ0cmFuc2ZlcjogZHJ2X2RhdGEtPndyaXRlIGlzICVwLCBjaGlwLT53cml0ZSBpcyAlcCwgbnVsbF93ciBpcyAlcFxuIiwKIAkJZHJ2X2RhdGEtPndyaXRlLCBjaGlwLT53cml0ZSwgbnVsbF93cml0ZXIpOwogCiAJLyogc3BlZWQgYW5kIHdpZHRoIGhhcyBiZWVuIHNldCBvbiBwZXIgbWVzc2FnZSAqLwpAQCAtMTI5NCw2ICsxMjk0LDEyIEBACiAJCWdvdG8gb3V0X2Vycm9yX3F1ZXVlX2FsbG9jOwogCX0KIAorCXN0YXR1cyA9IHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KGRydl9kYXRhLT5waW5fcmVxLCBEUlZfTkFNRSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIjogUmVxdWVzdGluZyBQZXJpcGhlcmFscyBmYWlsZWRcbiIpOworCQlnb3RvIG91dF9lcnJvcl9xdWV1ZV9hbGxvYzsKKwl9CisKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSBTUEkgZnJhbWV3b3JrICovCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2X2RhdGEpOwogCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKQEAgLTEzMDIsMTIgKzEzMDgsNiBAQAogCQlnb3RvIG91dF9lcnJvcl9xdWV1ZV9hbGxvYzsKIAl9CiAKLQlzdGF0dXMgPSBwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChkcnZfZGF0YS0+cGluX3JlcSwgRFJWX05BTUUpOwotCWlmIChzdGF0dXMgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICI6IFJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKLQkJZ290byBvdXRfZXJyb3I7Ci0JfQotCiAJZGV2X2luZm8oZGV2LCAiJXMsIFZlcnNpb24gJXMsIHJlZ3NfYmFzZUAlcCwgZG1hIGNoYW5uZWxAJWRcbiIsCiAJCURSVl9ERVNDLCBEUlZfVkVSU0lPTiwgZHJ2X2RhdGEtPnJlZ3NfYmFzZSwKIAkJZHJ2X2RhdGEtPmRtYV9jaGFubmVsKTsKQEAgLTEzMTksNyArMTMxOSw2IEBACiAJaW91bm1hcCgodm9pZCAqKSBkcnZfZGF0YS0+cmVnc19iYXNlKTsKIG91dF9lcnJvcl9pb3JlbWFwOgogb3V0X2Vycm9yX2dldF9yZXM6Ci1vdXRfZXJyb3I6CiAJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKIAogCXJldHVybiBzdGF0dXM7CkBAIC0xMzk3LDcgKzEzOTYsNyBAQAogI2RlZmluZSBiZmluNXh4X3NwaV9yZXN1bWUgTlVMTAogI2VuZGlmCQkJCS8qIENPTkZJR19QTSAqLwogCi1NT0RVTEVfQUxJQVMoImJmaW4tc3BpLW1hc3RlciIpOwkvKiBmb3IgcGxhdGZvcm0gYnVzIGhvdHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06YmZpbi1zcGkiKTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJmaW41eHhfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyCT0gewogCQkubmFtZQk9IERSVl9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYyBiL2RyaXZlcnMvc3BpL3NwaV9iaXRiYW5nLmMKaW5kZXggZjdmODU4MC4uNzFlODgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYml0YmFuZy5jCkBAIC0zNDQsMTIgKzM0NCwxNCBAQAogCQkJCQl0LT5yeF9kbWEgPSB0LT50eF9kbWEgPSAwOwogCQkJCXN0YXR1cyA9IGJpdGJhbmctPnR4cnhfYnVmcyhzcGksIHQpOwogCQkJfQorCQkJaWYgKHN0YXR1cyA+IDApCisJCQkJbS0+YWN0dWFsX2xlbmd0aCArPSBzdGF0dXM7CiAJCQlpZiAoc3RhdHVzICE9IHQtPmxlbikgewotCQkJCWlmIChzdGF0dXMgPiAwKQotCQkJCQlzdGF0dXMgPSAtRU1TR1NJWkU7CisJCQkJLyogYWx3YXlzIHJlcG9ydCBzb21lIGtpbmQgb2YgZXJyb3IgKi8KKwkJCQlpZiAoc3RhdHVzID49IDApCisJCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQltLT5hY3R1YWxfbGVuZ3RoICs9IHN0YXR1czsKIAkJCXN0YXR1cyA9IDA7CiAKIAkJCS8qIHByb3RvY29sIHR3ZWFrcyBiZWZvcmUgbmV4dCB0cmFuc2ZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmluZGV4IDFiMDY0NzEuLmQ0YmE2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKQEAgLTE3MjIsMTAgKzE3MjIsMTIgQEAKICNkZWZpbmUgc3BpX2lteF9yZXN1bWUgTlVMTAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06c3BpX2lteCIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAic3BpX2lteCIsCi0JCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnJlbW92ZSA9IF9fZXhpdF9wKHNwaV9pbXhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCmluZGV4IDA0ZjdjZDkuLmJlMTVhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwpAQCAtNTIzLDExICs1MjMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FMSUFTKCJtcGM4M3h4X3NwaSIpOwkJCS8qIGZvciBwbGF0Zm9ybSBidXMgaG90cGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptcGM4M3h4X3NwaSIpOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBjODN4eF9zcGlfZHJpdmVyID0gewogCS5yZW1vdmUgPSBfX2V4aXRfcChtcGM4M3h4X3NwaV9yZW1vdmUpLAogCS5kcml2ZXIgPSB7Ci0JCSAgIC5uYW1lID0gIm1wYzgzeHhfc3BpIiwKKwkJLm5hbWUgPSAibXBjODN4eF9zcGkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKaW5kZXggNmU4MzRiOGIuLmI3NDc2YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwpAQCAtMTkyLDggKzE5MiwxMSBAQAogCWh3LT5sZW4gPSB0LT5sZW47CiAJaHctPmNvdW50ID0gMDsKIAorCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOworCiAJLyogc2VuZCB0aGUgZmlyc3QgYnl0ZSAqLwogCXdyaXRlYihod190eGJ5dGUoaHcsIDApLCBody0+cmVncyArIFMzQzI0MTBfU1BUREFUKTsKKwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh3LT5kb25lKTsKIAogCXJldHVybiBody0+Y291bnQ7CkBAIC0yMzUsNiArMjM4LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbyAqcGRhdGE7CiAJc3RydWN0IHMzYzI0eHhfc3BpICpodzsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMjUxLDEwICsyNTUsMTAgQEAKIAltZW1zZXQoaHcsIDAsIHNpemVvZihzdHJ1Y3QgczNjMjR4eF9zcGkpKTsKIAogCWh3LT5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOwotCWh3LT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWh3LT5wZGF0YSA9IHBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaHctPmRldiA9ICZwZGV2LT5kZXY7CiAKLQlpZiAoaHctPnBkYXRhID09IE5VTEwpIHsKKwlpZiAocGRhdGEgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBlcnJfbm9fcGRhdGE7CkBAIC0yNjMsNiArMjY3LDEwIEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOwogCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOwogCisJLyogc2V0dXAgdGhlIG1hc3RlciBzdGF0ZS4gKi8KKworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBody0+cGRhdGEtPm51bV9jczsKKwogCS8qIHNldHVwIHRoZSBzdGF0ZSBmb3IgdGhlIGJpdGJhbmcgZHJpdmVyICovCiAKIAlody0+Yml0YmFuZy5tYXN0ZXIgICAgICAgICA9IGh3LT5tYXN0ZXI7CkBAIC0zMzAsMTMgKzMzOCwxMyBAQAogCiAJLyogc2V0dXAgYW55IGdwaW8gd2UgY2FuICovCiAKLQlpZiAoIWh3LT5wZGF0YS0+c2V0X2NzKSB7CisJaWYgKCFwZGF0YS0+c2V0X2NzKSB7CiAJCWh3LT5zZXRfY3MgPSBzM2MyNHh4X3NwaV9ncGlvY3M7CiAKLQkJczNjMjQxMF9ncGlvX3NldHBpbihody0+cGRhdGEtPnBpbl9jcywgMSk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oaHctPnBkYXRhLT5waW5fY3MsIFMzQzI0MTBfR1BJT19PVVRQVVQpOworCQlzM2MyNDEwX2dwaW9fc2V0cGluKHBkYXRhLT5waW5fY3MsIDEpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBkYXRhLT5waW5fY3MsIFMzQzI0MTBfR1BJT19PVVRQVVQpOwogCX0gZWxzZQotCQlody0+c2V0X2NzID0gaHctPnBkYXRhLT5zZXRfY3M7CisJCWh3LT5zZXRfY3MgPSBwZGF0YS0+c2V0X2NzOwogCiAJLyogcmVnaXN0ZXIgb3VyIHNwaSBjb250cm9sbGVyICovCiAKQEAgLTQxNSw3ICs0MjMsNyBAQAogI2RlZmluZSBzM2MyNHh4X3NwaV9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1NT0RVTEVfQUxJQVMoInMzYzI0MTBfc3BpIik7CQkJLyogZm9yIHBsYXRmb3JtIGJ1cyBob3RwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0MTAtc3BpIik7CiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNHh4X3NwaWRydiA9IHsKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHMzYzI0eHhfc3BpX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBzM2MyNHh4X3NwaV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZ3Bpby5jCmluZGV4IDgyYWU3ZDcuLmUzM2Y2MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2dwaW8uYworKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9ncGlvLmMKQEAgLTE2OCw2ICsxNjgsOCBAQAogI2RlZmluZSBzM2MyNDEwX3NwaWdwaW9fc3VzcGVuZCBOVUxMCiAjZGVmaW5lIHMzYzI0MTBfc3BpZ3Bpb19yZXN1bWUgTlVMTAogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06c3BpX3MzYzI0eHhfZ3BpbyIpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX3NwaWdwaW9fZHJ2ID0gewogCS5wcm9iZQkJPSBzM2MyNDEwX3NwaWdwaW9fcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc2hfc2NpLmMgYi9kcml2ZXJzL3NwaS9zcGlfc2hfc2NpLmMKaW5kZXggM2RiZTcxYi4uN2QzNjcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3NoX3NjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zaF9zY2kuYwpAQCAtMjAzLDMgKzIwMyw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNIIFNDSSBTUEkgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYWdudXMgRGFtbSA8ZGFtbUBvcGVuc291cmNlLnNlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzcGlfc2hfc2NpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jIGIvZHJpdmVycy9zcGkvc3BpX3R4eDkuYwppbmRleCAzNjNhYzhlLi4yMjk2ZjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKQEAgLTQ1MCw2ICs0NTAsOSBAQAogCXJldHVybiAwOwogfQogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06c3BpX3R4eDkiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHh4OXNwaV9kcml2ZXIgPSB7CiAJLnJlbW92ZSA9IF9fZXhpdF9wKHR4eDlzcGlfcmVtb3ZlKSwKIAkuZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCmluZGV4IDVkMDRmNTIuLmNmNmFlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKQEAgLTQwOCw2ICs0MDgsOSBAQAogCXJldHVybiAwOwogfQogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBYSUxJTlhfU1BJX05BTUUpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4aWxpbnhfc3BpX2RyaXZlciA9IHsKIAkucHJvYmUJPSB4aWxpbnhfc3BpX3Byb2JlLAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcCh4aWxpbnhfc3BpX3JlbW92ZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9LY29uZmlnIGIvZHJpdmVycy9zc2IvS2NvbmZpZwppbmRleCBkOTc2NjYwYy4uY2Q4NDViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3NzYi9LY29uZmlnCkBAIC0yMCw2ICsyMCwxNSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCisjIENvbW1vbiBTUFJPTSBzdXBwb3J0IHJvdXRpbmVzCitjb25maWcgU1NCX1NQUk9NCisJYm9vbAorCisjIFN1cHBvcnQgZm9yIEJsb2NrLUkvTy4gU0VMRUNUIHRoaXMgZnJvbSB0aGUgZHJpdmVyIHRoYXQgbmVlZHMgaXQuCitjb25maWcgU1NCX0JMT0NLSU8KKwlib29sCisJZGVwZW5kcyBvbiBTU0IKKwogY29uZmlnIFNTQl9QQ0lIT1NUX1BPU1NJQkxFCiAJYm9vbAogCWRlcGVuZHMgb24gU1NCICYmIChQQ0kgPSB5IHx8IFBDSSA9IFNTQikKQEAgLTI4LDYgKzM3LDcgQEAKIGNvbmZpZyBTU0JfUENJSE9TVAogCWJvb2wgIlN1cHBvcnQgZm9yIFNTQiBvbiBQQ0ktYnVzIGhvc3QiCiAJZGVwZW5kcyBvbiBTU0JfUENJSE9TVF9QT1NTSUJMRQorCXNlbGVjdCBTU0JfU1BST00KIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTdXBwb3J0IGZvciBhIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZSBvbiB0b3AKQEAgLTM1LDYgKzQ1LDExIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkKIAorY29uZmlnIFNTQl9CNDNfUENJX0JSSURHRQorCWJvb2wKKwlkZXBlbmRzIG9uIFNTQl9QQ0lIT1NUCisJZGVmYXVsdCBuCisKIGNvbmZpZyBTU0JfUENNQ0lBSE9TVF9QT1NTSUJMRQogCWJvb2wKIAlkZXBlbmRzIG9uIFNTQiAmJiAoUENNQ0lBID0geSB8fCBQQ01DSUEgPSBTU0IpICYmIEVYUEVSSU1FTlRBTApAQCAtNDMsNiArNTgsNyBAQAogY29uZmlnIFNTQl9QQ01DSUFIT1NUCiAJYm9vbCAiU3VwcG9ydCBmb3IgU1NCIG9uIFBDTUNJQS1idXMgaG9zdCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFCisJc2VsZWN0IFNTQl9TUFJPTQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGEgU29uaWNzIFNpbGljb24gQmFja3BsYW5lIG9uIHRvcAogCSAgb2YgYSBQQ01DSUEgZGV2aWNlLgpAQCAtMTA1LDYgKzEyMSwxMiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOCiAKKyMgQXNzdW1wdGlvbjogV2UgYXJlIG9uIGVtYmVkZGVkLCBpZiB3ZSBjb21waWxlIHRoZSBNSVBTIGNvcmUuCitjb25maWcgU1NCX0VNQkVEREVECisJYm9vbAorCWRlcGVuZHMgb24gU1NCX0RSSVZFUl9NSVBTCisJZGVmYXVsdCB5CisKIGNvbmZpZyBTU0JfRFJJVkVSX0VYVElGCiAJYm9vbCAiU1NCIEJyb2FkY29tIEVYVElGIGNvcmUgZHJpdmVyIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU1NCX0RSSVZFUl9NSVBTICYmIEVYUEVSSU1FTlRBTApAQCAtMTE0LDQgKzEzNiwxMyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOCiAKK2NvbmZpZyBTU0JfRFJJVkVSX0dJR0UKKwlib29sICJTU0IgQnJvYWRjb20gR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBTU0JfUENJSE9TVF9QT1NTSUJMRSAmJiBTU0JfRU1CRURERUQgJiYgTUlQUworCWhlbHAKKwkgIERyaXZlciBmb3IgdGhlIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZSBhdHRhY2hlZAorCSAgQnJvYWRjb20gR2lnYWJpdCBFdGhlcm5ldC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9NYWtlZmlsZSBiL2RyaXZlcnMvc3NiL01ha2VmaWxlCmluZGV4IDdiZTM5NzUuLjZmMjU1ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3NiL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAogIyBjb3JlCiBzc2IteQkJCQkJKz0gbWFpbi5vIHNjYW4ubworc3NiLSQoQ09ORklHX1NTQl9FTUJFRERFRCkJCSs9IGVtYmVkZGVkLm8KK3NzYi0kKENPTkZJR19TU0JfU1BST00pCQkJKz0gc3Byb20ubwogCiAjIGhvc3Qgc3VwcG9ydAogc3NiLSQoQ09ORklHX1NTQl9QQ0lIT1NUKQkJKz0gcGNpLm8gcGNpaG9zdF93cmFwcGVyLm8KQEAgLTEwLDkgKzEyLDEwIEBACiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9NSVBTKQkJKz0gZHJpdmVyX21pcHNjb3JlLm8KIHNzYi0kKENPTkZJR19TU0JfRFJJVkVSX0VYVElGKQkJKz0gZHJpdmVyX2V4dGlmLm8KIHNzYi0kKENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUpCSs9IGRyaXZlcl9wY2ljb3JlLm8KK3NzYi0kKENPTkZJR19TU0JfRFJJVkVSX0dJR0UpCQkrPSBkcml2ZXJfZ2lnZS5vCiAKICMgYjQzIHBjaS1zc2ItYnJpZGdlIGRyaXZlcgogIyBOb3Qgc3RyaWN0bHkgYSBwYXJ0IG9mIFNTQiwgYnV0IGtlcHQgaGVyZSBmb3IgY29udmVuaWVuY2UKLXNzYi0kKENPTkZJR19TU0JfUENJSE9TVCkJCSs9IGI0M19wY2lfYnJpZGdlLm8KK3NzYi0kKENPTkZJR19TU0JfQjQzX1BDSV9CUklER0UpCSs9IGI0M19wY2lfYnJpZGdlLm8KIAogb2JqLSQoQ09ORklHX1NTQikJCQkrPSBzc2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKaW5kZXggNmZiZjFjNS4uNTcxZjRmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCkBAIC0zOSwxMiArMzksMTQgQEAKIAlzc2Jfd3JpdGUzMihjYy0+ZGV2LCBvZmZzZXQsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNoaXBjb193cml0ZTMyX21hc2tlZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MTYgb2Zmc2V0LAotCQkJCQkgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdTMyIGNoaXBjb193cml0ZTMyX21hc2tlZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MTYgb2Zmc2V0LAorCQkJCQl1MzIgbWFzaywgdTMyIHZhbHVlKQogewogCXZhbHVlICY9IG1hc2s7CiAJdmFsdWUgfD0gY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KSAmIH5tYXNrOwogCWNoaXBjb193cml0ZTMyKGNjLCBvZmZzZXQsIHZhbHVlKTsKKworCXJldHVybiB2YWx1ZTsKIH0KIAogdm9pZCBzc2JfY2hpcGNvX3NldF9jbG9ja21vZGUoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKQEAgLTI0OSw3ICsyNTEsNyBAQAogCWNhbGNfZmFzdF9wb3dlcnVwX2RlbGF5KGNjKTsKIH0KIAotdm9pZCBzc2JfY2hpcGNvX3N1c3BlbmQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgcG1fbWVzc2FnZV90IHN0YXRlKQordm9pZCBzc2JfY2hpcGNvX3N1c3BlbmQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKIHsKIAlpZiAoIWNjLT5kZXYpCiAJCXJldHVybjsKQEAgLTM1MSwxOSArMzUzLDQ0IEBACiAJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fV0FUQ0hET0csIHRpY2tzKTsKIH0KIAordm9pZCBzc2JfY2hpcGNvX2lycV9tYXNrKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJY2hpcGNvX3dyaXRlMzJfbWFza2VkKGNjLCBTU0JfQ0hJUENPX0lSUU1BU0ssIG1hc2ssIHZhbHVlKTsKK30KKwordTMyIHNzYl9jaGlwY29faXJxX3N0YXR1cyhzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19JUlFTVEFUKSAmIG1hc2s7Cit9CisKIHUzMiBzc2JfY2hpcGNvX2dwaW9faW4oc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2spCiB7CiAJcmV0dXJuIGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fR1BJT0lOKSAmIG1hc2s7CiB9CiAKLXZvaWQgc3NiX2NoaXBjb19ncGlvX291dChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQordTMyIHNzYl9jaGlwY29fZ3Bpb19vdXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKIHsKLQljaGlwY29fd3JpdGUzMl9tYXNrZWQoY2MsIFNTQl9DSElQQ09fR1BJT09VVCwgbWFzaywgdmFsdWUpOworCXJldHVybiBjaGlwY29fd3JpdGUzMl9tYXNrZWQoY2MsIFNTQl9DSElQQ09fR1BJT09VVCwgbWFzaywgdmFsdWUpOwogfQogCi12b2lkIHNzYl9jaGlwY29fZ3Bpb19vdXRlbihzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQordTMyIHNzYl9jaGlwY29fZ3Bpb19vdXRlbihzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQogewotCWNoaXBjb193cml0ZTMyX21hc2tlZChjYywgU1NCX0NISVBDT19HUElPT1VURU4sIG1hc2ssIHZhbHVlKTsKKwlyZXR1cm4gY2hpcGNvX3dyaXRlMzJfbWFza2VkKGNjLCBTU0JfQ0hJUENPX0dQSU9PVVRFTiwgbWFzaywgdmFsdWUpOworfQorCit1MzIgc3NiX2NoaXBjb19ncGlvX2NvbnRyb2woc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gY2hpcGNvX3dyaXRlMzJfbWFza2VkKGNjLCBTU0JfQ0hJUENPX0dQSU9DVEwsIG1hc2ssIHZhbHVlKTsKK30KKwordTMyIHNzYl9jaGlwY29fZ3Bpb19pbnRtYXNrKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJcmV0dXJuIGNoaXBjb193cml0ZTMyX21hc2tlZChjYywgU1NCX0NISVBDT19HUElPSVJRLCBtYXNrLCB2YWx1ZSk7Cit9CisKK3UzMiBzc2JfY2hpcGNvX2dwaW9fcG9sYXJpdHkoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gY2hpcGNvX3dyaXRlMzJfbWFza2VkKGNjLCBTU0JfQ0hJUENPX0dQSU9QT0wsIG1hc2ssIHZhbHVlKTsKIH0KIAogI2lmZGVmIENPTkZJR19TU0JfU0VSSUFMCkBAIC0zNzYsNiArNDAzLDcgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXUzMiBiYXVkX2Jhc2UsIGRpdjsKIAl1MzIgaSwgbjsKKwl1bnNpZ25lZCBpbnQgY2NyZXYgPSBjYy0+ZGV2LT5pZC5yZXZpc2lvbjsKIAogCXBsbHR5cGUgPSAoY2MtPmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BMTFQpOwogCWlycSA9IHNzYl9taXBzX2lycShjYy0+ZGV2KTsKQEAgLTM4NywxNCArNDE1LDM5IEBACiAJCQkJCQljaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMT0NLX00yKSk7CiAJCWRpdiA9IDE7CiAJfSBlbHNlIHsKLQkJaWYgKGNjLT5kZXYtPmlkLnJldmlzaW9uID49IDExKSB7Ci0JCQkvKiBGaXhlZCBBTFAgY2xvY2sgKi8KLQkJCWJhdWRfYmFzZSA9IDIwMDAwMDAwOwotCQkJZGl2ID0gMTsKKwkJaWYgKGNjcmV2ID09IDIwKSB7CisJCQkvKiBCQ001MzU0IHVzZXMgY29uc3RhbnQgMjVNSHogY2xvY2sgKi8KKwkJCWJhdWRfYmFzZSA9IDI1MDAwMDAwOworCQkJZGl2ID0gNDg7CiAJCQkvKiBTZXQgdGhlIG92ZXJyaWRlIGJpdCBzbyB3ZSBkb24ndCBkaXZpZGUgaXQgKi8KIAkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX0NPUkVDVEwsCi0JCQkJICAgICAgIFNTQl9DSElQQ09fQ09SRUNUTF9VQVJUQ0xLMCk7Ci0JCX0gZWxzZSBpZiAoY2MtPmRldi0+aWQucmV2aXNpb24gPj0gMykgeworCQkJCSAgICAgICBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NPUkVDVEwpCisJCQkJICAgICAgIHwgU1NCX0NISVBDT19DT1JFQ1RMX1VBUlRDTEswKTsKKwkJfSBlbHNlIGlmICgoY2NyZXYgPj0gMTEpICYmIChjY3JldiAhPSAxNSkpIHsKKwkJCS8qIEZpeGVkIEFMUCBjbG9jayAqLworCQkJYmF1ZF9iYXNlID0gMjAwMDAwMDA7CisJCQlpZiAoY2MtPmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BNVSkgeworCQkJCS8qIEZJWE1FOiBiYXVkX2Jhc2UgaXMgZGlmZmVyZW50IGZvciBkZXZpY2VzIHdpdGggYSBQTVUgKi8KKwkJCQlTU0JfV0FSTl9PTigxKTsKKwkJCX0KKwkJCWRpdiA9IDE7CisJCQlpZiAoY2NyZXYgPj0gMjEpIHsKKwkJCQkvKiBUdXJuIG9mZiBVQVJUIGNsb2NrIGJlZm9yZSBzd2l0Y2hpbmcgY2xvY2tzb3VyY2UuICovCisJCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fQ09SRUNUTCwKKwkJCQkJICAgICAgIGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ09SRUNUTCkKKwkJCQkJICAgICAgICYgflNTQl9DSElQQ09fQ09SRUNUTF9VQVJUQ0xLRU4pOworCQkJfQorCQkJLyogU2V0IHRoZSBvdmVycmlkZSBiaXQgc28gd2UgZG9uJ3QgZGl2aWRlIGl0ICovCisJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19DT1JFQ1RMLAorCQkJCSAgICAgICBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NPUkVDVEwpCisJCQkJICAgICAgIHwgU1NCX0NISVBDT19DT1JFQ1RMX1VBUlRDTEswKTsKKwkJCWlmIChjY3JldiA+PSAyMSkgeworCQkJCS8qIFJlLWVuYWJsZSB0aGUgVUFSVCBjbG9jay4gKi8KKwkJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19DT1JFQ1RMLAorCQkJCQkgICAgICAgY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DT1JFQ1RMKQorCQkJCQkgICAgICAgfCBTU0JfQ0hJUENPX0NPUkVDVExfVUFSVENMS0VOKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChjY3JldiA+PSAzKSB7CiAJCQkvKiBJbnRlcm5hbCBiYWNrcGxhbmUgY2xvY2sgKi8KIAkJCWJhdWRfYmFzZSA9IHNzYl9jbG9ja3NwZWVkKGJ1cyk7CiAJCQlkaXYgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0RJVikKQEAgLTQwNiw3ICs0NTksNyBAQAogCQl9CiAKIAkJLyogQ2xvY2sgc291cmNlIGRlcGVuZHMgb24gc3RyYXBwaW5nIGlmIFVhcnRDbGtPdmVycmlkZSBpcyB1bnNldCAqLwotCQlpZiAoKGNjLT5kZXYtPmlkLnJldmlzaW9uID4gMCkgJiYKKwkJaWYgKChjY3JldiA+IDApICYmCiAJCSAgICAhKGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ09SRUNUTCkgJiBTU0JfQ0hJUENPX0NPUkVDVExfVUFSVENMSzApKSB7CiAJCQlpZiAoKGNjLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9VQVJUQ0xLKSA9PQogCQkJICAgIFNTQl9DSElQQ09fQ0FQX1VBUlRDTEtfSU5UKSB7CkBAIC00MjgsNyArNDgxLDcgQEAKIAkJY2NfbW1pbyA9IGNjLT5kZXYtPmJ1cy0+bW1pbyArIChjYy0+ZGV2LT5jb3JlX2luZGV4ICogU1NCX0NPUkVfU0laRSk7CiAJCXVhcnRfcmVncyA9IGNjX21taW8gKyBTU0JfQ0hJUENPX1VBUlQwX0RBVEE7CiAJCS8qIE9mZnNldCBjaGFuZ2VkIGF0IGFmdGVyIHJldiAwICovCi0JCWlmIChjYy0+ZGV2LT5pZC5yZXZpc2lvbiA9PSAwKQorCQlpZiAoY2NyZXYgPT0gMCkKIAkJCXVhcnRfcmVncyArPSAoaSAqIDgpOwogCQllbHNlCiAJCQl1YXJ0X3JlZ3MgKz0gKGkgKiAyNTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2V4dGlmLmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfZXh0aWYuYwppbmRleCBmZTU1ZWI4Li5jM2UxZDNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2V4dGlmLmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2V4dGlmLmMKQEAgLTI3LDEyICsyNywxNCBAQAogCXNzYl93cml0ZTMyKGV4dGlmLT5kZXYsIG9mZnNldCwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZXh0aWZfd3JpdGUzMl9tYXNrZWQoc3RydWN0IHNzYl9leHRpZiAqZXh0aWYsIHUxNiBvZmZzZXQsCi0JCQkJCXUzMiBtYXNrLCB1MzIgdmFsdWUpCitzdGF0aWMgaW5saW5lIHUzMiBleHRpZl93cml0ZTMyX21hc2tlZChzdHJ1Y3Qgc3NiX2V4dGlmICpleHRpZiwgdTE2IG9mZnNldCwKKwkJCQkgICAgICAgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKIHsKIAl2YWx1ZSAmPSBtYXNrOwogCXZhbHVlIHw9IGV4dGlmX3JlYWQzMihleHRpZiwgb2Zmc2V0KSAmIH5tYXNrOwogCWV4dGlmX3dyaXRlMzIoZXh0aWYsIG9mZnNldCwgdmFsdWUpOworCisJcmV0dXJuIHZhbHVlOwogfQogCiAjaWZkZWYgQ09ORklHX1NTQl9TRVJJQUwKQEAgLTExMCwyMCArMTEyLDM1IEBACiAJKm0gPSBleHRpZl9yZWFkMzIoZXh0aWYsIFNTQl9FWFRJRl9DTE9DS19TQik7CiB9CiAKK3ZvaWQgc3NiX2V4dGlmX3dhdGNoZG9nX3RpbWVyX3NldChzdHJ1Y3Qgc3NiX2V4dGlmICpleHRpZiwKKwkJCQkgIHUzMiB0aWNrcykKK3sKKwlleHRpZl93cml0ZTMyKGV4dGlmLCBTU0JfRVhUSUZfV0FUQ0hET0csIHRpY2tzKTsKK30KKwogdTMyIHNzYl9leHRpZl9ncGlvX2luKHN0cnVjdCBzc2JfZXh0aWYgKmV4dGlmLCB1MzIgbWFzaykKIHsKIAlyZXR1cm4gZXh0aWZfcmVhZDMyKGV4dGlmLCBTU0JfRVhUSUZfR1BJT19JTikgJiBtYXNrOwogfQogCi12b2lkIHNzYl9leHRpZl9ncGlvX291dChzdHJ1Y3Qgc3NiX2V4dGlmICpleHRpZiwgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3UzMiBzc2JfZXh0aWZfZ3Bpb19vdXQoc3RydWN0IHNzYl9leHRpZiAqZXh0aWYsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCiB7CiAJcmV0dXJuIGV4dGlmX3dyaXRlMzJfbWFza2VkKGV4dGlmLCBTU0JfRVhUSUZfR1BJT19PVVQoMCksCiAJCQkJICAgbWFzaywgdmFsdWUpOwogfQogCi12b2lkIHNzYl9leHRpZl9ncGlvX291dGVuKHN0cnVjdCBzc2JfZXh0aWYgKmV4dGlmLCB1MzIgbWFzaywgdTMyIHZhbHVlKQordTMyIHNzYl9leHRpZl9ncGlvX291dGVuKHN0cnVjdCBzc2JfZXh0aWYgKmV4dGlmLCB1MzIgbWFzaywgdTMyIHZhbHVlKQogewogCXJldHVybiBleHRpZl93cml0ZTMyX21hc2tlZChleHRpZiwgU1NCX0VYVElGX0dQSU9fT1VURU4oMCksCiAJCQkJICAgbWFzaywgdmFsdWUpOwogfQogCit1MzIgc3NiX2V4dGlmX2dwaW9fcG9sYXJpdHkoc3RydWN0IHNzYl9leHRpZiAqZXh0aWYsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJcmV0dXJuIGV4dGlmX3dyaXRlMzJfbWFza2VkKGV4dGlmLCBTU0JfRVhUSUZfR1BJT19JTlRQT0wsIG1hc2ssIHZhbHVlKTsKK30KKwordTMyIHNzYl9leHRpZl9ncGlvX2ludG1hc2soc3RydWN0IHNzYl9leHRpZiAqZXh0aWYsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJcmV0dXJuIGV4dGlmX3dyaXRlMzJfbWFza2VkKGV4dGlmLCBTU0JfRVhUSUZfR1BJT19JTlRNQVNLLCBtYXNrLCB2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfZ2lnZS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2dpZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzJmOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2dpZ2UuYwpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorICogQnJvYWRjb20gR2lnYWJpdCBFdGhlcm5ldCBjb3JlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IDIwMDgsIE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiLmg+CisjaW5jbHVkZSA8bGludXgvc3NiL3NzYl9kcml2ZXJfZ2lnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9yZWdzLmg+CisKKworLyoKK01PRFVMRV9ERVNDUklQVElPTigiU1NCIEJyb2FkY29tIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEJ1ZXNjaCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzc2JfZGV2aWNlX2lkIHNzYl9naWdlX3RibFtdID0geworCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl9FVEhFUk5FVF9HQklULCBTU0JfQU5ZX1JFViksCisJU1NCX0RFVlRBQkxFX0VORAorfTsKKy8qIE1PRFVMRV9ERVZJQ0VfVEFCTEUoc3NiLCBzc2JfZ2lnZV90YmwpOyAqLworCisKK3N0YXRpYyBpbmxpbmUgdTggZ2lnZV9yZWFkOChzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiwgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gc3NiX3JlYWQ4KGRldi0+ZGV2LCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBnaWdlX3JlYWQxNihzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiwgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gc3NiX3JlYWQxNihkZXYtPmRldiwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZ2lnZV9yZWFkMzIoc3RydWN0IHNzYl9naWdlICpkZXYsIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIHNzYl9yZWFkMzIoZGV2LT5kZXYsIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnaWdlX3dyaXRlOChzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiwKKwkJCSAgICAgICB1MTYgb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlzc2Jfd3JpdGU4KGRldi0+ZGV2LCBvZmZzZXQsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdpZ2Vfd3JpdGUxNihzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiwKKwkJCQl1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCit7CisJc3NiX3dyaXRlMTYoZGV2LT5kZXYsIG9mZnNldCwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2lnZV93cml0ZTMyKHN0cnVjdCBzc2JfZ2lnZSAqZGV2LAorCQkJCXUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwlzc2Jfd3JpdGUzMihkZXYtPmRldiwgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3U4IGdpZ2VfcGNpY2ZnX3JlYWQ4KHN0cnVjdCBzc2JfZ2lnZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCUJVR19PTihvZmZzZXQgPj0gMjU2KTsKKwlyZXR1cm4gZ2lnZV9yZWFkOChkZXYsIFNTQl9HSUdFX1BDSUNGRyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3UxNiBnaWdlX3BjaWNmZ19yZWFkMTYoc3RydWN0IHNzYl9naWdlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJQlVHX09OKG9mZnNldCA+PSAyNTYpOworCXJldHVybiBnaWdlX3JlYWQxNihkZXYsIFNTQl9HSUdFX1BDSUNGRyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3UzMiBnaWdlX3BjaWNmZ19yZWFkMzIoc3RydWN0IHNzYl9naWdlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJQlVHX09OKG9mZnNldCA+PSAyNTYpOworCXJldHVybiBnaWdlX3JlYWQzMihkZXYsIFNTQl9HSUdFX1BDSUNGRyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZ2lnZV9wY2ljZmdfd3JpdGU4KHN0cnVjdCBzc2JfZ2lnZSAqZGV2LAorCQkJdW5zaWduZWQgaW50IG9mZnNldCwgdTggdmFsdWUpCit7CisJQlVHX09OKG9mZnNldCA+PSAyNTYpOworCWdpZ2Vfd3JpdGU4KGRldiwgU1NCX0dJR0VfUENJQ0ZHICsgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZ2lnZV9wY2ljZmdfd3JpdGUxNihzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiwKKwkJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MTYgdmFsdWUpCit7CisJQlVHX09OKG9mZnNldCA+PSAyNTYpOworCWdpZ2Vfd3JpdGUxNihkZXYsIFNTQl9HSUdFX1BDSUNGRyArIG9mZnNldCwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGdpZ2VfcGNpY2ZnX3dyaXRlMzIoc3RydWN0IHNzYl9naWdlICpkZXYsCisJCQkgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHZhbHVlKQoreworCUJVR19PTihvZmZzZXQgPj0gMjU2KTsKKwlnaWdlX3dyaXRlMzIoZGV2LCBTU0JfR0lHRV9QQ0lDRkcgKyBvZmZzZXQsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBzc2JfZ2lnZV9wY2lfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgICBpbnQgcmVnLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJc3RydWN0IHNzYl9naWdlICpkZXYgPSBjb250YWluZXJfb2YoYnVzLT5vcHMsIHN0cnVjdCBzc2JfZ2lnZSwgcGNpX29wcyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgoUENJX1NMT1QoZGV2Zm4pID4gMCkgfHwgKFBDSV9GVU5DKGRldmZuKSA+IDApKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCWlmIChyZWcgPj0gMjU2KQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJKnZhbCA9IGdpZ2VfcGNpY2ZnX3JlYWQ4KGRldiwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdmFsID0gZ2lnZV9wY2ljZmdfcmVhZDE2KGRldiwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqdmFsID0gZ2lnZV9wY2ljZmdfcmVhZDMyKGRldiwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHNzYl9naWdlX3BjaV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgICAgaW50IHJlZywgaW50IHNpemUsIHUzMiB2YWwpCit7CisJc3RydWN0IHNzYl9naWdlICpkZXYgPSBjb250YWluZXJfb2YoYnVzLT5vcHMsIHN0cnVjdCBzc2JfZ2lnZSwgcGNpX29wcyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgoUENJX1NMT1QoZGV2Zm4pID4gMCkgfHwgKFBDSV9GVU5DKGRldmZuKSA+IDApKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCWlmIChyZWcgPj0gMjU2KQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJZ2lnZV9wY2ljZmdfd3JpdGU4KGRldiwgcmVnLCB2YWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCWdpZ2VfcGNpY2ZnX3dyaXRlMTYoZGV2LCByZWcsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZ2lnZV9wY2ljZmdfd3JpdGUzMihkZXYsIHJlZywgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHNzYl9naWdlX3Byb2JlKHN0cnVjdCBzc2JfZGV2aWNlICpzZGV2LCBjb25zdCBzdHJ1Y3Qgc3NiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNzYl9naWdlICpkZXY7CisJdTMyIGJhc2UsIHRtc2xvdywgdG1zaGlnaDsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2LT5kZXYgPSBzZGV2OworCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJZGV2LT5wY2lfY29udHJvbGxlci5wY2lfb3BzID0gJmRldi0+cGNpX29wczsKKwlkZXYtPnBjaV9jb250cm9sbGVyLmlvX3Jlc291cmNlID0gJmRldi0+aW9fcmVzb3VyY2U7CisJZGV2LT5wY2lfY29udHJvbGxlci5tZW1fcmVzb3VyY2UgPSAmZGV2LT5tZW1fcmVzb3VyY2U7CisJZGV2LT5wY2lfY29udHJvbGxlci5pb19tYXBfYmFzZSA9IDB4ODAwOworCWRldi0+cGNpX29wcy5yZWFkID0gc3NiX2dpZ2VfcGNpX3JlYWRfY29uZmlnOworCWRldi0+cGNpX29wcy53cml0ZSA9IHNzYl9naWdlX3BjaV93cml0ZV9jb25maWc7CisKKwlkZXYtPmlvX3Jlc291cmNlLm5hbWUgPSBTU0JfR0lHRV9JT19SRVNfTkFNRTsKKwlkZXYtPmlvX3Jlc291cmNlLnN0YXJ0ID0gMHg4MDA7CisJZGV2LT5pb19yZXNvdXJjZS5lbmQgPSAweDhGRjsKKwlkZXYtPmlvX3Jlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfUENJX0ZJWEVEOworCisJaWYgKCFzc2JfZGV2aWNlX2lzX2VuYWJsZWQoc2RldikpCisJCXNzYl9kZXZpY2VfZW5hYmxlKHNkZXYsIDApOworCisJLyogU2V0dXAgQkFSMC4gVGhpcyBpcyBhIDY0ayBNTUlPIHJlZ2lvbi4gKi8KKwliYXNlID0gc3NiX2FkbWF0Y2hfYmFzZShzc2JfcmVhZDMyKHNkZXYsIFNTQl9BRE1BVENIMSkpOworCWdpZ2VfcGNpY2ZnX3dyaXRlMzIoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsIGJhc2UpOworCWdpZ2VfcGNpY2ZnX3dyaXRlMzIoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzEsIDApOworCisJZGV2LT5tZW1fcmVzb3VyY2UubmFtZSA9IFNTQl9HSUdFX01FTV9SRVNfTkFNRTsKKwlkZXYtPm1lbV9yZXNvdXJjZS5zdGFydCA9IGJhc2U7CisJZGV2LT5tZW1fcmVzb3VyY2UuZW5kID0gYmFzZSArIDB4MTAwMDAgLSAxOworCWRldi0+bWVtX3Jlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1BDSV9GSVhFRDsKKworCS8qIEVuYWJsZSB0aGUgbWVtb3J5IHJlZ2lvbi4gKi8KKwlnaWdlX3BjaWNmZ193cml0ZTE2KGRldiwgUENJX0NPTU1BTkQsCisJCQkgICAgZ2lnZV9wY2ljZmdfcmVhZDE2KGRldiwgUENJX0NPTU1BTkQpCisJCQkgICAgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOworCisJLyogV3JpdGUgZmx1c2hpbmcgaXMgY29udHJvbGxlZCBieSB0aGUgRmx1c2ggU3RhdHVzIENvbnRyb2wgcmVnaXN0ZXIuCisJICogV2Ugd2FudCB0byBmbHVzaCBldmVyeSByZWdpc3RlciB3cml0ZSB3aXRoIGEgdGltZW91dCBhbmQgd2Ugd2FudAorCSAqIHRvIGRpc2FibGUgdGhlIElSUSBtYXNrIHdoaWxlIGZsdXNoaW5nIHRvIGF2b2lkIGNvbmN1cnJlbmN5LgorCSAqIE5vdGUgdGhhdCBhdXRvbWF0aWMgd3JpdGUgZmx1c2hpbmcgZG9lcyBfbm90XyB3b3JrIGZyb20KKwkgKiBhbiBJUlEgaGFuZGxlci4gVGhlIGRyaXZlciBtdXN0IGZsdXNoIG1hbnVhbGx5IGJ5IHJlYWRpbmcgYSByZWdpc3Rlci4KKwkgKi8KKwlnaWdlX3dyaXRlMzIoZGV2LCBTU0JfR0lHRV9TSElNX0ZMVVNIU1RBVCwgMHgwMDAwMDA2OCk7CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGFuIFJHTUlJIG9yIEdNSUkgUEhZLWJ1cy4KKwkgKiBPbiBSR01JSSBkbyBub3QgYnlwYXNzIHRoZSBETExzICovCisJdG1zbG93ID0gc3NiX3JlYWQzMihzZGV2LCBTU0JfVE1TTE9XKTsKKwl0bXNoaWdoID0gc3NiX3JlYWQzMihzZGV2LCBTU0JfVE1TSElHSCk7CisJaWYgKHRtc2hpZ2ggJiBTU0JfR0lHRV9UTVNISUdIX1JHTUlJKSB7CisJCXRtc2xvdyAmPSB+U1NCX0dJR0VfVE1TTE9XX1RYQllQQVNTOworCQl0bXNsb3cgJj0gflNTQl9HSUdFX1RNU0xPV19SWEJZUEFTUzsKKwkJZGV2LT5oYXNfcmdtaWkgPSAxOworCX0gZWxzZSB7CisJCXRtc2xvdyB8PSBTU0JfR0lHRV9UTVNMT1dfVFhCWVBBU1M7CisJCXRtc2xvdyB8PSBTU0JfR0lHRV9UTVNMT1dfUlhCWVBBU1M7CisJCWRldi0+aGFzX3JnbWlpID0gMDsKKwl9CisJdG1zbG93IHw9IFNTQl9HSUdFX1RNU0xPV19ETExFTjsKKwlzc2Jfd3JpdGUzMihzZGV2LCBTU0JfVE1TTE9XLCB0bXNsb3cpOworCisJc3NiX3NldF9kcnZkYXRhKHNkZXYsIGRldik7CisJcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJmRldi0+cGNpX2NvbnRyb2xsZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgcGRldl9pc19zc2JfZ2lnZV9jb3JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmICghcGRldi0+cmVzb3VyY2VbMF0ubmFtZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChzdHJjbXAocGRldi0+cmVzb3VyY2VbMF0ubmFtZSwgU1NCX0dJR0VfTUVNX1JFU19OQU1FKSA9PSAwKTsKK30KK0VYUE9SVF9TWU1CT0wocGRldl9pc19zc2JfZ2lnZV9jb3JlKTsKKworaW50IHNzYl9naWdlX3BjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3Qgc3NiX2RldmljZSAqc2RldiwKKwkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiA9IHNzYl9nZXRfZHJ2ZGF0YShzZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWlmIChwZGV2LT5idXMtPm9wcyAhPSAmZGV2LT5wY2lfb3BzKSB7CisJCS8qIFRoZSBQQ0kgZGV2aWNlIGlzIG5vdCBvbiB0aGlzIFNTQiBHaWdFIGJyaWRnZSBkZXZpY2UuICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEZpeHVwIHRoZSBQQ0kgcmVzb3VyY2VzLiAqLworCXJlcyA9ICYocGRldi0+cmVzb3VyY2VbMF0pOworCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUENJX0ZJWEVEOworCXJlcy0+bmFtZSA9IGRldi0+bWVtX3Jlc291cmNlLm5hbWU7CisJcmVzLT5zdGFydCA9IGRldi0+bWVtX3Jlc291cmNlLnN0YXJ0OworCXJlcy0+ZW5kID0gZGV2LT5tZW1fcmVzb3VyY2UuZW5kOworCisJLyogRml4dXAgaW50ZXJydXB0IGxpbmVzLiAqLworCXBkZXYtPmlycSA9IHNzYl9taXBzX2lycShzZGV2KSArIDI7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgcGRldi0+aXJxKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3NiX2dpZ2VfbWFwX2lycShzdHJ1Y3Qgc3NiX2RldmljZSAqc2RldiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiA9IHNzYl9nZXRfZHJ2ZGF0YShzZGV2KTsKKworCWlmIChwZGV2LT5idXMtPm9wcyAhPSAmZGV2LT5wY2lfb3BzKSB7CisJCS8qIFRoZSBQQ0kgZGV2aWNlIGlzIG5vdCBvbiB0aGlzIFNTQiBHaWdFIGJyaWRnZSBkZXZpY2UuICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiBzc2JfbWlwc19pcnEoc2RldikgKyAyOworfQorCitzdGF0aWMgc3RydWN0IHNzYl9kcml2ZXIgc3NiX2dpZ2VfZHJpdmVyID0geworCS5uYW1lCQk9ICJCQ00tR2lnRSIsCisJLmlkX3RhYmxlCT0gc3NiX2dpZ2VfdGJsLAorCS5wcm9iZQkJPSBzc2JfZ2lnZV9wcm9iZSwKK307CisKK2ludCBzc2JfZ2lnZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNzYl9kcml2ZXJfcmVnaXN0ZXIoJnNzYl9naWdlX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfbWlwc2NvcmUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCmluZGV4IDNkM2RkMzIuLjNmZDNlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCkBAIC0xMDksMTIgKzEwOSwxMyBAQAogCQljbGVhcl9pcnEoYnVzLCBvbGRpcnEpOwogCiAJLyogYXNzaWduIHRoZSBuZXcgb25lICovCi0JaWYgKGlycSA9PSAwKQotCQlzc2Jfd3JpdGUzMihtZGV2LCBTU0JfSU5UVkVDLCAoKDEgPDwgaXJxZmxhZykgJiBzc2JfcmVhZDMyKG1kZXYsIFNTQl9JTlRWRUMpKSk7Ci0KLQlpcnFmbGFnIDw8PSBpcHNmbGFnX2lycV9zaGlmdFtpcnFdOwotCWlycWZsYWcgfD0gKHNzYl9yZWFkMzIobWRldiwgU1NCX0lQU0ZMQUcpICYgfmlwc2ZsYWdfaXJxX21hc2tbaXJxXSk7Ci0Jc3NiX3dyaXRlMzIobWRldiwgU1NCX0lQU0ZMQUcsIGlycWZsYWcpOworCWlmIChpcnEgPT0gMCkgeworCQlzc2Jfd3JpdGUzMihtZGV2LCBTU0JfSU5UVkVDLCAoKDEgPDwgaXJxZmxhZykgfCBzc2JfcmVhZDMyKG1kZXYsIFNTQl9JTlRWRUMpKSk7CisJfSBlbHNlIHsKKwkJaXJxZmxhZyA8PD0gaXBzZmxhZ19pcnFfc2hpZnRbaXJxXTsKKwkJaXJxZmxhZyB8PSAoc3NiX3JlYWQzMihtZGV2LCBTU0JfSVBTRkxBRykgJiB+aXBzZmxhZ19pcnFfbWFza1tpcnFdKTsKKwkJc3NiX3dyaXRlMzIobWRldiwgU1NCX0lQU0ZMQUcsIGlycWZsYWcpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc3NiX21pcHNfc2VyaWFsX2luaXQoc3RydWN0IHNzYl9taXBzY29yZSAqbWNvcmUpCkBAIC0yMDksNiArMjEwLDcgQEAKIAkJCS8qIGZhbGx0aHJvdWdoICovCiAJCWNhc2UgU1NCX0RFVl9QQ0k6CiAJCWNhc2UgU1NCX0RFVl9FVEhFUk5FVDoKKwkJY2FzZSBTU0JfREVWX0VUSEVSTkVUX0dCSVQ6CiAJCWNhc2UgU1NCX0RFVl84MDIxMToKIAkJY2FzZSBTU0JfREVWX1VTQjIwX0hPU1Q6CiAJCQkvKiBUaGVzZSBkZXZpY2VzIGdldCB0aGVpciBvd24gSVJRIGxpbmUgaWYgYXZhaWxhYmxlLCB0aGUgcmVzdCBnb2VzIG9uIElSUTAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfcGNpY29yZS5jCmluZGV4IDJmYWFhOTAuLjc1ZGVmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfZW1iZWRkZWQuaD4KIAogI2luY2x1ZGUgInNzYl9wcml2YXRlLmgiCiAKQEAgLTI3LDYgKzI4LDE4IEBACiAJc3NiX3dyaXRlMzIocGMtPmRldiwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUKK3UxNiBwY2ljb3JlX3JlYWQxNihzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLCB1MTYgb2Zmc2V0KQoreworCXJldHVybiBzc2JfcmVhZDE2KHBjLT5kZXYsIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgcGNpY29yZV93cml0ZTE2KHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKK3sKKwlzc2Jfd3JpdGUxNihwYy0+ZGV2LCBvZmZzZXQsIHZhbHVlKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDb2RlIGZvciBob3N0bW9kZSBvcGVyYXRpb24uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00Nyw2OCArNjAsNiBAQAogLyogQ29yZSB0byBhY2Nlc3MgdGhlIGV4dGVybmFsIFBDSSBjb25maWcgc3BhY2UuIENhbiBvbmx5IGhhdmUgb25lLiAqLwogc3RhdGljIHN0cnVjdCBzc2JfcGNpY29yZSAqZXh0cGNpX2NvcmU7CiAKLXN0YXRpYyB1MzIgc3NiX3BjaWNvcmVfcGNpYnVzX2lvYmFzZSA9IDB4MTAwOwotc3RhdGljIHUzMiBzc2JfcGNpY29yZV9wY2lidXNfbWVtYmFzZSA9IFNTQl9QQ0lfRE1BOwotCi1pbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkKQotewotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBwb3MsIHNpemU7Ci0JdTMyICpiYXNlOwotCi0Jc3NiX3ByaW50ayhLRVJOX0lORk8gIlBDSTogRml4aW5nIHVwIGRldmljZSAlc1xuIiwKLQkJICAgcGNpX25hbWUoZCkpOwotCi0JLyogRml4IHVwIHJlc291cmNlIGJhc2VzICovCi0JZm9yIChwb3MgPSAwOyBwb3MgPCA2OyBwb3MrKykgewotCQlyZXMgPSAmZC0+cmVzb3VyY2VbcG9zXTsKLQkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQotCQkJYmFzZSA9ICZzc2JfcGNpY29yZV9wY2lidXNfaW9iYXNlOwotCQllbHNlCi0JCQliYXNlID0gJnNzYl9wY2ljb3JlX3BjaWJ1c19tZW1iYXNlOwotCQlpZiAocmVzLT5lbmQpIHsKLQkJCXNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwotCQkJaWYgKCpiYXNlICYgKHNpemUgLSAxKSkKLQkJCQkqYmFzZSA9ICgqYmFzZSArIHNpemUpICYgfihzaXplIC0gMSk7Ci0JCQlyZXMtPnN0YXJ0ID0gKmJhc2U7Ci0JCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyBzaXplIC0gMTsKLQkJCSpiYXNlICs9IHNpemU7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGQsIFBDSV9CQVNFX0FERFJFU1NfMCArIChwb3MgPDwgMiksIHJlcy0+c3RhcnQpOwotCQl9Ci0JCS8qIEZpeCB1cCBQQ0kgYnJpZGdlIEJBUjAgb25seSAqLwotCQlpZiAoZC0+YnVzLT5udW1iZXIgPT0gMCAmJiBQQ0lfU0xPVChkLT5kZXZmbikgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQkvKiBGaXggdXAgaW50ZXJydXB0IGxpbmVzICovCi0JZC0+aXJxID0gc3NiX21pcHNfaXJxKGV4dHBjaV9jb3JlLT5kZXYpICsgMjsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZCwgUENJX0lOVEVSUlVQVF9MSU5FLCBkLT5pcnEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzc2JfZml4dXBfcGNpYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaWYgKGRldi0+YnVzLT5udW1iZXIgIT0gMCB8fCBQQ0lfU0xPVChkZXYtPmRldmZuKSAhPSAwKQotCQlyZXR1cm47Ci0KLQlzc2JfcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBmaXhpbmcgdXAgYnJpZGdlXG4iKTsKLQotCS8qIEVuYWJsZSBQQ0kgYnJpZGdlIGJ1cyBtYXN0ZXJpbmcgYW5kIG1lbW9yeSBzcGFjZSAqLwotCXBjaV9zZXRfbWFzdGVyKGRldik7Ci0JcGNpYmlvc19lbmFibGVfZGV2aWNlKGRldiwgfjApOwotCi0JLyogRW5hYmxlIFBDSSBicmlkZ2UgQkFSMSBwcmVmZXRjaCBhbmQgYnVyc3QgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgU1NCX0JBUjFfQ09OVFJPTCwgMyk7Ci0KLQkvKiBNYWtlIHN1cmUgb3VyIGxhdGVuY3kgaXMgaGlnaCBlbm91Z2ggdG8gaGFuZGxlIHRoZSBkZXZpY2VzIGJlaGluZCB1cyAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGE4KTsKLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHNzYl9maXh1cF9wY2licmlkZ2UpOwotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JcmV0dXJuIHNzYl9taXBzX2lycShleHRwY2lfY29yZS0+ZGV2KSArIDI7Ci19CiAKIHN0YXRpYyB1MzIgZ2V0X2NmZ3NwYWNlX2FkZHIoc3RydWN0IHNzYl9wY2ljb3JlICpwYywKIAkJCSAgICAgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldiwKQEAgLTExNyw4ICs2OCwxMCBAQAogCXUzMiBhZGRyID0gMDsKIAl1MzIgdG1wOwogCi0JaWYgKHVubGlrZWx5KHBjLT5jYXJkYnVzbW9kZSAmJiBkZXYgPiAxKSkKKwkvKiBXZSBkbyBvbmx5IGhhdmUgb25lIGNhcmRidXMgZGV2aWNlIGJlaGluZCB0aGUgYnJpZGdlLiAqLworCWlmIChwYy0+Y2FyZGJ1c21vZGUgJiYgKGRldiA+PSAxKSkKIAkJZ290byBvdXQ7CisKIAlpZiAoYnVzID09IDApIHsKIAkJLyogVHlwZSAwIHRyYW5zYWN0aW9uICovCiAJCWlmICh1bmxpa2VseShkZXYgPj0gU1NCX1BDSV9TTE9UX01BWCkpCkBAIC0yNzksMTQgKzIzMiwxNCBAQAogCS5uYW1lCT0gIlNTQiBQQ0ljb3JlIGV4dGVybmFsIG1lbW9yeSIsCiAJLnN0YXJ0CT0gU1NCX1BDSV9ETUEsCiAJLmVuZAk9IFNTQl9QQ0lfRE1BICsgU1NCX1BDSV9ETUFfU1ogLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QQ0lfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNzYl9wY2ljb3JlX2lvX3Jlc291cmNlID0gewogCS5uYW1lCT0gIlNTQiBQQ0ljb3JlIGV4dGVybmFsIEkvTyIsCiAJLnN0YXJ0CT0gMHgxMDAsCiAJLmVuZAk9IDB4N0ZGLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfUENJX0ZJWEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBzc2JfcGNpY29yZV9jb250cm9sbGVyID0gewpAQCAtMjk2LDYgKzI0OSw5NSBAQAogCS5tZW1fb2Zmc2V0CT0gMHgyNDAwMDAwMCwKIH07CiAKK3N0YXRpYyB1MzIgc3NiX3BjaWNvcmVfcGNpYnVzX2lvYmFzZSA9IDB4MTAwOworc3RhdGljIHUzMiBzc2JfcGNpY29yZV9wY2lidXNfbWVtYmFzZSA9IFNTQl9QQ0lfRE1BOworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGRvaW5nIGEgcGNpX2VuYWJsZV9kZXZpY2UoKS4KKyAqIFdlIG11c3QgZmlyc3QgY2hlY2sgaWYgdGhlIGRldmljZSBpcyBhIGRldmljZSBvbiB0aGUgUENJLWNvcmUgYnJpZGdlLiAqLworaW50IHNzYl9wY2ljb3JlX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmQpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHBvcywgc2l6ZTsKKwl1MzIgKmJhc2U7CisKKwlpZiAoZC0+YnVzLT5vcHMgIT0gJnNzYl9wY2ljb3JlX3BjaW9wcykgeworCQkvKiBUaGlzIGlzIG5vdCBhIGRldmljZSBvbiB0aGUgUENJLWNvcmUgYnJpZGdlLiAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzc2JfcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBGaXhpbmcgdXAgZGV2aWNlICVzXG4iLAorCQkgICBwY2lfbmFtZShkKSk7CisKKwkvKiBGaXggdXAgcmVzb3VyY2UgYmFzZXMgKi8KKwlmb3IgKHBvcyA9IDA7IHBvcyA8IDY7IHBvcysrKSB7CisJCXJlcyA9ICZkLT5yZXNvdXJjZVtwb3NdOworCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCisJCQliYXNlID0gJnNzYl9wY2ljb3JlX3BjaWJ1c19pb2Jhc2U7CisJCWVsc2UKKwkJCWJhc2UgPSAmc3NiX3BjaWNvcmVfcGNpYnVzX21lbWJhc2U7CisJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9QQ0lfRklYRUQ7CisJCWlmIChyZXMtPmVuZCkgeworCQkJc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJCQlpZiAoKmJhc2UgJiAoc2l6ZSAtIDEpKQorCQkJCSpiYXNlID0gKCpiYXNlICsgc2l6ZSkgJiB+KHNpemUgLSAxKTsKKwkJCXJlcy0+c3RhcnQgPSAqYmFzZTsKKwkJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIHNpemUgLSAxOworCQkJKmJhc2UgKz0gc2l6ZTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZCwgUENJX0JBU0VfQUREUkVTU18wICsgKHBvcyA8PCAyKSwgcmVzLT5zdGFydCk7CisJCX0KKwkJLyogRml4IHVwIFBDSSBicmlkZ2UgQkFSMCBvbmx5ICovCisJCWlmIChkLT5idXMtPm51bWJlciA9PSAwICYmIFBDSV9TTE9UKGQtPmRldmZuKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCS8qIEZpeCB1cCBpbnRlcnJ1cHQgbGluZXMgKi8KKwlkLT5pcnEgPSBzc2JfbWlwc19pcnEoZXh0cGNpX2NvcmUtPmRldikgKyAyOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkLCBQQ0lfSU5URVJSVVBUX0xJTkUsIGQtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRWFybHkgUENJIGZpeHVwIGZvciBhIGRldmljZSBvbiB0aGUgUENJLWNvcmUgYnJpZGdlLiAqLworc3RhdGljIHZvaWQgc3NiX3BjaWNvcmVfZml4dXBfcGNpYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTggbGF0OworCisJaWYgKGRldi0+YnVzLT5vcHMgIT0gJnNzYl9wY2ljb3JlX3BjaW9wcykgeworCQkvKiBUaGlzIGlzIG5vdCBhIGRldmljZSBvbiB0aGUgUENJLWNvcmUgYnJpZGdlLiAqLworCQlyZXR1cm47CisJfQorCWlmIChkZXYtPmJ1cy0+bnVtYmVyICE9IDAgfHwgUENJX1NMT1QoZGV2LT5kZXZmbikgIT0gMCkKKwkJcmV0dXJuOworCisJc3NiX3ByaW50ayhLRVJOX0lORk8gIlBDSTogRml4aW5nIHVwIGJyaWRnZSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CisKKwkvKiBFbmFibGUgUENJIGJyaWRnZSBidXMgbWFzdGVyaW5nIGFuZCBtZW1vcnkgc3BhY2UgKi8KKwlwY2lfc2V0X21hc3RlcihkZXYpOworCWlmIChwY2liaW9zX2VuYWJsZV9kZXZpY2UoZGV2LCB+MCkgPCAwKSB7CisJCXNzYl9wcmludGsoS0VSTl9FUlIgIlBDSTogU1NCIGJyaWRnZSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEVuYWJsZSBQQ0kgYnJpZGdlIEJBUjEgcHJlZmV0Y2ggYW5kIGJ1cnN0ICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFNTQl9CQVIxX0NPTlRST0wsIDMpOworCisJLyogTWFrZSBzdXJlIG91ciBsYXRlbmN5IGlzIGhpZ2ggZW5vdWdoIHRvIGhhbmRsZSB0aGUgZGV2aWNlcyBiZWhpbmQgdXMgKi8KKwlsYXQgPSAxNjg7CisJc3NiX3ByaW50ayhLRVJOX0lORk8gIlBDSTogRml4aW5nIGxhdGVuY3kgdGltZXIgb2YgZGV2aWNlICVzIHRvICV1XG4iLAorCQkgICBwY2lfbmFtZShkZXYpLCBsYXQpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCBsYXQpOworfQorREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgc3NiX3BjaWNvcmVfZml4dXBfcGNpYnJpZGdlKTsKKworLyogUENJIGRldmljZSBJUlEgbWFwcGluZy4gKi8KK2ludCBzc2JfcGNpY29yZV9wY2liaW9zX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWlmIChkZXYtPmJ1cy0+b3BzICE9ICZzc2JfcGNpY29yZV9wY2lvcHMpIHsKKwkJLyogVGhpcyBpcyBub3QgYSBkZXZpY2Ugb24gdGhlIFBDSS1jb3JlIGJyaWRnZS4gKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiBzc2JfbWlwc19pcnEoZXh0cGNpX2NvcmUtPmRldikgKyAyOworfQorCiBzdGF0aWMgdm9pZCBzc2JfcGNpY29yZV9pbml0X2hvc3Rtb2RlKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMpCiB7CiAJdTMyIHZhbDsKQEAgLTMxOCw3ICszNjAsMTYgQEAKIAlwY2ljb3JlX3dyaXRlMzIocGMsIFNTQl9QQ0lDT1JFX0FSQkNUTCwgdmFsKTsKIAl1ZGVsYXkoMSk7IC8qIEFzc2VydGlvbiB0aW1lIGRlbWFuZGVkIGJ5IHRoZSBQQ0kgc3RhbmRhcmQgKi8KIAotCS8qVE9ETyBjYXJkYnVzIG1vZGUgKi8KKwlpZiAocGMtPmRldi0+YnVzLT5oYXNfY2FyZGJ1c19zbG90KSB7CisJCXNzYl9kcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNhcmRCdXMgc2xvdCBkZXRlY3RlZFxuIik7CisJCXBjLT5jYXJkYnVzbW9kZSA9IDE7CisJCS8qIEdQSU8gMSByZXNldHMgdGhlIGJyaWRnZSAqLworCQlzc2JfZ3Bpb19vdXQocGMtPmRldi0+YnVzLCAxLCAxKTsKKwkJc3NiX2dwaW9fb3V0ZW4ocGMtPmRldi0+YnVzLCAxLCAxKTsKKwkJcGNpY29yZV93cml0ZTE2KHBjLCBTU0JfUENJQ09SRV9TUFJPTSgwKSwKKwkJCQlwY2ljb3JlX3JlYWQxNihwYywgU1NCX1BDSUNPUkVfU1BST00oMCkpCisJCQkJfCAweDA0MDApOworCX0KIAogCS8qIDY0TUIgSS9PIHdpbmRvdyAqLwogCXBjaWNvcmVfd3JpdGUzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTAsCkBAIC0zNDQsNyArMzk1LDggQEAKIAkvKiBPaywgcmVhZHkgdG8gcnVuLCByZWdpc3RlciBpdCB0byB0aGUgc3lzdGVtLgogCSAqIFRoZSBmb2xsb3dpbmcgbmVlZHMgY2hhbmdlLCBpZiB3ZSB3YW50IHRvIHBvcnQgaG9zdG1vZGUKIAkgKiB0byBub24tTUlQUyBwbGF0Zm9ybS4gKi8KLQlzZXRfaW9fcG9ydF9iYXNlKCh1bnNpZ25lZCBsb25nKWlvcmVtYXBfbm9jYWNoZShTU0JfUENJX01FTSwgMHgwNDAwMDAwMCkpOworCXNzYl9wY2ljb3JlX2NvbnRyb2xsZXIuaW9fbWFwX2Jhc2UgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwX25vY2FjaGUoU1NCX1BDSV9NRU0sIDB4MDQwMDAwMDApOworCXNldF9pb19wb3J0X2Jhc2Uoc3NiX3BjaWNvcmVfY29udHJvbGxlci5pb19tYXBfYmFzZSk7CiAJLyogR2l2ZSBzb21lIHRpbWUgdG8gdGhlIFBDSSBjb250cm9sbGVyIHRvIGNvbmZpZ3VyZSBpdHNlbGYgd2l0aCB0aGUgbmV3CiAJICogdmFsdWVzLiBOb3Qgd2FpdGluZyBhdCB0aGlzIHBvaW50IGNhdXNlcyBjcmFzaGVzIG9mIHRoZSBtYWNoaW5lLiAqLwogCW1kZWxheSgxMCk7CkBAIC0zNjIsNyArNDE0LDcgQEAKIAkgICAgY2hpcGlkX3RvcCAhPSAweDUzMDApCiAJCXJldHVybiAwOwogCi0JaWYgKGJ1cy0+c3Byb20ucjEuYm9hcmRmbGFnc19sbyAmIFNTQl9QQ0lDT1JFX0JGTF9OT1BDSSkKKwlpZiAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgU1NCX1BDSUNPUkVfQkZMX05PUENJKQogCQlyZXR1cm4gMDsKIAogCS8qIFRoZSAyMDAtcGluIEJDTTQ3MTIgcGFja2FnZSBkb2VzIG5vdCBib25kIG91dCBQQ0kuIEV2ZW4gd2hlbgpAQCAtNTEwLDE1ICs1NjIsOSBAQAogCQl1MzIgaW50dmVjOwogCiAJCWludHZlYyA9IHNzYl9yZWFkMzIocGRldiwgU1NCX0lOVFZFQyk7Ci0JCWlmICgoYnVzLT5jaGlwX2lkICYgMHhGRjAwKSA9PSAweDQ0MDApIHsKLQkJCS8qIFdvcmthcm91bmQ6IE9uIHRoZSBCQ000NFhYIHRoZSBCUEZMQUcgcm91dGluZwotCQkJICogYml0IGlzIHdyb25nLiBVc2UgYSBoYXJkY29kZWQgY29uc3RhbnQuICovCi0JCQlpbnR2ZWMgfD0gMHgwMDAwMDAwMjsKLQkJfSBlbHNlIHsKLQkJCXRtcCA9IHNzYl9yZWFkMzIoZGV2LCBTU0JfVFBTRkxBRyk7Ci0JCQl0bXAgJj0gU1NCX1RQU0ZMQUdfQlBGTEFHOwotCQkJaW50dmVjIHw9IHRtcDsKLQkJfQorCQl0bXAgPSBzc2JfcmVhZDMyKGRldiwgU1NCX1RQU0ZMQUcpOworCQl0bXAgJj0gU1NCX1RQU0ZMQUdfQlBGTEFHOworCQlpbnR2ZWMgfD0gKDEgPDwgdG1wKTsKIAkJc3NiX3dyaXRlMzIocGRldiwgU1NCX0lOVFZFQywgaW50dmVjKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2VtYmVkZGVkLmMgYi9kcml2ZXJzL3NzYi9lbWJlZGRlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzNhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NzYi9lbWJlZGRlZC5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisgKiBFbWJlZGRlZCBzeXN0ZW1zIHN1cHBvcnQgY29kZQorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDgsIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4LCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfZW1iZWRkZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2RyaXZlcl9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2RyaXZlcl9naWdlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlICJzc2JfcHJpdmF0ZS5oIgorCisKK2ludCBzc2Jfd2F0Y2hkb2dfdGltZXJfc2V0KHN0cnVjdCBzc2JfYnVzICpidXMsIHUzMiB0aWNrcykKK3sKKwlpZiAoc3NiX2NoaXBjb19hdmFpbGFibGUoJmJ1cy0+Y2hpcGNvKSkgeworCQlzc2JfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldCgmYnVzLT5jaGlwY28sIHRpY2tzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzc2JfZXh0aWZfYXZhaWxhYmxlKCZidXMtPmV4dGlmKSkgeworCQlzc2JfZXh0aWZfd2F0Y2hkb2dfdGltZXJfc2V0KCZidXMtPmV4dGlmLCB0aWNrcyk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwordTMyIHNzYl9ncGlvX2luKHN0cnVjdCBzc2JfYnVzICpidXMsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlcyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlpZiAoc3NiX2NoaXBjb19hdmFpbGFibGUoJmJ1cy0+Y2hpcGNvKSkKKwkJcmVzID0gc3NiX2NoaXBjb19ncGlvX2luKCZidXMtPmNoaXBjbywgbWFzayk7CisJZWxzZSBpZiAoc3NiX2V4dGlmX2F2YWlsYWJsZSgmYnVzLT5leHRpZikpCisJCXJlcyA9IHNzYl9leHRpZl9ncGlvX2luKCZidXMtPmV4dGlmLCBtYXNrKTsKKwllbHNlCisJCVNTQl9XQVJOX09OKDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1cy0+Z3Bpb19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTChzc2JfZ3Bpb19pbik7CisKK3UzMiBzc2JfZ3Bpb19vdXQoc3RydWN0IHNzYl9idXMgKmJ1cywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZXMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1cy0+Z3Bpb19sb2NrLCBmbGFncyk7CisJaWYgKHNzYl9jaGlwY29fYXZhaWxhYmxlKCZidXMtPmNoaXBjbykpCisJCXJlcyA9IHNzYl9jaGlwY29fZ3Bpb19vdXQoJmJ1cy0+Y2hpcGNvLCBtYXNrLCB2YWx1ZSk7CisJZWxzZSBpZiAoc3NiX2V4dGlmX2F2YWlsYWJsZSgmYnVzLT5leHRpZikpCisJCXJlcyA9IHNzYl9leHRpZl9ncGlvX291dCgmYnVzLT5leHRpZiwgbWFzaywgdmFsdWUpOworCWVsc2UKKwkJU1NCX1dBUk5fT04oMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzLT5ncGlvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXM7Cit9CitFWFBPUlRfU1lNQk9MKHNzYl9ncGlvX291dCk7CisKK3UzMiBzc2JfZ3Bpb19vdXRlbihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlcyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlpZiAoc3NiX2NoaXBjb19hdmFpbGFibGUoJmJ1cy0+Y2hpcGNvKSkKKwkJcmVzID0gc3NiX2NoaXBjb19ncGlvX291dGVuKCZidXMtPmNoaXBjbywgbWFzaywgdmFsdWUpOworCWVsc2UgaWYgKHNzYl9leHRpZl9hdmFpbGFibGUoJmJ1cy0+ZXh0aWYpKQorCQlyZXMgPSBzc2JfZXh0aWZfZ3Bpb19vdXRlbigmYnVzLT5leHRpZiwgbWFzaywgdmFsdWUpOworCWVsc2UKKwkJU1NCX1dBUk5fT04oMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzLT5ncGlvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXM7Cit9CitFWFBPUlRfU1lNQk9MKHNzYl9ncGlvX291dGVuKTsKKwordTMyIHNzYl9ncGlvX2NvbnRyb2woc3RydWN0IHNzYl9idXMgKmJ1cywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZXMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1cy0+Z3Bpb19sb2NrLCBmbGFncyk7CisJaWYgKHNzYl9jaGlwY29fYXZhaWxhYmxlKCZidXMtPmNoaXBjbykpCisJCXJlcyA9IHNzYl9jaGlwY29fZ3Bpb19jb250cm9sKCZidXMtPmNoaXBjbywgbWFzaywgdmFsdWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1cy0+Z3Bpb19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTChzc2JfZ3Bpb19jb250cm9sKTsKKwordTMyIHNzYl9ncGlvX2ludG1hc2soc3RydWN0IHNzYl9idXMgKmJ1cywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZXMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1cy0+Z3Bpb19sb2NrLCBmbGFncyk7CisJaWYgKHNzYl9jaGlwY29fYXZhaWxhYmxlKCZidXMtPmNoaXBjbykpCisJCXJlcyA9IHNzYl9jaGlwY29fZ3Bpb19pbnRtYXNrKCZidXMtPmNoaXBjbywgbWFzaywgdmFsdWUpOworCWVsc2UgaWYgKHNzYl9leHRpZl9hdmFpbGFibGUoJmJ1cy0+ZXh0aWYpKQorCQlyZXMgPSBzc2JfZXh0aWZfZ3Bpb19pbnRtYXNrKCZidXMtPmV4dGlmLCBtYXNrLCB2YWx1ZSk7CisJZWxzZQorCQlTU0JfV0FSTl9PTigxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXMtPmdwaW9fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0woc3NiX2dwaW9faW50bWFzayk7CisKK3UzMiBzc2JfZ3Bpb19wb2xhcml0eShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlcyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlpZiAoc3NiX2NoaXBjb19hdmFpbGFibGUoJmJ1cy0+Y2hpcGNvKSkKKwkJcmVzID0gc3NiX2NoaXBjb19ncGlvX3BvbGFyaXR5KCZidXMtPmNoaXBjbywgbWFzaywgdmFsdWUpOworCWVsc2UgaWYgKHNzYl9leHRpZl9hdmFpbGFibGUoJmJ1cy0+ZXh0aWYpKQorCQlyZXMgPSBzc2JfZXh0aWZfZ3Bpb19wb2xhcml0eSgmYnVzLT5leHRpZiwgbWFzaywgdmFsdWUpOworCWVsc2UKKwkJU1NCX1dBUk5fT04oMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzLT5ncGlvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXM7Cit9CitFWFBPUlRfU1lNQk9MKHNzYl9ncGlvX3BvbGFyaXR5KTsKKworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX0dJR0UKK3N0YXRpYyBpbnQgZ2lnZV9wY2lfaW5pdF9jYWxsYmFjayhzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSAoc3RydWN0IHBjaV9kZXYgKilkYXRhOworCXN0cnVjdCBzc2JfZGV2aWNlICpkZXY7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJlczsKKworCWZvciAoaSA9IDA7IGkgPCBidXMtPm5yX2RldmljZXM7IGkrKykgeworCQlkZXYgPSAmKGJ1cy0+ZGV2aWNlc1tpXSk7CisJCWlmIChkZXYtPmlkLmNvcmVpZCAhPSBTU0JfREVWX0VUSEVSTkVUX0dCSVQpCisJCQljb250aW51ZTsKKwkJaWYgKCFkZXYtPmRldiB8fAorCQkgICAgIWRldi0+ZGV2LT5kcml2ZXIgfHwKKwkJICAgICFkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYtPmRldikpCisJCQljb250aW51ZTsKKwkJcmVzID0gc3NiX2dpZ2VfcGNpYmlvc19wbGF0X2Rldl9pbml0KGRldiwgcGRldik7CisJCWlmIChyZXMgPj0gMCkKKwkJCXJldHVybiByZXM7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9EUklWRVJfR0lHRSAqLworCitpbnQgc3NiX3BjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBzc2JfcGNpY29yZV9wbGF0X2Rldl9pbml0KGRldik7CisJaWYgKCFlcnIpCisJCXJldHVybiAwOworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX0dJR0UKKwllcnIgPSBzc2JfZm9yX2VhY2hfYnVzX2NhbGwoKHVuc2lnbmVkIGxvbmcpZGV2LCBnaWdlX3BjaV9pbml0X2NhbGxiYWNrKTsKKwlpZiAoZXJyID49IDApCisJCXJldHVybiBlcnI7CisjZW5kaWYKKwkvKiBUaGlzIGlzIG5vdCBhIFBDSSBkZXZpY2Ugb24gYW55IFNTQiBkZXZpY2UuICovCisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX0dJR0UKK3N0YXRpYyBpbnQgZ2lnZV9tYXBfaXJxX2NhbGxiYWNrKHN0cnVjdCBzc2JfYnVzICpidXMsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IChjb25zdCBzdHJ1Y3QgcGNpX2RldiAqKWRhdGE7CisJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmVzOworCisJZm9yIChpID0gMDsgaSA8IGJ1cy0+bnJfZGV2aWNlczsgaSsrKSB7CisJCWRldiA9ICYoYnVzLT5kZXZpY2VzW2ldKTsKKwkJaWYgKGRldi0+aWQuY29yZWlkICE9IFNTQl9ERVZfRVRIRVJORVRfR0JJVCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRldi0+ZGV2IHx8CisJCSAgICAhZGV2LT5kZXYtPmRyaXZlciB8fAorCQkgICAgIWRldmljZV9pc19yZWdpc3RlcmVkKGRldi0+ZGV2KSkKKwkJCWNvbnRpbnVlOworCQlyZXMgPSBzc2JfZ2lnZV9tYXBfaXJxKGRldiwgcGRldik7CisJCWlmIChyZXMgPj0gMCkKKwkJCXJldHVybiByZXM7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9EUklWRVJfR0lHRSAqLworCitpbnQgc3NiX3BjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IHJlczsKKworCS8qIENoZWNrIGlmIHRoaXMgUENJIGRldmljZSBpcyBhIGRldmljZSBvbiBhIFNTQiBidXMgb3IgZGV2aWNlCisJICogYW5kIHJldHVybiB0aGUgSVJRIG51bWJlciBmb3IgaXQuICovCisKKwlyZXMgPSBzc2JfcGNpY29yZV9wY2liaW9zX21hcF9pcnEoZGV2LCBzbG90LCBwaW4pOworCWlmIChyZXMgPj0gMCkKKwkJcmV0dXJuIHJlczsKKyNpZmRlZiBDT05GSUdfU1NCX0RSSVZFUl9HSUdFCisJcmVzID0gc3NiX2Zvcl9lYWNoX2J1c19jYWxsKCh1bnNpZ25lZCBsb25nKWRldiwgZ2lnZV9tYXBfaXJxX2NhbGxiYWNrKTsKKwlpZiAocmVzID49IDApCisJCXJldHVybiByZXM7CisjZW5kaWYKKwkvKiBUaGlzIGlzIG5vdCBhIFBDSSBkZXZpY2Ugb24gYW55IFNTQiBkZXZpY2UuICovCisKKwlyZXR1cm4gLUVOT0RFVjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL21haW4uYyBiL2RyaXZlcnMvc3NiL21haW4uYwppbmRleCA5MDI4ZWQ1Li43Y2Y4ODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9tYWluLmMKKysrIGIvZHJpdmVycy9zc2IvbWFpbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiLmg+CiAjaW5jbHVkZSA8bGludXgvc3NiL3NzYl9yZWdzLmg+CisjaW5jbHVkZSA8bGludXgvc3NiL3NzYl9kcml2ZXJfZ2lnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKQEAgLTY4LDYgKzY5LDQ0IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NTQl9QQ0lIT1NUICovCiAKKyNpZmRlZiBDT05GSUdfU1NCX1BDTUNJQUhPU1QKK3N0cnVjdCBzc2JfYnVzICpzc2JfcGNtY2lhX2Rldl90b19idXMoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1czsKKworCXNzYl9idXNlc19sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZidXNlcywgbGlzdCkgeworCQlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDTUNJQSAmJgorCQkgICAgYnVzLT5ob3N0X3BjbWNpYSA9PSBwZGV2KQorCQkJZ290byBmb3VuZDsKKwl9CisJYnVzID0gTlVMTDsKK2ZvdW5kOgorCXNzYl9idXNlc191bmxvY2soKTsKKworCXJldHVybiBidXM7Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9QQ01DSUFIT1NUICovCisKK2ludCBzc2JfZm9yX2VhY2hfYnVzX2NhbGwodW5zaWduZWQgbG9uZyBkYXRhLAorCQkJICBpbnQgKCpmdW5jKShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1bnNpZ25lZCBsb25nIGRhdGEpKQoreworCXN0cnVjdCBzc2JfYnVzICpidXM7CisJaW50IHJlczsKKworCXNzYl9idXNlc19sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZidXNlcywgbGlzdCkgeworCQlyZXMgPSBmdW5jKGJ1cywgZGF0YSk7CisJCWlmIChyZXMgPj0gMCkgeworCQkJc3NiX2J1c2VzX3VubG9jaygpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKwlzc2JfYnVzZXNfdW5sb2NrKCk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIHN0cnVjdCBzc2JfZGV2aWNlICpzc2JfZGV2aWNlX2dldChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KQogewogCWlmIChkZXYpCkBAIC04MSwzNSArMTIwLDEyIEBACiAJCXB1dF9kZXZpY2UoZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgaW50IHNzYl9idXNfcmVzdW1lKHN0cnVjdCBzc2JfYnVzICpidXMpCi17Ci0JaW50IGVycjsKLQotCXNzYl9wY2lfeHRhbChidXMsIFNTQl9HUElPX1hUQUwgfCBTU0JfR1BJT19QTEwsIDEpOwotCWVyciA9IHNzYl9wY21jaWFfaW5pdChidXMpOwotCWlmIChlcnIpIHsKLQkJLyogTm8gbmVlZCB0byBkaXNhYmxlIFhUQUwsIGFzIHdlIGRvbid0IGhhdmUgb25lIG9uIFBDTUNJQS4gKi8KLQkJcmV0dXJuIGVycjsKLQl9Ci0Jc3NiX2NoaXBjb19yZXN1bWUoJmJ1cy0+Y2hpcGNvKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNzYl9kZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3NiX2RldmljZSAqc3NiX2RldiA9IGRldl90b19zc2JfZGV2KGRldik7CiAJc3RydWN0IHNzYl9kcml2ZXIgKnNzYl9kcnY7Ci0Jc3RydWN0IHNzYl9idXMgKmJ1czsKIAlpbnQgZXJyID0gMDsKIAotCWJ1cyA9IHNzYl9kZXYtPmJ1czsKLQlpZiAoYnVzLT5zdXNwZW5kX2NudCA9PSBidXMtPm5yX2RldmljZXMpIHsKLQkJZXJyID0gc3NiX2J1c19yZXN1bWUoYnVzKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCWJ1cy0+c3VzcGVuZF9jbnQtLTsKIAlpZiAoZGV2LT5kcml2ZXIpIHsKIAkJc3NiX2RydiA9IGRydl90b19zc2JfZHJ2KGRldi0+ZHJpdmVyKTsKIAkJaWYgKHNzYl9kcnYgJiYgc3NiX2Rydi0+cmVzdW1lKQpAQCAtMTIxLDI3ICsxMzcsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBzc2JfYnVzX3N1c3BlbmQoc3RydWN0IHNzYl9idXMgKmJ1cywgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXNzYl9jaGlwY29fc3VzcGVuZCgmYnVzLT5jaGlwY28sIHN0YXRlKTsKLQlzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMIHwgU1NCX0dQSU9fUExMLCAwKTsKLQotCS8qIFJlc2V0IEhXIHN0YXRlIGluZm9ybWF0aW9uIGluIG1lbW9yeSwgc28gdGhhdCBIVyBpcwotCSAqIGNvbXBsZXRlbHkgcmVpbml0aWFsaXplZCBvbiByZXN1bWUuICovCi0JYnVzLT5tYXBwZWRfZGV2aWNlID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFCi0JYnVzLT5wY2ljb3JlLnNldHVwX2RvbmUgPSAwOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NTQl9ERUJVRwotCWJ1cy0+cG93ZXJlZF91cCA9IDA7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGludCBzc2JfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNzYl9kZXZpY2UgKnNzYl9kZXYgPSBkZXZfdG9fc3NiX2RldihkZXYpOwogCXN0cnVjdCBzc2JfZHJpdmVyICpzc2JfZHJ2OwotCXN0cnVjdCBzc2JfYnVzICpidXM7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoZGV2LT5kcml2ZXIpIHsKQEAgLTE1MSwxOSArMTUwLDQ2IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9Ci0KLQlidXMgPSBzc2JfZGV2LT5idXM7Ci0JYnVzLT5zdXNwZW5kX2NudCsrOwotCWlmIChidXMtPnN1c3BlbmRfY250ID09IGJ1cy0+bnJfZGV2aWNlcykgewotCQkvKiBBbGwgZGV2aWNlcyBzdXNwZW5kZWQuIFNodXRkb3duIHRoZSBidXMuICovCi0JCXNzYl9idXNfc3VzcGVuZChidXMsIHN0YXRlKTsKLQl9Ci0KIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCitpbnQgc3NiX2J1c19yZXN1bWUoc3RydWN0IHNzYl9idXMgKmJ1cykKK3sKKwlpbnQgZXJyOworCisJLyogUmVzZXQgSFcgc3RhdGUgaW5mb3JtYXRpb24gaW4gbWVtb3J5LCBzbyB0aGF0IEhXIGlzCisJICogY29tcGxldGVseSByZWluaXRpYWxpemVkLiAqLworCWJ1cy0+bWFwcGVkX2RldmljZSA9IE5VTEw7CisjaWZkZWYgQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRQorCWJ1cy0+cGNpY29yZS5zZXR1cF9kb25lID0gMDsKKyNlbmRpZgorCisJZXJyID0gc3NiX2J1c19wb3dlcnVwKGJ1cywgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzc2JfcGNtY2lhX2hhcmR3YXJlX3NldHVwKGJ1cyk7CisJaWYgKGVycikgeworCQlzc2JfYnVzX21heV9wb3dlcmRvd24oYnVzKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc3NiX2NoaXBjb19yZXN1bWUoJmJ1cy0+Y2hpcGNvKTsKKwlzc2JfYnVzX21heV9wb3dlcmRvd24oYnVzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzc2JfYnVzX3Jlc3VtZSk7CisKK2ludCBzc2JfYnVzX3N1c3BlbmQoc3RydWN0IHNzYl9idXMgKmJ1cykKK3sKKwlzc2JfY2hpcGNvX3N1c3BlbmQoJmJ1cy0+Y2hpcGNvKTsKKwlzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMIHwgU1NCX0dQSU9fUExMLCAwKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzc2JfYnVzX3N1c3BlbmQpOworCisjaWZkZWYgQ09ORklHX1NTQl9TUFJPTQogaW50IHNzYl9kZXZpY2VzX2ZyZWV6ZShzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQogewogCXN0cnVjdCBzc2JfZGV2aWNlICpkZXY7CkBAIC0yNDksNyArMjc1LDcgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19TU0JfUENJSE9TVCAqLworI2VuZGlmIC8qIENPTkZJR19TU0JfU1BST00gKi8KIAogc3RhdGljIHZvaWQgc3NiX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0zNzgsNyArNDA0LDcgQEAKIAlsaXN0X2RlbCgmYnVzLT5saXN0KTsKIAlzc2JfYnVzZXNfdW5sb2NrKCk7CiAKLQkvKiBzc2JfcGNtY2lhX2V4aXQoYnVzKTsgKi8KKwlzc2JfcGNtY2lhX2V4aXQoYnVzKTsKIAlzc2JfcGNpX2V4aXQoYnVzKTsKIAlzc2JfaW91bm1hcChidXMpOwogfQpAQCAtNDM2LDE1ICs0NjIsMTggQEAKICNpZmRlZiBDT05GSUdfU1NCX1BDSUhPU1QKIAkJCXNkZXYtPmlycSA9IGJ1cy0+aG9zdF9wY2ktPmlycTsKIAkJCWRldi0+cGFyZW50ID0gJmJ1cy0+aG9zdF9wY2ktPmRldjsKKwkJCXNkZXYtPmRtYV9kZXYgPSAmYnVzLT5ob3N0X3BjaS0+ZGV2OwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CiAjaWZkZWYgQ09ORklHX1NTQl9QQ01DSUFIT1NUCiAJCQlzZGV2LT5pcnEgPSBidXMtPmhvc3RfcGNtY2lhLT5pcnEuQXNzaWduZWRJUlE7CiAJCQlkZXYtPnBhcmVudCA9ICZidXMtPmhvc3RfcGNtY2lhLT5kZXY7CisJCQlzZGV2LT5kbWFfZGV2ID0gJmJ1cy0+aG9zdF9wY21jaWEtPmRldjsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgorCQkJc2Rldi0+ZG1hX2RldiA9IGRldjsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTUwNSw2ICs1MzQsMTQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdTggc3NiX3NzYl9yZWFkOChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKworCW9mZnNldCArPSBkZXYtPmNvcmVfaW5kZXggKiBTU0JfQ09SRV9TSVpFOworCXJldHVybiByZWFkYihidXMtPm1taW8gKyBvZmZzZXQpOworfQorCiBzdGF0aWMgdTE2IHNzYl9zc2JfcmVhZDE2KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQpCiB7CiAJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOwpAQCAtNTIxLDYgKzU1OCw2MyBAQAogCXJldHVybiByZWFkbChidXMtPm1taW8gKyBvZmZzZXQpOwogfQogCisjaWZkZWYgQ09ORklHX1NTQl9CTE9DS0lPCitzdGF0aWMgdm9pZCBzc2Jfc3NiX2Jsb2NrX3JlYWQoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdm9pZCAqYnVmZmVyLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgdTE2IG9mZnNldCwgdTggcmVnX3dpZHRoKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwlvZmZzZXQgKz0gZGV2LT5jb3JlX2luZGV4ICogU1NCX0NPUkVfU0laRTsKKwlhZGRyID0gYnVzLT5tbWlvICsgb2Zmc2V0OworCisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIHNpemVvZih1OCk6IHsKKwkJdTggKmJ1ZiA9IGJ1ZmZlcjsKKworCQl3aGlsZSAoY291bnQpIHsKKwkJCSpidWYgPSBfX3Jhd19yZWFkYihhZGRyKTsKKwkJCWJ1ZisrOworCQkJY291bnQtLTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBzaXplb2YodTE2KTogeworCQlfX2xlMTYgKmJ1ZiA9IGJ1ZmZlcjsKKworCQlTU0JfV0FSTl9PTihjb3VudCAmIDEpOworCQl3aGlsZSAoY291bnQpIHsKKwkJCSpidWYgPSAoX19mb3JjZSBfX2xlMTYpX19yYXdfcmVhZHcoYWRkcik7CisJCQlidWYrKzsKKwkJCWNvdW50IC09IDI7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2Ugc2l6ZW9mKHUzMik6IHsKKwkJX19sZTMyICpidWYgPSBidWZmZXI7CisKKwkJU1NCX1dBUk5fT04oY291bnQgJiAzKTsKKwkJd2hpbGUgKGNvdW50KSB7CisJCQkqYnVmID0gKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKGFkZHIpOworCQkJYnVmKys7CisJCQljb3VudCAtPSA0OworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlTU0JfV0FSTl9PTigxKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9CTE9DS0lPICovCisKK3N0YXRpYyB2b2lkIHNzYl9zc2Jfd3JpdGU4KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHU4IHZhbHVlKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKworCW9mZnNldCArPSBkZXYtPmNvcmVfaW5kZXggKiBTU0JfQ09SRV9TSVpFOworCXdyaXRlYih2YWx1ZSwgYnVzLT5tbWlvICsgb2Zmc2V0KTsKK30KKwogc3RhdGljIHZvaWQgc3NiX3NzYl93cml0ZTE2KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CkBAIC01MzcsMTIgKzYzMSw2NyBAQAogCXdyaXRlbCh2YWx1ZSwgYnVzLT5tbWlvICsgb2Zmc2V0KTsKIH0KIAorI2lmZGVmIENPTkZJR19TU0JfQkxPQ0tJTworc3RhdGljIHZvaWQgc3NiX3NzYl9ibG9ja193cml0ZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkJc2l6ZV90IGNvdW50LCB1MTYgb2Zmc2V0LCB1OCByZWdfd2lkdGgpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOworCXZvaWQgX19pb21lbSAqYWRkcjsKKworCW9mZnNldCArPSBkZXYtPmNvcmVfaW5kZXggKiBTU0JfQ09SRV9TSVpFOworCWFkZHIgPSBidXMtPm1taW8gKyBvZmZzZXQ7CisKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2Ugc2l6ZW9mKHU4KTogeworCQljb25zdCB1OCAqYnVmID0gYnVmZmVyOworCisJCXdoaWxlIChjb3VudCkgeworCQkJX19yYXdfd3JpdGViKCpidWYsIGFkZHIpOworCQkJYnVmKys7CisJCQljb3VudC0tOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIHNpemVvZih1MTYpOiB7CisJCWNvbnN0IF9fbGUxNiAqYnVmID0gYnVmZmVyOworCisJCVNTQl9XQVJOX09OKGNvdW50ICYgMSk7CisJCXdoaWxlIChjb3VudCkgeworCQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikoKmJ1ZiksIGFkZHIpOworCQkJYnVmKys7CisJCQljb3VudCAtPSAyOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIHNpemVvZih1MzIpOiB7CisJCWNvbnN0IF9fbGUzMiAqYnVmID0gYnVmZmVyOworCisJCVNTQl9XQVJOX09OKGNvdW50ICYgMyk7CisJCXdoaWxlIChjb3VudCkgeworCQkJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikoKmJ1ZiksIGFkZHIpOworCQkJYnVmKys7CisJCQljb3VudCAtPSA0OworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlTU0JfV0FSTl9PTigxKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9CTE9DS0lPICovCisKIC8qIE9wcyBmb3IgdGhlIHBsYWluIFNTQiBidXMgd2l0aG91dCBhIGhvc3QtZGV2aWNlIChubyBQQ0kgb3IgUENNQ0lBKS4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NiX2J1c19vcHMgc3NiX3NzYl9vcHMgPSB7CisJLnJlYWQ4CQk9IHNzYl9zc2JfcmVhZDgsCiAJLnJlYWQxNgkJPSBzc2Jfc3NiX3JlYWQxNiwKIAkucmVhZDMyCQk9IHNzYl9zc2JfcmVhZDMyLAorCS53cml0ZTgJCT0gc3NiX3NzYl93cml0ZTgsCiAJLndyaXRlMTYJPSBzc2Jfc3NiX3dyaXRlMTYsCiAJLndyaXRlMzIJPSBzc2Jfc3NiX3dyaXRlMzIsCisjaWZkZWYgQ09ORklHX1NTQl9CTE9DS0lPCisJLmJsb2NrX3JlYWQJPSBzc2Jfc3NiX2Jsb2NrX3JlYWQsCisJLmJsb2NrX3dyaXRlCT0gc3NiX3NzYl9ibG9ja193cml0ZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBzc2JfZmV0Y2hfaW52YXJpYW50cyhzdHJ1Y3Qgc3NiX2J1cyAqYnVzLApAQCAtNTU3LDYgKzcwNiw3IEBACiAJCWdvdG8gb3V0OwogCW1lbWNweSgmYnVzLT5ib2FyZGluZm8sICZpdi5ib2FyZGluZm8sIHNpemVvZihpdi5ib2FyZGluZm8pKTsKIAltZW1jcHkoJmJ1cy0+c3Byb20sICZpdi5zcHJvbSwgc2l6ZW9mKGl2LnNwcm9tKSk7CisJYnVzLT5oYXNfY2FyZGJ1c19zbG90ID0gaXYuaGFzX2NhcmRidXNfc2xvdDsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTY5LDYgKzcxOSw5IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmYnVzLT5iYXJfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmJ1cy0+bGlzdCk7CisjaWZkZWYgQ09ORklHX1NTQl9FTUJFRERFRAorCXNwaW5fbG9ja19pbml0KCZidXMtPmdwaW9fbG9jayk7CisjZW5kaWYKIAogCS8qIFBvd2VydXAgdGhlIGJ1cyAqLwogCWVyciA9IHNzYl9wY2lfeHRhbChidXMsIFNTQl9HUElPX1hUQUwgfCBTU0JfR1BJT19QTEwsIDEpOwpAQCAtNjIxLDcgKzc3NCw3IEBACiBlcnJfZGVxdWV1ZToKIAlsaXN0X2RlbCgmYnVzLT5saXN0KTsKIGVycl9wY21jaWFfZXhpdDoKLS8qCXNzYl9wY21jaWFfZXhpdChidXMpOyAqLworCXNzYl9wY21jaWFfZXhpdChidXMpOwogZXJyX3BjaV9leGl0OgogCXNzYl9wY2lfZXhpdChidXMpOwogZXJyX3VubWFwOgpAQCAtMTAwMyw5ICsxMTU2LDkgQEAKIHsKIAlzd2l0Y2ggKGRldi0+YnVzLT5idXN0eXBlKSB7CiAJY2FzZSBTU0JfQlVTVFlQRV9TU0I6CisJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CiAJCXJldHVybiAwOwogCWNhc2UgU1NCX0JVU1RZUEVfUENJOgotCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgogCQlyZXR1cm4gU1NCX1BDSV9ETUE7CiAJfQogCXJldHVybiAwOwpAQCAtMTAxNCwxNSArMTE2NywxNCBAQAogCiBpbnQgc3NiX2RtYV9zZXRfbWFzayhzdHJ1Y3Qgc3NiX2RldmljZSAqc3NiX2RldiwgdTY0IG1hc2spCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gc3NiX2Rldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBzc2JfZGV2LT5kbWFfZGV2OwogCiAjaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCi0JaWYgKHNzYl9kZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kgJiYKLQkgICAgIWRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKLQkJcmV0dXJuIC1FSU87CisJaWYgKHNzYl9kZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpCisJCXJldHVybiBkbWFfc2V0X21hc2soZG1hX2RldiwgbWFzayk7CiAjZW5kaWYKLQlkZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gbWFzazsKLQlkZXYtPmRtYV9tYXNrID0gJmRldi0+Y29oZXJlbnRfZG1hX21hc2s7CisJZG1hX2Rldi0+Y29oZXJlbnRfZG1hX21hc2sgPSBtYXNrOworCWRtYV9kZXYtPmRtYV9tYXNrID0gJmRtYV9kZXYtPmNvaGVyZW50X2RtYV9tYXNrOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDQwLDYgKzExOTIsMTIgQEAKIAkJZ290byBvdXQ7CiAKIAljYyA9ICZidXMtPmNoaXBjbzsKKworCWlmICghY2MtPmRldikKKwkJZ290byBvdXQ7CisJaWYgKGNjLT5kZXYtPmlkLnJldmlzaW9uIDwgNSkKKwkJZ290byBvdXQ7CisKIAlzc2JfY2hpcGNvX3NldF9jbG9ja21vZGUoY2MsIFNTQl9DTEtNT0RFX1NMT1cpOwogCWVyciA9IHNzYl9wY2lfeHRhbChidXMsIFNTQl9HUElPX1hUQUwgfCBTU0JfR1BJT19QTEwsIDApOwogCWlmIChlcnIpCkBAIC0xMTQ5LDcgKzEzMDcsMTQgQEAKIAllcnIgPSBiNDNfcGNpX3NzYl9icmlkZ2VfaW5pdCgpOwogCWlmIChlcnIpIHsKIAkJc3NiX3ByaW50ayhLRVJOX0VSUiAiQnJvYWRjb20gNDN4eCBQQ0ktU1NCLWJyaWRnZSAiCi0JCQkgICAiaW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisJCQkgICAiaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJLyogZG9uJ3QgZmFpbCBTU0IgaW5pdCBiZWNhdXNlIG9mIHRoaXMgKi8KKwkJZXJyID0gMDsKKwl9CisJZXJyID0gc3NiX2dpZ2VfaW5pdCgpOworCWlmIChlcnIpIHsKKwkJc3NiX3ByaW50ayhLRVJOX0VSUiAiU1NCIEJyb2FkY29tIEdpZ2FiaXQgRXRoZXJuZXQgIgorCQkJICAgImRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQkvKiBkb24ndCBmYWlsIFNTQiBpbml0IGJlY2F1c2Ugb2YgdGhpcyAqLwogCQllcnIgPSAwOwogCX0KQEAgLTExNjMsNiArMTMyOCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzc2JfbW9kZXhpdCh2b2lkKQogeworCXNzYl9naWdlX2V4aXQoKTsKIAliNDNfcGNpX3NzYl9icmlkZ2VfZXhpdCgpOwogCWJ1c191bnJlZ2lzdGVyKCZzc2JfYnVzdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2kuYyBiL2RyaXZlcnMvc3NiL3BjaS5jCmluZGV4IGI0MzRkZjcuLjkwNGIxYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2kuYworKysgYi9kcml2ZXJzL3NzYi9wY2kuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJcmV0dXJuIGNyYzsKIH0KIAotc3RhdGljIGludCBzcHJvbV9jaGVja19jcmMoY29uc3QgdTE2ICpzcHJvbSwgdTE2IHNpemUpCitzdGF0aWMgaW50IHNwcm9tX2NoZWNrX2NyYyhjb25zdCB1MTYgKnNwcm9tLCBzaXplX3Qgc2l6ZSkKIHsKIAl1OCBjcmM7CiAJdTggZXhwZWN0ZWRfY3JjOwpAQCAtMjQyLDEyICsyNDIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3Byb21fZG9fcmVhZChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MTYgKnNwcm9tKQorc3RhdGljIGludCBzcHJvbV9kb19yZWFkKHN0cnVjdCBzc2JfYnVzICpidXMsIHUxNiAqc3Byb20pCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnVzLT5zcHJvbV9zaXplOyBpKyspCiAJCXNwcm9tW2ldID0gaW9yZWFkMTYoYnVzLT5tbWlvICsgU1NCX1NQUk9NX0JBU0UgKyAoaSAqIDIpKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNwcm9tX2RvX3dyaXRlKHN0cnVjdCBzc2JfYnVzICpidXMsIGNvbnN0IHUxNiAqc3Byb20pCkBAIC01NzIsNiArNTc0LDE5IEBACiB9CiAjZW5kaWYgLyogREVCVUcgKi8KIAorc3RhdGljIHU4IHNzYl9wY2lfcmVhZDgoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisKKwlpZiAodW5saWtlbHkoc3NiX3BjaV9hc3NlcnRfYnVzcG93ZXIoYnVzKSkpCisJCXJldHVybiAweEZGOworCWlmICh1bmxpa2VseShidXMtPm1hcHBlZF9kZXZpY2UgIT0gZGV2KSkgeworCQlpZiAodW5saWtlbHkoc3NiX3BjaV9zd2l0Y2hfY29yZShidXMsIGRldikpKQorCQkJcmV0dXJuIDB4RkY7CisJfQorCXJldHVybiBpb3JlYWQ4KGJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKIHN0YXRpYyB1MTYgc3NiX3BjaV9yZWFkMTYoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCkKIHsKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CkBAIC01OTgsNiArNjEzLDU0IEBACiAJcmV0dXJuIGlvcmVhZDMyKGJ1cy0+bW1pbyArIG9mZnNldCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1NCX0JMT0NLSU8KK3N0YXRpYyB2b2lkIHNzYl9wY2lfYmxvY2tfcmVhZChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB2b2lkICpidWZmZXIsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCB1MTYgb2Zmc2V0LCB1OCByZWdfd2lkdGgpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOworCXZvaWQgX19pb21lbSAqYWRkciA9IGJ1cy0+bW1pbyArIG9mZnNldDsKKworCWlmICh1bmxpa2VseShzc2JfcGNpX2Fzc2VydF9idXNwb3dlcihidXMpKSkKKwkJZ290byBlcnJvcjsKKwlpZiAodW5saWtlbHkoYnVzLT5tYXBwZWRfZGV2aWNlICE9IGRldikpIHsKKwkJaWYgKHVubGlrZWx5KHNzYl9wY2lfc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkKKwkJCWdvdG8gZXJyb3I7CisJfQorCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSBzaXplb2YodTgpOgorCQlpb3JlYWQ4X3JlcChhZGRyLCBidWZmZXIsIGNvdW50KTsKKwkJYnJlYWs7CisJY2FzZSBzaXplb2YodTE2KToKKwkJU1NCX1dBUk5fT04oY291bnQgJiAxKTsKKwkJaW9yZWFkMTZfcmVwKGFkZHIsIGJ1ZmZlciwgY291bnQgPj4gMSk7CisJCWJyZWFrOworCWNhc2Ugc2l6ZW9mKHUzMik6CisJCVNTQl9XQVJOX09OKGNvdW50ICYgMyk7CisJCWlvcmVhZDMyX3JlcChhZGRyLCBidWZmZXIsIGNvdW50ID4+IDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlTU0JfV0FSTl9PTigxKTsKKwl9CisKKwlyZXR1cm47CitlcnJvcjoKKwltZW1zZXQoYnVmZmVyLCAweEZGLCBjb3VudCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9CTE9DS0lPICovCisKK3N0YXRpYyB2b2lkIHNzYl9wY2lfd3JpdGU4KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHU4IHZhbHVlKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKworCWlmICh1bmxpa2VseShzc2JfcGNpX2Fzc2VydF9idXNwb3dlcihidXMpKSkKKwkJcmV0dXJuOworCWlmICh1bmxpa2VseShidXMtPm1hcHBlZF9kZXZpY2UgIT0gZGV2KSkgeworCQlpZiAodW5saWtlbHkoc3NiX3BjaV9zd2l0Y2hfY29yZShidXMsIGRldikpKQorCQkJcmV0dXJuOworCX0KKwlpb3dyaXRlOCh2YWx1ZSwgYnVzLT5tbWlvICsgb2Zmc2V0KTsKK30KKwogc3RhdGljIHZvaWQgc3NiX3BjaV93cml0ZTE2KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CkBAIC02MjQsNzkgKzY4Nyw2MyBAQAogCWlvd3JpdGUzMih2YWx1ZSwgYnVzLT5tbWlvICsgb2Zmc2V0KTsKIH0KIAorI2lmZGVmIENPTkZJR19TU0JfQkxPQ0tJTworc3RhdGljIHZvaWQgc3NiX3BjaV9ibG9ja193cml0ZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkJc2l6ZV90IGNvdW50LCB1MTYgb2Zmc2V0LCB1OCByZWdfd2lkdGgpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOworCXZvaWQgX19pb21lbSAqYWRkciA9IGJ1cy0+bW1pbyArIG9mZnNldDsKKworCWlmICh1bmxpa2VseShzc2JfcGNpX2Fzc2VydF9idXNwb3dlcihidXMpKSkKKwkJcmV0dXJuOworCWlmICh1bmxpa2VseShidXMtPm1hcHBlZF9kZXZpY2UgIT0gZGV2KSkgeworCQlpZiAodW5saWtlbHkoc3NiX3BjaV9zd2l0Y2hfY29yZShidXMsIGRldikpKQorCQkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2Ugc2l6ZW9mKHU4KToKKwkJaW93cml0ZThfcmVwKGFkZHIsIGJ1ZmZlciwgY291bnQpOworCQlicmVhazsKKwljYXNlIHNpemVvZih1MTYpOgorCQlTU0JfV0FSTl9PTihjb3VudCAmIDEpOworCQlpb3dyaXRlMTZfcmVwKGFkZHIsIGJ1ZmZlciwgY291bnQgPj4gMSk7CisJCWJyZWFrOworCWNhc2Ugc2l6ZW9mKHUzMik6CisJCVNTQl9XQVJOX09OKGNvdW50ICYgMyk7CisJCWlvd3JpdGUzMl9yZXAoYWRkciwgYnVmZmVyLCBjb3VudCA+PiAyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQorfQorI2VuZGlmIC8qIENPTkZJR19TU0JfQkxPQ0tJTyAqLworCiAvKiBOb3QgInN0YXRpYyIsIGFzIGl0J3MgdXNlZCBpbiBtYWluLmMgKi8KIGNvbnN0IHN0cnVjdCBzc2JfYnVzX29wcyBzc2JfcGNpX29wcyA9IHsKKwkucmVhZDgJCT0gc3NiX3BjaV9yZWFkOCwKIAkucmVhZDE2CQk9IHNzYl9wY2lfcmVhZDE2LAogCS5yZWFkMzIJCT0gc3NiX3BjaV9yZWFkMzIsCisJLndyaXRlOAkJPSBzc2JfcGNpX3dyaXRlOCwKIAkud3JpdGUxNgk9IHNzYl9wY2lfd3JpdGUxNiwKIAkud3JpdGUzMgk9IHNzYl9wY2lfd3JpdGUzMiwKKyNpZmRlZiBDT05GSUdfU1NCX0JMT0NLSU8KKwkuYmxvY2tfcmVhZAk9IHNzYl9wY2lfYmxvY2tfcmVhZCwKKwkuYmxvY2tfd3JpdGUJPSBzc2JfcGNpX2Jsb2NrX3dyaXRlLAorI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IHNwcm9tMmhleChjb25zdCB1MTYgKnNwcm9tLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCB1MTYgc2l6ZSkKLXsKLQlpbnQgaSwgcG9zID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIGJ1Zl9sZW4gLSBwb3MgLSAxLAotCQkJCSIlMDRYIiwgc3dhYjE2KHNwcm9tW2ldKSAmIDB4RkZGRik7Ci0JcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgYnVmX2xlbiAtIHBvcyAtIDEsICJcbiIpOwotCi0JcmV0dXJuIHBvcyArIDE7Ci19Ci0KLXN0YXRpYyBpbnQgaGV4MnNwcm9tKHUxNiAqc3Byb20sIGNvbnN0IGNoYXIgKmR1bXAsIHNpemVfdCBsZW4sIHUxNiBzaXplKQotewotCWNoYXIgdG1wWzVdID0geyAwIH07Ci0JaW50IGNudCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBwYXJzZWQ7Ci0KLQlpZiAobGVuIDwgc2l6ZSAqIDIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd2hpbGUgKGNudCA8IHNpemUpIHsKLQkJbWVtY3B5KHRtcCwgZHVtcCwgNCk7Ci0JCWR1bXAgKz0gNDsKLQkJcGFyc2VkID0gc2ltcGxlX3N0cnRvdWwodG1wLCBOVUxMLCAxNik7Ci0JCXNwcm9tW2NudCsrXSA9IHN3YWIxNigodTE2KXBhcnNlZCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNzYl9wY2lfYXR0cl9zcHJvbV9zaG93KHN0cnVjdCBkZXZpY2UgKnBjaWRldiwKIAkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGNvbnRhaW5lcl9vZihwY2lkZXYsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOwogCXN0cnVjdCBzc2JfYnVzICpidXM7Ci0JdTE2ICpzcHJvbTsKLQlpbnQgZXJyID0gLUVOT0RFVjsKLQlzc2l6ZV90IGNvdW50ID0gMDsKIAogCWJ1cyA9IHNzYl9wY2lfZGV2X3RvX2J1cyhwZGV2KTsKIAlpZiAoIWJ1cykKLQkJZ290byBvdXQ7Ci0JZXJyID0gLUVOT01FTTsKLQlzcHJvbSA9IGtjYWxsb2MoYnVzLT5zcHJvbV9zaXplLCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcHJvbSkKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRU5PREVWOwogCi0JLyogVXNlIGludGVycnVwdGlibGUgbG9ja2luZywgYXMgdGhlIFNQUk9NIHdyaXRlIG1pZ2h0Ci0JICogYmUgaG9sZGluZyB0aGUgbG9jayBmb3Igc2V2ZXJhbCBzZWNvbmRzLiBTbyBhbGxvdyB1c2Vyc3BhY2UKLQkgKiB0byBjYW5jZWwgb3BlcmF0aW9uLiAqLwotCWVyciA9IC1FUkVTVEFSVFNZUzsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZidXMtPnBjaV9zcHJvbV9tdXRleCkpCi0JCWdvdG8gb3V0X2tmcmVlOwotCXNwcm9tX2RvX3JlYWQoYnVzLCBzcHJvbSk7Ci0JbXV0ZXhfdW5sb2NrKCZidXMtPnBjaV9zcHJvbV9tdXRleCk7Ci0KLQljb3VudCA9IHNwcm9tMmhleChzcHJvbSwgYnVmLCBQQUdFX1NJWkUsIGJ1cy0+c3Byb21fc2l6ZSk7Ci0JZXJyID0gMDsKLQotb3V0X2tmcmVlOgotCWtmcmVlKHNwcm9tKTsKLW91dDoKLQlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CisJcmV0dXJuIHNzYl9hdHRyX3Nwcm9tX3Nob3coYnVzLCBidWYsIHNwcm9tX2RvX3JlYWQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzc2JfcGNpX2F0dHJfc3Byb21fc3RvcmUoc3RydWN0IGRldmljZSAqcGNpZGV2LApAQCAtNzA1LDU1ICs3NTIsMTMgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGNvbnRhaW5lcl9vZihwY2lkZXYsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOwogCXN0cnVjdCBzc2JfYnVzICpidXM7Ci0JdTE2ICpzcHJvbTsKLQlpbnQgcmVzID0gMCwgZXJyID0gLUVOT0RFVjsKIAogCWJ1cyA9IHNzYl9wY2lfZGV2X3RvX2J1cyhwZGV2KTsKIAlpZiAoIWJ1cykKLQkJZ290byBvdXQ7Ci0JZXJyID0gLUVOT01FTTsKLQlzcHJvbSA9IGtjYWxsb2MoYnVzLT5zcHJvbV9zaXplLCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcHJvbSkKLQkJZ290byBvdXQ7Ci0JZXJyID0gaGV4MnNwcm9tKHNwcm9tLCBidWYsIGNvdW50LCBidXMtPnNwcm9tX3NpemUpOwotCWlmIChlcnIpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXRfa2ZyZWU7Ci0JfQotCWVyciA9IHNwcm9tX2NoZWNrX2NyYyhzcHJvbSwgYnVzLT5zcHJvbV9zaXplKTsKLQlpZiAoZXJyKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2tmcmVlOwotCX0KKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBVc2UgaW50ZXJydXB0aWJsZSBsb2NraW5nLCBhcyB0aGUgU1BST00gd3JpdGUgbWlnaHQKLQkgKiBiZSBob2xkaW5nIHRoZSBsb2NrIGZvciBzZXZlcmFsIHNlY29uZHMuIFNvIGFsbG93IHVzZXJzcGFjZQotCSAqIHRvIGNhbmNlbCBvcGVyYXRpb24uICovCi0JZXJyID0gLUVSRVNUQVJUU1lTOwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJ1cy0+cGNpX3Nwcm9tX211dGV4KSkKLQkJZ290byBvdXRfa2ZyZWU7Ci0JZXJyID0gc3NiX2RldmljZXNfZnJlZXplKGJ1cyk7Ci0JaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkgewotCQlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWCAiU1BST00gd3JpdGU6IENvdWxkIG5vdCBmcmVlemUgZGV2aWNlcy4gIgotCQkJICAgIk5vIHN1c3BlbmQgc3VwcG9ydC4gSXMgQ09ORklHX1BNIGVuYWJsZWQ/XG4iKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQlpZiAoZXJyKSB7Ci0JCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYICJTUFJPTSB3cml0ZTogQ291bGQgbm90IGZyZWV6ZSBhbGwgZGV2aWNlc1xuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0JcmVzID0gc3Byb21fZG9fd3JpdGUoYnVzLCBzcHJvbSk7Ci0JZXJyID0gc3NiX2RldmljZXNfdGhhdyhidXMpOwotCWlmIChlcnIpCi0JCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYICJTUFJPTSB3cml0ZTogQ291bGQgbm90IHRoYXcgYWxsIGRldmljZXNcbiIpOwotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJmJ1cy0+cGNpX3Nwcm9tX211dGV4KTsKLW91dF9rZnJlZToKLQlrZnJlZShzcHJvbSk7Ci1vdXQ6Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CisJcmV0dXJuIHNzYl9hdHRyX3Nwcm9tX3N0b3JlKGJ1cywgYnVmLCBjb3VudCwKKwkJCQkgICAgc3Byb21fY2hlY2tfY3JjLCBzcHJvbV9kb193cml0ZSk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihzc2Jfc3Byb20sIDA2MDAsCkBAIC03ODAsNyArNzg1LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlwZGV2ID0gYnVzLT5ob3N0X3BjaTsKLQltdXRleF9pbml0KCZidXMtPnBjaV9zcHJvbV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmYnVzLT5zcHJvbV9tdXRleCk7CiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9zc2Jfc3Byb20pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNpaG9zdF93cmFwcGVyLmMgYi9kcml2ZXJzL3NzYi9wY2lob3N0X3dyYXBwZXIuYwppbmRleCA4MmExMGFiLi5lODJkYjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2lob3N0X3dyYXBwZXIuYworKysgYi9kcml2ZXJzL3NzYi9wY2lob3N0X3dyYXBwZXIuYwpAQCAtMTgsNiArMTgsMTIgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc3NiX3BjaWhvc3Rfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IHNzYl9idXMgKnNzYiA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnI7CisKKwllcnIgPSBzc2JfYnVzX3N1c3BlbmQoc3NiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCXBjaV9zYXZlX3N0YXRlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSkpOwpAQCAtMjcsNiArMzMsNyBAQAogCiBzdGF0aWMgaW50IHNzYl9wY2lob3N0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogeworCXN0cnVjdCBzc2JfYnVzICpzc2IgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgZXJyOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDApOwpAQCAtMzQsNiArNDEsOSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKKwllcnIgPSBzc2JfYnVzX3Jlc3VtZShzc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKaW5kZXggNDY4MTZjZC4uMjRjMmE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvcGNtY2lhLmMKKysrIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKQEAgLTMsNyArMyw3IEBACiAgKiBQQ01DSUEtSG9zdGJ1cyByZWxhdGVkIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAwNyBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KICAqLwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpAQCAtMjYsNTkgKzI3LDEyNyBAQAogI2RlZmluZSBTU0JfVkVSQk9TRV9QQ01DSUFDT1JFU1dJVENIX0RFQlVHCQkwCiAKIAorLyogUENNQ0lBIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTQl9QQ01DSUFfQUREUkVTUzAJCTB4MkUKKyNkZWZpbmUgU1NCX1BDTUNJQV9BRERSRVNTMQkJMHgzMAorI2RlZmluZSBTU0JfUENNQ0lBX0FERFJFU1MyCQkweDMyCisjZGVmaW5lIFNTQl9QQ01DSUFfTUVNU0VHCQkweDM0CisjZGVmaW5lIFNTQl9QQ01DSUFfU1BST01DVEwJCTB4MzYKKyNkZWZpbmUgIFNTQl9QQ01DSUFfU1BST01DVExfSURMRQkwCisjZGVmaW5lICBTU0JfUENNQ0lBX1NQUk9NQ1RMX1dSSVRFCTEKKyNkZWZpbmUgIFNTQl9QQ01DSUFfU1BST01DVExfUkVBRAkyCisjZGVmaW5lICBTU0JfUENNQ0lBX1NQUk9NQ1RMX1dSSVRFRU4JNAorI2RlZmluZSAgU1NCX1BDTUNJQV9TUFJPTUNUTF9XUklURURJUwk3CisjZGVmaW5lICBTU0JfUENNQ0lBX1NQUk9NQ1RMX0RPTkUJOAorI2RlZmluZSBTU0JfUENNQ0lBX1NQUk9NX0RBVEFMTwkJMHgzOAorI2RlZmluZSBTU0JfUENNQ0lBX1NQUk9NX0RBVEFISQkJMHgzQQorI2RlZmluZSBTU0JfUENNQ0lBX1NQUk9NX0FERFJMTwkJMHgzQworI2RlZmluZSBTU0JfUENNQ0lBX1NQUk9NX0FERFJISQkJMHgzRQorCisvKiBIYXJkd2FyZSBpbnZhcmlhbnRzIENJUyB0dXBsZXMgKi8KKyNkZWZpbmUgU1NCX1BDTUNJQV9DSVMJCQkweDgwCisjZGVmaW5lICBTU0JfUENNQ0lBX0NJU19JRAkJMHgwMQorI2RlZmluZSAgU1NCX1BDTUNJQV9DSVNfQk9BUkRSRVYJMHgwMgorI2RlZmluZSAgU1NCX1BDTUNJQV9DSVNfUEEJCTB4MDMKKyNkZWZpbmUgICBTU0JfUENNQ0lBX0NJU19QQV9QQTBCMF9MTwkwCisjZGVmaW5lICAgU1NCX1BDTUNJQV9DSVNfUEFfUEEwQjBfSEkJMQorI2RlZmluZSAgIFNTQl9QQ01DSUFfQ0lTX1BBX1BBMEIxX0xPCTIKKyNkZWZpbmUgICBTU0JfUENNQ0lBX0NJU19QQV9QQTBCMV9ISQkzCisjZGVmaW5lICAgU1NCX1BDTUNJQV9DSVNfUEFfUEEwQjJfTE8JNAorI2RlZmluZSAgIFNTQl9QQ01DSUFfQ0lTX1BBX1BBMEIyX0hJCTUKKyNkZWZpbmUgICBTU0JfUENNQ0lBX0NJU19QQV9JVFNTSQk2CisjZGVmaW5lICAgU1NCX1BDTUNJQV9DSVNfUEFfTUFYUE9XCTcKKyNkZWZpbmUgIFNTQl9QQ01DSUFfQ0lTX09FTU5BTUUJCTB4MDQKKyNkZWZpbmUgIFNTQl9QQ01DSUFfQ0lTX0NDT0RFCQkweDA1CisjZGVmaW5lICBTU0JfUENNQ0lBX0NJU19BTlRFTk5BCQkweDA2CisjZGVmaW5lICBTU0JfUENNQ0lBX0NJU19BTlRHQUlOCQkweDA3CisjZGVmaW5lICBTU0JfUENNQ0lBX0NJU19CRkxBR1MJCTB4MDgKKyNkZWZpbmUgIFNTQl9QQ01DSUFfQ0lTX0xFRFMJCTB4MDkKKworLyogUENNQ0lBIFNQUk9NIHNpemUuICovCisjZGVmaW5lIFNTQl9QQ01DSUFfU1BST01fU0laRQkJMjU2CisjZGVmaW5lIFNTQl9QQ01DSUFfU1BST01fU0laRV9CWVRFUwkoU1NCX1BDTUNJQV9TUFJPTV9TSVpFICogc2l6ZW9mKHUxNikpCisKKworLyogV3JpdGUgdG8gYSBQQ01DSUEgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8KK3N0YXRpYyBpbnQgc3NiX3BjbWNpYV9jZmdfd3JpdGUoc3RydWN0IHNzYl9idXMgKmJ1cywgdTggb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwljb25mX3JlZ190IHJlZzsKKwlpbnQgcmVzOworCisJbWVtc2V0KCZyZWcsIDAsIHNpemVvZihyZWcpKTsKKwlyZWcuT2Zmc2V0ID0gb2Zmc2V0OworCXJlZy5BY3Rpb24gPSBDU19XUklURTsKKwlyZWcuVmFsdWUgPSB2YWx1ZTsKKwlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoYnVzLT5ob3N0X3BjbWNpYSwgJnJlZyk7CisJaWYgKHVubGlrZWx5KHJlcyAhPSBDU19TVUNDRVNTKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCisvKiBSZWFkIGZyb20gYSBQQ01DSUEgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8KK3N0YXRpYyBpbnQgc3NiX3BjbWNpYV9jZmdfcmVhZChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1OCBvZmZzZXQsIHU4ICp2YWx1ZSkKK3sKKwljb25mX3JlZ190IHJlZzsKKwlpbnQgcmVzOworCisJbWVtc2V0KCZyZWcsIDAsIHNpemVvZihyZWcpKTsKKwlyZWcuT2Zmc2V0ID0gb2Zmc2V0OworCXJlZy5BY3Rpb24gPSBDU19SRUFEOworCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihidXMtPmhvc3RfcGNtY2lhLCAmcmVnKTsKKwlpZiAodW5saWtlbHkocmVzICE9IENTX1NVQ0NFU1MpKQorCQlyZXR1cm4gLUVCVVNZOworCSp2YWx1ZSA9IHJlZy5WYWx1ZTsKKworCXJldHVybiAwOworfQorCiBpbnQgc3NiX3BjbWNpYV9zd2l0Y2hfY29yZWlkeChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAogCQkJICAgICAgdTggY29yZWlkeCkKIHsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldiA9IGJ1cy0+aG9zdF9wY21jaWE7CiAJaW50IGVycjsKIAlpbnQgYXR0ZW1wdHMgPSAwOwogCXUzMiBjdXJfY29yZTsKLQljb25mX3JlZ190IHJlZzsKIAl1MzIgYWRkcjsKIAl1MzIgcmVhZF9hZGRyOworCXU4IHZhbDsKIAogCWFkZHIgPSAoY29yZWlkeCAqIFNTQl9DT1JFX1NJWkUpICsgU1NCX0VOVU1fQkFTRTsKIAl3aGlsZSAoMSkgewotCQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JCXJlZy5PZmZzZXQgPSAweDJFOwotCQlyZWcuVmFsdWUgPSAoYWRkciAmIDB4MDAwMEYwMDApID4+IDEyOwotCQllcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocGRldiwgJnJlZyk7Ci0JCWlmIChlcnIgIT0gQ1NfU1VDQ0VTUykKKwkJZXJyID0gc3NiX3BjbWNpYV9jZmdfd3JpdGUoYnVzLCBTU0JfUENNQ0lBX0FERFJFU1MwLAorCQkJCQkgICAoYWRkciAmIDB4MDAwMEYwMDApID4+IDEyKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7Ci0JCXJlZy5PZmZzZXQgPSAweDMwOwotCQlyZWcuVmFsdWUgPSAoYWRkciAmIDB4MDBGRjAwMDApID4+IDE2OwotCQllcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocGRldiwgJnJlZyk7Ci0JCWlmIChlcnIgIT0gQ1NfU1VDQ0VTUykKKwkJZXJyID0gc3NiX3BjbWNpYV9jZmdfd3JpdGUoYnVzLCBTU0JfUENNQ0lBX0FERFJFU1MxLAorCQkJCQkgICAoYWRkciAmIDB4MDBGRjAwMDApID4+IDE2KTsKKwkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7Ci0JCXJlZy5PZmZzZXQgPSAweDMyOwotCQlyZWcuVmFsdWUgPSAoYWRkciAmIDB4RkYwMDAwMDApID4+IDI0OwotCQllcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocGRldiwgJnJlZyk7Ci0JCWlmIChlcnIgIT0gQ1NfU1VDQ0VTUykKKwkJZXJyID0gc3NiX3BjbWNpYV9jZmdfd3JpdGUoYnVzLCBTU0JfUENNQ0lBX0FERFJFU1MyLAorCQkJCQkgICAoYWRkciAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiAKIAkJcmVhZF9hZGRyID0gMDsKIAotCQlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKLQkJcmVnLk9mZnNldCA9IDB4MkU7Ci0JCWVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihwZGV2LCAmcmVnKTsKLQkJaWYgKGVyciAhPSBDU19TVUNDRVNTKQorCQllcnIgPSBzc2JfcGNtY2lhX2NmZ19yZWFkKGJ1cywgU1NCX1BDTUNJQV9BRERSRVNTMCwgJnZhbCk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwotCQlyZWFkX2FkZHIgfD0gKCh1MzIpKHJlZy5WYWx1ZSAmIDB4MEYpKSA8PCAxMjsKLQkJcmVnLk9mZnNldCA9IDB4MzA7Ci0JCWVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihwZGV2LCAmcmVnKTsKLQkJaWYgKGVyciAhPSBDU19TVUNDRVNTKQorCQlyZWFkX2FkZHIgfD0gKCh1MzIpKHZhbCAmIDB4MEYpKSA8PCAxMjsKKwkJZXJyID0gc3NiX3BjbWNpYV9jZmdfcmVhZChidXMsIFNTQl9QQ01DSUFfQUREUkVTUzEsICZ2YWwpOworCQlpZiAoZXJyKQogCQkJZ290byBlcnJvcjsKLQkJcmVhZF9hZGRyIHw9ICgodTMyKXJlZy5WYWx1ZSkgPDwgMTY7Ci0JCXJlZy5PZmZzZXQgPSAweDMyOwotCQllcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocGRldiwgJnJlZyk7Ci0JCWlmIChlcnIgIT0gQ1NfU1VDQ0VTUykKKwkJcmVhZF9hZGRyIHw9ICgodTMyKXZhbCkgPDwgMTY7CisJCWVyciA9IHNzYl9wY21jaWFfY2ZnX3JlYWQoYnVzLCBTU0JfUENNQ0lBX0FERFJFU1MyLCAmdmFsKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7Ci0JCXJlYWRfYWRkciB8PSAoKHUzMilyZWcuVmFsdWUpIDw8IDI0OworCQlyZWFkX2FkZHIgfD0gKCh1MzIpdmFsKSA8PCAyNDsKIAogCQljdXJfY29yZSA9IChyZWFkX2FkZHIgLSBTU0JfRU5VTV9CQVNFKSAvIFNTQl9DT1JFX1NJWkU7CiAJCWlmIChjdXJfY29yZSA9PSBjb3JlaWR4KQogCQkJYnJlYWs7CiAKKwkJZXJyID0gLUVUSU1FRE9VVDsKIAkJaWYgKGF0dGVtcHRzKysgPiBTU0JfQkFSMF9NQVhfUkVUUklFUykKIAkJCWdvdG8gZXJyb3I7CiAJCXVkZWxheSgxMCk7CkBAIC04Nyw3ICsxNTYsNyBAQAogCXJldHVybiAwOwogZXJyb3I6CiAJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBzd2l0Y2ggdG8gY29yZSAldVxuIiwgY29yZWlkeCk7Ci0JcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHNzYl9wY21jaWFfc3dpdGNoX2NvcmUoc3RydWN0IHNzYl9idXMgKmJ1cywKQEAgLTExMiwyNyArMTgxLDIxIEBACiBpbnQgc3NiX3BjbWNpYV9zd2l0Y2hfc2VnbWVudChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1OCBzZWcpCiB7CiAJaW50IGF0dGVtcHRzID0gMDsKLQljb25mX3JlZ190IHJlZzsKLQlpbnQgcmVzOworCWludCBlcnI7CisJdTggdmFsOwogCiAJU1NCX1dBUk5fT04oKHNlZyAhPSAwKSAmJiAoc2VnICE9IDEpKTsKLQlyZWcuT2Zmc2V0ID0gMHgzNDsKLQlyZWcuRnVuY3Rpb24gPSAwOwogCXdoaWxlICgxKSB7Ci0JCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQkJcmVnLlZhbHVlID0gc2VnOwotCQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoYnVzLT5ob3N0X3BjbWNpYSwgJnJlZyk7Ci0JCWlmICh1bmxpa2VseShyZXMgIT0gQ1NfU1VDQ0VTUykpCisJCWVyciA9IHNzYl9wY21jaWFfY2ZnX3dyaXRlKGJ1cywgU1NCX1BDTUNJQV9NRU1TRUcsIHNlZyk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwotCQlyZWcuVmFsdWUgPSAweEZGOwotCQlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKLQkJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGJ1cy0+aG9zdF9wY21jaWEsICZyZWcpOwotCQlpZiAodW5saWtlbHkocmVzICE9IENTX1NVQ0NFU1MpKQorCQllcnIgPSBzc2JfcGNtY2lhX2NmZ19yZWFkKGJ1cywgU1NCX1BDTUNJQV9NRU1TRUcsICZ2YWwpOworCQlpZiAoZXJyKQogCQkJZ290byBlcnJvcjsKLQotCQlpZiAocmVnLlZhbHVlID09IHNlZykKKwkJaWYgKHZhbCA9PSBzZWcpCiAJCQlicmVhazsKIAorCQllcnIgPSAtRVRJTUVET1VUOwogCQlpZiAodW5saWtlbHkoYXR0ZW1wdHMrKyA+IFNTQl9CQVIwX01BWF9SRVRSSUVTKSkKIAkJCWdvdG8gZXJyb3I7CiAJCXVkZWxheSgxMCk7CkBAIC0xNDIsNyArMjA1LDcgQEAKIAlyZXR1cm4gMDsKIGVycm9yOgogCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gc3dpdGNoIHBjbWNpYSBzZWdtZW50XG4iKTsKLQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNlbGVjdF9jb3JlX2FuZF9zZWdtZW50KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsCkBAIC0xNzIsNiArMjM1LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1OCBzc2JfcGNtY2lhX3JlYWQ4KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKwl1OCB2YWx1ZSA9IDB4RkY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzLT5iYXJfbG9jaywgZmxhZ3MpOworCWVyciA9IHNlbGVjdF9jb3JlX2FuZF9zZWdtZW50KGRldiwgJm9mZnNldCk7CisJaWYgKGxpa2VseSghZXJyKSkKKwkJdmFsdWUgPSByZWFkYihidXMtPm1taW8gKyBvZmZzZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1cy0+YmFyX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB2YWx1ZTsKK30KKwogc3RhdGljIHUxNiBzc2JfcGNtY2lhX3JlYWQxNihzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0KQogewogCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKQEAgLTIwNiw2ICsyODUsNzggQEAKIAlyZXR1cm4gKGxvIHwgKGhpIDw8IDE2KSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1NCX0JMT0NLSU8KK3N0YXRpYyB2b2lkIHNzYl9wY21jaWFfYmxvY2tfcmVhZChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB2b2lkICpidWZmZXIsCisJCQkJICBzaXplX3QgY291bnQsIHUxNiBvZmZzZXQsIHU4IHJlZ193aWR0aCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBidXMtPm1taW8gKyBvZmZzZXQ7CisJaW50IGVycjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZidXMtPmJhcl9sb2NrLCBmbGFncyk7CisJZXJyID0gc2VsZWN0X2NvcmVfYW5kX3NlZ21lbnQoZGV2LCAmb2Zmc2V0KTsKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQltZW1zZXQoYnVmZmVyLCAweEZGLCBjb3VudCk7CisJCWdvdG8gdW5sb2NrOworCX0KKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2Ugc2l6ZW9mKHU4KTogeworCQl1OCAqYnVmID0gYnVmZmVyOworCisJCXdoaWxlIChjb3VudCkgeworCQkJKmJ1ZiA9IF9fcmF3X3JlYWRiKGFkZHIpOworCQkJYnVmKys7CisJCQljb3VudC0tOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIHNpemVvZih1MTYpOiB7CisJCV9fbGUxNiAqYnVmID0gYnVmZmVyOworCisJCVNTQl9XQVJOX09OKGNvdW50ICYgMSk7CisJCXdoaWxlIChjb3VudCkgeworCQkJKmJ1ZiA9IChfX2ZvcmNlIF9fbGUxNilfX3Jhd19yZWFkdyhhZGRyKTsKKwkJCWJ1ZisrOworCQkJY291bnQgLT0gMjsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBzaXplb2YodTMyKTogeworCQlfX2xlMTYgKmJ1ZiA9IGJ1ZmZlcjsKKworCQlTU0JfV0FSTl9PTihjb3VudCAmIDMpOworCQl3aGlsZSAoY291bnQpIHsKKwkJCSpidWYgPSAoX19mb3JjZSBfX2xlMTYpX19yYXdfcmVhZHcoYWRkcik7CisJCQlidWYrKzsKKwkJCSpidWYgPSAoX19mb3JjZSBfX2xlMTYpX19yYXdfcmVhZHcoYWRkciArIDIpOworCQkJYnVmKys7CisJCQljb3VudCAtPSA0OworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlTU0JfV0FSTl9PTigxKTsKKwl9Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzLT5iYXJfbG9jaywgZmxhZ3MpOworfQorI2VuZGlmIC8qIENPTkZJR19TU0JfQkxPQ0tJTyAqLworCitzdGF0aWMgdm9pZCBzc2JfcGNtY2lhX3dyaXRlOChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1cy0+YmFyX2xvY2ssIGZsYWdzKTsKKwllcnIgPSBzZWxlY3RfY29yZV9hbmRfc2VnbWVudChkZXYsICZvZmZzZXQpOworCWlmIChsaWtlbHkoIWVycikpCisJCXdyaXRlYih2YWx1ZSwgYnVzLT5tbWlvICsgb2Zmc2V0KTsKKwltbWlvd2IoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXMtPmJhcl9sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIHNzYl9wY21jaWFfd3JpdGUxNihzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCiB7CiAJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOwpAQCAtMjM2LDI2ICszODcsNDI1IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzLT5iYXJfbG9jaywgZmxhZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX1NTQl9CTE9DS0lPCitzdGF0aWMgdm9pZCBzc2JfcGNtY2lhX2Jsb2NrX3dyaXRlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkgICBzaXplX3QgY291bnQsIHUxNiBvZmZzZXQsIHU4IHJlZ193aWR0aCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBidXMtPm1taW8gKyBvZmZzZXQ7CisJaW50IGVycjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZidXMtPmJhcl9sb2NrLCBmbGFncyk7CisJZXJyID0gc2VsZWN0X2NvcmVfYW5kX3NlZ21lbnQoZGV2LCAmb2Zmc2V0KTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290byB1bmxvY2s7CisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIHNpemVvZih1OCk6IHsKKwkJY29uc3QgdTggKmJ1ZiA9IGJ1ZmZlcjsKKworCQl3aGlsZSAoY291bnQpIHsKKwkJCV9fcmF3X3dyaXRlYigqYnVmLCBhZGRyKTsKKwkJCWJ1ZisrOworCQkJY291bnQtLTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBzaXplb2YodTE2KTogeworCQljb25zdCBfX2xlMTYgKmJ1ZiA9IGJ1ZmZlcjsKKworCQlTU0JfV0FSTl9PTihjb3VudCAmIDEpOworCQl3aGlsZSAoY291bnQpIHsKKwkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpKCpidWYpLCBhZGRyKTsKKwkJCWJ1ZisrOworCQkJY291bnQgLT0gMjsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBzaXplb2YodTMyKTogeworCQljb25zdCBfX2xlMTYgKmJ1ZiA9IGJ1ZmZlcjsKKworCQlTU0JfV0FSTl9PTihjb3VudCAmIDMpOworCQl3aGlsZSAoY291bnQpIHsKKwkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpKCpidWYpLCBhZGRyKTsKKwkJCWJ1ZisrOworCQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikoKmJ1ZiksIGFkZHIgKyAyKTsKKwkJCWJ1ZisrOworCQkJY291bnQgLT0gNDsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQordW5sb2NrOgorCW1taW93YigpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1cy0+YmFyX2xvY2ssIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1NCX0JMT0NLSU8gKi8KKwogLyogTm90ICJzdGF0aWMiLCBhcyBpdCdzIHVzZWQgaW4gbWFpbi5jICovCiBjb25zdCBzdHJ1Y3Qgc3NiX2J1c19vcHMgc3NiX3BjbWNpYV9vcHMgPSB7CisJLnJlYWQ4CQk9IHNzYl9wY21jaWFfcmVhZDgsCiAJLnJlYWQxNgkJPSBzc2JfcGNtY2lhX3JlYWQxNiwKIAkucmVhZDMyCQk9IHNzYl9wY21jaWFfcmVhZDMyLAorCS53cml0ZTgJCT0gc3NiX3BjbWNpYV93cml0ZTgsCiAJLndyaXRlMTYJPSBzc2JfcGNtY2lhX3dyaXRlMTYsCiAJLndyaXRlMzIJPSBzc2JfcGNtY2lhX3dyaXRlMzIsCisjaWZkZWYgQ09ORklHX1NTQl9CTE9DS0lPCisJLmJsb2NrX3JlYWQJPSBzc2JfcGNtY2lhX2Jsb2NrX3JlYWQsCisJLmJsb2NrX3dyaXRlCT0gc3NiX3BjbWNpYV9ibG9ja193cml0ZSwKKyNlbmRpZgogfTsKIAotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci1pbnQgc3NiX3BjbWNpYV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAotCQkJICAgICAgc3RydWN0IHNzYl9pbml0X2ludmFyaWFudHMgKml2KQorc3RhdGljIGludCBzc2JfcGNtY2lhX3Nwcm9tX2NvbW1hbmQoc3RydWN0IHNzYl9idXMgKmJ1cywgdTggY29tbWFuZCkKIHsKLQkvL1RPRE8KLQlyYW5kb21fZXRoZXJfYWRkcihpdi0+c3Byb20uaWwwbWFjKTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyOworCXU4IHZhbHVlOworCisJZXJyID0gc3NiX3BjbWNpYV9jZmdfd3JpdGUoYnVzLCBTU0JfUENNQ0lBX1NQUk9NQ1RMLCBjb21tYW5kKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwkJZXJyID0gc3NiX3BjbWNpYV9jZmdfcmVhZChidXMsIFNTQl9QQ01DSUFfU1BST01DVEwsICZ2YWx1ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAodmFsdWUgJiBTU0JfUENNQ0lBX1NQUk9NQ1RMX0RPTkUpCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworLyogb2Zmc2V0IGlzIHRoZSAxNmJpdCB3b3JkIG9mZnNldCAqLworc3RhdGljIGludCBzc2JfcGNtY2lhX3Nwcm9tX3JlYWQoc3RydWN0IHNzYl9idXMgKmJ1cywgdTE2IG9mZnNldCwgdTE2ICp2YWx1ZSkKK3sKKwlpbnQgZXJyOworCXU4IGxvLCBoaTsKKworCW9mZnNldCAqPSAyOyAvKiBNYWtlIGJ5dGUgb2Zmc2V0ICovCisKKwllcnIgPSBzc2JfcGNtY2lhX2NmZ193cml0ZShidXMsIFNTQl9QQ01DSUFfU1BST01fQUREUkxPLAorCQkJCSAgIChvZmZzZXQgJiAweDAwRkYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNzYl9wY21jaWFfY2ZnX3dyaXRlKGJ1cywgU1NCX1BDTUNJQV9TUFJPTV9BRERSSEksCisJCQkJICAgKG9mZnNldCAmIDB4RkYwMCkgPj4gOCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzc2JfcGNtY2lhX3Nwcm9tX2NvbW1hbmQoYnVzLCBTU0JfUENNQ0lBX1NQUk9NQ1RMX1JFQUQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gc3NiX3BjbWNpYV9jZmdfcmVhZChidXMsIFNTQl9QQ01DSUFfU1BST01fREFUQUxPLCAmbG8pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gc3NiX3BjbWNpYV9jZmdfcmVhZChidXMsIFNTQl9QQ01DSUFfU1BST01fREFUQUhJLCAmaGkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJKnZhbHVlID0gKGxvIHwgKCgodTE2KWhpKSA8PCA4KSk7CisKIAlyZXR1cm4gMDsKIH0KIAotaW50IHNzYl9wY21jaWFfaW5pdChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQorLyogb2Zmc2V0IGlzIHRoZSAxNmJpdCB3b3JkIG9mZnNldCAqLworc3RhdGljIGludCBzc2JfcGNtY2lhX3Nwcm9tX3dyaXRlKHN0cnVjdCBzc2JfYnVzICpidXMsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKIHsKLQljb25mX3JlZ190IHJlZzsKKwlpbnQgZXJyOworCisJb2Zmc2V0ICo9IDI7IC8qIE1ha2UgYnl0ZSBvZmZzZXQgKi8KKworCWVyciA9IHNzYl9wY21jaWFfY2ZnX3dyaXRlKGJ1cywgU1NCX1BDTUNJQV9TUFJPTV9BRERSTE8sCisJCQkJICAgKG9mZnNldCAmIDB4MDBGRikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gc3NiX3BjbWNpYV9jZmdfd3JpdGUoYnVzLCBTU0JfUENNQ0lBX1NQUk9NX0FERFJISSwKKwkJCQkgICAob2Zmc2V0ICYgMHhGRjAwKSA+PiA4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNzYl9wY21jaWFfY2ZnX3dyaXRlKGJ1cywgU1NCX1BDTUNJQV9TUFJPTV9EQVRBTE8sCisJCQkJICAgKHZhbHVlICYgMHgwMEZGKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzc2JfcGNtY2lhX2NmZ193cml0ZShidXMsIFNTQl9QQ01DSUFfU1BST01fREFUQUhJLAorCQkJCSAgICh2YWx1ZSAmIDB4RkYwMCkgPj4gOCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzc2JfcGNtY2lhX3Nwcm9tX2NvbW1hbmQoYnVzLCBTU0JfUENNQ0lBX1NQUk9NQ1RMX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCW1zbGVlcCgyMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVhZCB0aGUgU1BST00gaW1hZ2UuIGJ1ZnNpemUgaXMgaW4gMTZiaXQgd29yZHMuICovCitzdGF0aWMgaW50IHNzYl9wY21jaWFfc3Byb21fcmVhZF9hbGwoc3RydWN0IHNzYl9idXMgKmJ1cywgdTE2ICpzcHJvbSkKK3sKKwlpbnQgZXJyLCBpOworCisJZm9yIChpID0gMDsgaSA8IFNTQl9QQ01DSUFfU1BST01fU0laRTsgaSsrKSB7CisJCWVyciA9IHNzYl9wY21jaWFfc3Byb21fcmVhZChidXMsIGksICZzcHJvbVtpXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvKiBXcml0ZSB0aGUgU1BST00gaW1hZ2UuIHNpemUgaXMgaW4gMTZiaXQgd29yZHMuICovCitzdGF0aWMgaW50IHNzYl9wY21jaWFfc3Byb21fd3JpdGVfYWxsKHN0cnVjdCBzc2JfYnVzICpidXMsIGNvbnN0IHUxNiAqc3Byb20pCit7CisJaW50IGksIGVycjsKKwlib29sIGZhaWxlZCA9IDA7CisJc2l6ZV90IHNpemUgPSBTU0JfUENNQ0lBX1NQUk9NX1NJWkU7CisKKwlzc2JfcHJpbnRrKEtFUk5fTk9USUNFIFBGWAorCQkgICAiV3JpdGluZyBTUFJPTS4gRG8gTk9UIHR1cm4gb2ZmIHRoZSBwb3dlciEgIgorCQkgICAiUGxlYXNlIHN0YW5kIGJ5Li4uXG4iKTsKKwllcnIgPSBzc2JfcGNtY2lhX3Nwcm9tX2NvbW1hbmQoYnVzLCBTU0JfUENNQ0lBX1NQUk9NQ1RMX1dSSVRFRU4pOworCWlmIChlcnIpIHsKKwkJc3NiX3ByaW50ayhLRVJOX05PVElDRSBQRlgKKwkJCSAgICJDb3VsZCBub3QgZW5hYmxlIFNQUk9NIHdyaXRlIGFjY2Vzcy5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlzc2JfcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiWyAwJSUiKTsKKwltc2xlZXAoNTAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWlmIChpID09IHNpemUgLyA0KQorCQkJc3NiX3ByaW50aygiMjUlJSIpOworCQllbHNlIGlmIChpID09IHNpemUgLyAyKQorCQkJc3NiX3ByaW50aygiNTAlJSIpOworCQllbHNlIGlmIChpID09IChzaXplICogMykgLyA0KQorCQkJc3NiX3ByaW50aygiNzUlJSIpOworCQllbHNlIGlmIChpICUgMikKKwkJCXNzYl9wcmludGsoIi4iKTsKKwkJZXJyID0gc3NiX3BjbWNpYV9zcHJvbV93cml0ZShidXMsIGksIHNwcm9tW2ldKTsKKwkJaWYgKGVycikgeworCQkJc3NiX3ByaW50aygiXG4iIEtFUk5fTk9USUNFIFBGWAorCQkJCSAgICJGYWlsZWQgdG8gd3JpdGUgdG8gU1BST00uXG4iKTsKKwkJCWZhaWxlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwllcnIgPSBzc2JfcGNtY2lhX3Nwcm9tX2NvbW1hbmQoYnVzLCBTU0JfUENNQ0lBX1NQUk9NQ1RMX1dSSVRFRElTKTsKKwlpZiAoZXJyKSB7CisJCXNzYl9wcmludGsoIlxuIiBLRVJOX05PVElDRSBQRlgKKwkJCSAgICJDb3VsZCBub3QgZGlzYWJsZSBTUFJPTSB3cml0ZSBhY2Nlc3MuXG4iKTsKKwkJZmFpbGVkID0gMTsKKwl9CisJbXNsZWVwKDUwMCk7CisJaWYgKCFmYWlsZWQpIHsKKwkJc3NiX3ByaW50aygiMTAwJSUgXVxuIik7CisJCXNzYl9wcmludGsoS0VSTl9OT1RJQ0UgUEZYICJTUFJPTSB3cml0dGVuLlxuIik7CisJfQorCisJcmV0dXJuIGZhaWxlZCA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc3NiX3BjbWNpYV9zcHJvbV9jaGVja19jcmMoY29uc3QgdTE2ICpzcHJvbSwgc2l6ZV90IHNpemUpCit7CisJLy9UT0RPCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgR09UT19FUlJPUl9PTihjb25kaXRpb24sIGRlc2NyaXB0aW9uKSBkbyB7CVwKKwlpZiAodW5saWtlbHkoY29uZGl0aW9uKSkgewkJCVwKKwkJZXJyb3JfZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsJXAorCQlnb3RvIGVycm9yOwkJCQlcCisJfQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworaW50IHNzYl9wY21jaWFfZ2V0X2ludmFyaWFudHMoc3RydWN0IHNzYl9idXMgKmJ1cywKKwkJCSAgICAgIHN0cnVjdCBzc2JfaW5pdF9pbnZhcmlhbnRzICppdikKK3sKKwl0dXBsZV90IHR1cGxlOworCWludCByZXM7CisJdW5zaWduZWQgY2hhciBidWZbMzJdOworCXN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tID0gJml2LT5zcHJvbTsKKwlzdHJ1Y3Qgc3NiX2JvYXJkaW5mbyAqYmkgPSAmaXYtPmJvYXJkaW5mbzsKKwljb25zdCBjaGFyICplcnJvcl9kZXNjcmlwdGlvbjsKKworCW1lbXNldChzcHJvbSwgMHhGRiwgc2l6ZW9mKCpzcHJvbSkpOworCXNwcm9tLT5yZXZpc2lvbiA9IDE7CisJc3Byb20tPmJvYXJkZmxhZ3NfbG8gPSAwOworCXNwcm9tLT5ib2FyZGZsYWdzX2hpID0gMDsKKworCS8qIEZpcnN0IGZldGNoIHRoZSBNQUMgYWRkcmVzcy4gKi8KKwltZW1zZXQoJnR1cGxlLCAwLCBzaXplb2YodHVwbGUpKTsKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXJlcyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKKwlHT1RPX0VSUk9SX09OKHJlcyAhPSBDU19TVUNDRVNTLCAiTUFDIGZpcnN0IHRwbCIpOworCXJlcyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOworCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJNQUMgZmlyc3QgdHBsIGRhdGEiKTsKKwl3aGlsZSAoMSkgeworCQlHT1RPX0VSUk9SX09OKHR1cGxlLlR1cGxlRGF0YUxlbiA8IDEsICJNQUMgdHBsIDwgMSIpOworCQlpZiAodHVwbGUuVHVwbGVEYXRhWzBdID09IENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCkKKwkJCWJyZWFrOworCQlyZXMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKKwkJR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIk1BQyBuZXh0IHRwbCIpOworCQlyZXMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKKwkJR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIk1BQyBuZXh0IHRwbCBkYXRhIik7CisJfQorCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuICE9IEVUSF9BTEVOICsgMiwgIk1BQyB0cGwgc2l6ZSIpOworCW1lbWNweShzcHJvbS0+aWwwbWFjLCAmdHVwbGUuVHVwbGVEYXRhWzJdLCBFVEhfQUxFTik7CisKKwkvKiBGZXRjaCB0aGUgdmVuZG9yIHNwZWNpZmljIHR1cGxlcy4gKi8KKwltZW1zZXQoJnR1cGxlLCAwLCBzaXplb2YodHVwbGUpKTsKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBTU0JfUENNQ0lBX0NJUzsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJcmVzID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOworCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJWRU4gZmlyc3QgdHBsIik7CisJcmVzID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7CisJR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIlZFTiBmaXJzdCB0cGwgZGF0YSIpOworCXdoaWxlICgxKSB7CisJCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuIDwgMSwgIlZFTiB0cGwgPCAxIik7CisJCXN3aXRjaCAodHVwbGUuVHVwbGVEYXRhWzBdKSB7CisJCWNhc2UgU1NCX1BDTUNJQV9DSVNfSUQ6CisJCQlHT1RPX0VSUk9SX09OKCh0dXBsZS5UdXBsZURhdGFMZW4gIT0gNSkgJiYKKwkJCQkgICAgICAodHVwbGUuVHVwbGVEYXRhTGVuICE9IDcpLAorCQkJCSAgICAgICJpZCB0cGwgc2l6ZSIpOworCQkJYmktPnZlbmRvciA9IHR1cGxlLlR1cGxlRGF0YVsxXSB8CisJCQkgICAgICAgKCh1MTYpdHVwbGUuVHVwbGVEYXRhWzJdIDw8IDgpOworCQkJYnJlYWs7CisJCWNhc2UgU1NCX1BDTUNJQV9DSVNfQk9BUkRSRVY6CisJCQlHT1RPX0VSUk9SX09OKHR1cGxlLlR1cGxlRGF0YUxlbiAhPSAyLAorCQkJCSAgICAgICJib2FyZHJldiB0cGwgc2l6ZSIpOworCQkJc3Byb20tPmJvYXJkX3JldiA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCWJyZWFrOworCQljYXNlIFNTQl9QQ01DSUFfQ0lTX1BBOgorCQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gOSwKKwkJCQkgICAgICAicGEgdHBsIHNpemUiKTsKKwkJCXNwcm9tLT5wYTBiMCA9IHR1cGxlLlR1cGxlRGF0YVsxXSB8CisJCQkJICgodTE2KXR1cGxlLlR1cGxlRGF0YVsyXSA8PCA4KTsKKwkJCXNwcm9tLT5wYTBiMSA9IHR1cGxlLlR1cGxlRGF0YVszXSB8CisJCQkJICgodTE2KXR1cGxlLlR1cGxlRGF0YVs0XSA8PCA4KTsKKwkJCXNwcm9tLT5wYTBiMiA9IHR1cGxlLlR1cGxlRGF0YVs1XSB8CisJCQkJICgodTE2KXR1cGxlLlR1cGxlRGF0YVs2XSA8PCA4KTsKKwkJCXNwcm9tLT5pdHNzaV9hID0gdHVwbGUuVHVwbGVEYXRhWzddOworCQkJc3Byb20tPml0c3NpX2JnID0gdHVwbGUuVHVwbGVEYXRhWzddOworCQkJc3Byb20tPm1heHB3cl9hID0gdHVwbGUuVHVwbGVEYXRhWzhdOworCQkJc3Byb20tPm1heHB3cl9iZyA9IHR1cGxlLlR1cGxlRGF0YVs4XTsKKwkJCWJyZWFrOworCQljYXNlIFNTQl9QQ01DSUFfQ0lTX09FTU5BTUU6CisJCQkvKiBXZSBpZ25vcmUgdGhpcy4gKi8KKwkJCWJyZWFrOworCQljYXNlIFNTQl9QQ01DSUFfQ0lTX0NDT0RFOgorCQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gMiwKKwkJCQkgICAgICAiY2NvZGUgdHBsIHNpemUiKTsKKwkJCXNwcm9tLT5jb3VudHJ5X2NvZGUgPSB0dXBsZS5UdXBsZURhdGFbMV07CisJCQlicmVhazsKKwkJY2FzZSBTU0JfUENNQ0lBX0NJU19BTlRFTk5BOgorCQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gMiwKKwkJCQkgICAgICAiYW50IHRwbCBzaXplIik7CisJCQlzcHJvbS0+YW50X2F2YWlsYWJsZV9hID0gdHVwbGUuVHVwbGVEYXRhWzFdOworCQkJc3Byb20tPmFudF9hdmFpbGFibGVfYmcgPSB0dXBsZS5UdXBsZURhdGFbMV07CisJCQlicmVhazsKKwkJY2FzZSBTU0JfUENNQ0lBX0NJU19BTlRHQUlOOgorCQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gMiwKKwkJCQkgICAgICAiYW50ZyB0cGwgc2l6ZSIpOworCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMCA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6MjQuYTEgPSB0dXBsZS5UdXBsZURhdGFbMV07CisJCQlzcHJvbS0+YW50ZW5uYV9nYWluLmdoejI0LmEyID0gdHVwbGUuVHVwbGVEYXRhWzFdOworCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMyA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMCA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMSA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMiA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMyA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCWJyZWFrOworCQljYXNlIFNTQl9QQ01DSUFfQ0lTX0JGTEFHUzoKKwkJCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuICE9IDMsCisJCQkJICAgICAgImJmbCB0cGwgc2l6ZSIpOworCQkJc3Byb20tPmJvYXJkZmxhZ3NfbG8gPSB0dXBsZS5UdXBsZURhdGFbMV0gfAorCQkJCQkgKCh1MTYpdHVwbGUuVHVwbGVEYXRhWzJdIDw8IDgpOworCQkJYnJlYWs7CisJCWNhc2UgU1NCX1BDTUNJQV9DSVNfTEVEUzoKKwkJCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuICE9IDUsCisJCQkJICAgICAgImxlZHMgdHBsIHNpemUiKTsKKwkJCXNwcm9tLT5ncGlvMCA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKKwkJCXNwcm9tLT5ncGlvMSA9IHR1cGxlLlR1cGxlRGF0YVsyXTsKKwkJCXNwcm9tLT5ncGlvMiA9IHR1cGxlLlR1cGxlRGF0YVszXTsKKwkJCXNwcm9tLT5ncGlvMyA9IHR1cGxlLlR1cGxlRGF0YVs0XTsKKwkJCWJyZWFrOworCQl9CisJCXJlcyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOworCQlpZiAocmVzID09IENTX05PX01PUkVfSVRFTVMpCisJCQlicmVhazsKKwkJR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIlZFTiBuZXh0IHRwbCIpOworCQlyZXMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKKwkJR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIlZFTiBuZXh0IHRwbCBkYXRhIik7CisJfQorCisJcmV0dXJuIDA7CitlcnJvcjoKKwlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAiUENNQ0lBOiBGYWlsZWQgdG8gZmV0Y2ggZGV2aWNlIGludmFyaWFudHM6ICVzXG4iLAorCQkgICBlcnJvcl9kZXNjcmlwdGlvbik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNzYl9wY21jaWFfYXR0cl9zcHJvbV9zaG93KHN0cnVjdCBkZXZpY2UgKnBjbWNpYWRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBkZXYgPQorCQljb250YWluZXJfb2YocGNtY2lhZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzOworCisJYnVzID0gc3NiX3BjbWNpYV9kZXZfdG9fYnVzKHBkZXYpOworCWlmICghYnVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzc2JfYXR0cl9zcHJvbV9zaG93KGJ1cywgYnVmLAorCQkJCSAgIHNzYl9wY21jaWFfc3Byb21fcmVhZF9hbGwpOworfQorCitzdGF0aWMgc3NpemVfdCBzc2JfcGNtY2lhX2F0dHJfc3Byb21fc3RvcmUoc3RydWN0IGRldmljZSAqcGNtY2lhZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBkZXYgPQorCQljb250YWluZXJfb2YocGNtY2lhZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzOworCisJYnVzID0gc3NiX3BjbWNpYV9kZXZfdG9fYnVzKHBkZXYpOworCWlmICghYnVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzc2JfYXR0cl9zcHJvbV9zdG9yZShidXMsIGJ1ZiwgY291bnQsCisJCQkJICAgIHNzYl9wY21jaWFfc3Byb21fY2hlY2tfY3JjLAorCQkJCSAgICBzc2JfcGNtY2lhX3Nwcm9tX3dyaXRlX2FsbCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzc2Jfc3Byb20sIDA2MDAsCisJCSAgIHNzYl9wY21jaWFfYXR0cl9zcHJvbV9zaG93LAorCQkgICBzc2JfcGNtY2lhX2F0dHJfc3Byb21fc3RvcmUpOworCitzdGF0aWMgaW50IHNzYl9wY21jaWFfY29yX3NldHVwKHN0cnVjdCBzc2JfYnVzICpidXMsIHU4IGNvcikKK3sKKwl1OCB2YWw7CisJaW50IGVycjsKKworCWVyciA9IHNzYl9wY21jaWFfY2ZnX3JlYWQoYnVzLCBjb3IsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJdmFsICY9IH5DT1JfU09GVF9SRVNFVDsKKwl2YWwgfD0gQ09SX0ZVTkNfRU5BIHwgQ09SX0lSRVFfRU5BIHwgQ09SX0xFVkVMX1JFUTsKKwllcnIgPSBzc2JfcGNtY2lhX2NmZ193cml0ZShidXMsIGNvciwgdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCW1zbGVlcCg0MCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgUENNQ0lBIGhhcmR3YXJlLiBUaGlzIGlzIGNhbGxlZCBvbiBJbml0IGFuZCBSZXN1bWUuICovCitpbnQgc3NiX3BjbWNpYV9oYXJkd2FyZV9zZXR1cChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQorewogCWludCBlcnI7CiAKIAlpZiAoYnVzLT5idXN0eXBlICE9IFNTQl9CVVNUWVBFX1BDTUNJQSkKQEAgLTI2NCwyNCArODE0LDQ1IEBACiAJLyogU3dpdGNoIHNlZ21lbnQgdG8gYSBrbm93biBzdGF0ZSBhbmQgc3luYwogCSAqIGJ1cy0+bWFwcGVkX3BjbWNpYV9zZWcgd2l0aCBoYXJkd2FyZSBzdGF0ZS4gKi8KIAlzc2JfcGNtY2lhX3N3aXRjaF9zZWdtZW50KGJ1cywgMCk7CisJLyogSW5pdCB0aGUgQ09SIHJlZ2lzdGVyLiAqLworCWVyciA9IHNzYl9wY21jaWFfY29yX3NldHVwKGJ1cywgQ0lTUkVHX0NPUik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKiBTb21lIGNhcmRzIGFsc28gbmVlZCB0aGlzIHJlZ2lzdGVyIHRvIGdldCBwb2tlZC4gKi8KKwllcnIgPSBzc2JfcGNtY2lhX2Nvcl9zZXR1cChidXMsIENJU1JFR19DT1IgKyAweDgwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JLyogSW5pdCBJUlEgcm91dGluZyAqLwotCXJlZy5BY3Rpb24gPSBDU19SRUFEOwotCXJlZy5GdW5jdGlvbiA9IDA7Ci0JaWYgKGJ1cy0+Y2hpcF9pZCA9PSAweDQzMDYpCi0JCXJlZy5PZmZzZXQgPSAweDAwOwotCWVsc2UKLQkJcmVnLk9mZnNldCA9IDB4ODA7Ci0JZXJyID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGJ1cy0+aG9zdF9wY21jaWEsICZyZWcpOwotCWlmIChlcnIgIT0gQ1NfU1VDQ0VTUykKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzc2JfcGNtY2lhX2V4aXQoc3RydWN0IHNzYl9idXMgKmJ1cykKK3sKKwlpZiAoYnVzLT5idXN0eXBlICE9IFNTQl9CVVNUWVBFX1BDTUNJQSkKKwkJcmV0dXJuOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZidXMtPmhvc3RfcGNtY2lhLT5kZXYsICZkZXZfYXR0cl9zc2Jfc3Byb20pOworfQorCitpbnQgc3NiX3BjbWNpYV9pbml0KHN0cnVjdCBzc2JfYnVzICpidXMpCit7CisJaW50IGVycjsKKworCWlmIChidXMtPmJ1c3R5cGUgIT0gU1NCX0JVU1RZUEVfUENNQ0lBKQorCQlyZXR1cm4gMDsKKworCWVyciA9IHNzYl9wY21jaWFfaGFyZHdhcmVfc2V0dXAoYnVzKTsKKwlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuVmFsdWUgfD0gMHgwNCB8IDB4MDE7Ci0JZXJyID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGJ1cy0+aG9zdF9wY21jaWEsICZyZWcpOwotCWlmIChlcnIgIT0gQ1NfU1VDQ0VTUykKKworCWJ1cy0+c3Byb21fc2l6ZSA9IFNTQl9QQ01DSUFfU1BST01fU0laRTsKKwltdXRleF9pbml0KCZidXMtPnNwcm9tX211dGV4KTsKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmJ1cy0+aG9zdF9wY21jaWEtPmRldiwgJmRldl9hdHRyX3NzYl9zcHJvbSk7CisJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAogCXJldHVybiAwOwogZXJyb3I6Ci0JcmV0dXJuIC1FTk9ERVY7CisJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBpbml0aWFsaXplIFBDTUNJQSBob3N0IGRldmljZVxuIik7CisJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3Nwcm9tLmMgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NjhlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisgKiBDb21tb24gU1BST00gc3VwcG9ydCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWFydGluIExhbmdlciA8bWFydGluLWxhbmdlckBnbXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU3RlZmFubyBCcml2aW8gPHN0M0ByaXNldXAubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA1IERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAic3NiX3ByaXZhdGUuaCIKKworCitzdGF0aWMgaW50IHNwcm9tMmhleChjb25zdCB1MTYgKnNwcm9tLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAorCQkgICAgIHNpemVfdCBzcHJvbV9zaXplX3dvcmRzKQoreworCWludCBpLCBwb3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNwcm9tX3NpemVfd29yZHM7IGkrKykKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgYnVmX2xlbiAtIHBvcyAtIDEsCisJCQkJIiUwNFgiLCBzd2FiMTYoc3Byb21baV0pICYgMHhGRkZGKTsKKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBidWZfbGVuIC0gcG9zIC0gMSwgIlxuIik7CisKKwlyZXR1cm4gcG9zICsgMTsKK30KKworc3RhdGljIGludCBoZXgyc3Byb20odTE2ICpzcHJvbSwgY29uc3QgY2hhciAqZHVtcCwgc2l6ZV90IGxlbiwKKwkJICAgICBzaXplX3Qgc3Byb21fc2l6ZV93b3JkcykKK3sKKwljaGFyIHRtcFs1XSA9IHsgMCB9OworCWludCBjbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGFyc2VkOworCisJaWYgKGxlbiA8IHNwcm9tX3NpemVfd29yZHMgKiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChjbnQgPCBzcHJvbV9zaXplX3dvcmRzKSB7CisJCW1lbWNweSh0bXAsIGR1bXAsIDQpOworCQlkdW1wICs9IDQ7CisJCXBhcnNlZCA9IHNpbXBsZV9zdHJ0b3VsKHRtcCwgTlVMTCwgMTYpOworCQlzcHJvbVtjbnQrK10gPSBzd2FiMTYoKHUxNilwYXJzZWQpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBDb21tb24gc3Byb20gZGV2aWNlLWF0dHJpYnV0ZSBzaG93LWhhbmRsZXIgKi8KK3NzaXplX3Qgc3NiX2F0dHJfc3Byb21fc2hvdyhzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBjaGFyICpidWYsCisJCQkgICAgaW50ICgqc3Byb21fcmVhZCkoc3RydWN0IHNzYl9idXMgKmJ1cywgdTE2ICpzcHJvbSkpCit7CisJdTE2ICpzcHJvbTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzc2l6ZV90IGNvdW50ID0gMDsKKwlzaXplX3Qgc3Byb21fc2l6ZV93b3JkcyA9IGJ1cy0+c3Byb21fc2l6ZTsKKworCXNwcm9tID0ga2NhbGxvYyhzcHJvbV9zaXplX3dvcmRzLCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcHJvbSkKKwkJZ290byBvdXQ7CisKKwkvKiBVc2UgaW50ZXJydXB0aWJsZSBsb2NraW5nLCBhcyB0aGUgU1BST00gd3JpdGUgbWlnaHQKKwkgKiBiZSBob2xkaW5nIHRoZSBsb2NrIGZvciBzZXZlcmFsIHNlY29uZHMuIFNvIGFsbG93IHVzZXJzcGFjZQorCSAqIHRvIGNhbmNlbCBvcGVyYXRpb24uICovCisJZXJyID0gLUVSRVNUQVJUU1lTOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJ1cy0+c3Byb21fbXV0ZXgpKQorCQlnb3RvIG91dF9rZnJlZTsKKwllcnIgPSBzcHJvbV9yZWFkKGJ1cywgc3Byb20pOworCW11dGV4X3VubG9jaygmYnVzLT5zcHJvbV9tdXRleCk7CisKKwlpZiAoIWVycikKKwkJY291bnQgPSBzcHJvbTJoZXgoc3Byb20sIGJ1ZiwgUEFHRV9TSVpFLCBzcHJvbV9zaXplX3dvcmRzKTsKKworb3V0X2tmcmVlOgorCWtmcmVlKHNwcm9tKTsKK291dDoKKwlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7Cit9CisKKy8qIENvbW1vbiBzcHJvbSBkZXZpY2UtYXR0cmlidXRlIHN0b3JlLWhhbmRsZXIgKi8KK3NzaXplX3Qgc3NiX2F0dHJfc3Byb21fc3RvcmUoc3RydWN0IHNzYl9idXMgKmJ1cywKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgICAgIGludCAoKnNwcm9tX2NoZWNrX2NyYykoY29uc3QgdTE2ICpzcHJvbSwgc2l6ZV90IHNpemUpLAorCQkJICAgICBpbnQgKCpzcHJvbV93cml0ZSkoc3RydWN0IHNzYl9idXMgKmJ1cywgY29uc3QgdTE2ICpzcHJvbSkpCit7CisJdTE2ICpzcHJvbTsKKwlpbnQgcmVzID0gMCwgZXJyID0gLUVOT01FTTsKKwlzaXplX3Qgc3Byb21fc2l6ZV93b3JkcyA9IGJ1cy0+c3Byb21fc2l6ZTsKKworCXNwcm9tID0ga2NhbGxvYyhidXMtPnNwcm9tX3NpemUsIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNwcm9tKQorCQlnb3RvIG91dDsKKwllcnIgPSBoZXgyc3Byb20oc3Byb20sIGJ1ZiwgY291bnQsIHNwcm9tX3NpemVfd29yZHMpOworCWlmIChlcnIpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfa2ZyZWU7CisJfQorCWVyciA9IHNwcm9tX2NoZWNrX2NyYyhzcHJvbSwgc3Byb21fc2l6ZV93b3Jkcyk7CisJaWYgKGVycikgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9rZnJlZTsKKwl9CisKKwkvKiBVc2UgaW50ZXJydXB0aWJsZSBsb2NraW5nLCBhcyB0aGUgU1BST00gd3JpdGUgbWlnaHQKKwkgKiBiZSBob2xkaW5nIHRoZSBsb2NrIGZvciBzZXZlcmFsIHNlY29uZHMuIFNvIGFsbG93IHVzZXJzcGFjZQorCSAqIHRvIGNhbmNlbCBvcGVyYXRpb24uICovCisJZXJyID0gLUVSRVNUQVJUU1lTOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJ1cy0+c3Byb21fbXV0ZXgpKQorCQlnb3RvIG91dF9rZnJlZTsKKwllcnIgPSBzc2JfZGV2aWNlc19mcmVlemUoYnVzKTsKKwlpZiAoZXJyID09IC1FT1BOT1RTVVBQKSB7CisJCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYICJTUFJPTSB3cml0ZTogQ291bGQgbm90IGZyZWV6ZSBkZXZpY2VzLiAiCisJCQkgICAiTm8gc3VzcGVuZCBzdXBwb3J0LiBJcyBDT05GSUdfUE0gZW5hYmxlZD9cbiIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWlmIChlcnIpIHsKKwkJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlggIlNQUk9NIHdyaXRlOiBDb3VsZCBub3QgZnJlZXplIGFsbCBkZXZpY2VzXG4iKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwlyZXMgPSBzcHJvbV93cml0ZShidXMsIHNwcm9tKTsKKwllcnIgPSBzc2JfZGV2aWNlc190aGF3KGJ1cyk7CisJaWYgKGVycikKKwkJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlggIlNQUk9NIHdyaXRlOiBDb3VsZCBub3QgdGhhdyBhbGwgZGV2aWNlc1xuIik7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmYnVzLT5zcHJvbV9tdXRleCk7CitvdXRfa2ZyZWU6CisJa2ZyZWUoc3Byb20pOworb3V0OgorCWlmIChyZXMpCisJCXJldHVybiByZXM7CisJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaCBiL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKaW5kZXggYTc4OTM2NC4uZWJjMzJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaAorKysgYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCkBAIC04MSw2ICs4MSw4IEBACiAJCQkJICAgICB1OCBzZWcpOwogZXh0ZXJuIGludCBzc2JfcGNtY2lhX2dldF9pbnZhcmlhbnRzKHN0cnVjdCBzc2JfYnVzICpidXMsCiAJCQkJICAgICBzdHJ1Y3Qgc3NiX2luaXRfaW52YXJpYW50cyAqaXYpOworZXh0ZXJuIGludCBzc2JfcGNtY2lhX2hhcmR3YXJlX3NldHVwKHN0cnVjdCBzc2JfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgc3NiX3BjbWNpYV9leGl0KHN0cnVjdCBzc2JfYnVzICpidXMpOwogZXh0ZXJuIGludCBzc2JfcGNtY2lhX2luaXQoc3RydWN0IHNzYl9idXMgKmJ1cyk7CiBleHRlcm4gY29uc3Qgc3RydWN0IHNzYl9idXNfb3BzIHNzYl9wY21jaWFfb3BzOwogI2Vsc2UgLyogQ09ORklHX1NTQl9QQ01DSUFIT1NUICovCkBAIC05OSw2ICsxMDEsMTMgQEAKIHsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHNzYl9wY21jaWFfaGFyZHdhcmVfc2V0dXAoc3RydWN0IHNzYl9idXMgKmJ1cykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzc2JfcGNtY2lhX2V4aXQoc3RydWN0IHNzYl9idXMgKmJ1cykKK3sKK30KIHN0YXRpYyBpbmxpbmUgaW50IHNzYl9wY21jaWFfaW5pdChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQogewogCXJldHVybiAwOwpAQCAtMTEzLDE3ICsxMjIsMzIgQEAKIGV4dGVybiB2b2lkIHNzYl9pb3VubWFwKHN0cnVjdCBzc2JfYnVzICpzc2IpOwogCiAKKy8qIHNwcm9tLmMgKi8KK2V4dGVybgorc3NpemVfdCBzc2JfYXR0cl9zcHJvbV9zaG93KHN0cnVjdCBzc2JfYnVzICpidXMsIGNoYXIgKmJ1ZiwKKwkJCSAgICBpbnQgKCpzcHJvbV9yZWFkKShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MTYgKnNwcm9tKSk7CitleHRlcm4KK3NzaXplX3Qgc3NiX2F0dHJfc3Byb21fc3RvcmUoc3RydWN0IHNzYl9idXMgKmJ1cywKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgICAgIGludCAoKnNwcm9tX2NoZWNrX2NyYykoY29uc3QgdTE2ICpzcHJvbSwgc2l6ZV90IHNpemUpLAorCQkJICAgICBpbnQgKCpzcHJvbV93cml0ZSkoc3RydWN0IHNzYl9idXMgKmJ1cywgY29uc3QgdTE2ICpzcHJvbSkpOworCisKIC8qIGNvcmUuYyAqLwogZXh0ZXJuIHUzMiBzc2JfY2FsY19jbG9ja19yYXRlKHUzMiBwbGx0eXBlLCB1MzIgbiwgdTMyIG0pOwogZXh0ZXJuIGludCBzc2JfZGV2aWNlc19mcmVlemUoc3RydWN0IHNzYl9idXMgKmJ1cyk7CiBleHRlcm4gaW50IHNzYl9kZXZpY2VzX3RoYXcoc3RydWN0IHNzYl9idXMgKmJ1cyk7CiBleHRlcm4gc3RydWN0IHNzYl9idXMgKnNzYl9wY2lfZGV2X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitpbnQgc3NiX2Zvcl9lYWNoX2J1c19jYWxsKHVuc2lnbmVkIGxvbmcgZGF0YSwKKwkJCSAgaW50ICgqZnVuYykoc3RydWN0IHNzYl9idXMgKmJ1cywgdW5zaWduZWQgbG9uZyBkYXRhKSk7CitleHRlcm4gc3RydWN0IHNzYl9idXMgKnNzYl9wY21jaWFfZGV2X3RvX2J1cyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldik7CisKIAogLyogYjQzX3BjaV9icmlkZ2UuYyAqLwotI2lmZGVmIENPTkZJR19TU0JfUENJSE9TVAorI2lmZGVmIENPTkZJR19TU0JfQjQzX1BDSV9CUklER0UKIGV4dGVybiBpbnQgX19pbml0IGI0M19wY2lfc3NiX2JyaWRnZV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19leGl0IGI0M19wY2lfc3NiX2JyaWRnZV9leGl0KHZvaWQpOwotI2Vsc2UgLyogQ09ORklHX1NTQl9QQ0lIT1NUICovCisjZWxzZSAvKiBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdSICovCiBzdGF0aWMgaW5saW5lIGludCBiNDNfcGNpX3NzYl9icmlkZ2VfaW5pdCh2b2lkKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL0tjb25maWcgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZwppbmRleCA2OWYxOWYyLi4xN2U3MWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZwpAQCAtNCw3ICs0LDYgQEAKIAogbWVudWNvbmZpZyBUSEVSTUFMCiAJYm9vbCAiR2VuZXJpYyBUaGVybWFsIHN5c2ZzIGRyaXZlciIKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBHZW5lcmljIFRoZXJtYWwgU3lzZnMgZHJpdmVyIG9mZmVycyBhIGdlbmVyaWMgbWVjaGFuaXNtIGZvcgogCSAgdGhlcm1hbCBtYW5hZ2VtZW50LiBVc3VhbGx5IGl0J3MgbWFkZSB1cCBvZiBvbmUgb3IgbW9yZSB0aGVybWFsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWwuYwppbmRleCBlNzgyYjNlLi43Zjc5YmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsLmMKQEAgLTE5Niw2ICsxOTYsMTAgQEAKIAlfX0FUVFIodHJpcF9wb2ludF84X3RlbXAsIDA0NDQsIHRyaXBfcG9pbnRfdGVtcF9zaG93LCBOVUxMKSwKIAlfX0FUVFIodHJpcF9wb2ludF85X3R5cGUsIDA0NDQsIHRyaXBfcG9pbnRfdHlwZV9zaG93LCBOVUxMKSwKIAlfX0FUVFIodHJpcF9wb2ludF85X3RlbXAsIDA0NDQsIHRyaXBfcG9pbnRfdGVtcF9zaG93LCBOVUxMKSwKKwlfX0FUVFIodHJpcF9wb2ludF8xMF90eXBlLCAwNDQ0LCB0cmlwX3BvaW50X3R5cGVfc2hvdywgTlVMTCksCisJX19BVFRSKHRyaXBfcG9pbnRfMTBfdGVtcCwgMDQ0NCwgdHJpcF9wb2ludF90ZW1wX3Nob3csIE5VTEwpLAorCV9fQVRUUih0cmlwX3BvaW50XzExX3R5cGUsIDA0NDQsIHRyaXBfcG9pbnRfdHlwZV9zaG93LCBOVUxMKSwKKwlfX0FUVFIodHJpcF9wb2ludF8xMV90ZW1wLCAwNDQ0LCB0cmlwX3BvaW50X3RlbXBfc2hvdywgTlVMTCksCiB9OwogCiAjZGVmaW5lIFRSSVBfUE9JTlRfQVRUUl9BREQoX2RldiwgX2luZGV4LCByZXN1bHQpICAgICBcCkBAIC0zMDYsMTIgKzMxMCwyMyBAQAogewogCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX2luc3RhbmNlICpkZXY7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfaW5zdGFuY2UgKnBvczsKKwlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqcG9zMTsKKwlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqcG9zMjsKIAlpbnQgcmVzdWx0OwogCiAJaWYgKHRyaXAgPj0gdHotPnRyaXBzIHx8ICh0cmlwIDwgMCAmJiB0cmlwICE9IFRIRVJNQUxfVFJJUFNfTk9ORSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCF0eiB8fCAhY2RldikKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvczEsICZ0aGVybWFsX3R6X2xpc3QsIG5vZGUpIHsKKwkJaWYgKHBvczEgPT0gdHopCisJCQlicmVhazsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MyLCAmdGhlcm1hbF9jZGV2X2xpc3QsIG5vZGUpIHsKKwkJaWYgKHBvczIgPT0gY2RldikKKwkJCWJyZWFrOworCX0KKworCWlmICh0eiAhPSBwb3MxIHx8IGNkZXYgIT0gcG9zMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXYgPQpAQCAtNDM3LDIwICs0NTIsMjAgQEAKIAlpbnQgcmVzdWx0OwogCiAJaWYgKHN0cmxlbih0eXBlKSA+PSBUSEVSTUFMX05BTUVfTEVOR1RIKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlpZiAoIW9wcyB8fCAhb3BzLT5nZXRfbWF4X3N0YXRlIHx8ICFvcHMtPmdldF9jdXJfc3RhdGUgfHwKIAkgICAgIW9wcy0+c2V0X2N1cl9zdGF0ZSkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJY2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjZGV2KQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlyZXN1bHQgPSBnZXRfaWRyKCZ0aGVybWFsX2NkZXZfaWRyLCAmdGhlcm1hbF9pZHJfbG9jaywgJmNkZXYtPmlkKTsKIAlpZiAocmVzdWx0KSB7CiAJCWtmcmVlKGNkZXYpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKIAlzdHJjcHkoY2Rldi0+dHlwZSwgdHlwZSk7CkBAIC00NjIsNyArNDc3LDcgQEAKIAlpZiAocmVzdWx0KSB7CiAJCXJlbGVhc2VfaWRyKCZ0aGVybWFsX2NkZXZfaWRyLCAmdGhlcm1hbF9pZHJfbG9jaywgY2Rldi0+aWQpOwogCQlrZnJlZShjZGV2KTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiAJfQogCiAJLyogc3lzIEkvRiAqLwpAQCAtNDk4LDcgKzUxMyw3IEBACiAgICAgICB1bnJlZ2lzdGVyOgogCXJlbGVhc2VfaWRyKCZ0aGVybWFsX2NkZXZfaWRyLCAmdGhlcm1hbF9pZHJfbG9jaywgY2Rldi0+aWQpOwogCWRldmljZV91bnJlZ2lzdGVyKCZjZGV2LT5kZXZpY2UpOwotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiB9CiAKIEVYUE9SVF9TWU1CT0wodGhlcm1hbF9jb29saW5nX2RldmljZV9yZWdpc3Rlcik7CkBAIC01NzAsMTcgKzU4NSwxNyBAQAogCWludCBjb3VudDsKIAogCWlmIChzdHJsZW4odHlwZSkgPj0gVEhFUk1BTF9OQU1FX0xFTkdUSCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJaWYgKHRyaXBzID4gVEhFUk1BTF9NQVhfVFJJUFMgfHwgdHJpcHMgPCAwKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlpZiAoIW9wcyB8fCAhb3BzLT5nZXRfdGVtcCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJdHogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghdHopCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCUlOSVRfTElTVF9IRUFEKCZ0ei0+Y29vbGluZ19kZXZpY2VzKTsKIAlpZHJfaW5pdCgmdHotPmlkcik7CkBAIC01ODgsNyArNjAzLDcgQEAKIAlyZXN1bHQgPSBnZXRfaWRyKCZ0aGVybWFsX3R6X2lkciwgJnRoZXJtYWxfaWRyX2xvY2ssICZ0ei0+aWQpOwogCWlmIChyZXN1bHQpIHsKIAkJa2ZyZWUodHopOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKIAlzdHJjcHkodHotPnR5cGUsIHR5cGUpOwpAQCAtNjAxLDcgKzYxNiw3IEBACiAJaWYgKHJlc3VsdCkgewogCQlyZWxlYXNlX2lkcigmdGhlcm1hbF90el9pZHIsICZ0aGVybWFsX2lkcl9sb2NrLCB0ei0+aWQpOwogCQlrZnJlZSh0eik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogCX0KIAogCS8qIHN5cyBJL0YgKi8KQEAgLTY0Myw3ICs2NTgsNyBAQAogICAgICAgdW5yZWdpc3RlcjoKIAlyZWxlYXNlX2lkcigmdGhlcm1hbF90el9pZHIsICZ0aGVybWFsX2lkcl9sb2NrLCB0ei0+aWQpOwogCWRldmljZV91bnJlZ2lzdGVyKCZ0ei0+ZGV2aWNlKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogfQogCiBFWFBPUlRfU1lNQk9MKHRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vS2NvbmZpZyBiL2RyaXZlcnMvdWlvL0tjb25maWcKaW5kZXggYjc3OGVkNzEuLmE0YWFhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL0tjb25maWcKKysrIGIvZHJpdmVycy91aW8vS2NvbmZpZwpAQCAtMSw4ICsxLDYgQEAKLW1lbnUgIlVzZXJzcGFjZSBJL08iCi0JZGVwZW5kcyBvbiAhUzM5MAotCi1jb25maWcgVUlPCittZW51Y29uZmlnIFVJTwogCXRyaXN0YXRlICJVc2Vyc3BhY2UgSS9PIGRyaXZlcnMiCisJZGVwZW5kcyBvbiAhUzM5MAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIHRvIGFsbG93IHRoZSB1c2Vyc3BhY2UgZHJpdmVyIGNvcmUgY29kZSB0byBiZQpAQCAtMTMsNiArMTEsOCBAQAogCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCitpZiBVSU8KKwogY29uZmlnIFVJT19DSUYKIAl0cmlzdGF0ZSAiZ2VuZXJpYyBIaWxzY2hlciBDSUYgQ2FyZCBkcml2ZXIiCiAJZGVwZW5kcyBvbiBVSU8gJiYgUENJCkBAIC0yNiw0ICsyNiwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdWlvX2NpZi4KIAotZW5kbWVudQorY29uZmlnIFVJT19TTVgKKwl0cmlzdGF0ZSAiU01YIGNyeXB0ZW5naW5lIFVJTyBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBVSU8KKwlkZWZhdWx0IG4KKwloZWxwCisJICBVc2Vyc3BhY2UgSU8gaW50ZXJmYWNlIHRvIHRoZSBDcnlwdG9ncmFwaHkgZW5naW5lIGZvdW5kIG9uIHRoZQorCSAgTmlhcyBEaWdpdGFsIFNNWCBib2FyZHMuICBUaGVzZSB3aWxsIGJlIGF2YWlsYWJsZSBmcm9tIFE0IDIwMDgKKwkgIGZyb20gaHR0cDovL3d3dy5uaWFzZGlnaXRhbC5jb20uICBUaGUgdXNlcnNwYWNlIHBhcnQgb2YgdGhpcworCSAgZHJpdmVyIHdpbGwgYmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZQorCSAgaGFyZHdhcmUgYW5kIHdpbGwgYmUgYWJsZSB0byBiZSBkb3dubG9hZGVkIGZyb20gdGhlIHNhbWUgc2l0ZS4KKworCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX3NteC4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL01ha2VmaWxlIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKaW5kZXggN2ZlY2ZiNC4uMThjNDU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmotJChDT05GSUdfVUlPKQkrPSB1aW8ubwogb2JqLSQoQ09ORklHX1VJT19DSUYpCSs9IHVpb19jaWYubworb2JqLSQoQ09ORklHX1VJT19TTVgpCSs9IHVpb19zbXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCAyYTc3ZTlkLi41NWNjN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtNTcsMjkgKzU3LDI5IEBACiB9OwogI2RlZmluZSB0b19tYXAobWFwKSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgdWlvX21hcCwga29iaikKIAotCi1zdGF0aWMgc3NpemVfdCBtYXBfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IG1hcF9hZGRyX3Nob3coc3RydWN0IHVpb19tZW0gKm1lbSwgY2hhciAqYnVmKQogewotCXN0cnVjdCB1aW9fbWFwICptYXAgPSB0b19tYXAoa29iaik7Ci0Jc3RydWN0IHVpb19tZW0gKm1lbSA9IG1hcC0+bWVtOwotCi0JaWYgKHN0cm5jbXAoYXR0ci0+YXR0ci5uYW1lLCAiYWRkciIsIDQpID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBtZW0tPmFkZHIpOwotCi0JaWYgKHN0cm5jbXAoYXR0ci0+YXR0ci5uYW1lLCAic2l6ZSIsIDQpID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBtZW0tPnNpemUpOwotCi0JcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIG1lbS0+YWRkcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgYXR0cl9hdHRyaWJ1dGUgPQotCV9fQVRUUihhZGRyLCBTX0lSVUdPLCBtYXBfYXR0cl9zaG93LCBOVUxMKTsKLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgc2l6ZV9hdHRyaWJ1dGUgPQotCV9fQVRUUihzaXplLCBTX0lSVUdPLCBtYXBfYXR0cl9zaG93LCBOVUxMKTsKK3N0YXRpYyBzc2l6ZV90IG1hcF9zaXplX3Nob3coc3RydWN0IHVpb19tZW0gKm1lbSwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBtZW0tPnNpemUpOworfQorCitzdHJ1Y3QgdWlvX3N5c2ZzX2VudHJ5IHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCB1aW9fbWVtICosIGNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgdWlvX21lbSAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCitzdGF0aWMgc3RydWN0IHVpb19zeXNmc19lbnRyeSBhZGRyX2F0dHJpYnV0ZSA9CisJX19BVFRSKGFkZHIsIFNfSVJVR08sIG1hcF9hZGRyX3Nob3csIE5VTEwpOworc3RhdGljIHN0cnVjdCB1aW9fc3lzZnNfZW50cnkgc2l6ZV9hdHRyaWJ1dGUgPQorCV9fQVRUUihzaXplLCBTX0lSVUdPLCBtYXBfc2l6ZV9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHJzW10gPSB7Ci0JJmF0dHJfYXR0cmlidXRlLmF0dHIsCisJJmFkZHJfYXR0cmlidXRlLmF0dHIsCiAJJnNpemVfYXR0cmlidXRlLmF0dHIsCiAJTlVMTCwJLyogbmVlZCB0byBOVUxMIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzICovCiB9OwpAQCAtOTAsOCArOTAsMjggQEAKIAlrZnJlZShtYXApOwogfQogCitzdGF0aWMgc3NpemVfdCBtYXBfdHlwZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHVpb19tYXAgKm1hcCA9IHRvX21hcChrb2JqKTsKKwlzdHJ1Y3QgdWlvX21lbSAqbWVtID0gbWFwLT5tZW07CisJc3RydWN0IHVpb19zeXNmc19lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgdWlvX3N5c2ZzX2VudHJ5LCBhdHRyKTsKKworCWlmICghZW50cnktPnNob3cpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIGVudHJ5LT5zaG93KG1lbSwgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgdWlvX3N5c2ZzX29wcyA9IHsKKwkuc2hvdyA9IG1hcF90eXBlX3Nob3csCit9OworCiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBtYXBfYXR0cl90eXBlID0gewogCS5yZWxlYXNlCT0gbWFwX3JlbGVhc2UsCisJLnN5c2ZzX29wcwk9ICZ1aW9fc3lzZnNfb3BzLAogCS5kZWZhdWx0X2F0dHJzCT0gYXR0cnMsCiB9OwogCkBAIC0yODEsMjMgKzMwMSwzMyBAQAogCWlmICghaWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGlkZXYtPm93bmVyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlsaXN0ZW5lciA9IGttYWxsb2Moc2l6ZW9mKCpsaXN0ZW5lciksIEdGUF9LRVJORUwpOwotCWlmICghbGlzdGVuZXIpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghbGlzdGVuZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfbGlzdGVuZXI7CisJfQogCiAJbGlzdGVuZXItPmRldiA9IGlkZXY7CiAJbGlzdGVuZXItPmV2ZW50X2NvdW50ID0gYXRvbWljX3JlYWQoJmlkZXYtPmV2ZW50KTsKIAlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gbGlzdGVuZXI7CiAKIAlpZiAoaWRldi0+aW5mby0+b3BlbikgewotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGlkZXYtPm93bmVyKSkKLQkJCXJldHVybiAtRU5PREVWOwogCQlyZXQgPSBpZGV2LT5pbmZvLT5vcGVuKGlkZXYtPmluZm8sIGlub2RlKTsKLQkJbW9kdWxlX3B1dChpZGV2LT5vd25lcik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9pbmZvb3BlbjsKIAl9CiAKLQlpZiAocmV0KQotCQlrZnJlZShsaXN0ZW5lcik7CisJcmV0dXJuIDA7CisKK2Vycl9pbmZvb3BlbjoKKworCWtmcmVlKGxpc3RlbmVyKTsKK2Vycl9hbGxvY19saXN0ZW5lcjoKKworCW1vZHVsZV9wdXQoaWRldi0+b3duZXIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMxNiwxMiArMzQ2LDExIEBACiAJc3RydWN0IHVpb19saXN0ZW5lciAqbGlzdGVuZXIgPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1aW9fZGV2aWNlICppZGV2ID0gbGlzdGVuZXItPmRldjsKIAotCWlmIChpZGV2LT5pbmZvLT5yZWxlYXNlKSB7Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQoaWRldi0+b3duZXIpKQotCQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGlkZXYtPmluZm8tPnJlbGVhc2UpCiAJCXJldCA9IGlkZXYtPmluZm8tPnJlbGVhc2UoaWRldi0+aW5mbywgaW5vZGUpOwotCQltb2R1bGVfcHV0KGlkZXYtPm93bmVyKTsKLQl9CisKKwltb2R1bGVfcHV0KGlkZXYtPm93bmVyKTsKKwogCWlmIChmaWxlcC0+Zl9mbGFncyAmIEZBU1lOQykKIAkJcmV0ID0gdWlvX2Zhc3luYygtMSwgZmlsZXAsIDApOwogCWtmcmVlKGxpc3RlbmVyKTsKQEAgLTQ1MCw2ICs0NzksOCBAQAogCiAJdm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1JFU0VSVkVEOwogCisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKKwogCXJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLAogCQkJICAgICAgIHZtYS0+dm1fc3RhcnQsCiAJCQkgICAgICAgaWRldi0+aW5mby0+bWVtW21pXS5hZGRyID4+IFBBR0VfU0hJRlQsCkBAIC00ODgsMTAgKzUxOSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGlkZXYtPmluZm8tPm1tYXApIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChpZGV2LT5vd25lcikpCi0JCQlyZXR1cm4gLUVOT0RFVjsKIAkJcmV0ID0gaWRldi0+aW5mby0+bW1hcChpZGV2LT5pbmZvLCB2bWEpOwotCQltb2R1bGVfcHV0KGlkZXYtPm93bmVyKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19jaWYuYyBiL2RyaXZlcnMvdWlvL3Vpb19jaWYuYwppbmRleCA4MzhiYWU0Li41NzM3NjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW9fY2lmLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX2NpZi5jCkBAIC0xNSwxMCArMTUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9QTFhfOTAzMAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDMwCTB4OTAzMAotI2VuZGlmCi0KICNkZWZpbmUgUExYOTAzMF9JTlRDU1IJCTB4NEMKICNkZWZpbmUgSU5UU0NSX0lOVDFfRU5BQkxFCTB4MDEKICNkZWZpbmUgSU5UU0NSX0lOVDFfU1RBVFVTCTB4MDQKQEAgLTExNiw3ICsxMTIsNyBAQAogCWtmcmVlIChpbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpbHNjaGVyX3BjaV9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoaWxzY2hlcl9wY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS52ZW5kb3IgPQlQQ0lfVkVORE9SX0lEX1BMWCwKIAkJLmRldmljZSA9CVBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fc214LmMgYi9kcml2ZXJzL3Vpby91aW9fc214LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwNTRhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19zbXguYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIFVJTyBTTVggQ3J5cHRlbmdpbmUgZHJpdmVyLgorICoKKyAqIChDKSAyMDA4IE5pYXMgRGlnaXRhbCBQL0wgPGJuQG5pYXNkaWdpdGFsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgInNteC1jZSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMDMiCisKKyNkZWZpbmUgU01YX0NTUiAgMHgwMDAwMDAwMAorI2RlZmluZSBTTVhfRW5EICAweDAwMDAwMDAxCisjZGVmaW5lIFNNWF9SVU4gIDB4MDAwMDAwMDIKKyNkZWZpbmUgU01YX0RSRFkgMHgwMDAwMDAwNAorI2RlZmluZSBTTVhfRVJSICAweDAwMDAwMDA4CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbXhfaGFuZGxlcihpbnQgaXJxLCBzdHJ1Y3QgdWlvX2luZm8gKmRldl9pbmZvKQoreworCXZvaWQgX19pb21lbSAqY3NyID0gZGV2X2luZm8tPm1lbVswXS5pbnRlcm5hbF9hZGRyICsgU01YX0NTUjsKKworCXUzMiBzdGF0dXMgPSBpb3JlYWQzMihjc3IpOworCisJaWYgKCEoc3RhdHVzICYgU01YX0RSRFkpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdCAqLworCWlvd3JpdGUzMihzdGF0dXMgJiB+U01YX0RSRFksIGNzcik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXhfY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCisJaW50IHJldCA9IC1FTk9ERVY7CisJc3RydWN0IHVpb19pbmZvICppbmZvOworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWlvX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJObyBtZW1vcnkgcmVzb3VyY2Ugc3BlY2lmaWVkXG4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlpbmZvLT5tZW1bMF0uYWRkciA9IHJlZ3MtPnN0YXJ0OworCWlmICghaW5mby0+bWVtWzBdLmFkZHIpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJJbnZhbGlkIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJaW5mby0+bWVtWzBdLnNpemUgPSByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDE7CisJaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCBpbmZvLT5tZW1bMF0uc2l6ZSk7CisKKwlpZiAoIWluZm8tPm1lbVswXS5pbnRlcm5hbF9hZGRyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ2FuJ3QgcmVtYXAgbWVtb3J5IGFkZHJlc3MgcmFuZ2VcbiIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWluZm8tPm1lbVswXS5tZW10eXBlID0gVUlPX01FTV9QSFlTOworCisJaW5mby0+bmFtZSA9ICJzbXgtY2UiOworCWluZm8tPnZlcnNpb24gPSAiMC4wMyI7CisKKwlpbmZvLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisJaWYgKGluZm8tPmlycSA8IDApIHsKKwkJcmV0ID0gaW5mby0+aXJxOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIChvciBpbnZhbGlkKSBJUlEgcmVzb3VyY2Ugc3BlY2lmaWVkXG4iKTsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisJaW5mby0+aGFuZGxlciA9IHNteF9oYW5kbGVyOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKworCXJldCA9IHVpb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+ZGV2LCBpbmZvKTsKKworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubWFwOworCisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlpb3VubWFwKGluZm8tPm1lbVswXS5pbnRlcm5hbF9hZGRyKTsKK291dF9mcmVlOgorCWtmcmVlKGluZm8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc214X2NlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCXVpb191bnJlZ2lzdGVyX2RldmljZShpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWlvdW5tYXAoaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIpOworCisJa2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc214X2NlX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc214X2NlX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc214X2NlX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJWX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbXhfY2VfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbXhfY2VfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHNteF9jZV9pbml0X21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbXhfY2VfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc214X2NlX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzbXhfY2VfZXhpdF9tb2R1bGUpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJCZW4gTml6ZXR0ZSA8Ym5Abmlhc2RpZ2l0YWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCmluZGV4IGZmODU1MWUuLmZjNmMyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaAorKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKQEAgLTI0LDcgKzI0LDYgQEAKICNpZm5kZWYJX1VTQkFUTV9IXwogI2RlZmluZQlfVVNCQVRNX0hfCiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IGJjYzQyMTMuLjAxNDdlYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTQ5NiwxMyArNDk2LDEwIEBACiAJICAgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIGRhdGEgY2FuIGdldCBsb3N0LiAqLwogCXR0eS0+bG93X2xhdGVuY3kgPSAxOwogCi0JaWYgKHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpKSB7Ci0JCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlpZiAodXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCkgPCAwKQorCQlnb3RvIGVhcmx5X2JhaWw7CiAKIAltdXRleF9sb2NrKCZhY20tPm11dGV4KTsKLQltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOwogCWlmIChhY20tPnVzZWQrKykgewogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKIAkJZ290byBkb25lOwpAQCAtNTM2LDYgKzUzMyw3IEBACiBkb25lOgogZXJyX291dDoKIAltdXRleF91bmxvY2soJmFjbS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiAJcmV0dXJuIHJ2OwogCiBmdWxsX2JhaWxvdXQ6CkBAIC01NDQsNiArNTQyLDggQEAKIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKIAlhY20tPnVzZWQtLTsKIAltdXRleF91bmxvY2soJmFjbS0+bXV0ZXgpOworZWFybHlfYmFpbDoKKwltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOwogCXJldHVybiAtRUlPOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCBhZDYzMmYyLi4wNjQ3MTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTQyOCw2ICs0MjgsNyBAQAogCXVzYmxwLT5yY29tcGxldGUgPSAwOwogCiAJaWYgKGhhbmRsZV9iaWRpcih1c2JscCkgPCAwKSB7CisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShpbnRmKTsKIAkJdXNibHAtPnVzZWQgPSAwOwogCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCQlyZXR2YWwgPSAtRUlPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCmluZGV4IDVjMzNjZGIuLmEyYjBhYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTg3LDEyICs4NywxMyBAQAogCSAgSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgdGhpcywgc2F5IE4gaGVyZS4KIAogY29uZmlnIFVTQl9TVVNQRU5ECi0JYm9vbCAiVVNCIHNlbGVjdGl2ZSBzdXNwZW5kL3Jlc3VtZSBhbmQgd2FrZXVwIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCICYmIFBNICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIlVTQiBzZWxlY3RpdmUgc3VzcGVuZC9yZXN1bWUgYW5kIHdha2V1cCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBQTQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHVzZSBkcml2ZXIgY2FsbHMgb3IgdGhlIHN5c2ZzCi0JICAicG93ZXIvc3RhdGUiIGZpbGUgdG8gc3VzcGVuZCBvciByZXN1bWUgaW5kaXZpZHVhbCBVU0IKLQkgIHBlcmlwaGVyYWxzLgorCSAgInBvd2VyL2xldmVsIiBmaWxlIHRvIHN1c3BlbmQgb3IgcmVzdW1lIGluZGl2aWR1YWwgVVNCCisJICBwZXJpcGhlcmFscyBhbmQgdG8gZW5hYmxlIG9yIGRpc2FibGUgYXV0b3N1c3BlbmQgKHNlZQorCSAgRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQgZm9yIG1vcmUgZGV0YWlscykuCiAKIAkgIEFsc28sIFVTQiAicmVtb3RlIHdha2V1cCIgc2lnbmFsaW5nIGlzIHN1cHBvcnRlZCwgd2hlcmVieSBzb21lCiAJICBVU0IgZGV2aWNlcyAobGlrZSBrZXlib2FyZHMgYW5kIG5ldHdvcmsgYWRhcHRlcnMpIGNhbiB3YWtlIHVwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA2OGZjNTIxLi41N2FlY2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KIAotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCBmZWZiOTIyLi5jMzExZjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtMTIwNiw3ICsxMjA2LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCWlmIChkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19OT19TRVRfSU5URikKKwkJcmV0ID0gLUVQSVBFOworCWVsc2UKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCQkJICAgVVNCX1JFUV9TRVRfSU5URVJGQUNFLCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAgIGFsdGVybmF0ZSwgaW50ZXJmYWNlLCBOVUxMLCAwLCA1MDAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKaW5kZXggZDQyYzU2MS4uZGZjNTQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCkBAIC0zMCwyMSArMzAsMzkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfcXVpcmtfbGlzdFtdID0gewogCS8qIENCTSAtIEZsYXNoIGRpc2sgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwMjA0LCAweDYwMjUpLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCisKIAkvKiBIUCA1MzAwLzUzNzBDIHNjYW5uZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwM2YwLCAweDA3MDEpLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfU1RSSU5HX0ZFVENIXzI1NSB9LAorCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MDcwMSksIC5kcml2ZXJfaW5mbyA9CisJCQlVU0JfUVVJUktfU1RSSU5HX0ZFVENIXzI1NSB9LAogCi0JLyogSU5URUwgVkFMVUUgU1NEICovCi0JeyBVU0JfREVWSUNFKDB4ODA4NiwgMHhmMWE1KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAotCi0JLyogTS1TeXN0ZW1zIEZsYXNoIERpc2sgUGlvbmVlcnMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwOGVjLCAweDEwMDApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCisJLyogQ3JlYXRpdmUgU0IgQXVkaWd5IDIgTlggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwMjApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKIAkvKiBQaGlsaXBzIFBTQzgwNSBhdWRpbyBkZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAxNTUpLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKKwkvKiBSb2xhbmQgU0MtODgyMCAqLworCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDAwNyksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19SRVNFVF9SRVNVTUUgfSwKKworCS8qIEVkaXJvbCBTRC0yMCAqLworCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDAyNyksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19SRVNFVF9SRVNVTUUgfSwKKworCS8qIE0tU3lzdGVtcyBGbGFzaCBEaXNrIFBpb25lZXJzICovCisJeyBVU0JfREVWSUNFKDB4MDhlYywgMHgxMDAwKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAorCisJLyogWC1SaXRlL0dyZXRhZy1NYWNiZXRoIEV5ZS1PbmUgUHJvIGRpc3BsYXkgY29sb3JpbWV0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTcxLCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfTk9fU0VUX0lOVEYgfSwKKworCS8qIEFjdGlvbiBTZW1pY29uZHVjdG9yIGZsYXNoIGRpc2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMGQ2LCAweDIyMDApLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX1NUUklOR19GRVRDSF8yNTUgfSwKKwogCS8qIFNLWU1FREkgVVNCX0RSSVZFICovCiAJeyBVU0JfREVWSUNFKDB4MTUxNiwgMHg4NjI4KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCisJLyogSU5URUwgVkFMVUUgU1NEICovCisJeyBVU0JfREVWSUNFKDB4ODA4NiwgMHhmMWE1KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAorCiAJeyB9ICAvKiB0ZXJtaW5hdGluZyBlbnRyeSBtdXN0IGJlIGxhc3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IDRlOTg0MDYuLjFmMGRiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtOTksOCArOTksNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2lmbnVtX3RvX2lmKTsKIAogLyoqCi0gKiB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcgLSBnZXQgdGhlIGFsdHNldHRpbmcgc3RydWN0dXJlIHdpdGggYSBnaXZlbgotICoJYWx0ZXJuYXRlIHNldHRpbmcgbnVtYmVyLgorICogdXNiX2FsdG51bV90b19hbHRzZXR0aW5nIC0gZ2V0IHRoZSBhbHRzZXR0aW5nIHN0cnVjdHVyZSB3aXRoIGEgZ2l2ZW4gYWx0ZXJuYXRlIHNldHRpbmcgbnVtYmVyLgogICogQGludGY6IHRoZSBpbnRlcmZhY2UgY29udGFpbmluZyB0aGUgYWx0c2V0dGluZyBpbiBxdWVzdGlvbgogICogQGFsdG51bTogdGhlIGRlc2lyZWQgYWx0ZXJuYXRlIHNldHRpbmcgbnVtYmVyCiAgKgpAQCAtMjM0LDcgKzIzMyw3IEBACiAJICogc2luZ2xldGhyZWFkZWQuICBJdHMgam9iIGRvZXNuJ3QganVzdGlmeSBydW5uaW5nIG9uIG1vcmUKIAkgKiB0aGFuIG9uZSBDUFUuCiAJICovCi0Ja3N1c3BlbmRfdXNiX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtzdXNwZW5kX3VzYmQiKTsKKwlrc3VzcGVuZF91c2Jfd3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoImtzdXNwZW5kX3VzYmQiKTsKIAlpZiAoIWtzdXNwZW5kX3VzYl93cSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CkBAIC00NDIsOCArNDQxLDcgQEAKICAqLwogCiAvKioKLSAqIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQgLSBjYXV0aW91c2x5IGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEKLSAqCXVzYiBkZXZpY2Ugc3RydWN0dXJlCisgKiB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0IC0gY2F1dGlvdXNseSBhY3F1aXJlIHRoZSBsb2NrIGZvciBhIHVzYiBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdWRldjogZGV2aWNlIHRoYXQncyBiZWluZyBsb2NrZWQKICAqIEBpZmFjZTogaW50ZXJmYWNlIGJvdW5kIHRvIHRoZSBkcml2ZXIgbWFraW5nIHRoZSByZXF1ZXN0IChvcHRpb25hbCkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IGMxMzk1NTEuLmQ2ODFiYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0xMTgsMTAgKzExOCwxMCBAQAogY29uZmlnIFVTQl9HQURHRVRfQVRNRUxfVVNCQQogCWJvb2xlYW4gIkF0bWVsIFVTQkEiCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECi0JZGVwZW5kcyBvbiBBVlIzMgorCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxQ0FQOQogCWhlbHAKIAkgIFVTQkEgaXMgdGhlIGludGVncmF0ZWQgaGlnaC1zcGVlZCBVU0IgRGV2aWNlIGNvbnRyb2xsZXIgb24KLQkgIHRoZSBBVDMyQVA3MDB4IHByb2Nlc3NvcnMgZnJvbSBBdG1lbC4KKwkgIHRoZSBBVDMyQVA3MDB4IGFuZCBBVDkxQ0FQOSBwcm9jZXNzb3JzIGZyb20gQXRtZWwuCiAKIGNvbmZpZyBVU0JfQVRNRUxfVVNCQQogCXRyaXN0YXRlCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogY29uZmlnIFVTQl9HQURHRVRfRlNMX1VTQjIKIAlib29sZWFuICJGcmVlc2NhbGUgSGlnaHNwZWVkIFVTQiBEUiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBNUEM4MzR4IHx8IFBQQ19NUEM4MzF4CisJZGVwZW5kcyBvbiBGU0xfU09DCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECiAJaGVscAogCSAgIFNvbWUgb2YgRnJlZXNjYWxlIFBvd2VyUEMgcHJvY2Vzc29ycyBoYXZlIGEgSGlnaCBTcGVlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwppbmRleCBhODNlOGI3Li5mZDE1Y2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpAQCAtMTg4NCwzICsxODg0LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQVQ5MSB1ZGMgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJUaG9tYXMgUmF0aGJvbmUsIERhdmlkIEJyb3duZWxsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF0OTFfdWRjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCmluZGV4IGFmOGIyYTMuLmU3NTYwMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXRtZWxfdXNiYV91ZGMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KQEAgLTI3LDYgKzI4LDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IHVzYmFfdWRjIHRoZV91ZGM7CitzdGF0aWMgc3RydWN0IHVzYmFfZXAgKnVzYmFfZXA7CiAKICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KQEAgLTMyNCw1MyArMzI2LDI4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlfdG9fZmlmbyh2b2lkIF9faW9tZW0gKmZpZm8sIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbikKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKKyNpZiBkZWZpbmVkKENPTkZJR19BVlIzMikKIAotCURCRyhEQkdfRklGTywgImNvcHkgdG8gRklGTyAobGVuICVkKTpcbiIsIGxlbik7Ci0JZm9yICg7IGxlbiA+IDA7IGxlbiAtPSA0LCBidWYgKz0gNCwgZmlmbyArPSA0KSB7Ci0JCXRtcCA9ICoodW5zaWduZWQgbG9uZyAqKWJ1ZjsKLQkJaWYgKGxlbiA+PSA0KSB7Ci0JCQlEQkcoREJHX0ZJRk8sICIgIC0+ICUwOGx4XG4iLCB0bXApOwotCQkJX19yYXdfd3JpdGVsKHRtcCwgZmlmbyk7Ci0JCX0gZWxzZSB7Ci0JCQlkbyB7Ci0JCQkJREJHKERCR19GSUZPLCAiICAtPiAlMDJseFxuIiwgdG1wID4+IDI0KTsKLQkJCQlfX3Jhd193cml0ZWIodG1wID4+IDI0LCBmaWZvKTsKLQkJCQlmaWZvKys7Ci0JCQkJdG1wIDw8PSA4OwotCQkJfSB3aGlsZSAoLS1sZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9CitzdGF0aWMgdm9pZCB0b2dnbGVfYmlhcyhpbnQgaXNfb24pCit7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlfZnJvbV9maWZvKHZvaWQgKmJ1Ziwgdm9pZCBfX2lvbWVtICpmaWZvLCBpbnQgbGVuKQotewotCXVuaW9uIHsKLQkJdW5zaWduZWQgbG9uZyAqdzsKLQkJdW5zaWduZWQgY2hhciAqYjsKLQl9IHA7Ci0JdW5zaWduZWQgbG9uZyB0bXA7CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTEpCiAKLQlEQkcoREJHX0ZJRk8sICJjb3B5IGZyb20gRklGTyAobGVuICVkKTpcbiIsIGxlbik7Ci0JZm9yIChwLncgPSBidWY7IGxlbiA+IDA7IGxlbiAtPSA0LCBwLncrKywgZmlmbyArPSA0KSB7Ci0JCWlmIChsZW4gPj0gNCkgewotCQkJdG1wID0gX19yYXdfcmVhZGwoZmlmbyk7Ci0JCQkqcC53ID0gdG1wOwotCQkJREJHKERCR19GSUZPLCAiICAtPiAlMDhseFxuIiwgdG1wKTsKLQkJfSBlbHNlIHsKLQkJCWRvIHsKLQkJCQl0bXAgPSBfX3Jhd19yZWFkYihmaWZvKTsKLQkJCQkqcC5iID0gdG1wOwotCQkJCURCRyhEQkdfRklGTywgIiAtPiAlMDJseFxuIiwgdG1wKTsKLQkJCQlmaWZvKyssIHAuYisrOwotCQkJfSB3aGlsZSAoLS1sZW4pOwotCQl9Ci0JfQorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcG1jLmg+CisKK3N0YXRpYyB2b2lkIHRvZ2dsZV9iaWFzKGludCBpc19vbikKK3sKKwl1bnNpZ25lZCBpbnQgdWNrciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX1VDS1IpOworCisJaWYgKGlzX29uKQorCQlhdDkxX3N5c193cml0ZShBVDkxX0NLR1JfVUNLUiwgdWNrciB8IEFUOTFfUE1DX0JJQVNFTik7CisJZWxzZQorCQlhdDkxX3N5c193cml0ZShBVDkxX0NLR1JfVUNLUiwgdWNrciAmIH4oQVQ5MV9QTUNfQklBU0VOKSk7CiB9CiAKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9BVDkxICovCisKIHN0YXRpYyB2b2lkIG5leHRfZmlmb190cmFuc2FjdGlvbihzdHJ1Y3QgdXNiYV9lcCAqZXAsIHN0cnVjdCB1c2JhX3JlcXVlc3QgKnJlcSkKIHsKIAl1bnNpZ25lZCBpbnQgdHJhbnNhY3Rpb25fbGVuOwpAQCAtMzg3LDcgKzM2NCw3IEBACiAJCWVwLT5lcC5uYW1lLCByZXEsIHRyYW5zYWN0aW9uX2xlbiwKIAkJcmVxLT5sYXN0X3RyYW5zYWN0aW9uID8gIiwgZG9uZSIgOiAiIik7CiAKLQljb3B5X3RvX2ZpZm8oZXAtPmZpZm8sIHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbCwgdHJhbnNhY3Rpb25fbGVuKTsKKwltZW1jcHlfdG9pbyhlcC0+ZmlmbywgcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsLCB0cmFuc2FjdGlvbl9sZW4pOwogCXVzYmFfZXBfd3JpdGVsKGVwLCBTRVRfU1RBLCBVU0JBX1RYX1BLX1JEWSk7CiAJcmVxLT5yZXEuYWN0dWFsICs9IHRyYW5zYWN0aW9uX2xlbjsKIH0KQEAgLTQ3Niw3ICs0NTMsNyBAQAogCQkJYnl0ZWNvdW50ID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOwogCQl9CiAKLQkJY29weV9mcm9tX2ZpZm8ocmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsLAorCQltZW1jcHlfZnJvbWlvKHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbCwKIAkJCQllcC0+ZmlmbywgYnl0ZWNvdW50KTsKIAkJcmVxLT5yZXEuYWN0dWFsICs9IGJ5dGVjb3VudDsKIApAQCAtMTAyOSwzMyArMTAwNiw2IEBACiAJLnNldF9zZWxmcG93ZXJlZAk9IHVzYmFfdWRjX3NldF9zZWxmcG93ZXJlZCwKIH07CiAKLSNkZWZpbmUgRVAobmFtLCBpZHgsIG1heHBrdCwgbWF4YmssIGRtYSwgaXNvYykJCQlcCi17CQkJCQkJCQlcCi0JLmVwCT0gewkJCQkJCVwKLQkJLm9wcwkJPSAmdXNiYV9lcF9vcHMsCQkJXAotCQkubmFtZQkJPSBuYW0sCQkJCVwKLQkJLm1heHBhY2tldAk9IG1heHBrdCwJCQlcCi0JfSwJCQkJCQkJXAotCS51ZGMJCT0gJnRoZV91ZGMsCQkJCVwKLQkucXVldWUJCT0gTElTVF9IRUFEX0lOSVQodXNiYV9lcFtpZHhdLnF1ZXVlKSwJXAotCS5maWZvX3NpemUJPSBtYXhwa3QsCQkJCVwKLQkubnJfYmFua3MJPSBtYXhiaywJCQkJXAotCS5pbmRleAkJPSBpZHgsCQkJCQlcCi0JLmNhbl9kbWEJPSBkbWEsCQkJCQlcCi0JLmNhbl9pc29jCT0gaXNvYywJCQkJCVwKLX0KLQotc3RhdGljIHN0cnVjdCB1c2JhX2VwIHVzYmFfZXBbXSA9IHsKLQlFUCgiZXAwIiwgMCwgNjQsIDEsIDAsIDApLAotCUVQKCJlcDFpbi1idWxrIiwgMSwgNTEyLCAyLCAxLCAxKSwKLQlFUCgiZXAyb3V0LWJ1bGsiLCAyLCA1MTIsIDIsIDEsIDEpLAotCUVQKCJlcDNpbi1pbnQiLCAzLCA2NCwgMywgMSwgMCksCi0JRVAoImVwNG91dC1pbnQiLCA0LCA2NCwgMywgMSwgMCksCi0JRVAoImVwNWluLWlzbyIsIDUsIDEwMjQsIDMsIDEsIDEpLAotCUVQKCJlcDZvdXQtaXNvIiwgNiwgMTAyNCwgMywgMSwgMSksCi19OwotI3VuZGVmIEVQCi0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgdXNiYV9lcDBfZGVzYyA9IHsKIAkuYkxlbmd0aCA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCkBAIC0xMDc0LDcgKzEwMjQsNiBAQAogc3RhdGljIHN0cnVjdCB1c2JhX3VkYyB0aGVfdWRjID0gewogCS5nYWRnZXQJPSB7CiAJCS5vcHMJCT0gJnVzYmFfdWRjX29wcywKLQkJLmVwMAkJPSAmdXNiYV9lcFswXS5lcCwKIAkJLmVwX2xpc3QJPSBMSVNUX0hFQURfSU5JVCh0aGVfdWRjLmdhZGdldC5lcF9saXN0KSwKIAkJLmlzX2R1YWxzcGVlZAk9IDEsCiAJCS5uYW1lCQk9ICJhdG1lbF91c2JhX3VkYyIsCkBAIC0xMjMxLDcgKzExODAsNyBAQAogCQl9IGVsc2UgewogCQkJdXNiYV9lcF93cml0ZWwoZXAsIENUTF9FTkIsIFVTQkFfRVBUX0VOQUJMRSk7CiAJCQl1c2JhX3dyaXRlbCh1ZGMsIFRTVCwgVVNCQV9UU1RfUEtUX01PREUpOwotCQkJY29weV90b19maWZvKGVwLT5maWZvLCB0ZXN0X3BhY2tldF9idWZmZXIsCisJCQltZW1jcHlfdG9pbyhlcC0+ZmlmbywgdGVzdF9wYWNrZXRfYnVmZmVyLAogCQkJCQlzaXplb2YodGVzdF9wYWNrZXRfYnVmZmVyKSk7CiAJCQl1c2JhX2VwX3dyaXRlbChlcCwgU0VUX1NUQSwgVVNCQV9UWF9QS19SRFkpOwogCQkJZGV2X2luZm8oZGV2LCAiRW50ZXJpbmcgVGVzdF9QYWNrZXQgbW9kZS4uLlxuIik7CkBAIC0xNTMwLDEzICsxNDc5LDEzIEBACiAJCURCRyhEQkdfSFcsICJQYWNrZXQgbGVuZ3RoOiAldVxuIiwgcGt0X2xlbik7CiAJCWlmIChwa3RfbGVuICE9IHNpemVvZihjcnEpKSB7CiAJCQlwcl93YXJuaW5nKCJ1ZGM6IEludmFsaWQgcGFja2V0IGxlbmd0aCAldSAiCi0JCQkJIihleHBlY3RlZCAlbHUpXG4iLCBwa3RfbGVuLCBzaXplb2YoY3JxKSk7CisJCQkJIihleHBlY3RlZCAlenUpXG4iLCBwa3RfbGVuLCBzaXplb2YoY3JxKSk7CiAJCQlzZXRfcHJvdG9jb2xfc3RhbGwodWRjLCBlcCk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlEQkcoREJHX0ZJRk8sICJDb3B5aW5nIGN0cmwgcmVxdWVzdCBmcm9tIDB4JXA6XG4iLCBlcC0+Zmlmbyk7Ci0JCWNvcHlfZnJvbV9maWZvKGNycS5kYXRhLCBlcC0+Zmlmbywgc2l6ZW9mKGNycSkpOworCQltZW1jcHlfZnJvbWlvKGNycS5kYXRhLCBlcC0+Zmlmbywgc2l6ZW9mKGNycSkpOwogCiAJCS8qIEZyZWUgdXAgb25lIGJhbmsgaW4gdGhlIEZJRk8gc28gdGhhdCB3ZSBjYW4KIAkJICogZ2VuZXJhdGUgb3IgcmVjZWl2ZSBhIHJlcGx5IHJpZ2h0IGF3YXkuICovCkBAIC0xNjg4LDYgKzE2MzcsNyBAQAogCURCRyhEQkdfSU5ULCAiaXJxLCBzdGF0dXM9JSMwOHhcbiIsIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgVVNCQV9ERVRfU1VTUEVORCkgeworCQl0b2dnbGVfYmlhcygwKTsKIAkJdXNiYV93cml0ZWwodWRjLCBJTlRfQ0xSLCBVU0JBX0RFVF9TVVNQRU5EKTsKIAkJREJHKERCR19CVVMsICJTdXNwZW5kIGRldGVjdGVkXG4iKTsKIAkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCkBAIC0xNjk5LDYgKzE2NDksNyBAQAogCX0KIAogCWlmIChzdGF0dXMgJiBVU0JBX1dBS0VfVVApIHsKKwkJdG9nZ2xlX2JpYXMoMSk7CiAJCXVzYmFfd3JpdGVsKHVkYywgSU5UX0NMUiwgVVNCQV9XQUtFX1VQKTsKIAkJREJHKERCR19CVVMsICJXYWtlIFVwIENQVSBkZXRlY3RlZFxuIik7CiAJfQpAQCAtMTc5MiwxMiArMTc0MywxNCBAQAogCXZidXMgPSBncGlvX2dldF92YWx1ZSh1ZGMtPnZidXNfcGluKTsKIAlpZiAodmJ1cyAhPSB1ZGMtPnZidXNfcHJldikgewogCQlpZiAodmJ1cykgewotCQkJdXNiYV93cml0ZWwodWRjLCBDVFJMLCBVU0JBX0VOX1VTQkEpOworCQkJdG9nZ2xlX2JpYXMoMSk7CisJCQl1c2JhX3dyaXRlbCh1ZGMsIENUUkwsIFVTQkFfRU5BQkxFX01BU0spOwogCQkJdXNiYV93cml0ZWwodWRjLCBJTlRfRU5CLCBVU0JBX0VORF9PRl9SRVNFVCk7CiAJCX0gZWxzZSB7CiAJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwogCQkJcmVzZXRfYWxsX2VuZHBvaW50cyh1ZGMpOwotCQkJdXNiYV93cml0ZWwodWRjLCBDVFJMLCAwKTsKKwkJCXRvZ2dsZV9iaWFzKDApOworCQkJdXNiYV93cml0ZWwodWRjLCBDVFJMLCBVU0JBX0RJU0FCTEVfTUFTSyk7CiAJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKIAkJCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CiAJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CkBAIC0xODUwLDcgKzE4MDMsOCBAQAogCS8qIElmIFZidXMgaXMgcHJlc2VudCwgZW5hYmxlIHRoZSBjb250cm9sbGVyIGFuZCB3YWl0IGZvciByZXNldCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAlpZiAodmJ1c19pc19wcmVzZW50KHVkYykgJiYgdWRjLT52YnVzX3ByZXYgPT0gMCkgewotCQl1c2JhX3dyaXRlbCh1ZGMsIENUUkwsIFVTQkFfRU5fVVNCQSk7CisJCXRvZ2dsZV9iaWFzKDEpOworCQl1c2JhX3dyaXRlbCh1ZGMsIENUUkwsIFVTQkFfRU5BQkxFX01BU0spOwogCQl1c2JhX3dyaXRlbCh1ZGMsIElOVF9FTkIsIFVTQkFfRU5EX09GX1JFU0VUKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CkBAIC0xODgzLDcgKzE4MzcsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCiAJLyogVGhpcyB3aWxsIGFsc28gZGlzYWJsZSB0aGUgRFAgcHVsbHVwICovCi0JdXNiYV93cml0ZWwodWRjLCBDVFJMLCAwKTsKKwl0b2dnbGVfYmlhcygwKTsKKwl1c2JhX3dyaXRlbCh1ZGMsIENUUkwsIFVTQkFfRElTQUJMRV9NQVNLKTsKIAogCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CiAJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CkBAIC0xOTA4LDcgKzE4NjMsNyBAQAogCiAJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgQ1RSTF9JT01FTV9JRCk7CiAJZmlmbyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgRklGT19JT01FTV9JRCk7Ci0JaWYgKCFyZWdzIHx8ICFmaWZvKQorCWlmICghcmVncyB8fCAhZmlmbyB8fCAhcGRhdGEpCiAJCXJldHVybiAtRU5YSU87CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtMTk1MywxOSArMTkwOCw0OCBAQAogCiAJLyogTWFrZSBzdXJlIHdlIHN0YXJ0IGZyb20gYSBjbGVhbiBzbGF0ZSAqLwogCWNsa19lbmFibGUocGNsayk7Ci0JdXNiYV93cml0ZWwodWRjLCBDVFJMLCAwKTsKKwl0b2dnbGVfYmlhcygwKTsKKwl1c2JhX3dyaXRlbCh1ZGMsIENUUkwsIFVTQkFfRElTQUJMRV9NQVNLKTsKIAljbGtfZGlzYWJsZShwY2xrKTsKIAorCXVzYmFfZXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiYV9lcCkgKiBwZGF0YS0+bnVtX2VwLAorCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYmFfZXApCisJCWdvdG8gZXJyX2FsbG9jX2VwOworCisJdGhlX3VkYy5nYWRnZXQuZXAwID0gJnVzYmFfZXBbMF0uZXA7CisKIAlJTklUX0xJU1RfSEVBRCgmdXNiYV9lcFswXS5lcC5lcF9saXN0KTsKIAl1c2JhX2VwWzBdLmVwX3JlZ3MgPSB1ZGMtPnJlZ3MgKyBVU0JBX0VQVF9CQVNFKDApOwogCXVzYmFfZXBbMF0uZG1hX3JlZ3MgPSB1ZGMtPnJlZ3MgKyBVU0JBX0RNQV9CQVNFKDApOwogCXVzYmFfZXBbMF0uZmlmbyA9IHVkYy0+ZmlmbyArIFVTQkFfRklGT19CQVNFKDApOwotCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHVzYmFfZXApOyBpKyspIHsKKwl1c2JhX2VwWzBdLmVwLm9wcyA9ICZ1c2JhX2VwX29wczsKKwl1c2JhX2VwWzBdLmVwLm5hbWUgPSBwZGF0YS0+ZXBbMF0ubmFtZTsKKwl1c2JhX2VwWzBdLmVwLm1heHBhY2tldCA9IHBkYXRhLT5lcFswXS5maWZvX3NpemU7CisJdXNiYV9lcFswXS51ZGMgPSAmdGhlX3VkYzsKKwlJTklUX0xJU1RfSEVBRCgmdXNiYV9lcFswXS5xdWV1ZSk7CisJdXNiYV9lcFswXS5maWZvX3NpemUgPSBwZGF0YS0+ZXBbMF0uZmlmb19zaXplOworCXVzYmFfZXBbMF0ubnJfYmFua3MgPSBwZGF0YS0+ZXBbMF0ubnJfYmFua3M7CisJdXNiYV9lcFswXS5pbmRleCA9IHBkYXRhLT5lcFswXS5pbmRleDsKKwl1c2JhX2VwWzBdLmNhbl9kbWEgPSBwZGF0YS0+ZXBbMF0uY2FuX2RtYTsKKwl1c2JhX2VwWzBdLmNhbl9pc29jID0gcGRhdGEtPmVwWzBdLmNhbl9pc29jOworCisJZm9yIChpID0gMTsgaSA8IHBkYXRhLT5udW1fZXA7IGkrKykgewogCQlzdHJ1Y3QgdXNiYV9lcCAqZXAgPSAmdXNiYV9lcFtpXTsKIAogCQllcC0+ZXBfcmVncyA9IHVkYy0+cmVncyArIFVTQkFfRVBUX0JBU0UoaSk7CiAJCWVwLT5kbWFfcmVncyA9IHVkYy0+cmVncyArIFVTQkFfRE1BX0JBU0UoaSk7CiAJCWVwLT5maWZvID0gdWRjLT5maWZvICsgVVNCQV9GSUZPX0JBU0UoaSk7CisJCWVwLT5lcC5vcHMgPSAmdXNiYV9lcF9vcHM7CisJCWVwLT5lcC5uYW1lID0gcGRhdGEtPmVwW2ldLm5hbWU7CisJCWVwLT5lcC5tYXhwYWNrZXQgPSBwZGF0YS0+ZXBbaV0uZmlmb19zaXplOworCQllcC0+dWRjID0gJnRoZV91ZGM7CisJCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCQllcC0+Zmlmb19zaXplID0gcGRhdGEtPmVwW2ldLmZpZm9fc2l6ZTsKKwkJZXAtPm5yX2JhbmtzID0gcGRhdGEtPmVwW2ldLm5yX2JhbmtzOworCQllcC0+aW5kZXggPSBwZGF0YS0+ZXBbaV0uaW5kZXg7CisJCWVwLT5jYW5fZG1hID0gcGRhdGEtPmVwW2ldLmNhbl9kbWE7CisJCWVwLT5jYW5faXNvYyA9IHBkYXRhLT5lcFtpXS5jYW5faXNvYzsKIAogCQlsaXN0X2FkZF90YWlsKCZlcC0+ZXAuZXBfbGlzdCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOwogCX0KQEAgLTE5ODQsNyArMTk2OCw3IEBACiAJCWdvdG8gZXJyX2RldmljZV9hZGQ7CiAJfQogCi0JaWYgKHBkYXRhICYmIHBkYXRhLT52YnVzX3BpbiAhPSBHUElPX1BJTl9OT05FKSB7CisJaWYgKHBkYXRhLT52YnVzX3BpbiA+PSAwKSB7CiAJCWlmICghZ3Bpb19yZXF1ZXN0KHBkYXRhLT52YnVzX3BpbiwgImF0bWVsX3VzYmFfdWRjIikpIHsKIAkJCXVkYy0+dmJ1c19waW4gPSBwZGF0YS0+dmJ1c19waW47CiAKQEAgLTIwMDQsNyArMTk4OCw3IEBACiAJfQogCiAJdXNiYV9pbml0X2RlYnVnZnModWRjKTsKLQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRSh1c2JhX2VwKTsgaSsrKQorCWZvciAoaSA9IDE7IGkgPCBwZGF0YS0+bnVtX2VwOyBpKyspCiAJCXVzYmFfZXBfaW5pdF9kZWJ1Z2ZzKHVkYywgJnVzYmFfZXBbaV0pOwogCiAJcmV0dXJuIDA7CkBAIC0yMDEyLDYgKzE5OTYsOCBAQAogZXJyX2RldmljZV9hZGQ6CiAJZnJlZV9pcnEoaXJxLCB1ZGMpOwogZXJyX3JlcXVlc3RfaXJxOgorCWtmcmVlKHVzYmFfZXApOworZXJyX2FsbG9jX2VwOgogCWlvdW5tYXAodWRjLT5maWZvKTsKIGVycl9tYXBfZmlmbzoKIAlpb3VubWFwKHVkYy0+cmVncyk7CkBAIC0yMDI5LDEwICsyMDE1LDExIEBACiB7CiAJc3RydWN0IHVzYmFfdWRjICp1ZGM7CiAJaW50IGk7CisJc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCXVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodXNiYV9lcCk7IGkrKykKKwlmb3IgKGkgPSAxOyBpIDwgcGRhdGEtPm51bV9lcDsgaSsrKQogCQl1c2JhX2VwX2NsZWFudXBfZGVidWdmcygmdXNiYV9lcFtpXSk7CiAJdXNiYV9jbGVhbnVwX2RlYnVnZnModWRjKTsKIApAQCAtMjA0MCw2ICsyMDI3LDcgQEAKIAkJZ3Bpb19mcmVlKHVkYy0+dmJ1c19waW4pOwogCiAJZnJlZV9pcnEodWRjLT5pcnEsIHVkYyk7CisJa2ZyZWUodXNiYV9lcCk7CiAJaW91bm1hcCh1ZGMtPmZpZm8pOwogCWlvdW5tYXAodWRjLT5yZWdzKTsKIAljbGtfcHV0KHVkYy0+aGNsayk7CkBAIC0yMDU0LDYgKzIwNDIsNyBAQAogCS5yZW1vdmUJCT0gX19leGl0X3AodXNiYV91ZGNfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gImF0bWVsX3VzYmFfdWRjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC0yMDcyLDMgKzIwNjEsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBdG1lbCBVU0JBIFVEQyBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdG1lbF91c2JhX3VkYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuaAppbmRleCAwOGJmNmY5Li5mN2JhZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuaApAQCAtNDEsNiArNDEsMTUgQEAKICNkZWZpbmUgVVNCQV9FTl9VU0JBCQkJCSgxIDw8ICA4KQogI2RlZmluZSBVU0JBX0RFVEFDSAkJCQkoMSA8PCAgOSkKICNkZWZpbmUgVVNCQV9SRU1PVEVfV0FLRV9VUAkJCSgxIDw8IDEwKQorI2RlZmluZSBVU0JBX1BVTExEX0RJUwkJCQkoMSA8PCAxMSkKKworI2lmIGRlZmluZWQoQ09ORklHX0FWUjMyKQorI2RlZmluZSBVU0JBX0VOQUJMRV9NQVNLCQkJVVNCQV9FTl9VU0JBCisjZGVmaW5lIFVTQkFfRElTQUJMRV9NQVNLCQkJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxKQorI2RlZmluZSBVU0JBX0VOQUJMRV9NQVNLCQkJKFVTQkFfRU5fVVNCQSB8IFVTQkFfUFVMTERfRElTKQorI2RlZmluZSBVU0JBX0RJU0FCTEVfTUFTSwkJCVVTQkFfREVUQUNICisjZW5kaWYgLyogQ09ORklHX0FSQ0hfQVQ5MSAqLwogCiAvKiBCaXRmaWVsZHMgaW4gRk5VTSAqLwogI2RlZmluZSBVU0JBX01JQ1JPX0ZSQU1FX05VTV9PRkZTRVQJCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggYTcwZTI1NS4uZTk5ODcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTE1NjEsNiArMTU2MSw3IEBACiAJCQkJbWVtY3B5KHJlcS0+YnVmLCBidWYsIG4pOwogCQkJCXJlcS0+Y29tcGxldGUgPSBybmRpc19yZXNwb25zZV9jb21wbGV0ZTsKIAkJCQlybmRpc19mcmVlX3Jlc3BvbnNlKGRldi0+cm5kaXNfY29uZmlnLCBidWYpOworCQkJCXZhbHVlID0gbjsKIAkJCX0KIAkJCS8qIGVsc2Ugc3RhbGxzIC4uLiBzcGVjIHNheXMgdG8gYXZvaWQgdGhhdCAqLwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKaW5kZXggNjNlOGZhMy4uMjU0MDEyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwpAQCAtMjQ3NSwzICsyNDc1LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpmc2wtdXNiMi11ZGMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggODA1NjAyYS4uMGE2ZmVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTE0NTgsNyArMTQ1OCw3IEBACiAJLyogY3VycmVudGx5IG9uZSBjb25maWcsIHR3byBzcGVlZHMgKi8KIAljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CiAJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gMCkKLQkJCWJyZWFrOworCQkJZ290byB1bnJlY29nbml6ZWQ7CiAJCWlmICgwID09ICh1OCkgd192YWx1ZSkgewogCQkJdmFsdWUgPSAwOwogCQkJZGV2LT5jdXJyZW50X2NvbmZpZyA9IDA7CkBAIC0xNTA1LDcgKzE1MDUsNyBAQAogCS8qIFBYQSBhdXRvbWFnaWNhbGx5IGhhbmRsZXMgdGhpcyByZXF1ZXN0IHRvbyAqLwogCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKIAkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAweDgwKQotCQkJYnJlYWs7CisJCQlnb3RvIHVucmVjb2duaXplZDsKIAkJKih1OCAqKXJlcS0+YnVmID0gZGV2LT5jdXJyZW50X2NvbmZpZzsKIAkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSAxKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IDM3MjQzZWYuLjA3OGY3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC0yMTQ2LDMgKzIxNDYsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2tvIExhaHRlZW5tYWtpLCBCbyBIZW5yaWtzZW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bGg3YTQweF91ZGMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tNjY1OTItdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbTY2NTkyLXVkYy5jCmluZGV4IDgzNTk0OGYuLmVlNmIzNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9tNjY1OTItdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L202NjU5Mi11ZGMuYwpAQCAtMzUsNiArMzUsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNNjY1OTIgVVNCIGdhZGdldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIllvc2hpaGlybyBTaGltb2RhIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm02NjU5Ml91ZGMiKTsKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMTggT2N0IDIwMDciCiAKQEAgLTE2NzEsNiArMTY3Miw3IEBACiAJLnJlbW92ZSA9CV9fZXhpdF9wKG02NjU5Ml9yZW1vdmUpLAogCS5kcml2ZXIJCT0gewogCQkubmFtZSA9CShjaGFyICopIHVkY19uYW1lLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwppbmRleCBlNmQ2OGJkLi5lZTFlOWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwpAQCAtMzEwOSw0ICszMTA5LDQgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQorTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpvbWFwX3VkYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggOWZkYWJjOC4uMmMzMmJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC05Miw3ICs5Miw2IEBACiAJdTgJCQkqY3VycmVudF9yeF9idWY7CiAJdTgJCQlwcmludGVyX3N0YXR1czsKIAl1OAkJCXJlc2V0X3ByaW50ZXI7Ci0Jc3RydWN0IGNsYXNzX2RldmljZQkqcHJpbnRlcl9jbGFzc19kZXY7CiAJc3RydWN0IGNkZXYJCXByaW50ZXJfY2RldjsKIAlzdHJ1Y3QgZGV2aWNlCQkqcGRldjsKIAl1OAkJCXByaW50ZXJfY2Rldl9vcGVuOwpAQCAtMTI5OSw3ICsxMjk4LDcgQEAKIAkJcHJpbnRlcl9yZXFfZnJlZShkZXYtPmluX2VwLCByZXEpOwogCX0KIAotCWlmIChkZXYtPmN1cnJlbnRfcnhfcmVxICE9IE5VTEwpOworCWlmIChkZXYtPmN1cnJlbnRfcnhfcmVxICE9IE5VTEwpCiAJCXByaW50ZXJfcmVxX2ZyZWUoZGV2LT5vdXRfZXAsIGRldi0+Y3VycmVudF9yeF9yZXEpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPnJ4X3JlcXMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwppbmRleCA0NDAyZDZmLi5jMDBjZDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKQEAgLTEwMyw2ICsxMDMsMTIgQEAKICNlcnJvciAiQ2FuJ3QgY29uZmlndXJlIGJvdGggSVhQIGFuZCBQWEEiCiAjZW5kaWYKIAorLyogSVhQIGRvZXNuJ3QgeWV0IHN1cHBvcnQgPGxpbnV4L2Nsay5oPiAqLworI2RlZmluZSBjbGtfZ2V0KGRldixuYW1lKQlOVUxMCisjZGVmaW5lIGNsa19lbmFibGUoY2xrKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBjbGtfZGlzYWJsZShjbGspCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xrX3B1dChjbGspCQlkbyB7IH0gd2hpbGUgKDApCisKICNlbmRpZgogCiAjaW5jbHVkZSAicHhhMnh4X3VkYy5oIgpAQCAtOTM0LDIwICs5NDAsMzEgQEAKIC8qIFdlIGRpc2FibGUgdGhlIFVEQyAtLSBhbmQgaXRzIDQ4IE1IeiBjbG9jayAtLSB3aGVuZXZlciBpdCdzIG5vdAogICogaW4gYWN0aXZlIHVzZS4KICAqLwotc3RhdGljIGludCBwdWxsdXAoc3RydWN0IHB4YTJ4eF91ZGMgKnVkYywgaW50IGlzX2FjdGl2ZSkKK3N0YXRpYyBpbnQgcHVsbHVwKHN0cnVjdCBweGEyeHhfdWRjICp1ZGMpCiB7Ci0JaXNfYWN0aXZlID0gaXNfYWN0aXZlICYmIHVkYy0+dmJ1cyAmJiB1ZGMtPnB1bGx1cDsKKwlpbnQgaXNfYWN0aXZlID0gdWRjLT52YnVzICYmIHVkYy0+cHVsbHVwICYmICF1ZGMtPnN1c3BlbmRlZDsKIAlETVNHKCIlc1xuIiwgaXNfYWN0aXZlID8gImFjdGl2ZSIgOiAiaW5hY3RpdmUiKTsKLQlpZiAoaXNfYWN0aXZlKQotCQl1ZGNfZW5hYmxlKHVkYyk7Ci0JZWxzZSB7Ci0JCWlmICh1ZGMtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikgewotCQkJRE1TRygiZGlzY29ubmVjdCAlc1xuIiwgdWRjLT5kcml2ZXIKLQkJCQk/IHVkYy0+ZHJpdmVyLT5kcml2ZXIubmFtZQotCQkJCTogIihubyBkcml2ZXIpIik7Ci0JCQlzdG9wX2FjdGl2aXR5KHVkYywgdWRjLT5kcml2ZXIpOworCWlmIChpc19hY3RpdmUpIHsKKwkJaWYgKCF1ZGMtPmFjdGl2ZSkgeworCQkJdWRjLT5hY3RpdmUgPSAxOworCQkJLyogRW5hYmxlIGNsb2NrIGZvciBVU0IgZGV2aWNlICovCisJCQljbGtfZW5hYmxlKHVkYy0+Y2xrKTsKKwkJCXVkY19lbmFibGUodWRjKTsKIAkJfQotCQl1ZGNfZGlzYWJsZSh1ZGMpOworCX0gZWxzZSB7CisJCWlmICh1ZGMtPmFjdGl2ZSkgeworCQkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCQkJRE1TRygiZGlzY29ubmVjdCAlc1xuIiwgdWRjLT5kcml2ZXIKKwkJCQkJPyB1ZGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUKKwkJCQkJOiAiKG5vIGRyaXZlcikiKTsKKwkJCQlzdG9wX2FjdGl2aXR5KHVkYywgdWRjLT5kcml2ZXIpOworCQkJfQorCQkJdWRjX2Rpc2FibGUodWRjKTsKKwkJCS8qIERpc2FibGUgY2xvY2sgZm9yIFVTQiBkZXZpY2UgKi8KKwkJCWNsa19kaXNhYmxlKHVkYy0+Y2xrKTsKKwkJCXVkYy0+YWN0aXZlID0gMDsKKwkJfQorCiAJfQogCXJldHVybiAwOwogfQpAQCAtOTU4LDkgKzk3NSw5IEBACiAJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYzsKIAogCXVkYyA9IGNvbnRhaW5lcl9vZihfZ2FkZ2V0LCBzdHJ1Y3QgcHhhMnh4X3VkYywgZ2FkZ2V0KTsKLQl1ZGMtPnZidXMgPSBpc19hY3RpdmUgPSAoaXNfYWN0aXZlICE9IDApOworCXVkYy0+dmJ1cyA9IChpc19hY3RpdmUgIT0gMCk7CiAJRE1TRygidmJ1cyAlc1xuIiwgaXNfYWN0aXZlID8gInN1cHBsaWVkIiA6ICJpbmFjdGl2ZSIpOwotCXB1bGx1cCh1ZGMsIGlzX2FjdGl2ZSk7CisJcHVsbHVwKHVkYyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3NSw5ICs5OTIsOCBAQAogCWlmICghdWRjLT5tYWNoLT5ncGlvX3B1bGx1cCAmJiAhdWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaXNfYWN0aXZlID0gKGlzX2FjdGl2ZSAhPSAwKTsKLQl1ZGMtPnB1bGx1cCA9IGlzX2FjdGl2ZTsKLQlwdWxsdXAodWRjLCBpc19hY3RpdmUpOworCXVkYy0+cHVsbHVwID0gKGlzX2FjdGl2ZSAhPSAwKTsKKwlwdWxsdXAodWRjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTk3LDcgKzEwMTMsNyBAQAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTCiAKIHN0YXRpYyBpbnQKLXVkY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmQpCit1ZGNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfZCkKIHsKIAlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gbS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKQEAgLTExNDYsMTEgKzExNjIsNiBAQAogCiAJdWRjX2NsZWFyX21hc2tfVURDQ1IoVURDQ1JfVURFKTsKIAotI2lmZGVmCUNPTkZJR19BUkNIX1BYQQotICAgICAgICAvKiBEaXNhYmxlIGNsb2NrIGZvciBVU0IgZGV2aWNlICovCi0JY2xrX2Rpc2FibGUoZGV2LT5jbGspOwotI2VuZGlmCi0KIAllcDBfaWRsZSAoZGV2KTsKIAlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwogfQpAQCAtMTE5MSwxMSArMTIwMiw2IEBACiB7CiAJdWRjX2NsZWFyX21hc2tfVURDQ1IoVURDQ1JfVURFKTsKIAotI2lmZGVmCUNPTkZJR19BUkNIX1BYQQotICAgICAgICAvKiBFbmFibGUgY2xvY2sgZm9yIFVTQiBkZXZpY2UgKi8KLQljbGtfZW5hYmxlKGRldi0+Y2xrKTsKLSNlbmRpZgotCiAJLyogdHJ5IHRvIGNsZWFyIHRoZXNlIGJpdHMgYmVmb3JlIHdlIGVuYWJsZSB0aGUgdWRjICovCiAJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfU1VTSVJ8LypVRENDUl9SU1RJUnwqL1VEQ0NSX1JFU0lSKTsKIApAQCAtMTI4Niw3ICsxMjkyLDcgQEAKIAkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgogCSAqLwogCURNU0coInJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKLQlwdWxsdXAoZGV2LCAxKTsKKwlwdWxsdXAoZGV2KTsKIAlkdW1wX3N0YXRlKGRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzI5LDcgKzEzMzUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcHVsbHVwKGRldiwgMCk7CisJZGV2LT5wdWxsdXAgPSAwOworCXB1bGx1cChkZXYpOwogCXN0b3BfYWN0aXZpdHkoZGV2LCBkcml2ZXIpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMjEzMSwxMyArMjEzOCwxMSBAQAogCWlmIChpcnEgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotI2lmZGVmCUNPTkZJR19BUkNIX1BYQQogCWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiVURDQ0xLIik7CiAJaWYgKElTX0VSUihkZXYtPmNsaykpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihkZXYtPmNsayk7CiAJCWdvdG8gZXJyX2NsazsKIAl9Ci0jZW5kaWYKIAogCXByX2RlYnVnKCIlczogSVJRICVkJXMlc1xuIiwgZHJpdmVyX25hbWUsIGlycSwKIAkJZGV2LT5oYXNfY2ZyID8gIiIgOiAiICghY2ZyKSIsCkBAIC0yMjUwLDEwICsyMjU1LDggQEAKIAlpZiAoZGV2LT5tYWNoLT5ncGlvX3ZidXMpCiAJCWdwaW9fZnJlZShkZXYtPm1hY2gtPmdwaW9fdmJ1cyk7CiAgZXJyX2dwaW9fdmJ1czoKLSNpZmRlZglDT05GSUdfQVJDSF9QWEEKIAljbGtfcHV0KGRldi0+Y2xrKTsKICBlcnJfY2xrOgotI2VuZGlmCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjI2OSw3ICsyMjcyLDkgQEAKIAlpZiAoZGV2LT5kcml2ZXIpCiAJCXJldHVybiAtRUJVU1k7CiAKLQl1ZGNfZGlzYWJsZShkZXYpOworCWRldi0+cHVsbHVwID0gMDsKKwlwdWxsdXAoZGV2KTsKKwogCXJlbW92ZV9kZWJ1Z19maWxlcyhkZXYpOwogCiAJaWYgKGRldi0+Z290X2lycSkgewpAQCAtMjI4OSw5ICsyMjk0LDcgQEAKIAlpZiAoZGV2LT5tYWNoLT5ncGlvX3B1bGx1cCkKIAkJZ3Bpb19mcmVlKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXApOwogCi0jaWZkZWYJQ09ORklHX0FSQ0hfUFhBCiAJY2xrX3B1dChkZXYtPmNsayk7Ci0jZW5kaWYKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXRoZV9jb250cm9sbGVyID0gTlVMTDsKQEAgLTIzMTcsMTAgKzIzMjAsMTUgQEAKIHN0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXVkYy0+bWFjaC0+Z3Bpb19wdWxsdXAgJiYgIXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCiAJCVdBUk4oIlVTQiBob3N0IHdvbid0IGRldGVjdCBkaXNjb25uZWN0IVxuIik7Ci0JcHVsbHVwKHVkYywgMCk7CisJdWRjLT5zdXNwZW5kZWQgPSAxOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXB1bGx1cCh1ZGMpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjMyOCw4ICsyMzM2LDEyIEBACiBzdGF0aWMgaW50IHB4YTJ4eF91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcHVsbHVwKHVkYywgMSk7CisJdWRjLT5zdXNwZW5kZWQgPSAwOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwdWxsdXAodWRjKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNjgsNCArMjM4MCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0FVVEhPUigiRnJhbmsgQmVja2VyLCBSb2JlcnQgU2Nod2ViZWwsIERhdmlkIEJyb3duZWxsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KK01PRFVMRV9BTElBUygicGxhdGZvcm06cHhhMnh4LXVkYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmgKaW5kZXggYjY3ZTNmZi4uZTJjMTllOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oCkBAIC0xMTksNyArMTE5LDkgQEAKIAkJCQkJCWhhc19jZnIgOiAxLAogCQkJCQkJcmVxX3BlbmRpbmcgOiAxLAogCQkJCQkJcmVxX3N0ZCA6IDEsCi0JCQkJCQlyZXFfY29uZmlnIDogMTsKKwkJCQkJCXJlcV9jb25maWcgOiAxLAorCQkJCQkJc3VzcGVuZGVkIDogMSwKKwkJCQkJCWFjdGl2ZSA6IDE7CiAKICNkZWZpbmUgc3RhcnRfd2F0Y2hkb2coZGV2KSBtb2RfdGltZXIoJmRldi0+dGltZXIsIGppZmZpZXMgKyAoSFovMjAwKSkKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJCXRpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwppbmRleCBhYWRjNDIwLi42YjFlZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwpAQCAtMjA0NywzICsyMDQ3LDUgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0MTAtdXNiZ2FkZ2V0Iik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0NDAtdXNiZ2FkZ2V0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKaW5kZXggZDk3YjE2Yi4uYmY4YmUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtNjksMTAgKzY5LDkgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFVTQl9FSENJX0ZTTAotCWJvb2wKLQlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRAorCWJvb2wgIlN1cHBvcnQgZm9yIEZyZWVzY2FsZSBvbi1jaGlwIEVIQ0kgVVNCIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0QgJiYgRlNMX1NPQwogCXNlbGVjdCBVU0JfRUhDSV9ST09UX0hVQl9UVAotCWRlZmF1bHQgeSBpZiBNUEM4MzR4IHx8IFBQQ19NUEM4MzF4CiAJLS0taGVscC0tLQogCSAgVmFyaWF0aW9uIG9mIEFSQyBVU0IgYmxvY2sgdXNlZCBpbiBzb21lIEZyZWVzY2FsZSBjaGlwcy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IDRjYWE2YTguLjg1MDc0Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTI4MSwyMyArMjgxLDQ0IEBACiB7CiAJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IChzdHJ1Y3QgZWhjaV9oY2QgKikgcGFyYW07CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JdTMyCQkJc3RhdHVzLCBjbWQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKLQlXQVJOX09OKCFlaGNpLT5yZWNsYWltKTsKIAotCXN0YXR1cyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnN0YXR1cyk7Ci0JY21kID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7Ci0JZWhjaV9kYmcoZWhjaSwgIklBQSB3YXRjaGRvZzogc3RhdHVzICV4IGNtZCAleFxuIiwgc3RhdHVzLCBjbWQpOworCS8qIExvc3QgSUFBIGlycXMgd2VkZ2UgdGhpbmdzIGJhZGx5OyBzZWVuIGZpcnN0IHdpdGggYSB2dDgyMzUuCisJICogU28gd2UgbmVlZCB0aGlzIHdhdGNoZG9nLCBidXQgbXVzdCBwcm90ZWN0IGl0IGFnYWluc3QgYm90aAorCSAqIChhKSBTTVAgcmFjZXMgYWdhaW5zdCByZWFsIElBQSBmaXJpbmcgYW5kIHJldHJpZ2dlcmluZywgYW5kCisJICogKGIpIGNsZWFuIEhDIHNodXRkb3duLCB3aGVuIElBQSB3YXRjaGRvZyB3YXMgcGVuZGluZy4KKwkgKi8KKwlpZiAoZWhjaS0+cmVjbGFpbQorCQkJJiYgIXRpbWVyX3BlbmRpbmcoJmVoY2ktPmlhYV93YXRjaGRvZykKKwkJCSYmIEhDX0lTX1JVTk5JTkcoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkgeworCQl1MzIgY21kLCBzdGF0dXM7CiAKLQkvKiBsb3N0IElBQSBpcnFzIHdlZGdlIHRoaW5ncyBiYWRseTsgc2VlbiBmaXJzdCB3aXRoIGEgdnQ4MjM1ICovCi0JaWYgKGVoY2ktPnJlY2xhaW0pIHsKLQkJaWYgKHN0YXR1cyAmIFNUU19JQUEpIHsKLQkJCWVoY2lfdmRiZyAoZWhjaSwgImxvc3QgSUFBXG4iKTsKKwkJLyogSWYgd2UgZ2V0IGhlcmUsIElBQSBpcyAqUkVBTExZKiBsYXRlLiAgSXQncyBiYXJlbHkKKwkJICogY29uY2VpdmFibGUgdGhhdCB0aGUgc3lzdGVtIGlzIHNvIGJ1c3kgdGhhdCBDTURfSUFBRAorCQkgKiBpcyBzdGlsbCBsZWdpdGltYXRlbHkgc2V0LCBzbyBsZXQncyBiZSBzdXJlIGl0J3MKKwkJICogY2xlYXIgYmVmb3JlIHdlIHJlYWQgU1RTX0lBQS4gIChUaGUgSEMgc2hvdWxkIGNsZWFyCisJCSAqIENNRF9JQUFEIHdoZW4gaXQgc2V0cyBTVFNfSUFBLikKKwkJICovCisJCWNtZCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCQlpZiAoY21kICYgQ01EX0lBQUQpCisJCQllaGNpX3dyaXRlbChlaGNpLCBjbWQgJiB+Q01EX0lBQUQsCisJCQkJCSZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCQkvKiBJZiBJQUEgaXMgc2V0IGhlcmUgaXQgZWl0aGVyIGxlZ2l0aW1hdGVseSB0cmlnZ2VyZWQKKwkJICogYmVmb3JlIHdlIGNsZWFyZWQgSUFBRCBhYm92ZSAoYnV0IF93YXlfIGxhdGUsIHNvIHdlJ2xsCisJCSAqIHN0aWxsIGNvdW50IGl0IGFzIGxvc3QpIC4uLiBvciBhIHNpbGljb24gZXJyYXR1bToKKwkJICogLSBWSUEgc2VlbXMgdG8gc2V0IElBQSB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIElSUTsKKwkJICogLSBJQUFEIHBvdGVudGlhbGx5IGNsZWFyZWQgd2l0aG91dCBzZXR0aW5nIElBQS4KKwkJICovCisJCXN0YXR1cyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnN0YXR1cyk7CisJCWlmICgoc3RhdHVzICYgU1RTX0lBQSkgfHwgIShjbWQgJiBDTURfSUFBRCkpIHsKIAkJCUNPVU5UIChlaGNpLT5zdGF0cy5sb3N0X2lhYSk7CiAJCQllaGNpX3dyaXRlbChlaGNpLCBTVFNfSUFBLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKIAkJfQotCQllaGNpX3dyaXRlbChlaGNpLCBjbWQgJiB+Q01EX0lBQUQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCQllaGNpX3ZkYmcoZWhjaSwgIklBQSB3YXRjaGRvZzogc3RhdHVzICV4IGNtZCAleFxuIiwKKwkJCQlzdGF0dXMsIGNtZCk7CiAJCWVuZF91bmxpbmtfYXN5bmMoZWhjaSk7CiAJfQogCkBAIC02MzEsNyArNjUyLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBlaGNpX2lycSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7Ci0JdTMyCQkJc3RhdHVzLCBwY2Rfc3RhdHVzID0gMDsKKwl1MzIJCQlzdGF0dXMsIHBjZF9zdGF0dXMgPSAwLCBjbWQ7CiAJaW50CQkJYmg7CiAKIAlzcGluX2xvY2sgKCZlaGNpLT5sb2NrKTsKQEAgLTY1Miw3ICs2NzMsNyBAQAogCiAJLyogY2xlYXIgKGp1c3QpIGludGVycnVwdHMgKi8KIAllaGNpX3dyaXRlbChlaGNpLCBzdGF0dXMsICZlaGNpLT5yZWdzLT5zdGF0dXMpOwotCWVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZSAqLworCWNtZCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwogCWJoID0gMDsKIAogI2lmZGVmCUVIQ0lfVkVSQk9TRV9ERUJVRwpAQCAtNjczLDggKzY5NCwxNyBAQAogCiAJLyogY29tcGxldGUgdGhlIHVubGlua2luZyBvZiBzb21lIHFoIFs0LjE1LjIuM10gKi8KIAlpZiAoc3RhdHVzICYgU1RTX0lBQSkgewotCQlDT1VOVCAoZWhjaS0+c3RhdHMucmVjbGFpbSk7Ci0JCWVuZF91bmxpbmtfYXN5bmMoZWhjaSk7CisJCS8qIGd1YXJkIGFnYWluc3QgKGFsbGVnZWQpIHNpbGljb24gZXJyYXRhICovCisJCWlmIChjbWQgJiBDTURfSUFBRCkgeworCQkJZWhjaV93cml0ZWwoZWhjaSwgY21kICYgfkNNRF9JQUFELAorCQkJCQkmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJCQllaGNpX2RiZyhlaGNpLCAiSUFBIHdpdGggSUFBRCBzdGlsbCBzZXQ/XG4iKTsKKwkJfQorCQlpZiAoZWhjaS0+cmVjbGFpbSkgeworCQkJQ09VTlQoZWhjaS0+c3RhdHMucmVjbGFpbSk7CisJCQllbmRfdW5saW5rX2FzeW5jKGVoY2kpOworCQl9IGVsc2UKKwkJCWVoY2lfZGJnKGVoY2ksICJJQUEgd2l0aCBub3RoaW5nIHRvIHJlY2xhaW0/XG4iKTsKIAl9CiAKIAkvKiByZW1vdGUgd2FrZXVwIFs0LjMuMV0gKi8KQEAgLTc4MSw3ICs4MTEsNyBAQAogc3RhdGljIHZvaWQgdW5saW5rX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKIHsKIAkvKiBmYWlsZmFzdCAqLwotCWlmICghSENfSVNfUlVOTklORyhlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCWlmICghSENfSVNfUlVOTklORyhlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpICYmIGVoY2ktPnJlY2xhaW0pCiAJCWVuZF91bmxpbmtfYXN5bmMoZWhjaSk7CiAKIAkvKiBpZiBpdCdzIG5vdCBsaW5rZWQgdGhlbiB0aGVyZSdzIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTg2MiwxOCArODkyLDE4IEBACiAJCS8qIHJlc2NoZWR1bGUgUUggaWZmIGFub3RoZXIgcmVxdWVzdCBpcyBxdWV1ZWQgKi8KIAkJaWYgKCFsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KQogCQkJCSYmIEhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKSB7Ci0JCQlpbnQgc2NoZWR1bGVfc3RhdHVzOworCQkJcmMgPSBxaF9zY2hlZHVsZShlaGNpLCBxaCk7CiAKLQkJCXNjaGVkdWxlX3N0YXR1cyA9IHFoX3NjaGVkdWxlIChlaGNpLCBxaCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwotCi0JCQlpZiAoc2NoZWR1bGVfc3RhdHVzICE9IDApIHsKLQkJCQkvLyBzaG91bGRuJ3QgaGFwcGVuIG9mdGVuLCBidXQgLi4uCi0JCQkJLy8gRklYTUUga2lsbCB0aG9zZSB0ZHMnIHVyYnMKLQkJCQllcnIgKCJjYW4ndCByZXNjaGVkdWxlIHFoICVwLCBlcnIgJWQiLAotCQkJCQlxaCwgc2NoZWR1bGVfc3RhdHVzKTsKLQkJCX0KLQkJCXJldHVybiBzdGF0dXM7CisJCQkvKiBBbiBlcnJvciBoZXJlIGxpa2VseSBpbmRpY2F0ZXMgaGFuZHNoYWtlIGZhaWx1cmUKKwkJCSAqIG9yIG5vIHNwYWNlIGxlZnQgaW4gdGhlIHNjaGVkdWxlLiAgTmVpdGhlciBmYXVsdAorCQkJICogc2hvdWxkIGhhcHBlbiBvZnRlbiAuLi4KKwkJCSAqCisJCQkgKiBGSVhNRSBraWxsIHRoZSBub3ctZHlzZnVuY3Rpb25hbCBxdWV1ZWQgdXJicworCQkJICovCisJCQlpZiAocmMgIT0gMCkKKwkJCQllaGNpX2VycihlaGNpLAorCQkJCQkiY2FuJ3QgcmVzY2hlZHVsZSBxaCAlcCwgZXJyICVkIiwKKwkJCQkJcWgsIHJjKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTAwMyw3ICsxMDMzLDcgQEAKICNkZWZpbmUgT0ZfUExBVEZPUk1fRFJJVkVSCWVoY2lfaGNkX3BwY19vZl9kcml2ZXIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT1JJT04KKyNpZmRlZiBDT05GSUdfUExBVF9PUklPTgogI2luY2x1ZGUgImVoY2ktb3Jpb24uYyIKICNkZWZpbmUJUExBVEZPUk1fRFJJVkVSCQllaGNpX29yaW9uX2RyaXZlcgogI2VuZGlmCkBAIC0xMDE0LDcgKzEwNDQsNyBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChQQ0lfRFJJVkVSKSAmJiAhZGVmaW5lZChQTEFURk9STV9EUklWRVIpICYmIFwKLSAgICAhZGVmaW5lZChQUzNfU1lTVEVNX0JVU19EUklWRVIpCisgICAgIWRlZmluZWQoUFMzX1NZU1RFTV9CVVNfRFJJVkVSKSAmJiAhZGVmaW5lZChPRl9QTEFURk9STV9EUklWRVIpCiAjZXJyb3IgIm1pc3NpbmcgYnVzIGdsdWUgZm9yIGVoY2ktaGNkIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwppbmRleCA0MGU4MjQwLi40ZTA2NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCkBAIC0xMzUsOCArMTM1LDYgQEAKIAkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKIAl9CiAJZWhjaS0+Y29tbWFuZCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwotCWlmIChlaGNpLT5yZWNsYWltKQotCQllbmRfdW5saW5rX2FzeW5jKGVoY2kpOwogCWVoY2lfd29yayhlaGNpKTsKIAogCS8qIFVubGlrZSBvdGhlciBVU0IgaG9zdCBjb250cm9sbGVyIHR5cGVzLCBFSENJIGRvZXNuJ3QgaGF2ZQpAQCAtMTgwLDYgKzE3OCw5IEBACiAJZWhjaV9oYWx0IChlaGNpKTsKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCisJaWYgKGVoY2ktPnJlY2xhaW0pCisJCWVuZF91bmxpbmtfYXN5bmMoZWhjaSk7CisKIAkvKiBhbGxvdyByZW1vdGUgd2FrZXVwICovCiAJbWFzayA9IElOVFJfTUFTSzsKIAlpZiAoIWRldmljZV9tYXlfd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vcmlvbi5jCmluZGV4IGUxMjk5ODEuLmQxODdkMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vcmlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vcmlvbi5jCkBAIC0xMSwxNSArMTEsMTggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1vcmlvbi9laGNpLW9yaW9uLmg+CiAKICNkZWZpbmUgcmRsKG9mZikJX19yYXdfcmVhZGwoaGNkLT5yZWdzICsgKG9mZikpCiAjZGVmaW5lIHdybChvZmYsIHZhbCkJX19yYXdfd3JpdGVsKCh2YWwpLCBoY2QtPnJlZ3MgKyAob2ZmKSkKIAotI2RlZmluZSBVU0JfQ0FVU0UJCTB4MzEwCi0jZGVmaW5lIFVTQl9NQVNLCQkweDMxNAogI2RlZmluZSBVU0JfQ01ECQkJMHgxNDAKICNkZWZpbmUgVVNCX01PREUJCTB4MWE4CisjZGVmaW5lIFVTQl9DQVVTRQkJMHgzMTAKKyNkZWZpbmUgVVNCX01BU0sJCTB4MzE0CisjZGVmaW5lIFVTQl9XSU5ET1dfQ1RSTChpKQkoMHgzMjAgKyAoKGkpIDw8IDQpKQorI2RlZmluZSBVU0JfV0lORE9XX0JBU0UoaSkJKDB4MzI0ICsgKChpKSA8PCA0KSkKICNkZWZpbmUgVVNCX0lQRwkJCTB4MzYwCiAjZGVmaW5lIFVTQl9QSFlfUFdSX0NUUkwJMHg0MDAKICNkZWZpbmUgVVNCX1BIWV9UWF9DVFJMCQkweDQyMApAQCAtMTYyLDggKzE2NSwzMCBAQAogCS5idXNfcmVzdW1lID0gZWhjaV9idXNfcmVzdW1lLAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0CitlaGNpX29yaW9uX2NvbmZfbWJ1c193aW5kb3dzKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJd3JsKFVTQl9XSU5ET1dfQ1RSTChpKSwgMCk7CisJCXdybChVU0JfV0lORE9XX0JBU0UoaSksIDApOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkcmFtLT5udW1fY3M7IGkrKykgeworCQlzdHJ1Y3QgbWJ1c19kcmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIGk7CisKKwkJd3JsKFVTQl9XSU5ET1dfQ1RSTChpKSwgKChjcy0+c2l6ZSAtIDEpICYgMHhmZmZmMDAwMCkgfAorCQkJCQkoY3MtPm1idXNfYXR0ciA8PCA4KSB8CisJCQkJCShkcmFtLT5tYnVzX2RyYW1fdGFyZ2V0X2lkIDw8IDQpIHwgMSk7CisJCXdybChVU0JfV0lORE9XX0JBU0UoaSksIGNzLT5iYXNlKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGVoY2lfb3Jpb25fZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IG9yaW9uX2VoY2lfZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKQEAgLTIyNyw2ICsyNTIsMTIgQEAKIAllaGNpLT5zYnJuID0gMHgyMDsKIAogCS8qCisJICogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLgorCSAqLworCWlmIChwZCAhPSBOVUxMICYmIHBkLT5kcmFtICE9IE5VTEwpCisJCWVoY2lfb3Jpb25fY29uZl9tYnVzX3dpbmRvd3MoaGNkLCBwZC0+ZHJhbSk7CisKKwkvKgogCSAqIHNldHVwIE9yaW9uIFVTQiBjb250cm9sbGVyCiAJICovCiAJb3Jpb25fdXNiX3NldHVwKGhjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKaW5kZXggM2JhMDE2Ni4uNzJjY2Q1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwpAQCAtMTUyLDYgKzE1MiwyMCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBQQ0lfVkVORE9SX0lEX1ZJQToKKwkJaWYgKHBkZXYtPmRldmljZSA9PSAweDMxMDQgJiYgKHBkZXYtPnJldmlzaW9uICYgMHhmMCkgPT0gMHg2MCkgeworCQkJdTggdG1wOworCisJCQkvKiBUaGUgVlQ2MjEyIGRlZmF1bHRzIHRvIGEgMSB1c2VjIEVIQ0kgc2xlZXAgdGltZSB3aGljaAorCQkJICogaG9ncyB0aGUgUENJIGJ1cyAqYmFkbHkqLiBTZXR0aW5nIGJpdCA1IG9mIDB4NEIgbWFrZXMKKwkJCSAqIHRoYXQgc2xlZXAgdGltZSB1c2UgdGhlIGNvbnZlbnRpb25hbCAxMCB1c2VjLgorCQkJICovCisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDRiLCAmdG1wKTsKKwkJCWlmICh0bXAgJiAweDIwKQorCQkJCWJyZWFrOworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NGIsIHRtcCB8IDB4MjApOworCQl9CisJCWJyZWFrOwogCX0KIAogCWVoY2lfcmVzZXQoZWhjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwppbmRleCA3NzZhOTdmMy4uMmU0OWRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC0zMTksMTAgKzMxOSwxMCBAQAogCQkJaWYgKGxpa2VseSAobGFzdC0+dXJiICE9IHVyYikpIHsKIAkJCQllaGNpX3VyYl9kb25lKGVoY2ksIGxhc3QtPnVyYiwgbGFzdF9zdGF0dXMpOwogCQkJCWNvdW50Kys7CisJCQkJbGFzdF9zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJCQl9CiAJCQllaGNpX3F0ZF9mcmVlIChlaGNpLCBsYXN0KTsKIAkJCWxhc3QgPSBOVUxMOwotCQkJbGFzdF9zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJCX0KIAogCQkvKiBpZ25vcmUgdXJicyBzdWJtaXR0ZWQgZHVyaW5nIGNvbXBsZXRpb25zIHdlIHJlcG9ydGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggMDEzMGZkOC4uMjAzYTMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtOTExLDggKzkxMSw3IEBACiAJCWJ1ZlswXSA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgewotCQl1MzIgc3RhdHVzID0gaXNwMTE2eC0+cmhwb3J0W2ldID0KLQkJICAgIGlzcDExNnhfcmVhZF9yZWczMihpc3AxMTZ4LCBpID8gSENSSFBPUlQyIDogSENSSFBPUlQxKTsKKwkJdTMyIHN0YXR1cyA9IGlzcDExNnhfcmVhZF9yZWczMihpc3AxMTZ4LCBpID8gSENSSFBPUlQyIDogSENSSFBPUlQxKTsKIAogCQlpZiAoc3RhdHVzICYgKFJIX1BTX0NTQyB8IFJIX1BTX1BFU0MgfCBSSF9QU19QU1NDCiAJCQkgICAgICB8IFJIX1BTX09DSUMgfCBSSF9QU19QUlNDKSkgewpAQCAtMTAzMSw3ICsxMDMwLDkgQEAKIAkJREJHKCJHZXRQb3J0U3RhdHVzXG4iKTsKIAkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCiAJCQlnb3RvIGVycm9yOwotCQl0bXAgPSBpc3AxMTZ4LT5yaHBvcnRbLS13SW5kZXhdOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTE2eC0+bG9jaywgZmxhZ3MpOworCQl0bXAgPSBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgKC0td0luZGV4KSA/IEhDUkhQT1JUMiA6IEhDUkhQT1JUMSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDExNngtPmxvY2ssIGZsYWdzKTsKIAkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIodG1wKTsKIAkJREJHKCJHZXRQb3J0U3RhdHVzOiBwb3J0WyVkXSAgJTA4eFxuIiwgd0luZGV4ICsgMSwgdG1wKTsKIAkJYnJlYWs7CkBAIC0xMDgwLDggKzEwODEsNiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNwMTE2eC0+bG9jaywgZmxhZ3MpOwogCQlpc3AxMTZ4X3dyaXRlX3JlZzMyKGlzcDExNngsIHdJbmRleAogCQkJCSAgICA/IEhDUkhQT1JUMiA6IEhDUkhQT1JUMSwgdG1wKTsKLQkJaXNwMTE2eC0+cmhwb3J0W3dJbmRleF0gPQotCQkgICAgaXNwMTE2eF9yZWFkX3JlZzMyKGlzcDExNngsIHdJbmRleCA/IEhDUkhQT1JUMiA6IEhDUkhQT1JUMSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzcDExNngtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBTZXRQb3J0RmVhdHVyZToKQEAgLTEwOTUsMjQgKzEwOTQsMjIgQEAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMTZ4LT5sb2NrLCBmbGFncyk7CiAJCQlpc3AxMTZ4X3dyaXRlX3JlZzMyKGlzcDExNngsIHdJbmRleAogCQkJCQkgICAgPyBIQ1JIUE9SVDIgOiBIQ1JIUE9SVDEsIFJIX1BTX1BTUyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMTZ4LT5sb2NrLCBmbGFncyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgogCQkJREJHKCJVU0JfUE9SVF9GRUFUX1BPV0VSXG4iKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZpc3AxMTZ4LT5sb2NrLCBmbGFncyk7CiAJCQlpc3AxMTZ4X3dyaXRlX3JlZzMyKGlzcDExNngsIHdJbmRleAogCQkJCQkgICAgPyBIQ1JIUE9SVDIgOiBIQ1JIUE9SVDEsIFJIX1BTX1BQUyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc3AxMTZ4LT5sb2NrLCBmbGFncyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgogCQkJREJHKCJVU0JfUE9SVF9GRUFUX1JFU0VUXG4iKTsKIAkJCXJvb3RfcG9ydF9yZXNldChpc3AxMTZ4LCB3SW5kZXgpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlzcDExNngtPmxvY2ssIGZsYWdzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZ290byBlcnJvcjsKIAkJfQotCQlpc3AxMTZ4LT5yaHBvcnRbd0luZGV4XSA9Ci0JCSAgICBpc3AxMTZ4X3JlYWRfcmVnMzIoaXNwMTE2eCwgd0luZGV4ID8gSENSSFBPUlQyIDogSENSSFBPUlQxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNwMTE2eC0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xNjg3LDE0ICsxNjg0LDE4IEBACiAKICNlbmRpZgogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06aXNwMTE2eC1oY2QiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNwMTE2eF9kcml2ZXIgPSB7CiAJLnByb2JlID0gaXNwMTE2eF9wcm9iZSwKIAkucmVtb3ZlID0gaXNwMTE2eF9yZW1vdmUsCiAJLnN1c3BlbmQgPSBpc3AxMTZ4X3N1c3BlbmQsCiAJLnJlc3VtZSA9IGlzcDExNnhfcmVzdW1lLAogCS5kcml2ZXIgPSB7Ci0JCSAgIC5uYW1lID0gKGNoYXIgKiloY2RfbmFtZSwKLQkJICAgfSwKKwkJLm5hbWUgPSAoY2hhciAqKWhjZF9uYW1lLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oCmluZGV4IGI5MWUyZWQuLjU5NWI5MGE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKQEAgLTI3MCw3ICsyNzAsNiBAQAogCXUzMiByaGRlc2NhOwogCXUzMiByaGRlc2NiOwogCXUzMiByaHN0YXR1czsKLQl1MzIgcmhwb3J0WzJdOwogCiAJLyogYXN5bmMgc2NoZWR1bGU6IGNvbnRyb2wsIGJ1bGsgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGFzeW5jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggMTI2ZmNiZC4uZDcyZGMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC0zNTUsNyArMzU1LDcgQEAKICNkZWZpbmUgb2hjaV9oY2RfYXQ5MV9kcnZfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotTU9EVUxFX0FMSUFTKCJhdDkxX29oY2kiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXQ5MV9vaGNpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2F0OTFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9wcm9iZSwKQEAgLTM2OCw0ICszNjgsMyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IDY2M2EwNjAuLmY5MGZlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTM0NSwzICszNDUsNCBAQAogCX0sCiB9OwogCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF1MXh4eC1vaGNpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKaW5kZXggYTY4Y2U5ZC4uMTU2ZTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwpAQCAtMjExLDYgKzIxMSw4IEBACiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiZXA5M3h4LW9oY2kiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAorTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTplcDkzeHgtb2hjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IGRkNDc5OGUuLjMzZjFjMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogb3V0OgogCWtmcmVlKHNlZW4pOwogCWlmIChvaGNpLT5lZHNfc2NoZWR1bGVkKQotCQltb2RfdGltZXIoJm9oY2ktPnVubGlua193YXRjaGRvZywgcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikpOworCQltb2RfdGltZXIoJm9oY2ktPnVubGlua193YXRjaGRvZywgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopKTsKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKaW5kZXggNGEwNDNhYi4uMTNjMTJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCkBAIC0yNTEsMyArMjUxLDQgQEAKIAl9LAogfTsKIAorTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpsaDdhNDA0LW9oY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IDc0ZTFmNGIuLjdiZmNhMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtNTQ0LDMgKzU0NCw0IEBACiAJfSwKIH07CiAKK01PRFVMRV9BTElBUygicGxhdGZvcm06b2hjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKaW5kZXggNmM1MmM2Ni4uMjhiNDU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCkBAIC00NTYsOSArNDU2LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp1c2Itb2hjaSIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1c2JfaGNkX3BueDQwMDhfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInVzYi1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSB1c2JfaGNkX3BueDQwMDhfcHJvYmUsCiAJLnJlbW92ZSA9IHVzYl9oY2RfcG54NDAwOF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54ODU1MC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDg1NTAuYwppbmRleCA4NWZkZmQyLi42MDVkNTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54ODU1MC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng4NTUwLmMKQEAgLTIzMCwxMSArMjMwLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BTElBUygicG54ODU1MC1vaGNpIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnBueDg1NTAtb2hjaSIpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9wbng4NTUwX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZQkJPSAicG54ODU1MC1vaGNpIiwKKwkJLm5hbWUJPSAicG54ODU1MC1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUJCT0gb2hjaV9oY2RfcG54ODU1MF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9wbng4NTUwX2Rydl9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwppbmRleCBmOTViZTE4OS4uNTIzYzMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCkBAIC0yMTMsMyArMjEzLDQgQEAKIAl9LAogfTsKIAorTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpwcGMtc29jLW9oY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBmZjlhNzk4Li44YWQ5YjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0zNjQsNiArMzY0LDggQEAKIH0KICNlbmRpZgogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06cHhhMjd4LW9oY2kiKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZSwKQEAgLTM3NSw2ICszNzcsNyBAQAogI2VuZGlmCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTI3eC1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCmluZGV4IDUxODE3MzIuLjljOWYzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJaWYgKHF1aXJrX3pmbWljcm8ob2hjaSkKIAkJCSYmIChlZC0+dHlwZSA9PSBQSVBFX0lOVEVSUlVQVCkKIAkJCSYmICEob2hjaS0+ZWRzX3NjaGVkdWxlZCsrKSkKLQkJbW9kX3RpbWVyKCZvaGNpLT51bmxpbmtfd2F0Y2hkb2csIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopKTsKKwkJbW9kX3RpbWVyKCZvaGNpLT51bmxpbmtfd2F0Y2hkb2csIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CiAJd21iICgpOwogCiAJLyogd2UgY2FyZSBhYm91dCBybV9saXN0IHdoZW4gc2V0dGluZyBDTEUvQkxFIGluIGNhc2UgdGhlIEhDIHdhcyBhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKaW5kZXggNDRiNzllOC4uZWFkNDc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCkBAIC01MDEsMyArNTAxLDQgQEAKIAl9LAogfTsKIAorTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEwLW9oY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zaC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNoLmMKaW5kZXggNTMwOWFjMC4uZTdlZTYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNoLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNoLmMKQEAgLTE0MSwzICsxNDEsNCBAQAogCX0sCiB9OwogCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNoX29oY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zbTUwMS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNtNTAxLmMKaW5kZXggYTk3MDcwMS4uNGVhOTI3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNtNTAxLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNtNTAxLmMKQEAgLTI2MiwzICsyNjIsNCBAQAogCQkubmFtZQk9ICJzbTUwMS11c2IiLAogCX0sCiB9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzbTUwMS11c2IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IDBjZTJmYzUuLjlmODBlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtNDQsNiArNDQsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSOEE2NjU5NyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiWW9zaGloaXJvIFNoaW1vZGEiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cjhhNjY1OTdfaGNkIik7CiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjI5IE1heSAyMDA3IgogCkBAIC0yMjE5LDYgKzIyMjAsNyBAQAogCS5yZXN1bWUgPQlyOGE2NjU5N19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lID0gKGNoYXIgKikgaGNkX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCBiYTM3MGM1Li42MjliY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTTDgxMUhTIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNsODExLWhjZCIpOwogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIxOSBNYXkgMjAwNSIKIApAQCAtMTc2Niw2ICsxNzY3LDcgQEAKIAkJcmV0dmFsID0gc2w4MTFoX2J1c19zdXNwZW5kKGhjZCk7CiAJCWJyZWFrOwogCWNhc2UgUE1fRVZFTlRfU1VTUEVORDoKKwljYXNlIFBNX0VWRU5UX0hJQkVSTkFURToKIAljYXNlIFBNX0VWRU5UX1BSRVRIQVc6CQkvKiBleHBsaWNpdGx5IGRpc2NhcmQgaHcgc3RhdGUgKi8KIAkJcG9ydF9wb3dlcihzbDgxMSwgMCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jCmluZGV4IGFjMjgzYjAuLjhlMTE3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdTEzMi1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMKQEAgLTMyMTMsMTUgKzMyMTMsMjAgQEAKICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCWludCByZXR2YWwgPSAwLCBwb3J0czsKKworCQlzd2l0Y2ggKHN0YXRlLmV2ZW50KSB7CisJCWNhc2UgUE1fRVZFTlRfRlJFRVpFOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl9idXNfc3VzcGVuZChoY2QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnRzID0gTUFYX1UxMzJfUE9SVFM7CisJCQlicmVhazsKKwkJY2FzZSBQTV9FVkVOVF9TVVNQRU5EOgorCQljYXNlIFBNX0VWRU5UX0hJQkVSTkFURToKKwkJCXBvcnRzID0gTUFYX1UxMzJfUE9SVFM7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9ydHMtLSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9wb3dlcih1MTMyLCBwb3J0cywgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorCQkJYnJlYWs7CisJCX0KICAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwpAQCAtMzMxMSwzICszMzE2LDQgQEAKIAogbW9kdWxlX2V4aXQodTEzMl9oY2RfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnUxMzJfaGNkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwppbmRleCAxY2I1NmYyLi5hNWU0YzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNkZWZpbmUgQVBQTEVfVkVORE9SX0lECQkweDA1QUMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCmluZGV4IDgyMDg0OTYuLmM3MzBkMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKQEAgLTYxLDYgKzYxLDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0dPVEVNUAkweDAwMDIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9WRVJOSUVSX1NLSVAJMHgwMDAzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9DWUNMT1BTCTB4MDAwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfTENTUEVDCTB4MDAwNgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUlDUk9DSElQCQkweDA0ZDgKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSUNERU0JCTB4MDAwYwpAQCAtOTIsNiArOTMsNyBAQAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9DWUNMT1BTKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPQ0hJUCwgVVNCX0RFVklDRV9JRF9QSUNERU0pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xDU1BFQykgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGxkX3VzYl90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMgYi9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKaW5kZXggNjdlMmZjMi4uMDMzNjhlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYwpAQCAtNTksMTMgKzU5LDE0IEBACiB7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CiAJc3RydWN0IHRyYW5jZXZpYnJhdG9yICp0diA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JaW50IHRlbXAsIHJldHZhbDsKKwlpbnQgdGVtcCwgcmV0dmFsLCBvbGQ7CiAKIAl0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAJaWYgKHRlbXAgPiAyNTUpCiAJCXRlbXAgPSAyNTU7CiAJZWxzZSBpZiAodGVtcCA8IDApCiAJCXRlbXAgPSAwOworCW9sZCA9IHR2LT5zcGVlZDsKIAl0di0+c3BlZWQgPSB0ZW1wOwogCiAJZGV2X2RiZygmdHYtPnVkZXYtPmRldiwgInNwZWVkID0gJWRcbiIsIHR2LT5zcGVlZCk7CkBAIC03Nyw2ICs3OCw3IEBACiAJCQkJIHR2LT5zcGVlZCwgLyogc3BlZWQgdmFsdWUgKi8KIAkJCQkgMCwgTlVMTCwgMCwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOwogCWlmIChyZXR2YWwpIHsKKwkJdHYtPnNwZWVkID0gb2xkOwogCQlkZXZfZGJnKCZ0di0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CiAJCXJldHVybiByZXR2YWw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCBkYTkyMmRmLi5iNmI1YjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMzc4LDYgKzM3OCw3IEBACiAJc2cgPSBrbWFsbG9jIChuZW50cyAqIHNpemVvZiAqc2csIEdGUF9LRVJORUwpOwogCWlmICghc2cpCiAJCXJldHVybiBOVUxMOworCXNnX2luaXRfdGFibGUoc2csIG5lbnRzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CiAJCWNoYXIJCSpidWY7CkBAIC0zOTAsNyArMzkxLDcgQEAKIAkJfQogCiAJCS8qIGttYWxsb2MgcGFnZXMgYXJlIGFsd2F5cyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMhICovCi0JCXNnX2luaXRfb25lKCZzZ1tpXSwgYnVmLCBzaXplKTsKKwkJc2dfc2V0X2J1Zigmc2dbaV0sIGJ1Ziwgc2l6ZSk7CiAKIAkJc3dpdGNoIChwYXR0ZXJuKSB7CiAJCWNhc2UgMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwppbmRleCBmM2NhNjYwLi4zMjRiYjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCkBAIC03NSw2ICs3NSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUUyKSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBCYWJ5LUxJTiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFFNykgfSwgLyogQWVyb2NvbW0gUmFkaW8gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyMTgpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEhBUlAtMSAqLworCXsgVVNCX0RFVklDRSgweDEwYzQsIDB4ODI5MykgfSwgLyogVGVsZWdlc3lzIEVUUlgyVVNCICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAxKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0JzY29wZTUwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCAwOGM2NWMxLi43NzlkMDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTk0LDYgKzk0LDcgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2N5cGhpZGNvbXJzMjMyIFtdID0gewogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfQ1lQUkVTUywgUFJPRFVDVF9JRF9DWVBISURDT00pIH0sCisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9QT1dFUkNPTSwgUFJPRFVDVF9JRF9VUFMpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTEwNiw2ICsxMDcsNyBAQAogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREVMT1JNRSwgUFJPRFVDVF9JRF9FQVJUSE1BVEVVU0IpIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9ERUxPUk1FLCBQUk9EVUNUX0lEX0VBUlRITUFURVVTQl9MVDIwKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfQ1lQUkVTUywgUFJPRFVDVF9JRF9DWVBISURDT00pIH0sCisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9QT1dFUkNPTSwgUFJPRFVDVF9JRF9VUFMpIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9EQVpaTEUsIFBST0RVQ1RfSURfQ0E0MikgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oCmluZGV4IGUxYzdjMjcuLjAzODgwNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaApAQCAtMTksNiArMTksMTAgQEAKICNkZWZpbmUgVkVORE9SX0lEX0NZUFJFU1MJCSAweDA0YjQKICNkZWZpbmUgUFJPRFVDVF9JRF9DWVBISURDT00JCSAweDU1MDAKIAorLyogUG93ZXJjb20gVVBTLCBjaGlwIENZN0M2MzcyMyAqLworI2RlZmluZSBWRU5ET1JfSURfUE9XRVJDT00JCSAweDBkOWYKKyNkZWZpbmUgUFJPRFVDVF9JRF9VUFMJCQkgMHgwMDAyCisKIC8qIE5va2lhIENBLTQyIFVTQiB0byBzZXJpYWwgY2FibGUgKi8KICNkZWZpbmUgVkVORE9SX0lEX0RBWlpMRQkJMHgwN2QwCiAjZGVmaW5lIFBST0RVQ1RfSURfQ0E0MgkJCTB4NDEwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA5MGRjYzYyLi4zYWJiM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtOTIsNiArOTIsNyBAQAogfTsKIAogc3RhdGljIGludCAgIGZ0ZGlfanRhZ19wcm9iZQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgIGZ0ZGlfbXR4b3JiX2hhY2tfc2V0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgIGZ0ZGlfVVNCX1VJUlRfc2V0dXAJKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogc3RhdGljIHZvaWQgIGZ0ZGlfSEVfVElSQTFfc2V0dXAJKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogCkBAIC05OSw2ICsxMDAsMTAgQEAKIAkucHJvYmUJPSBmdGRpX2p0YWdfcHJvYmUsCiB9OwogCitzdGF0aWMgc3RydWN0IGZ0ZGlfc2lvX3F1aXJrIGZ0ZGlfbXR4b3JiX2hhY2tfcXVpcmsgPSB7CisJLnByb2JlICA9IGZ0ZGlfbXR4b3JiX2hhY2tfc2V0dXAsCit9OworCiBzdGF0aWMgc3RydWN0IGZ0ZGlfc2lvX3F1aXJrIGZ0ZGlfVVNCX1VJUlRfcXVpcmsgPSB7CiAJLnBvcnRfcHJvYmUgPSBmdGRpX1VTQl9VSVJUX3NldHVwLAogfTsKQEAgLTE2MSw2ICsxNjYsOCBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NVFhPUkJfNF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01UWE9SQl81X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTVRYT1JCXzZfUElEKSB9LAorCXsgVVNCX0RFVklDRShNVFhPUkJfVktfVklELCBNVFhPUkJfVktfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX210eG9yYl9oYWNrX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BJRUdST1VQX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVE5DX1hfUElEKSB9LApAQCAtMjc0LDYgKzI4MSw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9GUzIwU0lHX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1dTMzAwUENfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfRkhaMTMwMFBDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX0VNMTAxMFBDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRUxWX1dTNTAwX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIExJTlhfU0RNVVNCUVNTX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIExJTlhfTUFTVEVSREVWRUwyX1BJRCkgfSwKQEAgLTM1MSw2ICszNTksNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NQVhTVFJFQU1fUElEKSB9LAogCXsgVVNCX0RFVklDRShUTUxfVklELCBUTUxfVVNCX1NFUklBTF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMU1RFUl9VTklDT01fUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9QUk9QT1hfSlRBR0NBQkxFSUlfUElEKSB9LAogCXsgVVNCX0RFVklDRShPTElNRVhfVklELCBPTElNRVhfQVJNX1VTQl9PQ0RfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKIAl7IFVTQl9ERVZJQ0UoRklDX1ZJRCwgRklDX05FTzE5NzNfREVCVUdfUElEKSwKQEAgLTM5Myw4ICs0MDIsOCBAQAogI2RlZmluZSBGVERJX1NUQVRVU19CMV9NQVNLCShGVERJX1JTX0JJKQogLyogRW5kIFRJT0NNSVdBSVQgKi8KIAotI2RlZmluZSBGVERJX0lNUExfQVNZTkNfRkxBR1MgPSAoIEFTWU5DX1NQRF9ISSB8IEFTWU5DX1NQRF9WSEkgXAotIEFTWU5DX1NQRF9DVVNUIHwgQVNZTkNfU1BEX1NISSB8IEFTWU5DX1NQRF9XQVJQICkKKyNkZWZpbmUgRlRESV9JTVBMX0FTWU5DX0ZMQUdTID0gKEFTWU5DX1NQRF9ISSB8IEFTWU5DX1NQRF9WSEkgXAorIHwgQVNZTkNfU1BEX0NVU1QgfCBBU1lOQ19TUERfU0hJIHwgQVNZTkNfU1BEX1dBUlApCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgRlRESSBzZXJpYWwgY29udmVydGVyICovCiBzdGF0aWMgaW50ICBmdGRpX3Npb19wcm9iZQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKQEAgLTEwODgsNiArMTA5NywyMyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhlIE1hdHJpeCBPcmJpdGFsIFZLMjA0LTI1LVVTQiBoYXMgYW4gaW52YWxpZCBJTiBlbmRwb2ludC4KKyAqIFdlIGhhdmUgdG8gY29ycmVjdCBpdCBpZiB3ZSB3YW50IHRvIHJlYWQgZnJvbSBpdC4KKyAqLworc3RhdGljIGludCBmdGRpX210eG9yYl9oYWNrX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCA9IHNlcmlhbC0+ZGV2LT5lcF9pblsxXTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2Rlc2MgPSAmZXAtPmRlc2M7CisKKwlpZiAoZXAtPmVuYWJsZWQgJiYgZXBfZGVzYy0+d01heFBhY2tldFNpemUgPT0gMCkgeworCQllcF9kZXNjLT53TWF4UGFja2V0U2l6ZSA9IDB4NDA7CisJCWluZm8oIkZpeGluZyBpbnZhbGlkIHdNYXhQYWNrZXRTaXplIG9uIHJlYWQgcGlwZSIpOworCX0KKworCXJldHVybiAwOworfQorCiAvKiBmdGRpX3NodXRkb3duIGlzIGNhbGxlZCBmcm9tIHVzYnNlcmlhbDp1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QKICAqICAgaXQgaXMgY2FsbGVkIHdoZW4gdGhlIHVzYiBkZXZpY2UgaXMgZGlzY29ubmVjdGVkCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCA2ZWVlMmFiLi42ZGE1MzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMTAyLDYgKzEwMiwxMyBAQAogICogKGh0dHA6Ly93d3cuam9lcm5vbmxpbmUuZGUvZHcvZG9rdS5waHA/aWQ9c3RhcnQmaWR4PXByb2plY3RzOm9vY2RsaW5rKSAqLwogI2RlZmluZSBGVERJX09PQ0RMSU5LX1BJRAkweGJhZjgJLyogQW1vbnRlYyBKVEFHa2V5ICovCiAKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgVksyMDQtMjUtVVNCCisgKiBkaXNwbGF5LCB3aGljaCB1c2UgdGhlIEZUMjMyUkwuCisgKi8KKyNkZWZpbmUgTVRYT1JCX1ZLX1ZJRAkJMHgxYjNkCisjZGVmaW5lIE1UWE9SQl9WS19QSUQJCTB4MDE1OAorCiAvKiBJbnRlcmJpb21ldHJpY3MgVVNCIEkvTyBCb2FyZCAqLwogLyogRGV2ZWxvcGVkIGZvciBJbnRlcmJpb21ldHJpY3MgYnkgUnVkb2xmIEd1Z2xlciAqLwogI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKQEAgLTU1MCw2ICs1NTcsOSBAQAogI2RlZmluZSBUTUxfVklECQkJMHgxQjkxCS8qIFZlbmRvciBJRCAqLwogI2RlZmluZSBUTUxfVVNCX1NFUklBTF9QSUQJMHgwMDY0CS8qIFVTQiAtIFNlcmlhbCBDb252ZXJ0ZXIgKi8KIAorLyogUHJvcG94IGRldmljZXMgKi8KKyNkZWZpbmUgRlRESV9QUk9QT1hfSlRBR0NBQkxFSUlfUElECTB4RDczOAorCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDk3ZmEzYzQuLjdjZmNlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCXJvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCWlmIChyb29tKSB7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHJvb20pOwotCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsgLyogaXMgdGhpcyBhbGxvd2VkIGZyb20gYW4gVVJCIGNhbGxiYWNrID8gKi8KKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0KIAl9CiAKQEAgLTM0OSwxMCArMzQ5LDEyIEBACiAKIAkvKiBUaHJvdHRsZSB0aGUgZGV2aWNlIGlmIHJlcXVlc3RlZCBieSB0dHkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCWlmICghKHBvcnQtPnRocm90dGxlZCA9IHBvcnQtPnRocm90dGxlX3JlcSkpCi0JCS8qIEhhbmRsZSBkYXRhIGFuZCBjb250aW51ZSByZWFkaW5nIGZyb20gZGV2aWNlICovCisJaWYgKCEocG9ydC0+dGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVfcmVxKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJCWZsdXNoX2FuZF9yZXN1Ym1pdF9yZWFkX3VyYihwb3J0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFkX2J1bGtfY2FsbGJhY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCmluZGV4IGNkMzQwNTkuLmU1ZWE1ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCmluZGV4IDhhMGQxNzQuLjc0Y2U4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaApAQCAtNjM3LDYgKzYzNyw3IEBACiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIC0gKHdpdGhvdXQgZmlybXdhcmUpIiwKIAkuaWRfdGFibGUJCT0ga2V5c3Bhbl9wcmVfaWRzLAogCS5udW1faW50ZXJydXB0X2luCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2ludGVycnVwdF9vdXQJPSBOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbgkJPSBOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19vdXQJCT0gTlVNX0RPTlRfQ0FSRSwKIAkubnVtX3BvcnRzCQk9IDEsCkBAIC02NTEsNiArNjUyLDcgQEAKIAkuZGVzY3JpcHRpb24JCT0gIktleXNwYW4gMSBwb3J0IGFkYXB0ZXIiLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuXzFwb3J0X2lkcywKIAkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9pbnRlcnJ1cHRfb3V0CT0gTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfaW4JCT0gTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfb3V0CQk9IE5VTV9ET05UX0NBUkUsCiAJLm51bV9wb3J0cwkJPSAxLApAQCAtNjc4LDYgKzY4MCw3IEBACiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDIgcG9ydCBhZGFwdGVyIiwKIAkuaWRfdGFibGUJCT0ga2V5c3Bhbl8ycG9ydF9pZHMsCiAJLm51bV9pbnRlcnJ1cHRfaW4JPSBOVU1fRE9OVF9DQVJFLAorCS5udW1faW50ZXJydXB0X291dAk9IE5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luCQk9IE5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX291dAkJPSBOVU1fRE9OVF9DQVJFLAogCS5udW1fcG9ydHMJCT0gMiwKQEAgLTcwNSw2ICs3MDgsNyBAQAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiA0IHBvcnQgYWRhcHRlciIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fNHBvcnRfaWRzLAogCS5udW1faW50ZXJydXB0X2luCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2ludGVycnVwdF9vdXQJPSBOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19pbgkJPSBOVU1fRE9OVF9DQVJFLAogCS5udW1fYnVsa19vdXQJCT0gTlVNX0RPTlRfQ0FSRSwKIAkubnVtX3BvcnRzCQk9IDQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwppbmRleCA4NjllY2QzLi5hZWViOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKQEAgLTExMCwxMSArMTEwLDIwIEBACiAKIC8qIHZlbmRvciBpZCBhbmQgZGV2aWNlIGlkIGRlZmluZXMgKi8KIAorLyogVGhlIG5hdGl2ZSBtb3M3ODQwLzc4MjAgY29tcG9uZW50ICovCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTU9TQ0hJUCAgICAgICAgICAgMHg5NzEwCiAjZGVmaW5lIE1PU0NISVBfREVWSUNFX0lEXzc4NDAgICAgICAgICAgMHg3ODQwCiAjZGVmaW5lIE1PU0NISVBfREVWSUNFX0lEXzc4MjAgICAgICAgICAgMHg3ODIwCisvKiBUaGUgbmF0aXZlIGNvbXBvbmVudCBjYW4gaGF2ZSBpdHMgdmVuZG9yL2RldmljZSBpZCdzIG92ZXJyaWRkZW4KKyAqIGluIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuICBTdWNoIGRldmljZXMgY2FuIGJlIGhhbmRsZWQKKyAqIGJ5IG1ha2luZyBhIGNoYW5nZSBoZXJlLCBpbiBtb3NjaGlwX3BvcnRfaWRfdGFibGUsIGFuZCBpbgorICogbW9zY2hpcF9pZF90YWJsZV9jb21iaW5lZAorICovCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQkFOREIgICAgICAgICAgICAgMHgwODU2CisjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzQgICAgICAgMHhBQzQ0CisjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzIgICAgICAgMHhBQzQyCiAKLS8qIEludGVycnVwdCBSb3RpbnVlIERlZmluZXMgICAgKi8KKy8qIEludGVycnVwdCBSb3V0aW5lIERlZmluZXMgICAgKi8KIAogI2RlZmluZSBTRVJJQUxfSUlSX1JMUyAgICAgIDB4MDYKICNkZWZpbmUgU0VSSUFMX0lJUl9NUyAgICAgICAweDAwCkBAIC0xNTksMTIgKzE2OCwxNiBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1vc2NoaXBfcG9ydF9pZF90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzg0MCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzgyMCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yKX0sCiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9pZF90YWJsZV9jb21iaW5lZFtdID0gewogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzg0MCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzgyMCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yKX0sCiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDVlOGJmMWIuLmQxMDEwMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTEwOSwxOCArMTA5LDkyIEBACiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0U2MDAJCQkweDEwMDEKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTIyMAkJCTB4MTAwMwogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMjIwQklTCQkJMHgxMDA0CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDAxCQkJMHgxNDAxCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDAzCQkJMHgxNDAzCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA1CQkJMHgxNDA1CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA2CQkJMHgxNDA2CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA4CQkJMHgxNDA4CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDA5CQkJMHgxNDA5CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDEwCQkJMHgxNDEwCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDExCQkJMHgxNDExCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDEyCQkJMHgxNDEyCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDEzCQkJMHgxNDEzCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE0CQkJMHgxNDE0CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE1CQkJMHgxNDE1CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE2CQkJMHgxNDE2CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE3CQkJMHgxNDE3CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE4CQkJMHgxNDE4CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDE5CQkJMHgxNDE5CiAKICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRAkJMHgxNDEwCisKKy8qIE1FUkxJTiBFVkRPIFBST0RVQ1RTICovCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y2NDAJCTB4MTEwMAorI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9WNjIwCQkweDExMTAKKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjc0MAkJMHgxMTIwCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y3MjAJCTB4MTEzMAorCisvKiBNRVJMSU4gSFNEUEEvSFNQQSBQUk9EVUNUUyAqLworI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzMwCQkweDE0MDAKKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVTc0MAkJMHgxNDEwCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1U4NzAJCTB4MTQyMAorI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9YVTg3MAkJMHgxNDMwCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1g5NTBECQkweDE0NTAKKworLyogRVhQRURJVEUgUFJPRFVDVFMgKi8KKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRVY2MjAJCTB4MjEwMAorI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FUzcyMAkJMHgyMTEwCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0U3MjUJCTB4MjEyMAorI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FUzYyMAkJMHgyMTMwCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VVNzMwCQkweDI0MDAKKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRVU3NDAJCTB4MjQxMAorI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FVTg3MEQJCTB4MjQyMAorCisvKiBPVkFUSU9OIFBST0RVQ1RTICovCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX01DNzI3CQkweDQxMDAKKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfTUM5NTBECQkweDQ0MDAKKworI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzI3CQkweDUwMTAKKworLyogRlVUVVJFIE5PVkFURUwgUFJPRFVDVFMgKi8KKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRVZET18xCQkweDYwMDAKKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfSFNQQV8xCQkweDcwMDAKKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRU1CRURERURfMQkweDgwMDAKKyNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfR0xPQkFMXzEJMHg5MDAwCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VWRE9fMgkJMHg2MDAxCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0hTUEFfMgkJMHg3MDAxCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VNQkVEREVEXzIJMHg4MDAxCisjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0dMT0JBTF8yCTB4OTAwMQorCisvKiBBTU9JIFBST0RVQ1RTICovCisjZGVmaW5lIEFNT0lfVkVORE9SX0lECQkJCTB4MTYxNAorI2RlZmluZSBBTU9JX1BST0RVQ1RfSDAxCQkJMHgwODAwCisjZGVmaW5lIEFNT0lfUFJPRFVDVF9IMDFBCQkJMHg3MDAyCisjZGVmaW5lIEFNT0lfUFJPRFVDVF9IMDIJCQkweDA4MDIKKwogI2RlZmluZSBERUxMX1ZFTkRPUl9JRAkJCQkweDQxM0MKIAorI2RlZmluZSBLWU9DRVJBX1ZFTkRPUl9JRAkJCTB4MGM4OAorI2RlZmluZSBLWU9DRVJBX1BST0RVQ1RfS1BDNjgwCQkJMHgxODBhCisKICNkZWZpbmUgQU5ZREFUQV9WRU5ET1JfSUQJCQkweDE2ZDUKICNkZWZpbmUgQU5ZREFUQV9QUk9EVUNUX0FEVV9FMTAwQQkJMHg2NTAxCiAjZGVmaW5lIEFOWURBVEFfUFJPRFVDVF9BRFVfNTAwQQkJMHg2NTAyCiAKKyNkZWZpbmUgQVhFU1NURUxfVkVORE9SX0lECQkJMHgxNzI2CisjZGVmaW5lIEFYRVNTVEVMX1BST0RVQ1RfTVYxMTBICQkJMHgxMDAwCisKICNkZWZpbmUgQkFORFJJQ0hfVkVORE9SX0lECQkJMHgxQThECiAjZGVmaW5lIEJBTkRSSUNIX1BST0RVQ1RfQzEwMF8xCQkJMHgxMDAyCiAjZGVmaW5lIEJBTkRSSUNIX1BST0RVQ1RfQzEwMF8yCQkJMHgxMDAzCiAKKyNkZWZpbmUgQU1PSV9WRU5ET1JfSUQJCQkweDE2MTQKKyNkZWZpbmUgQU1PSV9QUk9EVUNUXzk1MDgJCQkweDA4MDAKKworI2RlZmluZSBRVUFMQ09NTV9WRU5ET1JfSUQJCQkweDA1QzYKKworI2RlZmluZSBNQVhPTl9WRU5ET1JfSUQJCQkJMHgxNmQ4CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKQEAgLTE2MCwzMiArMjM0LDczIEBACiAJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0U2MDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMjIwLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTIyMEJJUywgMHhmZiwgMHhmZiwgMHhmZikgfSwKLQl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgMHgxMTAwKSB9LCAvKiBOb3ZhdGVsIE1lcmxpbiBYUzYyMC9TNjQwICovCi0JeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MTExMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gUzYyMCAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDExMjApIH0sIC8qIE5vdmF0ZWwgTWVybGluIEVYNzIwICovCi0JeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MTEzMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gUzcyMCAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDE0MDApIH0sIC8qIE5vdmF0ZWwgVTczMCAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDE0MTApIH0sIC8qIE5vdmF0ZWwgVTc0MCAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDE0MjApIH0sIC8qIE5vdmF0ZWwgRVU4NzAgKi8KLQl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgMHgxNDMwKSB9LCAvKiBOb3ZhdGVsIE1lcmxpbiBYVTg3MCBIU0RQQS8zRyAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDIxMDApIH0sIC8qIE5vdmF0ZWwgRVY2MjAgQ0RNQS9FVi1ETyAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDIxMTApIH0sIC8qIE5vdmF0ZWwgTWVybGluIEVTNjIwIC8gTWVybGluIEVTNzIwIC8gT3ZhdGlvbiBVNzIwICovCi0JeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MjEzMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gRVM2MjAgU00gQnVzICovCi0JeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MjQxMCkgfSwgLyogTm92YXRlbCBFVTc0MCAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDQxMDApIH0sIC8qIE5vdmF0ZWwgVTcyNyAqLwotCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDQ0MDApIH0sIC8qIE5vdmF0ZWwgTUM5NTAgKi8KKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MDEpIH0sCisJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDAzKSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQwNSkgfSwKKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MDYpIH0sCisJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDA4KSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQwOSkgfSwKKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MTApIH0sCisJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDExKSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQxMikgfSwKKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MTMpIH0sCisJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDE0KSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQxNSkgfSwKKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MTYpIH0sCisJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDE3KSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQxOCkgfSwKKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0MTkpIH0sCisJeyBVU0JfREVWSUNFKEFNT0lfVkVORE9SX0lELCBBTU9JX1BST0RVQ1RfOTUwOCkgfSwKKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjY0MCkgfSwgLyogTm92YXRlbCBNZXJsaW4gVjY0MC9YVjYyMCAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9WNjIwKSB9LCAvKiBOb3ZhdGVsIE1lcmxpbiBWNjIwL1M2MjAgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjc0MCkgfSwgLyogTm92YXRlbCBNZXJsaW4gRVg3MjAvVjc0MC9YNzIwICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y3MjApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFY3MjAvUzcyMC9QQzcyMCAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzMwKSB9LCAvKiBOb3ZhdGVsIFU3MzAvVTc0MCAoVkYgdmVyc2lvbikgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVTc0MCkgfSwgLyogTm92YXRlbCBVNzQwICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1U4NzApIH0sIC8qIE5vdmF0ZWwgVTg3MCAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9YVTg3MCkgfSwgLyogTm92YXRlbCBNZXJsaW4gWFU4NzAgSFNEUEEvM0cgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfWDk1MEQpIH0sIC8qIE5vdmF0ZWwgWDk1MEQgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRVY2MjApIH0sIC8qIE5vdmF0ZWwgRVY2MjAvRVM2MjAgQ0RNQS9FVi1ETyAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FUzcyMCkgfSwgLyogTm92YXRlbCBFUzYyMC9FUzcyMC9VNzIwL1VTQjcyMCAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FNzI1KSB9LCAvKiBOb3ZhdGVsIEU3MjUvRTcyNiAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FUzYyMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gRVM2MjAgU00gQnVzICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VVNzMwKSB9LCAvKiBOb3ZhdGVsIEVVNzMwIGFuZCBWb2RhZm9uZSBFVTc0MCAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FVTc0MCkgfSwgLyogTm92YXRlbCBub24tVm9kYWZvbmUgRVU3NDAgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRVU4NzBEKSB9LCAvKiBOb3ZhdGVsIEVVODUwRC9FVTg2MEQvRVU4NzBEICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX01DOTUwRCkgfSwgLyogTm92YXRlbCBNQzkzMEQvTUM5NTBEICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX01DNzI3KSB9LCAvKiBOb3ZhdGVsIE1DNzI3L1U3MjcvVVNCNzI3ICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1U3MjcpIH0sIC8qIE5vdmF0ZWwgVTcyNyAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FVkRPXzEpIH0sIC8qIE5vdmF0ZWwgRVZETyBwcm9kdWN0ICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0hTUEFfMSkgfSwgLyogTm92YXRlbCBIU1BBIHByb2R1Y3QgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRU1CRURERURfMSkgfSwgLyogTm92YXRlbCBFbWJlZGRlZCBwcm9kdWN0ICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0dMT0JBTF8xKSB9LCAvKiBOb3ZhdGVsIEdsb2JhbCBwcm9kdWN0ICovCisJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0VWRE9fMikgfSwgLyogTm92YXRlbCBFVkRPIHByb2R1Y3QgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfSFNQQV8yKSB9LCAvKiBOb3ZhdGVsIEhTUEEgcHJvZHVjdCAqLworCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9FTUJFRERFRF8yKSB9LCAvKiBOb3ZhdGVsIEVtYmVkZGVkIHByb2R1Y3QgKi8KKwl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfR0xPQkFMXzIpIH0sIC8qIE5vdmF0ZWwgR2xvYmFsIHByb2R1Y3QgKi8KKworCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUX0gwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoQU1PSV9WRU5ET1JfSUQsIEFNT0lfUFJPRFVDVF9IMDFBKSB9LAorCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUX0gwMikgfSwKKwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTE0KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU3MDAgTW9iaWxlIEJyb2FkYmFuZCBDRE1BL0VWRE8gTWluaS1DYXJkID09IE5vdmF0ZWwgRXhwZWRpdGUgRVY2MjAgQ0RNQS9FVi1ETyAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTE1KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU1MDAgTW9iaWxlIEJyb2FkYmFuZCBIU0RQQSBNaW5pLUNhcmQgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTc0MCBIU0RQQS8zRyAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTE2KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU1MDUgTW9iaWxlIEJyb2FkYmFuZCBIU0RQQSBNaW5pLUNhcmQgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTc0MCBIU0RQQS8zRyAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTE3KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU3MDAgTW9iaWxlIEJyb2FkYmFuZCBDRE1BL0VWRE8gRXhwcmVzc0NhcmQgPT0gTm92YXRlbCBNZXJsaW4gWFY2MjAgQ0RNQS9FVi1ETyAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTE4KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU1MTAgTW9iaWxlIEJyb2FkYmFuZCBIU0RQQSBFeHByZXNzQ2FyZCA9PSBOb3ZhdGVsIE1lcmxpbiBYVTg3MCBIU0RQQS8zRyAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTI4KSB9LAkvKiBEZWxsIFdpcmVsZXNzIDU3MDAgTW9iaWxlIEJyb2FkYmFuZCBDRE1BL0VWRE8gTWluaS1DYXJkID09IE5vdmF0ZWwgRXhwZWRpdGUgRTcyMCBDRE1BL0VWLURPICovCisJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMjkpIH0sCS8qIERlbGwgV2lyZWxlc3MgNTcwMCBNb2JpbGUgQnJvYWRiYW5kIENETUEvRVZETyBNaW5pLUNhcmQgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVDYyMCBDRE1BL0VWLURPICovCisJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMzMpIH0sIC8qIERlbGwgV2lyZWxlc3MgNTcyMCA9PSBOb3ZhdGVsIEVWNjIwIENETUEvRVYtRE8gKi8KIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIDB4ODEzNikgfSwJLyogRGVsbCBXaXJlbGVzcyBIU0RQQSA1NTIwID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NjBEICovCiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMzcpIH0sCS8qIERlbGwgV2lyZWxlc3MgSFNEUEEgNTUyMCAqLwogCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0FEVV9FMTAwQSkgfSwKIAl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9BRFVfNTAwQSkgfSwKKwl7IFVTQl9ERVZJQ0UoQVhFU1NURUxfVkVORE9SX0lELCBBWEVTU1RFTF9QUk9EVUNUX01WMTEwSCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFORFJJQ0hfVkVORE9SX0lELCBCQU5EUklDSF9QUk9EVUNUX0MxMDBfMSkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFORFJJQ0hfVkVORE9SX0lELCBCQU5EUklDSF9QUk9EVUNUX0MxMDBfMikgfSwKKwl7IFVTQl9ERVZJQ0UoS1lPQ0VSQV9WRU5ET1JfSUQsIEtZT0NFUkFfUFJPRFVDVF9LUEM2ODApIH0sCisJeyBVU0JfREVWSUNFKFFVQUxDT01NX1ZFTkRPUl9JRCwgMHg2NjEzKX0sIC8qIE9uZGEgSDYwMC9aVEUgTUYzMzAgKi8KKwl7IFVTQl9ERVZJQ0UoTUFYT05fVkVORE9SX0lELCAweDYyODApIH0sIC8qIEJQMy1VU0IgJiBCUDMtRVhUIEhTRFBBICovCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpAQCAtMjQ3LDEwICszNjIsMTAgQEAKIHN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlIHsKIAkvKiBJbnB1dCBlbmRwb2ludHMgYW5kIGJ1ZmZlciBmb3IgdGhpcyBwb3J0ICovCiAJc3RydWN0IHVyYiAqaW5fdXJic1tOX0lOX1VSQl07Ci0JY2hhciBpbl9idWZmZXJbTl9JTl9VUkJdW0lOX0JVRkxFTl07CisJdTggKmluX2J1ZmZlcltOX0lOX1VSQl07CiAJLyogT3V0cHV0IGVuZHBvaW50cyBhbmQgYnVmZmVyIGZvciB0aGlzIHBvcnQgKi8KIAlzdHJ1Y3QgdXJiICpvdXRfdXJic1tOX09VVF9VUkJdOwotCWNoYXIgb3V0X2J1ZmZlcltOX09VVF9VUkJdW09VVF9CVUZMRU5dOworCXU4ICpvdXRfYnVmZmVyW05fT1VUX1VSQl07CiAJdW5zaWduZWQgbG9uZyBvdXRfYnVzeTsJCS8qIEJpdCB2ZWN0b3Igb2YgVVJCcyBpbiB1c2UgKi8KIAogCS8qIFNldHRpbmdzIGZvciB0aGUgcG9ydCAqLwpAQCAtNzM3LDkgKzg1MiwxMCBAQAogCiBzdGF0aWMgaW50IG9wdGlvbl9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgaSwgaiwgZXJyOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCXU4ICpidWZmZXI7CiAKIAlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKIApAQCAtNzUzLDYgKzg2OSwyMCBAQAogCQkJcmV0dXJuICgxKTsKIAkJfQogCisJCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKSB7CisJCQlidWZmZXIgPSAodTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWJ1ZmZlcikKKwkJCQlnb3RvIGJhaWxfb3V0X2Vycm9yOworCQkJcG9ydGRhdGEtPmluX2J1ZmZlcltqXSA9IGJ1ZmZlcjsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBOX09VVF9VUkI7IGorKykgeworCQkJYnVmZmVyID0ga21hbGxvYyhPVVRfQlVGTEVOLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghYnVmZmVyKQorCQkJCWdvdG8gYmFpbF9vdXRfZXJyb3IyOworCQkJcG9ydGRhdGEtPm91dF9idWZmZXJbal0gPSBidWZmZXI7CisJCX0KKwogCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcG9ydGRhdGEpOwogCiAJCWlmICghIHBvcnQtPmludGVycnVwdF9pbl91cmIpCkBAIC03NjYsNiArODk2LDE2IEBACiAJb3B0aW9uX3NldHVwX3VyYnMoc2VyaWFsKTsKIAogCXJldHVybiAoMCk7CisKK2JhaWxfb3V0X2Vycm9yMjoKKwlmb3IgKGogPSAwOyBqIDwgTl9PVVRfVVJCOyBqKyspCisJCWtmcmVlKHBvcnRkYXRhLT5vdXRfYnVmZmVyW2pdKTsKK2JhaWxfb3V0X2Vycm9yOgorCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKQorCQlpZiAocG9ydGRhdGEtPmluX2J1ZmZlcltqXSkKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwb3J0ZGF0YS0+aW5fYnVmZmVyW2pdKTsKKwlrZnJlZShwb3J0ZGF0YSk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIG9wdGlvbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQpAQCAtNzk0LDEyICs5MzQsMTQgQEAKIAkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspIHsKIAkJCWlmIChwb3J0ZGF0YS0+aW5fdXJic1tqXSkgewogCQkJCXVzYl9mcmVlX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tqXSk7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBvcnRkYXRhLT5pbl9idWZmZXJbal0pOwogCQkJCXBvcnRkYXRhLT5pbl91cmJzW2pdID0gTlVMTDsKIAkJCX0KIAkJfQogCQlmb3IgKGogPSAwOyBqIDwgTl9PVVRfVVJCOyBqKyspIHsKIAkJCWlmIChwb3J0ZGF0YS0+b3V0X3VyYnNbal0pIHsKIAkJCQl1c2JfZnJlZV91cmIocG9ydGRhdGEtPm91dF91cmJzW2pdKTsKKwkJCQlrZnJlZShwb3J0ZGF0YS0+b3V0X2J1ZmZlcltqXSk7CiAJCQkJcG9ydGRhdGEtPm91dF91cmJzW2pdID0gTlVMTDsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IGFlM2VjMWEuLjJhZjc3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfRENVMTEpIH0sCiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX1JTQVEzKSB9LAogCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9QSEFST1MpIH0sCisJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX0FMRElHQSkgfSwKIAl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKElPREFUQV9WRU5ET1JfSUQsIElPREFUQV9QUk9EVUNUX0lEX1JTQVE1KSB9LAogCXsgVVNCX0RFVklDRShBVEVOX1ZFTkRPUl9JRCwgQVRFTl9QUk9EVUNUX0lEKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCmluZGV4IDIzN2E0MWYuLjEwY2Y4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfRENVMTEJCTB4MTIzNAogI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9QSEFST1MJMHhhYWEwCiAjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX1JTQVEzCQkweGFhYTIKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfQUxESUdBCTB4MDYxMQogCiAjZGVmaW5lIEFURU5fVkVORE9SX0lECQkweDA1NTcKICNkZWZpbmUgQVRFTl9WRU5ET1JfSUQyCQkweDA1NDcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCA0YzkyNWUzLi5lZDY3ODgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0xNCw3ICsxNCw3IEBACiAgIFdob20gYmFzZWQgaGlzIG9uIHRoZSBLZXlzcGFuIGRyaXZlciBieSBIdWdoIEJsZW1pbmdzIDxodWdoQGJsZW1pbmdzLm9yZz4KICovCiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYuMS4yLjciCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2LjEuMi44IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJLZXZpbiBMbG95ZCA8bGludXhAc2llcnJhd2lyZWxlc3MuY29tPiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBEcml2ZXIgZm9yIFNpZXJyYSBXaXJlbGVzcyBVU0IgbW9kZW1zIgogCkBAIC0xNjMsNiArMTYzLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MDMpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NjUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MTIpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NzUgJiBBQyA4NzVVICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2ODEzKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM4Nzc1IChUaGlua3BhZCBpbnRlcm5hbCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MTUpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NzUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MjApIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBBaXJDYXJkIDg3NSAqLwogCXsgVVNCX0RFVklDRSgweDExOTksIDB4NjgzMikgfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DODc4MCovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2ODMzKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM4NzgxKi8KQEAgLTE3OCw3ICsxNzksNiBAQAogCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMTEyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFXzFfUE9SVCB9LCAvKiBTaWVycmEgV2lyZWxlc3MgQWlyQ2FyZCA1ODAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwRjNELCAweDAxMTIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfMV9QT1JUIH0sIC8qIEFpcnByaW1lL1NpZXJyYSBQQyA1MjIwICovCi0JeyBVU0JfREVWSUNFKDB4MDVDNiwgMHg2NjEzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFXzFfUE9SVCB9LCAvKiBPbmRhIEg2MDAvWlRFIE1GMzMwICovCiAKIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDBGRkYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfSU5TVEFMTEVSfSwKIAl7IH0KQEAgLTE5Nyw5ICsxOTcsOSBAQAogCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayB0aGUgc3RydWN0dXJlICovCiAJaW50IG91dHN0YW5kaW5nX3VyYnM7CS8qIG51bWJlciBvZiBvdXQgdXJicyBpbiBmbGlnaHQgKi8KIAotCS8qIElucHV0IGVuZHBvaW50cyBhbmQgYnVmZmVyIGZvciB0aGlzIHBvcnQgKi8KKwkvKiBJbnB1dCBlbmRwb2ludHMgYW5kIGJ1ZmZlcnMgZm9yIHRoaXMgcG9ydCAqLwogCXN0cnVjdCB1cmIgKmluX3VyYnNbTl9JTl9VUkJdOwotCWNoYXIgaW5fYnVmZmVyW05fSU5fVVJCXVtJTl9CVUZMRU5dOworCWNoYXIgKmluX2J1ZmZlcltOX0lOX1VSQl07CiAKIAkvKiBTZXR0aW5ncyBmb3IgdGhlIHBvcnQgKi8KIAlpbnQgcnRzX3N0YXRlOwkvKiBIYW5kc2hha2luZyBwaW5zIChvdXRwdXRzKSAqLwpAQCAtNjM5LDYgKzYzOSwxNSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnRkYXRhLT5sb2NrKTsKKwkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspIHsKKwkJCXBvcnRkYXRhLT5pbl9idWZmZXJbal0gPSBrbWFsbG9jKElOX0JVRkxFTiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXBvcnRkYXRhLT5pbl9idWZmZXJbal0pIHsKKwkJCQlmb3IgKC0tajsgaiA+PSAwOyBqLS0pCisJCQkJCWtmcmVlKHBvcnRkYXRhLT5pbl9idWZmZXJbal0pOworCQkJCWtmcmVlKHBvcnRkYXRhKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQogCiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwb3J0ZGF0YSk7CiAKQEAgLTY4Miw3ICs2OTEsNyBAQAogCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7IGorKykgewogCQkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2pdKTsKIAkJCXVzYl9mcmVlX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tqXSk7Ci0JCQlwb3J0ZGF0YS0+aW5fdXJic1tqXSA9IE5VTEw7CisJCQlrZnJlZShwb3J0ZGF0YS0+aW5fYnVmZmVyW2pdKTsKIAkJfQogCQlrZnJlZShwb3J0ZGF0YSk7CiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCmluZGV4IGI1MTdmOTMuLjNhMzc3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpAQCAtODIsNyArODIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAKQEAgLTI2NSw4ICsyNjQsOCBAQAogCS5kZXNjcmlwdGlvbgkJPSAiVEkgVVNCIDM0MTAgMSBwb3J0IGFkYXB0ZXIiLAogCS51c2JfZHJpdmVyCQk9ICZ0aV91c2JfZHJpdmVyLAogCS5pZF90YWJsZQkJPSB0aV9pZF90YWJsZV8zNDEwLAotCS5udW1faW50ZXJydXB0X2luCT0gMSwKLQkubnVtX2J1bGtfaW4JCT0gMSwKKwkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luCQk9IE5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX291dAkJPSAxLAogCS5udW1fcG9ydHMJCT0gMSwKIAkuYXR0YWNoCQkJPSB0aV9zdGFydHVwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggM2NlOThlOC4uMjEzOGJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC04NTQsNiArODU0LDcgQEAKIAlzZXJpYWwtPm51bV9pbnRlcnJ1cHRfaW4gPSBudW1faW50ZXJydXB0X2luOwogCXNlcmlhbC0+bnVtX2ludGVycnVwdF9vdXQgPSBudW1faW50ZXJydXB0X291dDsKIAorI2lmIDAKIAkvKiBjaGVjayB0aGF0IHRoZSBkZXZpY2UgbWVldHMgdGhlIGRyaXZlcidzIHJlcXVpcmVtZW50cyAqLwogCWlmICgodHlwZS0+bnVtX2ludGVycnVwdF9pbiAhPSBOVU1fRE9OVF9DQVJFICYmCiAJCQkJdHlwZS0+bnVtX2ludGVycnVwdF9pbiAhPSBudW1faW50ZXJydXB0X2luKQpAQCAtODY3LDYgKzg2OCw3IEBACiAJCWtmcmVlKHNlcmlhbCk7CiAJCXJldHVybiAtRUlPOwogCX0KKyNlbmRpZgogCiAJLyogZm91bmQgYWxsIHRoYXQgd2UgbmVlZCAqLwogCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIiVzIGNvbnZlcnRlciBkZXRlY3RlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggMjJiM2Y3OC4uYzJiMDFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luID0JCTIsCi0JLm51bV9idWxrX291dCA9CQkyLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKIAkubnVtX3BvcnRzID0JCTIsCiAJLm9wZW4gPQkJCXZpc29yX29wZW4sCiAJLmNsb3NlID0JCXZpc29yX2Nsb3NlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKaW5kZXggMmFlMWU4Ni4uOTcxZDEzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC0xMjMwLDYgKzEyMzAsNyBAQAogCSAgICAKIAkJCS8qIEZyZWUgZHJpdmVyIHN0cnVjdHVyZSAqLwkgICAgCiAJCQl1cy0+ZXh0cmFfZGVzdHJ1Y3RvcihpbmZvKTsKKwkJCWtmcmVlKGluZm8pOwogCQkJdXMtPmV4dHJhID0gTlVMTDsKIAkJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gTlVMTDsKIAkJfQpAQCAtMTQ2OSw2ICsxNDcwLDcgQEAKIAlpZiAoaW5mbykgewogCQlrZnJlZShpbmZvLT5pZCk7CiAJCWtmcmVlKGluZm8tPlJlZ3NCdWYpOworCQlrZnJlZShpbmZvLT5zcmIuc2Vuc2VfYnVmZmVyKTsKIAl9CiB9CiAKQEAgLTE0OTQsNyArMTQ5Niw5IEBACiAJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpLCBHRlBfS0VSTkVMKTsKIAkJaW5mby0+UmVnc0J1ZiA9ICh1bnNpZ25lZCBjaGFyICopCiAJCQkJa21hbGxvYyhzaXplb2YoaW5mby0+QVRBUmVncyksIEdGUF9LRVJORUwpOwotCQlpZiAoIWluZm8tPmlkIHx8ICFpbmZvLT5SZWdzQnVmKSB7CisJCWluZm8tPnNyYi5zZW5zZV9idWZmZXIgPQorCQkJCWttYWxsb2MoU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpbmZvLT5pZCB8fCAhaW5mby0+UmVnc0J1ZiB8fCAhaW5mby0+c3JiLnNlbnNlX2J1ZmZlcikgewogCQkJaXNkMjAwX2ZyZWVfaW5mb19wdHJzKGluZm8pOwogCQkJa2ZyZWUoaW5mbyk7CiAJCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKaW5kZXggYTQxY2UyMS4uYjliOGVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYwpAQCAtMTUwLDEzICsxNTAsMTQgQEAKIAogLyogQ29weSBhIGJ1ZmZlciBvZiBsZW5ndGggYnVmbGVuIHRvL2Zyb20gdGhlIHNyYidzIHRyYW5zZmVyIGJ1ZmZlci4KICAqIFVwZGF0ZSB0aGUgKipzZ3B0ciBhbmQgKm9mZnNldCB2YXJpYWJsZXMgc28gdGhhdCB0aGUgbmV4dCBjb3B5IHdpbGwKLSAqIHBpY2sgdXAgZnJvbSB3aGVyZSB0aGlzIG9uZSBsZWZ0IG9mZi4gKi8KLQorICogcGljayB1cCBmcm9tIHdoZXJlIHRoaXMgb25lIGxlZnQgb2ZmLgorICovCiB1bnNpZ25lZCBpbnQgdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKIAl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBzY2F0dGVybGlzdCAqKnNncHRyLAogCXVuc2lnbmVkIGludCAqb2Zmc2V0LCBlbnVtIHhmZXJfYnVmX2RpciBkaXIpCiB7CiAJdW5zaWduZWQgaW50IGNudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gKnNncHRyOwogCiAJLyogV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBsaXN0IG9uZSBlbnRyeQogCSAqIGF0IGEgdGltZS4gIEVhY2ggcy1nIGVudHJ5IGNvbnRhaW5zIHNvbWUgbnVtYmVyIG9mIHBhZ2VzLCBhbmQKQEAgLTE2NCwyMiArMTY1LDIyIEBACiAJICogaW4ga2VybmVsLWFkZHJlc3NhYmxlIG1lbW9yeSB0aGVuIGttYXAoKSB3aWxsIHJldHVybiBpdHMgYWRkcmVzcy4KIAkgKiBJZiB0aGUgcGFnZSBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSAtLSBzdWNoIGFzIGEgdXNlciBidWZmZXIKIAkgKiBsb2NhdGVkIGluIGhpZ2ggbWVtb3J5IC0tIHRoZW4ga21hcCgpIHdpbGwgbWFwIGl0IHRvIGEgdGVtcG9yYXJ5Ci0JICogcG9zaXRpb24gaW4gdGhlIGtlcm5lbCdzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gKi8KLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gKnNncHRyOworCSAqIHBvc2l0aW9uIGluIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCisJICovCiAKIAlpZiAoIXNnKQogCQlzZyA9IHNjc2lfc2dsaXN0KHNyYik7CiAKIAkvKiBUaGlzIGxvb3AgaGFuZGxlcyBhIHNpbmdsZSBzLWcgbGlzdCBlbnRyeSwgd2hpY2ggbWF5Ci0JCSogaW5jbHVkZSBtdWx0aXBsZSBwYWdlcy4gIEZpbmQgdGhlIGluaXRpYWwgcGFnZSBzdHJ1Y3R1cmUKLQkJKiBhbmQgdGhlIHN0YXJ0aW5nIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UsIGFuZCB1cGRhdGUKLQkJKiB0aGUgKm9mZnNldCBhbmQgKipzZ3B0ciB2YWx1ZXMgZm9yIHRoZSBuZXh0IGxvb3AuICovCisJICogaW5jbHVkZSBtdWx0aXBsZSBwYWdlcy4gIEZpbmQgdGhlIGluaXRpYWwgcGFnZSBzdHJ1Y3R1cmUKKwkgKiBhbmQgdGhlIHN0YXJ0aW5nIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UsIGFuZCB1cGRhdGUKKwkgKiB0aGUgKm9mZnNldCBhbmQgKipzZ3B0ciB2YWx1ZXMgZm9yIHRoZSBuZXh0IGxvb3AuCisJICovCiAJY250ID0gMDsKLQl3aGlsZSAoY250IDwgYnVmbGVuKSB7CisJd2hpbGUgKGNudCA8IGJ1ZmxlbiAmJiBzZykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2Uoc2cpICsKIAkJCQkoKHNnLT5vZmZzZXQgKyAqb2Zmc2V0KSA+PiBQQUdFX1NISUZUKTsKLQkJdW5zaWduZWQgaW50IHBvZmYgPQotCQkJCShzZy0+b2Zmc2V0ICsgKm9mZnNldCkgJiAoUEFHRV9TSVpFLTEpOworCQl1bnNpZ25lZCBpbnQgcG9mZiA9IChzZy0+b2Zmc2V0ICsgKm9mZnNldCkgJiAoUEFHRV9TSVpFLTEpOwogCQl1bnNpZ25lZCBpbnQgc2dsZW4gPSBzZy0+bGVuZ3RoIC0gKm9mZnNldDsKIAogCQlpZiAoc2dsZW4gPiBidWZsZW4gLSBjbnQpIHsKQEAgLTIyMiwxNCArMjIzLDE2IEBACiB9CiAKIC8qIFN0b3JlIHRoZSBjb250ZW50cyBvZiBidWZmZXIgaW50byBzcmIncyB0cmFuc2ZlciBidWZmZXIgYW5kIHNldCB0aGUKLSAqIFNDU0kgcmVzaWR1ZS4gKi8KKyAqIFNDU0kgcmVzaWR1ZS4KKyAqLwogdm9pZCB1c2Jfc3Rvcl9zZXRfeGZlcl9idWYodW5zaWduZWQgY2hhciAqYnVmZmVyLAogCXVuc2lnbmVkIGludCBidWZsZW4sIHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKIHsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gTlVMTDsKIAotCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGJ1Zmxlbiwgc3JiLCAmc2csICZvZmZzZXQsCisJYnVmbGVuID0gbWluKGJ1Zmxlbiwgc2NzaV9idWZmbGVuKHNyYikpOworCWJ1ZmxlbiA9IHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGJ1Zmxlbiwgc3JiLCAmc2csICZvZmZzZXQsCiAJCQlUT19YRkVSX0JVRik7CiAJaWYgKGJ1ZmxlbiA8IHNjc2lfYnVmZmxlbihzcmIpKQogCQlzY3NpX3NldF9yZXNpZChzcmIsIHNjc2lfYnVmZmxlbihzcmIpIC0gYnVmbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCmluZGV4IGQ0M2EzNDEuLjZkMTQzMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYwpAQCAtNTIyLDggKzUyMiw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNkZHI1NV9nZXRfY2FwYWNpdHkoc3RydWN0IHVzX2RhdGEgKnVzKSB7CiAKLQl1bnNpZ25lZCBjaGFyIG1hbnVmYWN0dXJlcklEOwotCXVuc2lnbmVkIGNoYXIgZGV2aWNlSUQ7CisJdW5zaWduZWQgY2hhciB1bmluaXRpYWxpemVkX3ZhcihtYW51ZmFjdHVyZXJJRCk7CisJdW5zaWduZWQgY2hhciB1bmluaXRpYWxpemVkX3ZhcihkZXZpY2VJRCk7CiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggZDlmNDkxMmYuLmJkZDQzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwpAQCAtODkxLDE3ICs4OTEsNiBAQAogCWlmIChyZXN1bHQgPiAwKQogCQlyZXR1cm4gdXMtPmlvYnVmWzBdOwogCi0JLyogCi0JICogU29tZSBkZXZpY2VzIChpLmUuIElvbWVnYSBaaXAxMDApIG5lZWQgdGhpcyAtLSBhcHBhcmVudGx5Ci0JICogdGhlIGJ1bGsgcGlwZXMgZ2V0IFNUQUxMZWQgd2hlbiB0aGUgR2V0TWF4TFVOIHJlcXVlc3QgaXMKLQkgKiBwcm9jZXNzZWQuICAgVGhpcyBpcywgaW4gdGhlb3J5LCBoYXJtbGVzcyB0byBhbGwgb3RoZXIgZGV2aWNlcwotCSAqIChyZWdhcmRsZXNzIG9mIGlmIHRoZXkgc3RhbGwgb3Igbm90KS4KLQkgKi8KLQlpZiAocmVzdWx0ID09IC1FUElQRSkgewotCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+cmVjdl9idWxrX3BpcGUpOwotCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+c2VuZF9idWxrX3BpcGUpOwotCX0KLQogCS8qCiAJICogU29tZSBkZXZpY2VzIGRvbid0IGxpa2UgR2V0TWF4TFVOLiAgVGhleSBtYXkgU1RBTEwgdGhlIGNvbnRyb2wKIAkgKiBwaXBlLCB0aGV5IG1heSByZXR1cm4gYSB6ZXJvLWxlbmd0aCByZXN1bHQsIHRoZXkgbWF5IGRvIG5vdGhpbmcgYXQKQEAgLTEwMjAsNyArMTAwOSw4IEBACiAJVVNfREVCVUdQKCJCdWxrIFN0YXR1cyBTIDB4JXggVCAweCV4IFIgJXUgU3RhdCAweCV4XG4iLAogCQkJbGUzMl90b19jcHUoYmNzLT5TaWduYXR1cmUpLCBiY3MtPlRhZywgCiAJCQlyZXNpZHVlLCBiY3MtPlN0YXR1cyk7Ci0JaWYgKGJjcy0+VGFnICE9IHVzLT50YWcgfHwgYmNzLT5TdGF0dXMgPiBVU19CVUxLX1NUQVRfUEhBU0UpIHsKKwlpZiAoIShiY3MtPlRhZyA9PSB1cy0+dGFnIHx8ICh1cy0+ZmxhZ3MgJiBVU19GTF9CVUxLX0lHTk9SRV9UQUcpKSB8fAorCQliY3MtPlN0YXR1cyA+IFVTX0JVTEtfU1RBVF9QSEFTRSkgewogCQlVU19ERUJVR1AoIkJ1bGsgbG9naWNhbCBlcnJvclxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggZmUxMjczNy4uOTEyNTIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0zNTcsNyArMzU3LDcgQEAKIAkJVVNfRkxfRklYX0NBUEFDSVRZKSwKIAogLyogUmVwb3J0ZWQgYnkgRW1pbCBMYXJzc29uIDxlbWlsQHN3aXAubmV0PiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjAsIDB4MDQxMSwgMHgwMTAwLCAweDAxMDEsCitVTlVTVUFMX0RFViggIDB4MDRiMCwgMHgwNDExLCAweDAxMDAsIDB4MDExMCwKIAkJIk5JS09OIiwKIAkJIk5JS09OIERTQyBEODAiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKQEAgLTc1OSw2ICs3NTksMTggQEAKIAkJIkRpZ2l0YWwgQ2FtZXJhIEVYLTIwIERTQyIsCiAJCVVTX1NDXzgwNzAsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCApLAogCisvKiBSZXBvcnRlZCBieSBBbmRyZSBXZWx0ZXIgPGEuci53ZWx0ZXJAZ214LmRlPgorICogVGhpcyBhbnRpcXVlIGRldmljZSBwcmVkYXRlcyB0aGUgcmVsZWFzZSBvZiB0aGUgQnVsay1vbmx5IFRyYW5zcG9ydAorICogc3BlYywgYW5kIGlmIGl0IGdldHMgYSBHZXQtTWF4LUxVTiB0aGVuIGl0IHJlcXVpcmVzIHRoZSBob3N0IHRvIGRvIGEKKyAqIENsZWFyLUhhbHQgb24gdGhlIGJ1bGsgZW5kcG9pbnRzLiAgVGhlIFNJTkdMRV9MVU4gZmxhZyB3aWxsIHByZXZlbnQKKyAqIHVzIGZyb20gc2VuZGluZyB0aGUgcmVxdWVzdC4KKyAqLworVU5VU1VBTF9ERVYoICAweDA1OWIsIDB4MDAwMSwgMHgwMTAwLCAweDAxMDAsCisJCSJJb21lZ2EiLAorCQkiWklQIDEwMCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKIC8qIFJlcG9ydGVkIGJ5IDxIZW5kcnlrLlBmZWlmZmVyQGdteC5kZT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNTlmLCAweDA2NDMsIDB4MDAwMCwgMHgwMDAwLAogCQkiTGFDaWUiLApAQCAtMTQxMiw2ICsxNDI0LDE3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfUkVTSURVRSB8IFVTX0ZMX0dPX1NMT1cgfCBVU19GTF9NQVhfU0VDVE9SU182NCksCiAKKy8qIFBhdGNoIGJ5IExlb25pZCBQZXRyb3YgbWFpbCBhdCBscGV0cm92Lm5ldAorICogUmVwb3J0ZWQgYnkgUm9iZXJ0IFNwaXR6ZW5wZmVpbCA8cm9iZXJ0QHNwaXR6ZW5wZmVpbC5vcmc+CisgKiBodHRwOi8vd3d3LnFiaWsuY2gvdXNiL2RldmljZXMvc2hvd2Rldi5waHA/aWQ9MTcwNQorICogVXBkYXRlZCB0byAxMDMgZGV2aWNlIGJ5IE1KIFJheSBtanIgYXQgcGhvbmVjb29wLmNvb3AKKyAqLworVU5VU1VBTF9ERVYoICAweDBmMTksIDB4MDEwMywgMHgwMTAwLCAweDAxMDAsCisJCSJPcmFjb20gQ28uLCBMdGQiLAorCQkiT1JDLTIwME0iLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKwogLyogRGF2aWQgS3VlaGxpbmcgPGR2ZGtobG5nQGdteC5kZT46CiAgKiBmb3IgTVAzLVBsYXllciBBVk9YIFdTWC0zMDBFUiAoYm91Z2h0IGluIEphcGFuKS4gIFJlcG9ydHMgbG90cyBvZiBTQ1NJCiAgKiBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gd3JpdGUuCkBAIC0xNDc3LDYgKzE1MDAsMTUgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX3VjcjYxczJiX2luaXQsCiAJCTAgKSwKIAorLyogUmVwb3J0ZWQgYnkgRmFiaW8gVmVudHVyaSA8Zi52ZW50dXJpQHRkbmV0Lml0PgorICogVGhlIGRldmljZSByZXBvcnRzIGEgdmVuZG9yLXNwZWNpZmljIGJEZXZpY2VDbGFzcy4KKyAqLworVU5VU1VBTF9ERVYoICAweDEwZDYsIDB4MjIwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJBY3Rpb25zIFNlbWljb25kdWN0b3IiLAorCQkiTXRwIGRldmljZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwKSwKKwogLyogUmVwb3J0ZWQgYnkgS2V2aW4gTGxveWQgPGxpbnV4QHNpZXJyYXdpcmVsZXNzLmNvbT4KICAqIEVudHJ5IGlzIG5lZWRlZCBmb3IgdGhlIGluaXRpYWxpemVyIGZ1bmN0aW9uIG92ZXJyaWRlLAogICogd2hpY2ggaW5zdHJ1Y3RzIHRoZSBkZXZpY2UgdG8gbG9hZCBhcyBhIG1vZGVtCkBAIC0xNDk4LDE2ICsxNTMwLDEwNCBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKIAotLyogUmVwb3J0ZWQgYnkgZmFuZ3hpYW96aGkgPGZhbmd4aWFvemhpNjA2NzVAaHVhd2VpLmNvbT4KLSAqIGFuZCBieSBsaW5sZWkgPGxpbmxlaTgzQGh1YXdlaS5jb20+Ci0gKiBQYXRjaCByZXdvcmtlZCBieSBKb2hhbm4gV2lsaGVsbSA8am9oYW5uLndpbGhlbG1Ac3R1ZGVudC50dWdyYXouYXQ+Ci0gKiBUaGlzIGJyaW5ncyB0aGUgSFVBV0VJIEUyMjAgZGV2aWNlcyBpbnRvIG11bHRpLXBvcnQgbW9kZQorLyogUmVwb3J0ZWQgYnkgZmFuZ3hpYW96aGkgPGh1YW5hbmh1QGh1YXdlaS5jb20+CisgKiBUaGlzIGJyaW5ncyB0aGUgSFVBV0VJIGRhdGEgY2FyZCBkZXZpY2VzIGludG8gbXVsdGktcG9ydCBtb2RlCiAgKi8KK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTAwMSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKIFVOVVNVQUxfREVWKCAweDEyZDEsIDB4MTAwMywgMHgwMDAwLCAweDAwMDAsCiAJCSJIVUFXRUkgTU9CSUxFIiwKIAkJIk1hc3MgU3RvcmFnZSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAogCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTAwNCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwMSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwMywgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwNSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwNiwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwOCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQwOSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxMCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxMSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxMiwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxMywgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxNCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxNSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxNiwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxNywgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxOCwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKK1VOVVNVQUxfREVWKCAweDEyZDEsIDB4MTQxOSwgMHgwMDAwLCAweDAwMDAsCisJCSJIVUFXRUkgTU9CSUxFIiwKKwkJIk1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9odWF3ZWlfZTIyMF9pbml0LAorCQkwKSwKIAogLyogUmVwb3J0ZWQgYnkgVmlsaXVzIEJpbGlua2V2aWNpdXMgPHZpbGlzYXMgQVQgeHh4IERPVCBsdCkgKi8KIFVOVVNVQUxfREVWKCAgMHgxMzJiLCAweDAwMGIsIDB4MDAwMSwgMHgwMDAxLApAQCAtMTU1Nyw2ICsxNjc3LDE3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9GSVhfQ0FQQUNJVFkpLAogCisvKgorICogUGF0Y2ggYnkgQ29uc3RhbnRpbiBCYXJhbm92IDxjb25zdEB0bHRzdS5ydT4KKyAqIFJlcG9ydCBieSBBbmRyZWFzIEtvZW5lY2tlLgorICogTW90b3JvbGEgUk9LUiBaNi4KKyAqLworVU5VU1VBTF9ERVYoICAweDIyYjgsIDB4NjQyNiwgMHgwMTAxLCAweDAxMDEsCisJCSJNb3Rvcm9sYSIsCisJCSJNU25jLiIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSB8IFVTX0ZMX0ZJWF9DQVBBQ0lUWSB8IFVTX0ZMX0JVTEtfSUdOT1JFX1RBRyksCisKIC8qIFJlcG9ydGVkIGJ5IFJhZG92YW4gR2FyYWJpayA8Z2FyYWJpa0BrYXNzaW9wZWlhLmp1bHMuc2F2YmEuc2s+ICovCiBVTlVTVUFMX0RFViggIDB4MjczNSwgMHgxMDBiLCAweDAwMDAsIDB4OTk5OSwKIAkJIk1QSU8iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDc1ODQzNWYuLjFiZDVmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTU1Myw2ICs1NTMsMTkgQEAKIAloZWxwCiAJIFRoaXMgaXMgdGhlIGZyYW1lYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIGEgU0hBUlAgTFEwNDNUMURHMDEgVEZUIExDRAogCitjb25maWcgRkJfQkZJTl9UMzUwTUNRQgorCXRyaXN0YXRlICJWYXJpdHJvbml4IENPRy1UMzUwTUNRQiBURlQgTENEIGRpc3BsYXkgKEJGNTI3IEVaS0lUKSIKKwlkZXBlbmRzIG9uIEZCICYmIEJMQUNLRklOCisJc2VsZWN0IEJGSU5fR1BUSU1FUlMKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJaGVscAorCSBUaGlzIGlzIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBhIFZhcml0cm9uaXggVkwtUFMtQ09HLVQzNTBNQ1FCLTAxIGRpc3BsYXkgVEZUIExDRAorCSBUaGlzIGRpc3BsYXkgaXMgYSBRVkdBIDMyMHgyNDAgMjQtYml0IFJHQiBkaXNwbGF5IGludGVyZmFjZWQgYnkgYW4gOC1iaXQgd2lkZSBQUEkKKwkgSXQgdXNlcyBQUElbMC4uN10gUFBJX0ZTMSwgUFBJX0ZTMiBhbmQgUFBJX0NMSy4KKworCiBjb25maWcgRkJfU1RJCiAJdHJpc3RhdGUgIkhQIFNUSSBmcmFtZSBidWZmZXIgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQVJJU0MKQEAgLTE4ODAsNiArMTg5MywyMCBAQAogCSAgZnJhbWVidWZmZXIuIE1MMzAwIGNhcnJpZXMgYSA2NDAqNDgwIExDRCBkaXNwbGF5IG9uIHRoZSBib2FyZCwKIAkgIE1MNDAzIHVzZXMgYSBzdGFuZGFyZCBEQjE1IFZHQSBjb25uZWN0b3IuCiAKK2NvbmZpZyBGQl9NRVRST05PTUUKKyAgICAgICB0cmlzdGF0ZSAiTWV0cm9ub21lIGRpc3BsYXkgY29udHJvbGxlciBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gRkIgJiYgQVJDSF9QWEEgJiYgTU1VCisgICAgICAgc2VsZWN0IEZCX1NZU19GSUxMUkVDVAorICAgICAgIHNlbGVjdCBGQl9TWVNfQ09QWUFSRUEKKyAgICAgICBzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAorICAgICAgIHNlbGVjdCBGQl9TWVNfRk9QUworICAgICAgIHNlbGVjdCBGQl9ERUZFUlJFRF9JTworICAgICAgIGhlbHAKKyAgICAgICAgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWV0cm9ub21lIGRpc3BsYXkgY29udHJvbGxlci4gVGVzdGVkCisgICAgICAgICB3aXRoIGFuIEUtSW5rIDgwMHg2MDAgZGlzcGxheSBhbmQgR3Vtc3RpeCBDb25uZXggdGhyb3VnaCBhbiBBTUxDRAorICAgICAgICAgaW50ZXJmYWNlLiBQbGVhc2UgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZiL21ldHJvbm9tZWZiLnR4dD4KKyAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiBjb25maWcgRkJfVklSVFVBTAogCXRyaXN0YXRlICJWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISkiCiAJZGVwZW5kcyBvbiBGQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggODNlMDJiMy4uMTFjMGU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC0xMDMsNiArMTAzLDcgQEAKIG9iai0kKENPTkZJR19GQl9QTUFHX0JBKQkgICs9IHBtYWctYmEtZmIubwogb2JqLSQoQ09ORklHX0ZCX1BNQUdCX0IpCSAgKz0gcG1hZ2ItYi1mYi5vCiBvYmotJChDT05GSUdfRkJfTUFYSU5FKQkJICArPSBtYXhpbmVmYi5vCitvYmotJChDT05GSUdfRkJfTUVUUk9OT01FKSAgICAgICAgKz0gbWV0cm9ub21lZmIubwogb2JqLSQoQ09ORklHX0ZCX1MxRDEzWFhYKQkgICs9IHMxZDEzeHh4ZmIubwogb2JqLSQoQ09ORklHX0ZCX0lNWCkgICAgICAgICAgICAgICs9IGlteGZiLm8KIG9iai0kKENPTkZJR19GQl9TM0MyNDEwKQkgICs9IHMzYzI0MTBmYi5vCkBAIC0xMjIsNiArMTIzLDcgQEAKIG9iai0kKENPTkZJR19GQl9WR0ExNikgICAgICAgICAgICArPSB2Z2ExNmZiLm8KIG9iai0kKENPTkZJR19GQl9PRikgICAgICAgICAgICAgICArPSBvZmZiLm8KIG9iai0kKENPTkZJR19GQl9CRjU0WF9MUTA0MykJICArPSBiZjU0eC1scTA0M2ZiLm8KK29iai0kKENPTkZJR19GQl9CRklOX1QzNTBNQ1FCKQkgICs9IGJmaW4tdDM1MG1jcWItZmIubwogCiAjIHRoZSB0ZXN0IGZyYW1lYnVmZmVyIGlzIGxhc3QKIG9iai0kKENPTkZJR19GQl9WSVJUVUFMKSAgICAgICAgICArPSB2ZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IGQ3NzVlYjYuLjYyZjljNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTE5MTMsNjEgKzE5MTMsNiBAQAogCQlwYXItPm1tYXBlZCA9IDE7CiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXUzMiB5b2Zmc2V0OwotCXU4IHJbMl1bMjU2XTsKLQl1OCBnWzJdWzI1Nl07Ci0JdTggYlsyXVsyNTZdOwotfSBhdHlmYl9zYXZlOwotCi1zdGF0aWMgdm9pZCBhdHlmYl9zYXZlX3BhbGV0dGUoc3RydWN0IGF0eWZiX3BhciAqcGFyLCBpbnQgZW50ZXIpCi17Ci0JaW50IGksIHRtcDsKLQotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQl0bXAgPSBhdHlfbGRfOChEQUNfQ05UTCwgcGFyKSAmIDB4ZmM7Ci0JCWlmIChNNjRfSEFTKEVYVFJBX0JSSUdIVCkpCi0JCQl0bXAgfD0gMHgyOwotCQlhdHlfc3RfOChEQUNfQ05UTCwgdG1wLCBwYXIpOwotCQlhdHlfc3RfOChEQUNfTUFTSywgMHhmZiwgcGFyKTsKLQotCQlhdHlfc3RfOChEQUNfUl9JTkRFWCwgaSwgcGFyKTsKLQkJYXR5ZmJfc2F2ZS5yW2VudGVyXVtpXSA9IGF0eV9sZF84KERBQ19EQVRBLCBwYXIpOwotCQlhdHlmYl9zYXZlLmdbZW50ZXJdW2ldID0gYXR5X2xkXzgoREFDX0RBVEEsIHBhcik7Ci0JCWF0eWZiX3NhdmUuYltlbnRlcl1baV0gPSBhdHlfbGRfOChEQUNfREFUQSwgcGFyKTsKLQkJYXR5X3N0XzgoREFDX1dfSU5ERVgsIGksIHBhcik7Ci0JCWF0eV9zdF84KERBQ19EQVRBLCBhdHlmYl9zYXZlLnJbMSAtIGVudGVyXVtpXSwgcGFyKTsKLQkJYXR5X3N0XzgoREFDX0RBVEEsIGF0eWZiX3NhdmUuZ1sxIC0gZW50ZXJdW2ldLCBwYXIpOwotCQlhdHlfc3RfOChEQUNfREFUQSwgYXR5ZmJfc2F2ZS5iWzEgLSBlbnRlcl1baV0sIHBhcik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdHlmYl9wYWxldHRlKGludCBlbnRlcikKLXsKLQlzdHJ1Y3QgYXR5ZmJfcGFyICpwYXI7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm87Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRkJfTUFYOyBpKyspIHsKLQkJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbaV07Ci0JCWlmIChpbmZvICYmIGluZm8tPmZib3BzID09ICZhdHlmYl9vcHMpIHsKLQkJCXBhciA9IChzdHJ1Y3QgYXR5ZmJfcGFyICopIGluZm8tPnBhcjsKLQkJCQotCQkJYXR5ZmJfc2F2ZV9wYWxldHRlKHBhciwgZW50ZXIpOwotCQkJaWYgKGVudGVyKSB7Ci0JCQkJYXR5ZmJfc2F2ZS55b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQ7Ci0JCQkJaW5mby0+dmFyLnlvZmZzZXQgPSAwOwotCQkJCXNldF9vZmZfcGl0Y2gocGFyLCBpbmZvKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaW5mby0+dmFyLnlvZmZzZXQgPSBhdHlmYl9zYXZlLnlvZmZzZXQ7Ci0JCQkJc2V0X29mZl9waXRjaChwYXIsIGluZm8pOwotCQkJfQotCQkJYXR5X3N0X2xlMzIoQ1JUQ19PRkZfUElUQ0gsIHBhci0+Y3J0Yy5vZmZfcGl0Y2gsIHBhcik7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KICNlbmRpZiAvKiBfX3NwYXJjX18gKi8KIAogCkBAIC0yNjcwLDEwICsyNjE1LDYgQEAKIAkJZ290byBhdHlfaW5pdF9leGl0OwogCX0KIAotI2lmZGVmIF9fc3BhcmNfXwotCWF0eWZiX3NhdmVfcGFsZXR0ZShwYXIsIDApOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfRkJfQVRZX0NUCiAJaWYgKCFub2FjY2VsICYmIE02NF9IQVMoSU5URUdSQVRFRCkpCiAJCWF0eV9pbml0X2N1cnNvcihpbmZvKTsKQEAgLTI5MDAsOCArMjg0MSw2IEBACiAKICNpZmRlZiBfX3NwYXJjX18KIAotZXh0ZXJuIHZvaWQgKCpwcm9tX3BhbGV0dGUpIChpbnQpOwotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdHlmYl9zZXR1cF9zcGFyYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCXN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC0zNTM2LDkgKzM0NzUsNiBAQAogCQlnb3RvIGVycl9yZWxlYXNlX2lvOwogCiAjaWZkZWYgX19zcGFyY19fCi0JaWYgKCFwcm9tX3BhbGV0dGUpCi0JCXByb21fcGFsZXR0ZSA9IGF0eWZiX3BhbGV0dGU7Ci0KIAkvKgogCSAqIEFkZCAvZGV2L2ZiIG1tYXAgdmFsdWVzLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZjU0eC1scTA0M2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYwppbmRleCAwY2U3OTFlLi5lZWZiYTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKgogICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKQEAgLTI0MSw3ICsyNDEsNyBAQAogCXUxNiBlcHBpX3JlcV8xOFtdID0gRVBQSTBfMTg7CiAJdTE2IGRpc3AgPSBmYmktPm1hY2hfaW5mby0+ZGlzcDsKIAotCWlmIChncGlvX3JlcXVlc3QoZGlzcCwgTlVMTCkpIHsKKwlpZiAoZ3Bpb19yZXF1ZXN0KGRpc3AsIERSSVZFUl9OQU1FKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3RpbmcgR1BJTyAlZCBmYWlsZFxuIiwgZGlzcCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTM4NCw3ICszODQsNyBAQAogCSAqICAgT3RoZXIgZmxhZ3MgY2FuIGJlIHNldCwgYW5kIGFyZSBkb2N1bWVudGVkIGluCiAJICogICBpbmNsdWRlL2xpbnV4L21tLmgKIAkgKi8KLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX01BWVNIQVJFOworCXZtYS0+dm1fZmxhZ3MgfD0gIFZNX01BWVNIQVJFIHwgVk1fU0hBUkVEOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzIsNyArNjcyLDcgQEAKIAkJCQkgICAgICAmYmZpbl9scTA0M2ZiX2JsX29wcyk7CiAJYmxfZGV2LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDI1NTsKIAotCWxjZF9kZXYgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKERSSVZFUl9OQU1FLCBOVUxMLCAmYmZpbl9sY2Rfb3BzKTsKKwlsY2RfZGV2ID0gbGNkX2RldmljZV9yZWdpc3RlcihEUklWRVJfTkFNRSwgJnBkZXYtPmRldiwgTlVMTCwgJmJmaW5fbGNkX29wcyk7CiAJbGNkX2Rldi0+cHJvcHMubWF4X2NvbnRyYXN0ID0gMjU1LCBwcmludGsoS0VSTl9JTkZPICJEb25lLlxuIik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZmluLXQzNTBtY3FiLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzVkNmRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iZmluLXQzNTBtY3FiLWZiLmMKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGRyaXZlcnMvdmlkZW8vYmZpbi10MzUwbWNxYi1mYi5jCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4KKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBMQ0QgRnJhbWVidWZlciBkcml2ZXIKKyAqCisgKgorICogTW9kaWZpZWQ6CisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbGNkLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KKyNpbmNsdWRlIDxhc20vZ3B0aW1lcnMuaD4KKworI2RlZmluZSBOT19CTF9TVVBQT1JUCisKKyNkZWZpbmUgTENEX1hfUkVTCQkzMjAJLyogSG9yaXpvbnRhbCBSZXNvbHV0aW9uICovCisjZGVmaW5lIExDRF9ZX1JFUwkJMjQwCS8qIFZlcnRpY2FsIFJlc29sdXRpb24gKi8KKyNkZWZpbmUgTENEX0JQUAkJCTI0CS8qIEJpdCBQZXIgUGl4ZWwgKi8KKworI2RlZmluZQlETUFfQlVTX1NJWkUJCTE2CisjZGVmaW5lCUxDRF9DTEsgICAgICAgICAJKDEyKjEwMDAqMTAwMCkJLyogMTJNSHogKi8KKworI2RlZmluZSBDTE9DS1NfUEVSX1BJWAkJMworCisJLyoKKwkgKiBIUyBhbmQgVlMgdGltaW5nIHBhcmFtZXRlcnMgKGFsbCBpbiBudW1iZXIgb2YgUFBJIGNsayB0aWNrcykKKwkgKi8KKworI2RlZmluZSBVX0xJTkUJCTEJCQkJLyogQmxhbmtpbmcgTGluZXMgKi8KKworI2RlZmluZSBIX0FDVFBJWAkoTENEX1hfUkVTICogQ0xPQ0tTX1BFUl9QSVgpCS8qIGFjdGl2ZSBob3Jpem9udGFsIHBpeGVsICovCisjZGVmaW5lIEhfUEVSSU9ECSg0MDggKiBDTE9DS1NfUEVSX1BJWCkJCS8qIEhTIHBlcmlvZCAqLworI2RlZmluZSBIX1BVTFNFCQk5MAkJCQkvKiBIUyBwdWxzZSB3aWR0aCAqLworI2RlZmluZSBIX1NUQVJUCQkyMDQJCQkJLyogZmlyc3QgdmFsaWQgcGl4ZWwgKi8KKworI2RlZmluZQlWX0xJTkVTCQkoTENEX1lfUkVTICsgVV9MSU5FKQkJLyogdG90YWwgdmVydGljYWwgbGluZXMgKi8KKyNkZWZpbmUgVl9QVUxTRQkJKDMgKiBIX1BFUklPRCkJCQkvKiBWUyBwdWxzZSB3aWR0aCAoMS01IEhfUEVSSU9EcykgKi8KKyNkZWZpbmUgVl9QRVJJT0QJKEhfUEVSSU9EICogVl9MSU5FUykJCS8qIFZTIHBlcmlvZCAqLworCisjZGVmaW5lIEFDVElWRV9WSURFT19NRU1fT0ZGU0VUCShVX0xJTkUgKiBIX0FDVFBJWCkKKworI2RlZmluZSBCRklOX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTCTI1NgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJiZmluLXQzNTBtY3FiIgorc3RhdGljIGNoYXIgZHJpdmVyX25hbWVbXSA9IERSSVZFUl9OQU1FOworCitzdHJ1Y3QgYmZpbl90MzUwbWNxYmZiX2luZm8geworCXN0cnVjdCBmYl9pbmZvICpmYjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdW5zaWduZWQgY2hhciAqZmJfYnVmZmVyOwkvKiBSR0IgQnVmZmVyICovCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCWludCBscTA0M19tbWFwOworCWludCBscTA0M19vcGVuX2NudDsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayAqLworCXUzMiBwc2V1ZG9fcGFsWzE2XTsKK307CisKK3N0YXRpYyBpbnQgbm9jdXJzb3I7Cittb2R1bGVfcGFyYW0obm9jdXJzb3IsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vY3Vyc29yLCAiY3Vyc29yIGVuYWJsZS9kaXNhYmxlIik7CisKKyNkZWZpbmUgUFBJX1RYX01PREUJCTB4MgorI2RlZmluZSBQUElfWEZFUl9UWVBFXzExCTB4QworI2RlZmluZSBQUElfUE9SVF9DRkdfMDEJCTB4MTAKKyNkZWZpbmUgUFBJX1BBQ0tfRU4JCTB4ODAKKyNkZWZpbmUgUFBJX1BPTFNfMQkJMHg4MDAwCisKK3N0YXRpYyB2b2lkIGJmaW5fdDM1MG1jcWJfY29uZmlnX3BwaShzdHJ1Y3QgYmZpbl90MzUwbWNxYmZiX2luZm8gKmZiaSkKK3sKKwliZmluX3dyaXRlX1BQSV9ERUxBWShIX1NUQVJUKTsKKwliZmluX3dyaXRlX1BQSV9DT1VOVChIX0FDVFBJWC0xKTsKKwliZmluX3dyaXRlX1BQSV9GUkFNRShWX0xJTkVTKTsKKworCWJmaW5fd3JpdGVfUFBJX0NPTlRST0woUFBJX1RYX01PREUgfAkgICAvKiBvdXRwdXQgbW9kZSAsIFBPUlRfRElSICovCisJCQkJUFBJX1hGRVJfVFlQRV8xMSB8IC8qIHN5bmMgbW9kZSBYRlJfVFlQRSAqLworCQkJCVBQSV9QT1JUX0NGR18wMSB8ICAvKiB0d28gZnJhbWUgc3luYyBQT1JUX0NGRyAqLworCQkJCVBQSV9QQUNLX0VOIHwJICAgLyogcGFja2luZyBlbmFibGVkIFBBQ0tfRU4gKi8KKwkJCQlQUElfUE9MU18xKTsJICAgLyogZmFsaW5nIGVkZ2Ugc3luY3MgUE9MUyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmZpbl90MzUwbWNxYl9kaXNhYmxlX3BwaSh2b2lkKQoreworCWJmaW5fd3JpdGVfUFBJX0NPTlRST0woYmZpbl9yZWFkX1BQSV9DT05UUk9MKCkgJiB+UE9SVF9FTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZmluX3QzNTBtY3FiX2VuYWJsZV9wcGkodm9pZCkKK3sKKwliZmluX3dyaXRlX1BQSV9DT05UUk9MKGJmaW5fcmVhZF9QUElfQ09OVFJPTCgpIHwgUE9SVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIGJmaW5fdDM1MG1jcWJfc3RhcnRfdGltZXJzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJZW5hYmxlX2dwdGltZXJzKFRJTUVSMWJpdCk7CisJCWVuYWJsZV9ncHRpbWVycyhUSU1FUjBiaXQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYmZpbl90MzUwbWNxYl9zdG9wX3RpbWVycyh2b2lkKQoreworCWRpc2FibGVfZ3B0aW1lcnMoVElNRVIwYml0IHwgVElNRVIxYml0KTsKKworCXNldF9ncHRpbWVyX3N0YXR1cygwLCBUSU1FUl9TVEFUVVNfVFJVTjAgfCBUSU1FUl9TVEFUVVNfVFJVTjEgfAorCQkJCVRJTUVSX1NUQVRVU19USU1JTDAgfCBUSU1FUl9TVEFUVVNfVElNSUwxIHwKKwkJCQkgVElNRVJfU1RBVFVTX1RPVkYwIHwgVElNRVJfU1RBVFVTX1RPVkYxKTsKKworfQorCitzdGF0aWMgdm9pZCBiZmluX3QzNTBtY3FiX2luaXRfdGltZXJzKHZvaWQpCit7CisKKwliZmluX3QzNTBtY3FiX3N0b3BfdGltZXJzKCk7CisKKwlzZXRfZ3B0aW1lcl9wZXJpb2QoVElNRVIwX2lkLCBIX1BFUklPRCk7CisJc2V0X2dwdGltZXJfcHdpZHRoKFRJTUVSMF9pZCwgSF9QVUxTRSk7CisJc2V0X2dwdGltZXJfY29uZmlnKFRJTUVSMF9pZCwgVElNRVJfTU9ERV9QV00gfCBUSU1FUl9QRVJJT0RfQ05UIHwKKwkJCQkgICAgICBUSU1FUl9USU5fU0VMIHwgVElNRVJfQ0xLX1NFTHwKKwkJCQkgICAgICBUSU1FUl9FTVVfUlVOKTsKKworCXNldF9ncHRpbWVyX3BlcmlvZChUSU1FUjFfaWQsIFZfUEVSSU9EKTsKKwlzZXRfZ3B0aW1lcl9wd2lkdGgoVElNRVIxX2lkLCBWX1BVTFNFKTsKKwlzZXRfZ3B0aW1lcl9jb25maWcoVElNRVIxX2lkLCBUSU1FUl9NT0RFX1BXTSB8IFRJTUVSX1BFUklPRF9DTlQgfAorCQkJCSAgICAgIFRJTUVSX1RJTl9TRUwgfCBUSU1FUl9DTEtfU0VMIHwKKwkJCQkgICAgICBUSU1FUl9FTVVfUlVOKTsKKworfQorCitzdGF0aWMgdm9pZCBiZmluX3QzNTBtY3FiX2NvbmZpZ19kbWEoc3RydWN0IGJmaW5fdDM1MG1jcWJmYl9pbmZvICpmYmkpCit7CisKKwlzZXRfZG1hX2NvbmZpZyhDSF9QUEksCisJCSAgICAgICBzZXRfYmZpbl9kbWFfY29uZmlnKERJUl9SRUFELCBETUFfRkxPV19BVVRPLAorCQkJCQkgICBJTlRSX0RJU0FCTEUsIERJTUVOU0lPTl8yRCwKKwkJCQkJICAgREFUQV9TSVpFXzE2LAorCQkJCQkgICBETUFfTk9TWU5DX0tFRVBfRE1BX0JVRikpOworCXNldF9kbWFfeF9jb3VudChDSF9QUEksIChMQ0RfWF9SRVMgKiBMQ0RfQlBQKSAvIERNQV9CVVNfU0laRSk7CisJc2V0X2RtYV94X21vZGlmeShDSF9QUEksIERNQV9CVVNfU0laRSAvIDgpOworCXNldF9kbWFfeV9jb3VudChDSF9QUEksIFZfTElORVMpOworCisJc2V0X2RtYV95X21vZGlmeShDSF9QUEksIERNQV9CVVNfU0laRSAvIDgpOworCXNldF9kbWFfc3RhcnRfYWRkcihDSF9QUEksICh1bnNpZ25lZCBsb25nKWZiaS0+ZmJfYnVmZmVyKTsKKworfQorCitzdGF0aWMJdTE2IHBwaTBfcmVxXzhbXSA9IHtQX1BQSTBfQ0xLLCBQX1BQSTBfRlMxLCBQX1BQSTBfRlMyLAorCQkJICAgIFBfUFBJMF9EMCwgUF9QUEkwX0QxLCBQX1BQSTBfRDIsCisJCQkgICAgUF9QUEkwX0QzLCBQX1BQSTBfRDQsIFBfUFBJMF9ENSwKKwkJCSAgICBQX1BQSTBfRDYsIFBfUFBJMF9ENywgMH07CisKK3N0YXRpYyBpbnQgYmZpbl90MzUwbWNxYl9yZXF1ZXN0X3BvcnRzKGludCBhY3Rpb24pCit7CisJaWYgKGFjdGlvbikgeworCQlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QocHBpMF9yZXFfOCwgRFJJVkVSX05BTUUpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGRcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UKKwkJcGVyaXBoZXJhbF9mcmVlX2xpc3QocHBpMF9yZXFfOCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX3QzNTBtY3FiX2ZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBiZmluX3QzNTBtY3FiZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCisJc3Bpbl9sb2NrKCZmYmktPmxvY2spOworCWZiaS0+bHEwNDNfb3Blbl9jbnQrKzsKKworCWlmIChmYmktPmxxMDQzX29wZW5fY250IDw9IDEpIHsKKworCQliZmluX3QzNTBtY3FiX2Rpc2FibGVfcHBpKCk7CisJCVNTWU5DKCk7CisKKwkJYmZpbl90MzUwbWNxYl9jb25maWdfZG1hKGZiaSk7CisJCWJmaW5fdDM1MG1jcWJfY29uZmlnX3BwaShmYmkpOworCQliZmluX3QzNTBtY3FiX2luaXRfdGltZXJzKCk7CisKKwkJLyogc3RhcnQgZG1hICovCisJCWVuYWJsZV9kbWEoQ0hfUFBJKTsKKwkJYmZpbl90MzUwbWNxYl9lbmFibGVfcHBpKCk7CisJCWJmaW5fdDM1MG1jcWJfc3RhcnRfdGltZXJzKCk7CisJfQorCisJc3Bpbl91bmxvY2soJmZiaS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX3QzNTBtY3FiX2ZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBiZmluX3QzNTBtY3FiZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCisJc3Bpbl9sb2NrKCZmYmktPmxvY2spOworCisJZmJpLT5scTA0M19vcGVuX2NudC0tOworCWZiaS0+bHEwNDNfbW1hcCA9IDA7CisKKwlpZiAoZmJpLT5scTA0M19vcGVuX2NudCA8PSAwKSB7CisJCWJmaW5fdDM1MG1jcWJfZGlzYWJsZV9wcGkoKTsKKwkJU1NZTkMoKTsKKwkJZGlzYWJsZV9kbWEoQ0hfUFBJKTsKKwkJYmZpbl90MzUwbWNxYl9zdG9wX3RpbWVycygpOworCQltZW1zZXQoZmJpLT5mYl9idWZmZXIsIDAsIGluZm8tPmZpeC5zbWVtX2xlbik7CisJfQorCisJc3Bpbl91bmxvY2soJmZiaS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX3QzNTBtY3FiX2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IExDRF9CUFApIHsKKwkJcHJfZGVidWcoIiVzOiBkZXB0aCBub3Qgc3VwcG9ydGVkOiAldSBCUFBcbiIsIF9fRlVOQ1RJT05fXywKKwkJCSB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluZm8tPnZhci54cmVzICE9IHZhci0+eHJlcyB8fCBpbmZvLT52YXIueXJlcyAhPSB2YXItPnlyZXMgfHwKKwkgICAgaW5mby0+dmFyLnhyZXNfdmlydHVhbCAhPSB2YXItPnhyZXNfdmlydHVhbCB8fAorCSAgICBpbmZvLT52YXIueXJlc192aXJ0dWFsICE9IHZhci0+eXJlc192aXJ0dWFsKSB7CisJCXByX2RlYnVnKCIlczogUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkOiBYJXUgeCBZJXUgXG4iLAorCQkJIF9fRlVOQ1RJT05fXywgdmFyLT54cmVzLCB2YXItPnlyZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqICBNZW1vcnkgbGltaXQKKwkgKi8KKworCWlmICgoaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogdmFyLT55cmVzX3ZpcnR1YWwpID4gaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXByX2RlYnVnKCIlczogTWVtb3J5IExpbWl0IHJlcXVlc3RlZCB5cmVzX3ZpcnR1YWwgPSAldVxuIiwKKwkJCSBfX0ZVTkNUSU9OX18sIHZhci0+eXJlc192aXJ0dWFsKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl90MzUwbWNxYl9mYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgYmZpbl90MzUwbWNxYmZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKworCWlmIChmYmktPmxxMDQzX21tYXApCisJCXJldHVybiAtMTsKKworCXNwaW5fbG9jaygmZmJpLT5sb2NrKTsKKwlmYmktPmxxMDQzX21tYXAgPSAxOworCXNwaW5fdW5sb2NrKCZmYmktPmxvY2spOworCisJdm1hLT52bV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKShmYmktPmZiX2J1ZmZlciArIEFDVElWRV9WSURFT19NRU1fT0ZGU0VUKTsKKworCXZtYS0+dm1fZW5kID0gdm1hLT52bV9zdGFydCArIGluZm8tPmZpeC5zbWVtX2xlbjsKKwkvKiBGb3IgdGhvc2Ugd2hvIGRvbid0IHVuZGVyc3RhbmQgaG93IG1tYXAgd29ya3MsIGdvIHJlYWQKKwkgKiAgIERvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQuCisJICogRm9yIHRob3NlIHRoYXQgZG8sIHlvdSB3aWxsIGtub3cgdGhhdCB0aGUgVk1fTUFZU0hBUkUgZmxhZworCSAqIG11c3QgYmUgc2V0IGluIHRoZSB2bWEtPnZtX2ZsYWdzIHN0cnVjdHVyZSBvbiBub01NVQorCSAqICAgT3RoZXIgZmxhZ3MgY2FuIGJlIHNldCwgYW5kIGFyZSBkb2N1bWVudGVkIGluCisJICogICBpbmNsdWRlL2xpbnV4L21tLmgKKwkgKi8KKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX01BWVNIQVJFIHwgVk1fU0hBUkVEOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBiZmluX3QzNTBtY3FiX2ZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQoreworCWlmIChub2N1cnNvcikKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsJLyoganVzdCB0byBmb3JjZSBzb2Z0X2N1cnNvcigpIGNhbGwgKi8KK30KKworc3RhdGljIGludCBiZmluX3QzNTBtY3FiX2ZiX3NldGNvbHJlZyh1X2ludCByZWdubywgdV9pbnQgcmVkLCB1X2ludCBncmVlbiwKKwkJCQkgICB1X2ludCBibHVlLCB1X2ludCB0cmFuc3AsCisJCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKHJlZ25vID49IEJGSU5fTENEX05CUl9QQUxFVFRFX0VOVFJJRVMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGluZm8tPnZhci5ncmF5c2NhbGUpIHsKKwkJLyogZ3JheXNjYWxlID0gMC4zMCpSICsgMC41OSpHICsgMC4xMSpCICovCisJCXJlZCA9IGdyZWVuID0gYmx1ZSA9IChyZWQgKiA3NyArIGdyZWVuICogMTUxICsgYmx1ZSAqIDI4KSA+PiA4OworCX0KKworCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKKworCQl1MzIgdmFsdWU7CisJCS8qIFBsYWNlIGNvbG9yIGluIHRoZSBwc2V1ZG9wYWxldHRlICovCisJCWlmIChyZWdubyA+IDE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmVkID4+PSAoMTYgLSBpbmZvLT52YXIucmVkLmxlbmd0aCk7CisJCWdyZWVuID4+PSAoMTYgLSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwkJYmx1ZSA+Pj0gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKworCQl2YWx1ZSA9IChyZWQgPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKKwkJICAgIChncmVlbiA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8CisJCSAgICAoYmx1ZSA8PCBpbmZvLT52YXIuYmx1ZS5vZmZzZXQpOworCQl2YWx1ZSAmPSAweEZGRkZGRjsKKworCQkoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPSB2YWx1ZTsKKworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBiZmluX3QzNTBtY3FiX2ZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfb3BlbiA9IGJmaW5fdDM1MG1jcWJfZmJfb3BlbiwKKwkuZmJfcmVsZWFzZSA9IGJmaW5fdDM1MG1jcWJfZmJfcmVsZWFzZSwKKwkuZmJfY2hlY2tfdmFyID0gYmZpbl90MzUwbWNxYl9mYl9jaGVja192YXIsCisJLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfbW1hcCA9IGJmaW5fdDM1MG1jcWJfZmJfbW1hcCwKKwkuZmJfY3Vyc29yID0gYmZpbl90MzUwbWNxYl9mYl9jdXJzb3IsCisJLmZiX3NldGNvbHJlZyA9IGJmaW5fdDM1MG1jcWJfZmJfc2V0Y29scmVnLAorfTsKKworI2lmbmRlZiBOT19CTF9TVVBQT1JUCitzdGF0aWMgaW50IGJsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGJmaW5fbHEwNDNmYl9ibF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gYmxfZ2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsX2RldjsKKworc3RhdGljIGludCBiZmluX2xjZF9nZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX2xjZF9zZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmRldiwgaW50IHBvd2VyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fbGNkX2dldF9jb250cmFzdChzdHJ1Y3QgbGNkX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fbGNkX3NldF9jb250cmFzdChzdHJ1Y3QgbGNkX2RldmljZSAqZGV2LCBpbnQgY29udHJhc3QpCit7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX2xjZF9jaGVja19mYihzdHJ1Y3QgZmJfaW5mbyAqZmkpCit7CisJaWYgKCFmaSB8fCAoZmkgPT0gJmJmaW5fdDM1MG1jcWJfZmIpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGJmaW5fbGNkX29wcyA9IHsKKwkuZ2V0X3Bvd2VyID0gYmZpbl9sY2RfZ2V0X3Bvd2VyLAorCS5zZXRfcG93ZXIgPSBiZmluX2xjZF9zZXRfcG93ZXIsCisJLmdldF9jb250cmFzdCA9IGJmaW5fbGNkX2dldF9jb250cmFzdCwKKwkuc2V0X2NvbnRyYXN0ID0gYmZpbl9sY2Rfc2V0X2NvbnRyYXN0LAorCS5jaGVja19mYiA9IGJmaW5fbGNkX2NoZWNrX2ZiLAorfTsKKworc3RhdGljIHN0cnVjdCBsY2RfZGV2aWNlICpsY2RfZGV2OworI2VuZGlmCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiZmluX3QzNTBtY3FiX2lycV9lcnJvcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJLypzdHJ1Y3QgYmZpbl90MzUwbWNxYmZiX2luZm8gKmluZm8gPSAoc3RydWN0IGJmaW5fdDM1MG1jcWJmYl9pbmZvICopZGV2X2lkOyovCisKKwl1MTYgc3RhdHVzID0gYmZpbl9yZWFkX1BQSV9TVEFUVVMoKTsKKwliZmluX3dyaXRlX1BQSV9TVEFUVVMoMHhGRkZGKTsKKworCWlmIChzdGF0dXMpIHsKKwkJYmZpbl90MzUwbWNxYl9kaXNhYmxlX3BwaSgpOworCQlkaXNhYmxlX2RtYShDSF9QUEkpOworCisJCS8qIHN0YXJ0IGRtYSAqLworCQllbmFibGVfZG1hKENIX1BQSSk7CisJCWJmaW5fdDM1MG1jcWJfZW5hYmxlX3BwaSgpOworCQliZmluX3dyaXRlX1BQSV9TVEFUVVMoMHhGRkZGKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGJmaW5fdDM1MG1jcWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmZpbl90MzUwbWNxYmZiX2luZm8gKmluZm87CisJc3RydWN0IGZiX2luZm8gKmZiaW5mbzsKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAlZHglZCAlZC1iaXQgUkdCIEZyYW1lQnVmZmVyIGluaXRpYWxpemluZy4uLlxuIiwKKwkJCQkJIExDRF9YX1JFUywgTENEX1lfUkVTLCBMQ0RfQlBQKTsKKworCWlmIChyZXF1ZXN0X2RtYShDSF9QUEksICJDSF9QUEkiKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCSAgICAgICAiOiBjb3VsZG4ndCByZXF1ZXN0IENIX1BQSSBETUFcbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDE7CisJfQorCisJZmJpbmZvID0KKwkgICAgZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmluX3QzNTBtY3FiZmJfaW5mbyksICZwZGV2LT5kZXYpOworCWlmICghZmJpbmZvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MjsKKwl9CisKKwlpbmZvID0gZmJpbmZvLT5wYXI7CisJaW5mby0+ZmIgPSBmYmluZm87CisJaW5mby0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiaW5mbyk7CisKKwlzdHJjcHkoZmJpbmZvLT5maXguaWQsIGRyaXZlcl9uYW1lKTsKKworCWZiaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZmJpbmZvLT5maXgudHlwZV9hdXggPSAwOworCWZiaW5mby0+Zml4LnhwYW5zdGVwID0gMDsKKwlmYmluZm8tPmZpeC55cGFuc3RlcCA9IDA7CisJZmJpbmZvLT5maXgueXdyYXBzdGVwID0gMDsKKwlmYmluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX05PTkU7CisJZmJpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKworCWZiaW5mby0+dmFyLm5vbnN0ZCA9IDA7CisJZmJpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisJZmJpbmZvLT52YXIuaGVpZ2h0ID0gLTE7CisJZmJpbmZvLT52YXIud2lkdGggPSAtMTsKKwlmYmluZm8tPnZhci5hY2NlbF9mbGFncyA9IDA7CisJZmJpbmZvLT52YXIudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOworCisJZmJpbmZvLT52YXIueHJlcyA9IExDRF9YX1JFUzsKKwlmYmluZm8tPnZhci54cmVzX3ZpcnR1YWwgPSBMQ0RfWF9SRVM7CisJZmJpbmZvLT52YXIueXJlcyA9IExDRF9ZX1JFUzsKKwlmYmluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBMQ0RfWV9SRVM7CisJZmJpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBMQ0RfQlBQOworCisJZmJpbmZvLT52YXIucmVkLm9mZnNldCA9IDA7CisJZmJpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwlmYmluZm8tPnZhci5ibHVlLm9mZnNldCA9IDE2OworCWZiaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAwOworCWZiaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OworCWZiaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJZmJpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OworCWZiaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOworCWZiaW5mby0+Zml4LnNtZW1fbGVuID0gTENEX1hfUkVTICogTENEX1lfUkVTICogTENEX0JQUCAvIDg7CisKKwlmYmluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGZiaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqCisJICAgIGZiaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gODsKKworCisJZmJpbmZvLT5mYm9wcyA9ICZiZmluX3QzNTBtY3FiX2ZiX29wczsKKwlmYmluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKworCWluZm8tPmZiX2J1ZmZlciA9CisJICAgIGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBmYmluZm8tPmZpeC5zbWVtX2xlbiwgJmluZm8tPmRtYV9oYW5kbGUsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoTlVMTCA9PSBpbmZvLT5mYl9idWZmZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCSAgICAgICAiOiBjb3VsZG4ndCBhbGxvY2F0ZSBkbWEgYnVmZmVyLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MzsKKwl9CisKKwltZW1zZXQoaW5mby0+ZmJfYnVmZmVyLCAwLCBmYmluZm8tPmZpeC5zbWVtX2xlbik7CisKKwlmYmluZm8tPnNjcmVlbl9iYXNlID0gKHZvaWQgKilpbmZvLT5mYl9idWZmZXIgKyBBQ1RJVkVfVklERU9fTUVNX09GRlNFVDsKKwlmYmluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gKGludClpbmZvLT5mYl9idWZmZXIgKyBBQ1RJVkVfVklERU9fTUVNX09GRlNFVDsKKworCWZiaW5mby0+ZmJvcHMgPSAmYmZpbl90MzUwbWNxYl9mYl9vcHM7CisKKwlmYmluZm8tPnBzZXVkb19wYWxldHRlID0gJmluZm8tPnBzZXVkb19wYWw7CisKKwlpZiAoZmJfYWxsb2NfY21hcCgmZmJpbmZvLT5jbWFwLCBCRklOX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTLCAwKQorCSAgICA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCSAgICAgICAiRmFpbCB0byBhbGxvY2F0ZSBjb2xvcm1hcCAoJWQgZW50cmllcylcbiIsCisJCSAgICAgICBCRklOX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ0OworCX0KKworCWlmIChiZmluX3QzNTBtY3FiX3JlcXVlc3RfcG9ydHMoMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IGNvdWxkbid0IHJlcXVlc3QgZ3BpbyBwb3J0LlxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0NjsKKwl9CisKKwlpbmZvLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpbmZvLT5pcnEgPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0NzsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpbmZvLT5pcnEsIGJmaW5fdDM1MG1jcWJfaXJxX2Vycm9yLCBJUlFGX0RJU0FCTEVELAorCQkJIlBQSSBFUlJPUiIsIGluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkgICAgICAgIjogdW5hYmxlIHRvIHJlcXVlc3QgUFBJIEVSUk9SIElSUVxuIik7CisJCWdvdG8gb3V0NzsKKwl9CisKKwlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpbmZvKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCSAgICAgICAiOiB1bmFibGUgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXIuXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ4OworCX0KKyNpZm5kZWYgTk9fQkxfU1VQUE9SVAorCWJsX2RldiA9CisJICAgIGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImJmNTJ4LWJsIiwgTlVMTCwgTlVMTCwKKwkJCQkgICAgICAmYmZpbl9scTA0M2ZiX2JsX29wcyk7CisJYmxfZGV2LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDI1NTsKKworCWxjZF9kZXYgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKERSSVZFUl9OQU1FLCBOVUxMLCAmYmZpbl9sY2Rfb3BzKTsKKwlsY2RfZGV2LT5wcm9wcy5tYXhfY29udHJhc3QgPSAyNTUsIHByaW50ayhLRVJOX0lORk8gIkRvbmUuXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7CisKK291dDg6CisJZnJlZV9pcnEoaW5mby0+aXJxLCBpbmZvKTsKK291dDc6CisJYmZpbl90MzUwbWNxYl9yZXF1ZXN0X3BvcnRzKDApOworb3V0NjoKKwlmYl9kZWFsbG9jX2NtYXAoJmZiaW5mby0+Y21hcCk7CitvdXQ0OgorCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIGZiaW5mby0+Zml4LnNtZW1fbGVuLCBpbmZvLT5mYl9idWZmZXIsCisJCQkgIGluZm8tPmRtYV9oYW5kbGUpOworb3V0MzoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaW5mbyk7CitvdXQyOgorCWZyZWVfZG1hKENIX1BQSSk7CitvdXQxOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiZmluX3QzNTBtY3FiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCisJc3RydWN0IGZiX2luZm8gKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBiZmluX3QzNTBtY3FiZmJfaW5mbyAqaW5mbyA9IGZiaW5mby0+cGFyOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm8pOworCisJZnJlZV9kbWEoQ0hfUFBJKTsKKwlmcmVlX2lycShpbmZvLT5pcnEsIGluZm8pOworCisJaWYgKGluZm8tPmZiX2J1ZmZlciAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBmYmluZm8tPmZpeC5zbWVtX2xlbiwgaW5mby0+ZmJfYnVmZmVyLAorCQkJCSAgaW5mby0+ZG1hX2hhbmRsZSk7CisKKwlmYl9kZWFsbG9jX2NtYXAoJmZiaW5mby0+Y21hcCk7CisKKyNpZm5kZWYgTk9fQkxfU1VQUE9SVAorCWxjZF9kZXZpY2VfdW5yZWdpc3RlcihsY2RfZGV2KTsKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmxfZGV2KTsKKyNlbmRpZgorCisJYmZpbl90MzUwbWNxYl9yZXF1ZXN0X3BvcnRzKDApOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShmYmluZm8pOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBVbnJlZ2lzdGVyIExDRCBkcml2ZXIuXG4iKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGJmaW5fdDM1MG1jcWJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGZiX2luZm8gKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBiZmluX3QzNTBtY3FiZmJfaW5mbyAqaW5mbyA9IGZiaW5mby0+cGFyOworCisJYmZpbl90MzUwbWNxYl9kaXNhYmxlX3BwaSgpOworCWRpc2FibGVfZG1hKENIX1BQSSk7CisJYmZpbl93cml0ZV9QUElfU1RBVFVTKDB4RkZGRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX3QzNTBtY3FiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYmZpbl90MzUwbWNxYmZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKKworCWVuYWJsZV9kbWEoQ0hfUFBJKTsKKwliZmluX3QzNTBtY3FiX2VuYWJsZV9wcGkoKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYmZpbl90MzUwbWNxYl9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYmZpbl90MzUwbWNxYl9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJmaW5fdDM1MG1jcWJfZHJpdmVyID0geworCS5wcm9iZSA9IGJmaW5fdDM1MG1jcWJfcHJvYmUsCisJLnJlbW92ZSA9IGJmaW5fdDM1MG1jcWJfcmVtb3ZlLAorCS5zdXNwZW5kID0gYmZpbl90MzUwbWNxYl9zdXNwZW5kLAorCS5yZXN1bWUgPSBiZmluX3QzNTBtY3FiX3Jlc3VtZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJmaW5fdDM1MG1jcWJfZHJpdmVyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiZmluX3QzNTBtY3FiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZmluX3QzNTBtY3FiX2RyaXZlcl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJmaW5fdDM1MG1jcWJfZHJpdmVyKTsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCbGFja2ZpbiBURlQgTENEIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChiZmluX3QzNTBtY3FiX2RyaXZlcl9pbml0KTsKK21vZHVsZV9leGl0KGJmaW5fdDM1MG1jcWJfZHJpdmVyX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZzE0LmMgYi9kcml2ZXJzL3ZpZGVvL2NnMTQuYwppbmRleCA0MWY2ZGJmLi5mZGM5ZjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NnMTQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NnMTQuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jIGIvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKaW5kZXggNjc5NmJhNi4uNzc3Mzg5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCiAJaWYgKHN0YXRlLmV2ZW50ID09IHBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHN0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX1NVU1BFTkQpCisJaWYgKCEoc3RhdGUuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkpCiAJCWdvdG8gZG9uZTsKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYyBiL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYwppbmRleCAwZjhjZmI5Li4yNDg0M2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKKysrIGIvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNiBKYXlhIEt1bWFyCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKQEAgLTMxLDcgKzMxLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCS8qIGluZm8tPnNjcmVlbl9iYXNlIGlzIGluIFN5c3RlbSBSQU0gKi8KKwkvKiBpbmZvLT5zY3JlZW5fYmFzZSBpcyB2aXJ0dWFsIG1lbW9yeSAqLwogCXZvaWQgKnNjcmVlbl9iYXNlID0gKHZvaWQgX19mb3JjZSAqKSBpbmZvLT5zY3JlZW5fYmFzZTsKIAogCW9mZnNldCA9IHZtZi0+cGdvZmYgPDwgUEFHRV9TSElGVDsKQEAgLTQzLDYgKzQzLDE1IEBACiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAKIAlnZXRfcGFnZShwYWdlKTsKKworCWlmICh2bWEtPnZtX2ZpbGUpCisJCXBhZ2UtPm1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAibm8gbWFwcGluZyBhdmFpbGFibGVcbiIpOworCisJQlVHX09OKCFwYWdlLT5tYXBwaW5nKTsKKwlwYWdlLT5pbmRleCA9IHZtZi0+cGdvZmY7CisKIAl2bWYtPnBhZ2UgPSBwYWdlOwogCXJldHVybiAwOwogfQpAQCAtMTM4LDExICsxNDcsMjAgQEAKIAogdm9pZCBmYl9kZWZlcnJlZF9pb19jbGVhbnVwKHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXZvaWQgKnNjcmVlbl9iYXNlID0gKHZvaWQgX19mb3JjZSAqKSBpbmZvLT5zY3JlZW5fYmFzZTsKIAlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW8gPSBpbmZvLT5mYmRlZmlvOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBpOwogCiAJQlVHX09OKCFmYmRlZmlvKTsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZpbmZvLT5kZWZlcnJlZF93b3JrKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogY2xlYXIgb3V0IHRoZSBtYXBwaW5nIHRoYXQgd2Ugc2V0dXAgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IGluZm8tPmZpeC5zbWVtX2xlbjsgaSArPSBQQUdFX1NJWkUpIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShzY3JlZW5fYmFzZSArIGkpOworCQlwYWdlLT5tYXBwaW5nID0gTlVMTDsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmYl9kZWZlcnJlZF9pb19jbGVhbnVwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IDExOTRmNWUuLjAxMDcyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTE1MjEsNiArMTUyMSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIGZibWVtX2V4aXQodm9pZCkKIHsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZmIiLCBOVUxMKTsKIAljbGFzc19kZXN0cm95KGZiX2NsYXNzKTsKIAl1bnJlZ2lzdGVyX2NocmRldihGQl9NQUpPUiwgImZiIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2hpdGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2hpdGZiLmMKaW5kZXggNzU2YzBjZS4uMzkyYThiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9oaXRmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYwpAQCAtNDAzLDcgKzQwMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGhpdGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBoaXRmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKTsKIH0KQEAgLTQzOSw3ICs0MzksNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoaXRmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGhpdGZiX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaGl0ZmJfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGhpdGZiX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBoaXRmYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gaGl0ZmJfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCmluZGV4IDFkMTNkZDAuLmEyNGU2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKQEAgLTE0NzYsNyArMTQ3Niw3IEBACiAJc3RydWN0IGk4MTBmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1OCBfX2lvbWVtICptbWlvID0gcGFyLT5tbWlvX3N0YXJ0X3ZpcnR1YWw7CiAKLQlpZiAoIShwYXItPmRldl9mbGFncyAmIExPQ0tVUCkpCisJaWYgKHBhci0+ZGV2X2ZsYWdzICYgTE9DS1VQKQogCQlyZXR1cm4gLUVOWElPOwogCiAJaWYgKGN1cnNvci0+aW1hZ2Uud2lkdGggPiA2NCB8fCBjdXJzb3ItPmltYWdlLmhlaWdodCA+IDY0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYngvbWJ4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWJ4L21ieGZiLmMKaW5kZXggODBjZDExNy4uMDFmNzdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYngvbWJ4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21ieC9tYnhmYi5jCkBAIC04ODksNyArODg5LDcgQEAKIAlzdHJ1Y3QgbWJ4ZmJfaW5mbyAqbWZiaTsKIAlzdHJ1Y3QgbWJ4ZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAKLQlkZXZfZGJnKGRldiwgIm1ieGZiX3Byb2JlXG4iKTsKKwlkZXZfZGJnKCZkZXYtPmRldiwgIm1ieGZiX3Byb2JlXG4iKTsKIAogCXBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAoIXBkYXRhKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhODlmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYwpAQCAtMCwwICsxLDk5OSBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYyAtLSBGQiBkcml2ZXIgZm9yIE1ldHJvbm9tZSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBKYXlhIEt1bWFyCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogTGF5b3V0IGlzIGJhc2VkIG9uIHNrZWxldG9uZmIuYyBieSBKYW1lcyBTaW1tb25zIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCisgKgorICogVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGJ5IGhlbHAgYW5kIGVxdWlwbWVudCBzdXBwb3J0IGZyb20gRS1JbmsKKyAqIENvcnBvcmF0aW9uLiBodHRwOi8vc3VwcG9ydC5laW5rLmNvbS9jb21tdW5pdHkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyB3cml0dGVuIHRvIGJlIHVzZWQgd2l0aCB0aGUgTWV0cm9ub21lIGRpc3BsYXkgY29udHJvbGxlci4KKyAqIEl0IHdhcyB0ZXN0ZWQgd2l0aCBhbiBFLUluayA4MDB4NjAwIFZpenBsZXggRVBEIG9uIGEgR3Vtc3RpeCBDb25uZXggYm9hcmQKKyAqIHVzaW5nIHRoZSBMeXJlIGludGVyZmFjZSBib2FyZC4KKyAqCisgKiBHZW5lcmFsIG5vdGVzOgorICogLSBVc2VyIG11c3Qgc2V0IG1ldHJvbm9tZWZiX2VuYWJsZT0xIHRvIGVuYWJsZSBpdC4KKyAqIC0gU2VlIERvY3VtZW50YXRpb24vZmIvbWV0cm9ub21lZmIudHh0IGZvciBob3cgbWV0cm9ub21lIHdvcmtzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjZGVmaW5lIERFQlVHIDEKKyNpZmRlZiBERUJVRworI2RlZmluZSBEUFJJTlRLKGYsIGEuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmLCBfX2Z1bmNfXyAsICMjIGEpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGYsIGEuLi4pCisjZW5kaWYKKworCisvKiBEaXNwbGF5IHNwZWNpZmljIGluZm9ybWF0aW9uICovCisjZGVmaW5lIERQWV9XIDgzMgorI2RlZmluZSBEUFlfSCA2MjIKKworc3RydWN0IG1ldHJvbWVtX2Rlc2MgeworCXUzMiBtRkRBRFIwOworCXUzMiBtRlNBRFIwOworCXUzMiBtRklEUjA7CisJdTMyIG1MRENNRDA7Cit9OworCitzdHJ1Y3QgbWV0cm9tZW1fY21kIHsKKwl1MTYgb3Bjb2RlOworCXUxNiBhcmdzWygoNjQtMikvMildOworCXUxNiBjc3VtOworfTsKKworc3RydWN0IG1ldHJvbm9tZWZiX3BhciB7CisJdW5zaWduZWQgY2hhciAqbWV0cm9tZW07CisJc3RydWN0IG1ldHJvbWVtX2Rlc2MgKm1ldHJvbWVtX2Rlc2M7CisJc3RydWN0IG1ldHJvbWVtX2NtZCAqbWV0cm9tZW1fY21kOworCXVuc2lnbmVkIGNoYXIgKm1ldHJvbWVtX3dmbTsKKwl1bnNpZ25lZCBjaGFyICptZXRyb21lbV9pbWc7CisJdTE2ICptZXRyb21lbV9pbWdfY3N1bTsKKwl1MTYgKmNzdW1fdGFibGU7CisJaW50IG1ldHJvbWVtc2l6ZTsKKwlkbWFfYWRkcl90IG1ldHJvbWVtX2RtYTsKKwlkbWFfYWRkcl90IG1ldHJvbWVtX2Rlc2NfZG1hOworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOworCXU4IGZyYW1lX2NvdW50OworfTsKKworLyogZnJhbWUgZGlmZmVycyBmcm9tIGltYWdlLiBmcmFtZSBpbmNsdWRlcyBub24tdmlzaWJsZSBwaXhlbHMgKi8KK3N0cnVjdCBlcGRfZnJhbWUgeworCWludCBmdzsgLyogZnJhbWUgd2lkdGggKi8KKwlpbnQgZmg7IC8qIGZyYW1lIGhlaWdodCAqLworfTsKKworc3RhdGljIHN0cnVjdCBlcGRfZnJhbWUgZXBkX2ZyYW1lX3RhYmxlW10gPSB7CisJeworCS5mdyA9IDgzMiwKKwkuZmggPSA2MjIKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBtZXRyb25vbWVmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKKwkuaWQgPQkJIm1ldHJvbm9tZWZiIiwKKwkudHlwZSA9CQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCA9CUZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1IsCisJLnhwYW5zdGVwID0JMCwKKwkueXBhbnN0ZXAgPQkwLAorCS55d3JhcHN0ZXAgPQkwLAorCS5saW5lX2xlbmd0aCA9CURQWV9XLAorCS5hY2NlbCA9CUZCX0FDQ0VMX05PTkUsCit9OworCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIG1ldHJvbm9tZWZiX3ZhciBfX2RldmluaXRkYXRhID0geworCS54cmVzCQk9IERQWV9XLAorCS55cmVzCQk9IERQWV9ILAorCS54cmVzX3ZpcnR1YWwJPSBEUFlfVywKKwkueXJlc192aXJ0dWFsCT0gRFBZX0gsCisJLmJpdHNfcGVyX3BpeGVsCT0gOCwKKwkuZ3JheXNjYWxlCT0gMSwKKwkubm9uc3RkCQk9IDEsCisJLnJlZCA9CQl7IDQsIDMsIDAgfSwKKwkuZ3JlZW4gPQl7IDAsIDAsIDAgfSwKKwkuYmx1ZSA9CQl7IDAsIDAsIDAgfSwKKwkudHJhbnNwID0JeyAwLCAwLCAwIH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG1ldHJvbm9tZWZiX2VuYWJsZTsKKworc3RydWN0IHdhdmVmb3JtX2hkciB7CisJdTggc3R1ZmZbMzJdOworCisJdTggd210YVszXTsKKwl1OCBmdnNuOworCisJdTggbHV0czsKKwl1OCBtYzsKKwl1OCB0cmM7CisJdTggc3R1ZmYzOworCisJdTggZW5kYjsKKwl1OCBzd3RiOworCXU4IHN0dWZmMmFbMl07CisKKwl1OCBzdHVmZjJiWzNdOworCXU4IHdmbV9jczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBtYWluIG1ldHJvbm9tZWZiIGZ1bmN0aW9ucyAqLworc3RhdGljIHU4IGNhbGNfY2tzdW0oaW50IHN0YXJ0LCBpbnQgZW5kLCB1OCAqbWVtKQoreworCXU4IHRtcCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorCQl0bXAgKz0gbWVtW2ldOworCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIHUxNiBjYWxjX2ltZ19ja3N1bSh1MTYgKnN0YXJ0LCBpbnQgbGVuZ3RoKQoreworCXUxNiB0bXAgPSAwOworCisJd2hpbGUgKGxlbmd0aC0tKQorCQl0bXAgKz0gKnN0YXJ0Kys7CisKKwlyZXR1cm4gdG1wOworfQorCisvKiBoZXJlIHdlIGRlY29kZSB0aGUgaW5jb21pbmcgd2F2ZWZvcm0gZmlsZSBhbmQgcG9wdWxhdGUgbWV0cm9tZW0gKi8KKyNkZWZpbmUgRVhQX1dGT1JNX1NJWkUgNDcwMDEKK3N0YXRpYyBpbnQgbG9hZF93YXZlZm9ybSh1OCAqbWVtLCBzaXplX3Qgc2l6ZSwgdTggKm1ldHJvbWVtLCBpbnQgbSwgaW50IHQsCisJCQkJdTggKmZyYW1lX2NvdW50KQoreworCWludCB0dGE7CisJaW50IHdtdGE7CisJaW50IHRybiA9IDA7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciB2OworCXU4IGNrc3VtOworCWludCBja3N1bV9pZHg7CisJaW50IHdmbV9pZHgsIG93Zm1faWR4OworCWludCBtZW1faWR4ID0gMDsKKwlzdHJ1Y3Qgd2F2ZWZvcm1faGRyICp3Zm1faGRyOworCisJaWYgKHNpemUgIT0gRVhQX1dGT1JNX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogdW5leHBlY3RlZCBzaXplICVkICE9ICVkXG4iLCBzaXplLAorCQkJCQlFWFBfV0ZPUk1fU0laRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdmbV9oZHIgPSAoc3RydWN0IHdhdmVmb3JtX2hkciAqKSBtZW07CisKKwlpZiAod2ZtX2hkci0+ZnZzbiAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGJhZCBmdnNuICV4XG4iLCB3Zm1faGRyLT5mdnNuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh3Zm1faGRyLT5sdXRzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogYmFkIGx1dHMgJXhcbiIsIHdmbV9oZHItPmx1dHMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2tzdW0gPSBjYWxjX2Nrc3VtKDMyLCA0NywgbWVtKTsKKwlpZiAoY2tzdW0gIT0gd2ZtX2hkci0+d2ZtX2NzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGJhZCBja3N1bSAleCAhPSAleFxuIiwgY2tzdW0sCisJCQkJCXdmbV9oZHItPndmbV9jcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl3Zm1faGRyLT5tYyArPSAxOworCXdmbV9oZHItPnRyYyArPSAxOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKCood2ZtX2hkci0+c3R1ZmYyYSArIGkpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IHVuZXhwZWN0ZWQgdmFsdWUgaW4gcGFkZGluZ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIGNhbGN1bGF0aW5nIHRybi4gdHJuIGlzIHNvbWV0aGluZyB1c2VkIHRvIGluZGV4IGludG8KKwl0aGUgd2F2ZWZvcm0uIHByZXN1bWFibHkgc2VsZWN0aW5nIHRoZSByaWdodCBvbmUgZm9yIHRoZQorCWRlc2lyZWQgdGVtcGVyYXR1cmUuIGl0IHdvcmtzIG91dCB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdAorCXYgdGhhdCBleGNlZWRzIHRoZSBzcGVjaWZpZWQgdGVtcGVyYXR1cmUgKi8KKwlpZiAoKHNpemVvZigqd2ZtX2hkcikgKyB3Zm1faGRyLT50cmMpID4gc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSBzaXplb2YoKndmbV9oZHIpOyBpIDw9IHNpemVvZigqd2ZtX2hkcikgKyB3Zm1faGRyLT50cmM7IGkrKykgeworCQlpZiAobWVtW2ldID4gdCkgeworCQkJdHJuID0gaSAtIHNpemVvZigqd2ZtX2hkcikgLSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjaGVjayB0ZW1wZXJhdHVyZSByYW5nZSB0YWJsZSBjaGVja3N1bSAqLworCWNrc3VtX2lkeCA9IHNpemVvZigqd2ZtX2hkcikgKyB3Zm1faGRyLT50cmMgKyAxOworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0oc2l6ZW9mKCp3Zm1faGRyKSwgY2tzdW1faWR4LCBtZW0pOworCWlmIChja3N1bSAhPSBtZW1bY2tzdW1faWR4XSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBiYWQgdGVtcGVyYXR1cmUgcmFuZ2UgdGFibGUgY2tzdW0iCisJCQkJIiAleCAhPSAleFxuIiwgY2tzdW0sIG1lbVtja3N1bV9pZHhdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgd2F2ZWZvcm0gbW9kZSB0YWJsZSBhZGRyZXNzIGNoZWNrc3VtICovCisJd210YSA9IGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUzMiAqKSB3Zm1faGRyLT53bXRhKSk7CisJd210YSAmPSAweDAwRkZGRkZGOworCWNrc3VtX2lkeCA9IHdtdGEgKyBtKjQgKyAzOworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0oY2tzdW1faWR4IC0gMywgY2tzdW1faWR4LCBtZW0pOworCWlmIChja3N1bSAhPSBtZW1bY2tzdW1faWR4XSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBiYWQgbW9kZSB0YWJsZSBhZGRyZXNzIGNrc3VtIgorCQkJCSIgJXggIT0gJXhcbiIsIGNrc3VtLCBtZW1bY2tzdW1faWR4XSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIHdhdmVmb3JtIHRlbXBlcmF0dXJlIHRhYmxlIGFkZHJlc3MgY2hlY2tzdW0gKi8KKwl0dGEgPSBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChpbnQgKikgKG1lbSArIHdtdGEgKyBtKjQpKSk7CisJdHRhICY9IDB4MDBGRkZGRkY7CisJY2tzdW1faWR4ID0gdHRhICsgdHJuKjQgKyAzOworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0oY2tzdW1faWR4IC0gMywgY2tzdW1faWR4LCBtZW0pOworCWlmIChja3N1bSAhPSBtZW1bY2tzdW1faWR4XSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBiYWQgdGVtcGVyYXR1cmUgdGFibGUgYWRkcmVzcyBja3N1bSIKKwkJCSIgJXggIT0gJXhcbiIsIGNrc3VtLCBtZW1bY2tzdW1faWR4XSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGhlcmUgd2UgZG8gdGhlIHJlYWwgd29yayBvZiBwdXR0aW5nIHRoZSB3YXZlZm9ybSBpbnRvIHRoZQorCW1ldHJvbWVtIGJ1ZmZlci4gdGhpcyBkb2VzIHJ1bmxlbmd0aCBkZWNvZGluZyBvZiB0aGUgd2F2ZWZvcm0gKi8KKwl3Zm1faWR4ID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopIChtZW0gKyB0dGEgKyB0cm4qNCkpKTsKKwl3Zm1faWR4ICY9IDB4MDBGRkZGRkY7CisJb3dmbV9pZHggPSB3Zm1faWR4OworCWlmICh3Zm1faWR4ID4gc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJd2hpbGUgKHdmbV9pZHggPCBzaXplKSB7CisJCXVuc2lnbmVkIGNoYXIgcmw7CisJCXYgPSBtZW1bd2ZtX2lkeCsrXTsKKwkJaWYgKHYgPT0gd2ZtX2hkci0+c3d0YikgeworCQkJd2hpbGUgKCgodiA9IG1lbVt3Zm1faWR4KytdKSAhPSB3Zm1faGRyLT5zd3RiKSAmJgorCQkJCXdmbV9pZHggPCBzaXplKQorCQkJCW1ldHJvbWVtW21lbV9pZHgrK10gPSB2OworCisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh2ID09IHdmbV9oZHItPmVuZGIpCisJCQlicmVhazsKKworCQlybCA9IG1lbVt3Zm1faWR4KytdOworCQlmb3IgKGkgPSAwOyBpIDw9IHJsOyBpKyspCisJCQltZXRyb21lbVttZW1faWR4KytdID0gdjsKKwl9CisKKwlja3N1bV9pZHggPSB3Zm1faWR4OworCWlmIChja3N1bV9pZHggPiBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlja3N1bSA9IGNhbGNfY2tzdW0ob3dmbV9pZHgsIGNrc3VtX2lkeCwgbWVtKTsKKwlpZiAoY2tzdW0gIT0gbWVtW2Nrc3VtX2lkeF0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogYmFkIHdhdmVmb3JtIGRhdGEgY2tzdW0iCisJCQkJIiAleCAhPSAleFxuIiwgY2tzdW0sIG1lbVtja3N1bV9pZHhdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSpmcmFtZV9jb3VudCA9IChtZW1faWR4LzY0KTsKKworCXJldHVybiAwOworfQorCisvKiByZWdpc3RlciBvZmZzZXRzIGZvciBncGlvIGNvbnRyb2wgKi8KKyNkZWZpbmUgTEVEX0dQSU9fUElOIDUxCisjZGVmaW5lIFNUREJZX0dQSU9fUElOIDQ4CisjZGVmaW5lIFJTVF9HUElPX1BJTiA0OQorI2RlZmluZSBSRFlfR1BJT19QSU4gMzIKKyNkZWZpbmUgRVJSX0dQSU9fUElOIDE3CisjZGVmaW5lIFBDQlBXUl9HUElPX1BJTiAxNgorCisjZGVmaW5lIEFGX1NFTF9HUElPX04gMHgzCisjZGVmaW5lIEdBRlIwX1VfT0ZGU0VUKHBpbikgKChwaW4gLSAxNikgKiAyKQorI2RlZmluZSBHQUZSMV9MX09GRlNFVChwaW4pICgocGluIC0gMzIpICogMikKKyNkZWZpbmUgR0FGUjFfVV9PRkZTRVQocGluKSAoKHBpbiAtIDQ4KSAqIDIpCisjZGVmaW5lIEdQRFIxX09GRlNFVChwaW4pIChwaW4gLSAzMikKKyNkZWZpbmUgR1BDUjFfT0ZGU0VUKHBpbikgKHBpbiAtIDMyKQorI2RlZmluZSBHUFNSMV9PRkZTRVQocGluKSAocGluIC0gMzIpCisjZGVmaW5lIEdQQ1IwX09GRlNFVChwaW4pIChwaW4pCisjZGVmaW5lIEdQU1IwX09GRlNFVChwaW4pIChwaW4pCisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoaW50IHBpbiwgaW50IHZhbCkKK3sKKwl1OCBpbmRleDsKKworCWluZGV4ID0gcGluID4+IDQ7CisKKwlzd2l0Y2ggKGluZGV4KSB7CisJY2FzZSAxOgorCQlpZiAodmFsKQorCQkJR1BTUjAgfD0gKDEgPDwgR1BTUjBfT0ZGU0VUKHBpbikpOworCQllbHNlCisJCQlHUENSMCB8PSAoMSA8PCBHUENSMF9PRkZTRVQocGluKSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpZiAodmFsKQorCQkJR1BTUjEgfD0gKDEgPDwgR1BTUjFfT0ZGU0VUKHBpbikpOworCQllbHNlCisJCQlHUENSMSB8PSAoMSA8PCBHUENSMV9PRkZTRVQocGluKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidW5pbXBsZW1lbnRlZFxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbWV0cm9ub21lX2luaXRfZ3Bpb19waW4oaW50IHBpbiwgaW50IGRpcikKK3sKKwl1OCBpbmRleDsKKwkvKiBkaXIgMCBpcyBvdXRwdXQsIDEgaXMgaW5wdXQKKwktIGRvIDIgdGhpbmdzIGhlcmU6CisJLSBzZXQgZ3BpbyBhbHRlcm5hdGUgZnVuY3Rpb24gdG8gc3RhbmRhcmQgZ3BpbworCS0gc2V0IGdwaW8gZGlyZWN0aW9uIHRvIGlucHV0IG9yIG91dHB1dCAgKi8KKworCWluZGV4ID0gcGluID4+IDQ7CisJc3dpdGNoIChpbmRleCkgeworCWNhc2UgMToKKwkJR0FGUjBfVSAmPSB+KEFGX1NFTF9HUElPX04gPDwgR0FGUjBfVV9PRkZTRVQocGluKSk7CisKKwkJaWYgKGRpcikKKwkJCUdQRFIwICY9IH4oMSA8PCBwaW4pOworCQllbHNlCisJCQlHUERSMCB8PSAoMSA8PCBwaW4pOworCQlicmVhazsKKwljYXNlIDI6CisJCUdBRlIxX0wgJj0gfihBRl9TRUxfR1BJT19OIDw8IEdBRlIxX0xfT0ZGU0VUKHBpbikpOworCisJCWlmIChkaXIpCisJCQlHUERSMSAmPSB+KDEgPDwgR1BEUjFfT0ZGU0VUKHBpbikpOworCQllbHNlCisJCQlHUERSMSB8PSAoMSA8PCBHUERSMV9PRkZTRVQocGluKSk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJR0FGUjFfVSAmPSB+KEFGX1NFTF9HUElPX04gPDwgR0FGUjFfVV9PRkZTRVQocGluKSk7CisKKwkJaWYgKGRpcikKKwkJCUdQRFIxICY9IH4oMSA8PCBHUERSMV9PRkZTRVQocGluKSk7CisJCWVsc2UKKwkJCUdQRFIxIHw9ICgxIDw8IEdQRFIxX09GRlNFVChwaW4pKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmltcGxlbWVudGVkXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBtZXRyb25vbWVfaW5pdF9ncGlvX3JlZ3Modm9pZCkKK3sKKwltZXRyb25vbWVfaW5pdF9ncGlvX3BpbihMRURfR1BJT19QSU4sIDApOworCW1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoTEVEX0dQSU9fUElOLCAwKTsKKworCW1ldHJvbm9tZV9pbml0X2dwaW9fcGluKFNUREJZX0dQSU9fUElOLCAwKTsKKwltZXRyb25vbWVfc2V0X2dwaW9fb3V0cHV0KFNUREJZX0dQSU9fUElOLCAwKTsKKworCW1ldHJvbm9tZV9pbml0X2dwaW9fcGluKFJTVF9HUElPX1BJTiwgMCk7CisJbWV0cm9ub21lX3NldF9ncGlvX291dHB1dChSU1RfR1BJT19QSU4sIDApOworCisJbWV0cm9ub21lX2luaXRfZ3Bpb19waW4oUkRZX0dQSU9fUElOLCAxKTsKKworCW1ldHJvbm9tZV9pbml0X2dwaW9fcGluKEVSUl9HUElPX1BJTiwgMSk7CisKKwltZXRyb25vbWVfaW5pdF9ncGlvX3BpbihQQ0JQV1JfR1BJT19QSU4sIDApOworCW1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoUENCUFdSX0dQSU9fUElOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbWV0cm9ub21lX2Rpc2FibGVfbGNkX2NvbnRyb2xsZXIoc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyKQoreworCUxDU1IgPSAweGZmZmZmZmZmOwkvKiBDbGVhciBMQ0QgU3RhdHVzIFJlZ2lzdGVyICovCisJTENDUjAgfD0gTENDUjBfRElTOwkvKiBEaXNhYmxlIExDRCBDb250cm9sbGVyICovCisKKwkvKiB3ZSByZXNldCBhbmQganVzdCB3YWl0IGZvciB0aGluZ3MgdG8gc2V0dGxlICovCisJbXNsZWVwKDIwMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZV9lbmFibGVfbGNkX2NvbnRyb2xsZXIoc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyKQoreworCUxDU1IgPSAweGZmZmZmZmZmOworCUZEQURSMCA9IHBhci0+bWV0cm9tZW1fZGVzY19kbWE7CisJTENDUjAgfD0gTENDUjBfRU5COworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbWV0cm9ub21lX2luaXRfbGNkY19yZWdzKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwkvKiBoZXJlIHdlIGRvOgorCS0gZGlzYWJsZSB0aGUgbGNkIGNvbnRyb2xsZXIKKwktIHNldHVwIGxjZCBjb250cm9sIHJlZ2lzdGVycworCS0gc2V0dXAgZG1hIGRlc2NyaXB0b3IKKwktIHJlZW5hYmxlIGxjZCBjb250cm9sbGVyCisJKi8KKworCS8qIGRpc2FibGUgdGhlIGxjZCBjb250cm9sbGVyICovCisJbWV0cm9ub21lX2Rpc2FibGVfbGNkX2NvbnRyb2xsZXIocGFyKTsKKworCS8qIHNldHVwIGxjZCBjb250cm9sIHJlZ2lzdGVycyAqLworCUxDQ1IwID0gTENDUjBfTERNIHwgTENDUjBfU0ZNIHwgTENDUjBfSVVNIHwgTENDUjBfRUZNIHwgTENDUjBfUEFTCisJCXwgTENDUjBfUURNIHwgTENDUjBfQk0gfCBMQ0NSMF9PVU07CisKKwlMQ0NSMSA9IChlcGRfZnJhbWVfdGFibGVbMF0uZncvMiAtIDEpIC8qIHBpeGVscyBwZXIgbGluZSAqLworCQl8ICgyNyA8PCAxMCkgLyogaHN5bmMgcHVsc2Ugd2lkdGggLSAxICovCisJCXwgKDMzIDw8IDE2KSAvKiBlb2wgcGl4ZWwgY291bnQgKi8KKwkJfCAoMzMgPDwgMjQpOyAvKiBib2wgcGl4ZWwgY291bnQgKi8KKworCUxDQ1IyID0gKGVwZF9mcmFtZV90YWJsZVswXS5maCAtIDEpIC8qIGxpbmVzIHBlciBwYW5lbCAqLworCQl8ICgyNCA8PCAxMCkgLyogdnN5bmMgcHVsc2Ugd2lkdGggLSAxICovCisJCXwgKDIgPDwgMTYpIC8qIGVvZiBwaXhlbCBjb3VudCAqLworCQl8ICgwIDw8IDI0KTsgLyogYm9mIHBpeGVsIGNvdW50ICovCisKKwlMQ0NSMyA9IDIgLyogcGl4ZWwgY2xvY2sgZGl2aXNvciAqLworCQl8ICgyNCA8PCA4KSAvKiBBQyBCaWFzIHBpbiBmcmVxICovCisJCXwgTENDUjNfMTZCUFAgLyogQlBQICovCisJCXwgTENDUjNfUENQOyAgLyogUENQIGZhbGxpbmcgZWRnZSAqLworCisJLyogc2V0dXAgZG1hIGRlc2NyaXB0b3IgKi8KKwlwYXItPm1ldHJvbWVtX2Rlc2MtPm1GREFEUjAgPSBwYXItPm1ldHJvbWVtX2Rlc2NfZG1hOworCXBhci0+bWV0cm9tZW1fZGVzYy0+bUZTQURSMCA9IHBhci0+bWV0cm9tZW1fZG1hOworCXBhci0+bWV0cm9tZW1fZGVzYy0+bUZJRFIwID0gMDsKKwlwYXItPm1ldHJvbWVtX2Rlc2MtPm1MRENNRDAgPSBlcGRfZnJhbWVfdGFibGVbMF0uZncKKwkJCQkJKiBlcGRfZnJhbWVfdGFibGVbMF0uZmg7CisJLyogcmVlbmFibGUgbGNkIGNvbnRyb2xsZXIgKi8KKwltZXRyb25vbWVfZW5hYmxlX2xjZF9jb250cm9sbGVyKHBhcik7Cit9CisKK3N0YXRpYyBpbnQgbWV0cm9ub21lX2Rpc3BsYXlfY21kKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwl1MTYgY3M7CisJdTE2IG9wY29kZTsKKwlzdGF0aWMgdTggYm9yZGVydmFsOworCXU4ICpwdHI7CisKKwkvKiBzZXR1cCBkaXNwbGF5IGNvbW1hbmQKKwl3ZSBjYW4ndCBpbW1lZGlhdGVseSBzZXQgdGhlIG9wY29kZSBzaW5jZSB0aGUgY29udHJvbGxlcgorCXdpbGwgdHJ5IHBhcnNlIHRoZSBjb21tYW5kIGJlZm9yZSB3ZSd2ZSBzZXQgaXQgYWxsIHVwCisJc28gd2UganVzdCBzZXQgY3MgaGVyZSBhbmQgc2V0IHRoZSBvcGNvZGUgYXQgdGhlIGVuZCAqLworCisJcHRyID0gcGFyLT5tZXRyb21lbTsKKworCWlmIChwYXItPm1ldHJvbWVtX2NtZC0+b3Bjb2RlID09IDB4Q0M0MCkKKwkJb3Bjb2RlID0gY3MgPSAweENDNDE7CisJZWxzZQorCQlvcGNvZGUgPSBjcyA9IDB4Q0M0MDsKKworCS8qIHNldCB0aGUgYXJncyAoIDIgYnl0ZXMgKSBmb3IgZGlzcGxheSAqLworCWkgPSAwOworCXBhci0+bWV0cm9tZW1fY21kLT5hcmdzW2ldID0gCTEgPDwgMyAvKiBib3JkZXIgdXBkYXRlICovCisJCQkJCXwgKChib3JkZXJ2YWwrKyAlIDQpICYgMHgwRikgPDwgNAorCQkJCQl8IChwYXItPmZyYW1lX2NvdW50IC0gMSkgPDwgODsKKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJLyogdGhlIHJlc3QgYXJlIDAgKi8KKwltZW1zZXQoKHU4ICopIChwYXItPm1ldHJvbWVtX2NtZC0+YXJncyArIGkpLCAwLCAoMzItaSkqMik7CisKKwlwYXItPm1ldHJvbWVtX2NtZC0+Y3N1bSA9IGNzOworCXBhci0+bWV0cm9tZW1fY21kLT5vcGNvZGUgPSBvcGNvZGU7IC8qIGRpc3BsYXkgY21kICovCisKKwlpID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocGFyLT53YWl0cSwgKEdQTFIxICYgMHgwMSksIEhaKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWV0cm9ub21lX3Bvd2VydXBfY21kKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwl1MTYgY3M7CisKKwkvKiBzZXR1cCBwb3dlciB1cCBjb21tYW5kICovCisJcGFyLT5tZXRyb21lbV9jbWQtPm9wY29kZSA9IDB4MTIzNDsgLyogcHdyIHVwIHBzZXVkbyBjbWQgKi8KKwljcyA9IHBhci0+bWV0cm9tZW1fY21kLT5vcGNvZGU7CisKKwkvKiBzZXQgcHdyMSwyLDMgdG8gMTAyNCAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAxMDI0OworCQljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpXTsKKwl9CisKKwkvKiB0aGUgcmVzdCBhcmUgMCAqLworCW1lbXNldCgodTggKikgKHBhci0+bWV0cm9tZW1fY21kLT5hcmdzICsgaSksIDAsICgzMi1pKSoyKTsKKworCXBhci0+bWV0cm9tZW1fY21kLT5jc3VtID0gY3M7CisKKwltc2xlZXAoMSk7CisJbWV0cm9ub21lX3NldF9ncGlvX291dHB1dChSU1RfR1BJT19QSU4sIDEpOworCisJbXNsZWVwKDEpOworCW1ldHJvbm9tZV9zZXRfZ3Bpb19vdXRwdXQoU1REQllfR1BJT19QSU4sIDEpOworCisJaSA9IHdhaXRfZXZlbnRfdGltZW91dChwYXItPndhaXRxLCAoR1BMUjEgJiAweDAxKSwgSFopOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRyb25vbWVfY29uZmlnX2NtZChzdHJ1Y3QgbWV0cm9ub21lZmJfcGFyICpwYXIpCit7CisJaW50IGk7CisJdTE2IGNzOworCisJLyogc2V0dXAgY29uZmlnIGNvbW1hbmQKKwl3ZSBjYW4ndCBpbW1lZGlhdGVseSBzZXQgdGhlIG9wY29kZSBzaW5jZSB0aGUgY29udHJvbGxlcgorCXdpbGwgdHJ5IHBhcnNlIHRoZSBjb21tYW5kIGJlZm9yZSB3ZSd2ZSBzZXQgaXQgYWxsIHVwCisJc28gd2UganVzdCBzZXQgY3MgaGVyZSBhbmQgc2V0IHRoZSBvcGNvZGUgYXQgdGhlIGVuZCAqLworCisJY3MgPSAweENDMTA7CisKKwkvKiBzZXQgdGhlIDEyIGFyZ3MgKCA4IGJ5dGVzICkgZm9yIGNvbmZpZy4gc2VlIHNwZWMgZm9yIG1lYW5pbmdzICovCisJaSA9IDA7CisJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAJMTUgLyogc2RsZXcgKi8KKwkJCQkJfCAyIDw8IDggLyogc2Rvc3ogKi8KKwkJCQkJfCAwIDw8IDExIC8qIHNkb3IgKi8KKwkJCQkJfCAwIDw8IDEyIC8qIHNkY2VzICovCisJCQkJCXwgMCA8PCAxNTsgLyogc2RjZXIgKi8KKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAJNDIgLyogZ2RzcGwgKi8KKwkJCQkJfCAxIDw8IDggLyogZ2RyMSAqLworCQkJCQl8IDEgPDwgOSAvKiBzZHNociAqLworCQkJCQl8IDAgPDwgMTU7IC8qIGdkc3BwICovCisJY3MgKz0gcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaSsrXTsKKworCXBhci0+bWV0cm9tZW1fY21kLT5hcmdzW2ldID0gCTE4IC8qIGdkc3B3ICovCisJCQkJCXwgMCA8PCAxNTsgLyogZGlzcGMgKi8KKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaV0gPSAJNTk5IC8qIHZkbGMgKi8KKwkJCQkJfCAwIDw8IDExIC8qIGRzaSAqLworCQkJCQl8IDAgPDwgMTI7IC8qIGRzaWMgKi8KKwljcyArPSBwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpKytdOworCisJLyogdGhlIHJlc3QgYXJlIDAgKi8KKwltZW1zZXQoKHU4ICopIChwYXItPm1ldHJvbWVtX2NtZC0+YXJncyArIGkpLCAwLCAoMzItaSkqMik7CisKKwlwYXItPm1ldHJvbWVtX2NtZC0+Y3N1bSA9IGNzOworCXBhci0+bWV0cm9tZW1fY21kLT5vcGNvZGUgPSAweENDMTA7IC8qIGNvbmZpZyBjbWQgKi8KKworCWkgPSB3YWl0X2V2ZW50X3RpbWVvdXQocGFyLT53YWl0cSwgKEdQTFIxICYgMHgwMSksIEhaKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWV0cm9ub21lX2luaXRfY21kKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwl1MTYgY3M7CisKKwkvKiBzZXR1cCBpbml0IGNvbW1hbmQKKwl3ZSBjYW4ndCBpbW1lZGlhdGVseSBzZXQgdGhlIG9wY29kZSBzaW5jZSB0aGUgY29udHJvbGxlcgorCXdpbGwgdHJ5IHBhcnNlIHRoZSBjb21tYW5kIGJlZm9yZSB3ZSd2ZSBzZXQgaXQgYWxsIHVwCisJc28gd2UganVzdCBzZXQgY3MgaGVyZSBhbmQgc2V0IHRoZSBvcGNvZGUgYXQgdGhlIGVuZCAqLworCisJY3MgPSAweENDMjA7CisKKwkvKiBzZXQgdGhlIGFyZ3MgKCAyIGJ5dGVzICkgZm9yIGluaXQgKi8KKwlpID0gMDsKKwlwYXItPm1ldHJvbWVtX2NtZC0+YXJnc1tpXSA9IDA7CisJY3MgKz0gcGFyLT5tZXRyb21lbV9jbWQtPmFyZ3NbaSsrXTsKKworCS8qIHRoZSByZXN0IGFyZSAwICovCisJbWVtc2V0KCh1OCAqKSAocGFyLT5tZXRyb21lbV9jbWQtPmFyZ3MgKyBpKSwgMCwgKDMyLWkpKjIpOworCisJcGFyLT5tZXRyb21lbV9jbWQtPmNzdW0gPSBjczsKKwlwYXItPm1ldHJvbWVtX2NtZC0+b3Bjb2RlID0gMHhDQzIwOyAvKiBpbml0IGNtZCAqLworCisJaSA9IHdhaXRfZXZlbnRfdGltZW91dChwYXItPndhaXRxLCAoR1BMUjEgJiAweDAxKSwgSFopOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRyb25vbWVfaW5pdF9yZWdzKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhcikKK3sKKwlpbnQgcmVzOworCisJbWV0cm9ub21lX2luaXRfZ3Bpb19yZWdzKCk7CisJbWV0cm9ub21lX2luaXRfbGNkY19yZWdzKHBhcik7CisKKwlyZXMgPSBtZXRyb25vbWVfcG93ZXJ1cF9jbWQocGFyKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJcmVzID0gbWV0cm9ub21lX2NvbmZpZ19jbWQocGFyKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJcmVzID0gbWV0cm9ub21lX2luaXRfY21kKHBhcik7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZWZiX2RweV91cGRhdGUoc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyKQoreworCXUxNiBja3N1bTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSAodW5zaWduZWQgY2hhciBfX2ZvcmNlICopcGFyLT5pbmZvLT5zY3JlZW5fYmFzZTsKKworCS8qIGNvcHkgZnJvbSB2bSB0byBtZXRyb21lbSAqLworCW1lbWNweShwYXItPm1ldHJvbWVtX2ltZywgYnVmLCBEUFlfVypEUFlfSCk7CisKKwlja3N1bSA9IGNhbGNfaW1nX2Nrc3VtKCh1MTYgKikgcGFyLT5tZXRyb21lbV9pbWcsCisJCQkJKGVwZF9mcmFtZV90YWJsZVswXS5mdyAqIERQWV9IKS8yKTsKKwkqKCh1MTYgKikgKHBhci0+bWV0cm9tZW1faW1nKSArCisJCQkoZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3ICogRFBZX0gpLzIpID0gY2tzdW07CisJbWV0cm9ub21lX2Rpc3BsYXlfY21kKHBhcik7Cit9CisKK3N0YXRpYyB1MTYgbWV0cm9ub21lZmJfZHB5X3VwZGF0ZV9wYWdlKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciwgaW50IGluZGV4KQoreworCWludCBpOworCXUxNiBjc3VtID0gMDsKKwl1MTYgKmJ1ZiA9ICh1MTYgX19mb3JjZSAqKSAocGFyLT5pbmZvLT5zY3JlZW5fYmFzZSArIGluZGV4KTsKKwl1MTYgKmltZyA9ICh1MTYgKikgKHBhci0+bWV0cm9tZW1faW1nICsgaW5kZXgpOworCisJLyogc3dpenpsZSBmcm9tIHZtIHRvIG1ldHJvbWVtIGFuZCByZWNhbGMgY2tzdW0gYXQgdGhlIHNhbWUgdGltZSovCisJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRS8yOyBpKyspIHsKKwkJKihpbWcgKyBpKSA9IChidWZbaV0gPDwgNSkgJiAweEUwRTA7CisJCWNzdW0gKz0gKihpbWcgKyBpKTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKKy8qIHRoaXMgaXMgY2FsbGVkIGJhY2sgZnJvbSB0aGUgZGVmZXJyZWQgaW8gd29ya3F1ZXVlICovCitzdGF0aWMgdm9pZCBtZXRyb25vbWVmYl9kcHlfZGVmZXJyZWRfaW8oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCit7CisJdTE2IGNrc3VtOworCXN0cnVjdCBwYWdlICpjdXI7CisJc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvID0gaW5mby0+ZmJkZWZpbzsKKwlzdHJ1Y3QgbWV0cm9ub21lZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwkvKiB3YWxrIHRoZSB3cml0dGVuIHBhZ2UgbGlzdCBhbmQgc3dpenpsZSB0aGUgZGF0YSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmZmJkZWZpby0+cGFnZWxpc3QsIGxydSkgeworCQlja3N1bSA9IG1ldHJvbm9tZWZiX2RweV91cGRhdGVfcGFnZShwYXIsCisJCQkJCShjdXItPmluZGV4IDw8IFBBR0VfU0hJRlQpKTsKKwkJcGFyLT5tZXRyb21lbV9pbWdfY3N1bSAtPSBwYXItPmNzdW1fdGFibGVbY3VyLT5pbmRleF07CisJCXBhci0+Y3N1bV90YWJsZVtjdXItPmluZGV4XSA9IGNrc3VtOworCQlwYXItPm1ldHJvbWVtX2ltZ19jc3VtICs9IGNrc3VtOworCX0KKworCW1ldHJvbm9tZV9kaXNwbGF5X2NtZChwYXIpOworfQorCitzdGF0aWMgdm9pZCBtZXRyb25vbWVmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJc3RydWN0IG1ldHJvbm9tZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCW1ldHJvbm9tZWZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgbWV0cm9ub21lZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWNmYl9jb3B5YXJlYShpbmZvLCBhcmVhKTsKKwltZXRyb25vbWVmYl9kcHlfdXBkYXRlKHBhcik7Cit9CisKK3N0YXRpYyB2b2lkIG1ldHJvbm9tZWZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCW1ldHJvbm9tZWZiX2RweV91cGRhdGUocGFyKTsKK30KKworLyoKKyAqIHRoaXMgaXMgdGhlIHNsb3cgcGF0aCBmcm9tIHVzZXJzcGFjZS4gdGhleSBjYW4gc2VlayBhbmQgd3JpdGUgdG8KKyAqIHRoZSBmYi4gaXQgaXMgYmFzZWQgb24gZmJfc3lzX3dyaXRlCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1ldHJvbm9tZWZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKwl2b2lkICpkc3Q7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gLUVQRVJNOworCisJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCWlmIChwID4gdG90YWxfc2l6ZSkKKwkJcmV0dXJuIC1FRkJJRzsKKworCWlmIChjb3VudCA+IHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVGQklHOworCQljb3VudCA9IHRvdGFsX3NpemU7CisJfQorCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpIHsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSAtRU5PU1BDOworCisJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisJfQorCisJZHN0ID0gKHZvaWQgX19mb3JjZSAqKSAoaW5mby0+c2NyZWVuX2Jhc2UgKyBwKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihkc3QsIGJ1ZiwgY291bnQpKQorCQllcnIgPSAtRUZBVUxUOworCisJaWYgICghZXJyKQorCQkqcHBvcyArPSBjb3VudDsKKworCW1ldHJvbm9tZWZiX2RweV91cGRhdGUocGFyKTsKKworCXJldHVybiAoZXJyKSA/IGVyciA6IGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBtZXRyb25vbWVmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl93cml0ZQk9IG1ldHJvbm9tZWZiX3dyaXRlLAorCS5mYl9maWxscmVjdAk9IG1ldHJvbm9tZWZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IG1ldHJvbm9tZWZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBtZXRyb25vbWVmYl9pbWFnZWJsaXQsCit9OworCitzdGF0aWMgc3RydWN0IGZiX2RlZmVycmVkX2lvIG1ldHJvbm9tZWZiX2RlZmlvID0geworCS5kZWxheQkJPSBIWiwKKwkuZGVmZXJyZWRfaW8JPSBtZXRyb25vbWVmYl9kcHlfZGVmZXJyZWRfaW8sCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbWV0cm9ub21lX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2lkOworCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGFyLT53YWl0cSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRyb25vbWVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IHZpZGVvbWVtb3J5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyICp2aWRlb21lbW9yeTsKKwlzdHJ1Y3QgbWV0cm9ub21lZmJfcGFyICpwYXI7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwlpbnQgY21kX3NpemUsIHdmbV9zaXplLCBpbWdfc2l6ZSwgcGFkZGluZ19zaXplLCB0b3RhbHNpemU7CisJaW50IGk7CisKKwkvKiB3ZSBoYXZlIHR3byBibG9ja3Mgb2YgbWVtb3J5LgorCWluZm8tPnNjcmVlbl9iYXNlIHdoaWNoIGlzIHZtLCBhbmQgaXMgdGhlIGZiIHVzZWQgYnkgYXBwcy4KKwlwYXItPm1ldHJvbWVtIHdoaWNoIGlzIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgYW5kCisJY29udGFpbnMgdGhlIGRpc3BsYXkgY29udHJvbGxlciBjb21tYW5kcywgd2F2ZWZvcm0sCisJcHJvY2Vzc2VkIGltYWdlIGRhdGEgYW5kIHBhZGRpbmcuIHRoaXMgaXMgdGhlIGRhdGEgcHVsbGVkCisJYnkgdGhlIHB4YTI1NSdzIExDRCBjb250cm9sbGVyIGFuZCBwdXNoZWQgdG8gTWV0cm9ub21lICovCisKKwl2aWRlb21lbW9yeXNpemUgPSAoRFBZX1cqRFBZX0gpOworCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghdmlkZW9tZW1vcnkpCisJCXJldHVybiByZXR2YWw7CisKKwltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7CisKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXRyb25vbWVmYl9wYXIpLCAmZGV2LT5kZXYpOworCWlmICghaW5mbykKKwkJZ290byBlcnJfdmZyZWU7CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyIF9faW9tZW0gKikgdmlkZW9tZW1vcnk7CisJaW5mby0+ZmJvcHMgPSAmbWV0cm9ub21lZmJfb3BzOworCisJaW5mby0+dmFyID0gbWV0cm9ub21lZmJfdmFyOworCWluZm8tPmZpeCA9IG1ldHJvbm9tZWZiX2ZpeDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSB2aWRlb21lbW9yeXNpemU7CisJcGFyID0gaW5mby0+cGFyOworCXBhci0+aW5mbyA9IGluZm87CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT53YWl0cSk7CisKKwkvKiB0aGlzIHRhYmxlIGNhY2hlcyBwZXIgcGFnZSBjc3VtIHZhbHVlcy4gKi8KKwlwYXItPmNzdW1fdGFibGUgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZS9QQUdFX1NJWkUpOworCWlmICghcGFyLT5jc3VtX3RhYmxlKQorCQlnb3RvIGVycl9jc3VtX3RhYmxlOworCisJLyogdGhlIG1ldHJvbWVtIGJ1ZmZlciBpcyBkaXZpZGVkIGFzIGZvbGxvd3M6CisJY29tbWFuZCB8IENSQyB8IHBhZGRpbmcKKwkxNmtiIHdhdmVmb3JtIGRhdGEgfCBDUkMgfCBwYWRkaW5nCisJaW1hZ2UgZGF0YSB8IENSQworCWFuZCBhbiBleHRyYSAyNTYgYnl0ZXMgZm9yIGRtYSBkZXNjcmlwdG9ycworCWVnOiBJVz04MzIgSUg9NjIyIFdTPTEyOAorCSovCisKKwljbWRfc2l6ZSA9IDEgKiBlcGRfZnJhbWVfdGFibGVbMF0uZnc7CisJd2ZtX3NpemUgPSAoKDE2KjEwMjQgKyAyICsgZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3IC0gMSkKKwkJCS8gZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3KSAqIGVwZF9mcmFtZV90YWJsZVswXS5mdzsKKwlpbWdfc2l6ZSA9IGVwZF9mcmFtZV90YWJsZVswXS5maCAqIGVwZF9mcmFtZV90YWJsZVswXS5mdzsKKwlwYWRkaW5nX3NpemUgPSA0ICogZXBkX2ZyYW1lX3RhYmxlWzBdLmZ3OworCXRvdGFsc2l6ZSA9IGNtZF9zaXplICsgd2ZtX3NpemUgKyBpbWdfc2l6ZSArIHBhZGRpbmdfc2l6ZTsKKwlwYXItPm1ldHJvbWVtc2l6ZSA9IFBBR0VfQUxJR04odG90YWxzaXplICsgMjU2KTsKKwlEUFJJTlRLKCJkZXNpcmVkIG1lbW9yeSBzaXplID0gJWRcbiIsIHBhci0+bWV0cm9tZW1zaXplKTsKKwlkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZ1bGw7CisJcGFyLT5tZXRyb21lbSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoJmRldi0+ZGV2LCBwYXItPm1ldHJvbWVtc2l6ZSwKKwkJCQkJCSZwYXItPm1ldHJvbWVtX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXItPm1ldHJvbWVtKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIm1ldHJvbm9tZWZiOiB1bmFibGUgdG8gYWxsb2NhdGUgZG1hIGJ1ZmZlclxuIik7CisJCWdvdG8gZXJyX3ZmcmVlOworCX0KKworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gcGFyLT5tZXRyb21lbV9kbWE7CisJcGFyLT5tZXRyb21lbV9jbWQgPSAoc3RydWN0IG1ldHJvbWVtX2NtZCAqKSBwYXItPm1ldHJvbWVtOworCXBhci0+bWV0cm9tZW1fd2ZtID0gcGFyLT5tZXRyb21lbSArIGNtZF9zaXplOworCXBhci0+bWV0cm9tZW1faW1nID0gcGFyLT5tZXRyb21lbSArIGNtZF9zaXplICsgd2ZtX3NpemU7CisJcGFyLT5tZXRyb21lbV9pbWdfY3N1bSA9ICh1MTYgKikgKHBhci0+bWV0cm9tZW1faW1nICsKKwkJCQkJKGVwZF9mcmFtZV90YWJsZVswXS5mdyAqIERQWV9IKSk7CisJRFBSSU5USygiaW1nIG9mZnNldD0weCV4XG4iLCBjbWRfc2l6ZSArIHdmbV9zaXplKTsKKwlwYXItPm1ldHJvbWVtX2Rlc2MgPSAoc3RydWN0IG1ldHJvbWVtX2Rlc2MgKikgKHBhci0+bWV0cm9tZW0gKyBjbWRfc2l6ZQorCQkJCQkrIHdmbV9zaXplICsgaW1nX3NpemUgKyBwYWRkaW5nX3NpemUpOworCXBhci0+bWV0cm9tZW1fZGVzY19kbWEgPSBwYXItPm1ldHJvbWVtX2RtYSArIGNtZF9zaXplICsgd2ZtX3NpemUKKwkJCQkgKyBpbWdfc2l6ZSArIHBhZGRpbmdfc2l6ZTsKKworCS8qIGxvYWQgdGhlIHdhdmVmb3JtIGluLiBhc3N1bWUgbW9kZSAzLCB0ZW1wIDMxIGZvciBub3cgKi8KKwkvKiAJYSkgcmVxdWVzdCB0aGUgd2F2ZWZvcm0gZmlsZSBmcm9tIHVzZXJzcGFjZQorCQliKSBwcm9jZXNzIHdhdmVmb3JtIGFuZCBkZWNvZGUgaW50byBtZXRyb21lbSAqLworCisJcmV0dmFsID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJ3YXZlZm9ybS53YmYiLCAmZGV2LT5kZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWV0cm9ub21lZmI6IGNvdWxkbid0IGdldCB3YXZlZm9ybVxuIik7CisJCWdvdG8gZXJyX2RtYV9mcmVlOworCX0KKworCXJldHZhbCA9IGxvYWRfd2F2ZWZvcm0oKHU4ICopIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSwKKwkJCQlwYXItPm1ldHJvbWVtX3dmbSwgMywgMzEsICZwYXItPmZyYW1lX2NvdW50KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1ldHJvbm9tZWZiOiBjb3VsZG4ndCBwcm9jZXNzIHdhdmVmb3JtXG4iKTsKKwkJZ290byBlcnJfbGRfd2ZtOworCX0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKElSUV9HUElPKFJEWV9HUElPX1BJTiksIG1ldHJvbm9tZV9oYW5kbGVfaXJxLAorCQkJCUlSUUZfRElTQUJMRUQsICJNZXRyb25vbWUiLCBpbmZvKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0dmFsKTsKKwkJZ290byBlcnJfbGRfd2ZtOworCX0KKwlzZXRfaXJxX3R5cGUoSVJRX0dQSU8oUkRZX0dQSU9fUElOKSwgSVJRVF9GQUxMSU5HKTsKKworCXJldHZhbCA9IG1ldHJvbm9tZV9pbml0X3JlZ3MocGFyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisKKwlpbmZvLT5mYmRlZmlvID0gJm1ldHJvbm9tZWZiX2RlZmlvOworCWZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7CisKKwlyZXR2YWwgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCA4LCAwKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvcm1hcFxuIik7CisJCWdvdG8gZXJyX2ZiX3JlbDsKKwl9CisKKwkvKiBzZXQgY21hcCAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWluZm8tPmNtYXAucmVkW2ldID0gKCgoMippKSsxKSooMHhGRkZGKSkvMTY7CisJbWVtY3B5KGluZm8tPmNtYXAuZ3JlZW4sIGluZm8tPmNtYXAucmVkLCBzaXplb2YodTE2KSo4KTsKKwltZW1jcHkoaW5mby0+Y21hcC5ibHVlLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqOCk7CisKKwlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnJfY21hcDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJmYiVkOiBNZXRyb25vbWUgZnJhbWUgYnVmZmVyIGRldmljZSwgdXNpbmcgJWRLIG9mIHZpZGVvIgorCQkiIG1lbW9yeVxuIiwgaW5mby0+bm9kZSwgdmlkZW9tZW1vcnlzaXplID4+IDEwKTsKKworCXJldHVybiAwOworCitlcnJfY21hcDoKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworZXJyX2ZiX3JlbDoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKElSUV9HUElPKFJEWV9HUElPX1BJTiksIGluZm8pOworZXJyX2xkX3dmbToKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKK2Vycl9kbWFfZnJlZToKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJmRldi0+ZGV2LCBwYXItPm1ldHJvbWVtc2l6ZSwgcGFyLT5tZXRyb21lbSwKKwkJCQlwYXItPm1ldHJvbWVtX2RtYSk7CitlcnJfY3N1bV90YWJsZToKKwl2ZnJlZShwYXItPmNzdW1fdGFibGUpOworZXJyX3ZmcmVlOgorCXZmcmVlKHZpZGVvbWVtb3J5KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtZXRyb25vbWVmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCXN0cnVjdCBtZXRyb25vbWVmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKKwkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZkZXYtPmRldiwgcGFyLT5tZXRyb21lbXNpemUsCisJCQkJCXBhci0+bWV0cm9tZW0sIHBhci0+bWV0cm9tZW1fZG1hKTsKKwkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKwkJdmZyZWUocGFyLT5jc3VtX3RhYmxlKTsKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJdmZyZWUoKHZvaWQgX19mb3JjZSAqKWluZm8tPnNjcmVlbl9iYXNlKTsKKwkJZnJlZV9pcnEoSVJRX0dQSU8oUkRZX0dQSU9fUElOKSwgaW5mbyk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXRyb25vbWVmYl9kcml2ZXIgPSB7CisJLnByb2JlCT0gbWV0cm9ub21lZmJfcHJvYmUsCisJLnJlbW92ZSA9IG1ldHJvbm9tZWZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtZXRyb25vbWVmYiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptZXRyb25vbWVmYl9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG1ldHJvbm9tZWZiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtZXRyb25vbWVmYl9lbmFibGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiVXNlIG1ldHJvbm9tZWZiX2VuYWJsZSB0byBlbmFibGUgdGhlIGRldmljZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtZXRyb25vbWVmYl9kcml2ZXIpOworCWlmICghcmV0KSB7CisJCW1ldHJvbm9tZWZiX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibWV0cm9ub21lZmIiLCAwKTsKKwkJaWYgKG1ldHJvbm9tZWZiX2RldmljZSkKKwkJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobWV0cm9ub21lZmJfZGV2aWNlKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT01FTTsKKworCQlpZiAocmV0KSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1ldHJvbm9tZWZiX2RldmljZSk7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWV0cm9ub21lZmJfZHJpdmVyKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtZXRyb25vbWVmYl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWV0cm9ub21lZmJfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWV0cm9ub21lZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX3BhcmFtKG1ldHJvbm9tZWZiX2VuYWJsZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1ldHJvbm9tZWZiX2VuYWJsZSwgIkVuYWJsZSBjb21tdW5pY2F0aW9uIHdpdGggTWV0cm9ub21lIik7CisKK21vZHVsZV9pbml0KG1ldHJvbm9tZWZiX2luaXQpOworbW9kdWxlX2V4aXQobWV0cm9ub21lZmJfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiZmJkZXYgZHJpdmVyIGZvciBNZXRyb25vbWUgY29udHJvbGxlciIpOworTU9EVUxFX0FVVEhPUigiSmF5YSBLdW1hciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwppbmRleCA3NDUxN2IxLi41OTY2NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJcGFyLT5wbV9zdGF0ZSA9IG1lc2cuZXZlbnQ7CiAKLQlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7CisJaWYgKG1lc2cuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkgewogCQlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIAkJbnZpZGlhZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCBpbmZvKTsKIAkJbnZpZGlhX3dyaXRlX3JlZ3MocGFyLCAmcGFyLT5TYXZlZFJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwppbmRleCA2YTNkMGI1Li44Yzg2M2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKQEAgLTEsMTYgKzEsMTIgQEAKLS8qIGRyaXZlcnMvdmlkZW8vcHZyMmZiLmMKKy8qCisgKiBkcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCiAgKgogICogRnJhbWUgYnVmZmVyIGFuZCBmYmNvbiBzdXBwb3J0IGZvciB0aGUgTkVDIFBvd2VyVlIyIGZvdW5kIHdpdGhpbiB0aGUgU2VnYQogICogRHJlYW1jYXN0LgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMSBNLiBSLiBCcm93biA8bXJicm93bkAweGQ2Lm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDAxIC0gMjAwOCAgUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4KICAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXhEQyBwcm9qZWN0IChsaW51eGRjLnNvdXJjZWZvcmdlLm5ldCkuCi0gKgotICovCi0KLS8qCiAgKiBUaGlzIGRyaXZlciBpcyBtb3N0bHkgYmFzZWQgb24gdGhlIGV4Y2VsbGVudCBhbWlmYiBhbmQgdmZiIHNvdXJjZXMuICBJdCB1c2VzCiAgKiBhbiBvZGQgc2NoZW1lIGZvciBjb252ZXJ0aW5nIGhhcmR3YXJlIHZhbHVlcyB0by9mcm9tIGZyYW1lYnVmZmVyIHZhbHVlcywKICAqIGhlcmUgYXJlIHNvbWUgaGFja2VkLXVwIGZvcm11bGFzOgpAQCAtNDkwLDcgKzQ4Niw3IEBACiAJfSBlbHNlIHsKIAkJdmFyLT5zeW5jICY9IH5GQl9TWU5DX0JST0FEQ0FTVDsKIAkJdmFyLT52bW9kZSAmPSB+RkJfVk1PREVfSU5URVJMQUNFRDsKLQkJdmFyLT52bW9kZSB8PSBwdnIyX3Zhci52bW9kZTsKKwkJdmFyLT52bW9kZSB8PSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOwogCX0KIAogCWlmICgodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX01BU0spICE9IEZCX0FDVElWQVRFX1RFU1QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCAxMGY5MTJkLi43NTc2NTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9iaXRmaWVsZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CiAKQEAgLTEwNDYsNyArMTA0Nyw3IEBACiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIENQVUZSRVFfQURKVVNUOgogCWNhc2UgQ1BVRlJFUV9JTkNPTVBBVElCTEU6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtaW4gZG1hIHBlcmlvZDogJWQgcHMsICIKKwkJcHJfZGVidWcoIm1pbiBkbWEgcGVyaW9kOiAlZCBwcywgIgogCQkJIm5ldyBjbG9jayAlZCBrSHpcbiIsIHB4YWZiX2Rpc3BsYXlfZG1hX3BlcmlvZCh2YXIpLAogCQkJcG9saWN5LT5tYXgpOwogCQkvLyBUT0RPOiBmaWxsIGluIG1pbi9tYXggdmFsdWVzCkBAIC0xMzYxLDcgKzEzNjIsNyBAQAogfQogI2VuZGlmCiAKLWludCBfX2luaXQgcHhhZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgcHhhZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBweGFmYl9pbmZvICpmYmk7CiAJc3RydWN0IHB4YWZiX21hY2hfaW5mbyAqaW5mOwpAQCAtMTQ4Niw3ICsxNDg3LDcgQEAKIH07CiAKICNpZm5kZWYgTU9EVUxFCi1pbnQgX19kZXZpbml0IHB4YWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBweGFmYl9zZXR1cChjaGFyICpvcHRpb25zKQogewogIyBpZmRlZiBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMKIAlpZiAob3B0aW9ucykKQEAgLTE1MDEsNyArMTUwMiw3IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotaW50IF9fZGV2aW5pdCBweGFmYl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBweGFmYl9pbml0KHZvaWQpCiB7CiAjaWZuZGVmIE1PRFVMRQogCWNoYXIgKm9wdGlvbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NidXNsaWIuYyBiL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5jCmluZGV4IDk2M2E0NTQuLjRkZWFhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KICNpbmNsdWRlIDxhc20vZmJpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwppbmRleCBlODNkZmJhLi43NDJiNWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwpAQCAtMjM3LDEyICsyMzcsMTQgQEAKIAogCS8qIGNoZWNrIHdlIGNhbiBmaXQgdGhlc2UgdmFsdWVzIGludG8gdGhlIHJlZ2lzdGVycyAqLwogCi0JaWYgKHZhci0+aHN5bmNfbGVuID4gMjU1IHx8IHZhci0+dnN5bmNfbGVuID4gMjU1KQorCWlmICh2YXItPmhzeW5jX2xlbiA+IDI1NSB8fCB2YXItPnZzeW5jX2xlbiA+IDYzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgodmFyLT54cmVzICsgdmFyLT5yaWdodF9tYXJnaW4pID49IDQwOTYpCisJLyogaGRpc3BsYXkgZW5kIGFuZCBoc3luYyBzdGFydCAqLworCWlmICgodmFyLT54cmVzICsgdmFyLT5yaWdodF9tYXJnaW4pID4gNDA5NikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiB2ZGlzcGxheSBlbmQgYW5kIHZzeW5jIHN0YXJ0ICovCiAJaWYgKCh2YXItPnlyZXMgKyB2YXItPmxvd2VyX21hcmdpbikgPiAyMDQ4KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjgxLDE5ICsyODMsMjEgQEAKIAkJdmFyLT5ibHVlLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CiAJCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOwogCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQJPSAwOwogCiAJCWJyZWFrOwogCiAJY2FzZSAxNjoKIAkJaWYgKHNtLT5wZGF0YS0+ZmxhZ3MgJiBTTTUwMV9GQlBEX1NXQVBfRkJfRU5ESUFOKSB7Ci0JCQl2YXItPnJlZC5vZmZzZXQJCT0gMTE7Ci0JCQl2YXItPmdyZWVuLm9mZnNldAk9IDU7Ci0JCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKLQkJfSBlbHNlIHsKIAkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAxMTsKIAkJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gNTsKIAkJCXZhci0+cmVkLm9mZnNldAkJPSAwOworCQl9IGVsc2UgeworCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDExOworCQkJdmFyLT5ncmVlbi5vZmZzZXQJPSA1OworCQkJdmFyLT5ibHVlLm9mZnNldAk9IDA7CiAJCX0KKwkJdmFyLT50cmFuc3Aub2Zmc2V0CT0gMDsKIAogCQl2YXItPnJlZC5sZW5ndGgJCT0gNTsKIAkJdmFyLT5ncmVlbi5sZW5ndGgJPSA2OwpAQCAtMzk3LDcgKzQwMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSAxNjoKLQkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUjsKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKQEAgLTYxMyw2ICs2MTcsNyBAQAogCiAJY2FzZSAxNjoKIAkJY29udHJvbCB8PSBTTTUwMV9EQ19DUlRfQ09OVFJPTF8xNkJQUDsKKwkJc201MDFmYl9zZXR1cF9nYW1tYShmYmksIFNNNTAxX0RDX0NSVF9QQUxFVFRFKTsKIAkJYnJlYWs7CiAKIAljYXNlIDMyOgpAQCAtNzUwLDYgKzc1NSw3IEBACiAKIAljYXNlIDE2OgogCQljb250cm9sIHw9IFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfMTZCUFA7CisJCXNtNTAxZmJfc2V0dXBfZ2FtbWEoZmJpLCBTTTUwMV9EQ19QQU5FTF9QQUxFVFRFKTsKIAkJYnJlYWs7CiAKIAljYXNlIDMyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zdGlmYi5jIGIvZHJpdmVycy92aWRlby9zdGlmYi5jCmluZGV4IGU3YzhkYjIuLmY5OGJlMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3RpZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMKQEAgLTUwNSwxNiArNTA1LDI0IEBACiBzdGF0aWMgdm9pZAogcmF0dGxlclNldHVwUGxhbmVzKHN0cnVjdCBzdGlmYl9pbmZvICpmYikKIHsKKwlpbnQgc2F2ZWRfaWQsIHk7CisKKyAJLyogV3JpdGUgUkFNREFDIHBpeGVsIHJlYWQgbWFzayByZWdpc3RlciBzbyBhbGwgb3ZlcmxheQorCSAqIHBsYW5lcyBhcmUgZGlzcGxheS1lbmFibGVkLiAgKENSWDI0IHVzZXMgQnQ0NjIgcGl4ZWwKKwkgKiByZWFkIG1hc2sgcmVnaXN0ZXIgZm9yIG92ZXJsYXkgcGxhbmVzLCBub3QgaW1hZ2UgcGxhbmVzKS4KKwkgKi8KIAlDUlgyNF9TRVRVUF9SQU1EQUMoZmIpOwogICAgIAotCS8qIHJlcGxhY2VtZW50IGZvcjogU0VUVVBfRkIoZmIsIENSWDI0X09WRVJMQVlfUExBTkVTKTsgKi8KLQlXUklURV9XT1JEKDB4ODMwMDAzMDAsIGZiLCBSRUdfMTQpOwotCVNFVFVQX0hXKGZiKTsKLQlXUklURV9CWVRFKDEsIGZiLCBSRUdfMTZiMSk7CisJLyogY2hhbmdlIGZiLT5pZCB0ZW1wb3JhcmlseSB0byBmb29sIFNFVFVQX0ZCKCkgKi8KKwlzYXZlZF9pZCA9IGZiLT5pZDsKKwlmYi0+aWQgPSBDUlgyNF9PVkVSTEFZX1BMQU5FUzsKKwlTRVRVUF9GQihmYik7CisJZmItPmlkID0gc2F2ZWRfaWQ7CiAKLQlmYl9tZW1zZXQoKHZvaWQqKWZiLT5pbmZvLmZpeC5zbWVtX3N0YXJ0LCAweGZmLAotCQlmYi0+aW5mby52YXIueXJlcypmYi0+aW5mby5maXgubGluZV9sZW5ndGgpOwotICAgIAorCWZvciAoeSA9IDA7IHkgPCBmYi0+aW5mby52YXIueXJlczsgKyt5KQorCQltZW1zZXQoZmItPmluZm8uc2NyZWVuX2Jhc2UgKyB5ICogZmItPmluZm8uZml4LmxpbmVfbGVuZ3RoLAorCQkJMHhmZiwgZmItPmluZm8udmFyLnhyZXMgKiBmYi0+aW5mby52YXIuYml0c19wZXJfcGl4ZWwvOCk7CisKIAlDUlgyNF9TRVRfT1ZMWV9NQVNLKGZiKTsKIAlTRVRVUF9GQihmYik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RyaWRlbnRmYi5jIGIvZHJpdmVycy92aWRlby90cmlkZW50ZmIuYwppbmRleCA3MGZiNGVlLi4wYTRlMDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RyaWRlbnRmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdHJpZGVudGZiLmMKQEAgLTU2NCw3ICs1NjQsNyBAQAogCXRfb3V0Yih2YWwsIDB4M0NGKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9tbWlvKHZvaWQpCitzdGF0aWMgdm9pZCBlbmFibGVfbW1pbyh2b2lkKQogewogCS8qIEdvdG8gTmV3IE1vZGUgKi8KIAlvdXRiKDB4MEIsIDB4M0M0KTsKQEAgLTU3OSw2ICs1NzksMjEgQEAKIAlvdXRiKGluYigweDNENSkgfCAweDAxLCAweDNENSk7CiB9CiAKK3N0YXRpYyB2b2lkIGRpc2FibGVfbW1pbyh2b2lkKQoreworCS8qIEdvdG8gTmV3IE1vZGUgKi8KKwl0X291dGIoMHgwQiwgMHgzQzQpOworCXRfaW5iKDB4M0M1KTsKKworCS8qIFVucHJvdGVjdCByZWdpc3RlcnMgKi8KKwl0X291dGIoTmV3TW9kZTEsIDB4M0M0KTsKKwl0X291dGIoMHg4MCwgMHgzQzUpOworCisJLyogRGlzYWJsZSBNTUlPICovCisJdF9vdXRiKFBDSVJlZywgMHgzRDQpOworCXRfb3V0Yih0X2luYigweDNENSkgJiB+MHgwMSwgMHgzRDUpOworfQorCiAjZGVmaW5lIGNydGNfdW5sb2NrKCkJd3JpdGUzWDQoQ1JUVlN5bmNFbmQsIHJlYWQzWDQoQ1JUVlN5bmNFbmQpICYgMHg3RikKIAogLyogIFJldHVybiBmbGF0IHBhbmVsJ3MgbWF4aW11bSB4IHJlc29sdXRpb24gKi8KQEAgLTczMCw3ICs3NDUsNyBAQAogCQkJc3dpdGNoICh0bXApIHsKIAogCQkJY2FzZSAweDAxOgotCQkJCWsgPSA1MTI7CisJCQkJayA9IDUxMiAqIEtiOwogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAyOgogCQkJCWsgPSA2ICogTWI7CS8qIFhQICovCkBAIC0xMjM5LDkgKzEyNTQsOSBAQAogCWRlZmF1bHRfcGFyLmlvX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUodHJpZGVudGZiX2ZpeC5tbWlvX3N0YXJ0LCB0cmlkZW50ZmJfZml4Lm1taW9fbGVuKTsKIAogCWlmICghZGVmYXVsdF9wYXIuaW9fdmlydCkgewotCQlyZWxlYXNlX3JlZ2lvbih0cmlkZW50ZmJfZml4Lm1taW9fc3RhcnQsIHRyaWRlbnRmYl9maXgubW1pb19sZW4pOwogCQlkZWJ1ZygiaW9yZW1hcCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTE7CisJCWVyciA9IC0xOworCQlnb3RvIG91dF91bm1hcDE7CiAJfQogCiAJZW5hYmxlX21taW8oKTsKQEAgLTEyNTIsMjUgKzEyNjcsMjEgQEAKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHRyaWRlbnRmYl9maXguc21lbV9zdGFydCwgdHJpZGVudGZiX2ZpeC5zbWVtX2xlbiwgInRyaWRlbnRmYiIpKSB7CiAJCWRlYnVnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIVxuIik7CisJCWRpc2FibGVfbW1pbygpOwogCQllcnIgPSAtMTsKLQkJZ290byBvdXRfdW5tYXA7CisJCWdvdG8gb3V0X3VubWFwMTsKIAl9CiAKIAlmYl9pbmZvLnNjcmVlbl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHRyaWRlbnRmYl9maXguc21lbV9zdGFydCwKIAkJCQkJICAgICAgdHJpZGVudGZiX2ZpeC5zbWVtX2xlbik7CiAKIAlpZiAoIWZiX2luZm8uc2NyZWVuX2Jhc2UpIHsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHRyaWRlbnRmYl9maXguc21lbV9zdGFydCwgdHJpZGVudGZiX2ZpeC5zbWVtX2xlbik7CiAJCWRlYnVnKCJpb3JlbWFwIGZhaWxlZFxuIik7CiAJCWVyciA9IC0xOwotCQlnb3RvIG91dF91bm1hcDsKKwkJZ290byBvdXRfdW5tYXAyOwogCX0KIAogCW91dHB1dCgiJXMgYm9hcmQgZm91bmRcbiIsIHBjaV9uYW1lKGRldikpOwotI2lmIDAKLQlvdXRwdXQoIlRyaWRlbnQgYm9hcmQgZm91bmQgOiBtZW0gPSAlWCwgaW8gPSAlWCwgbWVtX3YgPSAlWCwgaW9fdiA9ICVYXG4iLAotCQl0cmlkZW50ZmJfZml4LnNtZW1fc3RhcnQsIHRyaWRlbnRmYl9maXgubW1pb19zdGFydCwgZmJfaW5mby5zY3JlZW5fYmFzZSwgZGVmYXVsdF9wYXIuaW9fdmlydCk7Ci0jZW5kaWYKIAlkaXNwbGF5dHlwZSA9IGdldF9kaXNwbGF5dHlwZSgpOwogCiAJaWYgKGZsYXRwYW5lbCkKQEAgLTEyODgsOSArMTI5OSwxMiBAQAogCiAJaWYgKCFmYl9maW5kX21vZGUoJmRlZmF1bHRfdmFyLCAmZmJfaW5mbywgbW9kZSwgTlVMTCwgMCwgTlVMTCwgYnBwKSkgewogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF91bm1hcDsKKwkJZ290byBvdXRfdW5tYXAyOwogCX0KLQlmYl9hbGxvY19jbWFwKCZmYl9pbmZvLmNtYXAsIDI1NiwgMCk7CisJZXJyID0gZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAyNTYsIDApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF91bm1hcDI7CisKIAlpZiAoZGVmYXVsdGFjY2VsICYmIGFjYykKIAkJZGVmYXVsdF92YXIuYWNjZWxfZmxhZ3MgfD0gRkJfQUNDRUxGX1RFWFQ7CiAJZWxzZQpAQCAtMTMwMCwxOSArMTMxNCwyNCBAQAogCWZiX2luZm8uZGV2aWNlID0gJmRldi0+ZGV2OwogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidHJpZGVudGZiOiBjb3VsZCBub3QgcmVnaXN0ZXIgVHJpZGVudCBmcmFtZWJ1ZmZlclxuIik7CisJCWZiX2RlYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwKTsKIAkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXRfdW5tYXA7CisJCWdvdG8gb3V0X3VubWFwMjsKIAl9CiAJb3V0cHV0KCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlICVkeCVkLSVkYnBwXG4iLAogCSAgIGZiX2luZm8ubm9kZSwgZmJfaW5mby5maXguaWQsIGRlZmF1bHRfdmFyLnhyZXMsCiAJICAgZGVmYXVsdF92YXIueXJlcywgZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwpOwogCXJldHVybiAwOwogCi1vdXRfdW5tYXA6Ci0JaWYgKGRlZmF1bHRfcGFyLmlvX3ZpcnQpCi0JCWlvdW5tYXAoZGVmYXVsdF9wYXIuaW9fdmlydCk7CitvdXRfdW5tYXAyOgogCWlmIChmYl9pbmZvLnNjcmVlbl9iYXNlKQogCQlpb3VubWFwKGZiX2luZm8uc2NyZWVuX2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbih0cmlkZW50ZmJfZml4LnNtZW1fc3RhcnQsIHRyaWRlbnRmYl9maXguc21lbV9sZW4pOworCWRpc2FibGVfbW1pbygpOworb3V0X3VubWFwMToKKwlpZiAoZGVmYXVsdF9wYXIuaW9fdmlydCkKKwkJaW91bm1hcChkZWZhdWx0X3Bhci5pb192aXJ0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24odHJpZGVudGZiX2ZpeC5tbWlvX3N0YXJ0LCB0cmlkZW50ZmJfZml4Lm1taW9fbGVuKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzIzLDcgKzEzNDIsNyBAQAogCWlvdW5tYXAocGFyLT5pb192aXJ0KTsKIAlpb3VubWFwKGZiX2luZm8uc2NyZWVuX2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbih0cmlkZW50ZmJfZml4LnNtZW1fc3RhcnQsIHRyaWRlbnRmYl9maXguc21lbV9sZW4pOwotCXJlbGVhc2VfcmVnaW9uKHRyaWRlbnRmYl9maXgubW1pb19zdGFydCwgdHJpZGVudGZiX2ZpeC5tbWlvX2xlbik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHRyaWRlbnRmYl9maXgubW1pb19zdGFydCwgdHJpZGVudGZiX2ZpeC5tbWlvX2xlbik7CiB9CiAKIC8qIExpc3Qgb2YgYm9hcmRzIHRoYXQgd2UgYXJlIHRyeWluZyB0byBzdXBwb3J0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCmluZGV4IGJlMjdiOWMuLjkzMzYxNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCkBAIC00NCw3ICs0NCw3IEBACiAKIHN0YXRpYyBpbnQgbXRycgkJX19kZXZpbml0ZGF0YSA9IDM7IC8qIGVuYWJsZSBtdHJyIGJ5IGRlZmF1bHQgKi8KIHN0YXRpYyBpbnQgYmxhbmsJPSAxOwkJICAgLyogZW5hYmxlIGJsYW5raW5nIGJ5IGRlZmF1bHQgKi8KLXN0YXRpYyBpbnQgeXBhbgkJX19kZXZpbml0ZGF0YSA9IDE7IC8qIDA6IHNjcm9sbCwgMTogeXBhbiwgMjogeXdyYXAgKi8KK3N0YXRpYyBpbnQgeXBhbgkJPSAxOyAJCSAvKiAwOiBzY3JvbGwsIDE6IHlwYW4sIDI6IHl3cmFwICovCiBzdGF0aWMgaW50IHBtaV9zZXRwYWwJX19kZXZpbml0ZGF0YSA9IDE7IC8qIHVzZSBQTUkgZm9yIHBhbGV0dGUgY2hhbmdlcyAqLwogc3RhdGljIGludCBub2NydGMJX19kZXZpbml0ZGF0YTsgLyogaWdub3JlIENSVEMgc2V0dGluZ3MgKi8KIHN0YXRpYyBpbnQgbm9lZGlkCV9fZGV2aW5pdGRhdGE7IC8qIGRvbid0IHRyeSBEREMgdHJhbnNmZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwppbmRleCBjOGE0MzMyLi4wYjNlZmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXdha2VfdXAoJnZiLT5jb25maWdfY2hhbmdlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdG93YXJkc190YXJnZXQoc3RydWN0IHZpcnRpb19iYWxsb29uICp2YikKK3N0YXRpYyBpbmxpbmUgczY0IHRvd2FyZHNfdGFyZ2V0KHN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIpCiB7CiAJdTMyIHY7CiAJX192aXJ0aW9fY29uZmlnX3ZhbCh2Yi0+dmRldiwKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJc2V0X2ZyZWV6YWJsZSgpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWludCBkaWZmOworCQlzNjQgZGlmZjsKIAogCQl0cnlfdG9fZnJlZXplKCk7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh2Yi0+Y29uZmlnX2NoYW5nZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCAyNmY3ODdkLi5jMGRmOTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC0zNyw3ICszNyw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAKIAkvKiB0aGUgSU8gbWFwcGluZyBmb3IgdGhlIFBDSSBjb25maWcgc3BhY2UgKi8KLQl2b2lkICppb2FkZHI7CisJdm9pZCBfX2lvbWVtICppb2FkZHI7CiAKIAkvKiBhIGxpc3Qgb2YgcXVldWVzIHNvIHdlIGNhbiBkaXNwYXRjaCBJUlFzICovCiAJc3BpbmxvY2tfdCBsb2NrOwpAQCAtMTExLDcgKzExMSw3IEBACiAJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbGVuKQogewogCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOwotCXZvaWQgKmlvYWRkciA9IHZwX2Rldi0+aW9hZGRyICsgVklSVElPX1BDSV9DT05GSUcgKyBvZmZzZXQ7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB2cF9kZXYtPmlvYWRkciArIFZJUlRJT19QQ0lfQ09ORklHICsgb2Zmc2V0OwogCXU4ICpwdHIgPSBidWY7CiAJaW50IGk7CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQkgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbikKIHsKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2ZGV2KTsKLQl2b2lkICppb2FkZHIgPSB2cF9kZXYtPmlvYWRkciArIFZJUlRJT19QQ0lfQ09ORklHICsgb2Zmc2V0OworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdnBfZGV2LT5pb2FkZHIgKyBWSVJUSU9fUENJX0NPTkZJRyArIG9mZnNldDsKIAljb25zdCB1OCAqcHRyID0gYnVmOwogCWludCBpOwogCkBAIC0xNzcsNiArMTc3LDcgQEAKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IG9wYXF1ZTsKIAlzdHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvICppbmZvOwogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggaXNyOwogCiAJLyogcmVhZGluZyB0aGUgSVNSIGhhcyB0aGUgZWZmZWN0IG9mIGFsc28gY2xlYXJpbmcgaXQgc28gaXQncyB2ZXJ5CkBAIC0xOTcsMTIgKzE5OCwxMiBAQAogCQkJZHJ2LT5jb25maWdfY2hhbmdlZCgmdnBfZGV2LT52ZGV2KTsKIAl9CiAKLQlzcGluX2xvY2soJnZwX2Rldi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwX2Rldi0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5mbywgJnZwX2Rldi0+dmlydHF1ZXVlcywgbm9kZSkgewogCQlpZiAodnJpbmdfaW50ZXJydXB0KGlycSwgaW5mby0+dnEpID09IElSUV9IQU5ETEVEKQogCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJfQotCXNwaW5fdW5sb2NrKCZ2cF9kZXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwX2Rldi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxNCw2ICsyMTUsNyBAQAogCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOwogCXN0cnVjdCB2aXJ0aW9fcGNpX3ZxX2luZm8gKmluZm87CiAJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgbnVtOwogCWludCBlcnI7CiAKQEAgLTI1NSw5ICsyNTcsOSBAQAogCXZxLT5wcml2ID0gaW5mbzsKIAlpbmZvLT52cSA9IHZxOwogCi0Jc3Bpbl9sb2NrKCZ2cF9kZXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cF9kZXYtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZCgmaW5mby0+bm9kZSwgJnZwX2Rldi0+dmlydHF1ZXVlcyk7Ci0Jc3Bpbl91bmxvY2soJnZwX2Rldi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gdnE7CiAKQEAgLTI3NCwxMCArMjc2LDExIEBACiB7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodnEtPnZkZXYpOwogCXN0cnVjdCB2aXJ0aW9fcGNpX3ZxX2luZm8gKmluZm8gPSB2cS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZ2cF9kZXYtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cF9kZXYtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmaW5mby0+bm9kZSk7Ci0Jc3Bpbl91bmxvY2soJnZwX2Rldi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7CiAKIAl2cmluZ19kZWxfdmlydHF1ZXVlKHZxKTsKIApAQCAtMzg1LDYgKzM4OCw3IEBACiB7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKKwl1bnJlZ2lzdGVyX3ZpcnRpb19kZXZpY2UoJnZwX2Rldi0+dmRldik7CiAJZnJlZV9pcnEocGNpX2Rldi0+aXJxLCB2cF9kZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKIAlwY2lfaW91bm1hcChwY2lfZGV2LCB2cF9kZXYtPmlvYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCAzYTI4YzEzLi5jMmZhNWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTIxNCwxMCArMjE0LDcgQEAKIHsKIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwogCi0JU1RBUlRfVVNFKHZxKTsKLQlCVUdfT04odnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKTsKIAl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzIHw9IFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUOwotCUVORF9VU0UodnEpOwogfQogCiBzdGF0aWMgYm9vbCB2cmluZ19lbmFibGVfY2Ioc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQpAQCAtMjMyLDcgKzIyOSw2IEBACiAJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7CiAJbWIoKTsKIAlpZiAodW5saWtlbHkobW9yZV91c2VkKHZxKSkpIHsKLQkJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyB8PSBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKIAkJRU5EX1VTRSh2cSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCmluZGV4IDY4OGU0MzUuLjEwMjExZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RzMXdtLmg+CiAKQEAgLTEwMiwxMiArMTAzLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZHMxd21fd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEsIHUzMiByZWcsCiAJCQkJCXU4IHZhbCkKIHsKLSAgICAgICAgX19yYXdfd3JpdGViKHZhbCwgZHMxd21fZGF0YS0+bWFwICsgKHJlZyA8PCBkczF3bV9kYXRhLT5idXNfc2hpZnQpKTsKKwlfX3Jhd193cml0ZWIodmFsLCBkczF3bV9kYXRhLT5tYXAgKyAocmVnIDw8IGRzMXdtX2RhdGEtPmJ1c19zaGlmdCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHU4IGRzMXdtX3JlYWRfcmVnaXN0ZXIoc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEsIHUzMiByZWcpCiB7Ci0gICAgICAgIHJldHVybiBfX3Jhd19yZWFkYihkczF3bV9kYXRhLT5tYXAgKyAocmVnIDw8IGRzMXdtX2RhdGEtPmJ1c19zaGlmdCkpOworCXJldHVybiBfX3Jhd19yZWFkYihkczF3bV9kYXRhLT5tYXAgKyAocmVnIDw8IGRzMXdtX2RhdGEtPmJ1c19zaGlmdCkpOwogfQogCiAKQEAgLTE0OSw4ICsxNTAsOCBAQAogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyZXNldF9kb25lLCBEUzFXTV9USU1FT1VUKTsKIAlkczF3bV9kYXRhLT5yZXNldF9jb21wbGV0ZSA9IE5VTEw7CiAJaWYgKCF0aW1lbGVmdCkgewotICAgICAgICAgICAgICAgIGRldl9kYmcoJmRzMXdtX2RhdGEtPnBkZXYtPmRldiwgInJlc2V0IGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7CisJCWRldl9lcnIoJmRzMXdtX2RhdGEtPnBkZXYtPmRldiwgInJlc2V0IGZhaWxlZFxuIik7CisJCXJldHVybiAxOwogCX0KIAogCS8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIHJlc2V0LiBBY2NvcmRpbmcgdG8gdGhlIHNwZWNzLCB0aGUgdGltZQpAQCAtMTY3LDExICsxNjgsMTEgQEAKIAkJKGRzMXdtX2RhdGEtPmFjdGl2ZV9oaWdoID8gRFMxV01fSU5URU5fSUFTIDogMCkpOwogCiAJaWYgKCFkczF3bV9kYXRhLT5zbGF2ZV9wcmVzZW50KSB7Ci0gICAgICAgICAgICAgICAgZGV2X2RiZygmZHMxd21fZGF0YS0+cGRldi0+ZGV2LCAicmVzZXQ6IG5vIGRldmljZXMgZm91bmRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9CisJCWRldl9kYmcoJmRzMXdtX2RhdGEtPnBkZXYtPmRldiwgInJlc2V0OiBubyBkZXZpY2VzIGZvdW5kXG4iKTsKKwkJcmV0dXJuIDE7CisJfQogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRzMXdtX3dyaXRlKHN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhLCB1OCBkYXRhKQpAQCAtMzM0LDcgKzMzNSw3IEBACiAJaWYgKCFwZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRzMXdtX2RhdGEgPSBremFsbG9jKHNpemVvZiAoKmRzMXdtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlkczF3bV9kYXRhID0ga3phbGxvYyhzaXplb2YoKmRzMXdtX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRzMXdtX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNzQsOCArMzc1LDggQEAKIAkJZ290byBlcnIxOwogCiAJZHMxd21fZGF0YS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZHMxd20iKTsKLQlpZiAoIWRzMXdtX2RhdGEtPmNsaykgewotCQlyZXQgPSAtRU5PRU5UOworCWlmIChJU19FUlIoZHMxd21fZGF0YS0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzMXdtX2RhdGEtPmNsayk7CiAJCWdvdG8gZXJyMjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBhZmNkYzY5Li4yNTRkMTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC00MDIsNiArNDAyLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpdDg3MTJmX3dkdC4KIAorY29uZmlnIEhQX1dBVENIRE9HCisJdHJpc3RhdGUgIkhQIFByb2xpYW50IGlMTyAyIEhhcmR3YXJlIFdhdGNoZG9nIFRpbWVyIgorCWRlcGVuZHMgb24gWDg2CisJaGVscAorCSAgQSBzb2Z0d2FyZSBtb25pdG9yaW5nIHdhdGNoZG9nIGFuZCBOTUkgc291cmNpbmcgZHJpdmVyLiBUaGlzIGRyaXZlcgorCSAgd2lsbCBkZXRlY3QgbG9ja3VwcyBhbmQgcHJvdmlkZSBzdGFjayB0cmFjZS4gQWxzbywgd2hlbiBhbiBOTUkKKwkgIG9jY3VycyB0aGlzIGRyaXZlciB3aWxsIG1ha2UgdGhlIG5lY2Vzc2FyeSBCSU9TIGNhbGxzIHRvIGxvZworCSAgdGhlIGNhdXNlIG9mIHRoZSBOTUkuIFRoaXMgaXMgYSBkcml2ZXIgdGhhdCB3aWxsIG9ubHkgbG9hZCBvbiBhCisJICBIUCBQcm9MaWFudCBzeXN0ZW0gd2l0aCBhIG1pbmltdW0gb2YgaUxPMiBzdXBwb3J0LgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaHB3ZHQuCisKIGNvbmZpZyBTQzEyMDBfV0RUCiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IChhbGEgU0MxMjAwKSBXYXRjaGRvZyIKIAlkZXBlbmRzIG9uIFg4NgpAQCAtNjMzLDYgKzY0NSwxOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcm05a193ZHQuCiAKK2NvbmZpZyBTSUJZVEVfV0RPRworCXRyaXN0YXRlICJTaWJ5dGUgU29DIGhhcmR3YXJlIHdhdGNoZG9nIgorCWRlcGVuZHMgb24gQ1BVX1NCMQorCWhlbHAKKwkgIFdhdGNoZG9nIGRyaXZlciBmb3IgdGhlIGJ1aWx0IGluIHdhdGNoZG9nIGhhcmR3YXJlIGluIFNpYnl0ZQorCSAgU29DIHByb2Nlc3NvcnMuICBUaGVyZSBhcmUgYXBwYXJlbnRseSB0d28gd2F0Y2hkb2cgdGltZXJzCisJICBvbiBzdWNoIHByb2Nlc3NvcnM7IHRoaXMgZHJpdmVyIHN1cHBvcnRzIG9ubHkgdGhlIGZpcnN0IG9uZSwKKwkgIGJlY2F1c2UgY3VycmVudGx5IExpbnV4IG9ubHkgc3VwcG9ydHMgZXhwb3J0aW5nIG9uZSB3YXRjaGRvZworCSAgdG8gdXNlcnNwYWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbG9hZGFibGUgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYl93ZG9nLgorCiBjb25maWcgQVI3X1dEVAogCXRyaXN0YXRlICJUSSBBUjcgV2F0Y2hkb2cgVGltZXIiCiAJZGVwZW5kcyBvbiBBUjcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IGViYzIxMTQuLmYzZmIxNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtNjcsNiArNjcsNyBAQAogb2JqLSQoQ09ORklHX0k2MzAwRVNCX1dEVCkgKz0gaTYzMDBlc2Iubwogb2JqLSQoQ09ORklHX0lUQ09fV0RUKSArPSBpVENPX3dkdC5vIGlUQ09fdmVuZG9yX3N1cHBvcnQubwogb2JqLSQoQ09ORklHX0lUODcxMkZfV0RUKSArPSBpdDg3MTJmX3dkdC5vCitvYmotJChDT05GSUdfSFBfV0FUQ0hET0cpICs9IGhwd2R0Lm8KIG9iai0kKENPTkZJR19TQzEyMDBfV0RUKSArPSBzYzEyMDB3ZHQubwogb2JqLSQoQ09ORklHX1NDeDIwMF9XRFQpICs9IHNjeDIwMF93ZHQubwogb2JqLSQoQ09ORklHX1BDODc0MTNfV0RUKSArPSBwYzg3NDEzX3dkdC5vCkBAIC05Miw2ICs5Myw3IEBACiBvYmotJChDT05GSUdfSU5EWURPRykgKz0gaW5keWRvZy5vCiBvYmotJChDT05GSUdfV0RUX01UWDEpCSs9IG10eC0xX3dkdC5vCiBvYmotJChDT05GSUdfV0RUX1JNOUtfR1BJKSArPSBybTlrX3dkdC5vCitvYmotJChDT05GSUdfU0lCWVRFX1dET0cpICs9IHNiX3dkb2cubwogb2JqLSQoQ09ORklHX0FSN19XRFQpICs9IGFyN193ZHQubwogb2JqLSQoQ09ORklHX1RYWDlfV0RUKSArPSB0eHg5d2R0Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jCmluZGV4IGZiNWVkNjQuLmFlMGZjYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMKQEAgLTQxOCw2ICs0MTgsOSBAQAogI2RlZmluZSBhdDMyX3dkdF9yZXN1bWUgTlVMTAogI2VuZGlmCiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdDMyX3dkdCIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDMyX3dkdF9kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcChhdDMyX3dkdF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gYXQzMl93ZHRfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYwppbmRleCBhNjg0YjFlLi45ZmY5YTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hdDkxcm05MjAwX3dkdC5jCkBAIC0yODYsMyArMjg2LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiV2F0Y2hkb2cgZHJpdmVyIGZvciBBdG1lbCBBVDkxUk05MjAwIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF0OTFfd2R0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2JmaW5fd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2JmaW5fd2R0LmMKaW5kZXggNDcyYmUxMC4uMTIzNzExMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYmZpbl93ZHQuYwpAQCAtMjksNiArMjksNyBAQAogCiAjZGVmaW5lIHN0YW1wKGZtdCwgYXJncy4uLikgcHJfZGVidWcoIiVzOiVpOiAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sICMjIGFyZ3MpCiAjZGVmaW5lIHN0YW1waXQoKSBzdGFtcCgiaGVyZSBpIGFtIikKKyNkZWZpbmUgcHJfaW5pdChmbXQsIGFyZ3MuLi4pICh7IHN0YXRpYyBjb25zdCBfX2luaXRkYXRhIGNoYXIgX19mbXRbXSA9IGZtdDsgcHJpbnRrKF9fZm10LCAjIyBhcmdzKTsgfSkKIAogI2RlZmluZSBXQVRDSERPR19OQU1FICJiZmluLXdkdCIKICNkZWZpbmUgUEZYIFdBVENIRE9HX05BTUUgIjogIgpAQCAtNDQ1LDE5ICs0NDYsMTkgQEAKIAogCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmYmZpbl93ZHRfbm90aWZpZXIpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKKwkJcHJfaW5pdChLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmYmZpbl93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJfaW5pdChLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkgICAgICAgV0FUQ0hET0dfTUlOT1IsIHJldCk7CiAJCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZiZmluX3dkdF9ub3RpZmllcik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImluaXRpYWxpemVkOiB0aW1lb3V0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAorCXByX2luaXQoS0VSTl9JTkZPIFBGWCAiaW5pdGlhbGl6ZWQ6IHRpbWVvdXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCiAJICAgICAgIHRpbWVvdXQsIG5vd2F5b3V0KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jcHU1d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2NwdTV3ZHQuYwppbmRleCA1OTQxY2E2Li5kZjcyZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2NwdTV3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2NwdTV3ZHQuYwpAQCAtNTksOSArNTksOSBAQAogCiBzdGF0aWMgc3RydWN0IHsKIAlzdHJ1Y3QgY29tcGxldGlvbiBzdG9wOwotCXZvbGF0aWxlIGludCBydW5uaW5nOworCWludCBydW5uaW5nOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXZvbGF0aWxlIGludCBxdWV1ZTsKKwlpbnQgcXVldWU7CiAJaW50IGRlZmF1bHRfdGlja3M7CiAJdW5zaWduZWQgbG9uZyBpbnVzZTsKIH0gY3B1NXdkdF9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKaW5kZXggYTYxY2JkNC4uMTc4MmM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwpAQCAtMjQ4LDYgKzI0OCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0Zm9ybV93ZHRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIndhdGNoZG9nIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSBkYXZpbmNpX3dkdF9wcm9iZSwKIAkucmVtb3ZlID0gZGF2aW5jaV93ZHRfcmVtb3ZlLApAQCAtMjc3LDMgKzI3OCw0IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d2F0Y2hkb2ciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDgzZDEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCkBAIC0wLDAgKzEsNzYwIEBACisvKgorICoJSFAgV2F0Y2hEb2cgRHJpdmVyCisgKgliYXNlZCBvbgorICoKKyAqCVNvZnREb2cJMC4wNToJQSBTb2Z0d2FyZSBXYXRjaGRvZyBEZXZpY2UKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDcgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCVRob21hcyBNaW5nYXJlbGxpIDx0aG9tYXMubWluZ2FyZWxsaUBocC5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCXZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2RtaS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgorCisjZGVmaW5lIFBDSV9CSU9TMzJfU0RfVkFMVUUJCTB4NUYzMjMzNUYJLyogIl8zMl8iICovCisjZGVmaW5lIENSVV9CSU9TX1NJR05BVFVSRV9WQUxVRQkweDU1NTI0MzI0CisjZGVmaW5lIFBDSV9CSU9TMzJfUEFSQUdSQVBIX0xFTgkxNgorI2RlZmluZSBQQ0lfUk9NX0JBU0UxCQkJMHgwMDBGMDAwMAorI2RlZmluZSBST01fU0laRQkJCTB4MTAwMDAKKworc3RydWN0IGJpb3MzMl9zZXJ2aWNlX2RpciB7CisJdTMyIHNpZ25hdHVyZTsKKwl1MzIgZW50cnlfcG9pbnQ7CisJdTggcmV2aXNpb247CisJdTggbGVuZ3RoOworCXU4IGNoZWNrc3VtOworCXU4IHJlc2VydmVkWzVdOworfTsKKworLyogdHlwZSAyMTIgKi8KK3N0cnVjdCBzbWJpb3NfY3J1NjRfaW5mbyB7CisJdTggdHlwZTsKKwl1OCBieXRlX2xlbmd0aDsKKwl1MTYgaGFuZGxlOworCXUzMiBzaWduYXR1cmU7CisJdTY0IHBoeXNpY2FsX2FkZHJlc3M7CisJdTMyIGRvdWJsZV9sZW5ndGg7CisJdTMyIGRvdWJsZV9vZmZzZXQ7Cit9OworI2RlZmluZSBTTUJJT1NfQ1JVNjRfSU5GT1JNQVRJT04JMjEyCisKK3N0cnVjdCBjbW5fcmVnaXN0ZXJzIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCByYWw7CisJCQl1OCByYWg7CisJCQl1MTYgcmVhMjsKKwkJfTsKKwkJdTMyIHJlYXg7CisJfSB1MTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCByYmw7CisJCQl1OCByYmg7CisJCQl1OCByZWIybDsKKwkJCXU4IHJlYjJoOworCQl9OworCQl1MzIgcmVieDsKKwl9IHUyOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IHJjbDsKKwkJCXU4IHJjaDsKKwkJCXUxNiByZWMyOworCQl9OworCQl1MzIgcmVjeDsKKwl9IHUzOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IHJkbDsKKwkJCXU4IHJkaDsKKwkJCXUxNiByZWQyOworCQl9OworCQl1MzIgcmVkeDsKKwl9IHU0OworCisJdTMyIHJlc2k7CisJdTMyIHJlZGk7CisJdTE2IHJkczsKKwl1MTYgcmVzOworCXUzMiByZWZsYWdzOworfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgREVGQVVMVF9NQVJHSU4JMzAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc29mdF9tYXJnaW4gPSBERUZBVUxUX01BUkdJTjsJLyogaW4gc2Vjb25kcyAqLworc3RhdGljIHVuc2lnbmVkIGludCByZWxvYWQ7CQkJLyogdGhlIGNvbXB1dGVkIHNvZnRfbWFyZ2luICovCitzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CitzdGF0aWMgY2hhciBleHBlY3RfcmVsZWFzZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwd2R0X2lzX29wZW47CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBjaV9tZW1fYWRkcjsJCS8qIHRoZSBQQ0ktbWVtb3J5IGFkZHJlc3MgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmhwd2R0X3RpbWVyX3JlZzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmhwd2R0X3RpbWVyX2NvbjsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhyb21fbG9jayk7CisKK3N0YXRpYyB2b2lkICpjcnVfcm9tX2FkZHI7CisKK3N0YXRpYyBzdHJ1Y3QgY21uX3JlZ2lzdGVycyBjbW5fcmVnczsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwd2R0X2RldmljZXNbXSA9IHsKKwl7CisJIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0NPTVBBUSwKKwkgLmRldmljZSA9IDB4QjIwMywKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCX0sCisJezB9LAkJCS8qIHRlcm1pbmF0ZSBsaXN0ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwd2R0X2RldmljZXMpOworCisjaWZuZGVmIENPTkZJR19YODZfNjQKKy8qIC0tMzIgQml0IEJpb3MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBIUFdEVF9BUkNICTMyCisKK3N0YXRpYyB2b2lkIGFzbWlubGluZV9jYWxsKHN0cnVjdCBjbW5fcmVnaXN0ZXJzICpwaTg2UmVncywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKnBSb21FbnRyeSkKK3sKKwlhc20oInB1c2hsICAgICAgICVlYnAgICAgICAgICAgICAgICBcblx0IgorCSAgICAibW92bCAgICAgICAgJWVzcCwgJWVicCAgICAgICAgIFxuXHQiCisJICAgICJwdXNoYSAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkgICAgInB1c2hmICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCSAgICAicHVzaCAgICAgICAgJWVzICAgICAgICAgICAgICAgIFxuXHQiCisJICAgICJwdXNoICAgICAgICAlZHMgICAgICAgICAgICAgICAgXG5cdCIKKwkgICAgInBvcCAgICAgICAgICVlcyAgICAgICAgICAgICAgICBcblx0IgorCSAgICAibW92bCAgICAgICAgOCglZWJwKSwlZWF4ICAgICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgICA0KCVlYXgpLCVlYnggICAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgIDgoJWVheCksJWVjeCAgICAgICBcblx0IgorCSAgICAibW92bCAgICAgICAgMTIoJWVheCksJWVkeCAgICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgICAxNiglZWF4KSwlZXNpICAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgIDIwKCVlYXgpLCVlZGkgICAgICBcblx0IgorCSAgICAibW92bCAgICAgICAgKCVlYXgpLCVlYXggICAgICAgIFxuXHQiCisJICAgICJwdXNoICAgICAgICAlY3MgICAgICAgICAgICAgICAgXG5cdCIKKwkgICAgImNhbGwgICAgICAgICoxMiglZWJwKSAgICAgICAgICBcblx0IgorCSAgICAicHVzaGYgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJICAgICJwdXNobCAgICAgICAlZWF4ICAgICAgICAgICAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgIDgoJWVicCksJWVheCAgICAgICBcblx0IgorCSAgICAibW92bCAgICAgICAgJWVieCw0KCVlYXgpICAgICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgICAlZWN4LDgoJWVheCkgICAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgICVlZHgsMTIoJWVheCkgICAgICBcblx0IgorCSAgICAibW92bCAgICAgICAgJWVzaSwxNiglZWF4KSAgICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgICAlZWRpLDIwKCVlYXgpICAgICAgXG5cdCIKKwkgICAgIm1vdncgICAgICAgICVkcywyNCglZWF4KSAgICAgICBcblx0IgorCSAgICAibW92dyAgICAgICAgJWVzLDI2KCVlYXgpICAgICAgIFxuXHQiCisJICAgICJwb3BsICAgICAgICAlZWJ4ICAgICAgICAgICAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgICVlYngsKCVlYXgpICAgICAgICBcblx0IgorCSAgICAicG9wbCAgICAgICAgJWVieCAgICAgICAgICAgICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgICAlZWJ4LDI4KCVlYXgpICAgICAgXG5cdCIKKwkgICAgInBvcCAgICAgICAgICVlcyAgICAgICAgICAgICAgICBcblx0IgorCSAgICAicG9wZiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJICAgICJwb3BhICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkgICAgImxlYXZlICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAicmV0Iik7Cit9CisKKy8qCisgKgljcnVfZGV0ZWN0CisgKgorICoJUm91dGluZSBEZXNjcmlwdGlvbjoKKyAqCVRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgMzItYml0IEJJT1MgU2VydmljZSBEaXJlY3RvcnkgcmVjb3JkIHRvCisgKglzZWFyY2ggZm9yIGEgJENSVSByZWNvcmQuCisgKgorICoJUmV0dXJuIFZhbHVlOgorICoJMCAgICAgICAgOiAgU1VDQ0VTUworICoJPDAgICAgICAgOiAgRkFJTFVSRQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjcnVfZGV0ZWN0KHVuc2lnbmVkIGxvbmcgbWFwX2VudHJ5LAorCXVuc2lnbmVkIGxvbmcgbWFwX29mZnNldCkKK3sKKwl2b2lkICpiaW9zMzJfbWFwOworCXVuc2lnbmVkIGxvbmcgKmJpb3MzMl9lbnRyeXBvaW50OworCXVuc2lnbmVkIGxvbmcgY3J1X3BoeXNpY2FsX2FkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBjcnVfbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgcGh5c2ljYWxfYmlvc19iYXNlID0gMDsKKwl1bnNpZ25lZCBsb25nIHBoeXNpY2FsX2Jpb3Nfb2Zmc2V0ID0gMDsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKworCWJpb3MzMl9tYXAgPSBpb3JlbWFwKG1hcF9lbnRyeSwgKDIgKiBQQUdFX1NJWkUpKTsKKworCWlmIChiaW9zMzJfbWFwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJYmlvczMyX2VudHJ5cG9pbnQgPSBiaW9zMzJfbWFwICsgbWFwX29mZnNldDsKKworCWNtbl9yZWdzLnUxLnJlYXggPSBDUlVfQklPU19TSUdOQVRVUkVfVkFMVUU7CisKKwlhc21pbmxpbmVfY2FsbCgmY21uX3JlZ3MsIGJpb3MzMl9lbnRyeXBvaW50KTsKKworCWlmIChjbW5fcmVncy51MS5yYWwgIT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiaHB3ZHQ6IENhbGwgc3VjY2VlZGVkIGJ1dCB3aXRoIGFuIGVycm9yOiAweCV4XG4iLAorCQkgICAgICAgY21uX3JlZ3MudTEucmFsKTsKKwl9IGVsc2UgeworCQlwaHlzaWNhbF9iaW9zX2Jhc2UgPSBjbW5fcmVncy51Mi5yZWJ4OworCQlwaHlzaWNhbF9iaW9zX29mZnNldCA9IGNtbl9yZWdzLnU0LnJlZHg7CisJCWNydV9sZW5ndGggPSBjbW5fcmVncy51My5yZWN4OworCQljcnVfcGh5c2ljYWxfYWRkcmVzcyA9CisJCSAgICBwaHlzaWNhbF9iaW9zX2Jhc2UgKyBwaHlzaWNhbF9iaW9zX29mZnNldDsKKworCQkvKiBJZiB0aGUgdmFsdWVzIGxvb2sgT0ssIHRoZW4gbWFwIGl0IGluLiAqLworCQlpZiAoKHBoeXNpY2FsX2Jpb3NfYmFzZSArIHBoeXNpY2FsX2Jpb3Nfb2Zmc2V0KSkgeworCQkJY3J1X3JvbV9hZGRyID0KKwkJCSAgICBpb3JlbWFwKGNydV9waHlzaWNhbF9hZGRyZXNzLCBjcnVfbGVuZ3RoKTsKKwkJCWlmIChjcnVfcm9tX2FkZHIpCisJCQkJcmV0dmFsID0gMDsKKwkJfQorCisJCXByaW50ayhLRVJOX0RFQlVHICJocHdkdDogQ1JVIEJhc2UgQWRkcmVzczogICAweCVseFxuIiwKKwkJCXBoeXNpY2FsX2Jpb3NfYmFzZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJocHdkdDogQ1JVIE9mZnNldCBBZGRyZXNzOiAweCVseFxuIiwKKwkJCXBoeXNpY2FsX2Jpb3Nfb2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImhwd2R0OiBDUlUgTGVuZ3RoOiAgICAgICAgIDB4JWx4XG4iLAorCQkJY3J1X2xlbmd0aCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJocHdkdDogQ1JVIE1hcHBlZCBBZGRyZXNzOiAweCV4XG4iLAorCQkJKHVuc2lnbmVkIGludCkmY3J1X3JvbV9hZGRyKTsKKwl9CisJaW91bm1hcChiaW9zMzJfbWFwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICoJYmlvc19jaGVja3N1bQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiaW9zX2NoZWNrc3VtKGNvbnN0IGNoYXIgX19pb21lbSAqcHRyLCBpbnQgbGVuKQoreworCWNoYXIgc3VtID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogY2FsY3VsYXRlIGNoZWNrc3VtIG9mIHNpemUgYnl0ZXMuIFRoaXMgc2hvdWxkIGFkZCB1cAorCSAqIHRvIHplcm8gaWYgd2UgaGF2ZSBhIHZhbGlkIGhlYWRlci4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXN1bSArPSBwdHJbaV07CisKKwlyZXR1cm4gKChzdW0gPT0gMCkgJiYgKGxlbiA+IDApKTsKK30KKworLyoKKyAqCWJpb3MzMl9wcmVzZW50CisgKgorICoJUm91dGluZSBEZXNjcmlwdGlvbjoKKyAqCVRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIDMyLWJpdCBCSU9TIFNlcnZpY2UgRGlyZWN0b3J5CisgKgorICoJUmV0dXJuIFZhbHVlOgorICoJMCAgICAgICAgOiAgU1VDQ0VTUworICoJPDAgICAgICAgOiAgRkFJTFVSRQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiaW9zMzJfcHJlc2VudChjb25zdCBjaGFyIF9faW9tZW0gKnApCit7CisJc3RydWN0IGJpb3MzMl9zZXJ2aWNlX2RpciAqYmlvc18zMl9wdHI7CisJaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBsb25nIG1hcF9lbnRyeSwgbWFwX29mZnNldDsKKworCWJpb3NfMzJfcHRyID0gKHN0cnVjdCBiaW9zMzJfc2VydmljZV9kaXIgKikgcDsKKworCS8qCisJICogU2VhcmNoIGZvciBzaWduYXR1cmUgYnkgY2hlY2tpbmcgZXF1YWwgdG8gdGhlIHN3aXp6bGVkIHZhbHVlCisJICogaW5zdGVhZCBvZiBjYWxsaW5nIGFub3RoZXIgcm91dGluZSB0byBwZXJmb3JtIGEgc3RyY21wLgorCSAqLworCWlmIChiaW9zXzMyX3B0ci0+c2lnbmF0dXJlID09IFBDSV9CSU9TMzJfU0RfVkFMVUUpIHsKKwkJbGVuZ3RoID0gYmlvc18zMl9wdHItPmxlbmd0aCAqIFBDSV9CSU9TMzJfUEFSQUdSQVBIX0xFTjsKKwkJaWYgKGJpb3NfY2hlY2tzdW0ocCwgbGVuZ3RoKSkgeworCQkJLyoKKwkJCSAqIEFjY29yZGluZyB0byB0aGUgc3BlYywgd2UncmUgbG9va2luZyBmb3IgdGhlCisJCQkgKiBmaXJzdCA0S0ItYWxpZ25lZCBhZGRyZXNzIGJlbG93IHRoZSBlbnRyeXBvaW50CisJCQkgKiBsaXN0ZWQgaW4gdGhlIGhlYWRlci4gVGhlIFNlcnZpY2UgRGlyZWN0b3J5IGNvZGUKKwkJCSAqIGlzIGd1YXJhbnRlZWQgdG8gb2NjdXB5IG5vIG1vcmUgdGhhbiAyIDRLQiBwYWdlcy4KKwkJCSAqLworCQkJbWFwX2VudHJ5ID0gYmlvc18zMl9wdHItPmVudHJ5X3BvaW50ICYgfihQQUdFX1NJWkUgLSAxKTsKKwkJCW1hcF9vZmZzZXQgPSBiaW9zXzMyX3B0ci0+ZW50cnlfcG9pbnQgLSBtYXBfZW50cnk7CisKKwkJCXJldHVybiBjcnVfZGV0ZWN0KG1hcF9lbnRyeSwgbWFwX29mZnNldCk7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRldGVjdF9jcnVfc2VydmljZSh2b2lkKQoreworCWNoYXIgX19pb21lbSAqcCwgKnE7CisJaW50IHJjID0gLTE7CisKKwkvKgorCSAqIFNlYXJjaCBmcm9tIDB4MGYwMDAwIHRocm91Z2ggMHgwZmZmZmYsIGluY2x1c2l2ZS4KKwkgKi8KKwlwID0gaW9yZW1hcChQQ0lfUk9NX0JBU0UxLCBST01fU0laRSk7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHEgPSBwOyBxIDwgcCArIFJPTV9TSVpFOyBxICs9IDE2KSB7CisJCXJjID0gYmlvczMyX3ByZXNlbnQocSk7CisJCWlmICghcmMpCisJCQlicmVhazsKKwl9CisJaW91bm1hcChwKTsKKwlyZXR1cm4gcmM7Cit9CisKKyNlbHNlCisvKiAtLTY0IEJpdCBCaW9zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgSFBXRFRfQVJDSAk2NAorCitzdGF0aWMgdm9pZCBhc21pbmxpbmVfY2FsbChzdHJ1Y3QgY21uX3JlZ2lzdGVycyAqcGk4NlJlZ3MsCisJCQkgICB1bnNpZ25lZCBsb25nICpwUm9tRW50cnkpCit7CisJYXNtKCJwdXNocSAgICAgICVyYnAgICAgICAgICAgICBcblx0IgorCSAgICAibW92cSAgICAgICAlcnNwLCAlcmJwICAgICAgXG5cdCIKKwkgICAgInB1c2hxICAgICAgJXJheCAgICAgICAgICAgIFxuXHQiCisJICAgICJwdXNocSAgICAgICVyYnggICAgICAgICAgICBcblx0IgorCSAgICAicHVzaHEgICAgICAlcmR4ICAgICAgICAgICAgXG5cdCIKKwkgICAgInB1c2hxICAgICAgJXIxMiAgICAgICAgICAgIFxuXHQiCisJICAgICJwdXNocSAgICAgICVyOSAgICAgICAgICAgICBcblx0IgorCSAgICAibW92cSAgICAgICAlcnNpLCAlcjEyICAgICAgXG5cdCIKKwkgICAgIm1vdnEgICAgICAgJXJkaSwgJXI5ICAgICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgIDQoJXI5KSwlZWJ4ICAgICBcblx0IgorCSAgICAibW92bCAgICAgICA4KCVyOSksJWVjeCAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgMTIoJXI5KSwlZWR4ICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgIDE2KCVyOSksJWVzaSAgICBcblx0IgorCSAgICAibW92bCAgICAgICAyMCglcjkpLCVlZGkgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgKCVyOSksJWVheCAgICAgIFxuXHQiCisJICAgICJjYWxsICAgICAgIColcjEyICAgICAgICAgICBcblx0IgorCSAgICAicHVzaGZxICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkgICAgInBvcHEgICAgICAgICVyMTIgICAgICAgICAgIFxuXHQiCisJICAgICJwb3BmcSAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCSAgICAibW92bCAgICAgICAlZWF4LCAoJXI5KSAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgJWVieCwgNCglcjkpICAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgICVlY3gsIDgoJXI5KSAgICBcblx0IgorCSAgICAibW92bCAgICAgICAlZWR4LCAxMiglcjkpICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgJWVzaSwgMTYoJXI5KSAgIFxuXHQiCisJICAgICJtb3ZsICAgICAgICVlZGksIDIwKCVyOSkgICBcblx0IgorCSAgICAibW92cSAgICAgICAlcjEyLCAlcmF4ICAgICAgXG5cdCIKKwkgICAgIm1vdmwgICAgICAgJWVheCwgMjgoJXI5KSAgIFxuXHQiCisJICAgICJwb3BxICAgICAgICVyOSAgICAgICAgICAgICBcblx0IgorCSAgICAicG9wcSAgICAgICAlcjEyICAgICAgICAgICAgXG5cdCIKKwkgICAgInBvcHEgICAgICAgJXJkeCAgICAgICAgICAgIFxuXHQiCisJICAgICJwb3BxICAgICAgICVyYnggICAgICAgICAgICBcblx0IgorCSAgICAicG9wcSAgICAgICAlcmF4ICAgICAgICAgICAgXG5cdCIKKwkgICAgImxlYXZlICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICJyZXQiKTsKK30KKworLyoKKyAqCWRtaV9maW5kX2NydQorICoKKyAqCVJvdXRpbmUgRGVzY3JpcHRpb246CisgKglUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIG9yIG5vdCBhIFNNQklPUy9ETUkgcmVjb3JkIGlzCisgKgl0aGUgNjRiaXQgQ1JVIGluZm8gb3Igbm90CisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbWlfZmluZF9jcnUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQoreworCXN0cnVjdCBzbWJpb3NfY3J1NjRfaW5mbyAqc21iaW9zX2NydTY0X3B0cjsKKwl1bnNpZ25lZCBsb25nIGNydV9waHlzaWNhbF9hZGRyZXNzOworCisJaWYgKGRtLT50eXBlID09IFNNQklPU19DUlU2NF9JTkZPUk1BVElPTikgeworCQlzbWJpb3NfY3J1NjRfcHRyID0gKHN0cnVjdCBzbWJpb3NfY3J1NjRfaW5mbyAqKSBkbTsKKwkJaWYgKHNtYmlvc19jcnU2NF9wdHItPnNpZ25hdHVyZSA9PSBDUlVfQklPU19TSUdOQVRVUkVfVkFMVUUpIHsKKwkJCWNydV9waHlzaWNhbF9hZGRyZXNzID0KKwkJCSAgICBzbWJpb3NfY3J1NjRfcHRyLT5waHlzaWNhbF9hZGRyZXNzICsKKwkJCSAgICBzbWJpb3NfY3J1NjRfcHRyLT5kb3VibGVfb2Zmc2V0OworCQkJY3J1X3JvbV9hZGRyID0gaW9yZW1hcChjcnVfcGh5c2ljYWxfYWRkcmVzcywKKwkJCQkgICAgc21iaW9zX2NydTY0X3B0ci0+ZG91YmxlX2xlbmd0aCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRldGVjdF9jcnVfc2VydmljZSh2b2lkKQoreworCWNydV9yb21fYWRkciA9IE5VTEw7CisKKwlkbWlfd2FsayhkbWlfZmluZF9jcnUpOworCisJLyogaWYgY3J1X3JvbV9hZGRyIGhhcyBiZWVuIHNldCB0aGVuIHdlIGZvdW5kIGEgQ1JVIHNlcnZpY2UgKi8KKwlyZXR1cm4gKChjcnVfcm9tX2FkZHIgIT0gTlVMTCk/IDA6IC1FTk9ERVYpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZgorCisvKgorICoJTk1JIEhhbmRsZXIKKyAqLworc3RhdGljIGludCBocHdkdF9wcmV0aW1lb3V0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdWxSZWFzb24sCisJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyByb21fcGw7CisJc3RhdGljIGludCBkaWVfbm1pX2NhbGxlZDsKKworCWlmICh1bFJlYXNvbiAhPSBESUVfTk1JICYmIHVsUmVhc29uICE9IERJRV9OTUlfSVBJKQorCQlyZXR1cm4gTk9USUZZX09LOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJvbV9sb2NrLCByb21fcGwpOworCWlmICghZGllX25taV9jYWxsZWQpCisJCWFzbWlubGluZV9jYWxsKCZjbW5fcmVncywgY3J1X3JvbV9hZGRyKTsKKwlkaWVfbm1pX2NhbGxlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm9tX2xvY2ssIHJvbV9wbCk7CisJaWYgKGNtbl9yZWdzLnUxLnJhbCA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImhwd2R0OiBBbiBOTUkgb2NjdXJyZWQsICIKKwkJICAgICAgICJidXQgdW5hYmxlIHRvIGRldGVybWluZSBzb3VyY2UuXG4iKTsKKwl9IGVsc2UgeworCQlwYW5pYygiQW4gTk1JIG9jY3VycmVkLCBwbGVhc2Ugc2VlIHRoZSBJbnRlZ3JhdGVkICIKKwkJCSJNYW5hZ2VtZW50IExvZyBmb3IgZGV0YWlscy5cbiIpOworCX0KKworCXJldHVybiBOT1RJRllfU1RPUDsKK30KKworLyoKKyAqCVdhdGNoZG9nIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgaHB3ZHRfc3RhcnQodm9pZCkKK3sKKwlyZWxvYWQgPSAoc29mdF9tYXJnaW4gKiAxMDAwKSAvIDEyODsKKwlpb3dyaXRlMTYocmVsb2FkLCBocHdkdF90aW1lcl9yZWcpOworCWlvd3JpdGUxNigweDg1LCBocHdkdF90aW1lcl9jb24pOworfQorCitzdGF0aWMgdm9pZCBocHdkdF9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJZGF0YSA9IGlvcmVhZDE2KGhwd2R0X3RpbWVyX2Nvbik7CisJZGF0YSAmPSAweEZFOworCWlvd3JpdGUxNihkYXRhLCBocHdkdF90aW1lcl9jb24pOworfQorCitzdGF0aWMgdm9pZCBocHdkdF9waW5nKHZvaWQpCit7CisJaW93cml0ZTE2KHJlbG9hZCwgaHB3ZHRfdGltZXJfcmVnKTsKK30KKworc3RhdGljIGludCBocHdkdF9jaGFuZ2VfdGltZXIoaW50IG5ld19tYXJnaW4pCit7CisJLyogQXJiaXRyYXJ5LCBjYW4ndCBmaW5kIHRoZSBjYXJkJ3MgbGltaXRzICovCisJaWYgKG5ld19tYXJnaW4gPCAzMCB8fCBuZXdfbWFyZ2luID4gNjAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJocHdkdDogTmV3IHZhbHVlIHBhc3NlZCBpbiBpcyBpbnZhbGlkOiAlZCBzZWNvbmRzLlxuIiwKKwkJCW5ld19tYXJnaW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzb2Z0X21hcmdpbiA9IG5ld19tYXJnaW47CisJcHJpbnRrKEtFUk5fREVCVUcKKwkJImhwd2R0OiBOZXcgdGltZXIgcGFzc2VkIGluIGlzICVkIHNlY29uZHMuXG4iLAorCQluZXdfbWFyZ2luKTsKKwlyZWxvYWQgPSAoc29mdF9tYXJnaW4gKiAxMDAwKSAvIDEyODsKKworCXJldHVybiAwOworfQorCisvKgorICoJL2Rldi93YXRjaGRvZyBoYW5kbGluZworICovCitzdGF0aWMgaW50IGhwd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJLyogL2Rldi93YXRjaGRvZyBjYW4gb25seSBiZSBvcGVuZWQgb25jZSAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZocHdkdF9pc19vcGVuKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFN0YXJ0IHRoZSB3YXRjaGRvZyAqLworCWhwd2R0X3N0YXJ0KCk7CisJaHB3ZHRfcGluZygpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IGhwd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJLyogU3RvcCB0aGUgd2F0Y2hkb2cgKi8KKwlpZiAoZXhwZWN0X3JlbGVhc2UgPT0gNDIpIHsKKwkJaHB3ZHRfc3RvcCgpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0NSSVQKKwkJCSJocHdkdDogVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCWhwd2R0X3BpbmcoKTsKKwl9CisKKwlleHBlY3RfcmVsZWFzZSA9IDA7CisKKwkvKiAvZGV2L3dhdGNoZG9nIGlzIGJlaW5nIGNsb3NlZCwgbWFrZSBzdXJlIGl0IGNhbiBiZSByZS1vcGVuZWQgKi8KKwljbGVhcl9iaXQoMCwgJmhwd2R0X2lzX29wZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhwd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLworCWlmIChsZW4pIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisKKwkJCS8qIG5vdGU6IGp1c3QgaW4gY2FzZSBzb21lb25lIHdyb3RlIHRoZSBtYWdpYyBjaGFyYWN0ZXIKKwkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLworCQkJZXhwZWN0X3JlbGVhc2UgPSAwOworCisJCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXIuICovCisJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisJCQkJY2hhciBjOworCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhK2kpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlpZiAoYyA9PSAnVicpCisJCQkJCWV4cGVjdF9yZWxlYXNlID0gNDI7CisJCQl9CisJCX0KKworCQkvKiBzb21lb25lIHdyb3RlIHRvIHVzLCB3ZSBzaG91bGQgcmVsb2FkIHRoZSB0aW1lciAqLworCQlocHdkdF9waW5nKCk7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCS5vcHRpb25zID0gV0RJT0ZfU0VUVElNRU9VVCB8CisJCSAgIFdESU9GX0tFRVBBTElWRVBJTkcgfAorCQkgICBXRElPRl9NQUdJQ0NMT1NFLAorCS5pZGVudGl0eSA9ICJIUCBpTE8yIEhXIFdhdGNoZG9nIFRpbWVyIiwKK307CisKK3N0YXRpYyBsb25nIGhwd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBfX3VzZXIgKnAgPSBhcmdwOworCWludCBuZXdfbWFyZ2luOworCWludCByZXQgPSAtRU5PVFRZOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldCA9IDA7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXQgPSBwdXRfdXNlcigwLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJaHB3ZHRfcGluZygpOworCQlyZXQgPSAwOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJcmV0ID0gZ2V0X3VzZXIobmV3X21hcmdpbiwgcCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQlyZXQgPSBocHdkdF9jaGFuZ2VfdGltZXIobmV3X21hcmdpbik7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQlocHdkdF9waW5nKCk7CisJCS8qIEZhbGwgKi8KKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCXJldCA9IHB1dF91c2VyKHNvZnRfbWFyZ2luLCBwKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKglLZXJuZWwgaW50ZXJmYWNlcworICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocHdkdF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBub19sbHNlZWssCisJLndyaXRlID0gaHB3ZHRfd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsID0gaHB3ZHRfaW9jdGwsCisJLm9wZW4gPSBocHdkdF9vcGVuLAorCS5yZWxlYXNlID0gaHB3ZHRfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBocHdkdF9taXNjZGV2ID0geworCS5taW5vciA9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lID0gIndhdGNoZG9nIiwKKwkuZm9wcyA9ICZocHdkdF9mb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkaWVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBocHdkdF9wcmV0aW1lb3V0LAorCS5wcmlvcml0eSA9IDB4N0ZGRkZGRkYsCit9OworCisvKgorICoJSW5pdCAmIEV4aXQKKyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHdkdF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCByZXR2YWw7CisKKwkvKgorCSAqIEZpcnN0IGxldCdzIGZpbmQgb3V0IGlmIHdlIGFyZSBvbiBhbiBpTE8yIHNlcnZlci4gV2Ugd2lsbAorCSAqIG5vdCBydW4gb24gYSBsZWdhY3kgQVNNIGJveC4KKwkgKi8KKwlpZiAoZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9IFBDSV9WRU5ET1JfSURfSFApIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkgICAgICAgIlRoaXMgc2VydmVyIGRvZXMgbm90IGhhdmUgYW4gaUxPMiBBU0lDLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSJOb3QgcG9zc2libGUgdG8gZW5hYmxlIFBDSSBEZXZpY2U6IDB4JXg6MHgleC5cbiIsCisJCQllbnQtPnZlbmRvciwgZW50LT5kZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwY2lfbWVtX2FkZHIgPSBwY2lfaW9tYXAoZGV2LCAxLCAweDgwKTsKKwlpZiAoIXBjaV9tZW1fYWRkcikgeworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGRldGVjdCB0aGUgaUxPMiBzZXJ2ZXIgbWVtb3J5LlxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfcGNpX2lvbWFwOworCX0KKwlocHdkdF90aW1lcl9yZWcgPSBwY2lfbWVtX2FkZHIgKyAweDcwOworCWhwd2R0X3RpbWVyX2NvbiA9IHBjaV9tZW1fYWRkciArIDB4NzI7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc29mdF9tYXJnaW4gKi8KKwlpZiAoaHB3ZHRfY2hhbmdlX3RpbWVyKHNvZnRfbWFyZ2luKSkKKwkJaHB3ZHRfY2hhbmdlX3RpbWVyKERFRkFVTFRfTUFSR0lOKTsKKworCS8qCisJICogV2UgbmVlZCB0byBtYXAgdGhlIFJPTSB0byBnZXQgdGhlIENSVSBzZXJ2aWNlLgorCSAqIEZvciAzMiBiaXQgT3BlcmF0aW5nIFN5c3RlbXMgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSAzMiBCaXQKKwkgKiBCSU9TIFNlcnZpY2UgRGlyZWN0b3J5CisJICogRm9yIDY0IGJpdCBPcGVyYXRpbmcgU3lzdGVtcyB3ZSBnZXQgdGhhdCBzZXJ2aWNlIHRocm91Z2ggU01CSU9TLgorCSAqLworCXJldHZhbCA9IGRldGVjdF9jcnVfc2VydmljZSgpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJICAgICAgICJVbmFibGUgdG8gZGV0ZWN0IHRoZSAlZCBCaXQgQ1JVIFNlcnZpY2UuXG4iLAorCQkJSFBXRFRfQVJDSCk7CisJCWdvdG8gZXJyb3JfZ2V0X2NydTsKKwl9CisKKwkvKgorCSAqIFdlIGtub3cgdGhpcyBpcyB0aGUgb25seSBDUlUgY2FsbCB3ZSBuZWVkIHRvIG1ha2Ugc28gbGV0cyBrZWVwIGFzCisJICogZmV3IGluc3RydWN0aW9ucyBhcyBwb3NzaWJsZSBvbmNlIHRoZSBOTUkgY29tZXMgaW4uCisJICovCisJY21uX3JlZ3MudTEucmFoID0gMHgwRDsKKwljbW5fcmVncy51MS5yYWwgPSAweDAyOworCisJcmV0dmFsID0gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZkaWVfbm90aWZpZXIpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCSAgICAgICAiVW5hYmxlIHRvIHJlZ2lzdGVyIGEgZGllIG5vdGlmaWVyIChlcnI9JWQpLlxuIiwKKwkJCXJldHZhbCk7CisJCWdvdG8gZXJyb3JfZGllX25vdGlmaWVyOworCX0KKworCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJmhwd2R0X21pc2NkZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKS5cbiIsCisJCQlXQVRDSERPR19NSU5PUiwgcmV0dmFsKTsKKwkJZ290byBlcnJvcl9taXNjX3JlZ2lzdGVyOworCX0KKworCXByaW50ayhLRVJOX0lORk8KKwkJImhwIFdhdGNoZG9nIFRpbWVyIERyaXZlcjogMS4wMCIKKwkJIiwgdGltZXIgbWFyZ2luOiAlZCBzZWNvbmRzKCBub3dheW91dD0lZCkuXG4iLAorCQlzb2Z0X21hcmdpbiwgbm93YXlvdXQpOworCisJcmV0dXJuIDA7CisKK2Vycm9yX21pc2NfcmVnaXN0ZXI6CisJdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmRpZV9ub3RpZmllcik7CitlcnJvcl9kaWVfbm90aWZpZXI6CisJaWYgKGNydV9yb21fYWRkcikKKwkJaW91bm1hcChjcnVfcm9tX2FkZHIpOworZXJyb3JfZ2V0X2NydToKKwlwY2lfaW91bm1hcChkZXYsIHBjaV9tZW1fYWRkcik7CitlcnJvcl9wY2lfaW9tYXA6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGhwd2R0X2V4aXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoIW5vd2F5b3V0KQorCQlocHdkdF9zdG9wKCk7CisKKwltaXNjX2RlcmVnaXN0ZXIoJmhwd2R0X21pc2NkZXYpOworCXVucmVnaXN0ZXJfZGllX25vdGlmaWVyKCZkaWVfbm90aWZpZXIpOworCisJaWYgKGNydV9yb21fYWRkcikKKwkJaW91bm1hcChjcnVfcm9tX2FkZHIpOworCXBjaV9pb3VubWFwKGRldiwgcGNpX21lbV9hZGRyKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhwd2R0X2RyaXZlciA9IHsKKwkubmFtZSA9ICJocHdkdCIsCisJLmlkX3RhYmxlID0gaHB3ZHRfZGV2aWNlcywKKwkucHJvYmUgPSBocHdkdF9pbml0X29uZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaHB3ZHRfZXhpdCksCit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgaHB3ZHRfY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaHB3ZHRfZHJpdmVyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaHB3ZHRfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZocHdkdF9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJUb20gTWluZ2FyZWxsaSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJocCB3YXRjaGRvZyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKKworbW9kdWxlX3BhcmFtKHNvZnRfbWFyZ2luLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzb2Z0X21hcmdpbiwgIldhdGNoZG9nIHRpbWVvdXQgaW4gc2Vjb25kcyIpOworCittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworCittb2R1bGVfaW5pdChocHdkdF9pbml0KTsKK21vZHVsZV9leGl0KGhwd2R0X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pdDg3MTJmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pdDg3MTJmX3dkdC5jCmluZGV4IDFiNmQ3ZDEuLjQ0NWI3ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4NzEyZl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2l0ODcxMmZfd2R0LmMKQEAgLTcsNyArNyw4IEBACiAgKgogICoJZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjeDIwMF93ZHQuYwogICoJZHJpdmVycy9od21vbi9pdDg3LmMKLSAqCUlUODcxMkYgRUMtTFBDIEkvTyBQcmVsaW1pbmFyeSBTcGVjaWZpY2F0aW9uIDAuOS4yLnBkZgorICoJSVQ4NzEyRiBFQy1MUEMgSS9PIFByZWxpbWluYXJ5IFNwZWNpZmljYXRpb24gMC44LjIKKyAqCUlUODcxMkYgRUMtTFBDIEkvTyBQcmVsaW1pbmFyeSBTcGVjaWZpY2F0aW9uIDAuOS4zCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQwLDYgKzQxLDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKIAorc3RhdGljIGludCBtYXhfdW5pdHMgPSAyNTU7CiBzdGF0aWMgaW50IG1hcmdpbiA9IDYwOwkJLyogaW4gc2Vjb25kcyAqLwogbW9kdWxlX3BhcmFtKG1hcmdpbiwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWFyZ2luLCAiV2F0Y2hkb2cgbWFyZ2luIGluIHNlY29uZHMiKTsKQEAgLTUxLDYgKzUzLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGl0ODcxMmZfd2R0X3NlbTsKIHN0YXRpYyB1bnNpZ25lZCBleHBlY3RfY2xvc2U7CiBzdGF0aWMgc3BpbmxvY2tfdCBpb19sb2NrOworc3RhdGljIHVuc2lnbmVkIGNoYXIgcmV2aXNpb247CiAKIC8qIERvZyBGb29kIGFkZHJlc3MgLSBXZSB1c2UgdGhlIGdhbWUgcG9ydCBhZGRyZXNzICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgYWRkcmVzczsKQEAgLTE0MywxNSArMTQ2LDMyIEBACiBpdDg3MTJmX3dkdF91cGRhdGVfbWFyZ2luKHZvaWQpCiB7CiAJaW50IGNvbmZpZyA9IFdEVF9PVVRfS1JTVCB8IFdEVF9PVVRfUFdST0s7CisJaW50IHVuaXRzID0gbWFyZ2luOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBOQU1FICI6IHRpbWVyIG1hcmdpbiAlZCBzZWNvbmRzXG4iLCBtYXJnaW4pOwotCi0JLyogVGhlIHRpbWVvdXQgcmVnaXN0ZXIgb25seSBoYXMgOGJpdHMgd2lkZSAqLwotCWlmIChtYXJnaW4gPCAyNTYpCi0JCWNvbmZpZyB8PSBXRFRfVU5JVF9TRUM7CS8qIGVsc2UgVU5JVCBhcmUgTUlOVVRFUyAqLworCS8qIFN3aXRjaCB0byBtaW51dGVzIHByZWNpc2lvbiBpZiB0aGUgY29uZmlndXJlZCBtYXJnaW4KKwkgKiB2YWx1ZSBkb2VzIG5vdCBmaXQgd2l0aGluIHRoZSByZWdpc3RlciB3aWR0aC4KKwkgKi8KKwlpZiAodW5pdHMgPD0gbWF4X3VuaXRzKSB7CisJCWNvbmZpZyB8PSBXRFRfVU5JVF9TRUM7IC8qIGVsc2UgVU5JVCBpcyBNSU5VVEVTICovCisJCXByaW50ayhLRVJOX0lORk8gTkFNRSAiOiB0aW1lciBtYXJnaW4gJWQgc2Vjb25kc1xuIiwgdW5pdHMpOworCX0gZWxzZSB7CisJCXVuaXRzIC89IDYwOworCQlwcmludGsoS0VSTl9JTkZPIE5BTUUgIjogdGltZXIgbWFyZ2luICVkIG1pbnV0ZXNcbiIsIHVuaXRzKTsKKwl9CiAJc3VwZXJpb19vdXRiKGNvbmZpZywgV0RUX0NPTkZJRyk7CiAKLQlzdXBlcmlvX291dGIoKG1hcmdpbiA+IDI1NSkgPyAobWFyZ2luIC8gNjApIDogbWFyZ2luLCBXRFRfVElNRU9VVCk7CisJaWYgKHJldmlzaW9uID49IDB4MDgpCisJCXN1cGVyaW9fb3V0Yih1bml0cyA+PiA4LCBXRFRfVElNRU9VVCArIDEpOworCXN1cGVyaW9fb3V0Yih1bml0cywgV0RUX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW50CitpdDg3MTJmX3dkdF9nZXRfc3RhdHVzKHZvaWQpCit7CisJaWYgKHN1cGVyaW9faW5iKFdEVF9DT05UUk9MKSAmIDB4MDEpCisJCXJldHVybiBXRElPRl9DQVJEUkVTRVQ7CisJZWxzZQorCQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE4MCw2ICsyMDAsOCBAQAogCiAJc3VwZXJpb19vdXRiKDAsIFdEVF9DT05GSUcpOwogCXN1cGVyaW9fb3V0YigwLCBXRFRfQ09OVFJPTCk7CisJaWYgKHJldmlzaW9uID49IDB4MDgpCisJCXN1cGVyaW9fb3V0YigwLCBXRFRfVElNRU9VVCArIDEpOwogCXN1cGVyaW9fb3V0YigwLCBXRFRfVElNRU9VVCk7CiAKIAlzdXBlcmlvX2V4aXQoKTsKQEAgLTIzNCw3ICsyNTYsNyBAQAogCQkuZmlybXdhcmVfdmVyc2lvbiA9IDEsCiAJCS5vcHRpb25zID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCiAJfTsKLQlpbnQgbmV3X21hcmdpbjsKKwlpbnQgdmFsdWU7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWRlZmF1bHQ6CkBAIC0yNDQsMTcgKzI2NiwyNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCQlzdXBlcmlvX2VudGVyKCk7CisJCXN1cGVyaW9fc2VsZWN0KExETl9HUElPKTsKKworCQl2YWx1ZSA9IGl0ODcxMmZfd2R0X2dldF9zdGF0dXMoKTsKKworCQlzdXBlcmlvX2V4aXQoKTsKKworCQlyZXR1cm4gcHV0X3VzZXIodmFsdWUsIHApOwogCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKIAkJcmV0dXJuIHB1dF91c2VyKDAsIHApOwogCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgogCQlpdDg3MTJmX3dkdF9waW5nKCk7CiAJCXJldHVybiAwOwogCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKLQkJaWYgKGdldF91c2VyKG5ld19tYXJnaW4sIHApKQorCQlpZiAoZ2V0X3VzZXIodmFsdWUsIHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChuZXdfbWFyZ2luIDwgMSkKKwkJaWYgKHZhbHVlIDwgMSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQltYXJnaW4gPSBuZXdfbWFyZ2luOworCQlpZiAodmFsdWUgPiAobWF4X3VuaXRzICogNjApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1hcmdpbiA9IHZhbHVlOwogCQlzdXBlcmlvX2VudGVyKCk7CiAJCXN1cGVyaW9fc2VsZWN0KExETl9HUElPKTsKIApAQCAtMjYyLDYgKzI5NCw3IEBACiAKIAkJc3VwZXJpb19leGl0KCk7CiAJCWl0ODcxMmZfd2R0X3BpbmcoKTsKKwkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgogCQlpZiAocHV0X3VzZXIobWFyZ2luLCBwKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMzM2LDkgKzM2OSwxOCBAQAogCX0KIAogCWVyciA9IDA7Ci0JcHJpbnRrKEtFUk5fREVCVUcgTkFNRSAiOiBGb3VuZCBJVCUwNHhGIGNoaXAgcmV2aXNpb24gJWQgLSAiCisJcmV2aXNpb24gPSBzdXBlcmlvX2luYihERVZSRVYpICYgMHgwZjsKKworCS8qIExhdGVyIHJldmlzaW9ucyBoYXZlIDE2LWJpdCB2YWx1ZXMgcGVyIGRhdGFzaGVldCAwLjkuMSAqLworCWlmIChyZXZpc2lvbiA+PSAweDA4KQorCQltYXhfdW5pdHMgPSA2NTUzNTsKKworCWlmIChtYXJnaW4gPiAobWF4X3VuaXRzICogNjApKQorCQltYXJnaW4gPSAobWF4X3VuaXRzICogNjApOworCisJcHJpbnRrKEtFUk5fSU5GTyBOQU1FICI6IEZvdW5kIElUJTA0eEYgY2hpcCByZXZpc2lvbiAlZCAtICIKIAkJInVzaW5nIERvZ0Zvb2QgYWRkcmVzcyAweCV4XG4iLAotCQljaGlwX3R5cGUsIHN1cGVyaW9faW5iKERFVlJFVikgJiAweDBmLCAqYWRkcmVzcyk7CisJCWNoaXBfdHlwZSwgcmV2aXNpb24sICphZGRyZXNzKTsKIAogZXhpdDoKIAlzdXBlcmlvX2V4aXQoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cva3M4Njk1X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMKaW5kZXggZTNhMjljMy4uZGY1YTZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMKQEAgLTMwNiwzICszMDYsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJXYXRjaGRvZyBkcml2ZXIgZm9yIEtTODY5NSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTprczg2OTVfd2R0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21hY2h6d2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbWFjaHp3ZC5jCmluZGV4IGU2ZTA3YjQuLjY5MDUxMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbWFjaHp3ZC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbWFjaHp3ZC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKICNpZm5kZWYgWkZfREVCVUcKICMJZGVmaW5lIGRwcmludGsoZm9ybWF0LCBhcmdzLi4uKQogI2Vsc2UKLSMJZGVmaW5lIGRwcmludGsoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBQRlggIjolczolZDogIiBmb3JtYXQsIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKQorIwlkZWZpbmUgZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIFBGWCAiOiVzOiVkOiAiIGZvcm1hdCwgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncykKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjODN4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjODN4eF93ZHQuYwppbmRleCA2MzY5ZjU2Li5iMTZjNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21wYzgzeHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tcGM4M3h4X3dkdC5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1wYzgzeHhfd2R0X3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm1wYzgzeHhfd2R0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTIyNiwzICsyMjcsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHdhdGNoZG9nIHRpbWVyIGluIE1QQzgzeHggdVByb2Nlc3NvciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptcGM4M3h4X3dkdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCAwZDJiMjc3Li4wMDk1NzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYwpAQCAtMzkyLDYgKzM5Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptcGNvcmVfd2R0Iik7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wY29yZV93ZHRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBtcGNvcmVfd2R0X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXBjb3JlX3dkdF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKaW5kZXggOTg0NTE3NC4uYThlNjczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCkBAIC00NSwxMCArNDUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKICNkZWZpbmUgTVRYMV9XRFRfSU5URVJWQUwJKDUgKiBIWikKIApAQCAtNTYsMTEgKzU5LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgewogCXN0cnVjdCBjb21wbGV0aW9uIHN0b3A7Ci0Jdm9sYXRpbGUgaW50IHJ1bm5pbmc7CisJaW50IHJ1bm5pbmc7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0Jdm9sYXRpbGUgaW50IHF1ZXVlOworCWludCBxdWV1ZTsKIAlpbnQgZGVmYXVsdF90aWNrczsKIAl1bnNpZ25lZCBsb25nIGludXNlOworCXVuc2lnbmVkIGdwaW87CiB9IG10eDFfd2R0X2RldmljZTsKIAogc3RhdGljIHZvaWQgbXR4MV93ZHRfdHJpZ2dlcih1bnNpZ25lZCBsb25nIHVudXNlZCkKQEAgLTczLDcgKzc3LDggQEAKIAkgKiB0b2dnbGUgR1BJTzJfMTUKIAkgKi8KIAl0bXAgPSBhdV9yZWFkbChHUElPMl9ESVIpOwotCXRtcCA9ICh0bXAgJiB+KDE8PDE1KSkgfCAoKH50bXApICYgKDE8PDE1KSk7CisJdG1wID0gKHRtcCAmIH4oMSA8PCBtdHgxX3dkdF9kZXZpY2UuZ3BpbykpIHwKKwkgICAgICAoKH50bXApICYgKDEgPDwgbXR4MV93ZHRfZGV2aWNlLmdwaW8pKTsKIAlhdV93cml0ZWwgKHRtcCwgR1BJTzJfRElSKTsKIAogCWlmIChtdHgxX3dkdF9kZXZpY2UucXVldWUgJiYgdGlja3MpCkBAIC05Myw3ICs5OCw3IEBACiB7CiAJaWYgKCFtdHgxX3dkdF9kZXZpY2UucXVldWUpIHsKIAkJbXR4MV93ZHRfZGV2aWNlLnF1ZXVlID0gMTsKLQkJYXVfd3JpdGVsIChhdV9yZWFkbChHUElPMl9ESVIpIHwgKHUzMikoMTw8MTUpLCBHUElPMl9ESVIpOworCQlncGlvX3NldF92YWx1ZShtdHgxX3dkdF9kZXZpY2UuZ3BpbywgMSk7CiAJCW1vZF90aW1lcigmbXR4MV93ZHRfZGV2aWNlLnRpbWVyLCBqaWZmaWVzICsgTVRYMV9XRFRfSU5URVJWQUwpOwogCX0KIAltdHgxX3dkdF9kZXZpY2UucnVubmluZysrOwpAQCAtMTAzLDcgKzEwOCw3IEBACiB7CiAJaWYgKG10eDFfd2R0X2RldmljZS5xdWV1ZSkgewogCQltdHgxX3dkdF9kZXZpY2UucXVldWUgPSAwOwotCQlhdV93cml0ZWwgKGF1X3JlYWRsKEdQSU8yX0RJUikgJiB+KCh1MzIpKDE8PDE1KSksIEdQSU8yX0RJUik7CisJCWdwaW9fc2V0X3ZhbHVlKG10eDFfd2R0X2RldmljZS5ncGlvLCAwKTsKIAl9CiAKIAl0aWNrcyA9IG10eDFfd2R0X2RldmljZS5kZWZhdWx0X3RpY2tzOwpAQCAtMTk3LDEwICsyMDIsMTIgQEAKIH07CiAKIAotc3RhdGljIGludCBfX2luaXQgbXR4MV93ZHRfaW5pdCh2b2lkKQorc3RhdGljIGludCBtdHgxX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAKKwltdHgxX3dkdF9kZXZpY2UuZ3BpbyA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCiAJaWYgKChyZXQgPSBtaXNjX3JlZ2lzdGVyKCZtdHgxX3dkdF9taXNjKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiIG10eC0xX3dkdCA6IGZhaWxlZCB0byByZWdpc3RlclxuIik7CiAJCXJldHVybiByZXQ7CkBAIC0yMjIsMTMgKzIyOSwzMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXR4MV93ZHRfZXhpdCh2b2lkKQorc3RhdGljIGludCBtdHgxX3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpZiAobXR4MV93ZHRfZGV2aWNlLnF1ZXVlKSB7CiAJCW10eDFfd2R0X2RldmljZS5xdWV1ZSA9IDA7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm10eDFfd2R0X2RldmljZS5zdG9wKTsKIAl9CiAJbWlzY19kZXJlZ2lzdGVyKCZtdHgxX3dkdF9taXNjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXR4MV93ZHQgPSB7CisJLnByb2JlID0gbXR4MV93ZHRfcHJvYmUsCisJLnJlbW92ZSA9IG10eDFfd2R0X3JlbW92ZSwKKwkuZHJpdmVyLm5hbWUgPSAibXR4MS13ZHQiLAorCS5kcml2ZXIub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10eDFfd2R0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdHgxX3dkdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdHgxX3dkdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm10eDFfd2R0KTsKIH0KIAogbW9kdWxlX2luaXQobXR4MV93ZHRfaW5pdCk7CkBAIC0yMzcsMyArMjYyLDUgQEAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgU3RpY2tlbCwgRmxvcmlhbiBGYWluZWxsaSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBNVFgtMSB3YXRjaGRvZyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptdHgxLXdkdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmluZGV4IDAzNjVjMzEuLmI1OWNhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKQEAgLTMyNCwzICszMjQsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNVjY0eDYwIHdhdGNoZG9nIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIE1WNjR4NjBfV0RUX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCmluZGV4IDYzNWNhNDUuLjc0YmMzOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKQEAgLTM4NywzICszODcsNCBAQAogTU9EVUxFX0FVVEhPUigiR2VvcmdlIEcuIERhdmlzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm9tYXBfd2R0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKaW5kZXggMGYzZmQ2Yy4uYmY0NDNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYwpAQCAtMTc5LDExICsxNzksMTEgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCiAJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJZ290byByZXN1Ym1pdDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwppbmRleCBiMDRhYTA5Li42Yjg0ODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCkBAIC0zMjEsNiArMzIxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBsYXRmb3JtX3dkdF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAid2F0Y2hkb2ciLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9IHBueDQwMDhfd2R0X3Byb2JlLAogCS5yZW1vdmUgPSBwbng0MDA4X3dkdF9yZW1vdmUsCkBAIC0zNTQsMyArMzU1LDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3YXRjaGRvZyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCmluZGV4IDVkMWMxNWYuLjk4NTMyYzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAl9CiAKIAlEQkcoIiVzOiB3ZHRfY291bnQ9MHglMDh4LCB3dGNvbj0lMDhseFxuIiwKLQkgICAgX19GVU5DVElPTl9fLCB3ZHRfY291bnQsIHd0Y29uKTsKKwkgICAgX19mdW5jX18sIHdkdF9jb3VudCwgd3Rjb24pOwogCiAJd3JpdGVsKHdkdF9jb3VudCwgd2R0X2Jhc2UgKyBTM0MyNDEwX1dUREFUKTsKIAl3cml0ZWwod2R0X2NvdW50LCB3ZHRfYmFzZSArIFMzQzI0MTBfV1RDTlQpOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJY291bnQgPSB0aW1lb3V0ICogZnJlcTsKIAogCURCRygiJXM6IGNvdW50PSVkLCB0aW1lb3V0PSVkLCBmcmVxPSVkXG4iLAotCSAgICBfX0ZVTkNUSU9OX18sIGNvdW50LCB0aW1lb3V0LCBmcmVxKTsKKwkgICAgX19mdW5jX18sIGNvdW50LCB0aW1lb3V0LCBmcmVxKTsKIAogCS8qIGlmIHRoZSBjb3VudCBpcyBiaWdnZXIgdGhhbiB0aGUgd2F0Y2hkb2cgcmVnaXN0ZXIsCiAJICAgdGhlbiB3b3JrIG91dCB3aGF0IHdlIG5lZWQgdG8gZG8gKGFuZCBpZikgd2UgY2FuCkBAIC0xODksNyArMTg5LDcgQEAKIAl0bXJfbWFyZ2luID0gdGltZW91dDsKIAogCURCRygiJXM6IHRpbWVvdXQ9JWQsIGRpdmlzb3I9JWQsIGNvdW50PSVkICglMDh4KVxuIiwKLQkgICAgX19GVU5DVElPTl9fLCB0aW1lb3V0LCBkaXZpc29yLCBjb3VudCwgY291bnQvZGl2aXNvcik7CisJICAgIF9fZnVuY19fLCB0aW1lb3V0LCBkaXZpc29yLCBjb3VudCwgY291bnQvZGl2aXNvcik7CiAKIAljb3VudCAvPSBkaXZpc29yOwogCXdkdF9jb3VudCA9IGNvdW50OwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJaW50IHJldDsKIAlpbnQgc2l6ZTsKIAotCURCRygiJXM6IHByb2JlPSVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYpOworCURCRygiJXM6IHByb2JlPSVwXG4iLCBfX2Z1bmNfXywgcGRldik7CiAKIAlkZXYgPSAmcGRldi0+ZGV2OwogCXdkdF9kZXYgPSAmcGRldi0+ZGV2OwpAQCAtNTYxLDMgKzU2MSw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzI0MTAgV2F0Y2hkb2cgRGV2aWNlIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEwLXdkdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYl93ZG9nLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiX3dkb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTQ0MzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYl93ZG9nLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBXYXRjaGRvZyBkcml2ZXIgZm9yIFNpQnl0ZSBTQjEgU29DcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBPblN0b3IsIEluYy4gKiBBbmRyZXcgU2hhcnAgPGFuZHkuc2hhcnBAb25zdG9yLmNvbT4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBpbnRlbmRlZCB0byBtYWtlIHRoZSBzZWNvbmQgb2YgdHdvIGhhcmR3YXJlIHdhdGNoZG9ncworICogb24gdGhlIFNpYnl0ZSAxMlhYIGFuZCAxMVhYIFNvQ3MgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLiAgVGhlcmUgYXJlIHR3bworICogc3VjaCBkZXZpY2VzIGF2YWlsYWJsZSBvbiB0aGUgU29DLCBidXQgaXQgc2VlbXMgdGhhdCB0aGVyZSBpc24ndCBhbgorICogZW51bWVyYXRpb24gY2xhc3MgZm9yIHdhdGNoZG9ncyBpbiBMaW51eCBsaWtlIHRoZXJlIGlzIGZvciBSVENzLgorICogVGhlIHNlY29uZCBpcyB1c2VkIHJhdGhlciB0aGFuIHRoZSBmaXJzdCBiZWNhdXNlIGl0IHVzZXMgSVJRIDEsCisgKiB0aGVyZWJ5IGF2b2lkaW5nIGFsbCB0aGF0IElSUSAwIHByb2JsZW1hdGljIG5vbnNlbnNlLgorICoKKyAqIEkgaGF2ZSBub3QgdHJpZWQgdGhpcyBkcml2ZXIgb24gYSAxNDgwIHByb2Nlc3NvcjsgaXQgbWlnaHQgd29yaworICoganVzdCB3ZWxsIGVub3VnaCB0byByZWFsbHkgc2NyZXcgdGhpbmdzIHVwLgorICoKKyAqIEl0IGlzIGEgc2ltcGxlIHRpbWVyLCBhbmQgdGhlcmUgaXMgYW4gaW50ZXJydXB0IHRoYXQgaXMgcmFpc2VkIHRoZQorICogZmlyc3QgdGltZSB0aGUgdGltZXIgZXhwaXJlcy4gIFRoZSBzZWNvbmQgdGltZSBpdCBleHBpcmVzLCB0aGUgY2hpcAorICogaXMgcmVzZXQgYW5kIHRoZXJlIGlzIG5vIHdheSB0byByZWRpcmVjdCB0aGF0IE5NSS4gIFdoaWNoIGNvdWxkCisgKiBiZSBwcm9ibGVtYXRpYyBpbiBzb21lIGNhc2VzIHdoZXJlIHRoaXMgY2hpcCBpcyBzaXR0aW5nIG9uIHRoZSBIVAorICogYnVzIGFuZCBoYXMganVzdCB0YWtlbiByZXNwb25zaWJpbGl0eSBmb3IgcHJvdmlkaW5nIGEgY2FjaGUgYmxvY2suCisgKiBTaW5jZSB0aGUgcmVzZXQgY2FuJ3QgYmUgcmVkaXJlY3RlZCB0byB0aGUgZXh0ZXJuYWwgcmVzZXQgcGluLCBpdCBpcworICogcG9zc2libGUgdGhhdCBvdGhlciBIVCBjb25uZWN0ZWQgcHJvY2Vzc29ycyBtaWdodCBoYW5nIGFuZCBub3QgcmVzZXQuCisgKiBGb3IgTGludXgsIGEgc29mdCByZXNldCB3b3VsZCBwcm9iYWJseSBiZSBldmVuIHdvcnNlIHRoYW4gYSBoYXJkIHJlc2V0LgorICogVGhlcmUgeW91IGhhdmUgaXQuCisgKgorICogVGhlIHRpbWVyIHRha2VzIDIzIGJpdHMgb2YgYSA2NCBiaXQgcmVnaXN0ZXIgKD8pIGFzIGEgY291bnQgdmFsdWUsCisgKiBhbmQgZGVjcmVtZW50cyB0aGUgY291bnQgZXZlcnkgbWljcm9zZWNvbmQsIGZvciBhIG1heCB2YWx1ZSBvZgorICogMHg3ZmZmZmYgdXNlYyBvciBhYm91dCA4LjNpc2ggc2Vjb25kcy4KKyAqCisgKiBUaGlzIHdhdGNoZG9nIGJvcnJvd3Mgc29tZSB1c2VyIHNlbWFudGljcyBmcm9tIHRoZSBzb2Z0ZG9nIGRyaXZlciwKKyAqIGluIHRoYXQgaWYgeW91IGNsb3NlIHRoZSBmZCwgaXQgbGVhdmVzIHRoZSB3YXRjaGRvZyBydW5uaW5nLCB1bmxlc3MKKyAqIHlvdSBwcmV2aW91c2x5IHdyb3RlIGEgJ1YnIHRvIHRoZSBmZCwgaW4gd2hpY2ggY2FzZSBpdCBkaXNhYmxlcworICogdGhlIHdhdGNoZG9nIHdoZW4geW91IGNsb3NlIHRoZSBmZCBsaWtlIHNvbWUgb3RoZXIgZHJpdmVycy4KKyAqCisgKiBCYXNlZCBvbiB2YXJpb3VzIG90aGVyIHdhdGNoZG9nIGRyaXZlcnMsIHdoaWNoIGFyZSBwcm9iYWJseSBhbGwKKyAqIGxvb3NlbHkgYmFzZWQgb24gc29tZXRoaW5nIEFsYW4gQ294IHdyb3RlIHllYXJzIGFnby4KKyAqCisgKgkoYykgQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgkJCQlodHRwOi8vd3d3LnJlZGhhdC5jb20KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJdmVyc2lvbiAxIG9yIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwLmg+CisjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfcmVncy5oPgorI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2ludC5oPgorI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX3NjZC5oPgorCisKKy8qCisgKiBzZXQgdGhlIGluaXRpYWwgY291bnQgdmFsdWUgb2YgYSB0aW1lcgorICoKKyAqIHdkb2cgaXMgdGhlIGlvbWVtIGFkZHJlc3Mgb2YgdGhlIGNmZyByZWdpc3RlcgorICovCit2b2lkIHNid2RvZ19zZXQoY2hhciBfX2lvbWVtICp3ZG9nLCB1bnNpZ25lZCBsb25nIHQpCit7CisJX19yYXdfd3JpdGViKDAsIHdkb2cgLSAweDEwKTsKKwlfX3Jhd193cml0ZXEodCAmIDB4N2ZmZmZmVUwsIHdkb2cpOworfQorCisvKgorICogY2F1c2UgdGhlIHRpbWVyIHRvIFtyZV1sb2FkIGl0J3MgaW5pdGlhbCBjb3VudCBhbmQgc3RhcnQgY291bnRpbmcKKyAqIGFsbCBvdmVyIGFnYWluCisgKgorICogd2RvZyBpcyB0aGUgaW9tZW0gYWRkcmVzcyBvZiB0aGUgY2ZnIHJlZ2lzdGVyCisgKi8KK3ZvaWQgc2J3ZG9nX3BldChjaGFyIF9faW9tZW0gKndkb2cpCit7CisJX19yYXdfd3JpdGViKF9fcmF3X3JlYWRiKHdkb2cpIHwgMSwgd2RvZyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNid2RvZ19nYXRlOyAvKiBrZWVwcyBpdCB0byBvbmUgdGhyZWFkIG9ubHkgKi8KK3N0YXRpYyBjaGFyIF9faW9tZW0gKmtlcm5fZG9nID0gKGNoYXIgX19pb21lbSAqKShJT19CQVNFICsgKEFfU0NEX1dET0dfQ0ZHXzApKTsKK3N0YXRpYyBjaGFyIF9faW9tZW0gKnVzZXJfZG9nID0gKGNoYXIgX19pb21lbSAqKShJT19CQVNFICsgKEFfU0NEX1dET0dfQ0ZHXzEpKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAweDdmZmZmZlVMOwkvKiB1c2Vjb25kczogOC4zaXNoIHNlY3MuICovCitzdGF0aWMgaW50IGV4cGVjdF9jbG9zZTsKKworc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCS5vcHRpb25zCT0gV0RJT0ZfQ0FSRFJFU0VUIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCisJLmlkZW50aXR5CT0gIlNpQnl0ZSBXYXRjaGRvZyIsCit9OworCisvKgorICogQWxsb3cgb25seSBhIHNpbmdsZSB0aHJlYWQgdG8gd2FsayB0aGUgZG9nCisgKi8KK3N0YXRpYyBpbnQgc2J3ZG9nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnNid2RvZ19nYXRlKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOworCisJLyoKKwkgKiBBY3RpdmF0ZSB0aGUgdGltZXIKKwkgKi8KKwlzYndkb2dfc2V0KHVzZXJfZG9nLCB0aW1lb3V0KTsKKwlfX3Jhd193cml0ZWIoMSwgdXNlcl9kb2cpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQdXQgdGhlIGRvZyBiYWNrIGluIHRoZSBrZW5uZWwuCisgKi8KK3N0YXRpYyBpbnQgc2J3ZG9nX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikgeworCQlfX3Jhd193cml0ZWIoMCwgdXNlcl9kb2cpOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9DUklUICIlczogVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIiwKKwkJCWlkZW50LmlkZW50aXR5KTsKKwkJc2J3ZG9nX3BldCh1c2VyX2RvZyk7CisJfQorCWNsZWFyX2JpdCgwLCAmc2J3ZG9nX2dhdGUpOworCWV4cGVjdF9jbG9zZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIDQyIC0gdGhlIGFuc3dlcgorICovCitzdGF0aWMgc3NpemVfdCBzYndkb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCWludCBpOworCisJaWYgKGxlbikgeworCQkvKgorCQkgKiByZXN0YXJ0IHRoZSB0aW1lcgorCQkgKi8KKwkJZXhwZWN0X2Nsb3NlID0gMDsKKworCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisJCQljaGFyIGM7CisKKwkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpIHsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWlmIChjID09ICdWJykgeworCQkJCWV4cGVjdF9jbG9zZSA9IDQyOworCQkJfQorCQl9CisJCXNid2RvZ19wZXQodXNlcl9kb2cpOworCX0KKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgc2J3ZG9nX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldCA9IC1FTk9UVFk7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBfX3VzZXIgKnAgPSBhcmdwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpID8gLUVGQVVMVCA6IDA7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXQgPSBwdXRfdXNlcigwLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCXJldCA9IGdldF91c2VyKHRpbWUsIHApOworCQlpZiAocmV0KSB7CisJCQlicmVhazsKKwkJfQorCisJCXRpbWUgKj0gMTAwMDAwMDsKKwkJaWYgKHRpbWUgPiAweDdmZmZmZlVMKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJdGltZW91dCA9IHRpbWU7CisJCXNid2RvZ19zZXQodXNlcl9kb2csIHRpbWVvdXQpOworCQlzYndkb2dfcGV0KHVzZXJfZG9nKTsKKworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJLyoKKwkJICogZ2V0IHRoZSByZW1haW5pbmcgY291bnQgZnJvbSB0aGUgLi4uIGNvdW50IHJlZ2lzdGVyCisJCSAqIHdoaWNoIGlzIDEqOCBiZWZvcmUgdGhlIGNvbmZpZyByZWdpc3RlcgorCQkgKi8KKwkJcmV0ID0gcHV0X3VzZXIoX19yYXdfcmVhZHEodXNlcl9kb2cgLSA4KSAvIDEwMDAwMDAsIHApOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQlzYndkb2dfcGV0KHVzZXJfZG9nKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKglOb3RpZmllciBmb3Igc3lzdGVtIGRvd24KKyAqLworc3RhdGljIGludAorc2J3ZG9nX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKmVyZikKK3sKKwlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKSB7CisJCS8qCisJCSAqIHNpdCBhbmQgc2l0CisJCSAqLworCQlfX3Jhd193cml0ZWIoMCwgdXNlcl9kb2cpOworCQlfX3Jhd193cml0ZWIoMCwga2Vybl9kb2cpOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2J3ZG9nX2ZvcHMgPQoreworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkud3JpdGUJCT0gc2J3ZG9nX3dyaXRlLAorCS5pb2N0bAkJPSBzYndkb2dfaW9jdGwsCisJLm9wZW4JCT0gc2J3ZG9nX29wZW4sCisJLnJlbGVhc2UJPSBzYndkb2dfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBzYndkb2dfbWlzY2RldiA9Cit7CisJLm1pbm9yCQk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJCT0gJnNid2RvZ19mb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzYndkb2dfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBzYndkb2dfbm90aWZ5X3N5cywKK307CisKKy8qCisgKiBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqIGRvZXNuJ3QgZG8gYSB3aG9sZSBsb3QgZm9yIHVzZXIsIGJ1dCBvaCBzbyBjbGV2ZXJseSB3cml0dGVuIHNvIGtlcm5lbAorICogY29kZSBjYW4gdXNlIGl0IHRvIHJlLXVwIHRoZSB3YXRjaGRvZywgdGhlcmVieSBzYXZpbmcgdGhlIGtlcm5lbCBmcm9tCisgKiBoYXZpbmcgdG8gY3JlYXRlIGFuZCBtYWludGFpbiBhIHRpbWVyLCBqdXN0IHRvIHRpY2tsZSBhbm90aGVyIHRpbWVyLAorICogd2hpY2ggaXMganVzdCBzbyB3cm9uZy4KKyAqLworaXJxcmV0dXJuX3Qgc2J3ZG9nX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgd2RfaW5pdDsKKwljaGFyICp3ZF9jZmdfcmVnID0gKGNoYXIgKilhZGRyOworCXU4IGNmZzsKKworCWNmZyA9IF9fcmF3X3JlYWRiKHdkX2NmZ19yZWcpOworCXdkX2luaXQgPSBfX3Jhd19yZWFkcSh3ZF9jZmdfcmVnIC0gOCkgJiAweDdmZmZmZjsKKworCS8qCisJICogaWYgaXQncyB0aGUgc2Vjb25kIHdhdGNoZG9nIHRpbWVyLCBpdCdzIGZvciB0aG9zZSB1c2VycworCSAqLworCWlmICh3ZF9jZmdfcmVnID09IHVzZXJfZG9nKSB7CisJCXByaW50ayhLRVJOX0NSSVQKKwkJCSIlcyBpbiBkYW5nZXIgb2YgaW5pdGlhdGluZyBzeXN0ZW0gcmVzZXQgaW4gJWxkLiUwMWxkIHNlY29uZHNcbiIsCisJCQlpZGVudC5pZGVudGl0eSwgd2RfaW5pdCAvIDEwMDAwMDAsICh3ZF9pbml0IC8gMTAwMDAwKSAlIDEwKTsKKwl9IGVsc2UgeworCQljZmcgfD0gMTsKKwl9CisKKwlfX3Jhd193cml0ZWIoY2ZnLCB3ZF9jZmdfcmVnKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2luaXQgc2J3ZG9nX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiByZWdpc3RlciBhIHJlYm9vdCBub3RpZmllcgorCSAqLworCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmc2J3ZG9nX25vdGlmaWVyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLAorCQkJaWRlbnQuaWRlbnRpdHksIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBnZXQgdGhlIHJlc291cmNlcworCSAqLworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnNid2RvZ19taXNjZGV2KTsKKwlpZiAocmV0ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRpbWVvdXQgaXMgJWxkLiVsZCBzZWNzXG4iLCBpZGVudC5pZGVudGl0eSwKKwkJCXRpbWVvdXQgLyAxMDAwMDAwLCAodGltZW91dCAvIDEwMDAwMCkgJSAxMCk7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoMSwgc2J3ZG9nX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAorCQlpZGVudC5pZGVudGl0eSwgKHZvaWQgKil1c2VyX2RvZyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgMSAtICVkXG4iLCBpZGVudC5pZGVudGl0eSwKKwkJCXJldCk7CisJCW1pc2NfZGVyZWdpc3Rlcigmc2J3ZG9nX21pc2NkZXYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYndkb2dfZXhpdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3Rlcigmc2J3ZG9nX21pc2NkZXYpOworfQorCittb2R1bGVfaW5pdChzYndkb2dfaW5pdCk7Cittb2R1bGVfZXhpdChzYndkb2dfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFuZHJldyBTaGFycCA8YW5keS5zaGFycEBvbnN0b3IuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTaUJ5dGUgV2F0Y2hkb2ciKTsKKworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIHVsb25nLCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModGltZW91dCwKKwkiV2F0Y2hkb2cgdGltZW91dCBpbiBtaWNyb3NlY29uZHMgKG1heC9kZWZhdWx0IDgzODg2MDcgb3IgOC4zaXNoIHNlY3MpIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKKworLyoKKyAqIGV4YW1wbGUgY29kZSB0aGF0IGNhbiBiZSBwdXQgaW4gYSBwbGF0Zm9ybSBjb2RlIGFyZWEgdG8gdXRpbGl6ZSB0aGUKKyAqIGZpcnN0IHdhdGNoZG9nIHRpbWVyIGZvciB0aGUga2VybmVscyBvd24gcHVycG9zZS4KKworIHZvaWQKK3BsYXRmb3JtX3dkX3NldHVwKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKDAsIHNid2RvZ19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKKwkJIktlcm5lbCBXYXRjaGRvZyIsIElPQUREUihBX1NDRF9XRE9HX0NGR18wKSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9DUklUICJXYXRjaGRvZyBJUlEgemVybygwKSBmYWlsZWQgdG8gYmUgcmVxdWVzdGVkIC0gJWRcbiIsCisJCQlyZXQpOworCX0KK30KKworCisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCmluZGV4IDMyY2NkN2MuLjM1Y2RkZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYwpAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2h3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2h3ZHQuYwppbmRleCA2MWRkZTg2Li4xMjc3ZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zaHdkdC5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciA+PiBQQUdFX1NISUZULAogCQkJICAgICAgIFBBR0VfU0laRSwgdm1hLT52bV9wYWdlX3Byb3QpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBpb19yZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCmluZGV4IDMyOGIzYzcuLjU3Y2VmZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCkBAIC0yNzQsMyArMjc0LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiVFh4OSBXYXRjaGRvZyBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06dHh4OXdkdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYyBiL2RyaXZlcnMveGVuL2dyYW50LXRhYmxlLmMKaW5kZXggZWE5NGRiYS4uZDg1ZGM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYworKysgYi9kcml2ZXJzL3hlbi9ncmFudC10YWJsZS5jCkBAIC0zODEsMTEgKzM4MSwxNSBAQAogc3RhdGljIGludCBncm93X2dudHRhYl9saXN0KHVuc2lnbmVkIGludCBtb3JlX2ZyYW1lcykKIHsKIAl1bnNpZ25lZCBpbnQgbmV3X25yX2dyYW50X2ZyYW1lcywgZXh0cmFfZW50cmllcywgaTsKKwl1bnNpZ25lZCBpbnQgbnJfZ2xpc3RfZnJhbWVzLCBuZXdfbnJfZ2xpc3RfZnJhbWVzOwogCiAJbmV3X25yX2dyYW50X2ZyYW1lcyA9IG5yX2dyYW50X2ZyYW1lcyArIG1vcmVfZnJhbWVzOwogCWV4dHJhX2VudHJpZXMgICAgICAgPSBtb3JlX2ZyYW1lcyAqIEdSRUZTX1BFUl9HUkFOVF9GUkFNRTsKIAotCWZvciAoaSA9IG5yX2dyYW50X2ZyYW1lczsgaSA8IG5ld19ucl9ncmFudF9mcmFtZXM7IGkrKykgeworCW5yX2dsaXN0X2ZyYW1lcyA9IChucl9ncmFudF9mcmFtZXMgKiBHUkVGU19QRVJfR1JBTlRfRlJBTUUgKyBSUFAgLSAxKSAvIFJQUDsKKwluZXdfbnJfZ2xpc3RfZnJhbWVzID0KKwkJKG5ld19ucl9ncmFudF9mcmFtZXMgKiBHUkVGU19QRVJfR1JBTlRfRlJBTUUgKyBSUFAgLSAxKSAvIFJQUDsKKwlmb3IgKGkgPSBucl9nbGlzdF9mcmFtZXM7IGkgPCBuZXdfbnJfZ2xpc3RfZnJhbWVzOyBpKyspIHsKIAkJZ250dGFiX2xpc3RbaV0gPSAoZ3JhbnRfcmVmX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7CiAJCWlmICghZ250dGFiX2xpc3RbaV0pCiAJCQlnb3RvIGdyb3dfbm9tZW07CkBAIC00MDcsNyArNDExLDcgQEAKIAlyZXR1cm4gMDsKIAogZ3Jvd19ub21lbToKLQlmb3IgKCA7IGkgPj0gbnJfZ3JhbnRfZnJhbWVzOyBpLS0pCisJZm9yICggOyBpID49IG5yX2dsaXN0X2ZyYW1lczsgaS0tKQogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGdudHRhYl9saXN0W2ldKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTUzMCw3ICs1MzQsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgZ250dGFiX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgbWF4X25yX2dsaXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgbWF4X25yX2dsaXN0X2ZyYW1lcywgbnJfZ2xpc3RfZnJhbWVzOwogCXVuc2lnbmVkIGludCBucl9pbml0X2dyZWZzOwogCiAJaWYgKCFpc19ydW5uaW5nX29uX3hlbigpKQpAQCAtNTQzLDE1ICs1NDcsMTUgQEAKIAkgKiBncmFudCByZWZlcmVuY2UgZnJlZSBsaXN0IG9uIHRoZSBjdXJyZW50IGh5cGVydmlzb3IuCiAJICovCiAJbWF4X25yX2dsaXN0X2ZyYW1lcyA9IChib290X21heF9ucl9ncmFudF9mcmFtZXMgKgotCQkJICAgICAgIEdSRUZTX1BFUl9HUkFOVF9GUkFNRSAvCi0JCQkgICAgICAgKFBBR0VfU0laRSAvIHNpemVvZihncmFudF9yZWZfdCkpKTsKKwkJCSAgICAgICBHUkVGU19QRVJfR1JBTlRfRlJBTUUgLyBSUFApOwogCiAJZ250dGFiX2xpc3QgPSBrbWFsbG9jKG1heF9ucl9nbGlzdF9mcmFtZXMgKiBzaXplb2YoZ3JhbnRfcmVmX3QgKiksCiAJCQkgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoZ250dGFiX2xpc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfZ3JhbnRfZnJhbWVzOyBpKyspIHsKKwlucl9nbGlzdF9mcmFtZXMgPSAobnJfZ3JhbnRfZnJhbWVzICogR1JFRlNfUEVSX0dSQU5UX0ZSQU1FICsgUlBQIC0gMSkgLyBSUFA7CisJZm9yIChpID0gMDsgaSA8IG5yX2dsaXN0X2ZyYW1lczsgaSsrKSB7CiAJCWdudHRhYl9saXN0W2ldID0gKGdyYW50X3JlZl90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAoZ250dGFiX2xpc3RbaV0gPT0gTlVMTCkKIAkJCWdvdG8gaW5pX25vbWVtOwpkaWZmIC0tZ2l0IGEvZnMvOXAvZmlkLmMgYi9mcy85cC9maWQuYwppbmRleCBkZmViZGJlLi4zMDMxZTMyIDEwMDY0NAotLS0gYS9mcy85cC9maWQuYworKysgYi9mcy85cC9maWQuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CiAjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgogCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBkNzMxMjgyLi4wMjhhZTM4IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTQ0NCw2ICs0NDQsMzIgQEAKIAkgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE9DRlMyLCBzZWUgdGhlIGZpbGUKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIudHh0Pi4KIAorY29uZmlnIE9DRlMyX0ZTX08yQ0IKKwl0cmlzdGF0ZSAiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nIgorCWRlcGVuZHMgb24gT0NGUzJfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBPQ0ZTMiBpbmNsdWRlcyBhIHNpbXBsZSBrZXJuZWxzcGFjZSBjbHVzdGVyaW5nIHBhY2thZ2UsIHRoZSBPQ0ZTMgorCSAgQ2x1c3RlciBCYXNlLiAgSXQgb25seSByZXF1aXJlcyBhIHZlcnkgc21hbGwgdXNlcnNwYWNlIGNvbXBvbmVudAorCSAgdG8gY29uZmlndXJlIGl0LiBUaGlzIGNvbWVzIHdpdGggdGhlIHN0YW5kYXJkIG9jZnMyLXRvb2xzIHBhY2thZ2UuCisJICBPMkNCIGlzIGxpbWl0ZWQgdG8gbWFpbnRhaW5pbmcgYSBjbHVzdGVyIGZvciBPQ0ZTMiBmaWxlIHN5c3RlbXMuCisJICBJdCBjYW5ub3QgbWFuYWdlIGFueSBvdGhlciBjbHVzdGVyIGFwcGxpY2F0aW9ucy4KKworCSAgSXQgaXMgYWx3YXlzIHNhZmUgdG8gc2F5IFkgaGVyZSwgYXMgdGhlIGNsdXN0ZXJpbmcgbWV0aG9kIGlzCisJICBydW4tdGltZSBzZWxlY3RhYmxlLgorCitjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVIKKwl0cmlzdGF0ZSAiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmciCisJZGVwZW5kcyBvbiBPQ0ZTMl9GUyAmJiBETE0KKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiB3aWxsIGFsbG93IE9DRlMyIHRvIHVzZSB1c2Vyc3BhY2UgY2x1c3RlcmluZyBzZXJ2aWNlcworCSAgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgRExNIGluIGZzL2RsbS4gIElmIHlvdSBhcmUgdXNpbmcgYQorCSAgdXNlcnNwYWNlIGNsdXN0ZXIgbWFuYWdlciwgc2F5IFkgaGVyZS4KKworCSAgSXQgaXMgc2FmZSB0byBzYXkgWSwgYXMgdGhlIGNsdXN0ZXJpbmcgbWV0aG9kIGlzIHJ1bi10aW1lCisJICBzZWxlY3RhYmxlLgorCiBjb25maWcgT0NGUzJfREVCVUdfTUFTS0xPRwogCWJvb2wgIk9DRlMyIGxvZ2dpbmcgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9DRlMyX0ZTCkBAIC0xNzQ0LDEwICsxNzcwLDEwIEBACiAJICBJZiB5b3Ugd2FudCB5b3VyIExpbnV4IGJveCB0byBtb3VudCBpdHMgd2hvbGUgcm9vdCBmaWxlIHN5c3RlbSAodGhlCiAJICBvbmUgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGZyb20gc29tZSBvdGhlciBjb21wdXRlciBvdmVyIHRoZQogCSAgbmV0IHZpYSBORlMgKHByZXN1bWFibHkgYmVjYXVzZSB5b3VyIGJveCBkb2Vzbid0IGhhdmUgYSBoYXJkIGRpc2spLAotCSAgc2F5IFkuIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuIEl0IGlzCi0JICBsaWtlbHkgdGhhdCBpbiB0aGlzIGNhc2UsIHlvdSBhbHNvIHdhbnQgdG8gc2F5IFkgdG8gIktlcm5lbCBsZXZlbCBJUAotCSAgYXV0b2NvbmZpZ3VyYXRpb24iIHNvIHRoYXQgeW91ciBib3ggY2FuIGRpc2NvdmVyIGl0cyBuZXR3b3JrIGFkZHJlc3MKLQkgIGF0IGJvb3QgdGltZS4KKwkgIHNheSBZLiBSZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQ+IGZvcgorCSAgZGV0YWlscy4gSXQgaXMgbGlrZWx5IHRoYXQgaW4gdGhpcyBjYXNlLCB5b3UgYWxzbyB3YW50IHRvIHNheSBZIHRvCisJICAiS2VybmVsIGxldmVsIElQIGF1dG9jb25maWd1cmF0aW9uIiBzbyB0aGF0IHlvdXIgYm94IGNhbiBkaXNjb3ZlcgorCSAgaXRzIG5ldHdvcmsgYWRkcmVzcyBhdCBib290IHRpbWUuCiAKIAkgIE1vc3QgcGVvcGxlIHNheSBOIGhlcmUuCiAKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXQKaW5kZXggYjVjM2I2MS4uODUzODQ1YSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZy5iaW5mbXQKKysrIGIvZnMvS2NvbmZpZy5iaW5mbXQKQEAgLTYyLDcgKzYyLDcgQEAKIGNvbmZpZyBCSU5GTVRfQU9VVAogCXRyaXN0YXRlICJLZXJuZWwgc3VwcG9ydCBmb3IgYS5vdXQgYW5kIEVDT0ZGIGJpbmFyaWVzIgogCWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19BT1VUICYmIFwKLQkJKFg4Nl8zMiB8fCBBTFBIQSB8fCBBUk0gfHwgTTY4SyB8fCBTUEFSQzMyKQorCQkoWDg2XzMyIHx8IEFMUEhBIHx8IEFSTSB8fCBNNjhLKQogCS0tLWhlbHAtLS0KIAkgIEEub3V0IChBc3NlbWJsZXIuT1VUcHV0KSBpcyBhIHNldCBvZiBmb3JtYXRzIGZvciBsaWJyYXJpZXMgYW5kCiAJICBleGVjdXRhYmxlcyB1c2VkIGluIHRoZSBlYXJsaWVzdCB2ZXJzaW9ucyBvZiBVTklYLiAgTGludXggdXNlZApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NlbGwuYyBiL2ZzL2Fmcy9jZWxsLmMKaW5kZXggOTcwZDM4Zi4uNTg0YmIwZiAxMDA2NDQKLS0tIGEvZnMvYWZzL2NlbGwuYworKysgYi9mcy9hZnMvY2VsbC5jCkBAIC0xMjcsMTQgKzEyNywyMSBAQAogCiAJX2VudGVyKCIlcywlcyIsIG5hbWUsIHZsbGlzdCk7CiAKKwlkb3duX3dyaXRlKCZhZnNfY2VsbHNfc2VtKTsKKwlyZWFkX2xvY2soJmFmc19jZWxsc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNlbGwsICZhZnNfY2VsbHMsIGxpbmspIHsKKwkJaWYgKHN0cmNhc2VjbXAoY2VsbC0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCWdvdG8gZHVwbGljYXRlX25hbWU7CisJfQorCXJlYWRfdW5sb2NrKCZhZnNfY2VsbHNfbG9jayk7CisKIAljZWxsID0gYWZzX2NlbGxfYWxsb2MobmFtZSwgdmxsaXN0KTsKIAlpZiAoSVNfRVJSKGNlbGwpKSB7CiAJCV9sZWF2ZSgiID0gJWxkIiwgUFRSX0VSUihjZWxsKSk7CisJCXVwX3dyaXRlKCZhZnNfY2VsbHNfc2VtKTsKIAkJcmV0dXJuIGNlbGw7CiAJfQogCi0JZG93bl93cml0ZSgmYWZzX2NlbGxzX3NlbSk7Ci0KIAkvKiBhZGQgYSBwcm9jIGRpcmVjdG9yeSBmb3IgdGhpcyBjZWxsICovCiAJcmV0ID0gYWZzX3Byb2NfY2VsbF9zZXR1cChjZWxsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTE2Nyw2ICsxNzQsMTEgQEAKIAlrZnJlZShjZWxsKTsKIAlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOworCitkdXBsaWNhdGVfbmFtZToKKwlyZWFkX3VubG9jaygmYWZzX2NlbGxzX2xvY2spOworCXVwX3dyaXRlKCZhZnNfY2VsbHNfc2VtKTsKKwlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNWNhMzYyNS4uZWVjNDFjNyAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKKysrIGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTU3Myw3ICs1NzMsNiBAQAogCiBleHRlcm4gaW50IGFmc19tbnRwdF9jaGVja19zeW1saW5rKHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqKTsKIGV4dGVybiB2b2lkIGFmc19tbnRwdF9raWxsX3RpbWVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgYWZzX3Vtb3VudF9iZWdpbihzdHJ1Y3QgdmZzbW91bnQgKiwgaW50KTsKIAogLyoKICAqIHByb2MuYwpAQCAtNzUwLDcgKzc0OSw3IEBACiBleHRlcm4gdW5zaWduZWQgYWZzX2RlYnVnOwogCiAjZGVmaW5lIGRiZ3ByaW50ayhGTVQsLi4uKSBcCi0JcHJpbnRrKCJbJXglLTYuNnNdICJGTVQiXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGN1cnJlbnQtPmNvbW0gLCMjX19WQV9BUkdTX18pCisJcHJpbnRrKCJbJS02LjZzXSAiRk1UIlxuIiwgY3VycmVudC0+Y29tbSAsIyNfX1ZBX0FSR1NfXykKIAogLyogbWFrZSBzdXJlIHdlIG1haW50YWluIHRoZSBmb3JtYXQgc3RyaW5ncywgZXZlbiB3aGVuIGRlYnVnZ2luZyBpcyBkaXNhYmxlZCAqLwogc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDEsMikpKQpkaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmMKaW5kZXggMGY2MGY2Yi4uMmQzZTVkNCAxMDA2NDQKLS0tIGEvZnMvYWZzL21haW4uYworKysgYi9mcy9hZnMvbWFpbi5jCkBAIC0yMiw3ICsyMiw3IEBACiAKIHVuc2lnbmVkIGFmc19kZWJ1ZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYWZzX2RlYnVnLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFmc19kZWJ1ZywgIkFGUyBkZWJ1Z2dpbmcgbWFzayIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFGUyBkZWJ1Z2dpbmcgbWFzayIpOwogCiBzdGF0aWMgY2hhciAqcm9vdGNlbGw7CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tbnRwdC5jIGIvZnMvYWZzL21udHB0LmMKaW5kZXggYTM1MTBiOC4uMmY1NTAzOSAxMDA2NDQKLS0tIGEvZnMvYWZzL21udHB0LmMKKysrIGIvZnMvYWZzL21udHB0LmMKQEAgLTI4MywxMSArMjgzLDMgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZhZnNfbW50cHRfZXhwaXJ5X3RpbWVyKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogfQotCi0vKgotICogYmVnaW4gdW5tb3VudCBieSBhdHRlbXB0aW5nIHRvIHJlbW92ZSBhbGwgYXV0b21vdW50ZWQgbW91bnRwb2ludHMgd2UgYWRkZWQKLSAqLwotdm9pZCBhZnNfdW1vdW50X2JlZ2luKHN0cnVjdCB2ZnNtb3VudCAqdmZzbW50LCBpbnQgZmxhZ3MpCi17Ci0Jc2hyaW5rX3N1Ym1vdW50cyh2ZnNtbnQsICZhZnNfdmZzbW91bnRzKTsKLX0KZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zdXBlci5jIGIvZnMvYWZzL3N1cGVyLmMKaW5kZXggMzZiYmNlNC4uNGI1NzJiOCAxMDA2NDQKLS0tIGEvZnMvYWZzL3N1cGVyLmMKKysrIGIvZnMvYWZzL3N1cGVyLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAkud3JpdGVfaW5vZGUJPSBhZnNfd3JpdGVfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBhZnNfZGVzdHJveV9pbm9kZSwKIAkuY2xlYXJfaW5vZGUJPSBhZnNfY2xlYXJfaW5vZGUsCi0JLnVtb3VudF9iZWdpbgk9IGFmc191bW91bnRfYmVnaW4sCiAJLnB1dF9zdXBlcgk9IGFmc19wdXRfc3VwZXIsCiAJLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggYjc0YzU2Ny4uMjI4MzY4NiAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKKysrIGIvZnMvYWlvLmMKQEAgLTkzNiwxNCArOTM2LDYgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgdXNlciBhc2tlZCB1cyB0byBkZWxpdmVyIHRoZSByZXN1bHQgdGhyb3VnaCBhbgotCSAqIGV2ZW50ZmQuIFRoZSBldmVudGZkX3NpZ25hbCgpIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgY2FsbGVkCi0JICogZnJvbSBJUlEgY29udGV4dC4KLQkgKi8KLQlpZiAoIUlTX0VSUihpb2NiLT5raV9ldmVudGZkKSkKLQkJZXZlbnRmZF9zaWduYWwoaW9jYi0+a2lfZXZlbnRmZCwgMSk7Ci0KIAlpbmZvID0gJmN0eC0+cmluZ19pbmZvOwogCiAJLyogYWRkIGEgY29tcGxldGlvbiBldmVudCB0byB0aGUgcmluZyBidWZmZXIuCkBAIC05OTIsMTAgKzk4NCwyNyBAQAogCWt1bm1hcF9hdG9taWMocmluZywgS01fSVJRMSk7CiAKIAlwcl9kZWJ1ZygiYWRkZWQgdG8gcmluZyAlcCBhdCBbJWx1XVxuIiwgaW9jYiwgdGFpbCk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSB1c2VyIGFza2VkIHVzIHRvIGRlbGl2ZXIgdGhlIHJlc3VsdCB0aHJvdWdoIGFuCisJICogZXZlbnRmZC4gVGhlIGV2ZW50ZmRfc2lnbmFsKCkgZnVuY3Rpb24gaXMgc2FmZSB0byBiZSBjYWxsZWQKKwkgKiBmcm9tIElSUSBjb250ZXh0LgorCSAqLworCWlmICghSVNfRVJSKGlvY2ItPmtpX2V2ZW50ZmQpKQorCQlldmVudGZkX3NpZ25hbChpb2NiLT5raV9ldmVudGZkLCAxKTsKKwogcHV0X3JxOgogCS8qIGV2ZXJ5dGhpbmcgdHVybmVkIG91dCB3ZWxsLCBkaXNwb3NlIG9mIHRoZSBhaW9jYi4gKi8KIAlyZXQgPSBfX2Fpb19wdXRfcmVxKGN0eCwgaW9jYik7CiAKKwkvKgorCSAqIFdlIGhhdmUgdG8gb3JkZXIgb3VyIHJpbmdfaW5mbyB0YWlsIHN0b3JlIGFib3ZlIGFuZCB0ZXN0CisJICogb2YgdGhlIHdhaXQgbGlzdCBiZWxvdyBvdXRzaWRlIHRoZSB3YWl0IGxvY2suICBUaGlzIGlzCisJICogbGlrZSBpbiB3YWtlX3VwX2JpdCgpIHdoZXJlIGNsZWFyaW5nIGEgYml0IGhhcyB0byBiZQorCSAqIG9yZGVyZWQgd2l0aCB0aGUgdW5sb2NrZWQgdGVzdC4KKwkgKi8KKwlzbXBfbWIoKTsKKwogCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjdHgtPndhaXQpKQogCQl3YWtlX3VwKCZjdHgtPndhaXQpOwogCkBAIC0xNzgyLDYgKzE3OTEsNyBAQAogCQlwdXRfaW9jdHgoaW9jdHgpOwogCX0KIAorCWFzbWxpbmthZ2VfcHJvdGVjdCg1LCByZXQsIGN0eF9pZCwgbWluX25yLCBuciwgZXZlbnRzLCB0aW1lb3V0KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9hbm9uX2lub2Rlcy5jIGIvZnMvYW5vbl9pbm9kZXMuYwppbmRleCAyMzMyMTg4Li5mNDJiZTA2IDEwMDY0NAotLS0gYS9mcy9hbm9uX2lub2Rlcy5jCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTgxLDEzICs4MSwxMCBAQAogCiAJaWYgKElTX0VSUihhbm9uX2lub2RlX2lub2RlKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JZmlsZSA9IGdldF9lbXB0eV9maWxwKCk7Ci0JaWYgKCFmaWxlKQotCQlyZXR1cm4gLUVORklMRTsKIAogCWVycm9yID0gZ2V0X3VudXNlZF9mZCgpOwogCWlmIChlcnJvciA8IDApCi0JCWdvdG8gZXJyX3B1dF9maWxwOworCQlyZXR1cm4gZXJyb3I7CiAJZmQgPSBlcnJvcjsKIAogCS8qCkBAIC0xMTQsMTQgKzExMSwxNSBAQAogCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBhbm9uX2lub2RlX2lub2RlKTsKIAotCWZpbGUtPmZfcGF0aC5tbnQgPSBtbnRnZXQoYW5vbl9pbm9kZV9tbnQpOwotCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBkZW50cnk7CisJZXJyb3IgPSAtRU5GSUxFOworCWZpbGUgPSBhbGxvY19maWxlKGFub25faW5vZGVfbW50LCBkZW50cnksCisJCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgZm9wcyk7CisJaWYgKCFmaWxlKQorCQlnb3RvIGVycl9kcHV0OwogCWZpbGUtPmZfbWFwcGluZyA9IGFub25faW5vZGVfaW5vZGUtPmlfbWFwcGluZzsKIAogCWZpbGUtPmZfcG9zID0gMDsKIAlmaWxlLT5mX2ZsYWdzID0gT19SRFdSOwotCWZpbGUtPmZfb3AgPSBmb3BzOwotCWZpbGUtPmZfbW9kZSA9IEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURTsKIAlmaWxlLT5mX3ZlcnNpb24gPSAwOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHByaXY7CiAKQEAgLTEzMiwxMCArMTMwLDEwIEBACiAJKnBmaWxlID0gZmlsZTsKIAlyZXR1cm4gMDsKIAorZXJyX2RwdXQ6CisJZHB1dChkZW50cnkpOwogZXJyX3B1dF91bnVzZWRfZmQ6CiAJcHV0X3VudXNlZF9mZChmZCk7Ci1lcnJfcHV0X2ZpbHA6Ci0JcHV0X2ZpbHAoZmlsZSk7CiAJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYW5vbl9pbm9kZV9nZXRmZCk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggNDFhOTU4YS4uNWUxYTRmYiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMTQyNCw2ICsxNDI0LDE4IEBACiAJaW50IHRocmVhZF9ub3RlczsKIH07CiAKKy8qCisgKiBXaGVuIGEgcmVnc2V0IGhhcyBhIHdyaXRlYmFjayBob29rLCB3ZSBjYWxsIGl0IG9uIGVhY2ggdGhyZWFkIGJlZm9yZQorICogZHVtcGluZyB1c2VyIG1lbW9yeS4gIE9uIHJlZ2lzdGVyIHdpbmRvdyBtYWNoaW5lcywgdGhpcyBtYWtlcyBzdXJlIHRoZQorICogdXNlciBtZW1vcnkgYmFja2luZyB0aGUgcmVnaXN0ZXIgZGF0YSBpcyB1cCB0byBkYXRlIGJlZm9yZSB3ZSByZWFkIGl0LgorICovCitzdGF0aWMgdm9pZCBkb190aHJlYWRfcmVnc2V0X3dyaXRlYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0KQoreworCWlmIChyZWdzZXQtPndyaXRlYmFjaykKKwkJcmVnc2V0LT53cml0ZWJhY2sodGFzaywgcmVnc2V0LCAxKTsKK30KKwogc3RhdGljIGludCBmaWxsX3RocmVhZF9jb3JlX2luZm8oc3RydWN0IGVsZl90aHJlYWRfY29yZV9pbmZvICp0LAogCQkJCSBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdmlldywKIAkJCQkgbG9uZyBzaWduciwgc2l6ZV90ICp0b3RhbCkKQEAgLTE0NDUsNiArMTQ1Nyw4IEBACiAJCSAgc2l6ZW9mKHQtPnByc3RhdHVzKSwgJnQtPnByc3RhdHVzKTsKIAkqdG90YWwgKz0gbm90ZXNpemUoJnQtPm5vdGVzWzBdKTsKIAorCWRvX3RocmVhZF9yZWdzZXRfd3JpdGViYWNrKHQtPnRhc2ssICZ2aWV3LT5yZWdzZXRzWzBdKTsKKwogCS8qCiAJICogRWFjaCBvdGhlciByZWdzZXQgbWlnaHQgZ2VuZXJhdGUgYSBub3RlIHRvby4gIEZvciBlYWNoIHJlZ3NldAogCSAqIHRoYXQgaGFzIG5vIGNvcmVfbm90ZV90eXBlIG9yIGlzIGluYWN0aXZlLCB3ZSBsZWF2ZSB0LT5ub3Rlc1tpXQpAQCAtMTQ1Miw2ICsxNDY2LDcgQEAKIAkgKi8KIAlmb3IgKGkgPSAxOyBpIDwgdmlldy0+bjsgKytpKSB7CiAJCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0ID0gJnZpZXctPnJlZ3NldHNbaV07CisJCWRvX3RocmVhZF9yZWdzZXRfd3JpdGViYWNrKHQtPnRhc2ssIHJlZ3NldCk7CiAJCWlmIChyZWdzZXQtPmNvcmVfbm90ZV90eXBlICYmCiAJCSAgICAoIXJlZ3NldC0+YWN0aXZlIHx8IHJlZ3NldC0+YWN0aXZlKHQtPnRhc2ssIHJlZ3NldCkpKSB7CiAJCQlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCAyNDJlNDA5Li42ZTBiNmY2IDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtNDQ0LDIyICs0NDQsMjcgQEAKIAogc3RydWN0IGJpb19tYXBfZGF0YSB7CiAJc3RydWN0IGJpb192ZWMgKmlvdmVjczsKLQl2b2lkIF9fdXNlciAqdXNlcnB0cjsKKwlpbnQgbnJfc2d2ZWNzOworCXN0cnVjdCBzZ19pb3ZlYyAqc2d2ZWNzOwogfTsKIAotc3RhdGljIHZvaWQgYmlvX3NldF9tYXBfZGF0YShzdHJ1Y3QgYmlvX21hcF9kYXRhICpibWQsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIGJpb19zZXRfbWFwX2RhdGEoc3RydWN0IGJpb19tYXBfZGF0YSAqYm1kLCBzdHJ1Y3QgYmlvICpiaW8sCisJCQkgICAgIHN0cnVjdCBzZ19pb3ZlYyAqaW92LCBpbnQgaW92X2NvdW50KQogewogCW1lbWNweShibWQtPmlvdmVjcywgYmlvLT5iaV9pb192ZWMsIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgKiBiaW8tPmJpX3ZjbnQpOworCW1lbWNweShibWQtPnNndmVjcywgaW92LCBzaXplb2Yoc3RydWN0IHNnX2lvdmVjKSAqIGlvdl9jb3VudCk7CisJYm1kLT5ucl9zZ3ZlY3MgPSBpb3ZfY291bnQ7CiAJYmlvLT5iaV9wcml2YXRlID0gYm1kOwogfQogCiBzdGF0aWMgdm9pZCBiaW9fZnJlZV9tYXBfZGF0YShzdHJ1Y3QgYmlvX21hcF9kYXRhICpibWQpCiB7CiAJa2ZyZWUoYm1kLT5pb3ZlY3MpOworCWtmcmVlKGJtZC0+c2d2ZWNzKTsKIAlrZnJlZShibWQpOwogfQogCi1zdGF0aWMgc3RydWN0IGJpb19tYXBfZGF0YSAqYmlvX2FsbG9jX21hcF9kYXRhKGludCBucl9zZWdzKQorc3RhdGljIHN0cnVjdCBiaW9fbWFwX2RhdGEgKmJpb19hbGxvY19tYXBfZGF0YShpbnQgbnJfc2VncywgaW50IGlvdl9jb3VudCkKIHsKIAlzdHJ1Y3QgYmlvX21hcF9kYXRhICpibWQgPSBrbWFsbG9jKHNpemVvZigqYm1kKSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTQ2NywxMyArNDcyLDcxIEBACiAJCXJldHVybiBOVUxMOwogCiAJYm1kLT5pb3ZlY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgKiBucl9zZWdzLCBHRlBfS0VSTkVMKTsKLQlpZiAoYm1kLT5pb3ZlY3MpCisJaWYgKCFibWQtPmlvdmVjcykgeworCQlrZnJlZShibWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlibWQtPnNndmVjcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ19pb3ZlYykgKiBpb3ZfY291bnQsIEdGUF9LRVJORUwpOworCWlmIChibWQtPnNndmVjcykKIAkJcmV0dXJuIGJtZDsKIAorCWtmcmVlKGJtZC0+aW92ZWNzKTsKIAlrZnJlZShibWQpOwogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IF9fYmlvX2NvcHlfaW92KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHNnX2lvdmVjICppb3YsIGludCBpb3ZfY291bnQsCisJCQkgIGludCB1bmNvcHkpCit7CisJaW50IHJldCA9IDAsIGk7CisJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CisJaW50IGlvdl9pZHggPSAwOworCXVuc2lnbmVkIGludCBpb3Zfb2ZmID0gMDsKKwlpbnQgcmVhZCA9IGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQ7CisKKwlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIGJpbywgaSwgMCkgeworCQljaGFyICpidl9hZGRyID0gcGFnZV9hZGRyZXNzKGJ2ZWMtPmJ2X3BhZ2UpOworCQl1bnNpZ25lZCBpbnQgYnZfbGVuID0gYnZlYy0+YnZfbGVuOworCisJCXdoaWxlIChidl9sZW4gJiYgaW92X2lkeCA8IGlvdl9jb3VudCkgeworCQkJdW5zaWduZWQgaW50IGJ5dGVzOworCQkJY2hhciAqaW92X2FkZHI7CisKKwkJCWJ5dGVzID0gbWluX3QodW5zaWduZWQgaW50LAorCQkJCSAgICAgIGlvdltpb3ZfaWR4XS5pb3ZfbGVuIC0gaW92X29mZiwgYnZfbGVuKTsKKwkJCWlvdl9hZGRyID0gaW92W2lvdl9pZHhdLmlvdl9iYXNlICsgaW92X29mZjsKKworCQkJaWYgKCFyZXQpIHsKKwkJCQlpZiAoIXJlYWQgJiYgIXVuY29weSkKKwkJCQkJcmV0ID0gY29weV9mcm9tX3VzZXIoYnZfYWRkciwgaW92X2FkZHIsCisJCQkJCQkJICAgICBieXRlcyk7CisJCQkJaWYgKHJlYWQgJiYgdW5jb3B5KQorCQkJCQlyZXQgPSBjb3B5X3RvX3VzZXIoaW92X2FkZHIsIGJ2X2FkZHIsCisJCQkJCQkJICAgYnl0ZXMpOworCisJCQkJaWYgKHJldCkKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCX0KKworCQkJYnZfbGVuIC09IGJ5dGVzOworCQkJYnZfYWRkciArPSBieXRlczsKKwkJCWlvdl9hZGRyICs9IGJ5dGVzOworCQkJaW92X29mZiArPSBieXRlczsKKworCQkJaWYgKGlvdltpb3ZfaWR4XS5pb3ZfbGVuID09IGlvdl9vZmYpIHsKKwkJCQlpb3ZfaWR4Kys7CisJCQkJaW92X29mZiA9IDA7CisJCQl9CisJCX0KKworCQlpZiAodW5jb3B5KQorCQkJX19mcmVlX3BhZ2UoYnZlYy0+YnZfcGFnZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKgliaW9fdW5jb3B5X3VzZXIJLQlmaW5pc2ggcHJldmlvdXNseSBtYXBwZWQgYmlvCiAgKglAYmlvOiBiaW8gYmVpbmcgdGVybWluYXRlZApAQCAtNDg0LDU1ICs1NDcsNTYgQEAKIGludCBiaW9fdW5jb3B5X3VzZXIoc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBiaW9fbWFwX2RhdGEgKmJtZCA9IGJpby0+YmlfcHJpdmF0ZTsKLQljb25zdCBpbnQgcmVhZCA9IGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQ7Ci0Jc3RydWN0IGJpb192ZWMgKmJ2ZWM7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldDsKIAotCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpLCAwKSB7Ci0JCWNoYXIgKmFkZHIgPSBwYWdlX2FkZHJlc3MoYnZlYy0+YnZfcGFnZSk7Ci0JCXVuc2lnbmVkIGludCBsZW4gPSBibWQtPmlvdmVjc1tpXS5idl9sZW47CisJcmV0ID0gX19iaW9fY29weV9pb3YoYmlvLCBibWQtPnNndmVjcywgYm1kLT5ucl9zZ3ZlY3MsIDEpOwogCi0JCWlmIChyZWFkICYmICFyZXQgJiYgY29weV90b191c2VyKGJtZC0+dXNlcnB0ciwgYWRkciwgbGVuKSkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0KLQkJX19mcmVlX3BhZ2UoYnZlYy0+YnZfcGFnZSk7Ci0JCWJtZC0+dXNlcnB0ciArPSBsZW47Ci0JfQogCWJpb19mcmVlX21hcF9kYXRhKGJtZCk7CiAJYmlvX3B1dChiaW8pOwogCXJldHVybiByZXQ7CiB9CiAKIC8qKgotICoJYmlvX2NvcHlfdXNlcgktCWNvcHkgdXNlciBkYXRhIHRvIGJpbworICoJYmlvX2NvcHlfdXNlcl9pb3YJLQljb3B5IHVzZXIgZGF0YSB0byBiaW8KICAqCUBxOiBkZXN0aW5hdGlvbiBibG9jayBxdWV1ZQotICoJQHVhZGRyOiBzdGFydCBvZiB1c2VyIGFkZHJlc3MKLSAqCUBsZW46IGxlbmd0aCBpbiBieXRlcworICoJQGlvdjoJdGhlIGlvdmVjLgorICoJQGlvdl9jb3VudDogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpb3ZlYwogICoJQHdyaXRlX3RvX3ZtOiBib29sIGluZGljYXRpbmcgd3JpdGluZyB0byBwYWdlcyBvciBub3QKICAqCiAgKglQcmVwYXJlcyBhbmQgcmV0dXJucyBhIGJpbyBmb3IgaW5kaXJlY3QgdXNlciBpbywgYm91bmNpbmcgZGF0YQogICoJdG8vZnJvbSBrZXJuZWwgcGFnZXMgYXMgbmVjZXNzYXJ5LiBNdXN0IGJlIHBhaXJlZCB3aXRoCiAgKgljYWxsIGJpb191bmNvcHlfdXNlcigpIG9uIGlvIGNvbXBsZXRpb24uCiAgKi8KLXN0cnVjdCBiaW8gKmJpb19jb3B5X3VzZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGxvbmcgdWFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCBsZW4sIGludCB3cml0ZV90b192bSkKK3N0cnVjdCBiaW8gKmJpb19jb3B5X3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3Qgc2dfaW92ZWMgKmlvdiwKKwkJCSAgICAgIGludCBpb3ZfY291bnQsIGludCB3cml0ZV90b192bSkKIHsKLQl1bnNpZ25lZCBsb25nIGVuZCA9ICh1YWRkciArIGxlbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHVhZGRyID4+IFBBR0VfU0hJRlQ7CiAJc3RydWN0IGJpb19tYXBfZGF0YSAqYm1kOwogCXN0cnVjdCBiaW9fdmVjICpidmVjOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBiaW8gKmJpbzsKIAlpbnQgaSwgcmV0OworCWludCBucl9wYWdlcyA9IDA7CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CiAKLQlibWQgPSBiaW9fYWxsb2NfbWFwX2RhdGEoZW5kIC0gc3RhcnQpOworCWZvciAoaSA9IDA7IGkgPCBpb3ZfY291bnQ7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHVhZGRyOworCQl1bnNpZ25lZCBsb25nIGVuZDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydDsKKworCQl1YWRkciA9ICh1bnNpZ25lZCBsb25nKWlvdltpXS5pb3ZfYmFzZTsKKwkJZW5kID0gKHVhZGRyICsgaW92W2ldLmlvdl9sZW4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCQlzdGFydCA9IHVhZGRyID4+IFBBR0VfU0hJRlQ7CisKKwkJbnJfcGFnZXMgKz0gZW5kIC0gc3RhcnQ7CisJCWxlbiArPSBpb3ZbaV0uaW92X2xlbjsKKwl9CisKKwlibWQgPSBiaW9fYWxsb2NfbWFwX2RhdGEobnJfcGFnZXMsIGlvdl9jb3VudCk7CiAJaWYgKCFibWQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JYm1kLT51c2VycHRyID0gKHZvaWQgX191c2VyICopIHVhZGRyOwotCiAJcmV0ID0gLUVOT01FTTsKLQliaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgZW5kIC0gc3RhcnQpOworCWJpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBucl9wYWdlcyk7CiAJaWYgKCFiaW8pCiAJCWdvdG8gb3V0X2JtZDsKIApAQCAtNTY0LDIyICs2MjgsMTIgQEAKIAkgKiBzdWNjZXNzCiAJICovCiAJaWYgKCF3cml0ZV90b192bSkgewotCQljaGFyIF9fdXNlciAqcCA9IChjaGFyIF9fdXNlciAqKSB1YWRkcjsKLQotCQkvKgotCQkgKiBmb3IgYSB3cml0ZSwgY29weSBpbiBkYXRhIHRvIGtlcm5lbCBwYWdlcwotCQkgKi8KLQkJcmV0ID0gLUVGQVVMVDsKLQkJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpKSB7Ci0JCQljaGFyICphZGRyID0gcGFnZV9hZGRyZXNzKGJ2ZWMtPmJ2X3BhZ2UpOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoYWRkciwgcCwgYnZlYy0+YnZfbGVuKSkKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQlwICs9IGJ2ZWMtPmJ2X2xlbjsKLQkJfQorCQlyZXQgPSBfX2Jpb19jb3B5X2lvdihiaW8sIGlvdiwgaW92X2NvdW50LCAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQliaW9fc2V0X21hcF9kYXRhKGJtZCwgYmlvKTsKKwliaW9fc2V0X21hcF9kYXRhKGJtZCwgYmlvLCBpb3YsIGlvdl9jb3VudCk7CiAJcmV0dXJuIGJpbzsKIGNsZWFudXA6CiAJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpKQpAQCAtNTkxLDYgKzY0NSwyOCBAQAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKKy8qKgorICoJYmlvX2NvcHlfdXNlcgktCWNvcHkgdXNlciBkYXRhIHRvIGJpbworICoJQHE6IGRlc3RpbmF0aW9uIGJsb2NrIHF1ZXVlCisgKglAdWFkZHI6IHN0YXJ0IG9mIHVzZXIgYWRkcmVzcworICoJQGxlbjogbGVuZ3RoIGluIGJ5dGVzCisgKglAd3JpdGVfdG9fdm06IGJvb2wgaW5kaWNhdGluZyB3cml0aW5nIHRvIHBhZ2VzIG9yIG5vdAorICoKKyAqCVByZXBhcmVzIGFuZCByZXR1cm5zIGEgYmlvIGZvciBpbmRpcmVjdCB1c2VyIGlvLCBib3VuY2luZyBkYXRhCisgKgl0by9mcm9tIGtlcm5lbCBwYWdlcyBhcyBuZWNlc3NhcnkuIE11c3QgYmUgcGFpcmVkIHdpdGgKKyAqCWNhbGwgYmlvX3VuY29weV91c2VyKCkgb24gaW8gY29tcGxldGlvbi4KKyAqLworc3RydWN0IGJpbyAqYmlvX2NvcHlfdXNlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyB1YWRkciwKKwkJCSAgdW5zaWduZWQgaW50IGxlbiwgaW50IHdyaXRlX3RvX3ZtKQoreworCXN0cnVjdCBzZ19pb3ZlYyBpb3Y7CisKKwlpb3YuaW92X2Jhc2UgPSAodm9pZCBfX3VzZXIgKil1YWRkcjsKKwlpb3YuaW92X2xlbiA9IGxlbjsKKworCXJldHVybiBiaW9fY29weV91c2VyX2lvdihxLCAmaW92LCAxLCB3cml0ZV90b192bSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYmlvICpfX2Jpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCQkJICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAkJCQkgICAgICBzdHJ1Y3Qgc2dfaW92ZWMgKmlvdiwgaW50IGlvdl9jb3VudCwKQEAgLTkwMyw3ICs5NzksNyBAQAogCX0KIH0KIAotdm9pZCBiaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBiaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGJpb192ZWMgKmJ2ZWMgPSBiaW8tPmJpX2lvX3ZlYzsKIAlpbnQgaTsKQEAgLTExOTQsNiArMTI3MCw4IEBACiBFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGNfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGJpb19nZXRfbnJfdmVjcyk7CitFWFBPUlRfU1lNQk9MKGJpb19tYXBfdXNlcik7CitFWFBPUlRfU1lNQk9MKGJpb191bm1hcF91c2VyKTsKIEVYUE9SVF9TWU1CT0woYmlvX21hcF9rZXJuKTsKIEVYUE9SVF9TWU1CT0woYmlvX3BhaXJfcmVsZWFzZSk7CiBFWFBPUlRfU1lNQk9MKGJpb19zcGxpdCk7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDY3ZmU3MmMuLjdkODIyZmEgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0zMSw2ICszMSw4IEBACiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wczsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYmRldl9pbm9kZSAqQkRFVl9JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGJkZXZfaW5vZGUsIHZmc19pbm9kZSk7CkBAIC0xNzEsMjAzICsxNzMsNiBAQAogCQkJCWlvdiwgb2Zmc2V0LCBucl9zZWdzLCBibGtkZXZfZ2V0X2Jsb2NrcywgTlVMTCk7CiB9CiAKLSNpZiAwCi1zdGF0aWMgdm9pZCBibGtfZW5kX2FpbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcikKLXsKLQlzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBiaW8tPmJpX3ByaXZhdGU7Ci0JYXRvbWljX3QgKmJpb19jb3VudCA9ICZpb2NiLT5raV9iaW9fY291bnQ7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkKLQkJYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KGJpbyk7Ci0JZWxzZSB7Ci0JCWJpb19yZWxlYXNlX3BhZ2VzKGJpbyk7Ci0JCWJpb19wdXQoYmlvKTsKLQl9Ci0KLQkvKiBpb2NiLT5raV9uYnl0ZXMgc3RvcmVzIGVycm9yIGNvZGUgZnJvbSBMTEREICovCi0JaWYgKGVycm9yKQotCQlpb2NiLT5raV9uYnl0ZXMgPSAtRUlPOwotCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoYmlvX2NvdW50KSkgewotCQlpZiAoKGxvbmcpaW9jYi0+a2lfbmJ5dGVzIDwgMCkKLQkJCWFpb19jb21wbGV0ZShpb2NiLCBpb2NiLT5raV9uYnl0ZXMsIDApOwotCQllbHNlCi0JCQlhaW9fY29tcGxldGUoaW9jYiwgaW9jYi0+a2lfbGVmdCwgMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgVkVDX1NJWkUJMTYKLXN0cnVjdCBwdmVjIHsKLQl1bnNpZ25lZCBzaG9ydCBucjsKLQl1bnNpZ25lZCBzaG9ydCBpZHg7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2VbVkVDX1NJWkVdOwotfTsKLQotI2RlZmluZSBQQUdFU19TUEFOTkVEKGFkZHIsIGxlbikJXAotCShESVZfUk9VTkRfVVAoKGFkZHIpICsgKGxlbiksIFBBR0VfU0laRSkgLSAoYWRkcikgLyBQQUdFX1NJWkUpOwotCi0vKgotICogZ2V0IHBhZ2UgcG9pbnRlciBmb3IgdXNlciBhZGRyLCB3ZSBpbnRlcm5hbGx5IGNhY2hlIHN0cnVjdCBwYWdlIGFycmF5IGZvcgotICogKGFkZHIsIGNvdW50KSByYW5nZSBpbiBwdmVjIHRvIGF2b2lkIGZyZXF1ZW50IGNhbGwgdG8gZ2V0X3VzZXJfcGFnZXMuICBJZgotICogaW50ZXJuYWwgcGFnZSBsaXN0IGlzIGV4aGF1c3RlZCwgYSBiYXRjaCBjb3VudCBvZiB1cCB0byBWRUNfU0laRSBpcyB1c2VkCi0gKiB0byBnZXQgbmV4dCBzZXQgb2YgcGFnZSBzdHJ1Y3QuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYmxrX2dldF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGNvdW50LCBpbnQgcncsCi0JCQkJIHN0cnVjdCBwdmVjICpwdmVjKQotewotCWludCByZXQsIG5yX3BhZ2VzOwotCWlmIChwdmVjLT5pZHggPT0gcHZlYy0+bnIpIHsKLQkJbnJfcGFnZXMgPSBQQUdFU19TUEFOTkVEKGFkZHIsIGNvdW50KTsKLQkJbnJfcGFnZXMgPSBtaW4obnJfcGFnZXMsIFZFQ19TSVpFKTsKLQkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgbnJfcGFnZXMsCi0JCQkJICAgICBydyA9PSBSRUFELCAwLCBwdmVjLT5wYWdlLCBOVUxMKTsKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCQlwdmVjLT5uciA9IHJldDsKLQkJcHZlYy0+aWR4ID0gMDsKLQl9Ci0JcmV0dXJuIHB2ZWMtPnBhZ2VbcHZlYy0+aWR4KytdOwotfQotCi0vKiByZXR1cm4gYSBwYWdlIGJhY2sgdG8gcHZlYyBhcnJheSAqLwotc3RhdGljIHZvaWQgYmxrX3VuZ2V0X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwdmVjICpwdmVjKQotewotCXB2ZWMtPnBhZ2VbLS1wdmVjLT5pZHhdID0gcGFnZTsKLX0KLQotc3RhdGljIHNzaXplX3QKLWJsa2Rldl9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkgbG9mZl90IHBvcywgdW5zaWduZWQgbG9uZyBucl9zZWdzKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX21hcHBpbmctPmhvc3Q7Ci0JdW5zaWduZWQgYmxrYml0cyA9IGJsa3NpemVfYml0cyhiZGV2X2hhcmRzZWN0X3NpemUoSV9CREVWKGlub2RlKSkpOwotCXVuc2lnbmVkIGJsb2Nrc2l6ZV9tYXNrID0gKDEgPDwgYmxrYml0cykgLSAxOwotCXVuc2lnbmVkIGxvbmcgc2VnID0gMDsJLyogaW92IHNlZ21lbnQgaXRlcmF0b3IgKi8KLQl1bnNpZ25lZCBsb25nIG52ZWM7CS8qIG51bWJlciBvZiBiaW8gdmVjIG5lZWRlZCAqLwotCXVuc2lnbmVkIGxvbmcgY3VyX29mZjsJLyogb2Zmc2V0IGludG8gY3VycmVudCBwYWdlICovCi0JdW5zaWduZWQgbG9uZyBjdXJfbGVuOwkvKiBJL08gbGVuIG9mIGN1cnJlbnQgcGFnZSwgdXAgdG8gUEFHRV9TSVpFICovCi0KLQl1bnNpZ25lZCBsb25nIGFkZHI7CS8qIHVzZXIgaW92ZWMgYWRkcmVzcyAqLwotCXNpemVfdCBjb3VudDsJCS8qIHVzZXIgaW92ZWMgbGVuICovCi0Jc2l6ZV90IG5ieXRlcyA9IGlvY2ItPmtpX25ieXRlcyA9IGlvY2ItPmtpX2xlZnQ7IC8qIHRvdGFsIHhmZXIgc2l6ZSAqLwotCWxvZmZfdCBzaXplOwkJLyogc2l6ZSBvZiBibG9jayBkZXZpY2UgKi8KLQlzdHJ1Y3QgYmlvICpiaW87Ci0JYXRvbWljX3QgKmJpb19jb3VudCA9ICZpb2NiLT5raV9iaW9fY291bnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IHB2ZWMgcHZlYzsKLQotCXB2ZWMubnIgPSAwOwotCXB2ZWMuaWR4ID0gMDsKLQotCWlmIChwb3MgJiBibG9ja3NpemVfbWFzaykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCWlmIChwb3MgKyBuYnl0ZXMgPiBzaXplKSB7Ci0JCW5ieXRlcyA9IHNpemUgLSBwb3M7Ci0JCWlvY2ItPmtpX2xlZnQgPSBuYnl0ZXM7Ci0JfQotCi0JLyoKLQkgKiBjaGVjayBmaXJzdCBub24temVybyBpb3YgYWxpZ25tZW50LCB0aGUgcmVtYWluaW5nCi0JICogaW92IGFsaWdubWVudCBpcyBjaGVja2VkIGluc2lkZSBiaW8gbG9vcCBiZWxvdy4KLQkgKi8KLQlkbyB7Ci0JCWFkZHIgPSAodW5zaWduZWQgbG9uZykgaW92W3NlZ10uaW92X2Jhc2U7Ci0JCWNvdW50ID0gbWluKGlvdltzZWddLmlvdl9sZW4sIG5ieXRlcyk7Ci0JCWlmIChhZGRyICYgYmxvY2tzaXplX21hc2sgfHwgY291bnQgJiBibG9ja3NpemVfbWFzaykKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gd2hpbGUgKCFjb3VudCAmJiArK3NlZyA8IG5yX3NlZ3MpOwotCWF0b21pY19zZXQoYmlvX2NvdW50LCAxKTsKLQotCXdoaWxlIChuYnl0ZXMpIHsKLQkJLyogcm91Z2hseSBlc3RpbWF0ZSBudW1iZXIgb2YgYmlvIHZlYyBuZWVkZWQgKi8KLQkJbnZlYyA9IChuYnl0ZXMgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKLQkJbnZlYyA9IG1heChudmVjLCBucl9zZWdzIC0gc2VnKTsKLQkJbnZlYyA9IG1pbihudmVjLCAodW5zaWduZWQgbG9uZykgQklPX01BWF9QQUdFUyk7Ci0KLQkJLyogYmlvX2FsbG9jIHNob3VsZCBub3QgZmFpbCB3aXRoIEdGUF9LRVJORUwgZmxhZyAqLwotCQliaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgbnZlYyk7Ci0JCWJpby0+YmlfYmRldiA9IElfQkRFVihpbm9kZSk7Ci0JCWJpby0+YmlfZW5kX2lvID0gYmxrX2VuZF9haW87Ci0JCWJpby0+YmlfcHJpdmF0ZSA9IGlvY2I7Ci0JCWJpby0+Ymlfc2VjdG9yID0gcG9zID4+IGJsa2JpdHM7Ci1zYW1lX2JpbzoKLQkJY3VyX29mZiA9IGFkZHIgJiB+UEFHRV9NQVNLOwotCQljdXJfbGVuID0gUEFHRV9TSVpFIC0gY3VyX29mZjsKLQkJaWYgKGNvdW50IDwgY3VyX2xlbikKLQkJCWN1cl9sZW4gPSBjb3VudDsKLQotCQlwYWdlID0gYmxrX2dldF9wYWdlKGFkZHIsIGNvdW50LCBydywgJnB2ZWMpOwotCQlpZiAodW5saWtlbHkoSVNfRVJSKHBhZ2UpKSkKLQkJCWdvdG8gYmFja291dDsKLQotCQlpZiAoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgY3VyX2xlbiwgY3VyX29mZikpIHsKLQkJCXBvcyArPSBjdXJfbGVuOwotCQkJYWRkciArPSBjdXJfbGVuOwotCQkJY291bnQgLT0gY3VyX2xlbjsKLQkJCW5ieXRlcyAtPSBjdXJfbGVuOwotCi0JCQlpZiAoY291bnQpCi0JCQkJZ290byBzYW1lX2JpbzsKLQkJCXdoaWxlICgrK3NlZyA8IG5yX3NlZ3MpIHsKLQkJCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvdltzZWddLmlvdl9iYXNlOwotCQkJCWNvdW50ID0gaW92W3NlZ10uaW92X2xlbjsKLQkJCQlpZiAoIWNvdW50KQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAodW5saWtlbHkoYWRkciAmIGJsb2Nrc2l6ZV9tYXNrIHx8Ci0JCQkJCSAgICAgY291bnQgJiBibG9ja3NpemVfbWFzaykpIHsKLQkJCQkJcGFnZSA9IEVSUl9QVFIoLUVJTlZBTCk7Ci0JCQkJCWdvdG8gYmFja291dDsKLQkJCQl9Ci0JCQkJY291bnQgPSBtaW4oY291bnQsIG5ieXRlcyk7Ci0JCQkJZ290byBzYW1lX2JpbzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWJsa191bmdldF9wYWdlKHBhZ2UsICZwdmVjKTsKLQkJfQotCi0JCS8qIGJpbyBpcyByZWFkeSwgc3VibWl0IGl0ICovCi0JCWlmIChydyA9PSBSRUFEKQotCQkJYmlvX3NldF9wYWdlc19kaXJ0eShiaW8pOwotCQlhdG9taWNfaW5jKGJpb19jb3VudCk7Ci0JCXN1Ym1pdF9iaW8ocncsIGJpbyk7Ci0JfQotCi1jb21wbGV0aW9uOgotCWlvY2ItPmtpX2xlZnQgLT0gbmJ5dGVzOwotCW5ieXRlcyA9IGlvY2ItPmtpX2xlZnQ7Ci0JaW9jYi0+a2lfcG9zICs9IG5ieXRlczsKLQotCWJsa19ydW5fYWRkcmVzc19zcGFjZShpbm9kZS0+aV9tYXBwaW5nKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdChiaW9fY291bnQpKQotCQlhaW9fY29tcGxldGUoaW9jYiwgbmJ5dGVzLCAwKTsKLQotCXJldHVybiAtRUlPQ0JRVUVVRUQ7Ci0KLWJhY2tvdXQ6Ci0JLyoKLQkgKiBiYWNrIG91dCBuYnl0ZXMgY291bnQgY29uc3RydWN0ZWQgc28gZmFyIGZvciB0aGlzIGJpbywKLQkgKiB3ZSB3aWxsIHRocm93IGF3YXkgY3VycmVudCBiaW8uCi0JICovCi0JbmJ5dGVzICs9IGJpby0+Ymlfc2l6ZTsKLQliaW9fcmVsZWFzZV9wYWdlcyhiaW8pOwotCWJpb19wdXQoYmlvKTsKLQotCS8qCi0JICogaWYgbm8gYmlvIHdhcyBzdWJtbWl0dGVkLCByZXR1cm4gdGhlIGVycm9yIGNvZGUuCi0JICogb3RoZXJ3aXNlLCBwcm9jZWVkIHdpdGggcGVuZGluZyBJL08gY29tcGxldGlvbi4KLQkgKi8KLQlpZiAoYXRvbWljX3JlYWQoYmlvX2NvdW50KSA9PSAxKQotCQlyZXR1cm4gUFRSX0VSUihwYWdlKTsKLQlnb3RvIGNvbXBsZXRpb247Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCBibGtkZXZfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsIGJsa2Rldl9nZXRfYmxvY2ssIHdiYyk7CkBAIC0xMzM0LDcgKzExMzksNyBAQAogCXJldHVybiBibGtkZXZfaW9jdGwoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0LCBmaWxlLCBjbWQsIGFyZyk7CiB9CiAKLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzID0gewogCS5yZWFkcGFnZQk9IGJsa2Rldl9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gYmxrZGV2X3dyaXRlcGFnZSwKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLApkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCAzZWJjY2Y0Li4zOWZmMTQ0IDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtNjI3LDggKzYyNyw3IEBACiB9CiAKIC8qKgotICogc3luY19tYXBwaW5nX2J1ZmZlcnMgLSB3cml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhIG1hcHBpbmcncyAiYXNzb2NpYXRlZCIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycworICogc3luY19tYXBwaW5nX2J1ZmZlcnMgLSB3cml0ZSBvdXQgJiB3YWl0IHVwb24gYSBtYXBwaW5nJ3MgImFzc29jaWF0ZWQiIGJ1ZmZlcnMKICAqIEBtYXBwaW5nOiB0aGUgbWFwcGluZyB3aGljaCB3YW50cyB0aG9zZSBidWZmZXJzIHdyaXR0ZW4KICAqCiAgKiBTdGFydHMgSS9PIGFnYWluc3QgdGhlIGJ1ZmZlcnMgYXQgbWFwcGluZy0+cHJpdmF0ZV9saXN0LCBhbmQgd2FpdHMgdXBvbgpAQCAtODM2LDcgKzgzNSw3IEBACiAJCXNtcF9tYigpOwogCQlpZiAoYnVmZmVyX2RpcnR5KGJoKSkgewogCQkJbGlzdF9hZGQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMsCi0JCQkJICZiaC0+Yl9hc3NvY19tYXAtPnByaXZhdGVfbGlzdCk7CisJCQkJICZtYXBwaW5nLT5wcml2YXRlX2xpc3QpOwogCQkJYmgtPmJfYXNzb2NfbWFwID0gbWFwcGluZzsKIAkJfQogCQlzcGluX3VubG9jayhsb2NrKTsKQEAgLTExODIsNyArMTE4MSwyMCBAQAogdm9pZCBtYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCVdBUk5fT05fT05DRSghYnVmZmVyX3VwdG9kYXRlKGJoKSk7Ci0JaWYgKCFidWZmZXJfZGlydHkoYmgpICYmICF0ZXN0X3NldF9idWZmZXJfZGlydHkoYmgpKQorCisJLyoKKwkgKiBWZXJ5ICpjYXJlZnVsbHkqIG9wdGltaXplIHRoZSBpdC1pcy1hbHJlYWR5LWRpcnR5IGNhc2UuCisJICoKKwkgKiBEb24ndCBsZXQgdGhlIGZpbmFsICJpcyBpdCBkaXJ0eSIgZXNjYXBlIHRvIGJlZm9yZSB3ZQorCSAqIHBlcmhhcHMgbW9kaWZpZWQgdGhlIGJ1ZmZlci4KKwkgKi8KKwlpZiAoYnVmZmVyX2RpcnR5KGJoKSkgeworCQlzbXBfbWIoKTsKKwkJaWYgKGJ1ZmZlcl9kaXJ0eShiaCkpCisJCQlyZXR1cm47CisJfQorCisJaWYgKCF0ZXN0X3NldF9idWZmZXJfZGlydHkoYmgpKQogCQlfX3NldF9wYWdlX2RpcnR5KGJoLT5iX3BhZ2UsIHBhZ2VfbWFwcGluZyhiaC0+Yl9wYWdlKSwgMCk7CiB9CiAKQEAgLTI1NjUsMTQgKzI1NzcsMTMgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmhlYWQgPSBmc2RhdGE7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlCVUdfT04oZnNkYXRhICE9IE5VTEwgJiYgcGFnZV9oYXNfYnVmZmVycyhwYWdlKSk7CiAKLQlpZiAoIVBhZ2VNYXBwZWRUb0Rpc2socGFnZSkpIHsKLQkJaWYgKHVubGlrZWx5KGNvcGllZCA8IGxlbikgJiYgIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCi0JCQlhdHRhY2hfbm9iaF9idWZmZXJzKHBhZ2UsIGhlYWQpOwotCQlpZiAocGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKLQkJCXJldHVybiBnZW5lcmljX3dyaXRlX2VuZChmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwKLQkJCQkJCWNvcGllZCwgcGFnZSwgZnNkYXRhKTsKLQl9CisJaWYgKHVubGlrZWx5KGNvcGllZCA8IGxlbikgJiYgIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCisJCWF0dGFjaF9ub2JoX2J1ZmZlcnMocGFnZSwgaGVhZCk7CisJaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCisJCXJldHVybiBnZW5lcmljX3dyaXRlX2VuZChmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwKKwkJCQkJY29waWVkLCBwYWdlLCBmc2RhdGEpOwogCiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwpAQCAtMzIxNCw3ICszMjI1LDcgQEAKIH0KIAogLyoqCi0gKiBiaF91cHRvZGF0ZV9vcl9sb2NrOiBUZXN0IHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyB1cHRvZGF0ZQorICogYmhfdXB0b2RhdGVfb3JfbG9jayAtIFRlc3Qgd2hldGhlciB0aGUgYnVmZmVyIGlzIHVwdG9kYXRlCiAgKiBAYmg6IHN0cnVjdCBidWZmZXJfaGVhZAogICoKICAqIFJldHVybiB0cnVlIGlmIHRoZSBidWZmZXIgaXMgdXAtdG8tZGF0ZSBhbmQgZmFsc2UsCkBAIC0zMjMzLDcgKzMyNDQsNyBAQAogRVhQT1JUX1NZTUJPTChiaF91cHRvZGF0ZV9vcl9sb2NrKTsKIAogLyoqCi0gKiBiaF9zdWJtaXRfcmVhZDogU3VibWl0IGEgbG9ja2VkIGJ1ZmZlciBmb3IgcmVhZGluZworICogYmhfc3VibWl0X3JlYWQgLSBTdWJtaXQgYSBsb2NrZWQgYnVmZmVyIGZvciByZWFkaW5nCiAgKiBAYmg6IHN0cnVjdCBidWZmZXJfaGVhZAogICoKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZCAtRUlPIG9uIGVycm9yLgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IGVkZDI0ODMuLmRiZDkxNDYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTYsNyArNiw5IEBACiBjYWNoZWQgZmlsZXMuIEZpeCBzZXR4YXR0ciBmYWlsdXJlIHRvIGNlcnRhaW4gU2FtYmEgdmVyc2lvbnMuIEZpeCBtb3VudAogb2Ygc2Vjb25kIHNoYXJlIHRvIGRpc2Nvbm5lY3RlZCBzZXJ2ZXIgc2Vzc2lvbiAoYXV0b3JlY29ubmVjdCBvbiB0aGlzKS4KIEFkZCBhYmlsaXR5IHRvIG1vZGlmeSBjaWZzIGFjbHMgZm9yIGhhbmRsaW5nIGNobW9kICh3aGVuIG1vdW50ZWQgd2l0aAotY2lmc2FjbCBmbGFnKS4KK2NpZnNhY2wgZmxhZykuIEZpeCBwcmVmaXhwYXRoIHBhdGggc2VwYXJhdG9yIHNvIHdlIGNhbiBoYW5kbGUgbW91bnRzCit3aXRoIHByZWZpeHBhdGhzIGxvbmdlciB0aGFuIG9uZSBkaXJlY3RvcnkgKG9uZSBwYXRoIGNvbXBvbmVudCkgd2hlbgorbW91bnRlZCB0byBXaW5kb3dzIHNlcnZlcnMuCiAKIFZlcnNpb24gMS41MQogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9mcy9jaWZzL1JFQURNRSBiL2ZzL2NpZnMvUkVBRE1FCmluZGV4IGM2MjNlMmYuLjUwMzA2MjIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvUkVBRE1FCisrKyBiL2ZzL2NpZnMvUkVBRE1FCkBAIC00NjEsNyArNDYxLDcgQEAKICBjaWZzYWNsICAgICAgICBSZXBvcnQgbW9kZSBiaXRzIChlLmcuIG9uIHN0YXQpIGJhc2VkIG9uIHRoZSBXaW5kb3dzIEFDTCBmb3IKIAkgICAgICAgIHRoZSBmaWxlLiAoRVhQRVJJTUVOVEFMKQogIHNlcnZlcm4gICAgICAgIFNwZWNpZnkgdGhlIHNlcnZlciAncyBuZXRiaW9zIG5hbWUgKFJGQzEwMDEgbmFtZSkgdG8gdXNlCi0JCXdoZW4gYXR0ZW1wdGluZyB0byBzZXR1cCBhIHNlc3Npb24gdG8gdGhlIHNlcnZlci4gIFRoaXMgaXMKKwkJd2hlbiBhdHRlbXB0aW5nIHRvIHNldHVwIGEgc2Vzc2lvbiB0byB0aGUgc2VydmVyLiAKIAkJVGhpcyBpcyBuZWVkZWQgZm9yIG1vdW50aW5nIHRvIHNvbWUgb2xkZXIgc2VydmVycyAoc3VjaAogCQlhcyBPUy8yIG9yIFdpbmRvd3MgOTggYW5kIFdpbmRvd3MgTUUpIHNpbmNlIHRoZXkgZG8gbm90CiAJCXN1cHBvcnQgYSBkZWZhdWx0IHNlcnZlciBuYW1lLiAgQSBzZXJ2ZXIgbmFtZSBjYW4gYmUgdXAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggNzNjNGM0MS4uMDIyOGVkMCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTk4LDggKzk4LDcgQEAKIAkJCWlmIChtaWRfZW50cnktPnJlc3BfYnVmKSB7CiAJCQkJY2lmc19kdW1wX2RldGFpbChtaWRfZW50cnktPnJlc3BfYnVmKTsKIAkJCQljaWZzX2R1bXBfbWVtKCJleGlzdGluZyBidWY6ICIsCi0JCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYsCi0JCQkJCTYyIC8qIGZpeG1lICovKTsKKwkJCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiwgNjIpOwogCQkJfQogCQl9CiAJfQpAQCAtNDM5LDcgKzQzOCw3IEBACiAKIAlyZXR1cm4gbGVuZ3RoOwogfQotI2VuZGlmCisjZW5kaWYgLyogU1RBVFMgKi8KIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19mc19jaWZzOwogcmVhZF9wcm9jX3QgY2lmc190eGFuY2hvcl9yZWFkOwpAQCAtNDgyLDcgKzQ4MSw3IEBACiAJCQkJY2lmc19zdGF0c19yZWFkLCBOVUxMKTsKIAlpZiAocGRlKQogCQlwZGUtPndyaXRlX3Byb2MgPSBjaWZzX3N0YXRzX3dyaXRlOwotI2VuZGlmCisjZW5kaWYgLyogU1RBVFMgKi8KIAlwZGUgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJjaWZzRllJIiwgMCwgcHJvY19mc19jaWZzLAogCQkJCWNpZnNGWUlfcmVhZCwgTlVMTCk7CiAJaWYgKHBkZSkKQEAgLTkxOCw0ICs5MTcsMTIgQEAKIAkvKiBCQiBzaG91bGQgd2UgdHVybiBvbiBNQVkgZmxhZ3MgZm9yIG90aGVyIE1VU1Qgb3B0aW9ucz8gKi8KIAlyZXR1cm4gY291bnQ7CiB9Ci0jZW5kaWYKKyNlbHNlCitpbmxpbmUgdm9pZCBjaWZzX3Byb2NfaW5pdCh2b2lkKQoreworfQorCitpbmxpbmUgdm9pZCBjaWZzX3Byb2NfY2xlYW4odm9pZCkKK3sKK30KKyNlbmRpZiAvKiBQUk9DX0ZTICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGVidWcuaCBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5oCmluZGV4IGMyNmNkMGQuLjVlYjNiODMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5oCisrKyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5oCkBAIC0yNSw4ICsyNSwxMSBAQAogCiB2b2lkIGNpZnNfZHVtcF9tZW0oY2hhciAqbGFiZWwsIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpOwogI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgorI2RlZmluZSBEQkcyIDIKIHZvaWQgY2lmc19kdW1wX2RldGFpbChzdHJ1Y3Qgc21iX2hkciAqKTsKIHZvaWQgY2lmc19kdW1wX21pZHMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqKTsKKyNlbHNlCisjZGVmaW5lIERCRzIgMAogI2VuZGlmCiBleHRlcm4gaW50IHRyYWNlU01COwkJLyogZmxhZyB3aGljaCBlbmFibGVzIHRoZSBmdW5jdGlvbiBiZWxvdyAqLwogdm9pZCBkdW1wX3NtYihzdHJ1Y3Qgc21iX2hkciAqLCBpbnQpOwpAQCAtNjQsMTAgKzY3LDEwIEBACiAgKgktLS0tLS0tLS0KICAqLwogI2Vsc2UJCS8qIF9DSUZTX0RFQlVHICovCi0jZGVmaW5lIGNFUlJPUihidXR0b24scHJzcGVjKQotI2RlZmluZSBjRVZFTlQoZm9ybWF0LGFyZy4uLikKKyNkZWZpbmUgY0VSUk9SKGJ1dHRvbiwgcHJzcGVjKQorI2RlZmluZSBjRVZFTlQoZm9ybWF0LCBhcmcuLi4pCiAjZGVmaW5lIGNGWUkoYnV0dG9uLCBwcnNwZWMpCi0jZGVmaW5lIGNpZnNlcnJvcihmb3JtYXQsYXJnLi4uKQorI2RlZmluZSBjaWZzZXJyb3IoZm9ybWF0LCBhcmcuLi4pCiAjZW5kaWYJCS8qIF9DSUZTX0RFQlVHICovCiAKICNlbmRpZgkJCQkvKiBfSF9DSUZTX0RFQlVHICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA2YWQ0NDc1Li41NmM5MjQwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTMzLDcgKzMzLDYgQEAKIHsKIAltYXJrX21vdW50c19mb3JfZXhwaXJ5KCZjaWZzX2Rmc19hdXRvbW91bnRfbGlzdCk7CiAJbWFya19tb3VudHNfZm9yX2V4cGlyeSgmY2lmc19kZnNfYXV0b21vdW50X2xpc3QpOwotCXNocmlua19zdWJtb3VudHModmZzbW50LCAmY2lmc19kZnNfYXV0b21vdW50X2xpc3QpOwogfQogCiAvKioKQEAgLTc0LDcgKzczLDcgQEAKIAlwU2VwID0gbWVtY2hyKFVOQysyLCAnXFwnLCBsZW4tMik7CiAJaWYgKCFwU2VwKSB7CiAJCWNFUlJPUigxLCAoIiVzOiBubyBzZXJ2ZXIgbmFtZSBlbmQgaW4gbm9kZSBuYW1lOiAlcyIsCi0JCQlfX0ZVTkNUSU9OX18sIG5vZGVfbmFtZSkpOworCQkJX19mdW5jX18sIG5vZGVfbmFtZSkpOwogCQlrZnJlZShVTkMpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC04NCw3ICs4Myw3IEBACiAJcFNlcCA9IG1lbWNocihVTkMrKHBTZXAtVU5DKSwgJ1xcJywgbGVuLShwU2VwLVVOQykpOwogCWlmICghcFNlcCkgewogCQljRVJST1IoMSwgKCIlczoyIGNhbnQgZmluZCBzaGFyZSBuYW1lIGluIG5vZGUgbmFtZTogJXMiLAotCQkJX19GVU5DVElPTl9fLCBub2RlX25hbWUpKTsKKwkJCV9fZnVuY19fLCBub2RlX25hbWUpKTsKIAkJa2ZyZWUoVU5DKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTI3LDcgKzEyNiw3IEBACiAJcmMgPSBkbnNfcmVzb2x2ZV9zZXJ2ZXJfbmFtZV90b19pcCgqZGV2bmFtZSwgJnNydklQKTsKIAlpZiAocmMgIT0gMCkgewogCQljRVJST1IoMSwgKCIlczogRmFpbGVkIHRvIHJlc29sdmUgc2VydmVyIHBhcnQgb2YgJXMgdG8gSVAiLAotCQkJICBfX0ZVTkNUSU9OX18sICpkZXZuYW1lKSk7CisJCQkgIF9fZnVuY19fLCAqZGV2bmFtZSkpOwogCQltb3VudGRhdGEgPSBFUlJfUFRSKHJjKTsKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfb3V0OwogCX0KQEAgLTE4MSw4ICsxODAsOCBAQAogCQl9CiAJfQogCi0JLypjRllJKDEsKCIlczogcGFyZW50IG1vdW50ZGF0YTogJXMiLCBfX0ZVTkNUSU9OX18sc2JfbW91bnRkYXRhKSk7Ki8KLQkvKmNGWUkoMSwgKCIlczogc3VibW91bnQgbW91bnRkYXRhOiAlcyIsIF9fRlVOQ1RJT05fXywgbW91bnRkYXRhICkpOyovCisJLypjRllJKDEsKCIlczogcGFyZW50IG1vdW50ZGF0YTogJXMiLCBfX2Z1bmNfXyxzYl9tb3VudGRhdGEpKTsqLworCS8qY0ZZSSgxLCAoIiVzOiBzdWJtb3VudCBtb3VudGRhdGE6ICVzIiwgX19mdW5jX18sIG1vdW50ZGF0YSApKTsqLwogCiBjb21wb3NlX21vdW50X29wdGlvbnNfb3V0OgogCWtmcmVlKHNydklQKTsKQEAgLTI4Niw3ICsyODUsNyBAQAogCWNGWUkoMSwgKCJERlM6IG5vZGUgcGF0aDogJXMiLCByZWYtPm5vZGVfbmFtZSkpOwogCWNGWUkoMSwgKCJERlM6IGZsOiAlaGQsIHNydl90eXBlOiAlaGQiLCByZWYtPmZsYWdzLCByZWYtPnNlcnZlcl90eXBlKSk7CiAJY0ZZSSgxLCAoIkRGUzogcmVmX2ZsYWdzOiAlaGQsIHBhdGhfY29uc3VtZWQ6ICVoZCIsIHJlZi0+cmVmX2ZsYWcsCi0JCQkJcmVmLT5QYXRoQ29uc3VtZWQpKTsKKwkJCQlyZWYtPnBhdGhfY29uc3VtZWQpKTsKIH0KIAogCkBAIC0zMDIsNyArMzAxLDcgQEAKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gRVJSX1BUUigtRU5PRU5UKTsKIAotCWNGWUkoMSwgKCJpbiAlcyIsIF9fRlVOQ1RJT05fXykpOworCWNGWUkoMSwgKCJpbiAlcyIsIF9fZnVuY19fKSk7CiAJQlVHX09OKElTX1JPT1QoZGVudHJ5KSk7CiAKIAl4aWQgPSBHZXRYaWQoKTsKQEAgLTMzNiw3ICszMzUsNyBAQAogCQkJbGVuID0gc3RybGVuKHJlZmVycmFsc1tpXS5ub2RlX25hbWUpOwogCQkJaWYgKGxlbiA8IDIpIHsKIAkJCQljRVJST1IoMSwgKCIlczogTmV0IEFkZHJlc3MgcGF0aCB0b28gc2hvcnQ6ICVzIiwKLQkJCQkJX19GVU5DVElPTl9fLCByZWZlcnJhbHNbaV0ubm9kZV9uYW1lKSk7CisJCQkJCV9fZnVuY19fLCByZWZlcnJhbHNbaV0ubm9kZV9uYW1lKSk7CiAJCQkJcmMgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0X2VycjsKIAkJCX0KQEAgLTM0NCw3ICszNDMsNyBAQAogCQkJCQkJbmQtPnBhdGguZGVudHJ5LAogCQkJCQkJcmVmZXJyYWxzW2ldLm5vZGVfbmFtZSk7CiAJCQljRllJKDEsICgiJXM6IGNpZnNfZGZzX2RvX3JlZm1vdW50OiVzICwgbW50OiVwIiwKLQkJCQkJIF9fRlVOQ1RJT05fXywKKwkJCQkJIF9fZnVuY19fLAogCQkJCQlyZWZlcnJhbHNbaV0ubm9kZV9uYW1lLCBtbnQpKTsKIAogCQkJLyogY29tcGxldGUgbW91bnQgcHJvY2VkdXJlIGlmIHdlIGFjY3VyZWQgc3VibW91bnQgKi8KQEAgLTM2NSw3ICszNjQsNyBAQAogCUZyZWVYaWQoeGlkKTsKIAlmcmVlX2Rmc19pbmZvX2FycmF5KHJlZmVycmFscywgbnVtX3JlZmVycmFscyk7CiAJa2ZyZWUoZnVsbF9wYXRoKTsKLQljRllJKDEsICgibGVhdmluZyAlcyIgLCBfX0ZVTkNUSU9OX18pKTsKKwljRllJKDEsICgibGVhdmluZyAlcyIgLCBfX2Z1bmNfXykpOwogCXJldHVybiBFUlJfUFRSKHJjKTsKIG91dF9lcnI6CiAJcGF0aF9wdXQoJm5kLT5wYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19zcG5lZ28uYyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwppbmRleCBkNTQzYWNjLi42NjUzZTI5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKKysrIGIvZnMvY2lmcy9jaWZzX3NwbmVnby5jCkBAIC0xMjUsNyArMTI1LDcgQEAKICNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKIAlpZiAoY2lmc0ZZSSAmJiAhSVNfRVJSKHNwbmVnb19rZXkpKSB7CiAJCXN0cnVjdCBjaWZzX3NwbmVnb19tc2cgKm1zZyA9IHNwbmVnb19rZXktPnBheWxvYWQuZGF0YTsKLQkJY2lmc19kdW1wX21lbSgiU1BORUdPIHJlcGx5IGJsb2I6IiwgbXNnLT5kYXRhLCBtaW4oMTAyNCwKKwkJY2lmc19kdW1wX21lbSgiU1BORUdPIHJlcGx5IGJsb2I6IiwgbXNnLT5kYXRhLCBtaW4oMTAyNFUsCiAJCQkJbXNnLT5zZWNibG9iX2xlbiArIG1zZy0+c2Vzc2tleV9sZW4pKTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX0NJRlNfREVCVUcyICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwppbmRleCBiNTkwM2I4Li43ZDc1MjcyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCisrKyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqCiAgKi8KIGludAotY2lmc19zdHJmcm9tVUNTX2xlKGNoYXIgKnRvLCBjb25zdCBfX2xlMTYgKiBmcm9tLAorY2lmc19zdHJmcm9tVUNTX2xlKGNoYXIgKnRvLCBjb25zdCBfX2xlMTYgKmZyb20sCiAJCSAgIGludCBsZW4sIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKmNvZGVwYWdlKQogewogCWludCBpOwpAQCAtNjEsNyArNjEsNyBAQAogICoKICAqLwogaW50Ci1jaWZzX3N0cnRvVUNTKF9fbGUxNiAqIHRvLCBjb25zdCBjaGFyICpmcm9tLCBpbnQgbGVuLAorY2lmc19zdHJ0b1VDUyhfX2xlMTYgKnRvLCBjb25zdCBjaGFyICpmcm9tLCBpbnQgbGVuLAogCSAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKmNvZGVwYWdlKQogewogCWludCBjaGFybGVuOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuaCBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmgKaW5kZXggNjE0YzExZi4uMTRlYjlhMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuaAorKysgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5oCkBAIC0yNTQsNyArMjU0LDggQEAKIAljb25zdCB3Y2hhcl90ICphbmNob3IyID0gdWNzMjsKIAogCXdoaWxlICgqdWNzMSkgewotCQlpZiAoKnVjczEgPT0gKnVjczIpIHsJLyogUGFydGlhbCBtYXRjaCBmb3VuZCAqLworCQlpZiAoKnVjczEgPT0gKnVjczIpIHsKKwkJCS8qIFBhcnRpYWwgbWF0Y2ggZm91bmQgKi8KIAkJCXVjczErKzsKIAkJCXVjczIrKzsKIAkJfSBlbHNlIHsKQEAgLTI3OSw3ICsyODAsOCBAQAogewogCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBVbmlDYXNlUmFuZ2UgKnJwOwogCi0JaWYgKHVjIDwgc2l6ZW9mIChDaWZzVW5pVXBwZXJUYWJsZSkpIHsJLyogTGF0aW4gY2hhcmFjdGVycyAqLworCWlmICh1YyA8IHNpemVvZihDaWZzVW5pVXBwZXJUYWJsZSkpIHsKKwkJLyogTGF0aW4gY2hhcmFjdGVycyAqLwogCQlyZXR1cm4gdWMgKyBDaWZzVW5pVXBwZXJUYWJsZVt1Y107CS8qIFVzZSBiYXNlIHRhYmxlcyAqLwogCX0gZWxzZSB7CiAJCXJwID0gQ2lmc1VuaVVwcGVyUmFuZ2U7CS8qIFVzZSByYW5nZSB0YWJsZXMgKi8KQEAgLTMyMCw3ICszMjIsOCBAQAogewogCXJlZ2lzdGVyIHN0cnVjdCBVbmlDYXNlUmFuZ2UgKnJwOwogCi0JaWYgKHVjIDwgc2l6ZW9mIChVbmlMb3dlclRhYmxlKSkgewkvKiBMYXRpbiBjaGFyYWN0ZXJzICovCisJaWYgKHVjIDwgc2l6ZW9mKFVuaUxvd2VyVGFibGUpKSB7CisJCS8qIExhdGluIGNoYXJhY3RlcnMgKi8KIAkJcmV0dXJuIHVjICsgVW5pTG93ZXJUYWJsZVt1Y107CS8qIFVzZSBiYXNlIHRhYmxlcyAqLwogCX0gZWxzZSB7CiAJCXJwID0gVW5pTG93ZXJSYW5nZTsJLyogVXNlIHJhbmdlIHRhYmxlcyAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmMgYi9mcy9jaWZzL2NpZnNhY2wuYwppbmRleCBhNzAzNWJkLi4xY2I1YjBhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuYworKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY2lmc2FjbC5jCiAgKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA3CisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcsMjAwOAogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgQ29udGFpbnMgdGhlIHJvdXRpbmVzIGZvciBtYXBwaW5nIENJRlMvTlRGUyBBQ0xzCkBAIC00Niw4ICs0Niw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGNpZnNfc2lkIHNpZF9ldmVyeW9uZSA9IHsKIAkxLCAxLCB7MCwgMCwgMCwgMCwgMCwgMX0sIHswfSB9OwogLyogZ3JvdXAgdXNlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgc2lkX3VzZXIgPQotCQl7MSwgMiAsIHswLCAwLCAwLCAwLCAwLCA1fSwge30gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgc2lkX3VzZXIgPSB7MSwgMiAsIHswLCAwLCAwLCAwLCAwLCA1fSwge30gfTsKIAogCiBpbnQgbWF0Y2hfc2lkKHN0cnVjdCBjaWZzX3NpZCAqY3RzaWQpCkBAIC0xOTUsOSArMTk0LDkgQEAKIAkvKiBGb3IgZGVueSBBQ0VzIHdlIGNoYW5nZSB0aGUgbWFzayBzbyB0aGF0IHN1YnNlcXVlbnQgYWxsb3cgYWNjZXNzCiAJICAgY29udHJvbCBlbnRyaWVzIGRvIG5vdCB0dXJuIG9uIHRoZSBiaXRzIHdlIGFyZSBkZW55aW5nICovCiAJaWYgKHR5cGUgPT0gQUNDRVNTX0RFTklFRCkgewotCQlpZiAoZmxhZ3MgJiBHRU5FUklDX0FMTCkgeworCQlpZiAoZmxhZ3MgJiBHRU5FUklDX0FMTCkKIAkJCSpwYml0c190b19zZXQgJj0gflNfSVJXWFVHTzsKLQkJfQorCiAJCWlmICgoZmxhZ3MgJiBHRU5FUklDX1dSSVRFKSB8fAogCQkJKChmbGFncyAmIEZJTEVfV1JJVEVfUklHSFRTKSA9PSBGSUxFX1dSSVRFX1JJR0hUUykpCiAJCQkqcGJpdHNfdG9fc2V0ICY9IH5TX0lXVUdPOwpAQCAtMjE2LDkgKzIxNSw3IEBACiAKIAlpZiAoZmxhZ3MgJiBHRU5FUklDX0FMTCkgewogCQkqcG1vZGUgfD0gKFNfSVJXWFVHTyAmICgqcGJpdHNfdG9fc2V0KSk7Ci0jaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCi0JCWNGWUkoMSwgKCJhbGwgcGVybXMiKSk7Ci0jZW5kaWYKKwkJY0ZZSShEQkcyLCAoImFsbCBwZXJtcyIpKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoKGZsYWdzICYgR0VORVJJQ19XUklURSkgfHwKQEAgLTIzMSw5ICsyMjgsNyBAQAogCQkJKChmbGFncyAmIEZJTEVfRVhFQ19SSUdIVFMpID09IEZJTEVfRVhFQ19SSUdIVFMpKQogCQkqcG1vZGUgfD0gKFNfSVhVR08gJiAoKnBiaXRzX3RvX3NldCkpOwogCi0jaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCi0JY0ZZSSgxLCAoImFjY2VzcyBmbGFncyAweCV4IG1vZGUgbm93IDB4JXgiLCBmbGFncywgKnBtb2RlKSk7Ci0jZW5kaWYKKwljRllJKERCRzIsICgiYWNjZXNzIGZsYWdzIDB4JXggbW9kZSBub3cgMHgleCIsIGZsYWdzLCAqcG1vZGUpKTsKIAlyZXR1cm47CiB9CiAKQEAgLTI2MiwxMyArMjU3LDExIEBACiAJaWYgKG1vZGUgJiBTX0lYVUdPKQogCQkqcGFjZV9mbGFncyB8PSBTRVRfRklMRV9FWEVDX1JJR0hUUzsKIAotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCWNGWUkoMSwgKCJtb2RlOiAweCV4LCBhY2Nlc3MgZmxhZ3Mgbm93IDB4JXgiLCBtb2RlLCAqcGFjZV9mbGFncykpOwotI2VuZGlmCisJY0ZZSShEQkcyLCAoIm1vZGU6IDB4JXgsIGFjY2VzcyBmbGFncyBub3cgMHgleCIsIG1vZGUsICpwYWNlX2ZsYWdzKSk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgX19sZTE2IGZpbGxfYWNlX2Zvcl9zaWQoc3RydWN0IGNpZnNfYWNlICpwbnRhY2UsCitzdGF0aWMgX191MTYgZmlsbF9hY2VfZm9yX3NpZChzdHJ1Y3QgY2lmc19hY2UgKnBudGFjZSwKIAkJCWNvbnN0IHN0cnVjdCBjaWZzX3NpZCAqcHNpZCwgX191NjQgbm1vZGUsIHVtb2RlX3QgYml0cykKIHsKIAlpbnQgaTsKQEAgLTM1OCwxMSArMzUxLDkgQEAKIAkJcmV0dXJuOwogCX0KIAotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCWNGWUkoMSwgKCJEQUNMIHJldmlzaW9uICVkIHNpemUgJWQgbnVtIGFjZXMgJWQiLAorCWNGWUkoREJHMiwgKCJEQUNMIHJldmlzaW9uICVkIHNpemUgJWQgbnVtIGFjZXMgJWQiLAogCQlsZTE2X3RvX2NwdShwZGFjbC0+cmV2aXNpb24pLCBsZTE2X3RvX2NwdShwZGFjbC0+c2l6ZSksCiAJCWxlMzJfdG9fY3B1KHBkYWNsLT5udW1fYWNlcykpKTsKLSNlbmRpZgogCiAJLyogcmVzZXQgcnd4IHBlcm1pc3Npb25zIGZvciB1c2VyL2dyb3VwL290aGVyLgogCSAgIEFsc28sIGlmIG51bV9hY2VzIGlzIDAgaS5lLiBEQUNMIGhhcyBubyBBQ0VzLApAQCAtMzgxLDEwICszNzIsNiBAQAogCQlwcGFjZSA9IGttYWxsb2MobnVtX2FjZXMgKiBzaXplb2Yoc3RydWN0IGNpZnNfYWNlICopLAogCQkJCUdGUF9LRVJORUwpOwogCi0vKgkJY2lmc2NyZWQtPmNlY291bnQgPSBwZGFjbC0+bnVtX2FjZXM7Ci0JCWNpZnNjcmVkLT5hY2VzID0ga21hbGxvYyhudW1fYWNlcyAqCi0JCQlzaXplb2Yoc3RydWN0IGNpZnNfYWNlICopLCBHRlBfS0VSTkVMKTsqLwotCiAJCWZvciAoaSA9IDA7IGkgPCBudW1fYWNlczsgKytpKSB7CiAJCQlwcGFjZVtpXSA9IChzdHJ1Y3QgY2lmc19hY2UgKikgKGFjbF9iYXNlICsgYWNsX3NpemUpOwogI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgpAQCAtNDI0LDcgKzQxMSw3IEBACiBzdGF0aWMgaW50IHNldF9jaG1vZF9kYWNsKHN0cnVjdCBjaWZzX2FjbCAqcG5kYWNsLCBzdHJ1Y3QgY2lmc19zaWQgKnBvd25lcnNpZCwKIAkJCXN0cnVjdCBjaWZzX3NpZCAqcGdycHNpZCwgX191NjQgbm1vZGUpCiB7Ci0JX19sZTE2IHNpemUgPSAwOworCXUxNiBzaXplID0gMDsKIAlzdHJ1Y3QgY2lmc19hY2wgKnBubmRhY2w7CiAKIAlwbm5kYWNsID0gKHN0cnVjdCBjaWZzX2FjbCAqKSgoY2hhciAqKXBuZGFjbCArIHNpemVvZihzdHJ1Y3QgY2lmc19hY2wpKTsKQEAgLTQzNyw3ICs0MjQsNyBAQAogCQkJCQkgJnNpZF9ldmVyeW9uZSwgbm1vZGUsIFNfSVJXWE8pOwogCiAJcG5kYWNsLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZSArIHNpemVvZihzdHJ1Y3QgY2lmc19hY2wpKTsKLQlwbmRhY2wtPm51bV9hY2VzID0gMzsKKwlwbmRhY2wtPm51bV9hY2VzID0gY3B1X3RvX2xlMzIoMyk7CiAKIAlyZXR1cm4gKDApOwogfQpAQCAtNDk1LDEzICs0ODIsMTEgQEAKIAkJCQlsZTMyX3RvX2NwdShwbnRzZC0+Z3NpZG9mZnNldCkpOwogCWRhY2xvZmZzZXQgPSBsZTMyX3RvX2NwdShwbnRzZC0+ZGFjbG9mZnNldCk7CiAJZGFjbF9wdHIgPSAoc3RydWN0IGNpZnNfYWNsICopKChjaGFyICopcG50c2QgKyBkYWNsb2Zmc2V0KTsKLSNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKLQljRllJKDEsICgicmV2aXNpb24gJWQgdHlwZSAweCV4IG9vZmZzZXQgMHgleCBnb2Zmc2V0IDB4JXggIgorCWNGWUkoREJHMiwgKCJyZXZpc2lvbiAlZCB0eXBlIDB4JXggb29mZnNldCAweCV4IGdvZmZzZXQgMHgleCAiCiAJCSAic2FjbG9mZnNldCAweCV4IGRhY2xvZmZzZXQgMHgleCIsCiAJCSBwbnRzZC0+cmV2aXNpb24sIHBudHNkLT50eXBlLCBsZTMyX3RvX2NwdShwbnRzZC0+b3NpZG9mZnNldCksCiAJCSBsZTMyX3RvX2NwdShwbnRzZC0+Z3NpZG9mZnNldCksCiAJCSBsZTMyX3RvX2NwdShwbnRzZC0+c2FjbG9mZnNldCksIGRhY2xvZmZzZXQpKTsKLSNlbmRpZgogLyoJY2lmc19kdW1wX21lbSgib3duZXJfc2lkOiAiLCBvd25lcl9zaWRfcHRyLCA2NCk7ICovCiAJcmMgPSBwYXJzZV9zaWQob3duZXJfc2lkX3B0ciwgZW5kX29mX2FjbCk7CiAJaWYgKHJjKQpAQCAtNTcxLDkgKzU1Niw5IEBACiAKIC8qIFJldHJpZXZlIGFuIEFDTCBmcm9tIHRoZSBzZXJ2ZXIgKi8KIHN0YXRpYyBzdHJ1Y3QgY2lmc19udHNkICpnZXRfY2lmc19hY2wodTMyICpwYWNsbGVuLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpwYXRoKQorCQkJCSAgICAgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBfX3UxNiAqcGZpZCkKIHsKLQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGU7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlID0gTlVMTDsKIAlpbnQgdW5sb2NrX2ZpbGUgPSBGQUxTRTsKIAlpbnQgeGlkOwogCWludCByYyA9IC1FSU87CkBAIC01ODgsNyArNTczLDExIEBACiAJCXJldHVybiBOVUxMOwogCiAJeGlkID0gR2V0WGlkKCk7Ci0Jb3Blbl9maWxlID0gZmluZF9yZWFkYWJsZV9maWxlKENJRlNfSShpbm9kZSkpOworCWlmIChwZmlkID09IE5VTEwpCisJCW9wZW5fZmlsZSA9IGZpbmRfcmVhZGFibGVfZmlsZShDSUZTX0koaW5vZGUpKTsKKwllbHNlCisJCWZpZCA9ICpwZmlkOworCiAJc2IgPSBpbm9kZS0+aV9zYjsKIAlpZiAoc2IgPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CkBAIC01OTksNyArNTg4LDcgQEAKIAlpZiAob3Blbl9maWxlKSB7CiAJCXVubG9ja19maWxlID0gVFJVRTsKIAkJZmlkID0gb3Blbl9maWxlLT5uZXRmaWQ7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHBmaWQgPT0gTlVMTCkgewogCQlpbnQgb3Bsb2NrID0gRkFMU0U7CiAJCS8qIG9wZW4gZmlsZSAqLwogCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgY2lmc19zYi0+dGNvbiwgcGF0aCwgRklMRV9PUEVOLApAQCAtNjE1LDEwICs2MDQsMTEgQEAKIAogCXJjID0gQ0lGU1NNQkdldENJRlNBQ0woeGlkLCBjaWZzX3NiLT50Y29uLCBmaWQsICZwbnRzZCwgcGFjbGxlbik7CiAJY0ZZSSgxLCAoIkdldENJRlNBQ0wgcmMgPSAlZCBBQ0wgbGVuICVkIiwgcmMsICpwYWNsbGVuKSk7Ci0JaWYgKHVubG9ja19maWxlID09IFRSVUUpCisJaWYgKHVubG9ja19maWxlID09IFRSVUUpIC8qIGZpbmRfcmVhZGFibGVfZmlsZSBpbmNyZW1lbnRzIHJlZiBjb3VudCAqLwogCQlhdG9taWNfZGVjKCZvcGVuX2ZpbGUtPndydFBlbmRpbmcpOwotCWVsc2UKKwllbHNlIGlmIChwZmlkID09IE5VTEwpIC8qIGlmIG9wZW5lZCBhYm92ZSB3ZSBoYXZlIHRvIGNsb3NlIHRoZSBoYW5kbGUgKi8KIAkJQ0lGU1NNQkNsb3NlKHhpZCwgY2lmc19zYi0+dGNvbiwgZmlkKTsKKwkvKiBlbHNlIGhhbmRsZSB3YXMgcGFzc2VkIGluIGJ5IGNhbGxlciAqLwogCiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiBwbnRzZDsKQEAgLTYzNiw5ICs2MjYsNyBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCWNGWUkoMSwgKCJzZXQgQUNMIGZvciAlcyBmcm9tIG1vZGUgMHgleCIsIHBhdGgsIGlub2RlLT5pX21vZGUpKTsKLSNlbmRpZgorCWNGWUkoREJHMiwgKCJzZXQgQUNMIGZvciAlcyBmcm9tIG1vZGUgMHgleCIsIHBhdGgsIGlub2RlLT5pX21vZGUpKTsKIAogCWlmICghaW5vZGUpCiAJCXJldHVybiAocmMpOwpAQCAtNjY5LDkgKzY1Nyw3IEBACiAJfQogCiAJcmMgPSBDSUZTU01CU2V0Q0lGU0FDTCh4aWQsIGNpZnNfc2ItPnRjb24sIGZpZCwgcG5udHNkLCBhY2xsZW4pOwotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCWNGWUkoMSwgKCJTZXRDSUZTQUNMIHJjID0gJWQiLCByYykpOwotI2VuZGlmCisJY0ZZSShEQkcyLCAoIlNldENJRlNBQ0wgcmMgPSAlZCIsIHJjKSk7CiAJaWYgKHVubG9ja19maWxlID09IFRSVUUpCiAJCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CiAJZWxzZQpAQCAtNjgzLDE2ICs2NjksMTQgQEAKIH0KIAogLyogVHJhbnNsYXRlIHRoZSBDSUZTIEFDTCAoc2ltbGFyIHRvIE5URlMgQUNMKSBmb3IgYSBmaWxlIGludG8gbW9kZSBiaXRzICovCi12b2lkIGFjbF90b191aWRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoKQordm9pZCBhY2xfdG9fdWlkX21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgX191MTYgKnBmaWQpCiB7CiAJc3RydWN0IGNpZnNfbnRzZCAqcG50c2QgPSBOVUxMOwogCXUzMiBhY2xsZW4gPSAwOwogCWludCByYyA9IDA7CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKLQljRllJKDEsICgiY29udmVydGluZyBBQ0wgdG8gbW9kZSBmb3IgJXMiLCBwYXRoKSk7Ci0jZW5kaWYKLQlwbnRzZCA9IGdldF9jaWZzX2FjbCgmYWNsbGVuLCBpbm9kZSwgcGF0aCk7CisJY0ZZSShEQkcyLCAoImNvbnZlcnRpbmcgQUNMIHRvIG1vZGUgZm9yICVzIiwgcGF0aCkpOworCXBudHNkID0gZ2V0X2NpZnNfYWNsKCZhY2xsZW4sIGlub2RlLCBwYXRoLCBwZmlkKTsKIAogCS8qIGlmIHdlIGNhbiByZXRyaWV2ZSB0aGUgQUNMLCBub3cgcGFyc2UgQWNjZXNzIENvbnRyb2wgRW50cmllcywgQUNFcyAqLwogCWlmIChwbnRzZCkKQEAgLTcxMiwxMiArNjk2LDEwIEBACiAJc3RydWN0IGNpZnNfbnRzZCAqcG50c2QgPSBOVUxMOyAvKiBhY2wgb2J0YWluZWQgZnJvbSBzZXJ2ZXIgKi8KIAlzdHJ1Y3QgY2lmc19udHNkICpwbm50c2QgPSBOVUxMOyAvKiBtb2RpZmllZCBhY2wgdG8gYmUgc2VudCB0byBzZXJ2ZXIgKi8KIAotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCWNGWUkoMSwgKCJzZXQgQUNMIGZyb20gbW9kZSBmb3IgJXMiLCBwYXRoKSk7Ci0jZW5kaWYKKwljRllJKERCRzIsICgic2V0IEFDTCBmcm9tIG1vZGUgZm9yICVzIiwgcGF0aCkpOwogCiAJLyogR2V0IHRoZSBzZWN1cml0eSBkZXNjcmlwdG9yICovCi0JcG50c2QgPSBnZXRfY2lmc19hY2woJmFjbGxlbiwgaW5vZGUsIHBhdGgpOworCXBudHNkID0gZ2V0X2NpZnNfYWNsKCZhY2xsZW4sIGlub2RlLCBwYXRoLCBOVUxMKTsKIAogCS8qIEFkZCB0aHJlZSBBQ0VzIGZvciBvd25lciwgZ3JvdXAsIGV2ZXJ5b25lIGdldHRpbmcgcmlkIG9mCiAJICAgb3RoZXIgQUNFcyBhcyBjaG1vZCBkaXNhYmxlcyBBQ0VzIGFuZCBzZXQgdGhlIHNlY3VyaXR5IGRlc2NyaXB0b3IgKi8KQEAgLTczNiwxNiArNzE4LDEyIEBACiAKIAkJcmMgPSBidWlsZF9zZWNfZGVzYyhwbnRzZCwgcG5udHNkLCBhY2xsZW4sIGlub2RlLCBubW9kZSk7CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKLQkJY0ZZSSgxLCAoImJ1aWxkX3NlY19kZXNjIHJjOiAlZCIsIHJjKSk7Ci0jZW5kaWYKKwkJY0ZZSShEQkcyLCAoImJ1aWxkX3NlY19kZXNjIHJjOiAlZCIsIHJjKSk7CiAKIAkJaWYgKCFyYykgewogCQkJLyogU2V0IHRoZSBzZWN1cml0eSBkZXNjcmlwdG9yICovCiAJCQlyYyA9IHNldF9jaWZzX2FjbChwbm50c2QsIGFjbGxlbiwgaW5vZGUsIHBhdGgpOwotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCQkJY0ZZSSgxLCAoInNldF9jaWZzX2FjbCByYzogJWQiLCByYykpOwotI2VuZGlmCisJCQljRllJKERCRzIsICgic2V0X2NpZnNfYWNsIHJjOiAlZCIsIHJjKSk7CiAJCX0KIAogCQlrZnJlZShwbm50c2QpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggZmNjNDM0Mi4uYTA0YjE3ZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC0yMDQsOSArMjA0LDggQEAKIAkJcmV0dXJuOwogCX0KIAlyYyA9IGNpZnNfdW1vdW50KHNiLCBjaWZzX3NiKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCWNFUlJPUigxLCAoImNpZnNfdW1vdW50IGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVkIiwgcmMpKTsKLQl9CiAjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAogCWlmIChjaWZzX3NiLT5tb3VudGRhdGEpIHsKIAkJa2ZyZWUoY2lmc19zYi0+bW91bnRkYXRhKTsKQEAgLTQ2MSw3ICs0NjAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyBjaWZzX3F1b3RhY3RsX29wcyA9IHsKIAkuc2V0X3hxdW90YQk9IGNpZnNfeHF1b3RhX3NldCwKLQkuZ2V0X3hxdW90YQk9IGNpZnNfeHF1b3RhX3NldCwKKwkuZ2V0X3hxdW90YQk9IGNpZnNfeHF1b3RhX2dldCwKIAkuc2V0X3hzdGF0ZQk9IGNpZnNfeHN0YXRlX3NldCwKIAkuZ2V0X3hzdGF0ZQk9IGNpZnNfeHN0YXRlX2dldCwKIH07CkBAIC00NzIsOSArNDcxLDcgQEAKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCiAJZGZzX3Nocmlua191bW91bnRfaGVscGVyKHZmc21udCk7Ci0jZW5kaWYgLyogQ09ORklHIENJRlNfREZTX1VQQ0FMTCAqLwogCiAJaWYgKCEoZmxhZ3MgJiBNTlRfRk9SQ0UpKQogCQlyZXR1cm47CkBAIC05OTIsOSArOTg5LDcgQEAKIGluaXRfY2lmcyh2b2lkKQogewogCWludCByYyA9IDA7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKIAljaWZzX3Byb2NfaW5pdCgpOwotI2VuZGlmCiAvKglJTklUX0xJU1RfSEVBRCgmR2xvYmFsU2VydmVyTGlzdCk7Ki8JLyogQkIgbm90IGltcGxlbWVudGVkIHlldCAqLwogCUlOSVRfTElTVF9IRUFEKCZHbG9iYWxTTUJTZXNzaW9uTGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJkdsb2JhbFRyZWVDb25uZWN0aW9uTGlzdCk7CkBAIC0xMDk1LDE5ICsxMDkwLDE1IEBACiAgb3V0X2Rlc3Ryb3lfaW5vZGVjYWNoZToKIAljaWZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOwogIG91dF9jbGVhbl9wcm9jOgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJY2lmc19wcm9jX2NsZWFuKCk7Ci0jZW5kaWYKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogZXhpdF9jaWZzKHZvaWQpCiB7Ci0JY0ZZSSgwLCAoImV4aXRfY2lmcyIpKTsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworCWNGWUkoREJHMiwgKCJleGl0X2NpZnMiKSk7CiAJY2lmc19wcm9jX2NsZWFuKCk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCiAJdW5yZWdpc3Rlcl9rZXlfdHlwZSgma2V5X3R5cGVfZG5zX3Jlc29sdmVyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDVkMzJkOGQuLjY5YTJlMTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCiBzdHJ1Y3QgZGZzX2luZm8zX3BhcmFtIHsKIAlpbnQgZmxhZ3M7IC8qIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIsIERGU1JFRl9TVE9SQUdFX1NFUlZFUiovCi0JaW50IFBhdGhDb25zdW1lZDsKKwlpbnQgcGF0aF9jb25zdW1lZDsKIAlpbnQgc2VydmVyX3R5cGU7CiAJaW50IHJlZl9mbGFnOwogCWNoYXIgKnBhdGhfbmFtZTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IDJmMDlmNTYuLjdlNWUwZTcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtMzksOCArMzksOCBAQAogCQkJdW5zaWduZWQgaW50IC8qIGxlbmd0aCAqLyAsIHN0cnVjdCBzb2NrYWRkciAqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgX0dldFhpZCh2b2lkKTsKIGV4dGVybiB2b2lkIF9GcmVlWGlkKHVuc2lnbmVkIGludCk7Ci0jZGVmaW5lIEdldFhpZCgpIChpbnQpX0dldFhpZCgpOyBjRllJKDEsKCJDSUZTIFZGUzogaW4gJXMgYXMgWGlkOiAlZCB3aXRoIHVpZDogJWQiLF9fRlVOQ1RJT05fXywgeGlkLGN1cnJlbnQtPmZzdWlkKSk7Ci0jZGVmaW5lIEZyZWVYaWQoY3Vycl94aWQpIHtfRnJlZVhpZChjdXJyX3hpZCk7IGNGWUkoMSwoIkNJRlMgVkZTOiBsZWF2aW5nICVzICh4aWQgPSAlZCkgcmMgPSAlZCIsX19GVU5DVElPTl9fLGN1cnJfeGlkLChpbnQpcmMpKTt9CisjZGVmaW5lIEdldFhpZCgpIChpbnQpX0dldFhpZCgpOyBjRllJKDEsKCJDSUZTIFZGUzogaW4gJXMgYXMgWGlkOiAlZCB3aXRoIHVpZDogJWQiLF9fZnVuY19fLCB4aWQsY3VycmVudC0+ZnN1aWQpKTsKKyNkZWZpbmUgRnJlZVhpZChjdXJyX3hpZCkge19GcmVlWGlkKGN1cnJfeGlkKTsgY0ZZSSgxLCgiQ0lGUyBWRlM6IGxlYXZpbmcgJXMgKHhpZCA9ICVkKSByYyA9ICVkIixfX2Z1bmNfXyxjdXJyX3hpZCwoaW50KXJjKSk7fQogZXh0ZXJuIGNoYXIgKmJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiBjaGFyICpidWlsZF93aWxkY2FyZF9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5KTsKIC8qIGV4dGVybiB2b2lkIHJlbmV3X3BhcmVudGFsX3RpbWVzdGFtcHMoc3RydWN0IGRlbnRyeSAqZGlyZW50cnkpOyovCkBAIC01MywxMSArNTMsMTEgQEAKIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUyKGNvbnN0IHVuc2lnbmVkIGludCAvKiB4aWQgKi8gLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKiwKIAkJCXN0cnVjdCBrdmVjICosIGludCAvKiBudmVjIHRvIHNlbmQgKi8sCiAJCQlpbnQgKiAvKiB0eXBlIG9mIGJ1ZiByZXR1cm5lZCAqLyAsIGNvbnN0IGludCBmbGFncyk7Ci1leHRlcm4gaW50IFNlbmRSZWNlaXZlQmxvY2tpbmdMb2NrKGNvbnN0IHVuc2lnbmVkIGludCAvKiB4aWQgKi8gLAotCQkJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICosCi0JCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCi0JCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBvdXQgKi8gLAotCQkJCWludCAqIC8qIGJ5dGVzIHJldHVybmVkICovKTsKK2V4dGVybiBpbnQgU2VuZFJlY2VpdmVCbG9ja2luZ0xvY2soY29uc3QgdW5zaWduZWQgaW50IHhpZCwKKwkJCXN0cnVjdCBjaWZzVGNvbkluZm8gKnB0Y29uLAorCQkJc3RydWN0IHNtYl9oZHIgKmluX2J1ZiAsCisJCQlzdHJ1Y3Qgc21iX2hkciAqb3V0X2J1ZiwKKwkJCWludCAqYnl0ZXNfcmV0dXJuZWQpOwogZXh0ZXJuIGludCBjaGVja1NNQihzdHJ1Y3Qgc21iX2hkciAqc21iLCBfX3UxNiBtaWQsIHVuc2lnbmVkIGludCBsZW5ndGgpOwogZXh0ZXJuIGludCBpc192YWxpZF9vcGxvY2tfYnJlYWsoc3RydWN0IHNtYl9oZHIgKnNtYiwgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqKTsKIGV4dGVybiBpbnQgaXNfc2l6ZV9zYWZlX3RvX2NoYW5nZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBfX3U2NCBlb2YpOwpAQCAtODQsNyArODQsNyBAQAogZXh0ZXJuIHN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqQWxsb2NPcGxvY2tRRW50cnkoc3RydWN0IGlub2RlICosIHUxNiwKIAkJCQkJCSBzdHJ1Y3QgY2lmc1Rjb25JbmZvICopOwogZXh0ZXJuIHZvaWQgRGVsZXRlT3Bsb2NrUUVudHJ5KHN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqKTsKLWV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY2lmc19OVHRpbWVUb1VuaXgodTY0IC8qIHV0YyBuYW5vc2Vjb25kcyBzaW5jZSAxNjAxICovICk7CitleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNpZnNfTlR0aW1lVG9Vbml4KHU2NCB1dGNfbmFub3NlY29uZHNfc2luY2VfMTYwMSk7CiBleHRlcm4gdTY0IGNpZnNfVW5peFRpbWVUb05UKHN0cnVjdCB0aW1lc3BlYyk7CiBleHRlcm4gX19sZTY0IGNudnJ0RG9zQ2lmc1RtKF9fdTE2IGRhdGUsIF9fdTE2IHRpbWUpOwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBjbnZydERvc1VuaXhUbShfX3UxNiBkYXRlLCBfX3UxNiB0aW1lKTsKQEAgLTkyLDExICs5MiwxMiBAQAogZXh0ZXJuIGludCBjaWZzX2dldF9pbm9kZV9pbmZvKHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9wYXRoLAogCQkJRklMRV9BTExfSU5GTyAqIHBmaWxlX2luZm8sCi0JCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgeGlkKTsKKwkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB4aWQsIGNvbnN0IF9fdTE2ICpwZmlkKTsKIGV4dGVybiBpbnQgY2lmc19nZXRfaW5vZGVfaW5mb191bml4KHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9wYXRoLAogCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHhpZCk7Ci1leHRlcm4gdm9pZCBhY2xfdG9fdWlkX21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc2VhcmNoX3BhdGgpOworZXh0ZXJuIHZvaWQgYWNsX3RvX3VpZF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgY29uc3QgX191MTYgKnBmaWQpOwogZXh0ZXJuIGludCBtb2RlX3RvX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLCBfX3U2NCk7CiAKIGV4dGVybiBpbnQgY2lmc19tb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGNpZnNfc2JfaW5mbyAqLCBjaGFyICosCkBAIC0xMDQsNyArMTA1LDExIEBACiBleHRlcm4gaW50IGNpZnNfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICopOwogI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKIGV4dGVybiB2b2lkIGRmc19zaHJpbmtfdW1vdW50X2hlbHBlcihzdHJ1Y3QgdmZzbW91bnQgKnZmc21udCk7Ci0jZW5kaWYKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZGZzX3Nocmlua191bW91bnRfaGVscGVyKHN0cnVjdCB2ZnNtb3VudCAqdmZzbW50KQoreworfQorI2VuZGlmIC8qIERGU19VUENBTEwgKi8KIHZvaWQgY2lmc19wcm9jX2luaXQodm9pZCk7CiB2b2lkIGNpZnNfcHJvY19jbGVhbih2b2lkKTsKIApAQCAtMTc1LDExICsxODAsMTEgQEAKIAkJCXN0cnVjdCBrc3RhdGZzICpGU0RhdGEpOwogCiBleHRlcm4gaW50IENJRlNTTUJTZXRUaW1lcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkJY29uc3QgY2hhciAqZmlsZU5hbWUsIGNvbnN0IEZJTEVfQkFTSUNfSU5GTyAqIGRhdGEsCisJCQljb25zdCBjaGFyICpmaWxlTmFtZSwgY29uc3QgRklMRV9CQVNJQ19JTkZPICpkYXRhLAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLAogCQkJaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwogZXh0ZXJuIGludCBDSUZTU01CU2V0RmlsZVRpbWVzKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCQljb25zdCBGSUxFX0JBU0lDX0lORk8gKiBkYXRhLCBfX3UxNiBmaWQpOworCQkJY29uc3QgRklMRV9CQVNJQ19JTkZPICpkYXRhLCBfX3UxNiBmaWQpOwogI2lmIDAKIGV4dGVybiBpbnQgQ0lGU1NNQlNldEF0dHJMZWdhY3koaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNoYXIgKmZpbGVOYW1lLCBfX3UxNiBkb3NfYXR0cmlidXRlcywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTQwOTUyNC4uMzBiYmU0NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNzbWIuYwogICoKLSAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA3CisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOAogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgQ29udGFpbnMgdGhlIHJvdXRpbmVzIGZvciBjb25zdHJ1Y3RpbmcgdGhlIFNNQiBQRFVzIHRoZW1zZWx2ZXMKQEAgLTEwMiwxMCArMTAyLDEyIEBACiAJICAgdG8gdGhpcyB0Y29uICovCiB9CiAKLS8qIElmIHRoZSByZXR1cm4gY29kZSBpcyB6ZXJvLCB0aGlzIGZ1bmN0aW9uIG11c3QgZmlsbCBpbiByZXF1ZXN0X2J1ZiBwb2ludGVyICovCisvKiBBbGxvY2F0ZSBhbmQgcmV0dXJuIHBvaW50ZXIgdG8gYW4gU01CIHJlcXVlc3QgYnVmZmVyLCBhbmQgc2V0IGJhc2ljCisgICBTTUIgaW5mb3JtYXRpb24gaW4gdGhlIFNNQiBoZWFkZXIuICBJZiB0aGUgcmV0dXJuIGNvZGUgaXMgemVybywgdGhpcworICAgZnVuY3Rpb24gbXVzdCBoYXZlIGZpbGxlZCBpbiByZXF1ZXN0X2J1ZiBwb2ludGVyICovCiBzdGF0aWMgaW50CiBzbWFsbF9zbWJfaW5pdChpbnQgc21iX2NvbW1hbmQsIGludCB3Y3QsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JIHZvaWQgKipyZXF1ZXN0X2J1ZiAvKiByZXR1cm5lZCAqLykKKwkJdm9pZCAqKnJlcXVlc3RfYnVmKQogewogCWludCByYyA9IDA7CiAKQEAgLTM2Myw3ICszNjUsNyBAQAogCQkqcmVzcG9uc2VfYnVmID0gKnJlcXVlc3RfYnVmOwogCiAJaGVhZGVyX2Fzc2VtYmxlKChzdHJ1Y3Qgc21iX2hkciAqKSAqcmVxdWVzdF9idWYsIHNtYl9jb21tYW5kLCB0Y29uLAotCQkJd2N0IC8qd2N0ICovICk7CisJCQl3Y3QpOwogCiAJaWYgKHRjb24gIT0gTlVMTCkKIAkJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9zbWJzX3NlbnQpOwpAQCAtNTIzLDcgKzUyNSw3IEBACiAJCQlpZiAocmVtYWluID49IChNSU5fVFpfQURKIC8gMikpCiAJCQkJcmVzdWx0ICs9IE1JTl9UWl9BREo7CiAJCQlpZiAodmFsIDwgMCkKLQkJCQlyZXN1bHQgPSAtIHJlc3VsdDsKKwkJCQlyZXN1bHQgPSAtcmVzdWx0OwogCQkJc2VydmVyLT50aW1lQWRqID0gcmVzdWx0OwogCQl9IGVsc2UgewogCQkJc2VydmVyLT50aW1lQWRqID0gKGludCl0bXA7CkBAIC02MDAsNyArNjAyLDcgQEAKIAlzZXJ2ZXItPm1heEJ1ZiA9IG1pbihsZTMyX3RvX2NwdShwU01Cci0+TWF4QnVmZmVyU2l6ZSksCiAJCQkoX191MzIpIENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUpOwogCXNlcnZlci0+bWF4UncgPSBsZTMyX3RvX2NwdShwU01Cci0+TWF4UmF3U2l6ZSk7Ci0JY0ZZSSgwLCAoIk1heCBidWYgPSAlZCIsIHNlcy0+c2VydmVyLT5tYXhCdWYpKTsKKwljRllJKERCRzIsICgiTWF4IGJ1ZiA9ICVkIiwgc2VzLT5zZXJ2ZXItPm1heEJ1ZikpOwogCUdFVFUzMihzZXMtPnNlcnZlci0+c2Vzc2lkKSA9IGxlMzJfdG9fY3B1KHBTTUJyLT5TZXNzaW9uS2V5KTsKIAlzZXJ2ZXItPmNhcGFiaWxpdGllcyA9IGxlMzJfdG9fY3B1KHBTTUJyLT5DYXBhYmlsaXRpZXMpOwogCXNlcnZlci0+dGltZUFkaiA9IChpbnQpKF9fczE2KWxlMTZfdG9fY3B1KHBTTUJyLT5TZXJ2ZXJUaW1lWm9uZSk7CkBAIC04NjgsOSArODcwLDggQEAKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgiUG9zaXggZGVsZXRlIHJldHVybmVkICVkIiwgcmMpKTsKLQl9CiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIAogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fZGVsZXRlcyk7CkBAIC05MTYsOSArOTE3LDggQEAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CiAJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9kZWxldGVzKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCWNGWUkoMSwgKCJFcnJvciBpbiBSTUZpbGUgPSAlZCIsIHJjKSk7Ci0JfQogCiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIAlpZiAocmMgPT0gLUVBR0FJTikKQEAgLTk2MSw5ICs5NjEsOCBAQAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKIAljaWZzX3N0YXRzX2luYygmdGNvbi0+bnVtX3JtZGlycyk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgiRXJyb3IgaW4gUk1EaXIgPSAlZCIsIHJjKSk7Ci0JfQogCiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIAlpZiAocmMgPT0gLUVBR0FJTikKQEAgLTEwMDUsOSArMTAwNCw4IEBACiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fbWtkaXJzKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCWNGWUkoMSwgKCJFcnJvciBpbiBNa2RpciA9ICVkIiwgcmMpKTsKLQl9CiAKIAljaWZzX2J1Zl9yZWxlYXNlKHBTTUIpOwogCWlmIChyYyA9PSAtRUFHQUlOKQpAQCAtMTAxNyw3ICsxMDE1LDcgQEAKIAogaW50CiBDSUZTUE9TSVhDcmVhdGUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgX191MzIgcG9zaXhfZmxhZ3MsCi0JCV9fdTY0IG1vZGUsIF9fdTE2ICogbmV0ZmlkLCBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcFJldERhdGEsCisJCV9fdTY0IG1vZGUsIF9fdTE2ICpuZXRmaWQsIEZJTEVfVU5JWF9CQVNJQ19JTkZPICpwUmV0RGF0YSwKIAkJX191MzIgKnBPcGxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewpAQCAtMTAyNyw4ICsxMDI1LDggQEAKIAlpbnQgcmMgPSAwOwogCWludCBieXRlc19yZXR1cm5lZCA9IDA7CiAJX191MTYgcGFyYW1zLCBwYXJhbV9vZmZzZXQsIG9mZnNldCwgYnl0ZV9jb3VudCwgY291bnQ7Ci0JT1BFTl9QU1hfUkVRICogcGRhdGE7Ci0JT1BFTl9QU1hfUlNQICogcHN4X3JzcDsKKwlPUEVOX1BTWF9SRVEgKnBkYXRhOworCU9QRU5fUFNYX1JTUCAqcHN4X3JzcDsKIAogCWNGWUkoMSwgKCJJbiBQT1NJWCBDcmVhdGUiKSk7CiBQc3hDcmVhdDoKQEAgLTExMTAsOSArMTEwOCw3IEBACiAJLyogY2hlY2sgdG8gbWFrZSBzdXJlIHJlc3BvbnNlIGRhdGEgaXMgdGhlcmUgKi8KIAlpZiAocHN4X3JzcC0+UmV0dXJuZWRMZXZlbCAhPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRklMRV9VTklYX0JBU0lDKSkgewogCQlwUmV0RGF0YS0+VHlwZSA9IGNwdV90b19sZTMyKC0xKTsgLyogdW5rbm93biAqLwotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCQljRllJKDEsICgidW5rbm93biB0eXBlIikpOwotI2VuZGlmCisJCWNGWUkoREJHMiwgKCJ1bmtub3duIHR5cGUiKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHBTTUJyLT5CeXRlQ291bnQgPCBzaXplb2YoT1BFTl9QU1hfUlNQKQogCQkJCQkrIHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTykpIHsKQEAgLTExNjksOCArMTE2NSw4IEBACiBpbnQKIFNNQkxlZ2FjeU9wZW4oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkgICAgY29uc3QgY2hhciAqZmlsZU5hbWUsIGNvbnN0IGludCBvcGVuRGlzcG9zaXRpb24sCi0JICAgIGNvbnN0IGludCBhY2Nlc3NfZmxhZ3MsIGNvbnN0IGludCBjcmVhdGVfb3B0aW9ucywgX191MTYgKiBuZXRmaWQsCi0JICAgIGludCAqcE9wbG9jaywgRklMRV9BTExfSU5GTyAqIHBmaWxlX2luZm8sCisJICAgIGNvbnN0IGludCBhY2Nlc3NfZmxhZ3MsIGNvbnN0IGludCBjcmVhdGVfb3B0aW9ucywgX191MTYgKm5ldGZpZCwKKwkgICAgaW50ICpwT3Bsb2NrLCBGSUxFX0FMTF9JTkZPICpwZmlsZV9pbmZvLAogCSAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIAlpbnQgcmMgPSAtRUFDQ0VTOwpAQCAtMTIyMSw4ICsxMjE3LDggQEAKIAogCWlmIChjcmVhdGVfb3B0aW9ucyAmIENSRUFURV9PUFRJT05fU1BFQ0lBTCkKIAkJcFNNQi0+RmlsZUF0dHJpYnV0ZXMgPSBjcHVfdG9fbGUxNihBVFRSX1NZU1RFTSk7Ci0JZWxzZQotICAgICAgICAgICAgICAgIHBTTUItPkZpbGVBdHRyaWJ1dGVzID0gY3B1X3RvX2xlMTYoMC8qQVRUUl9OT1JNQUwqLyk7IC8qIEJCIEZJWE1FICovCisJZWxzZSAvKiBCQiBGSVhNRSBCQiAqLworCQlwU01CLT5GaWxlQXR0cmlidXRlcyA9IGNwdV90b19sZTE2KDAvKkFUVFJfTk9STUFMKi8pOwogCiAJLyogaWYgKChvbW9kZSAmIFNfSVdVR08pID09IDApCiAJCXBTTUItPkZpbGVBdHRyaWJ1dGVzIHw9IGNwdV90b19sZTMyKEFUVFJfUkVBRE9OTFkpOyovCkBAIC0xMjg0LDggKzEyODAsOCBAQAogaW50CiBDSUZTU01CT3Blbihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCSAgICBjb25zdCBjaGFyICpmaWxlTmFtZSwgY29uc3QgaW50IG9wZW5EaXNwb3NpdGlvbiwKLQkgICAgY29uc3QgaW50IGFjY2Vzc19mbGFncywgY29uc3QgaW50IGNyZWF0ZV9vcHRpb25zLCBfX3UxNiAqIG5ldGZpZCwKLQkgICAgaW50ICpwT3Bsb2NrLCBGSUxFX0FMTF9JTkZPICogcGZpbGVfaW5mbywKKwkgICAgY29uc3QgaW50IGFjY2Vzc19mbGFncywgY29uc3QgaW50IGNyZWF0ZV9vcHRpb25zLCBfX3UxNiAqbmV0ZmlkLAorCSAgICBpbnQgKnBPcGxvY2ssIEZJTEVfQUxMX0lORk8gKnBmaWxlX2luZm8sCiAJICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewogCWludCByYyA9IC1FQUNDRVM7CkBAIC0xNTU2LDkgKzE1NTIsOSBAQAogCX0gLyogZWxzZSBzZXR0aW5nIGZpbGUgc2l6ZSB3aXRoIHdyaXRlIG9mIHplcm8gYnl0ZXMgKi8KIAlpZiAod2N0ID09IDE0KQogCQlieXRlX2NvdW50ID0gYnl0ZXNfc2VudCArIDE7IC8qIHBhZCAqLwotCWVsc2UgLyogd2N0ID09IDEyICovIHsKKwllbHNlIC8qIHdjdCA9PSAxMiAqLwogCQlieXRlX2NvdW50ID0gYnl0ZXNfc2VudCArIDU7IC8qIGJpZ2dlciBwYWQsIHNtYWxsZXIgc21iIGhkciAqLwotCX0KKwogCXBTTUItPkRhdGFMZW5ndGhMb3cgPSBjcHVfdG9fbGUxNihieXRlc19zZW50ICYgMHhGRkZGKTsKIAlwU01CLT5EYXRhTGVuZ3RoSGlnaCA9IGNwdV90b19sZTE2KGJ5dGVzX3NlbnQgPj4gMTYpOwogCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OwpAQCAtMTY2Myw3ICsxNjU5LDcgQEAKIAkJcmMgPSAtRUlPOwogCQkqbmJ5dGVzID0gMDsKIAl9IGVsc2UgewotCQlXUklURV9SU1AgKiBwU01CciA9IChXUklURV9SU1AgKilpb3ZbMF0uaW92X2Jhc2U7CisJCVdSSVRFX1JTUCAqcFNNQnIgPSAoV1JJVEVfUlNQICopaW92WzBdLmlvdl9iYXNlOwogCQkqbmJ5dGVzID0gbGUxNl90b19jcHUocFNNQnItPkNvdW50SGlnaCk7CiAJCSpuYnl0ZXMgPSAoKm5ieXRlcykgPDwgMTY7CiAJCSpuYnl0ZXMgKz0gbGUxNl90b19jcHUocFNNQnItPkNvdW50KTsKQEAgLTE3NDQsOSArMTc0MCw4IEBACiAJCS8qIFNNQiBidWZmZXIgZnJlZWQgYnkgZnVuY3Rpb24gYWJvdmUgKi8KIAl9CiAJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9sb2Nrcyk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgiU2VuZCBlcnJvciBpbiBMb2NrID0gJWQiLCByYykpOwotCX0KIAogCS8qIE5vdGU6IE9uIC1FQUdBSU4gZXJyb3Igb25seSBjYWxsZXIgY2FuIHJldHJ5IG9uIGhhbmRsZSBiYXNlZCBjYWxscwogCXNpbmNlIGZpbGUgaGFuZGxlIHBhc3NlZCBpbiBubyBsb25nZXIgdmFsaWQgKi8KQEAgLTE3OTEsNyArMTc4Niw3IEBACiAKIAljb3VudCA9IHNpemVvZihzdHJ1Y3QgY2lmc19wb3NpeF9sb2NrKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwotCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDEwMDApOyAvKiBCQiBmaW5kIG1heCBTTUIgUERVIGZyb20gc2VzcyAqLworCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDEwMDApOyAvKiBCQiBmaW5kIG1heCBTTUIgZnJvbSBzZXNzICovCiAJcFNNQi0+U2V0dXBDb3VudCA9IDE7CiAJcFNNQi0+UmVzZXJ2ZWQzID0gMDsKIAlpZiAoZ2V0X2ZsYWcpCkBAIC0xOTcyLDkgKzE5NjcsOCBAQAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKIAljaWZzX3N0YXRzX2luYygmdGNvbi0+bnVtX3JlbmFtZXMpOwotCWlmIChyYykgeworCWlmIChyYykKIAkJY0ZZSSgxLCAoIlNlbmQgZXJyb3IgaW4gcmVuYW1lID0gJWQiLCByYykpOwotCX0KIAogCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CiAKQEAgLTIwMTYsNyArMjAxMCw3IEBACiAJZGF0YV9vZmZzZXQgPSAoY2hhciAqKSAoJnBTTUItPmhkci5Qcm90b2NvbCkgKyBvZmZzZXQ7CiAJcmVuYW1lX2luZm8gPSAoc3RydWN0IHNldF9maWxlX3JlbmFtZSAqKSBkYXRhX29mZnNldDsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwotCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDEwMDApOyAvKiBCQiBmaW5kIG1heCBTTUIgUERVIGZyb20gc2VzcyAqLworCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDEwMDApOyAvKiBCQiBmaW5kIG1heCBTTUIgZnJvbSBzZXNzICovCiAJcFNNQi0+U2V0dXBDb3VudCA9IDE7CiAJcFNNQi0+UmVzZXJ2ZWQzID0gMDsKIAlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoVFJBTlMyX1NFVF9GSUxFX0lORk9STUFUSU9OKTsKQEAgLTIwNTIsOSArMjA0Niw4IEBACiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHBUY29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKIAljaWZzX3N0YXRzX2luYygmcFRjb24tPm51bV90MnJlbmFtZXMpOwotCWlmIChyYykgeworCWlmIChyYykKIAkJY0ZZSSgxLCAoIlNlbmQgZXJyb3IgaW4gUmVuYW1lIChieSBmaWxlIGhhbmRsZSkgPSAlZCIsIHJjKSk7Ci0JfQogCiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIApAQCAtMjIxMSw5ICsyMjA0LDggQEAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CiAJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9zeW1saW5rcyk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgiU2VuZCBlcnJvciBpbiBTZXRQYXRoSW5mbyBjcmVhdGUgc3ltbGluayA9ICVkIiwgcmMpKTsKLQl9CiAKIAlpZiAocFNNQikKIAkJY2lmc19idWZfcmVsZWFzZShwU01CKTsKQEAgLTIyOTksOSArMjI5MSw4IEBACiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1faGFyZGxpbmtzKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIFNldFBhdGhJbmZvIChoYXJkIGxpbmspID0gJWQiLCByYykpOwotCX0KIAogCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CiAJaWYgKHJjID09IC1FQUdBSU4pCkBAIC0yMzcwLDkgKzIzNjEsOSBAQAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKIAljaWZzX3N0YXRzX2luYygmdGNvbi0+bnVtX2hhcmRsaW5rcyk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgiU2VuZCBlcnJvciBpbiBoYXJkIGxpbmsgKE5UIHJlbmFtZSkgPSAlZCIsIHJjKSk7Ci0JfQorCiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIAlpZiAocmMgPT0gLUVBR0FJTikKIAkJZ290byB3aW5DcmVhdGVIYXJkTGlua1JldHJ5OwpAQCAtMjk2OCw5ICsyOTU5LDggQEAKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgiU2V0IFBPU0lYIEFDTCByZXR1cm5lZCAlZCIsIHJjKSk7Ci0JfQogCiBzZXRBQ0xlcnJvckV4aXQ6CiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKQEAgLTI5ODIsNyArMjk3Miw3IEBACiAvKiBCQiBmaXggdGFicyBpbiB0aGlzIGZ1bmN0aW9uIEZJWE1FIEJCICovCiBpbnQKIENJRlNHZXRFeHRBdHRyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JICAgICAgIGNvbnN0IGludCBuZXRmaWQsIF9fdTY0ICogcEV4dEF0dHJCaXRzLCBfX3U2NCAqcE1hc2spCisJICAgICAgIGNvbnN0IGludCBuZXRmaWQsIF9fdTY0ICpwRXh0QXR0ckJpdHMsIF9fdTY0ICpwTWFzaykKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBzbWJfdDJfcWZpX3JlcSAqcFNNQiA9IE5VTEw7CkBAIC0zMDAwLDcgKzI5OTAsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcGFyYW1zID0gMiAvKiBsZXZlbCAqLyArMiAvKiBmaWQgKi87CisJcGFyYW1zID0gMiAvKiBsZXZlbCAqLyArIDIgLyogZmlkICovOwogCXBTTUItPnQyLlRvdGFsRGF0YUNvdW50ID0gMDsKIAlwU01CLT50Mi5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDQpOwogCS8qIEJCIGZpbmQgZXhhY3QgbWF4IGRhdGEgY291bnQgYmVsb3cgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwpAQCAtMzA3MSw3ICszMDYxLDcgQEAKIHsKIAlpbnQgcmMgPSAwOwogCWludCBidWZfdHlwZSA9IDA7Ci0JUVVFUllfU0VDX0RFU0NfUkVRICogcFNNQjsKKwlRVUVSWV9TRUNfREVTQ19SRVEgKnBTTUI7CiAJc3RydWN0IGt2ZWMgaW92WzFdOwogCiAJY0ZZSSgxLCAoIkdldENpZnNBQ0wiKSk7CkBAIC0zMTAxLDcgKzMwOTEsNyBAQAogCWlmIChyYykgewogCQljRllJKDEsICgiU2VuZCBlcnJvciBpbiBRdWVyeVNlY0Rlc2MgPSAlZCIsIHJjKSk7CiAJfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogZGVjb2RlIHJlc3BvbnNlICovCi0JCV9fbGUzMiAqIHBhcm07CisJCV9fbGUzMiAqcGFybTsKIAkJX191MzIgcGFybV9sZW47CiAJCV9fdTMyIGFjbF9sZW47CiAJCXN0cnVjdCBzbWJfY29tX250cmFuc2FjdF9yc3AgKnBTTUJyOwpAQCAtMzIzMCw4ICszMjIwLDggQEAKIAkJCUZJTEVfQUxMX0lORk8gKnBGaW5mbywKIAkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewotCVFVRVJZX0lORk9STUFUSU9OX1JFUSAqIHBTTUI7Ci0JUVVFUllfSU5GT1JNQVRJT05fUlNQICogcFNNQnI7CisJUVVFUllfSU5GT1JNQVRJT05fUkVRICpwU01COworCVFVRVJZX0lORk9STUFUSU9OX1JTUCAqcFNNQnI7CiAJaW50IHJjID0gMDsKIAlpbnQgYnl0ZXNfcmV0dXJuZWQ7CiAJaW50IG5hbWVfbGVuOwpAQCAtMzI2Myw5ICszMjUzLDExIEBACiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwogCWlmIChyYykgewogCQljRllJKDEsICgiU2VuZCBlcnJvciBpbiBRdWVyeUluZm8gPSAlZCIsIHJjKSk7Ci0JfSBlbHNlIGlmIChwRmluZm8pIHsgICAgICAgICAgICAvKiBkZWNvZGUgcmVzcG9uc2UgKi8KKwl9IGVsc2UgaWYgKHBGaW5mbykgewogCQlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAJCV9fdTMyIHRpbWUgPSBsZTMyX3RvX2NwdShwU01Cci0+bGFzdF93cml0ZV90aW1lKTsKKworCQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJLyogQkIgRklYTUUgLSBhZGQgdGltZSB6b25lIGFkanVzdG1lbnQgQkIgKi8KIAkJbWVtc2V0KHBGaW5mbywgMCwgc2l6ZW9mKEZJTEVfQUxMX0lORk8pKTsKIAkJdHMudHZfbnNlYyA9IDA7CkBAIC0zMjk2LDcgKzMyODgsNyBAQAogaW50CiBDSUZTU01CUVBhdGhJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLAotCQkgRklMRV9BTExfSU5GTyAqIHBGaW5kRGF0YSwKKwkJIEZJTEVfQUxMX0lORk8gKnBGaW5kRGF0YSwKIAkJIGludCBsZWdhY3kgLyogb2xkIHN0eWxlIGluZm9sZXZlbCAqLywKIAkJIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQogewpAQCAtMzM3MSwxMCArMzM2MywxMiBAQAogCQllbHNlIGlmIChwRmluZERhdGEpIHsKIAkJCWludCBzaXplOwogCQkJX191MTYgZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7Ci0JCQlpZiAobGVnYWN5KSAvKiB3ZSBkbyBub3QgcmVhZCB0aGUgbGFzdCBmaWVsZCwgRUFzaXplLAotCQkJCSAgICAgICBmb3J0dW5hdGVseSBzaW5jZSBpdCB2YXJpZXMgYnkgc3ViZGlhbGVjdAotCQkJCSAgICAgICBhbmQgb24gU2V0IHZzLiBHZXQsIGlzIHR3byBieXRlcyBvciA0Ci0JCQkJICAgICAgIGJ5dGVzIGRlcGVuZGluZyBidXQgd2UgZG9uJ3QgY2FyZSBoZXJlICovCisKKwkJCS8qIE9uIGxlZ2FjeSByZXNwb25zZXMgd2UgZG8gbm90IHJlYWQgdGhlIGxhc3QgZmllbGQsCisJCQlFQXNpemUsIGZvcnR1bmF0ZWx5IHNpbmNlIGl0IHZhcmllcyBieSBzdWJkaWFsZWN0IGFuZAorCQkJYWxzbyBub3RlIGl0IGRpZmZlcnMgb24gU2V0IHZzLiBHZXQsIGllIHR3byBieXRlcyBvciA0CisJCQlieXRlcyBkZXBlbmRpbmcgYnV0IHdlIGRvbid0IGNhcmUgaGVyZSAqLworCQkJaWYgKGxlZ2FjeSkKIAkJCQlzaXplID0gc2l6ZW9mKEZJTEVfSU5GT19TVEFOREFSRCk7CiAJCQllbHNlCiAJCQkJc2l6ZSA9IHNpemVvZihGSUxFX0FMTF9JTkZPKTsKQEAgLTM0NzYsODUgKzM0NzAsNiBAQAogCXJldHVybiByYzsKIH0KIAotI2lmIDAgIC8qIGZ1bmN0aW9uIHVudXNlZCBhdCBwcmVzZW50ICovCi1pbnQgQ0lGU0ZpbmRTaW5nbGUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkgICAgICAgY29uc3QgY2hhciAqc2VhcmNoTmFtZSwgRklMRV9BTExfSU5GTyAqIGZpbmREYXRhLAotCSAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCi17Ci0vKiBsZXZlbCAyNTcgU01CXyAqLwotCVRSQU5TQUNUSU9OMl9GRklSU1RfUkVRICpwU01CID0gTlVMTDsKLQlUUkFOU0FDVElPTjJfRkZJUlNUX1JTUCAqcFNNQnIgPSBOVUxMOwotCWludCByYyA9IDA7Ci0JaW50IGJ5dGVzX3JldHVybmVkOwotCWludCBuYW1lX2xlbjsKLQlfX3UxNiBwYXJhbXMsIGJ5dGVfY291bnQ7Ci0KLQljRllJKDEsICgiSW4gRmluZFVuaXF1ZSIpKTsKLWZpbmRVbmlxdWVSZXRyeToKLQlyYyA9IHNtYl9pbml0KFNNQl9DT01fVFJBTlNBQ1RJT04yLCAxNSwgdGNvbiwgKHZvaWQgKiopICZwU01CLAotCQkgICAgICAodm9pZCAqKikgJnBTTUJyKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7Ci0JCW5hbWVfbGVuID0KLQkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fbGUxNiAqKSBwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwKLQkJCQkgICAgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UpOwotCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCi0JCW5hbWVfbGVuICo9IDI7Ci0JfSBlbHNlIHsJLyogQkIgaW1wcm92ZSB0aGUgY2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVucyBCQiAqLwotCQluYW1lX2xlbiA9IHN0cm5sZW4oc2VhcmNoTmFtZSwgUEFUSF9NQVgpOwotCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCi0JCXN0cm5jcHkocFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsIG5hbWVfbGVuKTsKLQl9Ci0KLQlwYXJhbXMgPSAxMiArIG5hbWVfbGVuIC8qIGluY2x1ZGVzIG51bGwgKi8gOwotCXBTTUItPlRvdGFsRGF0YUNvdW50ID0gMDsJLyogbm8gRUFzICovCi0JcFNNQi0+TWF4UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNigyKTsKLQlwU01CLT5NYXhEYXRhQ291bnQgPSBjcHVfdG9fbGUxNig0MDAwKTsJLyogQkIgZmluZCBleGFjdCBtYXggU01CIFBEVSBmcm9tIHNlc3Mgc3RydWN0dXJlIEJCICovCi0JcFNNQi0+TWF4U2V0dXBDb3VudCA9IDA7Ci0JcFNNQi0+UmVzZXJ2ZWQgPSAwOwotCXBTTUItPkZsYWdzID0gMDsKLQlwU01CLT5UaW1lb3V0ID0gMDsKLQlwU01CLT5SZXNlcnZlZDIgPSAwOwotCXBTTUItPlBhcmFtZXRlck9mZnNldCA9IGNwdV90b19sZTE2KAotCSBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfZmZpcnN0X3JlcSwgSW5mb3JtYXRpb25MZXZlbCktNCk7Ci0JcFNNQi0+RGF0YUNvdW50ID0gMDsKLQlwU01CLT5EYXRhT2Zmc2V0ID0gMDsKLQlwU01CLT5TZXR1cENvdW50ID0gMTsJLyogb25lIGJ5dGUsIG5vIG5lZWQgdG8gbGUgY29udmVydCAqLwotCXBTTUItPlJlc2VydmVkMyA9IDA7Ci0JcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KFRSQU5TMl9GSU5EX0ZJUlNUKTsKLQlieXRlX2NvdW50ID0gcGFyYW1zICsgMSAvKiBwYWQgKi8gOwotCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwotCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKLQlwU01CLT5TZWFyY2hBdHRyaWJ1dGVzID0KLQkgICAgY3B1X3RvX2xlMTYoQVRUUl9SRUFET05MWSB8IEFUVFJfSElEREVOIHwgQVRUUl9TWVNURU0gfAotCQkJQVRUUl9ESVJFQ1RPUlkpOwotCXBTTUItPlNlYXJjaENvdW50ID0gY3B1X3RvX2xlMTYoMTYpOwkvKiBCQiBpbmNyZWFzZSAqLwotCXBTTUItPlNlYXJjaEZsYWdzID0gY3B1X3RvX2xlMTYoMSk7Ci0JcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9GSU5EX0ZJTEVfRElSRUNUT1JZX0lORk8pOwotCXBTTUItPlNlYXJjaFN0b3JhZ2VUeXBlID0gMDsJLyogQkIgd2hhdCBzaG91bGQgd2Ugc2V0IHRoaXMgdG8/IEJCICovCi0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7Ci0JcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7Ci0KLQlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKLQkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7Ci0KLQlpZiAocmMpIHsKLQkJY0ZZSSgxLCAoIlNlbmQgZXJyb3IgaW4gRmluZEZpbGVEaXJJbmZvID0gJWQiLCByYykpOwotCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KLQkJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9mZmlyc3QpOwotCQkvKiBCQiBmaWxsIGluICovCi0JfQotCi0JY2lmc19idWZfcmVsZWFzZShwU01CKTsKLQlpZiAocmMgPT0gLUVBR0FJTikKLQkJZ290byBmaW5kVW5pcXVlUmV0cnk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0jZW5kaWYgLyogZW5kIHVudXNlZCAodGVtcG9yYXJpbHkpIGZ1bmN0aW9uICovCi0KIC8qIHhpZCwgdGNvbiwgc2VhcmNoTmFtZSBhbmQgY29kZXBhZ2UgYXJlIGlucHV0IHBhcm1zLCByZXN0IGFyZSByZXR1cm5lZCAqLwogaW50CiBDSUZTRmluZEZpcnN0KGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCkBAIC0zNTY2LDcgKzM0ODEsNyBAQAogLyogbGV2ZWwgMjU3IFNNQl8gKi8KIAlUUkFOU0FDVElPTjJfRkZJUlNUX1JFUSAqcFNNQiA9IE5VTEw7CiAJVFJBTlNBQ1RJT04yX0ZGSVJTVF9SU1AgKnBTTUJyID0gTlVMTDsKLQlUMl9GRklSU1RfUlNQX1BBUk1TICogcGFybXM7CisJVDJfRkZJUlNUX1JTUF9QQVJNUyAqcGFybXM7CiAJaW50IHJjID0gMDsKIAlpbnQgYnl0ZXNfcmV0dXJuZWQgPSAwOwogCWludCBuYW1lX2xlbjsKQEAgLTM2OTcsNyArMzYxMiw3IEBACiB7CiAJVFJBTlNBQ1RJT04yX0ZORVhUX1JFUSAqcFNNQiA9IE5VTEw7CiAJVFJBTlNBQ1RJT04yX0ZORVhUX1JTUCAqcFNNQnIgPSBOVUxMOwotCVQyX0ZORVhUX1JTUF9QQVJNUyAqIHBhcm1zOworCVQyX0ZORVhUX1JTUF9QQVJNUyAqcGFybXM7CiAJY2hhciAqcmVzcG9uc2VfZGF0YTsKIAlpbnQgcmMgPSAwOwogCWludCBieXRlc19yZXR1cm5lZCwgbmFtZV9sZW47CkBAIC0zODM2LDkgKzM3NTEsOSBAQAogCXBTTUItPkZpbGVJRCA9IHNlYXJjaEhhbmRsZTsKIAlwU01CLT5CeXRlQ291bnQgPSAwOwogCXJjID0gU2VuZFJlY2VpdmVOb1JzcCh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsIDApOwotCWlmIChyYykgeworCWlmIChyYykKIAkJY0VSUk9SKDEsICgiU2VuZCBlcnJvciBpbiBGaW5kQ2xvc2UgPSAlZCIsIHJjKSk7Ci0JfQorCiAJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9mY2xvc2UpOwogCiAJLyogU2luY2Ugc2Vzc2lvbiBpcyBkZWFkLCBzZWFyY2ggaGFuZGxlIGNsb3NlZCBvbiBzZXJ2ZXIgYWxyZWFkeSAqLwpAQCAtMzg1MSw3ICszNzY2LDcgQEAKIGludAogQ0lGU0dldFNydklub2RlTnVtYmVyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCi0JCSAgICAgIF9fdTY0ICogaW5vZGVfbnVtYmVyLAorCQkgICAgICBfX3U2NCAqaW5vZGVfbnVtYmVyLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIAlpbnQgcmMgPSAwOwpAQCAtNDU2MCw5ICs0NDc1LDggQEAKIAkJY0VSUk9SKDEsICgiU2VuZCBlcnJvciBpbiBTRVRGU1VuaXhJbmZvID0gJWQiLCByYykpOwogCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7Ci0JCWlmIChyYykgeworCQlpZiAocmMpCiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KLQkJfQogCX0KIAljaWZzX2J1Zl9yZWxlYXNlKHBTTUIpOwogCkBAIC00NzQ0LDkgKzQ2NTgsOCBAQAogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCWNGWUkoMSwgKCJTZXRQYXRoSW5mbyAoZmlsZSBzaXplKSByZXR1cm5lZCAlZCIsIHJjKSk7Ci0JfQogCiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKIApAQCAtNDg5Nyw5ICs0ODEwLDggQEAKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAltZW1jcHkoZGF0YV9vZmZzZXQsIGRhdGEsIHNpemVvZihGSUxFX0JBU0lDX0lORk8pKTsKIAlyYyA9IFNlbmRSZWNlaXZlTm9Sc3AoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLCAwKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIFNldCBUaW1lIChTZXRGaWxlSW5mbykgPSAlZCIsIHJjKSk7Ci0JfQogCiAJLyogTm90ZTogT24gLUVBR0FJTiBlcnJvciBvbmx5IGNhbGxlciBjYW4gcmV0cnkgb24gaGFuZGxlIGJhc2VkIGNhbGxzCiAJCXNpbmNlIGZpbGUgaGFuZGxlIHBhc3NlZCBpbiBubyBsb25nZXIgdmFsaWQgKi8KQEAgLTQ5NzUsOSArNDg4Nyw4IEBACiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwotCWlmIChyYykgeworCWlmIChyYykKIAkJY0ZZSSgxLCAoIlNldFBhdGhJbmZvICh0aW1lcykgcmV0dXJuZWQgJWQiLCByYykpOwotCX0KIAogCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CiAKQEAgLTUwMjcsOSArNDkzOCw4IEBACiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYobmFtZV9sZW4gKyAxKTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgiRXJyb3IgaW4gTGVnYWN5U2V0QXR0ciA9ICVkIiwgcmMpKTsKLQl9CiAKIAljaWZzX2J1Zl9yZWxlYXNlKHBTTUIpOwogCkBAIC01MTM4LDkgKzUwNDgsOCBAQAogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCWNGWUkoMSwgKCJTZXRQYXRoSW5mbyAocGVybXMpIHJldHVybmVkICVkIiwgcmMpKTsKLQl9CiAKIAlpZiAocFNNQikKIAkJY2lmc19idWZfcmVsZWFzZShwU01CKTsKQEAgLTU2MTUsOSArNTUyNCw4IEBACiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwotCWlmIChyYykgeworCWlmIChyYykKIAkJY0ZZSSgxLCAoIlNldFBhdGhJbmZvIChFQSkgcmV0dXJuZWQgJWQiLCByYykpOwotCX0KIAogCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNjVkMGJhNy4uOGRiZmE5NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE3MjIsOCArMTcyMiwxNSBAQAogCQkJICAgb3JpZ2luYWxseSBhdCBtb3VudCB0aW1lICovCiAJCQlpZiAoKHNhdmVkX2NhcCAmIENJRlNfVU5JWF9QT1NJWF9BQ0xfQ0FQKSA9PSAwKQogCQkJCWNhcCAmPSB+Q0lGU19VTklYX1BPU0lYX0FDTF9DQVA7Ci0JCQlpZiAoKHNhdmVkX2NhcCAmIENJRlNfVU5JWF9QT1NJWF9QQVRITkFNRVNfQ0FQKSA9PSAwKQorCQkJaWYgKChzYXZlZF9jYXAgJiBDSUZTX1VOSVhfUE9TSVhfUEFUSE5BTUVTX0NBUCkgPT0gMCkgeworCQkJCWlmIChjYXAgJiBDSUZTX1VOSVhfUE9TSVhfUEFUSE5BTUVTX0NBUCkKKwkJCQkJY0VSUk9SKDEsICgiUE9TSVhQQVRIIHN1cHBvcnQgY2hhbmdlIikpOwogCQkJCWNhcCAmPSB+Q0lGU19VTklYX1BPU0lYX1BBVEhOQU1FU19DQVA7CisJCQl9IGVsc2UgaWYgKChjYXAgJiBDSUZTX1VOSVhfUE9TSVhfUEFUSE5BTUVTX0NBUCkgPT0gMCkgeworCQkJCWNFUlJPUigxLCAoInBvc3NpYmxlIHJlY29ubmVjdCBlcnJvciIpKTsKKwkJCQljRVJST1IoMSwKKwkJCQkJKCJzZXJ2ZXIgZGlzYWJsZWQgUE9TSVggcGF0aCBzdXBwb3J0IikpOworCQkJfQogCQl9CiAKIAkJY2FwICY9IENJRlNfVU5JWF9DQVBfTUFTSzsKQEAgLTE3NTMsOSArMTc2MCw4IEBACiAJCWlmIChzYiAmJiAoQ0lGU19TQihzYiktPnJzaXplID4gMTI3ICogMTAyNCkpIHsKIAkJCWlmICgoY2FwICYgQ0lGU19VTklYX0xBUkdFX1JFQURfQ0FQKSA9PSAwKSB7CiAJCQkJQ0lGU19TQihzYiktPnJzaXplID0gMTI3ICogMTAyNDsKLSNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKLQkJCQljRllJKDEsICgibGFyZ2VyIHJlYWRzIG5vdCBzdXBwb3J0ZWQgYnkgc3J2IikpOwotI2VuZGlmCisJCQkJY0ZZSShEQkcyLAorCQkJCQkoImxhcmdlciByZWFkcyBub3Qgc3VwcG9ydGVkIGJ5IHNydiIpKTsKIAkJCX0KIAkJfQogCkBAIC0xNzkyLDYgKzE3OTgsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitjb252ZXJ0X2RlbGltaXRlcihjaGFyICpwYXRoLCBjaGFyIGRlbGltKQoreworCWludCBpOworCWNoYXIgb2xkX2RlbGltOworCisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGRlbGltID09ICcvJykgCisJCW9sZF9kZWxpbSA9ICdcXCc7CisJZWxzZQorCQlvbGRfZGVsaW0gPSAnLyc7CisKKwlmb3IgKGkgPSAwOyBwYXRoW2ldICE9ICdcMCc7IGkrKykgeworCQlpZiAocGF0aFtpXSA9PSBvbGRfZGVsaW0pCisJCQlwYXRoW2ldID0gZGVsaW07CisJfQorfQorCiBpbnQKIGNpZnNfbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwKIAkgICBjaGFyICptb3VudF9kYXRhLCBjb25zdCBjaGFyICpkZXZuYW1lKQpAQCAtMjA1Nyw3ICsyMDgzLDExIEBACiAJCWNpZnNfc2ItPnByZXBhdGggPSB2b2x1bWVfaW5mby5wcmVwYXRoOwogCQlpZiAoY2lmc19zYi0+cHJlcGF0aCkgewogCQkJY2lmc19zYi0+cHJlcGF0aGxlbiA9IHN0cmxlbihjaWZzX3NiLT5wcmVwYXRoKTsKLQkJCWNpZnNfc2ItPnByZXBhdGhbMF0gPSBDSUZTX0RJUl9TRVAoY2lmc19zYik7CisJCQkvKiB3ZSBjYW4gbm90IGNvbnZlcnQgdGhlIC8gdG8gXCBpbiB0aGUgcGF0aAorCQkJc2VwYXJhdG9ycyBpbiB0aGUgcHJlZml4cGF0aCB5ZXQgYmVjYXVzZSB3ZSBkbyBub3QKKwkJCWtub3cgKHVudGlsIHJlc2V0X2NpZnNfdW5peF9jYXBzIGlzIGNhbGxlZCBsYXRlcikKKwkJCXdoZXRoZXIgUE9TSVggUEFUSCBDQVAgaXMgYXZhaWxhYmxlLiBXZSBub3JtYWxpemUKKwkJCXRoZSAvIHRvIFwgYWZ0ZXIgcmVzZXRfY2lmc191bml4X2NhcHMgaXMgY2FsbGVkICovCiAJCQl2b2x1bWVfaW5mby5wcmVwYXRoID0gTlVMTDsKIAkJfSBlbHNlCiAJCQljaWZzX3NiLT5wcmVwYXRobGVuID0gMDsKQEAgLTIyMjUsMTEgKzIyNTUsMTUgQEAKIAkJZWxzZQogCQkJdGNvbi0+dW5peF9leHQgPSAwOyAvKiBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGVtICovCiAKKwkJLyogY29udmVydCBmb3J3YXJkIHRvIGJhY2sgc2xhc2hlcyBpbiBwcmVwYXRoIGhlcmUgaWYgbmVlZGVkICovCisJCWlmICgoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1BPU0lYX1BBVEhTKSA9PSAwKQorCQkJY29udmVydF9kZWxpbWl0ZXIoY2lmc19zYi0+cHJlcGF0aCwKKwkJCQkJICBDSUZTX0RJUl9TRVAoY2lmc19zYikpOworCiAJCWlmICgodGNvbi0+dW5peF9leHQgPT0gMCkgJiYgKGNpZnNfc2ItPnJzaXplID4gKDEwMjQgKiAxMjcpKSkgewogCQkJY2lmc19zYi0+cnNpemUgPSAxMDI0ICogMTI3OwotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCQkJY0ZZSSgxLCAoIm5vIHZlcnkgbGFyZ2UgcmVhZCBzdXBwb3J0LCByc2l6ZSBub3cgMTI3SyIpKTsKLSNlbmRpZgorCQkJY0ZZSShEQkcyLAorCQkJCSgibm8gdmVyeSBsYXJnZSByZWFkIHN1cHBvcnQsIHJzaXplIG5vdyAxMjdLIikpOwogCQl9CiAJCWlmICghKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX0xBUkdFX1dSSVRFX1gpKQogCQkJY2lmc19zYi0+d3NpemUgPSBtaW4oY2lmc19zYi0+d3NpemUsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCA2OTllYzExLi4wZjVjNjJiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogICB2ZnMgb3BlcmF0aW9ucyB0aGF0IGRlYWwgd2l0aCBkZW50cmllcwogICoKLSAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA3CisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOAogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTExMSwxNiArMTExLDYgQEAKIAlyZXR1cm4gZnVsbF9wYXRoOwogfQogCi0vKiBjaGFyICogYnVpbGRfd2lsZGNhcmRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSkKLXsKLQlpZihmdWxsX3BhdGggPT0gTlVMTCkKLQkJcmV0dXJuIGZ1bGxfcGF0aDsKLQotCWZ1bGxfcGF0aFtuYW1lbGVuXSA9ICdcXCc7Ci0JZnVsbF9wYXRoW25hbWVsZW4rMV0gPSAnKic7Ci0JZnVsbF9wYXRoW25hbWVsZW4rMl0gPSAwOwotQkIgcmVtb3ZlIGFib3ZlIGVpZ2h0IGxpbmVzIEJCICovCi0KIC8qIElub2RlIG9wZXJhdGlvbnMgaW4gc2ltaWxhciBvcmRlciB0byBob3cgdGhleSBhcHBlYXIgaW4gTGludXggZmlsZSBmcy5oICovCiAKIGludApAQCAtMTcxLDkgKzE2MSw4IEBACiAJCQlkaXNwb3NpdGlvbiA9IEZJTEVfT1ZFUldSSVRFX0lGOwogCQllbHNlIGlmICgob2ZsYWdzICYgT19DUkVBVCkgPT0gT19DUkVBVCkKIAkJCWRpc3Bvc2l0aW9uID0gRklMRV9PUEVOX0lGOwotCQllbHNlIHsKKwkJZWxzZQogCQkJY0ZZSSgxLCAoIkNyZWF0ZSBmbGFnIG5vdCBzZXQgaW4gY3JlYXRlIGZ1bmN0aW9uIikpOwotCQl9CiAJfQogCiAJLyogQkIgYWRkIHByb2Nlc3NpbmcgdG8gc2V0IGVxdWl2YWxlbnQgb2YgbW9kZSAtIGUuZy4gdmlhIENyZWF0ZVggd2l0aApAQCAtMjQwLDcgKzIyOSw4IEBACiAJCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCk7CiAJCWVsc2UgewogCQkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZuZXdpbm9kZSwgZnVsbF9wYXRoLAotCQkJCQkJIGJ1ZiwgaW5vZGUtPmlfc2IsIHhpZCk7CisJCQkJCQkgYnVmLCBpbm9kZS0+aV9zYiwgeGlkLAorCQkJCQkJICZmaWxlSGFuZGxlKTsKIAkJCWlmIChuZXdpbm9kZSkgewogCQkJCW5ld2lub2RlLT5pX21vZGUgPSBtb2RlOwogCQkJCWlmICgob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSAmJgpAQCAtMzY3LDcgKzM1Nyw3IEBACiAJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfVU5YX0VNVUwpIHsKIAkJCWludCBvcGxvY2sgPSAwOwogCQkJdTE2IGZpbGVIYW5kbGU7Ci0JCQlGSUxFX0FMTF9JTkZPICogYnVmOworCQkJRklMRV9BTExfSU5GTyAqYnVmOwogCiAJCQljRllJKDEsICgic2Z1IGNvbXBhdCBjcmVhdGUgc3BlY2lhbCBmaWxlIikpOwogCkBAIC00OTQsNyArNDg0LDcgQEAKIAkJCQkJICAgICAgcGFyZW50X2Rpcl9pbm9kZS0+aV9zYiwgeGlkKTsKIAllbHNlCiAJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mbygmbmV3SW5vZGUsIGZ1bGxfcGF0aCwgTlVMTCwKLQkJCQkJIHBhcmVudF9kaXJfaW5vZGUtPmlfc2IsIHhpZCk7CisJCQkJCSBwYXJlbnRfZGlyX2lub2RlLT5pX3NiLCB4aWQsIE5VTEwpOwogCiAJaWYgKChyYyA9PSAwKSAmJiAobmV3SW5vZGUgIT0gTlVMTCkpIHsKIAkJaWYgKHBUY29uLT5ub2Nhc2UpCkBAIC01MzQsOSArNTI0LDggQEAKIAlpbnQgaXNWYWxpZCA9IDE7CiAKIAlpZiAoZGlyZW50cnktPmRfaW5vZGUpIHsKLQkJaWYgKGNpZnNfcmV2YWxpZGF0ZShkaXJlbnRyeSkpIHsKKwkJaWYgKGNpZnNfcmV2YWxpZGF0ZShkaXJlbnRyeSkpCiAJCQlyZXR1cm4gMDsKLQkJfQogCX0gZWxzZSB7CiAJCWNGWUkoMSwgKCJuZWcgZGVudHJ5IDB4JXAgbmFtZSA9ICVzIiwKIAkJCSBkaXJlbnRyeSwgZGlyZW50cnktPmRfbmFtZS5uYW1lKSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Ruc19yZXNvbHZlLmMgYi9mcy9jaWZzL2Ruc19yZXNvbHZlLmMKaW5kZXggZWY3ZjQzOC4uN2NjODZjNCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kbnNfcmVzb2x2ZS5jCisrKyBiL2ZzL2NpZnMvZG5zX3Jlc29sdmUuYwpAQCAtNzcsMTQgKzc3LDE0IEBACiAJLyogc2VhcmNoIGZvciBzZXJ2ZXIgbmFtZSBkZWxpbWl0ZXIgKi8KIAlsZW4gPSBzdHJsZW4odW5jKTsKIAlpZiAobGVuIDwgMykgewotCQljRllJKDEsICgiJXM6IHVuYyBpcyB0b28gc2hvcnQ6ICVzIiwgX19GVU5DVElPTl9fLCB1bmMpKTsKKwkJY0ZZSSgxLCAoIiVzOiB1bmMgaXMgdG9vIHNob3J0OiAlcyIsIF9fZnVuY19fLCB1bmMpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWxlbiAtPSAyOwogCW5hbWUgPSBtZW1jaHIodW5jKzIsICdcXCcsIGxlbik7CiAJaWYgKCFuYW1lKSB7CiAJCWNGWUkoMSwgKCIlczogcHJvYmFibHkgc2VydmVyIG5hbWUgaXMgd2hvbGUgdW5jOiAlcyIsCi0JCQkJCV9fRlVOQ1RJT05fXywgdW5jKSk7CisJCQkJCV9fZnVuY19fLCB1bmMpKTsKIAl9IGVsc2UgewogCQlsZW4gPSAobmFtZSAtIHVuYykgLSAyLyogbGVhZGluZyAvLyAqLzsKIAl9CkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJaWYgKCppcF9hZGRyKSB7CiAJCQltZW1jcHkoKmlwX2FkZHIsIHJrZXktPnBheWxvYWQuZGF0YSwgbGVuKTsKIAkJCSgqaXBfYWRkcilbbGVuXSA9ICdcMCc7Ci0JCQljRllJKDEsICgiJXM6IHJlc29sdmVkOiAlcyB0byAlcyIsIF9fRlVOQ1RJT05fXywKKwkJCWNGWUkoMSwgKCIlczogcmVzb2x2ZWQ6ICVzIHRvICVzIiwgX19mdW5jX18sCiAJCQkJCXJrZXktPmRlc2NyaXB0aW9uLAogCQkJCQkqaXBfYWRkcgogCQkJCSkpOwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCX0KIAkJa2V5X3B1dChya2V5KTsKIAl9IGVsc2UgewotCQljRVJST1IoMSwgKCIlczogdW5hYmxlIHRvIHJlc29sdmU6ICVzIiwgX19GVU5DVElPTl9fLCBuYW1lKSk7CisJCWNFUlJPUigxLCAoIiVzOiB1bmFibGUgdG8gcmVzb2x2ZTogJXMiLCBfX2Z1bmNfXywgbmFtZSkpOwogCX0KIAogCWtmcmVlKG5hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kbnNfcmVzb2x2ZS5oIGIvZnMvY2lmcy9kbnNfcmVzb2x2ZS5oCmluZGV4IDA3M2ZkYzMuLjk2NmU5MjggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZG5zX3Jlc29sdmUuaAorKysgYi9mcy9jaWZzL2Ruc19yZXNvbHZlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2Ruc19yZXNvbHZlLmggLS0gRE5TIFJlc29sdmVyIHVwY2FsbCBtYW5hZ2VtZW50IGZvciBDSUZTIERGUwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlcyBob3N0IG5hbWUgdG8gSVAgYWRkcmVzcyByZXNvbHV0aW9uCi0gKiAKKyAqCiAgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDgKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZjbnRsLmMgYi9mcy9jaWZzL2ZjbnRsLmMKaW5kZXggOTk1NDc0Yy4uN2QxZDVhYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9mY250bC5jCisrKyBiL2ZzL2NpZnMvZmNudGwuYwpAQCAtMzUsOSArMzUsOCBAQAogCiAJLyogTm8gd2F5IG9uIExpbnV4IFZGUyB0byBhc2sgdG8gbW9uaXRvciB4YXR0cgogCWNoYW5nZXMgKGFuZCBubyBzdHJlYW0gc3VwcG9ydCBlaXRoZXIgKi8KLQlpZiAoZmNudGxfbm90aWZ5X2ZsYWdzICYgRE5fQUNDRVNTKSB7CisJaWYgKGZjbnRsX25vdGlmeV9mbGFncyAmIEROX0FDQ0VTUykKIAkJY2lmc19udGZ5X2ZsYWdzIHw9IEZJTEVfTk9USUZZX0NIQU5HRV9MQVNUX0FDQ0VTUzsKLQl9CiAJaWYgKGZjbnRsX25vdGlmeV9mbGFncyAmIEROX01PRElGWSkgewogCQkvKiBXaGF0IGRvZXMgdGhpcyBtZWFuIG9uIGRpcmVjdG9yaWVzPyAqLwogCQljaWZzX250ZnlfZmxhZ3MgfD0gRklMRV9OT1RJRllfQ0hBTkdFX0xBU1RfV1JJVEUgfApAQCAtNDcsOSArNDYsOCBAQAogCQljaWZzX250ZnlfZmxhZ3MgfD0gRklMRV9OT1RJRllfQ0hBTkdFX0NSRUFUSU9OIHwKIAkJCUZJTEVfTk9USUZZX0NIQU5HRV9MQVNUX1dSSVRFOwogCX0KLQlpZiAoZmNudGxfbm90aWZ5X2ZsYWdzICYgRE5fREVMRVRFKSB7CisJaWYgKGZjbnRsX25vdGlmeV9mbGFncyAmIEROX0RFTEVURSkKIAkJY2lmc19udGZ5X2ZsYWdzIHw9IEZJTEVfTk9USUZZX0NIQU5HRV9MQVNUX1dSSVRFOwotCX0KIAlpZiAoZmNudGxfbm90aWZ5X2ZsYWdzICYgRE5fUkVOQU1FKSB7CiAJCS8qIEJCIHJldmlldyB0aGlzIC0gY2hlY2tpbmcgdmFyaW91cyBzZXJ2ZXIgYmVoYXZpb3JzICovCiAJCWNpZnNfbnRmeV9mbGFncyB8PSBGSUxFX05PVElGWV9DSEFOR0VfRElSX05BTUUgfApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCA1ZjdjMzc0Li40MGI2OTAwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCQlmdWxsX3BhdGgsIGlub2RlLT5pX3NiLCB4aWQpOwogCWVsc2UKIAkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAotCQkJZnVsbF9wYXRoLCBidWYsIGlub2RlLT5pX3NiLCB4aWQpOworCQkJZnVsbF9wYXRoLCBidWYsIGlub2RlLT5pX3NiLCB4aWQsIE5VTEwpOwogCiAJaWYgKCgqb3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfRVhDTFVTSVZFKSB7CiAJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gVFJVRTsKQEAgLTM1Myw5ICszNTMsOSBAQAogCWludCBkaXNwb3NpdGlvbiA9IEZJTEVfT1BFTjsKIAlfX3UxNiBuZXRmaWQ7CiAKLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKSB7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkKIAkJcENpZnNGaWxlID0gKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JfSBlbHNlCisJZWxzZQogCQlyZXR1cm4gLUVCQURGOwogCiAJeGlkID0gR2V0WGlkKCk7CkBAIC00NDAsNyArNDQwLDcgQEAKIAkJCQllbHNlCiAJCQkJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mbygmaW5vZGUsCiAJCQkJCQlmdWxsX3BhdGgsIE5VTEwsIGlub2RlLT5pX3NiLAotCQkJCQkJeGlkKTsKKwkJCQkJCXhpZCwgTlVMTCk7CiAJCQl9IC8qIGVsc2Ugd2UgYXJlIHdyaXRpbmcgb3V0IGRhdGEgdG8gc2VydmVyIGFscmVhZHkKIAkJCSAgICAgYW5kIGNvdWxkIGRlYWRsb2NrIGlmIHdlIHRyaWVkIHRvIGZsdXNoIGRhdGEsIGFuZAogCQkJICAgICBzaW5jZSB3ZSBkbyBub3Qga25vdyBpZiB3ZSBoYXZlIGRhdGEgdGhhdCB3b3VsZApAQCAtNDk5LDkgKzQ5OSw4IEBACiAJCQkJCXRoZSBzdHJ1Y3Qgd291bGQgYmUgaW4gZWFjaCBvcGVuIGZpbGUsCiAJCQkJCWJ1dCB0aGlzIHNob3VsZCBnaXZlIGVub3VnaCB0aW1lIHRvCiAJCQkJCWNsZWFyIHRoZSBzb2NrZXQgKi8KLSNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKLQkJCQkJY0ZZSSgxLCAoImNsb3NlIGRlbGF5LCB3cml0ZSBwZW5kaW5nIikpOwotI2VuZGlmIC8qIERFQlVHMiAqLworCQkJCQljRllJKERCRzIsCisJCQkJCQkoImNsb3NlIGRlbGF5LCB3cml0ZSBwZW5kaW5nIikpOwogCQkJCQltc2xlZXAodGltZW91dCk7CiAJCQkJCXRpbWVvdXQgKj0gNDsKIAkJCQl9CkBAIC0xNDIzLDkgKzE0MjIsOCBAQAogCXhpZCA9IEdldFhpZCgpOwogLyogQkIgYWRkIGNoZWNrIGZvciB3YmMgZmxhZ3MgKi8KIAlwYWdlX2NhY2hlX2dldChwYWdlKTsKLQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgeworCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQogCQljRllJKDEsICgicHB3IC0gcGFnZSBub3QgdXAgdG8gZGF0ZSIpKTsKLQl9CiAKIAkvKgogCSAqIFNldCB0aGUgIndyaXRlYmFjayIgZmxhZywgYW5kIGNsZWFyICJkaXJ0eSIgaW4gdGhlIHJhZGl4IHRyZWUuCkBAIC0xNDYwLDkgKzE0NTgsOSBAQAogCWNGWUkoMSwgKCJjb21taXQgd3JpdGUgZm9yIHBhZ2UgJXAgdXAgdG8gcG9zaXRpb24gJWxsZCBmb3IgJWQiLAogCQkgcGFnZSwgcG9zaXRpb24sIHRvKSk7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAocG9zaXRpb24gPiBpbm9kZS0+aV9zaXplKSB7CisJaWYgKHBvc2l0aW9uID4gaW5vZGUtPmlfc2l6ZSkKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3NpdGlvbik7Ci0JfQorCiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCXBvc2l0aW9uID0gICgobG9mZl90KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgb2Zmc2V0OwpAQCAtMTU5Niw5ICsxNTk0LDkgQEAKIAl9CiAJb3Blbl9maWxlID0gKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKSB7CisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkKIAkJY0ZZSSgxLCAoImF0dGVtcHRpbmcgcmVhZCBvbiB3cml0ZSBvbmx5IGZpbGUgaW5zdGFuY2UiKSk7Ci0JfQorCiAJZm9yICh0b3RhbF9yZWFkID0gMCwgY3VycmVudF9vZmZzZXQgPSByZWFkX2RhdGE7CiAJICAgICByZWFkX3NpemUgPiB0b3RhbF9yZWFkOwogCSAgICAgdG90YWxfcmVhZCArPSBieXRlc19yZWFkLCBjdXJyZW50X29mZnNldCArPSBieXRlc19yZWFkKSB7CkBAIC0xNjI1LDkgKzE2MjMsOCBAQAogCQkJCQkJc21iX3JlYWRfZGF0YSArCiAJCQkJCQk0IC8qIFJGQzEwMDEgbGVuZ3RoIGZpZWxkICovICsKIAkJCQkJCWxlMTZfdG9fY3B1KHBTTUJyLT5EYXRhT2Zmc2V0KSwKLQkJCQkJCWJ5dGVzX3JlYWQpKSB7CisJCQkJCQlieXRlc19yZWFkKSkKIAkJCQkJcmMgPSAtRUZBVUxUOwotCQkJCX0KIAogCQkJCWlmIChidWZfdHlwZSA9PSBDSUZTX1NNQUxMX0JVRkZFUikKIAkJCQkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShzbWJfcmVhZF9kYXRhKTsKQEAgLTE4MTQsOSArMTgxMSw3IEBACiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCiAJcGFnZXZlY19pbml0KCZscnVfcHZlYywgMCk7Ci0jaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCi0JCWNGWUkoMSwgKCJycGFnZXM6IG51bSBwYWdlcyAlZCIsIG51bV9wYWdlcykpOwotI2VuZGlmCisJCWNGWUkoREJHMiwgKCJycGFnZXM6IG51bSBwYWdlcyAlZCIsIG51bV9wYWdlcykpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICkgewogCQl1bnNpZ25lZCBjb250aWdfcGFnZXM7CiAJCXN0cnVjdCBwYWdlICp0bXBfcGFnZTsKQEAgLTE4NDksMTAgKzE4NDQsOCBAQAogCQkvKiBSZWFkIHNpemUgbmVlZHMgdG8gYmUgaW4gbXVsdGlwbGVzIG9mIG9uZSBwYWdlICovCiAJCXJlYWRfc2l6ZSA9IG1pbl90KGNvbnN0IHVuc2lnbmVkIGludCwgcmVhZF9zaXplLAogCQkJCSAgY2lmc19zYi0+cnNpemUgJiBQQUdFX0NBQ0hFX01BU0spOwotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCQljRllJKDEsICgicnBhZ2VzOiByZWFkIHNpemUgMHgleCAgY29udGlndW91cyBwYWdlcyAlZCIsCisJCWNGWUkoREJHMiwgKCJycGFnZXM6IHJlYWQgc2l6ZSAweCV4ICBjb250aWd1b3VzIHBhZ2VzICVkIiwKIAkJCQlyZWFkX3NpemUsIGNvbnRpZ19wYWdlcykpOwotI2VuZGlmCiAJCXJjID0gLUVBR0FJTjsKIAkJd2hpbGUgKHJjID09IC1FQUdBSU4pIHsKIAkJCWlmICgob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSAmJgpAQCAtMjAyNiw3ICsyMDE5LDcgQEAKIAkJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAogCQljaWZzX3NiID0gQ0lGU19TQihjaWZzSW5vZGUtPnZmc19pbm9kZS5pX3NiKTsKLQkJaWYgKCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfRElSRUNUX0lPICkgeworCQlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX0RJUkVDVF9JTykgewogCQkJLyogc2luY2Ugbm8gcGFnZSBjYWNoZSB0byBjb3JydXB0IG9uIGRpcmVjdGlvCiAJCQl3ZSBjYW4gY2hhbmdlIHNpemUgc2FmZWx5ICovCiAJCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCBiMWE0YTY1Li5iYzY3M2M4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC0yOSw2ICsyOSwxNjIgQEAKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgogCisKK3N0YXRpYyB2b2lkIGNpZnNfc2V0X29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBib29sIGlzX2Rmc19yZWZlcnJhbCkKK3sKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CisKKwlzd2l0Y2ggKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZSRUc6CisJCWlub2RlLT5pX29wID0gJmNpZnNfZmlsZV9pbm9kZV9vcHM7CisJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfRElSRUNUX0lPKSB7CisJCQlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PX0JSTCkKKwkJCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19maWxlX2RpcmVjdF9ub2JybF9vcHM7CisJCQllbHNlCisJCQkJaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9kaXJlY3Rfb3BzOworCQl9IGVsc2UgaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19CUkwpCisJCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19maWxlX25vYnJsX29wczsKKwkJZWxzZSB7IC8qIG5vdCBkaXJlY3QsIHNlbmQgYnl0ZSByYW5nZSBsb2NrcyAqLworCQkJaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9vcHM7CisJCX0KKworCisJCS8qIGNoZWNrIGlmIHNlcnZlciBjYW4gc3VwcG9ydCByZWFkcGFnZXMgKi8KKwkJaWYgKGNpZnNfc2ItPnRjb24tPnNlcy0+c2VydmVyLT5tYXhCdWYgPAorCQkJCVBBR0VfQ0FDSEVfU0laRSArIE1BWF9DSUZTX0hEUl9TSVpFKQorCQkJaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZjaWZzX2FkZHJfb3BzX3NtYWxsYnVmOworCQllbHNlCisJCQlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJmNpZnNfYWRkcl9vcHM7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoKKyNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCisJCWlmIChpc19kZnNfcmVmZXJyYWwpIHsKKwkJCWlub2RlLT5pX29wID0gJmNpZnNfZGZzX3JlZmVycmFsX2lub2RlX29wZXJhdGlvbnM7CisJCX0gZWxzZSB7CisjZWxzZSAvKiBOTyBERlMgc3VwcG9ydCwgdHJlYXQgYXMgYSBkaXJlY3RvcnkgKi8KKwkJeworI2VuZGlmCisJCQlpbm9kZS0+aV9vcCA9ICZjaWZzX2Rpcl9pbm9kZV9vcHM7CisJCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19kaXJfb3BzOworCQl9CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJaW5vZGUtPmlfb3AgPSAmY2lmc19zeW1saW5rX2lub2RlX29wczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBjaWZzX3VuaXhfaW5mb190b19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mbywgaW50IGZvcmNlX3VpZF9naWQpCit7CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzSW5mbyA9IENJRlNfSShpbm9kZSk7CisJX191NjQgbnVtX29mX2J5dGVzID0gbGU2NF90b19jcHUoaW5mby0+TnVtT2ZCeXRlcyk7CisJX191NjQgZW5kX29mX2ZpbGUgPSBsZTY0X3RvX2NwdShpbmZvLT5FbmRPZkZpbGUpOworCisJaW5vZGUtPmlfYXRpbWUgPSBjaWZzX05UdGltZVRvVW5peChsZTY0X3RvX2NwdShpbmZvLT5MYXN0QWNjZXNzVGltZSkpOworCWlub2RlLT5pX210aW1lID0KKwkJY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUoaW5mby0+TGFzdE1vZGlmaWNhdGlvblRpbWUpKTsKKwlpbm9kZS0+aV9jdGltZSA9IGNpZnNfTlR0aW1lVG9Vbml4KGxlNjRfdG9fY3B1KGluZm8tPkxhc3RTdGF0dXNDaGFuZ2UpKTsKKwlpbm9kZS0+aV9tb2RlID0gbGU2NF90b19jcHUoaW5mby0+UGVybWlzc2lvbnMpOworCisJLyoKKwkgKiBTaW5jZSB3ZSBzZXQgdGhlIGlub2RlIHR5cGUgYmVsb3cgd2UgbmVlZCB0byBtYXNrIG9mZgorCSAqIHRvIGF2b2lkIHN0cmFuZ2UgcmVzdWx0cyBpZiBiaXRzIHNldCBhYm92ZS4KKwkgKi8KKwlpbm9kZS0+aV9tb2RlICY9IH5TX0lGTVQ7CisJc3dpdGNoIChsZTMyX3RvX2NwdShpbmZvLT5UeXBlKSkgeworCWNhc2UgVU5JWF9GSUxFOgorCQlpbm9kZS0+aV9tb2RlIHw9IFNfSUZSRUc7CisJCWJyZWFrOworCWNhc2UgVU5JWF9TWU1MSU5LOgorCQlpbm9kZS0+aV9tb2RlIHw9IFNfSUZMTks7CisJCWJyZWFrOworCWNhc2UgVU5JWF9ESVI6CisJCWlub2RlLT5pX21vZGUgfD0gU19JRkRJUjsKKwkJYnJlYWs7CisJY2FzZSBVTklYX0NIQVJERVY6CisJCWlub2RlLT5pX21vZGUgfD0gU19JRkNIUjsKKwkJaW5vZGUtPmlfcmRldiA9IE1LREVWKGxlNjRfdG9fY3B1KGluZm8tPkRldk1ham9yKSwKKwkJCQkgICAgICBsZTY0X3RvX2NwdShpbmZvLT5EZXZNaW5vcikgJiBNSU5PUk1BU0spOworCQlicmVhazsKKwljYXNlIFVOSVhfQkxPQ0tERVY6CisJCWlub2RlLT5pX21vZGUgfD0gU19JRkJMSzsKKwkJaW5vZGUtPmlfcmRldiA9IE1LREVWKGxlNjRfdG9fY3B1KGluZm8tPkRldk1ham9yKSwKKwkJCQkgICAgICBsZTY0X3RvX2NwdShpbmZvLT5EZXZNaW5vcikgJiBNSU5PUk1BU0spOworCQlicmVhazsKKwljYXNlIFVOSVhfRklGTzoKKwkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGSUZPOworCQlicmVhazsKKwljYXNlIFVOSVhfU09DS0VUOgorCQlpbm9kZS0+aV9tb2RlIHw9IFNfSUZTT0NLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBzYWZlc3QgdG8gY2FsbCBpdCBhIGZpbGUgaWYgd2UgZG8gbm90IGtub3cgKi8KKwkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGUkVHOworCQljRllJKDEsICgidW5rbm93biB0eXBlICVkIiwgbGUzMl90b19jcHUoaW5mby0+VHlwZSkpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfT1ZFUlJfVUlEKSAmJgorCSAgICAhZm9yY2VfdWlkX2dpZCkKKwkJaW5vZGUtPmlfdWlkID0gY2lmc19zYi0+bW50X3VpZDsKKwllbHNlCisJCWlub2RlLT5pX3VpZCA9IGxlNjRfdG9fY3B1KGluZm8tPlVpZCk7CisKKwlpZiAoKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9PVkVSUl9HSUQpICYmCisJICAgICFmb3JjZV91aWRfZ2lkKQorCQlpbm9kZS0+aV9naWQgPSBjaWZzX3NiLT5tbnRfZ2lkOworCWVsc2UKKwkJaW5vZGUtPmlfZ2lkID0gbGU2NF90b19jcHUoaW5mby0+R2lkKTsKKworCWlub2RlLT5pX25saW5rID0gbGU2NF90b19jcHUoaW5mby0+TmxpbmtzKTsKKworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJaWYgKGlzX3NpemVfc2FmZV90b19jaGFuZ2UoY2lmc0luZm8sIGVuZF9vZl9maWxlKSkgeworCQkvKgorCQkgKiBXZSBjYW4gbm90IHNhZmVseSBjaGFuZ2UgdGhlIGZpbGUgc2l6ZSBoZXJlIGlmIHRoZSBjbGllbnQKKwkJICogaXMgd3JpdGluZyB0byBpdCBkdWUgdG8gcG90ZW50aWFsIHJhY2VzLgorCQkgKi8KKwkJaV9zaXplX3dyaXRlKGlub2RlLCBlbmRfb2ZfZmlsZSk7CisKKwkJLyoKKwkJICogaV9ibG9ja3MgaXMgbm90IHJlbGF0ZWQgdG8gKGlfc2l6ZSAvIGlfYmxrc2l6ZSksCisJCSAqIGJ1dCBpbnN0ZWFkIDUxMiBieXRlICgyKio5KSBzaXplIGlzIHJlcXVpcmVkIGZvcgorCQkgKiBjYWxjdWxhdGluZyBudW0gYmxvY2tzLgorCQkgKi8KKwkJaW5vZGUtPmlfYmxvY2tzID0gKDUxMiAtIDEgKyBudW1fb2ZfYnl0ZXMpID4+IDk7CisJfQorCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpZnNfZ2V0X3NlYXJjaF9wYXRoKHN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uLAorCQkJCQljb25zdCBjaGFyICpzZWFyY2hfcGF0aCkKK3sKKwlpbnQgdHJlZV9sZW47CisJaW50IHBhdGhfbGVuOworCWNoYXIgKnRtcF9wYXRoOworCisJaWYgKCEocFRjb24tPkZsYWdzICYgU01CX1NIQVJFX0lTX0lOX0RGUykpCisJCXJldHVybiBzZWFyY2hfcGF0aDsKKworCS8qIHVzZSBmdWxsIHBhdGggbmFtZSBmb3Igd29ya2luZyB3aXRoIERGUyAqLworCXRyZWVfbGVuID0gc3RybmxlbihwVGNvbi0+dHJlZU5hbWUsIE1BWF9UUkVFX1NJWkUgKyAxKTsKKwlwYXRoX2xlbiA9IHN0cm5sZW4oc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORik7CisKKwl0bXBfcGF0aCA9IGttYWxsb2ModHJlZV9sZW4rcGF0aF9sZW4rMSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRtcF9wYXRoID09IE5VTEwpCisJCXJldHVybiBzZWFyY2hfcGF0aDsKKworCXN0cm5jcHkodG1wX3BhdGgsIHBUY29uLT50cmVlTmFtZSwgdHJlZV9sZW4pOworCXN0cm5jcHkodG1wX3BhdGgrdHJlZV9sZW4sIHNlYXJjaF9wYXRoLCBwYXRoX2xlbik7CisJdG1wX3BhdGhbdHJlZV9sZW4rcGF0aF9sZW5dID0gMDsKKwlyZXR1cm4gdG1wX3BhdGg7Cit9CisKIGludCBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoc3RydWN0IGlub2RlICoqcGlub2RlLAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9wYXRoLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgeGlkKQogewpAQCAtMzcsNTIgKzE5Myw0MyBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0Ioc2IpOwotCWNoYXIgKnRtcF9wYXRoOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ1bGxfcGF0aDsKKwlib29sIGlzX2Rmc19yZWZlcnJhbCA9IGZhbHNlOwogCiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCWNGWUkoMSwgKCJHZXR0aW5nIGluZm8gb24gJXMiLCBzZWFyY2hfcGF0aCkpOworCisJZnVsbF9wYXRoID0gY2lmc19nZXRfc2VhcmNoX3BhdGgocFRjb24sIHNlYXJjaF9wYXRoKTsKKwordHJ5X2FnYWluX0NJRlNTTUJVbml4UVBhdGhJbmZvOgogCS8qIGNvdWxkIGhhdmUgZG9uZSBhIGZpbmQgZmlyc3QgaW5zdGVhZCBidXQgdGhpcyByZXR1cm5zIG1vcmUgaW5mbyAqLwotCXJjID0gQ0lGU1NNQlVuaXhRUGF0aEluZm8oeGlkLCBwVGNvbiwgc2VhcmNoX3BhdGgsICZmaW5kRGF0YSwKKwlyYyA9IENJRlNTTUJVbml4UVBhdGhJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgJmZpbmREYXRhLAogCQkJCSAgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIC8qCWR1bXBfbWVtKCJcblVuaXhRUGF0aEluZm8gcmV0dXJuIGRhdGEiLCAmZmluZERhdGEsCiAJCSBzaXplb2YoZmluZERhdGEpKTsgKi8KIAlpZiAocmMpIHsKLQkJaWYgKHJjID09IC1FUkVNT1RFKSB7Ci0JCQl0bXBfcGF0aCA9Ci0JCQkgICAga21hbGxvYyhzdHJubGVuKHBUY29uLT50cmVlTmFtZSwKLQkJCQkJICAgIE1BWF9UUkVFX1NJWkUgKyAxKSArCi0JCQkJICAgIHN0cm5sZW4oc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORikgKyAxLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmICh0bXBfcGF0aCA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkvKiBoYXZlIHRvIHNraXAgZmlyc3Qgb2YgdGhlIGRvdWJsZSBiYWNrc2xhc2ggb2YKLQkJCSAgIFVOQyBuYW1lICovCi0JCQlzdHJuY3B5KHRtcF9wYXRoLCBwVGNvbi0+dHJlZU5hbWUsIE1BWF9UUkVFX1NJWkUpOwotCQkJc3RybmNhdCh0bXBfcGF0aCwgc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORik7Ci0JCQlyYyA9IGNvbm5lY3RfdG9fZGZzX3BhdGgoeGlkLCBwVGNvbi0+c2VzLAotCQkJCQkJIC8qIHRyZWVuYW1lICsgKi8gdG1wX3BhdGgsCi0JCQkJCQkgY2lmc19zYi0+bG9jYWxfbmxzLAotCQkJCQkJIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKLQkJCQkJCSAgICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JCQlrZnJlZSh0bXBfcGF0aCk7Ci0KLQkJCS8qIEJCIGZpeCB1cCBpbm9kZSBldGMuICovCi0JCX0gZWxzZSBpZiAocmMpIHsKLQkJCXJldHVybiByYzsKKwkJaWYgKHJjID09IC1FUkVNT1RFICYmICFpc19kZnNfcmVmZXJyYWwpIHsKKwkJCWlzX2Rmc19yZWZlcnJhbCA9IHRydWU7CisJCQlpZiAoZnVsbF9wYXRoICE9IHNlYXJjaF9wYXRoKSB7CisJCQkJa2ZyZWUoZnVsbF9wYXRoKTsKKwkJCQlmdWxsX3BhdGggPSBzZWFyY2hfcGF0aDsKKwkJCX0KKwkJCWdvdG8gdHJ5X2FnYWluX0NJRlNTTUJVbml4UVBhdGhJbmZvOwogCQl9CisJCWdvdG8gY2dpaXVfZXhpdDsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc0luZm87Ci0JCV9fdTMyIHR5cGUgPSBsZTMyX3RvX2NwdShmaW5kRGF0YS5UeXBlKTsKIAkJX191NjQgbnVtX29mX2J5dGVzID0gbGU2NF90b19jcHUoZmluZERhdGEuTnVtT2ZCeXRlcyk7CiAJCV9fdTY0IGVuZF9vZl9maWxlID0gbGU2NF90b19jcHUoZmluZERhdGEuRW5kT2ZGaWxlKTsKIAogCQkvKiBnZXQgbmV3IGlub2RlICovCiAJCWlmICgqcGlub2RlID09IE5VTEwpIHsKIAkJCSpwaW5vZGUgPSBuZXdfaW5vZGUoc2IpOwotCQkJaWYgKCpwaW5vZGUgPT0gTlVMTCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWlmICgqcGlub2RlID09IE5VTEwpIHsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBjZ2lpdV9leGl0OworCQkJfQogCQkJLyogSXMgYW4gaV9pbm8gb2YgemVybyBsZWdhbD8gKi8KIAkJCS8qIEFyZSB0aGVyZSBzYW5pdHkgY2hlY2tzIHdlIGNhbiB1c2UgdG8gZW5zdXJlIHRoYXQKIAkJCSAgIHRoZSBzZXJ2ZXIgaXMgcmVhbGx5IGZpbGxpbmcgaW4gdGhhdCBmaWVsZD8gKi8KQEAgLTEwNSwxMTMgKzI1MiwyMCBAQAogCQkvKiB0aGlzIGlzIG9rIHRvIHNldCBvbiBldmVyeSBpbm9kZSByZXZhbGlkYXRlICovCiAJCWF0b21pY19zZXQoJmNpZnNJbmZvLT5pblVzZSwgMSk7CiAKLQkJaW5vZGUtPmlfYXRpbWUgPQotCQkgICAgY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUoZmluZERhdGEuTGFzdEFjY2Vzc1RpbWUpKTsKLQkJaW5vZGUtPmlfbXRpbWUgPQotCQkgICAgY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUKLQkJCQkoZmluZERhdGEuTGFzdE1vZGlmaWNhdGlvblRpbWUpKTsKLQkJaW5vZGUtPmlfY3RpbWUgPQotCQkgICAgY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUoZmluZERhdGEuTGFzdFN0YXR1c0NoYW5nZSkpOwotCQlpbm9kZS0+aV9tb2RlID0gbGU2NF90b19jcHUoZmluZERhdGEuUGVybWlzc2lvbnMpOwotCQkvKiBzaW5jZSB3ZSBzZXQgdGhlIGlub2RlIHR5cGUgYmVsb3cgd2UgbmVlZCB0byBtYXNrIG9mZgotCQkgICB0byBhdm9pZCBzdHJhbmdlIHJlc3VsdHMgaWYgYml0cyBzZXQgYWJvdmUgKi8KLQkJaW5vZGUtPmlfbW9kZSAmPSB+U19JRk1UOwotCQlpZiAodHlwZSA9PSBVTklYX0ZJTEUpIHsKLQkJCWlub2RlLT5pX21vZGUgfD0gU19JRlJFRzsKLQkJfSBlbHNlIGlmICh0eXBlID09IFVOSVhfU1lNTElOSykgewotCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGTE5LOwotCQl9IGVsc2UgaWYgKHR5cGUgPT0gVU5JWF9ESVIpIHsKLQkJCWlub2RlLT5pX21vZGUgfD0gU19JRkRJUjsKLQkJfSBlbHNlIGlmICh0eXBlID09IFVOSVhfQ0hBUkRFVikgewotCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGQ0hSOwotCQkJaW5vZGUtPmlfcmRldiA9IE1LREVWKGxlNjRfdG9fY3B1KGZpbmREYXRhLkRldk1ham9yKSwKLQkJCQlsZTY0X3RvX2NwdShmaW5kRGF0YS5EZXZNaW5vcikgJiBNSU5PUk1BU0spOwotCQl9IGVsc2UgaWYgKHR5cGUgPT0gVU5JWF9CTE9DS0RFVikgewotCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGQkxLOwotCQkJaW5vZGUtPmlfcmRldiA9IE1LREVWKGxlNjRfdG9fY3B1KGZpbmREYXRhLkRldk1ham9yKSwKLQkJCQlsZTY0X3RvX2NwdShmaW5kRGF0YS5EZXZNaW5vcikgJiBNSU5PUk1BU0spOwotCQl9IGVsc2UgaWYgKHR5cGUgPT0gVU5JWF9GSUZPKSB7Ci0JCQlpbm9kZS0+aV9tb2RlIHw9IFNfSUZJRk87Ci0JCX0gZWxzZSBpZiAodHlwZSA9PSBVTklYX1NPQ0tFVCkgewotCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGU09DSzsKLQkJfSBlbHNlIHsKLQkJCS8qIHNhZmVzdCB0byBjYWxsIGl0IGEgZmlsZSBpZiB3ZSBkbyBub3Qga25vdyAqLwotCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGUkVHOwotCQkJY0ZZSSgxLCAoInVua25vd24gdHlwZSAlZCIsIHR5cGUpKTsKLQkJfQorCQljaWZzX3VuaXhfaW5mb190b19pbm9kZShpbm9kZSwgJmZpbmREYXRhLCAwKTsKIAotCQlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX09WRVJSX1VJRCkKLQkJCWlub2RlLT5pX3VpZCA9IGNpZnNfc2ItPm1udF91aWQ7Ci0JCWVsc2UKLQkJCWlub2RlLT5pX3VpZCA9IGxlNjRfdG9fY3B1KGZpbmREYXRhLlVpZCk7Ci0KLQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9PVkVSUl9HSUQpCi0JCQlpbm9kZS0+aV9naWQgPSBjaWZzX3NiLT5tbnRfZ2lkOwotCQllbHNlCi0JCQlpbm9kZS0+aV9naWQgPSBsZTY0X3RvX2NwdShmaW5kRGF0YS5HaWQpOwotCi0JCWlub2RlLT5pX25saW5rID0gbGU2NF90b19jcHUoZmluZERhdGEuTmxpbmtzKTsKLQotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCQlpZiAoaXNfc2l6ZV9zYWZlX3RvX2NoYW5nZShjaWZzSW5mbywgZW5kX29mX2ZpbGUpKSB7Ci0JCS8qIGNhbiBub3Qgc2FmZWx5IGNoYW5nZSB0aGUgZmlsZSBzaXplIGhlcmUgaWYgdGhlCi0JCSAgIGNsaWVudCBpcyB3cml0aW5nIHRvIGl0IGR1ZSB0byBwb3RlbnRpYWwgcmFjZXMgKi8KLQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgZW5kX29mX2ZpbGUpOwotCi0JCS8qIGJsa3NpemUgbmVlZHMgdG8gYmUgbXVsdGlwbGUgb2YgdHdvLiBTbyBzYWZlciB0byBkZWZhdWx0IHRvCi0JCWJsa3NpemUgYW5kIGJsa2JpdHMgc2V0IGluIHN1cGVyYmxvY2sgc28gMioqYmxrYml0cyBhbmQgYmxrc2l6ZQotCQl3aWxsIG1hdGNoIHJhdGhlciB0aGFuIHNldHRpbmcgdG86Ci0JCShwVGNvbi0+c2VzLT5zZXJ2ZXItPm1heEJ1ZiAtIE1BWF9DSUZTX0hEUl9TSVpFKSAmIDB4RkZGRkZFMDA7Ki8KLQotCQkvKiBUaGlzIHNlZW1zIGluY3JlZGlibHkgc3R1cGlkIGJ1dCBpdCB0dXJucyBvdXQgdGhhdCBpX2Jsb2NrcwotCQkgICBpcyBub3QgcmVsYXRlZCB0byAoaV9zaXplIC8gaV9ibGtzaXplKSwgaW5zdGVhZCA1MTIgYnl0ZSBzaXplCi0JCSAgIGlzIHJlcXVpcmVkIGZvciBjYWxjdWxhdGluZyBudW0gYmxvY2tzICovCi0KLQkJLyogNTEyIGJ5dGVzICgyKio5KSBpcyB0aGUgZmFrZSBibG9ja3NpemUgdGhhdCBtdXN0IGJlIHVzZWQgKi8KLQkJLyogZm9yIHRoaXMgY2FsY3VsYXRpb24gKi8KLQkJCWlub2RlLT5pX2Jsb2NrcyA9ICg1MTIgLSAxICsgbnVtX29mX2J5dGVzKSA+PiA5OwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAogCQlpZiAobnVtX29mX2J5dGVzIDwgZW5kX29mX2ZpbGUpCiAJCQljRllJKDEsICgiYWxsb2NhdGlvbiBzaXplIGxlc3MgdGhhbiBlbmQgb2YgZmlsZSIpKTsKIAkJY0ZZSSgxLCAoIlNpemUgJWxkIGFuZCBibG9ja3MgJWxsdSIsCiAJCQkodW5zaWduZWQgbG9uZykgaW5vZGUtPmlfc2l6ZSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW5vZGUtPmlfYmxvY2tzKSk7Ci0JCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCQljRllJKDEsICgiRmlsZSBpbm9kZSIpKTsKLQkJCWlub2RlLT5pX29wID0gJmNpZnNfZmlsZV9pbm9kZV9vcHM7Ci0JCQlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX0RJUkVDVF9JTykgewotCQkJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fQlJMKQotCQkJCQlpbm9kZS0+aV9mb3AgPQotCQkJCQkJJmNpZnNfZmlsZV9kaXJlY3Rfbm9icmxfb3BzOwotCQkJCWVsc2UKLQkJCQkJaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9kaXJlY3Rfb3BzOwotCQkJfSBlbHNlIGlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fQlJMKQotCQkJCWlub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfbm9icmxfb3BzOwotCQkJZWxzZSAvKiBub3QgZGlyZWN0LCBzZW5kIGJ5dGUgcmFuZ2UgbG9ja3MgKi8KLQkJCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19maWxlX29wczsKIAotCQkJLyogY2hlY2sgaWYgc2VydmVyIGNhbiBzdXBwb3J0IHJlYWRwYWdlcyAqLwotCQkJaWYgKHBUY29uLT5zZXMtPnNlcnZlci0+bWF4QnVmIDwKLQkJCSAgICBQQUdFX0NBQ0hFX1NJWkUgKyBNQVhfQ0lGU19IRFJfU0laRSkKLQkJCQlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJmNpZnNfYWRkcl9vcHNfc21hbGxidWY7Ci0JCQllbHNlCi0JCQkJaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZjaWZzX2FkZHJfb3BzOwotCQl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWNGWUkoMSwgKCJEaXJlY3RvcnkgaW5vZGUiKSk7Ci0JCQlpbm9kZS0+aV9vcCA9ICZjaWZzX2Rpcl9pbm9kZV9vcHM7Ci0JCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19kaXJfb3BzOwotCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWNGWUkoMSwgKCJTeW1ib2xpYyBMaW5rIGlub2RlIikpOwotCQkJaW5vZGUtPmlfb3AgPSAmY2lmc19zeW1saW5rX2lub2RlX29wczsKLQkJLyogdG1wX2lub2RlLT5pX2ZvcCA9ICovIC8qIGRvIG5vdCBuZWVkIHRvIHNldCB0byBhbnl0aGluZyAqLwotCQl9IGVsc2UgewotCQkJY0ZZSSgxLCAoIkluaXQgc3BlY2lhbCBpbm9kZSIpKTsKLQkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKLQkJCQkJICAgaW5vZGUtPmlfcmRldik7Ci0JCX0KKwkJY2lmc19zZXRfb3BzKGlub2RlLCBpc19kZnNfcmVmZXJyYWwpOwogCX0KK2NnaWl1X2V4aXQ6CisJaWYgKGZ1bGxfcGF0aCAhPSBzZWFyY2hfcGF0aCkKKwkJa2ZyZWUoZnVsbF9wYXRoKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMyMCwxNSArMzc0LDE2IEBACiAKIGludCBjaWZzX2dldF9pbm9kZV9pbmZvKHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hfcGF0aCwgRklMRV9BTExfSU5GTyAqcGZpbmREYXRhLAotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB4aWQpCisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHhpZCwgY29uc3QgX191MTYgKnBmaWQpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKLQljaGFyICp0bXBfcGF0aDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmdWxsX3BhdGggPSBOVUxMOwogCWNoYXIgKmJ1ZiA9IE5VTEw7CiAJaW50IGFkanVzdFRaID0gRkFMU0U7CisJYm9vbCBpc19kZnNfcmVmZXJyYWwgPSBmYWxzZTsKIAogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAljRllJKDEsICgiR2V0dGluZyBpbmZvIG9uICVzIiwgc2VhcmNoX3BhdGgpKTsKQEAgLTM0Niw4ICs0MDEsMTIgQEAKIAkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXBmaW5kRGF0YSA9IChGSUxFX0FMTF9JTkZPICopYnVmOworCisJCWZ1bGxfcGF0aCA9IGNpZnNfZ2V0X3NlYXJjaF9wYXRoKHBUY29uLCBzZWFyY2hfcGF0aCk7CisKK3RyeV9hZ2Fpbl9DSUZTU01CUVBhdGhJbmZvOgogCQkvKiBjb3VsZCBkbyBmaW5kIGZpcnN0IGluc3RlYWQgYnV0IHRoaXMgcmV0dXJucyBtb3JlIGluZm8gKi8KLQkJcmMgPSBDSUZTU01CUVBhdGhJbmZvKHhpZCwgcFRjb24sIHNlYXJjaF9wYXRoLCBwZmluZERhdGEsCisJCXJjID0gQ0lGU1NNQlFQYXRoSW5mbyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIHBmaW5kRGF0YSwKIAkJCSAgICAgIDAgLyogbm90IGxlZ2FjeSAqLywKIAkJCSAgICAgIGNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTM1NSw3ICs0MTQsNyBAQAogCQl3aGVuIHNlcnZlciBjbGFpbXMgbm8gTlQgU01CIHN1cHBvcnQgYW5kIHRoZSBhYm92ZSBjYWxsCiAJCWZhaWxlZCBhdCBsZWFzdCBvbmNlIC0gc2V0IGZsYWcgaW4gdGNvbiBvciBtb3VudCAqLwogCQlpZiAoKHJjID09IC1FT1BOT1RTVVBQKSB8fCAocmMgPT0gLUVJTlZBTCkpIHsKLQkJCXJjID0gU01CUXVlcnlJbmZvcm1hdGlvbih4aWQsIHBUY29uLCBzZWFyY2hfcGF0aCwKKwkJCXJjID0gU01CUXVlcnlJbmZvcm1hdGlvbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsCiAJCQkJCXBmaW5kRGF0YSwgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCSAgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMzY0LDMxICs0MjMsMTUgQEAKIAl9CiAJLyogZHVtcF9tZW0oIlxuUVBhdGhJbmZvIHJldHVybiBkYXRhIiwmZmluZERhdGEsIHNpemVvZihmaW5kRGF0YSkpOyAqLwogCWlmIChyYykgewotCQlpZiAocmMgPT0gLUVSRU1PVEUpIHsKLQkJCXRtcF9wYXRoID0KLQkJCSAgICBrbWFsbG9jKHN0cm5sZW4KLQkJCQkgICAgKHBUY29uLT50cmVlTmFtZSwKLQkJCQkgICAgIE1BWF9UUkVFX1NJWkUgKyAxKSArCi0JCQkJICAgIHN0cm5sZW4oc2VhcmNoX3BhdGgsIE1BWF9QQVRIQ09ORikgKyAxLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmICh0bXBfcGF0aCA9PSBOVUxMKSB7Ci0JCQkJa2ZyZWUoYnVmKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKHJjID09IC1FUkVNT1RFICYmICFpc19kZnNfcmVmZXJyYWwpIHsKKwkJCWlzX2Rmc19yZWZlcnJhbCA9IHRydWU7CisJCQlpZiAoZnVsbF9wYXRoICE9IHNlYXJjaF9wYXRoKSB7CisJCQkJa2ZyZWUoZnVsbF9wYXRoKTsKKwkJCQlmdWxsX3BhdGggPSBzZWFyY2hfcGF0aDsKIAkJCX0KLQotCQkJc3RybmNweSh0bXBfcGF0aCwgcFRjb24tPnRyZWVOYW1lLCBNQVhfVFJFRV9TSVpFKTsKLQkJCXN0cm5jYXQodG1wX3BhdGgsIHNlYXJjaF9wYXRoLCBNQVhfUEFUSENPTkYpOwotCQkJcmMgPSBjb25uZWN0X3RvX2Rmc19wYXRoKHhpZCwgcFRjb24tPnNlcywKLQkJCQkJCSAvKiB0cmVlbmFtZSArICovIHRtcF9wYXRoLAotCQkJCQkJIGNpZnNfc2ItPmxvY2FsX25scywKLQkJCQkJCSBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCi0JCQkJCQkgICBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JCQlrZnJlZSh0bXBfcGF0aCk7Ci0JCQkvKiBCQiBmaXggdXAgaW5vZGUgZXRjLiAqLwotCQl9IGVsc2UgaWYgKHJjKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJcmV0dXJuIHJjOworCQkJZ290byB0cnlfYWdhaW5fQ0lGU1NNQlFQYXRoSW5mbzsKIAkJfQorCQlnb3RvIGNnaWlfZXhpdDsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc0luZm87CiAJCV9fdTMyIGF0dHIgPSBsZTMyX3RvX2NwdShwZmluZERhdGEtPkF0dHJpYnV0ZXMpOwpAQCAtMzk3LDggKzQ0MCw4IEBACiAJCWlmICgqcGlub2RlID09IE5VTEwpIHsKIAkJCSpwaW5vZGUgPSBuZXdfaW5vZGUoc2IpOwogCQkJaWYgKCpwaW5vZGUgPT0gTlVMTCkgewotCQkJCWtmcmVlKGJ1Zik7Ci0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJcmMgPSAtRU5PTUVNOworCQkJCWdvdG8gY2dpaV9leGl0OwogCQkJfQogCQkJLyogSXMgYW4gaV9pbm8gb2YgemVybyBsZWdhbD8gQ2FuIHdlIHVzZSB0aGF0IHRvIGNoZWNrCiAJCQkgICBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHJldHVybmluZyBpbm9kZSBudW1iZXJzPyAgQXJlCkBAIC00OTAsOSArNTMzLDkgQEAKIAkJCWlmIChkZWNvZGVfc2Z1X2lub2RlKGlub2RlLAogCQkJCQkgbGU2NF90b19jcHUocGZpbmREYXRhLT5FbmRPZkZpbGUpLAogCQkJCQkgc2VhcmNoX3BhdGgsCi0JCQkJCSBjaWZzX3NiLCB4aWQpKSB7CisJCQkJCSBjaWZzX3NiLCB4aWQpKQogCQkJCWNGWUkoMSwgKCJVbnJlY29nbml6ZWQgc2Z1IGlub2RlIHR5cGUiKSk7Ci0JCQl9CisKIAkJCWNGWUkoMSwgKCJzZnUgbW9kZSAwJW8iLCBpbm9kZS0+aV9tb2RlKSk7CiAJCX0gZWxzZSB7CiAJCQlpbm9kZS0+aV9tb2RlIHw9IFNfSUZSRUc7CkBAIC01MzIsNyArNTc1LDcgQEAKIAkJLyogZmlsbCBpbiAwNzc3IGJpdHMgZnJvbSBBQ0wgKi8KIAkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9DSUZTX0FDTCkgewogCQkJY0ZZSSgxLCAoIkdldHRpbmcgbW9kZSBiaXRzIGZyb20gQUNMIikpOwotCQkJYWNsX3RvX3VpZF9tb2RlKGlub2RlLCBzZWFyY2hfcGF0aCk7CisJCQlhY2xfdG9fdWlkX21vZGUoaW5vZGUsIHNlYXJjaF9wYXRoLCBwZmlkKTsKIAkJfQogI2VuZGlmCiAJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfVU5YX0VNVUwpIHsKQEAgLTU0NiwzNyArNTg5LDExIEBACiAJCQlhdG9taWNfc2V0KCZjaWZzSW5mby0+aW5Vc2UsIDEpOwogCQl9CiAKLQkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWNGWUkoMSwgKCJGaWxlIGlub2RlIikpOwotCQkJaW5vZGUtPmlfb3AgPSAmY2lmc19maWxlX2lub2RlX29wczsKLQkJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfRElSRUNUX0lPKSB7Ci0JCQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19CUkwpCi0JCQkJCWlub2RlLT5pX2ZvcCA9Ci0JCQkJCQkmY2lmc19maWxlX2RpcmVjdF9ub2JybF9vcHM7Ci0JCQkJZWxzZQotCQkJCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19maWxlX2RpcmVjdF9vcHM7Ci0JCQl9IGVsc2UgaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19CUkwpCi0JCQkJaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9ub2JybF9vcHM7Ci0JCQllbHNlIC8qIG5vdCBkaXJlY3QsIHNlbmQgYnl0ZSByYW5nZSBsb2NrcyAqLwotCQkJCWlub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfb3BzOwotCi0JCQlpZiAocFRjb24tPnNlcy0+c2VydmVyLT5tYXhCdWYgPAotCQkJICAgICBQQUdFX0NBQ0hFX1NJWkUgKyBNQVhfQ0lGU19IRFJfU0laRSkKLQkJCQlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJmNpZnNfYWRkcl9vcHNfc21hbGxidWY7Ci0JCQllbHNlCi0JCQkJaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZjaWZzX2FkZHJfb3BzOwotCQl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWNGWUkoMSwgKCJEaXJlY3RvcnkgaW5vZGUiKSk7Ci0JCQlpbm9kZS0+aV9vcCA9ICZjaWZzX2Rpcl9pbm9kZV9vcHM7Ci0JCQlpbm9kZS0+aV9mb3AgPSAmY2lmc19kaXJfb3BzOwotCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWNGWUkoMSwgKCJTeW1ib2xpYyBMaW5rIGlub2RlIikpOwotCQkJaW5vZGUtPmlfb3AgPSAmY2lmc19zeW1saW5rX2lub2RlX29wczsKLQkJfSBlbHNlIHsKLQkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKLQkJCQkJICAgaW5vZGUtPmlfcmRldik7Ci0JCX0KKwkJY2lmc19zZXRfb3BzKGlub2RlLCBpc19kZnNfcmVmZXJyYWwpOwogCX0KK2NnaWlfZXhpdDoKKwlpZiAoZnVsbF9wYXRoICE9IHNlYXJjaF9wYXRoKQorCQlrZnJlZShmdWxsX3BhdGgpOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJjOwogfQpAQCAtNjA1LDcgKzYyMiw4IEBACiAJaWYgKGNpZnNfc2ItPnRjb24tPnVuaXhfZXh0KQogCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm9fdW5peCgmaW5vZGUsICIiLCBpbm9kZS0+aV9zYiwgeGlkKTsKIAllbHNlCi0JCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mbygmaW5vZGUsICIiLCBOVUxMLCBpbm9kZS0+aV9zYiwgeGlkKTsKKwkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZpbm9kZSwgIiIsIE5VTEwsIGlub2RlLT5pX3NiLCB4aWQsCisJCQkJCSBOVUxMKTsKIAlpZiAocmMgJiYgY2lmc19zYi0+dGNvbi0+aXBjKSB7CiAJCWNGWUkoMSwgKCJpcGMgY29ubmVjdGlvbiAtIGZha2UgcmVhZCBpbm9kZSIpKTsKIAkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGRElSOwpAQCAtNzkyLDE3ICs4MTAsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgcG9zaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKLQlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcERhdGEsIGludCAqcG9iamVjdF90eXBlLCBpbnQgaXNOZXdJbm9kZSkKKwlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcERhdGEsIGludCBpc05ld0lub2RlKQogeworCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzSW5mbyA9IENJRlNfSSh0bXBfaW5vZGUpOwogCWxvZmZfdCBsb2NhbF9zaXplOwogCXN0cnVjdCB0aW1lc3BlYyBsb2NhbF9tdGltZTsKIAotCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzSW5mbyA9IENJRlNfSSh0bXBfaW5vZGUpOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKHRtcF9pbm9kZS0+aV9zYik7Ci0KLQlfX3UzMiB0eXBlID0gbGUzMl90b19jcHUocERhdGEtPlR5cGUpOwotCV9fdTY0IG51bV9vZl9ieXRlcyA9IGxlNjRfdG9fY3B1KHBEYXRhLT5OdW1PZkJ5dGVzKTsKLQlfX3U2NCBlbmRfb2ZfZmlsZSA9IGxlNjRfdG9fY3B1KHBEYXRhLT5FbmRPZkZpbGUpOwogCWNpZnNJbmZvLT50aW1lID0gamlmZmllczsKIAlhdG9taWNfaW5jKCZjaWZzSW5mby0+aW5Vc2UpOwogCkBAIC04MTAsMTE1ICs4MjMsMjcgQEAKIAlsb2NhbF9tdGltZSA9IHRtcF9pbm9kZS0+aV9tdGltZTsKIAlsb2NhbF9zaXplICA9IHRtcF9pbm9kZS0+aV9zaXplOwogCi0JdG1wX2lub2RlLT5pX2F0aW1lID0KLQkgICAgY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUocERhdGEtPkxhc3RBY2Nlc3NUaW1lKSk7Ci0JdG1wX2lub2RlLT5pX210aW1lID0KLQkgICAgY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUocERhdGEtPkxhc3RNb2RpZmljYXRpb25UaW1lKSk7Ci0JdG1wX2lub2RlLT5pX2N0aW1lID0KLQkgICAgY2lmc19OVHRpbWVUb1VuaXgobGU2NF90b19jcHUocERhdGEtPkxhc3RTdGF0dXNDaGFuZ2UpKTsKKwljaWZzX3VuaXhfaW5mb190b19pbm9kZSh0bXBfaW5vZGUsIHBEYXRhLCAxKTsKKwljaWZzX3NldF9vcHModG1wX2lub2RlLCBmYWxzZSk7CiAKLQl0bXBfaW5vZGUtPmlfbW9kZSA9IGxlNjRfdG9fY3B1KHBEYXRhLT5QZXJtaXNzaW9ucyk7Ci0JLyogc2luY2Ugd2Ugc2V0IHRoZSBpbm9kZSB0eXBlIGJlbG93IHdlIG5lZWQgdG8gbWFzayBvZmYgdHlwZQotCSAgIHRvIGF2b2lkIHN0cmFuZ2UgcmVzdWx0cyBpZiBiaXRzIGFib3ZlIHdlcmUgY29ycnVwdCAqLwotCXRtcF9pbm9kZS0+aV9tb2RlICY9IH5TX0lGTVQ7Ci0JaWYgKHR5cGUgPT0gVU5JWF9GSUxFKSB7Ci0JCSpwb2JqZWN0X3R5cGUgPSBEVF9SRUc7Ci0JCXRtcF9pbm9kZS0+aV9tb2RlIHw9IFNfSUZSRUc7Ci0JfSBlbHNlIGlmICh0eXBlID09IFVOSVhfU1lNTElOSykgewotCQkqcG9iamVjdF90eXBlID0gRFRfTE5LOwotCQl0bXBfaW5vZGUtPmlfbW9kZSB8PSBTX0lGTE5LOwotCX0gZWxzZSBpZiAodHlwZSA9PSBVTklYX0RJUikgewotCQkqcG9iamVjdF90eXBlID0gRFRfRElSOwotCQl0bXBfaW5vZGUtPmlfbW9kZSB8PSBTX0lGRElSOwotCX0gZWxzZSBpZiAodHlwZSA9PSBVTklYX0NIQVJERVYpIHsKLQkJKnBvYmplY3RfdHlwZSA9IERUX0NIUjsKLQkJdG1wX2lub2RlLT5pX21vZGUgfD0gU19JRkNIUjsKLQkJdG1wX2lub2RlLT5pX3JkZXYgPSBNS0RFVihsZTY0X3RvX2NwdShwRGF0YS0+RGV2TWFqb3IpLAotCQkJCWxlNjRfdG9fY3B1KHBEYXRhLT5EZXZNaW5vcikgJiBNSU5PUk1BU0spOwotCX0gZWxzZSBpZiAodHlwZSA9PSBVTklYX0JMT0NLREVWKSB7Ci0JCSpwb2JqZWN0X3R5cGUgPSBEVF9CTEs7Ci0JCXRtcF9pbm9kZS0+aV9tb2RlIHw9IFNfSUZCTEs7Ci0JCXRtcF9pbm9kZS0+aV9yZGV2ID0gTUtERVYobGU2NF90b19jcHUocERhdGEtPkRldk1ham9yKSwKLQkJCQlsZTY0X3RvX2NwdShwRGF0YS0+RGV2TWlub3IpICYgTUlOT1JNQVNLKTsKLQl9IGVsc2UgaWYgKHR5cGUgPT0gVU5JWF9GSUZPKSB7Ci0JCSpwb2JqZWN0X3R5cGUgPSBEVF9GSUZPOwotCQl0bXBfaW5vZGUtPmlfbW9kZSB8PSBTX0lGSUZPOwotCX0gZWxzZSBpZiAodHlwZSA9PSBVTklYX1NPQ0tFVCkgewotCQkqcG9iamVjdF90eXBlID0gRFRfU09DSzsKLQkJdG1wX2lub2RlLT5pX21vZGUgfD0gU19JRlNPQ0s7CisJaWYgKCFTX0lTUkVHKHRtcF9pbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBObyBzZW5zZSBpbnZhbGlkYXRpbmcgcGFnZXMgZm9yIG5ldyBpbm9kZQorCSAqIHNpbmNlIHdlIHdlIGhhdmUgbm90IHN0YXJ0ZWQgY2FjaGluZworCSAqIHJlYWRhaGVhZCBmaWxlIGRhdGEgeWV0LgorCSAqLworCWlmIChpc05ld0lub2RlKQorCQlyZXR1cm47CisKKwlpZiAodGltZXNwZWNfZXF1YWwoJnRtcF9pbm9kZS0+aV9tdGltZSwgJmxvY2FsX210aW1lKSAmJgorCQkobG9jYWxfc2l6ZSA9PSB0bXBfaW5vZGUtPmlfc2l6ZSkpIHsKKwkJY0ZZSSgxLCAoImlub2RlIGV4aXN0cyBidXQgdW5jaGFuZ2VkIikpOwogCX0gZWxzZSB7Ci0JCS8qIHNhZmVzdCB0byBqdXN0IGNhbGwgaXQgYSBmaWxlICovCi0JCSpwb2JqZWN0X3R5cGUgPSBEVF9SRUc7Ci0JCXRtcF9pbm9kZS0+aV9tb2RlIHw9IFNfSUZSRUc7Ci0JCWNGWUkoMSwgKCJ1bmtub3duIGlub2RlIHR5cGUgJWQiLCB0eXBlKSk7Ci0JfQotCi0jaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCi0JY0ZZSSgxLCAoIm9iamVjdCB0eXBlOiAlZCIsIHR5cGUpKTsKLSNlbmRpZgotCXRtcF9pbm9kZS0+aV91aWQgPSBsZTY0X3RvX2NwdShwRGF0YS0+VWlkKTsKLQl0bXBfaW5vZGUtPmlfZ2lkID0gbGU2NF90b19jcHUocERhdGEtPkdpZCk7Ci0JdG1wX2lub2RlLT5pX25saW5rID0gbGU2NF90b19jcHUocERhdGEtPk5saW5rcyk7Ci0KLQlzcGluX2xvY2soJnRtcF9pbm9kZS0+aV9sb2NrKTsKLQlpZiAoaXNfc2l6ZV9zYWZlX3RvX2NoYW5nZShjaWZzSW5mbywgZW5kX29mX2ZpbGUpKSB7Ci0JCS8qIGNhbiBub3Qgc2FmZWx5IGNoYW5nZSB0aGUgZmlsZSBzaXplIGhlcmUgaWYgdGhlCi0JCWNsaWVudCBpcyB3cml0aW5nIHRvIGl0IGR1ZSB0byBwb3RlbnRpYWwgcmFjZXMgKi8KLQkJaV9zaXplX3dyaXRlKHRtcF9pbm9kZSwgZW5kX29mX2ZpbGUpOwotCi0JLyogNTEyIGJ5dGVzICgyKio5KSBpcyB0aGUgZmFrZSBibG9ja3NpemUgdGhhdCBtdXN0IGJlIHVzZWQgKi8KLQkvKiBmb3IgdGhpcyBjYWxjdWxhdGlvbiwgbm90IHRoZSByZWFsIGJsb2Nrc2l6ZSAqLwotCQl0bXBfaW5vZGUtPmlfYmxvY2tzID0gKDUxMiAtIDEgKyBudW1fb2ZfYnl0ZXMpID4+IDk7Ci0JfQotCXNwaW5fdW5sb2NrKCZ0bXBfaW5vZGUtPmlfbG9jayk7Ci0KLQlpZiAoU19JU1JFRyh0bXBfaW5vZGUtPmlfbW9kZSkpIHsKLQkJY0ZZSSgxLCAoIkZpbGUgaW5vZGUiKSk7Ci0JCXRtcF9pbm9kZS0+aV9vcCA9ICZjaWZzX2ZpbGVfaW5vZGVfb3BzOwotCi0JCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfRElSRUNUX0lPKSB7Ci0JCQlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PX0JSTCkKLQkJCQl0bXBfaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9kaXJlY3Rfbm9icmxfb3BzOwotCQkJZWxzZQotCQkJCXRtcF9pbm9kZS0+aV9mb3AgPSAmY2lmc19maWxlX2RpcmVjdF9vcHM7Ci0KLQkJfSBlbHNlIGlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fQlJMKQotCQkJdG1wX2lub2RlLT5pX2ZvcCA9ICZjaWZzX2ZpbGVfbm9icmxfb3BzOwotCQllbHNlCi0JCQl0bXBfaW5vZGUtPmlfZm9wID0gJmNpZnNfZmlsZV9vcHM7Ci0KLQkJaWYgKChjaWZzX3NiLT50Y29uKSAmJiAoY2lmc19zYi0+dGNvbi0+c2VzKSAmJgotCQkgICAoY2lmc19zYi0+dGNvbi0+c2VzLT5zZXJ2ZXItPm1heEJ1ZiA8Ci0JCQlQQUdFX0NBQ0hFX1NJWkUgKyBNQVhfQ0lGU19IRFJfU0laRSkpCi0JCQl0bXBfaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZjaWZzX2FkZHJfb3BzX3NtYWxsYnVmOwotCQllbHNlCi0JCQl0bXBfaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZjaWZzX2FkZHJfb3BzOwotCi0JCWlmIChpc05ld0lub2RlKQotCQkJcmV0dXJuOyAvKiBObyBzZW5zZSBpbnZhbGlkYXRpbmcgcGFnZXMgZm9yIG5ldyBpbm9kZQotCQkJCSAgIHNpbmNlIHdlIHdlIGhhdmUgbm90IHN0YXJ0ZWQgY2FjaGluZwotCQkJCSAgIHJlYWRhaGVhZCBmaWxlIGRhdGEgeWV0ICovCi0KLQkJaWYgKHRpbWVzcGVjX2VxdWFsKCZ0bXBfaW5vZGUtPmlfbXRpbWUsICZsb2NhbF9tdGltZSkgJiYKLQkJCShsb2NhbF9zaXplID09IHRtcF9pbm9kZS0+aV9zaXplKSkgewotCQkJY0ZZSSgxLCAoImlub2RlIGV4aXN0cyBidXQgdW5jaGFuZ2VkIikpOwotCQl9IGVsc2UgewotCQkJLyogZmlsZSBtYXkgaGF2ZSBjaGFuZ2VkIG9uIHNlcnZlciAqLwotCQkJY0ZZSSgxLCAoImludmFsaWRhdGUgaW5vZGUsIHJlYWRkaXIgZGV0ZWN0ZWQgY2hhbmdlIikpOwotCQkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUodG1wX2lub2RlKTsKLQkJfQotCX0gZWxzZSBpZiAoU19JU0RJUih0bXBfaW5vZGUtPmlfbW9kZSkpIHsKLQkJY0ZZSSgxLCAoIkRpcmVjdG9yeSBpbm9kZSIpKTsKLQkJdG1wX2lub2RlLT5pX29wID0gJmNpZnNfZGlyX2lub2RlX29wczsKLQkJdG1wX2lub2RlLT5pX2ZvcCA9ICZjaWZzX2Rpcl9vcHM7Ci0JfSBlbHNlIGlmIChTX0lTTE5LKHRtcF9pbm9kZS0+aV9tb2RlKSkgewotCQljRllJKDEsICgiU3ltYm9saWMgTGluayBpbm9kZSIpKTsKLQkJdG1wX2lub2RlLT5pX29wID0gJmNpZnNfc3ltbGlua19pbm9kZV9vcHM7Ci0vKiB0bXBfaW5vZGUtPmlfZm9wID0gKi8vKiBkbyBub3QgbmVlZCB0byBzZXQgdG8gYW55dGhpbmcgKi8KLQl9IGVsc2UgewotCQljRllJKDEsICgiU3BlY2lhbCBpbm9kZSIpKTsKLQkJaW5pdF9zcGVjaWFsX2lub2RlKHRtcF9pbm9kZSwgdG1wX2lub2RlLT5pX21vZGUsCi0JCQkJICAgdG1wX2lub2RlLT5pX3JkZXYpOworCQkvKiBmaWxlIG1heSBoYXZlIGNoYW5nZWQgb24gc2VydmVyICovCisJCWNGWUkoMSwgKCJpbnZhbGlkYXRlIGlub2RlLCByZWFkZGlyIGRldGVjdGVkIGNoYW5nZSIpKTsKKwkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUodG1wX2lub2RlKTsKIAl9CiB9CiAKQEAgLTk2OCw3ICs4OTMsNiBAQAogCQkJY0ZZSSgxLCAoInBvc2l4IG1rZGlyIHJldHVybmVkIDB4JXgiLCByYykpOwogCQkJZF9kcm9wKGRpcmVudHJ5KTsKIAkJfSBlbHNlIHsKLQkJCWludCBvYmpfdHlwZTsKIAkJCWlmIChwSW5mby0+VHlwZSA9PSBjcHVfdG9fbGUzMigtMSkpIHsKIAkJCQkvKiBubyByZXR1cm4gaW5mbywgZ28gcXVlcnkgZm9yIGl0ICovCiAJCQkJa2ZyZWUocEluZm8pOwpAQCAtMTAwNCw3ICs5MjgsNyBAQAogCQkJLyogd2UgYWxyZWFkeSBjaGVja2VkIGluIFBPU0lYQ3JlYXRlIHdoZXRoZXIKIAkJCSAgIGZyYW1lIHdhcyBsb25nIGVub3VnaCAqLwogCQkJcG9zaXhfZmlsbF9pbl9pbm9kZShkaXJlbnRyeS0+ZF9pbm9kZSwKLQkJCQkJcEluZm8sICZvYmpfdHlwZSwgMSAvKiBOZXdJbm9kZSAqLyk7CisJCQkJCXBJbmZvLCAxIC8qIE5ld0lub2RlICovKTsKICNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKIAkJCWNGWUkoMSwgKCJpbnN0YW50aWF0ZWQgZGVudHJ5ICVwICVzIHRvIGlub2RlICVwIiwKIAkJCQlkaXJlbnRyeSwgZGlyZW50cnktPmRfbmFtZS5uYW1lLCBuZXdpbm9kZSkpOwpAQCAtMTAzMiw3ICs5NTYsNyBAQAogCQkJCQkJICAgICAgaW5vZGUtPmlfc2IsIHhpZCk7CiAJCWVsc2UKIAkJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mbygmbmV3aW5vZGUsIGZ1bGxfcGF0aCwgTlVMTCwKLQkJCQkJCSBpbm9kZS0+aV9zYiwgeGlkKTsKKwkJCQkJCSBpbm9kZS0+aV9zYiwgeGlkLCBOVUxMKTsKIAogCQlpZiAocFRjb24tPm5vY2FzZSkKIAkJCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfY2lfZGVudHJ5X29wczsKQEAgLTEyMTQsOSArMTEzOCw4IEBACiAJCX0gLyogaWYgd2UgY2FuIG5vdCBnZXQgbWVtb3J5IGp1c3QgbGVhdmUgcmMgYXMgRUVYSVNUICovCiAJfQogCi0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQljRllJKDEsICgicmVuYW1lIHJjICVkIiwgcmMpKTsKLQl9CiAKIAlpZiAoKHJjID09IC1FSU8pIHx8IChyYyA9PSAtRUVYSVNUKSkgewogCQlpbnQgb3Bsb2NrID0gRkFMU0U7CkBAIC0xMzE1LDcgKzEyMzgsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZkaXJlbnRyeS0+ZF9pbm9kZSwgZnVsbF9wYXRoLCBOVUxMLAotCQkJCQkgZGlyZW50cnktPmRfc2IsIHhpZCk7CisJCQkJCSBkaXJlbnRyeS0+ZF9zYiwgeGlkLCBOVUxMKTsKIAkJaWYgKHJjKSB7CiAJCQljRllJKDEsICgiZXJyb3Igb24gZ2V0dGluZyByZXZhbGlkYXRlIGluZm8gJWQiLCByYykpOwogLyoJCQlpZiAocmMgIT0gLUVOT0VOVCkKQEAgLTE1MDQsMTEgKzE0MjcsMTAgQEAKIAl9CiAJY2lmc0lub2RlID0gQ0lGU19JKGRpcmVudHJ5LT5kX2lub2RlKTsKIAotCS8qIEJCIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVmcmVzaCBpbm9kZSBmcm9tIHNlcnZlciBub3cgPyBCQiAqLwotCi0JaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgeworCWlmICgoYXR0cnMtPmlhX3ZhbGlkICYgQVRUUl9NVElNRSkgfHwgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfU0laRSkpIHsKIAkJLyoKLQkJICAgRmx1c2ggZGF0YSBiZWZvcmUgY2hhbmdpbmcgZmlsZSBzaXplIG9uIHNlcnZlci4gSWYgdGhlCisJCSAgIEZsdXNoIGRhdGEgYmVmb3JlIGNoYW5naW5nIGZpbGUgc2l6ZSBvciBjaGFuZ2luZyB0aGUgbGFzdAorCQkgICB3cml0ZSB0aW1lIG9mIHRoZSBmaWxlIG9uIHRoZSBzZXJ2ZXIuIElmIHRoZQogCQkgICBmbHVzaCByZXR1cm5zIGVycm9yLCBzdG9yZSBpdCB0byByZXBvcnQgbGF0ZXIgYW5kIGNvbnRpbnVlLgogCQkgICBCQjogVGhpcyBzaG91bGQgYmUgc21hcnRlci4gV2h5IGJvdGhlciBmbHVzaGluZyBwYWdlcyB0aGF0CiAJCSAgIHdpbGwgYmUgdHJ1bmNhdGVkIGFueXdheT8gQWxzbywgc2hvdWxkIHdlIGVycm9yIG91dCBoZXJlIGlmCkBAIC0xNTE5LDcgKzE0NDEsOSBAQAogCQkJQ0lGU19JKGRpcmVudHJ5LT5kX2lub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gcmM7CiAJCQlyYyA9IDA7CiAJCX0KKwl9CiAKKwlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSB7CiAJCS8qIFRvIGF2b2lkIHNwdXJpb3VzIG9wbG9jayBicmVha3MgZnJvbSBzZXJ2ZXIsIGluIHRoZSBjYXNlIG9mCiAJCSAgIGlub2RlcyB0aGF0IHdlIGFscmVhZHkgaGF2ZSBvcGVuLCBhdm9pZCBkb2luZyBwYXRoIGJhc2VkCiAJCSAgIHNldHRpbmcgb2YgZmlsZSBzaXplIGlmIHdlIGNhbiBkbyBpdCBieSBoYW5kbGUuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2lvY3RsLmMgYi9mcy9jaWZzL2lvY3RsLmMKaW5kZXggZDI0ZmU2OC4uNWM3OTJkZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pb2N0bC5jCisrKyBiL2ZzL2NpZnMvaW9jdGwuYwpAQCAtMzAsNyArMzAsNyBAQAogCiAjZGVmaW5lIENJRlNfSU9DX0NIRUNLVU1PVU5UIF9JTygweENGLCAyKQogCi1pbnQgY2lmc19pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwLAoraW50IGNpZnNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwLAogCQl1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHJjID0gLUVOT1RUWTsgLyogc3RyYW5nZSBlcnJvciAtIGJ1dCB0aGUgcHJlY2VkZW50ICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IDFkNmZiMDEuLmQ0ZTdlYzkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJCQkJCSAgICAgIGlub2RlLT5pX3NiLCB4aWQpOwogCQllbHNlCiAJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJm5ld2lub2RlLCBmdWxsX3BhdGgsIE5VTEwsCi0JCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCk7CisJCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKIAkJaWYgKHJjICE9IDApIHsKIAkJCWNGWUkoMSwgKCJDcmVhdGUgc3ltbGluayBvaywgZ2V0aW5vZGVpbmZvIGZhaWwgcmMgPSAlZCIsCmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNC5jIGIvZnMvY2lmcy9tZDQuYwppbmRleCBhMjQxNWMxLi5hNzI1YzI2IDEwMDY0NAotLS0gYS9mcy9jaWZzL21kNC5jCisrKyBiL2ZzL2NpZnMvbWQ0LmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogLyogdGhpcyBhcHBsaWVzIG1kNCB0byA2NCBieXRlIGNodW5rcyAqLwogc3RhdGljIHZvaWQKLW1kZm91cjY0KF9fdTMyICogTSwgX191MzIgKiBBLCBfX3UzMiAqQiwgX191MzIgKiBDLCBfX3UzMiAqRCkKK21kZm91cjY0KF9fdTMyICpNLCBfX3UzMiAqQSwgX191MzIgKkIsIF9fdTMyICpDLCBfX3UzMiAqRCkKIHsKIAlpbnQgajsKIAlfX3UzMiBBQSwgQkIsIENDLCBERDsKQEAgLTEzNyw3ICsxMzcsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotY29weTY0KF9fdTMyICogTSwgdW5zaWduZWQgY2hhciAqaW4pCitjb3B5NjQoX191MzIgKk0sIHVuc2lnbmVkIGNoYXIgKmluKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNS5jIGIvZnMvY2lmcy9tZDUuYwppbmRleCBmMTNmOTZkLi40NjJiYmZlIDEwMDY0NAotLS0gYS9mcy9jaWZzL21kNS5jCisrKyBiL2ZzL2NpZnMvbWQ1LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAvKiBUaGlzIGlzIHRoZSBjZW50cmFsIHN0ZXAgaW4gdGhlIE1ENSBhbGdvcml0aG0uICovCiAjZGVmaW5lIE1ENVNURVAoZiwgdywgeCwgeSwgeiwgZGF0YSwgcykgXAotCSggdyArPSBmKHgsIHksIHopICsgZGF0YSwgIHcgPSB3PDxzIHwgdz4+KDMyLXMpLCAgdyArPSB4ICkKKwkodyArPSBmKHgsIHksIHopICsgZGF0YSwgIHcgPSB3PDxzIHwgdz4+KDMyLXMpLCAgdyArPSB4KQogCiAvKgogICogVGhlIGNvcmUgb2YgdGhlIE1ENSBhbGdvcml0aG0sIHRoaXMgYWx0ZXJzIGFuIGV4aXN0aW5nIE1ENSBoYXNoIHRvCkBAIC0zMDIsOSArMzAyLDggQEAKIAlpbnQgaTsKIAogCS8qIGlmIGtleSBpcyBsb25nZXIgdGhhbiA2NCBieXRlcyB0cnVuY2F0ZSBpdCAqLwotCWlmIChrZXlfbGVuID4gNjQpIHsKKwlpZiAoa2V5X2xlbiA+IDY0KQogCQlrZXlfbGVuID0gNjQ7Ci0JfQogCiAJLyogc3RhcnQgb3V0IGJ5IHN0b3Jpbmcga2V5IGluIHBhZHMgKi8KIAltZW1zZXQoY3R4LT5rX2lwYWQsIDAsIHNpemVvZihjdHgtPmtfaXBhZCkpOwpAQCAtMzU5LDkgKzM1OCw5IEBACiB7CiAJc3RydWN0IEhNQUNNRDVDb250ZXh0IGN0eDsKIAlobWFjX21kNV9pbml0X2xpbUtfdG9fNjQoa2V5LCAxNiwgJmN0eCk7Ci0JaWYgKGRhdGFfbGVuICE9IDApIHsKKwlpZiAoZGF0YV9sZW4gIT0gMCkKIAkJaG1hY19tZDVfdXBkYXRlKGRhdGEsIGRhdGFfbGVuLCAmY3R4KTsKLQl9CisKIAlobWFjX21kNV9maW5hbChkaWdlc3QsICZjdHgpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IDE1NTQ2YzIuLjJhNDJkOWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICAgZnMvY2lmcy9taXNjLmMKICAqCi0gKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwNworICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDgKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCiAgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zMjAsOSArMzIwLDkgQEAKIAkJaWYgKHRyZWVDb24tPnNlcykgewogCQkJaWYgKHRyZWVDb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSUNPREUpCiAJCQkJYnVmZmVyLT5GbGFnczIgfD0gU01CRkxHMl9VTklDT0RFOwotCQkJaWYgKHRyZWVDb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1NUQVRVUzMyKSB7CisJCQlpZiAodHJlZUNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfU1RBVFVTMzIpCiAJCQkJYnVmZmVyLT5GbGFnczIgfD0gU01CRkxHMl9FUlJfU1RBVFVTOwotCQkJfQorCiAJCQkvKiBVaWQgaXMgbm90IGNvbnZlcnRlZCAqLwogCQkJYnVmZmVyLT5VaWQgPSB0cmVlQ29uLT5zZXMtPlN1aWQ7CiAJCQlidWZmZXItPk1pZCA9IEdldE5leHRNaWQodHJlZUNvbi0+c2VzLT5zZXJ2ZXIpOwpAQCAtNjEwLDcgKzYxMCw4IEBACiAKIAlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBzbWJfYnVmOwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgc21iX2J1Zl9sZW5ndGg7IGkrKywgaisrKSB7Ci0JCWlmIChpICUgOCA9PSAwKSB7CS8qIGhhdmUgcmVhY2hlZCB0aGUgYmVnaW5uaW5nIG9mIGxpbmUgKi8KKwkJaWYgKGkgJSA4ID09IDApIHsKKwkJCS8qIGhhdmUgcmVhY2hlZCB0aGUgYmVnaW5uaW5nIG9mIGxpbmUgKi8KIAkJCXByaW50ayhLRVJOX0RFQlVHICJ8ICIpOwogCQkJaiA9IDA7CiAJCX0KQEAgLTYyMSw3ICs2MjIsOCBAQAogCQllbHNlCiAJCQlkZWJ1Z19saW5lWzEgKyAoMiAqIGopXSA9ICdfJzsKIAotCQlpZiAoaSAlIDggPT0gNykgeyAvKiByZWFjaGVkIGVuZCBvZiBsaW5lLCB0aW1lIHRvIHByaW50IGFzY2lpICovCisJCWlmIChpICUgOCA9PSA3KSB7CisJCQkvKiByZWFjaGVkIGVuZCBvZiBsaW5lLCB0aW1lIHRvIHByaW50IGFzY2lpICovCiAJCQlkZWJ1Z19saW5lWzE2XSA9IDA7CiAJCQlwcmludGsoIiB8ICVzXG4iLCBkZWJ1Z19saW5lKTsKIAkJfQpAQCAtNjMxLDcgKzYzMyw3IEBACiAJCWRlYnVnX2xpbmVbMiAqIGpdID0gJyAnOwogCQlkZWJ1Z19saW5lWzEgKyAoMiAqIGopXSA9ICcgJzsKIAl9Ci0JcHJpbnRrKCAiIHwgJXNcbiIsIGRlYnVnX2xpbmUpOworCXByaW50aygiIHwgJXNcbiIsIGRlYnVnX2xpbmUpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9uZXRtaXNjLmMgYi9mcy9jaWZzL25ldG1pc2MuYwppbmRleCA2NDZlMWYwLi4zYjVhNWNlIDEwMDY0NAotLS0gYS9mcy9jaWZzL25ldG1pc2MuYworKysgYi9mcy9jaWZzL25ldG1pc2MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvbmV0bWlzYy5jCiAgKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOAogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgRXJyb3IgbWFwcGluZyByb3V0aW5lcyBmcm9tIFNhbWJhIGxpYnNtYi9lcnJvcm1hcC5jCkBAIC0xNTAsOSArMTUwLDcgQEAKIAkJaWYgKGNwW2ldID09ICdcXCcpCiAJCQlicmVhazsKIAkJaWYgKGNwW2ldID09ICcvJykgewotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCQkJY0ZZSSgxLCAoImNoYW5nZSBzbGFzaCB0byBiYWNrc2xhc2ggaW4gbWFsZm9ybWVkIFVOQyIpKTsKLSNlbmRpZgorCQkJY0ZZSShEQkcyLCAoImNoYW5nZSBzbGFzaCB0byBcXCBpbiBtYWxmb3JtZWQgVU5DIikpOwogCQkJY3BbaV0gPSAnXFwnOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTE3OCw5ICsxNzYsNyBAQAogCX0gZWxzZSBpZiAoYWRkcmVzc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKIAkJcmV0ID0gaW42X3B0b24oY3AsIC0xIC8qIGxlbiAqLywgZHN0ICwgJ1xcJywgTlVMTCk7CiAJfQotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCWNGWUkoMSwgKCJhZGRyZXNzIGNvbnZlcnNpb24gcmV0dXJuZWQgJWQgZm9yICVzIiwgcmV0LCBjcCkpOwotI2VuZGlmCisJY0ZZSShEQkcyLCAoImFkZHJlc3MgY29udmVyc2lvbiByZXR1cm5lZCAlZCBmb3IgJXMiLCByZXQsIGNwKSk7CiAJaWYgKHJldCA+IDApCiAJCXJldCA9IDE7CiAJcmV0dXJuIHJldDsKQEAgLTI1Myw3ICsyNDksOCBAQAogCUVSUkRPUywgODcsIE5UX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUl9NSVh9LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfSU5WQUxJRF9RVU9UQV9MT1dFUn0sIHsKIAlFUlJIUkQsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19ESVNLX0NPUlJVUFRfRVJST1J9LCB7Ci0JRVJSRE9TLCBFUlJiYWRmaWxlLCBOVF9TVEFUVVNfT0JKRUNUX05BTUVfSU5WQUxJRH0sIHsJLyogbWFwcGluZyBjaGFuZ2VkIHNpbmNlIHNoZWxsIGRvZXMgbG9va3VwIG9uICogYW5kIGV4cGVjdHMgZmlsZSBub3QgZm91bmQgKi8KKwkgLyogbWFwcGluZyBjaGFuZ2VkIHNpbmNlIHNoZWxsIGRvZXMgbG9va3VwIG9uICogZXhwZWN0cyBGaWxlTm90Rm91bmQgKi8KKwlFUlJET1MsIEVSUmJhZGZpbGUsIE5UX1NUQVRVU19PQkpFQ1RfTkFNRV9JTlZBTElEfSwgewogCUVSUkRPUywgRVJSYmFkZmlsZSwgTlRfU1RBVFVTX09CSkVDVF9OQU1FX05PVF9GT1VORH0sIHsKIAlFUlJET1MsIEVSUmFscmVhZHlleGlzdHMsIE5UX1NUQVRVU19PQkpFQ1RfTkFNRV9DT0xMSVNJT059LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfSEFORExFX05PVF9XQUlUQUJMRX0sIHsKQEAgLTgyMCw3ICs4MTcsOCBAQAogCS8qIG9sZCBzdHlsZSBlcnJvcnMgKi8KIAogCS8qIERPUyBjbGFzcyBzbWIgZXJyb3IgY29kZXMgLSBtYXAgRE9TICovCi0JaWYgKHNtYmVycmNsYXNzID09IEVSUkRPUykgeyAgLyogMSBieXRlIGZpZWxkIG5vIG5lZWQgdG8gYnl0ZSByZXZlcnNlICovCisJaWYgKHNtYmVycmNsYXNzID09IEVSUkRPUykgeworCQkvKiAxIGJ5dGUgZmllbGQgbm8gbmVlZCB0byBieXRlIHJldmVyc2UgKi8KIAkJZm9yIChpID0gMDsKIAkJICAgICBpIDwKIAkJICAgICBzaXplb2YobWFwcGluZ190YWJsZV9FUlJET1MpIC8KQEAgLTgzNCw3ICs4MzIsOCBAQAogCQkJfQogCQkJLyogZWxzZSB0cnkgbmV4dCBlcnJvciBtYXBwaW5nIG9uZSB0byBzZWUgaWYgbWF0Y2ggKi8KIAkJfQotCX0gZWxzZSBpZiAoc21iZXJyY2xhc3MgPT0gRVJSU1JWKSB7ICAgLyogc2VydmVyIGNsYXNzIG9mIGVycm9yIGNvZGVzICovCisJfSBlbHNlIGlmIChzbWJlcnJjbGFzcyA9PSBFUlJTUlYpIHsKKwkJLyogc2VydmVyIGNsYXNzIG9mIGVycm9yIGNvZGVzICovCiAJCWZvciAoaSA9IDA7CiAJCSAgICAgaSA8CiAJCSAgICAgc2l6ZW9mKG1hcHBpbmdfdGFibGVfRVJSU1JWKSAvCkBAIC05MjIsOCArOTIxLDggQEAKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAJaW50IHNlYywgbWluLCBkYXlzLCBtb250aCwgeWVhcjsKLQlTTUJfVElNRSAqIHN0ID0gKFNNQl9USU1FICopJnRpbWU7Ci0JU01CX0RBVEUgKiBzZCA9IChTTUJfREFURSAqKSZkYXRlOworCVNNQl9USU1FICpzdCA9IChTTUJfVElNRSAqKSZ0aW1lOworCVNNQl9EQVRFICpzZCA9IChTTUJfREFURSAqKSZkYXRlOwogCiAJY0ZZSSgxLCAoImRhdGUgJWQgdGltZSAlZCIsIGRhdGUsIHRpbWUpKTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCAwZjIyZGVmLi4zMmI0NDVlIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgIERpcmVjdG9yeSBzZWFyY2ggaGFuZGxpbmcKICAqCi0gKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDQsIDIwMDcKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNCwgMjAwOAogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQyLDE3ICs0MiwxOCBAQAogCQkJY0ZZSSgxLCAoImVtcHR5IGNpZnMgcHJpdmF0ZSBmaWxlIGRhdGEiKSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKGNmLT5pbnZhbGlkSGFuZGxlKSB7CisJCWlmIChjZi0+aW52YWxpZEhhbmRsZSkKIAkJCWNGWUkoMSwgKCJpbnZhbGlkIGhhbmRsZSIpKTsKLQkJfQotCQlpZiAoY2YtPnNyY2hfaW5mLmVuZE9mU2VhcmNoKSB7CisJCWlmIChjZi0+c3JjaF9pbmYuZW5kT2ZTZWFyY2gpCiAJCQljRllJKDEsICgiZW5kIG9mIHNlYXJjaCIpKTsKLQkJfQotCQlpZiAoY2YtPnNyY2hfaW5mLmVtcHR5RGlyKSB7CisJCWlmIChjZi0+c3JjaF9pbmYuZW1wdHlEaXIpCiAJCQljRllJKDEsICgiZW1wdHkgZGlyIikpOwotCQl9CiAJfQogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2NpZnNfZmlsZV9zdHJ1Y3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmxhYmVsKQoreworfQogI2VuZGlmIC8qIERFQlVHMiAqLwogCiAvKiBSZXR1cm5zIG9uZSBpZiBuZXcgaW5vZGUgY3JlYXRlZCAod2hpY2ggdGhlcmVmb3JlIG5lZWRzIHRvIGJlIGhhc2hlZCkgKi8KQEAgLTE1MCw3ICsxNTEsNyBAQAogCQkgICAgICBjaWZzX05UdGltZVRvVW5peChsZTY0X3RvX2NwdShwZmluZERhdGEtPkNoYW5nZVRpbWUpKTsKIAl9IGVsc2UgeyAvKiBsZWdhY3ksIE9TMiBhbmQgRE9TIHN0eWxlICovCiAvKgkJc3RydWN0IHRpbWVzcGVjIHRzOyovCi0JCUZJTkRfRklMRV9TVEFOREFSRF9JTkZPICogcGZpbmREYXRhID0KKwkJRklORF9GSUxFX1NUQU5EQVJEX0lORk8gKnBmaW5kRGF0YSA9CiAJCQkoRklORF9GSUxFX1NUQU5EQVJEX0lORk8gKilidWY7CiAKIAkJdG1wX2lub2RlLT5pX210aW1lID0gY252cnREb3NVbml4VG0oCkBAIC0xOTgsOSArMTk5LDggQEAKIAlpZiAoYXR0ciAmIEFUVFJfRElSRUNUT1JZKSB7CiAJCSpwb2JqZWN0X3R5cGUgPSBEVF9ESVI7CiAJCS8qIG92ZXJyaWRlIGRlZmF1bHQgcGVybXMgc2luY2Ugd2UgZG8gbm90IGxvY2sgZGlycyAqLwotCQlpZiAoYXRvbWljX3JlYWQoJmNpZnNJbmZvLT5pblVzZSkgPT0gMCkgeworCQlpZiAoYXRvbWljX3JlYWQoJmNpZnNJbmZvLT5pblVzZSkgPT0gMCkKIAkJCXRtcF9pbm9kZS0+aV9tb2RlID0gY2lmc19zYi0+bW50X2Rpcl9tb2RlOwotCQl9CiAJCXRtcF9pbm9kZS0+aV9tb2RlIHw9IFNfSUZESVI7CiAJfSBlbHNlIGlmICgoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1VOWF9FTVVMKSAmJgogCQkgICAoYXR0ciAmIEFUVFJfU1lTVEVNKSkgewpAQCAtMjMxLDkgKzIzMSw4IEBACiAJfSAvKiBjb3VsZCBhZGQgY29kZSBoZXJlIC0gdG8gdmFsaWRhdGUgaWYgZGV2aWNlIG9yIHdlaXJkIHNoYXJlIHR5cGU/ICovCiAKIAkvKiBjYW4gbm90IGZpbGwgaW4gbmxpbmsgaGVyZSBhcyBpbiBxcGF0aGluZm8gdmVyc2lvbiBhbmQgVW54IHNlYXJjaCAqLwotCWlmIChhdG9taWNfcmVhZCgmY2lmc0luZm8tPmluVXNlKSA9PSAwKSB7CisJaWYgKGF0b21pY19yZWFkKCZjaWZzSW5mby0+aW5Vc2UpID09IDApCiAJCWF0b21pY19zZXQoJmNpZnNJbmZvLT5pblVzZSwgMSk7Ci0JfQogCiAJc3Bpbl9sb2NrKCZ0bXBfaW5vZGUtPmlfbG9jayk7CiAJaWYgKGlzX3NpemVfc2FmZV90b19jaGFuZ2UoY2lmc0luZm8sIGVuZF9vZl9maWxlKSkgewpAQCAtNDYxLDkgKzQ2MCw4IEBACiAKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCi0JaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CisJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAljRllJKDEsICgiRnVsbCBwYXRoOiAlcyBzdGFydCBhdDogJWxsZCIsIGZ1bGxfcGF0aCwgZmlsZS0+Zl9wb3MpKTsKIApAQCAtNDcxLDkgKzQ2OSw5IEBACiAJLyogdGVzdCBmb3IgVW5peCBleHRlbnNpb25zICovCiAJLyogYnV0IG5vdyBjaGVjayBmb3IgdGhlbSBvbiB0aGUgc2hhcmUvbW91bnQgbm90IG9uIHRoZSBTTUIgc2Vzc2lvbiAqLwogLyoJaWYgKHBUY29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSB7ICovCi0JaWYgKHBUY29uLT51bml4X2V4dCkgeworCWlmIChwVGNvbi0+dW5peF9leHQpCiAJCWNpZnNGaWxlLT5zcmNoX2luZi5pbmZvX2xldmVsID0gU01CX0ZJTkRfRklMRV9VTklYOwotCX0gZWxzZSBpZiAoKHBUY29uLT5zZXMtPmNhcGFiaWxpdGllcyAmCisJZWxzZSBpZiAoKHBUY29uLT5zZXMtPmNhcGFiaWxpdGllcyAmCiAJCQkoQ0FQX05UX1NNQlMgfCBDQVBfTlRfRklORCkpID09IDApIHsKIAkJY2lmc0ZpbGUtPnNyY2hfaW5mLmluZm9fbGV2ZWwgPSBTTUJfRklORF9GSUxFX0lORk9fU1RBTkRBUkQ7CiAJfSBlbHNlIGlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pIHsKQEAgLTUxNCwxMCArNTEyLDEwIEBACiBzdGF0aWMgY2hhciAqbnh0X2Rpcl9lbnRyeShjaGFyICpvbGRfZW50cnksIGNoYXIgKmVuZF9vZl9zbWIsIGludCBsZXZlbCkKIHsKIAljaGFyICpuZXdfZW50cnk7Ci0JRklMRV9ESVJFQ1RPUllfSU5GTyAqIHBEaXJJbmZvID0gKEZJTEVfRElSRUNUT1JZX0lORk8gKilvbGRfZW50cnk7CisJRklMRV9ESVJFQ1RPUllfSU5GTyAqcERpckluZm8gPSAoRklMRV9ESVJFQ1RPUllfSU5GTyAqKW9sZF9lbnRyeTsKIAogCWlmIChsZXZlbCA9PSBTTUJfRklORF9GSUxFX0lORk9fU1RBTkRBUkQpIHsKLQkJRklORF9GSUxFX1NUQU5EQVJEX0lORk8gKiBwZkRhdGE7CisJCUZJTkRfRklMRV9TVEFOREFSRF9JTkZPICpwZkRhdGE7CiAJCXBmRGF0YSA9IChGSU5EX0ZJTEVfU1RBTkRBUkRfSU5GTyAqKXBEaXJJbmZvOwogCiAJCW5ld19lbnRyeSA9IG9sZF9lbnRyeSArIHNpemVvZihGSU5EX0ZJTEVfU1RBTkRBUkRfSU5GTykgKwpAQCAtNTUzLDcgKzU1MSw3IEBACiAJaW50IGxlbiA9IDA7CiAKIAlpZiAoY2ZpbGUtPnNyY2hfaW5mLmluZm9fbGV2ZWwgPT0gU01CX0ZJTkRfRklMRV9VTklYKSB7Ci0JCUZJTEVfVU5JWF9JTkZPICogcEZpbmREYXRhID0gKEZJTEVfVU5JWF9JTkZPICopY3VycmVudF9lbnRyeTsKKwkJRklMRV9VTklYX0lORk8gKnBGaW5kRGF0YSA9IChGSUxFX1VOSVhfSU5GTyAqKWN1cnJlbnRfZW50cnk7CiAJCWZpbGVuYW1lID0gJnBGaW5kRGF0YS0+RmlsZU5hbWVbMF07CiAJCWlmIChjZmlsZS0+c3JjaF9pbmYudW5pY29kZSkgewogCQkJbGVuID0gY2lmc191bmljb2RlX2J5dGVsZW4oZmlsZW5hbWUpOwpAQCAtNTYyLDMwICs1NjAsMzAgQEAKIAkJCWxlbiA9IHN0cm5sZW4oZmlsZW5hbWUsIDUpOwogCQl9CiAJfSBlbHNlIGlmIChjZmlsZS0+c3JjaF9pbmYuaW5mb19sZXZlbCA9PSBTTUJfRklORF9GSUxFX0RJUkVDVE9SWV9JTkZPKSB7Ci0JCUZJTEVfRElSRUNUT1JZX0lORk8gKiBwRmluZERhdGEgPQorCQlGSUxFX0RJUkVDVE9SWV9JTkZPICpwRmluZERhdGEgPQogCQkJKEZJTEVfRElSRUNUT1JZX0lORk8gKiljdXJyZW50X2VudHJ5OwogCQlmaWxlbmFtZSA9ICZwRmluZERhdGEtPkZpbGVOYW1lWzBdOwogCQlsZW4gPSBsZTMyX3RvX2NwdShwRmluZERhdGEtPkZpbGVOYW1lTGVuZ3RoKTsKIAl9IGVsc2UgaWYgKGNmaWxlLT5zcmNoX2luZi5pbmZvX2xldmVsID09CiAJCQlTTUJfRklORF9GSUxFX0ZVTExfRElSRUNUT1JZX0lORk8pIHsKLQkJRklMRV9GVUxMX0RJUkVDVE9SWV9JTkZPICogcEZpbmREYXRhID0KKwkJRklMRV9GVUxMX0RJUkVDVE9SWV9JTkZPICpwRmluZERhdGEgPQogCQkJKEZJTEVfRlVMTF9ESVJFQ1RPUllfSU5GTyAqKWN1cnJlbnRfZW50cnk7CiAJCWZpbGVuYW1lID0gJnBGaW5kRGF0YS0+RmlsZU5hbWVbMF07CiAJCWxlbiA9IGxlMzJfdG9fY3B1KHBGaW5kRGF0YS0+RmlsZU5hbWVMZW5ndGgpOwogCX0gZWxzZSBpZiAoY2ZpbGUtPnNyY2hfaW5mLmluZm9fbGV2ZWwgPT0KIAkJCVNNQl9GSU5EX0ZJTEVfSURfRlVMTF9ESVJfSU5GTykgewotCQlTRUFSQ0hfSURfRlVMTF9ESVJfSU5GTyAqIHBGaW5kRGF0YSA9CisJCVNFQVJDSF9JRF9GVUxMX0RJUl9JTkZPICpwRmluZERhdGEgPQogCQkJKFNFQVJDSF9JRF9GVUxMX0RJUl9JTkZPICopY3VycmVudF9lbnRyeTsKIAkJZmlsZW5hbWUgPSAmcEZpbmREYXRhLT5GaWxlTmFtZVswXTsKIAkJbGVuID0gbGUzMl90b19jcHUocEZpbmREYXRhLT5GaWxlTmFtZUxlbmd0aCk7CiAJfSBlbHNlIGlmIChjZmlsZS0+c3JjaF9pbmYuaW5mb19sZXZlbCA9PQogCQkJU01CX0ZJTkRfRklMRV9CT1RIX0RJUkVDVE9SWV9JTkZPKSB7Ci0JCUZJTEVfQk9USF9ESVJFQ1RPUllfSU5GTyAqIHBGaW5kRGF0YSA9CisJCUZJTEVfQk9USF9ESVJFQ1RPUllfSU5GTyAqcEZpbmREYXRhID0KIAkJCShGSUxFX0JPVEhfRElSRUNUT1JZX0lORk8gKiljdXJyZW50X2VudHJ5OwogCQlmaWxlbmFtZSA9ICZwRmluZERhdGEtPkZpbGVOYW1lWzBdOwogCQlsZW4gPSBsZTMyX3RvX2NwdShwRmluZERhdGEtPkZpbGVOYW1lTGVuZ3RoKTsKIAl9IGVsc2UgaWYgKGNmaWxlLT5zcmNoX2luZi5pbmZvX2xldmVsID09IFNNQl9GSU5EX0ZJTEVfSU5GT19TVEFOREFSRCkgewotCQlGSU5EX0ZJTEVfU1RBTkRBUkRfSU5GTyAqIHBGaW5kRGF0YSA9CisJCUZJTkRfRklMRV9TVEFOREFSRF9JTkZPICpwRmluZERhdGEgPQogCQkJKEZJTkRfRklMRV9TVEFOREFSRF9JTkZPICopY3VycmVudF9lbnRyeTsKIAkJZmlsZW5hbWUgPSAmcEZpbmREYXRhLT5GaWxlTmFtZVswXTsKIAkJbGVuID0gcEZpbmREYXRhLT5GaWxlTmFtZUxlbmd0aDsKQEAgLTY2Niw5ICs2NjQsNyBAQAogCS4gYW5kIC4uIGZvciB0aGUgcm9vdCBvZiBhIGRyaXZlIGFuZCBmb3IgdGhvc2Ugd2UgbmVlZAogCXRvIHN0YXJ0IHR3byBlbnRyaWVzIGVhcmxpZXIgKi8KIAotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgogCWR1bXBfY2lmc19maWxlX3N0cnVjdChmaWxlLCAiSW4gZmNlICIpOwotI2VuZGlmCiAJaWYgKCgoaW5kZXhfdG9fZmluZCA8IGNpZnNGaWxlLT5zcmNoX2luZi5pbmRleF9vZl9sYXN0X2VudHJ5KSAmJgogCSAgICAgaXNfZGlyX2NoYW5nZWQoZmlsZSkpIHx8CiAJICAgKGluZGV4X3RvX2ZpbmQgPCBmaXJzdF9lbnRyeV9pbl9idWZmZXIpKSB7CkBAIC03MTgsNyArNzE0LDcgQEAKIAkJcG9zX2luX2J1ZiA9IGluZGV4X3RvX2ZpbmQgLSBmaXJzdF9lbnRyeV9pbl9idWZmZXI7CiAJCWNGWUkoMSwgKCJmb3VuZCBlbnRyeSAtIHBvc19pbl9idWYgJWQiLCBwb3NfaW5fYnVmKSk7CiAKLQkJZm9yIChpPTA7IChpIDwgKHBvc19pbl9idWYpKSAmJiAoY3VycmVudF9lbnRyeSAhPSBOVUxMKTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IChpIDwgKHBvc19pbl9idWYpKSAmJiAoY3VycmVudF9lbnRyeSAhPSBOVUxMKTsgaSsrKSB7CiAJCQkvKiBnbyBlbnRyeSBieSBlbnRyeSBmaWd1cmluZyBvdXQgd2hpY2ggaXMgZmlyc3QgKi8KIAkJCWN1cnJlbnRfZW50cnkgPSBueHRfZGlyX2VudHJ5KGN1cnJlbnRfZW50cnksIGVuZF9vZl9zbWIsCiAJCQkJCQljaWZzRmlsZS0+c3JjaF9pbmYuaW5mb19sZXZlbCk7CkBAIC03OTMsNyArNzg5LDcgQEAKIAkJZmlsZW5hbWUgPSAmcEZpbmREYXRhLT5GaWxlTmFtZVswXTsKIAkJbGVuID0gbGUzMl90b19jcHUocEZpbmREYXRhLT5GaWxlTmFtZUxlbmd0aCk7CiAJfSBlbHNlIGlmIChsZXZlbCA9PSBTTUJfRklORF9GSUxFX0lORk9fU1RBTkRBUkQpIHsKLQkJRklORF9GSUxFX1NUQU5EQVJEX0lORk8gKiBwRmluZERhdGEgPQorCQlGSU5EX0ZJTEVfU1RBTkRBUkRfSU5GTyAqcEZpbmREYXRhID0KIAkJCShGSU5EX0ZJTEVfU1RBTkRBUkRfSU5GTyAqKWN1cnJlbnRfZW50cnk7CiAJCWZpbGVuYW1lID0gJnBGaW5kRGF0YS0+RmlsZU5hbWVbMF07CiAJCS8qIG9uZSBieXRlIGxlbmd0aCwgbm8gbmFtZSBjb252ZXJzaW9uICovCkBAIC05MjgsNyArOTI0LDcgQEAKIAlsZXZlbCA9IGNpZnNGaWxlLT5zcmNoX2luZi5pbmZvX2xldmVsOwogCiAJaWYgKGxldmVsID09IFNNQl9GSU5EX0ZJTEVfVU5JWCkgewotCQlGSUxFX1VOSVhfSU5GTyAqIHBGaW5kRGF0YSA9IChGSUxFX1VOSVhfSU5GTyAqKWN1cnJlbnRfZW50cnk7CisJCUZJTEVfVU5JWF9JTkZPICpwRmluZERhdGEgPSAoRklMRV9VTklYX0lORk8gKiljdXJyZW50X2VudHJ5OwogCiAJCWZpbGVuYW1lID0gJnBGaW5kRGF0YS0+RmlsZU5hbWVbMF07CiAJCWlmIChjaWZzRmlsZS0+c3JjaF9pbmYudW5pY29kZSkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCBkMjE1M2FiLi5lZDE1MGVmIDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtNDE3LDEwICs0MTcsNiBAQAogCiAJCWNhbGNfbGFubWFuX2hhc2goc2VzLCBsbm1fc2Vzc2lvbl9rZXkpOwogCQlzZXMtPmZsYWdzIHw9IENJRlNfU0VTX0xBTk1BTjsKLS8qICNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKLQkJY2lmc19kdW1wX21lbSgiY3J5cHRrZXk6ICIsc2VzLT5zZXJ2ZXItPmNyeXB0S2V5LAotCQkJQ0lGU19TRVNTX0tFWV9TSVpFKTsKLSNlbmRpZiAqLwogCQltZW1jcHkoYmNjX3B0ciwgKGNoYXIgKilsbm1fc2Vzc2lvbl9rZXksIENJRlNfU0VTU19LRVlfU0laRSk7CiAJCWJjY19wdHIgKz0gQ0lGU19TRVNTX0tFWV9TSVpFOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmRlcy5jIGIvZnMvY2lmcy9zbWJkZXMuYwppbmRleCBjZmE2ZDIxLi4wNDk0M2M5IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmRlcy5jCisrKyBiL2ZzL2NpZnMvc21iZGVzLmMKQEAgLTExNCw0MiArMTE0LDQyIEBACiAJe3sxNCwgNCwgMTMsIDEsIDIsIDE1LCAxMSwgOCwgMywgMTAsIDYsIDEyLCA1LCA5LCAwLCA3fSwKIAkgezAsIDE1LCA3LCA0LCAxNCwgMiwgMTMsIDEsIDEwLCA2LCAxMiwgMTEsIDksIDUsIDMsIDh9LAogCSB7NCwgMSwgMTQsIDgsIDEzLCA2LCAyLCAxMSwgMTUsIDEyLCA5LCA3LCAzLCAxMCwgNSwgMH0sCi0JIHsxNSwgMTIsIDgsIDIsIDQsIDksIDEsIDcsIDUsIDExLCAzLCAxNCwgMTAsIDAsIDYsIDEzfX0sCisJIHsxNSwgMTIsIDgsIDIsIDQsIDksIDEsIDcsIDUsIDExLCAzLCAxNCwgMTAsIDAsIDYsIDEzfSB9LAogCiAJe3sxNSwgMSwgOCwgMTQsIDYsIDExLCAzLCA0LCA5LCA3LCAyLCAxMywgMTIsIDAsIDUsIDEwfSwKIAkgezMsIDEzLCA0LCA3LCAxNSwgMiwgOCwgMTQsIDEyLCAwLCAxLCAxMCwgNiwgOSwgMTEsIDV9LAogCSB7MCwgMTQsIDcsIDExLCAxMCwgNCwgMTMsIDEsIDUsIDgsIDEyLCA2LCA5LCAzLCAyLCAxNX0sCi0JIHsxMywgOCwgMTAsIDEsIDMsIDE1LCA0LCAyLCAxMSwgNiwgNywgMTIsIDAsIDUsIDE0LCA5fX0sCisJIHsxMywgOCwgMTAsIDEsIDMsIDE1LCA0LCAyLCAxMSwgNiwgNywgMTIsIDAsIDUsIDE0LCA5fSB9LAogCiAJe3sxMCwgMCwgOSwgMTQsIDYsIDMsIDE1LCA1LCAxLCAxMywgMTIsIDcsIDExLCA0LCAyLCA4fSwKIAkgezEzLCA3LCAwLCA5LCAzLCA0LCA2LCAxMCwgMiwgOCwgNSwgMTQsIDEyLCAxMSwgMTUsIDF9LAogCSB7MTMsIDYsIDQsIDksIDgsIDE1LCAzLCAwLCAxMSwgMSwgMiwgMTIsIDUsIDEwLCAxNCwgN30sCi0JIHsxLCAxMCwgMTMsIDAsIDYsIDksIDgsIDcsIDQsIDE1LCAxNCwgMywgMTEsIDUsIDIsIDEyfX0sCisJIHsxLCAxMCwgMTMsIDAsIDYsIDksIDgsIDcsIDQsIDE1LCAxNCwgMywgMTEsIDUsIDIsIDEyfSB9LAogCiAJe3s3LCAxMywgMTQsIDMsIDAsIDYsIDksIDEwLCAxLCAyLCA4LCA1LCAxMSwgMTIsIDQsIDE1fSwKIAkgezEzLCA4LCAxMSwgNSwgNiwgMTUsIDAsIDMsIDQsIDcsIDIsIDEyLCAxLCAxMCwgMTQsIDl9LAogCSB7MTAsIDYsIDksIDAsIDEyLCAxMSwgNywgMTMsIDE1LCAxLCAzLCAxNCwgNSwgMiwgOCwgNH0sCi0JIHszLCAxNSwgMCwgNiwgMTAsIDEsIDEzLCA4LCA5LCA0LCA1LCAxMSwgMTIsIDcsIDIsIDE0fX0sCisJIHszLCAxNSwgMCwgNiwgMTAsIDEsIDEzLCA4LCA5LCA0LCA1LCAxMSwgMTIsIDcsIDIsIDE0fSB9LAogCiAJe3syLCAxMiwgNCwgMSwgNywgMTAsIDExLCA2LCA4LCA1LCAzLCAxNSwgMTMsIDAsIDE0LCA5fSwKIAkgezE0LCAxMSwgMiwgMTIsIDQsIDcsIDEzLCAxLCA1LCAwLCAxNSwgMTAsIDMsIDksIDgsIDZ9LAogCSB7NCwgMiwgMSwgMTEsIDEwLCAxMywgNywgOCwgMTUsIDksIDEyLCA1LCA2LCAzLCAwLCAxNH0sCi0JIHsxMSwgOCwgMTIsIDcsIDEsIDE0LCAyLCAxMywgNiwgMTUsIDAsIDksIDEwLCA0LCA1LCAzfX0sCisJIHsxMSwgOCwgMTIsIDcsIDEsIDE0LCAyLCAxMywgNiwgMTUsIDAsIDksIDEwLCA0LCA1LCAzfSB9LAogCiAJe3sxMiwgMSwgMTAsIDE1LCA5LCAyLCA2LCA4LCAwLCAxMywgMywgNCwgMTQsIDcsIDUsIDExfSwKIAkgezEwLCAxNSwgNCwgMiwgNywgMTIsIDksIDUsIDYsIDEsIDEzLCAxNCwgMCwgMTEsIDMsIDh9LAogCSB7OSwgMTQsIDE1LCA1LCAyLCA4LCAxMiwgMywgNywgMCwgNCwgMTAsIDEsIDEzLCAxMSwgNn0sCi0JIHs0LCAzLCAyLCAxMiwgOSwgNSwgMTUsIDEwLCAxMSwgMTQsIDEsIDcsIDYsIDAsIDgsIDEzfX0sCisJIHs0LCAzLCAyLCAxMiwgOSwgNSwgMTUsIDEwLCAxMSwgMTQsIDEsIDcsIDYsIDAsIDgsIDEzfSB9LAogCiAJe3s0LCAxMSwgMiwgMTQsIDE1LCAwLCA4LCAxMywgMywgMTIsIDksIDcsIDUsIDEwLCA2LCAxfSwKIAkgezEzLCAwLCAxMSwgNywgNCwgOSwgMSwgMTAsIDE0LCAzLCA1LCAxMiwgMiwgMTUsIDgsIDZ9LAogCSB7MSwgNCwgMTEsIDEzLCAxMiwgMywgNywgMTQsIDEwLCAxNSwgNiwgOCwgMCwgNSwgOSwgMn0sCi0JIHs2LCAxMSwgMTMsIDgsIDEsIDQsIDEwLCA3LCA5LCA1LCAwLCAxNSwgMTQsIDIsIDMsIDEyfX0sCisJIHs2LCAxMSwgMTMsIDgsIDEsIDQsIDEwLCA3LCA5LCA1LCAwLCAxNSwgMTQsIDIsIDMsIDEyfSB9LAogCiAJe3sxMywgMiwgOCwgNCwgNiwgMTUsIDExLCAxLCAxMCwgOSwgMywgMTQsIDUsIDAsIDEyLCA3fSwKIAkgezEsIDE1LCAxMywgOCwgMTAsIDMsIDcsIDQsIDEyLCA1LCA2LCAxMSwgMCwgMTQsIDksIDJ9LAogCSB7NywgMTEsIDQsIDEsIDksIDEyLCAxNCwgMiwgMCwgNiwgMTAsIDEzLCAxNSwgMywgNSwgOH0sCi0JIHsyLCAxLCAxNCwgNywgNCwgMTAsIDgsIDEzLCAxNSwgMTIsIDksIDAsIDMsIDUsIDYsIDExfX0KKwkgezIsIDEsIDE0LCA3LCA0LCAxMCwgOCwgMTMsIDE1LCAxMiwgOSwgMCwgMywgNSwgNiwgMTF9IH0KIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0zMTMsOSArMzEzLDggQEAKIAlrZXlbNV0gPSAoKHN0cls0XSAmIDB4MUYpIDw8IDIpIHwgKHN0cls1XSA+PiA2KTsKIAlrZXlbNl0gPSAoKHN0cls1XSAmIDB4M0YpIDw8IDEpIHwgKHN0cls2XSA+PiA3KTsKIAlrZXlbN10gPSBzdHJbNl0gJiAweDdGOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlrZXlbaV0gPSAoa2V5W2ldIDw8IDEpOwotCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTM0NCw5ICszNDMsOCBAQAogCiAJZG9oYXNoKG91dGIsIGluYiwga2V5YiwgZm9ydyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJb3V0W2ldID0gMDsKLQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewogCQlpZiAob3V0YltpXSkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IDUwYjYyM2EuLjM2MTJkNmMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMKKysrIGIvZnMvY2lmcy90cmFuc3BvcnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvdHJhbnNwb3J0LmMKICAqCi0gKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwNworICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDgKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqICAgSmVyZW15IEFsbGlzb24gKGpyYUBzYW1iYS5vcmcpIDIwMDYuCiAgKgpAQCAtMzU4LDkgKzM1OCw5IEBACiAJfSBlbHNlIGlmIChzZXMtPnN0YXR1cyAhPSBDaWZzR29vZCkgewogCQkvKiBjaGVjayBpZiBTTUIgc2Vzc2lvbiBpcyBiYWQgYmVjYXVzZSB3ZSBhcmUgc2V0dGluZyBpdCB1cCAqLwogCQlpZiAoKGluX2J1Zi0+Q29tbWFuZCAhPSBTTUJfQ09NX1NFU1NJT05fU0VUVVBfQU5EWCkgJiYKLQkJCShpbl9idWYtPkNvbW1hbmQgIT0gU01CX0NPTV9ORUdPVElBVEUpKSB7CisJCQkoaW5fYnVmLT5Db21tYW5kICE9IFNNQl9DT01fTkVHT1RJQVRFKSkKIAkJCXJldHVybiAtRUFHQUlOOwotCQl9IC8qIGVsc2Ugb2sgLSB3ZSBhcmUgc2V0dGluZyB1cCBzZXNzaW9uICovCisJCS8qIGVsc2Ugb2sgLSB3ZSBhcmUgc2V0dGluZyB1cCBzZXNzaW9uICovCiAJfQogCSpwcG1pZFEgPSBBbGxvY01pZFFFbnRyeShpbl9idWYsIHNlcyk7CiAJaWYgKCpwcG1pZFEgPT0gTlVMTCkKQEAgLTQzNyw5ICs0MzcsOCBAQAogCWlvdlswXS5pb3ZfbGVuID0gaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCArIDQ7CiAJZmxhZ3MgfD0gQ0lGU19OT19SRVNQOwogCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgc2VzLCBpb3YsIDEsICZyZXNwX2J1Zl90eXBlLCBmbGFncyk7Ci0jaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCi0JY0ZZSSgxLCAoIlNlbmRSY3ZOb1IgZmxhZ3MgJWQgcmMgJWQiLCBmbGFncywgcmMpKTsKLSNlbmRpZgorCWNGWUkoREJHMiwgKCJTZW5kUmN2Tm9Sc3AgZmxhZ3MgJWQgcmMgJWQiLCBmbGFncywgcmMpKTsKKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IDU0ZThlZjkuLjhjZDZhNDQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTEzOSw5ICsxMzksOSBAQAogCX0gZWxzZSBpZiAoc3RybmNtcChlYV9uYW1lLCBDSUZTX1hBVFRSX1VTRVJfUFJFRklYLCA1KSA9PSAwKSB7CiAJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fWEFUVFIpCiAJCQlnb3RvIHNldF9lYV9leGl0OwotCQlpZiAoc3RybmNtcChlYV9uYW1lLCBDSUZTX1hBVFRSX0RPU19BVFRSSUIsIDE0KSA9PSAwKSB7CisJCWlmIChzdHJuY21wKGVhX25hbWUsIENJRlNfWEFUVFJfRE9TX0FUVFJJQiwgMTQpID09IDApCiAJCQljRllJKDEsICgiYXR0ZW1wdCB0byBzZXQgY2lmcyBpbm9kZSBtZXRhZGF0YSIpKTsKLQkJfQorCiAJCWVhX25hbWUgKz0gNTsgLyogc2tpcCBwYXN0IHVzZXIuIHByZWZpeCAqLwogCQlyYyA9IENJRlNTTUJTZXRFQSh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGVhX25hbWUsIGVhX3ZhbHVlLAogCQkJKF9fdTE2KXZhbHVlX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scywKQEAgLTI2Miw3ICsyNjIsNyBAQAogCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAotCQllbHNlIGlmKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9DSUZTX0FDTCkgeworCQllbHNlIGlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfQ0lGU19BQ0wpIHsKIAkJCV9fdTE2IGZpZDsKIAkJCWludCBvcGxvY2sgPSBGQUxTRTsKIAkJCXN0cnVjdCBjaWZzX250c2QgKnBhY2wgPSBOVUxMOwpAQCAtMzAzLDExICszMDMsMTAgQEAKIAl9IGVsc2UgaWYgKHN0cm5jbXAoZWFfbmFtZSwKIAkJICBDSUZTX1hBVFRSX1NFQ1VSSVRZX1BSRUZJWCwgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTikgPT0gMCkgewogCQljRllJKDEsICgiU2VjdXJpdHkgeGF0dHIgbmFtZXNwYWNlIG5vdCBzdXBwb3J0ZWQgeWV0IikpOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCWNGWUkoMSwKIAkJICAgICgiaWxsZWdhbCB4YXR0ciByZXF1ZXN0ICVzIChvbmx5IHVzZXIgbmFtZXNwYWNlIHN1cHBvcnRlZCkiLAogCQkJZWFfbmFtZSkpOwotCX0KIAogCS8qIFdlIGNvdWxkIGFkZCBhbiBhZGRpdGlvbmFsIGNoZWNrIGZvciBzdHJlYW1zIGllCiAJICAgIGlmIHByb2MvZnMvY2lmcy9zdHJlYW1zdG94YXR0ciBpcyBzZXQgdGhlbgpkaWZmIC0tZ2l0IGEvZnMvY3JhbWZzL2lub2RlLmMgYi9mcy9jcmFtZnMvaW5vZGUuYwppbmRleCAzNTA2ODBmLi4wYzNiNjE4IDEwMDY0NAotLS0gYS9mcy9jcmFtZnMvaW5vZGUuYworKysgYi9mcy9jcmFtZnMvaW5vZGUuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2lub2RlLmMgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKaW5kZXggZDI2ZTI4Mi4uZTk2MDJkOCAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9pbm9kZS5jCisrKyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwpAQCAtMjksMTAgKzI5LDYgQEAKIAogI2RlZmluZSBERUJVR0ZTX01BR0lDCTB4NjQ2MjY3MjAKIAotLyogZGVjbGFyZWQgb3ZlciBpbiBmaWxlLmMgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRlYnVnZnNfbGlua19vcGVyYXRpb25zOwotCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpkZWJ1Z2ZzX21vdW50Owogc3RhdGljIGludCBkZWJ1Z2ZzX21vdW50X2NvdW50OwogCmRpZmYgLS1naXQgYS9mcy9kbG0vZGxtX2ludGVybmFsLmggYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKaW5kZXggZDMwZWE4Yi4uN2E4ODI0ZjQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAorKysgYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8bGludXgvZGxtLmg+CmRpZmYgLS1naXQgYS9mcy9kbG0vcmNvbS5jIGIvZnMvZGxtL3Jjb20uYwppbmRleCAwMzVlNmY5Li42NzUyMmMyIDEwMDY0NAotLS0gYS9mcy9kbG0vcmNvbS5jCisrKyBiL2ZzL2RsbS9yY29tLmMKQEAgLTIxNSw2ICsyMTUsOCBAQAogCWxzLT5sc19yZWNvdmVyX25vZGVpZCA9IG5vZGVpZDsKIAogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkgeworCQlscy0+bHNfcmVjb3Zlcl9idWYtPnJjX2hlYWRlci5oX2xlbmd0aCA9CisJCQlkbG1fY29uZmlnLmNpX2J1ZmZlcl9zaXplOwogCQlkbG1fY29weV9tYXN0ZXJfbmFtZXMobHMsIGxhc3RfbmFtZSwgbGFzdF9sZW4sCiAJCSAgICAgICAgICAgICAgICAgICAgICBscy0+bHNfcmVjb3Zlcl9idWYtPnJjX2J1ZiwKIAkJICAgICAgICAgICAgICAgICAgICAgIG1heF9zaXplLCBub2RlaWQpOwpkaWZmIC0tZ2l0IGEvZnMvZHF1b3QuYyBiL2ZzL2RxdW90LmMKaW5kZXggOWM3ZmViNi4uNDFiOWRiZCAxMDA2NDQKLS0tIGEvZnMvZHF1b3QuYworKysgYi9mcy9kcXVvdC5jCkBAIC0xNTIyLDggKzE1MjIsOCBAQAogCQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZ0b3B1dGlub2RlW2NudF0tPmlfZGF0YSwgMCk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgpOwogCQkJCW1hcmtfaW5vZGVfZGlydHkodG9wdXRpbm9kZVtjbnRdKTsKLQkJCQlpcHV0KHRvcHV0aW5vZGVbY250XSk7CiAJCQl9CisJCQlpcHV0KHRvcHV0aW5vZGVbY250XSk7CiAJCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKIAkJfQogCWlmIChzYi0+c19iZGV2KQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwppbmRleCA4NDFhMDMyLi41ZTU5NjU4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9kZW50cnkuYworKysgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwpAQCAtODAsOCArODAsOCBAQAogewogCWlmIChlY3J5cHRmc19kZW50cnlfdG9fcHJpdmF0ZShkZW50cnkpKSB7CiAJCWlmIChlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KSkgewotCQkJbW50cHV0KGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZGVudHJ5KSk7CiAJCQlkcHV0KGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihkZW50cnkpKTsKKwkJCW1udHB1dChlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeSkpOwogCQl9CiAJCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19kZW50cnlfaW5mb19jYWNoZSwKIAkJCQllY3J5cHRmc19kZW50cnlfdG9fcHJpdmF0ZShkZW50cnkpKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCBkYzc0YjE4Li42ZGYxZGViIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC0yNjMsNTIgKzI2MywxMDIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBtdXN0IHplcm8gYW55IGhvbGUgd2UgY3JlYXRlICovCisvKioKKyAqIGVjcnlwdGZzX3ByZXBhcmVfd3JpdGUKKyAqIEBmaWxlOiBUaGUgZUNyeXB0ZnMgZmlsZQorICogQHBhZ2U6IFRoZSBlQ3J5cHRmcyBwYWdlCisgKiBAZnJvbTogVGhlIHN0YXJ0IGJ5dGUgZnJvbSB3aGljaCB3ZSB3aWxsIHdyaXRlCisgKiBAdG86IFRoZSBlbmQgYnl0ZSB0byB3aGljaCB3ZSB3aWxsIHdyaXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IHplcm8gYW55IGhvbGUgd2UgY3JlYXRlCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG90aGVyd2lzZQorICovCiBzdGF0aWMgaW50IGVjcnlwdGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCSAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7Ci0JaW50IHJjID0gMDsKIAlsb2ZmX3QgcHJldl9wYWdlX2VuZF9zaXplOworCWludCByYyA9IDA7CiAKIAlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXJfcGFnZV9zZWdtZW50KHBhZ2UsIHBhZ2UtPmluZGV4LCAwLAotCQkJCQkJICAgICAgUEFHRV9DQUNIRV9TSVpFLAotCQkJCQkJICAgICAgcGFnZS0+bWFwcGluZy0+aG9zdCk7Ci0JCWlmIChyYykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1waW5nIHRvIHJlYWQgbG93ZXIgIgotCQkJICAgICAgICJwYWdlIHNlZ21lbnQ7IHJjID0gWyVkXVxuIiwgX19GVU5DVElPTl9fLCByYyk7Ci0JCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJCWdvdG8gb3V0OwotCQl9IGVsc2UKKwkJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQgPQorCQkJJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoCisJCQkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CisKKwkJaWYgKCEoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19FTkNSWVBURUQpCisJCSAgICB8fCAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19ORVdfRklMRSkpIHsKKwkJCXJjID0gZWNyeXB0ZnNfcmVhZF9sb3dlcl9wYWdlX3NlZ21lbnQoCisJCQkJcGFnZSwgcGFnZS0+aW5kZXgsIDAsIFBBR0VfQ0FDSEVfU0laRSwKKwkJCQlwYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwkJCWlmIChyYykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcGluZyB0byByZWFkICIKKwkJCQkgICAgICAgImxvd2VyIHBhZ2Ugc2VnbWVudDsgcmMgPSBbJWRdXG4iLAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0gZWxzZQorCQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJfSBlbHNlIGlmIChjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX1ZJRVdfQVNfRU5DUllQVEVEKSB7CisJCQlpZiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUikgeworCQkJCXJjID0gZWNyeXB0ZnNfY29weV91cF9lbmNyeXB0ZWRfd2l0aF9oZWFkZXIoCisJCQkJCXBhZ2UsIGNyeXB0X3N0YXQpOworCQkJCWlmIChyYykgeworCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nICIKKwkJCQkJICAgICAgICJ0byBjb3B5IHRoZSBlbmNyeXB0ZWQgY29udGVudCAiCisJCQkJCSAgICAgICAiZnJvbSB0aGUgbG93ZXIgZmlsZSB3aGlsc3QgIgorCQkJCQkgICAgICAgImluc2VydGluZyB0aGUgbWV0YWRhdGEgZnJvbSAiCisJCQkJCSAgICAgICAidGhlIHhhdHRyIGludG8gdGhlIGhlYWRlcjsgcmMgIgorCQkJCQkgICAgICAgIj0gWyVkXVxuIiwgX19GVU5DVElPTl9fLCByYyk7CisJCQkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQkJfSBlbHNlIHsKKwkJCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXJfcGFnZV9zZWdtZW50KAorCQkJCQlwYWdlLCBwYWdlLT5pbmRleCwgMCwgUEFHRV9DQUNIRV9TSVpFLAorCQkJCQlwYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwkJCQlpZiAocmMpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgcmVhZGluZyAiCisJCQkJCSAgICAgICAicGFnZTsgcmMgPSBbJWRdXG4iLAorCQkJCQkgICAgICAgX19GVU5DVElPTl9fLCByYyk7CisJCQkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQkJfQorCQl9IGVsc2UgeworCQkJcmMgPSBlY3J5cHRmc19kZWNyeXB0X3BhZ2UocGFnZSk7CisJCQlpZiAocmMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBkZWNyeXB0aW5nIHBhZ2UgIgorCQkJCSAgICAgICAiYXQgaW5kZXggWyVsZF07IHJjID0gWyVkXVxuIiwKKwkJCQkgICAgICAgX19GVU5DVElPTl9fLCBwYWdlLT5pbmRleCwgcmMpOworCQkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCQkJCWdvdG8gb3V0OworCQkJfQogCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQl9CiAJfQotCiAJcHJldl9wYWdlX2VuZF9zaXplID0gKChsb2ZmX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCk7Ci0KLQkvKgotCSAqIElmIGNyZWF0aW5nIGEgcGFnZSBvciBtb3JlIG9mIGhvbGVzLCB6ZXJvIHRoZW0gb3V0IHZpYSB0cnVuY2F0ZS4KLQkgKiBOb3RlLCB0aGlzIHdpbGwgaW5jcmVhc2UgaV9zaXplLgotCSAqLworCS8qIElmIGNyZWF0aW5nIGEgcGFnZSBvciBtb3JlIG9mIGhvbGVzLCB6ZXJvIHRoZW0gb3V0IHZpYSB0cnVuY2F0ZS4KKwkgKiBOb3RlLCB0aGlzIHdpbGwgaW5jcmVhc2UgaV9zaXplLiAqLwogCWlmIChwYWdlLT5pbmRleCAhPSAwKSB7CiAJCWlmIChwcmV2X3BhZ2VfZW5kX3NpemUgPiBpX3NpemVfcmVhZChwYWdlLT5tYXBwaW5nLT5ob3N0KSkgewogCQkJcmMgPSBlY3J5cHRmc190cnVuY2F0ZShmaWxlLT5mX3BhdGguZGVudHJ5LAogCQkJCQkgICAgICAgcHJldl9wYWdlX2VuZF9zaXplKTsKIAkJCWlmIChyYykgewotCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb24gYXR0ZW1wdCB0byAiCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igb24gYXR0ZW1wdCB0byAiCiAJCQkJICAgICAgICJ0cnVuY2F0ZSB0byAoaGlnaGVyKSBvZmZzZXQgWyVsbGRdOyIKLQkJCQkgICAgICAgIiByYyA9IFslZF1cbiIsIHByZXZfcGFnZV9lbmRfc2l6ZSwgcmMpOworCQkJCSAgICAgICAiIHJjID0gWyVkXVxuIiwgX19GVU5DVElPTl9fLAorCQkJCSAgICAgICBwcmV2X3BhZ2VfZW5kX3NpemUsIHJjKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCX0KLQkvKgotCSAqIFdyaXRpbmcgdG8gYSBuZXcgcGFnZSwgYW5kIGNyZWF0aW5nIGEgc21hbGwgaG9sZSBmcm9tIHN0YXJ0IG9mIHBhZ2U/Ci0JICogWmVybyBpdCBvdXQuCi0JICovCi0JaWYgKChpX3NpemVfcmVhZChwYWdlLT5tYXBwaW5nLT5ob3N0KSA9PSBwcmV2X3BhZ2VfZW5kX3NpemUpICYmCi0JICAgIChmcm9tICE9IDApKSB7CisJLyogV3JpdGluZyB0byBhIG5ldyBwYWdlLCBhbmQgY3JlYXRpbmcgYSBzbWFsbCBob2xlIGZyb20gc3RhcnQKKwkgKiBvZiBwYWdlPyAgWmVybyBpdCBvdXQuICovCisJaWYgKChpX3NpemVfcmVhZChwYWdlLT5tYXBwaW5nLT5ob3N0KSA9PSBwcmV2X3BhZ2VfZW5kX3NpemUpCisJICAgICYmIChmcm9tICE9IDApKQogCQl6ZXJvX3VzZXIocGFnZSwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKLQl9CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWZzL2Rpci5jIGIvZnMvZWZzL2Rpci5jCmluZGV4IGRmYjVjYjQuLjQ5MzA4YTIgMTAwNjQ0Ci0tLSBhL2ZzL2Vmcy9kaXIuYworKysgYi9mcy9lZnMvZGlyLmMKQEAgLTUsOCArNSw4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvZWZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlICJlZnMuaCIKIAogc3RhdGljIGludCBlZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2Vmcy9lZnMuaCBiL2ZzL2Vmcy9lZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODMwNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZWZzL2Vmcy5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk5IEFsIFNtaXRoCisgKgorICogUG9ydGlvbnMgZGVyaXZlZCBmcm9tIHdvcmsgKGMpIDE5OTUsMTk5NiBDaHJpc3RpYW4gVm9nZWxnc2FuZy4KKyAqIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBJUklYIGhlYWRlciBmaWxlcyAoYykgMTk4OCBTaWxpY29uIEdyYXBoaWNzCisgKi8KKyNpZm5kZWYgX0VGU19FRlNfSF8KKyNkZWZpbmUgX0VGU19FRlNfSF8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBFRlNfVkVSU0lPTiAiMS4wYSIKKworc3RhdGljIGNvbnN0IGNoYXIgY3BydFtdID0gIkVGUzogIkVGU19WRVJTSU9OIiAtIChjKSAxOTk5IEFsIFNtaXRoIDxBbC5TbWl0aEBhZXNjaGkuY2guZXUub3JnPiI7CisKKworLyogMSBibG9jayBpcyA1MTIgYnl0ZXMgKi8KKyNkZWZpbmUJRUZTX0JMT0NLU0laRV9CSVRTCTkKKyNkZWZpbmUJRUZTX0JMT0NLU0laRQkJKDEgPDwgRUZTX0JMT0NLU0laRV9CSVRTKQorCit0eXBlZGVmCWludDMyX3QJCWVmc19ibG9ja190OwordHlwZWRlZiB1aW50MzJfdAllZnNfaW5vX3Q7CisKKyNkZWZpbmUJRUZTX0RJUkVDVEVYVEVOVFMJMTIKKworLyoKKyAqIGxheW91dCBvZiBhbiBleHRlbnQsIGluIG1lbW9yeSBhbmQgb24gZGlzay4gOCBieXRlcyBleGFjdGx5LgorICovCit0eXBlZGVmIHVuaW9uIGV4dGVudF91IHsKKwl1bnNpZ25lZCBjaGFyIHJhd1s4XTsKKwlzdHJ1Y3QgZXh0ZW50X3MgeworCQl1bnNpZ25lZCBpbnQJZXhfbWFnaWM6ODsJLyogbWFnaWMgIyAoemVybykgKi8KKwkJdW5zaWduZWQgaW50CWV4X2JuOjI0OwkvKiBiYXNpYyBibG9jayAqLworCQl1bnNpZ25lZCBpbnQJZXhfbGVuZ3RoOjg7CS8qIG51bWJsb2NrcyBpbiB0aGlzIGV4dGVudCAqLworCQl1bnNpZ25lZCBpbnQJZXhfb2Zmc2V0OjI0OwkvKiBsb2dpY2FsIG9mZnNldCBpbnRvIGZpbGUgKi8KKwl9IGNvb2tlZDsKK30gZWZzX2V4dGVudDsKKwordHlwZWRlZiBzdHJ1Y3QgZWRldnMgeworCV9fYmUxNgkJb2RldjsKKwlfX2JlMzIJCW5kZXY7Cit9IGVmc19kZXZzOworCisvKgorICogZXh0ZW50IGJhc2VkIGZpbGVzeXN0ZW0gaW5vZGUgYXMgaXQgYXBwZWFycyBvbiBkaXNrLiAgVGhlIGVmcyBpbm9kZQorICogaXMgZXhhY3RseSAxMjggYnl0ZXMgbG9uZy4KKyAqLworc3RydWN0CWVmc19kaW5vZGUgeworCV9fYmUxNgkJZGlfbW9kZTsJLyogbW9kZSBhbmQgdHlwZSBvZiBmaWxlICovCisJX19iZTE2CQlkaV9ubGluazsJLyogbnVtYmVyIG9mIGxpbmtzIHRvIGZpbGUgKi8KKwlfX2JlMTYJCWRpX3VpZDsJCS8qIG93bmVyJ3MgdXNlciBpZCAqLworCV9fYmUxNgkJZGlfZ2lkOwkJLyogb3duZXIncyBncm91cCBpZCAqLworCV9fYmUzMgkJZGlfc2l6ZTsJLyogbnVtYmVyIG9mIGJ5dGVzIGluIGZpbGUgKi8KKwlfX2JlMzIJCWRpX2F0aW1lOwkvKiB0aW1lIGxhc3QgYWNjZXNzZWQgKi8KKwlfX2JlMzIJCWRpX210aW1lOwkvKiB0aW1lIGxhc3QgbW9kaWZpZWQgKi8KKwlfX2JlMzIJCWRpX2N0aW1lOwkvKiB0aW1lIGNyZWF0ZWQgKi8KKwlfX2JlMzIJCWRpX2dlbjsJCS8qIGdlbmVyYXRpb24gbnVtYmVyICovCisJX19iZTE2CQlkaV9udW1leHRlbnRzOwkvKiAjIG9mIGV4dGVudHMgKi8KKwl1X2NoYXIJCWRpX3ZlcnNpb247CS8qIHZlcnNpb24gb2YgaW5vZGUgKi8KKwl1X2NoYXIJCWRpX3NwYXJlOwkvKiBzcGFyZSAtIHVzZWQgYnkgQUZTICovCisJdW5pb24gZGlfYWRkciB7CisJCWVmc19leHRlbnQJZGlfZXh0ZW50c1tFRlNfRElSRUNURVhURU5UU107CisJCWVmc19kZXZzCWRpX2RldjsJLyogZGV2aWNlIGZvciBJRkNIUi9JRkJMSyAqLworCX0gZGlfdTsKK307CisKKy8qIGVmcyBpbm9kZSBzdG9yYWdlIGluIG1lbW9yeSAqLworc3RydWN0IGVmc19pbm9kZV9pbmZvIHsKKwlpbnQJCW51bWV4dGVudHM7CisJaW50CQlsYXN0ZXh0ZW50OworCisJZWZzX2V4dGVudAlleHRlbnRzW0VGU19ESVJFQ1RFWFRFTlRTXTsKKwlzdHJ1Y3QgaW5vZGUJdmZzX2lub2RlOworfTsKKworI2luY2x1ZGUgPGxpbnV4L2Vmc19mc19zYi5oPgorCisjZGVmaW5lIEVGU19ESVJCU0laRV9CSVRTCUVGU19CTE9DS1NJWkVfQklUUworI2RlZmluZSBFRlNfRElSQlNJWkUJCSgxIDw8IEVGU19ESVJCU0laRV9CSVRTKQorCitzdHJ1Y3QgZWZzX2RlbnRyeSB7CisJX19iZTMyCQlpbm9kZTsKKwl1bnNpZ25lZCBjaGFyCW5hbWVsZW47CisJY2hhcgkJbmFtZVszXTsKK307CisKKyNkZWZpbmUgRUZTX0RFTlRTSVpFCShzaXplb2Yoc3RydWN0IGVmc19kZW50cnkpIC0gMyArIDEpCisjZGVmaW5lIEVGU19NQVhOQU1FTEVOICAoKDEgPDwgKHNpemVvZihjaGFyKSAqIDgpKSAtIDEpCisKKyNkZWZpbmUgRUZTX0RJUkJMS19IRUFERVJTSVpFCTQKKyNkZWZpbmUgRUZTX0RJUkJMS19NQUdJQwkweGJlZWYJLyogbW9vICovCisKK3N0cnVjdCBlZnNfZGlyIHsKKwlfX2JlMTYJbWFnaWM7CisJdW5zaWduZWQgY2hhcglmaXJzdHVzZWQ7CisJdW5zaWduZWQgY2hhcglzbG90czsKKworCXVuc2lnbmVkIGNoYXIJc3BhY2VbRUZTX0RJUkJTSVpFIC0gRUZTX0RJUkJMS19IRUFERVJTSVpFXTsKK307CisKKyNkZWZpbmUgRUZTX01BWEVOVFMgXAorCSgoRUZTX0RJUkJTSVpFIC0gRUZTX0RJUkJMS19IRUFERVJTSVpFKSAvIFwKKwkgKEVGU19ERU5UU0laRSArIHNpemVvZihjaGFyKSkpCisKKyNkZWZpbmUgRUZTX1NMT1RBVChkaXIsIHNsb3QpIEVGU19SRUFMT0ZGKChkaXIpLT5zcGFjZVtzbG90XSkKKworI2RlZmluZSBFRlNfUkVBTE9GRihvZmZzZXQpICgob2Zmc2V0IDw8IDEpKQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGVmc19pbm9kZV9pbmZvICpJTk9ERV9JTkZPKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGVmc19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlZnNfc2JfaW5mbyAqU1VQRVJfSU5GTyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzYi0+c19mc19pbmZvOworfQorCitzdHJ1Y3Qgc3RhdGZzOworc3RydWN0IGZpZDsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVmc19kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVmc19zeW1saW5rX2FvcHM7CisKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKmVmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBlZnNfYmxvY2tfdCBlZnNfbWFwX2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBlZnNfYmxvY2tfdCk7CitleHRlcm4gaW50IGVmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmVmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICplZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCwKKwkJaW50IGZoX2xlbiwgaW50IGZoX3R5cGUpOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmVmc19maF90b19wYXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLAorCQlpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSk7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqZWZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBpbnQgZWZzX2JtYXAoc3RydWN0IGlub2RlICosIGludCk7CisKKyNlbmRpZiAvKiBfRUZTX0VGU19IXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZWZzL2ZpbGUuYyBiL2ZzL2Vmcy9maWxlLmMKaW5kZXggNWRiMjAxMi4uMWNjYjM2NCAxMDA2NDQKLS0tIGEvZnMvZWZzL2ZpbGUuYworKysgYi9mcy9lZnMvZmlsZS5jCkBAIC03LDcgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vmc19mcy5oPgorI2luY2x1ZGUgImVmcy5oIgogCiBpbnQgZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiAJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCmRpZmYgLS1naXQgYS9mcy9lZnMvaW5vZGUuYyBiL2ZzL2Vmcy9pbm9kZS5jCmluZGV4IDYyN2MzMDIuLmE4ZTc3OTcgMTAwNjQ0Ci0tLSBhL2ZzL2Vmcy9pbm9kZS5jCisrKyBiL2ZzL2Vmcy9pbm9kZS5jCkBAIC03LDExICs3LDExIEBACiAgKiAgICAgICAgICAgICAgYW5kIGZyb20gd29yayAoYykgMTk5OCBNaWtlIFNoYXZlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvZWZzX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZWZzX2ZzX3NiLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgImVmcy5oIgorI2luY2x1ZGUgPGxpbnV4L2Vmc19mc19zYi5oPgogCiBzdGF0aWMgaW50IGVmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0xNDAsNyArMTQwLDcgQEAKIAlicmVsc2UoYmgpOwogICAgCiAjaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiRUZTOiByZWFkX2lub2RlKCk6IGlub2RlICVsdSwgZXh0ZW50cyAlZCwgbW9kZSAlb1xuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiRUZTOiBlZnNfaWdldCgpOiBpbm9kZSAlbHUsIGV4dGVudHMgJWQsIG1vZGUgJW9cbiIsCiAJCWlub2RlLT5pX2lubywgaW4tPm51bWV4dGVudHMsIGlub2RlLT5pX21vZGUpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2Vmcy9uYW1laS5jIGIvZnMvZWZzL25hbWVpLmMKaW5kZXggZTI2NzA0Ny4uM2E0MDRlNyAxMDA2NDQKLS0tIGEvZnMvZWZzL25hbWVpLmMKKysrIGIvZnMvZWZzL25hbWVpLmMKQEAgLTgsOSArOCw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vmc19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KKyNpbmNsdWRlICJlZnMuaCIKIAogCiBzdGF0aWMgZWZzX2lub190IGVmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pIHsKZGlmZiAtLWdpdCBhL2ZzL2Vmcy9zdXBlci5jIGIvZnMvZWZzL3N1cGVyLmMKaW5kZXggMTQwODI0MC4uZDczMzUzMSAxMDA2NDQKLS0tIGEvZnMvZWZzL3N1cGVyLmMKKysrIGIvZnMvZWZzL3N1cGVyLmMKQEAgLTgsMTQgKzgsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9lZnNfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9lZnNfdmguaD4KLSNpbmNsdWRlIDxsaW51eC9lZnNfZnNfc2IuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogCisjaW5jbHVkZSAiZWZzLmgiCisjaW5jbHVkZSA8bGludXgvZWZzX3ZoLmg+CisjaW5jbHVkZSA8bGludXgvZWZzX2ZzX3NiLmg+CisKIHN0YXRpYyBpbnQgZWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpOwogc3RhdGljIGludCBlZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHZvaWQgKmQsIGludCBzaWxlbnQpOwogCmRpZmYgLS1naXQgYS9mcy9lZnMvc3ltbGluay5jIGIvZnMvZWZzL3N5bWxpbmsuYwppbmRleCAxZDMwZDJmLi40MTkxMWVjIDEwMDY0NAotLS0gYS9mcy9lZnMvc3ltbGluay5jCisrKyBiL2ZzL2Vmcy9zeW1saW5rLmMKQEAgLTcsMTAgKzcsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZWZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlICJlZnMuaCIKIAogc3RhdGljIGludCBlZnNfc3ltbGlua19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggYTQ0YjE0Mi4uNTRhMGE1NSAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMTczLDggKzE3MywxNSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmICh3cml0ZSkgewotCQlzdHJ1Y3QgcmxpbWl0ICpybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltOwogCQl1bnNpZ25lZCBsb25nIHNpemUgPSBicHJtLT52bWEtPnZtX2VuZCAtIGJwcm0tPnZtYS0+dm1fc3RhcnQ7CisJCXN0cnVjdCBybGltaXQgKnJsaW07CisKKwkJLyoKKwkJICogV2UndmUgaGlzdG9yaWNhbGx5IHN1cHBvcnRlZCB1cCB0byAzMiBwYWdlcyAoQVJHX01BWCkKKwkJICogb2YgYXJndW1lbnQgc3RyaW5ncyBldmVuIHdpdGggc21hbGwgc3RhY2tzCisJCSAqLworCQlpZiAoc2l6ZSA8PSBBUkdfTUFYKQorCQkJcmV0dXJuIHBhZ2U7CiAKIAkJLyoKIAkJICogTGltaXQgdG8gMS80LXRoIHRoZSBzdGFjayBzaXplIGZvciB0aGUgYXJnditlbnYgc3RyaW5ncy4KQEAgLTE4Myw2ICsxOTAsNyBAQAogCQkgKiAgLSB0aGUgcHJvZ3JhbSB3aWxsIGhhdmUgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdGFjayBsZWZ0CiAJCSAqICAgIHRvIHdvcmsgZnJvbS4KIAkJICovCisJCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW07CiAJCWlmIChzaXplID4gcmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyIC8gNCkgewogCQkJcHV0X3BhZ2UocGFnZSk7CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaWFsbG9jLmMgYi9mcy9leHQyL2lhbGxvYy5jCmluZGV4IDVkZWI4YjcuLjA4ZjY0N2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaWFsbG9jLmMKKysrIGIvZnMvZXh0Mi9pYWxsb2MuYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAgKiBpdCBoYXMgdG9vIGZldyBmcmVlIGlub2RlcyBsZWZ0IChtaW5faW5vZGVzKSBvciAKICAqIGl0IGhhcyB0b28gZmV3IGZyZWUgYmxvY2tzIGxlZnQgKG1pbl9ibG9ja3MpIG9yIAogICogaXQncyBhbHJlYWR5IHJ1bm5pbmcgdG9vIGxhcmdlIGRlYnQgKG1heF9kZWJ0KS4gCi0gKiBQYXJlbnQncyBncm91cCBpcyBwcmVmZXJlZCwgaWYgaXQgZG9lc24ndCBzYXRpc2Z5IHRoZXNlIAorICogUGFyZW50J3MgZ3JvdXAgaXMgcHJlZmVycmVkLCBpZiBpdCBkb2Vzbid0IHNhdGlzZnkgdGhlc2UgCiAgKiBjb25kaXRpb25zIHdlIHNlYXJjaCBjeWNsaWNhbGx5IHRocm91Z2ggdGhlIHJlc3QuIElmIG5vbmUgCiAgKiBvZiB0aGUgZ3JvdXBzIGxvb2sgZ29vZCB3ZSBqdXN0IGxvb2sgZm9yIGEgZ3JvdXAgd2l0aCBtb3JlIAogICogZnJlZSBpbm9kZXMgdGhhbiBhdmVyYWdlIChzdGFydGluZyBhdCBwYXJlbnQncyBncm91cCkuIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jCmluZGV4IGM2MjAwNjguLmI4YTI5OTAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW5vZGUuYworKysgYi9mcy9leHQyL2lub2RlLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogICoJQGlub2RlOiBvd25lcgogICoJQGluZDogZGVzY3JpcHRvciBvZiBpbmRpcmVjdCBibG9jay4KICAqCi0gKglUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByZWZlcmVkIHBsYWNlIGZvciBibG9jayBhbGxvY2F0aW9uLgorICoJVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmVmZXJyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24uCiAgKglJdCBpcyB1c2VkIHdoZW4gaGV1cmlzdGljIGZvciBzZXF1ZW50aWFsIGFsbG9jYXRpb24gZmFpbHMuCiAgKglSdWxlcyBhcmU6CiAgKgkgICsgaWYgdGhlcmUgaXMgYSBibG9jayB0byB0aGUgbGVmdCBvZiBvdXIgcG9zaXRpb24gLSBhbGxvY2F0ZSBuZWFyIGl0LgpAQCAtMjgzLDcgKzI4Myw3IEBACiB9CiAKIC8qKgotICoJZXh0Ml9maW5kX2dvYWwgLSBmaW5kIGEgcHJlZmVyZWQgcGxhY2UgZm9yIGFsbG9jYXRpb24uCisgKglleHQyX2ZpbmRfZ29hbCAtIGZpbmQgYSBwcmVmZXJyZWQgcGxhY2UgZm9yIGFsbG9jYXRpb24uCiAgKglAaW5vZGU6IG93bmVyCiAgKglAYmxvY2s6ICBibG9jayB3ZSB3YW50CiAgKglAcGFydGlhbDogcG9pbnRlciB0byB0aGUgbGFzdCB0cmlwbGUgd2l0aGluIGEgY2hhaW4KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW9jdGwuYyBiL2ZzL2V4dDIvaW9jdGwuYwppbmRleCBiOGVhMTFmLi5kZTg3NmZhIDEwMDY0NAotLS0gYS9mcy9leHQyL2lvY3RsLmMKKysrIGIvZnMvZXh0Mi9pb2N0bC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTIzLDYgKzI0LDcgQEAKIAlzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7CiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IHJzdl93aW5kb3dfc2l6ZTsKKwlpbnQgcmV0OwogCiAJZXh0Ml9kZWJ1ZyAoImNtZCA9ICV1LCBhcmcgPSAlbHVcbiIsIGNtZCwgYXJnKTsKIApAQCAtMzQsMTQgKzM2LDE5IEBACiAJY2FzZSBFWFQyX0lPQ19TRVRGTEFHUzogewogCQl1bnNpZ25lZCBpbnQgb2xkZmxhZ3M7CiAKLQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQlyZXR1cm4gLUVST0ZTOworCQlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAKLQkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQotCQkJcmV0dXJuIC1FQUNDRVM7CisJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkgeworCQkJcmV0ID0gLUVBQ0NFUzsKKwkJCWdvdG8gc2V0ZmxhZ3Nfb3V0OworCQl9CiAKLQkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gc2V0ZmxhZ3Nfb3V0OworCQl9CiAKIAkJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJZmxhZ3MgJj0gfkVYVDJfRElSU1lOQ19GTDsKQEAgLTUwLDcgKzU3LDggQEAKIAkJLyogSXMgaXQgcXVvdGEgZmlsZT8gRG8gbm90IGFsbG93IHVzZXIgdG8gbWVzcyB3aXRoIGl0ICovCiAJCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewogCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQlyZXR1cm4gLUVQRVJNOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBzZXRmbGFnc19vdXQ7CiAJCX0KIAkJb2xkZmxhZ3MgPSBlaS0+aV9mbGFnczsKIApAQCAtNjMsNyArNzEsOCBAQAogCQlpZiAoKGZsYWdzIF4gb2xkZmxhZ3MpICYgKEVYVDJfQVBQRU5EX0ZMIHwgRVhUMl9JTU1VVEFCTEVfRkwpKSB7CiAJCQlpZiAoIWNhcGFibGUoQ0FQX0xJTlVYX0lNTVVUQUJMRSkpIHsKIAkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQlyZXR1cm4gLUVQRVJNOworCQkJCXJldCA9IC1FUEVSTTsKKwkJCQlnb3RvIHNldGZsYWdzX291dDsKIAkJCX0KIAkJfQogCkBAIC03NSwyMCArODQsMjYgQEAKIAkJZXh0Ml9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOwogCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQlyZXR1cm4gMDsKK3NldGZsYWdzX291dDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCXJldHVybiByZXQ7CiAJfQogCWNhc2UgRVhUMl9JT0NfR0VUVkVSU0lPTjoKIAkJcmV0dXJuIHB1dF91c2VyKGlub2RlLT5pX2dlbmVyYXRpb24sIChpbnQgX191c2VyICopIGFyZyk7CiAJY2FzZSBFWFQyX0lPQ19TRVRWRVJTSU9OOgogCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJCXJldHVybiAtRVJPRlM7Ci0JCWlmIChnZXRfdXNlcihpbm9kZS0+aV9nZW5lcmF0aW9uLCAoaW50IF9fdXNlciAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CQotCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQlyZXR1cm4gMDsKKwkJcmV0ID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlpZiAoZ2V0X3VzZXIoaW5vZGUtPmlfZ2VuZXJhdGlvbiwgKGludCBfX3VzZXIgKikgYXJnKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCQl9CisJCW1udF9kcm9wX3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQlyZXR1cm4gcmV0OwogCWNhc2UgRVhUMl9JT0NfR0VUUlNWU1o6CiAJCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgUkVTRVJWQVRJT04pCiAJCQkmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpCkBAIC0xMDIsMTUgKzExNywxNiBAQAogCQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBSRVNFUlZBVElPTikgfHwhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJCXJldHVybiAtRU5PVFRZOwogCi0JCWlmIChJU19SRE9OTFkoaW5vZGUpKQotCQkJcmV0dXJuIC1FUk9GUzsKLQotCQlpZiAoKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCkgJiYgIWNhcGFibGUoQ0FQX0ZPV05FUikpCisJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCiAJCWlmIChnZXRfdXNlcihyc3Zfd2luZG93X3NpemUsIChpbnQgX191c2VyICopYXJnKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCisJCXJldCA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwogCQlpZiAocnN2X3dpbmRvd19zaXplID4gRVhUMl9NQVhfUkVTRVJWRV9CTE9DS1MpCiAJCQlyc3Zfd2luZG93X3NpemUgPSBFWFQyX01BWF9SRVNFUlZFX0JMT0NLUzsKIApAQCAtMTMxLDYgKzE0Nyw3IEBACiAJCQlyc3YtPnJzdl9nb2FsX3NpemUgPSByc3Zfd2luZG93X3NpemU7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZlaS0+dHJ1bmNhdGVfbXV0ZXgpOworCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJcmV0dXJuIDA7CiAJfQogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyLmMgYi9mcy9leHQyL3hhdHRyLmMKaW5kZXggM2U4NjgzZC4uYTk5ZDQ2ZiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi94YXR0ci5jCisrKyBiL2ZzL2V4dDIveGF0dHIuYwpAQCAtODM1LDcgKzgzNSw3IEBACiAJc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpjZTsKIAlpbnQgZXJyb3I7CiAKLQljZSA9IG1iX2NhY2hlX2VudHJ5X2FsbG9jKGV4dDJfeGF0dHJfY2FjaGUpOworCWNlID0gbWJfY2FjaGVfZW50cnlfYWxsb2MoZXh0Ml94YXR0cl9jYWNoZSwgR0ZQX05PRlMpOwogCWlmICghY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWVycm9yID0gbWJfY2FjaGVfZW50cnlfaW5zZXJ0KGNlLCBiaC0+Yl9iZGV2LCBiaC0+Yl9ibG9ja25yLCAmaGFzaCk7CmRpZmYgLS1naXQgYS9mcy9leHQzL2FjbC5jIGIvZnMvZXh0My9hY2wuYwppbmRleCBkMzRlOTk2Li5hNzU0ZDE4IDEwMDY0NAotLS0gYS9mcy9leHQzL2FjbC5jCisrKyBiL2ZzL2V4dDMvYWNsLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiBOVUxMOwotCWFjbCA9IHBvc2l4X2FjbF9hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJYWNsID0gcG9zaXhfYWNsX2FsbG9jKGNvdW50LCBHRlBfTk9GUyk7CiAJaWYgKCFhY2wpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWZvciAobj0wOyBuIDwgY291bnQ7IG4rKykgewpAQCAtOTEsNyArOTEsNyBAQAogCiAJKnNpemUgPSBleHQzX2FjbF9zaXplKGFjbC0+YV9jb3VudCk7CiAJZXh0X2FjbCA9IGttYWxsb2Moc2l6ZW9mKGV4dDNfYWNsX2hlYWRlcikgKyBhY2wtPmFfY291bnQgKgotCQkJc2l6ZW9mKGV4dDNfYWNsX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJCQlzaXplb2YoZXh0M19hY2xfZW50cnkpLCBHRlBfTk9GUyk7CiAJaWYgKCFleHRfYWNsKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlleHRfYWNsLT5hX3ZlcnNpb24gPSBjcHVfdG9fbGUzMihFWFQzX0FDTF9WRVJTSU9OKTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCX0KIAlyZXR2YWwgPSBleHQzX3hhdHRyX2dldChpbm9kZSwgbmFtZV9pbmRleCwgIiIsIE5VTEwsIDApOwogCWlmIChyZXR2YWwgPiAwKSB7Ci0JCXZhbHVlID0ga21hbGxvYyhyZXR2YWwsIEdGUF9LRVJORUwpOworCQl2YWx1ZSA9IGttYWxsb2MocmV0dmFsLCBHRlBfTk9GUyk7CiAJCWlmICghdmFsdWUpCiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJcmV0dmFsID0gZXh0M194YXR0cl9nZXQoaW5vZGUsIG5hbWVfaW5kZXgsICIiLCB2YWx1ZSwgcmV0dmFsKTsKQEAgLTMzNSw3ICszMzUsNyBAQAogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gY2xlYW51cDsKIAkJfQotCQljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9LRVJORUwpOworCQljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9OT0ZTKTsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlpZiAoIWNsb25lKQogCQkJZ290byBjbGVhbnVwOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pYWxsb2MuYyBiL2ZzL2V4dDMvaWFsbG9jLmMKaW5kZXggNGY0MDIwYy4uOTZkZDU1NyAxMDA2NDQKLS0tIGEvZnMvZXh0My9pYWxsb2MuYworKysgYi9mcy9leHQzL2lhbGxvYy5jCkBAIC0yMzksNyArMjM5LDcgQEAKICAqIGl0IGhhcyB0b28gZmV3IGZyZWUgaW5vZGVzIGxlZnQgKG1pbl9pbm9kZXMpIG9yCiAgKiBpdCBoYXMgdG9vIGZldyBmcmVlIGJsb2NrcyBsZWZ0IChtaW5fYmxvY2tzKSBvcgogICogaXQncyBhbHJlYWR5IHJ1bm5pbmcgdG9vIGxhcmdlIGRlYnQgKG1heF9kZWJ0KS4KLSAqIFBhcmVudCdzIGdyb3VwIGlzIHByZWZlcmVkLCBpZiBpdCBkb2Vzbid0IHNhdGlzZnkgdGhlc2UKKyAqIFBhcmVudCdzIGdyb3VwIGlzIHByZWZlcnJlZCwgaWYgaXQgZG9lc24ndCBzYXRpc2Z5IHRoZXNlCiAgKiBjb25kaXRpb25zIHdlIHNlYXJjaCBjeWNsaWNhbGx5IHRocm91Z2ggdGhlIHJlc3QuIElmIG5vbmUKICAqIG9mIHRoZSBncm91cHMgbG9vayBnb29kIHdlIGp1c3QgbG9vayBmb3IgYSBncm91cCB3aXRoIG1vcmUKICAqIGZyZWUgaW5vZGVzIHRoYW4gYXZlcmFnZSAoc3RhcnRpbmcgYXQgcGFyZW50J3MgZ3JvdXApLgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IGViOTU2NzAuLmM2ODM2MDkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTM5Miw3ICszOTIsNyBAQAogICoJQGlub2RlOiBvd25lcgogICoJQGluZDogZGVzY3JpcHRvciBvZiBpbmRpcmVjdCBibG9jay4KICAqCi0gKglUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByZWZlcmVkIHBsYWNlIGZvciBibG9jayBhbGxvY2F0aW9uLgorICoJVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmVmZXJyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24uCiAgKglJdCBpcyB1c2VkIHdoZW4gaGV1cmlzdGljIGZvciBzZXF1ZW50aWFsIGFsbG9jYXRpb24gZmFpbHMuCiAgKglSdWxlcyBhcmU6CiAgKgkgICsgaWYgdGhlcmUgaXMgYSBibG9jayB0byB0aGUgbGVmdCBvZiBvdXIgcG9zaXRpb24gLSBhbGxvY2F0ZSBuZWFyIGl0LgpAQCAtNDM2LDEyICs0MzYsMTIgQEAKIH0KIAogLyoqCi0gKglleHQzX2ZpbmRfZ29hbCAtIGZpbmQgYSBwcmVmZXJlZCBwbGFjZSBmb3IgYWxsb2NhdGlvbi4KKyAqCWV4dDNfZmluZF9nb2FsIC0gZmluZCBhIHByZWZlcnJlZCBwbGFjZSBmb3IgYWxsb2NhdGlvbi4KICAqCUBpbm9kZTogb3duZXIKICAqCUBibG9jazogIGJsb2NrIHdlIHdhbnQKICAqCUBwYXJ0aWFsOiBwb2ludGVyIHRvIHRoZSBsYXN0IHRyaXBsZSB3aXRoaW4gYSBjaGFpbgogICoKLSAqCU5vcm1hbGx5IHRoaXMgZnVuY3Rpb24gZmluZCB0aGUgcHJlZmVyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24sCisgKglOb3JtYWxseSB0aGlzIGZ1bmN0aW9uIGZpbmQgdGhlIHByZWZlcnJlZCBwbGFjZSBmb3IgYmxvY2sgYWxsb2NhdGlvbiwKICAqCXJldHVybnMgaXQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9pb2N0bC5jIGIvZnMvZXh0My9pb2N0bC5jCmluZGV4IDAyM2EwNzAuLjBkMGM3MDEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW9jdGwuYworKysgYi9mcy9leHQzL2lvY3RsLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXh0M19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDNfamJkLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KQEAgLTM4LDE0ICszOSwxOSBAQAogCQl1bnNpZ25lZCBpbnQgb2xkZmxhZ3M7CiAJCXVuc2lnbmVkIGludCBqZmxhZzsKIAotCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJCXJldHVybiAtRVJPRlM7CisJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCi0JCQlyZXR1cm4gLUVBQ0NFUzsKKwkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKSB7CisJCQllcnIgPSAtRUFDQ0VTOworCQkJZ290byBmbGFnc19vdXQ7CisJCX0KIAotCQlpZiAoZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBmbGFnc19vdXQ7CisJCX0KIAogCQlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCQlmbGFncyAmPSB+RVhUM19ESVJTWU5DX0ZMOwpAQCAtNTQsNyArNjAsOCBAQAogCQkvKiBJcyBpdCBxdW90YSBmaWxlPyBEbyBub3QgYWxsb3cgdXNlciB0byBtZXNzIHdpdGggaXQgKi8KIAkJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CiAJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCXJldHVybiAtRVBFUk07CisJCQllcnIgPSAtRVBFUk07CisJCQlnb3RvIGZsYWdzX291dDsKIAkJfQogCQlvbGRmbGFncyA9IGVpLT5pX2ZsYWdzOwogCkBAIC03MCw3ICs3Nyw4IEBACiAJCWlmICgoZmxhZ3MgXiBvbGRmbGFncykgJiAoRVhUM19BUFBFTkRfRkwgfCBFWFQzX0lNTVVUQUJMRV9GTCkpIHsKIAkJCWlmICghY2FwYWJsZShDQVBfTElOVVhfSU1NVVRBQkxFKSkgewogCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJCXJldHVybiAtRVBFUk07CisJCQkJZXJyID0gLUVQRVJNOworCQkJCWdvdG8gZmxhZ3Nfb3V0OwogCQkJfQogCQl9CiAKQEAgLTgxLDcgKzg5LDggQEAKIAkJaWYgKChqZmxhZyBeIG9sZGZsYWdzKSAmIChFWFQzX0pPVVJOQUxfREFUQV9GTCkpIHsKIAkJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkgewogCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJCXJldHVybiAtRVBFUk07CisJCQkJZXJyID0gLUVQRVJNOworCQkJCWdvdG8gZmxhZ3Nfb3V0OwogCQkJfQogCQl9CiAKQEAgLTg5LDcgKzk4LDggQEAKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CisJCQllcnIgPSBQVFJfRVJSKGhhbmRsZSk7CisJCQlnb3RvIGZsYWdzX291dDsKIAkJfQogCQlpZiAoSVNfU1lOQyhpbm9kZSkpCiAJCQloYW5kbGUtPmhfc3luYyA9IDE7CkBAIC0xMTUsNiArMTI1LDggQEAKIAkJaWYgKChqZmxhZyBeIG9sZGZsYWdzKSAmIChFWFQzX0pPVVJOQUxfREFUQV9GTCkpCiAJCQllcnIgPSBleHQzX2NoYW5nZV9pbm9kZV9qb3VybmFsX2ZsYWcoaW5vZGUsIGpmbGFnKTsKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CitmbGFnc19vdXQ6CisJCW1udF9kcm9wX3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCQlyZXR1cm4gZXJyOwogCX0KIAljYXNlIEVYVDNfSU9DX0dFVFZFUlNJT046CkBAIC0xMjksMTQgKzE0MSwxOCBAQAogCiAJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCWlmIChJU19SRE9OTFkoaW5vZGUpKQotCQkJcmV0dXJuIC1FUk9GUzsKLQkJaWYgKGdldF91c2VyKGdlbmVyYXRpb24sIChpbnQgX191c2VyICopIGFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQorCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmIChnZXRfdXNlcihnZW5lcmF0aW9uLCAoaW50IF9fdXNlciAqKSBhcmcpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBzZXR2ZXJzaW9uX291dDsKKwkJfQogCQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIDEpOwotCQlpZiAoSVNfRVJSKGhhbmRsZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOworCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJCWdvdG8gc2V0dmVyc2lvbl9vdXQ7CisJCX0KIAkJZXJyID0gZXh0M19yZXNlcnZlX2lub2RlX3dyaXRlKGhhbmRsZSwgaW5vZGUsICZpbG9jKTsKIAkJaWYgKGVyciA9PSAwKSB7CiAJCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CkBAIC0xNDQsNiArMTYwLDggQEAKIAkJCWVyciA9IGV4dDNfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZpbG9jKTsKIAkJfQogCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOworc2V0dmVyc2lvbl9vdXQ6CisJCW1udF9kcm9wX3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCQlyZXR1cm4gZXJyOwogCX0KICNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCkBAIC0xNzksMTggKzE5NywyNCBAQAogCQl9CiAJCXJldHVybiAtRU5PVFRZOwogCWNhc2UgRVhUM19JT0NfU0VUUlNWU1o6IHsKKwkJaW50IGVycjsKIAogCQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBSRVNFUlZBVElPTikgfHwhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJCXJldHVybiAtRU5PVFRZOwogCi0JCWlmIChJU19SRE9OTFkoaW5vZGUpKQotCQkJcmV0dXJuIC1FUk9GUzsKKwkJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwogCi0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKLQkJCXJldHVybiAtRUFDQ0VTOworCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpIHsKKwkJCWVyciA9IC1FQUNDRVM7CisJCQlnb3RvIHNldHJzdnN6X291dDsKKwkJfQogCi0JCWlmIChnZXRfdXNlcihyc3Zfd2luZG93X3NpemUsIChpbnQgX191c2VyICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoZ2V0X3VzZXIocnN2X3dpbmRvd19zaXplLCAoaW50IF9fdXNlciAqKWFyZykpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIHNldHJzdnN6X291dDsKKwkJfQogCiAJCWlmIChyc3Zfd2luZG93X3NpemUgPiBFWFQzX01BWF9SRVNFUlZFX0JMT0NLUykKIAkJCXJzdl93aW5kb3dfc2l6ZSA9IEVYVDNfTUFYX1JFU0VSVkVfQkxPQ0tTOwpAQCAtMjA4LDcgKzIzMiw5IEBACiAJCQlyc3YtPnJzdl9nb2FsX3NpemUgPSByc3Zfd2luZG93X3NpemU7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZlaS0+dHJ1bmNhdGVfbXV0ZXgpOwotCQlyZXR1cm4gMDsKK3NldHJzdnN6X291dDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCXJldHVybiBlcnI7CiAJfQogCWNhc2UgRVhUM19JT0NfR1JPVVBfRVhURU5EOiB7CiAJCWV4dDNfZnNibGtfdCBuX2Jsb2Nrc19jb3VudDsKQEAgLTIxOCwxNyArMjQ0LDIwIEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQlyZXR1cm4gLUVST0ZTOworCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAKLQkJaWYgKGdldF91c2VyKG5fYmxvY2tzX2NvdW50LCAoX191MzIgX191c2VyICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCisJCWlmIChnZXRfdXNlcihuX2Jsb2Nrc19jb3VudCwgKF9fdTMyIF9fdXNlciAqKWFyZykpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGdyb3VwX2V4dGVuZF9vdXQ7CisJCX0KIAkJZXJyID0gZXh0M19ncm91cF9leHRlbmQoc2IsIEVYVDNfU0Ioc2IpLT5zX2VzLCBuX2Jsb2Nrc19jb3VudCk7CiAJCWpvdXJuYWxfbG9ja191cGRhdGVzKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwogCQlqb3VybmFsX2ZsdXNoKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwogCQlqb3VybmFsX3VubG9ja191cGRhdGVzKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwotCitncm91cF9leHRlbmRfb3V0OgorCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJY2FzZSBFWFQzX0lPQ19HUk9VUF9BREQ6IHsKQEAgLTIzOSwxOCArMjY4LDIyIEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQlyZXR1cm4gLUVST0ZTOworCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnB1dCwgKHN0cnVjdCBleHQzX25ld19ncm91cF9pbnB1dCBfX3VzZXIgKilhcmcsCi0JCQkJc2l6ZW9mKGlucHV0KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlzaXplb2YoaW5wdXQpKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gZ3JvdXBfYWRkX291dDsKKwkJfQogCiAJCWVyciA9IGV4dDNfZ3JvdXBfYWRkKHNiLCAmaW5wdXQpOwogCQlqb3VybmFsX2xvY2tfdXBkYXRlcyhFWFQzX1NCKHNiKS0+c19qb3VybmFsKTsKIAkJam91cm5hbF9mbHVzaChFWFQzX1NCKHNiKS0+c19qb3VybmFsKTsKIAkJam91cm5hbF91bmxvY2tfdXBkYXRlcyhFWFQzX1NCKHNiKS0+c19qb3VybmFsKTsKLQorZ3JvdXBfYWRkX291dDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJCXJldHVybiBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCA5Mzk3ZDc3Li4wZTk3YjZlIDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCQlnb3RvIGV4aXRfZGluZGo7CiAKIAluX2dyb3VwX2Rlc2MgPSBrbWFsbG9jKChnZGJfbnVtICsgMSkgKiBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopLAotCQkJR0ZQX0tFUk5FTCk7CisJCQlHRlBfTk9GUyk7CiAJaWYgKCFuX2dyb3VwX2Rlc2MpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZXh0M193YXJuaW5nIChzYiwgX19GVU5DVElPTl9fLApAQCAtNTY4LDcgKzU2OCw3IEBACiAJaW50IHJlcywgaTsKIAlpbnQgZXJyOwogCi0JcHJpbWFyeSA9IGttYWxsb2MocmVzZXJ2ZWRfZ2RiICogc2l6ZW9mKCpwcmltYXJ5KSwgR0ZQX0tFUk5FTCk7CisJcHJpbWFyeSA9IGttYWxsb2MocmVzZXJ2ZWRfZ2RiICogc2l6ZW9mKCpwcmltYXJ5KSwgR0ZQX05PRlMpOwogCWlmICghcHJpbWFyeSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCAxODc2OWNjLi5hZDUzNjA2IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC04MDYsOCArODA2LDggQEAKIAl7T3B0X3F1b3RhLCAicXVvdGEifSwKIAl7T3B0X3VzcnF1b3RhLCAidXNycXVvdGEifSwKIAl7T3B0X2JhcnJpZXIsICJiYXJyaWVyPSV1In0sCi0Je09wdF9lcnIsIE5VTEx9LAogCXtPcHRfcmVzaXplLCAicmVzaXplIn0sCisJe09wdF9lcnIsIE5VTEx9LAogfTsKIAogc3RhdGljIGV4dDNfZnNibGtfdCBnZXRfc2JfYmxvY2sodm9pZCAqKmRhdGEpCmRpZmYgLS1naXQgYS9mcy9leHQzL3hhdHRyLmMgYi9mcy9leHQzL3hhdHRyLmMKaW5kZXggZmI4OWMyOS4uNDI4NTY1NCAxMDA2NDQKLS0tIGEvZnMvZXh0My94YXR0ci5jCisrKyBiL2ZzL2V4dDMveGF0dHIuYwpAQCAtNzI4LDcgKzcyOCw3IEBACiAJCQkJY2UgPSBOVUxMOwogCQkJfQogCQkJZWFfYmRlYnVnKGJzLT5iaCwgImNsb25pbmciKTsKLQkJCXMtPmJhc2UgPSBrbWFsbG9jKGJzLT5iaC0+Yl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCXMtPmJhc2UgPSBrbWFsbG9jKGJzLT5iaC0+Yl9zaXplLCBHRlBfTk9GUyk7CiAJCQllcnJvciA9IC1FTk9NRU07CiAJCQlpZiAocy0+YmFzZSA9PSBOVUxMKQogCQkJCWdvdG8gY2xlYW51cDsKQEAgLTc0MCw3ICs3NDAsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogQWxsb2NhdGUgYSBidWZmZXIgd2hlcmUgd2UgY29uc3RydWN0IHRoZSBuZXcgYmxvY2suICovCi0JCXMtPmJhc2UgPSBremFsbG9jKHNiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXMtPmJhc2UgPSBremFsbG9jKHNiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX05PRlMpOwogCQkvKiBhc3NlcnQoaGVhZGVyID09IHMtPmJhc2UpICovCiAJCWVycm9yID0gLUVOT01FTTsKIAkJaWYgKHMtPmJhc2UgPT0gTlVMTCkKQEAgLTExMjYsNyArMTEyNiw3IEBACiAJc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpjZTsKIAlpbnQgZXJyb3I7CiAKLQljZSA9IG1iX2NhY2hlX2VudHJ5X2FsbG9jKGV4dDNfeGF0dHJfY2FjaGUpOworCWNlID0gbWJfY2FjaGVfZW50cnlfYWxsb2MoZXh0M194YXR0cl9jYWNoZSwgR0ZQX05PRlMpOwogCWlmICghY2UpIHsKIAkJZWFfYmRlYnVnKGJoLCAib3V0IG9mIG1lbW9yeSIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9mcy9leHQ0L2Rpci5jIGIvZnMvZXh0NC9kaXIuYwppbmRleCAzMzg4OGJiLi4yYzIzYmFkIDEwMDY0NAotLS0gYS9mcy9leHQ0L2Rpci5jCisrKyBiL2ZzL2V4dDQvZGlyLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDRfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JLmZzeW5jCQk9IGV4dDRfc3luY19maWxlLAkvKiBCS0wgaGVsZCAqLworCS5mc3luYwkJPSBleHQ0X3N5bmNfZmlsZSwKIAkucmVsZWFzZQk9IGV4dDRfcmVsZWFzZV9kaXIsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IGJjNzA4MWYuLjlhZTZlNjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0xNDgsNiArMTQ4LDcgQEAKIHsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAJZXh0NF9mc2Jsa190IGJnX3N0YXJ0OworCWV4dDRfZnNibGtfdCBsYXN0X2Jsb2NrOwogCWV4dDRfZ3JwYmxrX3QgY29sb3VyOwogCWludCBkZXB0aDsKIApAQCAtMTY5LDggKzE3MCwxMyBAQAogCS8qIE9LLiB1c2UgaW5vZGUncyBncm91cCAqLwogCWJnX3N0YXJ0ID0gKGVpLT5pX2Jsb2NrX2dyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSkgKwogCQlsZTMyX3RvX2NwdShFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKLQljb2xvdXIgPSAoY3VycmVudC0+cGlkICUgMTYpICoKKwlsYXN0X2Jsb2NrID0gZXh0NF9ibG9ja3NfY291bnQoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXMpIC0gMTsKKworCWlmIChiZ19zdGFydCArIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikgPD0gbGFzdF9ibG9jaykKKwkJY29sb3VyID0gKGN1cnJlbnQtPnBpZCAlIDE2KSAqCiAJCQkoRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSAvIDE2KTsKKwllbHNlCisJCWNvbG91ciA9IChjdXJyZW50LT5waWQgJSAxNikgKiAoKGxhc3RfYmxvY2sgLSBiZ19zdGFydCkgLyAxNik7CiAJcmV0dXJuIGJnX3N0YXJ0ICsgY29sb3VyICsgYmxvY2s7CiB9CiAKQEAgLTM0OSw3ICszNTUsNyBAQAogI2RlZmluZSBleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUscGF0aCkKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBleHQ0X2V4dF9kcm9wX3JlZnMoc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCit2b2lkIGV4dDRfZXh0X2Ryb3BfcmVmcyhzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCkKIHsKIAlpbnQgZGVwdGggPSBwYXRoLT5wX2RlcHRoOwogCWludCBpOwpAQCAtMjE2OCw2ICsyMTc0LDEwIEBACiAJbmV3YmxvY2sgPSBpYmxvY2sgLSBlZV9ibG9jayArIGV4dF9wYmxvY2soZXgpOwogCWV4MiA9IGV4OwogCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJLyogZXgxOiBlZV9ibG9jayB0byBpYmxvY2sgLSAxIDogdW5pbml0aWFsaXplZCAqLwogCWlmIChpYmxvY2sgPiBlZV9ibG9jaykgewogCQlleDEgPSBleDsKQEAgLTIyMDAsMTYgKzIyMTAsMjAgQEAKIAkJbmV3ZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOwogCQlpZiAobmV3ZGVwdGggIT0gZGVwdGgpIHsKIAkJCWRlcHRoID0gbmV3ZGVwdGg7Ci0JCQlwYXRoID0gZXh0NF9leHRfZmluZF9leHRlbnQoaW5vZGUsIGlibG9jaywgTlVMTCk7CisJCQlleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7CisJCQlwYXRoID0gZXh0NF9leHRfZmluZF9leHRlbnQoaW5vZGUsIGlibG9jaywgcGF0aCk7CiAJCQlpZiAoSVNfRVJSKHBhdGgpKSB7CiAJCQkJZXJyID0gUFRSX0VSUihwYXRoKTsKLQkJCQlwYXRoID0gTlVMTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CiAJCQlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OwogCQkJaWYgKGV4MiAhPSAmbmV3ZXgpCiAJCQkJZXgyID0gZXg7CisKKwkJCWVyciA9IGV4dDRfZXh0X2dldF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CiAJCX0KIAkJYWxsb2NhdGVkID0gbWF4X2Jsb2NrczsKIAl9CkBAIC0yMjMwLDkgKzIyNDQsNiBAQAogCWV4Mi0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoYWxsb2NhdGVkKTsKIAlpZiAoZXgyICE9IGV4KQogCQlnb3RvIGluc2VydDsKLQllcnIgPSBleHQ0X2V4dF9nZXRfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CiAJLyoKIAkgKiBOZXcgKGluaXRpYWxpemVkKSBleHRlbnQgc3RhcnRzIGZyb20gdGhlIGZpcnN0IGJsb2NrCiAJICogaW4gdGhlIGN1cnJlbnQgZXh0ZW50LiBpLmUuLCBleDIgPT0gZXgKQEAgLTIyNzYsOSArMjI4NywyMiBAQAogfQogCiAvKgorICogQmxvY2sgYWxsb2NhdGlvbi9tYXAvcHJlYWxsb2NhdGlvbiByb3V0aW5lIGZvciBleHRlbnRzIGJhc2VkIGZpbGVzCisgKgorICoKICAqIE5lZWQgdG8gYmUgY2FsbGVkIHdpdGgKICAqIGRvd25fcmVhZCgmRVhUNF9JKGlub2RlKS0+aV9kYXRhX3NlbSkgaWYgbm90IGFsbG9jYXRpbmcgZmlsZSBzeXN0ZW0gYmxvY2sKICAqIChpZSwgY3JlYXRlIGlzIHplcm8pLiBPdGhlcndpc2UgZG93bl93cml0ZSgmRVhUNF9JKGlub2RlKS0+aV9kYXRhX3NlbSkKKyAqCisgKiByZXR1cm4gPiAwLCBudW1iZXIgb2Ygb2YgYmxvY2tzIGFscmVhZHkgbWFwcGVkL2FsbG9jYXRlZAorICogICAgICAgICAgaWYgY3JlYXRlID09IDAgYW5kIHRoZXNlIGFyZSBwcmUtYWxsb2NhdGVkIGJsb2NrcworICogICAgICAgICAgCWJ1ZmZlciBoZWFkIGlzIHVubWFwcGVkCisgKiAgICAgICAgICBvdGhlcndpc2UgYmxvY2tzIGFyZSBtYXBwZWQKKyAqCisgKiByZXR1cm4gPSAwLCBpZiBwbGFpbiBsb29rIHVwIGZhaWxlZCAoYmxvY2tzIGhhdmUgbm90IGJlZW4gYWxsb2NhdGVkKQorICogICAgICAgICAgYnVmZmVyIGhlYWQgaXMgdW5tYXBwZWQKKyAqCisgKiByZXR1cm4gPCAwLCBlcnJvciBjYXNlLgogICovCiBpbnQgZXh0NF9leHRfZ2V0X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJZXh0NF9sYmxrX3QgaWJsb2NrLApAQCAtMjYyMyw3ICsyNjQ3LDcgQEAKIAkgKiBtb2RpZnkgMSBzdXBlciBibG9jaywgMSBibG9jayBiaXRtYXAgYW5kIDEgZ3JvdXAgZGVzY3JpcHRvci4KIAkgKi8KIAljcmVkaXRzID0gRVhUNF9EQVRBX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYikgKyAzOwotCWRvd25fd3JpdGUoKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogcmV0cnk6CiAJd2hpbGUgKHJldCA+PSAwICYmIHJldCA8IG1heF9ibG9ja3MpIHsKIAkJYmxvY2sgPSBibG9jayArIHJldDsKQEAgLTI2MzQsMTYgKzI2NTgsMTcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJcmV0ID0gZXh0NF9leHRfZ2V0X2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBibG9jaywKKwkJcmV0ID0gZXh0NF9nZXRfYmxvY2tzX3dyYXAoaGFuZGxlLCBpbm9kZSwgYmxvY2ssCiAJCQkJCSAgbWF4X2Jsb2NrcywgJm1hcF9iaCwKIAkJCQkJICBFWFQ0X0NSRUFURV9VTklOSVRJQUxJWkVEX0VYVCwgMCk7Ci0JCVdBUk5fT04ocmV0IDw9IDApOwogCQlpZiAocmV0IDw9IDApIHsKLQkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsICJleHQ0X2ZhbGxvY2F0ZSIsCi0JCQkJICAgICJleHQ0X2V4dF9nZXRfYmxvY2tzIHJldHVybmVkIGVycm9yOiAiCi0JCQkJICAgICJpbm9kZSMlbHUsIGJsb2NrPSV1LCBtYXhfYmxvY2tzPSVsdSIsCisjaWZkZWYgRVhUNEZTX0RFQlVHCisJCQlXQVJOX09OKHJldCA8PSAwKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGV4dDRfZXh0X2dldF9ibG9ja3MgIgorCQkJCSAgICAicmV0dXJuZWQgZXJyb3IgaW5vZGUjJWx1LCBibG9jaz0ldSwgIgorCQkJCSAgICAibWF4X2Jsb2Nrcz0lbHUiLCBfX2Z1bmNfXywKIAkJCQkgICAgaW5vZGUtPmlfaW5vLCBibG9jaywgbWF4X2Jsb2Nrcyk7Ci0JCQlyZXQgPSAtRUlPOworI2VuZGlmCiAJCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CiAJCQlyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJCWJyZWFrOwpAQCAtMjY4MCw3ICsyNzA1LDYgQEAKIAlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKIAkJZ290byByZXRyeTsKIAotCXVwX3dyaXRlKCgmRVhUNF9JKGlub2RlKS0+aV9kYXRhX3NlbSkpOwogCS8qCiAJICogVGltZSB0byB1cGRhdGUgdGhlIGZpbGUgc2l6ZS4KIAkgKiBVcGRhdGUgb25seSB3aGVuIHByZWFsbG9jYXRpb24gd2FzIHJlcXVlc3RlZCBiZXlvbmQgdGhlIGZpbGUgc2l6ZS4KQEAgLTI2OTIsMjEgKzI3MTYsMTggQEAKIAkJCSAqIGlmIG5vIGVycm9yLCB3ZSBhc3N1bWUgcHJlYWxsb2NhdGlvbiBzdWNjZWVkZWQKIAkJCSAqIGNvbXBsZXRlbHkKIAkJCSAqLwotCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pOwogCQkJRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQl9IGVsc2UgaWYgKHJldCA8IDAgJiYgbmJsb2NrcykgewogCQkJLyogSGFuZGxlIHBhcnRpYWwgYWxsb2NhdGlvbiBzY2VuYXJpbyAqLwogCQkJbG9mZl90IG5ld3NpemU7CiAKLQkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJCW5ld3NpemUgID0gKG5ibG9ja3MgPDwgYmxrYml0cykgKyBpX3NpemVfcmVhZChpbm9kZSk7CiAJCQlpX3NpemVfd3JpdGUoaW5vZGUsIEVYVDRfQkxPQ0tfQUxJR04obmV3c2l6ZSwgYmxrYml0cykpOwogCQkJRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQl9CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldCA+IDAgPyByZXQyIDogcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pYWxsb2MuYyBiL2ZzL2V4dDQvaWFsbG9jLmMKaW5kZXggZGExOGE3NC4uNDg2ZTQ2YSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pYWxsb2MuYworKysgYi9mcy9leHQ0L2lhbGxvYy5jCkBAIC0zMDUsNyArMzA1LDcgQEAKICAqIGl0IGhhcyB0b28gZmV3IGZyZWUgaW5vZGVzIGxlZnQgKG1pbl9pbm9kZXMpIG9yCiAgKiBpdCBoYXMgdG9vIGZldyBmcmVlIGJsb2NrcyBsZWZ0IChtaW5fYmxvY2tzKSBvcgogICogaXQncyBhbHJlYWR5IHJ1bm5pbmcgdG9vIGxhcmdlIGRlYnQgKG1heF9kZWJ0KS4KLSAqIFBhcmVudCdzIGdyb3VwIGlzIHByZWZlcmVkLCBpZiBpdCBkb2Vzbid0IHNhdGlzZnkgdGhlc2UKKyAqIFBhcmVudCdzIGdyb3VwIGlzIHByZWZlcnJlZCwgaWYgaXQgZG9lc24ndCBzYXRpc2Z5IHRoZXNlCiAgKiBjb25kaXRpb25zIHdlIHNlYXJjaCBjeWNsaWNhbGx5IHRocm91Z2ggdGhlIHJlc3QuIElmIG5vbmUKICAqIG9mIHRoZSBncm91cHMgbG9vayBnb29kIHdlIGp1c3QgbG9vayBmb3IgYSBncm91cCB3aXRoIG1vcmUKICAqIGZyZWUgaW5vZGVzIHRoYW4gYXZlcmFnZSAoc3RhcnRpbmcgYXQgcGFyZW50J3MgZ3JvdXApLgpAQCAtNzAyLDcgKzcwMiwxMiBAQAogCWVpLT5pX2Rpcl9zdGFydF9sb29rdXAgPSAwOwogCWVpLT5pX2Rpc2tzaXplID0gMDsKIAotCWVpLT5pX2ZsYWdzID0gRVhUNF9JKGRpciktPmlfZmxhZ3MgJiB+RVhUNF9JTkRFWF9GTDsKKwkvKgorCSAqIERvbid0IGluaGVyaXQgZXh0ZW50IGZsYWcgZnJvbSBkaXJlY3RvcnkuIFdlIHNldCBleHRlbnQgZmxhZyBvbgorCSAqIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5IGFuZCBmaWxlIG9ubHkgaWYgLW8gZXh0ZW50IG1vdW50IG9wdGlvbiBpcworCSAqIHNwZWNpZmllZAorCSAqLworCWVpLT5pX2ZsYWdzID0gRVhUNF9JKGRpciktPmlfZmxhZ3MgJiB+KEVYVDRfSU5ERVhfRkx8RVhUNF9FWFRFTlRTX0ZMKTsKIAlpZiAoU19JU0xOSyhtb2RlKSkKIAkJZWktPmlfZmxhZ3MgJj0gfihFWFQ0X0lNTVVUQUJMRV9GTHxFWFQ0X0FQUEVORF9GTCk7CiAJLyogZGlyc3luYyBvbmx5IGFwcGxpZXMgdG8gZGlyZWN0b3JpZXMgKi8KQEAgLTc0NSwxMiArNzUwLDE1IEBACiAJCWdvdG8gZmFpbF9mcmVlX2Ryb3A7CiAJfQogCWlmICh0ZXN0X29wdChzYiwgRVhURU5UUykpIHsKLQkJRVhUNF9JKGlub2RlKS0+aV9mbGFncyB8PSBFWFQ0X0VYVEVOVFNfRkw7Ci0JCWV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTsKLQkJZXJyID0gZXh0NF91cGRhdGVfaW5jb21wYXRfZmVhdHVyZShoYW5kbGUsIHNiLAotCQkJCQkJRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpOwotCQlpZiAoZXJyKQotCQkJZ290byBmYWlsOworCQkvKiBzZXQgZXh0ZW50IGZsYWcgb25seSBmb3IgZGlyZWN0b3J5IGFuZCBmaWxlICovCisJCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNSRUcobW9kZSkpIHsKKwkJCUVYVDRfSShpbm9kZSktPmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworCQkJZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpOworCQkJZXJyID0gZXh0NF91cGRhdGVfaW5jb21wYXRfZmVhdHVyZShoYW5kbGUsIHNiLAorCQkJCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUyk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZmFpbDsKKwkJfQogCX0KIAogCWV4dDRfZGVidWcoImFsbG9jYXRpbmcgaW5vZGUgJWx1XG4iLCBpbm9kZS0+aV9pbm8pOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDdkZDliNTAuLjhmYWIyMzMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYworKysgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTM4Miw3ICszODIsNyBAQAogICoJQGlub2RlOiBvd25lcgogICoJQGluZDogZGVzY3JpcHRvciBvZiBpbmRpcmVjdCBibG9jay4KICAqCi0gKglUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByZWZlcmVkIHBsYWNlIGZvciBibG9jayBhbGxvY2F0aW9uLgorICoJVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmVmZXJyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24uCiAgKglJdCBpcyB1c2VkIHdoZW4gaGV1cmlzdGljIGZvciBzZXF1ZW50aWFsIGFsbG9jYXRpb24gZmFpbHMuCiAgKglSdWxlcyBhcmU6CiAgKgkgICsgaWYgdGhlcmUgaXMgYSBibG9jayB0byB0aGUgbGVmdCBvZiBvdXIgcG9zaXRpb24gLSBhbGxvY2F0ZSBuZWFyIGl0LgpAQCAtNDAzLDYgKzQwMyw3IEBACiAJX19sZTMyICpzdGFydCA9IGluZC0+YmggPyAoX19sZTMyKikgaW5kLT5iaC0+Yl9kYXRhIDogZWktPmlfZGF0YTsKIAlfX2xlMzIgKnA7CiAJZXh0NF9mc2Jsa190IGJnX3N0YXJ0OworCWV4dDRfZnNibGtfdCBsYXN0X2Jsb2NrOwogCWV4dDRfZ3JwYmxrX3QgY29sb3VyOwogCiAJLyogVHJ5IHRvIGZpbmQgcHJldmlvdXMgYmxvY2sgKi8KQEAgLTQyMCwxOCArNDIxLDIzIEBACiAJICogaW50byB0aGUgc2FtZSBjeWxpbmRlciBncm91cCB0aGVuLgogCSAqLwogCWJnX3N0YXJ0ID0gZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhpbm9kZS0+aV9zYiwgZWktPmlfYmxvY2tfZ3JvdXApOwotCWNvbG91ciA9IChjdXJyZW50LT5waWQgJSAxNikgKgorCWxhc3RfYmxvY2sgPSBleHQ0X2Jsb2Nrc19jb3VudChFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcykgLSAxOworCisJaWYgKGJnX3N0YXJ0ICsgRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSA8PSBsYXN0X2Jsb2NrKQorCQljb2xvdXIgPSAoY3VycmVudC0+cGlkICUgMTYpICoKIAkJCShFWFQ0X0JMT0NLU19QRVJfR1JPVVAoaW5vZGUtPmlfc2IpIC8gMTYpOworCWVsc2UKKwkJY29sb3VyID0gKGN1cnJlbnQtPnBpZCAlIDE2KSAqICgobGFzdF9ibG9jayAtIGJnX3N0YXJ0KSAvIDE2KTsKIAlyZXR1cm4gYmdfc3RhcnQgKyBjb2xvdXI7CiB9CiAKIC8qKgotICoJZXh0NF9maW5kX2dvYWwgLSBmaW5kIGEgcHJlZmVyZWQgcGxhY2UgZm9yIGFsbG9jYXRpb24uCisgKglleHQ0X2ZpbmRfZ29hbCAtIGZpbmQgYSBwcmVmZXJyZWQgcGxhY2UgZm9yIGFsbG9jYXRpb24uCiAgKglAaW5vZGU6IG93bmVyCiAgKglAYmxvY2s6ICBibG9jayB3ZSB3YW50CiAgKglAcGFydGlhbDogcG9pbnRlciB0byB0aGUgbGFzdCB0cmlwbGUgd2l0aGluIGEgY2hhaW4KICAqCi0gKglOb3JtYWxseSB0aGlzIGZ1bmN0aW9uIGZpbmQgdGhlIHByZWZlcmVkIHBsYWNlIGZvciBibG9jayBhbGxvY2F0aW9uLAorICoJTm9ybWFsbHkgdGhpcyBmdW5jdGlvbiBmaW5kIHRoZSBwcmVmZXJyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24sCiAgKglyZXR1cm5zIGl0LgogICovCiBzdGF0aWMgZXh0NF9mc2Jsa190IGV4dDRfZmluZF9nb2FsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGJsb2NrLApAQCAtNzY4LDcgKzc3NCw2IEBACiAgKgogICogYGhhbmRsZScgY2FuIGJlIE5VTEwgaWYgY3JlYXRlID09IDAuCiAgKgotICogVGhlIEJLTCBtYXkgbm90IGJlIGhlbGQgb24gZW50cnkgaGVyZS4gIEJlIHN1cmUgdG8gdGFrZSBpdCBlYXJseS4KICAqIHJldHVybiA+IDAsICMgb2YgYmxvY2tzIG1hcHBlZCBvciBhbGxvY2F0ZWQuCiAgKiByZXR1cm4gPSAwLCBpZiBwbGFpbiBsb29rdXAgZmFpbGVkLgogICogcmV0dXJuIDwgMCwgZXJyb3IgY2FzZS4KQEAgLTkwMywxMSArOTA4LDM4IEBACiAgKi8KICNkZWZpbmUgRElPX0NSRURJVFMgMjUKIAorCisvKgorICoKKyAqCisgKiBleHQ0X2V4dDQgZ2V0X2Jsb2NrKCkgd3JhcHBlciBmdW5jdGlvbgorICogSXQgd2lsbCBkbyBhIGxvb2sgdXAgZmlyc3QsIGFuZCByZXR1cm5zIGlmIHRoZSBibG9ja3MgYWxyZWFkeSBtYXBwZWQuCisgKiBPdGhlcndpc2UgaXQgdGFrZXMgdGhlIHdyaXRlIGxvY2sgb2YgdGhlIGlfZGF0YV9zZW0gYW5kIGFsbG9jYXRlIGJsb2NrcworICogYW5kIHN0b3JlIHRoZSBhbGxvY2F0ZWQgYmxvY2tzIGluIHRoZSByZXN1bHQgYnVmZmVyIGhlYWQgYW5kIG1hcmsgaXQKKyAqIG1hcHBlZC4KKyAqCisgKiBJZiBmaWxlIHR5cGUgaXMgZXh0ZW50cyBiYXNlZCwgaXQgd2lsbCBjYWxsIGV4dDRfZXh0X2dldF9ibG9ja3MoKSwKKyAqIE90aGVyd2lzZSwgY2FsbCB3aXRoIGV4dDRfZ2V0X2Jsb2Nrc19oYW5kbGUoKSB0byBoYW5kbGUgaW5kaXJlY3QgbWFwcGluZworICogYmFzZWQgZmlsZXMKKyAqCisgKiBPbiBzdWNjZXNzLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxvY2tzIGJlaW5nIG1hcHBlZCBvciBhbGxvY2F0ZS4KKyAqIGlmIGNyZWF0ZT09MCBhbmQgdGhlIGJsb2NrcyBhcmUgcHJlLWFsbG9jYXRlZCBhbmQgdW5pbml0aWFsaXplZCBibG9jaywKKyAqIHRoZSByZXN1bHQgYnVmZmVyIGhlYWQgaXMgdW5tYXBwZWQuIElmIHRoZSBjcmVhdGUgPT0xLCBpdCB3aWxsIG1ha2Ugc3VyZQorICogdGhlIGJ1ZmZlciBoZWFkIGlzIG1hcHBlZC4KKyAqCisgKiBJdCByZXR1cm5zIDAgaWYgcGxhaW4gbG9vayB1cCBmYWlsZWQgKGJsb2NrcyBoYXZlIG5vdCBiZWVuIGFsbG9jYXRlZCksIGluCisgKiB0aGF0IGNhc2VtLCBidWZmZXIgaGVhZCBpcyB1bm1hcHBlZAorICoKKyAqIEl0IHJldHVybnMgdGhlIGVycm9yIGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCiBpbnQgZXh0NF9nZXRfYmxvY2tzX3dyYXAoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCQl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3MsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAJCQlpbnQgY3JlYXRlLCBpbnQgZXh0ZW5kX2Rpc2tzaXplKQogewogCWludCByZXR2YWw7CisKKwljbGVhcl9idWZmZXJfbWFwcGVkKGJoKTsKKwogCS8qCiAJICogVHJ5IHRvIHNlZSBpZiB3ZSBjYW4gZ2V0ICB0aGUgYmxvY2sgd2l0aG91dCByZXF1ZXN0aW5nCiAJICogZm9yIG5ldyBmaWxlIHN5c3RlbSBibG9jay4KQEAgLTkyMSwxMiArOTUzLDI2IEBACiAJCQkJaW5vZGUsIGJsb2NrLCBtYXhfYmxvY2tzLCBiaCwgMCwgMCk7CiAJfQogCXVwX3JlYWQoKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKSk7Ci0JaWYgKCFjcmVhdGUgfHwgKHJldHZhbCA+IDApKQorCisJLyogSWYgaXQgaXMgb25seSBhIGJsb2NrKHMpIGxvb2sgdXAgKi8KKwlpZiAoIWNyZWF0ZSkKIAkJcmV0dXJuIHJldHZhbDsKIAogCS8qCi0JICogV2UgbmVlZCB0byBhbGxvY2F0ZSBuZXcgYmxvY2tzIHdoaWNoIHdpbGwgcmVzdWx0Ci0JICogaW4gaV9kYXRhIHVwZGF0ZQorCSAqIFJldHVybnMgaWYgdGhlIGJsb2NrcyBoYXZlIGFscmVhZHkgYWxsb2NhdGVkCisJICoKKwkgKiBOb3RlIHRoYXQgaWYgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWQKKwkgKiBleHQ0X2V4dF9nZXRfYmxvY2soKSByZXR1cm5zIHRoIGNyZWF0ZSA9IDAKKwkgKiB3aXRoIGJ1ZmZlciBoZWFkIHVubWFwcGVkLgorCSAqLworCWlmIChyZXR2YWwgPiAwICYmIGJ1ZmZlcl9tYXBwZWQoYmgpKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyoKKwkgKiBOZXcgYmxvY2tzIGFsbG9jYXRlIGFuZC9vciB3cml0aW5nIHRvIHVuaW5pdGlhbGl6ZWQgZXh0ZW50CisJICogd2lsbCBwb3NzaWJseSByZXN1bHQgaW4gdXBkYXRpbmcgaV9kYXRhLCBzbyB3ZSB0YWtlCisJICogdGhlIHdyaXRlIGxvY2sgb2YgaV9kYXRhX3NlbSwgYW5kIGNhbGwgZ2V0X2Jsb2NrcygpCisJICogd2l0aCBjcmVhdGUgPT0gMSBmbGFnLgogCSAqLwogCWRvd25fd3JpdGUoKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKSk7CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW9jdGwuYyBiL2ZzL2V4dDQvaW9jdGwuYwppbmRleCAyZWQ3YzM3Li4yNWIxM2VkIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lvY3RsLmMKKysrIGIvZnMvZXh0NC9pb2N0bC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBpbnQgZXh0NF9pb2N0bCAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTM4LDI0ICszOSwyNSBAQAogCQl1bnNpZ25lZCBpbnQgb2xkZmxhZ3M7CiAJCXVuc2lnbmVkIGludCBqZmxhZzsKIAotCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJCXJldHVybiAtRVJPRlM7Ci0KIAkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAKIAkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKKwkJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCiAJCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCWZsYWdzICY9IH5FWFQ0X0RJUlNZTkNfRkw7CiAKKwkJZXJyID0gLUVQRVJNOwogCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCS8qIElzIGl0IHF1b3RhIGZpbGU/IERvIG5vdCBhbGxvdyB1c2VyIHRvIG1lc3Mgd2l0aCBpdCAqLwotCQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQorCQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCQlnb3RvIGZsYWdzX291dDsKKwogCQlvbGRmbGFncyA9IGVpLT5pX2ZsYWdzOwogCiAJCS8qIFRoZSBKT1VSTkFMX0RBVEEgZmxhZyBpcyBtb2RpZmlhYmxlIG9ubHkgYnkgcm9vdCAqLwpAQCAtNjgsMTAgKzcwLDggQEAKIAkJICogVGhpcyB0ZXN0IGxvb2tzIG5pY2VyLiBUaGFua3MgdG8gUGF1bGluZSBNaWRkZWxpbmsKIAkJICovCiAJCWlmICgoZmxhZ3MgXiBvbGRmbGFncykgJiAoRVhUNF9BUFBFTkRfRkwgfCBFWFQ0X0lNTVVUQUJMRV9GTCkpIHsKLQkJCWlmICghY2FwYWJsZShDQVBfTElOVVhfSU1NVVRBQkxFKSkgewotCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9CisJCQlpZiAoIWNhcGFibGUoQ0FQX0xJTlVYX0lNTVVUQUJMRSkpCisJCQkJZ290byBmbGFnc19vdXQ7CiAJCX0KIAogCQkvKgpAQCAtNzksMTcgKzc5LDE0IEBACiAJCSAqIHRoZSByZWxldmFudCBjYXBhYmlsaXR5LgogCQkgKi8KIAkJaWYgKChqZmxhZyBeIG9sZGZsYWdzKSAmIChFWFQ0X0pPVVJOQUxfREFUQV9GTCkpIHsKLQkJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkgewotCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9CisJCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCisJCQkJZ290byBmbGFnc19vdXQ7CiAJCX0KIAotCiAJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMSk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOworCQkJZXJyID0gUFRSX0VSUihoYW5kbGUpOworCQkJZ290byBmbGFnc19vdXQ7CiAJCX0KIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJaGFuZGxlLT5oX3N5bmMgPSAxOwpAQCAtMTA3LDE0ICsxMDQsMTQgQEAKIAkJZXJyID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmlsb2MpOwogZmxhZ3NfZXJyOgogCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCQlpZiAoZXJyKSB7Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKGVycikKKwkJCWdvdG8gZmxhZ3Nfb3V0OwogCiAJCWlmICgoamZsYWcgXiBvbGRmbGFncykgJiAoRVhUNF9KT1VSTkFMX0RBVEFfRkwpKQogCQkJZXJyID0gZXh0NF9jaGFuZ2VfaW5vZGVfam91cm5hbF9mbGFnKGlub2RlLCBqZmxhZyk7CitmbGFnc19vdXQ6CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJY2FzZSBFWFQ0X0lPQ19HRVRWRVJTSU9OOgpAQCAtMTI5LDE0ICsxMjYsMjAgQEAKIAogCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJCXJldHVybiAtRVJPRlM7Ci0JCWlmIChnZXRfdXNlcihnZW5lcmF0aW9uLCAoaW50IF9fdXNlciAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoZ2V0X3VzZXIoZ2VuZXJhdGlvbiwgKGludCBfX3VzZXIgKikgYXJnKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gc2V0dmVyc2lvbl9vdXQ7CisJCX0KIAogCQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIDEpOwotCQlpZiAoSVNfRVJSKGhhbmRsZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOworCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJCWdvdG8gc2V0dmVyc2lvbl9vdXQ7CisJCX0KIAkJZXJyID0gZXh0NF9yZXNlcnZlX2lub2RlX3dyaXRlKGhhbmRsZSwgaW5vZGUsICZpbG9jKTsKIAkJaWYgKGVyciA9PSAwKSB7CiAJCQlpbm9kZS0+aV9jdGltZSA9IGV4dDRfY3VycmVudF90aW1lKGlub2RlKTsKQEAgLTE0NCw2ICsxNDcsOCBAQAogCQkJZXJyID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmlsb2MpOwogCQl9CiAJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CitzZXR2ZXJzaW9uX291dDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJCXJldHVybiBlcnI7CiAJfQogI2lmZGVmIENPTkZJR19KQkQyX0RFQlVHCkBAIC0xNzksMTkgKzE4NCwyMSBAQAogCQl9CiAJCXJldHVybiAtRU5PVFRZOwogCWNhc2UgRVhUNF9JT0NfU0VUUlNWU1o6IHsKKwkJaW50IGVycjsKIAogCQlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBSRVNFUlZBVElPTikgfHwhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJCXJldHVybiAtRU5PVFRZOwogCi0JCWlmIChJU19SRE9OTFkoaW5vZGUpKQotCQkJcmV0dXJuIC1FUk9GUzsKLQogCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAogCQlpZiAoZ2V0X3VzZXIocnN2X3dpbmRvd19zaXplLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAorCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJaWYgKHJzdl93aW5kb3dfc2l6ZSA+IEVYVDRfTUFYX1JFU0VSVkVfQkxPQ0tTKQogCQkJcnN2X3dpbmRvd19zaXplID0gRVhUNF9NQVhfUkVTRVJWRV9CTE9DS1M7CiAKQEAgLTIwOCw2ICsyMTUsNyBAQAogCQkJcnN2LT5yc3ZfZ29hbF9zaXplID0gcnN2X3dpbmRvd19zaXplOwogCQl9CiAJCXVwX3dyaXRlKCZlaS0+aV9kYXRhX3NlbSk7CisJCW1udF9kcm9wX3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBFWFQ0X0lPQ19HUk9VUF9FWFRFTkQ6IHsKQEAgLTIxOCwxNiArMjI2LDE4IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQlyZXR1cm4gLUVST0ZTOwotCiAJCWlmIChnZXRfdXNlcihuX2Jsb2Nrc19jb3VudCwgKF9fdTMyIF9fdXNlciAqKWFyZykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAorCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJZXJyID0gZXh0NF9ncm91cF9leHRlbmQoc2IsIEVYVDRfU0Ioc2IpLT5zX2VzLCBuX2Jsb2Nrc19jb3VudCk7CiAJCWpiZDJfam91cm5hbF9sb2NrX3VwZGF0ZXMoRVhUNF9TQihzYiktPnNfam91cm5hbCk7CiAJCWpiZDJfam91cm5hbF9mbHVzaChFWFQ0X1NCKHNiKS0+c19qb3VybmFsKTsKIAkJamJkMl9qb3VybmFsX3VubG9ja191cGRhdGVzKEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwpOworCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTIzOSwxNyArMjQ5LDE5IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQlyZXR1cm4gLUVST0ZTOwotCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5wdXQsIChzdHJ1Y3QgZXh0NF9uZXdfZ3JvdXBfaW5wdXQgX191c2VyICopYXJnLAogCQkJCXNpemVvZihpbnB1dCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKKwkJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCiAJCWVyciA9IGV4dDRfZ3JvdXBfYWRkKHNiLCAmaW5wdXQpOwogCQlqYmQyX2pvdXJuYWxfbG9ja191cGRhdGVzKEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwpOwogCQlqYmQyX2pvdXJuYWxfZmx1c2goRVhUNF9TQihzYiktPnNfam91cm5hbCk7CiAJCWpiZDJfam91cm5hbF91bmxvY2tfdXBkYXRlcyhFWFQ0X1NCKHNiKS0+c19qb3VybmFsKTsKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGRkMGZjZmMuLmVmOTdmMTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC02MjcsMjEgKzYyNywxOSBAQAogCXJldHVybiBibG9jazsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkICptYl9jb3JyZWN0X2FkZHJfYW5kX2JpdChpbnQgKmJpdCwgdm9pZCAqYWRkcikKK3sKICNpZiBCSVRTX1BFUl9MT05HID09IDY0Ci0jZGVmaW5lIG1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KGJpdCwgYWRkcikJCVwKLXsJCQkJCQkJXAotCWJpdCArPSAoKHVuc2lnbmVkIGxvbmcpIGFkZHIgJiA3VUwpIDw8IDM7CVwKLQlhZGRyID0gKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSBhZGRyICYgfjdVTCk7CVwKLX0KKwkqYml0ICs9ICgodW5zaWduZWQgbG9uZykgYWRkciAmIDdVTCkgPDwgMzsKKwlhZGRyID0gKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSBhZGRyICYgfjdVTCk7CiAjZWxpZiBCSVRTX1BFUl9MT05HID09IDMyCi0jZGVmaW5lIG1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KGJpdCwgYWRkcikJCVwKLXsJCQkJCQkJXAotCWJpdCArPSAoKHVuc2lnbmVkIGxvbmcpIGFkZHIgJiAzVUwpIDw8IDM7CVwKLQlhZGRyID0gKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSBhZGRyICYgfjNVTCk7CVwKLX0KKwkqYml0ICs9ICgodW5zaWduZWQgbG9uZykgYWRkciAmIDNVTCkgPDwgMzsKKwlhZGRyID0gKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSBhZGRyICYgfjNVTCk7CiAjZWxzZQogI2Vycm9yICJob3cgbWFueSBiaXRzIHlvdSBhcmU/ISIKICNlbmRpZgorCXJldHVybiBhZGRyOworfQogCiBzdGF0aWMgaW5saW5lIGludCBtYl90ZXN0X2JpdChpbnQgYml0LCB2b2lkICphZGRyKQogewpAQCAtNjQ5LDM0ICs2NDcsNTQgQEAKIAkgKiBleHQ0X3Rlc3RfYml0IG9uIGFyY2hpdGVjdHVyZSBsaWtlIHBvd2VycGMKIAkgKiBuZWVkcyB1bnNpZ25lZCBsb25nIGFsaWduZWQgYWRkcmVzcwogCSAqLwotCW1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KGJpdCwgYWRkcik7CisJYWRkciA9IG1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KCZiaXQsIGFkZHIpOwogCXJldHVybiBleHQ0X3Rlc3RfYml0KGJpdCwgYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYl9zZXRfYml0KGludCBiaXQsIHZvaWQgKmFkZHIpCiB7Ci0JbWJfY29ycmVjdF9hZGRyX2FuZF9iaXQoYml0LCBhZGRyKTsKKwlhZGRyID0gbWJfY29ycmVjdF9hZGRyX2FuZF9iaXQoJmJpdCwgYWRkcik7CiAJZXh0NF9zZXRfYml0KGJpdCwgYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYl9zZXRfYml0X2F0b21pYyhzcGlubG9ja190ICpsb2NrLCBpbnQgYml0LCB2b2lkICphZGRyKQogewotCW1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KGJpdCwgYWRkcik7CisJYWRkciA9IG1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KCZiaXQsIGFkZHIpOwogCWV4dDRfc2V0X2JpdF9hdG9taWMobG9jaywgYml0LCBhZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1iX2NsZWFyX2JpdChpbnQgYml0LCB2b2lkICphZGRyKQogewotCW1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KGJpdCwgYWRkcik7CisJYWRkciA9IG1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KCZiaXQsIGFkZHIpOwogCWV4dDRfY2xlYXJfYml0KGJpdCwgYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYl9jbGVhcl9iaXRfYXRvbWljKHNwaW5sb2NrX3QgKmxvY2ssIGludCBiaXQsIHZvaWQgKmFkZHIpCiB7Ci0JbWJfY29ycmVjdF9hZGRyX2FuZF9iaXQoYml0LCBhZGRyKTsKKwlhZGRyID0gbWJfY29ycmVjdF9hZGRyX2FuZF9iaXQoJmJpdCwgYWRkcik7CiAJZXh0NF9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIGJpdCwgYWRkcik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG1iX2ZpbmRfbmV4dF96ZXJvX2JpdCh2b2lkICphZGRyLCBpbnQgbWF4LCBpbnQgc3RhcnQpCit7CisJaW50IGZpeCA9IDA7CisJYWRkciA9IG1iX2NvcnJlY3RfYWRkcl9hbmRfYml0KCZmaXgsIGFkZHIpOworCW1heCArPSBmaXg7CisJc3RhcnQgKz0gZml4OworCisJcmV0dXJuIGV4dDRfZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIG1heCwgc3RhcnQpIC0gZml4OworfQorCitzdGF0aWMgaW5saW5lIGludCBtYl9maW5kX25leHRfYml0KHZvaWQgKmFkZHIsIGludCBtYXgsIGludCBzdGFydCkKK3sKKwlpbnQgZml4ID0gMDsKKwlhZGRyID0gbWJfY29ycmVjdF9hZGRyX2FuZF9iaXQoJmZpeCwgYWRkcik7CisJbWF4ICs9IGZpeDsKKwlzdGFydCArPSBmaXg7CisKKwlyZXR1cm4gZXh0NF9maW5kX25leHRfYml0KGFkZHIsIG1heCwgc3RhcnQpIC0gZml4OworfQorCiBzdGF0aWMgdm9pZCAqbWJfZmluZF9idWRkeShzdHJ1Y3QgZXh0NF9idWRkeSAqZTRiLCBpbnQgb3JkZXIsIGludCAqbWF4KQogewogCWNoYXIgKmJiOwpAQCAtOTA2LDcgKzkyNCw3IEBACiAJdW5zaWduZWQgc2hvcnQgY2h1bms7CiAJdW5zaWduZWQgc2hvcnQgYm9yZGVyOwogCi0JQlVHX09OKGxlbiA+PSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKTsKKwlCVUdfT04obGVuID4gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSk7CiAKIAlib3JkZXIgPSAyIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCkBAIC05NDYsMTIgKzk2NCwxMiBAQAogCiAJLyogaW5pdGlhbGl6ZSBidWRkeSBmcm9tIGJpdG1hcCB3aGljaCBpcyBhZ2dyZWdhdGlvbgogCSAqIG9mIG9uLWRpc2sgYml0bWFwIGFuZCBwcmVhbGxvY2F0aW9ucyAqLwotCWkgPSBleHQ0X2ZpbmRfbmV4dF96ZXJvX2JpdChiaXRtYXAsIG1heCwgMCk7CisJaSA9IG1iX2ZpbmRfbmV4dF96ZXJvX2JpdChiaXRtYXAsIG1heCwgMCk7CiAJZ3JwLT5iYl9maXJzdF9mcmVlID0gaTsKIAl3aGlsZSAoaSA8IG1heCkgewogCQlmcmFnbWVudHMrKzsKIAkJZmlyc3QgPSBpOwotCQlpID0gZXh0NF9maW5kX25leHRfYml0KGJpdG1hcCwgbWF4LCBpKTsKKwkJaSA9IG1iX2ZpbmRfbmV4dF9iaXQoYml0bWFwLCBtYXgsIGkpOwogCQlsZW4gPSBpIC0gZmlyc3Q7CiAJCWZyZWUgKz0gbGVuOwogCQlpZiAobGVuID4gMSkKQEAgLTk1OSw3ICs5NzcsNyBAQAogCQllbHNlCiAJCQlncnAtPmJiX2NvdW50ZXJzWzBdKys7CiAJCWlmIChpIDwgbWF4KQotCQkJaSA9IGV4dDRfZmluZF9uZXh0X3plcm9fYml0KGJpdG1hcCwgbWF4LCBpKTsKKwkJCWkgPSBtYl9maW5kX25leHRfemVyb19iaXQoYml0bWFwLCBtYXgsIGkpOwogCX0KIAlncnAtPmJiX2ZyYWdtZW50cyA9IGZyYWdtZW50czsKIApAQCAtOTY3LDYgKzk4NSwxMCBAQAogCQlleHQ0X2Vycm9yKHNiLCBfX0ZVTkNUSU9OX18sCiAJCQkiRVhUNC1mczogZ3JvdXAgJWx1OiAldSBibG9ja3MgaW4gYml0bWFwLCAldSBpbiBnZFxuIiwKIAkJCWdyb3VwLCBmcmVlLCBncnAtPmJiX2ZyZWUpOworCQkvKgorCQkgKiBJZiB3ZSBpbnRlbnQgdG8gY29udGludWUsIHdlIGNvbnNpZGVyIGdyb3VwIGRlc2NyaXRvcgorCQkgKiBjb3JydXB0IGFuZCB1cGRhdGUgYmJfZnJlZSB1c2luZyBiaXRtYXAgdmFsdWUKKwkJICovCiAJCWdycC0+YmJfZnJlZSA9IGZyZWU7CiAJfQogCkBAIC0xNzc4LDcgKzE4MDAsNyBAQAogCQlidWRkeSA9IG1iX2ZpbmRfYnVkZHkoZTRiLCBpLCAmbWF4KTsKIAkJQlVHX09OKGJ1ZGR5ID09IE5VTEwpOwogCi0JCWsgPSBleHQ0X2ZpbmRfbmV4dF96ZXJvX2JpdChidWRkeSwgbWF4LCAwKTsKKwkJayA9IG1iX2ZpbmRfbmV4dF96ZXJvX2JpdChidWRkeSwgbWF4LCAwKTsKIAkJQlVHX09OKGsgPj0gbWF4KTsKIAogCQlhYy0+YWNfZm91bmQrKzsKQEAgLTE4MTgsMTEgKzE4NDAsMTEgQEAKIAlpID0gZTRiLT5iZF9pbmZvLT5iYl9maXJzdF9mcmVlOwogCiAJd2hpbGUgKGZyZWUgJiYgYWMtPmFjX3N0YXR1cyA9PSBBQ19TVEFUVVNfQ09OVElOVUUpIHsKLQkJaSA9IGV4dDRfZmluZF9uZXh0X3plcm9fYml0KGJpdG1hcCwKKwkJaSA9IG1iX2ZpbmRfbmV4dF96ZXJvX2JpdChiaXRtYXAsCiAJCQkJCQlFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpLCBpKTsKIAkJaWYgKGkgPj0gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkgewogCQkJLyoKLQkJCSAqIElGIHdlIGNvcnJ1cHQgdGhlIGJpdG1hcCAgd2Ugd29uJ3QgZmluZCBhbnkKKwkJCSAqIElGIHdlIGhhdmUgY29ycnVwdCBiaXRtYXAsIHdlIHdvbid0IGZpbmQgYW55CiAJCQkgKiBmcmVlIGJsb2NrcyBldmVuIHRob3VnaCBncm91cCBpbmZvIHNheXMgd2UKIAkJCSAqIHdlIGhhdmUgZnJlZSBibG9ja3MKIAkJCSAqLwpAQCAtMTgzOCw2ICsxODYwLDEyIEBACiAJCQlleHQ0X2Vycm9yKHNiLCBfX0ZVTkNUSU9OX18sICIlZCBmcmVlIGJsb2NrcyBhcyBwZXIgIgogCQkJCQkiZ3JvdXAgaW5mby4gQnV0IGdvdCAlZCBibG9ja3NcbiIsCiAJCQkJCWZyZWUsIGV4LmZlX2xlbik7CisJCQkvKgorCQkJICogVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBkaWZmZXJzLiBUaGlzIG1vc3RseQorCQkJICogaW5kaWNhdGUgdGhhdCB0aGUgYml0bWFwIGlzIGNvcnJ1cHQuIFNvIGV4aXQKKwkJCSAqIHdpdGhvdXQgY2xhaW1pbmcgdGhlIHNwYWNlLgorCQkJICovCisJCQlicmVhazsKIAkJfQogCiAJCWV4dDRfbWJfbWVhc3VyZV9leHRlbnQoYWMsICZleCwgZTRiKTsKQEAgLTM3NDAsMTAgKzM3NjgsMTAgQEAKIAl9CiAKIAl3aGlsZSAoYml0IDwgZW5kKSB7Ci0JCWJpdCA9IGV4dDRfZmluZF9uZXh0X3plcm9fYml0KGJpdG1hcF9iaC0+Yl9kYXRhLCBlbmQsIGJpdCk7CisJCWJpdCA9IG1iX2ZpbmRfbmV4dF96ZXJvX2JpdChiaXRtYXBfYmgtPmJfZGF0YSwgZW5kLCBiaXQpOwogCQlpZiAoYml0ID49IGVuZCkKIAkJCWJyZWFrOwotCQluZXh0ID0gZXh0NF9maW5kX25leHRfYml0KGJpdG1hcF9iaC0+Yl9kYXRhLCBlbmQsIGJpdCk7CisJCW5leHQgPSBtYl9maW5kX25leHRfYml0KGJpdG1hcF9iaC0+Yl9kYXRhLCBlbmQsIGJpdCk7CiAJCWlmIChuZXh0ID4gZW5kKQogCQkJbmV4dCA9IGVuZDsKIAkJc3RhcnQgPSBncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikgKyBiaXQgKwpAQCAtMzc3MSw2ICszNzk5LDEwIEBACiAJCQkodW5zaWduZWQgbG9uZykgcGEtPnBhX2xlbik7CiAJCWV4dDRfZXJyb3Ioc2IsIF9fRlVOQ1RJT05fXywgImZyZWUgJXUsIHBhX2ZyZWUgJXVcbiIsCiAJCQkJCQlmcmVlLCBwYS0+cGFfZnJlZSk7CisJCS8qCisJCSAqIHBhIGlzIGFscmVhZHkgZGVsZXRlZCBzbyB3ZSB1c2UgdGhlIHZhbHVlIG9idGFpbmVkCisJCSAqIGZyb20gdGhlIGJpdG1hcCBhbmQgY29udGludWUuCisJCSAqLwogCX0KIAlhdG9taWNfYWRkKGZyZWUsICZzYmktPnNfbWJfZGlzY2FyZGVkKTsKIAlpZiAoYWMpCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDhjNmM2ODUuLjVjMWUyN2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC00Myw2ICs0Myw3IEBACiAKIAlpZiAoSVNfRVJSKHBhdGgpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocGF0aCk7CisJCXBhdGggPSBOVUxMOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC03NCw2ICs3NSwxMCBAQAogCX0KIAlyZXR2YWwgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleHQpOwogZXJyX291dDoKKwlpZiAocGF0aCkgeworCQlleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7CisJCWtmcmVlKHBhdGgpOworCX0KIAlsYi0+Zmlyc3RfcGJsb2NrID0gMDsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9uYW1laS5jIGIvZnMvZXh0NC9uYW1laS5jCmluZGV4IGE5MzQ3ZmIuLjI4YWEyZWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbmFtZWkuYworKysgYi9mcy9leHQ0L25hbWVpLmMKQEAgLTE4MDQsMTIgKzE4MDQsOCBAQAogCWlub2RlLT5pX2ZvcCA9ICZleHQ0X2Rpcl9vcGVyYXRpb25zOwogCWlub2RlLT5pX3NpemUgPSBFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwogCWRpcl9ibG9jayA9IGV4dDRfYnJlYWQgKGhhbmRsZSwgaW5vZGUsIDAsIDEsICZlcnIpOwotCWlmICghZGlyX2Jsb2NrKSB7Ci0JCWV4dDRfZGVjX2NvdW50KGhhbmRsZSwgaW5vZGUpOyAvKiBpcyB0aGlzIG5saW5rID09IDA/ICovCi0JCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKLQkJaXB1dCAoaW5vZGUpOwotCQlnb3RvIG91dF9zdG9wOwotCX0KKwlpZiAoIWRpcl9ibG9jaykKKwkJZ290byBvdXRfY2xlYXJfaW5vZGU7CiAJQlVGRkVSX1RSQUNFKGRpcl9ibG9jaywgImdldF93cml0ZV9hY2Nlc3MiKTsKIAlleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGRpcl9ibG9jayk7CiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgZGlyX2Jsb2NrLT5iX2RhdGE7CkBAIC0xODMyLDcgKzE4MjgsOCBAQAogCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAllcnIgPSBleHQ0X2FkZF9lbnRyeSAoaGFuZGxlLCBkZW50cnksIGlub2RlKTsKIAlpZiAoZXJyKSB7Ci0JCWlub2RlLT5pX25saW5rID0gMDsKK291dF9jbGVhcl9pbm9kZToKKwkJY2xlYXJfbmxpbmsoaW5vZGUpOwogCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CiAJCWlwdXQgKGlub2RlKTsKIAkJZ290byBvdXRfc3RvcDsKQEAgLTIxNjQsNyArMjE2MSw3IEBACiAJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gZXh0NF9jdXJyZW50X3RpbWUoZGlyKTsKIAlleHQ0X3VwZGF0ZV9keF9mbGFnKGRpcik7CiAJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgZGlyKTsKLQlleHQ0X2RlY19jb3VudChoYW5kbGUsIGlub2RlKTsKKwlkcm9wX25saW5rKGlub2RlKTsKIAlpZiAoIWlub2RlLT5pX25saW5rKQogCQlleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBleHQ0X2N1cnJlbnRfdGltZShpbm9kZSk7CkBAIC0yMjE0LDcgKzIyMTEsNyBAQAogCQllcnIgPSBfX3BhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgbCwKIAkJCQltYXBwaW5nX2dmcF9tYXNrKGlub2RlLT5pX21hcHBpbmcpICYgfl9fR0ZQX0ZTKTsKIAkJaWYgKGVycikgewotCQkJZXh0NF9kZWNfY291bnQoaGFuZGxlLCBpbm9kZSk7CisJCQljbGVhcl9ubGluayhpbm9kZSk7CiAJCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CiAJCQlpcHV0IChpbm9kZSk7CiAJCQlnb3RvIG91dF9zdG9wOwpAQCAtMjIyMyw3ICsyMjIwLDYgQEAKIAkJaW5vZGUtPmlfb3AgPSAmZXh0NF9mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJbWVtY3B5KChjaGFyKikmRVhUNF9JKGlub2RlKS0+aV9kYXRhLHN5bW5hbWUsbCk7CiAJCWlub2RlLT5pX3NpemUgPSBsLTE7Ci0JCUVYVDRfSShpbm9kZSktPmlfZmxhZ3MgJj0gfkVYVDRfRVhURU5UU19GTDsKIAl9CiAJRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJZXJyID0gZXh0NF9hZGRfbm9uZGlyKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSk7CkBAIC0yNDA3LDcgKzI0MDMsNyBAQAogCQlleHQ0X2RlY19jb3VudChoYW5kbGUsIG9sZF9kaXIpOwogCQlpZiAobmV3X2lub2RlKSB7CiAJCQkvKiBjaGVja2VkIGVtcHR5X2RpciBhYm92ZSwgY2FuJ3QgaGF2ZSBhbm90aGVyIHBhcmVudCwKLQkJCSAqIGV4dDNfZGVjX2NvdW50KCkgd29uJ3Qgd29yayBmb3IgbWFueS1saW5rZWQgZGlycyAqLworCQkJICogZXh0NF9kZWNfY291bnQoKSB3b24ndCB3b3JrIGZvciBtYW55LWxpbmtlZCBkaXJzICovCiAJCQluZXdfaW5vZGUtPmlfbmxpbmsgPSAwOwogCQl9IGVsc2UgewogCQkJZXh0NF9pbmNfY291bnQoaGFuZGxlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jCmluZGV4IDk0NzdhMmIuLmUyOWVmYTAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvcmVzaXplLmMKKysrIGIvZnMvZXh0NC9yZXNpemUuYwpAQCAtMTAzNyw2ICsxMDM3LDcgQEAKIAkJZXh0NF93YXJuaW5nKHNiLCBfX0ZVTkNUSU9OX18sCiAJCQkgICAgICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKIAkJdW5sb2NrX3N1cGVyKHNiKTsKKwkJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCBkNzk2MjEzLi5lOTA1NGMxIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKKysrIGIvZnMvZXh0NC94YXR0ci5jCkBAIC0xMzg2LDcgKzEzODYsNyBAQAogCXN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqY2U7CiAJaW50IGVycm9yOwogCi0JY2UgPSBtYl9jYWNoZV9lbnRyeV9hbGxvYyhleHQ0X3hhdHRyX2NhY2hlKTsKKwljZSA9IG1iX2NhY2hlX2VudHJ5X2FsbG9jKGV4dDRfeGF0dHJfY2FjaGUsIEdGUF9OT0ZTKTsKIAlpZiAoIWNlKSB7CiAJCWVhX2JkZWJ1ZyhiaCwgIm91dCBvZiBtZW1vcnkiKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZpbGUuYyBiL2ZzL2ZhdC9maWxlLmMKaW5kZXggYzYxNDE3NS4uMmEzYmVkOSAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZpbGUuYworKysgYi9mcy9mYXQvZmlsZS5jCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21zZG9zX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KQEAgLTQ2LDEwICs0Nyw5IEBACiAKIAkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JCWlmIChJU19SRE9OTFkoaW5vZGUpKSB7Ci0JCQllcnIgPSAtRVJPRlM7Ci0JCQlnb3RvIHVwOwotCQl9CisJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQlpZiAoZXJyKQorCQkJZ290byB1cF9ub19kcm9wX3dyaXRlOwogCiAJCS8qCiAJCSAqIEFUVFJfVk9MVU1FIGFuZCBBVFRSX0RJUiBjYW5ub3QgYmUgY2hhbmdlZDsgdGhpcyBhbHNvCkBAIC0xMDUsNyArMTA1LDkgQEAKIAogCQlNU0RPU19JKGlub2RlKS0+aV9hdHRycyA9IGF0dHIgJiBBVFRSX1VOVVNFRDsKIAkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JdXA6Cit1cDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7Cit1cF9ub19kcm9wX3dyaXRlOgogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggNmQyN2JlZi4uN2EwYTliOCAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtNDIsNiArNDIsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZikKIHsKIAlwZXJjcHVfY291bnRlcl9kZWMoJm5yX2ZpbGVzKTsKKwlmaWxlX2NoZWNrX3N0YXRlKGYpOwogCWNhbGxfcmN1KCZmLT5mX3UuZnVfcmN1aGVhZCwgZmlsZV9mcmVlX3JjdSk7CiB9CiAKQEAgLTgzLDYgKzg0LDEyIEBACiAvKiBGaW5kIGFuIHVudXNlZCBmaWxlIHN0cnVjdHVyZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KICAqIFJldHVybnMgTlVMTCwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgZnJlZSBmaWxlIHN0cnVjdHVyZXMgb3IKICAqIHdlIHJ1biBvdXQgb2YgbWVtb3J5LgorICoKKyAqIEJlIHZlcnkgY2FyZWZ1bCB1c2luZyB0aGlzLiAgWW91IGFyZSByZXNwb25zaWJsZSBmb3IKKyAqIGdldHRpbmcgd3JpdGUgYWNjZXNzIHRvIGFueSBtb3VudCB0aGF0IHlvdSBtaWdodCBhc3NpZ24KKyAqIHRvIHRoaXMgZmlscCwgaWYgaXQgaXMgb3BlbmVkIGZvciB3cml0ZS4gIElmIHRoaXMgaXMgbm90CisgKiBkb25lLCB5b3Ugd2lsbCBpbWJhbGFuY2UgaW50IHRoZSBtb3VudCdzIHdyaXRlciBjb3VudAorICogYW5kIGEgd2FybmluZyBhdCBfX2ZwdXQoKSB0aW1lLgogICovCiBzdHJ1Y3QgZmlsZSAqZ2V0X2VtcHR5X2ZpbHAodm9pZCkKIHsKQEAgLTE5Myw2ICsyMDAsMTggQEAKIAlmaWxlLT5mX21hcHBpbmcgPSBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKIAlmaWxlLT5mX21vZGUgPSBtb2RlOwogCWZpbGUtPmZfb3AgPSBmb3A7CisKKwkvKgorCSAqIFRoZXNlIG1vdW50cyBkb24ndCByZWFsbHkgbWF0dGVyIGluIHByYWN0aWNlCisJICogZm9yIHIvbyBiaW5kIG1vdW50cy4gIFRoZXkgYXJlbid0IHVzZXJzcGFjZS0KKwkgKiB2aXNpYmxlLiAgV2UgZG8gdGhpcyBmb3IgY29uc2lzdGVuY3ksIGFuZCBzbworCSAqIHRoYXQgd2UgY2FuIGRvIGRlYnVnZ2luZyBjaGVja3MgYXQgX19mcHV0KCkKKwkgKi8KKwlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgIXNwZWNpYWxfZmlsZShkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJZmlsZV90YWtlX3dyaXRlKGZpbGUpOworCQllcnJvciA9IG1udF93YW50X3dyaXRlKG1udCk7CisJCVdBUk5fT04oZXJyb3IpOworCX0KIAlyZXR1cm4gZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MKGluaXRfZmlsZSk7CkBAIC0yMDUsNiArMjI0LDMxIEBACiAKIEVYUE9SVF9TWU1CT0woZnB1dCk7CiAKKy8qKgorICogZHJvcF9maWxlX3dyaXRlX2FjY2VzcyAtIGdpdmUgdXAgYWJpbGl0eSB0byB3cml0ZSB0byBhIGZpbGUKKyAqIEBmaWxlOiB0aGUgZmlsZSB0byB3aGljaCB3ZSB3aWxsIHN0b3Agd3JpdGluZworICoKKyAqIFRoaXMgaXMgYSBjZW50cmFsIHBsYWNlIHdoaWNoIHdpbGwgZ2l2ZSB1cCB0aGUgYWJpbGl0eQorICogdG8gd3JpdGUgdG8gQGZpbGUsIGFsb25nIHdpdGggYWNjZXNzIHRvIHdyaXRlIHRocm91Z2gKKyAqIGl0cyB2ZnNtb3VudC4KKyAqLwordm9pZCBkcm9wX2ZpbGVfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gZmlsZS0+Zl9wYXRoLm1udDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisKKwlwdXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKKworCWlmIChzcGVjaWFsX2ZpbGUoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybjsKKwlpZiAoZmlsZV9jaGVja193cml0ZWFibGUoZmlsZSkgIT0gMCkKKwkJcmV0dXJuOworCW1udF9kcm9wX3dyaXRlKG1udCk7CisJZmlsZV9yZWxlYXNlX3dyaXRlKGZpbGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJvcF9maWxlX3dyaXRlX2FjY2Vzcyk7CisKIC8qIF9fZnB1dCBpcyBjYWxsZWQgZnJvbSB0YXNrIGNvbnRleHQgd2hlbiBhaW8gY29tcGxldGlvbiByZWxlYXNlcyB0aGUgbGFzdAogICogbGFzdCB1c2Ugb2YgYSBzdHJ1Y3QgZmlsZSAqLiAgRG8gbm90IHVzZSBvdGhlcndpc2UuCiAgKi8KQEAgLTIzMCwxMCArMjc0LDEwIEBACiAJaWYgKHVubGlrZWx5KFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfY2RldiAhPSBOVUxMKSkKIAkJY2Rldl9wdXQoaW5vZGUtPmlfY2Rldik7CiAJZm9wc19wdXQoZmlsZS0+Zl9vcCk7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQlwdXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKIAlwdXRfcGlkKGZpbGUtPmZfb3duZXIucGlkKTsKIAlmaWxlX2tpbGwoZmlsZSk7CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQlkcm9wX2ZpbGVfd3JpdGVfYWNjZXNzKGZpbGUpOwogCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBOVUxMOwogCWZpbGUtPmZfcGF0aC5tbnQgPSBOVUxMOwogCWZpbGVfZnJlZShmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggYzAwNzYwNy4uMDY1NTc2NyAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTc1MSw3ICs3NTEsNyBAQAogRVhQT1JUX1NZTUJPTChnZW5lcmljX29zeW5jX2lub2RlKTsKIAogLyoqCi0gKiB3cml0ZWJhY2tfYWNxdWlyZTogYXR0ZW1wdCB0byBnZXQgZXhjbHVzaXZlIHdyaXRlYmFjayBhY2Nlc3MgdG8gYSBkZXZpY2UKKyAqIHdyaXRlYmFja19hY3F1aXJlIC0gYXR0ZW1wdCB0byBnZXQgZXhjbHVzaXZlIHdyaXRlYmFjayBhY2Nlc3MgdG8gYSBkZXZpY2UKICAqIEBiZGk6IHRoZSBkZXZpY2UncyBiYWNraW5nX2Rldl9pbmZvIHN0cnVjdHVyZQogICoKICAqIEl0IGlzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBwZGZsdXNoIHRocmVhZCBibG9ja2VkIG9uCkBAIC03NjgsNyArNzY4LDcgQEAKIH0KIAogLyoqCi0gKiB3cml0ZWJhY2tfaW5fcHJvZ3Jlc3M6IGRldGVybWluZSB3aGV0aGVyIHRoZXJlIGlzIHdyaXRlYmFjayBpbiBwcm9ncmVzcworICogd3JpdGViYWNrX2luX3Byb2dyZXNzIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgd3JpdGViYWNrIGluIHByb2dyZXNzCiAgKiBAYmRpOiB0aGUgZGV2aWNlJ3MgYmFja2luZ19kZXZfaW5mbyBzdHJ1Y3R1cmUuCiAgKgogICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgd3JpdGViYWNrIGluIHByb2dyZXNzIGFnYWluc3QgYSBiYWNraW5nIGRldmljZS4KQEAgLTc3OSw3ICs3NzksNyBAQAogfQogCiAvKioKLSAqIHdyaXRlYmFja19yZWxlYXNlOiByZWxpbnF1aXNoIGV4Y2x1c2l2ZSB3cml0ZWJhY2sgYWNjZXNzIGFnYWluc3QgYSBkZXZpY2UuCisgKiB3cml0ZWJhY2tfcmVsZWFzZSAtIHJlbGlucXVpc2ggZXhjbHVzaXZlIHdyaXRlYmFjayBhY2Nlc3MgYWdhaW5zdCBhIGRldmljZS4KICAqIEBiZGk6IHRoZSBkZXZpY2UncyBiYWNraW5nX2Rldl9pbmZvIHN0cnVjdHVyZQogICovCiB2b2lkIHdyaXRlYmFja19yZWxlYXNlKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA3ZmI1MTRiLi5jNDgwN2IzIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTkwNiw3ICs5MDYsNyBAQAogCX0KIAogCWlmIChmYy0+ZmxhZ3MgJiBGVVNFX0RFRkFVTFRfUEVSTUlTU0lPTlMpIHsKLQkJaW50IGVyciA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7CisJCWVyciA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7CiAKIAkJLyogSWYgcGVybWlzc2lvbiBpcyBkZW5pZWQsIHRyeSB0byByZWZyZXNoIGZpbGUKIAkJICAgYXR0cmlidXRlcy4gIFRoaXMgaXMgYWxzbyBuZWVkZWQsIGJlY2F1c2UgdGhlIHJvb3QKZGlmZiAtLWdpdCBhL2ZzL2dmczIvS2NvbmZpZyBiL2ZzL2dmczIvS2NvbmZpZwppbmRleCBkZThlNjRjLi43Zjc5NDdlIDEwMDY0NAotLS0gYS9mcy9nZnMyL0tjb25maWcKKysrIGIvZnMvZ2ZzMi9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIEdGUzJfRlMKIAl0cmlzdGF0ZSAiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgKDY0QklUIHx8IChMU0YgJiYgTEJEKSkKIAlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJc2VsZWN0IENSQzMyCiAJaGVscApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9NYWtlZmlsZSBiL2ZzL2dmczIvTWFrZWZpbGUKaW5kZXggOGZmZjExMC4uZTIzNTBkZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9NYWtlZmlsZQorKysgYi9mcy9nZnMyL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogb2JqLSQoQ09ORklHX0dGUzJfRlMpICs9IGdmczIubwogZ2ZzMi15IDo9IGFjbC5vIGJtYXAubyBkYWVtb24ubyBkaXIubyBlYW9wcy5vIGVhdHRyLm8gZ2xvY2subyBcCi0JZ2xvcHMubyBpbm9kZS5vIGxtLm8gbG9nLm8gbG9wcy5vIGxvY2tpbmcubyBtYWluLm8gbWV0YV9pby5vIFwKKwlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIGxvY2tpbmcubyBtYWluLm8gbWV0YV9pby5vIFwKIAltb3VudC5vIG9wc19hZGRyZXNzLm8gb3BzX2RlbnRyeS5vIG9wc19leHBvcnQubyBvcHNfZmlsZS5vIFwKIAlvcHNfZnN0eXBlLm8gb3BzX2lub2RlLm8gb3BzX3N1cGVyLm8gcXVvdGEubyBcCiAJcmVjb3ZlcnkubyByZ3JwLm8gc3VwZXIubyBzeXMubyB0cmFucy5vIHV0aWwubwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hY2wuYyBiL2ZzL2dmczIvYWNsLmMKaW5kZXggMTA0N2E4Yy4uM2U5YmQ0NiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hY2wuYworKysgYi9mcy9nZnMyL2FjbC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAllci5lcl9kYXRhX2xlbiA9IEdGUzJfRUFfREFUQV9MRU4oZWwtPmVsX2VhKTsKLQllci5lcl9kYXRhID0ga21hbGxvYyhlci5lcl9kYXRhX2xlbiwgR0ZQX0tFUk5FTCk7CisJZXIuZXJfZGF0YSA9IGttYWxsb2MoZXIuZXJfZGF0YV9sZW4sIEdGUF9OT0ZTKTsKIAllcnJvciA9IC1FTk9NRU07CiAJaWYgKCFlci5lcl9kYXRhKQogCQlnb3RvIG91dDsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfS0VSTkVMKTsKKwljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9OT0ZTKTsKIAllcnJvciA9IC1FTk9NRU07CiAJaWYgKCFjbG9uZSkKIAkJZ290byBvdXQ7CkBAIC0yNzIsNyArMjcyLDcgQEAKIAlpZiAoIWFjbCkKIAkJcmV0dXJuIGdmczJfc2V0YXR0cl9zaW1wbGUoaXAsIGF0dHIpOwogCi0JY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfS0VSTkVMKTsKKwljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9OT0ZTKTsKIAllcnJvciA9IC1FTk9NRU07CiAJaWYgKCFjbG9uZSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2JtYXAuYyBiL2ZzL2dmczIvYm1hcC5jCmluZGV4IGU5NDU2ZWIuLmMxOTE4NGYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYm1hcC5jCisrKyBiL2ZzL2dmczIvYm1hcC5jCkBAIC0zMyw2ICszMyw3IEBACiAgKiBrZWVwIGl0IHNtYWxsLgogICovCiBzdHJ1Y3QgbWV0YXBhdGggeworCXN0cnVjdCBidWZmZXJfaGVhZCAqbXBfYmhbR0ZTMl9NQVhfTUVUQV9IRUlHSFRdOwogCV9fdTE2IG1wX2xpc3RbR0ZTMl9NQVhfTUVUQV9IRUlHSFRdOwogfTsKIApAQCAtMTM1LDkgKzEzNiwxMCBAQAogCQkvKiBHZXQgYSBmcmVlIGJsb2NrLCBmaWxsIGl0IHdpdGggdGhlIHN0dWZmZWQgZGF0YSwKIAkJICAgYW5kIHdyaXRlIGl0IG91dCB0byBkaXNrICovCiAKKwkJdW5zaWduZWQgaW50IG4gPSAxOworCQlibG9jayA9IGdmczJfYWxsb2NfYmxvY2soaXAsICZuKTsKIAkJaWYgKGlzZGlyKSB7Ci0JCQlibG9jayA9IGdmczJfYWxsb2NfbWV0YShpcCk7Ci0KKwkJCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgYmxvY2ssIDEpOwogCQkJZXJyb3IgPSBnZnMyX2Rpcl9nZXRfbmV3X2J1ZmZlcihpcCwgYmxvY2ssICZiaCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBvdXRfYnJlbHNlOwpAQCAtMTQ1LDggKzE0Nyw2IEBACiAJCQkJCSAgICAgIGRpYmgsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKTsKIAkJCWJyZWxzZShiaCk7CiAJCX0gZWxzZSB7Ci0JCQlibG9jayA9IGdmczJfYWxsb2NfZGF0YShpcCk7Ci0KIAkJCWVycm9yID0gZ2ZzMl91bnN0dWZmZXJfcGFnZShpcCwgZGliaCwgYmxvY2ssIHBhZ2UpOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gb3V0X2JyZWxzZTsKQEAgLTE2MSwxMiArMTYxLDExIEBACiAKIAlpZiAoaXAtPmlfZGkuZGlfc2l6ZSkgewogCQkqKF9fYmU2NCAqKShkaSArIDEpID0gY3B1X3RvX2JlNjQoYmxvY2spOwotCQlpcC0+aV9kaS5kaV9ibG9ja3MrKzsKLQkJZ2ZzMl9zZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSk7Ci0JCWRpLT5kaV9ibG9ja3MgPSBjcHVfdG9fYmU2NChpcC0+aV9kaS5kaV9ibG9ja3MpOworCQlnZnMyX2FkZF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlLCAxKTsKKwkJZGktPmRpX2Jsb2NrcyA9IGNwdV90b19iZTY0KGdmczJfZ2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpKTsKIAl9CiAKLQlpcC0+aV9kaS5kaV9oZWlnaHQgPSAxOworCWlwLT5pX2hlaWdodCA9IDE7CiAJZGktPmRpX2hlaWdodCA9IGNwdV90b19iZTE2KDEpOwogCiBvdXRfYnJlbHNlOgpAQCAtMTc2LDExNCArMTc1LDEzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0vKioKLSAqIGNhbGNfdHJlZV9oZWlnaHQgLSBDYWxjdWxhdGUgdGhlIGhlaWdodCBvZiBhIG1ldGFkYXRhIHRyZWUKLSAqIEBpcDogVGhlIEdGUzIgaW5vZGUKLSAqIEBzaXplOiBUaGUgcHJvcG9zZWQgc2l6ZSBvZiB0aGUgZmlsZQotICoKLSAqIFdvcmsgb3V0IGhvdyB0YWxsIGEgbWV0YWRhdGEgdHJlZSBuZWVkcyB0byBiZSBpbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBhCi0gKiBmaWxlIG9mIGEgcGFydGljdWxhciBzaXplLiBJZiBzaXplIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBzaXplIG9mCi0gKiB0aGUgaW5vZGUsIHRoZW4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgaW5vZGUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZQotICogc3VwcGxpZWQgb25lLgotICoKLSAqIFJldHVybnM6IHRoZSBoZWlnaHQgdGhlIHRyZWUgc2hvdWxkIGJlCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3RyZWVfaGVpZ2h0KHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IHNpemUpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7Ci0JdTY0ICphcnI7Ci0JdW5zaWduZWQgaW50IG1heCwgaGVpZ2h0OwotCi0JaWYgKGlwLT5pX2RpLmRpX3NpemUgPiBzaXplKQotCQlzaXplID0gaXAtPmlfZGkuZGlfc2l6ZTsKLQotCWlmIChnZnMyX2lzX2RpcihpcCkpIHsKLQkJYXJyID0gc2RwLT5zZF9qaGVpZ2h0c2l6ZTsKLQkJbWF4ID0gc2RwLT5zZF9tYXhfamhlaWdodDsKLQl9IGVsc2UgewotCQlhcnIgPSBzZHAtPnNkX2hlaWdodHNpemU7Ci0JCW1heCA9IHNkcC0+c2RfbWF4X2hlaWdodDsKLQl9Ci0KLQlmb3IgKGhlaWdodCA9IDA7IGhlaWdodCA8IG1heDsgaGVpZ2h0KyspCi0JCWlmIChhcnJbaGVpZ2h0XSA+PSBzaXplKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gaGVpZ2h0OwotfQotCi0vKioKLSAqIGJ1aWxkX2hlaWdodCAtIEJ1aWxkIGEgbWV0YWRhdGEgdHJlZSBvZiB0aGUgcmVxdWVzdGVkIGhlaWdodAotICogQGlwOiBUaGUgR0ZTMiBpbm9kZQotICogQGhlaWdodDogVGhlIGhlaWdodCB0byBidWlsZCB0bwotICoKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgYnVpbGRfaGVpZ2h0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGhlaWdodCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXVuc2lnbmVkIG5ld19oZWlnaHQgPSBoZWlnaHQgLSBpcC0+aV9kaS5kaV9oZWlnaHQ7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tzW0dGUzJfTUFYX01FVEFfSEVJR0hUXTsKLQlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKmRpOwotCWludCBlcnJvcjsKLQlfX2JlNjQgKmJwOwotCXU2NCBibjsKLQl1bnNpZ25lZCBuOwotCi0JaWYgKGhlaWdodCA8PSBpcC0+aV9kaS5kaV9oZWlnaHQpCi0JCXJldHVybiAwOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlmb3IobiA9IDA7IG4gPCBuZXdfaGVpZ2h0OyBuKyspIHsKLQkJYm4gPSBnZnMyX2FsbG9jX21ldGEoaXApOwotCQlibG9ja3Nbbl0gPSBnZnMyX21ldGFfbmV3KGlwLT5pX2dsLCBibik7Ci0JCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBibG9ja3Nbbl0sIDEpOwotCX0KLQotCW4gPSAwOwotCWJuID0gYmxvY2tzWzBdLT5iX2Jsb2NrbnI7Ci0JaWYgKG5ld19oZWlnaHQgPiAxKSB7Ci0JCWZvcig7IG4gPCBuZXdfaGVpZ2h0LTE7IG4rKykgewotCQkJZ2ZzMl9tZXRhdHlwZV9zZXQoYmxvY2tzW25dLCBHRlMyX01FVEFUWVBFX0lOLAotCQkJCQkgIEdGUzJfRk9STUFUX0lOKTsKLQkJCWdmczJfYnVmZmVyX2NsZWFyX3RhaWwoYmxvY2tzW25dLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSk7Ci0JCQlicCA9IChfX2JlNjQgKikoYmxvY2tzW25dLT5iX2RhdGEgKwotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSk7Ci0JCQkqYnAgPSBjcHVfdG9fYmU2NChibG9ja3NbbisxXS0+Yl9ibG9ja25yKTsKLQkJCWJyZWxzZShibG9ja3Nbbl0pOwotCQkJYmxvY2tzW25dID0gTlVMTDsKLQkJfQotCX0KLQlnZnMyX21ldGF0eXBlX3NldChibG9ja3Nbbl0sIEdGUzJfTUVUQVRZUEVfSU4sIEdGUzJfRk9STUFUX0lOKTsKLQlnZnMyX2J1ZmZlcl9jb3B5X3RhaWwoYmxvY2tzW25dLCBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpLAotCQkJICAgICAgZGliaCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOwotCWJyZWxzZShibG9ja3Nbbl0pOwotCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKLQlkaSA9IChzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKilkaWJoLT5iX2RhdGE7Ci0JZ2ZzMl9idWZmZXJfY2xlYXJfdGFpbChkaWJoLCBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7Ci0JKihfX2JlNjQgKikoZGkgKyAxKSA9IGNwdV90b19iZTY0KGJuKTsKLQlpcC0+aV9kaS5kaV9oZWlnaHQgKz0gbmV3X2hlaWdodDsKLQlpcC0+aV9kaS5kaV9ibG9ja3MgKz0gbmV3X2hlaWdodDsKLQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKTsKLQlkaS0+ZGlfaGVpZ2h0ID0gY3B1X3RvX2JlMTYoaXAtPmlfZGkuZGlfaGVpZ2h0KTsKLQlkaS0+ZGlfYmxvY2tzID0gY3B1X3RvX2JlNjQoaXAtPmlfZGkuZGlfYmxvY2tzKTsKLQlicmVsc2UoZGliaCk7Ci0JcmV0dXJuIGVycm9yOwotfQogCiAvKioKICAqIGZpbmRfbWV0YXBhdGggLSBGaW5kIHBhdGggdGhyb3VnaCB0aGUgbWV0YWRhdGEgdHJlZQotICogQGlwOiBUaGUgaW5vZGUgcG9pbnRlcgorICogQHNkcDogVGhlIHN1cGVyYmxvY2sKICAqIEBtcDogVGhlIG1ldGFwYXRoIHRvIHJldHVybiB0aGUgcmVzdWx0IGluCiAgKiBAYmxvY2s6IFRoZSBkaXNrIGJsb2NrIHRvIGxvb2sgdXAKKyAqIEBoZWlnaHQ6IFRoZSBwcmUtY2FsY3VsYXRlZCBoZWlnaHQgb2YgdGhlIG1ldGFkYXRhIHRyZWUKICAqCiAgKiAgIFRoaXMgcm91dGluZSByZXR1cm5zIGEgc3RydWN0IG1ldGFwYXRoIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYSBwYXRoCiAgKiAgIHRocm91Z2ggdGhlIG1ldGFkYXRhIG9mIGlub2RlICJpcCIgdG8gZ2V0IHRvIGJsb2NrICJibG9jayIuCkBAIC0zMzgsMjEgKzIzNiwyOSBAQAogICoKICAqLwogCi1zdGF0aWMgdm9pZCBmaW5kX21ldGFwYXRoKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IGJsb2NrLAotCQkJICBzdHJ1Y3QgbWV0YXBhdGggKm1wKQorc3RhdGljIHZvaWQgZmluZF9tZXRhcGF0aChjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IGJsb2NrLAorCQkJICBzdHJ1Y3QgbWV0YXBhdGggKm1wLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwotCXU2NCBiID0gYmxvY2s7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSBpcC0+aV9kaS5kaV9oZWlnaHQ7IGktLTspCi0JCW1wLT5tcF9saXN0W2ldID0gZG9fZGl2KGIsIHNkcC0+c2RfaW5wdHJzKTsKKwlmb3IgKGkgPSBoZWlnaHQ7IGktLTspCisJCW1wLT5tcF9saXN0W2ldID0gZG9fZGl2KGJsb2NrLCBzZHAtPnNkX2lucHRycyk7CiAKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgemVyb19tZXRhcGF0aF9sZW5ndGgoY29uc3Qgc3RydWN0IG1ldGFwYXRoICptcCwKKwkJCQkJCXVuc2lnbmVkIGhlaWdodCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0IC0gMTsgaSsrKSB7CisJCWlmIChtcC0+bXBfbGlzdFtpXSAhPSAwKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiBoZWlnaHQ7Cit9CisKIC8qKgogICogbWV0YXBvaW50ZXIgLSBSZXR1cm4gcG9pbnRlciB0byBzdGFydCBvZiBtZXRhZGF0YSBpbiBhIGJ1ZmZlcgotICogQGJoOiBUaGUgYnVmZmVyCiAgKiBAaGVpZ2h0OiBUaGUgbWV0YWRhdGEgaGVpZ2h0ICgwID0gZGlub2RlKQogICogQG1wOiBUaGUgbWV0YXBhdGgKICAqCkBAIC0zNjEsOTMgKzI2NywzMDIgQEAKICAqIG1ldGFkYXRhIHRyZWUuCiAgKi8KIAotc3RhdGljIGlubGluZSBfX2JlNjQgKm1ldGFwb2ludGVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCAqYm91bmRhcnksCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwgY29uc3Qgc3RydWN0IG1ldGFwYXRoICptcCkKK3N0YXRpYyBpbmxpbmUgX19iZTY0ICptZXRhcG9pbnRlcih1bnNpZ25lZCBpbnQgaGVpZ2h0LCBjb25zdCBzdHJ1Y3QgbWV0YXBhdGggKm1wKQogeworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBtcC0+bXBfYmhbaGVpZ2h0XTsKIAl1bnNpZ25lZCBpbnQgaGVhZF9zaXplID0gKGhlaWdodCA+IDApID8KIAkJc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSA6IHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpOwotCV9fYmU2NCAqcHRyOwotCSpib3VuZGFyeSA9IDA7Ci0JcHRyID0gKChfX2JlNjQgKikoYmgtPmJfZGF0YSArIGhlYWRfc2l6ZSkpICsgbXAtPm1wX2xpc3RbaGVpZ2h0XTsKLQlpZiAocHRyICsgMSA9PSAoX19iZTY0ICopKGJoLT5iX2RhdGEgKyBiaC0+Yl9zaXplKSkKLQkJKmJvdW5kYXJ5ID0gMTsKLQlyZXR1cm4gcHRyOworCXJldHVybiAoKF9fYmU2NCAqKShiaC0+Yl9kYXRhICsgaGVhZF9zaXplKSkgKyBtcC0+bXBfbGlzdFtoZWlnaHRdOwogfQogCiAvKioKLSAqIGxvb2t1cF9ibG9jayAtIEdldCB0aGUgbmV4dCBtZXRhZGF0YSBibG9jayBpbiBtZXRhZGF0YSB0cmVlCi0gKiBAaXA6IFRoZSBHRlMyIGlub2RlCi0gKiBAYmg6IEJ1ZmZlciBjb250YWluaW5nIHRoZSBwb2ludGVycyB0byBtZXRhZGF0YSBibG9ja3MKLSAqIEBoZWlnaHQ6IFRoZSBoZWlnaHQgb2YgdGhlIHRyZWUgKDAgPSBkaW5vZGUpCisgKiBsb29rdXBfbWV0YXBhdGggLSBXYWxrIHRoZSBtZXRhZGF0YSB0cmVlIHRvIGEgc3BlY2lmaWMgcG9pbnQKKyAqIEBpcDogVGhlIGlub2RlCiAgKiBAbXA6IFRoZSBtZXRhcGF0aAotICogQGNyZWF0ZTogTm9uLXplcm8gaWYgd2UgbWF5IGNyZWF0ZSBhIG5ldyBtZWF0ZGF0YSBibG9jawotICogQG5ldzogVXNlZCB0byBpbmRpY2F0ZSBpZiB3ZSBkaWQgY3JlYXRlIGEgbmV3IG1ldGFkYXRhIGJsb2NrCi0gKiBAYmxvY2s6IHRoZSByZXR1cm5lZCBkaXNrIGJsb2NrIG51bWJlcgogICoKLSAqIEdpdmVuIGEgbWV0YXRyZWUsIGNvbXBsZXRlIHRvIGEgcGFydGljdWxhciBoZWlnaHQsIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5leHQKLSAqIGhlaWdodCBvZiB0aGUgdHJlZSBleGlzdHMuIElmIG5vdCB0aGUgbmV4dCBoZWlnaHQgb2YgdGhlIHRyZWUgaXMgY3JlYXRlZC4KLSAqIFRoZSBibG9jayBudW1iZXIgb2YgdGhlIG5leHQgaGVpZ2h0IG9mIHRoZSBtZXRhZGF0YSB0cmVlIGlzIHJldHVybmVkLgorICogQXNzdW1lcyB0aGF0IHRoZSBpbm9kZSdzIGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIGxvb2tlZCB1cCBhbmQKKyAqIGhvb2tlZCBvbnRvIG1wLT5tcF9iaFswXSBhbmQgdGhhdCB0aGUgbWV0YXBhdGggaGFzIGJlZW4gaW5pdGlhbGlzZWQKKyAqIGJ5IGZpbmRfbWV0YXBhdGgoKS4KICAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIGVuY291bnRlcnMgcGFydCBvZiB0aGUgdHJlZSB3aGljaCBoYXMgbm90IGJlZW4KKyAqIGFsbG9jYXRlZCwgaXQgcmV0dXJucyB0aGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIHRyZWUgYXQgdGhlIHBvaW50CisgKiBhdCB3aGljaCBpdCBmb3VuZCB0aGUgdW5hbGxvY2F0ZWQgYmxvY2suIEJsb2NrcyB3aGljaCBhcmUgZm91bmQgYXJlCisgKiBhZGRlZCB0byB0aGUgbXAtPm1wX2JoW10gbGlzdC4KKyAqCisgKiBSZXR1cm5zOiBlcnJvciBvciBoZWlnaHQgb2YgbWV0YWRhdGEgdHJlZQogICovCiAKLXN0YXRpYyBpbnQgbG9va3VwX2Jsb2NrKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCXVuc2lnbmVkIGludCBoZWlnaHQsIHN0cnVjdCBtZXRhcGF0aCAqbXAsIGludCBjcmVhdGUsCi0JCQlpbnQgKm5ldywgdTY0ICpibG9jaykKK3N0YXRpYyBpbnQgbG9va3VwX21ldGFwYXRoKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IG1ldGFwYXRoICptcCkKIHsKLQlpbnQgYm91bmRhcnk7Ci0JX19iZTY0ICpwdHIgPSBtZXRhcG9pbnRlcihiaCwgJmJvdW5kYXJ5LCBoZWlnaHQsIG1wKTsKKwl1bnNpZ25lZCBpbnQgZW5kX29mX21ldGFkYXRhID0gaXAtPmlfaGVpZ2h0IC0gMTsKKwl1bnNpZ25lZCBpbnQgeDsKKwlfX2JlNjQgKnB0cjsKKwl1NjQgZGJsb2NrOworCWludCByZXQ7CiAKLQlpZiAoKnB0cikgewotCQkqYmxvY2sgPSBiZTY0X3RvX2NwdSgqcHRyKTsKLQkJcmV0dXJuIGJvdW5kYXJ5OworCWZvciAoeCA9IDA7IHggPCBlbmRfb2ZfbWV0YWRhdGE7IHgrKykgeworCQlwdHIgPSBtZXRhcG9pbnRlcih4LCBtcCk7CisJCWRibG9jayA9IGJlNjRfdG9fY3B1KCpwdHIpOworCQlpZiAoIWRibG9jaykKKwkJCXJldHVybiB4ICsgMTsKKworCQlyZXQgPSBnZnMyX21ldGFfaW5kaXJlY3RfYnVmZmVyKGlwLCB4KzEsIGRibG9jaywgMCwgJm1wLT5tcF9iaFt4KzFdKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAJfQogCi0JKmJsb2NrID0gMDsKLQotCWlmICghY3JlYXRlKQotCQlyZXR1cm4gMDsKLQotCWlmIChoZWlnaHQgPT0gaXAtPmlfZGkuZGlfaGVpZ2h0IC0gMSAmJiAhZ2ZzMl9pc19kaXIoaXApKQotCQkqYmxvY2sgPSBnZnMyX2FsbG9jX2RhdGEoaXApOwotCWVsc2UKLQkJKmJsb2NrID0gZ2ZzMl9hbGxvY19tZXRhKGlwKTsKLQotCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7Ci0KLQkqcHRyID0gY3B1X3RvX2JlNjQoKmJsb2NrKTsKLQlpcC0+aV9kaS5kaV9ibG9ja3MrKzsKLQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKTsKLQotCSpuZXcgPSAxOwotCXJldHVybiAwOworCXJldHVybiBpcC0+aV9oZWlnaHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBibWFwX2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNyZWF0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX21ldGFwYXRoKHN0cnVjdCBtZXRhcGF0aCAqbXApCiB7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHRlMyX01BWF9NRVRBX0hFSUdIVDsgaSsrKSB7CisJCWlmIChtcC0+bXBfYmhbaV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCQlicmVsc2UobXAtPm1wX2JoW2ldKTsKKwl9Cit9CisKKy8qKgorICogZ2ZzMl9leHRlbnRfbGVuZ3RoIC0gUmV0dXJucyBsZW5ndGggb2YgYW4gZXh0ZW50IG9mIGJsb2NrcworICogQHN0YXJ0OiBTdGFydCBvZiB0aGUgYnVmZmVyCisgKiBAbGVuOiBMZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBieXRlcworICogQHB0cjogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyCisgKiBAbGltaXQ6IE1heCBleHRlbnQgbGVuZ3RoIHRvIHJldHVybiAoMCA9IHVubGltaXRlZCkKKyAqIEBlb2I6IFNldCB0byAxIGlmIHdlIGhpdCAiZW5kIG9mIGJsb2NrIgorICoKKyAqIElmIHRoZSBmaXJzdCBibG9jayBpcyB6ZXJvICh1bmFsbG9jYXRlZCkgaXQgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZgorICogdW5hbGxvY2F0ZWQgYmxvY2tzIGluIHRoZSBleHRlbnQsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiB0aGUgbnVtYmVyCisgKiBvZiBjb250aWd1b3VzIGJsb2NrcyBpbiB0aGUgZXh0ZW50LgorICoKKyAqIFJldHVybnM6IFRoZSBsZW5ndGggb2YgdGhlIGV4dGVudCAobWluaW11bSBvZiBvbmUgYmxvY2spCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ZzMl9leHRlbnRfbGVuZ3RoKHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuLCBfX2JlNjQgKnB0ciwgdW5zaWduZWQgbGltaXQsIGludCAqZW9iKQoreworCWNvbnN0IF9fYmU2NCAqZW5kID0gKHN0YXJ0ICsgbGVuKTsKKwljb25zdCBfX2JlNjQgKmZpcnN0ID0gcHRyOworCXU2NCBkID0gYmU2NF90b19jcHUoKnB0cik7CisKKwkqZW9iID0gMDsKKwlkbyB7CisJCXB0cisrOworCQlpZiAocHRyID49IGVuZCkKKwkJCWJyZWFrOworCQlpZiAobGltaXQgJiYgLS1saW1pdCA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChkKQorCQkJZCsrOworCX0gd2hpbGUoYmU2NF90b19jcHUoKnB0cikgPT0gZCk7CisJaWYgKHB0ciA+PSBlbmQpCisJCSplb2IgPSAxOworCXJldHVybiAocHRyIC0gZmlyc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm1hcF9sb2NrKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IGNyZWF0ZSkKK3sKIAlpZiAoY3JlYXRlKQogCQlkb3duX3dyaXRlKCZpcC0+aV9yd19tdXRleCk7CiAJZWxzZQogCQlkb3duX3JlYWQoJmlwLT5pX3J3X211dGV4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJtYXBfdW5sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjcmVhdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYm1hcF91bmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgY3JlYXRlKQogewotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJaWYgKGNyZWF0ZSkKIAkJdXBfd3JpdGUoJmlwLT5pX3J3X211dGV4KTsKIAllbHNlCiAJCXVwX3JlYWQoJmlwLT5pX3J3X211dGV4KTsKIH0KIAorc3RhdGljIGlubGluZSBfX2JlNjQgKmdmczJfaW5kaXJlY3RfaW5pdChzdHJ1Y3QgbWV0YXBhdGggKm1wLAorCQkJCQkgc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1bnNpZ25lZCBpbnQgaSwKKwkJCQkJIHVuc2lnbmVkIG9mZnNldCwgdTY0IGJuKQoreworCV9fYmU2NCAqcHRyID0gKF9fYmU2NCAqKShtcC0+bXBfYmhbaSAtIDFdLT5iX2RhdGEgKworCQkgICAgICAgKChpID4gMSkgPyBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpIDoKKwkJCQkgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpKTsKKwlCVUdfT04oaSA8IDEpOworCUJVR19PTihtcC0+bXBfYmhbaV0gIT0gTlVMTCk7CisJbXAtPm1wX2JoW2ldID0gZ2ZzMl9tZXRhX25ldyhnbCwgYm4pOworCWdmczJfdHJhbnNfYWRkX2JoKGdsLCBtcC0+bXBfYmhbaV0sIDEpOworCWdmczJfbWV0YXR5cGVfc2V0KG1wLT5tcF9iaFtpXSwgR0ZTMl9NRVRBVFlQRV9JTiwgR0ZTMl9GT1JNQVRfSU4pOworCWdmczJfYnVmZmVyX2NsZWFyX3RhaWwobXAtPm1wX2JoW2ldLCBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpKTsKKwlwdHIgKz0gb2Zmc2V0OworCSpwdHIgPSBjcHVfdG9fYmU2NChibik7CisJcmV0dXJuIHB0cjsKK30KKworZW51bSBhbGxvY19zdGF0ZSB7CisJQUxMT0NfREFUQSA9IDAsCisJQUxMT0NfR1JPV19ERVBUSCA9IDEsCisJQUxMT0NfR1JPV19IRUlHSFQgPSAyLAorCS8qIEFMTE9DX1VOU1RVRkYgPSAzLCAgIFRCRCBhbmQgcmF0aGVyIGNvbXBsaWNhdGVkICovCit9OworCisvKioKKyAqIGdmczJfYm1hcF9hbGxvYyAtIEJ1aWxkIGEgbWV0YWRhdGEgdHJlZSBvZiB0aGUgcmVxdWVzdGVkIGhlaWdodAorICogQGlub2RlOiBUaGUgR0ZTMiBpbm9kZQorICogQGxibG9jazogVGhlIGxvZ2ljYWwgc3RhcnRpbmcgYmxvY2sgb2YgdGhlIGV4dGVudAorICogQGJoX21hcDogVGhpcyBpcyB1c2VkIHRvIHJldHVybiB0aGUgbWFwcGluZyBkZXRhaWxzCisgKiBAbXA6IFRoZSBtZXRhcGF0aAorICogQHNoZWlnaHQ6IFRoZSBzdGFydGluZyBoZWlnaHQgKGkuZS4gd2hhdHMgYWxyZWFkeSBtYXBwZWQpCisgKiBAaGVpZ2h0OiBUaGUgaGVpZ2h0IHRvIGJ1aWxkIHRvCisgKiBAbWF4bGVuOiBUaGUgbWF4IG51bWJlciBvZiBkYXRhIGJsb2NrcyB0byBhbGxvYworICoKKyAqIEluIHRoaXMgcm91dGluZSB3ZSBtYXkgaGF2ZSB0byBhbGxvYzoKKyAqICAgaSkgSW5kaXJlY3QgYmxvY2tzIHRvIGdyb3cgdGhlIG1ldGFkYXRhIHRyZWUgaGVpZ2h0CisgKiAgaWkpIEluZGlyZWN0IGJsb2NrcyB0byBmaWxsIGluIGxvd2VyIHBhcnQgb2YgdGhlIG1ldGFkYXRhIHRyZWUKKyAqIGlpaSkgRGF0YSBibG9ja3MKKyAqCisgKiBUaGUgZnVuY3Rpb24gaXMgaW4gdHdvIHBhcnRzLiBUaGUgZmlyc3QgcGFydCB3b3JrcyBvdXQgdGhlIHRvdGFsCisgKiBudW1iZXIgb2YgYmxvY2tzIHdoaWNoIHdlIG5lZWQuIFRoZSBzZWNvbmQgcGFydCBkb2VzIHRoZSBhY3R1YWwKKyAqIGFsbG9jYXRpb24gYXNraW5nIGZvciBhbiBleHRlbnQgYXQgYSB0aW1lIChpZiBlbm91Z2ggY29udGlndW91cyBmcmVlCisgKiBibG9ja3MgYXJlIGF2YWlsYWJsZSwgdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSByZXF1ZXN0IHBlciBibWFwIGNhbGwpCisgKiBhbmQgdXNlcyB0aGUgc3RhdGUgbWFjaGluZSB0byBpbml0aWFsaXNlIHRoZSBibG9ja3MgaW4gb3JkZXIuCisgKgorICogUmV0dXJuczogZXJybm8gb24gZXJyb3IKKyAqLworCitzdGF0aWMgaW50IGdmczJfYm1hcF9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzZWN0b3JfdCBsYmxvY2ssCisJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX21hcCwgc3RydWN0IG1ldGFwYXRoICptcCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBzaGVpZ2h0LAorCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhsZW4pCit7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaCA9IG1wLT5tcF9iaFswXTsKKwl1NjQgYm4sIGRibG9jayA9IDA7CisJdW5zaWduZWQgbiwgaSwgYmxrcywgYWxsb2NlZCA9IDAsIGlibGtzID0gMCwgem1wbCA9IDA7CisJdW5zaWduZWQgZGJsa3MgPSAwOworCXVuc2lnbmVkIHB0cnNfcGVyX2JsazsKKwljb25zdCB1bnNpZ25lZCBlbmRfb2ZfbWV0YWRhdGEgPSBoZWlnaHQgLSAxOworCWludCBlb2IgPSAwOworCWVudW0gYWxsb2Nfc3RhdGUgc3RhdGU7CisJX19iZTY0ICpwdHI7CisJX19iZTY0IHplcm9fYm4gPSAwOworCisJQlVHX09OKHNoZWlnaHQgPCAxKTsKKwlCVUdfT04oZGliaCA9PSBOVUxMKTsKKworCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKKworCWlmIChoZWlnaHQgPT0gc2hlaWdodCkgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCQkvKiBCb3R0b20gaW5kaXJlY3QgYmxvY2sgZXhpc3RzLCBmaW5kIHVuYWxsb2NlZCBleHRlbnQgc2l6ZSAqLworCQlwdHIgPSBtZXRhcG9pbnRlcihlbmRfb2ZfbWV0YWRhdGEsIG1wKTsKKwkJYmggPSBtcC0+bXBfYmhbZW5kX29mX21ldGFkYXRhXTsKKwkJZGJsa3MgPSBnZnMyX2V4dGVudF9sZW5ndGgoYmgtPmJfZGF0YSwgYmgtPmJfc2l6ZSwgcHRyLCBtYXhsZW4sCisJCQkJCSAgICZlb2IpOworCQlCVUdfT04oZGJsa3MgPCAxKTsKKwkJc3RhdGUgPSBBTExPQ19EQVRBOworCX0gZWxzZSB7CisJCS8qIE5lZWQgdG8gYWxsb2NhdGUgaW5kaXJlY3QgYmxvY2tzICovCisJCXB0cnNfcGVyX2JsayA9IGhlaWdodCA+IDEgPyBzZHAtPnNkX2lucHRycyA6IHNkcC0+c2RfZGlwdHJzOworCQlkYmxrcyA9IG1pbihtYXhsZW4sIHB0cnNfcGVyX2JsayAtIG1wLT5tcF9saXN0W2VuZF9vZl9tZXRhZGF0YV0pOworCQlpZiAoaGVpZ2h0ID09IGlwLT5pX2hlaWdodCkgeworCQkJLyogV3JpdGluZyBpbnRvIGV4aXN0aW5nIHRyZWUsIGV4dGVuZCB0cmVlIGRvd24gKi8KKwkJCWlibGtzID0gaGVpZ2h0IC0gc2hlaWdodDsKKwkJCXN0YXRlID0gQUxMT0NfR1JPV19ERVBUSDsKKwkJfSBlbHNlIHsKKwkJCS8qIEJ1aWxkaW5nIHVwIHRyZWUgaGVpZ2h0ICovCisJCQlzdGF0ZSA9IEFMTE9DX0dST1dfSEVJR0hUOworCQkJaWJsa3MgPSBoZWlnaHQgLSBpcC0+aV9oZWlnaHQ7CisJCQl6bXBsID0gemVyb19tZXRhcGF0aF9sZW5ndGgobXAsIGhlaWdodCk7CisJCQlpYmxrcyAtPSB6bXBsOworCQkJaWJsa3MgKz0gaGVpZ2h0OworCQl9CisJfQorCisJLyogc3RhcnQgb2YgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiAoc3RhdGUgbWFjaGluZSkgKi8KKworCWJsa3MgPSBkYmxrcyArIGlibGtzOworCWkgPSBzaGVpZ2h0OworCWRvIHsKKwkJbiA9IGJsa3MgLSBhbGxvY2VkOworCQlibiA9IGdmczJfYWxsb2NfYmxvY2soaXAsICZuKTsKKwkJYWxsb2NlZCArPSBuOworCQlpZiAoc3RhdGUgIT0gQUxMT0NfREFUQSB8fCBnZnMyX2lzX2pkYXRhKGlwKSkKKwkJCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYm4sIG4pOworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCS8qIEdyb3dpbmcgaGVpZ2h0IG9mIHRyZWUgKi8KKwkJY2FzZSBBTExPQ19HUk9XX0hFSUdIVDoKKwkJCWlmIChpID09IDEpIHsKKwkJCQlwdHIgPSAoX19iZTY0ICopKGRpYmgtPmJfZGF0YSArCisJCQkJCQkgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOworCQkJCXplcm9fYm4gPSAqcHRyOworCQkJfQorCQkJZm9yICg7IGkgLSAxIDwgaGVpZ2h0IC0gaXAtPmlfaGVpZ2h0ICYmIG4gPiAwOyBpKyssIG4tLSkKKwkJCQlnZnMyX2luZGlyZWN0X2luaXQobXAsIGlwLT5pX2dsLCBpLCAwLCBibisrKTsKKwkJCWlmIChpIC0gMSA9PSBoZWlnaHQgLSBpcC0+aV9oZWlnaHQpIHsKKwkJCQlpLS07CisJCQkJZ2ZzMl9idWZmZXJfY29weV90YWlsKG1wLT5tcF9iaFtpXSwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlciksCisJCQkJCQlkaWJoLCBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7CisJCQkJZ2ZzMl9idWZmZXJfY2xlYXJfdGFpbChkaWJoLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkgKworCQkJCQkJc2l6ZW9mKF9fYmU2NCkpOworCQkJCXB0ciA9IChfX2JlNjQgKikobXAtPm1wX2JoW2ldLT5iX2RhdGEgKworCQkJCQlzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpKTsKKwkJCQkqcHRyID0gemVyb19ibjsKKwkJCQlzdGF0ZSA9IEFMTE9DX0dST1dfREVQVEg7CisJCQkJZm9yKGkgPSB6bXBsOyBpIDwgaGVpZ2h0OyBpKyspIHsKKwkJCQkJaWYgKG1wLT5tcF9iaFtpXSA9PSBOVUxMKQorCQkJCQkJYnJlYWs7CisJCQkJCWJyZWxzZShtcC0+bXBfYmhbaV0pOworCQkJCQltcC0+bXBfYmhbaV0gPSBOVUxMOworCQkJCX0KKwkJCQlpID0gem1wbDsKKwkJCX0KKwkJCWlmIChuID09IDApCisJCQkJYnJlYWs7CisJCS8qIEJyYW5jaGluZyBmcm9tIGV4aXN0aW5nIHRyZWUgKi8KKwkJY2FzZSBBTExPQ19HUk9XX0RFUFRIOgorCQkJaWYgKGkgPiAxICYmIGkgPCBoZWlnaHQpCisJCQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIG1wLT5tcF9iaFtpLTFdLCAxKTsKKwkJCWZvciAoOyBpIDwgaGVpZ2h0ICYmIG4gPiAwOyBpKyssIG4tLSkKKwkJCQlnZnMyX2luZGlyZWN0X2luaXQobXAsIGlwLT5pX2dsLCBpLAorCQkJCQkJICAgbXAtPm1wX2xpc3RbaS0xXSwgYm4rKyk7CisJCQlpZiAoaSA9PSBoZWlnaHQpCisJCQkJc3RhdGUgPSBBTExPQ19EQVRBOworCQkJaWYgKG4gPT0gMCkKKwkJCQlicmVhazsKKwkJLyogVHJlZSBjb21wbGV0ZSwgYWRkaW5nIGRhdGEgYmxvY2tzICovCisJCWNhc2UgQUxMT0NfREFUQToKKwkJCUJVR19PTihuID4gZGJsa3MpOworCQkJQlVHX09OKG1wLT5tcF9iaFtlbmRfb2ZfbWV0YWRhdGFdID09IE5VTEwpOworCQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIG1wLT5tcF9iaFtlbmRfb2ZfbWV0YWRhdGFdLCAxKTsKKwkJCWRibGtzID0gbjsKKwkJCXB0ciA9IG1ldGFwb2ludGVyKGVuZF9vZl9tZXRhZGF0YSwgbXApOworCQkJZGJsb2NrID0gYm47CisJCQl3aGlsZSAobi0tID4gMCkKKwkJCQkqcHRyKysgPSBjcHVfdG9fYmU2NChibisrKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoc3RhdGUgIT0gQUxMT0NfREFUQSk7CisKKwlpcC0+aV9oZWlnaHQgPSBoZWlnaHQ7CisJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgYWxsb2NlZCk7CisJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBtcC0+bXBfYmhbMF0tPmJfZGF0YSk7CisJbWFwX2JoKGJoX21hcCwgaW5vZGUtPmlfc2IsIGRibG9jayk7CisJYmhfbWFwLT5iX3NpemUgPSBkYmxrcyA8PCBpbm9kZS0+aV9ibGtiaXRzOworCXNldF9idWZmZXJfbmV3KGJoX21hcCk7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogZ2ZzMl9ibG9ja19tYXAgLSBNYXAgYSBibG9jayBmcm9tIGFuIGlub2RlIHRvIGEgZGlzayBibG9jawogICogQGlub2RlOiBUaGUgaW5vZGUKICAqIEBsYmxvY2s6IFRoZSBsb2dpY2FsIGJsb2NrIG51bWJlcgogICogQGJoX21hcDogVGhlIGJoIHRvIGJlIG1hcHBlZAorICogQGNyZWF0ZTogVHJ1ZSBpZiBpdHMgb2sgdG8gYWxsb2MgYmxvY2tzIHRvIHNhdGlmeSB0aGUgcmVxdWVzdAogICoKLSAqIEZpbmQgdGhlIGJsb2NrIG51bWJlciBvbiB0aGUgY3VycmVudCBkZXZpY2Ugd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4KLSAqIGlub2RlJ3MgYmxvY2suIElmIHRoZSBibG9jayBoYWQgdG8gYmUgY3JlYXRlZCwgIm5ldyIgd2lsbCBiZSBzZXQuCisgKiBTZXRzIGJ1ZmZlcl9tYXBwZWQoKSBpZiBzdWNjZXNzZnVsLCBzZXRzIGJ1ZmZlcl9ib3VuZGFyeSgpIGlmIGEKKyAqIHJlYWQgb2YgbWV0YWRhdGEgd2lsbCBiZSByZXF1aXJlZCBiZWZvcmUgdGhlIG5leHQgYmxvY2sgY2FuIGJlCisgKiBtYXBwZWQuIFNldHMgYnVmZmVyX25ldygpIGlmIG5ldyBibG9ja3Mgd2VyZSBhbGxvY2F0ZWQuCiAgKgogICogUmV0dXJuczogZXJybm8KICAqLwpAQCAtNDU3LDk3ICs1NzIsNzggQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQl1bnNpZ25lZCBpbnQgYnNpemU7Ci0JdW5zaWduZWQgaW50IGhlaWdodDsKLQl1bnNpZ25lZCBpbnQgZW5kX29mX21ldGFkYXRhOwotCXVuc2lnbmVkIGludCB4OwotCWludCBlcnJvciA9IDA7Ci0JaW50IG5ldyA9IDA7Ci0JdTY0IGRibG9jayA9IDA7Ci0JaW50IGJvdW5kYXJ5OwotCXVuc2lnbmVkIGludCBtYXhsZW4gPSBiaF9tYXAtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOwotCXN0cnVjdCBtZXRhcGF0aCBtcDsKKwl1bnNpZ25lZCBpbnQgYnNpemUgPSBzZHAtPnNkX3NiLnNiX2JzaXplOworCWNvbnN0IHVuc2lnbmVkIGludCBtYXhsZW4gPSBiaF9tYXAtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCWNvbnN0IHU2NCAqYXJyID0gc2RwLT5zZF9oZWlnaHRzaXplOworCV9fYmU2NCAqcHRyOwogCXU2NCBzaXplOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaCA9IE5VTEw7CisJc3RydWN0IG1ldGFwYXRoIG1wOworCWludCByZXQ7CisJaW50IGVvYjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJdTggaGVpZ2h0OwogCiAJQlVHX09OKG1heGxlbiA9PSAwKTsKIAotCWlmIChnZnMyX2Fzc2VydF93YXJuKHNkcCwgIWdmczJfaXNfc3R1ZmZlZChpcCkpKQotCQlyZXR1cm4gMDsKLQotCWJtYXBfbG9jayhpbm9kZSwgY3JlYXRlKTsKKwltZW1zZXQobXAubXBfYmgsIDAsIHNpemVvZihtcC5tcF9iaCkpOworCWJtYXBfbG9jayhpcCwgY3JlYXRlKTsKIAljbGVhcl9idWZmZXJfbWFwcGVkKGJoX21hcCk7CiAJY2xlYXJfYnVmZmVyX25ldyhiaF9tYXApOwogCWNsZWFyX2J1ZmZlcl9ib3VuZGFyeShiaF9tYXApOwotCWJzaXplID0gZ2ZzMl9pc19kaXIoaXApID8gc2RwLT5zZF9qYnNpemUgOiBzZHAtPnNkX3NiLnNiX2JzaXplOworCWlmIChnZnMyX2lzX2RpcihpcCkpIHsKKwkJYnNpemUgPSBzZHAtPnNkX2pic2l6ZTsKKwkJYXJyID0gc2RwLT5zZF9qaGVpZ2h0c2l6ZTsKKwl9CisKKwlyZXQgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmbXAubXBfYmhbMF0pOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaGVpZ2h0ID0gaXAtPmlfaGVpZ2h0OwogCXNpemUgPSAobGJsb2NrICsgMSkgKiBic2l6ZTsKKwl3aGlsZSAoc2l6ZSA+IGFycltoZWlnaHRdKQorCQloZWlnaHQrKzsKKwlmaW5kX21ldGFwYXRoKHNkcCwgbGJsb2NrLCAmbXAsIGhlaWdodCk7CisJcmV0ID0gMTsKKwlpZiAoaGVpZ2h0ID4gaXAtPmlfaGVpZ2h0IHx8IGdmczJfaXNfc3R1ZmZlZChpcCkpCisJCWdvdG8gZG9fYWxsb2M7CisJcmV0ID0gbG9va3VwX21ldGFwYXRoKGlwLCAmbXApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAocmV0ICE9IGlwLT5pX2hlaWdodCkKKwkJZ290byBkb19hbGxvYzsKKwlwdHIgPSBtZXRhcG9pbnRlcihpcC0+aV9oZWlnaHQgLSAxLCAmbXApOworCWlmICgqcHRyID09IDApCisJCWdvdG8gZG9fYWxsb2M7CisJbWFwX2JoKGJoX21hcCwgaW5vZGUtPmlfc2IsIGJlNjRfdG9fY3B1KCpwdHIpKTsKKwliaCA9IG1wLm1wX2JoW2lwLT5pX2hlaWdodCAtIDFdOworCWxlbiA9IGdmczJfZXh0ZW50X2xlbmd0aChiaC0+Yl9kYXRhLCBiaC0+Yl9zaXplLCBwdHIsIG1heGxlbiwgJmVvYik7CisJYmhfbWFwLT5iX3NpemUgPSAobGVuIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworCWlmIChlb2IpCisJCXNldF9idWZmZXJfYm91bmRhcnkoYmhfbWFwKTsKKwlyZXQgPSAwOworb3V0OgorCXJlbGVhc2VfbWV0YXBhdGgoJm1wKTsKKwlibWFwX3VubG9jayhpcCwgY3JlYXRlKTsKKwlyZXR1cm4gcmV0OwogCi0JaWYgKHNpemUgPiBpcC0+aV9kaS5kaV9zaXplKSB7Ci0JCWhlaWdodCA9IGNhbGNfdHJlZV9oZWlnaHQoaXAsIHNpemUpOwotCQlpZiAoaXAtPmlfZGkuZGlfaGVpZ2h0IDwgaGVpZ2h0KSB7Ci0JCQlpZiAoIWNyZWF0ZSkKLQkJCQlnb3RvIG91dF9vazsKLQkKLQkJCWVycm9yID0gYnVpbGRfaGVpZ2h0KGlub2RlLCBoZWlnaHQpOwotCQkJaWYgKGVycm9yKQotCQkJCWdvdG8gb3V0X2ZhaWw7Ci0JCX0KK2RvX2FsbG9jOgorCS8qIEFsbCBhbGxvY2F0aW9ucyBhcmUgZG9uZSBoZXJlLCBmaXJzdGx5IGNoZWNrIGNyZWF0ZSBmbGFnICovCisJaWYgKCFjcmVhdGUpIHsKKwkJQlVHX09OKGdmczJfaXNfc3R1ZmZlZChpcCkpOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKIAl9CiAKLQlmaW5kX21ldGFwYXRoKGlwLCBsYmxvY2ssICZtcCk7Ci0JZW5kX29mX21ldGFkYXRhID0gaXAtPmlfZGkuZGlfaGVpZ2h0IC0gMTsKLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZiaCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9mYWlsOwotCWRpYmggPSBiaDsKLQlnZXRfYmgoZGliaCk7Ci0KLQlmb3IgKHggPSAwOyB4IDwgZW5kX29mX21ldGFkYXRhOyB4KyspIHsKLQkJbG9va3VwX2Jsb2NrKGlwLCBiaCwgeCwgJm1wLCBjcmVhdGUsICZuZXcsICZkYmxvY2spOwotCQlicmVsc2UoYmgpOwotCQlpZiAoIWRibG9jaykKLQkJCWdvdG8gb3V0X29rOwotCi0JCWVycm9yID0gZ2ZzMl9tZXRhX2luZGlyZWN0X2J1ZmZlcihpcCwgeCsxLCBkYmxvY2ssIG5ldywgJmJoKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZmFpbDsKLQl9Ci0KLQlib3VuZGFyeSA9IGxvb2t1cF9ibG9jayhpcCwgYmgsIGVuZF9vZl9tZXRhZGF0YSwgJm1wLCBjcmVhdGUsICZuZXcsICZkYmxvY2spOwotCWlmIChkYmxvY2spIHsKLQkJbWFwX2JoKGJoX21hcCwgaW5vZGUtPmlfc2IsIGRibG9jayk7Ci0JCWlmIChib3VuZGFyeSkKLQkJCXNldF9idWZmZXJfYm91bmRhcnkoYmhfbWFwKTsKLQkJaWYgKG5ldykgewotCQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCQkJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwotCQkJc2V0X2J1ZmZlcl9uZXcoYmhfbWFwKTsKLQkJCWdvdG8gb3V0X2JyZWxzZTsKLQkJfQotCQl3aGlsZSgtLW1heGxlbiAmJiAhYnVmZmVyX2JvdW5kYXJ5KGJoX21hcCkpIHsKLQkJCXU2NCBlYmxvY2s7Ci0KLQkJCW1wLm1wX2xpc3RbZW5kX29mX21ldGFkYXRhXSsrOwotCQkJYm91bmRhcnkgPSBsb29rdXBfYmxvY2soaXAsIGJoLCBlbmRfb2ZfbWV0YWRhdGEsICZtcCwgMCwgJm5ldywgJmVibG9jayk7Ci0JCQlpZiAoZWJsb2NrICE9ICsrZGJsb2NrKQotCQkJCWJyZWFrOwotCQkJYmhfbWFwLT5iX3NpemUgKz0gKDEgPDwgaW5vZGUtPmlfYmxrYml0cyk7Ci0JCQlpZiAoYm91bmRhcnkpCi0JCQkJc2V0X2J1ZmZlcl9ib3VuZGFyeShiaF9tYXApOwotCQl9Ci0JfQotb3V0X2JyZWxzZToKLQlicmVsc2UoYmgpOwotb3V0X29rOgotCWVycm9yID0gMDsKLW91dF9mYWlsOgotCWlmIChkaWJoKQotCQlicmVsc2UoZGliaCk7Ci0JYm1hcF91bmxvY2soaW5vZGUsIGNyZWF0ZSk7Ci0JcmV0dXJuIGVycm9yOworCS8qIEF0IHRoaXMgcG9pbnQgcmV0IGlzIHRoZSB0cmVlIGRlcHRoIG9mIGFscmVhZHkgYWxsb2NhdGVkIGJsb2NrcyAqLworCXJldCA9IGdmczJfYm1hcF9hbGxvYyhpbm9kZSwgbGJsb2NrLCBiaF9tYXAsICZtcCwgcmV0LCBoZWlnaHQsIG1heGxlbik7CisJZ290byBvdXQ7CiB9CiAKKy8qCisgKiBEZXByZWNhdGVkOiBkbyBub3QgdXNlIGluIG5ldyBjb2RlCisgKi8KIGludCBnZnMyX2V4dGVudF9tYXAoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGxibG9jaywgaW50ICpuZXcsIHU2NCAqZGJsb2NrLCB1bnNpZ25lZCAqZXh0bGVuKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCBiaCA9IHsgLmJfc3RhdGUgPSAwLCAuYl9ibG9ja25yID0gMCB9OwpAQCAtNTU4LDcgKzY1NCw3IEBACiAJQlVHX09OKCFkYmxvY2spOwogCUJVR19PTighbmV3KTsKIAotCWJoLmJfc2l6ZSA9IDEgPDwgKGlub2RlLT5pX2Jsa2JpdHMgKyA1KTsKKwliaC5iX3NpemUgPSAxIDw8IChpbm9kZS0+aV9ibGtiaXRzICsgKGNyZWF0ZSA/IDAgOiA1KSk7CiAJcmV0ID0gZ2ZzMl9ibG9ja19tYXAoaW5vZGUsIGxibG9jaywgJmJoLCBjcmVhdGUpOwogCSpleHRsZW4gPSBiaC5iX3NpemUgPj4gaW5vZGUtPmlfYmxrYml0czsKIAkqZGJsb2NrID0gYmguYl9ibG9ja25yOwpAQCAtNjIxLDcgKzcxNyw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWlmIChoZWlnaHQgPCBpcC0+aV9kaS5kaV9oZWlnaHQgLSAxKQorCWlmIChoZWlnaHQgPCBpcC0+aV9oZWlnaHQgLSAxKQogCQlmb3IgKDsgdG9wIDwgYm90dG9tOyB0b3ArKywgZmlyc3QgPSAwKSB7CiAJCQlpZiAoISp0b3ApCiAJCQkJY29udGludWU7CkBAIC02NzksNyArNzc1LDcgQEAKIAkJc20tPnNtX2ZpcnN0ID0gMDsKIAl9CiAKLQltZXRhZGF0YSA9IChoZWlnaHQgIT0gaXAtPmlfZGkuZGlfaGVpZ2h0IC0gMSk7CisJbWV0YWRhdGEgPSAoaGVpZ2h0ICE9IGlwLT5pX2hlaWdodCAtIDEpOwogCWlmIChtZXRhZGF0YSkKIAkJcmV2b2tlcyA9IChoZWlnaHQpID8gc2RwLT5zZF9pbnB0cnMgOiBzZHAtPnNkX2RpcHRyczsKIApAQCAtNzEzLDcgKzgwOSw3IEBACiAJZWxzZQogCQlnb3RvIG91dDsgLyogTm90aGluZyB0byBkbyAqLwogCi0JZ2ZzMl9ybGlzdF9hbGxvYygmcmxpc3QsIExNX1NUX0VYQ0xVU0lWRSwgMCk7CisJZ2ZzMl9ybGlzdF9hbGxvYygmcmxpc3QsIExNX1NUX0VYQ0xVU0lWRSk7CiAKIAlmb3IgKHggPSAwOyB4IDwgcmxpc3QucmxfcmdycHM7IHgrKykgewogCQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOwpAQCAtNzYwLDEwICs4NTYsNyBAQAogCQl9CiAKIAkJKnAgPSAwOwotCQlpZiAoIWlwLT5pX2RpLmRpX2Jsb2NrcykKLQkJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7Ci0JCWlwLT5pX2RpLmRpX2Jsb2Nrcy0tOwotCQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKTsKKwkJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgLTEpOwogCX0KIAlpZiAoYnN0YXJ0KSB7CiAJCWlmIChtZXRhZGF0YSkKQEAgLTgwNCwxOSArODk3LDE2IEBACiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CiAJc3RydWN0IGdmczJfYWxsb2MgKmFsOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKLQl1bnNpZ25lZCBpbnQgaDsKIAlpbnQgZXJyb3I7CiAKIAlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKKwlpZiAoIWFsKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CisJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2tfY2hlY2soaXApOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKLQllcnJvciA9IGdmczJfcXVvdGFfY2hlY2soaXAsIGlwLT5pX2lub2RlLmlfdWlkLCBpcC0+aV9pbm9kZS5pX2dpZCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ndW5sb2NrX3E7Ci0KIAlhbC0+YWxfcmVxdWVzdGVkID0gc2RwLT5zZF9tYXhfaGVpZ2h0ICsgUkVTX0RBVEE7CiAKIAllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlKGlwKTsKQEAgLTgyOSwzNCArOTE5LDI1IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9pcHJlczsKIAorCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZW5kX3RyYW5zOworCiAJaWYgKHNpemUgPiBzZHAtPnNkX3NiLnNiX2JzaXplIC0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpIHsKIAkJaWYgKGdmczJfaXNfc3R1ZmZlZChpcCkpIHsKIAkJCWVycm9yID0gZ2ZzMl91bnN0dWZmX2Rpbm9kZShpcCwgTlVMTCk7CiAJCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfZW5kX3RyYW5zOwotCQl9Ci0KLQkJaCA9IGNhbGNfdHJlZV9oZWlnaHQoaXAsIHNpemUpOwotCQlpZiAoaXAtPmlfZGkuZGlfaGVpZ2h0IDwgaCkgewotCQkJZG93bl93cml0ZSgmaXAtPmlfcndfbXV0ZXgpOwotCQkJZXJyb3IgPSBidWlsZF9oZWlnaHQoJmlwLT5pX2lub2RlLCBoKTsKLQkJCXVwX3dyaXRlKCZpcC0+aV9yd19tdXRleCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfZW5kX3RyYW5zOworCQkJCWdvdG8gb3V0X2JyZWxzZTsKIAkJfQogCX0KIAogCWlwLT5pX2RpLmRpX3NpemUgPSBzaXplOwogCWlwLT5pX2lub2RlLmlfbXRpbWUgPSBpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0KIAlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CiAJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwotCWJyZWxzZShkaWJoKTsKIAorb3V0X2JyZWxzZToKKwlicmVsc2UoZGliaCk7CiBvdXRfZW5kX3RyYW5zOgogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiBvdXRfaXByZXM6CkBAIC05ODYsNyArMTA2Nyw4IEBACiAKIHN0YXRpYyBpbnQgdHJ1bmNfZGVhbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHU2NCBzaXplKQogewotCXVuc2lnbmVkIGludCBoZWlnaHQgPSBpcC0+aV9kaS5kaV9oZWlnaHQ7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CisJdW5zaWduZWQgaW50IGhlaWdodCA9IGlwLT5pX2hlaWdodDsKIAl1NjQgbGJsb2NrOwogCXN0cnVjdCBtZXRhcGF0aCBtcDsKIAlpbnQgZXJyb3I7CkBAIC05OTQsMTAgKzEwNzYsMTEgQEAKIAlpZiAoIXNpemUpCiAJCWxibG9jayA9IDA7CiAJZWxzZQotCQlsYmxvY2sgPSAoc2l6ZSAtIDEpID4+IEdGUzJfU0IoJmlwLT5pX2lub2RlKS0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CisJCWxibG9jayA9IChzaXplIC0gMSkgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKIAotCWZpbmRfbWV0YXBhdGgoaXAsIGxibG9jaywgJm1wKTsKLQlnZnMyX2FsbG9jX2dldChpcCk7CisJZmluZF9tZXRhcGF0aChzZHAsIGxibG9jaywgJm1wLCBpcC0+aV9oZWlnaHQpOworCWlmICghZ2ZzMl9hbGxvY19nZXQoaXApKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CiAJaWYgKGVycm9yKQpAQCAtMTAzNywxMCArMTEyMCw4IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFpcC0+aV9kaS5kaV9zaXplKSB7Ci0JCWlwLT5pX2RpLmRpX2hlaWdodCA9IDA7Ci0JCWlwLT5pX2RpLmRpX2dvYWxfbWV0YSA9Ci0JCQlpcC0+aV9kaS5kaV9nb2FsX2RhdGEgPQotCQkJaXAtPmlfbm9fYWRkcjsKKwkJaXAtPmlfaGVpZ2h0ID0gMDsKKwkJaXAtPmlfZ29hbCA9IGlwLT5pX25vX2FkZHI7CiAJCWdmczJfYnVmZmVyX2NsZWFyX3RhaWwoZGliaCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOwogCX0KIAlpcC0+aV9pbm9kZS5pX210aW1lID0gaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKQEAgLTExOTcsMTAgKzEyNzgsOSBAQAogCQkJICAgICAgdW5zaWduZWQgaW50IGxlbiwgaW50ICphbGxvY19yZXF1aXJlZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKLQl1NjQgbGJsb2NrLCBsYmxvY2tfc3RvcCwgZGJsb2NrOwotCXUzMiBleHRsZW47Ci0JaW50IG5ldyA9IDA7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgYmg7CisJdW5zaWduZWQgaW50IHNoaWZ0OworCXU2NCBsYmxvY2ssIGxibG9ja19zdG9wLCBzaXplOwogCiAJKmFsbG9jX3JlcXVpcmVkID0gMDsKIApAQCAtMTIxNCw2ICsxMjk0LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJKmFsbG9jX3JlcXVpcmVkID0gMTsKKwlzaGlmdCA9IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CiAJaWYgKGdmczJfaXNfZGlyKGlwKSkgewogCQl1bnNpZ25lZCBpbnQgYnNpemUgPSBzZHAtPnNkX2pic2l6ZTsKIAkJbGJsb2NrID0gb2Zmc2V0OwpAQCAtMTIyMSwyNyArMTMwMywyNSBAQAogCQlsYmxvY2tfc3RvcCA9IG9mZnNldCArIGxlbiArIGJzaXplIC0gMTsKIAkJZG9fZGl2KGxibG9ja19zdG9wLCBic2l6ZSk7CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgaW50IHNoaWZ0ID0gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKIAkJdTY0IGVuZF9vZl9maWxlID0gKGlwLT5pX2RpLmRpX3NpemUgKyBzZHAtPnNkX3NiLnNiX2JzaXplIC0gMSkgPj4gc2hpZnQ7CiAJCWxibG9jayA9IG9mZnNldCA+PiBzaGlmdDsKIAkJbGJsb2NrX3N0b3AgPSAob2Zmc2V0ICsgbGVuICsgc2RwLT5zZF9zYi5zYl9ic2l6ZSAtIDEpID4+IHNoaWZ0OwotCQlpZiAobGJsb2NrX3N0b3AgPiBlbmRfb2ZfZmlsZSkgewotCQkJKmFsbG9jX3JlcXVpcmVkID0gMTsKKwkJaWYgKGxibG9ja19zdG9wID4gZW5kX29mX2ZpbGUpCiAJCQlyZXR1cm4gMDsKLQkJfQogCX0KIAotCWZvciAoOyBsYmxvY2sgPCBsYmxvY2tfc3RvcDsgbGJsb2NrICs9IGV4dGxlbikgewotCQllcnJvciA9IGdmczJfZXh0ZW50X21hcCgmaXAtPmlfaW5vZGUsIGxibG9jaywgJm5ldywgJmRibG9jaywgJmV4dGxlbik7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQotCQlpZiAoIWRibG9jaykgewotCQkJKmFsbG9jX3JlcXVpcmVkID0gMTsKKwlzaXplID0gKGxibG9ja19zdG9wIC0gbGJsb2NrKSA8PCBzaGlmdDsKKwlkbyB7CisJCWJoLmJfc3RhdGUgPSAwOworCQliaC5iX3NpemUgPSBzaXplOworCQlnZnMyX2Jsb2NrX21hcCgmaXAtPmlfaW5vZGUsIGxibG9jaywgJmJoLCAwKTsKKwkJaWYgKCFidWZmZXJfbWFwcGVkKCZiaCkpCiAJCQlyZXR1cm4gMDsKLQkJfQotCX0KKwkJc2l6ZSAtPSBiaC5iX3NpemU7CisJCWxibG9jayArPSAoYmguYl9zaXplID4+IGlwLT5pX2lub2RlLmlfYmxrYml0cyk7CisJfSB3aGlsZShzaXplID4gMCk7CiAKKwkqYWxsb2NfcmVxdWlyZWQgPSAwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Rpci5jIGIvZnMvZ2ZzMi9kaXIuYwppbmRleCBjMzQ3MDk1Li5lZWQwNDBkIDEwMDY0NAotLS0gYS9mcy9nZnMyL2Rpci5jCisrKyBiL2ZzL2dmczIvZGlyLmMKQEAgLTE1OSw2ICsxNTksNyBAQAogCXVuc2lnbmVkIGludCBvOwogCWludCBjb3BpZWQgPSAwOwogCWludCBlcnJvciA9IDA7CisJaW50IG5ldyA9IDA7CiAKIAlpZiAoIXNpemUpCiAJCXJldHVybiAwOwpAQCAtMTgzLDcgKzE4NCw2IEBACiAJd2hpbGUgKGNvcGllZCA8IHNpemUpIHsKIAkJdW5zaWduZWQgaW50IGFtb3VudDsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQkJaW50IG5ldyA9IDA7CiAKIAkJYW1vdW50ID0gc2l6ZSAtIGNvcGllZDsKIAkJaWYgKGFtb3VudCA+IHNkcC0+c2Rfc2Iuc2JfYnNpemUgLSBvKQpAQCAtNzU3LDcgKzc1Nyw3IEBACiAKIAlpZiAoaXAtPmlfZGkuZGlfZmxhZ3MgJiBHRlMyX0RJRl9FWEhBU0gpIHsKIAkJc3RydWN0IGdmczJfbGVhZiAqbGVhZjsKLQkJdW5zaWduZWQgaHNpemUgPSAxIDw8IGlwLT5pX2RpLmRpX2RlcHRoOworCQl1bnNpZ25lZCBoc2l6ZSA9IDEgPDwgaXAtPmlfZGVwdGg7CiAJCXVuc2lnbmVkIGluZGV4OwogCQl1NjQgbG47CiAJCWlmIChoc2l6ZSAqIHNpemVvZih1NjQpICE9IGlwLT5pX2RpLmRpX3NpemUpIHsKQEAgLTc2NSw3ICs3NjUsNyBAQAogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJCX0KIAotCQlpbmRleCA9IG5hbWUtPmhhc2ggPj4gKDMyIC0gaXAtPmlfZGkuZGlfZGVwdGgpOworCQlpbmRleCA9IG5hbWUtPmhhc2ggPj4gKDMyIC0gaXAtPmlfZGVwdGgpOwogCQllcnJvciA9IGdldF9maXJzdF9sZWFmKGlwLCBpbmRleCwgJmJoKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwpAQCAtODAzLDE0ICs4MDMsMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2ZzMl9sZWFmICpuZXdfbGVhZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwYmgsIHUxNiBkZXB0aCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXU2NCBibiA9IGdmczJfYWxsb2NfbWV0YShpcCk7CisJdW5zaWduZWQgaW50IG4gPSAxOworCXU2NCBibiA9IGdmczJfYWxsb2NfYmxvY2soaXAsICZuKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gZ2ZzMl9tZXRhX25ldyhpcC0+aV9nbCwgYm4pOwogCXN0cnVjdCBnZnMyX2xlYWYgKmxlYWY7CiAJc3RydWN0IGdmczJfZGlyZW50ICpkZW50OwogCXN0cnVjdCBxc3RyIG5hbWUgPSB7IC5uYW1lID0gIiIsIC5sZW4gPSAwLCAuaGFzaCA9IDAgfTsKIAlpZiAoIWJoKQogCQlyZXR1cm4gTlVMTDsKLQorCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKEdGUzJfU0IoaW5vZGUpLCBibiwgMSk7CiAJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGJoLCAxKTsKIAlnZnMyX21ldGF0eXBlX3NldChiaCwgR0ZTMl9NRVRBVFlQRV9MRiwgR0ZTMl9GT1JNQVRfTEYpOwogCWxlYWYgPSAoc3RydWN0IGdmczJfbGVhZiAqKWJoLT5iX2RhdGE7CkBAIC05MDUsMTIgKzkwNiwxMSBAQAogCQkqbHAgPSBjcHVfdG9fYmU2NChibik7CiAKIAlkaXAtPmlfZGkuZGlfc2l6ZSA9IHNkcC0+c2Rfc2Iuc2JfYnNpemUgLyAyOwotCWRpcC0+aV9kaS5kaV9ibG9ja3MrKzsKLQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmRpcC0+aV9pbm9kZSk7CisJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZkaXAtPmlfaW5vZGUsIDEpOwogCWRpcC0+aV9kaS5kaV9mbGFncyB8PSBHRlMyX0RJRl9FWEhBU0g7CiAKIAlmb3IgKHggPSBzZHAtPnNkX2hhc2hfcHRycywgeSA9IC0xOyB4OyB4ID4+PSAxLCB5KyspIDsKLQlkaXAtPmlfZGkuZGlfZGVwdGggPSB5OworCWRpcC0+aV9kZXB0aCA9IHk7CiAKIAlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBkaWJoLT5iX2RhdGEpOwogCkBAIC05NDEsNyArOTQxLDcgQEAKIAlpbnQgeCwgbW92ZWQgPSAwOwogCWludCBlcnJvcjsKIAotCWluZGV4ID0gbmFtZS0+aGFzaCA+PiAoMzIgLSBkaXAtPmlfZGkuZGlfZGVwdGgpOworCWluZGV4ID0gbmFtZS0+aGFzaCA+PiAoMzIgLSBkaXAtPmlfZGVwdGgpOwogCWVycm9yID0gZ2V0X2xlYWZfbnIoZGlwLCBpbmRleCwgJmxlYWZfbm8pOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtOTUyLDcgKzk1Miw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCW9sZWFmID0gKHN0cnVjdCBnZnMyX2xlYWYgKilvYmgtPmJfZGF0YTsKLQlpZiAoZGlwLT5pX2RpLmRpX2RlcHRoID09IGJlMTZfdG9fY3B1KG9sZWFmLT5sZl9kZXB0aCkpIHsKKwlpZiAoZGlwLT5pX2RlcHRoID09IGJlMTZfdG9fY3B1KG9sZWFmLT5sZl9kZXB0aCkpIHsKIAkJYnJlbHNlKG9iaCk7CiAJCXJldHVybiAxOyAvKiBjYW4ndCBzcGxpdCAqLwogCX0KQEAgLTk2NywxMCArOTY3LDEwIEBACiAJYm4gPSBuYmgtPmJfYmxvY2tucjsKIAogCS8qICBDb21wdXRlIHRoZSBzdGFydCBhbmQgbGVuIG9mIGxlYWYgcG9pbnRlcnMgaW4gdGhlIGhhc2ggdGFibGUuICAqLwotCWxlbiA9IDEgPDwgKGRpcC0+aV9kaS5kaV9kZXB0aCAtIGJlMTZfdG9fY3B1KG9sZWFmLT5sZl9kZXB0aCkpOworCWxlbiA9IDEgPDwgKGRpcC0+aV9kZXB0aCAtIGJlMTZfdG9fY3B1KG9sZWFmLT5sZl9kZXB0aCkpOwogCWhhbGZfbGVuID0gbGVuID4+IDE7CiAJaWYgKCFoYWxmX2xlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJkaV9kZXB0aCAldSBsZl9kZXB0aCAldSBpbmRleCAldVxuIiwgZGlwLT5pX2RpLmRpX2RlcHRoLCBiZTE2X3RvX2NwdShvbGVhZi0+bGZfZGVwdGgpLCBpbmRleCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlfZGVwdGggJXUgbGZfZGVwdGggJXUgaW5kZXggJXVcbiIsIGRpcC0+aV9kZXB0aCwgYmUxNl90b19jcHUob2xlYWYtPmxmX2RlcHRoKSwgaW5kZXgpOwogCQlnZnMyX2NvbnNpc3RfaW5vZGUoZGlwKTsKIAkJZXJyb3IgPSAtRUlPOwogCQlnb3RvIGZhaWxfYnJlbHNlOwpAQCAtOTk3LDcgKzk5Nyw3IEBACiAJa2ZyZWUobHApOwogCiAJLyogIENvbXB1dGUgdGhlIGRpdmlkZXIgICovCi0JZGl2aWRlciA9IChzdGFydCArIGhhbGZfbGVuKSA8PCAoMzIgLSBkaXAtPmlfZGkuZGlfZGVwdGgpOworCWRpdmlkZXIgPSAoc3RhcnQgKyBoYWxmX2xlbikgPDwgKDMyIC0gZGlwLT5pX2RlcHRoKTsKIAogCS8qICBDb3B5IHRoZSBlbnRyaWVzICAqLwogCWRpcmVudF9maXJzdChkaXAsIG9iaCwgJmRlbnQpOwpAQCAtMTAyMSwxMyArMTAyMSwxMyBAQAogCiAJCQluZXctPmRlX2ludW0gPSBkZW50LT5kZV9pbnVtOyAvKiBObyBlbmRpYW4gd29ycmllcyAqLwogCQkJbmV3LT5kZV90eXBlID0gZGVudC0+ZGVfdHlwZTsgLyogTm8gZW5kaWFuIHdvcnJpZXMgKi8KLQkJCW5sZWFmLT5sZl9lbnRyaWVzID0gY3B1X3RvX2JlMTYoYmUxNl90b19jcHUobmxlYWYtPmxmX2VudHJpZXMpKzEpOworCQkJYmUxNl9hZGRfY3B1KCZubGVhZi0+bGZfZW50cmllcywgMSk7CiAKIAkJCWRpcmVudF9kZWwoZGlwLCBvYmgsIHByZXYsIGRlbnQpOwogCiAJCQlpZiAoIW9sZWFmLT5sZl9lbnRyaWVzKQogCQkJCWdmczJfY29uc2lzdF9pbm9kZShkaXApOwotCQkJb2xlYWYtPmxmX2VudHJpZXMgPSBjcHVfdG9fYmUxNihiZTE2X3RvX2NwdShvbGVhZi0+bGZfZW50cmllcyktMSk7CisJCQliZTE2X2FkZF9jcHUoJm9sZWFmLT5sZl9lbnRyaWVzLCAtMSk7CiAKIAkJCWlmICghcHJldikKIAkJCQlwcmV2ID0gZGVudDsKQEAgLTEwNDQsOCArMTA0NCw3IEBACiAJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGRpcCwgJmRpYmgpOwogCWlmICghZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoR0ZTMl9TQigmZGlwLT5pX2lub2RlKSwgIWVycm9yKSkgewogCQlnZnMyX3RyYW5zX2FkZF9iaChkaXAtPmlfZ2wsIGRpYmgsIDEpOwotCQlkaXAtPmlfZGkuZGlfYmxvY2tzKys7Ci0JCWdmczJfc2V0X2lub2RlX2Jsb2NrcygmZGlwLT5pX2lub2RlKTsKKwkJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZkaXAtPmlfaW5vZGUsIDEpOwogCQlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBkaWJoLT5iX2RhdGEpOwogCQlicmVsc2UoZGliaCk7CiAJfQpAQCAtMTA4Miw3ICsxMDgxLDcgQEAKIAlpbnQgeDsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaHNpemUgPSAxIDw8IGRpcC0+aV9kaS5kaV9kZXB0aDsKKwloc2l6ZSA9IDEgPDwgZGlwLT5pX2RlcHRoOwogCWlmIChoc2l6ZSAqIHNpemVvZih1NjQpICE9IGRpcC0+aV9kaS5kaV9zaXplKSB7CiAJCWdmczJfY29uc2lzdF9pbm9kZShkaXApOwogCQlyZXR1cm4gLUVJTzsKQEAgLTEwOTAsNyArMTA4OSw3IEBACiAKIAkvKiAgQWxsb2NhdGUgYm90aCB0aGUgImZyb20iIGFuZCAidG8iIGJ1ZmZlcnMgaW4gb25lIGJpZyBjaHVuayAgKi8KIAotCWJ1ZiA9IGtjYWxsb2MoMywgc2RwLT5zZF9oYXNoX2JzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9GQUlMKTsKKwlidWYgPSBrY2FsbG9jKDMsIHNkcC0+c2RfaGFzaF9ic2l6ZSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwogCiAJZm9yIChibG9jayA9IGRpcC0+aV9kaS5kaV9zaXplID4+IHNkcC0+c2RfaGFzaF9ic2l6ZV9zaGlmdDsgYmxvY2stLTspIHsKIAkJZXJyb3IgPSBnZnMyX2Rpcl9yZWFkX2RhdGEoZGlwLCAoY2hhciAqKWJ1ZiwKQEAgLTExMjUsNyArMTEyNCw3IEBACiAKIAllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoZGlwLCAmZGliaCk7CiAJaWYgKCFnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFlcnJvcikpIHsKLQkJZGlwLT5pX2RpLmRpX2RlcHRoKys7CisJCWRpcC0+aV9kZXB0aCsrOwogCQlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBkaWJoLT5iX2RhdGEpOwogCQlicmVsc2UoZGliaCk7CiAJfQpAQCAtMTM3MCwxNiArMTM2OSwxNiBAQAogCWludCBlcnJvciA9IDA7CiAJdW5zaWduZWQgZGVwdGggPSAwOwogCi0JaHNpemUgPSAxIDw8IGRpcC0+aV9kaS5kaV9kZXB0aDsKKwloc2l6ZSA9IDEgPDwgZGlwLT5pX2RlcHRoOwogCWlmIChoc2l6ZSAqIHNpemVvZih1NjQpICE9IGRpcC0+aV9kaS5kaV9zaXplKSB7CiAJCWdmczJfY29uc2lzdF9pbm9kZShkaXApOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAloYXNoID0gZ2ZzMl9kaXJfb2Zmc2V0Mmhhc2goKm9mZnNldCk7Ci0JaW5kZXggPSBoYXNoID4+ICgzMiAtIGRpcC0+aV9kaS5kaV9kZXB0aCk7CisJaW5kZXggPSBoYXNoID4+ICgzMiAtIGRpcC0+aV9kZXB0aCk7CiAKLQlscCA9IGttYWxsb2Moc2RwLT5zZF9oYXNoX2JzaXplLCBHRlBfS0VSTkVMKTsKKwlscCA9IGttYWxsb2Moc2RwLT5zZF9oYXNoX2JzaXplLCBHRlBfTk9GUyk7CiAJaWYgKCFscCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE0MDUsNyArMTQwNCw3IEBACiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOwogCi0JCWxlbiA9IDEgPDwgKGRpcC0+aV9kaS5kaV9kZXB0aCAtIGRlcHRoKTsKKwkJbGVuID0gMSA8PCAoZGlwLT5pX2RlcHRoIC0gZGVwdGgpOwogCQlpbmRleCA9IChpbmRleCAmIH4obGVuIC0gMSkpICsgbGVuOwogCX0KIApAQCAtMTQ0NCw3ICsxNDQzLDcgQEAKIAogCWVycm9yID0gLUVOT01FTTsKIAkvKiA5NiBpcyBtYXggbnVtYmVyIG9mIGRpcmVudHMgd2hpY2ggY2FuIGJlIHN0dWZmZWQgaW50byBhbiBpbm9kZSAqLwotCWRhcnIgPSBrbWFsbG9jKDk2ICogc2l6ZW9mKHN0cnVjdCBnZnMyX2RpcmVudCAqKSwgR0ZQX0tFUk5FTCk7CisJZGFyciA9IGttYWxsb2MoOTYgKiBzaXplb2Yoc3RydWN0IGdmczJfZGlyZW50ICopLCBHRlBfTk9GUyk7CiAJaWYgKGRhcnIpIHsKIAkJZy5wZGVudCA9IGRhcnI7CiAJCWcub2Zmc2V0ID0gMDsKQEAgLTE1NDksNyArMTU0OCw3IEBACiAJdTMyIGluZGV4OwogCXU2NCBibjsKIAotCWluZGV4ID0gbmFtZS0+aGFzaCA+PiAoMzIgLSBpcC0+aV9kaS5kaV9kZXB0aCk7CisJaW5kZXggPSBuYW1lLT5oYXNoID4+ICgzMiAtIGlwLT5pX2RlcHRoKTsKIAllcnJvciA9IGdldF9maXJzdF9sZWFmKGlwLCBpbmRleCwgJm9iaCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0xNTc5LDggKzE1NzgsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7Ci0JaXAtPmlfZGkuZGlfYmxvY2tzKys7Ci0JZ2ZzMl9zZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSk7CisJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgMSk7CiAJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBiaC0+Yl9kYXRhKTsKIAlicmVsc2UoYmgpOwogCXJldHVybiAwOwpAQCAtMTYxNiw3ICsxNjE0LDcgQEAKIAkJCWRlbnQtPmRlX3R5cGUgPSBjcHVfdG9fYmUxNih0eXBlKTsKIAkJCWlmIChpcC0+aV9kaS5kaV9mbGFncyAmIEdGUzJfRElGX0VYSEFTSCkgewogCQkJCWxlYWYgPSAoc3RydWN0IGdmczJfbGVhZiAqKWJoLT5iX2RhdGE7Ci0JCQkJbGVhZi0+bGZfZW50cmllcyA9IGNwdV90b19iZTE2KGJlMTZfdG9fY3B1KGxlYWYtPmxmX2VudHJpZXMpICsgMSk7CisJCQkJYmUxNl9hZGRfY3B1KCZsZWFmLT5sZl9lbnRyaWVzLCAxKTsKIAkJCX0KIAkJCWJyZWxzZShiaCk7CiAJCQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZiaCk7CkBAIC0xNjQxLDcgKzE2MzksNyBAQAogCQkJY29udGludWU7CiAJCWlmIChlcnJvciA8IDApCiAJCQlicmVhazsKLQkJaWYgKGlwLT5pX2RpLmRpX2RlcHRoIDwgR0ZTMl9ESVJfTUFYX0RFUFRIKSB7CisJCWlmIChpcC0+aV9kZXB0aCA8IEdGUzJfRElSX01BWF9ERVBUSCkgewogCQkJZXJyb3IgPSBkaXJfZG91YmxlX2V4aGFzaChpcCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJYnJlYWs7CkBAIC0xNzg1LDEzICsxNzgzLDEzIEBACiAJdTY0IGxlYWZfbm87CiAJaW50IGVycm9yID0gMDsKIAotCWhzaXplID0gMSA8PCBkaXAtPmlfZGkuZGlfZGVwdGg7CisJaHNpemUgPSAxIDw8IGRpcC0+aV9kZXB0aDsKIAlpZiAoaHNpemUgKiBzaXplb2YodTY0KSAhPSBkaXAtPmlfZGkuZGlfc2l6ZSkgewogCQlnZnMyX2NvbnNpc3RfaW5vZGUoZGlwKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JbHAgPSBrbWFsbG9jKHNkcC0+c2RfaGFzaF9ic2l6ZSwgR0ZQX0tFUk5FTCk7CisJbHAgPSBrbWFsbG9jKHNkcC0+c2RfaGFzaF9ic2l6ZSwgR0ZQX05PRlMpOwogCWlmICghbHApCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xODE3LDcgKzE4MTUsNyBAQAogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gb3V0OwogCQkJbGVhZiA9IChzdHJ1Y3QgZ2ZzMl9sZWFmICopYmgtPmJfZGF0YTsKLQkJCWxlbiA9IDEgPDwgKGRpcC0+aV9kaS5kaV9kZXB0aCAtIGJlMTZfdG9fY3B1KGxlYWYtPmxmX2RlcHRoKSk7CisJCQlsZW4gPSAxIDw8IChkaXAtPmlfZGVwdGggLSBiZTE2X3RvX2NwdShsZWFmLT5sZl9kZXB0aCkpOwogCQkJYnJlbHNlKGJoKTsKIAogCQkJZXJyb3IgPSBsYyhkaXAsIGluZGV4LCBsZW4sIGxlYWZfbm8sIGRhdGEpOwpAQCAtMTg2NiwxNSArMTg2NCwxOCBAQAogCiAJbWVtc2V0KCZybGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3JncnBfbGlzdCkpOwogCi0JaHQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWh0ID0ga3phbGxvYyhzaXplLCBHRlBfTk9GUyk7CiAJaWYgKCFodCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlnZnMyX2FsbG9jX2dldChkaXApOworCWlmICghZ2ZzMl9hbGxvY19nZXQoZGlwKSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGRpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOwogCWlmIChlcnJvcikKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3B1dDsKIAogCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZkaXAtPmlfYWxsb2MtPmFsX3JpX2doKTsKIAlpZiAoZXJyb3IpCkBAIC0xODk0LDcgKzE4OTUsNyBAQAogCQlsX2Jsb2NrcysrOwogCX0KIAotCWdmczJfcmxpc3RfYWxsb2MoJnJsaXN0LCBMTV9TVF9FWENMVVNJVkUsIDApOworCWdmczJfcmxpc3RfYWxsb2MoJnJsaXN0LCBMTV9TVF9FWENMVVNJVkUpOwogCiAJZm9yICh4ID0gMDsgeCA8IHJsaXN0LnJsX3JncnBzOyB4KyspIHsKIAkJc3RydWN0IGdmczJfcmdycGQgKnJnZDsKQEAgLTE5MjEsMTEgKzE5MjIsNyBAQAogCQlicmVsc2UoYmgpOwogCiAJCWdmczJfZnJlZV9tZXRhKGRpcCwgYmxrLCAxKTsKLQotCQlpZiAoIWRpcC0+aV9kaS5kaV9ibG9ja3MpCi0JCQlnZnMyX2NvbnNpc3RfaW5vZGUoZGlwKTsKLQkJZGlwLT5pX2RpLmRpX2Jsb2Nrcy0tOwotCQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmRpcC0+aV9pbm9kZSk7CisJCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmZGlwLT5pX2lub2RlLCAtMSk7CiAJfQogCiAJZXJyb3IgPSBnZnMyX2Rpcl93cml0ZV9kYXRhKGRpcCwgaHQsIGluZGV4ICogc2l6ZW9mKHU2NCksIHNpemUpOwpAQCAtMTk1Miw4ICsxOTQ5LDkgQEAKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZGlwLT5pX2FsbG9jLT5hbF9yaV9naCk7CiBvdXRfcXM6CiAJZ2ZzMl9xdW90YV91bmhvbGQoZGlwKTsKLW91dDoKK291dF9wdXQ6CiAJZ2ZzMl9hbGxvY19wdXQoZGlwKTsKK291dDoKIAlrZnJlZShodCk7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYXR0ci5jIGIvZnMvZ2ZzMi9lYXR0ci5jCmluZGV4IGJlZTk5NzAuLmUzZjc2ZjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZWF0dHIuYworKysgYi9mcy9nZnMyL2VhdHRyLmMKQEAgLTI3NywxMCArMjc3LDcgQEAKIAkJfQogCiAJCSpkYXRhcHRycyA9IDA7Ci0JCWlmICghaXAtPmlfZGkuZGlfYmxvY2tzKQotCQkJZ2ZzMl9jb25zaXN0X2lub2RlKGlwKTsKLQkJaXAtPmlfZGkuZGlfYmxvY2tzLS07Ci0JCWdmczJfc2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpOworCQlnZnMyX2FkZF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlLCAtMSk7CiAJfQogCWlmIChic3RhcnQpCiAJCWdmczJfZnJlZV9tZXRhKGlwLCBic3RhcnQsIGJsZW4pOwpAQCAtMzIxLDYgKzMxOCw4IEBACiAJaW50IGVycm9yOwogCiAJYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7CisJaWYgKCFhbCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAllcnJvciA9IGdmczJfcXVvdGFfaG9sZChpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOwogCWlmIChlcnJvcikKQEAgLTQ0OSw3ICs0NDgsNyBAQAogCXVuc2lnbmVkIGludCB4OwogCWludCBlcnJvciA9IDA7CiAKLQliaCA9IGtjYWxsb2MobnB0cnMsIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksIEdGUF9LRVJORUwpOworCWJoID0ga2NhbGxvYyhucHRycywgc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwgR0ZQX05PRlMpOwogCWlmICghYmgpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01ODIsMTAgKzU4MSwxMSBAQAogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwogCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWE7CisJdW5zaWduZWQgaW50IG4gPSAxOwogCXU2NCBibG9jazsKIAotCWJsb2NrID0gZ2ZzMl9hbGxvY19tZXRhKGlwKTsKLQorCWJsb2NrID0gZ2ZzMl9hbGxvY19ibG9jayhpcCwgJm4pOworCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxvY2ssIDEpOwogCSpiaHAgPSBnZnMyX21ldGFfbmV3KGlwLT5pX2dsLCBibG9jayk7CiAJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsICpiaHAsIDEpOwogCWdmczJfbWV0YXR5cGVfc2V0KCpiaHAsIEdGUzJfTUVUQVRZUEVfRUEsIEdGUzJfRk9STUFUX0VBKTsKQEAgLTU5Nyw4ICs1OTcsNyBAQAogCWVhLT5lYV9mbGFncyA9IEdGUzJfRUFGTEFHX0xBU1Q7CiAJZWEtPmVhX251bV9wdHJzID0gMDsKIAotCWlwLT5pX2RpLmRpX2Jsb2NrcysrOwotCWdmczJfc2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpOworCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NDIsMTUgKzY0MSwxNSBAQAogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAkJCXU2NCBibG9jazsKIAkJCWludCBtaF9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKTsKKwkJCXVuc2lnbmVkIGludCBuID0gMTsKIAotCQkJYmxvY2sgPSBnZnMyX2FsbG9jX21ldGEoaXApOwotCisJCQlibG9jayA9IGdmczJfYWxsb2NfYmxvY2soaXAsICZuKTsKKwkJCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxvY2ssIDEpOwogCQkJYmggPSBnZnMyX21ldGFfbmV3KGlwLT5pX2dsLCBibG9jayk7CiAJCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmgsIDEpOwogCQkJZ2ZzMl9tZXRhdHlwZV9zZXQoYmgsIEdGUzJfTUVUQVRZUEVfRUQsIEdGUzJfRk9STUFUX0VEKTsKIAotCQkJaXAtPmlfZGkuZGlfYmxvY2tzKys7Ci0JCQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKTsKKwkJCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIDEpOwogCiAJCQljb3B5ID0gZGF0YV9sZW4gPiBzZHAtPnNkX2pic2l6ZSA/IHNkcC0+c2RfamJzaXplIDoKIAkJCQkJCQkgICBkYXRhX2xlbjsKQEAgLTY4NCwxNSArNjgzLDEzIEBACiAJaW50IGVycm9yOwogCiAJYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7CisJaWYgKCFhbCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnJvciA9IGdmczJfcXVvdGFfbG9jayhpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOworCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrX2NoZWNrKGlwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSBnZnMyX3F1b3RhX2NoZWNrKGlwLCBpcC0+aV9pbm9kZS5pX3VpZCwgaXAtPmlfaW5vZGUuaV9naWQpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZ3VubG9ja19xOwotCiAJYWwtPmFsX3JlcXVlc3RlZCA9IGJsa3M7CiAKIAllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlKGlwKTsKQEAgLTk2Niw5ICs5NjMsOSBAQAogCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgaW5kYmgsIDEpOwogCX0gZWxzZSB7CiAJCXU2NCBibGs7Ci0KLQkJYmxrID0gZ2ZzMl9hbGxvY19tZXRhKGlwKTsKLQorCQl1bnNpZ25lZCBpbnQgbiA9IDE7CisJCWJsayA9IGdmczJfYWxsb2NfYmxvY2soaXAsICZuKTsKKwkJZ2ZzMl90cmFuc19hZGRfdW5yZXZva2Uoc2RwLCBibGssIDEpOwogCQlpbmRiaCA9IGdmczJfbWV0YV9uZXcoaXAtPmlfZ2wsIGJsayk7CiAJCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBpbmRiaCwgMSk7CiAJCWdmczJfbWV0YXR5cGVfc2V0KGluZGJoLCBHRlMyX01FVEFUWVBFX0lOLCBHRlMyX0ZPUk1BVF9JTik7CkBAIC05NzgsOCArOTc1LDcgQEAKIAkJKmVhYmxrID0gY3B1X3RvX2JlNjQoaXAtPmlfZGkuZGlfZWF0dHIpOwogCQlpcC0+aV9kaS5kaV9lYXR0ciA9IGJsazsKIAkJaXAtPmlfZGkuZGlfZmxhZ3MgfD0gR0ZTMl9ESUZfRUFfSU5ESVJFQ1Q7Ci0JCWlwLT5pX2RpLmRpX2Jsb2NrcysrOwotCQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKTsKKwkJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgMSk7CiAKIAkJZWFibGsrKzsKIAl9CkBAIC0xMjEwLDcgKzEyMDYsNyBAQAogCXVuc2lnbmVkIGludCB4OwogCWludCBlcnJvcjsKIAotCWJoID0ga2NhbGxvYyhucHRycywgc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwgR0ZQX0tFUk5FTCk7CisJYmggPSBrY2FsbG9jKG5wdHJzLCBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopLCBHRlBfTk9GUyk7CiAJaWYgKCFiaCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEzNDcsNyArMTM0Myw3IEBACiAJZWxzZQogCQlnb3RvIG91dDsKIAotCWdmczJfcmxpc3RfYWxsb2MoJnJsaXN0LCBMTV9TVF9FWENMVVNJVkUsIDApOworCWdmczJfcmxpc3RfYWxsb2MoJnJsaXN0LCBMTV9TVF9FWENMVVNJVkUpOwogCiAJZm9yICh4ID0gMDsgeCA8IHJsaXN0LnJsX3JncnBzOyB4KyspIHsKIAkJc3RydWN0IGdmczJfcmdycGQgKnJnZDsKQEAgLTEzODcsMTAgKzEzODMsNyBAQAogCQl9CiAKIAkJKmVhYmxrID0gMDsKLQkJaWYgKCFpcC0+aV9kaS5kaV9ibG9ja3MpCi0JCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOwotCQlpcC0+aV9kaS5kaV9ibG9ja3MtLTsKLQkJZ2ZzMl9zZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSk7CisJCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIC0xKTsKIAl9CiAJaWYgKGJzdGFydCkKIAkJZ2ZzMl9mcmVlX21ldGEoaXAsIGJzdGFydCwgYmxlbik7CkBAIC0xNDQyLDEwICsxNDM1LDcgQEAKIAlnZnMyX2ZyZWVfbWV0YShpcCwgaXAtPmlfZGkuZGlfZWF0dHIsIDEpOwogCiAJaXAtPmlfZGkuZGlfZWF0dHIgPSAwOwotCWlmICghaXAtPmlfZGkuZGlfYmxvY2tzKQotCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOwotCWlwLT5pX2RpLmRpX2Jsb2Nrcy0tOwotCWdmczJfc2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpOworCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIC0xKTsKIAogCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwogCWlmICghZXJyb3IpIHsKQEAgLTE0NzQsNiArMTQ2NCw4IEBACiAJaW50IGVycm9yOwogCiAJYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7CisJaWYgKCFhbCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAllcnJvciA9IGdmczJfcXVvdGFfaG9sZChpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOwogCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCA3MTc1YTRkLi5kNjM2YjNlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJnbG9wcy5oIgogI2luY2x1ZGUgImlub2RlLmgiCi0jaW5jbHVkZSAibG0uaCIKICNpbmNsdWRlICJsb3BzLmgiCiAjaW5jbHVkZSAibWV0YV9pby5oIgogI2luY2x1ZGUgInF1b3RhLmgiCkBAIC0xODMsNyArMTgyLDggQEAKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7CiAJc3RydWN0IGlub2RlICphc3BhY2UgPSBnbC0+Z2xfYXNwYWNlOwogCi0JZ2ZzMl9sbV9wdXRfbG9jayhzZHAsIGdsLT5nbF9sb2NrKTsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKGdsLT5nbF9sb2NrKTsKIAogCWlmIChhc3BhY2UpCiAJCWdmczJfYXNwYWNlX3B1dChhc3BhY2UpOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgKgogICovCiAKLXZvaWQgZ2ZzMl9nbG9ja19ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3N0YXRpYyB2b2lkIGdmczJfZ2xvY2tfaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CiAJYXRvbWljX2luYygmZ2wtPmdsX3JlZik7CiB9CkBAIC0yOTMsNiArMjkzLDE2IEBACiAJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCitzdGF0aWMgaW50IGdmczJfbG1fZ2V0X2xvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKKwkJICAgICB2b2lkICoqbG9ja3ApCit7CisJaW50IGVycm9yID0gLUVJTzsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fZ2V0X2xvY2soCisJCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgbG9ja3ApOworCXJldHVybiBlcnJvcjsKK30KKwogLyoqCiAgKiBnZnMyX2dsb2NrX2dldCgpIC0gR2V0IGEgZ2xvY2ssIG9yIGNyZWF0ZSBvbmUgaWYgb25lIGRvZXNuJ3QgZXhpc3QKICAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKQEAgLTMzOCw4ICszNDgsNiBAQAogCWdsLT5nbF9pcCA9IDA7CiAJZ2wtPmdsX29wcyA9IGdsb3BzOwogCWdsLT5nbF9yZXFfZ2ggPSBOVUxMOwotCWdsLT5nbF9yZXFfYmggPSBOVUxMOwotCWdsLT5nbF92biA9IDA7CiAJZ2wtPmdsX3N0YW1wID0gamlmZmllczsKIAlnbC0+Z2xfdGNoYW5nZSA9IGppZmZpZXM7CiAJZ2wtPmdsX29iamVjdCA9IE5VTEw7CkBAIC01OTUsMTEgKzYwMywxMiBAQAogCQkJYmxvY2tlZCA9IHJxX211dGV4KGdoKTsKIAkJfSBlbHNlIGlmICh0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkgewogCQkJYmxvY2tlZCA9IHJxX2RlbW90ZShnbCk7Ci0JCQlpZiAoZ2wtPmdsX3dhaXRlcnMyICYmICFibG9ja2VkKSB7CisJCQlpZiAodGVzdF9iaXQoR0xGX1dBSVRFUlMyLCAmZ2wtPmdsX2ZsYWdzKSAmJgorCQkJCSAgICAgIWJsb2NrZWQpIHsKIAkJCQlzZXRfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpOwogCQkJCWdsLT5nbF9kZW1vdGVfc3RhdGUgPSBMTV9TVF9VTkxPQ0tFRDsKIAkJCX0KLQkJCWdsLT5nbF93YWl0ZXJzMiA9IDA7CisJCQljbGVhcl9iaXQoR0xGX1dBSVRFUlMyLCAmZ2wtPmdsX2ZsYWdzKTsKIAkJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmZ2wtPmdsX3dhaXRlcnMzKSkgewogCQkJZ2ggPSBsaXN0X2VudHJ5KGdsLT5nbF93YWl0ZXJzMy5uZXh0LAogCQkJCQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIsIGdoX2xpc3QpOwpAQCAtNzEwLDcgKzcxOSw3IEBACiAJfSBlbHNlIGlmIChnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IExNX1NUX1VOTE9DS0VEICYmCiAJCQlnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IHN0YXRlKSB7CiAJCWlmICh0ZXN0X2JpdChHTEZfREVNT1RFX0lOX1BST0dSRVNTLCAgJmdsLT5nbF9mbGFncykpIAotCQkJZ2wtPmdsX3dhaXRlcnMyID0gMTsKKwkJCXNldF9iaXQoR0xGX1dBSVRFUlMyLCAmZ2wtPmdsX2ZsYWdzKTsKIAkJZWxzZSAKIAkJCWdsLT5nbF9kZW1vdGVfc3RhdGUgPSBMTV9TVF9VTkxPQ0tFRDsKIAl9CkBAIC03NDMsNiArNzUyLDQzIEBACiB9CiAKIC8qKgorICogZHJvcF9iaCAtIENhbGxlZCBhZnRlciBhIGxvY2sgbW9kdWxlIHVubG9jayBjb21wbGV0ZXMKKyAqIEBnbDogdGhlIGdsb2NrCisgKiBAcmV0OiB0aGUgcmV0dXJuIHN0YXR1cworICoKKyAqIERvZXNuJ3Qgd2FrZSB1cCB0aGUgcHJvY2VzcyB3YWl0aW5nIG9uIHRoZSBzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKGlmIGFueSkKKyAqIERvZXNuJ3QgZHJvcCB0aGUgcmVmZXJlbmNlIG9uIHRoZSBnbG9jayB0aGUgdG9wIGhhbGYgdG9vayBvdXQKKyAqCisgKi8KKworc3RhdGljIHZvaWQgZHJvcF9iaChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCByZXQpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOworCXN0cnVjdCBnZnMyX2hvbGRlciAqZ2ggPSBnbC0+Z2xfcmVxX2doOworCisJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHRlc3RfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKSk7CisJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSk7CisJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFyZXQpOworCisJc3RhdGVfY2hhbmdlKGdsLCBMTV9TVF9VTkxPQ0tFRCk7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEdMRl9DT05WX0RFQURMSywgJmdsLT5nbF9mbGFncykpIHsKKwkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CisJCWdoLT5naF9lcnJvciA9IDA7CisJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CisJCWdmczJfZ2xvY2tfeG1vdGVfdGgoZ2wsIGdsLT5nbF9yZXFfZ2gpOworCQlnZnMyX2dsb2NrX3B1dChnbCk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKKwlnZnMyX2RlbW90ZV93YWtlKGdsKTsKKwljbGVhcl9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CisJZ2ZzMl9nbG9ja19wdXQoZ2wpOworfQorCisvKioKICAqIHhtb3RlX2JoIC0gQ2FsbGVkIGFmdGVyIHRoZSBsb2NrIG1vZHVsZSBpcyBkb25lIGFjcXVpcmluZyBhIGxvY2sKICAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCiAgKiBAcmV0OiB0aGUgaW50IHJldHVybmVkIGZyb20gdGhlIGxvY2sgbW9kdWxlCkBAIC03NTQsMjUgKzgwMCwxOSBAQAogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKIAljb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnbG9wcyA9IGdsLT5nbF9vcHM7CiAJc3RydWN0IGdmczJfaG9sZGVyICpnaCA9IGdsLT5nbF9yZXFfZ2g7Ci0JaW50IHByZXZfc3RhdGUgPSBnbC0+Z2xfc3RhdGU7CiAJaW50IG9wX2RvbmUgPSAxOwogCisJaWYgKCFnaCAmJiAocmV0ICYgTE1fT1VUX1NUX01BU0spID09IExNX1NUX1VOTE9DS0VEKSB7CisJCWRyb3BfYmgoZ2wsIHJldCk7CisJCXJldHVybjsKKwl9CisKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgdGVzdF9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpKTsKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgbGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpKTsKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIShyZXQgJiBMTV9PVVRfQVNZTkMpKTsKIAogCXN0YXRlX2NoYW5nZShnbCwgcmV0ICYgTE1fT1VUX1NUX01BU0spOwogCi0JaWYgKHByZXZfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQgJiYgIShyZXQgJiBMTV9PVVRfQ0FDSEVBQkxFKSkgewotCQlpZiAoZ2xvcHMtPmdvX2ludmFsKQotCQkJZ2xvcHMtPmdvX2ludmFsKGdsLCBESU9fTUVUQURBVEEpOwotCX0gZWxzZSBpZiAoZ2wtPmdsX3N0YXRlID09IExNX1NUX0RFRkVSUkVEKSB7Ci0JCS8qIFdlIG1pZ2h0IG5vdCB3YW50IHRvIGRvIHRoaXMgaGVyZS4KLQkJICAgTG9vayBhdCBtb3ZpbmcgdG8gdGhlIGlub2RlIGdsb3BzLiAqLwotCQlpZiAoZ2xvcHMtPmdvX2ludmFsKQotCQkJZ2xvcHMtPmdvX2ludmFsKGdsLCAwKTsKLQl9Ci0KIAkvKiAgRGVhbCB3aXRoIGVhY2ggcG9zc2libGUgZXhpdCBjb25kaXRpb24gICovCiAKIAlpZiAoIWdoKSB7CkBAIC03ODIsNyArODIyLDYgQEAKIAkJfSBlbHNlIHsKIAkJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCQkJaWYgKGdsLT5nbF9zdGF0ZSAhPSBnbC0+Z2xfZGVtb3RlX3N0YXRlKSB7Ci0JCQkJZ2wtPmdsX3JlcV9iaCA9IE5VTEw7CiAJCQkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKIAkJCQlnZnMyX2dsb2NrX2Ryb3BfdGgoZ2wpOwogCQkJCWdmczJfZ2xvY2tfcHV0KGdsKTsKQEAgLTc5Myw2ICs4MzIsMTQgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOworCQlpZiAocmV0ICYgTE1fT1VUX0NPTlZfREVBRExLKSB7CisJCQlnaC0+Z2hfZXJyb3IgPSAwOworCQkJc2V0X2JpdChHTEZfQ09OVl9ERUFETEssICZnbC0+Z2xfZmxhZ3MpOworCQkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKKwkJCWdmczJfZ2xvY2tfZHJvcF90aChnbCk7CisJCQlnZnMyX2dsb2NrX3B1dChnbCk7CisJCQlyZXR1cm47CisJCX0KIAkJbGlzdF9kZWxfaW5pdCgmZ2gtPmdoX2xpc3QpOwogCQlnaC0+Z2hfZXJyb3IgPSAtRUlPOwogCQlpZiAodW5saWtlbHkodGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKSAKQEAgLTgyNCw3ICs4NzEsNiBAQAogCWlmIChvcF9kb25lKSB7CiAJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCQlnbC0+Z2xfcmVxX2doID0gTlVMTDsKLQkJZ2wtPmdsX3JlcV9iaCA9IE5VTEw7CiAJCWNsZWFyX2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncyk7CiAJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJfQpAQCAtODM1LDYgKzg4MSwxNyBAQAogCQlnZnMyX2hvbGRlcl93YWtlKGdoKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBnZnMyX2xtX2xvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssCisJCQkJIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCisJCQkJIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCXJldCA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2xvY2sobG9jaywgY3VyX3N0YXRlLAorCQkJCQkJCSByZXFfc3RhdGUsIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIGdmczJfZ2xvY2tfeG1vdGVfdGggLSBDYWxsIGludG8gdGhlIGxvY2sgbW9kdWxlIHRvIGFjcXVpcmUgb3IgY2hhbmdlIGEgZ2xvY2sKICAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCkBAIC04NTYsNiArOTEzLDggQEAKIAogCWlmIChnbG9wcy0+Z29feG1vdGVfdGgpCiAJCWdsb3BzLT5nb194bW90ZV90aChnbCk7CisJaWYgKHN0YXRlID09IExNX1NUX0RFRkVSUkVEICYmIGdsb3BzLT5nb19pbnZhbCkKKwkJZ2xvcHMtPmdvX2ludmFsKGdsLCBESU9fTUVUQURBVEEpOwogCiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHRlc3RfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKSk7CiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSk7CkBAIC04NjMsNyArOTIyLDYgQEAKIAlnZnMyX2Fzc2VydF93YXJuKHNkcCwgc3RhdGUgIT0gZ2wtPmdsX3N0YXRlKTsKIAogCWdmczJfZ2xvY2tfaG9sZChnbCk7Ci0JZ2wtPmdsX3JlcV9iaCA9IHhtb3RlX2JoOwogCiAJbGNrX3JldCA9IGdmczJfbG1fbG9jayhzZHAsIGdsLT5nbF9sb2NrLCBnbC0+Z2xfc3RhdGUsIHN0YXRlLCBsY2tfZmxhZ3MpOwogCkBAIC04NzYsNDkgKzkzNCwxMyBAQAogCQl4bW90ZV9iaChnbCwgbGNrX3JldCk7CiB9CiAKLS8qKgotICogZHJvcF9iaCAtIENhbGxlZCBhZnRlciBhIGxvY2sgbW9kdWxlIHVubG9jayBjb21wbGV0ZXMKLSAqIEBnbDogdGhlIGdsb2NrCi0gKiBAcmV0OiB0aGUgcmV0dXJuIHN0YXR1cwotICoKLSAqIERvZXNuJ3Qgd2FrZSB1cCB0aGUgcHJvY2VzcyB3YWl0aW5nIG9uIHRoZSBzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKGlmIGFueSkKLSAqIERvZXNuJ3QgZHJvcCB0aGUgcmVmZXJlbmNlIG9uIHRoZSBnbG9jayB0aGUgdG9wIGhhbGYgdG9vayBvdXQKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgZHJvcF9iaChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCByZXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGdmczJfbG1fdW5sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLAorCQkJCSAgIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCWNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsb3BzID0gZ2wtPmdsX29wczsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdoID0gZ2wtPmdsX3JlcV9naDsKLQotCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCB0ZXN0X2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncykpOwotCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykpOwotCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcmV0KTsKLQotCXN0YXRlX2NoYW5nZShnbCwgTE1fU1RfVU5MT0NLRUQpOwotCi0JaWYgKGdsb3BzLT5nb19pbnZhbCkKLQkJZ2xvcHMtPmdvX2ludmFsKGdsLCBESU9fTUVUQURBVEEpOwotCi0JaWYgKGdoKSB7Ci0JCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwotCQlsaXN0X2RlbF9pbml0KCZnaC0+Z2hfbGlzdCk7Ci0JCWdoLT5naF9lcnJvciA9IDA7Ci0JCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JZ2ZzMl9kZW1vdGVfd2FrZShnbCk7Ci0JZ2wtPmdsX3JlcV9naCA9IE5VTEw7Ci0JZ2wtPmdsX3JlcV9iaCA9IE5VTEw7Ci0JY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKLQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwotCi0JZ2ZzMl9nbG9ja19wdXQoZ2wpOwotCi0JaWYgKGdoKQotCQlnZnMyX2hvbGRlcl93YWtlKGdoKTsKKwlpbnQgcmV0ID0gMDsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCXJldCA9ICBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV91bmxvY2sobG9jaywgY3VyX3N0YXRlKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTkzNSwxMyArOTU3LDE0IEBACiAKIAlpZiAoZ2xvcHMtPmdvX3htb3RlX3RoKQogCQlnbG9wcy0+Z29feG1vdGVfdGgoZ2wpOworCWlmIChnbG9wcy0+Z29faW52YWwpCisJCWdsb3BzLT5nb19pbnZhbChnbCwgRElPX01FVEFEQVRBKTsKIAogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCB0ZXN0X2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncykpOwogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykpOwogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQpOwogCiAJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKLQlnbC0+Z2xfcmVxX2JoID0gZHJvcF9iaDsKIAogCXJldCA9IGdmczJfbG1fdW5sb2NrKHNkcCwgZ2wtPmdsX2xvY2ssIGdsLT5nbF9zdGF0ZSk7CiAKQEAgLTk2NCwxNiArOTg3LDE3IEBACiBzdGF0aWMgdm9pZCBkb19jYW5jZWxzKHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gpCiB7CiAJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gZ2gtPmdoX2dsOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKIAogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCiAJd2hpbGUgKGdsLT5nbF9yZXFfZ2ggIT0gZ2ggJiYKIAkgICAgICAgIXRlc3RfYml0KEhJRl9IT0xERVIsICZnaC0+Z2hfaWZsYWdzKSAmJgogCSAgICAgICAhbGlzdF9lbXB0eSgmZ2gtPmdoX2xpc3QpKSB7Ci0JCWlmIChnbC0+Z2xfcmVxX2JoICYmICEoZ2wtPmdsX3JlcV9naCAmJgotCQkJCSAgICAgKGdsLT5nbF9yZXFfZ2gtPmdoX2ZsYWdzICYgR0xfTk9DQU5DRUwpKSkgeworCQlpZiAoIShnbC0+Z2xfcmVxX2doICYmIChnbC0+Z2xfcmVxX2doLT5naF9mbGFncyAmIEdMX05PQ0FOQ0VMKSkpIHsKIAkJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JCQlnZnMyX2xtX2NhbmNlbChnbC0+Z2xfc2JkLCBnbC0+Z2xfbG9jayk7CisJCQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKGdsLT5nbF9sb2NrKTsKIAkJCW1zbGVlcCgxMDApOwogCQkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJCX0gZWxzZSB7CkBAIC0xMDQxLDcgKzEwNjUsNiBAQAogCiAJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCQlnbC0+Z2xfcmVxX2doID0gTlVMTDsKLQkJZ2wtPmdsX3JlcV9iaCA9IE5VTEw7CiAJCWNsZWFyX2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncyk7CiAJCXJ1bl9xdWV1ZShnbCk7CiAJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CkBAIC0xNDI4LDYgKzE0NTEsMTQgQEAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoc1t4XSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl9sbV9ob2xkX2x2YihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaywgY2hhciAqKmx2YnApCit7CisJaW50IGVycm9yID0gLUVJTzsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1faG9sZF9sdmIobG9jaywgbHZicCk7CisJcmV0dXJuIGVycm9yOworfQorCiAvKioKICAqIGdmczJfbHZiX2hvbGQgLSBhdHRhY2ggYSBMVkIgZnJvbSBhIGdsb2NrCiAgKiBAZ2w6IFRoZSBnbG9jayBpbiBxdWVzdGlvbgpAQCAtMTQ2MywxMiArMTQ5NCwxNSBAQAogCiB2b2lkIGdmczJfbHZiX3VuaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOworCiAJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKIAlnZnMyX2dsbXV0ZXhfbG9jayhnbCk7CiAKIAlnZnMyX2Fzc2VydChnbC0+Z2xfc2JkLCBhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCkgPiAwKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZ2wtPmdsX2x2Yl9jb3VudCkpIHsKLQkJZ2ZzMl9sbV91bmhvbGRfbHZiKGdsLT5nbF9zYmQsIGdsLT5nbF9sb2NrLCBnbC0+Z2xfbHZiKTsKKwkJaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQorCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fdW5ob2xkX2x2YihnbC0+Z2xfbG9jaywgZ2wtPmdsX2x2Yik7CiAJCWdsLT5nbF9sdmIgPSBOVUxMOwogCQlnZnMyX2dsb2NrX3B1dChnbCk7CiAJfQpAQCAtMTUzNCw4ICsxNTY4LDcgQEAKIAkJZ2wgPSBnZnMyX2dsb2NrX2ZpbmQoc2RwLCAmYXN5bmMtPmxjX25hbWUpOwogCQlpZiAoZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGdsKSkKIAkJCXJldHVybjsKLQkJaWYgKCFnZnMyX2Fzc2VydF93YXJuKHNkcCwgZ2wtPmdsX3JlcV9iaCkpCi0JCQlnbC0+Z2xfcmVxX2JoKGdsLCBhc3luYy0+bGNfcmV0KTsKKwkJeG1vdGVfYmgoZ2wsIGFzeW5jLT5sY19yZXQpOwogCQlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQogCQkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogCQl1cF9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwpAQCAtMTU5NCwxMCArMTYyNywxMCBAQAogCQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwogCQlsaXN0X2FkZCgmZ2wtPmdsX3JlY2xhaW0sICZzZHAtPnNkX3JlY2xhaW1fbGlzdCk7CiAJCWF0b21pY19pbmMoJnNkcC0+c2RfcmVjbGFpbV9jb3VudCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3JlY2xhaW1fbG9jayk7Ci0KLQl3YWtlX3VwKCZzZHAtPnNkX3JlY2xhaW1fd3EpOworCQlzcGluX3VubG9jaygmc2RwLT5zZF9yZWNsYWltX2xvY2spOworCQl3YWtlX3VwKCZzZHAtPnNkX3JlY2xhaW1fd3EpOworCX0gZWxzZQorCQlzcGluX3VubG9jaygmc2RwLT5zZF9yZWNsYWltX2xvY2spOwogfQogCiAvKioKQEAgLTE4OTcsNyArMTkzMCw2IEBACiAJCXByaW50X2RiZyhnaSwgIiAgZ2xfb3duZXIgPSAtMVxuIik7CiAJcHJpbnRfZGJnKGdpLCAiICBnbF9pcCA9ICVsdVxuIiwgZ2wtPmdsX2lwKTsKIAlwcmludF9kYmcoZ2ksICIgIHJlcV9naCA9ICVzXG4iLCAoZ2wtPmdsX3JlcV9naCkgPyAieWVzIiA6ICJubyIpOwotCXByaW50X2RiZyhnaSwgIiAgcmVxX2JoID0gJXNcbiIsIChnbC0+Z2xfcmVxX2JoKSA/ICJ5ZXMiIDogIm5vIik7CiAJcHJpbnRfZGJnKGdpLCAiICBsdmJfY291bnQgPSAlZFxuIiwgYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpKTsKIAlwcmludF9kYmcoZ2ksICIgIG9iamVjdCA9ICVzXG4iLCAoZ2wtPmdsX29iamVjdCkgPyAieWVzIiA6ICJubyIpOwogCXByaW50X2RiZyhnaSwgIiAgcmVjbGFpbSA9ICVzXG4iLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5oIGIvZnMvZ2ZzMi9nbG9jay5oCmluZGV4IDJmOWM2ZDEuLmNkYWQzZTYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suaAorKysgYi9mcy9nZnMyL2dsb2NrLmgKQEAgLTMyLDI0ICszMiwyMyBAQAogI2RlZmluZSBHTFJfVFJZRkFJTEVECQkxMwogI2RlZmluZSBHTFJfQ0FOQ0VMRUQJCTE0CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGdmczJfaG9sZGVyICpnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CiAJc3RydWN0IGdmczJfaG9sZGVyICpnaDsKLQlpbnQgbG9ja2VkID0gMDsKIAlzdHJ1Y3QgcGlkICpwaWQ7CiAKIAkvKiBMb29rIGluIGdsb2NrJ3MgbGlzdCBvZiBob2xkZXJzIGZvciBvbmUgd2l0aCBjdXJyZW50IHRhc2sgYXMgb3duZXIgKi8KIAlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKIAlwaWQgPSB0YXNrX3BpZChjdXJyZW50KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdoLCAmZ2wtPmdsX2hvbGRlcnMsIGdoX2xpc3QpIHsKLQkJaWYgKGdoLT5naF9vd25lcl9waWQgPT0gcGlkKSB7Ci0JCQlsb2NrZWQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKGdoLT5naF9vd25lcl9waWQgPT0gcGlkKQorCQkJZ290byBvdXQ7CiAJfQorCWdoID0gTlVMTDsKK291dDoKIAlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCi0JcmV0dXJuIGxvY2tlZDsKKwlyZXR1cm4gZ2g7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdmczJfZ2xvY2tfaXNfaGVsZF9leGNsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKQEAgLTc5LDcgKzc4LDYgQEAKIGludCBnZnMyX2dsb2NrX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKIAkJICAgdTY0IG51bWJlciwgY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xvcHMsCiAJCSAgIGludCBjcmVhdGUsIHN0cnVjdCBnZnMyX2dsb2NrICoqZ2xwKTsKLXZvaWQgZ2ZzMl9nbG9ja19ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiBpbnQgZ2ZzMl9nbG9ja19wdXQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIHZvaWQgZ2ZzMl9ob2xkZXJfaW5pdChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCBzdGF0ZSwgdW5zaWduZWQgZmxhZ3MsCiAJCSAgICAgIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IGM2NjNiN2EuLmQzMWJhZGEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTEyNiw3ICsxMjYsMTMgQEAKIAkJcmV0dXJuOwogCiAJZ2ZzMl9tZXRhX2ludmFsKGdsKTsKLQlnbC0+Z2xfdm4rKzsKKwlpZiAoZ2wtPmdsX29iamVjdCA9PSBHRlMyX0koZ2wtPmdsX3NiZC0+c2RfcmluZGV4KSkKKwkJZ2wtPmdsX3NiZC0+c2RfcmluZGV4X3VwdG9kYXRlID0gMDsKKwllbHNlIGlmIChnbC0+Z2xfb3BzID09ICZnZnMyX3JncnBfZ2xvcHMgJiYgZ2wtPmdsX29iamVjdCkgeworCQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkID0gKHN0cnVjdCBnZnMyX3JncnBkICopZ2wtPmdsX29iamVjdDsKKworCQlyZ2QtPnJkX2ZsYWdzICY9IH5HRlMyX1JERl9VUFRPREFURTsKKwl9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbmNvcmUuaCBiL2ZzL2dmczIvaW5jb3JlLmgKaW5kZXggNTI1ZGNhZS4uOWMyYzBiOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbmNvcmUuaAorKysgYi9mcy9nZnMyL2luY29yZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw2IEBACiAKIHN0cnVjdCBnZnMyX2xvZ19vcGVyYXRpb25zIHsKIAl2b2lkICgqbG9fYWRkKSAoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2xvZ19lbGVtZW50ICpsZSk7Ci0Jdm9pZCAoKmxvX2luY29yZV9jb21taXQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfdHJhbnMgKnRyKTsKIAl2b2lkICgqbG9fYmVmb3JlX2NvbW1pdCkgKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAl2b2lkICgqbG9fYWZ0ZXJfY29tbWl0KSAoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2FpbCAqYWkpOwogCXZvaWQgKCpsb19iZWZvcmVfc2NhbikgKHN0cnVjdCBnZnMyX2pkZXNjICpqZCwKQEAgLTcwLDcgKzY5LDYgQEAKIH07CiAKIHN0cnVjdCBnZnMyX3JncnBfaG9zdCB7Ci0JdTMyIHJnX2ZsYWdzOwogCXUzMiByZ19mcmVlOwogCXUzMiByZ19kaW5vZGVzOwogCXU2NCByZ19pZ2VuZXJhdGlvbjsKQEAgLTg3LDE3ICs4NSwxNyBAQAogCXUzMiByZF9kYXRhOwkJCS8qIG51bSBvZiBkYXRhIGJsb2NrcyBpbiByZ3JwICovCiAJdTMyIHJkX2JpdGJ5dGVzOwkJLyogbnVtYmVyIG9mIGJ5dGVzIGluIGRhdGEgYml0bWFwcyAqLwogCXN0cnVjdCBnZnMyX3JncnBfaG9zdCByZF9yZzsKLQl1NjQgcmRfcmdfdm47CiAJc3RydWN0IGdmczJfYml0bWFwICpyZF9iaXRzOwogCXVuc2lnbmVkIGludCByZF9iaF9jb3VudDsKIAlzdHJ1Y3QgbXV0ZXggcmRfbXV0ZXg7CiAJdTMyIHJkX2ZyZWVfY2xvbmU7CiAJc3RydWN0IGdmczJfbG9nX2VsZW1lbnQgcmRfbGU7Ci0JdTMyIHJkX2xhc3RfYWxsb2NfZGF0YTsKLQl1MzIgcmRfbGFzdF9hbGxvY19tZXRhOworCXUzMiByZF9sYXN0X2FsbG9jOwogCXN0cnVjdCBnZnMyX3NiZCAqcmRfc2JkOwotCXVuc2lnbmVkIGxvbmcgcmRfZmxhZ3M7Ci0jZGVmaW5lIEdGUzJfUkRGX0NIRUNLICAgICAgICAweDAwMDEgICAgICAgICAgLyogTmVlZCB0byBjaGVjayBmb3IgdW5saW5rZWQgaW5vZGVzICovCisJdW5zaWduZWQgY2hhciByZF9mbGFnczsKKyNkZWZpbmUgR0ZTMl9SREZfQ0hFQ0sgICAgICAgIDB4MDEgICAgICAvKiBOZWVkIHRvIGNoZWNrIGZvciB1bmxpbmtlZCBpbm9kZXMgKi8KKyNkZWZpbmUgR0ZTMl9SREZfTk9BTExPQyAgICAgIDB4MDIgICAgICAvKiByZyBwcm9oaWJpdHMgYWxsb2NhdGlvbiAqLworI2RlZmluZSBHRlMyX1JERl9VUFRPREFURSAgICAgMHgwNCAgICAgIC8qIHJnIGlzIHVwIHRvIGRhdGUgKi8KIH07CiAKIGVudW0gZ2ZzMl9zdGF0ZV9iaXRzIHsKQEAgLTE2OCw2ICsxNjYsOCBAQAogCUdMRl9ESVJUWQkJPSA1LAogCUdMRl9ERU1PVEVfSU5fUFJPR1JFU1MJPSA2LAogCUdMRl9MRkxVU0gJCT0gNywKKwlHTEZfV0FJVEVSUzIJCT0gOCwKKwlHTEZfQ09OVl9ERUFETEsJCT0gOSwKIH07CiAKIHN0cnVjdCBnZnMyX2dsb2NrIHsKQEAgLTE4NywxOCArMTg3LDE1IEBACiAJc3RydWN0IGxpc3RfaGVhZCBnbF9ob2xkZXJzOwogCXN0cnVjdCBsaXN0X2hlYWQgZ2xfd2FpdGVyczE7CS8qIEhJRl9NVVRFWCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZ2xfd2FpdGVyczM7CS8qIEhJRl9QUk9NT1RFICovCi0JaW50IGdsX3dhaXRlcnMyOwkJLyogR0lGX0RFTU9URSAqLwogCiAJY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xfb3BzOwogCiAJc3RydWN0IGdmczJfaG9sZGVyICpnbF9yZXFfZ2g7Ci0JZ2ZzMl9nbG9wX2JoX3QgZ2xfcmVxX2JoOwogCiAJdm9pZCAqZ2xfbG9jazsKIAljaGFyICpnbF9sdmI7CiAJYXRvbWljX3QgZ2xfbHZiX2NvdW50OwogCi0JdTY0IGdsX3ZuOwogCXVuc2lnbmVkIGxvbmcgZ2xfc3RhbXA7CiAJdW5zaWduZWQgbG9uZyBnbF90Y2hhbmdlOwogCXZvaWQgKmdsX29iamVjdDsKQEAgLTIxMyw2ICsyMTAsOCBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgZ2xfd29yazsKIH07CiAKKyNkZWZpbmUgR0ZTMl9NSU5fTFZCX1NJWkUgMzIJLyogTWluIHNpemUgb2YgTFZCIHRoYXQgZ2ZzMiBzdXBwb3J0cyAqLworCiBzdHJ1Y3QgZ2ZzMl9hbGxvYyB7CiAJLyogUXVvdGEgc3R1ZmYgKi8KIApAQCAtMjQxLDE0ICsyNDAsOSBAQAogCiBzdHJ1Y3QgZ2ZzMl9kaW5vZGVfaG9zdCB7CiAJdTY0IGRpX3NpemU7CQkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gZmlsZSAqLwotCXU2NCBkaV9ibG9ja3M7CQkvKiBudW1iZXIgb2YgYmxvY2tzIGluIGZpbGUgKi8KLQl1NjQgZGlfZ29hbF9tZXRhOwkvKiByZ3JwIHRvIGFsbG9jIGZyb20gbmV4dCAqLwotCXU2NCBkaV9nb2FsX2RhdGE7CS8qIGRhdGEgYmxvY2sgZ29hbCAqLwogCXU2NCBkaV9nZW5lcmF0aW9uOwkvKiBnZW5lcmF0aW9uIG51bWJlciBmb3IgTkZTICovCiAJdTMyIGRpX2ZsYWdzOwkJLyogR0ZTMl9ESUZfLi4uICovCi0JdTE2IGRpX2hlaWdodDsJCS8qIGhlaWdodCBvZiBtZXRhZGF0YSAqLwogCS8qIFRoZXNlIG9ubHkgYXBwbHkgdG8gZGlyZWN0b3JpZXMgICovCi0JdTE2IGRpX2RlcHRoOwkJLyogTnVtYmVyIG9mIGJpdHMgaW4gdGhlIHRhYmxlICovCiAJdTMyIGRpX2VudHJpZXM7CQkvKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpcmVjdG9yeSAqLwogCXU2NCBkaV9lYXR0cjsJCS8qIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIgKi8KIH07CkBAIC0yNjUsOSArMjU5LDEwIEBACiAJc3RydWN0IGdmczJfaG9sZGVyIGlfaW9wZW5fZ2g7CiAJc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7IC8qIGZvciBwcmVwYXJlL2NvbW1pdF93cml0ZSBvbmx5ICovCiAJc3RydWN0IGdmczJfYWxsb2MgKmlfYWxsb2M7Ci0JdTY0IGlfbGFzdF9yZ19hbGxvYzsKLQorCXU2NCBpX2dvYWw7CS8qIGdvYWwgYmxvY2sgZm9yIGFsbG9jYXRpb25zICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBpX3J3X211dGV4OworCXU4IGlfaGVpZ2h0OworCXU4IGlfZGVwdGg7CiB9OwogCiAvKgpAQCAtNDkwLDkgKzQ4NSw5IEBACiAJdTMyIHNkX3FjX3Blcl9ibG9jazsKIAl1MzIgc2RfbWF4X2RpcnJlczsJLyogTWF4IGJsb2NrcyBuZWVkZWQgdG8gYWRkIGEgZGlyZWN0b3J5IGVudHJ5ICovCiAJdTMyIHNkX21heF9oZWlnaHQ7CS8qIE1heCBoZWlnaHQgb2YgYSBmaWxlJ3MgbWV0YWRhdGEgdHJlZSAqLwotCXU2NCBzZF9oZWlnaHRzaXplW0dGUzJfTUFYX01FVEFfSEVJR0hUXTsKKwl1NjQgc2RfaGVpZ2h0c2l6ZVtHRlMyX01BWF9NRVRBX0hFSUdIVCArIDFdOwogCXUzMiBzZF9tYXhfamhlaWdodDsgLyogTWF4IGhlaWdodCBvZiBqb3VybmFsZWQgZmlsZSdzIG1ldGEgdHJlZSAqLwotCXU2NCBzZF9qaGVpZ2h0c2l6ZVtHRlMyX01BWF9NRVRBX0hFSUdIVF07CisJdTY0IHNkX2poZWlnaHRzaXplW0dGUzJfTUFYX01FVEFfSEVJR0hUICsgMV07CiAKIAlzdHJ1Y3QgZ2ZzMl9hcmdzIHNkX2FyZ3M7CS8qIE1vdW50IGFyZ3VtZW50cyAqLwogCXN0cnVjdCBnZnMyX3R1bmUgc2RfdHVuZTsJLyogRmlsZXN5c3RlbSB0dW5pbmcgc3RydWN0dXJlICovCkBAIC01MzMsNyArNTI4LDcgQEAKIAogCS8qIFJlc291cmNlIGdyb3VwIHN0dWZmICovCiAKLQl1NjQgc2RfcmluZGV4X3ZuOworCWludCBzZF9yaW5kZXhfdXB0b2RhdGU7CiAJc3BpbmxvY2tfdCBzZF9yaW5kZXhfc3BpbjsKIAlzdHJ1Y3QgbXV0ZXggc2RfcmluZGV4X211dGV4OwogCXN0cnVjdCBsaXN0X2hlYWQgc2RfcmluZGV4X2xpc3Q7CkBAIC02MzcsOSArNjMyLDYgQEAKIAogCS8qIENvdW50ZXJzICovCiAKLQlhdG9taWNfdCBzZF9nbG9ja19jb3VudDsKLQlhdG9taWNfdCBzZF9nbG9ja19oZWxkX2NvdW50OwotCWF0b21pY190IHNkX2lub2RlX2NvdW50OwogCWF0b21pY190IHNkX3JlY2xhaW1lZDsKIAogCWNoYXIgc2RfZnNuYW1lW0dGUzJfRlNOQU1FX0xFTl07CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggMzc3MjVhZC4uM2E5ZWY1MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSw4IEBACiAJfSBlbHNlIGlmIChTX0lTTE5LKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfc3ltbGlua19pb3BzOwogCX0gZWxzZSB7Ci0JCWlub2RlLT5pX29wID0gJmdmczJfZGV2X2lvcHM7CisJCWlub2RlLT5pX29wID0gJmdmczJfZmlsZV9pb3BzOworCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX3JkZXYpOwogCX0KIAogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwpAQCAtMjQ4LDEyICsyNDksMTAgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9kaW5vZGVfaG9zdCAqZGkgPSAmaXAtPmlfZGk7CiAJY29uc3Qgc3RydWN0IGdmczJfZGlub2RlICpzdHIgPSBidWY7CisJdTE2IGhlaWdodCwgZGVwdGg7CiAKLQlpZiAoaXAtPmlfbm9fYWRkciAhPSBiZTY0X3RvX2NwdShzdHItPmRpX251bS5ub19hZGRyKSkgewotCQlpZiAoZ2ZzMl9jb25zaXN0X2lub2RlKGlwKSkKLQkJCWdmczJfZGlub2RlX3ByaW50KGlwKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCWlmICh1bmxpa2VseShpcC0+aV9ub19hZGRyICE9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfbnVtLm5vX2FkZHIpKSkKKwkJZ290byBjb3JydXB0OwogCWlwLT5pX25vX2Zvcm1hbF9pbm8gPSBiZTY0X3RvX2NwdShzdHItPmRpX251bS5ub19mb3JtYWxfaW5vKTsKIAlpcC0+aV9pbm9kZS5pX21vZGUgPSBiZTMyX3RvX2NwdShzdHItPmRpX21vZGUpOwogCWlwLT5pX2lub2RlLmlfcmRldiA9IDA7CkBAIC0yNzUsOCArMjc0LDcgQEAKIAlpcC0+aV9pbm9kZS5pX25saW5rID0gYmUzMl90b19jcHUoc3RyLT5kaV9ubGluayk7CiAJZGktPmRpX3NpemUgPSBiZTY0X3RvX2NwdShzdHItPmRpX3NpemUpOwogCWlfc2l6ZV93cml0ZSgmaXAtPmlfaW5vZGUsIGRpLT5kaV9zaXplKTsKLQlkaS0+ZGlfYmxvY2tzID0gYmU2NF90b19jcHUoc3RyLT5kaV9ibG9ja3MpOwotCWdmczJfc2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpOworCWdmczJfc2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIGJlNjRfdG9fY3B1KHN0ci0+ZGlfYmxvY2tzKSk7CiAJaXAtPmlfaW5vZGUuaV9hdGltZS50dl9zZWMgPSBiZTY0X3RvX2NwdShzdHItPmRpX2F0aW1lKTsKIAlpcC0+aV9pbm9kZS5pX2F0aW1lLnR2X25zZWMgPSBiZTMyX3RvX2NwdShzdHItPmRpX2F0aW1lX25zZWMpOwogCWlwLT5pX2lub2RlLmlfbXRpbWUudHZfc2VjID0gYmU2NF90b19jcHUoc3RyLT5kaV9tdGltZSk7CkBAIC0yODQsMTUgKzI4MiwyMCBAQAogCWlwLT5pX2lub2RlLmlfY3RpbWUudHZfc2VjID0gYmU2NF90b19jcHUoc3RyLT5kaV9jdGltZSk7CiAJaXAtPmlfaW5vZGUuaV9jdGltZS50dl9uc2VjID0gYmUzMl90b19jcHUoc3RyLT5kaV9jdGltZV9uc2VjKTsKIAotCWRpLT5kaV9nb2FsX21ldGEgPSBiZTY0X3RvX2NwdShzdHItPmRpX2dvYWxfbWV0YSk7Ci0JZGktPmRpX2dvYWxfZGF0YSA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfZ29hbF9kYXRhKTsKKwlpcC0+aV9nb2FsID0gYmU2NF90b19jcHUoc3RyLT5kaV9nb2FsX21ldGEpOwogCWRpLT5kaV9nZW5lcmF0aW9uID0gYmU2NF90b19jcHUoc3RyLT5kaV9nZW5lcmF0aW9uKTsKIAogCWRpLT5kaV9mbGFncyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfZmxhZ3MpOwogCWdmczJfc2V0X2lub2RlX2ZsYWdzKCZpcC0+aV9pbm9kZSk7Ci0JZGktPmRpX2hlaWdodCA9IGJlMTZfdG9fY3B1KHN0ci0+ZGlfaGVpZ2h0KTsKKwloZWlnaHQgPSBiZTE2X3RvX2NwdShzdHItPmRpX2hlaWdodCk7CisJaWYgKHVubGlrZWx5KGhlaWdodCA+IEdGUzJfTUFYX01FVEFfSEVJR0hUKSkKKwkJZ290byBjb3JydXB0OworCWlwLT5pX2hlaWdodCA9ICh1OCloZWlnaHQ7CiAKLQlkaS0+ZGlfZGVwdGggPSBiZTE2X3RvX2NwdShzdHItPmRpX2RlcHRoKTsKKwlkZXB0aCA9IGJlMTZfdG9fY3B1KHN0ci0+ZGlfZGVwdGgpOworCWlmICh1bmxpa2VseShkZXB0aCA+IEdGUzJfRElSX01BWF9ERVBUSCkpCisJCWdvdG8gY29ycnVwdDsKKwlpcC0+aV9kZXB0aCA9ICh1OClkZXB0aDsKIAlkaS0+ZGlfZW50cmllcyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfZW50cmllcyk7CiAKIAlkaS0+ZGlfZWF0dHIgPSBiZTY0X3RvX2NwdShzdHItPmRpX2VhdHRyKTsKQEAgLTMwMCw2ICszMDMsMTAgQEAKIAkJZ2ZzMl9zZXRfYW9wcygmaXAtPmlfaW5vZGUpOwogCiAJcmV0dXJuIDA7Citjb3JydXB0OgorCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUoaXApKQorCQlnZnMyX2Rpbm9kZV9wcmludChpcCk7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qKgpAQCAtMzM3LDEzICszNDQsMTUgQEAKIAlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOwogCWludCBlcnJvcjsKIAotCWlmIChpcC0+aV9kaS5kaV9ibG9ja3MgIT0gMSkgeworCWlmIChnZnMyX2dldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKSAhPSAxKSB7CiAJCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUoaXApKQogCQkJZ2ZzMl9kaW5vZGVfcHJpbnQoaXApOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKKwlpZiAoIWFsKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CiAJaWYgKGVycm9yKQpAQCAtNDg3LDcgKzQ5Niw3IEBACiAJCXJldHVybiBkaXI7CiAJfQogCi0JaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGRpcC0+aV9nbCkgPT0gMCkgeworCWlmIChnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShkaXAtPmlfZ2wpID09IE5VTEwpIHsKIAkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoZGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIDAsICZkX2doKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwpAQCAtODE4LDcgKzgyNyw4IEBACiAJaW50IGVycm9yOwogCiAJbXVuZ2VfbW9kZV91aWRfZ2lkKGRpcCwgJm1vZGUsICZ1aWQsICZnaWQpOwotCWdmczJfYWxsb2NfZ2V0KGRpcCk7CisJaWYgKCFnZnMyX2FsbG9jX2dldChkaXApKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrKGRpcCwgdWlkLCBnaWQpOwogCWlmIChlcnJvcikKQEAgLTg1Myw2ICs4NjMsOCBAQAogCWludCBlcnJvcjsKIAogCWFsID0gZ2ZzMl9hbGxvY19nZXQoZGlwKTsKKwlpZiAoIWFsKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrKGRpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOwogCWlmIChlcnJvcikKQEAgLTEyMTksNyArMTIzMSw3IEBACiAKIAl4ID0gaXAtPmlfZGkuZGlfc2l6ZSArIDE7CiAJaWYgKHggPiAqbGVuKSB7Ci0JCSpidWYgPSBrbWFsbG9jKHgsIEdGUF9LRVJORUwpOworCQkqYnVmID0ga21hbGxvYyh4LCBHRlBfTk9GUyk7CiAJCWlmICghKmJ1ZikgewogCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfYnJlbHNlOwpAQCAtMTM5MSwyMSArMTQwMywyMSBAQAogCXN0ci0+ZGlfZ2lkID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9naWQpOwogCXN0ci0+ZGlfbmxpbmsgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX25saW5rKTsKIAlzdHItPmRpX3NpemUgPSBjcHVfdG9fYmU2NChkaS0+ZGlfc2l6ZSk7Ci0Jc3RyLT5kaV9ibG9ja3MgPSBjcHVfdG9fYmU2NChkaS0+ZGlfYmxvY2tzKTsKKwlzdHItPmRpX2Jsb2NrcyA9IGNwdV90b19iZTY0KGdmczJfZ2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpKTsKIAlzdHItPmRpX2F0aW1lID0gY3B1X3RvX2JlNjQoaXAtPmlfaW5vZGUuaV9hdGltZS50dl9zZWMpOwogCXN0ci0+ZGlfbXRpbWUgPSBjcHVfdG9fYmU2NChpcC0+aV9pbm9kZS5pX210aW1lLnR2X3NlYyk7CiAJc3RyLT5kaV9jdGltZSA9IGNwdV90b19iZTY0KGlwLT5pX2lub2RlLmlfY3RpbWUudHZfc2VjKTsKIAotCXN0ci0+ZGlfZ29hbF9tZXRhID0gY3B1X3RvX2JlNjQoZGktPmRpX2dvYWxfbWV0YSk7Ci0Jc3RyLT5kaV9nb2FsX2RhdGEgPSBjcHVfdG9fYmU2NChkaS0+ZGlfZ29hbF9kYXRhKTsKKwlzdHItPmRpX2dvYWxfbWV0YSA9IGNwdV90b19iZTY0KGlwLT5pX2dvYWwpOworCXN0ci0+ZGlfZ29hbF9kYXRhID0gY3B1X3RvX2JlNjQoaXAtPmlfZ29hbCk7CiAJc3RyLT5kaV9nZW5lcmF0aW9uID0gY3B1X3RvX2JlNjQoZGktPmRpX2dlbmVyYXRpb24pOwogCiAJc3RyLT5kaV9mbGFncyA9IGNwdV90b19iZTMyKGRpLT5kaV9mbGFncyk7Ci0Jc3RyLT5kaV9oZWlnaHQgPSBjcHVfdG9fYmUxNihkaS0+ZGlfaGVpZ2h0KTsKKwlzdHItPmRpX2hlaWdodCA9IGNwdV90b19iZTE2KGlwLT5pX2hlaWdodCk7CiAJc3RyLT5kaV9wYXlsb2FkX2Zvcm1hdCA9IGNwdV90b19iZTMyKFNfSVNESVIoaXAtPmlfaW5vZGUuaV9tb2RlKSAmJgogCQkJCQkgICAgICEoaXAtPmlfZGkuZGlfZmxhZ3MgJiBHRlMyX0RJRl9FWEhBU0gpID8KIAkJCQkJICAgICBHRlMyX0ZPUk1BVF9ERSA6IDApOwotCXN0ci0+ZGlfZGVwdGggPSBjcHVfdG9fYmUxNihkaS0+ZGlfZGVwdGgpOworCXN0ci0+ZGlfZGVwdGggPSBjcHVfdG9fYmUxNihpcC0+aV9kZXB0aCk7CiAJc3RyLT5kaV9lbnRyaWVzID0gY3B1X3RvX2JlMzIoZGktPmRpX2VudHJpZXMpOwogCiAJc3RyLT5kaV9lYXR0ciA9IGNwdV90b19iZTY0KGRpLT5kaV9lYXR0cik7CkBAIC0xNDIzLDE1ICsxNDM1LDEzIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiICBub19hZGRyID0gJWxsdVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpcC0+aV9ub19hZGRyKTsKIAlwcmludGsoS0VSTl9JTkZPICIgIGRpX3NpemUgPSAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWRpLT5kaV9zaXplKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGRpX2Jsb2NrcyA9ICVsbHVcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGktPmRpX2Jsb2Nrcyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBkaV9nb2FsX21ldGEgPSAlbGx1XG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpLT5kaV9nb2FsX21ldGEpOwotCXByaW50ayhLRVJOX0lORk8gIiAgZGlfZ29hbF9kYXRhID0gJWxsdVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkaS0+ZGlfZ29hbF9kYXRhKTsKKwlwcmludGsoS0VSTl9JTkZPICIgIGJsb2NrcyA9ICVsbHVcbiIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSkpOworCXByaW50ayhLRVJOX0lORk8gIiAgaV9nb2FsID0gJWxsdVxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpcC0+aV9nb2FsKTsKIAlwcmludGsoS0VSTl9JTkZPICIgIGRpX2ZsYWdzID0gMHglLjhYXG4iLCBkaS0+ZGlfZmxhZ3MpOwotCXByaW50ayhLRVJOX0lORk8gIiAgZGlfaGVpZ2h0ID0gJXVcbiIsIGRpLT5kaV9oZWlnaHQpOwotCXByaW50ayhLRVJOX0lORk8gIiAgZGlfZGVwdGggPSAldVxuIiwgZGktPmRpX2RlcHRoKTsKKwlwcmludGsoS0VSTl9JTkZPICIgIGlfaGVpZ2h0ID0gJXVcbiIsIGlwLT5pX2hlaWdodCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiICBpX2RlcHRoID0gJXVcbiIsIGlwLT5pX2RlcHRoKTsKIAlwcmludGsoS0VSTl9JTkZPICIgIGRpX2VudHJpZXMgPSAldVxuIiwgZGktPmRpX2VudHJpZXMpOwogCXByaW50ayhLRVJOX0lORk8gIiAgZGlfZWF0dHIgPSAlbGx1XG4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpLT5kaV9lYXR0cik7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmggYi9mcy9nZnMyL2lub2RlLmgKaW5kZXggZDQ0NjUwNi4uNTgwZGE0NSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5oCisrKyBiL2ZzL2dmczIvaW5vZGUuaApAQCAtMTAsOSArMTAsMTEgQEAKICNpZm5kZWYgX19JTk9ERV9ET1RfSF9fCiAjZGVmaW5lIF9fSU5PREVfRE9UX0hfXwogCisjaW5jbHVkZSAidXRpbC5oIgorCiBzdGF0aWMgaW5saW5lIGludCBnZnMyX2lzX3N0dWZmZWQoY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwKQogewotCXJldHVybiAhaXAtPmlfZGkuZGlfaGVpZ2h0OworCXJldHVybiAhaXAtPmlfaGVpZ2h0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZnMyX2lzX2pkYXRhKGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCkKQEAgLTM3LDEzICszOSwyNSBAQAogCXJldHVybiBTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZnMyX3NldF9pbm9kZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZnMyX3NldF9pbm9kZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJsb2NrcykKIHsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCWlub2RlLT5pX2Jsb2NrcyA9IGlwLT5pX2RpLmRpX2Jsb2NrcyA8PAorCWlub2RlLT5pX2Jsb2NrcyA9IGJsb2NrcyA8PAogCQkoR0ZTMl9TQihpbm9kZSktPnNkX3NiLnNiX2JzaXplX3NoaWZ0IC0gR0ZTMl9CQVNJQ19CTE9DS19TSElGVCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGdmczJfZ2V0X2lub2RlX2Jsb2Nrcyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBpbm9kZS0+aV9ibG9ja3MgPj4KKwkJKEdGUzJfU0IoaW5vZGUpLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCAtIEdGUzJfQkFTSUNfQkxPQ0tfU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHM2NCBjaGFuZ2UpCit7CisJZ2ZzMl9hc3NlcnQoR0ZTMl9TQihpbm9kZSksIChjaGFuZ2UgPj0gMCB8fCBpbm9kZS0+aV9ibG9ja3MgPiAtY2hhbmdlKSk7CisJY2hhbmdlICo9IChHRlMyX1NCKGlub2RlKS0+c2Rfc2Iuc2JfYnNpemUvR0ZTMl9CQVNJQ19CTE9DSyk7CisJaW5vZGUtPmlfYmxvY2tzICs9IGNoYW5nZTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9jaGVja19pbnVtKGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IG5vX2FkZHIsCiAJCQkJICB1NjQgbm9fZm9ybWFsX2lubykKIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG0uYyBiL2ZzL2dmczIvbG0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjYzM5Yi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KLQotI2luY2x1ZGUgImdmczIuaCIKLSNpbmNsdWRlICJpbmNvcmUuaCIKLSNpbmNsdWRlICJnbG9jay5oIgotI2luY2x1ZGUgImxtLmgiCi0jaW5jbHVkZSAic3VwZXIuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0KLS8qKgotICogZ2ZzMl9sbV9tb3VudCAtIG1vdW50IGEgbG9ja2luZyBwcm90b2NvbAotICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KLSAqIEBhcmdzOiBtb3VudCBhcmd1ZW1lbnRzCi0gKiBAc2lsZW50OiBpZiAxLCBkb24ndCBjb21wbGFpbiBpZiB0aGUgRlMgaXNuJ3QgYSBHRlMyIGZzCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1pbnQgZ2ZzMl9sbV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IHNpbGVudCkKLXsKLQljaGFyICpwcm90byA9IHNkcC0+c2RfcHJvdG9fbmFtZTsKLQljaGFyICp0YWJsZSA9IHNkcC0+c2RfdGFibGVfbmFtZTsKLQlpbnQgZmxhZ3MgPSAwOwotCWludCBlcnJvcjsKLQotCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQotCQlmbGFncyB8PSBMTV9NRkxBR19TUEVDVEFUT1I7Ci0KLQlmc19pbmZvKHNkcCwgIlRyeWluZyB0byBqb2luIGNsdXN0ZXIgXCIlc1wiLCBcIiVzXCJcbiIsIHByb3RvLCB0YWJsZSk7Ci0KLQllcnJvciA9IGdmczJfbW91bnRfbG9ja3Byb3RvKHByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhLAotCQkJCSAgICAgZ2ZzMl9nbG9ja19jYiwgc2RwLAotCQkJCSAgICAgR0ZTMl9NSU5fTFZCX1NJWkUsIGZsYWdzLAotCQkJCSAgICAgJnNkcC0+c2RfbG9ja3N0cnVjdCwgJnNkcC0+c2Rfa29iaik7Ci0JaWYgKGVycm9yKSB7Ci0JCWZzX2luZm8oc2RwLCAiY2FuJ3QgbW91bnQgcHJvdG89JXMsIHRhYmxlPSVzLCBob3N0ZGF0YT0lc1xuIiwKLQkJCXByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlKSB8fAotCSAgICBnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcykgfHwKLQkgICAgZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19sdmJfc2l6ZSA+PQotCQkJCSAgR0ZTMl9NSU5fTFZCX1NJWkUpKSB7Ci0JCWdmczJfdW5tb3VudF9sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQotCQlzbnByaW50ZihzZHAtPnNkX2ZzbmFtZSwgR0ZTMl9GU05BTUVfTEVOLCAiJXMucyIsIHRhYmxlKTsKLQllbHNlCi0JCXNucHJpbnRmKHNkcC0+c2RfZnNuYW1lLCBHRlMyX0ZTTkFNRV9MRU4sICIlcy4ldSIsIHRhYmxlLAotCQkJIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpOwotCi0JZnNfaW5mbyhzZHAsICJKb2luZWQgY2x1c3Rlci4gTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKLQotCWlmICgoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ZsYWdzICYgTE1fTFNGTEFHX0xPQ0FMKSAmJgotCSAgICAhc2RwLT5zZF9hcmdzLmFyX2lnbm9yZV9sb2NhbF9mcykgewotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MgPSAxOwotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxjYWNoaW5nID0gMTsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQotewotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fb3RoZXJzX21heV9tb3VudCgKLQkJCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSk7Ci19Ci0KLXZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQotewotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKLX0KLQotaW50IGdmczJfbG1fd2l0aGRyYXcoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQotCQlyZXR1cm4gMDsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLQotCWZzX2VycihzZHAsICJhYm91dCB0byB3aXRoZHJhdyB0aGlzIGZpbGUgc3lzdGVtXG4iKTsKLQlCVUdfT04oc2RwLT5zZF9hcmdzLmFyX2RlYnVnKTsKLQotCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHdpdGhkcmF3XG4iKTsKLQlnZnMyX3dpdGhkcmF3X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKLQlmc19lcnIoc2RwLCAid2l0aGRyYXduXG4iKTsKLQlkdW1wX3N0YWNrKCk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBnZnMyX2xtX2dldF9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgdm9pZCAqKmxvY2twKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2dldF9sb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGxvY2twKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2ZzMl9sbV9wdXRfbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaykKLXsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKGxvY2spOwotfQotCi11bnNpZ25lZCBpbnQgZ2ZzMl9sbV9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLAotCQkJICB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlLCB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLAotCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaW50IHJldCA9IDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlyZXQgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9sb2NrKGxvY2ssIGN1cl9zdGF0ZSwKLQkJCQkJCQkgcmVxX3N0YXRlLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotdW5zaWduZWQgaW50IGdmczJfbG1fdW5sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLAotCQkJICAgIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpCi17Ci0JaW50IHJldCA9IDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlyZXQgPSAgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fdW5sb2NrKGxvY2ssIGN1cl9zdGF0ZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBnZnMyX2xtX2NhbmNlbChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaykKLXsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbChsb2NrKTsKLX0KLQotaW50IGdmczJfbG1faG9sZF9sdmIoc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2hvbGRfbHZiKGxvY2ssIGx2YnApOwotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBnZnMyX2xtX3VuaG9sZF9sdmIoc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssIGNoYXIgKmx2YikKLXsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3VuaG9sZF9sdmIobG9jaywgbHZiKTsKLX0KLQotaW50IGdmczJfbG1fcGxvY2tfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wbG9ja19nZXQoCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgZmwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotaW50IGdmczJfbG1fcGxvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcGxvY2soCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgY21kLCBmbCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1pbnQgZ2ZzMl9sbV9wdW5sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0JaW50IGVycm9yID0gLUVJTzsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHVubG9jaygKLQkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBmbCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdmczJfbG1fcmVjb3ZlcnlfZG9uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCwKLQkJCSAgIHVuc2lnbmVkIGludCBtZXNzYWdlKQotewotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcmVjb3ZlcnlfZG9uZSgKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIGppZCwgbWVzc2FnZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG0uaCBiL2ZzL2dmczIvbG0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFjZGMzMC4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIF9fTE1fRE9UX0hfXwotI2RlZmluZSBfX0xNX0RPVF9IX18KLQotc3RydWN0IGdmczJfc2JkOwotCi0jZGVmaW5lIEdGUzJfTUlOX0xWQl9TSVpFIDMyCi0KLWludCBnZnMyX2xtX21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KTsKLXZvaWQgZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLXZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLWludCBnZnMyX2xtX3dpdGhkcmF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmbXQsIC4uLikKLQkJCQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKLWludCBnZnMyX2xtX2dldF9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgdm9pZCAqKmxvY2twKTsKLXZvaWQgZ2ZzMl9sbV9wdXRfbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jayk7Ci11bnNpZ25lZCBpbnQgZ2ZzMl9sbV9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLAotCQkJIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKLXVuc2lnbmVkIGludCBnZnMyX2xtX3VubG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaywKLQkJCSAgIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpOwotdm9pZCBnZnMyX2xtX2NhbmNlbChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jayk7Ci1pbnQgZ2ZzMl9sbV9ob2xkX2x2YihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaywgY2hhciAqKmx2YnApOwotdm9pZCBnZnMyX2xtX3VuaG9sZF9sdmIoc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssIGNoYXIgKmx2Yik7Ci1pbnQgZ2ZzMl9sbV9wbG9ja19nZXQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLWludCBnZnMyX2xtX3Bsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLWludCBnZnMyX2xtX3B1bmxvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci12b2lkIGdmczJfbG1fcmVjb3ZlcnlfZG9uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCwKLQkJCSAgIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLQotI2VuZGlmIC8qIF9fTE1fRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2suYwppbmRleCA1NDJhNzk3Li5jZjdlYThhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2suYworKysgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2suYwpAQCAtMTM3LDcgKzEzNyw4IEBACiAKIAkJLyogQ29udmVyc2lvbiBkZWFkbG9jayBhdm9pZGFuY2UgYnkgRExNICovCiAKLQkJaWYgKCF0ZXN0X2JpdChMRkxfRk9SQ0VfUFJPTU9URSwgJmxwLT5mbGFncykgJiYKKwkJaWYgKCEobHAtPmxzLT5mc2ZsYWdzICYgTE1fTUZMQUdfQ09OVl9OT0RST1ApICYmCisJCSAgICAhdGVzdF9iaXQoTEZMX0ZPUkNFX1BST01PVEUsICZscC0+ZmxhZ3MpICYmCiAJCSAgICAhKGxrZiAmIERMTV9MS0ZfTk9RVUVVRSkgJiYKIAkJICAgIGN1ciA+IERMTV9MT0NLX05MICYmIHJlcSA+IERMTV9MT0NLX05MICYmIGN1ciAhPSByZXEpCiAJCQlsa2YgfD0gRExNX0xLRl9DT05WREVBRExLOwpAQCAtMTY0LDcgKzE2NSw3IEBACiB7CiAJc3RydWN0IGdkbG1fbG9jayAqbHA7CiAKLQlscCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZGxtX2xvY2spLCBHRlBfS0VSTkVMKTsKKwlscCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZGxtX2xvY2spLCBHRlBfTk9GUyk7CiAJaWYgKCFscCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM4Miw3ICszODMsNyBAQAogewogCWNoYXIgKmx2YjsKIAotCWx2YiA9IGt6YWxsb2MoR0RMTV9MVkJfU0laRSwgR0ZQX0tFUk5FTCk7CisJbHZiID0ga3phbGxvYyhHRExNX0xWQl9TSVpFLCBHRlBfTk9GUyk7CiAJaWYgKCFsdmIpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2tfZGxtLmggYi9mcy9nZnMyL2xvY2tpbmcvZGxtL2xvY2tfZGxtLmgKaW5kZXggOWU4MjY1ZC4uNThmY2Y4YyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oCisrKyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaApAQCAtMTgzLDUgKzE4MywxMCBAQAogCQlzdHJ1Y3QgZmlsZV9sb2NrICopOwogaW50IGdkbG1fcHVubG9jayh2b2lkICosIHN0cnVjdCBsbV9sb2NrbmFtZSAqLCBzdHJ1Y3QgZmlsZSAqLAogCQlzdHJ1Y3QgZmlsZV9sb2NrICopOworCisvKiBtb3VudC5jICovCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKaW5kZXggYTBlN2VkYS4uMzZhMjI1OCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKKysrIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKQEAgLTExLDggKzExLDYgQEAKIAogI2luY2x1ZGUgImxvY2tfZGxtLmgiCiAKLWV4dGVybiBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKLQogc3RhdGljIGludCBfX2luaXQgaW5pdF9sb2NrX2RsbSh2b2lkKQogewogCWludCBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYwppbmRleCBhODdiMDk4Li44NDc5ZGE0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMKKysrIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9zeXNmcy5jCkBAIC0xMiw4ICsxMiw2IEBACiAKICNpbmNsdWRlICJsb2NrX2RsbS5oIgogCi1leHRlcm4gc3RydWN0IGxtX2xvY2tvcHMgZ2RsbV9vcHM7Ci0KIHN0YXRpYyBzc2l6ZV90IHByb3RvX25hbWVfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZ2RsbV9vcHMubG1fcHJvdG9fbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYwppbmRleCA1MjE2OTRmLi5lNTNkYjZmIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jCisrKyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vdGhyZWFkLmMKQEAgLTEzNSw3ICsxMzUsMTUgQEAKIAkJCSBscC0+bGtzYi5zYl9zdGF0dXMsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAogCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKIAkJCSBscC0+ZmxhZ3MpOwotCQlyZXR1cm47CisJCWlmIChscC0+bGtzYi5zYl9zdGF0dXMgPT0gLUVERUFETE9DSyAmJgorCQkgICAgbHAtPmxzLT5mc2ZsYWdzICYgTE1fTUZMQUdfQ09OVl9OT0RST1ApIHsKKwkJCWxwLT5yZXEgPSBscC0+Y3VyOworCQkJYWNiLmxjX3JldCB8PSBMTV9PVVRfQ09OVl9ERUFETEs7CisJCQlpZiAobHAtPmN1ciA9PSBETE1fTE9DS19JVikKKwkJCQlscC0+bGtzYi5zYl9sa2lkID0gMDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UKKwkJCXJldHVybjsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL25vbG9jay9tYWluLmMgYi9mcy9nZnMyL2xvY2tpbmcvbm9sb2NrL21haW4uYwppbmRleCBkM2I4Y2U2Li4yODRhNWVjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvbm9sb2NrL21haW4uYworKysgYi9mcy9nZnMyL2xvY2tpbmcvbm9sb2NrL21haW4uYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJc3RydWN0IG5vbG9ja19sb2Nrc3BhY2UgKm5sID0gbG9jazsKIAlpbnQgZXJyb3IgPSAwOwogCi0JKmx2YnAgPSBremFsbG9jKG5sLT5ubF9sdmJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJKmx2YnAgPSBremFsbG9jKG5sLT5ubF9sdmJfc2l6ZSwgR0ZQX05PRlMpOwogCWlmICghKmx2YnApCiAJCWVycm9yID0gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmMKaW5kZXggMTYxYWI2Zi4uNTQ4MjY0YiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2cuYworKysgYi9mcy9nZnMyL2xvZy5jCkBAIC03NjksOCArNzY5LDggQEAKIAlzZHAtPnNkX2xvZ19jb21taXRlZF9yZXZva2UgKz0gdHItPnRyX251bV9yZXZva2UgLSB0ci0+dHJfbnVtX3Jldm9rZV9ybTsKIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICgoaW50KXNkcC0+c2RfbG9nX2NvbW1pdGVkX3Jldm9rZSkgPj0gMCk7CiAJcmVzZXJ2ZWQgPSBjYWxjX3Jlc2VydmVkKHNkcCk7CisJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCBzZHAtPnNkX2xvZ19ibGtzX3Jlc2VydmVkICsgdHItPnRyX3Jlc2VydmVkID49IHJlc2VydmVkKTsKIAl1bnVzZWQgPSBzZHAtPnNkX2xvZ19ibGtzX3Jlc2VydmVkIC0gcmVzZXJ2ZWQgKyB0ci0+dHJfcmVzZXJ2ZWQ7Ci0JZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCB1bnVzZWQgPj0gMCk7CiAJYXRvbWljX2FkZCh1bnVzZWQsICZzZHAtPnNkX2xvZ19ibGtzX2ZyZWUpOwogCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgYXRvbWljX3JlYWQoJnNkcC0+c2RfbG9nX2Jsa3NfZnJlZSkgPD0KIAkJCSAgICAgc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKQEAgLTc3OSw2ICs3NzksMjEgQEAKIAlnZnMyX2xvZ191bmxvY2soc2RwKTsKIH0KIAorc3RhdGljIHZvaWQgYnVmX2xvX2luY29yZV9jb21taXQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3RyYW5zICp0cikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnRyLT50cl9saXN0X2J1ZjsKKwlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZDsKKworCWdmczJfbG9nX2xvY2soc2RwKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJYmQgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBnZnMyX2J1ZmRhdGEsIGJkX2xpc3RfdHIpOworCQlsaXN0X2RlbF9pbml0KCZiZC0+YmRfbGlzdF90cik7CisJCXRyLT50cl9udW1fYnVmLS07CisJfQorCWdmczJfbG9nX3VubG9jayhzZHApOworCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhdHItPnRyX251bV9idWYpOworfQorCiAvKioKICAqIGdmczJfbG9nX2NvbW1pdCAtIENvbW1pdCBhIHRyYW5zYWN0aW9uIHRvIHRoZSBsb2cKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCkBAIC03OTAsNyArODA1LDcgQEAKIHZvaWQgZ2ZzMl9sb2dfY29tbWl0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIpCiB7CiAJbG9nX3JlZnVuZChzZHAsIHRyKTsKLQlsb3BzX2luY29yZV9jb21taXQoc2RwLCB0cik7CisJYnVmX2xvX2luY29yZV9jb21taXQoc2RwLCB0cik7CiAKIAlzZHAtPnNkX3Zmcy0+c19kaXJ0ID0gMTsKIAl1cF9yZWFkKCZzZHAtPnNkX2xvZ19mbHVzaF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggZmFlNTlkNi4uNDM5MGY2ZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKKysrIGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTE1MiwyMSArMTUyLDYgQEAKIAl1bmxvY2tfYnVmZmVyKGJkLT5iZF9iaCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJ1Zl9sb19pbmNvcmVfY29tbWl0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZ0ci0+dHJfbGlzdF9idWY7Ci0Jc3RydWN0IGdmczJfYnVmZGF0YSAqYmQ7Ci0KLQlnZnMyX2xvZ19sb2NrKHNkcCk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCWJkID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgZ2ZzMl9idWZkYXRhLCBiZF9saXN0X3RyKTsKLQkJbGlzdF9kZWxfaW5pdCgmYmQtPmJkX2xpc3RfdHIpOwotCQl0ci0+dHJfbnVtX2J1Zi0tOwotCX0KLQlnZnMyX2xvZ191bmxvY2soc2RwKTsKLQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXRyLT50cl9udW1fYnVmKTsKLX0KLQogc3RhdGljIHZvaWQgYnVmX2xvX2JlZm9yZV9jb21taXQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTQxOSw4ICs0MDQsMTAgQEAKIAkJCWJsa25vID0gYmU2NF90b19jcHUoKihfX2JlNjQgKikoYmgtPmJfZGF0YSArIG9mZnNldCkpOwogCiAJCQllcnJvciA9IGdmczJfcmV2b2tlX2FkZChzZHAsIGJsa25vLCBzdGFydCk7Ci0JCQlpZiAoZXJyb3IgPCAwKQorCQkJaWYgKGVycm9yIDwgMCkgeworCQkJCWJyZWxzZShiaCk7CiAJCQkJcmV0dXJuIGVycm9yOworCQkJfQogCQkJZWxzZSBpZiAoZXJyb3IpCiAJCQkJc2RwLT5zZF9mb3VuZF9yZXZva2VzKys7CiAKQEAgLTczNyw3ICs3MjQsNiBAQAogCiBjb25zdCBzdHJ1Y3QgZ2ZzMl9sb2dfb3BlcmF0aW9ucyBnZnMyX2J1Zl9sb3BzID0gewogCS5sb19hZGQgPSBidWZfbG9fYWRkLAotCS5sb19pbmNvcmVfY29tbWl0ID0gYnVmX2xvX2luY29yZV9jb21taXQsCiAJLmxvX2JlZm9yZV9jb21taXQgPSBidWZfbG9fYmVmb3JlX2NvbW1pdCwKIAkubG9fYWZ0ZXJfY29tbWl0ID0gYnVmX2xvX2FmdGVyX2NvbW1pdCwKIAkubG9fYmVmb3JlX3NjYW4gPSBidWZfbG9fYmVmb3JlX3NjYW4sCkBAIC03NjMsNyArNzQ5LDYgQEAKIAogY29uc3Qgc3RydWN0IGdmczJfbG9nX29wZXJhdGlvbnMgZ2ZzMl9kYXRhYnVmX2xvcHMgPSB7CiAJLmxvX2FkZCA9IGRhdGFidWZfbG9fYWRkLAotCS5sb19pbmNvcmVfY29tbWl0ID0gYnVmX2xvX2luY29yZV9jb21taXQsCiAJLmxvX2JlZm9yZV9jb21taXQgPSBkYXRhYnVmX2xvX2JlZm9yZV9jb21taXQsCiAJLmxvX2FmdGVyX2NvbW1pdCA9IGRhdGFidWZfbG9fYWZ0ZXJfY29tbWl0LAogCS5sb19zY2FuX2VsZW1lbnRzID0gZGF0YWJ1Zl9sb19zY2FuX2VsZW1lbnRzLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb3BzLmggYi9mcy9nZnMyL2xvcHMuaAppbmRleCA0MWEwMGRmLi4zYzBiMjczIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvcHMuaAorKysgYi9mcy9nZnMyL2xvcHMuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtNTcsMTUgKzU3LDYgQEAKIAkJbGUtPmxlX29wcy0+bG9fYWRkKHNkcCwgbGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9wc19pbmNvcmVfY29tbWl0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLAotCQkJCSAgICAgIHN0cnVjdCBnZnMyX3RyYW5zICp0cikKLXsKLQlpbnQgeDsKLQlmb3IgKHggPSAwOyBnZnMyX2xvZ19vcHNbeF07IHgrKykKLQkJaWYgKGdmczJfbG9nX29wc1t4XS0+bG9faW5jb3JlX2NvbW1pdCkKLQkJCWdmczJfbG9nX29wc1t4XS0+bG9faW5jb3JlX2NvbW1pdChzZHAsIHRyKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGxvcHNfYmVmb3JlX2NvbW1pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKIAlpbnQgeDsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWFpbi5jIGIvZnMvZ2ZzMi9tYWluLmMKaW5kZXggOWM3NzY1Yy4uMDUzZTJlYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTg5LDYgKzg5LDEyIEBACiAJaWYgKCFnZnMyX2J1ZmRhdGFfY2FjaGVwKQogCQlnb3RvIGZhaWw7CiAKKwlnZnMyX3JncnBkX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJnZnMyX3JncnBkIiwKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBnZnMyX3JncnBkKSwKKwkJCQkJICAgICAgMCwgMCwgTlVMTCk7CisJaWYgKCFnZnMyX3JncnBkX2NhY2hlcCkKKwkJZ290byBmYWlsOworCiAJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtMTA4LDYgKzExNCw5IEBACiBmYWlsOgogCWdmczJfZ2xvY2tfZXhpdCgpOwogCisJaWYgKGdmczJfcmdycGRfY2FjaGVwKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9yZ3JwZF9jYWNoZXApOworCiAJaWYgKGdmczJfYnVmZGF0YV9jYWNoZXApCiAJCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX2J1ZmRhdGFfY2FjaGVwKTsKIApAQCAtMTMzLDYgKzE0Miw3IEBACiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMm1ldGFfZnNfdHlwZSk7CiAKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9yZ3JwZF9jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX2J1ZmRhdGFfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9pbm9kZV9jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX2dsb2NrX2NhY2hlcCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19hZGRyZXNzLmMgYi9mcy9nZnMyL29wc19hZGRyZXNzLmMKaW5kZXggYWM3NzJiNi4uOTBhMDRhNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCisrKyBiL2ZzL2dmczIvb3BzX2FkZHJlc3MuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0xMDQsMTEgKzEwMyw5IEBACiAJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAlwZ29mZl90IGVuZF9pbmRleCA9IGlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCXVuc2lnbmVkIG9mZnNldDsKLQlpbnQgcmV0ID0gLUVJTzsKIAogCWlmIChnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIGdmczJfZ2xvY2tfaXNfaGVsZF9leGNsKGlwLT5pX2dsKSkpCiAJCWdvdG8gb3V0OwotCXJldCA9IDA7CiAJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbykKIAkJZ290byByZWRpcnR5OwogCS8qIElzIHRoZSBwYWdlIGZ1bGx5IG91dHNpZGUgaV9zaXplPyAodHJ1bmNhdGUgaW4gcHJvZ3Jlc3MpICovCkBAIC0yODAsNyArMjc3LDcgQEAKIAlpbnQgaTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIG5yYmxvY2tzLCAwKTsKKwlyZXQgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgbnJibG9ja3MsIG5yYmxvY2tzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTEwLDIzICs1MDcsMjYgQEAKIHN0YXRpYyBpbnQgZ2ZzMl9yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdoOwogCWludCBlcnJvcjsKIAotCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgR0xfQVRJTUV8TE1fRkxBR19UUllfMUNCLCAmZ2gpOwotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9hdGltZSgmZ2gpOwotCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwlnaCA9IGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKTsKKwlpZiAoIWdoKSB7CisJCWdoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdmczJfaG9sZGVyKSwgR0ZQX05PRlMpOworCQlpZiAoIWdoKQorCQkJcmV0dXJuIC1FTk9CVUZTOworCQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIEdMX0FUSU1FLCBnaCk7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwotCQlnb3RvIG91dDsKLQl9Ci0JZXJyb3IgPSBfX2dmczJfcmVhZHBhZ2UoZmlsZSwgcGFnZSk7Ci0JZ2ZzMl9nbG9ja19kcSgmZ2gpOwotb3V0OgotCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOwotCWlmIChlcnJvciA9PSBHTFJfVFJZRkFJTEVEKSB7Ci0JCXlpZWxkKCk7CisJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9hdGltZShnaCk7CisJCWlmIChsaWtlbHkoZXJyb3IgIT0gMCkpCisJCQlnb3RvIG91dDsKIAkJcmV0dXJuIEFPUF9UUlVOQ0FURURfUEFHRTsKIAl9CisJZXJyb3IgPSBfX2dmczJfcmVhZHBhZ2UoZmlsZSwgcGFnZSk7CisJZ2ZzMl9nbG9ja19kcShnaCk7CitvdXQ6CisJZ2ZzMl9ob2xkZXJfdW5pbml0KGdoKTsKKwlrZnJlZShnaCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC02NDgsMTUgKzY0OCwxNSBAQAogCiAJaWYgKGFsbG9jX3JlcXVpcmVkKSB7CiAJCWFsID0gZ2ZzMl9hbGxvY19nZXQoaXApOworCQlpZiAoIWFsKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAotCQllcnJvciA9IGdmczJfcXVvdGFfbG9jayhpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOworCQllcnJvciA9IGdmczJfcXVvdGFfbG9ja19jaGVjayhpcCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X2FsbG9jX3B1dDsKIAotCQllcnJvciA9IGdmczJfcXVvdGFfY2hlY2soaXAsIGlwLT5pX2lub2RlLmlfdWlkLCBpcC0+aV9pbm9kZS5pX2dpZCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X3F1bmxvY2s7Ci0KIAkJYWwtPmFsX3JlcXVlc3RlZCA9IGRhdGFfYmxvY2tzICsgaW5kX2Jsb2NrczsKIAkJZXJyb3IgPSBnZnMyX2lucGxhY2VfcmVzZXJ2ZShpcCk7CiAJCWlmIChlcnJvcikKQEAgLTgyOCw3ICs4MjgsNyBAQAogCXVuc2lnbmVkIGludCB0byA9IGZyb20gKyBsZW47CiAJaW50IHJldDsKIAotCUJVR19PTihnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShpcC0+aV9nbCkgPT0gMCk7CisJQlVHX09OKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSBOVUxMKTsKIAogCXJldCA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMgYi9mcy9nZnMyL29wc19kZW50cnkuYwppbmRleCA3OTNlMzM0Li40YTVlNjc2IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19kZW50cnkuYworKysgYi9mcy9nZnMyL29wc19kZW50cnkuYwpAQCAtNDMsNyArNDMsNyBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBkX2doOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IE5VTEw7CiAJaW50IGVycm9yOwotCWludCBoYWRfbG9jaz0wOworCWludCBoYWRfbG9jayA9IDA7CiAKIAlpZiAoaW5vZGUpIHsKIAkJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCkBAIC01NCw3ICs1NCw3IEBACiAJaWYgKHNkcC0+c2RfYXJncy5hcl9sb2NhbGNhY2hpbmcpCiAJCWdvdG8gdmFsaWQ7CiAKLQloYWRfbG9jayA9IGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGRpcC0+aV9nbCk7CisJaGFkX2xvY2sgPSAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoZGlwLT5pX2dsKSAhPSBOVUxMKTsKIAlpZiAoIWhhZF9sb2NrKSB7CiAJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGRpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCAwLCAmZF9naCk7CiAJCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2V4cG9ydC5jIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKaW5kZXggMzM0YzdmOC4uOTkwZDlmNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKKysrIGIvZnMvZ2ZzMi9vcHNfZXhwb3J0LmMKQEAgLTIwNCw4ICsyMDQsNiBAQAogCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX1VOS05PV04sCiAJCQkJCWludW0tPm5vX2FkZHIsCiAJCQkJCTAsIDApOwotCWlmICghaW5vZGUpCi0JCWdvdG8gZmFpbDsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnJvciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19maWxlLmMgYi9mcy9nZnMyL29wc19maWxlLmMKaW5kZXggZjQ4NDJmMi4uZTFiN2Q1MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZmlsZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiZ2xvcHMuaCIKICNpbmNsdWRlICJpbm9kZS5oIgotI2luY2x1ZGUgImxtLmgiCiAjaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAibWV0YV9pby5oIgogI2luY2x1ZGUgInF1b3RhLmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImVhb3BzLmgiCiAjaW5jbHVkZSAib3BzX2FkZHJlc3MuaCIKKyNpbmNsdWRlICJvcHNfaW5vZGUuaCIKIAogLyoqCiAgKiBnZnMyX2xsc2VlayAtIHNlZWsgdG8gYSBsb2NhdGlvbiBpbiBhIGZpbGUKQEAgLTM2OSwxMiArMzY5LDkgQEAKIAlpZiAoYWwgPT0gTlVMTCkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JcmV0ID0gZ2ZzMl9xdW90YV9sb2NrKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CisJcmV0ID0gZ2ZzMl9xdW90YV9sb2NrX2NoZWNrKGlwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9hbGxvY19wdXQ7Ci0JcmV0ID0gZ2ZzMl9xdW90YV9jaGVjayhpcCwgaXAtPmlfaW5vZGUuaV91aWQsIGlwLT5pX2lub2RlLmlfZ2lkKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9xdW90YV91bmxvY2s7CiAJYWwtPmFsX3JlcXVlc3RlZCA9IGRhdGFfYmxvY2tzICsgaW5kX2Jsb2NrczsKIAlyZXQgPSBnZnMyX2lucGxhY2VfcmVzZXJ2ZShpcCk7CiAJaWYgKHJldCkKQEAgLTU5Niw2ICs1OTMsMzYgQEAKIAlyZXR1cm4gZ2VuZXJpY19zZXRsZWFzZShmaWxlLCBhcmcsIGZsKTsKIH0KIAorc3RhdGljIGludCBnZnMyX2xtX3Bsb2NrX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJaW50IGVycm9yID0gLUVJTzsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcGxvY2tfZ2V0KAorCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGZsKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl9sbV9wbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAorCQkgIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlpbnQgZXJyb3IgPSAtRUlPOworCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKKwkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wbG9jaygKKwkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBjbWQsIGZsKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl9sbV9wdW5sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCisJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJaW50IGVycm9yID0gLUVJTzsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCWVycm9yID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHVubG9jaygKKwkJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBuYW1lLCBmaWxlLCBmbCk7CisJcmV0dXJuIGVycm9yOworfQorCiAvKioKICAqIGdmczJfbG9jayAtIGFjcXVpcmUvcmVsZWFzZSBhIHBvc2l4IGxvY2sgb24gYSBmaWxlCiAgKiBAZmlsZTogdGhlIGZpbGUgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCA0YmVlNmFhLi5lZjljNmM0IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiZ2xvcHMuaCIKICNpbmNsdWRlICJpbm9kZS5oIgotI2luY2x1ZGUgImxtLmgiCiAjaW5jbHVkZSAibW91bnQuaCIKICNpbmNsdWRlICJvcHNfZnN0eXBlLmgiCiAjaW5jbHVkZSAib3BzX2RlbnRyeS5oIgpAQCAtMzYzLDYgKzM2MiwxMyBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQgZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKKwkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fb3RoZXJzX21heV9tb3VudCgKKwkJCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSk7Cit9CisKIHN0YXRpYyBpbnQgaW5pdF9qb3VybmFsKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgdW5kbykKIHsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgamlfZ2g7CkBAIC01NDIsNyArNTQ4LDcgQEAKIAl9CiAJaXAgPSBHRlMyX0koc2RwLT5zZF9yaW5kZXgpOwogCXNldF9iaXQoR0xGX1NUSUNLWSwgJmlwLT5pX2dsLT5nbF9mbGFncyk7Ci0Jc2RwLT5zZF9yaW5kZXhfdm4gPSBpcC0+aV9nbC0+Z2xfdm4gLSAxOworCXNkcC0+c2RfcmluZGV4X3VwdG9kYXRlID0gMDsKIAogCS8qIFJlYWQgaW4gdGhlIHF1b3RhIGlub2RlICovCiAJc2RwLT5zZF9xdW90YV9pbm9kZSA9IGdmczJfbG9va3VwX3NpbXBsZShzZHAtPnNkX21hc3Rlcl9kaXIsICJxdW90YSIpOwpAQCAtNzA1LDYgKzcxMSw2OSBAQAogfQogCiAvKioKKyAqIGdmczJfbG1fbW91bnQgLSBtb3VudCBhIGxvY2tpbmcgcHJvdG9jb2wKKyAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCisgKiBAYXJnczogbW91bnQgYXJndWVtZW50cworICogQHNpbGVudDogaWYgMSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlIEZTIGlzbid0IGEgR0ZTMiBmcworICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworc3RhdGljIGludCBnZnMyX2xtX21vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KQoreworCWNoYXIgKnByb3RvID0gc2RwLT5zZF9wcm90b19uYW1lOworCWNoYXIgKnRhYmxlID0gc2RwLT5zZF90YWJsZV9uYW1lOworCWludCBmbGFncyA9IExNX01GTEFHX0NPTlZfTk9EUk9QOworCWludCBlcnJvcjsKKworCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQorCQlmbGFncyB8PSBMTV9NRkxBR19TUEVDVEFUT1I7CisKKwlmc19pbmZvKHNkcCwgIlRyeWluZyB0byBqb2luIGNsdXN0ZXIgXCIlc1wiLCBcIiVzXCJcbiIsIHByb3RvLCB0YWJsZSk7CisKKwllcnJvciA9IGdmczJfbW91bnRfbG9ja3Byb3RvKHByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhLAorCQkJCSAgICAgZ2ZzMl9nbG9ja19jYiwgc2RwLAorCQkJCSAgICAgR0ZTMl9NSU5fTFZCX1NJWkUsIGZsYWdzLAorCQkJCSAgICAgJnNkcC0+c2RfbG9ja3N0cnVjdCwgJnNkcC0+c2Rfa29iaik7CisJaWYgKGVycm9yKSB7CisJCWZzX2luZm8oc2RwLCAiY2FuJ3QgbW91bnQgcHJvdG89JXMsIHRhYmxlPSVzLCBob3N0ZGF0YT0lc1xuIiwKKwkJCXByb3RvLCB0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2hvc3RkYXRhKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlKSB8fAorCSAgICBnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcykgfHwKKwkgICAgZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19sdmJfc2l6ZSA+PQorCQkJCSAgR0ZTMl9NSU5fTFZCX1NJWkUpKSB7CisJCWdmczJfdW5tb3VudF9sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQorCQlzbnByaW50ZihzZHAtPnNkX2ZzbmFtZSwgR0ZTMl9GU05BTUVfTEVOLCAiJXMucyIsIHRhYmxlKTsKKwllbHNlCisJCXNucHJpbnRmKHNkcC0+c2RfZnNuYW1lLCBHRlMyX0ZTTkFNRV9MRU4sICIlcy4ldSIsIHRhYmxlLAorCQkJIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpOworCisJZnNfaW5mbyhzZHAsICJKb2luZWQgY2x1c3Rlci4gTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKKworCWlmICgoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ZsYWdzICYgTE1fTFNGTEFHX0xPQ0FMKSAmJgorCSAgICAhc2RwLT5zZF9hcmdzLmFyX2lnbm9yZV9sb2NhbF9mcykgeworCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MgPSAxOworCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxjYWNoaW5nID0gMTsKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKKwkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKK30KKworLyoqCiAgKiBmaWxsX3N1cGVyIC0gUmVhZCBpbiBzdXBlcmJsb2NrCiAgKiBAc2I6IFRoZSBWRlMgc3VwZXJibG9jawogICogQGRhdGE6IE1vdW50IG9wdGlvbnMKQEAgLTg3NCw3ICs5NDMsNiBAQAogewogCXN0cnVjdCBrc3RhdCBzdGF0OwogCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0Jc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzdHlwZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gTlVMTCwgKnM7CiAJaW50IGVycm9yOwogCkBAIC04ODYsOCArOTU0LDcgQEAKIAl9CiAJZXJyb3IgPSB2ZnNfZ2V0YXR0cihuZC5wYXRoLm1udCwgbmQucGF0aC5kZW50cnksICZzdGF0KTsKIAotCWZzdHlwZSA9IGdldF9mc190eXBlKCJnZnMyIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmZnN0eXBlLT5mc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmZ2ZzMl9mc190eXBlLmZzX3N1cGVycywgc19pbnN0YW5jZXMpIHsKIAkJaWYgKChTX0lTQkxLKHN0YXQubW9kZSkgJiYgcy0+c19kZXYgPT0gc3RhdC5yZGV2KSB8fAogCQkgICAgKFNfSVNESVIoc3RhdC5tb2RlKSAmJgogCQkgICAgIHMgPT0gbmQucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2IpKSB7CkBAIC05MzEsNyArOTk4LDYgQEAKIAkJZXJyb3IgPSBQVFJfRVJSKG5ldyk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCW1vZHVsZV9wdXQoZnNfdHlwZS0+b3duZXIpOwogCW5ldy0+c19mbGFncyA9IGZsYWdzOwogCXN0cmxjcHkobmV3LT5zX2lkLCBzYi0+c19pZCwgc2l6ZW9mKG5ldy0+c19pZCkpOwogCXNiX3NldF9ibG9ja3NpemUobmV3LCBzYi0+c19ibG9ja3NpemUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKaW5kZXggZTg3NDEyOS4uMjY4NmFkNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYworKysgYi9mcy9nZnMyL29wc19pbm9kZS5jCkBAIC0yMDAsMTUgKzIwMCwxNSBAQAogCiAJaWYgKGFsbG9jX3JlcXVpcmVkKSB7CiAJCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGdmczJfYWxsb2NfZ2V0KGRpcCk7CisJCWlmICghYWwpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisJCX0KIAotCQllcnJvciA9IGdmczJfcXVvdGFfbG9jayhkaXAsIE5PX1FVT1RBX0NIQU5HRSwgTk9fUVVPVEFfQ0hBTkdFKTsKKwkJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2tfY2hlY2soZGlwKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfYWxsb2M7CiAKLQkJZXJyb3IgPSBnZnMyX3F1b3RhX2NoZWNrKGRpcCwgZGlwLT5pX2lub2RlLmlfdWlkLCBkaXAtPmlfaW5vZGUuaV9naWQpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9ndW5sb2NrX3E7Ci0KIAkJYWwtPmFsX3JlcXVlc3RlZCA9IHNkcC0+c2RfbWF4X2RpcnJlczsKIAogCQllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlKGRpcCk7CkBAIC03MTYsMTUgKzcxNiwxNSBAQAogCiAJaWYgKGFsbG9jX3JlcXVpcmVkKSB7CiAJCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGdmczJfYWxsb2NfZ2V0KG5kaXApOworCQlpZiAoIWFsKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9ndW5sb2NrOworCQl9CiAKLQkJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2sobmRpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOworCQllcnJvciA9IGdmczJfcXVvdGFfbG9ja19jaGVjayhuZGlwKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfYWxsb2M7CiAKLQkJZXJyb3IgPSBnZnMyX3F1b3RhX2NoZWNrKG5kaXAsIG5kaXAtPmlfaW5vZGUuaV91aWQsIG5kaXAtPmlfaW5vZGUuaV9naWQpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9ndW5sb2NrX3E7Ci0KIAkJYWwtPmFsX3JlcXVlc3RlZCA9IHNkcC0+c2RfbWF4X2RpcnJlczsKIAogCQllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlKG5kaXApOwpAQCAtODk4LDcgKzg5OCw3IEBACiAJaW50IGVycm9yOwogCWludCB1bmxvY2sgPSAwOwogCi0JaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSAwKSB7CisJaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSBOVUxMKSB7CiAJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmaV9naCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTk1Myw3ICs5NTMsOCBAQAogCWlmICghKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpIHx8IG9naWQgPT0gbmdpZCkKIAkJb2dpZCA9IG5naWQgPSBOT19RVU9UQV9DSEFOR0U7CiAKLQlnZnMyX2FsbG9jX2dldChpcCk7CisJaWYgKCFnZnMyX2FsbG9jX2dldChpcCkpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2soaXAsIG51aWQsIG5naWQpOwogCWlmIChlcnJvcikKQEAgLTk4MSw4ICs5ODIsOSBAQAogCWJyZWxzZShkaWJoKTsKIAogCWlmIChvdWlkICE9IE5PX1FVT1RBX0NIQU5HRSB8fCBvZ2lkICE9IE5PX1FVT1RBX0NIQU5HRSkgewotCQlnZnMyX3F1b3RhX2NoYW5nZShpcCwgLWlwLT5pX2RpLmRpX2Jsb2Nrcywgb3VpZCwgb2dpZCk7Ci0JCWdmczJfcXVvdGFfY2hhbmdlKGlwLCBpcC0+aV9kaS5kaV9ibG9ja3MsIG51aWQsIG5naWQpOworCQl1NjQgYmxvY2tzID0gZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSk7CisJCWdmczJfcXVvdGFfY2hhbmdlKGlwLCAtYmxvY2tzLCBvdWlkLCBvZ2lkKTsKKwkJZ2ZzMl9xdW90YV9jaGFuZ2UoaXAsIGJsb2NrcywgbnVpZCwgbmdpZCk7CiAJfQogCiBvdXRfZW5kX3RyYW5zOgpAQCAtMTA2NCw3ICsxMDY2LDcgQEAKIAlpbnQgZXJyb3I7CiAJaW50IHVubG9jayA9IDA7CiAKLQlpZiAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoaXAtPmlfZ2wpID09IDApIHsKKwlpZiAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoaXAtPmlfZ2wpID09IE5VTEwpIHsKIAkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTExNDgsMTYgKzExNTAsNiBAQAogCS5yZW1vdmV4YXR0ciA9IGdmczJfcmVtb3ZleGF0dHIsCiB9OwogCi1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rldl9pb3BzID0gewotCS5wZXJtaXNzaW9uID0gZ2ZzMl9wZXJtaXNzaW9uLAotCS5zZXRhdHRyID0gZ2ZzMl9zZXRhdHRyLAotCS5nZXRhdHRyID0gZ2ZzMl9nZXRhdHRyLAotCS5zZXR4YXR0ciA9IGdmczJfc2V0eGF0dHIsCi0JLmdldHhhdHRyID0gZ2ZzMl9nZXR4YXR0ciwKLQkubGlzdHhhdHRyID0gZ2ZzMl9saXN0eGF0dHIsCi0JLnJlbW92ZXhhdHRyID0gZ2ZzMl9yZW1vdmV4YXR0ciwKLX07Ci0KIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZGlyX2lvcHMgPSB7CiAJLmNyZWF0ZSA9IGdmczJfY3JlYXRlLAogCS5sb29rdXAgPSBnZnMyX2xvb2t1cCwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmggYi9mcy9nZnMyL29wc19pbm9kZS5oCmluZGV4IGZkOGNlZTIuLjE0YjRiNzkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmgKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuaApAQCAtMTUsNyArMTUsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZmlsZV9pb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZGlyX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9zeW1saW5rX2lvcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9kZXZfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzX25vbG9jazsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX3N1cGVyLmMgYi9mcy9nZnMyL29wc19zdXBlci5jCmluZGV4IDVlNTI0MjEuLjIyNzhjNjggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9vcHNfc3VwZXIuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgImluY29yZS5oIgogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKLSNpbmNsdWRlICJsbS5oIgogI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgIm1vdW50LmgiCiAjaW5jbHVkZSAib3BzX3N1cGVyLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggYTA4ZGFiZC4uNTZhYWY5MSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtOTQsNyArOTQsNyBAQAogCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkOwogCWludCBlcnJvcjsKIAotCXFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdmczJfcXVvdGFfZGF0YSksIEdGUF9LRVJORUwpOworCXFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdmczJfcXVvdGFfZGF0YSksIEdGUF9OT0ZTKTsKIAlpZiAoIXFkKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNjE2LDE2ICs2MTYsOSBAQAogCXM2NCB2YWx1ZTsKIAlpbnQgZXJyID0gLUVJTzsKIAotCWlmIChnZnMyX2lzX3N0dWZmZWQoaXApKSB7Ci0JCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IE5VTEw7Ci0JCWFsID0gZ2ZzMl9hbGxvY19nZXQoaXApOwotCQkvKiBqdXN0IHJlcXVlc3QgMSBibGsgKi8KLQkJYWwtPmFsX3JlcXVlc3RlZCA9IDE7Ci0JCWdmczJfaW5wbGFjZV9yZXNlcnZlKGlwKTsKKwlpZiAoZ2ZzMl9pc19zdHVmZmVkKGlwKSkKIAkJZ2ZzMl91bnN0dWZmX2Rpbm9kZShpcCwgTlVMTCk7Ci0JCWdmczJfaW5wbGFjZV9yZWxlYXNlKGlwKTsKLQkJZ2ZzMl9hbGxvY19wdXQoaXApOwotCX0KKwkKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4KTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjkwLDE0ICs2ODMsMTQgQEAKIAl1bnNpZ25lZCBpbnQgcXgsIHg7CiAJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CiAJbG9mZl90IG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgbmFsbG9jID0gMDsKKwl1bnNpZ25lZCBpbnQgbmFsbG9jID0gMCwgYmxvY2tzOwogCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IE5VTEw7CiAJaW50IGVycm9yOwogCiAJZ2ZzMl93cml0ZV9jYWxjX3Jlc2VydihpcCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKSwKIAkJCSAgICAgICZkYXRhX2Jsb2NrcywgJmluZF9ibG9ja3MpOwogCi0JZ2hzID0ga2NhbGxvYyhudW1fcWQsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9ob2xkZXIpLCBHRlBfS0VSTkVMKTsKKwlnaHMgPSBrY2FsbG9jKG51bV9xZCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2hvbGRlciksIEdGUF9OT0ZTKTsKIAlpZiAoIWdocykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTcyNywzMCArNzIwLDMzIEBACiAJCQluYWxsb2MrKzsKIAl9CiAKLQlpZiAobmFsbG9jKSB7Ci0JCWFsID0gZ2ZzMl9hbGxvY19nZXQoaXApOwotCi0JCWFsLT5hbF9yZXF1ZXN0ZWQgPSBuYWxsb2MgKiAoZGF0YV9ibG9ja3MgKyBpbmRfYmxvY2tzKTsKLQotCQllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlKGlwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfYWxsb2M7Ci0KLQkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwKLQkJCQkJIGFsLT5hbF9yZ2QtPnJkX2xlbmd0aCArCi0JCQkJCSBudW1fcWQgKiBkYXRhX2Jsb2NrcyArCi0JCQkJCSBuYWxsb2MgKiBpbmRfYmxvY2tzICsKLQkJCQkJIFJFU19ESU5PREUgKyBudW1fcWQgKwotCQkJCQkgUkVTX1NUQVRGUywgMCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2lwcmVzOwotCX0gZWxzZSB7Ci0JCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsCi0JCQkJCSBudW1fcWQgKiBkYXRhX2Jsb2NrcyArCi0JCQkJCSBSRVNfRElOT0RFICsgbnVtX3FkLCAwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9jazsKKwlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKKwlpZiAoIWFsKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfZ3VubG9jazsKIAl9CisJLyogCisJICogMSBibGsgZm9yIHVuc3R1ZmZpbmcgaW5vZGUgaWYgc3R1ZmZlZC4gV2UgYWRkIHRoaXMgZXh0cmEKKwkgKiBibG9jayB0byB0aGUgcmVzZXJ2YXRpb24gdW5jb25kaXRpb25hbGx5LiBJZiB0aGUgaW5vZGUKKwkgKiBkb2Vzbid0IG5lZWQgdW5zdHVmZmluZywgdGhlIGJsb2NrIHdpbGwgYmUgcmVsZWFzZWQgdG8gdGhlIAorCSAqIHJncnAgc2luY2UgaXQgd29uJ3QgYmUgYWxsb2NhdGVkIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24KKwkgKi8KKwlhbC0+YWxfcmVxdWVzdGVkID0gMTsKKwkvKiArMSBpbiB0aGUgZW5kIGZvciBibG9jayByZXF1ZXN0ZWQgYWJvdmUgZm9yIHVuc3R1ZmZpbmcgKi8KKwlibG9ja3MgPSBudW1fcWQgKiBkYXRhX2Jsb2NrcyArIFJFU19ESU5PREUgKyBudW1fcWQgKyAxOworCisJaWYgKG5hbGxvYykKKwkJYWwtPmFsX3JlcXVlc3RlZCArPSBuYWxsb2MgKiAoZGF0YV9ibG9ja3MgKyBpbmRfYmxvY2tzKTsJCQorCWVycm9yID0gZ2ZzMl9pbnBsYWNlX3Jlc2VydmUoaXApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfYWxsb2M7CisKKwlpZiAobmFsbG9jKQorCQlibG9ja3MgKz0gYWwtPmFsX3JnZC0+cmRfbGVuZ3RoICsgbmFsbG9jICogaW5kX2Jsb2NrcyArIFJFU19TVEFURlM7CisKKwllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBibG9ja3MsIDApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfaXByZXM7CiAKIAlmb3IgKHggPSAwOyB4IDwgbnVtX3FkOyB4KyspIHsKIAkJcWQgPSBxZGFbeF07CkBAIC03NjksMTEgKzc2NSw5IEBACiBvdXRfZW5kX3RyYW5zOgogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiBvdXRfaXByZXM6Ci0JaWYgKG5hbGxvYykKLQkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoaXApOworCWdmczJfaW5wbGFjZV9yZWxlYXNlKGlwKTsKIG91dF9hbGxvYzoKLQlpZiAobmFsbG9jKQotCQlnZnMyX2FsbG9jX3B1dChpcCk7CisJZ2ZzMl9hbGxvY19wdXQoaXApOwogb3V0X2d1bmxvY2s6CiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwogb3V0OgpAQCAtMTEyNCwxMiArMTExOCwxMiBAQAogCWVycm9yID0gLUVOT01FTTsKIAogCXNkcC0+c2RfcXVvdGFfYml0bWFwID0ga2NhbGxvYyhzZHAtPnNkX3F1b3RhX2NodW5rcywKLQkJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKiksIEdGUF9LRVJORUwpOworCQkJCSAgICAgICBzaXplb2YodW5zaWduZWQgY2hhciAqKSwgR0ZQX05PRlMpOwogCWlmICghc2RwLT5zZF9xdW90YV9iaXRtYXApCiAJCXJldHVybiBlcnJvcjsKIAogCWZvciAoeCA9IDA7IHggPCBzZHAtPnNkX3F1b3RhX2NodW5rczsgeCsrKSB7Ci0JCXNkcC0+c2RfcXVvdGFfYml0bWFwW3hdID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQlzZHAtPnNkX3F1b3RhX2JpdG1hcFt4XSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfTk9GUyk7CiAJCWlmICghc2RwLT5zZF9xdW90YV9iaXRtYXBbeF0pCiAJCQlnb3RvIGZhaWw7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5oIGIvZnMvZ2ZzMi9xdW90YS5oCmluZGV4IGE4YmUxNDEuLjNiN2Y0YjAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuaAorKysgYi9mcy9nZnMyL3F1b3RhLmgKQEAgLTMyLDQgKzMyLDIxIEBACiB2b2lkIGdmczJfcXVvdGFfc2NhbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiB2b2lkIGdmczJfcXVvdGFfY2xlYW51cChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdmczJfcXVvdGFfbG9ja19jaGVjayhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CisJaW50IHJldDsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3F1b3RhID09IEdGUzJfUVVPVEFfT0ZGKQorCQlyZXR1cm4gMDsKKwlyZXQgPSBnZnMyX3F1b3RhX2xvY2soaXAsIE5PX1FVT1RBX0NIQU5HRSwgTk9fUVVPVEFfQ0hBTkdFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmIChzZHAtPnNkX2FyZ3MuYXJfcXVvdGEgIT0gR0ZTMl9RVU9UQV9PTikKKwkJcmV0dXJuIDA7CisJcmV0ID0gZ2ZzMl9xdW90YV9jaGVjayhpcCwgaXAtPmlfaW5vZGUuaV91aWQsIGlwLT5pX2lub2RlLmlfZ2lkKTsKKwlpZiAocmV0KQorCQlnZnMyX3F1b3RhX3VubG9jayhpcCk7CisJcmV0dXJuIHJldDsKK30KKwogI2VuZGlmIC8qIF9fUVVPVEFfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZWNvdmVyeS5jIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCmluZGV4IDZmYjA3ZDYuLjI4ODhlNGIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmVjb3ZlcnkuYworKysgYi9mcy9nZnMyL3JlY292ZXJ5LmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJibWFwLmgiCiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJnbG9wcy5oIgotI2luY2x1ZGUgImxtLmgiCiAjaW5jbHVkZSAibG9wcy5oIgogI2luY2x1ZGUgIm1ldGFfaW8uaCIKICNpbmNsdWRlICJyZWNvdmVyeS5oIgpAQCAtNjksNyArNjgsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnZnMyX3Jldm9rZV9yZXBsYXkpLCBHRlBfS0VSTkVMKTsKKwlyciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnZnMyX3Jldm9rZV9yZXBsYXkpLCBHRlBfTk9GUyk7CiAJaWYgKCFycikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE1MCw3ICsxNDksNyBAQAogCQkJICBzdHJ1Y3QgZ2ZzMl9sb2dfaGVhZGVyX2hvc3QgKmhlYWQpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlzdHJ1Y3QgZ2ZzMl9sb2dfaGVhZGVyX2hvc3QgbGg7CisJc3RydWN0IGdmczJfbG9nX2hlYWRlcl9ob3N0IHVuaW5pdGlhbGl6ZWRfdmFyKGxoKTsKIAljb25zdCB1MzIgbm90aGluZyA9IDA7CiAJdTMyIGhhc2g7CiAJaW50IGVycm9yOwpAQCAtNDI1LDYgKzQyNCwxNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorCitzdGF0aWMgdm9pZCBnZnMyX2xtX3JlY292ZXJ5X2RvbmUoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWVzc2FnZSkKK3sKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCisJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3JlY292ZXJ5X2RvbmUoCisJCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBqaWQsIG1lc3NhZ2UpOworfQorCisKIC8qKgogICogZ2ZzMl9yZWNvdmVyX2pvdXJuYWwgLSByZWNvdmVyeSBhIGdpdmVuIGpvdXJuYWwKICAqIEBqZDogdGhlIHN0cnVjdCBnZnMyX2pkZXNjIGRlc2NyaWJpbmcgdGhlIGpvdXJuYWwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggMzU1MjExMC4uN2U4ZjBiMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTMzLDYgKzM0LDE2IEBACiAjZGVmaW5lIEJGSVROT0VOVCAoKHUzMil+MCkKICNkZWZpbmUgTk9fQkxPQ0sgKCh1NjQpfjApCiAKKyNpZiBCSVRTX1BFUl9MT05HID09IDMyCisjZGVmaW5lIExCSVRNQVNLICAgKDB4NTU1NTU1NTVVTCkKKyNkZWZpbmUgTEJJVFNLSVA1NSAoMHg1NTU1NTU1NVVMKQorI2RlZmluZSBMQklUU0tJUDAwICgweDAwMDAwMDAwVUwpCisjZWxzZQorI2RlZmluZSBMQklUTUFTSyAgICgweDU1NTU1NTU1NTU1NTU1NTVVTCkKKyNkZWZpbmUgTEJJVFNLSVA1NSAoMHg1NTU1NTU1NTU1NTU1NTU1VUwpCisjZGVmaW5lIExCSVRTS0lQMDAgKDB4MDAwMDAwMDAwMDAwMDAwMFVMKQorI2VuZGlmCisKIC8qCiAgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCBieSB0aGUgcmVzb3VyY2UgZ3JvdXAgcm91dGluZXMgKHJncnAuYykKICAqIHRvIGtlZXAgdHJhY2sgb2YgYmxvY2sgYWxsb2NhdGlvbi4gIEVhY2ggYmxvY2sgaXMgcmVwcmVzZW50ZWQgYnkgdHdvCkBAIC01Myw3ICs2NCw4IEBACiB9OwogCiBzdGF0aWMgdTMyIHJnYmxrX3NlYXJjaChzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCB1MzIgZ29hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb2xkX3N0YXRlLCB1bnNpZ25lZCBjaGFyIG5ld19zdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG9sZF9zdGF0ZSwgdW5zaWduZWQgY2hhciBuZXdfc3RhdGUsCisJCQl1bnNpZ25lZCBpbnQgKm4pOwogCiAvKioKICAqIGdmczJfc2V0Yml0IC0gU2V0IGEgYml0IGluIHRoZSBiaXRtYXBzCkBAIC02NCwyNiArNzYsMzIgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgZ2ZzMl9zZXRiaXQoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkJdW5zaWduZWQgaW50IGJ1ZmxlbiwgdTMyIGJsb2NrLAotCQkJdW5zaWduZWQgY2hhciBuZXdfc3RhdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ZzMl9zZXRiaXQoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdW5zaWduZWQgY2hhciAqYnVmMSwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWYyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBidWZsZW4sIHUzMiBibG9jaywKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG5ld19zdGF0ZSkKIHsKLQl1bnNpZ25lZCBjaGFyICpieXRlLCAqZW5kLCBjdXJfc3RhdGU7Ci0JdW5zaWduZWQgaW50IGJpdDsKKwl1bnNpZ25lZCBjaGFyICpieXRlMSwgKmJ5dGUyLCAqZW5kLCBjdXJfc3RhdGU7CisJY29uc3QgdW5zaWduZWQgaW50IGJpdCA9IChibG9jayAlIEdGUzJfTkJCWSkgKiBHRlMyX0JJVF9TSVpFOwogCi0JYnl0ZSA9IGJ1ZmZlciArIChibG9jayAvIEdGUzJfTkJCWSk7Ci0JYml0ID0gKGJsb2NrICUgR0ZTMl9OQkJZKSAqIEdGUzJfQklUX1NJWkU7Ci0JZW5kID0gYnVmZmVyICsgYnVmbGVuOworCWJ5dGUxID0gYnVmMSArIG9mZnNldCArIChibG9jayAvIEdGUzJfTkJCWSk7CisJZW5kID0gYnVmMSArIG9mZnNldCArIGJ1ZmxlbjsKIAotCWdmczJfYXNzZXJ0KHJnZC0+cmRfc2JkLCBieXRlIDwgZW5kKTsKKwlCVUdfT04oYnl0ZTEgPj0gZW5kKTsKIAotCWN1cl9zdGF0ZSA9ICgqYnl0ZSA+PiBiaXQpICYgR0ZTMl9CSVRfTUFTSzsKKwljdXJfc3RhdGUgPSAoKmJ5dGUxID4+IGJpdCkgJiBHRlMyX0JJVF9NQVNLOwogCi0JaWYgKHZhbGlkX2NoYW5nZVtuZXdfc3RhdGUgKiA0ICsgY3VyX3N0YXRlXSkgewotCQkqYnl0ZSBePSBjdXJfc3RhdGUgPDwgYml0OwotCQkqYnl0ZSB8PSBuZXdfc3RhdGUgPDwgYml0OwotCX0gZWxzZQorCWlmICh1bmxpa2VseSghdmFsaWRfY2hhbmdlW25ld19zdGF0ZSAqIDQgKyBjdXJfc3RhdGVdKSkgewogCQlnZnMyX2NvbnNpc3RfcmdycGQocmdkKTsKKwkJcmV0dXJuOworCX0KKwkqYnl0ZTEgXj0gKGN1cl9zdGF0ZSBeIG5ld19zdGF0ZSkgPDwgYml0OworCisJaWYgKGJ1ZjIpIHsKKwkJYnl0ZTIgPSBidWYyICsgb2Zmc2V0ICsgKGJsb2NrIC8gR0ZTMl9OQkJZKTsKKwkJY3VyX3N0YXRlID0gKCpieXRlMiA+PiBiaXQpICYgR0ZTMl9CSVRfTUFTSzsKKwkJKmJ5dGUyIF49IChjdXJfc3RhdGUgXiBuZXdfc3RhdGUpIDw8IGJpdDsKKwl9CiB9CiAKIC8qKgpAQCAtOTQsMTAgKzExMiwxMiBAQAogICoKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBnZnMyX3Rlc3RiaXQoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkJCSAgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdTMyIGJsb2NrKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGdmczJfdGVzdGJpdChzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCQkgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdTMyIGJsb2NrKQogewotCXVuc2lnbmVkIGNoYXIgKmJ5dGUsICplbmQsIGN1cl9zdGF0ZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpieXRlLCAqZW5kOworCXVuc2lnbmVkIGNoYXIgY3VyX3N0YXRlOwogCXVuc2lnbmVkIGludCBiaXQ7CiAKIAlieXRlID0gYnVmZmVyICsgKGJsb2NrIC8gR0ZTMl9OQkJZKTsKQEAgLTEyNiw0NyArMTQ2LDY2IEBACiAgKiBSZXR1cm46IHRoZSBibG9jayBudW1iZXIgKGJpdG1hcCBidWZmZXIgc2NvcGUpIHRoYXQgd2FzIGZvdW5kCiAgKi8KIAotc3RhdGljIHUzMiBnZnMyX2JpdGZpdCh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIHUzMiBnb2FsLAotCQkgICAgICAgdW5zaWduZWQgY2hhciBvbGRfc3RhdGUpCitzdGF0aWMgdTMyIGdmczJfYml0Zml0KGNvbnN0IHU4ICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIHUzMiBnb2FsLAorCQkgICAgICAgdTggb2xkX3N0YXRlKQogewotCXVuc2lnbmVkIGNoYXIgKmJ5dGU7Ci0JdTMyIGJsayA9IGdvYWw7Ci0JdW5zaWduZWQgaW50IGJpdCwgYml0bG9uZzsKLQl1bnNpZ25lZCBsb25nICpwbG9uZywgcGxvbmc1NTsKKwljb25zdCB1OCAqYnl0ZSwgKnN0YXJ0LCAqZW5kOworCWludCBiaXQsIHN0YXJ0Yml0OworCXUzMiBnMSwgZzIsIG1pc2FsaWduZWQ7CisJdW5zaWduZWQgbG9uZyAqcGxvbmc7CisJdW5zaWduZWQgbG9uZyBsc2tpcHZhbDsKIAotCWJ5dGUgPSBidWZmZXIgKyAoZ29hbCAvIEdGUzJfTkJCWSk7Ci0JcGxvbmcgPSAodW5zaWduZWQgbG9uZyAqKShidWZmZXIgKyAoZ29hbCAvIEdGUzJfTkJCWSkpOwotCWJpdCA9IChnb2FsICUgR0ZTMl9OQkJZKSAqIEdGUzJfQklUX1NJWkU7Ci0JYml0bG9uZyA9IGJpdDsKLSNpZiBCSVRTX1BFUl9MT05HID09IDMyCi0JcGxvbmc1NSA9IDB4NTU1NTU1NTU7Ci0jZWxzZQotCXBsb25nNTUgPSAweDU1NTU1NTU1NTU1NTU1NTU7Ci0jZW5kaWYKLQl3aGlsZSAoYnl0ZSA8IGJ1ZmZlciArIGJ1ZmxlbikgewotCi0JCWlmIChiaXRsb25nID09IDAgJiYgb2xkX3N0YXRlID09IDAgJiYgKnBsb25nID09IHBsb25nNTUpIHsKLQkJCXBsb25nKys7Ci0JCQlieXRlICs9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQkJCWJsayArPSBzaXplb2YodW5zaWduZWQgbG9uZykgKiBHRlMyX05CQlk7Ci0JCQljb250aW51ZTsKKwlsc2tpcHZhbCA9IChvbGRfc3RhdGUgJiBHRlMyX0JMS1NUX1VTRUQpID8gTEJJVFNLSVAwMCA6IExCSVRTS0lQNTU7CisJZzEgPSAoZ29hbCAvIEdGUzJfTkJCWSk7CisJc3RhcnQgPSBidWZmZXIgKyBnMTsKKwlieXRlID0gc3RhcnQ7CisgICAgICAgIGVuZCA9IGJ1ZmZlciArIGJ1ZmxlbjsKKwlnMiA9IEFMSUdOKGcxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXBsb25nID0gKHVuc2lnbmVkIGxvbmcgKikoYnVmZmVyICsgZzIpOworCXN0YXJ0Yml0ID0gYml0ID0gKGdvYWwgJSBHRlMyX05CQlkpICogR0ZTMl9CSVRfU0laRTsKKwltaXNhbGlnbmVkID0gZzIgLSBnMTsKKwlpZiAoIW1pc2FsaWduZWQpCisJCWdvdG8gdWxvbmdfYWxpZ25lZDsKKy8qIHBhcnNlIHRoZSBiaXRtYXAgYSBieXRlIGF0IGEgdGltZSAqLworbWlzYWxpZ25lZDoKKwl3aGlsZSAoYnl0ZSA8IGVuZCkgeworCQlpZiAoKCgqYnl0ZSA+PiBiaXQpICYgR0ZTMl9CSVRfTUFTSykgPT0gb2xkX3N0YXRlKSB7CisJCQlyZXR1cm4gZ29hbCArCisJCQkJKCgoYnl0ZSAtIHN0YXJ0KSAqIEdGUzJfTkJCWSkgKworCQkJCSAoKGJpdCAtIHN0YXJ0Yml0KSA+PiAxKSk7CiAJCX0KLQkJaWYgKCgoKmJ5dGUgPj4gYml0KSAmIEdGUzJfQklUX01BU0spID09IG9sZF9zdGF0ZSkKLQkJCXJldHVybiBibGs7CiAJCWJpdCArPSBHRlMyX0JJVF9TSVpFOwotCQlpZiAoYml0ID49IDgpIHsKKwkJaWYgKGJpdCA+PSBHRlMyX05CQlkgKiBHRlMyX0JJVF9TSVpFKSB7CiAJCQliaXQgPSAwOwogCQkJYnl0ZSsrOworCQkJbWlzYWxpZ25lZC0tOworCQkJaWYgKCFtaXNhbGlnbmVkKSB7CisJCQkJcGxvbmcgPSAodW5zaWduZWQgbG9uZyAqKWJ5dGU7CisJCQkJZ290byB1bG9uZ19hbGlnbmVkOworCQkJfQogCQl9Ci0JCWJpdGxvbmcgKz0gR0ZTMl9CSVRfU0laRTsKLQkJaWYgKGJpdGxvbmcgPj0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCkgewotCQkJYml0bG9uZyA9IDA7Ci0JCQlwbG9uZysrOwotCQl9Ci0KLQkJYmxrKys7CiAJfQorCXJldHVybiBCRklUTk9FTlQ7CiAKKy8qIHBhcnNlIHRoZSBiaXRtYXAgYSB1bnNpZ25lZCBsb25nIGF0IGEgdGltZSAqLwordWxvbmdfYWxpZ25lZDoKKwkvKiBTdG9wIGF0ICJlbmQgLSAxIiBvciBlbHNlIHByZWZldGNoIGNhbiBnbyBwYXN0IHRoZSBlbmQgYW5kIHNlZ2ZhdWx0LgorCSAgIFdlIGNvdWxkICJpZiIgaXQgYnV0IHdlJ2QgbG9zZSBzb21lIG9mIHRoZSBwZXJmb3JtYW5jZSBnYWluZWQuCisJICAgVGhpcyB3YXkgd2lsbCBvbmx5IHNsb3cgZG93biBzZWFyY2hpbmcgdGhlIHZlcnkgbGFzdCA0LzggYnl0ZXMKKwkgICBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlLiAgSSd2ZSBleHBlcmltZW50ZWQgd2l0aCBzZXZlcmFsIHdheXMKKwkgICBvZiB3cml0aW5nIHRoaXMgc2VjdGlvbiBzdWNoIGFzIHVzaW5nIGFuIGVsc2UgYmVmb3JlIHRoZSBnb3RvCisJICAgYnV0IHRoaXMgb25lIHNlZW1zIHRvIGJlIHRoZSBmYXN0ZXN0LiAqLworCXdoaWxlICgodW5zaWduZWQgY2hhciAqKXBsb25nIDwgZW5kIC0gMSkgeworCQlwcmVmZXRjaChwbG9uZyArIDEpOworCQlpZiAoKCgqcGxvbmcpICYgTEJJVE1BU0spICE9IGxza2lwdmFsKQorCQkJYnJlYWs7CisJCXBsb25nKys7CisJfQorCWlmICgodW5zaWduZWQgY2hhciAqKXBsb25nIDwgZW5kKSB7CisJCWJ5dGUgPSAoY29uc3QgdTggKilwbG9uZzsKKwkJbWlzYWxpZ25lZCArPSBzaXplb2YodW5zaWduZWQgbG9uZykgLSAxOworCQlnb3RvIG1pc2FsaWduZWQ7CisJfQogCXJldHVybiBCRklUTk9FTlQ7CiB9CiAKQEAgLTE3OSwxNCArMjE4LDE0IEBACiAgKiBSZXR1cm5zOiBUaGUgbnVtYmVyIG9mIGJpdHMKICAqLwogCi1zdGF0aWMgdTMyIGdmczJfYml0Y291bnQoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkJICAgICAgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdW5zaWduZWQgY2hhciBzdGF0ZSkKK3N0YXRpYyB1MzIgZ2ZzMl9iaXRjb3VudChzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCBjb25zdCB1OCAqYnVmZmVyLAorCQkJIHVuc2lnbmVkIGludCBidWZsZW4sIHU4IHN0YXRlKQogewotCXVuc2lnbmVkIGNoYXIgKmJ5dGUgPSBidWZmZXI7Ci0JdW5zaWduZWQgY2hhciAqZW5kID0gYnVmZmVyICsgYnVmbGVuOwotCXVuc2lnbmVkIGNoYXIgc3RhdGUxID0gc3RhdGUgPDwgMjsKLQl1bnNpZ25lZCBjaGFyIHN0YXRlMiA9IHN0YXRlIDw8IDQ7Ci0JdW5zaWduZWQgY2hhciBzdGF0ZTMgPSBzdGF0ZSA8PCA2OworCWNvbnN0IHU4ICpieXRlID0gYnVmZmVyOworCWNvbnN0IHU4ICplbmQgPSBidWZmZXIgKyBidWZsZW47CisJY29uc3QgdTggc3RhdGUxID0gc3RhdGUgPDwgMjsKKwljb25zdCB1OCBzdGF0ZTIgPSBzdGF0ZSA8PCA0OworCWNvbnN0IHU4IHN0YXRlMyA9IHN0YXRlIDw8IDY7CiAJdTMyIGNvdW50ID0gMDsKIAogCWZvciAoOyBieXRlIDwgZW5kOyBieXRlKyspIHsKQEAgLTM1Myw3ICszOTIsNyBAQAogCQl9CiAKIAkJa2ZyZWUocmdkLT5yZF9iaXRzKTsKLQkJa2ZyZWUocmdkKTsKKwkJa21lbV9jYWNoZV9mcmVlKGdmczJfcmdycGRfY2FjaGVwLCByZ2QpOwogCX0KIH0KIApAQCAtNTE2LDcgKzU1NSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlyZ2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2ZzMl9yZ3JwZCksIEdGUF9OT0ZTKTsKKwlyZ2QgPSBrbWVtX2NhY2hlX3phbGxvYyhnZnMyX3JncnBkX2NhY2hlcCwgR0ZQX05PRlMpOwogCWVycm9yID0gLUVOT01FTTsKIAlpZiAoIXJnZCkKIAkJcmV0dXJuIGVycm9yOwpAQCAtNTM5LDcgKzU3OCw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCXJnZC0+cmRfZ2wtPmdsX29iamVjdCA9IHJnZDsKLQlyZ2QtPnJkX3JnX3ZuID0gcmdkLT5yZF9nbC0+Z2xfdm4gLSAxOworCXJnZC0+cmRfZmxhZ3MgJj0gfkdGUzJfUkRGX1VQVE9EQVRFOwogCXJnZC0+cmRfZmxhZ3MgfD0gR0ZTMl9SREZfQ0hFQ0s7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNTc1LDcgKzYxNCw3IEBACiAJCX0KIAl9CiAKLQlzZHAtPnNkX3JpbmRleF92biA9IGlwLT5pX2dsLT5nbF92bjsKKwlzZHAtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYwOSw3ICs2NDgsNyBAQAogCQl9CiAJfQogCi0Jc2RwLT5zZF9yaW5kZXhfdm4gPSBpcC0+aV9nbC0+Z2xfdm47CisJc2RwLT5zZF9yaW5kZXhfdXB0b2RhdGUgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC02NDIsOSArNjgxLDkgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJLyogUmVhZCBuZXcgY29weSBmcm9tIGRpc2sgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgbGF0ZXN0ICovCi0JaWYgKHNkcC0+c2RfcmluZGV4X3ZuICE9IGdsLT5nbF92bikgeworCWlmICghc2RwLT5zZF9yaW5kZXhfdXB0b2RhdGUpIHsKIAkJbXV0ZXhfbG9jaygmc2RwLT5zZF9yaW5kZXhfbXV0ZXgpOwotCQlpZiAoc2RwLT5zZF9yaW5kZXhfdm4gIT0gZ2wtPmdsX3ZuKSB7CisJCWlmICghc2RwLT5zZF9yaW5kZXhfdXB0b2RhdGUpIHsKIAkJCWVycm9yID0gZ2ZzMl9yaV91cGRhdGUoaXApOwogCQkJaWYgKGVycm9yKQogCQkJCWdmczJfZ2xvY2tfZHFfdW5pbml0KHJpX2doKTsKQEAgLTY1NSwyMSArNjk0LDMxIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX3JncnBfaW4oc3RydWN0IGdmczJfcmdycF9ob3N0ICpyZywgY29uc3Qgdm9pZCAqYnVmKQorc3RhdGljIHZvaWQgZ2ZzMl9yZ3JwX2luKHN0cnVjdCBnZnMyX3JncnBkICpyZ2QsIGNvbnN0IHZvaWQgKmJ1ZikKIHsKIAljb25zdCBzdHJ1Y3QgZ2ZzMl9yZ3JwICpzdHIgPSBidWY7CisJc3RydWN0IGdmczJfcmdycF9ob3N0ICpyZyA9ICZyZ2QtPnJkX3JnOworCXUzMiByZ19mbGFnczsKIAotCXJnLT5yZ19mbGFncyA9IGJlMzJfdG9fY3B1KHN0ci0+cmdfZmxhZ3MpOworCXJnX2ZsYWdzID0gYmUzMl90b19jcHUoc3RyLT5yZ19mbGFncyk7CisJaWYgKHJnX2ZsYWdzICYgR0ZTMl9SR0ZfTk9BTExPQykKKwkJcmdkLT5yZF9mbGFncyB8PSBHRlMyX1JERl9OT0FMTE9DOworCWVsc2UKKwkJcmdkLT5yZF9mbGFncyAmPSB+R0ZTMl9SREZfTk9BTExPQzsKIAlyZy0+cmdfZnJlZSA9IGJlMzJfdG9fY3B1KHN0ci0+cmdfZnJlZSk7CiAJcmctPnJnX2Rpbm9kZXMgPSBiZTMyX3RvX2NwdShzdHItPnJnX2Rpbm9kZXMpOwogCXJnLT5yZ19pZ2VuZXJhdGlvbiA9IGJlNjRfdG9fY3B1KHN0ci0+cmdfaWdlbmVyYXRpb24pOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX3JncnBfb3V0KGNvbnN0IHN0cnVjdCBnZnMyX3JncnBfaG9zdCAqcmcsIHZvaWQgKmJ1ZikKK3N0YXRpYyB2b2lkIGdmczJfcmdycF9vdXQoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdm9pZCAqYnVmKQogewogCXN0cnVjdCBnZnMyX3JncnAgKnN0ciA9IGJ1ZjsKKwlzdHJ1Y3QgZ2ZzMl9yZ3JwX2hvc3QgKnJnID0gJnJnZC0+cmRfcmc7CisJdTMyIHJnX2ZsYWdzID0gMDsKIAotCXN0ci0+cmdfZmxhZ3MgPSBjcHVfdG9fYmUzMihyZy0+cmdfZmxhZ3MpOworCWlmIChyZ2QtPnJkX2ZsYWdzICYgR0ZTMl9SREZfTk9BTExPQykKKwkJcmdfZmxhZ3MgfD0gR0ZTMl9SR0ZfTk9BTExPQzsKKwlzdHItPnJnX2ZsYWdzID0gY3B1X3RvX2JlMzIocmdfZmxhZ3MpOwogCXN0ci0+cmdfZnJlZSA9IGNwdV90b19iZTMyKHJnLT5yZ19mcmVlKTsKIAlzdHItPnJnX2Rpbm9kZXMgPSBjcHVfdG9fYmUzMihyZy0+cmdfZGlub2Rlcyk7CiAJc3RyLT5fX3BhZCA9IGNwdV90b19iZTMyKDApOwpAQCAtNzI2LDkgKzc3NSw5IEBACiAJCX0KIAl9CiAKLQlpZiAocmdkLT5yZF9yZ192biAhPSBnbC0+Z2xfdm4pIHsKLQkJZ2ZzMl9yZ3JwX2luKCZyZ2QtPnJkX3JnLCAocmdkLT5yZF9iaXRzWzBdLmJpX2JoKS0+Yl9kYXRhKTsKLQkJcmdkLT5yZF9yZ192biA9IGdsLT5nbF92bjsKKwlpZiAoIShyZ2QtPnJkX2ZsYWdzICYgR0ZTMl9SREZfVVBUT0RBVEUpKSB7CisJCWdmczJfcmdycF9pbihyZ2QsIChyZ2QtPnJkX2JpdHNbMF0uYmlfYmgpLT5iX2RhdGEpOworCQlyZ2QtPnJkX2ZsYWdzIHw9IEdGUzJfUkRGX1VQVE9EQVRFOwogCX0KIAogCXNwaW5fbG9jaygmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CkBAIC04NDAsNyArODg5LDcgQEAKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHJnZC0+cmRfc2JkOwogCWludCByZXQgPSAwOwogCi0JaWYgKHJnZC0+cmRfcmcucmdfZmxhZ3MgJiBHRlMyX1JHRl9OT0FMTE9DKQorCWlmIChyZ2QtPnJkX2ZsYWdzICYgR0ZTMl9SREZfTk9BTExPQykKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2soJnNkcC0+c2RfcmluZGV4X3NwaW4pOwpAQCAtODY2LDEzICs5MTUsMTUgQEAKIAl1MzIgZ29hbCA9IDAsIGJsb2NrOwogCXU2NCBub19hZGRyOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcmdkLT5yZF9zYmQ7CisJdW5zaWduZWQgaW50IG47CiAKIAlmb3IoOzspIHsKIAkJaWYgKGdvYWwgPj0gcmdkLT5yZF9kYXRhKQogCQkJYnJlYWs7CiAJCWRvd25fd3JpdGUoJnNkcC0+c2RfbG9nX2ZsdXNoX2xvY2spOworCQluID0gMTsKIAkJYmxvY2sgPSByZ2Jsa19zZWFyY2gocmdkLCBnb2FsLCBHRlMyX0JMS1NUX1VOTElOS0VELAotCQkJCSAgICAgR0ZTMl9CTEtTVF9VTkxJTktFRCk7CisJCQkJICAgICBHRlMyX0JMS1NUX1VOTElOS0VELCAmbik7CiAJCXVwX3dyaXRlKCZzZHAtPnNkX2xvZ19mbHVzaF9sb2NrKTsKIAkJaWYgKGJsb2NrID09IEJGSVROT0VOVCkKIAkJCWJyZWFrOwpAQCAtOTA0LDI0ICs5NTUsMjAgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmVjZW50X3JncnBfZmlyc3Qoc3RydWN0IGdmczJfc2JkICpzZHAsCiAJCQkJCSAgICB1NjQgcmdsYXN0KQogewotCXN0cnVjdCBnZnMyX3JncnBkICpyZ2QgPSBOVUxMOworCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7CiAKIAlzcGluX2xvY2soJnNkcC0+c2RfcmluZGV4X3NwaW4pOwogCi0JaWYgKGxpc3RfZW1wdHkoJnNkcC0+c2RfcmluZGV4X3JlY2VudF9saXN0KSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXJnbGFzdCkKLQkJZ290byBmaXJzdDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocmdkLCAmc2RwLT5zZF9yaW5kZXhfcmVjZW50X2xpc3QsIHJkX3JlY2VudCkgewotCQlpZiAocmdkLT5yZF9hZGRyID09IHJnbGFzdCkKLQkJCWdvdG8gb3V0OworCWlmIChyZ2xhc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZ2QsICZzZHAtPnNkX3JpbmRleF9yZWNlbnRfbGlzdCwgcmRfcmVjZW50KSB7CisJCQlpZiAocmdycF9jb250YWluc19ibG9jayhyZ2QsIHJnbGFzdCkpCisJCQkJZ290byBvdXQ7CisJCX0KIAl9Ci0KLWZpcnN0OgotCXJnZCA9IGxpc3RfZW50cnkoc2RwLT5zZF9yaW5kZXhfcmVjZW50X2xpc3QubmV4dCwgc3RydWN0IGdmczJfcmdycGQsCi0JCQkgcmRfcmVjZW50KTsKKwlyZ2QgPSBOVUxMOworCWlmICghbGlzdF9lbXB0eSgmc2RwLT5zZF9yaW5kZXhfcmVjZW50X2xpc3QpKQorCQlyZ2QgPSBsaXN0X2VudHJ5KHNkcC0+c2RfcmluZGV4X3JlY2VudF9saXN0Lm5leHQsCisJCQkJIHN0cnVjdCBnZnMyX3JncnBkLCByZF9yZWNlbnQpOwogb3V0OgogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3JpbmRleF9zcGluKTsKIAlyZXR1cm4gcmdkOwpAQCAtMTA2Nyw3ICsxMTE0LDcgQEAKIAogCS8qIFRyeSByZWNlbnRseSBzdWNjZXNzZnVsIHJncnBzICovCiAKLQlyZ2QgPSByZWNlbnRfcmdycF9maXJzdChzZHAsIGlwLT5pX2xhc3RfcmdfYWxsb2MpOworCXJnZCA9IHJlY2VudF9yZ3JwX2ZpcnN0KHNkcCwgaXAtPmlfZ29hbCk7CiAKIAl3aGlsZSAocmdkKSB7CiAJCXJnX2xvY2tlZCA9IDA7CkBAIC0xMTUxLDggKzExOTgsNiBAQAogCX0KIAogb3V0OgotCWlwLT5pX2xhc3RfcmdfYWxsb2MgPSByZ2QtPnJkX2FkZHI7Ci0KIAlpZiAoYmVnaW4pIHsKIAkJcmVjZW50X3JncnBfYWRkKHJnZCk7CiAJCXJnZCA9IGdmczJfcmdycGRfZ2V0X25leHQocmdkKTsKQEAgLTEyNzUsNiArMTMyMCw3IEBACiAgKiBAZ29hbDogdGhlIGdvYWwgYmxvY2sgd2l0aGluIHRoZSBSRyAoc3RhcnQgaGVyZSB0byBzZWFyY2ggZm9yIGF2YWlsIGJsb2NrKQogICogQG9sZF9zdGF0ZTogR0ZTMl9CTEtTVF9YWFggdGhlIGJlZm9yZS1hbGxvY2F0aW9uIHN0YXRlIHRvIGZpbmQKICAqIEBuZXdfc3RhdGU6IEdGUzJfQkxLU1RfWFhYIHRoZSBhZnRlci1hbGxvY2F0aW9uIGJsb2NrIHN0YXRlCisgKiBAbjogVGhlIGV4dGVudCBsZW5ndGgKICAqCiAgKiBXYWxrIHJncnAncyBiaXRtYXAgdG8gZmluZCBiaXRzIHRoYXQgcmVwcmVzZW50IGEgYmxvY2sgaW4gQG9sZF9zdGF0ZS4KICAqIEFkZCB0aGUgZm91bmQgYml0bWFwIGJ1ZmZlciB0byB0aGUgdHJhbnNhY3Rpb24uCkBAIC0xMjkwLDEzICsxMzM2LDE3IEBACiAgKi8KIAogc3RhdGljIHUzMiByZ2Jsa19zZWFyY2goc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdTMyIGdvYWwsCi0JCQl1bnNpZ25lZCBjaGFyIG9sZF9zdGF0ZSwgdW5zaWduZWQgY2hhciBuZXdfc3RhdGUpCisJCQl1bnNpZ25lZCBjaGFyIG9sZF9zdGF0ZSwgdW5zaWduZWQgY2hhciBuZXdfc3RhdGUsCisJCQl1bnNpZ25lZCBpbnQgKm4pCiB7CiAJc3RydWN0IGdmczJfYml0bWFwICpiaSA9IE5VTEw7Ci0JdTMyIGxlbmd0aCA9IHJnZC0+cmRfbGVuZ3RoOworCWNvbnN0IHUzMiBsZW5ndGggPSByZ2QtPnJkX2xlbmd0aDsKIAl1MzIgYmxrID0gMDsKIAl1bnNpZ25lZCBpbnQgYnVmLCB4OworCWNvbnN0IHVuc2lnbmVkIGludCBlbGVuID0gKm47CisJY29uc3QgdTggKmJ1ZmZlcjsKIAorCSpuID0gMDsKIAkvKiBGaW5kIGJpdG1hcCBibG9jayB0aGF0IGNvbnRhaW5zIGJpdHMgZm9yIGdvYWwgYmxvY2sgKi8KIAlmb3IgKGJ1ZiA9IDA7IGJ1ZiA8IGxlbmd0aDsgYnVmKyspIHsKIAkJYmkgPSByZ2QtPnJkX2JpdHMgKyBidWY7CkBAIC0xMzE3LDEyICsxMzY3LDExIEBACiAJZm9yICh4ID0gMDsgeCA8PSBsZW5ndGg7IHgrKykgewogCQkvKiBUaGUgR0ZTMl9CTEtTVF9VTkxJTktFRCBzdGF0ZSBkb2Vzbid0IGFwcGx5IHRvIHRoZSBjbG9uZQogCQkgICBiaXRtYXBzLCBzbyB3ZSBtdXN0IHNlYXJjaCB0aGUgb3JpZ2luYWxzIGZvciB0aGF0LiAqLworCQlidWZmZXIgPSBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQ7CiAJCWlmIChvbGRfc3RhdGUgIT0gR0ZTMl9CTEtTVF9VTkxJTktFRCAmJiBiaS0+YmlfY2xvbmUpCi0JCQlibGsgPSBnZnMyX2JpdGZpdChiaS0+YmlfY2xvbmUgKyBiaS0+Ymlfb2Zmc2V0LAotCQkJCQkgIGJpLT5iaV9sZW4sIGdvYWwsIG9sZF9zdGF0ZSk7Ci0JCWVsc2UKLQkJCWJsayA9IGdmczJfYml0Zml0KGJpLT5iaV9iaC0+Yl9kYXRhICsgYmktPmJpX29mZnNldCwKLQkJCQkJICBiaS0+YmlfbGVuLCBnb2FsLCBvbGRfc3RhdGUpOworCQkJYnVmZmVyID0gYmktPmJpX2Nsb25lICsgYmktPmJpX29mZnNldDsKKworCQlibGsgPSBnZnMyX2JpdGZpdChidWZmZXIsIGJpLT5iaV9sZW4sIGdvYWwsIG9sZF9zdGF0ZSk7CiAJCWlmIChibGsgIT0gQkZJVE5PRU5UKQogCQkJYnJlYWs7CiAKQEAgLTEzMzMsMTIgKzEzODIsMjMgQEAKIAl9CiAKIAlpZiAoYmxrICE9IEJGSVROT0VOVCAmJiBvbGRfc3RhdGUgIT0gbmV3X3N0YXRlKSB7CisJCSpuID0gMTsKIAkJZ2ZzMl90cmFuc19hZGRfYmgocmdkLT5yZF9nbCwgYmktPmJpX2JoLCAxKTsKLQkJZ2ZzMl9zZXRiaXQocmdkLCBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQsCisJCWdmczJfc2V0Yml0KHJnZCwgYmktPmJpX2JoLT5iX2RhdGEsIGJpLT5iaV9jbG9uZSwgYmktPmJpX29mZnNldCwKIAkJCSAgICBiaS0+YmlfbGVuLCBibGssIG5ld19zdGF0ZSk7Ci0JCWlmIChiaS0+YmlfY2xvbmUpCi0JCQlnZnMyX3NldGJpdChyZ2QsIGJpLT5iaV9jbG9uZSArIGJpLT5iaV9vZmZzZXQsCi0JCQkJICAgIGJpLT5iaV9sZW4sIGJsaywgbmV3X3N0YXRlKTsKKwkJZ29hbCA9IGJsazsKKwkJd2hpbGUgKCpuIDwgZWxlbikgeworCQkJZ29hbCsrOworCQkJaWYgKGdvYWwgPj0gKGJpLT5iaV9sZW4gKiBHRlMyX05CQlkpKQorCQkJCWJyZWFrOworCQkJaWYgKGdmczJfdGVzdGJpdChyZ2QsIGJ1ZmZlciwgYmktPmJpX2xlbiwgZ29hbCkgIT0KKwkJCSAgICBHRlMyX0JMS1NUX0ZSRUUpCisJCQkJYnJlYWs7CisJCQlnZnMyX3NldGJpdChyZ2QsIGJpLT5iaV9iaC0+Yl9kYXRhLCBiaS0+YmlfY2xvbmUsCisJCQkJICAgIGJpLT5iaV9vZmZzZXQsIGJpLT5iaV9sZW4sIGdvYWwsCisJCQkJICAgIG5ld19zdGF0ZSk7CisJCQkoKm4pKys7CisJCX0KIAl9CiAKIAlyZXR1cm4gKGJsayA9PSBCRklUTk9FTlQpID8gYmxrIDogKGJpLT5iaV9zdGFydCAqIEdGUzJfTkJCWSkgKyBibGs7CkBAIC0xMzkzLDcgKzE0NTMsNyBAQAogCQkJICAgICAgIGJpLT5iaV9sZW4pOwogCQl9CiAJCWdmczJfdHJhbnNfYWRkX2JoKHJnZC0+cmRfZ2wsIGJpLT5iaV9iaCwgMSk7Ci0JCWdmczJfc2V0Yml0KHJnZCwgYmktPmJpX2JoLT5iX2RhdGEgKyBiaS0+Ymlfb2Zmc2V0LAorCQlnZnMyX3NldGJpdChyZ2QsIGJpLT5iaV9iaC0+Yl9kYXRhLCBOVUxMLCBiaS0+Ymlfb2Zmc2V0LAogCQkJICAgIGJpLT5iaV9sZW4sIGJ1Zl9ibGssIG5ld19zdGF0ZSk7CiAJfQogCkBAIC0xNDAxLDEzICsxNDYxLDEzIEBACiB9CiAKIC8qKgotICogZ2ZzMl9hbGxvY19kYXRhIC0gQWxsb2NhdGUgYSBkYXRhIGJsb2NrCi0gKiBAaXA6IHRoZSBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgZGF0YSBibG9jayBmb3IKKyAqIGdmczJfYWxsb2NfYmxvY2sgLSBBbGxvY2F0ZSBhIGJsb2NrCisgKiBAaXA6IHRoZSBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgYmxvY2sgZm9yCiAgKgogICogUmV0dXJuczogdGhlIGFsbG9jYXRlZCBibG9jawogICovCiAKLXU2NCBnZnMyX2FsbG9jX2RhdGEoc3RydWN0IGdmczJfaW5vZGUgKmlwKQordTY0IGdmczJfYWxsb2NfYmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwLCB1bnNpZ25lZCBpbnQgKm4pCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CiAJc3RydWN0IGdmczJfYWxsb2MgKmFsID0gaXAtPmlfYWxsb2M7CkBAIC0xNDE1LDc3ICsxNDc1LDMxIEBACiAJdTMyIGdvYWwsIGJsazsKIAl1NjQgYmxvY2s7CiAKLQlpZiAocmdycF9jb250YWluc19ibG9jayhyZ2QsIGlwLT5pX2RpLmRpX2dvYWxfZGF0YSkpCi0JCWdvYWwgPSBpcC0+aV9kaS5kaV9nb2FsX2RhdGEgLSByZ2QtPnJkX2RhdGEwOworCWlmIChyZ3JwX2NvbnRhaW5zX2Jsb2NrKHJnZCwgaXAtPmlfZ29hbCkpCisJCWdvYWwgPSBpcC0+aV9nb2FsIC0gcmdkLT5yZF9kYXRhMDsKIAllbHNlCi0JCWdvYWwgPSByZ2QtPnJkX2xhc3RfYWxsb2NfZGF0YTsKKwkJZ29hbCA9IHJnZC0+cmRfbGFzdF9hbGxvYzsKIAotCWJsayA9IHJnYmxrX3NlYXJjaChyZ2QsIGdvYWwsIEdGUzJfQkxLU1RfRlJFRSwgR0ZTMl9CTEtTVF9VU0VEKTsKKwlibGsgPSByZ2Jsa19zZWFyY2gocmdkLCBnb2FsLCBHRlMyX0JMS1NUX0ZSRUUsIEdGUzJfQkxLU1RfVVNFRCwgbik7CiAJQlVHX09OKGJsayA9PSBCRklUTk9FTlQpOwotCXJnZC0+cmRfbGFzdF9hbGxvY19kYXRhID0gYmxrOwogCisJcmdkLT5yZF9sYXN0X2FsbG9jID0gYmxrOwogCWJsb2NrID0gcmdkLT5yZF9kYXRhMCArIGJsazsKLQlpcC0+aV9kaS5kaV9nb2FsX2RhdGEgPSBibG9jazsKKwlpcC0+aV9nb2FsID0gYmxvY2s7CiAKLQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIHJnZC0+cmRfcmcucmdfZnJlZSk7Ci0JcmdkLT5yZF9yZy5yZ19mcmVlLS07CisJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCByZ2QtPnJkX3JnLnJnX2ZyZWUgPj0gKm4pOworCXJnZC0+cmRfcmcucmdfZnJlZSAtPSAqbjsKIAogCWdmczJfdHJhbnNfYWRkX2JoKHJnZC0+cmRfZ2wsIHJnZC0+cmRfYml0c1swXS5iaV9iaCwgMSk7Ci0JZ2ZzMl9yZ3JwX291dCgmcmdkLT5yZF9yZywgcmdkLT5yZF9iaXRzWzBdLmJpX2JoLT5iX2RhdGEpOworCWdmczJfcmdycF9vdXQocmdkLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgtPmJfZGF0YSk7CiAKLQlhbC0+YWxfYWxsb2NlZCsrOworCWFsLT5hbF9hbGxvY2VkICs9ICpuOwogCi0JZ2ZzMl9zdGF0ZnNfY2hhbmdlKHNkcCwgMCwgLTEsIDApOwotCWdmczJfcXVvdGFfY2hhbmdlKGlwLCArMSwgaXAtPmlfaW5vZGUuaV91aWQsIGlwLT5pX2lub2RlLmlfZ2lkKTsKKwlnZnMyX3N0YXRmc19jaGFuZ2Uoc2RwLCAwLCAtKm4sIDApOworCWdmczJfcXVvdGFfY2hhbmdlKGlwLCAqbiwgaXAtPmlfaW5vZGUuaV91aWQsIGlwLT5pX2lub2RlLmlfZ2lkKTsKIAogCXNwaW5fbG9jaygmc2RwLT5zZF9yaW5kZXhfc3Bpbik7Ci0JcmdkLT5yZF9mcmVlX2Nsb25lLS07Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcmluZGV4X3NwaW4pOwotCi0JcmV0dXJuIGJsb2NrOwotfQotCi0vKioKLSAqIGdmczJfYWxsb2NfbWV0YSAtIEFsbG9jYXRlIGEgbWV0YWRhdGEgYmxvY2sKLSAqIEBpcDogdGhlIGlub2RlIHRvIGFsbG9jYXRlIHRoZSBtZXRhZGF0YSBibG9jayBmb3IKLSAqCi0gKiBSZXR1cm5zOiB0aGUgYWxsb2NhdGVkIGJsb2NrCi0gKi8KLQotdTY0IGdmczJfYWxsb2NfbWV0YShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7Ci0Jc3RydWN0IGdmczJfYWxsb2MgKmFsID0gaXAtPmlfYWxsb2M7Ci0Jc3RydWN0IGdmczJfcmdycGQgKnJnZCA9IGFsLT5hbF9yZ2Q7Ci0JdTMyIGdvYWwsIGJsazsKLQl1NjQgYmxvY2s7Ci0KLQlpZiAocmdycF9jb250YWluc19ibG9jayhyZ2QsIGlwLT5pX2RpLmRpX2dvYWxfbWV0YSkpCi0JCWdvYWwgPSBpcC0+aV9kaS5kaV9nb2FsX21ldGEgLSByZ2QtPnJkX2RhdGEwOwotCWVsc2UKLQkJZ29hbCA9IHJnZC0+cmRfbGFzdF9hbGxvY19tZXRhOwotCi0JYmxrID0gcmdibGtfc2VhcmNoKHJnZCwgZ29hbCwgR0ZTMl9CTEtTVF9GUkVFLCBHRlMyX0JMS1NUX1VTRUQpOwotCUJVR19PTihibGsgPT0gQkZJVE5PRU5UKTsKLQlyZ2QtPnJkX2xhc3RfYWxsb2NfbWV0YSA9IGJsazsKLQotCWJsb2NrID0gcmdkLT5yZF9kYXRhMCArIGJsazsKLQlpcC0+aV9kaS5kaV9nb2FsX21ldGEgPSBibG9jazsKLQotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgcmdkLT5yZF9yZy5yZ19mcmVlKTsKLQlyZ2QtPnJkX3JnLnJnX2ZyZWUtLTsKLQotCWdmczJfdHJhbnNfYWRkX2JoKHJnZC0+cmRfZ2wsIHJnZC0+cmRfYml0c1swXS5iaV9iaCwgMSk7Ci0JZ2ZzMl9yZ3JwX291dCgmcmdkLT5yZF9yZywgcmdkLT5yZF9iaXRzWzBdLmJpX2JoLT5iX2RhdGEpOwotCi0JYWwtPmFsX2FsbG9jZWQrKzsKLQotCWdmczJfc3RhdGZzX2NoYW5nZShzZHAsIDAsIC0xLCAwKTsKLQlnZnMyX3F1b3RhX2NoYW5nZShpcCwgKzEsIGlwLT5pX2lub2RlLmlfdWlkLCBpcC0+aV9pbm9kZS5pX2dpZCk7Ci0JZ2ZzMl90cmFuc19hZGRfdW5yZXZva2Uoc2RwLCBibG9jayk7Ci0KLQlzcGluX2xvY2soJnNkcC0+c2RfcmluZGV4X3NwaW4pOwotCXJnZC0+cmRfZnJlZV9jbG9uZS0tOworCXJnZC0+cmRfZnJlZV9jbG9uZSAtPSAqbjsKIAlzcGluX3VubG9jaygmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CiAKIAlyZXR1cm4gYmxvY2s7CkBAIC0xNTA1LDEyICsxNTE5LDEzIEBACiAJc3RydWN0IGdmczJfcmdycGQgKnJnZCA9IGFsLT5hbF9yZ2Q7CiAJdTMyIGJsazsKIAl1NjQgYmxvY2s7CisJdW5zaWduZWQgaW50IG4gPSAxOwogCi0JYmxrID0gcmdibGtfc2VhcmNoKHJnZCwgcmdkLT5yZF9sYXN0X2FsbG9jX21ldGEsCi0JCQkgICBHRlMyX0JMS1NUX0ZSRUUsIEdGUzJfQkxLU1RfRElOT0RFKTsKKwlibGsgPSByZ2Jsa19zZWFyY2gocmdkLCByZ2QtPnJkX2xhc3RfYWxsb2MsCisJCQkgICBHRlMyX0JMS1NUX0ZSRUUsIEdGUzJfQkxLU1RfRElOT0RFLCAmbik7CiAJQlVHX09OKGJsayA9PSBCRklUTk9FTlQpOwogCi0JcmdkLT5yZF9sYXN0X2FsbG9jX21ldGEgPSBibGs7CisJcmdkLT5yZF9sYXN0X2FsbG9jID0gYmxrOwogCiAJYmxvY2sgPSByZ2QtPnJkX2RhdGEwICsgYmxrOwogCkBAIC0xNTE5LDEyICsxNTM0LDEyIEBACiAJcmdkLT5yZF9yZy5yZ19kaW5vZGVzKys7CiAJKmdlbmVyYXRpb24gPSByZ2QtPnJkX3JnLnJnX2lnZW5lcmF0aW9uKys7CiAJZ2ZzMl90cmFuc19hZGRfYmgocmdkLT5yZF9nbCwgcmdkLT5yZF9iaXRzWzBdLmJpX2JoLCAxKTsKLQlnZnMyX3JncnBfb3V0KCZyZ2QtPnJkX3JnLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgtPmJfZGF0YSk7CisJZ2ZzMl9yZ3JwX291dChyZ2QsIHJnZC0+cmRfYml0c1swXS5iaV9iaC0+Yl9kYXRhKTsKIAogCWFsLT5hbF9hbGxvY2VkKys7CiAKIAlnZnMyX3N0YXRmc19jaGFuZ2Uoc2RwLCAwLCAtMSwgKzEpOwotCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxvY2spOworCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxvY2ssIDEpOwogCiAJc3Bpbl9sb2NrKCZzZHAtPnNkX3JpbmRleF9zcGluKTsKIAlyZ2QtPnJkX2ZyZWVfY2xvbmUtLTsKQEAgLTE1NTMsNyArMTU2OCw3IEBACiAJcmdkLT5yZF9yZy5yZ19mcmVlICs9IGJsZW47CiAKIAlnZnMyX3RyYW5zX2FkZF9iaChyZ2QtPnJkX2dsLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgsIDEpOwotCWdmczJfcmdycF9vdXQoJnJnZC0+cmRfcmcsIHJnZC0+cmRfYml0c1swXS5iaV9iaC0+Yl9kYXRhKTsKKwlnZnMyX3JncnBfb3V0KHJnZCwgcmdkLT5yZF9iaXRzWzBdLmJpX2JoLT5iX2RhdGEpOwogCiAJZ2ZzMl90cmFuc19hZGRfcmcocmdkKTsKIApAQCAtMTU4MSw3ICsxNTk2LDcgQEAKIAlyZ2QtPnJkX3JnLnJnX2ZyZWUgKz0gYmxlbjsKIAogCWdmczJfdHJhbnNfYWRkX2JoKHJnZC0+cmRfZ2wsIHJnZC0+cmRfYml0c1swXS5iaV9iaCwgMSk7Ci0JZ2ZzMl9yZ3JwX291dCgmcmdkLT5yZF9yZywgcmdkLT5yZF9iaXRzWzBdLmJpX2JoLT5iX2RhdGEpOworCWdmczJfcmdycF9vdXQocmdkLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgtPmJfZGF0YSk7CiAKIAlnZnMyX3RyYW5zX2FkZF9yZyhyZ2QpOwogCkBAIC0xNjAxLDcgKzE2MTYsNyBAQAogCWlmICghcmdkKQogCQlyZXR1cm47CiAJZ2ZzMl90cmFuc19hZGRfYmgocmdkLT5yZF9nbCwgcmdkLT5yZF9iaXRzWzBdLmJpX2JoLCAxKTsKLQlnZnMyX3JncnBfb3V0KCZyZ2QtPnJkX3JnLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgtPmJfZGF0YSk7CisJZ2ZzMl9yZ3JwX291dChyZ2QsIHJnZC0+cmRfYml0c1swXS5iaV9iaC0+Yl9kYXRhKTsKIAlnZnMyX3RyYW5zX2FkZF9yZyhyZ2QpOwogfQogCkBAIC0xNjIxLDcgKzE2MzYsNyBAQAogCXJnZC0+cmRfcmcucmdfZnJlZSsrOwogCiAJZ2ZzMl90cmFuc19hZGRfYmgocmdkLT5yZF9nbCwgcmdkLT5yZF9iaXRzWzBdLmJpX2JoLCAxKTsKLQlnZnMyX3JncnBfb3V0KCZyZ2QtPnJkX3JnLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgtPmJfZGF0YSk7CisJZ2ZzMl9yZ3JwX291dChyZ2QsIHJnZC0+cmRfYml0c1swXS5iaV9iaC0+Yl9kYXRhKTsKIAogCWdmczJfc3RhdGZzX2NoYW5nZShzZHAsIDAsICsxLCAtMSk7CiAJZ2ZzMl90cmFuc19hZGRfcmcocmdkKTsKQEAgLTE2OTksOCArMTcxNCw3IEBACiAgKgogICovCiAKLXZvaWQgZ2ZzMl9ybGlzdF9hbGxvYyhzdHJ1Y3QgZ2ZzMl9yZ3JwX2xpc3QgKnJsaXN0LCB1bnNpZ25lZCBpbnQgc3RhdGUsCi0JCSAgICAgIGludCBmbGFncykKK3ZvaWQgZ2ZzMl9ybGlzdF9hbGxvYyhzdHJ1Y3QgZ2ZzMl9yZ3JwX2xpc3QgKnJsaXN0LCB1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJdW5zaWduZWQgaW50IHg7CiAKQEAgLTE3MDgsNyArMTcyMiw3IEBACiAJCQkJR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwogCWZvciAoeCA9IDA7IHggPCBybGlzdC0+cmxfcmdycHM7IHgrKykKIAkJZ2ZzMl9ob2xkZXJfaW5pdChybGlzdC0+cmxfcmdkW3hdLT5yZF9nbCwKLQkJCQlzdGF0ZSwgZmxhZ3MsCisJCQkJc3RhdGUsIDAsCiAJCQkJJnJsaXN0LT5ybF9naHNbeF0pOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuaCBiL2ZzL2dmczIvcmdycC5oCmluZGV4IDE0OWJiMTYuLjMxODFjN2UgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5oCisrKyBiL2ZzL2dmczIvcmdycC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC00Niw4ICs0Niw3IEBACiAKIHVuc2lnbmVkIGNoYXIgZ2ZzMl9nZXRfYmxvY2tfdHlwZShzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCB1NjQgYmxvY2spOwogCi11NjQgZ2ZzMl9hbGxvY19kYXRhKHN0cnVjdCBnZnMyX2lub2RlICppcCk7Ci11NjQgZ2ZzMl9hbGxvY19tZXRhKHN0cnVjdCBnZnMyX2lub2RlICppcCk7Cit1NjQgZ2ZzMl9hbGxvY19ibG9jayhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHVuc2lnbmVkIGludCAqbik7CiB1NjQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHU2NCAqZ2VuZXJhdGlvbik7CiAKIHZvaWQgZ2ZzMl9mcmVlX2RhdGEoc3RydWN0IGdmczJfaW5vZGUgKmlwLCB1NjQgYnN0YXJ0LCB1MzIgYmxlbik7CkBAIC02NCw4ICs2Myw3IEBACiAKIHZvaWQgZ2ZzMl9ybGlzdF9hZGQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3JncnBfbGlzdCAqcmxpc3QsCiAJCSAgICB1NjQgYmxvY2spOwotdm9pZCBnZnMyX3JsaXN0X2FsbG9jKHN0cnVjdCBnZnMyX3JncnBfbGlzdCAqcmxpc3QsIHVuc2lnbmVkIGludCBzdGF0ZSwKLQkJICAgICAgaW50IGZsYWdzKTsKK3ZvaWQgZ2ZzMl9ybGlzdF9hbGxvYyhzdHJ1Y3QgZ2ZzMl9yZ3JwX2xpc3QgKnJsaXN0LCB1bnNpZ25lZCBpbnQgc3RhdGUpOwogdm9pZCBnZnMyX3JsaXN0X2ZyZWUoc3RydWN0IGdmczJfcmdycF9saXN0ICpybGlzdCk7CiB1NjQgZ2ZzMl9yaV90b3RhbChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCBlZjA1NjJjLi43YWVhY2JjIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgYmlvICpiaW87CiAKLQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwlwYWdlID0gYWxsb2NfcGFnZShHRlBfTk9GUyk7CiAJaWYgKHVubGlrZWx5KCFwYWdlKSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlDbGVhclBhZ2VEaXJ0eShwYWdlKTsKIAlsb2NrX3BhZ2UocGFnZSk7CiAKLQliaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgMSk7CisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCAxKTsKIAlpZiAodW5saWtlbHkoIWJpbykpIHsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCXJldHVybiAtRU5PQlVGUzsKQEAgLTMxNiw2ICszMTYsNyBAQAogCQlzZHAtPnNkX2hlaWdodHNpemVbeF0gPSBzcGFjZTsKIAl9CiAJc2RwLT5zZF9tYXhfaGVpZ2h0ID0geDsKKwlzZHAtPnNkX2hlaWdodHNpemVbeF0gPSB+MDsKIAlnZnMyX2Fzc2VydChzZHAsIHNkcC0+c2RfbWF4X2hlaWdodCA8PSBHRlMyX01BWF9NRVRBX0hFSUdIVCk7CiAKIAlzZHAtPnNkX2poZWlnaHRzaXplWzBdID0gc2RwLT5zZF9zYi5zYl9ic2l6ZSAtCkBAIC0zMzQsNiArMzM1LDcgQEAKIAkJc2RwLT5zZF9qaGVpZ2h0c2l6ZVt4XSA9IHNwYWNlOwogCX0KIAlzZHAtPnNkX21heF9qaGVpZ2h0ID0geDsKKwlzZHAtPnNkX2poZWlnaHRzaXplW3hdID0gfjA7CiAJZ2ZzMl9hc3NlcnQoc2RwLCBzZHAtPnNkX21heF9qaGVpZ2h0IDw9IEdGUzJfTUFYX01FVEFfSEVJR0hUKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5oIGIvZnMvZ2ZzMi9zdXBlci5oCmluZGV4IDYwYTg3MGUuLjQ0MzYxZWMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuaAorKysgYi9mcy9nZnMyL3N1cGVyLmgKQEAgLTE3LDYgKzE3LDcgQEAKIGludCBnZnMyX2NoZWNrX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9zYl9ob3N0ICpzYiwgaW50IHNpbGVudCk7CiBpbnQgZ2ZzMl9yZWFkX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBzaWxlbnQpOwogaW50IGdmczJfcmVhZF9zdXBlcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc2VjdG9yX3Qgc2VjdG9yKTsKK3ZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ZzMl9qaW5kZXhfc2l6ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3lzLmMgYi9mcy9nZnMyL3N5cy5jCmluZGV4IGVhYTNiN2IuLjlhYjlmYzggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3lzLmMKKysrIGIvZnMvZ2ZzMi9zeXMuYwpAQCAtMjAsNyArMjAsNiBAQAogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgotI2luY2x1ZGUgImxtLmgiCiAjaW5jbHVkZSAic3lzLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJnbG9jay5oIgpAQCAtMzI4LDE1ICszMjcsOSBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBzdHJ1Y3QgY291bnRlcnNfYXR0ciBjb3VudGVyc19hdHRyXyMjbmFtZSA9IF9fQVRUUl9STyhuYW1lKQogCi1DT1VOVEVSU19BVFRSKGdsb2NrX2NvdW50LCAgICAgICIldVxuIik7Ci1DT1VOVEVSU19BVFRSKGdsb2NrX2hlbGRfY291bnQsICIldVxuIik7Ci1DT1VOVEVSU19BVFRSKGlub2RlX2NvdW50LCAgICAgICIldVxuIik7CiBDT1VOVEVSU19BVFRSKHJlY2xhaW1lZCwgICAgICAgICIldVxuIik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjb3VudGVyc19hdHRyc1tdID0gewotCSZjb3VudGVyc19hdHRyX2dsb2NrX2NvdW50LmF0dHIsCi0JJmNvdW50ZXJzX2F0dHJfZ2xvY2tfaGVsZF9jb3VudC5hdHRyLAotCSZjb3VudGVyc19hdHRyX2lub2RlX2NvdW50LmF0dHIsCiAJJmNvdW50ZXJzX2F0dHJfcmVjbGFpbWVkLmF0dHIsCiAJTlVMTCwKIH07CmRpZmYgLS1naXQgYS9mcy9nZnMyL3RyYW5zLmMgYi9mcy9nZnMyL3RyYW5zLmMKaW5kZXggNzNlNWQ5Mi4uZjY3N2I4YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi90cmFucy5jCisrKyBiL2ZzL2dmczIvdHJhbnMuYwpAQCAtMTQ2LDMwICsxNDYsMjUgQEAKIAlsb3BzX2FkZChzZHAsICZiZC0+YmRfbGUpOwogfQogCi12b2lkIGdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgYmxrbm8pCit2b2lkIGdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgYmxrbm8sIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IGdmczJfYnVmZGF0YSAqYmQ7Ci0JaW50IGZvdW5kID0gMDsKKwlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZCwgKnRtcDsKKwlzdHJ1Y3QgZ2ZzMl90cmFucyAqdHIgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CisJdW5zaWduZWQgaW50IG4gPSBsZW47CiAKIAlnZnMyX2xvZ19sb2NrKHNkcCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkLCAmc2RwLT5zZF9sb2dfbGVfcmV2b2tlLCBiZF9sZS5sZV9saXN0KSB7Ci0JCWlmIChiZC0+YmRfYmxrbm8gPT0gYmxrbm8pIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmQsIHRtcCwgJnNkcC0+c2RfbG9nX2xlX3Jldm9rZSwgYmRfbGUubGVfbGlzdCkgeworCQlpZiAoKGJkLT5iZF9ibGtubyA+PSBibGtubykgJiYgKGJkLT5iZF9ibGtubyA8IChibGtubyArIGxlbikpKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZiZC0+YmRfbGUubGVfbGlzdCk7CiAJCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIHNkcC0+c2RfbG9nX251bV9yZXZva2UpOwogCQkJc2RwLT5zZF9sb2dfbnVtX3Jldm9rZS0tOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7CisJCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9idWZkYXRhX2NhY2hlcCwgYmQpOworCQkJdHItPnRyX251bV9yZXZva2Vfcm0rKzsKKwkJCWlmICgtLW4gPT0gMCkKKwkJCQlicmVhazsKIAkJfQogCX0KLQogCWdmczJfbG9nX3VubG9jayhzZHApOwotCi0JaWYgKGZvdW5kKSB7Ci0JCXN0cnVjdCBnZnMyX3RyYW5zICp0ciA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKLQkJa21lbV9jYWNoZV9mcmVlKGdmczJfYnVmZGF0YV9jYWNoZXAsIGJkKTsKLQkJdHItPnRyX251bV9yZXZva2Vfcm0rKzsKLQl9CiB9CiAKIHZvaWQgZ2ZzMl90cmFuc19hZGRfcmcoc3RydWN0IGdmczJfcmdycGQgKnJnZCkKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdHJhbnMuaCBiL2ZzL2dmczIvdHJhbnMuaAppbmRleCBlODI2ZjBkLi5lZGY5ZDRiIDEwMDY0NAotLS0gYS9mcy9nZnMyL3RyYW5zLmgKKysrIGIvZnMvZ2ZzMi90cmFucy5oCkBAIC0zMiw3ICszMiw3IEBACiAKIHZvaWQgZ2ZzMl90cmFuc19hZGRfYmgoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgbWV0YSk7CiB2b2lkIGdmczJfdHJhbnNfYWRkX3Jldm9rZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYnVmZGF0YSAqYmQpOwotdm9pZCBnZnMyX3RyYW5zX2FkZF91bnJldm9rZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IGJsa25vKTsKK3ZvaWQgZ2ZzMl90cmFuc19hZGRfdW5yZXZva2Uoc3RydWN0IGdmczJfc2JkICpzZHAsIHU2NCBibGtubywgdW5zaWduZWQgaW50IGxlbik7CiB2b2lkIGdmczJfdHJhbnNfYWRkX3JnKHN0cnVjdCBnZnMyX3JncnBkICpyZ2QpOwogCiAjZW5kaWYgLyogX19UUkFOU19ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL3V0aWwuYyBiL2ZzL2dmczIvdXRpbC5jCmluZGV4IDQyNGEwNzcuLmQzMWUzNTUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdXRpbC5jCisrKyBiL2ZzL2dmczIvdXRpbC5jCkBAIC0xOSwxMiArMTksMTIgQEAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAjaW5jbHVkZSAiZ2xvY2suaCIKLSNpbmNsdWRlICJsbS5oIgogI2luY2x1ZGUgInV0aWwuaCIKIAogc3RydWN0IGttZW1fY2FjaGUgKmdmczJfZ2xvY2tfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9pbm9kZV9jYWNoZXAgX19yZWFkX21vc3RseTsKIHN0cnVjdCBrbWVtX2NhY2hlICpnZnMyX2J1ZmRhdGFfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CitzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9yZ3JwZF9jYWNoZXAgX19yZWFkX21vc3RseTsKIAogdm9pZCBnZnMyX2Fzc2VydF9pKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewpAQCAtMzIsNiArMzIsMjggQEAKIAkgICAgICAgc2RwLT5zZF9mc25hbWUpOwogfQogCitpbnQgZ2ZzMl9sbV93aXRoZHJhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCisJCXJldHVybiAwOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJZnNfZXJyKHNkcCwgImFib3V0IHRvIHdpdGhkcmF3IHRoaXMgZmlsZSBzeXN0ZW1cbiIpOworCUJVR19PTihzZHAtPnNkX2FyZ3MuYXJfZGVidWcpOworCisJZnNfZXJyKHNkcCwgInRlbGxpbmcgTE0gdG8gd2l0aGRyYXdcbiIpOworCWdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKCZzZHAtPnNkX2xvY2tzdHJ1Y3QpOworCWZzX2VycihzZHAsICJ3aXRoZHJhd25cbiIpOworCWR1bXBfc3RhY2soKTsKKworCXJldHVybiAtMTsKK30KKwogLyoqCiAgKiBnZnMyX2Fzc2VydF93aXRoZHJhd19pIC0gQ2F1c2UgdGhlIG1hY2hpbmUgdG8gd2l0aGRyYXcgaWYgQGFzc2VydGlvbiBpcyBmYWxzZQogICogUmV0dXJuczogLTEgaWYgdGhpcyBjYWxsIHdpdGhkcmV3IHRoZSBtYWNoaW5lLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi91dGlsLmggYi9mcy9nZnMyL3V0aWwuaAppbmRleCAyODkzOGE0Li41MDljNWQ2IDEwMDY0NAotLS0gYS9mcy9nZnMyL3V0aWwuaAorKysgYi9mcy9nZnMyL3V0aWwuaApAQCAtMTQ3LDYgKzE0Nyw3IEBACiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmdmczJfZ2xvY2tfY2FjaGVwOwogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpnZnMyX2lub2RlX2NhY2hlcDsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9idWZkYXRhX2NhY2hlcDsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9yZ3JwZF9jYWNoZXA7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdmczJfdHVuZV9nZXRfaShzdHJ1Y3QgZ2ZzMl90dW5lICpndCwKIAkJCQkJICAgdW5zaWduZWQgaW50ICpwKQpAQCAtMTYzLDYgKzE2NCw3IEBACiAKIHZvaWQgZ2ZzMl9pY2JpdF9tdW5nZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgY2hhciAqKmJpdG1hcCwKIAkJICAgICAgdW5zaWduZWQgaW50IGJpdCwgaW50IG5ld192YWx1ZSk7CitpbnQgZ2ZzMl9sbV93aXRoZHJhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZm10LCAuLi4pOwogCiAjZW5kaWYgLyogX19VVElMX0RPVF9IX18gKi8KIApkaWZmIC0tZ2l0IGEvZnMvaGZzL2JyZWMuYyBiL2ZzL2hmcy9icmVjLmMKaW5kZXggODc4YmYyNS4uOTJmYjM1OCAxMDA2NDQKLS0tIGEvZnMvaGZzL2JyZWMuYworKysgYi9mcy9oZnMvYnJlYy5jCkBAIC0yMjksNyArMjI5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfc3BsaXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogewogCXN0cnVjdCBoZnNfYnRyZWUgKnRyZWU7Ci0Jc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgKm5ld19ub2RlOworCXN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsICpuZXdfbm9kZSwgKm5leHRfbm9kZTsKIAlzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2Mgbm9kZV9kZXNjOwogCWludCBudW1fcmVjcywgbmV3X3JlY19vZmYsIG5ld19vZmYsIG9sZF9yZWNfb2ZmOwogCWludCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCwgc2l6ZTsKQEAgLTI0OCw2ICsyNDgsMTcgQEAKIAluZXdfbm9kZS0+dHlwZSA9IG5vZGUtPnR5cGU7CiAJbmV3X25vZGUtPmhlaWdodCA9IG5vZGUtPmhlaWdodDsKIAorCWlmIChub2RlLT5uZXh0KQorCQluZXh0X25vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLT5uZXh0KTsKKwllbHNlCisJCW5leHRfbm9kZSA9IE5VTEw7CisKKwlpZiAoSVNfRVJSKG5leHRfbm9kZSkpIHsKKwkJaGZzX2Jub2RlX3B1dChub2RlKTsKKwkJaGZzX2Jub2RlX3B1dChuZXdfbm9kZSk7CisJCXJldHVybiBuZXh0X25vZGU7CisJfQorCiAJc2l6ZSA9IHRyZWUtPm5vZGVfc2l6ZSAvIDIgLSBub2RlLT5udW1fcmVjcyAqIDIgLSAxNDsKIAlvbGRfcmVjX29mZiA9IHRyZWUtPm5vZGVfc2l6ZSAtIDQ7CiAJbnVtX3JlY3MgPSAxOwpAQCAtMjYxLDYgKzI3Miw4IEBACiAJCS8qIHBhbmljPyAqLwogCQloZnNfYm5vZGVfcHV0KG5vZGUpOwogCQloZnNfYm5vZGVfcHV0KG5ld19ub2RlKTsKKwkJaWYgKG5leHRfbm9kZSkKKwkJCWhmc19ibm9kZV9wdXQobmV4dF9ub2RlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJfQogCkBAIC0zMTUsOCArMzI4LDcgQEAKIAloZnNfYm5vZGVfd3JpdGUobm9kZSwgJm5vZGVfZGVzYywgMCwgc2l6ZW9mKG5vZGVfZGVzYykpOwogCiAJLyogdXBkYXRlIG5leHQgYm5vZGUgaGVhZGVyICovCi0JaWYgKG5ld19ub2RlLT5uZXh0KSB7Ci0JCXN0cnVjdCBoZnNfYm5vZGUgKm5leHRfbm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5ld19ub2RlLT5uZXh0KTsKKwlpZiAobmV4dF9ub2RlKSB7CiAJCW5leHRfbm9kZS0+cHJldiA9IG5ld19ub2RlLT50aGlzOwogCQloZnNfYm5vZGVfcmVhZChuZXh0X25vZGUsICZub2RlX2Rlc2MsIDAsIHNpemVvZihub2RlX2Rlc2MpKTsKIAkJbm9kZV9kZXNjLnByZXYgPSBjcHVfdG9fYmUzMihuZXh0X25vZGUtPnByZXYpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9kaXIuYyBiL2ZzL2hmc3BsdXMvZGlyLmMKaW5kZXggMjk2ODM2NC4uNWY0MDIzNiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9kaXIuYworKysgYi9mcy9oZnNwbHVzL2Rpci5jCkBAIC0zNDAsMTYgKzM0MCwyMyBAQAogCiAJaWYgKGlub2RlLT5pX25saW5rID4gMCkKIAkJZHJvcF9ubGluayhpbm9kZSk7Ci0JaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwotCWlmIChpbm9kZS0+aV9pbm8gIT0gY25pZCAmJiAhaW5vZGUtPmlfbmxpbmspIHsKLQkJaWYgKCFhdG9taWNfcmVhZCgmSEZTUExVU19JKGlub2RlKS5vcGVuY250KSkgewotCQkJcmVzID0gaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLT5pX2lubywgSEZTUExVU19TQihzYikuaGlkZGVuX2RpciwgTlVMTCk7Ci0JCQlpZiAoIXJlcykKLQkJCQloZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7Ci0JCX0gZWxzZQotCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19ERUFEOwotCX0gZWxzZQorCWlmIChpbm9kZS0+aV9pbm8gPT0gY25pZCkKIAkJY2xlYXJfbmxpbmsoaW5vZGUpOworCWlmICghaW5vZGUtPmlfbmxpbmspIHsKKwkJaWYgKGlub2RlLT5pX2lubyAhPSBjbmlkKSB7CisJCQlIRlNQTFVTX1NCKHNiKS5maWxlX2NvdW50LS07CisJCQlpZiAoIWF0b21pY19yZWFkKCZIRlNQTFVTX0koaW5vZGUpLm9wZW5jbnQpKSB7CisJCQkJcmVzID0gaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLT5pX2lubywKKwkJCQkJCQkgSEZTUExVU19TQihzYikuaGlkZGVuX2RpciwKKwkJCQkJCQkgTlVMTCk7CisJCQkJaWYgKCFyZXMpCisJCQkJCWhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTsKKwkJCX0gZWxzZQorCQkJCWlub2RlLT5pX2ZsYWdzIHw9IFNfREVBRDsKKwkJfSBlbHNlCisJCQloZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7CisJfSBlbHNlCisJCUhGU1BMVVNfU0Ioc2IpLmZpbGVfY291bnQtLTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9jdGwuYyBiL2ZzL2hmc3BsdXMvaW9jdGwuYwppbmRleCBiNjBjMGFmLi5mNDU3ZDJjIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lvY3RsLmMKKysrIGIvZnMvaGZzcGx1cy9pb2N0bC5jCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzUsMjUgKzM2LDMyIEBACiAJCQlmbGFncyB8PSBGU19OT0RVTVBfRkw7IC8qIEVYVDJfTk9EVU1QX0ZMICovCiAJCXJldHVybiBwdXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKilhcmcpOwogCWNhc2UgSEZTUExVU19JT0NfRVhUMl9TRVRGTEFHUzogewotCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJCXJldHVybiAtRVJPRlM7CisJCWludCBlcnIgPSAwOworCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAKLQkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0KLQkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQorCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpIHsKKwkJCWVyciA9IC1FQUNDRVM7CisJCQlnb3RvIHNldGZsYWdzX291dDsKKwkJfQorCQlpZiAoZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gc2V0ZmxhZ3Nfb3V0OworCQl9CiAJCWlmIChmbGFncyAmIChGU19JTU1VVEFCTEVfRkx8RlNfQVBQRU5EX0ZMKSB8fAogCQkgICAgSEZTUExVU19JKGlub2RlKS5yb290ZmxhZ3MgJiAoSEZTUExVU19GTEdfSU1NVVRBQkxFfEhGU1BMVVNfRkxHX0FQUEVORCkpIHsKLQkJCWlmICghY2FwYWJsZShDQVBfTElOVVhfSU1NVVRBQkxFKSkKLQkJCQlyZXR1cm4gLUVQRVJNOworCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKSB7CisJCQkJZXJyID0gLUVQRVJNOworCQkJCWdvdG8gc2V0ZmxhZ3Nfb3V0OworCQkJfQogCQl9CiAKIAkJLyogZG9uJ3Qgc2lsZW50bHkgaWdub3JlIHVuc3VwcG9ydGVkIGV4dDIgZmxhZ3MgKi8KLQkJaWYgKGZsYWdzICYgfihGU19JTU1VVEFCTEVfRkx8RlNfQVBQRU5EX0ZMfEZTX05PRFVNUF9GTCkpCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KKwkJaWYgKGZsYWdzICYgfihGU19JTU1VVEFCTEVfRkx8RlNfQVBQRU5EX0ZMfEZTX05PRFVNUF9GTCkpIHsKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJZ290byBzZXRmbGFnc19vdXQ7CisJCX0KIAkJaWYgKGZsYWdzICYgRlNfSU1NVVRBQkxFX0ZMKSB7IC8qIEVYVDJfSU1NVVRBQkxFX0ZMICovCiAJCQlpbm9kZS0+aV9mbGFncyB8PSBTX0lNTVVUQUJMRTsKIAkJCUhGU1BMVVNfSShpbm9kZSkucm9vdGZsYWdzIHw9IEhGU1BMVVNfRkxHX0lNTVVUQUJMRTsKQEAgLTc1LDcgKzgzLDkgQEAKIAogCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQlyZXR1cm4gMDsKK3NldGZsYWdzX291dDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCXJldHVybiBlcnI7CiAJfQogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvZnMvaHBwZnMvaHBwZnNfa2Vybi5jIGIvZnMvaHBwZnMvaHBwZnNfa2Vybi5jCmluZGV4IGExZTFmMGYuLjg2MDFkOGUgMTAwNjQ0Ci0tLSBhL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYworKysgYi9mcy9ocHBmcy9ocHBmc19rZXJuLmMKQEAgLTEsMjMgKzEsMjQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2ZjbnRsLmg+CiAjaW5jbHVkZSAib3MuaCIKIAotc3RhdGljIGludCBpbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CitzdGF0aWMgc3RydWN0IGlub2RlICpnZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBkZW50cnkgKik7CiAKIHN0cnVjdCBocHBmc19kYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC01MSwxNCArNTIsMTQgQEAKIAlpbnQgaTsKIAogCXNiID0gZGVudHJ5LT5kX3NiOwotCWlmKChzYi0+c19vcCAhPSAmaHBwZnNfc2JvcHMpIHx8IChkZW50cnktPmRfcGFyZW50ICE9IHNiLT5zX3Jvb3QpKQotCQlyZXR1cm4oMCk7CisJaWYgKChzYi0+c19vcCAhPSAmaHBwZnNfc2JvcHMpIHx8IChkZW50cnktPmRfcGFyZW50ICE9IHNiLT5zX3Jvb3QpKQorCQlyZXR1cm4gMDsKIAotCWZvcihpID0gMDsgaSA8IGRlbnRyeS0+ZF9uYW1lLmxlbjsgaSsrKXsKLQkJaWYoIWlzZGlnaXQoZGVudHJ5LT5kX25hbWUubmFtZVtpXSkpCi0JCQlyZXR1cm4oMCk7CisJZm9yIChpID0gMDsgaSA8IGRlbnRyeS0+ZF9uYW1lLmxlbjsgaSsrKSB7CisJCWlmICghaXNkaWdpdChkZW50cnktPmRfbmFtZS5uYW1lW2ldKSkKKwkJCXJldHVybiAwOwogCX0KLQlyZXR1cm4oMSk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBjaGFyICpkZW50cnlfbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBleHRyYSkKQEAgLTcwLDggKzcxLDggQEAKIAogCWxlbiA9IDA7CiAJcGFyZW50ID0gZGVudHJ5OwotCXdoaWxlKHBhcmVudC0+ZF9wYXJlbnQgIT0gcGFyZW50KXsKLQkJaWYoaXNfcGlkKHBhcmVudCkpCisJd2hpbGUgKHBhcmVudC0+ZF9wYXJlbnQgIT0gcGFyZW50KSB7CisJCWlmIChpc19waWQocGFyZW50KSkKIAkJCWxlbiArPSBzdHJsZW4oInBpZCIpICsgMTsKIAkJZWxzZSBsZW4gKz0gcGFyZW50LT5kX25hbWUubGVuICsgMTsKIAkJcGFyZW50ID0gcGFyZW50LT5kX3BhcmVudDsKQEAgLTgwLDEyICs4MSwxMyBAQAogCXJvb3QgPSAicHJvYyI7CiAJbGVuICs9IHN0cmxlbihyb290KTsKIAluYW1lID0ga21hbGxvYyhsZW4gKyBleHRyYSArIDEsIEdGUF9LRVJORUwpOwotCWlmKG5hbWUgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybiBOVUxMOwogCiAJbmFtZVtsZW5dID0gJ1wwJzsKIAlwYXJlbnQgPSBkZW50cnk7Ci0Jd2hpbGUocGFyZW50LT5kX3BhcmVudCAhPSBwYXJlbnQpewotCQlpZihpc19waWQocGFyZW50KSl7CisJd2hpbGUgKHBhcmVudC0+ZF9wYXJlbnQgIT0gcGFyZW50KSB7CisJCWlmIChpc19waWQocGFyZW50KSkgewogCQkJc2VnX25hbWUgPSAicGlkIjsKIAkJCXNlZ19sZW4gPSBzdHJsZW4oInBpZCIpOwogCQl9CkBAIC0xMDAsMjcgKzEwMiwyNSBAQAogCQlwYXJlbnQgPSBwYXJlbnQtPmRfcGFyZW50OwogCX0KIAlzdHJuY3B5KG5hbWUsIHJvb3QsIHN0cmxlbihyb290KSk7Ci0JcmV0dXJuKG5hbWUpOworCXJldHVybiBuYW1lOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaHBwZnNfZGVudHJ5X29wcyA9IHsKLX07Ci0KIHN0YXRpYyBpbnQgZmlsZV9yZW1vdmVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqZmlsZSkKIHsKIAljaGFyICpob3N0X2ZpbGU7CiAJaW50IGV4dHJhLCBmZDsKIAogCWV4dHJhID0gMDsKLQlpZihmaWxlICE9IE5VTEwpIGV4dHJhICs9IHN0cmxlbihmaWxlKSArIDE7CisJaWYgKGZpbGUgIT0gTlVMTCkKKwkJZXh0cmEgKz0gc3RybGVuKGZpbGUpICsgMTsKIAogCWhvc3RfZmlsZSA9IGRlbnRyeV9uYW1lKGRlbnRyeSwgZXh0cmEgKyBzdHJsZW4oIi9yZW1vdmUiKSk7Ci0JaWYoaG9zdF9maWxlID09IE5VTEwpewotCQlwcmludGsoImZpbGVfcmVtb3ZlZCA6IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuKC1FTk9NRU0pOworCWlmIChob3N0X2ZpbGUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImZpbGVfcmVtb3ZlZCA6IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYoZmlsZSAhPSBOVUxMKXsKKwlpZiAoZmlsZSAhPSBOVUxMKSB7CiAJCXN0cmNhdChob3N0X2ZpbGUsICIvIik7CiAJCXN0cmNhdChob3N0X2ZpbGUsIGZpbGUpOwogCX0KQEAgLTEyOCw0NSArMTI4LDExIEBACiAKIAlmZCA9IG9zX29wZW5fZmlsZShob3N0X2ZpbGUsIG9mX3JlYWQoT1BFTkZMQUdTKCkpLCAwKTsKIAlrZnJlZShob3N0X2ZpbGUpOwotCWlmKGZkID4gMCl7CisJaWYgKGZkID4gMCkgewogCQlvc19jbG9zZV9maWxlKGZkKTsKLQkJcmV0dXJuKDEpOworCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuKDApOwotfQotCi1zdGF0aWMgdm9pZCBocHBmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vKQotewotCXN0cnVjdCBpbm9kZSAqcHJvY19pbm87Ci0KLQlpZihIUFBGU19JKGlubyktPnByb2NfZGVudHJ5ID09IE5VTEwpCi0JCXJldHVybjsKLQotCXByb2NfaW5vID0gSFBQRlNfSShpbm8pLT5wcm9jX2RlbnRyeS0+ZF9pbm9kZTsKLQlpbm8tPmlfdWlkID0gcHJvY19pbm8tPmlfdWlkOwotCWluby0+aV9naWQgPSBwcm9jX2luby0+aV9naWQ7Ci0JaW5vLT5pX2F0aW1lID0gcHJvY19pbm8tPmlfYXRpbWU7Ci0JaW5vLT5pX210aW1lID0gcHJvY19pbm8tPmlfbXRpbWU7Ci0JaW5vLT5pX2N0aW1lID0gcHJvY19pbm8tPmlfY3RpbWU7Ci0JaW5vLT5pX2lubyA9IHByb2NfaW5vLT5pX2lubzsKLQlpbm8tPmlfbW9kZSA9IHByb2NfaW5vLT5pX21vZGU7Ci0JaW5vLT5pX25saW5rID0gcHJvY19pbm8tPmlfbmxpbms7Ci0JaW5vLT5pX3NpemUgPSBwcm9jX2luby0+aV9zaXplOwotCWluby0+aV9ibG9ja3MgPSBwcm9jX2luby0+aV9ibG9ja3M7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmhwcGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgMCk7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpIHsKLQkJaHBwZnNfcmVhZF9pbm9kZShpbm9kZSk7Ci0JCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwotCX0KLQlyZXR1cm4gaW5vZGU7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpocHBmc19sb29rdXAoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKQEAgLTE3Nyw1NSArMTQzLDQ1IEBACiAJaW50IGVyciwgZGVsZXRlZDsKIAogCWRlbGV0ZWQgPSBmaWxlX3JlbW92ZWQoZGVudHJ5LCBOVUxMKTsKLQlpZihkZWxldGVkIDwgMCkKLQkJcmV0dXJuKEVSUl9QVFIoZGVsZXRlZCkpOwotCWVsc2UgaWYoZGVsZXRlZCkKLQkJcmV0dXJuKEVSUl9QVFIoLUVOT0VOVCkpOworCWlmIChkZWxldGVkIDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIoZGVsZXRlZCk7CisJZWxzZSBpZiAoZGVsZXRlZCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKIAllcnIgPSAtRU5PTUVNOwogCXBhcmVudCA9IEhQUEZTX0koaW5vKS0+cHJvY19kZW50cnk7CiAJbXV0ZXhfbG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAlwcm9jX2RlbnRyeSA9IGRfbG9va3VwKHBhcmVudCwgJmRlbnRyeS0+ZF9uYW1lKTsKLQlpZihwcm9jX2RlbnRyeSA9PSBOVUxMKXsKKwlpZiAocHJvY19kZW50cnkgPT0gTlVMTCkgewogCQlwcm9jX2RlbnRyeSA9IGRfYWxsb2MocGFyZW50LCAmZGVudHJ5LT5kX25hbWUpOwotCQlpZihwcm9jX2RlbnRyeSA9PSBOVUxMKXsKKwkJaWYgKHByb2NfZGVudHJ5ID09IE5VTEwpIHsKIAkJCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCW5ldyA9ICgqcGFyZW50LT5kX2lub2RlLT5pX29wLT5sb29rdXApKHBhcmVudC0+ZF9pbm9kZSwKIAkJCQkJCSAgICAgICBwcm9jX2RlbnRyeSwgTlVMTCk7Ci0JCWlmKG5ldyl7CisJCWlmIChuZXcpIHsKIAkJCWRwdXQocHJvY19kZW50cnkpOwogCQkJcHJvY19kZW50cnkgPSBuZXc7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYoSVNfRVJSKHByb2NfZGVudHJ5KSkKLQkJcmV0dXJuKHByb2NfZGVudHJ5KTsKKwlpZiAoSVNfRVJSKHByb2NfZGVudHJ5KSkKKwkJcmV0dXJuIHByb2NfZGVudHJ5OwogCi0JaW5vZGUgPSBocHBmc19pZ2V0KGluby0+aV9zYik7Ci0JaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJZXJyID0gLUVOT01FTTsKKwlpbm9kZSA9IGdldF9pbm9kZShpbm8tPmlfc2IsIHByb2NfZGVudHJ5KTsKKwlpZiAoIWlub2RlKQogCQlnb3RvIG91dF9kcHV0OwotCX0KLQotCWVyciA9IGluaXRfaW5vZGUoaW5vZGUsIHByb2NfZGVudHJ5KTsKLQlpZihlcnIpCi0JCWdvdG8gb3V0X3B1dDsKLQotCWhwcGZzX3JlYWRfaW5vZGUoaW5vZGUpOwogCiAgCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwotCWRlbnRyeS0+ZF9vcCA9ICZocHBmc19kZW50cnlfb3BzOwotCXJldHVybihOVUxMKTsKKwlyZXR1cm4gTlVMTDsKIAotIG91dF9wdXQ6Ci0JaXB1dChpbm9kZSk7CiAgb3V0X2RwdXQ6CiAJZHB1dChwcm9jX2RlbnRyeSk7CiAgb3V0OgotCXJldHVybihFUlJfUFRSKGVycikpOworCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBocHBmc19maWxlX2lvcHMgPSB7CkBAIC0yMzksMTUgKzE5NSwxNiBAQAogCiAJcmVhZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfZm9wLT5yZWFkOwogCi0JaWYoIWlzX3VzZXIpCisJaWYgKCFpc191c2VyKQogCQlzZXRfZnMoS0VSTkVMX0RTKTsKIAogCW4gPSAoKnJlYWQpKGZpbGUsIGJ1ZiwgY291bnQsICZmaWxlLT5mX3Bvcyk7CiAKLQlpZighaXNfdXNlcikKKwlpZiAoIWlzX3VzZXIpCiAJCXNldF9mcyhVU0VSX0RTKTsKIAotCWlmKHBwb3MpICpwcG9zID0gZmlsZS0+Zl9wb3M7CisJaWYgKHBwb3MpCisJCSpwcG9zID0gZmlsZS0+Zl9wb3M7CiAJcmV0dXJuIG47CiB9CiAKQEAgLTI1OSwyNCArMjE2LDIzIEBACiAKIAluID0gLUVOT01FTTsKIAluZXdfYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmKG5ld19idWYgPT0gTlVMTCl7Ci0JCXByaW50aygiaHBwZnNfcmVhZF9maWxlIDoga21hbGxvYyBmYWlsZWRcbiIpOworCWlmIChuZXdfYnVmID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJocHBmc19yZWFkX2ZpbGUgOiBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAluID0gMDsKLQl3aGlsZShjb3VudCA+IDApeworCXdoaWxlIChjb3VudCA+IDApIHsKIAkJY3VyID0gbWluX3Qoc3NpemVfdCwgY291bnQsIFBBR0VfU0laRSk7CiAJCWVyciA9IG9zX3JlYWRfZmlsZShmZCwgbmV3X2J1ZiwgY3VyKTsKLQkJaWYoZXJyIDwgMCl7Ci0JCQlwcmludGsoImhwcGZzX3JlYWQgOiByZWFkIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKLQkJCSAgICAgICBlcnIpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJocHBmc19yZWFkIDogcmVhZCBmYWlsZWQsICIKKwkJCSAgICAgICAiZXJybm8gPSAlZFxuIiwgZXJyKTsKIAkJCW4gPSBlcnI7CiAJCQlnb3RvIG91dF9mcmVlOwotCQl9Ci0JCWVsc2UgaWYoZXJyID09IDApCisJCX0gZWxzZSBpZiAoZXJyID09IDApCiAJCQlicmVhazsKIAotCQlpZihjb3B5X3RvX3VzZXIoYnVmLCBuZXdfYnVmLCBlcnIpKXsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIG5ld19idWYsIGVycikpIHsKIAkJCW4gPSAtRUZBVUxUOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQpAQCAtMjk3LDM1ICsyNTMsMzYgQEAKIAlsb2ZmX3Qgb2ZmOwogCWludCBlcnI7CiAKLQlpZihocHBmcy0+Y29udGVudHMgIT0gTlVMTCl7Ci0JCWlmKCpwcG9zID49IGhwcGZzLT5sZW4pIHJldHVybigwKTsKKwlpZiAoaHBwZnMtPmNvbnRlbnRzICE9IE5VTEwpIHsKKwkJaWYgKCpwcG9zID49IGhwcGZzLT5sZW4pCisJCQlyZXR1cm4gMDsKIAogCQlkYXRhID0gaHBwZnMtPmNvbnRlbnRzOwogCQlvZmYgPSAqcHBvczsKLQkJd2hpbGUob2ZmID49IHNpemVvZihkYXRhLT5jb250ZW50cykpeworCQl3aGlsZSAob2ZmID49IHNpemVvZihkYXRhLT5jb250ZW50cykpIHsKIAkJCWRhdGEgPSBsaXN0X2VudHJ5KGRhdGEtPmxpc3QubmV4dCwgc3RydWN0IGhwcGZzX2RhdGEsCiAJCQkJCSAgbGlzdCk7CiAJCQlvZmYgLT0gc2l6ZW9mKGRhdGEtPmNvbnRlbnRzKTsKIAkJfQogCi0JCWlmKG9mZiArIGNvdW50ID4gaHBwZnMtPmxlbikKKwkJaWYgKG9mZiArIGNvdW50ID4gaHBwZnMtPmxlbikKIAkJCWNvdW50ID0gaHBwZnMtPmxlbiAtIG9mZjsKIAkJY29weV90b191c2VyKGJ1ZiwgJmRhdGEtPmNvbnRlbnRzW29mZl0sIGNvdW50KTsKIAkJKnBwb3MgKz0gY291bnQ7Ci0JfQotCWVsc2UgaWYoaHBwZnMtPmhvc3RfZmQgIT0gLTEpeworCX0gZWxzZSBpZiAoaHBwZnMtPmhvc3RfZmQgIT0gLTEpIHsKIAkJZXJyID0gb3Nfc2Vla19maWxlKGhwcGZzLT5ob3N0X2ZkLCAqcHBvcyk7Ci0JCWlmKGVycil7Ci0JCQlwcmludGsoImhwcGZzX3JlYWQgOiBzZWVrIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwgZXJyKTsKLQkJCXJldHVybihlcnIpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhwcGZzX3JlYWQgOiBzZWVrIGZhaWxlZCwgIgorCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnIpOworCQkJcmV0dXJuIGVycjsKIAkJfQogCQljb3VudCA9IGhwcGZzX3JlYWRfZmlsZShocHBmcy0+aG9zdF9mZCwgYnVmLCBjb3VudCk7Ci0JCWlmKGNvdW50ID4gMCkKKwkJaWYgKGNvdW50ID4gMCkKIAkJCSpwcG9zICs9IGNvdW50OwogCX0KIAllbHNlIGNvdW50ID0gcmVhZF9wcm9jKGhwcGZzLT5wcm9jX2ZpbGUsIGJ1ZiwgY291bnQsIHBwb3MsIDEpOwogCi0JcmV0dXJuKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhwcGZzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLApAQCAtMzQyLDcgKzI5OSw3IEBACiAJZXJyID0gKCp3cml0ZSkocHJvY19maWxlLCBidWYsIGxlbiwgJnByb2NfZmlsZS0+Zl9wb3MpOwogCWZpbGUtPmZfcG9zID0gcHJvY19maWxlLT5mX3BvczsKIAotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgb3Blbl9ob3N0X3NvY2soY2hhciAqaG9zdF9maWxlLCBpbnQgKmZpbHRlcl9vdXQpCkBAIC0zNTQsMTMgKzMxMSwxMyBAQAogCXN0cmNweShlbmQsICIvcnciKTsKIAkqZmlsdGVyX291dCA9IDE7CiAJZmQgPSBvc19jb25uZWN0X3NvY2tldChob3N0X2ZpbGUpOwotCWlmKGZkID4gMCkKLQkJcmV0dXJuKGZkKTsKKwlpZiAoZmQgPiAwKQorCQlyZXR1cm4gZmQ7CiAKIAlzdHJjcHkoZW5kLCAiL3IiKTsKIAkqZmlsdGVyX291dCA9IDA7CiAJZmQgPSBvc19jb25uZWN0X3NvY2tldChob3N0X2ZpbGUpOwotCXJldHVybihmZCk7CisJcmV0dXJuIGZkOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2NvbnRlbnRzKHN0cnVjdCBocHBmc19kYXRhICpoZWFkKQpAQCAtMzY4LDkgKzMyNSwxMCBAQAogCXN0cnVjdCBocHBmc19kYXRhICpkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZSwgKm5leHQ7CiAKLQlpZihoZWFkID09IE5VTEwpIHJldHVybjsKKwlpZiAoaGVhZCA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUoZWxlLCBuZXh0LCAmaGVhZC0+bGlzdCl7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGVsZSwgbmV4dCwgJmhlYWQtPmxpc3QpIHsKIAkJZGF0YSA9IGxpc3RfZW50cnkoZWxlLCBzdHJ1Y3QgaHBwZnNfZGF0YSwgbGlzdCk7CiAJCWtmcmVlKGRhdGEpOwogCX0KQEAgLTM4Nyw4ICszNDUsOCBAQAogCiAJZXJyID0gLUVOT01FTTsKIAlkYXRhID0ga21hbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZihkYXRhID09IE5VTEwpewotCQlwcmludGsoImhwcGZzX2dldF9kYXRhIDogaGVhZCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJaWYgKGRhdGEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImhwcGZzX2dldF9kYXRhIDogaGVhZCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtMzk3LDM2ICszNTUsMzYgQEAKIAloZWFkID0gZGF0YTsKIAkqc2l6ZV9vdXQgPSAwOwogCi0JaWYoZmlsdGVyKXsKLQkJd2hpbGUoKG4gPSByZWFkX3Byb2MocHJvY19maWxlLCBkYXRhLT5jb250ZW50cywKKwlpZiAoZmlsdGVyKSB7CisJCXdoaWxlICgobiA9IHJlYWRfcHJvYyhwcm9jX2ZpbGUsIGRhdGEtPmNvbnRlbnRzLAogCQkJCSAgICAgc2l6ZW9mKGRhdGEtPmNvbnRlbnRzKSwgTlVMTCwgMCkpID4gMCkKIAkJCW9zX3dyaXRlX2ZpbGUoZmQsIGRhdGEtPmNvbnRlbnRzLCBuKTsKIAkJZXJyID0gb3Nfc2h1dGRvd25fc29ja2V0KGZkLCAwLCAxKTsKLQkJaWYoZXJyKXsKLQkJCXByaW50aygiaHBwZnNfZ2V0X2RhdGEgOiBmYWlsZWQgdG8gc2h1dCBkb3duICIKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJocHBmc19nZXRfZGF0YSA6IGZhaWxlZCB0byBzaHV0IGRvd24gIgogCQkJICAgICAgICJzb2NrZXRcbiIpOwogCQkJZ290byBmYWlsZWRfZnJlZTsKIAkJfQogCX0KLQl3aGlsZSgxKXsKKwl3aGlsZSAoMSkgewogCQluID0gb3NfcmVhZF9maWxlKGZkLCBkYXRhLT5jb250ZW50cywgc2l6ZW9mKGRhdGEtPmNvbnRlbnRzKSk7Ci0JCWlmKG4gPCAwKXsKKwkJaWYgKG4gPCAwKSB7CiAJCQllcnIgPSBuOwotCQkJcHJpbnRrKCJocHBmc19nZXRfZGF0YSA6IHJlYWQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLAotCQkJICAgICAgIGVycik7CisJCQlwcmludGsoS0VSTl9FUlIgImhwcGZzX2dldF9kYXRhIDogcmVhZCBmYWlsZWQsICIKKwkJCSAgICAgICAiZXJybm8gPSAlZFxuIiwgZXJyKTsKIAkJCWdvdG8gZmFpbGVkX2ZyZWU7Ci0JCX0KLQkJZWxzZSBpZihuID09IDApCisJCX0gZWxzZSBpZiAobiA9PSAwKQogCQkJYnJlYWs7CiAKIAkJKnNpemVfb3V0ICs9IG47CiAKLQkJaWYobiA8IHNpemVvZihkYXRhLT5jb250ZW50cykpCisJCWlmIChuIDwgc2l6ZW9mKGRhdGEtPmNvbnRlbnRzKSkKIAkJCWJyZWFrOwogCiAJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmKG5ldyA9PSAwKXsKLQkJCXByaW50aygiaHBwZnNfZ2V0X2RhdGEgOiBkYXRhIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJaWYgKG5ldyA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhwcGZzX2dldF9kYXRhIDogZGF0YSBhbGxvY2F0aW9uICIKKwkJCSAgICAgICAiZmFpbGVkXG4iKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGZhaWxlZF9mcmVlOwogCQl9CkBAIC00MzUsMTIgKzM5MywxMiBAQAogCQlsaXN0X2FkZCgmbmV3LT5saXN0LCAmZGF0YS0+bGlzdCk7CiAJCWRhdGEgPSBuZXc7CiAJfQotCXJldHVybihoZWFkKTsKKwlyZXR1cm4gaGVhZDsKIAogIGZhaWxlZF9mcmVlOgogCWZyZWVfY29udGVudHMoaGVhZCk7CiAgZmFpbGVkOgotCXJldHVybihFUlJfUFRSKGVycikpOworCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaHBwZnNfcHJpdmF0ZSAqaHBwZnNfZGF0YSh2b2lkKQpAQCAtNDQ4LDc3ICs0MDYsNzkgQEAKIAlzdHJ1Y3QgaHBwZnNfcHJpdmF0ZSAqZGF0YTsKIAogCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwotCWlmKGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuKGRhdGEpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiBkYXRhOwogCiAJKmRhdGEgPSAoKHN0cnVjdCBocHBmc19wcml2YXRlICkgeyAuaG9zdF9mZCAgCQk9IC0xLAogCQkJCQkgICAubGVuICAJCT0gLTEsCiAJCQkJCSAgIC5jb250ZW50cyAJCT0gTlVMTCB9ICk7Ci0JcmV0dXJuKGRhdGEpOworCXJldHVybiBkYXRhOwogfQogCiBzdGF0aWMgaW50IGZpbGVfbW9kZShpbnQgZm1vZGUpCiB7Ci0JaWYoZm1vZGUgPT0gKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpCi0JCXJldHVybihPX1JEV1IpOwotCWlmKGZtb2RlID09IEZNT0RFX1JFQUQpCi0JCXJldHVybihPX1JET05MWSk7Ci0JaWYoZm1vZGUgPT0gRk1PREVfV1JJVEUpCi0JCXJldHVybihPX1dST05MWSk7Ci0JcmV0dXJuKDApOworCWlmIChmbW9kZSA9PSAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKSkKKwkJcmV0dXJuIE9fUkRXUjsKKwlpZiAoZm1vZGUgPT0gRk1PREVfUkVBRCkKKwkJcmV0dXJuIE9fUkRPTkxZOworCWlmIChmbW9kZSA9PSBGTU9ERV9XUklURSkKKwkJcmV0dXJuIE9fV1JPTkxZOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGhwcGZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGhwcGZzX3ByaXZhdGUgKmRhdGE7CiAJc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnk7CisJc3RydWN0IHZmc21vdW50ICpwcm9jX21udDsKIAljaGFyICpob3N0X2ZpbGU7CiAJaW50IGVyciwgZmQsIHR5cGUsIGZpbHRlcjsKIAogCWVyciA9IC1FTk9NRU07CiAJZGF0YSA9IGhwcGZzX2RhdGEoKTsKLQlpZihkYXRhID09IE5VTEwpCisJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlob3N0X2ZpbGUgPSBkZW50cnlfbmFtZShmaWxlLT5mX3BhdGguZGVudHJ5LCBzdHJsZW4oIi9ydyIpKTsKLQlpZihob3N0X2ZpbGUgPT0gTlVMTCkKKwlpZiAoaG9zdF9maWxlID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWUyOwogCiAJcHJvY19kZW50cnkgPSBIUFBGU19JKGlub2RlKS0+cHJvY19kZW50cnk7CisJcHJvY19tbnQgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCiAJLyogWFhYIFRoaXMgaXNuJ3QgY2xvc2VkIGFueXdoZXJlICovCi0JZGF0YS0+cHJvY19maWxlID0gZGVudHJ5X29wZW4oZGdldChwcm9jX2RlbnRyeSksIE5VTEwsCisJZGF0YS0+cHJvY19maWxlID0gZGVudHJ5X29wZW4oZGdldChwcm9jX2RlbnRyeSksIG1udGdldChwcm9jX21udCksCiAJCQkJICAgICAgZmlsZV9tb2RlKGZpbGUtPmZfbW9kZSkpOwogCWVyciA9IFBUUl9FUlIoZGF0YS0+cHJvY19maWxlKTsKLQlpZihJU19FUlIoZGF0YS0+cHJvY19maWxlKSkKKwlpZiAoSVNfRVJSKGRhdGEtPnByb2NfZmlsZSkpCiAJCWdvdG8gb3V0X2ZyZWUxOwogCiAJdHlwZSA9IG9zX2ZpbGVfdHlwZShob3N0X2ZpbGUpOwotCWlmKHR5cGUgPT0gT1NfVFlQRV9GSUxFKXsKKwlpZiAodHlwZSA9PSBPU19UWVBFX0ZJTEUpIHsKIAkJZmQgPSBvc19vcGVuX2ZpbGUoaG9zdF9maWxlLCBvZl9yZWFkKE9QRU5GTEFHUygpKSwgMCk7Ci0JCWlmKGZkID49IDApCisJCWlmIChmZCA+PSAwKQogCQkJZGF0YS0+aG9zdF9mZCA9IGZkOwotCQllbHNlIHByaW50aygiaHBwZnNfb3BlbiA6IGZhaWxlZCB0byBvcGVuICclcycsIGVycm5vID0gJWRcbiIsCi0JCQkgICAgaG9zdF9maWxlLCAtZmQpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9FUlIgImhwcGZzX29wZW4gOiBmYWlsZWQgdG8gb3BlbiAnJXMnLCAiCisJCQkgICAgICAgImVycm5vID0gJWRcbiIsIGhvc3RfZmlsZSwgLWZkKTsKIAogCQlkYXRhLT5jb250ZW50cyA9IE5VTEw7Ci0JfQotCWVsc2UgaWYodHlwZSA9PSBPU19UWVBFX0RJUil7CisJfSBlbHNlIGlmICh0eXBlID09IE9TX1RZUEVfRElSKSB7CiAJCWZkID0gb3Blbl9ob3N0X3NvY2soaG9zdF9maWxlLCAmZmlsdGVyKTsKLQkJaWYoZmQgPiAwKXsKKwkJaWYgKGZkID4gMCkgewogCQkJZGF0YS0+Y29udGVudHMgPSBocHBmc19nZXRfZGF0YShmZCwgZmlsdGVyLAogCQkJCQkJCWRhdGEtPnByb2NfZmlsZSwKIAkJCQkJCQlmaWxlLCAmZGF0YS0+bGVuKTsKLQkJCWlmKCFJU19FUlIoZGF0YS0+Y29udGVudHMpKQorCQkJaWYgKCFJU19FUlIoZGF0YS0+Y29udGVudHMpKQogCQkJCWRhdGEtPmhvc3RfZmQgPSBmZDsKLQkJfQotCQllbHNlIHByaW50aygiaHBwZnNfb3BlbiA6IGZhaWxlZCB0byBvcGVuIGEgc29ja2V0IGluICIKLQkJCSAgICAiJyVzJywgZXJybm8gPSAlZFxuIiwgaG9zdF9maWxlLCAtZmQpOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiaHBwZnNfb3BlbiA6IGZhaWxlZCB0byBvcGVuIGEgc29ja2V0ICIKKwkJCSAgICAgICAiaW4gJyVzJywgZXJybm8gPSAlZFxuIiwgaG9zdF9maWxlLCAtZmQpOwogCX0KIAlrZnJlZShob3N0X2ZpbGUpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiAKICBvdXRfZnJlZTE6CiAJa2ZyZWUoaG9zdF9maWxlKTsKQEAgLTUyNiwzNCArNDg2LDM2IEBACiAJZnJlZV9jb250ZW50cyhkYXRhLT5jb250ZW50cyk7CiAJa2ZyZWUoZGF0YSk7CiAgb3V0OgotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaHBwZnNfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGhwcGZzX3ByaXZhdGUgKmRhdGE7CiAJc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnk7CisJc3RydWN0IHZmc21vdW50ICpwcm9jX21udDsKIAlpbnQgZXJyOwogCiAJZXJyID0gLUVOT01FTTsKIAlkYXRhID0gaHBwZnNfZGF0YSgpOwotCWlmKGRhdGEgPT0gTlVMTCkKKwlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAogCXByb2NfZGVudHJ5ID0gSFBQRlNfSShpbm9kZSktPnByb2NfZGVudHJ5OwotCWRhdGEtPnByb2NfZmlsZSA9IGRlbnRyeV9vcGVuKGRnZXQocHJvY19kZW50cnkpLCBOVUxMLAorCXByb2NfbW50ID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlkYXRhLT5wcm9jX2ZpbGUgPSBkZW50cnlfb3BlbihkZ2V0KHByb2NfZGVudHJ5KSwgbW50Z2V0KHByb2NfbW50KSwKIAkJCQkgICAgICBmaWxlX21vZGUoZmlsZS0+Zl9tb2RlKSk7CiAJZXJyID0gUFRSX0VSUihkYXRhLT5wcm9jX2ZpbGUpOwotCWlmKElTX0VSUihkYXRhLT5wcm9jX2ZpbGUpKQorCWlmIChJU19FUlIoZGF0YS0+cHJvY19maWxlKSkKIAkJZ290byBvdXRfZnJlZTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRhdGE7Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogCiAgb3V0X2ZyZWU6CiAJa2ZyZWUoZGF0YSk7CiAgb3V0OgotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBsb2ZmX3QgaHBwZnNfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlcmUpCkBAIC01NjQsMTMgKzUyNiwxMyBAQAogCWxvZmZfdCByZXQ7CiAKIAlsbHNlZWsgPSBwcm9jX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfZm9wLT5sbHNlZWs7Ci0JaWYobGxzZWVrICE9IE5VTEwpeworCWlmIChsbHNlZWsgIT0gTlVMTCkgewogCQlyZXQgPSAoKmxsc2VlaykocHJvY19maWxlLCBvZmYsIHdoZXJlKTsKLQkJaWYocmV0IDwgMCkKLQkJCXJldHVybihyZXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuKGRlZmF1bHRfbGxzZWVrKGZpbGUsIG9mZiwgd2hlcmUpKTsKKwlyZXR1cm4gZGVmYXVsdF9sbHNlZWsoZmlsZSwgb2ZmLCB3aGVyZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhwcGZzX2ZpbGVfZm9wcyA9IHsKQEAgLTU5MiwxMSArNTU0LDExIEBACiB7CiAJc3RydWN0IGhwcGZzX2RpcmVudCAqZGlyZW50ID0gZDsKIAotCWlmKGZpbGVfcmVtb3ZlZChkaXJlbnQtPmRlbnRyeSwgbmFtZSkpCi0JCXJldHVybigwKTsKKwlpZiAoZmlsZV9yZW1vdmVkKGRpcmVudC0+ZGVudHJ5LCBuYW1lKSkKKwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4oKCpkaXJlbnQtPmZpbGxkaXIpKGRpcmVudC0+dmZzX2RpcmVudCwgbmFtZSwgc2l6ZSwgb2Zmc2V0LAotCQkJCSAgaW5vZGUsIHR5cGUpKTsKKwlyZXR1cm4gKCpkaXJlbnQtPmZpbGxkaXIpKGRpcmVudC0+dmZzX2RpcmVudCwgbmFtZSwgc2l6ZSwgb2Zmc2V0LAorCQkJCSAgaW5vZGUsIHR5cGUpOwogfQogCiBzdGF0aWMgaW50IGhwcGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCkBAIC02MDcsNyArNTY5LDggQEAKIAlzdHJ1Y3QgaHBwZnNfZGlyZW50IGRpcmVudCA9ICgoc3RydWN0IGhwcGZzX2RpcmVudCkKIAkJICAgICAgICAgICAgICAgICAgICAgIHsgLnZmc19kaXJlbnQgIAk9IGVudCwKIAkJCQkJLmZpbGxkaXIgCT0gZmlsbGRpciwKLQkJCQkJLmRlbnRyeSAgCT0gZmlsZS0+Zl9wYXRoLmRlbnRyeSB9ICk7CisJCQkJCS5kZW50cnkgIAk9IGZpbGUtPmZfcGF0aC5kZW50cnkKKwkJCQkgICAgICB9KTsKIAlpbnQgZXJyOwogCiAJcmVhZGRpciA9IHByb2NfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9mb3AtPnJlYWRkaXI7CkBAIC02MTYsMTIgKzU3OSwxMiBAQAogCWVyciA9ICgqcmVhZGRpcikocHJvY19maWxlLCAmZGlyZW50LCBocHBmc19maWxsZGlyKTsKIAlmaWxlLT5mX3BvcyA9IHByb2NfZmlsZS0+Zl9wb3M7CiAKLQlyZXR1cm4oZXJyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGhwcGZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKIHsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhwcGZzX2Rpcl9mb3BzID0gewpAQCAtNjM5LDcgKzYwMiw3IEBACiAJc2YtPmZfZmlsZXMgPSAwOwogCXNmLT5mX2ZmcmVlID0gMDsKIAlzZi0+Zl90eXBlID0gSFBQRlNfU1VQRVJfTUFHSUM7Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGlub2RlICpocHBmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtNjQ3LDEyICs2MTAsMTIgQEAKIAlzdHJ1Y3QgaHBwZnNfaW5vZGVfaW5mbyAqaGk7CiAKIAloaSA9IGttYWxsb2Moc2l6ZW9mKCpoaSksIEdGUF9LRVJORUwpOwotCWlmKGhpID09IE5VTEwpCi0JCXJldHVybihOVUxMKTsKKwlpZiAoIWhpKQorCQlyZXR1cm4gTlVMTDsKIAotCSpoaSA9ICgoc3RydWN0IGhwcGZzX2lub2RlX2luZm8pIHsgLnByb2NfZGVudHJ5CT0gTlVMTCB9KTsKKwloaS0+cHJvY19kZW50cnkgPSBOVUxMOwogCWlub2RlX2luaXRfb25jZSgmaGktPnZmc19pbm9kZSk7Ci0JcmV0dXJuKCZoaS0+dmZzX2lub2RlKTsKKwlyZXR1cm4gJmhpLT52ZnNfaW5vZGU7CiB9CiAKIHZvaWQgaHBwZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vKQpAQCAtNjY1LDIxICs2MjgsMzEgQEAKIAlrZnJlZShIUFBGU19JKGlub2RlKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGhwcGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCW1udHB1dChzYi0+c19mc19pbmZvKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhwcGZzX3Nib3BzID0gewogCS5hbGxvY19pbm9kZQk9IGhwcGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gaHBwZnNfZGVzdHJveV9pbm9kZSwKIAkuZGVsZXRlX2lub2RlCT0gaHBwZnNfZGVsZXRlX2lub2RlLAogCS5zdGF0ZnMJCT0gaHBwZnNfc3RhdGZzLAorCS5wdXRfc3VwZXIJPSBocHBmc19wdXRfc3VwZXIsCiB9OwogCi1zdGF0aWMgaW50IGhwcGZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKK3N0YXRpYyBpbnQgaHBwZnNfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICBpbnQgYnVmbGVuKQogewogCXN0cnVjdCBmaWxlICpwcm9jX2ZpbGU7CiAJc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnk7CisJc3RydWN0IHZmc21vdW50ICpwcm9jX21udDsKIAlpbnQgcmV0OwogCiAJcHJvY19kZW50cnkgPSBIUFBGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnByb2NfZGVudHJ5OwotCXByb2NfZmlsZSA9IGRlbnRyeV9vcGVuKGRnZXQocHJvY19kZW50cnkpLCBOVUxMLCBPX1JET05MWSk7CisJcHJvY19tbnQgPSBkZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKKworCXByb2NfZmlsZSA9IGRlbnRyeV9vcGVuKGRnZXQocHJvY19kZW50cnkpLCBtbnRnZXQocHJvY19tbnQpLCBPX1JET05MWSk7CiAJaWYgKElTX0VSUihwcm9jX2ZpbGUpKQogCQlyZXR1cm4gUFRSX0VSUihwcm9jX2ZpbGUpOwogCkBAIC02OTQsMTAgKzY2NywxMyBAQAogewogCXN0cnVjdCBmaWxlICpwcm9jX2ZpbGU7CiAJc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnk7CisJc3RydWN0IHZmc21vdW50ICpwcm9jX21udDsKIAl2b2lkICpyZXQ7CiAKIAlwcm9jX2RlbnRyeSA9IEhQUEZTX0koZGVudHJ5LT5kX2lub2RlKS0+cHJvY19kZW50cnk7Ci0JcHJvY19maWxlID0gZGVudHJ5X29wZW4oZGdldChwcm9jX2RlbnRyeSksIE5VTEwsIE9fUkRPTkxZKTsKKwlwcm9jX21udCA9IGRlbnRyeS0+ZF9zYi0+c19mc19pbmZvOworCisJcHJvY19maWxlID0gZGVudHJ5X29wZW4oZGdldChwcm9jX2RlbnRyeSksIG1udGdldChwcm9jX21udCksIE9fUkRPTkxZKTsKIAlpZiAoSVNfRVJSKHByb2NfZmlsZSkpCiAJCXJldHVybiBwcm9jX2ZpbGU7CiAKQEAgLTcxNyw3MCArNjkzLDcyIEBACiAJLmZvbGxvd19saW5rCT0gaHBwZnNfZm9sbG93X2xpbmssCiB9OwogCi1zdGF0aWMgaW50IGluaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIHN0cnVjdCBpbm9kZSAqZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlpZihTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSl7CisJc3RydWN0IGlub2RlICpwcm9jX2lubyA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKKworCWlmICghaW5vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmhwcGZzX2Rpcl9pb3BzOwogCQlpbm9kZS0+aV9mb3AgPSAmaHBwZnNfZGlyX2ZvcHM7Ci0JfQotCWVsc2UgaWYoU19JU0xOSyhkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpeworCX0gZWxzZSBpZiAoU19JU0xOSyhkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmaHBwZnNfbGlua19pb3BzOwogCQlpbm9kZS0+aV9mb3AgPSAmaHBwZnNfZmlsZV9mb3BzOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlpbm9kZS0+aV9vcCA9ICZocHBmc19maWxlX2lvcHM7CiAJCWlub2RlLT5pX2ZvcCA9ICZocHBmc19maWxlX2ZvcHM7CiAJfQogCiAJSFBQRlNfSShpbm9kZSktPnByb2NfZGVudHJ5ID0gZGVudHJ5OwogCi0JcmV0dXJuKDApOworCWlub2RlLT5pX3VpZCA9IHByb2NfaW5vLT5pX3VpZDsKKwlpbm9kZS0+aV9naWQgPSBwcm9jX2luby0+aV9naWQ7CisJaW5vZGUtPmlfYXRpbWUgPSBwcm9jX2luby0+aV9hdGltZTsKKwlpbm9kZS0+aV9tdGltZSA9IHByb2NfaW5vLT5pX210aW1lOworCWlub2RlLT5pX2N0aW1lID0gcHJvY19pbm8tPmlfY3RpbWU7CisJaW5vZGUtPmlfaW5vID0gcHJvY19pbm8tPmlfaW5vOworCWlub2RlLT5pX21vZGUgPSBwcm9jX2luby0+aV9tb2RlOworCWlub2RlLT5pX25saW5rID0gcHJvY19pbm8tPmlfbmxpbms7CisJaW5vZGUtPmlfc2l6ZSA9IHByb2NfaW5vLT5pX3NpemU7CisJaW5vZGUtPmlfYmxvY2tzID0gcHJvY19pbm8tPmlfYmxvY2tzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaHBwZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBpbm9kZSAqcm9vdF9pbm9kZTsKLQlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqcHJvY2ZzOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcHJvY19zYjsKLQlpbnQgZXJyOworCXN0cnVjdCB2ZnNtb3VudCAqcHJvY19tbnQ7CisJaW50IGVyciA9IC1FTk9FTlQ7CiAKLQllcnIgPSAtRU5PRU5UOwotCXByb2NmcyA9IGdldF9mc190eXBlKCJwcm9jIik7Ci0JaWYocHJvY2ZzID09IE5VTEwpCisJcHJvY19tbnQgPSBkb19rZXJuX21vdW50KCJwcm9jIiwgMCwgInByb2MiLCBOVUxMKTsKKwlpZiAoSVNfRVJSKHByb2NfbW50KSkKIAkJZ290byBvdXQ7CiAKLQlpZihsaXN0X2VtcHR5KCZwcm9jZnMtPmZzX3N1cGVycykpCi0JCWdvdG8gb3V0OwotCi0JcHJvY19zYiA9IGxpc3RfZW50cnkocHJvY2ZzLT5mc19zdXBlcnMubmV4dCwgc3RydWN0IHN1cGVyX2Jsb2NrLAotCQkJICAgICBzX2luc3RhbmNlcyk7Ci0KIAlzYi0+c19ibG9ja3NpemUgPSAxMDI0OwogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTA7CiAJc2ItPnNfbWFnaWMgPSBIUFBGU19TVVBFUl9NQUdJQzsKIAlzYi0+c19vcCA9ICZocHBmc19zYm9wczsKLQotCXJvb3RfaW5vZGUgPSBocHBmc19pZ2V0KHNiKTsKLQlpZiAoSVNfRVJSKHJvb3RfaW5vZGUpKSB7Ci0JCWVyciA9IFBUUl9FUlIocm9vdF9pbm9kZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IGluaXRfaW5vZGUocm9vdF9pbm9kZSwgcHJvY19zYi0+c19yb290KTsKLQlpZihlcnIpCi0JCWdvdG8gb3V0X3B1dDsKKwlzYi0+c19mc19pbmZvID0gcHJvY19tbnQ7CiAKIAllcnIgPSAtRU5PTUVNOworCXJvb3RfaW5vZGUgPSBnZXRfaW5vZGUoc2IsIHByb2NfbW50LT5tbnRfc2ItPnNfcm9vdCk7CisJaWYgKCFyb290X2lub2RlKQorCQlnb3RvIG91dF9tbnRwdXQ7CisKIAlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3RfaW5vZGUpOwotCWlmKHNiLT5zX3Jvb3QgPT0gTlVMTCkKLQkJZ290byBvdXRfcHV0OworCWlmICghc2ItPnNfcm9vdCkKKwkJZ290byBvdXRfaXB1dDsKIAotCWhwcGZzX3JlYWRfaW5vZGUocm9vdF9pbm9kZSk7CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4oMCk7Ci0KLSBvdXRfcHV0OgorIG91dF9pcHV0OgogCWlwdXQocm9vdF9pbm9kZSk7Cisgb3V0X21udHB1dDoKKwltbnRwdXQocHJvY19tbnQpOwogIG91dDoKIAlyZXR1cm4oZXJyKTsKIH0KQEAgLTgwMiw3ICs3ODAsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2hwcGZzKHZvaWQpCiB7Ci0JcmV0dXJuKHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmhwcGZzX3R5cGUpKTsKKwlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmaHBwZnNfdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2hwcGZzKHZvaWQpCkBAIC04MTMsMTQgKzc5MSwzIEBACiBtb2R1bGVfaW5pdChpbml0X2hwcGZzKQogbW9kdWxlX2V4aXQoZXhpdF9ocHBmcykKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggZWVlOTQ4Ny4uNjg0Njc4NSAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTk1NCw3ICs5NTQsNyBAQAogCQkJRk1PREVfV1JJVEUgfCBGTU9ERV9SRUFELAogCQkJJmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMpOwogCWlmICghZmlsZSkKLQkJZ290byBvdXRfaW5vZGU7CisJCWdvdG8gb3V0X2RlbnRyeTsgLyogaW5vZGUgaXMgYWxyZWFkeSBhdHRhY2hlZCAqLwogCiAJcmV0dXJuIGZpbGU7CiAKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDUzMjQ1ZmYuLjI3ZWUxYWYgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTE5OSw0MiArMTE5OSwzNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHRpbWVzcGVjIG5vdzsKIAorCWlmIChtbnRfd2FudF93cml0ZShtbnQpKQorCQlyZXR1cm47CiAJaWYgKGlub2RlLT5pX2ZsYWdzICYgU19OT0FUSU1FKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCWlmIChJU19OT0FUSU1FKGlub2RlKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAlpZiAoKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfTk9ESVJBVElNRSkgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAotCS8qCi0JICogV2UgbWF5IGhhdmUgYSBOVUxMIHZmc21vdW50IHdoZW4gY29taW5nIGZyb20gTkZTRAotCSAqLwotCWlmIChtbnQpIHsKLQkJaWYgKG1udC0+bW50X2ZsYWdzICYgTU5UX05PQVRJTUUpCi0JCQlyZXR1cm47Ci0JCWlmICgobW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9ESVJBVElNRSkgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJCXJldHVybjsKLQotCQlpZiAobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpIHsKLQkJCS8qCi0JCQkgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUKLQkJCSAqIHByZXZpb3VzIGF0aW1lIGlzIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yCi0JCQkgKiBtdGltZS4KLQkJCSAqLwotCQkJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLAotCQkJCQkJJmlub2RlLT5pX2F0aW1lKSA8IDAgJiYKLQkJCSAgICB0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9jdGltZSwKLQkJCQkJCSZpbm9kZS0+aV9hdGltZSkgPCAwKQotCQkJCXJldHVybjsKLQkJfQorCWlmIChtbnQtPm1udF9mbGFncyAmIE1OVF9OT0FUSU1FKQorCQlnb3RvIG91dDsKKwlpZiAoKG1udC0+bW50X2ZsYWdzICYgTU5UX05PRElSQVRJTUUpICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gb3V0OworCWlmIChtbnQtPm1udF9mbGFncyAmIE1OVF9SRUxBVElNRSkgeworCQkvKgorCQkgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUgcHJldmlvdXMKKwkJICogYXRpbWUgaXMgZWFybGllciB0aGFuIGVpdGhlciB0aGUgY3RpbWUgb3IgbXRpbWUuCisJCSAqLworCQlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfbXRpbWUsICZpbm9kZS0+aV9hdGltZSkgPCAwICYmCisJCSAgICB0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9jdGltZSwgJmlub2RlLT5pX2F0aW1lKSA8IDApCisJCQlnb3RvIG91dDsKIAl9CiAKIAlub3cgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwogCWlmICh0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfYXRpbWUsICZub3cpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJaW5vZGUtPmlfYXRpbWUgPSBub3c7CiAJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKK291dDoKKwltbnRfZHJvcF93cml0ZShtbnQpOwogfQogRVhQT1JUX1NZTUJPTCh0b3VjaF9hdGltZSk7CiAKQEAgLTEyNTUsMTAgKzEyNTAsMTMgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdGltZXNwZWMgbm93OwogCWludCBzeW5jX2l0ID0gMDsKKwlpbnQgZXJyOwogCiAJaWYgKElTX05PQ01USU1FKGlub2RlKSkKIAkJcmV0dXJuOwotCWlmIChJU19SRE9OTFkoaW5vZGUpKQorCisJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CisJaWYgKGVycikKIAkJcmV0dXJuOwogCiAJbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKQEAgLTEyNzksNiArMTI3Nyw3IEBACiAKIAlpZiAoc3luY19pdCkKIAkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKwltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIH0KIAogRVhQT1JUX1NZTUJPTChmaWxlX3VwZGF0ZV90aW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2NvbXByZXNzLmMgYi9mcy9pc29mcy9jb21wcmVzcy5jCmluZGV4IDM3ZGJkNjQuLmRlZmI5MzIgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2NvbXByZXNzLmMKKysrIGIvZnMvaXNvZnMvY29tcHJlc3MuYwpAQCAtNzIsNiArNzIsMTcgQEAKIAlvZmZzZXQgPSBpbmRleCAmIH56aXNvZnNfYmxvY2tfcGFnZV9tYXNrOwogCWJsb2NraW5kZXggPSBvZmZzZXQgPj4gemlzb2ZzX2Jsb2NrX3BhZ2Vfc2hpZnQ7CiAJbWF4cGFnZSA9IChpbm9kZS0+aV9zaXplICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKworCS8qCisJICogSWYgdGhpcyBwYWdlIGlzIHdob2xseSBvdXRzaWRlIGlfc2l6ZSB3ZSBqdXN0IHJldHVybiB6ZXJvOworCSAqIGRvX2dlbmVyaWNfZmlsZV9yZWFkKCkgd2lsbCBoYW5kbGUgdGhpcyBmb3IgdXMKKwkgKi8KKwlpZiAocGFnZS0+aW5kZXggPj0gbWF4cGFnZSkgeworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKIAltYXhwYWdlID0gbWluKHppc29mc19ibG9ja19wYWdlcywgbWF4cGFnZS1vZmZzZXQpOwogCiAJZm9yICggaSA9IDAgOyBpIDwgbWF4cGFnZSA7IGkrKywgb2Zmc2V0KysgKSB7CmRpZmYgLS1naXQgYS9mcy9qYmQvam91cm5hbC5jIGIvZnMvamJkL2pvdXJuYWwuYwppbmRleCAzOTQzYTg5Li4wZTA4MWQ1IDEwMDY0NAotLS0gYS9mcy9qYmQvam91cm5hbC5jCisrKyBiL2ZzL2piZC9qb3VybmFsLmMKQEAgLTY5NywxMyArNjk3LDE0IEBACiAgKi8KIAogLyoqCi0gKiAgam91cm5hbF90ICogam91cm5hbF9pbml0X2RldigpIC0gY3JlYXRlcyBhbiBpbml0aWFsaXNlcyBhIGpvdXJuYWwgc3RydWN0dXJlCisgKiAgam91cm5hbF90ICogam91cm5hbF9pbml0X2RldigpIC0gY3JlYXRlcyBhbmQgaW5pdGlhbGlzZXMgYSBqb3VybmFsIHN0cnVjdHVyZQogICogIEBiZGV2OiBCbG9jayBkZXZpY2Ugb24gd2hpY2ggdG8gY3JlYXRlIHRoZSBqb3VybmFsCiAgKiAgQGZzX2RldjogRGV2aWNlIHdoaWNoIGhvbGQgam91cm5hbGxlZCBmaWxlc3lzdGVtIGZvciB0aGlzIGpvdXJuYWwuCiAgKiAgQHN0YXJ0OiBCbG9jayBuciBTdGFydCBvZiBqb3VybmFsLgogICogIEBsZW46ICBMZW5ndGggb2YgdGhlIGpvdXJuYWwgaW4gYmxvY2tzLgogICogIEBibG9ja3NpemU6IGJsb2Nrc2l6ZSBvZiBqb3VybmFsbGluZyBkZXZpY2UKLSAqICBAcmV0dXJuczogYSBuZXdseSBjcmVhdGVkIGpvdXJuYWxfdCAqCisgKgorICogIFJldHVybnM6IGEgbmV3bHkgY3JlYXRlZCBqb3VybmFsX3QgKgogICoKICAqICBqb3VybmFsX2luaXRfZGV2IGNyZWF0ZXMgYSBqb3VybmFsIHdoaWNoIG1hcHMgYSBmaXhlZCBjb250aWd1b3VzCiAgKiAgcmFuZ2Ugb2YgYmxvY2tzIG9uIGFuIGFyYml0cmFyeSBibG9jayBkZXZpY2UuCkBAIC0xNjE5LDE0ICsxNjIwLDE0IEBACiB7CiAJaW50IHJldHZhbDsKIAotCUpfQVNTRVJUKGpvdXJuYWxfaGVhZF9jYWNoZSA9PSAwKTsKKwlKX0FTU0VSVChqb3VybmFsX2hlYWRfY2FjaGUgPT0gTlVMTCk7CiAJam91cm5hbF9oZWFkX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImpvdXJuYWxfaGVhZCIsCiAJCQkJc2l6ZW9mKHN0cnVjdCBqb3VybmFsX2hlYWQpLAogCQkJCTAsCQkvKiBvZmZzZXQgKi8KIAkJCQlTTEFCX1RFTVBPUkFSWSwJLyogZmxhZ3MgKi8KIAkJCQlOVUxMKTsJCS8qIGN0b3IgKi8KIAlyZXR2YWwgPSAwOwotCWlmIChqb3VybmFsX2hlYWRfY2FjaGUgPT0gMCkgeworCWlmICgham91cm5hbF9oZWFkX2NhY2hlKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCXByaW50ayhLRVJOX0VNRVJHICJKQkQ6IG5vIG1lbW9yeSBmb3Igam91cm5hbF9oZWFkIGNhY2hlXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9qYmQvcmVjb3ZlcnkuYyBiL2ZzL2piZC9yZWNvdmVyeS5jCmluZGV4IDJiOGVkZjQuLjQzYmM1ZTUgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9yZWNvdmVyeS5jCisrKyBiL2ZzL2piZC9yZWNvdmVyeS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJCQkJbWVtY3B5KG5iaC0+Yl9kYXRhLCBvYmgtPmJfZGF0YSwKIAkJCQkJCQlqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CiAJCQkJCWlmIChmbGFncyAmIEpGU19GTEFHX0VTQ0FQRSkgewotCQkJCQkJKigoX19iZTMyICopYmgtPmJfZGF0YSkgPQorCQkJCQkJKigoX19iZTMyICopbmJoLT5iX2RhdGEpID0KIAkJCQkJCWNwdV90b19iZTMyKEpGU19NQUdJQ19OVU1CRVIpOwogCQkJCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL2piZC9yZXZva2UuYyBiL2ZzL2piZC9yZXZva2UuYwppbmRleCBhZDJlYWNmLi5kNWY4ZWVlIDEwMDY0NAotLS0gYS9mcy9qYmQvcmV2b2tlLmMKKysrIGIvZnMvamJkL3Jldm9rZS5jCkBAIC0xNzMsMTMgKzE3MywxMyBAQAogCQkJCQkgICAwLAogCQkJCQkgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9URU1QT1JBUlksCiAJCQkJCSAgIE5VTEwpOwotCWlmIChyZXZva2VfcmVjb3JkX2NhY2hlID09IDApCisJaWYgKCFyZXZva2VfcmVjb3JkX2NhY2hlKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldm9rZV90YWJsZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZXZva2VfdGFibGUiLAogCQkJCQkgICBzaXplb2Yoc3RydWN0IGpiZF9yZXZva2VfdGFibGVfcyksCiAJCQkJCSAgIDAsIFNMQUJfVEVNUE9SQVJZLCBOVUxMKTsKLQlpZiAocmV2b2tlX3RhYmxlX2NhY2hlID09IDApIHsKKwlpZiAoIXJldm9rZV90YWJsZV9jYWNoZSkgewogCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocmV2b2tlX3JlY29yZF9jYWNoZSk7CiAJCXJldm9rZV9yZWNvcmRfY2FjaGUgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggMDM4ZWQ3NC4uMmM5ZThmNSAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTM2OSw3ICszNjksNyBAQAogCiAKIC8qKgotICogaW50IGpvdXJuYWxfcmVzdGFydCgpIC0gcmVzdGFydCBhIGhhbmRsZSAuCisgKiBpbnQgam91cm5hbF9yZXN0YXJ0KCkgLSByZXN0YXJ0IGEgaGFuZGxlLgogICogQGhhbmRsZTogIGhhbmRsZSB0byByZXN0YXJ0CiAgKiBAbmJsb2NrczogbnIgY3JlZGl0cyByZXF1ZXN0ZWQKICAqCkBAIC04NDQsOCArODQ0LDcgQEAKIH0KIAogLyoqCi0gKiBpbnQgam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoKSAtICBOb3RpZnkgaW50ZW50IHRvIG1vZGlmeSBtZXRhZGF0YSB3aXRoCi0gKiAgICAgbm9uLXJld2luZGFibGUgY29uc2VxdWVuY2VzCisgKiBpbnQgam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoKSAtIE5vdGlmeSBpbnRlbnQgdG8gbW9kaWZ5IG1ldGFkYXRhIHdpdGggbm9uLXJld2luZGFibGUgY29uc2VxdWVuY2VzCiAgKiBAaGFuZGxlOiB0cmFuc2FjdGlvbgogICogQGJoOiBidWZmZXIgdG8gdW5kbwogICogQGNyZWRpdHM6IHN0b3JlIHRoZSBudW1iZXIgb2YgdGFrZW4gY3JlZGl0cyBoZXJlIChpZiBub3QgTlVMTCkKQEAgLTkyMSwxMiArOTIwLDE0IEBACiB9CiAKIC8qKgotICogaW50IGpvdXJuYWxfZGlydHlfZGF0YSgpIC0gIG1hcmsgYSBidWZmZXIgYXMgY29udGFpbmluZyBkaXJ0eSBkYXRhIHdoaWNoCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gYmUgZmx1c2hlZCBiZWZvcmUgd2UgY2FuIGNvbW1pdCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHRyYW5zYWN0aW9uLgorICogaW50IGpvdXJuYWxfZGlydHlfZGF0YSgpIC0gbWFyayBhIGJ1ZmZlciBhcyBjb250YWluaW5nIGRpcnR5IGRhdGEgdG8gYmUgZmx1c2hlZAogICogQGhhbmRsZTogdHJhbnNhY3Rpb24KICAqIEBiaDogYnVmZmVyaGVhZCB0byBtYXJrCiAgKgorICogRGVzY3JpcHRpb246CisgKiBNYXJrIGEgYnVmZmVyIGFzIGNvbnRhaW5pbmcgZGlydHkgZGF0YSB3aGljaCBuZWVkcyB0byBiZSBmbHVzaGVkIGJlZm9yZQorICogd2UgY2FuIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KKyAqCiAgKiBUaGUgYnVmZmVyIGlzIHBsYWNlZCBvbiB0aGUgdHJhbnNhY3Rpb24ncyBkYXRhIGxpc3QgYW5kIGlzIG1hcmtlZCBhcwogICogYmVsb25naW5nIHRvIHRoZSB0cmFuc2FjdGlvbi4KICAqCkBAIC0xMDk4LDExICsxMDk5LDExIEBACiB9CiAKIC8qKgotICogaW50IGpvdXJuYWxfZGlydHlfbWV0YWRhdGEoKSAtICBtYXJrIGEgYnVmZmVyIGFzIGNvbnRhaW5pbmcgZGlydHkgbWV0YWRhdGEKKyAqIGludCBqb3VybmFsX2RpcnR5X21ldGFkYXRhKCkgLSBtYXJrIGEgYnVmZmVyIGFzIGNvbnRhaW5pbmcgZGlydHkgbWV0YWRhdGEKICAqIEBoYW5kbGU6IHRyYW5zYWN0aW9uIHRvIGFkZCBidWZmZXIgdG8uCiAgKiBAYmg6IGJ1ZmZlciB0byBtYXJrCiAgKgotICogbWFyayBkaXJ0eSBtZXRhZGF0YSB3aGljaCBuZWVkcyB0byBiZSBqb3VybmFsZWQgYXMgcGFydCBvZiB0aGUgY3VycmVudAorICogTWFyayBkaXJ0eSBtZXRhZGF0YSB3aGljaCBuZWVkcyB0byBiZSBqb3VybmFsZWQgYXMgcGFydCBvZiB0aGUgY3VycmVudAogICogdHJhbnNhY3Rpb24uCiAgKgogICogVGhlIGJ1ZmZlciBpcyBwbGFjZWQgb24gdGhlIHRyYW5zYWN0aW9uJ3MgbWV0YWRhdGEgbGlzdCBhbmQgaXMgbWFya2VkCkBAIC0xNDI1LDcgKzE0MjYsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qKmludCBqb3VybmFsX2ZvcmNlX2NvbW1pdCgpIC0gZm9yY2UgYW55IHVuY29tbWl0dGVkIHRyYW5zYWN0aW9ucworLyoqCisgKiBpbnQgam91cm5hbF9mb3JjZV9jb21taXQoKSAtIGZvcmNlIGFueSB1bmNvbW1pdHRlZCB0cmFuc2FjdGlvbnMKICAqIEBqb3VybmFsOiBqb3VybmFsIHRvIGZvcmNlCiAgKgogICogRm9yIHN5bmNocm9ub3VzIG9wZXJhdGlvbnM6IGZvcmNlIGFueSB1bmNvbW1pdHRlZCB0cmFuc2FjdGlvbnMKQEAgLTE5MDIsMTMgKzE5MDQsMTIgQEAKIH0KIAogLyoqCi0gKiB2b2lkIGpvdXJuYWxfaW52YWxpZGF0ZXBhZ2UoKQotICogQGpvdXJuYWw6IGpvdXJuYWwgdG8gdXNlIGZvciBmbHVzaC4uLgorICogdm9pZCBqb3VybmFsX2ludmFsaWRhdGVwYWdlKCkgLSBpbnZhbGlkYXRlIGEgam91cm5hbCBwYWdlCisgKiBAam91cm5hbDogam91cm5hbCB0byB1c2UgZm9yIGZsdXNoCiAgKiBAcGFnZTogICAgcGFnZSB0byBmbHVzaAogICogQG9mZnNldDogIGxlbmd0aCBvZiBwYWdlIHRvIGludmFsaWRhdGUuCiAgKgogICogUmVhcCBwYWdlIGJ1ZmZlcnMgY29udGFpbmluZyBkYXRhIGFmdGVyIG9mZnNldCBpbiBwYWdlLgotICoKICAqLwogdm9pZCBqb3VybmFsX2ludmFsaWRhdGVwYWdlKGpvdXJuYWxfdCAqam91cm5hbCwKIAkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCmRpZmYgLS1naXQgYS9mcy9qYmQyL2pvdXJuYWwuYyBiL2ZzL2piZDIvam91cm5hbC5jCmluZGV4IDk2YmE4NDYuLjk1NGNmZjAgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAlpZiAoSVNfRVJSKHQpKQogCQlyZXR1cm4gUFRSX0VSUih0KTsKIAotCXdhaXRfZXZlbnQoam91cm5hbC0+al93YWl0X2RvbmVfY29tbWl0LCBqb3VybmFsLT5qX3Rhc2sgIT0gMCk7CisJd2FpdF9ldmVudChqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQsIGpvdXJuYWwtPmpfdGFzayAhPSBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMxLDcgKzIzMSw3IEBACiAJd2hpbGUgKGpvdXJuYWwtPmpfdGFzaykgewogCQl3YWtlX3VwKCZqb3VybmFsLT5qX3dhaXRfY29tbWl0KTsKIAkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7Ci0JCXdhaXRfZXZlbnQoam91cm5hbC0+al93YWl0X2RvbmVfY29tbWl0LCBqb3VybmFsLT5qX3Rhc2sgPT0gMCk7CisJCXdhaXRfZXZlbnQoam91cm5hbC0+al93YWl0X2RvbmVfY29tbWl0LCBqb3VybmFsLT5qX3Rhc2sgPT0gTlVMTCk7CiAJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CkBAIC0xOTY5LDE0ICsxOTY5LDE0IEBACiB7CiAJaW50IHJldHZhbDsKIAotCUpfQVNTRVJUKGpiZDJfam91cm5hbF9oZWFkX2NhY2hlID09IDApOworCUpfQVNTRVJUKGpiZDJfam91cm5hbF9oZWFkX2NhY2hlID09IE5VTEwpOwogCWpiZDJfam91cm5hbF9oZWFkX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImpiZDJfam91cm5hbF9oZWFkIiwKIAkJCQlzaXplb2Yoc3RydWN0IGpvdXJuYWxfaGVhZCksCiAJCQkJMCwJCS8qIG9mZnNldCAqLwogCQkJCVNMQUJfVEVNUE9SQVJZLAkvKiBmbGFncyAqLwogCQkJCU5VTEwpOwkJLyogY3RvciAqLwogCXJldHZhbCA9IDA7Ci0JaWYgKGpiZDJfam91cm5hbF9oZWFkX2NhY2hlID09IDApIHsKKwlpZiAoIWpiZDJfam91cm5hbF9oZWFkX2NhY2hlKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCXByaW50ayhLRVJOX0VNRVJHICJKQkQ6IG5vIG1lbW9yeSBmb3Igam91cm5hbF9oZWFkIGNhY2hlXG4iKTsKIAl9CkBAIC0yMDAyLDE0ICsyMDAyLDE0IEBACiAJYXRvbWljX2luYygmbnJfam91cm5hbF9oZWFkcyk7CiAjZW5kaWYKIAlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jKGpiZDJfam91cm5hbF9oZWFkX2NhY2hlLCBHRlBfTk9GUyk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKCFyZXQpIHsKIAkJamJkX2RlYnVnKDEsICJvdXQgb2YgbWVtb3J5IGZvciBqb3VybmFsX2hlYWRcbiIpOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X3dhcm5pbmcgKyA1KkhaKSkgewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJFTk9NRU0gaW4gJXMsIHJldHJ5aW5nLlxuIiwKIAkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwogCQkJbGFzdF93YXJuaW5nID0gamlmZmllczsKIAkJfQotCQl3aGlsZSAocmV0ID09IDApIHsKKwkJd2hpbGUgKCFyZXQpIHsKIAkJCXlpZWxkKCk7CiAJCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jKGpiZDJfam91cm5hbF9oZWFkX2NhY2hlLCBHRlBfTk9GUyk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2piZDIvcmVjb3ZlcnkuYyBiL2ZzL2piZDIvcmVjb3ZlcnkuYwppbmRleCAxNDY0MTEzLi41ZDA0MDVhIDEwMDY0NAotLS0gYS9mcy9qYmQyL3JlY292ZXJ5LmMKKysrIGIvZnMvamJkMi9yZWNvdmVyeS5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAkJCQkJbWVtY3B5KG5iaC0+Yl9kYXRhLCBvYmgtPmJfZGF0YSwKIAkJCQkJCQlqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CiAJCQkJCWlmIChmbGFncyAmIEpCRDJfRkxBR19FU0NBUEUpIHsKLQkJCQkJCSooKF9fYmUzMiAqKWJoLT5iX2RhdGEpID0KKwkJCQkJCSooKF9fYmUzMiAqKW5iaC0+Yl9kYXRhKSA9CiAJCQkJCQljcHVfdG9fYmUzMihKQkQyX01BR0lDX05VTUJFUik7CiAJCQkJCX0KIApkaWZmIC0tZ2l0IGEvZnMvamJkMi9yZXZva2UuYyBiL2ZzL2piZDIvcmV2b2tlLmMKaW5kZXggZGYzNmY0Mi4uMmUxNDUzYSAxMDA2NDQKLS0tIGEvZnMvamJkMi9yZXZva2UuYworKysgYi9mcy9qYmQyL3Jldm9rZS5jCkBAIC0xNzQsMTMgKzE3NCwxMyBAQAogCQkJCQkgICAwLAogCQkJCQkgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9URU1QT1JBUlksCiAJCQkJCSAgIE5VTEwpOwotCWlmIChqYmQyX3Jldm9rZV9yZWNvcmRfY2FjaGUgPT0gMCkKKwlpZiAoIWpiZDJfcmV2b2tlX3JlY29yZF9jYWNoZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlqYmQyX3Jldm9rZV90YWJsZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJqYmQyX3Jldm9rZV90YWJsZSIsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3QgamJkMl9yZXZva2VfdGFibGVfcyksCiAJCQkJCSAgIDAsIFNMQUJfVEVNUE9SQVJZLCBOVUxMKTsKLQlpZiAoamJkMl9yZXZva2VfdGFibGVfY2FjaGUgPT0gMCkgeworCWlmICghamJkMl9yZXZva2VfdGFibGVfY2FjaGUpIHsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGpiZDJfcmV2b2tlX3JlY29yZF9jYWNoZSk7CiAJCWpiZDJfcmV2b2tlX3JlY29yZF9jYWNoZSA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZmlsZS5jIGIvZnMvamZmczIvZmlsZS5jCmluZGV4IGY5YzVkZDZmLi5kY2MyNzM0IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9maWxlLmMKKysrIGIvZnMvamZmczIvZmlsZS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOwogCXBnb2ZmX3QgaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQl1aW50MzJfdCBwYWdlb2ZzID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXVpbnQzMl90IHBhZ2VvZnMgPSBpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUOwogCWludCByZXQgPSAwOwogCiAJcGcgPSBfX2dyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9qZmZzMl9mc19pLmggYi9mcy9qZmZzMi9qZmZzMl9mc19pLmgKaW5kZXggMGI3OGZkYy4uYTg0MWY0OSAxMDA2NDQKLS0tIGEvZnMvamZmczIvamZmczJfZnNfaS5oCisrKyBiL2ZzL2pmZnMyL2pmZnMyX2ZzX2kuaApAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAKIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvIHsKIAkvKiBXZSBuZWVkIGFuIGludGVybmFsIG11dGV4IHNpbWlsYXIgdG8gaW5vZGUtPmlfbXV0ZXguCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9qZmZzMl9mc19zYi5oIGIvZnMvamZmczIvamZmczJfZnNfc2IuaAppbmRleCAzYTIxOTdmLi4xOGZjYTJiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9qZmZzMl9mc19zYi5oCisrKyBiL2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEvZnMvamZzL2lvY3RsLmMgYi9mcy9qZnMvaW9jdGwuYwppbmRleCBhMWY4ZTM3Li5hZmUyMjJiIDEwMDY0NAotLS0gYS9mcy9qZnMvaW9jdGwuYworKysgYi9mcy9qZnMvaW9jdGwuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KQEAgLTY1LDIzICs2NiwzMCBAQAogCQlyZXR1cm4gcHV0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZyk7CiAJY2FzZSBKRlNfSU9DX1NFVEZMQUdTOiB7CiAJCXVuc2lnbmVkIGludCBvbGRmbGFnczsKKwkJaW50IGVycjsKIAotCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJCXJldHVybiAtRVJPRlM7CisJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCi0JCQlyZXR1cm4gLUVBQ0NFUzsKLQotCQlpZiAoZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKSB7CisJCQllcnIgPSAtRUFDQ0VTOworCQkJZ290byBzZXRmbGFnc19vdXQ7CisJCX0KKwkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBzZXRmbGFnc19vdXQ7CisJCX0KIAogCQlmbGFncyA9IGpmc19tYXBfZXh0MihmbGFncywgMSk7CiAJCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCWZsYWdzICY9IH5KRlNfRElSU1lOQ19GTDsKIAogCQkvKiBJcyBpdCBxdW90YSBmaWxlPyBEbyBub3QgYWxsb3cgdXNlciB0byBtZXNzIHdpdGggaXQgKi8KLQkJaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQkJcmV0dXJuIC1FUEVSTTsKKwkJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CisJCQllcnIgPSAtRVBFUk07CisJCQlnb3RvIHNldGZsYWdzX291dDsKKwkJfQogCiAJCS8qIExvY2sgYWdhaW5zdCBvdGhlciBwYXJhbGxlbCBjaGFuZ2VzIG9mIGZsYWdzICovCiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKQEAgLTk4LDcgKzEwNiw4IEBACiAJCQkoSkZTX0FQUEVORF9GTCB8IEpGU19JTU1VVEFCTEVfRkwpKSkgewogCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQkJcmV0dXJuIC1FUEVSTTsKKwkJCQllcnIgPSAtRVBFUk07CisJCQkJZ290byBzZXRmbGFnc19vdXQ7CiAJCQl9CiAJCX0KIApAQCAtMTEwLDcgKzExOSw5IEBACiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQlyZXR1cm4gMDsKK3NldGZsYWdzX291dDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCXJldHVybiBlcnI7CiAJfQogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kbWFwLmMgYi9mcy9qZnMvamZzX2RtYXAuYwppbmRleCBlMTk4NTA2Li4yYmM3ZDhhIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2RtYXAuYworKysgYi9mcy9qZnMvamZzX2RtYXAuYwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAKIAl9CiAKIAkvKiB1cGRhdGUgdGhlIGZyZWUgY291bnQgZm9yIHRoaXMgZG1hcCAqLwotCWRwLT5uZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGRwLT5uZnJlZSkgLSBuYmxvY2tzKTsKKwlsZTMyX2FkZF9jcHUoJmRwLT5uZnJlZSwgLW5ibG9ja3MpOwogCiAJQk1BUF9MT0NLKGJtcCk7CiAKQEAgLTIzMTYsNyArMjMxNiw3IEBACiAKIAkvKiB1cGRhdGUgdGhlIGZyZWUgY291bnQgZm9yIHRoaXMgZG1hcC4KIAkgKi8KLQlkcC0+bmZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkcC0+bmZyZWUpICsgbmJsb2Nrcyk7CisJbGUzMl9hZGRfY3B1KCZkcC0+bmZyZWUsIG5ibG9ja3MpOwogCiAJQk1BUF9MT0NLKGJtcCk7CiAKQEAgLTMyMjYsNyArMzIyNiw3IEBACiAJfQogCiAJLyogdXBkYXRlIHRoZSBmcmVlIGNvdW50IGZvciB0aGlzIGRtYXAgKi8KLQlkcC0+bmZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkcC0+bmZyZWUpIC0gbmJsb2Nrcyk7CisJbGUzMl9hZGRfY3B1KCZkcC0+bmZyZWUsIC1uYmxvY2tzKTsKIAogCS8qIHJlY29uc3RydWN0IHN1bW1hcnkgdHJlZSAqLwogCWRiSW5pdERtYXBUcmVlKGRwKTsKQEAgLTM2NjAsOSArMzY2MCw4IEBACiAJCQlnb3RvIGluaXRUcmVlOwogCQl9CiAJfSBlbHNlIHsKLQkJZHAtPm5ibG9ja3MgPQotCQkgICAgY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZHAtPm5ibG9ja3MpICsgbmJsb2Nrcyk7Ci0JCWRwLT5uZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGRwLT5uZnJlZSkgKyBuYmxvY2tzKTsKKwkJbGUzMl9hZGRfY3B1KCZkcC0+bmJsb2NrcywgbmJsb2Nrcyk7CisJCWxlMzJfYWRkX2NwdSgmZHAtPm5mcmVlLCBuYmxvY2tzKTsKIAl9CiAKIAkvKiB3b3JkIG51bWJlciBjb250YWluaW5nIHN0YXJ0IGJsb2NrIG51bWJlciAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kbWFwLmggYi9mcy9qZnMvamZzX2RtYXAuaAppbmRleCAxMWU2ZDQ3Li4xYTZlYjQxIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2RtYXAuaAorKysgYi9mcy9qZnMvamZzX2RtYXAuaApAQCAtNjEsNyArNjEsNyBAQAogICogZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIGZyZWUgc3RyaW5nIGZvciBmb3VyIChsb3dlciBsZXZlbCkgbm9kZXMKICAqIG9mIHRoZSB0cmVlLgogICovCi1zdGF0aWMgX19pbmxpbmUgc2lnbmVkIGNoYXIgVFJFRU1BWChzaWduZWQgY2hhciAqY3ApCitzdGF0aWMgaW5saW5lIHNpZ25lZCBjaGFyIFRSRUVNQVgoc2lnbmVkIGNoYXIgKmNwKQogewogCXNpZ25lZCBjaGFyIHRtcDEsIHRtcDI7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW1hcC5jIGIvZnMvamZzL2pmc19pbWFwLmMKaW5kZXggOWJmMjlmNy4uNzM0ZWM5MSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbWFwLmMKKysrIGIvZnMvamZzL2pmc19pbWFwLmMKQEAgLTEwMTksOCArMTAxOSw3IEBACiAJCS8qIHVwZGF0ZSB0aGUgZnJlZSBpbm9kZSBjb3VudHMgYXQgdGhlIGlhZywgYWcgYW5kCiAJCSAqIG1hcCBsZXZlbC4KIAkJICovCi0JCWlhZ3AtPm5mcmVlaW5vcyA9Ci0JCSAgICBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShpYWdwLT5uZnJlZWlub3MpICsgMSk7CisJCWxlMzJfYWRkX2NwdSgmaWFncC0+bmZyZWVpbm9zLCAxKTsKIAkJaW1hcC0+aW1fYWdjdGxbYWdub10ubnVtZnJlZSArPSAxOwogCQlhdG9taWNfaW5jKCZpbWFwLT5pbV9udW1mcmVlKTsKIApAQCAtMTIxOSw5ICsxMjE4LDggQEAKIAkvKiB1cGRhdGUgdGhlIG51bWJlciBvZiBmcmVlIGlub2RlcyBhbmQgbnVtYmVyIG9mIGZyZWUgZXh0ZW50cwogCSAqIGZvciB0aGUgaWFnLgogCSAqLwotCWlhZ3AtPm5mcmVlaW5vcyA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGlhZ3AtPm5mcmVlaW5vcykgLQotCQkJCSAgICAgIChJTk9TUEVSRVhUIC0gMSkpOwotCWlhZ3AtPm5mcmVlZXh0cyA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGlhZ3AtPm5mcmVlZXh0cykgKyAxKTsKKwlsZTMyX2FkZF9jcHUoJmlhZ3AtPm5mcmVlaW5vcywgLShJTk9TUEVSRVhUIC0gMSkpOworCWxlMzJfYWRkX2NwdSgmaWFncC0+bmZyZWVleHRzLCAxKTsKIAogCS8qIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGFuZCBiYWNrZWQgaW5vZGVzCiAJICogYXQgdGhlIGFnIGFuZCBpbm9kZSBtYXAgbGV2ZWwuCkBAIC0yMTI0LDcgKzIxMjIsNyBAQAogCS8qIHVwZGF0ZSB0aGUgZnJlZSBpbm9kZSBjb3VudCBhdCB0aGUgaWFnLCBhZywgaW5vZGUKIAkgKiBtYXAgbGV2ZWxzLgogCSAqLwotCWlhZ3AtPm5mcmVlaW5vcyA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGlhZ3AtPm5mcmVlaW5vcykgLSAxKTsKKwlsZTMyX2FkZF9jcHUoJmlhZ3AtPm5mcmVlaW5vcywgLTEpOwogCWltYXAtPmltX2FnY3RsW2Fnbm9dLm51bWZyZWUgLT0gMTsKIAlhdG9taWNfZGVjKCZpbWFwLT5pbV9udW1mcmVlKTsKIApAQCAtMjM3OCw5ICsyMzc2LDggQEAKIAkvKiB1cGRhdGUgdGhlIGZyZWUgaW5vZGUgYW5kIGZyZWUgZXh0ZW50IGNvdW50cyBmb3IgdGhlCiAJICogaWFnLgogCSAqLwotCWlhZ3AtPm5mcmVlaW5vcyA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGlhZ3AtPm5mcmVlaW5vcykgKwotCQkJCSAgICAgIChJTk9TUEVSRVhUIC0gMSkpOwotCWlhZ3AtPm5mcmVlZXh0cyA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGlhZ3AtPm5mcmVlZXh0cykgLSAxKTsKKwlsZTMyX2FkZF9jcHUoJmlhZ3AtPm5mcmVlaW5vcywgKElOT1NQRVJFWFQgLSAxKSk7CisJbGUzMl9hZGRfY3B1KCZpYWdwLT5uZnJlZWV4dHMsIC0xKTsKIAogCS8qIHVwZGF0ZSB0aGUgZnJlZSBhbmQgYmFja2VkIGlub2RlIGNvdW50cyBmb3IgdGhlIGFnLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc194dHJlZS5jIGIvZnMvamZzL2pmc194dHJlZS5jCmluZGV4IGEwMDBhYWEuLjVhNjFlYmYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfeHRyZWUuYworKysgYi9mcy9qZnMvamZzX3h0cmVlLmMKQEAgLTkwNSw4ICs5MDUsNyBAQAogCVhUX1BVVEVOVFJZKHhhZCwgeGZsYWcsIHhvZmYsIHhsZW4sIHhhZGRyKTsKIAogCS8qIGFkdmFuY2UgbmV4dCBhdmFpbGFibGUgZW50cnkgaW5kZXggKi8KLQlwLT5oZWFkZXIubmV4dGluZGV4ID0KLQkgICAgY3B1X3RvX2xlMTYobGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkgKyAxKTsKKwlsZTE2X2FkZF9jcHUoJnAtPmhlYWRlci5uZXh0aW5kZXgsIDEpOwogCiAJLyogRG9uJ3QgbG9nIGl0IGlmIHRoZXJlIGFyZSBubyBsaW5rcyB0byB0aGUgZmlsZSAqLwogCWlmICghdGVzdF9jZmxhZyhDT01NSVRfTm9saW5rLCBpcCkpIHsKQEAgLTk5Nyw4ICs5OTYsNyBAQAogCQkJICAgIHNwbGl0LT5hZGRyKTsKIAogCQkvKiBhZHZhbmNlIG5leHQgYXZhaWxhYmxlIGVudHJ5IGluZGV4ICovCi0JCXNwLT5oZWFkZXIubmV4dGluZGV4ID0KLQkJICAgIGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHNwLT5oZWFkZXIubmV4dGluZGV4KSArIDEpOworCQlsZTE2X2FkZF9jcHUoJnNwLT5oZWFkZXIubmV4dGluZGV4LCAxKTsKIAogCQkvKiBEb24ndCBsb2cgaXQgaWYgdGhlcmUgYXJlIG5vIGxpbmtzIHRvIHRoZSBmaWxlICovCiAJCWlmICghdGVzdF9jZmxhZyhDT01NSVRfTm9saW5rLCBpcCkpIHsKQEAgLTExNjcsOSArMTE2NSw3IEBACiAJCQkJICAgIEpGU19TQkkoaXAtPmlfc2IpLT5uYnBlcnBhZ2UsIHJjYm4pOwogCiAJCQkvKiBhZHZhbmNlIG5leHQgYXZhaWxhYmxlIGVudHJ5IGluZGV4LiAqLwotCQkJc3AtPmhlYWRlci5uZXh0aW5kZXggPQotCQkJICAgIGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHNwLT5oZWFkZXIubmV4dGluZGV4KSArCi0JCQkJCTEpOworCQkJbGUxNl9hZGRfY3B1KCZzcC0+aGVhZGVyLm5leHRpbmRleCwgMSk7CiAKIAkJCS8qIERvbid0IGxvZyBpdCBpZiB0aGVyZSBhcmUgbm8gbGlua3MgdG8gdGhlIGZpbGUgKi8KIAkJCWlmICghdGVzdF9jZmxhZyhDT01NSVRfTm9saW5rLCBpcCkpIHsKQEAgLTE3MzgsOCArMTczNCw3IEBACiAJCVhUX1BVVEVOVFJZKHhhZCwgWEFEX05FVywgeG9mZiwgbGVuLCB4YWRkcik7CiAKIAkJLyogYWR2YW5jZSBuZXh0IGF2YWlsYWJsZSBlbnRyeSBpbmRleCAqLwotCQlwLT5oZWFkZXIubmV4dGluZGV4ID0KLQkJICAgIGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpICsgMSk7CisJCWxlMTZfYWRkX2NwdSgmcC0+aGVhZGVyLm5leHRpbmRleCwgMSk7CiAJfQogCiAJLyogZ2V0IGJhY2sgb2xkIGVudHJ5ICovCkBAIC0xOTA1LDggKzE5MDAsNyBAQAogCQlYVF9QVVRFTlRSWSh4YWQsIFhBRF9ORVcsIHhvZmYsIHhsZW4sIHhhZGRyKTsKIAogCQkvKiBhZHZhbmNlIG5leHQgYXZhaWxhYmxlIGVudHJ5IGluZGV4ICovCi0JCXAtPmhlYWRlci5uZXh0aW5kZXggPQotCQkgICAgY3B1X3RvX2xlMTYobGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkgKyAxKTsKKwkJbGUxNl9hZGRfY3B1KCZwLT5oZWFkZXIubmV4dGluZGV4LCAxKTsKIAl9CiAKIAkvKiBnZXQgYmFjayBvbGQgWEFEICovCkBAIC0yNTY3LDggKzI1NjEsNyBAQAogCVhUX1BVVEVOVFJZKHhhZCwgeGZsYWcsIHhvZmYsIHhsZW4sIHhhZGRyKTsKIAogCS8qIGFkdmFuY2UgbmV4dCBhdmFpbGFibGUgZW50cnkgaW5kZXggKi8KLQlwLT5oZWFkZXIubmV4dGluZGV4ID0KLQkgICAgY3B1X3RvX2xlMTYobGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkgKyAxKTsKKwlsZTE2X2FkZF9jcHUoJnAtPmhlYWRlci5uZXh0aW5kZXgsIDEpOwogCiAJeHRsY2stPmx3bS5vZmZzZXQgPQogCSAgICAoeHRsY2stPmx3bS5vZmZzZXQpID8gbWluKGluZGV4LChpbnQpIHh0bGNrLT5sd20ub2Zmc2V0KSA6IGluZGV4OwpAQCAtMjYzMSw4ICsyNjI0LDcgQEAKIAkgKiBkZWxldGUgdGhlIGVudHJ5IGZyb20gdGhlIGxlYWYgcGFnZQogCSAqLwogCW5leHRpbmRleCA9IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpOwotCXAtPmhlYWRlci5uZXh0aW5kZXggPQotCSAgICBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShwLT5oZWFkZXIubmV4dGluZGV4KSAtIDEpOworCWxlMTZfYWRkX2NwdSgmcC0+aGVhZGVyLm5leHRpbmRleCwgLTEpOwogCiAJLyoKIAkgKiBpZiB0aGUgbGVhZiBwYWdlIGJvY29tZSBlbXB0eSwgZnJlZSB0aGUgcGFnZQpAQCAtMjc5NSw5ICsyNzg3LDcgQEAKIAkJCQkJKG5leHRpbmRleCAtIGluZGV4IC0KIAkJCQkJIDEpIDw8IEwyWFRTTE9UU0laRSk7CiAKLQkJCXAtPmhlYWRlci5uZXh0aW5kZXggPQotCQkJICAgIGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpIC0KLQkJCQkJMSk7CisJCQlsZTE2X2FkZF9jcHUoJnAtPmhlYWRlci5uZXh0aW5kZXgsIC0xKTsKIAkJCWpmc19pbmZvKCJ4dERlbGV0ZVVwKGVudHJ5KTogMHglbHhbJWRdIiwKIAkJCQkgKHVsb25nKSBwYXJlbnQtPmJuLCBpbmRleCk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Yy5jIGIvZnMvbG9ja2Qvc3ZjLmMKaW5kZXggMDgyMjY0Ni4uMWVkOGJkNCAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjLmMKKysrIGIvZnMvbG9ja2Qvc3ZjLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCSAqLwogCXdoaWxlICgobmxtc3ZjX3VzZXJzIHx8ICFzaWduYWxsZWQoKSkgJiYgbmxtc3ZjX3BpZCA9PSBjdXJyZW50LT5waWQpIHsKIAkJbG9uZyB0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JCWNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl07CisJCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwogCiAJCWlmIChzaWduYWxsZWQoKSkgewogCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IGYzNmYwZTYuLjU5MmZhYWQgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtMTI3LDcgKzEyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBJU19QT1NJWChmbCkJKGZsLT5mbF9mbGFncyAmIEZMX1BPU0lYKQpAQCAtMTI3NSwxMyArMTI3NCwxMyBAQAogRVhQT1JUX1NZTUJPTChfX2JyZWFrX2xlYXNlKTsKIAogLyoqCi0gKglsZWFzZV9nZXRfbXRpbWUKKyAqCWxlYXNlX2dldF9tdGltZSAtIGdldCB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIG9mIGFuIGlub2RlCiAgKglAaW5vZGU6IHRoZSBpbm9kZQogICogICAgICBAdGltZTogIHBvaW50ZXIgdG8gYSB0aW1lc3BlYyB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIGxhc3QgbW9kaWZpZWQgdGltZQogICoKICAqIFRoaXMgaXMgdG8gZm9yY2UgTkZTIGNsaWVudHMgdG8gZmx1c2ggdGhlaXIgY2FjaGVzIGZvciBmaWxlcyB3aXRoCiAgKiBleGNsdXNpdmUgbGVhc2VzLiAgVGhlIGp1c3RpZmljYXRpb24gaXMgdGhhdCBpZiBzb21lb25lIGhhcyBhbgotICogZXhjbHVzaXZlIGxlYXNlLCB0aGVuIHRoZXkgY291bGQgYmUgbW9kaWZpeWluZyBpdC4KKyAqIGV4Y2x1c2l2ZSBsZWFzZSwgdGhlbiB0aGV5IGNvdWxkIGJlIG1vZGlmeWluZyBpdC4KICAqLwogdm9pZCBsZWFzZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHRpbWVzcGVjICp0aW1lKQogewpAQCAtMTgwMSwxNyArMTgwMCwyMSBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKLQlmb3IgKDs7KSB7Ci0JCWVycm9yID0gdmZzX2xvY2tfZmlsZShmaWxwLCBjbWQsIGZpbGVfbG9jaywgTlVMTCk7Ci0JCWlmIChlcnJvciAhPSAtRUFHQUlOIHx8IGNtZCA9PSBGX1NFVExLKQotCQkJYnJlYWs7Ci0JCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZpbGVfbG9jay0+Zmxfd2FpdCwKLQkJCQkhZmlsZV9sb2NrLT5mbF9uZXh0KTsKLQkJaWYgKCFlcnJvcikKLQkJCWNvbnRpbnVlOworCWlmIChmaWxwLT5mX29wICYmIGZpbHAtPmZfb3AtPmxvY2sgIT0gTlVMTCkKKwkJZXJyb3IgPSBmaWxwLT5mX29wLT5sb2NrKGZpbHAsIGNtZCwgZmlsZV9sb2NrKTsKKwllbHNlIHsKKwkJZm9yICg7OykgeworCQkJZXJyb3IgPSBwb3NpeF9sb2NrX2ZpbGUoZmlscCwgZmlsZV9sb2NrLCBOVUxMKTsKKwkJCWlmIChlcnJvciAhPSAtRUFHQUlOIHx8IGNtZCA9PSBGX1NFVExLKQorCQkJCWJyZWFrOworCQkJZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmlsZV9sb2NrLT5mbF93YWl0LAorCQkJCQkhZmlsZV9sb2NrLT5mbF9uZXh0KTsKKwkJCWlmICghZXJyb3IpCisJCQkJY29udGludWU7CiAKLQkJbG9ja3NfZGVsZXRlX2Jsb2NrKGZpbGVfbG9jayk7Ci0JCWJyZWFrOworCQkJbG9ja3NfZGVsZXRlX2Jsb2NrKGZpbGVfbG9jayk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTI1LDE3ICsxOTI4LDIxIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWZvciAoOzspIHsKLQkJZXJyb3IgPSB2ZnNfbG9ja19maWxlKGZpbHAsIGNtZCwgZmlsZV9sb2NrLCBOVUxMKTsKLQkJaWYgKGVycm9yICE9IC1FQUdBSU4gfHwgY21kID09IEZfU0VUTEs2NCkKLQkJCWJyZWFrOwotCQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmaWxlX2xvY2stPmZsX3dhaXQsCi0JCQkJIWZpbGVfbG9jay0+ZmxfbmV4dCk7Ci0JCWlmICghZXJyb3IpCi0JCQljb250aW51ZTsKKwlpZiAoZmlscC0+Zl9vcCAmJiBmaWxwLT5mX29wLT5sb2NrICE9IE5VTEwpCisJCWVycm9yID0gZmlscC0+Zl9vcC0+bG9jayhmaWxwLCBjbWQsIGZpbGVfbG9jayk7CisJZWxzZSB7CisJCWZvciAoOzspIHsKKwkJCWVycm9yID0gcG9zaXhfbG9ja19maWxlKGZpbHAsIGZpbGVfbG9jaywgTlVMTCk7CisJCQlpZiAoZXJyb3IgIT0gLUVBR0FJTiB8fCBjbWQgPT0gRl9TRVRMSzY0KQorCQkJCWJyZWFrOworCQkJZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmlsZV9sb2NrLT5mbF93YWl0LAorCQkJCQkhZmlsZV9sb2NrLT5mbF9uZXh0KTsKKwkJCWlmICghZXJyb3IpCisJCQkJY29udGludWU7CiAKLQkJbG9ja3NfZGVsZXRlX2Jsb2NrKGZpbGVfbG9jayk7Ci0JCWJyZWFrOworCQkJbG9ja3NfZGVsZXRlX2Jsb2NrKGZpbGVfbG9jayk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9mcy9tYmNhY2hlLmMgYi9mcy9tYmNhY2hlLmMKaW5kZXggZWIzMWI3My4uZWM4OGZmMyAxMDA2NDQKLS0tIGEvZnMvbWJjYWNoZS5jCisrKyBiL2ZzL21iY2FjaGUuYwpAQCAtMzk5LDExICszOTksMTEgQEAKICAqIGlmIG5vIG1vcmUgbWVtb3J5IHdhcyBhdmFpbGFibGUuCiAgKi8KIHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqCi1tYl9jYWNoZV9lbnRyeV9hbGxvYyhzdHJ1Y3QgbWJfY2FjaGUgKmNhY2hlKQorbWJfY2FjaGVfZW50cnlfYWxsb2Moc3RydWN0IG1iX2NhY2hlICpjYWNoZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqY2U7CiAKLQljZSA9IGttZW1fY2FjaGVfYWxsb2MoY2FjaGUtPmNfZW50cnlfY2FjaGUsIEdGUF9LRVJORUwpOworCWNlID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZS0+Y19lbnRyeV9jYWNoZSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoY2UpIHsKIAkJYXRvbWljX2luYygmY2FjaGUtPmNfZW50cnlfY291bnQpOwogCQlJTklUX0xJU1RfSEVBRCgmY2UtPmVfbHJ1X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvbXBhZ2UuYyBiL2ZzL21wYWdlLmMKaW5kZXggNWRmNTY0My4uMjM1ZTRkMyAxMDA2NDQKLS0tIGEvZnMvbXBhZ2UuYworKysgYi9mcy9tcGFnZS5jCkBAIC0zMjUsMTYgKzMyNSwxMiBAQAogfQogCiAvKioKLSAqIG1wYWdlX3JlYWRwYWdlcyAtIHBvcHVsYXRlIGFuIGFkZHJlc3Mgc3BhY2Ugd2l0aCBzb21lIHBhZ2VzLCBhbmQKLSAqICAgICAgICAgICAgICAgICAgICAgICBzdGFydCByZWFkcyBhZ2FpbnN0IHRoZW0uCi0gKgorICogbXBhZ2VfcmVhZHBhZ2VzIC0gcG9wdWxhdGUgYW4gYWRkcmVzcyBzcGFjZSB3aXRoIHNvbWUgcGFnZXMgJiBzdGFydCByZWFkcyBhZ2FpbnN0IHRoZW0KICAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZQogICogQHBhZ2VzOiBUaGUgYWRkcmVzcyBvZiBhIGxpc3RfaGVhZCB3aGljaCBjb250YWlucyB0aGUgdGFyZ2V0IHBhZ2VzLiAgVGhlc2UKICAqICAgcGFnZXMgaGF2ZSB0aGVpciAtPmluZGV4IHBvcHVsYXRlZCBhbmQgYXJlIG90aGVyd2lzZSB1bmluaXRpYWxpc2VkLgotICoKICAqICAgVGhlIHBhZ2UgYXQgQHBhZ2VzLT5wcmV2IGhhcyB0aGUgbG93ZXN0IGZpbGUgb2Zmc2V0LCBhbmQgcmVhZHMgc2hvdWxkIGJlCiAgKiAgIGlzc3VlZCBpbiBAcGFnZXMtPnByZXYgdG8gQHBhZ2VzLT5uZXh0IG9yZGVyLgotICoKICAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBhdCAqQHBhZ2VzCiAgKiBAZ2V0X2Jsb2NrOiBUaGUgZmlsZXN5c3RlbSdzIGJsb2NrIG1hcHBlciBmdW5jdGlvbi4KICAqCkBAIC0zNjAsNiArMzU2LDcgQEAKICAqIFNvIGFuIG1wYWdlIHJlYWQgb2YgdGhlIGZpcnN0IDE2IGJsb2NrcyBvZiBhbiBleHQyIGZpbGUgd2lsbCBjYXVzZSBJL08gdG8gYmUKICAqIHN1Ym1pdHRlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgogICogCTEyIDAgMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTMgMTQgMTUgMTYKKyAqCiAgKiBiZWNhdXNlIHRoZSBpbmRpcmVjdCBibG9jayBoYXMgdG8gYmUgcmVhZCB0byBnZXQgdGhlIG1hcHBpbmdzIG9mIGJsb2NrcwogICogMTMsMTQsMTUsMTYuICBPYnZpb3VzbHksIHRoaXMgaW1wYWN0cyBwZXJmb3JtYW5jZS4KICAqCkBAIC02NTYsOSArNjUzLDcgQEAKIH0KIAogLyoqCi0gKiBtcGFnZV93cml0ZXBhZ2VzIC0gd2FsayB0aGUgbGlzdCBvZiBkaXJ0eSBwYWdlcyBvZiB0aGUgZ2l2ZW4KLSAqIGFkZHJlc3Mgc3BhY2UgYW5kIHdyaXRlcGFnZSgpIGFsbCBvZiB0aGVtLgotICogCisgKiBtcGFnZV93cml0ZXBhZ2VzIC0gd2FsayB0aGUgbGlzdCBvZiBkaXJ0eSBwYWdlcyBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyBzcGFjZSAmIHdyaXRlcGFnZSgpIGFsbCBvZiB0aGVtCiAgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSBzdHJ1Y3R1cmUgdG8gd3JpdGUKICAqIEB3YmM6IHN1YnRyYWN0IHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBwYWdlcyBmcm9tICpAd2JjLT5ucl90b193cml0ZQogICogQGdldF9ibG9jazogdGhlIGZpbGVzeXN0ZW0ncyBibG9jayBtYXBwZXIgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCA5NDFjOGU4Li5lMTc5ZjcxIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICogYW55IGV4dHJhIGNvbnRlbnRpb24uLi4KICAqLwogCi1zdGF0aWMgaW50IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKK3N0YXRpYyBpbnQgX19saW5rX3BhdGhfd2Fsayhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7CiAKIC8qIEluIG9yZGVyIHRvIHJlZHVjZSBzb21lIHJhY2VzLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGRvaW5nIGFkZGl0aW9uYWwKICAqIGNoZWNraW5nIGFuZCBob3BlZnVsbHkgc3BlZWRpbmcgdGhpbmdzIHVwLCB3ZSBjb3B5IGZpbGVuYW1lcyB0byB0aGUKQEAgLTU2Myw2ICs1NjMsMzcgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIFdyYXBwZXIgdG8gcmV0cnkgcGF0aG5hbWUgcmVzb2x1dGlvbiB3aGVuZXZlciB0aGUgdW5kZXJseWluZworICogZmlsZSBzeXN0ZW0gcmV0dXJucyBhbiBFU1RBTEUuCisgKgorICogUmV0cnkgdGhlIHdob2xlIHBhdGggb25jZSwgZm9yY2luZyByZWFsIGxvb2t1cCByZXF1ZXN0cworICogaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBkY2FjaGUuCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBwYXRoIHNhdmUgPSBuZC0+cGF0aDsKKwlpbnQgcmVzdWx0OworCisJLyogbWFrZSBzdXJlIHRoZSBzdHVmZiB3ZSBzYXZlZCBkb2Vzbid0IGdvIGF3YXkgKi8KKwlkZ2V0KHNhdmUuZGVudHJ5KTsKKwltbnRnZXQoc2F2ZS5tbnQpOworCisJcmVzdWx0ID0gX19saW5rX3BhdGhfd2FsayhuYW1lLCBuZCk7CisJaWYgKHJlc3VsdCA9PSAtRVNUQUxFKSB7CisJCS8qIG5kLT5wYXRoIGhhZCBiZWVuIGRyb3BwZWQgKi8KKwkJbmQtPnBhdGggPSBzYXZlOworCQlkZ2V0KG5kLT5wYXRoLmRlbnRyeSk7CisJCW1udGdldChuZC0+cGF0aC5tbnQpOworCQluZC0+ZmxhZ3MgfD0gTE9PS1VQX1JFVkFMOworCQlyZXN1bHQgPSBfX2xpbmtfcGF0aF93YWxrKG5hbWUsIG5kKTsKKwl9CisKKwlwYXRoX3B1dCgmc2F2ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Zmc19mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3QgY2hhciAqbGluaykKIHsKIAlpbnQgcmVzID0gMDsKQEAgLTEwMjAsMzYgKzEwNTEsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qCi0gKiBXcmFwcGVyIHRvIHJldHJ5IHBhdGhuYW1lIHJlc29sdXRpb24gd2hlbmV2ZXIgdGhlIHVuZGVybHlpbmcKLSAqIGZpbGUgc3lzdGVtIHJldHVybnMgYW4gRVNUQUxFLgotICoKLSAqIFJldHJ5IHRoZSB3aG9sZSBwYXRoIG9uY2UsIGZvcmNpbmcgcmVhbCBsb29rdXAgcmVxdWVzdHMKLSAqIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgZGNhY2hlLgotICovCi1zdGF0aWMgaW50IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXN0cnVjdCBuYW1laWRhdGEgc2F2ZSA9ICpuZDsKLQlpbnQgcmVzdWx0OwotCi0JLyogbWFrZSBzdXJlIHRoZSBzdHVmZiB3ZSBzYXZlZCBkb2Vzbid0IGdvIGF3YXkgKi8KLQlkZ2V0KHNhdmUucGF0aC5kZW50cnkpOwotCW1udGdldChzYXZlLnBhdGgubW50KTsKLQotCXJlc3VsdCA9IF9fbGlua19wYXRoX3dhbGsobmFtZSwgbmQpOwotCWlmIChyZXN1bHQgPT0gLUVTVEFMRSkgewotCQkqbmQgPSBzYXZlOwotCQlkZ2V0KG5kLT5wYXRoLmRlbnRyeSk7Ci0JCW1udGdldChuZC0+cGF0aC5tbnQpOwotCQluZC0+ZmxhZ3MgfD0gTE9PS1VQX1JFVkFMOwotCQlyZXN1bHQgPSBfX2xpbmtfcGF0aF93YWxrKG5hbWUsIG5kKTsKLQl9Ci0KLQlwYXRoX3B1dCgmc2F2ZS5wYXRoKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBpbnQgcGF0aF93YWxrKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCWN1cnJlbnQtPnRvdGFsX2xpbmtfY291bnQgPSAwOwpAQCAtMTM2NCwxMyArMTM2NSwxMyBAQAogfQogCiAvKioKLSAqIGxvb2t1cF9vbmVfbGVuOiAgZmlsZXN5c3RlbSBoZWxwZXIgdG8gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnQKKyAqIGxvb2t1cF9vbmVfbGVuIC0gZmlsZXN5c3RlbSBoZWxwZXIgdG8gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnQKICAqIEBuYW1lOglwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwCiAgKiBAYmFzZToJYmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb20KICAqIEBsZW46CW1heGltdW0gbGVuZ3RoIEBsZW4gc2hvdWxkIGJlIGludGVycHJldGVkIHRvCiAgKgotICogTm90ZSB0aGF0IHRoaXMgcm91dGluZSBpcyBwdXJlbHkgYSBoZWxwZXIgZm9yIGZpbGVzeXN0ZW0gdXNlYWdlIGFuZCBzaG91bGQKLSAqIG5vdCBiZSBjYWxsZWQgYnkgZ2VuZXJpYyBjb2RlLiAgQWxzbyBub3RlIHRoYXQgYnkgdXNpbmcgdGhpcyBmdW5jdGlvbiB0bworICogTm90ZSB0aGF0IHRoaXMgcm91dGluZSBpcyBwdXJlbHkgYSBoZWxwZXIgZm9yIGZpbGVzeXN0ZW0gdXNhZ2UgYW5kIHNob3VsZAorICogbm90IGJlIGNhbGxlZCBieSBnZW5lcmljIGNvZGUuICBBbHNvIG5vdGUgdGhhdCBieSB1c2luZyB0aGlzIGZ1bmN0aW9uIHRoZQogICogbmFtZWlkYXRhIGFyZ3VtZW50IGlzIHBhc3NlZCB0byB0aGUgZmlsZXN5c3RlbSBtZXRob2RzIGFuZCBhIGZpbGVzeXN0ZW0KICAqIHVzaW5nIHRoaXMgaGVscGVyIG5lZWRzIHRvIGJlIHByZXBhcmVkIGZvciB0aGF0LgogICovCkBAIC0xNjIyLDggKzE2MjMsNyBAQAogCQkJcmV0dXJuIC1FQUNDRVM7CiAKIAkJZmxhZyAmPSB+T19UUlVOQzsKLQl9IGVsc2UgaWYgKElTX1JET05MWShpbm9kZSkgJiYgKGFjY19tb2RlICYgTUFZX1dSSVRFKSkKLQkJcmV0dXJuIC1FUk9GUzsKKwl9CiAKIAllcnJvciA9IHZmc19wZXJtaXNzaW9uKG5kLCBhY2NfbW9kZSk7CiAJaWYgKGVycm9yKQpAQCAtMTY3Niw3ICsxNjc2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Blbl9uYW1laV9jcmVhdGUoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBwYXRoICpwYXRoLAorLyoKKyAqIEJlIGNhcmVmdWwgYWJvdXQgZXZlciBhZGRpbmcgYW55IG1vcmUgY2FsbGVycyBvZiB0aGlzCisgKiBmdW5jdGlvbi4gIEl0cyBmbGFncyBtdXN0IGJlIGluIHRoZSBuYW1laSBmb3JtYXQsIG5vdAorICogd2hhdCBnZXQgcGFzc2VkIHRvIHN5c19vcGVuKCkuCisgKi8KK3N0YXRpYyBpbnQgX19vcGVuX25hbWVpX2NyZWF0ZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKnBhdGgsCiAJCQkJaW50IGZsYWcsIGludCBtb2RlKQogewogCWludCBlcnJvcjsKQEAgLTE2OTUsMjYgKzE3MDAsNTYgQEAKIH0KIAogLyoKLSAqCW9wZW5fbmFtZWkoKQorICogTm90ZSB0aGF0IHdoaWxlIHRoZSBmbGFnIHZhbHVlIChsb3cgdHdvIGJpdHMpIGZvciBzeXNfb3BlbiBtZWFuczoKKyAqCTAwIC0gcmVhZC1vbmx5CisgKgkwMSAtIHdyaXRlLW9ubHkKKyAqCTEwIC0gcmVhZC13cml0ZQorICoJMTEgLSBzcGVjaWFsCisgKiBpdCBpcyBjaGFuZ2VkIGludG8KKyAqCTAwIC0gbm8gcGVybWlzc2lvbnMgbmVlZGVkCisgKgkwMSAtIHJlYWQtcGVybWlzc2lvbgorICoJMTAgLSB3cml0ZS1wZXJtaXNzaW9uCisgKgkxMSAtIHJlYWQtd3JpdGUKKyAqIGZvciB0aGUgaW50ZXJuYWwgcm91dGluZXMgKGllIG9wZW5fbmFtZWkoKS9mb2xsb3dfbGluaygpIGV0YykKKyAqIFRoaXMgaXMgbW9yZSBsb2dpY2FsLCBhbmQgYWxzbyBhbGxvd3MgdGhlIDAwICJubyBwZXJtIG5lZWRlZCIKKyAqIHRvIGJlIHVzZWQgZm9yIHN5bWxpbmtzICh3aGVyZSB0aGUgcGVybWlzc2lvbnMgYXJlIGNoZWNrZWQKKyAqIGxhdGVyKS4KICAqCi0gKiBuYW1laSBmb3Igb3BlbiAtIHRoaXMgaXMgaW4gZmFjdCBhbG1vc3QgdGhlIHdob2xlIG9wZW4tcm91dGluZS4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGxvdyBiaXRzIG9mICJmbGFnIiBhcmVuJ3QgdGhlIHNhbWUgYXMgaW4gdGhlIG9wZW4KLSAqIHN5c3RlbSBjYWxsIC0gdGhleSBhcmUgMDAgLSBubyBwZXJtaXNzaW9ucyBuZWVkZWQKLSAqCQkJICAwMSAtIHJlYWQgcGVybWlzc2lvbiBuZWVkZWQKLSAqCQkJICAxMCAtIHdyaXRlIHBlcm1pc3Npb24gbmVlZGVkCi0gKgkJCSAgMTEgLSByZWFkL3dyaXRlIHBlcm1pc3Npb25zIG5lZWRlZAotICogd2hpY2ggaXMgYSBsb3QgbW9yZSBsb2dpY2FsLCBhbmQgYWxzbyBhbGxvd3MgdGhlICJubyBwZXJtIiBuZWVkZWQKLSAqIGZvciBzeW1saW5rcyAod2hlcmUgdGhlIHBlcm1pc3Npb25zIGFyZSBjaGVja2VkIGxhdGVyKS4KLSAqIFNNUC1zYWZlCi0gKi8KLWludCBvcGVuX25hbWVpKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZywKLQkJaW50IG1vZGUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpCiB7CisJaWYgKChmbGFnKzEpICYgT19BQ0NNT0RFKQorCQlmbGFnKys7CisJcmV0dXJuIGZsYWc7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl93aWxsX3dyaXRlX3RvX2ZzKGludCBmbGFnLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCS8qCisJICogV2UnbGwgbmV2ZXIgd3JpdGUgdG8gdGhlIGZzIHVuZGVybHlpbmcKKwkgKiBhIGRldmljZSBmaWxlLgorCSAqLworCWlmIChzcGVjaWFsX2ZpbGUoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAwOworCXJldHVybiAoZmxhZyAmIE9fVFJVTkMpOworfQorCisvKgorICogTm90ZSB0aGF0IHRoZSBsb3cgYml0cyBvZiB0aGUgcGFzc2VkIGluICJvcGVuX2ZsYWciCisgKiBhcmUgbm90IHRoZSBzYW1lIGFzIGluIHRoZSBsb2NhbCB2YXJpYWJsZSAiZmxhZyIuIFNlZQorICogb3Blbl90b19uYW1laV9mbGFncygpIGZvciBtb3JlIGRldGFpbHMuCisgKi8KK3N0cnVjdCBmaWxlICpkb19maWxwX29wZW4oaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsCisJCWludCBvcGVuX2ZsYWcsIGludCBtb2RlKQoreworCXN0cnVjdCBmaWxlICpmaWxwOworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CiAJaW50IGFjY19tb2RlLCBlcnJvcjsKIAlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgY291bnQgPSAwOworCWludCB3aWxsX3dyaXRlOworCWludCBmbGFnID0gb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpOwogCiAJYWNjX21vZGUgPSBBQ0NfTU9ERShmbGFnKTsKIApAQCAtMTczMiwxOCArMTc2NywxOSBAQAogCSAqLwogCWlmICghKGZsYWcgJiBPX0NSRUFUKSkgewogCQllcnJvciA9IHBhdGhfbG9va3VwX29wZW4oZGZkLCBwYXRobmFtZSwgbG9va3VwX2ZsYWdzKGZsYWcpLAotCQkJCQkgbmQsIGZsYWcpOworCQkJCQkgJm5kLCBmbGFnKTsKIAkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOworCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCQlnb3RvIG9rOwogCX0KIAogCS8qCiAJICogQ3JlYXRlIC0gd2UgbmVlZCB0byBrbm93IHRoZSBwYXJlbnQuCiAJICovCi0JZXJyb3IgPSBwYXRoX2xvb2t1cF9jcmVhdGUoZGZkLHBhdGhuYW1lLExPT0tVUF9QQVJFTlQsbmQsZmxhZyxtb2RlKTsKKwllcnJvciA9IHBhdGhfbG9va3VwX2NyZWF0ZShkZmQsIHBhdGhuYW1lLCBMT09LVVBfUEFSRU5ULAorCQkJCSAgICZuZCwgZmxhZywgbW9kZSk7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIAogCS8qCiAJICogV2UgaGF2ZSB0aGUgcGFyZW50IGFuZCBsYXN0IGNvbXBvbmVudC4gRmlyc3Qgb2YgYWxsLCBjaGVjawpAQCAtMTc1MSwxNCArMTc4NywxNCBAQAogCSAqIHdpbGwgbm90IGRvLgogCSAqLwogCWVycm9yID0gLUVJU0RJUjsKLQlpZiAobmQtPmxhc3RfdHlwZSAhPSBMQVNUX05PUk0gfHwgbmQtPmxhc3QubmFtZVtuZC0+bGFzdC5sZW5dKQorCWlmIChuZC5sYXN0X3R5cGUgIT0gTEFTVF9OT1JNIHx8IG5kLmxhc3QubmFtZVtuZC5sYXN0Lmxlbl0pCiAJCWdvdG8gZXhpdDsKIAotCWRpciA9IG5kLT5wYXRoLmRlbnRyeTsKLQluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CisJZGlyID0gbmQucGF0aC5kZW50cnk7CisJbmQuZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CiAJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKLQlwYXRoLmRlbnRyeSA9IGxvb2t1cF9oYXNoKG5kKTsKLQlwYXRoLm1udCA9IG5kLT5wYXRoLm1udDsKKwlwYXRoLmRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CisJcGF0aC5tbnQgPSBuZC5wYXRoLm1udDsKIAogZG9fbGFzdDoKIAllcnJvciA9IFBUUl9FUlIocGF0aC5kZW50cnkpOwpAQCAtMTc2NywxOCArMTgwMywzMSBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JaWYgKElTX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwotCQllcnJvciA9IFBUUl9FUlIobmQtPmludGVudC5vcGVuLmZpbGUpOwotCQlnb3RvIGV4aXRfZHB1dDsKKwlpZiAoSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKSB7CisJCWVycm9yID0gUFRSX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKTsKKwkJZ290byBleGl0X211dGV4X3VubG9jazsKIAl9CiAKIAkvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovCiAJaWYgKCFwYXRoLmRlbnRyeS0+ZF9pbm9kZSkgewotCQllcnJvciA9IG9wZW5fbmFtZWlfY3JlYXRlKG5kLCAmcGF0aCwgZmxhZywgbW9kZSk7CisJCS8qCisJCSAqIFRoaXMgd3JpdGUgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IGEKKwkJICogcm8tPnJ3IHRyYW5zaXRpb24gZG9lcyBub3Qgb2NjdXIgYmV0d2VlbgorCQkgKiB0aGUgdGltZSB3aGVuIHRoZSBmaWxlIGlzIGNyZWF0ZWQgYW5kIHdoZW4KKwkJICogYSBwZXJtYW5lbnQgd3JpdGUgY291bnQgaXMgdGFrZW4gdGhyb3VnaAorCQkgKiB0aGUgJ3N0cnVjdCBmaWxlJyBpbiBuYW1laWRhdGFfdG9fZmlscCgpLgorCQkgKi8KKwkJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CiAJCWlmIChlcnJvcikKKwkJCWdvdG8gZXhpdF9tdXRleF91bmxvY2s7CisJCWVycm9yID0gX19vcGVuX25hbWVpX2NyZWF0ZSgmbmQsICZwYXRoLCBmbGFnLCBtb2RlKTsKKwkJaWYgKGVycm9yKSB7CisJCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CiAJCQlnb3RvIGV4aXQ7Ci0JCXJldHVybiAwOworCQl9CisJCWZpbHAgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIG9wZW5fZmxhZyk7CisJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKKwkJcmV0dXJuIGZpbHA7CiAJfQogCiAJLyoKQEAgLTE4MDMsMjMgKzE4NTIsNTIgQEAKIAlpZiAocGF0aC5kZW50cnktPmRfaW5vZGUtPmlfb3AgJiYgcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfb3AtPmZvbGxvd19saW5rKQogCQlnb3RvIGRvX2xpbms7CiAKLQlwYXRoX3RvX25hbWVpZGF0YSgmcGF0aCwgbmQpOworCXBhdGhfdG9fbmFtZWlkYXRhKCZwYXRoLCAmbmQpOwogCWVycm9yID0gLUVJU0RJUjsKIAlpZiAocGF0aC5kZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihwYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKIAkJZ290byBleGl0Owogb2s6Ci0JZXJyb3IgPSBtYXlfb3BlbihuZCwgYWNjX21vZGUsIGZsYWcpOwotCWlmIChlcnJvcikKKwkvKgorCSAqIENvbnNpZGVyOgorCSAqIDEuIG1heV9vcGVuKCkgdHJ1bmNhdGVzIGEgZmlsZQorCSAqIDIuIGEgcnctPnJvIG1vdW50IHRyYW5zaXRpb24gb2NjdXJzCisJICogMy4gbmFtZWlkYXRhX3RvX2ZpbHAoKSBmYWlscyBkdWUgdG8KKwkgKiAgICB0aGUgcm8gbW91bnQuCisJICogVGhhdCB3b3VsZCBiZSBpbmNvbnNpc3RlbnQsIGFuZCBzaG91bGQKKwkgKiBiZSBhdm9pZGVkLiBUYWtpbmcgdGhpcyBtbnQgd3JpdGUgaGVyZQorCSAqIGVuc3VyZXMgdGhhdCAoMikgY2FuIG5vdCBvY2N1ci4KKwkgKi8KKwl3aWxsX3dyaXRlID0gb3Blbl93aWxsX3dyaXRlX3RvX2ZzKGZsYWcsIG5kLnBhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAod2lsbF93cml0ZSkgeworCQllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBleGl0OworCX0KKwllcnJvciA9IG1heV9vcGVuKCZuZCwgYWNjX21vZGUsIGZsYWcpOworCWlmIChlcnJvcikgeworCQlpZiAod2lsbF93cml0ZSkKKwkJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAkJZ290byBleGl0OwotCXJldHVybiAwOworCX0KKwlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBvcGVuX2ZsYWcpOworCS8qCisJICogSXQgaXMgbm93IHNhZmUgdG8gZHJvcCB0aGUgbW50IHdyaXRlCisJICogYmVjYXVzZSB0aGUgZmlscCBoYXMgaGFkIGEgd3JpdGUgdGFrZW4KKwkgKiBvbiBpdHMgYmVoYWxmLgorCSAqLworCWlmICh3aWxsX3dyaXRlKQorCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CisJcmV0dXJuIGZpbHA7CiAKK2V4aXRfbXV0ZXhfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIGV4aXRfZHB1dDoKLQlwYXRoX3B1dF9jb25kaXRpb25hbCgmcGF0aCwgbmQpOworCXBhdGhfcHV0X2NvbmRpdGlvbmFsKCZwYXRoLCAmbmQpOwogZXhpdDoKLQlpZiAoIUlTX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSkpCi0JCXJlbGVhc2Vfb3Blbl9pbnRlbnQobmQpOwotCXBhdGhfcHV0KCZuZC0+cGF0aCk7Ci0JcmV0dXJuIGVycm9yOworCWlmICghSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKQorCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CisJcGF0aF9wdXQoJm5kLnBhdGgpOworCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIAogZG9fbGluazoKIAllcnJvciA9IC1FTE9PUDsKQEAgLTE4MzUsNDMgKzE5MTMsNjAgQEAKIAkgKiBzdG9yZWQgaW4gbmQtPmxhc3QubmFtZSBhbmQgd2Ugd2lsbCBoYXZlIHRvIHB1dG5hbWUoKSBpdCB3aGVuIHdlCiAJICogYXJlIGRvbmUuIFByb2Nmcy1saWtlIHN5bWxpbmtzIGp1c3Qgc2V0IExBU1RfQklORC4KIAkgKi8KLQluZC0+ZmxhZ3MgfD0gTE9PS1VQX1BBUkVOVDsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHBhdGguZGVudHJ5LCBuZCk7CisJbmQuZmxhZ3MgfD0gTE9PS1VQX1BBUkVOVDsKKwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHBhdGguZGVudHJ5LCAmbmQpOwogCWlmIChlcnJvcikKIAkJZ290byBleGl0X2RwdXQ7Ci0JZXJyb3IgPSBfX2RvX2ZvbGxvd19saW5rKCZwYXRoLCBuZCk7CisJZXJyb3IgPSBfX2RvX2ZvbGxvd19saW5rKCZwYXRoLCAmbmQpOwogCWlmIChlcnJvcikgewogCQkvKiBEb2VzIHNvbWVvbmUgdW5kZXJzdGFuZCBjb2RlIGZsb3cgaGVyZT8gT3IgaXQgaXMgb25seQogCQkgKiBtZSBzbyBzdHVwaWQ/IEFuYXRoZW1hIHRvIHdob2V2ZXIgZGVzaWduZWQgdGhpcyBub24tc2Vuc2UKIAkJICogd2l0aCAiaW50ZW50Lm9wZW4iLgogCQkgKi8KLQkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7Ci0JCXJldHVybiBlcnJvcjsKKwkJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAJfQotCW5kLT5mbGFncyAmPSB+TE9PS1VQX1BBUkVOVDsKLQlpZiAobmQtPmxhc3RfdHlwZSA9PSBMQVNUX0JJTkQpCisJbmQuZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CisJaWYgKG5kLmxhc3RfdHlwZSA9PSBMQVNUX0JJTkQpCiAJCWdvdG8gb2s7CiAJZXJyb3IgPSAtRUlTRElSOwotCWlmIChuZC0+bGFzdF90eXBlICE9IExBU1RfTk9STSkKKwlpZiAobmQubGFzdF90eXBlICE9IExBU1RfTk9STSkKIAkJZ290byBleGl0OwotCWlmIChuZC0+bGFzdC5uYW1lW25kLT5sYXN0Lmxlbl0pIHsKLQkJX19wdXRuYW1lKG5kLT5sYXN0Lm5hbWUpOworCWlmIChuZC5sYXN0Lm5hbWVbbmQubGFzdC5sZW5dKSB7CisJCV9fcHV0bmFtZShuZC5sYXN0Lm5hbWUpOwogCQlnb3RvIGV4aXQ7CiAJfQogCWVycm9yID0gLUVMT09QOwogCWlmIChjb3VudCsrPT0zMikgewotCQlfX3B1dG5hbWUobmQtPmxhc3QubmFtZSk7CisJCV9fcHV0bmFtZShuZC5sYXN0Lm5hbWUpOwogCQlnb3RvIGV4aXQ7CiAJfQotCWRpciA9IG5kLT5wYXRoLmRlbnRyeTsKKwlkaXIgPSBuZC5wYXRoLmRlbnRyeTsKIAltdXRleF9sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwotCXBhdGguZGVudHJ5ID0gbG9va3VwX2hhc2gobmQpOwotCXBhdGgubW50ID0gbmQtPnBhdGgubW50OwotCV9fcHV0bmFtZShuZC0+bGFzdC5uYW1lKTsKKwlwYXRoLmRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CisJcGF0aC5tbnQgPSBuZC5wYXRoLm1udDsKKwlfX3B1dG5hbWUobmQubGFzdC5uYW1lKTsKIAlnb3RvIGRvX2xhc3Q7CiB9CiAKIC8qKgorICogZmlscF9vcGVuIC0gb3BlbiBmaWxlIGFuZCByZXR1cm4gZmlsZSBwb2ludGVyCisgKgorICogQGZpbGVuYW1lOglwYXRoIHRvIG9wZW4KKyAqIEBmbGFnczoJb3BlbiBmbGFncyBhcyBwZXIgdGhlIG9wZW4oMikgc2Vjb25kIGFyZ3VtZW50CisgKiBAbW9kZToJbW9kZSBmb3IgdGhlIG5ldyBmaWxlIGlmIE9fQ1JFQVQgaXMgc2V0LCBlbHNlIGlnbm9yZWQKKyAqCisgKiBUaGlzIGlzIHRoZSBoZWxwZXIgdG8gb3BlbiBhIGZpbGUgZnJvbSBrZXJuZWxzcGFjZSBpZiB5b3UgcmVhbGx5CisgKiBoYXZlIHRvLiAgQnV0IGluIGdlbmVyYWxseSB5b3Ugc2hvdWxkIG5vdCBkbyB0aGlzLCBzbyBwbGVhc2UgbW92ZQorICogYWxvbmcsIG5vdGhpbmcgdG8gc2VlIGhlcmUuLgorICovCitzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKQoreworCXJldHVybiBkb19maWxwX29wZW4oQVRfRkRDV0QsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7Cit9CitFWFBPUlRfU1lNQk9MKGZpbHBfb3Blbik7CisKKy8qKgogICogbG9va3VwX2NyZWF0ZSAtIGxvb2t1cCBhIGRlbnRyeSwgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndCBleGlzdAogICogQG5kOiBuYW1laWRhdGEgaW5mbwogICogQGlzX2RpcjogZGlyZWN0b3J5IGZsYWcKQEAgLTE5NDQsNiArMjAzOSwyMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBtYXlfbWtub2QobW9kZV90IG1vZGUpCit7CisJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGUkVHOgorCWNhc2UgU19JRkNIUjoKKwljYXNlIFNfSUZCTEs6CisJY2FzZSBTX0lGSUZPOgorCWNhc2UgU19JRlNPQ0s6CisJY2FzZSAwOiAvKiB6ZXJvIG1vZGUgdHJhbnNsYXRlcyB0byBTX0lGUkVHICovCisJCXJldHVybiAwOworCWNhc2UgU19JRkRJUjoKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbWtub2RhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBtb2RlLAogCQkJCXVuc2lnbmVkIGRldikKIHsKQEAgLTE5NjIsMTIgKzIwNzQsMTkgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCWRlbnRyeSA9IGxvb2t1cF9jcmVhdGUoJm5kLCAwKTsKLQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKLQorCWlmIChJU19FUlIoZGVudHJ5KSkgeworCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAlpZiAoIUlTX1BPU0lYQUNMKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlKSkKIAkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOwotCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKLQkJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CisJZXJyb3IgPSBtYXlfbWtub2QobW9kZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9kcHV0OworCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZHB1dDsKKwlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAkJY2FzZSAwOiBjYXNlIFNfSUZSRUc6CiAJCQllcnJvciA9IHZmc19jcmVhdGUobmQucGF0aC5kZW50cnktPmRfaW5vZGUsZGVudHJ5LG1vZGUsJm5kKTsKIAkJCWJyZWFrOwpAQCAtMTk3OCwxNCArMjA5NywxMSBAQAogCQljYXNlIFNfSUZJRk86IGNhc2UgU19JRlNPQ0s6CiAJCQllcnJvciA9IHZmc19ta25vZChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSxkZW50cnksbW9kZSwwKTsKIAkJCWJyZWFrOwotCQljYXNlIFNfSUZESVI6Ci0JCQllcnJvciA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQl9Ci0JCWRwdXQoZGVudHJ5KTsKIAl9CisJbW50X2Ryb3Bfd3JpdGUobmQucGF0aC5tbnQpOworb3V0X2RwdXQ6CisJZHB1dChkZW50cnkpOworb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJm5kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlwYXRoX3B1dCgmbmQucGF0aCk7CiBvdXQ6CkBAIC0yMDQzLDcgKzIxNTksMTIgQEAKIAogCWlmICghSVNfUE9TSVhBQ0wobmQucGF0aC5kZW50cnktPmRfaW5vZGUpKQogCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9kcHV0OwogCWVycm9yID0gdmZzX21rZGlyKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLCBkZW50cnksIG1vZGUpOworCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKK291dF9kcHV0OgogCWRwdXQoZGVudHJ5KTsKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CkBAIC0yMTUwLDcgKzIyNzEsMTIgQEAKIAllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCWdvdG8gZXhpdDI7CisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGV4aXQzOwogCWVycm9yID0gdmZzX3JtZGlyKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLCBkZW50cnkpOworCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKK2V4aXQzOgogCWRwdXQoZGVudHJ5KTsKIGV4aXQyOgogCW11dGV4X3VubG9jaygmbmQucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwpAQCAtMjIzMSw3ICsyMzU3LDExIEBACiAJCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCQlpZiAoaW5vZGUpCiAJCQlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7CisJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGV4aXQyOwogCQllcnJvciA9IHZmc191bmxpbmsobmQucGF0aC5kZW50cnktPmRfaW5vZGUsIGRlbnRyeSk7CisJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAlleGl0MjoKIAkJZHB1dChkZW50cnkpOwogCX0KQEAgLTIzMTIsNyArMjQ0MiwxMiBAQAogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJZ290byBvdXRfdW5sb2NrOwogCisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9kcHV0OwogCWVycm9yID0gdmZzX3N5bWxpbmsobmQucGF0aC5kZW50cnktPmRfaW5vZGUsIGRlbnRyeSwgZnJvbSwgU19JQUxMVUdPKTsKKwltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CitvdXRfZHB1dDoKIAlkcHV0KGRlbnRyeSk7CiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmbmQucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwpAQCAtMjQwNyw3ICsyNTQyLDEyIEBACiAJZXJyb3IgPSBQVFJfRVJSKG5ld19kZW50cnkpOwogCWlmIChJU19FUlIobmV3X2RlbnRyeSkpCiAJCWdvdG8gb3V0X3VubG9jazsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2RwdXQ7CiAJZXJyb3IgPSB2ZnNfbGluayhvbGRfbmQucGF0aC5kZW50cnksIG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLCBuZXdfZGVudHJ5KTsKKwltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CitvdXRfZHB1dDoKIAlkcHV0KG5ld19kZW50cnkpOwogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJm5kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKQEAgLTI2MzMsOCArMjc3MywxMiBAQAogCWlmIChuZXdfZGVudHJ5ID09IHRyYXApCiAJCWdvdG8gZXhpdDU7CiAKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG9sZG5kLnBhdGgubW50KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXhpdDU7CiAJZXJyb3IgPSB2ZnNfcmVuYW1lKG9sZF9kaXItPmRfaW5vZGUsIG9sZF9kZW50cnksCiAJCQkJICAgbmV3X2Rpci0+ZF9pbm9kZSwgbmV3X2RlbnRyeSk7CisJbW50X2Ryb3Bfd3JpdGUob2xkbmQucGF0aC5tbnQpOwogZXhpdDU6CiAJZHB1dChuZXdfZGVudHJ5KTsKIGV4aXQ0OgpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCA3OTUzYzk2Li42NzhmN2NlIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtNTUsNiArNTYsOCBAQAogCXJldHVybiB0bXAgJiAoSEFTSF9TSVpFIC0gMSk7CiB9CiAKKyNkZWZpbmUgTU5UX1dSSVRFUl9VTkRFUkZMT1dfTElNSVQgLSgxPDwxNikKKwogc3RydWN0IHZmc21vdW50ICphbGxvY192ZnNtbnQoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IGttZW1fY2FjaGVfemFsbG9jKG1udF9jYWNoZSwgR0ZQX0tFUk5FTCk7CkBAIC02OCw2ICs3MSw3IEBACiAJCUlOSVRfTElTVF9IRUFEKCZtbnQtPm1udF9zaGFyZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZtbnQtPm1udF9zbGF2ZV9saXN0KTsKIAkJSU5JVF9MSVNUX0hFQUQoJm1udC0+bW50X3NsYXZlKTsKKwkJYXRvbWljX3NldCgmbW50LT5fX21udF93cml0ZXJzLCAwKTsKIAkJaWYgKG5hbWUpIHsKIAkJCWludCBzaXplID0gc3RybGVuKG5hbWUpICsgMTsKIAkJCWNoYXIgKm5ld25hbWUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwpAQCAtODAsNiArODQsMjYzIEBACiAJcmV0dXJuIG1udDsKIH0KIAorLyoKKyAqIE1vc3Qgci9vIGNoZWNrcyBvbiBhIGZzIGFyZSBmb3Igb3BlcmF0aW9ucyB0aGF0IHRha2UKKyAqIGRpc2NyZXRlIGFtb3VudHMgb2YgdGltZSwgbGlrZSBhIHdyaXRlKCkgb3IgdW5saW5rKCkuCisgKiBXZSBtdXN0IGtlZXAgdHJhY2sgb2Ygd2hlbiB0aG9zZSBvcGVyYXRpb25zIHN0YXJ0CisgKiAoZm9yIHBlcm1pc3Npb24gY2hlY2tzKSBhbmQgd2hlbiB0aGV5IGVuZCwgc28gdGhhdAorICogd2UgY2FuIGRldGVybWluZSB3aGVuIHdyaXRlcyBhcmUgYWJsZSB0byBvY2N1ciB0bworICogYSBmaWxlc3lzdGVtLgorICovCisvKgorICogX19tbnRfaXNfcmVhZG9ubHk6IGNoZWNrIHdoZXRoZXIgYSBtb3VudCBpcyByZWFkLW9ubHkKKyAqIEBtbnQ6IHRoZSBtb3VudCB0byBjaGVjayBmb3IgaXRzIHdyaXRlIHN0YXR1cworICoKKyAqIFRoaXMgc2hvdWxkbid0IGJlIHVzZWQgZGlyZWN0bHkgb3VzaWRlIG9mIHRoZSBWRlMuCisgKiBJdCBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgZmlsZXN5c3RlbSB3aWxsIHN0YXkKKyAqIHIvdywganVzdCB0aGF0IGl0IGlzIHJpZ2h0ICpub3cqLiAgVGhpcyBjYW4gbm90IGFuZAorICogc2hvdWxkIG5vdCBiZSB1c2VkIGluIHBsYWNlIG9mIElTX1JET05MWShpbm9kZSkuCisgKiBtbnRfd2FudC9kcm9wX3dyaXRlKCkgd2lsbCBfa2VlcF8gdGhlIGZpbGVzeXN0ZW0KKyAqIHIvdy4KKyAqLworaW50IF9fbW50X2lzX3JlYWRvbmx5KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWlmIChtbnQtPm1udF9mbGFncyAmIE1OVF9SRUFET05MWSkKKwkJcmV0dXJuIDE7CisJaWYgKG1udC0+bW50X3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbW50X2lzX3JlYWRvbmx5KTsKKworc3RydWN0IG1udF93cml0ZXIgeworCS8qCisJICogSWYgaG9sZGluZyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBsb2NrLCB0aGV5CisJICogbXVzdCBiZSBvcmRlcmVkIGJ5IGNwdSBudW1iZXIuCisJICovCisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2NrX2NsYXNzOyAvKiBjb21waWxlcyBvdXQgd2l0aCAhbG9ja2RlcCAqLworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJc3RydWN0IHZmc21vdW50ICptbnQ7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1udF93cml0ZXIsIG1udF93cml0ZXJzKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9tbnRfd3JpdGVycyh2b2lkKQoreworCWludCBjcHU7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgbW50X3dyaXRlciAqd3JpdGVyID0gJnBlcl9jcHUobW50X3dyaXRlcnMsIGNwdSk7CisJCXNwaW5fbG9ja19pbml0KCZ3cml0ZXItPmxvY2spOworCQlsb2NrZGVwX3NldF9jbGFzcygmd3JpdGVyLT5sb2NrLCAmd3JpdGVyLT5sb2NrX2NsYXNzKTsKKwkJd3JpdGVyLT5jb3VudCA9IDA7CisJfQorCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoaW5pdF9tbnRfd3JpdGVycyk7CisKK3N0YXRpYyB2b2lkIHVubG9ja19tbnRfd3JpdGVycyh2b2lkKQoreworCWludCBjcHU7CisJc3RydWN0IG1udF93cml0ZXIgKmNwdV93cml0ZXI7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWNwdV93cml0ZXIgPSAmcGVyX2NwdShtbnRfd3JpdGVycywgY3B1KTsKKwkJc3Bpbl91bmxvY2soJmNwdV93cml0ZXItPmxvY2spOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xlYXJfbW50X2NvdW50KHN0cnVjdCBtbnRfd3JpdGVyICpjcHVfd3JpdGVyKQoreworCWlmICghY3B1X3dyaXRlci0+bW50KQorCQlyZXR1cm47CisJLyoKKwkgKiBUaGlzIGlzIGluIGNhc2UgYW55b25lIGV2ZXIgbGVhdmVzIGFuIGludmFsaWQsCisJICogb2xkIC0+bW50IGFuZCBhIGNvdW50IG9mIDAuCisJICovCisJaWYgKCFjcHVfd3JpdGVyLT5jb3VudCkKKwkJcmV0dXJuOworCWF0b21pY19hZGQoY3B1X3dyaXRlci0+Y291bnQsICZjcHVfd3JpdGVyLT5tbnQtPl9fbW50X3dyaXRlcnMpOworCWNwdV93cml0ZXItPmNvdW50ID0gMDsKK30KKyAvKgorICogbXVzdCBob2xkIGNwdV93cml0ZXItPmxvY2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVzZV9jcHVfd3JpdGVyX2Zvcl9tb3VudChzdHJ1Y3QgbW50X3dyaXRlciAqY3B1X3dyaXRlciwKKwkJCQkJICBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlpZiAoY3B1X3dyaXRlci0+bW50ID09IG1udCkKKwkJcmV0dXJuOworCV9fY2xlYXJfbW50X2NvdW50KGNwdV93cml0ZXIpOworCWNwdV93cml0ZXItPm1udCA9IG1udDsKK30KKworLyoKKyAqIE1vc3Qgci9vIGNoZWNrcyBvbiBhIGZzIGFyZSBmb3Igb3BlcmF0aW9ucyB0aGF0IHRha2UKKyAqIGRpc2NyZXRlIGFtb3VudHMgb2YgdGltZSwgbGlrZSBhIHdyaXRlKCkgb3IgdW5saW5rKCkuCisgKiBXZSBtdXN0IGtlZXAgdHJhY2sgb2Ygd2hlbiB0aG9zZSBvcGVyYXRpb25zIHN0YXJ0CisgKiAoZm9yIHBlcm1pc3Npb24gY2hlY2tzKSBhbmQgd2hlbiB0aGV5IGVuZCwgc28gdGhhdAorICogd2UgY2FuIGRldGVybWluZSB3aGVuIHdyaXRlcyBhcmUgYWJsZSB0byBvY2N1ciB0bworICogYSBmaWxlc3lzdGVtLgorICovCisvKioKKyAqIG1udF93YW50X3dyaXRlIC0gZ2V0IHdyaXRlIGFjY2VzcyB0byBhIG1vdW50CisgKiBAbW50OiB0aGUgbW91bnQgb24gd2hpY2ggdG8gdGFrZSBhIHdyaXRlCisgKgorICogVGhpcyB0ZWxscyB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gdGhhdCBhIHdyaXRlIGlzCisgKiBhYm91dCB0byBiZSBwZXJmb3JtZWQgdG8gaXQsIGFuZCBtYWtlcyBzdXJlIHRoYXQKKyAqIHdyaXRlcyBhcmUgYWxsb3dlZCBiZWZvcmUgcmV0dXJuaW5nIHN1Y2Nlc3MuICBXaGVuCisgKiB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBtbnRfZHJvcF93cml0ZSgpCisgKiBtdXN0IGJlIGNhbGxlZC4gIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSByZWZjb3VudC4KKyAqLworaW50IG1udF93YW50X3dyaXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtbnRfd3JpdGVyICpjcHVfd3JpdGVyOworCisJY3B1X3dyaXRlciA9ICZnZXRfY3B1X3ZhcihtbnRfd3JpdGVycyk7CisJc3Bpbl9sb2NrKCZjcHVfd3JpdGVyLT5sb2NrKTsKKwlpZiAoX19tbnRfaXNfcmVhZG9ubHkobW50KSkgeworCQlyZXQgPSAtRVJPRlM7CisJCWdvdG8gb3V0OworCX0KKwl1c2VfY3B1X3dyaXRlcl9mb3JfbW91bnQoY3B1X3dyaXRlciwgbW50KTsKKwljcHVfd3JpdGVyLT5jb3VudCsrOworb3V0OgorCXNwaW5fdW5sb2NrKCZjcHVfd3JpdGVyLT5sb2NrKTsKKwlwdXRfY3B1X3ZhcihtbnRfd3JpdGVycyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1udF93YW50X3dyaXRlKTsKKworc3RhdGljIHZvaWQgbG9ja19tbnRfd3JpdGVycyh2b2lkKQoreworCWludCBjcHU7CisJc3RydWN0IG1udF93cml0ZXIgKmNwdV93cml0ZXI7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWNwdV93cml0ZXIgPSAmcGVyX2NwdShtbnRfd3JpdGVycywgY3B1KTsKKwkJc3Bpbl9sb2NrKCZjcHVfd3JpdGVyLT5sb2NrKTsKKwkJX19jbGVhcl9tbnRfY291bnQoY3B1X3dyaXRlcik7CisJCWNwdV93cml0ZXItPm1udCA9IE5VTEw7CisJfQorfQorCisvKgorICogVGhlc2UgcGVyLWNwdSB3cml0ZSBjb3VudHMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGhhdmUKKyAqIG1hdGNoZWQgaW5jcmVtZW50cyBhbmQgZGVjcmVtZW50cyBvbiBhbnkgZ2l2ZW4gY3B1LgorICogQSBmaWxlIG9wZW4oKWVkIGZvciB3cml0ZSBvbiBvbmUgY3B1IGFuZCBjbG9zZSgpZCBvbgorICogYW5vdGhlciBjcHUgd2lsbCBpbWJhbGFuY2UgdGhpcyBjb3VudC4gIE1ha2Ugc3VyZSBpdAorICogZG9lcyBub3QgZ2V0IHRvbyBmYXIgb3V0IG9mIHdoYWNrLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfd3JpdGVfY291bnRfdW5kZXJmbG93KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWlmIChhdG9taWNfcmVhZCgmbW50LT5fX21udF93cml0ZXJzKSA+PQorCSAgICBNTlRfV1JJVEVSX1VOREVSRkxPV19MSU1JVCkKKwkJcmV0dXJuOworCS8qCisJICogSXQgaXNuJ3QgbmVjZXNzYXJ5IHRvIGhvbGQgYWxsIG9mIHRoZSBsb2NrcworCSAqIGF0IHRoZSBzYW1lIHRpbWUsIGJ1dCBkb2luZyBpdCB0aGlzIHdheSBtYWtlcworCSAqIHVzIHNoYXJlIGEgbG90IG1vcmUgY29kZS4KKwkgKi8KKwlsb2NrX21udF93cml0ZXJzKCk7CisJLyoKKwkgKiB2ZnNtb3VudF9sb2NrIGlzIGZvciBtbnRfZmxhZ3MuCisJICovCisJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkvKgorCSAqIElmIGNvYWxlc2NpbmcgdGhlIHBlci1jcHUgd3JpdGVyIGNvdW50cyBkaWQgbm90CisJICogZ2V0IHVzIGJhY2sgdG8gYSBwb3NpdGl2ZSB3cml0ZXIgY291bnQsIHdlIGhhdmUKKwkgKiBhIGJ1Zy4KKwkgKi8KKwlpZiAoKGF0b21pY19yZWFkKCZtbnQtPl9fbW50X3dyaXRlcnMpIDwgMCkgJiYKKwkgICAgIShtbnQtPm1udF9mbGFncyAmIE1OVF9JTUJBTEFOQ0VEX1dSSVRFX0NPVU5UKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibGVhayBkZXRlY3RlZCBvbiBtb3VudCglcCkgd3JpdGVycyAiCisJCQkJImNvdW50OiAlZFxuIiwKKwkJCW1udCwgYXRvbWljX3JlYWQoJm1udC0+X19tbnRfd3JpdGVycykpOworCQlXQVJOX09OKDEpOworCQkvKiB1c2UgdGhlIGZsYWcgdG8ga2VlcCB0aGUgZG1lc2cgc3BhbSBkb3duICovCisJCW1udC0+bW50X2ZsYWdzIHw9IE1OVF9JTUJBTEFOQ0VEX1dSSVRFX0NPVU5UOworCX0KKwlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CisJdW5sb2NrX21udF93cml0ZXJzKCk7Cit9CisKKy8qKgorICogbW50X2Ryb3Bfd3JpdGUgLSBnaXZlIHVwIHdyaXRlIGFjY2VzcyB0byBhIG1vdW50CisgKiBAbW50OiB0aGUgbW91bnQgb24gd2hpY2ggdG8gZ2l2ZSB1cCB3cml0ZSBhY2Nlc3MKKyAqCisgKiBUZWxscyB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gdGhhdCB3ZSBhcmUgZG9uZQorICogcGVyZm9ybWluZyB3cml0ZXMgdG8gaXQuICBNdXN0IGJlIG1hdGNoZWQgd2l0aAorICogbW50X3dhbnRfd3JpdGUoKSBjYWxsIGFib3ZlLgorICovCit2b2lkIG1udF9kcm9wX3dyaXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWludCBtdXN0X2NoZWNrX3VuZGVyZmxvdyA9IDA7CisJc3RydWN0IG1udF93cml0ZXIgKmNwdV93cml0ZXI7CisKKwljcHVfd3JpdGVyID0gJmdldF9jcHVfdmFyKG1udF93cml0ZXJzKTsKKwlzcGluX2xvY2soJmNwdV93cml0ZXItPmxvY2spOworCisJdXNlX2NwdV93cml0ZXJfZm9yX21vdW50KGNwdV93cml0ZXIsIG1udCk7CisJaWYgKGNwdV93cml0ZXItPmNvdW50ID4gMCkgeworCQljcHVfd3JpdGVyLT5jb3VudC0tOworCX0gZWxzZSB7CisJCW11c3RfY2hlY2tfdW5kZXJmbG93ID0gMTsKKwkJYXRvbWljX2RlYygmbW50LT5fX21udF93cml0ZXJzKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3B1X3dyaXRlci0+bG9jayk7CisJLyoKKwkgKiBMb2dpY2FsbHksIHdlIGNvdWxkIGNhbGwgdGhpcyBlYWNoIHRpbWUsCisJICogYnV0IHRoZSBfX21udF93cml0ZXJzIGNhY2hlbGluZSB0ZW5kcyB0bworCSAqIGJlIGNvbGQsIGFuZCBtYWtlcyB0aGlzIGV4cGVuc2l2ZS4KKwkgKi8KKwlpZiAobXVzdF9jaGVja191bmRlcmZsb3cpCisJCWhhbmRsZV93cml0ZV9jb3VudF91bmRlcmZsb3cobW50KTsKKwkvKgorCSAqIFRoaXMgY291bGQgYmUgZG9uZSByaWdodCBhZnRlciB0aGUgc3BpbmxvY2sKKwkgKiBpcyB0YWtlbiBiZWNhdXNlIHRoZSBzcGlubG9jayBrZWVwcyB1cyBvbgorCSAqIHRoZSBjcHUsIGFuZCBkaXNhYmxlcyBwcmVlbXB0aW9uLiAgSG93ZXZlciwKKwkgKiBwdXR0aW5nIGl0IGhlcmUgYm91bmRzIHRoZSBhbW91bnQgdGhhdAorCSAqIF9fbW50X3dyaXRlcnMgY2FuIHVuZGVyZmxvdy4gIFdpdGhvdXQgaXQsCisJICogd2UgY291bGQgdGhlb3JldGljYWxseSB3cmFwIF9fbW50X3dyaXRlcnMuCisJICovCisJcHV0X2NwdV92YXIobW50X3dyaXRlcnMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobW50X2Ryb3Bfd3JpdGUpOworCitzdGF0aWMgaW50IG1udF9tYWtlX3JlYWRvbmx5KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWludCByZXQgPSAwOworCisJbG9ja19tbnRfd3JpdGVycygpOworCS8qCisJICogV2l0aCBhbGwgdGhlIGxvY2tzIGhlbGQsIHRoaXMgdmFsdWUgaXMgc3RhYmxlCisJICovCisJaWYgKGF0b21pY19yZWFkKCZtbnQtPl9fbW50X3dyaXRlcnMpID4gMCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwkvKgorCSAqIG5vYm9keSBjYW4gZG8gYSBzdWNjZXNzZnVsIG1udF93YW50X3dyaXRlKCkgd2l0aCBhbGwKKwkgKiBvZiB0aGUgY291bnRzIGluIE1OVF9ERU5JRURfV1JJVEUgYW5kIHRoZSBsb2NrcyBoZWxkLgorCSAqLworCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CisJaWYgKCFyZXQpCisJCW1udC0+bW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWTsKKwlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CitvdXQ6CisJdW5sb2NrX21udF93cml0ZXJzKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19tbnRfdW5tYWtlX3JlYWRvbmx5KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CisJbW50LT5tbnRfZmxhZ3MgJj0gfk1OVF9SRUFET05MWTsKKwlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7Cit9CisKIGludCBzaW1wbGVfc2V0X21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAltbnQtPm1udF9zYiA9IHNiOwpAQCAtMTU1LDE1ICs0MTYsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGRldGFjaF9tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBuYW1laWRhdGEgKm9sZF9uZCkKK3N0YXRpYyB2b2lkIGRldGFjaF9tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBwYXRoICpvbGRfcGF0aCkKIHsKLQlvbGRfbmQtPnBhdGguZGVudHJ5ID0gbW50LT5tbnRfbW91bnRwb2ludDsKLQlvbGRfbmQtPnBhdGgubW50ID0gbW50LT5tbnRfcGFyZW50OworCW9sZF9wYXRoLT5kZW50cnkgPSBtbnQtPm1udF9tb3VudHBvaW50OworCW9sZF9wYXRoLT5tbnQgPSBtbnQtPm1udF9wYXJlbnQ7CiAJbW50LT5tbnRfcGFyZW50ID0gbW50OwogCW1udC0+bW50X21vdW50cG9pbnQgPSBtbnQtPm1udF9yb290OwogCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2NoaWxkKTsKIAlsaXN0X2RlbF9pbml0KCZtbnQtPm1udF9oYXNoKTsKLQlvbGRfbmQtPnBhdGguZGVudHJ5LT5kX21vdW50ZWQtLTsKKwlvbGRfcGF0aC0+ZGVudHJ5LT5kX21vdW50ZWQtLTsKIH0KIAogdm9pZCBtbnRfc2V0X21vdW50cG9pbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKQEAgLTE3NCwxMiArNDM1LDEyIEBACiAJZGVudHJ5LT5kX21vdW50ZWQrKzsKIH0KIAotc3RhdGljIHZvaWQgYXR0YWNoX21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCitzdGF0aWMgdm9pZCBhdHRhY2hfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKLQltbnRfc2V0X21vdW50cG9pbnQobmQtPnBhdGgubW50LCBuZC0+cGF0aC5kZW50cnksIG1udCk7CisJbW50X3NldF9tb3VudHBvaW50KHBhdGgtPm1udCwgcGF0aC0+ZGVudHJ5LCBtbnQpOwogCWxpc3RfYWRkX3RhaWwoJm1udC0+bW50X2hhc2gsIG1vdW50X2hhc2h0YWJsZSArCi0JCQloYXNoKG5kLT5wYXRoLm1udCwgbmQtPnBhdGguZGVudHJ5KSk7Ci0JbGlzdF9hZGRfdGFpbCgmbW50LT5tbnRfY2hpbGQsICZuZC0+cGF0aC5tbnQtPm1udF9tb3VudHMpOworCQkJaGFzaChwYXRoLT5tbnQsIHBhdGgtPmRlbnRyeSkpOworCWxpc3RfYWRkX3RhaWwoJm1udC0+bW50X2NoaWxkLCAmcGF0aC0+bW50LT5tbnRfbW91bnRzKTsKIH0KIAogLyoKQEAgLTI2MiwxMCArNTIzLDggQEAKIAkJLyogc3RpY2sgdGhlIGR1cGxpY2F0ZSBtb3VudCBvbiB0aGUgc2FtZSBleHBpcnkgbGlzdAogCQkgKiBhcyB0aGUgb3JpZ2luYWwgaWYgdGhhdCB3YXMgb24gb25lICovCiAJCWlmIChmbGFnICYgQ0xfRVhQSVJFKSB7Ci0JCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwogCQkJaWYgKCFsaXN0X2VtcHR5KCZvbGQtPm1udF9leHBpcmUpKQogCQkJCWxpc3RfYWRkKCZtbnQtPm1udF9leHBpcmUsICZvbGQtPm1udF9leHBpcmUpOwotCQkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCQl9CiAJfQogCXJldHVybiBtbnQ7CkBAIC0yNzMsNyArNTMyLDM2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKKwlpbnQgY3B1OwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtPm1udF9zYjsKKwkvKgorCSAqIFdlIGRvbid0IGhhdmUgdG8gaG9sZCBhbGwgb2YgdGhlIGxvY2tzIGF0IHRoZQorCSAqIHNhbWUgdGltZSBoZXJlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ3JlIHRoZQorCSAqIGxhc3QgcmVmZXJlbmNlIHRvIG1udCBhbmQgdGhhdCBubyBuZXcgd3JpdGVycworCSAqIGNhbiBjb21lIGluLgorCSAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3RydWN0IG1udF93cml0ZXIgKmNwdV93cml0ZXIgPSAmcGVyX2NwdShtbnRfd3JpdGVycywgY3B1KTsKKwkJaWYgKGNwdV93cml0ZXItPm1udCAhPSBtbnQpCisJCQljb250aW51ZTsKKwkJc3Bpbl9sb2NrKCZjcHVfd3JpdGVyLT5sb2NrKTsKKwkJYXRvbWljX2FkZChjcHVfd3JpdGVyLT5jb3VudCwgJm1udC0+X19tbnRfd3JpdGVycyk7CisJCWNwdV93cml0ZXItPmNvdW50ID0gMDsKKwkJLyoKKwkJICogTWlnaHQgYXMgd2VsbCBkbyB0aGlzIHNvIHRoYXQgbm8gb25lCisJCSAqIGV2ZXIgc2VlcyB0aGUgcG9pbnRlciBhbmQgZXhwZWN0cworCQkgKiBpdCB0byBiZSB2YWxpZC4KKwkJICovCisJCWNwdV93cml0ZXItPm1udCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrKCZjcHVfd3JpdGVyLT5sb2NrKTsKKwl9CisJLyoKKwkgKiBUaGlzIHByb2JhYmx5IGluZGljYXRlcyB0aGF0IHNvbWVib2R5IG1lc3NlZAorCSAqIHVwIGEgbW50X3dhbnQvZHJvcF93cml0ZSgpIHBhaXIuICBJZiB0aGlzCisJICogaGFwcGVucywgdGhlIGZpbGVzeXN0ZW0gd2FzIHByb2JhYmx5IHVuYWJsZQorCSAqIHRvIG1ha2Ugci93LT5yL28gdHJhbnNpdGlvbnMuCisJICovCisJV0FSTl9PTihhdG9taWNfcmVhZCgmbW50LT5fX21udF93cml0ZXJzKSk7CiAJZHB1dChtbnQtPm1udF9yb290KTsKIAlmcmVlX3Zmc21udChtbnQpOwogCWRlYWN0aXZhdGVfc3VwZXIoc2IpOwpAQCAtNDE5LDcgKzcwNyw3IEBACiAJCXNlcV9wdXRjKG0sICcuJyk7CiAJCW1hbmdsZShtLCBtbnQtPm1udF9zYi0+c19zdWJ0eXBlKTsKIAl9Ci0Jc2VxX3B1dHMobSwgbW50LT5tbnRfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkgPyAiIHJvIiA6ICIgcnciKTsKKwlzZXFfcHV0cyhtLCBfX21udF9pc19yZWFkb25seShtbnQpID8gIiBybyIgOiAiIHJ3Iik7CiAJZm9yIChmc19pbmZvcCA9IGZzX2luZm87IGZzX2luZm9wLT5mbGFnOyBmc19pbmZvcCsrKSB7CiAJCWlmIChtbnQtPm1udF9zYi0+c19mbGFncyAmIGZzX2luZm9wLT5mbGFnKQogCQkJc2VxX3B1dHMobSwgZnNfaW5mb3AtPnN0cik7CkBAIC01NDgsNiArODM2LDcgQEAKIAkJCW0gPSBtbnQtPm1udF9wYXJlbnQ7CiAJCQltbnQtPm1udF9tb3VudHBvaW50ID0gbW50LT5tbnRfcm9vdDsKIAkJCW1udC0+bW50X3BhcmVudCA9IG1udDsKKwkJCW0tPm1udF9naG9zdHMtLTsKIAkJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAkJCWRwdXQoZGVudHJ5KTsKIAkJCW1udHB1dChtKTsKQEAgLTU3MiwxMiArODYxLDE2IEBACiAJCV9fdG91Y2hfbW50X25hbWVzcGFjZShwLT5tbnRfbnMpOwogCQlwLT5tbnRfbnMgPSBOVUxMOwogCQlsaXN0X2RlbF9pbml0KCZwLT5tbnRfY2hpbGQpOwotCQlpZiAocC0+bW50X3BhcmVudCAhPSBwKQorCQlpZiAocC0+bW50X3BhcmVudCAhPSBwKSB7CisJCQlwLT5tbnRfcGFyZW50LT5tbnRfZ2hvc3RzKys7CiAJCQlwLT5tbnRfbW91bnRwb2ludC0+ZF9tb3VudGVkLS07CisJCX0KIAkJY2hhbmdlX21udF9wcm9wYWdhdGlvbihwLCBNU19QUklWQVRFKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNocmlua19zdWJtb3VudHMoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBsaXN0X2hlYWQgKnVtb3VudHMpOworCiBzdGF0aWMgaW50IGRvX3Vtb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtbnQtPm1udF9zYjsKQEAgLTY1MCw2ICs5NDMsOSBAQAogCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CiAJZXZlbnQrKzsKIAorCWlmICghKGZsYWdzICYgTU5UX0RFVEFDSCkpCisJCXNocmlua19zdWJtb3VudHMobW50LCAmdW1vdW50X2xpc3QpOworCiAJcmV0dmFsID0gLUVCVVNZOwogCWlmIChmbGFncyAmIE1OVF9ERVRBQ0ggfHwgIXByb3BhZ2F0ZV9tb3VudF9idXN5KG1udCwgMikpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZtbnQtPm1udF9saXN0KSkKQEAgLTc0NCw3ICsxMDQwLDcgQEAKIAkJCQkJaW50IGZsYWcpCiB7CiAJc3RydWN0IHZmc21vdW50ICpyZXMsICpwLCAqcSwgKnIsICpzOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IHBhdGggcGF0aDsKIAogCWlmICghKGZsYWcgJiBDTF9DT1BZX0FMTCkgJiYgSVNfTU5UX1VOQklOREFCTEUobW50KSkKIAkJcmV0dXJuIE5VTEw7CkBAIC03NjksMTQgKzEwNjUsMTQgQEAKIAkJCQlxID0gcS0+bW50X3BhcmVudDsKIAkJCX0KIAkJCXAgPSBzOwotCQkJbmQucGF0aC5tbnQgPSBxOwotCQkJbmQucGF0aC5kZW50cnkgPSBwLT5tbnRfbW91bnRwb2ludDsKKwkJCXBhdGgubW50ID0gcTsKKwkJCXBhdGguZGVudHJ5ID0gcC0+bW50X21vdW50cG9pbnQ7CiAJCQlxID0gY2xvbmVfbW50KHAsIHAtPm1udF9yb290LCBmbGFnKTsKIAkJCWlmICghcSkKIAkJCQlnb3RvIEVub21lbTsKIAkJCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CiAJCQlsaXN0X2FkZF90YWlsKCZxLT5tbnRfbGlzdCwgJnJlcy0+bW50X2xpc3QpOwotCQkJYXR0YWNoX21udChxLCAmbmQpOworCQkJYXR0YWNoX21udChxLCAmcGF0aCk7CiAJCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CiAJCX0KIAl9CkBAIC04NzYsMTEgKzExNzIsMTEgQEAKICAqIGluIGFsbG9jYXRpb25zLgogICovCiBzdGF0aWMgaW50IGF0dGFjaF9yZWN1cnNpdmVfbW50KHN0cnVjdCB2ZnNtb3VudCAqc291cmNlX21udCwKLQkJCXN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgbmFtZWlkYXRhICpwYXJlbnRfbmQpCisJCQlzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IHBhdGggKnBhcmVudF9wYXRoKQogewogCUxJU1RfSEVBRCh0cmVlX2xpc3QpOwotCXN0cnVjdCB2ZnNtb3VudCAqZGVzdF9tbnQgPSBuZC0+cGF0aC5tbnQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVzdF9kZW50cnkgPSBuZC0+cGF0aC5kZW50cnk7CisJc3RydWN0IHZmc21vdW50ICpkZXN0X21udCA9IHBhdGgtPm1udDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZXN0X2RlbnRyeSA9IHBhdGgtPmRlbnRyeTsKIAlzdHJ1Y3QgdmZzbW91bnQgKmNoaWxkLCAqcDsKIAogCWlmIChwcm9wYWdhdGVfbW50KGRlc3RfbW50LCBkZXN0X2RlbnRyeSwgc291cmNlX21udCwgJnRyZWVfbGlzdCkpCkBAIC04OTIsOSArMTE4OCw5IEBACiAJfQogCiAJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQlpZiAocGFyZW50X25kKSB7Ci0JCWRldGFjaF9tbnQoc291cmNlX21udCwgcGFyZW50X25kKTsKLQkJYXR0YWNoX21udChzb3VyY2VfbW50LCBuZCk7CisJaWYgKHBhcmVudF9wYXRoKSB7CisJCWRldGFjaF9tbnQoc291cmNlX21udCwgcGFyZW50X3BhdGgpOworCQlhdHRhY2hfbW50KHNvdXJjZV9tbnQsIHBhdGgpOwogCQl0b3VjaF9tbnRfbmFtZXNwYWNlKGN1cnJlbnQtPm5zcHJveHktPm1udF9ucyk7CiAJfSBlbHNlIHsKIAkJbW50X3NldF9tb3VudHBvaW50KGRlc3RfbW50LCBkZXN0X2RlbnRyeSwgc291cmNlX21udCk7CkBAIC05MzAsNyArMTIyNiw3IEBACiAKIAllcnIgPSAtRU5PRU5UOwogCWlmIChJU19ST09UKG5kLT5wYXRoLmRlbnRyeSkgfHwgIWRfdW5oYXNoZWQobmQtPnBhdGguZGVudHJ5KSkKLQkJZXJyID0gYXR0YWNoX3JlY3Vyc2l2ZV9tbnQobW50LCBuZCwgTlVMTCk7CisJCWVyciA9IGF0dGFjaF9yZWN1cnNpdmVfbW50KG1udCwgJm5kLT5wYXRoLCBOVUxMKTsKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyKQpAQCAtMTAxMyw2ICsxMzA5LDIzIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBjaGFuZ2VfbW91bnRfZmxhZ3Moc3RydWN0IHZmc21vdW50ICptbnQsIGludCBtc19mbGFncykKK3sKKwlpbnQgZXJyb3IgPSAwOworCWludCByZWFkb25seV9yZXF1ZXN0ID0gMDsKKworCWlmIChtc19mbGFncyAmIE1TX1JET05MWSkKKwkJcmVhZG9ubHlfcmVxdWVzdCA9IDE7CisJaWYgKHJlYWRvbmx5X3JlcXVlc3QgPT0gX19tbnRfaXNfcmVhZG9ubHkobW50KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVhZG9ubHlfcmVxdWVzdCkKKwkJZXJyb3IgPSBtbnRfbWFrZV9yZWFkb25seShtbnQpOworCWVsc2UKKwkJX19tbnRfdW5tYWtlX3JlYWRvbmx5KG1udCk7CisJcmV0dXJuIGVycm9yOworfQorCiAvKgogICogY2hhbmdlIGZpbGVzeXN0ZW0gZmxhZ3MuIGRpciBzaG91bGQgYmUgYSBwaHlzaWNhbCByb290IG9mIGZpbGVzeXN0ZW0uCiAgKiBJZiB5b3UndmUgbW91bnRlZCBhIG5vbi1yb290IGRpcmVjdG9yeSBzb21ld2hlcmUgYW5kIHdhbnQgdG8gZG8gcmVtb3VudApAQCAtMTAzNSw3ICsxMzQ4LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG93bl93cml0ZSgmc2ItPnNfdW1vdW50KTsKLQllcnIgPSBkb19yZW1vdW50X3NiKHNiLCBmbGFncywgZGF0YSwgMCk7CisJaWYgKGZsYWdzICYgTVNfQklORCkKKwkJZXJyID0gY2hhbmdlX21vdW50X2ZsYWdzKG5kLT5wYXRoLm1udCwgZmxhZ3MpOworCWVsc2UKKwkJZXJyID0gZG9fcmVtb3VudF9zYihzYiwgZmxhZ3MsIGRhdGEsIDApOwogCWlmICghZXJyKQogCQluZC0+cGF0aC5tbnQtPm1udF9mbGFncyA9IG1udF9mbGFnczsKIAl1cF93cml0ZSgmc2ItPnNfdW1vdW50KTsKQEAgLTEwNTksNyArMTM3NSw4IEBACiAgKi8KIHN0YXRpYyBub2lubGluZSBpbnQgZG9fbW92ZV9tb3VudChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY2hhciAqb2xkX25hbWUpCiB7Ci0Jc3RydWN0IG5hbWVpZGF0YSBvbGRfbmQsIHBhcmVudF9uZDsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG9sZF9uZDsKKwlzdHJ1Y3QgcGF0aCBwYXJlbnRfcGF0aDsKIAlzdHJ1Y3QgdmZzbW91bnQgKnA7CiAJaW50IGVyciA9IDA7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQpAQCAtMTExNCwyMSArMTQzMSwxOSBAQAogCQlpZiAocCA9PSBvbGRfbmQucGF0aC5tbnQpCiAJCQlnb3RvIG91dDE7CiAKLQllcnIgPSBhdHRhY2hfcmVjdXJzaXZlX21udChvbGRfbmQucGF0aC5tbnQsIG5kLCAmcGFyZW50X25kKTsKKwllcnIgPSBhdHRhY2hfcmVjdXJzaXZlX21udChvbGRfbmQucGF0aC5tbnQsICZuZC0+cGF0aCwgJnBhcmVudF9wYXRoKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDE7CiAKLQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwogCS8qIGlmIHRoZSBtb3VudCBpcyBtb3ZlZCwgaXQgc2hvdWxkIG5vIGxvbmdlciBiZSBleHBpcmUKIAkgKiBhdXRvbWF0aWNhbGx5ICovCiAJbGlzdF9kZWxfaW5pdCgmb2xkX25kLnBhdGgubW50LT5tbnRfZXhwaXJlKTsKLQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CiBvdXQxOgogCW11dGV4X3VubG9jaygmbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIG91dDoKIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJaWYgKCFlcnIpCi0JCXBhdGhfcHV0KCZwYXJlbnRfbmQucGF0aCk7CisJCXBhdGhfcHV0KCZwYXJlbnRfcGF0aCk7CiAJcGF0aF9wdXQoJm9sZF9uZC5wYXRoKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTE4OSwxMiArMTUwNCw5IEBACiAJaWYgKChlcnIgPSBncmFmdF90cmVlKG5ld21udCwgbmQpKSkKIAkJZ290byB1bmxvY2s7CiAKLQlpZiAoZnNsaXN0KSB7Ci0JCS8qIGFkZCB0byB0aGUgc3BlY2lmaWVkIGV4cGlyYXRpb24gbGlzdCAqLwotCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOworCWlmIChmc2xpc3QpIC8qIGFkZCB0byB0aGUgc3BlY2lmaWVkIGV4cGlyYXRpb24gbGlzdCAqLwogCQlsaXN0X2FkZF90YWlsKCZuZXdtbnQtPm1udF9leHBpcmUsIGZzbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQl9CisKIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJcmV0dXJuIDA7CiAKQEAgLTEyMDYsNzUgKzE1MTgsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkb19hZGRfbW91bnQpOwogCi1zdGF0aWMgdm9pZCBleHBpcmVfbW91bnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBsaXN0X2hlYWQgKm1vdW50cywKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICp1bW91bnRzKQotewotCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7Ci0KLQkvKgotCSAqIENoZWNrIGlmIG1vdW50IGlzIHN0aWxsIGF0dGFjaGVkLCBpZiBub3QsIGxldCB3aG9ldmVyIGhvbGRzIGl0IGRlYWwKLQkgKiB3aXRoIHRoZSBzdWNrZXIKLQkgKi8KLQlpZiAobW50LT5tbnRfcGFyZW50ID09IG1udCkgewotCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIHRoYXQgaXQgaXMgc3RpbGwgZGVhZDogdGhlIGNvdW50IHNob3VsZCBub3cgYmUgMiAtIGFzCi0JICogY29udHJpYnV0ZWQgYnkgdGhlIHZmc21vdW50IHBhcmVudCBhbmQgdGhlIG1udGdldCBhYm92ZQotCSAqLwotCWlmICghcHJvcGFnYXRlX21vdW50X2J1c3kobW50LCAyKSkgewotCQkvKiBkZWxldGUgZnJvbSB0aGUgbmFtZXNwYWNlICovCi0JCXRvdWNoX21udF9uYW1lc3BhY2UobW50LT5tbnRfbnMpOwotCQlsaXN0X2RlbF9pbml0KCZtbnQtPm1udF9saXN0KTsKLQkJbW50LT5tbnRfbnMgPSBOVUxMOwotCQl1bW91bnRfdHJlZShtbnQsIDEsIHVtb3VudHMpOwotCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogU29tZW9uZSBicm91Z2h0IGl0IGJhY2sgdG8gbGlmZSB3aGlsc3Qgd2UgZGlkbid0IGhhdmUgYW55Ci0JCSAqIGxvY2tzIGhlbGQgc28gcmV0dXJuIGl0IHRvIHRoZSBleHBpcmF0aW9uIGxpc3QKLQkJICovCi0JCWxpc3RfYWRkX3RhaWwoJm1udC0+bW50X2V4cGlyZSwgbW91bnRzKTsKLQkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwotCX0KLX0KLQotLyoKLSAqIGdvIHRocm91Z2ggdGhlIHZmc21vdW50cyB3ZSd2ZSBqdXN0IGNvbnNpZ25lZCB0byB0aGUgZ3JhdmV5YXJkIHRvCi0gKiAtIGNoZWNrIHRoYXQgdGhleSdyZSBzdGlsbCBkZWFkCi0gKiAtIGRlbGV0ZSB0aGUgdmZzbW91bnQgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbmFtZXNwYWNlIHVuZGVyIGxvY2sKLSAqIC0gZGlzcG9zZSBvZiB0aGUgY29ycHNlCi0gKi8KLXN0YXRpYyB2b2lkIGV4cGlyZV9tb3VudF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmdyYXZleWFyZCwgc3RydWN0IGxpc3RfaGVhZCAqbW91bnRzKQotewotCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpuczsKLQlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKLQotCXdoaWxlICghbGlzdF9lbXB0eShncmF2ZXlhcmQpKSB7Ci0JCUxJU1RfSEVBRCh1bW91bnRzKTsKLQkJbW50ID0gbGlzdF9maXJzdF9lbnRyeShncmF2ZXlhcmQsIHN0cnVjdCB2ZnNtb3VudCwgbW50X2V4cGlyZSk7Ci0JCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2V4cGlyZSk7Ci0KLQkJLyogZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIG5hbWVzcGFjZSBpcyBkZWFkIC0gYWxsIHRoZQotCQkgKiB2ZnNtb3VudHMgZnJvbSBpdCBhcmUgZ29pbmcgYXdheSBhbnl3YXkgKi8KLQkJbnMgPSBtbnQtPm1udF9uczsKLQkJaWYgKCFucyB8fCAhbnMtPnJvb3QpCi0JCQljb250aW51ZTsKLQkJZ2V0X21udF9ucyhucyk7Ci0KLQkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwotCQlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKLQkJZXhwaXJlX21vdW50KG1udCwgbW91bnRzLCAmdW1vdW50cyk7Ci0JCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKLQkJcmVsZWFzZV9tb3VudHMoJnVtb3VudHMpOwotCQltbnRwdXQobW50KTsKLQkJcHV0X21udF9ucyhucyk7Ci0JCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7Ci0JfQotfQotCiAvKgogICogcHJvY2VzcyBhIGxpc3Qgb2YgZXhwaXJhYmxlIG1vdW50cG9pbnRzIHdpdGggdGhlIGludGVudCBvZiBkaXNjYXJkaW5nIGFueQogICogbW91bnRwb2ludHMgdGhhdCBhcmVuJ3QgaW4gdXNlIGFuZCBoYXZlbid0IGJlZW4gdG91Y2hlZCBzaW5jZSBsYXN0IHdlIGNhbWUKQEAgLTEyODQsMTAgKzE1MjcsMTIgQEAKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCwgKm5leHQ7CiAJTElTVF9IRUFEKGdyYXZleWFyZCk7CisJTElTVF9IRUFEKHVtb3VudHMpOwogCiAJaWYgKGxpc3RfZW1wdHkobW91bnRzKSkKIAkJcmV0dXJuOwogCisJZG93bl93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAogCS8qIGV4dHJhY3QgZnJvbSB0aGUgZXhwaXJhdGlvbiBsaXN0IGV2ZXJ5IHZmc21vdW50IHRoYXQgbWF0Y2hlcyB0aGUKQEAgLTEyOTgsMTYgKzE1NDMsMTkgQEAKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW50LCBuZXh0LCBtb3VudHMsIG1udF9leHBpcmUpIHsKIAkJaWYgKCF4Y2hnKCZtbnQtPm1udF9leHBpcnlfbWFyaywgMSkgfHwKLQkJICAgIGF0b21pY19yZWFkKCZtbnQtPm1udF9jb3VudCkgIT0gMSkKKwkJCXByb3BhZ2F0ZV9tb3VudF9idXN5KG1udCwgMSkpCiAJCQljb250aW51ZTsKLQotCQltbnRnZXQobW50KTsKIAkJbGlzdF9tb3ZlKCZtbnQtPm1udF9leHBpcmUsICZncmF2ZXlhcmQpOwogCX0KLQotCWV4cGlyZV9tb3VudF9saXN0KCZncmF2ZXlhcmQsIG1vdW50cyk7Ci0KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmdyYXZleWFyZCkpIHsKKwkJbW50ID0gbGlzdF9maXJzdF9lbnRyeSgmZ3JhdmV5YXJkLCBzdHJ1Y3QgdmZzbW91bnQsIG1udF9leHBpcmUpOworCQl0b3VjaF9tbnRfbmFtZXNwYWNlKG1udC0+bW50X25zKTsKKwkJdW1vdW50X3RyZWUobW50LCAxLCAmdW1vdW50cyk7CisJfQogCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CisKKwlyZWxlYXNlX21vdW50cygmdW1vdW50cyk7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKG1hcmtfbW91bnRzX2Zvcl9leHBpcnkpOwpAQCAtMTM0Myw3ICsxNTkxLDYgQEAKIAkJfQogCiAJCWlmICghcHJvcGFnYXRlX21vdW50X2J1c3kobW50LCAxKSkgewotCQkJbW50Z2V0KG1udCk7CiAJCQlsaXN0X21vdmVfdGFpbCgmbW50LT5tbnRfZXhwaXJlLCBncmF2ZXlhcmQpOwogCQkJZm91bmQrKzsKIAkJfQpAQCAtMTM2MywyMiArMTYxMCwyMiBAQAogICogcHJvY2VzcyBhIGxpc3Qgb2YgZXhwaXJhYmxlIG1vdW50cG9pbnRzIHdpdGggdGhlIGludGVudCBvZiBkaXNjYXJkaW5nIGFueQogICogc3VibW91bnRzIG9mIGEgc3BlY2lmaWMgcGFyZW50IG1vdW50cG9pbnQKICAqLwotdm9pZCBzaHJpbmtfc3VibW91bnRzKHN0cnVjdCB2ZnNtb3VudCAqbW91bnRwb2ludCwgc3RydWN0IGxpc3RfaGVhZCAqbW91bnRzKQorc3RhdGljIHZvaWQgc2hyaW5rX3N1Ym1vdW50cyhzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGxpc3RfaGVhZCAqdW1vdW50cykKIHsKIAlMSVNUX0hFQUQoZ3JhdmV5YXJkKTsKLQlpbnQgZm91bmQ7Ci0KLQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOworCXN0cnVjdCB2ZnNtb3VudCAqbTsKIAogCS8qIGV4dHJhY3Qgc3VibW91bnRzIG9mICdtb3VudHBvaW50JyBmcm9tIHRoZSBleHBpcmF0aW9uIGxpc3QgKi8KLQl3aGlsZSAoKGZvdW5kID0gc2VsZWN0X3N1Ym1vdW50cyhtb3VudHBvaW50LCAmZ3JhdmV5YXJkKSkgIT0gMCkKLQkJZXhwaXJlX21vdW50X2xpc3QoJmdyYXZleWFyZCwgbW91bnRzKTsKLQotCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwl3aGlsZSAoc2VsZWN0X3N1Ym1vdW50cyhtbnQsICZncmF2ZXlhcmQpKSB7CisJCXdoaWxlICghbGlzdF9lbXB0eSgmZ3JhdmV5YXJkKSkgeworCQkJbSA9IGxpc3RfZmlyc3RfZW50cnkoJmdyYXZleWFyZCwgc3RydWN0IHZmc21vdW50LAorCQkJCQkJbW50X2V4cGlyZSk7CisJCQl0b3VjaF9tbnRfbmFtZXNwYWNlKG1udC0+bW50X25zKTsKKwkJCXVtb3VudF90cmVlKG1udCwgMSwgdW1vdW50cyk7CisJCX0KKwl9CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKHNocmlua19zdWJtb3VudHMpOwotCiAvKgogICogU29tZSBjb3B5X2Zyb21fdXNlcigpIGltcGxlbWVudGF0aW9ucyBkbyBub3QgcmV0dXJuIHRoZSBleGFjdCBudW1iZXIgb2YKICAqIGJ5dGVzIHJlbWFpbmluZyB0byBjb3B5IG9uIGEgZmF1bHQuICBCdXQgY29weV9tb3VudF9vcHRpb25zKCkgcmVxdWlyZXMgdGhhdC4KQEAgLTE0ODgsNiArMTczNSw4IEBACiAJCW1udF9mbGFncyB8PSBNTlRfTk9ESVJBVElNRTsKIAlpZiAoZmxhZ3MgJiBNU19SRUxBVElNRSkKIAkJbW50X2ZsYWdzIHw9IE1OVF9SRUxBVElNRTsKKwlpZiAoZmxhZ3MgJiBNU19SRE9OTFkpCisJCW1udF9mbGFncyB8PSBNTlRfUkVBRE9OTFk7CiAKIAlmbGFncyAmPSB+KE1TX05PU1VJRCB8IE1TX05PRVhFQyB8IE1TX05PREVWIHwgTVNfQUNUSVZFIHwKIAkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UKTsKQEAgLTE2ODMsNyArMTkzMiw3IEBACiAJCXBhdGhfcHV0KCZvbGRfcHdkKTsKIH0KIAotc3RhdGljIHZvaWQgY2hyb290X2ZzX3JlZnMoc3RydWN0IG5hbWVpZGF0YSAqb2xkX25kLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZXdfbmQpCitzdGF0aWMgdm9pZCBjaHJvb3RfZnNfcmVmcyhzdHJ1Y3QgcGF0aCAqb2xkX3Jvb3QsIHN0cnVjdCBwYXRoICpuZXdfcm9vdCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOwpAQCAtMTY5NSwxMiArMTk0NCwxMiBAQAogCQlpZiAoZnMpIHsKIAkJCWF0b21pY19pbmMoJmZzLT5jb3VudCk7CiAJCQl0YXNrX3VubG9jayhwKTsKLQkJCWlmIChmcy0+cm9vdC5kZW50cnkgPT0gb2xkX25kLT5wYXRoLmRlbnRyeQotCQkJICAgICYmIGZzLT5yb290Lm1udCA9PSBvbGRfbmQtPnBhdGgubW50KQotCQkJCXNldF9mc19yb290KGZzLCAmbmV3X25kLT5wYXRoKTsKLQkJCWlmIChmcy0+cHdkLmRlbnRyeSA9PSBvbGRfbmQtPnBhdGguZGVudHJ5Ci0JCQkgICAgJiYgZnMtPnB3ZC5tbnQgPT0gb2xkX25kLT5wYXRoLm1udCkKLQkJCQlzZXRfZnNfcHdkKGZzLCAmbmV3X25kLT5wYXRoKTsKKwkJCWlmIChmcy0+cm9vdC5kZW50cnkgPT0gb2xkX3Jvb3QtPmRlbnRyeQorCQkJICAgICYmIGZzLT5yb290Lm1udCA9PSBvbGRfcm9vdC0+bW50KQorCQkJCXNldF9mc19yb290KGZzLCBuZXdfcm9vdCk7CisJCQlpZiAoZnMtPnB3ZC5kZW50cnkgPT0gb2xkX3Jvb3QtPmRlbnRyeQorCQkJICAgICYmIGZzLT5wd2QubW50ID09IG9sZF9yb290LT5tbnQpCisJCQkJc2V0X2ZzX3B3ZChmcywgbmV3X3Jvb3QpOwogCQkJcHV0X2ZzX3N0cnVjdChmcyk7CiAJCX0gZWxzZQogCQkJdGFza191bmxvY2socCk7CkBAIC0xNzM3LDcgKzE5ODYsOCBAQAogCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICogcHV0X29sZCkKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKnRtcDsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5ld19uZCwgb2xkX25kLCBwYXJlbnRfbmQsIHJvb3RfcGFyZW50LCB1c2VyX25kOworCXN0cnVjdCBuYW1laWRhdGEgbmV3X25kLCBvbGRfbmQsIHVzZXJfbmQ7CisJc3RydWN0IHBhdGggcGFyZW50X3BhdGgsIHJvb3RfcGFyZW50OwogCWludCBlcnJvcjsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTE4MTEsMTkgKzIwNjEsMTkgQEAKIAkJCWdvdG8gb3V0MzsKIAl9IGVsc2UgaWYgKCFpc19zdWJkaXIob2xkX25kLnBhdGguZGVudHJ5LCBuZXdfbmQucGF0aC5kZW50cnkpKQogCQlnb3RvIG91dDM7Ci0JZGV0YWNoX21udChuZXdfbmQucGF0aC5tbnQsICZwYXJlbnRfbmQpOworCWRldGFjaF9tbnQobmV3X25kLnBhdGgubW50LCAmcGFyZW50X3BhdGgpOwogCWRldGFjaF9tbnQodXNlcl9uZC5wYXRoLm1udCwgJnJvb3RfcGFyZW50KTsKIAkvKiBtb3VudCBvbGQgcm9vdCBvbiBwdXRfb2xkICovCi0JYXR0YWNoX21udCh1c2VyX25kLnBhdGgubW50LCAmb2xkX25kKTsKKwlhdHRhY2hfbW50KHVzZXJfbmQucGF0aC5tbnQsICZvbGRfbmQucGF0aCk7CiAJLyogbW91bnQgbmV3X3Jvb3Qgb24gLyAqLwogCWF0dGFjaF9tbnQobmV3X25kLnBhdGgubW50LCAmcm9vdF9wYXJlbnQpOwogCXRvdWNoX21udF9uYW1lc3BhY2UoY3VycmVudC0+bnNwcm94eS0+bW50X25zKTsKIAlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7Ci0JY2hyb290X2ZzX3JlZnMoJnVzZXJfbmQsICZuZXdfbmQpOworCWNocm9vdF9mc19yZWZzKCZ1c2VyX25kLnBhdGgsICZuZXdfbmQucGF0aCk7CiAJc2VjdXJpdHlfc2JfcG9zdF9waXZvdHJvb3QoJnVzZXJfbmQsICZuZXdfbmQpOwogCWVycm9yID0gMDsKLQlwYXRoX3B1dCgmcm9vdF9wYXJlbnQucGF0aCk7Ci0JcGF0aF9wdXQoJnBhcmVudF9uZC5wYXRoKTsKKwlwYXRoX3B1dCgmcm9vdF9wYXJlbnQpOworCXBhdGhfcHV0KCZwYXJlbnRfcGF0aCk7CiBvdXQyOgogCW11dGV4X3VubG9jaygmb2xkX25kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9pb2N0bC5jIGIvZnMvbmNwZnMvaW9jdGwuYwppbmRleCBjNjdiNGJkLi5hZDhmMTY3IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9pb2N0bC5jCisrKyBiL2ZzL25jcGZzL2lvY3RsLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMjYxLDcgKzI2Miw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX05DUEZTX05MUyAqLwogCi1pbnQgbmNwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBfX25jcF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyID0gTkNQX1NFUlZFUihpbm9kZSk7CkBAIC04MjIsNiArODIzLDU3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgbmNwX2lvY3RsX25lZWRfd3JpdGUodW5zaWduZWQgaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkNQX0lPQ19HRVRfRlNfSU5GTzoKKwljYXNlIE5DUF9JT0NfR0VUX0ZTX0lORk9fVjI6CisJY2FzZSBOQ1BfSU9DX05DUFJFUVVFU1Q6CisJY2FzZSBOQ1BfSU9DX1NFVERFTlRSWVRUTDoKKwljYXNlIE5DUF9JT0NfU0lHTl9JTklUOgorCWNhc2UgTkNQX0lPQ19MT0NLVU5MT0NLOgorCWNhc2UgTkNQX0lPQ19TRVRfU0lHTl9XQU5URUQ6CisJCXJldHVybiAxOworCWNhc2UgTkNQX0lPQ19HRVRPQkpFQ1ROQU1FOgorCWNhc2UgTkNQX0lPQ19TRVRPQkpFQ1ROQU1FOgorCWNhc2UgTkNQX0lPQ19HRVRQUklWQVRFREFUQToKKwljYXNlIE5DUF9JT0NfU0VUUFJJVkFURURBVEE6CisJY2FzZSBOQ1BfSU9DX1NFVENIQVJTRVRTOgorCWNhc2UgTkNQX0lPQ19HRVRDSEFSU0VUUzoKKwljYXNlIE5DUF9JT0NfQ09OTl9MT0dHRURfSU46CisJY2FzZSBOQ1BfSU9DX0dFVERFTlRSWVRUTDoKKwljYXNlIE5DUF9JT0NfR0VUTU9VTlRVSUQyOgorCWNhc2UgTkNQX0lPQ19TSUdOX1dBTlRFRDoKKwljYXNlIE5DUF9JT0NfR0VUUk9PVDoKKwljYXNlIE5DUF9JT0NfU0VUUk9PVDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJLyogdW5rb3duIElPQ1RMIGNvbW1hbmQsIGFzc3VtZSB3cml0ZSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKK2ludCBuY3BfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldDsKKworCWlmIChuY3BfaW9jdGxfbmVlZF93cml0ZShjbWQpKSB7CisJCS8qCisJCSAqIGluc2lkZSB0aGUgaW9jdGwoKSwgYW55IGZhaWx1cmVzIHdoaWNoCisJCSAqIGFyZSBiZWNhdXNlIG9mIGZpbGVfcGVybWlzc2lvbigpIGFyZQorCQkgKiAtRUFDQ0VTUywgc28gaXQgc2VlbXMgY29uc2lzdGVudCB0byBrZWVwCisJCSAqICB0aGF0IGhlcmUuCisJCSAqLworCQlpZiAobW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCkpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisJcmV0ID0gX19uY3BfaW9jdGwoaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwlpZiAobmNwX2lvY3RsX25lZWRfd3JpdGUoY21kKSkKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJcmV0dXJuIHJldDsKK30KKwogI2lmZGVmIENPTkZJR19DT01QQVQKIGxvbmcgbmNwX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2suYyBiL2ZzL25mcy9jYWxsYmFjay5jCmluZGV4IGVjYzA2YzYuLjY2NjQ4ZGQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFjay5jCisrKyBiL2ZzL25mcy9jYWxsYmFjay5jCkBAIC05Myw2ICs5Myw3IEBACiAJCXN2Y19wcm9jZXNzKHJxc3RwKTsKIAl9CiAKKwlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOwogCXN2Y19leGl0X3RocmVhZChycXN0cCk7CiAJbmZzX2NhbGxiYWNrX2luZm8ucGlkID0gMDsKIAljb21wbGV0ZSgmbmZzX2NhbGxiYWNrX2luZm8uc3RvcHBlZCk7CkBAIC0xNzEsNyArMTcyLDcgQEAKIHN0YXRpYyBpbnQgbmZzX2NhbGxiYWNrX2F1dGhlbnRpY2F0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7Ci0JY2hhciBidWZbUlBDX01BWF9BRERSQlVGTEVOXTsKKwlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKIAogCS8qIERvbid0IHRhbGsgdG8gc3RyYW5nZXJzICovCiAJY2xwID0gbmZzX2ZpbmRfY2xpZW50KHN2Y19hZGRyKHJxc3RwKSwgNCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKaW5kZXggYzYzZWI3Mi4uMTM2MTlkMiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jCisrKyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJaWYgKCEoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX0NIQU5HRSkpCiAJCXJldHVybiAwOwogCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDgpOwotCWlmICh1bmxpa2VseShwID09IDApKQorCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiBodG9ubChORlM0RVJSX1JFU09VUkNFKTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBjaGFuZ2UpOwogCXJldHVybiAwOwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJaWYgKCEoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX1NJWkUpKQogCQlyZXR1cm4gMDsKIAlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA4KTsKLQlpZiAodW5saWtlbHkocCA9PSAwKSkKKwlpZiAodW5saWtlbHkoIXApKQogCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRSk7CiAJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgc2l6ZSk7CiAJcmV0dXJuIDA7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAlfX2JlMzIgKnA7CiAKIAlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCAxMik7Ci0JaWYgKHVubGlrZWx5KHAgPT0gMCkpCisJaWYgKHVubGlrZWx5KCFwKSkKIAkJcmV0dXJuIGh0b25sKE5GUzRFUlJfUkVTT1VSQ0UpOwogCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIHRpbWUtPnR2X3NlYyk7CiAJKnAgPSBodG9ubCh0aW1lLT50dl9uc2VjKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IGI5ZWFkZDEuLjAwYTVlNDQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtNDksNyArNDksNyBAQAogCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCWludCBzdGF0dXM7CiAKLQlmb3IgKGZsID0gaW5vZGUtPmlfZmxvY2s7IGZsICE9IDA7IGZsID0gZmwtPmZsX25leHQpIHsKKwlmb3IgKGZsID0gaW5vZGUtPmlfZmxvY2s7IGZsICE9IE5VTEw7IGZsID0gZmwtPmZsX25leHQpIHsKIAkJaWYgKCEoZmwtPmZsX2ZsYWdzICYgKEZMX1BPU0lYfEZMX0ZMT0NLKSkpCiAJCQljb250aW51ZTsKIAkJaWYgKG5mc19maWxlX29wZW5fY29udGV4dChmbC0+ZmxfZmlsZSkgIT0gY3R4KQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IGFlMDQ4OTIuLmQ5ZTMwYWMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTcxMCw2ICs3MTAsOCBAQAogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGlub2RlKTsKIAorCWlmICh0ZXN0X2JpdChORlNfSU5PX01PVU5UUE9JTlQsICZORlNfSShpbm9kZSktPmZsYWdzKSkKKwkJcmV0dXJuIDA7CiAJaWYgKG5kICE9IE5VTEwpIHsKIAkJLyogVkZTIHdhbnRzIGFuIG9uLXRoZS13aXJlIHJldmFsaWRhdGlvbiAqLwogCQlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JFVkFMKQpAQCAtOTY1LDcgKzk2Nyw4IEBACiAJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9ESVJFQ1RPUlkpCiAJCXJldHVybiAwOwogCS8qIEFyZSB3ZSB0cnlpbmcgdG8gd3JpdGUgdG8gYSByZWFkIG9ubHkgcGFydGl0aW9uPyAqLwotCWlmIChJU19SRE9OTFkoZGlyKSAmJiAobmQtPmludGVudC5vcGVuLmZsYWdzICYgKE9fQ1JFQVR8T19UUlVOQ3xGTU9ERV9XUklURSkpKQorCWlmIChfX21udF9pc19yZWFkb25seShuZC0+cGF0aC5tbnQpICYmCisJICAgIChuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgJiAoT19DUkVBVHxPX1RSVU5DfEZNT0RFX1dSSVRFKSkpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggZWY1N2E1YS4uNWQyZTlkOSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC02NCw3ICs2NCwxMSBAQAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZAk9IG5mc19maWxlX3JlYWQsCiAJLmFpb193cml0ZQk9IG5mc19maWxlX3dyaXRlLAorI2lmZGVmIENPTkZJR19NTVUKIAkubW1hcAkJPSBuZnNfZmlsZV9tbWFwLAorI2Vsc2UKKwkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKKyNlbmRpZgogCS5vcGVuCQk9IG5mc19maWxlX29wZW4sCiAJLmZsdXNoCQk9IG5mc19maWxlX2ZsdXNoLAogCS5yZWxlYXNlCT0gbmZzX2ZpbGVfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9pZG1hcC5jIGIvZnMvbmZzL2lkbWFwLmMKaW5kZXggOGFlNWRiYS4uODYxNDdiMCAxMDA2NDQKLS0tIGEvZnMvbmZzL2lkbWFwLmMKKysrIGIvZnMvbmZzL2lkbWFwLmMKQEAgLTMwOSw3ICszMDksNyBAQAogCW11dGV4X2xvY2soJmlkbWFwLT5pZG1hcF9pbV9sb2NrKTsKIAogCWhlID0gaWRtYXBfbG9va3VwX2lkKGgsIGlkKTsKLQlpZiAoaGUgIT0gMCkgeworCWlmIChoZSkgewogCQltZW1jcHkobmFtZSwgaGUtPmloX25hbWUsIGhlLT5paF9uYW1lbGVuKTsKIAkJcmV0ID0gaGUtPmloX25hbWVsZW47CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCA5NjZhODg1Li42Zjg4ZDdjIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMjk5LDYgKzI5OSw3IEBACiAJCQkJZWxzZQogCQkJCQlpbm9kZS0+aV9vcCA9ICZuZnNfbW91bnRwb2ludF9pbm9kZV9vcGVyYXRpb25zOwogCQkJCWlub2RlLT5pX2ZvcCA9IE5VTEw7CisJCQkJc2V0X2JpdChORlNfSU5PX01PVU5UUE9JTlQsICZuZnNpLT5mbGFncyk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKIAkJCWlub2RlLT5pX29wID0gJm5mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CkBAIC01MDUsNiArNTA2LDcgQEAKIAkJY3R4LT5jcmVkID0gZ2V0X3JwY2NyZWQoY3JlZCk7CiAJCWN0eC0+c3RhdGUgPSBOVUxMOwogCQljdHgtPmxvY2tvd25lciA9IGN1cnJlbnQtPmZpbGVzOworCQljdHgtPmZsYWdzID0gMDsKIAkJY3R4LT5lcnJvciA9IDA7CiAJCWN0eC0+ZGlyX2Nvb2tpZSA9IDA7CiAJCWF0b21pY19zZXQoJmN0eC0+Y291bnQsIDEpOwpAQCAtMTAwMyw4ICsxMDA1LDkgQEAKIAogCXNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwogCS8qIFVwZGF0ZSB0aGUgZnNpZD8gKi8KLQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKQotCQkJJiYgIW5mc19mc2lkX2VxdWFsKCZzZXJ2ZXItPmZzaWQsICZmYXR0ci0+ZnNpZCkpCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCSFuZnNfZnNpZF9lcXVhbCgmc2VydmVyLT5mc2lkLCAmZmF0dHItPmZzaWQpICYmCisJCQkhdGVzdF9iaXQoTkZTX0lOT19NT1VOVFBPSU5ULCAmbmZzaS0+ZmxhZ3MpKQogCQlzZXJ2ZXItPmZzaWQgPSBmYXR0ci0+ZnNpZDsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IDBmNTYxOTYuLjkzMTk5MjcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKIHN0cnVjdCBuZnNfc3RyaW5nOwogCkBAIC01Nyw2ICs1OCw4IEBACiAJCWNoYXIJCQkqZXhwb3J0X3BhdGg7CiAJCWludAkJCXByb3RvY29sOwogCX0gbmZzX3NlcnZlcjsKKworCXN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyBsc21fb3B0czsKIH07CiAKIC8qIGNsaWVudC5jICovCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHN0YXRlLmMgYi9mcy9uZnMvbmZzNHN0YXRlLmMKaW5kZXggNjIzM2ViNS4uYjk2MjM5NyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mcy9uZnM0c3RhdGUuYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJc3RydWN0IGZpbGVfbG9jayAqZmw7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlmb3IgKGZsID0gaW5vZGUtPmlfZmxvY2s7IGZsICE9IDA7IGZsID0gZmwtPmZsX25leHQpIHsKKwlmb3IgKGZsID0gaW5vZGUtPmlfZmxvY2s7IGZsICE9IE5VTEw7IGZsID0gZmwtPmZsX25leHQpIHsKIAkJaWYgKCEoZmwtPmZsX2ZsYWdzICYgKEZMX1BPU0lYfEZMX0ZMT0NLKSkpCiAJCQljb250aW51ZTsKIAkJaWYgKG5mc19maWxlX29wZW5fY29udGV4dChmbC0+ZmxfZmlsZSktPnN0YXRlICE9IHN0YXRlKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggM2Q3ZDk2My4uNWE3MGJlNSAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC01MzMsNyArNTMzLDEwIEBACiAKIAlpZiAobGVuIDwgUEFHRV9DQUNIRV9TSVpFKQogCQl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBsZW4sIFBBR0VfQ0FDSEVfU0laRSk7Ci0JbmZzX3BhZ2Vpb19hZGRfcmVxdWVzdChkZXNjLT5wZ2lvLCBuZXcpOworCWlmICghbmZzX3BhZ2Vpb19hZGRfcmVxdWVzdChkZXNjLT5wZ2lvLCBuZXcpKSB7CisJCWVycm9yID0gZGVzYy0+cGdpby0+cGdfZXJyb3I7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAJcmV0dXJuIDA7CiBvdXRfZXJyb3I6CiAJZXJyb3IgPSBQVFJfRVJSKG5ldyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IDFmYjM4MTguLmY5MjE5MDIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC01ODksOCArNTg5LDYgQEAKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NCKHZmc21udC0+bW50X3NiKTsKIAlzdHJ1Y3QgcnBjX2NsbnQgKnJwYzsKIAotCXNocmlua19zdWJtb3VudHModmZzbW50LCAmbmZzX2F1dG9tb3VudF9saXN0KTsKLQogCWlmICghKGZsYWdzICYgTU5UX0ZPUkNFKSkKIAkJcmV0dXJuOwogCS8qIC1FSU8gYWxsIHBlbmRpbmcgSS9PICovCkBAIC02MzIsNyArNjMwLDcgQEAKIAlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDogewogCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0JCXJldHVybiBzYS0+c2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlk7CisJCXJldHVybiBzYS0+c2luX2FkZHIuc19hZGRyICE9IGh0b25sKElOQUREUl9BTlkpOwogCX0KIAljYXNlIEFGX0lORVQ2OiB7CiAJCXN0cnVjdCBpbjZfYWRkciAqc2EgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkciktPnNpbjZfYWRkcjsKQEAgLTY4NCw4ICs2ODIsOSBAQAogc3RhdGljIGludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpyYXcsCiAJCQkJICAgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbW50KQogewotCWNoYXIgKnAsICpzdHJpbmc7CisJY2hhciAqcCwgKnN0cmluZywgKnNlY2RhdGE7CiAJdW5zaWduZWQgc2hvcnQgcG9ydCA9IDA7CisJaW50IHJjOwogCiAJaWYgKCFyYXcpIHsKIAkJZGZwcmludGsoTU9VTlQsICJORlM6IG1vdW50IG9wdGlvbnMgc3RyaW5nIHdhcyBOVUxMLlxuIik7CkBAIC02OTMsNiArNjkyLDIwIEBACiAJfQogCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBuZnMgbW91bnQgb3B0cz0nJXMnXG4iLCByYXcpOwogCisJc2VjZGF0YSA9IGFsbG9jX3NlY2RhdGEoKTsKKwlpZiAoIXNlY2RhdGEpCisJCWdvdG8gb3V0X25vbWVtOworCisJcmMgPSBzZWN1cml0eV9zYl9jb3B5X2RhdGEocmF3LCBzZWNkYXRhKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X3NlY3VyaXR5X2ZhaWx1cmU7CisKKwlyYyA9IHNlY3VyaXR5X3NiX3BhcnNlX29wdHNfc3RyKHNlY2RhdGEsICZtbnQtPmxzbV9vcHRzKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X3NlY3VyaXR5X2ZhaWx1cmU7CisKKwlmcmVlX3NlY2RhdGEoc2VjZGF0YSk7CisKIAl3aGlsZSAoKHAgPSBzdHJzZXAoJnJhdywgIiwiKSkgIT0gTlVMTCkgewogCQlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJCWludCBvcHRpb24sIHRva2VuOwpAQCAtMTA0Miw3ICsxMDU1LDEwIEBACiBvdXRfbm9tZW06CiAJcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBub3QgZW5vdWdoIG1lbW9yeSB0byBwYXJzZSBvcHRpb25cbiIpOwogCXJldHVybiAwOwotCitvdXRfc2VjdXJpdHlfZmFpbHVyZToKKwlmcmVlX3NlY2RhdGEoc2VjZGF0YSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBzZWN1cml0eSBvcHRpb25zIGludmFsaWQ6ICVkXG4iLCByYyk7CisJcmV0dXJuIDA7CiBvdXRfdW5yZWNfdmVyczoKIAlwcmludGsoS0VSTl9JTkZPICJORlM6IHVucmVjb2duaXplZCBORlMgdmVyc2lvbiBudW1iZXJcbiIpOwogCXJldHVybiAwOwpAQCAtMTIxNCw2ICsxMjMwLDMzIEBACiAJCWFyZ3MtPm5hbWxlbgkJPSBkYXRhLT5uYW1sZW47CiAJCWFyZ3MtPmJzaXplCQk9IGRhdGEtPmJzaXplOwogCQlhcmdzLT5hdXRoX2ZsYXZvcnNbMF0JPSBkYXRhLT5wc2V1ZG9mbGF2b3I7CisKKwkJLyoKKwkJICogVGhlIGxlZ2FjeSB2ZXJzaW9uIDYgYmluYXJ5IG1vdW50IGRhdGEgZnJvbSB1c2Vyc3BhY2UgaGFzIGEKKwkJICogZmllbGQgdXNlZCBvbmx5IHRvIHRyYW5zcG9ydCBzZWxpbnV4IGluZm9ybWF0aW9uIGludG8gdGhlCisJCSAqIHRoZSBrZXJuZWwuICBUbyBjb250aW51ZSB0byBzdXBwb3J0IHRoYXQgZnVuY3Rpb25hbGl0eSB3ZQorCQkgKiBoYXZlIGEgdG91Y2ggb2Ygc2VsaW51eCBrbm93bGVkZ2UgaGVyZSBpbiB0aGUgTkZTIGNvZGUuIFRoZQorCQkgKiB1c2Vyc3BhY2UgY29kZSBjb252ZXJ0ZWQgY29udGV4dD1ibGFoIHRvIGp1c3QgYmxhaCBzbyB3ZSBhcmUKKwkJICogY29udmVydGluZyBiYWNrIHRvIHRoZSBmdWxsIHN0cmluZyBzZWxpbnV4IHVuZGVyc3RhbmRzLgorCQkgKi8KKwkJaWYgKGRhdGEtPmNvbnRleHRbMF0peworI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYCisJCQlpbnQgcmM7CisJCQljaGFyICpvcHRzX3N0ciA9IGttYWxsb2Moc2l6ZW9mKGRhdGEtPmNvbnRleHQpICsgOCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW9wdHNfc3RyKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJc3RyY3B5KG9wdHNfc3RyLCAiY29udGV4dD0iKTsKKwkJCWRhdGEtPmNvbnRleHRbTkZTX01BWF9DT05URVhUX0xFTl0gPSAnXDAnOworCQkJc3RyY2F0KG9wdHNfc3RyLCAmZGF0YS0+Y29udGV4dFswXSk7CisJCQlyYyA9IHNlY3VyaXR5X3NiX3BhcnNlX29wdHNfc3RyKG9wdHNfc3RyLCAmYXJncy0+bHNtX29wdHMpOworCQkJa2ZyZWUob3B0c19zdHIpOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKKyNlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCQl9CisKIAkJYnJlYWs7CiAJZGVmYXVsdDogewogCQl1bnNpZ25lZCBpbnQgbGVuOwpAQCAtMTQ3Niw2ICsxNTE5LDggQEAKIAl9OwogCWludCBlcnJvcjsKIAorCXNlY3VyaXR5X2luaXRfbW50X29wdHMoJmRhdGEubHNtX29wdHMpOworCiAJLyogVmFsaWRhdGUgdGhlIG1vdW50IGRhdGEgKi8KIAllcnJvciA9IG5mc192YWxpZGF0ZV9tb3VudF9kYXRhKHJhd19kYXRhLCAmZGF0YSwgJm1udGZoLCBkZXZfbmFtZSk7CiAJaWYgKGVycm9yIDwgMCkKQEAgLTE1MTUsNiArMTU2MCwxMCBAQAogCQlnb3RvIGVycm9yX3NwbGF0X3N1cGVyOwogCX0KIAorCWVycm9yID0gc2VjdXJpdHlfc2Jfc2V0X21udF9vcHRzKHMsICZkYXRhLmxzbV9vcHRzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyb3Jfc3BsYXRfcm9vdDsKKwogCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwogCW1udC0+bW50X3NiID0gczsKIAltbnQtPm1udF9yb290ID0gbW50cm9vdDsKQEAgLTE1MjMsMTIgKzE1NzIsMTUgQEAKIG91dDoKIAlrZnJlZShkYXRhLm5mc19zZXJ2ZXIuaG9zdG5hbWUpOwogCWtmcmVlKGRhdGEubW91bnRfc2VydmVyLmhvc3RuYW1lKTsKKwlzZWN1cml0eV9mcmVlX21udF9vcHRzKCZkYXRhLmxzbV9vcHRzKTsKIAlyZXR1cm4gZXJyb3I7CiAKIG91dF9lcnJfbm9zYjoKIAluZnNfZnJlZV9zZXJ2ZXIoc2VydmVyKTsKIAlnb3RvIG91dDsKIAorZXJyb3Jfc3BsYXRfcm9vdDoKKwlkcHV0KG1udHJvb3QpOwogZXJyb3Jfc3BsYXRfc3VwZXI6CiAJdXBfd3JpdGUoJnMtPnNfdW1vdW50KTsKIAlkZWFjdGl2YXRlX3N1cGVyKHMpOwpAQCAtMTYwOCw2ICsxNjYwLDkgQEAKIAltbnQtPm1udF9zYiA9IHM7CiAJbW50LT5tbnRfcm9vdCA9IG1udHJvb3Q7CiAKKwkvKiBjbG9uZSBhbnkgbHNtIHNlY3VyaXR5IG9wdGlvbnMgZnJvbSB0aGUgcGFyZW50IHRvIHRoZSBuZXcgc2IgKi8KKwlzZWN1cml0eV9zYl9jbG9uZV9tbnRfb3B0cyhkYXRhLT5zYiwgcyk7CisKIAlkcHJpbnRrKCI8LS0gbmZzX3hkZXZfZ2V0X3NiKCkgPSAwXG4iKTsKIAlyZXR1cm4gMDsKIApAQCAtMTg1MCw2ICsxOTA1LDggQEAKIAl9OwogCWludCBlcnJvcjsKIAorCXNlY3VyaXR5X2luaXRfbW50X29wdHMoJmRhdGEubHNtX29wdHMpOworCiAJLyogVmFsaWRhdGUgdGhlIG1vdW50IGRhdGEgKi8KIAllcnJvciA9IG5mczRfdmFsaWRhdGVfbW91bnRfZGF0YShyYXdfZGF0YSwgJmRhdGEsIGRldl9uYW1lKTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMTg5OCw2ICsxOTU1LDcgQEAKIAlrZnJlZShkYXRhLmNsaWVudF9hZGRyZXNzKTsKIAlrZnJlZShkYXRhLm5mc19zZXJ2ZXIuZXhwb3J0X3BhdGgpOwogCWtmcmVlKGRhdGEubmZzX3NlcnZlci5ob3N0bmFtZSk7CisJc2VjdXJpdHlfZnJlZV9tbnRfb3B0cygmZGF0YS5sc21fb3B0cyk7CiAJcmV0dXJuIGVycm9yOwogCiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggZjU1YzQzNy4uYmVkNjM0MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAkJCQkJICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIHN0YXRpYyB2b2lkIG5mc19wYWdlaW9faW5pdF93cml0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjLAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IGlvZmxhZ3MpOworc3RhdGljIHZvaWQgbmZzX3JlZGlydHlfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSk7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnNfd3JpdGVfcGFydGlhbF9vcHM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnNfd3JpdGVfZnVsbF9vcHM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnNfY29tbWl0X29wczsKQEAgLTI4OCw3ICsyODksMTIgQEAKIAkJQlVHKCk7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQluZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KHBnaW8sIHJlcSk7CisJaWYgKCFuZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KHBnaW8sIHJlcSkpIHsKKwkJbmZzX3JlZGlydHlfcmVxdWVzdChyZXEpOworCQluZnNfZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCQluZnNfY2xlYXJfcGFnZV90YWdfbG9ja2VkKHJlcSk7CisJCXJldHVybiBwZ2lvLT5wZ19lcnJvcjsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczNCw3ICs3NDAsNyBAQAogCSAqLwogCWlmIChuZnNfd3JpdGVfcGFnZXVwdG9kYXRlKHBhZ2UsIGlub2RlKSAmJgogCQkJaW5vZGUtPmlfZmxvY2sgPT0gTlVMTCAmJgotCQkJIShmaWxlLT5mX21vZGUgJiBPX1NZTkMpKSB7CisJCQkhKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpKSB7CiAJCWNvdW50ID0gbWF4KGNvdW50ICsgb2Zmc2V0LCBuZnNfcGFnZV9sZW5ndGgocGFnZSkpOwogCQlvZmZzZXQgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHByb2MuYyBiL2ZzL25mc2QvbmZzNHByb2MuYwppbmRleCBjNTkzZGIwLi5jMzA5Yzg4IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnM0cHJvYy5jCkBAIC02NTgsMTQgKzY1OCwxOSBAQAogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0KKwlzdGF0dXMgPSBtbnRfd2FudF93cml0ZShjc3RhdGUtPmN1cnJlbnRfZmguZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKIAlzdGF0dXMgPSBuZnNfb2s7CiAJaWYgKHNldGF0dHItPnNhX2FjbCAhPSBOVUxMKQogCQlzdGF0dXMgPSBuZnNkNF9zZXRfbmZzNF9hY2wocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsCiAJCQkJCSAgICBzZXRhdHRyLT5zYV9hY2wpOwogCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CisJCWdvdG8gb3V0OwogCXN0YXR1cyA9IG5mc2Rfc2V0YXR0cihycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgJnNldGF0dHItPnNhX2lhdHRyLAogCQkJCTAsICh0aW1lX3QpMCk7CitvdXQ6CisJbW50X2Ryb3Bfd3JpdGUoY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHJlY292ZXIuYyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwppbmRleCAxZmY5MDYyLi4xNDViM2M4IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRyZWNvdmVyLmMKKysrIGIvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWSAgICAgICAgICAgICAgICBORlNEREJHX1BST0MKIApAQCAtMTU0LDcgKzE1NSwxMSBAQAogCQlkcHJpbnRrKCJORlNEOiBuZnNkNF9jcmVhdGVfY2xpZF9kaXI6IERJUkVDVE9SWSBFWElTVFNcbiIpOwogCQlnb3RvIG91dF9wdXQ7CiAJfQorCXN0YXR1cyA9IG1udF93YW50X3dyaXRlKHJlY19kaXIucGF0aC5tbnQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0X3B1dDsKIAlzdGF0dXMgPSB2ZnNfbWtkaXIocmVjX2Rpci5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LCBTX0lSV1hVKTsKKwltbnRfZHJvcF93cml0ZShyZWNfZGlyLnBhdGgubW50KTsKIG91dF9wdXQ6CiAJZHB1dChkZW50cnkpOwogb3V0X3VubG9jazoKQEAgLTMxMywxMiArMzE4LDE3IEBACiAJaWYgKCFyZWNfZGlyX2luaXQgfHwgIWNscC0+Y2xfZmlyc3RzdGF0ZSkKIAkJcmV0dXJuOwogCisJc3RhdHVzID0gbW50X3dhbnRfd3JpdGUocmVjX2Rpci5wYXRoLm1udCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXQ7CiAJY2xwLT5jbF9maXJzdHN0YXRlID0gMDsKIAluZnM0X3NhdmVfdXNlcigmdWlkLCAmZ2lkKTsKIAlzdGF0dXMgPSBuZnNkNF91bmxpbmtfY2xpZF9kaXIoY2xwLT5jbF9yZWNkaXIsIEhFWERJUl9MRU4tMSk7CiAJbmZzNF9yZXNldF91c2VyKHVpZCwgZ2lkKTsKIAlpZiAoc3RhdHVzID09IDApCiAJCW5mc2Q0X3N5bmNfcmVjX2RpcigpOworCW1udF9kcm9wX3dyaXRlKHJlY19kaXIucGF0aC5tbnQpOworb3V0OgogCWlmIChzdGF0dXMpCiAJCXByaW50aygiTkZTRDogRmFpbGVkIHRvIHJlbW92ZSBleHBpcmVkIGNsaWVudCBzdGF0ZSBkaXJlY3RvcnkiCiAJCQkJIiAlLipzXG4iLCBIRVhESVJfTEVOLCBjbHAtPmNsX3JlY2Rpcik7CkBAIC0zNDcsMTMgKzM1NywxNyBAQAogCiAJaWYgKCFyZWNfZGlyX2luaXQpCiAJCXJldHVybjsKKwlzdGF0dXMgPSBtbnRfd2FudF93cml0ZShyZWNfZGlyLnBhdGgubW50KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKIAlzdGF0dXMgPSBuZnNkNF9saXN0X3JlY19kaXIocmVjX2Rpci5wYXRoLmRlbnRyeSwgcHVyZ2Vfb2xkKTsKIAlpZiAoc3RhdHVzID09IDApCiAJCW5mc2Q0X3N5bmNfcmVjX2RpcigpOworCW1udF9kcm9wX3dyaXRlKHJlY19kaXIucGF0aC5tbnQpOworb3V0OgogCWlmIChzdGF0dXMpCiAJCXByaW50aygibmZzZDQ6IGZhaWxlZCB0byBwdXJnZSBvbGQgY2xpZW50cyBmcm9tIHJlY292ZXJ5IgogCQkJIiBkaXJlY3RvcnkgJXNcbiIsIHJlY19kaXIucGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IGJjYjk3ZDguLjgxYTc1ZjMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNkL25mc2QuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNkL2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KQEAgLTEyMzksNyArMTI0MCw3IEBACiBuZnM0X2ZpbGVfZG93bmdyYWRlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgc2hhcmVfYWNjZXNzKQogewogCWlmIChzaGFyZV9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19XUklURSkgewotCQlwdXRfd3JpdGVfYWNjZXNzKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCQlkcm9wX2ZpbGVfd3JpdGVfYWNjZXNzKGZpbHApOwogCQlmaWxwLT5mX21vZGUgPSAoZmlscC0+Zl9tb2RlIHwgRk1PREVfUkVBRCkgJiB+Rk1PREVfV1JJVEU7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNmaC5jIGIvZnMvbmZzZC9uZnNmaC5jCmluZGV4IDAxMzBiMzQuLjNlNmIzZjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzZmguYworKysgYi9mcy9uZnNkL25mc2ZoLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogewogCS8qIENoZWNrIGlmIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQgZnJvbSBhIHNlY3VyZSBwb3J0LiAqLwogCWlmICghcnFzdHAtPnJxX3NlY3VyZSAmJiBFWF9TRUNVUkUoZXhwKSkgewotCQljaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dOworCQlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKIAkJZHByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJuZnNkOiByZXF1ZXN0IGZyb20gaW5zZWN1cmUgcG9ydCAlcyFcbiIsCiAJCSAgICAgICBzdmNfcHJpbnRfYWRkcihycXN0cCwgYnVmLCBzaXplb2YoYnVmKSkpOwpAQCAtMjMyLDYgKzIzMiw3IEBACiAJCWZocC0+ZmhfZGVudHJ5ID0gZGVudHJ5OwogCQlmaHAtPmZoX2V4cG9ydCA9IGV4cDsKIAkJbmZzZF9ucl92ZXJpZmllZCsrOworCQljYWNoZV9nZXQoJmV4cC0+aCk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICoganVzdCByZWNoZWNraW5nIHBlcm1pc3Npb25zCkBAIC0yNDEsNiArMjQyLDcgQEAKIAkJZHByaW50aygibmZzZDogZmhfdmVyaWZ5IC0ganVzdCBjaGVja2luZ1xuIik7CiAJCWRlbnRyeSA9IGZocC0+ZmhfZGVudHJ5OwogCQlleHAgPSBmaHAtPmZoX2V4cG9ydDsKKwkJY2FjaGVfZ2V0KCZleHAtPmgpOwogCQkvKgogCQkgKiBTZXQgdXNlciBjcmVkcyBmb3IgdGhpcyBleHBvcnRwb2ludDsgbmVjZXNzYXJ5IGV2ZW4KIAkJICogaW4gdGhlICJqdXN0IGNoZWNraW5nIiBjYXNlIGJlY2F1c2UgdGhpcyBtYXkgYmUgYQpAQCAtMjUyLDggKzI1NCw2IEBACiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCX0KLQljYWNoZV9nZXQoJmV4cC0+aCk7Ci0KIAogCWVycm9yID0gbmZzZF9tb2RlX2NoZWNrKHJxc3RwLCBkZW50cnktPmRfaW5vZGUtPmlfbW9kZSwgdHlwZSk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggNDZmNTlkNS4uMzA0YmY1ZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC0xMjU1LDIzICsxMjU1LDM1IEBACiAJZXJyID0gMDsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNfSUZSRUc6CisJCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKKwkJaWYgKGhvc3RfZXJyKQorCQkJZ290byBvdXRfbmZzZXJyOwogCQlob3N0X2VyciA9IHZmc19jcmVhdGUoZGlycCwgZGNoaWxkLCBpYXAtPmlhX21vZGUsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIFNfSUZESVI6CisJCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKKwkJaWYgKGhvc3RfZXJyKQorCQkJZ290byBvdXRfbmZzZXJyOwogCQlob3N0X2VyciA9IHZmc19ta2RpcihkaXJwLCBkY2hpbGQsIGlhcC0+aWFfbW9kZSk7CiAJCWJyZWFrOwogCWNhc2UgU19JRkNIUjoKIAljYXNlIFNfSUZCTEs6CiAJY2FzZSBTX0lGSUZPOgogCWNhc2UgU19JRlNPQ0s6CisJCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKKwkJaWYgKGhvc3RfZXJyKQorCQkJZ290byBvdXRfbmZzZXJyOwogCQlob3N0X2VyciA9IHZmc19ta25vZChkaXJwLCBkY2hpbGQsIGlhcC0+aWFfbW9kZSwgcmRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJICAgICAgICBwcmludGsoIm5mc2Q6IGJhZCBmaWxlIHR5cGUgJW8gaW4gbmZzZF9jcmVhdGVcbiIsIHR5cGUpOwogCQlob3N0X2VyciA9IC1FSU5WQUw7Ci0JfQotCWlmIChob3N0X2VyciA8IDApCiAJCWdvdG8gb3V0X25mc2VycjsKKwl9CisJaWYgKGhvc3RfZXJyIDwgMCkgeworCQltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOworCQlnb3RvIG91dF9uZnNlcnI7CisJfQogCiAJaWYgKEVYX0lTU1lOQyhmaHAtPmZoX2V4cG9ydCkpIHsKIAkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jX2RpcihkZW50cnkpKTsKQEAgLTEyODIsNiArMTI5NCw3IEBACiAJZXJyMiA9IG5mc2RfY3JlYXRlX3NldGF0dHIocnFzdHAsIHJlc2ZocCwgaWFwKTsKIAlpZiAoZXJyMikKIAkJZXJyID0gZXJyMjsKKwltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogCS8qCiAJICogVXBkYXRlIHRoZSBmaWxlIGhhbmRsZSB0byBnZXQgdGhlIG5ldyBpbm9kZSBpbmZvLgogCSAqLwpAQCAtMTM1OSw2ICsxMzcyLDkgQEAKIAkJdl9hdGltZSA9IHZlcmlmaWVyWzFdJjB4N2ZmZmZmZmY7CiAJfQogCQorCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKKwlpZiAoaG9zdF9lcnIpCisJCWdvdG8gb3V0X25mc2VycjsKIAlpZiAoZGNoaWxkLT5kX2lub2RlKSB7CiAJCWVyciA9IDA7CiAKQEAgLTEzOTAsMTIgKzE0MDYsMTUgQEAKIAkJY2FzZSBORlMzX0NSRUFURV9HVUFSREVEOgogCQkJZXJyID0gbmZzZXJyX2V4aXN0OwogCQl9CisJCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiAJCWdvdG8gb3V0OwogCX0KIAogCWhvc3RfZXJyID0gdmZzX2NyZWF0ZShkaXJwLCBkY2hpbGQsIGlhcC0+aWFfbW9kZSwgTlVMTCk7Ci0JaWYgKGhvc3RfZXJyIDwgMCkKKwlpZiAoaG9zdF9lcnIgPCAwKSB7CisJCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiAJCWdvdG8gb3V0X25mc2VycjsKKwl9CiAJaWYgKGNyZWF0ZWQpCiAJCSpjcmVhdGVkID0gMTsKIApAQCAtMTQyMCw2ICsxNDM5LDcgQEAKIAlpZiAoZXJyMikKIAkJZXJyID0gZXJyMjsKIAorCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiAJLyoKIAkgKiBVcGRhdGUgdGhlIGZpbGVoYW5kbGUgdG8gZ2V0IHRoZSBuZXcgaW5vZGUgaW5mby4KIAkgKi8KQEAgLTE1MjIsNiArMTU0MiwxMCBAQAogCWlmIChpYXAgJiYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX01PREUpKQogCQltb2RlID0gaWFwLT5pYV9tb2RlICYgU19JQUxMVUdPOwogCisJaG9zdF9lcnIgPSBtbnRfd2FudF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOworCWlmIChob3N0X2VycikKKwkJZ290byBvdXRfbmZzZXJyOworCiAJaWYgKHVubGlrZWx5KHBhdGhbcGxlbl0gIT0gMCkpIHsKIAkJY2hhciAqcGF0aF9hbGxvY2VkID0ga21hbGxvYyhwbGVuKzEsIEdGUF9LRVJORUwpOwogCQlpZiAocGF0aF9hbGxvY2VkID09IE5VTEwpCkBAIC0xNTQyLDYgKzE1NjYsOCBAQAogCWVyciA9IG5mc2Vycm5vKGhvc3RfZXJyKTsKIAlmaF91bmxvY2soZmhwKTsKIAorCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CisKIAljZXJyID0gZmhfY29tcG9zZShyZXNmaHAsIGZocC0+ZmhfZXhwb3J0LCBkbmV3LCBmaHApOwogCWRwdXQoZG5ldyk7CiAJaWYgKGVycj09MCkgZXJyID0gY2VycjsKQEAgLTE1OTIsNiArMTYxOCwxMSBAQAogCWRvbGQgPSB0ZmhwLT5maF9kZW50cnk7CiAJZGVzdCA9IGRvbGQtPmRfaW5vZGU7CiAKKwlob3N0X2VyciA9IG1udF93YW50X3dyaXRlKHRmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOworCWlmIChob3N0X2VycikgeworCQllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CisJCWdvdG8gb3V0X2RwdXQ7CisJfQogCWhvc3RfZXJyID0gdmZzX2xpbmsoZG9sZCwgZGlycCwgZG5ldyk7CiAJaWYgKCFob3N0X2VycikgewogCQlpZiAoRVhfSVNTWU5DKGZmaHAtPmZoX2V4cG9ydCkpIHsKQEAgLTE2MDUsNyArMTYzNiw4IEBACiAJCWVsc2UKIAkJCWVyciA9IG5mc2Vycm5vKGhvc3RfZXJyKTsKIAl9Ci0KKwltbnRfZHJvcF93cml0ZSh0ZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKK291dF9kcHV0OgogCWRwdXQoZG5ldyk7CiBvdXRfdW5sb2NrOgogCWZoX3VubG9jayhmZmhwKTsKQEAgLTE2NzgsMTMgKzE3MTAsMjAgQEAKIAlpZiAobmRlbnRyeSA9PSB0cmFwKQogCQlnb3RvIG91dF9kcHV0X25ldzsKIAotI2lmZGVmIE1TTkZTCi0JaWYgKChmZmhwLT5maF9leHBvcnQtPmV4X2ZsYWdzICYgTkZTRVhQX01TTkZTKSAmJgorCWlmIChzdmNfbXNuZnMoZmZocCkgJiYKIAkJKChhdG9taWNfcmVhZCgmb2RlbnRyeS0+ZF9jb3VudCkgPiAxKQogCQkgfHwgKGF0b21pY19yZWFkKCZuZGVudHJ5LT5kX2NvdW50KSA+IDEpKSkgewogCQkJaG9zdF9lcnIgPSAtRVBFUk07Ci0JfSBlbHNlCi0jZW5kaWYKKwkJCWdvdG8gb3V0X2RwdXRfbmV3OworCX0KKworCWhvc3RfZXJyID0gLUVYREVWOworCWlmIChmZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50ICE9IHRmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpCisJCWdvdG8gb3V0X2RwdXRfbmV3OworCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CisJaWYgKGhvc3RfZXJyKQorCQlnb3RvIG91dF9kcHV0X25ldzsKKwogCWhvc3RfZXJyID0gdmZzX3JlbmFtZShmZGlyLCBvZGVudHJ5LCB0ZGlyLCBuZGVudHJ5KTsKIAlpZiAoIWhvc3RfZXJyICYmIEVYX0lTU1lOQyh0ZmhwLT5maF9leHBvcnQpKSB7CiAJCWhvc3RfZXJyID0gbmZzZF9zeW5jX2Rpcih0ZGVudHJ5KTsKQEAgLTE2OTIsNiArMTczMSw4IEBACiAJCQlob3N0X2VyciA9IG5mc2Rfc3luY19kaXIoZmRlbnRyeSk7CiAJfQogCisJbW50X2Ryb3Bfd3JpdGUoZmZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CisKICBvdXRfZHB1dF9uZXc6CiAJZHB1dChuZGVudHJ5KTsKICBvdXRfZHB1dF9vbGQ6CkBAIC0xNzUwLDYgKzE3OTEsMTAgQEAKIAlpZiAoIXR5cGUpCiAJCXR5cGUgPSByZGVudHJ5LT5kX2lub2RlLT5pX21vZGUgJiBTX0lGTVQ7CiAKKwlob3N0X2VyciA9IG1udF93YW50X3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CisJaWYgKGhvc3RfZXJyKQorCQlnb3RvIG91dF9uZnNlcnI7CisKIAlpZiAodHlwZSAhPSBTX0lGRElSKSB7IC8qIEl0J3MgVU5MSU5LICovCiAjaWZkZWYgTVNORlMKIAkJaWYgKChmaHAtPmZoX2V4cG9ydC0+ZXhfZmxhZ3MgJiBORlNFWFBfTVNORlMpICYmCkBAIC0xNzY1LDEwICsxODEwLDEyIEBACiAJZHB1dChyZGVudHJ5KTsKIAogCWlmIChob3N0X2VycikKLQkJZ290byBvdXRfbmZzZXJyOworCQlnb3RvIG91dF9kcm9wOwogCWlmIChFWF9JU1NZTkMoZmhwLT5maF9leHBvcnQpKQogCQlob3N0X2VyciA9IG5mc2Rfc3luY19kaXIoZGVudHJ5KTsKIAorb3V0X2Ryb3A6CisJbW50X2Ryb3Bfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIG91dF9uZnNlcnI6CiAJZXJyID0gbmZzZXJybm8oaG9zdF9lcnIpOwogb3V0OgpAQCAtMTg2NSw3ICsxOTEyLDcgQEAKIAkJaW5vZGUtPmlfbW9kZSwKIAkJSVNfSU1NVVRBQkxFKGlub2RlKT8JIiBpbW11dCIgOiAiIiwKIAkJSVNfQVBQRU5EKGlub2RlKT8JIiBhcHBlbmQiIDogIiIsCi0JCUlTX1JET05MWShpbm9kZSk/CSIgcm8iIDogIiIpOworCQlfX21udF9pc19yZWFkb25seShleHAtPmV4X3BhdGgubW50KT8JIiBybyIgOiAiIik7CiAJZHByaW50aygiICAgICAgb3duZXIgJWQvJWQgdXNlciAlZC8lZFxuIiwKIAkJaW5vZGUtPmlfdWlkLCBpbm9kZS0+aV9naWQsIGN1cnJlbnQtPmZzdWlkLCBjdXJyZW50LT5mc2dpZCk7CiAjZW5kaWYKQEAgLTE4NzYsNyArMTkyMyw4IEBACiAJICovCiAJaWYgKCEoYWNjICYgTUFZX0xPQ0FMX0FDQ0VTUykpCiAJCWlmIChhY2MgJiAoTUFZX1dSSVRFIHwgTUFZX1NBVFRSIHwgTUFZX1RSVU5DKSkgewotCQkJaWYgKGV4cF9yZG9ubHkocnFzdHAsIGV4cCkgfHwgSVNfUkRPTkxZKGlub2RlKSkKKwkJCWlmIChleHBfcmRvbmx5KHJxc3RwLCBleHApIHx8CisJCQkgICAgX19tbnRfaXNfcmVhZG9ubHkoZXhwLT5leF9wYXRoLm1udCkpCiAJCQkJcmV0dXJuIG5mc2Vycl9yb2ZzOwogCQkJaWYgKC8qIChhY2MgJiBNQVlfV1JJVEUpICYmICovIElTX0lNTVVUQUJMRShpbm9kZSkpCiAJCQkJcmV0dXJuIG5mc2Vycl9wZXJtOwpAQCAtMjAzOSw2ICsyMDg3LDkgQEAKIAl9IGVsc2UKIAkJc2l6ZSA9IDA7CiAKKwllcnJvciA9IG1udF93YW50X3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGdldG91dDsKIAlpZiAoc2l6ZSkKIAkJZXJyb3IgPSB2ZnNfc2V0eGF0dHIoZmhwLT5maF9kZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKIAllbHNlIHsKQEAgLTIwNTAsNiArMjEwMSw3IEBACiAJCQkJZXJyb3IgPSAwOwogCQl9CiAJfQorCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiAKIGdldG91dDoKIAlrZnJlZSh2YWx1ZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9NYWtlZmlsZSBiL2ZzL29jZnMyL01ha2VmaWxlCmluZGV4IDRkNGNlNDguLmY2OTU2ZGUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL01ha2VmaWxlCisrKyBiL2ZzL29jZnMyL01ha2VmaWxlCkBAIC0yLDcgKzIsMTIgQEAKIAogRVhUUkFfQ0ZMQUdTICs9IC1EQ0FUQ0hfQkhfSkJEX1JBQ0VTCiAKLW9iai0kKENPTkZJR19PQ0ZTMl9GUykgKz0gb2NmczIubworb2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSAJXAorCW9jZnMyLm8JCQlcCisJb2NmczJfc3RhY2tnbHVlLm8KKworb2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICs9IG9jZnMyX3N0YWNrX28yY2Iubworb2JqLSQoQ09ORklHX09DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSKSArPSBvY2ZzMl9zdGFja191c2VyLm8KIAogb2NmczItb2JqcyA6PSBcCiAJYWxsb2MubyAJCVwKQEAgLTMxLDUgKzM2LDEwIEBACiAJdXB0b2RhdGUubwkJXAogCXZlci5vCiAKK29jZnMyX3N0YWNrZ2x1ZS1vYmpzIDo9IHN0YWNrZ2x1ZS5vCitvY2ZzMl9zdGFja19vMmNiLW9ianMgOj0gc3RhY2tfbzJjYi5vCitvY2ZzMl9zdGFja191c2VyLW9ianMgOj0gc3RhY2tfdXNlci5vCisKKyMgY2x1c3Rlci8gaXMgYWx3YXlzIG5lZWRlZCB3aGVuIE9DRlMyX0ZTIGZvciBtYXNrbG9nIHN1cHBvcnQKIG9iai0kKENPTkZJR19PQ0ZTMl9GUykgKz0gY2x1c3Rlci8KLW9iai0kKENPTkZJR19PQ0ZTMl9GUykgKz0gZGxtLworb2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICs9IGRsbS8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IDQ0NzIwNmUuLjQxZjg0YzkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtMTAyOSw4ICsxMDI5LDcgQEAKIAlCVUdfT04oIW5leHRfZnJlZSk7CiAKIAkvKiBUaGUgdHJlZSBjb2RlIGJlZm9yZSB1cyBkaWRuJ3QgYWxsb3cgZW5vdWdoIHJvb20gaW4gdGhlIGxlYWYuICovCi0JaWYgKGVsLT5sX25leHRfZnJlZV9yZWMgPT0gZWwtPmxfY291bnQgJiYgIWhhc19lbXB0eSkKLQkJQlVHKCk7CisJQlVHX09OKGVsLT5sX25leHRfZnJlZV9yZWMgPT0gZWwtPmxfY291bnQgJiYgIWhhc19lbXB0eSk7CiAKIAkvKgogCSAqIFRoZSBlYXNpZXN0IHdheSB0byBhcHByb2FjaCB0aGlzIGlzIHRvIGp1c3QgcmVtb3ZlIHRoZQpAQCAtMTQ1MCw2ICsxNDQ5LDggQEAKICAqICAgLSBXaGVuIG91ciBpbnNlcnQgaW50byB0aGUgcmlnaHQgcGF0aCBsZWFmIGlzIGF0IHRoZSBsZWZ0bW9zdCBlZGdlCiAgKiAgICAgYW5kIHJlcXVpcmVzIGFuIHVwZGF0ZSBvZiB0aGUgcGF0aCBpbW1lZGlhdGVseSB0byBpdCdzIGxlZnQuIFRoaXMKICAqICAgICBjYW4gb2NjdXIgYXQgdGhlIGVuZCBvZiBzb21lIHR5cGVzIG9mIHJvdGF0aW9uIGFuZCBhcHBlbmRpbmcgaW5zZXJ0cy4KKyAqICAgLSBXaGVuIHdlJ3ZlIGFkanVzdGVkIHRoZSBsYXN0IGV4dGVudCByZWNvcmQgaW4gdGhlIGxlZnQgcGF0aCBsZWFmIGFuZCB0aGUKKyAqICAgICAxc3QgZXh0ZW50IHJlY29yZCBpbiB0aGUgcmlnaHQgcGF0aCBsZWFmIGR1cmluZyBjcm9zcyBleHRlbnQgYmxvY2sgbWVyZ2UuCiAgKi8KIHN0YXRpYyB2b2lkIG9jZnMyX2NvbXBsZXRlX2VkZ2VfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGgsCkBAIC0yNzEyLDI0ICsyNzEzLDE0NyBAQAogCX0KIH0KIAotLyoKLSAqIFJlbW92ZSBzcGxpdF9yZWMgY2x1c3RlcnMgZnJvbSB0aGUgcmVjb3JkIGF0IGluZGV4IGFuZCBtZXJnZSB0aGVtCi0gKiBvbnRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlY29yZCBhdCBpbmRleCArIDEuCi0gKi8KLXN0YXRpYyBpbnQgb2NmczJfbWVyZ2VfcmVjX3JpZ2h0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQkJaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAotCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsIGludCBpbmRleCkKK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3JpZ2h0X3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdF9wYXRoLAorCQkJCXN0cnVjdCBvY2ZzMl9wYXRoICoqcmV0X3JpZ2h0X3BhdGgpCiB7CiAJaW50IHJldDsKKwl1MzIgcmlnaHRfY3BvczsKKwlzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpsZWZ0X2VsOworCisJKnJldF9yaWdodF9wYXRoID0gTlVMTDsKKworCS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0IGJlIGNhbGxlZCBmb3Igbm9uLXRyZWVzLiAqLworCUJVR19PTihsZWZ0X3BhdGgtPnBfdHJlZV9kZXB0aCA9PSAwKTsKKworCWxlZnRfZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKKwlCVUdfT04obGVmdF9lbC0+bF9uZXh0X2ZyZWVfcmVjICE9IGxlZnRfZWwtPmxfY291bnQpOworCisJcmV0ID0gb2NmczJfZmluZF9jcG9zX2Zvcl9yaWdodF9sZWFmKGlub2RlLT5pX3NiLCBsZWZ0X3BhdGgsCisJCQkJCSAgICAgJnJpZ2h0X2Nwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIHRoZSByaWdodG1vc3QgbGVhZi4gKi8KKwlCVUdfT04ocmlnaHRfY3BvcyA9PSAwKTsKKworCXJpZ2h0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aChwYXRoX3Jvb3RfYmgobGVmdF9wYXRoKSwKKwkJCQkgICAgcGF0aF9yb290X2VsKGxlZnRfcGF0aCkpOworCWlmICghcmlnaHRfcGF0aCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2ZpbmRfcGF0aChpbm9kZSwgcmlnaHRfcGF0aCwgcmlnaHRfY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCSpyZXRfcmlnaHRfcGF0aCA9IHJpZ2h0X3BhdGg7CitvdXQ6CisJaWYgKHJldCkKKwkJb2NmczJfZnJlZV9wYXRoKHJpZ2h0X3BhdGgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZW1vdmUgc3BsaXRfcmVjIGNsdXN0ZXJzIGZyb20gdGhlIHJlY29yZCBhdCBpbmRleCBhbmQgbWVyZ2UgdGhlbQorICogb250byB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWNvcmQgIm5leHQiIHRvIGl0LgorICogRm9yIGluZGV4IDwgbF9jb3VudCAtIDEsIHRoZSBuZXh0IG1lYW5zIHRoZSBleHRlbnQgcmVjIGF0IGluZGV4ICsgMS4KKyAqIEZvciBpbmRleCA9PSBsX2NvdW50IC0gMSwgdGhlICJuZXh0IiBtZWFucyB0aGUgMXN0IGV4dGVudCByZWMgb2YgdGhlCisgKiBuZXh0IGV4dGVudCBibG9jay4KKyAqLworc3RhdGljIGludCBvY2ZzMl9tZXJnZV9yZWNfcmlnaHQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCwKKwkJCQkgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKKwkJCQkgaW50IGluZGV4KQoreworCWludCByZXQsIG5leHRfZnJlZSwgaTsKIAl1bnNpZ25lZCBpbnQgc3BsaXRfY2x1c3RlcnMgPSBsZTE2X3RvX2NwdShzcGxpdF9yZWMtPmVfbGVhZl9jbHVzdGVycyk7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmxlZnRfcmVjOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyaWdodF9yZWM7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyaWdodF9lbDsKKwlzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCA9IE5VTEw7CisJaW50IHN1YnRyZWVfaW5kZXggPSAwOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gcGF0aF9sZWFmX2JoKGxlZnRfcGF0aCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoID0gTlVMTDsKIAogCUJVR19PTihpbmRleCA+PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSk7Ci0KIAlsZWZ0X3JlYyA9ICZlbC0+bF9yZWNzW2luZGV4XTsKLQlyaWdodF9yZWMgPSAmZWwtPmxfcmVjc1tpbmRleCArIDFdOworCisJaWYgKGluZGV4ID09IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMgLSAxKSAmJgorCSAgICBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSBsZTE2X3RvX2NwdShlbC0+bF9jb3VudCkpIHsKKwkJLyogd2UgbWVldCB3aXRoIGEgY3Jvc3MgZXh0ZW50IGJsb2NrIG1lcmdlLiAqLworCQlyZXQgPSBvY2ZzMl9nZXRfcmlnaHRfcGF0aChpbm9kZSwgbGVmdF9wYXRoLCAmcmlnaHRfcGF0aCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmlnaHRfZWwgPSBwYXRoX2xlYWZfZWwocmlnaHRfcGF0aCk7CisJCW5leHRfZnJlZSA9IGxlMTZfdG9fY3B1KHJpZ2h0X2VsLT5sX25leHRfZnJlZV9yZWMpOworCQlCVUdfT04obmV4dF9mcmVlIDw9IDApOworCQlyaWdodF9yZWMgPSAmcmlnaHRfZWwtPmxfcmVjc1swXTsKKwkJaWYgKG9jZnMyX2lzX2VtcHR5X2V4dGVudChyaWdodF9yZWMpKSB7CisJCQlCVUdfT04obGUxNl90b19jcHUobmV4dF9mcmVlKSA8PSAxKTsKKwkJCXJpZ2h0X3JlYyA9ICZyaWdodF9lbC0+bF9yZWNzWzFdOworCQl9CisKKwkJQlVHX09OKGxlMzJfdG9fY3B1KGxlZnRfcmVjLT5lX2Nwb3MpICsKKwkJICAgICAgIGxlMTZfdG9fY3B1KGxlZnRfcmVjLT5lX2xlYWZfY2x1c3RlcnMpICE9CisJCSAgICAgICBsZTMyX3RvX2NwdShyaWdodF9yZWMtPmVfY3BvcykpOworCisJCXN1YnRyZWVfaW5kZXggPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChpbm9kZSwKKwkJCQkJCQlsZWZ0X3BhdGgsIHJpZ2h0X3BhdGgpOworCisJCXJldCA9IG9jZnMyX2V4dGVuZF9yb3RhdGVfdHJhbnNhY3Rpb24oaGFuZGxlLCBzdWJ0cmVlX2luZGV4LAorCQkJCQkJICAgICAgaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzLAorCQkJCQkJICAgICAgcmlnaHRfcGF0aCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcm9vdF9iaCA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfaW5kZXhdLmJoOworCQlCVUdfT04ocm9vdF9iaCAhPSByaWdodF9wYXRoLT5wX25vZGVbc3VidHJlZV9pbmRleF0uYmgpOworCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHJvb3RfYmgsCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsKKwkJICAgICBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgeworCQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJCQkJCSAgIHJpZ2h0X3BhdGgtPnBfbm9kZVtpXS5iaCwKKwkJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsCisJCQkJCQkgICBsZWZ0X3BhdGgtPnBfbm9kZVtpXS5iaCwKKwkJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisJCUJVR19PTihpbmRleCA9PSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDEpOworCQlyaWdodF9yZWMgPSAmZWwtPmxfcmVjc1tpbmRleCArIDFdOworCX0KIAogCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKQEAgLTI3NTEsMzAgKzI4NzUsMTU2IEBACiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCisJaWYgKHJpZ2h0X3BhdGgpIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHBhdGhfbGVhZl9iaChyaWdodF9wYXRoKSk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisKKwkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLAorCQkJCQkgICByaWdodF9wYXRoLCBzdWJ0cmVlX2luZGV4KTsKKwl9CiBvdXQ6CisJaWYgKHJpZ2h0X3BhdGgpCisJCW9jZnMyX2ZyZWVfcGF0aChyaWdodF9wYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2dldF9sZWZ0X3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqKnJldF9sZWZ0X3BhdGgpCit7CisJaW50IHJldDsKKwl1MzIgbGVmdF9jcG9zOworCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMOworCisJKnJldF9sZWZ0X3BhdGggPSBOVUxMOworCisJLyogVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgY2FsbGVkIGZvciBub24tdHJlZXMuICovCisJQlVHX09OKHJpZ2h0X3BhdGgtPnBfdHJlZV9kZXB0aCA9PSAwKTsKKworCXJldCA9IG9jZnMyX2ZpbmRfY3Bvc19mb3JfbGVmdF9sZWFmKGlub2RlLT5pX3NiLAorCQkJCQkgICAgcmlnaHRfcGF0aCwgJmxlZnRfY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkbid0IGJlIGNhbGxlZCBmb3IgdGhlIGxlZnRtb3N0IGxlYWYuICovCisJQlVHX09OKGxlZnRfY3BvcyA9PSAwKTsKKworCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoKHBhdGhfcm9vdF9iaChyaWdodF9wYXRoKSwKKwkJCQkgICBwYXRoX3Jvb3RfZWwocmlnaHRfcGF0aCkpOworCWlmICghbGVmdF9wYXRoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGxlZnRfY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCSpyZXRfbGVmdF9wYXRoID0gbGVmdF9wYXRoOworb3V0OgorCWlmIChyZXQpCisJCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCiAgKiBSZW1vdmUgc3BsaXRfcmVjIGNsdXN0ZXJzIGZyb20gdGhlIHJlY29yZCBhdCBpbmRleCBhbmQgbWVyZ2UgdGhlbQotICogb250byB0aGUgdGFpbCBvZiB0aGUgcmVjb3JkIGF0IGluZGV4IC0gMS4KKyAqIG9udG8gdGhlIHRhaWwgb2YgdGhlIHJlY29yZCAiYmVmb3JlIiBpdC4KKyAqIEZvciBpbmRleCA+IDAsIHRoZSAiYmVmb3JlIiBtZWFucyB0aGUgZXh0ZW50IHJlYyBhdCBpbmRleCAtIDEuCisgKgorICogRm9yIGluZGV4ID09IDAsIHRoZSAiYmVmb3JlIiBtZWFucyB0aGUgbGFzdCByZWNvcmQgb2YgdGhlIHByZXZpb3VzCisgKiBleHRlbnQgYmxvY2suIEFuZCB0aGVyZSBpcyBhbHNvIGEgc2l0dWF0aW9uIHRoYXQgd2UgbWF5IG5lZWQgdG8KKyAqIHJlbW92ZSB0aGUgcmlnaHRtb3N0IGxlYWYgZXh0ZW50IGJsb2NrIGluIHRoZSByaWdodF9wYXRoIGFuZCBjaGFuZ2UKKyAqIHRoZSByaWdodCBwYXRoIHRvIGluZGljYXRlIHRoZSBuZXcgcmlnaHRtb3N0IHBhdGguCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfbWVyZ2VfcmVjX2xlZnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKK3N0YXRpYyBpbnQgb2NmczJfbWVyZ2VfcmVjX2xlZnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCwKIAkJCQloYW5kbGVfdCAqaGFuZGxlLAogCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpzcGxpdF9yZWMsCi0JCQkJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwgaW50IGluZGV4KQorCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAorCQkJCWludCBpbmRleCkKIHsKLQlpbnQgcmV0LCBoYXNfZW1wdHlfZXh0ZW50ID0gMDsKKwlpbnQgcmV0LCBpLCBzdWJ0cmVlX2luZGV4ID0gMCwgaGFzX2VtcHR5X2V4dGVudCA9IDA7CiAJdW5zaWduZWQgaW50IHNwbGl0X2NsdXN0ZXJzID0gbGUxNl90b19jcHUoc3BsaXRfcmVjLT5lX2xlYWZfY2x1c3RlcnMpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpsZWZ0X3JlYzsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmlnaHRfcmVjOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSBwYXRoX2xlYWZfZWwocmlnaHRfcGF0aCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IHBhdGhfbGVhZl9iaChyaWdodF9wYXRoKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqbGVmdF9lbDsKIAotCUJVR19PTihpbmRleCA8PSAwKTsKKwlCVUdfT04oaW5kZXggPCAwKTsKIAotCWxlZnRfcmVjID0gJmVsLT5sX3JlY3NbaW5kZXggLSAxXTsKIAlyaWdodF9yZWMgPSAmZWwtPmxfcmVjc1tpbmRleF07Ci0JaWYgKG9jZnMyX2lzX2VtcHR5X2V4dGVudCgmZWwtPmxfcmVjc1swXSkpCi0JCWhhc19lbXB0eV9leHRlbnQgPSAxOworCWlmIChpbmRleCA9PSAwKSB7CisJCS8qIHdlIG1lZXQgd2l0aCBhIGNyb3NzIGV4dGVudCBibG9jayBtZXJnZS4gKi8KKwkJcmV0ID0gb2NmczJfZ2V0X2xlZnRfcGF0aChpbm9kZSwgcmlnaHRfcGF0aCwgJmxlZnRfcGF0aCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbGVmdF9lbCA9IHBhdGhfbGVhZl9lbChsZWZ0X3BhdGgpOworCQlCVUdfT04obGUxNl90b19jcHUobGVmdF9lbC0+bF9uZXh0X2ZyZWVfcmVjKSAhPQorCQkgICAgICAgbGUxNl90b19jcHUobGVmdF9lbC0+bF9jb3VudCkpOworCisJCWxlZnRfcmVjID0gJmxlZnRfZWwtPmxfcmVjc1sKKwkJCQlsZTE2X3RvX2NwdShsZWZ0X2VsLT5sX25leHRfZnJlZV9yZWMpIC0gMV07CisJCUJVR19PTihsZTMyX3RvX2NwdShsZWZ0X3JlYy0+ZV9jcG9zKSArCisJCSAgICAgICBsZTE2X3RvX2NwdShsZWZ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSAhPQorCQkgICAgICAgbGUzMl90b19jcHUoc3BsaXRfcmVjLT5lX2Nwb3MpKTsKKworCQlzdWJ0cmVlX2luZGV4ID0gb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3QoaW5vZGUsCisJCQkJCQkJbGVmdF9wYXRoLCByaWdodF9wYXRoKTsKKworCQlyZXQgPSBvY2ZzMl9leHRlbmRfcm90YXRlX3RyYW5zYWN0aW9uKGhhbmRsZSwgc3VidHJlZV9pbmRleCwKKwkJCQkJCSAgICAgIGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cywKKwkJCQkJCSAgICAgIGxlZnRfcGF0aCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcm9vdF9iaCA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfaW5kZXhdLmJoOworCQlCVUdfT04ocm9vdF9iaCAhPSByaWdodF9wYXRoLT5wX25vZGVbc3VidHJlZV9pbmRleF0uYmgpOworCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHJvb3RfYmgsCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSBzdWJ0cmVlX2luZGV4ICsgMTsKKwkJICAgICBpIDwgcGF0aF9udW1faXRlbXMocmlnaHRfcGF0aCk7IGkrKykgeworCQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwKKwkJCQkJCSAgIHJpZ2h0X3BhdGgtPnBfbm9kZVtpXS5iaCwKKwkJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsCisJCQkJCQkgICBsZWZ0X3BhdGgtPnBfbm9kZVtpXS5iaCwKKwkJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlsZWZ0X3JlYyA9ICZlbC0+bF9yZWNzW2luZGV4IC0gMV07CisJCWlmIChvY2ZzMl9pc19lbXB0eV9leHRlbnQoJmVsLT5sX3JlY3NbMF0pKQorCQkJaGFzX2VtcHR5X2V4dGVudCA9IDE7CisJfQogCiAJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwpAQCAtMjc5MCw5ICszMDQwLDggQEAKIAkJKmxlZnRfcmVjID0gKnNwbGl0X3JlYzsKIAogCQloYXNfZW1wdHlfZXh0ZW50ID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlsZTE2X2FkZF9jcHUoJmxlZnRfcmVjLT5lX2xlYWZfY2x1c3RlcnMsIHNwbGl0X2NsdXN0ZXJzKTsKLQl9CiAKIAlsZTMyX2FkZF9jcHUoJnJpZ2h0X3JlYy0+ZV9jcG9zLCBzcGxpdF9jbHVzdGVycyk7CiAJbGU2NF9hZGRfY3B1KCZyaWdodF9yZWMtPmVfYmxrbm8sCkBAIC0yODA1LDEzICszMDU0LDQ0IEBACiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCisJaWYgKGxlZnRfcGF0aCkgeworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcGF0aF9sZWFmX2JoKGxlZnRfcGF0aCkpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCisJCS8qCisJCSAqIEluIHRoZSBzaXR1YXRpb24gdGhhdCB0aGUgcmlnaHRfcmVjIGlzIGVtcHR5IGFuZCB0aGUgZXh0ZW50CisJCSAqIGJsb2NrIGlzIGVtcHR5IGFsc28sICBvY2ZzMl9jb21wbGV0ZV9lZGdlX2luc2VydCBjYW4ndCBoYW5kbGUKKwkJICogaXQgYW5kIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSByaWdodCBleHRlbnQgYmxvY2suCisJCSAqLworCQlpZiAobGUxNl90b19jcHUocmlnaHRfcmVjLT5lX2xlYWZfY2x1c3RlcnMpID09IDAgJiYKKwkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IDEpIHsKKworCQkJcmV0ID0gb2NmczJfcmVtb3ZlX3JpZ2h0bW9zdF9wYXRoKGlub2RlLCBoYW5kbGUsCisJCQkJCQkJICByaWdodF9wYXRoLCBkZWFsbG9jKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCS8qIE5vdyB0aGUgcmlnaHRtb3N0IGV4dGVudCBibG9jayBoYXMgYmVlbiBkZWxldGVkLgorCQkJICogU28gd2UgdXNlIHRoZSBuZXcgcmlnaHRtb3N0IHBhdGguCisJCQkgKi8KKwkJCW9jZnMyX212X3BhdGgocmlnaHRfcGF0aCwgbGVmdF9wYXRoKTsKKwkJCWxlZnRfcGF0aCA9IE5VTEw7CisJCX0gZWxzZQorCQkJb2NmczJfY29tcGxldGVfZWRnZV9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLAorCQkJCQkJICAgcmlnaHRfcGF0aCwgc3VidHJlZV9pbmRleCk7CisJfQogb3V0OgorCWlmIChsZWZ0X3BhdGgpCisJCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGgsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKIAkJCQkgICAgIGludCBzcGxpdF9pbmRleCwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpzcGxpdF9yZWMsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKQEAgLTI4MTksNyArMzA5OSw3IEBACiAKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gcGF0aF9sZWFmX2VsKGxlZnRfcGF0aCk7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9IHBhdGhfbGVhZl9lbChwYXRoKTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjID0gJmVsLT5sX3JlY3Nbc3BsaXRfaW5kZXhdOwogCiAJQlVHX09OKGN0eHQtPmNfY29udGlnX3R5cGUgPT0gQ09OVElHX05PTkUpOwpAQCAtMjgzMiw3ICszMTEyLDcgQEAKIAkJICogZXh0ZW50cyAtIGhhdmluZyBtb3JlIHRoYW4gb25lIGluIGEgbGVhZiBpcwogCQkgKiBpbGxlZ2FsLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgsCisJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwKIAkJCQkJICAgICBkZWFsbG9jKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjg0Nyw3ICszMTI3LDYgQEAKIAkJICogTGVmdC1yaWdodCBjb250aWcgaW1wbGllcyB0aGlzLgogCQkgKi8KIAkJQlVHX09OKCFjdHh0LT5jX3NwbGl0X2NvdmVyc19yZWMpOwotCQlCVUdfT04oc3BsaXRfaW5kZXggPT0gMCk7CiAKIAkJLyoKIAkJICogU2luY2UgdGhlIGxlZnRyaWdodCBpbnNlcnQgYWx3YXlzIGNvdmVycyB0aGUgZW50aXJlCkBAIC0yODU4LDkgKzMxMzcsMTQgQEAKIAkJICogU2luY2UgdGhlIGFkZGluZyBvZiBhbiBlbXB0eSBleHRlbnQgc2hpZnRzCiAJCSAqIGV2ZXJ5dGhpbmcgYmFjayB0byB0aGUgcmlnaHQsIHRoZXJlJ3Mgbm8gbmVlZCB0bwogCQkgKiB1cGRhdGUgc3BsaXRfaW5kZXggaGVyZS4KKwkJICoKKwkJICogV2hlbiB0aGUgc3BsaXRfaW5kZXggaXMgemVybywgd2UgbmVlZCB0byBtZXJnZSBpdCB0byB0aGUKKwkJICogcHJldm9pdXMgZXh0ZW50IGJsb2NrLiBJdCBpcyBtb3JlIGVmZmljaWVudCBhbmQgZWFzaWVyCisJCSAqIGlmIHdlIGRvIG1lcmdlX3JpZ2h0IGZpcnN0IGFuZCBtZXJnZV9sZWZ0IGxhdGVyLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX2xlZnQoaW5vZGUsIHBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpLAotCQkJCQkgICBoYW5kbGUsIHNwbGl0X3JlYywgZWwsIHNwbGl0X2luZGV4KTsKKwkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX3JpZ2h0KGlub2RlLCBwYXRoLAorCQkJCQkgICAgaGFuZGxlLCBzcGxpdF9yZWMsCisJCQkJCSAgICBzcGxpdF9pbmRleCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtMjg3MSwzMiArMzE1NSwzMCBAQAogCQkgKi8KIAkJQlVHX09OKCFvY2ZzMl9pc19lbXB0eV9leHRlbnQoJmVsLT5sX3JlY3NbMF0pKTsKIAotCQkvKgotCQkgKiBUaGUgbGVmdCBtZXJnZSBsZWZ0IHVzIHdpdGggYW4gZW1wdHkgZXh0ZW50LCByZW1vdmUKLQkJICogaXQuCi0JCSAqLwotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwgZGVhbGxvYyk7CisJCS8qIFRoZSBtZXJnZSBsZWZ0IHVzIHdpdGggYW4gZW1wdHkgZXh0ZW50LCByZW1vdmUgaXQuICovCisJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwgZGVhbGxvYyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCXNwbGl0X2luZGV4LS07CisKIAkJcmVjID0gJmVsLT5sX3JlY3Nbc3BsaXRfaW5kZXhdOwogCiAJCS8qCiAJCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBwYXNzIHNwbGl0X3JlYyBoZXJlIG9uIHB1cnBvc2UgLQotCQkgKiB3ZSd2ZSBtZXJnZWQgaXQgaW50byB0aGUgbGVmdCBzaWRlLgorCQkgKiB3ZSd2ZSBtZXJnZWQgaXQgaW50byB0aGUgcmVjIGFscmVhZHkuCiAJCSAqLwotCQlyZXQgPSBvY2ZzMl9tZXJnZV9yZWNfcmlnaHQoaW5vZGUsIHBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpLAotCQkJCQkgICAgaGFuZGxlLCByZWMsIGVsLCBzcGxpdF9pbmRleCk7CisJCXJldCA9IG9jZnMyX21lcmdlX3JlY19sZWZ0KGlub2RlLCBwYXRoLAorCQkJCQkgICBoYW5kbGUsIHJlYywKKwkJCQkJICAgZGVhbGxvYywKKwkJCQkJICAgc3BsaXRfaW5kZXgpOworCiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJQlVHX09OKCFvY2ZzMl9pc19lbXB0eV9leHRlbnQoJmVsLT5sX3JlY3NbMF0pKTsKLQotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCwKKwkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLAogCQkJCQkgICAgIGRlYWxsb2MpOwogCQkvKgogCQkgKiBFcnJvciBmcm9tIHRoaXMgbGFzdCByb3RhdGUgaXMgbm90IGNyaXRpY2FsLCBzbwpAQCAtMjkxNSw4ICszMTk3LDkgQEAKIAkJICovCiAJCWlmIChjdHh0LT5jX2NvbnRpZ190eXBlID09IENPTlRJR19SSUdIVCkgewogCQkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX2xlZnQoaW5vZGUsCi0JCQkJCQkgICBwYXRoX2xlYWZfYmgobGVmdF9wYXRoKSwKLQkJCQkJCSAgIGhhbmRsZSwgc3BsaXRfcmVjLCBlbCwKKwkJCQkJCSAgIHBhdGgsCisJCQkJCQkgICBoYW5kbGUsIHNwbGl0X3JlYywKKwkJCQkJCSAgIGRlYWxsb2MsCiAJCQkJCQkgICBzcGxpdF9pbmRleCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjkyNCw4ICszMjA3LDggQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXJldCA9IG9jZnMyX21lcmdlX3JlY19yaWdodChpbm9kZSwKLQkJCQkJCSAgICBwYXRoX2xlYWZfYmgobGVmdF9wYXRoKSwKLQkJCQkJCSAgICBoYW5kbGUsIHNwbGl0X3JlYywgZWwsCisJCQkJCQkgICAgcGF0aCwKKwkJCQkJCSAgICBoYW5kbGUsIHNwbGl0X3JlYywKIAkJCQkJCSAgICBzcGxpdF9pbmRleCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjkzOCw3ICszMjIxLDcgQEAKIAkJCSAqIFRoZSBtZXJnZSBtYXkgaGF2ZSBsZWZ0IGFuIGVtcHR5IGV4dGVudCBpbgogCQkJICogb3VyIGxlYWYuIFRyeSB0byByb3RhdGUgaXQgYXdheS4KIAkJCSAqLwotCQkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgsCisJCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCiAJCQkJCQkgICAgIGRlYWxsb2MpOwogCQkJaWYgKHJldCkKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNDk4LDIwICszNzgxLDU3IEBACiB9CiAKIHN0YXRpYyBlbnVtIG9jZnMyX2NvbnRpZ190eXBlCi1vY2ZzMl9maWd1cmVfbWVyZ2VfY29udGlnX3R5cGUoc3RydWN0IGlub2RlICppbm9kZSwKK29jZnMyX2ZpZ3VyZV9tZXJnZV9jb250aWdfdHlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLCBpbnQgaW5kZXgsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYykKIHsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjOworCWludCBzdGF0dXM7CiAJZW51bSBvY2ZzMl9jb250aWdfdHlwZSByZXQgPSBDT05USUdfTk9ORTsKKwl1MzIgbGVmdF9jcG9zLCByaWdodF9jcG9zOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqbmV3X2VsOworCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMLCAqcmlnaHRfcGF0aCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKKworCWlmIChpbmRleCA+IDApIHsKKwkJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXggLSAxXTsKKwl9IGVsc2UgaWYgKHBhdGgtPnBfdHJlZV9kZXB0aCA+IDApIHsKKwkJc3RhdHVzID0gb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoaW5vZGUtPmlfc2IsCisJCQkJCQkgICAgICAgcGF0aCwgJmxlZnRfY3Bvcyk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIG91dDsKKworCQlpZiAobGVmdF9jcG9zICE9IDApIHsKKwkJCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoKHBhdGhfcm9vdF9iaChwYXRoKSwKKwkJCQkJCSAgIHBhdGhfcm9vdF9lbChwYXRoKSk7CisJCQlpZiAoIWxlZnRfcGF0aCkKKwkJCQlnb3RvIG91dDsKKworCQkJc3RhdHVzID0gb2NmczJfZmluZF9wYXRoKGlub2RlLCBsZWZ0X3BhdGgsIGxlZnRfY3Bvcyk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWdvdG8gb3V0OworCisJCQluZXdfZWwgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKTsKKworCQkJaWYgKGxlMTZfdG9fY3B1KG5ld19lbC0+bF9uZXh0X2ZyZWVfcmVjKSAhPQorCQkJICAgIGxlMTZfdG9fY3B1KG5ld19lbC0+bF9jb3VudCkpIHsKKwkJCQliaCA9IHBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpOworCQkJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKiliaC0+Yl9kYXRhOworCQkJCU9DRlMyX1JPX09OX0lOVkFMSURfRVhURU5UX0JMT0NLKGlub2RlLT5pX3NiLAorCQkJCQkJCQkgZWIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJcmVjID0gJm5ld19lbC0+bF9yZWNzWworCQkJCWxlMTZfdG9fY3B1KG5ld19lbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDFdOworCQl9CisJfQogCiAJLyoKIAkgKiBXZSdyZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBhbiBlbXB0eSBleHRlbnQgcmVjb3JkIGhlcmUgLQogCSAqIHRoZSBtZXJnZSBjb2RlIHdpbGwga25vdyB3aGF0IHRvIGRvIGlmIGl0IHNlZXMgb25lLgogCSAqLwotCi0JaWYgKGluZGV4ID4gMCkgewotCQlyZWMgPSAmZWwtPmxfcmVjc1tpbmRleCAtIDFdOworCWlmIChyZWMpIHsKIAkJaWYgKGluZGV4ID09IDEgJiYgb2NmczJfaXNfZW1wdHlfZXh0ZW50KHJlYykpIHsKIAkJCWlmIChzcGxpdF9yZWMtPmVfY3BvcyA9PSBlbC0+bF9yZWNzW2luZGV4XS5lX2Nwb3MpCiAJCQkJcmV0ID0gQ09OVElHX1JJR0hUOwpAQCAtMzUyMCwxMCArMzg0MCw0NSBAQAogCQl9CiAJfQogCi0JaWYgKGluZGV4IDwgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMSkpIHsKKwlyZWMgPSBOVUxMOworCWlmIChpbmRleCA8IChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDEpKQorCQlyZWMgPSAmZWwtPmxfcmVjc1tpbmRleCArIDFdOworCWVsc2UgaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IGxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSAmJgorCQkgcGF0aC0+cF90cmVlX2RlcHRoID4gMCkgeworCQlzdGF0dXMgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoaW5vZGUtPmlfc2IsCisJCQkJCQkJcGF0aCwgJnJpZ2h0X2Nwb3MpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKHJpZ2h0X2Nwb3MgPT0gMCkKKwkJCWdvdG8gb3V0OworCisJCXJpZ2h0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aChwYXRoX3Jvb3RfYmgocGF0aCksCisJCQkJCSAgICBwYXRoX3Jvb3RfZWwocGF0aCkpOworCQlpZiAoIXJpZ2h0X3BhdGgpCisJCQlnb3RvIG91dDsKKworCQlzdGF0dXMgPSBvY2ZzMl9maW5kX3BhdGgoaW5vZGUsIHJpZ2h0X3BhdGgsIHJpZ2h0X2Nwb3MpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBvdXQ7CisKKwkJbmV3X2VsID0gcGF0aF9sZWFmX2VsKHJpZ2h0X3BhdGgpOworCQlyZWMgPSAmbmV3X2VsLT5sX3JlY3NbMF07CisJCWlmIChvY2ZzMl9pc19lbXB0eV9leHRlbnQocmVjKSkgeworCQkJaWYgKGxlMTZfdG9fY3B1KG5ld19lbC0+bF9uZXh0X2ZyZWVfcmVjKSA8PSAxKSB7CisJCQkJYmggPSBwYXRoX2xlYWZfYmgocmlnaHRfcGF0aCk7CisJCQkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKWJoLT5iX2RhdGE7CisJCQkJT0NGUzJfUk9fT05fSU5WQUxJRF9FWFRFTlRfQkxPQ0soaW5vZGUtPmlfc2IsCisJCQkJCQkJCSBlYik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlyZWMgPSAmbmV3X2VsLT5sX3JlY3NbMV07CisJCX0KKwl9CisKKwlpZiAocmVjKSB7CiAJCWVudW0gb2NmczJfY29udGlnX3R5cGUgY29udGlnX3R5cGU7CiAKLQkJcmVjID0gJmVsLT5sX3JlY3NbaW5kZXggKyAxXTsKIAkJY29udGlnX3R5cGUgPSBvY2ZzMl9leHRlbnRfY29udGlnKGlub2RlLCByZWMsIHNwbGl0X3JlYyk7CiAKIAkJaWYgKGNvbnRpZ190eXBlID09IENPTlRJR19MRUZUICYmIHJldCA9PSBDT05USUdfUklHSFQpCkBAIC0zNTMyLDYgKzM4ODcsMTIgQEAKIAkJCXJldCA9IGNvbnRpZ190eXBlOwogCX0KIAorb3V0OgorCWlmIChsZWZ0X3BhdGgpCisJCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOworCWlmIChyaWdodF9wYXRoKQorCQlvY2ZzMl9mcmVlX3BhdGgocmlnaHRfcGF0aCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zOTk0LDcgKzQzNTUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljdHh0LmNfY29udGlnX3R5cGUgPSBvY2ZzMl9maWd1cmVfbWVyZ2VfY29udGlnX3R5cGUoaW5vZGUsIGVsLAorCWN0eHQuY19jb250aWdfdHlwZSA9IG9jZnMyX2ZpZ3VyZV9tZXJnZV9jb250aWdfdHlwZShpbm9kZSwgcGF0aCwgZWwsCiAJCQkJCQkJICAgIHNwbGl0X2luZGV4LAogCQkJCQkJCSAgICBzcGxpdF9yZWMpOwogCkBAIC00Nzg4LDYgKzUxNDksOCBAQAogCXN0YXR1cyA9IG9jZnMyX2ZsdXNoX3RydW5jYXRlX2xvZyhvc2IpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJZWxzZQorCQlvY2ZzMl9pbml0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IDgyMjQzMTIuLjE3OTY0YzAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKLQlCVUdfT04oIU9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCk7CisJQlVHX09OKCEoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSk7CiAKIAlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmZGlfYmgsCiAJCQkgICAgICAgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CkBAIC00NjcsMTEgKzQ2NywxMSBAQAogCQkJCQkJCSB1bnNpZ25lZCB0bykKIHsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKLQloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwloYW5kbGVfdCAqaGFuZGxlOwogCWludCByZXQgPSAwOwogCiAJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7Ci0JaWYgKCFoYW5kbGUpIHsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCX0KIG91dDoKIAlpZiAocmV0KSB7Ci0JCWlmIChoYW5kbGUpCisJCWlmICghSVNfRVJSKGhhbmRsZSkpCiAJCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOwogCQloYW5kbGUgPSBFUlJfUFRSKHJldCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9NYWtlZmlsZSBiL2ZzL29jZnMyL2NsdXN0ZXIvTWFrZWZpbGUKaW5kZXggY2RkMTYyZi4uYmM4YzVlNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAogb2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBvY2ZzMl9ub2RlbWFuYWdlci5vCiAKIG9jZnMyX25vZGVtYW5hZ2VyLW9ianMgOj0gaGVhcnRiZWF0Lm8gbWFza2xvZy5vIHN5cy5vIG5vZGVtYW5hZ2VyLm8gXAotCXF1b3J1bS5vIHRjcC5vIHZlci5vCisJcXVvcnVtLm8gdGNwLm8gbmV0ZGVidWcubyB2ZXIubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jIGIvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZjNjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKQEAgLTAsMCArMSw0NDEgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiBuZXRkZWJ1Zy5jCisgKgorICogZGVidWcgZnVuY3Rpb25hbGl0eSBmb3IgbzJuZXQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInRjcC5oIgorI2luY2x1ZGUgIm5vZGVtYW5hZ2VyLmgiCisjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfVENQCisjaW5jbHVkZSAibWFza2xvZy5oIgorCisjaW5jbHVkZSAidGNwX2ludGVybmFsLmgiCisKKyNkZWZpbmUgTzJORVRfREVCVUdfRElSCQkibzJuZXQiCisjZGVmaW5lIFNDX0RFQlVHX05BTUUJCSJzb2NrX2NvbnRhaW5lcnMiCisjZGVmaW5lIE5TVF9ERUJVR19OQU1FCQkic2VuZF90cmFja2luZyIKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm8ybmV0X2RlbnRyeTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzY19kZW50cnk7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnN0X2RlbnRyeTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhvMm5ldF9kZWJ1Z19sb2NrKTsKKworc3RhdGljIExJU1RfSEVBRChzb2NrX2NvbnRhaW5lcnMpOworc3RhdGljIExJU1RfSEVBRChzZW5kX3RyYWNraW5nKTsKKwordm9pZCBvMm5ldF9kZWJ1Z19hZGRfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QpCit7CisJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKwlsaXN0X2FkZCgmbnN0LT5zdF9uZXRfZGVidWdfaXRlbSwgJnNlbmRfdHJhY2tpbmcpOworCXNwaW5fdW5sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKK30KKwordm9pZCBvMm5ldF9kZWJ1Z19kZWxfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QpCit7CisJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJm5zdC0+c3RfbmV0X2RlYnVnX2l0ZW0pKQorCQlsaXN0X2RlbF9pbml0KCZuc3QtPnN0X25ldF9kZWJ1Z19pdGVtKTsKKwlzcGluX3VubG9jaygmbzJuZXRfZGVidWdfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZworCQkJKm5leHRfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3Rfc3RhcnQpCit7CisJc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCwgKnJldCA9IE5VTEw7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJm8ybmV0X2RlYnVnX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShuc3QsICZuc3Rfc3RhcnQtPnN0X25ldF9kZWJ1Z19pdGVtLAorCQkJICAgIHN0X25ldF9kZWJ1Z19pdGVtKSB7CisJCS8qIGRpc2NvdmVyIHRoZSBoZWFkIG9mIHRoZSBsaXN0ICovCisJCWlmICgmbnN0LT5zdF9uZXRfZGVidWdfaXRlbSA9PSAmc2VuZF90cmFja2luZykKKwkJCWJyZWFrOworCisJCS8qIHVzZSBzdF90YXNrIHRvIGRldGVjdCByZWFsIG5zdHMgaW4gdGhlIGxpc3QgKi8KKwkJaWYgKG5zdC0+c3RfdGFzayAhPSBOVUxMKSB7CisJCQlyZXQgPSBuc3Q7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICpuc3Rfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0LCAqZHVtbXlfbnN0ID0gc2VxLT5wcml2YXRlOworCisJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKwluc3QgPSBuZXh0X25zdChkdW1teV9uc3QpOworCXNwaW5fdW5sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKworCXJldHVybiBuc3Q7Cit9CisKK3N0YXRpYyB2b2lkICpuc3Rfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QsICpkdW1teV9uc3QgPSBzZXEtPnByaXZhdGU7CisKKwlzcGluX2xvY2soJm8ybmV0X2RlYnVnX2xvY2spOworCW5zdCA9IG5leHRfbnN0KGR1bW15X25zdCk7CisJbGlzdF9kZWxfaW5pdCgmZHVtbXlfbnN0LT5zdF9uZXRfZGVidWdfaXRlbSk7CisJaWYgKG5zdCkKKwkJbGlzdF9hZGQoJmR1bW15X25zdC0+c3RfbmV0X2RlYnVnX2l0ZW0sCisJCQkgJm5zdC0+c3RfbmV0X2RlYnVnX2l0ZW0pOworCXNwaW5fdW5sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKworCXJldHVybiBuc3Q7IC8qIHVudXNlZCwganVzdCBuZWVkcyB0byBiZSBudWxsIHdoZW4gZG9uZSAqLworfQorCitzdGF0aWMgaW50IG5zdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0LCAqZHVtbXlfbnN0ID0gc2VxLT5wcml2YXRlOworCisJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKwluc3QgPSBuZXh0X25zdChkdW1teV9uc3QpOworCisJaWYgKG5zdCAhPSBOVUxMKSB7CisJCS8qIGdldF90YXNrX2NvbW0gaXNuJ3QgZXhwb3J0ZWQuICBvaCB3ZWxsLiAqLworCQlzZXFfcHJpbnRmKHNlcSwgIiVwOlxuIgorCQkJICAgIiAgcGlkOiAgICAgICAgICAlbHVcbiIKKwkJCSAgICIgIHRnaWQ6ICAgICAgICAgJWx1XG4iCisJCQkgICAiICBwcm9jZXNzIG5hbWU6ICVzXG4iCisJCQkgICAiICBub2RlOiAgICAgICAgICV1XG4iCisJCQkgICAiICBzYzogICAgICAgICAgICVwXG4iCisJCQkgICAiICBtZXNzYWdlIGlkOiAgICVkXG4iCisJCQkgICAiICBtZXNzYWdlIHR5cGU6ICV1XG4iCisJCQkgICAiICBtZXNzYWdlIGtleTogIDB4JTA4eFxuIgorCQkJICAgIiAgc29jayBhY3F1aXJ5OiAlbHUuJWx1XG4iCisJCQkgICAiICBzZW5kIHN0YXJ0OiAgICVsdS4lbHVcbiIKKwkJCSAgICIgIHdhaXQgc3RhcnQ6ICAgJWx1LiVsdVxuIiwKKwkJCSAgIG5zdCwgKHVuc2lnbmVkIGxvbmcpbnN0LT5zdF90YXNrLT5waWQsCisJCQkgICAodW5zaWduZWQgbG9uZyluc3QtPnN0X3Rhc2stPnRnaWQsCisJCQkgICBuc3QtPnN0X3Rhc2stPmNvbW0sIG5zdC0+c3Rfbm9kZSwKKwkJCSAgIG5zdC0+c3Rfc2MsIG5zdC0+c3RfaWQsIG5zdC0+c3RfbXNnX3R5cGUsCisJCQkgICBuc3QtPnN0X21zZ19rZXksCisJCQkgICBuc3QtPnN0X3NvY2tfdGltZS50dl9zZWMsIG5zdC0+c3Rfc29ja190aW1lLnR2X3VzZWMsCisJCQkgICBuc3QtPnN0X3NlbmRfdGltZS50dl9zZWMsIG5zdC0+c3Rfc2VuZF90aW1lLnR2X3VzZWMsCisJCQkgICBuc3QtPnN0X3N0YXR1c190aW1lLnR2X3NlYywKKwkJCSAgIG5zdC0+c3Rfc3RhdHVzX3RpbWUudHZfdXNlYyk7CisJfQorCisJc3Bpbl91bmxvY2soJm8ybmV0X2RlYnVnX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5zdF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuc3Rfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBuc3Rfc2VxX3N0YXJ0LAorCS5uZXh0ID0gbnN0X3NlcV9uZXh0LAorCS5zdG9wID0gbnN0X3NlcV9zdG9wLAorCS5zaG93ID0gbnN0X3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBuc3RfZm9wX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKmR1bW15X25zdDsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwlpbnQgcmV0OworCisJZHVtbXlfbnN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHVtbXlfbnN0ID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWR1bW15X25zdC0+c3RfdGFzayA9IE5VTEw7CisKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmbnN0X3NlcV9vcHMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcS0+cHJpdmF0ZSA9IGR1bW15X25zdDsKKwlvMm5ldF9kZWJ1Z19hZGRfbnN0KGR1bW15X25zdCk7CisKKwlkdW1teV9uc3QgPSBOVUxMOworCitvdXQ6CisJa2ZyZWUoZHVtbXlfbnN0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5zdF9mb3BfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqZHVtbXlfbnN0ID0gc2VxLT5wcml2YXRlOworCisJbzJuZXRfZGVidWdfZGVsX25zdChkdW1teV9uc3QpOworCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnN0X3NlcV9mb3BzID0geworCS5vcGVuID0gbnN0X2ZvcF9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IG5zdF9mb3BfcmVsZWFzZSwKK307CisKK3ZvaWQgbzJuZXRfZGVidWdfYWRkX3NjKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCit7CisJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKwlsaXN0X2FkZCgmc2MtPnNjX25ldF9kZWJ1Z19pdGVtLCAmc29ja19jb250YWluZXJzKTsKKwlzcGluX3VubG9jaygmbzJuZXRfZGVidWdfbG9jayk7Cit9CisKK3ZvaWQgbzJuZXRfZGVidWdfZGVsX3NjKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCit7CisJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZzYy0+c2NfbmV0X2RlYnVnX2l0ZW0pOworCXNwaW5fdW5sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lcgorCQkJKm5leHRfc2Moc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzY19zdGFydCkKK3sKKwlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjLCAqcmV0ID0gTlVMTDsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmbzJuZXRfZGVidWdfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjLCAmc2Nfc3RhcnQtPnNjX25ldF9kZWJ1Z19pdGVtLAorCQkJICAgIHNjX25ldF9kZWJ1Z19pdGVtKSB7CisJCS8qIGRpc2NvdmVyIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG1pc2Nhc3QgYXMgYSBzYyAqLworCQlpZiAoJnNjLT5zY19uZXRfZGVidWdfaXRlbSA9PSAmc29ja19jb250YWluZXJzKQorCQkJYnJlYWs7CisKKwkJLyogdXNlIHNjX3BhZ2UgdG8gZGV0ZWN0IHJlYWwgc2NzIGluIHRoZSBsaXN0ICovCisJCWlmIChzYy0+c2NfcGFnZSAhPSBOVUxMKSB7CisJCQlyZXQgPSBzYzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgKnNjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYywgKmR1bW15X3NjID0gc2VxLT5wcml2YXRlOworCisJc3Bpbl9sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKwlzYyA9IG5leHRfc2MoZHVtbXlfc2MpOworCXNwaW5fdW5sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKworCXJldHVybiBzYzsKK30KKworc3RhdGljIHZvaWQgKnNjX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjLCAqZHVtbXlfc2MgPSBzZXEtPnByaXZhdGU7CisKKwlzcGluX2xvY2soJm8ybmV0X2RlYnVnX2xvY2spOworCXNjID0gbmV4dF9zYyhkdW1teV9zYyk7CisJbGlzdF9kZWxfaW5pdCgmZHVtbXlfc2MtPnNjX25ldF9kZWJ1Z19pdGVtKTsKKwlpZiAoc2MpCisJCWxpc3RfYWRkKCZkdW1teV9zYy0+c2NfbmV0X2RlYnVnX2l0ZW0sICZzYy0+c2NfbmV0X2RlYnVnX2l0ZW0pOworCXNwaW5fdW5sb2NrKCZvMm5ldF9kZWJ1Z19sb2NrKTsKKworCXJldHVybiBzYzsgLyogdW51c2VkLCBqdXN0IG5lZWRzIHRvIGJlIG51bGwgd2hlbiBkb25lICovCit9CisKKyNkZWZpbmUgVFZfU0VDX1VTRUMoVFYpIFRWLnR2X3NlYywgVFYudHZfdXNlYworCitzdGF0aWMgaW50IHNjX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MsICpkdW1teV9zYyA9IHNlcS0+cHJpdmF0ZTsKKworCXNwaW5fbG9jaygmbzJuZXRfZGVidWdfbG9jayk7CisJc2MgPSBuZXh0X3NjKGR1bW15X3NjKTsKKworCWlmIChzYyAhPSBOVUxMKSB7CisJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBOVUxMOworCisJCV9fYmUzMiBzYWRkciA9IDAsIGRhZGRyID0gMDsKKwkJX19iZTE2IHNwb3J0ID0gMCwgZHBvcnQgPSAwOworCisJCWlmIChzYy0+c2Nfc29jaykgeworCQkJaW5ldCA9IGluZXRfc2soc2MtPnNjX3NvY2stPnNrKTsKKwkJCS8qIHRoZSBzdGFjaydzIHN0cnVjdHMgYXJlbid0IHNwYXJzZSBlbmRpYW4gY2xlYW4gKi8KKwkJCXNhZGRyID0gKF9fZm9yY2UgX19iZTMyKWluZXQtPnNhZGRyOworCQkJZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpaW5ldC0+ZGFkZHI7CisJCQlzcG9ydCA9IChfX2ZvcmNlIF9fYmUxNilpbmV0LT5zcG9ydDsKKwkJCWRwb3J0ID0gKF9fZm9yY2UgX19iZTE2KWluZXQtPmRwb3J0OworCQl9CisKKwkJLyogWFhYIHNpZ2gsIGluZXQtPiBkb2Vzbid0IGhhdmUgc3BhcnNlIGFubm90YXRpb24gc28gYW55CisJCSAqIHVzZSBvZiBpdCBoZXJlIGdlbmVyYXRlcyBhIHdhcm5pbmcgd2l0aCAtV2JpdHdpc2UgKi8KKwkJc2VxX3ByaW50ZihzZXEsICIlcDpcbiIKKwkJCSAgICIgIGtyZWZzOiAgICAgICAgICAgJWRcbiIKKwkJCSAgICIgIHNvY2s6ICAgICAgICAgICAgJXUuJXUuJXUuJXU6JXUgLT4gIgorCQkJCQkgICAgICAiJXUuJXUuJXUuJXU6JXVcbiIKKwkJCSAgICIgIHJlbW90ZSBub2RlOiAgICAgJXNcbiIKKwkJCSAgICIgIHBhZ2Ugb2ZmOiAgICAgICAgJXp1XG4iCisJCQkgICAiICBoYW5kc2hha2Ugb2s6ICAgICV1XG4iCisJCQkgICAiICB0aW1lcjogICAgICAgICAgICVsdS4lbHVcbiIKKwkJCSAgICIgIGRhdGEgcmVhZHk6ICAgICAgJWx1LiVsdVxuIgorCQkJICAgIiAgYWR2YW5jZSBzdGFydDogICAlbHUuJWx1XG4iCisJCQkgICAiICBhZHZhbmNlIHN0b3A6ICAgICVsdS4lbHVcbiIKKwkJCSAgICIgIGZ1bmMgc3RhcnQ6ICAgICAgJWx1LiVsdVxuIgorCQkJICAgIiAgZnVuYyBzdG9wOiAgICAgICAlbHUuJWx1XG4iCisJCQkgICAiICBmdW5jIGtleTogICAgICAgICV1XG4iCisJCQkgICAiICBmdW5jIHR5cGU6ICAgICAgICV1XG4iLAorCQkJICAgc2MsCisJCQkgICBhdG9taWNfcmVhZCgmc2MtPnNjX2tyZWYucmVmY291bnQpLAorCQkJICAgTklQUVVBRChzYWRkciksIGluZXQgPyBudG9ocyhzcG9ydCkgOiAwLAorCQkJICAgTklQUVVBRChkYWRkciksIGluZXQgPyBudG9ocyhkcG9ydCkgOiAwLAorCQkJICAgc2MtPnNjX25vZGUtPm5kX25hbWUsCisJCQkgICBzYy0+c2NfcGFnZV9vZmYsCisJCQkgICBzYy0+c2NfaGFuZHNoYWtlX29rLAorCQkJICAgVFZfU0VDX1VTRUMoc2MtPnNjX3R2X3RpbWVyKSwKKwkJCSAgIFRWX1NFQ19VU0VDKHNjLT5zY190dl9kYXRhX3JlYWR5KSwKKwkJCSAgIFRWX1NFQ19VU0VDKHNjLT5zY190dl9hZHZhbmNlX3N0YXJ0KSwKKwkJCSAgIFRWX1NFQ19VU0VDKHNjLT5zY190dl9hZHZhbmNlX3N0b3ApLAorCQkJICAgVFZfU0VDX1VTRUMoc2MtPnNjX3R2X2Z1bmNfc3RhcnQpLAorCQkJICAgVFZfU0VDX1VTRUMoc2MtPnNjX3R2X2Z1bmNfc3RvcCksCisJCQkgICBzYy0+c2NfbXNnX2tleSwKKwkJCSAgIHNjLT5zY19tc2dfdHlwZSk7CisJfQorCisKKwlzcGluX3VubG9jaygmbzJuZXRfZGVidWdfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2Nfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2Nfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBzY19zZXFfc3RhcnQsCisJLm5leHQgPSBzY19zZXFfbmV4dCwKKwkuc3RvcCA9IHNjX3NlcV9zdG9wLAorCS5zaG93ID0gc2Nfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IHNjX2ZvcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqZHVtbXlfc2M7CisJc3RydWN0IHNlcV9maWxlICpzZXE7CisJaW50IHJldDsKKworCWR1bW15X3NjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGR1bW15X3NjID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWR1bW15X3NjLT5zY19wYWdlID0gTlVMTDsKKworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZzY19zZXFfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzZXEtPnByaXZhdGUgPSBkdW1teV9zYzsKKwlvMm5ldF9kZWJ1Z19hZGRfc2MoZHVtbXlfc2MpOworCisJZHVtbXlfc2MgPSBOVUxMOworCitvdXQ6CisJa2ZyZWUoZHVtbXlfc2MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2NfZm9wX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpkdW1teV9zYyA9IHNlcS0+cHJpdmF0ZTsKKworCW8ybmV0X2RlYnVnX2RlbF9zYyhkdW1teV9zYyk7CisJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY19zZXFfZm9wcyA9IHsKKwkub3BlbiA9IHNjX2ZvcF9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNjX2ZvcF9yZWxlYXNlLAorfTsKKworaW50IG8ybmV0X2RlYnVnZnNfaW5pdCh2b2lkKQoreworCW8ybmV0X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihPMk5FVF9ERUJVR19ESVIsIE5VTEwpOworCWlmICghbzJuZXRfZGVudHJ5KSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwluc3RfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShOU1RfREVCVUdfTkFNRSwgU19JRlJFR3xTX0lSVVNSLAorCQkJCQkgbzJuZXRfZGVudHJ5LCBOVUxMLAorCQkJCQkgJm5zdF9zZXFfZm9wcyk7CisJaWYgKCFuc3RfZGVudHJ5KSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzY19kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFNDX0RFQlVHX05BTUUsIFNfSUZSRUd8U19JUlVTUiwKKwkJCQkJbzJuZXRfZGVudHJ5LCBOVUxMLAorCQkJCQkmc2Nfc2VxX2ZvcHMpOworCWlmICghc2NfZGVudHJ5KSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlyZXR1cm4gMDsKK2JhaWw6CisJaWYgKHNjX2RlbnRyeSkKKwkJZGVidWdmc19yZW1vdmUoc2NfZGVudHJ5KTsKKwlpZiAobnN0X2RlbnRyeSkKKwkJZGVidWdmc19yZW1vdmUobnN0X2RlbnRyeSk7CisJaWYgKG8ybmV0X2RlbnRyeSkKKwkJZGVidWdmc19yZW1vdmUobzJuZXRfZGVudHJ5KTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBvMm5ldF9kZWJ1Z2ZzX2V4aXQodm9pZCkKK3sKKwlpZiAoc2NfZGVudHJ5KQorCQlkZWJ1Z2ZzX3JlbW92ZShzY19kZW50cnkpOworCWlmIChuc3RfZGVudHJ5KQorCQlkZWJ1Z2ZzX3JlbW92ZShuc3RfZGVudHJ5KTsKKwlpZiAobzJuZXRfZGVudHJ5KQorCQlkZWJ1Z2ZzX3JlbW92ZShvMm5ldF9kZW50cnkpOworfQorCisjZW5kaWYJLyogQ09ORklHX0RFQlVHX0ZTICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKaW5kZXggNzA5ZmJhMi4uY2Y5NDAxZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYwpAQCAtOTU5LDcgKzk1OSwxMCBAQAogCWNsdXN0ZXJfcHJpbnRfdmVyc2lvbigpOwogCiAJbzJoYl9pbml0KCk7Ci0JbzJuZXRfaW5pdCgpOworCisJcmV0ID0gbzJuZXRfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJb2NmczJfdGFibGVfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG9jZnMyX3Jvb3RfdGFibGUpOwogCWlmICghb2NmczJfdGFibGVfaGVhZGVyKSB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3N5cy5jIGIvZnMvb2NmczIvY2x1c3Rlci9zeXMuYwppbmRleCAwYzA5NWNlLi45ODQyOWZkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3N5cy5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvc3lzLmMKQEAgLTU3LDYgKzU3LDcgQEAKIHZvaWQgbzJjYl9zeXNfc2h1dGRvd24odm9pZCkKIHsKIAltbG9nX3N5c19zaHV0ZG93bigpOworCXN5c2ZzX3JlbW92ZV9saW5rKE5VTEwsICJvMmNiIik7CiAJa3NldF91bnJlZ2lzdGVyKG8yY2Jfa3NldCk7CiB9CiAKQEAgLTY4LDYgKzY5LDE0IEBACiAJaWYgKCFvMmNiX2tzZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCisJLyoKKwkgKiBDcmVhdGUgdGhpcyBzeW1saW5rIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZAorCSAqIHZlcnNpb25zIG9mIG9jZnMyLXRvb2xzIHdoaWNoIGxvb2sgZm9yIHRoaW5ncyBpbiAvc3lzL28yY2IuCisJICovCisJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoTlVMTCwgJm8yY2Jfa3NldC0+a29iaiwgIm8yY2IiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZvMmNiX2tzZXQtPmtvYmosICZvMmNiX2F0dHJfZ3JvdXApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwppbmRleCBlZTUwYzk2Li4xZTQ0YWQxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKQEAgLTE0MiwyMyArMTQyLDY1IEBACiBzdGF0aWMgdm9pZCBvMm5ldF9zY19wb3N0cG9uZV9pZGxlKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpOwogc3RhdGljIHZvaWQgbzJuZXRfc2NfcmVzZXRfaWRsZV90aW1lcihzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKTsKIAotLyoKLSAqIEZJWE1FOiBUaGVzZSBzaG91bGQgdXNlIHRvX28ybm1fY2x1c3Rlcl9mcm9tX25vZGUoKSwgYnV0IHdlIGVuZCB1cAotICogbG9zaW5nIG91ciBwYXJlbnQgbGluayB0byB0aGUgY2x1c3RlciBkdXJpbmcgc2h1dGRvd24uIFRoaXMgY2FuIGJlCi0gKiBzb2x2ZWQgYnkgYWRkaW5nIGEgcHJlLXJlbW92YWwgY2FsbGJhY2sgdG8gY29uZmlnZnMsIG9yIHBhc3NpbmcKLSAqIGFyb3VuZCB0aGUgY2x1c3RlciB3aXRoIHRoZSBub2RlLiAtamVmZm0KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbzJuZXRfcmVjb25uZWN0X2RlbGF5KHN0cnVjdCBvMm5tX25vZGUgKm5vZGUpCitzdGF0aWMgdm9pZCBvMm5ldF9pbml0X25zdChzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0LCB1MzIgbXNndHlwZSwKKwkJCSAgIHUzMiBtc2drZXksIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTggbm9kZSkKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlJTklUX0xJU1RfSEVBRCgmbnN0LT5zdF9uZXRfZGVidWdfaXRlbSk7CisJbnN0LT5zdF90YXNrID0gdGFzazsKKwluc3QtPnN0X21zZ190eXBlID0gbXNndHlwZTsKKwluc3QtPnN0X21zZ19rZXkgPSBtc2drZXk7CisJbnN0LT5zdF9ub2RlID0gbm9kZTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBvMm5ldF9zZXRfbnN0X3NvY2tfdGltZShzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0KQoreworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWRvX2dldHRpbWVvZmRheSgmbnN0LT5zdF9zb2NrX3RpbWUpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIG8ybmV0X3NldF9uc3Rfc2VuZF90aW1lKHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJZG9fZ2V0dGltZW9mZGF5KCZuc3QtPnN0X3NlbmRfdGltZSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbzJuZXRfc2V0X25zdF9zdGF0dXNfdGltZShzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0KQoreworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWRvX2dldHRpbWVvZmRheSgmbnN0LT5zdF9zdGF0dXNfdGltZSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbzJuZXRfc2V0X25zdF9zb2NrX2NvbnRhaW5lcihzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyAqbnN0LAorCQkJCQkgc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwluc3QtPnN0X3NjID0gc2M7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbzJuZXRfc2V0X25zdF9tc2dfaWQoc3RydWN0IG8ybmV0X3NlbmRfdHJhY2tpbmcgKm5zdCwgdTMyIG1zZ19pZCkKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwluc3QtPnN0X2lkID0gbXNnX2lkOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG8ybmV0X3JlY29ubmVjdF9kZWxheSh2b2lkKQogewogCXJldHVybiBvMm5tX3NpbmdsZV9jbHVzdGVyLT5jbF9yZWNvbm5lY3RfZGVsYXlfbXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG8ybmV0X2tlZXBhbGl2ZV9kZWxheShzdHJ1Y3QgbzJubV9ub2RlICpub2RlKQorc3RhdGljIGlubGluZSBpbnQgbzJuZXRfa2VlcGFsaXZlX2RlbGF5KHZvaWQpCiB7CiAJcmV0dXJuIG8ybm1fc2luZ2xlX2NsdXN0ZXItPmNsX2tlZXBhbGl2ZV9kZWxheV9tczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbzJuZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBvMm5tX25vZGUgKm5vZGUpCitzdGF0aWMgaW5saW5lIGludCBvMm5ldF9pZGxlX3RpbWVvdXQodm9pZCkKIHsKIAlyZXR1cm4gbzJubV9zaW5nbGVfY2x1c3Rlci0+Y2xfaWRsZV90aW1lb3V0X21zOwogfQpAQCAtMjk2LDYgKzMzOCw3IEBACiAJbzJubV9ub2RlX3B1dChzYy0+c2Nfbm9kZSk7CiAJc2MtPnNjX25vZGUgPSBOVUxMOwogCisJbzJuZXRfZGVidWdfZGVsX3NjKHNjKTsKIAlrZnJlZShzYyk7CiB9CiAKQEAgLTMzNiw2ICszNzksNyBAQAogCiAJcmV0ID0gc2M7CiAJc2MtPnNjX3BhZ2UgPSBwYWdlOworCW8ybmV0X2RlYnVnX2FkZF9zYyhzYyk7CiAJc2MgPSBOVUxMOwogCXBhZ2UgPSBOVUxMOwogCkBAIC0zOTksOCArNDQzLDYgQEAKIAltbG9nX2J1Z19vbl9tc2coZXJyICYmIHZhbGlkLCAiZXJyICVkIHZhbGlkICV1XG4iLCBlcnIsIHZhbGlkKTsKIAltbG9nX2J1Z19vbl9tc2codmFsaWQgJiYgIXNjLCAidmFsaWQgJXUgc2MgJXBcbiIsIHZhbGlkLCBzYyk7CiAKLQkvKiB3ZSB3b24ndCByZWNvbm5lY3QgYWZ0ZXIgb3VyIHZhbGlkIGNvbm4gZ29lcyBhd2F5IGZvcgotCSAqIHRoaXMgaGIgaXRlcmF0aW9uLi4gaGVyZSBzbyBpdCBzaG93cyB1cCBpbiB0aGUgbG9ncyAqLwogCWlmICh3YXNfdmFsaWQgJiYgIXZhbGlkICYmIGVyciA9PSAwKQogCQllcnIgPSAtRU5PVENPTk47CiAKQEAgLTQzMCwxMSArNDcyLDYgQEAKIAogCWlmICghd2FzX3ZhbGlkICYmIHZhbGlkKSB7CiAJCW8ycXVvX2Nvbm5fdXAobzJuZXRfbnVtX2Zyb21fbm4obm4pKTsKLQkJLyogdGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suICB3ZSBvbmx5IHRyeSByZWNvbm5lY3RpbmcKLQkJICogd2hlbiBoZWFydGJlYXRpbmcgc3RhcnRzIHVudGlsIHdlIGdldCBhIGNvbm5lY3Rpb24uCi0JCSAqIGlmIHRoYXQgY29ubmVjdGlvbiB0aGVuIGRpZXMgd2UgZG9uJ3QgdHJ5IHJlY29ubmVjdGluZy4KLQkJICogdGhlIG9ubHkgd2F5IHRvIHN0YXJ0IGNvbm5lY3RpbmcgYWdhaW4gaXMgdG8gZG93bgotCQkgKiBoZWFydGJlYXQgYW5kIGJyaW5nIGl0IGJhY2sgdXAuICovCiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJm5uLT5ubl9jb25uZWN0X2V4cGlyZWQpOwogCQlwcmludGsoS0VSTl9JTkZPICJvMm5ldDogJXMgIiBTQ19OT0RFRl9GTVQgIlxuIiwKIAkJICAgICAgIG8ybm1fdGhpc19ub2RlKCkgPiBzYy0+c2Nfbm9kZS0+bmRfbnVtID8KQEAgLTQ1MSwxMiArNDg4LDI0IEBACiAJCS8qIGRlbGF5IGlmIHdlJ3JlIHdpdGhpbmcgYSBSRUNPTk5FQ1RfREVMQVkgb2YgdGhlCiAJCSAqIGxhc3QgYXR0ZW1wdCAqLwogCQlkZWxheSA9IChubi0+bm5fbGFzdF9jb25uZWN0X2F0dGVtcHQgKwotCQkJIG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfcmVjb25uZWN0X2RlbGF5KHNjLT5zY19ub2RlKSkpCisJCQkgbXNlY3NfdG9famlmZmllcyhvMm5ldF9yZWNvbm5lY3RfZGVsYXkoKSkpCiAJCQktIGppZmZpZXM7Ci0JCWlmIChkZWxheSA+IG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfcmVjb25uZWN0X2RlbGF5KHNjLT5zY19ub2RlKSkpCisJCWlmIChkZWxheSA+IG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfcmVjb25uZWN0X2RlbGF5KCkpKQogCQkJZGVsYXkgPSAwOwogCQltbG9nKE1MX0NPTk4sICJxdWV1ZWluZyBjb25uIGF0dGVtcHQgaW4gJWx1IGppZmZpZXNcbiIsIGRlbGF5KTsKIAkJcXVldWVfZGVsYXllZF93b3JrKG8ybmV0X3dxLCAmbm4tPm5uX2Nvbm5lY3Rfd29yaywgZGVsYXkpOworCisJCS8qCisJCSAqIERlbGF5IHRoZSBleHBpcmVkIHdvcmsgYWZ0ZXIgaWRsZSB0aW1lb3V0LgorCQkgKgorCQkgKiBXZSBtaWdodCBoYXZlIGxvdHMgb2YgZmFpbGVkIGNvbm5lY3Rpb24gYXR0ZW1wdHMgdGhhdCBydW4KKwkJICogdGhyb3VnaCBoZXJlIGJ1dCB3ZSBvbmx5IGNhbmNlbCB0aGUgY29ubmVjdF9leHBpcmVkIHdvcmsgd2hlbgorCQkgKiBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBzdWNjZWVkcy4gIFNvIG9ubHkgdGhlIGZpcnN0IGVucXVldWUgb2YKKwkJICogdGhlIGNvbm5lY3RfZXhwaXJlZCB3b3JrIHdpbGwgZG8gYW55dGhpbmcuICBUaGUgcmVzdCB3aWxsIHNlZQorCQkgKiB0aGF0IGl0J3MgYWxyZWFkeSBxdWV1ZWQgYW5kIGRvIG5vdGhpbmcuCisJCSAqLworCQlkZWxheSArPSBtc2Vjc190b19qaWZmaWVzKG8ybmV0X2lkbGVfdGltZW91dCgpKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKG8ybmV0X3dxLCAmbm4tPm5uX2Nvbm5lY3RfZXhwaXJlZCwgZGVsYXkpOwogCX0KIAogCS8qIGtlZXAgdHJhY2sgb2YgdGhlIG5uJ3Mgc2MgcmVmIGZvciB0aGUgY2FsbGVyICovCkBAIC05MTQsNiArOTYzLDkgQEAKIAlzdHJ1Y3QgbzJuZXRfc3RhdHVzX3dhaXQgbnN3ID0gewogCQkubnNfbm9kZV9pdGVtID0gTElTVF9IRUFEX0lOSVQobnN3Lm5zX25vZGVfaXRlbSksCiAJfTsKKwlzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZyBuc3Q7CisKKwlvMm5ldF9pbml0X25zdCgmbnN0LCBtc2dfdHlwZSwga2V5LCBjdXJyZW50LCB0YXJnZXRfbm9kZSk7CiAKIAlpZiAobzJuZXRfd3EgPT0gTlVMTCkgewogCQltbG9nKDAsICJhdHRlbXB0IHRvIHR4IHdpdGhvdXQgbzJuZXRkIHJ1bm5pbmdcbiIpOwpAQCAtOTM5LDYgKzk5MSwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlvMm5ldF9kZWJ1Z19hZGRfbnN0KCZuc3QpOworCisJbzJuZXRfc2V0X25zdF9zb2NrX3RpbWUoJm5zdCk7CisKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobm4tPm5uX3NjX3dxLAogCQkJCSAgICAgICBvMm5ldF90eF9jYW5fcHJvY2VlZChubiwgJnNjLCAmZXJyb3IpKTsKIAlpZiAoIXJldCAmJiBlcnJvcikKQEAgLTk0Niw2ICsxMDAyLDggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAorCW8ybmV0X3NldF9uc3Rfc29ja19jb250YWluZXIoJm5zdCwgc2MpOworCiAJdmVjbGVuID0gY2FsbGVyX3ZlY2xlbiArIDE7CiAJdmVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2ZWMpICogdmVjbGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAodmVjID09IE5VTEwpIHsKQEAgLTk3Miw2ICsxMDMwLDkgQEAKIAkJZ290byBvdXQ7CiAKIAltc2ctPm1zZ19udW0gPSBjcHVfdG9fYmUzMihuc3cubnNfaWQpOworCW8ybmV0X3NldF9uc3RfbXNnX2lkKCZuc3QsIG5zdy5uc19pZCk7CisKKwlvMm5ldF9zZXRfbnN0X3NlbmRfdGltZSgmbnN0KTsKIAogCS8qIGZpbmFsbHksIGNvbnZlcnQgdGhlIG1lc3NhZ2UgaGVhZGVyIHRvIG5ldHdvcmsgYnl0ZS1vcmRlcgogCSAqIGFuZCBzZW5kICovCkBAIC05ODYsNiArMTA0Nyw3IEBACiAJfQogCiAJLyogd2FpdCBvbiBvdGhlciBub2RlJ3MgaGFuZGxlciAqLworCW8ybmV0X3NldF9uc3Rfc3RhdHVzX3RpbWUoJm5zdCk7CiAJd2FpdF9ldmVudChuc3cubnNfd3EsIG8ybmV0X25zd19jb21wbGV0ZWQobm4sICZuc3cpKTsKIAogCS8qIE5vdGUgdGhhdCB3ZSBhdm9pZCBvdmVyd3JpdGluZyB0aGUgY2FsbGVycyBzdGF0dXMgcmV0dXJuCkBAIC05OTgsNiArMTA2MCw3IEBACiAJbWxvZygwLCAid29rZW4sIHJldHVybmluZyBzeXN0ZW0gc3RhdHVzICVkLCB1c2VyIHN0YXR1cyAlZFxuIiwKIAkgICAgIHJldCwgbnN3Lm5zX3N0YXR1cyk7CiBvdXQ6CisJbzJuZXRfZGVidWdfZGVsX25zdCgmbnN0KTsgLyogbXVzdCBiZSBiZWZvcmUgZHJvcHBpbmcgc2MgYW5kIG5vZGUgKi8KIAlpZiAoc2MpCiAJCXNjX3B1dChzYyk7CiAJaWYgKHZlYykKQEAgLTExNTQsMjMgKzEyMTcsMjMgQEAKIAkgKiBidXQgaXNuJ3QuIFRoaXMgY2FuIHVsdGltYXRlbHkgY2F1c2UgY29ycnVwdGlvbi4KIAkgKi8KIAlpZiAoYmUzMl90b19jcHUoaGFuZC0+bzJuZXRfaWRsZV90aW1lb3V0X21zKSAhPQotCQkJCW8ybmV0X2lkbGVfdGltZW91dChzYy0+c2Nfbm9kZSkpIHsKKwkJCQlvMm5ldF9pZGxlX3RpbWVvdXQoKSkgewogCQltbG9nKE1MX05PVElDRSwgU0NfTk9ERUZfRk1UICIgdXNlcyBhIG5ldHdvcmsgaWRsZSB0aW1lb3V0IG9mICIKIAkJICAgICAiJXUgbXMsIGJ1dCB3ZSB1c2UgJXUgbXMgbG9jYWxseS4gIGRpc2Nvbm5lY3RpbmdcbiIsCiAJCSAgICAgU0NfTk9ERUZfQVJHUyhzYyksCiAJCSAgICAgYmUzMl90b19jcHUoaGFuZC0+bzJuZXRfaWRsZV90aW1lb3V0X21zKSwKLQkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQoc2MtPnNjX25vZGUpKTsKKwkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQoKSk7CiAJCW8ybmV0X2Vuc3VyZV9zaHV0ZG93bihubiwgc2MsIC1FTk9UQ09OTik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoYmUzMl90b19jcHUoaGFuZC0+bzJuZXRfa2VlcGFsaXZlX2RlbGF5X21zKSAhPQotCQkJbzJuZXRfa2VlcGFsaXZlX2RlbGF5KHNjLT5zY19ub2RlKSkgeworCQkJbzJuZXRfa2VlcGFsaXZlX2RlbGF5KCkpIHsKIAkJbWxvZyhNTF9OT1RJQ0UsIFNDX05PREVGX0ZNVCAiIHVzZXMgYSBrZWVwYWxpdmUgZGVsYXkgb2YgIgogCQkgICAgICIldSBtcywgYnV0IHdlIHVzZSAldSBtcyBsb2NhbGx5LiAgZGlzY29ubmVjdGluZ1xuIiwKIAkJICAgICBTQ19OT0RFRl9BUkdTKHNjKSwKIAkJICAgICBiZTMyX3RvX2NwdShoYW5kLT5vMm5ldF9rZWVwYWxpdmVfZGVsYXlfbXMpLAotCQkgICAgIG8ybmV0X2tlZXBhbGl2ZV9kZWxheShzYy0+c2Nfbm9kZSkpOworCQkgICAgIG8ybmV0X2tlZXBhbGl2ZV9kZWxheSgpKTsKIAkJbzJuZXRfZW5zdXJlX3NodXRkb3duKG5uLCBzYywgLUVOT1RDT05OKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTExOTMsNiArMTI1Niw3IEBACiAJICogc2h1dCBkb3duIGFscmVhZHkgKi8KIAlpZiAobm4tPm5uX3NjID09IHNjKSB7CiAJCW8ybmV0X3NjX3Jlc2V0X2lkbGVfdGltZXIoc2MpOworCQlhdG9taWNfc2V0KCZubi0+bm5fdGltZW91dCwgMCk7CiAJCW8ybmV0X3NldF9ubl9zdGF0ZShubiwgc2MsIDEsIDApOwogCX0KIAlzcGluX3VubG9jaygmbm4tPm5uX2xvY2spOwpAQCAtMTM0NywxMiArMTQxMSwxMSBAQAogewogCW8ybmV0X2hhbmQtPm8yaGJfaGVhcnRiZWF0X3RpbWVvdXRfbXMgPSBjcHVfdG9fYmUzMigKIAkJTzJIQl9NQVhfV1JJVEVfVElNRU9VVF9NUyk7Ci0JbzJuZXRfaGFuZC0+bzJuZXRfaWRsZV90aW1lb3V0X21zID0gY3B1X3RvX2JlMzIoCi0JCW8ybmV0X2lkbGVfdGltZW91dChOVUxMKSk7CisJbzJuZXRfaGFuZC0+bzJuZXRfaWRsZV90aW1lb3V0X21zID0gY3B1X3RvX2JlMzIobzJuZXRfaWRsZV90aW1lb3V0KCkpOwogCW8ybmV0X2hhbmQtPm8ybmV0X2tlZXBhbGl2ZV9kZWxheV9tcyA9IGNwdV90b19iZTMyKAotCQlvMm5ldF9rZWVwYWxpdmVfZGVsYXkoTlVMTCkpOworCQlvMm5ldF9rZWVwYWxpdmVfZGVsYXkoKSk7CiAJbzJuZXRfaGFuZC0+bzJuZXRfcmVjb25uZWN0X2RlbGF5X21zID0gY3B1X3RvX2JlMzIoCi0JCW8ybmV0X3JlY29ubmVjdF9kZWxheShOVUxMKSk7CisJCW8ybmV0X3JlY29ubmVjdF9kZWxheSgpKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzkxLDE0ICsxNDU0LDE1IEBACiBzdGF0aWMgdm9pZCBvMm5ldF9pZGxlX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjID0gKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqKWRhdGE7CisJc3RydWN0IG8ybmV0X25vZGUgKm5uID0gbzJuZXRfbm5fZnJvbV9udW0oc2MtPnNjX25vZGUtPm5kX251bSk7CiAJc3RydWN0IHRpbWV2YWwgbm93OwogCiAJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAibzJuZXQ6IGNvbm5lY3Rpb24gdG8gIiBTQ19OT0RFRl9GTVQgIiBoYXMgYmVlbiBpZGxlIGZvciAldS4ldSAiCiAJICAgICAic2Vjb25kcywgc2h1dHRpbmcgaXQgZG93bi5cbiIsIFNDX05PREVGX0FSR1Moc2MpLAotCQkgICAgIG8ybmV0X2lkbGVfdGltZW91dChzYy0+c2Nfbm9kZSkgLyAxMDAwLAotCQkgICAgIG8ybmV0X2lkbGVfdGltZW91dChzYy0+c2Nfbm9kZSkgJSAxMDAwKTsKKwkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQoKSAvIDEwMDAsCisJCSAgICAgbzJuZXRfaWRsZV90aW1lb3V0KCkgJSAxMDAwKTsKIAltbG9nKE1MX05PVElDRSwgImhlcmUgYXJlIHNvbWUgdGltZXMgdGhhdCBtaWdodCBoZWxwIGRlYnVnIHRoZSAiCiAJICAgICAic2l0dWF0aW9uOiAodG1yICVsZC4lbGQgbm93ICVsZC4lbGQgZHIgJWxkLiVsZCBhZHYgIgogCSAgICAgIiVsZC4lbGQ6JWxkLiVsZCBmdW5jICglMDh4OiV1KSAlbGQuJWxkOiVsZC4lbGQpXG4iLApAQCAtMTQxMyw2ICsxNDc3LDEyIEBACiAJICAgICBzYy0+c2NfdHZfZnVuY19zdGFydC50dl9zZWMsIChsb25nKSBzYy0+c2NfdHZfZnVuY19zdGFydC50dl91c2VjLAogCSAgICAgc2MtPnNjX3R2X2Z1bmNfc3RvcC50dl9zZWMsIChsb25nKSBzYy0+c2NfdHZfZnVuY19zdG9wLnR2X3VzZWMpOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBubl90aW1lb3V0IHNvIHRoYXQgdGhlIG5leHQgY29ubmVjdGlvbiBhdHRlbXB0CisJICogd2lsbCBjb250aW51ZSBpbiBvMm5ldF9zdGFydF9jb25uZWN0LgorCSAqLworCWF0b21pY19zZXQoJm5uLT5ubl90aW1lb3V0LCAxKTsKKwogCW8ybmV0X3NjX3F1ZXVlX3dvcmsoc2MsICZzYy0+c2Nfc2h1dGRvd25fd29yayk7CiB9CiAKQEAgLTE0MjAsMTAgKzE0OTAsMTAgQEAKIHsKIAlvMm5ldF9zY19jYW5jZWxfZGVsYXllZF93b3JrKHNjLCAmc2MtPnNjX2tlZXBhbGl2ZV93b3JrKTsKIAlvMm5ldF9zY19xdWV1ZV9kZWxheWVkX3dvcmsoc2MsICZzYy0+c2Nfa2VlcGFsaXZlX3dvcmssCi0JCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfa2VlcGFsaXZlX2RlbGF5KHNjLT5zY19ub2RlKSkpOworCQkgICAgICBtc2Vjc190b19qaWZmaWVzKG8ybmV0X2tlZXBhbGl2ZV9kZWxheSgpKSk7CiAJZG9fZ2V0dGltZW9mZGF5KCZzYy0+c2NfdHZfdGltZXIpOwogCW1vZF90aW1lcigmc2MtPnNjX2lkbGVfdGltZW91dCwKLQkgICAgICAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfaWRsZV90aW1lb3V0KHNjLT5zY19ub2RlKSkpOworCSAgICAgICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhvMm5ldF9pZGxlX3RpbWVvdXQoKSkpOwogfQogCiBzdGF0aWMgdm9pZCBvMm5ldF9zY19wb3N0cG9uZV9pZGxlKHN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lciAqc2MpCkBAIC0xNDQ3LDYgKzE1MTcsNyBAQAogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOwogCXN0cnVjdCBzb2NrYWRkcl9pbiBteWFkZHIgPSB7MCwgfSwgcmVtb3RlYWRkciA9IHswLCB9OwogCWludCByZXQgPSAwLCBzdG9wOworCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJLyogaWYgd2UncmUgZ3JlYXRlciB3ZSBpbml0aWF0ZSB0eCwgb3RoZXJ3aXNlIHdlIGFjY2VwdCAqLwogCWlmIChvMm5tX3RoaXNfbm9kZSgpIDw9IG8ybmV0X251bV9mcm9tX25uKG5uKSkKQEAgLTE0NjYsOCArMTUzNywxNyBAQAogCX0KIAogCXNwaW5fbG9jaygmbm4tPm5uX2xvY2spOwotCS8qIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lIHBlbmRpbmcgb3IgaGF2ZSBnaXZlbiB1cCAqLwotCXN0b3AgPSAobm4tPm5uX3NjIHx8IG5uLT5ubl9wZXJzaXN0ZW50X2Vycm9yKTsKKwkvKgorCSAqIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lIHBlbmRpbmcgb3IgaGF2ZSBnaXZlbiB1cC4KKwkgKiBGb3Igbm5fdGltZW91dCwgaXQgaXMgc2V0IHdoZW4gd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24KKwkgKiBiZWNhdXNlIG9mIHRoZSBpZGxlIHRpbWUgb3V0LiBTbyBpdCBtZWFucyB0aGF0IHdlIGhhdmUKKwkgKiBhdCBsZWFzdCBjb25uZWN0ZWQgdG8gdGhhdCBub2RlIHN1Y2Nlc3NmdWxseSBvbmNlLAorCSAqIG5vdyB0cnkgdG8gY29ubmVjdCB0byBpdCBhZ2Fpbi4KKwkgKi8KKwl0aW1lb3V0ID0gYXRvbWljX3JlYWQoJm5uLT5ubl90aW1lb3V0KTsKKwlzdG9wID0gKG5uLT5ubl9zYyB8fAorCQkobm4tPm5uX3BlcnNpc3RlbnRfZXJyb3IgJiYKKwkJKG5uLT5ubl9wZXJzaXN0ZW50X2Vycm9yICE9IC1FTk9UQ09OTiB8fCB0aW1lb3V0ID09IDApKSk7CiAJc3Bpbl91bmxvY2soJm5uLT5ubl9sb2NrKTsKIAlpZiAoc3RvcCkKIAkJZ290byBvdXQ7CkBAIC0xNTUyLDEyICsxNjMyLDExIEBACiAKIAlzcGluX2xvY2soJm5uLT5ubl9sb2NrKTsKIAlpZiAoIW5uLT5ubl9zY192YWxpZCkgewotCQlzdHJ1Y3QgbzJubV9ub2RlICpub2RlID0gbm4tPm5uX3NjLT5zY19ub2RlOwogCQltbG9nKE1MX0VSUk9SLCAibm8gY29ubmVjdGlvbiBlc3RhYmxpc2hlZCB3aXRoIG5vZGUgJXUgYWZ0ZXIgIgogCQkgICAgICIldS4ldSBzZWNvbmRzLCBnaXZpbmcgdXAgYW5kIHJldHVybmluZyBlcnJvcnMuXG4iLAogCQkgICAgIG8ybmV0X251bV9mcm9tX25uKG5uKSwKLQkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQobm9kZSkgLyAxMDAwLAotCQkgICAgIG8ybmV0X2lkbGVfdGltZW91dChub2RlKSAlIDEwMDApOworCQkgICAgIG8ybmV0X2lkbGVfdGltZW91dCgpIC8gMTAwMCwKKwkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQoKSAlIDEwMDApOwogCiAJCW8ybmV0X3NldF9ubl9zdGF0ZShubiwgTlVMTCwgMCwgLUVOT1RDT05OKTsKIAl9CkBAIC0xNTgwLDYgKzE2NTksNyBAQAogCiAJLyogZG9uJ3QgcmVjb25uZWN0IHVudGlsIGl0J3MgaGVhcnRiZWF0aW5nIGFnYWluICovCiAJc3Bpbl9sb2NrKCZubi0+bm5fbG9jayk7CisJYXRvbWljX3NldCgmbm4tPm5uX3RpbWVvdXQsIDApOwogCW8ybmV0X3NldF9ubl9zdGF0ZShubiwgTlVMTCwgMCwgLUVOT1RDT05OKTsKIAlzcGluX3VubG9jaygmbm4tPm5uX2xvY2spOwogCkBAIC0xNjExLDIwICsxNjkxLDE1IEBACiAKIAkvKiBlbnN1cmUgYW4gaW1tZWRpYXRlIGNvbm5lY3QgYXR0ZW1wdCAqLwogCW5uLT5ubl9sYXN0X2Nvbm5lY3RfYXR0ZW1wdCA9IGppZmZpZXMgLQotCQkobXNlY3NfdG9famlmZmllcyhvMm5ldF9yZWNvbm5lY3RfZGVsYXkobm9kZSkpICsgMSk7CisJCShtc2Vjc190b19qaWZmaWVzKG8ybmV0X3JlY29ubmVjdF9kZWxheSgpKSArIDEpOwogCiAJaWYgKG5vZGVfbnVtICE9IG8ybm1fdGhpc19ub2RlKCkpIHsKLQkJLyogaGVhcnRiZWF0IGRvZXNuJ3Qgd29yayB1bmxlc3MgYSBsb2NhbCBub2RlIG51bWJlciBpcwotCQkgKiBjb25maWd1cmVkIGFuZCBkb2luZyBzbyBicmluZ3MgdXAgdGhlIG8ybmV0X3dxLCBzbyB3ZSBjYW4KLQkJICogdXNlIGl0Li4gKi8KLQkJcXVldWVfZGVsYXllZF93b3JrKG8ybmV0X3dxLCAmbm4tPm5uX2Nvbm5lY3RfZXhwaXJlZCwKLQkJICAgICAgICAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfaWRsZV90aW1lb3V0KG5vZGUpKSk7Ci0KIAkJLyogYmVsaWV2ZSBpdCBvciBub3QsIGFjY2VwdCBhbmQgbm9kZSBoZWFyYmVhdGluZyB0ZXN0aW5nCiAJCSAqIGNhbiBzdWNjZWVkIGZvciB0aGlzIG5vZGUgYmVmb3JlIHdlIGdvdCBoZXJlLi4gc28KIAkJICogb25seSB1c2Ugc2V0X25uX3N0YXRlIHRvIGNsZWFyIHRoZSBwZXJzaXN0ZW50IGVycm9yCiAJCSAqIGlmIHRoYXQgaGFzbid0IGFscmVhZHkgaGFwcGVuZWQgKi8KIAkJc3Bpbl9sb2NrKCZubi0+bm5fbG9jayk7CisJCWF0b21pY19zZXQoJm5uLT5ubl90aW1lb3V0LCAwKTsKIAkJaWYgKG5uLT5ubl9wZXJzaXN0ZW50X2Vycm9yKQogCQkJbzJuZXRfc2V0X25uX3N0YXRlKG5uLCBOVUxMLCAwLCAwKTsKIAkJc3Bpbl91bmxvY2soJm5uLT5ubl9sb2NrKTsKQEAgLTE3NDgsNiArMTgyMyw3IEBACiAJbmV3X3NvY2sgPSBOVUxMOwogCiAJc3Bpbl9sb2NrKCZubi0+bm5fbG9jayk7CisJYXRvbWljX3NldCgmbm4tPm5uX3RpbWVvdXQsIDApOwogCW8ybmV0X3NldF9ubl9zdGF0ZShubiwgc2MsIDAsIDApOwogCXNwaW5fdW5sb2NrKCZubi0+bm5fbG9jayk7CiAKQEAgLTE5MjMsNiArMTk5OSw5IEBACiAKIAlvMnF1b19pbml0KCk7CiAKKwlpZiAobzJuZXRfZGVidWdmc19pbml0KCkpCisJCXJldHVybiAtRU5PTUVNOworCiAJbzJuZXRfaGFuZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMm5ldF9oYW5kc2hha2UpLCBHRlBfS0VSTkVMKTsKIAlvMm5ldF9rZWVwX3JlcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMm5ldF9tc2cpLCBHRlBfS0VSTkVMKTsKIAlvMm5ldF9rZWVwX3Jlc3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbzJuZXRfbXNnKSwgR0ZQX0tFUk5FTCk7CkBAIC0xOTQyLDYgKzIwMjEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG8ybmV0X25vZGVzKTsgaSsrKSB7CiAJCXN0cnVjdCBvMm5ldF9ub2RlICpubiA9IG8ybmV0X25uX2Zyb21fbnVtKGkpOwogCisJCWF0b21pY19zZXQoJm5uLT5ubl90aW1lb3V0LCAwKTsKIAkJc3Bpbl9sb2NrX2luaXQoJm5uLT5ubl9sb2NrKTsKIAkJSU5JVF9ERUxBWUVEX1dPUksoJm5uLT5ubl9jb25uZWN0X3dvcmssIG8ybmV0X3N0YXJ0X2Nvbm5lY3QpOwogCQlJTklUX0RFTEFZRURfV09SSygmbm4tPm5uX2Nvbm5lY3RfZXhwaXJlZCwKQEAgLTE5NjMsNCArMjA0Myw1IEBACiAJa2ZyZWUobzJuZXRfaGFuZCk7CiAJa2ZyZWUobzJuZXRfa2VlcF9yZXEpOwogCWtmcmVlKG8ybmV0X2tlZXBfcmVzcCk7CisJbzJuZXRfZGVidWdmc19leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5oIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuaAppbmRleCBmMzZmNjZhLi5hNzA1ZDVkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmgKQEAgLTExNyw0ICsxMTcsMzYgQEAKIGludCBvMm5ldF9pbml0KHZvaWQpOwogdm9pZCBvMm5ldF9leGl0KHZvaWQpOwogCitzdHJ1Y3QgbzJuZXRfc2VuZF90cmFja2luZzsKK3N0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lcjsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworaW50IG8ybmV0X2RlYnVnZnNfaW5pdCh2b2lkKTsKK3ZvaWQgbzJuZXRfZGVidWdmc19leGl0KHZvaWQpOwordm9pZCBvMm5ldF9kZWJ1Z19hZGRfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QpOwordm9pZCBvMm5ldF9kZWJ1Z19kZWxfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QpOwordm9pZCBvMm5ldF9kZWJ1Z19hZGRfc2Moc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYyk7Cit2b2lkIG8ybmV0X2RlYnVnX2RlbF9zYyhzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKTsKKyNlbHNlCitzdGF0aWMgaW50IG8ybmV0X2RlYnVnZnNfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgbzJuZXRfZGVidWdmc19leGl0KHZvaWQpCit7Cit9CitzdGF0aWMgdm9pZCBvMm5ldF9kZWJ1Z19hZGRfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QpCit7Cit9CitzdGF0aWMgdm9pZCBvMm5ldF9kZWJ1Z19kZWxfbnN0KHN0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nICpuc3QpCit7Cit9CitzdGF0aWMgdm9pZCBvMm5ldF9kZWJ1Z19hZGRfc2Moc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYykKK3sKK30KK3N0YXRpYyB2b2lkIG8ybmV0X2RlYnVnX2RlbF9zYyhzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKQoreworfQorI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLworCiAjZW5kaWYgLyogTzJDTFVTVEVSX1RDUF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oIGIvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaAppbmRleCBkMjViOWFmLi44ZDU4Y2ZlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwX2ludGVybmFsLmgKQEAgLTk1LDYgKzk1LDggQEAKIAl1bnNpZ25lZAkJCW5uX3NjX3ZhbGlkOjE7CiAJLyogaWYgdGhpcyBpcyBzZXQgdHgganVzdCByZXR1cm5zIGl0ICovCiAJaW50CQkJCW5uX3BlcnNpc3RlbnRfZXJyb3I7CisJLyogSXQgaXMgb25seSBzZXQgdG8gMSBhZnRlciB0aGUgaWRsZSB0aW1lIG91dC4gKi8KKwlhdG9taWNfdAkJCW5uX3RpbWVvdXQ7CiAKIAkvKiB0aHJlYWRzIHdhaXRpbmcgZm9yIGFuIHNjIHRvIGFycml2ZSB3YWl0IG9uIHRoZSB3cSBmb3IgZ2VuZXJhdGlvbgogCSAqIHRvIGluY3JlYXNlLiAgaXQgaXMgaW5jcmVhc2VkIHdoZW4gYSBjb25uZWN0aW5nIHNvY2tldCBzdWNjZWVkcwpAQCAtMTY0LDcgKzE2Niw5IEBACiAJLyogb3JpZ2luYWwgaGFuZGxlcnMgZm9yIHRoZSBzb2NrZXRzICovCiAJdm9pZAkJCSgqc2Nfc3RhdGVfY2hhbmdlKShzdHJ1Y3Qgc29jayAqc2spOwogCXZvaWQJCQkoKnNjX2RhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICpzaywgaW50IGJ5dGVzKTsKLQorI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHNjX25ldF9kZWJ1Z19pdGVtOworI2VuZGlmCiAJc3RydWN0IHRpbWV2YWwgCQlzY190dl90aW1lcjsKIAlzdHJ1Y3QgdGltZXZhbCAJCXNjX3R2X2RhdGFfcmVhZHk7CiAJc3RydWN0IHRpbWV2YWwgCQlzY190dl9hZHZhbmNlX3N0YXJ0OwpAQCAtMjA2LDQgKzIxMCwyNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbnNfbm9kZV9pdGVtOwogfTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworLyoganVzdCBmb3Igc3RhdGUgZHVtcHMgKi8KK3N0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlzdF9uZXRfZGVidWdfaXRlbTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSpzdF90YXNrOworCXN0cnVjdCBvMm5ldF9zb2NrX2NvbnRhaW5lcgkqc3Rfc2M7CisJdTMyCQkJCXN0X2lkOworCXUzMgkJCQlzdF9tc2dfdHlwZTsKKwl1MzIJCQkJc3RfbXNnX2tleTsKKwl1OAkJCQlzdF9ub2RlOworCXN0cnVjdCB0aW1ldmFsCQkJc3Rfc29ja190aW1lOworCXN0cnVjdCB0aW1ldmFsCQkJc3Rfc2VuZF90aW1lOworCXN0cnVjdCB0aW1ldmFsCQkJc3Rfc3RhdHVzX3RpbWU7Cit9OworI2Vsc2UKK3N0cnVjdCBvMm5ldF9zZW5kX3RyYWNraW5nIHsKKwl1MzIJZHVtbXk7Cit9OworI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLworCiAjZW5kaWYgLyogTzJDTFVTVEVSX1RDUF9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuYyBiL2ZzL29jZnMyL2Rpci5jCmluZGV4IGUyODA4MzMuLjhhMTg3NTggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5jCisrKyBiL2ZzL29jZnMyL2Rpci5jCkBAIC0zOTAsOSArMzkwLDggQEAKIAkJCQlnb3RvIGJhaWw7CiAJCQl9CiAJCQlpZiAocGRlKQotCQkJCXBkZS0+cmVjX2xlbiA9Ci0JCQkJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHBkZS0+cmVjX2xlbikgKwotCQkJCQkJICAgIGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKSk7CisJCQkJbGUxNl9hZGRfY3B1KCZwZGUtPnJlY19sZW4sCisJCQkJCQlsZTE2X3RvX2NwdShkZS0+cmVjX2xlbikpOwogCQkJZWxzZQogCQkJCWRlLT5pbm9kZSA9IDA7CiAJCQlkaXItPmlfdmVyc2lvbisrOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL01ha2VmaWxlIGIvZnMvb2NmczIvZGxtL01ha2VmaWxlCmluZGV4IGNlM2Y3YzIuLjE5MDM2MTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9kbG0vTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiBFWFRSQV9DRkxBR1MgKz0gLUlmcy9vY2ZzMgogCi1vYmotJChDT05GSUdfT0NGUzJfRlMpICs9IG9jZnMyX2RsbS5vIG9jZnMyX2RsbWZzLm8KK29iai0kKENPTkZJR19PQ0ZTMl9GU19PMkNCKSArPSBvY2ZzMl9kbG0ubyBvY2ZzMl9kbG1mcy5vCiAKIG9jZnMyX2RsbS1vYmpzIDo9IGRsbWRvbWFpbi5vIGRsbWRlYnVnLm8gZGxtdGhyZWFkLm8gZGxtcmVjb3ZlcnkubyBcCiAJZGxtbWFzdGVyLm8gZGxtYXN0Lm8gZGxtY29udmVydC5vIGRsbWxvY2subyBkbG11bmxvY2subyBkbG12ZXIubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oIGIvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oCmluZGV4IDk4NDNlZTEuLmQ1YTg2ZmIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaAorKysgYi9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmgKQEAgLTQ5LDYgKzQ5LDQxIEBACiAvKiBJbnRlbmRlZCB0byBtYWtlIGl0IGVhc2llciBmb3IgdXMgdG8gc3dpdGNoIG91dCBoYXNoIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBkbG1fbG9ja2lkX2hhc2goX24sIF9sKSBmdWxsX25hbWVfaGFzaChfbiwgX2wpCiAKK2VudW0gZGxtX21sZV90eXBlIHsKKwlETE1fTUxFX0JMT0NLLAorCURMTV9NTEVfTUFTVEVSLAorCURMTV9NTEVfTUlHUkFUSU9OCit9OworCitzdHJ1Y3QgZGxtX2xvY2tfbmFtZSB7CisJdTggbGVuOworCXU4IG5hbWVbRExNX0xPQ0tJRF9OQU1FX01BWF07Cit9OworCitzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBoYl9ldmVudHM7CisJc3RydWN0IGRsbV9jdHh0ICpkbG07CisJc3BpbmxvY2tfdCBzcGlubG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwlhdG9taWNfdCB3b2tlbjsKKwlzdHJ1Y3Qga3JlZiBtbGVfcmVmczsKKwlpbnQgaW51c2U7CisJdW5zaWduZWQgbG9uZyBtYXliZV9tYXBbQklUU19UT19MT05HUyhPMk5NX01BWF9OT0RFUyldOworCXVuc2lnbmVkIGxvbmcgdm90ZV9tYXBbQklUU19UT19MT05HUyhPMk5NX01BWF9OT0RFUyldOworCXVuc2lnbmVkIGxvbmcgcmVzcG9uc2VfbWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKKwl1bnNpZ25lZCBsb25nIG5vZGVfbWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKKwl1OCBtYXN0ZXI7CisJdTggbmV3X21hc3RlcjsKKwllbnVtIGRsbV9tbGVfdHlwZSB0eXBlOworCXN0cnVjdCBvMmhiX2NhbGxiYWNrX2Z1bmMgbWxlX2hiX3VwOworCXN0cnVjdCBvMmhiX2NhbGxiYWNrX2Z1bmMgbWxlX2hiX2Rvd247CisJdW5pb24geworCQlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKKwkJc3RydWN0IGRsbV9sb2NrX25hbWUgbmFtZTsKKwl9IHU7Cit9OworCiBlbnVtIGRsbV9hc3RfdHlwZSB7CiAJRExNX0FTVCA9IDAsCiAJRExNX0JBU1QsCkBAIC0xMDEsNiArMTM2LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2FzdHM7CiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2Jhc3RzOworCXN0cnVjdCBsaXN0X2hlYWQgdHJhY2tpbmdfbGlzdDsKIAl1bnNpZ25lZCBpbnQgcHVyZ2VfY291bnQ7CiAJc3BpbmxvY2tfdCBzcGlubG9jazsKIAlzcGlubG9ja190IGFzdF9sb2NrOwpAQCAtMTIyLDYgKzE1OCw5IEBACiAJYXRvbWljX3QgcmVtb3RlX3Jlc291cmNlczsKIAlhdG9taWNfdCB1bmtub3duX3Jlc291cmNlczsKIAorCXN0cnVjdCBkbG1fZGVidWdfY3R4dCAqZGxtX2RlYnVnX2N0eHQ7CisJc3RydWN0IGRlbnRyeSAqZGxtX2RlYnVnZnNfc3Vicm9vdDsKKwogCS8qIE5PVEU6IE5leHQgdGhyZWUgYXJlIHByb3RlY3RlZCBieSBkbG1fZG9tYWluX2xvY2sgKi8KIAlzdHJ1Y3Qga3JlZiBkbG1fcmVmczsKIAllbnVtIGRsbV9jdHh0X3N0YXRlIGRsbV9zdGF0ZTsKQEAgLTE3Niw2ICsyMTUsNyBAQAogewogCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqbG9ja3JlczsKIAl1OCByZWFsX21hc3RlcjsKKwl1OCBleHRyYV9yZWY7CiB9OwogCiBzdHJ1Y3QgZGxtX2Fzc2VydF9tYXN0ZXJfcHJpdgpAQCAtMjY5LDYgKzMwOSw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCBkaXJ0eTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlY292ZXJpbmc7IC8vIGRsbV9yZWNvdmVyeV9jdHh0LnJlc291cmNlcyBsaXN0CiAKKwkvKiBBZGRlZCBkdXJpbmcgaW5pdCBhbmQgcmVtb3ZlZCBkdXJpbmcgcmVsZWFzZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdHJhY2tpbmc7CS8qIGRsbS0+dHJhY2tpbmdfbGlzdCAqLworCiAJLyogdW51c2VkIGxvY2sgcmVzb3VyY2VzIGhhdmUgdGhlaXIgbGFzdF91c2VkIHN0YW1wZWQgYW5kIGFyZQogCSAqIHB1dCBvbiBhIGxpc3QgZm9yIHRoZSBkbG0gdGhyZWFkIHRvIHJ1bi4gKi8KIAl1bnNpZ25lZCBsb25nICAgIGxhc3RfdXNlZDsKQEAgLTYwMiwxNyArNjQ1LDE5IEBACiAJSk9JTl9QUk9UT0NPTF9NSVNNQVRDSCwKIH07CiAKK3N0cnVjdCBkbG1fcXVlcnlfam9pbl9wYWNrZXQgeworCXU4IGNvZGU7CS8qIFJlc3BvbnNlIGNvZGUuICBkbG1fbWlub3IgYW5kIGZzX21pbm9yCisJCQkgICBhcmUgb25seSB2YWxpZCBpZiB0aGlzIGlzIEpPSU5fT0sgKi8KKwl1OCBkbG1fbWlub3I7CS8qIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCB0aGUKKwkJCSAgIGRsbSBpcyBzcGVha2luZy4gKi8KKwl1OCBmc19taW5vcjsJLyogVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIHByb3RvY29sIHRoZQorCQkJICAgZmlsZXN5c3RlbSBpcyBzcGVha2luZy4gKi8KKwl1OCByZXNlcnZlZDsKK307CisKIHVuaW9uIGRsbV9xdWVyeV9qb2luX3Jlc3BvbnNlIHsKIAl1MzIgaW50dmFsOwotCXN0cnVjdCB7Ci0JCXU4IGNvZGU7CS8qIFJlc3BvbnNlIGNvZGUuICBkbG1fbWlub3IgYW5kIGZzX21pbm9yCi0JCQkJICAgYXJlIG9ubHkgdmFsaWQgaWYgdGhpcyBpcyBKT0lOX09LICovCi0JCXU4IGRsbV9taW5vcjsJLyogVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIHByb3RvY29sIHRoZQotCQkJCSAgIGRsbSBpcyBzcGVha2luZy4gKi8KLQkJdTggZnNfbWlub3I7CS8qIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCB0aGUKLQkJCQkgICBmaWxlc3lzdGVtIGlzIHNwZWFraW5nLiAqLwotCQl1OCByZXNlcnZlZDsKLQl9IHBhY2tldDsKKwlzdHJ1Y3QgZGxtX3F1ZXJ5X2pvaW5fcGFja2V0IHBhY2tldDsKIH07CiAKIHN0cnVjdCBkbG1fbG9ja19yZXF1ZXN0CkBAIC05NjAsOSArMTAwNSwxNiBAQAogCQkJCQkgIERMTV9MT0NLX1JFU19NSUdSQVRJTkcpKTsKIH0KIAorLyogY3JlYXRlL2Rlc3Ryb3kgc2xhYiBjYWNoZXMgKi8KK2ludCBkbG1faW5pdF9tYXN0ZXJfY2FjaGVzKHZvaWQpOwordm9pZCBkbG1fZGVzdHJveV9tYXN0ZXJfY2FjaGVzKHZvaWQpOworCitpbnQgZGxtX2luaXRfbG9ja19jYWNoZSh2b2lkKTsKK3ZvaWQgZGxtX2Rlc3Ryb3lfbG9ja19jYWNoZSh2b2lkKTsKIAogaW50IGRsbV9pbml0X21sZV9jYWNoZSh2b2lkKTsKIHZvaWQgZGxtX2Rlc3Ryb3lfbWxlX2NhY2hlKHZvaWQpOworCiB2b2lkIGRsbV9oYl9ldmVudF9ub3RpZnlfYXR0YWNoZWQoc3RydWN0IGRsbV9jdHh0ICpkbG0sIGludCBpZHgsIGludCBub2RlX3VwKTsKIGludCBkbG1fZHJvcF9sb2NrcmVzX3JlZihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKIAkJCSBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtY29udmVydC5jIGIvZnMvb2NmczIvZGxtL2RsbWNvbnZlcnQuYwppbmRleCBlY2I0ZDk5Li43NTk5N2I0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtY29udmVydC5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1jb252ZXJ0LmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCQkJICAgICAgICJjb29raWU9JXU6JWxsdVxuIiwKIAkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUoYmU2NF90b19jcHUoY252LT5jb29raWUpKSwKIAkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShjbnYtPmNvb2tpZSkpKTsKLQkJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKKwkJZGxtX3ByaW50X29uZV9sb2NrX3Jlc291cmNlKHJlcyk7CiAJCWdvdG8gbGVhdmU7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCmluZGV4IDY0MjM5YjMuLjVmNmQ4NTg3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBkZWJ1ZyBmdW5jdGlvbmFsaXR5IGZvciB0aGUgZGxtCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAKICNpbmNsdWRlICJjbHVzdGVyL2hlYXJ0YmVhdC5oIgogI2luY2x1ZGUgImNsdXN0ZXIvbm9kZW1hbmFnZXIuaCIKQEAgLTM3LDE3ICszOCwxNiBAQAogCiAjaW5jbHVkZSAiZGxtYXBpLmgiCiAjaW5jbHVkZSAiZGxtY29tbW9uLmgiCi0KICNpbmNsdWRlICJkbG1kb21haW4uaCIKKyNpbmNsdWRlICJkbG1kZWJ1Zy5oIgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfRExNCiAjaW5jbHVkZSAiY2x1c3Rlci9tYXNrbG9nLmgiCiAKK2ludCBzdHJpbmdpZnlfbG9ja25hbWUoY29uc3QgY2hhciAqbG9ja25hbWUsIGludCBsb2NrbGVuLCBjaGFyICpidWYsIGludCBsZW4pOworCiB2b2lkIGRsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcykKIHsKLQltbG9nKE1MX05PVElDRSwgImxvY2tyZXM6ICUuKnMsIG93bmVyPSV1LCBzdGF0ZT0ldVxuIiwKLQkgICAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwKLQkgICAgICAgcmVzLT5vd25lciwgcmVzLT5zdGF0ZSk7CiAJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOwogCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKQEAgLTU4LDcgKzU4LDcgQEAKIAlpbnQgYml0OwogCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CiAKLQltbG9nKE1MX05PVElDRSwgIiAgcmVmbWFwIG5vZGVzOiBbICIpOworCXByaW50aygiICByZWZtYXAgbm9kZXM6IFsgIik7CiAJYml0ID0gMDsKIAl3aGlsZSAoMSkgewogCQliaXQgPSBmaW5kX25leHRfYml0KHJlcy0+cmVmbWFwLCBPMk5NX01BWF9OT0RFUywgYml0KTsKQEAgLTcwLDYzICs3MCw2NiBAQAogCXByaW50aygiXSwgaW5mbGlnaHQ9JXVcbiIsIHJlcy0+aW5mbGlnaHRfbG9ja3MpOwogfQogCitzdGF0aWMgdm9pZCBfX2RsbV9wcmludF9sb2NrKHN0cnVjdCBkbG1fbG9jayAqbG9jaykKK3sKKwlzcGluX2xvY2soJmxvY2stPnNwaW5sb2NrKTsKKworCXByaW50aygiICAgIHR5cGU9JWQsIGNvbnY9JWQsIG5vZGU9JXUsIGNvb2tpZT0ldTolbGx1LCAiCisJICAgICAgICJyZWY9JXUsIGFzdD0oZW1wdHk9JWMscGVuZD0lYyksIGJhc3Q9KGVtcHR5PSVjLHBlbmQ9JWMpLCAiCisJICAgICAgICJwZW5kaW5nPShjb252PSVjLGxvY2s9JWMsY2FuY2VsPSVjLHVubG9jaz0lYylcbiIsCisJICAgICAgIGxvY2stPm1sLnR5cGUsIGxvY2stPm1sLmNvbnZlcnRfdHlwZSwgbG9jay0+bWwubm9kZSwKKwkgICAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpLAorCSAgICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKKwkgICAgICAgYXRvbWljX3JlYWQoJmxvY2stPmxvY2tfcmVmcy5yZWZjb3VudCksCisJICAgICAgIChsaXN0X2VtcHR5KCZsb2NrLT5hc3RfbGlzdCkgPyAneScgOiAnbicpLAorCSAgICAgICAobG9jay0+YXN0X3BlbmRpbmcgPyAneScgOiAnbicpLAorCSAgICAgICAobGlzdF9lbXB0eSgmbG9jay0+YmFzdF9saXN0KSA/ICd5JyA6ICduJyksCisJICAgICAgIChsb2NrLT5iYXN0X3BlbmRpbmcgPyAneScgOiAnbicpLAorCSAgICAgICAobG9jay0+Y29udmVydF9wZW5kaW5nID8gJ3knIDogJ24nKSwKKwkgICAgICAgKGxvY2stPmxvY2tfcGVuZGluZyA/ICd5JyA6ICduJyksCisJICAgICAgIChsb2NrLT5jYW5jZWxfcGVuZGluZyA/ICd5JyA6ICduJyksCisJICAgICAgIChsb2NrLT51bmxvY2tfcGVuZGluZyA/ICd5JyA6ICduJykpOworCisJc3Bpbl91bmxvY2soJmxvY2stPnNwaW5sb2NrKTsKK30KKwogdm9pZCBfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyMjsKIAlzdHJ1Y3QgZGxtX2xvY2sgKmxvY2s7CisJY2hhciBidWZbRExNX0xPQ0tJRF9OQU1FX01BWF07CiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOwogCi0JbWxvZyhNTF9OT1RJQ0UsICJsb2NrcmVzOiAlLipzLCBvd25lcj0ldSwgc3RhdGU9JXVcbiIsCi0JICAgICAgIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsCi0JICAgICAgIHJlcy0+b3duZXIsIHJlcy0+c3RhdGUpOwotCW1sb2coTUxfTk9USUNFLCAiICBsYXN0IHVzZWQ6ICVsdSwgb24gcHVyZ2UgbGlzdDogJXNcbiIsCi0JICAgICByZXMtPmxhc3RfdXNlZCwgbGlzdF9lbXB0eSgmcmVzLT5wdXJnZSkgPyAibm8iIDogInllcyIpOworCXN0cmluZ2lmeV9sb2NrbmFtZShyZXMtPmxvY2tuYW1lLm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLAorCQkJICAgYnVmLCBzaXplb2YoYnVmKSAtIDEpOworCXByaW50aygibG9ja3JlczogJXMsIG93bmVyPSV1LCBzdGF0ZT0ldVxuIiwKKwkgICAgICAgYnVmLCByZXMtPm93bmVyLCByZXMtPnN0YXRlKTsKKwlwcmludGsoIiAgbGFzdCB1c2VkOiAlbHUsIHJlZmNudDogJXUsIG9uIHB1cmdlIGxpc3Q6ICVzXG4iLAorCSAgICAgICByZXMtPmxhc3RfdXNlZCwgYXRvbWljX3JlYWQoJnJlcy0+cmVmcy5yZWZjb3VudCksCisJICAgICAgIGxpc3RfZW1wdHkoJnJlcy0+cHVyZ2UpID8gIm5vIiA6ICJ5ZXMiKTsKKwlwcmludGsoIiAgb24gZGlydHkgbGlzdDogJXMsIG9uIHJlY28gbGlzdDogJXMsICIKKwkgICAgICAgIm1pZ3JhdGluZyBwZW5kaW5nOiAlc1xuIiwKKwkgICAgICAgbGlzdF9lbXB0eSgmcmVzLT5kaXJ0eSkgPyAibm8iIDogInllcyIsCisJICAgICAgIGxpc3RfZW1wdHkoJnJlcy0+cmVjb3ZlcmluZykgPyAibm8iIDogInllcyIsCisJICAgICAgIHJlcy0+bWlncmF0aW9uX3BlbmRpbmcgPyAieWVzIiA6ICJubyIpOworCXByaW50aygiICBpbmZsaWdodCBsb2NrczogJWQsIGFzdHMgcmVzZXJ2ZWQ6ICVkXG4iLAorCSAgICAgICByZXMtPmluZmxpZ2h0X2xvY2tzLCBhdG9taWNfcmVhZCgmcmVzLT5hc3RzX3Jlc2VydmVkKSk7CiAJZGxtX3ByaW50X2xvY2tyZXNfcmVmbWFwKHJlcyk7Ci0JbWxvZyhNTF9OT1RJQ0UsICIgIGdyYW50ZWQgcXVldWU6IFxuIik7CisJcHJpbnRrKCIgIGdyYW50ZWQgcXVldWU6XG4iKTsKIAlsaXN0X2Zvcl9lYWNoKGl0ZXIyLCAmcmVzLT5ncmFudGVkKSB7CiAJCWxvY2sgPSBsaXN0X2VudHJ5KGl0ZXIyLCBzdHJ1Y3QgZGxtX2xvY2ssIGxpc3QpOwotCQlzcGluX2xvY2soJmxvY2stPnNwaW5sb2NrKTsKLQkJbWxvZyhNTF9OT1RJQ0UsICIgICAgdHlwZT0lZCwgY29udj0lZCwgbm9kZT0ldSwgIgotCQkgICAgICAgImNvb2tpZT0ldTolbGx1LCBhc3Q9KGVtcHR5PSVjLHBlbmQ9JWMpLCBiYXN0PShlbXB0eT0lYyxwZW5kPSVjKVxuIiwgCi0JCSAgICAgICBsb2NrLT5tbC50eXBlLCBsb2NrLT5tbC5jb252ZXJ0X3R5cGUsIGxvY2stPm1sLm5vZGUsIAotCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfbm9kZShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKLQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShiZTY0X3RvX2NwdShsb2NrLT5tbC5jb29raWUpKSwKLQkJICAgICAgIGxpc3RfZW1wdHkoJmxvY2stPmFzdF9saXN0KSA/ICd5JyA6ICduJywKLQkJICAgICAgIGxvY2stPmFzdF9wZW5kaW5nID8gJ3knIDogJ24nLAotCQkgICAgICAgbGlzdF9lbXB0eSgmbG9jay0+YmFzdF9saXN0KSA/ICd5JyA6ICduJywKLQkJICAgICAgIGxvY2stPmJhc3RfcGVuZGluZyA/ICd5JyA6ICduJyk7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrLT5zcGlubG9jayk7CisJCV9fZGxtX3ByaW50X2xvY2sobG9jayk7CiAJfQotCW1sb2coTUxfTk9USUNFLCAiICBjb252ZXJ0aW5nIHF1ZXVlOiBcbiIpOworCXByaW50aygiICBjb252ZXJ0aW5nIHF1ZXVlOlxuIik7CiAJbGlzdF9mb3JfZWFjaChpdGVyMiwgJnJlcy0+Y29udmVydGluZykgewogCQlsb2NrID0gbGlzdF9lbnRyeShpdGVyMiwgc3RydWN0IGRsbV9sb2NrLCBsaXN0KTsKLQkJc3Bpbl9sb2NrKCZsb2NrLT5zcGlubG9jayk7Ci0JCW1sb2coTUxfTk9USUNFLCAiICAgIHR5cGU9JWQsIGNvbnY9JWQsIG5vZGU9JXUsICIKLQkJICAgICAgICJjb29raWU9JXU6JWxsdSwgYXN0PShlbXB0eT0lYyxwZW5kPSVjKSwgYmFzdD0oZW1wdHk9JWMscGVuZD0lYylcbiIsIAotCQkgICAgICAgbG9jay0+bWwudHlwZSwgbG9jay0+bWwuY29udmVydF90eXBlLCBsb2NrLT5tbC5ub2RlLCAKLQkJICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUoYmU2NF90b19jcHUobG9jay0+bWwuY29va2llKSksCi0JCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9zZXEoYmU2NF90b19jcHUobG9jay0+bWwuY29va2llKSksCi0JCSAgICAgICBsaXN0X2VtcHR5KCZsb2NrLT5hc3RfbGlzdCkgPyAneScgOiAnbicsCi0JCSAgICAgICBsb2NrLT5hc3RfcGVuZGluZyA/ICd5JyA6ICduJywKLQkJICAgICAgIGxpc3RfZW1wdHkoJmxvY2stPmJhc3RfbGlzdCkgPyAneScgOiAnbicsCi0JCSAgICAgICBsb2NrLT5iYXN0X3BlbmRpbmcgPyAneScgOiAnbicpOwotCQlzcGluX3VubG9jaygmbG9jay0+c3BpbmxvY2spOworCQlfX2RsbV9wcmludF9sb2NrKGxvY2spOwogCX0KLQltbG9nKE1MX05PVElDRSwgIiAgYmxvY2tlZCBxdWV1ZTogXG4iKTsKKwlwcmludGsoIiAgYmxvY2tlZCBxdWV1ZTpcbiIpOwogCWxpc3RfZm9yX2VhY2goaXRlcjIsICZyZXMtPmJsb2NrZWQpIHsKIAkJbG9jayA9IGxpc3RfZW50cnkoaXRlcjIsIHN0cnVjdCBkbG1fbG9jaywgbGlzdCk7Ci0JCXNwaW5fbG9jaygmbG9jay0+c3BpbmxvY2spOwotCQltbG9nKE1MX05PVElDRSwgIiAgICB0eXBlPSVkLCBjb252PSVkLCBub2RlPSV1LCAiCi0JCSAgICAgICAiY29va2llPSV1OiVsbHUsIGFzdD0oZW1wdHk9JWMscGVuZD0lYyksIGJhc3Q9KGVtcHR5PSVjLHBlbmQ9JWMpXG4iLCAKLQkJICAgICAgIGxvY2stPm1sLnR5cGUsIGxvY2stPm1sLmNvbnZlcnRfdHlwZSwgbG9jay0+bWwubm9kZSwgCi0JCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpLAotCQkgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpLAotCQkgICAgICAgbGlzdF9lbXB0eSgmbG9jay0+YXN0X2xpc3QpID8gJ3knIDogJ24nLAotCQkgICAgICAgbG9jay0+YXN0X3BlbmRpbmcgPyAneScgOiAnbicsCi0JCSAgICAgICBsaXN0X2VtcHR5KCZsb2NrLT5iYXN0X2xpc3QpID8gJ3knIDogJ24nLAotCQkgICAgICAgbG9jay0+YmFzdF9wZW5kaW5nID8gJ3knIDogJ24nKTsKLQkJc3Bpbl91bmxvY2soJmxvY2stPnNwaW5sb2NrKTsKKwkJX19kbG1fcHJpbnRfbG9jayhsb2NrKTsKIAl9CiB9CiAKQEAgLTEzNiwzMSArMTM5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRsbV9wcmludF9vbmVfbG9jayk7CiAKLSNpZiAwCi12b2lkIGRsbV9kdW1wX2xvY2tfcmVzb3VyY2VzKHN0cnVjdCBkbG1fY3R4dCAqZGxtKQotewotCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBobGlzdF9ub2RlICppdGVyOwotCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7Ci0JaW50IGk7Ci0KLQltbG9nKE1MX05PVElDRSwgInN0cnVjdCBkbG1fY3R4dDogJXMsIG5vZGU9JXUsIGtleT0ldVxuIiwKLQkJICBkbG0tPm5hbWUsIGRsbS0+bm9kZV9udW0sIGRsbS0+a2V5KTsKLQlpZiAoIWRsbSB8fCAhZGxtLT5uYW1lKSB7Ci0JCW1sb2coTUxfRVJST1IsICJkbG09JXBcbiIsIGRsbSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwotCWZvciAoaT0wOyBpPERMTV9IQVNIX0JVQ0tFVFM7IGkrKykgewotCQlidWNrZXQgPSBkbG1fbG9ja3Jlc19oYXNoKGRsbSwgaSk7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgaXRlciwgYnVja2V0LCBoYXNoX25vZGUpCi0JCQlkbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRsbS0+c3BpbmxvY2spOwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQogc3RhdGljIGNvbnN0IGNoYXIgKmRsbV9lcnJuYW1lc1tdID0gewogCVtETE1fTk9STUFMXSA9CQkJIkRMTV9OT1JNQUwiLAogCVtETE1fR1JBTlRFRF0gPQkJCSJETE1fR1JBTlRFRCIsCkBAIC0yNjYsMyArMjQ0LDc5MiBAQAogCXJldHVybiBkbG1fZXJybmFtZXNbZXJyXTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRsbV9lcnJuYW1lKTsKKworLyogTk9URTogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIGxvY2tuYW1lIGludG8gYSBzdHJpbmcuIEl0IHVzZXMga25vd2xlZGdlCisgKiBvZiB0aGUgZm9ybWF0IG9mIHRoZSBsb2NrbmFtZSB0aGF0IHNob3VsZCBiZSBvdXRzaWRlIHRoZSBwdXJ2aWV3IG9mIHRoZSBkbG0uCisgKiBXZSBhcmUgYWRkaW5nIG9ubHkgdG8gbWFrZSBkbG0gZGVidWdnaW5nIHNsaWdodGx5IGVhc2llci4KKyAqCisgKiBGb3IgbW9yZSBvbiBsb2NrbmFtZSBmb3JtYXRzLCBwbGVhc2UgcmVmZXIgdG8gZGxtZ2x1ZS5jIGFuZCBvY2ZzMl9sb2NraWQuaC4KKyAqLworaW50IHN0cmluZ2lmeV9sb2NrbmFtZShjb25zdCBjaGFyICpsb2NrbmFtZSwgaW50IGxvY2tsZW4sIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgb3V0ID0gMDsKKwlfX2JlNjQgaW5vZGVfYmxrbm9fYmU7CisKKyNkZWZpbmUgT0NGUzJfREVOVFJZX0xPQ0tfSU5PX1NUQVJUCTE4CisJaWYgKCpsb2NrbmFtZSA9PSAnTicpIHsKKwkJbWVtY3B5KChfX2JlNjQgKikmaW5vZGVfYmxrbm9fYmUsCisJCSAgICAgICAoY2hhciAqKSZsb2NrbmFtZVtPQ0ZTMl9ERU5UUllfTE9DS19JTk9fU1RBUlRdLAorCQkgICAgICAgc2l6ZW9mKF9fYmU2NCkpOworCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIlLipzJTA4eCIsCisJCQkJT0NGUzJfREVOVFJZX0xPQ0tfSU5PX1NUQVJUIC0gMSwgbG9ja25hbWUsCisJCQkJKHVuc2lnbmVkIGludCliZTY0X3RvX2NwdShpbm9kZV9ibGtub19iZSkpOworCX0gZWxzZQorCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIlLipzIiwKKwkJCQlsb2NrbGVuLCBsb2NrbmFtZSk7CisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGludCBzdHJpbmdpZnlfbm9kZW1hcCh1bnNpZ25lZCBsb25nICpub2RlbWFwLCBpbnQgbWF4bm9kZXMsCisJCQkgICAgIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgb3V0ID0gMDsKKwlpbnQgaSA9IC0xOworCisJd2hpbGUgKChpID0gZmluZF9uZXh0X2JpdChub2RlbWFwLCBtYXhub2RlcywgaSArIDEpKSA8IG1heG5vZGVzKQorCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIlZCAiLCBpKTsKKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgZHVtcF9tbGUoc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IG91dCA9IDA7CisJdW5zaWduZWQgaW50IG5hbWVsZW47CisJY29uc3QgY2hhciAqbmFtZTsKKwljaGFyICptbGVfdHlwZTsKKworCWlmIChtbGUtPnR5cGUgIT0gRExNX01MRV9NQVNURVIpIHsKKwkJbmFtZWxlbiA9IG1sZS0+dS5uYW1lLmxlbjsKKwkJbmFtZSA9IG1sZS0+dS5uYW1lLm5hbWU7CisJfSBlbHNlIHsKKwkJbmFtZWxlbiA9IG1sZS0+dS5yZXMtPmxvY2tuYW1lLmxlbjsKKwkJbmFtZSA9IG1sZS0+dS5yZXMtPmxvY2tuYW1lLm5hbWU7CisJfQorCisJaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLKQorCQltbGVfdHlwZSA9ICJCTEsiOworCWVsc2UgaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX01BU1RFUikKKwkJbWxlX3R5cGUgPSAiTUFTIjsKKwllbHNlCisJCW1sZV90eXBlID0gIk1JRyI7CisKKwlvdXQgKz0gc3RyaW5naWZ5X2xvY2tuYW1lKG5hbWUsIG5hbWVsZW4sIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiXHQlM3NcdG1hcz0lM3VcdG5ldz0lM3VcdGV2dD0lMWRcdHVzZT0lMWRcdHJlZj0lM2RcbiIsCisJCQltbGVfdHlwZSwgbWxlLT5tYXN0ZXIsIG1sZS0+bmV3X21hc3RlciwKKwkJCSFsaXN0X2VtcHR5KCZtbGUtPmhiX2V2ZW50cyksCisJCQkhIW1sZS0+aW51c2UsCisJCQlhdG9taWNfcmVhZCgmbWxlLT5tbGVfcmVmcy5yZWZjb3VudCkpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiTWF5YmU9Iik7CisJb3V0ICs9IHN0cmluZ2lmeV9ub2RlbWFwKG1sZS0+bWF5YmVfbWFwLCBPMk5NX01BWF9OT0RFUywKKwkJCQkgYnVmICsgb3V0LCBsZW4gLSBvdXQpOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIlxuIik7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJWb3RlPSIpOworCW91dCArPSBzdHJpbmdpZnlfbm9kZW1hcChtbGUtPnZvdGVfbWFwLCBPMk5NX01BWF9OT0RFUywKKwkJCQkgYnVmICsgb3V0LCBsZW4gLSBvdXQpOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIlxuIik7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJSZXNwb25zZT0iKTsKKwlvdXQgKz0gc3RyaW5naWZ5X25vZGVtYXAobWxlLT5yZXNwb25zZV9tYXAsIE8yTk1fTUFYX05PREVTLAorCQkJCSBidWYgKyBvdXQsIGxlbiAtIG91dCk7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiXG4iKTsKKworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIk5vZGU9Iik7CisJb3V0ICs9IHN0cmluZ2lmeV9ub2RlbWFwKG1sZS0+bm9kZV9tYXAsIE8yTk1fTUFYX05PREVTLAorCQkJCSBidWYgKyBvdXQsIGxlbiAtIG91dCk7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiXG4iKTsKKworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIlxuIik7CisKKwlyZXR1cm4gb3V0OworfQorCit2b2lkIGRsbV9wcmludF9vbmVfbWxlKHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSkKK3sKKwljaGFyICpidWY7CisKKwlidWYgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX05PRlMpOworCWlmIChidWYpIHsKKwkJZHVtcF9tbGUobWxlLCBidWYsIFBBR0VfU0laRSAtIDEpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRsbV9kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOworCisjZGVmaW5lIERMTV9ERUJVR0ZTX0RJUgkJCQkibzJkbG0iCisjZGVmaW5lIERMTV9ERUJVR0ZTX0RMTV9TVEFURQkJCSJkbG1fc3RhdGUiCisjZGVmaW5lIERMTV9ERUJVR0ZTX0xPQ0tJTkdfU1RBVEUJCSJsb2NraW5nX3N0YXRlIgorI2RlZmluZSBETE1fREVCVUdGU19NTEVfU1RBVEUJCQkibWxlX3N0YXRlIgorI2RlZmluZSBETE1fREVCVUdGU19QVVJHRV9MSVNUCQkJInB1cmdlX2xpc3QiCisKKy8qIGJlZ2luIC0gdXRpbHMgZnVuY3MgKi8KK3N0YXRpYyB2b2lkIGRsbV9kZWJ1Z19mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkbG1fZGVidWdfY3R4dCAqZGM7CisKKwlkYyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGxtX2RlYnVnX2N0eHQsIGRlYnVnX3JlZmNudCk7CisKKwlrZnJlZShkYyk7Cit9CisKK3ZvaWQgZGxtX2RlYnVnX3B1dChzdHJ1Y3QgZGxtX2RlYnVnX2N0eHQgKmRjKQoreworCWlmIChkYykKKwkJa3JlZl9wdXQoJmRjLT5kZWJ1Z19yZWZjbnQsIGRsbV9kZWJ1Z19mcmVlKTsKK30KKworc3RhdGljIHZvaWQgZGxtX2RlYnVnX2dldChzdHJ1Y3QgZGxtX2RlYnVnX2N0eHQgKmRjKQoreworCWtyZWZfZ2V0KCZkYy0+ZGVidWdfcmVmY250KTsKK30KKworc3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmRlYnVnX2J1ZmZlcl9hbGxvY2F0ZSh2b2lkKQoreworCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiID0gTlVMTDsKKworCWRiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRlYnVnX2J1ZmZlciksIEdGUF9LRVJORUwpOworCWlmICghZGIpCisJCWdvdG8gYmFpbDsKKworCWRiLT5sZW4gPSBQQUdFX1NJWkU7CisJZGItPmJ1ZiA9IGttYWxsb2MoZGItPmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYi0+YnVmKQorCQlnb3RvIGJhaWw7CisKKwlyZXR1cm4gZGI7CitiYWlsOgorCWtmcmVlKGRiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHNzaXplX3QgZGVidWdfYnVmZmVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgZGItPmJ1ZiwgZGItPmxlbik7Cit9CisKK3N0YXRpYyBsb2ZmX3QgZGVidWdfYnVmZmVyX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSkKK3sKKwlzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlsb2ZmX3QgbmV3ID0gLTE7CisKKwlzd2l0Y2ggKHdoZW5jZSkgeworCWNhc2UgMDoKKwkJbmV3ID0gb2ZmOworCQlicmVhazsKKwljYXNlIDE6CisJCW5ldyA9IGZpbGUtPmZfcG9zICsgb2ZmOworCQlicmVhazsKKwl9CisKKwlpZiAobmV3IDwgMCB8fCBuZXcgPiBkYi0+bGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAoZmlsZS0+Zl9wb3MgPSBuZXcpOworfQorCitzdGF0aWMgaW50IGRlYnVnX2J1ZmZlcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiID0gKHN0cnVjdCBkZWJ1Z19idWZmZXIgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZGIpCisJCWtmcmVlKGRiLT5idWYpOworCWtmcmVlKGRiKTsKKworCXJldHVybiAwOworfQorLyogZW5kIC0gdXRpbCBmdW5jcyAqLworCisvKiBiZWdpbiAtIHB1cmdlIGxpc3QgZnVuY3MgKi8KK3N0YXRpYyBpbnQgZGVidWdfcHVyZ2VsaXN0X3ByaW50KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYikKK3sKKwlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKKwlpbnQgb3V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKKworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIkR1bXBpbmcgUHVyZ2VsaXN0IGZvciBEb21haW46ICVzXG4iLCBkbG0tPm5hbWUpOworCisJc3Bpbl9sb2NrKCZkbG0tPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJmRsbS0+cHVyZ2VfbGlzdCwgcHVyZ2UpIHsKKwkJKyt0b3RhbDsKKwkJaWYgKGRiLT5sZW4gLSBvdXQgPCAxMDApCisJCQljb250aW51ZTsKKwkJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwkJb3V0ICs9IHN0cmluZ2lmeV9sb2NrbmFtZShyZXMtPmxvY2tuYW1lLm5hbWUsCisJCQkJCSAgcmVzLT5sb2NrbmFtZS5sZW4sCisJCQkJCSAgZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCk7CisJCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LCAiXHQlbGRcbiIsCisJCQkJKGppZmZpZXMgLSByZXMtPmxhc3RfdXNlZCkvSFopOworCQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKKworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIlRvdGFsIG9uIGxpc3Q6ICVsZFxuIiwgdG90YWwpOworCisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGludCBkZWJ1Z19wdXJnZWxpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZGxtX2N0eHQgKmRsbSA9IGlub2RlLT5pX3ByaXZhdGU7CisJc3RydWN0IGRlYnVnX2J1ZmZlciAqZGI7CisKKwlkYiA9IGRlYnVnX2J1ZmZlcl9hbGxvY2F0ZSgpOworCWlmICghZGIpCisJCWdvdG8gYmFpbDsKKworCWRiLT5sZW4gPSBkZWJ1Z19wdXJnZWxpc3RfcHJpbnQoZGxtLCBkYik7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBkYjsKKworCXJldHVybiAwOworYmFpbDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfcHVyZ2VsaXN0X2ZvcHMgPSB7CisJLm9wZW4gPQkJZGVidWdfcHVyZ2VsaXN0X29wZW4sCisJLnJlbGVhc2UgPQlkZWJ1Z19idWZmZXJfcmVsZWFzZSwKKwkucmVhZCA9CQlkZWJ1Z19idWZmZXJfcmVhZCwKKwkubGxzZWVrID0JZGVidWdfYnVmZmVyX2xsc2VlaywKK307CisvKiBlbmQgLSBwdXJnZSBsaXN0IGZ1bmNzICovCisKKy8qIGJlZ2luIC0gZGVidWcgbWxlIGZ1bmNzICovCitzdGF0aWMgaW50IGRlYnVnX21sZV9wcmludChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRlYnVnX2J1ZmZlciAqZGIpCit7CisJc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlOworCWludCBvdXQgPSAwOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOworCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJCQkiRHVtcGluZyBNTEVzIGZvciBEb21haW46ICVzXG4iLCBkbG0tPm5hbWUpOworCisJc3Bpbl9sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1sZSwgJmRsbS0+bWFzdGVyX2xpc3QsIGxpc3QpIHsKKwkJKyt0b3RhbDsKKwkJaWYgKGRiLT5sZW4gLSBvdXQgPCAyMDApCisJCQljb250aW51ZTsKKwkJb3V0ICs9IGR1bXBfbWxlKG1sZSwgZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCk7CisJfQorCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIlRvdGFsIG9uIGxpc3Q6ICVsZFxuIiwgdG90YWwpOworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfbWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBpbm9kZS0+aV9wcml2YXRlOworCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiOworCisJZGIgPSBkZWJ1Z19idWZmZXJfYWxsb2NhdGUoKTsKKwlpZiAoIWRiKQorCQlnb3RvIGJhaWw7CisKKwlkYi0+bGVuID0gZGVidWdfbWxlX3ByaW50KGRsbSwgZGIpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGI7CisKKwlyZXR1cm4gMDsKK2JhaWw6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX21sZV9mb3BzID0geworCS5vcGVuID0JCWRlYnVnX21sZV9vcGVuLAorCS5yZWxlYXNlID0JZGVidWdfYnVmZmVyX3JlbGVhc2UsCisJLnJlYWQgPQkJZGVidWdfYnVmZmVyX3JlYWQsCisJLmxsc2VlayA9CWRlYnVnX2J1ZmZlcl9sbHNlZWssCit9OworCisvKiBlbmQgLSBkZWJ1ZyBtbGUgZnVuY3MgKi8KKworLyogYmVnaW4gLSBkZWJ1ZyBsb2NrcmVzIGZ1bmNzICovCitzdGF0aWMgaW50IGR1bXBfbG9jayhzdHJ1Y3QgZGxtX2xvY2sgKmxvY2ssIGludCBsaXN0X3R5cGUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgb3V0OworCisjZGVmaW5lIERFQlVHX0xPQ0tfVkVSU0lPTgkxCisJc3Bpbl9sb2NrKCZsb2NrLT5zcGlubG9jayk7CisJb3V0ID0gc25wcmludGYoYnVmLCBsZW4sICJMT0NLOiVkLCVkLCVkLCVkLCVkLCVkOiVsbGQsJWQsJWQsJWQsJWQsJWQsIgorCQkgICAgICAgIiVkLCVkLCVkLCVkXG4iLAorCQkgICAgICAgREVCVUdfTE9DS19WRVJTSU9OLAorCQkgICAgICAgbGlzdF90eXBlLCBsb2NrLT5tbC50eXBlLCBsb2NrLT5tbC5jb252ZXJ0X3R5cGUsCisJCSAgICAgICBsb2NrLT5tbC5ub2RlLAorCQkgICAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGJlNjRfdG9fY3B1KGxvY2stPm1sLmNvb2tpZSkpLAorCQkgICAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9zZXEoYmU2NF90b19jcHUobG9jay0+bWwuY29va2llKSksCisJCSAgICAgICAhbGlzdF9lbXB0eSgmbG9jay0+YXN0X2xpc3QpLAorCQkgICAgICAgIWxpc3RfZW1wdHkoJmxvY2stPmJhc3RfbGlzdCksCisJCSAgICAgICBsb2NrLT5hc3RfcGVuZGluZywgbG9jay0+YmFzdF9wZW5kaW5nLAorCQkgICAgICAgbG9jay0+Y29udmVydF9wZW5kaW5nLCBsb2NrLT5sb2NrX3BlbmRpbmcsCisJCSAgICAgICBsb2NrLT5jYW5jZWxfcGVuZGluZywgbG9jay0+dW5sb2NrX3BlbmRpbmcsCisJCSAgICAgICBhdG9taWNfcmVhZCgmbG9jay0+bG9ja19yZWZzLnJlZmNvdW50KSk7CisJc3Bpbl91bmxvY2soJmxvY2stPnNwaW5sb2NrKTsKKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgZHVtcF9sb2NrcmVzKHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IGRsbV9sb2NrICpsb2NrOworCWludCBpOworCWludCBvdXQgPSAwOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiTkFNRToiKTsKKwlvdXQgKz0gc3RyaW5naWZ5X2xvY2tuYW1lKHJlcy0+bG9ja25hbWUubmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sCisJCQkJICBidWYgKyBvdXQsIGxlbiAtIG91dCk7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiXG4iKTsKKworI2RlZmluZSBERUJVR19MUkVTX1ZFUlNJT04JMQorCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSJMUkVTOiVkLCVkLCVkLCVsZCwlZCwlZCwlZCwlZCwlZCwlZCwlZFxuIiwKKwkJCURFQlVHX0xSRVNfVkVSU0lPTiwKKwkJCXJlcy0+b3duZXIsIHJlcy0+c3RhdGUsIHJlcy0+bGFzdF91c2VkLAorCQkJIWxpc3RfZW1wdHkoJnJlcy0+cHVyZ2UpLAorCQkJIWxpc3RfZW1wdHkoJnJlcy0+ZGlydHkpLAorCQkJIWxpc3RfZW1wdHkoJnJlcy0+cmVjb3ZlcmluZyksCisJCQlyZXMtPmluZmxpZ2h0X2xvY2tzLCByZXMtPm1pZ3JhdGlvbl9wZW5kaW5nLAorCQkJYXRvbWljX3JlYWQoJnJlcy0+YXN0c19yZXNlcnZlZCksCisJCQlhdG9taWNfcmVhZCgmcmVzLT5yZWZzLnJlZmNvdW50KSk7CisKKwkvKiByZWZtYXAgKi8KKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJSTUFQOiIpOworCW91dCArPSBzdHJpbmdpZnlfbm9kZW1hcChyZXMtPnJlZm1hcCwgTzJOTV9NQVhfTk9ERVMsCisJCQkJIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJcbiIpOworCisJLyogbHZiICovCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiTFZCWDoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgRExNX0xWQl9MRU47IGkrKykKKwkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJCQkiJTAyeCIsICh1bnNpZ25lZCBjaGFyKXJlcy0+bHZiW2ldKTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJcbiIpOworCisJLyogZ3JhbnRlZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9jaywgJnJlcy0+Z3JhbnRlZCwgbGlzdCkKKwkJb3V0ICs9IGR1bXBfbG9jayhsb2NrLCAwLCBidWYgKyBvdXQsIGxlbiAtIG91dCk7CisKKwkvKiBjb252ZXJ0aW5nICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2NrLCAmcmVzLT5jb252ZXJ0aW5nLCBsaXN0KQorCQlvdXQgKz0gZHVtcF9sb2NrKGxvY2ssIDEsIGJ1ZiArIG91dCwgbGVuIC0gb3V0KTsKKworCS8qIGJsb2NrZWQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2ssICZyZXMtPmJsb2NrZWQsIGxpc3QpCisJCW91dCArPSBkdW1wX2xvY2sobG9jaywgMiwgYnVmICsgb3V0LCBsZW4gLSBvdXQpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiXG4iKTsKKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkICpsb2NrcmVzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBkZWJ1Z19sb2NrcmVzICpkbCA9IG0tPnByaXZhdGU7CisJc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBkbC0+ZGxfY3R4dDsKKwlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisKKwlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOworCisJaWYgKGRsLT5kbF9yZXMpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXMsICZkbC0+ZGxfcmVzLT50cmFja2luZywgdHJhY2tpbmcpIHsKKwkJCWlmIChkbC0+ZGxfcmVzKSB7CisJCQkJZGxtX2xvY2tyZXNfcHV0KGRsLT5kbF9yZXMpOworCQkJCWRsLT5kbF9yZXMgPSBOVUxMOworCQkJfQorCQkJaWYgKCZyZXMtPnRyYWNraW5nID09ICZkbG0tPnRyYWNraW5nX2xpc3QpIHsKKwkJCQltbG9nKDAsICJFbmQgb2YgbGlzdCBmb3VuZCwgJXBcbiIsIHJlcyk7CisJCQkJZGwgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQkJZGxtX2xvY2tyZXNfZ2V0KHJlcyk7CisJCQlkbC0+ZGxfcmVzID0gcmVzOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIWxpc3RfZW1wdHkoJmRsbS0+dHJhY2tpbmdfbGlzdCkpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAmZGxtLT50cmFja2luZ19saXN0LCB0cmFja2luZykKKwkJCQlicmVhazsKKwkJCWRsbV9sb2NrcmVzX2dldChyZXMpOworCQkJZGwtPmRsX3JlcyA9IHJlczsKKwkJfSBlbHNlCisJCQlkbCA9IE5VTEw7CisJfQorCisJaWYgKGRsKSB7CisJCXNwaW5fbG9jaygmZGwtPmRsX3Jlcy0+c3BpbmxvY2spOworCQlkdW1wX2xvY2tyZXMoZGwtPmRsX3JlcywgZGwtPmRsX2J1ZiwgZGwtPmRsX2xlbiAtIDEpOworCQlzcGluX3VubG9jaygmZGwtPmRsX3Jlcy0+c3BpbmxvY2spOworCX0KKworCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKKworCXJldHVybiBkbDsKK30KKworc3RhdGljIHZvaWQgbG9ja3Jlc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyB2b2lkICpsb2NrcmVzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbG9ja3Jlc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IGRlYnVnX2xvY2tyZXMgKmRsID0gKHN0cnVjdCBkZWJ1Z19sb2NrcmVzICopdjsKKworCXNlcV9wcmludGYocywgIiVzIiwgZGwtPmRsX2J1Zik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZWJ1Z19sb2NrcmVzX29wcyA9IHsKKwkuc3RhcnQgPQlsb2NrcmVzX3NlcV9zdGFydCwKKwkuc3RvcCA9CQlsb2NrcmVzX3NlcV9zdG9wLAorCS5uZXh0ID0JCWxvY2tyZXNfc2VxX25leHQsCisJLnNob3cgPQkJbG9ja3Jlc19zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgZGVidWdfbG9ja3Jlc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwlzdHJ1Y3QgZGVidWdfbG9ja3JlcyAqZGwgPSBOVUxMOworCisJZGwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGVidWdfbG9ja3JlcyksIEdGUF9LRVJORUwpOworCWlmICghZGwpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGJhaWw7CisJfQorCisJZGwtPmRsX2xlbiA9IFBBR0VfU0laRTsKKwlkbC0+ZGxfYnVmID0ga21hbGxvYyhkbC0+ZGxfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRsLT5kbF9idWYpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGJhaWw7CisJfQorCisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJmRlYnVnX2xvY2tyZXNfb3BzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBiYWlsOworCX0KKworCXNlcSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcS0+cHJpdmF0ZSA9IGRsOworCisJZGxtX2dyYWIoZGxtKTsKKwlkbC0+ZGxfY3R4dCA9IGRsbTsKKworCXJldHVybiAwOworYmFpbDoKKwlpZiAoZGwpCisJCWtmcmVlKGRsLT5kbF9idWYpOworCWtmcmVlKGRsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRlYnVnX2xvY2tyZXNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRlYnVnX2xvY2tyZXMgKmRsID0gKHN0cnVjdCBkZWJ1Z19sb2NrcmVzICopc2VxLT5wcml2YXRlOworCisJaWYgKGRsLT5kbF9yZXMpCisJCWRsbV9sb2NrcmVzX3B1dChkbC0+ZGxfcmVzKTsKKwlkbG1fcHV0KGRsLT5kbF9jdHh0KTsKKwlrZnJlZShkbC0+ZGxfYnVmKTsKKwlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2xvY2tyZXNfZm9wcyA9IHsKKwkub3BlbiA9CQlkZWJ1Z19sb2NrcmVzX29wZW4sCisJLnJlbGVhc2UgPQlkZWJ1Z19sb2NrcmVzX3JlbGVhc2UsCisJLnJlYWQgPQkJc2VxX3JlYWQsCisJLmxsc2VlayA9CXNlcV9sc2VlaywKK307CisvKiBlbmQgLSBkZWJ1ZyBsb2NrcmVzIGZ1bmNzICovCisKKy8qIGJlZ2luIC0gZGVidWcgc3RhdGUgZnVuY3MgKi8KK3N0YXRpYyBpbnQgZGVidWdfc3RhdGVfcHJpbnQoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiKQoreworCWludCBvdXQgPSAwOworCXN0cnVjdCBkbG1fcmVjb19ub2RlX2RhdGEgKm5vZGU7CisJY2hhciAqc3RhdGU7CisJaW50IGxyZXMsIHJyZXMsIHVyZXMsIHRyZXM7CisKKwlscmVzID0gYXRvbWljX3JlYWQoJmRsbS0+bG9jYWxfcmVzb3VyY2VzKTsKKwlycmVzID0gYXRvbWljX3JlYWQoJmRsbS0+cmVtb3RlX3Jlc291cmNlcyk7CisJdXJlcyA9IGF0b21pY19yZWFkKCZkbG0tPnVua25vd25fcmVzb3VyY2VzKTsKKwl0cmVzID0gbHJlcyArIHJyZXMgKyB1cmVzOworCisJc3Bpbl9sb2NrKCZkbG0tPnNwaW5sb2NrKTsKKworCXN3aXRjaCAoZGxtLT5kbG1fc3RhdGUpIHsKKwljYXNlIERMTV9DVFhUX05FVzoKKwkJc3RhdGUgPSAiTkVXIjsgYnJlYWs7CisJY2FzZSBETE1fQ1RYVF9KT0lORUQ6CisJCXN0YXRlID0gIkpPSU5FRCI7IGJyZWFrOworCWNhc2UgRExNX0NUWFRfSU5fU0hVVERPV046CisJCXN0YXRlID0gIlNIVVRET1dOIjsgYnJlYWs7CisJY2FzZSBETE1fQ1RYVF9MRUFWSU5HOgorCQlzdGF0ZSA9ICJMRUFWSU5HIjsgYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdGUgPSAiVU5LTk9XTiI7IGJyZWFrOworCX0KKworCS8qIERvbWFpbjogeHh4eHh4eHh4eCAgS2V5OiAweGRmYmFjNzY5ICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJCQkiRG9tYWluOiAlcyAgS2V5OiAweCUwOHhcbiIsIGRsbS0+bmFtZSwgZGxtLT5rZXkpOworCisJLyogVGhyZWFkIFBpZDogeHh4ICBOb2RlOiB4eHggIFN0YXRlOiB4eHh4eCAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIlRocmVhZCBQaWQ6ICVkICBOb2RlOiAlZCAgU3RhdGU6ICVzXG4iLAorCQkJZGxtLT5kbG1fdGhyZWFkX3Rhc2stPnBpZCwgZGxtLT5ub2RlX251bSwgc3RhdGUpOworCisJLyogTnVtYmVyIG9mIEpvaW5zOiB4eHggIEpvaW5pbmcgTm9kZTogeHh4ICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJCQkiTnVtYmVyIG9mIEpvaW5zOiAlZCAgSm9pbmluZyBOb2RlOiAlZFxuIiwKKwkJCWRsbS0+bnVtX2pvaW5zLCBkbG0tPmpvaW5pbmdfbm9kZSk7CisKKwkvKiBEb21haW4gTWFwOiB4eCB4eCB4eCAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LCAiRG9tYWluIE1hcDogIik7CisJb3V0ICs9IHN0cmluZ2lmeV9ub2RlbWFwKGRsbS0+ZG9tYWluX21hcCwgTzJOTV9NQVhfTk9ERVMsCisJCQkJIGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQpOworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LCAiXG4iKTsKKworCS8qIExpdmUgTWFwOiB4eCB4eCB4eCAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LCAiTGl2ZSBNYXA6ICIpOworCW91dCArPSBzdHJpbmdpZnlfbm9kZW1hcChkbG0tPmxpdmVfbm9kZXNfbWFwLCBPMk5NX01BWF9OT0RFUywKKwkJCQkgZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCk7CisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJcbiIpOworCisJLyogTWFzdGVyZWQgUmVzb3VyY2VzIFRvdGFsOiB4eHggIExvY2FsbHk6IHh4eCAgUmVtb3RlbHk6IC4uLiAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIk1hc3RlcmVkIFJlc291cmNlcyBUb3RhbDogJWQgIExvY2FsbHk6ICVkICAiCisJCQkiUmVtb3RlbHk6ICVkICBVbmtub3duOiAlZFxuIiwKKwkJCXRyZXMsIGxyZXMsIHJyZXMsIHVyZXMpOworCisJLyogTGlzdHM6IERpcnR5PUVtcHR5ICBQdXJnZT1JblVzZSAgUGVuZGluZ0FTVHM9RW1wdHkgIC4uLiAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIkxpc3RzOiBEaXJ0eT0lcyAgUHVyZ2U9JXMgIFBlbmRpbmdBU1RzPSVzICAiCisJCQkiUGVuZGluZ0JBU1RzPSVzICBNYXN0ZXI9JXNcbiIsCisJCQkobGlzdF9lbXB0eSgmZGxtLT5kaXJ0eV9saXN0KSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSwKKwkJCShsaXN0X2VtcHR5KCZkbG0tPnB1cmdlX2xpc3QpID8gIkVtcHR5IiA6ICJJblVzZSIpLAorCQkJKGxpc3RfZW1wdHkoJmRsbS0+cGVuZGluZ19hc3RzKSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSwKKwkJCShsaXN0X2VtcHR5KCZkbG0tPnBlbmRpbmdfYmFzdHMpID8gIkVtcHR5IiA6ICJJblVzZSIpLAorCQkJKGxpc3RfZW1wdHkoJmRsbS0+bWFzdGVyX2xpc3QpID8gIkVtcHR5IiA6ICJJblVzZSIpKTsKKworCS8qIFB1cmdlIENvdW50OiB4eHggIFJlZnM6IHh4eCAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIlB1cmdlIENvdW50OiAlZCAgUmVmczogJWRcbiIsIGRsbS0+cHVyZ2VfY291bnQsCisJCQlhdG9taWNfcmVhZCgmZGxtLT5kbG1fcmVmcy5yZWZjb3VudCkpOworCisJLyogRGVhZCBOb2RlOiB4eHggKi8KKwlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwkJCSJEZWFkIE5vZGU6ICVkXG4iLCBkbG0tPnJlY28uZGVhZF9ub2RlKTsKKworCS8qIFdoYXQgYWJvdXQgRExNX1JFQ09fU1RBVEVfRklOQUxJWkU/ICovCisJaWYgKGRsbS0+cmVjby5zdGF0ZSA9PSBETE1fUkVDT19TVEFURV9BQ1RJVkUpCisJCXN0YXRlID0gIkFDVElWRSI7CisJZWxzZQorCQlzdGF0ZSA9ICJJTkFDVElWRSI7CisKKwkvKiBSZWNvdmVyeSBQaWQ6IHh4eHggIE1hc3RlcjogeHh4ICBTdGF0ZTogeHh4eCAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIlJlY292ZXJ5IFBpZDogJWQgIE1hc3RlcjogJWQgIFN0YXRlOiAlc1xuIiwKKwkJCWRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2stPnBpZCwKKwkJCWRsbS0+cmVjby5uZXdfbWFzdGVyLCBzdGF0ZSk7CisKKwkvKiBSZWNvdmVyeSBNYXA6IHh4IHh4ICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJSZWNvdmVyeSBNYXA6ICIpOworCW91dCArPSBzdHJpbmdpZnlfbm9kZW1hcChkbG0tPnJlY292ZXJ5X21hcCwgTzJOTV9NQVhfTk9ERVMsCisJCQkJIGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQpOworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LCAiXG4iKTsKKworCS8qIFJlY292ZXJ5IE5vZGUgU3RhdGU6ICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJSZWNvdmVyeSBOb2RlIFN0YXRlOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmZGxtLT5yZWNvLm5vZGVfZGF0YSwgbGlzdCkgeworCQlzd2l0Y2ggKG5vZGUtPnN0YXRlKSB7CisJCWNhc2UgRExNX1JFQ09fTk9ERV9EQVRBX0lOSVQ6CisJCQlzdGF0ZSA9ICJJTklUIjsKKwkJCWJyZWFrOworCQljYXNlIERMTV9SRUNPX05PREVfREFUQV9SRVFVRVNUSU5HOgorCQkJc3RhdGUgPSAiUkVRVUVTVElORyI7CisJCQlicmVhazsKKwkJY2FzZSBETE1fUkVDT19OT0RFX0RBVEFfREVBRDoKKwkJCXN0YXRlID0gIkRFQUQiOworCQkJYnJlYWs7CisJCWNhc2UgRExNX1JFQ09fTk9ERV9EQVRBX1JFQ0VJVklORzoKKwkJCXN0YXRlID0gIlJFQ0VJVklORyI7CisJCQlicmVhazsKKwkJY2FzZSBETE1fUkVDT19OT0RFX0RBVEFfUkVRVUVTVEVEOgorCQkJc3RhdGUgPSAiUkVRVUVTVEVEIjsKKwkJCWJyZWFrOworCQljYXNlIERMTV9SRUNPX05PREVfREFUQV9ET05FOgorCQkJc3RhdGUgPSAiRE9ORSI7CisJCQlicmVhazsKKwkJY2FzZSBETE1fUkVDT19OT0RFX0RBVEFfRklOQUxJWkVfU0VOVDoKKwkJCXN0YXRlID0gIkZJTkFMSVpFLVNFTlQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdGF0ZSA9ICJCQUQiOworCQkJYnJlYWs7CisJCX0KKwkJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJcdCV1IC0gJXNcbiIsCisJCQkJbm9kZS0+bm9kZV9udW0sIHN0YXRlKTsKKwl9CisKKwlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CisKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgaW50IGRlYnVnX3N0YXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBpbm9kZS0+aV9wcml2YXRlOworCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiID0gTlVMTDsKKworCWRiID0gZGVidWdfYnVmZmVyX2FsbG9jYXRlKCk7CisJaWYgKCFkYikKKwkJZ290byBiYWlsOworCisJZGItPmxlbiA9IGRlYnVnX3N0YXRlX3ByaW50KGRsbSwgZGIpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGI7CisKKwlyZXR1cm4gMDsKK2JhaWw6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3N0YXRlX2ZvcHMgPSB7CisJLm9wZW4gPQkJZGVidWdfc3RhdGVfb3BlbiwKKwkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAorCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLAorCS5sbHNlZWsgPQlkZWJ1Z19idWZmZXJfbGxzZWVrLAorfTsKKy8qIGVuZCAgLSBkZWJ1ZyBzdGF0ZSBmdW5jcyAqLworCisvKiBmaWxlcyBpbiBzdWJyb290ICovCitpbnQgZGxtX2RlYnVnX2luaXQoc3RydWN0IGRsbV9jdHh0ICpkbG0pCit7CisJc3RydWN0IGRsbV9kZWJ1Z19jdHh0ICpkYyA9IGRsbS0+ZGxtX2RlYnVnX2N0eHQ7CisKKwkvKiBmb3IgZHVtcGluZyBkbG1fY3R4dCAqLworCWRjLT5kZWJ1Z19zdGF0ZV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKERMTV9ERUJVR0ZTX0RMTV9TVEFURSwKKwkJCQkJCSAgICAgU19JRlJFR3xTX0lSVVNSLAorCQkJCQkJICAgICBkbG0tPmRsbV9kZWJ1Z2ZzX3N1YnJvb3QsCisJCQkJCQkgICAgIGRsbSwgJmRlYnVnX3N0YXRlX2ZvcHMpOworCWlmICghZGMtPmRlYnVnX3N0YXRlX2RlbnRyeSkgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogZm9yIGR1bXBpbmcgbG9ja3JlcyAqLworCWRjLT5kZWJ1Z19sb2NrcmVzX2RlbnRyeSA9CisJCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKERMTV9ERUJVR0ZTX0xPQ0tJTkdfU1RBVEUsCisJCQkJCSAgICBTX0lGUkVHfFNfSVJVU1IsCisJCQkJCSAgICBkbG0tPmRsbV9kZWJ1Z2ZzX3N1YnJvb3QsCisJCQkJCSAgICBkbG0sICZkZWJ1Z19sb2NrcmVzX2ZvcHMpOworCWlmICghZGMtPmRlYnVnX2xvY2tyZXNfZGVudHJ5KSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBmb3IgZHVtcGluZyBtbGVzICovCisJZGMtPmRlYnVnX21sZV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKERMTV9ERUJVR0ZTX01MRV9TVEFURSwKKwkJCQkJCSAgIFNfSUZSRUd8U19JUlVTUiwKKwkJCQkJCSAgIGRsbS0+ZGxtX2RlYnVnZnNfc3Vicm9vdCwKKwkJCQkJCSAgIGRsbSwgJmRlYnVnX21sZV9mb3BzKTsKKwlpZiAoIWRjLT5kZWJ1Z19tbGVfZGVudHJ5KSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBmb3IgZHVtcGluZyBsb2NrcmVzIG9uIHRoZSBwdXJnZSBsaXN0ICovCisJZGMtPmRlYnVnX3B1cmdlbGlzdF9kZW50cnkgPQorCQkJZGVidWdmc19jcmVhdGVfZmlsZShETE1fREVCVUdGU19QVVJHRV9MSVNULAorCQkJCQkgICAgU19JRlJFR3xTX0lSVVNSLAorCQkJCQkgICAgZGxtLT5kbG1fZGVidWdmc19zdWJyb290LAorCQkJCQkgICAgZGxtLCAmZGVidWdfcHVyZ2VsaXN0X2ZvcHMpOworCWlmICghZGMtPmRlYnVnX3B1cmdlbGlzdF9kZW50cnkpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCWRsbV9kZWJ1Z19nZXQoZGMpOworCXJldHVybiAwOworCitiYWlsOgorCWRsbV9kZWJ1Z19zaHV0ZG93bihkbG0pOworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIGRsbV9kZWJ1Z19zaHV0ZG93bihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKK3sKKwlzdHJ1Y3QgZGxtX2RlYnVnX2N0eHQgKmRjID0gZGxtLT5kbG1fZGVidWdfY3R4dDsKKworCWlmIChkYykgeworCQlpZiAoZGMtPmRlYnVnX3B1cmdlbGlzdF9kZW50cnkpCisJCQlkZWJ1Z2ZzX3JlbW92ZShkYy0+ZGVidWdfcHVyZ2VsaXN0X2RlbnRyeSk7CisJCWlmIChkYy0+ZGVidWdfbWxlX2RlbnRyeSkKKwkJCWRlYnVnZnNfcmVtb3ZlKGRjLT5kZWJ1Z19tbGVfZGVudHJ5KTsKKwkJaWYgKGRjLT5kZWJ1Z19sb2NrcmVzX2RlbnRyeSkKKwkJCWRlYnVnZnNfcmVtb3ZlKGRjLT5kZWJ1Z19sb2NrcmVzX2RlbnRyeSk7CisJCWlmIChkYy0+ZGVidWdfc3RhdGVfZGVudHJ5KQorCQkJZGVidWdmc19yZW1vdmUoZGMtPmRlYnVnX3N0YXRlX2RlbnRyeSk7CisJCWRsbV9kZWJ1Z19wdXQoZGMpOworCX0KK30KKworLyogc3Vicm9vdCAtIGRvbWFpbiBkaXIgKi8KK2ludCBkbG1fY3JlYXRlX2RlYnVnZnNfc3Vicm9vdChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKK3sKKwlkbG0tPmRsbV9kZWJ1Z2ZzX3N1YnJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGxtLT5uYW1lLAorCQkJCQkJICAgICAgZGxtX2RlYnVnZnNfcm9vdCk7CisJaWYgKCFkbG0tPmRsbV9kZWJ1Z2ZzX3N1YnJvb3QpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCWRsbS0+ZGxtX2RlYnVnX2N0eHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGxtX2RlYnVnX2N0eHQpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghZGxtLT5kbG1fZGVidWdfY3R4dCkgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCWtyZWZfaW5pdCgmZGxtLT5kbG1fZGVidWdfY3R4dC0+ZGVidWdfcmVmY250KTsKKworCXJldHVybiAwOworYmFpbDoKKwlkbG1fZGVzdHJveV9kZWJ1Z2ZzX3N1YnJvb3QoZGxtKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBkbG1fZGVzdHJveV9kZWJ1Z2ZzX3N1YnJvb3Qoc3RydWN0IGRsbV9jdHh0ICpkbG0pCit7CisJaWYgKGRsbS0+ZGxtX2RlYnVnZnNfc3Vicm9vdCkKKwkJZGVidWdmc19yZW1vdmUoZGxtLT5kbG1fZGVidWdmc19zdWJyb290KTsKK30KKworLyogZGVidWdmcyByb290ICovCitpbnQgZGxtX2NyZWF0ZV9kZWJ1Z2ZzX3Jvb3Qodm9pZCkKK3sKKwlkbG1fZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKERMTV9ERUJVR0ZTX0RJUiwgTlVMTCk7CisJaWYgKCFkbG1fZGVidWdmc19yb290KSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBkbG1fZGVzdHJveV9kZWJ1Z2ZzX3Jvb3Qodm9pZCkKK3sKKwlpZiAoZGxtX2RlYnVnZnNfcm9vdCkKKwkJZGVidWdmc19yZW1vdmUoZGxtX2RlYnVnZnNfcm9vdCk7Cit9CisjZW5kaWYJLyogQ09ORklHX0RFQlVHX0ZTICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuaCBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNGE2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuaApAQCAtMCwwICsxLDg2IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQorICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6CisgKgorICogZGxtZGVidWcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBETE1ERUJVR19ICisjZGVmaW5lIERMTURFQlVHX0gKKwordm9pZCBkbG1fcHJpbnRfb25lX21sZShzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0cnVjdCBkbG1fZGVidWdfY3R4dCB7CisJc3RydWN0IGtyZWYgZGVidWdfcmVmY250OworCXN0cnVjdCBkZW50cnkgKmRlYnVnX3N0YXRlX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19sb2NrcmVzX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19tbGVfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlYnVnX3B1cmdlbGlzdF9kZW50cnk7Cit9OworCitzdHJ1Y3QgZGVidWdfYnVmZmVyIHsKKwlpbnQgbGVuOworCWNoYXIgKmJ1ZjsKK307CisKK3N0cnVjdCBkZWJ1Z19sb2NrcmVzIHsKKwlpbnQgZGxfbGVuOworCWNoYXIgKmRsX2J1ZjsKKwlzdHJ1Y3QgZGxtX2N0eHQgKmRsX2N0eHQ7CisJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpkbF9yZXM7Cit9OworCitpbnQgZGxtX2RlYnVnX2luaXQoc3RydWN0IGRsbV9jdHh0ICpkbG0pOwordm9pZCBkbG1fZGVidWdfc2h1dGRvd24oc3RydWN0IGRsbV9jdHh0ICpkbG0pOworCitpbnQgZGxtX2NyZWF0ZV9kZWJ1Z2ZzX3N1YnJvb3Qoc3RydWN0IGRsbV9jdHh0ICpkbG0pOwordm9pZCBkbG1fZGVzdHJveV9kZWJ1Z2ZzX3N1YnJvb3Qoc3RydWN0IGRsbV9jdHh0ICpkbG0pOworCitpbnQgZGxtX2NyZWF0ZV9kZWJ1Z2ZzX3Jvb3Qodm9pZCk7Cit2b2lkIGRsbV9kZXN0cm95X2RlYnVnZnNfcm9vdCh2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGludCBkbG1fZGVidWdfaW5pdChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIGRsbV9kZWJ1Z19zaHV0ZG93bihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKK3sKK30KK3N0YXRpYyBpbnQgZGxtX2NyZWF0ZV9kZWJ1Z2ZzX3N1YnJvb3Qoc3RydWN0IGRsbV9jdHh0ICpkbG0pCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBkbG1fZGVzdHJveV9kZWJ1Z2ZzX3N1YnJvb3Qoc3RydWN0IGRsbV9jdHh0ICpkbG0pCit7Cit9CitzdGF0aWMgaW50IGRsbV9jcmVhdGVfZGVidWdmc19yb290KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBkbG1fZGVzdHJveV9kZWJ1Z2ZzX3Jvb3Qodm9pZCkKK3sKK30KKworI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLworI2VuZGlmCS8qIERMTURFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCA2MzhkMmViLi42M2Y4MTI1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2luY2x1ZGUgImNsdXN0ZXIvaGVhcnRiZWF0LmgiCiAjaW5jbHVkZSAiY2x1c3Rlci9ub2RlbWFuYWdlci5oIgpAQCAtNDAsOCArNDEsOCBAQAogCiAjaW5jbHVkZSAiZGxtYXBpLmgiCiAjaW5jbHVkZSAiZGxtY29tbW9uLmgiCi0KICNpbmNsdWRlICJkbG1kb21haW4uaCIKKyNpbmNsdWRlICJkbG1kZWJ1Zy5oIgogCiAjaW5jbHVkZSAiZGxtdmVyLmgiCiAKQEAgLTI5OCw2ICsyOTksOCBAQAogCiBzdGF0aWMgdm9pZCBkbG1fZnJlZV9jdHh0X21lbShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKIHsKKwlkbG1fZGVzdHJveV9kZWJ1Z2ZzX3N1YnJvb3QoZGxtKTsKKwogCWlmIChkbG0tPmxvY2tyZXNfaGFzaCkKIAkJZGxtX2ZyZWVfcGFnZXZlYygodm9pZCAqKilkbG0tPmxvY2tyZXNfaGFzaCwgRExNX0hBU0hfUEFHRVMpOwogCkBAIC0zOTUsNiArMzk4LDcgQEAKIHN0YXRpYyB2b2lkIGRsbV9jb21wbGV0ZV9kbG1fc2h1dGRvd24oc3RydWN0IGRsbV9jdHh0ICpkbG0pCiB7CiAJZGxtX3VucmVnaXN0ZXJfZG9tYWluX2hhbmRsZXJzKGRsbSk7CisJZGxtX2RlYnVnX3NodXRkb3duKGRsbSk7CiAJZGxtX2NvbXBsZXRlX3RocmVhZChkbG0pOwogCWRsbV9jb21wbGV0ZV9yZWNvdmVyeV90aHJlYWQoZGxtKTsKIAlkbG1fZGVzdHJveV9kbG1fd29ya2VyKGRsbSk7CkBAIC02NDQsNiArNjQ4LDcgQEAKIHZvaWQgZGxtX3VucmVnaXN0ZXJfZG9tYWluKHN0cnVjdCBkbG1fY3R4dCAqZGxtKQogewogCWludCBsZWF2ZSA9IDA7CisJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7CiAKIAlzcGluX2xvY2soJmRsbV9kb21haW5fbG9jayk7CiAJQlVHX09OKGRsbS0+ZGxtX3N0YXRlICE9IERMTV9DVFhUX0pPSU5FRCk7CkBAIC02NzMsNiArNjc4LDE1IEBACiAJCQltc2xlZXAoNTAwKTsKIAkJCW1sb2coMCwgIiVzOiBtb3JlIG1pZ3JhdGlvbiB0byBkb1xuIiwgZGxtLT5uYW1lKTsKIAkJfQorCisJCS8qIFRoaXMgbGlzdCBzaG91bGQgYmUgZW1wdHkuIElmIG5vdCwgcHJpbnQgcmVtYWluaW5nIGxvY2tyZXMgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZkbG0tPnRyYWNraW5nX2xpc3QpKSB7CisJCQltbG9nKE1MX0VSUk9SLCAiRm9sbG93aW5nIGxvY2tyZXMnIGFyZSBzdGlsbCBvbiB0aGUgIgorCQkJICAgICAidHJhY2tpbmcgbGlzdDpcbiIpOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXMsICZkbG0tPnRyYWNraW5nX2xpc3QsIHRyYWNraW5nKQorCQkJCWRsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOworCQl9CisKIAkJZGxtX21hcmtfZG9tYWluX2xlYXZpbmcoZGxtKTsKIAkJZGxtX2xlYXZlX2RvbWFpbihkbG0pOwogCQlkbG1fY29tcGxldGVfZGxtX3NodXRkb3duKGRsbSk7CkBAIC03MTMsMTQgKzcyNyw0NiBAQAogCXJldHVybiByYzsKIH0KIAorLyoKKyAqIHN0cnVjdCBkbG1fcXVlcnlfam9pbl9wYWNrZXQgaXMgbWFkZSB1cCBvZiBmb3VyIG9uZS1ieXRlIGZpZWxkcy4gIFRoZXkKKyAqIGFyZSBlZmZlY3RpdmVseSBpbiBiaWctZW5kaWFuIG9yZGVyIGFscmVhZHkuICBIb3dldmVyLCBsaXR0bGUtZW5kaWFuCisgKiBtYWNoaW5lcyBzd2FwIHRoZW0gYmVmb3JlIHB1dHRpbmcgdGhlIHBhY2tldCBvbiB0aGUgd2lyZSAoYmVjYXVzZQorICogcXVlcnlfam9pbidzIHJlc3BvbnNlIGlzIGEgc3RhdHVzLCBhbmQgdGhhdCBzdGF0dXMgaXMgdHJlYXRlZCBhcyBhIHUzMgorICogb24gdGhlIHdpcmUpLiAgVGh1cywgYSBiaWctZW5kaWFuIGFuZCBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzIHdpbGwgdHJlYXQKKyAqIHRoaXMgc3RydWN0dXJlIGRpZmZlcmVudGx5LgorICoKKyAqIFRoZSBzb2x1dGlvbiBpcyB0byBoYXZlIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMgc3dhcCB0aGUgc3RydWN0dXJlIHdoZW4KKyAqIGNvbnZlcnRpbmcgZnJvbSB0aGUgc3RydWN0dXJlIHRvIHRoZSB1MzIgcmVwcmVzZW50YXRpb24uICBUaGlzIHdpbGwKKyAqIHJlc3VsdCBpbiB0aGUgc3RydWN0dXJlIGhhdmluZyB0aGUgY29ycmVjdCBmb3JtYXQgb24gdGhlIHdpcmUgbm8gbWF0dGVyCisgKiB0aGUgaG9zdCBlbmRpYW4gZm9ybWF0LgorICovCitzdGF0aWMgdm9pZCBkbG1fcXVlcnlfam9pbl9wYWNrZXRfdG9fd2lyZShzdHJ1Y3QgZGxtX3F1ZXJ5X2pvaW5fcGFja2V0ICpwYWNrZXQsCisJCQkJCSAgdTMyICp3aXJlKQoreworCXVuaW9uIGRsbV9xdWVyeV9qb2luX3Jlc3BvbnNlIHJlc3BvbnNlOworCisJcmVzcG9uc2UucGFja2V0ID0gKnBhY2tldDsKKwkqd2lyZSA9IGNwdV90b19iZTMyKHJlc3BvbnNlLmludHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbV9xdWVyeV9qb2luX3dpcmVfdG9fcGFja2V0KHUzMiB3aXJlLAorCQkJCQkgIHN0cnVjdCBkbG1fcXVlcnlfam9pbl9wYWNrZXQgKnBhY2tldCkKK3sKKwl1bmlvbiBkbG1fcXVlcnlfam9pbl9yZXNwb25zZSByZXNwb25zZTsKKworCXJlc3BvbnNlLmludHZhbCA9IGNwdV90b19iZTMyKHdpcmUpOworCSpwYWNrZXQgPSByZXNwb25zZS5wYWNrZXQ7Cit9CisKIHN0YXRpYyBpbnQgZGxtX3F1ZXJ5X2pvaW5faGFuZGxlcihzdHJ1Y3QgbzJuZXRfbXNnICptc2csIHUzMiBsZW4sIHZvaWQgKmRhdGEsCiAJCQkJICB2b2lkICoqcmV0X2RhdGEpCiB7CiAJc3RydWN0IGRsbV9xdWVyeV9qb2luX3JlcXVlc3QgKnF1ZXJ5OwotCXVuaW9uIGRsbV9xdWVyeV9qb2luX3Jlc3BvbnNlIHJlc3BvbnNlID0gewotCQkucGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XLAorCXN0cnVjdCBkbG1fcXVlcnlfam9pbl9wYWNrZXQgcGFja2V0ID0geworCQkuY29kZSA9IEpPSU5fRElTQUxMT1csCiAJfTsKIAlzdHJ1Y3QgZGxtX2N0eHQgKmRsbSA9IE5VTEw7CisJdTMyIHJlc3BvbnNlOwogCXU4IG5vZGVudW07CiAKIAlxdWVyeSA9IChzdHJ1Y3QgZGxtX3F1ZXJ5X2pvaW5fcmVxdWVzdCAqKSBtc2ctPmJ1ZjsKQEAgLTczNywxMSArNzgzLDExIEBACiAJCW1sb2coMCwgIm5vZGUgJXUgaXMgbm90IGluIG91ciBsaXZlIG1hcCB5ZXRcbiIsCiAJCSAgICAgcXVlcnktPm5vZGVfaWR4KTsKIAotCQlyZXNwb25zZS5wYWNrZXQuY29kZSA9IEpPSU5fRElTQUxMT1c7CisJCXBhY2tldC5jb2RlID0gSk9JTl9ESVNBTExPVzsKIAkJZ290byByZXNwb25kOwogCX0KIAotCXJlc3BvbnNlLnBhY2tldC5jb2RlID0gSk9JTl9PS19OT19NQVA7CisJcGFja2V0LmNvZGUgPSBKT0lOX09LX05PX01BUDsKIAogCXNwaW5fbG9jaygmZGxtX2RvbWFpbl9sb2NrKTsKIAlkbG0gPSBfX2RsbV9sb29rdXBfZG9tYWluX2Z1bGwocXVlcnktPmRvbWFpbiwgcXVlcnktPm5hbWVfbGVuKTsKQEAgLTc2MCw3ICs4MDYsNyBAQAogCQkJCW1sb2coMCwgImRpc2FsbG93IGpvaW4gYXMgbm9kZSAldSBkb2VzIG5vdCAiCiAJCQkJICAgICAiaGF2ZSBub2RlICV1IGluIGl0cyBub2RlbWFwXG4iLAogCQkJCSAgICAgcXVlcnktPm5vZGVfaWR4LCBub2RlbnVtKTsKLQkJCQlyZXNwb25zZS5wYWNrZXQuY29kZSA9IEpPSU5fRElTQUxMT1c7CisJCQkJcGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XOwogCQkJCWdvdG8gdW5sb2NrX3Jlc3BvbmQ7CiAJCQl9CiAJCX0KQEAgLTc4MCwyMyArODI2LDIzIEBACiAJCQkvKklmIHRoaXMgaXMgYSBicmFuZCBuZXcgY29udGV4dCBhbmQgd2UKIAkJCSAqIGhhdmVuJ3Qgc3RhcnRlZCBvdXIgam9pbiBwcm9jZXNzIHlldCwgdGhlbgogCQkJICogdGhlIG90aGVyIG5vZGUgd29uIHRoZSByYWNlLiAqLwotCQkJcmVzcG9uc2UucGFja2V0LmNvZGUgPSBKT0lOX09LX05PX01BUDsKKwkJCXBhY2tldC5jb2RlID0gSk9JTl9PS19OT19NQVA7CiAJCX0gZWxzZSBpZiAoZGxtLT5qb2luaW5nX25vZGUgIT0gRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV04pIHsKIAkJCS8qIERpc2FsbG93IHBhcmFsbGVsIGpvaW5zLiAqLwotCQkJcmVzcG9uc2UucGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XOworCQkJcGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XOwogCQl9IGVsc2UgaWYgKGRsbS0+cmVjby5zdGF0ZSAmIERMTV9SRUNPX1NUQVRFX0FDVElWRSkgewogCQkJbWxvZygwLCAibm9kZSAldSB0cnlpbmcgdG8gam9pbiwgYnV0IHJlY292ZXJ5ICIKIAkJCSAgICAgImlzIG9uZ29pbmcuXG4iLCBiaXQpOwotCQkJcmVzcG9uc2UucGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XOworCQkJcGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XOwogCQl9IGVsc2UgaWYgKHRlc3RfYml0KGJpdCwgZGxtLT5yZWNvdmVyeV9tYXApKSB7CiAJCQltbG9nKDAsICJub2RlICV1IHRyeWluZyB0byBqb2luLCBidXQgaXQgIgogCQkJICAgICAic3RpbGwgbmVlZHMgcmVjb3ZlcnkuXG4iLCBiaXQpOwotCQkJcmVzcG9uc2UucGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XOworCQkJcGFja2V0LmNvZGUgPSBKT0lOX0RJU0FMTE9XOwogCQl9IGVsc2UgaWYgKHRlc3RfYml0KGJpdCwgZGxtLT5kb21haW5fbWFwKSkgewogCQkJbWxvZygwLCAibm9kZSAldSB0cnlpbmcgdG8gam9pbiwgYnV0IGl0ICIKIAkJCSAgICAgImlzIHN0aWxsIGluIHRoZSBkb21haW4hIG5lZWRzIHJlY292ZXJ5P1xuIiwKIAkJCSAgICAgYml0KTsKLQkJCXJlc3BvbnNlLnBhY2tldC5jb2RlID0gSk9JTl9ESVNBTExPVzsKKwkJCXBhY2tldC5jb2RlID0gSk9JTl9ESVNBTExPVzsKIAkJfSBlbHNlIHsKIAkJCS8qIEFscmlnaHQgd2UncmUgZnVsbHkgYSBwYXJ0IG9mIHRoaXMgZG9tYWluCiAJCQkgKiBzbyB3ZSBrZWVwIHNvbWUgc3RhdGUgYXMgdG8gd2hvJ3Mgam9pbmluZwpAQCAtODA3LDE5ICs4NTMsMTUgQEAKIAkJCWlmIChkbG1fcXVlcnlfam9pbl9wcm90b19jaGVjaygiRExNIiwgYml0LAogCQkJCQkJICAgICAgICZkbG0tPmRsbV9sb2NraW5nX3Byb3RvLAogCQkJCQkJICAgICAgICZxdWVyeS0+ZGxtX3Byb3RvKSkgewotCQkJCXJlc3BvbnNlLnBhY2tldC5jb2RlID0KLQkJCQkJSk9JTl9QUk9UT0NPTF9NSVNNQVRDSDsKKwkJCQlwYWNrZXQuY29kZSA9IEpPSU5fUFJPVE9DT0xfTUlTTUFUQ0g7CiAJCQl9IGVsc2UgaWYgKGRsbV9xdWVyeV9qb2luX3Byb3RvX2NoZWNrKCJmcyIsIGJpdCwKIAkJCQkJCQkgICAgICAmZGxtLT5mc19sb2NraW5nX3Byb3RvLAogCQkJCQkJCSAgICAgICZxdWVyeS0+ZnNfcHJvdG8pKSB7Ci0JCQkJcmVzcG9uc2UucGFja2V0LmNvZGUgPQotCQkJCQlKT0lOX1BST1RPQ09MX01JU01BVENIOworCQkJCXBhY2tldC5jb2RlID0gSk9JTl9QUk9UT0NPTF9NSVNNQVRDSDsKIAkJCX0gZWxzZSB7Ci0JCQkJcmVzcG9uc2UucGFja2V0LmRsbV9taW5vciA9Ci0JCQkJCXF1ZXJ5LT5kbG1fcHJvdG8ucHZfbWlub3I7Ci0JCQkJcmVzcG9uc2UucGFja2V0LmZzX21pbm9yID0KLQkJCQkJcXVlcnktPmZzX3Byb3RvLnB2X21pbm9yOwotCQkJCXJlc3BvbnNlLnBhY2tldC5jb2RlID0gSk9JTl9PSzsKKwkJCQlwYWNrZXQuZGxtX21pbm9yID0gcXVlcnktPmRsbV9wcm90by5wdl9taW5vcjsKKwkJCQlwYWNrZXQuZnNfbWlub3IgPSBxdWVyeS0+ZnNfcHJvdG8ucHZfbWlub3I7CisJCQkJcGFja2V0LmNvZGUgPSBKT0lOX09LOwogCQkJCV9fZGxtX3NldF9qb2luaW5nX25vZGUoZGxtLCBxdWVyeS0+bm9kZV9pZHgpOwogCQkJfQogCQl9CkBAIC04MzAsOSArODcyLDEwIEBACiAJc3Bpbl91bmxvY2soJmRsbV9kb21haW5fbG9jayk7CiAKIHJlc3BvbmQ6Ci0JbWxvZygwLCAiV2UgcmVzcG9uZCB3aXRoICV1XG4iLCByZXNwb25zZS5wYWNrZXQuY29kZSk7CisJbWxvZygwLCAiV2UgcmVzcG9uZCB3aXRoICV1XG4iLCBwYWNrZXQuY29kZSk7CiAKLQlyZXR1cm4gcmVzcG9uc2UuaW50dmFsOworCWRsbV9xdWVyeV9qb2luX3BhY2tldF90b193aXJlKCZwYWNrZXQsICZyZXNwb25zZSk7CisJcmV0dXJuIHJlc3BvbnNlOwogfQogCiBzdGF0aWMgaW50IGRsbV9hc3NlcnRfam9pbmVkX2hhbmRsZXIoc3RydWN0IG8ybmV0X21zZyAqbXNnLCB1MzIgbGVuLCB2b2lkICpkYXRhLApAQCAtOTM3LDcgKzk4MCw3IEBACiAJCQkgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkgewogCQltbG9nKE1MX0VSUk9SLAogCQkgICAgICJtYXBfc2l6ZSAldSAhPSBCSVRTX1RPX0xPTkdTKE8yTk1fTUFYX05PREVTKSAldVxuIiwKLQkJICAgICBtYXBfc2l6ZSwgQklUU19UT19MT05HUyhPMk5NX01BWF9OT0RFUykpOworCQkgICAgIG1hcF9zaXplLCAodW5zaWduZWQpQklUU19UT19MT05HUyhPMk5NX01BWF9OT0RFUykpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTk2OCw3ICsxMDExLDggQEAKIHsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBkbG1fcXVlcnlfam9pbl9yZXF1ZXN0IGpvaW5fbXNnOwotCXVuaW9uIGRsbV9xdWVyeV9qb2luX3Jlc3BvbnNlIGpvaW5fcmVzcDsKKwlzdHJ1Y3QgZGxtX3F1ZXJ5X2pvaW5fcGFja2V0IHBhY2tldDsKKwl1MzIgam9pbl9yZXNwOwogCiAJbWxvZygwLCAicXVlcnlpbmcgbm9kZSAlZFxuIiwgbm9kZSk7CiAKQEAgLTk4NCwxMSArMTAyOCwxMiBAQAogCiAJc3RhdHVzID0gbzJuZXRfc2VuZF9tZXNzYWdlKERMTV9RVUVSWV9KT0lOX01TRywgRExNX01PRF9LRVksICZqb2luX21zZywKIAkJCQkgICAgc2l6ZW9mKGpvaW5fbXNnKSwgbm9kZSwKLQkJCQkgICAgJmpvaW5fcmVzcC5pbnR2YWwpOworCQkJCSAgICAmam9pbl9yZXNwKTsKIAlpZiAoc3RhdHVzIDwgMCAmJiBzdGF0dXMgIT0gLUVOT1BST1RPT1BUKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KKwlkbG1fcXVlcnlfam9pbl93aXJlX3RvX3BhY2tldChqb2luX3Jlc3AsICZwYWNrZXQpOwogCiAJLyogLUVOT1BST1RPT1BUIGZyb20gdGhlIG5ldCBjb2RlIG1lYW5zIHRoZSBvdGhlciBzaWRlIGlzbid0CiAJICAgIGxpc3RlbmluZyBmb3Igb3VyIG1lc3NhZ2UgdHlwZSAtLSB0aGF0J3MgZmluZSwgaXQgbWVhbnMKQEAgLTk5NywxMCArMTA0MiwxMCBAQAogCWlmIChzdGF0dXMgPT0gLUVOT1BST1RPT1BUKSB7CiAJCXN0YXR1cyA9IDA7CiAJCSpyZXNwb25zZSA9IEpPSU5fT0tfTk9fTUFQOwotCX0gZWxzZSBpZiAoam9pbl9yZXNwLnBhY2tldC5jb2RlID09IEpPSU5fRElTQUxMT1cgfHwKLQkJICAgam9pbl9yZXNwLnBhY2tldC5jb2RlID09IEpPSU5fT0tfTk9fTUFQKSB7Ci0JCSpyZXNwb25zZSA9IGpvaW5fcmVzcC5wYWNrZXQuY29kZTsKLQl9IGVsc2UgaWYgKGpvaW5fcmVzcC5wYWNrZXQuY29kZSA9PSBKT0lOX1BST1RPQ09MX01JU01BVENIKSB7CisJfSBlbHNlIGlmIChwYWNrZXQuY29kZSA9PSBKT0lOX0RJU0FMTE9XIHx8CisJCSAgIHBhY2tldC5jb2RlID09IEpPSU5fT0tfTk9fTUFQKSB7CisJCSpyZXNwb25zZSA9IHBhY2tldC5jb2RlOworCX0gZWxzZSBpZiAocGFja2V0LmNvZGUgPT0gSk9JTl9QUk9UT0NPTF9NSVNNQVRDSCkgewogCQltbG9nKE1MX05PVElDRSwKIAkJICAgICAiVGhpcyBub2RlIHJlcXVlc3RlZCBETE0gbG9ja2luZyBwcm90b2NvbCAldS4ldSBhbmQgIgogCQkgICAgICJmaWxlc3lzdGVtIGxvY2tpbmcgcHJvdG9jb2wgJXUuJXUuICBBdCBsZWFzdCBvbmUgb2YgIgpAQCAtMTAxMiwxNCArMTA1NywxMiBAQAogCQkgICAgIGRsbS0+ZnNfbG9ja2luZ19wcm90by5wdl9taW5vciwKIAkJICAgICBub2RlKTsKIAkJc3RhdHVzID0gLUVQUk9UTzsKLQkJKnJlc3BvbnNlID0gam9pbl9yZXNwLnBhY2tldC5jb2RlOwotCX0gZWxzZSBpZiAoam9pbl9yZXNwLnBhY2tldC5jb2RlID09IEpPSU5fT0spIHsKLQkJKnJlc3BvbnNlID0gam9pbl9yZXNwLnBhY2tldC5jb2RlOworCQkqcmVzcG9uc2UgPSBwYWNrZXQuY29kZTsKKwl9IGVsc2UgaWYgKHBhY2tldC5jb2RlID09IEpPSU5fT0spIHsKKwkJKnJlc3BvbnNlID0gcGFja2V0LmNvZGU7CiAJCS8qIFVzZSB0aGUgc2FtZSBsb2NraW5nIHByb3RvY29sIGFzIHRoZSByZW1vdGUgbm9kZSAqLwotCQlkbG0tPmRsbV9sb2NraW5nX3Byb3RvLnB2X21pbm9yID0KLQkJCWpvaW5fcmVzcC5wYWNrZXQuZGxtX21pbm9yOwotCQlkbG0tPmZzX2xvY2tpbmdfcHJvdG8ucHZfbWlub3IgPQotCQkJam9pbl9yZXNwLnBhY2tldC5mc19taW5vcjsKKwkJZGxtLT5kbG1fbG9ja2luZ19wcm90by5wdl9taW5vciA9IHBhY2tldC5kbG1fbWlub3I7CisJCWRsbS0+ZnNfbG9ja2luZ19wcm90by5wdl9taW5vciA9IHBhY2tldC5mc19taW5vcjsKIAkJbWxvZygwLAogCQkgICAgICJOb2RlICVkIHJlc3BvbmRzIEpPSU5fT0sgd2l0aCBETE0gbG9ja2luZyBwcm90b2NvbCAiCiAJCSAgICAgIiV1LiV1IGFuZCBmcyBsb2NraW5nIHByb3RvY29sICV1LiV1XG4iLApAQCAtMTAzMSwxMSArMTA3NCwxMSBAQAogCX0gZWxzZSB7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCW1sb2coTUxfRVJST1IsICJpbnZhbGlkIHJlc3BvbnNlICVkIGZyb20gbm9kZSAldVxuIiwKLQkJICAgICBqb2luX3Jlc3AucGFja2V0LmNvZGUsIG5vZGUpOworCQkgICAgIHBhY2tldC5jb2RlLCBub2RlKTsKIAl9CiAKIAltbG9nKDAsICJzdGF0dXMgJWQsIG5vZGUgJWQgcmVzcG9uc2UgaXMgJWRcbiIsIHN0YXR1cywgbm9kZSwKLQkJICAqcmVzcG9uc2UpOworCSAgICAgKnJlc3BvbnNlKTsKIAogYmFpbDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTM3Niw2ICsxNDE5LDEyIEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlzdGF0dXMgPSBkbG1fZGVidWdfaW5pdChkbG0pOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKwogCXN0YXR1cyA9IGRsbV9sYXVuY2hfdGhyZWFkKGRsbSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTQ0Myw2ICsxNDkyLDcgQEAKIAogCWlmIChzdGF0dXMpIHsKIAkJZGxtX3VucmVnaXN0ZXJfZG9tYWluX2hhbmRsZXJzKGRsbSk7CisJCWRsbV9kZWJ1Z19zaHV0ZG93bihkbG0pOwogCQlkbG1fY29tcGxldGVfdGhyZWFkKGRsbSk7CiAJCWRsbV9jb21wbGV0ZV9yZWNvdmVyeV90aHJlYWQoZGxtKTsKIAkJZGxtX2Rlc3Ryb3lfZGxtX3dvcmtlcihkbG0pOwpAQCAtMTQ1NSw2ICsxNTA1LDcgQEAKIAkJCQl1MzIga2V5KQogewogCWludCBpOworCWludCByZXQ7CiAJc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBOVUxMOwogCiAJZGxtID0ga3phbGxvYyhzaXplb2YoKmRsbSksIEdGUF9LRVJORUwpOwpAQCAtMTQ4Nyw2ICsxNTM4LDE1IEBACiAJZGxtLT5rZXkgPSBrZXk7CiAJZGxtLT5ub2RlX251bSA9IG8ybm1fdGhpc19ub2RlKCk7CiAKKwlyZXQgPSBkbG1fY3JlYXRlX2RlYnVnZnNfc3Vicm9vdChkbG0pOworCWlmIChyZXQgPCAwKSB7CisJCWRsbV9mcmVlX3BhZ2V2ZWMoKHZvaWQgKiopZGxtLT5sb2NrcmVzX2hhc2gsIERMTV9IQVNIX1BBR0VTKTsKKwkJa2ZyZWUoZGxtLT5uYW1lKTsKKwkJa2ZyZWUoZGxtKTsKKwkJZGxtID0gTlVMTDsKKwkJZ290byBsZWF2ZTsKKwl9CisKIAlzcGluX2xvY2tfaW5pdCgmZGxtLT5zcGlubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRsbS0+bWFzdGVyX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkbG0tPmFzdF9sb2NrKTsKQEAgLTE0OTcsNiArMTU1Nyw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRsbS0+cmVjby5ub2RlX2RhdGEpOwogCUlOSVRfTElTVF9IRUFEKCZkbG0tPnB1cmdlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkbG0tPmRsbV9kb21haW5faGFuZGxlcnMpOworCUlOSVRfTElTVF9IRUFEKCZkbG0tPnRyYWNraW5nX2xpc3QpOwogCWRsbS0+cmVjby5zdGF0ZSA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmZGxtLT5wZW5kaW5nX2FzdHMpOwpAQCAtMTc4NywyMSArMTg0OCw0OSBAQAogCWRsbV9wcmludF92ZXJzaW9uKCk7CiAKIAlzdGF0dXMgPSBkbG1faW5pdF9tbGVfY2FjaGUoKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gLTE7CisJaWYgKHN0YXR1cykgeworCQltbG9nKE1MX0VSUk9SLCAiQ291bGQgbm90IGNyZWF0ZSBvMmRsbV9tbGUgc2xhYmNhY2hlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBkbG1faW5pdF9tYXN0ZXJfY2FjaGVzKCk7CisJaWYgKHN0YXR1cykgeworCQltbG9nKE1MX0VSUk9SLCAiQ291bGQgbm90IGNyZWF0ZSBvMmRsbV9sb2NrcmVzIGFuZCAiCisJCSAgICAgIm8yZGxtX2xvY2tuYW1lIHNsYWJjYWNoZXNcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGRsbV9pbml0X2xvY2tfY2FjaGUoKTsKKwlpZiAoc3RhdHVzKSB7CisJCW1sb2coTUxfRVJST1IsICJDb3VudCBub3QgY3JlYXRlIG8yZGxtX2xvY2sgc2xhYmNhY2hlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CiAKIAlzdGF0dXMgPSBkbG1fcmVnaXN0ZXJfbmV0X2hhbmRsZXJzKCk7CiAJaWYgKHN0YXR1cykgewotCQlkbG1fZGVzdHJveV9tbGVfY2FjaGUoKTsKLQkJcmV0dXJuIC0xOworCQltbG9nKE1MX0VSUk9SLCAiVW5hYmxlIHRvIHJlZ2lzdGVyIG5ldHdvcmsgaGFuZGxlcnNcbiIpOworCQlnb3RvIGVycm9yOwogCX0KIAorCXN0YXR1cyA9IGRsbV9jcmVhdGVfZGVidWdmc19yb290KCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJvcjsKKwogCXJldHVybiAwOworZXJyb3I6CisJZGxtX3VucmVnaXN0ZXJfbmV0X2hhbmRsZXJzKCk7CisJZGxtX2Rlc3Ryb3lfbG9ja19jYWNoZSgpOworCWRsbV9kZXN0cm95X21hc3Rlcl9jYWNoZXMoKTsKKwlkbG1fZGVzdHJveV9tbGVfY2FjaGUoKTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkbG1fZXhpdCAodm9pZCkKIHsKKwlkbG1fZGVzdHJveV9kZWJ1Z2ZzX3Jvb3QoKTsKIAlkbG1fdW5yZWdpc3Rlcl9uZXRfaGFuZGxlcnMoKTsKKwlkbG1fZGVzdHJveV9sb2NrX2NhY2hlKCk7CisJZGxtX2Rlc3Ryb3lfbWFzdGVyX2NhY2hlcygpOwogCWRsbV9kZXN0cm95X21sZV9jYWNoZSgpOwogfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtbG9jay5jIGIvZnMvb2NmczIvZGxtL2RsbWxvY2suYwppbmRleCA1MjU3OGQ5Li44M2E5ZjI5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbG9jay5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMKQEAgLTUzLDYgKzUzLDggQEAKICNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9ETE0KICNpbmNsdWRlICJjbHVzdGVyL21hc2tsb2cuaCIKIAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkbG1fbG9ja19jYWNoZSA9IE5VTEw7CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGxtX2Nvb2tpZV9sb2NrKTsKIHN0YXRpYyB1NjQgZGxtX25leHRfY29va2llID0gMTsKIApAQCAtNjQsNiArNjYsMjIgQEAKIHN0YXRpYyB2b2lkIGRsbV9sb2NrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpOwogc3RhdGljIHZvaWQgZGxtX2xvY2tfZGV0YWNoX2xvY2tyZXMoc3RydWN0IGRsbV9sb2NrICpsb2NrKTsKIAoraW50IGRsbV9pbml0X2xvY2tfY2FjaGUodm9pZCkKK3sKKwlkbG1fbG9ja19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJvMmRsbV9sb2NrIiwKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBkbG1fbG9jayksCisJCQkJCSAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisJaWYgKGRsbV9sb2NrX2NhY2hlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCit2b2lkIGRsbV9kZXN0cm95X2xvY2tfY2FjaGUodm9pZCkKK3sKKwlpZiAoZGxtX2xvY2tfY2FjaGUpCisJCWttZW1fY2FjaGVfZGVzdHJveShkbG1fbG9ja19jYWNoZSk7Cit9CisKIC8qIFRlbGwgdXMgd2hldGhlciB3ZSBjYW4gZ3JhbnQgYSBuZXcgbG9jayByZXF1ZXN0LgogICogbG9ja2luZzoKICAqICAgY2FsbGVyIG5lZWRzOiAgcmVzLT5zcGlubG9jawpAQCAtMzUzLDcgKzM3MSw3IEBACiAJCW1sb2coMCwgImZyZWVpbmcga2VybmVsLWFsbG9jYXRlZCBsa3NiXG4iKTsKIAkJa2ZyZWUobG9jay0+bGtzYik7CiAJfQotCWtmcmVlKGxvY2spOworCWttZW1fY2FjaGVfZnJlZShkbG1fbG9ja19jYWNoZSwgbG9jayk7CiB9CiAKIC8qIGFzc29jaWF0ZSBhIGxvY2sgd2l0aCBpdCdzIGxvY2tyZXMsIGdldHRpbmcgYSByZWYgb24gdGhlIGxvY2tyZXMgKi8KQEAgLTQxMiw3ICs0MzAsNyBAQAogCXN0cnVjdCBkbG1fbG9jayAqbG9jazsKIAlpbnQga2VybmVsX2FsbG9jYXRlZCA9IDA7CiAKLQlsb2NrID0ga3phbGxvYyhzaXplb2YoKmxvY2spLCBHRlBfTk9GUyk7CisJbG9jayA9IChzdHJ1Y3QgZGxtX2xvY2sgKikga21lbV9jYWNoZV96YWxsb2MoZGxtX2xvY2tfY2FjaGUsIEdGUF9OT0ZTKTsKIAlpZiAoIWxvY2spCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKaW5kZXggYTU0ZDMzZC4uZWZjMDE1YyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwpAQCAtNDgsNDcgKzQ4LDExIEBACiAjaW5jbHVkZSAiZGxtYXBpLmgiCiAjaW5jbHVkZSAiZGxtY29tbW9uLmgiCiAjaW5jbHVkZSAiZGxtZG9tYWluLmgiCisjaW5jbHVkZSAiZGxtZGVidWcuaCIKIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIChNTF9ETE18TUxfRExNX01BU1RFUikKICNpbmNsdWRlICJjbHVzdGVyL21hc2tsb2cuaCIKIAotZW51bSBkbG1fbWxlX3R5cGUgewotCURMTV9NTEVfQkxPQ0ssCi0JRExNX01MRV9NQVNURVIsCi0JRExNX01MRV9NSUdSQVRJT04KLX07Ci0KLXN0cnVjdCBkbG1fbG9ja19uYW1lCi17Ci0JdTggbGVuOwotCXU4IG5hbWVbRExNX0xPQ0tJRF9OQU1FX01BWF07Ci19OwotCi1zdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5Ci17Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgaGJfZXZlbnRzOwotCXN0cnVjdCBkbG1fY3R4dCAqZGxtOwotCXNwaW5sb2NrX3Qgc3BpbmxvY2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7Ci0JYXRvbWljX3Qgd29rZW47Ci0Jc3RydWN0IGtyZWYgbWxlX3JlZnM7Ci0JaW50IGludXNlOwotCXVuc2lnbmVkIGxvbmcgbWF5YmVfbWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKLQl1bnNpZ25lZCBsb25nIHZvdGVfbWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKLQl1bnNpZ25lZCBsb25nIHJlc3BvbnNlX21hcFtCSVRTX1RPX0xPTkdTKE8yTk1fTUFYX05PREVTKV07Ci0JdW5zaWduZWQgbG9uZyBub2RlX21hcFtCSVRTX1RPX0xPTkdTKE8yTk1fTUFYX05PREVTKV07Ci0JdTggbWFzdGVyOwotCXU4IG5ld19tYXN0ZXI7Ci0JZW51bSBkbG1fbWxlX3R5cGUgdHlwZTsKLQlzdHJ1Y3QgbzJoYl9jYWxsYmFja19mdW5jIG1sZV9oYl91cDsKLQlzdHJ1Y3QgbzJoYl9jYWxsYmFja19mdW5jIG1sZV9oYl9kb3duOwotCXVuaW9uIHsKLQkJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7Ci0JCXN0cnVjdCBkbG1fbG9ja19uYW1lIG5hbWU7Ci0JfSB1OwotfTsKLQogc3RhdGljIHZvaWQgZGxtX21sZV9ub2RlX2Rvd24oc3RydWN0IGRsbV9jdHh0ICpkbG0sCiAJCQkgICAgICBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUsCiAJCQkgICAgICBzdHJ1Y3QgbzJubV9ub2RlICpub2RlLApAQCAtMTI4LDk4ICs5MiwxMCBAQAogCXJldHVybiAxOwogfQogCi0jZGVmaW5lIGRsbV9wcmludF9ub2RlbWFwKG0pICBfZGxtX3ByaW50X25vZGVtYXAobSwjbSkKLXN0YXRpYyB2b2lkIF9kbG1fcHJpbnRfbm9kZW1hcCh1bnNpZ25lZCBsb25nICptYXAsIGNvbnN0IGNoYXIgKm1hcG5hbWUpCi17Ci0JaW50IGk7Ci0JcHJpbnRrKCIlcz1bICIsIG1hcG5hbWUpOwotCWZvciAoaT0wOyBpPE8yTk1fTUFYX05PREVTOyBpKyspCi0JCWlmICh0ZXN0X2JpdChpLCBtYXApKQotCQkJcHJpbnRrKCIlZCAiLCBpKTsKLQlwcmludGsoIl0iKTsKLX0KLQotc3RhdGljIHZvaWQgZGxtX3ByaW50X29uZV9tbGUoc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlKQotewotCWludCByZWZzOwotCWNoYXIgKnR5cGU7Ci0JY2hhciBhdHRhY2hlZDsKLQl1OCBtYXN0ZXI7Ci0JdW5zaWduZWQgaW50IG5hbWVsZW47Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlzdHJ1Y3Qga3JlZiAqazsKLQl1bnNpZ25lZCBsb25nICptYXliZSA9IG1sZS0+bWF5YmVfbWFwLAotCQkgICAgICAqdm90ZSA9IG1sZS0+dm90ZV9tYXAsCi0JCSAgICAgICpyZXNwID0gbWxlLT5yZXNwb25zZV9tYXAsCi0JCSAgICAgICpub2RlID0gbWxlLT5ub2RlX21hcDsKLQotCWsgPSAmbWxlLT5tbGVfcmVmczsKLQlpZiAobWxlLT50eXBlID09IERMTV9NTEVfQkxPQ0spCi0JCXR5cGUgPSAiQkxLIjsKLQllbHNlIGlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9NQVNURVIpCi0JCXR5cGUgPSAiTUFTIjsKLQllbHNlCi0JCXR5cGUgPSAiTUlHIjsKLQlyZWZzID0gYXRvbWljX3JlYWQoJmstPnJlZmNvdW50KTsKLQltYXN0ZXIgPSBtbGUtPm1hc3RlcjsKLQlhdHRhY2hlZCA9IChsaXN0X2VtcHR5KCZtbGUtPmhiX2V2ZW50cykgPyAnTicgOiAnWScpOwotCi0JaWYgKG1sZS0+dHlwZSAhPSBETE1fTUxFX01BU1RFUikgewotCQluYW1lbGVuID0gbWxlLT51Lm5hbWUubGVuOwotCQluYW1lID0gbWxlLT51Lm5hbWUubmFtZTsKLQl9IGVsc2UgewotCQluYW1lbGVuID0gbWxlLT51LnJlcy0+bG9ja25hbWUubGVuOwotCQluYW1lID0gbWxlLT51LnJlcy0+bG9ja25hbWUubmFtZTsKLQl9Ci0KLQltbG9nKE1MX05PVElDRSwgIiUuKnM6ICUzcyByZWZzPSUzZCBtYXM9JTN1IG5ldz0lM3UgZXZ0PSVjIGludXNlPSVkICIsCi0JCSAgbmFtZWxlbiwgbmFtZSwgdHlwZSwgcmVmcywgbWFzdGVyLCBtbGUtPm5ld19tYXN0ZXIsIGF0dGFjaGVkLAotCQkgIG1sZS0+aW51c2UpOwotCWRsbV9wcmludF9ub2RlbWFwKG1heWJlKTsKLQlwcmludGsoIiwgIik7Ci0JZGxtX3ByaW50X25vZGVtYXAodm90ZSk7Ci0JcHJpbnRrKCIsICIpOwotCWRsbV9wcmludF9ub2RlbWFwKHJlc3ApOwotCXByaW50aygiLCAiKTsKLQlkbG1fcHJpbnRfbm9kZW1hcChub2RlKTsKLQlwcmludGsoIiwgIik7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi0jaWYgMAotLyogQ29kZSBoZXJlIGlzIGluY2x1ZGVkIGJ1dCBkZWZpbmVkIG91dCBhcyBpdCBhaWRzIGRlYnVnZ2luZyAqLwotCi1zdGF0aWMgdm9pZCBkbG1fZHVtcF9tbGVzKHN0cnVjdCBkbG1fY3R4dCAqZGxtKQotewotCXN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZTsKLQkKLQltbG9nKE1MX05PVElDRSwgImR1bXBpbmcgYWxsIG1sZXMgZm9yIGRvbWFpbiAlczpcbiIsIGRsbS0+bmFtZSk7Ci0Jc3Bpbl9sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1sZSwgJmRsbS0+bWFzdGVyX2xpc3QsIGxpc3QpCi0JCWRsbV9wcmludF9vbmVfbWxlKG1sZSk7Ci0Jc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOwotfQotCi1pbnQgZGxtX2R1bXBfYWxsX21sZXMoY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc3RydWN0IGRsbV9jdHh0ICpkbG07Ci0KLQlzcGluX2xvY2soJmRsbV9kb21haW5fbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkbG0sICZkbG1fZG9tYWlucywgbGlzdCkgewotCQltbG9nKE1MX05PVElDRSwgImZvdW5kIGRsbTogJXAsIG5hbWU9JXNcbiIsIGRsbSwgZGxtLT5uYW1lKTsKLQkJZGxtX2R1bXBfbWxlcyhkbG0pOwotCX0KLQlzcGluX3VubG9jaygmZGxtX2RvbWFpbl9sb2NrKTsKLQlyZXR1cm4gbGVuOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZGxtX2R1bXBfYWxsX21sZXMpOwotCi0jZW5kaWYgIC8qICAwICAqLwotCi0KK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGxtX2xvY2tyZXNfY2FjaGUgPSBOVUxMOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkbG1fbG9ja25hbWVfY2FjaGUgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkbG1fbWxlX2NhY2hlID0gTlVMTDsKIAotCiBzdGF0aWMgdm9pZCBkbG1fbWxlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpOwogc3RhdGljIHZvaWQgZGxtX2luaXRfbWxlKHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSwKIAkJCWVudW0gZGxtX21sZV90eXBlIHR5cGUsCkBAIC01MDcsNyArMzgzLDcgQEAKIAogaW50IGRsbV9pbml0X21sZV9jYWNoZSh2b2lkKQogewotCWRsbV9tbGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZGxtX21sZV9jYWNoZSIsCisJZGxtX21sZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJvMmRsbV9tbGUiLAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5KSwKIAkJCQkJICAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sCiAJCQkJCSAgTlVMTCk7CkBAIC01NjAsNiArNDM2LDM1IEBACiAgKiBMT0NLIFJFU09VUkNFIEZVTkNUSU9OUwogICovCiAKK2ludCBkbG1faW5pdF9tYXN0ZXJfY2FjaGVzKHZvaWQpCit7CisJZGxtX2xvY2tyZXNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibzJkbG1fbG9ja3JlcyIsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UpLAorCQkJCQkgICAgICAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghZGxtX2xvY2tyZXNfY2FjaGUpCisJCWdvdG8gYmFpbDsKKworCWRsbV9sb2NrbmFtZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJvMmRsbV9sb2NrbmFtZSIsCisJCQkJCSAgICAgICBETE1fTE9DS0lEX05BTUVfTUFYLCAwLAorCQkJCQkgICAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlpZiAoIWRsbV9sb2NrbmFtZV9jYWNoZSkKKwkJZ290byBiYWlsOworCisJcmV0dXJuIDA7CitiYWlsOgorCWRsbV9kZXN0cm95X21hc3Rlcl9jYWNoZXMoKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBkbG1fZGVzdHJveV9tYXN0ZXJfY2FjaGVzKHZvaWQpCit7CisJaWYgKGRsbV9sb2NrbmFtZV9jYWNoZSkKKwkJa21lbV9jYWNoZV9kZXN0cm95KGRsbV9sb2NrbmFtZV9jYWNoZSk7CisKKwlpZiAoZGxtX2xvY2tyZXNfY2FjaGUpCisJCWttZW1fY2FjaGVfZGVzdHJveShkbG1fbG9ja3Jlc19jYWNoZSk7Cit9CisKIHN0YXRpYyB2b2lkIGRsbV9zZXRfbG9ja3Jlc19vd25lcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKIAkJCQkgIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLAogCQkJCSAgdTggb3duZXIpCkBAIC02MTAsNiArNTE1LDE0IEBACiAJbWxvZygwLCAiZGVzdHJveWluZyBsb2NrcmVzICUuKnNcbiIsIHJlcy0+bG9ja25hbWUubGVuLAogCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lKTsKIAorCWlmICghbGlzdF9lbXB0eSgmcmVzLT50cmFja2luZykpCisJCWxpc3RfZGVsX2luaXQoJnJlcy0+dHJhY2tpbmcpOworCWVsc2UgeworCQltbG9nKE1MX0VSUk9SLCAiUmVzb3VyY2UgJS4qcyBub3Qgb24gdGhlIFRyYWNraW5nIGxpc3RcbiIsCisJCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7CisJCWRsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOworCX0KKwogCWlmICghaGxpc3RfdW5oYXNoZWQoJnJlcy0+aGFzaF9ub2RlKSB8fAogCSAgICAhbGlzdF9lbXB0eSgmcmVzLT5ncmFudGVkKSB8fAogCSAgICAhbGlzdF9lbXB0eSgmcmVzLT5jb252ZXJ0aW5nKSB8fApAQCAtNjQyLDkgKzU1NSw5IEBACiAJQlVHX09OKCFsaXN0X2VtcHR5KCZyZXMtPnJlY292ZXJpbmcpKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJnJlcy0+cHVyZ2UpKTsKIAotCWtmcmVlKHJlcy0+bG9ja25hbWUubmFtZSk7CisJa21lbV9jYWNoZV9mcmVlKGRsbV9sb2NrbmFtZV9jYWNoZSwgKHZvaWQgKilyZXMtPmxvY2tuYW1lLm5hbWUpOwogCi0Ja2ZyZWUocmVzKTsKKwlrbWVtX2NhY2hlX2ZyZWUoZGxtX2xvY2tyZXNfY2FjaGUsIHJlcyk7CiB9CiAKIHZvaWQgZGxtX2xvY2tyZXNfcHV0KHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzKQpAQCAtNjc3LDYgKzU5MCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnJlcy0+ZGlydHkpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPnJlY292ZXJpbmcpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPnB1cmdlKTsKKwlJTklUX0xJU1RfSEVBRCgmcmVzLT50cmFja2luZyk7CiAJYXRvbWljX3NldCgmcmVzLT5hc3RzX3Jlc2VydmVkLCAwKTsKIAlyZXMtPm1pZ3JhdGlvbl9wZW5kaW5nID0gMDsKIAlyZXMtPmluZmxpZ2h0X2xvY2tzID0gMDsKQEAgLTY5Miw2ICs2MDYsOCBAQAogCiAJcmVzLT5sYXN0X3VzZWQgPSAwOwogCisJbGlzdF9hZGRfdGFpbCgmcmVzLT50cmFja2luZywgJmRsbS0+dHJhY2tpbmdfbGlzdCk7CisKIAltZW1zZXQocmVzLT5sdmIsIDAsIERMTV9MVkJfTEVOKTsKIAltZW1zZXQocmVzLT5yZWZtYXAsIDAsIHNpemVvZihyZXMtPnJlZm1hcCkpOwogfQpAQCAtNzAwLDIwICs2MTYsMjggQEAKIAkJCQkgICBjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgIHVuc2lnbmVkIGludCBuYW1lbGVuKQogewotCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOworCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzID0gTlVMTDsKIAotCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSksIEdGUF9OT0ZTKTsKKwlyZXMgPSAoc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICopCisJCQkJa21lbV9jYWNoZV96YWxsb2MoZGxtX2xvY2tyZXNfY2FjaGUsIEdGUF9OT0ZTKTsKIAlpZiAoIXJlcykKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAKLQlyZXMtPmxvY2tuYW1lLm5hbWUgPSBrbWFsbG9jKG5hbWVsZW4sIEdGUF9OT0ZTKTsKLQlpZiAoIXJlcy0+bG9ja25hbWUubmFtZSkgewotCQlrZnJlZShyZXMpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJcmVzLT5sb2NrbmFtZS5uYW1lID0gKGNoYXIgKikKKwkJCQlrbWVtX2NhY2hlX3phbGxvYyhkbG1fbG9ja25hbWVfY2FjaGUsIEdGUF9OT0ZTKTsKKwlpZiAoIXJlcy0+bG9ja25hbWUubmFtZSkKKwkJZ290byBlcnJvcjsKIAogCWRsbV9pbml0X2xvY2tyZXMoZGxtLCByZXMsIG5hbWUsIG5hbWVsZW4pOwogCXJldHVybiByZXM7CisKK2Vycm9yOgorCWlmIChyZXMgJiYgcmVzLT5sb2NrbmFtZS5uYW1lKQorCQlrbWVtX2NhY2hlX2ZyZWUoZGxtX2xvY2tuYW1lX2NhY2hlLCAodm9pZCAqKXJlcy0+bG9ja25hbWUubmFtZSk7CisKKwlpZiAocmVzKQorCQlrbWVtX2NhY2hlX2ZyZWUoZGxtX2xvY2tyZXNfY2FjaGUsIHJlcyk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHZvaWQgX19kbG1fbG9ja3Jlc19ncmFiX2luZmxpZ2h0X3JlZihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKQEAgLTE2NjMsNyArMTU4NywxMiBAQAogCQlkbG1fcHV0X21sZSh0bXBtbGUpOwogCX0KIHNlbmRfcmVzcG9uc2U6Ci0KKwkvKgorCSAqIF9fZGxtX2xvb2t1cF9sb2NrcmVzKCkgZ3JhYmJlZCBhIHJlZmVyZW5jZSB0byB0aGlzIGxvY2tyZXMuCisJICogVGhlIHJlZmVyZW5jZSBpcyByZWxlYXNlZCBieSBkbG1fYXNzZXJ0X21hc3Rlcl93b3JrZXIoKSB1bmRlcgorCSAqIHRoZSBjYWxsIHRvIGRsbV9kaXNwYXRjaF9hc3NlcnRfbWFzdGVyKCkuICBJZgorCSAqIGRsbV9hc3NlcnRfbWFzdGVyX3dvcmtlcigpIGlzbid0IGNhbGxlZCwgd2UgZHJvcCBpdCBoZXJlLgorCSAqLwogCWlmIChkaXNwYXRjaF9hc3NlcnQpIHsKIAkJaWYgKHJlc3BvbnNlICE9IERMTV9NQVNURVJfUkVTUF9ZRVMpCiAJCQltbG9nKE1MX0VSUk9SLCAiaW52YWxpZCByZXNwb25zZSAlZFxuIiwgcmVzcG9uc2UpOwpAQCAtMTY3OCw3ICsxNjA3LDExIEBACiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nKE1MX0VSUk9SLCAiZmFpbGVkIHRvIGRpc3BhdGNoIGFzc2VydCBtYXN0ZXIgd29ya1xuIik7CiAJCQlyZXNwb25zZSA9IERMTV9NQVNURVJfUkVTUF9FUlJPUjsKKwkJCWRsbV9sb2NrcmVzX3B1dChyZXMpOwogCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJlcykKKwkJCWRsbV9sb2NrcmVzX3B1dChyZXMpOwogCX0KIAogCWRsbV9wdXQoZGxtKTsKQEAgLTE2OTUsOSArMTYyOCw5IEBACiAgKiBjYW4gcGVyaW9kaWNhbGx5IHJ1biBhbGwgbG9ja3Mgb3duZWQgYnkgdGhpcyBub2RlCiAgKiBhbmQgcmUtYXNzZXJ0IGFjcm9zcyB0aGUgY2x1c3Rlci4uLgogICovCi1pbnQgZGxtX2RvX2Fzc2VydF9tYXN0ZXIoc3RydWN0IGRsbV9jdHh0ICpkbG0sCi0JCQkgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCi0JCQkgdm9pZCAqbm9kZW1hcCwgdTMyIGZsYWdzKQorc3RhdGljIGludCBkbG1fZG9fYXNzZXJ0X21hc3RlcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywKKwkJCQl2b2lkICpub2RlbWFwLCB1MzIgZmxhZ3MpCiB7CiAJc3RydWN0IGRsbV9hc3NlcnRfbWFzdGVyIGFzc2VydDsKIAlpbnQgdG8sIHRtcHJldDsKQEAgLTIzNDgsNyArMjI4MSw3IEBACiAJCQltbG9nKE1MX0VSUk9SLCAiJXM6JS4qczogbm9kZSAldSB0cnlpbmcgdG8gZHJvcCByZWYgIgogCQkgICAgIAkiYnV0IGl0IGlzIGFscmVhZHkgZHJvcHBlZCFcbiIsIGRsbS0+bmFtZSwKIAkJICAgICAJcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSwgbm9kZSk7Ci0JCQlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOworCQkJZGxtX3ByaW50X29uZV9sb2NrX3Jlc291cmNlKHJlcyk7CiAJCX0KIAkJcmV0ID0gMDsKIAkJZ290byBkb25lOwpAQCAtMjQwOCw3ICsyMzQxLDcgQEAKIAkJbWxvZyhNTF9FUlJPUiwgIiVzOiUuKnM6IG5vZGUgJXUgdHJ5aW5nIHRvIGRyb3AgcmVmICIKIAkJICAgICAiYnV0IGl0IGlzIGFscmVhZHkgZHJvcHBlZCFcbiIsIGRsbS0+bmFtZSwKIAkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCBub2RlKTsKLQkJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKKwkJZGxtX3ByaW50X29uZV9sb2NrX3Jlc291cmNlKHJlcyk7CiAJfQogCiAJZGxtX2xvY2tyZXNfcHV0KHJlcyk7CkBAIC0yOTMzLDYgKzI4NjYsOSBAQAogCQkJCWRsbV9sb2NrcmVzX2NsZWFyX3JlZm1hcF9iaXQobG9jay0+bWwubm9kZSwgcmVzKTsKIAkJCQlsaXN0X2RlbF9pbml0KCZsb2NrLT5saXN0KTsKIAkJCQlkbG1fbG9ja19wdXQobG9jayk7CisJCQkJLyogSW4gYSBub3JtYWwgdW5sb2NrLCB3ZSB3b3VsZCBoYXZlIGFkZGVkIGEKKwkJCQkgKiBETE1fVU5MT0NLX0ZSRUVfTE9DSyBhY3Rpb24uIEZvcmNlIGl0LiAqLworCQkJCWRsbV9sb2NrX3B1dChsb2NrKTsKIAkJCX0KIAkJfQogCQlxdWV1ZSsrOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCA5MWY3NDdiLi5iY2I5MjYwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtNTE5LDkgKzUxOSw5IEBACiAJcmV0dXJuIDA7CiAKIG1hc3Rlcl9oZXJlOgotCW1sb2coMCwgIiglZCkgbWFzdGVyaW5nIHJlY292ZXJ5IG9mICVzOiV1IGhlcmUodGhpcz0ldSkhXG4iLAotCSAgICAgdGFza19waWRfbnIoZGxtLT5kbG1fcmVjb190aHJlYWRfdGFzayksCi0JICAgICBkbG0tPm5hbWUsIGRsbS0+cmVjby5kZWFkX25vZGUsIGRsbS0+bm9kZV9udW0pOworCW1sb2coTUxfTk9USUNFLCAiKCVkKSBOb2RlICV1IGlzIHRoZSBSZWNvdmVyeSBNYXN0ZXIgZm9yIHRoZSBEZWFkIE5vZGUgIgorCSAgICAgIiV1IGZvciBEb21haW4gJXNcbiIsIHRhc2tfcGlkX25yKGRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2spLAorCSAgICAgZGxtLT5ub2RlX251bSwgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5uYW1lKTsKIAogCXN0YXR1cyA9IGRsbV9yZW1hc3Rlcl9sb2NrcyhkbG0sIGRsbS0+cmVjby5kZWFkX25vZGUpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xMTkxLDcgKzExOTEsNyBAQAogCQkJICAgIChtbC0+dHlwZSA9PSBMS01fRVhNT0RFIHx8CiAJCQkgICAgIG1lbWNtcChtcmVzLT5sdmIsIGxvY2stPmxrc2ItPmx2YiwgRExNX0xWQl9MRU4pKSkgewogCQkJCW1sb2coTUxfRVJST1IsICJtaXNtYXRjaGVkIGx2YnMhXG4iKTsKLQkJCQlfX2RsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShsb2NrLT5sb2NrcmVzKTsKKwkJCQlkbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UobG9jay0+bG9ja3Jlcyk7CiAJCQkJQlVHKCk7CiAJCQl9CiAJCQltZW1jcHkobXJlcy0+bHZiLCBsb2NrLT5sa3NiLT5sdmIsIERMTV9MVkJfTEVOKTsKQEAgLTEzMjcsNiArMTMyNyw3IEBACiAJCShzdHJ1Y3QgZGxtX21pZ3JhdGFibGVfbG9ja3JlcyAqKW1zZy0+YnVmOwogCWludCByZXQgPSAwOwogCXU4IHJlYWxfbWFzdGVyOworCXU4IGV4dHJhX3JlZnMgPSAwOwogCWNoYXIgKmJ1ZiA9IE5VTEw7CiAJc3RydWN0IGRsbV93b3JrX2l0ZW0gKml0ZW0gPSBOVUxMOwogCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzID0gTlVMTDsKQEAgLTE0MDQsMTYgKzE0MDUsMjggQEAKIAkJX19kbG1faW5zZXJ0X2xvY2tyZXMoZGxtLCByZXMpOwogCQlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CiAKKwkJLyogQWRkIGFuIGV4dHJhIHJlZiBmb3IgdGhpcyBsb2NrLWxlc3MgbG9ja3JlcyBsZXN0IHRoZQorCQkgKiBkbG1fdGhyZWFkIHB1cmdlcyBpdCBiZWZvcmUgd2UgZ2V0IHRoZSBjaGFuY2UgdG8gYWRkCisJCSAqIGxvY2tzIHRvIGl0ICovCisJCWRsbV9sb2NrcmVzX2dldChyZXMpOworCisJCS8qIFRoZXJlIGFyZSB0aHJlZSByZWZzIHRoYXQgbmVlZCB0byBiZSBwdXQuCisJCSAqIDEuIFRha2VuIGFib3ZlLgorCQkgKiAyLiBrcmVmX2luaXQgaW4gZGxtX25ld19sb2NrcmVzKCktPmRsbV9pbml0X2xvY2tyZXMoKS4KKwkJICogMy4gZGxtX2xvb2t1cF9sb2NrcmVzKCkKKwkJICogVGhlIGZpcnN0IG9uZSBpcyBoYW5kbGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4gVGhlCisJCSAqIG90aGVyIHR3byBhcmUgaGFuZGxlZCBpbiB0aGUgd29ya2VyIHRocmVhZCBhZnRlciBsb2NrcyBoYXZlCisJCSAqIGJlZW4gYXR0YWNoZWQuIFllcywgd2UgZG9uJ3Qgd2FpdCBmb3IgcHVyZ2UgdGltZSB0byBtYXRjaAorCQkgKiBrcmVmX2luaXQuIFRoZSBsb2NrcmVzIHdpbGwgc3RpbGwgaGF2ZSBhdGxlYXN0IG9uZSByZWYKKwkJICogYWRkZWQgYmVjYXVzZSBpdCBpcyBpbiB0aGUgaGFzaCBfX2RsbV9pbnNlcnRfbG9ja3JlcygpICovCisJCWV4dHJhX3JlZnMrKzsKKwogCQkvKiBub3cgdGhhdCB0aGUgbmV3IGxvY2tyZXMgaXMgaW5zZXJ0ZWQsCiAJCSAqIG1ha2UgaXQgdXNhYmxlIGJ5IG90aGVyIHByb2Nlc3NlcyAqLwogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCQlyZXMtPnN0YXRlICY9IH5ETE1fTE9DS19SRVNfSU5fUFJPR1JFU1M7CiAJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAkJd2FrZV91cCgmcmVzLT53cSk7Ci0KLQkJLyogYWRkIGFuIGV4dHJhIHJlZiBmb3IganVzdC1hbGxvY2F0ZWQgbG9ja3JlcyAKLQkJICogb3RoZXJ3aXNlIHRoZSBsb2NrcmVzIHdpbGwgYmUgcHVyZ2VkIGltbWVkaWF0ZWx5ICovCi0JCWRsbV9sb2NrcmVzX2dldChyZXMpOwogCX0KIAogCS8qIGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbGxvY2F0ZWQgZXZlcnl0aGluZyB3ZSBuZWVkLApAQCAtMTQ0MywxMiArMTQ1NiwxNyBAQAogCWRsbV9pbml0X3dvcmtfaXRlbShkbG0sIGl0ZW0sIGRsbV9taWdfbG9ja3Jlc193b3JrZXIsIGJ1Zik7CiAJaXRlbS0+dS5tbC5sb2NrcmVzID0gcmVzOyAvKiBhbHJlYWR5IGhhdmUgYSByZWYgKi8KIAlpdGVtLT51Lm1sLnJlYWxfbWFzdGVyID0gcmVhbF9tYXN0ZXI7CisJaXRlbS0+dS5tbC5leHRyYV9yZWYgPSBleHRyYV9yZWZzOwogCXNwaW5fbG9jaygmZGxtLT53b3JrX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJml0ZW0tPmxpc3QsICZkbG0tPndvcmtfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmRsbS0+d29ya19sb2NrKTsKIAlxdWV1ZV93b3JrKGRsbS0+ZGxtX3dvcmtlciwgJmRsbS0+ZGlzcGF0Y2hlZF93b3JrKTsKIAogbGVhdmU6CisJLyogT25lIGV4dHJhIHJlZiB0YWtlbiBuZWVkcyB0byBiZSBwdXQgaGVyZSAqLworCWlmIChleHRyYV9yZWZzKQorCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKKwogCWRsbV9wdXQoZGxtKTsKIAlpZiAocmV0IDwgMCkgewogCQlpZiAoYnVmKQpAQCAtMTQ2NCwxNyArMTQ4MiwxOSBAQAogCiBzdGF0aWMgdm9pZCBkbG1fbWlnX2xvY2tyZXNfd29ya2VyKHN0cnVjdCBkbG1fd29ya19pdGVtICppdGVtLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gZGF0YTsKKwlzdHJ1Y3QgZGxtX2N0eHQgKmRsbTsKIAlzdHJ1Y3QgZGxtX21pZ3JhdGFibGVfbG9ja3JlcyAqbXJlczsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKIAl1OCByZWFsX21hc3RlcjsKKwl1OCBleHRyYV9yZWY7CiAKIAlkbG0gPSBpdGVtLT5kbG07CiAJbXJlcyA9IChzdHJ1Y3QgZGxtX21pZ3JhdGFibGVfbG9ja3JlcyAqKWRhdGE7CiAKIAlyZXMgPSBpdGVtLT51Lm1sLmxvY2tyZXM7CiAJcmVhbF9tYXN0ZXIgPSBpdGVtLT51Lm1sLnJlYWxfbWFzdGVyOworCWV4dHJhX3JlZiA9IGl0ZW0tPnUubWwuZXh0cmFfcmVmOwogCiAJaWYgKHJlYWxfbWFzdGVyID09IERMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOKSB7CiAJCS8qIHRoaXMgY2FzZSBpcyBzdXBlci1yYXJlLiBvbmx5IG9jY3VycyBpZgpAQCAtMTUxNyw2ICsxNTM3LDEyIEBACiAJfQogCiBsZWF2ZToKKwkvKiBTZWUgY29tbWVudCBpbiBkbG1fbWlnX2xvY2tyZXNfaGFuZGxlcigpICovCisJaWYgKHJlcykgeworCQlpZiAoZXh0cmFfcmVmKQorCQkJZGxtX2xvY2tyZXNfcHV0KHJlcyk7CisJCWRsbV9sb2NrcmVzX3B1dChyZXMpOworCX0KIAlrZnJlZShkYXRhKTsKIAltbG9nX2V4aXQocmV0KTsKIH0KQEAgLTE2NDQsNyArMTY3MCw4IEBACiAJCQkJLyogcmV0cnkhPyAqLwogCQkJCUJVRygpOwogCQkJfQotCQl9CisJCX0gZWxzZSAvKiBwdXQuLiBpbmNhc2Ugd2UgYXJlIG5vdCB0aGUgbWFzdGVyICovCisJCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKIAkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCX0KIAlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CkBAIC0xOTIxLDYgKzE5NDgsNyBAQAogCQkgICAgICJSZWNvdmVyaW5nIHJlcyAlczolLipzLCBpcyBhbHJlYWR5IG9uIHJlY292ZXJ5IGxpc3QhXG4iLAogCQkgICAgIGRsbS0+bmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4sIHJlcy0+bG9ja25hbWUubmFtZSk7CiAJCWxpc3RfZGVsX2luaXQoJnJlcy0+cmVjb3ZlcmluZyk7CisJCWRsbV9sb2NrcmVzX3B1dChyZXMpOwogCX0KIAkvKiBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2Ugd2hpbGUgb24gdGhlIHJlY292ZXJ5IGxpc3QgKi8KIAlkbG1fbG9ja3Jlc19nZXQocmVzKTsKQEAgLTIxMzAsMTEgKzIxNTgsMTYgQEAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOwogCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CiAKKwkvKiBXZSBkbyB0d28gZGxtX2xvY2tfcHV0KCkuIE9uZSBmb3IgcmVtb3ZpbmcgZnJvbSBsaXN0IGFuZCB0aGUgb3RoZXIgaXMKKwkgKiB0byBmb3JjZSB0aGUgRExNX1VOTE9DS19GUkVFX0xPQ0sgYWN0aW9uIHNvIGFzIHRvIGZyZWUgdGhlIGxvY2tzICovCisKIAkvKiBUT0RPOiBjaGVjayBwZW5kaW5nX2FzdHMsIHBlbmRpbmdfYmFzdHMgaGVyZSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsb2NrLCBuZXh0LCAmcmVzLT5ncmFudGVkLCBsaXN0KSB7CiAJCWlmIChsb2NrLT5tbC5ub2RlID09IGRlYWRfbm9kZSkgewogCQkJbGlzdF9kZWxfaW5pdCgmbG9jay0+bGlzdCk7CiAJCQlkbG1fbG9ja19wdXQobG9jayk7CisJCQkvKiBDYW4ndCBzY2hlZHVsZSBETE1fVU5MT0NLX0ZSRUVfTE9DSyAtIGRvIG1hbnVhbGx5ICovCisJCQlkbG1fbG9ja19wdXQobG9jayk7CiAJCQlmcmVlZCsrOwogCQl9CiAJfQpAQCAtMjE0Miw2ICsyMTc1LDggQEAKIAkJaWYgKGxvY2stPm1sLm5vZGUgPT0gZGVhZF9ub2RlKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZsb2NrLT5saXN0KTsKIAkJCWRsbV9sb2NrX3B1dChsb2NrKTsKKwkJCS8qIENhbid0IHNjaGVkdWxlIERMTV9VTkxPQ0tfRlJFRV9MT0NLIC0gZG8gbWFudWFsbHkgKi8KKwkJCWRsbV9sb2NrX3B1dChsb2NrKTsKIAkJCWZyZWVkKys7CiAJCX0KIAl9CkBAIC0yMTQ5LDYgKzIxODQsOCBAQAogCQlpZiAobG9jay0+bWwubm9kZSA9PSBkZWFkX25vZGUpIHsKIAkJCWxpc3RfZGVsX2luaXQoJmxvY2stPmxpc3QpOwogCQkJZGxtX2xvY2tfcHV0KGxvY2spOworCQkJLyogQ2FuJ3Qgc2NoZWR1bGUgRExNX1VOTE9DS19GUkVFX0xPQ0sgLSBkbyBtYW51YWxseSAqLworCQkJZGxtX2xvY2tfcHV0KGxvY2spOwogCQkJZnJlZWQrKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYyBiL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYwppbmRleCBjZWJkMDg5Li40MDYwYmIzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCkBAIC0xNzYsMTIgKzE3NiwxNCBAQAogCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lLCBtYXN0ZXIpOwogCiAJaWYgKCFtYXN0ZXIpIHsKKwkJLyogZHJvcCBzcGlubG9jay4uLiAgcmV0YWtlIGJlbG93ICovCisJCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKKwogCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCQkvKiBUaGlzIGVuc3VyZXMgdGhhdCBjbGVhciByZWZtYXAgaXMgc2VudCBhZnRlciB0aGUgc2V0ICovCiAJCV9fZGxtX3dhaXRfb25fbG9ja3Jlc19mbGFncyhyZXMsIERMTV9MT0NLX1JFU19TRVRSRUZfSU5QUk9HKTsKIAkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwotCQkvKiBkcm9wIHNwaW5sb2NrIHRvIGRvIG1lc3NhZ2luZywgcmV0YWtlIGJlbG93ICovCi0JCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKKwogCQkvKiBjbGVhciBvdXIgYml0IGZyb20gdGhlIG1hc3RlcidzIHJlZm1hcCwgaWdub3JlIGVycm9ycyAqLwogCQlyZXQgPSBkbG1fZHJvcF9sb2NrcmVzX3JlZihkbG0sIHJlcyk7CiAJCWlmIChyZXQgPCAwKSB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggMzUxMTMwYy4uMzk0ZDI1YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtMjcsMTggKzI3LDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAotI2luY2x1ZGUgPGNsdXN0ZXIvaGVhcnRiZWF0Lmg+Ci0jaW5jbHVkZSA8Y2x1c3Rlci9ub2RlbWFuYWdlci5oPgotI2luY2x1ZGUgPGNsdXN0ZXIvdGNwLmg+Ci0KLSNpbmNsdWRlIDxkbG0vZGxtYXBpLmg+Ci0KICNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9ETE1fR0xVRQogI2luY2x1ZGUgPGNsdXN0ZXIvbWFza2xvZy5oPgogCkBAIC01Myw2ICs0Niw3IEBACiAjaW5jbHVkZSAiaGVhcnRiZWF0LmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJqb3VybmFsLmgiCisjaW5jbHVkZSAic3RhY2tnbHVlLmgiCiAjaW5jbHVkZSAic2xvdF9tYXAuaCIKICNpbmNsdWRlICJzdXBlci5oIgogI2luY2x1ZGUgInVwdG9kYXRlLmgiCkBAIC0xMTMsNyArMTA3LDggQEAKIAkJCQkgICAgIHVuc2lnbmVkIGludCBsaW5lLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewotCXN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqbHZiID0gKHN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqKSBsb2NrcmVzLT5sX2xrc2IubHZiOworCXN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqbHZiID0KKwkJKHN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqKW9jZnMyX2RsbV9sdmIoJmxvY2tyZXMtPmxfbGtzYik7CiAKIAltbG9nKGxldmVsLCAiTFZCIGluZm9ybWF0aW9uIGZvciAlcyAoY2FsbGVkIGZyb20gJXM6JXUpOlxuIiwKIAkgICAgIGxvY2tyZXMtPmxfbmFtZSwgZnVuY3Rpb24sIGxpbmUpOwpAQCAtMjU5LDMxICsyNTQsNiBAQAogCS5mbGFncwkJPSAwLAogfTsKIAotLyoKLSAqIFRoaXMgaXMgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBwcm90b2NvbCB2ZXJzaW9uLgotICoKLSAqIFdoZW5ldmVyIHRoZSBmaWxlc3lzdGVtIGRvZXMgbmV3IHRoaW5ncyB3aXRoIGxvY2tzIChhZGRzIG9yIHJlbW92ZXMgYQotICogbG9jaywgb3JkZXJzIHRoZW0gZGlmZmVyZW50bHksIGRvZXMgZGlmZmVyZW50IHRoaW5ncyB1bmRlcm5lYXRoIGEgbG9jayksCi0gKiB0aGUgdmVyc2lvbiBtdXN0IGJlIGNoYW5nZWQuICBUaGUgcHJvdG9jb2wgaXMgbmVnb3RpYXRlZCB3aGVuIGpvaW5pbmcKLSAqIHRoZSBkbG0gZG9tYWluLiAgQSBub2RlIG1heSBqb2luIHRoZSBkb21haW4gaWYgaXRzIG1ham9yIHZlcnNpb24gaXMKLSAqIGlkZW50aWNhbCB0byBhbGwgb3RoZXIgbm9kZXMgYW5kIGl0cyBtaW5vciB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbgotICogb3IgZXF1YWwgdG8gYWxsIG90aGVyIG5vZGVzLiAgV2hlbiBpdHMgbWlub3IgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4KLSAqIHRoZSBvdGhlciBub2RlcywgaXQgd2lsbCBydW4gYXQgdGhlIG1pbm9yIHZlcnNpb24gc3BlY2lmaWVkIGJ5IHRoZQotICogb3RoZXIgbm9kZXMuCi0gKgotICogSWYgYSBsb2NraW5nIGNoYW5nZSBpcyBtYWRlIHRoYXQgd2lsbCBub3QgYmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyCi0gKiB2ZXJzaW9ucywgdGhlIG1ham9yIG51bWJlciBtdXN0IGJlIGluY3JlYXNlZCBhbmQgdGhlIG1pbm9yIHZlcnNpb24gc2V0Ci0gKiB0byB6ZXJvLiAgSWYgYSBjaGFuZ2UgbWVyZWx5IGFkZHMgYSBiZWhhdmlvciB0aGF0IGNhbiBiZSBkaXNhYmxlZCB3aGVuCi0gKiBzcGVha2luZyB0byBvbGRlciB2ZXJzaW9ucywgdGhlIG1pbm9yIHZlcnNpb24gbXVzdCBiZSBpbmNyZWFzZWQuICBJZiBhCi0gKiBjaGFuZ2UgYWRkcyBhIGZ1bGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlIGNoYW5nZSAoZWcsIExWQiBjaGFuZ2VzIHRoYXQKLSAqIGFyZSBqdXN0IGlnbm9yZWQgYnkgb2xkZXIgdmVyc2lvbnMpLCB0aGUgdmVyc2lvbiBkb2VzIG5vdCBuZWVkIHRvIGJlCi0gKiB1cGRhdGVkLgotICovCi1jb25zdCBzdHJ1Y3QgZGxtX3Byb3RvY29sX3ZlcnNpb24gb2NmczJfbG9ja2luZ19wcm90b2NvbCA9IHsKLQkucHZfbWFqb3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01BSk9SLAotCS5wdl9taW5vciA9IE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUlOT1IsCi19OwotCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9pc19pbm9kZV9sb2NrKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKIHsKIAlyZXR1cm4gbG9ja3Jlcy0+bF90eXBlID09IE9DRlMyX0xPQ0tfVFlQRV9NRVRBIHx8CkBAIC0zMTYsNyArMjg2LDcgQEAKIHN0YXRpYyBpbnQgb2NmczJfbG9ja19jcmVhdGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKIAkJCSAgICAgaW50IGxldmVsLAotCQkJICAgICBpbnQgZGxtX2ZsYWdzKTsKKwkJCSAgICAgdTMyIGRsbV9mbGFncyk7CiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9tYXlfY29udGludWVfb25fYmxvY2tlZF9sb2NrKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKIAkJCQkJCSAgICAgaW50IHdhbnRlZCk7CiBzdGF0aWMgdm9pZCBvY2ZzMl9jbHVzdGVyX3VubG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKQEAgLTMzMCwxMCArMzAwLDkgQEAKIAkJCQkJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKIAkJCQkJCWludCBjb252ZXJ0KTsKLSNkZWZpbmUgb2NmczJfbG9nX2RsbV9lcnJvcihfZnVuYywgX3N0YXQsIF9sb2NrcmVzKSBkbyB7CVwKLQltbG9nKE1MX0VSUk9SLCAiRGxtIGVycm9yIFwiJXNcIiB3aGlsZSBjYWxsaW5nICVzIG9uICIJXAotCQkicmVzb3VyY2UgJXM6ICVzXG4iLCBkbG1fZXJybmFtZShfc3RhdCksIF9mdW5jLAlcCi0JCV9sb2NrcmVzLT5sX25hbWUsIGRsbV9lcnJtc2coX3N0YXQpKTsJCVwKKyNkZWZpbmUgb2NmczJfbG9nX2RsbV9lcnJvcihfZnVuYywgX2VyciwgX2xvY2tyZXMpIGRvIHsJCQlcCisJbWxvZyhNTF9FUlJPUiwgIkRMTSBlcnJvciAlZCB3aGlsZSBjYWxsaW5nICVzIG9uIHJlc291cmNlICVzXG4iLCBcCisJICAgICBfZXJyLCBfZnVuYywgX2xvY2tyZXMtPmxfbmFtZSk7CQkJCVwKIH0gd2hpbGUgKDApCiBzdGF0aWMgaW50IG9jZnMyX2Rvd25jb252ZXJ0X3RocmVhZCh2b2lkICphcmcpOwogc3RhdGljIHZvaWQgb2NmczJfZG93bmNvbnZlcnRfb25fdW5sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLApAQCAtMzQyLDEyICszMTEsMTMgQEAKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKTsKIHN0YXRpYyB2b2lkIG9jZnMyX2Ryb3Bfb3NiX2xvY2tzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2hpZ2hlc3RfY29tcGF0X2xvY2tfbGV2ZWwoaW50IGxldmVsKTsKLXN0YXRpYyB2b2lkIG9jZnMyX3ByZXBhcmVfZG93bmNvbnZlcnQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJCSAgICAgIGludCBuZXdfbGV2ZWwpOworc3RhdGljIHVuc2lnbmVkIGludCBvY2ZzMl9wcmVwYXJlX2Rvd25jb252ZXJ0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkJICAgICAgaW50IG5ld19sZXZlbCk7CiBzdGF0aWMgaW50IG9jZnMyX2Rvd25jb252ZXJ0X2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCiAJCQkJICBpbnQgbmV3X2xldmVsLAotCQkJCSAgaW50IGx2Yik7CisJCQkJICBpbnQgbHZiLAorCQkJCSAgdW5zaWduZWQgaW50IGdlbmVyYXRpb24pOwogc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX2NhbmNlbF9jb252ZXJ0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgICAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKTsKIHN0YXRpYyBpbnQgb2NmczJfY2FuY2VsX2NvbnZlcnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCkBAIC00MDYsOSArMzc2LDkgQEAKIAlyZXMtPmxfb3BzICAgICAgICAgICA9IG9wczsKIAlyZXMtPmxfcHJpdiAgICAgICAgICA9IHByaXY7CiAKLQlyZXMtPmxfbGV2ZWwgICAgICAgICA9IExLTV9JVk1PREU7Ci0JcmVzLT5sX3JlcXVlc3RlZCAgICAgPSBMS01fSVZNT0RFOwotCXJlcy0+bF9ibG9ja2luZyAgICAgID0gTEtNX0lWTU9ERTsKKwlyZXMtPmxfbGV2ZWwgICAgICAgICA9IERMTV9MT0NLX0lWOworCXJlcy0+bF9yZXF1ZXN0ZWQgICAgID0gRExNX0xPQ0tfSVY7CisJcmVzLT5sX2Jsb2NraW5nICAgICAgPSBETE1fTE9DS19JVjsKIAlyZXMtPmxfYWN0aW9uICAgICAgICA9IE9DRlMyX0FTVF9JTlZBTElEOwogCXJlcy0+bF91bmxvY2tfYWN0aW9uID0gT0NGUzJfVU5MT0NLX0lOVkFMSUQ7CiAKQEAgLTYwNCwxMCArNTc0LDEwIEBACiAJQlVHX09OKCFsb2NrcmVzKTsKIAogCXN3aXRjaChsZXZlbCkgewotCWNhc2UgTEtNX0VYTU9ERToKKwljYXNlIERMTV9MT0NLX0VYOgogCQlsb2NrcmVzLT5sX2V4X2hvbGRlcnMrKzsKIAkJYnJlYWs7Ci0JY2FzZSBMS01fUFJNT0RFOgorCWNhc2UgRExNX0xPQ0tfUFI6CiAJCWxvY2tyZXMtPmxfcm9faG9sZGVycysrOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNjI1LDExICs1OTUsMTEgQEAKIAlCVUdfT04oIWxvY2tyZXMpOwogCiAJc3dpdGNoKGxldmVsKSB7Ci0JY2FzZSBMS01fRVhNT0RFOgorCWNhc2UgRExNX0xPQ0tfRVg6CiAJCUJVR19PTighbG9ja3Jlcy0+bF9leF9ob2xkZXJzKTsKIAkJbG9ja3Jlcy0+bF9leF9ob2xkZXJzLS07CiAJCWJyZWFrOwotCWNhc2UgTEtNX1BSTU9ERToKKwljYXNlIERMTV9MT0NLX1BSOgogCQlCVUdfT04oIWxvY2tyZXMtPmxfcm9faG9sZGVycyk7CiAJCWxvY2tyZXMtPmxfcm9faG9sZGVycy0tOwogCQlicmVhazsKQEAgLTY0NCwxMiArNjE0LDEyIEBACiAgKiBsb2NrIHR5cGVzIGFyZSBhZGRlZC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2hpZ2hlc3RfY29tcGF0X2xvY2tfbGV2ZWwoaW50IGxldmVsKQogewotCWludCBuZXdfbGV2ZWwgPSBMS01fRVhNT0RFOworCWludCBuZXdfbGV2ZWwgPSBETE1fTE9DS19FWDsKIAotCWlmIChsZXZlbCA9PSBMS01fRVhNT0RFKQotCQluZXdfbGV2ZWwgPSBMS01fTkxNT0RFOwotCWVsc2UgaWYgKGxldmVsID09IExLTV9QUk1PREUpCi0JCW5ld19sZXZlbCA9IExLTV9QUk1PREU7CisJaWYgKGxldmVsID09IERMTV9MT0NLX0VYKQorCQluZXdfbGV2ZWwgPSBETE1fTE9DS19OTDsKKwllbHNlIGlmIChsZXZlbCA9PSBETE1fTE9DS19QUikKKwkJbmV3X2xldmVsID0gRExNX0xPQ0tfUFI7CiAJcmV0dXJuIG5ld19sZXZlbDsKIH0KIApAQCAtNjg4LDEyICs2NTgsMTIgQEAKIAlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19CVVNZKSk7CiAJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQVRUQUNIRUQpKTsKIAlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19CTE9DS0VEKSk7Ci0JQlVHX09OKGxvY2tyZXMtPmxfYmxvY2tpbmcgPD0gTEtNX05MTU9ERSk7CisJQlVHX09OKGxvY2tyZXMtPmxfYmxvY2tpbmcgPD0gRExNX0xPQ0tfTkwpOwogCiAJbG9ja3Jlcy0+bF9sZXZlbCA9IGxvY2tyZXMtPmxfcmVxdWVzdGVkOwogCWlmIChsb2NrcmVzLT5sX2xldmVsIDw9CiAJICAgIG9jZnMyX2hpZ2hlc3RfY29tcGF0X2xvY2tfbGV2ZWwobG9ja3Jlcy0+bF9ibG9ja2luZykpIHsKLQkJbG9ja3Jlcy0+bF9ibG9ja2luZyA9IExLTV9OTE1PREU7CisJCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBETE1fTE9DS19OTDsKIAkJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JMT0NLRUQpOwogCX0KIAlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7CkBAIC03MTIsNyArNjgyLDcgQEAKIAkgKiBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IHVwIHRvIGRhdGEuIENvbnZlcnQgZnJvbSBOTCB0bwogCSAqICphbnl0aGluZyogaG93ZXZlciBzaG91bGQgbWFyayBvdXJzZWx2ZXMgYXMgbmVlZGluZyBhbgogCSAqIHVwZGF0ZSAqLwotCWlmIChsb2NrcmVzLT5sX2xldmVsID09IExLTV9OTE1PREUgJiYKKwlpZiAobG9ja3Jlcy0+bF9sZXZlbCA9PSBETE1fTE9DS19OTCAmJgogCSAgICBsb2NrcmVzLT5sX29wcy0+ZmxhZ3MgJiBMT0NLX1RZUEVfUkVRVUlSRVNfUkVGUkVTSCkKIAkJbG9ja3Jlc19vcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX05FRURTX1JFRlJFU0gpOwogCkBAIC03MjksNyArNjk5LDcgQEAKIAlCVUdfT04oKCEobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQlVTWSkpKTsKIAlCVUdfT04obG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQVRUQUNIRUQpOwogCi0JaWYgKGxvY2tyZXMtPmxfcmVxdWVzdGVkID4gTEtNX05MTU9ERSAmJgorCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA+IERMTV9MT0NLX05MICYmCiAJICAgICEobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfTE9DQUwpICYmCiAJICAgIGxvY2tyZXMtPmxfb3BzLT5mbGFncyAmIExPQ0tfVFlQRV9SRVFVSVJFU19SRUZSRVNIKQogCQlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfTkVFRFNfUkVGUkVTSCk7CkBAIC03NjcsNiArNzM3LDExMyBAQAogCXJldHVybiBuZWVkc19kb3duY29udmVydDsKIH0KIAorLyoKKyAqIE9DRlMyX0xPQ0tfUEVORElORyBhbmQgbF9wZW5kaW5nX2dlbi4KKyAqCisgKiBXaHkgZG9lcyBPQ0ZTMl9MT0NLX1BFTkRJTkcgZXhpc3Q/ICBUbyBjbG9zZSBhIHJhY2UgYmV0d2VlbiBzZXR0aW5nCisgKiBPQ0ZTMl9MT0NLX0JVU1kgYW5kIGNhbGxpbmcgb2NmczJfZGxtX2xvY2soKS4gIFNlZSBvY2ZzMl91bmJsb2NrX2xvY2soKQorICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmFjZS4KKyAqCisgKiBPQ0ZTMl9MT0NLX1BFTkRJTkcgY2xvc2VzIHRoZSByYWNlIHF1aXRlIG5pY2VseS4gIEhvd2V2ZXIsIGl0IGludHJvZHVjZXMKKyAqIGEgcmFjZSBvbiBpdHNlbGYuICBJbiBvMmRsbSwgd2UgY2FuIGdldCB0aGUgYXN0IGJlZm9yZSBvY2ZzMl9kbG1fbG9jaygpCisgKiByZXR1cm5zLiAgVGhlIGFzdCBjbGVhcnMgT0NGUzJfTE9DS19CVVNZLCBhbmQgbXVzdCB0aGVyZWZvcmUgY2xlYXIKKyAqIE9DRlMyX0xPQ0tfUEVORElORyBhdCB0aGUgc2FtZSB0aW1lLiAgV2hlbiBvY2ZzMl9kbG1fbG9jaygpIHJldHVybnMsCisgKiB0aGUgY2FsbGVyIGlzIGdvaW5nIHRvIHRyeSB0byBjbGVhciBQRU5ESU5HIGFnYWluLiAgSWYgbm90aGluZyBlbHNlIGlzCisgKiBoYXBwZW5pbmcsIF9fbG9ja3Jlc19jbGVhcl9wZW5kaW5nKCkgc2VlcyBQRU5ESU5HIGlzIHVuc2V0IGFuZCBkb2VzCisgKiBub3RoaW5nLgorICoKKyAqIEJ1dCB3aGF0IGlmIGFub3RoZXIgcGF0aCAoZWcgZG93bmNvbnZlcnQgdGhyZWFkKSBoYXMganVzdCBzdGFydGVkIGEKKyAqIG5ldyBsb2NraW5nIGFjdGlvbj8gIFRoZSBvdGhlciBwYXRoIGhhcyByZS1zZXQgUEVORElORy4gIE91ciBwYXRoCisgKiBjYW5ub3QgY2xlYXIgUEVORElORywgYmVjYXVzZSB0aGF0IHdpbGwgcmUtb3BlbiB0aGUgb3JpZ2luYWwgcmFjZQorICogd2luZG93LgorICoKKyAqIFtFeGFtcGxlXQorICoKKyAqIG9jZnMyX21ldGFfbG9jaygpCisgKiAgb2NmczJfY2x1c3Rlcl9sb2NrKCkKKyAqICAgc2V0IEJVU1kKKyAqICAgc2V0IFBFTkRJTkcKKyAqICAgZHJvcCBsX2xvY2sKKyAqICAgb2NmczJfZGxtX2xvY2soKQorICogICAgb2NmczJfbG9ja2luZ19hc3QoKQkJb2NmczJfZG93bmNvbnZlcnRfdGhyZWFkKCkKKyAqICAgICBjbGVhciBQRU5ESU5HCQkJIG9jZnMyX3VuYmxvY2tfbG9jaygpCisgKgkJCQkJICB0YWtlX2xfbG9jaworICoJCQkJCSAgIUJVU1kKKyAqCQkJCQkgIG9jZnMyX3ByZXBhcmVfZG93bmNvbnZlcnQoKQorICoJCQkJCSAgIHNldCBCVVNZCisgKgkJCQkJICAgc2V0IFBFTkRJTkcKKyAqCQkJCQkgIGRyb3AgbF9sb2NrCisgKiAgIHRha2UgbF9sb2NrCisgKiAgIGNsZWFyIFBFTkRJTkcKKyAqICAgZHJvcCBsX2xvY2sKKyAqCQkJPHdpbmRvdz4KKyAqCQkJCQkgIG9jZnMyX2RsbV9sb2NrKCkKKyAqCisgKiBTbyBhcyB5b3UgY2FuIHNlZSwgd2Ugbm93IGhhdmUgYSB3aW5kb3cgd2hlcmUgbF9sb2NrIGlzIG5vdCBoZWxkLAorICogUEVORElORyBpcyBub3Qgc2V0LCBhbmQgb2NmczJfZGxtX2xvY2soKSBoYXMgbm90IGJlZW4gY2FsbGVkLgorICoKKyAqIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBvY2ZzMl9jbHVzdGVyX2xvY2soKSBoYXMgY2xlYXJlZCB0aGUgUEVORElORworICogc2V0IGJ5IG9jZnMyX3ByZXBhcmVfZG93bmNvbnZlcnQoKS4gIFRoYXQgd2Fzbid0IG5pY2UuCisgKgorICogVG8gc29sdmUgdGhpcyB3ZSBpbnRyb2R1Y2UgbF9wZW5kaW5nX2dlbi4gIEEgY2FsbCB0bworICogbG9ja3Jlc19jbGVhcl9wZW5kaW5nKCkgd2lsbCBvbmx5IGRvIHNvIHdoZW4gaXQgaXMgcGFzc2VkIGEgZ2VuZXJhdGlvbgorICogbnVtYmVyIHRoYXQgbWF0Y2hlcyB0aGUgbG9ja3Jlcy4gIGxvY2tyZXNfc2V0X3BlbmRpbmcoKSB3aWxsIHJldHVybiB0aGUKKyAqIGN1cnJlbnQgZ2VuZXJhdGlvbiBudW1iZXIuICBXaGVuIG9jZnMyX2NsdXN0ZXJfbG9jaygpIGdvZXMgdG8gY2xlYXIKKyAqIFBFTkRJTkcsIGl0IHBhc3NlcyB0aGUgZ2VuZXJhdGlvbiBpdCBnb3QgZnJvbSBzZXRfcGVuZGluZygpLiAgSW4gb3VyCisgKiBleGFtcGxlIGFib3ZlLCB0aGUgZ2VuZXJhdGlvbiBudW1iZXJzIHdpbGwgKm5vdCogbWF0Y2guICBUaHVzLAorICogb2NmczJfY2x1c3Rlcl9sb2NrKCkgd2lsbCBub3QgY2xlYXIgdGhlIFBFTkRJTkcgc2V0IGJ5CisgKiBvY2ZzMl9wcmVwYXJlX2Rvd25jb252ZXJ0KCkuCisgKi8KKworLyogVW5sb2NrZWQgdmVyc2lvbiBmb3Igb2NmczJfbG9ja2luZ19hc3QoKSAqLworc3RhdGljIHZvaWQgX19sb2NrcmVzX2NsZWFyX3BlbmRpbmcoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbiwKKwkJCQkgICAgc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZsb2NrcmVzLT5sX2xvY2spOworCisJLyoKKwkgKiBUaGUgYXN0IGFuZCBsb2NraW5nIGZ1bmN0aW9ucyBjYW4gcmFjZSB1cyBoZXJlLiAgVGhlIHdpbm5lcgorCSAqIHdpbGwgY2xlYXIgcGVuZGluZywgdGhlIGxvc2VyIHdpbGwgbm90LgorCSAqLworCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1BFTkRJTkcpIHx8CisJICAgIChsb2NrcmVzLT5sX3BlbmRpbmdfZ2VuICE9IGdlbmVyYXRpb24pKQorCQlyZXR1cm47CisKKwlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfUEVORElORyk7CisJbG9ja3Jlcy0+bF9wZW5kaW5nX2dlbisrOworCisJLyoKKwkgKiBUaGUgZG93bmNvbnZlcnQgdGhyZWFkIG1heSBoYXZlIHNraXBwZWQgdXMgYmVjYXVzZSB3ZQorCSAqIHdlcmUgUEVORElORy4gIFdha2UgaXQgdXAuCisJICovCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JMT0NLRUQpCisJCW9jZnMyX3dha2VfZG93bmNvbnZlcnRfdGhyZWFkKG9zYik7Cit9CisKKy8qIExvY2tlZCB2ZXJzaW9uIGZvciBjYWxsZXJzIG9mIG9jZnMyX2RsbV9sb2NrKCkgKi8KK3N0YXRpYyB2b2lkIGxvY2tyZXNfY2xlYXJfcGVuZGluZyhzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJICB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbiwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CisJX19sb2NrcmVzX2NsZWFyX3BlbmRpbmcobG9ja3JlcywgZ2VuZXJhdGlvbiwgb3NiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsb2NrcmVzX3NldF9wZW5kaW5nKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmxvY2tyZXMtPmxfbG9jayk7CisJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQlVTWSkpOworCisJbG9ja3Jlc19vcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX1BFTkRJTkcpOworCisJcmV0dXJuIGxvY2tyZXMtPmxfcGVuZGluZ19nZW47Cit9CisKKwogc3RhdGljIHZvaWQgb2NmczJfYmxvY2tpbmdfYXN0KHZvaWQgKm9wYXF1ZSwgaW50IGxldmVsKQogewogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9IG9wYXF1ZTsKQEAgLTc3NCw3ICs4NTEsNyBAQAogCWludCBuZWVkc19kb3duY29udmVydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JQlVHX09OKGxldmVsIDw9IExLTV9OTE1PREUpOworCUJVR19PTihsZXZlbCA8PSBETE1fTE9DS19OTCk7CiAKIAltbG9nKDAsICJCQVNUIGZpcmVkIGZvciBsb2NrcmVzICVzLCBibG9ja2luZyAlZCwgbGV2ZWwgJWQgdHlwZSAlc1xuIiwKIAkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwsIGxvY2tyZXMtPmxfbGV2ZWwsCkBAIC04MDEsMTQgKzg3OCwyMiBAQAogc3RhdGljIHZvaWQgb2NmczJfbG9ja2luZ19hc3Qodm9pZCAqb3BhcXVlKQogewogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9IG9wYXF1ZTsKLQlzdHJ1Y3QgZGxtX2xvY2tzdGF0dXMgKmxrc2IgPSAmbG9ja3Jlcy0+bF9sa3NiOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gb2NmczJfZ2V0X2xvY2tyZXNfb3NiKGxvY2tyZXMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAotCWlmIChsa3NiLT5zdGF0dXMgIT0gRExNX05PUk1BTCkgewotCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlczogbGtzYiBzdGF0dXMgdmFsdWUgb2YgJXUhXG4iLAotCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbGtzYi0+c3RhdHVzKTsKKwlzdGF0dXMgPSBvY2ZzMl9kbG1fbG9ja19zdGF0dXMoJmxvY2tyZXMtPmxfbGtzYik7CisKKwlpZiAoc3RhdHVzID09IC1FQUdBSU4pIHsKKwkJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JVU1kpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3RhdHVzKSB7CisJCW1sb2coTUxfRVJST1IsICJsb2NrcmVzICVzOiBsa3NiIHN0YXR1cyB2YWx1ZSBvZiAlZCFcbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBzdGF0dXMpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTgzMSwxMSArOTE2LDIzIEBACiAJCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKIAkJQlVHKCk7CiAJfQotCitvdXQ6CiAJLyogc2V0IGl0IHRvIHNvbWV0aGluZyBpbnZhbGlkIHNvIGlmIHdlIGdldCBjYWxsZWQgYWdhaW4gd2UKIAkgKiBjYW4gY2F0Y2ggaXQuICovCiAJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfSU5WQUxJRDsKIAorCS8qIERpZCB3ZSB0cnkgdG8gY2FuY2VsIHRoaXMgbG9jaz8gIENsZWFyIHRoYXQgc3RhdGUgKi8KKwlpZiAobG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uID09IE9DRlMyX1VOTE9DS19DQU5DRUxfQ09OVkVSVCkKKwkJbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uID0gT0NGUzJfVU5MT0NLX0lOVkFMSUQ7CisKKwkvKgorCSAqIFdlIG1heSBoYXZlIGJlYXRlbiB0aGUgbG9ja2luZyBmdW5jdGlvbnMgaGVyZS4gIFdlIGNlcnRhaW5seQorCSAqIGtub3cgdGhhdCBkbG1fbG9jaygpIGhhcyBiZWVuIGNhbGxlZCA6LSkKKwkgKiBCZWNhdXNlIHdlIGNhbid0IGhhdmUgdHdvIGxvY2sgY2FsbHMgaW4gZmxpZ2h0IGF0IG9uY2UsIHdlCisJICogY2FuIHVzZSBsb2NrcmVzLT5sX3BlbmRpbmdfZ2VuLgorCSAqLworCV9fbG9ja3Jlc19jbGVhcl9wZW5kaW5nKGxvY2tyZXMsIGxvY2tyZXMtPmxfcGVuZGluZ19nZW4sICBvc2IpOworCiAJd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiB9CkBAIC04NjUsMTUgKzk2MiwxNSBAQAogc3RhdGljIGludCBvY2ZzMl9sb2NrX2NyZWF0ZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAogCQkJICAgICBpbnQgbGV2ZWwsCi0JCQkgICAgIGludCBkbG1fZmxhZ3MpCisJCQkgICAgIHUzMiBkbG1fZmxhZ3MpCiB7CiAJaW50IHJldCA9IDA7Ci0JZW51bSBkbG1fc3RhdHVzIHN0YXR1cyA9IERMTV9OT1JNQUw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZ2VuOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQltbG9nKDAsICJsb2NrICVzLCBsZXZlbCA9ICVkLCBmbGFncyA9ICVkXG4iLCBsb2NrcmVzLT5sX25hbWUsIGxldmVsLAorCW1sb2coMCwgImxvY2sgJXMsIGxldmVsID0gJWQsIGZsYWdzID0gJXVcbiIsIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwsCiAJICAgICBkbG1fZmxhZ3MpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwpAQCAtODg2LDI0ICs5ODMsMjMgQEAKIAlsb2NrcmVzLT5sX2FjdGlvbiA9IE9DRlMyX0FTVF9BVFRBQ0g7CiAJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBsZXZlbDsKIAlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7CisJZ2VuID0gbG9ja3Jlc19zZXRfcGVuZGluZyhsb2NrcmVzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAotCXN0YXR1cyA9IGRsbWxvY2sob3NiLT5kbG0sCi0JCQkgbGV2ZWwsCi0JCQkgJmxvY2tyZXMtPmxfbGtzYiwKLQkJCSBkbG1fZmxhZ3MsCi0JCQkgbG9ja3Jlcy0+bF9uYW1lLAotCQkJIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEsCi0JCQkgb2NmczJfbG9ja2luZ19hc3QsCi0JCQkgbG9ja3JlcywKLQkJCSBvY2ZzMl9ibG9ja2luZ19hc3QpOwotCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkgewotCQlvY2ZzMl9sb2dfZGxtX2Vycm9yKCJkbG1sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJcmV0ID0gLUVJTlZBTDsKKwlyZXQgPSBvY2ZzMl9kbG1fbG9jayhvc2ItPmNjb25uLAorCQkJICAgICBsZXZlbCwKKwkJCSAgICAgJmxvY2tyZXMtPmxfbGtzYiwKKwkJCSAgICAgZGxtX2ZsYWdzLAorCQkJICAgICBsb2NrcmVzLT5sX25hbWUsCisJCQkgICAgIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEsCisJCQkgICAgIGxvY2tyZXMpOworCWxvY2tyZXNfY2xlYXJfcGVuZGluZyhsb2NrcmVzLCBnZW4sIG9zYik7CisJaWYgKHJldCkgeworCQlvY2ZzMl9sb2dfZGxtX2Vycm9yKCJvY2ZzMl9kbG1fbG9jayIsIHJldCwgbG9ja3Jlcyk7CiAJCW9jZnMyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3IobG9ja3JlcywgMSk7CiAJfQogCi0JbWxvZygwLCAibG9jayAlcywgc3VjY2Vzc2Z1bGwgcmV0dXJuIGZyb20gZGxtbG9ja1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKKwltbG9nKDAsICJsb2NrICVzLCByZXR1cm4gZnJvbSBvY2ZzMl9kbG1fbG9ja1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAogYmFpbDoKIAltbG9nX2V4aXQocmV0KTsKQEAgLTEwMTYsMjEgKzExMTIsMjIgQEAKIHN0YXRpYyBpbnQgb2NmczJfY2x1c3Rlcl9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAogCQkJICAgICAgaW50IGxldmVsLAotCQkJICAgICAgaW50IGxrbV9mbGFncywKKwkJCSAgICAgIHUzMiBsa21fZmxhZ3MsCiAJCQkgICAgICBpbnQgYXJnX2ZsYWdzKQogewogCXN0cnVjdCBvY2ZzMl9tYXNrX3dhaXRlciBtdzsKLQllbnVtIGRsbV9zdGF0dXMgc3RhdHVzOwogCWludCB3YWl0LCBjYXRjaF9zaWduYWxzID0gIShvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfTk9JTlRSKTsKIAlpbnQgcmV0ID0gMDsgLyogZ2NjIGRvZXNuJ3QgcmVhbGl6ZSB3YWl0ID0gMSBndWFyYW50ZWVzIHJldCBpcyBzZXQgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBnZW47CisJaW50IG5vcXVldWVfYXR0ZW1wdGVkID0gMDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCiAJb2NmczJfaW5pdF9tYXNrX3dhaXRlcigmbXcpOwogCiAJaWYgKGxvY2tyZXMtPmxfb3BzLT5mbGFncyAmIExPQ0tfVFlQRV9VU0VTX0xWQikKLQkJbGttX2ZsYWdzIHw9IExLTV9WQUxCTEs7CisJCWxrbV9mbGFncyB8PSBETE1fTEtGX1ZBTEJMSzsKIAogYWdhaW46CiAJd2FpdCA9IDA7CkBAIC0xMDY4LDUyICsxMTY1LDU2IEBACiAJfQogCiAJaWYgKGxldmVsID4gbG9ja3Jlcy0+bF9sZXZlbCkgeworCQlpZiAobm9xdWV1ZV9hdHRlbXB0ZWQgPiAwKSB7CisJCQlyZXQgPSAtRUFHQUlOOworCQkJZ290byB1bmxvY2s7CisJCX0KKwkJaWYgKGxrbV9mbGFncyAmIERMTV9MS0ZfTk9RVUVVRSkKKwkJCW5vcXVldWVfYXR0ZW1wdGVkID0gMTsKKwogCQlpZiAobG9ja3Jlcy0+bF9hY3Rpb24gIT0gT0NGUzJfQVNUX0lOVkFMSUQpCiAJCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlcyBoYXMgYWN0aW9uICV1IHBlbmRpbmdcbiIsCiAJCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9hY3Rpb24pOwogCiAJCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0FUVEFDSEVEKSkgewogCQkJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfQVRUQUNIOwotCQkJbGttX2ZsYWdzICY9IH5MS01fQ09OVkVSVDsKKwkJCWxrbV9mbGFncyAmPSB+RExNX0xLRl9DT05WRVJUOwogCQl9IGVsc2UgewogCQkJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfQ09OVkVSVDsKLQkJCWxrbV9mbGFncyB8PSBMS01fQ09OVkVSVDsKKwkJCWxrbV9mbGFncyB8PSBETE1fTEtGX0NPTlZFUlQ7CiAJCX0KIAogCQlsb2NrcmVzLT5sX3JlcXVlc3RlZCA9IGxldmVsOwogCQlsb2NrcmVzX29yX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7CisJCWdlbiA9IGxvY2tyZXNfc2V0X3BlbmRpbmcobG9ja3Jlcyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwogCi0JCUJVR19PTihsZXZlbCA9PSBMS01fSVZNT0RFKTsKLQkJQlVHX09OKGxldmVsID09IExLTV9OTE1PREUpOworCQlCVUdfT04obGV2ZWwgPT0gRExNX0xPQ0tfSVYpOworCQlCVUdfT04obGV2ZWwgPT0gRExNX0xPQ0tfTkwpOwogCiAJCW1sb2coMCwgImxvY2sgJXMsIGNvbnZlcnQgZnJvbSAlZCB0byBsZXZlbCA9ICVkXG4iLAogCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9sZXZlbCwgbGV2ZWwpOwogCiAJCS8qIGNhbGwgZGxtX2xvY2sgdG8gdXBncmFkZSBsb2NrIG5vdyAqLwotCQlzdGF0dXMgPSBkbG1sb2NrKG9zYi0+ZGxtLAotCQkJCSBsZXZlbCwKLQkJCQkgJmxvY2tyZXMtPmxfbGtzYiwKLQkJCQkgbGttX2ZsYWdzLAotCQkJCSBsb2NrcmVzLT5sX25hbWUsCi0JCQkJIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEsCi0JCQkJIG9jZnMyX2xvY2tpbmdfYXN0LAotCQkJCSBsb2NrcmVzLAotCQkJCSBvY2ZzMl9ibG9ja2luZ19hc3QpOwotCQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpIHsKLQkJCWlmICgobGttX2ZsYWdzICYgTEtNX05PUVVFVUUpICYmCi0JCQkgICAgKHN0YXR1cyA9PSBETE1fTk9UUVVFVUVEKSkKLQkJCQlyZXQgPSAtRUFHQUlOOwotCQkJZWxzZSB7Ci0JCQkJb2NmczJfbG9nX2RsbV9lcnJvcigiZGxtbG9jayIsIHN0YXR1cywKLQkJCQkJCSAgICBsb2NrcmVzKTsKLQkJCQlyZXQgPSAtRUlOVkFMOworCQlyZXQgPSBvY2ZzMl9kbG1fbG9jayhvc2ItPmNjb25uLAorCQkJCSAgICAgbGV2ZWwsCisJCQkJICAgICAmbG9ja3Jlcy0+bF9sa3NiLAorCQkJCSAgICAgbGttX2ZsYWdzLAorCQkJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLAorCQkJCSAgICAgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSwKKwkJCQkgICAgIGxvY2tyZXMpOworCQlsb2NrcmVzX2NsZWFyX3BlbmRpbmcobG9ja3JlcywgZ2VuLCBvc2IpOworCQlpZiAocmV0KSB7CisJCQlpZiAoIShsa21fZmxhZ3MgJiBETE1fTEtGX05PUVVFVUUpIHx8CisJCQkgICAgKHJldCAhPSAtRUFHQUlOKSkgeworCQkJCW9jZnMyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV9sb2NrIiwKKwkJCQkJCSAgICByZXQsIGxvY2tyZXMpOwogCQkJfQogCQkJb2NmczJfcmVjb3Zlcl9mcm9tX2RsbV9lcnJvcihsb2NrcmVzLCAxKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJbWxvZygwLCAibG9jayAlcywgc3VjY2Vzc2Z1bGwgcmV0dXJuIGZyb20gZGxtbG9ja1xuIiwKKwkJbWxvZygwLCAibG9jayAlcywgc3VjY2Vzc2Z1bGwgcmV0dXJuIGZyb20gb2NmczJfZGxtX2xvY2tcbiIsCiAJCSAgICAgbG9ja3Jlcy0+bF9uYW1lKTsKIAogCQkvKiBBdCB0aGlzIHBvaW50IHdlJ3ZlIGdvbmUgaW5zaWRlIHRoZSBkbG0gYW5kIG5lZWQgdG8KQEAgLTExNzcsOSArMTI3OCw5IEBACiAJCQkJIGludCBleCwKIAkJCQkgaW50IGxvY2FsKQogewotCWludCBsZXZlbCA9ICBleCA/IExLTV9FWE1PREUgOiBMS01fUFJNT0RFOworCWludCBsZXZlbCA9ICBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbGttX2ZsYWdzID0gbG9jYWwgPyBMS01fTE9DQUwgOiAwOworCXUzMiBsa21fZmxhZ3MgPSBsb2NhbCA/IERMTV9MS0ZfTE9DQUwgOiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwogCUJVR19PTihsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19BVFRBQ0hFRCk7CkBAIC0xMjIyLDcgKzEzMjMsNyBAQAogCX0KIAogCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byB1c2UgTEtNX0xPQ0FMIG9uIGEgbWV0YSBkYXRhIGxvY2sgYXMgdGhleQorCSAqIFdlIGRvbid0IHdhbnQgdG8gdXNlIERMTV9MS0ZfTE9DQUwgb24gYSBtZXRhIGRhdGEgbG9jayBhcyB0aGV5CiAJICogZG9uJ3QgdXNlIGEgZ2VuZXJhdGlvbiBpbiB0aGVpciBsb2NrIG5hbWVzLgogCSAqLwogCXJldCA9IG9jZnMyX2NyZWF0ZV9uZXdfbG9jayhvc2IsICZPQ0ZTMl9JKGlub2RlKS0+aXBfaW5vZGVfbG9ja3JlcywgMSwgMCk7CkBAIC0xMjYxLDcgKzEzNjIsNyBAQAogCiAJbG9ja3JlcyA9ICZPQ0ZTMl9JKGlub2RlKS0+aXBfcndfbG9ja3JlczsKIAotCWxldmVsID0gd3JpdGUgPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERTsKKwlsZXZlbCA9IHdyaXRlID8gRExNX0xPQ0tfRVggOiBETE1fTE9DS19QUjsKIAogCXN0YXR1cyA9IG9jZnMyX2NsdXN0ZXJfbG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGxvY2tyZXMsIGxldmVsLCAwLAogCQkJCSAgICAwKTsKQEAgLTEyNzQsNyArMTM3NSw3IEBACiAKIHZvaWQgb2NmczJfcndfdW5sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3cml0ZSkKIHsKLQlpbnQgbGV2ZWwgPSB3cml0ZSA/IExLTV9FWE1PREUgOiBMS01fUFJNT0RFOworCWludCBsZXZlbCA9IHdyaXRlID8gRExNX0xPQ0tfRVggOiBETE1fTE9DS19QUjsKIAlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSAmT0NGUzJfSShpbm9kZSktPmlwX3J3X2xvY2tyZXM7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKQEAgLTEzMTIsNyArMTQxMyw3IEBACiAJbG9ja3JlcyA9ICZPQ0ZTMl9JKGlub2RlKS0+aXBfb3Blbl9sb2NrcmVzOwogCiAJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9sb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgbG9ja3JlcywKLQkJCQkgICAgTEtNX1BSTU9ERSwgMCwgMCk7CisJCQkJICAgIERMTV9MT0NLX1BSLCAwLCAwKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCkBAIC0xMzQwLDE2ICsxNDQxLDE2IEBACiAKIAlsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9vcGVuX2xvY2tyZXM7CiAKLQlsZXZlbCA9IHdyaXRlID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREU7CisJbGV2ZWwgPSB3cml0ZSA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CiAKIAkvKgogCSAqIFRoZSBmaWxlIHN5c3RlbSBtYXkgYWxyZWFkeSBob2xkaW5nIGEgUFJNT0RFL0VYTU9ERSBvcGVuIGxvY2suCi0JICogU2luY2Ugd2UgcGFzcyBMS01fTk9RVUVVRSwgdGhlIHJlcXVlc3Qgd29uJ3QgYmxvY2sgd2FpdGluZyBvbgorCSAqIFNpbmNlIHdlIHBhc3MgRExNX0xLRl9OT1FVRVVFLCB0aGUgcmVxdWVzdCB3b24ndCBibG9jayB3YWl0aW5nIG9uCiAJICogb3RoZXIgbm9kZXMgYW5kIHRoZSAtRUFHQUlOIHdpbGwgaW5kaWNhdGUgdG8gdGhlIGNhbGxlciB0aGF0CiAJICogdGhpcyBpbm9kZSBpcyBzdGlsbCBpbiB1c2UuCiAJICovCiAJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9sb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgbG9ja3JlcywKLQkJCQkgICAgbGV2ZWwsIExLTV9OT1FVRVVFLCAwKTsKKwkJCQkgICAgbGV2ZWwsIERMTV9MS0ZfTk9RVUVVRSwgMCk7CiAKIG91dDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKQEAgLTEzNzQsMTAgKzE0NzUsMTAgQEAKIAogCWlmKGxvY2tyZXMtPmxfcm9faG9sZGVycykKIAkJb2NmczJfY2x1c3Rlcl91bmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBsb2NrcmVzLAotCQkJCSAgICAgTEtNX1BSTU9ERSk7CisJCQkJICAgICBETE1fTE9DS19QUik7CiAJaWYobG9ja3Jlcy0+bF9leF9ob2xkZXJzKQogCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGxvY2tyZXMsCi0JCQkJICAgICBMS01fRVhNT0RFKTsKKwkJCQkgICAgIERMTV9MT0NLX0VYKTsKIAogb3V0OgogCW1sb2dfZXhpdF92b2lkKCk7CkBAIC0xNDY0LDcgKzE1NjUsNyBAQAogCW9jZnMyX2luaXRfbWFza193YWl0ZXIoJm13KTsKIAogCWlmICgobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQlVTWSkgfHwKLQkgICAgKGxvY2tyZXMtPmxfbGV2ZWwgPiBMS01fTkxNT0RFKSkgeworCSAgICAobG9ja3Jlcy0+bF9sZXZlbCA+IERMTV9MT0NLX05MKSkgewogCQltbG9nKE1MX0VSUk9SLAogCQkgICAgICJGaWxlIGxvY2sgXCIlc1wiIGhhcyBidXN5IG9yIGxvY2tlZCBzdGF0ZTogZmxhZ3M6IDB4JWx4LCAiCiAJCSAgICAgImxldmVsOiAldVxuIiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzLApAQCAtMTUwMywxNCArMTYwNCwxMiBAQAogCWxvY2tyZXNfYWRkX21hc2tfd2FpdGVyKGxvY2tyZXMsICZtdywgT0NGUzJfTE9DS19CVVNZLCAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAotCXJldCA9IGRsbWxvY2sob3NiLT5kbG0sIGxldmVsLCAmbG9ja3Jlcy0+bF9sa3NiLCBsa21fZmxhZ3MsCi0JCSAgICAgIGxvY2tyZXMtPmxfbmFtZSwgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSwKLQkJICAgICAgb2NmczJfbG9ja2luZ19hc3QsIGxvY2tyZXMsIG9jZnMyX2Jsb2NraW5nX2FzdCk7Ci0JaWYgKHJldCAhPSBETE1fTk9STUFMKSB7Ci0JCWlmICh0cnlsb2NrICYmIHJldCA9PSBETE1fTk9UUVVFVUVEKQotCQkJcmV0ID0gLUVBR0FJTjsKLQkJZWxzZSB7Ci0JCQlvY2ZzMl9sb2dfZGxtX2Vycm9yKCJkbG1sb2NrIiwgcmV0LCBsb2NrcmVzKTsKKwlyZXQgPSBvY2ZzMl9kbG1fbG9jayhvc2ItPmNjb25uLCBsZXZlbCwgJmxvY2tyZXMtPmxfbGtzYiwgbGttX2ZsYWdzLAorCQkJICAgICBsb2NrcmVzLT5sX25hbWUsIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEsCisJCQkgICAgIGxvY2tyZXMpOworCWlmIChyZXQpIHsKKwkJaWYgKCF0cnlsb2NrIHx8IChyZXQgIT0gLUVBR0FJTikpIHsKKwkJCW9jZnMyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV9sb2NrIiwgcmV0LCBsb2NrcmVzKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCX0KIApAQCAtMTUzNyw2ICsxNjM2LDEwIEBACiAJCSAqIHRvIGp1c3QgYnViYmxlIHN1Y2VzcyBiYWNrIHVwIHRvIHRoZSB1c2VyLgogCQkgKi8KIAkJcmV0ID0gb2NmczJfZmxvY2tfaGFuZGxlX3NpZ25hbChsb2NrcmVzLCBsZXZlbCk7CisJfSBlbHNlIGlmICghcmV0ICYmIChsZXZlbCA+IGxvY2tyZXMtPmxfbGV2ZWwpKSB7CisJCS8qIFRyeWxvY2sgZmFpbGVkIGFzeW5jaHJvbm91c2x5ICovCisJCUJVR19PTighdHJ5bG9jayk7CisJCXJldCA9IC1FQUdBSU47CiAJfQogCiBvdXQ6CkBAIC0xNTQ5LDYgKzE2NTIsNyBAQAogdm9pZCBvY2ZzMl9maWxlX3VubG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGludCBnZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgb2NmczJfZmlsZV9wcml2YXRlICpmcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSAmZnAtPmZwX2Zsb2NrOwpAQCAtMTU3MiwxMyArMTY3NiwxMyBAQAogCSAqIEZha2UgYSBibG9ja2luZyBhc3QgZm9yIHRoZSBkb3duY29udmVydCBjb2RlLgogCSAqLwogCWxvY2tyZXNfb3JfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19CTE9DS0VEKTsKLQlsb2NrcmVzLT5sX2Jsb2NraW5nID0gTEtNX0VYTU9ERTsKKwlsb2NrcmVzLT5sX2Jsb2NraW5nID0gRExNX0xPQ0tfRVg7CiAKLQlvY2ZzMl9wcmVwYXJlX2Rvd25jb252ZXJ0KGxvY2tyZXMsIExLTV9OTE1PREUpOworCWdlbiA9IG9jZnMyX3ByZXBhcmVfZG93bmNvbnZlcnQobG9ja3JlcywgTEtNX05MTU9ERSk7CiAJbG9ja3Jlc19hZGRfbWFza193YWl0ZXIobG9ja3JlcywgJm13LCBPQ0ZTMl9MT0NLX0JVU1ksIDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwogCi0JcmV0ID0gb2NmczJfZG93bmNvbnZlcnRfbG9jayhvc2IsIGxvY2tyZXMsIExLTV9OTE1PREUsIDApOworCXJldCA9IG9jZnMyX2Rvd25jb252ZXJ0X2xvY2sob3NiLCBsb2NrcmVzLCBMS01fTkxNT0RFLCAwLCBnZW4pOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlyZXR1cm47CkBAIC0xNjAxLDExICsxNzA1LDExIEBACiAJICogY29uZGl0aW9uLiAqLwogCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19CTE9DS0VEKSB7CiAJCXN3aXRjaChsb2NrcmVzLT5sX2Jsb2NraW5nKSB7Ci0JCWNhc2UgTEtNX0VYTU9ERToKKwkJY2FzZSBETE1fTE9DS19FWDoKIAkJCWlmICghbG9ja3Jlcy0+bF9leF9ob2xkZXJzICYmICFsb2NrcmVzLT5sX3JvX2hvbGRlcnMpCiAJCQkJa2ljayA9IDE7CiAJCQlicmVhazsKLQkJY2FzZSBMS01fUFJNT0RFOgorCQljYXNlIERMTV9MT0NLX1BSOgogCQkJaWYgKCFsb2NrcmVzLT5sX2V4X2hvbGRlcnMpCiAJCQkJa2ljayA9IDE7CiAJCQlicmVhazsKQEAgLTE2NDgsNyArMTc1Miw3IEBACiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAotCWx2YiA9IChzdHJ1Y3Qgb2NmczJfbWV0YV9sdmIgKikgbG9ja3Jlcy0+bF9sa3NiLmx2YjsKKwlsdmIgPSAoc3RydWN0IG9jZnMyX21ldGFfbHZiICopb2NmczJfZGxtX2x2YigmbG9ja3Jlcy0+bF9sa3NiKTsKIAogCS8qCiAJICogSW52YWxpZGF0ZSB0aGUgTFZCIG9mIGEgZGVsZXRlZCBpbm9kZSAtIHRoaXMgd2F5IG90aGVyCkBAIC0xNzAwLDcgKzE4MDQsNyBAQAogCiAJbWxvZ19tZXRhX2x2YigwLCBsb2NrcmVzKTsKIAotCWx2YiA9IChzdHJ1Y3Qgb2NmczJfbWV0YV9sdmIgKikgbG9ja3Jlcy0+bF9sa3NiLmx2YjsKKwlsdmIgPSAoc3RydWN0IG9jZnMyX21ldGFfbHZiICopb2NmczJfZGxtX2x2YigmbG9ja3Jlcy0+bF9sa3NiKTsKIAogCS8qIFdlJ3JlIHNhZmUgaGVyZSB3aXRob3V0IHRoZSBsb2NrcmVzIGxvY2suLi4gKi8KIAlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKQEAgLTE3MzUsNyArMTgzOSw4IEBACiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9tZXRhX2x2Yl9pc190cnVzdGFibGUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewotCXN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqbHZiID0gKHN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqKSBsb2NrcmVzLT5sX2xrc2IubHZiOworCXN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqbHZiID0KKwkJKHN0cnVjdCBvY2ZzMl9tZXRhX2x2YiAqKW9jZnMyX2RsbV9sdmIoJmxvY2tyZXMtPmxfbGtzYik7CiAKIAlpZiAobHZiLT5sdmJfdmVyc2lvbiA9PSBPQ0ZTMl9MVkJfVkVSU0lPTgogCSAgICAmJiBiZTMyX3RvX2NwdShsdmItPmx2Yl9pZ2VuZXJhdGlvbikgPT0gaW5vZGUtPmlfZ2VuZXJhdGlvbikKQEAgLTE5MjMsNyArMjAyOCw4IEBACiAJCQkgaW50IGV4LAogCQkJIGludCBhcmdfZmxhZ3MpCiB7Ci0JaW50IHN0YXR1cywgbGV2ZWwsIGRsbV9mbGFncywgYWNxdWlyZWQ7CisJaW50IHN0YXR1cywgbGV2ZWwsIGFjcXVpcmVkOworCXUzMiBkbG1fZmxhZ3M7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxvY2FsX2JoID0gTlVMTDsKQEAgLTE5NTAsMTQgKzIwNTYsMTMgQEAKIAkJZ290byBsb2NhbDsKIAogCWlmICghKGFyZ19mbGFncyAmIE9DRlMyX01FVEFfTE9DS19SRUNPVkVSWSkpCi0JCXdhaXRfZXZlbnQob3NiLT5yZWNvdmVyeV9ldmVudCwKLQkJCSAgIG9jZnMyX25vZGVfbWFwX2lzX2VtcHR5KG9zYiwgJm9zYi0+cmVjb3ZlcnlfbWFwKSk7CisJCW9jZnMyX3dhaXRfZm9yX3JlY292ZXJ5KG9zYik7CiAKIAlsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9pbm9kZV9sb2NrcmVzOwotCWxldmVsID0gZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERTsKKwlsZXZlbCA9IGV4ID8gRExNX0xPQ0tfRVggOiBETE1fTE9DS19QUjsKIAlkbG1fZmxhZ3MgPSAwOwogCWlmIChhcmdfZmxhZ3MgJiBPQ0ZTMl9NRVRBX0xPQ0tfTk9RVUVVRSkKLQkJZGxtX2ZsYWdzIHw9IExLTV9OT1FVRVVFOworCQlkbG1fZmxhZ3MgfD0gRExNX0xLRl9OT1FVRVVFOwogCiAJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9sb2NrKG9zYiwgbG9ja3JlcywgbGV2ZWwsIGRsbV9mbGFncywgYXJnX2ZsYWdzKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMTk3NCw4ICsyMDc5LDcgQEAKIAkgKiBjb21taXR0ZWQgdG8gb3duaW5nIHRoaXMgbG9jayBzbyB3ZSBkb24ndCBhbGxvdyBzaWduYWxzIHRvCiAJICogYWJvcnQgdGhlIG9wZXJhdGlvbi4gKi8KIAlpZiAoIShhcmdfZmxhZ3MgJiBPQ0ZTMl9NRVRBX0xPQ0tfUkVDT1ZFUlkpKQotCQl3YWl0X2V2ZW50KG9zYi0+cmVjb3ZlcnlfZXZlbnQsCi0JCQkgICBvY2ZzMl9ub2RlX21hcF9pc19lbXB0eShvc2IsICZvc2ItPnJlY292ZXJ5X21hcCkpOworCQlvY2ZzMl93YWl0X2Zvcl9yZWNvdmVyeShvc2IpOwogCiBsb2NhbDoKIAkvKgpAQCAtMjEwOSw3ICsyMjEzLDcgQEAKIHZvaWQgb2NmczJfaW5vZGVfdW5sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgICAgICBpbnQgZXgpCiB7Ci0JaW50IGxldmVsID0gZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERTsKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9pbm9kZV9sb2NrcmVzOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCkBAIC0yMTMwLDEwICsyMjM0LDggQEAKIAkJICAgICBpbnQgZXgpCiB7CiAJaW50IHN0YXR1cyA9IDA7Ci0JaW50IGxldmVsID0gZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERTsKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJm9zYi0+b3NiX3N1cGVyX2xvY2tyZXM7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSA9IG9zYi0+c2xvdF9pbmZvOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTIxNTksMTEgKzIyNjEsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCWlmIChzdGF0dXMpIHsKLQkJYmggPSBzaS0+c2lfYmg7Ci0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBiaC0+Yl9ibG9ja25yLCAmYmgsIDAsCi0JCQkJCSAgc2ktPnNpX2lub2RlKTsKLQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJb2NmczJfdXBkYXRlX3Nsb3RfaW5mbyhzaSk7CisJCXN0YXR1cyA9IG9jZnMyX3JlZnJlc2hfc2xvdF9pbmZvKG9zYik7CiAKIAkJb2NmczJfY29tcGxldGVfbG9ja19yZXNfcmVmcmVzaChsb2NrcmVzLCBzdGF0dXMpOwogCkBAIC0yMTc4LDcgKzIyNzYsNyBAQAogdm9pZCBvY2ZzMl9zdXBlcl91bmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQlpbnQgZXgpCiB7Ci0JaW50IGxldmVsID0gZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERTsKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJm9zYi0+b3NiX3N1cGVyX2xvY2tyZXM7CiAKIAlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikpCkBAIC0yMTk2LDcgKzIyOTQsNyBAQAogCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQogCQlyZXR1cm4gMDsKIAotCXN0YXR1cyA9IG9jZnMyX2NsdXN0ZXJfbG9jayhvc2IsIGxvY2tyZXMsIExLTV9FWE1PREUsIDAsIDApOworCXN0YXR1cyA9IG9jZnMyX2NsdXN0ZXJfbG9jayhvc2IsIGxvY2tyZXMsIERMTV9MT0NLX0VYLCAwLCAwKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCkBAIC0yMjA4LDEzICsyMzA2LDEzIEBACiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJm9zYi0+b3NiX3JlbmFtZV9sb2NrcmVzOwogCiAJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQotCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsIExLTV9FWE1PREUpOworCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsIERMTV9MT0NLX0VYKTsKIH0KIAogaW50IG9jZnMyX2RlbnRyeV9sb2NrKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGV4KQogewogCWludCByZXQ7Ci0JaW50IGxldmVsID0gZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERTsKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IGRlbnRyeS0+ZF9mc2RhdGE7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkZW50cnktPmRfc2IpOwogCkBAIC0yMjM1LDcgKzIzMzMsNyBAQAogCiB2b2lkIG9jZnMyX2RlbnRyeV91bmxvY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZXgpCiB7Ci0JaW50IGxldmVsID0gZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERTsKKwlpbnQgbGV2ZWwgPSBleCA/IERMTV9MT0NLX0VYIDogRExNX0xPQ0tfUFI7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IGRlbnRyeS0+ZF9mc2RhdGE7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkZW50cnktPmRfc2IpOwogCkBAIC0yNDAwLDcgKzI0OTgsNyBAQAogCQkgICBsb2NrcmVzLT5sX2Jsb2NraW5nKTsKIAogCS8qIER1bXAgdGhlIHJhdyBMVkIgKi8KLQlsdmIgPSBsb2NrcmVzLT5sX2xrc2IubHZiOworCWx2YiA9IG9jZnMyX2RsbV9sdmIoJmxvY2tyZXMtPmxfbGtzYik7CiAJZm9yKGkgPSAwOyBpIDwgRExNX0xWQl9MRU47IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiMHgleFx0IiwgbHZiW2ldKTsKIApAQCAtMjQwOSw3ICsyNTA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBvY2ZzMl9kbG1fc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgb2NmczJfZGxtX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0Jb2NmczJfZGxtX3NlcV9zdGFydCwKIAkuc3RvcCA9CQlvY2ZzMl9kbG1fc2VxX3N0b3AsCiAJLm5leHQgPQkJb2NmczJfZGxtX3NlcV9uZXh0LApAQCAtMjUwNCwxMyArMjYwMiwxNCBAQAogaW50IG9jZnMyX2RsbV9pbml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCWludCBzdGF0dXMgPSAwOwotCXUzMiBkbG1fa2V5OwotCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uID0gTlVMTDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0JaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpIHsKKwkJb3NiLT5ub2RlX251bSA9IDA7CiAJCWdvdG8gbG9jYWw7CisJfQogCiAJc3RhdHVzID0gb2NmczJfZGxtX2luaXRfZGVidWcob3NiKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMjUyNywyNiArMjYyNiwzMSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JLyogdXNlZCBieSB0aGUgZGxtIGNvZGUgdG8gbWFrZSBtZXNzYWdlIGhlYWRlcnMgdW5pcXVlLCBlYWNoCi0JICogbm9kZSBpbiB0aGlzIGRvbWFpbiBtdXN0IGFncmVlIG9uIHRoaXMuICovCi0JZGxtX2tleSA9IGNyYzMyX2xlKDAsIG9zYi0+dXVpZF9zdHIsIHN0cmxlbihvc2ItPnV1aWRfc3RyKSk7Ci0KIAkvKiBmb3Igbm93LCB1dWlkID09IGRvbWFpbiAqLwotCWRsbSA9IGRsbV9yZWdpc3Rlcl9kb21haW4ob3NiLT51dWlkX3N0ciwgZGxtX2tleSwKLQkJCQkgICZvc2ItPm9zYl9sb2NraW5nX3Byb3RvKTsKLQlpZiAoSVNfRVJSKGRsbSkpIHsKLQkJc3RhdHVzID0gUFRSX0VSUihkbG0pOworCXN0YXR1cyA9IG9jZnMyX2NsdXN0ZXJfY29ubmVjdChvc2ItPm9zYl9jbHVzdGVyX3N0YWNrLAorCQkJCSAgICAgICBvc2ItPnV1aWRfc3RyLAorCQkJCSAgICAgICBzdHJsZW4ob3NiLT51dWlkX3N0ciksCisJCQkJICAgICAgIG9jZnMyX2RvX25vZGVfZG93biwgb3NiLAorCQkJCSAgICAgICAmY29ubik7CisJaWYgKHN0YXR1cykgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlkbG1fcmVnaXN0ZXJfZXZpY3Rpb25fY2IoZGxtLCAmb3NiLT5vc2JfZXZpY3Rpb25fY2IpOworCXN0YXR1cyA9IG9jZnMyX2NsdXN0ZXJfdGhpc19ub2RlKCZvc2ItPm5vZGVfbnVtKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCW1sb2coTUxfRVJST1IsCisJCSAgICAgImNvdWxkIG5vdCBmaW5kIHRoaXMgaG9zdCdzIG5vZGUgbnVtYmVyXG4iKTsKKwkJb2NmczJfY2x1c3Rlcl9kaXNjb25uZWN0KGNvbm4sIDApOworCQlnb3RvIGJhaWw7CisJfQogCiBsb2NhbDoKIAlvY2ZzMl9zdXBlcl9sb2NrX3Jlc19pbml0KCZvc2ItPm9zYl9zdXBlcl9sb2NrcmVzLCBvc2IpOwogCW9jZnMyX3JlbmFtZV9sb2NrX3Jlc19pbml0KCZvc2ItPm9zYl9yZW5hbWVfbG9ja3Jlcywgb3NiKTsKIAotCW9zYi0+ZGxtID0gZGxtOworCW9zYi0+Y2Nvbm4gPSBjb25uOwogCiAJc3RhdHVzID0gMDsKIGJhaWw6CkBAIC0yNTYwLDE0ICsyNjY0LDE5IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBvY2ZzMl9kbG1fc2h1dGRvd24oc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit2b2lkIG9jZnMyX2RsbV9zaHV0ZG93bihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCWludCBoYW5ndXBfcGVuZGluZykKIHsKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAotCWRsbV91bnJlZ2lzdGVyX2V2aWN0aW9uX2NiKCZvc2ItPm9zYl9ldmljdGlvbl9jYik7Ci0KIAlvY2ZzMl9kcm9wX29zYl9sb2Nrcyhvc2IpOwogCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIGRyb3BwZWQgYWxsIGxvY2tzIGFuZCBvY2ZzMl9kaXNtb3VudF92b2x1bWUoKQorCSAqIGhhcyBkaXNhYmxlZCByZWNvdmVyeSwgdGhlIERMTSB3b24ndCBiZSB0YWxraW5nIHRvIHVzLiAgSXQncworCSAqIHNhZmUgdG8gdGVhciB0aGluZ3MgZG93biBiZWZvcmUgZGlzY29ubmVjdGluZyB0aGUgY2x1c3Rlci4KKwkgKi8KKwogCWlmIChvc2ItPmRjX3Rhc2spIHsKIAkJa3RocmVhZF9zdG9wKG9zYi0+ZGNfdGFzayk7CiAJCW9zYi0+ZGNfdGFzayA9IE5VTEw7CkBAIC0yNTc2LDE1ICsyNjg1LDE1IEBACiAJb2NmczJfbG9ja19yZXNfZnJlZSgmb3NiLT5vc2Jfc3VwZXJfbG9ja3Jlcyk7CiAJb2NmczJfbG9ja19yZXNfZnJlZSgmb3NiLT5vc2JfcmVuYW1lX2xvY2tyZXMpOwogCi0JZGxtX3VucmVnaXN0ZXJfZG9tYWluKG9zYi0+ZGxtKTsKLQlvc2ItPmRsbSA9IE5VTEw7CisJb2NmczJfY2x1c3Rlcl9kaXNjb25uZWN0KG9zYi0+Y2Nvbm4sIGhhbmd1cF9wZW5kaW5nKTsKKwlvc2ItPmNjb25uID0gTlVMTDsKIAogCW9jZnMyX2RsbV9zaHV0ZG93bl9kZWJ1Zyhvc2IpOwogCiAJbWxvZ19leGl0X3ZvaWQoKTsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfdW5sb2NrX2FzdCh2b2lkICpvcGFxdWUsIGVudW0gZGxtX3N0YXR1cyBzdGF0dXMpCitzdGF0aWMgdm9pZCBvY2ZzMl91bmxvY2tfYXN0KHZvaWQgKm9wYXF1ZSwgaW50IGVycm9yKQogewogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9IG9wYXF1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjU5NSwyNCArMjcwNCw5IEBACiAJICAgICBsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwotCS8qIFdlIHRyaWVkIHRvIGNhbmNlbCBhIGNvbnZlcnQgcmVxdWVzdCwgYnV0IGl0IHdhcyBhbHJlYWR5Ci0JICogZ3JhbnRlZC4gQWxsIHdlIHdhbnQgdG8gZG8gaGVyZSBpcyBjbGVhciBvdXIgdW5sb2NrCi0JICogc3RhdGUuIFRoZSB3YWtlX3VwIGNhbGwgZG9uZSBhdCB0aGUgYm90dG9tIGlzIHJlZHVuZGFudAotCSAqIChvY2ZzMl9wcmVwYXJlX2NhbmNlbF9jb252ZXJ0IGRvZXNuJ3Qgc2xlZXAgb24gdGhpcykgYnV0IGRvZXNuJ3QKLQkgKiBodXJ0IGFueXRoaW5nIGFueXdheSAqLwotCWlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UICYmCi0JICAgIGxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbiA9PSBPQ0ZTMl9VTkxPQ0tfQ0FOQ0VMX0NPTlZFUlQpIHsKLQkJbWxvZygwLCAiR290IGNhbmNlbGdyYW50IGZvciAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQotCQkvKiBXZSBkb24ndCBjbGVhciB0aGUgYnVzeSBmbGFnIGluIHRoaXMgY2FzZSBhcyBpdAotCQkgKiBzaG91bGQgaGF2ZSBiZWVuIGNsZWFyZWQgYnkgdGhlIGFzdCB3aGljaCB0aGUgZGxtCi0JCSAqIGhhcyBjYWxsZWQuICovCi0JCWdvdG8gY29tcGxldGVfdW5sb2NrOwotCX0KLQotCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkgewotCQltbG9nKE1MX0VSUk9SLCAiRGxtIHBhc3NlcyBzdGF0dXMgJWQgZm9yIGxvY2sgJXMsICIKLQkJICAgICAidW5sb2NrX2FjdGlvbiAlZFxuIiwgc3RhdHVzLCBsb2NrcmVzLT5sX25hbWUsCisJaWYgKGVycm9yKSB7CisJCW1sb2coTUxfRVJST1IsICJEbG0gcGFzc2VzIGVycm9yICVkIGZvciBsb2NrICVzLCAiCisJCSAgICAgInVubG9ja19hY3Rpb24gJWRcbiIsIGVycm9yLCBsb2NrcmVzLT5sX25hbWUsCiAJCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTI2MjQsMTQgKzI3MTgsMTMgQEAKIAkJbG9ja3Jlcy0+bF9hY3Rpb24gPSBPQ0ZTMl9BU1RfSU5WQUxJRDsKIAkJYnJlYWs7CiAJY2FzZSBPQ0ZTMl9VTkxPQ0tfRFJPUF9MT0NLOgotCQlsb2NrcmVzLT5sX2xldmVsID0gTEtNX0lWTU9ERTsKKwkJbG9ja3Jlcy0+bF9sZXZlbCA9IERMTV9MT0NLX0lWOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CiAKIAlsb2NrcmVzX2NsZWFyX2ZsYWdzKGxvY2tyZXMsIE9DRlMyX0xPQ0tfQlVTWSk7Ci1jb21wbGV0ZV91bmxvY2s6CiAJbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uID0gT0NGUzJfVU5MT0NLX0lOVkFMSUQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAKQEAgLTI2NDMsMTYgKzI3MzYsMTYgQEAKIHN0YXRpYyBpbnQgb2NmczJfZHJvcF9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewotCWVudW0gZGxtX3N0YXR1cyBzdGF0dXM7CisJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBsa21fZmxhZ3MgPSAwOworCXUzMiBsa21fZmxhZ3MgPSAwOwogCiAJLyogV2UgZGlkbid0IGdldCBhbnl3aGVyZSBuZWFyIGFjdHVhbGx5IHVzaW5nIHRoaXMgbG9ja3Jlcy4gKi8KIAlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19JTklUSUFMSVpFRCkpCiAJCWdvdG8gb3V0OwogCiAJaWYgKGxvY2tyZXMtPmxfb3BzLT5mbGFncyAmIExPQ0tfVFlQRV9VU0VTX0xWQikKLQkJbGttX2ZsYWdzIHw9IExLTV9WQUxCTEs7CisJCWxrbV9mbGFncyB8PSBETE1fTEtGX1ZBTEJMSzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIApAQCAtMjY3OCw3ICsyNzcxLDcgQEAKIAogCWlmIChsb2NrcmVzLT5sX29wcy0+ZmxhZ3MgJiBMT0NLX1RZUEVfVVNFU19MVkIpIHsKIAkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0FUVEFDSEVEICYmCi0JCSAgICBsb2NrcmVzLT5sX2xldmVsID09IExLTV9FWE1PREUgJiYKKwkJICAgIGxvY2tyZXMtPmxfbGV2ZWwgPT0gRExNX0xPQ0tfRVggJiYKIAkJICAgICEobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfTkVFRFNfUkVGUkVTSCkpCiAJCQlsb2NrcmVzLT5sX29wcy0+c2V0X2x2Yihsb2NrcmVzKTsKIAl9CkBAIC0yNzA3LDE1ICsyODAwLDE1IEBACiAKIAltbG9nKDAsICJsb2NrICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwogCi0Jc3RhdHVzID0gZGxtdW5sb2NrKG9zYi0+ZGxtLCAmbG9ja3Jlcy0+bF9sa3NiLCBsa21fZmxhZ3MsCi0JCQkgICBvY2ZzMl91bmxvY2tfYXN0LCBsb2NrcmVzKTsKLQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpIHsKLQkJb2NmczJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKKwlyZXQgPSBvY2ZzMl9kbG1fdW5sb2NrKG9zYi0+Y2Nvbm4sICZsb2NrcmVzLT5sX2xrc2IsIGxrbV9mbGFncywKKwkJCSAgICAgICBsb2NrcmVzKTsKKwlpZiAocmV0KSB7CisJCW9jZnMyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV91bmxvY2siLCByZXQsIGxvY2tyZXMpOwogCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyBmbGFnczogJWx1XG4iLCBsb2NrcmVzLT5sX2ZsYWdzKTsKLQkJZGxtX3ByaW50X29uZV9sb2NrKGxvY2tyZXMtPmxfbGtzYi5sb2NraWQpOworCQlvY2ZzMl9kbG1fZHVtcF9sa3NiKCZsb2NrcmVzLT5sX2xrc2IpOwogCQlCVUcoKTsKIAl9Ci0JbWxvZygwLCAibG9jayAlcywgc3VjY2Vzc2Z1bGwgcmV0dXJuIGZyb20gZGxtdW5sb2NrXG4iLAorCW1sb2coMCwgImxvY2sgJXMsIHN1Y2Nlc3NmdWxsIHJldHVybiBmcm9tIG9jZnMyX2RsbV91bmxvY2tcbiIsCiAJICAgICBsb2NrcmVzLT5sX25hbWUpOwogCiAJb2NmczJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7CkBAIC0yODA2LDE1ICsyODk5LDE1IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfcHJlcGFyZV9kb3duY29udmVydChzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkJICAgICAgaW50IG5ld19sZXZlbCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2NmczJfcHJlcGFyZV9kb3duY29udmVydChzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJCSAgICAgIGludCBuZXdfbGV2ZWwpCiB7CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZsb2NrcmVzLT5sX2xvY2spOwogCi0JQlVHX09OKGxvY2tyZXMtPmxfYmxvY2tpbmcgPD0gTEtNX05MTU9ERSk7CisJQlVHX09OKGxvY2tyZXMtPmxfYmxvY2tpbmcgPD0gRExNX0xPQ0tfTkwpOwogCiAJaWYgKGxvY2tyZXMtPmxfbGV2ZWwgPD0gbmV3X2xldmVsKSB7Ci0JCW1sb2coTUxfRVJST1IsICJsb2NrcmVzLT5sX2xldmVsICgldSkgPD0gbmV3X2xldmVsICgldSlcbiIsCisJCW1sb2coTUxfRVJST1IsICJsb2NrcmVzLT5sX2xldmVsICglZCkgPD0gbmV3X2xldmVsICglZClcbiIsCiAJCSAgICAgbG9ja3Jlcy0+bF9sZXZlbCwgbmV3X2xldmVsKTsKIAkJQlVHKCk7CiAJfQpAQCAtMjgyNSwzMyArMjkxOCwzMyBAQAogCWxvY2tyZXMtPmxfYWN0aW9uID0gT0NGUzJfQVNUX0RPV05DT05WRVJUOwogCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbmV3X2xldmVsOwogCWxvY2tyZXNfb3JfZmxhZ3MobG9ja3JlcywgT0NGUzJfTE9DS19CVVNZKTsKKwlyZXR1cm4gbG9ja3Jlc19zZXRfcGVuZGluZyhsb2NrcmVzKTsKIH0KIAogc3RhdGljIGludCBvY2ZzMl9kb3duY29udmVydF9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAogCQkJCSAgaW50IG5ld19sZXZlbCwKLQkJCQkgIGludCBsdmIpCisJCQkJICBpbnQgbHZiLAorCQkJCSAgdW5zaWduZWQgaW50IGdlbmVyYXRpb24pCiB7Ci0JaW50IHJldCwgZGxtX2ZsYWdzID0gTEtNX0NPTlZFUlQ7Ci0JZW51bSBkbG1fc3RhdHVzIHN0YXR1czsKKwlpbnQgcmV0OworCXUzMiBkbG1fZmxhZ3MgPSBETE1fTEtGX0NPTlZFUlQ7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAogCWlmIChsdmIpCi0JCWRsbV9mbGFncyB8PSBMS01fVkFMQkxLOworCQlkbG1fZmxhZ3MgfD0gRExNX0xLRl9WQUxCTEs7CiAKLQlzdGF0dXMgPSBkbG1sb2NrKG9zYi0+ZGxtLAotCQkJIG5ld19sZXZlbCwKLQkJCSAmbG9ja3Jlcy0+bF9sa3NiLAotCQkJIGRsbV9mbGFncywKLQkJCSBsb2NrcmVzLT5sX25hbWUsCi0JCQkgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSwKLQkJCSBvY2ZzMl9sb2NraW5nX2FzdCwKLQkJCSBsb2NrcmVzLAotCQkJIG9jZnMyX2Jsb2NraW5nX2FzdCk7Ci0JaWYgKHN0YXR1cyAhPSBETE1fTk9STUFMKSB7Ci0JCW9jZnMyX2xvZ19kbG1fZXJyb3IoImRsbWxvY2siLCBzdGF0dXMsIGxvY2tyZXMpOwotCQlyZXQgPSAtRUlOVkFMOworCXJldCA9IG9jZnMyX2RsbV9sb2NrKG9zYi0+Y2Nvbm4sCisJCQkgICAgIG5ld19sZXZlbCwKKwkJCSAgICAgJmxvY2tyZXMtPmxfbGtzYiwKKwkJCSAgICAgZGxtX2ZsYWdzLAorCQkJICAgICBsb2NrcmVzLT5sX25hbWUsCisJCQkgICAgIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEsCisJCQkgICAgIGxvY2tyZXMpOworCWxvY2tyZXNfY2xlYXJfcGVuZGluZyhsb2NrcmVzLCBnZW5lcmF0aW9uLCBvc2IpOworCWlmIChyZXQpIHsKKwkJb2NmczJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX2xvY2siLCByZXQsIGxvY2tyZXMpOwogCQlvY2ZzMl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKGxvY2tyZXMsIDEpOwogCQlnb3RvIGJhaWw7CiAJfQpAQCAtMjg2Miw3ICsyOTU1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiByZXR1cm5zIDEgd2hlbiB0aGUgY2FsbGVyIHNob3VsZCB1bmxvY2sgYW5kIGNhbGwgZGxtdW5sb2NrICovCisvKiByZXR1cm5zIDEgd2hlbiB0aGUgY2FsbGVyIHNob3VsZCB1bmxvY2sgYW5kIGNhbGwgb2NmczJfZGxtX3VubG9jayAqLwogc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX2NhbmNlbF9jb252ZXJ0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgICAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewpAQCAtMjg5OCwyNCArMjk5MSwxOCBAQAogCQkJCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKIHsKIAlpbnQgcmV0OwotCWVudW0gZGxtX3N0YXR1cyBzdGF0dXM7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAltbG9nKDAsICJsb2NrICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwogCi0JcmV0ID0gMDsKLQlzdGF0dXMgPSBkbG11bmxvY2sob3NiLT5kbG0sCi0JCQkgICAmbG9ja3Jlcy0+bF9sa3NiLAotCQkJICAgTEtNX0NBTkNFTCwKLQkJCSAgIG9jZnMyX3VubG9ja19hc3QsCi0JCQkgICBsb2NrcmVzKTsKLQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpIHsKLQkJb2NmczJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJcmV0ID0gLUVJTlZBTDsKKwlyZXQgPSBvY2ZzMl9kbG1fdW5sb2NrKG9zYi0+Y2Nvbm4sICZsb2NrcmVzLT5sX2xrc2IsCisJCQkgICAgICAgRExNX0xLRl9DQU5DRUwsIGxvY2tyZXMpOworCWlmIChyZXQpIHsKKwkJb2NmczJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX3VubG9jayIsIHJldCwgbG9ja3Jlcyk7CiAJCW9jZnMyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3IobG9ja3JlcywgMCk7CiAJfQogCi0JbWxvZygwLCAibG9jayAlcyByZXR1cm4gZnJvbSBkbG11bmxvY2tcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CisJbWxvZygwLCAibG9jayAlcyByZXR1cm4gZnJvbSBvY2ZzMl9kbG1fdW5sb2NrXG4iLCBsb2NrcmVzLT5sX25hbWUpOwogCiAJbWxvZ19leGl0KHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTI5MzAsNiArMzAxNyw3IEBACiAJaW50IG5ld19sZXZlbDsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgc2V0X2x2YiA9IDA7CisJdW5zaWduZWQgaW50IGdlbjsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCkBAIC0yOTM5LDYgKzMwMjcsMzIgQEAKIAogcmVjaGVjazoKIAlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfQlVTWSkgeworCQkvKiBYWFgKKwkJICogVGhpcyBpcyBhICpiaWcqIHJhY2UuICBUaGUgT0NGUzJfTE9DS19QRU5ESU5HIGZsYWcKKwkJICogZXhpc3RzIGVudGlyZWx5IGZvciBvbmUgcmVhc29uIC0gYW5vdGhlciB0aHJlYWQgaGFzIHNldAorCQkgKiBPQ0ZTMl9MT0NLX0JVU1ksIGJ1dCBoYXMgKk5PVCogeWV0IGNhbGxlZCBkbG1fbG9jaygpLgorCQkgKgorCQkgKiBJZiB3ZSBkbyBvY2ZzMl9jYW5jZWxfY29udmVydCgpIGJlZm9yZSB0aGUgb3RoZXIgdGhyZWFkCisJCSAqIGNhbGxzIGRsbV9sb2NrKCksIG91ciBjYW5jZWwgd2lsbCBkbyBub3RoaW5nLiAgV2Ugd2lsbAorCQkgKiBnZXQgbm8gYXN0LCBhbmQgd2Ugd2lsbCBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHRoZQorCQkgKiBjYW5jZWwgZmFpbGVkLiAgTWVhbndoaWxlLCB0aGUgb3RoZXIgdGhyZWFkIHdpbGwgY2FsbAorCQkgKiBpbnRvIGRsbV9sb2NrKCkgYW5kIHdhaXQuLi5mb3JldmVyLgorCQkgKgorCQkgKiBXaHkgZm9yZXZlcj8gIEJlY2F1c2UgYW5vdGhlciBub2RlIGhhcyBhc2tlZCBmb3IgdGhlCisJCSAqIGxvY2sgZmlyc3Q7IHRoYXQncyB3aHkgd2UncmUgaGVyZSBpbiB1bmJsb2NrX2xvY2soKS4KKwkJICoKKwkJICogVGhlIHNvbHV0aW9uIGlzIE9DRlMyX0xPQ0tfUEVORElORy4gIFdoZW4gUEVORElORyBpcworCQkgKiBzZXQsIHdlIGp1c3QgcmVxdWV1ZSB0aGUgdW5ibG9jay4gIE9ubHkgd2hlbiB0aGUgb3RoZXIKKwkJICogdGhyZWFkIGhhcyBjYWxsZWQgZGxtX2xvY2soKSBhbmQgY2xlYXJlZCBQRU5ESU5HIHdpbGwKKwkJICogd2UgdGhlbiBjYW5jZWwgdGhlaXIgcmVxdWVzdC4KKwkJICoKKwkJICogQWxsIGNhbGxlcnMgb2YgZGxtX2xvY2soKSBtdXN0IHNldCBPQ0ZTMl9ETE1fUEVORElORworCQkgKiBhdCB0aGUgc2FtZSB0aW1lIHRoZXkgc2V0IE9DRlMyX0RMTV9CVVNZLiAgVGhleSBtdXN0CisJCSAqIGNsZWFyIE9DRlMyX0RMTV9QRU5ESU5HIGFmdGVyIGRsbV9sb2NrKCkgcmV0dXJucy4KKwkJICovCisJCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19QRU5ESU5HKQorCQkJZ290byBsZWF2ZV9yZXF1ZXVlOworCiAJCWN0bC0+cmVxdWV1ZSA9IDE7CiAJCXJldCA9IG9jZnMyX3ByZXBhcmVfY2FuY2VsX2NvbnZlcnQob3NiLCBsb2NrcmVzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CkBAIC0yOTUyLDEzICszMDY2LDEzIEBACiAKIAkvKiBpZiB3ZSdyZSBibG9ja2luZyBhbiBleGNsdXNpdmUgYW5kIHdlIGhhdmUgKmFueSogaG9sZGVycywKIAkgKiB0aGVuIHJlcXVldWUuICovCi0JaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IExLTV9FWE1PREUpCisJaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IERMTV9MT0NLX0VYKQogCSAgICAmJiAobG9ja3Jlcy0+bF9leF9ob2xkZXJzIHx8IGxvY2tyZXMtPmxfcm9faG9sZGVycykpCiAJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKIAogCS8qIElmIGl0J3MgYSBQUiB3ZSdyZSBibG9ja2luZywgdGhlbiBvbmx5CiAJICogcmVxdWV1ZSBpZiB3ZSd2ZSBnb3QgYW55IEVYIGhvbGRlcnMgKi8KLQlpZiAobG9ja3Jlcy0+bF9ibG9ja2luZyA9PSBMS01fUFJNT0RFICYmCisJaWYgKGxvY2tyZXMtPmxfYmxvY2tpbmcgPT0gRExNX0xPQ0tfUFIgJiYKIAkgICAgbG9ja3Jlcy0+bF9leF9ob2xkZXJzKQogCQlnb3RvIGxlYXZlX3JlcXVldWU7CiAKQEAgLTMwMDUsNyArMzExOSw3IEBACiAJY3RsLT5yZXF1ZXVlID0gMDsKIAogCWlmIChsb2NrcmVzLT5sX29wcy0+ZmxhZ3MgJiBMT0NLX1RZUEVfVVNFU19MVkIpIHsKLQkJaWYgKGxvY2tyZXMtPmxfbGV2ZWwgPT0gTEtNX0VYTU9ERSkKKwkJaWYgKGxvY2tyZXMtPmxfbGV2ZWwgPT0gRExNX0xPQ0tfRVgpCiAJCQlzZXRfbHZiID0gMTsKIAogCQkvKgpAQCAtMzAxOCw5ICszMTMyLDExIEBACiAJCQlsb2NrcmVzLT5sX29wcy0+c2V0X2x2Yihsb2NrcmVzKTsKIAl9CiAKLQlvY2ZzMl9wcmVwYXJlX2Rvd25jb252ZXJ0KGxvY2tyZXMsIG5ld19sZXZlbCk7CisJZ2VuID0gb2NmczJfcHJlcGFyZV9kb3duY29udmVydChsb2NrcmVzLCBuZXdfbGV2ZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwotCXJldCA9IG9jZnMyX2Rvd25jb252ZXJ0X2xvY2sob3NiLCBsb2NrcmVzLCBuZXdfbGV2ZWwsIHNldF9sdmIpOworCXJldCA9IG9jZnMyX2Rvd25jb252ZXJ0X2xvY2sob3NiLCBsb2NrcmVzLCBuZXdfbGV2ZWwsIHNldF9sdmIsCisJCQkJICAgICBnZW4pOworCiBsZWF2ZToKIAltbG9nX2V4aXQocmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzA0Miw3ICszMTU4LDcgQEAKICAgICAgICAJaW5vZGUgPSBvY2ZzMl9sb2NrX3Jlc19pbm9kZShsb2NrcmVzKTsKIAltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJZ290byBvdXQ7CiAKIAkvKgpAQCAtMzA1OSw3ICszMTc1LDcgQEAKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAJfQogCXN5bmNfbWFwcGluZ19idWZmZXJzKG1hcHBpbmcpOwotCWlmIChibG9ja2luZyA9PSBMS01fRVhNT0RFKSB7CisJaWYgKGJsb2NraW5nID09IERMTV9MT0NLX0VYKSB7CiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIDApOwogCX0gZWxzZSB7CiAJCS8qIFdlIG9ubHkgbmVlZCB0byB3YWl0IG9uIHRoZSBJL08gaWYgd2UncmUgbm90IGFsc28KQEAgLTMwODAsOCArMzE5Niw4IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IG9jZnMyX2xvY2tfcmVzX2lub2RlKGxvY2tyZXMpOwogCWludCBjaGVja3BvaW50ZWQgPSBvY2ZzMl9pbm9kZV9mdWxseV9jaGVja3BvaW50ZWQoaW5vZGUpOwogCi0JQlVHX09OKG5ld19sZXZlbCAhPSBMS01fTkxNT0RFICYmIG5ld19sZXZlbCAhPSBMS01fUFJNT0RFKTsKLQlCVUdfT04obG9ja3Jlcy0+bF9sZXZlbCAhPSBMS01fRVhNT0RFICYmICFjaGVja3BvaW50ZWQpOworCUJVR19PTihuZXdfbGV2ZWwgIT0gRExNX0xPQ0tfTkwgJiYgbmV3X2xldmVsICE9IERMTV9MT0NLX1BSKTsKKwlCVUdfT04obG9ja3Jlcy0+bF9sZXZlbCAhPSBETE1fTE9DS19FWCAmJiAhY2hlY2twb2ludGVkKTsKIAogCWlmIChjaGVja3BvaW50ZWQpCiAJCXJldHVybiAxOwpAQCAtMzE0NSw3ICszMjYxLDcgQEAKIAkgKiB2YWxpZC4gVGhlIGRvd25jb252ZXJ0IGNvZGUgd2lsbCByZXRhaW4gYSBQUiBmb3IgdGhpcyBub2RlLAogCSAqIHNvIHRoZXJlJ3Mgbm8gZnVydGhlciB3b3JrIHRvIGRvLgogCSAqLwotCWlmIChibG9ja2luZyA9PSBMS01fUFJNT0RFKQorCWlmIChibG9ja2luZyA9PSBETE1fTE9DS19QUikKIAkJcmV0dXJuIFVOQkxPQ0tfQ09OVElOVUU7CiAKIAkvKgpAQCAtMzIxOSw4ICszMzM1LDQ3IEBACiAJcmV0dXJuIFVOQkxPQ0tfQ09OVElOVUVfUE9TVDsKIH0KIAotdm9pZCBvY2ZzMl9wcm9jZXNzX2Jsb2NrZWRfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMpCisvKgorICogVGhpcyBpcyB0aGUgZmlsZXN5c3RlbSBsb2NraW5nIHByb3RvY29sLiAgSXQgcHJvdmlkZXMgdGhlIGxvY2sgaGFuZGxpbmcKKyAqIGhvb2tzIGZvciB0aGUgdW5kZXJseWluZyBETE0uICBJdCBoYXMgYSBtYXhpbXVtIHZlcnNpb24gbnVtYmVyLgorICogVGhlIHZlcnNpb24gbnVtYmVyIGFsbG93cyBpbnRlcm9wZXJhYmlsaXR5IHdpdGggc3lzdGVtcyBydW5uaW5nIGF0CisgKiB0aGUgc2FtZSBtYWpvciBudW1iZXIgYW5kIGFuIGVxdWFsIG9yIHNtYWxsZXIgbWlub3IgbnVtYmVyLgorICoKKyAqIFdoZW5ldmVyIHRoZSBmaWxlc3lzdGVtIGRvZXMgbmV3IHRoaW5ncyB3aXRoIGxvY2tzIChhZGRzIG9yIHJlbW92ZXMgYQorICogbG9jaywgb3JkZXJzIHRoZW0gZGlmZmVyZW50bHksIGRvZXMgZGlmZmVyZW50IHRoaW5ncyB1bmRlcm5lYXRoIGEgbG9jayksCisgKiB0aGUgdmVyc2lvbiBtdXN0IGJlIGNoYW5nZWQuICBUaGUgcHJvdG9jb2wgaXMgbmVnb3RpYXRlZCB3aGVuIGpvaW5pbmcKKyAqIHRoZSBkbG0gZG9tYWluLiAgQSBub2RlIG1heSBqb2luIHRoZSBkb21haW4gaWYgaXRzIG1ham9yIHZlcnNpb24gaXMKKyAqIGlkZW50aWNhbCB0byBhbGwgb3RoZXIgbm9kZXMgYW5kIGl0cyBtaW5vciB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbgorICogb3IgZXF1YWwgdG8gYWxsIG90aGVyIG5vZGVzLiAgV2hlbiBpdHMgbWlub3IgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4KKyAqIHRoZSBvdGhlciBub2RlcywgaXQgd2lsbCBydW4gYXQgdGhlIG1pbm9yIHZlcnNpb24gc3BlY2lmaWVkIGJ5IHRoZQorICogb3RoZXIgbm9kZXMuCisgKgorICogSWYgYSBsb2NraW5nIGNoYW5nZSBpcyBtYWRlIHRoYXQgd2lsbCBub3QgYmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyCisgKiB2ZXJzaW9ucywgdGhlIG1ham9yIG51bWJlciBtdXN0IGJlIGluY3JlYXNlZCBhbmQgdGhlIG1pbm9yIHZlcnNpb24gc2V0CisgKiB0byB6ZXJvLiAgSWYgYSBjaGFuZ2UgbWVyZWx5IGFkZHMgYSBiZWhhdmlvciB0aGF0IGNhbiBiZSBkaXNhYmxlZCB3aGVuCisgKiBzcGVha2luZyB0byBvbGRlciB2ZXJzaW9ucywgdGhlIG1pbm9yIHZlcnNpb24gbXVzdCBiZSBpbmNyZWFzZWQuICBJZiBhCisgKiBjaGFuZ2UgYWRkcyBhIGZ1bGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlIGNoYW5nZSAoZWcsIExWQiBjaGFuZ2VzIHRoYXQKKyAqIGFyZSBqdXN0IGlnbm9yZWQgYnkgb2xkZXIgdmVyc2lvbnMpLCB0aGUgdmVyc2lvbiBkb2VzIG5vdCBuZWVkIHRvIGJlCisgKiB1cGRhdGVkLgorICovCitzdGF0aWMgc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgbHByb3RvID0geworCS5scF9tYXhfdmVyc2lvbiA9IHsKKwkJLnB2X21ham9yID0gT0NGUzJfTE9DS0lOR19QUk9UT0NPTF9NQUpPUiwKKwkJLnB2X21pbm9yID0gT0NGUzJfTE9DS0lOR19QUk9UT0NPTF9NSU5PUiwKKwl9LAorCS5scF9sb2NrX2FzdAkJPSBvY2ZzMl9sb2NraW5nX2FzdCwKKwkubHBfYmxvY2tpbmdfYXN0CT0gb2NmczJfYmxvY2tpbmdfYXN0LAorCS5scF91bmxvY2tfYXN0CQk9IG9jZnMyX3VubG9ja19hc3QsCit9OworCit2b2lkIG9jZnMyX3NldF9sb2NraW5nX3Byb3RvY29sKHZvaWQpCit7CisJb2NmczJfc3RhY2tfZ2x1ZV9zZXRfbG9ja2luZ19wcm90b2NvbCgmbHByb3RvKTsKK30KKworCitzdGF0aWMgdm9pZCBvY2ZzMl9wcm9jZXNzX2Jsb2NrZWRfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzKQogewogCWludCBzdGF0dXM7CiAJc3RydWN0IG9jZnMyX3VuYmxvY2tfY3RsIGN0bCA9IHswLCAwLH07CkBAIC0zMzU2LDcgKzM1MTEsNyBAQAogCXJldHVybiBzaG91bGRfd2FrZTsKIH0KIAotaW50IG9jZnMyX2Rvd25jb252ZXJ0X3RocmVhZCh2b2lkICphcmcpCitzdGF0aWMgaW50IG9jZnMyX2Rvd25jb252ZXJ0X3RocmVhZCh2b2lkICphcmcpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBhcmc7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmggYi9mcy9vY2ZzMi9kbG1nbHVlLmgKaW5kZXggMWQ1YjA2OS4uMmJiMDFmMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5oCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuaApAQCAtNTgsNyArNTgsNyBAQAogI2RlZmluZSBPQ0ZTMl9MT0NLX05PTkJMT0NLCQkoMHgwNCkKIAogaW50IG9jZnMyX2RsbV9pbml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKLXZvaWQgb2NmczJfZGxtX3NodXRkb3duKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKK3ZvaWQgb2NmczJfZGxtX3NodXRkb3duKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgaGFuZ3VwX3BlbmRpbmcpOwogdm9pZCBvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2Uoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpyZXMpOwogdm9pZCBvY2ZzMl9pbm9kZV9sb2NrX3Jlc19pbml0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqcmVzLAogCQkJICAgICAgIGVudW0gb2NmczJfbG9ja190eXBlIHR5cGUsCkBAIC0xMDksMTIgKzEwOSwxMSBAQAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3Jlcyk7CiAKIC8qIGZvciB0aGUgZG93bmNvbnZlcnQgdGhyZWFkICovCi12b2lkIG9jZnMyX3Byb2Nlc3NfYmxvY2tlZF9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3Jlcyk7CiB2b2lkIG9jZnMyX3dha2VfZG93bmNvbnZlcnRfdGhyZWFkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIAogc3RydWN0IG9jZnMyX2RsbV9kZWJ1ZyAqb2NmczJfbmV3X2RsbV9kZWJ1Zyh2b2lkKTsKIHZvaWQgb2NmczJfcHV0X2RsbV9kZWJ1ZyhzdHJ1Y3Qgb2NmczJfZGxtX2RlYnVnICpkbG1fZGVidWcpOwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGRsbV9wcm90b2NvbF92ZXJzaW9uIG9jZnMyX2xvY2tpbmdfcHJvdG9jb2w7CisvKiBUbyBzZXQgdGhlIGxvY2tpbmcgcHJvdG9jb2wgb24gbW9kdWxlIGluaXRpYWxpemF0aW9uICovCit2b2lkIG9jZnMyX3NldF9sb2NraW5nX3Byb3RvY29sKHZvaWQpOwogI2VuZGlmCS8qIERMTUdMVUVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IGVkNWQ1MjMuLjkxNTRjODJkMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtMjI0Miw3ICsyMjQyLDcgQEAKIAkub3BlbgkJPSBvY2ZzMl9maWxlX29wZW4sCiAJLmFpb19yZWFkCT0gb2NmczJfZmlsZV9haW9fcmVhZCwKIAkuYWlvX3dyaXRlCT0gb2NmczJfZmlsZV9haW9fd3JpdGUsCi0JLmlvY3RsCQk9IG9jZnMyX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IG9jZnMyX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsICAgPSBvY2ZzMl9jb21wYXRfaW9jdGwsCiAjZW5kaWYKQEAgLTIyNTgsNyArMjI1OCw3IEBACiAJLmZzeW5jCQk9IG9jZnMyX3N5bmNfZmlsZSwKIAkucmVsZWFzZQk9IG9jZnMyX2Rpcl9yZWxlYXNlLAogCS5vcGVuCQk9IG9jZnMyX2Rpcl9vcGVuLAotCS5pb2N0bAkJPSBvY2ZzMl9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSBvY2ZzMl9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCAgID0gb2NmczJfY29tcGF0X2lvY3RsLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2hlYXJ0YmVhdC5jCmluZGV4IGMwZWZkOTQuLmM2ZTcyMTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2hlYXJ0YmVhdC5jCkBAIC0yOCw5ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLQotI2luY2x1ZGUgPGRsbS9kbG1hcGkuaD4KIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX1NVUEVSCiAjaW5jbHVkZSA8Y2x1c3Rlci9tYXNrbG9nLmg+CkBAIC00OCwzMiArNDUsMzYgQEAKIAkJCQkJICAgIGludCBiaXQpOwogc3RhdGljIGlubGluZSB2b2lkIF9fb2NmczJfbm9kZV9tYXBfY2xlYXJfYml0KHN0cnVjdCBvY2ZzMl9ub2RlX21hcCAqbWFwLAogCQkJCQkgICAgICBpbnQgYml0KTsKLXN0YXRpYyBpbmxpbmUgaW50IF9fb2NmczJfbm9kZV9tYXBfaXNfZW1wdHkoc3RydWN0IG9jZnMyX25vZGVfbWFwICptYXApOwotc3RhdGljIHZvaWQgX19vY2ZzMl9ub2RlX21hcF9kdXAoc3RydWN0IG9jZnMyX25vZGVfbWFwICp0YXJnZXQsCi0JCQkJIHN0cnVjdCBvY2ZzMl9ub2RlX21hcCAqZnJvbSk7Ci1zdGF0aWMgdm9pZCBfX29jZnMyX25vZGVfbWFwX3NldChzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgKnRhcmdldCwKLQkJCQkgc3RydWN0IG9jZnMyX25vZGVfbWFwICpmcm9tKTsKKworLyogc3BlY2lhbCBjYXNlIC0xIGZvciBub3cKKyAqIFRPRE86IHNob3VsZCAqcmVhbGx5KiBtYWtlIHN1cmUgdGhlIGNhbGxpbmcgZnVuYyBuZXZlciBwYXNzZXMgLTEhISAgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX25vZGVfbWFwX2luaXQoc3RydWN0IG9jZnMyX25vZGVfbWFwICptYXApCit7CisJbWFwLT5udW1fbm9kZXMgPSBPQ0ZTMl9OT0RFX01BUF9NQVhfTk9ERVM7CisJbWVtc2V0KG1hcC0+bWFwLCAwLCBCSVRTX1RPX0xPTkdTKE9DRlMyX05PREVfTUFQX01BWF9OT0RFUykgKgorCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpOworfQogCiB2b2lkIG9jZnMyX2luaXRfbm9kZV9tYXBzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCXNwaW5fbG9ja19pbml0KCZvc2ItPm5vZGVfbWFwX2xvY2spOwotCW9jZnMyX25vZGVfbWFwX2luaXQoJm9zYi0+cmVjb3ZlcnlfbWFwKTsKIAlvY2ZzMl9ub2RlX21hcF9pbml0KCZvc2ItPm9zYl9yZWNvdmVyaW5nX29ycGhhbl9kaXJzKTsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfZG9fbm9kZV9kb3duKGludCBub2RlX251bSwKLQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3ZvaWQgb2NmczJfZG9fbm9kZV9kb3duKGludCBub2RlX251bSwgdm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IGRhdGE7CisKIAlCVUdfT04ob3NiLT5ub2RlX251bSA9PSBub2RlX251bSk7CiAKIAltbG9nKDAsICJvY2ZzMjogbm9kZSBkb3duIGV2ZW50IGZvciAlZFxuIiwgbm9kZV9udW0pOwogCi0JaWYgKCFvc2ItPmRsbSkgeworCWlmICghb3NiLT5jY29ubikgewogCQkvKgotCQkgKiBObyBETE0gbWVhbnMgd2UncmUgbm90IGV2ZW4gcmVhZHkgdG8gcGFydGljaXBhdGUgeWV0LgotCQkgKiBXZSBjaGVjayB0aGUgc2xvdHMgYWZ0ZXIgdGhlIERMTSBjb21lcyB1cCwgc28gd2Ugd2lsbAotCQkgKiBub3RpY2UgdGhlIG5vZGUgZGVhdGggdGhlbi4gIFdlIGNhbiBzYWZlbHkgaWdub3JlIGl0Ci0JCSAqIGhlcmUuCisJCSAqIE5vIGNsdXN0ZXIgY29ubmVjdGlvbiBtZWFucyB3ZSdyZSBub3QgZXZlbiByZWFkeSB0bworCQkgKiBwYXJ0aWNpcGF0ZSB5ZXQuICBXZSBjaGVjayB0aGUgc2xvdHMgYWZ0ZXIgdGhlIGNsdXN0ZXIKKwkJICogY29tZXMgdXAsIHNvIHdlIHdpbGwgbm90aWNlIHRoZSBub2RlIGRlYXRoIHRoZW4uICBXZQorCQkgKiBjYW4gc2FmZWx5IGlnbm9yZSBpdCBoZXJlLgogCQkgKi8KIAkJcmV0dXJuOwogCX0KQEAgLTgxLDcwICs4Miw2IEBACiAJb2NmczJfcmVjb3ZlcnlfdGhyZWFkKG9zYiwgbm9kZV9udW0pOwogfQogCi0vKiBDYWxsZWQgZnJvbSB0aGUgZGxtIHdoZW4gaXQncyBhYm91dCB0byBldmljdCBhIG5vZGUuIFdlIG1heSBhbHNvCi0gKiBnZXQgYSBoZWFydGJlYXQgY2FsbGJhY2sgbGF0ZXIuICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9kbG1fZXZpY3Rpb25fY2IoaW50IG5vZGVfbnVtLAotCQkJCSAgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IChzdHJ1Y3Qgb2NmczJfc3VwZXIgKikgZGF0YTsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb3NiLT5zYjsKLQotCW1sb2coTUxfTk9USUNFLCAiZGV2aWNlICgldSwldSk6IGRsbSBoYXMgZXZpY3RlZCBub2RlICVkXG4iLAotCSAgICAgTUFKT1Ioc2ItPnNfZGV2KSwgTUlOT1Ioc2ItPnNfZGV2KSwgbm9kZV9udW0pOwotCi0Jb2NmczJfZG9fbm9kZV9kb3duKG5vZGVfbnVtLCBvc2IpOwotfQotCi12b2lkIG9jZnMyX3NldHVwX2hiX2NhbGxiYWNrcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKLXsKLQkvKiBOb3QgZXhhY3RseSBhIGhlYXJ0YmVhdCBjYWxsYmFjaywgYnV0IGxlYWRzIHRvIGVzc2VudGlhbGx5Ci0JICogdGhlIHNhbWUgcGF0aCBzbyB3ZSBzZXQgaXQgdXAgaGVyZS4gKi8KLQlkbG1fc2V0dXBfZXZpY3Rpb25fY2IoJm9zYi0+b3NiX2V2aWN0aW9uX2NiLAotCQkJICAgICAgb2NmczJfZGxtX2V2aWN0aW9uX2NiLAotCQkJICAgICAgb3NiKTsKLX0KLQotdm9pZCBvY2ZzMl9zdG9wX2hlYXJ0YmVhdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKLXsKLQlpbnQgcmV0OwotCWNoYXIgKmFyZ3ZbNV0sICplbnZwWzNdOwotCi0JaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCi0JCXJldHVybjsKLQotCWlmICghb3NiLT51dWlkX3N0cikgewotCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgZG9uJ3QgZ2V0IGZhciBlbm91Z2ggaW4gbW91bnQuLi4gKi8KLQkJbWxvZygwLCAiTm8gVVVJRCB3aXRoIHdoaWNoIHRvIHN0b3AgaGVhcnRiZWF0IVxuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWFyZ3ZbMF0gPSAoY2hhciAqKW8ybm1fZ2V0X2hiX2N0bF9wYXRoKCk7Ci0JYXJndlsxXSA9ICItSyI7Ci0JYXJndlsyXSA9ICItdSI7Ci0JYXJndlszXSA9IG9zYi0+dXVpZF9zdHI7Ci0JYXJndls0XSA9IE5VTEw7Ci0KLQltbG9nKDAsICJSdW46ICVzICVzICVzICVzXG4iLCBhcmd2WzBdLCBhcmd2WzFdLCBhcmd2WzJdLCBhcmd2WzNdKTsKLQotCS8qIG1pbmltYWwgY29tbWFuZCBlbnZpcm9ubWVudCB0YWtlbiBmcm9tIGNwdV9ydW5fc2Jpbl9ob3RwbHVnICovCi0JZW52cFswXSA9ICJIT01FPS8iOwotCWVudnBbMV0gPSAiUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiI7Ci0JZW52cFsyXSA9IE5VTEw7Ci0KLQlyZXQgPSBjYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIFVNSF9XQUlUX1BST0MpOwotCWlmIChyZXQgPCAwKQotCQltbG9nX2Vycm5vKHJldCk7Ci19Ci0KLS8qIHNwZWNpYWwgY2FzZSAtMSBmb3Igbm93Ci0gKiBUT0RPOiBzaG91bGQgKnJlYWxseSogbWFrZSBzdXJlIHRoZSBjYWxsaW5nIGZ1bmMgbmV2ZXIgcGFzc2VzIC0xISEgICovCi12b2lkIG9jZnMyX25vZGVfbWFwX2luaXQoc3RydWN0IG9jZnMyX25vZGVfbWFwICptYXApCi17Ci0JbWFwLT5udW1fbm9kZXMgPSBPQ0ZTMl9OT0RFX01BUF9NQVhfTk9ERVM7Ci0JbWVtc2V0KG1hcC0+bWFwLCAwLCBCSVRTX1RPX0xPTkdTKE9DRlMyX05PREVfTUFQX01BWF9OT0RFUykgKgotCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgX19vY2ZzMl9ub2RlX21hcF9zZXRfYml0KHN0cnVjdCBvY2ZzMl9ub2RlX21hcCAqbWFwLAogCQkJCQkgICAgaW50IGJpdCkKIHsKQEAgLTE5NiwxMDggKzEzMywzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19vY2ZzMl9ub2RlX21hcF9pc19lbXB0eShzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgKm1hcCkKLXsKLQlpbnQgYml0OwotCWJpdCA9IGZpbmRfbmV4dF9iaXQobWFwLT5tYXAsIG1hcC0+bnVtX25vZGVzLCAwKTsKLQlpZiAoYml0IDwgbWFwLT5udW1fbm9kZXMpCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi1pbnQgb2NmczJfbm9kZV9tYXBfaXNfZW1wdHkoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICAgc3RydWN0IG9jZnMyX25vZGVfbWFwICptYXApCi17Ci0JaW50IHJldDsKLQlCVUdfT04obWFwLT5udW1fbm9kZXMgPT0gMCk7Ci0Jc3Bpbl9sb2NrKCZvc2ItPm5vZGVfbWFwX2xvY2spOwotCXJldCA9IF9fb2NmczJfbm9kZV9tYXBfaXNfZW1wdHkobWFwKTsKLQlzcGluX3VubG9jaygmb3NiLT5ub2RlX21hcF9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX29jZnMyX25vZGVfbWFwX2R1cChzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgKnRhcmdldCwKLQkJCQkgc3RydWN0IG9jZnMyX25vZGVfbWFwICpmcm9tKQotewotCUJVR19PTihmcm9tLT5udW1fbm9kZXMgPT0gMCk7Ci0Jb2NmczJfbm9kZV9tYXBfaW5pdCh0YXJnZXQpOwotCV9fb2NmczJfbm9kZV9tYXBfc2V0KHRhcmdldCwgZnJvbSk7Ci19Ci0KLS8qIHJldHVybnMgMSBpZiBiaXQgaXMgdGhlIG9ubHkgYml0IHNldCBpbiB0YXJnZXQsIDAgb3RoZXJ3aXNlICovCi1pbnQgb2NmczJfbm9kZV9tYXBfaXNfb25seShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgIHN0cnVjdCBvY2ZzMl9ub2RlX21hcCAqdGFyZ2V0LAotCQkJICAgaW50IGJpdCkKLXsKLQlzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgdGVtcDsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrKCZvc2ItPm5vZGVfbWFwX2xvY2spOwotCV9fb2NmczJfbm9kZV9tYXBfZHVwKCZ0ZW1wLCB0YXJnZXQpOwotCV9fb2NmczJfbm9kZV9tYXBfY2xlYXJfYml0KCZ0ZW1wLCBiaXQpOwotCXJldCA9IF9fb2NmczJfbm9kZV9tYXBfaXNfZW1wdHkoJnRlbXApOwotCXNwaW5fdW5sb2NrKCZvc2ItPm5vZGVfbWFwX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19vY2ZzMl9ub2RlX21hcF9zZXQoc3RydWN0IG9jZnMyX25vZGVfbWFwICp0YXJnZXQsCi0JCQkJIHN0cnVjdCBvY2ZzMl9ub2RlX21hcCAqZnJvbSkKLXsKLQlpbnQgbnVtX2xvbmdzLCBpOwotCi0JQlVHX09OKHRhcmdldC0+bnVtX25vZGVzICE9IGZyb20tPm51bV9ub2Rlcyk7Ci0JQlVHX09OKHRhcmdldC0+bnVtX25vZGVzID09IDApOwotCi0JbnVtX2xvbmdzID0gQklUU19UT19MT05HUyh0YXJnZXQtPm51bV9ub2Rlcyk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9sb25nczsgaSsrKQotCQl0YXJnZXQtPm1hcFtpXSA9IGZyb20tPm1hcFtpXTsKLX0KLQotLyogUmV0dXJucyB3aGV0aGVyIHRoZSByZWNvdmVyeSBiaXQgd2FzIGFjdHVhbGx5IHNldCAtIGl0IG1heSBub3QgYmUKLSAqIGlmIGEgbm9kZSBpcyBzdGlsbCBtYXJrZWQgYXMgbmVlZGluZyByZWNvdmVyeSAqLwotaW50IG9jZnMyX3JlY292ZXJ5X21hcF9zZXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICBpbnQgbnVtKQotewotCWludCBzZXQgPSAwOwotCi0Jc3Bpbl9sb2NrKCZvc2ItPm5vZGVfbWFwX2xvY2spOwotCi0JaWYgKCF0ZXN0X2JpdChudW0sIG9zYi0+cmVjb3ZlcnlfbWFwLm1hcCkpIHsKLQkgICAgX19vY2ZzMl9ub2RlX21hcF9zZXRfYml0KCZvc2ItPnJlY292ZXJ5X21hcCwgbnVtKTsKLQkgICAgc2V0ID0gMTsKLQl9Ci0KLQlzcGluX3VubG9jaygmb3NiLT5ub2RlX21hcF9sb2NrKTsKLQotCXJldHVybiBzZXQ7Ci19Ci0KLXZvaWQgb2NmczJfcmVjb3ZlcnlfbWFwX2NsZWFyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgICAgaW50IG51bSkKLXsKLQlvY2ZzMl9ub2RlX21hcF9jbGVhcl9iaXQob3NiLCAmb3NiLT5yZWNvdmVyeV9tYXAsIG51bSk7Ci19Ci0KLWludCBvY2ZzMl9ub2RlX21hcF9pdGVyYXRlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgc3RydWN0IG9jZnMyX25vZGVfbWFwICptYXAsCi0JCQkgICBpbnQgaWR4KQotewotCWludCBpID0gaWR4OwotCi0JaWR4ID0gTzJOTV9JTlZBTElEX05PREVfTlVNOwotCXNwaW5fbG9jaygmb3NiLT5ub2RlX21hcF9sb2NrKTsKLQlpZiAoKGkgIT0gTzJOTV9JTlZBTElEX05PREVfTlVNKSAmJgotCSAgICAoaSA+PSAwKSAmJgotCSAgICAoaSA8IG1hcC0+bnVtX25vZGVzKSkgewotCQl3aGlsZShpIDwgbWFwLT5udW1fbm9kZXMpIHsKLQkJCWlmICh0ZXN0X2JpdChpLCBtYXAtPm1hcCkpIHsKLQkJCQlpZHggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaSsrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZvc2ItPm5vZGVfbWFwX2xvY2spOwotCXJldHVybiBpZHg7Ci19CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9oZWFydGJlYXQuaCBiL2ZzL29jZnMyL2hlYXJ0YmVhdC5oCmluZGV4IDU2ODU5MjEuLjc0YjljNWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2hlYXJ0YmVhdC5oCisrKyBiL2ZzL29jZnMyL2hlYXJ0YmVhdC5oCkBAIC0yOCwxNCArMjgsMTAgQEAKIAogdm9pZCBvY2ZzMl9pbml0X25vZGVfbWFwcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiAKLXZvaWQgb2NmczJfc2V0dXBfaGJfY2FsbGJhY2tzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKLXZvaWQgb2NmczJfc3RvcF9oZWFydGJlYXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwordm9pZCBvY2ZzMl9kb19ub2RlX2Rvd24oaW50IG5vZGVfbnVtLCB2b2lkICpkYXRhKTsKIAogLyogbm9kZSBtYXAgZnVuY3Rpb25zIC0gdXNlZCB0byBrZWVwIHRyYWNrIG9mIG1vdW50ZWQgYW5kIGluLXJlY292ZXJ5CiAgKiBub2Rlcy4gKi8KLXZvaWQgb2NmczJfbm9kZV9tYXBfaW5pdChzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgKm1hcCk7Ci1pbnQgb2NmczJfbm9kZV9tYXBfaXNfZW1wdHkoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICAgc3RydWN0IG9jZnMyX25vZGVfbWFwICptYXApOwogdm9pZCBvY2ZzMl9ub2RlX21hcF9zZXRfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9ub2RlX21hcCAqbWFwLAogCQkJICAgIGludCBiaXQpOwpAQCAtNDUsMjEgKzQxLDUgQEAKIGludCBvY2ZzMl9ub2RlX21hcF90ZXN0X2JpdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICBzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgKm1hcCwKIAkJCSAgICBpbnQgYml0KTsKLWludCBvY2ZzMl9ub2RlX21hcF9pdGVyYXRlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgc3RydWN0IG9jZnMyX25vZGVfbWFwICptYXAsCi0JCQkgICBpbnQgaWR4KTsKLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX25vZGVfbWFwX2ZpcnN0X3NldF9iaXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgKm1hcCkKLXsKLQlyZXR1cm4gb2NmczJfbm9kZV9tYXBfaXRlcmF0ZShvc2IsIG1hcCwgMCk7Ci19Ci1pbnQgb2NmczJfcmVjb3ZlcnlfbWFwX3NldChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgIGludCBudW0pOwotdm9pZCBvY2ZzMl9yZWNvdmVyeV9tYXBfY2xlYXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICAgICBpbnQgbnVtKTsKLS8qIHJldHVybnMgMSBpZiBiaXQgaXMgdGhlIG9ubHkgYml0IHNldCBpbiB0YXJnZXQsIDAgb3RoZXJ3aXNlICovCi1pbnQgb2NmczJfbm9kZV9tYXBfaXNfb25seShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgIHN0cnVjdCBvY2ZzMl9ub2RlX21hcCAqdGFyZ2V0LAotCQkJICAgaW50IGJpdCk7CiAKICNlbmRpZiAvKiBPQ0ZTMl9IRUFSVEJFQVRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW9jdGwuYyBiL2ZzL29jZnMyL2lvY3RsLmMKaW5kZXggNTE3N2ZiYS4uN2IxNDJmMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW9jdGwuYworKysgYi9mcy9vY2ZzMi9pb2N0bC5jCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9JTk9ERQogI2luY2x1ZGUgPGNsdXN0ZXIvbWFza2xvZy5oPgpAQCAtNTksMTAgKzYwLDYgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXN0YXR1cyA9IC1FUk9GUzsKLQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJZ290byBiYWlsX3VubG9jazsKLQogCXN0YXR1cyA9IC1FQUNDRVM7CiAJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQogCQlnb3RvIGJhaWxfdW5sb2NrOwpAQCAtMTEyLDkgKzEwOSw5IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IG9jZnMyX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsCi0JdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitsb25nIG9jZnMyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJaW50IG5ld19jbHVzdGVyczsKIAlpbnQgc3RhdHVzOwpAQCAtMTMzLDggKzEzMCwxMyBAQAogCQlpZiAoZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlyZXR1cm4gb2NmczJfc2V0X2lub2RlX2F0dHIoaW5vZGUsIGZsYWdzLAorCQlzdGF0dXMgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisJCXN0YXR1cyA9IG9jZnMyX3NldF9pbm9kZV9hdHRyKGlub2RlLCBmbGFncywKIAkJCU9DRlMyX0ZMX01PRElGSUFCTEUpOworCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJcmV0dXJuIHN0YXR1czsKIAljYXNlIE9DRlMyX0lPQ19SRVNWU1A6CiAJY2FzZSBPQ0ZTMl9JT0NfUkVTVlNQNjQ6CiAJY2FzZSBPQ0ZTMl9JT0NfVU5SRVNWU1A6CkBAIC0xNjgsOSArMTcwLDYgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBsb25nIG9jZnMyX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgcmV0OwotCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE9DRlMyX0lPQzMyX0dFVEZMQUdTOgogCQljbWQgPSBPQ0ZTMl9JT0NfR0VURkxBR1M7CkBAIC0xOTAsOSArMTg5LDYgQEAKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAKLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IG9jZnMyX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIG9jZnMyX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW9jdGwuaCBiL2ZzL29jZnMyL2lvY3RsLmgKaW5kZXggNGQ2YzRmNC4uY2Y5YTVlZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW9jdGwuaAorKysgYi9mcy9vY2ZzMi9pb2N0bC5oCkBAIC0xMCw4ICsxMCw3IEBACiAjaWZuZGVmIE9DRlMyX0lPQ1RMX0gKICNkZWZpbmUgT0NGUzJfSU9DVExfSAogCi1pbnQgb2NmczJfaW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCwKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Citsb25nIG9jZnMyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBsb25nIG9jZnMyX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKICNlbmRpZiAvKiBPQ0ZTMl9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggZjMxYzdlOC4uOTY5ODMzOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtNjQsNiArNjQsMTM3IEBACiAJCQkJIGludCBzbG90KTsKIHN0YXRpYyBpbnQgb2NmczJfY29tbWl0X3RocmVhZCh2b2lkICphcmcpOwogCisKKy8qCisgKiBUaGUgcmVjb3ZlcnlfbGlzdCBpcyBhIHNpbXBsZSBsaW5rZWQgbGlzdCBvZiBub2RlIG51bWJlcnMgdG8gcmVjb3Zlci4KKyAqIEl0IGlzIHByb3RlY3RlZCBieSB0aGUgcmVjb3ZlcnlfbG9jay4KKyAqLworCitzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwIHsKKwl1bnNpZ25lZCBpbnQgcm1fdXNlZDsKKwl1bnNpZ25lZCBpbnQgKnJtX2VudHJpZXM7Cit9OworCitpbnQgb2NmczJfcmVjb3ZlcnlfaW5pdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpybTsKKworCW11dGV4X2luaXQoJm9zYi0+cmVjb3ZlcnlfbG9jayk7CisJb3NiLT5kaXNhYmxlX3JlY292ZXJ5ID0gMDsKKwlvc2ItPnJlY292ZXJ5X3RocmVhZF90YXNrID0gTlVMTDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvc2ItPnJlY292ZXJ5X2V2ZW50KTsKKworCXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCkgKworCQkgICAgIG9zYi0+bWF4X3Nsb3RzICogc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFybSkgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlybS0+cm1fZW50cmllcyA9ICh1bnNpZ25lZCBpbnQgKikoKGNoYXIgKilybSArCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWNvdmVyeV9tYXApKTsKKwlvc2ItPnJlY292ZXJ5X21hcCA9IHJtOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHdlIGNhbid0IGdyYWIgdGhlIGdvb2Z5IHNlbSBsb2NrIGZyb20gaW5zaWRlIHdhaXRfZXZlbnQsIHNvIHdlIHVzZQorICogbWVtb3J5IGJhcnJpZXJzIHRvIG1ha2Ugc3VyZSB0aGF0IHdlJ2xsIHNlZSB0aGUgbnVsbCB0YXNrIGJlZm9yZQorICogYmVpbmcgd29rZW4gdXAgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVjb3ZlcnlfdGhyZWFkX3J1bm5pbmcoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJbWIoKTsKKwlyZXR1cm4gb3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzayAhPSBOVUxMOworfQorCit2b2lkIG9jZnMyX3JlY292ZXJ5X2V4aXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCAqcm07CisKKwkvKiBkaXNhYmxlIGFueSBuZXcgcmVjb3ZlcnkgdGhyZWFkcyBhbmQgd2FpdCBmb3IgYW55IGN1cnJlbnRseQorCSAqIHJ1bm5pbmcgb25lcyB0byBleGl0LiBEbyB0aGlzIGJlZm9yZSBzZXR0aW5nIHRoZSB2b2xfc3RhdGUuICovCisJbXV0ZXhfbG9jaygmb3NiLT5yZWNvdmVyeV9sb2NrKTsKKwlvc2ItPmRpc2FibGVfcmVjb3ZlcnkgPSAxOworCW11dGV4X3VubG9jaygmb3NiLT5yZWNvdmVyeV9sb2NrKTsKKwl3YWl0X2V2ZW50KG9zYi0+cmVjb3ZlcnlfZXZlbnQsICFvY2ZzMl9yZWNvdmVyeV90aHJlYWRfcnVubmluZyhvc2IpKTsKKworCS8qIEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCBubyBtb3JlIHJlY292ZXJ5IHRocmVhZHMgY2FuIGJlCisJICogbGF1bmNoZWQsIHNvIHdhaXQgZm9yIGFueSByZWNvdmVyeSBjb21wbGV0aW9uIHdvcmsgdG8KKwkgKiBjb21wbGV0ZS4gKi8KKwlmbHVzaF93b3JrcXVldWUob2NmczJfd3EpOworCisJLyoKKwkgKiBOb3cgdGhhdCByZWNvdmVyeSBpcyBzaHV0IGRvd24sIGFuZCB0aGUgb3NiIGlzIGFib3V0IHRvIGJlCisJICogZnJlZWQsICB0aGUgb3NiX2xvY2sgaXMgbm90IHRha2VuIGhlcmUuCisJICovCisJcm0gPSBvc2ItPnJlY292ZXJ5X21hcDsKKwkvKiBYWFg6IFNob3VsZCB3ZSBidWcgaWYgdGhlcmUgYXJlIGRpcnR5IGVudHJpZXM/ICovCisKKwlrZnJlZShybSk7Cit9CisKK3N0YXRpYyBpbnQgX19vY2ZzMl9yZWNvdmVyeV9tYXBfdGVzdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBub2RlX251bSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpybSA9IG9zYi0+cmVjb3ZlcnlfbWFwOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZvc2ItPm9zYl9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBybS0+cm1fdXNlZDsgaSsrKSB7CisJCWlmIChybS0+cm1fZW50cmllc1tpXSA9PSBub2RlX251bSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKiBCZWhhdmVzIGxpa2UgdGVzdC1hbmQtc2V0LiAgUmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVjb3ZlcnlfbWFwX3NldChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgIHVuc2lnbmVkIGludCBub2RlX251bSkKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpybSA9IG9zYi0+cmVjb3ZlcnlfbWFwOworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlpZiAoX19vY2ZzMl9yZWNvdmVyeV9tYXBfdGVzdChvc2IsIG5vZGVfbnVtKSkgeworCQlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJCXJldHVybiAxOworCX0KKworCS8qIFhYWDogQ2FuIHRoaXMgYmUgZXhwbG9pdGVkPyBOb3QgZnJvbSBvMmRsbS4uLiAqLworCUJVR19PTihybS0+cm1fdXNlZCA+PSBvc2ItPm1heF9zbG90cyk7CisKKwlybS0+cm1fZW50cmllc1tybS0+cm1fdXNlZF0gPSBub2RlX251bTsKKwlybS0+cm1fdXNlZCsrOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9yZWNvdmVyeV9tYXBfY2xlYXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgbm9kZV9udW0pCit7CisJaW50IGk7CisJc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCAqcm0gPSBvc2ItPnJlY292ZXJ5X21hcDsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm0tPnJtX3VzZWQ7IGkrKykgeworCQlpZiAocm0tPnJtX2VudHJpZXNbaV0gPT0gbm9kZV9udW0pCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA8IHJtLT5ybV91c2VkKSB7CisJCS8qIFhYWDogYmUgY2FyZWZ1bCB3aXRoIHRoZSBwb2ludGVyIG1hdGggKi8KKwkJbWVtbW92ZSgmKHJtLT5ybV9lbnRyaWVzW2ldKSwgJihybS0+cm1fZW50cmllc1tpICsgMV0pLAorCQkJKHJtLT5ybV91c2VkIC0gaSAtIDEpICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCQlybS0+cm1fdXNlZC0tOworCX0KKworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKK30KKwogc3RhdGljIGludCBvY2ZzMl9jb21taXRfY2FjaGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJaW50IHN0YXR1cyA9IDA7CkBAIC01ODYsOCArNzE3LDcgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0JaWYgKCFqb3VybmFsKQotCQlCVUcoKTsKKwlCVUdfT04oIWpvdXJuYWwpOwogCiAJb3NiID0gam91cm5hbC0+al9vc2I7CiAKQEAgLTY1MCw2ICs3ODAsMjMgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG9jZnMyX3JlY292ZXJ5X2NvbXBsZXRlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlpbnQgZW1wdHk7CisJc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCAqcm0gPSBvc2ItPnJlY292ZXJ5X21hcDsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJZW1wdHkgPSAocm0tPnJtX3VzZWQgPT0gMCk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJcmV0dXJuIGVtcHR5OworfQorCit2b2lkIG9jZnMyX3dhaXRfZm9yX3JlY292ZXJ5KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXdhaXRfZXZlbnQob3NiLT5yZWNvdmVyeV9ldmVudCwgb2NmczJfcmVjb3ZlcnlfY29tcGxldGVkKG9zYikpOworfQorCiAvKgogICogSkJEIE1pZ2h0IHJlYWQgYSBjYWNoZWQgdmVyc2lvbiBvZiBhbm90aGVyIG5vZGVzIGpvdXJuYWwgZmlsZS4gV2UKICAqIGRvbid0IHdhbnQgdGhpcyBhcyB0aGlzIGZpbGUgY2hhbmdlcyBvZnRlbiBhbmQgd2UgZ2V0IG5vCkBAIC04NDgsNiArOTk1LDcgQEAKIHsKIAlpbnQgc3RhdHVzLCBub2RlX251bTsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IGFyZzsKKwlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpybSA9IG9zYi0+cmVjb3ZlcnlfbWFwOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTg2MywyNiArMTAxMSwyOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jd2hpbGUoIW9jZnMyX25vZGVfbWFwX2lzX2VtcHR5KG9zYiwgJm9zYi0+cmVjb3ZlcnlfbWFwKSkgewotCQlub2RlX251bSA9IG9jZnMyX25vZGVfbWFwX2ZpcnN0X3NldF9iaXQob3NiLAotCQkJCQkJCSZvc2ItPnJlY292ZXJ5X21hcCk7Ci0JCWlmIChub2RlX251bSA9PSBPMk5NX0lOVkFMSURfTk9ERV9OVU0pIHsKLQkJCW1sb2coMCwgIk91dCBvZiBub2RlcyB0byByZWNvdmVyLlxuIik7Ci0JCQlicmVhazsKLQkJfQorCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJd2hpbGUgKHJtLT5ybV91c2VkKSB7CisJCS8qIEl0J3MgYWx3YXlzIHNhZmUgdG8gcmVtb3ZlIGVudHJ5IHplcm8sIGFzIHdlIHdvbid0CisJCSAqIGNsZWFyIGl0IHVudGlsIG9jZnMyX3JlY292ZXJfbm9kZSgpIGhhcyBzdWNjZWVkZWQuICovCisJCW5vZGVfbnVtID0gcm0tPnJtX2VudHJpZXNbMF07CisJCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAogCQlzdGF0dXMgPSBvY2ZzMl9yZWNvdmVyX25vZGUob3NiLCBub2RlX251bSk7Ci0JCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmICghc3RhdHVzKSB7CisJCQlvY2ZzMl9yZWNvdmVyeV9tYXBfY2xlYXIob3NiLCBub2RlX251bSk7CisJCX0gZWxzZSB7CiAJCQltbG9nKE1MX0VSUk9SLAogCQkJICAgICAiRXJyb3IgJWQgcmVjb3ZlcmluZyBub2RlICVkIG9uIGRldmljZSAoJXUsJXUpIVxuIiwKIAkJCSAgICAgc3RhdHVzLCBub2RlX251bSwKIAkJCSAgICAgTUFKT1Iob3NiLT5zYi0+c19kZXYpLCBNSU5PUihvc2ItPnNiLT5zX2RldikpOwogCQkJbWxvZyhNTF9FUlJPUiwgIlZvbHVtZSByZXF1aXJlcyB1bm1vdW50LlxuIik7Ci0JCQljb250aW51ZTsKIAkJfQogCi0JCW9jZnMyX3JlY292ZXJ5X21hcF9jbGVhcihvc2IsIG5vZGVfbnVtKTsKKwkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAl9CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCW1sb2coMCwgIkFsbCBub2RlcyByZWNvdmVyZWRcbiIpOworCiAJb2NmczJfc3VwZXJfdW5sb2NrKG9zYiwgMSk7CiAKIAkvKiBXZSBhbHdheXMgcnVuIHJlY292ZXJ5IG9uIG91ciBvd24gb3JwaGFuIGRpciAtIHRoZSBkZWFkCkBAIC04OTMsOCArMTA0NCw3IEBACiAKIGJhaWw6CiAJbXV0ZXhfbG9jaygmb3NiLT5yZWNvdmVyeV9sb2NrKTsKLQlpZiAoIXN0YXR1cyAmJgotCSAgICAhb2NmczJfbm9kZV9tYXBfaXNfZW1wdHkob3NiLCAmb3NiLT5yZWNvdmVyeV9tYXApKSB7CisJaWYgKCFzdGF0dXMgJiYgIW9jZnMyX3JlY292ZXJ5X2NvbXBsZXRlZChvc2IpKSB7CiAJCW11dGV4X3VubG9jaygmb3NiLT5yZWNvdmVyeV9sb2NrKTsKIAkJZ290byByZXN0YXJ0OwogCX0KQEAgLTkyNCw4ICsxMDc0LDggQEAKIAogCS8qIFBlb3BsZSB3YWl0aW5nIG9uIHJlY292ZXJ5IHdpbGwgd2FpdCBvbgogCSAqIHRoZSByZWNvdmVyeSBtYXAgdG8gZW1wdHkuICovCi0JaWYgKCFvY2ZzMl9yZWNvdmVyeV9tYXBfc2V0KG9zYiwgbm9kZV9udW0pKQotCQltbG9nKDAsICJub2RlICVkIGFscmVhZHkgYmUgaW4gcmVjb3ZlcnkuXG4iLCBub2RlX251bSk7CisJaWYgKG9jZnMyX3JlY292ZXJ5X21hcF9zZXQob3NiLCBub2RlX251bSkpCisJCW1sb2coMCwgIm5vZGUgJWQgYWxyZWFkeSBpbiByZWNvdmVyeSBtYXAuXG4iLCBub2RlX251bSk7CiAKIAltbG9nKDAsICJzdGFydGluZyByZWNvdmVyeSB0aHJlYWQuLi5cbiIpOwogCkBAIC0xMDc5LDcgKzEyMjksNiBAQAogewogCWludCBzdGF0dXMgPSAwOwogCWludCBzbG90X251bTsKLQlzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSA9IG9zYi0+c2xvdF9pbmZvOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmxhX2NvcHkgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKnRsX2NvcHkgPSBOVUxMOwogCkBAIC0xMDkyLDggKzEyNDEsOCBAQAogCSAqIGNhc2Ugd2Ugc2hvdWxkJ3ZlIGNhbGxlZCBvY2ZzMl9qb3VybmFsX2xvYWQgaW5zdGVhZC4gKi8KIAlCVUdfT04ob3NiLT5ub2RlX251bSA9PSBub2RlX251bSk7CiAKLQlzbG90X251bSA9IG9jZnMyX25vZGVfbnVtX3RvX3Nsb3Qoc2ksIG5vZGVfbnVtKTsKLQlpZiAoc2xvdF9udW0gPT0gT0NGUzJfSU5WQUxJRF9TTE9UKSB7CisJc2xvdF9udW0gPSBvY2ZzMl9ub2RlX251bV90b19zbG90KG9zYiwgbm9kZV9udW0pOworCWlmIChzbG90X251bSA9PSAtRU5PRU5UKSB7CiAJCXN0YXR1cyA9IDA7CiAJCW1sb2coMCwgIm5vIHNsb3QgZm9yIHRoaXMgbm9kZSwgc28gbm8gcmVjb3ZlcnkgcmVxdWlyZWQuXG4iKTsKIAkJZ290byBkb25lOwpAQCAtMTEyMyw4ICsxMjcyLDcgQEAKIAogCS8qIExpa2V3aXNlLCB0aGlzIHdvdWxkIGJlIGEgc3RyYW5nZSBidXQgdWx0aW1hdGVseSBub3Qgc28KIAkgKiBoYXJtZnVsIHBsYWNlIHRvIGdldCBhbiBlcnJvci4uLiAqLwotCW9jZnMyX2NsZWFyX3Nsb3Qoc2ksIHNsb3RfbnVtKTsKLQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZGlza19zbG90cyhvc2IsIHNpKTsKKwlzdGF0dXMgPSBvY2ZzMl9jbGVhcl9zbG90KG9zYiwgc2xvdF9udW0pOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAKQEAgLTExODQsMjMgKzEzMzIsMjQgQEAKICAqIHNsb3QgaW5mbyBzdHJ1Y3QgaGFzIGJlZW4gdXBkYXRlZCBmcm9tIGRpc2suICovCiBpbnQgb2NmczJfbWFya19kZWFkX25vZGVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewotCWludCBzdGF0dXMsIGksIG5vZGVfbnVtOwotCXN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpID0gb3NiLT5zbG90X2luZm87CisJdW5zaWduZWQgaW50IG5vZGVfbnVtOworCWludCBzdGF0dXMsIGk7CiAKIAkvKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBzdXBlciBibG9jayBjbHVzdGVyIGxvY2ssIHNvIHdlCiAJICoga25vdyB0aGF0IHRoZSBzbG90IG1hcCBjYW4ndCBjaGFuZ2UgdW5kZXJuZWF0aCB1cy4gKi8KIAotCXNwaW5fbG9jaygmc2ktPnNpX2xvY2spOwotCWZvcihpID0gMDsgaSA8IHNpLT5zaV9udW1fc2xvdHM7IGkrKykgeworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IG9zYi0+bWF4X3Nsb3RzOyBpKyspIHsKIAkJaWYgKGkgPT0gb3NiLT5zbG90X251bSkKIAkJCWNvbnRpbnVlOwotCQlpZiAob2NmczJfaXNfZW1wdHlfc2xvdChzaSwgaSkpCisKKwkJc3RhdHVzID0gb2NmczJfc2xvdF90b19ub2RlX251bV9sb2NrZWQob3NiLCBpLCAmbm9kZV9udW0pOworCQlpZiAoc3RhdHVzID09IC1FTk9FTlQpCiAJCQljb250aW51ZTsKIAotCQlub2RlX251bSA9IHNpLT5zaV9nbG9iYWxfbm9kZV9udW1zW2ldOwotCQlpZiAob2NmczJfbm9kZV9tYXBfdGVzdF9iaXQob3NiLCAmb3NiLT5yZWNvdmVyeV9tYXAsIG5vZGVfbnVtKSkKKwkJaWYgKF9fb2NmczJfcmVjb3ZlcnlfbWFwX3Rlc3Qob3NiLCBub2RlX251bSkpCiAJCQljb250aW51ZTsKLQkJc3Bpbl91bmxvY2soJnNpLT5zaV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwogCiAJCS8qIE9rLCB3ZSBoYXZlIGEgc2xvdCBvY2N1cGllZCBieSBhbm90aGVyIG5vZGUgd2hpY2gKIAkJICogaXMgbm90IGluIHRoZSByZWNvdmVyeSBtYXAuIFdlIHRyeWxvY2sgaGlzIGpvdXJuYWwKQEAgLTEyMTYsOSArMTM2NSw5IEBACiAJCQlnb3RvIGJhaWw7CiAJCX0KIAotCQlzcGluX2xvY2soJnNpLT5zaV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNpLT5zaV9sb2NrKTsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiAKIAlzdGF0dXMgPSAwOwogYmFpbDoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCAyMjBmM2U4Li5kYjgyYmUyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC0xMzQsNiArMTM0LDEwIEBACiAKIC8qIEV4cG9ydGVkIG9ubHkgZm9yIHRoZSBqb3VybmFsIHN0cnVjdCBpbml0IGNvZGUgaW4gc3VwZXIuYy4gRG8gbm90IGNhbGwuICovCiB2b2lkIG9jZnMyX2NvbXBsZXRlX3JlY292ZXJ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIG9jZnMyX3dhaXRfZm9yX3JlY292ZXJ5KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKKworaW50IG9jZnMyX3JlY292ZXJ5X2luaXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwordm9pZCBvY2ZzMl9yZWNvdmVyeV9leGl0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIAogLyoKICAqICBKb3VybmFsIENvbnRyb2w6CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKaW5kZXggYWRkMWZmZC4uY2UwZGMxNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jCisrKyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwpAQCAtMTIwLDkgKzEyMCw2IEBACiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAotCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQotCQlnb3RvIGJhaWw7Ci0KIAlpZiAob3NiLT5sb2NhbF9hbGxvY19zaXplID09IDApCiAJCWdvdG8gYmFpbDsKIApAQCAtNDUwLDYgKzQ0Nyw4IEBACiAJaXB1dChtYWluX2JtX2lub2RlKTsKIAogb3V0OgorCWlmICghc3RhdHVzKQorCQlvY2ZzMl9pbml0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTI2LDYgKzUyNSw4IEBACiAJfQogCiAJYWMtPmFjX2lub2RlID0gbG9jYWxfYWxsb2NfaW5vZGU7CisJLyogV2Ugc2hvdWxkIG5ldmVyIHVzZSBsb2NhbGFsbG9jIGZyb20gYW5vdGhlciBzbG90ICovCisJYWMtPmFjX2FsbG9jX3Nsb3QgPSBvc2ItPnNsb3RfbnVtOwogCWFjLT5hY193aGljaCA9IE9DRlMyX0FDX1VTRV9MT0NBTDsKIAlnZXRfYmgob3NiLT5sb2NhbF9hbGxvY19iaCk7CiAJYWMtPmFjX2JoID0gb3NiLT5sb2NhbF9hbGxvY19iaDsKQEAgLTU4OCw4ICs1ODksNyBAQAogCXdoaWxlKGJpdHNfd2FudGVkLS0pCiAJCW9jZnMyX3NldF9iaXQoc3RhcnQrKywgYml0bWFwKTsKIAotCWFsbG9jLT5pZDEuYml0bWFwMS5pX3VzZWQgPSBjcHVfdG9fbGUzMigqbnVtX2JpdHMgKwotCQkJCWxlMzJfdG9fY3B1KGFsbG9jLT5pZDEuYml0bWFwMS5pX3VzZWQpKTsKKwlsZTMyX2FkZF9jcHUoJmFsbG9jLT5pZDEuYml0bWFwMS5pX3VzZWQsICpudW1fYml0cyk7CiAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgb3NiLT5sb2NhbF9hbGxvY19iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IGFlOWFkOTUuLmQ1ZDgwOGYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtNDI0LDcgKzQyNCw3IEBACiAJZmUtPmlfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CiAJZmUtPmlfYmxrbm8gPSBjcHVfdG9fbGU2NChmZV9ibGtubyk7CiAJZmUtPmlfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0KTsKLQlmZS0+aV9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJZmUtPmlfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KGlub2RlX2FjLT5hY19hbGxvY19zbG90KTsKIAlmZS0+aV91aWQgPSBjcHVfdG9fbGUzMihjdXJyZW50LT5mc3VpZCk7CiAJaWYgKGRpci0+aV9tb2RlICYgU19JU0dJRCkgewogCQlmZS0+aV9naWQgPSBjcHVfdG9fbGUzMihkaXItPmlfZ2lkKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQAogCSAqCiAJICogQW5kIHRoYXQncyB3aHksIGp1c3QgbGlrZSB0aGUgVkZTLCB3ZSBuZWVkIGEgZmlsZSBzeXN0ZW0KIAkgKiByZW5hbWUgbG9jay4gKi8KLQlpZiAob2xkX2RlbnRyeSAhPSBuZXdfZGVudHJ5KSB7CisJaWYgKG9sZF9kaXIgIT0gbmV3X2RpciAmJiBTX0lTRElSKG9sZF9pbm9kZS0+aV9tb2RlKSkgewogCQlzdGF0dXMgPSBvY2ZzMl9yZW5hbWVfbG9jayhvc2IpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggNjU0NmNlZi4uMzE2OTIzNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC0zNiwxMSArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvamJkLmg+CiAKLSNpbmNsdWRlICJjbHVzdGVyL25vZGVtYW5hZ2VyLmgiCi0jaW5jbHVkZSAiY2x1c3Rlci9oZWFydGJlYXQuaCIKLSNpbmNsdWRlICJjbHVzdGVyL3RjcC5oIgotCi0jaW5jbHVkZSAiZGxtL2RsbWFwaS5oIgorLyogRm9yIHVuaW9uIG9jZnMyX2RsbV9sa3NiICovCisjaW5jbHVkZSAic3RhY2tnbHVlLmgiCiAKICNpbmNsdWRlICJvY2ZzMl9mcy5oIgogI2luY2x1ZGUgIm9jZnMyX2xvY2tpZC5oIgpAQCAtMTAxLDYgKzk4LDkgQEAKIAkJCQkJICAgICAgICogZHJvcHBlZC4gKi8KICNkZWZpbmUgT0NGUzJfTE9DS19RVUVVRUQgICAgICAgICgweDAwMDAwMTAwKSAvKiBxdWV1ZWQgZm9yIGRvd25jb252ZXJ0ICovCiAjZGVmaW5lIE9DRlMyX0xPQ0tfTk9DQUNIRSAgICAgICAoMHgwMDAwMDIwMCkgLyogZG9uJ3QgdXNlIGEgaG9sZGVyIGNvdW50ICovCisjZGVmaW5lIE9DRlMyX0xPQ0tfUEVORElORyAgICAgICAoMHgwMDAwMDQwMCkgLyogVGhpcyBsb2NrcmVzIGlzIHBlbmRpbmcgYQorCQkJCQkJIGNhbGwgdG8gZGxtX2xvY2suICBPbmx5CisJCQkJCQkgZXhpc3RzIHdpdGggQlVTWSBzZXQuICovCiAKIHN0cnVjdCBvY2ZzMl9sb2NrX3Jlc19vcHM7CiAKQEAgLTEyMCwxMyArMTIwLDE0IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgIGxfbGV2ZWw7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgIGxfcm9faG9sZGVyczsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgbF9leF9ob2xkZXJzOwotCXN0cnVjdCBkbG1fbG9ja3N0YXR1cyAgICBsX2xrc2I7CisJdW5pb24gb2NmczJfZGxtX2xrc2IgICAgIGxfbGtzYjsKIAogCS8qIHVzZWQgZnJvbSBBU1QvQkFTVCBmdW5jcy4gKi8KIAllbnVtIG9jZnMyX2FzdF9hY3Rpb24gICAgbF9hY3Rpb247CiAJZW51bSBvY2ZzMl91bmxvY2tfYWN0aW9uIGxfdW5sb2NrX2FjdGlvbjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9yZXF1ZXN0ZWQ7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgIGxfYmxvY2tpbmc7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgIGxfcGVuZGluZ19nZW47CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgbF9ldmVudDsKIApAQCAtMTc5LDYgKzE4MCw4IEBACiAjZGVmaW5lIE9DRlMyX0RFRkFVTFRfQVRJTUVfUVVBTlRVTQk2MAogCiBzdHJ1Y3Qgb2NmczJfam91cm5hbDsKK3N0cnVjdCBvY2ZzMl9zbG90X2luZm87CitzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwOwogc3RydWN0IG9jZnMyX3N1cGVyCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjb21taXRfdGFzazsKQEAgLTE5MCw3ICsxOTMsNiBAQAogCXN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNsb3RfaW5mbzsKIAogCXNwaW5sb2NrX3Qgbm9kZV9tYXBfbG9jazsKLQlzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgcmVjb3ZlcnlfbWFwOwogCiAJdTY0IHJvb3RfYmxrbm87CiAJdTY0IHN5c3RlbV9kaXJfYmxrbm87CkBAIC0yMDYsMjUgKzIwOCwyOSBAQAogCXUzMiBzX2ZlYXR1cmVfaW5jb21wYXQ7CiAJdTMyIHNfZmVhdHVyZV9yb19jb21wYXQ7CiAKLQkvKiBQcm90ZWN0cyBzX25leHRfZ2VuZXJhaW9uLCBvc2JfZmxhZ3MuIENvdWxkIHByb3RlY3QgbW9yZSBvbgotCSAqIG9zYiBhcyBpdCdzIHZlcnkgc2hvcnQgbGl2ZWQuICovCisJLyogUHJvdGVjdHMgc19uZXh0X2dlbmVyYXRpb24sIG9zYl9mbGFncyBhbmQgc19pbm9kZV9zdGVhbF9zbG90LgorCSAqIENvdWxkIHByb3RlY3QgbW9yZSBvbiBvc2IgYXMgaXQncyB2ZXJ5IHNob3J0IGxpdmVkLgorCSAqLwogCXNwaW5sb2NrX3Qgb3NiX2xvY2s7CiAJdTMyIHNfbmV4dF9nZW5lcmF0aW9uOwogCXVuc2lnbmVkIGxvbmcgb3NiX2ZsYWdzOworCXMxNiBzX2lub2RlX3N0ZWFsX3Nsb3Q7CisJYXRvbWljX3Qgc19udW1faW5vZGVzX3N0b2xlbjsKIAogCXVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CiAJdW5zaWduZWQgaW50IHNfYXRpbWVfcXVhbnR1bTsKIAotCXUxNiBtYXhfc2xvdHM7Ci0JczE2IG5vZGVfbnVtOwotCXMxNiBzbG90X251bTsKLQlzMTYgcHJlZmVycmVkX3Nsb3Q7CisJdW5zaWduZWQgaW50IG1heF9zbG90czsKKwl1bnNpZ25lZCBpbnQgbm9kZV9udW07CisJaW50IHNsb3RfbnVtOworCWludCBwcmVmZXJyZWRfc2xvdDsKIAlpbnQgc19zZWN0c2l6ZV9iaXRzOwogCWludCBzX2NsdXN0ZXJzaXplOwogCWludCBzX2NsdXN0ZXJzaXplX2JpdHM7CiAKIAlhdG9taWNfdCB2b2xfc3RhdGU7CiAJc3RydWN0IG11dGV4IHJlY292ZXJ5X2xvY2s7CisJc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCAqcmVjb3ZlcnlfbWFwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVjb3ZlcnlfdGhyZWFkX3Rhc2s7CiAJaW50IGRpc2FibGVfcmVjb3Zlcnk7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY2hlY2twb2ludF9ldmVudDsKQEAgLTI0NSwxMiArMjUxLDExIEBACiAJc3RydWN0IG9jZnMyX2FsbG9jX3N0YXRzIGFsbG9jX3N0YXRzOwogCWNoYXIgZGV2X3N0clsyMF07CQkvKiAibWFqb3IsbWlub3IiIG9mIHRoZSBkZXZpY2UgKi8KIAotCXN0cnVjdCBkbG1fY3R4dCAqZGxtOworCWNoYXIgb3NiX2NsdXN0ZXJfc3RhY2tbT0NGUzJfU1RBQ0tfTEFCRUxfTEVOICsgMV07CisJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY2Nvbm47CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzIG9zYl9zdXBlcl9sb2NrcmVzOwogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyBvc2JfcmVuYW1lX2xvY2tyZXM7Ci0Jc3RydWN0IGRsbV9ldmljdGlvbl9jYiBvc2JfZXZpY3Rpb25fY2I7CiAJc3RydWN0IG9jZnMyX2RsbV9kZWJ1ZyAqb3NiX2RsbV9kZWJ1ZzsKLQlzdHJ1Y3QgZGxtX3Byb3RvY29sX3ZlcnNpb24gb3NiX2xvY2tpbmdfcHJvdG87CiAKIAlzdHJ1Y3QgZGVudHJ5ICpvc2JfZGVidWdfcm9vdDsKIApAQCAtMzY3LDExICszNzIsMjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl91c2Vyc3BhY2Vfc3RhY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJcmV0dXJuIChvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCU9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfVVNFUlNQQUNFX1NUQUNLKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfbW91bnRfbG9jYWwoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJcmV0dXJuIChvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTE9DQUxfTU9VTlQpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl91c2VzX2V4dGVuZGVkX3Nsb3RfbWFwKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXJldHVybiAob3NiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQlPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOREVEX1NMT1RfTUFQKTsKK30KKworCiAjZGVmaW5lIE9DRlMyX0lTX1ZBTElEX0RJTk9ERShwdHIpCQkJCQlcCiAJKCFzdHJjbXAoKHB0ciktPmlfc2lnbmF0dXJlLCBPQ0ZTMl9JTk9ERV9TSUdOQVRVUkUpKQogCkBAIC01MjIsNiArNTQwLDMzIEBACiAJcmV0dXJuIHBhZ2VzX3Blcl9jbHVzdGVyOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfaW5pdF9pbm9kZV9zdGVhbF9zbG90KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJb3NiLT5zX2lub2RlX3N0ZWFsX3Nsb3QgPSBPQ0ZTMl9JTlZBTElEX1NMT1Q7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCWF0b21pY19zZXQoJm9zYi0+c19udW1faW5vZGVzX3N0b2xlbiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9zZXRfaW5vZGVfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJICAgICAgczE2IHNsb3QpCit7CisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdCA9IHNsb3Q7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHMxNiBvY2ZzMl9nZXRfaW5vZGVfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlzMTYgc2xvdDsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJc2xvdCA9IG9zYi0+c19pbm9kZV9zdGVhbF9zbG90OworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKworCXJldHVybiBzbG90OworfQorCiAjZGVmaW5lIG9jZnMyX3NldF9iaXQgZXh0Ml9zZXRfYml0CiAjZGVmaW5lIG9jZnMyX2NsZWFyX2JpdCBleHQyX2NsZWFyX2JpdAogI2RlZmluZSBvY2ZzMl90ZXN0X2JpdCBleHQyX3Rlc3RfYml0CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oIGIvZnMvb2NmczIvb2NmczJfZnMuaAppbmRleCAzNjMzZWRkMy4uNTJjNDI2NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC04OCw3ICs4OCw5IEBACiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfQ09NUEFUX1NVUFAJT0NGUzJfRkVBVFVSRV9DT01QQVRfQkFDS1VQX1NCCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAkoT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9MT0NBTF9NT1VOVCBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfU1BBUlNFX0FMTE9DIFwKLQkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVfREFUQSkKKwkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVfREFUQSBcCisJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5ERURfU0xPVF9NQVAgXAorCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1VTRVJTUEFDRV9TVEFDSykKICNkZWZpbmUgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAlPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9VTldSSVRURU4KIAogLyoKQEAgLTEyNSw2ICsxMjcsMjEgQEAKIC8qIFN1cHBvcnQgZm9yIGRhdGEgcGFja2VkIGludG8gaW5vZGUgYmxvY2tzICovCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfSU5MSU5FX0RBVEEJMHgwMDQwCiAKKy8qIFN1cHBvcnQgZm9yIHRoZSBleHRlbmRlZCBzbG90IG1hcCAqLworI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOREVEX1NMT1RfTUFQIDB4MTAwCisKKworLyoKKyAqIFN1cHBvcnQgZm9yIGFsdGVybmF0ZSwgdXNlcnNwYWNlIGNsdXN0ZXIgc3RhY2tzLiAgSWYgc2V0LCB0aGUgc3VwZXJibG9jaworICogZmllbGQgc19jbHVzdGVyX2luZm8gY29udGFpbnMgYSB0YWcgZm9yIHRoZSBhbHRlcm5hdGUgc3RhY2sgaW4gdXNlIGFzCisgKiB3ZWxsIGFzIHRoZSBuYW1lIG9mIHRoZSBjbHVzdGVyIGJlaW5nIGpvaW5lZC4KKyAqIG1vdW50Lm9jZnMyIG11c3QgcGFzcyBpbiBhIG1hdGNoaW5nIHN0YWNrIG5hbWUuCisgKgorICogSWYgbm90IHNldCwgdGhlIGNsYXNzaWMgc3RhY2sgd2lsbCBiZSB1c2VkLiAgVGhpcyBpcyBjb21wYXRiaWxlIHdpdGgKKyAqIGFsbCBvbGRlciB2ZXJzaW9ucy4KKyAqLworI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1VTRVJTUEFDRV9TVEFDSwkweDAwODAKKwogLyoKICAqIGJhY2t1cCBzdXBlcmJsb2NrIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgdm9sdW1lCiAgKiBoYXMgYmFja3VwIHN1cGVyYmxvY2tzLgpAQCAtMjY3LDYgKzI4NCwxMCBAQAogI2RlZmluZSBPQ0ZTMl9WT0xfVVVJRF9MRU4JCTE2CiAjZGVmaW5lIE9DRlMyX01BWF9WT0xfTEFCRUxfTEVOCQk2NAogCisvKiBUaGUgYWx0ZXJuYXRlLCB1c2Vyc3BhY2Ugc3RhY2sgZmllbGRzICovCisjZGVmaW5lIE9DRlMyX1NUQUNLX0xBQkVMX0xFTgkJNAorI2RlZmluZSBPQ0ZTMl9DTFVTVEVSX05BTUVfTEVOCQkxNgorCiAvKiBKb3VybmFsIGxpbWl0cyAoaW4gYnl0ZXMpICovCiAjZGVmaW5lIE9DRlMyX01JTl9KT1VSTkFMX1NJWkUJCSg0ICogMTAyNCAqIDEwMjQpCiAKQEAgLTQ3NSw2ICs0OTYsNDcgQEAKIH07CiAKIC8qCisgKiBPbiBkaXNrIHNsb3QgbWFwIGZvciBPQ0ZTMi4gIFRoaXMgZGVmaW5lcyB0aGUgY29udGVudHMgb2YgdGhlICJzbG90X21hcCIKKyAqIHN5c3RlbSBmaWxlLiAgQSBzbG90IGlzIHZhbGlkIGlmIGl0IGNvbnRhaW5zIGEgbm9kZSBudW1iZXIgPj0gMC4gIFRoZQorICogdmFsdWUgLTEgKDB4RkZGRikgaXMgT0NGUzJfSU5WQUxJRF9TTE9ULiAgVGhpcyBtYXJrcyBhIHNsb3QgZW1wdHkuCisgKi8KK3N0cnVjdCBvY2ZzMl9zbG90X21hcCB7CisvKjAwKi8JX19sZTE2IHNtX3Nsb3RzWzBdOworLyoKKyAqIEFjdHVhbCBvbi1kaXNrIHNpemUgaXMgb25lIGJsb2NrLiAgT0NGUzJfTUFYX1NMT1RTIGlzIDI1NSwKKyAqIDI1NSAqIHNpemVvZihfX2xlMTYpID09IDUxMkIsIHdpdGhpbiB0aGUgNTEyQiBibG9jayBtaW5pbXVtIGJsb2Nrc2l6ZS4KKyAqLworfTsKKworc3RydWN0IG9jZnMyX2V4dGVuZGVkX3Nsb3QgeworLyowMCovCV9fdTgJZXNfdmFsaWQ7CisJX191OAllc19yZXNlcnZlZDFbM107CisJX19sZTMyCWVzX25vZGVfbnVtOworLyoxMCovCit9OworCisvKgorICogVGhlIGV4dGVuZGVkIHNsb3QgbWFwLCB1c2VkIHdoZW4gT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTkRFRF9TTE9UX01BUAorICogaXMgc2V0LiAgSXQgc2VwYXJhdGVzIG91dCB0aGUgdmFsaWQgbWFya2VyIGZyb20gdGhlIG5vZGUgbnVtYmVyLCBhbmQKKyAqIGhhcyByb29tIHRvIGdyb3cuICBVbmxpa2UgdGhlIG9sZCBzbG90IG1hcCwgdGhpcyBmb3JtYXQgaXMgZGVmaW5lZCBieQorICogaV9zaXplLgorICovCitzdHJ1Y3Qgb2NmczJfc2xvdF9tYXBfZXh0ZW5kZWQgeworLyowMCovCXN0cnVjdCBvY2ZzMl9leHRlbmRlZF9zbG90IHNlX3Nsb3RzWzBdOworLyoKKyAqIEFjdHVhbCBzaXplIGlzIGlfc2l6ZSBvZiB0aGUgc2xvdF9tYXAgc3lzdGVtIGZpbGUuICBJdCBzaG91bGQKKyAqIG1hdGNoIHNfbWF4X3Nsb3RzICogc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbmRlZF9zbG90KQorICovCit9OworCitzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9pbmZvIHsKKy8qMDAqLwlfX3U4ICAgY2lfc3RhY2tbT0NGUzJfU1RBQ0tfTEFCRUxfTEVOXTsKKwlfX2xlMzIgY2lfcmVzZXJ2ZWQ7CisvKjA4Ki8JX191OCAgIGNpX2NsdXN0ZXJbT0NGUzJfQ0xVU1RFUl9OQU1FX0xFTl07CisvKjE4Ki8KK307CisKKy8qCiAgKiBPbiBkaXNrIHN1cGVyYmxvY2sgZm9yIE9DRlMyCiAgKiBOb3RlIHRoYXQgaXQgaXMgY29udGFpbmVkIGluc2lkZSBhbiBvY2ZzMl9kaW5vZGUsIHNvIGFsbCBvZmZzZXRzCiAgKiBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIG9jZnMyX2Rpbm9kZS5pZDIuCkBAIC01MDYsNyArNTY4LDIwIEBACiAJCQkJCSAqIGdyb3VwIGhlYWRlciAqLwogLyo1MCovCV9fdTggIHNfbGFiZWxbT0NGUzJfTUFYX1ZPTF9MQUJFTF9MRU5dOwkvKiBMYWJlbCBmb3IgbW91bnRpbmcsIGV0Yy4gKi8KIC8qOTAqLwlfX3U4ICBzX3V1aWRbT0NGUzJfVk9MX1VVSURfTEVOXTsJLyogMTI4LWJpdCB1dWlkICovCi0vKkEwKi8KKy8qQTAqLyAgc3RydWN0IG9jZnMyX2NsdXN0ZXJfaW5mbyBzX2NsdXN0ZXJfaW5mbzsgLyogU2VsZWN0ZWQgdXNlcnNwYWNlCisJCQkJCQkgICAgIHN0YWNrLiAgT25seSB2YWxpZAorCQkJCQkJICAgICB3aXRoIElOQ09NUEFUIGZsYWcuICovCisvKkI4Ki8gIF9fbGU2NCBzX3Jlc2VydmVkMlsxN107CQkvKiBGaWxsIG91dCBzdXBlcmJsb2NrICovCisvKjE0MCovCisKKwkvKgorCSAqIE5PVEU6IEFzIHN0YXRlZCBhYm92ZSwgYWxsIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvCisJICogb2NmczJfZGlub2RlLmlkMiwgd2hpY2ggaXMgYXQgMHhDMCBpbiB0aGUgaW5vZGUuCisJICogMHhDMCArIDB4MTQwID0gMHgyMDAgb3IgNTEyIGJ5dGVzLiAgQSBzdXBlcmJsb2NrIG11c3QgZml0IHdpdGhpbgorCSAqIG91ciBzbWFsbGVzdCBibG9ja3NpemUsIHdoaWNoIGlzIDUxMiBieXRlcy4gIFRvIGVuc3VyZSB0aGlzLAorCSAqIHdlIHJlc2VydmUgdGhlIHNwYWNlIGluIHNfcmVzZXJ2ZWQyLiAgQW55dGhpbmcgcGFzdCBzX3Jlc2VydmVkMgorCSAqIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBvbiB0aGUgc21hbGxlc3QgYmxvY2tzaXplLgorCSAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2xvY2tpZC5oIGIvZnMvb2NmczIvb2NmczJfbG9ja2lkLmgKaW5kZXggODZmM2UzNy4uODJjMjAwZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfbG9ja2lkLmgKKysrIGIvZnMvb2NmczIvb2NmczJfbG9ja2lkLmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpvY2ZzMl9sb2NrX3R5cGVfc3RyaW5nKGVudW0gb2NmczJfbG9ja190eXBlIHR5cGUpCiB7CiAjaWZkZWYgX19LRVJORUxfXwotCW1sb2dfYnVnX29uX21zZyh0eXBlID49IE9DRlMyX05VTV9MT0NLX1RZUEVTLCAiJWRcbiIsIHR5cGUpOworCUJVR19PTih0eXBlID49IE9DRlMyX05VTV9MT0NLX1RZUEVTKTsKICNlbmRpZgogCXJldHVybiBvY2ZzMl9sb2NrX3R5cGVfc3RyaW5nc1t0eXBlXTsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3Jlc2l6ZS5jIGIvZnMvb2NmczIvcmVzaXplLmMKaW5kZXggMzc4MzVmZi4uODE2Njk2OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcmVzaXplLmMKKysrIGIvZnMvb2NmczIvcmVzaXplLmMKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCQltZW1zZXQoY3IsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfY2hhaW5fcmVjKSk7CiAJfQogCi0JY3ItPmNfYmxrbm8gPSBsZTY0X3RvX2NwdShpbnB1dC0+Z3JvdXApOworCWNyLT5jX2Jsa25vID0gY3B1X3RvX2xlNjQoaW5wdXQtPmdyb3VwKTsKIAlsZTMyX2FkZF9jcHUoJmNyLT5jX3RvdGFsLCBpbnB1dC0+Y2x1c3RlcnMgKiBjbF9icGMpOwogCWxlMzJfYWRkX2NwdSgmY3ItPmNfZnJlZSwgaW5wdXQtPmZyZWVzICogY2xfYnBjKTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc2xvdF9tYXAuYyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmMKaW5kZXggM2E1MGNlNS4uYmI1ZmY4OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc2xvdF9tYXAuYworKysgYi9mcy9vY2ZzMi9zbG90X21hcC5jCkBAIC00Miw4MSArNDIsMjQ0IEBACiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCi1zdGF0aWMgczE2IF9fb2NmczJfbm9kZV9udW1fdG9fc2xvdChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwKLQkJCQkgICAgczE2IGdsb2JhbCk7Ci1zdGF0aWMgdm9pZCBfX29jZnMyX2ZpbGxfc2xvdChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwKLQkJCSAgICAgIHMxNiBzbG90X251bSwKLQkJCSAgICAgIHMxNiBub2RlX251bSk7CiAKLS8qIHBvc3QgdGhlIHNsb3QgaW5mb3JtYXRpb24gb24gZGlzayBpbnRvIG91ciBzbG90X2luZm8gc3RydWN0LiAqLwotdm9pZCBvY2ZzMl91cGRhdGVfc2xvdF9pbmZvKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpKQorc3RydWN0IG9jZnMyX3Nsb3QgeworCWludCBzbF92YWxpZDsKKwl1bnNpZ25lZCBpbnQgc2xfbm9kZV9udW07Cit9OworCitzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvIHsKKwlpbnQgc2lfZXh0ZW5kZWQ7CisJaW50IHNpX3Nsb3RzX3Blcl9ibG9jazsKKwlzdHJ1Y3QgaW5vZGUgKnNpX2lub2RlOworCXVuc2lnbmVkIGludCBzaV9ibG9ja3M7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqc2lfYmg7CisJdW5zaWduZWQgaW50IHNpX251bV9zbG90czsKKwlzdHJ1Y3Qgb2NmczJfc2xvdCAqc2lfc2xvdHM7Cit9OworCisKK3N0YXRpYyBpbnQgX19vY2ZzMl9ub2RlX251bV90b19zbG90KHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbm9kZV9udW0pOworCitzdGF0aWMgdm9pZCBvY2ZzMl9pbnZhbGlkYXRlX3Nsb3Qoc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2ksCisJCQkJICBpbnQgc2xvdF9udW0pCit7CisJQlVHX09OKChzbG90X251bSA8IDApIHx8IChzbG90X251bSA+PSBzaS0+c2lfbnVtX3Nsb3RzKSk7CisJc2ktPnNpX3Nsb3RzW3Nsb3RfbnVtXS5zbF92YWxpZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3NldF9zbG90KHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpLAorCQkJICAgaW50IHNsb3RfbnVtLCB1bnNpZ25lZCBpbnQgbm9kZV9udW0pCit7CisJQlVHX09OKChzbG90X251bSA8IDApIHx8IChzbG90X251bSA+PSBzaS0+c2lfbnVtX3Nsb3RzKSk7CisKKwlzaS0+c2lfc2xvdHNbc2xvdF9udW1dLnNsX3ZhbGlkID0gMTsKKwlzaS0+c2lfc2xvdHNbc2xvdF9udW1dLnNsX25vZGVfbnVtID0gbm9kZV9udW07Cit9CisKKy8qIFRoaXMgdmVyc2lvbiBpcyBmb3IgdGhlIGV4dGVuZGVkIHNsb3QgbWFwICovCitzdGF0aWMgdm9pZCBvY2ZzMl91cGRhdGVfc2xvdF9pbmZvX2V4dGVuZGVkKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpKQoreworCWludCBiLCBpLCBzbG90bm87CisJc3RydWN0IG9jZnMyX3Nsb3RfbWFwX2V4dGVuZGVkICpzZTsKKworCXNsb3RubyA9IDA7CisJZm9yIChiID0gMDsgYiA8IHNpLT5zaV9ibG9ja3M7IGIrKykgeworCQlzZSA9IChzdHJ1Y3Qgb2NmczJfc2xvdF9tYXBfZXh0ZW5kZWQgKilzaS0+c2lfYmhbYl0tPmJfZGF0YTsKKwkJZm9yIChpID0gMDsKKwkJICAgICAoaSA8IHNpLT5zaV9zbG90c19wZXJfYmxvY2spICYmCisJCSAgICAgKHNsb3RubyA8IHNpLT5zaV9udW1fc2xvdHMpOworCQkgICAgIGkrKywgc2xvdG5vKyspIHsKKwkJCWlmIChzZS0+c2Vfc2xvdHNbaV0uZXNfdmFsaWQpCisJCQkJb2NmczJfc2V0X3Nsb3Qoc2ksIHNsb3RubywKKwkJCQkJICAgICAgIGxlMzJfdG9fY3B1KHNlLT5zZV9zbG90c1tpXS5lc19ub2RlX251bSkpOworCQkJZWxzZQorCQkJCW9jZnMyX2ludmFsaWRhdGVfc2xvdChzaSwgc2xvdG5vKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFBvc3QgdGhlIHNsb3QgaW5mb3JtYXRpb24gb24gZGlzayBpbnRvIG91ciBzbG90X2luZm8gc3RydWN0LgorICogTXVzdCBiZSBwcm90ZWN0ZWQgYnkgb3NiX2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3VwZGF0ZV9zbG90X2luZm9fb2xkKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpKQogewogCWludCBpOwotCV9fbGUxNiAqZGlza19pbmZvOworCXN0cnVjdCBvY2ZzMl9zbG90X21hcCAqc207CiAKLQkvKiB3ZSBkb24ndCByZWFkIHRoZSBzbG90IGJsb2NrIGhlcmUgYXMgb2NmczJfc3VwZXJfbG9jawotCSAqIHNob3VsZCd2ZSBtYWRlIHN1cmUgd2UgaGF2ZSB0aGUgbW9zdCByZWNlbnQgY29weS4gKi8KLQlzcGluX2xvY2soJnNpLT5zaV9sb2NrKTsKLQlkaXNrX2luZm8gPSAoX19sZTE2ICopIHNpLT5zaV9iaC0+Yl9kYXRhOworCXNtID0gKHN0cnVjdCBvY2ZzMl9zbG90X21hcCAqKXNpLT5zaV9iaFswXS0+Yl9kYXRhOwogCi0JZm9yIChpID0gMDsgaSA8IHNpLT5zaV9zaXplOyBpKyspCi0JCXNpLT5zaV9nbG9iYWxfbm9kZV9udW1zW2ldID0gbGUxNl90b19jcHUoZGlza19pbmZvW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2ktPnNpX251bV9zbG90czsgaSsrKSB7CisJCWlmIChsZTE2X3RvX2NwdShzbS0+c21fc2xvdHNbaV0pID09ICh1MTYpT0NGUzJfSU5WQUxJRF9TTE9UKQorCQkJb2NmczJfaW52YWxpZGF0ZV9zbG90KHNpLCBpKTsKKwkJZWxzZQorCQkJb2NmczJfc2V0X3Nsb3Qoc2ksIGksIGxlMTZfdG9fY3B1KHNtLT5zbV9zbG90c1tpXSkpOworCX0KK30KIAotCXNwaW5fdW5sb2NrKCZzaS0+c2lfbG9jayk7CitzdGF0aWMgdm9pZCBvY2ZzMl91cGRhdGVfc2xvdF9pbmZvKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpKQoreworCS8qCisJICogVGhlIHNsb3QgZGF0YSB3aWxsIGhhdmUgYmVlbiByZWZyZXNoZWQgd2hlbiBvY2ZzMl9zdXBlcl9sb2NrCisJICogd2FzIHRha2VuLgorCSAqLworCWlmIChzaS0+c2lfZXh0ZW5kZWQpCisJCW9jZnMyX3VwZGF0ZV9zbG90X2luZm9fZXh0ZW5kZWQoc2kpOworCWVsc2UKKwkJb2NmczJfdXBkYXRlX3Nsb3RfaW5mb19vbGQoc2kpOworfQorCitpbnQgb2NmczJfcmVmcmVzaF9zbG90X2luZm8oc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSA9IG9zYi0+c2xvdF9pbmZvOworCisJaWYgKHNpID09IE5VTEwpCisJCXJldHVybiAwOworCisJQlVHX09OKHNpLT5zaV9ibG9ja3MgPT0gMCk7CisJQlVHX09OKHNpLT5zaV9iaCA9PSBOVUxMKTsKKworCW1sb2coMCwgIlJlZnJlc2hpbmcgc2xvdCBtYXAsIHJlYWRpbmcgJXUgYmxvY2socylcbiIsCisJICAgICBzaS0+c2lfYmxvY2tzKTsKKworCS8qCisJICogV2UgcGFzcyAtMSBhcyBibG9ja25yIGJlY2F1c2Ugd2UgZXhwZWN0IGFsbCBvZiBzaS0+c2lfYmggdG8KKwkgKiBiZSAhTlVMTC4gIFRodXMsIG9jZnMyX3JlYWRfYmxvY2tzKCkgd2lsbCBpZ25vcmUgYmxvY2tuci4gIElmCisJICogdGhpcyBpcyBub3QgdHJ1ZSwgdGhlIHJlYWQgb2YgLTEgKFVJTlQ2NF9NQVgpIHdpbGwgZmFpbC4KKwkgKi8KKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhvc2IsIC0xLCBzaS0+c2lfYmxvY2tzLCBzaS0+c2lfYmgsIDAsCisJCQkJc2ktPnNpX2lub2RlKTsKKwlpZiAocmV0ID09IDApIHsKKwkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwkJb2NmczJfdXBkYXRlX3Nsb3RfaW5mbyhzaSk7CisJCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBwb3N0IHRoZSBvdXIgc2xvdCBpbmZvIHN0dWZmIGludG8gaXQncyBkZXN0aW5hdGlvbiBiaCBhbmQgd3JpdGUgaXQKICAqIG91dC4gKi8KLWludCBvY2ZzMl91cGRhdGVfZGlza19zbG90cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgICBzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSkKK3N0YXRpYyB2b2lkIG9jZnMyX3VwZGF0ZV9kaXNrX3Nsb3RfZXh0ZW5kZWQoc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2ksCisJCQkJCSAgICBpbnQgc2xvdF9udW0sCisJCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKIHsKLQlpbnQgc3RhdHVzLCBpOwotCV9fbGUxNiAqZGlza19pbmZvID0gKF9fbGUxNiAqKSBzaS0+c2lfYmgtPmJfZGF0YTsKKwlpbnQgYmxraW5kID0gc2xvdF9udW0gLyBzaS0+c2lfc2xvdHNfcGVyX2Jsb2NrOworCWludCBzbG90bm8gPSBzbG90X251bSAlIHNpLT5zaV9zbG90c19wZXJfYmxvY2s7CisJc3RydWN0IG9jZnMyX3Nsb3RfbWFwX2V4dGVuZGVkICpzZTsKIAotCXNwaW5fbG9jaygmc2ktPnNpX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBzaS0+c2lfc2l6ZTsgaSsrKQotCQlkaXNrX2luZm9baV0gPSBjcHVfdG9fbGUxNihzaS0+c2lfZ2xvYmFsX25vZGVfbnVtc1tpXSk7Ci0Jc3Bpbl91bmxvY2soJnNpLT5zaV9sb2NrKTsKKwlCVUdfT04oYmxraW5kID49IHNpLT5zaV9ibG9ja3MpOwogCi0Jc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCBzaS0+c2lfYmgsIHNpLT5zaV9pbm9kZSk7CisJc2UgPSAoc3RydWN0IG9jZnMyX3Nsb3RfbWFwX2V4dGVuZGVkICopc2ktPnNpX2JoW2Jsa2luZF0tPmJfZGF0YTsKKwlzZS0+c2Vfc2xvdHNbc2xvdG5vXS5lc192YWxpZCA9IHNpLT5zaV9zbG90c1tzbG90X251bV0uc2xfdmFsaWQ7CisJaWYgKHNpLT5zaV9zbG90c1tzbG90X251bV0uc2xfdmFsaWQpCisJCXNlLT5zZV9zbG90c1tzbG90bm9dLmVzX25vZGVfbnVtID0KKwkJCWNwdV90b19sZTMyKHNpLT5zaV9zbG90c1tzbG90X251bV0uc2xfbm9kZV9udW0pOworCSpiaCA9IHNpLT5zaV9iaFtibGtpbmRdOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl91cGRhdGVfZGlza19zbG90X29sZChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwKKwkJCQkgICAgICAgaW50IHNsb3RfbnVtLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2NmczJfc2xvdF9tYXAgKnNtOworCisJc20gPSAoc3RydWN0IG9jZnMyX3Nsb3RfbWFwICopc2ktPnNpX2JoWzBdLT5iX2RhdGE7CisJZm9yIChpID0gMDsgaSA8IHNpLT5zaV9udW1fc2xvdHM7IGkrKykgeworCQlpZiAoc2ktPnNpX3Nsb3RzW2ldLnNsX3ZhbGlkKQorCQkJc20tPnNtX3Nsb3RzW2ldID0KKwkJCQljcHVfdG9fbGUxNihzaS0+c2lfc2xvdHNbaV0uc2xfbm9kZV9udW0pOworCQllbHNlCisJCQlzbS0+c21fc2xvdHNbaV0gPSBjcHVfdG9fbGUxNihPQ0ZTMl9JTlZBTElEX1NMT1QpOworCX0KKwkqYmggPSBzaS0+c2lfYmhbMF07Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfdXBkYXRlX2Rpc2tfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpLAorCQkJCSAgaW50IHNsb3RfbnVtKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJaWYgKHNpLT5zaV9leHRlbmRlZCkKKwkJb2NmczJfdXBkYXRlX2Rpc2tfc2xvdF9leHRlbmRlZChzaSwgc2xvdF9udW0sICZiaCk7CisJZWxzZQorCQlvY2ZzMl91cGRhdGVfZGlza19zbG90X29sZChzaSwgc2xvdF9udW0sICZiaCk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJc3RhdHVzID0gb2NmczJfd3JpdGVfYmxvY2sob3NiLCBiaCwgc2ktPnNpX2lub2RlKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogdHJ5IHRvIGZpbmQgZ2xvYmFsIG5vZGUgaW4gdGhlIHNsb3QgaW5mby4gUmV0dXJucwotICogT0NGUzJfSU5WQUxJRF9TTE9UIGlmIG5vdGhpbmcgaXMgZm91bmQuICovCi1zdGF0aWMgczE2IF9fb2NmczJfbm9kZV9udW1fdG9fc2xvdChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwKLQkJCQkgICAgczE2IGdsb2JhbCkKKy8qCisgKiBDYWxjdWxhdGUgaG93IG1hbnkgYnl0ZXMgYXJlIG5lZWRlZCBieSB0aGUgc2xvdCBtYXAuICBSZXR1cm5zCisgKiBhbiBlcnJvciBpZiB0aGUgc2xvdCBtYXAgZmlsZSBpcyB0b28gc21hbGwuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfc2xvdF9tYXBfcGh5c2ljYWxfc2l6ZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBsb25nICpieXRlcykKIHsKLQlpbnQgaTsKLQlzMTYgcmV0ID0gT0NGUzJfSU5WQUxJRF9TTE9UOworCXVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc19uZWVkZWQ7CisKKwlpZiAob2NmczJfdXNlc19leHRlbmRlZF9zbG90X21hcChvc2IpKSB7CisJCWJ5dGVzX25lZWRlZCA9IG9zYi0+bWF4X3Nsb3RzICoKKwkJCXNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW5kZWRfc2xvdCk7CisJfSBlbHNlIHsKKwkJYnl0ZXNfbmVlZGVkID0gb3NiLT5tYXhfc2xvdHMgKiBzaXplb2YoX19sZTE2KTsKKwl9CisJaWYgKGJ5dGVzX25lZWRlZCA+IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQltbG9nKE1MX0VSUk9SLAorCQkgICAgICJTbG90IG1hcCBmaWxlIGlzIHRvbyBzbWFsbCEgIChzaXplICVsbHUsIG5lZWRlZCAlbGx1KVxuIiwKKwkJICAgICBpX3NpemVfcmVhZChpbm9kZSksIGJ5dGVzX25lZWRlZCk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCSpieXRlcyA9IGJ5dGVzX25lZWRlZDsKKwlyZXR1cm4gMDsKK30KKworLyogdHJ5IHRvIGZpbmQgZ2xvYmFsIG5vZGUgaW4gdGhlIHNsb3QgaW5mby4gUmV0dXJucyAtRU5PRU5UCisgKiBpZiBub3RoaW5nIGlzIGZvdW5kLiAqLworc3RhdGljIGludCBfX29jZnMyX25vZGVfbnVtX3RvX3Nsb3Qoc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2ksCisJCQkJICAgIHVuc2lnbmVkIGludCBub2RlX251bSkKK3sKKwlpbnQgaSwgcmV0ID0gLUVOT0VOVDsKIAogCWZvcihpID0gMDsgaSA8IHNpLT5zaV9udW1fc2xvdHM7IGkrKykgewotCQlpZiAoZ2xvYmFsID09IHNpLT5zaV9nbG9iYWxfbm9kZV9udW1zW2ldKSB7Ci0JCQlyZXQgPSAoczE2KSBpOworCQlpZiAoc2ktPnNpX3Nsb3RzW2ldLnNsX3ZhbGlkICYmCisJCSAgICAobm9kZV9udW0gPT0gc2ktPnNpX3Nsb3RzW2ldLnNsX25vZGVfbnVtKSkgeworCQkJcmV0ID0gaTsKIAkJCWJyZWFrOwogCQl9CiAJfQorCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHMxNiBfX29jZnMyX2ZpbmRfZW1wdHlfc2xvdChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwgczE2IHByZWZlcnJlZCkKK3N0YXRpYyBpbnQgX19vY2ZzMl9maW5kX2VtcHR5X3Nsb3Qoc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2ksCisJCQkJICAgaW50IHByZWZlcnJlZCkKIHsKLQlpbnQgaTsKLQlzMTYgcmV0ID0gT0NGUzJfSU5WQUxJRF9TTE9UOworCWludCBpLCByZXQgPSAtRU5PU1BDOwogCi0JaWYgKHByZWZlcnJlZCA+PSAwICYmIHByZWZlcnJlZCA8IHNpLT5zaV9udW1fc2xvdHMpIHsKLQkJaWYgKE9DRlMyX0lOVkFMSURfU0xPVCA9PSBzaS0+c2lfZ2xvYmFsX25vZGVfbnVtc1twcmVmZXJyZWRdKSB7CisJaWYgKChwcmVmZXJyZWQgPj0gMCkgJiYgKHByZWZlcnJlZCA8IHNpLT5zaV9udW1fc2xvdHMpKSB7CisJCWlmICghc2ktPnNpX3Nsb3RzW3ByZWZlcnJlZF0uc2xfdmFsaWQpIHsKIAkJCXJldCA9IHByZWZlcnJlZDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJZm9yKGkgPSAwOyBpIDwgc2ktPnNpX251bV9zbG90czsgaSsrKSB7Ci0JCWlmIChPQ0ZTMl9JTlZBTElEX1NMT1QgPT0gc2ktPnNpX2dsb2JhbF9ub2RlX251bXNbaV0pIHsKLQkJCXJldCA9IChzMTYpIGk7CisJCWlmICghc2ktPnNpX3Nsb3RzW2ldLnNsX3ZhbGlkKSB7CisJCQlyZXQgPSBpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xMjQsNTggKzI4NywxNTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zMTYgb2NmczJfbm9kZV9udW1fdG9fc2xvdChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwKLQkJCSAgIHMxNiBnbG9iYWwpCitpbnQgb2NmczJfbm9kZV9udW1fdG9fc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdW5zaWduZWQgaW50IG5vZGVfbnVtKQogewotCXMxNiByZXQ7CisJaW50IHNsb3Q7CisJc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2kgPSBvc2ItPnNsb3RfaW5mbzsKIAotCXNwaW5fbG9jaygmc2ktPnNpX2xvY2spOwotCXJldCA9IF9fb2NmczJfbm9kZV9udW1fdG9fc2xvdChzaSwgZ2xvYmFsKTsKLQlzcGluX3VubG9jaygmc2ktPnNpX2xvY2spOwotCXJldHVybiByZXQ7CisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlzbG90ID0gX19vY2ZzMl9ub2RlX251bV90b19zbG90KHNpLCBub2RlX251bSk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJcmV0dXJuIHNsb3Q7CiB9CiAKLXN0YXRpYyB2b2lkIF9fb2NmczJfZmlsbF9zbG90KHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpLAotCQkJICAgICAgczE2IHNsb3RfbnVtLAotCQkJICAgICAgczE2IG5vZGVfbnVtKQoraW50IG9jZnMyX3Nsb3RfdG9fbm9kZV9udW1fbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgc2xvdF9udW0sCisJCQkJICB1bnNpZ25lZCBpbnQgKm5vZGVfbnVtKQogewotCUJVR19PTihzbG90X251bSA9PSBPQ0ZTMl9JTlZBTElEX1NMT1QpOwotCUJVR19PTihzbG90X251bSA+PSBzaS0+c2lfbnVtX3Nsb3RzKTsKLQlCVUdfT04oKG5vZGVfbnVtICE9IE8yTk1fSU5WQUxJRF9OT0RFX05VTSkgJiYKLQkgICAgICAgKG5vZGVfbnVtID49IE8yTk1fTUFYX05PREVTKSk7CisJc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2kgPSBvc2ItPnNsb3RfaW5mbzsKIAotCXNpLT5zaV9nbG9iYWxfbm9kZV9udW1zW3Nsb3RfbnVtXSA9IG5vZGVfbnVtOworCWFzc2VydF9zcGluX2xvY2tlZCgmb3NiLT5vc2JfbG9jayk7CisKKwlCVUdfT04oc2xvdF9udW0gPCAwKTsKKwlCVUdfT04oc2xvdF9udW0gPiBvc2ItPm1heF9zbG90cyk7CisKKwlpZiAoIXNpLT5zaV9zbG90c1tzbG90X251bV0uc2xfdmFsaWQpCisJCXJldHVybiAtRU5PRU5UOworCisJKm5vZGVfbnVtID0gc2ktPnNpX3Nsb3RzW3Nsb3RfbnVtXS5zbF9ub2RlX251bTsKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCBvY2ZzMl9jbGVhcl9zbG90KHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpLAotCQkgICAgICBzMTYgc2xvdF9udW0pCitzdGF0aWMgdm9pZCBfX29jZnMyX2ZyZWVfc2xvdF9pbmZvKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpKQogewotCXNwaW5fbG9jaygmc2ktPnNpX2xvY2spOwotCV9fb2NmczJfZmlsbF9zbG90KHNpLCBzbG90X251bSwgT0NGUzJfSU5WQUxJRF9TTE9UKTsKLQlzcGluX3VubG9jaygmc2ktPnNpX2xvY2spOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHNpID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChzaS0+c2lfaW5vZGUpCisJCWlwdXQoc2ktPnNpX2lub2RlKTsKKwlpZiAoc2ktPnNpX2JoKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzaS0+c2lfYmxvY2tzOyBpKyspIHsKKwkJCWlmIChzaS0+c2lfYmhbaV0pIHsKKwkJCQlicmVsc2Uoc2ktPnNpX2JoW2ldKTsKKwkJCQlzaS0+c2lfYmhbaV0gPSBOVUxMOworCQkJfQorCQl9CisJCWtmcmVlKHNpLT5zaV9iaCk7CisJfQorCisJa2ZyZWUoc2kpOworfQorCitpbnQgb2NmczJfY2xlYXJfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgaW50IHNsb3RfbnVtKQoreworCXN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpID0gb3NiLT5zbG90X2luZm87CisKKwlpZiAoc2kgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCW9jZnMyX2ludmFsaWRhdGVfc2xvdChzaSwgc2xvdF9udW0pOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKworCXJldHVybiBvY2ZzMl91cGRhdGVfZGlza19zbG90KG9zYiwgb3NiLT5zbG90X2luZm8sIHNsb3RfbnVtKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9tYXBfc2xvdF9idWZmZXJzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2kpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTY0IGJsa25vOworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9ja3MsIGJ5dGVzOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwlzdGF0dXMgPSBvY2ZzMl9zbG90X21hcF9waHlzaWNhbF9zaXplKG9zYiwgc2ktPnNpX2lub2RlLCAmYnl0ZXMpOworCWlmIChzdGF0dXMpCisJCWdvdG8gYmFpbDsKKworCWJsb2NrcyA9IG9jZnMyX2Jsb2Nrc19mb3JfYnl0ZXMoc2ktPnNpX2lub2RlLT5pX3NiLCBieXRlcyk7CisJQlVHX09OKGJsb2NrcyA+IFVJTlRfTUFYKTsKKwlzaS0+c2lfYmxvY2tzID0gYmxvY2tzOworCWlmICghc2ktPnNpX2Jsb2NrcykKKwkJZ290byBiYWlsOworCisJaWYgKHNpLT5zaV9leHRlbmRlZCkKKwkJc2ktPnNpX3Nsb3RzX3Blcl9ibG9jayA9CisJCQkob3NiLT5zYi0+c19ibG9ja3NpemUgLworCQkJIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW5kZWRfc2xvdCkpOworCWVsc2UKKwkJc2ktPnNpX3Nsb3RzX3Blcl9ibG9jayA9IG9zYi0+c2ItPnNfYmxvY2tzaXplIC8gc2l6ZW9mKF9fbGUxNik7CisKKwkvKiBUaGUgc2l6ZSBjaGVja3MgYWJvdmUgc2hvdWxkIGVuc3VyZSB0aGlzICovCisJQlVHX09OKChvc2ItPm1heF9zbG90cyAvIHNpLT5zaV9zbG90c19wZXJfYmxvY2spID4gYmxvY2tzKTsKKworCW1sb2coMCwgIlNsb3QgbWFwIG5lZWRzICV1IGJ1ZmZlcnMgZm9yICVsbHUgYnl0ZXNcbiIsCisJICAgICBzaS0+c2lfYmxvY2tzLCBieXRlcyk7CisKKwlzaS0+c2lfYmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKikgKiBzaS0+c2lfYmxvY2tzLAorCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghc2ktPnNpX2JoKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaS0+c2lfYmxvY2tzOyBpKyspIHsKKwkJc3RhdHVzID0gb2NmczJfZXh0ZW50X21hcF9nZXRfYmxvY2tzKHNpLT5zaV9pbm9kZSwgaSwKKwkJCQkJCSAgICAgJmJsa25vLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCW1sb2coMCwgIlJlYWRpbmcgc2xvdCBtYXAgYmxvY2sgJXUgYXQgJWxsdVxuIiwgaSwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vKTsKKworCQliaCA9IE5VTEw7ICAvKiBBY3F1aXJlIGEgZnJlc2ggYmggKi8KKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIGJsa25vLCAmYmgsIDAsIHNpLT5zaV9pbm9kZSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQlzaS0+c2lfYmhbaV0gPSBiaDsKKwl9CisKK2JhaWw6CisJcmV0dXJuIHN0YXR1czsKIH0KIAogaW50IG9jZnMyX2luaXRfc2xvdF9pbmZvKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewotCWludCBzdGF0dXMsIGk7Ci0JdTY0IGJsa25vOworCWludCBzdGF0dXM7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2k7CiAKLQlzaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlzaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8pICsKKwkJICAgICAoc2l6ZW9mKHN0cnVjdCBvY2ZzMl9zbG90KSAqIG9zYi0+bWF4X3Nsb3RzKSwKKwkJICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXNpKSB7CiAJCXN0YXR1cyA9IC1FTk9NRU07CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZzaS0+c2lfbG9jayk7CisJc2ktPnNpX2V4dGVuZGVkID0gb2NmczJfdXNlc19leHRlbmRlZF9zbG90X21hcChvc2IpOwogCXNpLT5zaV9udW1fc2xvdHMgPSBvc2ItPm1heF9zbG90czsKLQlzaS0+c2lfc2l6ZSA9IE9DRlMyX01BWF9TTE9UUzsKLQotCWZvcihpID0gMDsgaSA8IHNpLT5zaV9udW1fc2xvdHM7IGkrKykKLQkJc2ktPnNpX2dsb2JhbF9ub2RlX251bXNbaV0gPSBPQ0ZTMl9JTlZBTElEX1NMT1Q7CisJc2ktPnNpX3Nsb3RzID0gKHN0cnVjdCBvY2ZzMl9zbG90ICopKChjaGFyICopc2kgKworCQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvKSk7CiAKIAlpbm9kZSA9IG9jZnMyX2dldF9zeXN0ZW1fZmlsZV9pbm9kZShvc2IsIFNMT1RfTUFQX1NZU1RFTV9JTk9ERSwKIAkJCQkJICAgIE9DRlMyX0lOVkFMSURfU0xPVCk7CkBAIC0xODUsNjEgKzQ0NSw1MyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfZXh0ZW50X21hcF9nZXRfYmxvY2tzKGlub2RlLCAwVUxMLCAmYmxrbm8sIE5VTEwsIE5VTEwpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBiYWlsOwotCX0KLQotCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBibGtubywgJmJoLCAwLCBpbm9kZSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGJhaWw7Ci0JfQotCiAJc2ktPnNpX2lub2RlID0gaW5vZGU7Ci0Jc2ktPnNpX2JoID0gYmg7Ci0Jb3NiLT5zbG90X2luZm8gPSBzaTsKKwlzdGF0dXMgPSBvY2ZzMl9tYXBfc2xvdF9idWZmZXJzKG9zYiwgc2kpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCW9zYi0+c2xvdF9pbmZvID0gKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKilzaTsKIGJhaWw6CiAJaWYgKHN0YXR1cyA8IDAgJiYgc2kpCi0JCW9jZnMyX2ZyZWVfc2xvdF9pbmZvKHNpKTsKKwkJX19vY2ZzMl9mcmVlX3Nsb3RfaW5mbyhzaSk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi12b2lkIG9jZnMyX2ZyZWVfc2xvdF9pbmZvKHN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpKQordm9pZCBvY2ZzMl9mcmVlX3Nsb3RfaW5mbyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKIHsKLQlpZiAoc2ktPnNpX2lub2RlKQotCQlpcHV0KHNpLT5zaV9pbm9kZSk7Ci0JaWYgKHNpLT5zaV9iaCkKLQkJYnJlbHNlKHNpLT5zaV9iaCk7Ci0Ja2ZyZWUoc2kpOworCXN0cnVjdCBvY2ZzMl9zbG90X2luZm8gKnNpID0gb3NiLT5zbG90X2luZm87CisKKwlvc2ItPnNsb3RfaW5mbyA9IE5VTEw7CisJX19vY2ZzMl9mcmVlX3Nsb3RfaW5mbyhzaSk7CiB9CiAKIGludCBvY2ZzMl9maW5kX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJaW50IHN0YXR1czsKLQlzMTYgc2xvdDsKKwlpbnQgc2xvdDsKIAlzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaTsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCiAJc2kgPSBvc2ItPnNsb3RfaW5mbzsKIAorCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CiAJb2NmczJfdXBkYXRlX3Nsb3RfaW5mbyhzaSk7CiAKLQlzcGluX2xvY2soJnNpLT5zaV9sb2NrKTsKIAkvKiBzZWFyY2ggZm9yIG91cnNlbHZlcyBmaXJzdCBhbmQgdGFrZSB0aGUgc2xvdCBpZiBpdCBhbHJlYWR5CiAJICogZXhpc3RzLiBQZXJoYXBzIHdlIG5lZWQgdG8gbWFyayB0aGlzIGluIGEgdmFyaWFibGUgZm9yIG91cgogCSAqIG93biBqb3VybmFsIHJlY292ZXJ5PyBQb3NzaWJseSBub3QsIHRob3VnaCB3ZSBjZXJ0YWlubHkKIAkgKiBuZWVkIHRvIHdhcm4gdG8gdGhlIHVzZXIgKi8KIAlzbG90ID0gX19vY2ZzMl9ub2RlX251bV90b19zbG90KHNpLCBvc2ItPm5vZGVfbnVtKTsKLQlpZiAoc2xvdCA9PSBPQ0ZTMl9JTlZBTElEX1NMT1QpIHsKKwlpZiAoc2xvdCA8IDApIHsKIAkJLyogaWYgbm8gc2xvdCB5ZXQsIHRoZW4ganVzdCB0YWtlIDFzdCBhdmFpbGFibGUKIAkJICogb25lLiAqLwogCQlzbG90ID0gX19vY2ZzMl9maW5kX2VtcHR5X3Nsb3Qoc2ksIG9zYi0+cHJlZmVycmVkX3Nsb3QpOwotCQlpZiAoc2xvdCA9PSBPQ0ZTMl9JTlZBTElEX1NMT1QpIHsKLQkJCXNwaW5fdW5sb2NrKCZzaS0+c2lfbG9jayk7CisJCWlmIChzbG90IDwgMCkgeworCQkJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwogCQkJbWxvZyhNTF9FUlJPUiwgIm5vIGZyZWUgc2xvdHMgYXZhaWxhYmxlIVxuIik7CiAJCQlzdGF0dXMgPSAtRUlOVkFMOwogCQkJZ290byBiYWlsOwpAQCAtMjQ4LDEzICs1MDAsMTMgQEAKIAkJbWxvZyhNTF9OT1RJQ0UsICJzbG90ICVkIGlzIGFscmVhZHkgYWxsb2NhdGVkIHRvIHRoaXMgbm9kZSFcbiIsCiAJCSAgICAgc2xvdCk7CiAKLQlfX29jZnMyX2ZpbGxfc2xvdChzaSwgc2xvdCwgb3NiLT5ub2RlX251bSk7CisJb2NmczJfc2V0X3Nsb3Qoc2ksIHNsb3QsIG9zYi0+bm9kZV9udW0pOwogCW9zYi0+c2xvdF9udW0gPSBzbG90OwotCXNwaW5fdW5sb2NrKCZzaS0+c2lfbG9jayk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwogCiAJbWxvZygwLCAidGFraW5nIG5vZGUgc2xvdCAlZFxuIiwgb3NiLT5zbG90X251bSk7CiAKLQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZGlza19zbG90cyhvc2IsIHNpKTsKKwlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZGlza19zbG90KG9zYiwgc2ksIG9zYi0+c2xvdF9udW0pOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAKQEAgLTI2NSwyNyArNTE3LDI3IEBACiAKIHZvaWQgb2NmczJfcHV0X3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCBzbG90X251bTsKIAlzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSA9IG9zYi0+c2xvdF9pbmZvOwogCiAJaWYgKCFzaSkKIAkJcmV0dXJuOwogCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAlvY2ZzMl91cGRhdGVfc2xvdF9pbmZvKHNpKTsKIAotCXNwaW5fbG9jaygmc2ktPnNpX2xvY2spOwotCV9fb2NmczJfZmlsbF9zbG90KHNpLCBvc2ItPnNsb3RfbnVtLCBPQ0ZTMl9JTlZBTElEX1NMT1QpOworCXNsb3RfbnVtID0gb3NiLT5zbG90X251bTsKKwlvY2ZzMl9pbnZhbGlkYXRlX3Nsb3Qoc2ksIG9zYi0+c2xvdF9udW0pOwogCW9zYi0+c2xvdF9udW0gPSBPQ0ZTMl9JTlZBTElEX1NMT1Q7Ci0Jc3Bpbl91bmxvY2soJnNpLT5zaV9sb2NrKTsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiAKLQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZGlza19zbG90cyhvc2IsIHNpKTsKKwlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZGlza19zbG90KG9zYiwgc2ksIHNsb3RfbnVtKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKIGJhaWw6Ci0Jb3NiLT5zbG90X2luZm8gPSBOVUxMOwotCW9jZnMyX2ZyZWVfc2xvdF9pbmZvKHNpKTsKKwlvY2ZzMl9mcmVlX3Nsb3RfaW5mbyhvc2IpOwogfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zbG90X21hcC5oIGIvZnMvb2NmczIvc2xvdF9tYXAuaAppbmRleCAxMDI1ODcyLi42MDFjOTVmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zbG90X21hcC5oCisrKyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmgKQEAgLTI3LDM4ICsyNywxOCBAQAogI2lmbmRlZiBTTE9UTUFQX0gKICNkZWZpbmUgU0xPVE1BUF9ICiAKLXN0cnVjdCBvY2ZzMl9zbG90X2luZm8gewotCXNwaW5sb2NrX3Qgc2lfbG9jazsKLQotICAgICAgIAlzdHJ1Y3QgaW5vZGUgKnNpX2lub2RlOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqc2lfYmg7Ci0JdW5zaWduZWQgaW50IHNpX251bV9zbG90czsKLQl1bnNpZ25lZCBpbnQgc2lfc2l6ZTsKLQlzMTYgc2lfZ2xvYmFsX25vZGVfbnVtc1tPQ0ZTMl9NQVhfU0xPVFNdOwotfTsKLQogaW50IG9jZnMyX2luaXRfc2xvdF9pbmZvKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKLXZvaWQgb2NmczJfZnJlZV9zbG90X2luZm8oc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2kpOwordm9pZCBvY2ZzMl9mcmVlX3Nsb3RfaW5mbyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiAKIGludCBvY2ZzMl9maW5kX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwogdm9pZCBvY2ZzMl9wdXRfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiAKLXZvaWQgb2NmczJfdXBkYXRlX3Nsb3RfaW5mbyhzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSk7Ci1pbnQgb2NmczJfdXBkYXRlX2Rpc2tfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICAgc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2kpOworaW50IG9jZnMyX3JlZnJlc2hfc2xvdF9pbmZvKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIAotczE2IG9jZnMyX25vZGVfbnVtX3RvX3Nsb3Qoc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyAqc2ksCi0JCQkgICBzMTYgZ2xvYmFsKTsKLXZvaWQgb2NmczJfY2xlYXJfc2xvdChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwKLQkJICAgICAgczE2IHNsb3RfbnVtKTsKK2ludCBvY2ZzMl9ub2RlX251bV90b19zbG90KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1bnNpZ25lZCBpbnQgbm9kZV9udW0pOworaW50IG9jZnMyX3Nsb3RfdG9fbm9kZV9udW1fbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgc2xvdF9udW0sCisJCQkJICB1bnNpZ25lZCBpbnQgKm5vZGVfbnVtKTsKIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfaXNfZW1wdHlfc2xvdChzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaSwKLQkJCQkgICAgICBpbnQgc2xvdF9udW0pCi17Ci0JQlVHX09OKHNsb3RfbnVtID09IE9DRlMyX0lOVkFMSURfU0xPVCk7Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZzaS0+c2lfbG9jayk7Ci0KLQlyZXR1cm4gc2ktPnNpX2dsb2JhbF9ub2RlX251bXNbc2xvdF9udW1dID09IE9DRlMyX0lOVkFMSURfU0xPVDsKLX0KK2ludCBvY2ZzMl9jbGVhcl9zbG90KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgc2xvdF9udW0pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrX28yY2IuYyBiL2ZzL29jZnMyL3N0YWNrX28yY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzFkNzRjCi0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIvc3RhY2tfbzJjYi5jCkBAIC0wLDAgKzEsNDIwIEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQorICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6CisgKgorICogc3RhY2tfbzJjYi5jCisgKgorICogQ29kZSB3aGljaCBpbnRlcmZhY2VzIG9jZnMyIHdpdGggdGhlIG8yY2Igc3RhY2suCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyogTmVlZGVkIGZvciBBT1BfVFJVTkNBVEVEX1BBR0UgaW4gbWxvZ19lcnJubygpICovCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2luY2x1ZGUgImNsdXN0ZXIvbWFza2xvZy5oIgorI2luY2x1ZGUgImNsdXN0ZXIvbm9kZW1hbmFnZXIuaCIKKyNpbmNsdWRlICJjbHVzdGVyL2hlYXJ0YmVhdC5oIgorCisjaW5jbHVkZSAic3RhY2tnbHVlLmgiCisKK3N0cnVjdCBvMmRsbV9wcml2YXRlIHsKKwlzdHJ1Y3QgZGxtX2V2aWN0aW9uX2NiIG9wX2V2aWN0aW9uX2NiOworfTsKKworc3RhdGljIHN0cnVjdCBvY2ZzMl9zdGFja19wbHVnaW4gbzJjYl9zdGFjazsKKworLyogVGhlc2Ugc2hvdWxkIGJlIGlkZW50aWNhbCAqLworI2lmIChETE1fTE9DS19JViAhPSBMS01fSVZNT0RFKQorIyBlcnJvciBMb2NrIG1vZGVzIGRvIG5vdCBtYXRjaAorI2VuZGlmCisjaWYgKERMTV9MT0NLX05MICE9IExLTV9OTE1PREUpCisjIGVycm9yIExvY2sgbW9kZXMgZG8gbm90IG1hdGNoCisjZW5kaWYKKyNpZiAoRExNX0xPQ0tfQ1IgIT0gTEtNX0NSTU9ERSkKKyMgZXJyb3IgTG9jayBtb2RlcyBkbyBub3QgbWF0Y2gKKyNlbmRpZgorI2lmIChETE1fTE9DS19DVyAhPSBMS01fQ1dNT0RFKQorIyBlcnJvciBMb2NrIG1vZGVzIGRvIG5vdCBtYXRjaAorI2VuZGlmCisjaWYgKERMTV9MT0NLX1BSICE9IExLTV9QUk1PREUpCisjIGVycm9yIExvY2sgbW9kZXMgZG8gbm90IG1hdGNoCisjZW5kaWYKKyNpZiAoRExNX0xPQ0tfUFcgIT0gTEtNX1BXTU9ERSkKKyMgZXJyb3IgTG9jayBtb2RlcyBkbyBub3QgbWF0Y2gKKyNlbmRpZgorI2lmIChETE1fTE9DS19FWCAhPSBMS01fRVhNT0RFKQorIyBlcnJvciBMb2NrIG1vZGVzIGRvIG5vdCBtYXRjaAorI2VuZGlmCitzdGF0aWMgaW5saW5lIGludCBtb2RlX3RvX28yZGxtKGludCBtb2RlKQoreworCUJVR19PTihtb2RlID4gTEtNX01BWE1PREUpOworCisJcmV0dXJuIG1vZGU7Cit9CisKKyNkZWZpbmUgbWFwX2ZsYWcoX2dlbmVyaWMsIF9vMmRsbSkJCVwKKwlpZiAoZmxhZ3MgJiAoX2dlbmVyaWMpKSB7CQlcCisJCWZsYWdzICY9IH4oX2dlbmVyaWMpOwkJXAorCQlvMmRsbV9mbGFncyB8PSAoX28yZGxtKTsJXAorCX0KK3N0YXRpYyBpbnQgZmxhZ3NfdG9fbzJkbG0odTMyIGZsYWdzKQoreworCWludCBvMmRsbV9mbGFncyA9IDA7CisKKwltYXBfZmxhZyhETE1fTEtGX05PUVVFVUUsIExLTV9OT1FVRVVFKTsKKwltYXBfZmxhZyhETE1fTEtGX0NBTkNFTCwgTEtNX0NBTkNFTCk7CisJbWFwX2ZsYWcoRExNX0xLRl9DT05WRVJULCBMS01fQ09OVkVSVCk7CisJbWFwX2ZsYWcoRExNX0xLRl9WQUxCTEssIExLTV9WQUxCTEspOworCW1hcF9mbGFnKERMTV9MS0ZfSVZWQUxCTEssIExLTV9JTlZWQUxCTEspOworCW1hcF9mbGFnKERMTV9MS0ZfT1JQSEFOLCBMS01fT1JQSEFOKTsKKwltYXBfZmxhZyhETE1fTEtGX0ZPUkNFVU5MT0NLLCBMS01fRk9SQ0UpOworCW1hcF9mbGFnKERMTV9MS0ZfVElNRU9VVCwgTEtNX1RJTUVPVVQpOworCW1hcF9mbGFnKERMTV9MS0ZfTE9DQUwsIExLTV9MT0NBTCk7CisKKwkvKiBtYXBfZmxhZygpIHNob3VsZCBoYXZlIGNsZWFyZWQgZXZlcnkgZmxhZyBwYXNzZWQgaW4gKi8KKwlCVUdfT04oZmxhZ3MgIT0gMCk7CisKKwlyZXR1cm4gbzJkbG1fZmxhZ3M7Cit9CisjdW5kZWYgbWFwX2ZsYWcKKworLyoKKyAqIE1hcCBhbiBvMmRsbSBzdGF0dXMgdG8gc3RhbmRhcmQgZXJybm8gdmFsdWVzLgorICoKKyAqIG8yZGxtIG9ubHkgdXNlcyBhIGhhbmRmdWwgb2YgdGhlc2UsIGFuZCByZXR1cm5zIGV2ZW4gZmV3ZXIgdG8gdGhlCisgKiBjYWxsZXIuIFN0aWxsLCB3ZSB0cnkgdG8gYXNzaWduIHNhbmUgdmFsdWVzIHRvIGVhY2ggZXJyb3IuCisgKgorICogVGhlIGZvbGxvd2luZyB2YWx1ZSBwYWlycyBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgdG8gZGxtZ2x1ZSwgdGh1cworICogdGhlIHJpZ2h0IGhhbmQgc2lkZSBuZWVkcyB0byBzdGF5IHVuaXF1ZSAtIG5ldmVyIGR1cGxpY2F0ZSB0aGUKKyAqIG1hcHBpbmcgZWxzZXdoZXJlIGluIHRoZSB0YWJsZSEKKyAqCisgKiBETE1fTk9STUFMOgkJMAorICogRExNX05PVFFVRVVFRDoJLUVBR0FJTgorICogRExNX0NBTkNFTEdSQU5UOgktRUJVU1kKKyAqIERMTV9DQU5DRUw6CQktRExNX0VDQU5DRUwKKyAqLworLyogS2VlcCBpbiBzeW5jIHdpdGggZGxtYXBpLmggKi8KK3N0YXRpYyBpbnQgc3RhdHVzX21hcFtdID0geworCVtETE1fTk9STUFMXQkJCT0gMCwJCS8qIFN1Y2Nlc3MgKi8KKwlbRExNX0dSQU5URURdCQkJPSAtRUlOVkFMLAorCVtETE1fREVOSUVEXQkJCT0gLUVBQ0NFUywKKwlbRExNX0RFTklFRF9OT0xPQ0tTXQkJPSAtRUFDQ0VTLAorCVtETE1fV09SS0lOR10JCQk9IC1FQUNDRVMsCisJW0RMTV9CTE9DS0VEXQkJCT0gLUVJTlZBTCwKKwlbRExNX0JMT0NLRURfT1JQSEFOXQkJPSAtRUlOVkFMLAorCVtETE1fREVOSUVEX0dSQUNFX1BFUklPRF0JPSAtRUFDQ0VTLAorCVtETE1fU1lTRVJSXQkJCT0gLUVOT01FTSwJLyogSXQgaXMgd2hhdCBpdCBpcyAqLworCVtETE1fTk9TVVBQT1JUXQkJCT0gLUVQUk9UTywKKwlbRExNX0NBTkNFTEdSQU5UXQkJPSAtRUJVU1ksCS8qIENhbmNlbCBhZnRlciBncmFudCAqLworCVtETE1fSVZMT0NLSURdCQkJPSAtRUlOVkFMLAorCVtETE1fU1lOQ10JCQk9IC1FSU5WQUwsCisJW0RMTV9CQURUWVBFXQkJCT0gLUVJTlZBTCwKKwlbRExNX0JBRFJFU09VUkNFXQkJPSAtRUlOVkFMLAorCVtETE1fTUFYSEFORExFU10JCT0gLUVOT01FTSwKKwlbRExNX05PQ0xJTkZPXQkJCT0gLUVJTlZBTCwKKwlbRExNX05PTE9DS01HUl0JCQk9IC1FSU5WQUwsCisJW0RMTV9OT1BVUkdFRF0JCQk9IC1FSU5WQUwsCisJW0RMTV9CQURBUkdTXQkJCT0gLUVJTlZBTCwKKwlbRExNX1ZPSURdCQkJPSAtRUlOVkFMLAorCVtETE1fTk9UUVVFVUVEXQkJCT0gLUVBR0FJTiwJLyogVHJ5bG9jayBmYWlsZWQgKi8KKwlbRExNX0lWQlVGTEVOXQkJCT0gLUVJTlZBTCwKKwlbRExNX0NWVFVOR1JBTlRdCQk9IC1FUEVSTSwKKwlbRExNX0JBRFBBUkFNXQkJCT0gLUVJTlZBTCwKKwlbRExNX1ZBTE5PVFZBTElEXQkJPSAtRUlOVkFMLAorCVtETE1fUkVKRUNURURdCQkJPSAtRVBFUk0sCisJW0RMTV9BQk9SVF0JCQk9IC1FSU5WQUwsCisJW0RMTV9DQU5DRUxdCQkJPSAtRExNX0VDQU5DRUwsCS8qIFN1Y2Nlc3NmdWwgY2FuY2VsICovCisJW0RMTV9JVlJFU0hBTkRMRV0JCT0gLUVJTlZBTCwKKwlbRExNX0RFQURMT0NLXQkJCT0gLUVERUFETEssCisJW0RMTV9ERU5JRURfTk9BU1RTXQkJPSAtRUlOVkFMLAorCVtETE1fRk9SV0FSRF0JCQk9IC1FSU5WQUwsCisJW0RMTV9USU1FT1VUXQkJCT0gLUVUSU1FRE9VVCwKKwlbRExNX0lWR1JPVVBJRF0JCQk9IC1FSU5WQUwsCisJW0RMTV9WRVJTX0NPTkZMSUNUXQkJPSAtRU9QTk9UU1VQUCwKKwlbRExNX0JBRF9ERVZJQ0VfUEFUSF0JCT0gLUVOT0VOVCwKKwlbRExNX05PX0RFVklDRV9QRVJNSVNTSU9OXQk9IC1FUEVSTSwKKwlbRExNX05PX0NPTlRST0xfREVWSUNFXQkJPSAtRU5PRU5ULAorCVtETE1fUkVDT1ZFUklOR10JCT0gLUVOT1RDT05OLAorCVtETE1fTUlHUkFUSU5HXQkJCT0gLUVSRVNUQVJULAorCVtETE1fTUFYU1RBVFNdCQkJPSAtRUlOVkFMLAorfTsKKworc3RhdGljIGludCBkbG1fc3RhdHVzX3RvX2Vycm5vKGVudW0gZGxtX3N0YXR1cyBzdGF0dXMpCit7CisJQlVHX09OKHN0YXR1cyA+IChzaXplb2Yoc3RhdHVzX21hcCkgLyBzaXplb2Yoc3RhdHVzX21hcFswXSkpKTsKKworCXJldHVybiBzdGF0dXNfbWFwW3N0YXR1c107Cit9CisKK3N0YXRpYyB2b2lkIG8yZGxtX2xvY2tfYXN0X3dyYXBwZXIodm9pZCAqYXN0YXJnKQoreworCUJVR19PTihvMmNiX3N0YWNrLnNwX3Byb3RvID09IE5VTEwpOworCisJbzJjYl9zdGFjay5zcF9wcm90by0+bHBfbG9ja19hc3QoYXN0YXJnKTsKK30KKworc3RhdGljIHZvaWQgbzJkbG1fYmxvY2tpbmdfYXN0X3dyYXBwZXIodm9pZCAqYXN0YXJnLCBpbnQgbGV2ZWwpCit7CisJQlVHX09OKG8yY2Jfc3RhY2suc3BfcHJvdG8gPT0gTlVMTCk7CisKKwlvMmNiX3N0YWNrLnNwX3Byb3RvLT5scF9ibG9ja2luZ19hc3QoYXN0YXJnLCBsZXZlbCk7Cit9CisKK3N0YXRpYyB2b2lkIG8yZGxtX3VubG9ja19hc3Rfd3JhcHBlcih2b2lkICphc3RhcmcsIGVudW0gZGxtX3N0YXR1cyBzdGF0dXMpCit7CisJaW50IGVycm9yID0gZGxtX3N0YXR1c190b19lcnJubyhzdGF0dXMpOworCisJQlVHX09OKG8yY2Jfc3RhY2suc3BfcHJvdG8gPT0gTlVMTCk7CisKKwkvKgorCSAqIEluIG8yZGxtLCB5b3UgY2FuIGdldCBib3RoIHRoZSBsb2NrX2FzdCgpIGZvciB0aGUgbG9jayBiZWluZworCSAqIGdyYW50ZWQgYW5kIHRoZSB1bmxvY2tfYXN0KCkgZm9yIHRoZSBDQU5DRUwgZmFpbGluZy4gIEEKKwkgKiBzdWNjZXNzZnVsIGNhbmNlbCBzZW5kcyBETE1fTk9STUFMIGhlcmUuICBJZiB0aGUKKwkgKiBsb2NrIGdyYW50IGhhcHBlbmVkIGJlZm9yZSB0aGUgY2FuY2VsIGFycml2ZWQsIHlvdSBnZXQKKwkgKiBETE1fQ0FOQ0VMR1JBTlQuCisJICoKKwkgKiBUaGVyZSdzIG5vIG5lZWQgZm9yIHRoZSBkb3VibGUtYXN0LiAgSWYgd2Ugc2VlIERMTV9DQU5DRUxHUkFOVCwKKwkgKiB3ZSBqdXN0IGlnbm9yZSBpdC4gIFdlIGV4cGVjdCB0aGUgbG9ja19hc3QoKSB0byBoYW5kbGUgdGhlCisJICogZ3JhbnRlZCBsb2NrLgorCSAqLworCWlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKQorCQlyZXR1cm47CisKKwlvMmNiX3N0YWNrLnNwX3Byb3RvLT5scF91bmxvY2tfYXN0KGFzdGFyZywgZXJyb3IpOworfQorCitzdGF0aWMgaW50IG8yY2JfZGxtX2xvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJCSBpbnQgbW9kZSwKKwkJCSB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJCSB1MzIgZmxhZ3MsCisJCQkgdm9pZCAqbmFtZSwKKwkJCSB1bnNpZ25lZCBpbnQgbmFtZWxlbiwKKwkJCSB2b2lkICphc3RhcmcpCit7CisJZW51bSBkbG1fc3RhdHVzIHN0YXR1czsKKwlpbnQgbzJkbG1fbW9kZSA9IG1vZGVfdG9fbzJkbG0obW9kZSk7CisJaW50IG8yZGxtX2ZsYWdzID0gZmxhZ3NfdG9fbzJkbG0oZmxhZ3MpOworCWludCByZXQ7CisKKwlzdGF0dXMgPSBkbG1sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgbzJkbG1fbW9kZSwgJmxrc2ItPmxrc2JfbzJkbG0sCisJCQkgbzJkbG1fZmxhZ3MsIG5hbWUsIG5hbWVsZW4sCisJCQkgbzJkbG1fbG9ja19hc3Rfd3JhcHBlciwgYXN0YXJnLAorCQkJIG8yZGxtX2Jsb2NraW5nX2FzdF93cmFwcGVyKTsKKwlyZXQgPSBkbG1fc3RhdHVzX3RvX2Vycm5vKHN0YXR1cyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvMmNiX2RsbV91bmxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkJICAgdTMyIGZsYWdzLAorCQkJICAgdm9pZCAqYXN0YXJnKQoreworCWVudW0gZGxtX3N0YXR1cyBzdGF0dXM7CisJaW50IG8yZGxtX2ZsYWdzID0gZmxhZ3NfdG9fbzJkbG0oZmxhZ3MpOworCWludCByZXQ7CisKKwlzdGF0dXMgPSBkbG11bmxvY2soY29ubi0+Y2NfbG9ja3NwYWNlLCAmbGtzYi0+bGtzYl9vMmRsbSwKKwkJCSAgIG8yZGxtX2ZsYWdzLCBvMmRsbV91bmxvY2tfYXN0X3dyYXBwZXIsIGFzdGFyZyk7CisJcmV0ID0gZGxtX3N0YXR1c190b19lcnJubyhzdGF0dXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbzJjYl9kbG1fbG9ja19zdGF0dXModW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCit7CisJcmV0dXJuIGRsbV9zdGF0dXNfdG9fZXJybm8obGtzYi0+bGtzYl9vMmRsbS5zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCAqbzJjYl9kbG1fbHZiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQoreworCXJldHVybiAodm9pZCAqKShsa3NiLT5sa3NiX28yZGxtLmx2Yik7Cit9CisKK3N0YXRpYyB2b2lkIG8yY2JfZHVtcF9sa3NiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQoreworCWRsbV9wcmludF9vbmVfbG9jayhsa3NiLT5sa3NiX28yZGxtLmxvY2tpZCk7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0aGUgZGxtIHdoZW4gaXQncyBhYm91dCB0byBldmljdCBhIG5vZGUuIFRoaXMgaXMgaG93IHRoZQorICogY2xhc3NpYyBzdGFjayBzaWduYWxzIG5vZGUgZGVhdGguCisgKi8KK3N0YXRpYyB2b2lkIG8yZGxtX2V2aWN0aW9uX2NiKGludCBub2RlX251bSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uID0gZGF0YTsKKworCW1sb2coTUxfTk9USUNFLCAibzJkbG0gaGFzIGV2aWN0ZWQgbm9kZSAlZCBmcm9tIGdyb3VwICUuKnNcbiIsCisJICAgICBub2RlX251bSwgY29ubi0+Y2NfbmFtZWxlbiwgY29ubi0+Y2NfbmFtZSk7CisKKwljb25uLT5jY19yZWNvdmVyeV9oYW5kbGVyKG5vZGVfbnVtLCBjb25uLT5jY19yZWNvdmVyeV9kYXRhKTsKK30KKworc3RhdGljIGludCBvMmNiX2NsdXN0ZXJfY29ubmVjdChzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uKQoreworCWludCByYyA9IDA7CisJdTMyIGRsbV9rZXk7CisJc3RydWN0IGRsbV9jdHh0ICpkbG07CisJc3RydWN0IG8yZGxtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGRsbV9wcm90b2NvbF92ZXJzaW9uIGRsbV92ZXJzaW9uOworCisJQlVHX09OKGNvbm4gPT0gTlVMTCk7CisJQlVHX09OKG8yY2Jfc3RhY2suc3BfcHJvdG8gPT0gTlVMTCk7CisKKwkvKiBmb3Igbm93IHdlIG9ubHkgaGF2ZSBvbmUgY2x1c3Rlci9ub2RlLCBtYWtlIHN1cmUgd2Ugc2VlIGl0CisJICogaW4gdGhlIGhlYXJ0YmVhdCB1bml2ZXJzZSAqLworCWlmICghbzJoYl9jaGVja19sb2NhbF9ub2RlX2hlYXJ0YmVhdGluZygpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMmRsbV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwkvKiBUaGlzIGp1c3QgZmlsbHMgdGhlIHN0cnVjdHVyZSBpbi4gIEl0IGlzIHNhZmUgdG8gcGFzcyBjb25uLiAqLworCWRsbV9zZXR1cF9ldmljdGlvbl9jYigmcHJpdi0+b3BfZXZpY3Rpb25fY2IsIG8yZGxtX2V2aWN0aW9uX2NiLAorCQkJICAgICAgY29ubik7CisKKwljb25uLT5jY19wcml2YXRlID0gcHJpdjsKKworCS8qIHVzZWQgYnkgdGhlIGRsbSBjb2RlIHRvIG1ha2UgbWVzc2FnZSBoZWFkZXJzIHVuaXF1ZSwgZWFjaAorCSAqIG5vZGUgaW4gdGhpcyBkb21haW4gbXVzdCBhZ3JlZSBvbiB0aGlzLiAqLworCWRsbV9rZXkgPSBjcmMzMl9sZSgwLCBjb25uLT5jY19uYW1lLCBjb25uLT5jY19uYW1lbGVuKTsKKwlkbG1fdmVyc2lvbi5wdl9tYWpvciA9IGNvbm4tPmNjX3ZlcnNpb24ucHZfbWFqb3I7CisJZGxtX3ZlcnNpb24ucHZfbWlub3IgPSBjb25uLT5jY192ZXJzaW9uLnB2X21pbm9yOworCisJZGxtID0gZGxtX3JlZ2lzdGVyX2RvbWFpbihjb25uLT5jY19uYW1lLCBkbG1fa2V5LCAmZGxtX3ZlcnNpb24pOworCWlmIChJU19FUlIoZGxtKSkgeworCQlyYyA9IFBUUl9FUlIoZGxtKTsKKwkJbWxvZ19lcnJubyhyYyk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJY29ubi0+Y2NfdmVyc2lvbi5wdl9tYWpvciA9IGRsbV92ZXJzaW9uLnB2X21ham9yOworCWNvbm4tPmNjX3ZlcnNpb24ucHZfbWlub3IgPSBkbG1fdmVyc2lvbi5wdl9taW5vcjsKKwljb25uLT5jY19sb2Nrc3BhY2UgPSBkbG07CisKKwlkbG1fcmVnaXN0ZXJfZXZpY3Rpb25fY2IoZGxtLCAmcHJpdi0+b3BfZXZpY3Rpb25fY2IpOworCitvdXRfZnJlZToKKwlpZiAocmMgJiYgY29ubi0+Y2NfcHJpdmF0ZSkKKwkJa2ZyZWUoY29ubi0+Y2NfcHJpdmF0ZSk7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbzJjYl9jbHVzdGVyX2Rpc2Nvbm5lY3Qoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgICBpbnQgaGFuZ3VwX3BlbmRpbmcpCit7CisJc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBjb25uLT5jY19sb2Nrc3BhY2U7CisJc3RydWN0IG8yZGxtX3ByaXZhdGUgKnByaXYgPSBjb25uLT5jY19wcml2YXRlOworCisJZGxtX3VucmVnaXN0ZXJfZXZpY3Rpb25fY2IoJnByaXYtPm9wX2V2aWN0aW9uX2NiKTsKKwljb25uLT5jY19wcml2YXRlID0gTlVMTDsKKwlrZnJlZShwcml2KTsKKworCWRsbV91bnJlZ2lzdGVyX2RvbWFpbihkbG0pOworCWNvbm4tPmNjX2xvY2tzcGFjZSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbzJoYl9zdG9wKGNvbnN0IGNoYXIgKmdyb3VwKQoreworCWludCByZXQ7CisJY2hhciAqYXJndls1XSwgKmVudnBbM107CisKKwlhcmd2WzBdID0gKGNoYXIgKilvMm5tX2dldF9oYl9jdGxfcGF0aCgpOworCWFyZ3ZbMV0gPSAiLUsiOworCWFyZ3ZbMl0gPSAiLXUiOworCWFyZ3ZbM10gPSAoY2hhciAqKWdyb3VwOworCWFyZ3ZbNF0gPSBOVUxMOworCisJbWxvZygwLCAiUnVuOiAlcyAlcyAlcyAlc1xuIiwgYXJndlswXSwgYXJndlsxXSwgYXJndlsyXSwgYXJndlszXSk7CisKKwkvKiBtaW5pbWFsIGNvbW1hbmQgZW52aXJvbm1lbnQgdGFrZW4gZnJvbSBjcHVfcnVuX3NiaW5faG90cGx1ZyAqLworCWVudnBbMF0gPSAiSE9NRT0vIjsKKwllbnZwWzFdID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iOworCWVudnBbMl0gPSBOVUxMOworCisJcmV0ID0gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LCBlbnZwLCBVTUhfV0FJVF9QUk9DKTsKKwlpZiAocmV0IDwgMCkKKwkJbWxvZ19lcnJubyhyZXQpOworfQorCisvKgorICogSGFuZ3VwIGlzIGEgaGFjayBmb3IgdG9vbHMgY29tcGF0aWJpbGl0eS4gIE9sZGVyIG9jZnMyLXRvb2xzIHNvZnR3YXJlCisgKiBleHBlY3RzIHRoZSBmaWxlc3lzdGVtIHRvIGNhbGwgIm9jZnMyX2hiX2N0bCIgZHVyaW5nIHVubW91bnQuICBUaGlzCisgKiBoYXBwZW5zIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgRExNIGdvdCBzdGFydGVkLCBzbyB3ZSBjYW4ndCBkbyBpdAorICogaW4gb2NmczJfY2x1c3Rlcl9kaXNjb25uZWN0KCkuICBXZSBicmluZyB0aGUgbzJoYl9zdG9wKCkgZnVuY3Rpb24gaW50bworICogdGhlIGdsdWUgYW5kIHByb3ZpZGUgYSAiaGFuZ3VwIiBBUEkgZm9yIHN1cGVyLmMgdG8gY2FsbC4KKyAqCisgKiBPdGhlciBzdGFja3Mgd2lsbCBldmVudHVhbGx5IHByb3ZpZGUgYSBOVUxMIC0+aGFuZ3VwKCkgcG9pbnRlci4KKyAqLworc3RhdGljIHZvaWQgbzJjYl9jbHVzdGVyX2hhbmd1cChjb25zdCBjaGFyICpncm91cCwgaW50IGdyb3VwbGVuKQoreworCW8yaGJfc3RvcChncm91cCk7Cit9CisKK3N0YXRpYyBpbnQgbzJjYl9jbHVzdGVyX3RoaXNfbm9kZSh1bnNpZ25lZCBpbnQgKm5vZGUpCit7CisJaW50IG5vZGVfbnVtOworCisJbm9kZV9udW0gPSBvMm5tX3RoaXNfbm9kZSgpOworCWlmIChub2RlX251bSA9PSBPMk5NX0lOVkFMSURfTk9ERV9OVU0pCisJCXJldHVybiAtRU5PRU5UOworCisJaWYgKG5vZGVfbnVtID49IE8yTk1fTUFYX05PREVTKQorCQlyZXR1cm4gLUVPVkVSRkxPVzsKKworCSpub2RlID0gbm9kZV9udW07CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBvY2ZzMl9zdGFja19vcGVyYXRpb25zIG8yY2Jfc3RhY2tfb3BzID0geworCS5jb25uZWN0CT0gbzJjYl9jbHVzdGVyX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QJPSBvMmNiX2NsdXN0ZXJfZGlzY29ubmVjdCwKKwkuaGFuZ3VwCQk9IG8yY2JfY2x1c3Rlcl9oYW5ndXAsCisJLnRoaXNfbm9kZQk9IG8yY2JfY2x1c3Rlcl90aGlzX25vZGUsCisJLmRsbV9sb2NrCT0gbzJjYl9kbG1fbG9jaywKKwkuZGxtX3VubG9jawk9IG8yY2JfZGxtX3VubG9jaywKKwkubG9ja19zdGF0dXMJPSBvMmNiX2RsbV9sb2NrX3N0YXR1cywKKwkubG9ja19sdmIJPSBvMmNiX2RsbV9sdmIsCisJLmR1bXBfbGtzYgk9IG8yY2JfZHVtcF9sa3NiLAorfTsKKworc3RhdGljIHN0cnVjdCBvY2ZzMl9zdGFja19wbHVnaW4gbzJjYl9zdGFjayA9IHsKKwkuc3BfbmFtZQk9ICJvMmNiIiwKKwkuc3Bfb3BzCQk9ICZvMmNiX3N0YWNrX29wcywKKwkuc3Bfb3duZXIJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG8yY2Jfc3RhY2tfaW5pdCh2b2lkKQoreworCXJldHVybiBvY2ZzMl9zdGFja19nbHVlX3JlZ2lzdGVyKCZvMmNiX3N0YWNrKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG8yY2Jfc3RhY2tfZXhpdCh2b2lkKQoreworCW9jZnMyX3N0YWNrX2dsdWVfdW5yZWdpc3RlcigmbzJjYl9zdGFjayk7Cit9CisKK01PRFVMRV9BVVRIT1IoIk9yYWNsZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvY2ZzMiBkcml2ZXIgZm9yIHRoZSBjbGFzc2ljIG8yY2Igc3RhY2siKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9pbml0KG8yY2Jfc3RhY2tfaW5pdCk7Cittb2R1bGVfZXhpdChvMmNiX3N0YWNrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tfdXNlci5jIGIvZnMvb2NmczIvc3RhY2tfdXNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Mjg2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9zdGFja191c2VyLmMKQEAgLTAsMCArMSw4ODMgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiBzdGFja191c2VyLmMKKyAqCisgKiBDb2RlIHdoaWNoIGludGVyZmFjZXMgb2NmczIgd2l0aCBmcy9kbG0gYW5kIGEgdXNlcnNwYWNlIHN0YWNrLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgIm9jZnMyLmgiICAvKiBGb3Igc3RydWN0IG9jZnMyX2xvY2tfcmVzICovCisjaW5jbHVkZSAic3RhY2tnbHVlLmgiCisKKworLyoKKyAqIFRoZSBjb250cm9sIHByb3RvY29sIHN0YXJ0cyB3aXRoIGEgaGFuZHNoYWtlLiAgVW50aWwgdGhlIGhhbmRzaGFrZQorICogaXMgY29tcGxldGUsIHRoZSBjb250cm9sIGRldmljZSB3aWxsIGZhaWwgYWxsIHdyaXRlKDIpcy4KKyAqCisgKiBUaGUgaGFuZHNoYWtlIGlzIHNpbXBsZS4gIEZpcnN0LCB0aGUgY2xpZW50IHJlYWRzIHVudGlsIEVPRi4gIEVhY2ggbGluZQorICogb2Ygb3V0cHV0IGlzIGEgc3VwcG9ydGVkIHByb3RvY29sIHRhZy4gIEFsbCBwcm90b2NvbCB0YWdzIGFyZSBhIHNpbmdsZQorICogY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IGEgdHdvIGhleCBkaWdpdCB2ZXJzaW9uIG51bWJlci4gIEN1cnJlbnRseSB0aGUKKyAqIG9ubHkgdGhpbmdzIHN1cHBvcnRlZCBpcyBUMDEsIGZvciAiVGV4dC1iYXNlIHZlcnNpb24gMHgwMSIuICBOZXh0LCB0aGUKKyAqIGNsaWVudCB3cml0ZXMgdGhlIHZlcnNpb24gdGhleSB3b3VsZCBsaWtlIHRvIHVzZSwgaW5jbHVkaW5nIHRoZSBuZXdsaW5lLgorICogVGh1cywgdGhlIHByb3RvY29sIHRhZyBpcyAnVDAxXG4nLiAgSWYgdGhlIHZlcnNpb24gdGFnIHdyaXR0ZW4gaXMKKyAqIHVua25vd24sIC1FSU5WQUwgaXMgcmV0dXJuZWQuICBPbmNlIHRoZSBuZWdvdGlhdGlvbiBpcyBjb21wbGV0ZSwgdGhlCisgKiBjbGllbnQgY2FuIHN0YXJ0IHNlbmRpbmcgbWVzc2FnZXMuCisgKgorICogVGhlIFQwMSBwcm90b2NvbCBoYXMgdGhyZWUgbWVzc2FnZXMuICBGaXJzdCBpcyB0aGUgIlNFVE4iIG1lc3NhZ2UuCisgKiBJdCBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXg6CisgKgorICogIFNFVE48c3BhY2U+PDgtY2hhci1oZXgtbm9kZW51bT48bmV3bGluZT4KKyAqCisgKiBUaGlzIGlzIDE0IGNoYXJhY3RlcnMuCisgKgorICogVGhlICJTRVROIiBtZXNzYWdlIG11c3QgYmUgdGhlIGZpcnN0IG1lc3NhZ2UgZm9sbG93aW5nIHRoZSBwcm90b2NvbC4KKyAqIEl0IHRlbGxzIG9jZnMyX2NvbnRyb2wgdGhlIGxvY2FsIG5vZGUgbnVtYmVyLgorICoKKyAqIE5leHQgY29tZXMgdGhlICJTRVRWIiBtZXNzYWdlLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorICoKKyAqICBTRVRWPHNwYWNlPjwyLWNoYXItaGV4LW1ham9yPjxzcGFjZT48Mi1jaGFyLWhleC1taW5vcj48bmV3bGluZT4KKyAqCisgKiBUaGlzIGlzIDExIGNoYXJhY3RlcnMuCisgKgorICogVGhlICJTRVRWIiBtZXNzYWdlIHNldHMgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBwcm90b2NvbCB2ZXJzaW9uIGFzCisgKiBuZWdvdGlhdGVkIGJ5IHRoZSBjbGllbnQuICBUaGUgY2xpZW50IG5lZ290aWF0ZXMgYmFzZWQgb24gdGhlIG1heGltdW0KKyAqIHZlcnNpb24gYWR2ZXJ0aXNlZCBpbiAvc3lzL2ZzL29jZnMyL21heF9sb2NraW5nX3Byb3RvY29sLiAgVGhlIG1ham9yCisgKiBudW1iZXIgZnJvbSB0aGUgIlNFVFYiIG1lc3NhZ2UgbXVzdCBtYXRjaAorICogdXNlcl9zdGFjay5zcF9wcm90by0+bHBfbWF4X3ZlcnNpb24ucHZfbWFqb3IsIGFuZCB0aGUgbWlub3IgbnVtYmVyCisgKiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAuLi4tPmxwX21heF92ZXJzaW9uLnB2X21pbm9yLgorICoKKyAqIE9uY2UgdGhpcyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBzZXQsIG1vdW50cyB3aWxsIGJlIGFsbG93ZWQuICBGcm9tIHRoaXMKKyAqIHBvaW50IG9uLCB0aGUgIkRPV04iIG1lc3NhZ2UgY2FuIGJlIHNlbnQgZm9yIG5vZGUgZG93biBub3RpZmljYXRpb24uCisgKiBJdCBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXg6CisgKgorICogIERPV048c3BhY2U+PDMyLWNoYXItY2FwLWhleC11dWlkPjxzcGFjZT48OC1jaGFyLWhleC1ub2RlbnVtPjxuZXdsaW5lPgorICoKKyAqIGVnOgorICoKKyAqICBET1dOIDYzMkE5MjRGREQ4NDQxOTBCREE5M0MwREY2Qjk0ODk5IDAwMDAwMDAxXG4KKyAqCisgKiBUaGlzIGlzIDQ3IGNoYXJhY3RlcnMuCisgKi8KKworLyoKKyAqIFdoZXRoZXIgb3Igbm90IHRoZSBjbGllbnQgaGFzIGRvbmUgdGhlIGhhbmRzaGFrZS4KKyAqIEZvciBub3csIHdlIGhhdmUganVzdCBvbmUgcHJvdG9jb2wgdmVyc2lvbi4KKyAqLworI2RlZmluZSBPQ0ZTMl9DT05UUk9MX1BST1RPCQkJIlQwMVxuIgorI2RlZmluZSBPQ0ZTMl9DT05UUk9MX1BST1RPX0xFTgkJCTQKKworLyogSGFuZHNoYWtlIHN0YXRlcyAqLworI2RlZmluZSBPQ0ZTMl9DT05UUk9MX0hBTkRTSEFLRV9JTlZBTElECQkoMCkKKyNkZWZpbmUgT0NGUzJfQ09OVFJPTF9IQU5EU0hBS0VfUkVBRAkJKDEpCisjZGVmaW5lIE9DRlMyX0NPTlRST0xfSEFORFNIQUtFX1BST1RPQ09MCSgyKQorI2RlZmluZSBPQ0ZTMl9DT05UUk9MX0hBTkRTSEFLRV9WQUxJRAkJKDMpCisKKy8qIE1lc3NhZ2VzICovCisjZGVmaW5lIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9PUF9MRU4JCTQKKyNkZWZpbmUgT0NGUzJfQ09OVFJPTF9NRVNTQUdFX1NFVE5PREVfT1AJIlNFVE4iCisjZGVmaW5lIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9TRVROT0RFX1RPVEFMX0xFTgkxNAorI2RlZmluZSBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfU0VUVkVSU0lPTl9PUAkiU0VUViIKKyNkZWZpbmUgT0NGUzJfQ09OVFJPTF9NRVNTQUdFX1NFVFZFUlNJT05fVE9UQUxfTEVOCTExCisjZGVmaW5lIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9ET1dOX09QCQkiRE9XTiIKKyNkZWZpbmUgT0NGUzJfQ09OVFJPTF9NRVNTQUdFX0RPV05fVE9UQUxfTEVOCTQ3CisjZGVmaW5lIE9DRlMyX1RFWFRfVVVJRF9MRU4JCQkzMgorI2RlZmluZSBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfVkVSTlVNX0xFTgkyCisjZGVmaW5lIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9OT0RFTlVNX0xFTgk4CisKKy8qCisgKiBvY2ZzMl9saXZlX2Nvbm5lY3Rpb24gaXMgcmVmY291bnRlZCBiZWNhdXNlIHRoZSBmaWxlc3lzdGVtIGFuZAorICogbWlzY2RldmljZSBzaWRlcyBjYW4gZGV0YWNoIGluIGRpZmZlcmVudCBvcmRlci4gIExldCdzIGp1c3QgYmUgc2FmZS4KKyAqLworc3RydWN0IG9jZnMyX2xpdmVfY29ubmVjdGlvbiB7CisJc3RydWN0IGxpc3RfaGVhZAkJb2NfbGlzdDsKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uCSpvY19jb25uOworfTsKKworc3RydWN0IG9jZnMyX2NvbnRyb2xfcHJpdmF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBvcF9saXN0OworCWludCBvcF9zdGF0ZTsKKwlpbnQgb3BfdGhpc19ub2RlOworCXN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uIG9wX3Byb3RvOworfTsKKworLyogU0VUTjxzcGFjZT48OC1jaGFyLWhleC1ub2RlbnVtPjxuZXdsaW5lPiAqLworc3RydWN0IG9jZnMyX2NvbnRyb2xfbWVzc2FnZV9zZXRuIHsKKwljaGFyCXRhZ1tPQ0ZTMl9DT05UUk9MX01FU1NBR0VfT1BfTEVOXTsKKwljaGFyCXNwYWNlOworCWNoYXIJbm9kZXN0cltPQ0ZTMl9DT05UUk9MX01FU1NBR0VfTk9ERU5VTV9MRU5dOworCWNoYXIJbmV3bGluZTsKK307CisKKy8qIFNFVFY8c3BhY2U+PDItY2hhci1oZXgtbWFqb3I+PHNwYWNlPjwyLWNoYXItaGV4LW1pbm9yPjxuZXdsaW5lPiAqLworc3RydWN0IG9jZnMyX2NvbnRyb2xfbWVzc2FnZV9zZXR2IHsKKwljaGFyCXRhZ1tPQ0ZTMl9DT05UUk9MX01FU1NBR0VfT1BfTEVOXTsKKwljaGFyCXNwYWNlMTsKKwljaGFyCW1ham9yW09DRlMyX0NPTlRST0xfTUVTU0FHRV9WRVJOVU1fTEVOXTsKKwljaGFyCXNwYWNlMjsKKwljaGFyCW1pbm9yW09DRlMyX0NPTlRST0xfTUVTU0FHRV9WRVJOVU1fTEVOXTsKKwljaGFyCW5ld2xpbmU7Cit9OworCisvKiBET1dOPHNwYWNlPjwzMi1jaGFyLWNhcC1oZXgtdXVpZD48c3BhY2U+PDgtY2hhci1oZXgtbm9kZW51bT48bmV3bGluZT4gKi8KK3N0cnVjdCBvY2ZzMl9jb250cm9sX21lc3NhZ2VfZG93biB7CisJY2hhcgl0YWdbT0NGUzJfQ09OVFJPTF9NRVNTQUdFX09QX0xFTl07CisJY2hhcglzcGFjZTE7CisJY2hhcgl1dWlkW09DRlMyX1RFWFRfVVVJRF9MRU5dOworCWNoYXIJc3BhY2UyOworCWNoYXIJbm9kZXN0cltPQ0ZTMl9DT05UUk9MX01FU1NBR0VfTk9ERU5VTV9MRU5dOworCWNoYXIJbmV3bGluZTsKK307CisKK3VuaW9uIG9jZnMyX2NvbnRyb2xfbWVzc2FnZSB7CisJY2hhcgkJCQkJdGFnW09DRlMyX0NPTlRST0xfTUVTU0FHRV9PUF9MRU5dOworCXN0cnVjdCBvY2ZzMl9jb250cm9sX21lc3NhZ2Vfc2V0bgl1X3NldG47CisJc3RydWN0IG9jZnMyX2NvbnRyb2xfbWVzc2FnZV9zZXR2CXVfc2V0djsKKwlzdHJ1Y3Qgb2NmczJfY29udHJvbF9tZXNzYWdlX2Rvd24JdV9kb3duOworfTsKKworc3RhdGljIHN0cnVjdCBvY2ZzMl9zdGFja19wbHVnaW4gdXNlcl9zdGFjazsKKworc3RhdGljIGF0b21pY190IG9jZnMyX2NvbnRyb2xfb3BlbmVkOworc3RhdGljIGludCBvY2ZzMl9jb250cm9sX3RoaXNfbm9kZSA9IC0xOworc3RhdGljIHN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uIHJ1bm5pbmdfcHJvdG87CisKK3N0YXRpYyBMSVNUX0hFQUQob2NmczJfbGl2ZV9jb25uZWN0aW9uX2xpc3QpOworc3RhdGljIExJU1RfSEVBRChvY2ZzMl9jb250cm9sX3ByaXZhdGVfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKG9jZnMyX2NvbnRyb2xfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9jb250cm9sX3NldF9oYW5kc2hha2Vfc3RhdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCQkgICAgIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfY29udHJvbF9wcml2YXRlICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXAtPm9wX3N0YXRlID0gc3RhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NvbnRyb2xfZ2V0X2hhbmRzaGFrZV9zdGF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfY29udHJvbF9wcml2YXRlICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBwLT5vcF9zdGF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBvY2ZzMl9saXZlX2Nvbm5lY3Rpb24gKm9jZnMyX2Nvbm5lY3Rpb25fZmluZChjb25zdCBjaGFyICpuYW1lKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisJc3RydWN0IG9jZnMyX2xpdmVfY29ubmVjdGlvbiAqYzsKKworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZvY2ZzMl9jb250cm9sX2xvY2spKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJm9jZnMyX2xpdmVfY29ubmVjdGlvbl9saXN0LCBvY19saXN0KSB7CisJCWlmICgoYy0+b2NfY29ubi0+Y2NfbmFtZWxlbiA9PSBsZW4pICYmCisJCSAgICAhc3RybmNtcChjLT5vY19jb25uLT5jY19uYW1lLCBuYW1lLCBsZW4pKQorCQkJcmV0dXJuIGM7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBvY2ZzMl9saXZlX2Nvbm5lY3Rpb24gc3RydWN0dXJlcyBhcmUgY3JlYXRlZCB1bmRlcm5lYXRoIHRoZSBvY2ZzMgorICogbW91bnQgcGF0aC4gIFNpbmNlIHRoZSBWRlMgcHJldmVudHMgbXVsdGlwbGUgY2FsbHMgdG8KKyAqIGZpbGxfc3VwZXIoKSwgd2UgY2FuJ3QgZ2V0IGR1cGVzIGhlcmUuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfbGl2ZV9jb25uZWN0aW9uX25ldyhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2xpdmVfY29ubmVjdGlvbiAqKmNfcmV0KQoreworCWludCByYyA9IDA7CisJc3RydWN0IG9jZnMyX2xpdmVfY29ubmVjdGlvbiAqYzsKKworCWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfbGl2ZV9jb25uZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJm9jZnMyX2NvbnRyb2xfbG9jayk7CisJYy0+b2NfY29ubiA9IGNvbm47CisKKwlpZiAoYXRvbWljX3JlYWQoJm9jZnMyX2NvbnRyb2xfb3BlbmVkKSkKKwkJbGlzdF9hZGQoJmMtPm9jX2xpc3QsICZvY2ZzMl9saXZlX2Nvbm5lY3Rpb25fbGlzdCk7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm9jZnMyOiBVc2Vyc3BhY2UgY29udHJvbCBkYWVtb24gaXMgbm90IHByZXNlbnRcbiIpOworCQlyYyA9IC1FU1JDSDsKKwl9CisKKwltdXRleF91bmxvY2soJm9jZnMyX2NvbnRyb2xfbG9jayk7CisKKwlpZiAoIXJjKQorCQkqY19yZXQgPSBjOworCWVsc2UKKwkJa2ZyZWUoYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2Nvbm5lY3RzIHRoZSBjbHVzdGVyIGNvbm5lY3Rpb24gZnJvbSBvY2ZzMl9jb250cm9sLgorICogQWZ0ZXJ3YXJkcywgdXNlcnNwYWNlIGNhbid0IGFmZmVjdCB0aGUgY2x1c3RlciBjb25uZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBvY2ZzMl9saXZlX2Nvbm5lY3Rpb25fZHJvcChzdHJ1Y3Qgb2NmczJfbGl2ZV9jb25uZWN0aW9uICpjKQoreworCW11dGV4X2xvY2soJm9jZnMyX2NvbnRyb2xfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmYy0+b2NfbGlzdCk7CisJYy0+b2NfY29ubiA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworCisJa2ZyZWUoYyk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY29udHJvbF9jZnUodm9pZCAqdGFyZ2V0LCBzaXplX3QgdGFyZ2V0X2xlbiwKKwkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCS8qIFRoZSBUMDEgZXhwZWN0cyB3cml0ZSgyKSBjYWxscyB0byBoYXZlIGV4YWN0bHkgb25lIGNvbW1hbmQgKi8KKwlpZiAoKGNvdW50ICE9IHRhcmdldF9sZW4pIHx8CisJICAgIChjb3VudCA+IHNpemVvZih1bmlvbiBvY2ZzMl9jb250cm9sX21lc3NhZ2UpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIodGFyZ2V0LCBidWYsIHRhcmdldF9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9jb250cm9sX3ZhbGlkYXRlX3Byb3RvY29sKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICAgICAgIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90IHJldDsKKwljaGFyIGtidWZbT0NGUzJfQ09OVFJPTF9QUk9UT19MRU5dOworCisJcmV0ID0gb2NmczJfY29udHJvbF9jZnUoa2J1ZiwgT0NGUzJfQ09OVFJPTF9QUk9UT19MRU4sCisJCQkJYnVmLCBjb3VudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzdHJuY21wKGtidWYsIE9DRlMyX0NPTlRST0xfUFJPVE8sIE9DRlMyX0NPTlRST0xfUFJPVE9fTEVOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvY2ZzMl9jb250cm9sX3NldF9oYW5kc2hha2Vfc3RhdGUoZmlsZSwKKwkJCQkJICBPQ0ZTMl9DT05UUk9MX0hBTkRTSEFLRV9QUk9UT0NPTCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2NvbnRyb2xfc2VuZF9kb3duKGNvbnN0IGNoYXIgKnV1aWQsCisJCQkJICAgIGludCBub2RlbnVtKQoreworCXN0cnVjdCBvY2ZzMl9saXZlX2Nvbm5lY3Rpb24gKmM7CisKKwltdXRleF9sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworCisJYyA9IG9jZnMyX2Nvbm5lY3Rpb25fZmluZCh1dWlkKTsKKwlpZiAoYykgeworCQlCVUdfT04oYy0+b2NfY29ubiA9PSBOVUxMKTsKKwkJYy0+b2NfY29ubi0+Y2NfcmVjb3ZlcnlfaGFuZGxlcihub2RlbnVtLAorCQkJCQkJYy0+b2NfY29ubi0+Y2NfcmVjb3ZlcnlfZGF0YSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworfQorCisvKgorICogQ2FsbGVkIHdoZW5ldmVyIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgYXJlIHNlbnQgdG8gL2Rldi9vY2ZzMl9jb250cm9sLgorICogSWYgYWxsIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgYXJlIHByZXNlbnQsIHRyeSB0byBzZXQgdGhlIGdsb2JhbAorICogdmFsdWVzLiAgSWYgdGhlcmUgaXMgYSBwcm9ibGVtLCByZXR1cm4gYW4gZXJyb3IuICBTa2lwIGFueSBtaXNzaW5nCisgKiBlbGVtZW50cywgYW5kIG9ubHkgYnVtcCBvY2ZzMl9jb250cm9sX29wZW5lZCB3aGVuIHdlIGhhdmUgYWxsIGVsZW1lbnRzCisgKiBhbmQgYXJlIHN1Y2Nlc3NmdWwuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfY29udHJvbF9pbnN0YWxsX3ByaXZhdGUoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJjID0gMDsKKwlpbnQgc2V0X3AgPSAxOworCXN0cnVjdCBvY2ZzMl9jb250cm9sX3ByaXZhdGUgKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlCVUdfT04ocC0+b3Bfc3RhdGUgIT0gT0NGUzJfQ09OVFJPTF9IQU5EU0hBS0VfUFJPVE9DT0wpOworCisJbXV0ZXhfbG9jaygmb2NmczJfY29udHJvbF9sb2NrKTsKKworCWlmIChwLT5vcF90aGlzX25vZGUgPCAwKSB7CisJCXNldF9wID0gMDsKKwl9IGVsc2UgaWYgKChvY2ZzMl9jb250cm9sX3RoaXNfbm9kZSA+PSAwKSAmJgorCQkgICAob2NmczJfY29udHJvbF90aGlzX25vZGUgIT0gcC0+b3BfdGhpc19ub2RlKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoIXAtPm9wX3Byb3RvLnB2X21ham9yKSB7CisJCXNldF9wID0gMDsKKwl9IGVsc2UgaWYgKCFsaXN0X2VtcHR5KCZvY2ZzMl9saXZlX2Nvbm5lY3Rpb25fbGlzdCkgJiYKKwkJICAgKChydW5uaW5nX3Byb3RvLnB2X21ham9yICE9IHAtPm9wX3Byb3RvLnB2X21ham9yKSB8fAorCQkgICAgKHJ1bm5pbmdfcHJvdG8ucHZfbWlub3IgIT0gcC0+b3BfcHJvdG8ucHZfbWlub3IpKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoc2V0X3ApIHsKKwkJb2NmczJfY29udHJvbF90aGlzX25vZGUgPSBwLT5vcF90aGlzX25vZGU7CisJCXJ1bm5pbmdfcHJvdG8ucHZfbWFqb3IgPSBwLT5vcF9wcm90by5wdl9tYWpvcjsKKwkJcnVubmluZ19wcm90by5wdl9taW5vciA9IHAtPm9wX3Byb3RvLnB2X21pbm9yOworCX0KKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJm9jZnMyX2NvbnRyb2xfbG9jayk7CisKKwlpZiAoIXJjICYmIHNldF9wKSB7CisJCS8qIFdlIHNldCB0aGUgZ2xvYmFsIHZhbHVlcyBzdWNjZXNzZnVsbHkgKi8KKwkJYXRvbWljX2luYygmb2NmczJfY29udHJvbF9vcGVuZWQpOworCQlvY2ZzMl9jb250cm9sX3NldF9oYW5kc2hha2Vfc3RhdGUoZmlsZSwKKwkJCQkJT0NGUzJfQ09OVFJPTF9IQU5EU0hBS0VfVkFMSUQpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBvY2ZzMl9jb250cm9sX2dldF90aGlzX25vZGUodm9pZCkKK3sKKwlpbnQgcmM7CisKKwltdXRleF9sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworCWlmIChvY2ZzMl9jb250cm9sX3RoaXNfbm9kZSA8IDApCisJCXJjID0gLUVJTlZBTDsKKwllbHNlCisJCXJjID0gb2NmczJfY29udHJvbF90aGlzX25vZGU7CisJbXV0ZXhfdW5sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG9jZnMyX2NvbnRyb2xfZG9fc2V0bm9kZV9tc2coc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9jb250cm9sX21lc3NhZ2Vfc2V0biAqbXNnKQoreworCWxvbmcgbm9kZW51bTsKKwljaGFyICpwdHIgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9jb250cm9sX3ByaXZhdGUgKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAob2NmczJfY29udHJvbF9nZXRfaGFuZHNoYWtlX3N0YXRlKGZpbGUpICE9CisJICAgIE9DRlMyX0NPTlRST0xfSEFORFNIQUtFX1BST1RPQ09MKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJuY21wKG1zZy0+dGFnLCBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfU0VUTk9ERV9PUCwKKwkJICAgIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9PUF9MRU4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgobXNnLT5zcGFjZSAhPSAnICcpIHx8IChtc2ctPm5ld2xpbmUgIT0gJ1xuJykpCisJCXJldHVybiAtRUlOVkFMOworCW1zZy0+c3BhY2UgPSBtc2ctPm5ld2xpbmUgPSAnXDAnOworCisJbm9kZW51bSA9IHNpbXBsZV9zdHJ0b2wobXNnLT5ub2Rlc3RyLCAmcHRyLCAxNik7CisJaWYgKCFwdHIgfHwgKnB0cikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKG5vZGVudW0gPT0gTE9OR19NSU4pIHx8IChub2RlbnVtID09IExPTkdfTUFYKSB8fAorCSAgICAobm9kZW51bSA+IElOVF9NQVgpIHx8IChub2RlbnVtIDwgMCkpCisJCXJldHVybiAtRVJBTkdFOworCXAtPm9wX3RoaXNfbm9kZSA9IG5vZGVudW07CisKKwlyZXR1cm4gb2NmczJfY29udHJvbF9pbnN0YWxsX3ByaXZhdGUoZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY29udHJvbF9kb19zZXR2ZXJzaW9uX21zZyhzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICAgc3RydWN0IG9jZnMyX2NvbnRyb2xfbWVzc2FnZV9zZXR2ICptc2cpCisgeworCWxvbmcgbWFqb3IsIG1pbm9yOworCWNoYXIgKnB0ciA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2NvbnRyb2xfcHJpdmF0ZSAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbiAqbWF4ID0KKwkJJnVzZXJfc3RhY2suc3BfcHJvdG8tPmxwX21heF92ZXJzaW9uOworCisJaWYgKG9jZnMyX2NvbnRyb2xfZ2V0X2hhbmRzaGFrZV9zdGF0ZShmaWxlKSAhPQorCSAgICBPQ0ZTMl9DT05UUk9MX0hBTkRTSEFLRV9QUk9UT0NPTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RybmNtcChtc2ctPnRhZywgT0NGUzJfQ09OVFJPTF9NRVNTQUdFX1NFVFZFUlNJT05fT1AsCisJCSAgICBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfT1BfTEVOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKG1zZy0+c3BhY2UxICE9ICcgJykgfHwgKG1zZy0+c3BhY2UyICE9ICcgJykgfHwKKwkgICAgKG1zZy0+bmV3bGluZSAhPSAnXG4nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXNnLT5zcGFjZTEgPSBtc2ctPnNwYWNlMiA9IG1zZy0+bmV3bGluZSA9ICdcMCc7CisKKwltYWpvciA9IHNpbXBsZV9zdHJ0b2wobXNnLT5tYWpvciwgJnB0ciwgMTYpOworCWlmICghcHRyIHx8ICpwdHIpCisJCXJldHVybiAtRUlOVkFMOworCW1pbm9yID0gc2ltcGxlX3N0cnRvbChtc2ctPm1pbm9yLCAmcHRyLCAxNik7CisJaWYgKCFwdHIgfHwgKnB0cikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFRoZSBtYWpvciBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1LCBpbmNsdXNpdmUuICBUaGUgbWlub3IKKwkgKiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LCBpbmNsdXNpdmUuICBUaGUgdmVyc2lvbiBwYXNzZWQgaW4KKwkgKiBtdXN0IGJlIHdpdGhpbiB0aGUgbWF4aW11bSB2ZXJzaW9uIHN1cHBvcnRlZCBieSB0aGUgZmlsZXN5c3RlbS4KKwkgKi8KKwlpZiAoKG1ham9yID09IExPTkdfTUlOKSB8fCAobWFqb3IgPT0gTE9OR19NQVgpIHx8CisJICAgIChtYWpvciA+ICh1OCktMSkgfHwgKG1ham9yIDwgMSkpCisJCXJldHVybiAtRVJBTkdFOworCWlmICgobWlub3IgPT0gTE9OR19NSU4pIHx8IChtaW5vciA9PSBMT05HX01BWCkgfHwKKwkgICAgKG1pbm9yID4gKHU4KS0xKSB8fCAobWlub3IgPCAwKSkKKwkJcmV0dXJuIC1FUkFOR0U7CisJaWYgKChtYWpvciAhPSBtYXgtPnB2X21ham9yKSB8fAorCSAgICAobWlub3IgPiBtYXgtPnB2X21pbm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwLT5vcF9wcm90by5wdl9tYWpvciA9IG1ham9yOworCXAtPm9wX3Byb3RvLnB2X21pbm9yID0gbWlub3I7CisKKwlyZXR1cm4gb2NmczJfY29udHJvbF9pbnN0YWxsX3ByaXZhdGUoZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY29udHJvbF9kb19kb3duX21zZyhzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jb250cm9sX21lc3NhZ2VfZG93biAqbXNnKQoreworCWxvbmcgbm9kZW51bTsKKwljaGFyICpwID0gTlVMTDsKKworCWlmIChvY2ZzMl9jb250cm9sX2dldF9oYW5kc2hha2Vfc3RhdGUoZmlsZSkgIT0KKwkgICAgT0NGUzJfQ09OVFJPTF9IQU5EU0hBS0VfVkFMSUQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cm5jbXAobXNnLT50YWcsIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9ET1dOX09QLAorCQkgICAgT0NGUzJfQ09OVFJPTF9NRVNTQUdFX09QX0xFTikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChtc2ctPnNwYWNlMSAhPSAnICcpIHx8IChtc2ctPnNwYWNlMiAhPSAnICcpIHx8CisJICAgIChtc2ctPm5ld2xpbmUgIT0gJ1xuJykpCisJCXJldHVybiAtRUlOVkFMOworCW1zZy0+c3BhY2UxID0gbXNnLT5zcGFjZTIgPSBtc2ctPm5ld2xpbmUgPSAnXDAnOworCisJbm9kZW51bSA9IHNpbXBsZV9zdHJ0b2wobXNnLT5ub2Rlc3RyLCAmcCwgMTYpOworCWlmICghcCB8fCAqcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKG5vZGVudW0gPT0gTE9OR19NSU4pIHx8IChub2RlbnVtID09IExPTkdfTUFYKSB8fAorCSAgICAobm9kZW51bSA+IElOVF9NQVgpIHx8IChub2RlbnVtIDwgMCkpCisJCXJldHVybiAtRVJBTkdFOworCisJb2NmczJfY29udHJvbF9zZW5kX2Rvd24obXNnLT51dWlkLCBub2RlbnVtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9jb250cm9sX21lc3NhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50KQoreworCXNzaXplX3QgcmV0OworCXVuaW9uIG9jZnMyX2NvbnRyb2xfbWVzc2FnZSBtc2c7CisKKwkvKiBUcnkgdG8gY2F0Y2ggcGFkZGluZyBpc3N1ZXMgKi8KKwlXQVJOX09OKG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9jb250cm9sX21lc3NhZ2VfZG93biwgdXVpZCkgIT0KKwkJKHNpemVvZihtc2cudV9kb3duLnRhZykgKyBzaXplb2YobXNnLnVfZG93bi5zcGFjZTEpKSk7CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHVuaW9uIG9jZnMyX2NvbnRyb2xfbWVzc2FnZSkpOworCXJldCA9IG9jZnMyX2NvbnRyb2xfY2Z1KCZtc2csIGNvdW50LCBidWYsIGNvdW50KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmICgoY291bnQgPT0gT0NGUzJfQ09OVFJPTF9NRVNTQUdFX1NFVE5PREVfVE9UQUxfTEVOKSAmJgorCSAgICAhc3RybmNtcChtc2cudGFnLCBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfU0VUTk9ERV9PUCwKKwkJICAgICBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfT1BfTEVOKSkKKwkJcmV0ID0gb2NmczJfY29udHJvbF9kb19zZXRub2RlX21zZyhmaWxlLCAmbXNnLnVfc2V0bik7CisJZWxzZSBpZiAoKGNvdW50ID09IE9DRlMyX0NPTlRST0xfTUVTU0FHRV9TRVRWRVJTSU9OX1RPVEFMX0xFTikgJiYKKwkJICFzdHJuY21wKG1zZy50YWcsIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9TRVRWRVJTSU9OX09QLAorCQkJICBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfT1BfTEVOKSkKKwkJcmV0ID0gb2NmczJfY29udHJvbF9kb19zZXR2ZXJzaW9uX21zZyhmaWxlLCAmbXNnLnVfc2V0dik7CisJZWxzZSBpZiAoKGNvdW50ID09IE9DRlMyX0NPTlRST0xfTUVTU0FHRV9ET1dOX1RPVEFMX0xFTikgJiYKKwkJICFzdHJuY21wKG1zZy50YWcsIE9DRlMyX0NPTlRST0xfTUVTU0FHRV9ET1dOX09QLAorCQkJICBPQ0ZTMl9DT05UUk9MX01FU1NBR0VfT1BfTEVOKSkKKwkJcmV0ID0gb2NmczJfY29udHJvbF9kb19kb3duX21zZyhmaWxlLCAmbXNnLnVfZG93bik7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCitvdXQ6CisJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9jb250cm9sX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJICAgc2l6ZV90IGNvdW50LAorCQkJCSAgIGxvZmZfdCAqcHBvcykKK3sKKwlzc2l6ZV90IHJldDsKKworCXN3aXRjaCAob2NmczJfY29udHJvbF9nZXRfaGFuZHNoYWtlX3N0YXRlKGZpbGUpKSB7CisJCWNhc2UgT0NGUzJfQ09OVFJPTF9IQU5EU0hBS0VfSU5WQUxJRDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKworCQljYXNlIE9DRlMyX0NPTlRST0xfSEFORFNIQUtFX1JFQUQ6CisJCQlyZXQgPSBvY2ZzMl9jb250cm9sX3ZhbGlkYXRlX3Byb3RvY29sKGZpbGUsIGJ1ZiwKKwkJCQkJCQkgICAgICBjb3VudCk7CisJCQlicmVhazsKKworCQljYXNlIE9DRlMyX0NPTlRST0xfSEFORFNIQUtFX1BST1RPQ09MOgorCQljYXNlIE9DRlMyX0NPTlRST0xfSEFORFNIQUtFX1ZBTElEOgorCQkJcmV0ID0gb2NmczJfY29udHJvbF9tZXNzYWdlKGZpbGUsIGJ1ZiwgY291bnQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJcmV0ID0gLUVJTzsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgbmFpdmUgdmVyc2lvbi4gIElmIHdlIGV2ZXIgaGF2ZSBhIG5ldyBwcm90b2NvbCwgd2UnbGwgZXhwYW5kCisgKiBpdC4gIFByb2JhYmx5IHVzaW5nIHNlcV9maWxlLgorICovCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9jb250cm9sX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LAorCQkJCSAgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKnByb3RvX3N0cmluZyA9IE9DRlMyX0NPTlRST0xfUFJPVE87CisJc2l6ZV90IHRvX3dyaXRlID0gMDsKKworCWlmICgqcHBvcyA+PSBPQ0ZTMl9DT05UUk9MX1BST1RPX0xFTikKKwkJcmV0dXJuIDA7CisKKwl0b193cml0ZSA9IE9DRlMyX0NPTlRST0xfUFJPVE9fTEVOIC0gKnBwb3M7CisJaWYgKHRvX3dyaXRlID4gY291bnQpCisJCXRvX3dyaXRlID0gY291bnQ7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHByb3RvX3N0cmluZyArICpwcG9zLCB0b193cml0ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJKnBwb3MgKz0gdG9fd3JpdGU7CisKKwkvKiBIYXZlIHdlIHJlYWQgdGhlIHdob2xlIHByb3RvY29sIGxpc3Q/ICovCisJaWYgKCpwcG9zID49IE9DRlMyX0NPTlRST0xfUFJPVE9fTEVOKQorCQlvY2ZzMl9jb250cm9sX3NldF9oYW5kc2hha2Vfc3RhdGUoZmlsZSwKKwkJCQkJCSAgT0NGUzJfQ09OVFJPTF9IQU5EU0hBS0VfUkVBRCk7CisKKwlyZXR1cm4gdG9fd3JpdGU7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY29udHJvbF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBvY2ZzMl9jb250cm9sX3ByaXZhdGUgKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworCisJaWYgKG9jZnMyX2NvbnRyb2xfZ2V0X2hhbmRzaGFrZV9zdGF0ZShmaWxlKSAhPQorCSAgICBPQ0ZTMl9DT05UUk9MX0hBTkRTSEFLRV9WQUxJRCkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmb2NmczJfY29udHJvbF9vcGVuZWQpKSB7CisJCWlmICghbGlzdF9lbXB0eSgmb2NmczJfbGl2ZV9jb25uZWN0aW9uX2xpc3QpKSB7CisJCQkvKiBYWFg6IERvIGJhZCB0aGluZ3MhICovCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAib2NmczI6IFVuZXhwZWN0ZWQgcmVsZWFzZSBvZiBvY2ZzMl9jb250cm9sIVxuIgorCQkJICAgICAgICIgICAgICAgTG9zcyBvZiBjbHVzdGVyIGNvbm5lY3Rpb24gcmVxdWlyZXMgIgorCQkJICAgICAgICJhbiBlbWVyZ2VuY3kgcmVzdGFydCFcbiIpOworCQkJZW1lcmdlbmN5X3Jlc3RhcnQoKTsKKwkJfQorCQkvKgorCQkgKiBMYXN0IHZhbGlkIGNsb3NlIGNsZWFycyB0aGUgbm9kZSBudW1iZXIgYW5kIHJlc2V0cworCQkgKiB0aGUgbG9ja2luZyBwcm90b2NvbCB2ZXJzaW9uCisJCSAqLworCQlvY2ZzMl9jb250cm9sX3RoaXNfbm9kZSA9IC0xOworCQlydW5uaW5nX3Byb3RvLnB2X21ham9yID0gMDsKKwkJcnVubmluZ19wcm90by5wdl9tYWpvciA9IDA7CisJfQorCitvdXQ6CisJbGlzdF9kZWxfaW5pdCgmcC0+b3BfbGlzdCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCW11dGV4X3VubG9jaygmb2NmczJfY29udHJvbF9sb2NrKTsKKworCWtmcmVlKHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfY29udHJvbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBvY2ZzMl9jb250cm9sX3ByaXZhdGUgKnA7CisKKwlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2NvbnRyb2xfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcC0+b3BfdGhpc19ub2RlID0gLTE7CisKKwltdXRleF9sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHA7CisJbGlzdF9hZGQoJnAtPm9wX2xpc3QsICZvY2ZzMl9jb250cm9sX3ByaXZhdGVfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZvY2ZzMl9jb250cm9sX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2NvbnRyb2xfZm9wcyA9IHsKKwkub3BlbiAgICA9IG9jZnMyX2NvbnRyb2xfb3BlbiwKKwkucmVsZWFzZSA9IG9jZnMyX2NvbnRyb2xfcmVsZWFzZSwKKwkucmVhZCAgICA9IG9jZnMyX2NvbnRyb2xfcmVhZCwKKwkud3JpdGUgICA9IG9jZnMyX2NvbnRyb2xfd3JpdGUsCisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKK307CisKK3N0cnVjdCBtaXNjZGV2aWNlIG9jZnMyX2NvbnRyb2xfZGV2aWNlID0geworCS5taW5vcgkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUJCT0gIm9jZnMyX2NvbnRyb2wiLAorCS5mb3BzCQk9ICZvY2ZzMl9jb250cm9sX2ZvcHMsCit9OworCitzdGF0aWMgaW50IG9jZnMyX2NvbnRyb2xfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCWF0b21pY19zZXQoJm9jZnMyX2NvbnRyb2xfb3BlbmVkLCAwKTsKKworCXJjID0gbWlzY19yZWdpc3Rlcigmb2NmczJfY29udHJvbF9kZXZpY2UpOworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAib2NmczI6IFVuYWJsZSB0byByZWdpc3RlciBvY2ZzMl9jb250cm9sIGRldmljZSAiCisJCSAgICAgICAiKGVycm5vICVkKVxuIiwKKwkJICAgICAgIC1yYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2NvbnRyb2xfZXhpdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gbWlzY19kZXJlZ2lzdGVyKCZvY2ZzMl9jb250cm9sX2RldmljZSk7CisJaWYgKHJjKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJvY2ZzMjogVW5hYmxlIHRvIGRlcmVnaXN0ZXIgb2NmczJfY29udHJvbCBkZXZpY2UgIgorCQkgICAgICAgIihlcnJubyAlZClcbiIsCisJCSAgICAgICAtcmMpOworfQorCitzdGF0aWMgc3RydWN0IGRsbV9sa3NiICpmc2RsbV9hc3RhcmdfdG9fbGtzYih2b2lkICphc3RhcmcpCit7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpyZXMgPSBhc3Rhcmc7CisJcmV0dXJuICZyZXMtPmxfbGtzYi5sa3NiX2ZzZGxtOworfQorCitzdGF0aWMgdm9pZCBmc2RsbV9sb2NrX2FzdF93cmFwcGVyKHZvaWQgKmFzdGFyZykKK3sKKwlzdHJ1Y3QgZGxtX2xrc2IgKmxrc2IgPSBmc2RsbV9hc3RhcmdfdG9fbGtzYihhc3RhcmcpOworCWludCBzdGF0dXMgPSBsa3NiLT5zYl9zdGF0dXM7CisKKwlCVUdfT04odXNlcl9zdGFjay5zcF9wcm90byA9PSBOVUxMKTsKKworCS8qCisJICogRm9yIG5vdyB3ZSdyZSBwdW50aW5nIG9uIHRoZSBpc3N1ZSBvZiBvdGhlciBub24tc3RhbmRhcmQgZXJyb3JzCisJICogd2hlcmUgd2UgY2FuJ3QgdGVsbCBpZiB0aGUgdW5sb2NrX2FzdCBvciBsb2NrX2FzdCBzaG91bGQgYmUgY2FsbGVkLgorCSAqIFRoZSBtYWluICJvdGhlciBlcnJvciIgdGhhdCdzIHBvc3NpYmxlIGlzIEVJTlZBTCB3aGljaCBtZWFucyB0aGUKKwkgKiBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGggaW52YWxpZCBhcmdzLCB3aGljaCBzaG91bGRuJ3QgYmUgcG9zc2libGUKKwkgKiBzaW5jZSB0aGUgY2FsbGVyIGhlcmUgaXMgdW5kZXIgb3VyIGNvbnRyb2wuICBPdGhlciBub24tc3RhbmRhcmQKKwkgKiBlcnJvcnMgcHJvYmFibHkgZmFsbCBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5LCBvciBvdGhlcndpc2UgYXJlIGZhdGFsCisJICogd2hpY2ggbWVhbnMgd2UgY2FuJ3QgY2Fycnkgb24gYW55d2F5LgorCSAqLworCisJaWYgKHN0YXR1cyA9PSAtRExNX0VVTkxPQ0sgfHwgc3RhdHVzID09IC1ETE1fRUNBTkNFTCkKKwkJdXNlcl9zdGFjay5zcF9wcm90by0+bHBfdW5sb2NrX2FzdChhc3RhcmcsIDApOworCWVsc2UKKwkJdXNlcl9zdGFjay5zcF9wcm90by0+bHBfbG9ja19hc3QoYXN0YXJnKTsKK30KKworc3RhdGljIHZvaWQgZnNkbG1fYmxvY2tpbmdfYXN0X3dyYXBwZXIodm9pZCAqYXN0YXJnLCBpbnQgbGV2ZWwpCit7CisJQlVHX09OKHVzZXJfc3RhY2suc3BfcHJvdG8gPT0gTlVMTCk7CisKKwl1c2VyX3N0YWNrLnNwX3Byb3RvLT5scF9ibG9ja2luZ19hc3QoYXN0YXJnLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBpbnQgdXNlcl9kbG1fbG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAorCQkJIGludCBtb2RlLAorCQkJIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkJIHUzMiBmbGFncywKKwkJCSB2b2lkICpuYW1lLAorCQkJIHVuc2lnbmVkIGludCBuYW1lbGVuLAorCQkJIHZvaWQgKmFzdGFyZykKK3sKKwlpbnQgcmV0OworCisJaWYgKCFsa3NiLT5sa3NiX2ZzZGxtLnNiX2x2YnB0cikKKwkJbGtzYi0+bGtzYl9mc2RsbS5zYl9sdmJwdHIgPSAoY2hhciAqKWxrc2IgKworCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGxtX2xrc2IpOworCisJcmV0ID0gZGxtX2xvY2soY29ubi0+Y2NfbG9ja3NwYWNlLCBtb2RlLCAmbGtzYi0+bGtzYl9mc2RsbSwKKwkJICAgICAgIGZsYWdzfERMTV9MS0ZfTk9ETENLV1QsIG5hbWUsIG5hbWVsZW4sIDAsCisJCSAgICAgICBmc2RsbV9sb2NrX2FzdF93cmFwcGVyLCBhc3RhcmcsCisJCSAgICAgICBmc2RsbV9ibG9ja2luZ19hc3Rfd3JhcHBlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1c2VyX2RsbV91bmxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkJICAgdTMyIGZsYWdzLAorCQkJICAgdm9pZCAqYXN0YXJnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkbG1fdW5sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgbGtzYi0+bGtzYl9mc2RsbS5zYl9sa2lkLAorCQkJIGZsYWdzLCAmbGtzYi0+bGtzYl9mc2RsbSwgYXN0YXJnKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVzZXJfZGxtX2xvY2tfc3RhdHVzKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQoreworCXJldHVybiBsa3NiLT5sa3NiX2ZzZGxtLnNiX3N0YXR1czsKK30KKworc3RhdGljIHZvaWQgKnVzZXJfZGxtX2x2Yih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3sKKwlyZXR1cm4gKHZvaWQgKikobGtzYi0+bGtzYl9mc2RsbS5zYl9sdmJwdHIpOworfQorCitzdGF0aWMgdm9pZCB1c2VyX2RsbV9kdW1wX2xrc2IodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCit7Cit9CisKKy8qCisgKiBDb21wYXJlIGEgcmVxdWVzdGVkIGxvY2tpbmcgcHJvdG9jb2wgdmVyc2lvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IG9uZS4KKyAqCisgKiBJZiB0aGUgbWFqb3IgbnVtYmVycyBhcmUgZGlmZmVyZW50LCB0aGV5IGFyZSBpbmNvbXBhdGlibGUuCisgKiBJZiB0aGUgY3VycmVudCBtaW5vciBpcyBncmVhdGVyIHRoYW4gdGhlIHJlcXVlc3QsIHRoZXkgYXJlIGluY29tcGF0aWJsZS4KKyAqIElmIHRoZSBjdXJyZW50IG1pbm9yIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdCwgdGhleSBhcmUKKyAqIGNvbXBhdGlibGUsIGFuZCB0aGUgcmVxdWVzdGVyIHNob3VsZCBydW4gYXQgdGhlIGN1cnJlbnQgbWlub3IgdmVyc2lvbi4KKyAqLworc3RhdGljIGludCBmc19wcm90b2NvbF9jb21wYXJlKHN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uICpleGlzdGluZywKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbiAqcmVxdWVzdCkKK3sKKwlpZiAoZXhpc3RpbmctPnB2X21ham9yICE9IHJlcXVlc3QtPnB2X21ham9yKQorCQlyZXR1cm4gMTsKKworCWlmIChleGlzdGluZy0+cHZfbWlub3IgPiByZXF1ZXN0LT5wdl9taW5vcikKKwkJcmV0dXJuIDE7CisKKwlpZiAoZXhpc3RpbmctPnB2X21pbm9yIDwgcmVxdWVzdC0+cHZfbWlub3IpCisJCXJlcXVlc3QtPnB2X21pbm9yID0gZXhpc3RpbmctPnB2X21pbm9yOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNlcl9jbHVzdGVyX2Nvbm5lY3Qoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubikKK3sKKwlkbG1fbG9ja3NwYWNlX3QgKmZzZGxtOworCXN0cnVjdCBvY2ZzMl9saXZlX2Nvbm5lY3Rpb24gKmNvbnRyb2w7CisJaW50IHJjID0gMDsKKworCUJVR19PTihjb25uID09IE5VTEwpOworCisJcmMgPSBvY2ZzMl9saXZlX2Nvbm5lY3Rpb25fbmV3KGNvbm4sICZjb250cm9sKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBydW5uaW5nX3Byb3RvIG11c3QgaGF2ZSBiZWVuIHNldCBiZWZvcmUgd2UgYWxsb3dlZCBhbnkgbW91bnRzCisJICogdG8gcHJvY2VlZC4KKwkgKi8KKwlpZiAoZnNfcHJvdG9jb2xfY29tcGFyZSgmcnVubmluZ19wcm90bywgJmNvbm4tPmNjX3ZlcnNpb24pKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlVuYWJsZSB0byBtb3VudCB3aXRoIGZzIGxvY2tpbmcgcHJvdG9jb2wgdmVyc2lvbiAiCisJCSAgICAgICAiJXUuJXUgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGNvbnRyb2wgZGFlbW9uIGhhcyAiCisJCSAgICAgICAibmVnb3RpYXRlZCAldS4ldVxuIiwKKwkJICAgICAgIGNvbm4tPmNjX3ZlcnNpb24ucHZfbWFqb3IsIGNvbm4tPmNjX3ZlcnNpb24ucHZfbWlub3IsCisJCSAgICAgICBydW5uaW5nX3Byb3RvLnB2X21ham9yLCBydW5uaW5nX3Byb3RvLnB2X21pbm9yKTsKKwkJcmMgPSAtRVBST1RPOworCQlvY2ZzMl9saXZlX2Nvbm5lY3Rpb25fZHJvcChjb250cm9sKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSBkbG1fbmV3X2xvY2tzcGFjZShjb25uLT5jY19uYW1lLCBzdHJsZW4oY29ubi0+Y2NfbmFtZSksCisJCQkgICAgICAgJmZzZGxtLCBETE1fTFNGTF9GUywgRExNX0xWQl9MRU4pOworCWlmIChyYykgeworCQlvY2ZzMl9saXZlX2Nvbm5lY3Rpb25fZHJvcChjb250cm9sKTsKKwkJZ290byBvdXQ7CisJfQorCisJY29ubi0+Y2NfcHJpdmF0ZSA9IGNvbnRyb2w7CisJY29ubi0+Y2NfbG9ja3NwYWNlID0gZnNkbG07CitvdXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHVzZXJfY2x1c3Rlcl9kaXNjb25uZWN0KHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICAgaW50IGhhbmd1cF9wZW5kaW5nKQoreworCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShjb25uLT5jY19sb2Nrc3BhY2UsIDIpOworCWNvbm4tPmNjX2xvY2tzcGFjZSA9IE5VTEw7CisJb2NmczJfbGl2ZV9jb25uZWN0aW9uX2Ryb3AoY29ubi0+Y2NfcHJpdmF0ZSk7CisJY29ubi0+Y2NfcHJpdmF0ZSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNlcl9jbHVzdGVyX3RoaXNfbm9kZSh1bnNpZ25lZCBpbnQgKnRoaXNfbm9kZSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IG9jZnMyX2NvbnRyb2xfZ2V0X3RoaXNfbm9kZSgpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCSp0aGlzX25vZGUgPSByYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvY2ZzMl9zdGFja19vcGVyYXRpb25zIHVzZXJfc3RhY2tfb3BzID0geworCS5jb25uZWN0CT0gdXNlcl9jbHVzdGVyX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QJPSB1c2VyX2NsdXN0ZXJfZGlzY29ubmVjdCwKKwkudGhpc19ub2RlCT0gdXNlcl9jbHVzdGVyX3RoaXNfbm9kZSwKKwkuZGxtX2xvY2sJPSB1c2VyX2RsbV9sb2NrLAorCS5kbG1fdW5sb2NrCT0gdXNlcl9kbG1fdW5sb2NrLAorCS5sb2NrX3N0YXR1cwk9IHVzZXJfZGxtX2xvY2tfc3RhdHVzLAorCS5sb2NrX2x2Ygk9IHVzZXJfZGxtX2x2YiwKKwkuZHVtcF9sa3NiCT0gdXNlcl9kbG1fZHVtcF9sa3NiLAorfTsKKworc3RhdGljIHN0cnVjdCBvY2ZzMl9zdGFja19wbHVnaW4gdXNlcl9zdGFjayA9IHsKKwkuc3BfbmFtZQk9ICJ1c2VyIiwKKwkuc3Bfb3BzCQk9ICZ1c2VyX3N0YWNrX29wcywKKwkuc3Bfb3duZXIJPSBUSElTX01PRFVMRSwKK307CisKKworc3RhdGljIGludCBfX2luaXQgdXNlcl9zdGFja19pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJcmMgPSBvY2ZzMl9jb250cm9sX2luaXQoKTsKKwlpZiAoIXJjKSB7CisJCXJjID0gb2NmczJfc3RhY2tfZ2x1ZV9yZWdpc3RlcigmdXNlcl9zdGFjayk7CisJCWlmIChyYykKKwkJCW9jZnMyX2NvbnRyb2xfZXhpdCgpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzZXJfc3RhY2tfZXhpdCh2b2lkKQoreworCW9jZnMyX3N0YWNrX2dsdWVfdW5yZWdpc3RlcigmdXNlcl9zdGFjayk7CisJb2NmczJfY29udHJvbF9leGl0KCk7Cit9CisKK01PRFVMRV9BVVRIT1IoIk9yYWNsZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvY2ZzMiBkcml2ZXIgZm9yIHVzZXJzcGFjZSBjbHVzdGVyIHN0YWNrcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2luaXQodXNlcl9zdGFja19pbml0KTsKK21vZHVsZV9leGl0KHVzZXJfc3RhY2tfZXhpdCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja2dsdWUuYyBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOWY2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9zdGFja2dsdWUuYwpAQCAtMCwwICsxLDU2OCBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHN0YWNrZ2x1ZS5jCisgKgorICogQ29kZSB3aGljaCBpbXBsZW1lbnRzIGFuIE9DRlMyIHNwZWNpZmljIGludGVyZmFjZSB0byB1bmRlcmx5aW5nCisgKiBjbHVzdGVyIHN0YWNrcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKKyNpbmNsdWRlICJvY2ZzMl9mcy5oIgorCisjaW5jbHVkZSAic3RhY2tnbHVlLmgiCisKKyNkZWZpbmUgT0NGUzJfU1RBQ0tfUExVR0lOX08yQ0IJCSJvMmNiIgorI2RlZmluZSBPQ0ZTMl9TVEFDS19QTFVHSU5fVVNFUgkJInVzZXIiCisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqbHByb3RvOworc3RhdGljIERFRklORV9TUElOTE9DSyhvY2ZzMl9zdGFja19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQob2NmczJfc3RhY2tfbGlzdCk7CitzdGF0aWMgY2hhciBjbHVzdGVyX3N0YWNrX25hbWVbT0NGUzJfU1RBQ0tfTEFCRUxfTEVOICsgMV07CisKKy8qCisgKiBUaGUgc3RhY2sgY3VycmVudGx5IGluIHVzZS4gIElmIG5vdCBudWxsLCBhY3RpdmVfc3RhY2stPnNwX2NvdW50ID4gMCwKKyAqIHRoZSBtb2R1bGUgaXMgcGlubmVkLCBhbmQgdGhlIGxvY2tpbmcgcHJvdG9jb2wgY2Fubm90IGJlIGNoYW5nZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfc3RhY2tfcGx1Z2luICphY3RpdmVfc3RhY2s7CisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfc3RhY2tfcGx1Z2luICpvY2ZzMl9zdGFja19sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfc3RhY2tfcGx1Z2luICpwOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZvY2ZzMl9zdGFja19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJm9jZnMyX3N0YWNrX2xpc3QsIHNwX2xpc3QpIHsKKwkJaWYgKCFzdHJjbXAocC0+c3BfbmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBvY2ZzMl9zdGFja19kcml2ZXJfcmVxdWVzdChjb25zdCBjaGFyICpzdGFja19uYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBsdWdpbl9uYW1lKQoreworCWludCByYzsKKwlzdHJ1Y3Qgb2NmczJfc3RhY2tfcGx1Z2luICpwOworCisJc3Bpbl9sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKKworCS8qCisJICogSWYgdGhlIHN0YWNrIHBhc3NlZCBieSB0aGUgZmlsZXN5c3RlbSBpc24ndCB0aGUgc2VsZWN0ZWQgb25lLAorCSAqIHdlIGNhbid0IGNvbnRpbnVlLgorCSAqLworCWlmIChzdHJjbXAoc3RhY2tfbmFtZSwgY2x1c3Rlcl9zdGFja19uYW1lKSkgeworCQlyYyA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGFjdGl2ZV9zdGFjaykgeworCQkvKgorCQkgKiBJZiB0aGUgYWN0aXZlIHN0YWNrIGlzbid0IHRoZSBvbmUgd2Ugd2FudCwgaXQgY2Fubm90CisJCSAqIGJlIHNlbGVjdGVkIHJpZ2h0IG5vdy4KKwkJICovCisJCWlmICghc3RyY21wKGFjdGl2ZV9zdGFjay0+c3BfbmFtZSwgcGx1Z2luX25hbWUpKQorCQkJcmMgPSAwOworCQllbHNlCisJCQlyYyA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJcCA9IG9jZnMyX3N0YWNrX2xvb2t1cChwbHVnaW5fbmFtZSk7CisJaWYgKCFwIHx8ICF0cnlfbW9kdWxlX2dldChwLT5zcF9vd25lcikpIHsKKwkJcmMgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPaywgdGhlIHN0YWNrIGlzIHBpbm5lZCAqLworCXAtPnNwX2NvdW50Kys7CisJYWN0aXZlX3N0YWNrID0gcDsKKworCXJjID0gMDsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIHVwIHRoZSBhcHByb3ByaWF0ZSBzdGFjayBhbmQgbWFrZXMgaXQgYWN0aXZlLiAgSWYKKyAqIHRoZXJlIGlzIG5vIHN0YWNrLCBpdCB0cmllcyB0byBsb2FkIGl0LiAgSXQgd2lsbCBmYWlsIGlmIHRoZSBzdGFjayBzdGlsbAorICogY2Fubm90IGJlIGZvdW5kLiAgSXQgd2lsbCBhbHNvIGZhaWwgaWYgYSBkaWZmZXJlbnQgc3RhY2sgaXMgaW4gdXNlLgorICovCitzdGF0aWMgaW50IG9jZnMyX3N0YWNrX2RyaXZlcl9nZXQoY29uc3QgY2hhciAqc3RhY2tfbmFtZSkKK3sKKwlpbnQgcmM7CisJY2hhciAqcGx1Z2luX25hbWUgPSBPQ0ZTMl9TVEFDS19QTFVHSU5fTzJDQjsKKworCS8qCisJICogQ2xhc3NpYyBzdGFjayBkb2VzIG5vdCBwYXNzIGluIGEgc3RhY2sgbmFtZS4gIFRoaXMgaXMKKwkgKiBjb21wYXRpYmxlIHdpdGggb2xkZXIgdG9vbHMgYXMgd2VsbC4KKwkgKi8KKwlpZiAoIXN0YWNrX25hbWUgfHwgISpzdGFja19uYW1lKQorCQlzdGFja19uYW1lID0gT0NGUzJfU1RBQ0tfUExVR0lOX08yQ0I7CisKKwlpZiAoc3RybGVuKHN0YWNrX25hbWUpICE9IE9DRlMyX1NUQUNLX0xBQkVMX0xFTikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJvY2ZzMiBwYXNzZWQgYW4gaW52YWxpZCBjbHVzdGVyIHN0YWNrIGxhYmVsOiBcIiVzXCJcbiIsCisJCSAgICAgICBzdGFja19uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQW55dGhpbmcgdGhhdCBpc24ndCB0aGUgY2xhc3NpYyBzdGFjayBpcyBhIHVzZXIgc3RhY2sgKi8KKwlpZiAoc3RyY21wKHN0YWNrX25hbWUsIE9DRlMyX1NUQUNLX1BMVUdJTl9PMkNCKSkKKwkJcGx1Z2luX25hbWUgPSBPQ0ZTMl9TVEFDS19QTFVHSU5fVVNFUjsKKworCXJjID0gb2NmczJfc3RhY2tfZHJpdmVyX3JlcXVlc3Qoc3RhY2tfbmFtZSwgcGx1Z2luX25hbWUpOworCWlmIChyYyA9PSAtRU5PRU5UKSB7CisJCXJlcXVlc3RfbW9kdWxlKCJvY2ZzMl9zdGFja18lcyIsIHBsdWdpbl9uYW1lKTsKKwkJcmMgPSBvY2ZzMl9zdGFja19kcml2ZXJfcmVxdWVzdChzdGFja19uYW1lLCBwbHVnaW5fbmFtZSk7CisJfQorCisJaWYgKHJjID09IC1FTk9FTlQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAib2NmczI6IENsdXN0ZXIgc3RhY2sgZHJpdmVyIFwiJXNcIiBjYW5ub3QgYmUgZm91bmRcbiIsCisJCSAgICAgICBwbHVnaW5fbmFtZSk7CisJfSBlbHNlIGlmIChyYyA9PSAtRUJVU1kpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAib2NmczI6IEEgZGlmZmVyZW50IGNsdXN0ZXIgc3RhY2sgaXMgaW4gdXNlXG4iKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3N0YWNrX2RyaXZlcl9wdXQodm9pZCkKK3sKKwlzcGluX2xvY2soJm9jZnMyX3N0YWNrX2xvY2spOworCUJVR19PTihhY3RpdmVfc3RhY2sgPT0gTlVMTCk7CisJQlVHX09OKGFjdGl2ZV9zdGFjay0+c3BfY291bnQgPT0gMCk7CisKKwlhY3RpdmVfc3RhY2stPnNwX2NvdW50LS07CisJaWYgKCFhY3RpdmVfc3RhY2stPnNwX2NvdW50KSB7CisJCW1vZHVsZV9wdXQoYWN0aXZlX3N0YWNrLT5zcF9vd25lcik7CisJCWFjdGl2ZV9zdGFjayA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKK30KKworaW50IG9jZnMyX3N0YWNrX2dsdWVfcmVnaXN0ZXIoc3RydWN0IG9jZnMyX3N0YWNrX3BsdWdpbiAqcGx1Z2luKQoreworCWludCByYzsKKworCXNwaW5fbG9jaygmb2NmczJfc3RhY2tfbG9jayk7CisJaWYgKCFvY2ZzMl9zdGFja19sb29rdXAocGx1Z2luLT5zcF9uYW1lKSkgeworCQlwbHVnaW4tPnNwX2NvdW50ID0gMDsKKwkJcGx1Z2luLT5zcF9wcm90byA9IGxwcm90bzsKKwkJbGlzdF9hZGQoJnBsdWdpbi0+c3BfbGlzdCwgJm9jZnMyX3N0YWNrX2xpc3QpOworCQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogUmVnaXN0ZXJlZCBjbHVzdGVyIGludGVyZmFjZSAlc1xuIiwKKwkJICAgICAgIHBsdWdpbi0+c3BfbmFtZSk7CisJCXJjID0gMDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIm9jZnMyOiBTdGFjayBcIiVzXCIgYWxyZWFkeSByZWdpc3RlcmVkXG4iLAorCQkgICAgICAgcGx1Z2luLT5zcF9uYW1lKTsKKwkJcmMgPSAtRUVYSVNUOworCX0KKwlzcGluX3VubG9jaygmb2NmczJfc3RhY2tfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9zdGFja19nbHVlX3JlZ2lzdGVyKTsKKwordm9pZCBvY2ZzMl9zdGFja19nbHVlX3VucmVnaXN0ZXIoc3RydWN0IG9jZnMyX3N0YWNrX3BsdWdpbiAqcGx1Z2luKQoreworCXN0cnVjdCBvY2ZzMl9zdGFja19wbHVnaW4gKnA7CisKKwlzcGluX2xvY2soJm9jZnMyX3N0YWNrX2xvY2spOworCXAgPSBvY2ZzMl9zdGFja19sb29rdXAocGx1Z2luLT5zcF9uYW1lKTsKKwlpZiAocCkgeworCQlCVUdfT04ocCAhPSBwbHVnaW4pOworCQlCVUdfT04ocGx1Z2luID09IGFjdGl2ZV9zdGFjayk7CisJCUJVR19PTihwbHVnaW4tPnNwX2NvdW50ICE9IDApOworCQlsaXN0X2RlbF9pbml0KCZwbHVnaW4tPnNwX2xpc3QpOworCQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogVW5yZWdpc3RlcmVkIGNsdXN0ZXIgaW50ZXJmYWNlICVzXG4iLAorCQkgICAgICAgcGx1Z2luLT5zcF9uYW1lKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIlN0YWNrIFwiJXNcIiBpcyBub3QgcmVnaXN0ZXJlZFxuIiwKKwkJICAgICAgIHBsdWdpbi0+c3BfbmFtZSk7CisJfQorCXNwaW5fdW5sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX3N0YWNrX2dsdWVfdW5yZWdpc3Rlcik7CisKK3ZvaWQgb2NmczJfc3RhY2tfZ2x1ZV9zZXRfbG9ja2luZ19wcm90b2NvbChzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqcHJvdG8pCit7CisJc3RydWN0IG9jZnMyX3N0YWNrX3BsdWdpbiAqcDsKKworCUJVR19PTihwcm90byA9PSBOVUxMKTsKKworCXNwaW5fbG9jaygmb2NmczJfc3RhY2tfbG9jayk7CisJQlVHX09OKGFjdGl2ZV9zdGFjayAhPSBOVUxMKTsKKworCWxwcm90byA9IHByb3RvOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJm9jZnMyX3N0YWNrX2xpc3QsIHNwX2xpc3QpIHsKKwkJcC0+c3BfcHJvdG8gPSBscHJvdG87CisJfQorCisJc3Bpbl91bmxvY2soJm9jZnMyX3N0YWNrX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfc3RhY2tfZ2x1ZV9zZXRfbG9ja2luZ19wcm90b2NvbCk7CisKKworLyoKKyAqIFRoZSBvY2ZzMl9kbG1fbG9jaygpIGFuZCBvY2ZzMl9kbG1fdW5sb2NrKCkgZnVuY3Rpb25zIHRha2UKKyAqICJzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmFzdGFyZyIgaW5zdGVhZCBvZiAidm9pZCAqYXN0YXJnIiBiZWNhdXNlIHRoZQorICogdW5kZXJseWluZyBzdGFjayBwbHVnaW5zIG5lZWQgdG8gcGlsZmVyIHRoZSBsa3NiIG9mZiBvZiB0aGUgbG9ja19yZXMuCisgKiBJZiBzb21lIG90aGVyIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBwYXNzZWQgYXMgYW4gYXN0YXJnLCB0aGUgcGx1Z2lucworICogd2lsbCBuZWVkIHRvIGJlIGdpdmVuIGEgZGlmZmVyZW50IGF2ZW51ZSB0byB0aGUgbGtzYi4KKyAqLworaW50IG9jZnMyX2RsbV9sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCisJCSAgIGludCBtb2RlLAorCQkgICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJICAgdTMyIGZsYWdzLAorCQkgICB2b2lkICpuYW1lLAorCQkgICB1bnNpZ25lZCBpbnQgbmFtZWxlbiwKKwkJICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICphc3RhcmcpCit7CisJQlVHX09OKGxwcm90byA9PSBOVUxMKTsKKworCXJldHVybiBhY3RpdmVfc3RhY2stPnNwX29wcy0+ZGxtX2xvY2soY29ubiwgbW9kZSwgbGtzYiwgZmxhZ3MsCisJCQkJCSAgICAgIG5hbWUsIG5hbWVsZW4sIGFzdGFyZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9kbG1fbG9jayk7CisKK2ludCBvY2ZzMl9kbG1fdW5sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCisJCSAgICAgdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCSAgICAgdTMyIGZsYWdzLAorCQkgICAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqYXN0YXJnKQoreworCUJVR19PTihscHJvdG8gPT0gTlVMTCk7CisKKwlyZXR1cm4gYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmRsbV91bmxvY2soY29ubiwgbGtzYiwgZmxhZ3MsIGFzdGFyZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9kbG1fdW5sb2NrKTsKKworaW50IG9jZnMyX2RsbV9sb2NrX3N0YXR1cyh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3sKKwlyZXR1cm4gYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmxvY2tfc3RhdHVzKGxrc2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfZGxtX2xvY2tfc3RhdHVzKTsKKworLyoKKyAqIFdoeSBkb24ndCB3ZSBjYXN0IHRvIG9jZnMyX21ldGFfbHZiPyAgVGhlICJjbGVhbiIgYW5zd2VyIGlzIHRoYXQgd2UKKyAqIGRvbid0IGNhc3QgYXQgdGhlIGdsdWUgbGV2ZWwuICBUaGUgcmVhbCBhbnN3ZXIgaXMgdGhhdCB0aGUgaGVhZGVyCisgKiBvcmRlcmluZyBpcyBuaWdoIGltcG9zc2libGUuCisgKi8KK3ZvaWQgKm9jZnMyX2RsbV9sdmIodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCit7CisJcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5sb2NrX2x2Yihsa3NiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2RsbV9sdmIpOworCit2b2lkIG9jZnMyX2RsbV9kdW1wX2xrc2IodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCit7CisJYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmR1bXBfbGtzYihsa3NiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2RsbV9kdW1wX2xrc2IpOworCitpbnQgb2NmczJfY2x1c3Rlcl9jb25uZWN0KGNvbnN0IGNoYXIgKnN0YWNrX25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKmdyb3VwLAorCQkJICBpbnQgZ3JvdXBsZW4sCisJCQkgIHZvaWQgKCpyZWNvdmVyeV9oYW5kbGVyKShpbnQgbm9kZV9udW0sCisJCQkJCQkgICB2b2lkICpyZWNvdmVyeV9kYXRhKSwKKwkJCSAgdm9pZCAqcmVjb3ZlcnlfZGF0YSwKKwkJCSAgc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqKmNvbm4pCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpuZXdfY29ubjsKKworCUJVR19PTihncm91cCA9PSBOVUxMKTsKKwlCVUdfT04oY29ubiA9PSBOVUxMKTsKKwlCVUdfT04ocmVjb3ZlcnlfaGFuZGxlciA9PSBOVUxMKTsKKworCWlmIChncm91cGxlbiA+IEdST1VQX05BTUVfTUFYKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJbmV3X2Nvbm4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uKSwKKwkJCSAgIEdGUF9LRVJORUwpOworCWlmICghbmV3X2Nvbm4pIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkobmV3X2Nvbm4tPmNjX25hbWUsIGdyb3VwLCBncm91cGxlbik7CisJbmV3X2Nvbm4tPmNjX25hbWVsZW4gPSBncm91cGxlbjsKKwluZXdfY29ubi0+Y2NfcmVjb3ZlcnlfaGFuZGxlciA9IHJlY292ZXJ5X2hhbmRsZXI7CisJbmV3X2Nvbm4tPmNjX3JlY292ZXJ5X2RhdGEgPSByZWNvdmVyeV9kYXRhOworCisJLyogU3RhcnQgdGhlIG5ldyBjb25uZWN0aW9uIGF0IG91ciBtYXhpbXVtIGNvbXBhdGliaWxpdHkgbGV2ZWwgKi8KKwluZXdfY29ubi0+Y2NfdmVyc2lvbiA9IGxwcm90by0+bHBfbWF4X3ZlcnNpb247CisKKwkvKiBUaGlzIHdpbGwgcGluIHRoZSBzdGFjayBkcml2ZXIgaWYgc3VjY2Vzc2Z1bCAqLworCXJjID0gb2NmczJfc3RhY2tfZHJpdmVyX2dldChzdGFja19uYW1lKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyYyA9IGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5jb25uZWN0KG5ld19jb25uKTsKKwlpZiAocmMpIHsKKwkJb2NmczJfc3RhY2tfZHJpdmVyX3B1dCgpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCSpjb25uID0gbmV3X2Nvbm47CisKK291dF9mcmVlOgorCWlmIChyYykKKwkJa2ZyZWUobmV3X2Nvbm4pOworCitvdXQ6CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfY2x1c3Rlcl9jb25uZWN0KTsKKworLyogSWYgaGFuZ3VwX3BlbmRpbmcgaXMgMCwgdGhlIHN0YWNrIGRyaXZlciB3aWxsIGJlIGRyb3BwZWQgKi8KK2ludCBvY2ZzMl9jbHVzdGVyX2Rpc2Nvbm5lY3Qoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgaW50IGhhbmd1cF9wZW5kaW5nKQoreworCWludCByZXQ7CisKKwlCVUdfT04oY29ubiA9PSBOVUxMKTsKKworCXJldCA9IGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5kaXNjb25uZWN0KGNvbm4sIGhhbmd1cF9wZW5kaW5nKTsKKworCS8qIFhYWCBTaG91bGQgd2UgZnJlZSBpdCBhbnl3YXk/ICovCisJaWYgKCFyZXQpIHsKKwkJa2ZyZWUoY29ubik7CisJCWlmICghaGFuZ3VwX3BlbmRpbmcpCisJCQlvY2ZzMl9zdGFja19kcml2ZXJfcHV0KCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2NsdXN0ZXJfZGlzY29ubmVjdCk7CisKK3ZvaWQgb2NmczJfY2x1c3Rlcl9oYW5ndXAoY29uc3QgY2hhciAqZ3JvdXAsIGludCBncm91cGxlbikKK3sKKwlCVUdfT04oZ3JvdXAgPT0gTlVMTCk7CisJQlVHX09OKGdyb3VwW2dyb3VwbGVuXSAhPSAnXDAnKTsKKworCWlmIChhY3RpdmVfc3RhY2stPnNwX29wcy0+aGFuZ3VwKQorCQlhY3RpdmVfc3RhY2stPnNwX29wcy0+aGFuZ3VwKGdyb3VwLCBncm91cGxlbik7CisKKwkvKiBjbHVzdGVyX2Rpc2Nvbm5lY3QoKSB3YXMgY2FsbGVkIHdpdGggaGFuZ3VwX3BlbmRpbmc9PTEgKi8KKwlvY2ZzMl9zdGFja19kcml2ZXJfcHV0KCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9jbHVzdGVyX2hhbmd1cCk7CisKK2ludCBvY2ZzMl9jbHVzdGVyX3RoaXNfbm9kZSh1bnNpZ25lZCBpbnQgKm5vZGUpCit7CisJcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT50aGlzX25vZGUobm9kZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9jbHVzdGVyX3RoaXNfbm9kZSk7CisKKworLyoKKyAqIFN5c2ZzIGJpdHMKKyAqLworCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9tYXhfbG9ja2luZ19wcm90b2NvbF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQkgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICAgY2hhciAqYnVmKQoreworCXNzaXplX3QgcmV0ID0gMDsKKworCXNwaW5fbG9jaygmb2NmczJfc3RhY2tfbG9jayk7CisJaWYgKGxwcm90bykKKwkJcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldS4ldVxuIiwKKwkJCSAgICAgICBscHJvdG8tPmxwX21heF92ZXJzaW9uLnB2X21ham9yLAorCQkJICAgICAgIGxwcm90by0+bHBfbWF4X3ZlcnNpb24ucHZfbWlub3IpOworCXNwaW5fdW5sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgb2NmczJfYXR0cl9tYXhfbG9ja2luZ19wcm90b2NvbCA9CisJX19BVFRSKG1heF9sb2NraW5nX3Byb3RvY29sLCBTX0lGUkVHIHwgU19JUlVHTywKKwkgICAgICAgb2NmczJfbWF4X2xvY2tpbmdfcHJvdG9jb2xfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IG9jZnMyX2xvYWRlZF9jbHVzdGVyX3BsdWdpbnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkJCSBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQkgY2hhciAqYnVmKQoreworCXNzaXplX3QgcmV0ID0gMCwgdG90YWwgPSAwLCByZW1haW4gPSBQQUdFX1NJWkU7CisJc3RydWN0IG9jZnMyX3N0YWNrX3BsdWdpbiAqcDsKKworCXNwaW5fbG9jaygmb2NmczJfc3RhY2tfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmb2NmczJfc3RhY2tfbGlzdCwgc3BfbGlzdCkgeworCQlyZXQgPSBzbnByaW50ZihidWYsIHJlbWFpbiwgIiVzXG4iLAorCQkJICAgICAgIHAtPnNwX25hbWUpOworCQlpZiAocmV0IDwgMCkgeworCQkJdG90YWwgPSByZXQ7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0ID09IHJlbWFpbikgeworCQkJLyogc25wcmludGYoKSBkaWRuJ3QgZml0ICovCisJCQl0b3RhbCA9IC1FMkJJRzsKKwkJCWJyZWFrOworCQl9CisJCXRvdGFsICs9IHJldDsKKwkJcmVtYWluIC09IHJldDsKKwl9CisJc3Bpbl91bmxvY2soJm9jZnMyX3N0YWNrX2xvY2spOworCisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIG9jZnMyX2F0dHJfbG9hZGVkX2NsdXN0ZXJfcGx1Z2lucyA9CisJX19BVFRSKGxvYWRlZF9jbHVzdGVyX3BsdWdpbnMsIFNfSUZSRUcgfCBTX0lSVUdPLAorCSAgICAgICBvY2ZzMl9sb2FkZWRfY2x1c3Rlcl9wbHVnaW5zX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9hY3RpdmVfY2x1c3Rlcl9wbHVnaW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJldCA9IDA7CisKKwlzcGluX2xvY2soJm9jZnMyX3N0YWNrX2xvY2spOworCWlmIChhY3RpdmVfc3RhY2spIHsKKwkJcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCSAgICAgICBhY3RpdmVfc3RhY2stPnNwX25hbWUpOworCQlpZiAocmV0ID09IFBBR0VfU0laRSkKKwkJCXJldCA9IC1FMkJJRzsKKwl9CisJc3Bpbl91bmxvY2soJm9jZnMyX3N0YWNrX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBvY2ZzMl9hdHRyX2FjdGl2ZV9jbHVzdGVyX3BsdWdpbiA9CisJX19BVFRSKGFjdGl2ZV9jbHVzdGVyX3BsdWdpbiwgU19JRlJFRyB8IFNfSVJVR08sCisJICAgICAgIG9jZnMyX2FjdGl2ZV9jbHVzdGVyX3BsdWdpbl9zaG93LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgb2NmczJfY2x1c3Rlcl9zdGFja19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJldDsKKwlzcGluX2xvY2soJm9jZnMyX3N0YWNrX2xvY2spOworCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGNsdXN0ZXJfc3RhY2tfbmFtZSk7CisJc3Bpbl91bmxvY2soJm9jZnMyX3N0YWNrX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgb2NmczJfY2x1c3Rlcl9zdGFja19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkJIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXNpemVfdCBsZW4gPSBjb3VudDsKKwlzc2l6ZV90IHJldDsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIGxlbjsKKworCWlmIChidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwlpZiAoKGxlbiAhPSBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pIHx8CisJICAgIChzdHJubGVuKGJ1ZiwgbGVuKSAhPSBsZW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmb2NmczJfc3RhY2tfbG9jayk7CisJaWYgKGFjdGl2ZV9zdGFjaykgeworCQlpZiAoIXN0cm5jbXAoYnVmLCBjbHVzdGVyX3N0YWNrX25hbWUsIGxlbikpCisJCQlyZXQgPSBjb3VudDsKKwkJZWxzZQorCQkJcmV0ID0gLUVCVVNZOworCX0gZWxzZSB7CisJCW1lbWNweShjbHVzdGVyX3N0YWNrX25hbWUsIGJ1ZiwgbGVuKTsKKwkJcmV0ID0gY291bnQ7CisJfQorCXNwaW5fdW5sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBvY2ZzMl9hdHRyX2NsdXN0ZXJfc3RhY2sgPQorCV9fQVRUUihjbHVzdGVyX3N0YWNrLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCisJICAgICAgIG9jZnMyX2NsdXN0ZXJfc3RhY2tfc2hvdywKKwkgICAgICAgb2NmczJfY2x1c3Rlcl9zdGFja19zdG9yZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpvY2ZzMl9hdHRyc1tdID0geworCSZvY2ZzMl9hdHRyX21heF9sb2NraW5nX3Byb3RvY29sLmF0dHIsCisJJm9jZnMyX2F0dHJfbG9hZGVkX2NsdXN0ZXJfcGx1Z2lucy5hdHRyLAorCSZvY2ZzMl9hdHRyX2FjdGl2ZV9jbHVzdGVyX3BsdWdpbi5hdHRyLAorCSZvY2ZzMl9hdHRyX2NsdXN0ZXJfc3RhY2suYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgb2NmczJfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBvY2ZzMl9hdHRycywKK307CisKK3N0YXRpYyBzdHJ1Y3Qga3NldCAqb2NmczJfa3NldDsKKworc3RhdGljIHZvaWQgb2NmczJfc3lzZnNfZXhpdCh2b2lkKQoreworCWtzZXRfdW5yZWdpc3RlcihvY2ZzMl9rc2V0KTsKK30KKworc3RhdGljIGludCBvY2ZzMl9zeXNmc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCW9jZnMyX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJvY2ZzMiIsIE5VTEwsIGZzX2tvYmopOworCWlmICghb2NmczJfa3NldCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm9jZnMyX2tzZXQtPmtvYmosICZvY2ZzMl9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWtzZXRfdW5yZWdpc3RlcihvY2ZzMl9rc2V0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBvY2ZzMl9zdGFja19nbHVlX2luaXQodm9pZCkKK3sKKwlzdHJjcHkoY2x1c3Rlcl9zdGFja19uYW1lLCBPQ0ZTMl9TVEFDS19QTFVHSU5fTzJDQik7CisKKwlyZXR1cm4gb2NmczJfc3lzZnNfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2NmczJfc3RhY2tfZ2x1ZV9leGl0KHZvaWQpCit7CisJbHByb3RvID0gTlVMTDsKKwlvY2ZzMl9zeXNmc19leGl0KCk7Cit9CisKK01PRFVMRV9BVVRIT1IoIk9yYWNsZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvY2ZzMiBjbHV0ZXIgc3RhY2sgZ2x1ZSBsYXllciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2luaXQob2NmczJfc3RhY2tfZ2x1ZV9pbml0KTsKK21vZHVsZV9leGl0KG9jZnMyX3N0YWNrX2dsdWVfZXhpdCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja2dsdWUuaCBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNWU0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9zdGFja2dsdWUuaApAQCAtMCwwICsxLDI2MSBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHN0YWNrZ2x1ZS5oCisgKgorICogR2x1ZSB0byB0aGUgdW5kZXJseWluZyBjbHVzdGVyIHN0YWNrLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworCisjaWZuZGVmIFNUQUNLR0xVRV9ICisjZGVmaW5lIFNUQUNLR0xVRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG1jb25zdGFudHMuaD4KKworI2luY2x1ZGUgImRsbS9kbG1hcGkuaCIKKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKworLyoKKyAqIGRsbWNvbnN0YW50cy5oIGRvZXMgbm90IGhhdmUgYSBMT0NBTCBmbGFnLiAgV2UgaG9wZSB0byByZW1vdmUgaXQKKyAqIHNvbWUgZGF5LCBidXQgcmlnaHQgbm93IHdlIG5lZWQgaXQuICBMZXQncyBmYWtlIGl0LiAgVGhpcyB2YWx1ZSBpcyBsYXJnZXIKKyAqIHRoYW4gYW55IGZsYWcgaW4gZGxtY29uc3RhbnRzLmguCisgKi8KKyNkZWZpbmUgRExNX0xLRl9MT0NBTAkJMHgwMDEwMDAwMAorCisvKgorICogVGhpcyBzaGFkb3dzIERMTV9MT0NLU1BBQ0VfTEVOIGluIGZzL2RsbS9kbG1faW50ZXJuYWwuaC4gIFRoYXQgcHJvYmFibHkKKyAqIHdhbnRzIHRvIGJlIGluIGEgcHVibGljIGhlYWRlci4KKyAqLworI2RlZmluZSBHUk9VUF9OQU1FX01BWAkJNjQKKworCisvKgorICogb2NmczJfcHJvdG9jb2xfdmVyc2lvbiBjaGFuZ2VzIHdoZW4gb2NmczIgZG9lcyBzb21ldGhpbmcgZGlmZmVyZW50IGluCisgKiBpdHMgaW50ZXItbm9kZSBiZWhhdmlvci4gIFNlZSBkbG1nbHVlLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uIHsKKwl1OCBwdl9tYWpvcjsKKwl1OCBwdl9taW5vcjsKK307CisKKy8qCisgKiBUaGUgb2NmczJfbG9ja2luZ19wcm90b2NvbCBkZWZpbmVzIHRoZSBoYW5kbGVycyBjYWxsZWQgb24gb2NmczIncyBiZWhhbGYuCisgKi8KK3N0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sIHsKKwlzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbiBscF9tYXhfdmVyc2lvbjsKKwl2b2lkICgqbHBfbG9ja19hc3QpKHZvaWQgKmFzdGFyZyk7CisJdm9pZCAoKmxwX2Jsb2NraW5nX2FzdCkodm9pZCAqYXN0YXJnLCBpbnQgbGV2ZWwpOworCXZvaWQgKCpscF91bmxvY2tfYXN0KSh2b2lkICphc3RhcmcsIGludCBlcnJvcik7Cit9OworCisKKy8qCisgKiBUaGUgZGxtX2xvY2tzdGF0dXMgc3RydWN0IGluY2x1ZGVzIGx2YiBzcGFjZSwgYnV0IHRoZSBkbG1fbGtzYiBzdHJ1Y3Qgb25seQorICogaGFzIGEgcG9pbnRlciB0byBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBsdmIgc3BhY2UuICBUaGlzIHN0cnVjdCBleGlzdHMgb25seSB0bworICogaW5jbHVkZSBpbiB0aGUgbGtzYiB1bmlvbiB0byBtYWtlIHNwYWNlIGZvciBhIGNvbWJpbmVkIGRsbV9sa3NiIGFuZCBsdmIuCisgKi8KK3N0cnVjdCBmc2RsbV9sa3NiX3BsdXNfbHZiIHsKKwlzdHJ1Y3QgZGxtX2xrc2IgbGtzYjsKKwljaGFyIGx2YltETE1fTFZCX0xFTl07Cit9OworCisvKgorICogQSB1bmlvbiBvZiBhbGwgbG9jayBzdGF0dXMgc3RydWN0dXJlcy4gIFdlIGRlZmluZSBpdCBoZXJlIHNvIHRoYXQgdGhlCisgKiBzaXplIG9mIHRoZSB1bmlvbiBpcyBrbm93bi4gIExvY2sgc3RhdHVzIHN0cnVjdHVyZXMgYXJlIGVtYmVkZGVkIGluCisgKiBvY2ZzMiBpbm9kZXMuCisgKi8KK3VuaW9uIG9jZnMyX2RsbV9sa3NiIHsKKwlzdHJ1Y3QgZGxtX2xvY2tzdGF0dXMgbGtzYl9vMmRsbTsKKwlzdHJ1Y3QgZGxtX2xrc2IgbGtzYl9mc2RsbTsKKwlzdHJ1Y3QgZnNkbG1fbGtzYl9wbHVzX2x2YiBwYWRkaW5nOworfTsKKworLyoKKyAqIEEgY2x1c3RlciBjb25uZWN0aW9uLiAgTW9zdGx5IG9wYXF1ZSB0byBvY2ZzMiwgdGhlIGNvbm5lY3Rpb24gaG9sZHMKKyAqIHN0YXRlIGZvciB0aGUgdW5kZXJseWluZyBzdGFjay4gIG9jZnMyIGRvZXMgdXNlIGNjX3ZlcnNpb24gdG8gZGV0ZXJtaW5lCisgKiBsb2NraW5nIGNvbXBhdGliaWxpdHkuCisgKi8KK3N0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24geworCWNoYXIgY2NfbmFtZVtHUk9VUF9OQU1FX01BWF07CisJaW50IGNjX25hbWVsZW47CisJc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gY2NfdmVyc2lvbjsKKwl2b2lkICgqY2NfcmVjb3ZlcnlfaGFuZGxlcikoaW50IG5vZGVfbnVtLCB2b2lkICpyZWNvdmVyeV9kYXRhKTsKKwl2b2lkICpjY19yZWNvdmVyeV9kYXRhOworCXZvaWQgKmNjX2xvY2tzcGFjZTsKKwl2b2lkICpjY19wcml2YXRlOworfTsKKworLyoKKyAqIEVhY2ggY2x1c3RlciBzdGFjayBpbXBsZW1lbnRzIHRoZSBzdGFjayBvcGVyYXRpb25zIHN0cnVjdHVyZS4gIE5vdCB1c2VkCisgKiBpbiB0aGUgb2NmczIgY29kZSwgdGhlIHN0YWNrZ2x1ZSBjb2RlIHRyYW5zbGF0ZXMgZ2VuZXJpYyBjbHVzdGVyIGNhbGxzCisgKiBpbnRvIHN0YWNrIG9wZXJhdGlvbnMuCisgKi8KK3N0cnVjdCBvY2ZzMl9zdGFja19vcGVyYXRpb25zIHsKKwkvKgorCSAqIFRoZSBmcyBjb2RlIGNhbGxzIG9jZnMyX2NsdXN0ZXJfY29ubmVjdCgpIHRvIGF0dGFjaCBhIG5ldworCSAqIGZpbGVzeXN0ZW0gdG8gdGhlIGNsdXN0ZXIgc3RhY2suICBUaGUgLT5jb25uZWN0KCkgb3AgaXMgcGFzc2VkCisJICogYW4gb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uIHdpdGggdGhlIG5hbWUgYW5kIHJlY292ZXJ5IGZpZWxkCisJICogZmlsbGVkIGluLgorCSAqCisJICogVGhlIHN0YWNrIG11c3Qgc2V0IHVwIGFueSBub3RpZmljYXRpb24gbWVjaGFuaXNtcyBhbmQgY3JlYXRlCisJICogdGhlIGZpbGVzeXN0ZW0gbG9ja3NwYWNlIGluIHRoZSBETE0uICBUaGUgbG9ja3NwYWNlIHNob3VsZCBiZQorCSAqIHN0b3JlZCBvbiBjY19sb2Nrc3BhY2UuICBBbnkgb3RoZXIgaW5mb3JtYXRpb24gY2FuIGJlIHN0b3JlZCBvbgorCSAqIGNjX3ByaXZhdGUuCisJICoKKwkgKiAtPmNvbm5lY3QoKSBtdXN0IG5vdCByZXR1cm4gdW50aWwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CisJICoKKwkgKiAgLSBOb2RlIGRvd24gbm90aWZpY2F0aW9ucyBmb3IgdGhlIGZpbGVzeXN0ZW0gd2lsbCBiZSByZWNpZXZlZAorCSAqICAgIGFuZCBwYXNzZWQgdG8gY29ubi0+Y2NfcmVjb3ZlcnlfaGFuZGxlcigpLgorCSAqICAtIExvY2tpbmcgcmVxdWVzdHMgZm9yIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgcHJvY2Vzc2VkLgorCSAqLworCWludCAoKmNvbm5lY3QpKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4pOworCisJLyoKKwkgKiBUaGUgZnMgY29kZSBjYWxscyBvY2ZzMl9jbHVzdGVyX2Rpc2Nvbm5lY3QoKSB3aGVuIGEgZmlsZXN5c3RlbQorCSAqIG5vIGxvbmdlciBuZWVkcyBjbHVzdGVyIHNlcnZpY2VzLiAgQWxsIERMTSBsb2NrcyBoYXZlIGJlZW4KKwkgKiBkcm9wcGVkLCBhbmQgcmVjb3Zlcnkgbm90aWZpY2F0aW9uIGlzIGJlaW5nIGlnbm9yZWQgYnkgdGhlCisJICogZnMgY29kZS4gIFRoZSBzdGFjayBtdXN0IGRpc2VuZ2FnZSBmcm9tIHRoZSBETE0gYW5kIGRpc2NvbnRpbnVlCisJICogcmVjb3Zlcnkgbm90aWZpY2F0aW9uLgorCSAqCisJICogT25jZSAtPmRpc2Nvbm5lY3QoKSBoYXMgcmV0dXJuZWQsIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSB3aWxsCisJICogYmUgZnJlZWQuICBUaHVzLCBhIHN0YWNrIG11c3Qgbm90IHJldHVybiBmcm9tIC0+ZGlzY29ubmVjdCgpCisJICogdW50aWwgaXQgd2lsbCBubyBsb25nZXIgcmVmZXJlbmNlIHRoZSBjb25uIHBvaW50ZXIuCisJICoKKwkgKiBJZiBoYW5ndXBfcGVuZGluZyBpcyB6ZXJvLCBvY2ZzMl9jbHVzdGVyX2Rpc2Nvbm5lY3QoKSB3aWxsIGFsc28KKwkgKiBiZSBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIG9uIHRoZSBtb2R1bGUuCisJICovCisJaW50ICgqZGlzY29ubmVjdCkoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgaW50IGhhbmd1cF9wZW5kaW5nKTsKKworCS8qCisJICogb2NmczJfY2x1c3Rlcl9oYW5ndXAoKSBleGlzdHMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlcgorCSAqIG9jZnMyIHRvb2xzLiAgT25seSB0aGUgY2xhc3NpYyBzdGFjayByZWFsbHkgbmVlZHMgaXQuICBBcyBzdWNoCisJICogLT5oYW5ndXAoKSBpcyBub3QgcmVxdWlyZWQgb2YgYWxsIHN0YWNrcy4gIFNlZSB0aGUgY29tbWVudCBieQorCSAqIG9jZnMyX2NsdXN0ZXJfaGFuZ3VwKCkgZm9yIG1vcmUgZGV0YWlscy4KKwkgKgorCSAqIE5vdGUgdGhhdCBvY2ZzMl9jbHVzdGVyX2hhbmd1cCgpIGNhbiBvbmx5IGJlIGNhbGxlZCBpZgorCSAqIGhhbmd1cF9wZW5kaW5nIHdhcyBwYXNzZWQgdG8gb2NmczJfY2x1c3Rlcl9kaXNjb25uZWN0KCkuCisJICovCisJdm9pZCAoKmhhbmd1cCkoY29uc3QgY2hhciAqZ3JvdXAsIGludCBncm91cGxlbik7CisKKwkvKgorCSAqIC0+dGhpc19ub2RlKCkgcmV0dXJucyB0aGUgY2x1c3RlcidzIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUKKwkgKiBsb2NhbCBub2RlLgorCSAqLworCWludCAoKnRoaXNfbm9kZSkodW5zaWduZWQgaW50ICpub2RlKTsKKworCS8qCisJICogQ2FsbCB0aGUgdW5kZXJseWluZyBkbG0gbG9jayBmdW5jdGlvbi4gIFRoZSAtPmRsbV9sb2NrKCkKKwkgKiBjYWxsYmFjayBzaG91bGQgY29udmVydCB0aGUgZmxhZ3MgYW5kIG1vZGUgYXMgYXBwcm9wcmlhdGUuCisJICoKKwkgKiBhc3QgYW5kIGJhc3QgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgY2FsbCBiZWNhdXNlIHRoZQorCSAqIHN0YWNrIHdpbGwgbGlrZWx5IHdhbnQgdG8gd3JhcCBhc3QgYW5kIGJhc3QgY2FsbHMgYmVmb3JlIHBhc3NpbmcKKwkgKiB0aGVtIHRvIHN0YWNrLT5zcF9wcm90by4KKwkgKi8KKwlpbnQgKCpkbG1fbG9jaykoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJCWludCBtb2RlLAorCQkJdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCQl1MzIgZmxhZ3MsCisJCQl2b2lkICpuYW1lLAorCQkJdW5zaWduZWQgaW50IG5hbWVsZW4sCisJCQl2b2lkICphc3RhcmcpOworCisJLyoKKwkgKiBDYWxsIHRoZSB1bmRlcmx5aW5nIGRsbSB1bmxvY2sgZnVuY3Rpb24uICBUaGUgLT5kbG1fdW5sb2NrKCkKKwkgKiBmdW5jdGlvbiBzaG91bGQgY29udmVydCB0aGUgZmxhZ3MgYXMgYXBwcm9wcmlhdGUuCisJICoKKwkgKiBUaGUgdW5sb2NrIGFzdCBpcyBub3QgcGFzc2VkLCBhcyB0aGUgc3RhY2sgd2lsbCB3YW50IHRvIHdyYXAKKwkgKiBpdCBiZWZvcmUgY2FsbGluZyBzdGFjay0+c3BfcHJvdG8tPmxwX3VubG9ja19hc3QoKS4KKwkgKi8KKwlpbnQgKCpkbG1fdW5sb2NrKShzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAorCQkJICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJCSAgdTMyIGZsYWdzLAorCQkJICB2b2lkICphc3RhcmcpOworCisJLyoKKwkgKiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudCBsb2NrIHN0YXR1cyBibG9jay4gIFRoZSBmcworCSAqIGNvZGUgc2hvdWxkIG5ldmVyIGRlcmVmZXJlbmNlIHRoZSB1bmlvbi4gIFRoZSAtPmxvY2tfc3RhdHVzKCkKKwkgKiBjYWxsYmFjayBwdWxscyBvdXQgdGhlIHN0YWNrLXNwZWNpZmljIGxrc2IsIGNvbnZlcnRzIHRoZSBzdGF0dXMKKwkgKiB0byBhIHByb3BlciBlcnJubywgYW5kIHJldHVybnMgaXQuCisJICovCisJaW50ICgqbG9ja19zdGF0dXMpKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKKworCS8qCisJICogUHVsbCB0aGUgbHZiIHBvaW50ZXIgb2ZmIG9mIHRoZSBzdGFjay1zcGVjaWZpYyBsa3NiLgorCSAqLworCXZvaWQgKigqbG9ja19sdmIpKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKKworCS8qCisJICogVGhpcyBpcyBhbiBvcHRvaW5hbCBkZWJ1Z2dpbmcgaG9vay4gIElmIHByb3ZpZGVkLCB0aGUKKwkgKiBzdGFjayBjYW4gZHVtcCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBsb2NrLgorCSAqLworCXZvaWQgKCpkdW1wX2xrc2IpKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKK307CisKKy8qCisgKiBFYWNoIHN0YWNrIHBsdWdpbiBtdXN0IGRlc2NyaWJlIGl0c2VsZiBieSByZWdpc3RlcmluZyBhCisgKiBvY2ZzMl9zdGFja19wbHVnaW4gc3RydWN0dXJlLiAgVGhpcyBpcyBvbmx5IHNlZW4gYnkgc3RhY2tnbHVlIGFuZCB0aGUKKyAqIHN0YWNrIGRyaXZlci4KKyAqLworc3RydWN0IG9jZnMyX3N0YWNrX3BsdWdpbiB7CisJY2hhciAqc3BfbmFtZTsKKwlzdHJ1Y3Qgb2NmczJfc3RhY2tfb3BlcmF0aW9ucyAqc3Bfb3BzOworCXN0cnVjdCBtb2R1bGUgKnNwX293bmVyOworCisJLyogVGhlc2UgYXJlIG1hbmFnZWQgYnkgdGhlIHN0YWNrZ2x1ZSBjb2RlLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgc3BfbGlzdDsKKwl1bnNpZ25lZCBpbnQgc3BfY291bnQ7CisJc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKnNwX3Byb3RvOworfTsKKworCisvKiBVc2VkIGJ5IHRoZSBmaWxlc3lzdGVtICovCitpbnQgb2NmczJfY2x1c3Rlcl9jb25uZWN0KGNvbnN0IGNoYXIgKnN0YWNrX25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKmdyb3VwLAorCQkJICBpbnQgZ3JvdXBsZW4sCisJCQkgIHZvaWQgKCpyZWNvdmVyeV9oYW5kbGVyKShpbnQgbm9kZV9udW0sCisJCQkJCQkgICB2b2lkICpyZWNvdmVyeV9kYXRhKSwKKwkJCSAgdm9pZCAqcmVjb3ZlcnlfZGF0YSwKKwkJCSAgc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqKmNvbm4pOworaW50IG9jZnMyX2NsdXN0ZXJfZGlzY29ubmVjdChzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAorCQkJICAgICBpbnQgaGFuZ3VwX3BlbmRpbmcpOwordm9pZCBvY2ZzMl9jbHVzdGVyX2hhbmd1cChjb25zdCBjaGFyICpncm91cCwgaW50IGdyb3VwbGVuKTsKK2ludCBvY2ZzMl9jbHVzdGVyX3RoaXNfbm9kZSh1bnNpZ25lZCBpbnQgKm5vZGUpOworCitzdHJ1Y3Qgb2NmczJfbG9ja19yZXM7CitpbnQgb2NmczJfZGxtX2xvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJICAgaW50IG1vZGUsCisJCSAgIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkgICB1MzIgZmxhZ3MsCisJCSAgIHZvaWQgKm5hbWUsCisJCSAgIHVuc2lnbmVkIGludCBuYW1lbGVuLAorCQkgICBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmFzdGFyZyk7CitpbnQgb2NmczJfZGxtX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAorCQkgICAgIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkgICAgIHUzMiBmbGFncywKKwkJICAgICBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmFzdGFyZyk7CisKK2ludCBvY2ZzMl9kbG1fbG9ja19zdGF0dXModW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOwordm9pZCAqb2NmczJfZGxtX2x2Yih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7Cit2b2lkIG9jZnMyX2RsbV9kdW1wX2xrc2IodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOworCit2b2lkIG9jZnMyX3N0YWNrX2dsdWVfc2V0X2xvY2tpbmdfcHJvdG9jb2woc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKnByb3RvKTsKKworCisvKiBVc2VkIGJ5IHN0YWNrIHBsdWdpbnMgKi8KK2ludCBvY2ZzMl9zdGFja19nbHVlX3JlZ2lzdGVyKHN0cnVjdCBvY2ZzMl9zdGFja19wbHVnaW4gKnBsdWdpbik7Cit2b2lkIG9jZnMyX3N0YWNrX2dsdWVfdW5yZWdpc3RlcihzdHJ1Y3Qgb2NmczJfc3RhY2tfcGx1Z2luICpwbHVnaW4pOworI2VuZGlmICAvKiBTVEFDS0dMVUVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggNzJjMTk4YS4uZDJkMjc4ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC00Niw2ICs0NiwxMSBAQAogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIAorI2RlZmluZSBOT1RfQUxMT0NfTkVXX0dST1VQCQkwCisjZGVmaW5lIEFMTE9DX05FV19HUk9VUAkJCTEKKworI2RlZmluZSBPQ0ZTMl9NQVhfSU5PREVTX1RPX1NURUFMCTEwMjQKKwogc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2RlYnVnX2JnKHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICpiZyk7CiBzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfZGVidWdfc3ViYWxsb2NfaW5vZGUoc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUpOwogc3RhdGljIGlubGluZSB1MTYgb2NmczJfZmluZF92aWN0aW1fY2hhaW4oc3RydWN0IG9jZnMyX2NoYWluX2xpc3QgKmNsKTsKQEAgLTEwNiw3ICsxMTEsNyBAQAogCQkJCQkJdTY0ICpiZ19ibGtubywKIAkJCQkJCXUxNiAqYmdfYml0X29mZik7CiAKLXZvaWQgb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKK3N0YXRpYyB2b2lkIG9jZnMyX2ZyZWVfYWNfcmVzb3VyY2Uoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBhYy0+YWNfaW5vZGU7CiAKQEAgLTExNyw5ICsxMjIsMTcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAkJaXB1dChpbm9kZSk7CisJCWFjLT5hY19pbm9kZSA9IE5VTEw7CiAJfQotCWlmIChhYy0+YWNfYmgpCisJaWYgKGFjLT5hY19iaCkgewogCQlicmVsc2UoYWMtPmFjX2JoKTsKKwkJYWMtPmFjX2JoID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKK3sKKwlvY2ZzMl9mcmVlX2FjX3Jlc291cmNlKGFjKTsKIAlrZnJlZShhYyk7CiB9CiAKQEAgLTM5MSw3ICs0MDQsOCBAQAogc3RhdGljIGludCBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYywKIAkJCQkgICAgICAgaW50IHR5cGUsCi0JCQkJICAgICAgIHUzMiBzbG90KQorCQkJCSAgICAgICB1MzIgc2xvdCwKKwkJCQkgICAgICAgaW50IGFsbG9jX25ld19ncm91cCkKIHsKIAlpbnQgc3RhdHVzOwogCXUzMiBiaXRzX3dhbnRlZCA9IGFjLT5hY19iaXRzX3dhbnRlZDsKQEAgLTQyMCw2ICs0MzQsNyBAQAogCX0KIAogCWFjLT5hY19pbm9kZSA9IGFsbG9jX2lub2RlOworCWFjLT5hY19hbGxvY19zbG90ID0gc2xvdDsKIAogCWZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgYmgtPmJfZGF0YTsKIAlpZiAoIU9DRlMyX0lTX1ZBTElEX0RJTk9ERShmZSkpIHsKQEAgLTQ0Niw2ICs0NjEsMTQgQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCisJCWlmIChhbGxvY19uZXdfZ3JvdXAgIT0gQUxMT0NfTkVXX0dST1VQKSB7CisJCQltbG9nKDAsICJBbGxvYyBGaWxlICV1IEZ1bGw6IHdhbnRlZD0ldSwgZnJlZV9iaXRzPSV1LCAiCisJCQkgICAgICJhbmQgd2UgZG9uJ3QgYWxsb2MgYSBuZXcgZ3JvdXAgZm9yIGl0LlxuIiwKKwkJCSAgICAgc2xvdCwgYml0c193YW50ZWQsIGZyZWVfYml0cyk7CisJCQlzdGF0dXMgPSAtRU5PU1BDOworCQkJZ290byBiYWlsOworCQl9CisKIAkJc3RhdHVzID0gb2NmczJfYmxvY2tfZ3JvdXBfYWxsb2Mob3NiLCBhbGxvY19pbm9kZSwgYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQpAQCAtNDkwLDcgKzUxMyw4IEBACiAJKCphYyktPmFjX2dyb3VwX3NlYXJjaCA9IG9jZnMyX2Jsb2NrX2dyb3VwX3NlYXJjaDsKIAogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsICgqYWMpLAotCQkJCQkgICAgIEVYVEVOVF9BTExPQ19TWVNURU1fSU5PREUsIHNsb3QpOworCQkJCQkgICAgIEVYVEVOVF9BTExPQ19TWVNURU1fSU5PREUsCisJCQkJCSAgICAgc2xvdCwgQUxMT0NfTkVXX0dST1VQKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC01MDgsMTAgKzUzMiw0MiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfc3RlYWxfaW5vZGVfZnJvbV9vdGhlcl9ub2RlcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQoreworCWludCBpLCBzdGF0dXMgPSAtRU5PU1BDOworCXMxNiBzbG90ID0gb2NmczJfZ2V0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKKworCS8qIFN0YXJ0IHRvIHN0ZWFsIGlub2RlcyBmcm9tIHRoZSBmaXJzdCBzbG90IGFmdGVyIG91cnMuICovCisJaWYgKHNsb3QgPT0gT0NGUzJfSU5WQUxJRF9TTE9UKQorCQlzbG90ID0gb3NiLT5zbG90X251bSArIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgb3NiLT5tYXhfc2xvdHM7IGkrKywgc2xvdCsrKSB7CisJCWlmIChzbG90ID09IG9zYi0+bWF4X3Nsb3RzKQorCQkJc2xvdCA9IDA7CisKKwkJaWYgKHNsb3QgPT0gb3NiLT5zbG90X251bSkKKwkJCWNvbnRpbnVlOworCisJCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsIGFjLAorCQkJCQkJICAgICBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCisJCQkJCQkgICAgIHNsb3QsIE5PVF9BTExPQ19ORVdfR1JPVVApOworCQlpZiAoc3RhdHVzID49IDApIHsKKwkJCW9jZnMyX3NldF9pbm9kZV9zdGVhbF9zbG90KG9zYiwgc2xvdCk7CisJCQlicmVhazsKKwkJfQorCisJCW9jZnMyX2ZyZWVfYWNfcmVzb3VyY2UoYWMpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKIGludCBvY2ZzMl9yZXNlcnZlX25ld19pbm9kZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQogewogCWludCBzdGF0dXM7CisJczE2IHNsb3QgPSBvY2ZzMl9nZXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOwogCiAJKmFjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISgqYWMpKSB7CkBAIC01MjUsOSArNTgxLDQzIEBACiAKIAkoKmFjKS0+YWNfZ3JvdXBfc2VhcmNoID0gb2NmczJfYmxvY2tfZ3JvdXBfc2VhcmNoOwogCisJLyoKKwkgKiBzbG90IGlzIHNldCB3aGVuIHdlIHN1Y2Nlc3NmdWxseSBzdGVhbCBpbm9kZSBmcm9tIG90aGVyIG5vZGVzLgorCSAqIEl0IGlzIHJlc2V0IGluIDMgcGxhY2VzOgorCSAqIDEuIHdoZW4gd2UgZmx1c2ggdGhlIHRydW5jYXRlIGxvZworCSAqIDIuIHdoZW4gd2UgY29tcGxldGUgbG9jYWwgYWxsb2MgcmVjb3ZlcnkuCisJICogMy4gd2hlbiB3ZSBzdWNjZXNzZnVsbHkgYWxsb2NhdGUgZnJvbSBvdXIgb3duIHNsb3QuCisJICogQWZ0ZXIgaXQgaXMgc2V0LCB3ZSB3aWxsIGdvIG9uIHN0ZWFsaW5nIGlub2RlcyB1bnRpbCB3ZSBmaW5kIHRoZQorCSAqIG5lZWQgdG8gY2hlY2sgb3VyIHNsb3RzIHRvIHNlZSB3aGV0aGVyIHRoZXJlIGlzIHNvbWUgc3BhY2UgZm9yIHVzLgorCSAqLworCWlmIChzbG90ICE9IE9DRlMyX0lOVkFMSURfU0xPVCAmJgorCSAgICBhdG9taWNfcmVhZCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuKSA8IE9DRlMyX01BWF9JTk9ERVNfVE9fU1RFQUwpCisJCWdvdG8gaW5vZGVfc3RlYWw7CisKKwlhdG9taWNfc2V0KCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4sIDApOwogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsICphYywKIAkJCQkJICAgICBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCSAgICAgb3NiLT5zbG90X251bSk7CisJCQkJCSAgICAgb3NiLT5zbG90X251bSwgQUxMT0NfTkVXX0dST1VQKTsKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJc3RhdHVzID0gMDsKKworCQkvKgorCQkgKiBTb21lIGlub2RlcyBtdXN0IGJlIGZyZWVkIGJ5IHVzLCBzbyB0cnkgdG8gYWxsb2NhdGUKKwkJICogZnJvbSBvdXIgb3duIG5leHQgdGltZS4KKwkJICovCisJCWlmIChzbG90ICE9IE9DRlMyX0lOVkFMSURfU0xPVCkKKwkJCW9jZnMyX2luaXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOworCQlnb3RvIGJhaWw7CisJfSBlbHNlIGlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRU5PU1BDKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCW9jZnMyX2ZyZWVfYWNfcmVzb3VyY2UoKmFjKTsKKworaW5vZGVfc3RlYWw6CisJc3RhdHVzID0gb2NmczJfc3RlYWxfaW5vZGVfZnJvbV9vdGhlcl9ub2Rlcyhvc2IsICphYyk7CisJYXRvbWljX2luYygmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC01NTcsNyArNjQ3LDggQEAKIAogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsIGFjLAogCQkJCQkgICAgIEdMT0JBTF9CSVRNQVBfU1lTVEVNX0lOT0RFLAotCQkJCQkgICAgIE9DRlMyX0lOVkFMSURfU0xPVCk7CisJCQkJCSAgICAgT0NGUzJfSU5WQUxJRF9TTE9ULAorCQkJCQkgICAgIEFMTE9DX05FV19HUk9VUCk7CiAJaWYgKHN0YXR1cyA8IDAgJiYgc3RhdHVzICE9IC1FTk9TUEMpIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdWJhbGxvYy5oIGIvZnMvb2NmczIvc3ViYWxsb2MuaAppbmRleCA4Nzk5MDMzLi41NDRjNjAwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdWJhbGxvYy5oCisrKyBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKQEAgLTM2LDYgKzM2LDcgQEAKIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0IHsKIAlzdHJ1Y3QgaW5vZGUgKmFjX2lub2RlOyAgICAvKiB3aGljaCBiaXRtYXAgYXJlIHdlIGFsbG9jYXRpbmcgZnJvbT8gKi8KIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmFjX2JoOyAvKiBmaWxlIGVudHJ5IGJoICovCisJdTMyICAgIGFjX2FsbG9jX3Nsb3Q7ICAgLyogd2hpY2ggc2xvdCBhcmUgd2UgYWxsb2NhdGluZyBmcm9tPyAqLwogCXUzMiAgICBhY19iaXRzX3dhbnRlZDsKIAl1MzIgICAgYWNfYml0c19naXZlbjsKICNkZWZpbmUgT0NGUzJfQUNfVVNFX0xPQ0FMIDEKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IGJlYzc1YWYuLmRmNjNiYTIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtNDAsOCArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0KLSNpbmNsdWRlIDxjbHVzdGVyL25vZGVtYW5hZ2VyLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX1NVUEVSCiAjaW5jbHVkZSA8Y2x1c3Rlci9tYXNrbG9nLmg+CkBAIC04OCw2ICs4Nyw3IEBACiAJdW5zaWduZWQgaW50CWF0aW1lX3F1YW50dW07CiAJc2lnbmVkIHNob3J0CXNsb3Q7CiAJdW5zaWduZWQgaW50CWxvY2FsYWxsb2Nfb3B0OworCWNoYXIJCWNsdXN0ZXJfc3RhY2tbT0NGUzJfU1RBQ0tfTEFCRUxfTEVOICsgMV07CiB9OwogCiBzdGF0aWMgaW50IG9jZnMyX3BhcnNlX29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqb3B0aW9ucywKQEAgLTEwOSw3ICsxMDksNiBAQAogc3RhdGljIGludCBvY2ZzMl9pbml0X2dsb2JhbF9zeXN0ZW1faW5vZGVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHN0YXRpYyBpbnQgb2NmczJfaW5pdF9sb2NhbF9zeXN0ZW1faW5vZGVzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHN0YXRpYyB2b2lkIG9jZnMyX3JlbGVhc2Vfc3lzdGVtX2lub2RlcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7Ci1zdGF0aWMgaW50IG9jZnMyX2ZpbGxfbG9jYWxfbm9kZV9pbmZvKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHN0YXRpYyBpbnQgb2NmczJfY2hlY2tfdm9sdW1lKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHN0YXRpYyBpbnQgb2NmczJfdmVyaWZ5X3ZvbHVtZShzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKIAkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLApAQCAtMTU0LDYgKzE1Myw3IEBACiAJT3B0X2NvbW1pdCwKIAlPcHRfbG9jYWxhbGxvYywKIAlPcHRfbG9jYWxmbG9ja3MsCisJT3B0X3N0YWNrLAogCU9wdF9lcnIsCiB9OwogCkBAIC0xNzIsNiArMTcyLDcgQEAKIAl7T3B0X2NvbW1pdCwgImNvbW1pdD0ldSJ9LAogCXtPcHRfbG9jYWxhbGxvYywgImxvY2FsYWxsb2M9JWQifSwKIAl7T3B0X2xvY2FsZmxvY2tzLCAibG9jYWxmbG9ja3MifSwKKwl7T3B0X3N0YWNrLCAiY2x1c3Rlcl9zdGFjaz0lcyJ9LAogCXtPcHRfZXJyLCBOVUxMfQogfTsKIApAQCAtNTUxLDggKzU1MiwxNyBAQAogCQl9CiAJfQogCisJaWYgKG9jZnMyX3VzZXJzcGFjZV9zdGFjayhvc2IpKSB7CisJCWlmIChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfSEJfTE9DQUwpIHsKKwkJCW1sb2coTUxfRVJST1IsICJVc2Vyc3BhY2Ugc3RhY2sgZXhwZWN0ZWQsIGJ1dCAiCisJCQkgICAgICJvMmNiIGhlYXJ0YmVhdCBhcmd1bWVudHMgcGFzc2VkIHRvIG1vdW50XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCiAJaWYgKCEob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX0hCX0xPQ0FMKSkgewotCQlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikgJiYgIW9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSkgeworCQlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikgJiYgIW9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSAmJgorCQkgICAgIW9jZnMyX3VzZXJzcGFjZV9zdGFjayhvc2IpKSB7CiAJCQltbG9nKE1MX0VSUk9SLCAiSGVhcnRiZWF0IGhhcyB0byBiZSBzdGFydGVkIHRvIG1vdW50ICIKIAkJCSAgICAgImEgcmVhZC13cml0ZSBjbHVzdGVyZWQgZGV2aWNlLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU2Miw2ICs1NzIsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIElmIHdlJ3JlIHVzaW5nIGEgdXNlcnNwYWNlIHN0YWNrLCBtb3VudCBzaG91bGQgaGF2ZSBwYXNzZWQKKyAqIGEgbmFtZSB0aGF0IG1hdGNoZXMgdGhlIGRpc2suICBJZiBub3QsIG1vdW50IHNob3VsZCBub3QKKyAqIGhhdmUgcGFzc2VkIGEgc3RhY2suCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfdmVyaWZ5X3VzZXJzcGFjZV9zdGFjayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJc3RydWN0IG1vdW50X29wdGlvbnMgKm1vcHQpCit7CisJaWYgKCFvY2ZzMl91c2Vyc3BhY2Vfc3RhY2sob3NiKSAmJiBtb3B0LT5jbHVzdGVyX3N0YWNrWzBdKSB7CisJCW1sb2coTUxfRVJST1IsCisJCSAgICAgImNsdXN0ZXIgc3RhY2sgcGFzc2VkIHRvIG1vdW50LCBidXQgdGhpcyBmaWxlc3lzdGVtICIKKwkJICAgICAiZG9lcyBub3Qgc3VwcG9ydCBpdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChvY2ZzMl91c2Vyc3BhY2Vfc3RhY2sob3NiKSAmJgorCSAgICBzdHJuY21wKG9zYi0+b3NiX2NsdXN0ZXJfc3RhY2ssIG1vcHQtPmNsdXN0ZXJfc3RhY2ssCisJCSAgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pKSB7CisJCW1sb2coTUxfRVJST1IsCisJCSAgICAgImNsdXN0ZXIgc3RhY2sgcGFzc2VkIHRvIG1vdW50IChcIiVzXCIpIGRvZXMgbm90ICIKKwkJICAgICAibWF0Y2ggdGhlIGZpbGVzeXN0ZW0gKFwiJXNcIilcbiIsCisJCSAgICAgbW9wdC0+Y2x1c3Rlcl9zdGFjaywKKwkJICAgICBvc2ItPm9zYl9jbHVzdGVyX3N0YWNrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBkZW50cnkgKnJvb3Q7CkBAIC01NzksMTUgKzYxOCw2IEBACiAJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKIAl9CiAKLQkvKiBmb3Igbm93IHdlIG9ubHkgaGF2ZSBvbmUgY2x1c3Rlci9ub2RlLCBtYWtlIHN1cmUgd2Ugc2VlIGl0Ci0JICogaW4gdGhlIGhlYXJ0YmVhdCB1bml2ZXJzZSAqLwotCWlmIChwYXJzZWRfb3B0aW9ucy5tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9IQl9MT0NBTCkgewotCQlpZiAoIW8yaGJfY2hlY2tfbG9jYWxfbm9kZV9oZWFydGJlYXRpbmcoKSkgewotCQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKLQkJfQotCX0KLQogCS8qIHByb2JlIGZvciBzdXBlcmJsb2NrICovCiAJc3RhdHVzID0gb2NmczJfc2JfcHJvYmUoc2IsICZiaCwgJnNlY3Rvcl9zaXplKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtNjA5LDYgKzYzOSwxMCBAQAogCW9zYi0+b3NiX2NvbW1pdF9pbnRlcnZhbCA9IHBhcnNlZF9vcHRpb25zLmNvbW1pdF9pbnRlcnZhbDsKIAlvc2ItPmxvY2FsX2FsbG9jX3NpemUgPSBwYXJzZWRfb3B0aW9ucy5sb2NhbGFsbG9jX29wdDsKIAorCXN0YXR1cyA9IG9jZnMyX3ZlcmlmeV91c2Vyc3BhY2Vfc3RhY2sob3NiLCAmcGFyc2VkX29wdGlvbnMpOworCWlmIChzdGF0dXMpCisJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKKwogCXNiLT5zX21hZ2ljID0gT0NGUzJfU1VQRVJfTUFHSUM7CiAKIAkvKiBIYXJkIHJlYWRvbmx5IG1vZGUgb25seSBpZjogYmRldl9yZWFkX29ubHksIE1TX1JET05MWSwKQEAgLTY5NCw3ICs3MjgsNyBAQAogCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQogCQlzbnByaW50Zihub2Rlc3RyLCBzaXplb2Yobm9kZXN0ciksICJsb2NhbCIpOwogCWVsc2UKLQkJc25wcmludGYobm9kZXN0ciwgc2l6ZW9mKG5vZGVzdHIpLCAiJWQiLCBvc2ItPm5vZGVfbnVtKTsKKwkJc25wcmludGYobm9kZXN0ciwgc2l6ZW9mKG5vZGVzdHIpLCAiJXUiLCBvc2ItPm5vZGVfbnVtKTsKIAogCXByaW50ayhLRVJOX0lORk8gIm9jZnMyOiBNb3VudGluZyBkZXZpY2UgKCVzKSBvbiAobm9kZSAlcywgc2xvdCAlZCkgIgogCSAgICAgICAid2l0aCAlcyBkYXRhIG1vZGUuXG4iLApAQCAtNzYzLDYgKzc5Nyw3IEBACiAJbW9wdC0+YXRpbWVfcXVhbnR1bSA9IE9DRlMyX0RFRkFVTFRfQVRJTUVfUVVBTlRVTTsKIAltb3B0LT5zbG90ID0gT0NGUzJfSU5WQUxJRF9TTE9UOwogCW1vcHQtPmxvY2FsYWxsb2Nfb3B0ID0gT0NGUzJfREVGQVVMVF9MT0NBTF9BTExPQ19TSVpFOworCW1vcHQtPmNsdXN0ZXJfc3RhY2tbMF0gPSAnXDAnOwogCiAJaWYgKCFvcHRpb25zKSB7CiAJCXN0YXR1cyA9IDE7CkBAIC04NjQsNiArODk5LDI1IEBACiAJCQlpZiAoIWlzX3JlbW91bnQpCiAJCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX0xPQ0FMRkxPQ0tTOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N0YWNrOgorCQkJLyogQ2hlY2sgYm90aCB0aGF0IHRoZSBvcHRpb24gd2Ugd2VyZSBwYXNzZWQKKwkJCSAqIGlzIG9mIHRoZSByaWdodCBsZW5ndGggYW5kIHRoYXQgaXQgaXMgYSBwcm9wZXIKKwkJCSAqIHN0cmluZyBvZiB0aGUgcmlnaHQgbGVuZ3RoLgorCQkJICovCisJCQlpZiAoKChhcmdzWzBdLnRvIC0gYXJnc1swXS5mcm9tKSAhPQorCQkJICAgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pIHx8CisJCQkgICAgKHN0cm5sZW4oYXJnc1swXS5mcm9tLAorCQkJCSAgICAgT0NGUzJfU1RBQ0tfTEFCRUxfTEVOKSAhPQorCQkJICAgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pKSB7CisJCQkJbWxvZyhNTF9FUlJPUiwKKwkJCQkgICAgICJJbnZhbGlkIGNsdXN0ZXJfc3RhY2sgb3B0aW9uXG4iKTsKKwkJCQlzdGF0dXMgPSAwOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCW1lbWNweShtb3B0LT5jbHVzdGVyX3N0YWNrLCBhcmdzWzBdLmZyb20sCisJCQkgICAgICAgT0NGUzJfU1RBQ0tfTEFCRUxfTEVOKTsKKwkJCW1vcHQtPmNsdXN0ZXJfc3RhY2tbT0NGUzJfU1RBQ0tfTEFCRUxfTEVOXSA9ICdcMCc7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCW1sb2coTUxfRVJST1IsCiAJCQkgICAgICJVbnJlY29nbml6ZWQgbW91bnQgb3B0aW9uIFwiJXNcIiAiCkBAIC05MjIsNiArOTc2LDEwIEBACiAJaWYgKG9wdHMgJiBPQ0ZTMl9NT1VOVF9MT0NBTEZMT0NLUykKIAkJc2VxX3ByaW50ZihzLCAiLGxvY2FsZmxvY2tzLCIpOwogCisJaWYgKG9zYi0+b3NiX2NsdXN0ZXJfc3RhY2tbMF0pCisJCXNlcV9wcmludGYocywgIixjbHVzdGVyX3N0YWNrPSUuKnMiLCBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4sCisJCQkgICBvc2ItPm9zYl9jbHVzdGVyX3N0YWNrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05NTcsNiArMTAxNSw4IEBACiAJCW1sb2coTUxfRVJST1IsICJVbmFibGUgdG8gY3JlYXRlIG9jZnMyIGRlYnVnZnMgcm9vdC5cbiIpOwogCX0KIAorCW9jZnMyX3NldF9sb2NraW5nX3Byb3RvY29sKCk7CisKIGxlYXZlOgogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW9jZnMyX2ZyZWVfbWVtX2NhY2hlcygpOwpAQCAtMTEzMiwzMSArMTE5Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIG9jZnMyIDEuMCBvbmx5IGFsbG93cyBvbmUgY2x1c3RlciBhbmQgbm9kZSBpZGVudGl0eSBwZXIga2VybmVsIGltYWdlLiAqLwotc3RhdGljIGludCBvY2ZzMl9maWxsX2xvY2FsX25vZGVfaW5mbyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKLXsKLQlpbnQgc3RhdHVzOwotCi0JLyogWFhYIGhvbGQgYSByZWYgb24gdGhlIG5vZGUgd2hpbGUgbW91bnRlPyAgZWFzeSBlbm91Z2gsIGlmCi0JICogZGVzaXJhYmxlLiAqLwotCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQotCQlvc2ItPm5vZGVfbnVtID0gMDsKLQllbHNlCi0JCW9zYi0+bm9kZV9udW0gPSBvMm5tX3RoaXNfbm9kZSgpOwotCi0JaWYgKG9zYi0+bm9kZV9udW0gPT0gTzJOTV9NQVhfTk9ERVMpIHsKLQkJbWxvZyhNTF9FUlJPUiwgImNvdWxkIG5vdCBmaW5kIHRoaXMgaG9zdCdzIG5vZGUgbnVtYmVyXG4iKTsKLQkJc3RhdHVzID0gLUVOT0VOVDsKLQkJZ290byBiYWlsOwotCX0KLQotCW1sb2coMCwgIkkgYW0gbm9kZSAlZFxuIiwgb3NiLT5ub2RlX251bSk7Ci0KLQlzdGF0dXMgPSAwOwotYmFpbDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCiBzdGF0aWMgaW50IG9jZnMyX21vdW50X3ZvbHVtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWludCBzdGF0dXMgPSAwOwpAQCAtMTE2OCwxMiArMTIwMyw2IEBACiAJaWYgKG9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSkKIAkJZ290byBsZWF2ZTsKIAotCXN0YXR1cyA9IG9jZnMyX2ZpbGxfbG9jYWxfbm9kZV9pbmZvKG9zYik7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGxlYXZlOwotCX0KLQogCXN0YXR1cyA9IG9jZnMyX2RsbV9pbml0KG9zYik7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTIyNCwxOCArMTI1Myw5IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogd2UgY2FuJ3QgZ3JhYiB0aGUgZ29vZnkgc2VtIGxvY2sgZnJvbSBpbnNpZGUgd2FpdF9ldmVudCwgc28gd2UgdXNlCi0gKiBtZW1vcnkgYmFycmllcnMgdG8gbWFrZSBzdXJlIHRoYXQgd2UnbGwgc2VlIHRoZSBudWxsIHRhc2sgYmVmb3JlCi0gKiBiZWluZyB3b2tlbiB1cCAqLwotc3RhdGljIGludCBvY2ZzMl9yZWNvdmVyeV90aHJlYWRfcnVubmluZyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKLXsKLQltYigpOwotCXJldHVybiBvc2ItPnJlY292ZXJ5X3RocmVhZF90YXNrICE9IE5VTEw7Ci19Ci0KIHN0YXRpYyB2b2lkIG9jZnMyX2Rpc21vdW50X3ZvbHVtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW50X2VycikKIHsKLQlpbnQgdG1wOworCWludCB0bXAsIGhhbmd1cF9uZWVkZWQgPSAwOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gTlVMTDsKIAljaGFyIG5vZGVzdHJbOF07CiAKQEAgLTEyNDksMjUgKzEyNjksMTYgQEAKIAogCW9jZnMyX3RydW5jYXRlX2xvZ19zaHV0ZG93bihvc2IpOwogCi0JLyogZGlzYWJsZSBhbnkgbmV3IHJlY292ZXJ5IHRocmVhZHMgYW5kIHdhaXQgZm9yIGFueSBjdXJyZW50bHkKLQkgKiBydW5uaW5nIG9uZXMgdG8gZXhpdC4gRG8gdGhpcyBiZWZvcmUgc2V0dGluZyB0aGUgdm9sX3N0YXRlLiAqLwotCW11dGV4X2xvY2soJm9zYi0+cmVjb3ZlcnlfbG9jayk7Ci0Jb3NiLT5kaXNhYmxlX3JlY292ZXJ5ID0gMTsKLQltdXRleF91bmxvY2soJm9zYi0+cmVjb3ZlcnlfbG9jayk7Ci0Jd2FpdF9ldmVudChvc2ItPnJlY292ZXJ5X2V2ZW50LCAhb2NmczJfcmVjb3ZlcnlfdGhyZWFkX3J1bm5pbmcob3NiKSk7Ci0KLQkvKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IHRoYXQgbm8gbW9yZSByZWNvdmVyeSB0aHJlYWRzIGNhbiBiZQotCSAqIGxhdW5jaGVkLCBzbyB3YWl0IGZvciBhbnkgcmVjb3ZlcnkgY29tcGxldGlvbiB3b3JrIHRvCi0JICogY29tcGxldGUuICovCi0JZmx1c2hfd29ya3F1ZXVlKG9jZnMyX3dxKTsKKwkvKiBUaGlzIHdpbGwgZGlzYWJsZSByZWNvdmVyeSBhbmQgZmx1c2ggYW55IHJlY292ZXJ5IHdvcmsuICovCisJb2NmczJfcmVjb3ZlcnlfZXhpdChvc2IpOwogCiAJb2NmczJfam91cm5hbF9zaHV0ZG93bihvc2IpOwogCiAJb2NmczJfc3luY19ibG9ja2RldihzYik7CiAKLQkvKiBObyBkbG0gbWVhbnMgd2UndmUgZmFpbGVkIGR1cmluZyBtb3VudCwgc28gc2tpcCBhbGwgdGhlCi0JICogc3RlcHMgd2hpY2ggZGVwZW5kZWQgb24gdGhhdCB0byBjb21wbGV0ZS4gKi8KLQlpZiAob3NiLT5kbG0pIHsKKwkvKiBObyBjbHVzdGVyIGNvbm5lY3Rpb24gbWVhbnMgd2UndmUgZmFpbGVkIGR1cmluZyBtb3VudCwgc28gc2tpcAorCSAqIGFsbCB0aGUgc3RlcHMgd2hpY2ggZGVwZW5kZWQgb24gdGhhdCB0byBjb21wbGV0ZS4gKi8KKwlpZiAob3NiLT5jY29ubikgewogCQl0bXAgPSBvY2ZzMl9zdXBlcl9sb2NrKG9zYiwgMSk7CiAJCWlmICh0bXAgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHRtcCk7CkBAIC0xMjc4LDI1ICsxMjg5LDM0IEBACiAJaWYgKG9zYi0+c2xvdF9udW0gIT0gT0NGUzJfSU5WQUxJRF9TTE9UKQogCQlvY2ZzMl9wdXRfc2xvdChvc2IpOwogCi0JaWYgKG9zYi0+ZGxtKQorCWlmIChvc2ItPmNjb25uKQogCQlvY2ZzMl9zdXBlcl91bmxvY2sob3NiLCAxKTsKIAogCW9jZnMyX3JlbGVhc2Vfc3lzdGVtX2lub2Rlcyhvc2IpOwogCi0JaWYgKG9zYi0+ZGxtKQotCQlvY2ZzMl9kbG1fc2h1dGRvd24ob3NiKTsKKwkvKgorCSAqIElmIHdlJ3JlIGRpc21vdW50aW5nIGR1ZSB0byBtb3VudCBlcnJvciwgbW91bnQub2NmczIgd2lsbCBjbGVhbgorCSAqIHVwIGhlYXJ0YmVhdC4gIElmIHdlJ3JlIGEgbG9jYWwgbW91bnQsIHRoZXJlIGlzIG5vIGhlYXJ0YmVhdC4KKwkgKiBJZiB3ZSBmYWlsZWQgYmVmb3JlIHdlIGdvdCBhIHV1aWRfc3RyIHlldCwgd2UgY2FuJ3Qgc3RvcAorCSAqIGhlYXJ0YmVhdC4gIE90aGVyd2lzZSwgZG8gaXQuCisJICovCisJaWYgKCFtbnRfZXJyICYmICFvY2ZzMl9tb3VudF9sb2NhbChvc2IpICYmIG9zYi0+dXVpZF9zdHIpCisJCWhhbmd1cF9uZWVkZWQgPSAxOworCisJaWYgKG9zYi0+Y2Nvbm4pCisJCW9jZnMyX2RsbV9zaHV0ZG93bihvc2IsIGhhbmd1cF9uZWVkZWQpOwogCiAJZGVidWdmc19yZW1vdmUob3NiLT5vc2JfZGVidWdfcm9vdCk7CiAKLQlpZiAoIW1udF9lcnIpCi0JCW9jZnMyX3N0b3BfaGVhcnRiZWF0KG9zYik7CisJaWYgKGhhbmd1cF9uZWVkZWQpCisJCW9jZnMyX2NsdXN0ZXJfaGFuZ3VwKG9zYi0+dXVpZF9zdHIsIHN0cmxlbihvc2ItPnV1aWRfc3RyKSk7CiAKIAlhdG9taWNfc2V0KCZvc2ItPnZvbF9zdGF0ZSwgVk9MVU1FX0RJU01PVU5URUQpOwogCiAJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCiAJCXNucHJpbnRmKG5vZGVzdHIsIHNpemVvZihub2Rlc3RyKSwgImxvY2FsIik7CiAJZWxzZQotCQlzbnByaW50Zihub2Rlc3RyLCBzaXplb2Yobm9kZXN0ciksICIlZCIsIG9zYi0+bm9kZV9udW0pOworCQlzbnByaW50Zihub2Rlc3RyLCBzaXplb2Yobm9kZXN0ciksICIldSIsIG9zYi0+bm9kZV9udW0pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAib2NmczI6IFVubW91bnRpbmcgZGV2aWNlICglcykgb24gKG5vZGUgJXMpXG4iLAogCSAgICAgICBvc2ItPmRldl9zdHIsIG5vZGVzdHIpOwpAQCAtMTM1NSw3ICsxMzc1LDYgQEAKIAlzYi0+c19mc19pbmZvID0gb3NiOwogCXNiLT5zX29wID0gJm9jZnMyX3NvcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJm9jZnMyX2V4cG9ydF9vcHM7Ci0Jb3NiLT5vc2JfbG9ja2luZ19wcm90byA9IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2w7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKIAlzYi0+c19mbGFncyB8PSBNU19OT0FUSU1FOwogCS8qIHRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgT19MQVJHRUZJTEUgKi8KQEAgLTEzNjgsNyArMTM4Nyw2IEBACiAJb3NiLT5zX3NlY3RzaXplX2JpdHMgPSBibGtzaXplX2JpdHMoc2VjdG9yX3NpemUpOwogCUJVR19PTighb3NiLT5zX3NlY3RzaXplX2JpdHMpOwogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmb3NiLT5yZWNvdmVyeV9ldmVudCk7CiAJc3Bpbl9sb2NrX2luaXQoJm9zYi0+ZGNfdGFza19sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvc2ItPmRjX2V2ZW50KTsKIAlvc2ItPmRjX3dvcmtfc2VxdWVuY2UgPSAwOwpAQCAtMTM3Niw2ICsxMzk0LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmb3NiLT5ibG9ja2VkX2xvY2tfbGlzdCk7CiAJb3NiLT5ibG9ja2VkX2xvY2tfY291bnQgPSAwOwogCXNwaW5fbG9ja19pbml0KCZvc2ItPm9zYl9sb2NrKTsKKwlvY2ZzMl9pbml0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKIAogCWF0b21pY19zZXQoJm9zYi0+YWxsb2Nfc3RhdHMubW92ZXMsIDApOwogCWF0b21pY19zZXQoJm9zYi0+YWxsb2Nfc3RhdHMubG9jYWxfZGF0YSwgMCk7CkBAIC0xMzg4LDI0ICsxNDA3LDIzIEBACiAJc25wcmludGYob3NiLT5kZXZfc3RyLCBzaXplb2Yob3NiLT5kZXZfc3RyKSwgIiV1LCV1IiwKIAkJIE1BSk9SKG9zYi0+c2ItPnNfZGV2KSwgTUlOT1Iob3NiLT5zYi0+c19kZXYpKTsKIAotCW11dGV4X2luaXQoJm9zYi0+cmVjb3ZlcnlfbG9jayk7Ci0KLQlvc2ItPmRpc2FibGVfcmVjb3ZlcnkgPSAwOwotCW9zYi0+cmVjb3ZlcnlfdGhyZWFkX3Rhc2sgPSBOVUxMOworCXN0YXR1cyA9IG9jZnMyX3JlY292ZXJ5X2luaXQob3NiKTsKKwlpZiAoc3RhdHVzKSB7CisJCW1sb2coTUxfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSByZWNvdmVyeSBzdGF0ZVxuIik7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm9zYi0+Y2hlY2twb2ludF9ldmVudCk7CiAJYXRvbWljX3NldCgmb3NiLT5uZWVkc19jaGVja3BvaW50LCAwKTsKIAogCW9zYi0+c19hdGltZV9xdWFudHVtID0gT0NGUzJfREVGQVVMVF9BVElNRV9RVUFOVFVNOwogCi0Jb3NiLT5ub2RlX251bSA9IE8yTk1fSU5WQUxJRF9OT0RFX05VTTsKIAlvc2ItPnNsb3RfbnVtID0gT0NGUzJfSU5WQUxJRF9TTE9UOwogCiAJb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9IE9DRlMyX0xBX1VOVVNFRDsKIAlvc2ItPmxvY2FsX2FsbG9jX2JoID0gTlVMTDsKIAotCW9jZnMyX3NldHVwX2hiX2NhbGxiYWNrcyhvc2IpOwotCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmb3NiLT5vc2JfbW91bnRfZXZlbnQpOwogCiAJb3NiLT52b2xfbGFiZWwgPSBrbWFsbG9jKE9DRlMyX01BWF9WT0xfTEFCRUxfTEVOLCBHRlBfS0VSTkVMKTsKQEAgLTE0NTUsNiArMTQ3MywyNSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJaWYgKG9jZnMyX3VzZXJzcGFjZV9zdGFjayhvc2IpKSB7CisJCW1lbWNweShvc2ItPm9zYl9jbHVzdGVyX3N0YWNrLAorCQkgICAgICAgT0NGUzJfUkFXX1NCKGRpKS0+c19jbHVzdGVyX2luZm8uY2lfc3RhY2ssCisJCSAgICAgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pOworCQlvc2ItPm9zYl9jbHVzdGVyX3N0YWNrW09DRlMyX1NUQUNLX0xBQkVMX0xFTl0gPSAnXDAnOworCQlpZiAoc3RybGVuKG9zYi0+b3NiX2NsdXN0ZXJfc3RhY2spICE9IE9DRlMyX1NUQUNLX0xBQkVMX0xFTikgeworCQkJbWxvZyhNTF9FUlJPUiwKKwkJCSAgICAgImNvdWxkbid0IG1vdW50IGJlY2F1c2Ugb2YgYW4gaW52YWxpZCAiCisJCQkgICAgICJjbHVzdGVyIHN0YWNrIGxhYmVsICglcykgXG4iLAorCQkJICAgICBvc2ItPm9zYl9jbHVzdGVyX3N0YWNrKTsKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUaGUgZW1wdHkgc3RyaW5nIGlzIGlkZW50aWNhbCB3aXRoIGNsYXNzaWMgdG9vbHMgdGhhdAorCQkgKiBkb24ndCBrbm93IGFib3V0IHNfY2x1c3Rlcl9pbmZvLiAqLworCQlvc2ItPm9zYl9jbHVzdGVyX3N0YWNrWzBdID0gJ1wwJzsKKwl9CisKIAlnZXRfcmFuZG9tX2J5dGVzKCZvc2ItPnNfbmV4dF9nZW5lcmF0aW9uLCBzaXplb2YodTMyKSk7CiAKIAkvKiBGSVhNRQpAQCAtMTcyNCw4ICsxNzYxLDcgQEAKIAogCS8qIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaGFzIHRoZSBtYWluIG9zYiByZXNvdXJjZSAqLwogCi0JaWYgKG9zYi0+c2xvdF9pbmZvKQotCQlvY2ZzMl9mcmVlX3Nsb3RfaW5mbyhvc2ItPnNsb3RfaW5mbyk7CisJb2NmczJfZnJlZV9zbG90X2luZm8ob3NiKTsKIAogCWtmcmVlKG9zYi0+b3NiX29ycGhhbl93aXBlcyk7CiAJLyogRklYTUUKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA1NDE5ODUzLi5iNzBlNzY2IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0yNDQsMjEgKzI0NCwyMSBAQAogCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJZ290byBkcHV0X2FuZF9vdXQ7CiAKLQllcnJvciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX1dSSVRFKTsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZHB1dF9hbmRfb3V0OwogCi0JZXJyb3IgPSAtRVJPRlM7Ci0JaWYgKElTX1JET05MWShpbm9kZSkpCi0JCWdvdG8gZHB1dF9hbmRfb3V0OworCWVycm9yID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfV1JJVEUpOworCWlmIChlcnJvcikKKwkJZ290byBtbnRfZHJvcF93cml0ZV9hbmRfb3V0OwogCiAJZXJyb3IgPSAtRVBFUk07CiAJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKLQkJZ290byBkcHV0X2FuZF9vdXQ7CisJCWdvdG8gbW50X2Ryb3Bfd3JpdGVfYW5kX291dDsKIAogCWVycm9yID0gZ2V0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGRwdXRfYW5kX291dDsKKwkJZ290byBtbnRfZHJvcF93cml0ZV9hbmRfb3V0OwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gbGVhc2VzLiAgZ2V0X3dyaXRlX2FjY2VzcygpIHByb3RlY3RzCkBAIC0yNzYsNiArMjc2LDggQEAKIAogcHV0X3dyaXRlX2FuZF9vdXQ6CiAJcHV0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CittbnRfZHJvcF93cml0ZV9hbmRfb3V0OgorCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIGRwdXRfYW5kX291dDoKIAlwYXRoX3B1dCgmbmQucGF0aCk7CiBvdXQ6CkBAIC0zMzUsNyArMzM3LDcgQEAKIHsKIAlsb25nIHJldCA9IGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMSk7CiAJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCi0JcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMiwgcmV0LCBmZCwgbGVuZ3RoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNTAsNyArMzUyLDcgQEAKIHsKIAlsb25nIHJldCA9IGRvX3N5c19mdHJ1bmNhdGUoZmQsIGxlbmd0aCwgMCk7CiAJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCi0JcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMiwgcmV0LCBmZCwgbGVuZ3RoKTsKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCkBAIC00NTcsOCArNDU5LDE3IEBACiAJaWYocmVzIHx8ICEobW9kZSAmIFNfSVdPVEgpIHx8CiAJICAgc3BlY2lhbF9maWxlKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQlnb3RvIG91dF9wYXRoX3JlbGVhc2U7Ci0KLQlpZihJU19SRE9OTFkobmQucGF0aC5kZW50cnktPmRfaW5vZGUpKQorCS8qCisJICogVGhpcyBpcyBhIHJhcmUgY2FzZSB3aGVyZSB1c2luZyBfX21udF9pc19yZWFkb25seSgpCisJICogaXMgT0sgd2l0aG91dCBhIG1udF93YW50L2Ryb3Bfd3JpdGUoKSBwYWlyLiAgU2luY2UKKwkgKiBubyBhY3R1YWwgd3JpdGUgdG8gdGhlIGZzIGlzIHBlcmZvcm1lZCBoZXJlLCB3ZSBkbworCSAqIG5vdCBuZWVkIHRvIHRlbGVncmFwaCB0byB0aGF0IHRvIGFueW9uZS4KKwkgKgorCSAqIEJ5IGRvaW5nIHRoaXMsIHdlIGFjY2VwdCB0aGF0IHRoaXMgYWNjZXNzIGlzCisJICogaW5oZXJlbnRseSByYWN5IGFuZCBrbm93IHRoYXQgdGhlIGZzIG1heSBjaGFuZ2UKKwkgKiBzdGF0ZSBiZWZvcmUgd2UgZXZlbiBzZWUgdGhpcyByZXN1bHQuCisJICovCisJaWYgKF9fbW50X2lzX3JlYWRvbmx5KG5kLnBhdGgubW50KSkKIAkJcmVzID0gLUVST0ZTOwogCiBvdXRfcGF0aF9yZWxlYXNlOgpAQCAtNTY3LDEyICs1NzgsMTIgQEAKIAogCWF1ZGl0X2lub2RlKE5VTEwsIGRlbnRyeSk7CiAKLQllcnIgPSAtRVJPRlM7Ci0JaWYgKElTX1JET05MWShpbm9kZSkpCisJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CisJaWYgKGVycikKIAkJZ290byBvdXRfcHV0ZjsKIAllcnIgPSAtRVBFUk07CiAJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKLQkJZ290byBvdXRfcHV0ZjsKKwkJZ290byBvdXRfZHJvcF93cml0ZTsKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKG1vZGUgPT0gKG1vZGVfdCkgLTEpCiAJCW1vZGUgPSBpbm9kZS0+aV9tb2RlOwpAQCAtNTgxLDYgKzU5Miw4IEBACiAJZXJyID0gbm90aWZ5X2NoYW5nZShkZW50cnksICZuZXdhdHRycyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKK291dF9kcm9wX3dyaXRlOgorCW1udF9kcm9wX3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOwogb3V0X3B1dGY6CiAJZnB1dChmaWxlKTsKIG91dDoKQEAgLTYwMCwxMyArNjEzLDEzIEBACiAJCWdvdG8gb3V0OwogCWlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7CiAKLQllcnJvciA9IC1FUk9GUzsKLQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gZHB1dF9hbmRfb3V0OwogCiAJZXJyb3IgPSAtRVBFUk07CiAJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKLQkJZ290byBkcHV0X2FuZF9vdXQ7CisJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKG1vZGUgPT0gKG1vZGVfdCkgLTEpCkBAIC02MTYsNiArNjI5LDggQEAKIAllcnJvciA9IG5vdGlmeV9jaGFuZ2UobmQucGF0aC5kZW50cnksICZuZXdhdHRycyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKK291dF9kcm9wX3dyaXRlOgorCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIGRwdXRfYW5kX291dDoKIAlwYXRoX3B1dCgmbmQucGF0aCk7CiBvdXQ6CkBAIC02MzgsOSArNjUzLDYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJjaG93bl9jb21tb246IE5VTEwgaW5vZGVcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JZXJyb3IgPSAtRVJPRlM7Ci0JaWYgKElTX1JET05MWShpbm9kZSkpCi0JCWdvdG8gb3V0OwogCWVycm9yID0gLUVQRVJNOwogCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCiAJCWdvdG8gb3V0OwpAQCAtNjcxLDcgKzY4MywxMiBAQAogCWVycm9yID0gdXNlcl9wYXRoX3dhbGsoZmlsZW5hbWUsICZuZCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JlbGVhc2U7CiAJZXJyb3IgPSBjaG93bl9jb21tb24obmQucGF0aC5kZW50cnksIHVzZXIsIGdyb3VwKTsKKwltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CitvdXRfcmVsZWFzZToKIAlwYXRoX3B1dCgmbmQucGF0aCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwpAQCAtNjkxLDcgKzcwOCwxMiBAQAogCWVycm9yID0gX191c2VyX3dhbGtfZmQoZGZkLCBmaWxlbmFtZSwgZm9sbG93LCAmbmQpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yZWxlYXNlOwogCWVycm9yID0gY2hvd25fY29tbW9uKG5kLnBhdGguZGVudHJ5LCB1c2VyLCBncm91cCk7CisJbW50X2Ryb3Bfd3JpdGUobmQucGF0aC5tbnQpOworb3V0X3JlbGVhc2U6CiAJcGF0aF9wdXQoJm5kLnBhdGgpOwogb3V0OgogCXJldHVybiBlcnJvcjsKQEAgLTcwNSw3ICs3MjcsMTIgQEAKIAllcnJvciA9IHVzZXJfcGF0aF93YWxrX2xpbmsoZmlsZW5hbWUsICZuZCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JlbGVhc2U7CiAJZXJyb3IgPSBjaG93bl9jb21tb24obmQucGF0aC5kZW50cnksIHVzZXIsIGdyb3VwKTsKKwltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CitvdXRfcmVsZWFzZToKIAlwYXRoX3B1dCgmbmQucGF0aCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwpAQCAtNzIyLDE0ICs3NDksNDggQEAKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwogCisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2ZwdXQ7CiAJZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnkpOwogCWVycm9yID0gY2hvd25fY29tbW9uKGRlbnRyeSwgdXNlciwgZ3JvdXApOworCW1udF9kcm9wX3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOworb3V0X2ZwdXQ6CiAJZnB1dChmaWxlKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qCisgKiBZb3UgaGF2ZSB0byBiZSB2ZXJ5IGNhcmVmdWwgdGhhdCB0aGVzZSB3cml0ZQorICogY291bnRzIGdldCBjbGVhbmVkIHVwIGluIGVycm9yIGNhc2VzIGFuZAorICogdXBvbiBfX2ZwdXQoKS4gIFRoaXMgc2hvdWxkIHByb2JhYmx5IG5ldmVyCisgKiBiZSBjYWxsZWQgb3V0c2lkZSBvZiBfX2RlbnRyeV9vcGVuKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2V0X2ZpbGVfd3JpdGVfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJaW50IGVycm9yOworCWVycm9yID0gZ2V0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJLyoKKwkgKiBEbyBub3QgdGFrZSBtb3VudCB3cml0ZXIgY291bnRzIG9uCisJICogc3BlY2lhbCBmaWxlcyBzaW5jZSBubyB3cml0ZXMgdG8KKwkgKiB0aGUgbW91bnQgaXRzZWxmIHdpbGwgb2NjdXIuCisJICovCisJaWYgKCFzcGVjaWFsX2ZpbGUoaW5vZGUtPmlfbW9kZSkpIHsKKwkJLyoKKwkJICogQmFsYW5jZWQgaW4gX19mcHV0KCkKKwkJICovCisJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobW50KTsKKwkJaWYgKGVycm9yKQorCQkJcHV0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CisJfQorCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIHN0cnVjdCBmaWxlICpfX2RlbnRyeV9vcGVuKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICptbnQsCiAJCQkJCWludCBmbGFncywgc3RydWN0IGZpbGUgKmYsCiAJCQkJCWludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSkKQEAgLTc0Miw5ICs4MDMsMTEgQEAKIAkJCQlGTU9ERV9QUkVBRCB8IEZNT0RFX1BXUklURTsKIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlpZiAoZi0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJZXJyb3IgPSBnZXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKKwkJZXJyb3IgPSBfX2dldF9maWxlX3dyaXRlX2FjY2Vzcyhpbm9kZSwgbW50KTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBjbGVhbnVwX2ZpbGU7CisJCWlmICghc3BlY2lhbF9maWxlKGlub2RlLT5pX21vZGUpKQorCQkJZmlsZV90YWtlX3dyaXRlKGYpOwogCX0KIAogCWYtPmZfbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CkBAIC03ODQsOCArODQ3LDE5IEBACiAKIGNsZWFudXBfYWxsOgogCWZvcHNfcHV0KGYtPmZfb3ApOwotCWlmIChmLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwlpZiAoZi0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJcHV0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CisJCWlmICghc3BlY2lhbF9maWxlKGlub2RlLT5pX21vZGUpKSB7CisJCQkvKgorCQkJICogV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBhIHJlYWwKKwkJCSAqIG1udF93YW50L2Ryb3Bfd3JpdGUoKSBwYWlyCisJCQkgKiBiZWNhdXNlIGl0IGFsbCBoYXBwZW5lbmQgcmlnaHQKKwkJCSAqIGhlcmUsIHNvIGp1c3QgcmVzZXQgdGhlIHN0YXRlLgorCQkJICovCisJCQlmaWxlX3Jlc2V0X3dyaXRlKGYpOworCQkJbW50X2Ryb3Bfd3JpdGUobW50KTsKKwkJfQorCX0KIAlmaWxlX2tpbGwoZik7CiAJZi0+Zl9wYXRoLmRlbnRyeSA9IE5VTEw7CiAJZi0+Zl9wYXRoLm1udCA9IE5VTEw7CkBAIC03OTYsNDMgKzg3MCw2IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi0vKgotICogTm90ZSB0aGF0IHdoaWxlIHRoZSBmbGFnIHZhbHVlIChsb3cgdHdvIGJpdHMpIGZvciBzeXNfb3BlbiBtZWFuczoKLSAqCTAwIC0gcmVhZC1vbmx5Ci0gKgkwMSAtIHdyaXRlLW9ubHkKLSAqCTEwIC0gcmVhZC13cml0ZQotICoJMTEgLSBzcGVjaWFsCi0gKiBpdCBpcyBjaGFuZ2VkIGludG8KLSAqCTAwIC0gbm8gcGVybWlzc2lvbnMgbmVlZGVkCi0gKgkwMSAtIHJlYWQtcGVybWlzc2lvbgotICoJMTAgLSB3cml0ZS1wZXJtaXNzaW9uCi0gKgkxMSAtIHJlYWQtd3JpdGUKLSAqIGZvciB0aGUgaW50ZXJuYWwgcm91dGluZXMgKGllIG9wZW5fbmFtZWkoKS9mb2xsb3dfbGluaygpIGV0YykuIDAwIGlzCi0gKiB1c2VkIGJ5IHN5bWxpbmtzLgotICovCi1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX2ZpbHBfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLAotCQkJCSBpbnQgbW9kZSkKLXsKLQlpbnQgbmFtZWlfZmxhZ3MsIGVycm9yOwotCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0KLQluYW1laV9mbGFncyA9IGZsYWdzOwotCWlmICgobmFtZWlfZmxhZ3MrMSkgJiBPX0FDQ01PREUpCi0JCW5hbWVpX2ZsYWdzKys7Ci0KLQllcnJvciA9IG9wZW5fbmFtZWkoZGZkLCBmaWxlbmFtZSwgbmFtZWlfZmxhZ3MsIG1vZGUsICZuZCk7Ci0JaWYgKCFlcnJvcikKLQkJcmV0dXJuIG5hbWVpZGF0YV90b19maWxwKCZuZCwgZmxhZ3MpOwotCi0JcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwotfQotCi1zdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKQotewotCXJldHVybiBkb19maWxwX29wZW4oQVRfRkRDV0QsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGZpbHBfb3Blbik7Ci0KIC8qKgogICogbG9va3VwX2luc3RhbnRpYXRlX2ZpbHAgLSBpbnN0YW50aWF0ZXMgdGhlIG9wZW4gaW50ZW50IGZpbHAKICAqIEBuZDogcG9pbnRlciB0byBuYW1laWRhdGEKQEAgLTkwMyw2ICs5NDAsMTggQEAKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGZpbGUgKmY7CiAKKwkvKgorCSAqIFdlIG11c3QgYWx3YXlzIHBhc3MgaW4gYSB2YWxpZCBtb3VudCBwb2ludGVyLiAgIEhpc3RvcmljYWxseQorCSAqIGNhbGxlcnMgZ290IGF3YXkgd2l0aCBub3QgcGFzc2luZyBpdCwgYnV0IHdlIG11c3QgZW5mb3JjZSB0aGlzIGF0CisJICogdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHBvaW50IG5vdyB0byBhdm9pZCBzdHJhbmdlIHByb2JsZW1zIGRlZXAgaW4gdGhlCisJICogZmlsZXN5c3RlbSBzdGFjay4KKwkgKi8KKwlpZiAoIW1udCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBjYWxsZWQgd2l0aCBOVUxMIHZmc21vdW50XG4iLCBfX2Z1bmNfXyk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCiAJZXJyb3IgPSAtRU5GSUxFOwogCWYgPSBnZXRfZW1wdHlfZmlscCgpOwogCWlmIChmID09IE5VTEwpIHsKQEAgLTEwNTUsNyArMTEwNCw3IEBACiAKIAlyZXQgPSBkb19zeXNfb3BlbihBVF9GRENXRCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKIAkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KLQlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCWFzbWxpbmthZ2VfcHJvdGVjdCgzLCByZXQsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA2OSw3ICsxMTE4LDcgQEAKIAogCXJldCA9IGRvX3N5c19vcGVuKGRmZCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKIAkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KLQlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCWFzbWxpbmthZ2VfcHJvdGVjdCg0LCByZXQsIGRmZCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggMDNmODA4Yy4uNjE0OWU0YiAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNDczLDYgKzQ3MywxMCBAQAogCQlyZXR1cm4gMDsKIAlpZiAoSVNfRVJSKHN0YXRlKSkJLyogSS9PIGVycm9yIHJlYWRpbmcgdGhlIHBhcnRpdGlvbiB0YWJsZSAqLwogCQlyZXR1cm4gLUVJTzsKKworCS8qIHRlbGwgdXNlcnNwYWNlIHRoYXQgdGhlIG1lZGlhIC8gcGFydGl0aW9uIHRhYmxlIG1heSBoYXZlIGNoYW5nZWQgKi8KKwlrb2JqZWN0X3VldmVudCgmZGlzay0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFKTsKKwogCWZvciAocCA9IDE7IHAgPCBzdGF0ZS0+bGltaXQ7IHArKykgewogCQlzZWN0b3JfdCBzaXplID0gc3RhdGUtPnBhcnRzW3BdLnNpemU7CiAJCXNlY3Rvcl90IGZyb20gPSBzdGF0ZS0+cGFydHNbcF0uZnJvbTsKZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAzYzE4NWI2Li44YmUzODFiIDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC05NTcsMTMgKzk1NywxMCBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgcXN0ciBuYW1lID0geyAubmFtZSA9ICIiIH07CiAKLQlmID0gZ2V0X2VtcHR5X2ZpbHAoKTsKLQlpZiAoIWYpCi0JCXJldHVybiBFUlJfUFRSKC1FTkZJTEUpOwogCWVyciA9IC1FTkZJTEU7CiAJaW5vZGUgPSBnZXRfcGlwZV9pbm9kZSgpOwogCWlmICghaW5vZGUpCi0JCWdvdG8gZXJyX2ZpbGU7CisJCWdvdG8gZXJyOwogCiAJZXJyID0gLUVOT01FTTsKIAlkZW50cnkgPSBkX2FsbG9jKHBpcGVfbW50LT5tbnRfc2ItPnNfcm9vdCwgJm5hbWUpOwpAQCAtOTc4LDIyICs5NzUsMjQgQEAKIAkgKi8KIAlkZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9VTkhBU0hFRDsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCWYtPmZfcGF0aC5tbnQgPSBtbnRnZXQocGlwZV9tbnQpOwotCWYtPmZfcGF0aC5kZW50cnkgPSBkZW50cnk7CisKKwllcnIgPSAtRU5GSUxFOworCWYgPSBhbGxvY19maWxlKHBpcGVfbW50LCBkZW50cnksIEZNT0RFX1dSSVRFLCAmd3JpdGVfcGlwZV9mb3BzKTsKKwlpZiAoIWYpCisJCWdvdG8gZXJyX2RlbnRyeTsKIAlmLT5mX21hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCiAJZi0+Zl9mbGFncyA9IE9fV1JPTkxZOwotCWYtPmZfb3AgPSAmd3JpdGVfcGlwZV9mb3BzOwotCWYtPmZfbW9kZSA9IEZNT0RFX1dSSVRFOwogCWYtPmZfdmVyc2lvbiA9IDA7CiAKIAlyZXR1cm4gZjsKIAorIGVycl9kZW50cnk6CisJZHB1dChkZW50cnkpOwogIGVycl9pbm9kZToKIAlmcmVlX3BpcGVfaW5mbyhpbm9kZSk7CiAJaXB1dChpbm9kZSk7Ci0gZXJyX2ZpbGU6Ci0JcHV0X2ZpbHAoZik7CisgZXJyOgogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3Bub2RlLmMgYi9mcy9wbm9kZS5jCmluZGV4IDA1YmE2OTIuLjFkOGY1NDQgMTAwNjQ0Ci0tLSBhL2ZzL3Bub2RlLmMKKysrIGIvZnMvcG5vZGUuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRvX3JlZmNvdW50X2NoZWNrKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgY291bnQpCiB7Ci0JaW50IG15Y291bnQgPSBhdG9taWNfcmVhZCgmbW50LT5tbnRfY291bnQpOworCWludCBteWNvdW50ID0gYXRvbWljX3JlYWQoJm1udC0+bW50X2NvdW50KSAtIG1udC0+bW50X2dob3N0czsKIAlyZXR1cm4gKG15Y291bnQgPiBjb3VudCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggODhmOGVkZi4uODFkN2QxNCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTMxNCw5ICszMTQsMTIgQEAKIHN0YXRpYyBpbnQgbHN0YXRzX3Nob3dfcHJvYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gbS0+cHJpdmF0ZTsKLQlzZXFfcHV0cyhtLCAiTGF0ZW5jeSBUb3AgdmVyc2lvbiA6IHYwLjFcbiIpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtLT5wcml2YXRlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwogCisJaWYgKCF0YXNrKQorCQlyZXR1cm4gLUVTUkNIOworCXNlcV9wdXRzKG0sICJMYXRlbmN5IFRvcCB2ZXJzaW9uIDogdjAuMVxuIik7CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJaWYgKHRhc2stPmxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVswXSkgewogCQkJaW50IHE7CkBAIC0zNDEsMzIgKzM0NCwyNCBAQAogCQl9CiAKIAl9CisJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGxzdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHNlcV9maWxlICptOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwotCi0JcmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgbHN0YXRzX3Nob3dfcHJvYywgTlVMTCk7Ci0JaWYgKCFyZXQpIHsKLQkJbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJbS0+cHJpdmF0ZSA9IHRhc2s7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGxzdGF0c19zaG93X3Byb2MsIGlub2RlKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbHN0YXRzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzKQogewotCXN0cnVjdCBzZXFfZmlsZSAqbTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAKLQltID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXRhc2sgPSBtLT5wcml2YXRlOworCWlmICghdGFzaykKKwkJcmV0dXJuIC1FU1JDSDsKIAljbGVhcl9hbGxfbGF0ZW5jeV90cmFjaW5nKHRhc2spOworCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTQxNiw2ICs0MTEsNyBAQAogCVtSTElNSVRfTVNHUVVFVUVdID0geyJNYXggbXNncXVldWUgc2l6ZSIsICJieXRlcyJ9LAogCVtSTElNSVRfTklDRV0gPSB7Ik1heCBuaWNlIHByaW9yaXR5IiwgTlVMTH0sCiAJW1JMSU1JVF9SVFBSSU9dID0geyJNYXggcmVhbHRpbWUgcHJpb3JpdHkiLCBOVUxMfSwKKwlbUkxJTUlUX1JUVElNRV0gPSB7Ik1heCByZWFsdGltZSB0aW1lb3V0IiwgInVzIn0sCiB9OwogCiAvKiBEaXNwbGF5IGxpbWl0cyBmb3IgYSBwcm9jZXNzICovCkBAIC0xMDQwLDYgKzEwMzYsMjYgQEAKIAkucmVhZAkJPSBwcm9jX2xvZ2ludWlkX3JlYWQsCiAJLndyaXRlCQk9IHByb2NfbG9naW51aWRfd3JpdGUsCiB9OworCitzdGF0aWMgc3NpemVfdCBwcm9jX3Nlc3Npb25pZF9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CisJc3NpemVfdCBsZW5ndGg7CisJY2hhciB0bXBidWZbVE1QQlVGTEVOXTsKKworCWlmICghdGFzaykKKwkJcmV0dXJuIC1FU1JDSDsKKwlsZW5ndGggPSBzY25wcmludGYodG1wYnVmLCBUTVBCVUZMRU4sICIldSIsCisJCQkJYXVkaXRfZ2V0X3Nlc3Npb25pZCh0YXNrKSk7CisJcHV0X3Rhc2tfc3RydWN0KHRhc2spOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCB0bXBidWYsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc2Vzc2lvbmlkX29wZXJhdGlvbnMgPSB7CisJLnJlYWQJCT0gcHJvY19zZXNzaW9uaWRfcmVhZCwKK307CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KQEAgLTIyNzMsNiArMjI4OSw5IEBACiAJRElSKCJ0YXNrIiwgICAgICAgU19JUlVHT3xTX0lYVUdPLCB0YXNrKSwKIAlESVIoImZkIiwgICAgICAgICBTX0lSVVNSfFNfSVhVU1IsIGZkKSwKIAlESVIoImZkaW5mbyIsICAgICBTX0lSVVNSfFNfSVhVU1IsIGZkaW5mbyksCisjaWZkZWYgQ09ORklHX05FVAorCURJUigibmV0IiwgICAgICAgIFNfSVJVR098U19JWFVHTywgbmV0KSwKKyNlbmRpZgogCVJFRygiZW52aXJvbiIsICAgIFNfSVJVU1IsIGVudmlyb24pLAogCUlORigiYXV4diIsICAgICAgIFNfSVJVU1IsIHBpZF9hdXh2KSwKIAlPTkUoInN0YXR1cyIsICAgICBTX0lSVUdPLCBwaWRfc3RhdHVzKSwKQEAgLTIzMjAsNiArMjMzOSw3IEBACiAJUkVHKCJvb21fYWRqIiwgICAgU19JUlVHT3xTX0lXVVNSLCBvb21fYWRqdXN0KSwKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJUkVHKCJsb2dpbnVpZCIsICAgU19JV1VTUnxTX0lSVUdPLCBsb2dpbnVpZCksCisJUkVHKCJzZXNzaW9uaWQiLCAgU19JUlVTUiwgc2Vzc2lvbmlkKSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KIAlSRUcoIm1ha2UtaXQtZmFpbCIsIFNfSVJVR098U19JV1VTUiwgZmF1bHRfaW5qZWN0KSwKQEAgLTI2NTAsNiArMjY3MCw3IEBACiAJUkVHKCJvb21fYWRqIiwgICBTX0lSVUdPfFNfSVdVU1IsIG9vbV9hZGp1c3QpLAogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKIAlSRUcoImxvZ2ludWlkIiwgIFNfSVdVU1J8U19JUlVHTywgbG9naW51aWQpLAorCVJFRygic2Vzc2lvbmlkIiwgIFNfSVJVU1IsIHNlc3Npb25pZCksCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OCiAJUkVHKCJtYWtlLWl0LWZhaWwiLCBTX0lSVUdPfFNfSVdVU1IsIGZhdWx0X2luamVjdCksCmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IDY4OTcxZTYuLmEzNmFkM2MgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC0zNzcsMTUgKzM3NywxNCBAQAogICogRG9uJ3QgY3JlYXRlIG5lZ2F0aXZlIGRlbnRyaWVzIGhlcmUsIHJldHVybiAtRU5PRU5UIGJ5IGhhbmQKICAqIGluc3RlYWQuCiAgKi8KLXN0cnVjdCBkZW50cnkgKnByb2NfbG9va3VwKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0cnVjdCBkZW50cnkgKnByb2NfbG9va3VwX2RlKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZGU7CiAJaW50IGVycm9yID0gLUVOT0VOVDsKIAogCWxvY2tfa2VybmVsKCk7CiAJc3Bpbl9sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKLQlkZSA9IFBERShkaXIpOwogCWlmIChkZSkgewogCQlmb3IgKGRlID0gZGUtPnN1YmRpcjsgZGUgOyBkZSA9IGRlLT5uZXh0KSB7CiAJCQlpZiAoZGUtPm5hbWVsZW4gIT0gZGVudHJ5LT5kX25hbWUubGVuKQpAQCAtMzkzLDggKzM5Miw2IEBACiAJCQlpZiAoIW1lbWNtcChkZW50cnktPmRfbmFtZS5uYW1lLCBkZS0+bmFtZSwgZGUtPm5hbWVsZW4pKSB7CiAJCQkJdW5zaWduZWQgaW50IGlubzsKIAotCQkJCWlmIChkZS0+c2hhZG93X3Byb2MpCi0JCQkJCWRlID0gZGUtPnNoYWRvd19wcm9jKGN1cnJlbnQsIGRlKTsKIAkJCQlpbm8gPSBkZS0+bG93X2lubzsKIAkJCQlkZV9nZXQoZGUpOwogCQkJCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKQEAgLTQxNyw2ICs0MTQsMTIgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CiAKK3N0cnVjdCBkZW50cnkgKnByb2NfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBwcm9jX2xvb2t1cF9kZShQREUoZGlyKSwgZGlyLCBkZW50cnkpOworfQorCiAvKgogICogVGhpcyByZXR1cm5zIG5vbi16ZXJvIGlmIGF0IEVPRiwgc28gdGhhdCB0aGUgL3Byb2MKICAqIHJvb3QgZGlyZWN0b3J5IGNhbiB1c2UgdGhpcyBhbmQgY2hlY2sgaWYgaXQgc2hvdWxkCkBAIC00MjYsMTAgKzQyOSw5IEBACiAgKiB2YWx1ZSBvZiB0aGUgcmVhZGRpcigpIGNhbGwsIGFzIGxvbmcgYXMgaXQncyBub24tbmVnYXRpdmUKICAqIGZvciBzdWNjZXNzLi4KICAqLwotaW50IHByb2NfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqIGZpbHAsCi0Jdm9pZCAqIGRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCitpbnQgcHJvY19yZWFkZGlyX2RlKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsCisJCWZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqIGRlOwogCXVuc2lnbmVkIGludCBpbm87CiAJaW50IGk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CkBAIC00MzgsNyArNDQwLDYgQEAKIAlsb2NrX2tlcm5lbCgpOwogCiAJaW5vID0gaW5vZGUtPmlfaW5vOwotCWRlID0gUERFKGlub2RlKTsKIAlpZiAoIWRlKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtNDk5LDYgKzUwMCwxMyBAQAogCXJldHVybiByZXQ7CQogfQogCitpbnQgcHJvY19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJcmV0dXJuIHByb2NfcmVhZGRpcl9kZShQREUoaW5vZGUpLCBmaWxwLCBkaXJlbnQsIGZpbGxkaXIpOworfQorCiAvKgogICogVGhlc2UgYXJlIHRoZSBnZW5lcmljIC9wcm9jIGRpcmVjdG9yeSBvcGVyYXRpb25zLiBUaGV5CiAgKiB1c2UgdGhlIGluLW1lbW9yeSAic3RydWN0IHByb2NfZGlyX2VudHJ5IiB0cmVlIHRvIHBhcnNlCmRpZmYgLS1naXQgYS9mcy9wcm9jL2ludGVybmFsLmggYi9mcy9wcm9jL2ludGVybmFsLmgKaW5kZXggMWM4MWM4Zi4uYmM3MmY1YyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbnRlcm5hbC5oCisrKyBiL2ZzL3Byb2MvaW50ZXJuYWwuaApAQCAtNjQsNiArNjQsOCBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zbWFwc19vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbmV0X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19uZXRfaW5vZGVfb3BlcmF0aW9uczsKIAogdm9pZCBmcmVlX3Byb2NfZW50cnkoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSk7CiAKQEAgLTgzLDMgKzg1LDggQEAKIHsKIAlyZXR1cm4gUFJPQ19JKGlub2RlKS0+ZmQ7CiB9CisKK3N0cnVjdCBkZW50cnkgKnByb2NfbG9va3VwX2RlKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBpbm9kZSAqaW5vLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworaW50IHByb2NfcmVhZGRpcl9kZShzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LAorCQlmaWxsZGlyX3QgZmlsbGRpcik7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfbWlzYy5jIGIvZnMvcHJvYy9wcm9jX21pc2MuYwppbmRleCA0Njg4MDVkLi4yZDU2Mzk3IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2NfbWlzYy5jCisrKyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zNzcsNyArMzc4LDYgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0JMT0NLCi1leHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhcnRpdGlvbnNfb3A7CiBzdGF0aWMgaW50IHBhcnRpdGlvbnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnBhcnRpdGlvbnNfb3ApOwpAQCAtMzg5LDcgKzM4OSw2IEBACiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGlza3N0YXRzX29wOwogc3RhdGljIGludCBkaXNrc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmRpc2tzdGF0c19vcCk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfbmV0LmMgYi9mcy9wcm9jL3Byb2NfbmV0LmMKaW5kZXggMTRlOWI1YS4uMTNjZDc4MyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX25ldC5jCisrKyBiL2ZzL3Byb2MvcHJvY19uZXQuYwpAQCAtNDQsNyArNDQsOSBAQAogCQlwdXRfbmV0KG5ldCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKyNpZmRlZiBDT05GSUdfTkVUX05TCiAJcC0+bmV0ID0gbmV0OworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZXFfb3Blbl9uZXQpOwpAQCAtNTIsMTcgKzU0LDkxIEBACiBpbnQgc2VxX3JlbGVhc2VfbmV0KHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZikKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKLQlzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlICpwOwogCiAJc2VxID0gZi0+cHJpdmF0ZV9kYXRhOwotCXAgPSBzZXEtPnByaXZhdGU7CiAKLQlwdXRfbmV0KHAtPm5ldCk7CisJcHV0X25ldChzZXFfZmlsZV9uZXQoc2VxKSk7CiAJc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm8sIGYpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VxX3JlbGVhc2VfbmV0KTsKIAorc3RhdGljIHN0cnVjdCBuZXQgKmdldF9wcm9jX3Rhc2tfbmV0KHN0cnVjdCBpbm9kZSAqZGlyKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlzdHJ1Y3QgbnNwcm94eSAqbnM7CisJc3RydWN0IG5ldCAqbmV0ID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwl0YXNrID0gcGlkX3Rhc2socHJvY19waWQoZGlyKSwgUElEVFlQRV9QSUQpOworCWlmICh0YXNrICE9IE5VTEwpIHsKKwkJbnMgPSB0YXNrX25zcHJveHkodGFzayk7CisJCWlmIChucyAhPSBOVUxMKQorCQkJbmV0ID0gZ2V0X25ldChucy0+bmV0X25zKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gbmV0OworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY190Z2lkX25ldF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsCisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IGRlbnRyeSAqZGU7CisJc3RydWN0IG5ldCAqbmV0OworCisJZGUgPSBFUlJfUFRSKC1FTk9FTlQpOworCW5ldCA9IGdldF9wcm9jX3Rhc2tfbmV0KGRpcik7CisJaWYgKG5ldCAhPSBOVUxMKSB7CisJCWRlID0gcHJvY19sb29rdXBfZGUobmV0LT5wcm9jX25ldCwgZGlyLCBkZW50cnkpOworCQlwdXRfbmV0KG5ldCk7CisJfQorCXJldHVybiBkZTsKK30KKworc3RhdGljIGludCBwcm9jX3RnaWRfbmV0X2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJc3RydWN0IGtzdGF0ICpzdGF0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IG5ldCAqbmV0OworCisJbmV0ID0gZ2V0X3Byb2NfdGFza19uZXQoaW5vZGUpOworCisJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CisKKwlpZiAobmV0ICE9IE5VTEwpIHsKKwkJc3RhdC0+bmxpbmsgPSBuZXQtPnByb2NfbmV0LT5ubGluazsKKwkJcHV0X25ldChuZXQpOworCX0KKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX25ldF9pbm9kZV9vcGVyYXRpb25zID0geworCS5sb29rdXAJCT0gcHJvY190Z2lkX25ldF9sb29rdXAsCisJLmdldGF0dHIJPSBwcm9jX3RnaWRfbmV0X2dldGF0dHIsCit9OworCitzdGF0aWMgaW50IHByb2NfdGdpZF9uZXRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LAorCQlmaWxsZGlyX3QgZmlsbGRpcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBuZXQgKm5ldDsKKworCXJldCA9IC1FSU5WQUw7CisJbmV0ID0gZ2V0X3Byb2NfdGFza19uZXQoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKG5ldCAhPSBOVUxMKSB7CisJCXJldCA9IHByb2NfcmVhZGRpcl9kZShuZXQtPnByb2NfbmV0LCBmaWxwLCBkaXJlbnQsIGZpbGxkaXIpOworCQlwdXRfbmV0KG5ldCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19uZXRfb3BlcmF0aW9ucyA9IHsKKwkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAorCS5yZWFkZGlyCT0gcHJvY190Z2lkX25ldF9yZWFkZGlyLAorfTsKKwogCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmV0X2ZvcHNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAljb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcykKQEAgLTgzLDE0ICsxNTksNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X3Byb2NfbmV0KTsKIAotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2hhZG93X3BkZTsKLQotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZXRfc2hhZG93KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCi17Ci0JcmV0dXJuIHRhc2stPm5zcHJveHktPm5ldF9ucy0+cHJvY19uZXQ7Ci19Ci0KIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZXRfbWtkaXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLAogCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkKIHsKQEAgLTEwNCw0NSArMTcyLDM5IEBACiAKIHN0YXRpYyBfX25ldF9pbml0IGludCBwcm9jX25ldF9uc19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3QsICpuZXRkLCAqbmV0X3N0YXRkOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqbmV0ZCwgKm5ldF9zdGF0ZDsKIAlpbnQgZXJyOwogCiAJZXJyID0gLUVOT01FTTsKLQlyb290ID0ga3phbGxvYyhzaXplb2YoKnJvb3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJvb3QpCisJbmV0ZCA9IGt6YWxsb2Moc2l6ZW9mKCpuZXRkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXRkKQogCQlnb3RvIG91dDsKIAotCWVyciA9IC1FRVhJU1Q7Ci0JbmV0ZCA9IHByb2NfbmV0X21rZGlyKG5ldCwgIm5ldCIsIHJvb3QpOwotCWlmICghbmV0ZCkKLQkJZ290byBmcmVlX3Jvb3Q7CisJbmV0ZC0+ZGF0YSA9IG5ldDsKKwluZXRkLT5ubGluayA9IDI7CisJbmV0ZC0+bmFtZSA9ICJuZXQiOworCW5ldGQtPm5hbWVsZW4gPSAzOworCW5ldGQtPnBhcmVudCA9ICZwcm9jX3Jvb3Q7CiAKIAllcnIgPSAtRUVYSVNUOwogCW5ldF9zdGF0ZCA9IHByb2NfbmV0X21rZGlyKG5ldCwgInN0YXQiLCBuZXRkKTsKIAlpZiAoIW5ldF9zdGF0ZCkKIAkJZ290byBmcmVlX25ldDsKIAotCXJvb3QtPmRhdGEgPSBuZXQ7Ci0KLQluZXQtPnByb2NfbmV0X3Jvb3QgPSByb290OwogCW5ldC0+cHJvY19uZXQgPSBuZXRkOwogCW5ldC0+cHJvY19uZXRfc3RhdCA9IG5ldF9zdGF0ZDsKLQllcnIgPSAwOworCXJldHVybiAwOwogCitmcmVlX25ldDoKKwlrZnJlZShuZXRkKTsKIG91dDoKIAlyZXR1cm4gZXJyOwotZnJlZV9uZXQ6Ci0JcmVtb3ZlX3Byb2NfZW50cnkoIm5ldCIsIHJvb3QpOwotZnJlZV9yb290OgotCWtmcmVlKHJvb3QpOwotCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHByb2NfbmV0X25zX2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJlbW92ZV9wcm9jX2VudHJ5KCJzdGF0IiwgbmV0LT5wcm9jX25ldCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoIm5ldCIsIG5ldC0+cHJvY19uZXRfcm9vdCk7Ci0Ja2ZyZWUobmV0LT5wcm9jX25ldF9yb290KTsKKwlrZnJlZShuZXQtPnByb2NfbmV0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBfX25ldF9pbml0ZGF0YSBwcm9jX25ldF9uc19vcHMgPSB7CkBAIC0xNTIsOCArMjE0LDcgQEAKIAogaW50IF9faW5pdCBwcm9jX25ldF9pbml0KHZvaWQpCiB7Ci0Jc2hhZG93X3BkZSA9IHByb2NfbWtkaXIoIm5ldCIsIE5VTEwpOwotCXNoYWRvd19wZGUtPnNoYWRvd19wcm9jID0gcHJvY19uZXRfc2hhZG93OworCXByb2Nfc3ltbGluaygibmV0IiwgTlVMTCwgInNlbGYvbmV0Iik7CiAKIAlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmcHJvY19uZXRfbnNfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA0OTk1OGNmLi45ZGZiNWZmIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC01MjcsMTMgKzUyNywyMSBAQAogCWNoYXIgX191c2VyICpvdXQsICplbmQ7CiB9OwogCi0jZGVmaW5lIFBNX0VOVFJZX0JZVEVTIHNpemVvZih1NjQpCi0jZGVmaW5lIFBNX1JFU0VSVkVEX0JJVFMgICAgMwotI2RlZmluZSBQTV9SRVNFUlZFRF9PRkZTRVQgICg2NCAtIFBNX1JFU0VSVkVEX0JJVFMpCi0jZGVmaW5lIFBNX1JFU0VSVkVEX01BU0sgICAgKCgoMUxMPDxQTV9SRVNFUlZFRF9CSVRTKS0xKSA8PCBQTV9SRVNFUlZFRF9PRkZTRVQpCi0jZGVmaW5lIFBNX1NQRUNJQUwobnIpICAgICAgKCgobnIpIDw8IFBNX1JFU0VSVkVEX09GRlNFVCkgfCBQTV9SRVNFUlZFRF9NQVNLKQotI2RlZmluZSBQTV9OT1RfUFJFU0VOVCAgICAgIFBNX1NQRUNJQUwoMUxMKQotI2RlZmluZSBQTV9TV0FQICAgICAgICAgICAgIFBNX1NQRUNJQUwoMkxMKQorI2RlZmluZSBQTV9FTlRSWV9CWVRFUyAgICAgIHNpemVvZih1NjQpCisjZGVmaW5lIFBNX1NUQVRVU19CSVRTICAgICAgMworI2RlZmluZSBQTV9TVEFUVVNfT0ZGU0VUICAgICg2NCAtIFBNX1NUQVRVU19CSVRTKQorI2RlZmluZSBQTV9TVEFUVVNfTUFTSyAgICAgICgoKDFMTCA8PCBQTV9TVEFUVVNfQklUUykgLSAxKSA8PCBQTV9TVEFUVVNfT0ZGU0VUKQorI2RlZmluZSBQTV9TVEFUVVMobnIpICAgICAgICgoKG5yKSA8PCBQTV9TVEFUVVNfT0ZGU0VUKSAmIFBNX1NUQVRVU19NQVNLKQorI2RlZmluZSBQTV9QU0hJRlRfQklUUyAgICAgIDYKKyNkZWZpbmUgUE1fUFNISUZUX09GRlNFVCAgICAoUE1fU1RBVFVTX09GRlNFVCAtIFBNX1BTSElGVF9CSVRTKQorI2RlZmluZSBQTV9QU0hJRlRfTUFTSyAgICAgICgoKDFMTCA8PCBQTV9QU0hJRlRfQklUUykgLSAxKSA8PCBQTV9QU0hJRlRfT0ZGU0VUKQorI2RlZmluZSBQTV9QU0hJRlQoeCkgICAgICAgICgoKHU2NCkgKHgpIDw8IFBNX1BTSElGVF9PRkZTRVQpICYgUE1fUFNISUZUX01BU0spCisjZGVmaW5lIFBNX1BGUkFNRV9NQVNLICAgICAgKCgxTEwgPDwgUE1fUFNISUZUX09GRlNFVCkgLSAxKQorI2RlZmluZSBQTV9QRlJBTUUoeCkgICAgICAgICgoeCkgJiBQTV9QRlJBTUVfTUFTSykKKworI2RlZmluZSBQTV9QUkVTRU5UICAgICAgICAgIFBNX1NUQVRVUyg0TEwpCisjZGVmaW5lIFBNX1NXQVAgICAgICAgICAgICAgUE1fU1RBVFVTKDJMTCkKKyNkZWZpbmUgUE1fTk9UX1BSRVNFTlQgICAgICBQTV9QU0hJRlQoUEFHRV9TSElGVCkKICNkZWZpbmUgUE1fRU5EX09GX0JVRkZFUiAgICAxCiAKIHN0YXRpYyBpbnQgYWRkX3RvX3BhZ2VtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgcGZuLApAQCAtNTc0LDcgKzU4Miw3IEBACiB1NjQgc3dhcF9wdGVfdG9fcGFnZW1hcF9lbnRyeShwdGVfdCBwdGUpCiB7CiAJc3dwX2VudHJ5X3QgZSA9IHB0ZV90b19zd3BfZW50cnkocHRlKTsKLQlyZXR1cm4gUE1fU1dBUCB8IHN3cF90eXBlKGUpIHwgKHN3cF9vZmZzZXQoZSkgPDwgTUFYX1NXQVBGSUxFU19TSElGVCk7CisJcmV0dXJuIHN3cF90eXBlKGUpIHwgKHN3cF9vZmZzZXQoZSkgPDwgTUFYX1NXQVBGSUxFU19TSElGVCk7CiB9CiAKIHN0YXRpYyBpbnQgcGFnZW1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTU4OCw5ICs1OTYsMTEgQEAKIAkJdTY0IHBmbiA9IFBNX05PVF9QUkVTRU5UOwogCQlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIpOwogCQlpZiAoaXNfc3dhcF9wdGUoKnB0ZSkpCi0JCQlwZm4gPSBzd2FwX3B0ZV90b19wYWdlbWFwX2VudHJ5KCpwdGUpOworCQkJcGZuID0gUE1fUEZSQU1FKHN3YXBfcHRlX3RvX3BhZ2VtYXBfZW50cnkoKnB0ZSkpCisJCQkJfCBQTV9QU0hJRlQoUEFHRV9TSElGVCkgfCBQTV9TV0FQOwogCQllbHNlIGlmIChwdGVfcHJlc2VudCgqcHRlKSkKLQkJCXBmbiA9IHB0ZV9wZm4oKnB0ZSk7CisJCQlwZm4gPSBQTV9QRlJBTUUocHRlX3BmbigqcHRlKSkKKwkJCQl8IFBNX1BTSElGVChQQUdFX1NISUZUKSB8IFBNX1BSRVNFTlQ7CiAJCS8qIHVubWFwIHNvIHdlJ3JlIG5vdCBpbiBhdG9taWMgd2hlbiB3ZSBjb3B5IHRvIHVzZXJzcGFjZSAqLwogCQlwdGVfdW5tYXAocHRlKTsKIAkJZXJyID0gYWRkX3RvX3BhZ2VtYXAoYWRkciwgcGZuLCBwbSk7CkBAIC02MTEsMTIgKzYyMSwyMCBAQAogLyoKICAqIC9wcm9jL3BpZC9wYWdlbWFwIC0gYW4gYXJyYXkgbWFwcGluZyB2aXJ0dWFsIHBhZ2VzIHRvIHBmbnMKICAqCi0gKiBGb3IgZWFjaCBwYWdlIGluIHRoZSBhZGRyZXNzIHNwYWNlLCB0aGlzIGZpbGUgY29udGFpbnMgb25lIDY0LWJpdAotICogZW50cnkgcmVwcmVzZW50aW5nIHRoZSBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIHBhZ2UgZnJhbWUgbnVtYmVyCi0gKiAoUEZOKSBpZiB0aGUgcGFnZSBpcyBwcmVzZW50LiBJZiB0aGVyZSBpcyBhIHN3YXAgZW50cnkgZm9yIHRoZQotICogcGh5c2ljYWwgcGFnZSwgdGhlbiBhbiBlbmNvZGluZyBvZiB0aGUgc3dhcCBmaWxlIG51bWJlciBhbmQgdGhlCi0gKiBwYWdlJ3Mgb2Zmc2V0IGludG8gdGhlIHN3YXAgZmlsZSBhcmUgcmV0dXJuZWQuIElmIG5vIHBhZ2UgaXMKLSAqIHByZXNlbnQgYXQgYWxsLCBQTV9OT1RfUFJFU0VOVCBpcyByZXR1cm5lZC4gVGhpcyBhbGxvd3MgZGV0ZXJtaW5pbmcKKyAqIEZvciBlYWNoIHBhZ2UgaW4gdGhlIGFkZHJlc3Mgc3BhY2UsIHRoaXMgZmlsZSBjb250YWlucyBvbmUgNjQtYml0IGVudHJ5CisgKiBjb25zaXN0aW5nIG9mIHRoZSBmb2xsb3dpbmc6CisgKgorICogQml0cyAwLTU1ICBwYWdlIGZyYW1lIG51bWJlciAoUEZOKSBpZiBwcmVzZW50CisgKiBCaXRzIDAtNCAgIHN3YXAgdHlwZSBpZiBzd2FwcGVkCisgKiBCaXRzIDUtNTUgIHN3YXAgb2Zmc2V0IGlmIHN3YXBwZWQKKyAqIEJpdHMgNTUtNjAgcGFnZSBzaGlmdCAocGFnZSBzaXplID0gMTw8cGFnZSBzaGlmdCkKKyAqIEJpdCAgNjEgICAgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAqIEJpdCAgNjIgICAgcGFnZSBzd2FwcGVkCisgKiBCaXQgIDYzICAgIHBhZ2UgcHJlc2VudAorICoKKyAqIElmIHRoZSBwYWdlIGlzIG5vdCBwcmVzZW50IGJ1dCBpbiBzd2FwLCB0aGVuIHRoZSBQRk4gY29udGFpbnMgYW4KKyAqIGVuY29kaW5nIG9mIHRoZSBzd2FwIGZpbGUgbnVtYmVyIGFuZCB0aGUgcGFnZSdzIG9mZnNldCBpbnRvIHRoZQorICogc3dhcC4gVW5tYXBwZWQgcGFnZXMgcmV0dXJuIGEgbnVsbCBQRk4uIFRoaXMgYWxsb3dzIGRldGVybWluaW5nCiAgKiBwcmVjaXNlbHkgd2hpY2ggcGFnZXMgYXJlIG1hcHBlZCAob3IgaW4gc3dhcCkgYW5kIGNvbXBhcmluZyBtYXBwZWQKICAqIHBhZ2VzIGJldHdlZW4gcHJvY2Vzc2VzLgogICoKQEAgLTY0MCwxNyArNjU4LDE3IEBACiAKIAlyZXQgPSAtRUFDQ0VTOwogCWlmICghcHRyYWNlX21heV9hdHRhY2godGFzaykpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF90YXNrOwogCiAJcmV0ID0gLUVJTlZBTDsKIAkvKiBmaWxlIHBvc2l0aW9uIG11c3QgYmUgYWxpZ25lZCAqLwogCWlmICgqcHBvcyAlIFBNX0VOVFJZX0JZVEVTKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdGFzazsKIAogCXJldCA9IDA7CiAJbW0gPSBnZXRfdGFza19tbSh0YXNrKTsKIAlpZiAoIW1tKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdGFzazsKIAogCXJldCA9IC1FTk9NRU07CiAJdWFkZHIgPSAodW5zaWduZWQgbG9uZylidWYgJiBQQUdFX01BU0s7CkBAIC02NTgsNyArNjc2LDcgQEAKIAlwYWdlY291bnQgPSAoUEFHRV9BTElHTih1ZW5kKSAtIHVhZGRyKSAvIFBBR0VfU0laRTsKIAlwYWdlcyA9IGttYWxsb2MocGFnZWNvdW50ICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhZ2VzKQotCQlnb3RvIG91dF90YXNrOworCQlnb3RvIG91dF9tbTsKIAogCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgdWFkZHIsIHBhZ2Vjb3VudCwKQEAgLTY2OCw2ICs2ODYsMTIgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfZnJlZTsKIAorCWlmIChyZXQgIT0gcGFnZWNvdW50KSB7CisJCXBhZ2Vjb3VudCA9IHJldDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfcGFnZXM7CisJfQorCiAJcG0ub3V0ID0gYnVmOwogCXBtLmVuZCA9IGJ1ZiArIGNvdW50OwogCkBAIC02OTksMTUgKzcyMywxNyBAQAogCQkJcmV0ID0gcG0ub3V0IC0gYnVmOwogCX0KIAorb3V0X3BhZ2VzOgogCWZvciAoOyBwYWdlY291bnQ7IHBhZ2Vjb3VudC0tKSB7CiAJCXBhZ2UgPSBwYWdlc1twYWdlY291bnQtMV07CiAJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJU2V0UGFnZURpcnR5KHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJfQotCW1tcHV0KG1tKTsKIG91dF9mcmVlOgogCWtmcmVlKHBhZ2VzKTsKK291dF9tbToKKwltbXB1dChtbSk7CiBvdXRfdGFzazoKIAlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9kb19iYWxhbi5jIGIvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYwppbmRleCBmODVjNWNmLi43ZWU0MjA4IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9kb19iYWxhbi5jCisrKyBiL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCQlyZXR1cm4gYmFsYW5jZV9sZWFmX3doZW5fZGVsZXRlKHRiLCBmbGFnKTsKIAogCXplcm9zX251bSA9IDA7Ci0JaWYgKGZsYWcgPT0gTV9JTlNFUlQgJiYgYm9keSA9PSAwKQorCWlmIChmbGFnID09IE1fSU5TRVJUICYmICFib2R5KQogCQl6ZXJvc19udW0gPSBpaF9pdGVtX2xlbihpaCk7CiAKIAlwb3NfaW5faXRlbSA9IHRiLT50Yl9wYXRoLT5wb3NfaW5faXRlbTsKQEAgLTE3MjgsNyArMTcyOCw3IEBACiAJc3RydWN0IGJ1ZmZlcl9pbmZvIGJpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9GRUJfU0laRTsgaSsrKQotCQlpZiAodGItPkZFQltpXSAhPSAwKQorCQlpZiAodGItPkZFQltpXSAhPSBOVUxMKQogCQkJYnJlYWs7CiAKIAlpZiAoaSA9PSBNQVhfRkVCX1NJWkUpCkBAIC0xODI3LDcgKzE4MjcsNyBAQAogewogCWludCBTaF9wb3NpdGlvbiA9IFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgaCArIDEpOwogCi0JUkZBTFNFKFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLCBoKSA9PSAwIHx8IHRiLT5GTFtoXSA9PSAwLAorCVJGQUxTRShQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgaCkgPT0gTlVMTCB8fCB0Yi0+RkxbaF0gPT0gTlVMTCwKIAkgICAgICAgInZzLTEyMzI1OiBGTFslZF0oJXApIG9yIEZbJWRdKCVwKSBkb2VzIG5vdCBleGlzdCIsCiAJICAgICAgIGgsIHRiLT5GTFtoXSwgaCwgUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIGgpKTsKIApAQCAtMTg0MSw3ICsxODQxLDcgQEAKIHsKIAlpbnQgU2hfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIGggKyAxKTsKIAotCVJGQUxTRShQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgaCkgPT0gMCB8fCB0Yi0+RlJbaF0gPT0gMCwKKwlSRkFMU0UoUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIGgpID09IE5VTEwgfHwgdGItPkZSW2hdID09IE5VTEwsCiAJICAgICAgICJ2cy0xMjMzMDogRlslZF0oJXApIG9yIEZSWyVkXSglcCkgZG9lcyBub3QgZXhpc3QiLAogCSAgICAgICBoLCBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgaCksIGgsIHRiLT5GUltoXSk7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMgYi9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCmluZGV4IDBlZTM1YzYuLjA3ZDA1ZTAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvZml4X25vZGUuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJaWYgKHZuLT52bl9tb2RlID09IE1fSU5TRVJUKSB7CiAJCXN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpID0gdm4tPnZuX3ZpICsgdm4tPnZuX2FmZmVjdGVkX2l0ZW1fbnVtOwogCi0JCVJGQUxTRSh2bi0+dm5faW5zX2loID09IDAsCisJCVJGQUxTRSh2bi0+dm5faW5zX2loID09IE5VTEwsCiAJCSAgICAgICAidnMtODA0MDogaXRlbSBoZWFkZXIgb2YgaW5zZXJ0ZWQgaXRlbSBpcyBub3Qgc3BlY2lmaWVkIik7CiAJCXZpLT52aV9pdGVtX2xlbiA9IHRiLT5pbnNlcnRfc2l6ZVswXTsKIAkJdmktPnZpX2loID0gdm4tPnZuX2luc19paDsKQEAgLTg1Nyw3ICs4NTcsOCBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqbCwgKmY7CiAJaW50IG9yZGVyOwogCi0JaWYgKChmID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIGgpKSA9PSAwIHx8IChsID0gdGItPkZMW2hdKSA9PSAwKQorCWlmICgoZiA9IFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLCBoKSkgPT0gTlVMTCB8fAorCSAgICAobCA9IHRiLT5GTFtoXSkgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZiA9PSBsKQpAQCAtODc4LDcgKzg3OSw4IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpyLCAqZjsKIAlpbnQgb3JkZXI7CiAKLQlpZiAoKGYgPSBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgaCkpID09IDAgfHwgKHIgPSB0Yi0+RlJbaF0pID09IDApCisJaWYgKChmID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIGgpKSA9PSBOVUxMIHx8CisJICAgIChyID0gdGItPkZSW2hdKSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCWlmIChmID09IHIpCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pb2N0bC5jIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwppbmRleCBlMGYwZjA5Li43NDM2M2E3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pb2N0bC5jCisrKyBiL2ZzL3JlaXNlcmZzL2lvY3RsLmMKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0yNSw2ICsyNiw3IEBACiAJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgZXJyID0gMDsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBSRUlTRVJGU19JT0NfVU5QQUNLOgpAQCAtNDgsNTAgKzUwLDY3IEBACiAJCQlpZiAoIXJlaXNlcmZzX2F0dHJzKGlub2RlLT5pX3NiKSkKIAkJCQlyZXR1cm4gLUVOT1RUWTsKIAotCQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQkJcmV0dXJuIC1FUk9GUzsKKwkJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOwogCi0JCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCi0JCQkJcmV0dXJuIC1FUEVSTTsKLQotCQkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJCS8qIElzIGl0IHF1b3RhIGZpbGU/IERvIG5vdCBhbGxvdyB1c2VyIHRvIG1lc3Mgd2l0aCBpdC4gKi8KLQkJCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJCQlyZXR1cm4gLUVQRVJNOworCQkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKSB7CisJCQkJZXJyID0gLUVQRVJNOworCQkJCWdvdG8gc2V0ZmxhZ3Nfb3V0OworCQkJfQorCQkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykpIHsKKwkJCQllcnIgPSAtRUZBVUxUOworCQkJCWdvdG8gc2V0ZmxhZ3Nfb3V0OworCQkJfQorCQkJLyoKKwkJCSAqIElzIGl0IHF1b3RhIGZpbGU/IERvIG5vdCBhbGxvdyB1c2VyIHRvIG1lc3Mgd2l0aCBpdAorCQkJICovCisJCQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJCQllcnIgPSAtRVBFUk07CisJCQkJZ290byBzZXRmbGFnc19vdXQ7CisJCQl9CiAJCQlpZiAoKChmbGFncyBeIFJFSVNFUkZTX0koaW5vZGUpLT4KIAkJCSAgICAgIGlfYXR0cnMpICYgKFJFSVNFUkZTX0lNTVVUQUJMRV9GTCB8CiAJCQkJCSAgUkVJU0VSRlNfQVBQRU5EX0ZMKSkKLQkJCSAgICAmJiAhY2FwYWJsZShDQVBfTElOVVhfSU1NVVRBQkxFKSkKLQkJCQlyZXR1cm4gLUVQRVJNOwotCisJCQkgICAgJiYgIWNhcGFibGUoQ0FQX0xJTlVYX0lNTVVUQUJMRSkpIHsKKwkJCQllcnIgPSAtRVBFUk07CisJCQkJZ290byBzZXRmbGFnc19vdXQ7CisJCQl9CiAJCQlpZiAoKGZsYWdzICYgUkVJU0VSRlNfTk9UQUlMX0ZMKSAmJgogCQkJICAgIFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCQlpbnQgcmVzdWx0OwogCiAJCQkJcmVzdWx0ID0gcmVpc2VyZnNfdW5wYWNrKGlub2RlLCBmaWxwKTsKLQkJCQlpZiAocmVzdWx0KQotCQkJCQlyZXR1cm4gcmVzdWx0OworCQkJCWlmIChyZXN1bHQpIHsKKwkJCQkJZXJyID0gcmVzdWx0OworCQkJCQlnb3RvIHNldGZsYWdzX291dDsKKwkJCQl9CiAJCQl9CiAJCQlzZF9hdHRyc190b19pX2F0dHJzKGZsYWdzLCBpbm9kZSk7CiAJCQlSRUlTRVJGU19JKGlub2RlKS0+aV9hdHRycyA9IGZsYWdzOwogCQkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JCQlyZXR1cm4gMDsKK3NldGZsYWdzX291dDoKKwkJCW1udF9kcm9wX3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQkJcmV0dXJuIGVycjsKIAkJfQogCWNhc2UgUkVJU0VSRlNfSU9DX0dFVFZFUlNJT046CiAJCXJldHVybiBwdXRfdXNlcihpbm9kZS0+aV9nZW5lcmF0aW9uLCAoaW50IF9fdXNlciAqKWFyZyk7CiAJY2FzZSBSRUlTRVJGU19JT0NfU0VUVkVSU0lPTjoKIAkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQlyZXR1cm4gLUVST0ZTOwotCQlpZiAoZ2V0X3VzZXIoaW5vZGUtPmlfZ2VuZXJhdGlvbiwgKGludCBfX3VzZXIgKilhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKGdldF91c2VyKGlub2RlLT5pX2dlbmVyYXRpb24sIChpbnQgX191c2VyICopYXJnKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gc2V0dmVyc2lvbl9vdXQ7CisJCX0KIAkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJcmV0dXJuIDA7CitzZXR2ZXJzaW9uX291dDoKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCXJldHVybiBlcnI7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IGJiMDVhM2UuLjA2MGViM2YgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jIGIvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYwppbmRleCAyODFmODA2Li42ZGUwNjBhIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2xiYWxhbmNlLmMKQEAgLTYyNiw3ICs2MjYsNyBAQAogCQkJICAgICAgICJ2cy0xMDI1MDogbGVhZl9kZWZpbmVfZGVzdF9zcmNfaW5mb3M6IHNoaWZ0IHR5cGUgaXMgdW5rbm93biAoJWQpIiwKIAkJCSAgICAgICBzaGlmdF9tb2RlKTsKIAl9Ci0JUkZBTFNFKHNyY19iaS0+YmlfYmggPT0gMCB8fCBkZXN0X2JpLT5iaV9iaCA9PSAwLAorCVJGQUxTRSghc3JjX2JpLT5iaV9iaCB8fCAhZGVzdF9iaS0+YmlfYmgsCiAJICAgICAgICJ2cy0xMDI2MDogbW9kZT09JWQsIHNvdXJjZSAoJXApIG9yIGRlc3QgKCVwKSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgaW5jb3JyZWN0bHkiLAogCSAgICAgICBzaGlmdF9tb2RlLCBzcmNfYmktPmJpX2JoLCBkZXN0X2JpLT5iaV9iaCk7CiB9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCBiMzc4ZWVhLi44ODY3NTMzIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCWJ1ZmxlbiA9IERFSF9TSVpFICsgUk9VTkRfVVAobmFtZWxlbik7CiAJaWYgKGJ1ZmxlbiA+IHNpemVvZihzbWFsbF9idWYpKSB7CiAJCWJ1ZmZlciA9IGttYWxsb2MoYnVmbGVuLCBHRlBfTk9GUyk7Ci0JCWlmIChidWZmZXIgPT0gMCkKKwkJaWYgKCFidWZmZXIpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IGVsc2UKIAkJYnVmZmVyID0gc21hbGxfYnVmOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggNjg0MTQ1Mi4uMzkzY2MyMmMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMjAzMSw3ICsyMDMxLDcgQEAKIAkJcmV0dXJuIC1FWERFVjsKIAl9CiAJLyogV2UgbXVzdCBub3QgcGFjayB0YWlscyBmb3IgcXVvdGEgZmlsZXMgb24gcmVpc2VyZnMgZm9yIHF1b3RhIElPIHRvIHdvcmsgKi8KLQlpZiAoIVJFSVNFUkZTX0kobmQucGF0aC5kZW50cnktPmRfaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykgeworCWlmICghKFJFSVNFUkZTX0kobmQucGF0aC5kZW50cnktPmRfaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykpIHsKIAkJcmVpc2VyZnNfd2FybmluZyhzYiwKIAkJCQkgInJlaXNlcmZzOiBRdW90YSBmaWxlIG11c3QgaGF2ZSB0YWlsIHBhY2tpbmcgZGlzYWJsZWQuIik7CiAJCXBhdGhfcHV0KCZuZC5wYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGViYTAzN2IuLmQ3YzQ5MzUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2RlZmluZSBGTF9SRUFET05MWSAxMjgKICNkZWZpbmUgRkxfRElSX1NFTV9IRUxEIDI1NgpAQCAtMTkxLDI4ICsxOTAsMTEgQEAKIAlkcHV0KHhhZGlyKTsKIAlpZiAoZXJyKQogCQl4YWZpbGUgPSBFUlJfUFRSKGVycik7Ci0JcmV0dXJuIHhhZmlsZTsKLX0KLQotLyogT3BlbnMgYSBmaWxlIHBvaW50ZXIgdG8gdGhlIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggaW5vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl94YV9maWxlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgZGVudHJ5ICp4YWZpbGU7Ci0Jc3RydWN0IGZpbGUgKmZwOwotCi0JeGFmaWxlID0gZ2V0X3hhX2ZpbGVfZGVudHJ5KGlub2RlLCBuYW1lLCBmbGFncyk7Ci0JaWYgKElTX0VSUih4YWZpbGUpKQotCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKHhhZmlsZSkpOwogCWVsc2UgaWYgKCF4YWZpbGUtPmRfaW5vZGUpIHsKIAkJZHB1dCh4YWZpbGUpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7CisJCXhhZmlsZSA9IEVSUl9QVFIoLUVOT0RBVEEpOwogCX0KLQotCWZwID0gZGVudHJ5X29wZW4oeGFmaWxlLCBOVUxMLCBPX1JEV1IpOwotCS8qIGRlbnRyeV9vcGVuIGRwdXRzIHRoZSBkZW50cnkgaWYgaXQgZmFpbHMgKi8KLQotCXJldHVybiBmcDsKKwlyZXR1cm4geGFmaWxlOwogfQogCiAvKgpAQCAtMjI4LDkgKzIxMCw4IEBACiAgKiB3ZSdyZSBjYWxsZWQgd2l0aCBpX211dGV4IGhlbGQsIHNvIHRoZXJlIGFyZSBubyB3b3JyaWVzIGFib3V0IHRoZSBkaXJlY3RvcnkKICAqIGNoYW5naW5nIHVuZGVybmVhdGggdXMuCiAgKi8KLXN0YXRpYyBpbnQgX194YXR0cl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQorc3RhdGljIGludCBfX3hhdHRyX3JlYWRkaXIoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY3B1X2tleSBwb3Nfa2V5OwkvKiBrZXkgb2YgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZGlyZWN0b3J5IChrZXkgb2YgZGlyZWN0b3J5IGVudHJ5KSAqLwogCUlOSVRJQUxJWkVfUEFUSChwYXRoX3RvX2VudHJ5KTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtMzc0LDIzICszNTUsMTYgQEAKICAqCiAgKi8KIHN0YXRpYwotaW50IHhhdHRyX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIGZpbGxkaXJfdCBmaWxsZXIsIHZvaWQgKmJ1ZikKK2ludCB4YXR0cl9yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGZpbGxkaXJfdCBmaWxsZXIsIHZvaWQgKmJ1ZikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgcmVzID0gLUVOT1RESVI7Ci0JaWYgKCFmaWxlLT5mX29wIHx8ICFmaWxlLT5mX29wLT5yZWFkZGlyKQotCQlnb3RvIG91dDsKKwlpbnQgcmVzID0gLUVOT0VOVDsKIAltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwotLy8gICAgICAgIGRvd24oJmlub2RlLT5pX3pvbWJpZSk7Ci0JcmVzID0gLUVOT0VOVDsKIAlpZiAoIUlTX0RFQURESVIoaW5vZGUpKSB7CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJlcyA9IF9feGF0dHJfcmVhZGRpcihmaWxlLCBidWYsIGZpbGxlcik7CisJCXJlcyA9IF9feGF0dHJfcmVhZGRpcihpbm9kZSwgYnVmLCBmaWxsZXIpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJfQotLy8gICAgICAgIHVwKCZpbm9kZS0+aV96b21iaWUpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotICAgICAgb3V0OgogCXJldHVybiByZXM7CiB9CiAKQEAgLTQ0Miw3ICs0MTYsNyBAQAogCQkgICBzaXplX3QgYnVmZmVyX3NpemUsIGludCBmbGFncykKIHsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgZmlsZSAqZnA7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWNoYXIgKmRhdGE7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CkBAIC00NjAsMTggKzQzNCwxOCBAQAogCQl4YWhhc2ggPSB4YXR0cl9oYXNoKGJ1ZmZlciwgYnVmZmVyX3NpemUpOwogCiAgICAgICBvcGVuX2ZpbGU6Ci0JZnAgPSBvcGVuX3hhX2ZpbGUoaW5vZGUsIG5hbWUsIGZsYWdzKTsKLQlpZiAoSVNfRVJSKGZwKSkgewotCQllcnIgPSBQVFJfRVJSKGZwKTsKKwlkZW50cnkgPSBnZXRfeGFfZmlsZV9kZW50cnkoaW5vZGUsIG5hbWUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQl4aW5vZGUgPSBmcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwl4aW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOwogCiAJLyogd2UgbmVlZCB0byBjb3B5IGl0IG9mZi4uICovCiAJaWYgKHhpbm9kZS0+aV9ubGluayA+IDEpIHsKLQkJZnB1dChmcCk7CisJCWRwdXQoZGVudHJ5KTsKIAkJZXJyID0gcmVpc2VyZnNfeGF0dHJfZGVsKGlub2RlLCBuYW1lKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKQEAgLTQ4NSw3ICs0NTksNyBAQAogCW5ld2F0dHJzLmlhX3NpemUgPSBidWZmZXJfc2l6ZTsKIAluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRSB8IEFUVFJfQ1RJTUU7CiAJbXV0ZXhfbG9ja19uZXN0ZWQoJnhpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7Ci0JZXJyID0gbm90aWZ5X2NoYW5nZShmcC0+Zl9wYXRoLmRlbnRyeSwgJm5ld2F0dHJzKTsKKwllcnIgPSBub3RpZnlfY2hhbmdlKGRlbnRyeSwgJm5ld2F0dHJzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9maWxwOwogCkBAIC01MTgsMTUgKzQ5MiwxNCBAQAogCQkJcnhoLT5oX2hhc2ggPSBjcHVfdG9fbGUzMih4YWhhc2gpOwogCQl9CiAKLQkJZXJyID0gcmVpc2VyZnNfcHJlcGFyZV93cml0ZShmcCwgcGFnZSwgcGFnZV9vZmZzZXQsCisJCWVyciA9IHJlaXNlcmZzX3ByZXBhcmVfd3JpdGUoTlVMTCwgcGFnZSwgcGFnZV9vZmZzZXQsCiAJCQkJCSAgICBwYWdlX29mZnNldCArIGNodW5rICsgc2tpcCk7CiAJCWlmICghZXJyKSB7CiAJCQlpZiAoYnVmZmVyKQogCQkJCW1lbWNweShkYXRhICsgc2tpcCwgYnVmZmVyICsgYnVmZmVyX3BvcywgY2h1bmspOwotCQkJZXJyID0KLQkJCSAgICByZWlzZXJmc19jb21taXRfd3JpdGUoZnAsIHBhZ2UsIHBhZ2Vfb2Zmc2V0LAotCQkJCQkJICBwYWdlX29mZnNldCArIGNodW5rICsKLQkJCQkJCSAgc2tpcCk7CisJCQllcnIgPSByZWlzZXJmc19jb21taXRfd3JpdGUoTlVMTCwgcGFnZSwgcGFnZV9vZmZzZXQsCisJCQkJCQkgICAgcGFnZV9vZmZzZXQgKyBjaHVuayArCisJCQkJCQkgICAgc2tpcCk7CiAJCX0KIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXJlaXNlcmZzX3B1dF9wYWdlKHBhZ2UpOwpAQCAtNTQ4LDcgKzUyMSw3IEBACiAKICAgICAgIG91dF9maWxwOgogCW11dGV4X3VubG9jaygmeGlub2RlLT5pX211dGV4KTsKLQlmcHV0KGZwKTsKKwlkcHV0KGRlbnRyeSk7CiAKICAgICAgIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtNTYyLDcgKzUzNSw3IEBACiAJCSAgIHNpemVfdCBidWZmZXJfc2l6ZSkKIHsKIAlzc2l6ZV90IGVyciA9IDA7Ci0Jc3RydWN0IGZpbGUgKmZwOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzaXplX3QgaXNpemU7CiAJc2l6ZV90IGZpbGVfcG9zID0gMDsKIAlzaXplX3QgYnVmZmVyX3BvcyA9IDA7CkBAIC01NzgsMTMgKzU1MSwxMyBAQAogCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlmcCA9IG9wZW5feGFfZmlsZShpbm9kZSwgbmFtZSwgRkxfUkVBRE9OTFkpOwotCWlmIChJU19FUlIoZnApKSB7Ci0JCWVyciA9IFBUUl9FUlIoZnApOworCWRlbnRyeSA9IGdldF94YV9maWxlX2RlbnRyeShpbm9kZSwgbmFtZSwgRkxfUkVBRE9OTFkpOworCWlmIChJU19FUlIoZGVudHJ5KSkgeworCQllcnIgPSBQVFJfRVJSKGRlbnRyeSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXhpbm9kZSA9IGZwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXhpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlpc2l6ZSA9IHhpbm9kZS0+aV9zaXplOwogCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzIHw9IGlfaGFzX3hhdHRyX2RpcjsKIApAQCAtNjUyLDcgKzYyNSw3IEBACiAJfQogCiAgICAgICBvdXRfZHB1dDoKLQlmcHV0KGZwKTsKKwlkcHV0KGRlbnRyeSk7CiAKICAgICAgIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtNzQyLDcgKzcxNSw2IEBACiAvKiBUaGlzIGlzIGNhbGxlZCB3LyBpbm9kZS0+aV9tdXRleCBkb3duZWQgKi8KIGludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IGZpbGUgKmZwOwogCXN0cnVjdCBkZW50cnkgKmRpciwgKnJvb3Q7CiAJaW50IGVyciA9IDA7CiAKQEAgLTc2MywxNSArNzM1LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZnAgPSBkZW50cnlfb3BlbihkaXIsIE5VTEwsIE9fUkRXUik7Ci0JaWYgKElTX0VSUihmcCkpIHsKLQkJZXJyID0gUFRSX0VSUihmcCk7Ci0JCS8qIGRlbnRyeV9vcGVuIGRwdXRzIHRoZSBkZW50cnkgaWYgaXQgZmFpbHMgKi8KLQkJZ290byBvdXQ7Ci0JfQotCiAJbG9ja19rZXJuZWwoKTsKLQllcnIgPSB4YXR0cl9yZWFkZGlyKGZwLCByZWlzZXJmc19kZWxldGVfeGF0dHJzX2ZpbGxlciwgZGlyKTsKKwllcnIgPSB4YXR0cl9yZWFkZGlyKGRpci0+ZF9pbm9kZSwgcmVpc2VyZnNfZGVsZXRlX3hhdHRyc19maWxsZXIsIGRpcik7CiAJaWYgKGVycikgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWdvdG8gb3V0X2RpcjsKQEAgLTc5MSw3ICs3NTYsNyBAQAogCXVubG9ja19rZXJuZWwoKTsKIAogICAgICAgb3V0X2RpcjoKLQlmcHV0KGZwKTsKKwlkcHV0KGRpcik7CiAKICAgICAgIG91dDoKIAlpZiAoIWVycikKQEAgLTgzMyw3ICs3OTgsNiBAQAogCiBpbnQgcmVpc2VyZnNfY2hvd25feGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cnMpCiB7Ci0Jc3RydWN0IGZpbGUgKmZwOwogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgcmVpc2VyZnNfY2hvd25fYnVmIGJ1ZjsKQEAgLTg1NywxMyArODIxLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZnAgPSBkZW50cnlfb3BlbihkaXIsIE5VTEwsIE9fUkRXUik7Ci0JaWYgKElTX0VSUihmcCkpIHsKLQkJZXJyID0gUFRSX0VSUihmcCk7Ci0JCS8qIGRlbnRyeV9vcGVuIGRwdXRzIHRoZSBkZW50cnkgaWYgaXQgZmFpbHMgKi8KLQkJZ290byBvdXQ7Ci0JfQotCiAJbG9ja19rZXJuZWwoKTsKIAogCWF0dHJzLT5pYV92YWxpZCAmPSAoQVRUUl9VSUQgfCBBVFRSX0dJRCB8IEFUVFJfQ1RJTUUpOwpAQCAtODcxLDcgKzgyOCw3IEBACiAJYnVmLmF0dHJzID0gYXR0cnM7CiAJYnVmLmlub2RlID0gaW5vZGU7CiAKLQllcnIgPSB4YXR0cl9yZWFkZGlyKGZwLCByZWlzZXJmc19jaG93bl94YXR0cnNfZmlsbGVyLCAmYnVmKTsKKwllcnIgPSB4YXR0cl9yZWFkZGlyKGRpci0+ZF9pbm9kZSwgcmVpc2VyZnNfY2hvd25feGF0dHJzX2ZpbGxlciwgJmJ1Zik7CiAJaWYgKGVycikgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWdvdG8gb3V0X2RpcjsKQEAgLTg4MSw3ICs4MzgsNyBAQAogCXVubG9ja19rZXJuZWwoKTsKIAogICAgICAgb3V0X2RpcjoKLQlmcHV0KGZwKTsKKwlkcHV0KGRpcik7CiAKICAgICAgIG91dDoKIAlhdHRycy0+aWFfdmFsaWQgPSBpYV92YWxpZDsKQEAgLTEwMjksNyArOTg2LDYgQEAKICAqLwogc3NpemVfdCByZWlzZXJmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgZmlsZSAqZnA7CiAJc3RydWN0IGRlbnRyeSAqZGlyOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmIGJ1ZjsKQEAgLTEwNTIsMTMgKzEwMDgsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmcCA9IGRlbnRyeV9vcGVuKGRpciwgTlVMTCwgT19SRFdSKTsKLQlpZiAoSVNfRVJSKGZwKSkgewotCQllcnIgPSBQVFJfRVJSKGZwKTsKLQkJLyogZGVudHJ5X29wZW4gZHB1dHMgdGhlIGRlbnRyeSBpZiBpdCBmYWlscyAqLwotCQlnb3RvIG91dDsKLQl9Ci0KIAlidWYucl9idWYgPSBidWZmZXI7CiAJYnVmLnJfc2l6ZSA9IGJ1ZmZlciA/IHNpemUgOiAwOwogCWJ1Zi5yX3BvcyA9IDA7CkBAIC0xMDY2LDcgKzEwMTUsNyBAQAogCiAJUkVJU0VSRlNfSShkZW50cnktPmRfaW5vZGUpLT5pX2ZsYWdzIHw9IGlfaGFzX3hhdHRyX2RpcjsKIAotCWVyciA9IHhhdHRyX3JlYWRkaXIoZnAsIHJlaXNlcmZzX2xpc3R4YXR0cl9maWxsZXIsICZidWYpOworCWVyciA9IHhhdHRyX3JlYWRkaXIoZGlyLT5kX2lub2RlLCByZWlzZXJmc19saXN0eGF0dHJfZmlsbGVyLCAmYnVmKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9kaXI7CiAKQEAgLTEwNzYsNyArMTAyNSw3IEBACiAJCWVyciA9IGJ1Zi5yX3BvczsKIAogICAgICAgb3V0X2RpcjoKLQlmcHV0KGZwKTsKKwlkcHV0KGRpcik7CiAKICAgICAgIG91dDoKIAlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9yb21mcy9pbm9kZS5jIGIvZnMvcm9tZnMvaW5vZGUuYwppbmRleCAwMGI2ZjBhNS4uM2YxM2Q0OSAxMDA2NDQKLS0tIGEvZnMvcm9tZnMvaW5vZGUuYworKysgYi9mcy9yb21mcy9pbm9kZS5jCkBAIC0zNDAsOCArMzQwLDkgQEAKIHJvbWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbWF4b2ZmOwotCWludCBmc2xlbiwgcmVzOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJbG9uZyByZXM7CisJaW50IGZzbGVuOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCWNoYXIgZnNuYW1lW1JPTUZTX01BWEZOXTsJLyogWFhYIGR5bmFtaWM/ICovCiAJc3RydWN0IHJvbWZzX2lub2RlIHJpOwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBnb3QgZnJvbSBkZW50cnkgKi8KQEAgLTM1MSw3ICszNTIsNyBAQAogCW9mZnNldCA9IGRpci0+aV9pbm8gJiBST01GSF9NQVNLOwogCWxvY2tfa2VybmVsKCk7CiAJaWYgKHJvbWZzX2NvcHlmcm9tKGRpciwgJnJpLCBvZmZzZXQsIFJPTUZIX1NJWkUpIDw9IDApCi0JCWdvdG8gb3V0OworCQlnb3RvIGVycm9yOwogCiAJbWF4b2ZmID0gcm9tZnNfbWF4c2l6ZShkaXItPmlfc2IpOwogCW9mZnNldCA9IGJlMzJfdG9fY3B1KHJpLnNwZWMpICYgUk9NRkhfTUFTSzsKQEAgLTM2NCw5ICszNjUsOSBAQAogCiAJZm9yKDs7KSB7CiAJCWlmICghb2Zmc2V0IHx8IG9mZnNldCA+PSBtYXhvZmYpCi0JCQlnb3RvIG91dDA7CisJCQlnb3RvIHN1Y2Nlc3M7IC8qIG5lZ2F0aXZlIHN1Y2Nlc3MgKi8KIAkJaWYgKHJvbWZzX2NvcHlmcm9tKGRpciwgJnJpLCBvZmZzZXQsIFJPTUZIX1NJWkUpIDw9IDApCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZXJyb3I7CiAKIAkJLyogdHJ5IHRvIG1hdGNoIHRoZSBmaXJzdCAxNiBieXRlcyBvZiBuYW1lICovCiAJCWZzbGVuID0gcm9tZnNfc3RybmxlbihkaXIsIG9mZnNldCtST01GSF9TSVpFLCBST01GSF9TSVpFKTsKQEAgLTM5NywyMyArMzk4LDE0IEBACiAJaW5vZGUgPSByb21mc19pZ2V0KGRpci0+aV9zYiwgb2Zmc2V0KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQlyZXMgPSBQVFJfRVJSKGlub2RlKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JLyoKLQkgKiBpdCdzIGEgYml0IGZ1bmt5LCBfbG9va3VwIG5lZWRzIHRvIHJldHVybiBhbiBlcnJvciBjb2RlCi0JICogKG5lZ2F0aXZlKSBvciBhIE5VTEwsIGJvdGggYXMgYSBkZW50cnkuICBFTk9FTlQgc2hvdWxkIG5vdAotCSAqIGJlIHJldHVybmVkLCBpbnN0ZWFkIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmVnYXRpdmUgZGVudHJ5IGJ5Ci0JICogZF9hZGQoZGVudHJ5LCBOVUxMKTsgYW5kIHJldHVybiAwIGFzIG5vIGVycm9yLgotCSAqIChBbHRob3VnaCBhcyBJIHNlZSwgaXQgb25seSBtYXR0ZXJzIG9uIHdyaXRhYmxlIGZpbGUKLQkgKiBzeXN0ZW1zKS4KLQkgKi8KLQotb3V0MDoJaW5vZGUgPSBOVUxMOworc3VjY2VzczoKKwlkX2FkZChkZW50cnksIGlub2RlKTsKIAlyZXMgPSAwOwotCWRfYWRkIChkZW50cnksIGlub2RlKTsKLQotb3V0Ogl1bmxvY2tfa2VybmVsKCk7CitlcnJvcjoKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIEVSUl9QVFIocmVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCA1NjMzZmU5Li4wMGY1OGM1IDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCXdhaXQgPSBOVUxMOwogCQlpZiAocmV0dmFsIHx8ICEqdGltZW91dCB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwotCQlpZih0YWJsZS5lcnJvcikgeworCQlpZiAodGFibGUuZXJyb3IpIHsKIAkJCXJldHZhbCA9IHRhYmxlLmVycm9yOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3NpZ25hbGZkLmMgYi9mcy9zaWduYWxmZC5jCmluZGV4IGNiMmI2M2EuLjhlYWQwZGIgMTAwNjQ0Ci0tLSBhL2ZzL3NpZ25hbGZkLmMKKysrIGIvZnMvc2lnbmFsZmQuYwpAQCAtMTExLDkgKzExMSwxNCBAQAogCQllcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfdWlkLCAmdWluZm8tPnNzaV91aWQpOwogCQllcnIgfD0gX19wdXRfdXNlcigobG9uZykga2luZm8tPnNpX3B0ciwgJnVpbmZvLT5zc2lfcHRyKTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDogLyogdGhpcyBpcyBqdXN0IGluIGNhc2UgZm9yIG5vdyAuLi4gKi8KKwlkZWZhdWx0OgorCQkvKgorCQkgKiBUaGlzIGNhc2UgY2F0Y2hlcyBhbHNvIHRoZSBzaWduYWxzIHF1ZXVlZCBieSBzaWdxdWV1ZSgpLgorCQkgKi8KIAkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX3BpZCwgJnVpbmZvLT5zc2lfcGlkKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX3VpZCwgJnVpbmZvLT5zc2lfdWlkKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoKGxvbmcpIGtpbmZvLT5zaV9wdHIsICZ1aW5mby0+c3NpX3B0cik7CisJCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV9pbnQsICZ1aW5mby0+c3NpX2ludCk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvc21iZnMvc21iaW9kLmMgYi9mcy9zbWJmcy9zbWJpb2QuYwppbmRleCBmYWU4ZTg1Li42YmQ5YjY5IDEwMDY0NAotLS0gYS9mcy9zbWJmcy9zbWJpb2QuYworKysgYi9mcy9zbWJmcy9zbWJpb2QuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIAlzbWJfY2xvc2Vfc29ja2V0KHNlcnZlcik7CiAKLQlpZiAocGlkID09IDApIHsKKwlpZiAoIXBpZCkgewogCQkvKiBGSVhNRTogdGhpcyBpcyBmYXRhbCwgdW1vdW50PyAqLwogCQlwcmludGsoS0VSTl9FUlIgInNtYl9yZXRyeTogbm8gY29ubmVjdGlvbiBwcm9jZXNzXG4iKTsKIAkJc2VydmVyLT5zdGF0ZSA9IENPTk5fUkVUUklFRDsKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggOWI1NTllZS4uZWViMWE4NiAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKKysrIGIvZnMvc3BsaWNlLmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCQkJCWJyZWFrOwogCiAJCQllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCQkJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAkJCWlmICh1bmxpa2VseShlcnJvcikpIHsKIAkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCQkJaWYgKGVycm9yID09IC1FRVhJU1QpCkBAIC0zNzAsOCArMzcwLDEwIEBACiAJCQkgKiBmb3IgYW4gaW4tZmxpZ2h0IGlvIHBhZ2UKIAkJCSAqLwogCQkJaWYgKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spIHsKLQkJCQlpZiAoVGVzdFNldFBhZ2VMb2NrZWQocGFnZSkpCisJCQkJaWYgKFRlc3RTZXRQYWdlTG9ja2VkKHBhZ2UpKSB7CisJCQkJCWVycm9yID0gLUVBR0FJTjsKIAkJCQkJYnJlYWs7CisJCQkJfQogCQkJfSBlbHNlCiAJCQkJbG9ja19wYWdlKHBhZ2UpOwogCkBAIC00NzksOSArNDgxLDggQEAKIAkJCQkgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwKIAkJCQkgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXNzaXplX3Qgc3BsaWNlZDsKLQlpbnQgcmV0OwogCWxvZmZfdCBpc2l6ZSwgbGVmdDsKKwlpbnQgcmV0OwogCiAJaXNpemUgPSBpX3NpemVfcmVhZChpbi0+Zl9tYXBwaW5nLT5ob3N0KTsKIAlpZiAodW5saWtlbHkoKnBwb3MgPj0gaXNpemUpKQpAQCAtNDkxLDI5ICs0OTIsOSBAQAogCWlmICh1bmxpa2VseShsZWZ0IDwgbGVuKSkKIAkJbGVuID0gbGVmdDsKIAotCXJldCA9IDA7Ci0Jc3BsaWNlZCA9IDA7Ci0Jd2hpbGUgKGxlbiAmJiAhc3BsaWNlZCkgewotCQlyZXQgPSBfX2dlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbiwgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7Ci0KLQkJaWYgKHJldCA8IDApCi0JCQlicmVhazsKLQkJZWxzZSBpZiAoIXJldCkgewotCQkJaWYgKHNwbGljZWQpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykgewotCQkJCXJldCA9IC1FQUdBSU47Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQorCXJldCA9IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzKTsKKwlpZiAocmV0ID4gMCkKIAkJKnBwb3MgKz0gcmV0OwotCQlsZW4gLT0gcmV0OwotCQlzcGxpY2VkICs9IHJldDsKLQl9Ci0KLQlpZiAoc3BsaWNlZCkKLQkJcmV0dXJuIHNwbGljZWQ7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTY2OSw2ICsxNjUwLDEzIEBACiAJCWkrKzsKIAl9IHdoaWxlIChsZW4pOwogCisJLyoKKwkgKiByZXR1cm4gRUFHQUlOIGlmIHdlIGhhdmUgdGhlIHBvdGVudGlhbCBvZiBzb21lIGRhdGEgaW4gdGhlCisJICogZnV0dXJlLCBvdGhlcndpc2UganVzdCByZXR1cm4gMAorCSAqLworCWlmICghcmV0ICYmIGlwaXBlLT53YWl0aW5nX3dyaXRlcnMgJiYgKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spKQorCQlyZXQgPSAtRUFHQUlOOworCiAJaW5vZGVfZG91YmxlX3VubG9jayhpcGlwZS0+aW5vZGUsIG9waXBlLT5pbm9kZSk7CiAKIAkvKgpAQCAtMTcwOSwxMSArMTY5Nyw4IEBACiAJCXJldCA9IGxpbmtfaXBpcGVfcHJlcChpcGlwZSwgZmxhZ3MpOwogCQlpZiAoIXJldCkgewogCQkJcmV0ID0gbGlua19vcGlwZV9wcmVwKG9waXBlLCBmbGFncyk7Ci0JCQlpZiAoIXJldCkgeworCQkJaWYgKCFyZXQpCiAJCQkJcmV0ID0gbGlua19waXBlKGlwaXBlLCBvcGlwZSwgbGVuLCBmbGFncyk7Ci0JCQkJaWYgKCFyZXQgJiYgKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spKQotCQkJCQlyZXQgPSAtRUFHQUlOOwotCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA4ODgxMWY2Li4xZjhmMDVlIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogCkBAIC01NTYsMjEgKzU1Nyw0MCBAQAogfQogCiAvKioKLSAqCW1hcmtfZmlsZXNfcm8KKyAqCW1hcmtfZmlsZXNfcm8gLSBtYXJrIGFsbCBmaWxlcyByZWFkLW9ubHkKICAqCUBzYjogc3VwZXJibG9jayBpbiBxdWVzdGlvbgogICoKLSAqCUFsbCBmaWxlcyBhcmUgbWFya2VkIHJlYWQvb25seS4gIFdlIGRvbid0IGNhcmUgYWJvdXQgcGVuZGluZwotICoJZGVsZXRlIGZpbGVzIHNvIHRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gJ2ZvcmNlJyBtb2RlIG9ubHkKKyAqCUFsbCBmaWxlcyBhcmUgbWFya2VkIHJlYWQtb25seS4gIFdlIGRvbid0IGNhcmUgYWJvdXQgcGVuZGluZworICoJZGVsZXRlIGZpbGVzIHNvIHRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gJ2ZvcmNlJyBtb2RlIG9ubHkuCiAgKi8KIAogc3RhdGljIHZvaWQgbWFya19maWxlc19ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBmaWxlICpmOwogCityZXRyeToKIAlmaWxlX2xpc3RfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJnNiLT5zX2ZpbGVzLCBmX3UuZnVfbGlzdCkgewotCQlpZiAoU19JU1JFRyhmLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmIGZpbGVfY291bnQoZikpCi0JCQlmLT5mX21vZGUgJj0gfkZNT0RFX1dSSVRFOworCQlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKKwkJaWYgKCFTX0lTUkVHKGYtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCSAgICAgICBjb250aW51ZTsKKwkJaWYgKCFmaWxlX2NvdW50KGYpKQorCQkJY29udGludWU7CisJCWlmICghKGYtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKKwkJCWNvbnRpbnVlOworCQlmLT5mX21vZGUgJj0gfkZNT0RFX1dSSVRFOworCQlpZiAoZmlsZV9jaGVja193cml0ZWFibGUoZikgIT0gMCkKKwkJCWNvbnRpbnVlOworCQlmaWxlX3JlbGVhc2Vfd3JpdGUoZik7CisJCW1udCA9IG1udGdldChmLT5mX3BhdGgubW50KTsKKwkJZmlsZV9saXN0X3VubG9jaygpOworCQkvKgorCQkgKiBUaGlzIGNhbiBzbGVlcCwgc28gd2UgY2FuJ3QgaG9sZAorCQkgKiB0aGUgZmlsZV9saXN0X2xvY2soKSBzcGlubG9jay4KKwkJICovCisJCW1udF9kcm9wX3dyaXRlKG1udCk7CisJCW1udHB1dChtbnQpOworCQlnb3RvIHJldHJ5OwogCX0KIAlmaWxlX2xpc3RfdW5sb2NrKCk7CiB9CkBAIC04NzAsMTIgKzg5MCwxMiBAQAogCWlmICghbW50KQogCQlnb3RvIG91dDsKIAotCWlmIChkYXRhKSB7CisJaWYgKGRhdGEgJiYgISh0eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpKSB7CiAJCXNlY2RhdGEgPSBhbGxvY19zZWNkYXRhKCk7CiAJCWlmICghc2VjZGF0YSkKIAkJCWdvdG8gb3V0X21udDsKIAotCQllcnJvciA9IHNlY3VyaXR5X3NiX2NvcHlfZGF0YSh0eXBlLCBkYXRhLCBzZWNkYXRhKTsKKwkJZXJyb3IgPSBzZWN1cml0eV9zYl9jb3B5X2RhdGEoZGF0YSwgc2VjZGF0YSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X2ZyZWVfc2VjZGF0YTsKIAl9CkBAIC05NDUsNiArOTY1LDcgQEAKIAlwdXRfZmlsZXN5c3RlbSh0eXBlKTsKIAlyZXR1cm4gbW50OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZG9fa2Vybl9tb3VudCk7CiAKIHN0cnVjdCB2ZnNtb3VudCAqa2Vybl9tb3VudF9kYXRhKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCB2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCA0OTQ4ZDliLi5hMWMzYTFmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJzeXNmcy5oIgogCiBERUZJTkVfTVVURVgoc3lzZnNfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IGEyNzFjODcuLmFkZTlhN2UgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTEyLDYgKzEyLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC04Niw3ICs4OCwxMiBAQAogCSAqIFRoZSBjb2RlIHdvcmtzIGZpbmUgd2l0aCBQQUdFX1NJWkUgcmV0dXJuIGJ1dCBpdCdzIGxpa2VseSB0bwogCSAqIGluZGljYXRlIHRydW5jYXRlZCByZXN1bHQgb3Igb3ZlcmZsb3cgaW4gbm9ybWFsIHVzZSBjYXNlcy4KIAkgKi8KLQlCVUdfT04oY291bnQgPj0gKHNzaXplX3QpUEFHRV9TSVpFKTsKKwlpZiAoY291bnQgPj0gKHNzaXplX3QpUEFHRV9TSVpFKSB7CisJCXByaW50X3N5bWJvbCgiZmlsbF9yZWFkX2J1ZmZlcjogJXMgcmV0dXJuZWQgYmFkIGNvdW50XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpb3BzLT5zaG93KTsKKwkJLyogVHJ5IHRvIHN0cnVnZ2xlIGFsb25nICovCisJCWNvdW50ID0gUEFHRV9TSVpFIC0gMTsKKwl9CiAJaWYgKGNvdW50ID49IDApIHsKIAkJYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwgPSAwOwogCQlidWZmZXItPmNvdW50ID0gY291bnQ7CkBAIC0xMjIsNyArMTI5LDcgQEAKIAlzc2l6ZV90IHJldHZhbCA9IDA7CiAKIAltdXRleF9sb2NrKCZidWZmZXItPm11dGV4KTsKLQlpZiAoYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwpIHsKKwlpZiAoYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwgfHwgKnBwb3MgPT0gMCkgewogCQlyZXR2YWwgPSBmaWxsX3JlYWRfYnVmZmVyKGZpbGUtPmZfcGF0aC5kZW50cnksYnVmZmVyKTsKIAkJaWYgKHJldHZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNDAzLDggKzQxMCw3IEBACiAgKiByZXR1cm4gUE9MTEVSUnxQT0xMUFJJLCBhbmQgc2VsZWN0IHdpbGwgcmV0dXJuIHRoZSBmZCB3aGV0aGVyCiAgKiBpdCBpcyB3YWl0aW5nIGZvciByZWFkLCB3cml0ZSwgb3IgZXhjZXB0aW9ucy4KICAqIE9uY2UgcG9sbC9zZWxlY3QgaW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLCB5b3UKLSAqIG5lZWQgdG8gY2xvc2UgYW5kIHJlLW9wZW4gdGhlIGZpbGUsIGFzIHNpbXBseSBzZWVraW5nIGFuZCByZWFkaW5nCi0gKiBhZ2FpbiB3aWxsIG5vdCBnZXQgbmV3IGRhdGEsIG9yIHJlc2V0IHRoZSBzdGF0ZSBvZiAncG9sbCcuCisgKiBuZWVkIHRvIGNsb3NlIGFuZCByZS1vcGVuIHRoZSBmaWxlLCBvciBzZWVrIHRvIDAgYW5kIHJlYWQgYWdhaW4uCiAgKiBSZW1pbmRlcjogdGhpcyBvbmx5IHdvcmtzIGZvciBhdHRyaWJ1dGVzIHdoaWNoIGFjdGl2ZWx5IHN1cHBvcnQKICAqIGl0LCBhbmQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHRlc3QgYW4gYXR0cmlidXRlIGZyb20gdXNlcnNwYWNlCiAgKiB0byBzZWUgaWYgaXQgc3VwcG9ydHMgcG9sbCAoTmVpdGhlciAncG9sbCcgbm9yICdzZWxlY3QnIHJldHVybgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvc3ltbGluay5jIGIvZnMvc3lzZnMvc3ltbGluay5jCmluZGV4IDVmNjZjNDQuLjgxN2Y1OTYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5bWxpbmsuYworKysgYi9mcy9zeXNmcy9zeW1saW5rLmMKQEAgLTg3LDcgKzg3LDE0IEBACiAKIHZvaWQgc3lzZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBjb25zdCBjaGFyICogbmFtZSkKIHsKLQlzeXNmc19oYXNoX2FuZF9yZW1vdmUoa29iai0+c2QsIG5hbWUpOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKnBhcmVudF9zZCA9IE5VTEw7CisKKwlpZiAoIWtvYmopCisJCXBhcmVudF9zZCA9ICZzeXNmc19yb290OworCWVsc2UKKwkJcGFyZW50X3NkID0ga29iai0+c2Q7CisKKwlzeXNmc19oYXNoX2FuZF9yZW1vdmUocGFyZW50X3NkLCBuYW1lKTsKIH0KIAogc3RhdGljIGludCBzeXNmc19nZXRfdGFyZ2V0X3BhdGgoc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLApkaWZmIC0tZ2l0IGEvZnMvdWZzL2JhbGxvYy5jIGIvZnMvdWZzL2JhbGxvYy5jCmluZGV4IDFmY2EzODEuLjFlNzU5OGYgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9iYWxsb2MuYworKysgYi9mcy91ZnMvYmFsbG9jLmMKQEAgLTMxNSw4ICszMTUsOCBAQAogCQkJfQogCiAJCQlVRlNEKCIgY2hhbmdlIGZyb20gJWxsdSB0byAlbGx1LCBwb3MgJXVcbiIsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcG9zICsgb2xkYiwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3MgKyBuZXdiLCBwb3MpOworCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKShwb3MgKyBvbGRiKSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykocG9zICsgbmV3YiksIHBvcyk7CiAKIAkJCWJoLT5iX2Jsb2NrbnIgPSBuZXdiICsgcG9zOwogCQkJdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YShiaC0+Yl9iZGV2LApkaWZmIC0tZ2l0IGEvZnMvdWZzL3V0aWwuaCBiL2ZzL3Vmcy91dGlsLmgKaW5kZXggYjI2ZmM0ZC4uMjNjZWVkOCAxMDA2NDQKLS0tIGEvZnMvdWZzL3V0aWwuaAorKysgYi9mcy91ZnMvdXRpbC5oCkBAIC01OCw3ICs1OCw3IEBACiB7CiAJc3dpdGNoIChVRlNfU0Ioc2IpLT5zX2ZsYWdzICYgVUZTX1NUX01BU0spIHsKIAljYXNlIFVGU19TVF9TVU5PUzoKLQkJaWYgKGZzMzJfdG9fY3B1KHNiLCB1c2IzLT5mc19wb3N0Ymxmb3JtYXQgPT0gVUZTXzQyUE9TVEJMRk1UKSkgeworCQlpZiAoZnMzMl90b19jcHUoc2IsIHVzYjMtPmZzX3Bvc3RibGZvcm1hdCkgPT0gVUZTXzQyUE9TVEJMRk1UKSB7CiAJCQl1c2IxLT5mc191MC5mc19zdW4uZnNfc3RhdGUgPSBjcHVfdG9fZnMzMihzYiwgdmFsdWUpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3V0aW1lcy5jIGIvZnMvdXRpbWVzLmMKaW5kZXggYjE4ZGE5Yy4uYTJiZWY3NyAxMDA2NDQKLS0tIGEvZnMvdXRpbWVzLmMKKysrIGIvZnMvdXRpbWVzLmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KQEAgLTU5LDYgKzYwLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKIAlzdHJ1Y3QgZmlsZSAqZiA9IE5VTEw7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CiAKIAllcnJvciA9IC1FSU5WQUw7CiAJaWYgKHRpbWVzICYmICghbnNlY192YWxpZCh0aW1lc1swXS50dl9uc2VjKSB8fApAQCAtNzksMTggKzgxLDIwIEBACiAJCWlmICghZikKIAkJCWdvdG8gb3V0OwogCQlkZW50cnkgPSBmLT5mX3BhdGguZGVudHJ5OworCQltbnQgPSBmLT5mX3BhdGgubW50OwogCX0gZWxzZSB7CiAJCWVycm9yID0gX191c2VyX3dhbGtfZmQoZGZkLCBmaWxlbmFtZSwgKGZsYWdzICYgQVRfU1lNTElOS19OT0ZPTExPVykgPyAwIDogTE9PS1VQX0ZPTExPVywgJm5kKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CiAKIAkJZGVudHJ5ID0gbmQucGF0aC5kZW50cnk7CisJCW1udCA9IG5kLnBhdGgubW50OwogCX0KIAogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCi0JZXJyb3IgPSAtRVJPRlM7Ci0JaWYgKElTX1JET05MWShpbm9kZSkpCisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShtbnQpOworCWlmIChlcnJvcikKIAkJZ290byBkcHV0X2FuZF9vdXQ7CiAKIAkvKiBEb24ndCB3b3JyeSwgdGhlIGNoZWNrcyBhcmUgZG9uZSBpbiBpbm9kZV9jaGFuZ2Vfb2soKSAqLwpAQCAtOTgsNyArMTAyLDcgQEAKIAlpZiAodGltZXMpIHsKIAkJZXJyb3IgPSAtRVBFUk07CiAgICAgICAgICAgICAgICAgaWYgKElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZHB1dF9hbmRfb3V0OworCQkJZ290byBtbnRfZHJvcF93cml0ZV9hbmRfb3V0OwogCiAJCWlmICh0aW1lc1swXS50dl9uc2VjID09IFVUSU1FX09NSVQpCiAJCQluZXdhdHRycy5pYV92YWxpZCAmPSB+QVRUUl9BVElNRTsKQEAgLTExOCwyMiArMTIyLDI0IEBACiAJfSBlbHNlIHsKIAkJZXJyb3IgPSAtRUFDQ0VTOwogICAgICAgICAgICAgICAgIGlmIChJU19JTU1VVEFCTEUoaW5vZGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkcHV0X2FuZF9vdXQ7CisJCQlnb3RvIG1udF9kcm9wX3dyaXRlX2FuZF9vdXQ7CiAKIAkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKSB7CiAJCQlpZiAoZikgewogCQkJCWlmICghKGYtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKLQkJCQkJZ290byBkcHV0X2FuZF9vdXQ7CisJCQkJCWdvdG8gbW50X2Ryb3Bfd3JpdGVfYW5kX291dDsKIAkJCX0gZWxzZSB7CiAJCQkJZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSk7CiAJCQkJaWYgKGVycm9yKQotCQkJCQlnb3RvIGRwdXRfYW5kX291dDsKKwkJCQkJZ290byBtbnRfZHJvcF93cml0ZV9hbmRfb3V0OwogCQkJfQogCQl9CiAJfQogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAllcnJvciA9IG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworbW50X2Ryb3Bfd3JpdGVfYW5kX291dDoKKwltbnRfZHJvcF93cml0ZShtbnQpOwogZHB1dF9hbmRfb3V0OgogCWlmIChmKQogCQlmcHV0KGYpOwpkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggM2FjYWIxNi4uZjcwNjJkYSAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CkBAIC0zMiw4ICszMyw2IEBACiAJICogZmlsZXN5c3RlbSAgb3Igb24gYW4gaW1tdXRhYmxlIC8gYXBwZW5kLW9ubHkgaW5vZGUuCiAJICovCiAJaWYgKG1hc2sgJiBNQVlfV1JJVEUpIHsKLQkJaWYgKElTX1JET05MWShpbm9kZSkpCi0JCQlyZXR1cm4gLUVST0ZTOwogCQlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAl9CkBAIC0yNjIsNyArMjYxLDExIEBACiAJZXJyb3IgPSB1c2VyX3BhdGhfd2FsayhwYXRoLCAmbmQpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCWVycm9yID0gc2V0eGF0dHIobmQucGF0aC5kZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CisJaWYgKCFlcnJvcikgeworCQllcnJvciA9IHNldHhhdHRyKG5kLnBhdGguZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CisJfQogCXBhdGhfcHV0KCZuZC5wYXRoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNzcsNyArMjgwLDExIEBACiAJZXJyb3IgPSB1c2VyX3BhdGhfd2Fsa19saW5rKHBhdGgsICZuZCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSBzZXR4YXR0cihuZC5wYXRoLmRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoIWVycm9yKSB7CisJCWVycm9yID0gc2V0eGF0dHIobmQucGF0aC5kZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CisJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKKwl9CiAJcGF0aF9wdXQoJm5kLnBhdGgpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI5NSw3ICszMDIsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCWRlbnRyeSA9IGYtPmZfcGF0aC5kZW50cnk7CiAJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5KTsKLQllcnJvciA9IHNldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKGYtPmZfcGF0aC5tbnQpOworCWlmICghZXJyb3IpIHsKKwkJZXJyb3IgPSBzZXR4YXR0cihkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CisJCW1udF9kcm9wX3dyaXRlKGYtPmZfcGF0aC5tbnQpOworCX0KK291dF9mcHV0OgogCWZwdXQoZik7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNDgyLDcgKzQ5NCwxMSBAQAogCWVycm9yID0gdXNlcl9wYXRoX3dhbGsocGF0aCwgJm5kKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQllcnJvciA9IHJlbW92ZXhhdHRyKG5kLnBhdGguZGVudHJ5LCBuYW1lKTsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwlpZiAoIWVycm9yKSB7CisJCWVycm9yID0gcmVtb3ZleGF0dHIobmQucGF0aC5kZW50cnksIG5hbWUpOworCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CisJfQogCXBhdGhfcHV0KCZuZC5wYXRoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC00OTYsNyArNTEyLDExIEBACiAJZXJyb3IgPSB1c2VyX3BhdGhfd2Fsa19saW5rKHBhdGgsICZuZCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSByZW1vdmV4YXR0cihuZC5wYXRoLmRlbnRyeSwgbmFtZSk7CisJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CisJaWYgKCFlcnJvcikgeworCQllcnJvciA9IHJlbW92ZXhhdHRyKG5kLnBhdGguZGVudHJ5LCBuYW1lKTsKKwkJbW50X2Ryb3Bfd3JpdGUobmQucGF0aC5tbnQpOworCX0KIAlwYXRoX3B1dCgmbmQucGF0aCk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNTEzLDcgKzUzMywxMSBAQAogCQlyZXR1cm4gZXJyb3I7CiAJZGVudHJ5ID0gZi0+Zl9wYXRoLmRlbnRyeTsKIAlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnkpOwotCWVycm9yID0gcmVtb3ZleGF0dHIoZGVudHJ5LCBuYW1lKTsKKwllcnJvciA9IG1udF93YW50X3dyaXRlKGYtPmZfcGF0aC5tbnQpOworCWlmICghZXJyb3IpIHsKKwkJZXJyb3IgPSByZW1vdmV4YXR0cihkZW50cnksIG5hbWUpOworCQltbnRfZHJvcF93cml0ZShmLT5mX3BhdGgubW50KTsKKwl9CiAJZnB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvS2J1aWxkIGIvZnMveGZzL0tidWlsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2NmU5Ni4uMDAwMDAwMAotLS0gYS9mcy94ZnMvS2J1aWxkCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jCi0jIFRoZSB4ZnMgcGVvcGxlIGxpa2UgdG8gc2hhcmUgTWFrZWZpbGUgd2l0aCAyLjYgYW5kIDIuNC4KLSMgVXRpbGlzZSBmaWxlIG5hbWVkIEtidWlsZCBmaWxlIHdoaWNoIGhhcyBwcmVjZWRlbmNlIG92ZXIgTWFrZWZpbGUuCi0jCi0KLWluY2x1ZGUgJChzcmN0cmVlKS8kKG9iaikvTWFrZWZpbGUtbGludXgtMi42CmRpZmYgLS1naXQgYS9mcy94ZnMvS2NvbmZpZyBiL2ZzL3hmcy9LY29uZmlnCmluZGV4IDM1MTE1YmMuLjUyNDAyMWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9LY29uZmlnCisrKyBiL2ZzL3hmcy9LY29uZmlnCkBAIC0zNSwxOCArMzUsNiBAQAogCSAgd2l0aCBvciB3aXRob3V0IHRoZSBnZW5lcmljIHF1b3RhIHN1cHBvcnQgZW5hYmxlZCAoQ09ORklHX1FVT1RBKSAtCiAJICB0aGV5IGFyZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IHN1YnN5c3RlbXMuCiAKLWNvbmZpZyBYRlNfU0VDVVJJVFkKLQlib29sICJYRlMgU2VjdXJpdHkgTGFiZWwgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFhGU19GUwotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXNwYWNlIGZvciBpbm9kZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBYRlMgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgaW5vZGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQogY29uZmlnIFhGU19QT1NJWF9BQ0wKIAlib29sICJYRlMgUE9TSVggQUNMIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBYRlNfRlMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA0OWUzZTdlLi4zNmVjNjE0IDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKKysrIGIvZnMveGZzL01ha2VmaWxlCkBAIC0xICsxLDExNyBAQAotaW5jbHVkZSAkKFRPUERJUikvZnMveGZzL01ha2VmaWxlLWxpbnV4LSQoVkVSU0lPTikuJChQQVRDSExFVkVMKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyMKKworRVhUUkFfQ0ZMQUdTICs9CSAtSSQoc3JjKSAtSSQoc3JjKS9saW51eC0yLjYgLWZ1bnNpZ25lZC1jaGFyCisKK1hGU19MSU5VWCA6PSBsaW51eC0yLjYKKworaWZlcSAoJChDT05GSUdfWEZTX0RFQlVHKSx5KQorCUVYVFJBX0NGTEFHUyArPSAtZworZW5kaWYKKworb2JqLSQoQ09ORklHX1hGU19GUykJCSs9IHhmcy5vCisKK3hmcy0kKENPTkZJR19YRlNfUVVPVEEpCQkrPSAkKGFkZHByZWZpeCBxdW90YS8sIFwKKwkJCQkgICB4ZnNfZHF1b3QubyBcCisJCQkJICAgeGZzX2RxdW90X2l0ZW0ubyBcCisJCQkJICAgeGZzX3RyYW5zX2RxdW90Lm8gXAorCQkJCSAgIHhmc19xbV9zeXNjYWxscy5vIFwKKwkJCQkgICB4ZnNfcW1fYmh2Lm8gXAorCQkJCSAgIHhmc19xbS5vKQorCitpZmVxICgkKENPTkZJR19YRlNfUVVPVEEpLHkpCit4ZnMtJChDT05GSUdfUFJPQ19GUykJCSs9IHF1b3RhL3hmc19xbV9zdGF0cy5vCitlbmRpZgorCit4ZnMtJChDT05GSUdfWEZTX1JUKQkJKz0geGZzX3J0YWxsb2MubworeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpCSs9IHhmc19hY2wubworeGZzLSQoQ09ORklHX1BST0NfRlMpCQkrPSAkKFhGU19MSU5VWCkveGZzX3N0YXRzLm8KK3hmcy0kKENPTkZJR19TWVNDVEwpCQkrPSAkKFhGU19MSU5VWCkveGZzX3N5c2N0bC5vCit4ZnMtJChDT05GSUdfQ09NUEFUKQkJKz0gJChYRlNfTElOVVgpL3hmc19pb2N0bDMyLm8KKworCit4ZnMteQkJCQkrPSB4ZnNfYWxsb2MubyBcCisJCQkJICAgeGZzX2FsbG9jX2J0cmVlLm8gXAorCQkJCSAgIHhmc19hdHRyLm8gXAorCQkJCSAgIHhmc19hdHRyX2xlYWYubyBcCisJCQkJICAgeGZzX2JpdC5vIFwKKwkJCQkgICB4ZnNfYm1hcC5vIFwKKwkJCQkgICB4ZnNfYm1hcF9idHJlZS5vIFwKKwkJCQkgICB4ZnNfYnRyZWUubyBcCisJCQkJICAgeGZzX2J1Zl9pdGVtLm8gXAorCQkJCSAgIHhmc19kYV9idHJlZS5vIFwKKwkJCQkgICB4ZnNfZGlyMi5vIFwKKwkJCQkgICB4ZnNfZGlyMl9ibG9jay5vIFwKKwkJCQkgICB4ZnNfZGlyMl9kYXRhLm8gXAorCQkJCSAgIHhmc19kaXIyX2xlYWYubyBcCisJCQkJICAgeGZzX2RpcjJfbm9kZS5vIFwKKwkJCQkgICB4ZnNfZGlyMl9zZi5vIFwKKwkJCQkgICB4ZnNfZXJyb3IubyBcCisJCQkJICAgeGZzX2V4dGZyZWVfaXRlbS5vIFwKKwkJCQkgICB4ZnNfZmlsZXN0cmVhbS5vIFwKKwkJCQkgICB4ZnNfZnNvcHMubyBcCisJCQkJICAgeGZzX2lhbGxvYy5vIFwKKwkJCQkgICB4ZnNfaWFsbG9jX2J0cmVlLm8gXAorCQkJCSAgIHhmc19pZ2V0Lm8gXAorCQkJCSAgIHhmc19pbm9kZS5vIFwKKwkJCQkgICB4ZnNfaW5vZGVfaXRlbS5vIFwKKwkJCQkgICB4ZnNfaW9tYXAubyBcCisJCQkJICAgeGZzX2l0YWJsZS5vIFwKKwkJCQkgICB4ZnNfZGZyYWcubyBcCisJCQkJICAgeGZzX2xvZy5vIFwKKwkJCQkgICB4ZnNfbG9nX3JlY292ZXIubyBcCisJCQkJICAgeGZzX21vdW50Lm8gXAorCQkJCSAgIHhmc19tcnVfY2FjaGUubyBcCisJCQkJICAgeGZzX3JlbmFtZS5vIFwKKwkJCQkgICB4ZnNfdHJhbnMubyBcCisJCQkJICAgeGZzX3RyYW5zX2FpbC5vIFwKKwkJCQkgICB4ZnNfdHJhbnNfYnVmLm8gXAorCQkJCSAgIHhmc190cmFuc19leHRmcmVlLm8gXAorCQkJCSAgIHhmc190cmFuc19pbm9kZS5vIFwKKwkJCQkgICB4ZnNfdHJhbnNfaXRlbS5vIFwKKwkJCQkgICB4ZnNfdXRpbHMubyBcCisJCQkJICAgeGZzX3Zmc29wcy5vIFwKKwkJCQkgICB4ZnNfdm5vZGVvcHMubyBcCisJCQkJICAgeGZzX3J3Lm8gXAorCQkJCSAgIHhmc19kbW9wcy5vIFwKKwkJCQkgICB4ZnNfcW1vcHMubworCit4ZnMtJChDT05GSUdfWEZTX1RSQUNFKQkJKz0geGZzX2RpcjJfdHJhY2UubworCisjIE9iamVjdHMgaW4gbGludXgvCit4ZnMteQkJCQkrPSAkKGFkZHByZWZpeCAkKFhGU19MSU5VWCkvLCBcCisJCQkJICAga21lbS5vIFwKKwkJCQkgICB4ZnNfYW9wcy5vIFwKKwkJCQkgICB4ZnNfYnVmLm8gXAorCQkJCSAgIHhmc19leHBvcnQubyBcCisJCQkJICAgeGZzX2ZpbGUubyBcCisJCQkJICAgeGZzX2ZzX3N1YnIubyBcCisJCQkJICAgeGZzX2dsb2JhbHMubyBcCisJCQkJICAgeGZzX2lvY3RsLm8gXAorCQkJCSAgIHhmc19pb3BzLm8gXAorCQkJCSAgIHhmc19scncubyBcCisJCQkJICAgeGZzX3N1cGVyLm8gXAorCQkJCSAgIHhmc192bm9kZS5vKQorCisjIE9iamVjdHMgaW4gc3VwcG9ydC8KK3hmcy15CQkJCSs9ICQoYWRkcHJlZml4IHN1cHBvcnQvLCBcCisJCQkJICAgZGVidWcubyBcCisJCQkJICAgdXVpZC5vKQorCit4ZnMtJChDT05GSUdfWEZTX1RSQUNFKQkJKz0gc3VwcG9ydC9rdHJhY2UubworCmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUtbGludXgtMi42IGIvZnMveGZzL01ha2VmaWxlLWxpbnV4LTIuNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTczMTY0NS4uMDAwMDAwMAotLS0gYS9mcy94ZnMvTWFrZWZpbGUtbGludXgtMi42CisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotIyBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0jIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0jCi0KLUVYVFJBX0NGTEFHUyArPQkgLUlmcy94ZnMgLUlmcy94ZnMvbGludXgtMi42IC1mdW5zaWduZWQtY2hhcgotCi1YRlNfTElOVVggOj0gbGludXgtMi42Ci0KLWlmZXEgKCQoQ09ORklHX1hGU19ERUJVRykseSkKLQlFWFRSQV9DRkxBR1MgKz0gLWcKLWVuZGlmCi0KLW9iai0kKENPTkZJR19YRlNfRlMpCQkrPSB4ZnMubwotCi14ZnMtJChDT05GSUdfWEZTX1FVT1RBKQkJKz0gJChhZGRwcmVmaXggcXVvdGEvLCBcCi0JCQkJICAgeGZzX2RxdW90Lm8gXAotCQkJCSAgIHhmc19kcXVvdF9pdGVtLm8gXAotCQkJCSAgIHhmc190cmFuc19kcXVvdC5vIFwKLQkJCQkgICB4ZnNfcW1fc3lzY2FsbHMubyBcCi0JCQkJICAgeGZzX3FtX2Jodi5vIFwKLQkJCQkgICB4ZnNfcW0ubykKLQotaWZlcSAoJChDT05GSUdfWEZTX1FVT1RBKSx5KQoteGZzLSQoQ09ORklHX1BST0NfRlMpCQkrPSBxdW90YS94ZnNfcW1fc3RhdHMubwotZW5kaWYKLQoteGZzLSQoQ09ORklHX1hGU19SVCkJCSs9IHhmc19ydGFsbG9jLm8KLXhmcy0kKENPTkZJR19YRlNfUE9TSVhfQUNMKQkrPSB4ZnNfYWNsLm8KLXhmcy0kKENPTkZJR19QUk9DX0ZTKQkJKz0gJChYRlNfTElOVVgpL3hmc19zdGF0cy5vCi14ZnMtJChDT05GSUdfU1lTQ1RMKQkJKz0gJChYRlNfTElOVVgpL3hmc19zeXNjdGwubwoteGZzLSQoQ09ORklHX0NPTVBBVCkJCSs9ICQoWEZTX0xJTlVYKS94ZnNfaW9jdGwzMi5vCi0KLQoteGZzLXkJCQkJKz0geGZzX2FsbG9jLm8gXAotCQkJCSAgIHhmc19hbGxvY19idHJlZS5vIFwKLQkJCQkgICB4ZnNfYXR0ci5vIFwKLQkJCQkgICB4ZnNfYXR0cl9sZWFmLm8gXAotCQkJCSAgIHhmc19iaXQubyBcCi0JCQkJICAgeGZzX2JtYXAubyBcCi0JCQkJICAgeGZzX2JtYXBfYnRyZWUubyBcCi0JCQkJICAgeGZzX2J0cmVlLm8gXAotCQkJCSAgIHhmc19idWZfaXRlbS5vIFwKLQkJCQkgICB4ZnNfZGFfYnRyZWUubyBcCi0JCQkJICAgeGZzX2RpcjIubyBcCi0JCQkJICAgeGZzX2RpcjJfYmxvY2subyBcCi0JCQkJICAgeGZzX2RpcjJfZGF0YS5vIFwKLQkJCQkgICB4ZnNfZGlyMl9sZWFmLm8gXAotCQkJCSAgIHhmc19kaXIyX25vZGUubyBcCi0JCQkJICAgeGZzX2RpcjJfc2YubyBcCi0JCQkJICAgeGZzX2Vycm9yLm8gXAotCQkJCSAgIHhmc19leHRmcmVlX2l0ZW0ubyBcCi0JCQkJICAgeGZzX2ZpbGVzdHJlYW0ubyBcCi0JCQkJICAgeGZzX2Zzb3BzLm8gXAotCQkJCSAgIHhmc19pYWxsb2MubyBcCi0JCQkJICAgeGZzX2lhbGxvY19idHJlZS5vIFwKLQkJCQkgICB4ZnNfaWdldC5vIFwKLQkJCQkgICB4ZnNfaW5vZGUubyBcCi0JCQkJICAgeGZzX2lub2RlX2l0ZW0ubyBcCi0JCQkJICAgeGZzX2lvbWFwLm8gXAotCQkJCSAgIHhmc19pdGFibGUubyBcCi0JCQkJICAgeGZzX2RmcmFnLm8gXAotCQkJCSAgIHhmc19sb2cubyBcCi0JCQkJICAgeGZzX2xvZ19yZWNvdmVyLm8gXAotCQkJCSAgIHhmc19tb3VudC5vIFwKLQkJCQkgICB4ZnNfbXJ1X2NhY2hlLm8gXAotCQkJCSAgIHhmc19yZW5hbWUubyBcCi0JCQkJICAgeGZzX3RyYW5zLm8gXAotCQkJCSAgIHhmc190cmFuc19haWwubyBcCi0JCQkJICAgeGZzX3RyYW5zX2J1Zi5vIFwKLQkJCQkgICB4ZnNfdHJhbnNfZXh0ZnJlZS5vIFwKLQkJCQkgICB4ZnNfdHJhbnNfaW5vZGUubyBcCi0JCQkJICAgeGZzX3RyYW5zX2l0ZW0ubyBcCi0JCQkJICAgeGZzX3V0aWxzLm8gXAotCQkJCSAgIHhmc192ZnNvcHMubyBcCi0JCQkJICAgeGZzX3Zub2Rlb3BzLm8gXAotCQkJCSAgIHhmc19ydy5vIFwKLQkJCQkgICB4ZnNfZG1vcHMubyBcCi0JCQkJICAgeGZzX3Ftb3BzLm8KLQoteGZzLSQoQ09ORklHX1hGU19UUkFDRSkJCSs9IHhmc19kaXIyX3RyYWNlLm8KLQotIyBPYmplY3RzIGluIGxpbnV4LwoteGZzLXkJCQkJKz0gJChhZGRwcmVmaXggJChYRlNfTElOVVgpLywgXAotCQkJCSAgIGttZW0ubyBcCi0JCQkJICAgeGZzX2FvcHMubyBcCi0JCQkJICAgeGZzX2J1Zi5vIFwKLQkJCQkgICB4ZnNfZXhwb3J0Lm8gXAotCQkJCSAgIHhmc19maWxlLm8gXAotCQkJCSAgIHhmc19mc19zdWJyLm8gXAotCQkJCSAgIHhmc19nbG9iYWxzLm8gXAotCQkJCSAgIHhmc19pb2N0bC5vIFwKLQkJCQkgICB4ZnNfaW9wcy5vIFwKLQkJCQkgICB4ZnNfbHJ3Lm8gXAotCQkJCSAgIHhmc19zdXBlci5vIFwKLQkJCQkgICB4ZnNfdm5vZGUubykKLQotIyBPYmplY3RzIGluIHN1cHBvcnQvCi14ZnMteQkJCQkrPSAkKGFkZHByZWZpeCBzdXBwb3J0LywgXAotCQkJCSAgIGRlYnVnLm8gXAotCQkJCSAgIHV1aWQubykKLQoteGZzLSQoQ09ORklHX1hGU19UUkFDRSkJCSs9IHN1cHBvcnQva3RyYWNlLm8KLQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwppbmRleCBlMDQwZjFjLi45YjFiYjE3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYworKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwpAQCAtMzcsNyArMzcsNyBAQAogI2lmZGVmIERFQlVHCiAJaWYgKHVubGlrZWx5KCEoZmxhZ3MgJiBLTV9MQVJHRSkgJiYgKHNpemUgPiBQQUdFX1NJWkUpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJMYXJnZSAlcyBhdHRlbXB0LCBzaXplPSVsZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgKGxvbmcpc2l6ZSk7CisJCQlfX2Z1bmNfXywgKGxvbmcpc2l6ZSk7CiAJCWR1bXBfc3RhY2soKTsKIAl9CiAjZW5kaWYKQEAgLTUyLDcgKzUyLDcgQEAKIAkJaWYgKCEoKytyZXRyaWVzICUgMTAwKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiWEZTOiBwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiAiCiAJCQkJCSJkZWFkbG9jayBpbiAlcyAobW9kZToweCV4KVxuIiwKLQkJCQkJX19GVU5DVElPTl9fLCBsZmxhZ3MpOworCQkJCQlfX2Z1bmNfXywgbGZsYWdzKTsKIAkJY29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWi81MCk7CiAJfSB3aGlsZSAoMSk7CiB9CkBAIC0xMjksNyArMTI5LDcgQEAKIAkJaWYgKCEoKytyZXRyaWVzICUgMTAwKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiWEZTOiBwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiAiCiAJCQkJCSJkZWFkbG9jayBpbiAlcyAobW9kZToweCV4KVxuIiwKLQkJCQkJX19GVU5DVElPTl9fLCBsZmxhZ3MpOworCQkJCQlfX2Z1bmNfXywgbGZsYWdzKTsKIAkJY29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWi81MCk7CiAJfSB3aGlsZSAoMSk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3NlbWEuaCBiL2ZzL3hmcy9saW51eC0yLjYvc2VtYS5oCmluZGV4IDIwMDllNmQuLjNhYmU3ZTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYvc2VtYS5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYvc2VtYS5oCkBAIC0yMCw4ICsyMCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKIC8qCiAgKiBzZW1hX3Qgc3RydWN0dXJlIGp1c3QgbWFwcyB0byBzdHJ1Y3Qgc2VtYXBob3JlIGluIExpbnV4IGtlcm5lbC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCBlMDUxOTUyLi5hNTVjM2IyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC0yNDMsOCArMjQzLDEyIEBACiAJc2l6ZV90CQkJc2l6ZSA9IGlvZW5kLT5pb19zaXplOwogCiAJaWYgKGxpa2VseSghaW9lbmQtPmlvX2Vycm9yKSkgewotCQlpZiAoIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQotCQkJeGZzX2lvbWFwX3dyaXRlX3Vud3JpdHRlbihpcCwgb2Zmc2V0LCBzaXplKTsKKwkJaWYgKCFYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgeworCQkJaW50IGVycm9yOworCQkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfdW53cml0dGVuKGlwLCBvZmZzZXQsIHNpemUpOworCQkJaWYgKGVycm9yKQorCQkJCWlvZW5kLT5pb19lcnJvciA9IGVycm9yOworCQl9CiAJCXhmc19zZXRmaWxlc2l6ZShpb2VuZCk7CiAJfQogCXhmc19kZXN0cm95X2lvZW5kKGlvZW5kKTsKQEAgLTE1MzIsOSArMTUzNiw5IEBACiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KFhGU19JKGlub2RlKSk7Ci0JeGZzX3J3bG9jayhpcCwgVlJXTE9DS19SRUFEKTsKKwl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAl4ZnNfZmx1c2hfcGFnZXMoaXAsICh4ZnNfb2ZmX3QpMCwgLTEsIDAsIEZJX1JFTUFQRik7Ci0JeGZzX3J3dW5sb2NrKGlwLCBWUldMT0NLX1JFQUQpOworCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAJcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLCBibG9jaywgeGZzX2dldF9ibG9ja3MpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IGUzNDdiZmQuLjUyZjY4NDYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJIlhGUzogcG9zc2libGUgbWVtb3J5IGFsbG9jYXRpb24gIgogCQkJCQkiZGVhZGxvY2sgaW4gJXMgKG1vZGU6MHgleClcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgZ2ZwX21hc2spOworCQkJCQlfX2Z1bmNfXywgZ2ZwX21hc2spOwogCiAJCQlYRlNfU1RBVFNfSU5DKHhiX3BhZ2VfcmV0cmllcyk7CiAJCQl4ZnNidWZkX3dha2V1cCgwLCBnZnBfbWFzayk7CkBAIC01OTgsNyArNTk4LDcgQEAKIAkJZXJyb3IgPSBfeGZzX2J1Zl9tYXBfcGFnZXMoYnAsIGZsYWdzKTsKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBtYXAgcGFnZXNcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCV9fZnVuY19fKTsKIAkJCWdvdG8gbm9fYnVmZmVyOwogCQl9CiAJfQpAQCAtNzc4LDcgKzc3OCw3IEBACiAJZXJyb3IgPSBfeGZzX2J1Zl9tYXBfcGFnZXMoYnAsIFhCRl9NQVBQRUQpOwogCWlmICh1bmxpa2VseShlcnJvcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBtYXAgcGFnZXNcbiIsCi0JCQkJX19GVU5DVElPTl9fKTsKKwkJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gZmFpbF9mcmVlX21lbTsKIAl9CiAKQEAgLTEwNjAsNyArMTA2MCw3IEBACiAJCWJwLT5iX2ZsYWdzICY9IH4oWEJGX1JFQUQgfCBYQkZfV1JJVEUgfCBYQkZfQVNZTkMpOwogCQlicC0+Yl9mbGFncyB8PSBmbGFncyAmIChYQkZfREVMV1JJIHwgWEJGX0FTWU5DKTsKIAkJeGZzX2J1Zl9kZWx3cmlfcXVldWUoYnAsIDEpOwotCQlyZXR1cm4gc3RhdHVzOworCQlyZXR1cm4gMDsKIAl9CiAKIAlicC0+Yl9mbGFncyAmPSB+KFhCRl9SRUFEIHwgWEJGX1dSSVRFIHwgWEJGX0FTWU5DIHwgWEJGX0RFTFdSSSB8IFwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggYTNkMjA3ZC4uODQxZDc4OCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTM4NywxMSArMzg3LDE1IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB4ZnNfYmR3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCkKKy8qCisgKiBObyBlcnJvciBjYW4gYmUgcmV0dXJuZWQgZnJvbSB4ZnNfYnVmX2lvc3RhcnQgZm9yIGRlbHdyaQorICogYnVmZmVycyBhcyB0aGV5IGFyZSBxdWV1ZWQgYW5kIG5vIEkvTyBpcyBpc3N1ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfYmR3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCkKIHsKIAlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOwogCWJwLT5iX2ZzcHJpdjMgPSBtcDsKLQlyZXR1cm4geGZzX2J1Zl9pb3N0YXJ0KGJwLCBYQkZfREVMV1JJIHwgWEJGX0FTWU5DKTsKKwkodm9pZCl4ZnNfYnVmX2lvc3RhcnQoYnAsIFhCRl9ERUxXUkkgfCBYQkZfQVNZTkMpOwogfQogCiAjZGVmaW5lIFhGU19iZHN0cmF0KGJwKSB4ZnNfYnVmX2lvcmVxdWVzdChicCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2NyZWQuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2NyZWQuaAppbmRleCBlN2YzZGE2Li42NTI3MjFjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19jcmVkLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfY3JlZC5oCkBAIC0zMCw3ICszMCw3IEBACiBleHRlcm4gc3RydWN0IGNyZWQgKnN5c19jcmVkOwogCiAvKiB0aGlzIGlzIGEgaGFjay4uIChhc3N1bWVzIHN5c19jcmVkIGlzIHRoZSBvbmx5IGNyZWRfdCBpbiB0aGUgc3lzdGVtKSAqLwotc3RhdGljIF9faW5saW5lIGludCBjYXBhYmxlX2NyZWQoY3JlZF90ICpjciwgaW50IGNpZCkKK3N0YXRpYyBpbmxpbmUgaW50IGNhcGFibGVfY3JlZChjcmVkX3QgKmNyLCBpbnQgY2lkKQogewogCXJldHVybiAoY3IgPT0gc3lzX2NyZWQpID8gMSA6IGNhcGFibGUoY2lkKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMKaW5kZXggY2E0ZjY2Yy4uMjY1ZjAxNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKKyNpbmNsdWRlICJ4ZnNfZGlyMi5oIgogI2luY2x1ZGUgInhmc19kbWFwaS5oIgogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19leHBvcnQuaCIKQEAgLTMwLDggKzMxLDYgQEAKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfdmZzb3BzLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5IGRvdGRvdCA9IHsgLmRfbmFtZS5uYW1lID0gIi4uIiwgLmRfbmFtZS5sZW4gPSAyLCB9OwotCiAvKgogICogTm90ZSB0aGF0IHdlIG9ubHkgYWNjZXB0IGZpbGVpZHMgd2hpY2ggYXJlIGxvbmcgZW5vdWdoIHJhdGhlciB0aGFuIGFsbG93CiAgKiB0aGUgcGFyZW50IGdlbmVyYXRpb24gbnVtYmVyIHRvIGRlZmF1bHQgdG8gemVyby4gIFhGUyBjb25zaWRlcnMgemVybyBhCkBAIC02Niw3ICs2NSw3IEBACiAJaW50CQkJbGVuOwogCiAJLyogRGlyZWN0b3JpZXMgZG9uJ3QgbmVlZCB0aGVpciBwYXJlbnQgZW5jb2RlZCwgdGhleSBoYXZlICIuLiIgKi8KLQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fCAhY29ubmVjdGFibGUpCiAJCWZpbGVpZF90eXBlID0gRklMRUlEX0lOTzMyX0dFTjsKIAllbHNlCiAJCWZpbGVpZF90eXBlID0gRklMRUlEX0lOTzMyX0dFTl9QQVJFTlQ7CkBAIC0yMTMsMTcgKzIxMiwxNiBAQAogCXN0cnVjdCBkZW50cnkJCSpjaGlsZCkKIHsKIAlpbnQJCQllcnJvcjsKLQliaHZfdm5vZGVfdAkJKmN2cDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSpjaXA7CiAJc3RydWN0IGRlbnRyeQkJKnBhcmVudDsKIAotCWN2cCA9IE5VTEw7Ci0JZXJyb3IgPSB4ZnNfbG9va3VwKFhGU19JKGNoaWxkLT5kX2lub2RlKSwgJmRvdGRvdCwgJmN2cCk7CisJZXJyb3IgPSB4ZnNfbG9va3VwKFhGU19JKGNoaWxkLT5kX2lub2RlKSwgJnhmc19uYW1lX2RvdGRvdCwgJmNpcCk7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkKIAkJcmV0dXJuIEVSUl9QVFIoLWVycm9yKTsKIAotCXBhcmVudCA9IGRfYWxsb2NfYW5vbih2bl90b19pbm9kZShjdnApKTsKKwlwYXJlbnQgPSBkX2FsbG9jX2Fub24oY2lwLT5pX3Zub2RlKTsKIAlpZiAodW5saWtlbHkoIXBhcmVudCkpIHsKLQkJVk5fUkVMRShjdnApOworCQlpcHV0KGNpcC0+aV92bm9kZSk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAlyZXR1cm4gcGFyZW50OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IGVkYWIxZmYuLjA1OTA1MjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTQ2OSwxNiArNDY5LDExIEBACiAJc3RydWN0IGlub2RlCSppbm9kZSkKIHsKIAlzdHJ1Y3QgeGZzX21vdW50ICptcCA9IFhGU19NKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKIAotCWlmICh1bmxpa2VseShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9ETUFQSSkpIHsKLQkJaWYgKERNX0VWRU5UX0VOQUJMRUQoWEZTX0koaW5vZGUpLCBETV9FVkVOVF9SRUFEKSkgewotCQkJYmh2X3Zub2RlX3QgKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7Ci0KLQkJCXJldHVybiAtWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwKLQkJCQkJCXZwLCAwLCAwLCAwLCBOVUxMKTsKLQkJfQotCX0KLQorCWlmICh1bmxpa2VseShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9ETUFQSSkgJiYKKwkgICAgICAgICAgICAgRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfUkVBRCkpCisJCXJldHVybiAtWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgaXAsIDAsIDAsIDAsIE5VTEwpOwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIEhBVkVfRk9QX09QRU5fRVhFQyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCmluZGV4IGFjNmQzNGMuLjFlZWZlNjEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKQEAgLTE3LDE4ICsxNyw3IEBACiAgKi8KICNpbmNsdWRlICJ4ZnMuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgc2l4IGluY2x1ZGVzIGFyZSBuZWVkZWQgc28gdGhhdCB3ZSBjYW4gaW5jbHVkZQotICogeGZzX2lub2RlLmguICBXaGF0IGEgbWVzcy4uCi0gKi8KICNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19pbnVtLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgotCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCiAKIGludCAgZnNfbm9lcnIodm9pZCkgeyByZXR1cm4gMDsgfQpAQCAtNDIsMTEgKzMxLDEwIEBACiAJeGZzX29mZl90CWxhc3QsCiAJaW50CQlmaW9wdCkKIHsKLQliaHZfdm5vZGVfdAkqdnAgPSBYRlNfSVRPVihpcCk7Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX3Zub2RlLT5pX21hcHBpbmc7CiAKLQlpZiAoVk5fQ0FDSEVEKHZwKSkKLQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgZmlyc3QpOworCWlmIChtYXBwaW5nLT5ucnBhZ2VzKQorCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCBmaXJzdCk7CiB9CiAKIGludApAQCAtNTYsMTUgKzQ0LDE0IEBACiAJeGZzX29mZl90CWxhc3QsCiAJaW50CQlmaW9wdCkKIHsKLQliaHZfdm5vZGVfdAkqdnAgPSBYRlNfSVRPVihpcCk7Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX3Zub2RlLT5pX21hcHBpbmc7CiAJaW50CQlyZXQgPSAwOwogCi0JaWYgKFZOX0NBQ0hFRCh2cCkpIHsKKwlpZiAobWFwcGluZy0+bnJwYWdlcykgewogCQl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7Ci0JCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQobWFwcGluZyk7CiAJCWlmICghcmV0KQotCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgZmlyc3QpOworCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgZmlyc3QpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtNzcsMTcgKzY0LDE2IEBACiAJdWludDY0X3QJZmxhZ3MsCiAJaW50CQlmaW9wdCkKIHsKLQliaHZfdm5vZGVfdAkqdnAgPSBYRlNfSVRPVihpcCk7Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX3Zub2RlLT5pX21hcHBpbmc7CiAJaW50CQlyZXQgPSAwOwogCWludAkJcmV0MjsKIAotCWlmIChWTl9ESVJUWSh2cCkpIHsKKwlpZiAobWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKIAkJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lUUlVOQ0FURUQpOwotCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisJCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKIAkJaWYgKGZsYWdzICYgWEZTX0JfQVNZTkMpCiAJCQlyZXR1cm4gcmV0OwotCQlyZXQyID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCXJldDIgPSBmaWxlbWFwX2ZkYXRhd2FpdChtYXBwaW5nKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXQgPSByZXQyOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGE5OTUyZTQuLjRkZGI4NmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNTM1LDggKzUzNSw2IEBACiAJY2hhcgkJCSprYnVmOwogCWludAkJCWVycm9yID0gRUZBVUxUOwogCi0JaWYgKElTX1JET05MWShpbm9kZSkpCi0JCXJldHVybiAtRVJPRlM7CiAJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKIAkJcmV0dXJuIEVQRVJNOwogCWlmIChsZW4gPiBYQVRUUl9TSVpFX01BWCkKQEAgLTU2Miw4ICs1NjAsNiBAQAogCWNoYXIJCQkqbmFtZSwKIAlfX3VpbnQzMl90CQlmbGFncykKIHsKLQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJcmV0dXJuIC1FUk9GUzsKIAlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQogCQlyZXR1cm4gRVBFUk07CiAJcmV0dXJuIHhmc19hdHRyX3JlbW92ZShYRlNfSShpbm9kZSksIG5hbWUsIGZsYWdzKTsKQEAgLTU3Myw2ICs1NjksNyBAQAogeGZzX2F0dHJtdWx0aV9ieV9oYW5kbGUoCiAJeGZzX21vdW50X3QJCSptcCwKIAl2b2lkCQkJX191c2VyICphcmcsCisJc3RydWN0IGZpbGUJCSpwYXJmaWxwLAogCXN0cnVjdCBpbm9kZQkJKnBhcmlub2RlKQogewogCWludAkJCWVycm9yOwpAQCAtNjI2LDEzICs2MjMsMjEgQEAKIAkJCQkJJm9wc1tpXS5hbV9sZW5ndGgsIG9wc1tpXS5hbV9mbGFncyk7CiAJCQlicmVhazsKIAkJY2FzZSBBVFRSX09QX1NFVDoKKwkJCW9wc1tpXS5hbV9lcnJvciA9IG1udF93YW50X3dyaXRlKHBhcmZpbHAtPmZfcGF0aC5tbnQpOworCQkJaWYgKG9wc1tpXS5hbV9lcnJvcikKKwkJCQlicmVhazsKIAkJCW9wc1tpXS5hbV9lcnJvciA9IHhmc19hdHRybXVsdGlfYXR0cl9zZXQoaW5vZGUsCiAJCQkJCWF0dHJfbmFtZSwgb3BzW2ldLmFtX2F0dHJ2YWx1ZSwKIAkJCQkJb3BzW2ldLmFtX2xlbmd0aCwgb3BzW2ldLmFtX2ZsYWdzKTsKKwkJCW1udF9kcm9wX3dyaXRlKHBhcmZpbHAtPmZfcGF0aC5tbnQpOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRUUl9PUF9SRU1PVkU6CisJCQlvcHNbaV0uYW1fZXJyb3IgPSBtbnRfd2FudF93cml0ZShwYXJmaWxwLT5mX3BhdGgubW50KTsKKwkJCWlmIChvcHNbaV0uYW1fZXJyb3IpCisJCQkJYnJlYWs7CiAJCQlvcHNbaV0uYW1fZXJyb3IgPSB4ZnNfYXR0cm11bHRpX2F0dHJfcmVtb3ZlKGlub2RlLAogCQkJCQlhdHRyX25hbWUsIG9wc1tpXS5hbV9mbGFncyk7CisJCQltbnRfZHJvcF93cml0ZShwYXJmaWxwLT5mX3BhdGgubW50KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJb3BzW2ldLmFtX2Vycm9yID0gRUlOVkFMOwpAQCAtNjUxLDMxNCArNjU2LDYgQEAKIAlyZXR1cm4gLWVycm9yOwogfQogCi0vKiBwcm90b3R5cGVzIGZvciBhIGZldyBvZiB0aGUgc3RhY2staHVuZ3J5IGNhc2VzIHRoYXQgaGF2ZQotICogdGhlaXIgb3duIGZ1bmN0aW9ucy4gIEZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhZnRlciB0aGVpciB1c2UKLSAqIHNvIGdjYyBkb2Vzbid0IGdldCBmYW5jeSBhbmQgaW5saW5lIHRoZW0gd2l0aCAtMDMgKi8KLQotU1RBVElDIGludAoteGZzX2lvY19zcGFjZSgKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQlzdHJ1Y3QgZmlsZQkJKmZpbHAsCi0JaW50CQkJZmxhZ3MsCi0JdW5zaWduZWQgaW50CQljbWQsCi0Jdm9pZAkJCV9fdXNlciAqYXJnKTsKLQotU1RBVElDIGludAoteGZzX2lvY19idWxrc3RhdCgKLQl4ZnNfbW91bnRfdAkJKm1wLAotCXVuc2lnbmVkIGludAkJY21kLAotCXZvaWQJCQlfX3VzZXIgKmFyZyk7Ci0KLVNUQVRJQyBpbnQKLXhmc19pb2NfZnNnZW9tZXRyeV92MSgKLQl4ZnNfbW91bnRfdAkJKm1wLAotCXZvaWQJCQlfX3VzZXIgKmFyZyk7Ci0KLVNUQVRJQyBpbnQKLXhmc19pb2NfZnNnZW9tZXRyeSgKLQl4ZnNfbW91bnRfdAkJKm1wLAotCXZvaWQJCQlfX3VzZXIgKmFyZyk7Ci0KLVNUQVRJQyBpbnQKLXhmc19pb2NfeGF0dHIoCi0JeGZzX2lub2RlX3QJCSppcCwKLQlzdHJ1Y3QgZmlsZQkJKmZpbHAsCi0JdW5zaWduZWQgaW50CQljbWQsCi0Jdm9pZAkJCV9fdXNlciAqYXJnKTsKLQotU1RBVElDIGludAoteGZzX2lvY19mc2dldHhhdHRyKAotCXhmc19pbm9kZV90CQkqaXAsCi0JaW50CQkJYXR0ciwKLQl2b2lkCQkJX191c2VyICphcmcpOwotCi1TVEFUSUMgaW50Ci14ZnNfaW9jX2dldGJtYXAoCi0Jc3RydWN0IHhmc19pbm9kZQkqaXAsCi0JaW50CQkJZmxhZ3MsCi0JdW5zaWduZWQgaW50CQljbWQsCi0Jdm9pZAkJCV9fdXNlciAqYXJnKTsKLQotU1RBVElDIGludAoteGZzX2lvY19nZXRibWFweCgKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKLQl2b2lkCQkJX191c2VyICphcmcpOwotCi1pbnQKLXhmc19pb2N0bCgKLQl4ZnNfaW5vZGVfdAkJKmlwLAotCXN0cnVjdCBmaWxlCQkqZmlscCwKLQlpbnQJCQlpb2ZsYWdzLAotCXVuc2lnbmVkIGludAkJY21kLAotCXZvaWQJCQlfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OwotCWludAkJCWVycm9yOwotCi0JeGZzX2l0cmFjZV9lbnRyeShYRlNfSShpbm9kZSkpOwotCXN3aXRjaCAoY21kKSB7Ci0KLQljYXNlIFhGU19JT0NfQUxMT0NTUDoKLQljYXNlIFhGU19JT0NfRlJFRVNQOgotCWNhc2UgWEZTX0lPQ19SRVNWU1A6Ci0JY2FzZSBYRlNfSU9DX1VOUkVTVlNQOgotCWNhc2UgWEZTX0lPQ19BTExPQ1NQNjQ6Ci0JY2FzZSBYRlNfSU9DX0ZSRUVTUDY0OgotCWNhc2UgWEZTX0lPQ19SRVNWU1A2NDoKLQljYXNlIFhGU19JT0NfVU5SRVNWU1A2NDoKLQkJLyoKLQkJICogT25seSBhbGxvdyB0aGUgc3lzIGFkbWluIHRvIHJlc2VydmUgc3BhY2UgdW5sZXNzCi0JCSAqIHVud3JpdHRlbiBleHRlbnRzIGFyZSBlbmFibGVkLgotCQkgKi8KLQkJaWYgKCFYRlNfU0JfVkVSU0lPTl9IQVNFWFRGTEdCSVQoJm1wLT5tX3NiKSAmJgotCQkgICAgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCXJldHVybiB4ZnNfaW9jX3NwYWNlKGlwLCBpbm9kZSwgZmlscCwgaW9mbGFncywgY21kLCBhcmcpOwotCi0JY2FzZSBYRlNfSU9DX0RJT0lORk86IHsKLQkJc3RydWN0IGRpb2F0dHIJZGE7Ci0JCXhmc19idWZ0YXJnX3QJKnRhcmdldCA9Ci0JCQlYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApID8KLQkJCW1wLT5tX3J0ZGV2X3RhcmdwIDogbXAtPm1fZGRldl90YXJncDsKLQotCQlkYS5kX21lbSA9IGRhLmRfbWluaW9zeiA9IDEgPDwgdGFyZ2V0LT5idF9zc2hpZnQ7Ci0JCWRhLmRfbWF4aW9zeiA9IElOVF9NQVggJiB+KGRhLmRfbWluaW9zeiAtIDEpOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZGEsIHNpemVvZihkYSkpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBYRlNfSU9DX0ZTQlVMS1NUQVRfU0lOR0xFOgotCWNhc2UgWEZTX0lPQ19GU0JVTEtTVEFUOgotCWNhc2UgWEZTX0lPQ19GU0lOVU1CRVJTOgotCQlyZXR1cm4geGZzX2lvY19idWxrc3RhdChtcCwgY21kLCBhcmcpOwotCi0JY2FzZSBYRlNfSU9DX0ZTR0VPTUVUUllfVjE6Ci0JCXJldHVybiB4ZnNfaW9jX2ZzZ2VvbWV0cnlfdjEobXAsIGFyZyk7Ci0KLQljYXNlIFhGU19JT0NfRlNHRU9NRVRSWToKLQkJcmV0dXJuIHhmc19pb2NfZnNnZW9tZXRyeShtcCwgYXJnKTsKLQotCWNhc2UgWEZTX0lPQ19HRVRWRVJTSU9OOgotCQlyZXR1cm4gcHV0X3VzZXIoaW5vZGUtPmlfZ2VuZXJhdGlvbiwgKGludCBfX3VzZXIgKilhcmcpOwotCi0JY2FzZSBYRlNfSU9DX0ZTR0VUWEFUVFI6Ci0JCXJldHVybiB4ZnNfaW9jX2ZzZ2V0eGF0dHIoaXAsIDAsIGFyZyk7Ci0JY2FzZSBYRlNfSU9DX0ZTR0VUWEFUVFJBOgotCQlyZXR1cm4geGZzX2lvY19mc2dldHhhdHRyKGlwLCAxLCBhcmcpOwotCWNhc2UgWEZTX0lPQ19HRVRYRkxBR1M6Ci0JY2FzZSBYRlNfSU9DX1NFVFhGTEFHUzoKLQljYXNlIFhGU19JT0NfRlNTRVRYQVRUUjoKLQkJcmV0dXJuIHhmc19pb2NfeGF0dHIoaXAsIGZpbHAsIGNtZCwgYXJnKTsKLQotCWNhc2UgWEZTX0lPQ19GU1NFVERNOiB7Ci0JCXN0cnVjdCBmc2RtaWRhdGEJZG1pOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmZG1pLCBhcmcsIHNpemVvZihkbWkpKSkKLQkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7Ci0KLQkJZXJyb3IgPSB4ZnNfc2V0X2RtYXR0cnMoaXAsIGRtaS5mc2RfZG1ldm1hc2ssCi0JCQkJZG1pLmZzZF9kbXN0YXRlKTsKLQkJcmV0dXJuIC1lcnJvcjsKLQl9Ci0KLQljYXNlIFhGU19JT0NfR0VUQk1BUDoKLQljYXNlIFhGU19JT0NfR0VUQk1BUEE6Ci0JCXJldHVybiB4ZnNfaW9jX2dldGJtYXAoaXAsIGlvZmxhZ3MsIGNtZCwgYXJnKTsKLQotCWNhc2UgWEZTX0lPQ19HRVRCTUFQWDoKLQkJcmV0dXJuIHhmc19pb2NfZ2V0Ym1hcHgoaXAsIGFyZyk7Ci0KLQljYXNlIFhGU19JT0NfRkRfVE9fSEFORExFOgotCWNhc2UgWEZTX0lPQ19QQVRIX1RPX0hBTkRMRToKLQljYXNlIFhGU19JT0NfUEFUSF9UT19GU0hBTkRMRToKLQkJcmV0dXJuIHhmc19maW5kX2hhbmRsZShjbWQsIGFyZyk7Ci0KLQljYXNlIFhGU19JT0NfT1BFTl9CWV9IQU5ETEU6Ci0JCXJldHVybiB4ZnNfb3Blbl9ieV9oYW5kbGUobXAsIGFyZywgZmlscCwgaW5vZGUpOwotCi0JY2FzZSBYRlNfSU9DX0ZTU0VURE1fQllfSEFORExFOgotCQlyZXR1cm4geGZzX2Zzc2V0ZG1fYnlfaGFuZGxlKG1wLCBhcmcsIGlub2RlKTsKLQotCWNhc2UgWEZTX0lPQ19SRUFETElOS19CWV9IQU5ETEU6Ci0JCXJldHVybiB4ZnNfcmVhZGxpbmtfYnlfaGFuZGxlKG1wLCBhcmcsIGlub2RlKTsKLQotCWNhc2UgWEZTX0lPQ19BVFRSTElTVF9CWV9IQU5ETEU6Ci0JCXJldHVybiB4ZnNfYXR0cmxpc3RfYnlfaGFuZGxlKG1wLCBhcmcsIGlub2RlKTsKLQotCWNhc2UgWEZTX0lPQ19BVFRSTVVMVElfQllfSEFORExFOgotCQlyZXR1cm4geGZzX2F0dHJtdWx0aV9ieV9oYW5kbGUobXAsIGFyZywgaW5vZGUpOwotCi0JY2FzZSBYRlNfSU9DX1NXQVBFWFQ6IHsKLQkJZXJyb3IgPSB4ZnNfc3dhcGV4dCgoc3RydWN0IHhmc19zd2FwZXh0IF9fdXNlciAqKWFyZyk7Ci0JCXJldHVybiAtZXJyb3I7Ci0JfQotCi0JY2FzZSBYRlNfSU9DX0ZTQ09VTlRTOiB7Ci0JCXhmc19mc29wX2NvdW50c190IG91dDsKLQotCQllcnJvciA9IHhmc19mc19jb3VudHMobXAsICZvdXQpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gLWVycm9yOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmb3V0LCBzaXplb2Yob3V0KSkpCi0JCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFhGU19JT0NfU0VUX1JFU0JMS1M6IHsKLQkJeGZzX2Zzb3BfcmVzYmxrc190IGlub3V0OwotCQlfX3VpbnQ2NF90CSAgIGluOwotCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbm91dCwgYXJnLCBzaXplb2YoaW5vdXQpKSkKLQkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7Ci0KLQkJLyogaW5wdXQgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiByZXNibGtzIGZpZWxkIG9mIHN0cnVjdHVyZSAqLwotCQlpbiA9IGlub3V0LnJlc2Jsa3M7Ci0JCWVycm9yID0geGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmaW4sICZpbm91dCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiAtZXJyb3I7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZpbm91dCwgc2l6ZW9mKGlub3V0KSkpCi0JCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFhGU19JT0NfR0VUX1JFU0JMS1M6IHsKLQkJeGZzX2Zzb3BfcmVzYmxrc190IG91dDsKLQotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCWVycm9yID0geGZzX3Jlc2VydmVfYmxvY2tzKG1wLCBOVUxMLCAmb3V0KTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIC1lcnJvcjsKLQotCQlpZiAoY29weV90b191c2VyKGFyZywgJm91dCwgc2l6ZW9mKG91dCkpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFhGU19JT0NfRlNHUk9XRlNEQVRBOiB7Ci0JCXhmc19ncm93ZnNfZGF0YV90IGluOwotCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbiwgYXJnLCBzaXplb2YoaW4pKSkKLQkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7Ci0KLQkJZXJyb3IgPSB4ZnNfZ3Jvd2ZzX2RhdGEobXAsICZpbik7Ci0JCXJldHVybiAtZXJyb3I7Ci0JfQotCi0JY2FzZSBYRlNfSU9DX0ZTR1JPV0ZTTE9HOiB7Ci0JCXhmc19ncm93ZnNfbG9nX3QgaW47Ci0KLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoJmluLCBhcmcsIHNpemVvZihpbikpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQotCQllcnJvciA9IHhmc19ncm93ZnNfbG9nKG1wLCAmaW4pOwotCQlyZXR1cm4gLWVycm9yOwotCX0KLQotCWNhc2UgWEZTX0lPQ19GU0dST1dGU1JUOiB7Ci0JCXhmc19ncm93ZnNfcnRfdCBpbjsKLQotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmaW4sIGFyZywgc2l6ZW9mKGluKSkpCi0JCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOwotCi0JCWVycm9yID0geGZzX2dyb3dmc19ydChtcCwgJmluKTsKLQkJcmV0dXJuIC1lcnJvcjsKLQl9Ci0KLQljYXNlIFhGU19JT0NfRlJFRVpFOgotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCWlmIChpbm9kZS0+aV9zYi0+c19mcm96ZW4gPT0gU0JfVU5GUk9aRU4pCi0JCQlmcmVlemVfYmRldihpbm9kZS0+aV9zYi0+c19iZGV2KTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFhGU19JT0NfVEhBVzoKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKGlub2RlLT5pX3NiLT5zX2Zyb3plbiAhPSBTQl9VTkZST1pFTikKLQkJCXRoYXdfYmRldihpbm9kZS0+aV9zYi0+c19iZGV2LCBpbm9kZS0+aV9zYik7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBYRlNfSU9DX0dPSU5HRE9XTjogewotCQlfX3VpbnQzMl90IGluOwotCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJaWYgKGdldF91c2VyKGluLCAoX191aW50MzJfdCBfX3VzZXIgKilhcmcpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQotCQllcnJvciA9IHhmc19mc19nb2luZ2Rvd24obXAsIGluKTsKLQkJcmV0dXJuIC1lcnJvcjsKLQl9Ci0KLQljYXNlIFhGU19JT0NfRVJST1JfSU5KRUNUSU9OOiB7Ci0JCXhmc19lcnJvcl9pbmplY3Rpb25fdCBpbjsKLQotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmaW4sIGFyZywgc2l6ZW9mKGluKSkpCi0JCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOwotCi0JCWVycm9yID0geGZzX2Vycm9ydGFnX2FkZChpbi5lcnJ0YWcsIG1wKTsKLQkJcmV0dXJuIC1lcnJvcjsKLQl9Ci0KLQljYXNlIFhGU19JT0NfRVJST1JfQ0xFQVJBTEw6Ci0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJZXJyb3IgPSB4ZnNfZXJyb3J0YWdfY2xlYXJhbGwobXAsIDEpOwotCQlyZXR1cm4gLWVycm9yOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotfQotCiBTVEFUSUMgaW50CiB4ZnNfaW9jX3NwYWNlKAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLApAQCAtMTE3OSw4NSArODc2LDg1IEBACiB9CiAKIFNUQVRJQyBpbnQKLXhmc19pb2NfeGF0dHIoCit4ZnNfaW9jX2Zzc2V0eGF0dHIoCiAJeGZzX2lub2RlX3QJCSppcCwKIAlzdHJ1Y3QgZmlsZQkJKmZpbHAsCi0JdW5zaWduZWQgaW50CQljbWQsCiAJdm9pZAkJCV9fdXNlciAqYXJnKQogewogCXN0cnVjdCBmc3hhdHRyCQlmYTsKIAlzdHJ1Y3QgYmh2X3ZhdHRyCSp2YXR0cjsKLQlpbnQJCQllcnJvciA9IDA7CisJaW50CQkJZXJyb3I7CiAJaW50CQkJYXR0cl9mbGFnczsKLQl1bnNpZ25lZCBpbnQJCWZsYWdzOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZmYSwgYXJnLCBzaXplb2YoZmEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAl2YXR0ciA9IGttYWxsb2Moc2l6ZW9mKCp2YXR0ciksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghdmF0dHIpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBYRlNfSU9DX0ZTU0VUWEFUVFI6IHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmYSwgYXJnLCBzaXplb2YoZmEpKSkgewotCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KKwlhdHRyX2ZsYWdzID0gMDsKKwlpZiAoZmlscC0+Zl9mbGFncyAmIChPX05ERUxBWXxPX05PTkJMT0NLKSkKKwkJYXR0cl9mbGFncyB8PSBBVFRSX05PTkJMT0NLOwogCi0JCWF0dHJfZmxhZ3MgPSAwOwotCQlpZiAoZmlscC0+Zl9mbGFncyAmIChPX05ERUxBWXxPX05PTkJMT0NLKSkKLQkJCWF0dHJfZmxhZ3MgfD0gQVRUUl9OT05CTE9DSzsKKwl2YXR0ci0+dmFfbWFzayA9IFhGU19BVF9YRkxBR1MgfCBYRlNfQVRfRVhUU0laRSB8IFhGU19BVF9QUk9KSUQ7CisJdmF0dHItPnZhX3hmbGFncyAgPSBmYS5mc3hfeGZsYWdzOworCXZhdHRyLT52YV9leHRzaXplID0gZmEuZnN4X2V4dHNpemU7CisJdmF0dHItPnZhX3Byb2ppZCAgPSBmYS5mc3hfcHJvamlkOwogCi0JCXZhdHRyLT52YV9tYXNrID0gWEZTX0FUX1hGTEFHUyB8IFhGU19BVF9FWFRTSVpFIHwgWEZTX0FUX1BST0pJRDsKLQkJdmF0dHItPnZhX3hmbGFncyAgPSBmYS5mc3hfeGZsYWdzOwotCQl2YXR0ci0+dmFfZXh0c2l6ZSA9IGZhLmZzeF9leHRzaXplOwotCQl2YXR0ci0+dmFfcHJvamlkICA9IGZhLmZzeF9wcm9qaWQ7CisJZXJyb3IgPSAteGZzX3NldGF0dHIoaXAsIHZhdHRyLCBhdHRyX2ZsYWdzLCBOVUxMKTsKKwlpZiAoIWVycm9yKQorCQl2bl9yZXZhbGlkYXRlKFhGU19JVE9WKGlwKSk7CS8qIHVwZGF0ZSBmbGFncyAqLworCWtmcmVlKHZhdHRyKTsKKwlyZXR1cm4gMDsKK30KIAotCQllcnJvciA9IHhmc19zZXRhdHRyKGlwLCB2YXR0ciwgYXR0cl9mbGFncywgTlVMTCk7Ci0JCWlmIChsaWtlbHkoIWVycm9yKSkKLQkJCXZuX3JldmFsaWRhdGUoWEZTX0lUT1YoaXApKTsJLyogdXBkYXRlIGZsYWdzICovCi0JCWVycm9yID0gLWVycm9yOwotCQlicmVhazsKLQl9CitTVEFUSUMgaW50Cit4ZnNfaW9jX2dldHhmbGFncygKKwl4ZnNfaW5vZGVfdAkJKmlwLAorCXZvaWQJCQlfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQJCWZsYWdzOwogCi0JY2FzZSBYRlNfSU9DX0dFVFhGTEFHUzogewotCQlmbGFncyA9IHhmc19kaTJseGZsYWdzKGlwLT5pX2QuZGlfZmxhZ3MpOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJmZsYWdzLCBzaXplb2YoZmxhZ3MpKSkKLQkJCWVycm9yID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JfQorCWZsYWdzID0geGZzX2RpMmx4ZmxhZ3MoaXAtPmlfZC5kaV9mbGFncyk7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmbGFncywgc2l6ZW9mKGZsYWdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQogCi0JY2FzZSBYRlNfSU9DX1NFVFhGTEFHUzogewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWdzLCBhcmcsIHNpemVvZihmbGFncykpKSB7Ci0JCQllcnJvciA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQorU1RBVElDIGludAoreGZzX2lvY19zZXR4ZmxhZ3MoCisJeGZzX2lub2RlX3QJCSppcCwKKwlzdHJ1Y3QgZmlsZQkJKmZpbHAsCisJdm9pZAkJCV9fdXNlciAqYXJnKQoreworCXN0cnVjdCBiaHZfdmF0dHIJKnZhdHRyOworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisJaW50CQkJYXR0cl9mbGFnczsKKwlpbnQJCQllcnJvcjsKIAotCQlpZiAoZmxhZ3MgJiB+KEZTX0lNTVVUQUJMRV9GTCB8IEZTX0FQUEVORF9GTCB8IFwKLQkJCSAgICAgIEZTX05PQVRJTUVfRkwgfCBGU19OT0RVTVBfRkwgfCBcCi0JCQkgICAgICBGU19TWU5DX0ZMKSkgewotCQkJZXJyb3IgPSAtRU9QTk9UU1VQUDsKLQkJCWJyZWFrOwotCQl9CisJaWYgKGNvcHlfZnJvbV91c2VyKCZmbGFncywgYXJnLCBzaXplb2YoZmxhZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJYXR0cl9mbGFncyA9IDA7Ci0JCWlmIChmaWxwLT5mX2ZsYWdzICYgKE9fTkRFTEFZfE9fTk9OQkxPQ0spKQotCQkJYXR0cl9mbGFncyB8PSBBVFRSX05PTkJMT0NLOworCWlmIChmbGFncyAmIH4oRlNfSU1NVVRBQkxFX0ZMIHwgRlNfQVBQRU5EX0ZMIHwgXAorCQkgICAgICBGU19OT0FUSU1FX0ZMIHwgRlNfTk9EVU1QX0ZMIHwgXAorCQkgICAgICBGU19TWU5DX0ZMKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JCXZhdHRyLT52YV9tYXNrID0gWEZTX0FUX1hGTEFHUzsKLQkJdmF0dHItPnZhX3hmbGFncyA9IHhmc19tZXJnZV9pb2NfeGZsYWdzKGZsYWdzLAotCQkJCQkJCXhmc19pcDJ4ZmxhZ3MoaXApKTsKKwl2YXR0ciA9IGttYWxsb2Moc2l6ZW9mKCp2YXR0ciksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghdmF0dHIpKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCQllcnJvciA9IHhmc19zZXRhdHRyKGlwLCB2YXR0ciwgYXR0cl9mbGFncywgTlVMTCk7Ci0JCWlmIChsaWtlbHkoIWVycm9yKSkKLQkJCXZuX3JldmFsaWRhdGUoWEZTX0lUT1YoaXApKTsJLyogdXBkYXRlIGZsYWdzICovCi0JCWVycm9yID0gLWVycm9yOwotCQlicmVhazsKLQl9CisJYXR0cl9mbGFncyA9IDA7CisJaWYgKGZpbHAtPmZfZmxhZ3MgJiAoT19OREVMQVl8T19OT05CTE9DSykpCisJCWF0dHJfZmxhZ3MgfD0gQVRUUl9OT05CTE9DSzsKIAotCWRlZmF1bHQ6Ci0JCWVycm9yID0gLUVOT1RUWTsKLQkJYnJlYWs7Ci0JfQorCXZhdHRyLT52YV9tYXNrID0gWEZTX0FUX1hGTEFHUzsKKwl2YXR0ci0+dmFfeGZsYWdzID0geGZzX21lcmdlX2lvY194ZmxhZ3MoZmxhZ3MsIHhmc19pcDJ4ZmxhZ3MoaXApKTsKIAorCWVycm9yID0gLXhmc19zZXRhdHRyKGlwLCB2YXR0ciwgYXR0cl9mbGFncywgTlVMTCk7CisJaWYgKGxpa2VseSghZXJyb3IpKQorCQl2bl9yZXZhbGlkYXRlKFhGU19JVE9WKGlwKSk7CS8qIHVwZGF0ZSBmbGFncyAqLwogCWtmcmVlKHZhdHRyKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xMzMyLDMgKzEwMjksMjU5IEBACiAKIAlyZXR1cm4gMDsKIH0KKworaW50Cit4ZnNfaW9jdGwoCisJeGZzX2lub2RlX3QJCSppcCwKKwlzdHJ1Y3QgZmlsZQkJKmZpbHAsCisJaW50CQkJaW9mbGFncywKKwl1bnNpZ25lZCBpbnQJCWNtZCwKKwl2b2lkCQkJX191c2VyICphcmcpCit7CisJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXhmc19tb3VudF90CQkqbXAgPSBpcC0+aV9tb3VudDsKKwlpbnQJCQllcnJvcjsKKworCXhmc19pdHJhY2VfZW50cnkoWEZTX0koaW5vZGUpKTsKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBYRlNfSU9DX0FMTE9DU1A6CisJY2FzZSBYRlNfSU9DX0ZSRUVTUDoKKwljYXNlIFhGU19JT0NfUkVTVlNQOgorCWNhc2UgWEZTX0lPQ19VTlJFU1ZTUDoKKwljYXNlIFhGU19JT0NfQUxMT0NTUDY0OgorCWNhc2UgWEZTX0lPQ19GUkVFU1A2NDoKKwljYXNlIFhGU19JT0NfUkVTVlNQNjQ6CisJY2FzZSBYRlNfSU9DX1VOUkVTVlNQNjQ6CisJCS8qCisJCSAqIE9ubHkgYWxsb3cgdGhlIHN5cyBhZG1pbiB0byByZXNlcnZlIHNwYWNlIHVubGVzcworCQkgKiB1bndyaXR0ZW4gZXh0ZW50cyBhcmUgZW5hYmxlZC4KKwkJICovCisJCWlmICgheGZzX3NiX3ZlcnNpb25faGFzZXh0ZmxnYml0KCZtcC0+bV9zYikgJiYKKwkJICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlyZXR1cm4geGZzX2lvY19zcGFjZShpcCwgaW5vZGUsIGZpbHAsIGlvZmxhZ3MsIGNtZCwgYXJnKTsKKworCWNhc2UgWEZTX0lPQ19ESU9JTkZPOiB7CisJCXN0cnVjdCBkaW9hdHRyCWRhOworCQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPQorCQkJWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSA/CisJCQltcC0+bV9ydGRldl90YXJncCA6IG1wLT5tX2RkZXZfdGFyZ3A7CisKKwkJZGEuZF9tZW0gPSBkYS5kX21pbmlvc3ogPSAxIDw8IHRhcmdldC0+YnRfc3NoaWZ0OworCQlkYS5kX21heGlvc3ogPSBJTlRfTUFYICYgfihkYS5kX21pbmlvc3ogLSAxKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmRhLCBzaXplb2YoZGEpKSkKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CisJCXJldHVybiAwOworCX0KKworCWNhc2UgWEZTX0lPQ19GU0JVTEtTVEFUX1NJTkdMRToKKwljYXNlIFhGU19JT0NfRlNCVUxLU1RBVDoKKwljYXNlIFhGU19JT0NfRlNJTlVNQkVSUzoKKwkJcmV0dXJuIHhmc19pb2NfYnVsa3N0YXQobXAsIGNtZCwgYXJnKTsKKworCWNhc2UgWEZTX0lPQ19GU0dFT01FVFJZX1YxOgorCQlyZXR1cm4geGZzX2lvY19mc2dlb21ldHJ5X3YxKG1wLCBhcmcpOworCisJY2FzZSBYRlNfSU9DX0ZTR0VPTUVUUlk6CisJCXJldHVybiB4ZnNfaW9jX2ZzZ2VvbWV0cnkobXAsIGFyZyk7CisKKwljYXNlIFhGU19JT0NfR0VUVkVSU0lPTjoKKwkJcmV0dXJuIHB1dF91c2VyKGlub2RlLT5pX2dlbmVyYXRpb24sIChpbnQgX191c2VyICopYXJnKTsKKworCWNhc2UgWEZTX0lPQ19GU0dFVFhBVFRSOgorCQlyZXR1cm4geGZzX2lvY19mc2dldHhhdHRyKGlwLCAwLCBhcmcpOworCWNhc2UgWEZTX0lPQ19GU0dFVFhBVFRSQToKKwkJcmV0dXJuIHhmc19pb2NfZnNnZXR4YXR0cihpcCwgMSwgYXJnKTsKKwljYXNlIFhGU19JT0NfRlNTRVRYQVRUUjoKKwkJcmV0dXJuIHhmc19pb2NfZnNzZXR4YXR0cihpcCwgZmlscCwgYXJnKTsKKwljYXNlIFhGU19JT0NfR0VUWEZMQUdTOgorCQlyZXR1cm4geGZzX2lvY19nZXR4ZmxhZ3MoaXAsIGFyZyk7CisJY2FzZSBYRlNfSU9DX1NFVFhGTEFHUzoKKwkJcmV0dXJuIHhmc19pb2Nfc2V0eGZsYWdzKGlwLCBmaWxwLCBhcmcpOworCisJY2FzZSBYRlNfSU9DX0ZTU0VURE06IHsKKwkJc3RydWN0IGZzZG1pZGF0YQlkbWk7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZkbWksIGFyZywgc2l6ZW9mKGRtaSkpKQorCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKKworCQllcnJvciA9IHhmc19zZXRfZG1hdHRycyhpcCwgZG1pLmZzZF9kbWV2bWFzaywKKwkJCQlkbWkuZnNkX2Rtc3RhdGUpOworCQlyZXR1cm4gLWVycm9yOworCX0KKworCWNhc2UgWEZTX0lPQ19HRVRCTUFQOgorCWNhc2UgWEZTX0lPQ19HRVRCTUFQQToKKwkJcmV0dXJuIHhmc19pb2NfZ2V0Ym1hcChpcCwgaW9mbGFncywgY21kLCBhcmcpOworCisJY2FzZSBYRlNfSU9DX0dFVEJNQVBYOgorCQlyZXR1cm4geGZzX2lvY19nZXRibWFweChpcCwgYXJnKTsKKworCWNhc2UgWEZTX0lPQ19GRF9UT19IQU5ETEU6CisJY2FzZSBYRlNfSU9DX1BBVEhfVE9fSEFORExFOgorCWNhc2UgWEZTX0lPQ19QQVRIX1RPX0ZTSEFORExFOgorCQlyZXR1cm4geGZzX2ZpbmRfaGFuZGxlKGNtZCwgYXJnKTsKKworCWNhc2UgWEZTX0lPQ19PUEVOX0JZX0hBTkRMRToKKwkJcmV0dXJuIHhmc19vcGVuX2J5X2hhbmRsZShtcCwgYXJnLCBmaWxwLCBpbm9kZSk7CisKKwljYXNlIFhGU19JT0NfRlNTRVRETV9CWV9IQU5ETEU6CisJCXJldHVybiB4ZnNfZnNzZXRkbV9ieV9oYW5kbGUobXAsIGFyZywgaW5vZGUpOworCisJY2FzZSBYRlNfSU9DX1JFQURMSU5LX0JZX0hBTkRMRToKKwkJcmV0dXJuIHhmc19yZWFkbGlua19ieV9oYW5kbGUobXAsIGFyZywgaW5vZGUpOworCisJY2FzZSBYRlNfSU9DX0FUVFJMSVNUX0JZX0hBTkRMRToKKwkJcmV0dXJuIHhmc19hdHRybGlzdF9ieV9oYW5kbGUobXAsIGFyZywgaW5vZGUpOworCisJY2FzZSBYRlNfSU9DX0FUVFJNVUxUSV9CWV9IQU5ETEU6CisJCXJldHVybiB4ZnNfYXR0cm11bHRpX2J5X2hhbmRsZShtcCwgYXJnLCBmaWxwLCBpbm9kZSk7CisKKwljYXNlIFhGU19JT0NfU1dBUEVYVDogeworCQllcnJvciA9IHhmc19zd2FwZXh0KChzdHJ1Y3QgeGZzX3N3YXBleHQgX191c2VyICopYXJnKTsKKwkJcmV0dXJuIC1lcnJvcjsKKwl9CisKKwljYXNlIFhGU19JT0NfRlNDT1VOVFM6IHsKKwkJeGZzX2Zzb3BfY291bnRzX3Qgb3V0OworCisJCWVycm9yID0geGZzX2ZzX2NvdW50cyhtcCwgJm91dCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiAtZXJyb3I7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZvdXQsIHNpemVvZihvdXQpKSkKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CisJCXJldHVybiAwOworCX0KKworCWNhc2UgWEZTX0lPQ19TRVRfUkVTQkxLUzogeworCQl4ZnNfZnNvcF9yZXNibGtzX3QgaW5vdXQ7CisJCV9fdWludDY0X3QJICAgaW47CisKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmlub3V0LCBhcmcsIHNpemVvZihpbm91dCkpKQorCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKKworCQkvKiBpbnB1dCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIHJlc2Jsa3MgZmllbGQgb2Ygc3RydWN0dXJlICovCisJCWluID0gaW5vdXQucmVzYmxrczsKKwkJZXJyb3IgPSB4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZpbiwgJmlub3V0KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIC1lcnJvcjsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmlub3V0LCBzaXplb2YoaW5vdXQpKSkKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CisJCXJldHVybiAwOworCX0KKworCWNhc2UgWEZTX0lPQ19HRVRfUkVTQkxLUzogeworCQl4ZnNfZnNvcF9yZXNibGtzX3Qgb3V0OworCisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisKKwkJZXJyb3IgPSB4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsIE5VTEwsICZvdXQpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gLWVycm9yOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmb3V0LCBzaXplb2Yob3V0KSkpCisJCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgWEZTX0lPQ19GU0dST1dGU0RBVEE6IHsKKwkJeGZzX2dyb3dmc19kYXRhX3QgaW47CisKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmluLCBhcmcsIHNpemVvZihpbikpKQorCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKKworCQllcnJvciA9IHhmc19ncm93ZnNfZGF0YShtcCwgJmluKTsKKwkJcmV0dXJuIC1lcnJvcjsKKwl9CisKKwljYXNlIFhGU19JT0NfRlNHUk9XRlNMT0c6IHsKKwkJeGZzX2dyb3dmc19sb2dfdCBpbjsKKworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW4sIGFyZywgc2l6ZW9mKGluKSkpCisJCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOworCisJCWVycm9yID0geGZzX2dyb3dmc19sb2cobXAsICZpbik7CisJCXJldHVybiAtZXJyb3I7CisJfQorCisJY2FzZSBYRlNfSU9DX0ZTR1JPV0ZTUlQ6IHsKKwkJeGZzX2dyb3dmc19ydF90IGluOworCisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbiwgYXJnLCBzaXplb2YoaW4pKSkKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CisKKwkJZXJyb3IgPSB4ZnNfZ3Jvd2ZzX3J0KG1wLCAmaW4pOworCQlyZXR1cm4gLWVycm9yOworCX0KKworCWNhc2UgWEZTX0lPQ19GUkVFWkU6CisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisKKwkJaWYgKGlub2RlLT5pX3NiLT5zX2Zyb3plbiA9PSBTQl9VTkZST1pFTikKKwkJCWZyZWV6ZV9iZGV2KGlub2RlLT5pX3NiLT5zX2JkZXYpOworCQlyZXR1cm4gMDsKKworCWNhc2UgWEZTX0lPQ19USEFXOgorCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlpZiAoaW5vZGUtPmlfc2ItPnNfZnJvemVuICE9IFNCX1VORlJPWkVOKQorCQkJdGhhd19iZGV2KGlub2RlLT5pX3NiLT5zX2JkZXYsIGlub2RlLT5pX3NiKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFhGU19JT0NfR09JTkdET1dOOiB7CisJCV9fdWludDMyX3QgaW47CisKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQlpZiAoZ2V0X3VzZXIoaW4sIChfX3VpbnQzMl90IF9fdXNlciAqKWFyZykpCisJCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOworCisJCWVycm9yID0geGZzX2ZzX2dvaW5nZG93bihtcCwgaW4pOworCQlyZXR1cm4gLWVycm9yOworCX0KKworCWNhc2UgWEZTX0lPQ19FUlJPUl9JTkpFQ1RJT046IHsKKwkJeGZzX2Vycm9yX2luamVjdGlvbl90IGluOworCisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbiwgYXJnLCBzaXplb2YoaW4pKSkKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CisKKwkJZXJyb3IgPSB4ZnNfZXJyb3J0YWdfYWRkKGluLmVycnRhZywgbXApOworCQlyZXR1cm4gLWVycm9yOworCX0KKworCWNhc2UgWEZTX0lPQ19FUlJPUl9DTEVBUkFMTDoKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQllcnJvciA9IHhmc19lcnJvcnRhZ19jbGVhcmFsbChtcCwgMSk7CisJCXJldHVybiAtZXJyb3I7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggY2M0YWJkMy4uYTEyMzdkYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtNjIsMTIgKzYyLDExIEBACiB4ZnNfc3luY2hyb25pemVfYXRpbWUoCiAJeGZzX2lub2RlX3QJKmlwKQogewotCWJodl92bm9kZV90CSp2cDsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gaXAtPmlfdm5vZGU7CiAKLQl2cCA9IFhGU19JVE9WX05VTEwoaXApOwotCWlmICh2cCkgewotCQlpcC0+aV9kLmRpX2F0aW1lLnRfc2VjID0gKF9faW50MzJfdCl2cC0+aV9hdGltZS50dl9zZWM7Ci0JCWlwLT5pX2QuZGlfYXRpbWUudF9uc2VjID0gKF9faW50MzJfdCl2cC0+aV9hdGltZS50dl9uc2VjOworCWlmIChpbm9kZSkgeworCQlpcC0+aV9kLmRpX2F0aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9zZWM7CisJCWlwLT5pX2QuZGlfYXRpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9uc2VjOwogCX0KIH0KIApAQCAtODAsMTEgKzc5LDEwIEBACiB4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKAogCXhmc19pbm9kZV90CSppcCkKIHsKLQliaHZfdm5vZGVfdAkqdnA7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IGlwLT5pX3Zub2RlOwogCi0JdnAgPSBYRlNfSVRPVl9OVUxMKGlwKTsKLQlpZiAodnApCi0JCW1hcmtfaW5vZGVfZGlydHlfc3luYyh2bl90b19pbm9kZSh2cCkpOworCWlmIChpbm9kZSkKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKIH0KIAogLyoKQEAgLTE1NywxMyArMTU1LDYgQEAKIAkgKi8KIAlBU1NFUlQoKGZsYWdzICYgWEZTX0lDSEdUSU1FX0FDQykgPT0gMCk7CiAKLQkvKgotCSAqIFdlJ3JlIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2UgdGltZXN0YW1wcyBpbiByZWFkb25seS1tb3VudGVkCi0JICogZmlsZXN5c3RlbXMuICBUaHJvdyBpdCBhd2F5IGlmIGFueW9uZSBhc2tzIHVzLgotCSAqLwotCWlmICh1bmxpa2VseShJU19SRE9OTFkoaW5vZGUpKSkKLQkJcmV0dXJuOwotCiAJaWYgKGZsYWdzICYgWEZTX0lDSEdUSU1FX01PRCkgewogCQl0dnAgPSAmaW5vZGUtPmlfbXRpbWU7CiAJCWlwLT5pX2QuZGlfbXRpbWUudF9zZWMgPSAoX19pbnQzMl90KXR2cC0+dHZfc2VjOwpAQCAtMjE1LDY2ICsyMDYsNjIgQEAKICAqLwogU1RBVElDIGludAogeGZzX2luaXRfc2VjdXJpdHkoCi0JYmh2X3Zub2RlX3QJKnZwLAorCXN0cnVjdCBpbm9kZQkqaW5vZGUsCiAJc3RydWN0IGlub2RlCSpkaXIpCiB7Ci0Jc3RydWN0IGlub2RlCSppcCA9IHZuX3RvX2lub2RlKHZwKTsKKwlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKIAlzaXplX3QJCWxlbmd0aDsKIAl2b2lkCQkqdmFsdWU7CiAJY2hhcgkJKm5hbWU7CiAJaW50CQllcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpcCwgZGlyLCAmbmFtZSwgJnZhbHVlLCAmbGVuZ3RoKTsKKwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgJm5hbWUsCisJCQkJCSAgICAgJnZhbHVlLCAmbGVuZ3RoKTsKIAlpZiAoZXJyb3IpIHsKIAkJaWYgKGVycm9yID09IC1FT1BOT1RTVVBQKQogCQkJcmV0dXJuIDA7CiAJCXJldHVybiAtZXJyb3I7CiAJfQogCi0JZXJyb3IgPSB4ZnNfYXR0cl9zZXQoWEZTX0koaXApLCBuYW1lLCB2YWx1ZSwKLQkJCWxlbmd0aCwgQVRUUl9TRUNVUkUpOworCWVycm9yID0geGZzX2F0dHJfc2V0KGlwLCBuYW1lLCB2YWx1ZSwgbGVuZ3RoLCBBVFRSX1NFQ1VSRSk7CiAJaWYgKCFlcnJvcikKLQkJeGZzX2lmbGFnc19zZXQoWEZTX0koaXApLCBYRlNfSU1PRElGSUVEKTsKKwkJeGZzX2lmbGFnc19zZXQoaXAsIFhGU19JTU9ESUZJRUQpOwogCiAJa2ZyZWUobmFtZSk7CiAJa2ZyZWUodmFsdWUpOwogCXJldHVybiBlcnJvcjsKIH0KIAotLyoKLSAqIERldGVybWluZSB3aGV0aGVyIGEgcHJvY2VzcyBoYXMgYSB2YWxpZCBmc19zdHJ1Y3QgKGtlcm5lbCBkYWVtb25zCi0gKiBsaWtlIGtuZnNkIGRvbid0IGhhdmUgYW4gZnNfc3RydWN0KS4KLSAqCi0gKiBYWFgoaGNoKTogIG5mc2QgaXMgYnJva2VuLCBiZXR0ZXIgZml4IGl0IGluc3RlYWQuCi0gKi8KLVNUQVRJQ19JTkxJTkUgaW50Ci14ZnNfaGFzX2ZzX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgdm9pZAoreGZzX2RlbnRyeV90b19uYW1lKAorCXN0cnVjdCB4ZnNfbmFtZQkqbmFtZXAsCisJc3RydWN0IGRlbnRyeQkqZGVudHJ5KQogewotCXJldHVybiAodGFzay0+ZnMgIT0gaW5pdF90YXNrLmZzKTsKKwluYW1lcC0+bmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJbmFtZXAtPmxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIH0KIAogU1RBVElDIHZvaWQKIHhmc19jbGVhbnVwX2lub2RlKAogCXN0cnVjdCBpbm9kZQkqZGlyLAotCWJodl92bm9kZV90CSp2cCwKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlLAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwKIAlpbnQJCW1vZGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAgIHRlYXJkb3duID0ge307CisJc3RydWN0IHhmc19uYW1lCXRlYXJkb3duOwogCiAJLyogT2gsIHRoZSBob3Jyb3IuCiAJICogSWYgd2UgY2FuJ3QgYWRkIHRoZSBBQ0wgb3Igd2UgZmFpbCBpbgogCSAqIHhmc19pbml0X3NlY3VyaXR5IHdlIG11c3QgYmFjayBvdXQuCiAJICogRU5PU1BDIGNhbiBoaXQgaGVyZSwgYW1vbmcgb3RoZXIgdGhpbmdzLgogCSAqLwotCXRlYXJkb3duLmRfaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7Ci0JdGVhcmRvd24uZF9uYW1lID0gZGVudHJ5LT5kX25hbWU7CisJeGZzX2RlbnRyeV90b19uYW1lKCZ0ZWFyZG93biwgZGVudHJ5KTsKIAogCWlmIChTX0lTRElSKG1vZGUpKQotCQl4ZnNfcm1kaXIoWEZTX0koZGlyKSwgJnRlYXJkb3duKTsKKwkJeGZzX3JtZGlyKFhGU19JKGRpciksICZ0ZWFyZG93biwgWEZTX0koaW5vZGUpKTsKIAllbHNlCi0JCXhmc19yZW1vdmUoWEZTX0koZGlyKSwgJnRlYXJkb3duKTsKLQlWTl9SRUxFKHZwKTsKKwkJeGZzX3JlbW92ZShYRlNfSShkaXIpLCAmdGVhcmRvd24sIFhGU19JKGlub2RlKSk7CisJaXB1dChpbm9kZSk7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTI4NCw5ICsyNzEsMTAgQEAKIAlpbnQJCW1vZGUsCiAJZGV2X3QJCXJkZXYpCiB7Ci0Jc3RydWN0IGlub2RlCSppcDsKLQliaHZfdm5vZGVfdAkqdnAgPSBOVUxMLCAqZHZwID0gdm5fZnJvbV9pbm9kZShkaXIpOworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CisJc3RydWN0IHhmc19pbm9kZSAqaXAgPSBOVUxMOwogCXhmc19hY2xfdAkqZGVmYXVsdF9hY2wgPSBOVUxMOworCXN0cnVjdCB4ZnNfbmFtZQluYW1lOwogCWF0dHJleGlzdHNfdAl0ZXN0X2RlZmF1bHRfYWNsID0gX0FDTF9ERUZBVUxUX0VYSVNUUzsKIAlpbnQJCWVycm9yOwogCkBAIC0yOTcsNTkgKzI4NSw2NyBAQAogCWlmICh1bmxpa2VseSghc3lzdl92YWxpZF9kZXYocmRldikgfHwgTUFKT1IocmRldikgJiB+MHgxZmYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh1bmxpa2VseSh0ZXN0X2RlZmF1bHRfYWNsICYmIHRlc3RfZGVmYXVsdF9hY2woZHZwKSkpIHsKKwlpZiAodGVzdF9kZWZhdWx0X2FjbCAmJiB0ZXN0X2RlZmF1bHRfYWNsKGRpcikpIHsKIAkJaWYgKCFfQUNMX0FMTE9DKGRlZmF1bHRfYWNsKSkgewogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJaWYgKCFfQUNMX0dFVF9ERUZBVUxUKGR2cCwgZGVmYXVsdF9hY2wpKSB7CisJCWlmICghX0FDTF9HRVRfREVGQVVMVChkaXIsIGRlZmF1bHRfYWNsKSkgewogCQkJX0FDTF9GUkVFKGRlZmF1bHRfYWNsKTsKIAkJCWRlZmF1bHRfYWNsID0gTlVMTDsKIAkJfQogCX0KIAotCWlmIChJU19QT1NJWEFDTChkaXIpICYmICFkZWZhdWx0X2FjbCAmJiB4ZnNfaGFzX2ZzX3N0cnVjdChjdXJyZW50KSkKKwl4ZnNfZGVudHJ5X3RvX25hbWUoJm5hbWUsIGRlbnRyeSk7CisKKwlpZiAoSVNfUE9TSVhBQ0woZGlyKSAmJiAhZGVmYXVsdF9hY2wpCiAJCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKIAogCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgewotCWNhc2UgU19JRkNIUjogY2FzZSBTX0lGQkxLOiBjYXNlIFNfSUZJRk86IGNhc2UgU19JRlNPQ0s6CisJY2FzZSBTX0lGQ0hSOgorCWNhc2UgU19JRkJMSzoKKwljYXNlIFNfSUZJRk86CisJY2FzZSBTX0lGU09DSzoKIAkJcmRldiA9IHN5c3ZfZW5jb2RlX2RldihyZGV2KTsKIAljYXNlIFNfSUZSRUc6Ci0JCWVycm9yID0geGZzX2NyZWF0ZShYRlNfSShkaXIpLCBkZW50cnksIG1vZGUsIHJkZXYsICZ2cCwgTlVMTCk7CisJCWVycm9yID0geGZzX2NyZWF0ZShYRlNfSShkaXIpLCAmbmFtZSwgbW9kZSwgcmRldiwgJmlwLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGRElSOgotCQllcnJvciA9IHhmc19ta2RpcihYRlNfSShkaXIpLCBkZW50cnksIG1vZGUsICZ2cCwgTlVMTCk7CisJCWVycm9yID0geGZzX21rZGlyKFhGU19JKGRpciksICZuYW1lLCBtb2RlLCAmaXAsIE5VTEwpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnJvciA9IEVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHVubGlrZWx5KCFlcnJvcikpIHsKLQkJZXJyb3IgPSB4ZnNfaW5pdF9zZWN1cml0eSh2cCwgZGlyKTsKLQkJaWYgKGVycm9yKQotCQkJeGZzX2NsZWFudXBfaW5vZGUoZGlyLCB2cCwgZGVudHJ5LCBtb2RlKTsKLQl9CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXRfZnJlZV9hY2w7CiAKLQlpZiAodW5saWtlbHkoZGVmYXVsdF9hY2wpKSB7Ci0JCWlmICghZXJyb3IpIHsKLQkJCWVycm9yID0gX0FDTF9JTkhFUklUKHZwLCBtb2RlLCBkZWZhdWx0X2FjbCk7Ci0JCQlpZiAoIWVycm9yKQotCQkJCXhmc19pZmxhZ3Nfc2V0KFhGU19JKHZwKSwgWEZTX0lNT0RJRklFRCk7Ci0JCQllbHNlCi0JCQkJeGZzX2NsZWFudXBfaW5vZGUoZGlyLCB2cCwgZGVudHJ5LCBtb2RlKTsKLQkJfQorCWlub2RlID0gaXAtPmlfdm5vZGU7CisKKwllcnJvciA9IHhmc19pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIpOworCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0X2NsZWFudXBfaW5vZGU7CisKKwlpZiAoZGVmYXVsdF9hY2wpIHsKKwkJZXJyb3IgPSBfQUNMX0lOSEVSSVQoaW5vZGUsIG1vZGUsIGRlZmF1bHRfYWNsKTsKKwkJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJCWdvdG8gb3V0X2NsZWFudXBfaW5vZGU7CisJCXhmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSU1PRElGSUVEKTsKIAkJX0FDTF9GUkVFKGRlZmF1bHRfYWNsKTsKIAl9CiAKLQlpZiAobGlrZWx5KCFlcnJvcikpIHsKLQkJQVNTRVJUKHZwKTsKLQkJaXAgPSB2bl90b19pbm9kZSh2cCk7CiAKLQkJaWYgKFNfSVNESVIobW9kZSkpCi0JCQl4ZnNfdmFsaWRhdGVfZmllbGRzKGlwKTsKLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlwKTsKLQkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhkaXIpOwotCX0KKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhpbm9kZSk7CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwl4ZnNfdmFsaWRhdGVfZmllbGRzKGRpcik7CisJcmV0dXJuIC1lcnJvcjsKKworIG91dF9jbGVhbnVwX2lub2RlOgorCXhmc19jbGVhbnVwX2lub2RlKGRpciwgaW5vZGUsIGRlbnRyeSwgbW9kZSk7Cisgb3V0X2ZyZWVfYWNsOgorCWlmIChkZWZhdWx0X2FjbCkKKwkJX0FDTF9GUkVFKGRlZmF1bHRfYWNsKTsKIAlyZXR1cm4gLWVycm9yOwogfQogCkBAIC0zNzgsMTMgKzM3NCwxNSBAQAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwKIAlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQliaHZfdm5vZGVfdAkqY3ZwOworCXN0cnVjdCB4ZnNfaW5vZGUgKmNpcDsKKwlzdHJ1Y3QgeGZzX25hbWUJbmFtZTsKIAlpbnQJCWVycm9yOwogCiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+PSBNQVhOQU1FTEVOKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKIAotCWVycm9yID0geGZzX2xvb2t1cChYRlNfSShkaXIpLCBkZW50cnksICZjdnApOworCXhmc19kZW50cnlfdG9fbmFtZSgmbmFtZSwgZGVudHJ5KTsKKwllcnJvciA9IHhmc19sb29rdXAoWEZTX0koZGlyKSwgJm5hbWUsICZjaXApOwogCWlmICh1bmxpa2VseShlcnJvcikpIHsKIAkJaWYgKHVubGlrZWx5KGVycm9yICE9IEVOT0VOVCkpCiAJCQlyZXR1cm4gRVJSX1BUUigtZXJyb3IpOwpAQCAtMzkyLDcgKzM5MCw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXJldHVybiBkX3NwbGljZV9hbGlhcyh2bl90b19pbm9kZShjdnApLCBkZW50cnkpOworCXJldHVybiBkX3NwbGljZV9hbGlhcyhjaXAtPmlfdm5vZGUsIGRlbnRyeSk7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTQwMSwyMyArMzk5LDI0IEBACiAJc3RydWN0IGlub2RlCSpkaXIsCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5KQogewotCXN0cnVjdCBpbm9kZQkqaXA7CS8qIGlub2RlIG9mIGd1eSBiZWluZyBsaW5rZWQgdG8gKi8KLQliaHZfdm5vZGVfdAkqdnA7CS8qIHZwIG9mIG5hbWUgYmVpbmcgbGlua2VkICovCisJc3RydWN0IGlub2RlCSppbm9kZTsJLyogaW5vZGUgb2YgZ3V5IGJlaW5nIGxpbmtlZCB0byAqLworCXN0cnVjdCB4ZnNfbmFtZQluYW1lOwogCWludAkJZXJyb3I7CiAKLQlpcCA9IG9sZF9kZW50cnktPmRfaW5vZGU7CS8qIGlub2RlIGJlaW5nIGxpbmtlZCB0byAqLwotCXZwID0gdm5fZnJvbV9pbm9kZShpcCk7CisJaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCXhmc19kZW50cnlfdG9fbmFtZSgmbmFtZSwgZGVudHJ5KTsKIAotCVZOX0hPTEQodnApOwotCWVycm9yID0geGZzX2xpbmsoWEZTX0koZGlyKSwgdnAsIGRlbnRyeSk7CisJaWdyYWIoaW5vZGUpOworCWVycm9yID0geGZzX2xpbmsoWEZTX0koZGlyKSwgWEZTX0koaW5vZGUpLCAmbmFtZSk7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQlWTl9SRUxFKHZwKTsKLQl9IGVsc2UgewotCQl4ZnNfaWZsYWdzX3NldChYRlNfSShkaXIpLCBYRlNfSU1PRElGSUVEKTsKLQkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhpcCk7Ci0JCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpcCk7CisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gLWVycm9yOwogCX0KLQlyZXR1cm4gLWVycm9yOworCisJeGZzX2lmbGFnc19zZXQoWEZTX0koZGlyKSwgWEZTX0lNT0RJRklFRCk7CisJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhpbm9kZSk7CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwlyZXR1cm4gMDsKIH0KIAogU1RBVElDIGludApAQCAtNDI2LDExICs0MjUsMTMgQEAKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnkpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZTsKKwlzdHJ1Y3QgeGZzX25hbWUJbmFtZTsKIAlpbnQJCWVycm9yOwogCiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJeGZzX2RlbnRyeV90b19uYW1lKCZuYW1lLCBkZW50cnkpOwogCi0JZXJyb3IgPSB4ZnNfcmVtb3ZlKFhGU19JKGRpciksIGRlbnRyeSk7CisJZXJyb3IgPSB4ZnNfcmVtb3ZlKFhGU19JKGRpciksICZuYW1lLCBYRlNfSShpbm9kZSkpOwogCWlmIChsaWtlbHkoIWVycm9yKSkgewogCQl4ZnNfdmFsaWRhdGVfZmllbGRzKGRpcik7CS8qIHNpemUgbmVlZHMgdXBkYXRlICovCiAJCXhmc192YWxpZGF0ZV9maWVsZHMoaW5vZGUpOwpAQCAtNDQ0LDI5ICs0NDUsMzQgQEAKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnksCiAJY29uc3QgY2hhcgkqc3ltbmFtZSkKIHsKLQlzdHJ1Y3QgaW5vZGUJKmlwOwotCWJodl92bm9kZV90CSpjdnA7CS8qIHVzZWQgdG8gbG9va3VwIHN5bWxpbmsgdG8gcHV0IGluIGRlbnRyeSAqLworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CisJc3RydWN0IHhmc19pbm9kZSAqY2lwID0gTlVMTDsKKwlzdHJ1Y3QgeGZzX25hbWUJbmFtZTsKIAlpbnQJCWVycm9yOwogCW1vZGVfdAkJbW9kZTsKIAotCWN2cCA9IE5VTEw7Ci0KIAltb2RlID0gU19JRkxOSyB8CiAJCShpcml4X3N5bWxpbmtfbW9kZSA/IDA3NzcgJiB+Y3VycmVudC0+ZnMtPnVtYXNrIDogU19JUldYVUdPKTsKKwl4ZnNfZGVudHJ5X3RvX25hbWUoJm5hbWUsIGRlbnRyeSk7CiAKLQllcnJvciA9IHhmc19zeW1saW5rKFhGU19JKGRpciksIGRlbnRyeSwgKGNoYXIgKilzeW1uYW1lLCBtb2RlLAotCQkJICAgICZjdnAsIE5VTEwpOwotCWlmIChsaWtlbHkoIWVycm9yICYmIGN2cCkpIHsKLQkJZXJyb3IgPSB4ZnNfaW5pdF9zZWN1cml0eShjdnAsIGRpcik7Ci0JCWlmIChsaWtlbHkoIWVycm9yKSkgewotCQkJaXAgPSB2bl90b19pbm9kZShjdnApOwotCQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlwKTsKLQkJCXhmc192YWxpZGF0ZV9maWVsZHMoZGlyKTsKLQkJCXhmc192YWxpZGF0ZV9maWVsZHMoaXApOwotCQl9IGVsc2UgewotCQkJeGZzX2NsZWFudXBfaW5vZGUoZGlyLCBjdnAsIGRlbnRyeSwgMCk7Ci0JCX0KLQl9CisJZXJyb3IgPSB4ZnNfc3ltbGluayhYRlNfSShkaXIpLCAmbmFtZSwgc3ltbmFtZSwgbW9kZSwgJmNpcCwgTlVMTCk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXQ7CisKKwlpbm9kZSA9IGNpcC0+aV92bm9kZTsKKworCWVycm9yID0geGZzX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpcik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXRfY2xlYW51cF9pbm9kZTsKKworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhkaXIpOworCXhmc192YWxpZGF0ZV9maWVsZHMoaW5vZGUpOworCXJldHVybiAwOworCisgb3V0X2NsZWFudXBfaW5vZGU6CisJeGZzX2NsZWFudXBfaW5vZGUoZGlyLCBpbm9kZSwgZGVudHJ5LCAwKTsKKyBvdXQ6CiAJcmV0dXJuIC1lcnJvcjsKIH0KIApAQCAtNDc2LDkgKzQ4MiwxMiBAQAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCB4ZnNfbmFtZQluYW1lOwogCWludAkJZXJyb3I7CiAKLQllcnJvciA9IHhmc19ybWRpcihYRlNfSShkaXIpLCBkZW50cnkpOworCXhmc19kZW50cnlfdG9fbmFtZSgmbmFtZSwgZGVudHJ5KTsKKworCWVycm9yID0geGZzX3JtZGlyKFhGU19JKGRpciksICZuYW1lLCBYRlNfSShpbm9kZSkpOwogCWlmIChsaWtlbHkoIWVycm9yKSkgewogCQl4ZnNfdmFsaWRhdGVfZmllbGRzKGlub2RlKTsKIAkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhkaXIpOwpAQCAtNDk0LDEyICs1MDMsMTUgQEAKIAlzdHJ1Y3QgZGVudHJ5CSpuZGVudHJ5KQogewogCXN0cnVjdCBpbm9kZQkqbmV3X2lub2RlID0gbmRlbnRyeS0+ZF9pbm9kZTsKLQliaHZfdm5vZGVfdAkqdHZwOwkvKiB0YXJnZXQgZGlyZWN0b3J5ICovCisJc3RydWN0IHhmc19uYW1lCW9uYW1lOworCXN0cnVjdCB4ZnNfbmFtZQlubmFtZTsKIAlpbnQJCWVycm9yOwogCi0JdHZwID0gdm5fZnJvbV9pbm9kZShuZGlyKTsKKwl4ZnNfZGVudHJ5X3RvX25hbWUoJm9uYW1lLCBvZGVudHJ5KTsKKwl4ZnNfZGVudHJ5X3RvX25hbWUoJm5uYW1lLCBuZGVudHJ5KTsKIAotCWVycm9yID0geGZzX3JlbmFtZShYRlNfSShvZGlyKSwgb2RlbnRyeSwgdHZwLCBuZGVudHJ5KTsKKwllcnJvciA9IHhmc19yZW5hbWUoWEZTX0kob2RpciksICZvbmFtZSwgWEZTX0kob2RlbnRyeS0+ZF9pbm9kZSksCisJCQkJCQkJWEZTX0kobmRpciksICZubmFtZSk7CiAJaWYgKGxpa2VseSghZXJyb3IpKSB7CiAJCWlmIChuZXdfaW5vZGUpCiAJCQl4ZnNfdmFsaWRhdGVfZmllbGRzKG5ld19pbm9kZSk7CkBAIC03MDAsMTEgKzcxMiwxOSBAQAogCXJldHVybiAtZXJyb3I7CiB9CiAKKy8qCisgKiBibG9ja190cnVuY2F0ZV9wYWdlIGNhbiByZXR1cm4gYW4gZXJyb3IsIGJ1dCB3ZSBjYW4ndCBwcm9wYWdhdGUgaXQKKyAqIGF0IGFsbCBoZXJlLiBMZWF2ZSBhIGNvbXBsYWludCArIHN0YWNrIHRyYWNlIGluIHRoZSBzeXNsb2cgYmVjYXVzZQorICogdGhpcyBjb3VsZCBiZSBiYWQuIElmIGl0IGlzIGJhZCwgd2UgbmVlZCB0byBwcm9wYWdhdGUgdGhlIGVycm9yIGZ1cnRoZXIuCisgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfdm5fdHJ1bmNhdGUoCiAJc3RydWN0IGlub2RlCSppbm9kZSkKIHsKLQlibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUsIHhmc19nZXRfYmxvY2tzKTsKKwlpbnQJZXJyb3I7CisJZXJyb3IgPSBibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUsCisJCQkJCQkJeGZzX2dldF9ibG9ja3MpOworCVdBUk5fT04oZXJyb3IpOwogfQogCiBTVEFUSUMgaW50CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCAzY2EzOWM0Li5lNTE0MzMyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTk5LDcgKzk5LDYgQEAKIC8qCiAgKiBGZWF0dXJlIG1hY3JvcyAoZGlzYWJsZS9lbmFibGUpCiAgKi8KLSN1bmRlZiAgSEFWRV9SRUZDQUNIRQkvKiByZWZlcmVuY2UgY2FjaGUgbm90IG5lZWRlZCBmb3IgTkZTIGluIDIuNiAqLwogI2RlZmluZSBIQVZFX1NQTElDRQkvKiBhIHNwbGljZSgyKSBleGlzdHMgaW4gMi42LCBidXQgbm90IGluIDIuNCAqLwogI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgSEFWRV9QRVJDUFVfU0IJLyogcGVyIGNwdSBzdXBlcmJsb2NrIGNvdW50ZXJzIGFyZSBhIDIuNiBmZWF0dXJlICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDE2NjM1MzMuLjFlYmQ4MDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAogCkBAIC0xNzYsNyArMTc3LDYgQEAKIHsKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCWJodl92bm9kZV90CQkqdnAgPSBYRlNfSVRPVihpcCk7CiAJeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OwogCXNpemVfdAkJCXNpemUgPSAwOwogCXNzaXplX3QJCQlyZXQgPSAwOwpAQCAtMjI4LDExICsyMjgsMTEgQEAKIAl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAogCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9SRUFEKSAmJiAhKGlvZmxhZ3MgJiBJT19JTlZJUykpIHsKLQkJYmh2X3Zyd2xvY2tfdCBsb2NrdHlwZSA9IFZSV0xPQ0tfUkVBRDsKIAkJaW50IGRtZmxhZ3MgPSBGSUxQX0RFTEFZX0ZMQUcoZmlsZSkgfCBETV9TRU1fRkxBR19SRChpb2ZsYWdzKTsKKwkJaW50IGlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOwogCi0JCXJldCA9IC1YRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9SRUFELCB2cCwgKm9mZnNldCwgc2l6ZSwKLQkJCQkJZG1mbGFncywgJmxvY2t0eXBlKTsKKwkJcmV0ID0gLVhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIGlwLCAqb2Zmc2V0LCBzaXplLAorCQkJCQlkbWZsYWdzLCAmaW9sb2NrKTsKIAkJaWYgKHJldCkgewogCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKIAkJCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKQpAQCAtMjQyLDcgKzI0Miw3IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpIHsKLQkJaWYgKFZOX0NBQ0hFRCh2cCkpCisJCWlmIChpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKQogCQkJcmV0ID0geGZzX2ZsdXNoaW52YWxfcGFnZXMoaXAsICgqb2Zmc2V0ICYgUEFHRV9DQUNIRV9NQVNLKSwKIAkJCQkJCSAgICAtMSwgRklfUkVNQVBGX0xPQ0tFRCk7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwpAQCAtMjc2LDcgKzI3Niw2IEBACiAJaW50CQkJZmxhZ3MsCiAJaW50CQkJaW9mbGFncykKIHsKLQliaHZfdm5vZGVfdAkJKnZwID0gWEZTX0lUT1YoaXApOwogCXhmc19tb3VudF90CQkqbXAgPSBpcC0+aV9tb3VudDsKIAlzc2l6ZV90CQkJcmV0OwogCkBAIC0yODcsMTEgKzI4NiwxMSBAQAogCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwogCiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1JFQUQpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQliaHZfdnJ3bG9ja190IGxvY2t0eXBlID0gVlJXTE9DS19SRUFEOworCQlpbnQgaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7CiAJCWludCBlcnJvcjsKIAotCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIHZwLCAqcHBvcywgY291bnQsCi0JCQkJCUZJTFBfREVMQVlfRkxBRyhpbmZpbHApLCAmbG9ja3R5cGUpOworCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIGlwLCAqcHBvcywgY291bnQsCisJCQkJCUZJTFBfREVMQVlfRkxBRyhpbmZpbHApLCAmaW9sb2NrKTsKIAkJaWYgKGVycm9yKSB7CiAJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwogCQkJcmV0dXJuIC1lcnJvcjsKQEAgLTMxNyw3ICszMTYsNiBAQAogCWludAkJCWZsYWdzLAogCWludAkJCWlvZmxhZ3MpCiB7Ci0JYmh2X3Zub2RlX3QJCSp2cCA9IFhGU19JVE9WKGlwKTsKIAl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7CiAJc3NpemVfdAkJCXJldDsKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IG91dGZpbHAtPmZfbWFwcGluZy0+aG9zdDsKQEAgLTMzMCwxMSArMzI4LDExIEBACiAJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwogCiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1dSSVRFKSAmJiAhKGlvZmxhZ3MgJiBJT19JTlZJUykpIHsKLQkJYmh2X3Zyd2xvY2tfdCBsb2NrdHlwZSA9IFZSV0xPQ0tfV1JJVEU7CisJCWludCBpb2xvY2sgPSBYRlNfSU9MT0NLX0VYQ0w7CiAJCWludCBlcnJvcjsKIAotCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1dSSVRFLCB2cCwgKnBwb3MsIGNvdW50LAotCQkJCQlGSUxQX0RFTEFZX0ZMQUcob3V0ZmlscCksICZsb2NrdHlwZSk7CisJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfV1JJVEUsIGlwLCAqcHBvcywgY291bnQsCisJCQkJCUZJTFBfREVMQVlfRkxBRyhvdXRmaWxwKSwgJmlvbG9jayk7CiAJCWlmIChlcnJvcikgewogCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CiAJCQlyZXR1cm4gLWVycm9yOwpAQCAtNTczLDE0ICs1NzEsMTIgQEAKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwogCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQliaHZfdm5vZGVfdAkJKnZwID0gWEZTX0lUT1YoeGlwKTsKIAl1bnNpZ25lZCBsb25nCQlzZWdzID0gbnNlZ3M7CiAJeGZzX21vdW50X3QJCSptcDsKIAlzc2l6ZV90CQkJcmV0ID0gMCwgZXJyb3IgPSAwOwogCXhmc19mc2l6ZV90CQlpc2l6ZSwgbmV3X3NpemU7CiAJaW50CQkJaW9sb2NrOwogCWludAkJCWV2ZW50c2VudCA9IDA7Ci0JYmh2X3Zyd2xvY2tfdAkJbG9ja3R5cGU7CiAJc2l6ZV90CQkJb2NvdW50ID0gMCwgY291bnQ7CiAJbG9mZl90CQkJcG9zOwogCWludAkJCW5lZWRfaV9tdXRleDsKQEAgLTYwNywxMSArNjAzLDkgQEAKIHJlbG9jazoKIAlpZiAoaW9mbGFncyAmIElPX0lTRElSRUNUKSB7CiAJCWlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOwotCQlsb2NrdHlwZSA9IFZSV0xPQ0tfV1JJVEVfRElSRUNUOwogCQluZWVkX2lfbXV0ZXggPSAwOwogCX0gZWxzZSB7CiAJCWlvbG9jayA9IFhGU19JT0xPQ0tfRVhDTDsKLQkJbG9ja3R5cGUgPSBWUldMT0NLX1dSSVRFOwogCQluZWVkX2lfbXV0ZXggPSAxOwogCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJfQpAQCAtNjM0LDkgKzYyOCw4IEBACiAJCQlkbWZsYWdzIHw9IERNX0ZMQUdTX0lNVVg7CiAKIAkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCWVycm9yID0gWEZTX1NFTkRfREFUQSh4aXAtPmlfbW91bnQsIERNX0VWRU5UX1dSSVRFLCB2cCwKLQkJCQkgICAgICBwb3MsIGNvdW50LAotCQkJCSAgICAgIGRtZmxhZ3MsICZsb2NrdHlwZSk7CisJCWVycm9yID0gWEZTX1NFTkRfREFUQSh4aXAtPmlfbW91bnQsIERNX0VWRU5UX1dSSVRFLCB4aXAsCisJCQkJICAgICAgcG9zLCBjb3VudCwgZG1mbGFncywgJmlvbG9jayk7CiAJCWlmIChlcnJvcikgewogCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwogCQl9CkBAIC02NjQsMTAgKzY1Nyw5IEBACiAJCQlyZXR1cm4gWEZTX0VSUk9SKC1FSU5WQUwpOwogCQl9CiAKLQkJaWYgKCFuZWVkX2lfbXV0ZXggJiYgKFZOX0NBQ0hFRCh2cCkgfHwgcG9zID4geGlwLT5pX3NpemUpKSB7CisJCWlmICghbmVlZF9pX211dGV4ICYmIChtYXBwaW5nLT5ucnBhZ2VzIHx8IHBvcyA+IHhpcC0+aV9zaXplKSkgewogCQkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOwogCQkJaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOwotCQkJbG9ja3R5cGUgPSBWUldMT0NLX1dSSVRFOwogCQkJbmVlZF9pX211dGV4ID0gMTsKIAkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJCXhmc19pbG9jayh4aXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7CkBAIC02NzksMTAgKzY3MSwxNiBAQAogCWlmIChuZXdfc2l6ZSA+IHhpcC0+aV9zaXplKQogCQl4aXAtPmlfbmV3X3NpemUgPSBuZXdfc2l6ZTsKIAotCWlmIChsaWtlbHkoIShpb2ZsYWdzICYgSU9fSU5WSVMpKSkgeworCS8qCisJICogV2UncmUgbm90IHN1cHBvc2VkIHRvIGNoYW5nZSB0aW1lc3RhbXBzIGluIHJlYWRvbmx5LW1vdW50ZWQKKwkgKiBmaWxlc3lzdGVtcy4gIFRocm93IGl0IGF3YXkgaWYgYW55b25lIGFza3MgdXMuCisJICovCisJaWYgKGxpa2VseSghKGlvZmxhZ3MgJiBJT19JTlZJUykgJiYKKwkJICAgIW1udF93YW50X3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpKSkgewogCQlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOwogCQl4ZnNfaWNoZ3RpbWVfZmFzdCh4aXAsIGlub2RlLAogCQkJCSAgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOworCQltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIAl9CiAKIAkvKgpAQCAtNzI3LDcgKzcyNSw3IEBACiAJY3VycmVudC0+YmFja2luZ19kZXZfaW5mbyA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CiAKIAlpZiAoKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpIHsKLQkJaWYgKFZOX0NBQ0hFRCh2cCkpIHsKKwkJaWYgKG1hcHBpbmctPm5ycGFnZXMpIHsKIAkJCVdBUk5fT04obmVlZF9pX211dGV4ID09IDApOwogCQkJeGZzX2ludmFsX2NhY2hlZF90cmFjZSh4aXAsIHBvcywgLTEsCiAJCQkJCShwb3MgJiBQQUdFX0NBQ0hFX01BU0spLCAtMSk7CkBAIC03NDQsNyArNzQyLDYgQEAKIAkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJCQlpb2xvY2sgPSBYRlNfSU9MT0NLX1NIQVJFRDsKLQkJCWxvY2t0eXBlID0gVlJXTE9DS19XUklURV9ESVJFQ1Q7CiAJCQluZWVkX2lfbXV0ZXggPSAwOwogCQl9CiAKQEAgLTc4MSwxNSArNzc4LDE1IEBACiAKIAlpZiAocmV0ID09IC1FTk9TUEMgJiYKIAkgICAgRE1fRVZFTlRfRU5BQkxFRCh4aXAsIERNX0VWRU5UX05PU1BBQ0UpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQl4ZnNfcnd1bmxvY2soeGlwLCBsb2NrdHlwZSk7CisJCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKIAkJaWYgKG5lZWRfaV9tdXRleCkKIAkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQllcnJvciA9IFhGU19TRU5EX05BTUVTUCh4aXAtPmlfbW91bnQsIERNX0VWRU5UX05PU1BBQ0UsIHZwLAotCQkJCURNX1JJR0hUX05VTEwsIHZwLCBETV9SSUdIVF9OVUxMLCBOVUxMLCBOVUxMLAorCQllcnJvciA9IFhGU19TRU5EX05BTUVTUCh4aXAtPmlfbW91bnQsIERNX0VWRU5UX05PU1BBQ0UsIHhpcCwKKwkJCQlETV9SSUdIVF9OVUxMLCB4aXAsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCiAJCQkJMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSAgdW51c2VkICovCiAJCWlmIChuZWVkX2lfbXV0ZXgpCiAJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCXhmc19yd2xvY2soeGlwLCBsb2NrdHlwZSk7CisJCXhmc19pbG9jayh4aXAsIGlvbG9jayk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKIAkJcG9zID0geGlwLT5pX3NpemU7CkBAIC04MTcsNyArODE0LDggQEAKIAkvKiBIYW5kbGUgdmFyaW91cyBTWU5DLXR5cGUgd3JpdGVzICovCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkgewogCQlpbnQgZXJyb3IyOwotCQl4ZnNfcnd1bmxvY2soeGlwLCBsb2NrdHlwZSk7CisKKwkJeGZzX2l1bmxvY2soeGlwLCBpb2xvY2spOwogCQlpZiAobmVlZF9pX211dGV4KQogCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWVycm9yMiA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgcG9zLCByZXQpOwpAQCAtODI1LDcgKzgyMyw3IEBACiAJCQllcnJvciA9IGVycm9yMjsKIAkJaWYgKG5lZWRfaV9tdXRleCkKIAkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQkJeGZzX3J3bG9jayh4aXAsIGxvY2t0eXBlKTsKKwkJeGZzX2lsb2NrKHhpcCwgaW9sb2NrKTsKIAkJZXJyb3IyID0geGZzX3dyaXRlX3N5bmNfbG9nZm9yY2UobXAsIHhpcCk7CiAJCWlmICghZXJyb3IpCiAJCQllcnJvciA9IGVycm9yMjsKQEAgLTg0Niw3ICs4NDQsNyBAQAogCQkJeGlwLT5pX2QuZGlfc2l6ZSA9IHhpcC0+aV9zaXplOwogCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKIAl9Ci0JeGZzX3J3dW5sb2NrKHhpcCwgbG9ja3R5cGUpOworCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKICBvdXRfdW5sb2NrX211dGV4OgogCWlmIChuZWVkX2lfbXV0ZXgpCiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwpAQCAtODg0LDI4ICs4ODIsMjMgQEAKIH0KIAogLyoKLSAqIFdyYXBwZXIgYXJvdW5kIGJkc3RyYXQgc28gdGhhdCB3ZSBjYW4gc3RvcCBkYXRhCi0gKiBmcm9tIGdvaW5nIHRvIGRpc2sgaW4gY2FzZSB3ZSBhcmUgc2h1dHRpbmcgZG93biB0aGUgZmlsZXN5c3RlbS4KLSAqIFR5cGljYWxseSB1c2VyIGRhdGEgZ29lcyB0aHJ1IHRoaXMgcGF0aDsgb25lIG9mIHRoZSBleGNlcHRpb25zCi0gKiBpcyB0aGUgc3VwZXJibG9jay4KKyAqIFdyYXBwZXIgYXJvdW5kIGJkc3RyYXQgc28gdGhhdCB3ZSBjYW4gc3RvcCBkYXRhIGZyb20gZ29pbmcgdG8gZGlzayBpbiBjYXNlCisgKiB3ZSBhcmUgc2h1dHRpbmcgZG93biB0aGUgZmlsZXN5c3RlbS4gIFR5cGljYWxseSB1c2VyIGRhdGEgZ29lcyB0aHJ1IHRoaXMKKyAqIHBhdGg7IG9uZSBvZiB0aGUgZXhjZXB0aW9ucyBpcyB0aGUgc3VwZXJibG9jay4KICAqLwotaW50Cit2b2lkCiB4ZnNiZHN0cmF0KAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCXN0cnVjdCB4ZnNfYnVmCQkqYnApCiB7CiAJQVNTRVJUKG1wKTsKIAlpZiAoIVhGU19GT1JDRURfU0hVVERPV04obXApKSB7Ci0JCS8qIEdyaW8gcmVkaXJlY3Rpb24gd291bGQgZ28gaGVyZQotCQkgKiBpZiAoWEZTX0JVRl9JU19HUklPKGJwKSkgewotCQkgKi8KLQogCQl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm47CiAJfQogCiAJeGZzX2J1ZnRyYWNlKCJYRlNCRFNUUkFUIElPRVJST1IiLCBicCk7Ci0JcmV0dXJuICh4ZnNfYmlvZXJyb3JfcmVsc2UoYnApKTsKKwl4ZnNfYmlvZXJyb3JfcmVsc2UoYnApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAppbmRleCBlMjAwMjUzLi5lMWQ0OThiIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaApAQCAtNjgsNyArNjgsOCBAQAogI2RlZmluZSB4ZnNfaW52YWxfY2FjaGVkX3RyYWNlKGlwLCBvZmZzZXQsIGxlbiwgZmlyc3QsIGxhc3QpCiAjZW5kaWYKIAotZXh0ZXJuIGludCB4ZnNiZHN0cmF0KHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19idWYgKik7CisvKiBlcnJvcnMgZnJvbSB4ZnNiZHN0cmF0KCkgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgYnVmZmVyICovCitleHRlcm4gdm9pZCB4ZnNiZHN0cmF0KHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19idWYgKik7CiBleHRlcm4gaW50IHhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICopOwogZXh0ZXJuIGludCB4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N0YXRzLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19zdGF0cy5oCmluZGV4IDhiYTdhMmYuLmFmZDBiMGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N0YXRzLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3RhdHMuaApAQCAtMTQ0LDggKzE0NCw4IEBACiAjIGRlZmluZSBYRlNfU1RBVFNfREVDKGNvdW50KQogIyBkZWZpbmUgWEZTX1NUQVRTX0FERChjb3VudCwgaW5jKQogCi1zdGF0aWMgX19pbmxpbmUgdm9pZCB4ZnNfaW5pdF9wcm9jZnModm9pZCkgeyB9Owotc3RhdGljIF9faW5saW5lIHZvaWQgeGZzX2NsZWFudXBfcHJvY2ZzKHZvaWQpIHsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfaW5pdF9wcm9jZnModm9pZCkgeyB9Oworc3RhdGljIGlubGluZSB2b2lkIHhmc19jbGVhbnVwX3Byb2Nmcyh2b2lkKSB7IH07CiAKICNlbmRpZgkvKiAhQ09ORklHX1BST0NfRlMgKi8KIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggMjFkZmM5ZC4uODY1ZWI3MCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAljaGFyCQkJKnRoaXNfY2hhciwgKnZhbHVlLCAqZW92OwogCWludAkJCWRzdW5pdCwgZHN3aWR0aCwgdm9sX2RzdW5pdCwgdm9sX2Rzd2lkdGg7CiAJaW50CQkJaW9zaXplOwotCWludAkJCWlrZWVwID0gMDsKKwlpbnQJCQlkbWFwaV9pbXBsaWVzX2lrZWVwID0gMTsKIAogCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9CQVJSSUVSOwogCWFyZ3MtPmZsYWdzMiB8PSBYRlNNTlQyX0NPTVBBVF9JT1NJWkU7CkBAIC0zMDIsMTAgKzMwMiwxMCBAQAogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfTk9CQVJSSUVSKSkgewogCQkJYXJncy0+ZmxhZ3MgJj0gflhGU01OVF9CQVJSSUVSOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfSUtFRVApKSB7Ci0JCQlpa2VlcCA9IDE7Ci0JCQlhcmdzLT5mbGFncyAmPSB+WEZTTU5UX0lERUxFVEU7CisJCQlhcmdzLT5mbGFncyB8PSBYRlNNTlRfSUtFRVA7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT0lLRUVQKSkgewotCQkJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0lERUxFVEU7CisJCQlkbWFwaV9pbXBsaWVzX2lrZWVwID0gMDsKKwkJCWFyZ3MtPmZsYWdzICY9IH5YRlNNTlRfSUtFRVA7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9MQVJHRUlPKSkgewogCQkJYXJncy0+ZmxhZ3MyICY9IH5YRlNNTlQyX0NPTVBBVF9JT1NJWkU7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT0xBUkdFSU8pKSB7CkBAIC00MTAsOCArNDEwLDggQEAKIAkgKiBOb3RlIHRoYXQgaWYgImlrZWVwIiBvciAibm9pa2VlcCIgbW91bnQgb3B0aW9ucyBhcmUKIAkgKiBzdXBwbGllZCwgdGhlbiB0aGV5IGFyZSBob25vcmVkLgogCSAqLwotCWlmICghKGFyZ3MtPmZsYWdzICYgWEZTTU5UX0RNQVBJKSAmJiAhaWtlZXApCi0JCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9JREVMRVRFOworCWlmICgoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfRE1BUEkpICYmIGRtYXBpX2ltcGxpZXNfaWtlZXApCisJCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9JS0VFUDsKIAogCWlmICgoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfTk9BTElHTikgIT0gWEZTTU5UX05PQUxJR04pIHsKIAkJaWYgKGRzdW5pdCkgewpAQCAtNDQ2LDYgKzQ0Niw3IEBACiB7CiAJc3RhdGljIHN0cnVjdCBwcm9jX3hmc19pbmZvIHhmc19pbmZvX3NldFtdID0gewogCQkvKiB0aGUgZmV3IHNpbXBsZSBvbmVzIHdlIGNhbiBnZXQgZnJvbSB0aGUgbW91bnQgc3RydWN0ICovCisJCXsgWEZTX01PVU5UX0lLRUVQLAkJIiwiIE1OVE9QVF9JS0VFUCB9LAogCQl7IFhGU19NT1VOVF9XU1lOQywJCSIsIiBNTlRPUFRfV1NZTkMgfSwKIAkJeyBYRlNfTU9VTlRfSU5PNjQsCQkiLCIgTU5UT1BUX0lOTzY0IH0sCiAJCXsgWEZTX01PVU5UX05PQUxJR04sCQkiLCIgTU5UT1BUX05PQUxJR04gfSwKQEAgLTQ2MSw3ICs0NjIsNiBAQAogCX07CiAJc3RhdGljIHN0cnVjdCBwcm9jX3hmc19pbmZvIHhmc19pbmZvX3Vuc2V0W10gPSB7CiAJCS8qIHRoZSBmZXcgc2ltcGxlIG9uZXMgd2UgY2FuIGdldCBmcm9tIHRoZSBtb3VudCBzdHJ1Y3QgKi8KLQkJeyBYRlNfTU9VTlRfSURFTEVURSwJCSIsIiBNTlRPUFRfSUtFRVAgfSwKIAkJeyBYRlNfTU9VTlRfQ09NUEFUX0lPU0laRSwJIiwiIE1OVE9QVF9MQVJHRUlPIH0sCiAJCXsgWEZTX01PVU5UX0JBUlJJRVIsCQkiLCIgTU5UT1BUX05PQkFSUklFUiB9LAogCQl7IFhGU19NT1VOVF9TTUFMTF9JTlVNUywJIiwiIE1OVE9QVF82NEJJVElOT0RFIH0sCkBAIC04OTYsNyArODk2LDggQEAKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKIAlpbnQJCQlzeW5jKQogewotCWludAkJCWVycm9yID0gMCwgZmxhZ3MgPSBGTFVTSF9JTk9ERTsKKwlpbnQJCQllcnJvciA9IDA7CisJaW50CQkJZmxhZ3MgPSAwOwogCiAJeGZzX2l0cmFjZV9lbnRyeShYRlNfSShpbm9kZSkpOwogCWlmIChzeW5jKSB7CkBAIC05MzQsNyArOTM1LDcgQEAKIAkJeGZzX2luYWN0aXZlKGlwKTsKIAkJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lNT0RJRklFRCk7CiAJCWlmICh4ZnNfcmVjbGFpbShpcCkpCi0JCQlwYW5pYygiJXM6IGNhbm5vdCByZWNsYWltIDB4JXBcbiIsIF9fRlVOQ1RJT05fXywgaW5vZGUpOworCQkJcGFuaWMoIiVzOiBjYW5ub3QgcmVjbGFpbSAweCVwXG4iLCBfX2Z1bmNfXywgaW5vZGUpOwogCX0KIAogCUFTU0VSVChYRlNfSShpbm9kZSkgPT0gTlVMTCk7CkBAIC0xMDI3LDggKzEwMjgsNyBAQAogCWludAkJZXJyb3I7CiAKIAlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpKQotCQllcnJvciA9IHhmc19zeW5jKG1wLCBTWU5DX0ZTREFUQSB8IFNZTkNfQkRGTFVTSCB8IFNZTkNfQVRUUiB8Ci0JCQkJICAgICBTWU5DX1JFRkNBQ0hFIHwgU1lOQ19TVVBFUik7CisJCWVycm9yID0geGZzX3N5bmMobXAsIFNZTkNfRlNEQVRBIHwgU1lOQ19CREZMVVNIIHwgU1lOQ19BVFRSKTsKIAltcC0+bV9zeW5jX3NlcSsrOwogCXdha2VfdXAoJm1wLT5tX3dhaXRfc2luZ2xlX3N5bmNfdGFzayk7CiB9CkBAIC0xMzA2LDcgKzEzMDYsNyBAQAogCXZvaWQJCQkqZGF0YSwKIAlpbnQJCQlzaWxlbnQpCiB7Ci0Jc3RydWN0IGlub2RlCQkqcm9vdHZwOworCXN0cnVjdCBpbm9kZQkJKnJvb3Q7CiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBOVUxMOwogCXN0cnVjdCB4ZnNfbW91bnRfYXJncwkqYXJncyA9IHhmc19hcmdzX2FsbG9jYXRlKHNiLCBzaWxlbnQpOwogCWludAkJCWVycm9yOwpAQCAtMTM0NCwxOSArMTM0NCwxOCBAQAogCXNiLT5zX3RpbWVfZ3JhbiA9IDE7CiAJc2V0X3Bvc2l4X2FjbF9mbGFnKHNiKTsKIAotCXJvb3R2cCA9IGlncmFiKG1wLT5tX3Jvb3RpcC0+aV92bm9kZSk7Ci0JaWYgKCFyb290dnApIHsKKwlyb290ID0gaWdyYWIobXAtPm1fcm9vdGlwLT5pX3Zub2RlKTsKKwlpZiAoIXJvb3QpIHsKIAkJZXJyb3IgPSBFTk9FTlQ7CiAJCWdvdG8gZmFpbF91bm1vdW50OwogCX0KLQotCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qodm5fdG9faW5vZGUocm9vdHZwKSk7Ci0JaWYgKCFzYi0+c19yb290KSB7Ci0JCWVycm9yID0gRU5PTUVNOworCWlmIChpc19iYWRfaW5vZGUocm9vdCkpIHsKKwkJZXJyb3IgPSBFSU5WQUw7CiAJCWdvdG8gZmFpbF92bnJlbGU7CiAJfQotCWlmIChpc19iYWRfaW5vZGUoc2ItPnNfcm9vdC0+ZF9pbm9kZSkpIHsKLQkJZXJyb3IgPSBFSU5WQUw7CisJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKKwlpZiAoIXNiLT5zX3Jvb3QpIHsKKwkJZXJyb3IgPSBFTk9NRU07CiAJCWdvdG8gZmFpbF92bnJlbGU7CiAJfQogCkBAIC0xMzc4LDcgKzEzNzcsNyBAQAogCQlkcHV0KHNiLT5zX3Jvb3QpOwogCQlzYi0+c19yb290ID0gTlVMTDsKIAl9IGVsc2UgewotCQlWTl9SRUxFKHJvb3R2cCk7CisJCWlwdXQocm9vdCk7CiAJfQogCiBmYWlsX3VubW91bnQ6CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAppbmRleCAzZWZjZjQ1Li4zZWZiN2M2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKQEAgLTUwLDEzICs1MCw3IEBACiAjIGRlZmluZSBzZXRfcG9zaXhfYWNsX2ZsYWcoc2IpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1hGU19TRUNVUklUWQotIyBkZWZpbmUgWEZTX1NFQ1VSSVRZX1NUUklORwkic2VjdXJpdHkgYXR0cmlidXRlcywgIgotIyBkZWZpbmUgRU5PU0VDVVJJVFkJCTAKLSNlbHNlCi0jIGRlZmluZSBYRlNfU0VDVVJJVFlfU1RSSU5HCi0jIGRlZmluZSBFTk9TRUNVUklUWQkJRU9QTk9UU1VQUAotI2VuZGlmCisjZGVmaW5lIFhGU19TRUNVUklUWV9TVFJJTkcJInNlY3VyaXR5IGF0dHJpYnV0ZXMsICIKIAogI2lmZGVmIENPTkZJR19YRlNfUlQKICMgZGVmaW5lIFhGU19SRUFMVElNRV9TVFJJTkcJInJlYWx0aW1lLCAiCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192ZnMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCmluZGV4IDRkYTAzYTQuLjdlNjBjNzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIFNZTkNfUkVGQ0FDSEUJCTB4MDA0MCAgLyogcHJ1bmUgc29tZSBvZiB0aGUgbmZzIHJlZiBjYWNoZSAqLwogI2RlZmluZSBTWU5DX1JFTU9VTlQJCTB4MDA4MCAgLyogcmVtb3VudCByZWFkb25seSwgbm8gZHVtbXkgTFJzICovCiAjZGVmaW5lIFNZTkNfSU9XQUlUCQkweDAxMDAgIC8qIHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUgKi8KLSNkZWZpbmUgU1lOQ19TVVBFUgkJMHgwMjAwICAvKiBmbHVzaCBzdXBlcmJsb2NrIHRvIGRpc2sgKi8KIAogLyoKICAqIFdoZW4gcmVtb3VudGluZyBhIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9yIGZyZWV6aW5nIHRoZSBmaWxlc3lzdGVtLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKaW5kZXggYjVlYTQxOC4uOGI0ZDYzYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCkBAIC0yMyw4ICsyMyw2IEBACiBzdHJ1Y3QgeGZzX2lvbWFwOwogc3RydWN0IGF0dHJsaXN0X2N1cnNvcl9rZXJuOwogCi10eXBlZGVmIHN0cnVjdCBkZW50cnkJYmh2X3ZuYW1lX3Q7Ci10eXBlZGVmIF9fdTY0CQliaHZfdm51bWJlcl90OwogdHlwZWRlZiBzdHJ1Y3QgaW5vZGUJYmh2X3Zub2RlX3Q7CiAKICNkZWZpbmUgVk5fSVNMTksodnApCVNfSVNMTksoKHZwKS0+aV9tb2RlKQpAQCAtNDYsMTggKzQ0LDYgQEAKIH0KIAogLyoKLSAqIFZhbHVlcyBmb3IgdGhlIHZvcF9yd2xvY2svcnd1bmxvY2sgZmxhZ3MgcGFyYW1ldGVyLgotICovCi10eXBlZGVmIGVudW0gYmh2X3Zyd2xvY2sgewotCVZSV0xPQ0tfTk9ORSwKLQlWUldMT0NLX1JFQUQsCi0JVlJXTE9DS19XUklURSwKLQlWUldMT0NLX1dSSVRFX0RJUkVDVCwKLQlWUldMT0NLX1RSWV9SRUFELAotCVZSV0xPQ0tfVFJZX1dSSVRFCi19IGJodl92cndsb2NrX3Q7Ci0KLS8qCiAgKiBSZXR1cm4gdmFsdWVzIGZvciB4ZnNfaW5hY3RpdmUuICBBIHJldHVybiB2YWx1ZSBvZgogICogVk5fSU5BQ1RJVkVfTk9DQUNIRSBpbXBsaWVzIHRoYXQgdGhlIGZpbGUgc3lzdGVtIGJlaGF2aW9yCiAgKiBoYXMgZGlzYXNzb2NpYXRlZCBpdHMgc3RhdGUgYW5kIGJodl9kZXNjX3QgZnJvbSB0aGUgdm5vZGUuCkBAIC03MywxMiArNTksOSBAQAogI2RlZmluZSBJT19JTlZJUwkweDAwMDIwCQkvKiBkb24ndCB1cGRhdGUgaW5vZGUgdGltZXN0YW1wcyAqLwogCiAvKgotICogRmxhZ3MgZm9yIHZvcF9pZmx1c2ggY2FsbAorICogRmxhZ3MgZm9yIHhmc19pbm9kZV9mbHVzaAogICovCiAjZGVmaW5lIEZMVVNIX1NZTkMJCTEJLyogd2FpdCBmb3IgZmx1c2ggdG8gY29tcGxldGUJKi8KLSNkZWZpbmUgRkxVU0hfSU5PREUJCTIJLyogZmx1c2ggdGhlIGlub2RlIGl0c2VsZgkqLwotI2RlZmluZSBGTFVTSF9MT0cJCTQJLyogZm9yY2UgdGhlIGxhc3QgbG9nIGVudHJ5IGZvcgotCQkJCQkgKiB0aGlzIGlub2RlIG91dCB0byBkaXNrCSovCiAKIC8qCiAgKiBGbHVzaC9JbnZhbGlkYXRlIG9wdGlvbnMgZm9yIHZvcF90b3NzL2ZsdXNoL2ZsdXNoaW52YWxfcGFnZXMuCkBAIC0yMjYsMTMgKzIwOSw2IEBACiB9CiAKIC8qCi0gKiBWbmFtZSBoYW5kbGluZyBtYWNyb3MuCi0gKi8KLSNkZWZpbmUgVk5BTUUoZGVudHJ5KQkJKChjaGFyICopIChkZW50cnkpLT5kX25hbWUubmFtZSkKLSNkZWZpbmUgVk5BTUVMRU4oZGVudHJ5KQkoKGRlbnRyeSktPmRfbmFtZS5sZW4pCi0jZGVmaW5lIFZOQU1FX1RPX1ZOT0RFKGRlbnRyeSkJKHZuX2Zyb21faW5vZGUoKGRlbnRyeSktPmRfaW5vZGUpKQotCi0vKgogICogRGVhbGluZyB3aXRoIGJhZCBpbm9kZXMKICAqLwogc3RhdGljIGlubGluZSBpbnQgVk5fQkFEKGJodl92bm9kZV90ICp2cCkKQEAgLTMwMyw5ICsyNzksOSBAQAogZXh0ZXJuIHZvaWQgX3hmc19pdHJhY2VfcmVmKHN0cnVjdCB4ZnNfaW5vZGUgKiwgY2hhciAqLCBpbnQsIGluc3RfdCAqKTsKIGV4dGVybiB2b2lkIHhmc19pdHJhY2VfcmVsZShzdHJ1Y3QgeGZzX2lub2RlICosIGNoYXIgKiwgaW50LCBpbnN0X3QgKik7CiAjZGVmaW5lIHhmc19pdHJhY2VfZW50cnkoaXApCVwKLQlfeGZzX2l0cmFjZV9lbnRyeShpcCwgX19GVU5DVElPTl9fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcykKKwlfeGZzX2l0cmFjZV9lbnRyeShpcCwgX19mdW5jX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKQogI2RlZmluZSB4ZnNfaXRyYWNlX2V4aXQoaXApCVwKLQlfeGZzX2l0cmFjZV9leGl0KGlwLCBfX0ZVTkNUSU9OX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKQorCV94ZnNfaXRyYWNlX2V4aXQoaXAsIF9fZnVuY19fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcykKICNkZWZpbmUgeGZzX2l0cmFjZV9leGl0X3RhZyhpcCwgdGFnKQlcCiAJX3hmc19pdHJhY2VfZXhpdChpcCwgdGFnLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcykKICNkZWZpbmUgeGZzX2l0cmFjZV9yZWYoaXApCVwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwppbmRleCA2NjViYWJjLi42MzFlYmIzIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogCWlmIChmbGFncyAmIFhGU19RTU9QVF9ERUxXUkkpIHsKIAkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKIAl9IGVsc2UgaWYgKGZsYWdzICYgWEZTX1FNT1BUX0FTWU5DKSB7Ci0JCXhmc19iYXdyaXRlKG1wLCBicCk7CisJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKIAl9IGVsc2UgewogCQllcnJvciA9IHhmc19id3JpdGUobXAsIGJwKTsKIAl9CkBAIC0xNDM5LDkgKzE0MzksNyBAQAogCXVpbnQJCWZsYWdzKQogewogCXhmc19kcWhhc2hfdAkqdGhpc2hhc2g7Ci0JeGZzX21vdW50X3QJKm1wOwotCi0JbXAgPSBkcXAtPnFfbW91bnQ7CisJeGZzX21vdW50X3QJKm1wID0gZHFwLT5xX21vdW50OwogCiAJQVNTRVJUKFhGU19RTV9JU19NUExJU1RfTE9DS0VEKG1wKSk7CiAJQVNTRVJUKFhGU19EUV9JU19IQVNIX0xPQ0tFRChkcXAtPnFfaGFzaCkpOwpAQCAtMTQ4NSw2ICsxNDgzLDcgQEAKIAkgKiB3ZSdyZSB1bm1vdW50aW5nLCB3ZSBkbyBjYXJlLCBzbyB3ZSBmbHVzaCBpdCBhbmQgd2FpdC4KIAkgKi8KIAlpZiAoWEZTX0RRX0lTX0RJUlRZKGRxcCkpIHsKKwkJaW50CWVycm9yOwogCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUVBVUkdFIC0+RFFGTFVTSDogRFFESVJUWSIpOwogCQkvKiBkcWZsdXNoIHVubG9ja3MgZHFmbG9jayAqLwogCQkvKgpAQCAtMTQ5NSw3ICsxNDk0LDEwIEBACiAJCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgZ2V0dGluZyBkaXNrIGVycm9ycyBoZXJlLiBXZSBuZWVkCiAJCSAqIHRvIHB1cmdlIHRoaXMgZHF1b3QgYW55d2F5LCBzbyB3ZSBnbyBhaGVhZCByZWdhcmRsZXNzLgogCQkgKi8KLQkJKHZvaWQpIHhmc19xbV9kcWZsdXNoKGRxcCwgWEZTX1FNT1BUX1NZTkMpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgWEZTX1FNT1BUX1NZTkMpOworCQlpZiAoZXJyb3IpCisJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKKwkJCQkieGZzX3FtX2RxcHVyZ2U6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CiAJCXhmc19kcWZsb2NrKGRxcCk7CiAJfQogCUFTU0VSVChkcXAtPnFfcGluY291bnQgPT0gMCk7CkBAIC0xNTgwLDEyICsxNTgyLDE4IEBACiAJCSAgICBYRlNfSU5DT1JFX1RSWUxPQ0spOwogCWlmIChicCAhPSBOVUxMKSB7CiAJCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpIHsKKwkJCWludAllcnJvcjsKIAkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewogCQkJCXhmc19sb2dfZm9yY2UoZHFwLT5xX21vdW50LAogCQkJCQkgICAgICAoeGZzX2xzbl90KTAsCiAJCQkJCSAgICAgIFhGU19MT0dfRk9SQ0UpOwogCQkJfQotCQkJeGZzX2Jhd3JpdGUoZHFwLT5xX21vdW50LCBicCk7CisJCQllcnJvciA9IHhmc19iYXdyaXRlKGRxcC0+cV9tb3VudCwgYnApOworCQkJaWYgKGVycm9yKQorCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKKwkJCQkJInhmc19xbV9kcWZsb2NrX3B1c2hidWZfd2FpdDogIgorCQkJCQkicHVzaGJ1ZiBlcnJvciAlZCBvbiBkcXAgJXAsIGJwICVwIiwKKwkJCQkJZXJyb3IsIGRxcCwgYnApOwogCQl9IGVsc2UgewogCQkJeGZzX2J1Zl9yZWxzZShicCk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKaW5kZXggMTgwMGU4ZC4uMzZlMDVjYSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKQEAgLTE0Niw2ICsxNDYsNyBAQAogCXhmc19kcV9sb2dpdGVtX3QJKmxvZ2l0ZW0pCiB7CiAJeGZzX2RxdW90X3QJKmRxcDsKKwlpbnQJCWVycm9yOwogCiAJZHFwID0gbG9naXRlbS0+cWxpX2RxdW90OwogCkBAIC0xNjEsNyArMTYyLDExIEBACiAJICogbG9jayB3aXRob3V0IHNsZWVwaW5nLCB0aGVuIHRoZXJlIG11c3Qgbm90IGhhdmUgYmVlbgogCSAqIGFueW9uZSBpbiB0aGUgcHJvY2VzcyBvZiBmbHVzaGluZyB0aGUgZHF1b3QuCiAJICovCi0JeGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfQl9ERUxXUkkpOworCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwlpZiAoZXJyb3IpCisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKKwkJCSJ4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoOiBwdXNoIGVycm9yICVkIG9uIGRxcCAlcCIsCisJCQllcnJvciwgZHFwKTsKIAl4ZnNfZHF1bmxvY2soZHFwKTsKIH0KIApAQCAtMjYyLDExICsyNjcsMTYgQEAKIAkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7CiAJCQl9CiAJCQlpZiAoZG9wdXNoKSB7CisJCQkJaW50CWVycm9yOwogI2lmZGVmIFhGU1JBQ0VERUJVRwogCQkJCWRlbGF5X2Zvcl9pbnRyKCk7CiAJCQkJZGVsYXkoMzAwKTsKICNlbmRpZgotCQkJCXhmc19iYXdyaXRlKG1wLCBicCk7CisJCQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShtcCwgYnApOworCQkJCWlmIChlcnJvcikKKwkJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCisJInhmc19xbV9kcXVvdF9sb2dpdGVtX3B1c2hidWY6IHB1c2hidWYgZXJyb3IgJWQgb24gcWlwICVwLCBicCAlcCIsCisJCQkJCQkJZXJyb3IsIHFpcCwgYnApOwogCQkJfSBlbHNlIHsKIAkJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCAxZjNkYTViLi40MGVhNTY0IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0zMDQsOCArMzA0LDExIEBACiAgKiBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgcXVvdGFpbmZvLiAgVGhpcyBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvcgogICogcnVubmluZyBhIHF1b3RhY2hlY2sgYXMgbmVjZXNzYXJ5LiAgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUgc3VwZXJibG9jawogICogaXMgY29uc2lzdGVudGx5IHJlYWQgaW4gYXQgdGhpcyBwb2ludC4KKyAqCisgKiBJZiB3ZSBmYWlsIGhlcmUsIHRoZSBtb3VudCB3aWxsIGNvbnRpbnVlIHdpdGggcXVvdGEgdHVybmVkIG9mZi4gV2UgZG9uJ3QKKyAqIG5lZWQgdG8gaW5pZGljYXRlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBhdCBhbGwuCiAgKi8KLWludAordm9pZAogeGZzX3FtX21vdW50X3F1b3RhcygKIAl4ZnNfbW91bnRfdAkqbXAsCiAJaW50CQltZnNpX2ZsYWdzKQpAQCAtMzEzLDcgKzMxNiw2IEBACiAJaW50CQllcnJvciA9IDA7CiAJdWludAkJc2JmOwogCi0KIAkvKgogCSAqIElmIHF1b3RhcyBvbiByZWFsdGltZSB2b2x1bWVzIGlzIG5vdCBzdXBwb3J0ZWQsIHdlIGRpc2FibGUKIAkgKiBxdW90YXMgaW1tZWRpYXRlbHkuCkBAIC0zMzIsNyArMzM0LDggQEAKIAkgKiBBbGxvY2F0ZSB0aGUgcXVvdGFpbmZvIHN0cnVjdHVyZSBpbnNpZGUgdGhlIG1vdW50IHN0cnVjdCwgYW5kCiAJICogY3JlYXRlIHF1b3RhaW5vZGUocyksIGFuZCBjaGFuZ2UvcmV2IHN1cGVyYmxvY2sgaWYgbmVjZXNzYXJ5LgogCSAqLwotCWlmICgoZXJyb3IgPSB4ZnNfcW1faW5pdF9xdW90YWluZm8obXApKSkgeworCWVycm9yID0geGZzX3FtX2luaXRfcXVvdGFpbmZvKG1wKTsKKwlpZiAoZXJyb3IpIHsKIAkJLyoKIAkJICogV2UgbXVzdCB0dXJuIG9mZiBxdW90YXMuCiAJCSAqLwpAQCAtMzQ0LDEyICszNDcsMTEgQEAKIAkgKiBJZiBhbnkgb2YgdGhlIHF1b3RhcyBhcmUgbm90IGNvbnNpc3RlbnQsIGRvIGEgcXVvdGFjaGVjay4KIAkgKi8KIAlpZiAoWEZTX1FNX05FRURfUVVPVEFDSEVDSyhtcCkgJiYKLQkJIShtZnNpX2ZsYWdzICYgWEZTX01GU0lfTk9fUVVPVEFDSEVDSykpIHsKLQkJaWYgKChlcnJvciA9IHhmc19xbV9xdW90YWNoZWNrKG1wKSkpIHsKLQkJCS8qIFF1b3RhY2hlY2sgaGFzIGZhaWxlZCBhbmQgcXVvdGFzIGhhdmUKLQkJCSAqIGJlZW4gZGlzYWJsZWQuCi0JCQkgKi8KLQkJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOworCSAgICAhKG1mc2lfZmxhZ3MgJiBYRlNfTUZTSV9OT19RVU9UQUNIRUNLKSkgeworCQllcnJvciA9IHhmc19xbV9xdW90YWNoZWNrKG1wKTsKKwkJaWYgKGVycm9yKSB7CisJCQkvKiBRdW90YWNoZWNrIGZhaWxlZCBhbmQgZGlzYWJsZWQgcXVvdGFzLiAqLworCQkJcmV0dXJuOwogCQl9CiAJfQogCS8qIApAQCAtMzU3LDEyICszNTksMTAgQEAKIAkgKiBxdW90YWNoZWNrZWQgc3RhdHVzLCBzaW5jZSB3ZSB3b24ndCBiZSBkb2luZyBhY2NvdW50aW5nIGZvcgogCSAqIHRoYXQgdHlwZSBhbnltb3JlLgogCSAqLwotCWlmICghWEZTX0lTX1VRVU9UQV9PTihtcCkpIHsKKwlpZiAoIVhGU19JU19VUVVPVEFfT04obXApKQogCQltcC0+bV9xZmxhZ3MgJj0gflhGU19VUVVPVEFfQ0hLRDsKLQl9Ci0JaWYgKCEoWEZTX0lTX0dRVU9UQV9PTihtcCkgfHwgWEZTX0lTX1BRVU9UQV9PTihtcCkpKSB7CisJaWYgKCEoWEZTX0lTX0dRVU9UQV9PTihtcCkgfHwgWEZTX0lTX1BRVU9UQV9PTihtcCkpKQogCQltcC0+bV9xZmxhZ3MgJj0gflhGU19PUVVPVEFfQ0hLRDsKLQl9CiAKICB3cml0ZV9jaGFuZ2VzOgogCS8qCkBAIC0zOTIsNyArMzkyLDcgQEAKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCiAJCQkiRmFpbGVkIHRvIGluaXRpYWxpemUgZGlzayBxdW90YXMuIik7CiAJfQotCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOworCXJldHVybjsKIH0KIAogLyoKQEAgLTE0MDUsMTMgKzE0MDUsMTMgQEAKICNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKFhGU19MT1VEX1JFQ09WRVJZKQogCQl1bnNpZ25lZCBvbGR2ID0gbXAtPm1fc2Iuc2JfdmVyc2lvbm51bTsKICNlbmRpZgotCQlBU1NFUlQoIVhGU19TQl9WRVJTSU9OX0hBU1FVT1RBKCZtcC0+bV9zYikpOworCQlBU1NFUlQoIXhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKCZtcC0+bV9zYikpOwogCQlBU1NFUlQoKHNiZmllbGRzICYgKFhGU19TQl9WRVJTSU9OTlVNIHwgWEZTX1NCX1VRVU9USU5PIHwKIAkJCQkgICBYRlNfU0JfR1FVT1RJTk8gfCBYRlNfU0JfUUZMQUdTKSkgPT0KIAkJICAgICAgIChYRlNfU0JfVkVSU0lPTk5VTSB8IFhGU19TQl9VUVVPVElOTyB8CiAJCQlYRlNfU0JfR1FVT1RJTk8gfCBYRlNfU0JfUUZMQUdTKSk7CiAKLQkJWEZTX1NCX1ZFUlNJT05fQUREUVVPVEEoJm1wLT5tX3NiKTsKKwkJeGZzX3NiX3ZlcnNpb25fYWRkcXVvdGEoJm1wLT5tX3NiKTsKIAkJbXAtPm1fc2Iuc2JfdXF1b3Rpbm8gPSBOVUxMRlNJTk87CiAJCW1wLT5tX3NiLnNiX2dxdW90aW5vID0gTlVMTEZTSU5POwogCkBAIC0xNDM4LDcgKzE0MzgsNyBAQAogfQogCiAKLVNUQVRJQyBpbnQKK1NUQVRJQyB2b2lkCiB4ZnNfcW1fcmVzZXRfZHFjb3VudHMoCiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19idWZfdAkqYnAsCkBAIC0xNDc4LDggKzE0NzgsNiBAQAogCQlkZHEtPmRfcnRid2FybnMgPSAwOwogCQlkZHEgPSAoeGZzX2Rpc2tfZHF1b3RfdCAqKSAoKHhmc19kcWJsa190ICopZGRxICsgMSk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTE1MjAsNyArMTUxOCw3IEBACiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOwogCi0JCSh2b2lkKSB4ZnNfcW1fcmVzZXRfZHFjb3VudHMobXAsIGJwLCBmaXJzdGlkLCB0eXBlKTsKKwkJeGZzX3FtX3Jlc2V0X2RxY291bnRzKG1wLCBicCwgZmlyc3RpZCwgdHlwZSk7CiAJCXhmc19iZHdyaXRlKG1wLCBicCk7CiAJCS8qCiAJCSAqIGdvdG8gdGhlIG5leHQgYmxvY2suCkBAIC0xODEwLDcgKzE4MDgsNyBAQAogCSAqIE5vdyByZWxlYXNlIHRoZSBpbm9kZS4gVGhpcyB3aWxsIHNlbmQgaXQgdG8gJ2luYWN0aXZlJywgYW5kCiAJICogcG9zc2libHkgZXZlbiBmcmVlIGJsb2Nrcy4KIAkgKi8KLQlWTl9SRUxFKFhGU19JVE9WKGlwKSk7CisJSVJFTEUoaXApOwogCiAJLyoKIAkgKiBHb3RvIG5leHQgaW5vZGUuCkBAIC0xODgwLDYgKzE4NzgsMTQgQEAKIAl9IHdoaWxlICghIGRvbmUpOwogCiAJLyoKKwkgKiBXZSd2ZSBtYWRlIGFsbCB0aGUgY2hhbmdlcyB0aGF0IHdlIG5lZWQgdG8gbWFrZSBpbmNvcmUuCisJICogRmx1c2ggdGhlbSBkb3duIHRvIGRpc2sgYnVmZmVycyBpZiBldmVyeXRoaW5nIHdhcyB1cGRhdGVkCisJICogc3VjY2Vzc2Z1bGx5LgorCSAqLworCWlmICghZXJyb3IpCisJCWVycm9yID0geGZzX3FtX2RxZmx1c2hfYWxsKG1wLCBYRlNfUU1PUFRfREVMV1JJKTsKKworCS8qCiAJICogV2UgY2FuIGdldCB0aGlzIGVycm9yIGlmIHdlIGNvdWxkbid0IGRvIGEgZHF1b3QgYWxsb2NhdGlvbiBpbnNpZGUKIAkgKiB4ZnNfcW1fZHF1c2FnZV9hZGp1c3QgKHZpYSBidWxrc3RhdCkuIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlCiAJICogZGlydHkgZHF1b3RzIHRoYXQgbWlnaHQgYmUgY2FjaGVkLCB3ZSBqdXN0IHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGVtCkBAIC0xODkwLDExICsxODk2LDYgQEAKIAkJeGZzX3FtX2RxcHVyZ2VfYWxsKG1wLCBYRlNfUU1PUFRfUVVPVEFMTCB8IFhGU19RTU9QVF9RVU9UQU9GRik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KLQkvKgotCSAqIFdlJ3ZlIG1hZGUgYWxsIHRoZSBjaGFuZ2VzIHRoYXQgd2UgbmVlZCB0byBtYWtlIGluY29yZS4KLQkgKiBOb3cgZmx1c2hfdGhlbSBkb3duIHRvIGRpc2sgYnVmZmVycy4KLQkgKi8KLQl4ZnNfcW1fZHFmbHVzaF9hbGwobXAsIFhGU19RTU9QVF9ERUxXUkkpOwogCiAJLyoKIAkgKiBXZSBkaWRuJ3QgbG9nIGFueXRoaW5nLCBiZWNhdXNlIGlmIHdlIGNyYXNoZWQsIHdlJ2xsIGhhdmUgdG8KQEAgLTE5MjYsNyArMTkyNywxMCBAQAogCQlBU1NFUlQobXAtPm1fcXVvdGFpbmZvICE9IE5VTEwpOwogCQlBU1NFUlQoeGZzX0dxbSAhPSBOVUxMKTsKIAkJeGZzX3FtX2Rlc3Ryb3lfcXVvdGFpbmZvKG1wKTsKLQkJKHZvaWQpeGZzX21vdW50X3Jlc2V0X3NicWZsYWdzKG1wKTsKKwkJaWYgKHhmc19tb3VudF9yZXNldF9zYnFmbGFncyhtcCkpIHsKKwkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUyBxdW90YWNoZWNrICVzOiAiCisJCQkJIkZhaWxlZCB0byByZXNldCBxdW90YSBmbGFncy4iLCBtcC0+bV9mc25hbWUpOworCQl9CiAJfSBlbHNlIHsKIAkJY21uX2VycihDRV9OT1RFLCAiWEZTIHF1b3RhY2hlY2sgJXM6IERvbmUuIiwgbXAtPm1fZnNuYW1lKTsKIAl9CkBAIC0xOTU0LDcgKzE5NTgsNyBAQAogCS8qCiAJICogR2V0IHRoZSB1cXVvdGEgYW5kIGdxdW90YSBpbm9kZXMKIAkgKi8KLQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTUVVPVEEoJm1wLT5tX3NiKSkgeworCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNxdW90YSgmbXAtPm1fc2IpKSB7CiAJCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSAmJgogCQkgICAgbXAtPm1fc2Iuc2JfdXF1b3Rpbm8gIT0gTlVMTEZTSU5PKSB7CiAJCQlBU1NFUlQobXAtPm1fc2Iuc2JfdXF1b3Rpbm8gPiAwKTsKQEAgLTE5NjgsNyArMTk3Miw3IEBACiAJCQlpZiAoKGVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX2dxdW90aW5vLAogCQkJCQkgICAgIDAsIDAsICZnaXAsIDApKSkgewogCQkJCWlmICh1aXApCi0JCQkJCVZOX1JFTEUoWEZTX0lUT1YodWlwKSk7CisJCQkJCUlSRUxFKHVpcCk7CiAJCQkJcmV0dXJuIFhGU19FUlJPUihlcnJvcik7CiAJCQl9CiAJCX0KQEAgLTE5OTksNyArMjAwMyw3IEBACiAJCQkJCSAgc2JmbGFncyB8IFhGU19TQl9HUVVPVElOTywgZmxhZ3MpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWlmICh1aXApCi0JCQkJVk5fUkVMRShYRlNfSVRPVih1aXApKTsKKwkJCQlJUkVMRSh1aXApOwogCiAJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAkJfQpAQCAtMjA5MywxMiArMjA5NywxNyBAQAogCQkgKiBkaXJ0eSBkcXVvdHMuCiAJCSAqLwogCQlpZiAoWEZTX0RRX0lTX0RJUlRZKGRxcCkpIHsKKwkJCWludAllcnJvcjsKIAkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRU0hBS0U6IERRRElSVFkiKTsKIAkJCS8qCiAJCQkgKiBXZSBmbHVzaCBpdCBkZWxheWVkIHdyaXRlLCBzbyBkb24ndCBib3RoZXIKIAkJCSAqIHJlbGVhc2luZyB0aGUgbXBsb2NrLgogCQkJICovCi0JCQkodm9pZCkgeGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWlmIChlcnJvcikgeworCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKKwkJCSJ4ZnNfcW1fZHFmbHVzaF9hbGw6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CisJCQl9CiAJCQl4ZnNfZHF1bmxvY2soZHFwKTsgLyogZHFmbHVzaCB1bmxvY2tzIGRxZmxvY2sgKi8KIAkJCWRxcCA9IGRxcC0+ZHFfZmxuZXh0OwogCQkJY29udGludWU7CkBAIC0yMjY1LDEyICsyMjc0LDE3IEBACiAJCSAqIGRpcnR5IGRxdW90cy4KIAkJICovCiAJCWlmIChYRlNfRFFfSVNfRElSVFkoZHFwKSkgeworCQkJaW50CWVycm9yOwogCQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFSRUNMQUlNOiBEUURJUlRZIik7CiAJCQkvKgogCQkJICogV2UgZmx1c2ggaXQgZGVsYXllZCB3cml0ZSwgc28gZG9uJ3QgYm90aGVyCiAJCQkgKiByZWxlYXNpbmcgdGhlIGZyZWVsaXN0IGxvY2suCiAJCQkgKi8KLQkJCSh2b2lkKSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9ERUxXUkkpOworCQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9ERUxXUkkpOworCQkJaWYgKGVycm9yKSB7CisJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAorCQkJInhmc19xbV9kcXJlY2xhaW06IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CisJCQl9CiAJCQl4ZnNfZHF1bmxvY2soZHFwKTsgLyogZHFmbHVzaCB1bmxvY2tzIGRxZmxvY2sgKi8KIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yMzc4LDkgKzIzOTIsOSBAQAogCX0KIAogCXhmc19tb2Rfc2IodHAsIGZsYWdzKTsKLQkodm9pZCkgeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmggYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKaW5kZXggYmFmNTM3Yy4uY2QyMzAwZSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5oCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uaApAQCAtMTY1LDcgKzE2NSw3IEBACiAjZGVmaW5lIFhGU19RTV9SRUxFKHhxbSkJKCh4cW0pLT5xbV9ucmVmcy0tKQogCiBleHRlcm4gdm9pZAkJeGZzX3FtX2Rlc3Ryb3lfcXVvdGFpbmZvKHhmc19tb3VudF90ICopOwotZXh0ZXJuIGludAkJeGZzX3FtX21vdW50X3F1b3Rhcyh4ZnNfbW91bnRfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQJCXhmc19xbV9tb3VudF9xdW90YXMoeGZzX21vdW50X3QgKiwgaW50KTsKIGV4dGVybiBpbnQJCXhmc19xbV9xdW90YWNoZWNrKHhmc19tb3VudF90ICopOwogZXh0ZXJuIHZvaWQJCXhmc19xbV91bm1vdW50X3F1b3RhZGVzdHJveSh4ZnNfbW91bnRfdCAqKTsKIGV4dGVybiBpbnQJCXhmc19xbV91bm1vdW50X3F1b3Rhcyh4ZnNfbW91bnRfdCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCmluZGV4IDk3YmIzMjkuLmY0ZjZjNGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJKnF1b3RhZmxhZ3MgPSAwOwogCSpuZWVkcXVvdGFtb3VudCA9IEJfRkFMU0U7CiAKLQlxdW90YW9uZGlzayA9IFhGU19TQl9WRVJTSU9OX0hBU1FVT1RBKCZtcC0+bV9zYikgJiYKKwlxdW90YW9uZGlzayA9IHhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKCZtcC0+bV9zYikgJiYKIAkJCQkobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0FMTF9RVU9UQV9BQ0NUKTsKIAogCWlmIChxdW90YW9uZGlzaykgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zdGF0cy5oIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zdGF0cy5oCmluZGV4IGE1MGZmYWIuLjViOTY0ZmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3RhdHMuaAorKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N0YXRzLmgKQEAgLTQ1LDggKzQ1LDggQEAKIAogIyBkZWZpbmUgWFFNX1NUQVRTX0lOQyhjb3VudCkJZG8geyB9IHdoaWxlICgwKQogCi1zdGF0aWMgX19pbmxpbmUgdm9pZCB4ZnNfcW1faW5pdF9wcm9jZnModm9pZCkgeyB9Owotc3RhdGljIF9faW5saW5lIHZvaWQgeGZzX3FtX2NsZWFudXBfcHJvY2ZzKHZvaWQpIHsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfcW1faW5pdF9wcm9jZnModm9pZCkgeyB9Oworc3RhdGljIGlubGluZSB2b2lkIHhmc19xbV9jbGVhbnVwX3Byb2Nmcyh2b2lkKSB7IH07CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggMmNjNTg4Ni4uODM0MjgyMyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtMjc5LDkgKzI3OSwxMiBAQAogCiAJLyoKIAkgKiBXcml0ZSB0aGUgTElfUVVPVEFPRkYgbG9nIHJlY29yZCwgYW5kIGRvIFNCIGNoYW5nZXMgYXRvbWljYWxseSwKLQkgKiBhbmQgc3luY2hyb25vdXNseS4KKwkgKiBhbmQgc3luY2hyb25vdXNseS4gSWYgd2UgZmFpbCB0byB3cml0ZSwgd2Ugc2hvdWxkIGFib3J0IHRoZQorCSAqIG9wZXJhdGlvbiBhcyBpdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIHNhZmVseSBpZiB3ZSBjcmFzaC4KIAkgKi8KLQl4ZnNfcW1fbG9nX3F1b3Rhb2ZmKG1wLCAmcW9mZnN0YXJ0LCBmbGFncyk7CisJZXJyb3IgPSB4ZnNfcW1fbG9nX3F1b3Rhb2ZmKG1wLCAmcW9mZnN0YXJ0LCBmbGFncyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lcnJvcjsKIAogCS8qCiAJICogTmV4dCB3ZSBjbGVhciB0aGUgWEZTX01PVU5UXypEUV9BQ1RJVkUgYml0KHMpIGluIHRoZSBtb3VudCBzdHJ1Y3QKQEAgLTMzNyw3ICszNDAsMTIgQEAKIAkgKiBTbywgd2UgaGF2ZSBRVU9UQU9GRiBzdGFydCBhbmQgZW5kIGxvZ2l0ZW1zOyB0aGUgc3RhcnQKIAkgKiBsb2dpdGVtIHdvbid0IGdldCBvdmVyd3JpdHRlbiB1bnRpbCB0aGUgZW5kIGxvZ2l0ZW0gYXBwZWFycy4uLgogCSAqLwotCXhmc19xbV9sb2dfcXVvdGFvZmZfZW5kKG1wLCBxb2Zmc3RhcnQsIGZsYWdzKTsKKwllcnJvciA9IHhmc19xbV9sb2dfcXVvdGFvZmZfZW5kKG1wLCBxb2Zmc3RhcnQsIGZsYWdzKTsKKwlpZiAoZXJyb3IpIHsKKwkJLyogV2UncmUgc2NyZXdlZCBub3cuIFNodXRkb3duIGlzIHRoZSBvbmx5IG9wdGlvbi4gKi8KKwkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9DT1JSVVBUX0lOQ09SRSk7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KIAogCS8qCiAJICogSWYgcXVvdGFzIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQsIGNsb3NlIHNob3AuCkBAIC0zNjEsNiArMzY5LDcgQEAKIAkJWEZTX1BVUkdFX0lOT0RFKFhGU19RSV9HUUlQKG1wKSk7CiAJCVhGU19RSV9HUUlQKG1wKSA9IE5VTEw7CiAJfQorb3V0X2Vycm9yOgogCW11dGV4X3VubG9jaygmKFhGU19RSV9RT0ZGTE9DSyhtcCkpKTsKIAogCXJldHVybiAoZXJyb3IpOwpAQCAtMzcxLDM1ICszODAsMzQgQEAKIAl4ZnNfbW91bnRfdAkqbXAsCiAJdWludAkJZmxhZ3MpCiB7Ci0JaW50CQllcnJvcjsKKwlpbnQJCWVycm9yID0gMCwgZXJyb3IyID0gMDsKIAl4ZnNfaW5vZGVfdAkqcWlwOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVQRVJNKTsKLQllcnJvciA9IDA7Ci0JaWYgKCFYRlNfU0JfVkVSU0lPTl9IQVNRVU9UQSgmbXAtPm1fc2IpIHx8IGZsYWdzID09IDApIHsKKwlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKCZtcC0+bV9zYikgfHwgZmxhZ3MgPT0gMCkgewogCQlxZHByaW50aygicXRydW5jIGZsYWdzPSV4IG1fcWZsYWdzPSV4XG4iLCBmbGFncywgbXAtPm1fcWZsYWdzKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KIAogCWlmICgoZmxhZ3MgJiBYRlNfRFFfVVNFUikgJiYgbXAtPm1fc2Iuc2JfdXF1b3Rpbm8gIT0gTlVMTEZTSU5PKSB7CiAJCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX3VxdW90aW5vLCAwLCAwLCAmcWlwLCAwKTsKLQkJaWYgKCEgZXJyb3IpIHsKLQkJCSh2b2lkKSB4ZnNfdHJ1bmNhdGVfZmlsZShtcCwgcWlwKTsKLQkJCVZOX1JFTEUoWEZTX0lUT1YocWlwKSk7CisJCWlmICghZXJyb3IpIHsKKwkJCWVycm9yID0geGZzX3RydW5jYXRlX2ZpbGUobXAsIHFpcCk7CisJCQlJUkVMRShxaXApOwogCQl9CiAJfQogCiAJaWYgKChmbGFncyAmIChYRlNfRFFfR1JPVVB8WEZTX0RRX1BST0opKSAmJgogCSAgICBtcC0+bV9zYi5zYl9ncXVvdGlubyAhPSBOVUxMRlNJTk8pIHsKLQkJZXJyb3IgPSB4ZnNfaWdldChtcCwgTlVMTCwgbXAtPm1fc2Iuc2JfZ3F1b3Rpbm8sIDAsIDAsICZxaXAsIDApOwotCQlpZiAoISBlcnJvcikgewotCQkJKHZvaWQpIHhmc190cnVuY2F0ZV9maWxlKG1wLCBxaXApOwotCQkJVk5fUkVMRShYRlNfSVRPVihxaXApKTsKKwkJZXJyb3IyID0geGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX2dxdW90aW5vLCAwLCAwLCAmcWlwLCAwKTsKKwkJaWYgKCFlcnJvcjIpIHsKKwkJCWVycm9yMiA9IHhmc190cnVuY2F0ZV9maWxlKG1wLCBxaXApOworCQkJSVJFTEUocWlwKTsKIAkJfQogCX0KIAotCXJldHVybiAoZXJyb3IpOworCXJldHVybiBlcnJvciA/IGVycm9yIDogZXJyb3IyOwogfQogCiAKQEAgLTUyMiw3ICs1MzAsNyBAQAogCW1lbXNldChvdXQsIDAsIHNpemVvZihmc19xdW90YV9zdGF0X3QpKTsKIAogCW91dC0+cXNfdmVyc2lvbiA9IEZTX1FTVEFUX1ZFUlNJT047Ci0JaWYgKCEgWEZTX1NCX1ZFUlNJT05fSEFTUVVPVEEoJm1wLT5tX3NiKSkgeworCWlmICgheGZzX3NiX3ZlcnNpb25faGFzcXVvdGEoJm1wLT5tX3NiKSkgewogCQlvdXQtPnFzX3VxdW90YS5xZnNfaW5vID0gTlVMTEZTSU5POwogCQlvdXQtPnFzX2dxdW90YS5xZnNfaW5vID0gTlVMTEZTSU5POwogCQlyZXR1cm4gKDApOwpAQCAtNTUyLDEzICs1NjAsMTMgQEAKIAkJb3V0LT5xc191cXVvdGEucWZzX25ibGtzID0gdWlwLT5pX2QuZGlfbmJsb2NrczsKIAkJb3V0LT5xc191cXVvdGEucWZzX25leHRlbnRzID0gdWlwLT5pX2QuZGlfbmV4dGVudHM7CiAJCWlmICh0ZW1wdXFpcCkKLQkJCVZOX1JFTEUoWEZTX0lUT1YodWlwKSk7CisJCQlJUkVMRSh1aXApOwogCX0KIAlpZiAoZ2lwKSB7CiAJCW91dC0+cXNfZ3F1b3RhLnFmc19uYmxrcyA9IGdpcC0+aV9kLmRpX25ibG9ja3M7CiAJCW91dC0+cXNfZ3F1b3RhLnFmc19uZXh0ZW50cyA9IGdpcC0+aV9kLmRpX25leHRlbnRzOwogCQlpZiAodGVtcGdxaXApCi0JCQlWTl9SRUxFKFhGU19JVE9WKGdpcCkpOworCQkJSVJFTEUoZ2lwKTsKIAl9CiAJaWYgKG1wLT5tX3F1b3RhaW5mbykgewogCQlvdXQtPnFzX2luY29yZWRxcyA9IFhGU19RSV9NUExORFFVT1RTKG1wKTsKQEAgLTcyNiwxMiArNzM0LDEyIEBACiAJeGZzX3RyYW5zX2xvZ19kcXVvdCh0cCwgZHFwKTsKIAogCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIlFfU0VUUUxJTTogQ09NTUlUIik7Ci0JeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIAl4ZnNfcW1fZHFwcmludChkcXApOwogCXhmc19xbV9kcXJlbGUoZHFwKTsKIAltdXRleF91bmxvY2soJihYRlNfUUlfUU9GRkxPQ0sobXApKSk7CiAKLQlyZXR1cm4gKDApOworCXJldHVybiBlcnJvcjsKIH0KIAogU1RBVElDIGludApAQCAtMTA5NSw3ICsxMTAzLDcgQEAKIAkJICogaW5hY3RpdmUgY29kZSBpbiBoZWxsLgogCQkgKi8KIAkJaWYgKHZub2RlX3JlZmQpCi0JCQlWTl9SRUxFKHZwKTsKKwkJCUlSRUxFKGlwKTsKIAkJWEZTX01PVU5UX0lMT0NLKG1wKTsKIAkJLyoKIAkJICogSWYgYW4gaW5vZGUgd2FzIGluc2VydGVkIG9yIHJlbW92ZWQsIHdlIGdvdHRhCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9rdHJhY2UuYyBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCmluZGV4IDEyOTA2N2MuLjBiNzVkMzAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCkBAIC0yNCw3ICsyNCw3IEBACiB2b2lkIF9faW5pdAoga3RyYWNlX2luaXQoaW50IHplbnRyaWVzKQogewotCWt0cmFjZV96ZW50cmllcyA9IHplbnRyaWVzOworCWt0cmFjZV96ZW50cmllcyA9IHJvdW5kdXBfcG93X29mX3R3byh6ZW50cmllcyk7CiAKIAlrdHJhY2VfaGRyX3pvbmUgPSBrbWVtX3pvbmVfaW5pdChzaXplb2Yoa3RyYWNlX3QpLAogCQkJCQkia3RyYWNlX2hkciIpOwpAQCAtNDcsMTMgKzQ3LDE2IEBACiAgKiBrdHJhY2VfYWxsb2MoKQogICoKICAqIEFsbG9jYXRlIGEga3RyYWNlIGhlYWRlciBhbmQgZW5vdWdoIGJ1ZmZlcmluZyBmb3IgdGhlIGdpdmVuCi0gKiBudW1iZXIgb2YgZW50cmllcy4KKyAqIG51bWJlciBvZiBlbnRyaWVzLiBSb3VuZCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdXAgdG8gYQorICogcG93ZXIgb2YgMiBzbyB3ZSBjYW4gZG8gZmFzdCBtYXNraW5nIHRvIGdldCB0aGUgaW5kZXggZnJvbQorICogdGhlIGF0b21pYyBpbmRleCBjb3VudGVyLgogICovCiBrdHJhY2VfdCAqCiBrdHJhY2VfYWxsb2MoaW50IG5lbnRyaWVzLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3Qgc2xlZXApCiB7CiAJa3RyYWNlX3QgICAgICAgICprdHA7CiAJa3RyYWNlX2VudHJ5X3QgICprdGVwOworCWludAkJZW50cmllczsKIAogCWt0cCA9IChrdHJhY2VfdCopa21lbV96b25lX2FsbG9jKGt0cmFjZV9oZHJfem9uZSwgc2xlZXApOwogCkBAIC03MCwxMSArNzMsMTIgQEAKIAkvKgogCSAqIFNwZWNpYWwgdHJlYXRtZW50IGZvciBidWZmZXJzIHdpdGggdGhlIGt0cmFjZV96ZW50cmllcyBlbnRyaWVzCiAJICovCi0JaWYgKG5lbnRyaWVzID09IGt0cmFjZV96ZW50cmllcykgeworCWVudHJpZXMgPSByb3VuZHVwX3Bvd19vZl90d28obmVudHJpZXMpOworCWlmIChlbnRyaWVzID09IGt0cmFjZV96ZW50cmllcykgewogCQlrdGVwID0gKGt0cmFjZV9lbnRyeV90KilrbWVtX3pvbmVfemFsbG9jKGt0cmFjZV9lbnRfem9uZSwKIAkJCQkJCQkgICAgc2xlZXApOwogCX0gZWxzZSB7Ci0JCWt0ZXAgPSAoa3RyYWNlX2VudHJ5X3QqKWttZW1femFsbG9jKChuZW50cmllcyAqIHNpemVvZigqa3RlcCkpLAorCQlrdGVwID0gKGt0cmFjZV9lbnRyeV90KilrbWVtX3phbGxvYygoZW50cmllcyAqIHNpemVvZigqa3RlcCkpLAogCQkJCQkJCSAgICBzbGVlcCB8IEtNX0xBUkdFKTsKIAl9CiAKQEAgLTkxLDggKzk1LDEwIEBACiAJfQogCiAJa3RwLT5rdF9lbnRyaWVzICA9IGt0ZXA7Ci0Ja3RwLT5rdF9uZW50cmllcyA9IG5lbnRyaWVzOwotCWt0cC0+a3RfaW5kZXggICAgPSAwOworCWt0cC0+a3RfbmVudHJpZXMgPSBlbnRyaWVzOworCUFTU0VSVChpc19wb3dlcl9vZl8yKGVudHJpZXMpKTsKKwlrdHAtPmt0X2luZGV4X21hc2sgPSBlbnRyaWVzIC0gMTsKKwlhdG9taWNfc2V0KCZrdHAtPmt0X2luZGV4LCAwKTsKIAlrdHAtPmt0X3JvbGxvdmVyID0gMDsKIAlyZXR1cm4ga3RwOwogfQpAQCAtMTUxLDggKzE1Nyw2IEBACiAJdm9pZCAgICAgICAgICAgICp2YWwxNCwKIAl2b2lkICAgICAgICAgICAgKnZhbDE1KQogewotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sod3JhcF9sb2NrKTsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwogCWludCAgICAgICAgICAgICBpbmRleDsKIAlrdHJhY2VfZW50cnlfdCAgKmt0ZXA7CiAKQEAgLTE2MSwxMiArMTY1LDggQEAKIAkvKgogCSAqIEdyYWIgYW4gZW50cnkgYnkgcHVzaGluZyB0aGUgaW5kZXggdXAgdG8gdGhlIG5leHQgb25lLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZ3cmFwX2xvY2ssIGZsYWdzKTsKLQlpbmRleCA9IGt0cC0+a3RfaW5kZXg7Ci0JaWYgKCsra3RwLT5rdF9pbmRleCA9PSBrdHAtPmt0X25lbnRyaWVzKQotCQlrdHAtPmt0X2luZGV4ID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cmFwX2xvY2ssIGZsYWdzKTsKLQorCWluZGV4ID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJmt0cC0+a3RfaW5kZXgpOworCWluZGV4ID0gKGluZGV4IC0gMSkgJiBrdHAtPmt0X2luZGV4X21hc2s7CiAJaWYgKCFrdHAtPmt0X3JvbGxvdmVyICYmIGluZGV4ID09IGt0cC0+a3RfbmVudHJpZXMgLSAxKQogCQlrdHAtPmt0X3JvbGxvdmVyID0gMTsKIApAQCAtMTk5LDExICsxOTksMTIgQEAKIGt0cmFjZV9uZW50cmllcygKIAlrdHJhY2VfdCAgICAgICAgKmt0cCkKIHsKLQlpZiAoa3RwID09IE5VTEwpIHsKKwlpbnQJaW5kZXg7CisJaWYgKGt0cCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyZXR1cm4gKGt0cC0+a3Rfcm9sbG92ZXIgPyBrdHAtPmt0X25lbnRyaWVzIDoga3RwLT5rdF9pbmRleCk7CisJaW5kZXggPSBhdG9taWNfcmVhZCgma3RwLT5rdF9pbmRleCkgJiBrdHAtPmt0X2luZGV4X21hc2s7CisJcmV0dXJuIChrdHAtPmt0X3JvbGxvdmVyID8ga3RwLT5rdF9uZW50cmllcyA6IGluZGV4KTsKIH0KIAogLyoKQEAgLTIyOCw3ICsyMjksNyBAQAogCWludCAgICAgICAgICAgICBuZW50cmllczsKIAogCWlmIChrdHAtPmt0X3JvbGxvdmVyKQotCQlpbmRleCA9IGt0cC0+a3RfaW5kZXg7CisJCWluZGV4ID0gYXRvbWljX3JlYWQoJmt0cC0+a3RfaW5kZXgpICYga3RwLT5rdF9pbmRleF9tYXNrOwogCWVsc2UKIAkJaW5kZXggPSAwOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9rdHJhY2UuaCBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5oCmluZGV4IDU2ZTcyYjQuLjc0MWQ2OTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5oCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5oCkBAIC0zMCw3ICszMCw4IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IGt0cmFjZSB7CiAJaW50CQlrdF9uZW50cmllczsJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gdHJhY2UgYnVmICovCi0JaW50CQlrdF9pbmRleDsJLyogY3VycmVudCBpbmRleCBpbiBlbnRyaWVzICovCisJYXRvbWljX3QJa3RfaW5kZXg7CS8qIGN1cnJlbnQgaW5kZXggaW4gZW50cmllcyAqLworCXVuc2lnbmVkIGludAlrdF9pbmRleF9tYXNrOwogCWludAkJa3Rfcm9sbG92ZXI7CiAJa3RyYWNlX2VudHJ5X3QJKmt0X2VudHJpZXM7CS8qIGJ1ZmZlciBvZiBlbnRyaWVzICovCiB9IGt0cmFjZV90OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmcy5oIGIvZnMveGZzL3hmcy5oCmluZGV4IDU0MGU0YzkuLjc2NWFhZjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnMuaAorKysgYi9mcy94ZnMveGZzLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgU1RBVElDCiAjZGVmaW5lIERFQlVHIDEKICNkZWZpbmUgWEZTX0JVRl9MT0NLX1RSQUNLSU5HIDEKLS8qICNkZWZpbmUgUVVPVEFERUJVRyAxICovCisjZGVmaW5lIFFVT1RBREVCVUcgMQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWEZTX1RSQUNFCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FjbC5jIGIvZnMveGZzL3hmc19hY2wuYwppbmRleCA3MjcyZmUzLi44ZTEzMGI5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FjbC5jCisrKyBiL2ZzL3hmcy94ZnNfYWNsLmMKQEAgLTMwNywxMiArMzA3LDEzIEBACiAKIAlWTl9IT0xEKHZwKTsKIAllcnJvciA9IHhmc19hY2xfYWxsb3dfc2V0KHZwLCBraW5kKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwogCiAJLyogSW5jb21pbmcgQUNMIGV4aXN0cywgc2V0IGZpbGUgbW9kZSBiYXNlZCBvbiBpdHMgdmFsdWUgKi8KLQlpZiAoa2luZCA9PSBfQUNMX1RZUEVfQUNDRVNTKQotCQl4ZnNfYWNsX3NldG1vZGUodnAsIHhmc19hY2wsICZiYXNpY3Blcm1zKTsKKwlpZiAoIWVycm9yICYmIGtpbmQgPT0gX0FDTF9UWVBFX0FDQ0VTUykKKwkJZXJyb3IgPSB4ZnNfYWNsX3NldG1vZGUodnAsIHhmc19hY2wsICZiYXNpY3Blcm1zKTsKKworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgbW9yZSB0aGFuIHN0ZCB1bml4IHBlcm1pc3Npb25zLCBzZXQgdXAgdGhlIGFjdHVhbCBhdHRyLgpAQCAtMzIzLDcgKzMyNCw3IEBACiAJaWYgKCFiYXNpY3Blcm1zKSB7CiAJCXhmc19hY2xfc2V0X2F0dHIodnAsIHhmc19hY2wsIGtpbmQsICZlcnJvcik7CiAJfSBlbHNlIHsKLQkJeGZzX2FjbF92cmVtb3ZlKHZwLCBfQUNMX1RZUEVfQUNDRVNTKTsKKwkJZXJyb3IgPSAteGZzX2FjbF92cmVtb3ZlKHZwLCBfQUNMX1RZUEVfQUNDRVNTKTsKIAl9CiAKIG91dDoKQEAgLTcwNyw3ICs3MDgsOSBAQAogCiAJbWVtY3B5KGNhY2wsIHBkYWNscCwgc2l6ZW9mKHhmc19hY2xfdCkpOwogCXhmc19hY2xfZmlsdGVyX21vZGUobW9kZSwgY2FjbCk7Ci0JeGZzX2FjbF9zZXRtb2RlKHZwLCBjYWNsLCAmYmFzaWNwZXJtcyk7CisJZXJyb3IgPSB4ZnNfYWNsX3NldG1vZGUodnAsIGNhY2wsICZiYXNpY3Blcm1zKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2Vycm9yOwogCiAJLyoKIAkgKiBTZXQgdGhlIERlZmF1bHQgYW5kIEFjY2VzcyBBQ0wgb24gdGhlIGZpbGUuICBUaGUgbW9kZSBpcyBhbHJlYWR5CkBAIC03MjAsNiArNzIzLDcgQEAKIAkJeGZzX2FjbF9zZXRfYXR0cih2cCwgcGRhY2xwLCBfQUNMX1RZUEVfREVGQVVMVCwgJmVycm9yKTsKIAlpZiAoIWVycm9yICYmICFiYXNpY3Blcm1zKQogCQl4ZnNfYWNsX3NldF9hdHRyKHZwLCBjYWNsLCBfQUNMX1RZUEVfQUNDRVNTLCAmZXJyb3IpOworb3V0X2Vycm9yOgogCV9BQ0xfRlJFRShjYWNsKTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggYmRiZmJiZS4uMTk1NmY4MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZQlYRlNBX0ZJWFVQX0JOT19PSwkxCiAjZGVmaW5lCVhGU0FfRklYVVBfQ05UX09LCTIKIAotU1RBVElDIGludAorU1RBVElDIHZvaWQKIHhmc19hbGxvY19zZWFyY2hfYnVzeSh4ZnNfdHJhbnNfdCAqdHAsCiAJCSAgICB4ZnNfYWdudW1iZXJfdCBhZ25vLAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCkBAIC01NSwyNCArNTUsMjQgQEAKIGt0cmFjZV90ICp4ZnNfYWxsb2NfdHJhY2VfYnVmOwogCiAjZGVmaW5lCVRSQUNFX0FMTE9DKHMsYSkJXAotCXhmc19hbGxvY190cmFjZV9hbGxvYyhfX0ZVTkNUSU9OX18sIHMsIGEsIF9fTElORV9fKQorCXhmc19hbGxvY190cmFjZV9hbGxvYyhfX2Z1bmNfXywgcywgYSwgX19MSU5FX18pCiAjZGVmaW5lCVRSQUNFX0ZSRUUocyxhLGIseCxmKQlcCi0JeGZzX2FsbG9jX3RyYWNlX2ZyZWUoX19GVU5DVElPTl9fLCBzLCBtcCwgYSwgYiwgeCwgZiwgX19MSU5FX18pCisJeGZzX2FsbG9jX3RyYWNlX2ZyZWUoX19mdW5jX18sIHMsIG1wLCBhLCBiLCB4LCBmLCBfX0xJTkVfXykKICNkZWZpbmUJVFJBQ0VfTU9EQUdGKHMsYSxmKQlcCi0JeGZzX2FsbG9jX3RyYWNlX21vZGFnZihfX0ZVTkNUSU9OX18sIHMsIG1wLCBhLCBmLCBfX0xJTkVfXykKLSNkZWZpbmUJVFJBQ0VfQlVTWShfX0ZVTkNUSU9OX18scyxhZyxhZ2IsbCxzbCx0cCkJXAotCXhmc19hbGxvY190cmFjZV9idXN5KF9fRlVOQ1RJT05fXywgcywgbXAsIGFnLCBhZ2IsIGwsIHNsLCB0cCwgWEZTX0FMTE9DX0tUUkFDRV9CVVNZLCBfX0xJTkVfXykKLSNkZWZpbmUJVFJBQ0VfVU5CVVNZKF9fRlVOQ1RJT05fXyxzLGFnLHNsLHRwKQlcCi0JeGZzX2FsbG9jX3RyYWNlX2J1c3koX19GVU5DVElPTl9fLCBzLCBtcCwgYWcsIC0xLCAtMSwgc2wsIHRwLCBYRlNfQUxMT0NfS1RSQUNFX1VOQlVTWSwgX19MSU5FX18pCi0jZGVmaW5lCVRSQUNFX0JVU1lTRUFSQ0goX19GVU5DVElPTl9fLHMsYWcsYWdiLGwsc2wsdHApCVwKLQl4ZnNfYWxsb2NfdHJhY2VfYnVzeShfX0ZVTkNUSU9OX18sIHMsIG1wLCBhZywgYWdiLCBsLCBzbCwgdHAsIFhGU19BTExPQ19LVFJBQ0VfQlVTWVNFQVJDSCwgX19MSU5FX18pCisJeGZzX2FsbG9jX3RyYWNlX21vZGFnZihfX2Z1bmNfXywgcywgbXAsIGEsIGYsIF9fTElORV9fKQorI2RlZmluZQlUUkFDRV9CVVNZKF9fZnVuY19fLHMsYWcsYWdiLGwsc2wsdHApCVwKKwl4ZnNfYWxsb2NfdHJhY2VfYnVzeShfX2Z1bmNfXywgcywgbXAsIGFnLCBhZ2IsIGwsIHNsLCB0cCwgWEZTX0FMTE9DX0tUUkFDRV9CVVNZLCBfX0xJTkVfXykKKyNkZWZpbmUJVFJBQ0VfVU5CVVNZKF9fZnVuY19fLHMsYWcsc2wsdHApCVwKKwl4ZnNfYWxsb2NfdHJhY2VfYnVzeShfX2Z1bmNfXywgcywgbXAsIGFnLCAtMSwgLTEsIHNsLCB0cCwgWEZTX0FMTE9DX0tUUkFDRV9VTkJVU1ksIF9fTElORV9fKQorI2RlZmluZQlUUkFDRV9CVVNZU0VBUkNIKF9fZnVuY19fLHMsYWcsYWdiLGwsdHApCVwKKwl4ZnNfYWxsb2NfdHJhY2VfYnVzeShfX2Z1bmNfXywgcywgbXAsIGFnLCBhZ2IsIGwsIDAsIHRwLCBYRlNfQUxMT0NfS1RSQUNFX0JVU1lTRUFSQ0gsIF9fTElORV9fKQogI2Vsc2UKICNkZWZpbmUJVFJBQ0VfQUxMT0MocyxhKQogI2RlZmluZQlUUkFDRV9GUkVFKHMsYSxiLHgsZikKICNkZWZpbmUJVFJBQ0VfTU9EQUdGKHMsYSxmKQogI2RlZmluZQlUUkFDRV9CVVNZKHMsYSxhZyxhZ2IsbCxzbCx0cCkKICNkZWZpbmUJVFJBQ0VfVU5CVVNZKGZuYW1lLHMsYWcsc2wsdHApCi0jZGVmaW5lCVRSQUNFX0JVU1lTRUFSQ0goZm5hbWUscyxhZyxhZ2IsbCxzbCx0cCkKKyNkZWZpbmUJVFJBQ0VfQlVTWVNFQVJDSChmbmFtZSxzLGFnLGFnYixsLHRwKQogI2VuZGlmCS8qIFhGU19BTExPQ19UUkFDRSAqLwogCiAvKgpAQCAtOTMsNyArOTMsNyBAQAogICogQ29tcHV0ZSBhbGlnbmVkIHZlcnNpb24gb2YgdGhlIGZvdW5kIGV4dGVudC4KICAqIFRha2VzIGFsaWdubWVudCBhbmQgbWluIGxlbmd0aCBpbnRvIGFjY291bnQuCiAgKi8KLVNUQVRJQyBpbnQJCQkJLyogc3VjY2VzcyAoPj0gbWlubGVuKSAqLworU1RBVElDIHZvaWQKIHhmc19hbGxvY19jb21wdXRlX2FsaWduZWQoCiAJeGZzX2FnYmxvY2tfdAlmb3VuZGJubywJLyogc3RhcnRpbmcgYmxvY2sgaW4gZm91bmQgZXh0ZW50ICovCiAJeGZzX2V4dGxlbl90CWZvdW5kbGVuLAkvKiBsZW5ndGggaW4gZm91bmQgZXh0ZW50ICovCkBAIC0xMTYsNyArMTE2LDYgQEAKIAl9CiAJKnJlc2JubyA9IGJubzsKIAkqcmVzbGVuID0gbGVuOwotCXJldHVybiBsZW4gPj0gbWlubGVuOwogfQogCiAvKgpAQCAtODM3LDkgKzgzNiw5IEBACiAJCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2dldF9yZWMoY250X2N1ciwgJmx0Ym5vLCAmbHRsZW4sICZpKSkpCiAJCQkJZ290byBlcnJvcjA7CiAJCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7Ci0JCQlpZiAoIXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQobHRibm8sIGx0bGVuLAotCQkJCQlhcmdzLT5hbGlnbm1lbnQsIGFyZ3MtPm1pbmxlbiwKLQkJCQkJJmx0Ym5vYSwgJmx0bGVuYSkpCisJCQl4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGx0Ym5vLCBsdGxlbiwgYXJncy0+YWxpZ25tZW50LAorCQkJCQlhcmdzLT5taW5sZW4sICZsdGJub2EsICZsdGxlbmEpOworCQkJaWYgKGx0bGVuYSA8IGFyZ3MtPm1pbmxlbikKIAkJCQljb250aW51ZTsKIAkJCWFyZ3MtPmxlbiA9IFhGU19FWFRMRU5fTUlOKGx0bGVuYSwgYXJncy0+bWF4bGVuKTsKIAkJCXhmc19hbGxvY19maXhfbGVuKGFyZ3MpOwpAQCAtOTU4LDkgKzk1Nyw5IEBACiAJCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2dldF9yZWMoYm5vX2N1cl9sdCwgJmx0Ym5vLCAmbHRsZW4sICZpKSkpCiAJCQkJZ290byBlcnJvcjA7CiAJCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7Ci0JCQlpZiAoeGZzX2FsbG9jX2NvbXB1dGVfYWxpZ25lZChsdGJubywgbHRsZW4sCi0JCQkJCWFyZ3MtPmFsaWdubWVudCwgYXJncy0+bWlubGVuLAotCQkJCQkmbHRibm9hLCAmbHRsZW5hKSkKKwkJCXhmc19hbGxvY19jb21wdXRlX2FsaWduZWQobHRibm8sIGx0bGVuLCBhcmdzLT5hbGlnbm1lbnQsCisJCQkJCWFyZ3MtPm1pbmxlbiwgJmx0Ym5vYSwgJmx0bGVuYSk7CisJCQlpZiAobHRsZW5hID49IGFyZ3MtPm1pbmxlbikKIAkJCQlicmVhazsKIAkJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZGVjcmVtZW50KGJub19jdXJfbHQsIDAsICZpKSkpCiAJCQkJZ290byBlcnJvcjA7CkBAIC05NzQsOSArOTczLDkgQEAKIAkJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZ2V0X3JlYyhibm9fY3VyX2d0LCAmZ3Ribm8sICZndGxlbiwgJmkpKSkKIAkJCQlnb3RvIGVycm9yMDsKIAkJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKGkgPT0gMSwgZXJyb3IwKTsKLQkJCWlmICh4ZnNfYWxsb2NfY29tcHV0ZV9hbGlnbmVkKGd0Ym5vLCBndGxlbiwKLQkJCQkJYXJncy0+YWxpZ25tZW50LCBhcmdzLT5taW5sZW4sCi0JCQkJCSZndGJub2EsICZndGxlbmEpKQorCQkJeGZzX2FsbG9jX2NvbXB1dGVfYWxpZ25lZChndGJubywgZ3RsZW4sIGFyZ3MtPmFsaWdubWVudCwKKwkJCQkJYXJncy0+bWlubGVuLCAmZ3Ribm9hLCAmZ3RsZW5hKTsKKwkJCWlmIChndGxlbmEgPj0gYXJncy0+bWlubGVuKQogCQkJCWJyZWFrOwogCQkJaWYgKChlcnJvciA9IHhmc19hbGxvY19pbmNyZW1lbnQoYm5vX2N1cl9ndCwgMCwgJmkpKSkKIAkJCQlnb3RvIGVycm9yMDsKQEAgLTI1NjIsOSArMjU2MSwxMCBAQAogCiAKIC8qCi0gKiByZXR1cm5zIG5vbi16ZXJvIGlmIGFueSBvZiAoYWdubyxibm8pOmxlbiBpcyBpbiBhIGJ1c3kgbGlzdAorICogSWYgd2UgZmluZCB0aGUgZXh0ZW50IGluIHRoZSBidXN5IGxpc3QsIGZvcmNlIHRoZSBsb2cgb3V0IHRvIGdldCB0aGUKKyAqIGV4dGVudCBvdXQgb2YgdGhlIGJ1c3kgbGlzdCBzbyB0aGUgY2FsbGVyIGNhbiB1c2UgaXQgc3RyYWlnaHQgYXdheS4KICAqLwotU1RBVElDIGludAorU1RBVElDIHZvaWQKIHhmc19hbGxvY19zZWFyY2hfYnVzeSh4ZnNfdHJhbnNfdCAqdHAsCiAJCSAgICB4ZnNfYWdudW1iZXJfdCBhZ25vLAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCkBAIC0yNTcyLDcgKzI1NzIsNiBAQAogewogCXhmc19tb3VudF90CQkqbXA7CiAJeGZzX3BlcmFnX2J1c3lfdAkqYnN5OwotCWludAkJCW47CiAJeGZzX2FnYmxvY2tfdAkJdWVuZCwgYmVuZDsKIAl4ZnNfbHNuX3QJCWxzbjsKIAlpbnQJCQljbnQ7CkBAIC0yNTg1LDIxICsyNTg0LDE4IEBACiAJdWVuZCA9IGJubyArIGxlbiAtIDE7CiAKIAkvKiBzZWFyY2ggcGFnYl9saXN0IGZvciB0aGlzIHNsb3QsIHNraXBwaW5nIG9wZW4gc2xvdHMgKi8KLQlmb3IgKGJzeSA9IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCwgbiA9IDA7Ci0JICAgICBjbnQ7IGJzeSsrLCBuKyspIHsKKwlmb3IgKGJzeSA9IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdDsgY250OyBic3krKykgewogCiAJCS8qCiAJCSAqIChzdGFydDEsbGVuZ3RoMSkgd2l0aGluIChzdGFydDIsIGxlbmd0aDIpCiAJCSAqLwogCQlpZiAoYnN5LT5idXN5X3RwICE9IE5VTEwpIHsKIAkJCWJlbmQgPSBic3ktPmJ1c3lfc3RhcnQgKyBic3ktPmJ1c3lfbGVuZ3RoIC0gMTsKLQkJCWlmICgoYm5vID4gYmVuZCkgfHwKLQkJCSAgICAodWVuZCA8IGJzeS0+YnVzeV9zdGFydCkpIHsKKwkJCWlmICgoYm5vID4gYmVuZCkgfHwgKHVlbmQgPCBic3ktPmJ1c3lfc3RhcnQpKSB7CiAJCQkJY250LS07CiAJCQl9IGVsc2UgewogCQkJCVRSQUNFX0JVU1lTRUFSQ0goInhmc19hbGxvY19zZWFyY2hfYnVzeSIsCi0JCQkJCQkgImZvdW5kMSIsIGFnbm8sIGJubywgbGVuLCBuLAotCQkJCQkJIHRwKTsKKwkJCQkJICJmb3VuZDEiLCBhZ25vLCBibm8sIGxlbiwgdHApOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0yNjEwLDE1ICsyNjA2LDEyIEBACiAJICogdHJhbnNhY3Rpb24gdGhhdCBmcmVlZCB0aGUgYmxvY2sKIAkgKi8KIAlpZiAoY250KSB7Ci0JCVRSQUNFX0JVU1lTRUFSQ0goInhmc19hbGxvY19zZWFyY2hfYnVzeSIsICJmb3VuZCIsIGFnbm8sIGJubywgbGVuLCBuLCB0cCk7CisJCVRSQUNFX0JVU1lTRUFSQ0goInhmc19hbGxvY19zZWFyY2hfYnVzeSIsICJmb3VuZCIsIGFnbm8sIGJubywgbGVuLCB0cCk7CiAJCWxzbiA9IGJzeS0+YnVzeV90cC0+dF9jb21taXRfbHNuOwogCQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKIAkJeGZzX2xvZ19mb3JjZShtcCwgbHNuLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQyk7CiAJfSBlbHNlIHsKLQkJVFJBQ0VfQlVTWVNFQVJDSCgieGZzX2FsbG9jX3NlYXJjaF9idXN5IiwgIm5vdC1mb3VuZCIsIGFnbm8sIGJubywgbGVuLCBuLCB0cCk7Ci0JCW4gPSAtMTsKKwkJVFJBQ0VfQlVTWVNFQVJDSCgieGZzX2FsbG9jX3NlYXJjaF9idXN5IiwgIm5vdC1mb3VuZCIsIGFnbm8sIGJubywgbGVuLCB0cCk7CiAJCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOwogCX0KLQotCXJldHVybiBuOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyLmMgYi9mcy94ZnMveGZzX2F0dHIuYwppbmRleCBlNThmMzIxLi4zNmQ3ODFlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHIuYworKysgYi9mcy94ZnMveGZzX2F0dHIuYwpAQCAtMjY0NywxNCArMjY0Nyw2IEBACiB9CiAKIFNUQVRJQyBpbnQKLWF0dHJfc2VjdXJlX2NhcGFibGUoCi0JYmh2X3Zub2RlX3QJKnZwLAotCWNyZWRfdAkJKmNyZWQpCi17Ci0JcmV0dXJuIC1FTk9TRUNVUklUWTsKLX0KLQotU1RBVElDIGludAogYXR0cl9zeXN0ZW1fc2V0KAogCWJodl92bm9kZV90ICp2cCwgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIGludCB4ZmxhZ3MpCiB7CkBAIC0yNzI0LDcgKzI3MTYsNyBAQAogCS5hdHRyX2dldAk9IGF0dHJfZ2VuZXJpY19nZXQsCiAJLmF0dHJfc2V0CT0gYXR0cl9nZW5lcmljX3NldCwKIAkuYXR0cl9yZW1vdmUJPSBhdHRyX2dlbmVyaWNfcmVtb3ZlLAotCS5hdHRyX2NhcGFibGUJPSBhdHRyX3NlY3VyZV9jYXBhYmxlLAorCS5hdHRyX2NhcGFibGUJPSAoYXR0cmNhcGFibGVfdClmc19ub2VyciwKIH07CiAKIHN0cnVjdCBhdHRybmFtZXMgYXR0cl91c2VyID0gewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKaW5kZXggYjA4ZTJhMi4uMzAzZDQxZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0FUVFIyKSkgewogCQlpZiAoYnl0ZXMgPD0gWEZTX0lGT1JLX0FTSVpFKGRwKSkKLQkJCXJldHVybiBtcC0+bV9hdHRyb2Zmc2V0ID4+IDM7CisJCQlyZXR1cm4gZHAtPmlfZC5kaV9mb3Jrb2ZmOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIyNywxMCArMjI3LDEwIEBACiB4ZnNfc2J2ZXJzaW9uX2FkZF9hdHRyMih4ZnNfbW91bnRfdCAqbXAsIHhmc190cmFuc190ICp0cCkKIHsKIAlpZiAoKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0FUVFIyKSAmJgotCSAgICAhKFhGU19TQl9WRVJTSU9OX0hBU0FUVFIyKCZtcC0+bV9zYikpKSB7CisJICAgICEoeGZzX3NiX3ZlcnNpb25faGFzYXR0cjIoJm1wLT5tX3NiKSkpIHsKIAkJc3Bpbl9sb2NrKCZtcC0+bV9zYl9sb2NrKTsKLQkJaWYgKCFYRlNfU0JfVkVSU0lPTl9IQVNBVFRSMigmbXAtPm1fc2IpKSB7Ci0JCQlYRlNfU0JfVkVSU0lPTl9BRERBVFRSMigmbXAtPm1fc2IpOworCQlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc2F0dHIyKCZtcC0+bV9zYikpIHsKKwkJCXhmc19zYl92ZXJzaW9uX2FkZGF0dHIyKCZtcC0+bV9zYik7CiAJCQlzcGluX3VubG9jaygmbXAtPm1fc2JfbG9jayk7CiAJCQl4ZnNfbW9kX3NiKHRwLCBYRlNfU0JfVkVSU0lPTk5VTSB8IFhGU19TQl9GRUFUVVJFUzIpOwogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYml0LmMgYi9mcy94ZnMveGZzX2JpdC5jCmluZGV4IDQ4MjI4ODQuLmZhYjBiNmQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYml0LmMKKysrIGIvZnMveGZzL3hmc19iaXQuYwpAQCAtMjUsNiArMjUsMTA5IEBACiAgKiBYRlMgYml0IG1hbmlwdWxhdGlvbiByb3V0aW5lcywgdXNlZCBpbiBub24tcmVhbHRpbWUgY29kZS4KICAqLwogCisjaWZuZGVmIEhBVkVfQVJDSF9ISUdIQklUCisvKgorICogSW5kZXggb2YgaGlnaCBiaXQgbnVtYmVyIGluIGJ5dGUsIC0xIGZvciBub25lIHNldCwgMC4uNyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHhmc19oaWdoYml0WzI1Nl0gPSB7CisgICAgICAgLTEsIDAsIDEsIDEsIDIsIDIsIDIsIDIsCQkJLyogMDAgLi4gMDcgKi8KKwkzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAkJCS8qIDA4IC4uIDBmICovCisJNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwJCQkvKiAxMCAuLiAxNyAqLworCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCQkJLyogMTggLi4gMWYgKi8KKwk1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAkJCS8qIDIwIC4uIDI3ICovCisJNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwJCQkvKiAyOCAuLiAyZiAqLworCTUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsCQkJLyogMzAgLi4gMzcgKi8KKwk1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAkJCS8qIDM4IC4uIDNmICovCisJNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwJCQkvKiA0MCAuLiA0NyAqLworCTYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsCQkJLyogNDggLi4gNGYgKi8KKwk2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAkJCS8qIDUwIC4uIDU3ICovCisJNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwJCQkvKiA1OCAuLiA1ZiAqLworCTYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsCQkJLyogNjAgLi4gNjcgKi8KKwk2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAkJCS8qIDY4IC4uIDZmICovCisJNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwJCQkvKiA3MCAuLiA3NyAqLworCTYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsCQkJLyogNzggLi4gN2YgKi8KKwk3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAkJCS8qIDgwIC4uIDg3ICovCisJNywgNywgNywgNywgNywgNywgNywgNywJCQkvKiA4OCAuLiA4ZiAqLworCTcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsCQkJLyogOTAgLi4gOTcgKi8KKwk3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAkJCS8qIDk4IC4uIDlmICovCisJNywgNywgNywgNywgNywgNywgNywgNywJCQkvKiBhMCAuLiBhNyAqLworCTcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsCQkJLyogYTggLi4gYWYgKi8KKwk3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAkJCS8qIGIwIC4uIGI3ICovCisJNywgNywgNywgNywgNywgNywgNywgNywJCQkvKiBiOCAuLiBiZiAqLworCTcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsCQkJLyogYzAgLi4gYzcgKi8KKwk3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAkJCS8qIGM4IC4uIGNmICovCisJNywgNywgNywgNywgNywgNywgNywgNywJCQkvKiBkMCAuLiBkNyAqLworCTcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsCQkJLyogZDggLi4gZGYgKi8KKwk3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAkJCS8qIGUwIC4uIGU3ICovCisJNywgNywgNywgNywgNywgNywgNywgNywJCQkvKiBlOCAuLiBlZiAqLworCTcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsCQkJLyogZjAgLi4gZjcgKi8KKwk3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAkJCS8qIGY4IC4uIGZmICovCit9OworI2VuZGlmCisKKy8qCisgKiB4ZnNfaGlnaGJpdDMyOiBnZXQgaGlnaCBiaXQgc2V0IG91dCBvZiAzMi1iaXQgYXJndW1lbnQsIC0xIGlmIG5vbmUgc2V0LgorICovCitpbmxpbmUgaW50Cit4ZnNfaGlnaGJpdDMyKAorCV9fdWludDMyX3QJdikKK3sKKyNpZmRlZiBIQVZFX0FSQ0hfSElHSEJJVAorCXJldHVybiBoaWdoYml0MzIodik7CisjZWxzZQorCWludAkJaTsKKworCWlmICh2ICYgMHhmZmZmMDAwMCkKKwkJaWYgKHYgJiAweGZmMDAwMDAwKQorCQkJaSA9IDI0OworCQllbHNlCisJCQlpID0gMTY7CisJZWxzZSBpZiAodiAmIDB4MDAwMGZmZmYpCisJCWlmICh2ICYgMHgwMDAwZmYwMCkKKwkJCWkgPSA4OworCQllbHNlCisJCQlpID0gMDsKKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gaSArIHhmc19oaWdoYml0Wyh2ID4+IGkpICYgMHhmZl07CisjZW5kaWYKK30KKworLyoKKyAqIHhmc19sb3diaXQ2NDogZ2V0IGxvdyBiaXQgc2V0IG91dCBvZiA2NC1iaXQgYXJndW1lbnQsIC0xIGlmIG5vbmUgc2V0LgorICovCitpbnQKK3hmc19sb3diaXQ2NCgKKwlfX3VpbnQ2NF90CXYpCit7CisJX191aW50MzJfdAl3ID0gKF9fdWludDMyX3QpdjsKKwlpbnQJCW4gPSAwOworCisJaWYgKHcpIHsJLyogbG93ZXIgYml0cyAqLworCQluID0gZmZzKHcpOworCX0gZWxzZSB7CS8qIHVwcGVyIGJpdHMgKi8KKwkJdyA9IChfX3VpbnQzMl90KSh2ID4+IDMyKTsKKwkJaWYgKHcgJiYgKG4gPSBmZnModykpKQorCQkJbiArPSAzMjsKKwl9CisJcmV0dXJuIG4gLSAxOworfQorCisvKgorICogeGZzX2hpZ2hiaXQ2NDogZ2V0IGhpZ2ggYml0IHNldCBvdXQgb2YgNjQtYml0IGFyZ3VtZW50LCAtMSBpZiBub25lIHNldC4KKyAqLworaW50Cit4ZnNfaGlnaGJpdDY0KAorCV9fdWludDY0X3QJdikKK3sKKwlfX3VpbnQzMl90CWggPSAoX191aW50MzJfdCkodiA+PiAzMik7CisKKwlpZiAoaCkKKwkJcmV0dXJuIHhmc19oaWdoYml0MzIoaCkgKyAzMjsKKwlyZXR1cm4geGZzX2hpZ2hiaXQzMigoX191aW50MzJfdCl2KTsKK30KKworCiAvKgogICogUmV0dXJuIHdoZXRoZXIgYml0bWFwIGlzIGVtcHR5LgogICogU2l6ZSBpcyBudW1iZXIgb2Ygd29yZHMgaW4gdGhlIGJpdG1hcCwgd2hpY2ggaXMgcGFkZGVkIHRvIHdvcmQgYm91bmRhcnkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYml0LmggYi9mcy94ZnMveGZzX2JpdC5oCmluZGV4IDMyNWEwMDcuLjA4MjY0MWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYml0LmgKKysrIGIvZnMveGZzL3hmc19iaXQuaApAQCAtNDcsMzAgKzQ3LDEzIEBACiB9CiAKIC8qIEdldCBoaWdoIGJpdCBzZXQgb3V0IG9mIDMyLWJpdCBhcmd1bWVudCwgLTEgaWYgbm9uZSBzZXQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHhmc19oaWdoYml0MzIoX191aW50MzJfdCB2KQotewotCXJldHVybiBmbHModikgLSAxOwotfQotCi0vKiBHZXQgaGlnaCBiaXQgc2V0IG91dCBvZiA2NC1iaXQgYXJndW1lbnQsIC0xIGlmIG5vbmUgc2V0ICovCi1zdGF0aWMgaW5saW5lIGludCB4ZnNfaGlnaGJpdDY0KF9fdWludDY0X3QgdikKLXsKLQlyZXR1cm4gZmxzNjQodikgLSAxOwotfQotCi0vKiBHZXQgbG93IGJpdCBzZXQgb3V0IG9mIDMyLWJpdCBhcmd1bWVudCwgLTEgaWYgbm9uZSBzZXQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHhmc19sb3diaXQzMihfX3VpbnQzMl90IHYpCi17Ci0JX191aW50MzJfdCB0ID0gdjsKLQlyZXR1cm4gKHQpID8gZmluZF9maXJzdF9iaXQoKHVuc2lnbmVkIGxvbmcgKikmdCwgMzIpIDogLTE7Ci19CitleHRlcm4gaW50IHhmc19oaWdoYml0MzIoX191aW50MzJfdCB2KTsKIAogLyogR2V0IGxvdyBiaXQgc2V0IG91dCBvZiA2NC1iaXQgYXJndW1lbnQsIC0xIGlmIG5vbmUgc2V0ICovCi1zdGF0aWMgaW5saW5lIGludCB4ZnNfbG93Yml0NjQoX191aW50NjRfdCB2KQotewotCV9fdWludDY0X3QgdCA9IHY7Ci0JcmV0dXJuICh0KSA/IGZpbmRfZmlyc3RfYml0KCh1bnNpZ25lZCBsb25nICopJnQsIDY0KSA6IC0xOwotfQorZXh0ZXJuIGludCB4ZnNfbG93Yml0NjQoX191aW50NjRfdCB2KTsKKworLyogR2V0IGhpZ2ggYml0IHNldCBvdXQgb2YgNjQtYml0IGFyZ3VtZW50LCAtMSBpZiBub25lIHNldCAqLworZXh0ZXJuIGludCB4ZnNfaGlnaGJpdDY0KF9fdWludDY0X3QpOwogCiAvKiBSZXR1cm4gd2hldGhlciBiaXRtYXAgaXMgZW1wdHkgKDEgPT0gZW1wdHkpICovCiBleHRlcm4gaW50IHhmc19iaXRtYXBfZW1wdHkodWludCAqbWFwLCB1aW50IHNpemUpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCAxYzBhNWE1Li5lYjE5OGMwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMzIzLDEzICszMjMsMTMgQEAKIAlpbnQJCXdoaWNoZm9yayk7CS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAKICNkZWZpbmUJWEZTX0JNQVBfVFJBQ0VfREVMRVRFKGQsaXAsaSxjLHcpCVwKLQl4ZnNfYm1hcF90cmFjZV9kZWxldGUoX19GVU5DVElPTl9fLGQsaXAsaSxjLHcpCisJeGZzX2JtYXBfdHJhY2VfZGVsZXRlKF9fZnVuY19fLGQsaXAsaSxjLHcpCiAjZGVmaW5lCVhGU19CTUFQX1RSQUNFX0lOU0VSVChkLGlwLGksYyxyMSxyMix3KQlcCi0JeGZzX2JtYXBfdHJhY2VfaW5zZXJ0KF9fRlVOQ1RJT05fXyxkLGlwLGksYyxyMSxyMix3KQorCXhmc19ibWFwX3RyYWNlX2luc2VydChfX2Z1bmNfXyxkLGlwLGksYyxyMSxyMix3KQogI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9QT1NUX1VQREFURShkLGlwLGksdykJXAotCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKF9fRlVOQ1RJT05fXyxkLGlwLGksdykKKwl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShfX2Z1bmNfXyxkLGlwLGksdykKICNkZWZpbmUJWEZTX0JNQVBfVFJBQ0VfUFJFX1VQREFURShkLGlwLGksdykJXAotCXhmc19ibWFwX3RyYWNlX3ByZV91cGRhdGUoX19GVU5DVElPTl9fLGQsaXAsaSx3KQorCXhmc19ibWFwX3RyYWNlX3ByZV91cGRhdGUoX19mdW5jX18sZCxpcCxpLHcpCiAjZWxzZQogI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9ERUxFVEUoZCxpcCxpLGMsdykKICNkZWZpbmUJWEZTX0JNQVBfVFJBQ0VfSU5TRVJUKGQsaXAsaSxjLHIxLHIyLHcpCkBAIC0yNDAyLDcgKzI0MDIsNyBAQAogCiAjZGVmaW5lIFhGU19BTExPQ19HQVBfVU5JVFMJNAogCi1TVEFUSUMgaW50CitTVEFUSUMgdm9pZAogeGZzX2JtYXBfYWRqYWNlbnQoCiAJeGZzX2JtYWxsb2NhX3QJKmFwKQkJLyogYm1hcCBhbGxvYyBhcmd1bWVudCBzdHJ1Y3QgKi8KIHsKQEAgLTI1NDgsNyArMjU0OCw2IEBACiAJCQlhcC0+cnZhbCA9IGdvdGJubzsKIAl9CiAjdW5kZWYgSVNWQUxJRAotCXJldHVybiAwOwogfQogCiBTVEFUSUMgaW50CkBAIC00MDQ3LDE3ICs0MDQ2LDE3IEBACiAJCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBsb2dmbGFncyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMjsKLQlpZiAoIVhGU19TQl9WRVJTSU9OX0hBU0FUVFIoJm1wLT5tX3NiKSB8fAotCSAgICghWEZTX1NCX1ZFUlNJT05fSEFTQVRUUjIoJm1wLT5tX3NiKSAmJiB2ZXJzaW9uID09IDIpKSB7CisJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNhdHRyKCZtcC0+bV9zYikgfHwKKwkgICAoIXhmc19zYl92ZXJzaW9uX2hhc2F0dHIyKCZtcC0+bV9zYikgJiYgdmVyc2lvbiA9PSAyKSkgewogCQlfX2ludDY0X3Qgc2JmaWVsZHMgPSAwOwogCiAJCXNwaW5fbG9jaygmbXAtPm1fc2JfbG9jayk7Ci0JCWlmICghWEZTX1NCX1ZFUlNJT05fSEFTQVRUUigmbXAtPm1fc2IpKSB7Ci0JCQlYRlNfU0JfVkVSU0lPTl9BRERBVFRSKCZtcC0+bV9zYik7CisJCWlmICgheGZzX3NiX3ZlcnNpb25faGFzYXR0cigmbXAtPm1fc2IpKSB7CisJCQl4ZnNfc2JfdmVyc2lvbl9hZGRhdHRyKCZtcC0+bV9zYik7CiAJCQlzYmZpZWxkcyB8PSBYRlNfU0JfVkVSU0lPTk5VTTsKIAkJfQotCQlpZiAoIVhGU19TQl9WRVJTSU9OX0hBU0FUVFIyKCZtcC0+bV9zYikgJiYgdmVyc2lvbiA9PSAyKSB7Ci0JCQlYRlNfU0JfVkVSU0lPTl9BRERBVFRSMigmbXAtPm1fc2IpOworCQlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc2F0dHIyKCZtcC0+bV9zYikgJiYgdmVyc2lvbiA9PSAyKSB7CisJCQl4ZnNfc2JfdmVyc2lvbl9hZGRhdHRyMigmbXAtPm1fc2IpOwogCQkJc2JmaWVsZHMgfD0gKFhGU19TQl9WRVJTSU9OTlVNIHwgWEZTX1NCX0ZFQVRVUkVTMik7CiAJCX0KIAkJaWYgKHNiZmllbGRzKSB7CkBAIC00MTU0LDE2ICs0MTUzLDIxIEBACiAJICogbnVtYmVyIG9mIGxlYWYgZW50cmllcywgaXMgY29udHJvbGxlZCBieSB0aGUgdHlwZSBvZiBkaV9uZXh0ZW50cwogCSAqIChhIHNpZ25lZCAzMi1iaXQgbnVtYmVyLCB4ZnNfZXh0bnVtX3QpLCBvciBieSBkaV9hbmV4dGVudHMKIAkgKiAoYSBzaWduZWQgMTYtYml0IG51bWJlciwgeGZzX2FleHRudW1fdCkuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgY2FuIG5vIGxvbmdlciBhc3N1bWUgdGhhdCBpZiB3ZSBhcmUgaW4gQVRUUjEgdGhhdAorCSAqIHRoZSBmb3JrIG9mZnNldCBvZiBhbGwgdGhlIGlub2RlcyB3aWxsIGJlIChtX2F0dHJvZmZzZXQgPj4gMykKKwkgKiBiZWNhdXNlIHdlIGNvdWxkIGhhdmUgbW91bnRlZCB3aXRoIEFUVFIyIGFuZCB0aGVuIG1vdW50ZWQgYmFjaworCSAqIHdpdGggQVRUUjEsIGtlZXBpbmcgdGhlIGRpX2ZvcmtvZmYncyBmaXhlZCBidXQgcHJvYmFibHkgYXQKKwkgKiB2YXJpb3VzIHBvc2l0aW9ucy4gVGhlcmVmb3JlLCBmb3IgYm90aCBBVFRSMSBhbmQgQVRUUjIKKwkgKiB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbyBvZiBhIG1pbmltdW0gc2l6ZQorCSAqIGF2YWlsYWJsZS4KIAkgKi8KIAlpZiAod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspIHsKIAkJbWF4bGVhZmVudHMgPSBNQVhFWFROVU07Ci0JCXN6ID0gKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0FUVFIyKSA/Ci0JCQlYRlNfQk1EUl9TUEFDRV9DQUxDKE1JTkRCVFBUUlMpIDogbXAtPm1fYXR0cm9mZnNldDsKKwkJc3ogPSBYRlNfQk1EUl9TUEFDRV9DQUxDKE1JTkRCVFBUUlMpOwogCX0gZWxzZSB7CiAJCW1heGxlYWZlbnRzID0gTUFYQUVYVE5VTTsKLQkJc3ogPSAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQVRUUjIpID8KLQkJCVhGU19CTURSX1NQQUNFX0NBTEMoTUlOQUJUUFRSUykgOgotCQkJbXAtPm1fc2Iuc2JfaW5vZGVzaXplIC0gbXAtPm1fYXR0cm9mZnNldDsKKwkJc3ogPSBYRlNfQk1EUl9TUEFDRV9DQUxDKE1JTkFCVFBUUlMpOwogCX0KIAltYXhyb290cmVjcyA9IChpbnQpWEZTX0JUUkVFX0JMT0NLX01BWFJFQ1Moc3osIHhmc19ibWRyLCAwKTsKIAltaW5sZWFmcmVjcyA9IG1wLT5tX2JtYXBfZG1uclswXTsKQEAgLTUwNDMsNyArNTA0Nyw3IEBACiAJCQkgKiBBIHdhc2RlbGF5IGV4dGVudCBoYXMgYmVlbiBpbml0aWFsaXplZCwgc28KIAkJCSAqIHNob3VsZG4ndCBiZSBmbGFnZ2VkIGFzIHVud3JpdHRlbi4KIAkJCSAqLwotCQkJaWYgKHdyICYmIFhGU19TQl9WRVJTSU9OX0hBU0VYVEZMR0JJVCgmbXAtPm1fc2IpKSB7CisJCQlpZiAod3IgJiYgeGZzX3NiX3ZlcnNpb25faGFzZXh0ZmxnYml0KCZtcC0+bV9zYikpIHsKIAkJCQlpZiAoIXdhc2RlbGF5ICYmIChmbGFncyAmIFhGU19CTUFQSV9QUkVBTExPQykpCiAJCQkJCWdvdC5icl9zdGF0ZSA9IFhGU19FWFRfVU5XUklUVEVOOwogCQkJfQpAQCAtNTQ4Myw3ICs1NDg3LDcgQEAKIAkJCSAqIGdldCByaWQgb2YgcGFydCBvZiBhIHJlYWx0aW1lIGV4dGVudC4KIAkJCSAqLwogCQkJaWYgKGRlbC5icl9zdGF0ZSA9PSBYRlNfRVhUX1VOV1JJVFRFTiB8fAotCQkJICAgICFYRlNfU0JfVkVSU0lPTl9IQVNFWFRGTEdCSVQoJm1wLT5tX3NiKSkgeworCQkJICAgICF4ZnNfc2JfdmVyc2lvbl9oYXNleHRmbGdiaXQoJm1wLT5tX3NiKSkgewogCQkJCS8qCiAJCQkJICogVGhpcyBwaWVjZSBpcyB1bndyaXR0ZW4sIG9yIHdlJ3JlIG5vdAogCQkJCSAqIHVzaW5nIHVud3JpdHRlbiBleHRlbnRzLiAgU2tpcCBvdmVyIGl0LgpAQCAtNTUzNSw3ICs1NTM5LDcgQEAKIAkJCX0gZWxzZSBpZiAoKGRlbC5icl9zdGFydG9mZiA9PSBzdGFydCAmJgogCQkJCSAgICAoZGVsLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOIHx8CiAJCQkJICAgICB4ZnNfdHJhbnNfZ2V0X2Jsb2NrX3Jlcyh0cCkgPT0gMCkpIHx8Ci0JCQkJICAgIVhGU19TQl9WRVJTSU9OX0hBU0VYVEZMR0JJVCgmbXAtPm1fc2IpKSB7CisJCQkJICAgIXhmc19zYl92ZXJzaW9uX2hhc2V4dGZsZ2JpdCgmbXAtPm1fc2IpKSB7CiAJCQkJLyoKIAkJCQkgKiBDYW4ndCBtYWtlIGl0IHVud3JpdHRlbi4gIFRoZXJlIGlzbid0CiAJCQkJICogYSBmdWxsIGV4dGVudCBoZXJlIHNvIGp1c3Qgc2tpcCBpdC4KQEAgLTU3NzIsNyArNTc3Niw2IEBACiAJaW50CQkJZXJyb3I7CQkvKiByZXR1cm4gdmFsdWUgKi8KIAlfX2ludDY0X3QJCWZpeGxlbjsJCS8qIGxlbmd0aCBmb3IgLTEgY2FzZSAqLwogCWludAkJCWk7CQkvKiBleHRlbnQgbnVtYmVyICovCi0JYmh2X3Zub2RlX3QJCSp2cDsJCS8qIGNvcnJlc3BvbmRpbmcgdm5vZGUgKi8KIAlpbnQJCQlsb2NrOwkJLyogbG9jayBzdGF0ZSAqLwogCXhmc19ibWJ0X2lyZWNfdAkJKm1hcDsJCS8qIGJ1ZmZlciBmb3IgdXNlcidzIGRhdGEgKi8KIAl4ZnNfbW91bnRfdAkJKm1wOwkJLyogZmlsZSBzeXN0ZW0gbW91bnQgcG9pbnQgKi8KQEAgLTU3ODksNyArNTc5Miw2IEBACiAJaW50CQkJYm1hcGlfZmxhZ3M7CS8qIGZsYWdzIGZvciB4ZnNfYm1hcGkgKi8KIAlfX2ludDMyX3QJCW9mbGFnczsJCS8qIGdldGJtYXB4IGJtdl9vZmxhZ3MgZmllbGQgKi8KIAotCXZwID0gWEZTX0lUT1YoaXApOwogCW1wID0gaXAtPmlfbW91bnQ7CiAKIAl3aGljaGZvcmsgPSBpbnRlcmZhY2UgJiBCTVZfSUZfQVRUUkZPUksgPyBYRlNfQVRUUl9GT1JLIDogWEZTX0RBVEFfRk9SSzsKQEAgLTU4MTEsNyArNTgxMyw3IEBACiAJaWYgKChpbnRlcmZhY2UgJiBCTVZfSUZfTk9fRE1BUElfUkVBRCkgPT0gMCAmJgogCSAgICBETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9SRUFEKSAmJgogCSAgICB3aGljaGZvcmsgPT0gWEZTX0RBVEFfRk9SSykgewotCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIHZwLCAwLCAwLCAwLCBOVUxMKTsKKwkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9SRUFELCBpcCwgMCwgMCwgMCwgTlVMTCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwogCX0KQEAgLTU4NjksNiArNTg3MSwxMCBAQAogCQkvKiB4ZnNfZnNpemVfdCBsYXN0X2J5dGUgPSB4ZnNfZmlsZV9sYXN0X2J5dGUoaXApOyAqLwogCQllcnJvciA9IHhmc19mbHVzaF9wYWdlcyhpcCwgKHhmc19vZmZfdCkwLAogCQkJCQkgICAgICAgLTEsIDAsIEZJX1JFTUFQRik7CisJCWlmIChlcnJvcikgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwkJcmV0dXJuIGVycm9yOworCQl9CiAJfQogCiAJQVNTRVJUKHdoaWNoZm9yayA9PSBYRlNfQVRUUl9GT1JLIHx8IGlwLT5pX2RlbGF5ZWRfYmxrcyA9PSAwKTsKQEAgLTYxNjIsMTAgKzYxNjgsMTAgQEAKIAkJCX0KIAkJCWlmICgqdGhpc3BhID09ICpwcCkgewogCQkJCWNtbl9lcnIoQ0VfV0FSTiwgIiVzOiB0aGlzcGEoJWQpID09IHBwKCVkKSAlTGQiLAotCQkJCQlfX0ZVTkNUSU9OX18sIGosIGksCisJCQkJCV9fZnVuY19fLCBqLCBpLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KCp0aGlzcGEpKTsKIAkJCQlwYW5pYygiJXM6IHB0cnMgYXJlIGVxdWFsIGluIG5vZGVcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCV9fZnVuY19fKTsKIAkJCX0KIAkJfQogCX0KQEAgLTYxOTIsNyArNjE5OCw3IEBACiAJeGZzX21vdW50X3QJCSptcDsJLyogZmlsZSBzeXN0ZW0gbW91bnQgc3RydWN0dXJlICovCiAJX19iZTY0CQkJKnBwOwkvKiBwb2ludGVyIHRvIGJsb2NrIGFkZHJlc3MgKi8KIAl4ZnNfYm1idF9yZWNfdAkJKmVwOwkvKiBwb2ludGVyIHRvIGN1cnJlbnQgZXh0ZW50ICovCi0JeGZzX2JtYnRfcmVjX3QJCSpsYXN0cDsgLyogcG9pbnRlciB0byBwcmV2aW91cyBleHRlbnQgKi8KKwl4ZnNfYm1idF9yZWNfdAkJbGFzdCA9IHswLCAwfTsgLyogbGFzdCBleHRlbnQgaW4gcHJldiBibG9jayAqLwogCXhmc19ibWJ0X3JlY190CQkqbmV4dHA7CS8qIHBvaW50ZXIgdG8gbmV4dCBleHRlbnQgKi8KIAlpbnQJCQlicF9yZWxlYXNlID0gMDsKIApAQCAtNjI2Miw3ICs2MjY4LDYgQEAKIAkvKgogCSAqIExvb3Agb3ZlciBhbGwgbGVhZiBub2RlcyBjaGVja2luZyB0aGF0IGFsbCBleHRlbnRzIGFyZSBpbiB0aGUgcmlnaHQgb3JkZXIuCiAJICovCi0JbGFzdHAgPSBOVUxMOwogCWZvciAoOzspIHsKIAkJeGZzX2ZzYmxvY2tfdAluZXh0Ym5vOwogCQl4ZnNfZXh0bnVtX3QJbnVtX3JlY3M7CkBAIC02MjgzLDE4ICs2Mjg4LDE2IEBACiAJCSAqLwogCiAJCWVwID0gWEZTX0JUUkVFX1JFQ19BRERSKHhmc19ibWJ0LCBibG9jaywgMSk7CisJCWlmIChpKSB7CisJCQl4ZnNfYnRyZWVfY2hlY2tfcmVjKFhGU19CVE5VTV9CTUFQLCAmbGFzdCwgZXApOworCQl9CiAJCWZvciAoaiA9IDE7IGogPCBudW1fcmVjczsgaisrKSB7CiAJCQluZXh0cCA9IFhGU19CVFJFRV9SRUNfQUREUih4ZnNfYm1idCwgYmxvY2ssIGogKyAxKTsKLQkJCWlmIChsYXN0cCkgewotCQkJCXhmc19idHJlZV9jaGVja19yZWMoWEZTX0JUTlVNX0JNQVAsCi0JCQkJCSh2b2lkICopbGFzdHAsICh2b2lkICopZXApOwotCQkJfQotCQkJeGZzX2J0cmVlX2NoZWNrX3JlYyhYRlNfQlROVU1fQk1BUCwgKHZvaWQgKillcCwKLQkJCQkodm9pZCAqKShuZXh0cCkpOwotCQkJbGFzdHAgPSBlcDsKKwkJCXhmc19idHJlZV9jaGVja19yZWMoWEZTX0JUTlVNX0JNQVAsIGVwLCBuZXh0cCk7CiAJCQllcCA9IG5leHRwOwogCQl9CiAKKwkJbGFzdCA9ICplcDsKIAkJaSArPSBudW1fcmVjczsKIAkJaWYgKGJwX3JlbGVhc2UpIHsKIAkJCWJwX3JlbGVhc2UgPSAwOwpAQCAtNjMyNSwxMyArNjMyOCwxMyBAQAogCXJldHVybjsKIAogZXJyb3IwOgotCWNtbl9lcnIoQ0VfV0FSTiwgIiVzOiBhdCBlcnJvcjAiLCBfX0ZVTkNUSU9OX18pOworCWNtbl9lcnIoQ0VfV0FSTiwgIiVzOiBhdCBlcnJvcjAiLCBfX2Z1bmNfXyk7CiAJaWYgKGJwX3JlbGVhc2UpCiAJCXhmc190cmFuc19icmVsc2UoTlVMTCwgYnApOwogZXJyb3Jfbm9yZWxzZToKIAljbW5fZXJyKENFX1dBUk4sICIlczogQkFEIGFmdGVyIGJ0cmVlIGxlYXZlcyBmb3IgJWQgZXh0ZW50cyIsCi0JCV9fRlVOQ1RJT05fXywgaSk7Ci0JcGFuaWMoIiVzOiBDT1JSVVBURUQgQlRSRUUgT1IgU09NRVRISU5HIiwgX19GVU5DVElPTl9fKTsKKwkJX19mdW5jX18sIGkpOworCXBhbmljKCIlczogQ09SUlVQVEVEIEJUUkVFIE9SIFNPTUVUSElORyIsIF9fZnVuY19fKTsKIAlyZXR1cm47CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5oIGIvZnMveGZzL3hmc19ibWFwLmgKaW5kZXggODcyMjRiNy4uNmZmNzBjZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmgKKysrIGIvZnMveGZzL3hmc19ibWFwLmgKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXhmc19leHRudW1fdAkJY250LAkJLyogY291bnQgb2YgZW50cmllcyBpbiBsaXN0ICovCiAJaW50CQkJd2hpY2hmb3JrKTsJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KICNkZWZpbmUJWEZTX0JNQVBfVFJBQ0VfRVhMSVNUKGlwLGMsdykJXAotCXhmc19ibWFwX3RyYWNlX2V4bGlzdChfX0ZVTkNUSU9OX18saXAsYyx3KQorCXhmc19ibWFwX3RyYWNlX2V4bGlzdChfX2Z1bmNfXyxpcCxjLHcpCiAjZWxzZQogI2RlZmluZQlYRlNfQk1BUF9UUkFDRV9FWExJU1QoaXAsYyx3KQogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCmluZGV4IGJkMTg5ODcuLjRmMGU4NDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCkBAIC0yNzUsMjEgKzI3NSwyMSBAQAogfQogCiAjZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0JJKGMsYixpKQlcCi0JeGZzX2JtYnRfdHJhY2VfYXJnYmkoX19GVU5DVElPTl9fLCBjLCBiLCBpLCBfX0xJTkVfXykKKwl4ZnNfYm1idF90cmFjZV9hcmdiaShfX2Z1bmNfXywgYywgYiwgaSwgX19MSU5FX18pCiAjZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0JJSShjLGIsaSxqKQlcCi0JeGZzX2JtYnRfdHJhY2VfYXJnYmlpKF9fRlVOQ1RJT05fXywgYywgYiwgaSwgaiwgX19MSU5FX18pCisJeGZzX2JtYnRfdHJhY2VfYXJnYmlpKF9fZnVuY19fLCBjLCBiLCBpLCBqLCBfX0xJTkVfXykKICNkZWZpbmUJWEZTX0JNQlRfVFJBQ0VfQVJHRkZGSShjLG8sYixpLGopCVwKLQl4ZnNfYm1idF90cmFjZV9hcmdmZmZpKF9fRlVOQ1RJT05fXywgYywgbywgYiwgaSwgaiwgX19MSU5FX18pCisJeGZzX2JtYnRfdHJhY2VfYXJnZmZmaShfX2Z1bmNfXywgYywgbywgYiwgaSwgaiwgX19MSU5FX18pCiAjZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0koYyxpKQlcCi0JeGZzX2JtYnRfdHJhY2VfYXJnaShfX0ZVTkNUSU9OX18sIGMsIGksIF9fTElORV9fKQorCXhmc19ibWJ0X3RyYWNlX2FyZ2koX19mdW5jX18sIGMsIGksIF9fTElORV9fKQogI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9BUkdJRksoYyxpLGYscykJXAotCXhmc19ibWJ0X3RyYWNlX2FyZ2lmayhfX0ZVTkNUSU9OX18sIGMsIGksIGYsIHMsIF9fTElORV9fKQorCXhmc19ibWJ0X3RyYWNlX2FyZ2lmayhfX2Z1bmNfXywgYywgaSwgZiwgcywgX19MSU5FX18pCiAjZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0lGUihjLGksZixyKQlcCi0JeGZzX2JtYnRfdHJhY2VfYXJnaWZyKF9fRlVOQ1RJT05fXywgYywgaSwgZiwgciwgX19MSU5FX18pCisJeGZzX2JtYnRfdHJhY2VfYXJnaWZyKF9fZnVuY19fLCBjLCBpLCBmLCByLCBfX0xJTkVfXykKICNkZWZpbmUJWEZTX0JNQlRfVFJBQ0VfQVJHSUsoYyxpLGspCVwKLQl4ZnNfYm1idF90cmFjZV9hcmdpayhfX0ZVTkNUSU9OX18sIGMsIGksIGssIF9fTElORV9fKQorCXhmc19ibWJ0X3RyYWNlX2FyZ2lrKF9fZnVuY19fLCBjLCBpLCBrLCBfX0xJTkVfXykKICNkZWZpbmUJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGMscykJXAotCXhmc19ibWJ0X3RyYWNlX2N1cnNvcihfX0ZVTkNUSU9OX18sIGMsIHMsIF9fTElORV9fKQorCXhmc19ibWJ0X3RyYWNlX2N1cnNvcihfX2Z1bmNfXywgYywgcywgX19MSU5FX18pCiAjZWxzZQogI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9BUkdCSShjLGIsaSkKICNkZWZpbmUJWEZTX0JNQlRfVFJBQ0VfQVJHQklJKGMsYixpLGopCkBAIC0yMDI3LDYgKzIwMjcsMjQgQEAKIAogLyoKICAqIEluc2VydCB0aGUgY3VycmVudCByZWNvcmQgYXQgdGhlIHBvaW50IHJlZmVyZW5jZWQgYnkgY3VyLgorICoKKyAqIEEgbXVsdGktbGV2ZWwgc3BsaXQgb2YgdGhlIHRyZWUgb24gaW5zZXJ0IHdpbGwgaW52YWxpZGF0ZSB0aGUgb3JpZ2luYWwKKyAqIGN1cnNvci4gSXQgYXBwZWFycywgaG93ZXZlciwgdGhhdCBzb21lIGNhbGxlcnMgYXNzdW1lIHRoYXQgdGhlIGN1cnNvciBpcworICogYWx3YXlzIHZhbGlkLiBIZW5jZSBpZiB3ZSBkbyBhIG11bHRpLWxldmVsIHNwbGl0IHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB0aGUKKyAqIGN1cnNvci4KKyAqCisgKiBXaGVuIGEgc3BsaXQgb2NjdXJzLCB3ZSB3aWxsIHNlZSBhIG5ldyBjdXJzb3IgcmV0dXJuZWQuIFVzZSB0aGF0IGFzIGEKKyAqIHRyaWdnZXIgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB0aGUgb3JpZ2luYWwgY3Vyc29yLiBJZiB3ZSBnZXQKKyAqIGEgc3BsaXQsIHRoZW4gdXNlIHRoZSBvcmlnaW5hbCBpcmVjIHRvIGxvb2t1cCB1cCB0aGUgcGF0aCBvZiB0aGUgcmVjb3JkIHdlCisgKiBqdXN0IGluc2VydGVkLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgZmFjdCB0aGF0IHRoZSBidHJlZSByb290IGlzIGluIHRoZSBpbm9kZSBtZWFucyB0aGF0IHdlIGNhbgorICogaGF2ZSB0aGUgbGV2ZWwgb2YgdGhlIHRyZWUgY2hhbmdlIHdpdGhvdXQgYSAic3BsaXQiIG9jY3VycmluZyBhdCB0aGUgcm9vdAorICogbGV2ZWwuIFdoYXQgaGFwcGVucyBpcyB0aGF0IHRoZSByb290IGlzIG1pZ3JhdGVkIHRvIGFuIGFsbG9jYXRlZCBibG9jayBhbmQKKyAqIHRoZSBpbm9kZSByb290IGlzIHBvaW50ZWQgdG8gaXQuIFRoaXMgbWVhbnMgYSBzaW5nbGUgc3BsaXQgY2FuIGNoYW5nZSB0aGUKKyAqIGxldmVsIG9mIHRoZSB0cmVlIChsZXZlbCAyIC0+IGxldmVsIDMpIGFuZCBpbnZhbGlkYXRlIHRoZSBvbGQgY3Vyc29yLiBIZW5jZQorICogdGhlIGxldmVsIGNoYW5nZSBzaG91bGQgYmUgYWNjb3VudGVkIGFzIGEgc3BsaXQgc28gYXMgdG8gY29ycmVjdGx5IHRyaWdnZXIgYQorICogcmV2YWxpZGF0aW9uIG9mIHRoZSBvbGQgY3Vyc29yLgogICovCiBpbnQJCQkJCS8qIGVycm9yICovCiB4ZnNfYm1idF9pbnNlcnQoCkBAIC0yMDM5LDExICsyMDU3LDE0IEBACiAJeGZzX2ZzYmxvY2tfdAluYm5vOwogCXhmc19idHJlZV9jdXJfdAkqbmN1cjsKIAl4ZnNfYm1idF9yZWNfdAlucmVjOworCXhmc19ibWJ0X2lyZWNfdAlvaXJlYzsJCS8qIG9yaWdpbmFsIGlyZWMgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJKnBjdXI7CisJaW50CQlzcGxpdHMgPSAwOwogCiAJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRU5UUlkpOwogCWxldmVsID0gMDsKIAluYm5vID0gTlVMTEZTQkxPQ0s7CisJb2lyZWMgPSBjdXItPmJjX3JlYy5iOwogCXhmc19ibWJ0X2Rpc2tfc2V0X2FsbCgmbnJlYywgJmN1ci0+YmNfcmVjLmIpOwogCW5jdXIgPSBOVUxMOwogCXBjdXIgPSBjdXI7CkBAIC0yMDUyLDExICsyMDczLDEzIEBACiAJCQkJJmkpKSkgewogCQkJaWYgKHBjdXIgIT0gY3VyKQogCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKHBjdXIsIFhGU19CVFJFRV9FUlJPUik7Ci0JCQlYRlNfQk1CVF9UUkFDRV9DVVJTT1IoY3VyLCBFUlJPUik7Ci0JCQlyZXR1cm4gZXJyb3I7CisJCQlnb3RvIGVycm9yMDsKIAkJfQogCQlYRlNfV0FOVF9DT1JSVVBURURfR09UTyhpID09IDEsIGVycm9yMCk7CiAJCWlmIChwY3VyICE9IGN1ciAmJiAobmN1ciB8fCBuYm5vID09IE5VTExGU0JMT0NLKSkgeworCQkJLyogYWxsb2NhdGluZyBhIG5ldyByb290IGlzIGVmZmVjdGl2ZWx5IGEgc3BsaXQgKi8KKwkJCWlmIChjdXItPmJjX25sZXZlbHMgIT0gcGN1ci0+YmNfbmxldmVscykKKwkJCQlzcGxpdHMrKzsKIAkJCWN1ci0+YmNfbmxldmVscyA9IHBjdXItPmJjX25sZXZlbHM7CiAJCQljdXItPmJjX3ByaXZhdGUuYi5hbGxvY2F0ZWQgKz0KIAkJCQlwY3VyLT5iY19wcml2YXRlLmIuYWxsb2NhdGVkOwpAQCAtMjA3MCwxMCArMjA5MywyMSBAQAogCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IocGN1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCQl9CiAJCWlmIChuY3VyKSB7CisJCQlzcGxpdHMrKzsKIAkJCXBjdXIgPSBuY3VyOwogCQkJbmN1ciA9IE5VTEw7CiAJCX0KIAl9IHdoaWxlIChuYm5vICE9IE5VTExGU0JMT0NLKTsKKworCWlmIChzcGxpdHMgPiAxKSB7CisJCS8qIHJldmFsaWRhdGUgdGhlIG9sZCBjdXJzb3IgYXMgd2UgaGFkIGEgbXVsdGktbGV2ZWwgc3BsaXQgKi8KKwkJZXJyb3IgPSB4ZnNfYm1idF9sb29rdXBfZXEoY3VyLCBvaXJlYy5icl9zdGFydG9mZiwKKwkJCQlvaXJlYy5icl9zdGFydGJsb2NrLCBvaXJlYy5icl9ibG9ja2NvdW50LCAmaSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXJyb3IwOworCQlBU1NFUlQoaSA9PSAxKTsKKwl9CisKIAlYRlNfQk1CVF9UUkFDRV9DVVJTT1IoY3VyLCBFWElUKTsKIAkqc3RhdCA9IGk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCmluZGV4IDJkOTUwZTkuLmNkMGQ0YjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCkBAIC0xMjAsNyArMTIwLDcgQEAKICAqIEV4dGVudCBzdGF0ZSBhbmQgZXh0ZW50IGZvcm1hdCBtYWNyb3MuCiAgKi8KICNkZWZpbmUgWEZTX0VYVEZNVF9JTk9ERSh4KQlcCi0JKFhGU19TQl9WRVJTSU9OX0hBU0VYVEZMR0JJVCgmKCh4KS0+aV9tb3VudC0+bV9zYikpID8gXAorCSh4ZnNfc2JfdmVyc2lvbl9oYXNleHRmbGdiaXQoJigoeCktPmlfbW91bnQtPm1fc2IpKSA/IFwKIAkJWEZTX0VYVEZNVF9IQVNTVEFURSA6IFhGU19FWFRGTVRfTk9TVEFURSkKICNkZWZpbmUgSVNVTldSSVRURU4oeCkJKCh4KS0+YnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCA2M2RlYmQxLi41M2E3MWM2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC02NDUsNyArNjQ1LDEyIEBACiAJYnAgPSBiaXAtPmJsaV9idWY7CiAKIAlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCXhmc19iYXdyaXRlKGJpcC0+YmxpX2l0ZW0ubGlfbW91bnRwLCBicCk7CisJCWludAllcnJvcjsKKwkJZXJyb3IgPSB4ZnNfYmF3cml0ZShiaXAtPmJsaV9pdGVtLmxpX21vdW50cCwgYnApOworCQlpZiAoZXJyb3IpCisJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBiaXAtPmJsaV9pdGVtLmxpX21vdW50cCwKKwkJCSJ4ZnNfYnVmX2l0ZW1fcHVzaDogcHVzaGJ1ZiBlcnJvciAlZCBvbiBiaXAgJXAsIGJwICVwIiwKKwkJCQkJZXJyb3IsIGJpcCwgYnApOwogCX0gZWxzZSB7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfY2xudC5oIGIvZnMveGZzL3hmc19jbG50LmgKaW5kZXggZDE2YzFiOS4uZDVkMWU2MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19jbG50LmgKKysrIGIvZnMveGZzL3hmc19jbG50LmgKQEAgLTg2LDcgKzg2LDcgQEAKICNkZWZpbmUgWEZTTU5UX05PVVVJRAkJMHgwMTAwMDAwMAkvKiBJZ25vcmUgZnMgdXVpZCAqLwogI2RlZmluZSBYRlNNTlRfRE1BUEkJCTB4MDIwMDAwMDAJLyogZW5hYmxlIGRtYXBpL3hkc20gKi8KICNkZWZpbmUgWEZTTU5UX0JBUlJJRVIJCTB4MDQwMDAwMDAJLyogdXNlIHdyaXRlIGJhcnJpZXJzICovCi0jZGVmaW5lIFhGU01OVF9JREVMRVRFCQkweDA4MDAwMDAwCS8qIGlub2RlIGNsdXN0ZXIgZGVsZXRlICovCisjZGVmaW5lIFhGU01OVF9JS0VFUAkJMHgwODAwMDAwMAkvKiBpbm9kZSBjbHVzdGVyIGRlbGV0ZSAqLwogI2RlZmluZSBYRlNNTlRfU1dBTExPQwkJMHgxMDAwMDAwMAkvKiB0dXJuIG9uIHN0cmlwZSB3aWR0aAogCQkJCQkJICogYWxsb2NhdGlvbiAqLwogI2RlZmluZSBYRlNNTlRfRElSU1lOQwkJMHg0MDAwMDAwMAkvKiBzeW5jIGNyZWF0LGxpbmssdW5saW5rLHJlbmFtZQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmMgYi9mcy94ZnMveGZzX2RpcjIuYwppbmRleCBiZTdjNDI1Li43Y2IyNjUyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjIuYworKysgYi9mcy94ZnMveGZzX2RpcjIuYwpAQCAtNDQsMTIgKzQ0LDEzIEBACiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAKK3N0cnVjdCB4ZnNfbmFtZSB4ZnNfbmFtZV9kb3Rkb3QgPSB7Ii4uIiwgMn07CiAKIHZvaWQKIHhmc19kaXJfbW91bnQoCiAJeGZzX21vdW50X3QJKm1wKQogewotCUFTU0VSVChYRlNfU0JfVkVSU0lPTl9IQVNESVJWMigmbXAtPm1fc2IpKTsKKwlBU1NFUlQoeGZzX3NiX3ZlcnNpb25faGFzZGlydjIoJm1wLT5tX3NiKSk7CiAJQVNTRVJUKCgxIDw8IChtcC0+bV9zYi5zYl9ibG9ja2xvZyArIG1wLT5tX3NiLnNiX2RpcmJsa2xvZykpIDw9CiAJICAgICAgIFhGU19NQVhfQkxPQ0tTSVpFKTsKIAltcC0+bV9kaXJibGtzaXplID0gMSA8PCAobXAtPm1fc2Iuc2JfYmxvY2tsb2cgKyBtcC0+bV9zYi5zYl9kaXJibGtsb2cpOwpAQCAtMTQ2LDggKzE0Nyw3IEBACiB4ZnNfZGlyX2NyZWF0ZW5hbWUoCiAJeGZzX3RyYW5zX3QJCSp0cCwKIAl4ZnNfaW5vZGVfdAkJKmRwLAotCWNoYXIJCQkqbmFtZSwKLQlpbnQJCQluYW1lbGVuLAorCXN0cnVjdCB4ZnNfbmFtZQkJKm5hbWUsCiAJeGZzX2lub190CQlpbnVtLAkJLyogbmV3IGVudHJ5IGlub2RlIG51bWJlciAqLwogCXhmc19mc2Jsb2NrX3QJCSpmaXJzdCwJCS8qIGJtYXAncyBmaXJzdGJsb2NrICovCiAJeGZzX2JtYXBfZnJlZV90CQkqZmxpc3QsCQkvKiBibWFwJ3MgZnJlZWJsb2NrIGxpc3QgKi8KQEAgLTE2Miw5ICsxNjIsOSBAQAogCQlyZXR1cm4gcnZhbDsKIAlYRlNfU1RBVFNfSU5DKHhzX2Rpcl9jcmVhdGUpOwogCi0JYXJncy5uYW1lID0gbmFtZTsKLQlhcmdzLm5hbWVsZW4gPSBuYW1lbGVuOwotCWFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZShuYW1lLCBuYW1lbGVuKTsKKwlhcmdzLm5hbWUgPSBuYW1lLT5uYW1lOworCWFyZ3MubmFtZWxlbiA9IG5hbWUtPmxlbjsKKwlhcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUobmFtZS0+bmFtZSwgbmFtZS0+bGVuKTsKIAlhcmdzLmludW1iZXIgPSBpbnVtOwogCWFyZ3MuZHAgPSBkcDsKIAlhcmdzLmZpcnN0YmxvY2sgPSBmaXJzdDsKQEAgLTE5Nyw4ICsxOTcsNyBAQAogeGZzX2Rpcl9sb29rdXAoCiAJeGZzX3RyYW5zX3QJKnRwLAogCXhmc19pbm9kZV90CSpkcCwKLQljaGFyCQkqbmFtZSwKLQlpbnQJCW5hbWVsZW4sCisJc3RydWN0IHhmc19uYW1lCSpuYW1lLAogCXhmc19pbm9fdAkqaW51bSkJCS8qIG91dDogaW5vZGUgbnVtYmVyICovCiB7CiAJeGZzX2RhX2FyZ3NfdAlhcmdzOwpAQCAtMjA3LDE4ICsyMDYsMTQgQEAKIAogCUFTU0VSVCgoZHAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKTsKIAlYRlNfU1RBVFNfSU5DKHhzX2Rpcl9sb29rdXApOworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKHhmc19kYV9hcmdzX3QpKTsKIAotCWFyZ3MubmFtZSA9IG5hbWU7Ci0JYXJncy5uYW1lbGVuID0gbmFtZWxlbjsKLQlhcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUobmFtZSwgbmFtZWxlbik7Ci0JYXJncy5pbnVtYmVyID0gMDsKKwlhcmdzLm5hbWUgPSBuYW1lLT5uYW1lOworCWFyZ3MubmFtZWxlbiA9IG5hbWUtPmxlbjsKKwlhcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUobmFtZS0+bmFtZSwgbmFtZS0+bGVuKTsKIAlhcmdzLmRwID0gZHA7Ci0JYXJncy5maXJzdGJsb2NrID0gTlVMTDsKLQlhcmdzLmZsaXN0ID0gTlVMTDsKLQlhcmdzLnRvdGFsID0gMDsKIAlhcmdzLndoaWNoZm9yayA9IFhGU19EQVRBX0ZPUks7CiAJYXJncy50cmFucyA9IHRwOwotCWFyZ3MuanVzdGNoZWNrID0gYXJncy5hZGRuYW1lID0gMDsKIAlhcmdzLm9rbm9lbnQgPSAxOwogCiAJaWYgKGRwLT5pX2QuZGlfZm9ybWF0ID09IFhGU19ESU5PREVfRk1UX0xPQ0FMKQpAQCAtMjQ3LDggKzI0Miw3IEBACiB4ZnNfZGlyX3JlbW92ZW5hbWUoCiAJeGZzX3RyYW5zX3QJKnRwLAogCXhmc19pbm9kZV90CSpkcCwKLQljaGFyCQkqbmFtZSwKLQlpbnQJCW5hbWVsZW4sCisJc3RydWN0IHhmc19uYW1lCSpuYW1lLAogCXhmc19pbm9fdAlpbm8sCiAJeGZzX2ZzYmxvY2tfdAkqZmlyc3QsCQkvKiBibWFwJ3MgZmlyc3RibG9jayAqLwogCXhmc19ibWFwX2ZyZWVfdAkqZmxpc3QsCQkvKiBibWFwJ3MgZnJlZWJsb2NrIGxpc3QgKi8KQEAgLTI2MSw5ICsyNTUsOSBAQAogCUFTU0VSVCgoZHAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKTsKIAlYRlNfU1RBVFNfSU5DKHhzX2Rpcl9yZW1vdmUpOwogCi0JYXJncy5uYW1lID0gbmFtZTsKLQlhcmdzLm5hbWVsZW4gPSBuYW1lbGVuOwotCWFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZShuYW1lLCBuYW1lbGVuKTsKKwlhcmdzLm5hbWUgPSBuYW1lLT5uYW1lOworCWFyZ3MubmFtZWxlbiA9IG5hbWUtPmxlbjsKKwlhcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUobmFtZS0+bmFtZSwgbmFtZS0+bGVuKTsKIAlhcmdzLmludW1iZXIgPSBpbm87CiAJYXJncy5kcCA9IGRwOwogCWFyZ3MuZmlyc3RibG9jayA9IGZpcnN0OwpAQCAtMzI5LDggKzMyMyw3IEBACiB4ZnNfZGlyX3JlcGxhY2UoCiAJeGZzX3RyYW5zX3QJKnRwLAogCXhmc19pbm9kZV90CSpkcCwKLQljaGFyCQkqbmFtZSwJCS8qIG5hbWUgb2YgZW50cnkgdG8gcmVwbGFjZSAqLwotCWludAkJbmFtZWxlbiwKKwlzdHJ1Y3QgeGZzX25hbWUJKm5hbWUsCQkvKiBuYW1lIG9mIGVudHJ5IHRvIHJlcGxhY2UgKi8KIAl4ZnNfaW5vX3QJaW51bSwJCS8qIG5ldyBpbm9kZSBudW1iZXIgKi8KIAl4ZnNfZnNibG9ja190CSpmaXJzdCwJCS8qIGJtYXAncyBmaXJzdGJsb2NrICovCiAJeGZzX2JtYXBfZnJlZV90CSpmbGlzdCwJCS8qIGJtYXAncyBmcmVlYmxvY2sgbGlzdCAqLwpAQCAtMzQ1LDkgKzMzOCw5IEBACiAJaWYgKChydmFsID0geGZzX2Rpcl9pbm9fdmFsaWRhdGUodHAtPnRfbW91bnRwLCBpbnVtKSkpCiAJCXJldHVybiBydmFsOwogCi0JYXJncy5uYW1lID0gbmFtZTsKLQlhcmdzLm5hbWVsZW4gPSBuYW1lbGVuOwotCWFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZShuYW1lLCBuYW1lbGVuKTsKKwlhcmdzLm5hbWUgPSBuYW1lLT5uYW1lOworCWFyZ3MubmFtZWxlbiA9IG5hbWUtPmxlbjsKKwlhcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUobmFtZS0+bmFtZSwgbmFtZS0+bGVuKTsKIAlhcmdzLmludW1iZXIgPSBpbnVtOwogCWFyZ3MuZHAgPSBkcDsKIAlhcmdzLmZpcnN0YmxvY2sgPSBmaXJzdDsKQEAgLTM3NCwyOCArMzY3LDI5IEBACiAKIC8qCiAgKiBTZWUgaWYgdGhpcyBlbnRyeSBjYW4gYmUgYWRkZWQgdG8gdGhlIGRpcmVjdG9yeSB3aXRob3V0IGFsbG9jYXRpbmcgc3BhY2UuCisgKiBGaXJzdCBjaGVja3MgdGhhdCB0aGUgY2FsbGVyIGNvdWxkbid0IHJlc2VydmUgZW5vdWdoIHNwYWNlIChyZXNibGtzID0gMCkuCiAgKi8KIGludAogeGZzX2Rpcl9jYW5lbnRlcigKIAl4ZnNfdHJhbnNfdAkqdHAsCiAJeGZzX2lub2RlX3QJKmRwLAotCWNoYXIJCSpuYW1lLAkJLyogbmFtZSBvZiBlbnRyeSB0byBhZGQgKi8KLQlpbnQJCW5hbWVsZW4pCisJc3RydWN0IHhmc19uYW1lCSpuYW1lLAkJLyogbmFtZSBvZiBlbnRyeSB0byBhZGQgKi8KKwl1aW50CQlyZXNibGtzKQogewogCXhmc19kYV9hcmdzX3QJYXJnczsKIAlpbnQJCXJ2YWw7CiAJaW50CQl2OwkJLyogdHlwZS1jaGVja2luZyB2YWx1ZSAqLwogCi0JQVNTRVJUKChkcC0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpOworCWlmIChyZXNibGtzKQorCQlyZXR1cm4gMDsKIAotCWFyZ3MubmFtZSA9IG5hbWU7Ci0JYXJncy5uYW1lbGVuID0gbmFtZWxlbjsKLQlhcmdzLmhhc2h2YWwgPSB4ZnNfZGFfaGFzaG5hbWUobmFtZSwgbmFtZWxlbik7Ci0JYXJncy5pbnVtYmVyID0gMDsKKwlBU1NFUlQoKGRwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUik7CisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoeGZzX2RhX2FyZ3NfdCkpOworCisJYXJncy5uYW1lID0gbmFtZS0+bmFtZTsKKwlhcmdzLm5hbWVsZW4gPSBuYW1lLT5sZW47CisJYXJncy5oYXNodmFsID0geGZzX2RhX2hhc2huYW1lKG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7CiAJYXJncy5kcCA9IGRwOwotCWFyZ3MuZmlyc3RibG9jayA9IE5VTEw7Ci0JYXJncy5mbGlzdCA9IE5VTEw7Ci0JYXJncy50b3RhbCA9IDA7CiAJYXJncy53aGljaGZvcmsgPSBYRlNfREFUQV9GT1JLOwogCWFyZ3MudHJhbnMgPSB0cDsKIAlhcmdzLmp1c3RjaGVjayA9IGFyZ3MuYWRkbmFtZSA9IGFyZ3Mub2tub2VudCA9IDE7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjIuaCBiL2ZzL3hmcy94ZnNfZGlyMi5oCmluZGV4IGIyNjUxOTcuLjYzOTJmOTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMi5oCisrKyBiL2ZzL3hmcy94ZnNfZGlyMi5oCkBAIC01OSw2ICs1OSw4IEBACiAgKi8KIHR5cGVkZWYJeGZzX29mZl90CXhmc19kaXIyX29mZl90OwogCitleHRlcm4gc3RydWN0IHhmc19uYW1lCXhmc19uYW1lX2RvdGRvdDsKKwogLyoKICAqIEdlbmVyaWMgZGlyZWN0b3J5IGludGVyZmFjZSByb3V0aW5lcwogICovCkBAIC02OCwyMSArNzAsMjEgQEAKIGV4dGVybiBpbnQgeGZzX2Rpcl9pbml0KHN0cnVjdCB4ZnNfdHJhbnMgKnRwLCBzdHJ1Y3QgeGZzX2lub2RlICpkcCwKIAkJCQlzdHJ1Y3QgeGZzX2lub2RlICpwZHApOwogZXh0ZXJuIGludCB4ZnNfZGlyX2NyZWF0ZW5hbWUoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfaW5vZGUgKmRwLAotCQkJCWNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCB4ZnNfaW5vX3QgaW51bSwKKwkJCQlzdHJ1Y3QgeGZzX25hbWUgKm5hbWUsIHhmc19pbm9fdCBpbnVtLAogCQkJCXhmc19mc2Jsb2NrX3QgKmZpcnN0LAogCQkJCXN0cnVjdCB4ZnNfYm1hcF9mcmVlICpmbGlzdCwgeGZzX2V4dGxlbl90IHRvdCk7CiBleHRlcm4gaW50IHhmc19kaXJfbG9va3VwKHN0cnVjdCB4ZnNfdHJhbnMgKnRwLCBzdHJ1Y3QgeGZzX2lub2RlICpkcCwKLQkJCQljaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgeGZzX2lub190ICppbnVtKTsKKwkJCQlzdHJ1Y3QgeGZzX25hbWUgKm5hbWUsIHhmc19pbm9fdCAqaW51bSk7CiBleHRlcm4gaW50IHhmc19kaXJfcmVtb3ZlbmFtZShzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgc3RydWN0IHhmc19pbm9kZSAqZHAsCi0JCQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHhmc19pbm9fdCBpbm8sCisJCQkJc3RydWN0IHhmc19uYW1lICpuYW1lLCB4ZnNfaW5vX3QgaW5vLAogCQkJCXhmc19mc2Jsb2NrX3QgKmZpcnN0LAogCQkJCXN0cnVjdCB4ZnNfYm1hcF9mcmVlICpmbGlzdCwgeGZzX2V4dGxlbl90IHRvdCk7CiBleHRlcm4gaW50IHhmc19kaXJfcmVwbGFjZShzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgc3RydWN0IHhmc19pbm9kZSAqZHAsCi0JCQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHhmc19pbm9fdCBpbnVtLAorCQkJCXN0cnVjdCB4ZnNfbmFtZSAqbmFtZSwgeGZzX2lub190IGludW0sCiAJCQkJeGZzX2ZzYmxvY2tfdCAqZmlyc3QsCiAJCQkJc3RydWN0IHhmc19ibWFwX2ZyZWUgKmZsaXN0LCB4ZnNfZXh0bGVuX3QgdG90KTsKIGV4dGVybiBpbnQgeGZzX2Rpcl9jYW5lbnRlcihzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgc3RydWN0IHhmc19pbm9kZSAqZHAsCi0JCQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOworCQkJCXN0cnVjdCB4ZnNfbmFtZSAqbmFtZSwgdWludCByZXNibGtzKTsKIGV4dGVybiBpbnQgeGZzX2Rpcl9pbm9fdmFsaWRhdGUoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19pbm9fdCBpbm8pOwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwppbmRleCBlYjAzZWFiLi4zZjM3ODViIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYworKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwpAQCAtNzMsNyArNzMsNyBAQAogI2RlZmluZSBUUkFDRTQobXAsdCxhMCxhMSxhMixhMykJVFJBQ0U2KG1wLHQsYTAsYTEsYTIsYTMsMCwwKQogI2RlZmluZSBUUkFDRTUobXAsdCxhMCxhMSxhMixhMyxhNCkJVFJBQ0U2KG1wLHQsYTAsYTEsYTIsYTMsYTQsMCkKICNkZWZpbmUgVFJBQ0U2KG1wLHQsYTAsYTEsYTIsYTMsYTQsYTUpIFwKLQl4ZnNfZmlsZXN0cmVhbXNfdHJhY2UobXAsIHQsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIFwKKwl4ZnNfZmlsZXN0cmVhbXNfdHJhY2UobXAsIHQsIF9fZnVuY19fLCBfX0xJTkVfXywgXAogCQkJCShfX3BzdW5zaWduZWRfdClhMCwgKF9fcHN1bnNpZ25lZF90KWExLCBcCiAJCQkJKF9fcHN1bnNpZ25lZF90KWEyLCAoX19wc3Vuc2lnbmVkX3QpYTMsIFwKIAkJCQkoX19wc3Vuc2lnbmVkX3QpYTQsIChfX3BzdW5zaWduZWRfdClhNSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBlYWRjMTU5MS4uZDNhMGY1MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19mc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwpAQCAtNzcsMzYgKzc3LDM2IEBACiAJaWYgKG5ld192ZXJzaW9uID49IDMpIHsKIAkJZ2VvLT52ZXJzaW9uID0gWEZTX0ZTT1BfR0VPTV9WRVJTSU9OOwogCQlnZW8tPmZsYWdzID0KLQkJCShYRlNfU0JfVkVSU0lPTl9IQVNBVFRSKCZtcC0+bV9zYikgPworCQkJKHhmc19zYl92ZXJzaW9uX2hhc2F0dHIoJm1wLT5tX3NiKSA/CiAJCQkJWEZTX0ZTT1BfR0VPTV9GTEFHU19BVFRSIDogMCkgfAotCQkJKFhGU19TQl9WRVJTSU9OX0hBU05MSU5LKCZtcC0+bV9zYikgPworCQkJKHhmc19zYl92ZXJzaW9uX2hhc25saW5rKCZtcC0+bV9zYikgPwogCQkJCVhGU19GU09QX0dFT01fRkxBR1NfTkxJTksgOiAwKSB8Ci0JCQkoWEZTX1NCX1ZFUlNJT05fSEFTUVVPVEEoJm1wLT5tX3NiKSA/CisJCQkoeGZzX3NiX3ZlcnNpb25faGFzcXVvdGEoJm1wLT5tX3NiKSA/CiAJCQkJWEZTX0ZTT1BfR0VPTV9GTEFHU19RVU9UQSA6IDApIHwKLQkJCShYRlNfU0JfVkVSU0lPTl9IQVNBTElHTigmbXAtPm1fc2IpID8KKwkJCSh4ZnNfc2JfdmVyc2lvbl9oYXNhbGlnbigmbXAtPm1fc2IpID8KIAkJCQlYRlNfRlNPUF9HRU9NX0ZMQUdTX0lBTElHTiA6IDApIHwKLQkJCShYRlNfU0JfVkVSU0lPTl9IQVNEQUxJR04oJm1wLT5tX3NiKSA/CisJCQkoeGZzX3NiX3ZlcnNpb25faGFzZGFsaWduKCZtcC0+bV9zYikgPwogCQkJCVhGU19GU09QX0dFT01fRkxBR1NfREFMSUdOIDogMCkgfAotCQkJKFhGU19TQl9WRVJTSU9OX0hBU1NIQVJFRCgmbXAtPm1fc2IpID8KKwkJCSh4ZnNfc2JfdmVyc2lvbl9oYXNzaGFyZWQoJm1wLT5tX3NiKSA/CiAJCQkJWEZTX0ZTT1BfR0VPTV9GTEFHU19TSEFSRUQgOiAwKSB8Ci0JCQkoWEZTX1NCX1ZFUlNJT05fSEFTRVhURkxHQklUKCZtcC0+bV9zYikgPworCQkJKHhmc19zYl92ZXJzaW9uX2hhc2V4dGZsZ2JpdCgmbXAtPm1fc2IpID8KIAkJCQlYRlNfRlNPUF9HRU9NX0ZMQUdTX0VYVEZMRyA6IDApIHwKLQkJCShYRlNfU0JfVkVSU0lPTl9IQVNESVJWMigmbXAtPm1fc2IpID8KKwkJCSh4ZnNfc2JfdmVyc2lvbl9oYXNkaXJ2MigmbXAtPm1fc2IpID8KIAkJCQlYRlNfRlNPUF9HRU9NX0ZMQUdTX0RJUlYyIDogMCkgfAotCQkJKFhGU19TQl9WRVJTSU9OX0hBU1NFQ1RPUigmbXAtPm1fc2IpID8KKwkJCSh4ZnNfc2JfdmVyc2lvbl9oYXNzZWN0b3IoJm1wLT5tX3NiKSA/CiAJCQkJWEZTX0ZTT1BfR0VPTV9GTEFHU19TRUNUT1IgOiAwKSB8CiAJCQkoeGZzX3NiX3ZlcnNpb25faGFzbGF6eXNiY291bnQoJm1wLT5tX3NiKSA/CiAJCQkJWEZTX0ZTT1BfR0VPTV9GTEFHU19MQVpZU0IgOiAwKSB8Ci0JCQkoWEZTX1NCX1ZFUlNJT05fSEFTQVRUUjIoJm1wLT5tX3NiKSA/CisJCQkoeGZzX3NiX3ZlcnNpb25faGFzYXR0cjIoJm1wLT5tX3NiKSA/CiAJCQkJWEZTX0ZTT1BfR0VPTV9GTEFHU19BVFRSMiA6IDApOwotCQlnZW8tPmxvZ3NlY3RzaXplID0gWEZTX1NCX1ZFUlNJT05fSEFTU0VDVE9SKCZtcC0+bV9zYikgPworCQlnZW8tPmxvZ3NlY3RzaXplID0geGZzX3NiX3ZlcnNpb25faGFzc2VjdG9yKCZtcC0+bV9zYikgPwogCQkJCW1wLT5tX3NiLnNiX2xvZ3NlY3RzaXplIDogQkJTSVpFOwogCQlnZW8tPnJ0c2VjdHNpemUgPSBtcC0+bV9zYi5zYl9ibG9ja3NpemU7CiAJCWdlby0+ZGlyYmxvY2tzaXplID0gbXAtPm1fZGlyYmxrc2l6ZTsKIAl9CiAJaWYgKG5ld192ZXJzaW9uID49IDQpIHsKIAkJZ2VvLT5mbGFncyB8PQotCQkJKFhGU19TQl9WRVJTSU9OX0hBU0xPR1YyKCZtcC0+bV9zYikgPworCQkJKHhmc19zYl92ZXJzaW9uX2hhc2xvZ3YyKCZtcC0+bV9zYikgPwogCQkJCVhGU19GU09QX0dFT01fRkxBR1NfTE9HVjIgOiAwKTsKIAkJZ2VvLT5sb2dzdW5pdCA9IG1wLT5tX3NiLnNiX2xvZ3N1bml0OwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGM1ODM2YjkuLmE2NGRmYmQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtMTA3LDYgKzEwNywxNiBAQAogLyoKICAqIEFsbG9jYXRpb24gZ3JvdXAgbGV2ZWwgZnVuY3Rpb25zLgogICovCitzdGF0aWMgaW5saW5lIGludAoreGZzX2lhbGxvY19jbHVzdGVyX2FsaWdubWVudCgKKwl4ZnNfYWxsb2NfYXJnX3QJKmFyZ3MpCit7CisJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2FsaWduKCZhcmdzLT5tcC0+bV9zYikgJiYKKwkgICAgYXJncy0+bXAtPm1fc2Iuc2JfaW5vYWxpZ25tdCA+PQorCSAgICAgWEZTX0JfVE9fRlNCVChhcmdzLT5tcCwgWEZTX0lOT0RFX0NMVVNURVJfU0laRShhcmdzLT5tcCkpKQorCQlyZXR1cm4gYXJncy0+bXAtPm1fc2Iuc2JfaW5vYWxpZ25tdDsKKwlyZXR1cm4gMTsKK30KIAogLyoKICAqIEFsbG9jYXRlIG5ldyBpbm9kZXMgaW4gdGhlIGFsbG9jYXRpb24gZ3JvdXAgc3BlY2lmaWVkIGJ5IGFnYnAuCkBAIC0xNjcsMTAgKzE3NywyNCBAQAogCQlhcmdzLm1vZCA9IGFyZ3MudG90YWwgPSBhcmdzLndhc2RlbCA9IGFyZ3MuaXNmbCA9CiAJCQlhcmdzLnVzZXJkYXRhID0gYXJncy5taW5hbGlnbnNsb3AgPSAwOwogCQlhcmdzLnByb2QgPSAxOwotCQlhcmdzLmFsaWdubWVudCA9IDE7CisKIAkJLyoKLQkJICogQWxsb3cgc3BhY2UgZm9yIHRoZSBpbm9kZSBidHJlZSB0byBzcGxpdC4KKwkJICogV2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBhbGlnbm1lbnQgaGVyZSB0byBlbnN1cmUgdGhhdAorCQkgKiB3ZSBkb24ndCBtb2RpZnkgdGhlIGZyZWUgbGlzdCBpZiB3ZSBmYWlsIHRvIGhhdmUgYW4gZXhhY3QKKwkJICogYmxvY2suIElmIHdlIGRvbid0IGhhdmUgYW4gZXhhY3QgbWF0Y2gsIGFuZCBldmVyeSBvaGVyCisJCSAqIGF0dGVtcHQgYWxsb2NhdGlvbiBhdHRlbXB0IGZhaWxzLCB3ZSdsbCBlbmQgdXAgY2FuY2VsbGluZworCQkgKiBhIGRpcnR5IHRyYW5zYWN0aW9uIGFuZCBzaHV0dGluZyBkb3duLgorCQkgKgorCQkgKiBGb3IgYW4gZXhhY3QgYWxsb2NhdGlvbiwgYWxpZ25tZW50IG11c3QgYmUgMSwKKwkJICogaG93ZXZlciB3ZSBuZWVkIHRvIHRha2UgY2x1c3RlciBhbGlnbm1lbnQgaW50byBhY2NvdW50IHdoZW4KKwkJICogZml4aW5nIHVwIHRoZSBmcmVlbGlzdC4gVXNlIHRoZSBtaW5hbGlnbnNsb3AgZmllbGQgdG8KKwkJICogaW5kaWNhdGUgdGhhdCBleHRyYSBibG9ja3MgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGFsaWdubWVudCwKKwkJICogYnV0IG5vdCB0byB1c2UgdGhlbSBpbiB0aGUgYWN0dWFsIGV4YWN0IGFsbG9jYXRpb24uCiAJCSAqLworCQlhcmdzLmFsaWdubWVudCA9IDE7CisJCWFyZ3MubWluYWxpZ25zbG9wID0geGZzX2lhbGxvY19jbHVzdGVyX2FsaWdubWVudCgmYXJncykgLSAxOworCisJCS8qIEFsbG93IHNwYWNlIGZvciB0aGUgaW5vZGUgYnRyZWUgdG8gc3BsaXQuICovCiAJCWFyZ3MubWlubGVmdCA9IFhGU19JTl9NQVhMRVZFTFMoYXJncy5tcCkgLSAxOwogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKIAkJCXJldHVybiBlcnJvcjsKQEAgLTE5MSwxMyArMjE1LDggQEAKIAkJCUFTU0VSVCghKGFyZ3MubXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9BTElHTikpOwogCQkJYXJncy5hbGlnbm1lbnQgPSBhcmdzLm1wLT5tX2RhbGlnbjsKIAkJCWlzYWxpZ25lZCA9IDE7Ci0JCX0gZWxzZSBpZiAoWEZTX1NCX1ZFUlNJT05fSEFTQUxJR04oJmFyZ3MubXAtPm1fc2IpICYmCi0JCQkgICBhcmdzLm1wLT5tX3NiLnNiX2lub2FsaWdubXQgPj0KLQkJCSAgIFhGU19CX1RPX0ZTQlQoYXJncy5tcCwKLQkJCSAgCVhGU19JTk9ERV9DTFVTVEVSX1NJWkUoYXJncy5tcCkpKQotCQkJCWFyZ3MuYWxpZ25tZW50ID0gYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10OwotCQllbHNlCi0JCQlhcmdzLmFsaWdubWVudCA9IDE7CisJCX0gZWxzZQorCQkJYXJncy5hbGlnbm1lbnQgPSB4ZnNfaWFsbG9jX2NsdXN0ZXJfYWxpZ25tZW50KCZhcmdzKTsKIAkJLyoKIAkJICogTmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGFsbG9jYXRlIHRoZSBpbm9kZSBibG9ja3MuCiAJCSAqIElkZWFsbHkgdGhleSBzaG91bGQgYmUgc3BhY2VkIG91dCB0aHJvdWdoIHRoZSBhLmcuCkBAIC0yMzAsMTIgKzI0OSw3IEBACiAJCWFyZ3MuYWdibm8gPSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9yb290KTsKIAkJYXJncy5mc2JubyA9IFhGU19BR0JfVE9fRlNCKGFyZ3MubXAsCiAJCQkJYmUzMl90b19jcHUoYWdpLT5hZ2lfc2Vxbm8pLCBhcmdzLmFnYm5vKTsKLQkJaWYgKFhGU19TQl9WRVJTSU9OX0hBU0FMSUdOKCZhcmdzLm1wLT5tX3NiKSAmJgotCQkJYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10ID49Ci0JCQlYRlNfQl9UT19GU0JUKGFyZ3MubXAsIFhGU19JTk9ERV9DTFVTVEVSX1NJWkUoYXJncy5tcCkpKQotCQkJCWFyZ3MuYWxpZ25tZW50ID0gYXJncy5tcC0+bV9zYi5zYl9pbm9hbGlnbm10OwotCQllbHNlCi0JCQlhcmdzLmFsaWdubWVudCA9IDE7CisJCWFyZ3MuYWxpZ25tZW50ID0geGZzX2lhbGxvY19jbHVzdGVyX2FsaWdubWVudCgmYXJncyk7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfdmV4dGVudCgmYXJncykpKQogCQkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTI3MSw3ICsyODUsNyBAQAogCSAqIHVzZSB0aGUgb2xkIHZlcnNpb24gc28gdGhhdCBvbGQga2VybmVscyB3aWxsIGNvbnRpbnVlIHRvIGJlCiAJICogYWJsZSB0byB1c2UgdGhlIGZpbGUgc3lzdGVtLgogCSAqLwotCWlmIChYRlNfU0JfVkVSU0lPTl9IQVNOTElOSygmYXJncy5tcC0+bV9zYikpCisJaWYgKHhmc19zYl92ZXJzaW9uX2hhc25saW5rKCZhcmdzLm1wLT5tX3NiKSkKIAkJdmVyc2lvbiA9IFhGU19ESU5PREVfVkVSU0lPTl8yOwogCWVsc2UKIAkJdmVyc2lvbiA9IFhGU19ESU5PREVfVkVSU0lPTl8xOwpAQCAtMTA1Myw3ICsxMDY3LDcgQEAKIAkvKgogCSAqIFdoZW4gYW4gaW5vZGUgY2x1c3RlciBpcyBmcmVlLCBpdCBiZWNvbWVzIGVsaWdpYmxlIGZvciByZW1vdmFsCiAJICovCi0JaWYgKChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9JREVMRVRFKSAmJgorCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0lLRUVQKSAmJgogCSAgICAocmVjLmlyX2ZyZWVjb3VudCA9PSBYRlNfSUFMTE9DX0lOT0RFUyhtcCkpKSB7CiAKIAkJKmRlbGV0ZSA9IDE7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IGYwMWIwNzYuLmU2NTdjNTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC03OCw3ICs3OCw2IEBACiAJeGZzX2lub2RlX3QJKmlwOwogCXhmc19pbm9kZV90CSppcTsKIAlpbnQJCWVycm9yOwotCXhmc19pY2x1c3Rlcl90CSppY2wsICpuZXdfaWNsID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nCWZpcnN0X2luZGV4LCBtYXNrOwogCXhmc19wZXJhZ190CSpwYWc7CiAJeGZzX2FnaW5vX3QJYWdpbm87CkBAIC0yMjksMjkgKzIyOCwxNyBAQAogCX0KIAogCS8qCi0JICogVGhpcyBpcyBhIGJpdCBtZXNzeSAtIHdlIHByZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgd2UgX21pZ2h0XwotCSAqIG5lZWQgYmVmb3JlIHdlIHBpY2sgdXAgdGhlIGljaSBsb2NrLiBUaGF0IHdheSB3ZSBkb24ndCBoYXZlIHRvCi0JICoganVnZ2xlIGxvY2tzIGFuZCBnbyBhbGwgdGhlIHdheSBiYWNrIHRvIHRoZSBzdGFydC4KKwkgKiBQcmVsb2FkIHRoZSByYWRpeCB0cmVlIHNvIHdlIGNhbiBpbnNlcnQgc2FmZWx5IHVuZGVyIHRoZQorCSAqIHdyaXRlIHNwaW5sb2NrLgogCSAqLwotCW5ld19pY2wgPSBrbWVtX3pvbmVfYWxsb2MoeGZzX2ljbHVzdGVyX3pvbmUsIEtNX1NMRUVQKTsKIAlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpKSB7CisJCXhmc19pZGVzdHJveShpcCk7CiAJCWRlbGF5KDEpOwogCQlnb3RvIGFnYWluOwogCX0KIAltYXNrID0gfigoKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKSkgLSAxKTsKIAlmaXJzdF9pbmRleCA9IGFnaW5vICYgbWFzazsKIAl3cml0ZV9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0KLQkvKgotCSAqIEZpbmQgdGhlIGNsdXN0ZXIgaWYgaXQgZXhpc3RzCi0JICovCi0JaWNsID0gTlVMTDsKLQlpZiAocmFkaXhfdHJlZV9nYW5nX2xvb2t1cCgmcGFnLT5wYWdfaWNpX3Jvb3QsICh2b2lkKiopJmlxLAotCQkJCQkJCWZpcnN0X2luZGV4LCAxKSkgewotCQlpZiAoKFhGU19JTk9fVE9fQUdJTk8obXAsIGlxLT5pX2lubykgJiBtYXNrKSA9PSBmaXJzdF9pbmRleCkKLQkJCWljbCA9IGlxLT5pX2NsdXN0ZXI7Ci0JfQotCiAJLyoKIAkgKiBpbnNlcnQgdGhlIG5ldyBpbm9kZQogCSAqLwpAQCAtMjY2LDMwICsyNTMsMTMgQEAKIAl9CiAKIAkvKgotCSAqIFRoZXNlIHZhbHVlcyBfbXVzdF8gYmUgc2V0IGJlZm9yZSByZWxlYXNpbmcgaWhsb2NrIQorCSAqIFRoZXNlIHZhbHVlcyBfbXVzdF8gYmUgc2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIHJhZGl4IHRyZWUgbG9jayEKIAkgKi8KIAlpcC0+aV91ZHF1b3QgPSBpcC0+aV9nZHF1b3QgPSBOVUxMOwogCXhmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSU5FVyk7CiAKLQlBU1NFUlQoaXAtPmlfY2x1c3RlciA9PSBOVUxMKTsKLQotCWlmICghaWNsKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZuZXdfaWNsLT5pY2xfbG9jayk7Ci0JCUlOSVRfSExJU1RfSEVBRCgmbmV3X2ljbC0+aWNsX2lub2Rlcyk7Ci0JCWljbCA9IG5ld19pY2w7Ci0JCW5ld19pY2wgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCUFTU0VSVCghaGxpc3RfZW1wdHkoJmljbC0+aWNsX2lub2RlcykpOwotCX0KLQlzcGluX2xvY2soJmljbC0+aWNsX2xvY2spOwotCWhsaXN0X2FkZF9oZWFkKCZpcC0+aV9jbm9kZSwgJmljbC0+aWNsX2lub2Rlcyk7Ci0JaXAtPmlfY2x1c3RlciA9IGljbDsKLQlzcGluX3VubG9jaygmaWNsLT5pY2xfbG9jayk7Ci0KIAl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7Ci0JaWYgKG5ld19pY2wpCi0JCWttZW1fem9uZV9mcmVlKHhmc19pY2x1c3Rlcl96b25lLCBuZXdfaWNsKTsKIAogCS8qCiAJICogTGluayBpcCB0byBpdHMgbW91bnQgYW5kIHRocmVhZCBpdCBvbiB0aGUgbW91bnQncyBpbm9kZSBsaXN0LgpAQCAtNTI4LDE4ICs0OTgsNiBAQAogCXhmc19wdXRfcGVyYWcobXAsIHBhZyk7CiAKIAkvKgotCSAqIFJlbW92ZSBmcm9tIGNsdXN0ZXIgbGlzdAotCSAqLwotCW1wID0gaXAtPmlfbW91bnQ7Ci0Jc3Bpbl9sb2NrKCZpcC0+aV9jbHVzdGVyLT5pY2xfbG9jayk7Ci0JaGxpc3RfZGVsKCZpcC0+aV9jbm9kZSk7Ci0Jc3Bpbl91bmxvY2soJmlwLT5pX2NsdXN0ZXItPmljbF9sb2NrKTsKLQotCS8qIHdhcyBsYXN0IGlub2RlIGluIGNsdXN0ZXI/ICovCi0JaWYgKGhsaXN0X2VtcHR5KCZpcC0+aV9jbHVzdGVyLT5pY2xfaW5vZGVzKSkKLQkJa21lbV96b25lX2ZyZWUoeGZzX2ljbHVzdGVyX3pvbmUsIGlwLT5pX2NsdXN0ZXIpOwotCi0JLyoKIAkgKiBSZW1vdmUgZnJvbSBtb3VudCdzIGlub2RlIGxpc3QuCiAJICovCiAJWEZTX01PVU5UX0lMT0NLKG1wKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCBhNTUwNTQ2YS4uY2ExMmFjYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtNTUsNyArNTUsNiBAQAogCiBrbWVtX3pvbmVfdCAqeGZzX2lmb3JrX3pvbmU7CiBrbWVtX3pvbmVfdCAqeGZzX2lub2RlX3pvbmU7Ci1rbWVtX3pvbmVfdCAqeGZzX2ljbHVzdGVyX3pvbmU7CiAKIC8qCiAgKiBVc2VkIGluIHhmc19pdHJ1bmNhdGUoKS4gIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4dGVudHMKQEAgLTEyNiw2ICsxMjUsOTAgQEAKICNlbmRpZgogCiAvKgorICogRmluZCB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gaW5vZGUgbWFwCisgKiBXZSBkbyBiYXNpYyB2YWxpZGF0aW9uIGNoZWNrcyBvbiB0aGUgYnVmZmVyIG9uY2UgaXQgaGFzIGJlZW4KKyAqIHJldHJpZXZlZCBmcm9tIGRpc2suCisgKi8KK1NUQVRJQyBpbnQKK3hmc19pbWFwX3RvX2JwKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfdHJhbnNfdAkqdHAsCisJeGZzX2ltYXBfdAkqaW1hcCwKKwl4ZnNfYnVmX3QJKipicHAsCisJdWludAkJYnVmX2ZsYWdzLAorCXVpbnQJCWltYXBfZmxhZ3MpCit7CisJaW50CQllcnJvcjsKKwlpbnQJCWk7CisJaW50CQluaTsKKwl4ZnNfYnVmX3QJKmJwOworCisJZXJyb3IgPSB4ZnNfdHJhbnNfcmVhZF9idWYobXAsIHRwLCBtcC0+bV9kZGV2X3RhcmdwLCBpbWFwLT5pbV9ibGtubywKKwkJCQkgICAoaW50KWltYXAtPmltX2xlbiwgYnVmX2ZsYWdzLCAmYnApOworCWlmIChlcnJvcikgeworCQlpZiAoZXJyb3IgIT0gRUFHQUlOKSB7CisJCQljbW5fZXJyKENFX1dBUk4sCisJCQkJInhmc19pbWFwX3RvX2JwOiB4ZnNfdHJhbnNfcmVhZF9idWYoKXJldHVybmVkICIKKwkJCQkiYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKKwkJCQllcnJvciwgbXAtPm1fZnNuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVChidWZfZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spOworCQl9CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKgorCSAqIFZhbGlkYXRlIHRoZSBtYWdpYyBudW1iZXIgYW5kIHZlcnNpb24gb2YgZXZlcnkgaW5vZGUgaW4gdGhlIGJ1ZmZlcgorCSAqIChpZiBERUJVRyBrZXJuZWwpIG9yIHRoZSBmaXJzdCBpbm9kZSBpbiB0aGUgYnVmZmVyLCBvdGhlcndpc2UuCisJICovCisjaWZkZWYgREVCVUcKKwluaSA9IEJCVE9CKGltYXAtPmltX2xlbikgPj4gbXAtPm1fc2Iuc2JfaW5vZGVsb2c7CisjZWxzZQkvKiB1c3VhbCBjYXNlICovCisJbmkgPSAxOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgbmk7IGkrKykgeworCQlpbnQJCWRpX29rOworCQl4ZnNfZGlub2RlX3QJKmRpcDsKKworCQlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsCisJCQkJCShpIDw8IG1wLT5tX3NiLnNiX2lub2RlbG9nKSk7CisJCWRpX29rID0gYmUxNl90b19jcHUoZGlwLT5kaV9jb3JlLmRpX21hZ2ljKSA9PSBYRlNfRElOT0RFX01BR0lDICYmCisJCQkgICAgWEZTX0RJTk9ERV9HT09EX1ZFUlNJT04oZGlwLT5kaV9jb3JlLmRpX3ZlcnNpb24pOworCQlpZiAodW5saWtlbHkoWEZTX1RFU1RfRVJST1IoIWRpX29rLCBtcCwKKwkJCQkJCVhGU19FUlJUQUdfSVRPQlBfSU5PVE9CUCwKKwkJCQkJCVhGU19SQU5ET01fSVRPQlBfSU5PVE9CUCkpKSB7CisJCQlpZiAoaW1hcF9mbGFncyAmIFhGU19JTUFQX0JVTEtTVEFUKSB7CisJCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYnApOworCQkJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKKwkJCX0KKwkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfaW1hcF90b19icCIsCisJCQkJCQlYRlNfRVJSTEVWRUxfSElHSCwgbXAsIGRpcCk7CisjaWZkZWYgREVCVUcKKwkJCWNtbl9lcnIoQ0VfUEFOSUMsCisJCQkJCSJEZXZpY2UgJXMgLSBiYWQgaW5vZGUgbWFnaWMvdnNuICIKKwkJCQkJImRhZGRyICVsbGQgIyVkIChtYWdpYz0leCkiLAorCQkJCVhGU19CVUZUQVJHX05BTUUobXAtPm1fZGRldl90YXJncCksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFwLT5pbV9ibGtubywgaSwKKwkJCQliZTE2X3RvX2NwdShkaXAtPmRpX2NvcmUuZGlfbWFnaWMpKTsKKyNlbmRpZgorCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYnApOworCQkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOworCQl9CisJfQorCisJeGZzX2lub2JwX2NoZWNrKG1wLCBicCk7CisKKwkvKgorCSAqIE1hcmsgdGhlIGJ1ZmZlciBhcyBhbiBpbm9kZSBidWZmZXIgbm93IHRoYXQgaXQgbG9va3MgZ29vZAorCSAqLworCVhGU19CVUZfU0VUX1ZUWVBFKGJwLCBCX0ZTX0lOTyk7CisKKwkqYnBwID0gYnA7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIG1hcCBhbiBpbm9kZSBudW1iZXIgd2l0aGluIGEgZmlsZQogICogc3lzdGVtIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgb24tZGlzayB2ZXJzaW9uIG9mIHRoZQogICogaW5vZGUuICBJdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlCkBAIC0xNDcsNzIgKzIzMCwxOSBAQAogCXhmc19idWZfdAkqKmJwcCwKIAlpbnQJCSpvZmZzZXQpCiB7Ci0JaW50CQlkaV9vazsKIAl4ZnNfaW1hcF90CWltYXA7CiAJeGZzX2J1Zl90CSpicDsKIAlpbnQJCWVycm9yOwotCXhmc19kaW5vZGVfdAkqZGlwOwogCi0JLyoKLQkgKiBDYWxsIHRoZSBzcGFjZSBtYW5hZ2VtZW50IGNvZGUgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgdGhlCi0JICogaW5vZGUgb24gZGlzay4KLQkgKi8KIAlpbWFwLmltX2Jsa25vID0gMDsKIAllcnJvciA9IHhmc19pbWFwKG1wLCB0cCwgaW5vLCAmaW1hcCwgWEZTX0lNQVBfTE9PS1VQKTsKLQlpZiAoZXJyb3IgIT0gMCkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JInhmc19pbm90b2JwOiB4ZnNfaW1hcCgpICByZXR1cm5lZCBhbiAiCi0JImVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsIGVycm9yLCBtcC0+bV9mc25hbWUpOworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCX0KIAotCS8qCi0JICogSWYgdGhlIGlub2RlIG51bWJlciBtYXBzIHRvIGEgYmxvY2sgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZQotCSAqIGZpbGUgc3lzdGVtIHRoZW4gcmV0dXJuIE5VTEwgcmF0aGVyIHRoYW4gY2FsbGluZyByZWFkX2J1ZgotCSAqIGFuZCBwYW5pY2luZyB3aGVuIHdlIGdldCBhbiBlcnJvciBmcm9tIHRoZSBkcml2ZXIuCi0JICovCi0JaWYgKChpbWFwLmltX2Jsa25vICsgaW1hcC5pbV9sZW4pID4KLQkgICAgWEZTX0ZTQl9UT19CQihtcCwgbXAtPm1fc2Iuc2JfZGJsb2NrcykpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCSJ4ZnNfaW5vdG9icDogaW5vZGUgbnVtYmVyICglbGx1ICsgJWQpIG1hcHMgdG8gYSBibG9jayBvdXRzaWRlIHRoZSBib3VuZHMgIgotCSJvZiB0aGUgZmlsZSBzeXN0ZW0gJXMuICBSZXR1cm5pbmcgRUlOVkFMLiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWltYXAuaW1fYmxrbm8sCi0JCQlpbWFwLmltX2xlbiwgbXAtPm1fZnNuYW1lKTsKLQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwotCX0KLQotCS8qCi0JICogUmVhZCBpbiB0aGUgYnVmZmVyLiAgSWYgdHAgaXMgTlVMTCwgeGZzX3RyYW5zX3JlYWRfYnVmKCkgd2lsbAotCSAqIGRlZmF1bHQgdG8ganVzdCBhIHJlYWRfYnVmKCkgY2FsbC4KLQkgKi8KLQllcnJvciA9IHhmc190cmFuc19yZWFkX2J1ZihtcCwgdHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGltYXAuaW1fYmxrbm8sCi0JCQkJICAgKGludClpbWFwLmltX2xlbiwgWEZTX0JVRl9MT0NLLCAmYnApOwotCi0JaWYgKGVycm9yKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkieGZzX2lub3RvYnA6IHhmc190cmFuc19yZWFkX2J1ZigpICByZXR1cm5lZCBhbiAiCi0JImVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsIGVycm9yLCBtcC0+bV9mc25hbWUpOworCWVycm9yID0geGZzX2ltYXBfdG9fYnAobXAsIHRwLCAmaW1hcCwgJmJwLCBYRlNfQlVGX0xPQ0ssIDApOworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCX0KLQlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsIDApOwotCWRpX29rID0KLQkJYmUxNl90b19jcHUoZGlwLT5kaV9jb3JlLmRpX21hZ2ljKSA9PSBYRlNfRElOT0RFX01BR0lDICYmCi0JCVhGU19ESU5PREVfR09PRF9WRVJTSU9OKGRpcC0+ZGlfY29yZS5kaV92ZXJzaW9uKTsKLQlpZiAodW5saWtlbHkoWEZTX1RFU1RfRVJST1IoIWRpX29rLCBtcCwgWEZTX0VSUlRBR19JVE9CUF9JTk9UT0JQLAotCQkJWEZTX1JBTkRPTV9JVE9CUF9JTk9UT0JQKSkpIHsKLQkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19pbm90b2JwIiwgWEZTX0VSUkxFVkVMX0xPVywgbXAsIGRpcCk7Ci0JCXhmc190cmFuc19icmVsc2UodHAsIGJwKTsKLQkJY21uX2VycihDRV9XQVJOLAotCSJ4ZnNfaW5vdG9icDogWEZTX1RFU1RfRVJST1IoKSAgcmV0dXJuZWQgYW4gIgotCSJlcnJvciBvbiAlcy4gIFJldHVybmluZyBFRlNDT1JSVVBURUQuIiwgIG1wLT5tX2ZzbmFtZSk7Ci0JCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKLQl9CiAKLQl4ZnNfaW5vYnBfY2hlY2sobXAsIGJwKTsKLQotCS8qCi0JICogU2V0ICpkaXBwIHRvIHBvaW50IHRvIHRoZSBvbi1kaXNrIGlub2RlIGluIHRoZSBidWZmZXIuCi0JICovCiAJKmRpcHAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsIGltYXAuaW1fYm9mZnNldCk7CiAJKmJwcCA9IGJwOwogCSpvZmZzZXQgPSBpbWFwLmltX2JvZmZzZXQ7CkBAIC0yNDgsNDYgKzI3OCwyMSBAQAogCXhmc19kaW5vZGVfdAkqKmRpcHAsCiAJeGZzX2J1Zl90CSoqYnBwLAogCXhmc19kYWRkcl90CWJubywKLQl1aW50CQlpbWFwX2ZsYWdzKQorCXVpbnQJCWltYXBfZmxhZ3MsCisJdWludAkJYnVmX2ZsYWdzKQogewogCXhmc19pbWFwX3QJaW1hcDsKIAl4ZnNfYnVmX3QJKmJwOwogCWludAkJZXJyb3I7Ci0JaW50CQlpOwotCWludAkJbmk7CiAKIAlpZiAoaXAtPmlfYmxrbm8gPT0gKHhmc19kYWRkcl90KTApIHsKLQkJLyoKLQkJICogQ2FsbCB0aGUgc3BhY2UgbWFuYWdlbWVudCBjb2RlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZQotCQkgKiBpbm9kZSBvbiBkaXNrLgotCQkgKi8KIAkJaW1hcC5pbV9ibGtubyA9IGJubzsKLQkJaWYgKChlcnJvciA9IHhmc19pbWFwKG1wLCB0cCwgaXAtPmlfaW5vLCAmaW1hcCwKLQkJCQkJWEZTX0lNQVBfTE9PS1VQIHwgaW1hcF9mbGFncykpKQorCQllcnJvciA9IHhmc19pbWFwKG1wLCB0cCwgaXAtPmlfaW5vLCAmaW1hcCwKKwkJCQkJWEZTX0lNQVBfTE9PS1VQIHwgaW1hcF9mbGFncyk7CisJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAogCQkvKgotCQkgKiBJZiB0aGUgaW5vZGUgbnVtYmVyIG1hcHMgdG8gYSBibG9jayBvdXRzaWRlIHRoZSBib3VuZHMKLQkJICogb2YgdGhlIGZpbGUgc3lzdGVtIHRoZW4gcmV0dXJuIE5VTEwgcmF0aGVyIHRoYW4gY2FsbGluZwotCQkgKiByZWFkX2J1ZiBhbmQgcGFuaWNpbmcgd2hlbiB3ZSBnZXQgYW4gZXJyb3IgZnJvbSB0aGUKLQkJICogZHJpdmVyLgotCQkgKi8KLQkJaWYgKChpbWFwLmltX2Jsa25vICsgaW1hcC5pbV9sZW4pID4KLQkJICAgIFhGU19GU0JfVE9fQkIobXAsIG1wLT5tX3NiLnNiX2RibG9ja3MpKSB7Ci0jaWZkZWYgREVCVUcKLQkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwgInhmc19pdG9icDogIgotCQkJCQkiKGltYXAuaW1fYmxrbm8gKDB4JWxseCkgIgotCQkJCQkiKyBpbWFwLmltX2xlbiAoMHglbGx4KSkgPiAiCi0JCQkJCSIgWEZTX0ZTQl9UT19CQihtcCwgIgotCQkJCQkibXAtPm1fc2Iuc2JfZGJsb2NrcykgKDB4JWxseCkiLAotCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBpbWFwLmltX2Jsa25vLAotCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBpbWFwLmltX2xlbiwKLQkJCQkJWEZTX0ZTQl9UT19CQihtcCwgbXAtPm1fc2Iuc2JfZGJsb2NrcykpOwotI2VuZGlmIC8qIERFQlVHICovCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCX0KLQotCQkvKgogCQkgKiBGaWxsIGluIHRoZSBmaWVsZHMgaW4gdGhlIGlub2RlIHRoYXQgd2lsbCBiZSB1c2VkIHRvCiAJCSAqIG1hcCB0aGUgaW5vZGUgdG8gaXRzIGJ1ZmZlciBmcm9tIG5vdyBvbi4KIAkJICovCkBAIC0zMDUsNzYgKzMxMCwxNyBAQAogCX0KIAlBU1NFUlQoYm5vID09IDAgfHwgYm5vID09IGltYXAuaW1fYmxrbm8pOwogCi0JLyoKLQkgKiBSZWFkIGluIHRoZSBidWZmZXIuICBJZiB0cCBpcyBOVUxMLCB4ZnNfdHJhbnNfcmVhZF9idWYoKSB3aWxsCi0JICogZGVmYXVsdCB0byBqdXN0IGEgcmVhZF9idWYoKSBjYWxsLgotCSAqLwotCWVycm9yID0geGZzX3RyYW5zX3JlYWRfYnVmKG1wLCB0cCwgbXAtPm1fZGRldl90YXJncCwgaW1hcC5pbV9ibGtubywKLQkJCQkgICAoaW50KWltYXAuaW1fbGVuLCBYRlNfQlVGX0xPQ0ssICZicCk7Ci0JaWYgKGVycm9yKSB7Ci0jaWZkZWYgREVCVUcKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLCAieGZzX2l0b2JwOiAiCi0JCQkJInhmc190cmFuc19yZWFkX2J1ZigpIHJldHVybmVkIGVycm9yICVkLCAiCi0JCQkJImltYXAuaW1fYmxrbm8gMHglbGx4LCBpbWFwLmltX2xlbiAweCVsbHgiLAotCQkJCWVycm9yLCAodW5zaWduZWQgbG9uZyBsb25nKSBpbWFwLmltX2Jsa25vLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGltYXAuaW1fbGVuKTsKLSNlbmRpZiAvKiBERUJVRyAqLworCWVycm9yID0geGZzX2ltYXBfdG9fYnAobXAsIHRwLCAmaW1hcCwgJmJwLCBidWZfZmxhZ3MsIGltYXBfZmxhZ3MpOworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCisJaWYgKCFicCkgeworCQlBU1NFUlQoYnVmX2ZsYWdzICYgWEZTX0JVRl9UUllMT0NLKTsKKwkJQVNTRVJUKHRwID09IE5VTEwpOworCQkqYnBwID0gTlVMTDsKKwkJcmV0dXJuIEVBR0FJTjsKIAl9CiAKLQkvKgotCSAqIFZhbGlkYXRlIHRoZSBtYWdpYyBudW1iZXIgYW5kIHZlcnNpb24gb2YgZXZlcnkgaW5vZGUgaW4gdGhlIGJ1ZmZlcgotCSAqIChpZiBERUJVRyBrZXJuZWwpIG9yIHRoZSBmaXJzdCBpbm9kZSBpbiB0aGUgYnVmZmVyLCBvdGhlcndpc2UuCi0JICogTm8gdmFsaWRhdGlvbiBpcyBkb25lIGhlcmUgaW4gdXNlcnNwYWNlICh4ZnNfcmVwYWlyKS4KLQkgKi8KLSNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKQotCW5pID0gMDsKLSNlbGlmIGRlZmluZWQoREVCVUcpCi0JbmkgPSBCQlRPQihpbWFwLmltX2xlbikgPj4gbXAtPm1fc2Iuc2JfaW5vZGVsb2c7Ci0jZWxzZQkvKiB1c3VhbCBjYXNlICovCi0JbmkgPSAxOwotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgbmk7IGkrKykgewotCQlpbnQJCWRpX29rOwotCQl4ZnNfZGlub2RlX3QJKmRpcDsKLQotCQlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsCi0JCQkJCShpIDw8IG1wLT5tX3NiLnNiX2lub2RlbG9nKSk7Ci0JCWRpX29rID0gYmUxNl90b19jcHUoZGlwLT5kaV9jb3JlLmRpX21hZ2ljKSA9PSBYRlNfRElOT0RFX01BR0lDICYmCi0JCQkgICAgWEZTX0RJTk9ERV9HT09EX1ZFUlNJT04oZGlwLT5kaV9jb3JlLmRpX3ZlcnNpb24pOwotCQlpZiAodW5saWtlbHkoWEZTX1RFU1RfRVJST1IoIWRpX29rLCBtcCwKLQkJCQkJCVhGU19FUlJUQUdfSVRPQlBfSU5PVE9CUCwKLQkJCQkJCVhGU19SQU5ET01fSVRPQlBfSU5PVE9CUCkpKSB7Ci0JCQlpZiAoaW1hcF9mbGFncyAmIFhGU19JTUFQX0JVTEtTVEFUKSB7Ci0JCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYnApOwotCQkJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKLQkJCX0KLSNpZmRlZiBERUJVRwotCQkJY21uX2VycihDRV9BTEVSVCwKLQkJCQkJIkRldmljZSAlcyAtIGJhZCBpbm9kZSBtYWdpYy92c24gIgotCQkJCQkiZGFkZHIgJWxsZCAjJWQgKG1hZ2ljPSV4KSIsCi0JCQkJWEZTX0JVRlRBUkdfTkFNRShtcC0+bV9kZGV2X3RhcmdwKSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWltYXAuaW1fYmxrbm8sIGksCi0JCQkJYmUxNl90b19jcHUoZGlwLT5kaV9jb3JlLmRpX21hZ2ljKSk7Ci0jZW5kaWYKLQkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfaXRvYnAiLCBYRlNfRVJSTEVWRUxfSElHSCwKLQkJCQkJICAgICBtcCwgZGlwKTsKLQkJCXhmc190cmFuc19icmVsc2UodHAsIGJwKTsKLQkJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKLQkJfQotCX0KLQotCXhmc19pbm9icF9jaGVjayhtcCwgYnApOwotCi0JLyoKLQkgKiBNYXJrIHRoZSBidWZmZXIgYXMgYW4gaW5vZGUgYnVmZmVyIG5vdyB0aGF0IGl0IGxvb2tzIGdvb2QKLQkgKi8KLQlYRlNfQlVGX1NFVF9WVFlQRShicCwgQl9GU19JTk8pOwotCi0JLyoKLQkgKiBTZXQgKmRpcHAgdG8gcG9pbnQgdG8gdGhlIG9uLWRpc2sgaW5vZGUgaW4gdGhlIGJ1ZmZlci4KLQkgKi8KIAkqZGlwcCA9ICh4ZnNfZGlub2RlX3QgKil4ZnNfYnVmX29mZnNldChicCwgaW1hcC5pbV9ib2Zmc2V0KTsKIAkqYnBwID0gYnA7CiAJcmV0dXJuIDA7CkBAIC04NzgsNyArODI0LDcgQEAKIAkgKiByZXR1cm4gTlVMTCBhcyB3ZWxsLiAgU2V0IGlfYmxrbm8gdG8gMCBzbyB0aGF0IHhmc19pdG9icCgpIHdpbGwKIAkgKiBrbm93IHRoYXQgdGhpcyBpcyBhIG5ldyBpbmNvcmUgaW5vZGUuCiAJICovCi0JZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmJwLCBibm8sIGltYXBfZmxhZ3MpOworCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZicCwgYm5vLCBpbWFwX2ZsYWdzLCBYRlNfQlVGX0xPQ0spOwogCWlmIChlcnJvcikgewogCQlrbWVtX3pvbmVfZnJlZSh4ZnNfaW5vZGVfem9uZSwgaXApOwogCQlyZXR1cm4gZXJyb3I7CkBAIC0xMTQ3LDcgKzEwOTMsNyBAQAogCSAqIHRoZSBpbm9kZSB2ZXJzaW9uIG51bWJlciBub3cuICBUaGlzIHdheSB3ZSBvbmx5IGRvIHRoZSBjb252ZXJzaW9uCiAJICogaGVyZSByYXRoZXIgdGhhbiBoZXJlIGFuZCBpbiB0aGUgZmx1c2gvbG9nZ2luZyBjb2RlLgogCSAqLwotCWlmIChYRlNfU0JfVkVSU0lPTl9IQVNOTElOSygmdHAtPnRfbW91bnRwLT5tX3NiKSAmJgorCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNubGluaygmdHAtPnRfbW91bnRwLT5tX3NiKSAmJgogCSAgICBpcC0+aV9kLmRpX3ZlcnNpb24gPT0gWEZTX0RJTk9ERV9WRVJTSU9OXzEpIHsKIAkJaXAtPmlfZC5kaV92ZXJzaW9uID0gWEZTX0RJTk9ERV9WRVJTSU9OXzI7CiAJCS8qCkBAIC0xNTE4LDUxICsxNDY0LDUwIEBACiB9CiAKIC8qCi0gKiBTaHJpbmsgdGhlIGZpbGUgdG8gdGhlIGdpdmVuIG5ld19zaXplLiAgVGhlIG5ldwotICogc2l6ZSBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBzaXplLgotICogVGhpcyB3aWxsIGZyZWUgdXAgdGhlIHVuZGVybHlpbmcgYmxvY2tzCi0gKiBpbiB0aGUgcmVtb3ZlZCByYW5nZSBhZnRlciBhIGNhbGwgdG8geGZzX2l0cnVuY2F0ZV9zdGFydCgpCi0gKiBvciB4ZnNfYXRydW5jYXRlX3N0YXJ0KCkuCisgKiBTaHJpbmsgdGhlIGZpbGUgdG8gdGhlIGdpdmVuIG5ld19zaXplLiAgVGhlIG5ldyBzaXplIG11c3QgYmUgc21hbGxlciB0aGFuCisgKiB0aGUgY3VycmVudCBzaXplLiAgVGhpcyB3aWxsIGZyZWUgdXAgdGhlIHVuZGVybHlpbmcgYmxvY2tzIGluIHRoZSByZW1vdmVkCisgKiByYW5nZSBhZnRlciBhIGNhbGwgdG8geGZzX2l0cnVuY2F0ZV9zdGFydCgpIG9yIHhmc19hdHJ1bmNhdGVfc3RhcnQoKS4KICAqCi0gKiBUaGUgdHJhbnNhY3Rpb24gcGFzc2VkIHRvIHRoaXMgcm91dGluZSBtdXN0IGhhdmUgbWFkZQotICogYSBwZXJtYW5lbnQgbG9nIHJlc2VydmF0aW9uIG9mIGF0IGxlYXN0IFhGU19JVFJVTkNBVEVfTE9HX1JFUy4KLSAqIFRoaXMgcm91dGluZSBtYXkgY29tbWl0IHRoZSBnaXZlbiB0cmFuc2FjdGlvbiBhbmQKLSAqIHN0YXJ0IG5ldyBvbmVzLCBzbyBtYWtlIHN1cmUgZXZlcnl0aGluZyBpbnZvbHZlZCBpbgotICogdGhlIHRyYW5zYWN0aW9uIGlzIHRpZHkgYmVmb3JlIGNhbGxpbmcgaGVyZS4KLSAqIFNvbWUgdHJhbnNhY3Rpb24gd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHRvIGJlCi0gKiBjb21taXR0ZWQuICBUaGUgaW5jb21pbmcgdHJhbnNhY3Rpb24gbXVzdCBhbHJlYWR5IGluY2x1ZGUKLSAqIHRoZSBpbm9kZSwgYW5kIGJvdGggaW5vZGUgbG9ja3MgbXVzdCBiZSBoZWxkIGV4Y2x1c2l2ZWx5LgotICogVGhlIGlub2RlIG11c3QgYWxzbyBiZSAiaGVsZCIgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4gIE9uCi0gKiByZXR1cm4gdGhlIGlub2RlIHdpbGwgYmUgImhlbGQiIHdpdGhpbiB0aGUgcmV0dXJuZWQgdHJhbnNhY3Rpb24uCi0gKiBUaGlzIHJvdXRpbmUgZG9lcyBOT1QgcmVxdWlyZSBhbnkgZGlzayBzcGFjZSB0byBiZSByZXNlcnZlZAotICogZm9yIGl0IHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24uCisgKiBUaGUgdHJhbnNhY3Rpb24gcGFzc2VkIHRvIHRoaXMgcm91dGluZSBtdXN0IGhhdmUgbWFkZSBhIHBlcm1hbmVudCBsb2cKKyAqIHJlc2VydmF0aW9uIG9mIGF0IGxlYXN0IFhGU19JVFJVTkNBVEVfTE9HX1JFUy4gIFRoaXMgcm91dGluZSBtYXkgY29tbWl0IHRoZQorICogZ2l2ZW4gdHJhbnNhY3Rpb24gYW5kIHN0YXJ0IG5ldyBvbmVzLCBzbyBtYWtlIHN1cmUgZXZlcnl0aGluZyBpbnZvbHZlZCBpbgorICogdGhlIHRyYW5zYWN0aW9uIGlzIHRpZHkgYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFNvbWUgdHJhbnNhY3Rpb24gd2lsbCBiZQorICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB0byBiZSBjb21taXR0ZWQuICBUaGUgaW5jb21pbmcgdHJhbnNhY3Rpb24gbXVzdAorICogYWxyZWFkeSBpbmNsdWRlIHRoZSBpbm9kZSwgYW5kIGJvdGggaW5vZGUgbG9ja3MgbXVzdCBiZSBoZWxkIGV4Y2x1c2l2ZWx5LgorICogVGhlIGlub2RlIG11c3QgYWxzbyBiZSAiaGVsZCIgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4gIE9uIHJldHVybiB0aGUgaW5vZGUKKyAqIHdpbGwgYmUgImhlbGQiIHdpdGhpbiB0aGUgcmV0dXJuZWQgdHJhbnNhY3Rpb24uICBUaGlzIHJvdXRpbmUgZG9lcyBOT1QKKyAqIHJlcXVpcmUgYW55IGRpc2sgc3BhY2UgdG8gYmUgcmVzZXJ2ZWQgZm9yIGl0IHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24uCiAgKgotICogVGhlIGZvcmsgcGFyYW1ldGVyIG11c3QgYmUgZWl0aGVyIHhmc19hdHRyX2Zvcmsgb3IgeGZzX2RhdGFfZm9yaywKLSAqIGFuZCBpdCBpbmRpY2F0ZXMgdGhlIGZvcmsgd2hpY2ggaXMgdG8gYmUgdHJ1bmNhdGVkLiAgRm9yIHRoZQotICogYXR0cmlidXRlIGZvcmsgd2Ugb25seSBzdXBwb3J0IHRydW5jYXRpb24gdG8gc2l6ZSAwLgorICogVGhlIGZvcmsgcGFyYW1ldGVyIG11c3QgYmUgZWl0aGVyIHhmc19hdHRyX2Zvcmsgb3IgeGZzX2RhdGFfZm9yaywgYW5kIGl0CisgKiBpbmRpY2F0ZXMgdGhlIGZvcmsgd2hpY2ggaXMgdG8gYmUgdHJ1bmNhdGVkLiAgRm9yIHRoZSBhdHRyaWJ1dGUgZm9yayB3ZSBvbmx5CisgKiBzdXBwb3J0IHRydW5jYXRpb24gdG8gc2l6ZSAwLgogICoKLSAqIFdlIHVzZSB0aGUgc3luYyBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIGZpcnN0Ci0gKiB0cmFuc2FjdGlvbiB3ZSBwZXJmb3JtIG1pZ2h0IGhhdmUgdG8gYmUgc3luY2hyb25vdXMuICBGb3IgdGhlIGF0dHIgZm9yaywKLSAqIGl0IG5lZWRzIHRvIGJlIHNvIGlmIHRoZSB1bmxpbmsgb2YgdGhlIGlub2RlIGlzIG5vdCB5ZXQga25vd24gdG8gYmUKLSAqIHBlcm1hbmVudCBpbiB0aGUgbG9nLiAgVGhpcyBrZWVwcyB1cyBmcm9tIGZyZWVpbmcgYW5kIHJldXNpbmcgdGhlCi0gKiBibG9ja3Mgb2YgdGhlIGF0dHJpYnV0ZSBmb3JrIGJlZm9yZSB0aGUgdW5saW5rIG9mIHRoZSBpbm9kZSBiZWNvbWVzCi0gKiBwZXJtYW5lbnQuCisgKiBXZSB1c2UgdGhlIHN5bmMgcGFyYW1ldGVyIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBmaXJzdCB0cmFuc2FjdGlvbgorICogd2UgcGVyZm9ybSBtaWdodCBoYXZlIHRvIGJlIHN5bmNocm9ub3VzLiAgRm9yIHRoZSBhdHRyIGZvcmssIGl0IG5lZWRzIHRvIGJlCisgKiBzbyBpZiB0aGUgdW5saW5rIG9mIHRoZSBpbm9kZSBpcyBub3QgeWV0IGtub3duIHRvIGJlIHBlcm1hbmVudCBpbiB0aGUgbG9nLgorICogVGhpcyBrZWVwcyB1cyBmcm9tIGZyZWVpbmcgYW5kIHJldXNpbmcgdGhlIGJsb2NrcyBvZiB0aGUgYXR0cmlidXRlIGZvcmsKKyAqIGJlZm9yZSB0aGUgdW5saW5rIG9mIHRoZSBpbm9kZSBiZWNvbWVzIHBlcm1hbmVudC4KICAqCi0gKiBGb3IgdGhlIGRhdGEgZm9yaywgd2Ugbm9ybWFsbHkgaGF2ZSB0byBydW4gc3luY2hyb25vdXNseSBpZiB3ZSdyZQotICogYmVpbmcgY2FsbGVkIG91dCBvZiB0aGUgaW5hY3RpdmUgcGF0aCBvciB3ZSdyZSBiZWluZyBjYWxsZWQKLSAqIG91dCBvZiB0aGUgY3JlYXRlIHBhdGggd2hlcmUgd2UncmUgdHJ1bmNhdGluZyBhbiBleGlzdGluZyBmaWxlLgotICogRWl0aGVyIHdheSwgdGhlIHRydW5jYXRlIG5lZWRzIHRvIGJlIHN5bmMgc28gYmxvY2tzIGRvbid0IHJlYXBwZWFyCi0gKiBpbiB0aGUgZmlsZSB3aXRoIGFsdGVyZWQgZGF0YSBpbiBjYXNlIG9mIGEgY3Jhc2guICB3c3luYyBmaWxlc3lzdGVtcwotICogY2FuIHJ1biB0aGUgZmlyc3QgY2FzZSBhc3luYyBiZWNhdXNlIGFueXRoaW5nIHRoYXQgc2hyaW5rcyB0aGUgaW5vZGUKLSAqIGhhcyB0byBydW4gc3luYyBzbyBieSB0aGUgdGltZSB3ZSdyZSBjYWxsZWQgaGVyZSBmcm9tIGluYWN0aXZlLCB0aGUKLSAqIGlub2RlIHNpemUgaXMgcGVybWFuZW50bHkgc2V0IHRvIDAuCisgKiBGb3IgdGhlIGRhdGEgZm9yaywgd2Ugbm9ybWFsbHkgaGF2ZSB0byBydW4gc3luY2hyb25vdXNseSBpZiB3ZSdyZSBiZWluZworICogY2FsbGVkIG91dCBvZiB0aGUgaW5hY3RpdmUgcGF0aCBvciB3ZSdyZSBiZWluZyBjYWxsZWQgb3V0IG9mIHRoZSBjcmVhdGUgcGF0aAorICogd2hlcmUgd2UncmUgdHJ1bmNhdGluZyBhbiBleGlzdGluZyBmaWxlLiAgRWl0aGVyIHdheSwgdGhlIHRydW5jYXRlIG5lZWRzIHRvCisgKiBiZSBzeW5jIHNvIGJsb2NrcyBkb24ndCByZWFwcGVhciBpbiB0aGUgZmlsZSB3aXRoIGFsdGVyZWQgZGF0YSBpbiBjYXNlIG9mIGEKKyAqIGNyYXNoLiAgd3N5bmMgZmlsZXN5c3RlbXMgY2FuIHJ1biB0aGUgZmlyc3QgY2FzZSBhc3luYyBiZWNhdXNlIGFueXRoaW5nIHRoYXQKKyAqIHNocmlua3MgdGhlIGlub2RlIGhhcyB0byBydW4gc3luYyBzbyBieSB0aGUgdGltZSB3ZSdyZSBjYWxsZWQgaGVyZSBmcm9tCisgKiBpbmFjdGl2ZSwgdGhlIGlub2RlIHNpemUgaXMgcGVybWFuZW50bHkgc2V0IHRvIDAuCiAgKgotICogQ2FsbHMgZnJvbSB0aGUgdHJ1bmNhdGUgcGF0aCBhbHdheXMgbmVlZCB0byBiZSBzeW5jIHVubGVzcyB3ZSdyZQotICogaW4gYSB3c3luYyBmaWxlc3lzdGVtIGFuZCB0aGUgZmlsZSBoYXMgYWxyZWFkeSBiZWVuIHVubGlua2VkLgorICogQ2FsbHMgZnJvbSB0aGUgdHJ1bmNhdGUgcGF0aCBhbHdheXMgbmVlZCB0byBiZSBzeW5jIHVubGVzcyB3ZSdyZSBpbiBhIHdzeW5jCisgKiBmaWxlc3lzdGVtIGFuZCB0aGUgZmlsZSBoYXMgYWxyZWFkeSBiZWVuIHVubGlua2VkLgogICoKLSAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNvcnJlY3RseSBzZXR0aW5nIHRoZSBzeW5jIHBhcmFtZXRlci4KLSAqIEl0IGdldHMgdG9vIGhhcmQgZm9yIHVzIHRvIGd1ZXNzIGhlcmUgd2hpY2ggcGF0aCB3ZSdyZSBiZWluZyBjYWxsZWQKLSAqIG91dCBvZiBqdXN0IGJhc2VkIG9uIGlub2RlIHN0YXRlLgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY29ycmVjdGx5IHNldHRpbmcgdGhlIHN5bmMgcGFyYW1ldGVyLiAgSXQgZ2V0cworICogdG9vIGhhcmQgZm9yIHVzIHRvIGd1ZXNzIGhlcmUgd2hpY2ggcGF0aCB3ZSdyZSBiZWluZyBjYWxsZWQgb3V0IG9mIGp1c3QKKyAqIGJhc2VkIG9uIGlub2RlIHN0YXRlLgorICoKKyAqIElmIHdlIGdldCBhbiBlcnJvciwgd2UgbXVzdCByZXR1cm4gd2l0aCB0aGUgaW5vZGUgbG9ja2VkIGFuZCBsaW5rZWQgaW50byB0aGUKKyAqIGN1cnJlbnQgdHJhbnNhY3Rpb24uIFRoaXMga2VlcHMgdGhpbmdzIHNpbXBsZSBmb3IgdGhlIGhpZ2hlciBsZXZlbCBjb2RlLAorICogYmVjYXVzZSBpdCBhbHdheXMga25vd3MgdGhhdCB0aGUgaW5vZGUgaXMgbG9ja2VkIGFuZCBoZWxkIGluIHRoZSB0cmFuc2FjdGlvbgorICogdGhhdCByZXR1cm5zIHRvIGl0IHdoZXRoZXIgZXJyb3JzIG9jY3VyIG9yIG5vdC4gIFdlIGRvbid0IG1hcmsgdGhlIGlub2RlCisgKiBkaXJ0eSBvbiBlcnJvciBzbyB0aGF0IHRyYW5zYWN0aW9ucyBjYW4gYmUgZWFzaWx5IGFib3J0ZWQgaWYgcG9zc2libGUuCiAgKi8KIGludAogeGZzX2l0cnVuY2F0ZV9maW5pc2goCkBAIC0xNzQxLDY1ICsxNjg2LDUxIEBACiAJCSAqLwogCQllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCh0cCwgJmZyZWVfbGlzdCwgJmNvbW1pdHRlZCk7CiAJCW50cCA9ICp0cDsKKwkJaWYgKGNvbW1pdHRlZCkgeworCQkJLyogbGluayB0aGUgaW5vZGUgaW50byB0aGUgbmV4dCB4YWN0IGluIHRoZSBjaGFpbiAqLworCQkJeGZzX3RyYW5zX2lqb2luKG50cCwgaXAsCisJCQkJCVhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKKwkJCXhmc190cmFuc19paG9sZChudHAsIGlwKTsKKwkJfQorCiAJCWlmIChlcnJvcikgewogCQkJLyoKLQkJCSAqIElmIHRoZSBibWFwIGZpbmlzaCBjYWxsIGVuY291bnRlcnMgYW4gZXJyb3IsCi0JCQkgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGVyZSB0aGUgdHJhbnNhY3Rpb24KLQkJCSAqIGNhbiBiZSBwcm9wZXJseSBhYm9ydGVkLiAgV2UganVzdCBuZWVkIHRvCi0JCQkgKiBtYWtlIHN1cmUgd2UncmUgbm90IGhvbGRpbmcgYW55IHJlc291cmNlcwotCQkJICogdGhhdCB3ZSB3ZXJlIG5vdCB3aGVuIHdlIGNhbWUgaW4uCisJCQkgKiBJZiB0aGUgYm1hcCBmaW5pc2ggY2FsbCBlbmNvdW50ZXJzIGFuIGVycm9yLCByZXR1cm4KKwkJCSAqIHRvIHRoZSBjYWxsZXIgd2hlcmUgdGhlIHRyYW5zYWN0aW9uIGNhbiBiZSBwcm9wZXJseQorCQkJICogYWJvcnRlZC4gIFdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90CisJCQkgKiBob2xkaW5nIGFueSByZXNvdXJjZXMgdGhhdCB3ZSB3ZXJlIG5vdCB3aGVuIHdlIGNhbWUKKwkJCSAqIGluLgogCQkJICoKLQkJCSAqIEFib3J0aW5nIGZyb20gdGhpcyBwb2ludCBtaWdodCBsb3NlIHNvbWUKLQkJCSAqIGJsb2NrcyBpbiB0aGUgZmlsZSBzeXN0ZW0sIGJ1dCBvaCB3ZWxsLgorCQkJICogQWJvcnRpbmcgZnJvbSB0aGlzIHBvaW50IG1pZ2h0IGxvc2Ugc29tZSBibG9ja3MgaW4KKwkJCSAqIHRoZSBmaWxlIHN5c3RlbSwgYnV0IG9oIHdlbGwuCiAJCQkgKi8KIAkJCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKLQkJCWlmIChjb21taXR0ZWQpIHsKLQkJCQkvKgotCQkJCSAqIElmIHRoZSBwYXNzZWQgaW4gdHJhbnNhY3Rpb24gY29tbWl0dGVkCi0JCQkJICogaW4geGZzX2JtYXBfZmluaXNoKCksIHRoZW4gd2Ugd2FudCB0bwotCQkJCSAqIGFkZCB0aGUgaW5vZGUgdG8gdGhpcyBvbmUgYmVmb3JlIHJldHVybmluZy4KLQkJCQkgKiBUaGlzIGtlZXBzIHRoaW5ncyBzaW1wbGUgZm9yIHRoZSBoaWdoZXIKLQkJCQkgKiBsZXZlbCBjb2RlLCBiZWNhdXNlIGl0IGFsd2F5cyBrbm93cyB0aGF0Ci0JCQkJICogdGhlIGlub2RlIGlzIGxvY2tlZCBhbmQgaGVsZCBpbiB0aGUKLQkJCQkgKiB0cmFuc2FjdGlvbiB0aGF0IHJldHVybnMgdG8gaXQgd2hldGhlcgotCQkJCSAqIGVycm9ycyBvY2N1ciBvciBub3QuICBXZSBkb24ndCBtYXJrIHRoZQotCQkJCSAqIGlub2RlIGRpcnR5IHNvIHRoYXQgdGhpcyB0cmFuc2FjdGlvbiBjYW4KLQkJCQkgKiBiZSBlYXNpbHkgYWJvcnRlZCBpZiBwb3NzaWJsZS4KLQkJCQkgKi8KLQkJCQl4ZnNfdHJhbnNfaWpvaW4obnRwLCBpcCwKLQkJCQkJWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwotCQkJCXhmc190cmFuc19paG9sZChudHAsIGlwKTsKLQkJCX0KIAkJCXJldHVybiBlcnJvcjsKIAkJfQogCiAJCWlmIChjb21taXR0ZWQpIHsKIAkJCS8qCi0JCQkgKiBUaGUgZmlyc3QgeGFjdCB3YXMgY29tbWl0dGVkLAotCQkJICogc28gYWRkIHRoZSBpbm9kZSB0byB0aGUgbmV3IG9uZS4KLQkJCSAqIE1hcmsgaXQgZGlydHkgc28gaXQgd2lsbCBiZSBsb2dnZWQKLQkJCSAqIGFuZCBtb3ZlZCBmb3J3YXJkIGluIHRoZSBsb2cgYXMKLQkJCSAqIHBhcnQgb2YgZXZlcnkgY29tbWl0LgorCQkJICogTWFyayB0aGUgaW5vZGUgZGlydHkgc28gaXQgd2lsbCBiZSBsb2dnZWQgYW5kCisJCQkgKiBtb3ZlZCBmb3J3YXJkIGluIHRoZSBsb2cgYXMgcGFydCBvZiBldmVyeSBjb21taXQuCiAJCQkgKi8KLQkJCXhmc190cmFuc19pam9pbihudHAsIGlwLAotCQkJCQlYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7Ci0JCQl4ZnNfdHJhbnNfaWhvbGQobnRwLCBpcCk7CiAJCQl4ZnNfdHJhbnNfbG9nX2lub2RlKG50cCwgaXAsIFhGU19JTE9HX0NPUkUpOwogCQl9CisKIAkJbnRwID0geGZzX3RyYW5zX2R1cChudHApOwotCQkodm9pZCkgeGZzX3RyYW5zX2NvbW1pdCgqdHAsIDApOworCQllcnJvciA9IHhmc190cmFuc19jb21taXQoKnRwLCAwKTsKIAkJKnRwID0gbnRwOwotCQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKG50cCwgMCwgWEZTX0lUUlVOQ0FURV9MT0dfUkVTKG1wKSwgMCwKLQkJCQkJICBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLAotCQkJCQkgIFhGU19JVFJVTkNBVEVfTE9HX0NPVU5UKTsKLQkJLyoKLQkJICogQWRkIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQgdG8gdGhlIG5leHQgY2hhaW5lZAotCQkgKiB0cmFuc2FjdGlvbi4KLQkJICovCisKKwkJLyogbGluayB0aGUgaW5vZGUgaW50byB0aGUgbmV4dCB0cmFuc2FjdGlvbiBpbiB0aGUgY2hhaW4gKi8KIAkJeGZzX3RyYW5zX2lqb2luKG50cCwgaXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKIAkJeGZzX3RyYW5zX2lob2xkKG50cCwgaXApOworCisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKG50cCwgMCwKKwkJCQkJWEZTX0lUUlVOQ0FURV9MT0dfUkVTKG1wKSwgMCwKKwkJCQkJWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywKKwkJCQkJWEZTX0lUUlVOQ0FURV9MT0dfQ09VTlQpOwogCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gKGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKIAl9CiAJLyoKIAkgKiBPbmx5IHVwZGF0ZSB0aGUgc2l6ZSBpbiB0aGUgY2FzZSBvZiB0aGUgZGF0YSBmb3JrLCBidXQKQEAgLTE5NjcsNyArMTg5OCw3IEBACiAJCSAqIEhlcmUgd2UgcHV0IHRoZSBoZWFkIHBvaW50ZXIgaW50byBvdXIgbmV4dCBwb2ludGVyLAogCQkgKiBhbmQgdGhlbiB3ZSBmYWxsIHRocm91Z2ggdG8gcG9pbnQgdGhlIGhlYWQgYXQgdXMuCiAJCSAqLwotCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCAwLCAwKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgMCwgMCwgWEZTX0JVRl9MT0NLKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCkBAIC0yMDc1LDcgKzIwMDYsNyBAQAogCQkgKiBvZiBkZWFsaW5nIHdpdGggdGhlIGJ1ZmZlciB3aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8KIAkJICogY2hhbmdlIGl0LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgMCwgMCk7CisJCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIDAsIDAsIFhGU19CVUZfTE9DSyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLAogCQkJCSJ4ZnNfaXVubGlua19yZW1vdmU6IHhmc19pdG9icCgpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLApAQCAtMjEzNyw3ICsyMDY4LDcgQEAKIAkJICogTm93IGxhc3RfaWJwIHBvaW50cyB0byB0aGUgYnVmZmVyIHByZXZpb3VzIHRvIHVzIG9uCiAJCSAqIHRoZSB1bmxpbmtlZCBsaXN0LiAgUHVsbCB1cyBmcm9tIHRoZSBsaXN0LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgMCwgMCk7CisJCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIDAsIDAsIFhGU19CVUZfTE9DSyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLAogCQkJCSJ4ZnNfaXVubGlua19yZW1vdmU6IHhmc19pdG9icCgpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLApAQCAtMjE3MiwxMyArMjEwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLVNUQVRJQ19JTkxJTkUgaW50IHhmc19pbm9kZV9jbGVhbih4ZnNfaW5vZGVfdCAqaXApCi17Ci0JcmV0dXJuICgoKGlwLT5pX2l0ZW1wID09IE5VTEwpIHx8Ci0JCSEoaXAtPmlfaXRlbXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAmIFhGU19JTE9HX0FMTCkpICYmCi0JCShpcC0+aV91cGRhdGVfY29yZSA9PSAwKSk7Ci19Ci0KIFNUQVRJQyB2b2lkCiB4ZnNfaWZyZWVfY2x1c3RlcigKIAl4ZnNfaW5vZGVfdAkqZnJlZV9pcCwKQEAgLTI0MDAsNyArMjMyNCw3IEBACiAKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAKLQllcnJvciA9IHhmc19pdG9icChpcC0+aV9tb3VudCwgdHAsIGlwLCAmZGlwLCAmaWJwLCAwLCAwKTsKKwllcnJvciA9IHhmc19pdG9icChpcC0+aV9tb3VudCwgdHAsIGlwLCAmZGlwLCAmaWJwLCAwLCAwLCBYRlNfQlVGX0xPQ0spOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0yNjc4LDE0ICsyNjAyLDMxIEBACiAJZnNibm8gPSBpbWFwLT5pbV9ibGtubyA/CiAJCVhGU19EQUREUl9UT19GU0IobXAsIGltYXAtPmltX2Jsa25vKSA6IE5VTExGU0JMT0NLOwogCWVycm9yID0geGZzX2RpbG9jYXRlKG1wLCB0cCwgaW5vLCAmZnNibm8sICZsZW4sICZvZmYsIGZsYWdzKTsKLQlpZiAoZXJyb3IgIT0gMCkgeworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCX0KKwogCWltYXAtPmltX2Jsa25vID0gWEZTX0ZTQl9UT19EQUREUihtcCwgZnNibm8pOwogCWltYXAtPmltX2xlbiA9IFhGU19GU0JfVE9fQkIobXAsIGxlbik7CiAJaW1hcC0+aW1fYWdibGtubyA9IFhGU19GU0JfVE9fQUdCTk8obXAsIGZzYm5vKTsKIAlpbWFwLT5pbV9pb2Zmc2V0ID0gKHVzaG9ydClvZmY7CiAJaW1hcC0+aW1fYm9mZnNldCA9ICh1c2hvcnQpKG9mZiA8PCBtcC0+bV9zYi5zYl9pbm9kZWxvZyk7CisKKwkvKgorCSAqIElmIHRoZSBpbm9kZSBudW1iZXIgbWFwcyB0byBhIGJsb2NrIG91dHNpZGUgdGhlIGJvdW5kcworCSAqIG9mIHRoZSBmaWxlIHN5c3RlbSB0aGVuIHJldHVybiBOVUxMIHJhdGhlciB0aGFuIGNhbGxpbmcKKwkgKiByZWFkX2J1ZiBhbmQgcGFuaWNpbmcgd2hlbiB3ZSBnZXQgYW4gZXJyb3IgZnJvbSB0aGUKKwkgKiBkcml2ZXIuCisJICovCisJaWYgKChpbWFwLT5pbV9ibGtubyArIGltYXAtPmltX2xlbikgPgorCSAgICBYRlNfRlNCX1RPX0JCKG1wLCBtcC0+bV9zYi5zYl9kYmxvY2tzKSkgeworCQl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgbXAsICJ4ZnNfaW1hcDogIgorCQkJIihpbWFwLT5pbV9ibGtubyAoMHglbGx4KSArIGltYXAtPmltX2xlbiAoMHglbGx4KSkgPiAiCisJCQkiIFhGU19GU0JfVE9fQkIobXAsIG1wLT5tX3NiLnNiX2RibG9ja3MpICgweCVsbHgpIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGltYXAtPmltX2Jsa25vLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaW1hcC0+aW1fbGVuLAorCQkJWEZTX0ZTQl9UT19CQihtcCwgbXAtPm1fc2Iuc2JfZGJsb2NrcykpOworCQlyZXR1cm4gRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjgyNiwzOCArMjc2Nyw0MSBAQAogfQogCiAvKgotICogVGhpcyBpcyBjYWxsZWQgdG8gd2FpdCBmb3IgdGhlIGdpdmVuIGlub2RlIHRvIGJlIHVucGlubmVkLgotICogSXQgd2lsbCBzbGVlcCB1bnRpbCB0aGlzIGhhcHBlbnMuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0aGUKLSAqIGlub2RlIGxvY2tlZCBpbiBhdCBsZWFzdCBzaGFyZWQgbW9kZSBzbyB0aGF0IHRoZSBidWZmZXIgY2Fubm90Ci0gKiBiZSBzdWJzZXF1ZW50bHkgcGlubmVkIG9uY2Ugc29tZW9uZSBpcyB3YWl0aW5nIGZvciBpdCB0byBiZQotICogdW5waW5uZWQuCisgKiBUaGlzIGlzIGNhbGxlZCB0byB1bnBpbiBhbiBpbm9kZS4gSXQgY2FuIGJlIGRpcmVjdGVkIHRvIHdhaXQgb3IgdG8gcmV0dXJuCisgKiBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBpbm9kZSB0byBiZSB1bnBpbm5lZC4gIFRoZSBjYWxsZXIgbXVzdAorICogaGF2ZSB0aGUgaW5vZGUgbG9ja2VkIGluIGF0IGxlYXN0IHNoYXJlZCBtb2RlIHNvIHRoYXQgdGhlIGJ1ZmZlciBjYW5ub3QgYmUKKyAqIHN1YnNlcXVlbnRseSBwaW5uZWQgb25jZSBzb21lb25lIGlzIHdhaXRpbmcgZm9yIGl0IHRvIGJlIHVucGlubmVkLgogICovCiBTVEFUSUMgdm9pZAorX194ZnNfaXVucGluX3dhaXQoCisJeGZzX2lub2RlX3QJKmlwLAorCWludAkJd2FpdCkKK3sKKwl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwID0gaXAtPmlfaXRlbXA7CisKKwlBU1NFUlQoaXNtcmxvY2tlZCgmaXAtPmlfbG9jaywgTVJfVVBEQVRFIHwgTVJfQUNDRVNTKSk7CisJaWYgKGF0b21pY19yZWFkKCZpcC0+aV9waW5jb3VudCkgPT0gMCkKKwkJcmV0dXJuOworCisJLyogR2l2ZSB0aGUgbG9nIGEgcHVzaCB0byBzdGFydCB0aGUgdW5waW5uaW5nIEkvTyAqLworCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIChpaXAgJiYgaWlwLT5pbGlfbGFzdF9sc24pID8KKwkJCQlpaXAtPmlsaV9sYXN0X2xzbiA6IDAsIFhGU19MT0dfRk9SQ0UpOworCWlmICh3YWl0KQorCQl3YWl0X2V2ZW50KGlwLT5pX2lwaW5fd2FpdCwgKGF0b21pY19yZWFkKCZpcC0+aV9waW5jb3VudCkgPT0gMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKIHhmc19pdW5waW5fd2FpdCgKIAl4ZnNfaW5vZGVfdAkqaXApCiB7Ci0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcDsKLQl4ZnNfbHNuX3QJbHNuOworCV9feGZzX2l1bnBpbl93YWl0KGlwLCAxKTsKK30KIAotCUFTU0VSVChpc21ybG9ja2VkKCZpcC0+aV9sb2NrLCBNUl9VUERBVEUgfCBNUl9BQ0NFU1MpKTsKLQotCWlmIChhdG9taWNfcmVhZCgmaXAtPmlfcGluY291bnQpID09IDApIHsKLQkJcmV0dXJuOwotCX0KLQotCWlpcCA9IGlwLT5pX2l0ZW1wOwotCWlmIChpaXAgJiYgaWlwLT5pbGlfbGFzdF9sc24pIHsKLQkJbHNuID0gaWlwLT5pbGlfbGFzdF9sc247Ci0JfSBlbHNlIHsKLQkJbHNuID0gKHhmc19sc25fdCkwOwotCX0KLQotCS8qCi0JICogR2l2ZSB0aGUgbG9nIGEgcHVzaCBzbyB3ZSBkb24ndCB3YWl0IGhlcmUgdG9vIGxvbmcuCi0JICovCi0JeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgbHNuLCBYRlNfTE9HX0ZPUkNFKTsKLQotCXdhaXRfZXZlbnQoaXAtPmlfaXBpbl93YWl0LCAoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA9PSAwKSk7CitzdGF0aWMgaW5saW5lIHZvaWQKK3hmc19pdW5waW5fbm93YWl0KAorCXhmc19pbm9kZV90CSppcCkKK3sKKwlfX3hmc19pdW5waW5fd2FpdChpcCwgMCk7CiB9CiAKIApAQCAtMjkzMiw3ICsyODc2LDcgQEAKICAqIGZvcm1hdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGZvcmsuCiAgKi8KIC8qQVJHU1VTRUQqLwotU1RBVElDIGludAorU1RBVElDIHZvaWQKIHhmc19pZmx1c2hfZm9yaygKIAl4ZnNfaW5vZGVfdAkJKmlwLAogCXhmc19kaW5vZGVfdAkJKmRpcCwKQEAgLTI5NTMsMTYgKzI4OTcsMTYgQEAKIAlzdGF0aWMgY29uc3Qgc2hvcnQJZXh0ZmxhZ1syXSA9CiAJCXsgWEZTX0lMT0dfREVYVCwgWEZTX0lMT0dfQUVYVCB9OwogCi0JaWYgKGlpcCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwlpZiAoIWlpcCkKKwkJcmV0dXJuOwogCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CiAJLyoKIAkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgZ2F2ZSB1cCBpbiBpZm9ybWF0IGluIGFuIGVycm9yIHBhdGgsCiAJICogZm9yIHRoZSBhdHRyaWJ1dGUgZm9yay4KIAkgKi8KLQlpZiAoaWZwID09IE5VTEwpIHsKKwlpZiAoIWlmcCkgewogCQlBU1NFUlQod2hpY2hmb3JrID09IFhGU19BVFRSX0ZPUkspOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAljcCA9IFhGU19ERk9SS19QVFIoZGlwLCB3aGljaGZvcmspOwogCW1wID0gaXAtPmlfbW91bnQ7CkBAIC0zMDIzLDggKzI5NjcsMTQ1IEBACiAJCUFTU0VSVCgwKTsKIAkJYnJlYWs7CiAJfQorfQogCitTVEFUSUMgaW50Cit4ZnNfaWZsdXNoX2NsdXN0ZXIoCisJeGZzX2lub2RlX3QJKmlwLAorCXhmc19idWZfdAkqYnApCit7CisJeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OworCXhmc19wZXJhZ190CQkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwl1bnNpZ25lZCBsb25nCQlmaXJzdF9pbmRleCwgbWFzazsKKwlpbnQJCQlpbGlzdF9zaXplOworCXhmc19pbm9kZV90CQkqKmlsaXN0OworCXhmc19pbm9kZV90CQkqaXE7CisJaW50CQkJbnJfZm91bmQ7CisJaW50CQkJY2xjb3VudCA9IDA7CisJaW50CQkJYnVmd2FzZGVsd3JpOworCWludAkJCWk7CisKKwlBU1NFUlQocGFnLT5wYWdpX2lub2Rlb2spOworCUFTU0VSVChwYWctPnBhZ19pY2lfaW5pdCk7CisKKwlpbGlzdF9zaXplID0gWEZTX0lOT0RFX0NMVVNURVJfU0laRShtcCkgKiBzaXplb2YoeGZzX2lub2RlX3QgKik7CisJaWxpc3QgPSBrbWVtX2FsbG9jKGlsaXN0X3NpemUsIEtNX01BWUZBSUwpOworCWlmICghaWxpc3QpCisJCXJldHVybiAwOworCisJbWFzayA9IH4oKChYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZykpIC0gMSk7CisJZmlyc3RfaW5kZXggPSBYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pICYgbWFzazsKKwlyZWFkX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwkvKiByZWFsbHkgbmVlZCBhIGdhbmcgbG9va3VwIHJhbmdlIGNhbGwgaGVyZSAqLworCW5yX2ZvdW5kID0gcmFkaXhfdHJlZV9nYW5nX2xvb2t1cCgmcGFnLT5wYWdfaWNpX3Jvb3QsICh2b2lkKiopaWxpc3QsCisJCQkJCWZpcnN0X2luZGV4LAorCQkJCQlYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSk7CisJaWYgKG5yX2ZvdW5kID09IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZm91bmQ7IGkrKykgeworCQlpcSA9IGlsaXN0W2ldOworCQlpZiAoaXEgPT0gaXApCisJCQljb250aW51ZTsKKwkJLyogaWYgdGhlIGlub2RlIGxpZXMgb3V0c2lkZSB0aGlzIGNsdXN0ZXIsIHdlJ3JlIGRvbmUuICovCisJCWlmICgoWEZTX0lOT19UT19BR0lOTyhtcCwgaXEtPmlfaW5vKSAmIG1hc2spICE9IGZpcnN0X2luZGV4KQorCQkJYnJlYWs7CisJCS8qCisJCSAqIERvIGFuIHVuLXByb3RlY3RlZCBjaGVjayB0byBzZWUgaWYgdGhlIGlub2RlIGlzIGRpcnR5IGFuZAorCQkgKiBpcyBhIGNhbmRpZGF0ZSBmb3IgZmx1c2hpbmcuICBUaGVzZSBjaGVja3Mgd2lsbCBiZSByZXBlYXRlZAorCQkgKiBsYXRlciBhZnRlciB0aGUgYXBwcm9wcmlhdGUgbG9ja3MgYXJlIGFjcXVpcmVkLgorCQkgKi8KKwkJaWYgKHhmc19pbm9kZV9jbGVhbihpcSkgJiYgeGZzX2lwaW5jb3VudChpcSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRyeSB0byBnZXQgbG9ja3MuICBJZiBhbnkgYXJlIHVuYXZhaWxhYmxlIG9yIGl0IGlzIHBpbm5lZCwKKwkJICogdGhlbiB0aGlzIGlub2RlIGNhbm5vdCBiZSBmbHVzaGVkIGFuZCBpcyBza2lwcGVkLgorCQkgKi8KKworCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXEsIFhGU19JTE9DS19TSEFSRUQpKQorCQkJY29udGludWU7CisJCWlmICgheGZzX2lmbG9ja19ub3dhaXQoaXEpKSB7CisJCQl4ZnNfaXVubG9jayhpcSwgWEZTX0lMT0NLX1NIQVJFRCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoeGZzX2lwaW5jb3VudChpcSkpIHsKKwkJCXhmc19pZnVubG9jayhpcSk7CisJCQl4ZnNfaXVubG9jayhpcSwgWEZTX0lMT0NLX1NIQVJFRCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIGFycml2aW5nIGhlcmUgbWVhbnMgdGhhdCB0aGlzIGlub2RlIGNhbiBiZSBmbHVzaGVkLiAgRmlyc3QKKwkJICogcmUtY2hlY2sgdGhhdCBpdCdzIGRpcnR5IGJlZm9yZSBmbHVzaGluZy4KKwkJICovCisJCWlmICgheGZzX2lub2RlX2NsZWFuKGlxKSkgeworCQkJaW50CWVycm9yOworCQkJZXJyb3IgPSB4ZnNfaWZsdXNoX2ludChpcSwgYnApOworCQkJaWYgKGVycm9yKSB7CisJCQkJeGZzX2l1bmxvY2soaXEsIFhGU19JTE9DS19TSEFSRUQpOworCQkJCWdvdG8gY2x1c3Rlcl9jb3JydXB0X291dDsKKwkJCX0KKwkJCWNsY291bnQrKzsKKwkJfSBlbHNlIHsKKwkJCXhmc19pZnVubG9jayhpcSk7CisJCX0KKwkJeGZzX2l1bmxvY2soaXEsIFhGU19JTE9DS19TSEFSRUQpOworCX0KKworCWlmIChjbGNvdW50KSB7CisJCVhGU19TVEFUU19JTkMoeHNfaWNsdXN0ZXJfZmx1c2hjbnQpOworCQlYRlNfU1RBVFNfQUREKHhzX2ljbHVzdGVyX2ZsdXNoaW5vZGUsIGNsY291bnQpOworCX0KKworb3V0X2ZyZWU6CisJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwlrbWVtX2ZyZWUoaWxpc3QsIGlsaXN0X3NpemUpOwogCXJldHVybiAwOworCisKK2NsdXN0ZXJfY29ycnVwdF9vdXQ6CisJLyoKKwkgKiBDb3JydXB0aW9uIGRldGVjdGVkIGluIHRoZSBjbHVzdGVyaW5nIGxvb3AuICBJbnZhbGlkYXRlIHRoZQorCSAqIGlub2RlIGJ1ZmZlciBhbmQgc2h1dCBkb3duIHRoZSBmaWxlc3lzdGVtLgorCSAqLworCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CisJLyoKKwkgKiBDbGVhbiB1cCB0aGUgYnVmZmVyLiAgSWYgaXQgd2FzIEJfREVMV1JJLCBqdXN0IHJlbGVhc2UgaXQgLS0KKwkgKiBicmVsc2UgY2FuIGhhbmRsZSBpdCB3aXRoIG5vIHByb2JsZW1zLiAgSWYgbm90LCBzaHV0IGRvd24gdGhlCisJICogZmlsZXN5c3RlbSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBidWZmZXIuCisJICovCisJYnVmd2FzZGVsd3JpID0gWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApOworCWlmIChidWZ3YXNkZWx3cmkpCisJCXhmc19idWZfcmVsc2UoYnApOworCisJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9DT1JSVVBUX0lOQ09SRSk7CisKKwlpZiAoIWJ1Zndhc2RlbHdyaSkgeworCQkvKgorCQkgKiBKdXN0IGxpa2UgaW5jb3JlX3JlbHNlOiBpZiB3ZSBoYXZlIGJfaW9kb25lIGZ1bmN0aW9ucywKKwkJICogbWFyayB0aGUgYnVmZmVyIGFzIGFuIGVycm9yIGFuZCBjYWxsIHRoZW0uICBPdGhlcndpc2UKKwkJICogbWFyayBpdCBhcyBzdGFsZSBhbmQgYnJlbHNlLgorCQkgKi8KKwkJaWYgKFhGU19CVUZfSU9ET05FX0ZVTkMoYnApKSB7CisJCQlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOworCQkJWEZTX0JVRl9VTkRPTkUoYnApOworCQkJWEZTX0JVRl9TVEFMRShicCk7CisJCQlYRlNfQlVGX1NIVVQoYnApOworCQkJWEZTX0JVRl9FUlJPUihicCxFSU8pOworCQkJeGZzX2Jpb2RvbmUoYnApOworCQl9IGVsc2UgeworCQkJWEZTX0JVRl9TVEFMRShicCk7CisJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJfQorCX0KKworCS8qCisJICogVW5sb2NrcyB0aGUgZmx1c2ggbG9jaworCSAqLworCXhmc19pZmx1c2hfYWJvcnQoaXEpOworCWttZW1fZnJlZShpbGlzdCwgaWxpc3Rfc2l6ZSk7CisJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogfQogCiAvKgpAQCAtMzA0NiwxMSArMzEyNyw3IEBACiAJeGZzX2Rpbm9kZV90CQkqZGlwOwogCXhmc19tb3VudF90CQkqbXA7CiAJaW50CQkJZXJyb3I7Ci0JLyogUkVGRVJFTkNFRCAqLwotCXhmc19pbm9kZV90CQkqaXE7Ci0JaW50CQkJY2xjb3VudDsJLyogY291bnQgb2YgaW5vZGVzIGNsdXN0ZXJlZCAqLwotCWludAkJCWJ1Zndhc2RlbHdyaTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZQkqZW50cnk7CisJaW50CQkJbm9ibG9jayA9IChmbGFncyA9PSBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOwogCWVudW0geyBJTlRfREVMV1JJID0gKDEgPDwgMCksIElOVF9BU1lOQyA9ICgxIDw8IDEpIH07CiAKIAlYRlNfU1RBVFNfSU5DKHhzX2lmbHVzaF9jb3VudCk7CkBAIC0zMDY3LDggKzMxNDQsNyBAQAogCSAqIElmIHRoZSBpbm9kZSBpc24ndCBkaXJ0eSwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGlub2RlCiAJICogZmx1c2ggbG9jayBhbmQgZG8gbm90aGluZy4KIAkgKi8KLQlpZiAoKGlwLT5pX3VwZGF0ZV9jb3JlID09IDApICYmCi0JICAgICgoaWlwID09IE5VTEwpIHx8ICEoaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgJiBYRlNfSUxPR19BTEwpKSkgeworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7CiAJCUFTU0VSVCgoaWlwICE9IE5VTEwpID8KIAkJCSAhKGlpcC0+aWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSA6IDEpOwogCQl4ZnNfaWZ1bmxvY2soaXApOwpAQCAtMzA3NiwxMSArMzE1MiwyMSBAQAogCX0KIAogCS8qCi0JICogV2UgY2FuJ3QgZmx1c2ggdGhlIGlub2RlIHVudGlsIGl0IGlzIHVucGlubmVkLCBzbwotCSAqIHdhaXQgZm9yIGl0LiAgV2Uga25vdyBub29uZSBuZXcgY2FuIHBpbiBpdCwgYmVjYXVzZQotCSAqIHdlIGFyZSBob2xkaW5nIHRoZSBpbm9kZSBsb2NrIHNoYXJlZCBhbmQgeW91IG5lZWQKLQkgKiB0byBob2xkIGl0IGV4Y2x1c2l2ZWx5IHRvIHBpbiB0aGUgaW5vZGUuCisJICogV2UgY2FuJ3QgZmx1c2ggdGhlIGlub2RlIHVudGlsIGl0IGlzIHVucGlubmVkLCBzbyB3YWl0IGZvciBpdCBpZiB3ZQorCSAqIGFyZSBhbGxvd2VkIHRvIGJsb2NrLiAgV2Uga25vdyBub29uZSBuZXcgY2FuIHBpbiBpdCwgYmVjYXVzZSB3ZSBhcmUKKwkgKiBob2xkaW5nIHRoZSBpbm9kZSBsb2NrIHNoYXJlZCBhbmQgeW91IG5lZWQgdG8gaG9sZCBpdCBleGNsdXNpdmVseSB0bworCSAqIHBpbiB0aGUgaW5vZGUuCisJICoKKwkgKiBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYmxvY2ssIGZvcmNlIHRoZSBsb2cgb3V0IGFzeW5jaHJvbm91c2x5IHNvCisJICogdGhhdCB3aGVuIHdlIGNvbWUgYmFjayB0aGUgaW5vZGUgd2lsbCBiZSB1bnBpbm5lZC4gSWYgb3RoZXIgaW5vZGVzCisJICogaW4gdGhlIHNhbWUgY2x1c3RlciBhcmUgZGlydHksIHRoZXkgd2lsbCBwcm9iYWJseSB3cml0ZSB0aGUgaW5vZGUKKwkgKiBvdXQgZm9yIHVzIGlmIHRoZXkgb2NjdXIgYWZ0ZXIgdGhlIGxvZyBmb3JjZSBjb21wbGV0ZXMuCiAJICovCisJaWYgKG5vYmxvY2sgJiYgeGZzX2lwaW5jb3VudChpcCkpIHsKKwkJeGZzX2l1bnBpbl9ub3dhaXQoaXApOworCQl4ZnNfaWZ1bmxvY2soaXApOworCQlyZXR1cm4gRUFHQUlOOworCX0KIAl4ZnNfaXVucGluX3dhaXQoaXApOwogCiAJLyoKQEAgLTMwOTcsMTUgKzMxODMsNiBAQAogCX0KIAogCS8qCi0JICogR2V0IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgb24tZGlzayBpbm9kZS4KLQkgKi8KLQllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZicCwgMCwgMCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc19pZnVubG9jayhpcCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQkvKgogCSAqIERlY2lkZSBob3cgYnVmZmVyIHdpbGwgYmUgZmx1c2hlZCBvdXQuICBUaGlzIGlzIGRvbmUgYmVmb3JlCiAJICogdGhlIGNhbGwgdG8geGZzX2lmbHVzaF9pbnQgYmVjYXVzZSB0aGlzIGZpZWxkIGlzIHplcm9lZCBieSBpdC4KIAkgKi8KQEAgLTMxMjEsNiArMzE5OCw3IEBACiAJCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9TWU5DOgogCQkJZmxhZ3MgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLOgogCQljYXNlIFhGU19JRkxVU0hfQVNZTkM6CiAJCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQzoKIAkJCWZsYWdzID0gSU5UX0FTWU5DOwpAQCAtMzE0MCw2ICszMjE4LDcgQEAKIAkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSToKIAkJCWZsYWdzID0gSU5UX0RFTFdSSTsKIAkJCWJyZWFrOworCQljYXNlIFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSzoKIAkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DOgogCQkJZmxhZ3MgPSBJTlRfQVNZTkM7CiAJCQlicmVhazsKQEAgLTMxNTQsOTQgKzMyMzMsNDEgQEAKIAl9CiAKIAkvKgorCSAqIEdldCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG9uLWRpc2sgaW5vZGUuCisJICovCisJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLCAmZGlwLCAmYnAsIDAsIDAsCisJCQkJbm9ibG9jayA/IFhGU19CVUZfVFJZTE9DSyA6IFhGU19CVUZfTE9DSyk7CisJaWYgKGVycm9yIHx8ICFicCkgeworCQl4ZnNfaWZ1bmxvY2soaXApOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJLyoKIAkgKiBGaXJzdCBmbHVzaCBvdXQgdGhlIGlub2RlIHRoYXQgeGZzX2lmbHVzaCB3YXMgY2FsbGVkIHdpdGguCiAJICovCiAJZXJyb3IgPSB4ZnNfaWZsdXNoX2ludChpcCwgYnApOwotCWlmIChlcnJvcikgeworCWlmIChlcnJvcikKIAkJZ290byBjb3JydXB0X291dDsKLQl9CisKKwkvKgorCSAqIElmIHRoZSBidWZmZXIgaXMgcGlubmVkIHRoZW4gcHVzaCBvbiB0aGUgbG9nIG5vdyBzbyB3ZSB3b24ndAorCSAqIGdldCBzdHVjayB3YWl0aW5nIGluIHRoZSB3cml0ZSBmb3IgdG9vIGxvbmcuCisJICovCisJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQorCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UpOwogCiAJLyoKIAkgKiBpbm9kZSBjbHVzdGVyaW5nOgogCSAqIHNlZSBpZiBvdGhlciBpbm9kZXMgY2FuIGJlIGdhdGhlcmVkIGludG8gdGhpcyB3cml0ZQogCSAqLwotCXNwaW5fbG9jaygmaXAtPmlfY2x1c3Rlci0+aWNsX2xvY2spOwotCWlwLT5pX2NsdXN0ZXItPmljbF9idWYgPSBicDsKLQotCWNsY291bnQgPSAwOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGlxLCBlbnRyeSwgJmlwLT5pX2NsdXN0ZXItPmljbF9pbm9kZXMsIGlfY25vZGUpIHsKLQkJaWYgKGlxID09IGlwKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogRG8gYW4gdW4tcHJvdGVjdGVkIGNoZWNrIHRvIHNlZSBpZiB0aGUgaW5vZGUgaXMgZGlydHkgYW5kCi0JCSAqIGlzIGEgY2FuZGlkYXRlIGZvciBmbHVzaGluZy4gIFRoZXNlIGNoZWNrcyB3aWxsIGJlIHJlcGVhdGVkCi0JCSAqIGxhdGVyIGFmdGVyIHRoZSBhcHByb3ByaWF0ZSBsb2NrcyBhcmUgYWNxdWlyZWQuCi0JCSAqLwotCQlpaXAgPSBpcS0+aV9pdGVtcDsKLQkJaWYgKChpcS0+aV91cGRhdGVfY29yZSA9PSAwKSAmJgotCQkgICAgKChpaXAgPT0gTlVMTCkgfHwKLQkJICAgICAhKGlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzICYgWEZTX0lMT0dfQUxMKSkgJiYKLQkJICAgICAgeGZzX2lwaW5jb3VudChpcSkgPT0gMCkgewotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBUcnkgdG8gZ2V0IGxvY2tzLiAgSWYgYW55IGFyZSB1bmF2YWlsYWJsZSwKLQkJICogdGhlbiB0aGlzIGlub2RlIGNhbm5vdCBiZSBmbHVzaGVkIGFuZCBpcyBza2lwcGVkLgotCQkgKi8KLQotCQkvKiBnZXQgaW5vZGUgbG9ja3MgKGp1c3QgaV9sb2NrKSAqLwotCQlpZiAoeGZzX2lsb2NrX25vd2FpdChpcSwgWEZTX0lMT0NLX1NIQVJFRCkpIHsKLQkJCS8qIGdldCBpbm9kZSBmbHVzaCBsb2NrICovCi0JCQlpZiAoeGZzX2lmbG9ja19ub3dhaXQoaXEpKSB7Ci0JCQkJLyogY2hlY2sgaWYgcGlubmVkICovCi0JCQkJaWYgKHhmc19pcGluY291bnQoaXEpID09IDApIHsKLQkJCQkJLyogYXJyaXZpbmcgaGVyZSBtZWFucyB0aGF0Ci0JCQkJCSAqIHRoaXMgaW5vZGUgY2FuIGJlIGZsdXNoZWQuCi0JCQkJCSAqIGZpcnN0IHJlLWNoZWNrIHRoYXQgaXQncwotCQkJCQkgKiBkaXJ0eQotCQkJCQkgKi8KLQkJCQkJaWlwID0gaXEtPmlfaXRlbXA7Ci0JCQkJCWlmICgoaXEtPmlfdXBkYXRlX2NvcmUgIT0gMCl8fAotCQkJCQkgICAgKChpaXAgIT0gTlVMTCkgJiYKLQkJCQkJICAgICAoaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgJiBYRlNfSUxPR19BTEwpKSkgewotCQkJCQkJY2xjb3VudCsrOwotCQkJCQkJZXJyb3IgPSB4ZnNfaWZsdXNoX2ludChpcSwgYnApOwotCQkJCQkJaWYgKGVycm9yKSB7Ci0JCQkJCQkJeGZzX2l1bmxvY2soaXEsCi0JCQkJCQkJCSAgICBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJCQkJCQlnb3RvIGNsdXN0ZXJfY29ycnVwdF9vdXQ7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQl4ZnNfaWZ1bmxvY2soaXEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJeGZzX2lmdW5sb2NrKGlxKTsKLQkJCQl9Ci0JCQl9Ci0JCQl4ZnNfaXVubG9jayhpcSwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmlwLT5pX2NsdXN0ZXItPmljbF9sb2NrKTsKLQotCWlmIChjbGNvdW50KSB7Ci0JCVhGU19TVEFUU19JTkMoeHNfaWNsdXN0ZXJfZmx1c2hjbnQpOwotCQlYRlNfU1RBVFNfQUREKHhzX2ljbHVzdGVyX2ZsdXNoaW5vZGUsIGNsY291bnQpOwotCX0KLQotCS8qCi0JICogSWYgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgdGhlbiBwdXNoIG9uIHRoZSBsb2cgc28gd2Ugd29uJ3QKLQkgKiBnZXQgc3R1Y2sgd2FpdGluZyBpbiB0aGUgd3JpdGUgZm9yIHRvbyBsb25nLgotCSAqLwotCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSl7Ci0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7Ci0JfQorCWVycm9yID0geGZzX2lmbHVzaF9jbHVzdGVyKGlwLCBicCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGNsdXN0ZXJfY29ycnVwdF9vdXQ7CiAKIAlpZiAoZmxhZ3MgJiBJTlRfREVMV1JJKSB7CiAJCXhmc19iZHdyaXRlKG1wLCBicCk7CiAJfSBlbHNlIGlmIChmbGFncyAmIElOVF9BU1lOQykgewotCQl4ZnNfYmF3cml0ZShtcCwgYnApOworCQllcnJvciA9IHhmc19iYXdyaXRlKG1wLCBicCk7CiAJfSBlbHNlIHsKIAkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7CiAJfQpAQCAtMzI1MCw1MiArMzI3NiwxMSBAQAogY29ycnVwdF9vdXQ6CiAJeGZzX2J1Zl9yZWxzZShicCk7CiAJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9DT1JSVVBUX0lOQ09SRSk7Ci0JeGZzX2lmbHVzaF9hYm9ydChpcCk7Ci0JLyoKLQkgKiBVbmxvY2tzIHRoZSBmbHVzaCBsb2NrCi0JICovCi0JcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwotCiBjbHVzdGVyX2NvcnJ1cHRfb3V0OgotCS8qIENvcnJ1cHRpb24gZGV0ZWN0ZWQgaW4gdGhlIGNsdXN0ZXJpbmcgbG9vcC4gIEludmFsaWRhdGUgdGhlCi0JICogaW5vZGUgYnVmZmVyIGFuZCBzaHV0IGRvd24gdGhlIGZpbGVzeXN0ZW0uCi0JICovCi0Jc3Bpbl91bmxvY2soJmlwLT5pX2NsdXN0ZXItPmljbF9sb2NrKTsKLQotCS8qCi0JICogQ2xlYW4gdXAgdGhlIGJ1ZmZlci4gIElmIGl0IHdhcyBCX0RFTFdSSSwganVzdCByZWxlYXNlIGl0IC0tCi0JICogYnJlbHNlIGNhbiBoYW5kbGUgaXQgd2l0aCBubyBwcm9ibGVtcy4gIElmIG5vdCwgc2h1dCBkb3duIHRoZQotCSAqIGZpbGVzeXN0ZW0gYmVmb3JlIHJlbGVhc2luZyB0aGUgYnVmZmVyLgotCSAqLwotCWlmICgoYnVmd2FzZGVsd3JpPSBYRlNfQlVGX0lTREVMQVlXUklURShicCkpKSB7Ci0JCXhmc19idWZfcmVsc2UoYnApOwotCX0KLQotCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fQ09SUlVQVF9JTkNPUkUpOwotCi0JaWYoIWJ1Zndhc2RlbHdyaSkgIHsKLQkJLyoKLQkJICogSnVzdCBsaWtlIGluY29yZV9yZWxzZTogaWYgd2UgaGF2ZSBiX2lvZG9uZSBmdW5jdGlvbnMsCi0JCSAqIG1hcmsgdGhlIGJ1ZmZlciBhcyBhbiBlcnJvciBhbmQgY2FsbCB0aGVtLiAgT3RoZXJ3aXNlCi0JCSAqIG1hcmsgaXQgYXMgc3RhbGUgYW5kIGJyZWxzZS4KLQkJICovCi0JCWlmIChYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSkgewotCQkJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKLQkJCVhGU19CVUZfVU5ET05FKGJwKTsKLQkJCVhGU19CVUZfU1RBTEUoYnApOwotCQkJWEZTX0JVRl9TSFVUKGJwKTsKLQkJCVhGU19CVUZfRVJST1IoYnAsRUlPKTsKLQkJCXhmc19iaW9kb25lKGJwKTsKLQkJfSBlbHNlIHsKLQkJCVhGU19CVUZfU1RBTEUoYnApOwotCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCX0KLQl9Ci0KLQl4ZnNfaWZsdXNoX2Fib3J0KGlxKTsKIAkvKgogCSAqIFVubG9ja3MgdGhlIGZsdXNoIGxvY2sKIAkgKi8KKwl4ZnNfaWZsdXNoX2Fib3J0KGlwKTsKIAlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiB9CiAKQEAgLTMzMjUsOCArMzMxMCw3IEBACiAJICogSWYgdGhlIGlub2RlIGlzbid0IGRpcnR5LCB0aGVuIGp1c3QgcmVsZWFzZSB0aGUgaW5vZGUKIAkgKiBmbHVzaCBsb2NrIGFuZCBkbyBub3RoaW5nLgogCSAqLwotCWlmICgoaXAtPmlfdXBkYXRlX2NvcmUgPT0gMCkgJiYKLQkgICAgKChpaXAgPT0gTlVMTCkgfHwgIShpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAmIFhGU19JTE9HX0FMTCkpKSB7CisJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzQzNCw5ICszNDE4LDkgQEAKIAkgKiBoYXMgYmVlbiB1cGRhdGVkLCB0aGVuIG1ha2UgdGhlIGNvbnZlcnNpb24gcGVybWFuZW50LgogCSAqLwogCUFTU0VSVChpcC0+aV9kLmRpX3ZlcnNpb24gPT0gWEZTX0RJTk9ERV9WRVJTSU9OXzEgfHwKLQkgICAgICAgWEZTX1NCX1ZFUlNJT05fSEFTTkxJTksoJm1wLT5tX3NiKSk7CisJICAgICAgIHhmc19zYl92ZXJzaW9uX2hhc25saW5rKCZtcC0+bV9zYikpOwogCWlmIChpcC0+aV9kLmRpX3ZlcnNpb24gPT0gWEZTX0RJTk9ERV9WRVJTSU9OXzEpIHsKLQkJaWYgKCFYRlNfU0JfVkVSU0lPTl9IQVNOTElOSygmbXAtPm1fc2IpKSB7CisJCWlmICgheGZzX3NiX3ZlcnNpb25faGFzbmxpbmsoJm1wLT5tX3NiKSkgewogCQkJLyoKIAkJCSAqIENvbnZlcnQgaXQgYmFjay4KIAkJCSAqLwpAQCAtMzQ1OSwxNiArMzQ0Myw5IEBACiAJCX0KIAl9CiAKLQlpZiAoeGZzX2lmbHVzaF9mb3JrKGlwLCBkaXAsIGlpcCwgWEZTX0RBVEFfRk9SSywgYnApID09IEVGU0NPUlJVUFRFRCkgewotCQlnb3RvIGNvcnJ1cHRfb3V0OwotCX0KLQotCWlmIChYRlNfSUZPUktfUShpcCkpIHsKLQkJLyoKLQkJICogVGhlIG9ubHkgZXJyb3IgZnJvbSB4ZnNfaWZsdXNoX2ZvcmsgaXMgb24gdGhlIGRhdGEgZm9yay4KLQkJICovCi0JCSh2b2lkKSB4ZnNfaWZsdXNoX2ZvcmsoaXAsIGRpcCwgaWlwLCBYRlNfQVRUUl9GT1JLLCBicCk7Ci0JfQorCXhmc19pZmx1c2hfZm9yayhpcCwgZGlwLCBpaXAsIFhGU19EQVRBX0ZPUkssIGJwKTsKKwlpZiAoWEZTX0lGT1JLX1EoaXApKQorCQl4ZnNfaWZsdXNoX2ZvcmsoaXAsIGRpcCwgaWlwLCBYRlNfQVRUUl9GT1JLLCBicCk7CiAJeGZzX2lub2JwX2NoZWNrKG1wLCBicCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGJmY2Q3MmMuLjkzYzM3NjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTEzMywxOSArMTMzLDYgQEAKIH0gZG1fYXR0cnNfdDsKIAogLyoKLSAqIFRoaXMgaXMgdGhlIHhmcyBpbm9kZSBjbHVzdGVyIHN0cnVjdHVyZS4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkKLSAqIHhmc19pZmx1c2ggdG8gZmluZCBpbm9kZXMgdGhhdCBzaGFyZSBhIGNsdXN0ZXIgYW5kIGNhbiBiZSBmbHVzaGVkIHRvIGRpc2sgYXQKLSAqIHRoZSBzYW1lIHRpbWUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHhmc19pY2x1c3RlciB7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJaWNsX2lub2RlczsJLyogbGlzdCBvZiBpbm9kZXMgb24gY2x1c3RlciAqLwotCXhmc19kYWRkcl90CQlpY2xfYmxrbm87CS8qIHN0YXJ0aW5nIGJsb2NrIG51bWJlciBvZgotCQkJCQkJICogdGhlIGNsdXN0ZXIgKi8KLQlzdHJ1Y3QgeGZzX2J1ZgkJKmljbF9idWY7CS8qIHRoZSBpbm9kZSBidWZmZXIgKi8KLQlzcGlubG9ja190CQlpY2xfbG9jazsJLyogaW5vZGUgbGlzdCBsb2NrICovCi19IHhmc19pY2x1c3Rlcl90OwotCi0vKgogICogVGhpcyBpcyB0aGUgeGZzIGluLWNvcmUgaW5vZGUgc3RydWN0dXJlLgogICogTW9zdCBvZiB0aGUgb24tZGlzayBpbm9kZSBpcyBlbWJlZGRlZCBpbiB0aGUgaV9kIGZpZWxkLgogICoKQEAgLTI0MCwxMCArMjI3LDYgQEAKIAlhdG9taWNfdAkJaV9waW5jb3VudDsJLyogaW5vZGUgcGluIGNvdW50ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJaV9pcGluX3dhaXQ7CS8qIGlub2RlIHBpbm5pbmcgd2FpdCBxdWV1ZSAqLwogCXNwaW5sb2NrX3QJCWlfZmxhZ3NfbG9jazsJLyogaW5vZGUgaV9mbGFncyBsb2NrICovCi0jaWZkZWYgSEFWRV9SRUZDQUNIRQotCXN0cnVjdCB4ZnNfaW5vZGUJKippX3JlZmNhY2hlOwkvKiBwdHIgdG8gZW50cnkgaW4gcmVmIGNhY2hlICovCi0Jc3RydWN0IHhmc19pbm9kZQkqaV9yZWxlYXNlOwkvKiBpbm9kZSB0byB1bnJlZiAqLwotI2VuZGlmCiAJLyogTWlzY2VsbGFuZW91cyBzdGF0ZS4gKi8KIAl1bnNpZ25lZCBzaG9ydAkJaV9mbGFnczsJLyogc2VlIGRlZmluZWQgZmxhZ3MgYmVsb3cgKi8KIAl1bnNpZ25lZCBjaGFyCQlpX3VwZGF0ZV9jb3JlOwkvKiB0aW1lc3RhbXBzL3NpemUgaXMgZGlydHkgKi8KQEAgLTI1Miw4ICsyMzUsNiBAQAogCXVuc2lnbmVkIGludAkJaV9kZWxheWVkX2Jsa3M7CS8qIGNvdW50IG9mIGRlbGF5IGFsbG9jIGJsa3MgKi8KIAogCXhmc19pY2Rpbm9kZV90CQlpX2Q7CQkvKiBtb3N0IG9mIG9uZGlzayBpbm9kZSAqLwotCXhmc19pY2x1c3Rlcl90CQkqaV9jbHVzdGVyOwkvKiBjbHVzdGVyIGxpc3QgaGVhZGVyICovCi0Jc3RydWN0IGhsaXN0X25vZGUJaV9jbm9kZTsJLyogY2x1c3RlciBsaW5rIG5vZGUgKi8KIAogCXhmc19mc2l6ZV90CQlpX3NpemU7CQkvKiBpbi1tZW1vcnkgc2l6ZSAqLwogCXhmc19mc2l6ZV90CQlpX25ld19zaXplOwkvKiBzaXplIHdoZW4gd3JpdGUgY29tcGxldGVzICovCkBAIC00NjEsNiArNDQyLDcgQEAKICNkZWZpbmUJWEZTX0lGTFVTSF9TWU5DCQkJMwogI2RlZmluZQlYRlNfSUZMVVNIX0FTWU5DCQk0CiAjZGVmaW5lCVhGU19JRkxVU0hfREVMV1JJCQk1CisjZGVmaW5lCVhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSwk2CiAKIC8qCiAgKiBGbGFncyBmb3IgeGZzX2l0cnVuY2F0ZV9zdGFydCgpLgpAQCAtNTE1LDcgKzQ5Nyw3IEBACiAgKi8KIGludAkJeGZzX2l0b2JwKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc190cmFucyAqLAogCQkJICB4ZnNfaW5vZGVfdCAqLCBzdHJ1Y3QgeGZzX2Rpbm9kZSAqKiwgc3RydWN0IHhmc19idWYgKiosCi0JCQkgIHhmc19kYWRkcl90LCB1aW50KTsKKwkJCSAgeGZzX2RhZGRyX3QsIHVpbnQsIHVpbnQpOwogaW50CQl4ZnNfaXJlYWQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX3RyYW5zICosIHhmc19pbm9fdCwKIAkJCSAgeGZzX2lub2RlX3QgKiosIHhmc19kYWRkcl90LCB1aW50KTsKIGludAkJeGZzX2lyZWFkX2V4dGVudHMoc3RydWN0IHhmc190cmFucyAqLCB4ZnNfaW5vZGVfdCAqLCBpbnQpOwpAQCAtNTk3LDcgKzU3OSw2IEBACiAjZGVmaW5lCXhmc19pbm9icF9jaGVjayhtcCwgYnApCiAjZW5kaWYgLyogREVCVUcgKi8KIAotZXh0ZXJuIHN0cnVjdCBrbWVtX3pvbmUJKnhmc19pY2x1c3Rlcl96b25lOwogZXh0ZXJuIHN0cnVjdCBrbWVtX3pvbmUJKnhmc19pZm9ya196b25lOwogZXh0ZXJuIHN0cnVjdCBrbWVtX3pvbmUJKnhmc19pbm9kZV96b25lOwogZXh0ZXJuIHN0cnVjdCBrbWVtX3pvbmUJKnhmc19pbGlfem9uZTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKaW5kZXggMDM0Y2E3Mi4uOTNiNWRiNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCisjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAKIAoga21lbV96b25lX3QJKnhmc19pbGlfem9uZTsJCS8qIGlub2RlIGxvZyBpdGVtIHpvbmUgKi8KQEAgLTI5Niw5ICsyOTcsOSBAQAogCSAqLwogCW1wID0gaXAtPmlfbW91bnQ7CiAJQVNTRVJUKGlwLT5pX2QuZGlfdmVyc2lvbiA9PSBYRlNfRElOT0RFX1ZFUlNJT05fMSB8fAotCSAgICAgICBYRlNfU0JfVkVSU0lPTl9IQVNOTElOSygmbXAtPm1fc2IpKTsKKwkgICAgICAgeGZzX3NiX3ZlcnNpb25faGFzbmxpbmsoJm1wLT5tX3NiKSk7CiAJaWYgKGlwLT5pX2QuZGlfdmVyc2lvbiA9PSBYRlNfRElOT0RFX1ZFUlNJT05fMSkgewotCQlpZiAoIVhGU19TQl9WRVJTSU9OX0hBU05MSU5LKCZtcC0+bV9zYikpIHsKKwkJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNubGluaygmbXAtPm1fc2IpKSB7CiAJCQkvKgogCQkJICogQ29udmVydCBpdCBiYWNrLgogCQkJICovCkBAIC04MTMsNyArODE0LDEyIEBACiAJCQkJCSAgICAgIFhGU19MT0dfRk9SQ0UpOwogCQkJfQogCQkJaWYgKGRvcHVzaCkgewotCQkJCXhmc19iYXdyaXRlKG1wLCBicCk7CisJCQkJaW50CWVycm9yOworCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKKwkJCQlpZiAoZXJyb3IpCisJCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAorCQkieGZzX2lub2RlX2l0ZW1fcHVzaGJ1ZjogcHVzaGJ1ZiBlcnJvciAlZCBvbiBpaXAgJXAsIGJwICVwIiwKKwkJCQkJCQllcnJvciwgaWlwLCBicCk7CiAJCQl9IGVsc2UgewogCQkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmggYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaAppbmRleCBiZmU5MmVhLi40MDUxMzA3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaAorKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaApAQCAtMTY4LDYgKzE2OCwxNCBAQAogCXJldHVybiAodyA9PSBYRlNfREFUQV9GT1JLID8gWEZTX0lMT0dfREVYVCA6IFhGU19JTE9HX0FFWFQpOwogfQogCitzdGF0aWMgaW5saW5lIGludCB4ZnNfaW5vZGVfY2xlYW4oeGZzX2lub2RlX3QgKmlwKQoreworCXJldHVybiAoIWlwLT5pX2l0ZW1wIHx8CisJCSEoaXAtPmlfaXRlbXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAmIFhGU19JTE9HX0FMTCkpICYmCisJICAgICAgICFpcC0+aV91cGRhdGVfY29yZTsKK30KKworCiAjaWZkZWYgX19LRVJORUxfXwogCiBleHRlcm4gdm9pZCB4ZnNfaW5vZGVfaXRlbV9pbml0KHN0cnVjdCB4ZnNfaW5vZGUgKiwgc3RydWN0IHhmc19tb3VudCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuYyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwppbmRleCBmZGUzN2Y4Li5mYjNjZjExIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvbWFwLmMKKysrIGIvZnMveGZzL3hmc19pb21hcC5jCkBAIC04MDIsOCArODAyLDExIEBACiAJCQkgKi8KIAkJCW5pbWFwcyA9IDE7CiAJCQllbmRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBpcC0+aV9zaXplKTsKLQkJCXhmc19ibWFwX2xhc3Rfb2Zmc2V0KE5VTEwsIGlwLCAmbGFzdF9ibG9jaywKLQkJCQlYRlNfREFUQV9GT1JLKTsKKwkJCWVycm9yID0geGZzX2JtYXBfbGFzdF9vZmZzZXQoTlVMTCwgaXAsICZsYXN0X2Jsb2NrLAorCQkJCQkJCVhGU19EQVRBX0ZPUkspOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gdHJhbnNfY2FuY2VsOworCiAJCQlsYXN0X2Jsb2NrID0gWEZTX0ZJTEVPRkZfTUFYKGxhc3RfYmxvY2ssIGVuZF9mc2IpOwogCQkJaWYgKChtYXBfc3RhcnRfZnNiICsgY291bnRfZnNiKSA+IGxhc3RfYmxvY2spIHsKIAkJCQljb3VudF9mc2IgPSBsYXN0X2Jsb2NrIC0gbWFwX3N0YXJ0X2ZzYjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IDY1OGFhYjYuLmViODViZGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtNDUsNyArNDUsNyBAQAogCXhmc19pbm9fdAlpbm8pCiB7CiAJcmV0dXJuIChpbm8gPT0gbXAtPm1fc2Iuc2JfcmJtaW5vIHx8IGlubyA9PSBtcC0+bV9zYi5zYl9yc3VtaW5vIHx8Ci0JCShYRlNfU0JfVkVSU0lPTl9IQVNRVU9UQSgmbXAtPm1fc2IpICYmCisJCSh4ZnNfc2JfdmVyc2lvbl9oYXNxdW90YSgmbXAtPm1fc2IpICYmCiAJCSAoaW5vID09IG1wLT5tX3NiLnNiX3VxdW90aW5vIHx8IGlubyA9PSBtcC0+bV9zYi5zYl9ncXVvdGlubykpKTsKIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1TVEFUSUMgaW50CitTVEFUSUMgdm9pZAogeGZzX2J1bGtzdGF0X29uZV9kaW5vZGUoCiAJeGZzX21vdW50X3QJKm1wLAkJLyogbW91bnQgcG9pbnQgZm9yIGZpbGVzeXN0ZW0gKi8KIAl4ZnNfaW5vX3QJaW5vLAkJLyogaW5vZGUgbnVtYmVyIHRvIGdldCBkYXRhIGZvciAqLwpAQCAtMTk4LDggKzE5OCw2IEBACiAJCWJ1Zi0+YnNfYmxvY2tzID0gYmU2NF90b19jcHUoZGljLT5kaV9uYmxvY2tzKTsKIAkJYnJlYWs7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTYxNCw3ICs2MTIsOCBAQAogCQkJCQkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJCQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLAogCQkJCQkJCQkmZGlwLCAmYnAsIGJubywKLQkJCQkJCQkJWEZTX0lNQVBfQlVMS1NUQVQpOworCQkJCQkJCQlYRlNfSU1BUF9CVUxLU1RBVCwKKwkJCQkJCQkJWEZTX0JVRl9MT0NLKTsKIAkJCQkJCWlmICghZXJyb3IpCiAJCQkJCQkJY2x1c3RpZHggPSBpcC0+aV9ib2Zmc2V0IC8gbXAtPm1fc2Iuc2JfaW5vZGVzaXplOwogCQkJCQkJa21lbV96b25lX2ZyZWUoeGZzX2lub2RlX3pvbmUsIGlwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IGE3NWVkY2EuLmFmYWVlMzAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmMKKysrIGIvZnMveGZzL3hmc19sb2cuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgInhmc19pbm9kZS5oIgogI2luY2x1ZGUgInhmc19ydy5oIgogCitrbWVtX3pvbmVfdAkqeGZzX2xvZ190aWNrZXRfem9uZTsKIAogI2RlZmluZSB4bG9nX3dyaXRlX2Fkdl9jbnQocHRyLCBsZW4sIG9mZiwgYnl0ZXMpIFwKIAl7IChwdHIpICs9IChieXRlcyk7IFwKQEAgLTczLDggKzc0LDYgQEAKIAkJCQkgICAgICAgeGxvZ190aWNrZXRfdAkqdGlja2V0LAogCQkJCSAgICAgICBpbnQJCSpjb250aW51ZWRfd3JpdGUsCiAJCQkJICAgICAgIGludAkJKmxvZ29mZnNldHApOwotU1RBVElDIHZvaWQgeGxvZ19zdGF0ZV9wdXRfdGlja2V0KHhsb2dfdAkqbG9nLAotCQkJCSAgeGxvZ190aWNrZXRfdCAqdGljKTsKIFNUQVRJQyBpbnQgIHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyh4bG9nX3QJCSpsb2csCiAJCQkJICAgICB4bG9nX2luX2NvcmVfdAkqaWNsb2cpOwogU1RBVElDIHZvaWQgeGxvZ19zdGF0ZV9zd2l0Y2hfaWNsb2dzKHhsb2dfdAkJKmxvZywKQEAgLTEwMSw3ICsxMDAsNiBAQAogCiAKIC8qIGxvY2FsIHRpY2tldCBmdW5jdGlvbnMgKi8KLVNUQVRJQyB2b2lkCQl4bG9nX3N0YXRlX3RpY2tldF9hbGxvYyh4bG9nX3QgKmxvZyk7CiBTVEFUSUMgeGxvZ190aWNrZXRfdAkqeGxvZ190aWNrZXRfZ2V0KHhsb2dfdCAqbG9nLAogCQkJCQkgaW50CXVuaXRfYnl0ZXMsCiAJCQkJCSBpbnQJY291bnQsCkBAIC0zMzAsNyArMzI4LDcgQEAKIAkJICovCiAJCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCB0aWNrZXQsICJ4ZnNfbG9nX2RvbmU6IChub24tcGVybWFuZW50KSIpOwogCQl4bG9nX3VuZ3JhbnRfbG9nX3NwYWNlKGxvZywgdGlja2V0KTsKLQkJeGxvZ19zdGF0ZV9wdXRfdGlja2V0KGxvZywgdGlja2V0KTsKKwkJeGxvZ190aWNrZXRfcHV0KGxvZywgdGlja2V0KTsKIAl9IGVsc2UgewogCQl4bG9nX3RyYWNlX2xvZ2dyYW50KGxvZywgdGlja2V0LCAieGZzX2xvZ19kb25lOiAocGVybWFuZW50KSIpOwogCQl4bG9nX3JlZ3JhbnRfcmVzZXJ2ZV9sb2dfc3BhY2UobG9nLCB0aWNrZXQpOwpAQCAtMzg0LDcgKzM4MiwyNyBAQAogCQlyZXR1cm4geGxvZ19zdGF0ZV9zeW5jX2FsbChsb2csIGZsYWdzLCBsb2dfZmx1c2hlZCk7CiAJZWxzZQogCQlyZXR1cm4geGxvZ19zdGF0ZV9zeW5jKGxvZywgbHNuLCBmbGFncywgbG9nX2ZsdXNoZWQpOwotfQkvKiB4ZnNfbG9nX2ZvcmNlICovCit9CS8qIF94ZnNfbG9nX2ZvcmNlICovCisKKy8qCisgKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZSgpLCB0byBiZSB1c2VkIHdoZW4gY2FsbGVyIGRvZXNuJ3QgY2FyZQorICogYWJvdXQgZXJyb3JzIG9yIHdoZXRoZXIgdGhlIGxvZyB3YXMgZmx1c2hlZCBvciBub3QuIFRoaXMgaXMgdGhlIG5vcm1hbAorICogaW50ZXJmYWNlIHRvIHVzZSB3aGVuIHRyeWluZyB0byB1bnBpbiBpdGVtcyBvciBtb3ZlIHRoZSBsb2cgZm9yd2FyZC4KKyAqLwordm9pZAoreGZzX2xvZ19mb3JjZSgKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX2xzbl90CWxzbiwKKwl1aW50CQlmbGFncykKK3sKKwlpbnQJZXJyb3I7CisJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgbHNuLCBmbGFncywgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLCAieGZzX2xvZ19mb3JjZTogIgorCQkJImVycm9yICVkIHJldHVybmVkLiIsIGVycm9yKTsKKwl9Cit9CisKIAogLyoKICAqIEF0dGFjaGVzIGEgbmV3IGljbG9nIEkvTyBjb21wbGV0aW9uIGNhbGxiYWNrIHJvdXRpbmUgZHVyaW5nCkBAIC0zOTcsMTIgKzQxNSwxMCBAQAogCSAgICAgICB2b2lkCQkgICppY2xvZ19obmRsLAkvKiBpY2xvZyB0byBoYW5nIGNhbGxiYWNrIG9mZiAqLwogCSAgICAgICB4ZnNfbG9nX2NhbGxiYWNrX3QgKmNiKQogewotCXhsb2dfdCAqbG9nID0gbXAtPm1fbG9nOwogCXhsb2dfaW5fY29yZV90CSAgKmljbG9nID0gKHhsb2dfaW5fY29yZV90ICopaWNsb2dfaG5kbDsKIAlpbnQJYWJvcnRmbGc7CiAKLQljYi0+Y2JfbmV4dCA9IE5VTEw7Ci0Jc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwlzcGluX2xvY2soJmljbG9nLT5pY19jYWxsYmFja19sb2NrKTsKIAlhYm9ydGZsZyA9IChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpOwogCWlmICghYWJvcnRmbGcpIHsKIAkJQVNTRVJUX0FMV0FZUygoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfQUNUSVZFKSB8fApAQCAtNDExLDcgKzQyNyw3IEBACiAJCSooaWNsb2ctPmljX2NhbGxiYWNrX3RhaWwpID0gY2I7CiAJCWljbG9nLT5pY19jYWxsYmFja190YWlsID0gJihjYi0+Y2JfbmV4dCk7CiAJfQotCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwlzcGluX3VubG9jaygmaWNsb2ctPmljX2NhbGxiYWNrX2xvY2spOwogCXJldHVybiBhYm9ydGZsZzsKIH0JLyogeGZzX2xvZ19ub3RpZnkgKi8KIApAQCAtNDcxLDYgKzQ4Nyw4IEBACiAJCS8qIG1heSBzbGVlcCBpZiBuZWVkIHRvIGFsbG9jYXRlIG1vcmUgdGlja2V0cyAqLwogCQlpbnRlcm5hbF90aWNrZXQgPSB4bG9nX3RpY2tldF9nZXQobG9nLCB1bml0X2J5dGVzLCBjbnQsCiAJCQkJCQkgIGNsaWVudCwgZmxhZ3MpOworCQlpZiAoIWludGVybmFsX3RpY2tldCkKKwkJCXJldHVybiBYRlNfRVJST1IoRU5PTUVNKTsKIAkJaW50ZXJuYWxfdGlja2V0LT50X3RyYW5zX3R5cGUgPSB0X3R5cGU7CiAJCSp0aWNrZXQgPSBpbnRlcm5hbF90aWNrZXQ7CiAJCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCBpbnRlcm5hbF90aWNrZXQsIApAQCAtNjM2LDcgKzY1NCw4IEBACiAJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKIAkJcmV0dXJuIDA7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAwLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQyk7CisJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgMCwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMsIE5VTEwpOworCUFTU0VSVChlcnJvciB8fCAhKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpKTsKIAogI2lmZGVmIERFQlVHCiAJZmlyc3RfaWNsb2cgPSBpY2xvZyA9IGxvZy0+bF9pY2xvZzsKQEAgLTY3NSwxMCArNjk0LDEwIEBACiAKIAkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJaWNsb2cgPSBsb2ctPmxfaWNsb2c7Ci0JCWljbG9nLT5pY19yZWZjbnQrKzsKKwkJYXRvbWljX2luYygmaWNsb2ctPmljX3JlZmNudCk7CiAJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJeGxvZ19zdGF0ZV93YW50X3N5bmMobG9nLCBpY2xvZyk7Ci0JCSh2b2lkKSB4bG9nX3N0YXRlX3JlbGVhc2VfaWNsb2cobG9nLCBpY2xvZyk7CisJCWVycm9yID0geGxvZ19zdGF0ZV9yZWxlYXNlX2ljbG9nKGxvZywgaWNsb2cpOwogCiAJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCWlmICghKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0FDVElWRSB8fApAQCAtNjk1LDcgKzcxNCw3IEBACiAJCWlmICh0aWMpIHsKIAkJCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCB0aWMsICJ1bm1vdW50IHJlYyIpOwogCQkJeGxvZ191bmdyYW50X2xvZ19zcGFjZShsb2csIHRpYyk7Ci0JCQl4bG9nX3N0YXRlX3B1dF90aWNrZXQobG9nLCB0aWMpOworCQkJeGxvZ190aWNrZXRfcHV0KGxvZywgdGljKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC03MTMsMTEgKzczMiwxMSBAQAogCQkgKi8KIAkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJaWNsb2cgPSBsb2ctPmxfaWNsb2c7Ci0JCWljbG9nLT5pY19yZWZjbnQrKzsKKwkJYXRvbWljX2luYygmaWNsb2ctPmljX3JlZmNudCk7CiAJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAogCQl4bG9nX3N0YXRlX3dhbnRfc3luYyhsb2csIGljbG9nKTsKLQkJKHZvaWQpIHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKTsKKwkJZXJyb3IgPSAgeGxvZ19zdGF0ZV9yZWxlYXNlX2ljbG9nKGxvZywgaWNsb2cpOwogCiAJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAKQEAgLTczMiw3ICs3NTEsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycm9yOwogfQkvKiB4ZnNfbG9nX3VubW91bnRfd3JpdGUgKi8KIAogLyoKQEAgLTEwOTAsNyArMTEwOSw3IEBACiAJCQlzaXplID4+PSAxOwogCQl9CiAKLQkJaWYgKFhGU19TQl9WRVJTSU9OX0hBU0xPR1YyKCZtcC0+bV9zYikpIHsKKwkJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2xvZ3YyKCZtcC0+bV9zYikpIHsKIAkJCS8qICMgaGVhZGVycyA9IHNpemUgLyAzMksKIAkJCSAqIG9uZSBoZWFkZXIgaG9sZHMgY3ljbGVzIGZyb20gMzJLIG9mIGRhdGEKIAkJCSAqLwpAQCAtMTE4NiwxMyArMTIwNSwxMyBAQAogCWxvZy0+bF9ncmFudF9yZXNlcnZlX2N5Y2xlID0gMTsKIAlsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGUgPSAxOwogCi0JaWYgKFhGU19TQl9WRVJTSU9OX0hBU1NFQ1RPUigmbXAtPm1fc2IpKSB7CisJaWYgKHhmc19zYl92ZXJzaW9uX2hhc3NlY3RvcigmbXAtPm1fc2IpKSB7CiAJCWxvZy0+bF9zZWN0YmJfbG9nID0gbXAtPm1fc2Iuc2JfbG9nc2VjdGxvZyAtIEJCU0hJRlQ7CiAJCUFTU0VSVChsb2ctPmxfc2VjdGJiX2xvZyA8PSBtcC0+bV9zZWN0YmJfbG9nKTsKIAkJLyogZm9yIGxhcmdlciBzZWN0b3Igc2l6ZXMsIG11c3QgaGF2ZSB2MiBvciBleHRlcm5hbCBsb2cgKi8KIAkJQVNTRVJUKGxvZy0+bF9zZWN0YmJfbG9nID09IDAgfHwKIAkJCWxvZy0+bF9sb2dCQnN0YXJ0ID09IDAgfHwKLQkJCVhGU19TQl9WRVJTSU9OX0hBU0xPR1YyKCZtcC0+bV9zYikpOworCQkJeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoJm1wLT5tX3NiKSk7CiAJCUFTU0VSVChtcC0+bV9zYi5zYl9sb2dzZWN0bG9nID49IEJCU0hJRlQpOwogCX0KIAlsb2ctPmxfc2VjdGJiX21hc2sgPSAoMSA8PCBsb2ctPmxfc2VjdGJiX2xvZykgLSAxOwpAQCAtMTIxMCw3ICsxMjI5LDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmbG9nLT5sX2ljbG9nbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmxvZy0+bF9ncmFudF9sb2NrKTsKIAlpbml0bnNlbWEoJmxvZy0+bF9mbHVzaHNlbWEsIDAsICJpYy1mbHVzaCIpOwotCXhsb2dfc3RhdGVfdGlja2V0X2FsbG9jKGxvZyk7ICAvKiB3YWl0IHVudGlsIGFmdGVyIGljbG9nbG9jayBpbml0ZWQgKi8KIAogCS8qIGxvZyByZWNvcmQgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIEJCU0laRTsgc2VlIHhsb2dfcmVjX2hlYWRlcl90ICovCiAJQVNTRVJUKChYRlNfQlVGX1NJWkUoYnApICYgQkJNQVNLKSA9PSAwKTsKQEAgLTEyNDAsMjMgKzEyNTgsMjQgQEAKIAkJWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgKHVuc2lnbmVkIGxvbmcpMSk7CiAJCWljbG9nLT5pY19icCA9IGJwOwogCQlpY2xvZy0+aGljX2RhdGEgPSBicC0+Yl9hZGRyOwotCisjaWZkZWYgREVCVUcKIAkJbG9nLT5sX2ljbG9nX2Jha1tpXSA9ICh4ZnNfY2FkZHJfdCkmKGljbG9nLT5pY19oZWFkZXIpOwotCisjZW5kaWYKIAkJaGVhZCA9ICZpY2xvZy0+aWNfaGVhZGVyOwogCQltZW1zZXQoaGVhZCwgMCwgc2l6ZW9mKHhsb2dfcmVjX2hlYWRlcl90KSk7CiAJCWhlYWQtPmhfbWFnaWNubyA9IGNwdV90b19iZTMyKFhMT0dfSEVBREVSX01BR0lDX05VTSk7CiAJCWhlYWQtPmhfdmVyc2lvbiA9IGNwdV90b19iZTMyKAotCQkJWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikgPyAyIDogMSk7CisJCQl4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKSA/IDIgOiAxKTsKIAkJaGVhZC0+aF9zaXplID0gY3B1X3RvX2JlMzIobG9nLT5sX2ljbG9nX3NpemUpOwogCQkvKiBuZXcgZmllbGRzICovCiAJCWhlYWQtPmhfZm10ID0gY3B1X3RvX2JlMzIoWExPR19GTVQpOwogCQltZW1jcHkoJmhlYWQtPmhfZnNfdXVpZCwgJm1wLT5tX3NiLnNiX3V1aWQsIHNpemVvZih1dWlkX3QpKTsKIAotCiAJCWljbG9nLT5pY19zaXplID0gWEZTX0JVRl9TSVpFKGJwKSAtIGxvZy0+bF9pY2xvZ19oc2l6ZTsKIAkJaWNsb2ctPmljX3N0YXRlID0gWExPR19TVEFURV9BQ1RJVkU7CiAJCWljbG9nLT5pY19sb2cgPSBsb2c7CisJCWF0b21pY19zZXQoJmljbG9nLT5pY19yZWZjbnQsIDApOworCQlzcGluX2xvY2tfaW5pdCgmaWNsb2ctPmljX2NhbGxiYWNrX2xvY2spOwogCQlpY2xvZy0+aWNfY2FsbGJhY2tfdGFpbCA9ICYoaWNsb2ctPmljX2NhbGxiYWNrKTsKIAkJaWNsb2ctPmljX2RhdGFwID0gKGNoYXIgKilpY2xvZy0+aGljX2RhdGEgKyBsb2ctPmxfaWNsb2dfaHNpemU7CiAKQEAgLTE0MDIsMTAgKzE0MjEsMTAgQEAKIAlpbnQJCXJvdW5kb2ZmOyAgICAgICAvKiByb3VuZG9mZiB0byBCQiBvciBzdHJpcGUgKi8KIAlpbnQJCXNwbGl0ID0gMDsJLyogc3BsaXQgd3JpdGUgaW50byB0d28gcmVnaW9ucyAqLwogCWludAkJZXJyb3I7Ci0JaW50CQl2MiA9IFhGU19TQl9WRVJTSU9OX0hBU0xPR1YyKCZsb2ctPmxfbXAtPm1fc2IpOworCWludAkJdjIgPSB4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKTsKIAogCVhGU19TVEFUU19JTkMoeHNfbG9nX3dyaXRlcyk7Ci0JQVNTRVJUKGljbG9nLT5pY19yZWZjbnQgPT0gMCk7CisJQVNTRVJUKGF0b21pY19yZWFkKCZpY2xvZy0+aWNfcmVmY250KSA9PSAwKTsKIAogCS8qIEFkZCBmb3IgTFIgaGVhZGVyICovCiAJY291bnRfaW5pdCA9IGxvZy0+bF9pY2xvZ19oc2l6ZSArIGljbG9nLT5pY19vZmZzZXQ7CkBAIC0xNTM4LDcgKzE1NTcsNiBAQAogeGxvZ19kZWFsbG9jX2xvZyh4bG9nX3QgKmxvZykKIHsKIAl4bG9nX2luX2NvcmVfdAkqaWNsb2csICpuZXh0X2ljbG9nOwotCXhsb2dfdGlja2V0X3QJKnRpYywgKm5leHRfdGljOwogCWludAkJaTsKIAogCWljbG9nID0gbG9nLT5sX2ljbG9nOwpAQCAtMTU1OSwyMiArMTU3Nyw2IEBACiAJc3BpbmxvY2tfZGVzdHJveSgmbG9nLT5sX2ljbG9nbG9jayk7CiAJc3BpbmxvY2tfZGVzdHJveSgmbG9nLT5sX2dyYW50X2xvY2spOwogCi0JLyogWFhYc3VwIHRha2UgYSBsb29rIGF0IHRoaXMgYWdhaW4uICovCi0JaWYgKChsb2ctPmxfdGlja2V0X2NudCAhPSBsb2ctPmxfdGlja2V0X3RjbnQpICAmJgotCSAgICAhWExPR19GT1JDRURfU0hVVERPV04obG9nKSkgewotCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBsb2ctPmxfbXAsCi0JCQkieGxvZ19kZWFsbG9jX2xvZzogKGNudDogJWQsIHRvdGFsOiAlZCkiLAotCQkJbG9nLT5sX3RpY2tldF9jbnQsIGxvZy0+bF90aWNrZXRfdGNudCk7Ci0JCS8qIEFTU0VSVChsb2ctPmxfdGlja2V0X2NudCA9PSBsb2ctPmxfdGlja2V0X3RjbnQpOyAqLwotCi0JfSBlbHNlIHsKLQkJdGljID0gbG9nLT5sX3VubW91bnRfZnJlZTsKLQkJd2hpbGUgKHRpYykgewotCQkJbmV4dF90aWMgPSB0aWMtPnRfbmV4dDsKLQkJCWttZW1fZnJlZSh0aWMsIFBBR0VfU0laRSk7Ci0JCQl0aWMgPSBuZXh0X3RpYzsKLQkJfQotCX0KIAl4ZnNfYnVmX2ZyZWUobG9nLT5sX3hidWYpOwogI2lmZGVmIFhGU19MT0dfVFJBQ0UKIAlpZiAobG9nLT5sX3RyYWNlICE9IE5VTEwpIHsKQEAgLTE5ODcsNyArMTk4OSw3IEBACiAJCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9ESVJUWSkgewogCQkJaWNsb2ctPmljX3N0YXRlCT0gWExPR19TVEFURV9BQ1RJVkU7CiAJCQlpY2xvZy0+aWNfb2Zmc2V0ICAgICAgID0gMDsKLQkJCWljbG9nLT5pY19jYWxsYmFjawk9IE5VTEw7ICAgLyogZG9uJ3QgbmVlZCB0byBmcmVlICovCisJCQlBU1NFUlQoaWNsb2ctPmljX2NhbGxiYWNrID09IE5VTEwpOwogCQkJLyoKIAkJCSAqIElmIHRoZSBudW1iZXIgb2Ygb3BzIGluIHRoaXMgaWNsb2cgaW5kaWNhdGUgaXQganVzdAogCQkJICogY29udGFpbnMgdGhlIGR1bW15IHRyYW5zYWN0aW9uLCB3ZSBjYW4KQEAgLTIxOTAsMzcgKzIxOTIsNDAgQEAKIAkJCQkJYmU2NF90b19jcHUoaWNsb2ctPmljX2hlYWRlci5oX2xzbik7CiAJCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAotCQkJCS8qCi0JCQkJICogS2VlcCBwcm9jZXNzaW5nIGVudHJpZXMgaW4gdGhlIGNhbGxiYWNrIGxpc3QKLQkJCQkgKiB1bnRpbCB3ZSBjb21lIGFyb3VuZCBhbmQgaXQgaXMgZW1wdHkuICBXZQotCQkJCSAqIG5lZWQgdG8gYXRvbWljYWxseSBzZWUgdGhhdCB0aGUgbGlzdCBpcwotCQkJCSAqIGVtcHR5IGFuZCBjaGFuZ2UgdGhlIHN0YXRlIHRvIERJUlRZIHNvIHRoYXQKLQkJCQkgKiB3ZSBkb24ndCBtaXNzIGFueSBtb3JlIGNhbGxiYWNrcyBiZWluZyBhZGRlZC4KLQkJCQkgKi8KLQkJCQlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQkJfSBlbHNlIHsKKwkJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCQkJaW9lcnJvcnMrKzsKIAkJCX0KLQkJCWNiID0gaWNsb2ctPmljX2NhbGxiYWNrOwogCisJCQkvKgorCQkJICogS2VlcCBwcm9jZXNzaW5nIGVudHJpZXMgaW4gdGhlIGNhbGxiYWNrIGxpc3QgdW50aWwKKwkJCSAqIHdlIGNvbWUgYXJvdW5kIGFuZCBpdCBpcyBlbXB0eS4gIFdlIG5lZWQgdG8KKwkJCSAqIGF0b21pY2FsbHkgc2VlIHRoYXQgdGhlIGxpc3QgaXMgZW1wdHkgYW5kIGNoYW5nZSB0aGUKKwkJCSAqIHN0YXRlIHRvIERJUlRZIHNvIHRoYXQgd2UgZG9uJ3QgbWlzcyBhbnkgbW9yZQorCQkJICogY2FsbGJhY2tzIGJlaW5nIGFkZGVkLgorCQkJICovCisJCQlzcGluX2xvY2soJmljbG9nLT5pY19jYWxsYmFja19sb2NrKTsKKwkJCWNiID0gaWNsb2ctPmljX2NhbGxiYWNrOwogCQkJd2hpbGUgKGNiKSB7CiAJCQkJaWNsb2ctPmljX2NhbGxiYWNrX3RhaWwgPSAmKGljbG9nLT5pY19jYWxsYmFjayk7CiAJCQkJaWNsb2ctPmljX2NhbGxiYWNrID0gTlVMTDsKLQkJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQkJc3Bpbl91bmxvY2soJmljbG9nLT5pY19jYWxsYmFja19sb2NrKTsKIAogCQkJCS8qIHBlcmZvcm0gY2FsbGJhY2tzIGluIHRoZSBvcmRlciBnaXZlbiAqLwogCQkJCWZvciAoOyBjYjsgY2IgPSBjYl9uZXh0KSB7CiAJCQkJCWNiX25leHQgPSBjYi0+Y2JfbmV4dDsKIAkJCQkJY2ItPmNiX2Z1bmMoY2ItPmNiX2FyZywgYWJvcnRlZCk7CiAJCQkJfQotCQkJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQkJc3Bpbl9sb2NrKCZpY2xvZy0+aWNfY2FsbGJhY2tfbG9jayk7CiAJCQkJY2IgPSBpY2xvZy0+aWNfY2FsbGJhY2s7CiAJCQl9CiAKIAkJCWxvb3BkaWRjYWxsYmFja3MrKzsKIAkJCWZ1bmNkaWRjYWxsYmFja3MrKzsKIAorCQkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJCUFTU0VSVChpY2xvZy0+aWNfY2FsbGJhY2sgPT0gTlVMTCk7CisJCQlzcGluX3VubG9jaygmaWNsb2ctPmljX2NhbGxiYWNrX2xvY2spOwogCQkJaWYgKCEoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSkKIAkJCQlpY2xvZy0+aWNfc3RhdGUgPSBYTE9HX1NUQVRFX0RJUlRZOwogCkBAIC0yMjQxLDcgKzIyNDYsNyBAQAogCQkJcmVwZWF0cyA9IDA7CiAJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBsb2ctPmxfbXAsCiAJCQkJIiVzOiBwb3NzaWJsZSBpbmZpbml0ZSBsb29wICglZCBpdGVyYXRpb25zKSIsCi0JCQkJX19GVU5DVElPTl9fLCBmbHVzaGNudCk7CisJCQkJX19mdW5jX18sIGZsdXNoY250KTsKIAkJfQogCX0gd2hpbGUgKCFpb2Vycm9ycyAmJiBsb29wZGlkY2FsbGJhY2tzKTsKIApAQCAtMjMwOSw3ICsyMzE0LDcgQEAKIAogCUFTU0VSVChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9TWU5DSU5HIHx8CiAJICAgICAgIGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0lPRVJST1IpOwotCUFTU0VSVChpY2xvZy0+aWNfcmVmY250ID09IDApOworCUFTU0VSVChhdG9taWNfcmVhZCgmaWNsb2ctPmljX3JlZmNudCkgPT0gMCk7CiAJQVNTRVJUKGljbG9nLT5pY19id3JpdGVjbnQgPT0gMSB8fCBpY2xvZy0+aWNfYndyaXRlY250ID09IDIpOwogCiAKQEAgLTIzOTEsNyArMjM5Niw3IEBACiAJQVNTRVJUKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0FDVElWRSk7CiAJaGVhZCA9ICZpY2xvZy0+aWNfaGVhZGVyOwogCi0JaWNsb2ctPmljX3JlZmNudCsrOwkJCS8qIHByZXZlbnRzIHN5bmMgKi8KKwlhdG9taWNfaW5jKCZpY2xvZy0+aWNfcmVmY250KTsJLyogcHJldmVudHMgc3luYyAqLwogCWxvZ19vZmZzZXQgPSBpY2xvZy0+aWNfb2Zmc2V0OwogCiAJLyogT24gdGhlIDFzdCB3cml0ZSB0byBhbiBpY2xvZywgZmlndXJlIG91dCBsc24uICBUaGlzIHdvcmtzCkBAIC0yNDIzLDEyICsyNDI4LDEyIEBACiAJCXhsb2dfc3RhdGVfc3dpdGNoX2ljbG9ncyhsb2csIGljbG9nLCBpY2xvZy0+aWNfc2l6ZSk7CiAKIAkJLyogSWYgSSdtIHRoZSBvbmx5IG9uZSB3cml0aW5nIHRvIHRoaXMgaWNsb2csIHN5bmMgaXQgdG8gZGlzayAqLwotCQlpZiAoaWNsb2ctPmljX3JlZmNudCA9PSAxKSB7CisJCWlmIChhdG9taWNfcmVhZCgmaWNsb2ctPmljX3JlZmNudCkgPT0gMSkgewogCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQkJaWYgKChlcnJvciA9IHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKSkpCiAJCQkJcmV0dXJuIGVycm9yOwogCQl9IGVsc2UgewotCQkJaWNsb2ctPmljX3JlZmNudC0tOworCQkJYXRvbWljX2RlYygmaWNsb2ctPmljX3JlZmNudCk7CiAJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCX0KIAkJZ290byByZXN0YXJ0OwpAQCAtMjc5MiwxOCArMjc5Nyw2IEBACiAKIAogLyoKLSAqIEF0b21pY2FsbHkgcHV0IGJhY2sgdXNlZCB0aWNrZXQuCi0gKi8KLVNUQVRJQyB2b2lkCi14bG9nX3N0YXRlX3B1dF90aWNrZXQoeGxvZ190CSAgICAqbG9nLAotCQkgICAgICB4bG9nX3RpY2tldF90ICp0aWMpCi17Ci0Jc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQl4bG9nX3RpY2tldF9wdXQobG9nLCB0aWMpOwotCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLX0JLyogeGxvZ19zdGF0ZV9wdXRfdGlja2V0ICovCi0KLS8qCiAgKiBGbHVzaCBpY2xvZyB0byBkaXNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiBpY2xvZyBhbmQKICAqIHRoZSBXQU5UX1NZTkMgYml0IGlzIHNldC4KICAqCkBAIC0yODEzLDMzICsyODA2LDM1IEBACiAgKgogICovCiBTVEFUSUMgaW50Ci14bG9nX3N0YXRlX3JlbGVhc2VfaWNsb2coeGxvZ190CQkqbG9nLAotCQkJIHhsb2dfaW5fY29yZV90CSppY2xvZykKK3hsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZygKKwl4bG9nX3QJCSpsb2csCisJeGxvZ19pbl9jb3JlX3QJKmljbG9nKQogewogCWludAkJc3luYyA9IDA7CS8qIGRvIHdlIHN5bmM/ICovCiAKLQl4bG9nX2Fzc2lnbl90YWlsX2xzbihsb2ctPmxfbXApOworCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpCisJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAotCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJQVNTRVJUKGF0b21pY19yZWFkKCZpY2xvZy0+aWNfcmVmY250KSA+IDApOworCWlmICghYXRvbWljX2RlY19hbmRfbG9jaygmaWNsb2ctPmljX3JlZmNudCwgJmxvZy0+bF9pY2xvZ2xvY2spKQorCQlyZXR1cm4gMDsKIAogCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKIAkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJfQotCi0JQVNTRVJUKGljbG9nLT5pY19yZWZjbnQgPiAwKTsKIAlBU1NFUlQoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfQUNUSVZFIHx8CiAJICAgICAgIGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX1dBTlRfU1lOQyk7CiAKLQlpZiAoLS1pY2xvZy0+aWNfcmVmY250ID09IDAgJiYKLQkgICAgaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfV0FOVF9TWU5DKSB7CisJaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX1dBTlRfU1lOQykgeworCQkvKiB1cGRhdGUgdGFpbCBiZWZvcmUgd3JpdGluZyB0byBpY2xvZyAqLworCQl4bG9nX2Fzc2lnbl90YWlsX2xzbihsb2ctPmxfbXApOwogCQlzeW5jKys7CiAJCWljbG9nLT5pY19zdGF0ZSA9IFhMT0dfU1RBVEVfU1lOQ0lORzsKIAkJaWNsb2ctPmljX2hlYWRlci5oX3RhaWxfbHNuID0gY3B1X3RvX2JlNjQobG9nLT5sX3RhaWxfbHNuKTsKIAkJeGxvZ192ZXJpZnlfdGFpbF9sc24obG9nLCBpY2xvZywgbG9nLT5sX3RhaWxfbHNuKTsKIAkJLyogY3ljbGUgaW5jcmVtZW50ZWQgd2hlbiBpbmNyZW1lbnRpbmcgY3Vycl9ibG9jayAqLwogCX0KLQogCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAogCS8qCkBAIC0yODQ5LDExICsyODQ0LDkgQEAKIAkgKiB0aGlzIGljbG9nIGhhcyBjb25zaXN0ZW50IGRhdGEsIHNvIHdlIGlnbm9yZSBJT0VSUk9SCiAJICogZmxhZ3MgYWZ0ZXIgdGhpcyBwb2ludC4KIAkgKi8KLQlpZiAoc3luYykgeworCWlmIChzeW5jKQogCQlyZXR1cm4geGxvZ19zeW5jKGxvZywgaWNsb2cpOwotCX0KIAlyZXR1cm4gMDsKLQogfQkvKiB4bG9nX3N0YXRlX3JlbGVhc2VfaWNsb2cgKi8KIAogCkBAIC0yODgxLDcgKzI4NzQsNyBAQAogCWxvZy0+bF9jdXJyX2Jsb2NrICs9IEJUT0JCKGV2ZW50dWFsX3NpemUpK0JUT0JCKGxvZy0+bF9pY2xvZ19oc2l6ZSk7CiAKIAkvKiBSb3VuZCB1cCB0byBuZXh0IGxvZy1zdW5pdCAqLwotCWlmIChYRlNfU0JfVkVSU0lPTl9IQVNMT0dWMigmbG9nLT5sX21wLT5tX3NiKSAmJgorCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKSAmJgogCSAgICBsb2ctPmxfbXAtPm1fc2Iuc2JfbG9nc3VuaXQgPiAxKSB7CiAJCV9fdWludDMyX3Qgc3VuaXRfYmIgPSBCVE9CQihsb2ctPmxfbXAtPm1fc2Iuc2JfbG9nc3VuaXQpOwogCQlsb2ctPmxfY3Vycl9ibG9jayA9IHJvdW5kdXAobG9nLT5sX2N1cnJfYmxvY2ssIHN1bml0X2JiKTsKQEAgLTI5NTMsNyArMjk0Niw4IEBACiAJCSAqIHByZXZpb3VzIGljbG9nIGFuZCBnbyB0byBzbGVlcC4KIAkJICovCiAJCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9ESVJUWSB8fAotCQkgICAgKGljbG9nLT5pY19yZWZjbnQgPT0gMCAmJiBpY2xvZy0+aWNfb2Zmc2V0ID09IDApKSB7CisJCSAgICAoYXRvbWljX3JlYWQoJmljbG9nLT5pY19yZWZjbnQpID09IDAKKwkJICAgICAmJiBpY2xvZy0+aWNfb2Zmc2V0ID09IDApKSB7CiAJCQlpY2xvZyA9IGljbG9nLT5pY19wcmV2OwogCQkJaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0FDVElWRSB8fAogCQkJICAgIGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKQpAQCAtMjk2MSwxNCArMjk1NSwxNCBAQAogCQkJZWxzZQogCQkJCWdvdG8gbWF5YmVfc2xlZXA7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoaWNsb2ctPmljX3JlZmNudCA9PSAwKSB7CisJCQlpZiAoYXRvbWljX3JlYWQoJmljbG9nLT5pY19yZWZjbnQpID09IDApIHsKIAkJCQkvKiBXZSBhcmUgdGhlIG9ubHkgb25lIHdpdGggYWNjZXNzIHRvIHRoaXMKIAkJCQkgKiBpY2xvZy4gIEZsdXNoIGl0IG91dCBub3cuICBUaGVyZSBzaG91bGQKIAkJCQkgKiBiZSBhIHJvdW5kb2ZmIG9mIHplcm8gdG8gc2hvdyB0aGF0IHNvbWVvbmUKIAkJCQkgKiBoYXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIHRoZSByb3VuZG9mZiBmcm9tCiAJCQkJICogdGhlIHByZXZpb3VzIHN5bmMuCiAJCQkJICovCi0JCQkJaWNsb2ctPmljX3JlZmNudCsrOworCQkJCWF0b21pY19pbmMoJmljbG9nLT5pY19yZWZjbnQpOwogCQkJCWxzbiA9IGJlNjRfdG9fY3B1KGljbG9nLT5pY19oZWFkZXIuaF9sc24pOwogCQkJCXhsb2dfc3RhdGVfc3dpdGNoX2ljbG9ncyhsb2csIGljbG9nLCAwKTsKIAkJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CkBAIC0zMTAwLDcgKzMwOTQsNyBAQAogCQkJYWxyZWFkeV9zbGVwdCA9IDE7CiAJCQlnb3RvIHRyeV9hZ2FpbjsKIAkJfSBlbHNlIHsKLQkJCWljbG9nLT5pY19yZWZjbnQrKzsKKwkJCWF0b21pY19pbmMoJmljbG9nLT5pY19yZWZjbnQpOwogCQkJeGxvZ19zdGF0ZV9zd2l0Y2hfaWNsb2dzKGxvZywgaWNsb2csIDApOwogCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQkJaWYgKHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKSkKQEAgLTMxNzIsOTIgKzMxNjYsMTkgQEAKICAqLwogCiAvKgotICoJQWxnb3JpdGhtIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgcGFnZSBzaXplLiA7LSgKLSAqLwotU1RBVElDIHZvaWQKLXhsb2dfc3RhdGVfdGlja2V0X2FsbG9jKHhsb2dfdCAqbG9nKQotewotCXhsb2dfdGlja2V0X3QJKnRfbGlzdDsKLQl4bG9nX3RpY2tldF90CSpuZXh0OwotCXhmc19jYWRkcl90CWJ1ZjsKLQl1aW50CQlpID0gKFBBR0VfU0laRSAvIHNpemVvZih4bG9nX3RpY2tldF90KSkgLSAyOwotCi0JLyoKLQkgKiBUaGUga21lbV96YWxsb2MgbWF5IHNsZWVwLCBzbyB3ZSBzaG91bGRuJ3QgYmUgaG9sZGluZyB0aGUKLQkgKiBnbG9iYWwgbG9jay4gIFhYWG1pa2VuOiBtYXkgd2FudCB0byB1c2Ugem9uZSBhbGxvY2F0b3IuCi0JICovCi0JYnVmID0gKHhmc19jYWRkcl90KSBrbWVtX3phbGxvYyhQQUdFX1NJWkUsIEtNX1NMRUVQKTsKLQotCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0KLQkvKiBBdHRhY2ggMXN0IHRpY2tldCB0byBRLCBzbyB3ZSBjYW4ga2VlcCB0cmFjayBvZiBhbGxvY2F0ZWQgbWVtb3J5ICovCi0JdF9saXN0ID0gKHhsb2dfdGlja2V0X3QgKilidWY7Ci0JdF9saXN0LT50X25leHQgPSBsb2ctPmxfdW5tb3VudF9mcmVlOwotCWxvZy0+bF91bm1vdW50X2ZyZWUgPSB0X2xpc3QrKzsKLQlsb2ctPmxfdGlja2V0X2NudCsrOwotCWxvZy0+bF90aWNrZXRfdGNudCsrOwotCi0JLyogTmV4dCB0aWNrZXQgYmVjb21lcyBmaXJzdCB0aWNrZXQgYXR0YWNoZWQgdG8gdGlja2V0IGZyZWUgbGlzdCAqLwotCWlmIChsb2ctPmxfZnJlZWxpc3QgIT0gTlVMTCkgewotCQlBU1NFUlQobG9nLT5sX3RhaWwgIT0gTlVMTCk7Ci0JCWxvZy0+bF90YWlsLT50X25leHQgPSB0X2xpc3Q7Ci0JfSBlbHNlIHsKLQkJbG9nLT5sX2ZyZWVsaXN0ID0gdF9saXN0OwotCX0KLQlsb2ctPmxfdGlja2V0X2NudCsrOwotCWxvZy0+bF90aWNrZXRfdGNudCsrOwotCi0JLyogQ3ljbGUgdGhyb3VnaCByZXN0IG9mIGFsbG9jJ2VkIG1lbW9yeSwgYnVpbGRpbmcgdXAgZnJlZSBRICovCi0JZm9yICggOyBpID4gMDsgaS0tKSB7Ci0JCW5leHQgPSB0X2xpc3QgKyAxOwotCQl0X2xpc3QtPnRfbmV4dCA9IG5leHQ7Ci0JCXRfbGlzdCA9IG5leHQ7Ci0JCWxvZy0+bF90aWNrZXRfY250Kys7Ci0JCWxvZy0+bF90aWNrZXRfdGNudCsrOwotCX0KLQl0X2xpc3QtPnRfbmV4dCA9IE5VTEw7Ci0JbG9nLT5sX3RhaWwgPSB0X2xpc3Q7Ci0Jc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotfQkvKiB4bG9nX3N0YXRlX3RpY2tldF9hbGxvYyAqLwotCi0KLS8qCi0gKiBQdXQgdGlja2V0IGludG8gZnJlZSBsaXN0Ci0gKgotICogQXNzdW1wdGlvbjogbG9nIGxvY2sgaXMgaGVsZCBhcm91bmQgdGhpcyBjYWxsLgorICogRnJlZSBhIHVzZWQgdGlja2V0LgogICovCiBTVEFUSUMgdm9pZAogeGxvZ190aWNrZXRfcHV0KHhsb2dfdAkJKmxvZywKIAkJeGxvZ190aWNrZXRfdAkqdGlja2V0KQogewogCXN2X2Rlc3Ryb3koJnRpY2tldC0+dF9zZW1hKTsKLQotCS8qCi0JICogRG9uJ3QgdGhpbmsgY2FjaGluZyB3aWxsIG1ha2UgdGhhdCBtdWNoIGRpZmZlcmVuY2UuICBJdCdzCi0JICogbW9yZSBpbXBvcnRhbnQgdG8gbWFrZSBkZWJ1ZyBlYXNpZXIuCi0JICovCi0jaWYgMAotCS8qIHJlYWwgY29kZSB3aWxsIHdhbnQgdG8gdXNlIExJRk8gZm9yIGNhY2hpbmcgKi8KLQl0aWNrZXQtPnRfbmV4dCA9IGxvZy0+bF9mcmVlbGlzdDsKLQlsb2ctPmxfZnJlZWxpc3QgPSB0aWNrZXQ7Ci0JLyogbm8gbmVlZCB0byBjbGVhciBmaWVsZHMgKi8KLSNlbHNlCi0JLyogV2hlbiB3ZSBkZWJ1ZywgaXQgaXMgZWFzaWVyIGlmIHRpY2tldHMgYXJlIGN5Y2xlZCAqLwotCXRpY2tldC0+dF9uZXh0ICAgICA9IE5VTEw7Ci0JaWYgKGxvZy0+bF90YWlsKSB7Ci0JCWxvZy0+bF90YWlsLT50X25leHQgPSB0aWNrZXQ7Ci0JfSBlbHNlIHsKLQkJQVNTRVJUKGxvZy0+bF9mcmVlbGlzdCA9PSBOVUxMKTsKLQkJbG9nLT5sX2ZyZWVsaXN0ID0gdGlja2V0OwotCX0KLQlsb2ctPmxfdGFpbAkgICAgPSB0aWNrZXQ7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlsb2ctPmxfdGlja2V0X2NudCsrOworCWttZW1fem9uZV9mcmVlKHhmc19sb2dfdGlja2V0X3pvbmUsIHRpY2tldCk7CiB9CS8qIHhsb2dfdGlja2V0X3B1dCAqLwogCiAKIC8qCi0gKiBHcmFiIHRpY2tldCBvZmYgZnJlZWxpc3Qgb3IgYWxsb2NhdGlvbiBzb21lIG1vcmUKKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIGEgbmV3IGxvZyB0aWNrZXQuCiAgKi8KIFNUQVRJQyB4bG9nX3RpY2tldF90ICoKIHhsb2dfdGlja2V0X2dldCh4bG9nX3QJCSpsb2csCkBAIC0zMjY5LDIxICszMTkwLDkgQEAKIAl4bG9nX3RpY2tldF90CSp0aWM7CiAJdWludAkJbnVtX2hlYWRlcnM7CiAKLSBhbGxvYzoKLQlpZiAobG9nLT5sX2ZyZWVsaXN0ID09IE5VTEwpCi0JCXhsb2dfc3RhdGVfdGlja2V0X2FsbG9jKGxvZyk7CQkvKiBwb3RlbnRpYWxseSBzbGVlcCAqLwotCi0Jc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQlpZiAobG9nLT5sX2ZyZWVsaXN0ID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCQlnb3RvIGFsbG9jOwotCX0KLQl0aWMJCT0gbG9nLT5sX2ZyZWVsaXN0OwotCWxvZy0+bF9mcmVlbGlzdAk9IHRpYy0+dF9uZXh0OwotCWlmIChsb2ctPmxfZnJlZWxpc3QgPT0gTlVMTCkKLQkJbG9nLT5sX3RhaWwgPSBOVUxMOwotCWxvZy0+bF90aWNrZXRfY250LS07Ci0Jc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOworCXRpYyA9IGttZW1fem9uZV96YWxsb2MoeGZzX2xvZ190aWNrZXRfem9uZSwgS01fU0xFRVB8S01fTUFZRkFJTCk7CisJaWYgKCF0aWMpCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBQZXJtYW5lbnQgcmVzZXJ2YXRpb25zIGhhdmUgdXAgdG8gJ2NudCctMSBhY3RpdmUgbG9nIG9wZXJhdGlvbnMKQEAgLTMzMzQsNyArMzI0Myw3IEBACiAJdW5pdF9ieXRlcyArPSBzaXplb2YoeGxvZ19vcF9oZWFkZXJfdCkgKiBudW1faGVhZGVyczsKIAogCS8qIGZvciByb3VuZG9mZiBwYWRkaW5nIGZvciB0cmFuc2FjdGlvbiBkYXRhIGFuZCBvbmUgZm9yIGNvbW1pdCByZWNvcmQgKi8KLQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikgJiYKKwlpZiAoeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoJmxvZy0+bF9tcC0+bV9zYikgJiYKIAkgICAgbG9nLT5sX21wLT5tX3NiLnNiX2xvZ3N1bml0ID4gMSkgewogCQkvKiBsb2cgc3Ugcm91bmRvZmYgKi8KIAkJdW5pdF9ieXRlcyArPSAyKmxvZy0+bF9tcC0+bV9zYi5zYl9sb2dzdW5pdDsKQEAgLTM2MTEsOCArMzUyMCw4IEBACiAJICogYmVmb3JlIHdlIG1hcmsgdGhlIGZpbGVzeXN0ZW0gU0hVVERPV04gYW5kIHdha2UKIAkgKiBldmVyeWJvZHkgdXAgdG8gdGVsbCB0aGUgYmFkIG5ld3MuCiAJICovCi0Jc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7CiAJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwlzcGluX2xvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfRlNfU0hVVERPV047CiAJWEZTX0JVRl9ET05FKG1wLT5tX3NiX2JwKTsKIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggNGNkYWMwNC4uZDFkNjc4ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC0xNDIsOCArMTQyLDkgQEAKIAkJCSB4ZnNfbHNuX3QJbHNuLAogCQkJIHVpbnQJCWZsYWdzLAogCQkJIGludAkJKmxvZ19mb3JjZWQpOwotI2RlZmluZSB4ZnNfbG9nX2ZvcmNlKG1wLCBsc24sIGZsYWdzKSBcCi0JX3hmc19sb2dfZm9yY2UobXAsIGxzbiwgZmxhZ3MsIE5VTEwpOwordm9pZAkgIHhmc19sb2dfZm9yY2Uoc3RydWN0IHhmc19tb3VudAkqbXAsCisJCQl4ZnNfbHNuX3QJCWxzbiwKKwkJCXVpbnQJCQlmbGFncyk7CiBpbnQJICB4ZnNfbG9nX21vdW50KHN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCQkJc3RydWN0IHhmc19idWZ0YXJnCSpsb2dfdGFyZ2V0LAogCQkJeGZzX2RhZGRyX3QJCXN0YXJ0X2Jsb2NrLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IGUwMDgyMzMuLjg5NTJhMzkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTQ5LDEwICs0OSwxMCBAQAogI2RlZmluZSBYTE9HX0hFQURFUl9TSVpFCTUxMgogCiAjZGVmaW5lIFhMT0dfUkVDX1NISUZUKGxvZykgXAotCUJUT0JCKDEgPDwgKFhGU19TQl9WRVJTSU9OX0hBU0xPR1YyKCZsb2ctPmxfbXAtPm1fc2IpID8gXAorCUJUT0JCKDEgPDwgKHhmc19zYl92ZXJzaW9uX2hhc2xvZ3YyKCZsb2ctPmxfbXAtPm1fc2IpID8gXAogCSBYTE9HX01BWF9SRUNPUkRfQlNISUZUIDogWExPR19CSUdfUkVDT1JEX0JTSElGVCkpCiAjZGVmaW5lIFhMT0dfVE9UQUxfUkVDX1NISUZUKGxvZykgXAotCUJUT0JCKFhMT0dfTUFYX0lDTE9HUyA8PCAoWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikgPyBcCisJQlRPQkIoWExPR19NQVhfSUNMT0dTIDw8ICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKSA/IFwKIAkgWExPR19NQVhfUkVDT1JEX0JTSElGVCA6IFhMT0dfQklHX1JFQ09SRF9CU0hJRlQpKQogCiAKQEAgLTI0Miw3ICsyNDIsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB4bG9nX3RpY2tldCB7CiAJc3ZfdAkJICAgdF9zZW1hOwkgLyogc2xlZXAgb24gdGhpcyBzZW1hcGhvcmUgICAgICA6IDIwICovCi0gCXN0cnVjdCB4bG9nX3RpY2tldCAqdF9uZXh0OwkgLyoJCQkgICAgICAgICA6NHw4ICovCisJc3RydWN0IHhsb2dfdGlja2V0ICp0X25leHQ7CSAvKgkJCSAgICAgICAgIDo0fDggKi8KIAlzdHJ1Y3QgeGxvZ190aWNrZXQgKnRfcHJldjsJIC8qCQkJCSA6NHw4ICovCiAJeGxvZ190aWRfdAkgICB0X3RpZDsJIC8qIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIJIDogNCAgKi8KIAlpbnQJCSAgIHRfY3Vycl9yZXM7CSAvKiBjdXJyZW50IHJlc2VydmF0aW9uIGluIGJ5dGVzIDogNCAgKi8KQEAgLTMyNCw2ICszMjQsMTkgQEAKICAqIC0gaWNfb2Zmc2V0IGlzIHRoZSBjdXJyZW50IG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIGluIHRoaXMgaWNsb2cuCiAgKiAtIGljX3JlZmNudCBpcyBidW1wZWQgd2hlbiBzb21lb25lIGlzIHdyaXRpbmcgdG8gdGhlIGxvZy4KICAqIC0gaWNfc3RhdGUgaXMgdGhlIHN0YXRlIG9mIHRoZSBpY2xvZy4KKyAqCisgKiBCZWNhdXNlIG9mIGNhY2hlbGluZSBjb250ZW50aW9uIG9uIGxhcmdlIG1hY2hpbmVzLCB3ZSBuZWVkIHRvIHNlcGFyYXRlCisgKiB2YXJpb3VzIHJlc291cmNlcyBvbnRvIGRpZmZlcmVudCBjYWNoZWxpbmVzLiBUbyBzdGFydCB3aXRoLCBtYWtlIHRoZQorICogc3RydWN0dXJlIGNhY2hlbGluZSBhbGlnbmVkLiBUaGUgZm9sbG93aW5nIGZpZWxkcyBjYW4gYmUgY29udGVuZGVkIG9uCisgKiBieSBpbmRlcGVuZGVudCBwcm9jZXNzZXM6CisgKgorICoJLSBpY19jYWxsYmFja18qCisgKgktIGljX3JlZmNudAorICoJLSBmaWVsZHMgcHJvdGVjdGVkIGJ5IHRoZSBnbG9iYWwgbF9pY2xvZ2xvY2sKKyAqCisgKiBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGZpZWxkcyBhcmUgbG9jYXRlZCBpbiBzZXBhcmF0ZSBjYWNoZWxpbmVzLgorICogV2UnbGwgcHV0IGFsbCB0aGUgcmVhZC1vbmx5IGFuZCBsX2ljbG9nbG9jayBmaWVsZHMgaW4gdGhlIGZpcnN0IGNhY2hlbGluZSwKKyAqIGFuZCBtb3ZlIGV2ZXJ5dGhpbmcgZWxzZSBvdXQgdG8gc3Vic2VxdWVudCBjYWNoZWxpbmVzLgogICovCiB0eXBlZGVmIHN0cnVjdCB4bG9nX2ljbG9nX2ZpZWxkcyB7CiAJc3ZfdAkJCWljX2ZvcmNlc2VtYTsKQEAgLTMzMiwxNyArMzQ1LDIyIEBACiAJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNfcHJldjsKIAlzdHJ1Y3QgeGZzX2J1ZgkJKmljX2JwOwogCXN0cnVjdCBsb2cJCSppY19sb2c7Ci0JeGZzX2xvZ19jYWxsYmFja190CSppY19jYWxsYmFjazsKLQl4ZnNfbG9nX2NhbGxiYWNrX3QJKippY19jYWxsYmFja190YWlsOwotI2lmZGVmIFhGU19MT0dfVFJBQ0UKLQlzdHJ1Y3Qga3RyYWNlCQkqaWNfdHJhY2U7Ci0jZW5kaWYKIAlpbnQJCQlpY19zaXplOwogCWludAkJCWljX29mZnNldDsKLQlpbnQJCQlpY19yZWZjbnQ7CiAJaW50CQkJaWNfYndyaXRlY250OwogCXVzaG9ydF90CQlpY19zdGF0ZTsKIAljaGFyCQkJKmljX2RhdGFwOwkvKiBwb2ludGVyIHRvIGljbG9nIGRhdGEgKi8KKyNpZmRlZiBYRlNfTE9HX1RSQUNFCisJc3RydWN0IGt0cmFjZQkJKmljX3RyYWNlOworI2VuZGlmCisKKwkvKiBDYWxsYmFjayBzdHJ1Y3R1cmVzIG5lZWQgdGhlaXIgb3duIGNhY2hlbGluZSAqLworCXNwaW5sb2NrX3QJCWljX2NhbGxiYWNrX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwl4ZnNfbG9nX2NhbGxiYWNrX3QJKmljX2NhbGxiYWNrOworCXhmc19sb2dfY2FsbGJhY2tfdAkqKmljX2NhbGxiYWNrX3RhaWw7CisKKwkvKiByZWZlcmVuY2UgY291bnRzIG5lZWQgdGhlaXIgb3duIGNhY2hlbGluZSAqLworCWF0b21pY190CQlpY19yZWZjbnQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH0geGxvZ19pY2xvZ19maWVsZHNfdDsKIAogdHlwZWRlZiB1bmlvbiB4bG9nX2luX2NvcmUyIHsKQEAgLTM2Niw2ICszODQsNyBAQAogI2RlZmluZQlpY19icAkJaGljX2ZpZWxkcy5pY19icAogI2RlZmluZQlpY19sb2cJCWhpY19maWVsZHMuaWNfbG9nCiAjZGVmaW5lCWljX2NhbGxiYWNrCWhpY19maWVsZHMuaWNfY2FsbGJhY2sKKyNkZWZpbmUJaWNfY2FsbGJhY2tfbG9jayBoaWNfZmllbGRzLmljX2NhbGxiYWNrX2xvY2sKICNkZWZpbmUJaWNfY2FsbGJhY2tfdGFpbCBoaWNfZmllbGRzLmljX2NhbGxiYWNrX3RhaWwKICNkZWZpbmUJaWNfdHJhY2UJaGljX2ZpZWxkcy5pY190cmFjZQogI2RlZmluZQlpY19zaXplCQloaWNfZmllbGRzLmljX3NpemUKQEAgLTM4Myw1NSArNDAyLDExIEBACiAgKiB0aGF0IHJvdW5kIG9mZiBwcm9ibGVtcyB3b24ndCBvY2N1ciB3aGVuIHJlbGVhc2luZyBwYXJ0aWFsIHJlc2VydmF0aW9ucy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgbG9nIHsKLQkvKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGZpZWxkcyBhcmUgY2hhbmdlZCB3aGlsZSBob2xkaW5nIGljbG9nbG9jayAqLwotCXNlbWFfdAkJCWxfZmx1c2hzZW1hOyAgICAvKiBpY2xvZyBmbHVzaGluZyBzZW1hcGhvcmUgKi8KLQlpbnQJCQlsX2ZsdXNoY250OwkvKiAjIG9mIHByb2NzIHdhaXRpbmcgb24gdGhpcwotCQkJCQkJICogc2VtYSAqLwotCWludAkJCWxfdGlja2V0X2NudDsJLyogZnJlZSB0aWNrZXQgY291bnQgKi8KLQlpbnQJCQlsX3RpY2tldF90Y250OwkvKiB0b3RhbCB0aWNrZXQgY291bnQgKi8KLQlpbnQJCQlsX2NvdmVyZWRfc3RhdGU7Lyogc3RhdGUgb2YgImNvdmVyaW5nIGRpc2sKLQkJCQkJCSAqIGxvZyBlbnRyaWVzIiAqLwotCXhsb2dfdGlja2V0X3QJCSpsX2ZyZWVsaXN0OyAgICAvKiBmcmVlIGxpc3Qgb2YgdGlja2V0cyAqLwotCXhsb2dfdGlja2V0X3QJCSpsX3VubW91bnRfZnJlZTsvKiBrbWVtX2ZyZWUgdGhlc2UgYWRkcmVzc2VzICovCi0JeGxvZ190aWNrZXRfdAkJKmxfdGFpbDsgICAgICAgIC8qIGZyZWUgbGlzdCBvZiB0aWNrZXRzICovCi0JeGxvZ19pbl9jb3JlX3QJCSpsX2ljbG9nOyAgICAgICAvKiBoZWFkIGxvZyBxdWV1ZQkqLwotCXNwaW5sb2NrX3QJCWxfaWNsb2dsb2NrOyAgICAvKiBncmFiIHRvIGNoYW5nZSBpY2xvZyBzdGF0ZSAqLwotCXhmc19sc25fdAkJbF90YWlsX2xzbjsgICAgIC8qIGxzbiBvZiAxc3QgTFIgd2l0aCB1bmZsdXNoZWQKLQkJCQkJCSAqIGJ1ZmZlcnMgKi8KLQl4ZnNfbHNuX3QJCWxfbGFzdF9zeW5jX2xzbjsvKiBsc24gb2YgbGFzdCBMUiBvbiBkaXNrICovCisJLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgZG9uJ3QgbmVlZCBsb2NraW5nICovCiAJc3RydWN0IHhmc19tb3VudAkqbF9tcDsJICAgICAgICAvKiBtb3VudCBwb2ludCAqLwogCXN0cnVjdCB4ZnNfYnVmCQkqbF94YnVmOyAgICAgICAgLyogZXh0cmEgYnVmZmVyIGZvciBsb2cKIAkJCQkJCSAqIHdyYXBwaW5nICovCiAJc3RydWN0IHhmc19idWZ0YXJnCSpsX3Rhcmc7ICAgICAgICAvKiBidWZ0YXJnIG9mIGxvZyAqLwotCXhmc19kYWRkcl90CQlsX2xvZ0JCc3RhcnQ7ICAgLyogc3RhcnQgYmxvY2sgb2YgbG9nICovCi0JaW50CQkJbF9sb2dzaXplOyAgICAgIC8qIHNpemUgb2YgbG9nIGluIGJ5dGVzICovCi0JaW50CQkJbF9sb2dCQnNpemU7ICAgIC8qIHNpemUgb2YgbG9nIGluIEJCIGNodW5rcyAqLwotCWludAkJCWxfY3Vycl9jeWNsZTsgICAvKiBDeWNsZSBudW1iZXIgb2YgbG9nIHdyaXRlcyAqLwotCWludAkJCWxfcHJldl9jeWNsZTsgICAvKiBDeWNsZSBudW1iZXIgYmVmb3JlIGxhc3QKLQkJCQkJCSAqIGJsb2NrIGluY3JlbWVudCAqLwotCWludAkJCWxfY3Vycl9ibG9jazsgICAvKiBjdXJyZW50IGxvZ2ljYWwgbG9nIGJsb2NrICovCi0JaW50CQkJbF9wcmV2X2Jsb2NrOyAgIC8qIHByZXZpb3VzIGxvZ2ljYWwgbG9nIGJsb2NrICovCi0JaW50CQkJbF9pY2xvZ19zaXplOwkvKiBzaXplIG9mIGxvZyBpbiBieXRlcyAqLwotCWludAkJCWxfaWNsb2dfc2l6ZV9sb2c7IC8qIGxvZyBwb3dlciBzaXplIG9mIGxvZyAqLwotCWludAkJCWxfaWNsb2dfYnVmczsJLyogbnVtYmVyIG9mIGljbG9nIGJ1ZmZlcnMgKi8KLQotCS8qIFRoZSBmb2xsb3dpbmcgZmllbGQgYXJlIHVzZWQgZm9yIGRlYnVnZ2luZzsgbmVlZCB0byBob2xkIGljbG9nbG9jayAqLwotCWNoYXIJCQkqbF9pY2xvZ19iYWtbWExPR19NQVhfSUNMT0dTXTsKLQotCS8qIFRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgZmllbGRzIGFyZSBjaGFuZ2VkIHdoaWxlIGhvbGRpbmcgZ3JhbnRfbG9jayAqLwotCXNwaW5sb2NrX3QJCWxfZ3JhbnRfbG9jazsKLQl4bG9nX3RpY2tldF90CQkqbF9yZXNlcnZlX2hlYWRxOwotCXhsb2dfdGlja2V0X3QJCSpsX3dyaXRlX2hlYWRxOwotCWludAkJCWxfZ3JhbnRfcmVzZXJ2ZV9jeWNsZTsKLQlpbnQJCQlsX2dyYW50X3Jlc2VydmVfYnl0ZXM7Ci0JaW50CQkJbF9ncmFudF93cml0ZV9jeWNsZTsKLQlpbnQJCQlsX2dyYW50X3dyaXRlX2J5dGVzOwotCi0JLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgZG9uJ3QgbmVlZCBsb2NraW5nICovCi0jaWZkZWYgWEZTX0xPR19UUkFDRQotCXN0cnVjdCBrdHJhY2UJCSpsX3RyYWNlOwotCXN0cnVjdCBrdHJhY2UJCSpsX2dyYW50X3RyYWNlOwotI2VuZGlmCiAJdWludAkJCWxfZmxhZ3M7CiAJdWludAkJCWxfcXVvdGFvZmZzX2ZsYWc7IC8qIFhGU19EUV8qLCBmb3IgUVVPVEFPRkZzICovCiAJc3RydWN0IHhmc19idWZfY2FuY2VsCSoqbF9idWZfY2FuY2VsX3RhYmxlOwpAQCAtNDQwLDYgKzQxNSw1MCBAQAogCXVpbnQJCQlsX3NlY3RiYl9sb2c7ICAgLyogbG9nMiBvZiBzZWN0b3Igc2l6ZSBpbiBCQnMgKi8KIAl1aW50CQkJbF9zZWN0YmJfbWFzazsgIC8qIHNlY3RvciBzaXplIChpbiBCQnMpCiAJCQkJCQkgKiBhbGlnbm1lbnQgbWFzayAqLworCWludAkJCWxfaWNsb2dfc2l6ZTsJLyogc2l6ZSBvZiBsb2cgaW4gYnl0ZXMgKi8KKwlpbnQJCQlsX2ljbG9nX3NpemVfbG9nOyAvKiBsb2cgcG93ZXIgc2l6ZSBvZiBsb2cgKi8KKwlpbnQJCQlsX2ljbG9nX2J1ZnM7CS8qIG51bWJlciBvZiBpY2xvZyBidWZmZXJzICovCisJeGZzX2RhZGRyX3QJCWxfbG9nQkJzdGFydDsgICAvKiBzdGFydCBibG9jayBvZiBsb2cgKi8KKwlpbnQJCQlsX2xvZ3NpemU7ICAgICAgLyogc2l6ZSBvZiBsb2cgaW4gYnl0ZXMgKi8KKwlpbnQJCQlsX2xvZ0JCc2l6ZTsgICAgLyogc2l6ZSBvZiBsb2cgaW4gQkIgY2h1bmtzICovCisKKwkvKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGZpZWxkcyBhcmUgY2hhbmdlZCB3aGlsZSBob2xkaW5nIGljbG9nbG9jayAqLworCXNlbWFfdAkJCWxfZmx1c2hzZW1hIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJCQkJCQkvKiBpY2xvZyBmbHVzaGluZyBzZW1hcGhvcmUgKi8KKwlpbnQJCQlsX2ZsdXNoY250OwkvKiAjIG9mIHByb2NzIHdhaXRpbmcgb24gdGhpcworCQkJCQkJICogc2VtYSAqLworCWludAkJCWxfY292ZXJlZF9zdGF0ZTsvKiBzdGF0ZSBvZiAiY292ZXJpbmcgZGlzaworCQkJCQkJICogbG9nIGVudHJpZXMiICovCisJeGxvZ19pbl9jb3JlX3QJCSpsX2ljbG9nOyAgICAgICAvKiBoZWFkIGxvZyBxdWV1ZQkqLworCXNwaW5sb2NrX3QJCWxfaWNsb2dsb2NrOyAgICAvKiBncmFiIHRvIGNoYW5nZSBpY2xvZyBzdGF0ZSAqLworCXhmc19sc25fdAkJbF90YWlsX2xzbjsgICAgIC8qIGxzbiBvZiAxc3QgTFIgd2l0aCB1bmZsdXNoZWQKKwkJCQkJCSAqIGJ1ZmZlcnMgKi8KKwl4ZnNfbHNuX3QJCWxfbGFzdF9zeW5jX2xzbjsvKiBsc24gb2YgbGFzdCBMUiBvbiBkaXNrICovCisJaW50CQkJbF9jdXJyX2N5Y2xlOyAgIC8qIEN5Y2xlIG51bWJlciBvZiBsb2cgd3JpdGVzICovCisJaW50CQkJbF9wcmV2X2N5Y2xlOyAgIC8qIEN5Y2xlIG51bWJlciBiZWZvcmUgbGFzdAorCQkJCQkJICogYmxvY2sgaW5jcmVtZW50ICovCisJaW50CQkJbF9jdXJyX2Jsb2NrOyAgIC8qIGN1cnJlbnQgbG9naWNhbCBsb2cgYmxvY2sgKi8KKwlpbnQJCQlsX3ByZXZfYmxvY2s7ICAgLyogcHJldmlvdXMgbG9naWNhbCBsb2cgYmxvY2sgKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgZmllbGRzIGFyZSBjaGFuZ2VkIHdoaWxlIGhvbGRpbmcgZ3JhbnRfbG9jayAqLworCXNwaW5sb2NrX3QJCWxfZ3JhbnRfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCXhsb2dfdGlja2V0X3QJCSpsX3Jlc2VydmVfaGVhZHE7CisJeGxvZ190aWNrZXRfdAkJKmxfd3JpdGVfaGVhZHE7CisJaW50CQkJbF9ncmFudF9yZXNlcnZlX2N5Y2xlOworCWludAkJCWxfZ3JhbnRfcmVzZXJ2ZV9ieXRlczsKKwlpbnQJCQlsX2dyYW50X3dyaXRlX2N5Y2xlOworCWludAkJCWxfZ3JhbnRfd3JpdGVfYnl0ZXM7CisKKyNpZmRlZiBYRlNfTE9HX1RSQUNFCisJc3RydWN0IGt0cmFjZQkJKmxfdHJhY2U7CisJc3RydWN0IGt0cmFjZQkJKmxfZ3JhbnRfdHJhY2U7CisjZW5kaWYKKworCS8qIFRoZSBmb2xsb3dpbmcgZmllbGQgYXJlIHVzZWQgZm9yIGRlYnVnZ2luZzsgbmVlZCB0byBob2xkIGljbG9nbG9jayAqLworI2lmZGVmIERFQlVHCisJY2hhcgkJCSpsX2ljbG9nX2Jha1tYTE9HX01BWF9JQ0xPR1NdOworI2VuZGlmCisKIH0geGxvZ190OwogCiAjZGVmaW5lIFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykJKChsb2cpLT5sX2ZsYWdzICYgWExPR19JT19FUlJPUikKQEAgLTQ1OSw2ICs0NzgsOCBAQAogZXh0ZXJuIHZvaWQJIHhsb2dfcHV0X2JwKHN0cnVjdCB4ZnNfYnVmICopOwogZXh0ZXJuIGludAkgeGxvZ19icmVhZCh4bG9nX3QgKiwgeGZzX2RhZGRyX3QsIGludCwgc3RydWN0IHhmc19idWYgKik7CiAKK2V4dGVybiBrbWVtX3pvbmVfdAkqeGZzX2xvZ190aWNrZXRfem9uZTsKKwogLyogaWNsb2cgdHJhY2luZyAqLwogI2RlZmluZSBYTE9HX1RSQUNFX0dSQUJfRkxVU0ggIDEKICNkZWZpbmUgWExPR19UUkFDRV9SRUxfRkxVU0ggICAyCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggYjgyZDVkNC4uZTY1YWI0YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCiAjaW5jbHVkZSAieGZzX3F1b3RhLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCisjaW5jbHVkZSAieGZzX3V0aWxzLmgiCiAKIFNUQVRJQyBpbnQJeGxvZ19maW5kX3plcm9lZCh4bG9nX3QgKiwgeGZzX2RhZGRyX3QgKik7CiBTVEFUSUMgaW50CXhsb2dfY2xlYXJfc3RhbGVfYmxvY2tzKHhsb2dfdCAqLCB4ZnNfbHNuX3QpOwpAQCAtMTIwLDcgKzEyMSw4IEBACiAJWEZTX0JVRl9TRVRfVEFSR0VUKGJwLCBsb2ctPmxfbXAtPm1fbG9nZGV2X3RhcmdwKTsKIAogCXhmc2Jkc3RyYXQobG9nLT5sX21wLCBicCk7Ci0JaWYgKChlcnJvciA9IHhmc19pb3dhaXQoYnApKSkKKwllcnJvciA9IHhmc19pb3dhaXQoYnApOworCWlmIChlcnJvcikKIAkJeGZzX2lvZXJyb3JfYWxlcnQoInhsb2dfYnJlYWQiLCBsb2ctPmxfbXAsCiAJCQkJICBicCwgWEZTX0JVRl9BRERSKGJwKSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTkxLDcgKzE5Myw3IEBACiB7CiAJaW50CQkJYjsKIAotCWNtbl9lcnIoQ0VfREVCVUcsICIlczogIFNCIDogdXVpZCA9ICIsIF9fRlVOQ1RJT05fXyk7CisJY21uX2VycihDRV9ERUJVRywgIiVzOiAgU0IgOiB1dWlkID0gIiwgX19mdW5jX18pOwogCWZvciAoYiA9IDA7IGIgPCAxNjsgYisrKQogCQljbW5fZXJyKENFX0RFQlVHLCAiJTAyeCIsICgodWNoYXJfdCAqKSZtcC0+bV9zYi5zYl91dWlkKVtiXSk7CiAJY21uX2VycihDRV9ERUJVRywgIiwgZm10ID0gJWRcbiIsIFhMT0dfRk1UKTsKQEAgLTQ3OCw3ICs0ODAsNyBAQAogCSAqIHJlc2V0IGxhc3RfYmxrLiAgT25seSB3aGVuIGxhc3RfYmxrIHBvaW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgbG9nCiAJICogcmVjb3JkIGRvIHdlIHVwZGF0ZSBsYXN0X2Jsay4KIAkgKi8KLQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikpIHsKKwlpZiAoeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoJmxvZy0+bF9tcC0+bV9zYikpIHsKIAkJdWludAloX3NpemUgPSBiZTMyX3RvX2NwdShoZWFkLT5oX3NpemUpOwogCiAJCXhoZHJzID0gaF9zaXplIC8gWExPR19IRUFERVJfQ1lDTEVfU0laRTsKQEAgLTg4OCw3ICs4OTAsNyBAQAogCSAqIHVubW91bnQgcmVjb3JkIGlmIHRoZXJlIGlzIG9uZSwgc28gd2UgcGFzcyB0aGUgbHNuIG9mIHRoZQogCSAqIHVubW91bnQgcmVjb3JkIHJhdGhlciB0aGFuIHRoZSBibG9jayBhZnRlciBpdC4KIAkgKi8KLQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikpIHsKKwlpZiAoeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoJmxvZy0+bF9tcC0+bV9zYikpIHsKIAkJaW50CWhfc2l6ZSA9IGJlMzJfdG9fY3B1KHJoZWFkLT5oX3NpemUpOwogCQlpbnQJaF92ZXJzaW9uID0gYmUzMl90b19jcHUocmhlYWQtPmhfdmVyc2lvbik7CiAKQEAgLTExMDEsNyArMTEwMyw3IEBACiAJcmVjcC0+aF9tYWdpY25vID0gY3B1X3RvX2JlMzIoWExPR19IRUFERVJfTUFHSUNfTlVNKTsKIAlyZWNwLT5oX2N5Y2xlID0gY3B1X3RvX2JlMzIoY3ljbGUpOwogCXJlY3AtPmhfdmVyc2lvbiA9IGNwdV90b19iZTMyKAotCQkJWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikgPyAyIDogMSk7CisJCQl4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKSA/IDIgOiAxKTsKIAlyZWNwLT5oX2xzbiA9IGNwdV90b19iZTY0KHhsb2dfYXNzaWduX2xzbihjeWNsZSwgYmxvY2spKTsKIAlyZWNwLT5oX3RhaWxfbHNuID0gY3B1X3RvX2JlNjQoeGxvZ19hc3NpZ25fbHNuKHRhaWxfY3ljbGUsIHRhaWxfYmxvY2spKTsKIAlyZWNwLT5oX2ZtdCA9IGNwdV90b19iZTMyKFhMT0dfRk1UKTsKQEAgLTExNjAsMTAgKzExNjIsMTQgQEAKIAkJaWYgKGogPT0gMCAmJiAoc3RhcnRfYmxvY2sgKyBlbmRjb3VudCA+IGVhbGlnbikpIHsKIAkJCW9mZnNldCA9IFhGU19CVUZfUFRSKGJwKTsKIAkJCWJhbGlnbiA9IEJCVE9CKGVhbGlnbiAtIHN0YXJ0X2Jsb2NrKTsKLQkJCVhGU19CVUZfU0VUX1BUUihicCwgb2Zmc2V0ICsgYmFsaWduLCBCQlRPQihzZWN0YmIpKTsKLQkJCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgZWFsaWduLCBzZWN0YmIsIGJwKSkpCisJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihicCwgb2Zmc2V0ICsgYmFsaWduLAorCQkJCQkJQkJUT0Ioc2VjdGJiKSk7CisJCQlpZiAoIWVycm9yKQorCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGVhbGlnbiwgc2VjdGJiLCBicCk7CisJCQlpZiAoIWVycm9yKQorCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGJwLCBvZmZzZXQsIGJ1ZmJsa3MpOworCQkJaWYgKGVycm9yKQogCQkJCWJyZWFrOwotCQkJWEZTX0JVRl9TRVRfUFRSKGJwLCBvZmZzZXQsIGJ1ZmJsa3MpOwogCQl9CiAKIAkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHN0YXJ0X2Jsb2NrLCBlbmRjb3VudCwgYnApOwpAQCAtMjI4MCw3ICsyMjg2LDkgQEAKIAkJICogaW52YWxpZGF0ZSB0aGUgYnVmZmVyIHdoZW4gd2Ugd3JpdGUgaXQgb3V0IGJlbG93LgogCQkgKi8KIAkJaW1hcC5pbV9ibGtubyA9IDA7Ci0JCXhmc19pbWFwKGxvZy0+bF9tcCwgTlVMTCwgaW5vLCAmaW1hcCwgMCk7CisJCWVycm9yID0geGZzX2ltYXAobG9nLT5sX21wLCBOVUxMLCBpbm8sICZpbWFwLCAwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJvcjsKIAl9CiAKIAkvKgpAQCAtMjk2NCw3ICsyOTcyLDcgQEAKICAqIFByb2Nlc3MgYW4gZXh0ZW50IGZyZWUgaW50ZW50IGl0ZW0gdGhhdCB3YXMgcmVjb3ZlcmVkIGZyb20KICAqIHRoZSBsb2cuICBXZSBuZWVkIHRvIGZyZWUgdGhlIGV4dGVudHMgdGhhdCBpdCBkZXNjcmliZXMuCiAgKi8KLVNUQVRJQyB2b2lkCitTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfcHJvY2Vzc19lZmkoCiAJeGZzX21vdW50X3QJCSptcCwKIAl4ZnNfZWZpX2xvZ19pdGVtX3QJKmVmaXApCkBAIC0yOTcyLDYgKzI5ODAsNyBAQAogCXhmc19lZmRfbG9nX2l0ZW1fdAkqZWZkcDsKIAl4ZnNfdHJhbnNfdAkJKnRwOwogCWludAkJCWk7CisJaW50CQkJZXJyb3IgPSAwOwogCXhmc19leHRlbnRfdAkJKmV4dHA7CiAJeGZzX2ZzYmxvY2tfdAkJc3RhcnRibG9ja19mc2I7CiAKQEAgLTI5OTUsMjMgKzMwMDQsMzIgQEAKIAkJCSAqIGZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggaXQuCiAJCQkgKi8KIAkJCXhmc19lZmlfcmVsZWFzZShlZmlwLCBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50cyk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJCX0KIAl9CiAKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgMCk7Ci0JeGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19JVFJVTkNBVEVfTE9HX1JFUyhtcCksIDAsIDAsIDApOworCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19JVFJVTkNBVEVfTE9HX1JFUyhtcCksIDAsIDAsIDApOworCWlmIChlcnJvcikKKwkJZ290byBhYm9ydF9lcnJvcjsKIAllZmRwID0geGZzX3RyYW5zX2dldF9lZmQodHAsIGVmaXAsIGVmaXAtPmVmaV9mb3JtYXQuZWZpX25leHRlbnRzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlZmlwLT5lZmlfZm9ybWF0LmVmaV9uZXh0ZW50czsgaSsrKSB7CiAJCWV4dHAgPSAmKGVmaXAtPmVmaV9mb3JtYXQuZWZpX2V4dGVudHNbaV0pOwotCQl4ZnNfZnJlZV9leHRlbnQodHAsIGV4dHAtPmV4dF9zdGFydCwgZXh0cC0+ZXh0X2xlbik7CisJCWVycm9yID0geGZzX2ZyZWVfZXh0ZW50KHRwLCBleHRwLT5leHRfc3RhcnQsIGV4dHAtPmV4dF9sZW4pOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGFib3J0X2Vycm9yOwogCQl4ZnNfdHJhbnNfbG9nX2VmZF9leHRlbnQodHAsIGVmZHAsIGV4dHAtPmV4dF9zdGFydCwKIAkJCQkJIGV4dHAtPmV4dF9sZW4pOwogCX0KIAogCWVmaXAtPmVmaV9mbGFncyB8PSBYRlNfRUZJX1JFQ09WRVJFRDsKLQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOworCXJldHVybiBlcnJvcjsKKworYWJvcnRfZXJyb3I6CisJeGZzX3RyYW5zX2NhbmNlbCh0cCwgWEZTX1RSQU5TX0FCT1JUKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCkBAIC0zMDU5LDcgKzMwNzcsNyBAQAogICogZXZlcnl0aGluZyBhbHJlYWR5IGluIHRoZSBBSUwsIHdlIHN0b3AgcHJvY2Vzc2luZyBhcyBzb29uIGFzCiAgKiB3ZSBzZWUgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gRUZJIGluIHRoZSBBSUwuCiAgKi8KLVNUQVRJQyB2b2lkCitTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfcHJvY2Vzc19lZmlzKAogCXhsb2dfdAkJCSpsb2cpCiB7CkBAIC0zMDY3LDYgKzMwODUsNyBAQAogCXhmc19lZmlfbG9nX2l0ZW1fdAkqZWZpcDsKIAlpbnQJCQlnZW47CiAJeGZzX21vdW50X3QJCSptcDsKKwlpbnQJCQllcnJvciA9IDA7CiAKIAltcCA9IGxvZy0+bF9tcDsKIAlzcGluX2xvY2soJm1wLT5tX2FpbF9sb2NrKTsKQEAgLTMwOTEsMTEgKzMxMTAsMTQgQEAKIAkJfQogCiAJCXNwaW5fdW5sb2NrKCZtcC0+bV9haWxfbG9jayk7Ci0JCXhsb2dfcmVjb3Zlcl9wcm9jZXNzX2VmaShtcCwgZWZpcCk7CisJCWVycm9yID0geGxvZ19yZWNvdmVyX3Byb2Nlc3NfZWZpKG1wLCBlZmlwKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCQlzcGluX2xvY2soJm1wLT5tX2FpbF9sb2NrKTsKIAkJbGlwID0geGZzX3RyYW5zX25leHRfYWlsKG1wLCBsaXAsICZnZW4sIE5VTEwpOwogCX0KIAlzcGluX3VubG9jaygmbXAtPm1fYWlsX2xvY2spOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKQEAgLTMxMTUsMjEgKzMxMzcsMTggQEAKIAlpbnQJCWVycm9yOwogCiAJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19DTEVBUl9BR0lfQlVDS0VUKTsKLQl4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwgWEZTX0NMRUFSX0FHSV9CVUNLRVRfTE9HX1JFUyhtcCksIDAsIDAsIDApOwotCi0JZXJyb3IgPSB4ZnNfdHJhbnNfcmVhZF9idWYobXAsIHRwLCBtcC0+bV9kZGV2X3RhcmdwLAorCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19DTEVBUl9BR0lfQlVDS0VUX0xPR19SRVMobXApLCAwLCAwLCAwKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHhmc190cmFuc19yZWFkX2J1ZihtcCwgdHAsIG1wLT5tX2RkZXZfdGFyZ3AsCiAJCQkJICAgWEZTX0FHX0RBRERSKG1wLCBhZ25vLCBYRlNfQUdJX0RBRERSKG1wKSksCiAJCQkJICAgWEZTX0ZTU19UT19CQihtcCwgMSksIDAsICZhZ2licCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc190cmFuc19jYW5jZWwodHAsIFhGU19UUkFOU19BQk9SVCk7Ci0JCXJldHVybjsKLQl9CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9hYm9ydDsKIAorCWVycm9yID0gRUlOVkFMOwogCWFnaSA9IFhGU19CVUZfVE9fQUdJKGFnaWJwKTsKLQlpZiAoYmUzMl90b19jcHUoYWdpLT5hZ2lfbWFnaWNudW0pICE9IFhGU19BR0lfTUFHSUMpIHsKLQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgWEZTX1RSQU5TX0FCT1JUKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoYmUzMl90b19jcHUoYWdpLT5hZ2lfbWFnaWNudW0pICE9IFhGU19BR0lfTUFHSUMpCisJCWdvdG8gb3V0X2Fib3J0OwogCiAJYWdpLT5hZ2lfdW5saW5rZWRbYnVja2V0XSA9IGNwdV90b19iZTMyKE5VTExBR0lOTyk7CiAJb2Zmc2V0ID0gb2Zmc2V0b2YoeGZzX2FnaV90LCBhZ2lfdW5saW5rZWQpICsKQEAgLTMxMzcsNyArMzE1NiwxNyBAQAogCXhmc190cmFuc19sb2dfYnVmKHRwLCBhZ2licCwgb2Zmc2V0LAogCQkJICAob2Zmc2V0ICsgc2l6ZW9mKHhmc19hZ2lub190KSAtIDEpKTsKIAotCSh2b2lkKSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZXJyb3I7CisJcmV0dXJuOworCitvdXRfYWJvcnQ6CisJeGZzX3RyYW5zX2NhbmNlbCh0cCwgWEZTX1RSQU5TX0FCT1JUKTsKK291dF9lcnJvcjoKKwl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgInhsb2dfcmVjb3Zlcl9jbGVhcl9hZ2lfYnVja2V0OiAiCisJCQkiZmFpbGVkIHRvIGNsZWFyIGFnaSAlZC4gQ29udGludWluZy4iLCBhZ25vKTsKKwlyZXR1cm47CiB9CiAKIC8qCkBAIC0zMjE0LDcgKzMyNDMsOCBAQAogCQkJCQkgKiBuZXh0IGlub2RlIGluIHRoZSBidWNrZXQuCiAJCQkJCSAqLwogCQkJCQllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsCi0JCQkJCQkJJmlicCwgMCwgMCk7CisJCQkJCQkJJmlicCwgMCwgMCwKKwkJCQkJCQlYRlNfQlVGX0xPQ0spOwogCQkJCQlBU1NFUlQoZXJyb3IgfHwgKGRpcCAhPSBOVUxMKSk7CiAJCQkJfQogCkBAIC0zMjQ3LDcgKzMyNzcsNyBAQAogCQkJCQlpZiAoaXAtPmlfZC5kaV9tb2RlID09IDApCiAJCQkJCQl4ZnNfaXB1dF9uZXcoaXAsIDApOwogCQkJCQllbHNlCi0JCQkJCQlWTl9SRUxFKFhGU19JVE9WKGlwKSk7CisJCQkJCQlJUkVMRShpcCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyoKIAkJCQkJICogV2UgY2FuJ3QgcmVhZCBpbiB0aGUgaW5vZGUKQEAgLTMzNDgsNyArMzM3OCw3IEBACiAJCWRwICs9IEJCU0laRTsKIAl9CiAKLQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikpIHsKKwlpZiAoeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoJmxvZy0+bF9tcC0+bV9zYikpIHsKIAkJeGhkciA9ICh4bG9nX2luX2NvcmVfMl90ICopJmljbG9nLT5pY19oZWFkZXI7CiAJCWZvciAoIDsgaSA8IEJUT0JCKHNpemUpOyBpKyspIHsKIAkJCWogPSBpIC8gKFhMT0dfSEVBREVSX0NZQ0xFX1NJWkUgLyBCQlNJWkUpOwpAQCAtMzM4OCw3ICszNDE4LDcgQEAKIAkJCSAgICBiZTMyX3RvX2NwdShyaGVhZC0+aF9jaGtzdW0pLCBjaGtzdW0pOwogCQkgICAgY21uX2VycihDRV9ERUJVRywKICJYRlM6IERpc3JlZ2FyZCBtZXNzYWdlIGlmIGZpbGVzeXN0ZW0gd2FzIGNyZWF0ZWQgd2l0aCBub24tREVCVUcga2VybmVsIik7Ci0JCSAgICBpZiAoWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJmxvZy0+bF9tcC0+bV9zYikpIHsKKwkJICAgIGlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKSkgewogCQkJICAgIGNtbl9lcnIoQ0VfREVCVUcsCiAJCQkJIlhGUzogTG9nUiB0aGlzIGlzIGEgTG9nVjIgZmlsZXN5c3RlbVxuIik7CiAJCSAgICB9CkBAIC0zNDE1LDcgKzM0NDUsNyBAQAogCQlkcCArPSBCQlNJWkU7CiAJfQogCi0JaWYgKFhGU19TQl9WRVJTSU9OX0hBU0xPR1YyKCZsb2ctPmxfbXAtPm1fc2IpKSB7CisJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2xvZ3YyKCZsb2ctPmxfbXAtPm1fc2IpKSB7CiAJCXhoZHIgPSAoeGxvZ19pbl9jb3JlXzJfdCAqKXJoZWFkOwogCQlmb3IgKCA7IGkgPCBCVE9CQihiZTMyX3RvX2NwdShyaGVhZC0+aF9sZW4pKTsgaSsrKSB7CiAJCQlqID0gaSAvIChYTE9HX0hFQURFUl9DWUNMRV9TSVpFIC8gQkJTSVpFKTsKQEAgLTM0NDUsNyArMzQ3NSw3IEBACiAJICAgICghcmhlYWQtPmhfdmVyc2lvbiB8fAogCSAgICAoYmUzMl90b19jcHUocmhlYWQtPmhfdmVyc2lvbikgJiAoflhMT0dfVkVSU0lPTl9PS0JJVFMpKSkpKSB7CiAJCXhsb2dfd2FybigiWEZTOiAlczogdW5yZWNvZ25pc2VkIGxvZyB2ZXJzaW9uICglZCkuIiwKLQkJCV9fRlVOQ1RJT05fXywgYmUzMl90b19jcHUocmhlYWQtPmhfdmVyc2lvbikpOworCQkJX19mdW5jX18sIGJlMzJfdG9fY3B1KHJoZWFkLT5oX3ZlcnNpb24pKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCX0KIApAQCAtMzQ5NCw3ICszNTI0LDcgQEAKIAkgKiBSZWFkIHRoZSBoZWFkZXIgb2YgdGhlIHRhaWwgYmxvY2sgYW5kIGdldCB0aGUgaWNsb2cgYnVmZmVyIHNpemUgZnJvbQogCSAqIGhfc2l6ZS4gIFVzZSB0aGlzIHRvIHRlbGwgaG93IG1hbnkgc2VjdG9ycyBtYWtlIHVwIHRoZSBsb2cgaGVhZGVyLgogCSAqLwotCWlmIChYRlNfU0JfVkVSU0lPTl9IQVNMT0dWMigmbG9nLT5sX21wLT5tX3NiKSkgeworCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbG9nLT5sX21wLT5tX3NiKSkgewogCQkvKgogCQkgKiBXaGVuIHVzaW5nIHZhcmlhYmxlIGxlbmd0aCBpY2xvZ3MsIHJlYWQgZmlyc3Qgc2VjdG9yIG9mCiAJCSAqIGljbG9nIGhlYWRlciBhbmQgZXh0cmFjdCB0aGUgaGVhZGVyIHNpemUgZnJvbSBpdC4gIEdldCBhCkBAIC0zNjA0LDE1ICszNjM0LDE5IEBACiAJCQkJICogICBfZmlyc3RfLCB0aGVuIHRoZSBsb2cgc3RhcnQgKExSIGhlYWRlciBlbmQpCiAJCQkJICogICAtIG9yZGVyIGlzIGltcG9ydGFudC4KIAkJCQkgKi8KKwkJCQl3cmFwcGVkX2hibGtzID0gaGJsa3MgLSBzcGxpdF9oYmxrczsKIAkJCQlidWZhZGRyID0gWEZTX0JVRl9QVFIoaGJwKTsKLQkJCQlYRlNfQlVGX1NFVF9QVFIoaGJwLAorCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGhicCwKIAkJCQkJCWJ1ZmFkZHIgKyBCQlRPQihzcGxpdF9oYmxrcyksCiAJCQkJCQlCQlRPQihoYmxrcyAtIHNwbGl0X2hibGtzKSk7Ci0JCQkJd3JhcHBlZF9oYmxrcyA9IGhibGtzIC0gc3BsaXRfaGJsa3M7Ci0JCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgMCwgd3JhcHBlZF9oYmxrcywgaGJwKTsKKwkJCQlpZiAoIWVycm9yKQorCQkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLAorCQkJCQkJCXdyYXBwZWRfaGJsa3MsIGhicCk7CisJCQkJaWYgKCFlcnJvcikKKwkJCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoaGJwLCBidWZhZGRyLAorCQkJCQkJCUJCVE9CKGhibGtzKSk7CiAJCQkJaWYgKGVycm9yKQogCQkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQkJWEZTX0JVRl9TRVRfUFRSKGhicCwgYnVmYWRkciwgQkJUT0IoaGJsa3MpKTsKIAkJCQlpZiAoIW9mZnNldCkKIAkJCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIDAsCiAJCQkJCQkJd3JhcHBlZF9oYmxrcywgaGJwKTsKQEAgLTM2NjQsMTMgKzM2OTgsMTggQEAKIAkJCQkgKiAgIC0gb3JkZXIgaXMgaW1wb3J0YW50LgogCQkJCSAqLwogCQkJCWJ1ZmFkZHIgPSBYRlNfQlVGX1BUUihkYnApOwotCQkJCVhGU19CVUZfU0VUX1BUUihkYnAsCisJCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoZGJwLAogCQkJCQkJYnVmYWRkciArIEJCVE9CKHNwbGl0X2JibGtzKSwKIAkJCQkJCUJCVE9CKGJibGtzIC0gc3BsaXRfYmJsa3MpKTsKLQkJCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIHdyYXBwZWRfaGJsa3MsCi0JCQkJCQliYmxrcyAtIHNwbGl0X2JibGtzLCBkYnApKSkKKwkJCQlpZiAoIWVycm9yKQorCQkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCB3cmFwcGVkX2hibGtzLAorCQkJCQkJCWJibGtzIC0gc3BsaXRfYmJsa3MsCisJCQkJCQkJZGJwKTsKKwkJCQlpZiAoIWVycm9yKQorCQkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihkYnAsIGJ1ZmFkZHIsCisJCQkJCQkJaF9zaXplKTsKKwkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCQlYRlNfQlVGX1NFVF9QVFIoZGJwLCBidWZhZGRyLCBoX3NpemUpOwogCQkJCWlmICghb2Zmc2V0KQogCQkJCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgd3JhcHBlZF9oYmxrcywKIAkJCQkJCWJibGtzIC0gc3BsaXRfYmJsa3MsIGRicCk7CkBAIC0zODI2LDcgKzM4NjUsOCBAQAogCVhGU19CVUZfUkVBRChicCk7CiAJWEZTX0JVRl9VTkFTWU5DKGJwKTsKIAl4ZnNiZHN0cmF0KGxvZy0+bF9tcCwgYnApOwotCWlmICgoZXJyb3IgPSB4ZnNfaW93YWl0KGJwKSkpIHsKKwllcnJvciA9IHhmc19pb3dhaXQoYnApOworCWlmIChlcnJvcikgewogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19kb19yZWNvdmVyIiwKIAkJCQkgIGxvZy0+bF9tcCwgYnAsIFhGU19CVUZfQUREUihicCkpOwogCQlBU1NFUlQoMCk7CkBAIC0zODM4LDcgKzM4NzgsNyBAQAogCXNicCA9ICZsb2ctPmxfbXAtPm1fc2I7CiAJeGZzX3NiX2Zyb21fZGlzayhzYnAsIFhGU19CVUZfVE9fU0JQKGJwKSk7CiAJQVNTRVJUKHNicC0+c2JfbWFnaWNudW0gPT0gWEZTX1NCX01BR0lDKTsKLQlBU1NFUlQoWEZTX1NCX0dPT0RfVkVSU0lPTihzYnApKTsKKwlBU1NFUlQoeGZzX3NiX2dvb2RfdmVyc2lvbihzYnApKTsKIAl4ZnNfYnVmX3JlbHNlKGJwKTsKIAogCS8qIFdlJ3ZlIHJlLXJlYWQgdGhlIHN1cGVyYmxvY2sgc28gcmUtaW5pdGlhbGl6ZSBwZXItY3B1IGNvdW50ZXJzICovCkBAIC0zOTE3LDcgKzM5NTcsMTQgQEAKIAkgKiByYXRoZXIgdGhhbiBhY2NlcHRpbmcgbmV3IHJlcXVlc3RzLgogCSAqLwogCWlmIChsb2ctPmxfZmxhZ3MgJiBYTE9HX1JFQ09WRVJZX05FRURFRCkgewotCQl4bG9nX3JlY292ZXJfcHJvY2Vzc19lZmlzKGxvZyk7CisJCWludAllcnJvcjsKKwkJZXJyb3IgPSB4bG9nX3JlY292ZXJfcHJvY2Vzc19lZmlzKGxvZyk7CisJCWlmIChlcnJvcikgeworCQkJY21uX2VycihDRV9BTEVSVCwKKwkJCQkiRmFpbGVkIHRvIHJlY292ZXIgRUZJcyBvbiBmaWxlc3lzdGVtOiAlcyIsCisJCQkJbG9nLT5sX21wLT5tX2ZzbmFtZSk7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KIAkJLyoKIAkJICogU3luYyB0aGUgbG9nIHRvIGdldCBhbGwgdGhlIEVGSXMgb3V0IG9mIHRoZSBBSUwuCiAJCSAqIFRoaXMgaXNuJ3QgYWJzb2x1dGVseSBuZWNlc3NhcnksIGJ1dCBpdCBoZWxwcyBpbgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDY0MDliMzcuLjJmZWM0NTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTQzLDggKzQzLDkgQEAKICNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKICNpbmNsdWRlICJ4ZnNfZnNvcHMuaCIKKyNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKIAotU1RBVElDIHZvaWQJeGZzX21vdW50X2xvZ19zYnVuaXQoeGZzX21vdW50X3QgKiwgX19pbnQ2NF90KTsKK1NUQVRJQyBpbnQJeGZzX21vdW50X2xvZ19zYih4ZnNfbW91bnRfdCAqLCBfX2ludDY0X3QpOwogU1RBVElDIGludAl4ZnNfdXVpZF9tb3VudCh4ZnNfbW91bnRfdCAqKTsKIFNUQVRJQyB2b2lkCXhmc191dWlkX3VubW91bnQoeGZzX21vdW50X3QgKm1wKTsKIFNUQVRJQyB2b2lkCXhmc191bm1vdW50ZnNfd2FpdCh4ZnNfbW91bnRfdCAqKTsKQEAgLTU3LDcgKzU4LDcgQEAKIFNUQVRJQyB2b2lkCXhmc19pY3NiX3N5bmNfY291bnRlcnMoeGZzX21vdW50X3QgKik7CiBTVEFUSUMgaW50CXhmc19pY3NiX21vZGlmeV9jb3VudGVycyh4ZnNfbW91bnRfdCAqLCB4ZnNfc2JfZmllbGRfdCwKIAkJCQkJCWludDY0X3QsIGludCk7Ci1TVEFUSUMgaW50CXhmc19pY3NiX2Rpc2FibGVfY291bnRlcih4ZnNfbW91bnRfdCAqLCB4ZnNfc2JfZmllbGRfdCk7CitTVEFUSUMgdm9pZAl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIoeGZzX21vdW50X3QgKiwgeGZzX3NiX2ZpZWxkX3QpOwogCiAjZWxzZQogCkBAIC0xMTksNiArMTIwLDcgQEAKICAgICB7IG9mZnNldG9mKHhmc19zYl90LCBzYl9sb2dzZWN0c2l6ZSksMCB9LAogICAgIHsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2xvZ3N1bml0KSwJIDAgfSwKICAgICB7IG9mZnNldG9mKHhmc19zYl90LCBzYl9mZWF0dXJlczIpLAkgMCB9LAorICAgIHsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2JhZF9mZWF0dXJlczIpLCAwIH0sCiAgICAgeyBzaXplb2YoeGZzX3NiX3QpLAkJCSAwIH0KIH07CiAKQEAgLTIyNSw3ICsyMjcsNyBAQAogCQlyZXR1cm4gWEZTX0VSUk9SKEVXUk9OR0ZTKTsKIAl9CiAKLQlpZiAoIVhGU19TQl9HT09EX1ZFUlNJT04oc2JwKSkgeworCWlmICgheGZzX3NiX2dvb2RfdmVyc2lvbihzYnApKSB7CiAJCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLCAiYmFkIHZlcnNpb24iKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFV1JPTkdGUyk7CiAJfQpAQCAtMzAwLDcgKzMwMiw3IEBACiAJLyoKIAkgKiBWZXJzaW9uIDEgZGlyZWN0b3J5IGZvcm1hdCBoYXMgbmV2ZXIgd29ya2VkIG9uIExpbnV4LgogCSAqLwotCWlmICh1bmxpa2VseSghWEZTX1NCX1ZFUlNJT05fSEFTRElSVjIoc2JwKSkpIHsKKwlpZiAodW5saWtlbHkoIXhmc19zYl92ZXJzaW9uX2hhc2RpcnYyKHNicCkpKSB7CiAJCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLAogCQkJImZpbGUgc3lzdGVtIHVzaW5nIHZlcnNpb24gMSBkaXJlY3RvcnkgZm9ybWF0Iik7CiAJCXJldHVybiBYRlNfRVJST1IoRU5PU1lTKTsKQEAgLTQ0OSw2ICs0NTEsNyBAQAogCXRvLT5zYl9sb2dzZWN0c2l6ZSA9IGJlMTZfdG9fY3B1KGZyb20tPnNiX2xvZ3NlY3RzaXplKTsKIAl0by0+c2JfbG9nc3VuaXQgPSBiZTMyX3RvX2NwdShmcm9tLT5zYl9sb2dzdW5pdCk7CiAJdG8tPnNiX2ZlYXR1cmVzMiA9IGJlMzJfdG9fY3B1KGZyb20tPnNiX2ZlYXR1cmVzMik7CisJdG8tPnNiX2JhZF9mZWF0dXJlczIgPSBiZTMyX3RvX2NwdShmcm9tLT5zYl9iYWRfZmVhdHVyZXMyKTsKIH0KIAogLyoKQEAgLTc4MSw3ICs3ODQsNyBAQAogCQkgKiBVcGRhdGUgc3VwZXJibG9jayB3aXRoIG5ldyB2YWx1ZXMKIAkJICogYW5kIGxvZyBjaGFuZ2VzCiAJCSAqLwotCQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTREFMSUdOKHNicCkpIHsKKwkJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2RhbGlnbihzYnApKSB7CiAJCQlpZiAoc2JwLT5zYl91bml0ICE9IG1wLT5tX2RhbGlnbikgewogCQkJCXNicC0+c2JfdW5pdCA9IG1wLT5tX2RhbGlnbjsKIAkJCQkqdXBkYXRlX2ZsYWdzIHw9IFhGU19TQl9VTklUOwpAQCAtNzkyLDcgKzc5NSw3IEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9OT0FMSUdOKSAhPSBYRlNfTU9VTlRfTk9BTElHTiAmJgotCQkgICAgWEZTX1NCX1ZFUlNJT05fSEFTREFMSUdOKCZtcC0+bV9zYikpIHsKKwkJICAgIHhmc19zYl92ZXJzaW9uX2hhc2RhbGlnbigmbXAtPm1fc2IpKSB7CiAJCQltcC0+bV9kYWxpZ24gPSBzYnAtPnNiX3VuaXQ7CiAJCQltcC0+bV9zd2lkdGggPSBzYnAtPnNiX3dpZHRoOwogCX0KQEAgLTg2OSw3ICs4NzIsNyBAQAogU1RBVElDIHZvaWQKIHhmc19zZXRfaW5vYWxpZ25tZW50KHhmc19tb3VudF90ICptcCkKIHsKLQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTQUxJR04oJm1wLT5tX3NiKSAmJgorCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNhbGlnbigmbXAtPm1fc2IpICYmCiAJICAgIG1wLT5tX3NiLnNiX2lub2FsaWdubXQgPj0KIAkgICAgWEZTX0JfVE9fRlNCVChtcCwgbXAtPm1faW5vZGVfY2x1c3Rlcl9zaXplKSkKIAkJbXAtPm1faW5vYWxpZ25fbWFzayA9IG1wLT5tX3NiLnNiX2lub2FsaWdubXQgLSAxOwpAQCAtOTU0LDcgKzk1Nyw2IEBACiB7CiAJeGZzX3NiX3QJKnNicCA9ICYobXAtPm1fc2IpOwogCXhmc19pbm9kZV90CSpyaXA7Ci0JYmh2X3Zub2RlX3QJKnJ2cCA9IE5VTEw7CiAJX191aW50NjRfdAlyZXNibGtzOwogCV9faW50NjRfdAl1cGRhdGVfZmxhZ3MgPSAwTEw7CiAJdWludAkJcXVvdGFtb3VudCwgcXVvdGFmbGFnczsKQEAgLTk2MiwxNCArOTY0LDQxIEBACiAJaW50CQl1dWlkX21vdW50ZWQgPSAwOwogCWludAkJZXJyb3IgPSAwOwogCi0JaWYgKG1wLT5tX3NiX2JwID09IE5VTEwpIHsKLQkJZXJyb3IgPSB4ZnNfcmVhZHNiKG1wLCBtZnNpX2ZsYWdzKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCX0KIAl4ZnNfbW91bnRfY29tbW9uKG1wLCBzYnApOwogCiAJLyoKKwkgKiBDaGVjayBmb3IgYSBtaXNtYXRjaGVkIGZlYXR1cmVzMiB2YWx1ZXMuICBPbGRlciBrZXJuZWxzCisJICogcmVhZCAmIHdyb3RlIGludG8gdGhlIHdyb25nIHNiIG9mZnNldCBmb3Igc2JfZmVhdHVyZXMyCisJICogb24gc29tZSBwbGF0Zm9ybXMgZHVlIHRvIHhmc19zYl90IG5vdCBiZWluZyA2NGJpdCBzaXplIGFsaWduZWQKKwkgKiB3aGVuIHNiX2ZlYXR1cmVzMiB3YXMgYWRkZWQsIHdoaWNoIG1hZGUgb2xkZXIgc3VwZXJibG9jaworCSAqIHJlYWRpbmcvd3JpdGluZyByb3V0aW5lcyBzd2FwIGl0IGFzIGEgNjQtYml0IHZhbHVlLgorCSAqCisJICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSBtYWtlIGJvdGggc2xvdHMgZXF1YWwuCisJICoKKwkgKiBJZiB3ZSBkZXRlY3QgYSBtaXNtYXRjaGVkIGZpZWxkLCB3ZSBPUiB0aGUgc2V0IGJpdHMgaW50byB0aGUKKwkgKiBleGlzdGluZyBmZWF0dXJlczIgZmllbGQgaW4gY2FzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIG1vZGlmaWVkOyB3ZQorCSAqIGRvbid0IHdhbnQgdG8gbG9zZSBhbnkgZmVhdHVyZXMuICBXZSB0aGVuIHVwZGF0ZSB0aGUgYmFkIGxvY2F0aW9uCisJICogd2l0aCB0aGUgT1JlZCB2YWx1ZSBzbyB0aGF0IG9sZGVyIGtlcm5lbHMgd2lsbCBzZWUgYW55IGZlYXR1cmVzMgorCSAqIGZsYWdzLCBhbmQgbWFyayB0aGUgdHdvIGZpZWxkcyBhcyBuZWVkaW5nIHVwZGF0ZXMgb25jZSB0aGUKKwkgKiB0cmFuc2FjdGlvbiBzdWJzeXN0ZW0gaXMgb25saW5lLgorCSAqLworCWlmICh4ZnNfc2JfaGFzX21pc21hdGNoZWRfZmVhdHVyZXMyKHNicCkpIHsKKwkJY21uX2VycihDRV9XQVJOLAorCQkJIlhGUzogY29ycmVjdGluZyBzYl9mZWF0dXJlcyBhbGlnbm1lbnQgcHJvYmxlbSIpOworCQlzYnAtPnNiX2ZlYXR1cmVzMiB8PSBzYnAtPnNiX2JhZF9mZWF0dXJlczI7CisJCXNicC0+c2JfYmFkX2ZlYXR1cmVzMiA9IHNicC0+c2JfZmVhdHVyZXMyOworCQl1cGRhdGVfZmxhZ3MgfD0gWEZTX1NCX0ZFQVRVUkVTMiB8IFhGU19TQl9CQURfRkVBVFVSRVMyOworCisJCS8qCisJCSAqIFJlLWNoZWNrIGZvciBBVFRSMiBpbiBjYXNlIGl0IHdhcyBmb3VuZCBpbiBiYWRfZmVhdHVyZXMyCisJCSAqIHNsb3QuCisJCSAqLworCQlpZiAoeGZzX3NiX3ZlcnNpb25faGFzYXR0cjIoJm1wLT5tX3NiKSkKKwkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9BVFRSMjsKKworCX0KKworCS8qCiAJICogQ2hlY2sgaWYgc2JfYWdibG9ja3MgaXMgYWxpZ25lZCBhdCBzdHJpcGUgYm91bmRhcnkKIAkgKiBJZiBzYl9hZ2Jsb2NrcyBpcyBOT1QgYWxpZ25lZCB0dXJuIG9mZiBtX2RhbGlnbiBzaW5jZQogCSAqIGFsbG9jYXRvciBhbGlnbm1lbnQgaXMgd2l0aGluIGFuIGFnLCB0aGVyZWZvcmUgYWcgaGFzCkBAIC0xMTI5LDcgKzExNTgsNiBAQAogCX0KIAogCUFTU0VSVChyaXAgIT0gTlVMTCk7Ci0JcnZwID0gWEZTX0lUT1YocmlwKTsKIAogCWlmICh1bmxpa2VseSgocmlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgIT0gU19JRkRJUikpIHsKIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBjb3JydXB0ZWQgcm9vdCBpbm9kZSIpOwpAQCAtMTE1OSwxMSArMTE4NywxNSBAQAogCX0KIAogCS8qCi0JICogSWYgZnMgaXMgbm90IG1vdW50ZWQgcmVhZG9ubHksIHRoZW4gdXBkYXRlIHRoZSBzdXBlcmJsb2NrCi0JICogdW5pdCBhbmQgd2lkdGggY2hhbmdlcy4KKwkgKiBJZiBmcyBpcyBub3QgbW91bnRlZCByZWFkb25seSwgdGhlbiB1cGRhdGUgdGhlIHN1cGVyYmxvY2sgY2hhbmdlcy4KIAkgKi8KLQlpZiAodXBkYXRlX2ZsYWdzICYmICEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSkKLQkJeGZzX21vdW50X2xvZ19zYnVuaXQobXAsIHVwZGF0ZV9mbGFncyk7CisJaWYgKHVwZGF0ZV9mbGFncyAmJiAhKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKKwkJZXJyb3IgPSB4ZnNfbW91bnRfbG9nX3NiKG1wLCB1cGRhdGVfZmxhZ3MpOworCQlpZiAoZXJyb3IpIHsKKwkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmFpbGVkIHRvIHdyaXRlIHNiIGNoYW5nZXMiKTsKKwkJCWdvdG8gZXJyb3I0OworCQl9CisJfQogCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBYRlMgcXVvdGEgbWFuYWdlbWVudCBzdWJzeXN0ZW0gZm9yIHRoaXMgbW91bnQKQEAgLTEyMDAsMTIgKzEyMzIsMTUgQEAKIAkgKgogCSAqIFdlIGRlZmF1bHQgdG8gNSUgb3IgMTAyNCBmc2JzIG9mIHNwYWNlIHJlc2VydmVkLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KIAkgKiBUaGlzIG1heSBkcml2ZSB1cyBzdHJhaWdodCB0byBFTk9TUEMgb24gbW91bnQsIGJ1dCB0aGF0IGltcGxpZXMKLQkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4KKwkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4gV2FybiBpZiB0aGlzIG9jY3Vycy4KIAkgKi8KIAlyZXNibGtzID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKIAlkb19kaXYocmVzYmxrcywgMjApOwogCXJlc2Jsa3MgPSBtaW5fdChfX3VpbnQ2NF90LCByZXNibGtzLCAxMDI0KTsKLQl4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKKwllcnJvciA9IHhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOworCWlmIChlcnJvcikKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBVbmFibGUgdG8gYWxsb2NhdGUgcmVzZXJ2ZSBibG9ja3MuICIKKwkJCQkiQ29udGludWluZyB3aXRob3V0IGEgcmVzZXJ2ZSBwb29sLiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEyMTMsNyArMTI0OCw3IEBACiAJLyoKIAkgKiBGcmVlIHVwIHRoZSByb290IGlub2RlLgogCSAqLwotCVZOX1JFTEUocnZwKTsKKwlJUkVMRShyaXApOwogIGVycm9yMzoKIAl4ZnNfbG9nX3VubW91bnRfZGVhbGxvYyhtcCk7CiAgZXJyb3IyOgpAQCAtMTI0MSw2ICsxMjc2LDcgQEAKIHhmc191bm1vdW50ZnMoeGZzX21vdW50X3QgKm1wLCBzdHJ1Y3QgY3JlZCAqY3IpCiB7CiAJX191aW50NjRfdAlyZXNibGtzOworCWludAkJZXJyb3IgPSAwOwogCiAJLyoKIAkgKiBXZSBjYW4gcG90ZW50aWFsbHkgZGVhZGxvY2sgaGVyZSBpZiB3ZSBoYXZlIGFuIGlub2RlIGNsdXN0ZXIKQEAgLTEyODQsOSArMTMyMCwxNSBAQAogCSAqIHZhbHVlIGRvZXMgbm90IG1hdHRlci4uLi4KIAkgKi8KIAlyZXNibGtzID0gMDsKLQl4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKKwllcnJvciA9IHhmc19yZXNlcnZlX2Jsb2NrcyhtcCwgJnJlc2Jsa3MsIE5VTEwpOworCWlmIChlcnJvcikKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBVbmFibGUgdG8gZnJlZSByZXNlcnZlZCBibG9jayBwb29sLiAiCisJCQkJIkZyZWVzcGFjZSBtYXkgbm90IGJlIGNvcnJlY3Qgb24gbmV4dCBtb3VudC4iKTsKIAotCXhmc19sb2dfc2Jjb3VudChtcCwgMSk7CisJZXJyb3IgPSB4ZnNfbG9nX3NiY291bnQobXAsIDEpOworCWlmIChlcnJvcikKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBVbmFibGUgdG8gdXBkYXRlIHN1cGVyYmxvY2sgY291bnRlcnMuICIKKwkJCQkiRnJlZXNwYWNlIG1heSBub3QgYmUgY29ycmVjdCBvbiBuZXh0IG1vdW50LiIpOwogCXhmc191bm1vdW50ZnNfd3JpdGVzYihtcCk7CiAJeGZzX3VubW91bnRmc193YWl0KG1wKTsgCQkvKiB3YWl0IGZvciBhc3luYyBidWZzICovCiAJeGZzX2xvZ191bm1vdW50KG1wKTsJCQkvKiBEb25lISBObyBtb3JlIGZzIG9wcy4gKi8KQEAgLTEzNzgsOSArMTQyMCw4IEBACiAJeGZzX21vZF9zYih0cCwgWEZTX1NCX0lGUkVFIHwgWEZTX1NCX0lDT1VOVCB8IFhGU19TQl9GREJMT0NLUyk7CiAJaWYgKHN5bmMpCiAJCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0KLQlyZXR1cm4gMDsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOworCXJldHVybiBlcnJvcjsKIH0KIAogU1RBVElDIHZvaWQKQEAgLTE0MjksNyArMTQ3MCw2IEBACiAJCVhGU19CVUZfVU5BU1lOQyhzYnApOwogCQlBU1NFUlQoWEZTX0JVRl9UQVJHRVQoc2JwKSA9PSBtcC0+bV9kZGV2X3RhcmdwKTsKIAkJeGZzYmRzdHJhdChtcCwgc2JwKTsKLQkJLyogTmV2ZXJtaW5kIGVycm9ycyB3ZSBtaWdodCBnZXQgaGVyZS4gKi8KIAkJZXJyb3IgPSB4ZnNfaW93YWl0KHNicCk7CiAJCWlmIChlcnJvcikKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4ZnNfdW5tb3VudGZzX3dyaXRlc2IiLApAQCAtMTg3NSwyNSArMTkxNSwzMCBAQAogCiAvKgogICogVXNlZCB0byBsb2cgY2hhbmdlcyB0byB0aGUgc3VwZXJibG9jayB1bml0IGFuZCB3aWR0aCBmaWVsZHMgd2hpY2ggY291bGQKLSAqIGJlIGFsdGVyZWQgYnkgdGhlIG1vdW50IG9wdGlvbnMuIE9ubHkgdGhlIGZpcnN0IHN1cGVyYmxvY2sgaXMgdXBkYXRlZC4KKyAqIGJlIGFsdGVyZWQgYnkgdGhlIG1vdW50IG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IHBvdGVudGlhbCBzYl9mZWF0dXJlczIKKyAqIGZpeHVwLiBPbmx5IHRoZSBmaXJzdCBzdXBlcmJsb2NrIGlzIHVwZGF0ZWQuCiAgKi8KLVNUQVRJQyB2b2lkCi14ZnNfbW91bnRfbG9nX3NidW5pdCgKK1NUQVRJQyBpbnQKK3hmc19tb3VudF9sb2dfc2IoCiAJeGZzX21vdW50X3QJKm1wLAogCV9faW50NjRfdAlmaWVsZHMpCiB7CiAJeGZzX3RyYW5zX3QJKnRwOworCWludAkJZXJyb3I7CiAKLQlBU1NFUlQoZmllbGRzICYgKFhGU19TQl9VTklUfFhGU19TQl9XSURUSHxYRlNfU0JfVVVJRCkpOworCUFTU0VSVChmaWVsZHMgJiAoWEZTX1NCX1VOSVQgfCBYRlNfU0JfV0lEVEggfCBYRlNfU0JfVVVJRCB8CisJCQkgWEZTX1NCX0ZFQVRVUkVTMiB8IFhGU19TQl9CQURfRkVBVFVSRVMyKSk7CiAKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1NCX1VOSVQpOwotCWlmICh4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwgbXAtPm1fc2Iuc2Jfc2VjdHNpemUgKyAxMjgsIDAsIDAsCi0JCQkJWEZTX0RFRkFVTFRfTE9HX0NPVU5UKSkgeworCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIG1wLT5tX3NiLnNiX3NlY3RzaXplICsgMTI4LCAwLCAwLAorCQkJCVhGU19ERUZBVUxUX0xPR19DT1VOVCk7CisJaWYgKGVycm9yKSB7CiAJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQlyZXR1cm47CisJCXJldHVybiBlcnJvcjsKIAl9CiAJeGZzX21vZF9zYih0cCwgZmllbGRzKTsKLQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOworCXJldHVybiBlcnJvcjsKIH0KIAogCkBAIC0yMTU0LDcgKzIxOTksNyBAQAogCXJldHVybiB0ZXN0X2JpdChmaWVsZCwgJm1wLT5tX2ljc2JfY291bnRlcnMpOwogfQogCi1TVEFUSUMgaW50CitTVEFUSUMgdm9pZAogeGZzX2ljc2JfZGlzYWJsZV9jb3VudGVyKAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfc2JfZmllbGRfdAlmaWVsZCkKQEAgLTIxNzIsNyArMjIxNyw3IEBACiAJICogdGhlIG1faWNzYl9tdXRleC4KIAkgKi8KIAlpZiAoeGZzX2ljc2JfY291bnRlcl9kaXNhYmxlZChtcCwgZmllbGQpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJeGZzX2ljc2JfbG9ja19hbGxfY291bnRlcnMobXApOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChmaWVsZCwgJm1wLT5tX2ljc2JfY291bnRlcnMpKSB7CkBAIC0yMTk1LDggKzIyNDAsNiBAQAogCX0KIAogCXhmc19pY3NiX3VubG9ja19hbGxfY291bnRlcnMobXApOwotCi0JcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyB2b2lkCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggZjdjNjIwZS4uMWVkNTc1MSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtNjYsMTcgKzY2LDE3IEBACiAgKiBQcm90b3R5cGVzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZSBEYXRhIE1pZ3JhdGlvbiBzdWJzeXN0ZW0uCiAgKi8KIAotdHlwZWRlZiBpbnQJKCp4ZnNfc2VuZF9kYXRhX3QpKGludCwgYmh2X3Zub2RlX3QgKiwKLQkJCXhmc19vZmZfdCwgc2l6ZV90LCBpbnQsIGJodl92cndsb2NrX3QgKik7Cit0eXBlZGVmIGludAkoKnhmc19zZW5kX2RhdGFfdCkoaW50LCBzdHJ1Y3QgeGZzX2lub2RlICosCisJCQl4ZnNfb2ZmX3QsIHNpemVfdCwgaW50LCBpbnQgKik7CiB0eXBlZGVmIGludAkoKnhmc19zZW5kX21tYXBfdCkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVpbnQpOwotdHlwZWRlZiBpbnQJKCp4ZnNfc2VuZF9kZXN0cm95X3QpKGJodl92bm9kZV90ICosIGRtX3JpZ2h0X3QpOwordHlwZWRlZiBpbnQJKCp4ZnNfc2VuZF9kZXN0cm95X3QpKHN0cnVjdCB4ZnNfaW5vZGUgKiwgZG1fcmlnaHRfdCk7CiB0eXBlZGVmIGludAkoKnhmc19zZW5kX25hbWVzcF90KShkbV9ldmVudHR5cGVfdCwgc3RydWN0IHhmc19tb3VudCAqLAotCQkJYmh2X3Zub2RlX3QgKiwKLQkJCWRtX3JpZ2h0X3QsIGJodl92bm9kZV90ICosIGRtX3JpZ2h0X3QsCi0JCQljaGFyICosIGNoYXIgKiwgbW9kZV90LCBpbnQsIGludCk7CisJCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCisJCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCisJCQljb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgbW9kZV90LCBpbnQsIGludCk7CiB0eXBlZGVmIGludAkoKnhmc19zZW5kX21vdW50X3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgZG1fcmlnaHRfdCwKIAkJCWNoYXIgKiwgY2hhciAqKTsKLXR5cGVkZWYgdm9pZAkoKnhmc19zZW5kX3VubW91bnRfdCkoc3RydWN0IHhmc19tb3VudCAqLCBiaHZfdm5vZGVfdCAqLAordHlwZWRlZiB2b2lkCSgqeGZzX3NlbmRfdW5tb3VudF90KShzdHJ1Y3QgeGZzX21vdW50ICosIHN0cnVjdCB4ZnNfaW5vZGUgKiwKIAkJCWRtX3JpZ2h0X3QsIG1vZGVfdCwgaW50LCBpbnQpOwogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZG1vcHMgewpAQCAtODgsMjAgKzg4LDIwIEBACiAJeGZzX3NlbmRfdW5tb3VudF90CXhmc19zZW5kX3VubW91bnQ7CiB9IHhmc19kbW9wc190OwogCi0jZGVmaW5lIFhGU19TRU5EX0RBVEEobXAsIGV2LHZwLG9mZixsZW4sZmwsbG9jaykgXAotCSgqKG1wKS0+bV9kbV9vcHMtPnhmc19zZW5kX2RhdGEpKGV2LHZwLG9mZixsZW4sZmwsbG9jaykKKyNkZWZpbmUgWEZTX1NFTkRfREFUQShtcCwgZXYsaXAsb2ZmLGxlbixmbCxsb2NrKSBcCisJKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfZGF0YSkoZXYsaXAsb2ZmLGxlbixmbCxsb2NrKQogI2RlZmluZSBYRlNfU0VORF9NTUFQKG1wLCB2bWEsZmwpIFwKIAkoKihtcCktPm1fZG1fb3BzLT54ZnNfc2VuZF9tbWFwKSh2bWEsZmwpCi0jZGVmaW5lIFhGU19TRU5EX0RFU1RST1kobXAsIHZwLHJpZ2h0KSBcCi0JKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfZGVzdHJveSkodnAscmlnaHQpCisjZGVmaW5lIFhGU19TRU5EX0RFU1RST1kobXAsIGlwLHJpZ2h0KSBcCisJKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfZGVzdHJveSkoaXAscmlnaHQpCiAjZGVmaW5lIFhGU19TRU5EX05BTUVTUChtcCwgZXYsYjEscjEsYjIscjIsbjEsbjIsbW9kZSxydmFsLGZsKSBcCiAJKCoobXApLT5tX2RtX29wcy0+eGZzX3NlbmRfbmFtZXNwKShldixOVUxMLGIxLHIxLGIyLHIyLG4xLG4yLG1vZGUscnZhbCxmbCkKICNkZWZpbmUgWEZTX1NFTkRfUFJFVU5NT1VOVChtcCxiMSxyMSxiMixyMixuMSxuMixtb2RlLHJ2YWwsZmwpIFwKIAkoKihtcCktPm1fZG1fb3BzLT54ZnNfc2VuZF9uYW1lc3ApKERNX0VWRU5UX1BSRVVOTU9VTlQsbXAsYjEscjEsYjIscjIsbjEsbjIsbW9kZSxydmFsLGZsKQogI2RlZmluZSBYRlNfU0VORF9NT1VOVChtcCxyaWdodCxwYXRoLG5hbWUpIFwKIAkoKihtcCktPm1fZG1fb3BzLT54ZnNfc2VuZF9tb3VudCkobXAscmlnaHQscGF0aCxuYW1lKQotI2RlZmluZSBYRlNfU0VORF9VTk1PVU5UKG1wLCB2cCxyaWdodCxtb2RlLHJ2YWwsZmwpIFwKLQkoKihtcCktPm1fZG1fb3BzLT54ZnNfc2VuZF91bm1vdW50KShtcCx2cCxyaWdodCxtb2RlLHJ2YWwsZmwpCisjZGVmaW5lIFhGU19TRU5EX1VOTU9VTlQobXAsIGlwLHJpZ2h0LG1vZGUscnZhbCxmbCkgXAorCSgqKG1wKS0+bV9kbV9vcHMtPnhmc19zZW5kX3VubW91bnQpKG1wLGlwLHJpZ2h0LG1vZGUscnZhbCxmbCkKIAogCiAvKgpAQCAtMjIwLDcgKzIyMCw3IEBACiAjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2FpbCB7Ci0JeGZzX2FpbF9lbnRyeV90CQl4YV9haWw7CisJc3RydWN0IGxpc3RfaGVhZAl4YV9haWw7CiAJdWludAkJCXhhX2dlbjsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnhhX3Rhc2s7CiAJeGZzX2xzbl90CQl4YV90YXJnZXQ7CkBAIC0zNjYsNyArMzY2LDcgQEAKICNkZWZpbmUgWEZTX01PVU5UX1NNQUxMX0lOVU1TCSgxVUxMIDw8IDE1KQkvKiB1c2VycyB3YW50cyAzMmJpdCBpbm9kZXMgKi8KICNkZWZpbmUgWEZTX01PVU5UX05PVVVJRAkoMVVMTCA8PCAxNikJLyogaWdub3JlIHV1aWQgZHVyaW5nIG1vdW50ICovCiAjZGVmaW5lIFhGU19NT1VOVF9CQVJSSUVSCSgxVUxMIDw8IDE3KQotI2RlZmluZSBYRlNfTU9VTlRfSURFTEVURQkoMVVMTCA8PCAxOCkJLyogZGVsZXRlIGVtcHR5IGlub2RlIGNsdXN0ZXJzKi8KKyNkZWZpbmUgWEZTX01PVU5UX0lLRUVQCQkoMVVMTCA8PCAxOCkJLyoga2VlcCBlbXB0eSBpbm9kZSBjbHVzdGVycyovCiAjZGVmaW5lIFhGU19NT1VOVF9TV0FMTE9DCSgxVUxMIDw8IDE5KQkvKiB0dXJuIG9uIHN0cmlwZSB3aWR0aAogCQkJCQkJICogYWxsb2NhdGlvbiAqLwogI2RlZmluZSBYRlNfTU9VTlRfUkRPTkxZCSgxVUxMIDw8IDIwKQkvKiByZWFkLW9ubHkgZnMgKi8KQEAgLTQwMSw3ICs0MDEsNyBAQAogCiAvKgogICogQWxsb3cgbGFyZ2UgYmxvY2sgc2l6ZXMgdG8gYmUgcmVwb3J0ZWQgdG8gdXNlcnNwYWNlIHByb2dyYW1zIGlmIHRoZQotICogImxhcmdlaW8iIG1vdW50IG9wdGlvbiBpcyB1c2VkLiAKKyAqICJsYXJnZWlvIiBtb3VudCBvcHRpb24gaXMgdXNlZC4KICAqCiAgKiBJZiBjb21wYXRpYmlsaXR5IG1vZGUgaXMgc3BlY2lmaWVkLCBzaW1wbHkgcmV0dXJuIHRoZSBiYXNpYyB1bml0IG9mIGNhY2hpbmcKICAqIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGluZWZmaWNpZW50IHJlYWQvbW9kaWZ5L3dyaXRlIEkvTyBmcm9tIHVzZXIgYXBwcy4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcmVuYW1lLmMgYi9mcy94ZnMveGZzX3JlbmFtZS5jCmluZGV4IDdlYjE1N2EuLmVlMzcxODkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcmVuYW1lLmMKKysrIGIvZnMveGZzL3hmc19yZW5hbWUuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgInhmc19ibWFwLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3F1b3RhLmgiCi0jaW5jbHVkZSAieGZzX3JlZmNhY2hlLmgiCiAjaW5jbHVkZSAieGZzX3V0aWxzLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3NwYWNlLmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCkBAIC04NCwyNSArODMsMjMgQEAKICAqLwogU1RBVElDIGludAogeGZzX2xvY2tfZm9yX3JlbmFtZSgKLQl4ZnNfaW5vZGVfdAkqZHAxLAkvKiBvbGQgKHNvdXJjZSkgZGlyZWN0b3J5IGlub2RlICovCi0JeGZzX2lub2RlX3QJKmRwMiwJLyogbmV3ICh0YXJnZXQpIGRpcmVjdG9yeSBpbm9kZSAqLwotCWJodl92bmFtZV90CSp2bmFtZTEsLyogb2xkIGVudHJ5IG5hbWUgKi8KLQliaHZfdm5hbWVfdAkqdm5hbWUyLC8qIG5ldyBlbnRyeSBuYW1lICovCi0JeGZzX2lub2RlX3QJKippcHAxLAkvKiBpbm9kZSBvZiBvbGQgZW50cnkgKi8KLQl4ZnNfaW5vZGVfdAkqKmlwcDIsCS8qIGlub2RlIG9mIG5ldyBlbnRyeSwgaWYgaXQKKwl4ZnNfaW5vZGVfdAkqZHAxLAkvKiBpbjogb2xkIChzb3VyY2UpIGRpcmVjdG9yeSBpbm9kZSAqLworCXhmc19pbm9kZV90CSpkcDIsCS8qIGluOiBuZXcgKHRhcmdldCkgZGlyZWN0b3J5IGlub2RlICovCisJeGZzX2lub2RlX3QJKmlwMSwJLyogaW46IGlub2RlIG9mIG9sZCBlbnRyeSAqLworCXN0cnVjdCB4ZnNfbmFtZQkqbmFtZTIsCS8qIGluOiBuZXcgZW50cnkgbmFtZSAqLworCXhmc19pbm9kZV90CSoqaXBwMiwJLyogb3V0OiBpbm9kZSBvZiBuZXcgZW50cnksIGlmIGl0CiAJCQkJICAgYWxyZWFkeSBleGlzdHMsIE5VTEwgb3RoZXJ3aXNlLiAqLwotCXhmc19pbm9kZV90CSoqaV90YWIsLyogYXJyYXkgb2YgaW5vZGUgcmV0dXJuZWQsIHNvcnRlZCAqLwotCWludAkJKm51bV9pbm9kZXMpICAvKiBudW1iZXIgb2YgaW5vZGVzIGluIGFycmF5ICovCisJeGZzX2lub2RlX3QJKippX3RhYiwvKiBvdXQ6IGFycmF5IG9mIGlub2RlIHJldHVybmVkLCBzb3J0ZWQgKi8KKwlpbnQJCSpudW1faW5vZGVzKSAgLyogb3V0OiBudW1iZXIgb2YgaW5vZGVzIGluIGFycmF5ICovCiB7Ci0JeGZzX2lub2RlX3QJCSppcDEsICppcDIsICp0ZW1wOworCXhmc19pbm9kZV90CQkqaXAyID0gTlVMTDsKKwl4ZnNfaW5vZGVfdAkJKnRlbXA7CiAJeGZzX2lub190CQlpbnVtMSwgaW51bTI7CiAJaW50CQkJZXJyb3I7CiAJaW50CQkJaSwgajsKIAl1aW50CQkJbG9ja19tb2RlOwogCWludAkJCWRpZmZfZGlycyA9IChkcDEgIT0gZHAyKTsKIAotCWlwMiA9IE5VTEw7Ci0KIAkvKgogCSAqIEZpcnN0LCBmaW5kIG91dCB0aGUgY3VycmVudCBpbnVtcyBvZiB0aGUgZW50cmllcyBzbyB0aGF0IHdlCiAJICogY2FuIGRldGVybWluZSB0aGUgaW5pdGlhbCBsb2NraW5nIG9yZGVyLiAgV2UnbGwgaGF2ZSB0bwpAQCAtMTEwLDI3ICsxMDcsMjAgQEAKIAkgKiB0byBzZWUgaWYgd2Ugc3RpbGwgaGF2ZSB0aGUgcmlnaHQgaW5vZGVzLCBkaXJlY3RvcmllcywgZXRjLgogCSAqLwogCWxvY2tfbW9kZSA9IHhmc19pbG9ja19tYXBfc2hhcmVkKGRwMSk7Ci0JZXJyb3IgPSB4ZnNfZ2V0X2Rpcl9lbnRyeSh2bmFtZTEsICZpcDEpOwotCWlmIChlcnJvcikgewotCQl4ZnNfaXVubG9ja19tYXBfc2hhcmVkKGRwMSwgbG9ja19tb2RlKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KKwlJSE9MRChpcDEpOworCXhmc19pdHJhY2VfcmVmKGlwMSk7CiAKIAlpbnVtMSA9IGlwMS0+aV9pbm87CiAKLQlBU1NFUlQoaXAxKTsKLQl4ZnNfaXRyYWNlX3JlZihpcDEpOwotCiAJLyoKIAkgKiBVbmxvY2sgZHAxIGFuZCBsb2NrIGRwMiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuCiAJICovCi0KIAlpZiAoZGlmZl9kaXJzKSB7CiAJCXhmc19pdW5sb2NrX21hcF9zaGFyZWQoZHAxLCBsb2NrX21vZGUpOwogCQlsb2NrX21vZGUgPSB4ZnNfaWxvY2tfbWFwX3NoYXJlZChkcDIpOwogCX0KIAotCWVycm9yID0geGZzX2Rpcl9sb29rdXBfaW50KGRwMiwgbG9ja19tb2RlLCB2bmFtZTIsICZpbnVtMiwgJmlwMik7CisJZXJyb3IgPSB4ZnNfZGlyX2xvb2t1cF9pbnQoZHAyLCBsb2NrX21vZGUsIG5hbWUyLCAmaW51bTIsICZpcDIpOwogCWlmIChlcnJvciA9PSBFTk9FTlQpIHsJCS8qIHRhcmdldCBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0LiAqLwogCQlpbnVtMiA9IDA7CiAJfSBlbHNlIGlmIChlcnJvcikgewpAQCAtMTYyLDYgKzE1Miw3IEBACiAJCSpudW1faW5vZGVzID0gNDsKIAkJaV90YWJbM10gPSBpcDI7CiAJfQorCSppcHAyID0gaV90YWJbM107CiAKIAkvKgogCSAqIFNvcnQgdGhlIGVsZW1lbnRzIHZpYSBidWJibGUgc29ydC4gIChSZW1lbWJlciwgdGhlcmUgYXJlIGF0CkBAIC0xOTksMjEgKzE5MCw2IEBACiAJCXhmc19sb2NrX2lub2RlcyhpX3RhYiwgKm51bV9pbm9kZXMsIDAsIFhGU19JTE9DS19TSEFSRUQpOwogCX0KIAotCS8qCi0JICogU2V0IHRoZSByZXR1cm4gdmFsdWUuIE51bGwgb3V0IGFueSB1bnVzZWQgZW50cmllcyBpbiBpX3RhYi4KLQkgKi8KLQkqaXBwMSA9ICppcHAyID0gTlVMTDsKLQlmb3IgKGk9MDsgaSA8ICpudW1faW5vZGVzOyBpKyspIHsKLQkJaWYgKGlfdGFiW2ldLT5pX2lubyA9PSBpbnVtMSkgewotCQkJKmlwcDEgPSBpX3RhYltpXTsKLQkJfQotCQlpZiAoaV90YWJbaV0tPmlfaW5vID09IGludW0yKSB7Ci0JCQkqaXBwMiA9IGlfdGFiW2ldOwotCQl9Ci0JfQotCWZvciAoO2kgPCA0OyBpKyspIHsKLQkJaV90YWJbaV0gPSBOVUxMOwotCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIzLDEzICsxOTksMTMgQEAKIGludAogeGZzX3JlbmFtZSgKIAl4ZnNfaW5vZGVfdAkqc3JjX2RwLAotCWJodl92bmFtZV90CSpzcmNfdm5hbWUsCi0JYmh2X3Zub2RlX3QJKnRhcmdldF9kaXJfdnAsCi0JYmh2X3ZuYW1lX3QJKnRhcmdldF92bmFtZSkKKwlzdHJ1Y3QgeGZzX25hbWUJKnNyY19uYW1lLAorCXhmc19pbm9kZV90CSpzcmNfaXAsCisJeGZzX2lub2RlX3QJKnRhcmdldF9kcCwKKwlzdHJ1Y3QgeGZzX25hbWUJKnRhcmdldF9uYW1lKQogewotCWJodl92bm9kZV90CSpzcmNfZGlyX3ZwID0gWEZTX0lUT1Yoc3JjX2RwKTsKIAl4ZnNfdHJhbnNfdAkqdHA7Ci0JeGZzX2lub2RlX3QJKnRhcmdldF9kcCwgKnNyY19pcCwgKnRhcmdldF9pcDsKKwl4ZnNfaW5vZGVfdAkqdGFyZ2V0X2lwOwogCXhmc19tb3VudF90CSptcCA9IHNyY19kcC0+aV9tb3VudDsKIAlpbnQJCW5ld19wYXJlbnQ7CQkvKiBtb3ZpbmcgdG8gYSBuZXcgZGlyICovCiAJaW50CQlzcmNfaXNfZGlyZWN0b3J5OwkvKiBzcmNfbmFtZSBpcyBhIGRpcmVjdG9yeSAqLwpAQCAtMjQzLDI5ICsyMTksMTYgQEAKIAlpbnQJCXNwYWNlcmVzOwogCWludAkJdGFyZ2V0X2xpbmtfemVybyA9IDA7CiAJaW50CQludW1faW5vZGVzOwotCWNoYXIJCSpzcmNfbmFtZSA9IFZOQU1FKHNyY192bmFtZSk7Ci0JY2hhcgkJKnRhcmdldF9uYW1lID0gVk5BTUUodGFyZ2V0X3ZuYW1lKTsKLQlpbnQJCXNyY19uYW1lbGVuID0gVk5BTUVMRU4oc3JjX3ZuYW1lKTsKLQlpbnQJCXRhcmdldF9uYW1lbGVuID0gVk5BTUVMRU4odGFyZ2V0X3ZuYW1lKTsKIAogCXhmc19pdHJhY2VfZW50cnkoc3JjX2RwKTsKLQl4ZnNfaXRyYWNlX2VudHJ5KHhmc192dG9pKHRhcmdldF9kaXJfdnApKTsKLQotCS8qCi0JICogRmluZCB0aGUgWEZTIGJlaGF2aW9yIGRlc2NyaXB0b3IgZm9yIHRoZSB0YXJnZXQgZGlyZWN0b3J5Ci0JICogdm5vZGUgc2luY2UgaXQgd2FzIG5vdCBoYW5kZWQgdG8gdXMuCi0JICovCi0JdGFyZ2V0X2RwID0geGZzX3Z0b2kodGFyZ2V0X2Rpcl92cCk7Ci0JaWYgKHRhcmdldF9kcCA9PSBOVUxMKSB7Ci0JCXJldHVybiBYRlNfRVJST1IoRVhERVYpOwotCX0KKwl4ZnNfaXRyYWNlX2VudHJ5KHRhcmdldF9kcCk7CiAKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChzcmNfZHAsIERNX0VWRU5UX1JFTkFNRSkgfHwKIAkgICAgRE1fRVZFTlRfRU5BQkxFRCh0YXJnZXRfZHAsIERNX0VWRU5UX1JFTkFNRSkpIHsKIAkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1JFTkFNRSwKLQkJCQkJc3JjX2Rpcl92cCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJdGFyZ2V0X2Rpcl92cCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJc3JjX25hbWUsIHRhcmdldF9uYW1lLAorCQkJCQlzcmNfZHAsIERNX1JJR0hUX05VTEwsCisJCQkJCXRhcmdldF9kcCwgRE1fUklHSFRfTlVMTCwKKwkJCQkJc3JjX25hbWUtPm5hbWUsIHRhcmdldF9uYW1lLT5uYW1lLAogCQkJCQkwLCAwLCAwKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0yODIsMTAgKzI0NSw4IEBACiAJICogZG9lcyBub3QgZXhpc3QgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAJICovCiAJdHAgPSBOVUxMOwotCWVycm9yID0geGZzX2xvY2tfZm9yX3JlbmFtZShzcmNfZHAsIHRhcmdldF9kcCwgc3JjX3ZuYW1lLAotCQkJdGFyZ2V0X3ZuYW1lLCAmc3JjX2lwLCAmdGFyZ2V0X2lwLCBpbm9kZXMsCi0JCQkmbnVtX2lub2Rlcyk7Ci0KKwllcnJvciA9IHhmc19sb2NrX2Zvcl9yZW5hbWUoc3JjX2RwLCB0YXJnZXRfZHAsIHNyY19pcCwgdGFyZ2V0X25hbWUsCisJCQkJCSZ0YXJnZXRfaXAsIGlub2RlcywgJm51bV9pbm9kZXMpOwogCWlmIChlcnJvcikgewogCQkvKgogCQkgKiBXZSBoYXZlIG5vdGhpbmcgbG9ja2VkLCBubyBpbm9kZSByZWZlcmVuY2VzLCBhbmQKQEAgLTMzMSw3ICsyOTIsNyBAQAogCVhGU19CTUFQX0lOSVQoJmZyZWVfbGlzdCwgJmZpcnN0X2Jsb2NrKTsKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1JFTkFNRSk7CiAJY2FuY2VsX2ZsYWdzID0gWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUzsKLQlzcGFjZXJlcyA9IFhGU19SRU5BTUVfU1BBQ0VfUkVTKG1wLCB0YXJnZXRfbmFtZWxlbik7CisJc3BhY2VyZXMgPSBYRlNfUkVOQU1FX1NQQUNFX1JFUyhtcCwgdGFyZ2V0X25hbWUtPmxlbik7CiAJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgc3BhY2VyZXMsIFhGU19SRU5BTUVfTE9HX1JFUyhtcCksIDAsCiAJCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBYRlNfUkVOQU1FX0xPR19DT1VOVCk7CiAJaWYgKGVycm9yID09IEVOT1NQQykgewpAQCAtMzY1LDEwICszMjYsMTAgQEAKIAkgKiB0aGVtIHdoZW4gdGhleSB1bmxvY2sgdGhlIGlub2Rlcy4gIEFsc28sIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bAogCSAqIG5vdCB0byBhZGQgYW4gaW5vZGUgdG8gdGhlIHRyYW5zYWN0aW9uIG1vcmUgdGhhbiBvbmNlLgogCSAqLwotCVZOX0hPTEQoc3JjX2Rpcl92cCk7CisJSUhPTEQoc3JjX2RwKTsKIAl4ZnNfdHJhbnNfaWpvaW4odHAsIHNyY19kcCwgWEZTX0lMT0NLX0VYQ0wpOwogCWlmIChuZXdfcGFyZW50KSB7Ci0JCVZOX0hPTEQodGFyZ2V0X2Rpcl92cCk7CisJCUlIT0xEKHRhcmdldF9kcCk7CiAJCXhmc190cmFuc19pam9pbih0cCwgdGFyZ2V0X2RwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJfQogCWlmICgoc3JjX2lwICE9IHNyY19kcCkgJiYgKHNyY19pcCAhPSB0YXJnZXRfZHApKSB7CkBAIC0zODksOSArMzUwLDggQEAKIAkJICogSWYgdGhlcmUncyBubyBzcGFjZSByZXNlcnZhdGlvbiwgY2hlY2sgdGhlIGVudHJ5IHdpbGwKIAkJICogZml0IGJlZm9yZSBhY3R1YWxseSBpbnNlcnRpbmcgaXQuCiAJCSAqLwotCQlpZiAoc3BhY2VyZXMgPT0gMCAmJgotCQkgICAgKGVycm9yID0geGZzX2Rpcl9jYW5lbnRlcih0cCwgdGFyZ2V0X2RwLCB0YXJnZXRfbmFtZSwKLQkJCQkJCXRhcmdldF9uYW1lbGVuKSkpCisJCWVycm9yID0geGZzX2Rpcl9jYW5lbnRlcih0cCwgdGFyZ2V0X2RwLCB0YXJnZXRfbmFtZSwgc3BhY2VyZXMpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJLyoKIAkJICogSWYgdGFyZ2V0IGRvZXMgbm90IGV4aXN0IGFuZCB0aGUgcmVuYW1lIGNyb3NzZXMKQEAgLTM5OSw4ICszNTksOCBAQAogCQkgKiB0byBhY2NvdW50IGZvciB0aGUgIi4uIiByZWZlcmVuY2UgZnJvbSB0aGUgbmV3IGVudHJ5LgogCQkgKi8KIAkJZXJyb3IgPSB4ZnNfZGlyX2NyZWF0ZW5hbWUodHAsIHRhcmdldF9kcCwgdGFyZ2V0X25hbWUsCi0JCQkJCSAgIHRhcmdldF9uYW1lbGVuLCBzcmNfaXAtPmlfaW5vLAotCQkJCQkgICAmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIHNwYWNlcmVzKTsKKwkJCQkJCXNyY19pcC0+aV9pbm8sICZmaXJzdF9ibG9jaywKKwkJCQkJCSZmcmVlX2xpc3QsIHNwYWNlcmVzKTsKIAkJaWYgKGVycm9yID09IEVOT1NQQykKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQlpZiAoZXJyb3IpCkBAIC00MzksNyArMzk5LDcgQEAKIAkJICogbmFtZSBhdCB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LCByZW1vdmUgaXQgZmlyc3QuCiAJCSAqLwogCQllcnJvciA9IHhmc19kaXJfcmVwbGFjZSh0cCwgdGFyZ2V0X2RwLCB0YXJnZXRfbmFtZSwKLQkJCQkJdGFyZ2V0X25hbWVsZW4sIHNyY19pcC0+aV9pbm8sCisJCQkJCXNyY19pcC0+aV9pbm8sCiAJCQkJCSZmaXJzdF9ibG9jaywgJmZyZWVfbGlzdCwgc3BhY2VyZXMpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGFib3J0X3JldHVybjsKQEAgLTQ3Niw3ICs0MzYsOCBAQAogCQkgKiBSZXdyaXRlIHRoZSAiLi4iIGVudHJ5IHRvIHBvaW50IHRvIHRoZSBuZXcKIAkJICogZGlyZWN0b3J5LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfZGlyX3JlcGxhY2UodHAsIHNyY19pcCwgIi4uIiwgMiwgdGFyZ2V0X2RwLT5pX2lubywKKwkJZXJyb3IgPSB4ZnNfZGlyX3JlcGxhY2UodHAsIHNyY19pcCwgJnhmc19uYW1lX2RvdGRvdCwKKwkJCQkJdGFyZ2V0X2RwLT5pX2lubywKIAkJCQkJJmZpcnN0X2Jsb2NrLCAmZnJlZV9saXN0LCBzcGFjZXJlcyk7CiAJCUFTU0VSVChlcnJvciAhPSBFRVhJU1QpOwogCQlpZiAoZXJyb3IpCkBAIC01MTIsOCArNDczLDggQEAKIAkJCWdvdG8gYWJvcnRfcmV0dXJuOwogCX0KIAotCWVycm9yID0geGZzX2Rpcl9yZW1vdmVuYW1lKHRwLCBzcmNfZHAsIHNyY19uYW1lLCBzcmNfbmFtZWxlbiwKLQkJCXNyY19pcC0+aV9pbm8sICZmaXJzdF9ibG9jaywgJmZyZWVfbGlzdCwgc3BhY2VyZXMpOworCWVycm9yID0geGZzX2Rpcl9yZW1vdmVuYW1lKHRwLCBzcmNfZHAsIHNyY19uYW1lLCBzcmNfaXAtPmlfaW5vLAorCQkJCQkmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIHNwYWNlcmVzKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gYWJvcnRfcmV0dXJuOwogCXhmc19pY2hndGltZShzcmNfZHAsIFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHKTsKQEAgLTU4MCwxMCArNTQxLDggQEAKIAkgKiB0aGUgdm5vZGUgcmVmZXJlbmNlcy4KIAkgKi8KIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwotCWlmICh0YXJnZXRfaXAgIT0gTlVMTCkgewotCQl4ZnNfcmVmY2FjaGVfcHVyZ2VfaXAodGFyZ2V0X2lwKTsKKwlpZiAodGFyZ2V0X2lwICE9IE5VTEwpCiAJCUlSRUxFKHRhcmdldF9pcCk7Ci0JfQogCS8qCiAJICogTGV0IGludGVycG9zZWQgZmlsZSBzeXN0ZW1zIGtub3cgYWJvdXQgcmVtb3ZlZCBsaW5rcy4KIAkgKi8KQEAgLTU5OCw5ICs1NTcsOSBAQAogCWlmIChETV9FVkVOVF9FTkFCTEVEKHNyY19kcCwgRE1fRVZFTlRfUE9TVFJFTkFNRSkgfHwKIAkgICAgRE1fRVZFTlRfRU5BQkxFRCh0YXJnZXRfZHAsIERNX0VWRU5UX1BPU1RSRU5BTUUpKSB7CiAJCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AgKG1wLCBETV9FVkVOVF9QT1NUUkVOQU1FLAotCQkJCQlzcmNfZGlyX3ZwLCBETV9SSUdIVF9OVUxMLAotCQkJCQl0YXJnZXRfZGlyX3ZwLCBETV9SSUdIVF9OVUxMLAotCQkJCQlzcmNfbmFtZSwgdGFyZ2V0X25hbWUsCisJCQkJCXNyY19kcCwgRE1fUklHSFRfTlVMTCwKKwkJCQkJdGFyZ2V0X2RwLCBETV9SSUdIVF9OVUxMLAorCQkJCQlzcmNfbmFtZS0+bmFtZSwgdGFyZ2V0X25hbWUtPm5hbWUsCiAJCQkJCTAsIGVycm9yLCAwKTsKIAl9CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydGFsbG9jLmMgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwppbmRleCBjYTgzZGRmLi5hMGRjNmU1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J0YWxsb2MuYworKysgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInhmc19ydy5oIgogI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3NwYWNlLmgiCisjaW5jbHVkZSAieGZzX3V0aWxzLmgiCiAKIAogLyoKQEAgLTczLDYgKzc0LDE4IEBACiAgKi8KIAogLyoKKyAqIHhmc19sb3diaXQzMjogZ2V0IGxvdyBiaXQgc2V0IG91dCBvZiAzMi1iaXQgYXJndW1lbnQsIC0xIGlmIG5vbmUgc2V0LgorICovCitTVEFUSUMgaW50Cit4ZnNfbG93Yml0MzIoCisJX191aW50MzJfdAl2KQoreworCWlmICh2KQorCQlyZXR1cm4gZmZzKHYpIC0gMTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCiAgKiBBbGxvY2F0ZSBzcGFjZSB0byB0aGUgYml0bWFwIG9yIHN1bW1hcnkgZmlsZSwgYW5kIHplcm8gaXQsIGZvciBncm93ZnMuCiAgKi8KIFNUQVRJQyBpbnQJCQkJLyogZXJyb3IgKi8KQEAgLTExMSwxNCArMTI0LDE0IEBACiAJCQkJWEZTX0dST1dSVEFMTE9DX0xPR19SRVMobXApLCAwLAogCQkJCVhGU19UUkFOU19QRVJNX0xPR19SRVMsCiAJCQkJWEZTX0RFRkFVTFRfUEVSTV9MT0dfQ09VTlQpKSkKLQkJCWdvdG8gZXJyb3JfZXhpdDsKKwkJCWdvdG8gZXJyb3JfY2FuY2VsOwogCQljYW5jZWxmbGFncyA9IFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVM7CiAJCS8qCiAJCSAqIExvY2sgdGhlIGlub2RlLgogCQkgKi8KIAkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgaW5vLCAwLAogCQkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQotCQkJZ290byBlcnJvcl9leGl0OworCQkJZ290byBlcnJvcl9jYW5jZWw7CiAJCVhGU19CTUFQX0lOSVQoJmZsaXN0LCAmZmlyc3RibG9jayk7CiAJCS8qCiAJCSAqIEFsbG9jYXRlIGJsb2NrcyB0byB0aGUgYml0bWFwIGZpbGUuCkBAIC0xMzEsMTQgKzE0NCwxNiBAQAogCQlpZiAoIWVycm9yICYmIG5tYXAgPCAxKQogCQkJZXJyb3IgPSBYRlNfRVJST1IoRU5PU1BDKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBlcnJvcl9leGl0OworCQkJZ290byBlcnJvcl9jYW5jZWw7CiAJCS8qCiAJCSAqIEZyZWUgYW55IGJsb2NrcyBmcmVlZCB1cCBpbiB0aGUgdHJhbnNhY3Rpb24sIHRoZW4gY29tbWl0LgogCQkgKi8KIAkJZXJyb3IgPSB4ZnNfYm1hcF9maW5pc2goJnRwLCAmZmxpc3QsICZjb21taXR0ZWQpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVycm9yX2V4aXQ7Ci0JCXhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOworCQkJZ290byBlcnJvcl9jYW5jZWw7CisJCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXJyb3I7CiAJCS8qCiAJCSAqIE5vdyB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBhbGxvY2F0ZWQgYmxvY2tzLgogCQkgKiBEbyB0aGlzIG9uZSBibG9jayBwZXIgdHJhbnNhY3Rpb24sIHRvIGtlZXAgaXQgc2ltcGxlLgpAQCAtMTUzLDEzICsxNjgsMTMgQEAKIAkJCSAqLwogCQkJaWYgKChlcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLAogCQkJCQlYRlNfR1JPV1JUWkVST19MT0dfUkVTKG1wKSwgMCwgMCwgMCkpKQotCQkJCWdvdG8gZXJyb3JfZXhpdDsKKwkJCQlnb3RvIGVycm9yX2NhbmNlbDsKIAkJCS8qCiAJCQkgKiBMb2NrIHRoZSBiaXRtYXAgaW5vZGUuCiAJCQkgKi8KIAkJCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfaWdldChtcCwgdHAsIGlubywgMCwKIAkJCQkJCQlYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCi0JCQkJZ290byBlcnJvcl9leGl0OworCQkJCWdvdG8gZXJyb3JfY2FuY2VsOwogCQkJLyoKIAkJCSAqIEdldCBhIGJ1ZmZlciBmb3IgdGhlIGJsb2NrLgogCQkJICovCkBAIC0xNjgsMTQgKzE4MywxNiBAQAogCQkJCW1wLT5tX2JzaXplLCAwKTsKIAkJCWlmIChicCA9PSBOVUxMKSB7CiAJCQkJZXJyb3IgPSBYRlNfRVJST1IoRUlPKTsKLQkJCQlnb3RvIGVycm9yX2V4aXQ7CisJCQkJZ290byBlcnJvcl9jYW5jZWw7CiAJCQl9CiAJCQltZW1zZXQoWEZTX0JVRl9QVFIoYnApLCAwLCBtcC0+bV9zYi5zYl9ibG9ja3NpemUpOwogCQkJeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCAwLCBtcC0+bV9zYi5zYl9ibG9ja3NpemUgLSAxKTsKIAkJCS8qCiAJCQkgKiBDb21taXQgdGhlIHRyYW5zYWN0aW9uLgogCQkJICovCi0JCQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwkJCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBlcnJvcjsKIAkJfQogCQkvKgogCQkgKiBHbyBvbiB0byB0aGUgbmV4dCBleHRlbnQsIGlmIGFueS4KQEAgLTE4Myw4ICsyMDAsOSBAQAogCQlvYmxvY2tzID0gbWFwLmJyX3N0YXJ0b2ZmICsgbWFwLmJyX2Jsb2NrY291bnQ7CiAJfQogCXJldHVybiAwOwotZXJyb3JfZXhpdDoKK2Vycm9yX2NhbmNlbDoKIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxmbGFncyk7CitlcnJvcjoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTQzMiw3ICs0NTAsNiBAQAogCX0KIAliYm5vID0gWEZTX0JJVFRPQkxPQ0sobXAsIGJubyk7CiAJaSA9IDA7Ci0JQVNTRVJUKG1pbmxlbiAhPSAwKTsKIAlsb2cybGVuID0geGZzX2hpZ2hiaXQzMihtaW5sZW4pOwogCS8qCiAJICogTG9vcCBvdmVyIGFsbCBiaXRtYXAgYmxvY2tzIChiYm5vICsgaSBpcyBjdXJyZW50IGJsb2NrKS4KQEAgLTYwMSw4ICs2MTgsNiBAQAogCXhmc19zdW1pbmZvX3QJc3VtOwkJLyogc3VtbWFyeSBpbmZvcm1hdGlvbiBmb3IgZXh0ZW50cyAqLwogCiAJQVNTRVJUKG1pbmxlbiAlIHByb2QgPT0gMCAmJiBtYXhsZW4gJSBwcm9kID09IDApOwotCUFTU0VSVChtYXhsZW4gIT0gMCk7Ci0KIAkvKgogCSAqIExvb3Agb3ZlciBhbGwgdGhlIGxldmVscyBzdGFydGluZyB3aXRoIG1heGxlbi4KIAkgKiBBdCBlYWNoIGxldmVsLCBsb29rIGF0IGFsbCB0aGUgYml0bWFwIGJsb2NrcywgdG8gc2VlIGlmIHRoZXJlCkBAIC02NjAsOSArNjc1LDYgQEAKIAkJKnJ0YmxvY2sgPSBOVUxMUlRCTE9DSzsKIAkJcmV0dXJuIDA7CiAJfQotCUFTU0VSVChtaW5sZW4gIT0gMCk7Ci0JQVNTRVJUKG1heGxlbiAhPSAwKTsKLQogCS8qCiAJICogTG9vcCBvdmVyIHNpemVzLCBmcm9tIG1heGxlbiBkb3duIHRvIG1pbmxlbi4KIAkgKiBUaGlzIHRpbWUsIHdoZW4gd2UgZG8gdGhlIGFsbG9jYXRpb25zLCBhbGxvdyBzbWFsbGVyIG9uZXMKQEAgLTE4NjksNiArMTg4MSw3IEBACiAJeGZzX3RyYW5zX3QJKnRwOwkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCiAJc2JwID0gJm1wLT5tX3NiOworCWNhbmNlbGZsYWdzID0gMDsKIAkvKgogCSAqIEluaXRpYWwgZXJyb3IgY2hlY2tpbmcuCiAJICovCkBAIC0xOTQ4LDcgKzE5NjEsNiBAQAogCQkJCSAgbnNicC0+c2JfYmxvY2tzaXplICogbnNicC0+c2JfcmV4dHNpemUpOwogCQluc2JwLT5zYl9yZXh0ZW50cyA9IG5zYnAtPnNiX3JibG9ja3M7CiAJCWRvX2Rpdihuc2JwLT5zYl9yZXh0ZW50cywgbnNicC0+c2JfcmV4dHNpemUpOwotCQlBU1NFUlQobnNicC0+c2JfcmV4dGVudHMgIT0gMCk7CiAJCW5zYnAtPnNiX3JleHRzbG9nID0geGZzX2hpZ2hiaXQzMihuc2JwLT5zYl9yZXh0ZW50cyk7CiAJCW5yc3VtbGV2ZWxzID0gbm1wLT5tX3JzdW1sZXZlbHMgPSBuc2JwLT5zYl9yZXh0c2xvZyArIDE7CiAJCW5yc3Vtc2l6ZSA9CkBAIC0yMDM2LDEzICsyMDQ4LDE1IEBACiAJCSAqLwogCQltcC0+bV9yc3VtbGV2ZWxzID0gbnJzdW1sZXZlbHM7CiAJCW1wLT5tX3JzdW1zaXplID0gbnJzdW1zaXplOwotCQkvKgotCQkgKiBDb21taXQgdGhlIHRyYW5zYWN0aW9uLgotCQkgKi8KLQkJeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CisKKwkJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwkJaWYgKGVycm9yKSB7CisJCQl0cCA9IE5VTEw7CisJCQlicmVhazsKKwkJfQogCX0KIAotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IgJiYgdHApCiAJCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbGZsYWdzKTsKIAogCS8qCkBAIC0yMjczLDcgKzIyODcsNyBAQAogCUFTU0VSVChzYnAtPnNiX3JzdW1pbm8gIT0gTlVMTEZTSU5PKTsKIAllcnJvciA9IHhmc19pZ2V0KG1wLCBOVUxMLCBzYnAtPnNiX3JzdW1pbm8sIDAsIDAsICZtcC0+bV9yc3VtaXAsIDApOwogCWlmIChlcnJvcikgewotCQlWTl9SRUxFKFhGU19JVE9WKG1wLT5tX3JibWlwKSk7CisJCUlSRUxFKG1wLT5tX3JibWlwKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlBU1NFUlQobXAtPm1fcnN1bWlwICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydy5jIGIvZnMveGZzL3hmc19ydy5jCmluZGV4IGNkM2VjZTYuLmIwZjMxYzAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcncuYworKysgYi9mcy94ZnMveGZzX3J3LmMKQEAgLTEyNiwxMSArMTI2LDExIEBACiAJCSAqIHdoZW4gd2UgcmV0dXJuLgogCQkgKi8KIAkJaWYgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikgewotCQkJeGZzX2xvZ19mb3JjZShtcCwgaWlwLT5pbGlfbGFzdF9sc24sCi0JCQkJCVhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgaWlwLT5pbGlfbGFzdF9sc24sCisJCQkJCVhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMsIE5VTEwpOwogCQl9IGVsc2UgaWYgKHhmc19pcGluY291bnQoaXApID4gMCkgewotCQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLAotCQkJCQlYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DKTsKKwkJCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKKwkJCQkJWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQywgTlVMTCk7CiAJCX0KIAogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3NiLmggYi9mcy94ZnMveGZzX3NiLmgKaW5kZXggOTQ2NjBiMS4uZDkwNGVmZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19zYi5oCisrKyBiL2ZzL3hmcy94ZnNfc2IuaApAQCAtODksNiArODksNyBAQAogCiAvKgogICogU3VwZXJibG9jayAtIGluIGNvcmUgdmVyc2lvbi4gIE11c3QgbWF0Y2ggdGhlIG9uZGlzayB2ZXJzaW9uIGJlbG93LgorICogTXVzdCBiZSBwYWRkZWQgdG8gNjQgYml0IGFsaWdubWVudC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX3NiIHsKIAlfX3VpbnQzMl90CXNiX21hZ2ljbnVtOwkvKiBtYWdpYyBudW1iZXIgPT0gWEZTX1NCX01BR0lDICovCkBAIC0xNDUsMTAgKzE0NiwyMSBAQAogCV9fdWludDE2X3QJc2JfbG9nc2VjdHNpemU7CS8qIHNlY3RvciBzaXplIGZvciB0aGUgbG9nLCBieXRlcyAqLwogCV9fdWludDMyX3QJc2JfbG9nc3VuaXQ7CS8qIHN0cmlwZSB1bml0IHNpemUgZm9yIHRoZSBsb2cgKi8KIAlfX3VpbnQzMl90CXNiX2ZlYXR1cmVzMjsJLyogYWRkaXRpb25hbCBmZWF0dXJlIGJpdHMgKi8KKworCS8qCisJICogYmFkIGZlYXR1cmVzMiBmaWVsZCBhcyBhIHJlc3VsdCBvZiBmYWlsaW5nIHRvIHBhZCB0aGUgc2IKKwkgKiBzdHJ1Y3R1cmUgdG8gNjQgYml0cy4gU29tZSBtYWNoaW5lcyB3aWxsIGJlIHVzaW5nIHRoaXMgZmllbGQKKwkgKiBmb3IgZmVhdHVyZXMyIGJpdHMuIEVhc2llc3QganVzdCB0byBtYXJrIGl0IGJhZCBhbmQgbm90IHVzZQorCSAqIGl0IGZvciBhbnl0aGluZyBlbHNlLgorCSAqLworCV9fdWludDMyX3QJc2JfYmFkX2ZlYXR1cmVzMjsKKworCS8qIG11c3QgYmUgcGFkZGVkIHRvIDY0IGJpdCBhbGlnbm1lbnQgKi8KIH0geGZzX3NiX3Q7CiAKIC8qCi0gKiBTdXBlcmJsb2NrIC0gb24gZGlzayB2ZXJzaW9uLiAgTXVzdCBtYXRjaCB0aGUgaW4gY29yZSB2ZXJzaW9uIGJlbG93LgorICogU3VwZXJibG9jayAtIG9uIGRpc2sgdmVyc2lvbi4gIE11c3QgbWF0Y2ggdGhlIGluIGNvcmUgdmVyc2lvbiBhYm92ZS4KKyAqIE11c3QgYmUgcGFkZGVkIHRvIDY0IGJpdCBhbGlnbm1lbnQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19kc2IgewogCV9fYmUzMgkJc2JfbWFnaWNudW07CS8qIG1hZ2ljIG51bWJlciA9PSBYRlNfU0JfTUFHSUMgKi8KQEAgLTIwNSw2ICsyMTcsMTUgQEAKIAlfX2JlMTYJCXNiX2xvZ3NlY3RzaXplOwkvKiBzZWN0b3Igc2l6ZSBmb3IgdGhlIGxvZywgYnl0ZXMgKi8KIAlfX2JlMzIJCXNiX2xvZ3N1bml0OwkvKiBzdHJpcGUgdW5pdCBzaXplIGZvciB0aGUgbG9nICovCiAJX19iZTMyCQlzYl9mZWF0dXJlczI7CS8qIGFkZGl0aW9uYWwgZmVhdHVyZSBiaXRzICovCisJLyoKKwkgKiBiYWQgZmVhdHVyZXMyIGZpZWxkIGFzIGEgcmVzdWx0IG9mIGZhaWxpbmcgdG8gcGFkIHRoZSBzYgorCSAqIHN0cnVjdHVyZSB0byA2NCBiaXRzLiBTb21lIG1hY2hpbmVzIHdpbGwgYmUgdXNpbmcgdGhpcyBmaWVsZAorCSAqIGZvciBmZWF0dXJlczIgYml0cy4gRWFzaWVzdCBqdXN0IHRvIG1hcmsgaXQgYmFkIGFuZCBub3QgdXNlCisJICogaXQgZm9yIGFueXRoaW5nIGVsc2UuCisJICovCisJX19iZTMyCXNiX2JhZF9mZWF0dXJlczI7CisKKwkvKiBtdXN0IGJlIHBhZGRlZCB0byA2NCBiaXQgYWxpZ25tZW50ICovCiB9IHhmc19kc2JfdDsKIAogLyoKQEAgLTIyMyw3ICsyNDQsNyBAQAogCVhGU19TQlNfR1FVT1RJTk8sIFhGU19TQlNfUUZMQUdTLCBYRlNfU0JTX0ZMQUdTLCBYRlNfU0JTX1NIQVJFRF9WTiwKIAlYRlNfU0JTX0lOT0FMSUdOTVQsIFhGU19TQlNfVU5JVCwgWEZTX1NCU19XSURUSCwgWEZTX1NCU19ESVJCTEtMT0csCiAJWEZTX1NCU19MT0dTRUNUTE9HLCBYRlNfU0JTX0xPR1NFQ1RTSVpFLCBYRlNfU0JTX0xPR1NVTklULAotCVhGU19TQlNfRkVBVFVSRVMyLAorCVhGU19TQlNfRkVBVFVSRVMyLCBYRlNfU0JTX0JBRF9GRUFUVVJFUzIsCiAJWEZTX1NCU19GSUVMRENPVU5UCiB9IHhmc19zYl9maWVsZF90OwogCkBAIC0yNDgsMTMgKzI2OSwxNSBAQAogI2RlZmluZSBYRlNfU0JfSUZSRUUJCVhGU19TQl9NVkFMKElGUkVFKQogI2RlZmluZSBYRlNfU0JfRkRCTE9DS1MJCVhGU19TQl9NVkFMKEZEQkxPQ0tTKQogI2RlZmluZSBYRlNfU0JfRkVBVFVSRVMyCVhGU19TQl9NVkFMKEZFQVRVUkVTMikKKyNkZWZpbmUgWEZTX1NCX0JBRF9GRUFUVVJFUzIJWEZTX1NCX01WQUwoQkFEX0ZFQVRVUkVTMikKICNkZWZpbmUJWEZTX1NCX05VTV9CSVRTCQkoKGludClYRlNfU0JTX0ZJRUxEQ09VTlQpCiAjZGVmaW5lCVhGU19TQl9BTExfQklUUwkJKCgxTEwgPDwgWEZTX1NCX05VTV9CSVRTKSAtIDEpCiAjZGVmaW5lCVhGU19TQl9NT0RfQklUUwkJXAogCShYRlNfU0JfVVVJRCB8IFhGU19TQl9ST09USU5PIHwgWEZTX1NCX1JCTUlOTyB8IFhGU19TQl9SU1VNSU5PIHwgXAogCSBYRlNfU0JfVkVSU0lPTk5VTSB8IFhGU19TQl9VUVVPVElOTyB8IFhGU19TQl9HUVVPVElOTyB8IFwKIAkgWEZTX1NCX1FGTEFHUyB8IFhGU19TQl9TSEFSRURfVk4gfCBYRlNfU0JfVU5JVCB8IFhGU19TQl9XSURUSCB8IFwKLQkgWEZTX1NCX0lDT1VOVCB8IFhGU19TQl9JRlJFRSB8IFhGU19TQl9GREJMT0NLUyB8IFhGU19TQl9GRUFUVVJFUzIpCisJIFhGU19TQl9JQ09VTlQgfCBYRlNfU0JfSUZSRUUgfCBYRlNfU0JfRkRCTE9DS1MgfCBYRlNfU0JfRkVBVFVSRVMyIHwgXAorCSBYRlNfU0JfQkFEX0ZFQVRVUkVTMikKIAogCiAvKgpAQCAtMjcxLDcgKzI5NCw2IEBACiAKICNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fTlVNKHNicCkJKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fTlVNQklUUykKIAotI2RlZmluZQlYRlNfU0JfR09PRF9WRVJTSU9OKHNicCkJeGZzX3NiX2dvb2RfdmVyc2lvbihzYnApCiAjaWZkZWYgX19LRVJORUxfXwogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX2dvb2RfdmVyc2lvbih4ZnNfc2JfdCAqc2JwKQogewpAQCAtMjk3LDcgKzMxOSwxNSBAQAogfQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9UT05FVyh2KQl4ZnNfc2JfdmVyc2lvbl90b25ldyh2KQorLyoKKyAqIERldGVjdCBhIG1pc21hdGNoZWQgZmVhdHVyZXMyIGZpZWxkLiAgT2xkZXIga2VybmVscyByZWFkL3dyb3RlCisgKiB0aGlzIGludG8gdGhlIHdyb25nIHNsb3QsIHNvIHRvIGJlIHNhZmUgd2Uga2VlcCB0aGVtIGluIHN5bmMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHhmc19zYl9oYXNfbWlzbWF0Y2hlZF9mZWF0dXJlczIoeGZzX3NiX3QgKnNicCkKK3sKKwlyZXR1cm4gKHNicC0+c2JfYmFkX2ZlYXR1cmVzMiAhPSBzYnAtPnNiX2ZlYXR1cmVzMik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgeGZzX3NiX3ZlcnNpb25fdG9uZXcodW5zaWduZWQgdikKIHsKIAlyZXR1cm4gKCgoKHYpID09IFhGU19TQl9WRVJTSU9OXzEpID8gXApAQCAtMzA4LDcgKzMzOCw2IEBACiAJCVhGU19TQl9WRVJTSU9OXzQpOwogfQogCi0jZGVmaW5lCVhGU19TQl9WRVJTSU9OX1RPT0xEKHYpCXhmc19zYl92ZXJzaW9uX3Rvb2xkKHYpCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHhmc19zYl92ZXJzaW9uX3Rvb2xkKHVuc2lnbmVkIHYpCiB7CiAJcmV0dXJuICgoKHYpICYgKFhGU19TQl9WRVJTSU9OX1FVT1RBQklUIHwgWEZTX1NCX1ZFUlNJT05fQUxJR05CSVQpKSA/IFwKQEAgLTMyMCw3ICszNDksNiBAQAogCQkJCVhGU19TQl9WRVJTSU9OXzEpKSk7CiB9CiAKLSNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fSEFTQVRUUihzYnApCXhmc19zYl92ZXJzaW9uX2hhc2F0dHIoc2JwKQogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25faGFzYXR0cih4ZnNfc2JfdCAqc2JwKQogewogCXJldHVybiAoKHNicCktPnNiX3ZlcnNpb25udW0gPT0gWEZTX1NCX1ZFUlNJT05fMikgfHwgXApAQCAtMzI5LDcgKzM1Nyw2IEBACiAJCSAgKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fQVRUUkJJVCkpOwogfQogCi0jZGVmaW5lCVhGU19TQl9WRVJTSU9OX0FEREFUVFIoc2JwKQl4ZnNfc2JfdmVyc2lvbl9hZGRhdHRyKHNicCkKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfc2JfdmVyc2lvbl9hZGRhdHRyKHhmc19zYl90ICpzYnApCiB7CiAJKHNicCktPnNiX3ZlcnNpb25udW0gPSAoKChzYnApLT5zYl92ZXJzaW9ubnVtID09IFhGU19TQl9WRVJTSU9OXzEpID8gXApAQCAtMzM5LDcgKzM2Niw2IEBACiAJCQkoWEZTX1NCX1ZFUlNJT05fNCB8IFhGU19TQl9WRVJTSU9OX0FUVFJCSVQpKSk7CiB9CiAKLSNkZWZpbmUJWEZTX1NCX1ZFUlNJT05fSEFTTkxJTksoc2JwKQl4ZnNfc2JfdmVyc2lvbl9oYXNubGluayhzYnApCiBzdGF0aWMgaW5saW5lIGludCB4ZnNfc2JfdmVyc2lvbl9oYXNubGluayh4ZnNfc2JfdCAqc2JwKQogewogCXJldHVybiAoKHNicCktPnNiX3ZlcnNpb25udW0gPT0gWEZTX1NCX1ZFUlNJT05fMykgfHwgXApAQCAtMzQ3LDcgKzM3Myw2IEBACiAJCSAgKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fTkxJTktCSVQpKTsKIH0KIAotI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BREROTElOSyhzYnApCXhmc19zYl92ZXJzaW9uX2FkZG5saW5rKHNicCkKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfc2JfdmVyc2lvbl9hZGRubGluayh4ZnNfc2JfdCAqc2JwKQogewogCShzYnApLT5zYl92ZXJzaW9ubnVtID0gKChzYnApLT5zYl92ZXJzaW9ubnVtIDw9IFhGU19TQl9WRVJTSU9OXzIgPyBcCkBAIC0zNTUsMTE1ICszODAsNjMgQEAKIAkJKChzYnApLT5zYl92ZXJzaW9ubnVtIHwgWEZTX1NCX1ZFUlNJT05fTkxJTktCSVQpKTsKIH0KIAotI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9IQVNRVU9UQShzYnApCXhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKHNicCkKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKHhmc19zYl90ICpzYnApCiB7CiAJcmV0dXJuIChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCiAJCSgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX1FVT1RBQklUKTsKIH0KIAotI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9BRERRVU9UQShzYnApCXhmc19zYl92ZXJzaW9uX2FkZHF1b3RhKHNicCkKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfc2JfdmVyc2lvbl9hZGRxdW90YSh4ZnNfc2JfdCAqc2JwKQogewogCShzYnApLT5zYl92ZXJzaW9ubnVtID0gXAogCQkgKFhGU19TQl9WRVJTSU9OX05VTShzYnApID09IFhGU19TQl9WRVJTSU9OXzQgPyBcCiAJCQkoKHNicCktPnNiX3ZlcnNpb25udW0gfCBYRlNfU0JfVkVSU0lPTl9RVU9UQUJJVCkgOiBcCi0JCQkoWEZTX1NCX1ZFUlNJT05fVE9ORVcoKHNicCktPnNiX3ZlcnNpb25udW0pIHwgXAorCQkJKHhmc19zYl92ZXJzaW9uX3RvbmV3KChzYnApLT5zYl92ZXJzaW9ubnVtKSB8IFwKIAkJCSBYRlNfU0JfVkVSU0lPTl9RVU9UQUJJVCkpOwogfQogCi0jZGVmaW5lCVhGU19TQl9WRVJTSU9OX0hBU0FMSUdOKHNicCkJeGZzX3NiX3ZlcnNpb25faGFzYWxpZ24oc2JwKQogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25faGFzYWxpZ24oeGZzX3NiX3QgKnNicCkKIHsKIAlyZXR1cm4gKFhGU19TQl9WRVJTSU9OX05VTShzYnApID09IFhGU19TQl9WRVJTSU9OXzQpICYmIFwKIAkJKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fQUxJR05CSVQpOwogfQogCi0jZGVmaW5lCVhGU19TQl9WRVJTSU9OX1NVQkFMSUdOKHNicCkJeGZzX3NiX3ZlcnNpb25fc3ViYWxpZ24oc2JwKQotc3RhdGljIGlubGluZSB2b2lkIHhmc19zYl92ZXJzaW9uX3N1YmFsaWduKHhmc19zYl90ICpzYnApCi17Ci0JKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCi0JIFhGU19TQl9WRVJTSU9OX1RPT0xEKChzYnApLT5zYl92ZXJzaW9ubnVtICYgflhGU19TQl9WRVJTSU9OX0FMSUdOQklUKTsKLX0KLQotI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNEQUxJR04oc2JwKQl4ZnNfc2JfdmVyc2lvbl9oYXNkYWxpZ24oc2JwKQogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25faGFzZGFsaWduKHhmc19zYl90ICpzYnApCiB7CiAJcmV0dXJuIChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCiAJCSgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX0RBTElHTkJJVCk7CiB9CiAKLSNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fQUREREFMSUdOKHNicCkJeGZzX3NiX3ZlcnNpb25fYWRkZGFsaWduKHNicCkKLXN0YXRpYyBpbmxpbmUgaW50IHhmc19zYl92ZXJzaW9uX2FkZGRhbGlnbih4ZnNfc2JfdCAqc2JwKQotewotCXJldHVybiAoc2JwKS0+c2JfdmVyc2lvbm51bSA9IFwKLQkJKChzYnApLT5zYl92ZXJzaW9ubnVtIHwgWEZTX1NCX1ZFUlNJT05fREFMSUdOQklUKTsKLX0KLQotI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNTSEFSRUQoc2JwKQl4ZnNfc2JfdmVyc2lvbl9oYXNzaGFyZWQoc2JwKQogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25faGFzc2hhcmVkKHhmc19zYl90ICpzYnApCiB7CiAJcmV0dXJuIChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCiAJCSgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX1NIQVJFREJJVCk7CiB9CiAKLSNkZWZpbmUgWEZTX1NCX1ZFUlNJT05fQUREU0hBUkVEKHNicCkJeGZzX3NiX3ZlcnNpb25fYWRkc2hhcmVkKHNicCkKLXN0YXRpYyBpbmxpbmUgaW50IHhmc19zYl92ZXJzaW9uX2FkZHNoYXJlZCh4ZnNfc2JfdCAqc2JwKQotewotCXJldHVybiAoc2JwKS0+c2JfdmVyc2lvbm51bSA9IFwKLQkJKChzYnApLT5zYl92ZXJzaW9ubnVtIHwgWEZTX1NCX1ZFUlNJT05fU0hBUkVEQklUKTsKLX0KLQotI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9TVUJTSEFSRUQoc2JwKQl4ZnNfc2JfdmVyc2lvbl9zdWJzaGFyZWQoc2JwKQotc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25fc3Vic2hhcmVkKHhmc19zYl90ICpzYnApCi17Ci0JcmV0dXJuIChzYnApLT5zYl92ZXJzaW9ubnVtID0gXAotCQkoKHNicCktPnNiX3ZlcnNpb25udW0gJiB+WEZTX1NCX1ZFUlNJT05fU0hBUkVEQklUKTsKLX0KLQotI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNESVJWMihzYnApCXhmc19zYl92ZXJzaW9uX2hhc2RpcnYyKHNicCkKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19zYl92ZXJzaW9uX2hhc2RpcnYyKHhmc19zYl90ICpzYnApCiB7CiAJcmV0dXJuIChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCiAJCSgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIFhGU19TQl9WRVJTSU9OX0RJUlYyQklUKTsKIH0KIAotI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9IQVNMT0dWMihzYnApICAgeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoc2JwKQogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoeGZzX3NiX3QgKnNicCkKIHsKIAlyZXR1cm4gKFhGU19TQl9WRVJTSU9OX05VTShzYnApID09IFhGU19TQl9WRVJTSU9OXzQpICYmIFwKIAkJKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fTE9HVjJCSVQpOwogfQogCi0jZGVmaW5lIFhGU19TQl9WRVJTSU9OX0hBU0VYVEZMR0JJVChzYnApCXhmc19zYl92ZXJzaW9uX2hhc2V4dGZsZ2JpdChzYnApCiBzdGF0aWMgaW5saW5lIGludCB4ZnNfc2JfdmVyc2lvbl9oYXNleHRmbGdiaXQoeGZzX3NiX3QgKnNicCkKIHsKIAlyZXR1cm4gKFhGU19TQl9WRVJTSU9OX05VTShzYnApID09IFhGU19TQl9WRVJTSU9OXzQpICYmIFwKIAkJKChzYnApLT5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fRVhURkxHQklUKTsKIH0KIAotI2RlZmluZSBYRlNfU0JfVkVSU0lPTl9BRERFWFRGTEdCSVQoc2JwKQl4ZnNfc2JfdmVyc2lvbl9hZGRleHRmbGdiaXQoc2JwKQotc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25fYWRkZXh0ZmxnYml0KHhmc19zYl90ICpzYnApCi17Ci0JcmV0dXJuIChzYnApLT5zYl92ZXJzaW9ubnVtID0gXAotCQkoKHNicCktPnNiX3ZlcnNpb25udW0gfCBYRlNfU0JfVkVSU0lPTl9FWFRGTEdCSVQpOwotfQotCi0jZGVmaW5lIFhGU19TQl9WRVJTSU9OX1NVQkVYVEZMR0JJVChzYnApCXhmc19zYl92ZXJzaW9uX3N1YmV4dGZsZ2JpdChzYnApCi1zdGF0aWMgaW5saW5lIGludCB4ZnNfc2JfdmVyc2lvbl9zdWJleHRmbGdiaXQoeGZzX3NiX3QgKnNicCkKLXsKLQlyZXR1cm4gKHNicCktPnNiX3ZlcnNpb25udW0gPSBcCi0JCSgoc2JwKS0+c2JfdmVyc2lvbm51bSAmIH5YRlNfU0JfVkVSU0lPTl9FWFRGTEdCSVQpOwotfQotCi0jZGVmaW5lIFhGU19TQl9WRVJTSU9OX0hBU1NFQ1RPUihzYnApICAgeGZzX3NiX3ZlcnNpb25faGFzc2VjdG9yKHNicCkKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19zYl92ZXJzaW9uX2hhc3NlY3Rvcih4ZnNfc2JfdCAqc2JwKQogewogCXJldHVybiAoWEZTX1NCX1ZFUlNJT05fTlVNKHNicCkgPT0gWEZTX1NCX1ZFUlNJT05fNCkgJiYgXAogCQkoKHNicCktPnNiX3ZlcnNpb25udW0gJiBYRlNfU0JfVkVSU0lPTl9TRUNUT1JCSVQpOwogfQogCi0jZGVmaW5lIFhGU19TQl9WRVJTSU9OX0hBU01PUkVCSVRTKHNicCkJeGZzX3NiX3ZlcnNpb25faGFzbW9yZWJpdHMoc2JwKQogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25faGFzbW9yZWJpdHMoeGZzX3NiX3QgKnNicCkKIHsKIAlyZXR1cm4gKFhGU19TQl9WRVJTSU9OX05VTShzYnApID09IFhGU19TQl9WRVJTSU9OXzQpICYmIFwKQEAgLTQ3NiwyNCArNDQ5LDIyIEBACiAgKiBGb3IgZXhhbXBsZSwgZm9yIGEgYml0IGRlZmluZWQgYXMgWEZTX1NCX1ZFUlNJT04yX0ZVTkJJVCwgaGFzIGEgbWFjcm86CiAgKgogICogU0JfVkVSU0lPTl9IQVNGVU5CSVQoeGZzX3NiX3QgKnNicCkKLSAqCSgoWEZTX1NCX1ZFUlNJT05fSEFTTU9SRUJJVFMoc2JwKSAmJgorICoJKCh4ZnNfc2JfdmVyc2lvbl9oYXNtb3JlYml0cyhzYnApICYmCiAgKgkgKChzYnApLT5zYl9mZWF0dXJlczIgJiBYRlNfU0JfVkVSU0lPTjJfRlVOQklUKQogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19zYl92ZXJzaW9uX2hhc2xhenlzYmNvdW50KHhmc19zYl90ICpzYnApCiB7Ci0JcmV0dXJuIChYRlNfU0JfVkVSU0lPTl9IQVNNT1JFQklUUyhzYnApICYmCVwKKwlyZXR1cm4gKHhmc19zYl92ZXJzaW9uX2hhc21vcmViaXRzKHNicCkgJiYJXAogCQkoKHNicCktPnNiX2ZlYXR1cmVzMiAmIFhGU19TQl9WRVJTSU9OMl9MQVpZU0JDT1VOVEJJVCkpOwogfQogCi0jZGVmaW5lIFhGU19TQl9WRVJTSU9OX0hBU0FUVFIyKHNicCkJeGZzX3NiX3ZlcnNpb25faGFzYXR0cjIoc2JwKQogc3RhdGljIGlubGluZSBpbnQgeGZzX3NiX3ZlcnNpb25faGFzYXR0cjIoeGZzX3NiX3QgKnNicCkKIHsKLQlyZXR1cm4gKFhGU19TQl9WRVJTSU9OX0hBU01PUkVCSVRTKHNicCkpICYmCVwKKwlyZXR1cm4gKHhmc19zYl92ZXJzaW9uX2hhc21vcmViaXRzKHNicCkpICYmCVwKIAkJKChzYnApLT5zYl9mZWF0dXJlczIgJiBYRlNfU0JfVkVSU0lPTjJfQVRUUjJCSVQpOwogfQogCi0jZGVmaW5lIFhGU19TQl9WRVJTSU9OX0FEREFUVFIyKHNicCkJeGZzX3NiX3ZlcnNpb25fYWRkYXR0cjIoc2JwKQogc3RhdGljIGlubGluZSB2b2lkIHhmc19zYl92ZXJzaW9uX2FkZGF0dHIyKHhmc19zYl90ICpzYnApCiB7CiAJKChzYnApLT5zYl92ZXJzaW9ubnVtID0JXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5oIGIvZnMveGZzL3hmc190cmFucy5oCmluZGV4IDdmNDA2MjguLjA4MDQyMDcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTExMywxMyArMTEzLDggQEAKIHN0cnVjdCB4ZnNfdHJhbnM7CiBzdHJ1Y3QgeGZzX2RxdW90X2FjY3Q7CiAKLXR5cGVkZWYgc3RydWN0IHhmc19haWxfZW50cnkgewotCXN0cnVjdCB4ZnNfbG9nX2l0ZW0JKmFpbF9mb3J3OwkvKiBBSUwgZm9ydyBwb2ludGVyICovCi0Jc3RydWN0IHhmc19sb2dfaXRlbQkqYWlsX2JhY2s7CS8qIEFJTCBiYWNrIHBvaW50ZXIgKi8KLX0geGZzX2FpbF9lbnRyeV90OwotCiB0eXBlZGVmIHN0cnVjdCB4ZnNfbG9nX2l0ZW0gewotCXhmc19haWxfZW50cnlfdAkJCWxpX2FpbDsJCS8qIEFJTCBwb2ludGVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQJCWxpX2FpbDsJCS8qIEFJTCBwb2ludGVycyAqLwogCXhmc19sc25fdAkJCWxpX2xzbjsJCS8qIGxhc3Qgb24tZGlzayBsc24gKi8KIAlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MJKmxpX2Rlc2M7CS8qIHB0ciB0byBjdXJyZW50IGRlc2MqLwogCXN0cnVjdCB4ZnNfbW91bnQJCSpsaV9tb3VudHA7CS8qIHB0ciB0byBmcyBtb3VudCAqLwpAQCAtMzQxLDcgKzMzNiw2IEBACiAJdW5zaWduZWQgaW50CQl0X3J0eF9yZXM7CS8qICMgb2YgcnQgZXh0ZW50cyByZXN2ZCAqLwogCXVuc2lnbmVkIGludAkJdF9ydHhfcmVzX3VzZWQ7CS8qICMgb2YgcmVzdmQgcnQgZXh0ZW50cyB1c2VkICovCiAJeGZzX2xvZ190aWNrZXRfdAl0X3RpY2tldDsJLyogbG9nIG1nciB0aWNrZXQgKi8KLQlzZW1hX3QJCQl0X3NlbWE7CQkvKiBzZW1hIGZvciBjb21taXQgY29tcGxldGlvbiAqLwogCXhmc19sc25fdAkJdF9sc247CQkvKiBsb2cgc2VxIG51bSBvZiBzdGFydCBvZgogCQkJCQkJICogdHJhbnNhY3Rpb24uICovCiAJeGZzX2xzbl90CQl0X2NvbW1pdF9sc247CS8qIGxvZyBzZXEgbnVtIG9mIGVuZCBvZgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19haWwuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKaW5kZXggNGQ2MzMwZS4uMWY3N2MwMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19haWwuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCkBAIC0yOCwxMyArMjgsMTMgQEAKICNpbmNsdWRlICJ4ZnNfdHJhbnNfcHJpdi5oIgogI2luY2x1ZGUgInhmc19lcnJvci5oIgogCi1TVEFUSUMgdm9pZCB4ZnNfYWlsX2luc2VydCh4ZnNfYWlsX2VudHJ5X3QgKiwgeGZzX2xvZ19pdGVtX3QgKik7Ci1TVEFUSUMgeGZzX2xvZ19pdGVtX3QgKiB4ZnNfYWlsX2RlbGV0ZSh4ZnNfYWlsX2VudHJ5X3QgKiwgeGZzX2xvZ19pdGVtX3QgKik7Ci1TVEFUSUMgeGZzX2xvZ19pdGVtX3QgKiB4ZnNfYWlsX21pbih4ZnNfYWlsX2VudHJ5X3QgKik7Ci1TVEFUSUMgeGZzX2xvZ19pdGVtX3QgKiB4ZnNfYWlsX25leHQoeGZzX2FpbF9lbnRyeV90ICosIHhmc19sb2dfaXRlbV90ICopOworU1RBVElDIHZvaWQgeGZzX2FpbF9pbnNlcnQoeGZzX2FpbF90ICosIHhmc19sb2dfaXRlbV90ICopOworU1RBVElDIHhmc19sb2dfaXRlbV90ICogeGZzX2FpbF9kZWxldGUoeGZzX2FpbF90ICosIHhmc19sb2dfaXRlbV90ICopOworU1RBVElDIHhmc19sb2dfaXRlbV90ICogeGZzX2FpbF9taW4oeGZzX2FpbF90ICopOworU1RBVElDIHhmc19sb2dfaXRlbV90ICogeGZzX2FpbF9uZXh0KHhmc19haWxfdCAqLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKIAogI2lmZGVmIERFQlVHCi1TVEFUSUMgdm9pZCB4ZnNfYWlsX2NoZWNrKHhmc19haWxfZW50cnlfdCAqLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKK1NUQVRJQyB2b2lkIHhmc19haWxfY2hlY2soeGZzX2FpbF90ICosIHhmc19sb2dfaXRlbV90ICopOwogI2Vsc2UKICNkZWZpbmUJeGZzX2FpbF9jaGVjayhhLGwpCiAjZW5kaWYgLyogREVCVUcgKi8KQEAgLTU3LDcgKzU3LDcgQEAKIAl4ZnNfbG9nX2l0ZW1fdAkqbGlwOwogCiAJc3Bpbl9sb2NrKCZtcC0+bV9haWxfbG9jayk7Ci0JbGlwID0geGZzX2FpbF9taW4oJihtcC0+bV9haWwueGFfYWlsKSk7CisJbGlwID0geGZzX2FpbF9taW4oJm1wLT5tX2FpbCk7CiAJaWYgKGxpcCA9PSBOVUxMKSB7CiAJCWxzbiA9ICh4ZnNfbHNuX3QpMDsKIAl9IGVsc2UgewpAQCAtOTEsNyArOTEsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqbGlwOwogCi0JbGlwID0geGZzX2FpbF9taW4oJm1wLT5tX2FpbC54YV9haWwpOworCWxpcCA9IHhmc19haWxfbWluKCZtcC0+bV9haWwpOwogCWlmIChsaXAgJiYgIVhGU19GT1JDRURfU0hVVERPV04obXApKSB7CiAJCWlmIChYRlNfTFNOX0NNUCh0aHJlc2hvbGRfbHNuLCBtcC0+bV9haWwueGFfdGFyZ2V0KSA+IDApCiAJCQl4ZnNhaWxkX3dha2V1cChtcCwgdGhyZXNob2xkX2xzbik7CkBAIC0xMTEsMTUgKzExMSwxNyBAQAogewogCXhmc19sb2dfaXRlbV90CSpsaXA7CiAKLQlsaXAgPSB4ZnNfYWlsX21pbigmKG1wLT5tX2FpbC54YV9haWwpKTsKKwlsaXAgPSB4ZnNfYWlsX21pbigmbXAtPm1fYWlsKTsKIAkqZ2VuID0gKGludCltcC0+bV9haWwueGFfZ2VuOwogCWlmIChsc24gPT0gMCkKIAkJcmV0dXJuIGxpcDsKIAotCXdoaWxlIChsaXAgJiYgKFhGU19MU05fQ01QKGxpcC0+bGlfbHNuLCBsc24pIDwgMCkpCi0JCWxpcCA9IGxpcC0+bGlfYWlsLmFpbF9mb3J3OworCWxpc3RfZm9yX2VhY2hfZW50cnkobGlwLCAmbXAtPm1fYWlsLnhhX2FpbCwgbGlfYWlsKSB7CisJCWlmIChYRlNfTFNOX0NNUChsaXAtPmxpX2xzbiwgbHNuKSA+PSAwKQorCQkJcmV0dXJuIGxpcDsKKwl9CiAKLQlyZXR1cm4gbGlwOworCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMjYxLDE2ICsyNjMsMTkgQEAKIAkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKIAl9CiAKLQkvKgotCSAqIFdlIHJlYWNoZWQgdGhlIHRhcmdldCBzbyB3YWl0IGEgYml0IGxvbmdlciBmb3IgSS9PIHRvIGNvbXBsZXRlIGFuZAotCSAqIHJlbW92ZSBwdXNoZWQgaXRlbXMgZnJvbSB0aGUgQUlMIGJlZm9yZSB3ZSBzdGFydCB0aGUgbmV4dCBzY2FuIGZyb20KLQkgKiB0aGUgc3RhcnQgb2YgdGhlIEFJTC4KLQkgKi8KLQlpZiAoKFhGU19MU05fQ01QKGxzbiwgdGFyZ2V0KSA+PSAwKSkgeworCWlmICghY291bnQpIHsKKwkJLyogV2UncmUgcGFzdCBvdXIgdGFyZ2V0IG9yIGVtcHR5LCBzbyBpZGxlICovCisJCXRvdXQgPSAxMDAwOworCX0gZWxzZSBpZiAoWEZTX0xTTl9DTVAobHNuLCB0YXJnZXQpID49IDApIHsKKwkJLyoKKwkJICogV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHNvIHdhaXQgYSBiaXQgbG9uZ2VyIGZvciBJL08gdG8KKwkJICogY29tcGxldGUgYW5kIHJlbW92ZSBwdXNoZWQgaXRlbXMgZnJvbSB0aGUgQUlMIGJlZm9yZSB3ZQorCQkgKiBzdGFydCB0aGUgbmV4dCBzY2FuIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBBSUwuCisJCSAqLwogCQl0b3V0ICs9IDIwOwogCQlsYXN0X3B1c2hlZF9sc24gPSAwOwogCX0gZWxzZSBpZiAoKHJlc3RhcnRzID4gWEZTX1RSQU5TX1BVU0hfQUlMX1JFU1RBUlRTKSB8fAotCQkgICAoY291bnQgJiYgKChzdHVjayAqIDEwMCkgLyBjb3VudCA+IDkwKSkpIHsKKwkJICAgKChzdHVjayAqIDEwMCkgLyBjb3VudCA+IDkwKSkgewogCQkvKgogCQkgKiBFaXRoZXIgdGhlcmUgaXMgYSBsb3Qgb2YgY29udGVudGlvbiBvbiB0aGUgQUlMIG9yIHdlCiAJCSAqIGFyZSBzdHVjayBkdWUgdG8gb3BlcmF0aW9ucyBpbiBwcm9ncmVzcy4gIlN0dWNrIiBpbiB0aGlzCkBAIC0zMjYsNyArMzMxLDcgQEAKIAkgKiB0aGUgY2FsbCB0byB4ZnNfbG9nX21vdmVfdGFpbCgpIGRvZXNuJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUncwogCSAqIG5vdCBlbm91Z2ggZnJlZSBzcGFjZSB0byB3YWtlIHBlb3BsZSB1cCBzbyB3ZSdyZSBzYWZlIGNhbGxpbmcgaXQuCiAJICovCi0JbWluX2xpcCA9IHhmc19haWxfbWluKCZtcC0+bV9haWwueGFfYWlsKTsKKwltaW5fbGlwID0geGZzX2FpbF9taW4oJm1wLT5tX2FpbCk7CiAKIAlpZiAobWluX2xpcCA9PSBsaXApCiAJCXhmc19sb2dfbW92ZV90YWlsKG1wLCAxKTsKQEAgLTM1NCwxNSArMzU5LDEzIEBACiAJeGZzX2xvZ19pdGVtX3QJKmxpcCwKIAl4ZnNfbHNuX3QJbHNuKSBfX3JlbGVhc2VzKG1wLT5tX2FpbF9sb2NrKQogewotCXhmc19haWxfZW50cnlfdAkJKmFpbHA7CiAJeGZzX2xvZ19pdGVtX3QJCSpkbGlwPU5VTEw7CiAJeGZzX2xvZ19pdGVtX3QJCSptbGlwOwkvKiBwdHIgdG8gbWluaW11bSBsaXAgKi8KIAotCWFpbHAgPSAmKG1wLT5tX2FpbC54YV9haWwpOwotCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKKwltbGlwID0geGZzX2FpbF9taW4oJm1wLT5tX2FpbCk7CiAKIAlpZiAobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpIHsKLQkJZGxpcCA9IHhmc19haWxfZGVsZXRlKGFpbHAsIGxpcCk7CisJCWRsaXAgPSB4ZnNfYWlsX2RlbGV0ZSgmbXAtPm1fYWlsLCBsaXApOwogCQlBU1NFUlQoZGxpcCA9PSBsaXApOwogCX0gZWxzZSB7CiAJCWxpcC0+bGlfZmxhZ3MgfD0gWEZTX0xJX0lOX0FJTDsKQEAgLTM3MCwxMSArMzczLDExIEBACiAKIAlsaXAtPmxpX2xzbiA9IGxzbjsKIAotCXhmc19haWxfaW5zZXJ0KGFpbHAsIGxpcCk7CisJeGZzX2FpbF9pbnNlcnQoJm1wLT5tX2FpbCwgbGlwKTsKIAltcC0+bV9haWwueGFfZ2VuKys7CiAKIAlpZiAobWxpcCA9PSBkbGlwKSB7Ci0JCW1saXAgPSB4ZnNfYWlsX21pbigmKG1wLT5tX2FpbC54YV9haWwpKTsKKwkJbWxpcCA9IHhmc19haWxfbWluKCZtcC0+bV9haWwpOwogCQlzcGluX3VubG9jaygmbXAtPm1fYWlsX2xvY2spOwogCQl4ZnNfbG9nX21vdmVfdGFpbChtcCwgbWxpcC0+bGlfbHNuKTsKIAl9IGVsc2UgewpAQCAtNDA0LDE0ICs0MDcsMTIgQEAKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2xvZ19pdGVtX3QJKmxpcCkgX19yZWxlYXNlcyhtcC0+bV9haWxfbG9jaykKIHsKLQl4ZnNfYWlsX2VudHJ5X3QJCSphaWxwOwogCXhmc19sb2dfaXRlbV90CQkqZGxpcDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7CiAKIAlpZiAobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpIHsKLQkJYWlscCA9ICYobXAtPm1fYWlsLnhhX2FpbCk7Ci0JCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKLQkJZGxpcCA9IHhmc19haWxfZGVsZXRlKGFpbHAsIGxpcCk7CisJCW1saXAgPSB4ZnNfYWlsX21pbigmbXAtPm1fYWlsKTsKKwkJZGxpcCA9IHhmc19haWxfZGVsZXRlKCZtcC0+bV9haWwsIGxpcCk7CiAJCUFTU0VSVChkbGlwID09IGxpcCk7CiAKIApAQCAtNDIwLDcgKzQyMSw3IEBACiAJCW1wLT5tX2FpbC54YV9nZW4rKzsKIAogCQlpZiAobWxpcCA9PSBkbGlwKSB7Ci0JCQltbGlwID0geGZzX2FpbF9taW4oJihtcC0+bV9haWwueGFfYWlsKSk7CisJCQltbGlwID0geGZzX2FpbF9taW4oJm1wLT5tX2FpbCk7CiAJCQlzcGluX3VubG9jaygmbXAtPm1fYWlsX2xvY2spOwogCQkJeGZzX2xvZ19tb3ZlX3RhaWwobXAsIChtbGlwID8gbWxpcC0+bGlfbHNuIDogMCkpOwogCQl9IGVsc2UgewpAQCAtNDM3LDcgKzQzOCw3IEBACiAJCWVsc2UgewogCQkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfQUlMREVMRVRFLCBDRV9BTEVSVCwgbXAsCiAJCSIlczogYXR0ZW1wdGluZyB0byBkZWxldGUgYSBsb2cgaXRlbSB0aGF0IGlzIG5vdCBpbiB0aGUgQUlMIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJX19mdW5jX18pOwogCQkJc3Bpbl91bmxvY2soJm1wLT5tX2FpbF9sb2NrKTsKIAkJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fQ09SUlVQVF9JTkNPUkUpOwogCQl9CkBAIC00NTgsNyArNDU5LDcgQEAKIHsKIAl4ZnNfbG9nX2l0ZW1fdAkqbGlwOwogCi0JbGlwID0geGZzX2FpbF9taW4oJihtcC0+bV9haWwueGFfYWlsKSk7CisJbGlwID0geGZzX2FpbF9taW4oJm1wLT5tX2FpbCk7CiAJKmdlbiA9IChpbnQpbXAtPm1fYWlsLnhhX2dlbjsKIAogCXJldHVybiBsaXA7CkBAIC00ODIsOSArNDgzLDkgQEAKIAogCUFTU0VSVChtcCAmJiBsaXAgJiYgZ2VuKTsKIAlpZiAobXAtPm1fYWlsLnhhX2dlbiA9PSAqZ2VuKSB7Ci0JCW5saXAgPSB4ZnNfYWlsX25leHQoJihtcC0+bV9haWwueGFfYWlsKSwgbGlwKTsKKwkJbmxpcCA9IHhmc19haWxfbmV4dCgmbXAtPm1fYWlsLCBsaXApOwogCX0gZWxzZSB7Ci0JCW5saXAgPSB4ZnNfYWlsX21pbigmKG1wLT5tX2FpbCkueGFfYWlsKTsKKwkJbmxpcCA9IHhmc19haWxfbWluKCZtcC0+bV9haWwpOwogCQkqZ2VuID0gKGludCltcC0+bV9haWwueGFfZ2VuOwogCQlpZiAocmVzdGFydHMgIT0gTlVMTCkgewogCQkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9yZXN0YXJ0cyk7CkBAIC01MTQsOCArNTE1LDcgQEAKIHhmc190cmFuc19haWxfaW5pdCgKIAl4ZnNfbW91bnRfdAkqbXApCiB7Ci0JbXAtPm1fYWlsLnhhX2FpbC5haWxfZm9ydyA9ICh4ZnNfbG9nX2l0ZW1fdCopJm1wLT5tX2FpbC54YV9haWw7Ci0JbXAtPm1fYWlsLnhhX2FpbC5haWxfYmFjayA9ICh4ZnNfbG9nX2l0ZW1fdCopJm1wLT5tX2FpbC54YV9haWw7CisJSU5JVF9MSVNUX0hFQUQoJm1wLT5tX2FpbC54YV9haWwpOwogCXJldHVybiB4ZnNhaWxkX3N0YXJ0KG1wKTsKIH0KIApAQCAtNTM0LDcgKzUzNCw3IEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfYWlsX2luc2VydCgKLQl4ZnNfYWlsX2VudHJ5X3QJKmJhc2UsCisJeGZzX2FpbF90CSphaWxwLAogCXhmc19sb2dfaXRlbV90CSpsaXApCiAvKiBBUkdTVVNFRCAqLwogewpAQCAtNTQzLDI3ICs1NDMsMjIgQEAKIAkvKgogCSAqIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBqdXN0IGluc2VydCB0aGUgaXRlbS4KIAkgKi8KLQlpZiAoYmFzZS0+YWlsX2JhY2sgPT0gKHhmc19sb2dfaXRlbV90KiliYXNlKSB7Ci0JCWJhc2UtPmFpbF9mb3J3ID0gbGlwOwotCQliYXNlLT5haWxfYmFjayA9IGxpcDsKLQkJbGlwLT5saV9haWwuYWlsX2ZvcncgPSAoeGZzX2xvZ19pdGVtX3QqKWJhc2U7Ci0JCWxpcC0+bGlfYWlsLmFpbF9iYWNrID0gKHhmc19sb2dfaXRlbV90KiliYXNlOworCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKSB7CisJCWxpc3RfYWRkKCZsaXAtPmxpX2FpbCwgJmFpbHAtPnhhX2FpbCk7CiAJCXJldHVybjsKIAl9CiAKLQluZXh0X2xpcCA9IGJhc2UtPmFpbF9iYWNrOwotCXdoaWxlICgobmV4dF9saXAgIT0gKHhmc19sb2dfaXRlbV90KiliYXNlKSAmJgotCSAgICAgICAoWEZTX0xTTl9DTVAobmV4dF9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pID4gMCkpIHsKLQkJbmV4dF9saXAgPSBuZXh0X2xpcC0+bGlfYWlsLmFpbF9iYWNrOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShuZXh0X2xpcCwgJmFpbHAtPnhhX2FpbCwgbGlfYWlsKSB7CisJCWlmIChYRlNfTFNOX0NNUChuZXh0X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPD0gMCkKKwkJCWJyZWFrOwogCX0KLQlBU1NFUlQoKG5leHRfbGlwID09ICh4ZnNfbG9nX2l0ZW1fdCopYmFzZSkgfHwKLQkgICAgICAgKFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxpcC0+bGlfbHNuKSA8PSAwKSk7Ci0JbGlwLT5saV9haWwuYWlsX2ZvcncgPSBuZXh0X2xpcC0+bGlfYWlsLmFpbF9mb3J3OwotCWxpcC0+bGlfYWlsLmFpbF9iYWNrID0gbmV4dF9saXA7Ci0JbmV4dF9saXAtPmxpX2FpbC5haWxfZm9ydyA9IGxpcDsKLQlsaXAtPmxpX2FpbC5haWxfZm9ydy0+bGlfYWlsLmFpbF9iYWNrID0gbGlwOwogCi0JeGZzX2FpbF9jaGVjayhiYXNlLCBsaXApOworCUFTU0VSVCgoJm5leHRfbGlwLT5saV9haWwgPT0gJmFpbHAtPnhhX2FpbCkgfHwKKwkgICAgICAgKFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxpcC0+bGlfbHNuKSA8PSAwKSk7CisKKwlsaXN0X2FkZCgmbGlwLT5saV9haWwsICZuZXh0X2xpcC0+bGlfYWlsKTsKKworCXhmc19haWxfY2hlY2soYWlscCwgbGlwKTsKIAlyZXR1cm47CiB9CiAKQEAgLTU3MywxNSArNTY4LDEzIEBACiAvKkFSR1NVU0VEKi8KIFNUQVRJQyB4ZnNfbG9nX2l0ZW1fdCAqCiB4ZnNfYWlsX2RlbGV0ZSgKLQl4ZnNfYWlsX2VudHJ5X3QJKmJhc2UsCisJeGZzX2FpbF90CSphaWxwLAogCXhmc19sb2dfaXRlbV90CSpsaXApCiAvKiBBUkdTVVNFRCAqLwogewotCXhmc19haWxfY2hlY2soYmFzZSwgbGlwKTsKLQlsaXAtPmxpX2FpbC5haWxfZm9ydy0+bGlfYWlsLmFpbF9iYWNrID0gbGlwLT5saV9haWwuYWlsX2JhY2s7Ci0JbGlwLT5saV9haWwuYWlsX2JhY2stPmxpX2FpbC5haWxfZm9ydyA9IGxpcC0+bGlfYWlsLmFpbF9mb3J3OwotCWxpcC0+bGlfYWlsLmFpbF9mb3J3ID0gTlVMTDsKLQlsaXAtPmxpX2FpbC5haWxfYmFjayA9IE5VTEw7CisJeGZzX2FpbF9jaGVjayhhaWxwLCBsaXApOworCisJbGlzdF9kZWwoJmxpcC0+bGlfYWlsKTsKIAogCXJldHVybiBsaXA7CiB9CkBAIC01OTIsMTQgKzU4NSwxMyBAQAogICovCiBTVEFUSUMgeGZzX2xvZ19pdGVtX3QgKgogeGZzX2FpbF9taW4oCi0JeGZzX2FpbF9lbnRyeV90CSpiYXNlKQorCXhmc19haWxfdAkqYWlscCkKIC8qIEFSR1NVU0VEICovCiB7Ci0JcmVnaXN0ZXIgeGZzX2xvZ19pdGVtX3QgKmZvcncgPSBiYXNlLT5haWxfZm9ydzsKLQlpZiAoZm9ydyA9PSAoeGZzX2xvZ19pdGVtX3QqKWJhc2UpIHsKKwlpZiAobGlzdF9lbXB0eSgmYWlscC0+eGFfYWlsKSkKIAkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBmb3J3OworCisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJmFpbHAtPnhhX2FpbCwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7CiB9CiAKIC8qCkBAIC02MDksMTUgKzYwMSwxNCBAQAogICovCiBTVEFUSUMgeGZzX2xvZ19pdGVtX3QgKgogeGZzX2FpbF9uZXh0KAotCXhmc19haWxfZW50cnlfdAkqYmFzZSwKKwl4ZnNfYWlsX3QJKmFpbHAsCiAJeGZzX2xvZ19pdGVtX3QJKmxpcCkKIC8qIEFSR1NVU0VEICovCiB7Ci0JaWYgKGxpcC0+bGlfYWlsLmFpbF9mb3J3ID09ICh4ZnNfbG9nX2l0ZW1fdCopYmFzZSkgeworCWlmIChsaXAtPmxpX2FpbC5uZXh0ID09ICZhaWxwLT54YV9haWwpCiAJCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gbGlwLT5saV9haWwuYWlsX2Zvcnc7CiAKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmbGlwLT5saV9haWwsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOwogfQogCiAjaWZkZWYgREVCVUcKQEAgLTYyNiw1NyArNjE3LDQwIEBACiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfYWlsX2NoZWNrKAotCXhmc19haWxfZW50cnlfdCAqYmFzZSwKKwl4ZnNfYWlsX3QgCSphaWxwLAogCXhmc19sb2dfaXRlbV90CSpsaXApCiB7CiAJeGZzX2xvZ19pdGVtX3QJKnByZXZfbGlwOwogCi0JcHJldl9saXAgPSBiYXNlLT5haWxfZm9ydzsKLQlpZiAocHJldl9saXAgPT0gKHhmc19sb2dfaXRlbV90KiliYXNlKSB7Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGUgcG9pbnRlcnMgYXJlIGNvcnJlY3Qgd2hlbiB0aGUgbGlzdAotCQkgKiBpcyBlbXB0eS4KLQkJICovCi0JCUFTU0VSVChiYXNlLT5haWxfYmFjayA9PSAoeGZzX2xvZ19pdGVtX3QqKWJhc2UpOworCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKQogCQlyZXR1cm47Ci0JfQogCiAJLyoKIAkgKiBDaGVjayB0aGUgbmV4dCBhbmQgcHJldmlvdXMgZW50cmllcyBhcmUgdmFsaWQuCiAJICovCiAJQVNTRVJUKChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgIT0gMCk7Ci0JcHJldl9saXAgPSBsaXAtPmxpX2FpbC5haWxfYmFjazsKLQlpZiAocHJldl9saXAgIT0gKHhmc19sb2dfaXRlbV90KiliYXNlKSB7Ci0JCUFTU0VSVChwcmV2X2xpcC0+bGlfYWlsLmFpbF9mb3J3ID09IGxpcCk7CisJcHJldl9saXAgPSBsaXN0X2VudHJ5KGxpcC0+bGlfYWlsLnByZXYsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworCWlmICgmcHJldl9saXAtPmxpX2FpbCAhPSAmYWlscC0+eGFfYWlsKQogCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pIDw9IDApOwotCX0KLQlwcmV2X2xpcCA9IGxpcC0+bGlfYWlsLmFpbF9mb3J3OwotCWlmIChwcmV2X2xpcCAhPSAoeGZzX2xvZ19pdGVtX3QqKWJhc2UpIHsKLQkJQVNTRVJUKHByZXZfbGlwLT5saV9haWwuYWlsX2JhY2sgPT0gbGlwKTsKKworCXByZXZfbGlwID0gbGlzdF9lbnRyeShsaXAtPmxpX2FpbC5uZXh0LCB4ZnNfbG9nX2l0ZW1fdCwgbGlfYWlsKTsKKwlpZiAoJnByZXZfbGlwLT5saV9haWwgIT0gJmFpbHAtPnhhX2FpbCkKIAkJQVNTRVJUKFhGU19MU05fQ01QKHByZXZfbGlwLT5saV9sc24sIGxpcC0+bGlfbHNuKSA+PSAwKTsKLQl9CiAKIAogI2lmZGVmIFhGU19UUkFOU19ERUJVRwogCS8qCi0JICogV2FsayB0aGUgbGlzdCBjaGVja2luZyBmb3J3YXJkIGFuZCBiYWNrd2FyZCBwb2ludGVycywKLQkgKiBsc24gb3JkZXJpbmcsIGFuZCB0aGF0IGV2ZXJ5IGVudHJ5IGhhcyB0aGUgWEZTX0xJX0lOX0FJTAotCSAqIGZsYWcgc2V0LiBUaGlzIGlzIHJlYWxseSBleHBlbnNpdmUsIHNvIG9ubHkgZG8gaXQgd2hlbgotCSAqIHNwZWNpZmljYWxseSBkZWJ1Z2dpbmcgdGhlIHRyYW5zYWN0aW9uIHN1YnN5c3RlbS4KKwkgKiBXYWxrIHRoZSBsaXN0IGNoZWNraW5nIGxzbiBvcmRlcmluZywgYW5kIHRoYXQgZXZlcnkgZW50cnkgaGFzIHRoZQorCSAqIFhGU19MSV9JTl9BSUwgZmxhZyBzZXQuIFRoaXMgaXMgcmVhbGx5IGV4cGVuc2l2ZSwgc28gb25seSBkbyBpdAorCSAqIHdoZW4gc3BlY2lmaWNhbGx5IGRlYnVnZ2luZyB0aGUgdHJhbnNhY3Rpb24gc3Vic3lzdGVtLgogCSAqLwotCXByZXZfbGlwID0gKHhmc19sb2dfaXRlbV90KiliYXNlOwotCXdoaWxlIChsaXAgIT0gKHhmc19sb2dfaXRlbV90KiliYXNlKSB7Ci0JCWlmIChwcmV2X2xpcCAhPSAoeGZzX2xvZ19pdGVtX3QqKWJhc2UpIHsKLQkJCUFTU0VSVChwcmV2X2xpcC0+bGlfYWlsLmFpbF9mb3J3ID09IGxpcCk7CisJcHJldl9saXAgPSBsaXN0X2VudHJ5KCZhaWxwLT54YV9haWwsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobGlwLCAmYWlscC0+eGFfYWlsLCBsaV9haWwpIHsKKwkJaWYgKCZwcmV2X2xpcC0+bGlfYWlsICE9ICZhaWxwLT54YV9haWwpCiAJCQlBU1NFUlQoWEZTX0xTTl9DTVAocHJldl9saXAtPmxpX2xzbiwgbGlwLT5saV9sc24pIDw9IDApOwotCQl9Ci0JCUFTU0VSVChsaXAtPmxpX2FpbC5haWxfYmFjayA9PSBwcmV2X2xpcCk7CiAJCUFTU0VSVCgobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpICE9IDApOwogCQlwcmV2X2xpcCA9IGxpcDsKLQkJbGlwID0gbGlwLT5saV9haWwuYWlsX2Zvcnc7CiAJfQotCUFTU0VSVChsaXAgPT0gKHhmc19sb2dfaXRlbV90KiliYXNlKTsKLQlBU1NFUlQoYmFzZS0+YWlsX2JhY2sgPT0gcHJldl9saXApOwogI2VuZGlmIC8qIFhGU19UUkFOU19ERUJVRyAqLwogfQogI2VuZGlmIC8qIERFQlVHICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jIGIvZnMveGZzL3hmc190cmFuc19idWYuYwppbmRleCA2MGI2Yjg5Li5jYjBjNTgzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKQEAgLTMwNCw3ICszMDQsOCBAQAogCWlmICh0cCA9PSBOVUxMKSB7CiAJCWJwID0geGZzX2J1Zl9yZWFkX2ZsYWdzKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CiAJCWlmICghYnApCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVOT01FTSk7CisJCQlyZXR1cm4gKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSA/CisJCQkJCUVBR0FJTiA6IFhGU19FUlJPUihFTk9NRU0pOwogCiAJCWlmICgoYnAgIT0gTlVMTCkgJiYgKFhGU19CVUZfR0VURVJST1IoYnApICE9IDApKSB7CiAJCQl4ZnNfaW9lcnJvcl9hbGVydCgieGZzX3RyYW5zX3JlYWRfYnVmIiwgbXAsCkBAIC0zNTMsMTcgKzM1NCwxNSBAQAogCQkJQVNTRVJUKCFYRlNfQlVGX0lTQVNZTkMoYnApKTsKIAkJCVhGU19CVUZfUkVBRChicCk7CiAJCQl4ZnNiZHN0cmF0KHRwLT50X21vdW50cCwgYnApOwotCQkJeGZzX2lvd2FpdChicCk7Ci0JCQlpZiAoWEZTX0JVRl9HRVRFUlJPUihicCkgIT0gMCkgeworCQkJZXJyb3IgPSB4ZnNfaW93YWl0KGJwKTsKKwkJCWlmIChlcnJvcikgewogCQkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4ZnNfdHJhbnNfcmVhZF9idWYiLCBtcCwKIAkJCQkJCSAgYnAsIGJsa25vKTsKLQkJCQllcnJvciA9IFhGU19CVUZfR0VURVJST1IoYnApOwogCQkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJCS8qCi0JCQkJICogV2UgY2FuIGdyYWNlZnVsbHkgcmVjb3ZlciBmcm9tIG1vc3QKLQkJCQkgKiByZWFkIGVycm9ycy4gT25lcyB3ZSBjYW4ndCBhcmUgdGhvc2UKLQkJCQkgKiB0aGF0IGhhcHBlbiBhZnRlciB0aGUgdHJhbnNhY3Rpb24ncwotCQkJCSAqIGFscmVhZHkgZGlydHkuCisJCQkJICogV2UgY2FuIGdyYWNlZnVsbHkgcmVjb3ZlciBmcm9tIG1vc3QgcmVhZAorCQkJCSAqIGVycm9ycy4gT25lcyB3ZSBjYW4ndCBhcmUgdGhvc2UgdGhhdCBoYXBwZW4KKwkJCQkgKiBhZnRlciB0aGUgdHJhbnNhY3Rpb24ncyBhbHJlYWR5IGRpcnR5LgogCQkJCSAqLwogCQkJCWlmICh0cC0+dF9mbGFncyAmIFhGU19UUkFOU19ESVJUWSkKIAkJCQkJeGZzX2ZvcmNlX3NodXRkb3duKHRwLT50X21vdW50cCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHlwZXMuaCBiL2ZzL3hmcy94ZnNfdHlwZXMuaAppbmRleCA1Yzg5YmU0Li4wZjUxOTE2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3R5cGVzLmgKKysrIGIvZnMveGZzL3hmc190eXBlcy5oCkBAIC0xNjAsNCArMTYwLDkgQEAKIAlYRlNfQlROVU1fTUFYCiB9IHhmc19idG51bV90OwogCitzdHJ1Y3QgeGZzX25hbWUgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQlsZW47Cit9OworCiAjZW5kaWYJLyogX19YRlNfVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3V0aWxzLmMgYi9mcy94ZnMveGZzX3V0aWxzLmMKaW5kZXggNDVkNzQwZC4uMmI4ZGM3ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc191dGlscy5jCisrKyBiL2ZzL3hmcy94ZnNfdXRpbHMuYwpAQCAtNDAsMzQgKzQwLDEyIEBACiAjaW5jbHVkZSAieGZzX2l0YWJsZS5oIgogI2luY2x1ZGUgInhmc191dGlscy5oIgogCi0vKgotICogeGZzX2dldF9kaXJfZW50cnkgaXMgdXNlZCB0byBnZXQgYSByZWZlcmVuY2UgdG8gYW4gaW5vZGUgZ2l2ZW4KLSAqIGl0cyBwYXJlbnQgZGlyZWN0b3J5IGlub2RlIGFuZCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4JIEl0IGRvZXMKLSAqIG5vdCBsb2NrIHRoZSBjaGlsZCBpbm9kZSwgYW5kIGl0IHVubG9ja3MgdGhlIGRpcmVjdG9yeSBiZWZvcmUKLSAqIHJldHVybmluZy4gIFRoZSBkaXJlY3RvcnkncyBnZW5lcmF0aW9uIG51bWJlciBpcyByZXR1cm5lZCBmb3IKLSAqIHVzZSBieSBhIGxhdGVyIGNhbGwgdG8geGZzX2xvY2tfZGlyX2FuZF9lbnRyeS4KLSAqLwotaW50Ci14ZnNfZ2V0X2Rpcl9lbnRyeSgKLQliaHZfdm5hbWVfdAkqZGVudHJ5LAotCXhmc19pbm9kZV90CSoqaXBwKQotewotCWJodl92bm9kZV90CSp2cDsKLQotCXZwID0gVk5BTUVfVE9fVk5PREUoZGVudHJ5KTsKLQotCSppcHAgPSB4ZnNfdnRvaSh2cCk7Ci0JaWYgKCEqaXBwKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVOT0VOVCk7Ci0JVk5fSE9MRCh2cCk7Ci0JcmV0dXJuIDA7Ci19CiAKIGludAogeGZzX2Rpcl9sb29rdXBfaW50KAogCXhmc19pbm9kZV90CSpkcCwKIAl1aW50CQlsb2NrX21vZGUsCi0JYmh2X3ZuYW1lX3QJKmRlbnRyeSwKKwlzdHJ1Y3QgeGZzX25hbWUJKm5hbWUsCiAJeGZzX2lub190CSppbnVtLAogCXhmc19pbm9kZV90CSoqaXBwKQogewpAQCAtNzUsNyArNTMsNyBAQAogCiAJeGZzX2l0cmFjZV9lbnRyeShkcCk7CiAKLQllcnJvciA9IHhmc19kaXJfbG9va3VwKE5VTEwsIGRwLCBWTkFNRShkZW50cnkpLCBWTkFNRUxFTihkZW50cnkpLCBpbnVtKTsKKwllcnJvciA9IHhmc19kaXJfbG9va3VwKE5VTEwsIGRwLCBuYW1lLCBpbnVtKTsKIAlpZiAoIWVycm9yKSB7CiAJCS8qCiAJCSAqIFVubG9jayB0aGUgZGlyZWN0b3J5LiBXZSBkbyB0aGlzIGJlY2F1c2Ugd2UgY2FuJ3QKQEAgLTMzOSwxMCArMzE3LDEwIEBACiAJaXAtPmlfZC5kaV9vbmxpbmsgPSAwOwogCW1lbXNldCgmKGlwLT5pX2QuZGlfcGFkWzBdKSwgMCwgc2l6ZW9mKGlwLT5pX2QuZGlfcGFkKSk7CiAJbXAgPSB0cC0+dF9tb3VudHA7Ci0JaWYgKCFYRlNfU0JfVkVSU0lPTl9IQVNOTElOSygmbXAtPm1fc2IpKSB7CisJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNubGluaygmbXAtPm1fc2IpKSB7CiAJCXNwaW5fbG9jaygmbXAtPm1fc2JfbG9jayk7Ci0JCWlmICghWEZTX1NCX1ZFUlNJT05fSEFTTkxJTksoJm1wLT5tX3NiKSkgewotCQkJWEZTX1NCX1ZFUlNJT05fQURETkxJTksoJm1wLT5tX3NiKTsKKwkJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNubGluaygmbXAtPm1fc2IpKSB7CisJCQl4ZnNfc2JfdmVyc2lvbl9hZGRubGluaygmbXAtPm1fc2IpOwogCQkJc3Bpbl91bmxvY2soJm1wLT5tX3NiX2xvY2spOwogCQkJeGZzX21vZF9zYih0cCwgWEZTX1NCX1ZFUlNJT05OVU0pOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc191dGlscy5oIGIvZnMveGZzL3hmc191dGlscy5oCmluZGV4IGY4NTdmY2MuLjE3NWIxMjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdXRpbHMuaAorKysgYi9mcy94ZnMveGZzX3V0aWxzLmgKQEAgLTIxLDE1ICsyMSwxNCBAQAogI2RlZmluZSBJUkVMRShpcCkJVk5fUkVMRShYRlNfSVRPVihpcCkpCiAjZGVmaW5lIElIT0xEKGlwKQlWTl9IT0xEKFhGU19JVE9WKGlwKSkKIAotZXh0ZXJuIGludCB4ZnNfZ2V0X2Rpcl9lbnRyeSAoYmh2X3ZuYW1lX3QgKiwgeGZzX2lub2RlX3QgKiopOwotZXh0ZXJuIGludCB4ZnNfZGlyX2xvb2t1cF9pbnQgKHhmc19pbm9kZV90ICosIHVpbnQsIGJodl92bmFtZV90ICosIHhmc19pbm9fdCAqLAotCQkJCXhmc19pbm9kZV90ICoqKTsKLWV4dGVybiBpbnQgeGZzX3RydW5jYXRlX2ZpbGUgKHhmc19tb3VudF90ICosIHhmc19pbm9kZV90ICopOwotZXh0ZXJuIGludCB4ZnNfZGlyX2lhbGxvYyAoeGZzX3RyYW5zX3QgKiosIHhmc19pbm9kZV90ICosIG1vZGVfdCwgeGZzX25saW5rX3QsCitleHRlcm4gaW50IHhmc19kaXJfbG9va3VwX2ludCh4ZnNfaW5vZGVfdCAqLCB1aW50LCBzdHJ1Y3QgeGZzX25hbWUgKiwKKwkJCQl4ZnNfaW5vX3QgKiwgeGZzX2lub2RlX3QgKiopOworZXh0ZXJuIGludCB4ZnNfdHJ1bmNhdGVfZmlsZSh4ZnNfbW91bnRfdCAqLCB4ZnNfaW5vZGVfdCAqKTsKK2V4dGVybiBpbnQgeGZzX2Rpcl9pYWxsb2MoeGZzX3RyYW5zX3QgKiosIHhmc19pbm9kZV90ICosIG1vZGVfdCwgeGZzX25saW5rX3QsCiAJCQkJeGZzX2Rldl90LCBjcmVkX3QgKiwgcHJpZF90LCBpbnQsCiAJCQkJeGZzX2lub2RlX3QgKiosIGludCAqKTsKLWV4dGVybiBpbnQgeGZzX2Ryb3BsaW5rICh4ZnNfdHJhbnNfdCAqLCB4ZnNfaW5vZGVfdCAqKTsKLWV4dGVybiBpbnQgeGZzX2J1bXBsaW5rICh4ZnNfdHJhbnNfdCAqLCB4ZnNfaW5vZGVfdCAqKTsKLWV4dGVybiB2b2lkIHhmc19idW1wX2lub192ZXJzMiAoeGZzX3RyYW5zX3QgKiwgeGZzX2lub2RlX3QgKik7CitleHRlcm4gaW50IHhmc19kcm9wbGluayh4ZnNfdHJhbnNfdCAqLCB4ZnNfaW5vZGVfdCAqKTsKK2V4dGVybiBpbnQgeGZzX2J1bXBsaW5rKHhmc190cmFuc190ICosIHhmc19pbm9kZV90ICopOworZXh0ZXJuIHZvaWQgeGZzX2J1bXBfaW5vX3ZlcnMyKHhmc190cmFuc190ICosIHhmc19pbm9kZV90ICopOwogCiAjZW5kaWYJLyogX19YRlNfVVRJTFNfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zmc29wcy5jIGIvZnMveGZzL3hmc192ZnNvcHMuYwppbmRleCA0MTM1ODdmLi5mYzQ4MTU4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zmc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgInhmc19ydy5oIgotI2luY2x1ZGUgInhmc19yZWZjYWNoZS5oIgogI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgogI2luY2x1ZGUgInhmc19sb2dfcHJpdi5oIgogI2luY2x1ZGUgInhmc19kaXIyX3RyYWNlLmgiCkBAIC01Niw2ICs1NSw3IEBACiAjaW5jbHVkZSAieGZzX2Zzb3BzLmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX3Zmc29wcy5oIgorI2luY2x1ZGUgInhmc191dGlscy5oIgogCiAKIGludCBfX2luaXQKQEAgLTY5LDE1ICs2OSwxNyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgb2YgdGhlIHpvbmUgYWxsb2NhdG9ycyB3ZSB1c2UuCiAJICovCisJeGZzX2xvZ190aWNrZXRfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4bG9nX3RpY2tldF90KSwKKwkJCQkJCSJ4ZnNfbG9nX3RpY2tldCIpOwogCXhmc19ibWFwX2ZyZWVfaXRlbV96b25lID0ga21lbV96b25lX2luaXQoc2l6ZW9mKHhmc19ibWFwX2ZyZWVfaXRlbV90KSwKLQkJCQkJCSAieGZzX2JtYXBfZnJlZV9pdGVtIik7CisJCQkJCQkieGZzX2JtYXBfZnJlZV9pdGVtIik7CiAJeGZzX2J0cmVlX2N1cl96b25lID0ga21lbV96b25lX2luaXQoc2l6ZW9mKHhmc19idHJlZV9jdXJfdCksCi0JCQkJCSAgICAieGZzX2J0cmVlX2N1ciIpOwotCXhmc190cmFuc196b25lID0ga21lbV96b25lX2luaXQoc2l6ZW9mKHhmc190cmFuc190KSwgInhmc190cmFucyIpOwotCXhmc19kYV9zdGF0ZV96b25lID0KLQkJa21lbV96b25lX2luaXQoc2l6ZW9mKHhmc19kYV9zdGF0ZV90KSwgInhmc19kYV9zdGF0ZSIpOworCQkJCQkJInhmc19idHJlZV9jdXIiKTsKKwl4ZnNfZGFfc3RhdGVfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfZGFfc3RhdGVfdCksCisJCQkJCQkieGZzX2RhX3N0YXRlIik7CiAJeGZzX2RhYnVmX3pvbmUgPSBrbWVtX3pvbmVfaW5pdChzaXplb2YoeGZzX2RhYnVmX3QpLCAieGZzX2RhYnVmIik7CiAJeGZzX2lmb3JrX3pvbmUgPSBrbWVtX3pvbmVfaW5pdChzaXplb2YoeGZzX2lmb3JrX3QpLCAieGZzX2lmb3JrIik7CisJeGZzX3RyYW5zX3pvbmUgPSBrbWVtX3pvbmVfaW5pdChzaXplb2YoeGZzX3RyYW5zX3QpLCAieGZzX3RyYW5zIik7CiAJeGZzX2FjbF96b25lX2luaXQoeGZzX2FjbF96b25lLCAieGZzX2FjbCIpOwogCXhmc19tcnVfY2FjaGVfaW5pdCgpOwogCXhmc19maWxlc3RyZWFtX2luaXQoKTsKQEAgLTExMyw5ICsxMTUsNiBAQAogCXhmc19pbGlfem9uZSA9CiAJCWttZW1fem9uZV9pbml0X2ZsYWdzKHNpemVvZih4ZnNfaW5vZGVfbG9nX2l0ZW1fdCksICJ4ZnNfaWxpIiwKIAkJCQkJS01fWk9ORV9TUFJFQUQsIE5VTEwpOwotCXhmc19pY2x1c3Rlcl96b25lID0KLQkJa21lbV96b25lX2luaXRfZmxhZ3Moc2l6ZW9mKHhmc19pY2x1c3Rlcl90KSwgInhmc19pY2x1c3RlciIsCi0JCQkJCUtNX1pPTkVfU1BSRUFELCBOVUxMKTsKIAogCS8qCiAJICogQWxsb2NhdGUgZ2xvYmFsIHRyYWNlIGJ1ZmZlcnMuCkBAIC0xNTMsMTEgKzE1Miw5IEBACiAJZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfaW5vZGVfem9uZTsKIAlleHRlcm4ga21lbV96b25lX3QJKnhmc19lZmRfem9uZTsKIAlleHRlcm4ga21lbV96b25lX3QJKnhmc19lZmlfem9uZTsKLQlleHRlcm4ga21lbV96b25lX3QJKnhmc19pY2x1c3Rlcl96b25lOwogCiAJeGZzX2NsZWFudXBfcHJvY2ZzKCk7CiAJeGZzX3N5c2N0bF91bnJlZ2lzdGVyKCk7Ci0JeGZzX3JlZmNhY2hlX2Rlc3Ryb3koKTsKIAl4ZnNfZmlsZXN0cmVhbV91bmluaXQoKTsKIAl4ZnNfbXJ1X2NhY2hlX3VuaW5pdCgpOwogCXhmc19hY2xfem9uZV9kZXN0cm95KHhmc19hY2xfem9uZSk7CkBAIC0xODksNyArMTg2LDYgQEAKIAlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfZWZpX3pvbmUpOwogCWttZW1fem9uZV9kZXN0cm95KHhmc19pZm9ya196b25lKTsKIAlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfaWxpX3pvbmUpOwotCWttZW1fem9uZV9kZXN0cm95KHhmc19pY2x1c3Rlcl96b25lKTsKIH0KIAogLyoKQEAgLTI4MSw4ICsyNzcsOCBAQAogCQltcC0+bV9yZWFkaW9fbG9nID0gbXAtPm1fd3JpdGVpb19sb2cgPSBhcC0+aW9zaXplbG9nOwogCX0KIAotCWlmIChhcC0+ZmxhZ3MgJiBYRlNNTlRfSURFTEVURSkKLQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0lERUxFVEU7CisJaWYgKGFwLT5mbGFncyAmIFhGU01OVF9JS0VFUCkKKwkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0lLRUVQOwogCWlmIChhcC0+ZmxhZ3MgJiBYRlNNTlRfRElSU1lOQykKIAkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0RJUlNZTkM7CiAJaWYgKGFwLT5mbGFncyAmIFhGU01OVF9BVFRSMikKQEAgLTMzMCw3ICszMjYsNyBAQAogCWludAkJCXJvbmx5ID0gKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSk7CiAKIAkvKiBGYWlsIGEgbW91bnQgd2hlcmUgdGhlIGxvZ2J1ZiBpcyBzbWFsbGVyIHRoZW4gdGhlIGxvZyBzdHJpcGUgKi8KLQlpZiAoWEZTX1NCX1ZFUlNJT05fSEFTTE9HVjIoJm1wLT5tX3NiKSkgeworCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbXAtPm1fc2IpKSB7CiAJCWlmICgoYXAtPmxvZ2J1ZnNpemUgPD0gMCkgJiYKIAkJICAgIChtcC0+bV9zYi5zYl9sb2dzdW5pdCA+IFhMT0dfQklHX1JFQ09SRF9CU0laRSkpIHsKIAkJCW1wLT5tX2xvZ2JzaXplID0gbXAtPm1fc2Iuc2JfbG9nc3VuaXQ7CkBAIC0zNDksOSArMzQ1LDggQEAKIAkJfQogCX0KIAotCWlmIChYRlNfU0JfVkVSU0lPTl9IQVNBVFRSMigmbXAtPm1fc2IpKSB7CisJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2F0dHIyKCZtcC0+bV9zYikpCiAJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9BVFRSMjsKLQl9CiAKIAkvKgogCSAqIHByb2hpYml0IHIvdyBtb3VudHMgb2YgcmVhZC1vbmx5IGZpbGVzeXN0ZW1zCkBAIC0zNjYsNyArMzYxLDcgQEAKIAkgKiBjaGVjayBmb3Igc2hhcmVkIG1vdW50LgogCSAqLwogCWlmIChhcC0+ZmxhZ3MgJiBYRlNNTlRfU0hBUkVEKSB7Ci0JCWlmICghWEZTX1NCX1ZFUlNJT05fSEFTU0hBUkVEKCZtcC0+bV9zYikpCisJCWlmICgheGZzX3NiX3ZlcnNpb25faGFzc2hhcmVkKCZtcC0+bV9zYikpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAKIAkJLyoKQEAgLTUxMiw3ICs1MDcsNyBAQAogCWlmICghZXJyb3IgJiYgbG9nZGV2ICYmIGxvZ2RldiAhPSBkZGV2KSB7CiAJCXVuc2lnbmVkIGludAlsb2dfc2VjdG9yX3NpemUgPSBCQlNJWkU7CiAKLQkJaWYgKFhGU19TQl9WRVJTSU9OX0hBU1NFQ1RPUigmbXAtPm1fc2IpKQorCQlpZiAoeGZzX3NiX3ZlcnNpb25faGFzc2VjdG9yKCZtcC0+bV9zYikpCiAJCQlsb2dfc2VjdG9yX3NpemUgPSBtcC0+bV9zYi5zYl9sb2dzZWN0c2l6ZTsKIAkJZXJyb3IgPSB4ZnNfc2V0c2l6ZV9idWZ0YXJnKG1wLT5tX2xvZ2Rldl90YXJncCwKIAkJCQkJICAgIG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwKQEAgLTU3NCw3ICs1NjksNyBAQAogI2lmZGVmIEhBVkVfRE1BUEkKIAlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfRE1BUEkpIHsKIAkJZXJyb3IgPSBYRlNfU0VORF9QUkVVTk1PVU5UKG1wLAotCQkJCXJ2cCwgRE1fUklHSFRfTlVMTCwgcnZwLCBETV9SSUdIVF9OVUxMLAorCQkJCXJpcCwgRE1fUklHSFRfTlVMTCwgcmlwLCBETV9SSUdIVF9OVUxMLAogCQkJCU5VTEwsIE5VTEwsIDAsIDAsCiAJCQkJKG1wLT5tX2RtZXZtYXNrICYgKDE8PERNX0VWRU5UX1BSRVVOTU9VTlQpKT8KIAkJCQkJMDpETV9GTEFHU19VTldBTlRFRCk7CkBAIC01ODUsMTEgKzU4MCw2IEBACiAJCQkJCTAgOiBETV9GTEFHU19VTldBTlRFRDsKIAl9CiAjZW5kaWYKLQkvKgotCSAqIEZpcnN0IGJsb3cgYW55IHJlZmVyZW5jZWQgaW5vZGUgZnJvbSB0aGlzIGZpbGUgc3lzdGVtCi0JICogb3V0IG9mIHRoZSByZWZlcmVuY2UgY2FjaGUsIGFuZCBkZWxldGUgdGhlIHRpbWVyLgotCSAqLwotCXhmc19yZWZjYWNoZV9wdXJnZV9tcChtcCk7CiAKIAkvKgogCSAqIEJsb3cgYXdheSBhbnkgcmVmZXJlbmNlZCBpbm9kZSBpbiB0aGUgZmlsZXN0cmVhbXMgY2FjaGUuCkBAIC02MDgsNyArNTk4LDcgQEAKIAkvKgogCSAqIERyb3AgdGhlIHJlZmVyZW5jZSBjb3VudAogCSAqLwotCVZOX1JFTEUocnZwKTsKKwlJUkVMRShyaXApOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBmb3JjaW5nIGEgc2h1dGRvd24sIHR5cGljYWxseSBiZWNhdXNlIG9mIGEgbWVkaWEgZXJyb3IsCkBAIC02MzAsNyArNjIwLDcgQEAKIAkJLyogTm90ZTogbXAgc3RydWN0dXJlIG11c3Qgc3RpbGwgZXhpc3QgZm9yCiAJCSAqIFhGU19TRU5EX1VOTU9VTlQoKSBjYWxsLgogCQkgKi8KLQkJWEZTX1NFTkRfVU5NT1VOVChtcCwgZXJyb3IgPT0gMCA/IHJ2cCA6IE5VTEwsCisJCVhGU19TRU5EX1VOTU9VTlQobXAsIGVycm9yID09IDAgPyByaXAgOiBOVUxMLAogCQkJRE1fUklHSFRfTlVMTCwgMCwgZXJyb3IsIHVubW91bnRfZXZlbnRfZmxhZ3MpOwogCX0KIAlpZiAoeGZzX3VubW91bnRmc19uZWVkZWQpIHsKQEAgLTY0NywxMyArNjM3LDEyIEBACiAJcmV0dXJuIFhGU19FUlJPUihlcnJvcik7CiB9CiAKLVNUQVRJQyBpbnQKK1NUQVRJQyB2b2lkCiB4ZnNfcXVpZXNjZV9mcygKIAl4ZnNfbW91bnRfdAkJKm1wKQogewogCWludAkJCWNvdW50ID0gMCwgcGluY291bnQ7CiAKLQl4ZnNfcmVmY2FjaGVfcHVyZ2VfbXAobXApOwogCXhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDApOwogCXhmc19maW5pc2hfcmVjbGFpbV9hbGwobXAsIDApOwogCkBAIC02NzIsOCArNjYxLDYgQEAKIAkJCWNvdW50Kys7CiAJCX0KIAl9IHdoaWxlIChjb3VudCA8IDIpOwotCi0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC02ODUsNiArNjcyLDggQEAKIHhmc19hdHRyX3F1aWVzY2UoCiAJeGZzX21vdW50X3QJKm1wKQogeworCWludAllcnJvciA9IDA7CisKIAkvKiB3YWl0IGZvciBhbGwgbW9kaWZpY2F0aW9ucyB0byBjb21wbGV0ZSAqLwogCXdoaWxlIChhdG9taWNfcmVhZCgmbXAtPm1fYWN0aXZlX3RyYW5zKSA+IDApCiAJCWRlbGF5KDEwMCk7CkBAIC02OTUsNyArNjg0LDExIEBACiAJQVNTRVJUX0FMV0FZUyhhdG9taWNfcmVhZCgmbXAtPm1fYWN0aXZlX3RyYW5zKSA9PSAwKTsKIAogCS8qIFB1c2ggdGhlIHN1cGVyYmxvY2sgYW5kIHdyaXRlIGFuIHVubW91bnQgcmVjb3JkICovCi0JeGZzX2xvZ19zYmNvdW50KG1wLCAxKTsKKwllcnJvciA9IHhmc19sb2dfc2Jjb3VudChtcCwgMSk7CisJaWYgKGVycm9yKQorCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKKwkJCQkieGZzX2F0dHJfcXVpZXNjZTogZmFpbGVkIHRvIGxvZyBzYiBjaGFuZ2VzLiAiCisJCQkJIkZyb3plbiBpbWFnZSBtYXkgbm90IGJlIGNvbnNpc3RlbnQuIik7CiAJeGZzX2xvZ191bm1vdW50X3dyaXRlKG1wKTsKIAl4ZnNfdW5tb3VudGZzX3dyaXRlc2IobXApOwogfQpAQCAtNzkxLDggKzc4NCw4IEBACiAJCWdvdG8gZnNjb3JydXB0X291dDI7CiAKIAlpZiAocmJtaXApIHsKLQkJVk5fUkVMRShYRlNfSVRPVihyYm1pcCkpOwotCQlWTl9SRUxFKFhGU19JVE9WKHJzdW1pcCkpOworCQlJUkVMRShyYm1pcCk7CisJCUlSRUxFKHJzdW1pcCk7CiAJfQogCiAJeGZzX2l1bmxvY2socmlwLCBYRlNfSUxPQ0tfRVhDTCk7CkBAIC0xMTcwLDEwICsxMTYzLDEwIEBACiAJCQkgKiBhYm92ZSwgdGhlbiB3YWl0IHVudGlsIGFmdGVyIHdlJ3ZlIHVubG9ja2VkCiAJCQkgKiB0aGUgaW5vZGUgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlLiAgVGhpcyBpcwogCQkJICogYmVjYXVzZSB3ZSBjYW4gYmUgYWxyZWFkeSBob2xkaW5nIHRoZSBpbm9kZQotCQkJICogbG9jayB3aGVuIFZOX1JFTEUoKSBjYWxscyB4ZnNfaW5hY3RpdmUoKS4KKwkJCSAqIGxvY2sgd2hlbiBJUkVMRSgpIGNhbGxzIHhmc19pbmFjdGl2ZSgpLgogCQkJICoKIAkJCSAqIE1ha2Ugc3VyZSB0byBkcm9wIHRoZSBtb3VudCBsb2NrIGJlZm9yZSBjYWxsaW5nCi0JCQkgKiBWTl9SRUxFKCkgc28gdGhhdCB3ZSBkb24ndCB0cmlwIG92ZXIgb3Vyc2VsdmVzIGlmCisJCQkgKiBJUkVMRSgpIHNvIHRoYXQgd2UgZG9uJ3QgdHJpcCBvdmVyIG91cnNlbHZlcyBpZgogCQkJICogd2UgaGF2ZSB0byBnbyBmb3IgdGhlIG1vdW50IGxvY2sgYWdhaW4gaW4gdGhlCiAJCQkgKiBpbmFjdGl2ZSBjb2RlLgogCQkJICovCkBAIC0xMTgxLDcgKzExNzQsNyBAQAogCQkJCUlQT0lOVEVSX0lOU0VSVChpcCwgbXApOwogCQkJfQogCi0JCQlWTl9SRUxFKHZwKTsKKwkJCUlSRUxFKGlwKTsKIAogCQkJdm5vZGVfcmVmZWQgPSBCX0ZBTFNFOwogCQl9CkBAIC0xMzI0LDMwICsxMzE3LDggQEAKIAl9CiAKIAkvKgotCSAqIElmIHRoaXMgaXMgdGhlIHBlcmlvZGljIHN5bmMsIHRoZW4ga2ljayBzb21lIGVudHJpZXMgb3V0IG9mCi0JICogdGhlIHJlZmVyZW5jZSBjYWNoZS4gIFRoaXMgZW5zdXJlcyB0aGF0IGlkbGUgZW50cmllcyBhcmUKLQkgKiBldmVudHVhbGx5IGtpY2tlZCBvdXQgb2YgdGhlIGNhY2hlLgotCSAqLwotCWlmIChmbGFncyAmIFNZTkNfUkVGQ0FDSEUpIHsKLQkJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQotCQkJeGZzX3JlZmNhY2hlX3B1cmdlX21wKG1wKTsKLQkJZWxzZQotCQkJeGZzX3JlZmNhY2hlX3B1cmdlX3NvbWUobXApOwotCX0KLQotCS8qCi0JICogSWYgYXNrZWQsIHVwZGF0ZSB0aGUgZGlzayBzdXBlcmJsb2NrIHdpdGggaW5jb3JlIGNvdW50ZXIgdmFsdWVzIGlmIHdlCi0JICogYXJlIHVzaW5nIG5vbi1wZXJzaXN0ZW50IGNvdW50ZXJzIHNvIHRoYXQgdGhleSBkb24ndCBnZXQgdG9vIGZhciBvdXQKLQkgKiBvZiBzeW5jIGlmIHdlIGNyYXNoIG9yIGdldCBhIGZvcmNlZCBzaHV0ZG93bi4gV2UgZG9uJ3Qgd2FudCB0byBmb3JjZQotCSAqIHRoaXMgdG8gZGlzaywganVzdCBnZXQgYSB0cmFuc2FjdGlvbiBpbnRvIHRoZSBpY2xvZ3MuLi4uCi0JICovCi0JaWYgKGZsYWdzICYgU1lOQ19TVVBFUikKLQkJeGZzX2xvZ19zYmNvdW50KG1wLCAwKTsKLQotCS8qCiAJICogTm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgbG9nIG5lZWRzIGEgImR1bW15IiB0cmFuc2FjdGlvbi4KIAkgKi8KLQogCWlmICghKGZsYWdzICYgU1lOQ19SRU1PVU5UKSAmJiB4ZnNfbG9nX25lZWRfY292ZXJlZChtcCkpIHsKIAkJeGZzX3RyYW5zX3QgKnRwOwogCQl4ZnNfaW5vZGVfdCAqaXA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggNTEzMDUyNC4uNjY1MDYwMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgInhmc19xdW90YS5oIgogI2luY2x1ZGUgInhmc191dGlscy5oIgogI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCi0jaW5jbHVkZSAieGZzX3JlZmNhY2hlLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3NwYWNlLmgiCiAjaW5jbHVkZSAieGZzX2xvZ19wcml2LmgiCiAjaW5jbHVkZSAieGZzX2ZpbGVzdHJlYW0uaCIKQEAgLTMyNyw3ICszMjYsNyBAQAogCQlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfVFJVTkNBVEUpICYmCiAJCSAgICAhKGZsYWdzICYgQVRUUl9ETUkpKSB7CiAJCQlpbnQgZG1mbGFncyA9IEFUX0RFTEFZX0ZMQUcoZmxhZ3MpIHwgRE1fU0VNX0ZMQUdfV1I7Ci0JCQljb2RlID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfVFJVTkNBVEUsIHZwLAorCQkJY29kZSA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1RSVU5DQVRFLCBpcCwKIAkJCQl2YXAtPnZhX3NpemUsIDAsIGRtZmxhZ3MsIE5VTEwpOwogCQkJaWYgKGNvZGUpIHsKIAkJCQlsb2NrX2ZsYWdzID0gMDsKQEAgLTYzNCw2ICs2MzMsMTUgQEAKIAkgKiBUcnVuY2F0ZSBmaWxlLiAgTXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gYW5kIG5vdCBiZSBhIGRpcmVjdG9yeS4KIAkgKi8KIAlpZiAobWFzayAmIFhGU19BVF9TSVpFKSB7CisJCS8qCisJCSAqIE9ubHkgY2hhbmdlIHRoZSBjL210aW1lIGlmIHdlIGFyZSBjaGFuZ2luZyB0aGUgc2l6ZQorCQkgKiBvciB3ZSBhcmUgZXhwbGljaXRseSBhc2tlZCB0byBjaGFuZ2UgaXQuIFRoaXMgaGFuZGxlcworCQkgKiB0aGUgc2VtYW50aWMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRydW5jYXRlKCkgYW5kIGZ0cnVuY2F0ZSgpCisJCSAqIGFzIGltcGxlbWVudGVkIGluIHRoZSBWRlMuCisJCSAqLworCQlpZiAodmFwLT52YV9zaXplICE9IGlwLT5pX3NpemUgfHwgKG1hc2sgJiBYRlNfQVRfQ1RJTUUpKQorCQkJdGltZWZsYWdzIHw9IFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHOworCiAJCWlmICh2YXAtPnZhX3NpemUgPiBpcC0+aV9zaXplKSB7CiAJCQl4ZnNfaWdyb3dfZmluaXNoKHRwLCBpcCwgdmFwLT52YV9zaXplLAogCQkJICAgICEoZmxhZ3MgJiBBVFRSX0RNSSkpOwpAQCAtNjYyLDEwICs2NzAsNiBAQAogCQkJICovCiAJCQl4ZnNfaWZsYWdzX3NldChpcCwgWEZTX0lUUlVOQ0FURUQpOwogCQl9Ci0JCS8qCi0JCSAqIEhhdmUgdG8gZG8gdGhpcyBldmVuIGlmIHRoZSBmaWxlJ3Mgc2l6ZSBkb2Vzbid0IGNoYW5nZS4KLQkJICovCi0JCXRpbWVmbGFncyB8PSBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRzsKIAl9CiAKIAkvKgpAQCAtODc3LDcgKzg4MSw3IEBACiAKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfQVRUUklCVVRFKSAmJgogCSAgICAhKGZsYWdzICYgQVRUUl9ETUkpKSB7Ci0JCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX0FUVFJJQlVURSwgdnAsIERNX1JJR0hUX05VTEwsCisJCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX0FUVFJJQlVURSwgaXAsIERNX1JJR0hUX05VTEwsCiAJCQkJCU5VTEwsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCTAsIDAsIEFUX0RFTEFZX0ZMQUcoZmxhZ3MpKTsKIAl9CkBAIC0xNDQzLDI4ICsxNDQ3LDIyIEBACiAJdHAgPSAqdHBwOwogCW1wID0gaXAtPmlfbW91bnQ7CiAJQVNTRVJUKGlwLT5pX2QuZGlfZm9ya29mZiAhPSAwKTsKLQl4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yX3VubG9jazsKIAogCWVycm9yID0geGZzX2F0dHJfaW5hY3RpdmUoaXApOwotCWlmIChlcnJvcikgewotCQkqdHBwID0gTlVMTDsKLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JCXJldHVybiBlcnJvcjsgLyogZ290byBvdXQgKi8KLQl9CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yX3VubG9jazsKIAogCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfSU5BQ1RJVkUpOwogCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsCiAJCQkJICBYRlNfSUZSRUVfTE9HX1JFUyhtcCksCiAJCQkJICAwLCBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLAogCQkJCSAgWEZTX0lOQUNUSVZFX0xPR19DT1VOVCk7Ci0JaWYgKGVycm9yKSB7Ci0JCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSk7Ci0JCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQkqdHBwID0gTlVMTDsKLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yX2NhbmNlbDsKIAogCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JT0xPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTsKQEAgLTE0NzUsNiArMTQ3MywxNCBAQAogCiAJKnRwcCA9IHRwOwogCXJldHVybiAwOworCitlcnJvcl9jYW5jZWw6CisJQVNTRVJUKFhGU19GT1JDRURfU0hVVERPV04obXApKTsKKwl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKK2Vycm9yX3VubG9jazoKKwkqdHBwID0gTlVMTDsKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludApAQCAtMTUyMCwxMiArMTUyNiw2IEBACiAJCQl4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCBYRlNfQl9BU1lOQywgRklfTk9ORSk7CiAJfQogCi0jaWZkZWYgSEFWRV9SRUZDQUNIRQotCS8qIElmIHdlIGFyZSBpbiB0aGUgTkZTIHJlZmVyZW5jZSBjYWNoZSB0aGVuIGRvbid0IGRvIHRoaXMgbm93ICovCi0JaWYgKGlwLT5pX3JlZmNhY2hlKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCiAJaWYgKGlwLT5pX2QuZGlfbmxpbmsgIT0gMCkgewogCQlpZiAoKCgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSAmJgogCQkgICAgICgoaXAtPmlfc2l6ZSA+IDApIHx8IChWTl9DQUNIRUQodnApID4gMCB8fApAQCAtMTU4OCw5ICsxNTg4LDggQEAKIAogCW1wID0gaXAtPmlfbW91bnQ7CiAKLQlpZiAoaXAtPmlfZC5kaV9ubGluayA9PSAwICYmIERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX0RFU1RST1kpKSB7Ci0JCSh2b2lkKSBYRlNfU0VORF9ERVNUUk9ZKG1wLCB2cCwgRE1fUklHSFRfTlVMTCk7Ci0JfQorCWlmIChpcC0+aV9kLmRpX25saW5rID09IDAgJiYgRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfREVTVFJPWSkpCisJCVhGU19TRU5EX0RFU1RST1kobXAsIGlwLCBETV9SSUdIVF9OVUxMKTsKIAogCWVycm9yID0gMDsKIApAQCAtMTc0NCwxMSArMTc0MywxOCBAQAogCQlYRlNfVFJBTlNfTU9EX0RRVU9UX0JZSU5PKG1wLCB0cCwgaXAsIFhGU19UUkFOU19EUV9JQ09VTlQsIC0xKTsKIAogCQkvKgotCQkgKiBKdXN0IGlnbm9yZSBlcnJvcnMgYXQgdGhpcyBwb2ludC4gIFRoZXJlIGlzCi0JCSAqIG5vdGhpbmcgd2UgY2FuIGRvIGV4Y2VwdCB0byB0cnkgdG8ga2VlcCBnb2luZy4KKwkJICogSnVzdCBpZ25vcmUgZXJyb3JzIGF0IHRoaXMgcG9pbnQuICBUaGVyZSBpcyBub3RoaW5nIHdlIGNhbgorCQkgKiBkbyBleGNlcHQgdG8gdHJ5IHRvIGtlZXAgZ29pbmcuIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIHNpbGVudAorCQkgKiBlcnJvci4KIAkJICovCi0JCSh2b2lkKSB4ZnNfYm1hcF9maW5pc2goJnRwLCAgJmZyZWVfbGlzdCwgJmNvbW1pdHRlZCk7Ci0JCSh2b2lkKSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKKwkJZXJyb3IgPSB4ZnNfYm1hcF9maW5pc2goJnRwLCAgJmZyZWVfbGlzdCwgJmNvbW1pdHRlZCk7CisJCWlmIChlcnJvcikKKwkJCXhmc19mc19jbW5fZXJyKENFX05PVEUsIG1wLCAieGZzX2luYWN0aXZlOiAiCisJCQkJInhmc19ibWFwX2ZpbmlzaCgpIHJldHVybmVkIGVycm9yICVkIiwgZXJyb3IpOworCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOworCQlpZiAoZXJyb3IpCisJCQl4ZnNfZnNfY21uX2VycihDRV9OT1RFLCBtcCwgInhmc19pbmFjdGl2ZTogIgorCQkJCSJ4ZnNfdHJhbnNfY29tbWl0KCkgcmV0dXJuZWQgZXJyb3IgJWQiLCBlcnJvcik7CiAJfQogCS8qCiAJICogUmVsZWFzZSB0aGUgZHF1b3RzIGhlbGQgYnkgaW5vZGUsIGlmIGFueS4KQEAgLTE3NjUsOCArMTc3MSw4IEBACiBpbnQKIHhmc19sb29rdXAoCiAJeGZzX2lub2RlX3QJCSpkcCwKLQliaHZfdm5hbWVfdAkJKmRlbnRyeSwKLQliaHZfdm5vZGVfdAkJKip2cHApCisJc3RydWN0IHhmc19uYW1lCQkqbmFtZSwKKwl4ZnNfaW5vZGVfdAkJKippcHApCiB7CiAJeGZzX2lub2RlX3QJCSppcDsKIAl4ZnNfaW5vX3QJCWVfaW51bTsKQEAgLTE3NzksOSArMTc4NSw5IEBACiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAogCWxvY2tfbW9kZSA9IHhmc19pbG9ja19tYXBfc2hhcmVkKGRwKTsKLQllcnJvciA9IHhmc19kaXJfbG9va3VwX2ludChkcCwgbG9ja19tb2RlLCBkZW50cnksICZlX2ludW0sICZpcCk7CisJZXJyb3IgPSB4ZnNfZGlyX2xvb2t1cF9pbnQoZHAsIGxvY2tfbW9kZSwgbmFtZSwgJmVfaW51bSwgJmlwKTsKIAlpZiAoIWVycm9yKSB7Ci0JCSp2cHAgPSBYRlNfSVRPVihpcCk7CisJCSppcHAgPSBpcDsKIAkJeGZzX2l0cmFjZV9yZWYoaXApOwogCX0KIAl4ZnNfaXVubG9ja19tYXBfc2hhcmVkKGRwLCBsb2NrX21vZGUpOwpAQCAtMTc5MSwxOSArMTc5NywxNiBAQAogaW50CiB4ZnNfY3JlYXRlKAogCXhmc19pbm9kZV90CQkqZHAsCi0JYmh2X3ZuYW1lX3QJCSpkZW50cnksCisJc3RydWN0IHhmc19uYW1lCQkqbmFtZSwKIAltb2RlX3QJCQltb2RlLAogCXhmc19kZXZfdAkJcmRldiwKLQliaHZfdm5vZGVfdAkJKip2cHAsCisJeGZzX2lub2RlX3QJCSoqaXBwLAogCWNyZWRfdAkJCSpjcmVkcCkKIHsKLQljaGFyCQkJKm5hbWUgPSBWTkFNRShkZW50cnkpOwotCXhmc19tb3VudF90CSAgICAgICAgKm1wID0gZHAtPmlfbW91bnQ7Ci0JYmh2X3Zub2RlX3QJCSpkaXJfdnAgPSBYRlNfSVRPVihkcCk7CisJeGZzX21vdW50X3QJCSptcCA9IGRwLT5pX21vdW50OwogCXhmc19pbm9kZV90CQkqaXA7Ci0JYmh2X3Zub2RlX3QJICAgICAgICAqdnAgPSBOVUxMOwogCXhmc190cmFuc190CQkqdHA7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgZXJyb3I7CisJaW50CQkJZXJyb3I7CiAJeGZzX2JtYXBfZnJlZV90CQlmcmVlX2xpc3Q7CiAJeGZzX2ZzYmxvY2tfdAkJZmlyc3RfYmxvY2s7CiAJYm9vbGVhbl90CQl1bmxvY2tfZHBfb25fZXJyb3IgPSBCX0ZBTFNFOwpAQCAtMTgxMywxNyArMTgxNiwxNCBAQAogCXhmc19wcmlkX3QJCXByaWQ7CiAJc3RydWN0IHhmc19kcXVvdAkqdWRxcCwgKmdkcXA7CiAJdWludAkJCXJlc2Jsa3M7Ci0JaW50CQkJbmFtZWxlbjsKIAotCUFTU0VSVCghKnZwcCk7CisJQVNTRVJUKCEqaXBwKTsKIAl4ZnNfaXRyYWNlX2VudHJ5KGRwKTsKIAotCW5hbWVsZW4gPSBWTkFNRUxFTihkZW50cnkpOwotCiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX0NSRUFURSkpIHsKIAkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX0NSRUFURSwKLQkJCQlkaXJfdnAsIERNX1JJR0hUX05VTEwsIE5VTEwsCi0JCQkJRE1fUklHSFRfTlVMTCwgbmFtZSwgTlVMTCwKKwkJCQlkcCwgRE1fUklHSFRfTlVMTCwgTlVMTCwKKwkJCQlETV9SSUdIVF9OVUxMLCBuYW1lLT5uYW1lLCBOVUxMLAogCQkJCW1vZGUsIDAsIDApOwogCiAJCWlmIChlcnJvcikKQEAgLTE4NTUsNyArMTg1NSw3IEBACiAKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0NSRUFURSk7CiAJY2FuY2VsX2ZsYWdzID0gWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUzsKLQlyZXNibGtzID0gWEZTX0NSRUFURV9TUEFDRV9SRVMobXAsIG5hbWVsZW4pOworCXJlc2Jsa3MgPSBYRlNfQ1JFQVRFX1NQQUNFX1JFUyhtcCwgbmFtZS0+bGVuKTsKIAkvKgogCSAqIEluaXRpYWxseSBhc3N1bWUgdGhhdCB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBhbmQKIAkgKiByZXNlcnZlIHRoZSByZXNvdXJjZXMgZm9yIHRoYXQgY2FzZS4gIElmIHRoYXQgaXMgbm90CkBAIC0xODg4LDcgKzE4ODgsOCBAQAogCWlmIChlcnJvcikKIAkJZ290byBlcnJvcl9yZXR1cm47CiAKLQlpZiAocmVzYmxrcyA9PSAwICYmIChlcnJvciA9IHhmc19kaXJfY2FuZW50ZXIodHAsIGRwLCBuYW1lLCBuYW1lbGVuKSkpCisJZXJyb3IgPSB4ZnNfZGlyX2NhbmVudGVyKHRwLCBkcCwgbmFtZSwgcmVzYmxrcyk7CisJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yX3JldHVybjsKIAllcnJvciA9IHhmc19kaXJfaWFsbG9jKCZ0cCwgZHAsIG1vZGUsIDEsCiAJCQlyZGV2LCBjcmVkcCwgcHJpZCwgcmVzYmxrcyA+IDAsCkBAIC0xOTE0LDExICsxOTE1LDExIEBACiAJICogdGhlIHRyYW5zYWN0aW9uIGNhbmNlbCB1bmxvY2tpbmcgZHAgc28gZG9uJ3QgZG8gaXQgZXhwbGljaXRseSBpbiB0aGUKIAkgKiBlcnJvciBwYXRoLgogCSAqLwotCVZOX0hPTEQoZGlyX3ZwKTsKKwlJSE9MRChkcCk7CiAJeGZzX3RyYW5zX2lqb2luKHRwLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwogCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7CiAKLQllcnJvciA9IHhmc19kaXJfY3JlYXRlbmFtZSh0cCwgZHAsIG5hbWUsIG5hbWVsZW4sIGlwLT5pX2lubywKKwllcnJvciA9IHhmc19kaXJfY3JlYXRlbmFtZSh0cCwgZHAsIG5hbWUsIGlwLT5pX2lubywKIAkJCQkJJmZpcnN0X2Jsb2NrLCAmZnJlZV9saXN0LCByZXNibGtzID8KIAkJCQkJcmVzYmxrcyAtIFhGU19JQUxMT0NfU1BBQ0VfUkVTKG1wKSA6IDApOwogCWlmIChlcnJvcikgewpAQCAtMTk1Miw3ICsxOTUzLDYgQEAKIAkgKiB2bm9kZSB0byB0aGUgY2FsbGVyLCB3ZSBidW1wIHRoZSB2bm9kZSByZWYgY291bnQgbm93LgogCSAqLwogCUlIT0xEKGlwKTsKLQl2cCA9IFhGU19JVE9WKGlwKTsKIAogCWVycm9yID0geGZzX2JtYXBfZmluaXNoKCZ0cCwgJmZyZWVfbGlzdCwgJmNvbW1pdHRlZCk7CiAJaWYgKGVycm9yKSB7CkBAIC0xOTcwLDE3ICsxOTcwLDE3IEBACiAJWEZTX1FNX0RRUkVMRShtcCwgdWRxcCk7CiAJWEZTX1FNX0RRUkVMRShtcCwgZ2RxcCk7CiAKLQkqdnBwID0gdnA7CisJKmlwcCA9IGlwOwogCiAJLyogRmFsbHRocm91Z2ggdG8gc3RkX3JldHVybiB3aXRoIGVycm9yID0gMCAgKi8KIAogc3RkX3JldHVybjoKLQlpZiAoKCp2cHAgfHwgKGVycm9yICE9IDAgJiYgZG1fZXZlbnRfc2VudCAhPSAwKSkgJiYKKwlpZiAoKCppcHAgfHwgKGVycm9yICE9IDAgJiYgZG1fZXZlbnRfc2VudCAhPSAwKSkgJiYKIAkgICAgRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfUE9TVENSRUFURSkpIHsKIAkJKHZvaWQpIFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVENSRUFURSwKLQkJCWRpcl92cCwgRE1fUklHSFRfTlVMTCwKLQkJCSp2cHAgPyB2cDpOVUxMLAotCQkJRE1fUklHSFRfTlVMTCwgbmFtZSwgTlVMTCwKKwkJCWRwLCBETV9SSUdIVF9OVUxMLAorCQkJKmlwcCA/IGlwIDogTlVMTCwKKwkJCURNX1JJR0hUX05VTEwsIG5hbWUtPm5hbWUsIE5VTEwsCiAJCQltb2RlLCBlcnJvciwgMCk7CiAJfQogCXJldHVybiBlcnJvcjsKQEAgLTIyNzIsNDYgKzIyNzIsMzIgQEAKIGludAogeGZzX3JlbW92ZSgKIAl4ZnNfaW5vZGVfdCAgICAgICAgICAgICAqZHAsCi0JYmh2X3ZuYW1lX3QJCSpkZW50cnkpCisJc3RydWN0IHhmc19uYW1lCQkqbmFtZSwKKwl4ZnNfaW5vZGVfdAkJKmlwKQogewotCWJodl92bm9kZV90CQkqZGlyX3ZwID0gWEZTX0lUT1YoZHApOwotCWNoYXIJCQkqbmFtZSA9IFZOQU1FKGRlbnRyeSk7CiAJeGZzX21vdW50X3QJCSptcCA9IGRwLT5pX21vdW50OwotCXhmc19pbm9kZV90ICAgICAgICAgICAgICppcDsKIAl4ZnNfdHJhbnNfdCAgICAgICAgICAgICAqdHAgPSBOVUxMOwogCWludCAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gMDsKIAl4ZnNfYm1hcF9mcmVlX3QgICAgICAgICBmcmVlX2xpc3Q7CiAJeGZzX2ZzYmxvY2tfdCAgICAgICAgICAgZmlyc3RfYmxvY2s7CiAJaW50CQkJY2FuY2VsX2ZsYWdzOwogCWludAkJCWNvbW1pdHRlZDsKLQlpbnQJCQlkbV9kaV9tb2RlID0gMDsKIAlpbnQJCQlsaW5rX3plcm87CiAJdWludAkJCXJlc2Jsa3M7Ci0JaW50CQkJbmFtZWxlbjsKIAogCXhmc19pdHJhY2VfZW50cnkoZHApOwogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKLQluYW1lbGVuID0gVk5BTUVMRU4oZGVudHJ5KTsKLQotCWlmICgheGZzX2dldF9kaXJfZW50cnkoZGVudHJ5LCAmaXApKSB7Ci0JICAgICAgICBkbV9kaV9tb2RlID0gaXAtPmlfZC5kaV9tb2RlOwotCQlJUkVMRShpcCk7Ci0JfQotCiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1JFTU9WRSkpIHsKLQkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1JFTU9WRSwgZGlyX3ZwLAotCQkJCQlETV9SSUdIVF9OVUxMLCBOVUxMLCBETV9SSUdIVF9OVUxMLAotCQkJCQluYW1lLCBOVUxMLCBkbV9kaV9tb2RlLCAwLCAwKTsKKwkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1JFTU9WRSwgZHAsIERNX1JJR0hUX05VTEwsCisJCQkJCU5VTEwsIERNX1JJR0hUX05VTEwsIG5hbWUtPm5hbWUsIE5VTEwsCisJCQkJCWlwLT5pX2QuZGlfbW9kZSwgMCwgMCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQkvKiBGcm9tIHRoaXMgcG9pbnQgb24sIHJldHVybiB0aHJvdWdoIHN0ZF9yZXR1cm4gKi8KLQlpcCA9IE5VTEw7Ci0KIAkvKgogCSAqIFdlIG5lZWQgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIGlwIGJlZm9yZSB3ZSBnZXQgb3VyIGxvZwogCSAqIHJlc2VydmF0aW9uLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgd2UgY2Fubm90IGNhbGwKQEAgLTIzMjQsMTMgKzIzMTAsNyBAQAogCSAqIHdoZW4gd2UgY2FsbCB4ZnNfaWdldC4gIEluc3RlYWQgd2UgZ2V0IGFuIHVubG9ja2VkIHJlZmVyZW5jZQogCSAqIHRvIHRoZSBpbm9kZSBiZWZvcmUgZ2V0dGluZyBvdXIgbG9nIHJlc2VydmF0aW9uLgogCSAqLwotCWVycm9yID0geGZzX2dldF9kaXJfZW50cnkoZGVudHJ5LCAmaXApOwotCWlmIChlcnJvcikgewotCQlSRU1PVkVfREVCVUdfVFJBQ0UoX19MSU5FX18pOwotCQlnb3RvIHN0ZF9yZXR1cm47Ci0JfQotCi0JZG1fZGlfbW9kZSA9IGlwLT5pX2QuZGlfbW9kZTsKKwlJSE9MRChpcCk7CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKIAl4ZnNfaXRyYWNlX3JlZihpcCk7CkBAIC0yMzk4LDcgKzIzNzgsNyBAQAogCSAqIEVudHJ5IG11c3QgZXhpc3Qgc2luY2Ugd2UgZGlkIGEgbG9va3VwIGluIHhmc19sb2NrX2Rpcl9hbmRfZW50cnkuCiAJICovCiAJWEZTX0JNQVBfSU5JVCgmZnJlZV9saXN0LCAmZmlyc3RfYmxvY2spOwotCWVycm9yID0geGZzX2Rpcl9yZW1vdmVuYW1lKHRwLCBkcCwgbmFtZSwgbmFtZWxlbiwgaXAtPmlfaW5vLAorCWVycm9yID0geGZzX2Rpcl9yZW1vdmVuYW1lKHRwLCBkcCwgbmFtZSwgaXAtPmlfaW5vLAogCQkJCQkmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIDApOwogCWlmIChlcnJvcikgewogCQlBU1NFUlQoZXJyb3IgIT0gRU5PRU5UKTsKQEAgLTI0NDksMTQgKzI0MjksNiBAQAogCX0KIAogCS8qCi0JICogQmVmb3JlIHdlIGRyb3Agb3VyIGV4dHJhIHJlZmVyZW5jZSB0byB0aGUgaW5vZGUsIHB1cmdlIGl0Ci0JICogZnJvbSB0aGUgcmVmY2FjaGUgaWYgaXQgaXMgdGhlcmUuICBCeSB3YWl0aW5nIHVudGlsIGFmdGVyd2FyZHMKLQkgKiB0byBkbyB0aGUgSVJFTEUsIHdlIGVuc3VyZSB0aGF0IHdlIHdvbid0IGdvIGluYWN0aXZlIGluIHRoZQotCSAqIHhmc19yZWZjYWNoZV9wdXJnZV9pcCByb3V0aW5lIChhbHRob3VnaCB0aGF0IHdvdWxkIGJlIE9LKS4KLQkgKi8KLQl4ZnNfcmVmY2FjaGVfcHVyZ2VfaXAoaXApOwotCi0JLyoKIAkgKiBJZiB3ZSBhcmUgdXNpbmcgZmlsZXN0cmVhbXMsIGtpbGwgdGhlIHN0cmVhbSBhc3NvY2lhdGlvbi4KIAkgKiBJZiB0aGUgZmlsZSBpcyBzdGlsbCBvcGVuIGl0IG1heSBnZXQgYSBuZXcgb25lIGJ1dCB0aGF0CiAJICogd2lsbCBnZXQga2lsbGVkIG9uIGxhc3QgY2xvc2UgaW4geGZzX2Nsb3NlKCkgc28gd2UgZG9uJ3QKQEAgLTI0NzIsOSArMjQ0NCw5IEBACiAgc3RkX3JldHVybjoKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfUE9TVFJFTU9WRSkpIHsKIAkJKHZvaWQpIFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVFJFTU9WRSwKLQkJCQlkaXJfdnAsIERNX1JJR0hUX05VTEwsCisJCQkJZHAsIERNX1JJR0hUX05VTEwsCiAJCQkJTlVMTCwgRE1fUklHSFRfTlVMTCwKLQkJCQluYW1lLCBOVUxMLCBkbV9kaV9tb2RlLCBlcnJvciwgMCk7CisJCQkJbmFtZS0+bmFtZSwgTlVMTCwgaXAtPmlfZC5kaV9tb2RlLCBlcnJvciwgMCk7CiAJfQogCXJldHVybiBlcnJvcjsKIApAQCAtMjQ5NSwxNCArMjQ2Nyw2IEBACiAJY2FuY2VsX2ZsYWdzIHw9IFhGU19UUkFOU19BQk9SVDsKIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwogCi0JLyoKLQkgKiBCZWZvcmUgd2UgZHJvcCBvdXIgZXh0cmEgcmVmZXJlbmNlIHRvIHRoZSBpbm9kZSwgcHVyZ2UgaXQKLQkgKiBmcm9tIHRoZSByZWZjYWNoZSBpZiBpdCBpcyB0aGVyZS4gIEJ5IHdhaXRpbmcgdW50aWwgYWZ0ZXJ3YXJkcwotCSAqIHRvIGRvIHRoZSBJUkVMRSwgd2UgZW5zdXJlIHRoYXQgd2Ugd29uJ3QgZ28gaW5hY3RpdmUgaW4gdGhlCi0JICogeGZzX3JlZmNhY2hlX3B1cmdlX2lwIHJvdXRpbmUgKGFsdGhvdWdoIHRoYXQgd291bGQgYmUgT0spLgotCSAqLwotCXhmc19yZWZjYWNoZV9wdXJnZV9pcChpcCk7Ci0KIAlJUkVMRShpcCk7CiAKIAlnb3RvIHN0ZF9yZXR1cm47CkBAIC0yNTExLDEyICsyNDc1LDEwIEBACiBpbnQKIHhmc19saW5rKAogCXhmc19pbm9kZV90CQkqdGRwLAotCWJodl92bm9kZV90CQkqc3JjX3ZwLAotCWJodl92bmFtZV90CQkqZGVudHJ5KQorCXhmc19pbm9kZV90CQkqc2lwLAorCXN0cnVjdCB4ZnNfbmFtZQkJKnRhcmdldF9uYW1lKQogewotCWJodl92bm9kZV90CQkqdGFyZ2V0X2Rpcl92cCA9IFhGU19JVE9WKHRkcCk7CiAJeGZzX21vdW50X3QJCSptcCA9IHRkcC0+aV9tb3VudDsKLQl4ZnNfaW5vZGVfdAkJKnNpcCA9IHhmc192dG9pKHNyY192cCk7CiAJeGZzX3RyYW5zX3QJCSp0cDsKIAl4ZnNfaW5vZGVfdAkJKmlwc1syXTsKIAlpbnQJCQllcnJvcjsKQEAgLTI1MjUsMjMgKzI0ODcsMjAgQEAKIAlpbnQJCQljYW5jZWxfZmxhZ3M7CiAJaW50CQkJY29tbWl0dGVkOwogCWludAkJCXJlc2Jsa3M7Ci0JY2hhcgkJCSp0YXJnZXRfbmFtZSA9IFZOQU1FKGRlbnRyeSk7Ci0JaW50CQkJdGFyZ2V0X25hbWVsZW47CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KHRkcCk7Ci0JeGZzX2l0cmFjZV9lbnRyeSh4ZnNfdnRvaShzcmNfdnApKTsKKwl4ZnNfaXRyYWNlX2VudHJ5KHNpcCk7CiAKLQl0YXJnZXRfbmFtZWxlbiA9IFZOQU1FTEVOKGRlbnRyeSk7Ci0JQVNTRVJUKCFWTl9JU0RJUihzcmNfdnApKTsKKwlBU1NFUlQoIVNfSVNESVIoc2lwLT5pX2QuZGlfbW9kZSkpOwogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRCh0ZHAsIERNX0VWRU5UX0xJTkspKSB7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9MSU5LLAotCQkJCQl0YXJnZXRfZGlyX3ZwLCBETV9SSUdIVF9OVUxMLAotCQkJCQlzcmNfdnAsIERNX1JJR0hUX05VTEwsCi0JCQkJCXRhcmdldF9uYW1lLCBOVUxMLCAwLCAwLCAwKTsKKwkJCQkJdGRwLCBETV9SSUdIVF9OVUxMLAorCQkJCQlzaXAsIERNX1JJR0hUX05VTEwsCisJCQkJCXRhcmdldF9uYW1lLT5uYW1lLCBOVUxMLCAwLCAwLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTI1NTYsNyArMjUxNSw3IEBACiAKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0xJTkspOwogCWNhbmNlbF9mbGFncyA9IFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVM7Ci0JcmVzYmxrcyA9IFhGU19MSU5LX1NQQUNFX1JFUyhtcCwgdGFyZ2V0X25hbWVsZW4pOworCXJlc2Jsa3MgPSBYRlNfTElOS19TUEFDRV9SRVMobXAsIHRhcmdldF9uYW1lLT5sZW4pOwogCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIFhGU19MSU5LX0xPR19SRVMobXApLCAwLAogCQkJWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywgWEZTX0xJTktfTE9HX0NPVU5UKTsKIAlpZiAoZXJyb3IgPT0gRU5PU1BDKSB7CkBAIC0yNTg0LDggKzI1NDMsOCBAQAogCSAqIHhmc190cmFuc19jYW5jZWwgd2lsbCBib3RoIHVubG9jayB0aGUgaW5vZGVzIGFuZAogCSAqIGRlY3JlbWVudCB0aGUgYXNzb2NpYXRlZCByZWYgY291bnRzLgogCSAqLwotCVZOX0hPTEQoc3JjX3ZwKTsKLQlWTl9IT0xEKHRhcmdldF9kaXJfdnApOworCUlIT0xEKHNpcCk7CisJSUhPTEQodGRwKTsKIAl4ZnNfdHJhbnNfaWpvaW4odHAsIHNpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCXhmc190cmFuc19pam9pbih0cCwgdGRwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKQEAgLTI2MDgsMTUgKzI1NjcsMTQgQEAKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCi0JaWYgKHJlc2Jsa3MgPT0gMCAmJgotCSAgICAoZXJyb3IgPSB4ZnNfZGlyX2NhbmVudGVyKHRwLCB0ZHAsIHRhcmdldF9uYW1lLCB0YXJnZXRfbmFtZWxlbikpKQorCWVycm9yID0geGZzX2Rpcl9jYW5lbnRlcih0cCwgdGRwLCB0YXJnZXRfbmFtZSwgcmVzYmxrcyk7CisJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yX3JldHVybjsKIAogCVhGU19CTUFQX0lOSVQoJmZyZWVfbGlzdCwgJmZpcnN0X2Jsb2NrKTsKIAotCWVycm9yID0geGZzX2Rpcl9jcmVhdGVuYW1lKHRwLCB0ZHAsIHRhcmdldF9uYW1lLCB0YXJnZXRfbmFtZWxlbiwKLQkJCQkgICBzaXAtPmlfaW5vLCAmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsCi0JCQkJICAgcmVzYmxrcyk7CisJZXJyb3IgPSB4ZnNfZGlyX2NyZWF0ZW5hbWUodHAsIHRkcCwgdGFyZ2V0X25hbWUsIHNpcC0+aV9pbm8sCisJCQkJCSZmaXJzdF9ibG9jaywgJmZyZWVfbGlzdCwgcmVzYmxrcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGFib3J0X3JldHVybjsKIAl4ZnNfaWNoZ3RpbWUodGRwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7CkBAIC0yNjUwLDkgKzI2MDgsOSBAQAogc3RkX3JldHVybjoKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChzaXAsIERNX0VWRU5UX1BPU1RMSU5LKSkgewogCQkodm9pZCkgWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9QT1NUTElOSywKLQkJCQl0YXJnZXRfZGlyX3ZwLCBETV9SSUdIVF9OVUxMLAotCQkJCXNyY192cCwgRE1fUklHSFRfTlVMTCwKLQkJCQl0YXJnZXRfbmFtZSwgTlVMTCwgMCwgZXJyb3IsIDApOworCQkJCXRkcCwgRE1fUklHSFRfTlVMTCwKKwkJCQlzaXAsIERNX1JJR0hUX05VTEwsCisJCQkJdGFyZ2V0X25hbWUtPm5hbWUsIE5VTEwsIDAsIGVycm9yLCAwKTsKIAl9CiAJcmV0dXJuIGVycm9yOwogCkBAIC0yNjY5LDE3ICsyNjI3LDEzIEBACiBpbnQKIHhmc19ta2RpcigKIAl4ZnNfaW5vZGVfdCAgICAgICAgICAgICAqZHAsCi0JYmh2X3ZuYW1lX3QJCSpkZW50cnksCisJc3RydWN0IHhmc19uYW1lCQkqZGlyX25hbWUsCiAJbW9kZV90CQkJbW9kZSwKLQliaHZfdm5vZGVfdAkJKip2cHAsCisJeGZzX2lub2RlX3QJCSoqaXBwLAogCWNyZWRfdAkJCSpjcmVkcCkKIHsKLQliaHZfdm5vZGVfdAkJKmRpcl92cCA9IFhGU19JVE9WKGRwKTsKLQljaGFyCQkJKmRpcl9uYW1lID0gVk5BTUUoZGVudHJ5KTsKLQlpbnQJCQlkaXJfbmFtZWxlbiA9IFZOQU1FTEVOKGRlbnRyeSk7CiAJeGZzX21vdW50X3QJCSptcCA9IGRwLT5pX21vdW50OwogCXhmc19pbm9kZV90CQkqY2RwOwkvKiBpbm9kZSBvZiBjcmVhdGVkIGRpciAqLwotCWJodl92bm9kZV90CQkqY3ZwOwkvKiB2bm9kZSBvZiBjcmVhdGVkIGRpciAqLwogCXhmc190cmFuc190CQkqdHA7CiAJaW50CQkJY2FuY2VsX2ZsYWdzOwogCWludAkJCWVycm9yOwpAQCAtMjcwMCw4ICsyNjU0LDggQEAKIAogCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9DUkVBVEUpKSB7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9DUkVBVEUsCi0JCQkJCWRpcl92cCwgRE1fUklHSFRfTlVMTCwgTlVMTCwKLQkJCQkJRE1fUklHSFRfTlVMTCwgZGlyX25hbWUsIE5VTEwsCisJCQkJCWRwLCBETV9SSUdIVF9OVUxMLCBOVUxMLAorCQkJCQlETV9SSUdIVF9OVUxMLCBkaXJfbmFtZS0+bmFtZSwgTlVMTCwKIAkJCQkJbW9kZSwgMCwgMCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTI3MzAsNyArMjY4NCw3IEBACiAKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX01LRElSKTsKIAljYW5jZWxfZmxhZ3MgPSBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTOwotCXJlc2Jsa3MgPSBYRlNfTUtESVJfU1BBQ0VfUkVTKG1wLCBkaXJfbmFtZWxlbik7CisJcmVzYmxrcyA9IFhGU19NS0RJUl9TUEFDRV9SRVMobXAsIGRpcl9uYW1lLT5sZW4pOwogCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIFhGU19NS0RJUl9MT0dfUkVTKG1wKSwgMCwKIAkJCQkgIFhGU19UUkFOU19QRVJNX0xPR19SRVMsIFhGU19NS0RJUl9MT0dfQ09VTlQpOwogCWlmIChlcnJvciA9PSBFTk9TUEMpIHsKQEAgLTI3NjIsOCArMjcxNiw4IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yX3JldHVybjsKIAotCWlmIChyZXNibGtzID09IDAgJiYKLQkgICAgKGVycm9yID0geGZzX2Rpcl9jYW5lbnRlcih0cCwgZHAsIGRpcl9uYW1lLCBkaXJfbmFtZWxlbikpKQorCWVycm9yID0geGZzX2Rpcl9jYW5lbnRlcih0cCwgZHAsIGRpcl9uYW1lLCByZXNibGtzKTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCS8qCiAJICogY3JlYXRlIHRoZSBkaXJlY3RvcnkgaW5vZGUuCkBAIC0yNzg2LDE1ICsyNzQwLDE1IEBACiAJICogZnJvbSBoZXJlIG9uIHdpbGwgcmVzdWx0IGluIHRoZSB0cmFuc2FjdGlvbiBjYW5jZWwKIAkgKiB1bmxvY2tpbmcgZHAgc28gZG9uJ3QgZG8gaXQgZXhwbGljaXRseSBpbiB0aGUgZXJyb3IgcGF0aC4KIAkgKi8KLQlWTl9IT0xEKGRpcl92cCk7CisJSUhPTEQoZHApOwogCXhmc190cmFuc19pam9pbih0cCwgZHAsIFhGU19JTE9DS19FWENMKTsKIAl1bmxvY2tfZHBfb25fZXJyb3IgPSBCX0ZBTFNFOwogCiAJWEZTX0JNQVBfSU5JVCgmZnJlZV9saXN0LCAmZmlyc3RfYmxvY2spOwogCi0JZXJyb3IgPSB4ZnNfZGlyX2NyZWF0ZW5hbWUodHAsIGRwLCBkaXJfbmFtZSwgZGlyX25hbWVsZW4sIGNkcC0+aV9pbm8sCi0JCQkJICAgJmZpcnN0X2Jsb2NrLCAmZnJlZV9saXN0LCByZXNibGtzID8KLQkJCQkgICByZXNibGtzIC0gWEZTX0lBTExPQ19TUEFDRV9SRVMobXApIDogMCk7CisJZXJyb3IgPSB4ZnNfZGlyX2NyZWF0ZW5hbWUodHAsIGRwLCBkaXJfbmFtZSwgY2RwLT5pX2lubywKKwkJCQkJJmZpcnN0X2Jsb2NrLCAmZnJlZV9saXN0LCByZXNibGtzID8KKwkJCQkJcmVzYmxrcyAtIFhGU19JQUxMT0NfU1BBQ0VfUkVTKG1wKSA6IDApOwogCWlmIChlcnJvcikgewogCQlBU1NFUlQoZXJyb3IgIT0gRU5PU1BDKTsKIAkJZ290byBlcnJvcjE7CkBAIC0yODE3LDExICsyNzcxLDkgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyb3IyOwogCi0JY3ZwID0gWEZTX0lUT1YoY2RwKTsKLQogCWNyZWF0ZWQgPSBCX1RSVUU7CiAKLQkqdnBwID0gY3ZwOworCSppcHAgPSBjZHA7CiAJSUhPTEQoY2RwKTsKIAogCS8qCkBAIC0yODU4LDEwICsyODEwLDEwIEBACiAJaWYgKChjcmVhdGVkIHx8IChlcnJvciAhPSAwICYmIGRtX2V2ZW50X3NlbnQgIT0gMCkpICYmCiAJICAgIERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1BPU1RDUkVBVEUpKSB7CiAJCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RDUkVBVEUsCi0JCQkJCWRpcl92cCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJY3JlYXRlZCA/IFhGU19JVE9WKGNkcCk6TlVMTCwKKwkJCQkJZHAsIERNX1JJR0hUX05VTEwsCisJCQkJCWNyZWF0ZWQgPyBjZHAgOiBOVUxMLAogCQkJCQlETV9SSUdIVF9OVUxMLAotCQkJCQlkaXJfbmFtZSwgTlVMTCwKKwkJCQkJZGlyX25hbWUtPm5hbWUsIE5VTEwsCiAJCQkJCW1vZGUsIGVycm9yLCAwKTsKIAl9CiAJcmV0dXJuIGVycm9yOwpAQCAtMjg4NSwyMCArMjgzNywxNyBAQAogaW50CiB4ZnNfcm1kaXIoCiAJeGZzX2lub2RlX3QgICAgICAgICAgICAgKmRwLAotCWJodl92bmFtZV90CQkqZGVudHJ5KQorCXN0cnVjdCB4ZnNfbmFtZQkJKm5hbWUsCisJeGZzX2lub2RlX3QJCSpjZHApCiB7CiAJYmh2X3Zub2RlX3QJCSpkaXJfdnAgPSBYRlNfSVRPVihkcCk7Ci0JY2hhcgkJCSpuYW1lID0gVk5BTUUoZGVudHJ5KTsKLQlpbnQJCQluYW1lbGVuID0gVk5BTUVMRU4oZGVudHJ5KTsKIAl4ZnNfbW91bnRfdAkJKm1wID0gZHAtPmlfbW91bnQ7Ci0gIAl4ZnNfaW5vZGVfdCAgICAgICAgICAgICAqY2RwOyAgIC8qIGNoaWxkIGRpcmVjdG9yeSAqLwogCXhmc190cmFuc190ICAgICAgICAgICAgICp0cDsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBlcnJvcjsKIAl4ZnNfYm1hcF9mcmVlX3QgICAgICAgICBmcmVlX2xpc3Q7CiAJeGZzX2ZzYmxvY2tfdCAgICAgICAgICAgZmlyc3RfYmxvY2s7CiAJaW50CQkJY2FuY2VsX2ZsYWdzOwogCWludAkJCWNvbW1pdHRlZDsKLQlpbnQJCQlkbV9kaV9tb2RlID0gU19JRkRJUjsKIAlpbnQJCQlsYXN0X2NkcF9saW5rOwogCXVpbnQJCQlyZXNibGtzOwogCkBAIC0yOTA3LDI0ICsyODU2LDE1IEBACiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKLQlpZiAoIXhmc19nZXRfZGlyX2VudHJ5KGRlbnRyeSwgJmNkcCkpIHsKLQkgICAgICAgIGRtX2RpX21vZGUgPSBjZHAtPmlfZC5kaV9tb2RlOwotCQlJUkVMRShjZHApOwotCX0KLQogCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9SRU1PVkUpKSB7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9SRU1PVkUsCi0JCQkJCWRpcl92cCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJTlVMTCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJbmFtZSwgTlVMTCwgZG1fZGlfbW9kZSwgMCwgMCk7CisJCQkJCWRwLCBETV9SSUdIVF9OVUxMLAorCQkJCQlOVUxMLCBETV9SSUdIVF9OVUxMLCBuYW1lLT5uYW1lLAorCQkJCQlOVUxMLCBjZHAtPmlfZC5kaV9tb2RlLCAwLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIFhGU19FUlJPUihlcnJvcik7CiAJfQogCi0JLyogUmV0dXJuIHRocm91Z2ggc3RkX3JldHVybiBhZnRlciB0aGlzIHBvaW50LiAqLwotCi0JY2RwID0gTlVMTDsKLQogCS8qCiAJICogV2UgbmVlZCB0byBnZXQgYSByZWZlcmVuY2UgdG8gY2RwIGJlZm9yZSB3ZSBnZXQgb3VyIGxvZwogCSAqIHJlc2VydmF0aW9uLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHdlIGNhbm5vdCBjYWxsCkBAIC0yOTM3LDEzICsyODc3LDcgQEAKIAkgKiB3aGVuIHdlIGNhbGwgeGZzX2lnZXQuICBJbnN0ZWFkIHdlIGdldCBhbiB1bmxvY2tlZCByZWZlcmVuY2UKIAkgKiB0byB0aGUgaW5vZGUgYmVmb3JlIGdldHRpbmcgb3VyIGxvZyByZXNlcnZhdGlvbi4KIAkgKi8KLQllcnJvciA9IHhmc19nZXRfZGlyX2VudHJ5KGRlbnRyeSwgJmNkcCk7Ci0JaWYgKGVycm9yKSB7Ci0JCVJFTU9WRV9ERUJVR19UUkFDRShfX0xJTkVfXyk7Ci0JCWdvdG8gc3RkX3JldHVybjsKLQl9Ci0JbXAgPSBkcC0+aV9tb3VudDsKLQlkbV9kaV9tb2RlID0gY2RwLT5pX2QuZGlfbW9kZTsKKwlJSE9MRChjZHApOwogCiAJLyoKIAkgKiBHZXQgdGhlIGRxdW90cyBmb3IgdGhlIGlub2Rlcy4KQEAgLTMwMjAsNyArMjk1NCw3IEBACiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIAotCWVycm9yID0geGZzX2Rpcl9yZW1vdmVuYW1lKHRwLCBkcCwgbmFtZSwgbmFtZWxlbiwgY2RwLT5pX2lubywKKwllcnJvciA9IHhmc19kaXJfcmVtb3ZlbmFtZSh0cCwgZHAsIG5hbWUsIGNkcC0+aV9pbm8sCiAJCQkJCSZmaXJzdF9ibG9jaywgJmZyZWVfbGlzdCwgcmVzYmxrcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMTsKQEAgLTMwOTgsOSArMzAzMiw5IEBACiAgc3RkX3JldHVybjoKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfUE9TVFJFTU9WRSkpIHsKIAkJKHZvaWQpIFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVFJFTU9WRSwKLQkJCQkJZGlyX3ZwLCBETV9SSUdIVF9OVUxMLAorCQkJCQlkcCwgRE1fUklHSFRfTlVMTCwKIAkJCQkJTlVMTCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJbmFtZSwgTlVMTCwgZG1fZGlfbW9kZSwKKwkJCQkJbmFtZS0+bmFtZSwgTlVMTCwgY2RwLT5pX2QuZGlfbW9kZSwKIAkJCQkJZXJyb3IsIDApOwogCX0KIAlyZXR1cm4gZXJyb3I7CkBAIC0zMTE4LDEzICszMDUyLDEyIEBACiBpbnQKIHhmc19zeW1saW5rKAogCXhmc19pbm9kZV90CQkqZHAsCi0JYmh2X3ZuYW1lX3QJCSpkZW50cnksCi0JY2hhcgkJCSp0YXJnZXRfcGF0aCwKKwlzdHJ1Y3QgeGZzX25hbWUJCSpsaW5rX25hbWUsCisJY29uc3QgY2hhcgkJKnRhcmdldF9wYXRoLAogCW1vZGVfdAkJCW1vZGUsCi0JYmh2X3Zub2RlX3QJCSoqdnBwLAorCXhmc19pbm9kZV90CQkqKmlwcCwKIAljcmVkX3QJCQkqY3JlZHApCiB7Ci0JYmh2X3Zub2RlX3QJCSpkaXJfdnAgPSBYRlNfSVRPVihkcCk7CiAJeGZzX21vdW50X3QJCSptcCA9IGRwLT5pX21vdW50OwogCXhmc190cmFuc190CQkqdHA7CiAJeGZzX2lub2RlX3QJCSppcDsKQEAgLTMxNDAsMTcgKzMwNzMsMTUgQEAKIAlpbnQJCQlubWFwczsKIAl4ZnNfYm1idF9pcmVjX3QJCW12YWxbU1lNTElOS19NQVBTXTsKIAl4ZnNfZGFkZHJfdAkJZDsKLQljaGFyCQkJKmN1cl9jaHVuazsKKwljb25zdCBjaGFyCQkqY3VyX2NodW5rOwogCWludAkJCWJ5dGVfY250OwogCWludAkJCW47CiAJeGZzX2J1Zl90CQkqYnA7CiAJeGZzX3ByaWRfdAkJcHJpZDsKIAlzdHJ1Y3QgeGZzX2RxdW90CSp1ZHFwLCAqZ2RxcDsKIAl1aW50CQkJcmVzYmxrczsKLQljaGFyCQkJKmxpbmtfbmFtZSA9IFZOQU1FKGRlbnRyeSk7Ci0JaW50CQkJbGlua19uYW1lbGVuOwogCi0JKnZwcCA9IE5VTEw7CisJKmlwcCA9IE5VTEw7CiAJZXJyb3IgPSAwOwogCWlwID0gTlVMTDsKIAl0cCA9IE5VTEw7CkBAIC0zMTYwLDQ0ICszMDkxLDE3IEBACiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKLQlsaW5rX25hbWVsZW4gPSBWTkFNRUxFTihkZW50cnkpOwotCiAJLyoKIAkgKiBDaGVjayBjb21wb25lbnQgbGVuZ3RocyBvZiB0aGUgdGFyZ2V0IHBhdGggbmFtZS4KIAkgKi8KIAlwYXRobGVuID0gc3RybGVuKHRhcmdldF9wYXRoKTsKIAlpZiAocGF0aGxlbiA+PSBNQVhQQVRITEVOKSAgICAgIC8qIHRvdGFsIHN0cmluZyB0b28gbG9uZyAqLwogCQlyZXR1cm4gWEZTX0VSUk9SKEVOQU1FVE9PTE9ORyk7Ci0JaWYgKHBhdGhsZW4gPj0gTUFYTkFNRUxFTikgeyAgICAvKiBpcyBhbnkgY29tcG9uZW50IHRvbyBsb25nPyAqLwotCQlpbnQgbGVuLCB0b3RhbDsKLQkJY2hhciAqcGF0aDsKLQotCQlmb3IgKHRvdGFsID0gMCwgcGF0aCA9IHRhcmdldF9wYXRoOyB0b3RhbCA8IHBhdGhsZW47KSB7Ci0JCQkvKgotCQkJICogU2tpcCBhbnkgc2xhc2hlcy4KLQkJCSAqLwotCQkJd2hpbGUoKnBhdGggPT0gJy8nKSB7Ci0JCQkJdG90YWwrKzsKLQkJCQlwYXRoKys7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBDb3VudCB1cCB0byB0aGUgbmV4dCBzbGFzaCBvciBlbmQgb2YgcGF0aC4KLQkJCSAqIEVycm9yIG91dCBpZiB0aGUgY29tcG9uZW50IGlzIGJpZ2dlciB0aGFuIE1BWE5BTUVMRU4uCi0JCQkgKi8KLQkJCWZvcihsZW4gPSAwOyAqcGF0aCAhPSAnLycgJiYgdG90YWwgPCBwYXRobGVuO3RvdGFsKyssIHBhdGgrKykgewotCQkJCWlmICgrK2xlbiA+PSBNQVhOQU1FTEVOKSB7Ci0JCQkJCWVycm9yID0gRU5BTUVUT09MT05HOwotCQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQogCiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1NZTUxJTkspKSB7Ci0JCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9TWU1MSU5LLCBkaXJfdnAsCisJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9TWU1MSU5LLCBkcCwKIAkJCQkJRE1fUklHSFRfTlVMTCwgTlVMTCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJbGlua19uYW1lLCB0YXJnZXRfcGF0aCwgMCwgMCwgMCk7CisJCQkJCWxpbmtfbmFtZS0+bmFtZSwgdGFyZ2V0X3BhdGgsIDAsIDAsIDApOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMzIyOSw3ICszMTMzLDcgQEAKIAkJZnNfYmxvY2tzID0gMDsKIAllbHNlCiAJCWZzX2Jsb2NrcyA9IFhGU19CX1RPX0ZTQihtcCwgcGF0aGxlbik7Ci0JcmVzYmxrcyA9IFhGU19TWU1MSU5LX1NQQUNFX1JFUyhtcCwgbGlua19uYW1lbGVuLCBmc19ibG9ja3MpOworCXJlc2Jsa3MgPSBYRlNfU1lNTElOS19TUEFDRV9SRVMobXAsIGxpbmtfbmFtZS0+bGVuLCBmc19ibG9ja3MpOwogCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIFhGU19TWU1MSU5LX0xPR19SRVMobXApLCAwLAogCQkJWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywgWEZTX1NZTUxJTktfTE9HX0NPVU5UKTsKIAlpZiAoZXJyb3IgPT0gRU5PU1BDICYmIGZzX2Jsb2NrcyA9PSAwKSB7CkBAIC0zMjYzLDggKzMxNjcsOCBAQAogCS8qCiAJICogQ2hlY2sgZm9yIGFiaWxpdHkgdG8gZW50ZXIgZGlyZWN0b3J5IGVudHJ5LCBpZiBubyBzcGFjZSByZXNlcnZlZC4KIAkgKi8KLQlpZiAocmVzYmxrcyA9PSAwICYmCi0JICAgIChlcnJvciA9IHhmc19kaXJfY2FuZW50ZXIodHAsIGRwLCBsaW5rX25hbWUsIGxpbmtfbmFtZWxlbikpKQorCWVycm9yID0geGZzX2Rpcl9jYW5lbnRlcih0cCwgZHAsIGxpbmtfbmFtZSwgcmVzYmxrcyk7CisJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yX3JldHVybjsKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGJtYXAgZnJlZWxpc3QgcHJpb3IgdG8gY2FsbGluZyBlaXRoZXIKQEAgLTMyODksNyArMzE5Myw3IEBACiAJICogdHJhbnNhY3Rpb24gY2FuY2VsIHVubG9ja2luZyBkcCBzbyBkb24ndCBkbyBpdCBleHBsaWNpdGx5IGluIHRoZQogCSAqIGVycm9yIHBhdGguCiAJICovCi0JVk5fSE9MRChkaXJfdnApOworCUlIT0xEKGRwKTsKIAl4ZnNfdHJhbnNfaWpvaW4odHAsIGRwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJdW5sb2NrX2RwX29uX2Vycm9yID0gQl9GQUxTRTsKIApAQCAtMzM1Niw4ICszMjYwLDggQEAKIAkvKgogCSAqIENyZWF0ZSB0aGUgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUgc3ltbGluay4KIAkgKi8KLQllcnJvciA9IHhmc19kaXJfY3JlYXRlbmFtZSh0cCwgZHAsIGxpbmtfbmFtZSwgbGlua19uYW1lbGVuLCBpcC0+aV9pbm8sCi0JCQkJICAgJmZpcnN0X2Jsb2NrLCAmZnJlZV9saXN0LCByZXNibGtzKTsKKwllcnJvciA9IHhmc19kaXJfY3JlYXRlbmFtZSh0cCwgZHAsIGxpbmtfbmFtZSwgaXAtPmlfaW5vLAorCQkJCQkmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIHJlc2Jsa3MpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJvcjE7CiAJeGZzX2ljaGd0aW1lKGRwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7CkBAIC0zMzk5LDE5ICszMzAzLDE0IEBACiBzdGRfcmV0dXJuOgogCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUU1lNTElOSykpIHsKIAkJKHZvaWQpIFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVFNZTUxJTkssCi0JCQkJCWRpcl92cCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJZXJyb3IgPyBOVUxMIDogWEZTX0lUT1YoaXApLAotCQkJCQlETV9SSUdIVF9OVUxMLCBsaW5rX25hbWUsIHRhcmdldF9wYXRoLAotCQkJCQkwLCBlcnJvciwgMCk7CisJCQkJCWRwLCBETV9SSUdIVF9OVUxMLAorCQkJCQllcnJvciA/IE5VTEwgOiBpcCwKKwkJCQkJRE1fUklHSFRfTlVMTCwgbGlua19uYW1lLT5uYW1lLAorCQkJCQl0YXJnZXRfcGF0aCwgMCwgZXJyb3IsIDApOwogCX0KIAotCWlmICghZXJyb3IpIHsKLQkJYmh2X3Zub2RlX3QgKnZwOwotCi0JCUFTU0VSVChpcCk7Ci0JCXZwID0gWEZTX0lUT1YoaXApOwotCQkqdnBwID0gdnA7Ci0JfQorCWlmICghZXJyb3IpCisJCSppcHAgPSBpcDsKIAlyZXR1cm4gZXJyb3I7CiAKICBlcnJvcjI6CkBAIC0zNDMxLDYwICszMzMwLDExIEBACiB9CiAKIGludAoteGZzX3J3bG9jaygKLQl4ZnNfaW5vZGVfdAkqaXAsCi0JYmh2X3Zyd2xvY2tfdAlsb2NrdHlwZSkKLXsKLQlpZiAoU19JU0RJUihpcC0+aV9kLmRpX21vZGUpKQotCQlyZXR1cm4gMTsKLQlpZiAobG9ja3R5cGUgPT0gVlJXTE9DS19XUklURSkgewotCQl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JfSBlbHNlIGlmIChsb2NrdHlwZSA9PSBWUldMT0NLX1RSWV9SRUFEKSB7Ci0JCXJldHVybiB4ZnNfaWxvY2tfbm93YWl0KGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0JfSBlbHNlIGlmIChsb2NrdHlwZSA9PSBWUldMT0NLX1RSWV9XUklURSkgewotCQlyZXR1cm4geGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lPTE9DS19FWENMKTsKLQl9IGVsc2UgewotCQlBU1NFUlQoKGxvY2t0eXBlID09IFZSV0xPQ0tfUkVBRCkgfHwKLQkJICAgICAgIChsb2NrdHlwZSA9PSBWUldMT0NLX1dSSVRFX0RJUkVDVCkpOwotCQl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi12b2lkCi14ZnNfcnd1bmxvY2soCi0JeGZzX2lub2RlX3QgICAgICppcCwKLQliaHZfdnJ3bG9ja190CWxvY2t0eXBlKQotewotIAlpZiAoU19JU0RJUihpcC0+aV9kLmRpX21vZGUpKQotICAJCXJldHVybjsKLQlpZiAobG9ja3R5cGUgPT0gVlJXTE9DS19XUklURSkgewotCQkvKgotCQkgKiBJbiB0aGUgd3JpdGUgY2FzZSwgd2UgbWF5IGhhdmUgYWRkZWQgYSBuZXcgZW50cnkgdG8KLQkJICogdGhlIHJlZmVyZW5jZSBjYWNoZS4gIFRoaXMgbWlnaHQgc3RvcmUgYSBwb2ludGVyIHRvCi0JCSAqIGFuIGlub2RlIHRvIGJlIHJlbGVhc2VkIGluIHRoaXMgaW5vZGUuICBJZiBpdCBpcyB0aGVyZSwKLQkJICogY2xlYXIgdGhlIHBvaW50ZXIgYW5kIHJlbGVhc2UgdGhlIGlub2RlIGFmdGVyIHVubG9ja2luZwotCQkgKiB0aGlzIG9uZS4KLQkJICovCi0JCXhmc19yZWZjYWNoZV9pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwotCX0gZWxzZSB7Ci0JCUFTU0VSVCgobG9ja3R5cGUgPT0gVlJXTE9DS19SRUFEKSB8fAotCQkgICAgICAgKGxvY2t0eXBlID09IFZSV0xPQ0tfV1JJVEVfRElSRUNUKSk7Ci0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0JfQotCXJldHVybjsKLX0KLQotCi1pbnQKIHhmc19pbm9kZV9mbHVzaCgKIAl4ZnNfaW5vZGVfdAkqaXAsCiAJaW50CQlmbGFncykKIHsKIAl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKLQl4ZnNfaW5vZGVfbG9nX2l0ZW1fdCAqaWlwID0gaXAtPmlfaXRlbXA7CiAJaW50CQllcnJvciA9IDA7CiAKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCkBAIC0zNDk0LDMzICszMzQ0LDkgQEAKIAkgKiBCeXBhc3MgaW5vZGVzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgYnkKIAkgKiB0aGUgaW5vZGUgZmx1c2ggY2x1c3RlcmluZyBjb2RlIGluc2lkZSB4ZnNfaWZsdXNoCiAJICovCi0JaWYgKChpcC0+aV91cGRhdGVfY29yZSA9PSAwKSAmJgotCSAgICAoKGlpcCA9PSBOVUxMKSB8fCAhKGlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzICYgWEZTX0lMT0dfQUxMKSkpCisJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpCiAJCXJldHVybiAwOwogCi0JaWYgKGZsYWdzICYgRkxVU0hfTE9HKSB7Ci0JCWlmIChpaXAgJiYgaWlwLT5pbGlfbGFzdF9sc24pIHsKLQkJCXhsb2dfdAkJKmxvZyA9IG1wLT5tX2xvZzsKLQkJCXhmc19sc25fdAlzeW5jX2xzbjsKLQkJCWludAkJbG9nX2ZsYWdzID0gWEZTX0xPR19GT1JDRTsKLQotCQkJc3Bpbl9sb2NrKCZsb2ctPmxfZ3JhbnRfbG9jayk7Ci0JCQlzeW5jX2xzbiA9IGxvZy0+bF9sYXN0X3N5bmNfbHNuOwotCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKLQotCQkJaWYgKChYRlNfTFNOX0NNUChpaXAtPmlsaV9sYXN0X2xzbiwgc3luY19sc24pID4gMCkpIHsKLQkJCQlpZiAoZmxhZ3MgJiBGTFVTSF9TWU5DKQotCQkJCQlsb2dfZmxhZ3MgfD0gWEZTX0xPR19TWU5DOwotCQkJCWVycm9yID0geGZzX2xvZ19mb3JjZShtcCwgaWlwLT5pbGlfbGFzdF9sc24sIGxvZ19mbGFncyk7Ci0JCQkJaWYgKGVycm9yKQotCQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChpcC0+aV91cGRhdGVfY29yZSA9PSAwKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfQotCiAJLyoKIAkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsCiAJICogcmV0dXJuIEVBR0FJTiB0byBpbmRpY2F0ZSB0byB0aGUgY2FsbGVyIHRoYXQgdGhleQpAQCAtMzUyOCwzMCArMzM1NCwyMiBAQAogCSAqIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUgYW5vdGhlciBvcGVyYXRpb24gcmlnaHQKIAkgKiBub3csIHRoZXkgZ2V0IGNhdWdodCBsYXRlciBieSB4ZnNfc3luYy4KIAkgKi8KLQlpZiAoZmxhZ3MgJiBGTFVTSF9JTk9ERSkgewotCQlpbnQJZmx1c2hfZmxhZ3M7Ci0KLQkJaWYgKGZsYWdzICYgRkxVU0hfU1lOQykgewotCQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJCXhmc19pZmxvY2soaXApOwotCQl9IGVsc2UgaWYgKHhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKSB7Ci0JCQlpZiAoeGZzX2lwaW5jb3VudChpcCkgfHwgIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgewotCQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJCQlyZXR1cm4gRUFHQUlOOwotCQkJfQotCQl9IGVsc2UgeworCWlmIChmbGFncyAmIEZMVVNIX1NZTkMpIHsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwkJeGZzX2lmbG9jayhpcCk7CisJfSBlbHNlIGlmICh4ZnNfaWxvY2tfbm93YWl0KGlwLCBYRlNfSUxPQ0tfU0hBUkVEKSkgeworCQlpZiAoeGZzX2lwaW5jb3VudChpcCkgfHwgIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwogCQkJcmV0dXJuIEVBR0FJTjsKIAkJfQotCi0JCWlmIChmbGFncyAmIEZMVVNIX1NZTkMpCi0JCQlmbHVzaF9mbGFncyA9IFhGU19JRkxVU0hfU1lOQzsKLQkJZWxzZQotCQkJZmx1c2hfZmxhZ3MgPSBYRlNfSUZMVVNIX0FTWU5DOwotCi0JCWVycm9yID0geGZzX2lmbHVzaChpcCwgZmx1c2hfZmxhZ3MpOwotCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIEVBR0FJTjsKIAl9CiAKKwllcnJvciA9IHhmc19pZmx1c2goaXAsIChmbGFncyAmIEZMVVNIX1NZTkMpID8gWEZTX0lGTFVTSF9TWU5DCisJCQkJCQkgICAgOiBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMzY5NCwxMiArMzUxMiwxMiBAQAogCSAqIFdlIGdldCB0aGUgZmx1c2ggbG9jayByZWdhcmRsZXNzLCB0aG91Z2gsIGp1c3QgdG8gbWFrZSBzdXJlCiAJICogd2UgZG9uJ3QgZnJlZSBpdCB3aGlsZSBpdCBpcyBiZWluZyBmbHVzaGVkLgogCSAqLwotCWlmICghWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpIHsKLQkJaWYgKCFsb2NrZWQpIHsKLQkJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQkJeGZzX2lmbG9jayhpcCk7Ci0JCX0KKwlpZiAoIWxvY2tlZCkgeworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJeGZzX2lmbG9jayhpcCk7CisJfQogCisJaWYgKCFYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgewogCQlpZiAoaXAtPmlfdXBkYXRlX2NvcmUgfHwKIAkJICAgICgoaXAtPmlfaXRlbXAgIT0gTlVMTCkgJiYKIAkJICAgICAoaXAtPmlfaXRlbXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAhPSAwKSkpIHsKQEAgLTM3MTksMTcgKzM1MzcsMTEgQEAKIAkJQVNTRVJUKGlwLT5pX3VwZGF0ZV9jb3JlID09IDApOwogCQlBU1NFUlQoaXAtPmlfaXRlbXAgPT0gTlVMTCB8fAogCQkgICAgICAgaXAtPmlfaXRlbXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyA9PSAwKTsKLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl9IGVsc2UgaWYgKGxvY2tlZCkgewotCQkvKgotCQkgKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gZG9pbmcgYW4gaWZsdXNoIGlmIHdlJ3JlCi0JCSAqIGluIHRoZSBwcm9jZXNzIG9mIHNodXR0aW5nIGRvd24gdGhlIGZpbGVzeXN0ZW0gZm9yY2libHkuCi0JCSAqIFNvLCBqdXN0IHJlY2xhaW0gdGhlIGlub2RlLgotCQkgKi8KLQkJeGZzX2lmdW5sb2NrKGlwKTsKLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAl9CiAKKwl4ZnNfaWZ1bmxvY2soaXApOworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKICByZWNsYWltOgogCXhmc19pcmVjbGFpbShpcCk7CiAJcmV0dXJuIDA7CkBAIC0zODQ1LDkgKzM2NTcsOCBAQAogCQllbmRfZG1pX29mZnNldCA9IG9mZnNldCtsZW47CiAJCWlmIChlbmRfZG1pX29mZnNldCA+IGlwLT5pX3NpemUpCiAJCQllbmRfZG1pX29mZnNldCA9IGlwLT5pX3NpemU7Ci0JCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfV1JJVEUsIFhGU19JVE9WKGlwKSwKLQkJCW9mZnNldCwgZW5kX2RtaV9vZmZzZXQgLSBvZmZzZXQsCi0JCQkwLCBOVUxMKTsKKwkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgaXAsIG9mZnNldCwKKwkJCQkgICAgICBlbmRfZG1pX29mZnNldCAtIG9mZnNldCwgMCwgTlVMTCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0zOTU2LDggKzM3NjcsOCBAQAogCWlmIChlcnJvciA9PSBFTk9TUEMgJiYgKGF0dHJfZmxhZ3MgJiBBVFRSX0RNSSkgPT0gMCAmJgogCSAgICBETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9OT1NQQUNFKSkgewogCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfTk9TUEFDRSwKLQkJCQlYRlNfSVRPVihpcCksIERNX1JJR0hUX05VTEwsCi0JCQkJWEZTX0lUT1YoaXApLCBETV9SSUdIVF9OVUxMLAorCQkJCWlwLCBETV9SSUdIVF9OVUxMLAorCQkJCWlwLCBETV9SSUdIVF9OVUxMLAogCQkJCU5VTEwsIE5VTEwsIDAsIDAsIDApOyAvKiBEZWxheSBmbGFnIGludGVudGlvbmFsbHkgdW51c2VkICovCiAJCWlmIChlcnJvciA9PSAwKQogCQkJZ290byByZXRyeTsJLyogTWF5YmUgRE1BUEkgYXBwLiBoYXMgbWFkZSBzcGFjZSAqLwpAQCAtNDAyMSw3ICszODMyLDggQEAKIAkJWEZTX0JVRl9SRUFEKGJwKTsKIAkJWEZTX0JVRl9TRVRfQUREUihicCwgWEZTX0ZTQl9UT19EQihpcCwgaW1hcC5icl9zdGFydGJsb2NrKSk7CiAJCXhmc2Jkc3RyYXQobXAsIGJwKTsKLQkJaWYgKChlcnJvciA9IHhmc19pb3dhaXQoYnApKSkgeworCQllcnJvciA9IHhmc19pb3dhaXQoYnApOworCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4ZnNfemVyb19yZW1haW5pbmdfYnl0ZXMocmVhZCkiLAogCQkJCQkgIG1wLCBicCwgWEZTX0JVRl9BRERSKGJwKSk7CiAJCQlicmVhazsKQEAgLTQwMzMsNyArMzg0NSw4IEBACiAJCVhGU19CVUZfVU5SRUFEKGJwKTsKIAkJWEZTX0JVRl9XUklURShicCk7CiAJCXhmc2Jkc3RyYXQobXAsIGJwKTsKLQkJaWYgKChlcnJvciA9IHhmc19pb3dhaXQoYnApKSkgeworCQllcnJvciA9IHhmc19pb3dhaXQoYnApOworCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4ZnNfemVyb19yZW1haW5pbmdfYnl0ZXMod3JpdGUpIiwKIAkJCQkJICBtcCwgYnAsIFhGU19CVUZfQUREUihicCkpOwogCQkJYnJlYWs7CkBAIC00MTAyLDcgKzM5MTUsNyBAQAogCSAgICBETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9XUklURSkpIHsKIAkJaWYgKGVuZF9kbWlfb2Zmc2V0ID4gaXAtPmlfc2l6ZSkKIAkJCWVuZF9kbWlfb2Zmc2V0ID0gaXAtPmlfc2l6ZTsKLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgdnAsCisJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfV1JJVEUsIGlwLAogCQkJCW9mZnNldCwgZW5kX2RtaV9vZmZzZXQgLSBvZmZzZXQsCiAJCQkJQVRfREVMQVlfRkxBRyhhdHRyX2ZsYWdzKSwgTlVMTCk7CiAJCWlmIChlcnJvcikKQEAgLTQxMzIsNyArMzk0NSw3IEBACiAJICogYWN0dWFsbHkgbmVlZCB0byB6ZXJvIHRoZSBleHRlbnQgZWRnZXMuICBPdGhlcndpc2UgeGZzX2J1bm1hcGkKIAkgKiB3aWxsIHRha2UgY2FyZSBvZiBpdCBmb3IgdXMuCiAJICovCi0JaWYgKHJ0ICYmICFYRlNfU0JfVkVSU0lPTl9IQVNFWFRGTEdCSVQoJm1wLT5tX3NiKSkgeworCWlmIChydCAmJiAheGZzX3NiX3ZlcnNpb25faGFzZXh0ZmxnYml0KCZtcC0+bV9zYikpIHsKIAkJbmltYXAgPSAxOwogCQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgc3RhcnRvZmZzZXRfZnNiLAogCQkJMSwgMCwgTlVMTCwgMCwgJmltYXAsICZuaW1hcCwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmggYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKaW5kZXggNGUzOTcwZjAuLjI0YzUzOTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAorKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKQEAgLTIzLDMxICsyMywzMiBAQAogCQl4ZnNfb2ZmX3Qgc3RvcCk7CiBpbnQgeGZzX3JlbGVhc2Uoc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19pbmFjdGl2ZShzdHJ1Y3QgeGZzX2lub2RlICppcCk7Ci1pbnQgeGZzX2xvb2t1cChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgYmh2X3ZuYW1lX3QgKmRlbnRyeSwKLQkJYmh2X3Zub2RlX3QgKip2cHApOwotaW50IHhmc19jcmVhdGUoc3RydWN0IHhmc19pbm9kZSAqZHAsIGJodl92bmFtZV90ICpkZW50cnksIG1vZGVfdCBtb2RlLAotCQl4ZnNfZGV2X3QgcmRldiwgYmh2X3Zub2RlX3QgKip2cHAsIHN0cnVjdCBjcmVkICpjcmVkcCk7Ci1pbnQgeGZzX3JlbW92ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCwgYmh2X3ZuYW1lX3QJKmRlbnRyeSk7Ci1pbnQgeGZzX2xpbmsoc3RydWN0IHhmc19pbm9kZSAqdGRwLCBiaHZfdm5vZGVfdCAqc3JjX3ZwLAotCQliaHZfdm5hbWVfdCAqZGVudHJ5KTsKLWludCB4ZnNfbWtkaXIoc3RydWN0IHhmc19pbm9kZSAqZHAsIGJodl92bmFtZV90ICpkZW50cnksCi0JCW1vZGVfdCBtb2RlLCBiaHZfdm5vZGVfdCAqKnZwcCwgc3RydWN0IGNyZWQgKmNyZWRwKTsKLWludCB4ZnNfcm1kaXIoc3RydWN0IHhmc19pbm9kZSAqZHAsIGJodl92bmFtZV90ICpkZW50cnkpOworaW50IHhmc19sb29rdXAoc3RydWN0IHhmc19pbm9kZSAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbmFtZSwKKwkJc3RydWN0IHhmc19pbm9kZSAqKmlwcCk7CitpbnQgeGZzX2NyZWF0ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCwgc3RydWN0IHhmc19uYW1lICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJeGZzX2Rldl90IHJkZXYsIHN0cnVjdCB4ZnNfaW5vZGUgKippcHAsIHN0cnVjdCBjcmVkICpjcmVkcCk7CitpbnQgeGZzX3JlbW92ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCwgc3RydWN0IHhmc19uYW1lICpuYW1lLAorCQlzdHJ1Y3QgeGZzX2lub2RlICppcCk7CitpbnQgeGZzX2xpbmsoc3RydWN0IHhmc19pbm9kZSAqdGRwLCBzdHJ1Y3QgeGZzX2lub2RlICpzaXAsCisJCXN0cnVjdCB4ZnNfbmFtZSAqdGFyZ2V0X25hbWUpOworaW50IHhmc19ta2RpcihzdHJ1Y3QgeGZzX2lub2RlICpkcCwgc3RydWN0IHhmc19uYW1lICpkaXJfbmFtZSwKKwkJbW9kZV90IG1vZGUsIHN0cnVjdCB4ZnNfaW5vZGUgKippcHAsIHN0cnVjdCBjcmVkICpjcmVkcCk7CitpbnQgeGZzX3JtZGlyKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBzdHJ1Y3QgeGZzX25hbWUgKm5hbWUsCisJCXN0cnVjdCB4ZnNfaW5vZGUgKmNkcCk7CiBpbnQgeGZzX3JlYWRkaXIoc3RydWN0IHhmc19pbm9kZQkqZHAsIHZvaWQgKmRpcmVudCwgc2l6ZV90IGJ1ZnNpemUsCiAJCSAgICAgICB4ZnNfb2ZmX3QgKm9mZnNldCwgZmlsbGRpcl90IGZpbGxkaXIpOwotaW50IHhmc19zeW1saW5rKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBiaHZfdm5hbWVfdCAqZGVudHJ5LAotCQljaGFyICp0YXJnZXRfcGF0aCwgbW9kZV90IG1vZGUsIGJodl92bm9kZV90ICoqdnBwLAoraW50IHhmc19zeW1saW5rKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBzdHJ1Y3QgeGZzX25hbWUgKmxpbmtfbmFtZSwKKwkJY29uc3QgY2hhciAqdGFyZ2V0X3BhdGgsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgeGZzX2lub2RlICoqaXBwLAogCQlzdHJ1Y3QgY3JlZCAqY3JlZHApOwotaW50IHhmc19yd2xvY2soc3RydWN0IHhmc19pbm9kZSAqaXAsIGJodl92cndsb2NrX3QgbG9ja3R5cGUpOwotdm9pZCB4ZnNfcnd1bmxvY2soc3RydWN0IHhmc19pbm9kZSAqaXAsIGJodl92cndsb2NrX3QgbG9ja3R5cGUpOwogaW50IHhmc19pbm9kZV9mbHVzaChzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IGZsYWdzKTsKIGludCB4ZnNfc2V0X2RtYXR0cnMoc3RydWN0IHhmc19pbm9kZSAqaXAsIHVfaW50IGV2bWFzaywgdV9pbnQxNl90IHN0YXRlKTsKIGludCB4ZnNfcmVjbGFpbShzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiBpbnQgeGZzX2NoYW5nZV9maWxlX3NwYWNlKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgY21kLAogCQl4ZnNfZmxvY2s2NF90ICpiZiwgeGZzX29mZl90IG9mZnNldCwKIAkJc3RydWN0IGNyZWQgKmNyZWRwLCBpbnQJYXR0cl9mbGFncyk7Ci1pbnQgeGZzX3JlbmFtZShzdHJ1Y3QgeGZzX2lub2RlICpzcmNfZHAsIGJodl92bmFtZV90ICpzcmNfdm5hbWUsCi0JCWJodl92bm9kZV90ICp0YXJnZXRfZGlyX3ZwLCBiaHZfdm5hbWVfdCAqdGFyZ2V0X3ZuYW1lKTsKK2ludCB4ZnNfcmVuYW1lKHN0cnVjdCB4ZnNfaW5vZGUgKnNyY19kcCwgc3RydWN0IHhmc19uYW1lICpzcmNfbmFtZSwKKwkJc3RydWN0IHhmc19pbm9kZSAqc3JjX2lwLCBzdHJ1Y3QgeGZzX2lub2RlICp0YXJnZXRfZHAsCisJCXN0cnVjdCB4ZnNfbmFtZSAqdGFyZ2V0X25hbWUpOwogaW50IHhmc19hdHRyX2dldChzdHJ1Y3QgeGZzX2lub2RlICppcCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUsCiAJCWludCAqdmFsdWVsZW5wLCBpbnQgZmxhZ3MsIGNyZWRfdCAqY3JlZCk7CiBpbnQgeGZzX2F0dHJfc2V0KHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2N1cnJlbnQuaAppbmRleCA4ZDg4YTEzLi4wOTRkMjg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9jdXJyZW50LmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY3VycmVudC5oCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KIAotI2RlZmluZSBnZXRfY3VycmVudCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2sgKyAwKQorI2RlZmluZSBnZXRfY3VycmVudCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2spCiAjZGVmaW5lIGN1cnJlbnQJCWdldF9jdXJyZW50KCkKIAogI2VuZGlmIC8qIF9BTFBIQV9DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oCmluZGV4IDc1YTFhZmYuLmRiMzUxZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvZG1hLW1hcHBpbmcuaApAQCAtMTEsNyArMTEsNyBAQAogI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQkJXAogCQlwY2lfdW5tYXBfc2luZ2xlKGFscGhhX2dlbmRldl90b19wY2koZGV2KSwgYWRkciwgc2l6ZSwgZGlyKQogI2RlZmluZSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBhZGRyLCBnZnApCVwKLQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpLCBzaXplLCBhZGRyKQorCSAgICAgIF9fcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpLCBzaXplLCBhZGRyLCBnZnApCiAjZGVmaW5lIGRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmEsIGFkZHIpCQlcCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpLCBzaXplLCB2YSwgYWRkcikKICNkZWZpbmUgZG1hX21hcF9wYWdlKGRldiwgcGFnZSwgb2ZmLCBzaXplLCBkaXIpCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2lkZS5oCmluZGV4IGI3YmY2OGQuLmY0NDEyOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2lkZS5oCkBAIC0xMyw5ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLQotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9ERUZBVUxUUwotCiBzdGF0aWMgaW5saW5lIGludCBpZGVfZGVmYXVsdF9pcnEodW5zaWduZWQgbG9uZyBiYXNlKQogewogCXN3aXRjaCAoYmFzZSkgewpAQCAtNDAsMTQgKzM3LDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KLQotI2lmZGVmIENPTkZJR19QQ0kKLSNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJKDApCi0jZWxzZQotI2RlZmluZSBpZGVfaW5pdF9kZWZhdWx0X2lycShiYXNlKQlpZGVfZGVmYXVsdF9pcnEoYmFzZSkKLSNlbmRpZgotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2t2bS5oIGIvaW5jbHVkZS9hc20tYWxwaGEva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkYWVjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2t2bS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0xJTlVYX0tWTV9BTFBIQV9ICisjZGVmaW5lIF9fTElOVVhfS1ZNX0FMUEhBX0gKKworLyogYWxwaGEgZG9lcyBub3Qgc3VwcG9ydCBLVk0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wY2kuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BjaS5oCmluZGV4IGQ1YjEwZWYuLmQzMWZkNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BjaS5oCkBAIC03Niw3ICs3NiwxMyBAQAogICAgc3VjY2Vzc2Z1bCBhbmQgc2V0cyAqRE1BX0FERFJQIHRvIHRoZSBwY2kgc2lkZSBkbWEgYWRkcmVzcyBhcyB3ZWxsLAogICAgZWxzZSBETUFfQUREUlAgaXMgdW5kZWZpbmVkLiAgKi8KIAotZXh0ZXJuIHZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwgZG1hX2FkZHJfdCAqKTsKK2V4dGVybiB2b2lkICpfX3BjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwKKwkJCQkgICAgZG1hX2FkZHJfdCAqLCBnZnBfdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgKgorcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYSkKK3sKKwlyZXR1cm4gX19wY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIHNpemUsIGRtYSwgR0ZQX0FUT01JQyk7Cit9CiAKIC8qIEZyZWUgYW5kIHVubWFwIGEgY29uc2lzdGVudCBETUEgYnVmZmVyLiAgQ1BVX0FERFIgYW5kIERNQV9BRERSIG11c3QKICAgIGJlIHZhbHVlcyB0aGF0IHdlcmUgcmV0dXJuZWQgZnJvbSBwY2lfYWxsb2NfY29uc2lzdGVudC4gIFNJWkUgbXVzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zZW1hcGhvcmUuaAppbmRleCBmMWU5Mjc4Li5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zZW1hcGhvcmUuaApAQCAtMSwxNDkgKzEgQEAKLSNpZm5kZWYgX0FMUEhBX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9BTFBIQV9TRU1BUEhPUkVfSAotCi0vKgotICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4uCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYsIDIwMDAgUmljaGFyZCBIZW5kZXJzb24KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KLXN0cnVjdCBzZW1hcGhvcmUgewotCWF0b21pY190IGNvdW50OwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJXAotewkJCQkJCQkJXAotCS5jb3VudAk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0gIAkud2FpdAk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KSwJXAotfQotCi0jZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KQkJXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKQkJX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JLyoKLQkgKiBMb2dpY2FsbHksIAotCSAqICAgKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCgqc2VtKSx2YWwpOwotCSAqIGV4Y2VwdCB0aGF0IGdjYyBwcm9kdWNlcyBiZXR0ZXIgaW5pdGlhbGl6aW5nIGJ5IHBhcnRzIHlldC4KLQkgKi8KLQotCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWV4dGVybiB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqKTsKLWV4dGVybiB2b2lkIF9fZG93bl9mYWlsZWQoc3RydWN0IHNlbWFwaG9yZSAqKTsKLWV4dGVybiBpbnQgIGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICopOwotZXh0ZXJuIGludCAgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKik7Ci1leHRlcm4gaW50ICBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqKTsKLWV4dGVybiB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKik7Ci1leHRlcm4gdm9pZCBfX3VwX3dha2V1cChzdHJ1Y3Qgc2VtYXBob3JlICopOwotCi0vKgotICogSGlkZGVuIG91dCBvZiBsaW5lIGNvZGUgaXMgZnVuLCBidXQgZXh0cmVtZWx5IG1lc3N5LiAgUmVseSBvbiBuZXdlcgotICogY29tcGlsZXJzIHRvIGRvIGEgcmVzcGVjdGFibGUgam9iIHdpdGggdGhpcy4gIFRoZSBjb250ZW50aW9uIGNhc2VzCi0gKiBhcmUgaGFuZGxlZCBvdXQgb2YgbGluZSBpbiBhcmNoL2FscGhhL2tlcm5lbC9zZW1hcGhvcmUuYy4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlsb25nIGNvdW50OwotCW1pZ2h0X3NsZWVwKCk7Ci0JY291bnQgPSBhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCk7Ci0JaWYgKHVubGlrZWx5KGNvdW50IDwgMCkpCi0JCV9fZG93bl9mYWlsZWQoc2VtKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCWxvbmcgY291bnQ7Ci0JbWlnaHRfc2xlZXAoKTsKLQljb3VudCA9IGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KTsKLQlpZiAodW5saWtlbHkoY291bnQgPCAwKSkKLQkJcmV0dXJuIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZShzZW0pOwotCXJldHVybiAwOwotfQotCi0vKgotICogZG93bl90cnlsb2NrIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHdlIGZhaWxlZCB0byBnZXQgdGhlIGxvY2suCi0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCWxvbmcgcmV0OwotCi0JLyogIkVxdWl2YWxlbnQiIEM6Ci0KLQkgICBkbyB7Ci0JCXJldCA9IGxkbF9sOwotCQktLXJldDsKLQkJaWYgKHJldCA8IDApCi0JCQlicmVhazsKLQkJcmV0ID0gc3RsX2MgPSByZXQ7Ci0JICAgfSB3aGlsZSAocmV0ID09IDApOwotCSovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIxOglsZGxfbAklMCwlMVxuIgotCQkiCXN1YmwJJTAsMSwlMFxuIgotCQkiCWJsdAklMCwyZlxuIgotCQkiCXN0bF9jCSUwLCUxXG4iCi0JCSIJYmVxCSUwLDNmXG4iCi0JCSIJbWJcbiIKLQkJIjI6XG4iCi0JCSIuc3Vic2VjdGlvbiAyXG4iCi0JCSIzOglicgkxYlxuIgotCQkiLnByZXZpb3VzIgotCQk6ICI9JnIiIChyZXQpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJtIiAoc2VtLT5jb3VudCkpOwotCi0JcmV0dXJuIHJldCA8IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpZiAodW5saWtlbHkoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApKQotCQlfX3VwX3dha2V1cChzZW0pOwotfQotCi0jaWYgIWRlZmluZWQoQ09ORklHX0RFQlVHX1NFTUFQSE9SRSkKLWV4dGVybiBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlfX2Rvd24oc2VtKTsKLX0KLWV4dGVybiBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JcmV0dXJuIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci19Ci1leHRlcm4gaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXJldHVybiBfX2Rvd25fdHJ5bG9jayhzZW0pOwotfQotZXh0ZXJuIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlfX3VwKHNlbSk7Ci19Ci0jZW5kaWYKLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdG9wb2xvZ3kuaAppbmRleCA0MjBjY2RlLi4xNDk1MzJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3RvcG9sb2d5LmgKQEAgLTQxLDggKzQxLDcgQEAKIAogI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCShjcHVfb25saW5lX21hcCkKIAotI2Vsc2UgLyogQ09ORklHX05VTUEgKi8KLSMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KICNlbmRpZiAvKiAhQ09ORklHX05VTUEgKi8KKyMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KIAogI2VuZGlmIC8qIF9BU01fQUxQSEFfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2VjYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2VjYy5oCmluZGV4IGZmOTNkZjUuLjFlNWE4Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9lY2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfZWNjLmgKQEAgLTEzLDI2ICsxMywyNiBAQAogI2lmbmRlZiBBVDkxX0VDQ19ICiAjZGVmaW5lIEFUOTFfRUNDX0gKIAotI2RlZmluZSBBVDkxX0VDQ19DUgkJKEFUOTFfRUNDICsgMHgwMCkJLyogQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0VDQ19DUgkJMHgwMAkJCS8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRUNDX1JTVAkJKDEgPDwgMCkJCS8qIFJlc2V0IHBhcml0eSAqLwogCi0jZGVmaW5lIEFUOTFfRUNDX01SCQkoQVQ5MV9FQ0MgKyAweDA0KQkvKiBNb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfRUNDX01SCQkweDA0CQkJLyogTW9kZSByZWdpc3RlciAqLwogI2RlZmluZQkJQVQ5MV9FQ0NfUEFHRVNJWkUJKDMgPDwgMCkJCS8qIFBhZ2UgU2l6ZSAqLwogI2RlZmluZQkJCUFUOTFfRUNDX1BBR0VTSVpFXzUyOAkJKDApCiAjZGVmaW5lCQkJQVQ5MV9FQ0NfUEFHRVNJWkVfMTA1NgkJKDEpCiAjZGVmaW5lCQkJQVQ5MV9FQ0NfUEFHRVNJWkVfMjExMgkJKDIpCiAjZGVmaW5lCQkJQVQ5MV9FQ0NfUEFHRVNJWkVfNDIyNAkJKDMpCiAKLSNkZWZpbmUgQVQ5MV9FQ0NfU1IJCShBVDkxX0VDQyArIDB4MDgpCS8qIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0VDQ19TUgkJMHgwOAkJCS8qIFN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZQkJQVQ5MV9FQ0NfUkVDRVJSCQkoMSA8PCAwKQkJLyogUmVjb3ZlcmFibGUgRXJyb3IgKi8KICNkZWZpbmUJCUFUOTFfRUNDX0VDQ0VSUgkJKDEgPDwgMSkJCS8qIEVDQyBTaW5nbGUgQml0IEVycm9yICovCiAjZGVmaW5lCQlBVDkxX0VDQ19NVUxFUlIJCSgxIDw8IDIpCQkvKiBNdWx0aXBsZSBFcnJvcnMgKi8KIAotI2RlZmluZSBBVDkxX0VDQ19QUgkJKEFUOTFfRUNDICsgMHgwYykJLyogUGFyaXR5IHJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfRUNDX1BSCQkweDBjCQkJLyogUGFyaXR5IHJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX0VDQ19CSVRBRERSCSgweGYgPDwgMCkJCS8qIEJpdCBFcnJvciBBZGRyZXNzICovCiAjZGVmaW5lCQlBVDkxX0VDQ19XT1JEQUREUgkoMHhmZmYgPDwgNCkJCS8qIFdvcmQgRXJyb3IgQWRkcmVzcyAqLwogCi0jZGVmaW5lIEFUOTFfRUNDX05QUgkJKEFUOTFfRUNDICsgMHgxMCkJLyogTlBhcml0eSByZWdpc3RlciAqLworI2RlZmluZSBBVDkxX0VDQ19OUFIJCTB4MTAJCQkvKiBOUGFyaXR5IHJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX0VDQ19OUEFSSVRZCSgweGZmZmYgPDwgMCkJCS8qIE5QYXJpdHkgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcG1jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcG1jLmgKaW5kZXggNTJjZDhlNS4uYzJiMTNjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3BtYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9wbWMuaApAQCAtNzYsMTAgKzc2LDE3IEBACiAjZGVmaW5lCQkJQVQ5MV9QTUNfUFJFU18zMgkJKDUgPDwgMikKICNkZWZpbmUJCQlBVDkxX1BNQ19QUkVTXzY0CQkoNiA8PCAyKQogI2RlZmluZQkJQVQ5MV9QTUNfTURJVgkJKDMgPDwgIDgpCQkvKiBNYXN0ZXIgQ2xvY2sgRGl2aXNpb24gKi8KLSNkZWZpbmUJCQlBVDkxX1BNQ19NRElWXzEJCQkoMCA8PCA4KQotI2RlZmluZQkJCUFUOTFfUE1DX01ESVZfMgkJCSgxIDw8IDgpCi0jZGVmaW5lCQkJQVQ5MV9QTUNfTURJVl8zCQkJKDIgPDwgOCkKLSNkZWZpbmUJCQlBVDkxX1BNQ19NRElWXzQJCQkoMyA8PCA4KQorI2RlZmluZQkJCUFUOTFSTTkyMDBfUE1DX01ESVZfMQkJKDAgPDwgOCkJLyogW0FUOTFSTTkyMDAgb25seV0gKi8KKyNkZWZpbmUJCQlBVDkxUk05MjAwX1BNQ19NRElWXzIJCSgxIDw8IDgpCisjZGVmaW5lCQkJQVQ5MVJNOTIwMF9QTUNfTURJVl8zCQkoMiA8PCA4KQorI2RlZmluZQkJCUFUOTFSTTkyMDBfUE1DX01ESVZfNAkJKDMgPDwgOCkKKyNkZWZpbmUJCQlBVDkxU0FNOV9QTUNfTURJVl8xCQkoMCA8PCA4KQkvKiBbU0FNOSxDQVA5IG9ubHldICovCisjZGVmaW5lCQkJQVQ5MVNBTTlfUE1DX01ESVZfMgkJKDEgPDwgOCkKKyNkZWZpbmUJCQlBVDkxU0FNOV9QTUNfTURJVl80CQkoMiA8PCA4KQorI2RlZmluZQkJCUFUOTFTQU05X1BNQ19NRElWXzYJCSgzIDw8IDgpCisjZGVmaW5lCQlBVDkxX1BNQ19QRElWCQkoMSA8PCAxMikJCS8qIFByb2Nlc3NvciBDbG9jayBEaXZpc2lvbiBbc29tZSBTQU05IG9ubHldICovCisjZGVmaW5lCQkJQVQ5MV9QTUNfUERJVl8xCQkJKDAgPDwgMTIpCisjZGVmaW5lCQkJQVQ5MV9QTUNfUERJVl8yCQkJKDEgPDwgMTIpCiAKICNkZWZpbmUJQVQ5MV9QTUNfUENLUihuKQkoQVQ5MV9QTUMgKyAweDQwICsgKChuKSAqIDQpKQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMC0zIFJlZ2lzdGVycyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfc2hkd2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zaGR3Yy5oCmluZGV4IDAxYjQzM2QuLjU4MWZhNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zaGR3Yy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zaGR3Yy5oCkBAIC0yNCwxMCArMjQsMTIgQEAKICNkZWZpbmUJCQlBVDkxX1NIRFdfV0tNT0RFMF9MT1cJCTIKICNkZWZpbmUJCQlBVDkxX1NIRFdfV0tNT0RFMF9BTllMRVZFTAkzCiAjZGVmaW5lCQlBVDkxX1NIRFdfQ1BUV0swCSgweGYgPDwgNCkJCS8qIENvdW50ZXIgT24gV2FrZSBVcCAwICovCisjZGVmaW5lCQkJQVQ5MV9TSERXX0NQVFdLMF8oeCkJKCh4KSA8PCA0KQogI2RlZmluZQkJQVQ5MV9TSERXX1JUVFdLRU4JKDEgICA8PCAxNikJCS8qIFJlYWwgVGltZSBUaW1lciBXYWtlLXVwIEVuYWJsZSAqLwogCiAjZGVmaW5lIEFUOTFfU0hEV19TUgkJKEFUOTFfU0hEV0MgKyAweDA4KQkvKiBTaHV0IERvd24gU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1NIRFdfV0FLRVVQMAkoMSA8PCAgMCkJCS8qIFdha2UtdXAgMCBTdGF0dXMgKi8KICNkZWZpbmUJCUFUOTFfU0hEV19SVFRXSwkJKDEgPDwgMTYpCQkvKiBSZWFsLXRpbWUgVGltZXIgV2FrZS11cCAqLworI2RlZmluZQkJQVQ5MV9TSERXX1JUQ1dLCQkoMSA8PCAxNykJCS8qIFJlYWwtdGltZSBDbG9jayBXYWtlLXVwIFtTQU05UkxdICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxY2FwOS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxY2FwOS5oCmluZGV4IDczZTFmY2YuLmJhYzgzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MWNhcDkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFjYXA5LmgKQEAgLTk3LDEyICs5NywxNyBAQAogI2RlZmluZSBBVDkxX1BJT0QJKDB4ZmZmZmY4MDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1BNQwkoMHhmZmZmZmMwMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfUlNUQwkoMHhmZmZmZmQwMCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfU0hEQwkoMHhmZmZmZmQxMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU0hEV0MJKDB4ZmZmZmZkMTAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1JUVAkoMHhmZmZmZmQyMCAtIEFUOTFfQkFTRV9TWVMpCiAjZGVmaW5lIEFUOTFfUElUCSgweGZmZmZmZDMwIC0gQVQ5MV9CQVNFX1NZUykKICNkZWZpbmUgQVQ5MV9XRFQJKDB4ZmZmZmZkNDAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX0dQQlIJKDB4ZmZmZmZkNTAgLSBBVDkxX0JBU0VfU1lTKQogCisjZGVmaW5lIEFUOTFfVVNBUlQwCUFUOTFDQVA5X0JBU0VfVVMwCisjZGVmaW5lIEFUOTFfVVNBUlQxCUFUOTFDQVA5X0JBU0VfVVMxCisjZGVmaW5lIEFUOTFfVVNBUlQyCUFUOTFDQVA5X0JBU0VfVVMyCisKKwogLyoKICAqIEludGVybmFsIE1lbW9yeS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxY2FwOV9kZHJzZHIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MWNhcDlfZGRyc2RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkYjIzYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MWNhcDlfZGRyc2RyLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFjYXA5X2RkcnNkci5oCisgKgorICogRERSL1NEUiBDb250cm9sbGVyIChERFJTRFJDKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdpc3RlcnMuCisgKiBCYXNlZCBvbiBBVDkxQ0FQOSBkYXRhc2hlZXQgcmV2aXNpb24gQi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVQ5MUNBUDlfRERSU0RSX0gKKyNkZWZpbmUgQVQ5MUNBUDlfRERSU0RSX0gKKworI2RlZmluZSBBVDkxX0REUlNEUkNfTVIJCShBVDkxX0REUlNEUkMgKyAweDAwKQkvKiBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfTU9ERQkoMHhmIDw8IDApCQkvKiBDb21tYW5kIE1vZGUgKi8KKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTU9ERV9OT1JNQUwJCTAKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTU9ERV9OT1AJCTEKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTU9ERV9QUkVDSEFSR0UJMgorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX0xNUgkJMworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX1JFRlJFU0gJNAorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX0VYVF9MTVIJNQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NT0RFX0RFRVAJCTYKKworI2RlZmluZSBBVDkxX0REUlNEUkNfUlRSCShBVDkxX0REUlNEUkMgKyAweDA0KQkvKiBSZWZyZXNoIFRpbWVyIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfQ09VTlQJKDB4ZmZmIDw8IDApCQkvKiBSZWZyZXNoIFRpbWVyIENvdW50ZXIgKi8KKworI2RlZmluZSBBVDkxX0REUlNEUkNfQ1IJCShBVDkxX0REUlNEUkMgKyAweDA4KQkvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfTkMJCSgzIDw8IDApCQkvKiBOdW1iZXIgb2YgQ29sdW1uIEJpdHMgKi8KKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTkNfU0RSOAkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OQ19TRFI5CSgxIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05DX1NEUjEwCSgyIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05DX1NEUjExCSgzIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX05DX0REUjkJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTkNfRERSMTAJKDEgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTkNfRERSMTEJKDIgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTkNfRERSMTIJKDMgPDwgMCkKKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19OUgkJKDMgPDwgMikJCS8qIE51bWJlciBvZiBSb3cgQml0cyAqLworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OUl8xMQkoMCA8PCAyKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OUl8xMgkoMSA8PCAyKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19OUl8xMwkoMiA8PCAyKQorI2RlZmluZQkJQVQ5MV9ERFJTRFJDX0NBUwkoNyA8PCA0KQkJLyogQ0FTIExhdGVuY3kgKi8KKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfQ0FTXzIJKDIgPDwgNCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfQ0FTXzMJKDMgPDwgNCkKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfQ0FTXzI1CSg2IDw8IDQpCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfRExMCSgxIDw8IDcpCQkvKiBSZXNldCBETEwgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19ESUNEUwkoMSA8PCA4KQkJLyogT3V0cHV0IGltcGVkYW5jZSBjb250cm9sICovCisKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX1QwUFIJKEFUOTFfRERSU0RSQyArIDB4MEMpCS8qIFRpbWluZyAwIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFJBUwkoMHhmIDw8ICAwKQkJLyogQWN0aXZlIHRvIFByZWNoYXJnZSBkZWxheSAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RSQ0QJKDB4ZiA8PCAgNCkJCS8qIFJvdyB0byBDb2x1bW4gZGVsYXkgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UV1IJKDB4ZiA8PCAgOCkJCS8qIFdyaXRlIHJlY292ZXJ5IGRlbGF5ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFJDCSgweGYgPDwgMTIpCQkvKiBSb3cgY3ljbGUgZGVsYXkgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UUlAJKDB4ZiA8PCAxNikJCS8qIFJvdyBwcmVjaGFyZ2UgZGVsYXkgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UUlJECSgweGYgPDwgMjApCQkvKiBBY3RpdmUgQmFua0EgdG8gQmFua0IgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19UV1RSCSgxICAgPDwgMjQpCQkvKiBJbnRlcm5hbCBXcml0ZSB0byBSZWFkIGRlbGF5ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVE1SRAkoMHhmIDw8IDI4KQkJLyogTG9hZCBtb2RlIHRvIGFjdGl2ZS9yZWZyZXNoIGRlbGF5ICovCisKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX1QxUFIJKEFUOTFfRERSU0RSQyArIDB4MTApCS8qIFRpbWluZyAxIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFJGQwkoMHgxZiA8PCAwKQkJLyogUm93IEN5Y2xlIERlbGF5ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFhTTlIJKDB4ZmYgPDwgOCkJCS8qIEV4aXQgc2VsZi1yZWZyZXNoIHRvIG5vbi1yZWFkICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFhTUkQJKDB4ZmYgPDwgMTYpCQkvKiBFeGl0IHNlbGYtcmVmcmVzaCB0byByZWFkICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVFhQCSgweGYgIDw8IDI0KQkJLyogRXhpdCBwb3dlci1kb3duIGRlbGF5ICovCisKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDX0xQUgkoQVQ5MV9ERFJTRFJDICsgMHgxOCkJLyogTG93IFBvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfTFBDQgkJKDMgPDwgMCkJLyogTG93LXBvd2VyIENvbmZpZ3VyYXRpb25zICovCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX0xQQ0JfRElTQUJMRQkJMAorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19MUENCX1NFTEZfUkVGUkVTSAkJMQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19MUENCX1BPV0VSX0RPV04JCTIKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTFBDQl9ERUVQX1BPV0VSX0RPV04JMworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX0NMS0ZSCQkoMSA8PCAyKQkvKiBDbG9jayBGcm96ZW4gKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19QQVNSCQkoNyA8PCA0KQkvKiBQYXJ0aWFsIEFycmF5IFNlbGYgUmVmcmVzaCAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1RDU1IJCSgzIDw8IDgpCS8qIFRlbXBlcmF0dXJlIENvbXBlbnNhdGVkIFNlbGYgUmVmcmVzaCAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX0RTCQkJKDMgPDwgMTApCS8qIERyaXZlIFN0cmVuZ3RoICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfVElNRU9VVAkJKDMgPDwgMTIpCS8qIFRpbWUgdG8gZGVmaW5lIHdoZW4gTG93IFBvd2VyIE1vZGUgaXMgZW5hYmxlZCAqLworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19USU1FT1VUXzBfQ0xLX0NZQ0xFUwkoMCA8PCAxMikKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfVElNRU9VVF82NF9DTEtfQ1lDTEVTCSgxIDw8IDEyKQorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19USU1FT1VUXzEyOF9DTEtfQ1lDTEVTCSgyIDw8IDEyKQorCisjZGVmaW5lIEFUOTFfRERSU0RSQ19NRFIJKEFUOTFfRERSU0RSQyArIDB4MUMpCS8qIE1lbW9yeSBEZXZpY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19NRAkJKDMgPDwgMCkJCS8qIE1lbW9yeSBEZXZpY2UgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NRF9TRFIJCTAKKyNkZWZpbmUJCQlBVDkxX0REUlNEUkNfTURfTE9XX1BPV0VSX1NEUgkxCisjZGVmaW5lCQkJQVQ5MV9ERFJTRFJDX01EX0REUgkJMgorI2RlZmluZQkJCUFUOTFfRERSU0RSQ19NRF9MT1dfUE9XRVJfRERSCTMKKworI2RlZmluZSBBVDkxX0REUlNEUkNfRExMUgkoQVQ5MV9ERFJTRFJDICsgMHgyMCkJLyogRExMIEluZm9ybWF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfTURJTkMJKDEgPDwgMCkJCS8qIE1hc3RlciBEZWxheSBpbmNyZW1lbnQgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19NRERFQwkoMSA8PCAxKQkJLyogTWFzdGVyIERlbGF5IGRlY3JlbWVudCAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX01ET1ZGCSgxIDw8IDIpCQkvKiBNYXN0ZXIgRGVsYXkgT3ZlcmZsb3cgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19TRENPVkYJKDEgPDwgMykJCS8qIFNsYXZlIERlbGF5IENvcnJlY3Rpb24gT3ZlcmZsb3cgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19TRENVREYJKDEgPDwgNCkJCS8qIFNsYXZlIERlbGF5IENvcnJlY3Rpb24gVW5kZXJmbG93ICovCisjZGVmaW5lCQlBVDkxX0REUlNEUkNfU0RFUkYJKDEgPDwgNSkJCS8qIFNsYXZlIERlbGF5IENvcnJlY3Rpb24gZXJyb3IgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19NRFZBTAkoMHhmZiA8PCAgOCkJCS8qIE1hc3RlciBEZWxheSB2YWx1ZSAqLworI2RlZmluZQkJQVQ5MV9ERFJTRFJDX1NEVkFMCSgweGZmIDw8IDE2KQkJLyogU2xhdmUgRGVsYXkgdmFsdWUgKi8KKyNkZWZpbmUJCUFUOTFfRERSU0RSQ19TRENWQUwJKDB4ZmYgPDwgMjQpCQkvKiBTbGF2ZSBEZWxheSBDb3JyZWN0aW9uIHZhbHVlICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjZ4X21jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjZ4X21jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjYzMWMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2eF9tYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjZ4X21jLmgKLSAqCi0gKiBNZW1vcnkgQ29udHJvbGxlcnMgKFNNQywgU0RSQU1DKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdpc3RlcnMuCi0gKiBCYXNlZCBvbiBBVDkxU0FNOTI2MSBkYXRhc2hlZXQgcmV2aXNpb24gRC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgQVQ5MVNBTTkyNnhfTUNfSAotI2RlZmluZSBBVDkxU0FNOTI2eF9NQ19ICi0KLS8qIFNEUkFNIENvbnRyb2xsZXIgKFNEUkFNQykgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEFUOTFfU0RSQU1DX01SCQkoQVQ5MV9TRFJBTUMgKyAweDAwKQkvKiBTRFJBTSBDb250cm9sbGVyIE1vZGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfU0RSQU1DX01PREUJKDB4ZiA8PCAwKQkJLyogQ29tbWFuZCBNb2RlICovCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTU9ERV9OT1JNQUwJCTAKLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NT0RFX05PUAkJMQotI2RlZmluZQkJCUFUOTFfU0RSQU1DX01PREVfUFJFQ0hBUkdFCTIKLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NT0RFX0xNUgkJMwotI2RlZmluZQkJCUFUOTFfU0RSQU1DX01PREVfUkVGUkVTSAk0Ci0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTU9ERV9FWFRfTE1SCTUKLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NT0RFX0RFRVAJCTYKLQotI2RlZmluZSBBVDkxX1NEUkFNQ19UUgkJKEFUOTFfU0RSQU1DICsgMHgwNCkJLyogU0RSQU0gQ29udHJvbGxlciBSZWZyZXNoIFRpbWVyIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19DT1VOVAkoMHhmZmYgPDwgMCkJCS8qIFJlZnJlc2ggVGltZXIgQ291bnRlciAqLwotCi0jZGVmaW5lIEFUOTFfU0RSQU1DX0NSCQkoQVQ5MV9TRFJBTUMgKyAweDA4KQkvKiBTRFJBTSBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfU0RSQU1DX05DCQkoMyA8PCAwKQkJLyogTnVtYmVyIG9mIENvbHVtbiBCaXRzICovCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkNfOAkoMCA8PCAwKQotI2RlZmluZQkJCUFUOTFfU0RSQU1DX05DXzkJKDEgPDwgMCkKLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19OQ18xMAkoMiA8PCAwKQotI2RlZmluZQkJCUFUOTFfU0RSQU1DX05DXzExCSgzIDw8IDApCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19OUgkJKDMgPDwgMikJCS8qIE51bWJlciBvZiBSb3cgQml0cyAqLwotI2RlZmluZQkJCUFUOTFfU0RSQU1DX05SXzExCSgwIDw8IDIpCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTlJfMTIJKDEgPDwgMikKLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19OUl8xMwkoMiA8PCAyKQotI2RlZmluZQkJQVQ5MV9TRFJBTUNfTkIJCSgxIDw8IDQpCQkvKiBOdW1iZXIgb2YgQmFua3MgKi8KLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19OQl8yCSgwIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkJfNAkoMSA8PCA0KQotI2RlZmluZQkJQVQ5MV9TRFJBTUNfQ0FTCQkoMyA8PCA1KQkJLyogQ0FTIExhdGVuY3kgKi8KLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19DQVNfMQkoMSA8PCA1KQotI2RlZmluZQkJCUFUOTFfU0RSQU1DX0NBU18yCSgyIDw8IDUpCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfQ0FTXzMJKDMgPDwgNSkKLSNkZWZpbmUJCUFUOTFfU0RSQU1DX0RCVwkJKDEgPDwgNykJCS8qIERhdGEgQnVzIFdpZHRoICovCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfREJXXzMyCSgwIDw8IDcpCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfREJXXzE2CSgxIDw8IDcpCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19UV1IJCSgweGYgPDwgIDgpCQkvKiBXcml0ZSBSZWNvdmVyeSBEZWxheSAqLwotI2RlZmluZQkJQVQ5MV9TRFJBTUNfVFJDCQkoMHhmIDw8IDEyKQkJLyogUm93IEN5Y2xlIERlbGF5ICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19UUlAJCSgweGYgPDwgMTYpCQkvKiBSb3cgUHJlY2hhcmdlIERlbGF5ICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19UUkNECSgweGYgPDwgMjApCQkvKiBSb3cgdG8gQ29sdW1uIERlbGF5ICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19UUkFTCSgweGYgPDwgMjQpCQkvKiBBY3RpdmUgdG8gUHJlY2hhcmdlIERlbGF5ICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19UWFNSCSgweGYgPDwgMjgpCQkvKiBFeGl0IFNlbGYgUmVmcmVzaCB0byBBY3RpdmUgRGVsYXkgKi8KLQotI2RlZmluZSBBVDkxX1NEUkFNQ19MUFIJCShBVDkxX1NEUkFNQyArIDB4MTApCS8qIFNEUkFNIENvbnRyb2xsZXIgTG93IFBvd2VyIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19MUENCCQkoMyA8PCAwKQkvKiBMb3ctcG93ZXIgQ29uZmlndXJhdGlvbnMgKi8KLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19MUENCX0RJU0FCTEUJCTAKLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19MUENCX1NFTEZfUkVGUkVTSAkJMQotI2RlZmluZQkJCUFUOTFfU0RSQU1DX0xQQ0JfUE9XRVJfRE9XTgkJMgotI2RlZmluZQkJCUFUOTFfU0RSQU1DX0xQQ0JfREVFUF9QT1dFUl9ET1dOCTMKLSNkZWZpbmUJCUFUOTFfU0RSQU1DX1BBU1IJCSg3IDw8IDQpCS8qIFBhcnRpYWwgQXJyYXkgU2VsZiBSZWZyZXNoICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19UQ1NSCQkoMyA8PCA4KQkvKiBUZW1wZXJhdHVyZSBDb21wZW5zYXRlZCBTZWxmIFJlZnJlc2ggKi8KLSNkZWZpbmUJCUFUOTFfU0RSQU1DX0RTCQkJKDMgPDwgMTApCS8qIERyaXZlIFN0cmVuZ2h0ICovCi0jZGVmaW5lCQlBVDkxX1NEUkFNQ19USU1FT1VUCQkoMyA8PCAxMikJLyogVGltZSB0byBkZWZpbmUgd2hlbiBMb3cgUG93ZXIgTW9kZSBpcyBlbmFibGVkICovCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfVElNRU9VVF8wX0NMS19DWUNMRVMJKDAgPDwgMTIpCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfVElNRU9VVF82NF9DTEtfQ1lDTEVTCSgxIDw8IDEyKQotI2RlZmluZQkJCUFUOTFfU0RSQU1DX1RJTUVPVVRfMTI4X0NMS19DWUNMRVMJKDIgPDwgMTIpCi0KLSNkZWZpbmUgQVQ5MV9TRFJBTUNfSUVSCQkoQVQ5MV9TRFJBTUMgKyAweDE0KQkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9TRFJBTUNfSURSCQkoQVQ5MV9TRFJBTUMgKyAweDE4KQkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfU0RSQU1DX0lNUgkJKEFUOTFfU0RSQU1DICsgMHgxQykJLyogU0RSQU0gQ29udHJvbGxlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX1NEUkFNQ19JU1IJCShBVDkxX1NEUkFNQyArIDB4MjApCS8qIFNEUkFNIENvbnRyb2xsZXIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9TRFJBTUNfUkVTCQkoMSA8PCAwKQkJLyogUmVmcmVzaCBFcnJvciBTdGF0dXMgKi8KLQotI2RlZmluZSBBVDkxX1NEUkFNQ19NRFIJCShBVDkxX1NEUkFNQyArIDB4MjQpCS8qIFNEUkFNIE1lbW9yeSBEZXZpY2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfU0RSQU1DX01ECQkoMyA8PCAwKQkJLyogTWVtb3J5IERldmljZSBUeXBlICovCi0jZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTURfU0RSQU0JCTAKLSNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NRF9MT1dfUE9XRVJfU0RSQU0JMQotCi0KLS8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAoU01DKSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQVQ5MV9TTUNfU0VUVVAobikJKEFUOTFfU01DICsgMHgwMCArICgobikqMHgxMCkpCS8qIFNldHVwIFJlZ2lzdGVyIGZvciBDUyBuICovCi0jZGVmaW5lCQlBVDkxX1NNQ19OV0VTRVRVUAkoMHgzZiA8PCAwKQkJCS8qIE5XRSBTZXR1cCBMZW5ndGggKi8KLSNkZWZpbmUJCQlBVDkxX1NNQ19OV0VTRVRVUF8oeCkJKCh4KSA8PCAwKQotI2RlZmluZQkJQVQ5MV9TTUNfTkNTX1dSU0VUVVAJKDB4M2YgPDwgOCkJCQkvKiBOQ1MgU2V0dXAgTGVuZ3RoIGluIFdyaXRlIEFjY2VzcyAqLwotI2RlZmluZQkJCUFUOTFfU01DX05DU19XUlNFVFVQXyh4KQkoKHgpIDw8IDgpCi0jZGVmaW5lCQlBVDkxX1NNQ19OUkRTRVRVUAkoMHgzZiA8PCAxNikJCQkvKiBOUkQgU2V0dXAgTGVuZ3RoICovCi0jZGVmaW5lCQkJQVQ5MV9TTUNfTlJEU0VUVVBfKHgpCSgoeCkgPDwgMTYpCi0jZGVmaW5lCQlBVDkxX1NNQ19OQ1NfUkRTRVRVUAkoMHgzZiA8PCAyNCkJCQkvKiBOQ1MgU2V0dXAgTGVuZ3RoIGluIFJlYWQgQWNjZXNzICovCi0jZGVmaW5lCQkJQVQ5MV9TTUNfTkNTX1JEU0VUVVBfKHgpCSgoeCkgPDwgMjQpCi0KLSNkZWZpbmUgQVQ5MV9TTUNfUFVMU0UobikJKEFUOTFfU01DICsgMHgwNCArICgobikqMHgxMCkpCS8qIFB1bHNlIFJlZ2lzdGVyIGZvciBDUyBuICovCi0jZGVmaW5lCQlBVDkxX1NNQ19OV0VQVUxTRQkoMHg3ZiA8PCAgMCkJCQkvKiBOV0UgUHVsc2UgTGVuZ3RoICovCi0jZGVmaW5lCQkJQVQ5MV9TTUNfTldFUFVMU0VfKHgpCSgoeCkgPDwgMCkKLSNkZWZpbmUJCUFUOTFfU01DX05DU19XUlBVTFNFCSgweDdmIDw8ICA4KQkJCS8qIE5DUyBQdWxzZSBMZW5ndGggaW4gV3JpdGUgQWNjZXNzICovCi0jZGVmaW5lCQkJQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKHgpKCh4KSA8PCA4KQotI2RlZmluZQkJQVQ5MV9TTUNfTlJEUFVMU0UJKDB4N2YgPDwgMTYpCQkJLyogTlJEIFB1bHNlIExlbmd0aCAqLwotI2RlZmluZQkJCUFUOTFfU01DX05SRFBVTFNFXyh4KQkoKHgpIDw8IDE2KQotI2RlZmluZQkJQVQ5MV9TTUNfTkNTX1JEUFVMU0UJKDB4N2YgPDwgMjQpCQkJLyogTkNTIFB1bHNlIExlbmd0aCBpbiBSZWFkIEFjY2VzcyAqLwotI2RlZmluZQkJCUFUOTFfU01DX05DU19SRFBVTFNFXyh4KSgoeCkgPDwgMjQpCi0KLSNkZWZpbmUgQVQ5MV9TTUNfQ1lDTEUobikJKEFUOTFfU01DICsgMHgwOCArICgobikqMHgxMCkpCS8qIEN5Y2xlIFJlZ2lzdGVyIGZvciBDUyBuICovCi0jZGVmaW5lCQlBVDkxX1NNQ19OV0VDWUNMRQkoMHgxZmYgPDwgMCApCQkJLyogVG90YWwgV3JpdGUgQ3ljbGUgTGVuZ3RoICovCi0jZGVmaW5lCQkJQVQ5MV9TTUNfTldFQ1lDTEVfKHgpCSgoeCkgPDwgMCkKLSNkZWZpbmUJCUFUOTFfU01DX05SRENZQ0xFCSgweDFmZiA8PCAxNikJCQkvKiBUb3RhbCBSZWFkIEN5Y2xlIExlbmd0aCAqLwotI2RlZmluZQkJCUFUOTFfU01DX05SRENZQ0xFXyh4KQkoKHgpIDw8IDE2KQotCi0jZGVmaW5lIEFUOTFfU01DX01PREUobikJKEFUOTFfU01DICsgMHgwYyArICgobikqMHgxMCkpCS8qIE1vZGUgUmVnaXN0ZXIgZm9yIENTIG4gKi8KLSNkZWZpbmUJCUFUOTFfU01DX1JFQURNT0RFCSgxIDw8ICAwKQkJCS8qIFJlYWQgTW9kZSAqLwotI2RlZmluZQkJQVQ5MV9TTUNfV1JJVEVNT0RFCSgxIDw8ICAxKQkJCS8qIFdyaXRlIE1vZGUgKi8KLSNkZWZpbmUJCUFUOTFfU01DX0VYTldNT0RFCSgzIDw8ICA0KQkJCS8qIE5XQUlUIE1vZGUgKi8KLSNkZWZpbmUJCQlBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFCSgwIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9TTUNfRVhOV01PREVfRlJPWkVOCSgyIDw8IDQpCi0jZGVmaW5lCQkJQVQ5MV9TTUNfRVhOV01PREVfUkVBRFkJCSgzIDw8IDQpCi0jZGVmaW5lCQlBVDkxX1NNQ19CQVQJCSgxIDw8ICA4KQkJCS8qIEJ5dGUgQWNjZXNzIFR5cGUgKi8KLSNkZWZpbmUJCQlBVDkxX1NNQ19CQVRfU0VMRUNUCQkoMCA8PCA4KQotI2RlZmluZQkJCUFUOTFfU01DX0JBVF9XUklURQkJKDEgPDwgOCkKLSNkZWZpbmUJCUFUOTFfU01DX0RCVwkJKDMgPDwgMTIpCQkJLyogRGF0YSBCdXMgV2lkdGggKi8KLSNkZWZpbmUJCQlBVDkxX1NNQ19EQldfOAkJCSgwIDw8IDEyKQotI2RlZmluZQkJCUFUOTFfU01DX0RCV18xNgkJCSgxIDw8IDEyKQotI2RlZmluZQkJCUFUOTFfU01DX0RCV18zMgkJCSgyIDw8IDEyKQotI2RlZmluZQkJQVQ5MV9TTUNfVERGCQkoMHhmIDw8IDE2KQkJCS8qIERhdGEgRmxvYXQgVGltZS4gKi8KLSNkZWZpbmUJCQlBVDkxX1NNQ19UREZfKHgpCQkoKHgpIDw8IDE2KQotI2RlZmluZQkJQVQ5MV9TTUNfVERGTU9ERQkoMSA8PCAyMCkJCQkvKiBUREYgT3B0aW1pemF0aW9uIC0gRW5hYmxlZCAqLwotI2RlZmluZQkJQVQ5MV9TTUNfUE1FTgkJKDEgPDwgMjQpCQkJLyogUGFnZSBNb2RlIEVuYWJsZWQgKi8KLSNkZWZpbmUJCUFUOTFfU01DX1BTCQkoMyA8PCAyOCkJCQkvKiBQYWdlIFNpemUgKi8KLSNkZWZpbmUJCQlBVDkxX1NNQ19QU180CQkJKDAgPDwgMjgpCi0jZGVmaW5lCQkJQVQ5MV9TTUNfUFNfOAkJCSgxIDw8IDI4KQotI2RlZmluZQkJCUFUOTFfU01DX1BTXzE2CQkJKDIgPDwgMjgpCi0jZGVmaW5lCQkJQVQ5MV9TTUNfUFNfMzIJCQkoMyA8PCAyOCkKLQotI2lmIGRlZmluZWQoQVQ5MV9TTUMxKQkJLyogVGhlIEFUOTFTQU05MjYzIGhhcyAyIFN0YXRpYyBNZW1vcnkgY29udG9sbGVycyAqLwotI2RlZmluZSBBVDkxX1NNQzFfU0VUVVAobikJKEFUOTFfU01DMSArIDB4MDAgKyAoKG4pKjB4MTApKQkvKiBTZXR1cCBSZWdpc3RlciBmb3IgQ1MgbiAqLwotI2RlZmluZSBBVDkxX1NNQzFfUFVMU0UobikJKEFUOTFfU01DMSArIDB4MDQgKyAoKG4pKjB4MTApKQkvKiBQdWxzZSBSZWdpc3RlciBmb3IgQ1MgbiAqLwotI2RlZmluZSBBVDkxX1NNQzFfQ1lDTEUobikJKEFUOTFfU01DMSArIDB4MDggKyAoKG4pKjB4MTApKQkvKiBDeWNsZSBSZWdpc3RlciBmb3IgQ1MgbiAqLwotI2RlZmluZSBBVDkxX1NNQzFfTU9ERShuKQkoQVQ5MV9TTUMxICsgMHgwYyArICgobikqMHgxMCkpCS8qIE1vZGUgUmVnaXN0ZXIgZm9yIENTIG4gKi8KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTlfc2RyYW1jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05X3NkcmFtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjhiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05X3NkcmFtYy5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05X3NkcmFtYy5oCisgKgorICogU0RSQU0gQ29udHJvbGxlcnMgKFNEUkFNQykgLSBTeXN0ZW0gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzLgorICogQmFzZWQgb24gQVQ5MVNBTTkyNjEgZGF0YXNoZWV0IHJldmlzaW9uIEQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEFUOTFTQU05X1NEUkFNQ19ICisjZGVmaW5lIEFUOTFTQU05X1NEUkFNQ19ICisKKy8qIFNEUkFNIENvbnRyb2xsZXIgKFNEUkFNQykgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFUOTFfU0RSQU1DX01SCQkoQVQ5MV9TRFJBTUMgKyAweDAwKQkvKiBTRFJBTSBDb250cm9sbGVyIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU0RSQU1DX01PREUJKDB4ZiA8PCAwKQkJLyogQ29tbWFuZCBNb2RlICovCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTU9ERV9OT1JNQUwJCTAKKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NT0RFX05PUAkJMQorI2RlZmluZQkJCUFUOTFfU0RSQU1DX01PREVfUFJFQ0hBUkdFCTIKKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NT0RFX0xNUgkJMworI2RlZmluZQkJCUFUOTFfU0RSQU1DX01PREVfUkVGUkVTSAk0CisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTU9ERV9FWFRfTE1SCTUKKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NT0RFX0RFRVAJCTYKKworI2RlZmluZSBBVDkxX1NEUkFNQ19UUgkJKEFUOTFfU0RSQU1DICsgMHgwNCkJLyogU0RSQU0gQ29udHJvbGxlciBSZWZyZXNoIFRpbWVyIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19DT1VOVAkoMHhmZmYgPDwgMCkJCS8qIFJlZnJlc2ggVGltZXIgQ291bnRlciAqLworCisjZGVmaW5lIEFUOTFfU0RSQU1DX0NSCQkoQVQ5MV9TRFJBTUMgKyAweDA4KQkvKiBTRFJBTSBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU0RSQU1DX05DCQkoMyA8PCAwKQkJLyogTnVtYmVyIG9mIENvbHVtbiBCaXRzICovCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkNfOAkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfU0RSQU1DX05DXzkJKDEgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19OQ18xMAkoMiA8PCAwKQorI2RlZmluZQkJCUFUOTFfU0RSQU1DX05DXzExCSgzIDw8IDApCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19OUgkJKDMgPDwgMikJCS8qIE51bWJlciBvZiBSb3cgQml0cyAqLworI2RlZmluZQkJCUFUOTFfU0RSQU1DX05SXzExCSgwIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTlJfMTIJKDEgPDwgMikKKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19OUl8xMwkoMiA8PCAyKQorI2RlZmluZQkJQVQ5MV9TRFJBTUNfTkIJCSgxIDw8IDQpCQkvKiBOdW1iZXIgb2YgQmFua3MgKi8KKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19OQl8yCSgwIDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkJfNAkoMSA8PCA0KQorI2RlZmluZQkJQVQ5MV9TRFJBTUNfQ0FTCQkoMyA8PCA1KQkJLyogQ0FTIExhdGVuY3kgKi8KKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19DQVNfMQkoMSA8PCA1KQorI2RlZmluZQkJCUFUOTFfU0RSQU1DX0NBU18yCSgyIDw8IDUpCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfQ0FTXzMJKDMgPDwgNSkKKyNkZWZpbmUJCUFUOTFfU0RSQU1DX0RCVwkJKDEgPDwgNykJCS8qIERhdGEgQnVzIFdpZHRoICovCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfREJXXzMyCSgwIDw8IDcpCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfREJXXzE2CSgxIDw8IDcpCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19UV1IJCSgweGYgPDwgIDgpCQkvKiBXcml0ZSBSZWNvdmVyeSBEZWxheSAqLworI2RlZmluZQkJQVQ5MV9TRFJBTUNfVFJDCQkoMHhmIDw8IDEyKQkJLyogUm93IEN5Y2xlIERlbGF5ICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19UUlAJCSgweGYgPDwgMTYpCQkvKiBSb3cgUHJlY2hhcmdlIERlbGF5ICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19UUkNECSgweGYgPDwgMjApCQkvKiBSb3cgdG8gQ29sdW1uIERlbGF5ICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19UUkFTCSgweGYgPDwgMjQpCQkvKiBBY3RpdmUgdG8gUHJlY2hhcmdlIERlbGF5ICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19UWFNSCSgweGYgPDwgMjgpCQkvKiBFeGl0IFNlbGYgUmVmcmVzaCB0byBBY3RpdmUgRGVsYXkgKi8KKworI2RlZmluZSBBVDkxX1NEUkFNQ19MUFIJCShBVDkxX1NEUkFNQyArIDB4MTApCS8qIFNEUkFNIENvbnRyb2xsZXIgTG93IFBvd2VyIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19MUENCCQkoMyA8PCAwKQkvKiBMb3ctcG93ZXIgQ29uZmlndXJhdGlvbnMgKi8KKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19MUENCX0RJU0FCTEUJCTAKKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19MUENCX1NFTEZfUkVGUkVTSAkJMQorI2RlZmluZQkJCUFUOTFfU0RSQU1DX0xQQ0JfUE9XRVJfRE9XTgkJMgorI2RlZmluZQkJCUFUOTFfU0RSQU1DX0xQQ0JfREVFUF9QT1dFUl9ET1dOCTMKKyNkZWZpbmUJCUFUOTFfU0RSQU1DX1BBU1IJCSg3IDw8IDQpCS8qIFBhcnRpYWwgQXJyYXkgU2VsZiBSZWZyZXNoICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19UQ1NSCQkoMyA8PCA4KQkvKiBUZW1wZXJhdHVyZSBDb21wZW5zYXRlZCBTZWxmIFJlZnJlc2ggKi8KKyNkZWZpbmUJCUFUOTFfU0RSQU1DX0RTCQkJKDMgPDwgMTApCS8qIERyaXZlIFN0cmVuZ3RoICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19USU1FT1VUCQkoMyA8PCAxMikJLyogVGltZSB0byBkZWZpbmUgd2hlbiBMb3cgUG93ZXIgTW9kZSBpcyBlbmFibGVkICovCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfVElNRU9VVF8wX0NMS19DWUNMRVMJKDAgPDwgMTIpCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfVElNRU9VVF82NF9DTEtfQ1lDTEVTCSgxIDw8IDEyKQorI2RlZmluZQkJCUFUOTFfU0RSQU1DX1RJTUVPVVRfMTI4X0NMS19DWUNMRVMJKDIgPDwgMTIpCisKKyNkZWZpbmUgQVQ5MV9TRFJBTUNfSUVSCQkoQVQ5MV9TRFJBTUMgKyAweDE0KQkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9TRFJBTUNfSURSCQkoQVQ5MV9TRFJBTUMgKyAweDE4KQkvKiBTRFJBTSBDb250cm9sbGVyIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfU0RSQU1DX0lNUgkJKEFUOTFfU0RSQU1DICsgMHgxQykJLyogU0RSQU0gQ29udHJvbGxlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1NEUkFNQ19JU1IJCShBVDkxX1NEUkFNQyArIDB4MjApCS8qIFNEUkFNIENvbnRyb2xsZXIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9TRFJBTUNfUkVTCQkoMSA8PCAwKQkJLyogUmVmcmVzaCBFcnJvciBTdGF0dXMgKi8KKworI2RlZmluZSBBVDkxX1NEUkFNQ19NRFIJCShBVDkxX1NEUkFNQyArIDB4MjQpCS8qIFNEUkFNIE1lbW9yeSBEZXZpY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfU0RSQU1DX01ECQkoMyA8PCAwKQkJLyogTWVtb3J5IERldmljZSBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTURfU0RSQU0JCTAKKyNkZWZpbmUJCQlBVDkxX1NEUkFNQ19NRF9MT1dfUE9XRVJfU0RSQU0JMQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOV9zbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTlfc21jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0OWVlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTlfc21jLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTlfc21jLmgKKyAqCisgKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXJzIChTTUMpIC0gU3lzdGVtIHBlcmlwaGVyYWxzIHJlZ2lzdGVycy4KKyAqIEJhc2VkIG9uIEFUOTFTQU05MjYxIGRhdGFzaGVldCByZXZpc2lvbiBELgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBVDkxU0FNOV9TTUNfSAorI2RlZmluZSBBVDkxU0FNOV9TTUNfSAorCisjZGVmaW5lIEFUOTFfU01DX1NFVFVQKG4pCShBVDkxX1NNQyArIDB4MDAgKyAoKG4pKjB4MTApKQkvKiBTZXR1cCBSZWdpc3RlciBmb3IgQ1MgbiAqLworI2RlZmluZQkJQVQ5MV9TTUNfTldFU0VUVVAJKDB4M2YgPDwgMCkJCQkvKiBOV0UgU2V0dXAgTGVuZ3RoICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfTldFU0VUVVBfKHgpCSgoeCkgPDwgMCkKKyNkZWZpbmUJCUFUOTFfU01DX05DU19XUlNFVFVQCSgweDNmIDw8IDgpCQkJLyogTkNTIFNldHVwIExlbmd0aCBpbiBXcml0ZSBBY2Nlc3MgKi8KKyNkZWZpbmUJCQlBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oeCkJKCh4KSA8PCA4KQorI2RlZmluZQkJQVQ5MV9TTUNfTlJEU0VUVVAJKDB4M2YgPDwgMTYpCQkJLyogTlJEIFNldHVwIExlbmd0aCAqLworI2RlZmluZQkJCUFUOTFfU01DX05SRFNFVFVQXyh4KQkoKHgpIDw8IDE2KQorI2RlZmluZQkJQVQ5MV9TTUNfTkNTX1JEU0VUVVAJKDB4M2YgPDwgMjQpCQkJLyogTkNTIFNldHVwIExlbmd0aCBpbiBSZWFkIEFjY2VzcyAqLworI2RlZmluZQkJCUFUOTFfU01DX05DU19SRFNFVFVQXyh4KQkoKHgpIDw8IDI0KQorCisjZGVmaW5lIEFUOTFfU01DX1BVTFNFKG4pCShBVDkxX1NNQyArIDB4MDQgKyAoKG4pKjB4MTApKQkvKiBQdWxzZSBSZWdpc3RlciBmb3IgQ1MgbiAqLworI2RlZmluZQkJQVQ5MV9TTUNfTldFUFVMU0UJKDB4N2YgPDwgIDApCQkJLyogTldFIFB1bHNlIExlbmd0aCAqLworI2RlZmluZQkJCUFUOTFfU01DX05XRVBVTFNFXyh4KQkoKHgpIDw8IDApCisjZGVmaW5lCQlBVDkxX1NNQ19OQ1NfV1JQVUxTRQkoMHg3ZiA8PCAgOCkJCQkvKiBOQ1MgUHVsc2UgTGVuZ3RoIGluIFdyaXRlIEFjY2VzcyAqLworI2RlZmluZQkJCUFUOTFfU01DX05DU19XUlBVTFNFXyh4KSgoeCkgPDwgOCkKKyNkZWZpbmUJCUFUOTFfU01DX05SRFBVTFNFCSgweDdmIDw8IDE2KQkJCS8qIE5SRCBQdWxzZSBMZW5ndGggKi8KKyNkZWZpbmUJCQlBVDkxX1NNQ19OUkRQVUxTRV8oeCkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCUFUOTFfU01DX05DU19SRFBVTFNFCSgweDdmIDw8IDI0KQkJCS8qIE5DUyBQdWxzZSBMZW5ndGggaW4gUmVhZCBBY2Nlc3MgKi8KKyNkZWZpbmUJCQlBVDkxX1NNQ19OQ1NfUkRQVUxTRV8oeCkoKHgpIDw8IDI0KQorCisjZGVmaW5lIEFUOTFfU01DX0NZQ0xFKG4pCShBVDkxX1NNQyArIDB4MDggKyAoKG4pKjB4MTApKQkvKiBDeWNsZSBSZWdpc3RlciBmb3IgQ1MgbiAqLworI2RlZmluZQkJQVQ5MV9TTUNfTldFQ1lDTEUJKDB4MWZmIDw8IDAgKQkJCS8qIFRvdGFsIFdyaXRlIEN5Y2xlIExlbmd0aCAqLworI2RlZmluZQkJCUFUOTFfU01DX05XRUNZQ0xFXyh4KQkoKHgpIDw8IDApCisjZGVmaW5lCQlBVDkxX1NNQ19OUkRDWUNMRQkoMHgxZmYgPDwgMTYpCQkJLyogVG90YWwgUmVhZCBDeWNsZSBMZW5ndGggKi8KKyNkZWZpbmUJCQlBVDkxX1NNQ19OUkRDWUNMRV8oeCkJKCh4KSA8PCAxNikKKworI2RlZmluZSBBVDkxX1NNQ19NT0RFKG4pCShBVDkxX1NNQyArIDB4MGMgKyAoKG4pKjB4MTApKQkvKiBNb2RlIFJlZ2lzdGVyIGZvciBDUyBuICovCisjZGVmaW5lCQlBVDkxX1NNQ19SRUFETU9ERQkoMSA8PCAgMCkJCQkvKiBSZWFkIE1vZGUgKi8KKyNkZWZpbmUJCUFUOTFfU01DX1dSSVRFTU9ERQkoMSA8PCAgMSkJCQkvKiBXcml0ZSBNb2RlICovCisjZGVmaW5lCQlBVDkxX1NNQ19FWE5XTU9ERQkoMyA8PCAgNCkJCQkvKiBOV0FJVCBNb2RlICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfU01DX0VYTldNT0RFX0ZST1pFTgkoMiA8PCA0KQorI2RlZmluZQkJCUFUOTFfU01DX0VYTldNT0RFX1JFQURZCQkoMyA8PCA0KQorI2RlZmluZQkJQVQ5MV9TTUNfQkFUCQkoMSA8PCAgOCkJCQkvKiBCeXRlIEFjY2VzcyBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfQkFUX1NFTEVDVAkJKDAgPDwgOCkKKyNkZWZpbmUJCQlBVDkxX1NNQ19CQVRfV1JJVEUJCSgxIDw8IDgpCisjZGVmaW5lCQlBVDkxX1NNQ19EQlcJCSgzIDw8IDEyKQkJCS8qIERhdGEgQnVzIFdpZHRoICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfREJXXzgJCQkoMCA8PCAxMikKKyNkZWZpbmUJCQlBVDkxX1NNQ19EQldfMTYJCQkoMSA8PCAxMikKKyNkZWZpbmUJCQlBVDkxX1NNQ19EQldfMzIJCQkoMiA8PCAxMikKKyNkZWZpbmUJCUFUOTFfU01DX1RERgkJKDB4ZiA8PCAxNikJCQkvKiBEYXRhIEZsb2F0IFRpbWUuICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfVERGXyh4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUJCUFUOTFfU01DX1RERk1PREUJKDEgPDwgMjApCQkJLyogVERGIE9wdGltaXphdGlvbiAtIEVuYWJsZWQgKi8KKyNkZWZpbmUJCUFUOTFfU01DX1BNRU4JCSgxIDw8IDI0KQkJCS8qIFBhZ2UgTW9kZSBFbmFibGVkICovCisjZGVmaW5lCQlBVDkxX1NNQ19QUwkJKDMgPDwgMjgpCQkJLyogUGFnZSBTaXplICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfUFNfNAkJCSgwIDw8IDI4KQorI2RlZmluZQkJCUFUOTFfU01DX1BTXzgJCQkoMSA8PCAyOCkKKyNkZWZpbmUJCQlBVDkxX1NNQ19QU18xNgkJCSgyIDw8IDI4KQorI2RlZmluZQkJCUFUOTFfU01DX1BTXzMyCQkJKDMgPDwgMjgpCisKKyNpZiBkZWZpbmVkKEFUOTFfU01DMSkJCS8qIFRoZSBBVDkxU0FNOTI2MyBoYXMgMiBTdGF0aWMgTWVtb3J5IGNvbnRvbGxlcnMgKi8KKyNkZWZpbmUgQVQ5MV9TTUMxX1NFVFVQKG4pCShBVDkxX1NNQzEgKyAweDAwICsgKChuKSoweDEwKSkJLyogU2V0dXAgUmVnaXN0ZXIgZm9yIENTIG4gKi8KKyNkZWZpbmUgQVQ5MV9TTUMxX1BVTFNFKG4pCShBVDkxX1NNQzEgKyAweDA0ICsgKChuKSoweDEwKSkJLyogUHVsc2UgUmVnaXN0ZXIgZm9yIENTIG4gKi8KKyNkZWZpbmUgQVQ5MV9TTUMxX0NZQ0xFKG4pCShBVDkxX1NNQzEgKyAweDA4ICsgKChuKSoweDEwKSkJLyogQ3ljbGUgUmVnaXN0ZXIgZm9yIENTIG4gKi8KKyNkZWZpbmUgQVQ5MV9TTUMxX01PREUobikJKEFUOTFfU01DMSArIDB4MGMgKyAoKG4pKjB4MTApKQkvKiBNb2RlIFJlZ2lzdGVyIGZvciBDUyBuICovCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2dwaW8uaAppbmRleCA5YjE4NjRiLi4xODZlN2M3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9ncGlvLmgKQEAgLTEwMSwzMCArMTAxLDE3IEBACiAKIC8qIG5ldyBnZW5lcmljIEdQSU8gQVBJIC0gc2VlIERvY3VtZW50YXRpb24vZ3Bpby50eHQgKi8KIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCWlmIChncGlvID4gRVA5M1hYX0dQSU9fTElORV9NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOwotfQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KIAotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotfQotCi1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1pbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+IC8qIGNhbnNsZWVwIHdyYXBwZXJzICovCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAogCiAvKgogICogTWFwIEdQSU8gQTAuLkE3ICAoMC4uNykgIHRvIGlycSA2NC4uNzEsCiAgKiAgICAgICAgICBCMC4uQjcgICg3Li4xNSkgdG8gaXJxIDcyLi43OSwgYW5kCiAgKiAgICAgICAgICBGMC4uRjcgKDE2Li4yNCkgdG8gaXJxIDgwLi44Ny4KICAqLwotCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQogewogCWlmIChncGlvIDw9IEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvYWRtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9hZG1hLmgKaW5kZXggZWZkOWE1ZS4uOTBkMTRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9hZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9hZG1hLmgKQEAgLTQ1NCwxMSArNDU0LDYgQEAKIAlfX3Jhd193cml0ZWwoYWRtYV9hY2NyLCBBRE1BX0FDQ1IoY2hhbikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9wX2NoYW5faWRsZShpbnQgYnVzeSwgc3RydWN0IGlvcF9hZG1hX2NoYW4gKmNoYW4pCi17Ci0JZG8geyB9IHdoaWxlICgwKTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgaW9wX2NoYW5fZ2V0X3N0YXR1cyhzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqY2hhbikKIHsKIAlyZXR1cm4gX19yYXdfcmVhZGwoQURNQV9BQ1NSKGNoYW4pKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9kZXZpY2VzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZGV2aWNlcy5oCmluZGV4IGIwMzY0ZGMuLjdhZDJjNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2RldmljZXMuaApAQCAtMTgsNiArMTgsMTEgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBrczg2OTVfYWRkX2RldmljZV9sYW4odm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQga3M4Njk1X2FkZF9kZXZpY2VfaHBuYSh2b2lkKTsKIAorIC8qIExFRHMgKi8KK2V4dGVybiBzaG9ydCBrczg2OTVfbGVkc19jcHU7CitleHRlcm4gc2hvcnQga3M4Njk1X2xlZHNfdGltZXI7CitleHRlcm4gdm9pZCBfX2luaXQga3M4Njk1X2luaXRfbGVkcyh1OCBjcHVfbGVkLCB1OCB0aW1lcl9sZWQpOworCiAgLyogUENJICovCiAjZGVmaW5lIEtTODY5NV9NT0RFX1BDSQkJMAogI2RlZmluZSBLUzg2OTVfTU9ERV9NSU5JUENJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9ib2FyZC1teDMxYWRzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvYm9hcmQtbXgzMWFkcy5oCmluZGV4IGJlMjliODMuLjg1OTAxMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9ib2FyZC1teDMxYWRzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL2JvYXJkLW14MzFhZHMuaApAQCAtMTEsMTA3ICsxMSw3NyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxQURTX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxQURTX0hfXwogCi0vKiEKLSAqIEBuYW1lIFBCQyBDb250cm9sbGVyIHBhcmFtZXRlcnMKLSAqLwotLyohIEB7ICovCi0vKiEKLSAqIEJhc2UgYWRkcmVzcyBvZiBQQkMgY29udHJvbGxlcgotICovCisvKiBCYXNlIGFkZHJlc3Mgb2YgUEJDIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgUEJDX0JBU0VfQUREUkVTUyAgICAgICAgSU9fQUREUkVTUyhDUzRfQkFTRV9BRERSKQogLyogT2Zmc2V0cyBmb3IgdGhlIFBCQyBDb250cm9sbGVyIHJlZ2lzdGVyICovCi0vKiEKLSAqIFBCQyBCb2FyZCBzdGF0dXMgcmVnaXN0ZXIgb2Zmc2V0Ci0gKi8KKworLyogUEJDIEJvYXJkIHN0YXR1cyByZWdpc3RlciBvZmZzZXQgKi8KICNkZWZpbmUgUEJDX0JTVEFUICAgICAgICAgICAgICAgMHgwMDAwMDIKLS8qIQotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMSBzZXQgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAxIHNldCBhZGRyZXNzICovCiAjZGVmaW5lIFBCQ19CQ1RSTDFfU0VUICAgICAgICAgIDB4MDAwMDA0Ci0vKiEKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDEgY2xlYXIgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAxIGNsZWFyIGFkZHJlc3MgKi8KICNkZWZpbmUgUEJDX0JDVFJMMV9DTEVBUiAgICAgICAgMHgwMDAwMDYKLS8qIQotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMiBzZXQgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAyIHNldCBhZGRyZXNzICovCiAjZGVmaW5lIFBCQ19CQ1RSTDJfU0VUICAgICAgICAgIDB4MDAwMDA4Ci0vKiEKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDIgY2xlYXIgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAyIGNsZWFyIGFkZHJlc3MgKi8KICNkZWZpbmUgUEJDX0JDVFJMMl9DTEVBUiAgICAgICAgMHgwMDAwMEEKLS8qIQotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgMyBzZXQgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAzIHNldCBhZGRyZXNzICovCiAjZGVmaW5lIFBCQ19CQ1RSTDNfU0VUICAgICAgICAgIDB4MDAwMDBDCi0vKiEKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDMgY2xlYXIgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciAzIGNsZWFyIGFkZHJlc3MgKi8KICNkZWZpbmUgUEJDX0JDVFJMM19DTEVBUiAgICAgICAgMHgwMDAwMEUKLS8qIQotICogUEJDIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXIgNCBzZXQgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciA0IHNldCBhZGRyZXNzICovCiAjZGVmaW5lIFBCQ19CQ1RSTDRfU0VUICAgICAgICAgIDB4MDAwMDEwCi0vKiEKLSAqIFBCQyBCb2FyZCBjb250cm9sIHJlZ2lzdGVyIDQgY2xlYXIgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgQm9hcmQgY29udHJvbCByZWdpc3RlciA0IGNsZWFyIGFkZHJlc3MgKi8KICNkZWZpbmUgUEJDX0JDVFJMNF9DTEVBUiAgICAgICAgMHgwMDAwMTIKLS8qIQotICogUEJDIEJvYXJkIHN0YXR1cyByZWdpc3RlciAxLgotICovCisKKy8qIFBCQyBCb2FyZCBzdGF0dXMgcmVnaXN0ZXIgMSAqLwogI2RlZmluZSBQQkNfQlNUQVQxICAgICAgICAgICAgICAweDAwMDAxNAotLyohCi0gKiBQQkMgQm9hcmQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KLSAqLworCisvKiBQQkMgQm9hcmQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBQQkNfSU5UU1RBVFVTICAgICAgICAgICAweDAwMDAxNgotLyohCi0gKiBQQkMgQm9hcmQgaW50ZXJydXB0IGN1cnJlbnQgc3RhdHVzIHJlZ2lzdGVyLgotICovCisKKy8qIFBCQyBCb2FyZCBpbnRlcnJ1cHQgY3VycmVudCBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUEJDX0lOVENVUlJfU1RBVFVTICAgICAgMHgwMDAwMTgKLS8qIQotICogUEJDIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyIHNldCBhZGRyZXNzLgotICovCisKKy8qIFBCQyBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciBzZXQgYWRkcmVzcyAqLwogI2RlZmluZSBQQkNfSU5UTUFTS19TRVQgICAgICAgICAweDAwMDAxQQotLyohCi0gKiBQQkMgSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgY2xlYXIgYWRkcmVzcy4KLSAqLworCisvKiBQQkMgSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgY2xlYXIgYWRkcmVzcyAqLwogI2RlZmluZSBQQkNfSU5UTUFTS19DTEVBUiAgICAgICAweDAwMDAxQwogCi0vKiEKLSAqIEV4dGVybmFsIFVBUlQgQS4KLSAqLworLyogRXh0ZXJuYWwgVUFSVCBBICovCiAjZGVmaW5lIFBCQ19TQzE2QzY1Ml9VQVJUQSAgICAgIDB4MDEwMDAwCi0vKiEKLSAqIEV4dGVybmFsIFVBUlQgQi4KLSAqLworCisvKiBFeHRlcm5hbCBVQVJUIEIgKi8KICNkZWZpbmUgUEJDX1NDMTZDNjUyX1VBUlRCICAgICAgMHgwMTAwMTAKLS8qIQotICogRXRoZXJuZXQgQ29udHJvbGxlciBJTyBiYXNlIGFkZHJlc3MuCi0gKi8KKworLyogRXRoZXJuZXQgQ29udHJvbGxlciBJTyBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgUEJDX0NTODkwMEFfSU9CQVNFICAgICAgMHgwMjAwMDAKLS8qIQotICogRXRoZXJuZXQgQ29udHJvbGxlciBNZW1vcnkgYmFzZSBhZGRyZXNzLgotICovCisKKy8qIEV0aGVybmV0IENvbnRyb2xsZXIgTWVtb3J5IGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBQQkNfQ1M4OTAwQV9NRU1CQVNFICAgICAweDAyMTAwMAotLyohCi0gKiBFdGhlcm5ldCBDb250cm9sbGVyIERNQSBiYXNlIGFkZHJlc3MuCi0gKi8KKworLyogRXRoZXJuZXQgQ29udHJvbGxlciBETUEgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIFBCQ19DUzg5MDBBX0RNQUJBU0UgICAgIDB4MDIyMDAwCi0vKiEKLSAqIEV4dGVybmFsIGNoaXAgc2VsZWN0IDAuCi0gKi8KKworLyogRXh0ZXJuYWwgY2hpcCBzZWxlY3QgMCAqLwogI2RlZmluZSBQQkNfWENTMCAgICAgICAgICAgICAgICAweDA0MDAwMAotLyohCi0gKiBMQ0QgRGlzcGxheSBlbmFibGUuCi0gKi8KKworLyogTENEIERpc3BsYXkgZW5hYmxlICovCiAjZGVmaW5lIFBCQ19MQ0RfRU5fQiAgICAgICAgICAgIDB4MDYwMDAwCi0vKiEKLSAqIENvZGUgdGVzdCBkZWJ1ZyBlbmFibGUuCi0gKi8KKworLyogQ29kZSB0ZXN0IGRlYnVnIGVuYWJsZSAqLwogI2RlZmluZSBQQkNfQ09ERV9CICAgICAgICAgICAgICAweDA3MDAwMAotLyohCi0gKiBQU1JBTSBtZW1vcnkgc2VsZWN0LgotICovCisKKy8qIFBTUkFNIG1lbW9yeSBzZWxlY3QgKi8KICNkZWZpbmUgUEJDX1BTUkFNX0IgICAgICAgICAgICAgMHg1MDAwMDAwCiAKICNkZWZpbmUgUEJDX0lOVFNUQVRVU19SRUcJKFBCQ19JTlRTVEFUVVMgKyBQQkNfQkFTRV9BRERSRVNTKQpAQCAtMTM5LDQgKzEwOSw0IEBACiAKICNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKIAotI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFBRFNfSF9fICovCisjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMUFEU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9kbWEuaAppbmRleCA2NWU2MzlkLi5jODIyZDU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL2RtYS5oCkBAIC0xMSwxMSArMTEsNCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19ETUFfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0RNQV9IX18KIAotLyohCi0gKiBAZmlsZSBkbWEuaAotICogQGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyBVbmlmaWVkIERNQSBBUEkgZm9yIGFsbCBNWEMgcGxhdGZvcm1zLgotICogVGhlIEFQSSBpcyBwbGF0Zm9ybSBpbmRlcGVuZGVudC4KLSAqCi0gKiBAaW5ncm91cCBTRE1BCi0gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvaGFyZHdhcmUuaAppbmRleCAzYzA5YjkyLi5lODdmZjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvaGFyZHdhcmUuaApAQCAtOCw0NSArOCwyNCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotLyohCi0gKiBAZmlsZSBoYXJkd2FyZS5oCi0gKiBAYnJpZWYgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBvZiB0aGUgYm9hcmQuCi0gKgotICogQGluZ3JvdXAgU3lzdGVtCi0gKi8KICNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXwogCiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKLSNpbmNsdWRlIDxhc20vYXJjaC9teDMxLmg+CisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzCisjIGluY2x1ZGUgPGFzbS9hcmNoL214MzEuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXhjLmg+CiAKLSNkZWZpbmUgTVhDX01BWF9HUElPX0xJTkVTICAgICAgKEdQSU9fTlVNX1BJTiAqIEdQSU9fUE9SVF9OVU0pCi0KIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEJvYXJkIHNwZWNpZmljIGRlZmluZXMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi0jZGVmaW5lIE1YQ19FWFBfSU9fQkFTRSAgICAgICAgIChNWENfR1BJT19JTlRfQkFTRSArIE1YQ19NQVhfR1BJT19MSU5FUykKLQotI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLW14MzFhZHMuaD4KLQotI2lmbmRlZiBNWENfTUFYX0VYUF9JT19MSU5FUwotI2RlZmluZSBNWENfTUFYX0VYUF9JT19MSU5FUyAwCisjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEUworIyBpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC1teDMxYWRzLmg+CiAjZW5kaWYKIAotI2RlZmluZSBNWENfTUFYX1ZJUlRVQUxfSU5UUwkxNgotI2RlZmluZSBNWENfVklSVFVBTF9JTlRTX0JBU0UJKE1YQ19FWFBfSU9fQkFTRSArIE1YQ19NQVhfRVhQX0lPX0xJTkVTKQotI2RlZmluZSBNWENfU0RJTzFfQ0FSRF9JUlEJTVhDX1ZJUlRVQUxfSU5UU19CQVNFCi0jZGVmaW5lIE1YQ19TRElPMl9DQVJEX0lSUQkoTVhDX1ZJUlRVQUxfSU5UU19CQVNFICsgMSkKLSNkZWZpbmUgTVhDX1NESU8zX0NBUkRfSVJRCShNWENfVklSVFVBTF9JTlRTX0JBU0UgKyAyKQotCi0jZGVmaW5lIE1YQ19NQVhfSU5UUyAgICAgICAgICAgIChNWENfTUFYX0lOVF9MSU5FUyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVhDX01BWF9HUElPX0xJTkVTICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWENfTUFYX0VYUF9JT19MSU5FUyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVhDX01BWF9WSVJUVUFMX0lOVFMpCi0KLSNlbmRpZgkJCQkvKiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL2lvLmgKaW5kZXggY2Y2YzgzYS4uNjViNjgxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL2lvLmgKQEAgLTgsMjQgKzgsMTMgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLS8qIQotICogQGZpbGUgaW8uaAotICogQGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyBzb21lIG1lbW9yeSBtYXBwaW5nIG1hY3Jvcy4KLSAqIEBub3RlIFRoZXJlIGlzIG5vIHJlYWwgSVNBIG9yIFBDSSBidXNlcy4gQnV0IGhhdmUgdG8gZGVmaW5lIHRoZXNlIG1hY3JvcwotICogZm9yIHNvbWUgZHJpdmVycyB0byBjb21waWxlLgotICoKLSAqIEBpbmdyb3VwIFN5c3RlbQotICovCi0KICNpZm5kZWYgX19BU01fQVJDSF9NWENfSU9fSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0lPX0hfXwogCi0vKiEgQWxsb3cgSU8gc3BhY2UgdG8gYmUgYW55d2hlcmUgaW4gdGhlIG1lbW9yeSAqLworLyogQWxsb3cgSU8gc3BhY2UgdG8gYmUgYW55d2hlcmUgaW4gdGhlIG1lbW9yeSAqLwogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCiAKLS8qIQotICogaW8gYWRkcmVzcyBtYXBwaW5nIG1hY3JvCi0gKi8KKy8qIGlvIGFkZHJlc3MgbWFwcGluZyBtYWNybyAqLwogI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoYSkpCiAKICNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvaXJxcy5oCmluZGV4IGU0Njg2YzYuLmIyYzUyMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL2lycXMuaApAQCAtMTMsMjYgKzEzLDE3IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAotLyohCi0gKiBAZmlsZSBpcnFzLmgKLSAqIEBicmllZiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIG5vcm1hbCBpbnRlcnJ1cHRzIGFuZCBmYXN0IGludGVycnVwdHMKLSAqCi0gKiBAaW5ncm91cCBJbnRlcnJ1cHQKLSAqLwotCiAjZGVmaW5lIE1YQ19JUlFfVE9fRVhQSU8oaXJxKQkoKGlycSkgLSBNWENfRVhQX0lPX0JBU0UpCiAKICNkZWZpbmUgTVhDX0lSUV9UT19HUElPKGlycSkJKChpcnEpIC0gTVhDX0dQSU9fSU5UX0JBU0UpCiAjZGVmaW5lIE1YQ19HUElPX1RPX0lSUSh4KQkoTVhDX0dQSU9fSU5UX0JBU0UgKyB4KQogCi0vKiEKLSAqIE51bWJlciBvZiBub3JtYWwgaW50ZXJydXB0cwotICovCi0jZGVmaW5lIE5SX0lSUVMJCU1YQ19NQVhfSU5UUworLyogTnVtYmVyIG9mIG5vcm1hbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIE5SX0lSUVMJCShNWENfTUFYX0lOVF9MSU5FUyArIFwKKwkJCU1YQ19NQVhfR1BJT19MSU5FUyArIFwKKwkJCU1YQ19NQVhfVklSVFVBTF9JTlRTKQogCi0vKiEKLSAqIE51bWJlciBvZiBmYXN0IGludGVycnVwdHMKLSAqLworLyogTnVtYmVyIG9mIGZhc3QgaW50ZXJydXB0cyAqLwogI2RlZmluZSBOUl9GSVFTCQlNWENfTUFYX0lOVFMKIAotI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfTVhDX0lSUVNfSF9fICovCisjZW5kaWYgLyogX19BU01fQVJDSF9NWENfSVJRU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9tZW1vcnkuaAppbmRleCBjODlhYWM4Li4wNTlmODMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL21lbW9yeS5oCkBAIC0xMywyNCArMTMsMTcgQEAKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCi0vKiEKLSAqIEBmaWxlIG1lbW9yeS5oCi0gKiBAYnJpZWYgVGhpcyBmaWxlIGNvbnRhaW5zIG1hY3JvcyBuZWVkZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBhbmQgZHJpdmVycy4KLSAqCi0gKiBAaW5ncm91cCBNZW1vcnkKLSAqLwotCi0vKiEKKy8qCiAgKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwogICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuIGFkZHJlc3MKICAqIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIoKQogICovCiAjZGVmaW5lIF9fdmlydF90b19idXMoYSkJX192aXJ0X3RvX3BoeXMoYSkKIAotLyohCisvKgogICogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zIHRvIGFuIGFkZHJlc3MgdGhhdCB0aGUKICAqIGtlcm5lbCBjYW4gdXNlLgogICovCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoYSkJX19waHlzX3RvX3ZpcnQoYSkKIAotI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfTVhDX01FTU9SWV9IX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19NRU1PUllfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvbXgzMS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL214MzEuaAppbmRleCA4NWM0OWM5Li4zNmExYWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvbXgzMS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9teDMxLmgKQEAgLTMxNyw2ICszMTcsOCBAQAogI2RlZmluZSBNWENfTUFYX0lOVF9MSU5FUwk2NAogCiAjZGVmaW5lIE1YQ19HUElPX0lOVF9CQVNFCU1YQ19NQVhfSU5UX0xJTkVTCisjZGVmaW5lIE1YQ19NQVhfR1BJT19MSU5FUyAgICAgIChHUElPX05VTV9QSU4gKiBHUElPX1BPUlRfTlVNKQorI2RlZmluZSBNWENfTUFYX1ZJUlRVQUxfSU5UUwkxNgogCiAvKiEKICAqIE51bWJlciBvZiBHUElPIHBvcnQgYXMgZGVmaW5lZCBpbiB0aGUgSUMgU3BlYwpAQCAtMzI5LDcgKzMzMSwzMyBAQAogCiAjZGVmaW5lIFBST0RfU0lHTkFUVVJFCQkweDEJLyogRm9yIE1YMzEgKi8KIAorLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDMxICovCisjZGVmaW5lIENISVBfUkVWXzFfMAkJMHgxMAorI2RlZmluZSBDSElQX1JFVl8xXzEJCTB4MTEKKyNkZWZpbmUgQ0hJUF9SRVZfMV8yCQkweDEyCisjZGVmaW5lIENISVBfUkVWXzFfMwkJMHgxMworI2RlZmluZSBDSElQX1JFVl8yXzAJCTB4MjAKKyNkZWZpbmUgQ0hJUF9SRVZfMl8xCQkweDIxCisjZGVmaW5lIENISVBfUkVWXzJfMgkJMHgyMgorI2RlZmluZSBDSElQX1JFVl8yXzMJCTB4MjMKKyNkZWZpbmUgQ0hJUF9SRVZfM18wCQkweDMwCisjZGVmaW5lIENISVBfUkVWXzNfMQkJMHgzMQorI2RlZmluZSBDSElQX1JFVl8zXzIJCTB4MzIKKwogI2RlZmluZSBTWVNURU1fUkVWX01JTgkJQ0hJUF9SRVZfMV8wCiAjZGVmaW5lIFNZU1RFTV9SRVZfTlVNCQkzCiAKLSNlbmRpZgkJCS8qICBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXyAqLworI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoX19NWENfQk9PVF9VTkNPTVBSRVNTKQorCisvKiB0aGlzIGlzIGEgaS5NWDMxIENQVSAqLworI2RlZmluZSBjcHVfaXNfbXgzMSgpCQkoMSkKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OworCitzdGF0aWMgaW5saW5lIGludCBteDMxX3JldmlzaW9uKHZvaWQpCit7CisJcmV0dXJuIHN5c3RlbV9yZXY7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL214Yy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL214Yy5oCmluZGV4IDA4MzdmMWYuLjE0NmQzZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9teGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvbXhjLmgKQEAgLTE1LDYgKzE1LDExIEBACiAjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKICNlbmRpZgogCisvKiBjbGVhbiB1cCBhbGwgdGhpbmdzIHRoYXQgYXJlIG5vdCB1c2VkICovCisjaWZuZGVmIENPTkZJR19BUkNIX01YMworIyBkZWZpbmUgY3B1X2lzX214MzEoKSAoMCkKKyNlbmRpZgorCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUFQgIFJlZ2lzdGVyIGRlZmluaXRpb25zICAgICAgICAgICAgICoKQEAgLTMxLDkgKzM2LDcgQEAKICNkZWZpbmUgTVhDX0dQVF9HUFRJQ1IyCQlJT19BRERSRVNTKEdQVDFfQkFTRV9BRERSICsgMHgyMCkKICNkZWZpbmUgTVhDX0dQVF9HUFRDTlQJCUlPX0FERFJFU1MoR1BUMV9CQVNFX0FERFIgKyAweDI0KQogCi0vKiEKLSAqIEdQVCBDb250cm9sIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotICovCisvKiBHUFQgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgR1BUQ1JfRk8zCQkJKDEgPDwgMzEpCiAjZGVmaW5lIEdQVENSX0ZPMgkJCSgxIDw8IDMwKQogI2RlZmluZSBHUFRDUl9GTzEJCQkoMSA8PCAyOSkKQEAgLTE0Niw0ICsxNDksNCBAQAogI2RlZmluZSBJSU1fUFJPRF9SRVZfU0gJCTMKICNkZWZpbmUgSUlNX1BST0RfUkVWX0xFTgk1CiAKLSNlbmRpZgkJCQkvKiAgX19BU01fQVJDSF9NWENfSF9fICovCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfTVhDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL3N5c3RlbS5oCmluZGV4IDEwOTk1NmIuLmJiZmMzNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvc3lzdGVtLmgKQEAgLTIxLDMwICsyMSwxNCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19TWVNURU1fSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX1NZU1RFTV9IX18KIAotLyohCi0gKiBAZmlsZSBzeXN0ZW0uaAotICogQGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyBpZGxlIGFuZCByZXNldCBmdW5jdGlvbnMuCi0gKgotICogQGluZ3JvdXAgU3lzdGVtCi0gKi8KLQotLyohCi0gKiBUaGlzIGZ1bmN0aW9uIHB1dHMgdGhlIENQVSBpbnRvIGlkbGUgbW9kZS4gSXQgaXMgY2FsbGVkIGJ5IGRlZmF1bHRfaWRsZSgpCi0gKiBpbiBwcm9jZXNzLmMgZmlsZS4KLSAqLwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCWNwdV9kb19pZGxlKCk7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgc3lzdGVtLiBJdCBpcyBjYWxsZWQgYnkgbWFjaGluZV9yZXN0YXJ0KCkuCi0gKgotICogQHBhcmFtICBtb2RlICAgICAgICAgaW5kaWNhdGVzIGRpZmZlcmVudCBraW5kcyBvZiByZXNldHMKLSAqLwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQogewogCWNwdV9yZXNldCgwKTsKIH0KIAotI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfTVhDX1NZU1RFTV9IX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19TWVNURU1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXhjL3ZtYWxsb2MuaAppbmRleCA4M2E3M2RhLi42MmQ5NzYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1teGMvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW14Yy92bWFsbG9jLmgKQEAgLTIwLDE3ICsyMCw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX1ZNQUxMT0NfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX1ZNQUxMT0NfSF9fCiAKLS8qIQotICogQGZpbGUgdm1hbGxvYy5oCi0gKgotICogQGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyBwbGF0Zm9ybSBzcGVjaWZpYyBtYWNyb3MgZm9yIHZtYWxsb2MuCi0gKgotICogQGluZ3JvdXAgU3lzdGVtCi0gKi8KLQotLyohCi0gKiB2bWFsbG9jIGVuZGluZyBhZGRyZXNzCi0gKi8KKy8qIHZtYWxsb2MgZW5kaW5nIGFkZHJlc3MgKi8KICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhGNDAwMDAwMAogCi0jZW5kaWYJCQkJLyogX19BU01fQVJDSF9NWENfVk1BTExPQ19IX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19WTUFMTE9DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2JvYXJkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvYm9hcmQuaAppbmRleCA3MTZmMzRmLi5lNTc0NDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvYm9hcmQuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvYm9hcmQuaAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTEzLDggKzEzLDMwIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jZGVmaW5lIGJvYXJkX2lzX2E5bTk3NTBkZXYoKQkobWFjaGluZV9pc19jYzlwOTM2MGRldigpKQorI2RlZmluZSBib2FyZF9pc19hOW05NzUwZGV2KCkJKDAJCQlcCisJCXx8IG1hY2hpbmVfaXNfY2M5cDkzNjBkZXYoKQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjOXA5NzUwZGV2KCkJCVwKKwkJKQogCi0jZGVmaW5lIGJvYXJkX2lzX2pzY2M5cDkzNjAoKQkobWFjaGluZV9pc19jYzlwOTM2MGpzKCkpCisjZGVmaW5lIGJvYXJkX2lzX2E5bXZhbGkoKQkoMAkJCVwKKwkJfHwgbWFjaGluZV9pc19jYzlwOTM2MHZhbCgpIAkJXAorCQl8fCBtYWNoaW5lX2lzX2NjOXA5NzUwdmFsKCkJCVwKKwkJKQorCisjZGVmaW5lIGJvYXJkX2lzX2pzY2M5cDkyMTAoKQkoMAkJCVwKKwkJfHwgbWFjaGluZV9pc19jYzlwOTIxMGpzKCkJCVwKKwkJKQorCisjZGVmaW5lIGJvYXJkX2lzX2pzY2M5cDkyMTUoKQkoMAkJCVwKKwkJfHwgbWFjaGluZV9pc19jYzlwOTIxNWpzKCkJCVwKKwkJKQorCisjZGVmaW5lIGJvYXJkX2lzX2pzY2M5cDkzNjAoKQkoMAkJCVwKKwkJfHwgbWFjaGluZV9pc19jYzlwOTM2MGpzKCkJCVwKKwkJKQorCisjZGVmaW5lIGJvYXJkX2lzX3VuY2JhcygpCSgwCQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjN3VjYW1yeSgpCQlcCisJCSkKIAogI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX0JPQVJEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2Nsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDNkM2EuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2Nsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2Nsb2NrLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX0NMT0NLX0gKLSNkZWZpbmUgX19BU01fQVJDSF9DTE9DS19ICi0KLSNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1zeXMuaD4KLQotI2RlZmluZSBDUllTVEFMIDI5NDkxMjAwIC8qIEh6ICovCi0KLS8qIFRoZSBIUk0gY2FsbHMgdGhpcyB2YWx1ZSBmX3ZjbyAqLwotc3RhdGljIGlubGluZSB1MzIgbnM5eHh4X3N5c3RlbWNsb2NrKHZvaWQpIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Ci1zdGF0aWMgaW5saW5lIHUzMiBuczl4eHhfc3lzdGVtY2xvY2sodm9pZCkKLXsKLQl1MzIgcGxsID0gX19yYXdfcmVhZGwoU1lTX1BMTCk7Ci0KLQkvKgotCSAqIFRoZSBzeXN0ZW0gY2xvY2sgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgSFogKiBUSU1FUkNMT0NLU0VMRUNUIChpbgotCSAqIHRpbWUuYykuCi0JICoKLQkgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgZ2l2ZW46Ci0JICogICAtIFRJTUVSQ0xPQ0tTRUxFQ1QgPT0gMl5pIGZvciBhbiBpIGluIHswIC4uIDZ9Ci0JICogICAtIENSWVNUQUwgPT0gMjk0OTEyMDAgPT0gMl4xNyAqIDNeMiAqIDVeMgotCSAqICAgLSBORCBpbiB7MCAuLiAzMX0KLQkgKiAgIC0gRlMgaW4gezAgLi4gM30KLQkgKgotCSAqIEFzc3VtaW5nIHRoZSB3b3JzdCwgd2UgY29uc2lkZXI6Ci0JICogICAtIFRJTUVSQ0xPQ0tTRUxFQ1QgPT0gNjQKLQkgKiAgIC0gTkQgPT0gMAotCSAqICAgLSBGUyA9PSAzCi0JICoKLQkgKiBTbyBIWiBzaG91bGQgYmUgYSBkaXZpc29yIG9mOgotCSAqICAgICAgKENSWVNUQUwgKiAoTkQgKyAxKSA+PiBGUykgLyBUSU1FUkNMT0NLU0VMRUNUCi0JICogICA9PSAoMl4xNyAqIDNeMiAqIDVeMiAqIDEgPj4gMykgLyA2NAotCSAqICAgPT0gMl44ICogM14yICogNV4yCi0JICogICA9PSA1NzYwMAotCSAqCi0JICogQ3VycmVudGx5IEhaIGlzIGRlZmluZWQgdG8gYmUgMTAwIGZvciB0aGlzIHBsYXRmb3JtLgotCSAqCi0JICogRmluZS4KLQkgKi8KLQlyZXR1cm4gQ1JZU1RBTCAqIChSRUdHRVRJTShwbGwsIFNZU19QTEwsIE5EKSArIDEpCi0JCT4+IFJFR0dFVElNKHBsbCwgU1lTX1BMTCwgRlMpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBuczl4eHhfY3B1Y2xvY2sodm9pZCkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKLXN0YXRpYyBpbmxpbmUgdTMyIG5zOXh4eF9jcHVjbG9jayh2b2lkKQotewotCXJldHVybiBuczl4eHhfc3lzdGVtY2xvY2soKSAvIDI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIG5zOXh4eF9haGJjbG9jayh2b2lkKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc3RhdGljIGlubGluZSB1MzIgbnM5eHh4X2FoYmNsb2NrKHZvaWQpCi17Ci0JcmV0dXJuIG5zOXh4eF9zeXN0ZW1jbG9jaygpIC8gNDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbnM5eHh4X2JidXNjbG9jayh2b2lkKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwotc3RhdGljIGlubGluZSB1MzIgbnM5eHh4X2JidXNjbG9jayh2b2lkKQotewotCXJldHVybiBuczl4eHhfc3lzdGVtY2xvY2soKSAvIDg7Ci19Ci0KLSNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9DTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9lbnRyeS1tYWNyby5TCmluZGV4IDg2YWVjODcuLjg5YTIxYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9lbnRyeS1tYWNyby5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9lbnRyeS1tYWNyby5TCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtOSwxNiArOSwxNiBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLXN5cy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLXN5cy1jb21tb24uaD4KIAogCQkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJbGRyCVxiYXNlLCA9U1lTX0lTUkFERFIKIAkJLmVuZG0KIAogCQkubWFjcm8JYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgogCQkuZW5kbQogCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbGRyCVxiYXNlLCA9U1lTX0lTUkFERFIKIAkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMoU1lTX0lTQSAtIFNZU19JU1JBRERSKV0KIAkJY21wCVxpcnFzdGF0LCAjMAogCQlsZHJuZQlcaXJxbnIsIFtcYmFzZV0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaXJxcy5oCmluZGV4IDI1ZDhkMjguLmU4M2Q0OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2lycXMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaXJxcy5oCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTEsMzggKzExLDM5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICiAKLSNkZWZpbmUgSVJRX1dBVENIRE9HCTAKLSNkZWZpbmUgSVJRX0FIQkJVU0VSUgkxCi0jZGVmaW5lIElSUV9CQlVTQUdHCTIKKy8qIE5ldFNpbGljb24gOTM2MCAqLworI2RlZmluZSBJUlFfTlM5WFhYX1dBVENIRE9HCTAKKyNkZWZpbmUgSVJRX05TOVhYWF9BSEJCVVNFUlIJMQorI2RlZmluZSBJUlFfTlM5MzYwX0JCVVNBR0cJMgogLyogaXJxIDMgaXMgcmVzZXJ2ZWQgZm9yIE5TOTM2MCAqLwotI2RlZmluZSBJUlFfRVRIUlgJNAotI2RlZmluZSBJUlFfRVRIVFgJNQotI2RlZmluZSBJUlFfRVRIUEhZCTYKLSNkZWZpbmUgSVJRX0xDRAkJNwotI2RlZmluZSBJUlFfU0VSQlJYCTgKLSNkZWZpbmUgSVJRX1NFUkJUWAk5Ci0jZGVmaW5lIElSUV9TRVJBUlgJMTAKLSNkZWZpbmUgSVJRX1NFUkFUWAkxMQotI2RlZmluZSBJUlFfU0VSQ1JYCTEyCi0jZGVmaW5lIElSUV9TRVJDVFgJMTMKLSNkZWZpbmUgSVJRX0kyQwkJMTQKLSNkZWZpbmUgSVJRX0JCVVNETUEJMTUKLSNkZWZpbmUgSVJRX1RJTUVSMAkxNgotI2RlZmluZSBJUlFfVElNRVIxCTE3Ci0jZGVmaW5lIElSUV9USU1FUjIJMTgKLSNkZWZpbmUgSVJRX1RJTUVSMwkxOQotI2RlZmluZSBJUlFfVElNRVI0CTIwCi0jZGVmaW5lIElSUV9USU1FUjUJMjEKLSNkZWZpbmUgSVJRX1RJTUVSNgkyMgotI2RlZmluZSBJUlFfVElNRVI3CTIzCi0jZGVmaW5lIElSUV9SVEMJCTI0Ci0jZGVmaW5lIElSUV9VU0JIT1NUCTI1Ci0jZGVmaW5lIElSUV9VU0JERVZJQ0UJMjYKLSNkZWZpbmUgSVJRX0lFRUUxMjg0CTI3Ci0jZGVmaW5lIElSUV9FWFQwCTI4Ci0jZGVmaW5lIElSUV9FWFQxCTI5Ci0jZGVmaW5lIElSUV9FWFQyCTMwCi0jZGVmaW5lIElSUV9FWFQzCTMxCisjZGVmaW5lIElSUV9OUzlYWFhfRVRIUlgJNAorI2RlZmluZSBJUlFfTlM5WFhYX0VUSFRYCTUKKyNkZWZpbmUgSVJRX05TOVhYWF9FVEhQSFkJNgorI2RlZmluZSBJUlFfTlM5MzYwX0xDRAkJNworI2RlZmluZSBJUlFfTlM5MzYwX1NFUkJSWAk4CisjZGVmaW5lIElSUV9OUzkzNjBfU0VSQlRYCTkKKyNkZWZpbmUgSVJRX05TOTM2MF9TRVJBUlgJMTAKKyNkZWZpbmUgSVJRX05TOTM2MF9TRVJBVFgJMTEKKyNkZWZpbmUgSVJRX05TOTM2MF9TRVJDUlgJMTIKKyNkZWZpbmUgSVJRX05TOTM2MF9TRVJDVFgJMTMKKyNkZWZpbmUgSVJRX05TOTM2MF9JMkMJCTE0CisjZGVmaW5lIElSUV9OUzkzNjBfQkJVU0RNQQkxNQorI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSMAkxNgorI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSMQkxNworI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSMgkxOAorI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSMwkxOQorI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSNAkyMAorI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSNQkyMQorI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSNgkyMgorI2RlZmluZSBJUlFfTlM5MzYwX1RJTUVSNwkyMworI2RlZmluZSBJUlFfTlM5MzYwX1JUQwkJMjQKKyNkZWZpbmUgSVJRX05TOTM2MF9VU0JIT1NUCTI1CisjZGVmaW5lIElSUV9OUzkzNjBfVVNCREVWSUNFCTI2CisjZGVmaW5lIElSUV9OUzkzNjBfSUVFRTEyODQJMjcKKyNkZWZpbmUgSVJRX05TOVhYWF9FWFQwCQkyOAorI2RlZmluZSBJUlFfTlM5WFhYX0VYVDEJCTI5CisjZGVmaW5lIElSUV9OUzlYWFhfRVhUMgkJMzAKKyNkZWZpbmUgSVJRX05TOVhYWF9FWFQzCQkzMQogCiAjZGVmaW5lIEJCVVNfSVJRKGlycSkJKDMyICsgaXJxKQogCkBAIC02Nyw3ICs2OCw3IEBACiAvKgogICogdGhlc2UgSW50ZXJydXB0cyBhcmUgc3BlY2lmaWMgZm9yIHRoZSBhOW05NzUwZGV2IGJvYXJkLgogICogVGhleSBhcmUgZ2VuZXJhdGVkIGJ5IGFuIEZQR0EgdGhhdCBpbnRlcnJ1cHRzIHRoZSBDUFUgb24KLSAqIElSUV9FWFQyCisgKiBJUlFfTlM5MzYwX0VYVDIKICAqLwogI2RlZmluZSBGUEdBX0lSUShpcnEpCSg2NCArIGlycSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L21vZHVsZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDhhMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvbW9kdWxlLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9tb2R1bGUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTU9EVUxFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NT0RVTEVfSAorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2RlZmluZSBtb2R1bGVfaXNfY2M3dWNhbXJ5KCkJKDAJCQlcCisJCXx8IG1hY2hpbmVfaXNfY2M3dWNhbXJ5KCkJCVwKKwkJKQorCisjZGVmaW5lIG1vZHVsZV9pc19jYzljKCkJKDAJCQlcCisJCXx8IG1hY2hpbmVfaXNfY2M5YygpCQkJXAorCQkpCisKKyNkZWZpbmUgbW9kdWxlX2lzX2NjOXA5MjEwKCkJKDAJCQlcCisJCXx8IG1hY2hpbmVfaXNfY2M5cDkyMTAoKQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjOXA5MjEwanMoKQkJXAorCQkpCisKKyNkZWZpbmUgbW9kdWxlX2lzX2NjOXA5MjE1KCkJKDAJCQlcCisJCXx8IG1hY2hpbmVfaXNfY2M5cDkyMTUoKQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjOXA5MjE1anMoKQkJXAorCQkpCisKKyNkZWZpbmUgbW9kdWxlX2lzX2NjOXA5MzYwKCkJKDAJCQlcCisJCXx8IG1hY2hpbmVfaXNfYTltOTM2MCgpCQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjOXA5MzYwZGV2KCkJCVwKKwkJfHwgbWFjaGluZV9pc19jYzlwOTM2MGpzKCkJCVwKKwkJfHwgbWFjaGluZV9pc19jYzlwOTM2MHZhbCgpCQlcCisJCSkKKworI2RlZmluZSBtb2R1bGVfaXNfY2M5cDk3NTAoKQkoMAkJCVwKKwkJfHwgbWFjaGluZV9pc19hOW05NzUwKCkJCQlcCisJCXx8IG1hY2hpbmVfaXNfY2M5cDk3NTBkZXYoKQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjOXA5NzUwanMoKQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjOXA5NzUwdmFsKCkJCVwKKwkJKQorCisjZGVmaW5lIG1vZHVsZV9pc19jY3c5YygpCSgwCQkJXAorCQl8fCBtYWNoaW5lX2lzX2NjdzljKCkJCQlcCisJCSkKKworI2RlZmluZSBtb2R1bGVfaXNfaW5jMjBvdHRlcigpCSgwCQkJXAorCQl8fCBtYWNoaW5lX2lzX2luYzIwb3R0ZXIoKQkJXAorCQkpCisKKyNkZWZpbmUgbW9kdWxlX2lzX290dGVyKCkJKDAJCQlcCisJCXx8IG1hY2hpbmVfaXNfb3R0ZXIoKQkJCVwKKwkJKQorCisjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSQ0hfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9wcm9jZXNzb3ItbnM5MzYwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYWE2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9QUk9DRVNTT1JOUzkzNjBfSAorI2RlZmluZSBfX0FTTV9BUkNIX1BST0NFU1NPUk5TOTM2MF9ICisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK3ZvaWQgbnM5MzYwX3Jlc2V0KGNoYXIgbW9kZSk7CisKK3Vuc2lnbmVkIGxvbmcgbnM5MzYwX3N5c3RlbWNsb2NrKHZvaWQpIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuczkzNjBfY3B1Y2xvY2sodm9pZCkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuczkzNjBfY3B1Y2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gbnM5MzYwX3N5c3RlbWNsb2NrKCkgLyAyOworfQorCit2b2lkIF9faW5pdCBuczkzNjBfbWFwX2lvKHZvaWQpOworCitleHRlcm4gc3RydWN0IHN5c190aW1lciBuczkzNjBfdGltZXI7CisKK2ludCBuczkzNjBfZ3Bpb19jb25maWd1cmUodW5zaWduZWQgZ3BpbywgaW50IGludiwgaW50IGZ1bmMpOworCisjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSQ0hfUFJPQ0VTU09STlM5MzYwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9wcm9jZXNzb3IuaAppbmRleCAyMjNlNTFiLi5mN2I1M2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3Byb2Nlc3Nvci5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9wcm9jZXNzb3IuaAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTExLDkgKzExLDMyIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfUFJPQ0VTU09SX0gKICNkZWZpbmUgX19BU01fQVJDSF9QUk9DRVNTT1JfSAogCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvbW9kdWxlLmg+CiAKLSNkZWZpbmUgcHJvY2Vzc29yX2lzX25zOTM2MCgpCShtYWNoaW5lX2lzX2NjOXA5MzYwZGV2KCkJCVwKLQkJfHwgbWFjaGluZV9pc19jYzlwOTM2MGpzKCkpCisjZGVmaW5lIHByb2Nlc3Nvcl9pc19uczkyMTAoKQkoMAkJCVwKKwkJfHwgbW9kdWxlX2lzX2NjN3VjYW1yeSgpCQlcCisJCXx8IG1vZHVsZV9pc19jYzlwOTIxMCgpCQkJXAorCQl8fCBtb2R1bGVfaXNfaW5jMjBvdHRlcigpCQlcCisJCXx8IG1vZHVsZV9pc19vdHRlcigpCQkJXAorCQkpCisKKyNkZWZpbmUgcHJvY2Vzc29yX2lzX25zOTIxNSgpCSgwCQkJXAorCQl8fCBtb2R1bGVfaXNfY2M5cDkyMTUoKQkJCVwKKwkJKQorCisjZGVmaW5lIHByb2Nlc3Nvcl9pc19uczkzNjAoKQkoMAkJCVwKKwkJfHwgbW9kdWxlX2lzX2NjOXA5MzYwKCkJCQlcCisJCXx8IG1vZHVsZV9pc19jYzljKCkJCQlcCisJCXx8IG1vZHVsZV9pc19jY3c5YygpCQkJXAorCQkpCisKKyNkZWZpbmUgcHJvY2Vzc29yX2lzX25zOTc1MCgpCSgwCQkJXAorCQl8fCBtb2R1bGVfaXNfY2M5cDk3NTAoKQkJCVwKKwkJKQorCisjZGVmaW5lIHByb2Nlc3Nvcl9pc19uczkyMXgoKQkoMAkJCVwKKwkJfHwgcHJvY2Vzc29yX2lzX25zOTIxMCgpCQlcCisJCXx8IHByb2Nlc3Nvcl9pc19uczkyMTUoKQkJXAorCQkpCiAKICNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLWNvbW1vbi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NmM1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcmVncy1zeXMtY29tbW9uLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLXN5cy1jb21tb24uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTU1lTQ09NTU9OX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTU1lTQ09NTU9OX0gKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogSW50ZXJydXB0IFZlY3RvciBBZGRyZXNzIFJlZ2lzdGVyIExldmVsIHggKi8KKyNkZWZpbmUgU1lTX0lWQSh4KQlfX1JFRzIoMHhhMDkwMDBjNCwgKHgpKQorCisvKiBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1lTX0lDKHgpCV9fUkVHMigweGEwOTAwMTQ0LCAoeCkpCisKKy8qIElTUkFERFIgKi8KKyNkZWZpbmUgU1lTX0lTUkFERFIgICAgIF9fUkVHKDB4YTA5MDAxNjQpCisKKy8qIEludGVycnVwdCBTdGF0dXMgQWN0aXZlICovCisjZGVmaW5lIFNZU19JU0EJCV9fUkVHKDB4YTA5MDAxNjgpCisKKy8qIEludGVycnVwdCBTdGF0dXMgUmF3ICovCisjZGVmaW5lIFNZU19JU1IJCV9fUkVHKDB4YTA5MDAxNmMpCisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9SRUdTU1lTQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLXN5cy1uczkzNjAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLXN5cy1uczkzNjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThiNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLW5zOTM2MC5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLW5zOTM2MC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NTWVNOUzkzNjBfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NTWVNOUzkzNjBfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIFN5c3RlbSBDb250cm9sIE1vZHVsZSAqLworCisvKiBBSEIgQXJiaXRlciBHZW4gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTWVNfQUhCQUdFTkNPTkYJX19SRUcoMHhhMDkwMDAwMCkKKworLyogQlJDICovCisjZGVmaW5lIFNZU19CUkMoeCkJX19SRUcyKDB4YTA5MDAwMDQsICh4KSkKKworLyogVGltZXIgeCBSZWxvYWQgQ291bnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1RSQyh4KQlfX1JFRzIoMHhhMDkwMDA0NCwgKHgpKQorCisvKiBUaW1lciB4IFJlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1RSKHgpCV9fUkVHMigweGEwOTAwMDg0LCAoeCkpCisKKy8qIFRpbWVyIEludGVycnVwdCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1RJUwkJX19SRUcoMHhhMDkwMDE3MCkKKworLyogUExMIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1BMTAkJX19SRUcoMHhhMDkwMDE4OCkKKworLyogUExMIEZTIHN0YXR1cyAqLworI2RlZmluZSBTWVNfUExMX0ZTCQlfX1JFR0JJVFMoMjQsIDIzKQorCisvKiBQTEwgTkQgc3RhdHVzICovCisjZGVmaW5lIFNZU19QTExfTkQJCV9fUkVHQklUUygyMCwgMTYpCisKKy8qIFBMTCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyOiBQTEwgU1cgY2hhbmdlICovCisjZGVmaW5lIFNZU19QTExfU1dDCQlfX1JFR0JJVCgxNSkKKyNkZWZpbmUgU1lTX1BMTF9TV0NfTk8JCQlfX1JFR1ZBTChTWVNfUExMX1NXQywgMCkKKyNkZWZpbmUgU1lTX1BMTF9TV0NfWUVTCQkJX19SRUdWQUwoU1lTX1BMTF9TV0MsIDEpCisKKy8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTWVNfVEMoeCkJX19SRUcyKDB4YTA5MDAxOTAsICh4KSkKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBUaW1lciBlbmFibGUgKi8KKyNkZWZpbmUgU1lTX1RDeF9URU4JCV9fUkVHQklUKDE1KQorI2RlZmluZSBTWVNfVEN4X1RFTl9ESVMJCQlfX1JFR1ZBTChTWVNfVEN4X1RFTiwgMCkKKyNkZWZpbmUgU1lTX1RDeF9URU5fRU4JCQlfX1JFR1ZBTChTWVNfVEN4X1RFTiwgMSkKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBDUFUgZGVidWcgbW9kZSAqLworI2RlZmluZSBTWVNfVEN4X1REQkcJCV9fUkVHQklUKDEwKQorI2RlZmluZSBTWVNfVEN4X1REQkdfQ09OVAkJX19SRUdWQUwoU1lTX1RDeF9UREJHLCAwKQorI2RlZmluZSBTWVNfVEN4X1REQkdfU1RPUAkJX19SRUdWQUwoU1lTX1RDeF9UREJHLCAxKQorCisvKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IEludGVycnVwdCBjbGVhciAqLworI2RlZmluZSBTWVNfVEN4X0lOVEMJCV9fUkVHQklUKDkpCisjZGVmaW5lIFNZU19UQ3hfSU5UQ19VTlNFVAkJX19SRUdWQUwoU1lTX1RDeF9JTlRDLCAwKQorI2RlZmluZSBTWVNfVEN4X0lOVENfU0VUCQlfX1JFR1ZBTChTWVNfVEN4X0lOVEMsIDEpCisKKy8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlcjogVGltZXIgY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNZU19UQ3hfVExDUwkJX19SRUdCSVRTKDgsIDYpCisjZGVmaW5lIFNZU19UQ3hfVExDU19DUFUJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgMCkJLyogQ1BVIGNsb2NrICovCisjZGVmaW5lIFNZU19UQ3hfVExDU19ESVYyCQlfX1JFR1ZBTChTWVNfVEN4X1RMQ1MsIDEpCS8qIENQVSBjbG9jayAvIDIgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTENTX0RJVjQJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgMikJLyogQ1BVIGNsb2NrIC8gNCAqLworI2RlZmluZSBTWVNfVEN4X1RMQ1NfRElWOAkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCAzKQkvKiBDUFUgY2xvY2sgLyA4ICovCisjZGVmaW5lIFNZU19UQ3hfVExDU19ESVYxNgkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCA0KQkvKiBDUFUgY2xvY2sgLyAxNiAqLworI2RlZmluZSBTWVNfVEN4X1RMQ1NfRElWMzIJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgNSkJLyogQ1BVIGNsb2NrIC8gMzIgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTENTX0RJVjY0CQlfX1JFR1ZBTChTWVNfVEN4X1RMQ1MsIDYpCS8qIENQVSBjbG9jayAvIDY0ICovCisjZGVmaW5lIFNZU19UQ3hfVExDU19FWFQJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgNykKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBUaW1lciBtb2RlICovCisjZGVmaW5lIFNZU19UQ3hfVE0JCV9fUkVHQklUUyg1LCA0KQorI2RlZmluZSBTWVNfVEN4X1RNX0lFRQkJCV9fUkVHVkFMKFNZU19UQ3hfVE0sIDApCQkvKiBJbnRlcm5hbCB0aW1lciBvciBleHRlcm5hbCBldmVudCAqLworI2RlZmluZSBTWVNfVEN4X1RNX0VMTAkJCV9fUkVHVkFMKFNZU19UQ3hfVE0sIDEpCQkvKiBFeHRlcm5hbCBsb3ctbGV2ZWwsIGdhdGVkIHRpbWVyICovCisjZGVmaW5lIFNZU19UQ3hfVE1fRUhMCQkJX19SRUdWQUwoU1lTX1RDeF9UTSwgMikJCS8qIEV4dGVybmFsIGhpZ2gtbGV2ZWwsIGdhdGVkIHRpbWVyICovCisjZGVmaW5lIFNZU19UQ3hfVE1fQ09OQ0FUCQlfX1JFR1ZBTChTWVNfVEN4X1RNLCAzKQkJLyogQ29uY2F0ZW5hdGUgdGhlIGxvd2VyIHRpbWVyLiAqLworCisvKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IEludGVycnVwdCBzZWxlY3QgKi8KKyNkZWZpbmUgU1lTX1RDeF9JTlRTCQlfX1JFR0JJVCgzKQorI2RlZmluZSBTWVNfVEN4X0lOVFNfRElTCQlfX1JFR1ZBTChTWVNfVEN4X0lOVFMsIDApCisjZGVmaW5lIFNZU19UQ3hfSU5UU19FTgkJCV9fUkVHVkFMKFNZU19UQ3hfSU5UUywgMSkKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBVcC9kb3duIHNlbGVjdCAqLworI2RlZmluZSBTWVNfVEN4X1VEUwkJX19SRUdCSVQoMikKKyNkZWZpbmUgU1lTX1RDeF9VRFNfVVAJCQlfX1JFR1ZBTChTWVNfVEN4X1VEUywgMCkKKyNkZWZpbmUgU1lTX1RDeF9VRFNfRE9XTgkJX19SRUdWQUwoU1lTX1RDeF9VRFMsIDEpCisKKy8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlcjogMzItIG9yIDE2LWJpdCB0aW1lciAqLworI2RlZmluZSBTWVNfVEN4X1RTWgkJX19SRUdCSVQoMSkKKyNkZWZpbmUgU1lTX1RDeF9UU1pfMTYJCQlfX1JFR1ZBTChTWVNfVEN4X1RTWiwgMCkKKyNkZWZpbmUgU1lTX1RDeF9UU1pfMzIJCQlfX1JFR1ZBTChTWVNfVEN4X1RTWiwgMSkKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBSZWxvYWQgZW5hYmxlICovCisjZGVmaW5lIFNZU19UQ3hfUkVOCQlfX1JFR0JJVCgwKQorI2RlZmluZSBTWVNfVEN4X1JFTl9ESVMJCQlfX1JFR1ZBTChTWVNfVEN4X1JFTiwgMCkKKyNkZWZpbmUgU1lTX1RDeF9SRU5fRU4JCQlfX1JFR1ZBTChTWVNfVEN4X1JFTiwgMSkKKworLyogU3lzdGVtIE1lbW9yeSBDaGlwIFNlbGVjdCB4IER5bmFtaWMgTWVtb3J5IEJhc2UgKi8KKyNkZWZpbmUgU1lTX1NNQ1NETUIoeCkJX19SRUcyKDB4YTA5MDAxZDAsICh4KSA8PCAxKQorCisvKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggRHluYW1pYyBNZW1vcnkgTWFzayAqLworI2RlZmluZSBTWVNfU01DU0RNTSh4KQlfX1JFRzIoMHhhMDkwMDFkNCwgKHgpIDw8IDEpCisKKy8qIFN5c3RlbSBNZW1vcnkgQ2hpcCBTZWxlY3QgeCBTdGF0aWMgTWVtb3J5IEJhc2UgKi8KKyNkZWZpbmUgU1lTX1NNQ1NTTUIoeCkJX19SRUcyKDB4YTA5MDAxZjAsICh4KSA8PCAxKQorCisvKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggU3RhdGljIE1lbW9yeSBCYXNlOiBDaGlwIHNlbGVjdCB4IGJhc2UgKi8KKyNkZWZpbmUgU1lTX1NNQ1NTTUJfQ1N4QglfX1JFR0JJVFMoMzEsIDEyKQorCisvKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggU3RhdGljIE1lbW9yeSBNYXNrICovCisjZGVmaW5lIFNZU19TTUNTU01NKHgpCV9fUkVHMigweGEwOTAwMWY0LCAoeCkgPDwgMSkKKworLyogU3lzdGVtIE1lbW9yeSBDaGlwIFNlbGVjdCB4IFN0YXRpYyBNZW1vcnkgTWFzazogQ2hpcCBzZWxlY3QgeCBtYXNrICovCisjZGVmaW5lIFNZU19TTUNTU01NX0NTeE0JX19SRUdCSVRTKDMxLCAxMikKKworLyogU3lzdGVtIE1lbW9yeSBDaGlwIFNlbGVjdCB4IFN0YXRpYyBNZW1vcnkgTWFzazogQ2hpcCBzZWxlY3QgeCBlbmFibGUgKi8KKyNkZWZpbmUgU1lTX1NNQ1NTTU1fQ1NFeAlfX1JFR0JJVCgwKQorI2RlZmluZSBTWVNfU01DU1NNTV9DU0V4X0RJUwkJX19SRUdWQUwoU1lTX1NNQ1NTTU1fQ1NFeCwgMCkKKyNkZWZpbmUgU1lTX1NNQ1NTTU1fQ1NFeF9FTgkJX19SRUdWQUwoU1lTX1NNQ1NTTU1fQ1NFeCwgMSkKKworLyogR2VuZXJhbCBwdXJwb3NlLCB1c2VyLWRlZmluZWQgSUQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX0dFTklECV9fUkVHKDB4YTA5MDAyMTApCisKKy8qIEV4dGVybmFsIEludGVycnVwdCB4IENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX0VJQyh4KQlfX1JFRzIoMHhhMDkwMDIxNCwgKHgpKQorCisvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgeCBDb250cm9sIHJlZ2lzdGVyOiBTdGF0dXMgKi8KKyNkZWZpbmUgU1lTX0VJQ19TVFMJCV9fUkVHQklUKDMpCisKKy8qIEV4dGVybmFsIEludGVycnVwdCB4IENvbnRyb2wgcmVnaXN0ZXI6IENsZWFyICovCisjZGVmaW5lIFNZU19FSUNfQ0xSCQlfX1JFR0JJVCgyKQorCisvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgeCBDb250cm9sIHJlZ2lzdGVyOiBQb2xhcml0eSAqLworI2RlZmluZSBTWVNfRUlDX1BMVFkJCV9fUkVHQklUKDEpCisjZGVmaW5lIFNZU19FSUNfUExUWV9BSAkJCV9fUkVHVkFMKFNZU19FSUNfUExUWSwgMCkKKyNkZWZpbmUgU1lTX0VJQ19QTFRZX0FMCQkJX19SRUdWQUwoU1lTX0VJQ19QTFRZLCAxKQorCisvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgeCBDb250cm9sIHJlZ2lzdGVyOiBMZXZlbCBlZGdlICovCisjZGVmaW5lIFNZU19FSUNfTFZFREcJCV9fUkVHQklUKDApCisjZGVmaW5lIFNZU19FSUNfTFZFREdfTEVWRUwJCV9fUkVHVkFMKFNZU19FSUNfTFZFREcsIDApCisjZGVmaW5lIFNZU19FSUNfTFZFREdfRURHRQkJX19SRUdWQUwoU1lTX0VJQ19MVkVERywgMSkKKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX1JFR1NTWVNOUzkzNjBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcmVncy1zeXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5MjYyZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcmVncy1zeXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NTWVNfSAotI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NTWVNfSAotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KLS8qIFN5c3RlbSBDb250cm9sIE1vZHVsZSAqLwotCi0vKiBBSEIgQXJiaXRlciBHZW4gQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBTWVNfQUhCQUdFTkNPTkYJX19SRUcoMHhhMDkwMDAwMCkKLQotLyogQlJDICovCi0jZGVmaW5lIFNZU19CUkMoeCkJX19SRUcyKDB4YTA5MDAwMDQsICh4KSkKLQotLyogVGltZXIgeCBSZWxvYWQgQ291bnQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1lTX1RSQyh4KQlfX1JFRzIoMHhhMDkwMDA0NCwgKHgpKQotCi0vKiBUaW1lciB4IFJlYWQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1lTX1RSKHgpCV9fUkVHMigweGEwOTAwMDg0LCAoeCkpCi0KLS8qIEludGVycnVwdCBWZWN0b3IgQWRkcmVzcyBSZWdpc3RlciBMZXZlbCB4ICovCi0jZGVmaW5lIFNZU19JVkEoeCkJX19SRUcyKDB4YTA5MDAwYzQsICh4KSkKLQotLyogSW50ZXJydXB0IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCi0jZGVmaW5lIFNZU19JQyh4KQlfX1JFRzIoMHhhMDkwMDE0NCwgKHgpKQotCi0vKiBJU1JBRERSICovCi0jZGVmaW5lIFNZU19JU1JBRERSCV9fUkVHKDB4YTA5MDAxNjQpCi0KLS8qIEludGVycnVwdCBTdGF0dXMgQWN0aXZlICovCi0jZGVmaW5lIFNZU19JU0EJCV9fUkVHKDB4YTA5MDAxNjgpCi0KLS8qIEludGVycnVwdCBTdGF0dXMgUmF3ICovCi0jZGVmaW5lIFNZU19JU1IJCV9fUkVHKDB4YTA5MDAxNmMpCi0KLS8qIFRpbWVyIEludGVycnVwdCBTdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1lTX1RJUwkJX19SRUcoMHhhMDkwMDE3MCkKLQotLyogUExMIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1lTX1BMTAkJX19SRUcoMHhhMDkwMDE4OCkKLQotLyogUExMIEZTIHN0YXR1cyAqLwotI2RlZmluZSBTWVNfUExMX0ZTCQlfX1JFR0JJVFMoMjQsIDIzKQotCi0vKiBQTEwgTkQgc3RhdHVzICovCi0jZGVmaW5lIFNZU19QTExfTkQJCV9fUkVHQklUUygyMCwgMTYpCi0KLS8qIFBMTCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyOiBQTEwgU1cgY2hhbmdlICovCi0jZGVmaW5lIFNZU19QTExfU1dDCQlfX1JFR0JJVCgxNSkKLSNkZWZpbmUgU1lTX1BMTF9TV0NfTk8JCQlfX1JFR1ZBTChTWVNfUExMX1NXQywgMCkKLSNkZWZpbmUgU1lTX1BMTF9TV0NfWUVTCQkJX19SRUdWQUwoU1lTX1BMTF9TV0MsIDEpCi0KLS8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBTWVNfVEMoeCkJX19SRUcyKDB4YTA5MDAxOTAsICh4KSkKLQotLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBUaW1lciBlbmFibGUgKi8KLSNkZWZpbmUgU1lTX1RDeF9URU4JCV9fUkVHQklUKDE1KQotI2RlZmluZSBTWVNfVEN4X1RFTl9ESVMJCQlfX1JFR1ZBTChTWVNfVEN4X1RFTiwgMCkKLSNkZWZpbmUgU1lTX1RDeF9URU5fRU4JCQlfX1JFR1ZBTChTWVNfVEN4X1RFTiwgMSkKLQotLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBDUFUgZGVidWcgbW9kZSAqLwotI2RlZmluZSBTWVNfVEN4X1REQkcJCV9fUkVHQklUKDEwKQotI2RlZmluZSBTWVNfVEN4X1REQkdfQ09OVAkJX19SRUdWQUwoU1lTX1RDeF9UREJHLCAwKQotI2RlZmluZSBTWVNfVEN4X1REQkdfU1RPUAkJX19SRUdWQUwoU1lTX1RDeF9UREJHLCAxKQotCi0vKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IEludGVycnVwdCBjbGVhciAqLwotI2RlZmluZSBTWVNfVEN4X0lOVEMJCV9fUkVHQklUKDkpCi0jZGVmaW5lIFNZU19UQ3hfSU5UQ19VTlNFVAkJX19SRUdWQUwoU1lTX1RDeF9JTlRDLCAwKQotI2RlZmluZSBTWVNfVEN4X0lOVENfU0VUCQlfX1JFR1ZBTChTWVNfVEN4X0lOVEMsIDEpCi0KLS8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlcjogVGltZXIgY2xvY2sgc2VsZWN0ICovCi0jZGVmaW5lIFNZU19UQ3hfVExDUwkJX19SRUdCSVRTKDgsIDYpCi0jZGVmaW5lIFNZU19UQ3hfVExDU19DUFUJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgMCkJLyogQ1BVIGNsb2NrICovCi0jZGVmaW5lIFNZU19UQ3hfVExDU19ESVYyCQlfX1JFR1ZBTChTWVNfVEN4X1RMQ1MsIDEpCS8qIENQVSBjbG9jayAvIDIgKi8KLSNkZWZpbmUgU1lTX1RDeF9UTENTX0RJVjQJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgMikJLyogQ1BVIGNsb2NrIC8gNCAqLwotI2RlZmluZSBTWVNfVEN4X1RMQ1NfRElWOAkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCAzKQkvKiBDUFUgY2xvY2sgLyA4ICovCi0jZGVmaW5lIFNZU19UQ3hfVExDU19ESVYxNgkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCA0KQkvKiBDUFUgY2xvY2sgLyAxNiAqLwotI2RlZmluZSBTWVNfVEN4X1RMQ1NfRElWMzIJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgNSkJLyogQ1BVIGNsb2NrIC8gMzIgKi8KLSNkZWZpbmUgU1lTX1RDeF9UTENTX0RJVjY0CQlfX1JFR1ZBTChTWVNfVEN4X1RMQ1MsIDYpCS8qIENQVSBjbG9jayAvIDY0ICovCi0jZGVmaW5lIFNZU19UQ3hfVExDU19FWFQJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgNykKLQotLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBUaW1lciBtb2RlICovCi0jZGVmaW5lIFNZU19UQ3hfVE0JCV9fUkVHQklUUyg1LCA0KQotI2RlZmluZSBTWVNfVEN4X1RNX0lFRQkJCV9fUkVHVkFMKFNZU19UQ3hfVE0sIDApCQkvKiBJbnRlcm5hbCB0aW1lciBvciBleHRlcm5hbCBldmVudCAqLwotI2RlZmluZSBTWVNfVEN4X1RNX0VMTAkJCV9fUkVHVkFMKFNZU19UQ3hfVE0sIDEpCQkvKiBFeHRlcm5hbCBsb3ctbGV2ZWwsIGdhdGVkIHRpbWVyICovCi0jZGVmaW5lIFNZU19UQ3hfVE1fRUhMCQkJX19SRUdWQUwoU1lTX1RDeF9UTSwgMikJCS8qIEV4dGVybmFsIGhpZ2gtbGV2ZWwsIGdhdGVkIHRpbWVyICovCi0jZGVmaW5lIFNZU19UQ3hfVE1fQ09OQ0FUCQlfX1JFR1ZBTChTWVNfVEN4X1RNLCAzKQkJLyogQ29uY2F0ZW5hdGUgdGhlIGxvd2VyIHRpbWVyLiAqLwotCi0vKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IEludGVycnVwdCBzZWxlY3QgKi8KLSNkZWZpbmUgU1lTX1RDeF9JTlRTCQlfX1JFR0JJVCgzKQotI2RlZmluZSBTWVNfVEN4X0lOVFNfRElTCQlfX1JFR1ZBTChTWVNfVEN4X0lOVFMsIDApCi0jZGVmaW5lIFNZU19UQ3hfSU5UU19FTgkJCV9fUkVHVkFMKFNZU19UQ3hfSU5UUywgMSkKLQotLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBVcC9kb3duIHNlbGVjdCAqLwotI2RlZmluZSBTWVNfVEN4X1VEUwkJX19SRUdCSVQoMikKLSNkZWZpbmUgU1lTX1RDeF9VRFNfVVAJCQlfX1JFR1ZBTChTWVNfVEN4X1VEUywgMCkKLSNkZWZpbmUgU1lTX1RDeF9VRFNfRE9XTgkJX19SRUdWQUwoU1lTX1RDeF9VRFMsIDEpCi0KLS8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlcjogMzItIG9yIDE2LWJpdCB0aW1lciAqLwotI2RlZmluZSBTWVNfVEN4X1RTWgkJX19SRUdCSVQoMSkKLSNkZWZpbmUgU1lTX1RDeF9UU1pfMTYJCQlfX1JFR1ZBTChTWVNfVEN4X1RTWiwgMCkKLSNkZWZpbmUgU1lTX1RDeF9UU1pfMzIJCQlfX1JFR1ZBTChTWVNfVEN4X1RTWiwgMSkKLQotLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBSZWxvYWQgZW5hYmxlICovCi0jZGVmaW5lIFNZU19UQ3hfUkVOCQlfX1JFR0JJVCgwKQotI2RlZmluZSBTWVNfVEN4X1JFTl9ESVMJCQlfX1JFR1ZBTChTWVNfVEN4X1JFTiwgMCkKLSNkZWZpbmUgU1lTX1RDeF9SRU5fRU4JCQlfX1JFR1ZBTChTWVNfVEN4X1JFTiwgMSkKLQotLyogU3lzdGVtIE1lbW9yeSBDaGlwIFNlbGVjdCB4IER5bmFtaWMgTWVtb3J5IEJhc2UgKi8KLSNkZWZpbmUgU1lTX1NNQ1NETUIoeCkJX19SRUcyKDB4YTA5MDAxZDAsICh4KSA8PCAxKQotCi0vKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggRHluYW1pYyBNZW1vcnkgTWFzayAqLwotI2RlZmluZSBTWVNfU01DU0RNTSh4KQlfX1JFRzIoMHhhMDkwMDFkNCwgKHgpIDw8IDEpCi0KLS8qIFN5c3RlbSBNZW1vcnkgQ2hpcCBTZWxlY3QgeCBTdGF0aWMgTWVtb3J5IEJhc2UgKi8KLSNkZWZpbmUgU1lTX1NNQ1NTTUIoeCkJX19SRUcyKDB4YTA5MDAxZjAsICh4KSA8PCAxKQotCi0vKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggU3RhdGljIE1lbW9yeSBCYXNlOiBDaGlwIHNlbGVjdCB4IGJhc2UgKi8KLSNkZWZpbmUgU1lTX1NNQ1NTTUJfQ1N4QglfX1JFR0JJVFMoMzEsIDEyKQotCi0vKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggU3RhdGljIE1lbW9yeSBNYXNrICovCi0jZGVmaW5lIFNZU19TTUNTU01NKHgpCV9fUkVHMigweGEwOTAwMWY0LCAoeCkgPDwgMSkKLQotLyogU3lzdGVtIE1lbW9yeSBDaGlwIFNlbGVjdCB4IFN0YXRpYyBNZW1vcnkgTWFzazogQ2hpcCBzZWxlY3QgeCBtYXNrICovCi0jZGVmaW5lIFNZU19TTUNTU01NX0NTeE0JX19SRUdCSVRTKDMxLCAxMikKLQotLyogU3lzdGVtIE1lbW9yeSBDaGlwIFNlbGVjdCB4IFN0YXRpYyBNZW1vcnkgTWFzazogQ2hpcCBzZWxlY3QgeCBlbmFibGUgKi8KLSNkZWZpbmUgU1lTX1NNQ1NTTU1fQ1NFeAlfX1JFR0JJVCgwKQotI2RlZmluZSBTWVNfU01DU1NNTV9DU0V4X0RJUwkJX19SRUdWQUwoU1lTX1NNQ1NTTU1fQ1NFeCwgMCkKLSNkZWZpbmUgU1lTX1NNQ1NTTU1fQ1NFeF9FTgkJX19SRUdWQUwoU1lTX1NNQ1NTTU1fQ1NFeCwgMSkKLQotLyogR2VuZXJhbCBwdXJwb3NlLCB1c2VyLWRlZmluZWQgSUQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1lTX0dFTklECV9fUkVHKDB4YTA5MDAyMTApCi0KLS8qIEV4dGVybmFsIEludGVycnVwdCB4IENvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1lTX0VJQyh4KQlfX1JFRzIoMHhhMDkwMDIxNCwgKHgpKQotCi0vKiBFeHRlcm5hbCBJbnRlcnJ1cHQgeCBDb250cm9sIHJlZ2lzdGVyOiBTdGF0dXMgKi8KLSNkZWZpbmUgU1lTX0VJQ19TVFMJCV9fUkVHQklUKDMpCi0KLS8qIEV4dGVybmFsIEludGVycnVwdCB4IENvbnRyb2wgcmVnaXN0ZXI6IENsZWFyICovCi0jZGVmaW5lIFNZU19FSUNfQ0xSCQlfX1JFR0JJVCgyKQotCi0vKiBFeHRlcm5hbCBJbnRlcnJ1cHQgeCBDb250cm9sIHJlZ2lzdGVyOiBQb2xhcml0eSAqLwotI2RlZmluZSBTWVNfRUlDX1BMVFkJCV9fUkVHQklUKDEpCi0jZGVmaW5lIFNZU19FSUNfUExUWV9BSAkJCV9fUkVHVkFMKFNZU19FSUNfUExUWSwgMCkKLSNkZWZpbmUgU1lTX0VJQ19QTFRZX0FMCQkJX19SRUdWQUwoU1lTX0VJQ19QTFRZLCAxKQotCi0vKiBFeHRlcm5hbCBJbnRlcnJ1cHQgeCBDb250cm9sIHJlZ2lzdGVyOiBMZXZlbCBlZGdlICovCi0jZGVmaW5lIFNZU19FSUNfTFZFREcJCV9fUkVHQklUKDApCi0jZGVmaW5lIFNZU19FSUNfTFZFREdfTEVWRUwJCV9fUkVHVkFMKFNZU19FSUNfTFZFREcsIDApCi0jZGVmaW5lIFNZU19FSUNfTFZFREdfRURHRQkJX19SRUdWQUwoU1lTX0VJQ19MVkVERywgMSkKLQotI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX1JFR1NTWVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3N5c3RlbS5oCmluZGV4IGMxMDgyYmQuLjEzNDgwNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvc3lzdGVtLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3N5c3RlbS5oCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTIsOCArMTIsOCBAQAogI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICiAKICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1zeXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcHJvY2Vzc29yLW5zOTM2MC5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CkBAIC0yMiwxMSArMjIsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChTWVNfUExMKSA+PiAxNjsKLQlSRUdTRVQocmVnLCBTWVNfUExMLCBTV0MsIFlFUyk7Ci0JX19yYXdfd3JpdGVsKHJlZywgU1lTX1BMTCk7CisjaWZkZWYgQ09ORklHX1BST0NFU1NPUl9OUzkzNjAKKwlpZiAocHJvY2Vzc29yX2lzX25zOTM2MCgpKQorCQluczkzNjBfcmVzZXQobW9kZSk7CisJZWxzZQorI2VuZGlmCisJCUJVRygpOwogCiAJQlVHKCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3VuY29tcHJlc3MuaAppbmRleCA5NjFjYTdkLi43MTA2NmJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC91bmNvbXByZXNzLmgKQEAgLTExLDIwICsxMSwxNDkgQEAKICNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKICNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKIAotc3RhdGljIHZvaWQgcHV0YyhjaGFyIGMpCi17Ci0Jdm9sYXRpbGUgdTggKmJhc2UgPSAodm9sYXRpbGUgdTggKikweDQwMDAwMDAwOwotCWludCB0ID0gMHgxMDAwMDsKKyNpbmNsdWRlIDxhc20vaW8uaD4KIAotCWRvIHsKLQkJaWYgKGJhc2VbNV0gJiAweDIwKSB7Ci0JCQliYXNlWzBdID0gYzsKLQkJCWJyZWFrOwotCQl9Ci0JfSB3aGlsZSAoLS10KTsKKyNkZWZpbmUgX19SRUcoeCkJKCh2b2lkIF9faW9tZW0gX19mb3JjZSAqKSh4KSkKKworc3RhdGljIHZvaWQgcHV0Y19kdW1teShjaGFyIGMsIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwkvKiBub3RoaW5nICovCiB9CiAKLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorc3RhdGljIHZvaWQgcHV0Y19uczkzNjAoY2hhciBjLCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJc3RhdGljIGludCB0ID0gMHgxMDAwMDsKKwlkbyB7CisJCWlmICh0KQorCQkJLS10OworCisJCWlmIChfX3Jhd19yZWFkbChiYXNlICsgOCkgJiAoMSA8PCAzKSkgeworCQkJX19yYXdfd3JpdGViKGMsIGJhc2UgKyAxNik7CisJCQl0ID0gMHgxMDAwMDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dGNfYTltOTc1MGRldihjaGFyIGMsIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlzdGF0aWMgaW50IHQgPSAweDEwMDAwOworCWRvIHsKKwkJaWYgKHQpCisJCQktLXQ7CisKKwkJaWYgKF9fcmF3X3JlYWRiKGJhc2UgKyA1KSAmICgxIDw8IDUpKSB7CisJCQlfX3Jhd193cml0ZWIoYywgYmFzZSk7CisJCQl0ID0gMHgxMDAwMDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodCk7CisKK30KKworc3RhdGljIHZvaWQgcHV0Y19uczkyMXgoY2hhciBjLCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJc3RhdGljIGludCB0ID0gMHgxMDAwMDsKKwlkbyB7CisJCWlmICh0KQorCQkJLS10OworCisJCWlmICghKF9fcmF3X3JlYWRsKGJhc2UpICYgKDEgPDwgMTEpKSkgeworCQkJX19yYXdfd3JpdGViKGMsIGJhc2UgKyAweDAwMjgpOworCQkJdCA9IDB4MTAwMDA7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHQpOworfQorCisjZGVmaW5lIE1TQ1MgX19SRUcoMHhBMDkwMDE4NCkKKworI2RlZmluZSBOUzkzNjBfVUFSVEEJX19SRUcoMHg5MDIwMDA0MCkKKyNkZWZpbmUgTlM5MzYwX1VBUlRCCV9fUkVHKDB4OTAyMDAwMDApCisjZGVmaW5lIE5TOTM2MF9VQVJUQwlfX1JFRygweDkwMzAwMDAwKQorI2RlZmluZSBOUzkzNjBfVUFSVEQJX19SRUcoMHg5MDMwMDA0MCkKKworI2RlZmluZSBOUzkzNjBfVUFSVF9FTkFCTEVEKGJhc2UpCQkJCQlcCisJCShfX3Jhd19yZWFkbChOUzkzNjBfVUFSVEEpICYgKDEgPDwgMzEpKQorCisjZGVmaW5lIEE5TTk3NTBERVZfVUFSVEEJX19SRUcoMHg0MDAwMDAwMCkKKworI2RlZmluZSBOUzkyMVhTWVNfQ0xPQ0sJX19SRUcoMHhhMDkwMDE3YykKKyNkZWZpbmUgTlM5MjFYX1VBUlRBCV9fUkVHKDB4OTAwMTAwMDApCisjZGVmaW5lIE5TOTIxWF9VQVJUQglfX1JFRygweDkwMDE4MDAwKQorI2RlZmluZSBOUzkyMVhfVUFSVEMJX19SRUcoMHg5MDAyMDAwMCkKKyNkZWZpbmUgTlM5MjFYX1VBUlRECV9fUkVHKDB4OTAwMjgwMDApCisKKyNkZWZpbmUgTlM5MjFYX1VBUlRfRU5BQkxFRChiYXNlKQkJCQkJXAorCQkoX19yYXdfcmVhZGwoKGJhc2UpICsgMHgxMDAwKSAmICgxIDw8IDI5KSkKKworc3RhdGljIHZvaWQgYXV0b2RldGVjdCh2b2lkICgqKnB1dGMpKGNoYXIsIHZvaWQgX19pb21lbSAqKSwgdm9pZCBfX2lvbWVtICoqYmFzZSkKK3sKKwlpZiAoKChfX3Jhd19yZWFkbChNU0NTKSA+PiAxNikgJiAweGZlKSA9PSAweDAwKSB7CisJCS8qIG5zOTM2MCBvciBuczk3NTAgKi8KKwkJaWYgKE5TOTM2MF9VQVJUX0VOQUJMRUQoTlM5MzYwX1VBUlRBKSkgeworCQkJKnB1dGMgPSBwdXRjX25zOTM2MDsKKwkJCSpiYXNlID0gTlM5MzYwX1VBUlRBOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKE5TOTM2MF9VQVJUX0VOQUJMRUQoTlM5MzYwX1VBUlRCKSkgeworCQkJKnB1dGMgPSBwdXRjX25zOTM2MDsKKwkJCSpiYXNlID0gTlM5MzYwX1VBUlRCOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKE5TOTM2MF9VQVJUX0VOQUJMRUQoTlM5MzYwX1VBUlRDKSkgeworCQkJKnB1dGMgPSBwdXRjX25zOTM2MDsKKwkJCSpiYXNlID0gTlM5MzYwX1VBUlRDOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKE5TOTM2MF9VQVJUX0VOQUJMRUQoTlM5MzYwX1VBUlREKSkgeworCQkJKnB1dGMgPSBwdXRjX25zOTM2MDsKKwkJCSpiYXNlID0gTlM5MzYwX1VBUlREOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKF9fcmF3X3JlYWRsKF9fUkVHKDB4YTA5MDAxZjQpKSA9PSAweGZmZmZmMDAxKSB7CisJCQkqcHV0YyA9IHB1dGNfYTltOTc1MGRldjsKKwkJCSpiYXNlID0gQTlNOTc1MERFVl9VQVJUQTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAoKChfX3Jhd19yZWFkbChNU0NTKSA+PiAxNikgJiAweGZlKSA9PSAweDAyKSB7CisJCS8qIG5zOTIxeCAqLworCQl1MzIgY2xvY2sgPSBfX3Jhd19yZWFkbChOUzkyMVhTWVNfQ0xPQ0spOworCisJCWlmICgoY2xvY2sgJiAoMSA8PCAxKSkgJiYKKwkJCQlOUzkyMVhfVUFSVF9FTkFCTEVEKE5TOTIxWF9VQVJUQSkpIHsKKwkJCSpwdXRjID0gcHV0Y19uczkyMXg7CisJCQkqYmFzZSA9IE5TOTIxWF9VQVJUQTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmICgoY2xvY2sgJiAoMSA8PCAyKSkgJiYKKwkJCQlOUzkyMVhfVUFSVF9FTkFCTEVEKE5TOTIxWF9VQVJUQikpIHsKKwkJCSpwdXRjID0gcHV0Y19uczkyMXg7CisJCQkqYmFzZSA9IE5TOTIxWF9VQVJUQjsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmICgoY2xvY2sgJiAoMSA8PCAzKSkgJiYKKwkJCQlOUzkyMVhfVUFSVF9FTkFCTEVEKE5TOTIxWF9VQVJUQykpIHsKKwkJCSpwdXRjID0gcHV0Y19uczkyMXg7CisJCQkqYmFzZSA9IE5TOTIxWF9VQVJUQzsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmICgoY2xvY2sgJiAoMSA8PCA0KSkgJiYKKwkJCQlOUzkyMVhfVUFSVF9FTkFCTEVEKE5TOTIxWF9VQVJURCkpIHsKKwkJCSpwdXRjID0gcHV0Y19uczkyMXg7CisJCQkqYmFzZSA9IE5TOTIxWF9VQVJURDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCSpwdXRjID0gcHV0Y19kdW1teTsKK30KKwordm9pZCAoKm15cHV0YykoY2hhciwgdm9pZCBfX2lvbWVtICopOwordm9pZCBfX2lvbWVtICpiYXNlOworCitzdGF0aWMgdm9pZCBwdXRjKGNoYXIgYykKK3sKKwlteXB1dGMoYywgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7CisJYXV0b2RldGVjdCgmbXlwdXRjLCAmYmFzZSk7Cit9CiAjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQogCiBzdGF0aWMgdm9pZCBmbHVzaCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oMy5oCmluZGV4IDFjMmI1NWMuLjBmNjQwNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWgzLmgKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2RlZmluZSBOUl9JUlFTCQkJCShNQVhJUlFOVU0gKyAxKQogCi1leHRlcm4gdm9pZCBfX2luaXQgaDNfbW1jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBoM19tbWNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGgzX21tY19zbG90X2NvdmVyX2hhbmRsZXIodm9pZCAqYXJnLCBpbnQgc3RhdGUpOwogCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IM19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW9zay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1vc2suaAppbmRleCAyYjFhOGE0Li45NDkyNjA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLW9zay5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtb3NrLmgKQEAgLTMyLDUgKzMyLDE2IEBACiAvKiBBdCBPTUFQNTkxMiBPU0sgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KICNkZWZpbmUgT01BUF9PU0tfRVRIUl9TVEFSVAkJMHgwNDgwMDMwMAogCisvKiBUUFM2NTAxMCBoYXMgZm91ciBHUElPcy4gIG5QRyBhbmQgTEVEMiBjYW4gYmUgdHJlYXRlZCBsaWtlIEdQSU9zIHdpdGgKKyAqIGFsdGVybmF0ZSBwaW4gY29uZmlndXJhdGlvbnMgZm9yIGhhcmR3YXJlLWNvbnRyb2xsZWQgYmxpbmtpbmcuCisgKi8KKyNkZWZpbmUgT1NLX1RQU19HUElPX0JBU0UJCShPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pCisjCWRlZmluZSBPU0tfVFBTX0dQSU9fVVNCX1BXUl9FTgkoT1NLX1RQU19HUElPX0JBU0UgKyAwKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0xFRF9EMwkoT1NLX1RQU19HUElPX0JBU0UgKyAxKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0xBTl9SRVNFVAkoT1NLX1RQU19HUElPX0JBU0UgKyAyKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX0RTUF9QV1JfRU4JKE9TS19UUFNfR1BJT19CQVNFICsgMykKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDkJKE9TS19UUFNfR1BJT19CQVNFICsgNCkKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDIJKE9TS19UUFNfR1BJT19CQVNFICsgNSkKKwogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfT1NLX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oCmluZGV4IGZhNjg4MTAuLjU3NTIzYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKQEAgLTE0LDYgKzE0LDM1IEBACiAjZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICiAKIHN0cnVjdCBtb2R1bGU7CitzdHJ1Y3QgY2xrOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKworc3RydWN0IGNsa3NlbF9yYXRlIHsKKwl1OAkJCWRpdjsKKwl1MzIJCQl2YWw7CisJdTgJCQlmbGFnczsKK307CisKK3N0cnVjdCBjbGtzZWwgeworCXN0cnVjdCBjbGsJCSAqcGFyZW50OworCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqcmF0ZXM7Cit9OworCitzdHJ1Y3QgZHBsbF9kYXRhIHsKKwl2b2lkIF9faW9tZW0JCSptdWx0X2RpdjFfcmVnOworCXUzMgkJCW11bHRfbWFzazsKKwl1MzIJCQlkaXYxX21hc2s7CisjICBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCXZvaWQgX19pb21lbQkJKmNvbnRyb2xfcmVnOworCXUzMgkJCWVuYWJsZV9tYXNrOworCXU4CQkJYXV0b19yZWNhbF9iaXQ7CisJdTgJCQlyZWNhbF9lbl9iaXQ7CisJdTgJCQlyZWNhbF9zdF9iaXQ7CisjICBlbmRpZgorfTsKKworI2VuZGlmCiAKIHN0cnVjdCBjbGsgewogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKQEAgLTI1LDggKzU0LDYgQEAKIAlfX3UzMgkJCWZsYWdzOwogCXZvaWQgX19pb21lbQkJKmVuYWJsZV9yZWc7CiAJX191OAkJCWVuYWJsZV9iaXQ7Ci0JX191OAkJCXJhdGVfb2Zmc2V0OwotCV9fdTgJCQlzcmNfb2Zmc2V0OwogCV9fczgJCQl1c2Vjb3VudDsKIAl2b2lkCQkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7CiAJaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKQEAgLTM0LDYgKzYxLDE2IEBACiAJdm9pZAkJCSgqaW5pdCkoc3RydWN0IGNsayAqKTsKIAlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKIAl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJdTgJCQlmaXhlZF9kaXY7CisJdm9pZCBfX2lvbWVtCQkqY2xrc2VsX3JlZzsKKwl1MzIJCQljbGtzZWxfbWFzazsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsCSpjbGtzZWw7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YQkqZHBsbF9kYXRhOworI2Vsc2UKKwlfX3U4CQkJcmF0ZV9vZmZzZXQ7CisJX191OAkJCXNyY19vZmZzZXQ7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBjbGtfZnVuY3Rpb25zIHsKQEAgLTU0LDEwICs5MSwxMiBAQAogZXh0ZXJuIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiB2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CiBleHRlcm4gdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3Modm9pZCk7CiBleHRlcm4gdm9pZCBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOwogZXh0ZXJuIHZvaWQgY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiB2b2lkIGNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiBpbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgY2xrX2VuYWJsZV9pbml0X2Nsb2Nrcyh2b2lkKTsKIAogLyogQ2xvY2sgZmxhZ3MgKi8KICNkZWZpbmUgUkFURV9DS0NUTAkJKDEgPDwgMCkJLyogTWFpbiBmaXhlZCByYXRpbyBjbG9ja3MgKi8KQEAgLTcxLDIxICsxMTAsMzMgQEAKICNkZWZpbmUgQ0xPQ0tfTk9fSURMRV9QQVJFTlQJKDEgPDwgOCkKICNkZWZpbmUgREVMQVlFRF9BUFAJCSgxIDw8IDkpCS8qIERlbGF5IGFwcGxpY2F0aW9uIG9mIGNsb2NrICovCiAjZGVmaW5lIENPTkZJR19QQVJUSUNJUEFOVAkoMSA8PCAxMCkJLyogRnVuZGFtZW50YWwgY2xvY2sgKi8KLSNkZWZpbmUgQ01fTVBVX1NFTDEJCSgxIDw8IDExKQkvKiBEb21haW4gZGl2aWRlci9zb3VyY2UgKi8KLSNkZWZpbmUgQ01fRFNQX1NFTDEJCSgxIDw8IDEyKQotI2RlZmluZSBDTV9HRlhfU0VMMQkJKDEgPDwgMTMpCi0jZGVmaW5lIENNX01PREVNX1NFTDEJCSgxIDw8IDE0KQotI2RlZmluZSBDTV9DT1JFX1NFTDEJCSgxIDw8IDE1KQkvKiBTZXRzIGRpdmlkZXIgZm9yIG1hbnkgKi8KLSNkZWZpbmUgQ01fQ09SRV9TRUwyCQkoMSA8PCAxNikJLyogc2V0cyBwYXJlbnQgZm9yIEdQVCAqLwotI2RlZmluZSBDTV9XS1VQX1NFTDEJCSgxIDw8IDE3KQotI2RlZmluZSBDTV9QTExfU0VMMQkJKDEgPDwgMTgpCi0jZGVmaW5lIENNX1BMTF9TRUwyCQkoMSA8PCAxOSkKLSNkZWZpbmUgQ01fU1lTQ0xLT1VUX1NFTDEJKDEgPDwgMjApCisjZGVmaW5lIEVOQUJMRV9PTl9JTklUCQkoMSA8PCAxMSkJLyogRW5hYmxlIHVwb24gZnJhbWV3b3JrIGluaXQgKi8KKyNkZWZpbmUgSU5WRVJUX0VOQUJMRSAgICAgICAgICAgKDEgPDwgMTIpICAgICAgIC8qIDAgZW5hYmxlcywgMSBkaXNhYmxlcyAqLworLyogYml0cyAxMy0yMCBhcmUgY3VycmVudGx5IGZyZWUgKi8KICNkZWZpbmUgQ0xPQ0tfSU5fT01BUDMxMAkoMSA8PCAyMSkKICNkZWZpbmUgQ0xPQ0tfSU5fT01BUDczMAkoMSA8PCAyMikKICNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE1MTAJKDEgPDwgMjMpCiAjZGVmaW5lIENMT0NLX0lOX09NQVAxNlhYCSgxIDw8IDI0KQogI2RlZmluZSBDTE9DS19JTl9PTUFQMjQyWAkoMSA8PCAyNSkKICNkZWZpbmUgQ0xPQ0tfSU5fT01BUDI0M1gJKDEgPDwgMjYpCisjZGVmaW5lIENMT0NLX0lOX09NQVAzNDNYCSgxIDw8IDI3KQkvKiBjbG9ja3MgY29tbW9uIHRvIGFsbCAzNDNYICovCisjZGVmaW5lIFBBUkVOVF9DT05UUk9MU19DTE9DSwkoMSA8PCAyOCkKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDM0MzBFUzEJKDEgPDwgMjkpCS8qIDM0MzBFUzEgY2xvY2tzIG9ubHkgKi8KKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDM0MzBFUzIJKDEgPDwgMzApCS8qIDM0MzBFUzIgY2xvY2tzIG9ubHkgKi8KKworLyogQ2xrc2VsX3JhdGUgZmxhZ3MgKi8KKyNkZWZpbmUgREVGQVVMVF9SQVRFCQkoMSA8PCAwKQorI2RlZmluZSBSQVRFX0lOXzI0MlgJCSgxIDw8IDEpCisjZGVmaW5lIFJBVEVfSU5fMjQzWAkJKDEgPDwgMikKKyNkZWZpbmUgUkFURV9JTl8zNDNYCQkoMSA8PCAzKQkvKiByYXRlcyBjb21tb24gdG8gYWxsIDM0M1ggKi8KKyNkZWZpbmUgUkFURV9JTl8zNDMwRVMyCQkoMSA8PCA0KQkvKiAzNDMwRVMyIHJhdGVzIG9ubHkgKi8KKworI2RlZmluZSBSQVRFX0lOXzI0WFgJCShSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpCisKKworLyogQ01fQ0xLU0VMMl9QTEwuQ09SRV9DTEtfU1JDIG9wdGlvbnMgKDI0WFgpICovCisjZGVmaW5lIENPUkVfQ0xLX1NSQ18zMksJCTAKKyNkZWZpbmUgQ09SRV9DTEtfU1JDX0RQTEwJCTEKKyNkZWZpbmUgQ09SRV9DTEtfU1JDX0RQTExfWDIJCTIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb21tb24uaAppbmRleCA0NDJhZWNiLi4yMjRlMDA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmgKQEAgLTI3LDkgKzI3LDcgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVBfQ09NTU9OX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVBfQ09NTU9OX0gKIAotI2lmZGVmIENPTkZJR19JMkNfT01BUAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2VuZGlmCiAKIHN0cnVjdCBzeXNfdGltZXI7CiAKQEAgLTQxLDcgKzM5LDEyIEBACiAJCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKIAkJCQkgdW5zaWduZWQgbGVuKTsKICNlbHNlCi0jZGVmaW5lIG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhhLCBiLCBjLCBkKQkwCitzdGF0aWMgaW5saW5lIGludCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCisJCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKKwkJCQkgdW5zaWduZWQgbGVuKQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FSQ0hfQVJNX01BQ0hfT01BUF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb250cm9sLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbnRyb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ0YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb250cm9sLmgKQEAgLTAsMCArMSwxOTEgQEAKKyNpZm5kZWYgX19BU01fQVJDSF9DT05UUk9MX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DT05UUk9MX0gKKworLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29udHJvbC5oCisgKgorICogT01BUDIvMyBTeXN0ZW0gQ29udHJvbCBNb2R1bGUgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKworI2RlZmluZSBPTUFQMjQyWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAorCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDJYX0NUUkxfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMjQzWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAorCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMzQzWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAorCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSArIChyZWcpKQorCisvKgorICogQXMgZWxzZXdoZXJlLCB0aGUgIk9NQVAyXyIgcHJlZml4IGluZGljYXRlcyB0aGF0IHRoZSBtYWNybyBpcyB2YWxpZCBmb3IKKyAqIE9NQVAyNFhYIGFuZCBPTUFQMzRYWC4KKyAqLworCisvKiBDb250cm9sIHN1Ym1vZHVsZSBvZmZzZXRzICovCisKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9JTlRFUkZBQ0UJCTB4MDAwCisjZGVmaW5lIE9NQVAyX0NPTlRST0xfUEFEQ09ORlMJCTB4MDMwCisjZGVmaW5lIE9NQVAyX0NPTlRST0xfR0VORVJBTAkJMHgyNzAKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9NRU1fV0tVUAkweDYwMAorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1BBRENPTkZTX1dLVVAJMHhhMDAKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9HRU5FUkFMX1dLVVAJMHhhNjAKKworLyogQ29udHJvbCByZWdpc3RlciBvZmZzZXRzIC0gcmVhZC93cml0ZSB3aXRoIG9tYXBfY3RybF97cmVhZCx3cml0ZX17YndsfSgpICovCisKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9TWVNDT05GSUcJCShPTUFQMl9DT05UUk9MX0lOVEVSRkFDRSArIDB4MTApCisKKy8qIENPTlRST0xfR0VORVJBTCByZWdpc3RlciBvZmZzZXRzIGNvbW1vbiB0byBPTUFQMiAmIDMgKi8KKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9ERVZDT05GMAkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDAwNCkKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9NU1VTUEVORE1VWF8wCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwMjApCisjZGVmaW5lIE9NQVAyX0NPTlRST0xfTVNVU1BFTkRNVVhfMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDI0KQorI2RlZmluZSBPTUFQMl9DT05UUk9MX01TVVNQRU5ETVVYXzIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDAyOCkKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9NU1VTUEVORE1VWF8zCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwMmMpCisjZGVmaW5lIE9NQVAyX0NPTlRST0xfTVNVU1BFTkRNVVhfNAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDMwKQorI2RlZmluZSBPTUFQMl9DT05UUk9MX01TVVNQRU5ETVVYXzUJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDAzNCkKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9TRUNfQ1RSTAkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA0MCkKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9SUFVCX0tFWV9IXzAJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA5MCkKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9SUFVCX0tFWV9IXzEJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA5NCkKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9SUFVCX0tFWV9IXzIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA5OCkKKyNkZWZpbmUgT01BUDJfQ09OVFJPTF9SUFVCX0tFWV9IXzMJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA5YykKKworLyogMjQyeC1vbmx5IENPTlRST0xfR0VORVJBTCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVAyNDJYX0NPTlRST0xfREVWQ09ORglPTUFQMl9DT05UUk9MX0RFVkNPTkYwIC8qIG1hdGNoIFRSTSAqLworI2RlZmluZSBPTUFQMjQyWF9DT05UUk9MX09DTV9SQU1fUEVSTQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDY4KQorCisvKiAyNDN4LW9ubHkgQ09OVFJPTF9HRU5FUkFMIHJlZ2lzdGVyIG9mZnNldHMgKi8KKy8qIENPTlRST0xfSVZBMl9CT09Ue0FERFIsTU9EfSBhcmUgYXQgdGhlIHNhbWUgcGxhY2Ugb24gMzQzeCAtIG5vdGVkIGJlbG93ICovCisjZGVmaW5lIE9NQVAyNDNYX0NPTlRST0xfREVWQ09ORjEJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA3OCkKKyNkZWZpbmUgT01BUDI0M1hfQ09OVFJPTF9DU0lSWEZFCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwN2MpCisjZGVmaW5lIE9NQVAyNDNYX0NPTlRST0xfSVZBMl9CT09UQUREUgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTkwKQorI2RlZmluZSBPTUFQMjQzWF9DT05UUk9MX0lWQTJfQk9PVE1PRAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTk0KQorI2RlZmluZSBPTUFQMjQzWF9DT05UUk9MX0lWQTJfR0VNQ0ZHCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxOTgpCisKKy8qIDI0eHgtb25seSBDT05UUk9MX0dFTkVSQUwgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX0RFQk9CUwkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9FTVVfU1VQUE9SVAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDA4KQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1NFQ19URVNUCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwNDQpCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfUFNBX0NUUkwJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA0OCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9QU0FfQ01ECShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwNGMpCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfUFNBX1ZBTFVFCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwNTApCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfU0VDX0VNVQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDYwKQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1NFQ19UQVAJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA2NCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9PQ01fUFVCX1JBTV9BREQJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA2YykKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9FWFRfU0VDX1JBTV9TVEFSVF9BREQJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA3MCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9FWFRfU0VDX1JBTV9TVE9QX0FERAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDc0CisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfU0VDX1NUQVRVUwkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA4MCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9TRUNfRVJSX1NUQVRVUwkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA4NCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9TVEFUVVMJCQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDg4KQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX0dFTkVSQUxfUFVSUE9TRV9TVEFUVVMJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA4YykKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9SQU5EX0tFWV8wCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwYTApCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfUkFORF9LRVlfMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGE0KQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1JBTkRfS0VZXzIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBhOCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9SQU5EX0tFWV8zCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwYWMpCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfQ1VTVF9LRVlfMAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGIwKQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX0NVU1RfS0VZXzEJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBiNCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9URVNUX0tFWV8wCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwYzApCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfVEVTVF9LRVlfMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGM0KQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1RFU1RfS0VZXzIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBjOCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9URVNUX0tFWV8zCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwY2MpCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfVEVTVF9LRVlfNAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGQwKQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1RFU1RfS0VZXzUJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBkNCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9URVNUX0tFWV82CShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZDgpCisjZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfVEVTVF9LRVlfNwkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGRjKQorI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1RFU1RfS0VZXzgJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBlMCkKKyNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9URVNUX0tFWV85CShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZTQpCisKKy8qIDM0eHgtb25seSBDT05UUk9MX0dFTkVSQUwgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1BBRENPTkZfT0ZGCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwMDApCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfTUVNX0RGVFJXMAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDA4KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX01FTV9ERlRSVzEJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDAwYykKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDY4KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0NTSVJYRkUJCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwNmMpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfU0VDX1NUQVRVUwkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA3MCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9TRUNfRVJSX1NUQVRVUwkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA3NCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9TRUNfRVJSX1NUQVRVU19ERUJVRwkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDc4KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1NUQVRVUwkJCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwODApCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfR0VORVJBTF9QVVJQT1NFX1NUQVRVUwkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDg0KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1JQVUJfS0VZX0hfNAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGEwKQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1JBTkRfS0VZXzAJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBhOCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9SQU5EX0tFWV8xCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwYWMpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfUkFORF9LRVlfMgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGIwKQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1JBTkRfS0VZXzMJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBiNCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9URVNUX0tFWV8wCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwYzgpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVTVF9LRVlfMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGNjKQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFU1RfS0VZXzIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBkMCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9URVNUX0tFWV8zCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZDQpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVTVF9LRVlfNAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGQ4KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFU1RfS0VZXzUJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBkYykKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9URVNUX0tFWV82CShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZTApCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVTVF9LRVlfNwkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGU0KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFU1RfS0VZXzgJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBlOCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9URVNUX0tFWV85CShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZWMpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVTVF9LRVlfMTAJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBmMCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9URVNUX0tFWV8xMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGY0KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFU1RfS0VZXzEyCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZjgpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVTVF9LRVlfMTMJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBmYykKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9JVkEyX0JPT1RBRERSCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxOTApCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UTU9ECShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxOTQpCisKKy8qCisgKiBSRVZJU0lUOiBUaGlzIGxpc3Qgb2YgcmVnaXN0ZXJzIGlzIG5vdCBjb21wcmVoZW5zaXZlIC0gdGhlcmUgYXJlIG1vcmUKKyAqIHRoYXQgc2hvdWxkIGJlIGFkZGVkLgorICovCisKKy8qCisgKiBDb250cm9sIG1vZHVsZSByZWdpc3RlciBiaXQgZGVmaW5lcyAtIHRoZXNlIHNob3VsZCBldmVudHVhbGx5IGdvIGludG8KKyAqIHRoZWlyIG93biByZWdiaXRzIGZpbGUuICBTb21lIG9mIHRoZXNlIHdpbGwgYmUgY29tcGxpY2F0ZWQsIGRlcGVuZGluZworICogb24gdGhlIGRldmljZSB0eXBlIChnZW5lcmFsLXB1cnBvc2UsIGVtdWxhdG9yLCB0ZXN0LCBzZWN1cmUsIGJhZCwgb3RoZXIpCisgKiBhbmQgdGhlIHNlY3VyaXR5IG1vZGUgKHNlY3VyZSwgbm9uLXNlY3VyZSwgZG9uJ3QgY2FyZSkKKyAqLworLyogQ09OVFJPTF9ERVZDT05GMCBiaXRzICovCisjZGVmaW5lIE9NQVAyNFhYX1VTQlNUQU5EQllDVFJMCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDJfTUNCU1AyX0NMS1NfTUFTSwkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDJfTUNCU1AxX0NMS1NfTUFTSwkJKDEgPDwgMikKKworLyogQ09OVFJPTF9ERVZDT05GMSBiaXRzICovCisjZGVmaW5lIE9NQVAyX01DQlNQNV9DTEtTX01BU0sJCSgxIDw8IDQpIC8qID4gMjQyeCAqLworI2RlZmluZSBPTUFQMl9NQ0JTUDRfQ0xLU19NQVNLCQkoMSA8PCAyKSAvKiA+IDI0MnggKi8KKyNkZWZpbmUgT01BUDJfTUNCU1AzX0NMS1NfTUFTSwkJKDEgPDwgMCkgLyogPiAyNDJ4ICovCisKKy8qIENPTlRST0xfU1RBVFVTIGJpdHMgKi8KKyNkZWZpbmUgT01BUDJfREVWSUNFVFlQRV9NQVNLCQkoMHg3IDw8IDgpCisjZGVmaW5lIE9NQVAyX1NZU0JPT1RfNV9NQVNLCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMl9TWVNCT09UXzRfTUFTSwkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDJfU1lTQk9PVF8zX01BU0sJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyX1NZU0JPT1RfMl9NQVNLCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMl9TWVNCT09UXzFfTUFTSwkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDJfU1lTQk9PVF8wX01BU0sJCSgxIDw8IDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKK2V4dGVybiB2b2lkIG9tYXBfY3RybF9iYXNlX3NldCh1MzIgYmFzZSk7CitleHRlcm4gdTMyIG9tYXBfY3RybF9iYXNlX2dldCh2b2lkKTsKK2V4dGVybiB1OCBvbWFwX2N0cmxfcmVhZGIodTE2IG9mZnNldCk7CitleHRlcm4gdTE2IG9tYXBfY3RybF9yZWFkdyh1MTYgb2Zmc2V0KTsKK2V4dGVybiB1MzIgb21hcF9jdHJsX3JlYWRsKHUxNiBvZmZzZXQpOworZXh0ZXJuIHZvaWQgb21hcF9jdHJsX3dyaXRlYih1OCB2YWwsIHUxNiBvZmZzZXQpOworZXh0ZXJuIHZvaWQgb21hcF9jdHJsX3dyaXRldyh1MTYgdmFsLCB1MTYgb2Zmc2V0KTsKK2V4dGVybiB2b2lkIG9tYXBfY3RybF93cml0ZWwodTMyIHZhbCwgdTE2IG9mZnNldCk7CisjZWxzZQorI2RlZmluZSBvbWFwX2N0cmxfYmFzZV9zZXQoeCkJCVdBUk5fT04oMSkKKyNkZWZpbmUgb21hcF9jdHJsX2Jhc2VfZ2V0KCkJCTAKKyNkZWZpbmUgb21hcF9jdHJsX3JlYWRiKHgpCQkwCisjZGVmaW5lIG9tYXBfY3RybF9yZWFkdyh4KQkJMAorI2RlZmluZSBvbWFwX2N0cmxfcmVhZGwoeCkJCTAKKyNkZWZpbmUgb21hcF9jdHJsX3dyaXRlYih4LCB5KQkJV0FSTl9PTigxKQorI2RlZmluZSBvbWFwX2N0cmxfd3JpdGV3KHgsIHkpCQlXQVJOX09OKDEpCisjZGVmaW5lIG9tYXBfY3RybF93cml0ZWwoeCwgeSkJCVdBUk5fT04oMSkKKyNlbmRpZgorI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19BU01fQVJDSF9DT05UUk9MX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAppbmRleCBjNjFmODY4Li5kYTk3NzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaApAQCAtMjQsMTEgKzI0LDE3IEBACiAjaWZuZGVmIEFTTV9BUkNIX0RTUF9DT01NT05fSAogI2RlZmluZSBBU01fQVJDSF9EU1BfQ09NTU9OX0gKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NTVVfRldLKQogZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVxdWVzdF9tcHVpKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVsZWFzZV9tcHVpKHZvaWQpOwogZXh0ZXJuIGludCBvbWFwX2RzcF9yZXF1ZXN0X21lbSh2b2lkKTsKIGV4dGVybiBpbnQgb21hcF9kc3BfcmVsZWFzZV9tZW0odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgb21hcF9kc3BfcmVxdWVzdF9tZW0odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgb21hcF9kc3BfcmVsZWFzZV9tZW0oKQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZW5kaWYgLyogQVNNX0FSQ0hfRFNQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKaW5kZXggZjY5NjdjOC4uNzRjZDU3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUwpAQCAtNjgsNyArNjgsNyBAQAogCQkuZW5kbQogCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbGRyCVxiYXNlLCA9VkFfSUNfQkFTRQorCQlsZHIJXGJhc2UsID1PTUFQMl9WQV9JQ19CQVNFCiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4OThdIC8qIElSUSBwZW5kaW5nIHJlZyAxICovCiAJCWNtcAlcaXJxbnIsICMweDAKIAkJYm5lCTIyMjJmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oCmluZGV4IDE2NGRhMDkuLjg2NjIxYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oCkBAIC04Miw2MiArODIsMzUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogd3JhcHBlcnMgZm9yICJuZXcgc3R5bGUiIEdQSU8gY2FsbHMuIHRoZSBvbGQgT01BUC1zcGVjZmljIG9uZXMgc2hvdWxkCi0gKiBldmVudHVhbGx5IGJlIHJlbW92ZWQgKGFsb25nIHdpdGggdGhpcyBlcnJuby5oIGluY2x1c2lvbiksIGFuZCBtYXliZQotICogZ3Bpb3Mgc2hvdWxkIHB1dCBNUFVJT3MgbGFzdCB0b28uCisvKiBXcmFwcGVycyBmb3IgIm5ldyBzdHlsZSIgR1BJTyBjYWxscywgdXNpbmcgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZQorICogd2hpY2ggbGV0cyB1cyBwbHVnIGluIEZQR0EsIEkyQywgYW5kIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKyAqICoKKyAqIFRoZSBvcmlnaW5hbCBPTUFQLXNwZWNmaWMgY2FsbHMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICAqLwogCi0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlyZXR1cm4gb21hcF9yZXF1ZXN0X2dwaW8oZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKLXsKLQlvbWFwX2ZyZWVfZ3BpbyhncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19ncGlvX3NldF9kaXJlY3Rpb24odW5zaWduZWQgZ3BpbywgaW50IGlzX2lucHV0KQotewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewotCQlpZiAoZ3BpbyA+IE9NQVBfTUFYX0dQSU9fTElORVMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQlpZiAoZ3BpbyA+IChPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGdwaW8sIGlzX2lucHV0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gX19ncGlvX3NldF9kaXJlY3Rpb24oZ3BpbywgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGdwaW8sIHZhbHVlKTsKLQlyZXR1cm4gX19ncGlvX3NldF9kaXJlY3Rpb24oZ3BpbywgMCk7Ci19CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCiB7Ci0JcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKGdwaW8pOworCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChncGlvLCB2YWx1ZSk7CisJX19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7CiB9CiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCiB7Ci0JcmV0dXJuIE9NQVBfR1BJT19JUlEoZ3Bpbyk7CisJaWYgKGdwaW8gPCAoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2KSkKKwkJcmV0dXJuIE9NQVBfR1BJT19JUlEoZ3Bpbyk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpb2V4cGFuZGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW9leHBhbmRlci5oCmluZGV4IDdhNDNiMGEuLjRlZWQxZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpb2V4cGFuZGVyLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvZXhwYW5kZXIuaApAQCAtMTgsNyArMTgsMTggQEAKIAogLyogRnVuY3Rpb24gUHJvdG90eXBlcyBmb3IgR1BJTyBFeHBhbmRlciBmdW5jdGlvbnMgKi8KIAorI2lmZGVmIENPTkZJR19HUElPRVhQQU5ERVJfT01BUAogaW50IHJlYWRfZ3Bpb19leHBhKHU4ICosIGludCk7CiBpbnQgd3JpdGVfZ3Bpb19leHBhKHU4ICwgaW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCByZWFkX2dwaW9fZXhwYSh1OCAqdmFsLCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX2dwaW9fZXhwYSh1OCB2YWwsIGludCBhZGRyKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfR1BJT0VYUEFOREVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaAppbmRleCAyODkwODJkLi4xNjA1NzhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oCkBAIC04MCw2ICs4MCwxMyBAQAogI2RlZmluZSBPTUFQMjQzWF9HUE1DX1BIWVMJT01BUDI0M1hfR1BNQ19CQVNFCS8qIDB4NDkwMDAwMDAgKi8KICNkZWZpbmUgT01BUDI0M1hfR1BNQ19WSVJUCTB4RkUwMDAwMDAKICNkZWZpbmUgT01BUDI0M1hfR1BNQ19TSVpFCVNaXzFNCisjZGVmaW5lIE9NQVAyNDNYX1NEUkNfUEhZUwlPTUFQMjQzWF9TRFJDX0JBU0UKKyNkZWZpbmUgT01BUDI0M1hfU0RSQ19WSVJUCTB4RkQwMDAwMDAKKyNkZWZpbmUgT01BUDI0M1hfU0RSQ19TSVpFCVNaXzFNCisjZGVmaW5lIE9NQVAyNDNYX1NNU19QSFlTCU9NQVAyNDNYX1NNU19CQVNFCisjZGVmaW5lIE9NQVAyNDNYX1NNU19WSVJUCTB4RkMwMDAwMDAKKyNkZWZpbmUgT01BUDI0M1hfU01TX1NJWkUJU1pfMU0KKwogI2VuZGlmCiAKICNkZWZpbmUgSU9fT0ZGU0VUCTB4OTAwMDAwMDAKQEAgLTg4LDE2ICs5NSw3MyBAQAogI2RlZmluZSBpb192MnAodmEpCSgodmEpIC0gSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCiAKIC8qIERTUCAqLwotI2RlZmluZSBEU1BfTUVNXzI0WFhfUEhZUwlPTUFQMjRYWF9EU1BfTUVNX0JBU0UJLyogMHg1ODAwMDAwMCAqLworI2RlZmluZSBEU1BfTUVNXzI0WFhfUEhZUwlPTUFQMjQyMF9EU1BfTUVNX0JBU0UJLyogMHg1ODAwMDAwMCAqLwogI2RlZmluZSBEU1BfTUVNXzI0WFhfVklSVAkweGUwMDAwMDAwCiAjZGVmaW5lIERTUF9NRU1fMjRYWF9TSVpFCTB4MjgwMDAKLSNkZWZpbmUgRFNQX0lQSV8yNFhYX1BIWVMJT01BUDI0WFhfRFNQX0lQSV9CQVNFCS8qIDB4NTkwMDAwMDAgKi8KKyNkZWZpbmUgRFNQX0lQSV8yNFhYX1BIWVMJT01BUDI0MjBfRFNQX0lQSV9CQVNFCS8qIDB4NTkwMDAwMDAgKi8KICNkZWZpbmUgRFNQX0lQSV8yNFhYX1ZJUlQJMHhlMTAwMDAwMAogI2RlZmluZSBEU1BfSVBJXzI0WFhfU0laRQlTWl80SwotI2RlZmluZSBEU1BfTU1VXzI0WFhfUEhZUwlPTUFQMjRYWF9EU1BfTU1VX0JBU0UJLyogMHg1YTAwMDAwMCAqLworI2RlZmluZSBEU1BfTU1VXzI0WFhfUEhZUwlPTUFQMjQyMF9EU1BfTU1VX0JBU0UJLyogMHg1YTAwMDAwMCAqLwogI2RlZmluZSBEU1BfTU1VXzI0WFhfVklSVAkweGUyMDAwMDAwCiAjZGVmaW5lIERTUF9NTVVfMjRYWF9TSVpFCVNaXzRLCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisKKy8qIFdlIG1hcCBib3RoIEwzIGFuZCBMNCBvbiBPTUFQMyAqLworI2RlZmluZSBMM18zNFhYX1BIWVMJCUwzXzM0WFhfQkFTRQkvKiAweDY4MDAwMDAwICovCisjZGVmaW5lIEwzXzM0WFhfVklSVAkJMHhmODAwMDAwMAorI2RlZmluZSBMM18zNFhYX1NJWkUJCVNaXzFNICAgLyogNDRrQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0ICovCisKKyNkZWZpbmUgTDRfMzRYWF9QSFlTCQlMNF8zNFhYX0JBU0UJLyogMHg0ODAwMDAwMCAqLworI2RlZmluZSBMNF8zNFhYX1ZJUlQJCTB4ZDgwMDAwMDAKKyNkZWZpbmUgTDRfMzRYWF9TSVpFCQlTWl80TSAgIC8qIDFNQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0ICovCisKKy8qCisgKiBOZWVkIHRvIGxvb2sgYXQgdGhlIFNpemUgNE0gZm9yIEw0LgorICogVlBPTTM0MzAgd2FzIG5vdCB3b3JraW5nIGZvciBJbnQgY29udHJvbGxlcgorICovCisKKyNkZWZpbmUgTDRfV0tfMzRYWF9QSFlTCQlMNF9XS18zNFhYX0JBU0UgLyogMHg0ODMwMDAwMCAqLworI2RlZmluZSBMNF9XS18zNFhYX1ZJUlQJCTB4ZDgzMDAwMDAKKyNkZWZpbmUgTDRfV0tfMzRYWF9TSVpFCQlTWl8xTQorCisjZGVmaW5lIEw0X1BFUl8zNFhYX1BIWVMJTDRfUEVSXzM0WFhfQkFTRSAvKiAweDQ5MDAwMDAwICovCisjZGVmaW5lIEw0X1BFUl8zNFhYX1ZJUlQJMHhkOTAwMDAwMAorI2RlZmluZSBMNF9QRVJfMzRYWF9TSVpFCVNaXzFNCisKKyNkZWZpbmUgTDRfRU1VXzM0WFhfUEhZUwlMNF9FTVVfMzRYWF9CQVNFIC8qIDB4NTQwMDAwMDAgKi8KKyNkZWZpbmUgTDRfRU1VXzM0WFhfVklSVAkweGU0MDAwMDAwCisjZGVmaW5lIEw0X0VNVV8zNFhYX1NJWkUJU1pfNjRNCisKKyNkZWZpbmUgT01BUDM0WFhfR1BNQ19QSFlTCU9NQVAzNFhYX0dQTUNfQkFTRSAvKiAweDZFMDAwMDAwICovCisjZGVmaW5lIE9NQVAzNFhYX0dQTUNfVklSVAkweEZFMDAwMDAwCisjZGVmaW5lIE9NQVAzNFhYX0dQTUNfU0laRQlTWl8xTQorCisjZGVmaW5lIE9NQVAzNDNYX1NNU19QSFlTCU9NQVAzNDNYX1NNU19CQVNFIC8qIDB4NkMwMDAwMDAgKi8KKyNkZWZpbmUgT01BUDM0M1hfU01TX1ZJUlQJMHhGQzAwMDAwMAorI2RlZmluZSBPTUFQMzQzWF9TTVNfU0laRQlTWl8xTQorCisjZGVmaW5lIE9NQVAzNDNYX1NEUkNfUEhZUwlPTUFQMzQzWF9TRFJDX0JBU0UgLyogMHg2RDAwMDAwMCAqLworI2RlZmluZSBPTUFQMzQzWF9TRFJDX1ZJUlQJMHhGRDAwMDAwMAorI2RlZmluZSBPTUFQMzQzWF9TRFJDX1NJWkUJU1pfMU0KKworCisjZGVmaW5lIElPX09GRlNFVAkJMHg5MDAwMDAwMAorI2RlZmluZSBJT19BRERSRVNTKHBhKQkJKChwYSkgKyBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBpb19wMnYocGEpCQkoKHBhKSArIElPX09GRlNFVCkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIGlvX3YycCh2YSkJCSgodmEpIC0gSU9fT0ZGU0VUKS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KKworLyogRFNQICovCisjZGVmaW5lIERTUF9NRU1fMzRYWF9QSFlTCU9NQVAzNFhYX0RTUF9NRU1fQkFTRQkvKiAweDU4MDAwMDAwICovCisjZGVmaW5lIERTUF9NRU1fMzRYWF9WSVJUCTB4ZTAwMDAwMDAKKyNkZWZpbmUgRFNQX01FTV8zNFhYX1NJWkUJMHgyODAwMAorI2RlZmluZSBEU1BfSVBJXzM0WFhfUEhZUwlPTUFQMzRYWF9EU1BfSVBJX0JBU0UJLyogMHg1OTAwMDAwMCAqLworI2RlZmluZSBEU1BfSVBJXzM0WFhfVklSVAkweGUxMDAwMDAwCisjZGVmaW5lIERTUF9JUElfMzRYWF9TSVpFCVNaXzRLCisjZGVmaW5lIERTUF9NTVVfMzRYWF9QSFlTCU9NQVAzNFhYX0RTUF9NTVVfQkFTRQkvKiAweDVhMDAwMDAwICovCisjZGVmaW5lIERTUF9NTVVfMzRYWF9WSVJUCTB4ZTIwMDAwMDAKKyNkZWZpbmUgRFNQX01NVV8zNFhYX1NJWkUJU1pfNEsKKwogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbW1jLmgKaW5kZXggYjcwZTM3Yi4uYzk1ODhmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tbWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21tYy5oCkBAIC0xOCw2ICsxOCw4IEBACiAjZGVmaW5lIE9NQVBfTU1DX01BWF9TTE9UUwkyCiAKIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3Qgb21hcF9tbWNfY29uZgljb25mOworCiAJdW5zaWduZWQgZW5hYmxlZDoxOwogCS8qIG51bWJlciBvZiBzbG90cyBvbiBib2FyZCAqLwogCXVuc2lnbmVkIG5yX3Nsb3RzOjI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAppbmRleCBiOGZmZjUwLi5mZjlhNWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKQEAgLTQsOSArNCwxMCBAQAogICogVGFibGUgb2YgdGhlIE9tYXAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBGVU5DX01VWCBhbmQKICAqIFBVTExfRFdOIGNvbWJpbmF0aW9ucy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnkubGluZGdyZW5Abm9raWEuY29tPgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNywxNCArMjgsNiBAQAogICoJIC0gVzgJICAgICA9IGJhbGwKICAqCSAtIDE2MTAJICAgICA9IDE1MTAgb3IgMTYxMCwgbm9uZSBpZiBjb21tb24gZm9yIGJvdGggMTUxMCBhbmQgMTYxMAogICoJIC0gTU1DMl9EQVQwID0gZnVuY3Rpb24KLSAqCi0gKiBDaGFuZ2UgbG9nOgotICogICBBZGRlZCBlbnRyeSBmb3IgdGhlIEkyQyBpbnRlcmZhY2UuICgwMkZlYiAyMDA0KQotICogICBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKLSAqCi0gKiAgIEFkZGVkIGVudHJ5IGZvciB0aGUga2V5cGFkIGFuZCB1d2lyZSBDUzEuICgwOU1hciAyMDA0KQotICogICBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKLSAqCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX01VWF9ICkBAIC00NjksNyArNDYyLDEyIEBACiAJQUE4XzI0MlhfR1BJTzU4LAogCVkyMF8yNFhYX0dQSU82MCwKIAlXNF9fMjRYWF9HUElPNzQsCisJTjE1XzI0WFhfR1BJTzg1LAogCU0xNV8yNFhYX0dQSU85MiwKKwlQMjBfMjRYWF9HUElPOTMsCisJUDE4XzI0WFhfR1BJTzk1LAorCU0xOF8yNFhYX0dQSU85NiwKKwlMMTRfMjRYWF9HUElPOTcsCiAJSjE1XzI0WFhfR1BJTzk5LAogCVYxNF8yNFhYX0dQSU8xMTcsCiAJUDE0XzI0WFhfR1BJTzEyNSwKQEAgLTQ5NCw4ICs0OTIsNiBAQAogCUQzXzI0MlhfRE1BUkVRNCwKIAlFM18yNDJYX0RNQVJFUTUsCiAKLQlQMjBfMjRYWF9UU0NfSVJRLAotCiAJLyogVUFSVDMgKi8KIAlLMTVfMjRYWF9VQVJUM19UWCwKIAlLMTRfMjRYWF9VQVJUM19SWCwKQEAgLTU1NywxMyArNTUzLDU3IEBACiAJQjNfXzI0WFhfS0JSNSwKIAlBQTRfMjRYWF9LQkMyLAogCUIxM18yNFhYX0tCQzYsCisKKwkvKiAyNDMwIFVTQiAqLworCUFEOV8yNDMwX1VTQjBfUFVFTiwKKwlZMTFfMjQzMF9VU0IwX1ZQLAorCUFEN18yNDMwX1VTQjBfVk0sCisJQUU3XzI0MzBfVVNCMF9SQ1YsCisJQUQ0XzI0MzBfVVNCMF9UWEVOLAorCUFGOV8yNDMwX1VTQjBfU0UwLAorCUFFNl8yNDMwX1VTQjBfREFULAorCUFEMjRfMjQzMF9VU0IxX1NFMCwKKwlBQjI0XzI0MzBfVVNCMV9SQ1YsCisJWTI1XzI0MzBfVVNCMV9UWEVOLAorCUFBMjZfMjQzMF9VU0IxX0RBVCwKKworCS8qIDI0MzAgSFMtVVNCICovCisJQUQ5XzI0MzBfVVNCMEhTX0RBVEEzLAorCVkxMV8yNDMwX1VTQjBIU19EQVRBNCwKKwlBRDdfMjQzMF9VU0IwSFNfREFUQTUsCisJQUU3XzI0MzBfVVNCMEhTX0RBVEE2LAorCUFENF8yNDMwX1VTQjBIU19EQVRBMiwKKwlBRjlfMjQzMF9VU0IwSFNfREFUQTAsCisJQUU2XzI0MzBfVVNCMEhTX0RBVEExLAorCUFFOF8yNDMwX1VTQjBIU19DTEssCisJQUQ4XzI0MzBfVVNCMEhTX0RJUiwKKwlBRTVfMjQzMF9VU0IwSFNfU1RQLAorCUFFOV8yNDMwX1VTQjBIU19OWFQsCisJQUM3XzI0MzBfVVNCMEhTX0RBVEE3LAorCisJLyogMjQzMCBNY0JTUCAqLworCUFDMTBfMjQzMF9NQ0JTUDJfRlNYLAorCUFEMTZfMjQzMF9NQ0JTUDJfQ0xYLAorCUFFMTNfMjQzMF9NQ0JTUDJfRFgsCisJQUQxM18yNDMwX01DQlNQMl9EUiwKKwlBQzEwXzI0MzBfTUNCU1AyX0ZTWF9PRkYsCisJQUQxNl8yNDMwX01DQlNQMl9DTFhfT0ZGLAorCUFFMTNfMjQzMF9NQ0JTUDJfRFhfT0ZGLAorCUFEMTNfMjQzMF9NQ0JTUDJfRFJfT0ZGLAorCit9OworCitzdHJ1Y3Qgb21hcF9tdXhfY2ZnIHsKKwlzdHJ1Y3QgcGluX2NvbmZpZwkqcGluczsKKwl1bnNpZ25lZCBsb25nCQlzaXplOworCWludAkJCSgqY2ZnX3JlZykoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZyk7CiB9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfTVVYCiAvKiBzZXR1cCBwaW4gbXV4aW5nIGluIExpbnV4ICovCiBleHRlcm4gaW50IG9tYXAxX211eF9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBvbWFwMl9tdXhfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgb21hcF9tdXhfcmVnaXN0ZXIoc3RydWN0IHBpbl9jb25maWcgKiBwaW5zLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCBvbWFwX211eF9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9tdXhfY2ZnICopOwogZXh0ZXJuIGludCBvbWFwX2NmZ19yZWcodW5zaWduZWQgbG9uZyByZWdfY2ZnKTsKICNlbHNlCiAvKiBib290IGxvYWRlciBkb2VzIGl0IGFsbCAobm8gd2FybmluZ3MgZnJvbSBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmgKaW5kZXggMTRjMGY5NC4uYjlmY2FhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDI0eHguaApAQCAtMSwzICsxLDI4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwcm9jZXNzb3Igc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqIG9mIHRoZSBUSSBPTUFQMjRYWC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDI0WFhfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVAyNFhYX0gKIApAQCAtMTMsMzMgKzM4LDcwIEBACiAKIC8qIGludGVycnVwdCBjb250cm9sbGVyICovCiAjZGVmaW5lIE9NQVAyNFhYX0lDX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4ZmUwMDApCi0jZGVmaW5lIFZBX0lDX0JBU0UJCUlPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSkKICNkZWZpbmUgT01BUDI0WFhfSVZBX0lOVENfQkFTRQkweDQwMDAwMDAwCiAjZGVmaW5lIElSUV9TSVJfSVJRCQkweDAwNDAKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCi0jZGVmaW5lIE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4NDAwMCkKLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDgwMDApCi0jZGVmaW5lIE9NQVAyNFhYX1NEUkNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHg5MDAwKQotI2RlZmluZSBPTUFQMjQyWF9DT05UUk9MX1NUQVRVUwkoTDRfMjRYWF9CQVNFICsgMHgyZjgpCi0jZW5kaWYKKyNkZWZpbmUgT01BUDI0MjBfQ1RSTF9CQVNFCUw0XzI0WFhfQkFTRQorI2RlZmluZSBPTUFQMjQyMF8zMktTWU5DVF9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDQwMDApCisjZGVmaW5lIE9NQVAyNDIwX1BSQ01fQkFTRQkoTDRfMjRYWF9CQVNFICsgMHg4MDAwKQorI2RlZmluZSBPTUFQMjQyMF9DTV9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIE9NQVAyNDIwX1BSTV9CQVNFCU9NQVAyNDIwX0NNX0JBU0UKKyNkZWZpbmUgT01BUDI0MjBfU0RSQ19CQVNFCShMM18yNFhYX0JBU0UgKyAweDkwMDApCisjZGVmaW5lIE9NQVAyNDIwX1NNU19CQVNFCTB4NjgwMDgwMDAKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCi0jZGVmaW5lIE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UJKEw0X1dLXzI0M1hfQkFTRSArIDB4MjAwMDApCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fQkFTRQkoTDRfV0tfMjQzWF9CQVNFICsgMHg2MDAwKQotI2RlZmluZSBPTUFQMjRYWF9TRFJDX0JBU0UJKDB4NkQwMDAwMDApCi0jZGVmaW5lIE9NQVAyNDJYX0NPTlRST0xfU1RBVFVTCShMNF8yNFhYX0JBU0UgKyAweDJmOCkKKyNkZWZpbmUgT01BUDI0MzBfMzJLU1lOQ1RfQkFTRQkoTDRfV0tfMjQzWF9CQVNFICsgMHgyMDAwMCkKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9CQVNFCShMNF9XS18yNDNYX0JBU0UgKyAweDYwMDApCisjZGVmaW5lIE9NQVAyNDMwX0NNX0JBU0UJKEw0X1dLXzI0M1hfQkFTRSArIDB4NjAwMCkKKyNkZWZpbmUgT01BUDI0MzBfUFJNX0JBU0UJT01BUDI0MzBfQ01fQkFTRQorCisjZGVmaW5lIE9NQVAyNDNYX1NNU19CQVNFCTB4NkMwMDAwMDAKKyNkZWZpbmUgT01BUDI0M1hfU0RSQ19CQVNFCTB4NkQwMDAwMDAKICNkZWZpbmUgT01BUDI0M1hfR1BNQ19CQVNFCTB4NkUwMDAwMDAKLSNlbmRpZgorI2RlZmluZSBPTUFQMjQzWF9TQ01fQkFTRQkoTDRfV0tfMjQzWF9CQVNFICsgMHgyMDAwKQorI2RlZmluZSBPTUFQMjQzWF9DVFJMX0JBU0UJT01BUDI0M1hfU0NNX0JBU0UKKyNkZWZpbmUgT01BUDI0M1hfSFNfQkFTRQkoTDRfMjRYWF9CQVNFICsgMHgwMDBhYzAwMCkKIAogLyogRFNQIFNTICovCi0jZGVmaW5lIE9NQVAyNFhYX0RTUF9CQVNFCTB4NTgwMDAwMDAKLSNkZWZpbmUgT01BUDI0WFhfRFNQX01FTV9CQVNFCShPTUFQMjRYWF9EU1BfQkFTRSArIDB4MCkKLSNkZWZpbmUgT01BUDI0WFhfRFNQX0lQSV9CQVNFCShPTUFQMjRYWF9EU1BfQkFTRSArIDB4MTAwMDAwMCkKLSNkZWZpbmUgT01BUDI0WFhfRFNQX01NVV9CQVNFCShPTUFQMjRYWF9EU1BfQkFTRSArIDB4MjAwMDAwMCkKKyNkZWZpbmUgT01BUDI0MjBfRFNQX0JBU0UJMHg1ODAwMDAwMAorI2RlZmluZSBPTUFQMjQyMF9EU1BfTUVNX0JBU0UJKE9NQVAyNDIwX0RTUF9CQVNFICsgMHgwKQorI2RlZmluZSBPTUFQMjQyMF9EU1BfSVBJX0JBU0UJKE9NQVAyNDIwX0RTUF9CQVNFICsgMHgxMDAwMDAwKQorI2RlZmluZSBPTUFQMjQyMF9EU1BfTU1VX0JBU0UJKE9NQVAyNDIwX0RTUF9CQVNFICsgMHgyMDAwMDAwKQorCisjZGVmaW5lIE9NQVAyNDNYX0RTUF9CQVNFCTB4NUMwMDAwMDAKKyNkZWZpbmUgT01BUDI0M1hfRFNQX01FTV9CQVNFCShPTUFQMjQzWF9EU1BfQkFTRSArIDB4MCkKKyNkZWZpbmUgT01BUDI0M1hfRFNQX01NVV9CQVNFCShPTUFQMjQzWF9EU1BfQkFTRSArIDB4MTAwMDAwMCkKIAogLyogTWFpbGJveCAqLwogI2RlZmluZSBPTUFQMjRYWF9NQUlMQk9YX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4OTQwMDApCiAKKy8qIENhbWVyYSAqLworI2RlZmluZSBPTUFQMjRYWF9DQU1FUkFfQkFTRQkoTDRfMjRYWF9CQVNFICsgMHg1MjAwMCkKKworLyogU2VjdXJpdHkgKi8KKyNkZWZpbmUgT01BUDI0WFhfU0VDX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4QTAwMDApCisjZGVmaW5lIE9NQVAyNFhYX1NFQ19STkdfQkFTRQkoT01BUDI0WFhfU0VDX0JBU0UgKyAweDAwMDApCisjZGVmaW5lIE9NQVAyNFhYX1NFQ19ERVNfQkFTRQkoT01BUDI0WFhfU0VDX0JBU0UgKyAweDIwMDApCisjZGVmaW5lIE9NQVAyNFhYX1NFQ19TSEExTUQ1X0JBU0UgKE9NQVAyNFhYX1NFQ19CQVNFICsgMHg0MDAwKQorI2RlZmluZSBPTUFQMjRYWF9TRUNfQUVTX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9TRUNfUEtBX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHg4MDAwKQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKworI2RlZmluZSBPTUFQMl8zMktTWU5DVF9CQVNFCU9NQVAyNDIwXzMyS1NZTkNUX0JBU0UKKyNkZWZpbmUgT01BUDJfUFJDTV9CQVNFCQlPTUFQMjQyMF9QUkNNX0JBU0UKKyNkZWZpbmUgT01BUDJfQ01fQkFTRQkJT01BUDI0MjBfQ01fQkFTRQorI2RlZmluZSBPTUFQMl9QUk1fQkFTRQkJT01BUDI0MjBfUFJNX0JBU0UKKyNkZWZpbmUgT01BUDJfVkFfSUNfQkFTRQlJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisKKyNkZWZpbmUgT01BUDJfMzJLU1lOQ1RfQkFTRQlPTUFQMjQzMF8zMktTWU5DVF9CQVNFCisjZGVmaW5lIE9NQVAyX1BSQ01fQkFTRQkJT01BUDI0MzBfUFJDTV9CQVNFCisjZGVmaW5lIE9NQVAyX0NNX0JBU0UJCU9NQVAyNDMwX0NNX0JBU0UKKyNkZWZpbmUgT01BUDJfUFJNX0JBU0UJCU9NQVAyNDMwX1BSTV9CQVNFCisjZGVmaW5lIE9NQVAyX1ZBX0lDX0JBU0UJSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKQorCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDI0WFhfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NkcmMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc2RyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3M2IzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NkcmMuaApAQCAtMCwwICsxLDc1IEBACisjaWZuZGVmIF9fX19BU01fQVJDSF9TRFJDX0gKKyNkZWZpbmUgX19fX0FTTV9BUkNIX1NEUkNfSAorCisvKgorICogT01BUDIvMyBTRFJDL1NNUyByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKworLyogU0RSQyByZWdpc3RlciBvZmZzZXRzIC0gcmVhZC93cml0ZSB3aXRoIHNkcmNfe3JlYWQsd3JpdGV9X3JlZygpICovCisKKyNkZWZpbmUgU0RSQ19TWVNDT05GSUcJCTB4MDEwCisjZGVmaW5lIFNEUkNfRExMQV9DVFJMCQkweDA2MAorI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTCTB4MDY0CisjZGVmaW5lIFNEUkNfRExMQl9DVFJMCQkweDA2OAorI2RlZmluZSBTRFJDX0RMTEJfU1RBVFVTCTB4MDZDCisjZGVmaW5lIFNEUkNfUE9XRVIJCTB4MDcwCisjZGVmaW5lIFNEUkNfTVJfMAkJMHgwODQKKyNkZWZpbmUgU0RSQ19SRlJfQ1RSTF8wCQkweDBhNAorCisvKgorICogVGhlc2UgdmFsdWVzIHJlcHJlc2VudCB0aGUgbnVtYmVyIG9mIG1lbW9yeSBjbG9jayBjeWNsZXMgYmV0d2VlbgorICogYXV0b3JlZnJlc2ggaW5pdGlhdGlvbi4gIFRoZXkgYXNzdW1lIDEgcmVmcmVzaCBwZXIgNjQgbXMgKEpFREVDKSwgODE5MgorICogcm93cyBwZXIgZGV2aWNlLCBhbmQgaW5jbHVkZSBhIHN1YnRyYWN0aW9uIG9mIGEgNTAgY3ljbGUgd2luZG93IGluIHRoZQorICogZXZlbnQgdGhhdCB0aGUgYXV0b3JlZnJlc2ggY29tbWFuZCBpcyBkZWxheWVkIGR1ZSB0byBvdGhlciBTRFJDIGFjdGl2aXR5LgorICogVGhlICd8IDEnIHNldHMgdGhlIEFSRSBmaWVsZCB0byBzZW5kIG9uZSBhdXRvcmVmcmVzaCB3aGVuIHRoZSBhdXRvcmVmcmVzaAorICogY291bnRlciByZWFjaGVzIDAuCisgKgorICogVGhlc2UgcmVwcmVzZW50IG9wdGltYWwgdmFsdWVzIGZvciBjb21tb24gcGFydHMsIGl0IHdvbid0IHdvcmsgZm9yIGFsbC4KKyAqIEFzIGxvbmcgYXMgeW91IHNjYWxlIGRvd24sIG1vc3QgcGFyYW1ldGVycyBhcmUgc3RpbGwgd29yaywgdGhleSBqdXN0CisgKiBiZWNvbWUgc3ViLW9wdGltYWwuIFRoZSBSRlIgdmFsdWUgZ29lcyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBJZiB5b3UKKyAqIGRvbid0IGFkanVzdCBpdCBkb3duIGFzIHlvdXIgY2xvY2sgcGVyaW9kIGluY3JlYXNlcyB0aGUgcmVmcmVzaCBpbnRlcnZhbAorICogd2lsbCBub3QgYmUgbWV0LiBTZXR0aW5nIGFsbCBwYXJhbWV0ZXJzIGZvciBjb21wbGV0ZSB3b3JzdCBjYXNlIG1heSB3b3JrLAorICogYnV0IG1heSBjdXQgbWVtb3J5IHBlcmZvcm1hbmNlIGJ5IDJ4LiBEdWUgdG8gZXJyYXRhIHRoZSBETExzIG5lZWQgdG8gYmUKKyAqIHVubG9ja2VkIGFuZCB0aGVpciB2YWx1ZSBuZWVkcyBydW4gdGltZSBjYWxpYnJhdGlvbi4JQSBkeW5hbWljIGNhbGwgaXMKKyAqIG5lZWQgZm9yIHRoYXQgYXMgbm8gc2luZ2xlIHJpZ2h0IHZhbHVlIGV4aXN0cyBhY29yc3MgcHJvZHVjdGlvbiBzYW1wbGVzLgorICoKKyAqIE9ubHkgdGhlIEZVTEwgc3BlZWQgdmFsdWVzIGFyZSBnaXZlbi4gQ3VycmVudCBjb2RlIGlzIHN1Y2ggdGhhdCByYXRlCisgKiBjaGFuZ2VzIG11c3QgYmUgbWFkZSBhdCBEUExMb3V0eDIuIFRoZSBhY3R1YWwgdmFsdWUgYWRqdXN0bWVudCBmb3IgbG93CisgKiBmcmVxdWVuY3kgb3BlcmF0aW9uIHdpbGwgYmUgaGFuZGxlZCBieSBvbWFwX3NldF9wZXJmb3JtYW5jZSgpCisgKgorICogQnkgaGF2aW5nIHRoZSBib290IGxvYWRlciBib290IHVwIGluIHRoZSBmYXN0ZXN0IEw0IHNwZWVkIGF2YWlsYWJsZSBsaWtlbHkKKyAqIHdpbGwgcmVzdWx0IGluIHNvbWV0aGluZyB3aGljaCB5b3UgY2FuIHN3aXRjaCBiZXR3ZWVuLgorICovCisjZGVmaW5lIFNEUkNfUkZSX0NUUkxfMTY1TUh6CSgweDAwMDQ0YzAwIHwgMSkKKyNkZWZpbmUgU0RSQ19SRlJfQ1RSTF8xMzNNSHoJKDB4MDAwM2RlMDAgfCAxKQorI2RlZmluZSBTRFJDX1JGUl9DVFJMXzEwME1IegkoMHgwMDAyZGEwMSB8IDEpCisjZGVmaW5lIFNEUkNfUkZSX0NUUkxfMTEwTUh6CSgweDAwMDJkYTAxIHwgMSkgLyogTmVlZCB0byBjYWxjICovCisjZGVmaW5lIFNEUkNfUkZSX0NUUkxfQllQQVNTCSgweDAwMDA1MDAwIHwgMSkgLyogTmVlZCB0byBjYWxjICovCisKKworLyoKKyAqIFNNUyByZWdpc3RlciBhY2Nlc3MKKyAqLworCisKKyNkZWZpbmUgT01BUDI0MlhfU01TX1JFR0FERFIocmVnKQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQyMF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDI0M1hfU01TX1JFR0FERFIocmVnKQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDM0M1hfU01TX1JFR0FERFIocmVnKQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMzQzWF9TTVNfQkFTRSArIHJlZykKKworLyogU01TIHJlZ2lzdGVyIG9mZnNldHMgLSByZWFkL3dyaXRlIHdpdGggc21zX3tyZWFkLHdyaXRlfV9yZWcoKSAqLworCisjZGVmaW5lIFNNU19TWVNDT05GSUcJCTB4MDEwCisvKiBSRVZJU0lUOiBmaWxsIGluIG90aGVyIFNNUyByZWdpc3RlcnMgaGVyZSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdXNiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VzYi5oCmluZGV4IDk5YWU5ZWEuLjIxNDdkMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdXNiLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91c2IuaApAQCAtMTMyLDE0ICsxMzIsMTEgQEAKICMJZGVmaW5lCUNPTkZfVVNCX1BXUkROX0RQX1IJKDEgPDwgMSkKIAogLyogT01BUDIgKi8KLSNkZWZpbmUJQ09OVFJPTF9ERVZDT05GX1JFRwkJX19SRUczMihMNF8yNFhYX0JBU0UgKyAweDAyNzQpCiAjCWRlZmluZQlVU0JfVU5JRElSCQkJMHgwCiAjCWRlZmluZQlVU0JfVU5JRElSX1RMTAkJCTB4MQogIwlkZWZpbmUJVVNCX0JJRElSCQkJMHgyCiAjCWRlZmluZQlVU0JfQklESVJfVExMCQkJMHgzCi0jCWRlZmluZQlVU0JUMFdSTU9ERUkoeCkJCSgoeCkgPDwgMjIpCi0jCWRlZmluZQlVU0JUMVdSTU9ERUkoeCkJCSgoeCkgPDwgMjApCi0jCWRlZmluZQlVU0JUMldSTU9ERUkoeCkJCSgoeCkgPDwgMTgpCisjCWRlZmluZQlVU0JUWFdSTU9ERUkocG9ydCwgeCkJKCh4KSA8PCAoMjIgLSAocG9ydCAqIDIpKSkKICMJZGVmaW5lCVVTQlQyVExMNVBJCQkoMSA8PCAxNykKICMJZGVmaW5lCVVTQjBQVUVOQUNUTE9JCQkoMSA8PCAxNikKICMJZGVmaW5lCVVTQlNUQU5EQllDVFJMCQkoMSA8PCAxNSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9kZWJ1Zy1tYWNyby5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzQ2MjIwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2RlYnVnLW1hY3JvLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vZGVidWctbWFjcm8uUwotICoKLSAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLQotCS5tYWNybyAgYWRkcnVhcnQscngKLQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAotCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwotCWxkcmVxCVxyeCwgPU9SSU9OX1JFR1NfUEhZU19CQVNFCi0JbGRybmUJXHJ4LCA9T1JJT05fUkVHU19WSVJUX0JBU0UKLQlvcnIJXHJ4LCBccngsICMweDAwMDEyMDAwCi0JLmVuZG0KLQotI2RlZmluZSBVQVJUX1NISUZUCTIKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2VudHJ5LW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTA5NmIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vZW50cnktbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9lbnRyeS1tYWNyby5TCi0gKgotICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBPcmlvbiBwbGF0Zm9ybXMKLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLQotCS5tYWNybyAgZGlzYWJsZV9maXEKLQkuZW5kbQotCi0JLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCi0JLmVuZG0KLQotCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQlsZHIJXGJhc2UsID1NQUlOX0lSUV9DQVVTRQotCS5lbmRtCi0KLQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjMF0JCUAgbWFpbiBjYXVzZQotCWxkcglcdG1wLCBbXGJhc2UsICMoTUFJTl9JUlFfTUFTSyAtIE1BSU5fSVJRX0NBVVNFKV0gQCBtYWluIG1hc2sKLQltb3YJXGlycW5yLCAjMAkJCUAgZGVmYXVsdCBpcnFucgotCUAgZmluZCBjYXVzZSBiaXRzIHRoYXQgYXJlIHVubWFza2VkCi0JYW5kcwlcaXJxc3RhdCwgXGlycXN0YXQsIFx0bXAJQCBjbGVhciBaIGZsYWcgaWYgYW55Ci0JY2x6bmUJXGlycW5yLAlcaXJxc3RhdAkJQCBjYWxjIGlycW5yCi0JcnNibmUJXGlycW5yLCBcaXJxbnIsICMzMQotCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9ncGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NjI4NGY5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2dwaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9ncGlvLmgKLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLWV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIHBpbiwgY29uc3QgY2hhciAqbGFiZWwpOwotZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIHBpbik7Ci1leHRlcm4gaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIHBpbik7Ci1leHRlcm4gaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIHBpbik7Ci1leHRlcm4gdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSk7Ci1leHRlcm4gdm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluayk7Ci1leHRlcm4gdm9pZCBncGlvX2Rpc3BsYXkodm9pZCk7CQkvKiBkZWJ1ZyAqLwotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycShpbnQgcGluKQotewotCXJldHVybiBwaW4gKyBJUlFfT1JJT05fR1BJT19TVEFSVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8oaW50IGlycSkKLXsKLQlyZXR1cm4gaXJxIC0gSVJRX09SSU9OX0dQSU9fU1RBUlQ7Ci19Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2hhcmR3YXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZGEzNzQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vaGFyZHdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9oYXJkd2FyZS5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCi0KLSNpbmNsdWRlICJvcmlvbi5oIgotCi0jZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCi0KLSNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MDAwMDEwMDAKLSNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweDAxMDAwMDAwCi0jZGVmaW5lIFBDSU1FTV9CQVNFCQlPUklPTl9QQ0lFX01FTV9QSFlTX0JBU0UKLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGI4YzM5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vaW8uaAotICoKLSAqIFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICi0jZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKLQotI2luY2x1ZGUgIm9yaW9uLmgiCi0KLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4ZmZmZmZmZmYKLSNkZWZpbmUgSU9fU1BBQ0VfUkVNQVAJCU9SSU9OX1BDSV9TWVNfSU9fQkFTRQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19pbyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOwotfQotCi0jZGVmaW5lIF9faW8oYSkJCQlfX2lvKGEpCi0jZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vaXJxcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWE2NWNhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2lycXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9pcnFzLmgKLSAqCi0gKiBJUlEgZGVmaW5pdGlvbnMgZm9yIE9yaW9uIFNvQwotICoKLSAqICBNYWludGFpbmVyOiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPgotICoKLSAqICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqICB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19IX18KLQotI2luY2x1ZGUgIm9yaW9uLmgiCS8qIG5lZWQgR1BJT19NQVggKi8KLQotLyoKLSAqIE9yaW9uIE1haW4gSW50ZXJydXB0IENvbnRyb2xsZXIKLSAqLwotI2RlZmluZSBJUlFfT1JJT05fQlJJREdFCTAKLSNkZWZpbmUgSVJRX09SSU9OX0RPT1JCRUxMX0gyQwkxCi0jZGVmaW5lIElSUV9PUklPTl9ET09SQkVMTF9DMkgJMgotI2RlZmluZSBJUlFfT1JJT05fVUFSVDAJCTMKLSNkZWZpbmUgSVJRX09SSU9OX1VBUlQxCQk0Ci0jZGVmaW5lIElSUV9PUklPTl9JMkMJCTUKLSNkZWZpbmUgSVJRX09SSU9OX0dQSU9fMF83CTYKLSNkZWZpbmUgSVJRX09SSU9OX0dQSU9fOF8xNQk3Ci0jZGVmaW5lIElSUV9PUklPTl9HUElPXzE2XzIzCTgKLSNkZWZpbmUgSVJRX09SSU9OX0dQSU9fMjRfMzEJOQotI2RlZmluZSBJUlFfT1JJT05fUENJRTBfRVJSCTEwCi0jZGVmaW5lIElSUV9PUklPTl9QQ0lFMF9JTlQJMTEKLSNkZWZpbmUgSVJRX09SSU9OX1VTQjFfQ1RSTAkxMgotI2RlZmluZSBJUlFfT1JJT05fREVWX0JVU19FUlIJMTQKLSNkZWZpbmUgSVJRX09SSU9OX1BDSV9FUlIJMTUKLSNkZWZpbmUgSVJRX09SSU9OX1VTQl9CUl9FUlIJMTYKLSNkZWZpbmUgSVJRX09SSU9OX1VTQjBfQ1RSTAkxNwotI2RlZmluZSBJUlFfT1JJT05fRVRIX1JYCTE4Ci0jZGVmaW5lIElSUV9PUklPTl9FVEhfVFgJMTkKLSNkZWZpbmUgSVJRX09SSU9OX0VUSF9NSVNDCTIwCi0jZGVmaW5lIElSUV9PUklPTl9FVEhfU1VNCTIxCi0jZGVmaW5lIElSUV9PUklPTl9FVEhfRVJSCTIyCi0jZGVmaW5lIElSUV9PUklPTl9JRE1BX0VSUgkyMwotI2RlZmluZSBJUlFfT1JJT05fSURNQV8wCTI0Ci0jZGVmaW5lIElSUV9PUklPTl9JRE1BXzEJMjUKLSNkZWZpbmUgSVJRX09SSU9OX0lETUFfMgkyNgotI2RlZmluZSBJUlFfT1JJT05fSURNQV8zCTI3Ci0jZGVmaW5lIElSUV9PUklPTl9DRVNBCQkyOAotI2RlZmluZSBJUlFfT1JJT05fU0FUQQkJMjkKLSNkZWZpbmUgSVJRX09SSU9OX1hPUjAJCTMwCi0jZGVmaW5lIElSUV9PUklPTl9YT1IxCQkzMQotCi0vKgotICogT3Jpb24gR2VuZXJhbCBQdXJwb3NlIFBpbnMKLSAqLwotI2RlZmluZSBJUlFfT1JJT05fR1BJT19TVEFSVAkzMgotI2RlZmluZSBOUl9HUElPX0lSUVMJCUdQSU9fTUFYCi0KLSNkZWZpbmUgTlJfSVJRUwkJCShJUlFfT1JJT05fR1BJT19TVEFSVCArIE5SX0dQSU9fSVJRUykKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vbWVtb3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NTRkYmEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vbWVtb3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vbWVtb3J5LmgKLSAqCi0gKiBNYXJ2ZWxsIE9yaW9uIG1lbW9yeSBkZWZpbml0aW9ucwotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NTVVfSAotI2RlZmluZSBfX0FTTV9BUkNIX01NVV9ICi0KLSNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKLQotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9vcmlvbi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vb3Jpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjczYTQxOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9vcmlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9vcmlvbi5oCi0gKgotICogR2VuZXJpYyBkZWZpbml0aW9ucyBvZiBPcmlvbiBTb0MgZmxhdm9yczoKLSAqICBPcmlvbi0xLCBPcmlvbi1OQVMsIE9yaW9uLVZvSVAsIGFuZCBPcmlvbi0yLgotICoKLSAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT1JJT05fSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfT1JJT05fSF9fCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogT3Jpb24gQWRkcmVzcyBNYXAKLSAqCi0gKiB2aXJ0CQlwaHlzCQlzaXplCi0gKiBmZGQwMDAwMAlmMTAwMDAwMAkxTQlvbi1jaGlwIHBlcmlwaGVyYWwgcmVnaXN0ZXJzCi0gKiBmZGUwMDAwMAlmMjAwMDAwMAkxTQlQQ0llIEkvTyBzcGFjZQotICogZmRmMDAwMDAJZjIxMDAwMDAJMU0JUENJIEkvTyBzcGFjZQotICogZmUwMDAwMDAJZjAwMDAwMDAJMTZNCVBDSWUgV0Egc3BhY2UgKE9yaW9uLU5BUyBvbmx5KQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE9SSU9OX1JFR1NfUEhZU19CQVNFCTB4ZjEwMDAwMDAKLSNkZWZpbmUgT1JJT05fUkVHU19WSVJUX0JBU0UJMHhmZGQwMDAwMAotI2RlZmluZSBPUklPTl9SRUdTX1NJWkUJCVNaXzFNCi0KLSNkZWZpbmUgT1JJT05fUENJRV9JT19QSFlTX0JBU0UJMHhmMjAwMDAwMAotI2RlZmluZSBPUklPTl9QQ0lFX0lPX1ZJUlRfQkFTRQkweGZkZTAwMDAwCi0jZGVmaW5lIE9SSU9OX1BDSUVfSU9fQlVTX0JBU0UJMHgwMDAwMDAwMAotI2RlZmluZSBPUklPTl9QQ0lFX0lPX1NJWkUJU1pfMU0KLQotI2RlZmluZSBPUklPTl9QQ0lfSU9fUEhZU19CQVNFCTB4ZjIxMDAwMDAKLSNkZWZpbmUgT1JJT05fUENJX0lPX1ZJUlRfQkFTRQkweGZkZjAwMDAwCi0jZGVmaW5lIE9SSU9OX1BDSV9JT19CVVNfQkFTRQkweDAwMTAwMDAwCi0jZGVmaW5lIE9SSU9OX1BDSV9JT19TSVpFCVNaXzFNCi0KLS8qIFJlbGV2YW50IG9ubHkgZm9yIE9yaW9uLU5BUyAqLwotI2RlZmluZSBPUklPTl9QQ0lFX1dBX1BIWVNfQkFTRQkweGYwMDAwMDAwCi0jZGVmaW5lIE9SSU9OX1BDSUVfV0FfVklSVF9CQVNFCTB4ZmUwMDAwMDAKLSNkZWZpbmUgT1JJT05fUENJRV9XQV9TSVpFCVNaXzE2TQotCi0jZGVmaW5lIE9SSU9OX1BDSUVfTUVNX1BIWVNfQkFTRQkweGUwMDAwMDAwCi0jZGVmaW5lIE9SSU9OX1BDSUVfTUVNX1NJWkUJCVNaXzEyOE0KLQotI2RlZmluZSBPUklPTl9QQ0lfTUVNX1BIWVNfQkFTRQkJMHhlODAwMDAwMAotI2RlZmluZSBPUklPTl9QQ0lfTUVNX1NJWkUJCVNaXzEyOE0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFN1cHBvcnRlZCBEZXZpY2VzICYgUmV2aXNpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogT3Jpb24tMSAoODhGNTE4MSkgKi8KLSNkZWZpbmUgTVY4OEY1MTgxX0RFVl9JRAkweDUxODEKLSNkZWZpbmUgTVY4OEY1MTgxX1JFVl9CMQkzCi0vKiBPcmlvbi1OQVMgKDg4RjUxODIpICovCi0jZGVmaW5lIE1WODhGNTE4Ml9ERVZfSUQJMHg1MTgyCi0jZGVmaW5lIE1WODhGNTE4Ml9SRVZfQTIJMgotLyogT3Jpb24tMiAoODhGNTI4MSkgKi8KLSNkZWZpbmUgTVY4OEY1MjgxX0RFVl9JRAkweDUyODEKLSNkZWZpbmUgTVY4OEY1MjgxX1JFVl9EMQk1Ci0jZGVmaW5lIE1WODhGNTI4MV9SRVZfRDIJNgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogT3Jpb24gUmVnaXN0ZXJzIE1hcAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgT1JJT05fRERSX1ZJUlRfQkFTRQkJKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHgwMDAwMCkKLSNkZWZpbmUgT1JJT05fRERSX1JFRyh4KQkJKE9SSU9OX0REUl9WSVJUX0JBU0UgfCAoeCkpCi0KLSNkZWZpbmUgT1JJT05fREVWX0JVU19QSFlTX0JBU0UJCShPUklPTl9SRUdTX1BIWVNfQkFTRSB8IDB4MTAwMDApCi0jZGVmaW5lIE9SSU9OX0RFVl9CVVNfVklSVF9CQVNFCQkoT1JJT05fUkVHU19WSVJUX0JBU0UgfCAweDEwMDAwKQotI2RlZmluZSBPUklPTl9ERVZfQlVTX1JFRyh4KQkJKE9SSU9OX0RFVl9CVVNfVklSVF9CQVNFIHwgKHgpKQotI2RlZmluZSAgSTJDX1BIWVNfQkFTRQkJCShPUklPTl9ERVZfQlVTX1BIWVNfQkFTRSB8IDB4MTAwMCkKLSNkZWZpbmUgIFVBUlQwX1BIWVNfQkFTRQkJKE9SSU9OX0RFVl9CVVNfUEhZU19CQVNFIHwgMHgyMDAwKQotI2RlZmluZSAgVUFSVDBfVklSVF9CQVNFCQkoT1JJT05fREVWX0JVU19WSVJUX0JBU0UgfCAweDIwMDApCi0jZGVmaW5lICBVQVJUMV9QSFlTX0JBU0UJCShPUklPTl9ERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjEwMCkKLSNkZWZpbmUgIFVBUlQxX1ZJUlRfQkFTRQkJKE9SSU9OX0RFVl9CVVNfVklSVF9CQVNFIHwgMHgyMTAwKQotCi0jZGVmaW5lIE9SSU9OX0JSSURHRV9WSVJUX0JBU0UJCShPUklPTl9SRUdTX1ZJUlRfQkFTRSB8IDB4MjAwMDApCi0jZGVmaW5lIE9SSU9OX0JSSURHRV9SRUcoeCkJCShPUklPTl9CUklER0VfVklSVF9CQVNFIHwgKHgpKQotCi0jZGVmaW5lIE9SSU9OX1BDSV9WSVJUX0JBU0UJCShPUklPTl9SRUdTX1ZJUlRfQkFTRSB8IDB4MzAwMDApCi0jZGVmaW5lIE9SSU9OX1BDSV9SRUcoeCkJCShPUklPTl9QQ0lfVklSVF9CQVNFIHwgKHgpKQotCi0jZGVmaW5lIE9SSU9OX1BDSUVfVklSVF9CQVNFCQkoT1JJT05fUkVHU19WSVJUX0JBU0UgfCAweDQwMDAwKQotI2RlZmluZSBPUklPTl9QQ0lFX1JFRyh4KQkJKE9SSU9OX1BDSUVfVklSVF9CQVNFIHwgKHgpKQotCi0jZGVmaW5lIE9SSU9OX1VTQjBfUEhZU19CQVNFCQkoT1JJT05fUkVHU19QSFlTX0JBU0UgfCAweDUwMDAwKQotI2RlZmluZSBPUklPTl9VU0IwX1ZJUlRfQkFTRQkJKE9SSU9OX1JFR1NfVklSVF9CQVNFIHwgMHg1MDAwMCkKLSNkZWZpbmUgT1JJT05fVVNCMF9SRUcoeCkJCShPUklPTl9VU0IwX1ZJUlRfQkFTRSB8ICh4KSkKLQotI2RlZmluZSBPUklPTl9FVEhfUEhZU19CQVNFCQkoT1JJT05fUkVHU19QSFlTX0JBU0UgfCAweDcwMDAwKQotI2RlZmluZSBPUklPTl9FVEhfVklSVF9CQVNFCQkoT1JJT05fUkVHU19WSVJUX0JBU0UgfCAweDcwMDAwKQotI2RlZmluZSBPUklPTl9FVEhfUkVHKHgpCQkoT1JJT05fRVRIX1ZJUlRfQkFTRSB8ICh4KSkKLQotI2RlZmluZSBPUklPTl9TQVRBX1BIWVNfQkFTRQkJKE9SSU9OX1JFR1NfUEhZU19CQVNFIHwgMHg4MDAwMCkKLSNkZWZpbmUgT1JJT05fU0FUQV9WSVJUX0JBU0UJCShPUklPTl9SRUdTX1ZJUlRfQkFTRSB8IDB4ODAwMDApCi0jZGVmaW5lIE9SSU9OX1NBVEFfUkVHKHgpCQkoT1JJT05fU0FUQV9WSVJUX0JBU0UgfCAoeCkpCi0KLSNkZWZpbmUgT1JJT05fVVNCMV9QSFlTX0JBU0UJCShPUklPTl9SRUdTX1BIWVNfQkFTRSB8IDB4YTAwMDApCi0jZGVmaW5lIE9SSU9OX1VTQjFfVklSVF9CQVNFCQkoT1JJT05fUkVHU19WSVJUX0JBU0UgfCAweGEwMDAwKQotI2RlZmluZSBPUklPTl9VU0IxX1JFRyh4KQkJKE9SSU9OX1VTQjFfVklSVF9CQVNFIHwgKHgpKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGV2aWNlIEJ1cyBSZWdpc3RlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE1QUF8wXzdfQ1RSTAkJT1JJT05fREVWX0JVU19SRUcoMHgwMDApCi0jZGVmaW5lIE1QUF84XzE1X0NUUkwJCU9SSU9OX0RFVl9CVVNfUkVHKDB4MDA0KQotI2RlZmluZSBNUFBfMTZfMTlfQ1RSTAkJT1JJT05fREVWX0JVU19SRUcoMHgwNTApCi0jZGVmaW5lIE1QUF9ERVZfQ1RSTAkJT1JJT05fREVWX0JVU19SRUcoMHgwMDgpCi0jZGVmaW5lIE1QUF9SRVNFVF9TQU1QTEUJT1JJT05fREVWX0JVU19SRUcoMHgwMTApCi0jZGVmaW5lIEdQSU9fT1VUCQlPUklPTl9ERVZfQlVTX1JFRygweDEwMCkKLSNkZWZpbmUgR1BJT19JT19DT05GCQlPUklPTl9ERVZfQlVTX1JFRygweDEwNCkKLSNkZWZpbmUgR1BJT19CTElOS19FTgkJT1JJT05fREVWX0JVU19SRUcoMHgxMDgpCi0jZGVmaW5lIEdQSU9fSU5fUE9MCQlPUklPTl9ERVZfQlVTX1JFRygweDEwYykKLSNkZWZpbmUgR1BJT19EQVRBX0lOCQlPUklPTl9ERVZfQlVTX1JFRygweDExMCkKLSNkZWZpbmUgR1BJT19FREdFX0NBVVNFCQlPUklPTl9ERVZfQlVTX1JFRygweDExNCkKLSNkZWZpbmUgR1BJT19FREdFX01BU0sJCU9SSU9OX0RFVl9CVVNfUkVHKDB4MTE4KQotI2RlZmluZSBHUElPX0xFVkVMX01BU0sJCU9SSU9OX0RFVl9CVVNfUkVHKDB4MTFjKQotI2RlZmluZSBERVZfQkFOS18wX1BBUkFNCU9SSU9OX0RFVl9CVVNfUkVHKDB4NDVjKQotI2RlZmluZSBERVZfQkFOS18xX1BBUkFNCU9SSU9OX0RFVl9CVVNfUkVHKDB4NDYwKQotI2RlZmluZSBERVZfQkFOS18yX1BBUkFNCU9SSU9OX0RFVl9CVVNfUkVHKDB4NDY0KQotI2RlZmluZSBERVZfQkFOS19CT09UX1BBUkFNCU9SSU9OX0RFVl9CVVNfUkVHKDB4NDZjKQotI2RlZmluZSBERVZfQlVTX0NUUkwJCU9SSU9OX0RFVl9CVVNfUkVHKDB4NGMwKQotI2RlZmluZSBERVZfQlVTX0lOVF9DQVVTRQlPUklPTl9ERVZfQlVTX1JFRygweDRkMCkKLSNkZWZpbmUgREVWX0JVU19JTlRfTUFTSwlPUklPTl9ERVZfQlVTX1JFRygweDRkNCkKLSNkZWZpbmUgR1BJT19NQVgJCTMyCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE9yaW9uIENQVSBCcmlkZ2UgUmVnaXN0ZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIENQVV9DT05GCQlPUklPTl9CUklER0VfUkVHKDB4MTAwKQotI2RlZmluZSBDUFVfQ1RSTAkJT1JJT05fQlJJREdFX1JFRygweDEwNCkKLSNkZWZpbmUgQ1BVX1JFU0VUX01BU0sJCU9SSU9OX0JSSURHRV9SRUcoMHgxMDgpCi0jZGVmaW5lIENQVV9TT0ZUX1JFU0VUCQlPUklPTl9CUklER0VfUkVHKDB4MTBjKQotI2RlZmluZSBQT1dFUl9NTkdfQ1RSTF9SRUcJT1JJT05fQlJJREdFX1JFRygweDExQykKLSNkZWZpbmUgQlJJREdFX0NBVVNFCQlPUklPTl9CUklER0VfUkVHKDB4MTEwKQotI2RlZmluZSBCUklER0VfTUFTSwkJT1JJT05fQlJJREdFX1JFRygweDExNCkKLSNkZWZpbmUgTUFJTl9JUlFfQ0FVU0UJCU9SSU9OX0JSSURHRV9SRUcoMHgyMDApCi0jZGVmaW5lIE1BSU5fSVJRX01BU0sJCU9SSU9OX0JSSURHRV9SRUcoMHgyMDQpCi0jZGVmaW5lIFRJTUVSX0NUUkwJCU9SSU9OX0JSSURHRV9SRUcoMHgzMDApCi0jZGVmaW5lIFRJTUVSX1ZBTCh4KQkJT1JJT05fQlJJREdFX1JFRygweDMxNCArICgoeCkgKiA4KSkKLSNkZWZpbmUgVElNRVJfVkFMX1JFTE9BRCh4KQlPUklPTl9CUklER0VfUkVHKDB4MzEwICsgKCh4KSAqIDgpKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSGVscGVycyB0byBhY2Nlc3MgT3Jpb24gcmVnaXN0ZXJzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jZGVmaW5lIG9yaW9uX3JlYWQocikJCV9fcmF3X3JlYWRsKHIpCi0jZGVmaW5lIG9yaW9uX3dyaXRlKHIsIHZhbCkJX19yYXdfd3JpdGVsKHZhbCwgcikKLQotLyoKLSAqIFRoZXNlIGFyZSBub3QgcHJlZW1wdCBzYWZlLiBMb2NrcywgaWYgbmVlZGVkLCBtdXN0IGJlIHRha2VuIGNhcmUgYnkgY2FsbGVyLgotICovCi0jZGVmaW5lIG9yaW9uX3NldGJpdHMociwgbWFzaykJb3Jpb25fd3JpdGUoKHIpLCBvcmlvbl9yZWFkKHIpIHwgKG1hc2spKQotI2RlZmluZSBvcmlvbl9jbHJiaXRzKHIsIG1hc2spCW9yaW9uX3dyaXRlKChyKSwgb3Jpb25fcmVhZChyKSAmIH4obWFzaykpCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT1JJT05fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vcGxhdGZvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzYzM4ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9wbGF0Zm9ybS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIGFzbS1hcm0vYXJjaC1vcmlvbi9wbGF0Zm9ybS5oCi0gKgotICogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9QTEFURk9STV9IX18KLSNkZWZpbmUgX19BU01fQVJDSF9QTEFURk9STV9IX18KLQotLyoKLSAqIERldmljZSBidXMgTkFORCBwcml2YXRlIGRhdGEKLSAqLwotc3RydWN0IG9yaW9uX25hbmRfZGF0YSB7Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCXUzMiBucl9wYXJ0czsKLQl1OCBhbGU7CQkvKiBhZGRyZXNzIGxpbmUgbnVtYmVyIGNvbm5lY3RlZCB0byBBTEUgKi8KLQl1OCBjbGU7CQkvKiBhZGRyZXNzIGxpbmUgbnVtYmVyIGNvbm5lY3RlZCB0byBDTEUgKi8KLQl1OCB3aWR0aDsJLyogYnVzd2lkdGggKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9zeXN0ZW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MDRjNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9zeXN0ZW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi9zeXN0ZW0uaAotICoKLSAqIFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKLQotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb3Jpb24uaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQotewotCWNwdV9kb19pZGxlKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLQkvKgotCSAqIEVuYWJsZSBhbmQgaXNzdWUgc29mdCByZXNldAotCSAqLwotCW9yaW9uX3NldGJpdHMoQ1BVX1JFU0VUX01BU0ssICgxIDw8IDIpKTsKLQlvcmlvbl9zZXRiaXRzKENQVV9TT0ZUX1JFU0VULCAxKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vdGltZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZjMmM5MS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi90aW1leC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL3RpbWV4LmgKLSAqCi0gKiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNkZWZpbmUgT1JJT05fVENMSwkJMTY2NjY2NjY3Ci0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJT1JJT05fVENMSwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vdW5jb21wcmVzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWY0NDAzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL3VuY29tcHJlc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi91bmNvbXByZXNzLmgKLSAqCi0gKiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbi5oPgotCi0jZGVmaW5lIE1WX1VBUlRfVEhSCSgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShVQVJUMF9QSFlTX0JBU0UgKyAweDApKQotI2RlZmluZSBNVl9VQVJUX0xTUiAJKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKFVBUlQwX1BIWVNfQkFTRSArIDB4MTQpKQotCi0jZGVmaW5lIExTUl9USFJFCTB4MjAKLQotc3RhdGljIHZvaWQgcHV0Yyhjb25zdCBjaGFyIGMpCi17Ci0JaW50IGogPSAweDEwMDA7Ci0Jd2hpbGUgKC0taiAmJiAhKCpNVl9VQVJUX0xTUiAmIExTUl9USFJFKSkKLQkJYmFycmllcigpOwotCSpNVl9VQVJUX1RIUiA9IGM7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsdXNoKHZvaWQpCi17Ci19Ci0KLS8qCi0gKiBub3RoaW5nIHRvIGRvCi0gKi8KLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQotI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL3ZtYWxsb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1ODAyNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi92bWFsbG9jLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbi92bWFsbG9jLmgKLSAqLwotCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZmQ4MDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk4ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uNXguaD4KKworCS5tYWNybyAgYWRkcnVhcnQscngKKwltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPworCWxkcmVxCVxyeCwgPU9SSU9ONVhfUkVHU19QSFlTX0JBU0UKKwlsZHJuZQlccngsID1PUklPTjVYX1JFR1NfVklSVF9CQVNFCisJb3JyCVxyeCwgXHJ4LCAjMHgwMDAxMjAwMAorCS5lbmRtCisKKyNkZWZpbmUgVUFSVF9TSElGVAkyCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLTgyNTAuUz4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9kbWEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb24vZG1hLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvZG1hLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGVmNTRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIE9yaW9uIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbjV4Lmg+CisKKwkubWFjcm8gIGRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJbGRyCVxiYXNlLCA9TUFJTl9JUlFfQ0FVU0UKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIG1haW4gY2F1c2UKKwlsZHIJXHRtcCwgW1xiYXNlLCAjKE1BSU5fSVJRX01BU0sgLSBNQUlOX0lSUV9DQVVTRSldIEAgbWFpbiBtYXNrCisJbW92CVxpcnFuciwgIzAJCQlAIGRlZmF1bHQgaXJxbnIKKwlAIGZpbmQgY2F1c2UgYml0cyB0aGF0IGFyZSB1bm1hc2tlZAorCWFuZHMJXGlycXN0YXQsIFxpcnFzdGF0LCBcdG1wCUAgY2xlYXIgWiBmbGFnIGlmIGFueQorCWNsem5lCVxpcnFuciwJXGlycXN0YXQJCUAgY2FsYyBpcnFucgorCXJzYm5lCVxpcnFuciwgXGlycW5yLCAjMzEKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODVlNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9ncGlvLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvZ3Bpby5oCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCitleHRlcm4gaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBwaW4sIGNvbnN0IGNoYXIgKmxhYmVsKTsKK2V4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBwaW4pOworZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBwaW4pOworZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBwaW4pOworZXh0ZXJuIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpOworZXh0ZXJuIHZvaWQgb3Jpb241eF9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluayk7CitleHRlcm4gdm9pZCBncGlvX2Rpc3BsYXkodm9pZCk7CQkvKiBkZWJ1ZyAqLworCitzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycShpbnQgcGluKQoreworCXJldHVybiBwaW4gKyBJUlFfT1JJT041WF9HUElPX1NUQVJUOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3BpbyhpbnQgaXJxKQoreworCXJldHVybiBpcnEgLSBJUlFfT1JJT041WF9HUElPX1NUQVJUOworfQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDJkOGUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L2hhcmR3YXJlLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjaW5jbHVkZSAib3Jpb241eC5oIgorCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCisKKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MDAwMDEwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweDAxMDAwMDAwCisjZGVmaW5lIFBDSU1FTV9CQVNFCQlPUklPTjVYX1BDSUVfTUVNX1BIWVNfQkFTRQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNDhhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L2lvLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvaW8uaAorICoKKyAqIFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JT19ICisKKyNpbmNsdWRlICJvcmlvbjV4LmgiCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgSU9fU1BBQ0VfUkVNQVAJCU9SSU9ONVhfUENJX1NZU19JT19CQVNFCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK19fYXJjaF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgbXR5cGUpCit7CisJdm9pZCBfX2lvbWVtICpyZXR2YWw7CisKKwlpZiAobXR5cGUgPT0gTVRfREVWSUNFICYmIHNpemUgJiYgcGFkZHIgPj0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSAmJgorCSAgICBwYWRkciArIHNpemUgPD0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSArIE9SSU9ONVhfUkVHU19TSVpFKSB7CisJCXJldHZhbCA9ICh2b2lkIF9faW9tZW0gKilPUklPTjVYX1JFR1NfVklSVF9CQVNFICsKKwkJCQkocGFkZHIgLSBPUklPTjVYX1JFR1NfUEhZU19CQVNFKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBfX2FybV9pb3JlbWFwKHBhZGRyLCBzaXplLCBtdHlwZSk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2FyY2hfaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGFkZHIgPCAodm9pZCBfX2lvbWVtICopT1JJT041WF9SRUdTX1ZJUlRfQkFTRSB8fAorCSAgICBhZGRyID49ICh2b2lkIF9faW9tZW0gKikoT1JJT041WF9SRUdTX1ZJUlRfQkFTRSArIE9SSU9ONVhfUkVHU19TSVpFKSkKKwkJX19pb3VubWFwKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19pbyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOworfQorCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwKHAsIHMsIG0pCV9fYXJjaF9pb3JlbWFwKHAsIHMsIG0pCisjZGVmaW5lIF9fYXJjaF9pb3VubWFwKGEpCV9fYXJjaF9pb3VubWFwKGEpCisjZGVmaW5lIF9faW8oYSkJCQlfX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIZWxwZXJzIHRvIGFjY2VzcyBPcmlvbiByZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBvcmlvbjV4X3JlYWQocikJCV9fcmF3X3JlYWRsKHIpCisjZGVmaW5lIG9yaW9uNXhfd3JpdGUociwgdmFsKQlfX3Jhd193cml0ZWwodmFsLCByKQorCisvKgorICogVGhlc2UgYXJlIG5vdCBwcmVlbXB0LXNhZmUuICBMb2NrcywgaWYgbmVlZGVkLCBtdXN0IGJlIHRha2VuCisgKiBjYXJlIG9mIGJ5IHRoZSBjYWxsZXIuCisgKi8KKyNkZWZpbmUgb3Jpb241eF9zZXRiaXRzKHIsIG1hc2spCW9yaW9uNXhfd3JpdGUoKHIpLCBvcmlvbjV4X3JlYWQocikgfCAobWFzaykpCisjZGVmaW5lIG9yaW9uNXhfY2xyYml0cyhyLCBtYXNrKQlvcmlvbjV4X3dyaXRlKChyKSwgb3Jpb241eF9yZWFkKHIpICYgfihtYXNrKSkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkZDYxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvaXJxcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L2lycXMuaAorICoKKyAqIElSUSBkZWZpbml0aW9ucyBmb3IgT3Jpb24gU29DCisgKgorICogIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+CisgKgorICogIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICisKKyNpbmNsdWRlICJvcmlvbjV4LmgiCS8qIG5lZWQgR1BJT19NQVggKi8KKworLyoKKyAqIE9yaW9uIE1haW4gSW50ZXJydXB0IENvbnRyb2xsZXIKKyAqLworI2RlZmluZSBJUlFfT1JJT041WF9CUklER0UJCTAKKyNkZWZpbmUgSVJRX09SSU9ONVhfRE9PUkJFTExfSDJDCTEKKyNkZWZpbmUgSVJRX09SSU9ONVhfRE9PUkJFTExfQzJICTIKKyNkZWZpbmUgSVJRX09SSU9ONVhfVUFSVDAJCTMKKyNkZWZpbmUgSVJRX09SSU9ONVhfVUFSVDEJCTQKKyNkZWZpbmUgSVJRX09SSU9ONVhfSTJDCQkJNQorI2RlZmluZSBJUlFfT1JJT041WF9HUElPXzBfNwkJNgorI2RlZmluZSBJUlFfT1JJT041WF9HUElPXzhfMTUJCTcKKyNkZWZpbmUgSVJRX09SSU9ONVhfR1BJT18xNl8yMwkJOAorI2RlZmluZSBJUlFfT1JJT041WF9HUElPXzI0XzMxCQk5CisjZGVmaW5lIElSUV9PUklPTjVYX1BDSUUwX0VSUgkJMTAKKyNkZWZpbmUgSVJRX09SSU9ONVhfUENJRTBfSU5UCQkxMQorI2RlZmluZSBJUlFfT1JJT041WF9VU0IxX0NUUkwJCTEyCisjZGVmaW5lIElSUV9PUklPTjVYX0RFVl9CVVNfRVJSCQkxNAorI2RlZmluZSBJUlFfT1JJT041WF9QQ0lfRVJSCQkxNQorI2RlZmluZSBJUlFfT1JJT041WF9VU0JfQlJfRVJSCQkxNgorI2RlZmluZSBJUlFfT1JJT041WF9VU0IwX0NUUkwJCTE3CisjZGVmaW5lIElSUV9PUklPTjVYX0VUSF9SWAkJMTgKKyNkZWZpbmUgSVJRX09SSU9ONVhfRVRIX1RYCQkxOQorI2RlZmluZSBJUlFfT1JJT041WF9FVEhfTUlTQwkJMjAKKyNkZWZpbmUgSVJRX09SSU9ONVhfRVRIX1NVTQkJMjEKKyNkZWZpbmUgSVJRX09SSU9ONVhfRVRIX0VSUgkJMjIKKyNkZWZpbmUgSVJRX09SSU9ONVhfSURNQV9FUlIJCTIzCisjZGVmaW5lIElSUV9PUklPTjVYX0lETUFfMAkJMjQKKyNkZWZpbmUgSVJRX09SSU9ONVhfSURNQV8xCQkyNQorI2RlZmluZSBJUlFfT1JJT041WF9JRE1BXzIJCTI2CisjZGVmaW5lIElSUV9PUklPTjVYX0lETUFfMwkJMjcKKyNkZWZpbmUgSVJRX09SSU9ONVhfQ0VTQQkJMjgKKyNkZWZpbmUgSVJRX09SSU9ONVhfU0FUQQkJMjkKKyNkZWZpbmUgSVJRX09SSU9ONVhfWE9SMAkJMzAKKyNkZWZpbmUgSVJRX09SSU9ONVhfWE9SMQkJMzEKKworLyoKKyAqIE9yaW9uIEdlbmVyYWwgUHVycG9zZSBQaW5zCisgKi8KKyNkZWZpbmUgSVJRX09SSU9ONVhfR1BJT19TVEFSVAkzMgorI2RlZmluZSBOUl9HUElPX0lSUVMJCUdQSU9fTUFYCisKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfT1JJT041WF9HUElPX1NUQVJUICsgTlJfR1BJT19JUlFTKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwNTNhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvbWVtb3J5LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvbWVtb3J5LmgKKyAqCisgKiBNYXJ2ZWxsIE9yaW9uIG1lbW9yeSBkZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvb3Jpb241eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9vcmlvbjV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2ZGRkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvb3Jpb241eC5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9vcmlvbjV4LmgKKyAqCisgKiBHZW5lcmljIGRlZmluaXRpb25zIG9mIE9yaW9uIFNvQyBmbGF2b3JzOgorICogIE9yaW9uLTEsIE9yaW9uLU5BUywgT3Jpb24tVm9JUCwgYW5kIE9yaW9uLTIuCisgKgorICogTWFpbnRhaW5lcjogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PUklPTjVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PUklPTjVYX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPcmlvbiBBZGRyZXNzIE1hcHMKKyAqCisgKiBwaHlzCisgKiBlMDAwMDAwMAlQQ0llIE1FTSBzcGFjZQorICogZTgwMDAwMDAJUENJIE1FTSBzcGFjZQorICogZjAwMDAwMDAJUENJZSBXQSBzcGFjZSAoT3Jpb24tMS9Pcmlvbi1OQVMgb25seSkKKyAqIGYxMDAwMDAwCW9uLWNoaXAgcGVyaXBoZXJhbCByZWdpc3RlcnMKKyAqIGYyMDAwMDAwCVBDSWUgSS9PIHNwYWNlCisgKiBmMjEwMDAwMAlQQ0kgSS9PIHNwYWNlCisgKiBmNDAwMDAwMAlkZXZpY2UgYnVzIG1hcHBpbmdzIChib290KQorICogZmEwMDAwMDAJZGV2aWNlIGJ1cyBtYXBwaW5ncyAoY3MwKQorICogZmE4MDAwMDAJZGV2aWNlIGJ1cyBtYXBwaW5ncyAoY3MyKQorICogZmMwMDAwMDAJZGV2aWNlIGJ1cyBtYXBwaW5ncyAoY3MwL2NzMSkKKyAqCisgKiB2aXJ0CQlwaHlzCQlzaXplCisgKiBmZGQwMDAwMAlmMTAwMDAwMAkxTQlvbi1jaGlwIHBlcmlwaGVyYWwgcmVnaXN0ZXJzCisgKiBmZGUwMDAwMAlmMjAwMDAwMAkxTQlQQ0llIEkvTyBzcGFjZQorICogZmRmMDAwMDAJZjIxMDAwMDAJMU0JUENJIEkvTyBzcGFjZQorICogZmUwMDAwMDAJZjAwMDAwMDAJMTZNCVBDSWUgV0Egc3BhY2UgKE9yaW9uLTEvT3Jpb24tTkFTIG9ubHkpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgT1JJT041WF9SRUdTX1BIWVNfQkFTRQkJMHhmMTAwMDAwMAorI2RlZmluZSBPUklPTjVYX1JFR1NfVklSVF9CQVNFCQkweGZkZDAwMDAwCisjZGVmaW5lIE9SSU9ONVhfUkVHU19TSVpFCQlTWl8xTQorCisjZGVmaW5lIE9SSU9ONVhfUENJRV9JT19QSFlTX0JBU0UJMHhmMjAwMDAwMAorI2RlZmluZSBPUklPTjVYX1BDSUVfSU9fVklSVF9CQVNFCTB4ZmRlMDAwMDAKKyNkZWZpbmUgT1JJT041WF9QQ0lFX0lPX0JVU19CQVNFCTB4MDAwMDAwMDAKKyNkZWZpbmUgT1JJT041WF9QQ0lFX0lPX1NJWkUJCVNaXzFNCisKKyNkZWZpbmUgT1JJT041WF9QQ0lfSU9fUEhZU19CQVNFCTB4ZjIxMDAwMDAKKyNkZWZpbmUgT1JJT041WF9QQ0lfSU9fVklSVF9CQVNFCTB4ZmRmMDAwMDAKKyNkZWZpbmUgT1JJT041WF9QQ0lfSU9fQlVTX0JBU0UJCTB4MDAxMDAwMDAKKyNkZWZpbmUgT1JJT041WF9QQ0lfSU9fU0laRQkJU1pfMU0KKworLyogUmVsZXZhbnQgb25seSBmb3IgT3Jpb24tMS9Pcmlvbi1OQVMgKi8KKyNkZWZpbmUgT1JJT041WF9QQ0lFX1dBX1BIWVNfQkFTRQkweGYwMDAwMDAwCisjZGVmaW5lIE9SSU9ONVhfUENJRV9XQV9WSVJUX0JBU0UJMHhmZTAwMDAwMAorI2RlZmluZSBPUklPTjVYX1BDSUVfV0FfU0laRQkJU1pfMTZNCisKKyNkZWZpbmUgT1JJT041WF9QQ0lFX01FTV9QSFlTX0JBU0UJMHhlMDAwMDAwMAorI2RlZmluZSBPUklPTjVYX1BDSUVfTUVNX1NJWkUJCVNaXzEyOE0KKworI2RlZmluZSBPUklPTjVYX1BDSV9NRU1fUEhZU19CQVNFCTB4ZTgwMDAwMDAKKyNkZWZpbmUgT1JJT041WF9QQ0lfTUVNX1NJWkUJCVNaXzEyOE0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN1cHBvcnRlZCBEZXZpY2VzICYgUmV2aXNpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogT3Jpb24tMSAoODhGNTE4MSkgKi8KKyNkZWZpbmUgTVY4OEY1MTgxX0RFVl9JRAkweDUxODEKKyNkZWZpbmUgTVY4OEY1MTgxX1JFVl9CMQkzCisvKiBPcmlvbi1OQVMgKDg4RjUxODIpICovCisjZGVmaW5lIE1WODhGNTE4Ml9ERVZfSUQJMHg1MTgyCisjZGVmaW5lIE1WODhGNTE4Ml9SRVZfQTIJMgorLyogT3Jpb24tMiAoODhGNTI4MSkgKi8KKyNkZWZpbmUgTVY4OEY1MjgxX0RFVl9JRAkweDUyODEKKyNkZWZpbmUgTVY4OEY1MjgxX1JFVl9EMQk1CisjZGVmaW5lIE1WODhGNTI4MV9SRVZfRDIJNgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT3Jpb24gUmVnaXN0ZXJzIE1hcAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgT1JJT041WF9ERFJfVklSVF9CQVNFCQkoT1JJT041WF9SRUdTX1ZJUlRfQkFTRSB8IDB4MDAwMDApCisjZGVmaW5lIE9SSU9ONVhfRERSX1JFRyh4KQkJKE9SSU9ONVhfRERSX1ZJUlRfQkFTRSB8ICh4KSkKKworI2RlZmluZSBPUklPTjVYX0RFVl9CVVNfUEhZU19CQVNFCShPUklPTjVYX1JFR1NfUEhZU19CQVNFIHwgMHgxMDAwMCkKKyNkZWZpbmUgT1JJT041WF9ERVZfQlVTX1ZJUlRfQkFTRQkoT1JJT041WF9SRUdTX1ZJUlRfQkFTRSB8IDB4MTAwMDApCisjZGVmaW5lIE9SSU9ONVhfREVWX0JVU19SRUcoeCkJCShPUklPTjVYX0RFVl9CVVNfVklSVF9CQVNFIHwgKHgpKQorI2RlZmluZSAgSTJDX1BIWVNfQkFTRQkJCShPUklPTjVYX0RFVl9CVVNfUEhZU19CQVNFIHwgMHgxMDAwKQorI2RlZmluZSAgVUFSVDBfUEhZU19CQVNFCQkoT1JJT041WF9ERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjAwMCkKKyNkZWZpbmUgIFVBUlQwX1ZJUlRfQkFTRQkJKE9SSU9ONVhfREVWX0JVU19WSVJUX0JBU0UgfCAweDIwMDApCisjZGVmaW5lICBVQVJUMV9QSFlTX0JBU0UJCShPUklPTjVYX0RFVl9CVVNfUEhZU19CQVNFIHwgMHgyMTAwKQorI2RlZmluZSAgVUFSVDFfVklSVF9CQVNFCQkoT1JJT041WF9ERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MjEwMCkKKworI2RlZmluZSBPUklPTjVYX0JSSURHRV9WSVJUX0JBU0UJKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UgfCAweDIwMDAwKQorI2RlZmluZSBPUklPTjVYX0JSSURHRV9SRUcoeCkJCShPUklPTjVYX0JSSURHRV9WSVJUX0JBU0UgfCAoeCkpCisjZGVmaW5lICBUSU1FUl9WSVJUX0JBU0UJCShPUklPTjVYX0JSSURHRV9WSVJUX0JBU0UgfCAweDMwMCkKKworI2RlZmluZSBPUklPTjVYX1BDSV9WSVJUX0JBU0UJCShPUklPTjVYX1JFR1NfVklSVF9CQVNFIHwgMHgzMDAwMCkKKyNkZWZpbmUgT1JJT041WF9QQ0lfUkVHKHgpCQkoT1JJT041WF9QQ0lfVklSVF9CQVNFIHwgKHgpKQorCisjZGVmaW5lIE9SSU9ONVhfUENJRV9WSVJUX0JBU0UJCShPUklPTjVYX1JFR1NfVklSVF9CQVNFIHwgMHg0MDAwMCkKKyNkZWZpbmUgT1JJT041WF9QQ0lFX1JFRyh4KQkJKE9SSU9ONVhfUENJRV9WSVJUX0JBU0UgfCAoeCkpCisKKyNkZWZpbmUgT1JJT041WF9VU0IwX1BIWVNfQkFTRQkJKE9SSU9ONVhfUkVHU19QSFlTX0JBU0UgfCAweDUwMDAwKQorI2RlZmluZSBPUklPTjVYX1VTQjBfVklSVF9CQVNFCQkoT1JJT041WF9SRUdTX1ZJUlRfQkFTRSB8IDB4NTAwMDApCisjZGVmaW5lIE9SSU9ONVhfVVNCMF9SRUcoeCkJCShPUklPTjVYX1VTQjBfVklSVF9CQVNFIHwgKHgpKQorCisjZGVmaW5lIE9SSU9ONVhfRVRIX1BIWVNfQkFTRQkJKE9SSU9ONVhfUkVHU19QSFlTX0JBU0UgfCAweDcwMDAwKQorI2RlZmluZSBPUklPTjVYX0VUSF9WSVJUX0JBU0UJCShPUklPTjVYX1JFR1NfVklSVF9CQVNFIHwgMHg3MDAwMCkKKyNkZWZpbmUgT1JJT041WF9FVEhfUkVHKHgpCQkoT1JJT041WF9FVEhfVklSVF9CQVNFIHwgKHgpKQorCisjZGVmaW5lIE9SSU9ONVhfU0FUQV9QSFlTX0JBU0UJCShPUklPTjVYX1JFR1NfUEhZU19CQVNFIHwgMHg4MDAwMCkKKyNkZWZpbmUgT1JJT041WF9TQVRBX1ZJUlRfQkFTRQkJKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UgfCAweDgwMDAwKQorI2RlZmluZSBPUklPTjVYX1NBVEFfUkVHKHgpCQkoT1JJT041WF9TQVRBX1ZJUlRfQkFTRSB8ICh4KSkKKworI2RlZmluZSBPUklPTjVYX1VTQjFfUEhZU19CQVNFCQkoT1JJT041WF9SRUdTX1BIWVNfQkFTRSB8IDB4YTAwMDApCisjZGVmaW5lIE9SSU9ONVhfVVNCMV9WSVJUX0JBU0UJCShPUklPTjVYX1JFR1NfVklSVF9CQVNFIHwgMHhhMDAwMCkKKyNkZWZpbmUgT1JJT041WF9VU0IxX1JFRyh4KQkJKE9SSU9ONVhfVVNCMV9WSVJUX0JBU0UgfCAoeCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXZpY2UgQnVzIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTVBQXzBfN19DVFJMCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MDAwKQorI2RlZmluZSBNUFBfOF8xNV9DVFJMCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MDA0KQorI2RlZmluZSBNUFBfMTZfMTlfQ1RSTAkJT1JJT041WF9ERVZfQlVTX1JFRygweDA1MCkKKyNkZWZpbmUgTVBQX0RFVl9DVFJMCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MDA4KQorI2RlZmluZSBNUFBfUkVTRVRfU0FNUExFCU9SSU9ONVhfREVWX0JVU19SRUcoMHgwMTApCisjZGVmaW5lIEdQSU9fT1VUCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTAwKQorI2RlZmluZSBHUElPX0lPX0NPTkYJCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMDQpCisjZGVmaW5lIEdQSU9fQkxJTktfRU4JCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMDgpCisjZGVmaW5lIEdQSU9fSU5fUE9MCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTBjKQorI2RlZmluZSBHUElPX0RBVEFfSU4JCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMTApCisjZGVmaW5lIEdQSU9fRURHRV9DQVVTRQkJT1JJT041WF9ERVZfQlVTX1JFRygweDExNCkKKyNkZWZpbmUgR1BJT19FREdFX01BU0sJCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMTgpCisjZGVmaW5lIEdQSU9fTEVWRUxfTUFTSwkJT1JJT041WF9ERVZfQlVTX1JFRygweDExYykKKyNkZWZpbmUgREVWX0JBTktfMF9QQVJBTQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4NDVjKQorI2RlZmluZSBERVZfQkFOS18xX1BBUkFNCU9SSU9ONVhfREVWX0JVU19SRUcoMHg0NjApCisjZGVmaW5lIERFVl9CQU5LXzJfUEFSQU0JT1JJT041WF9ERVZfQlVTX1JFRygweDQ2NCkKKyNkZWZpbmUgREVWX0JBTktfQk9PVF9QQVJBTQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4NDZjKQorI2RlZmluZSBERVZfQlVTX0NUUkwJCU9SSU9ONVhfREVWX0JVU19SRUcoMHg0YzApCisjZGVmaW5lIERFVl9CVVNfSU5UX0NBVVNFCU9SSU9ONVhfREVWX0JVU19SRUcoMHg0ZDApCisjZGVmaW5lIERFVl9CVVNfSU5UX01BU0sJT1JJT041WF9ERVZfQlVTX1JFRygweDRkNCkKKyNkZWZpbmUgR1BJT19NQVgJCTMyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9yaW9uIENQVSBCcmlkZ2UgUmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENQVV9DT05GCQlPUklPTjVYX0JSSURHRV9SRUcoMHgxMDApCisjZGVmaW5lIENQVV9DVFJMCQlPUklPTjVYX0JSSURHRV9SRUcoMHgxMDQpCisjZGVmaW5lIENQVV9SRVNFVF9NQVNLCQlPUklPTjVYX0JSSURHRV9SRUcoMHgxMDgpCisjZGVmaW5lIENQVV9TT0ZUX1JFU0VUCQlPUklPTjVYX0JSSURHRV9SRUcoMHgxMGMpCisjZGVmaW5lIFBPV0VSX01OR19DVFJMX1JFRwlPUklPTjVYX0JSSURHRV9SRUcoMHgxMUMpCisjZGVmaW5lIEJSSURHRV9DQVVTRQkJT1JJT041WF9CUklER0VfUkVHKDB4MTEwKQorI2RlZmluZSBCUklER0VfTUFTSwkJT1JJT041WF9CUklER0VfUkVHKDB4MTE0KQorI2RlZmluZSAgQlJJREdFX0lOVF9USU1FUjAJMHgwMDAyCisjZGVmaW5lICBCUklER0VfSU5UX1RJTUVSMQkweDAwMDQKKyNkZWZpbmUgTUFJTl9JUlFfQ0FVU0UJCU9SSU9ONVhfQlJJREdFX1JFRygweDIwMCkKKyNkZWZpbmUgTUFJTl9JUlFfTUFTSwkJT1JJT041WF9CUklER0VfUkVHKDB4MjA0KQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxZDFlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvc3lzdGVtLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvc3lzdGVtLmgKKyAqCisgKiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29yaW9uNXguaD4KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwkvKgorCSAqIEVuYWJsZSBhbmQgaXNzdWUgc29mdCByZXNldAorCSAqLworCW9yaW9uNXhfc2V0Yml0cyhDUFVfUkVTRVRfTUFTSywgKDEgPDwgMikpOworCW9yaW9uNXhfc2V0Yml0cyhDUFVfU09GVF9SRVNFVCwgMSk7Cit9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjNTY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvdGltZXguaApAQCAtMCwwICsxLDEzIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC90aW1leC5oCisgKgorICogVHphY2hpIFBlcmVsc3RlaW4gPHR6YWNoaUBtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKDEwMCAqIEhaKQorCisjZGVmaW5lIE9SSU9ONVhfVENMSwkJMTY2NjY2NjY3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9yaW9uNXgvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTNkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC91bmNvbXByZXNzLmgKKyAqCisgKiBUemFjaGkgUGVyZWxzdGVpbiA8dHphY2hpQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxhc20vYXJjaC9vcmlvbjV4Lmg+CisKKyNkZWZpbmUgTVZfVUFSVF9USFIJKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKFVBUlQwX1BIWVNfQkFTRSArIDB4MCkpCisjZGVmaW5lIE1WX1VBUlRfTFNSIAkoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoVUFSVDBfUEhZU19CQVNFICsgMHgxNCkpCisKKyNkZWZpbmUgTFNSX1RIUkUJMHgyMAorCitzdGF0aWMgdm9pZCBwdXRjKGNvbnN0IGNoYXIgYykKK3sKKwlpbnQgaiA9IDB4MTAwMDsKKwl3aGlsZSAoLS1qICYmICEoKk1WX1VBUlRfTFNSICYgTFNSX1RIUkUpKQorCQliYXJyaWVyKCk7CisJKk1WX1VBUlRfVEhSID0gYzsKK30KKworc3RhdGljIHZvaWQgZmx1c2godm9pZCkKK3sKK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vcmlvbjV4L3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjMwNjFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC92bWFsbG9jLmgKQEAgLTAsMCArMSw1IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtb3Jpb241eC92bWFsbG9jLmgKKyAqLworCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZmQ4MDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9jYW1lcmEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9jYW1lcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTUxNmNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2NhbWVyYS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgICAgY2FtZXJhLmggLSBQWEEgY2FtZXJhIGRyaXZlciBoZWFkZXIgZmlsZQorCisgICAgQ29weXJpZ2h0IChDKSAyMDAzLCBJbnRlbCBDb3Jwb3JhdGlvbgorICAgIENvcHlyaWdodCAoQykgMjAwOCwgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9DQU1FUkFfSF8KKyNkZWZpbmUgX19BU01fQVJDSF9DQU1FUkFfSF8KKworI2RlZmluZSBQWEFfQ0FNRVJBX01BU1RFUgkxCisjZGVmaW5lIFBYQV9DQU1FUkFfREFUQVdJRFRIXzQJMgorI2RlZmluZSBQWEFfQ0FNRVJBX0RBVEFXSURUSF81CTQKKyNkZWZpbmUgUFhBX0NBTUVSQV9EQVRBV0lEVEhfOAk4CisjZGVmaW5lIFBYQV9DQU1FUkFfREFUQVdJRFRIXzkJMHgxMAorI2RlZmluZSBQWEFfQ0FNRVJBX0RBVEFXSURUSF8xMAkweDIwCisjZGVmaW5lIFBYQV9DQU1FUkFfUENMS19FTgkweDQwCisjZGVmaW5lIFBYQV9DQU1FUkFfTUNMS19FTgkweDgwCisjZGVmaW5lIFBYQV9DQU1FUkFfUENQCQkweDEwMAorI2RlZmluZSBQWEFfQ0FNRVJBX0hTUAkJMHgyMDAKKyNkZWZpbmUgUFhBX0NBTUVSQV9WU1AJCTB4NDAwCisKK3N0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSB7CisJaW50ICgqaW5pdCkoc3RydWN0IGRldmljZSAqKTsKKwlpbnQgKCpwb3dlcikoc3RydWN0IGRldmljZSAqLCBpbnQpOworCWludCAoKnJlc2V0KShzdHJ1Y3QgZGV2aWNlICosIGludCk7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWNsa18xMGtoejsKK307CisKK2V4dGVybiB2b2lkIHB4YV9zZXRfY2FtZXJhX2luZm8oc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhICopOworCisjZW5kaWYgLyogX19BU01fQVJDSF9DQU1FUkFfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VudHJ5LW1hY3JvLlMKaW5kZXggYjdlNzMwOC4uYzE0NWJiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VudHJ5LW1hY3JvLlMKQEAgLTM1LDcgKzM1LDcgQEAKIDEwMDQ6CiAJCW1yYwlwNiwgMCwgXGlycXN0YXQsIGM2LCBjMCwgMAlAIElDSVAyCiAJCW1yYwlwNiwgMCwgXGlycW5yLCBjNywgYzAsIDAJQCBJQ01SMgotCQlhbmRzCVxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCisJCWFuZHMJXGlycW5yLCBcaXJxc3RhdCwgXGlycW5yCiAJCWJlcQkxMDAzZgogCQlyc2IJXGlycXN0YXQsIFxpcnFuciwgIzAKIAkJYW5kCVxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZ3Vtc3RpeC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2d1bXN0aXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE4NWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2d1bXN0aXguaApAQCAtMCwwICsxLDk2IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9ndW1zdGl4LmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKworLyogQlRSRVNFVCAtIFJlc2V0IGxpbmUgdG8gQmx1ZXRvb3RoIG1vZHVsZSwgYWN0aXZlIGxvdyBzaWduYWwuICovCisjZGVmaW5lIEdQSU9fR1VNU1RJWF9CVFJFU0VUICAgICAgICAgIDcKKyNkZWZpbmUgR1BJT19HVU1TVElYX0JUUkVTRVRfTUQJCShHUElPX0dVTVNUSVhfQlRSRVNFVCB8IEdQSU9fT1VUKQorCisKKy8qCitHUElPbiAtIElucHV0IGZyb20gTUFYODIzIChvciBlcXVpdiksIG5vcm1hbGl6aW5nIFVTQiArNVYgaW50byBhIGNsZWFuCitpbnRlcnJ1cHQgc2lnbmFsIGZvciBkZXRlcm1pbmluZyBjYWJsZSBwcmVzZW5jZS4gT24gdGhlIG9yaWdpbmFsIGd1bXN0aXgsCit0aGlzIGlzIEdQSU84MSwgYW5kIEdQSU84MyBuZWVkcyB0byBiZSBkZWZpbmVkIGFzIHdlbGwuIE9uIHRoZSBndW1zdGl4IEYsCit0aGlzIG1vdmVzIHRvIEdQSU8xNyBhbmQgR1BJTzM3LiAqLworCisvKiBHUElPeCAtIENvbm5lY3RzIHRvIFVTQiBEKyBhbmQgdXNlZCBhcyBhIHB1bGwtdXAgYWZ0ZXIgR1BJT24KK2hhcyBkZXRlY3RlZCBhIGNhYmxlIGluc2VydGlvbjsgZHJpdmVuIGxvdyBvdGhlcndpc2UuICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9HVU1TVElYX09SSUcKKworI2RlZmluZSBHUElPX0dVTVNUSVhfVVNCX0dQSU9uCQk4MQorI2RlZmluZSBHUElPX0dVTVNUSVhfVVNCX0dQSU94CQk4MworCisjZWxzZQorCisjZGVmaW5lIEdQSU9fR1VNU1RJWF9VU0JfR1BJT24JCTM1CisjZGVmaW5lIEdQSU9fR1VNU1RJWF9VU0JfR1BJT3gJCTQxCisKKyNlbmRpZgorCisvKiB1c2Igc3RhdGUgY2hhbmdlICovCisjZGVmaW5lIEdVTVNUSVhfVVNCX0lOVFJfSVJRCQlJUlFfR1BJTyhHUElPX0dVTVNUSVhfVVNCX0dQSU9uKQorCisjZGVmaW5lIEdQSU9fR1VNU1RJWF9VU0JfR1BJT25fTUQJKEdQSU9fR1VNU1RJWF9VU0JfR1BJT24gfCBHUElPX0lOKQorI2RlZmluZSBHUElPX0dVTVNUSVhfVVNCX0dQSU94X0NPTl9NRAkoR1BJT19HVU1TVElYX1VTQl9HUElPeCB8IEdQSU9fT1VUKQorI2RlZmluZSBHUElPX0dVTVNUSVhfVVNCX0dQSU94X0RJU19NRAkoR1BJT19HVU1TVElYX1VTQl9HUElPeCB8IEdQSU9fSU4pCisKKy8qCisgKiBTRC9NTUMgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBHVU1TVElYX0dQSU9fblNEX1dQCQkyMiAvKiBTRCBXcml0ZSBQcm90ZWN0ICovCisjZGVmaW5lIEdVTVNUSVhfR1BJT19uU0RfREVURUNUCQkxMSAvKiBNTUMvU0QgQ2FyZCBEZXRlY3QgKi8KKyNkZWZpbmUgR1VNU1RJWF9JUlFfR1BJT19uU0RfREVURUNUCUlSUV9HUElPKEdVTVNUSVhfR1BJT19uU0RfREVURUNUKQorCisvKgorICogU01DIEV0aGVybmV0IGRlZmluaXRpb25zCisgKiBFVEhfUlNUIHByb3ZpZGVzIGEgaGFyZHdhcmUgcmVzZXQgbGluZSB0byB0aGUgZXRoZXJuZXQgY2hpcAorICogRVRIIGlzIHRoZSBJUlEgbGluZSBpbiBmcm9tIHRoZSBldGhlcm5ldCBjaGlwIHRvIHRoZSBQWEEKKyAqLworI2RlZmluZSBHUElPX0dVTVNUSVhfRVRIMF9SU1QJCTgwCisjZGVmaW5lIEdQSU9fR1VNU1RJWF9FVEgwX1JTVF9NRAkoR1BJT19HVU1TVElYX0VUSDBfUlNUIHwgR1BJT19PVVQpCisjZGVmaW5lIEdQSU9fR1VNU1RJWF9FVEgxX1JTVAkJNTIKKyNkZWZpbmUgR1BJT19HVU1TVElYX0VUSDFfUlNUX01ECShHUElPX0dVTVNUSVhfRVRIMV9SU1QgfCBHUElPX09VVCkKKworI2RlZmluZSBHUElPX0dVTVNUSVhfRVRIMAkJMzYKKyNkZWZpbmUgR1BJT19HVU1TVElYX0VUSDBfTUQJCShHUElPX0dVTVNUSVhfRVRIMCB8IEdQSU9fSU4pCisjZGVmaW5lIEdVTVNUSVhfRVRIMF9JUlEJCUlSUV9HUElPKEdQSU9fR1VNU1RJWF9FVEgwKQorI2RlZmluZSBHUElPX0dVTVNUSVhfRVRIMQkJMjcKKyNkZWZpbmUgR1BJT19HVU1TVElYX0VUSDFfTUQJCShHUElPX0dVTVNUSVhfRVRIMSB8IEdQSU9fSU4pCisjZGVmaW5lIEdVTVNUSVhfRVRIMV9JUlEJCUlSUV9HUElPKEdQSU9fR1VNU1RJWF9FVEgxKQorCisKKy8qIENGIHJlc2V0IGxpbmUgKi8KKyNkZWZpbmUgR1BJTzhfUkVTRVQJCQk4CisKKy8qIENGIHNsb3QgMCAqLworI2RlZmluZSBHUElPNF9uQlZEMQkJCTQKKyNkZWZpbmUgR1BJTzRfblNUU0NIRwkJCUdQSU80X25CVkQxCisjZGVmaW5lIEdQSU8xMV9uQ0QJCQkxMQorI2RlZmluZSBHUElPMjZfUFJEWV9uQlNZCQkyNgorI2RlZmluZSBHVU1TVElYX1MwX25TVFNDSEdfSVJRCQlJUlFfR1BJTyhHUElPNF9uU1RTQ0hHKQorI2RlZmluZSBHVU1TVElYX1MwX25DRF9JUlEJCUlSUV9HUElPKEdQSU8xMV9uQ0QpCisjZGVmaW5lIEdVTVNUSVhfUzBfUFJEWV9uQlNZX0lSUQlJUlFfR1BJTyhHUElPMjZfUFJEWV9uQlNZKQorCisvKiBDRiBzbG90IDEgKi8KKyNkZWZpbmUgR1BJTzE4X25CVkQxCQkJMTgKKyNkZWZpbmUgR1BJTzE4X25TVFNDSEcJCQlHUElPMThfbkJWRDEKKyNkZWZpbmUgR1BJTzM2X25DRAkJCTM2CisjZGVmaW5lIEdQSU8yN19QUkRZX25CU1kJCTI3CisjZGVmaW5lIEdVTVNUSVhfUzFfblNUU0NIR19JUlEJCUlSUV9HUElPKEdQSU8xOF9uU1RTQ0hHKQorI2RlZmluZSBHVU1TVElYX1MxX25DRF9JUlEJCUlSUV9HUElPKEdQSU8zNl9uQ0QpCisjZGVmaW5lIEdVTVNUSVhfUzFfUFJEWV9uQlNZX0lSUQlJUlFfR1BJTyhHUElPMjdfUFJEWV9uQlNZKQorCisvKiBDRiBHUElPIGxpbmUgbW9kZXMgKi8KKyNkZWZpbmUgR1BJTzRfblNUU0NIR19NRAkJKEdQSU80X25TVFNDSEcgfCBHUElPX0lOKQorI2RlZmluZSBHUElPOF9SRVNFVF9NRAkJCShHUElPOF9SRVNFVCB8IEdQSU9fT1VUKQorI2RlZmluZSBHUElPMTFfbkNEX01ECQkJKEdQSU8xMV9uQ0QgfCBHUElPX0lOKQorI2RlZmluZSBHUElPMThfblNUU0NIR19NRAkJKEdQSU8xOF9uU1RTQ0hHIHwgR1BJT19JTikKKyNkZWZpbmUgR1BJTzI2X1BSRFlfbkJTWV9NRAkJKEdQSU8yNl9QUkRZX25CU1kgfCBHUElPX0lOKQorI2RlZmluZSBHUElPMjdfUFJEWV9uQlNZX01ECQkoR1BJTzI3X1BSRFlfbkJTWSB8IEdQSU9fSU4pCisjZGVmaW5lIEdQSU8zNl9uQ0RfTUQJCQkoR1BJTzM2X25DRCB8IEdQSU9fSU4pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJkYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lyZGEuaAppbmRleCA3NDg0MDZmLi45OWY0ZjQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJkYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcmRhLmgKQEAgLTEwLDYgKzEwLDggQEAKIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgewogCWludCB0cmFuc2NlaXZlcl9jYXA7CiAJdm9pZCAoKnRyYW5zY2VpdmVyX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpOworCWludCAoKnN0YXJ0dXApKHN0cnVjdCBkZXZpY2UgKmRldik7CisJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogfTsKIAogZXh0ZXJuIHZvaWQgcHhhX3NldF9maWNwX2luZm8oc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaAppbmRleCBjNTYyYjk3Li41MGM3N2VhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKQEAgLTE4MSw3ICsxODEsOCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9MVUJCT0NLKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19NQUNIX01BSU5TVE9ORSkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfTUFDSF9QQ00wMjcpCisgICAgICBkZWZpbmVkKENPTkZJR19NQUNIX1BDTTAyNykgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfTUFDSF9NQUdJQ0lBTikKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfRU5EKQogI2Vsc2UKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfU1RBUlQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWFnaWNpYW4uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tYWdpY2lhbi5oCmluZGV4IDMzN2Y1MWYuLmIzNGZkNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tYWdpY2lhbi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tYWdpY2lhbi5oCkBAIC0xMiw3ICsxMiw4IEBACiAjaWZuZGVmIF9NQUdJQ0lBTl9IXwogI2RlZmluZSBfTUFHSUNJQU5fSF8KIAotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAKIC8qCiAgKiBQWEEgR1BJT3MKQEAgLTM0LDYgKzM1LDcgQEAKICNkZWZpbmUgR1BJTzQ4X01BR0lDSUFOX1VOS05PV04JCQk0OAogI2RlZmluZSBHUElPNTZfTUFHSUNJQU5fVU5LTk9XTgkJCTU2CiAjZGVmaW5lIEdQSU81N19NQUdJQ0lBTl9DQU1fUkVTRVQJCTU3CisjZGVmaW5lIEdQSU83NV9NQUdJQ0lBTl9TQU1TVU5HX1BPV0VSCQk3NQogI2RlZmluZSBHUElPODNfTUFHSUNJQU5fbklSX0VOCQkJODMKICNkZWZpbmUgR1BJTzg2X01BR0lDSUFOX0dTTV9SRVNFVAkJODYKICNkZWZpbmUgR1BJTzg3X01BR0lDSUFOX0dTTV9TRUxFQ1QJCTg3CkBAIC04MSw2ICs4Myw3IEBACiAjZGVmaW5lIEdQSU80OF9NQUdJQ0lBTl9VTktOT1dOX01ECQkoNDggfCBHUElPX09VVCkKICNkZWZpbmUgR1BJTzU2X01BR0lDSUFOX1VOS05PV05fTUQJCSg1NiB8IEdQSU9fT1VUKQogI2RlZmluZSBHUElPNTdfTUFHSUNJQU5fQ0FNX1JFU0VUX01ECQkoNTcgfCBHUElPX09VVCkKKyNkZWZpbmUgR1BJTzc1X01BR0lDSUFOX1NBTVNVTkdfUE9XRVJfTUQJKDc1IHwgR1BJT19PVVQpCiAjZGVmaW5lIEdQSU84M19NQUdJQ0lBTl9uSVJfRU5fTUQJCSg4MyB8IEdQSU9fT1VUKQogI2RlZmluZSBHUElPODZfTUFHSUNJQU5fR1NNX1JFU0VUX01ECQkoODYgfCBHUElPX09VVCkKICNkZWZpbmUgR1BJTzg3X01BR0lDSUFOX0dTTV9TRUxFQ1RfTUQJCSg4NyB8IEdQSU9fT1VUKQpAQCAtMTA4LDQgKzExMSw1NiBAQAogI2RlZmluZSBHUElPMTE5X01BR0lDSUFOX1VOS05PV05fTUQJCSgxMTkgfCBHUElPX09VVCkKICNkZWZpbmUgR1BJTzEyMF9NQUdJQ0lBTl9VTktOT1dOX01ECQkoMTIwIHwgR1BJT19PVVQpCiAKKy8qCisgKiBDUExEIElSUXMKKyAqLworCisjZGVmaW5lIElSUV9NQUdJQ0lBTl9TRAkJKElSUV9CT0FSRF9TVEFSVCArIDApCisjZGVmaW5lIElSUV9NQUdJQ0lBTl9FUAkJKElSUV9CT0FSRF9TVEFSVCArIDEpCisjZGVmaW5lIElSUV9NQUdJQ0lBTl9CVAkJKElSUV9CT0FSRF9TVEFSVCArIDIpCisjZGVmaW5lIElSUV9NQUdJQ0lBTl9BQwkJKElSUV9CT0FSRF9TVEFSVCArIDMpCisKKy8qCisgKiBDUExEIEVHUElPcworICovCisKKyNkZWZpbmUgTUFHSUNJQU5fRUdQSU9fQkFTRQkJCTB4ODAgLyogR1BJT19CT0FSRF9TVEFSVCAqLworI2RlZmluZSBNQUdJQ0lBTl9FR1BJTyhyZWcsYml0KSBcCisJKE1BR0lDSUFOX0VHUElPX0JBU0UgKyA4KnJlZyArIGJpdCkKKworLyogb3V0cHV0ICovCisKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fVE9QUE9MWV9QT1dFUgkJTUFHSUNJQU5fRUdQSU8oMCwgMikKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fTEVEX1BPV0VSCQlNQUdJQ0lBTl9FR1BJTygwLCA1KQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9HU01fUkVTRVQJCU1BR0lDSUFOX0VHUElPKDAsIDYpCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX0xDRF9QT1dFUgkJTUFHSUNJQU5fRUdQSU8oMCwgNykKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fU1BLX1BPV0VSCQlNQUdJQ0lBTl9FR1BJTygxLCAwKQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9FUF9QT1dFUgkJCU1BR0lDSUFOX0VHUElPKDEsIDEpCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX0lOX1NFTDAJCQlNQUdJQ0lBTl9FR1BJTygxLCAyKQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9JTl9TRUwxCQkJTUFHSUNJQU5fRUdQSU8oMSwgMykKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fTUlDX1BPV0VSCQlNQUdJQ0lBTl9FR1BJTygxLCA0KQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9DT0RFQ19SRVNFVAkJTUFHSUNJQU5fRUdQSU8oMSwgNSkKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fQ09ERUNfUE9XRVIJCU1BR0lDSUFOX0VHUElPKDEsIDYpCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX0JMX1BPV0VSCQkJTUFHSUNJQU5fRUdQSU8oMSwgNykKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIJCQlNQUdJQ0lBTl9FR1BJTygyLCAwKQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9DQVJLSVRfTUlDCQlNQUdJQ0lBTl9FR1BJTygyLCAxKQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9VTktOT1dOX1dBVkVERVZfRExMCU1BR0lDSUFOX0VHUElPKDIsIDIpCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX0ZMQVNIX1ZQUAkJTUFHSUNJQU5fRUdQSU8oMiwgMykKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fQkxfUE9XRVIyCQlNQUdJQ0lBTl9FR1BJTygyLCA0KQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9DSEFSR0VfRU4JCU1BR0lDSUFOX0VHUElPKDIsIDUpCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX0dTTV9QT1dFUgkJTUFHSUNJQU5fRUdQSU8oMiwgNykKKworLyogaW5wdXQgKi8KKworI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9DQUJMRV9TVEFURV9BQwkJTUFHSUNJQU5fRUdQSU8oNCwgMCkKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fQ0FCTEVfU1RBVEVfVVNCCQlNQUdJQ0lBTl9FR1BJTyg0LCAxKQorCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX0JPQVJEX0lEMAkJTUFHSUNJQU5fRUdQSU8oNSwgMCkKKyNkZWZpbmUgRUdQSU9fTUFHSUNJQU5fQk9BUkRfSUQxCQlNQUdJQ0lBTl9FR1BJTyg1LCAxKQorI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9CT0FSRF9JRDIJCU1BR0lDSUFOX0VHUElPKDUsIDIpCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX0xDRF9TRUxFQ1QJCU1BR0lDSUFOX0VHUElPKDUsIDMpCisjZGVmaW5lIEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWQkJTUFHSUNJQU5fRUdQSU8oNSwgNCkKKworI2RlZmluZSBFR1BJT19NQUdJQ0lBTl9FUF9JTlNFUlQJCU1BR0lDSUFOX0VHUElPKDYsIDEpCisKICNlbmRpZiAvKiBfTUFHSUNJQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAtcHhhMjV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLXB4YTI1eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTkzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLXB4YTI1eC5oCkBAIC0wLDAgKzEsMTYxIEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTI1WF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTI1WF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAtcHhhMnh4Lmg+CisKKy8qIEdQSU8gKi8KKyNkZWZpbmUgR1BJTzJfR1BJTwkJTUZQX0NGR19JTihHUElPMiwgQUYwKQorI2RlZmluZSBHUElPM19HUElPCQlNRlBfQ0ZHX0lOKEdQSU8zLCBBRjApCisjZGVmaW5lIEdQSU80X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzQsIEFGMCkKKyNkZWZpbmUgR1BJTzVfR1BJTwkJTUZQX0NGR19JTihHUElPNSwgQUYwKQorI2RlZmluZSBHUElPNl9HUElPCQlNRlBfQ0ZHX0lOKEdQSU82LCBBRjApCisjZGVmaW5lIEdQSU83X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzcsIEFGMCkKKyNkZWZpbmUgR1BJTzhfR1BJTwkJTUZQX0NGR19JTihHUElPOCwgQUYwKQorCisjZGVmaW5lIEdQSU8xX1JTVAkJTUZQX0NGR19JTihHUElPMSwgQUYxKQorCisvKiBDcnlzdGFsIGFuZCBDbG9jayBTaWduYWxzICovCisjZGVmaW5lIEdQSU8xMF9SVENDTEsJCU1GUF9DRkdfT1VUKEdQSU8xMCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83MF9SVENfQ0xLCQlNRlBfQ0ZHX09VVChHUElPNzAsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPN180OE1IegkJTUZQX0NGR19PVVQoR1BJTzcsICBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzExXzNfNk1IegkJTUZQX0NGR19PVVQoR1BJTzExLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzcxXzNfNk1IegkJTUZQX0NGR19PVVQoR1BJTzcxLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzEyXzMyS0h6CQlNRlBfQ0ZHX09VVChHUElPMTIsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNzJfMzJrSHoJCU1GUF9DRkdfT1VUKEdQSU83MiwgQUYxLCBEUklWRV9MT1cpCisKKy8qIFNEUkFNIGFuZCBTdGF0aWMgTWVtb3J5IEkvTyBTaWduYWxzICovCisjZGVmaW5lIEdQSU8xNV9uQ1NfMQkJTUZQX0NGR19PVVQoR1BJTzE1LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU83OF9uQ1NfMgkJTUZQX0NGR19PVVQoR1BJTzc4LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU83OV9uQ1NfMwkJTUZQX0NGR19PVVQoR1BJTzc5LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU84MF9uQ1NfNAkJTUZQX0NGR19PVVQoR1BJTzgwLCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU8zM19uQ1NfNQkJTUZQX0NGR19PVVQoR1BJTzMzLCBBRjIsIERSSVZFX0hJR0gpCisKKy8qIE1pc2NlbGxhbmVvdXMgSS9PIGFuZCBETUEgU2lnbmFscyAqLworI2RlZmluZSBHUElPMThfUkRZCQlNRlBfQ0ZHX0lOKEdQSU8xOCwgQUYxKQorI2RlZmluZSBHUElPMjBfRFJFUV8wCQlNRlBfQ0ZHX0lOKEdQSU8yMCwgQUYxKQorI2RlZmluZSBHUElPMTlfRFJFUV8xCQlNRlBfQ0ZHX0lOKEdQSU8xOSwgQUYxKQorCisvKiBBbHRlcm5hdGUgQnVzIE1hc3RlciBNb2RlIEkvTyBTaWduYWxzICovCisjZGVmaW5lIEdQSU8xM19NQkdOVAkJTUZQX0NGR19PVVQoR1BJTzEzLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzczX01CR05UCQlNRlBfQ0ZHX09VVChHUElPNzMsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMTRfTUJSRVEJCU1GUF9DRkdfSU4oR1BJTzE0LCBBRjEpCisjZGVmaW5lIEdQSU82Nl9NQlJFUQkJTUZQX0NGR19JTihHUElPNjYsIEFGMSkKKworLyogUEMgQ0FSRCAqLworI2RlZmluZSBHUElPNTJfblBDRV8xCQlNRlBfQ0ZHX09VVChHUElPNTIsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzUzX25QQ0VfMgkJTUZQX0NGR19PVVQoR1BJTzUzLCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU81NV9uUFJFRwkJTUZQX0NGR19PVVQoR1BJTzU1LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU81MF9uUElPUgkJTUZQX0NGR19PVVQoR1BJTzUwLCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU81MV9uUElPVwkJTUZQX0NGR19PVVQoR1BJTzUxLCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU80OV9uUFdFCQlNRlBfQ0ZHX09VVChHUElPNDksIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzQ4X25QT0UJCU1GUF9DRkdfT1VUKEdQSU80OCwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNTdfbklPSVMxNgkJTUZQX0NGR19JTihHUElPNTcsIEFGMSkKKyNkZWZpbmUgR1BJTzU2X25QV0FJVAkJTUZQX0NGR19JTihHUElPNTYsIEFGMSkKKyNkZWZpbmUgR1BJTzU0X25QU0tUU0VMCQlNRlBfQ0ZHX09VVChHUElPNTQsIEFGMiwgRFJJVkVfSElHSCkKKworLyogRkZVQVJUICovCisjZGVmaW5lIEdQSU8zNF9GRlVBUlRfUlhECU1GUF9DRkdfSU4oR1BJTzM0LCBBRjEpCisjZGVmaW5lIEdQSU8zNV9GRlVBUlRfQ1RTCU1GUF9DRkdfSU4oR1BJTzM1LCBBRjEpCisjZGVmaW5lIEdQSU8zNl9GRlVBUlRfRENECU1GUF9DRkdfSU4oR1BJTzM2LCBBRjEpCisjZGVmaW5lIEdQSU8zN19GRlVBUlRfRFNSCU1GUF9DRkdfSU4oR1BJTzM3LCBBRjEpCisjZGVmaW5lIEdQSU8zOF9GRlVBUlRfUkkJTUZQX0NGR19JTihHUElPMzgsIEFGMSkKKyNkZWZpbmUgR1BJTzM5X0ZGVUFSVF9UWEQJTUZQX0NGR19PVVQoR1BJTzM5LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU80MF9GRlVBUlRfRFRSCU1GUF9DRkdfT1VUKEdQSU80MCwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNDFfRkZVQVJUX1JUUwlNRlBfQ0ZHX09VVChHUElPNDEsIEFGMiwgRFJJVkVfSElHSCkKKworLyogQlRVQVJUICovCisjZGVmaW5lIEdQSU80Ml9CVFVBUlRfUlhECU1GUF9DRkdfSU4oR1BJTzQyLCBBRjEpCisjZGVmaW5lIEdQSU80M19CVFVBUlRfVFhECU1GUF9DRkdfT1VUKEdQSU80MywgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNDRfQlRVQVJUX0NUUwlNRlBfQ0ZHX0lOKEdQSU80NCwgQUYxKQorI2RlZmluZSBHUElPNDVfQlRVQVJUX1JUUwlNRlBfQ0ZHX09VVChHUElPNDUsIEFGMiwgRFJJVkVfSElHSCkKKworLyogU1RVQVJUICovCisjZGVmaW5lIEdQSU80Nl9TVFVBUlRfUlhECU1GUF9DRkdfSU4oR1BJTzQ2LCBBRjIpCisjZGVmaW5lIEdQSU80N19TVFVBUlRfVFhECU1GUF9DRkdfT1VUKEdQSU80NywgQUYxLCBEUklWRV9ISUdIKQorCisvKiBIV1VBUlQgKi8KKyNkZWZpbmUgR1BJTzQyX0hXVUFSVF9SWEQJTUZQX0NGR19JTihHUElPNDIsIEFGMykKKyNkZWZpbmUgR1BJTzQzX0hXVUFSVF9UWEQJTUZQX0NGR19PVVQoR1BJTzQzLCBBRjMsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU80NF9IV1VBUlRfQ1RTCU1GUF9DRkdfSU4oR1BJTzQ0LCBBRjMpCisjZGVmaW5lIEdQSU80NV9IV1VBUlRfUlRTCU1GUF9DRkdfT1VUKEdQSU80NSwgQUYzLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNDhfSFdVQVJUX1RYRAlNRlBfQ0ZHX09VVChHUElPNDgsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzQ5X0hXVUFSVF9SWEQJTUZQX0NGR19JTihHUElPNDksIEFGMSkKKyNkZWZpbmUgR1BJTzUwX0hXVUFSVF9DVFMJTUZQX0NGR19JTihHUElPNTAsIEFGMSkKKyNkZWZpbmUgR1BJTzUxX0hXVUFSVF9SVFMJTUZQX0NGR19PVVQoR1BJTzUxLCBBRjEsIERSSVZFX0hJR0gpCisKKy8qIEZJQ1AgKi8KKyNkZWZpbmUgR1BJTzQ2X0ZJQ1BfUlhECQlNRlBfQ0ZHX0lOKEdQSU80NiwgQUYxKQorI2RlZmluZSBHUElPNDdfRklDUF9UWEQJCU1GUF9DRkdfT1VUKEdQSU80NywgQUYyLCBEUklWRV9ISUdIKQorCisvKiBQV00gMC8xICovCisjZGVmaW5lIEdQSU8xNl9QV00wX09VVAkJTUZQX0NGR19PVVQoR1BJTzE2LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzE3X1BXTTFfT1VUCQlNRlBfQ0ZHX09VVChHUElPMTcsIEFGMiwgRFJJVkVfTE9XKQorCisvKiBBQzk3ICovCisjZGVmaW5lIEdQSU8yOF9BQzk3X0JJVENMSwlNRlBfQ0ZHX0lOKEdQSU8yOCwgQUYxKQorI2RlZmluZSBHUElPMjlfQUM5N19TREFUQV9JTl8wCU1GUF9DRkdfSU4oR1BJTzI5LCBBRjEpCisjZGVmaW5lIEdQSU8zMF9BQzk3X1NEQVRBX09VVAlNRlBfQ0ZHX09VVChHUElPMzAsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMzFfQUM5N19TWU5DCU1GUF9DRkdfT1VUKEdQSU8zMSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8zMl9BQzk3X1NEQVRBX0lOXzEJTUZQX0NGR19JTihHUElPMzIsIEFGMSkKKworLyogSTJTICovCisjZGVmaW5lIEdQSU8yOF9JMlNfQklUQ0xLX0lOCU1GUF9DRkdfSU4oR1BJTzI4LCBBRjIpCisjZGVmaW5lIEdQSU8yOF9JMlNfQklUQ0xLX09VVAlNRlBfQ0ZHX09VVChHUElPMjgsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMjlfSTJTX1NEQVRBX0lOCU1GUF9DRkdfSU4oR1BJTzI5LCBBRjIpCisjZGVmaW5lIEdQSU8zMF9JMlNfU0RBVEFfT1VUCU1GUF9DRkdfT1VUKEdQSU8zMCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8zMV9JMlNfU1lOQwkJTUZQX0NGR19PVVQoR1BJTzMxLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzMyX0kyU19TWVNDTEsJTUZQX0NGR19PVVQoR1BJTzMyLCBBRjEsIERSSVZFX0xPVykKKworLyogU1NQIDEgKi8KKyNkZWZpbmUgR1BJTzIzX1NTUDFfU0NMSwlNRlBfQ0ZHX09VVChHUElPMjMsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMjRfU1NQMV9TRlJNCU1GUF9DRkdfT1VUKEdQSU8yNCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8yNV9TU1AxX1RYRAkJTUZQX0NGR19PVVQoR1BJTzI1LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzI2X1NTUDFfUlhECQlNRlBfQ0ZHX0lOKEdQSU8yNiwgQUYxKQorI2RlZmluZSBHUElPMjdfU1NQMV9FWFRDTEsJTUZQX0NGR19JTihHUElPMjcsIEFGMSkKKworLyogU1NQIDIgLSBOU1NQICovCisjZGVmaW5lIEdQSU84MV9TU1AyX0NMS19PVVQgCU1GUF9DRkdfT1VUKEdQSU84MSwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU84MV9TU1AyX0NMS19JTiAgCU1GUF9DRkdfSU4oR1BJTzgxLCBBRjEpCisjZGVmaW5lIEdQSU84Ml9TU1AyX0ZSTV9PVVQgCU1GUF9DRkdfT1VUKEdQSU84MiwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU84Ml9TU1AyX0ZSTV9JTiAgCU1GUF9DRkdfSU4oR1BJTzgyLCBBRjEpCisjZGVmaW5lIEdQSU84M19TU1AyX1RYRCAgICAgIAlNRlBfQ0ZHX09VVChHUElPODMsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPODNfU1NQMl9SWEQgICAgICAJTUZQX0NGR19JTihHUElPODMsIEFGMikKKyNkZWZpbmUgR1BJTzg0X1NTUDJfVFhEICAgICAgCU1GUF9DRkdfT1VUKEdQSU84NCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU84NF9TU1AyX1JYRCAgICAgIAlNRlBfQ0ZHX0lOKEdQSU84NCwgQUYyKQorCisvKiBNTUMgKi8KKyNkZWZpbmUgR1BJTzZfTU1DX0NMSwkJTUZQX0NGR19PVVQoR1BJTzYsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPOF9NTUNfQ1MwCQlNRlBfQ0ZHX09VVChHUElPOCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU85X01NQ19DUzEJCU1GUF9DRkdfT1VUKEdQSU85LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzM0X01NQ19DUzAJCU1GUF9DRkdfT1VUKEdQSU8zNCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8zOV9NTUNfQ1MxCQlNRlBfQ0ZHX09VVChHUElPMzksIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNTNfTU1DX0NMSwkJTUZQX0NGR19PVVQoR1BJTzUzLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzU0X01NQ19DTEsJCU1GUF9DRkdfT1VUKEdQSU81NCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82OV9NTUNfQ0xLCQlNRlBfQ0ZHX09VVChHUElPNjksIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNjdfTU1DX0NTMAkJTUZQX0NGR19PVVQoR1BJTzY3LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzY4X01NQ19DUzEJCU1GUF9DRkdfT1VUKEdQSU82OCwgQUYxLCBEUklWRV9MT1cpCisKKy8qIExDRCAqLworI2RlZmluZSBHUElPNThfTENEX0xERF8wCU1GUF9DRkdfT1VUKEdQSU81OCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81OV9MQ0RfTEREXzEJTUZQX0NGR19PVVQoR1BJTzU5LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzYwX0xDRF9MRERfMglNRlBfQ0ZHX09VVChHUElPNjAsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNjFfTENEX0xERF8zCU1GUF9DRkdfT1VUKEdQSU82MSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82Ml9MQ0RfTEREXzQJTUZQX0NGR19PVVQoR1BJTzYyLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzYzX0xDRF9MRERfNQlNRlBfQ0ZHX09VVChHUElPNjMsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNjRfTENEX0xERF82CU1GUF9DRkdfT1VUKEdQSU82NCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82NV9MQ0RfTEREXzcJTUZQX0NGR19PVVQoR1BJTzY1LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzY2X0xDRF9MRERfOAlNRlBfQ0ZHX09VVChHUElPNjYsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNjdfTENEX0xERF85CU1GUF9DRkdfT1VUKEdQSU82NywgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82OF9MQ0RfTEREXzEwCU1GUF9DRkdfT1VUKEdQSU82OCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82OV9MQ0RfTEREXzExCU1GUF9DRkdfT1VUKEdQSU82OSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83MF9MQ0RfTEREXzEyCU1GUF9DRkdfT1VUKEdQSU83MCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83MV9MQ0RfTEREXzEzCU1GUF9DRkdfT1VUKEdQSU83MSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83Ml9MQ0RfTEREXzE0CU1GUF9DRkdfT1VUKEdQSU83MiwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83M19MQ0RfTEREXzE1CU1GUF9DRkdfT1VUKEdQSU83MywgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83NF9MQ0RfRkNMSwkJTUZQX0NGR19PVVQoR1BJTzc0LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzc1X0xDRF9MQ0xLCQlNRlBfQ0ZHX09VVChHUElPNzUsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNzZfTENEX1BDTEsJCU1GUF9DRkdfT1VUKEdQSU83NiwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83N19MQ0RfQUNCSUFTCU1GUF9DRkdfT1VUKEdQSU83NywgQUYyLCBEUklWRV9MT1cpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9QWEEyNVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21mcC1weGEyN3guaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAtcHhhMjd4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2ZWFhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAtcHhhMjd4LmgKQEAgLTAsMCArMSw0MzIgQEAKKyNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBMjdYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBMjdYX0gKKworLyoKKyAqIE5PVEU6ICBmb3IgdGhvc2Ugc3BlY2lhbC1mdW5jdGlvbiBiaWRpcmVjdGlvbmFsIEdQSU9zLCBhcyBkZXNjcmliZWQKKyAqIGluIHRoZSAiUFhBMjd4IERldmVsb3BlcidzIE1hbnVhbCIgU2VjdGlvbiAyNC40LjIuMSwgb25seSBpdHMgaW5wdXQKKyAqIGFsdGVybmF0aXZlIGlzIHByZXNlcnZlZCwgdGhlIGRpcmVjdGlvbiBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSB0aGUKKyAqIHNwZWNpZmljIGNvbnRyb2xsZXIsIGFuZCB0aGlzIHNob3VsZCB3b3JrIGluIG1vc3QgY2FzZXMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL21mcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21mcC1weGEyeHguaD4KKworLyogR1BJTyAqLworI2RlZmluZSBHUElPODVfR1BJTwkJTUZQX0NGR19JTihHUElPODUsIEFGMCkKKyNkZWZpbmUgR1BJTzg2X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzg2LCBBRjApCisjZGVmaW5lIEdQSU84N19HUElPCQlNRlBfQ0ZHX0lOKEdQSU84NywgQUYwKQorI2RlZmluZSBHUElPODhfR1BJTwkJTUZQX0NGR19JTihHUElPODgsIEFGMCkKKyNkZWZpbmUgR1BJTzg5X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzg5LCBBRjApCisjZGVmaW5lIEdQSU85MF9HUElPCQlNRlBfQ0ZHX0lOKEdQSU85MCwgQUYwKQorI2RlZmluZSBHUElPOTFfR1BJTwkJTUZQX0NGR19JTihHUElPOTEsIEFGMCkKKyNkZWZpbmUgR1BJTzkyX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzkyLCBBRjApCisjZGVmaW5lIEdQSU85M19HUElPCQlNRlBfQ0ZHX0lOKEdQSU85MywgQUYwKQorI2RlZmluZSBHUElPOTRfR1BJTwkJTUZQX0NGR19JTihHUElPOTQsIEFGMCkKKyNkZWZpbmUgR1BJTzk1X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzk1LCBBRjApCisjZGVmaW5lIEdQSU85Nl9HUElPCQlNRlBfQ0ZHX0lOKEdQSU85NiwgQUYwKQorI2RlZmluZSBHUElPOTdfR1BJTwkJTUZQX0NGR19JTihHUElPOTcsIEFGMCkKKyNkZWZpbmUgR1BJTzk4X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzk4LCBBRjApCisjZGVmaW5lIEdQSU85OV9HUElPCQlNRlBfQ0ZHX0lOKEdQSU85OSwgQUYwKQorI2RlZmluZSBHUElPMTAwX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwMCwgQUYwKQorI2RlZmluZSBHUElPMTAxX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwMSwgQUYwKQorI2RlZmluZSBHUElPMTAyX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwMiwgQUYwKQorI2RlZmluZSBHUElPMTAzX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwMywgQUYwKQorI2RlZmluZSBHUElPMTA0X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwNCwgQUYwKQorI2RlZmluZSBHUElPMTA1X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwNSwgQUYwKQorI2RlZmluZSBHUElPMTA2X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwNiwgQUYwKQorI2RlZmluZSBHUElPMTA3X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwNywgQUYwKQorI2RlZmluZSBHUElPMTA4X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwOCwgQUYwKQorI2RlZmluZSBHUElPMTA5X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEwOSwgQUYwKQorI2RlZmluZSBHUElPMTEwX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExMCwgQUYwKQorI2RlZmluZSBHUElPMTExX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExMSwgQUYwKQorI2RlZmluZSBHUElPMTEyX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExMiwgQUYwKQorI2RlZmluZSBHUElPMTEzX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExMywgQUYwKQorI2RlZmluZSBHUElPMTE0X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExNCwgQUYwKQorI2RlZmluZSBHUElPMTE1X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExNSwgQUYwKQorI2RlZmluZSBHUElPMTE2X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExNiwgQUYwKQorI2RlZmluZSBHUElPMTE3X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExNywgQUYwKQorI2RlZmluZSBHUElPMTE4X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExOCwgQUYwKQorI2RlZmluZSBHUElPMTE5X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzExOSwgQUYwKQorI2RlZmluZSBHUElPMTIwX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzEyMCwgQUYwKQorCisvKiBDcnlzdGFsIGFuZCBDbG9jayBTaWduYWxzICovCisjZGVmaW5lIEdQSU85X0haX0NMSwkJTUZQX0NGR19PVVQoR1BJTzksICBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzEwX0haX0NMSwkJTUZQX0NGR19PVVQoR1BJTzEwLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzExXzQ4X01IegkJTUZQX0NGR19PVVQoR1BJTzExLCBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzEyXzQ4X01IegkJTUZQX0NGR19PVVQoR1BJTzEyLCBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzEzX0NMS19FWFQJCU1GUF9DRkdfSU4oR1BJTzEzLCBBRjEpCisKKy8qIE9TIFRpbWVyIFNpZ25hbHMgKi8KKyNkZWZpbmUgR1BJTzExX0VYVF9TWU5DXzAJTUZQX0NGR19JTihHUElPMTEsIEFGMSkKKyNkZWZpbmUgR1BJTzEyX0VYVF9TWU5DXzEJTUZQX0NGR19JTihHUElPMTIsIEFGMSkKKyNkZWZpbmUgR1BJTzlfQ0hPVVRfMAkJTUZQX0NGR19PVVQoR1BJTzksICBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzEwX0NIT1VUXzEJCU1GUF9DRkdfT1VUKEdQSU8xMCwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8xMV9DSE9VVF8wCQlNRlBfQ0ZHX09VVChHUElPMTEsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMTJfQ0hPVVRfMQkJTUZQX0NGR19PVVQoR1BJTzEyLCBBRjEsIERSSVZFX0xPVykKKworLyogU0RSQU0gYW5kIFN0YXRpYyBNZW1vcnkgSS9PIFNpZ25hbHMgKi8KKyNkZWZpbmUgR1BJTzIwX25TRENTXzIJCU1GUF9DRkdfT1VUKEdQSU8yMCwgQUYxLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMjFfblNEQ1NfMwkJTUZQX0NGR19PVVQoR1BJTzIxLCBBRjEsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU8xNV9uQ1NfMQkJTUZQX0NGR19PVVQoR1BJTzE1LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU83OF9uQ1NfMgkJTUZQX0NGR19PVVQoR1BJTzc4LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU83OV9uQ1NfMwkJTUZQX0NGR19PVVQoR1BJTzc5LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU84MF9uQ1NfNAkJTUZQX0NGR19PVVQoR1BJTzgwLCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU8zM19uQ1NfNQkJTUZQX0NGR19PVVQoR1BJTzMzLCBBRjIsIERSSVZFX0hJR0gpCisKKy8qIE1pc2NlbGxhbmVvdXMgSS9PIGFuZCBETUEgU2lnbmFscyAqLworI2RlZmluZSBHUElPMjFfRFZBTF8wCQlNRlBfQ0ZHX09VVChHUElPMjEsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzExNl9EVkFMXzAJCU1GUF9DRkdfT1VUKEdQSU8xMTYsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzMzX0RWQUxfMQkJTUZQX0NGR19PVVQoR1BJTzMzLCBBRjEsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU85Nl9EVkFMXzEJCU1GUF9DRkdfT1VUKEdQSU85NiwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMThfUkRZCQlNRlBfQ0ZHX0lOKEdQSU8xOCwgQUYxKQorI2RlZmluZSBHUElPMjBfRFJFUV8wCQlNRlBfQ0ZHX0lOKEdQSU8yMCwgQUYxKQorI2RlZmluZSBHUElPMTE1X0RSRVFfMAkJTUZQX0NGR19JTihHUElPMTE1LCBBRjEpCisjZGVmaW5lIEdQSU84MF9EUkVRXzEJCU1GUF9DRkdfSU4oR1BJTzgwLCBBRjEpCisjZGVmaW5lIEdQSU85N19EUkVRXzEJCU1GUF9DRkdfSU4oR1BJTzk3LCBBRjIpCisjZGVmaW5lIEdQSU84NV9EUkVRXzIJCU1GUF9DRkdfSU4oR1BJTzg1LCBBRjIpCisjZGVmaW5lIEdQSU8xMDBfRFJFUV8yCQlNRlBfQ0ZHX0lOKEdQSU8xMDAsIEFGMikKKworLyogQWx0ZXJuYXRlIEJ1cyBNYXN0ZXIgTW9kZSBJL08gU2lnbmFscyAqLworI2RlZmluZSBHUElPMjBfTUJSRVEJCU1GUF9DRkdfSU4oR1BJTzIwLCBBRjIpCisjZGVmaW5lIEdQSU84MF9NQlJFUQkJTUZQX0NGR19JTihHUElPODAsIEFGMikKKyNkZWZpbmUgR1BJTzk2X01CUkVRCQlNRlBfQ0ZHX0lOKEdQSU85NiwgQUYyKQorI2RlZmluZSBHUElPMTE1X01CUkVRCQlNRlBfQ0ZHX0lOKEdQSU8xMTUsIEFGMykKKyNkZWZpbmUgR1BJTzIxX01CR05UCQlNRlBfQ0ZHX09VVChHUElPMjEsIEFGMywgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMzNfTUJHTlQJCU1GUF9DRkdfT1VUKEdQSU8zMywgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU85N19NQkdOVAkJTUZQX0NGR19PVVQoR1BJTzk3LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzExNl9NQkdOVAkJTUZQX0NGR19PVVQoR1BJTzExNiwgQUYzLCBEUklWRV9MT1cpCisKKy8qIFBDIENBUkQgKi8KKyNkZWZpbmUgR1BJTzE1X25QQ0VfMQkJTUZQX0NGR19PVVQoR1BJTzE1LCBBRjEsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU84NV9uUENFXzEJCU1GUF9DRkdfT1VUKEdQSU84NSwgQUYxLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPODZfblBDRV8xCQlNRlBfQ0ZHX09VVChHUElPODYsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzEwMl9uUENFXzEJCU1GUF9DRkdfT1VUKEdQSU8xMDIsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzU0X25QQ0VfMgkJTUZQX0NGR19PVVQoR1BJTzU0LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU83OF9uUENFXzIJCU1GUF9DRkdfT1VUKEdQSU83OCwgQUYxLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPODdfblBDRV8yCQlNRlBfQ0ZHX0lOKEdQSU84NywgQUYxKQorI2RlZmluZSBHUElPNTVfblBSRUcJCU1GUF9DRkdfT1VUKEdQSU81NSwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNTBfblBJT1IJCU1GUF9DRkdfT1VUKEdQSU81MCwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNTFfblBJT1cJCU1GUF9DRkdfT1VUKEdQSU81MSwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNDlfblBXRQkJTUZQX0NGR19PVVQoR1BJTzQ5LCBBRjIsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU80OF9uUE9FCQlNRlBfQ0ZHX09VVChHUElPNDgsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzU3X25JT0lTMTYJCU1GUF9DRkdfSU4oR1BJTzU3LCBBRjEpCisjZGVmaW5lIEdQSU81Nl9uUFdBSVQJCU1GUF9DRkdfSU4oR1BJTzU2LCBBRjEpCisjZGVmaW5lIEdQSU83OV9QU0tUU0VMCQlNRlBfQ0ZHX09VVChHUElPNzksIEFGMSwgRFJJVkVfSElHSCkKKworLyogSTJDICovCisjZGVmaW5lIEdQSU8xMTdfSTJDX1NDTAkJTUZQX0NGR19JTihHUElPMTE3LCBBRjEpCisjZGVmaW5lIEdQSU8xMThfSTJDX1NEQQkJTUZQX0NGR19JTihHUElPMTE4LCBBRjEpCisKKy8qIEZGVUFSVCAqLworI2RlZmluZSBHUElPOV9GRlVBUlRfQ1RTCU1GUF9DRkdfSU4oR1BJTzksIEFGMykKKyNkZWZpbmUgR1BJTzI2X0ZGVUFSVF9DVFMJTUZQX0NGR19JTihHUElPMjYsIEFGMykKKyNkZWZpbmUgR1BJTzM1X0ZGVUFSVF9DVFMJTUZQX0NGR19JTihHUElPMzUsIEFGMSkKKyNkZWZpbmUgR1BJTzEwMF9GRlVBUlRfQ1RTCU1GUF9DRkdfSU4oR1BJTzEwMCwgQUYzKQorI2RlZmluZSBHUElPMTBfRkZVQVJUX0RDRAlNRlBfQ0ZHX0lOKEdQSU8xMCwgQUYxKQorI2RlZmluZSBHUElPMzZfRkZVQVJUX0RDRAlNRlBfQ0ZHX0lOKEdQSU8zNiwgQUYxKQorI2RlZmluZSBHUElPMzNfRkZVQVJUX0RTUglNRlBfQ0ZHX0lOKEdQSU8zMywgQUYyKQorI2RlZmluZSBHUElPMzdfRkZVQVJUX0RTUglNRlBfQ0ZHX0lOKEdQSU8zNywgQUYxKQorI2RlZmluZSBHUElPMzhfRkZVQVJUX1JJCU1GUF9DRkdfSU4oR1BJTzM4LCBBRjEpCisjZGVmaW5lIEdQSU84OV9GRlVBUlRfUkkJTUZQX0NGR19JTihHUElPODksIEFGMykKKyNkZWZpbmUgR1BJTzE5X0ZGVUFSVF9SWEQJTUZQX0NGR19JTihHUElPMTksIEFGMykKKyNkZWZpbmUgR1BJTzMzX0ZGVUFSVF9SWEQJTUZQX0NGR19JTihHUElPMzMsIEFGMSkKKyNkZWZpbmUgR1BJTzM0X0ZGVUFSVF9SWEQJTUZQX0NGR19JTihHUElPMzQsIEFGMSkKKyNkZWZpbmUgR1BJTzQxX0ZGVUFSVF9SWEQJTUZQX0NGR19JTihHUElPNDEsIEFGMSkKKyNkZWZpbmUgR1BJTzUzX0ZGVUFSVF9SWEQJTUZQX0NGR19JTihHUElPNTMsIEFGMSkKKyNkZWZpbmUgR1BJTzg1X0ZGVUFSVF9SWEQJTUZQX0NGR19JTihHUElPODUsIEFGMSkKKyNkZWZpbmUgR1BJTzk2X0ZGVUFSVF9SWEQJTUZQX0NGR19JTihHUElPOTYsIEFGMykKKyNkZWZpbmUgR1BJTzEwMl9GRlVBUlRfUlhECU1GUF9DRkdfSU4oR1BJTzEwMiwgQUYzKQorI2RlZmluZSBHUElPMTZfRkZVQVJUX1RYRAlNRlBfQ0ZHX09VVChHUElPMTYsIEFGMywgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzM3X0ZGVUFSVF9UWEQJTUZQX0NGR19PVVQoR1BJTzM3LCBBRjMsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU8zOV9GRlVBUlRfVFhECU1GUF9DRkdfT1VUKEdQSU8zOSwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPODNfRkZVQVJUX1RYRAlNRlBfQ0ZHX09VVChHUElPODMsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzk5X0ZGVUFSVF9UWEQJTUZQX0NGR19PVVQoR1BJTzk5LCBBRjMsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU8yN19GRlVBUlRfUlRTCU1GUF9DRkdfT1VUKEdQSU8yNywgQUYzLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNDFfRkZVQVJUX1JUUwlNRlBfQ0ZHX09VVChHUElPNDEsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzgzX0ZGVUFSVF9SVFMJTUZQX0NGR19PVVQoR1BJTzgzLCBBRjMsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU85OF9GRlVBUlRfUlRTCU1GUF9DRkdfT1VUKEdQSU85OCwgQUYzLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNDBfRkZVQVJUX0RUUglNRlBfQ0ZHX09VVChHUElPNDAsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzgyX0ZGVUFSVF9EVFIJTUZQX0NGR19PVVQoR1BJTzgyLCBBRjMsIERSSVZFX0hJR0gpCisKKy8qIEJUVUFSVCAqLworI2RlZmluZSBHUElPNDRfQlRVQVJUX0NUUwlNRlBfQ0ZHX0lOKEdQSU80NCwgQUYxKQorI2RlZmluZSBHUElPNDJfQlRVQVJUX1JYRAlNRlBfQ0ZHX0lOKEdQSU80MiwgQUYxKQorI2RlZmluZSBHUElPNDVfQlRVQVJUX1JUUwlNRlBfQ0ZHX09VVChHUElPNDUsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzQzX0JUVUFSVF9UWEQJTUZQX0NGR19PVVQoR1BJTzQzLCBBRjIsIERSSVZFX0hJR0gpCisKKy8qIFNUVUFSVCAqLworI2RlZmluZSBHUElPNDZfU1RVQVJUX1JYRAlNRlBfQ0ZHX0lOKEdQSU80NiwgQUYyKQorI2RlZmluZSBHUElPNDdfU1RVQVJUX1RYRAlNRlBfQ0ZHX09VVChHUElPNDcsIEFGMSwgRFJJVkVfSElHSCkKKworLyogRklDUCAqLworI2RlZmluZSBHUElPNDJfRklDUF9SWEQJCU1GUF9DRkdfSU4oR1BJTzQyLCBBRjIpCisjZGVmaW5lIEdQSU80Nl9GSUNQX1JYRAkJTUZQX0NGR19JTihHUElPNDYsIEFGMSkKKyNkZWZpbmUgR1BJTzQzX0ZJQ1BfVFhECQlNRlBfQ0ZHX09VVChHUElPNDMsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzQ3X0ZJQ1BfVFhECQlNRlBfQ0ZHX09VVChHUElPNDcsIEFGMiwgRFJJVkVfSElHSCkKKworLyogUFdNIDAvMS8yLzMgKi8KKyNkZWZpbmUgR1BJTzExX1BXTTJfT1VUCQlNRlBfQ0ZHX09VVChHUElPMTEsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMTJfUFdNM19PVVQJCU1GUF9DRkdfT1VUKEdQSU8xMiwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8xNl9QV00wX09VVAkJTUZQX0NGR19PVVQoR1BJTzE2LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzE3X1BXTTFfT1VUCQlNRlBfQ0ZHX09VVChHUElPMTcsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMzhfUFdNMV9PVVQJCU1GUF9DRkdfT1VUKEdQSU8zOCwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU80Nl9QV00yX09VVAkJTUZQX0NGR19PVVQoR1BJTzQ2LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzQ3X1BXTTNfT1VUCQlNRlBfQ0ZHX09VVChHUElPNDcsIEFGMywgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNzlfUFdNMl9PVVQJCU1GUF9DRkdfT1VUKEdQSU83OSwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU84MF9QV00zX09VVAkJTUZQX0NGR19PVVQoR1BJTzgwLCBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzExNV9QV00xX09VVAlNRlBfQ0ZHX09VVChHUElPMTE1LCBBRjMsIERSSVZFX0xPVykKKworLyogQUM5NyAqLworI2RlZmluZSBHUElPMzFfQUM5N19TWU5DCU1GUF9DRkdfT1VUKEdQSU8zMSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU85NF9BQzk3X1NZTkMJTUZQX0NGR19PVVQoR1BJTzk0LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzMwX0FDOTdfU0RBVEFfT1VUCU1GUF9DRkdfT1VUKEdQSU8zMCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU85M19BQzk3X1NEQVRBX09VVAlNRlBfQ0ZHX09VVChHUElPOTMsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNDVfQUM5N19TWVNDTEsJTUZQX0NGR19PVVQoR1BJTzQ1LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzg5X0FDOTdfU1lTQ0xLCU1GUF9DRkdfT1VUKEdQSU84OSwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU85OF9BQzk3X1NZU0NMSwlNRlBfQ0ZHX09VVChHUElPOTgsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPOTVfQUM5N19uUkVTRVQJTUZQX0NGR19PVVQoR1BJTzk1LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzExM19BQzk3X25SRVNFVAlNRlBfQ0ZHX09VVChHUElPMTEzLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzI4X0FDOTdfQklUQ0xLCU1GUF9DRkdfSU4oR1BJTzI4LCBBRjEpCisjZGVmaW5lIEdQSU8yOV9BQzk3X1NEQVRBX0lOXzAJTUZQX0NGR19JTihHUElPMjksIEFGMSkKKyNkZWZpbmUgR1BJTzExNl9BQzk3X1NEQVRBX0lOXzAJTUZQX0NGR19JTihHUElPMTE2LCBBRjIpCisjZGVmaW5lIEdQSU85OV9BQzk3X1NEQVRBX0lOXzEJTUZQX0NGR19JTihHUElPOTksIEFGMikKKworLyogSTJTICovCisjZGVmaW5lIEdQSU8yOF9JMlNfQklUQ0xLX0lOCU1GUF9DRkdfSU4oR1BJTzI4LCBBRjIpCisjZGVmaW5lIEdQSU8yOF9JMlNfQklUQ0xLX09VVAlNRlBfQ0ZHX09VVChHUElPMjgsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMjlfSTJTX1NEQVRBX0lOCU1GUF9DRkdfSU4oR1BJTzI5LCBBRjIpCisjZGVmaW5lIEdQSU8zMF9JMlNfU0RBVEFfT1VUCU1GUF9DRkdfT1VUKEdQSU8zMCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8zMV9JMlNfU1lOQwkJTUZQX0NGR19PVVQoR1BJTzMxLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzExM19JMlNfU1lTQ0xLCU1GUF9DRkdfT1VUKEdQSU8xMTMsIEFGMSwgRFJJVkVfTE9XKQorCisvKiBTU1AgMSAqLworI2RlZmluZSBHUElPMjNfU1NQMV9TQ0xLCU1GUF9DRkdfT1VUKEdQSU8yMywgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8yOV9TU1AxX1NDTEsJTUZQX0NGR19JTihHUElPMjksIEFGMykKKyNkZWZpbmUgR1BJTzI3X1NTUDFfU1lTQ0xLCU1GUF9DRkdfT1VUKEdQSU8yNywgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81M19TU1AxX1NZU0NMSwlNRlBfQ0ZHX09VVChHUElPNTMsIEFGMywgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMjRfU1NQMV9TRlJNCU1GUF9DRkdfSU4oR1BJTzI0LCBBRjIpCisjZGVmaW5lIEdQSU8yOF9TU1AxX1NGUk0JTUZQX0NGR19JTihHUElPMjgsIEFGMykKKyNkZWZpbmUgR1BJTzI1X1NTUDFfVFhECQlNRlBfQ0ZHX09VVChHUElPMjUsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNTdfU1NQMV9UWEQJCU1GUF9DRkdfT1VUKEdQSU81NywgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8yNl9TU1AxX1JYRAkJTUZQX0NGR19JTihHUElPMjYsIEFGMSkKKyNkZWZpbmUgR1BJTzI3X1NTUDFfU0NMS0VOCU1GUF9DRkdfSU4oR1BJTzI3LCBBRjIpCisKKy8qIFNTUCAyICovCisjZGVmaW5lIEdQSU8xOV9TU1AyX1NDTEsJTUZQX0NGR19JTihHUElPMTksIEFGMSkKKyNkZWZpbmUgR1BJTzIyX1NTUDJfU0NMSwlNRlBfQ0ZHX0lOKEdQSU8yMiwgQUYzKQorI2RlZmluZSBHUElPMjlfU1NQMl9TQ0xLCU1GUF9DRkdfT1VUKEdQSU8yOSwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8zNl9TU1AyX1NDTEsJTUZQX0NGR19JTihHUElPMzYsIEFGMikKKyNkZWZpbmUgR1BJTzUwX1NTUDJfU0NMSwlNRlBfQ0ZHX0lOKEdQSU81MCwgQUYzKQorI2RlZmluZSBHUElPMjJfU1NQMl9TWVNDTEsJTUZQX0NGR19PVVQoR1BJTzIyLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzE0X1NTUDJfU0ZSTQlNRlBfQ0ZHX0lOKEdQSU8xNCwgQUYyKQorI2RlZmluZSBHUElPMzdfU1NQMl9TRlJNCU1GUF9DRkdfSU4oR1BJTzM3LCBBRjIpCisjZGVmaW5lIEdQSU84N19TU1AyX1NGUk0JTUZQX0NGR19PVVQoR1BJTzg3LCBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzg4X1NTUDJfU0ZSTQlNRlBfQ0ZHX0lOKEdQSU84OCwgQUYzKQorI2RlZmluZSBHUElPMTNfU1NQMl9UWEQJCU1GUF9DRkdfT1VUKEdQSU8xMywgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8zOF9TU1AyX1RYRAkJTUZQX0NGR19PVVQoR1BJTzM4LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzg3X1NTUDJfVFhECQlNRlBfQ0ZHX09VVChHUElPODcsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPODlfU1NQMl9UWEQJCU1GUF9DRkdfT1VUKEdQSU84OSwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8xMV9TU1AyX1JYRAkJTUZQX0NGR19JTihHUElPMTEsIEFGMikKKyNkZWZpbmUgR1BJTzI5X1NTUDJfUlhECQlNRlBfQ0ZHX09VVChHUElPMjksIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNDBfU1NQMl9SWEQJCU1GUF9DRkdfSU4oR1BJTzQwLCBBRjEpCisjZGVmaW5lIEdQSU84Nl9TU1AyX1JYRAkJTUZQX0NGR19JTihHUElPODYsIEFGMSkKKyNkZWZpbmUgR1BJTzg4X1NTUDJfUlhECQlNRlBfQ0ZHX0lOKEdQSU84OCwgQUYyKQorI2RlZmluZSBHUElPMjJfU1NQMl9FWFRDTEsJTUZQX0NGR19JTihHUElPMjIsIEFGMSkKKyNkZWZpbmUgR1BJTzI3X1NTUDJfRVhUQ0xLCU1GUF9DRkdfSU4oR1BJTzI3LCBBRjEpCisjZGVmaW5lIEdQSU8yMl9TU1AyX1NDTEtFTglNRlBfQ0ZHX0lOKEdQSU8yMiwgQUYyKQorI2RlZmluZSBHUElPMjNfU1NQMl9TQ0xLRU4JTUZQX0NGR19JTihHUElPMjMsIEFGMikKKworLyogU1NQIDMgKi8KKyNkZWZpbmUgR1BJTzM0X1NTUDNfU0NMSwlNRlBfQ0ZHX0lOKEdQSU8zNCwgQUYzKQorI2RlZmluZSBHUElPNDBfU1NQM19TQ0xLCU1GUF9DRkdfT1VUKEdQSU80MCwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81Ml9TU1AzX1NDTEsJTUZQX0NGR19JTihHUElPNTIsIEFGMikKKyNkZWZpbmUgR1BJTzg0X1NTUDNfU0NMSwlNRlBfQ0ZHX0lOKEdQSU84NCwgQUYxKQorI2RlZmluZSBHUElPNDVfU1NQM19TWVNDTEsJTUZQX0NGR19PVVQoR1BJTzQ1LCBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzM1X1NTUDNfU0ZSTQlNRlBfQ0ZHX0lOKEdQSU8zNSwgQUYzKQorI2RlZmluZSBHUElPMzlfU1NQM19TRlJNCU1GUF9DRkdfSU4oR1BJTzM5LCBBRjMpCisjZGVmaW5lIEdQSU84M19TU1AzX1NGUk0JTUZQX0NGR19JTihHUElPODMsIEFGMSkKKyNkZWZpbmUgR1BJTzM1X1NTUDNfVFhECQlNRlBfQ0ZHX09VVChHUElPMzUsIEFGMywgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMzhfU1NQM19UWEQJCU1GUF9DRkdfT1VUKEdQSU8zOCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU84MV9TU1AzX1RYRAkJTUZQX0NGR19PVVQoR1BJTzgxLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzQxX1NTUDNfUlhECQlNRlBfQ0ZHX0lOKEdQSU80MSwgQUYzKQorI2RlZmluZSBHUElPODJfU1NQM19SWEQJCU1GUF9DRkdfSU4oR1BJTzgyLCBBRjEpCisjZGVmaW5lIEdQSU84OV9TU1AzX1JYRAkJTUZQX0NGR19JTihHUElPODksIEFGMSkKKworLyogTU1DICovCisjZGVmaW5lIEdQSU8zMl9NTUNfQ0xLCQlNRlBfQ0ZHX09VVChHUElPMzIsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPOTJfTU1DX0RBVF8wCU1GUF9DRkdfSU4oR1BJTzkyLCBBRjEpCisjZGVmaW5lIEdQSU8xMDlfTU1DX0RBVF8xCU1GUF9DRkdfSU4oR1BJTzEwOSwgQUYxKQorI2RlZmluZSBHUElPMTEwX01NQ19EQVRfMglNRlBfQ0ZHX0lOKEdQSU8xMTAsIEFGMSkKKyNkZWZpbmUgR1BJTzExMV9NTUNfREFUXzMJTUZQX0NGR19JTihHUElPMTExLCBBRjEpCisjZGVmaW5lIEdQSU8xMTJfTU1DX0NNRAkJTUZQX0NGR19JTihHUElPMTEyLCBBRjEpCisKKy8qIExDRCAqLworI2RlZmluZSBHUElPNThfTENEX0xERF8wCU1GUF9DRkdfT1VUKEdQSU81OCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81OV9MQ0RfTEREXzEJTUZQX0NGR19PVVQoR1BJTzU5LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzYwX0xDRF9MRERfMglNRlBfQ0ZHX09VVChHUElPNjAsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNjFfTENEX0xERF8zCU1GUF9DRkdfT1VUKEdQSU82MSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82Ml9MQ0RfTEREXzQJTUZQX0NGR19PVVQoR1BJTzYyLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzYzX0xDRF9MRERfNQlNRlBfQ0ZHX09VVChHUElPNjMsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNjRfTENEX0xERF82CU1GUF9DRkdfT1VUKEdQSU82NCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82NV9MQ0RfTEREXzcJTUZQX0NGR19PVVQoR1BJTzY1LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzY2X0xDRF9MRERfOAlNRlBfQ0ZHX09VVChHUElPNjYsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNjdfTENEX0xERF85CU1GUF9DRkdfT1VUKEdQSU82NywgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82OF9MQ0RfTEREXzEwCU1GUF9DRkdfT1VUKEdQSU82OCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU82OV9MQ0RfTEREXzExCU1GUF9DRkdfT1VUKEdQSU82OSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83MF9MQ0RfTEREXzEyCU1GUF9DRkdfT1VUKEdQSU83MCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83MV9MQ0RfTEREXzEzCU1GUF9DRkdfT1VUKEdQSU83MSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83Ml9MQ0RfTEREXzE0CU1GUF9DRkdfT1VUKEdQSU83MiwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83M19MQ0RfTEREXzE1CU1GUF9DRkdfT1VUKEdQSU83MywgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU84Nl9MQ0RfTEREXzE2CU1GUF9DRkdfT1VUKEdQSU84NiwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU84N19MQ0RfTEREXzE3CU1GUF9DRkdfT1VUKEdQSU84NywgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83NF9MQ0RfRkNMSwkJTUZQX0NGR19PVVQoR1BJTzc0LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzc1X0xDRF9MQ0xLCQlNRlBfQ0ZHX09VVChHUElPNzUsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNzZfTENEX1BDTEsJCU1GUF9DRkdfT1VUKEdQSU83NiwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU83N19MQ0RfQklBUwkJTUZQX0NGR19PVVQoR1BJTzc3LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzE0X0xDRF9WU1lOQwlNRlBfQ0ZHX0lOKEdQSU8xNCwgQUYxKQorI2RlZmluZSBHUElPMTlfTENEX0NTCQlNRlBfQ0ZHX09VVChHUElPMTksIEFGMiwgRFJJVkVfTE9XKQorCisvKiBLZXlwYWQgKi8KKyNkZWZpbmUgR1BJTzkzX0tQX0RLSU5fMAlNRlBfQ0ZHX0lOKEdQSU85MywgQUYxKQorI2RlZmluZSBHUElPOTRfS1BfREtJTl8xCU1GUF9DRkdfSU4oR1BJTzk0LCBBRjEpCisjZGVmaW5lIEdQSU85NV9LUF9ES0lOXzIJTUZQX0NGR19JTihHUElPOTUsIEFGMSkKKyNkZWZpbmUgR1BJTzk2X0tQX0RLSU5fMwlNRlBfQ0ZHX0lOKEdQSU85NiwgQUYxKQorI2RlZmluZSBHUElPOTdfS1BfREtJTl80CU1GUF9DRkdfSU4oR1BJTzk3LCBBRjEpCisjZGVmaW5lIEdQSU85OF9LUF9ES0lOXzUJTUZQX0NGR19JTihHUElPOTgsIEFGMSkKKyNkZWZpbmUgR1BJTzk5X0tQX0RLSU5fNglNRlBfQ0ZHX0lOKEdQSU85OSwgQUYxKQorI2RlZmluZSBHUElPMTNfS1BfS0RJTl83CU1GUF9DRkdfSU4oR1BJTzEzLCBBRjIpCisjZGVmaW5lIEdQSU8xMDBfS1BfTUtJTl8wCU1GUF9DRkdfSU4oR1BJTzEwMCwgQUYxKQorI2RlZmluZSBHUElPMTAxX0tQX01LSU5fMQlNRlBfQ0ZHX0lOKEdQSU8xMDEsIEFGMSkKKyNkZWZpbmUgR1BJTzEwMl9LUF9NS0lOXzIJTUZQX0NGR19JTihHUElPMTAyLCBBRjEpCisjZGVmaW5lIEdQSU8zNF9LUF9NS0lOXzMJTUZQX0NGR19JTihHUElPMzQsIEFGMikKKyNkZWZpbmUgR1BJTzM3X0tQX01LSU5fMwlNRlBfQ0ZHX0lOKEdQSU8zNywgQUYzKQorI2RlZmluZSBHUElPOTdfS1BfTUtJTl8zCU1GUF9DRkdfSU4oR1BJTzk3LCBBRjMpCisjZGVmaW5lIEdQSU85OF9LUF9NS0lOXzQJTUZQX0NGR19JTihHUElPOTgsIEFGMykKKyNkZWZpbmUgR1BJTzM4X0tQX01LSU5fNAlNRlBfQ0ZHX0lOKEdQSU8zOCwgQUYyKQorI2RlZmluZSBHUElPMzlfS1BfTUtJTl80CU1GUF9DRkdfSU4oR1BJTzM5LCBBRjEpCisjZGVmaW5lIEdQSU8xNl9LUF9NS0lOXzUJTUZQX0NGR19JTihHUElPMTYsIEFGMSkKKyNkZWZpbmUgR1BJTzkwX0tQX01LSU5fNQlNRlBfQ0ZHX0lOKEdQSU85MCwgQUYxKQorI2RlZmluZSBHUElPOTlfS1BfTUtJTl81CU1GUF9DRkdfSU4oR1BJTzk5LCBBRjMpCisjZGVmaW5lIEdQSU8xN19LUF9NS0lOXzYJTUZQX0NGR19JTihHUElPMTcsIEFGMSkKKyNkZWZpbmUgR1BJTzkxX0tQX01LSU5fNglNRlBfQ0ZHX0lOKEdQSU85MSwgQUYxKQorI2RlZmluZSBHUElPOTVfS1BfTUtJTl82CU1GUF9DRkdfSU4oR1BJTzk1LCBBRjMpCisjZGVmaW5lIEdQSU8xM19LUF9NS0lOXzcJTUZQX0NGR19JTihHUElPMTMsIEFGMykKKyNkZWZpbmUgR1BJTzM2X0tQX01LSU5fNwlNRlBfQ0ZHX0lOKEdQSU8zNiwgQUYzKQorI2RlZmluZSBHUElPMTAzX0tQX01LT1VUXzAJTUZQX0NGR19PVVQoR1BJTzEwMywgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMTA0X0tQX01LT1VUXzEJTUZQX0NGR19PVVQoR1BJTzEwNCwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMTA1X0tQX01LT1VUXzIJTUZQX0NGR19PVVQoR1BJTzEwNSwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMTA2X0tQX01LT1VUXzMJTUZQX0NGR19PVVQoR1BJTzEwNiwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMTA3X0tQX01LT1VUXzQJTUZQX0NGR19PVVQoR1BJTzEwNywgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMTA4X0tQX01LT1VUXzUJTUZQX0NGR19PVVQoR1BJTzEwOCwgQUYyLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPMzVfS1BfTUtPVVRfNglNRlBfQ0ZHX09VVChHUElPMzUsIEFGMiwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzIyX0tQX01LT1VUXzcJTUZQX0NGR19PVVQoR1BJTzIyLCBBRjEsIERSSVZFX0hJR0gpCisjZGVmaW5lIEdQSU80MF9LUF9NS09VVF82CU1GUF9DRkdfT1VUKEdQSU80MCwgQUYxLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPNDFfS1BfTUtPVVRfNwlNRlBfQ0ZHX09VVChHUElPNDEsIEFGMSwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzk2X0tQX01LT1VUXzYJTUZQX0NGR19PVVQoR1BJTzk2LCBBRjMsIERSSVZFX0hJR0gpCisKKy8qIFVTQiBQMyAqLworI2RlZmluZSBHUElPMTBfVVNCX1AzXzUJCU1GUF9DRkdfSU4oR1BJTzEwLCBBRjMpCisjZGVmaW5lIEdQSU8xMV9VU0JfUDNfMQkJTUZQX0NGR19JTihHUElPMTEsIEFGMykKKyNkZWZpbmUgR1BJTzMwX1VTQl9QM18yCQlNRlBfQ0ZHX09VVChHUElPMzAsIEFGMywgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMzFfVVNCX1AzXzYJCU1GUF9DRkdfT1VUKEdQSU8zMSwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81Nl9VU0JfUDNfNAkJTUZQX0NGR19PVVQoR1BJTzU2LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzg2X1VTQl9QM181CQlNRlBfQ0ZHX0lOKEdQSU84NiwgQUYzKQorI2RlZmluZSBHUElPODdfVVNCX1AzXzEJCU1GUF9DRkdfSU4oR1BJTzg3LCBBRjMpCisjZGVmaW5lIEdQSU85MF9VU0JfUDNfNQkJTUZQX0NGR19JTihHUElPOTAsIEFGMikKKyNkZWZpbmUgR1BJTzkxX1VTQl9QM18xCQlNRlBfQ0ZHX0lOKEdQSU85MSwgQUYyKQorI2RlZmluZSBHUElPMTEzX1VTQl9QM18zCU1GUF9DRkdfSU4oR1BJTzExMywgQUYzKQorCisvKiBVU0IgUDIgKi8KKyNkZWZpbmUgR1BJTzM0X1VTQl9QMl8yCQlNRlBfQ0ZHX09VVChHUElPMzQsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMzVfVVNCX1AyXzEJCU1GUF9DRkdfSU4oR1BJTzM1LCBBRjIpCisjZGVmaW5lIEdQSU8zNl9VU0JfUDJfNAkJTUZQX0NGR19PVVQoR1BJTzM2LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzM3X1VTQl9QMl84CQlNRlBfQ0ZHX09VVChHUElPMzcsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMzhfVVNCX1AyXzMJCU1GUF9DRkdfSU4oR1BJTzM4LCBBRjMpCisjZGVmaW5lIEdQSU8zOV9VU0JfUDJfNgkJTUZQX0NGR19PVVQoR1BJTzM5LCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzQwX1VTQl9QMl81CQlNRlBfQ0ZHX0lOKEdQSU80MCwgQUYzKQorI2RlZmluZSBHUElPNDFfVVNCX1AyXzcJCU1GUF9DRkdfSU4oR1BJTzQxLCBBRjIpCisjZGVmaW5lIEdQSU81M19VU0JfUDJfMwkJTUZQX0NGR19JTihHUElPNTMsIEFGMikKKworLyogVVNCIEhvc3QgUG9ydCAxLzIgKi8KKyNkZWZpbmUgR1BJTzg4X1VTQkgxX1BXUglNRlBfQ0ZHX0lOKEdQSU84OCwgQUYxKQorI2RlZmluZSBHUElPODlfVVNCSDFfUEVOCU1GUF9DRkdfT1VUKEdQSU84OSwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8xMTlfVVNCSDJfUFdSCU1GUF9DRkdfSU4oR1BJTzExOSwgQUYxKQorI2RlZmluZSBHUElPMTIwX1VTQkgyX1BFTglNRlBfQ0ZHX09VVChHUElPMTIwLCBBRjIsIERSSVZFX0xPVykKKworLyogUUNJIC0gZGVmYXVsdCB0byBNYXN0ZXIgTW9kZTogQ0lGX0ZWL0NJRl9MViBEaXJlY3Rpb24gSW4gKi8KKyNkZWZpbmUgR1BJTzExNV9DSUZfRERfMwlNRlBfQ0ZHX0lOKEdQSU8xMTUsIEFGMikKKyNkZWZpbmUgR1BJTzExNl9DSUZfRERfMglNRlBfQ0ZHX0lOKEdQSU8xMTYsIEFGMSkKKyNkZWZpbmUgR1BJTzEyX0NJRl9ERF83CQlNRlBfQ0ZHX0lOKEdQSU8xMiwgQUYyKQorI2RlZmluZSBHUElPMTdfQ0lGX0REXzYJCU1GUF9DRkdfSU4oR1BJTzE3LCBBRjIpCisjZGVmaW5lIEdQSU8yM19DSUZfTUNMSwkJTUZQX0NGR19PVVQoR1BJTzIzLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzI0X0NJRl9GVgkJTUZQX0NGR19JTihHUElPMjQsIEFGMSkKKyNkZWZpbmUgR1BJTzI1X0NJRl9MVgkJTUZQX0NGR19JTihHUElPMjUsIEFGMSkKKyNkZWZpbmUgR1BJTzI2X0NJRl9QQ0xLCQlNRlBfQ0ZHX0lOKEdQSU8yNiwgQUYyKQorI2RlZmluZSBHUElPMjdfQ0lGX0REXzAJCU1GUF9DRkdfSU4oR1BJTzI3LCBBRjMpCisjZGVmaW5lIEdQSU80Ml9DSUZfTUNMSwkJTUZQX0NGR19PVVQoR1BJTzQyLCBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzQzX0NJRl9GVgkJTUZQX0NGR19JTihHUElPNDMsIEFGMykKKyNkZWZpbmUgR1BJTzQ0X0NJRl9MVgkJTUZQX0NGR19JTihHUElPNDQsIEFGMykKKyNkZWZpbmUgR1BJTzQ1X0NJRl9QQ0xLCQlNRlBfQ0ZHX0lOKEdQSU80NSwgQUYzKQorI2RlZmluZSBHUElPNDdfQ0lGX0REXzAJCU1GUF9DRkdfSU4oR1BJTzQ3LCBBRjEpCisjZGVmaW5lIEdQSU80OF9DSUZfRERfNQkJTUZQX0NGR19JTihHUElPNDgsIEFGMSkKKyNkZWZpbmUgR1BJTzUwX0NJRl9ERF8zCQlNRlBfQ0ZHX0lOKEdQSU81MCwgQUYxKQorI2RlZmluZSBHUElPNTFfQ0lGX0REXzIJCU1GUF9DRkdfSU4oR1BJTzUxLCBBRjEpCisjZGVmaW5lIEdQSU81Ml9DSUZfRERfNAkJTUZQX0NGR19JTihHUElPNTIsIEFGMSkKKyNkZWZpbmUgR1BJTzUzX0NJRl9NQ0xLCQlNRlBfQ0ZHX09VVChHUElPNTMsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNTRfQ0lGX1BDTEsJCU1GUF9DRkdfSU4oR1BJTzU0LCBBRjMpCisjZGVmaW5lIEdQSU81NV9DSUZfRERfMQkJTUZQX0NGR19JTihHUElPNTUsIEFGMSkKKyNkZWZpbmUgR1BJTzgxX0NJRl9ERF8wCQlNRlBfQ0ZHX0lOKEdQSU84MSwgQUYyKQorI2RlZmluZSBHUElPODJfQ0lGX0REXzUJCU1GUF9DRkdfSU4oR1BJTzgyLCBBRjMpCisjZGVmaW5lIEdQSU84M19DSUZfRERfNAkJTUZQX0NGR19JTihHUElPODMsIEFGMykKKyNkZWZpbmUgR1BJTzg0X0NJRl9GVgkJTUZQX0NGR19JTihHUElPODQsIEFGMykKKyNkZWZpbmUgR1BJTzg1X0NJRl9MVgkJTUZQX0NGR19JTihHUElPODUsIEFGMykKKyNkZWZpbmUgR1BJTzkwX0NJRl9ERF80CQlNRlBfQ0ZHX0lOKEdQSU85MCwgQUYzKQorI2RlZmluZSBHUElPOTFfQ0lGX0REXzUJCU1GUF9DRkdfSU4oR1BJTzkxLCBBRjMpCisjZGVmaW5lIEdQSU85M19DSUZfRERfNgkJTUZQX0NGR19JTihHUElPOTMsIEFGMikKKyNkZWZpbmUgR1BJTzk0X0NJRl9ERF81CQlNRlBfQ0ZHX0lOKEdQSU85NCwgQUYyKQorI2RlZmluZSBHUElPOTVfQ0lGX0REXzQJCU1GUF9DRkdfSU4oR1BJTzk1LCBBRjIpCisjZGVmaW5lIEdQSU85OF9DSUZfRERfMAkJTUZQX0NGR19JTihHUElPOTgsIEFGMikKKyNkZWZpbmUgR1BJTzEwM19DSUZfRERfMwlNRlBfQ0ZHX0lOKEdQSU8xMDMsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNF9DSUZfRERfMglNRlBfQ0ZHX0lOKEdQSU8xMDQsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNV9DSUZfRERfMQlNRlBfQ0ZHX0lOKEdQSU8xMDUsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNl9DSUZfRERfOQlNRlBfQ0ZHX0lOKEdQSU8xMDYsIEFGMSkKKyNkZWZpbmUgR1BJTzEwN19DSUZfRERfOAlNRlBfQ0ZHX0lOKEdQSU8xMDcsIEFGMSkKKyNkZWZpbmUgR1BJTzEwOF9DSUZfRERfNwlNRlBfQ0ZHX0lOKEdQSU8xMDgsIEFGMSkKKyNkZWZpbmUgR1BJTzExNF9DSUZfRERfMQlNRlBfQ0ZHX0lOKEdQSU8xMTQsIEFGMSkKKworLyogVW5pdmVyc2FsIFN1YnNjcmliZXIgSUQgSW50ZXJmYWNlICovCisjZGVmaW5lIEdQSU8xMTRfVVZTMAkJTUZQX0NGR19PVVQoR1BJTzExNCwgQUYyLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8xMTVfblVWUzEJCU1GUF9DRkdfT1VUKEdQSU8xMTUsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMTE2X25VVlMyCQlNRlBfQ0ZHX09VVChHUElPMTE2LCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzE0X1VDTEsJCU1GUF9DRkdfT1VUKEdQSU8xNCwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU85MV9VQ0xLCQlNRlBfQ0ZHX09VVChHUElPOTEsIEFGMiwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMTlfblVSU1QJCU1GUF9DRkdfT1VUKEdQSU8xOSwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU85MF9uVVJTVAkJTUZQX0NGR19PVVQoR1BJTzkwLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzExNl9VREVUCQlNRlBfQ0ZHX0lOKEdQSU8xMTYsIEFGMykKKyNkZWZpbmUgR1BJTzExNF9VRU4JCU1GUF9DRkdfT1VUKEdQSU8xMTQsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPMTE1X1VFTgkJTUZQX0NGR19PVVQoR1BJTzExNSwgQUYxLCBEUklWRV9MT1cpCisKKy8qIE1vYmlsZSBTY2FsYWJsZSBMaW5rIChNU0wpIEludGVyZmFjZSAqLworI2RlZmluZSBHUElPODFfQkJfT0JfREFUXzAJTUZQX0NGR19PVVQoR1BJTzgxLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzQ4X0JCX09CX0RBVF8xCU1GUF9DRkdfT1VUKEdQSU80OCwgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81MF9CQl9PQl9EQVRfMglNRlBfQ0ZHX09VVChHUElPNTAsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNTFfQkJfT0JfREFUXzMJTUZQX0NGR19PVVQoR1BJTzUxLCBBRjEsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzUyX0JCX09CX0NMSwlNRlBfQ0ZHX09VVChHUElPNTIsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNTNfQkJfT0JfU1RCCU1GUF9DRkdfT1VUKEdQSU81MywgQUYxLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81NF9CQl9PQl9XQUlUCU1GUF9DRkdfSU4oR1BJTzU0LCBBRjIpCisjZGVmaW5lIEdQSU84Ml9CQl9JQl9EQVRfMAlNRlBfQ0ZHX0lOKEdQSU84MiwgQUYyKQorI2RlZmluZSBHUElPNTVfQkJfSUJfREFUXzEJTUZQX0NGR19JTihHUElPNTUsIEFGMikKKyNkZWZpbmUgR1BJTzU2X0JCX0lCX0RBVF8yCU1GUF9DRkdfSU4oR1BJTzU2LCBBRjIpCisjZGVmaW5lIEdQSU81N19CQl9JQl9EQVRfMwlNRlBfQ0ZHX0lOKEdQSU81NywgQUYyKQorI2RlZmluZSBHUElPODNfQkJfSUJfQ0xLCU1GUF9DRkdfSU4oR1BJTzgzLCBBRjIpCisjZGVmaW5lIEdQSU84NF9CQl9JQl9TVEIJTUZQX0NGR19JTihHUElPODQsIEFGMikKKyNkZWZpbmUgR1BJTzg1X0JCX0lCX1dBSVQJTUZQX0NGR19PVVQoR1BJTzg1LCBBRjIsIERSSVZFX0xPVykKKworLyogTWVtb3J5IFN0aWNrIEhvc3QgQ29udHJvbGxlciAqLworI2RlZmluZSBHUElPOTJfTVNCUwkJTUZQX0NGR19PVVQoR1BJTzkyLCBBRjIsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzEwOV9NU1NESU8JCU1GUF9DRkdfSU4oR1BJTzEwOSwgQUYyKQorI2RlZmluZSBHUElPMTEyX25NU0lOUwkJTUZQX0NGR19JTihHUElPMTEyLCBBRjIpCisjZGVmaW5lIEdQSU8zMl9NU1NDTEsJCU1GUF9DRkdfT1VUKEdQSU8zMiwgQUYxLCBEUklWRV9MT1cpCisKK2V4dGVybiBpbnQga2V5cGFkX3NldF93YWtlKHVuc2lnbmVkIGludCBvbik7CisjZW5kaWYgLyogX19BU01fQVJDSF9NRlBfUFhBMjdYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tZnAtcHhhMnh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLXB4YTJ4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOGQ4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbWZwLXB4YTJ4eC5oCkBAIC0wLDAgKzEsMTMyIEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTJYWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTJYWF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9tZnAuaD4KKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgTUZQX3h4eCBiaXQgZGVmaW5pdGlvbnMgaW4gbWZwLmggYXJlIHJlLXVzZWQgZm9yIHB4YTJ4eDoKKyAqCisgKiAgTUZQX1BJTih4KQorICogIE1GUF9BRngKKyAqICBNRlBfTFBNX0RSSVZFX3tMT1csIEhJR0h9CisgKiAgTUZQX0xQTV9FREdFX3gKKyAqCisgKiBvdGhlciBNRlBfeCBiaXQgZGVmaW5pdGlvbnMgd2lsbCBiZSBpZ25vcmVkCisgKgorICogYW5kIGFkZHMgdGhlIGJlbG93IHR3byBiaXRzIHNwZWNpZmljYWxseSBmb3IgcHhhMnh4OgorICoKKyAqIGJpdCAgICAgMjMgLSBJbnB1dC9PdXRwdXQgKFBYQTJ4eCBzcGVjaWZpYykKKyAqIGJpdCAgICAgMjQgLSBXYWtldXAgRW5hYmxlKFBYQTJ4eCBzcGVjaWZpYykKKyAqLworCisjZGVmaW5lIE1GUF9ESVJfSU4JCSgweDAgPDwgMjMpCisjZGVmaW5lIE1GUF9ESVJfT1VUCQkoMHgxIDw8IDIzKQorI2RlZmluZSBNRlBfRElSX01BU0sJCSgweDEgPDwgMjMpCisjZGVmaW5lIE1GUF9ESVIoeCkJCSgoKHgpID4+IDIzKSAmIDB4MSkKKworI2RlZmluZSBNRlBfTFBNX0NBTl9XQUtFVVAJKDB4MSA8PCAyNCkKKyNkZWZpbmUgV0FLRVVQX09OX0VER0VfUklTRQkoTUZQX0xQTV9DQU5fV0FLRVVQIHwgTUZQX0xQTV9FREdFX1JJU0UpCisjZGVmaW5lIFdBS0VVUF9PTl9FREdFX0ZBTEwJKE1GUF9MUE1fQ0FOX1dBS0VVUCB8IE1GUF9MUE1fRURHRV9GQUxMKQorI2RlZmluZSBXQUtFVVBfT05fRURHRV9CT1RICShNRlBfTFBNX0NBTl9XQUtFVVAgfCBNRlBfTFBNX0VER0VfQk9USCkKKworLyogc3BlY2lmaWNhbGx5IGZvciBlbmFibGluZyB3YWtldXAgb24ga2V5cGFkIEdQSU9zICovCisjZGVmaW5lIFdBS0VVUF9PTl9MRVZFTF9ISUdICShNRlBfTFBNX0NBTl9XQUtFVVApCisKKyNkZWZpbmUgTUZQX0NGR19JTihwaW4sIGFmKQkJXAorCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9ESVJfTUFTSykpIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfRElSX0lOKSkKKworLyogTk9URTogIHBpbnMgY29uZmlndXJlZCBhcyBvdXRwdXQgX211c3RfIHByb3ZpZGUgYSBsb3cgcG93ZXIgc3RhdGUsCisgKiBhbmQgdGhpcyBzdGF0ZSBzaG91bGQgaGVscCB0byBtaW5pbWl6ZSB0aGUgcG93ZXIgZGlzc2lwYXRpb24uCisgKi8KKyNkZWZpbmUgTUZQX0NGR19PVVQocGluLCBhZiwgc3RhdGUpCVwKKwkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfRElSX01BU0sgfCBNRlBfTFBNX1NUQVRFX01BU0spKSB8XAorCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQX0RJUl9PVVQgfCBNRlBfTFBNXyMjc3RhdGUpKQorCisvKiBDb21tb24gY29uZmlndXJhdGlvbnMgZm9yIHB4YTI1eCBhbmQgcHhhMjd4CisgKgorICogTm90ZTogcGlucyBjb25maWd1cmVkIGFzIEdQSU8gYXJlIGFsd2F5cyBpbml0aWFsaXplZCB0byBpbnB1dAorICogc28gbm90IHRvIGNhdXNlIGFueSBzaWRlIGVmZmVjdAorICovCisjZGVmaW5lIEdQSU8wX0dQSU8JTUZQX0NGR19JTihHUElPMCwgQUYwKQorI2RlZmluZSBHUElPMV9HUElPCU1GUF9DRkdfSU4oR1BJTzEsIEFGMCkKKyNkZWZpbmUgR1BJTzlfR1BJTwlNRlBfQ0ZHX0lOKEdQSU85LCBBRjApCisjZGVmaW5lIEdQSU8xMF9HUElPCU1GUF9DRkdfSU4oR1BJTzEwLCBBRjApCisjZGVmaW5lIEdQSU8xMV9HUElPCU1GUF9DRkdfSU4oR1BJTzExLCBBRjApCisjZGVmaW5lIEdQSU8xMl9HUElPCU1GUF9DRkdfSU4oR1BJTzEyLCBBRjApCisjZGVmaW5lIEdQSU8xM19HUElPCU1GUF9DRkdfSU4oR1BJTzEzLCBBRjApCisjZGVmaW5lIEdQSU8xNF9HUElPCU1GUF9DRkdfSU4oR1BJTzE0LCBBRjApCisjZGVmaW5lIEdQSU8xNV9HUElPCU1GUF9DRkdfSU4oR1BJTzE1LCBBRjApCisjZGVmaW5lIEdQSU8xNl9HUElPCU1GUF9DRkdfSU4oR1BJTzE2LCBBRjApCisjZGVmaW5lIEdQSU8xN19HUElPCU1GUF9DRkdfSU4oR1BJTzE3LCBBRjApCisjZGVmaW5lIEdQSU8xOF9HUElPCU1GUF9DRkdfSU4oR1BJTzE4LCBBRjApCisjZGVmaW5lIEdQSU8xOV9HUElPCU1GUF9DRkdfSU4oR1BJTzE5LCBBRjApCisjZGVmaW5lIEdQSU8yMF9HUElPCU1GUF9DRkdfSU4oR1BJTzIwLCBBRjApCisjZGVmaW5lIEdQSU8yMV9HUElPCU1GUF9DRkdfSU4oR1BJTzIxLCBBRjApCisjZGVmaW5lIEdQSU8yMl9HUElPCU1GUF9DRkdfSU4oR1BJTzIyLCBBRjApCisjZGVmaW5lIEdQSU8yM19HUElPCU1GUF9DRkdfSU4oR1BJTzIzLCBBRjApCisjZGVmaW5lIEdQSU8yNF9HUElPCU1GUF9DRkdfSU4oR1BJTzI0LCBBRjApCisjZGVmaW5lIEdQSU8yNV9HUElPCU1GUF9DRkdfSU4oR1BJTzI1LCBBRjApCisjZGVmaW5lIEdQSU8yNl9HUElPCU1GUF9DRkdfSU4oR1BJTzI2LCBBRjApCisjZGVmaW5lIEdQSU8yN19HUElPCU1GUF9DRkdfSU4oR1BJTzI3LCBBRjApCisjZGVmaW5lIEdQSU8yOF9HUElPCU1GUF9DRkdfSU4oR1BJTzI4LCBBRjApCisjZGVmaW5lIEdQSU8yOV9HUElPCU1GUF9DRkdfSU4oR1BJTzI5LCBBRjApCisjZGVmaW5lIEdQSU8zMF9HUElPCU1GUF9DRkdfSU4oR1BJTzMwLCBBRjApCisjZGVmaW5lIEdQSU8zMV9HUElPCU1GUF9DRkdfSU4oR1BJTzMxLCBBRjApCisjZGVmaW5lIEdQSU8zMl9HUElPCU1GUF9DRkdfSU4oR1BJTzMyLCBBRjApCisjZGVmaW5lIEdQSU8zM19HUElPCU1GUF9DRkdfSU4oR1BJTzMzLCBBRjApCisjZGVmaW5lIEdQSU8zNF9HUElPCU1GUF9DRkdfSU4oR1BJTzM0LCBBRjApCisjZGVmaW5lIEdQSU8zNV9HUElPCU1GUF9DRkdfSU4oR1BJTzM1LCBBRjApCisjZGVmaW5lIEdQSU8zNl9HUElPCU1GUF9DRkdfSU4oR1BJTzM2LCBBRjApCisjZGVmaW5lIEdQSU8zN19HUElPCU1GUF9DRkdfSU4oR1BJTzM3LCBBRjApCisjZGVmaW5lIEdQSU8zOF9HUElPCU1GUF9DRkdfSU4oR1BJTzM4LCBBRjApCisjZGVmaW5lIEdQSU8zOV9HUElPCU1GUF9DRkdfSU4oR1BJTzM5LCBBRjApCisjZGVmaW5lIEdQSU80MF9HUElPCU1GUF9DRkdfSU4oR1BJTzQwLCBBRjApCisjZGVmaW5lIEdQSU80MV9HUElPCU1GUF9DRkdfSU4oR1BJTzQxLCBBRjApCisjZGVmaW5lIEdQSU80Ml9HUElPCU1GUF9DRkdfSU4oR1BJTzQyLCBBRjApCisjZGVmaW5lIEdQSU80M19HUElPCU1GUF9DRkdfSU4oR1BJTzQzLCBBRjApCisjZGVmaW5lIEdQSU80NF9HUElPCU1GUF9DRkdfSU4oR1BJTzQ0LCBBRjApCisjZGVmaW5lIEdQSU80NV9HUElPCU1GUF9DRkdfSU4oR1BJTzQ1LCBBRjApCisjZGVmaW5lIEdQSU80Nl9HUElPCU1GUF9DRkdfSU4oR1BJTzQ2LCBBRjApCisjZGVmaW5lIEdQSU80N19HUElPCU1GUF9DRkdfSU4oR1BJTzQ3LCBBRjApCisjZGVmaW5lIEdQSU80OF9HUElPCU1GUF9DRkdfSU4oR1BJTzQ4LCBBRjApCisjZGVmaW5lIEdQSU80OV9HUElPCU1GUF9DRkdfSU4oR1BJTzQ5LCBBRjApCisjZGVmaW5lIEdQSU81MF9HUElPCU1GUF9DRkdfSU4oR1BJTzUwLCBBRjApCisjZGVmaW5lIEdQSU81MV9HUElPCU1GUF9DRkdfSU4oR1BJTzUxLCBBRjApCisjZGVmaW5lIEdQSU81Ml9HUElPCU1GUF9DRkdfSU4oR1BJTzUyLCBBRjApCisjZGVmaW5lIEdQSU81M19HUElPCU1GUF9DRkdfSU4oR1BJTzUzLCBBRjApCisjZGVmaW5lIEdQSU81NF9HUElPCU1GUF9DRkdfSU4oR1BJTzU0LCBBRjApCisjZGVmaW5lIEdQSU81NV9HUElPCU1GUF9DRkdfSU4oR1BJTzU1LCBBRjApCisjZGVmaW5lIEdQSU81Nl9HUElPCU1GUF9DRkdfSU4oR1BJTzU2LCBBRjApCisjZGVmaW5lIEdQSU81N19HUElPCU1GUF9DRkdfSU4oR1BJTzU3LCBBRjApCisjZGVmaW5lIEdQSU81OF9HUElPCU1GUF9DRkdfSU4oR1BJTzU4LCBBRjApCisjZGVmaW5lIEdQSU81OV9HUElPCU1GUF9DRkdfSU4oR1BJTzU5LCBBRjApCisjZGVmaW5lIEdQSU82MF9HUElPCU1GUF9DRkdfSU4oR1BJTzYwLCBBRjApCisjZGVmaW5lIEdQSU82MV9HUElPCU1GUF9DRkdfSU4oR1BJTzYxLCBBRjApCisjZGVmaW5lIEdQSU82Ml9HUElPCU1GUF9DRkdfSU4oR1BJTzYyLCBBRjApCisjZGVmaW5lIEdQSU82M19HUElPCU1GUF9DRkdfSU4oR1BJTzYzLCBBRjApCisjZGVmaW5lIEdQSU82NF9HUElPCU1GUF9DRkdfSU4oR1BJTzY0LCBBRjApCisjZGVmaW5lIEdQSU82NV9HUElPCU1GUF9DRkdfSU4oR1BJTzY1LCBBRjApCisjZGVmaW5lIEdQSU82Nl9HUElPCU1GUF9DRkdfSU4oR1BJTzY2LCBBRjApCisjZGVmaW5lIEdQSU82N19HUElPCU1GUF9DRkdfSU4oR1BJTzY3LCBBRjApCisjZGVmaW5lIEdQSU82OF9HUElPCU1GUF9DRkdfSU4oR1BJTzY4LCBBRjApCisjZGVmaW5lIEdQSU82OV9HUElPCU1GUF9DRkdfSU4oR1BJTzY5LCBBRjApCisjZGVmaW5lIEdQSU83MF9HUElPCU1GUF9DRkdfSU4oR1BJTzcwLCBBRjApCisjZGVmaW5lIEdQSU83MV9HUElPCU1GUF9DRkdfSU4oR1BJTzcxLCBBRjApCisjZGVmaW5lIEdQSU83Ml9HUElPCU1GUF9DRkdfSU4oR1BJTzcyLCBBRjApCisjZGVmaW5lIEdQSU83M19HUElPCU1GUF9DRkdfSU4oR1BJTzczLCBBRjApCisjZGVmaW5lIEdQSU83NF9HUElPCU1GUF9DRkdfSU4oR1BJTzc0LCBBRjApCisjZGVmaW5lIEdQSU83NV9HUElPCU1GUF9DRkdfSU4oR1BJTzc1LCBBRjApCisjZGVmaW5lIEdQSU83Nl9HUElPCU1GUF9DRkdfSU4oR1BJTzc2LCBBRjApCisjZGVmaW5lIEdQSU83N19HUElPCU1GUF9DRkdfSU4oR1BJTzc3LCBBRjApCisjZGVmaW5lIEdQSU83OF9HUElPCU1GUF9DRkdfSU4oR1BJTzc4LCBBRjApCisjZGVmaW5lIEdQSU83OV9HUElPCU1GUF9DRkdfSU4oR1BJTzc5LCBBRjApCisjZGVmaW5lIEdQSU84MF9HUElPCU1GUF9DRkdfSU4oR1BJTzgwLCBBRjApCisjZGVmaW5lIEdQSU84MV9HUElPCU1GUF9DRkdfSU4oR1BJTzgxLCBBRjApCisjZGVmaW5lIEdQSU84Ml9HUElPCU1GUF9DRkdfSU4oR1BJTzgyLCBBRjApCisjZGVmaW5lIEdQSU84M19HUElPCU1GUF9DRkdfSU4oR1BJTzgzLCBBRjApCisjZGVmaW5lIEdQSU84NF9HUElPCU1GUF9DRkdfSU4oR1BJTzg0LCBBRjApCisKK2V4dGVybiB2b2lkIHB4YTJ4eF9tZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmdzLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQgZ3Bpb19zZXRfd2FrZSh1bnNpZ25lZCBpbnQgZ3BpbywgdW5zaWduZWQgaW50IG9uKTsKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9QWEEyWFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAppbmRleCBhYzE3NWI0Li5hMzIyMDEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaApAQCAtNTIwLDYgKzUyMCw5IEBACiAjZGVmaW5lIE1DQ1JfRlNSSUUJKDEgPDwgMSkJLyogRklGTyBTZXJ2aWNlIFJlcXVlc3QgSW50ZXJydXB0IEVuYWJsZSAqLwogCiAjZGVmaW5lIEdDUgkJX19SRUcoMHg0MDUwMDAwQykgIC8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICovCisjaWZkZWYgQ09ORklHX1BYQTN4eAorI2RlZmluZSBHQ1JfQ0xLQlBCCSgxIDw8IDMxKQkvKiBJbnRlcm5hbCBjbG9jayBlbmFibGUgKi8KKyNlbmRpZgogI2RlZmluZSBHQ1JfbkRNQUVOCSgxIDw8IDI0KQkvKiBub24gRE1BIEVuYWJsZSAqLwogI2RlZmluZSBHQ1JfQ0RPTkVfSUUJKDEgPDwgMTkpCS8qIENvbW1hbmQgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCiAjZGVmaW5lIEdDUl9TRE9ORV9JRQkoMSA8PCAxOCkJLyogU3RhdHVzIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLwpAQCAtMTEyNiw2ICsxMTI5LDExIEBACiAjZGVmaW5lIElDUFIJCV9fUkVHKDB4NDBEMDAwMTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyICovCiAjZGVmaW5lIElDQ1IJCV9fUkVHKDB4NDBEMDAwMTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCiAKKyNkZWZpbmUgSUNJUDIJCV9fUkVHKDB4NDBEMDAwOUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAyICovCisjZGVmaW5lIElDTVIyCQlfX1JFRygweDQwRDAwMEEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAyICovCisjZGVmaW5lIElDTFIyCQlfX1JFRygweDQwRDAwMEE0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ0ZQMgkJX19SRUcoMHg0MEQwMDBBOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSUNQUjIJCV9fUkVHKDB4NDBEMDAwQUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KIAogLyoKICAqIEdlbmVyYWwgUHVycG9zZSBJL08KQEAgLTExOTcsMTIgKzEyMDUsNiBAQAogCiAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwogCi0jZGVmaW5lIElDSVAyCQlfX1JFRygweDQwRDAwMDlDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSVJRIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBJQ01SMgkJX19SRUcoMHg0MEQwMDBBMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIE1hc2sgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBJQ0xSMgkJX19SRUcoMHg0MEQwMDBBNCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIExldmVsIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgSUNGUDIJCV9fUkVHKDB4NDBEMDAwQTgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyBSZWdpc3RlciAyICovCi0jZGVmaW5lIElDUFIyCQlfX1JFRygweDQwRDAwMEFDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyBSZWdpc3RlciAyICovCi0KICNkZWZpbmUgX0dQTFIoeCkJX19SRUcyKDB4NDBFMDAwMDAsICgoeCkgJiAweDYwKSA+PiAzKQogI2RlZmluZSBfR1BEUih4KQlfX1JFRzIoMHg0MEUwMDAwQywgKCh4KSAmIDB4NjApID4+IDMpCiAjZGVmaW5lIF9HUFNSKHgpCV9fUkVHMigweDQwRTAwMDE4LCAoKHgpICYgMHg2MCkgPj4gMykKQEAgLTEyMzQsMjY3ICsxMjM2LDYgQEAKIAogI2VuZGlmCiAKLQotLyogR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb24gYXNzaWdubWVudHMgKi8KLQotI2RlZmluZSBHUElPMV9SU1QJCTEJLyogcmVzZXQgKi8KLSNkZWZpbmUgR1BJTzZfTU1DQ0xLCQk2CS8qIE1NQyBDbG9jayAqLwotI2RlZmluZSBHUElPN180OE1IegkJNwkvKiA0OCBNSHogY2xvY2sgb3V0cHV0ICovCi0jZGVmaW5lIEdQSU84X01NQ0NTMAkJOAkvKiBNTUMgQ2hpcCBTZWxlY3QgMCAqLwotI2RlZmluZSBHUElPOV9NTUNDUzEJCTkJLyogTU1DIENoaXAgU2VsZWN0IDEgKi8KLSNkZWZpbmUgR1BJTzEwX1JUQ0NMSwkJMTAJLyogcmVhbCB0aW1lIGNsb2NrICgxIEh6KSAqLwotI2RlZmluZSBHUElPMTFfM182TUh6CQkxMQkvKiAzLjYgTUh6IG9zY2lsbGF0b3Igb3V0ICovCi0jZGVmaW5lIEdQSU8xMl8zMktIegkJMTIJLyogMzIga0h6IG91dCAqLwotI2RlZmluZSBHUElPMTNfTUJHTlQJCTEzCS8qIG1lbW9yeSBjb250cm9sbGVyIGdyYW50ICovCi0jZGVmaW5lIEdQSU8xNF9NQlJFUQkJMTQJLyogYWx0ZXJuYXRlIGJ1cyBtYXN0ZXIgcmVxdWVzdCAqLwotI2RlZmluZSBHUElPMTVfbkNTXzEJCTE1CS8qIGNoaXAgc2VsZWN0IDEgKi8KLSNkZWZpbmUgR1BJTzE2X1BXTTAJCTE2CS8qIFBXTTAgb3V0cHV0ICovCi0jZGVmaW5lIEdQSU8xN19QV00xCQkxNwkvKiBQV00xIG91dHB1dCAqLwotI2RlZmluZSBHUElPMThfUkRZCQkxOAkvKiBFeHQuIEJ1cyBSZWFkeSAqLwotI2RlZmluZSBHUElPMTlfRFJFUTEJCTE5CS8qIEV4dGVybmFsIERNQSBSZXF1ZXN0ICovCi0jZGVmaW5lIEdQSU8yMF9EUkVRMAkJMjAJLyogRXh0ZXJuYWwgRE1BIFJlcXVlc3QgKi8KLSNkZWZpbmUgR1BJTzIzX1NDTEsJCTIzCS8qIFNTUCBjbG9jayAqLwotI2RlZmluZSBHUElPMjRfU0ZSTQkJMjQJLyogU1NQIEZyYW1lICovCi0jZGVmaW5lIEdQSU8yNV9TVFhECQkyNQkvKiBTU1AgdHJhbnNtaXQgKi8KLSNkZWZpbmUgR1BJTzI2X1NSWEQJCTI2CS8qIFNTUCByZWNlaXZlICovCi0jZGVmaW5lIEdQSU8yN19TRVhUQ0xLCQkyNwkvKiBTU1AgZXh0X2NsayAqLwotI2RlZmluZSBHUElPMjhfQklUQ0xLCQkyOAkvKiBBQzk3L0kyUyBiaXRfY2xrICovCi0jZGVmaW5lIEdQSU8yOV9TREFUQV9JTgkJMjkJLyogQUM5NyBTZGF0YV9pbjAgLyBJMlMgU2RhdGFfaW4gKi8KLSNkZWZpbmUgR1BJTzMwX1NEQVRBX09VVAkzMAkvKiBBQzk3L0kyUyBTZGF0YV9vdXQgKi8KLSNkZWZpbmUgR1BJTzMxX1NZTkMJCTMxCS8qIEFDOTcvSTJTIHN5bmMgKi8KLSNkZWZpbmUgR1BJTzMyX1NEQVRBX0lOMQkzMgkvKiBBQzk3IFNkYXRhX2luMSAqLwotI2RlZmluZSBHUElPMzJfU1lTQ0xLCQkzMgkvKiBJMlMgU3lzdGVtIENsb2NrICovCi0jZGVmaW5lIEdQSU8zMl9NTUNDTEsJCTMyCS8qIE1NQyBDbG9jayAoUFhBMjcwKSAqLwotI2RlZmluZSBHUElPMzNfbkNTXzUJCTMzCS8qIGNoaXAgc2VsZWN0IDUgKi8KLSNkZWZpbmUgR1BJTzM0X0ZGUlhECQkzNAkvKiBGRlVBUlQgcmVjZWl2ZSAqLwotI2RlZmluZSBHUElPMzRfTU1DQ1MwCQkzNAkvKiBNTUMgQ2hpcCBTZWxlY3QgMCAqLwotI2RlZmluZSBHUElPMzVfRkZDVFMJCTM1CS8qIEZGVUFSVCBDbGVhciB0byBzZW5kICovCi0jZGVmaW5lIEdQSU8zNl9GRkRDRAkJMzYJLyogRkZVQVJUIERhdGEgY2FycmllciBkZXRlY3QgKi8KLSNkZWZpbmUgR1BJTzM3X0ZGRFNSCQkzNwkvKiBGRlVBUlQgZGF0YSBzZXQgcmVhZHkgKi8KLSNkZWZpbmUgR1BJTzM4X0ZGUkkJCTM4CS8qIEZGVUFSVCBSaW5nIEluZGljYXRvciAqLwotI2RlZmluZSBHUElPMzlfTU1DQ1MxCQkzOQkvKiBNTUMgQ2hpcCBTZWxlY3QgMSAqLwotI2RlZmluZSBHUElPMzlfRkZUWEQJCTM5CS8qIEZGVUFSVCB0cmFuc21pdCBkYXRhICovCi0jZGVmaW5lIEdQSU80MF9GRkRUUgkJNDAJLyogRkZVQVJUIGRhdGEgdGVybWluYWwgUmVhZHkgKi8KLSNkZWZpbmUgR1BJTzQxX0ZGUlRTCQk0MQkvKiBGRlVBUlQgcmVxdWVzdCB0byBzZW5kICovCi0jZGVmaW5lIEdQSU80Ml9CVFJYRAkJNDIJLyogQlRVQVJUIHJlY2VpdmUgZGF0YSAqLwotI2RlZmluZSBHUElPNDJfSFdSWEQJCTQyCS8qIEhXVUFSVCByZWNlaXZlIGRhdGEgKi8KLSNkZWZpbmUgR1BJTzQzX0JUVFhECQk0MwkvKiBCVFVBUlQgdHJhbnNtaXQgZGF0YSAqLwotI2RlZmluZSBHUElPNDNfSFdUWEQJCTQzCS8qIEhXVUFSVCB0cmFuc21pdCBkYXRhICovCi0jZGVmaW5lIEdQSU80NF9CVENUUwkJNDQJLyogQlRVQVJUIGNsZWFyIHRvIHNlbmQgKi8KLSNkZWZpbmUgR1BJTzQ0X0hXQ1RTCQk0NAkvKiBIV1VBUlQgY2xlYXIgdG8gc2VuZCAqLwotI2RlZmluZSBHUElPNDVfQlRSVFMJCTQ1CS8qIEJUVUFSVCByZXF1ZXN0IHRvIHNlbmQgKi8KLSNkZWZpbmUgR1BJTzQ1X0hXUlRTCQk0NQkvKiBIV1VBUlQgcmVxdWVzdCB0byBzZW5kICovCi0jZGVmaW5lIEdQSU80NV9BQzk3X1NZU0NMSwk0NQkvKiBBQzk3IFN5c3RlbSBDbG9jayAqLwotI2RlZmluZSBHUElPNDZfSUNQUlhECQk0NgkvKiBJQ1AgcmVjZWl2ZSBkYXRhICovCi0jZGVmaW5lIEdQSU80Nl9TVFJYRAkJNDYJLyogU1REX1VBUlQgcmVjZWl2ZSBkYXRhICovCi0jZGVmaW5lIEdQSU80N19JQ1BUWEQJCTQ3CS8qIElDUCB0cmFuc21pdCBkYXRhICovCi0jZGVmaW5lIEdQSU80N19TVFRYRAkJNDcJLyogU1REX1VBUlQgdHJhbnNtaXQgZGF0YSAqLwotI2RlZmluZSBHUElPNDhfblBPRQkJNDgJLyogT3V0cHV0IEVuYWJsZSBmb3IgQ2FyZCBTcGFjZSAqLwotI2RlZmluZSBHUElPNDlfblBXRQkJNDkJLyogV3JpdGUgRW5hYmxlIGZvciBDYXJkIFNwYWNlICovCi0jZGVmaW5lIEdQSU81MF9uUElPUgkJNTAJLyogSS9PIFJlYWQgZm9yIENhcmQgU3BhY2UgKi8KLSNkZWZpbmUgR1BJTzUxX25QSU9XCQk1MQkvKiBJL08gV3JpdGUgZm9yIENhcmQgU3BhY2UgKi8KLSNkZWZpbmUgR1BJTzUyX25QQ0VfMQkJNTIJLyogQ2FyZCBFbmFibGUgZm9yIENhcmQgU3BhY2UgKi8KLSNkZWZpbmUgR1BJTzUzX25QQ0VfMgkJNTMJLyogQ2FyZCBFbmFibGUgZm9yIENhcmQgU3BhY2UgKi8KLSNkZWZpbmUgR1BJTzUzX01NQ0NMSwkJNTMJLyogTU1DIENsb2NrICovCi0jZGVmaW5lIEdQSU81NF9NTUNDTEsJCTU0CS8qIE1NQyBDbG9jayAqLwotI2RlZmluZSBHUElPNTRfcFNLVFNFTAkJNTQJLyogU29ja2V0IFNlbGVjdCBmb3IgQ2FyZCBTcGFjZSAqLwotI2RlZmluZSBHUElPNTRfblBDRV8yCQk1NAkvKiBDYXJkIEVuYWJsZSBmb3IgQ2FyZCBTcGFjZSAoUFhBMjd4KSAqLwotI2RlZmluZSBHUElPNTVfblBSRUcJCTU1CS8qIENhcmQgQWRkcmVzcyBiaXQgMjYgKi8KLSNkZWZpbmUgR1BJTzU2X25QV0FJVAkJNTYJLyogV2FpdCBzaWduYWwgZm9yIENhcmQgU3BhY2UgKi8KLSNkZWZpbmUgR1BJTzU3X25JT0lTMTYJCTU3CS8qIEJ1cyBXaWR0aCBzZWxlY3QgZm9yIEkvTyBDYXJkIFNwYWNlICovCi0jZGVmaW5lIEdQSU81OF9MRERfMAkJNTgJLyogTENEIGRhdGEgcGluIDAgKi8KLSNkZWZpbmUgR1BJTzU5X0xERF8xCQk1OQkvKiBMQ0QgZGF0YSBwaW4gMSAqLwotI2RlZmluZSBHUElPNjBfTEREXzIJCTYwCS8qIExDRCBkYXRhIHBpbiAyICovCi0jZGVmaW5lIEdQSU82MV9MRERfMwkJNjEJLyogTENEIGRhdGEgcGluIDMgKi8KLSNkZWZpbmUgR1BJTzYyX0xERF80CQk2MgkvKiBMQ0QgZGF0YSBwaW4gNCAqLwotI2RlZmluZSBHUElPNjNfTEREXzUJCTYzCS8qIExDRCBkYXRhIHBpbiA1ICovCi0jZGVmaW5lIEdQSU82NF9MRERfNgkJNjQJLyogTENEIGRhdGEgcGluIDYgKi8KLSNkZWZpbmUgR1BJTzY1X0xERF83CQk2NQkvKiBMQ0QgZGF0YSBwaW4gNyAqLwotI2RlZmluZSBHUElPNjZfTEREXzgJCTY2CS8qIExDRCBkYXRhIHBpbiA4ICovCi0jZGVmaW5lIEdQSU82Nl9NQlJFUQkJNjYJLyogYWx0ZXJuYXRlIGJ1cyBtYXN0ZXIgcmVxICovCi0jZGVmaW5lIEdQSU82N19MRERfOQkJNjcJLyogTENEIGRhdGEgcGluIDkgKi8KLSNkZWZpbmUgR1BJTzY3X01NQ0NTMAkJNjcJLyogTU1DIENoaXAgU2VsZWN0IDAgKi8KLSNkZWZpbmUgR1BJTzY4X0xERF8xMAkJNjgJLyogTENEIGRhdGEgcGluIDEwICovCi0jZGVmaW5lIEdQSU82OF9NTUNDUzEJCTY4CS8qIE1NQyBDaGlwIFNlbGVjdCAxICovCi0jZGVmaW5lIEdQSU82OV9MRERfMTEJCTY5CS8qIExDRCBkYXRhIHBpbiAxMSAqLwotI2RlZmluZSBHUElPNjlfTU1DQ0xLCQk2OQkvKiBNTUNfQ0xLICovCi0jZGVmaW5lIEdQSU83MF9MRERfMTIJCTcwCS8qIExDRCBkYXRhIHBpbiAxMiAqLwotI2RlZmluZSBHUElPNzBfUlRDQ0xLCQk3MAkvKiBSZWFsIFRpbWUgY2xvY2sgKDEgSHopICovCi0jZGVmaW5lIEdQSU83MV9MRERfMTMJCTcxCS8qIExDRCBkYXRhIHBpbiAxMyAqLwotI2RlZmluZSBHUElPNzFfM182TUh6CQk3MQkvKiAzLjYgTUh6IE9zY2lsbGF0b3IgY2xvY2sgKi8KLSNkZWZpbmUgR1BJTzcyX0xERF8xNAkJNzIJLyogTENEIGRhdGEgcGluIDE0ICovCi0jZGVmaW5lIEdQSU83Ml8zMmtIegkJNzIJLyogMzIga0h6IGNsb2NrICovCi0jZGVmaW5lIEdQSU83M19MRERfMTUJCTczCS8qIExDRCBkYXRhIHBpbiAxNSAqLwotI2RlZmluZSBHUElPNzNfTUJHTlQJCTczCS8qIE1lbW9yeSBjb250cm9sbGVyIGdyYW50ICovCi0jZGVmaW5lIEdQSU83NF9MQ0RfRkNMSwkJNzQJLyogTENEIEZyYW1lIGNsb2NrICovCi0jZGVmaW5lIEdQSU83NV9MQ0RfTENMSwkJNzUJLyogTENEIGxpbmUgY2xvY2sgKi8KLSNkZWZpbmUgR1BJTzc2X0xDRF9QQ0xLCQk3NgkvKiBMQ0QgUGl4ZWwgY2xvY2sgKi8KLSNkZWZpbmUgR1BJTzc3X0xDRF9BQ0JJQVMJNzcJLyogTENEIEFDIEJpYXMgKi8KLSNkZWZpbmUgR1BJTzc4X25DU18yCQk3OAkvKiBjaGlwIHNlbGVjdCAyICovCi0jZGVmaW5lIEdQSU83OV9uQ1NfMwkJNzkJLyogY2hpcCBzZWxlY3QgMyAqLwotI2RlZmluZSBHUElPODBfbkNTXzQJCTgwCS8qIGNoaXAgc2VsZWN0IDQgKi8KLSNkZWZpbmUgR1BJTzgxX05TQ0xLCQk4MQkvKiBOU1NQIGNsb2NrICovCi0jZGVmaW5lIEdQSU84Ml9OU0ZSTQkJODIJLyogTlNTUCBGcmFtZSAqLwotI2RlZmluZSBHUElPODNfTlNUWEQJCTgzCS8qIE5TU1AgdHJhbnNtaXQgKi8KLSNkZWZpbmUgR1BJTzg0X05TUlhECQk4NAkvKiBOU1NQIHJlY2VpdmUgKi8KLSNkZWZpbmUgR1BJTzg1X25QQ0VfMQkJODUJLyogQ2FyZCBFbmFibGUgZm9yIENhcmQgU3BhY2UgKFBYQTI3eCkgKi8KLSNkZWZpbmUgR1BJTzkyX01NQ0RBVDAJCTkyCS8qIE1NQyBEQVQwIChQWEEyN3gpICovCi0jZGVmaW5lIEdQSU8xMDJfblBDRV8xCQkxMDIJLyogUENNQ0lBIChQWEEyN3gpICovCi0jZGVmaW5lIEdQSU8xMDlfTU1DREFUMQkJMTA5CS8qIE1NQyBEQVQxIChQWEEyN3gpICovCi0jZGVmaW5lIEdQSU8xMTBfTU1DREFUMgkJMTEwCS8qIE1NQyBEQVQyIChQWEEyN3gpICovCi0jZGVmaW5lIEdQSU8xMTBfTU1DQ1MwCQkxMTAJLyogTU1DIENoaXAgU2VsZWN0IDAgKFBYQTI3eCkgKi8KLSNkZWZpbmUgR1BJTzExMV9NTUNEQVQzCQkxMTEJLyogTU1DIERBVDMgKFBYQTI3eCkgKi8KLSNkZWZpbmUgR1BJTzExMV9NTUNDUzEJCTExMQkvKiBNTUMgQ2hpcCBTZWxlY3QgMSAoUFhBMjd4KSAqLwotI2RlZmluZSBHUElPMTEyX01NQ0NNRAkJMTEyCS8qIE1NQyBDTUQgKFBYQTI3eCkgKi8KLSNkZWZpbmUgR1BJTzExM19JMlNfU1lTQ0xLCTExMwkvKiBJMlMgU3lzdGVtIENsb2NrIChQWEEyN3gpICovCi0jZGVmaW5lIEdQSU8xMTNfQUM5N19SRVNFVF9OCTExMwkvKiBBQzk3IE5SRVNFVCBvbiAoUFhBMjd4KSAqLwotCi0vKiBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlICYgZGlyZWN0aW9uICovCi0KLSNkZWZpbmUgR1BJT19JTgkJCTB4MDAwCi0jZGVmaW5lIEdQSU9fT1VUCQkweDA4MAotI2RlZmluZSBHUElPX0FMVF9GTl8xX0lOCTB4MTAwCi0jZGVmaW5lIEdQSU9fQUxUX0ZOXzFfT1VUCTB4MTgwCi0jZGVmaW5lIEdQSU9fQUxUX0ZOXzJfSU4JMHgyMDAKLSNkZWZpbmUgR1BJT19BTFRfRk5fMl9PVVQJMHgyODAKLSNkZWZpbmUgR1BJT19BTFRfRk5fM19JTgkweDMwMAotI2RlZmluZSBHUElPX0FMVF9GTl8zX09VVAkweDM4MAotI2RlZmluZSBHUElPX01EX01BU0tfTlIJCTB4MDdmCi0jZGVmaW5lIEdQSU9fTURfTUFTS19ESVIJMHgwODAKLSNkZWZpbmUgR1BJT19NRF9NQVNLX0ZOCQkweDMwMAotI2RlZmluZSBHUElPX0RGTFRfTE9XCQkweDQwMAotI2RlZmluZSBHUElPX0RGTFRfSElHSAkJMHg4MDAKLQotI2RlZmluZSBHUElPMV9SVFNfTUQJCSggMSB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU82X01NQ0NMS19NRAkJKCA2IHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU83XzQ4TUh6X01ECQkoIDcgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzhfTU1DQ1MwX01ECQkoIDggfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzlfTU1DQ1MxX01ECQkoIDkgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzEwX1JUQ0NMS19NRAkoMTAgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzExXzNfNk1Iel9NRAkoMTEgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzEyXzMyS0h6X01ECQkoMTIgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzEzX01CR05UX01ECQkoMTMgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzE0X01CUkVRX01ECQkoMTQgfCBHUElPX0FMVF9GTl8xX0lOKQotI2RlZmluZSBHUElPMTVfbkNTXzFfTUQJCSgxNSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPMTZfUFdNMF9NRAkJKDE2IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU8xN19QV00xX01ECQkoMTcgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzE4X1JEWV9NRAkJKDE4IHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzE5X0RSRVExX01ECQkoMTkgfCBHUElPX0FMVF9GTl8xX0lOKQotI2RlZmluZSBHUElPMjBfRFJFUTBfTUQJCSgyMCB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU8yM19TQ0xLX01ECQkoMjMgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzI0X1NGUk1fTUQJCSgyNCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPMjVfU1RYRF9NRAkJKDI1IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU8yNl9TUlhEX01ECQkoMjYgfCBHUElPX0FMVF9GTl8xX0lOKQotI2RlZmluZSBHUElPMjdfU0VYVENMS19NRAkoMjcgfCBHUElPX0FMVF9GTl8xX0lOKQotI2RlZmluZSBHUElPMjhfQklUQ0xLX0FDOTdfTUQJKDI4IHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzI4X0JJVENMS19JTl9JMlNfTUQJKDI4IHwgR1BJT19BTFRfRk5fMl9JTikKLSNkZWZpbmUgR1BJTzI4X0JJVENMS19PVVRfSTJTX01ECSgyOCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQotI2RlZmluZSBHUElPMjlfU0RBVEFfSU5fQUM5N19NRAkoMjkgfCBHUElPX0FMVF9GTl8xX0lOKQotI2RlZmluZSBHUElPMjlfU0RBVEFfSU5fSTJTX01ECSgyOSB8IEdQSU9fQUxUX0ZOXzJfSU4pCi0jZGVmaW5lIEdQSU8zMF9TREFUQV9PVVRfQUM5N19NRAkoMzAgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzMwX1NEQVRBX09VVF9JMlNfTUQJKDMwIHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU8zMV9TWU5DX0kyU19NRAkoMzEgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzMxX1NZTkNfQUM5N19NRAkoMzEgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzMyX1NEQVRBX0lOMV9BQzk3X01ECSgzMiB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU8zMl9TWVNDTEtfSTJTX01ECSgzMiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQotI2RlZmluZSBHUElPMzJfTU1DQ0xLX01ECQkoIDMyIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU8zM19uQ1NfNV9NRAkJKDMzIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU8zNF9GRlJYRF9NRAkJKDM0IHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzM0X01NQ0NTMF9NRAkoMzQgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzM1X0ZGQ1RTX01ECQkoMzUgfCBHUElPX0FMVF9GTl8xX0lOKQotI2RlZmluZSBHUElPMzZfRkZEQ0RfTUQJCSgzNiB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU8zN19GRkRTUl9NRAkJKDM3IHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzM4X0ZGUklfTUQJCSgzOCB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU8zOV9NTUNDUzFfTUQJKDM5IHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU8zOV9GRlRYRF9NRAkJKDM5IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU80MF9GRkRUUl9NRAkJKDQwIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU80MV9GRlJUU19NRAkJKDQxIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU80Ml9CVFJYRF9NRAkJKDQyIHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzQyX0hXUlhEX01ECQkoNDIgfCBHUElPX0FMVF9GTl8zX0lOKQotI2RlZmluZSBHUElPNDNfQlRUWERfTUQJCSg0MyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPNDNfSFdUWERfTUQJCSg0MyB8IEdQSU9fQUxUX0ZOXzNfT1VUKQotI2RlZmluZSBHUElPNDRfQlRDVFNfTUQJCSg0NCB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU80NF9IV0NUU19NRAkJKDQ0IHwgR1BJT19BTFRfRk5fM19JTikKLSNkZWZpbmUgR1BJTzQ1X0JUUlRTX01ECQkoNDUgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzQ1X0hXUlRTX01ECQkoNDUgfCBHUElPX0FMVF9GTl8zX09VVCkKLSNkZWZpbmUgR1BJTzQ1X1NZU0NMS19BQzk3X01ECQkoNDUgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzQ2X0lDUFJYRF9NRAkoNDYgfCBHUElPX0FMVF9GTl8xX0lOKQotI2RlZmluZSBHUElPNDZfU1RSWERfTUQJCSg0NiB8IEdQSU9fQUxUX0ZOXzJfSU4pCi0jZGVmaW5lIEdQSU80N19JQ1BUWERfTUQJKDQ3IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU80N19TVFRYRF9NRAkJKDQ3IHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU80OF9uUE9FX01ECQkoNDggfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzQ4X0hXVFhEX01EICAgICAgICAgKDQ4IHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU80OF9uUE9FX01EICAgICAgICAgICg0OCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPNDlfSFdSWERfTUQJCSg0OSB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU80OV9uUFdFX01ECQkoNDkgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzUwX25QSU9SX01ECQkoNTAgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzUwX0hXQ1RTX01EICAgICAgICAgKDUwIHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzUxX0hXUlRTX01EICAgICAgICAgKDUxIHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU81MV9uUElPV19NRAkJKDUxIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU81Ml9uUENFXzFfTUQJKDUyIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU81M19uUENFXzJfTUQJKDUzIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU81M19NTUNDTEtfTUQJKDUzIHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU81NF9NTUNDTEtfTUQJKDU0IHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU81NF9uUENFXzJfTUQJKDU0IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU81NF9wU0tUU0VMX01ECSg1NCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPNTVfblBSRUdfTUQJCSg1NSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPNTZfblBXQUlUX01ECSg1NiB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU81N19uSU9JUzE2X01ECSg1NyB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU81OF9MRERfMF9NRAkJKDU4IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU81OV9MRERfMV9NRAkJKDU5IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82MF9MRERfMl9NRAkJKDYwIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82MV9MRERfM19NRAkJKDYxIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82Ml9MRERfNF9NRAkJKDYyIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82M19MRERfNV9NRAkJKDYzIHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82NF9MRERfNl9NRAkJKDY0IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82NV9MRERfN19NRAkJKDY1IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82Nl9MRERfOF9NRAkJKDY2IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU82Nl9NQlJFUV9NRAkJKDY2IHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzY3X0xERF85X01ECQkoNjcgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzY3X01NQ0NTMF9NRAkoNjcgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzY4X0xERF8xMF9NRAkoNjggfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzY4X01NQ0NTMV9NRAkoNjggfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzY5X0xERF8xMV9NRAkoNjkgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzY5X01NQ0NMS19NRAkoNjkgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzcwX0xERF8xMl9NRAkoNzAgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzcwX1JUQ0NMS19NRAkoNzAgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzcxX0xERF8xM19NRAkoNzEgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzcxXzNfNk1Iel9NRAkoNzEgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzcyX0xERF8xNF9NRAkoNzIgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzcyXzMya0h6X01ECQkoNzIgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzczX0xERF8xNV9NRAkoNzMgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzczX01CR05UX01ECQkoNzMgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzc0X0xDRF9GQ0xLX01ECSg3NCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPNzVfTENEX0xDTEtfTUQJKDc1IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU83Nl9MQ0RfUENMS19NRAkoNzYgfCBHUElPX0FMVF9GTl8yX09VVCkKLSNkZWZpbmUgR1BJTzc3X0xDRF9BQ0JJQVNfTUQJKDc3IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU83OF9uQ1NfMl9NRAkJKDc4IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU83OV9uQ1NfM19NRAkJKDc5IHwgR1BJT19BTFRfRk5fMl9PVVQpCi0jZGVmaW5lIEdQSU83OV9wU0tUU0VMX01ECSg3OSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQotI2RlZmluZSBHUElPODBfbkNTXzRfTUQJCSg4MCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPODFfTlNTUF9DTEtfT1VUIAkoODEgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzgxX05TU1BfQ0xLX0lOICAJKDgxIHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzgyX05TU1BfRlJNX09VVCAJKDgyIHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU84Ml9OU1NQX0ZSTV9JTiAgCSg4MiB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0jZGVmaW5lIEdQSU84M19OU1NQX1RYICAgICAgCSg4MyB8IEdQSU9fQUxUX0ZOXzFfT1VUKQotI2RlZmluZSBHUElPODNfTlNTUF9SWCAgICAgIAkoODMgfCBHUElPX0FMVF9GTl8yX0lOKQotI2RlZmluZSBHUElPODRfTlNTUF9UWCAgICAgIAkoODQgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzg0X05TU1BfUlggICAgICAJKDg0IHwgR1BJT19BTFRfRk5fMl9JTikKLSNkZWZpbmUgR1BJTzg1X25QQ0VfMV9NRAkoODUgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzkyX01NQ0RBVDBfTUQJKDkyIHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU8xMDJfblBDRV8xX01ECSgxMDIgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzEwNF9wU0tUU0VMX01ECSgxMDQgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzEwOV9NTUNEQVQxX01ECSgxMDkgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzExMF9NTUNEQVQyX01ECSgxMTAgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzExMF9NTUNDUzBfTUQJKDExMCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQotI2RlZmluZSBHUElPMTExX01NQ0RBVDNfTUQJKDExMSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQotI2RlZmluZSBHUElPMTEwX01NQ0NTMV9NRAkoMTExIHwgR1BJT19BTFRfRk5fMV9PVVQpCi0jZGVmaW5lIEdQSU8xMTJfTU1DQ01EX01ECSgxMTIgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzExM19JMlNfU1lTQ0xLX01ECSgxMTMgfCBHUElPX0FMVF9GTl8xX09VVCkKLSNkZWZpbmUgR1BJTzExM19BQzk3X1JFU0VUX05fTUQJKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQotI2RlZmluZSBHUElPMTE3X0kyQ1NDTF9NRAkoMTE3IHwgR1BJT19BTFRfRk5fMV9JTikKLSNkZWZpbmUgR1BJTzExOF9JMkNTREFfTUQJKDExOCB8IEdQSU9fQUxUX0ZOXzFfSU4pCi0KIC8qCiAgKiBQb3dlciBNYW5hZ2VyCiAgKi8KQEAgLTE4NjMsNjIgKzE2MDQsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BYQTI3eAogCi0vKgotICogS2V5cGFkCi0gKi8KLSNkZWZpbmUgS1BDICAgICAgICAgICAgIF9fUkVHKDB4NDE1MDAwMDApIC8qIEtleXBhZCBJbnRlcmZhY2UgQ29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBLUERLICAgICAgICAgICAgX19SRUcoMHg0MTUwMDAwOCkgLyogS2V5cGFkIEludGVyZmFjZSBEaXJlY3QgS2V5IHJlZ2lzdGVyICovCi0jZGVmaW5lIEtQUkVDICAgICAgICAgICBfX1JFRygweDQxNTAwMDEwKSAvKiBLZXlwYWQgSW50ZXJmYWNlIFJvdGFyeSBFbmNvZGVyIHJlZ2lzdGVyICovCi0jZGVmaW5lIEtQTUsgICAgICAgICAgICBfX1JFRygweDQxNTAwMDE4KSAvKiBLZXlwYWQgSW50ZXJmYWNlIE1hdHJpeCBLZXkgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgS1BBUyAgICAgICAgICAgIF9fUkVHKDB4NDE1MDAwMjApIC8qIEtleXBhZCBJbnRlcmZhY2UgQXV0b21hdGljIFNjYW4gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgS1BBU01LUDAgICAgICAgIF9fUkVHKDB4NDE1MDAwMjgpIC8qIEtleXBhZCBJbnRlcmZhY2UgQXV0b21hdGljIFNjYW4gTXVsdGlwbGUgS2V5IFByZXNzZXIgcmVnaXN0ZXIgMCAqLwotI2RlZmluZSBLUEFTTUtQMSAgICAgICAgX19SRUcoMHg0MTUwMDAzMCkgLyogS2V5cGFkIEludGVyZmFjZSBBdXRvbWF0aWMgU2NhbiBNdWx0aXBsZSBLZXkgUHJlc3NlciByZWdpc3RlciAxICovCi0jZGVmaW5lIEtQQVNNS1AyICAgICAgICBfX1JFRygweDQxNTAwMDM4KSAvKiBLZXlwYWQgSW50ZXJmYWNlIEF1dG9tYXRpYyBTY2FuIE11bHRpcGxlIEtleSBQcmVzc2VyIHJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgS1BBU01LUDMgICAgICAgIF9fUkVHKDB4NDE1MDAwNDApIC8qIEtleXBhZCBJbnRlcmZhY2UgQXV0b21hdGljIFNjYW4gTXVsdGlwbGUgS2V5IFByZXNzZXIgcmVnaXN0ZXIgMyAqLwotI2RlZmluZSBLUEtESSAgICAgICAgICAgX19SRUcoMHg0MTUwMDA0OCkgLyogS2V5cGFkIEludGVyZmFjZSBLZXkgRGVib3VuY2UgSW50ZXJ2YWwgcmVnaXN0ZXIgKi8KLQotI2RlZmluZSBLUENfQVMgICAgICAgICAgKDB4MSA8PCAzMCkgIC8qIEF1dG9tYXRpYyBTY2FuIGJpdCAqLwotI2RlZmluZSBLUENfQVNBQ1QgICAgICAgKDB4MSA8PCAyOSkgIC8qIEF1dG9tYXRpYyBTY2FuIG9uIEFjdGl2aXR5ICovCi0jZGVmaW5lIEtQQ19NSSAgICAgICAgICAoMHgxIDw8IDIyKSAgLyogTWF0cml4IGludGVycnVwdCBiaXQgKi8KLSNkZWZpbmUgS1BDX0lNS1AgICAgICAgICgweDEgPDwgMjEpICAvKiBJZ25vcmUgTXVsdGlwbGUgS2V5IFByZXNzICovCi0jZGVmaW5lIEtQQ19NUzcgICAgICAgICAoMHgxIDw8IDIwKSAgLyogTWF0cml4IHNjYW4gbGluZSA3ICovCi0jZGVmaW5lIEtQQ19NUzYgICAgICAgICAoMHgxIDw8IDE5KSAgLyogTWF0cml4IHNjYW4gbGluZSA2ICovCi0jZGVmaW5lIEtQQ19NUzUgICAgICAgICAoMHgxIDw8IDE4KSAgLyogTWF0cml4IHNjYW4gbGluZSA1ICovCi0jZGVmaW5lIEtQQ19NUzQgICAgICAgICAoMHgxIDw8IDE3KSAgLyogTWF0cml4IHNjYW4gbGluZSA0ICovCi0jZGVmaW5lIEtQQ19NUzMgICAgICAgICAoMHgxIDw8IDE2KSAgLyogTWF0cml4IHNjYW4gbGluZSAzICovCi0jZGVmaW5lIEtQQ19NUzIgICAgICAgICAoMHgxIDw8IDE1KSAgLyogTWF0cml4IHNjYW4gbGluZSAyICovCi0jZGVmaW5lIEtQQ19NUzEgICAgICAgICAoMHgxIDw8IDE0KSAgLyogTWF0cml4IHNjYW4gbGluZSAxICovCi0jZGVmaW5lIEtQQ19NUzAgICAgICAgICAoMHgxIDw8IDEzKSAgLyogTWF0cml4IHNjYW4gbGluZSAwICovCi0jZGVmaW5lIEtQQ19NU19BTEwgICAgICAoS1BDX01TMCB8IEtQQ19NUzEgfCBLUENfTVMyIHwgS1BDX01TMyB8IEtQQ19NUzQgfCBLUENfTVM1IHwgS1BDX01TNiB8IEtQQ19NUzcpCi0jZGVmaW5lIEtQQ19NRSAgICAgICAgICAoMHgxIDw8IDEyKSAgLyogTWF0cml4IEtleXBhZCBFbmFibGUgKi8KLSNkZWZpbmUgS1BDX01JRSAgICAgICAgICgweDEgPDwgMTEpICAvKiBNYXRyaXggSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBLUENfREtfREVCX1NFTAkoMHgxIDw8ICA5KSAgLyogRGlyZWN0IEtleXBhZCBEZWJvdW5jZSBTZWxlY3QgKi8KLSNkZWZpbmUgS1BDX0RJICAgICAgICAgICgweDEgPDwgIDUpICAvKiBEaXJlY3Qga2V5IGludGVycnVwdCBiaXQgKi8KLSNkZWZpbmUgS1BDX1JFX1pFUk9fREVCICgweDEgPDwgIDQpICAvKiBSb3RhcnkgRW5jb2RlciBaZXJvIERlYm91bmNlICovCi0jZGVmaW5lIEtQQ19SRUUxICAgICAgICAoMHgxIDw8ICAzKSAgLyogUm90YXJ5IEVuY29kZXIxIEVuYWJsZSAqLwotI2RlZmluZSBLUENfUkVFMCAgICAgICAgKDB4MSA8PCAgMikgIC8qIFJvdGFyeSBFbmNvZGVyMCBFbmFibGUgKi8KLSNkZWZpbmUgS1BDX0RFICAgICAgICAgICgweDEgPDwgIDEpICAvKiBEaXJlY3QgS2V5cGFkIEVuYWJsZSAqLwotI2RlZmluZSBLUENfRElFICAgICAgICAgKDB4MSA8PCAgMCkgIC8qIERpcmVjdCBLZXlwYWQgaW50ZXJydXB0IEVuYWJsZSAqLwotCi0jZGVmaW5lIEtQREtfREtQICAgICAgICAoMHgxIDw8IDMxKQotI2RlZmluZSBLUERLX0RLNyAgICAgICAgKDB4MSA8PCAgNykKLSNkZWZpbmUgS1BES19ESzYgICAgICAgICgweDEgPDwgIDYpCi0jZGVmaW5lIEtQREtfREs1ICAgICAgICAoMHgxIDw8ICA1KQotI2RlZmluZSBLUERLX0RLNCAgICAgICAgKDB4MSA8PCAgNCkKLSNkZWZpbmUgS1BES19ESzMgICAgICAgICgweDEgPDwgIDMpCi0jZGVmaW5lIEtQREtfREsyICAgICAgICAoMHgxIDw8ICAyKQotI2RlZmluZSBLUERLX0RLMSAgICAgICAgKDB4MSA8PCAgMSkKLSNkZWZpbmUgS1BES19ESzAgICAgICAgICgweDEgPDwgIDApCi0KLSNkZWZpbmUgS1BSRUNfT0YxICAgICAgICgweDEgPDwgMzEpCi0jZGVmaW5lIGtQUkVDX1VGMSAgICAgICAoMHgxIDw8IDMwKQotI2RlZmluZSBLUFJFQ19PRjAgICAgICAgKDB4MSA8PCAxNSkKLSNkZWZpbmUgS1BSRUNfVUYwICAgICAgICgweDEgPDwgMTQpCi0KLSNkZWZpbmUgS1BNS19NS1AgICAgICAgICgweDEgPDwgMzEpCi0jZGVmaW5lIEtQQVNfU08gICAgICAgICAoMHgxIDw8IDMxKQotI2RlZmluZSBLUEFTTUtQeF9TTyAgICAgKDB4MSA8PCAzMSkKLQogLyogQ2FtZXJhIEludGVyZmFjZSAqLwogI2RlZmluZSBDSUNSMAkJX19SRUcoMHg1MDAwMDAwMCkKICNkZWZpbmUgQ0lDUjEJCV9fUkVHKDB4NTAwMDAwMDQpCkBAIC0xOTUwLDcgKzE2MzUsNyBAQAogI2RlZmluZSBDSUNSMF9GT00JKDEgPDwgMCkJLyogRklGTy1vdmVycnVuIG1hc2sgKi8KIAogI2RlZmluZSBDSUNSMV9UQklUCSgxIDw8IDMxKQkvKiBUcmFuc3BhcmVuY3kgYml0ICovCi0jZGVmaW5lIENJQ1IxX1JHQlRfQ09OVgkoMHgzIDw8IDMwKQkvKiBSR0JUIGNvbnZlcnNpb24gbWFzayAqLworI2RlZmluZSBDSUNSMV9SR0JUX0NPTlYJKDB4MyA8PCAyOSkJLyogUkdCVCBjb252ZXJzaW9uIG1hc2sgKi8KICNkZWZpbmUgQ0lDUjFfUFBMCSgweDdmZiA8PCAxNSkJLyogUGl4ZWxzIHBlciBsaW5lIG1hc2sgKi8KICNkZWZpbmUgQ0lDUjFfUkdCX0NPTlYJKDB4NyA8PCAxMikJLyogUkdCIGNvbnZlcnNpb24gbWFzayAqLwogI2RlZmluZSBDSUNSMV9SR0JfRgkoMSA8PCAxMSkJLyogUkdCIGZvcm1hdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTI3eF9rZXlwYWQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyN3hfa2V5cGFkLmgKaW5kZXggNjQ0Zjc2MC4uZDVhNDhhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTI3eF9rZXlwYWQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMjd4X2tleXBhZC5oCkBAIC01Myw0ICs1Myw2IEBACiAKICNkZWZpbmUgS0VZKHJvdywgY29sLCB2YWwpCSgoKHJvdykgPDwgMjgpIHwgKChjb2wpIDw8IDI0KSB8ICh2YWwpKQogCitleHRlcm4gdm9pZCBweGFfc2V0X2tleXBhZF9pbmZvKHN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKmluZm8pOworCiAjZW5kaWYgLyogX19BU01fQVJDSF9QWEEyN3hfS0VZUEFEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHgtZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTJ4eC1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzMzEzYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHgtZ3Bpby5oCkBAIC0wLDAgKzEsMzU3IEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfUFhBMlhYX0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX1BYQTJYWF9HUElPX0gKKworLyogR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb24gYXNzaWdubWVudHMgKi8KKworI2RlZmluZSBHUElPMV9SU1QJCTEJLyogcmVzZXQgKi8KKyNkZWZpbmUgR1BJTzZfTU1DQ0xLCQk2CS8qIE1NQyBDbG9jayAqLworI2RlZmluZSBHUElPN180OE1IegkJNwkvKiA0OCBNSHogY2xvY2sgb3V0cHV0ICovCisjZGVmaW5lIEdQSU84X01NQ0NTMAkJOAkvKiBNTUMgQ2hpcCBTZWxlY3QgMCAqLworI2RlZmluZSBHUElPOV9NTUNDUzEJCTkJLyogTU1DIENoaXAgU2VsZWN0IDEgKi8KKyNkZWZpbmUgR1BJTzEwX1JUQ0NMSwkJMTAJLyogcmVhbCB0aW1lIGNsb2NrICgxIEh6KSAqLworI2RlZmluZSBHUElPMTFfM182TUh6CQkxMQkvKiAzLjYgTUh6IG9zY2lsbGF0b3Igb3V0ICovCisjZGVmaW5lIEdQSU8xMl8zMktIegkJMTIJLyogMzIga0h6IG91dCAqLworI2RlZmluZSBHUElPMTJfQ0lGX0REXzcJCTEyCS8qIENhbWVyYSBkYXRhIHBpbiA3ICovCisjZGVmaW5lIEdQSU8xM19NQkdOVAkJMTMJLyogbWVtb3J5IGNvbnRyb2xsZXIgZ3JhbnQgKi8KKyNkZWZpbmUgR1BJTzE0X01CUkVRCQkxNAkvKiBhbHRlcm5hdGUgYnVzIG1hc3RlciByZXF1ZXN0ICovCisjZGVmaW5lIEdQSU8xNV9uQ1NfMQkJMTUJLyogY2hpcCBzZWxlY3QgMSAqLworI2RlZmluZSBHUElPMTZfUFdNMAkJMTYJLyogUFdNMCBvdXRwdXQgKi8KKyNkZWZpbmUgR1BJTzE3X1BXTTEJCTE3CS8qIFBXTTEgb3V0cHV0ICovCisjZGVmaW5lIEdQSU8xN19DSUZfRERfNgkJMTcJLyogQ2FtZXJhIGRhdGEgcGluIDYgKi8KKyNkZWZpbmUgR1BJTzE4X1JEWQkJMTgJLyogRXh0LiBCdXMgUmVhZHkgKi8KKyNkZWZpbmUgR1BJTzE5X0RSRVExCQkxOQkvKiBFeHRlcm5hbCBETUEgUmVxdWVzdCAqLworI2RlZmluZSBHUElPMjBfRFJFUTAJCTIwCS8qIEV4dGVybmFsIERNQSBSZXF1ZXN0ICovCisjZGVmaW5lIEdQSU8yM19TQ0xLCQkyMwkvKiBTU1AgY2xvY2sgKi8KKyNkZWZpbmUgR1BJTzIzX0NJRl9NQ0xLCQkyMwkvKiBDYW1lcmEgTWFzdGVyIENsb2NrICovCisjZGVmaW5lIEdQSU8yNF9TRlJNCQkyNAkvKiBTU1AgRnJhbWUgKi8KKyNkZWZpbmUgR1BJTzI0X0NJRl9GVgkJMjQJLyogQ2FtZXJhIGZyYW1lIHN0YXJ0IHNpZ25hbCAqLworI2RlZmluZSBHUElPMjVfU1RYRAkJMjUJLyogU1NQIHRyYW5zbWl0ICovCisjZGVmaW5lIEdQSU8yNV9DSUZfTFYJCTI1CS8qIENhbWVyYSBsaW5lIHN0YXJ0IHNpZ25hbCAqLworI2RlZmluZSBHUElPMjZfU1JYRAkJMjYJLyogU1NQIHJlY2VpdmUgKi8KKyNkZWZpbmUgR1BJTzI2X0NJRl9QQ0xLCQkyNgkvKiBDYW1lcmEgUGl4ZWwgQ2xvY2sgKi8KKyNkZWZpbmUgR1BJTzI3X1NFWFRDTEsJCTI3CS8qIFNTUCBleHRfY2xrICovCisjZGVmaW5lIEdQSU8yN19DSUZfRERfMAkJMjcJLyogQ2FtZXJhIGRhdGEgcGluIDAgKi8KKyNkZWZpbmUgR1BJTzI4X0JJVENMSwkJMjgJLyogQUM5Ny9JMlMgYml0X2NsayAqLworI2RlZmluZSBHUElPMjlfU0RBVEFfSU4JCTI5CS8qIEFDOTcgU2RhdGFfaW4wIC8gSTJTIFNkYXRhX2luICovCisjZGVmaW5lIEdQSU8zMF9TREFUQV9PVVQJMzAJLyogQUM5Ny9JMlMgU2RhdGFfb3V0ICovCisjZGVmaW5lIEdQSU8zMV9TWU5DCQkzMQkvKiBBQzk3L0kyUyBzeW5jICovCisjZGVmaW5lIEdQSU8zMl9TREFUQV9JTjEJMzIJLyogQUM5NyBTZGF0YV9pbjEgKi8KKyNkZWZpbmUgR1BJTzMyX1NZU0NMSwkJMzIJLyogSTJTIFN5c3RlbSBDbG9jayAqLworI2RlZmluZSBHUElPMzJfTU1DQ0xLCQkzMgkvKiBNTUMgQ2xvY2sgKFBYQTI3MCkgKi8KKyNkZWZpbmUgR1BJTzMzX25DU181CQkzMwkvKiBjaGlwIHNlbGVjdCA1ICovCisjZGVmaW5lIEdQSU8zNF9GRlJYRAkJMzQJLyogRkZVQVJUIHJlY2VpdmUgKi8KKyNkZWZpbmUgR1BJTzM0X01NQ0NTMAkJMzQJLyogTU1DIENoaXAgU2VsZWN0IDAgKi8KKyNkZWZpbmUgR1BJTzM1X0ZGQ1RTCQkzNQkvKiBGRlVBUlQgQ2xlYXIgdG8gc2VuZCAqLworI2RlZmluZSBHUElPMzZfRkZEQ0QJCTM2CS8qIEZGVUFSVCBEYXRhIGNhcnJpZXIgZGV0ZWN0ICovCisjZGVmaW5lIEdQSU8zN19GRkRTUgkJMzcJLyogRkZVQVJUIGRhdGEgc2V0IHJlYWR5ICovCisjZGVmaW5lIEdQSU8zOF9GRlJJCQkzOAkvKiBGRlVBUlQgUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgR1BJTzM5X01NQ0NTMQkJMzkJLyogTU1DIENoaXAgU2VsZWN0IDEgKi8KKyNkZWZpbmUgR1BJTzM5X0ZGVFhECQkzOQkvKiBGRlVBUlQgdHJhbnNtaXQgZGF0YSAqLworI2RlZmluZSBHUElPNDBfRkZEVFIJCTQwCS8qIEZGVUFSVCBkYXRhIHRlcm1pbmFsIFJlYWR5ICovCisjZGVmaW5lIEdQSU80MV9GRlJUUwkJNDEJLyogRkZVQVJUIHJlcXVlc3QgdG8gc2VuZCAqLworI2RlZmluZSBHUElPNDJfQlRSWEQJCTQyCS8qIEJUVUFSVCByZWNlaXZlIGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQyX0hXUlhECQk0MgkvKiBIV1VBUlQgcmVjZWl2ZSBkYXRhICovCisjZGVmaW5lIEdQSU80Ml9DSUZfTUNMSwkJNDIJLyogQ2FtZXJhIE1hc3RlciBDbG9jayAqLworI2RlZmluZSBHUElPNDNfQlRUWEQJCTQzCS8qIEJUVUFSVCB0cmFuc21pdCBkYXRhICovCisjZGVmaW5lIEdQSU80M19IV1RYRAkJNDMJLyogSFdVQVJUIHRyYW5zbWl0IGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQzX0NJRl9GVgkJNDMJLyogQ2FtZXJhIGZyYW1lIHN0YXJ0IHNpZ25hbCAqLworI2RlZmluZSBHUElPNDRfQlRDVFMJCTQ0CS8qIEJUVUFSVCBjbGVhciB0byBzZW5kICovCisjZGVmaW5lIEdQSU80NF9IV0NUUwkJNDQJLyogSFdVQVJUIGNsZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgR1BJTzQ0X0NJRl9MVgkJNDQJLyogQ2FtZXJhIGxpbmUgc3RhcnQgc2lnbmFsICovCisjZGVmaW5lIEdQSU80NV9CVFJUUwkJNDUJLyogQlRVQVJUIHJlcXVlc3QgdG8gc2VuZCAqLworI2RlZmluZSBHUElPNDVfSFdSVFMJCTQ1CS8qIEhXVUFSVCByZXF1ZXN0IHRvIHNlbmQgKi8KKyNkZWZpbmUgR1BJTzQ1X0FDOTdfU1lTQ0xLCTQ1CS8qIEFDOTcgU3lzdGVtIENsb2NrICovCisjZGVmaW5lIEdQSU80NV9DSUZfUENMSwkJNDUJLyogQ2FtZXJhIFBpeGVsIENsb2NrICovCisjZGVmaW5lIEdQSU80Nl9JQ1BSWEQJCTQ2CS8qIElDUCByZWNlaXZlIGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQ2X1NUUlhECQk0NgkvKiBTVERfVUFSVCByZWNlaXZlIGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQ3X0lDUFRYRAkJNDcJLyogSUNQIHRyYW5zbWl0IGRhdGEgKi8KKyNkZWZpbmUgR1BJTzQ3X1NUVFhECQk0NwkvKiBTVERfVUFSVCB0cmFuc21pdCBkYXRhICovCisjZGVmaW5lIEdQSU80N19DSUZfRERfMAkJNDcJLyogQ2FtZXJhIGRhdGEgcGluIDAgKi8KKyNkZWZpbmUgR1BJTzQ4X25QT0UJCTQ4CS8qIE91dHB1dCBFbmFibGUgZm9yIENhcmQgU3BhY2UgKi8KKyNkZWZpbmUgR1BJTzQ4X0NJRl9ERF81CQk0OAkvKiBDYW1lcmEgZGF0YSBwaW4gNSAqLworI2RlZmluZSBHUElPNDlfblBXRQkJNDkJLyogV3JpdGUgRW5hYmxlIGZvciBDYXJkIFNwYWNlICovCisjZGVmaW5lIEdQSU81MF9uUElPUgkJNTAJLyogSS9PIFJlYWQgZm9yIENhcmQgU3BhY2UgKi8KKyNkZWZpbmUgR1BJTzUwX0NJRl9ERF8zCQk1MAkvKiBDYW1lcmEgZGF0YSBwaW4gMyAqLworI2RlZmluZSBHUElPNTFfblBJT1cJCTUxCS8qIEkvTyBXcml0ZSBmb3IgQ2FyZCBTcGFjZSAqLworI2RlZmluZSBHUElPNTFfQ0lGX0REXzIJCTUxCS8qIENhbWVyYSBkYXRhIHBpbiAyICovCisjZGVmaW5lIEdQSU81Ml9uUENFXzEJCTUyCS8qIENhcmQgRW5hYmxlIGZvciBDYXJkIFNwYWNlICovCisjZGVmaW5lIEdQSU81Ml9DSUZfRERfNAkJNTIJLyogQ2FtZXJhIGRhdGEgcGluIDQgKi8KKyNkZWZpbmUgR1BJTzUzX25QQ0VfMgkJNTMJLyogQ2FyZCBFbmFibGUgZm9yIENhcmQgU3BhY2UgKi8KKyNkZWZpbmUgR1BJTzUzX01NQ0NMSwkJNTMJLyogTU1DIENsb2NrICovCisjZGVmaW5lIEdQSU81M19DSUZfTUNMSwkJNTMJLyogQ2FtZXJhIE1hc3RlciBDbG9jayAqLworI2RlZmluZSBHUElPNTRfTU1DQ0xLCQk1NAkvKiBNTUMgQ2xvY2sgKi8KKyNkZWZpbmUgR1BJTzU0X3BTS1RTRUwJCTU0CS8qIFNvY2tldCBTZWxlY3QgZm9yIENhcmQgU3BhY2UgKi8KKyNkZWZpbmUgR1BJTzU0X25QQ0VfMgkJNTQJLyogQ2FyZCBFbmFibGUgZm9yIENhcmQgU3BhY2UgKFBYQTI3eCkgKi8KKyNkZWZpbmUgR1BJTzU0X0NJRl9QQ0xLCQk1NAkvKiBDYW1lcmEgUGl4ZWwgQ2xvY2sgKi8KKyNkZWZpbmUgR1BJTzU1X25QUkVHCQk1NQkvKiBDYXJkIEFkZHJlc3MgYml0IDI2ICovCisjZGVmaW5lIEdQSU81NV9DSUZfRERfMQkJNTUJLyogQ2FtZXJhIGRhdGEgcGluIDEgKi8KKyNkZWZpbmUgR1BJTzU2X25QV0FJVAkJNTYJLyogV2FpdCBzaWduYWwgZm9yIENhcmQgU3BhY2UgKi8KKyNkZWZpbmUgR1BJTzU3X25JT0lTMTYJCTU3CS8qIEJ1cyBXaWR0aCBzZWxlY3QgZm9yIEkvTyBDYXJkIFNwYWNlICovCisjZGVmaW5lIEdQSU81OF9MRERfMAkJNTgJLyogTENEIGRhdGEgcGluIDAgKi8KKyNkZWZpbmUgR1BJTzU5X0xERF8xCQk1OQkvKiBMQ0QgZGF0YSBwaW4gMSAqLworI2RlZmluZSBHUElPNjBfTEREXzIJCTYwCS8qIExDRCBkYXRhIHBpbiAyICovCisjZGVmaW5lIEdQSU82MV9MRERfMwkJNjEJLyogTENEIGRhdGEgcGluIDMgKi8KKyNkZWZpbmUgR1BJTzYyX0xERF80CQk2MgkvKiBMQ0QgZGF0YSBwaW4gNCAqLworI2RlZmluZSBHUElPNjNfTEREXzUJCTYzCS8qIExDRCBkYXRhIHBpbiA1ICovCisjZGVmaW5lIEdQSU82NF9MRERfNgkJNjQJLyogTENEIGRhdGEgcGluIDYgKi8KKyNkZWZpbmUgR1BJTzY1X0xERF83CQk2NQkvKiBMQ0QgZGF0YSBwaW4gNyAqLworI2RlZmluZSBHUElPNjZfTEREXzgJCTY2CS8qIExDRCBkYXRhIHBpbiA4ICovCisjZGVmaW5lIEdQSU82Nl9NQlJFUQkJNjYJLyogYWx0ZXJuYXRlIGJ1cyBtYXN0ZXIgcmVxICovCisjZGVmaW5lIEdQSU82N19MRERfOQkJNjcJLyogTENEIGRhdGEgcGluIDkgKi8KKyNkZWZpbmUgR1BJTzY3X01NQ0NTMAkJNjcJLyogTU1DIENoaXAgU2VsZWN0IDAgKi8KKyNkZWZpbmUgR1BJTzY4X0xERF8xMAkJNjgJLyogTENEIGRhdGEgcGluIDEwICovCisjZGVmaW5lIEdQSU82OF9NTUNDUzEJCTY4CS8qIE1NQyBDaGlwIFNlbGVjdCAxICovCisjZGVmaW5lIEdQSU82OV9MRERfMTEJCTY5CS8qIExDRCBkYXRhIHBpbiAxMSAqLworI2RlZmluZSBHUElPNjlfTU1DQ0xLCQk2OQkvKiBNTUNfQ0xLICovCisjZGVmaW5lIEdQSU83MF9MRERfMTIJCTcwCS8qIExDRCBkYXRhIHBpbiAxMiAqLworI2RlZmluZSBHUElPNzBfUlRDQ0xLCQk3MAkvKiBSZWFsIFRpbWUgY2xvY2sgKDEgSHopICovCisjZGVmaW5lIEdQSU83MV9MRERfMTMJCTcxCS8qIExDRCBkYXRhIHBpbiAxMyAqLworI2RlZmluZSBHUElPNzFfM182TUh6CQk3MQkvKiAzLjYgTUh6IE9zY2lsbGF0b3IgY2xvY2sgKi8KKyNkZWZpbmUgR1BJTzcyX0xERF8xNAkJNzIJLyogTENEIGRhdGEgcGluIDE0ICovCisjZGVmaW5lIEdQSU83Ml8zMmtIegkJNzIJLyogMzIga0h6IGNsb2NrICovCisjZGVmaW5lIEdQSU83M19MRERfMTUJCTczCS8qIExDRCBkYXRhIHBpbiAxNSAqLworI2RlZmluZSBHUElPNzNfTUJHTlQJCTczCS8qIE1lbW9yeSBjb250cm9sbGVyIGdyYW50ICovCisjZGVmaW5lIEdQSU83NF9MQ0RfRkNMSwkJNzQJLyogTENEIEZyYW1lIGNsb2NrICovCisjZGVmaW5lIEdQSU83NV9MQ0RfTENMSwkJNzUJLyogTENEIGxpbmUgY2xvY2sgKi8KKyNkZWZpbmUgR1BJTzc2X0xDRF9QQ0xLCQk3NgkvKiBMQ0QgUGl4ZWwgY2xvY2sgKi8KKyNkZWZpbmUgR1BJTzc3X0xDRF9BQ0JJQVMJNzcJLyogTENEIEFDIEJpYXMgKi8KKyNkZWZpbmUgR1BJTzc4X25DU18yCQk3OAkvKiBjaGlwIHNlbGVjdCAyICovCisjZGVmaW5lIEdQSU83OV9uQ1NfMwkJNzkJLyogY2hpcCBzZWxlY3QgMyAqLworI2RlZmluZSBHUElPODBfbkNTXzQJCTgwCS8qIGNoaXAgc2VsZWN0IDQgKi8KKyNkZWZpbmUgR1BJTzgxX05TQ0xLCQk4MQkvKiBOU1NQIGNsb2NrICovCisjZGVmaW5lIEdQSU84MV9DSUZfRERfMAkJODEJLyogQ2FtZXJhIGRhdGEgcGluIDAgKi8KKyNkZWZpbmUgR1BJTzgyX05TRlJNCQk4MgkvKiBOU1NQIEZyYW1lICovCisjZGVmaW5lIEdQSU84Ml9DSUZfRERfNQkJODIJLyogQ2FtZXJhIGRhdGEgcGluIDUgKi8KKyNkZWZpbmUgR1BJTzgzX05TVFhECQk4MwkvKiBOU1NQIHRyYW5zbWl0ICovCisjZGVmaW5lIEdQSU84M19DSUZfRERfNAkJODMJLyogQ2FtZXJhIGRhdGEgcGluIDQgKi8KKyNkZWZpbmUgR1BJTzg0X05TUlhECQk4NAkvKiBOU1NQIHJlY2VpdmUgKi8KKyNkZWZpbmUgR1BJTzg0X0NJRl9GVgkJODQJLyogQ2FtZXJhIGZyYW1lIHN0YXJ0IHNpZ25hbCAqLworI2RlZmluZSBHUElPODVfblBDRV8xCQk4NQkvKiBDYXJkIEVuYWJsZSBmb3IgQ2FyZCBTcGFjZSAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPODVfQ0lGX0xWCQk4NQkvKiBDYW1lcmEgbGluZSBzdGFydCBzaWduYWwgKi8KKyNkZWZpbmUgR1BJTzkwX0NJRl9ERF80CQk5MAkvKiBDYW1lcmEgZGF0YSBwaW4gNCAqLworI2RlZmluZSBHUElPOTFfQ0lGX0REXzUJCTkxCS8qIENhbWVyYSBkYXRhIHBpbiA1ICovCisjZGVmaW5lIEdQSU85Ml9NTUNEQVQwCQk5MgkvKiBNTUMgREFUMCAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPOTNfQ0lGX0REXzYJCTkzCS8qIENhbWVyYSBkYXRhIHBpbiA2ICovCisjZGVmaW5lIEdQSU85NF9DSUZfRERfNQkJOTQJLyogQ2FtZXJhIGRhdGEgcGluIDUgKi8KKyNkZWZpbmUgR1BJTzk1X0NJRl9ERF80CQk5NQkvKiBDYW1lcmEgZGF0YSBwaW4gNCAqLworI2RlZmluZSBHUElPOThfQ0lGX0REXzAJCTk4CS8qIENhbWVyYSBkYXRhIHBpbiAwICovCisjZGVmaW5lIEdQSU8xMDJfblBDRV8xCQkxMDIJLyogUENNQ0lBIChQWEEyN3gpICovCisjZGVmaW5lIEdQSU8xMDNfQ0lGX0REXzMJMTAzCS8qIENhbWVyYSBkYXRhIHBpbiAzICovCisjZGVmaW5lIEdQSU8xMDRfQ0lGX0REXzIJMTA0CS8qIENhbWVyYSBkYXRhIHBpbiAyICovCisjZGVmaW5lIEdQSU8xMDVfQ0lGX0REXzEJMTA1CS8qIENhbWVyYSBkYXRhIHBpbiAxICovCisjZGVmaW5lIEdQSU8xMDZfQ0lGX0REXzkJMTA2CS8qIENhbWVyYSBkYXRhIHBpbiA5ICovCisjZGVmaW5lIEdQSU8xMDdfQ0lGX0REXzgJMTA3CS8qIENhbWVyYSBkYXRhIHBpbiA4ICovCisjZGVmaW5lIEdQSU8xMDhfQ0lGX0REXzcJMTA4CS8qIENhbWVyYSBkYXRhIHBpbiA3ICovCisjZGVmaW5lIEdQSU8xMDlfTU1DREFUMQkJMTA5CS8qIE1NQyBEQVQxIChQWEEyN3gpICovCisjZGVmaW5lIEdQSU8xMTBfTU1DREFUMgkJMTEwCS8qIE1NQyBEQVQyIChQWEEyN3gpICovCisjZGVmaW5lIEdQSU8xMTBfTU1DQ1MwCQkxMTAJLyogTU1DIENoaXAgU2VsZWN0IDAgKFBYQTI3eCkgKi8KKyNkZWZpbmUgR1BJTzExMV9NTUNEQVQzCQkxMTEJLyogTU1DIERBVDMgKFBYQTI3eCkgKi8KKyNkZWZpbmUgR1BJTzExMV9NTUNDUzEJCTExMQkvKiBNTUMgQ2hpcCBTZWxlY3QgMSAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPMTEyX01NQ0NNRAkJMTEyCS8qIE1NQyBDTUQgKFBYQTI3eCkgKi8KKyNkZWZpbmUgR1BJTzExM19JMlNfU1lTQ0xLCTExMwkvKiBJMlMgU3lzdGVtIENsb2NrIChQWEEyN3gpICovCisjZGVmaW5lIEdQSU8xMTNfQUM5N19SRVNFVF9OCTExMwkvKiBBQzk3IE5SRVNFVCBvbiAoUFhBMjd4KSAqLworI2RlZmluZSBHUElPMTE0X0NJRl9ERF8xCTExNAkvKiBDYW1lcmEgZGF0YSBwaW4gMSAqLworI2RlZmluZSBHUElPMTE1X0NJRl9ERF8zCTExNQkvKiBDYW1lcmEgZGF0YSBwaW4gMyAqLworI2RlZmluZSBHUElPMTE2X0NJRl9ERF8yCTExNgkvKiBDYW1lcmEgZGF0YSBwaW4gMiAqLworCisvKiBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlICYgZGlyZWN0aW9uICovCisKKyNkZWZpbmUgR1BJT19JTgkJCTB4MDAwCisjZGVmaW5lIEdQSU9fT1VUCQkweDA4MAorI2RlZmluZSBHUElPX0FMVF9GTl8xX0lOCTB4MTAwCisjZGVmaW5lIEdQSU9fQUxUX0ZOXzFfT1VUCTB4MTgwCisjZGVmaW5lIEdQSU9fQUxUX0ZOXzJfSU4JMHgyMDAKKyNkZWZpbmUgR1BJT19BTFRfRk5fMl9PVVQJMHgyODAKKyNkZWZpbmUgR1BJT19BTFRfRk5fM19JTgkweDMwMAorI2RlZmluZSBHUElPX0FMVF9GTl8zX09VVAkweDM4MAorI2RlZmluZSBHUElPX01EX01BU0tfTlIJCTB4MDdmCisjZGVmaW5lIEdQSU9fTURfTUFTS19ESVIJMHgwODAKKyNkZWZpbmUgR1BJT19NRF9NQVNLX0ZOCQkweDMwMAorI2RlZmluZSBHUElPX0RGTFRfTE9XCQkweDQwMAorI2RlZmluZSBHUElPX0RGTFRfSElHSAkJMHg4MDAKKworI2RlZmluZSBHUElPMV9SVFNfTUQJCSggMSB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU82X01NQ0NMS19NRAkJKCA2IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU83XzQ4TUh6X01ECQkoIDcgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzhfTU1DQ1MwX01ECQkoIDggfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzlfTU1DQ1MxX01ECQkoIDkgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzEwX1JUQ0NMS19NRAkoMTAgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzExXzNfNk1Iel9NRAkoMTEgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzEyXzMyS0h6X01ECQkoMTIgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzEyX0NJRl9ERF83X01ECSgxMiB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU8xM19NQkdOVF9NRAkJKDEzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xNF9NQlJFUV9NRAkJKDE0IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzE1X25DU18xX01ECQkoMTUgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzE2X1BXTTBfTUQJCSgxNiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMTdfUFdNMV9NRAkJKDE3IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xN19DSUZfRERfNl9NRAkoMTcgfCBHUElPX0FMVF9GTl8yX0lOKQorI2RlZmluZSBHUElPMThfUkRZX01ECQkoMTggfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMTlfRFJFUTFfTUQJCSgxOSB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8yMF9EUkVRMF9NRAkJKDIwIHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzIzX0NJRl9NQ0xLX01ECSgyMyB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMjNfU0NMS19NRAkJKDIzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8yNF9DSUZfRlZfTUQJKDI0IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8yNF9TRlJNX01ECQkoMjQgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzI1X0NJRl9MVl9NRAkoMjUgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzI1X1NUWERfTUQJCSgyNSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMjZfU1JYRF9NRAkJKDI2IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzI2X0NJRl9QQ0xLX01ECSgyNiB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU8yN19TRVhUQ0xLX01ECSgyNyB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8yN19DSUZfRERfMF9NRAkoMjcgfCBHUElPX0FMVF9GTl8zX0lOKQorI2RlZmluZSBHUElPMjhfQklUQ0xLX0FDOTdfTUQJKDI4IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzI4X0JJVENMS19JTl9JMlNfTUQJKDI4IHwgR1BJT19BTFRfRk5fMl9JTikKKyNkZWZpbmUgR1BJTzI4X0JJVENMS19PVVRfSTJTX01ECSgyOCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMjlfU0RBVEFfSU5fQUM5N19NRAkoMjkgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMjlfU0RBVEFfSU5fSTJTX01ECSgyOSB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU8zMF9TREFUQV9PVVRfQUM5N19NRAkoMzAgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzMwX1NEQVRBX09VVF9JMlNfTUQJKDMwIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8zMV9TWU5DX0kyU19NRAkoMzEgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzMxX1NZTkNfQUM5N19NRAkoMzEgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzMyX1NEQVRBX0lOMV9BQzk3X01ECSgzMiB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8zMl9TWVNDTEtfSTJTX01ECSgzMiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMzJfTU1DQ0xLX01ECSgzMiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMzNfbkNTXzVfTUQJCSgzMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMzRfRkZSWERfTUQJCSgzNCB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8zNF9NTUNDUzBfTUQJKDM0IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8zNV9GRkNUU19NRAkJKDM1IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzM1X0tQX01LT1VUNl9NRAkoMzUgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzM2X0ZGRENEX01ECQkoMzYgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMzdfRkZEU1JfTUQJCSgzNyB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8zOF9GRlJJX01ECQkoMzggfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMzlfTU1DQ1MxX01ECSgzOSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMzlfRkZUWERfTUQJCSgzOSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDBfRkZEVFJfTUQJCSg0MCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDFfRkZSVFNfTUQJCSg0MSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDFfS1BfTUtPVVQ3X01ECSg0MSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPNDJfQlRSWERfTUQJCSg0MiB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU80Ml9IV1JYRF9NRAkJKDQyIHwgR1BJT19BTFRfRk5fM19JTikKKyNkZWZpbmUgR1BJTzQyX0NJRl9NQ0xLX01ECSg0MiB8IEdQSU9fQUxUX0ZOXzNfT1VUKQorI2RlZmluZSBHUElPNDNfQlRUWERfTUQJCSg0MyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDNfSFdUWERfTUQJCSg0MyB8IEdQSU9fQUxUX0ZOXzNfT1VUKQorI2RlZmluZSBHUElPNDNfQ0lGX0ZWX01ECSg0MyB8IEdQSU9fQUxUX0ZOXzNfT1VUKQorI2RlZmluZSBHUElPNDRfQlRDVFNfTUQJCSg0NCB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU80NF9IV0NUU19NRAkJKDQ0IHwgR1BJT19BTFRfRk5fM19JTikKKyNkZWZpbmUgR1BJTzQ0X0NJRl9MVl9NRAkoNDQgfCBHUElPX0FMVF9GTl8zX09VVCkKKyNkZWZpbmUgR1BJTzQ1X0NJRl9QQ0xLX01ECSg0NSB8IEdQSU9fQUxUX0ZOXzNfSU4pCisjZGVmaW5lIEdQSU80NV9CVFJUU19NRAkJKDQ1IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU80NV9IV1JUU19NRAkJKDQ1IHwgR1BJT19BTFRfRk5fM19PVVQpCisjZGVmaW5lIEdQSU80NV9TWVNDTEtfQUM5N19NRAkoNDUgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzQ2X0lDUFJYRF9NRAkoNDYgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNDZfU1RSWERfTUQJCSg0NiB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU80N19DSUZfRERfMF9NRAkoNDcgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNDdfSUNQVFhEX01ECSg0NyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDdfU1RUWERfTUQJCSg0NyB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPNDhfQ0lGX0REXzVfTUQJKDQ4IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzQ4X25QT0VfTUQJCSg0OCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNDhfSFdUWERfTUQJCSg0OCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPNDhfblBPRV9NRAkJKDQ4IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU80OV9IV1JYRF9NRAkJKDQ5IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzQ5X25QV0VfTUQJCSg0OSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTBfQ0lGX0REXzNfTUQJKDUwIHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzUwX25QSU9SX01ECQkoNTAgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzUwX0hXQ1RTX01ECQkoNTAgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNTBfQ0lGX0REXzNfTUQJKDUwIHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzUxX0NJRl9ERF8yX01ECSg1MSB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU81MV9uUElPV19NRAkJKDUxIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU81MV9IV1JUU19NRAkJKDUxIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU81MV9DSUZfRERfMl9NRAkoNTEgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNTJfblBDRV8xX01ECSg1MiB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTJfQ0lGX0REXzRfTUQJKDUyIHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzUzX25QQ0VfMl9NRAkoNTMgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzUzX01NQ0NMS19NRAkoNTMgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzUzX0NJRl9NQ0xLX01ECSg1MyB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTRfTU1DQ0xLX01ECSg1NCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPNTRfblBDRV8yX01ECSg1NCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNTRfcFNLVFNFTF9NRAkoNTQgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzU0X0NJRl9QQ0xLX01ECSg1NCB8IEdQSU9fQUxUX0ZOXzNfSU4pCisjZGVmaW5lIEdQSU81NV9uUFJFR19NRAkJKDU1IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU81NV9DSUZfRERfMV9NRAkoNTUgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPNTZfblBXQUlUX01ECSg1NiB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU81N19uSU9JUzE2X01ECSg1NyB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU81OF9MRERfMF9NRAkJKDU4IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU81OV9MRERfMV9NRAkJKDU5IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82MF9MRERfMl9NRAkJKDYwIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82MV9MRERfM19NRAkJKDYxIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82Ml9MRERfNF9NRAkJKDYyIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82M19MRERfNV9NRAkJKDYzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82NF9MRERfNl9NRAkJKDY0IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82NV9MRERfN19NRAkJKDY1IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82Nl9MRERfOF9NRAkJKDY2IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU82Nl9NQlJFUV9NRAkJKDY2IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzY3X0xERF85X01ECQkoNjcgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzY3X01NQ0NTMF9NRAkoNjcgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzY4X0xERF8xMF9NRAkoNjggfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzY4X01NQ0NTMV9NRAkoNjggfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzY5X0xERF8xMV9NRAkoNjkgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzY5X01NQ0NMS19NRAkoNjkgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzcwX0xERF8xMl9NRAkoNzAgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzcwX1JUQ0NMS19NRAkoNzAgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzcxX0xERF8xM19NRAkoNzEgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzcxXzNfNk1Iel9NRAkoNzEgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzcyX0xERF8xNF9NRAkoNzIgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzcyXzMya0h6X01ECQkoNzIgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzczX0xERF8xNV9NRAkoNzMgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzczX01CR05UX01ECQkoNzMgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzc0X0xDRF9GQ0xLX01ECSg3NCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPNzVfTENEX0xDTEtfTUQJKDc1IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83Nl9MQ0RfUENMS19NRAkoNzYgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzc3X0xDRF9BQ0JJQVNfTUQJKDc3IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83OF9uQ1NfMl9NRAkJKDc4IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83OF9uUENFXzJfTUQJKDc4IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU83OV9uQ1NfM19NRAkJKDc5IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU83OV9wU0tUU0VMX01ECSg3OSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPODBfbkNTXzRfTUQJCSg4MCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPODFfTlNTUF9DTEtfT1VUCSg4MSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPODFfTlNTUF9DTEtfSU4JKDgxIHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzgxX0NJRl9ERF8wX01ECSg4MSB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU84Ml9OU1NQX0ZSTV9PVVQJKDgyIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU84Ml9OU1NQX0ZSTV9JTgkoODIgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPODJfQ0lGX0REXzVfTUQJKDgyIHwgR1BJT19BTFRfRk5fM19JTikKKyNkZWZpbmUgR1BJTzgzX05TU1BfVFgJCSg4MyB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPODNfTlNTUF9SWAkJKDgzIHwgR1BJT19BTFRfRk5fMl9JTikKKyNkZWZpbmUgR1BJTzgzX0NJRl9ERF80X01ECSg4MyB8IEdQSU9fQUxUX0ZOXzNfSU4pCisjZGVmaW5lIEdQSU84NF9OU1NQX1RYCQkoODQgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzg0X05TU1BfUlgJCSg4NCB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU84NF9DSUZfRlZfTUQJKDg0IHwgR1BJT19BTFRfRk5fM19JTikKKyNkZWZpbmUgR1BJTzg1X25QQ0VfMV9NRAkoODUgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzg1X0NJRl9MVl9NRAkoODUgfCBHUElPX0FMVF9GTl8zX0lOKQorI2RlZmluZSBHUElPODZfblBDRV8xX01ECSg4NiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPOTBfQ0lGX0REXzRfTUQJKDkwIHwgR1BJT19BTFRfRk5fM19JTikKKyNkZWZpbmUgR1BJTzkxX0NJRl9ERF81X01ECSg5MSB8IEdQSU9fQUxUX0ZOXzNfSU4pCisjZGVmaW5lIEdQSU85Ml9NTUNEQVQwX01ECSg5MiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPOTNfQ0lGX0REXzZfTUQJKDkzIHwgR1BJT19BTFRfRk5fMl9JTikKKyNkZWZpbmUgR1BJTzk0X0NJRl9ERF81X01ECSg5NCB8IEdQSU9fQUxUX0ZOXzJfSU4pCisjZGVmaW5lIEdQSU85NV9DSUZfRERfNF9NRAkoOTUgfCBHUElPX0FMVF9GTl8yX0lOKQorI2RlZmluZSBHUElPOTVfS1BfTUtJTjZfTUQJKDk1IHwgR1BJT19BTFRfRk5fM19JTikKKyNkZWZpbmUgR1BJTzk2X0tQX0RLSU4zX01ECSg5NiB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU85N19LUF9NS0lOM19NRAkoOTcgfCBHUElPX0FMVF9GTl8zX0lOKQorI2RlZmluZSBHUElPOThfQ0lGX0REXzBfTUQJKDk4IHwgR1BJT19BTFRfRk5fMl9JTikKKyNkZWZpbmUgR1BJTzEwMF9LUF9NS0lOMF9NRAkoMTAwIHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzEwMV9LUF9NS0lOMV9NRAkoMTAxIHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzEwMl9uUENFXzFfTUQJKDEwMiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTAyX0tQX01LSU4yX01ECSgxMDIgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMTAzX0NJRl9ERF8zX01ECSgxMDMgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMTAzX0tQX01LT1VUMF9NRAkoMTAzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xMDRfQ0lGX0REXzJfTUQJKDEwNCB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8xMDRfcFNLVFNFTF9NRAkoMTA0IHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMDRfS1BfTUtPVVQxX01ECSgxMDQgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzEwNV9DSUZfRERfMV9NRAkoMTA1IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzEwNV9LUF9NS09VVDJfTUQJKDEwNSB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMTA2X0NJRl9ERF85X01ECSgxMDYgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMTA2X0tQX01LT1VUM19NRAkoMTA2IHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xMDdfQ0lGX0REXzhfTUQJKDEwNyB8IEdQSU9fQUxUX0ZOXzFfSU4pCisjZGVmaW5lIEdQSU8xMDdfS1BfTUtPVVQ0X01ECSgxMDcgfCBHUElPX0FMVF9GTl8yX09VVCkKKyNkZWZpbmUgR1BJTzEwOF9DSUZfRERfN19NRAkoMTA4IHwgR1BJT19BTFRfRk5fMV9JTikKKyNkZWZpbmUgR1BJTzEwOF9LUF9NS09VVDVfTUQJKDEwOCB8IEdQSU9fQUxUX0ZOXzJfT1VUKQorI2RlZmluZSBHUElPMTA5X01NQ0RBVDFfTUQJKDEwOSB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTEwX01NQ0RBVDJfTUQJKDExMCB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTEwX01NQ0NTMF9NRAkoMTEwIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMTFfTU1DREFUM19NRAkoMTExIHwgR1BJT19BTFRfRk5fMV9PVVQpCisjZGVmaW5lIEdQSU8xMTBfTU1DQ1MxX01ECSgxMTEgfCBHUElPX0FMVF9GTl8xX09VVCkKKyNkZWZpbmUgR1BJTzExMl9NTUNDTURfTUQJKDExMiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTEzX0kyU19TWVNDTEtfTUQJKDExMyB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTEzX0FDOTdfUkVTRVRfTl9NRAkoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpCisjZGVmaW5lIEdQSU8xMTdfSTJDU0NMX01ECSgxMTcgfCBHUElPX0FMVF9GTl8xX0lOKQorI2RlZmluZSBHUElPMTE4X0kyQ1NEQV9NRAkoMTE4IHwgR1BJT19BTFRfRk5fMV9JTikKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUFhBMlhYX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YTN4eC1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhM3h4LXJlZ3MuaAppbmRleCA4ZTFiM2VhLi5mZTkzNjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhM3h4LXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhM3h4LXJlZ3MuaApAQCAtMTIsNiArMTIsMTUgQEAKIAogI2lmbmRlZiBfX0FTTV9BUkNIX1BYQTNYWF9SRUdTX0gKICNkZWZpbmUgX19BU01fQVJDSF9QWEEzWFhfUkVHU19ICisKKy8qCisgKiBPc2NpbGxhdG9yIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKE9TQ0MpCisgKi8KKyNkZWZpbmUgT1NDQyAgICAgICAgICAgX19SRUcoMHg0MTM1MDAwMCkgIC8qIE9zY2lsbGF0b3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCisjZGVmaW5lIE9TQ0NfUEVOICAgICAgICgxIDw8IDExKSAgICAgICAvKiAxM01IeiBQT1VUICovCisKKwogLyoKICAqIFNlcnZpY2UgUG93ZXIgTWFuYWdlbWVudCBVbml0IChNUE1VKQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcmVncy1zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLXNzcC5oCmluZGV4IDk5MWNiNjguLjAyNTUzMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLXNzcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9yZWdzLXNzcC5oCkBAIC04NSw2ICs4NSw3IEBACiAjZGVmaW5lIFNTQ1IxX1JTUkUJCSgxIDw8IDIwKQkvKiBSZWNlaXZlIFNlcnZpY2UgUmVxdWVzdCBFbmFibGUgKi8KICNkZWZpbmUgU1NDUjFfVElOVEUJCSgxIDw8IDE5KQkvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgZW5hYmxlICovCiAjZGVmaW5lIFNTQ1IxX1BJTlRFCQkoMSA8PCAxOCkJLyogUGVyaXBoZXJhbCBUcmFpbGluZyBCeXRlIEludGVydXB0IEVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9JRlMJCSgxIDw8IDE2KQkvKiBJbnZlcnQgRnJhbWUgU2lnbmFsICovCiAjZGVmaW5lIFNTQ1IxX1NUUkYJCSgxIDw8IDE1KQkvKiBTZWxlY3QgRklGTyBvciBFRldSICovCiAjZGVmaW5lIFNTQ1IxX0VGV1IJCSgxIDw8IDE0KQkvKiBFbmFibGUgRklGTyBXcml0ZS9SZWFkICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90b3NhLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdG9zYS5oCmluZGV4IGMwNWU0ZmEuLmM1YjZmZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90b3NhLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3Rvc2EuaApAQCAtMjMsMTEgKzIzLDEyIEBACiAvKgogICogU0NPT1AyIGludGVybmFsIEdQSU9zCiAgKi8KKyNkZWZpbmUgVE9TQV9TQ09PUF9HUElPX0JBU0UJCU5SX0JVSUxUSU5fR1BJTwogI2RlZmluZSBUT1NBX1NDT09QX1BYQV9WQ09SRTEJCVNDT09QX0dQQ1JfUEExMQogI2RlZmluZSBUT1NBX1NDT09QX1RDNjM5M19SRVNUX0lOCVNDT09QX0dQQ1JfUEExMgotI2RlZmluZSBUT1NBX1NDT09QX0lSX1BPV0VSRFdOCQlTQ09PUF9HUENSX1BBMTMKLSNkZWZpbmUgVE9TQV9TQ09PUF9TRF9XUAkJU0NPT1BfR1BDUl9QQTE0Ci0jZGVmaW5lIFRPU0FfU0NPT1BfUFdSX09OCQlTQ09PUF9HUENSX1BBMTUKKyNkZWZpbmUgVE9TQV9HUElPX0lSX1BPV0VSRFdOCQkoVE9TQV9TQ09PUF9HUElPX0JBU0UgKyAyKQorI2RlZmluZSBUT1NBX0dQSU9fU0RfV1AJCQkoVE9TQV9TQ09PUF9HUElPX0JBU0UgKyAzKQorI2RlZmluZSBUT1NBX0dQSU9fUFdSX09OCQkoVE9TQV9TQ09PUF9HUElPX0JBU0UgKyA0KQogI2RlZmluZSBUT1NBX1NDT09QX0FVRF9QV1JfT04JCVNDT09QX0dQQ1JfUEExNgogI2RlZmluZSBUT1NBX1NDT09QX0JUX1JFU0VUCQlTQ09PUF9HUENSX1BBMTcKICNkZWZpbmUgVE9TQV9TQ09PUF9CVF9QV1JfRU4JCVNDT09QX0dQQ1JfUEExOApAQCAtMzUsNyArMzYsNyBAQAogCiAvKiBHUElPIERpcmVjdGlvbiAgIDEgOiBvdXRwdXQgbW9kZSAvIDA6aW5wdXQgbW9kZSAqLwogI2RlZmluZSBUT1NBX1NDT09QX0lPX0RJUiAgICAgKCBUT1NBX1NDT09QX1BYQV9WQ09SRTEgfCBUT1NBX1NDT09QX1RDNjM5M19SRVNUX0lOIHwgXAotCQlUT1NBX1NDT09QX0lSX1BPV0VSRFdOIHwgVE9TQV9TQ09PUF9QV1JfT04gfCBUT1NBX1NDT09QX0FVRF9QV1JfT04gfFwKKwkJVE9TQV9TQ09PUF9BVURfUFdSX09OIHxcCiAJCVRPU0FfU0NPT1BfQlRfUkVTRVQgfCBUT1NBX1NDT09QX0JUX1BXUl9FTiApCiAvKiBHUElPIG91dCBwdXQgbGV2ZWwgd2hlbiBpbml0ICAgMTogSGkgKi8KICNkZWZpbmUgVE9TQV9TQ09PUF9JT19PVVQgICAgICggVE9TQV9TQ09PUF9UQzYzOTNfUkVTVF9JTiApCkBAIC00MywyMyArNDQsMjEgQEAKIC8qCiAgKiBTQ09PUDIgamFja2V0IEdQSU9zCiAgKi8KLSNkZWZpbmUgVE9TQV9TQ09PUF9KQ19CVF9MRUQJCVNDT09QX0dQQ1JfUEExMQotI2RlZmluZSBUT1NBX1NDT09QX0pDX05PVEVfTEVECQlTQ09PUF9HUENSX1BBMTIKLSNkZWZpbmUgVE9TQV9TQ09PUF9KQ19DSFJHX0VSUl9MRUQJU0NPT1BfR1BDUl9QQTEzCi0jZGVmaW5lIFRPU0FfU0NPT1BfSkNfVVNCX1BVTExVUAlTQ09PUF9HUENSX1BBMTQKKyNkZWZpbmUgVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UJCShOUl9CVUlMVElOX0dQSU8gKyAxMikKKyNkZWZpbmUgVE9TQV9HUElPX0JUX0xFRAkJKFRPU0FfU0NPT1BfSkNfR1BJT19CQVNFICsgMCkKKyNkZWZpbmUgVE9TQV9HUElPX05PVEVfTEVECQkoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UgKyAxKQorI2RlZmluZSBUT1NBX0dQSU9fQ0hSR19FUlJfTEVECQkoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UgKyAyKQorI2RlZmluZSBUT1NBX0dQSU9fVVNCX1BVTExVUAkJKFRPU0FfU0NPT1BfSkNfR1BJT19CQVNFICsgMykKICNkZWZpbmUgVE9TQV9TQ09PUF9KQ19UQzYzOTNfU1VTUEVORAlTQ09PUF9HUENSX1BBMTUKICNkZWZpbmUgVE9TQV9TQ09PUF9KQ19UQzM2OTNfTDNWX09OCVNDT09QX0dQQ1JfUEExNgogI2RlZmluZSBUT1NBX1NDT09QX0pDX1dMQU5fREVURUNUCVNDT09QX0dQQ1JfUEExNwotI2RlZmluZSBUT1NBX1NDT09QX0pDX1dMQU5fTEVECQlTQ09PUF9HUENSX1BBMTgKKyNkZWZpbmUgVE9TQV9HUElPX1dMQU5fTEVECQkoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UgKyA3KQogI2RlZmluZSBUT1NBX1NDT09QX0pDX0NBUkRfTElNSVRfU0VMCVNDT09QX0dQQ1JfUEExOQogCiAvKiBHUElPIERpcmVjdGlvbiAgIDEgOiBvdXRwdXQgbW9kZSAvIDA6aW5wdXQgbW9kZSAqLwotI2RlZmluZSBUT1NBX1NDT09QX0pDX0lPX0RJUiAoIFRPU0FfU0NPT1BfSkNfQlRfTEVEIHwgVE9TQV9TQ09PUF9KQ19OT1RFX0xFRCB8IFwKLQkJVE9TQV9TQ09PUF9KQ19DSFJHX0VSUl9MRUQgfCBUT1NBX1NDT09QX0pDX1VTQl9QVUxMVVAgfCBcCisjZGVmaW5lIFRPU0FfU0NPT1BfSkNfSU9fRElSICggXAogCQlUT1NBX1NDT09QX0pDX1RDNjM5M19TVVNQRU5EIHwgVE9TQV9TQ09PUF9KQ19UQzM2OTNfTDNWX09OIHwgXAotCQlUT1NBX1NDT09QX0pDX1dMQU5fTEVEIHwgVE9TQV9TQ09PUF9KQ19DQVJEX0xJTUlUX1NFTCApCi0vKiBHUElPIG91dCBwdXQgbGV2ZWwgd2hlbiBpbml0ICAgMTogSGkgKi8KLSNkZWZpbmUgVE9TQV9TQ09PUF9KQ19JT19PVVQgKCAwICkKKwkJVE9TQV9TQ09PUF9KQ19DQVJEX0xJTUlUX1NFTCApCiAKIC8qCiAgKiBUaW1pbmcgR2VuZXJhdG9yCkBAIC03NCwxNSArNzMsNiBAQAogI2RlZmluZSBUR19IUE9TQ1RMIAkJCTB4MDcKIAogLyoKLSAqIExFRAotICovCi0jZGVmaW5lIFRPU0FfU0NPT1BfTEVEX0JMVUUgICAJCVRPU0FfU0NPT1BfR1BDUl9QQTExCi0jZGVmaW5lIFRPU0FfU0NPT1BfTEVEX0dSRUVOICAJCVRPU0FfU0NPT1BfR1BDUl9QQTEyCi0jZGVmaW5lIFRPU0FfU0NPT1BfTEVEX09SQU5HRQkJVE9TQV9TQ09PUF9HUENSX1BBMTMKLSNkZWZpbmUgVE9TQV9TQ09PUF9MRURfV0xBTgkJVE9TQV9TQ09PUF9HUENSX1BBMTgKLQotCi0vKgogICogUFhBIEdQSU9zCiAgKi8KICNkZWZpbmUgVE9TQV9HUElPX1BPV0VST04JCSgwKQpAQCAtMTYxLDEyICsxNTEsOCBAQAogCiAjZGVmaW5lIFRPU0FfSVJRX0dQSU9fTUFJTl9CQVRfTE9XIAlJUlFfR1BJTyhUT1NBX0dQSU9fTUFJTl9CQVRfTE9XKQogCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB0b3Nhc2Nvb3BfamNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG9zYXNjb29wX2RldmljZTsKLQogI2RlZmluZSBUT1NBX0tFWV9TWU5DCQlLRVlfMTAyTkQgLyogPz8/ICovCiAKLQogI2lmbmRlZiBDT05GSUdfS0VZQk9BUkRfVE9TQV9VU0VfRVhUX0tFWUNPREVTCiAjZGVmaW5lIFRPU0FfS0VZX1JFQ09SRAkJS0VZX1lFTgogI2RlZmluZSBUT1NBX0tFWV9BRERSRVNTQk9PSwlLRVlfS0FUQUtBTkEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS96eWxvbml0ZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3p5bG9uaXRlLmgKaW5kZXggNWY3MTdkNi4uNDg4MWI4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3p5bG9uaXRlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3p5bG9uaXRlLmgKQEAgLTE4LDYgKzE4LDggQEAKIGV4dGVybiBpbnQgZ3Bpb19iYWNrbGlnaHQ7CiBleHRlcm4gaW50IGdwaW9fZXRoX2lycTsKIAorZXh0ZXJuIGludCB3bTk3MTNfaXJxOworCiBleHRlcm4gaW50IGxjZF9pZDsKIGV4dGVybiBpbnQgbGNkX29yaWVudGF0aW9uOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9ib2FyZC1lYi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvYm9hcmQtZWIuaAppbmRleCAzZTQzN2I3Li4yMDZmN2E3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9ib2FyZC1lYi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2JvYXJkLWViLmgKQEAgLTI2LDYgKzI2LDI2IEBACiAvKgogICogUmVhbFZpZXcgRUIgKyBBUk0xMU1QQ29yZSBwZXJpcGhlcmFsIGFkZHJlc3NlcwogICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UJCTB4MTAwMDkwMDAJLyogVUFSVCAwICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1VBUlQxX0JBU0UJCTB4MTAwMEEwMDAJLyogVUFSVCAxICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1VBUlQyX0JBU0UJCTB4MTAwMEIwMDAJLyogVUFSVCAyICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1VBUlQzX0JBU0UJCTB4MTAwMEMwMDAJLyogVUFSVCAzICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1NTUF9CQVNFCQkweDEwMDBEMDAwCS8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0ICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1dBVENIRE9HX0JBU0UJMHgxMDAxMDAwMAkvKiB3YXRjaGRvZyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUkVBTFZJRVdfRUJfVElNRVIwXzFfQkFTRQkweDEwMDExMDAwCS8qIFRpbWVyIDAgYW5kIDEgKi8KKyNkZWZpbmUgUkVBTFZJRVdfRUJfVElNRVIyXzNfQkFTRQkweDEwMDEyMDAwCS8qIFRpbWVyIDIgYW5kIDMgKi8KKyNkZWZpbmUgUkVBTFZJRVdfRUJfR1BJTzBfQkFTRQkJMHgxMDAxMzAwMAkvKiBHUElPIHBvcnQgMCAqLworI2RlZmluZSBSRUFMVklFV19FQl9SVENfQkFTRQkJMHgxMDAxNzAwMAkvKiBSZWFsIFRpbWUgQ2xvY2sgKi8KKyNkZWZpbmUgUkVBTFZJRVdfRUJfQ0xDRF9CQVNFCQkweDEwMDIwMDAwCS8qIENMQ0QgKi8KKyNkZWZpbmUgUkVBTFZJRVdfRUJfR0lDX0NQVV9CQVNFCTB4MTAwNDAwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBDUFUgaW50ZXJmYWNlICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX0dJQ19ESVNUX0JBU0UJMHgxMDA0MTAwMAkvKiBHZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyIGRpc3RyaWJ1dG9yICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1NNQ19CQVNFCQkweDEwMDgwMDAwCS8qIFN0YXRpYyBtZW1vcnkgY29udHJvbGxlciAqLworCisjZGVmaW5lIFJFQUxWSUVXX0VCX0ZMQVNIX0JBU0UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUkVBTFZJRVdfRUJfRkxBU0hfU0laRQkJU1pfNjRNCisjZGVmaW5lIFJFQUxWSUVXX0VCX0VUSF9CQVNFCQkweDRFMDAwMDAwCS8qIEV0aGVybmV0ICovCisjZGVmaW5lIFJFQUxWSUVXX0VCX1VTQl9CQVNFCQkweDRGMDAwMDAwCS8qIFVTQiAqLworCiAjaWZkZWYgQ09ORklHX1JFQUxWSUVXX0VCX0FSTTExTVBfUkVWQgogI2RlZmluZSBSRUFMVklFV19FQjExTVBfU0NVX0JBU0UJMHgxMDEwMDAwMAkvKiBTQ1UgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFJFQUxWSUVXX0VCMTFNUF9HSUNfQ1BVX0JBU0UJMHgxMDEwMDEwMAkvKiBHZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyIENQVSBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2JvYXJkLXBiMTE3Ni5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvYm9hcmQtcGIxMTc2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjZTljOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2JvYXJkLXBiMTE3Ni5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvYm9hcmQtcGIxMTc2LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0JPQVJEX1BCMTE3Nl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMTc2X0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKKy8qCisgKiBQZXJpcGhlcmFsIGFkZHJlc3NlcworICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9TQ1RMX0JBU0UJCTB4MTAxMDAwMDAgLyogU3lzdGVtIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NNQ19CQVNFCQkweDEwMTExMDAwIC8qIFNNQyAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfRE1DX0JBU0UJCTB4MTAxMDkwMDAgLyogRE1DIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NEUkFNNjdfQkFTRQkJMHg3MDAwMDAwMCAvKiBTRFJBTSBiYW5rcyA2IGFuZCA3ICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9GTEFTSF9CQVNFCQkweDMwMDAwMDAwCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9GTEFTSF9TSVpFCQlTWl82NE0KKworI2RlZmluZSBSRUFMVklFV19QQjExNzZfVElNRVIwXzFfQkFTRQkJMHgxMDEwNDAwMCAvKiBUaW1lciAwIGFuZCAxICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9USU1FUjJfM19CQVNFCQkweDEwMTA1MDAwIC8qIFRpbWVyIDIgYW5kIDMgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1RJTUVSNF81X0JBU0UJCTB4MTAxMDYwMDAgLyogVGltZXIgNCBhbmQgNSAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfV0FUQ0hET0dfQkFTRQkJMHgxMDEwNzAwMCAvKiB3YXRjaGRvZyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1JUQ19CQVNFCQkweDEwMTA4MDAwIC8qIFJlYWwgVGltZSBDbG9jayAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfR1BJTzBfQkFTRQkJMHgxMDEwQTAwMCAvKiBHUElPIHBvcnQgMCAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfU1NQX0JBU0UJCTB4MTAxMEIwMDAgLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UJCTB4MTAxMEMwMDAgLyogVUFSVCAwICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9VQVJUMV9CQVNFCQkweDEwMTBEMDAwIC8qIFVBUlQgMSAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfVUFSVDJfQkFTRQkJMHgxMDEwRTAwMCAvKiBVQVJUIDIgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1VBUlQzX0JBU0UJCTB4MTAxMEYwMDAgLyogVUFSVCAzICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9DTENEX0JBU0UJCTB4MTAxMTIwMDAgLyogQ0xDRCAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfRVRIX0JBU0UJCTB4M0EwMDAwMDAgLyogRXRoZXJuZXQgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1VTQl9CQVNFCQkweDNCMDAwMDAwIC8qIFVTQiAqLworCisvKgorICogUENJIHJlZ2lvbnMKKyAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfUENJX0JBU0UJCTB4NjAwMDAwMDAgLyogUENJIHNlbGYgY29uZmlnICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9QQ0lfQ0ZHX0JBU0UJCTB4NjEwMDAwMDAgLyogUENJIGNvbmZpZyAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfUENJX0lPX0JBU0UwCQkweDYyMDAwMDAwIC8qIFBDSSBJTyByZWdpb24gKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1BDSV9NRU1fQkFTRTAJCTB4NjMwMDAwMDAgLyogTWVtb3J5IHJlZ2lvbiAxICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9QQ0lfTUVNX0JBU0UxCQkweDY0MDAwMDAwIC8qIE1lbW9yeSByZWdpb24gMiAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfUENJX01FTV9CQVNFMgkJMHg2ODAwMDAwMCAvKiBNZW1vcnkgcmVnaW9uIDMgKi8KKworI2RlZmluZSBSRUFMVklFV19QQjExNzZfUENJX0JBU0VfU0laRQkJMHgwMTAwMDAwMCAvKiAxNk1CICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9QQ0lfQ0ZHX0JBU0VfU0laRQkweDAxMDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1BDSV9JT19CQVNFMF9TSVpFCTB4MDEwMDAwMDAgLyogMTZNQiAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfUENJX01FTV9CQVNFMF9TSVpFCTB4MDEwMDAwMDAgLyogMTZNQiAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfUENJX01FTV9CQVNFMV9TSVpFCTB4MDQwMDAwMDAgLyogNjRNQiAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfUENJX01FTV9CQVNFMl9TSVpFCTB4MDgwMDAwMDAgLyogMTI4TUIgKi8KKworI2RlZmluZSBSRUFMVklFV19EQzExNzZfR0lDX0NQVV9CQVNFCQkweDEwMTIwMDAwIC8qIEdJQyBDUFUgaW50ZXJmYWNlLCBvbiBkZXZjaGlwICovCisjZGVmaW5lIFJFQUxWSUVXX0RDMTE3Nl9HSUNfRElTVF9CQVNFCQkweDEwMTIxMDAwIC8qIEdJQyBkaXN0cmlidXRvciwgb24gZGV2Y2hpcCAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfR0lDX0NQVV9CQVNFCQkweDEwMDQwMDAwIC8qIEdJQyBDUFUgaW50ZXJmYWNlLCBvbiBGUEdBICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9HSUNfRElTVF9CQVNFCQkweDEwMDQxMDAwIC8qIEdJQyBkaXN0cmlidXRvciwgb24gRlBHQSAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfTDIyMF9CQVNFCQkweDEwMTEwMDAwIC8qIEwyMjAgcmVnaXN0ZXJzICovCisKKy8qCisgKiBJcnFzCisgKi8KKyNkZWZpbmUgSVJRX0RDMTE3Nl9HSUNfU1RBUlQJCQkzMgorI2RlZmluZSBJUlFfUEIxMTc2X0dJQ19TVEFSVAkJCTY0CisKKy8qCisgKiBBUk0xMTc2IERldkNoaXAgaW50ZXJydXB0IHNvdXJjZXMgKHByaW1hcnkgR0lDKQorICovCisjZGVmaW5lIElSUV9EQzExNzZfV0FUQ0hET0cJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMCkJLyogV2F0Y2hkb2cgdGltZXIgKi8KKyNkZWZpbmUgSVJRX0RDMTE3Nl9TT0ZUSU5UCShJUlFfREMxMTc2X0dJQ19TVEFSVCArIDEpCS8qIFNvZnR3YXJlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfREMxMTc2X0NPTU1SeAkoSVJRX0RDMTE3Nl9HSUNfU1RBUlQgKyAyKQkvKiBEZWJ1ZyBDb21tIFJ4IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfREMxMTc2X0NPTU1UeAkoSVJRX0RDMTE3Nl9HSUNfU1RBUlQgKyAzKQkvKiBEZWJ1ZyBDb21tIFR4IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfREMxMTc2X1RJTUVSMAkoSVJRX0RDMTE3Nl9HSUNfU1RBUlQgKyA4KQkvKiBUaW1lciAwICovCisjZGVmaW5lIElSUV9EQzExNzZfVElNRVIxCShJUlFfREMxMTc2X0dJQ19TVEFSVCArIDkpCS8qIFRpbWVyIDEgKi8KKyNkZWZpbmUgSVJRX0RDMTE3Nl9USU1FUjIJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTApCS8qIFRpbWVyIDIgKi8KKyNkZWZpbmUgSVJRX0RDMTE3Nl9BUEMJCShJUlFfREMxMTc2X0dJQ19TVEFSVCArIDExKQorI2RlZmluZSBJUlFfREMxMTc2X0lFQwkJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTIpCisjZGVmaW5lIElSUV9EQzExNzZfTDJDQwkJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTMpCisjZGVmaW5lIElSUV9EQzExNzZfUlRDCQkoSVJRX0RDMTE3Nl9HSUNfU1RBUlQgKyAxNCkKKyNkZWZpbmUgSVJRX0RDMTE3Nl9DTENECQkoSVJRX0RDMTE3Nl9HSUNfU1RBUlQgKyAxNSkJLyogQ0xDRCBjb250cm9sbGVyICovCisjZGVmaW5lIElSUV9EQzExNzZfVUFSVDAJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTgpCS8qIFVBUlQgMCBvbiBkZXZlbG9wbWVudCBjaGlwICovCisjZGVmaW5lIElSUV9EQzExNzZfVUFSVDEJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMTkpCS8qIFVBUlQgMSBvbiBkZXZlbG9wbWVudCBjaGlwICovCisjZGVmaW5lIElSUV9EQzExNzZfVUFSVDIJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMjApCS8qIFVBUlQgMiBvbiBkZXZlbG9wbWVudCBjaGlwICovCisjZGVmaW5lIElSUV9EQzExNzZfVUFSVDMJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMjEpCS8qIFVBUlQgMyBvbiBkZXZlbG9wbWVudCBjaGlwICovCisKKyNkZWZpbmUgSVJRX0RDMTE3Nl9QQl9JUlEyCShJUlFfREMxMTc2X0dJQ19TVEFSVCArIDMwKQkvKiB0aWxlIEdJQyAqLworI2RlZmluZSBJUlFfREMxMTc2X1BCX0lSUTEJKElSUV9EQzExNzZfR0lDX1NUQVJUICsgMzEpCS8qIG1haW4gR0lDICovCisKKy8qCisgKiBSZWFsVmlldyBQQjExNzYgaW50ZXJydXB0IHNvdXJjZXMgKHNlY29uZGFyeSBHSUMpCisgKi8KKyNkZWZpbmUgSVJRX1BCMTE3Nl9NTUNJMEEJKElSUV9QQjExNzZfR0lDX1NUQVJUICsgMSkJLyogTXVsdGltZWRpYSBDYXJkIDBBICovCisjZGVmaW5lIElSUV9QQjExNzZfTU1DSTBCCShJUlFfUEIxMTc2X0dJQ19TVEFSVCArIDIpCS8qIE11bHRpbWVkaWEgQ2FyZCAwQSAqLworI2RlZmluZSBJUlFfUEIxMTc2X0tNSTAJCShJUlFfUEIxMTc2X0dJQ19TVEFSVCArIDMpCS8qIEtleWJvYXJkL01vdXNlIHBvcnQgMCAqLworI2RlZmluZSBJUlFfUEIxMTc2X0tNSTEJCShJUlFfUEIxMTc2X0dJQ19TVEFSVCArIDQpCS8qIEtleWJvYXJkL01vdXNlIHBvcnQgMSAqLworI2RlZmluZSBJUlFfUEIxMTc2X1NDSQkJKElSUV9QQjExNzZfR0lDX1NUQVJUICsgNSkKKyNkZWZpbmUgSVJRX1BCMTE3Nl9VQVJUNAkoSVJRX1BCMTE3Nl9HSUNfU1RBUlQgKyA2KQkvKiBVQVJUIDQgb24gYmFzZWJvYXJkICovCisjZGVmaW5lIElSUV9QQjExNzZfQ0hBUkxDRAkoSVJRX1BCMTE3Nl9HSUNfU1RBUlQgKyA3KQkvKiBDaGFyYWN0ZXIgTENEICovCisjZGVmaW5lIElSUV9QQjExNzZfR1BJTzEJKElSUV9QQjExNzZfR0lDX1NUQVJUICsgOCkKKyNkZWZpbmUgSVJRX1BCMTE3Nl9HUElPMgkoSVJRX1BCMTE3Nl9HSUNfU1RBUlQgKyA5KQorI2RlZmluZSBJUlFfUEIxMTc2X0VUSAkJKElSUV9QQjExNzZfR0lDX1NUQVJUICsgMTApCS8qIEV0aGVybmV0IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1BCMTE3Nl9VU0IJCShJUlFfUEIxMTc2X0dJQ19TVEFSVCArIDExKQkvKiBVU0IgY29udHJvbGxlciAqLworCisjZGVmaW5lIElSUV9QQjExNzZfUElTTU8JKElSUV9QQjExNzZfR0lDX1NUQVJUICsgMTYpCisKKyNkZWZpbmUgSVJRX1BCMTE3Nl9BQUNJCQkoSVJRX1BCMTE3Nl9HSUNfU1RBUlQgKyAxOSkJLyogQXVkaW8gQ29kZWMgKi8KKworI2RlZmluZSBJUlFfUEIxMTc2X1RJTUVSMF8xCShJUlFfUEIxMTc2X0dJQ19TVEFSVCArIDIyKQorI2RlZmluZSBJUlFfUEIxMTc2X1RJTUVSMl8zCShJUlFfUEIxMTc2X0dJQ19TVEFSVCArIDIzKQorI2RlZmluZSBJUlFfUEIxMTc2X0RNQUMJCShJUlFfUEIxMTc2X0dJQ19TVEFSVCArIDI0KQkvKiBETUEgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfUEIxMTc2X1JUQwkJKElSUV9QQjExNzZfR0lDX1NUQVJUICsgMjUpCS8qIFJlYWwgVGltZSBDbG9jayAqLworCisjZGVmaW5lIElSUV9QQjExNzZfR1BJTzAJLTEKKyNkZWZpbmUgSVJRX1BCMTE3Nl9TU1AJCS0xCisjZGVmaW5lIElSUV9QQjExNzZfU0NUTAkJLTEKKworI2RlZmluZSBOUl9HSUNfUEIxMTc2CQkyCisKKy8qCisgKiBPbmx5IGRlZmluZSBOUl9JUlFTIGlmIGxlc3MgdGhhbiBOUl9JUlFTX1BCMTE3NgorICovCisjZGVmaW5lIE5SX0lSUVNfUEIxMTc2CQkoSVJRX0RDMTE3Nl9HSUNfU1RBUlQgKyA5NikKKworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMTc2KQorCisjaWYgIWRlZmluZWQoTlJfSVJRUykgfHwgKE5SX0lSUVMgPCBOUl9JUlFTX1BCMTE3NikKKyN1bmRlZiBOUl9JUlFTCisjZGVmaW5lIE5SX0lSUVMJCQlOUl9JUlFTX1BCMTE3NgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQVhfR0lDX05SKSB8fCAoTUFYX0dJQ19OUiA8IE5SX0dJQ19QQjExNzYpCisjdW5kZWYgTUFYX0dJQ19OUgorI2RlZmluZSBNQVhfR0lDX05SCQlOUl9HSUNfUEIxMTc2CisjZW5kaWYKKworI2VuZGlmCS8qIENPTkZJR19NQUNIX1JFQUxWSUVXX1BCMTE3NiAqLworCisjZW5kaWYJLyogX19BU01fQVJDSF9CT0FSRF9QQjExNzZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvYm9hcmQtcGIxMW1wLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9ib2FyZC1wYjExbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI5NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvYm9hcmQtcGIxMW1wLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9ib2FyZC1wYjExbXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMU1QX0gKKyNkZWZpbmUgX19BU01fQVJDSF9CT0FSRF9QQjExTVBfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KKworLyoKKyAqIFBlcmlwaGVyYWwgYWRkcmVzc2VzCisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UJCTB4MTAwMDkwMDAJLyogVUFSVCAwICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9VQVJUMV9CQVNFCQkweDEwMDBBMDAwCS8qIFVBUlQgMSAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfVUFSVDJfQkFTRQkJMHgxMDAwQjAwMAkvKiBVQVJUIDIgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1VBUlQzX0JBU0UJCTB4MTAwMEMwMDAJLyogVUFSVCAzICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TU1BfQkFTRQkJMHgxMDAwRDAwMAkvKiBTeW5jaHJvbm91cyBTZXJpYWwgUG9ydCAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfV0FUQ0hET0cwX0JBU0UJCTB4MTAwMEYwMDAJLyogV2F0Y2hkb2cgMCAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfV0FUQ0hET0dfQkFTRQkJMHgxMDAxMDAwMAkvKiB3YXRjaGRvZyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1RJTUVSMF8xX0JBU0UJCTB4MTAwMTEwMDAJLyogVGltZXIgMCBhbmQgMSAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfVElNRVIyXzNfQkFTRQkJMHgxMDAxMjAwMAkvKiBUaW1lciAyIGFuZCAzICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9HUElPMF9CQVNFCQkweDEwMDEzMDAwCS8qIEdQSU8gcG9ydCAwICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9SVENfQkFTRQkJMHgxMDAxNzAwMAkvKiBSZWFsIFRpbWUgQ2xvY2sgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1RJTUVSNF81X0JBU0UJCTB4MTAwMTgwMDAJLyogVGltZXIgNC81ICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9USU1FUjZfN19CQVNFCQkweDEwMDE5MDAwCS8qIFRpbWVyIDYvNyAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU0NUTF9CQVNFCQkweDEwMDFBMDAwCS8qIFN5c3RlbSBDb250cm9sbGVyICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9DTENEX0JBU0UJCTB4MTAwMjAwMDAJLyogQ0xDRCAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfT05CX1NSQU1fQkFTRQkJMHgxMDA2MDAwMAkvKiBPbi1ib2FyZCBTUkFNICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9ETUNfQkFTRQkJMHgxMDBFMDAwMAkvKiBETUMgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU01DX0JBU0UJCTB4MTAwRTEwMDAJLyogU01DIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX0NBTl9CQVNFCQkweDEwMEUyMDAwCS8qIENBTiBidXMgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX0NGX0JBU0UJCQkweDE4MDAwMDAwCS8qIENvbXBhY3QgZmxhc2ggKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX0NGX01FTV9CQVNFCQkweDE4MDAzMDAwCS8qIFNNQyBmb3IgQ29tcGFjdCBmbGFzaCAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfR0lDX0NQVV9CQVNFCQkweDFFMDAwMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgQ1BVIGludGVyZmFjZSAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfRkxBU0gwX0JBU0UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX0ZMQVNIMF9TSVpFCQlTWl82NE0KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX0ZMQVNIMV9CQVNFCQkweDQ0MDAwMDAwCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9GTEFTSDFfU0laRQkJU1pfNjRNCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9FVEhfQkFTRQkJMHg0RTAwMDAwMAkvKiBFdGhlcm5ldCAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfVVNCX0JBU0UJCTB4NEYwMDAwMDAJLyogVVNCICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9HSUNfRElTVF9CQVNFCQkweDFFMDAxMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX0xUX0JBU0UJCQkweEMwMDAwMDAwCS8qIExvZ2ljIFRpbGUgZXhwYW5zaW9uICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TRFJBTTZfQkFTRQkJMHg3MDAwMDAwMAkvKiBTRFJBTSBiYW5rIDYgMjU2TUIgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NEUkFNN19CQVNFCQkweDgwMDAwMDAwCS8qIFNEUkFNIGJhbmsgNyAyNTZNQiAqLworCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfUExEX0NUUkwxCQkweDc0CisKKy8qCisgKiBQQjExTVBDb3JlIFBDSSByZWdpb25zCisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1BDSV9CQVNFCQkweDkwMDQwMDAwCS8qIFBDSS1YIFVuaXQgYmFzZSAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfUENJX0lPX0JBU0UJCTB4OTAwNTAwMDAJLyogSU8gUmVnaW9uIG9uIEFIQiAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfUENJX01FTV9CQVNFCQkweEEwMDAwMDAwCS8qIE1FTSBSZWdpb24gb24gQUhCICovCisKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1BDSV9CQVNFX1NJWkUJCTB4MTAwMDAJCS8qIDE2IEtiICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9QQ0lfSU9fU0laRQkJMHgxMDAwCQkvKiA0IEtiICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9QQ0lfTUVNX1NJWkUJCTB4MjAwMDAwMDAJLyogNTEyIE1CICovCisKKy8qCisgKiBUZXN0Y2hpcCBwZXJpcGhlcmFsIGFuZCBmcGdhIGdpYyByZWdpb25zCisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX1NDVV9CQVNFCQkweDFGMDAwMDAwCS8qIElSUSwgVGVzdCBjaGlwICovCisjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9HSUNfQ1BVX0JBU0UJCTB4MUYwMDAxMDAJLyogVGVzdCBjaGlwIGludGVycnVwdCBjb250cm9sbGVyIENQVSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX1RXRF9CQVNFCQkweDFGMDAwNzAwCisjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9UV0RfU0laRQkJMHgwMDAwMDEwMAorI2RlZmluZSBSRUFMVklFV19UQzExTVBfR0lDX0RJU1RfQkFTRQkJMHgxRjAwMTAwMAkvKiBUZXN0IGNoaXAgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KKyNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX0wyMjBfQkFTRQkJMHgxRjAwMjAwMAkvKiBMMjIwIHJlZ2lzdGVycyAqLworCisvKgorICogSXJxcworICovCisjZGVmaW5lIElSUV9UQzExTVBfR0lDX1NUQVJUCQkJMzIKKyNkZWZpbmUgSVJRX1BCMTFNUF9HSUNfU1RBUlQJCQk2NAorCisvKgorICogQVJNMTFNUENvcmUgdGVzdCBjaGlwIGludGVycnVwdCBzb3VyY2VzIChwcmltYXJ5IEdJQyBvbiB0aGUgdGVzdCBjaGlwKQorICovCisjZGVmaW5lIElSUV9UQzExTVBfQUFDSQkJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMCkKKyNkZWZpbmUgSVJRX1RDMTFNUF9USU1FUjBfMQkoSVJRX1RDMTFNUF9HSUNfU1RBUlQgKyAxKQorI2RlZmluZSBJUlFfVEMxMU1QX1RJTUVSMl8zCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDIpCisjZGVmaW5lIElSUV9UQzExTVBfVVNCCQkoSVJRX1RDMTFNUF9HSUNfU1RBUlQgKyAzKQorI2RlZmluZSBJUlFfVEMxMU1QX1VBUlQwCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDQpCisjZGVmaW5lIElSUV9UQzExTVBfVUFSVDEJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgNSkKKyNkZWZpbmUgSVJRX1RDMTFNUF9SVEMJCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDYpCisjZGVmaW5lIElSUV9UQzExTVBfS01JMAkJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgNykKKyNkZWZpbmUgSVJRX1RDMTFNUF9LTUkxCQkoSVJRX1RDMTFNUF9HSUNfU1RBUlQgKyA4KQorI2RlZmluZSBJUlFfVEMxMU1QX0VUSAkJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgOSkKKyNkZWZpbmUgSVJRX1RDMTFNUF9QQl9JUlExCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDEwKQkJLyogbWFpbiBHSUMgKi8KKyNkZWZpbmUgSVJRX1RDMTFNUF9QQl9JUlEyCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDExKQkJLyogdGlsZSBHSUMgKi8KKyNkZWZpbmUgSVJRX1RDMTFNUF9QQl9GSVExCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDEyKQkJLyogbWFpbiBHSUMgKi8KKyNkZWZpbmUgSVJRX1RDMTFNUF9QQl9GSVEyCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDEzKQkJLyogdGlsZSBHSUMgKi8KKyNkZWZpbmUgSVJRX1RDMTFNUF9NTUNJMEEJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMTQpCisjZGVmaW5lIElSUV9UQzExTVBfTU1DSTBCCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDE1KQorCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX0NQVTAJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMTcpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX0NQVTEJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMTgpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX0NQVTIJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMTkpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX0NQVTMJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjApCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTAJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjEpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTEJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjIpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTIJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjMpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTMJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjQpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTQJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjUpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTUJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjYpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTYJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjcpCisjZGVmaW5lIElSUV9UQzExTVBfUE1VX1NDVTcJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMjgpCisKKyNkZWZpbmUgSVJRX1RDMTFNUF9MMjIwX0VWRU5UCShJUlFfVEMxMU1QX0dJQ19TVEFSVCArIDI5KQorI2RlZmluZSBJUlFfVEMxMU1QX0wyMjBfU0xBVkUJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMzApCisjZGVmaW5lIElSUV9UQzExTVBfTDIyMF9ERUNPREUJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgMzEpCisKKy8qCisgKiBSZWFsVmlldyBQQjExTVBDb3JlIEdJQyBpbnRlcnJ1cHQgc291cmNlcyAoc2Vjb25kYXJ5IEdJQyBvbiB0aGUgYm9hcmQpCisgKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9XQVRDSERPRwkoSVJRX1BCMTFNUF9HSUNfU1RBUlQgKyAwKQkvKiBXYXRjaGRvZyB0aW1lciAqLworI2RlZmluZSBJUlFfUEIxMU1QX1NPRlQJCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDEpCS8qIFNvZnR3YXJlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfUEIxMU1QX0NPTU1SeAkoSVJRX1BCMTFNUF9HSUNfU1RBUlQgKyAyKQkvKiBEZWJ1ZyBDb21tIFJ4IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfUEIxMU1QX0NPTU1UeAkoSVJRX1BCMTFNUF9HSUNfU1RBUlQgKyAzKQkvKiBEZWJ1ZyBDb21tIFR4IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfUEIxMU1QX0dQSU8wCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDYpCS8qIEdQSU8gMCAqLworI2RlZmluZSBJUlFfUEIxMU1QX0dQSU8xCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDcpCS8qIEdQSU8gMSAqLworI2RlZmluZSBJUlFfUEIxMU1QX0dQSU8yCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDgpCS8qIEdQSU8gMiAqLworCQkJCQkJCQkvKiA5IHJlc2VydmVkICovCisjZGVmaW5lIElSUV9QQjExTVBfUlRDX0dJQzEJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMTApCS8qIFJlYWwgVGltZSBDbG9jayAqLworI2RlZmluZSBJUlFfUEIxMU1QX1NTUAkJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMTEpCS8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0ICovCisjZGVmaW5lIElSUV9QQjExTVBfVUFSVDBfR0lDMQkoSVJRX1BCMTFNUF9HSUNfU1RBUlQgKyAxMikJLyogVUFSVCAwIG9uIGRldmVsb3BtZW50IGNoaXAgKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9VQVJUMV9HSUMxCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDEzKQkvKiBVQVJUIDEgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJUlFfUEIxMU1QX1VBUlQyCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDE0KQkvKiBVQVJUIDIgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJUlFfUEIxMU1QX1VBUlQzCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDE1KQkvKiBVQVJUIDMgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJUlFfUEIxMU1QX1NDSQkJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMTYpCS8qIFNtYXJ0IENhcmQgSW50ZXJmYWNlICovCisjZGVmaW5lIElSUV9QQjExTVBfTU1DSTBBX0dJQzEJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMTcpCS8qIE11bHRpbWVkaWEgQ2FyZCAwQSAqLworI2RlZmluZSBJUlFfUEIxMU1QX01NQ0kwQl9HSUMxCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDE4KQkvKiBNdWx0aW1lZGlhIENhcmQgMEIgKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9BQUNJX0dJQzEJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMTkpCS8qIEF1ZGlvIENvZGVjICovCisjZGVmaW5lIElSUV9QQjExTVBfS01JMF9HSUMxCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDIwKQkvKiBLZXlib2FyZC9Nb3VzZSBwb3J0IDAgKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9LTUkxX0dJQzEJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMjEpCS8qIEtleWJvYXJkL01vdXNlIHBvcnQgMSAqLworI2RlZmluZSBJUlFfUEIxMU1QX0NIQVJMQ0QJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMjIpCS8qIENoYXJhY3RlciBMQ0QgKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9DTENECQkoSVJRX1BCMTFNUF9HSUNfU1RBUlQgKyAyMykJLyogQ0xDRCBjb250cm9sbGVyICovCisjZGVmaW5lIElSUV9QQjExTVBfRE1BQwkJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMjQpCS8qIERNQSBjb250cm9sbGVyICovCisjZGVmaW5lIElSUV9QQjExTVBfUFdSRkFJTAkoSVJRX1BCMTFNUF9HSUNfU1RBUlQgKyAyNSkJLyogUG93ZXIgZmFpbHVyZSAqLworI2RlZmluZSBJUlFfUEIxMU1QX1BJU01PCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDI2KQkvKiBQSVNNTyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9Eb0MJCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDI3KQkvKiBEaXNrIG9uIENoaXAgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9FVEhfR0lDMQkoSVJRX1BCMTFNUF9HSUNfU1RBUlQgKyAyOCkJLyogRXRoZXJuZXQgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfUEIxMU1QX1VTQl9HSUMxCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDI5KQkvKiBVU0IgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfUEIxMU1QX1RTUEVOCShJUlFfUEIxMU1QX0dJQ19TVEFSVCArIDMwKQkvKiBUb3VjaHNjcmVlbiBwZW4gKi8KKyNkZWZpbmUgSVJRX1BCMTFNUF9UU0tQQUQJKElSUV9QQjExTVBfR0lDX1NUQVJUICsgMzEpCS8qIFRvdWNoc2NyZWVuIGtleXBhZCAqLworCisjZGVmaW5lIElSUV9QQjExTVBfU01DCQktMQorI2RlZmluZSBJUlFfUEIxMU1QX1NDVEwJCS0xCisKKyNkZWZpbmUgTlJfR0lDX1BCMTFNUAkJMgorCisvKgorICogT25seSBkZWZpbmUgTlJfSVJRUyBpZiBsZXNzIHRoYW4gTlJfSVJRU19QQjExTVAKKyAqLworI2RlZmluZSBOUl9JUlFTX1BCMTFNUAkJKElSUV9UQzExTVBfR0lDX1NUQVJUICsgOTYpCisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1JFQUxWSUVXX1BCMTFNUCkKKworI2lmICFkZWZpbmVkKE5SX0lSUVMpIHx8IChOUl9JUlFTIDwgTlJfSVJRU19QQjExTVApCisjdW5kZWYgTlJfSVJRUworI2RlZmluZSBOUl9JUlFTCQkJTlJfSVJRU19QQjExTVAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUFYX0dJQ19OUikgfHwgKE1BWF9HSUNfTlIgPCBOUl9HSUNfUEIxMU1QKQorI3VuZGVmIE1BWF9HSUNfTlIKKyNkZWZpbmUgTUFYX0dJQ19OUgkJTlJfR0lDX1BCMTFNUAorI2VuZGlmCisKKyNlbmRpZgkvKiBDT05GSUdfTUFDSF9SRUFMVklFV19QQjExTVAgKi8KKworI2VuZGlmCS8qIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMU1QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9kZWJ1Zy1tYWNyby5TCmluZGV4IGYxN2VmYzYuLmM4Yzg2MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZGVidWctbWFjcm8uUwpAQCAtMTUsNyArMTUsNyBAQAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgICAgICAjMHgxMDAwMDAwMAotCQltb3ZuZQlccngsICAgICAgIzB4ZjEwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKKwkJbW92bmUJXHJ4LCAgICAgICMweGYwMDAwMDAwCUAgdmlydHVhbCBiYXNlCiAJCW9ycglccngsIFxyeCwgIzB4MDAwMDkwMDAKIAkJLmVuZG0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2hhcmR3YXJlLmgKaW5kZXggYmFkOGQ3Yy4uMWVlODMxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9oYXJkd2FyZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKIC8qIG1hY3JvIHRvIGdldCBhdCBJTyBzcGFjZSB3aGVuIHJ1bm5pbmcgdmlydHVhbGx5ICovCi0jZGVmaW5lIElPX0FERFJFU1MoeCkJCSgoKCh4KSAmIDB4MGVmZmZmZmYpIHwgKCgoeCkgPj4gNCkgJiAweDBmMDAwMDAwKSkgKyAweGYwMDAwMDAwKQorI2RlZmluZSBJT19BRERSRVNTKHgpCQkoKCh4KSAmIDB4MGZmZmZmZmYpICsgMHhmMDAwMDAwMCkKICNkZWZpbmUgX19pb19hZGRyZXNzKG4pCQlfX2lvKElPX0FERFJFU1MobikpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaXJxcy5oCmluZGV4IGFkMGM5MTEuLmNjYmFjNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9pcnFzLmgKQEAgLTIzLDYgKzIzLDggQEAKICNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0gKIAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLWViLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQtcGIxMW1wLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQtcGIxMTc2Lmg+CiAKICNkZWZpbmUgSVJRX0xPQ0FMVElNRVIJCTI5CiAjZGVmaW5lIElSUV9MT0NBTFdET0cJCTMwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGxhdGZvcm0uaAppbmRleCA0ZmQzNTFiLi40MjRjMGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3BsYXRmb3JtLmgKQEAgLTMyLDkgKzMyLDYgQEAKICNkZWZpbmUgUkVBTFZJRVdfU1NSQU1fQkFTRSAgICAgICAgICAgLyogUkVBTFZJRVdfU1NNQ19CQVNFID8gKi8KICNkZWZpbmUgUkVBTFZJRVdfU1NSQU1fU0laRSAgICAgICAgICAgU1pfMk0KIAotI2RlZmluZSBSRUFMVklFV19GTEFTSF9CQVNFICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFJFQUxWSUVXX0ZMQVNIX1NJWkUgICAgICAgICAgIFNaXzY0TQotCiAvKiAKICAqICBTRFJBTQogICovCkBAIC0xNzUsNDIgKzE3MiwyMCBAQAogI2RlZmluZSBSRUFMVklFV19JTlRSRUdfQ0FSRElOU0VSVCAgIDB4MDMgICAgLyogU2lnbmFsIGluc2VydGlvbiBvZiBNTUMgY2FyZCAgICAgICAgICAgICAgICAgICAqLwogCiAvKgotICogUkVBTFZJRVcgcGVyaXBoZXJhbCBhZGRyZXNzZXMKKyAqIFJlYWxWaWV3IGNvbW1vbiBwZXJpcGhlcmFsIGFkZHJlc3NlcwogICovCiAjZGVmaW5lIFJFQUxWSUVXX1NDVExfQkFTRSAgICAgICAgICAgIDB4MTAwMDEwMDAJLyogU3lzdGVtIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgUkVBTFZJRVdfSTJDX0JBU0UgICAgICAgICAgICAgMHgxMDAwMjAwMAkvKiBJMkMgY29udHJvbCAqLwotCS8qIFJlc2VydmVkIDB4MTAwMDMwMDAgKi8KICNkZWZpbmUgUkVBTFZJRVdfQUFDSV9CQVNFICAgICAgICAgICAgMHgxMDAwNDAwMAkvKiBBdWRpbyAqLwogI2RlZmluZSBSRUFMVklFV19NTUNJMF9CQVNFICAgICAgICAgICAweDEwMDA1MDAwCS8qIE1NQyBpbnRlcmZhY2UgKi8KICNkZWZpbmUgUkVBTFZJRVdfS01JMF9CQVNFICAgICAgICAgICAgMHgxMDAwNjAwMAkvKiBLTUkgaW50ZXJmYWNlICovCiAjZGVmaW5lIFJFQUxWSUVXX0tNSTFfQkFTRSAgICAgICAgICAgIDB4MTAwMDcwMDAJLyogS01JIDJuZCBpbnRlcmZhY2UgKi8KICNkZWZpbmUgUkVBTFZJRVdfQ0hBUl9MQ0RfQkFTRSAgICAgICAgMHgxMDAwODAwMAkvKiBDaGFyYWN0ZXIgTENEICovCi0jZGVmaW5lIFJFQUxWSUVXX1VBUlQwX0JBU0UgICAgICAgICAgIDB4MTAwMDkwMDAJLyogVUFSVCAwICovCi0jZGVmaW5lIFJFQUxWSUVXX1VBUlQxX0JBU0UgICAgICAgICAgIDB4MTAwMEEwMDAJLyogVUFSVCAxICovCi0jZGVmaW5lIFJFQUxWSUVXX1VBUlQyX0JBU0UgICAgICAgICAgIDB4MTAwMEIwMDAJLyogVUFSVCAyICovCi0jZGVmaW5lIFJFQUxWSUVXX1VBUlQzX0JBU0UgICAgICAgICAgIDB4MTAwMEMwMDAJLyogVUFSVCAzICovCi0jZGVmaW5lIFJFQUxWSUVXX1NTUF9CQVNFICAgICAgICAgICAgIDB4MTAwMEQwMDAJLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgKi8KICNkZWZpbmUgUkVBTFZJRVdfU0NJX0JBU0UgICAgICAgICAgICAgMHgxMDAwRTAwMAkvKiBTbWFydCBjYXJkIGNvbnRyb2xsZXIgKi8KLQkvKiBSZXNlcnZlZCAweDEwMDBGMDAwICovCi0jZGVmaW5lIFJFQUxWSUVXX1dBVENIRE9HX0JBU0UgICAgICAgIDB4MTAwMTAwMDAJLyogd2F0Y2hkb2cgaW50ZXJmYWNlICovCi0jZGVmaW5lIFJFQUxWSUVXX1RJTUVSMF8xX0JBU0UgICAgICAgIDB4MTAwMTEwMDAJLyogVGltZXIgMCBhbmQgMSAqLwotI2RlZmluZSBSRUFMVklFV19USU1FUjJfM19CQVNFICAgICAgICAweDEwMDEyMDAwCS8qIFRpbWVyIDIgYW5kIDMgKi8KLSNkZWZpbmUgUkVBTFZJRVdfR1BJTzBfQkFTRSAgICAgICAgICAgMHgxMDAxMzAwMAkvKiBHUElPIHBvcnQgMCAqLwogI2RlZmluZSBSRUFMVklFV19HUElPMV9CQVNFICAgICAgICAgICAweDEwMDE0MDAwCS8qIEdQSU8gcG9ydCAxICovCiAjZGVmaW5lIFJFQUxWSUVXX0dQSU8yX0JBU0UgICAgICAgICAgIDB4MTAwMTUwMDAJLyogR1BJTyBwb3J0IDIgKi8KLQkvKiBSZXNlcnZlZCAweDEwMDE2MDAwICovCi0jZGVmaW5lIFJFQUxWSUVXX1JUQ19CQVNFICAgICAgICAgICAgIDB4MTAwMTcwMDAJLyogUmVhbCBUaW1lIENsb2NrICovCiAjZGVmaW5lIFJFQUxWSUVXX0RNQ19CQVNFICAgICAgICAgICAgIDB4MTAwMTgwMDAJLyogRE1DIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUkVBTFZJRVdfUENJX0NPUkVfQkFTRSAgICAgICAgMHgxMDAxOTAwMAkvKiBQQ0kgY29uZmlndXJhdGlvbiAqLwotCS8qIFJlc2VydmVkIDB4MTAwMUEwMDAgLSAweDEwMDFGRkZGICovCi0jZGVmaW5lIFJFQUxWSUVXX0NMQ0RfQkFTRSAgICAgICAgICAgIDB4MTAwMjAwMDAJLyogQ0xDRCAqLwogI2RlZmluZSBSRUFMVklFV19ETUFDX0JBU0UgICAgICAgICAgICAweDEwMDMwMDAwCS8qIERNQSBjb250cm9sbGVyICovCi0jZGVmaW5lIFJFQUxWSUVXX0dJQ19DUFVfQkFTRSAgICAgICAgIDB4MTAwNDAwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBDUFUgaW50ZXJmYWNlICovCi0jZGVmaW5lIFJFQUxWSUVXX0dJQ19ESVNUX0JBU0UgICAgICAgIDB4MTAwNDEwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLwotI2RlZmluZSBSRUFMVklFV19TTUNfQkFTRSAgICAgICAgICAgICAweDEwMDgwMDAwCS8qIFNNQyAqLwotCS8qIFJlc2VydmVkIDB4MTAwOTAwMDAgLSAweDEwMEVGRkZGICovCi0KLSNkZWZpbmUgUkVBTFZJRVdfRVRIX0JBU0UgICAgICAgICAgICAgMHg0RTAwMDAwMAkvKiBFdGhlcm5ldCAqLwogCiAvKiBQQ0kgc3BhY2UgKi8KICNkZWZpbmUgUkVBTFZJRVdfUENJX0JBU0UgICAgICAgICAgICAgMHg0MTAwMDAwMAkvKiBQQ0kgSW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9zY3UuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NjdS5oCmluZGV4IDA4YjNkYjguLmQ1NTgwMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NjdS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NjdS5oCkBAIC0xLDggKzEsMTMgQEAKICNpZm5kZWYgX19BU01BUk1fQVJDSF9TQ1VfSAogI2RlZmluZSBfX0FTTUFSTV9BUkNIX1NDVV9ICiAKLSNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC1lYi5oPgotCi0jZGVmaW5lIFNDVV9CQVNFCVJFQUxWSUVXX0VCMTFNUF9TQ1VfQkFTRQorLyoKKyAqIFNDVSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBTQ1VfQ1RSTAkJMHgwMAorI2RlZmluZSBTQ1VfQ09ORklHCQkweDA0CisjZGVmaW5lIFNDVV9DUFVfU1RBVFVTCQkweDA4CisjZGVmaW5lIFNDVV9JTlZBTElEQVRFCQkweDBjCisjZGVmaW5lIFNDVV9GUEdBX1JFVklTSU9OCTB4MTAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy91bmNvbXByZXNzLmgKaW5kZXggM2Q1YzJkYi4uNGM5MDVkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3VuY29tcHJlc3MuaApAQCAtMTgsMjggKzE4LDUwIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC1lYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLXBiMTFtcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLXBiMTE3Ni5oPgogCi0jZGVmaW5lIEFNQkFfVUFSVF9EUgkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChSRUFMVklFV19VQVJUMF9CQVNFICsgMHgwMCkpCi0jZGVmaW5lIEFNQkFfVUFSVF9MQ1JICSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJFQUxWSUVXX1VBUlQwX0JBU0UgKyAweDJjKSkKLSNkZWZpbmUgQU1CQV9VQVJUX0NSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJFQUxWSUVXX1VBUlQwX0JBU0UgKyAweDMwKSkKLSNkZWZpbmUgQU1CQV9VQVJUX0ZSCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFJFQUxWSUVXX1VBUlQwX0JBU0UgKyAweDE4KSkKKyNkZWZpbmUgQU1CQV9VQVJUX0RSKGJhc2UpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKGJhc2UpICsgMHgwMCkpCisjZGVmaW5lIEFNQkFfVUFSVF9MQ1JIKGJhc2UpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKGJhc2UpICsgMHgyYykpCisjZGVmaW5lIEFNQkFfVUFSVF9DUihiYXNlKQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKChiYXNlKSArIDB4MzApKQorI2RlZmluZSBBTUJBX1VBUlRfRlIoYmFzZSkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgoYmFzZSkgKyAweDE4KSkKKworLyoKKyAqIFJldHVybiB0aGUgVUFSVCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF91YXJ0X2Jhc2Uodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19yZWFsdmlld19lYigpKQorCQlyZXR1cm4gUkVBTFZJRVdfRUJfVUFSVDBfQkFTRTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X3BiMTFtcCgpKQorCQlyZXR1cm4gUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0U7CisJZWxzZSBpZiAobWFjaGluZV9pc19yZWFsdmlld19wYjExNzYoKSkKKwkJcmV0dXJuIFJFQUxWSUVXX1BCMTE3Nl9VQVJUMF9CQVNFOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CiAKIC8qCiAgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHB1dGMoaW50IGMpCiB7Ci0Jd2hpbGUgKEFNQkFfVUFSVF9GUiAmICgxIDw8IDUpKQorCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGdldF91YXJ0X2Jhc2UoKTsKKworCXdoaWxlIChBTUJBX1VBUlRfRlIoYmFzZSkgJiAoMSA8PCA1KSkKIAkJYmFycmllcigpOwogCi0JQU1CQV9VQVJUX0RSID0gYzsKKwlBTUJBX1VBUlRfRFIoYmFzZSkgPSBjOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKIHsKLQl3aGlsZSAoQU1CQV9VQVJUX0ZSICYgKDEgPDwgMykpCisJdW5zaWduZWQgbG9uZyBiYXNlID0gZ2V0X3VhcnRfYmFzZSgpOworCisJd2hpbGUgKEFNQkFfVUFSVF9GUihiYXNlKSAmICgxIDw8IDMpKQogCQliYXJyaWVyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pcnFzLmgKaW5kZXggZDg1OGIzZS4uZjU0MzVkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pcnFzLmgKQEAgLTg1LDcgKzg1LDcgQEAKICNkZWZpbmUgSVJRX0VJTlQyMyAgICAgUzNDMjQxMF9JUlEoNTEpCiAKIAotI2RlZmluZSBJUlFfRUlOVCh4KSAgICBTM0MyNDEwX0lSUSgoeCA+PSA0KSA/IChJUlFfRUlOVDQgKyAoeCkgLSA0KSA6IChTM0MyNDEwX0lSUSgwKSArICh4KSkpCisjZGVmaW5lIElSUV9FSU5UKHgpICAgICgoKHgpID49IDQpID8gKElSUV9FSU5UNCArICh4KSAtIDQpIDogKElSUV9FSU5UMCArICh4KSkpCiAKICNkZWZpbmUgSVJRX0xDRF9GSUZPICAgUzNDMjQxMF9JUlEoNTIpCiAjZGVmaW5lIElSUV9MQ0RfRlJBTUUgIFMzQzI0MTBfSVJRKDUzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaAppbmRleCBkYmE5ZGY5Li5lY2FlOWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaApAQCAtMTM3LDcgKzEzNyw3IEBACiAKICNkZWZpbmUgUzNDMjQxMl9DTEtESVZOX1BESVZOCQkoMTw8MikKICNkZWZpbmUgUzNDMjQxMl9DTEtESVZOX0hESVZOX01BU0sJKDM8PDApCi0jZGVmaW5lIFMzQzI0MjFfQ0xLRElWTl9BUk1ESVZOCQkoMTw8MykKKyNkZWZpbmUgUzNDMjQxMl9DTEtESVZOX0FSTURJVk4JCSgxPDwzKQogI2RlZmluZSBTM0MyNDEyX0NMS0RJVk5fRFZTRU4JCSgxPDw0KQogI2RlZmluZSBTM0MyNDEyX0NMS0RJVk5fSEFMRkhDTEsJKDE8PDUpCiAjZGVmaW5lIFMzQzI0MTJfQ0xLRElWTl9VU0I0OERJVgkoMTw8NikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oCmluZGV4IDBhZDc1ZDcuLjQ5N2RkMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaApAQCAtNTI5LDExICs1MjksMTMgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEQxNF9JTlAJKDB4MDAgPDwgMjgpCiAjZGVmaW5lIFMzQzI0MTBfR1BEMTRfT1VUUAkoMHgwMSA8PCAyOCkKICNkZWZpbmUgUzNDMjQxMF9HUEQxNF9WRDIyCSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0MyNDEwX0dQRDE0X25TUzEJKDB4MDMgPDwgMjgpCiAKICNkZWZpbmUgUzNDMjQxMF9HUEQxNSAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktELCAxNSkKICNkZWZpbmUgUzNDMjQxMF9HUEQxNV9JTlAJKDB4MDAgPDwgMzApCiAjZGVmaW5lIFMzQzI0MTBfR1BEMTVfT1VUUAkoMHgwMSA8PCAzMCkKICNkZWZpbmUgUzNDMjQxMF9HUEQxNV9WRDIzCSgweDAyIDw8IDMwKQorI2RlZmluZSBTM0MyNDEwX0dQRDE1X25TUzAJKDB4MDMgPDwgMzApCiAKICNkZWZpbmUgUzNDMjQxMF9HUERfUFVQRElTKHgpICAoMTw8KHgpKQogCkBAIC04MDEsMTIgKzgwMywxNCBAQAogI2RlZmluZSBTM0MyNDEwX0dQRzJfSU5QICAgICAgKDB4MDAgPDwgNCkKICNkZWZpbmUgUzNDMjQxMF9HUEcyX09VVFAgICAgICgweDAxIDw8IDQpCiAjZGVmaW5lIFMzQzI0MTBfR1BHMl9FSU5UMTAgICAoMHgwMiA8PCA0KQorI2RlZmluZSBTM0MyNDEwX0dQRzJfblNTMCAgICAgKDB4MDMgPDwgNCkKICNkZWZpbmUgUzNDMjQwMF9HUEcyX0NEQ0xLICAgICgweDAyIDw8IDQpCiAKICNkZWZpbmUgUzNDMjQxMF9HUEczICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRywgMykKICNkZWZpbmUgUzNDMjQxMF9HUEczX0lOUCAgICAgICgweDAwIDw8IDYpCiAjZGVmaW5lIFMzQzI0MTBfR1BHM19PVVRQICAgICAoMHgwMSA8PCA2KQogI2RlZmluZSBTM0MyNDEwX0dQRzNfRUlOVDExICAgKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDMjQxMF9HUEczX25TUzEgICAgICgweDAzIDw8IDYpCiAjZGVmaW5lIFMzQzI0MDBfR1BHM19JMlNTRE8gICAoMHgwMiA8PCA2KQogI2RlZmluZSBTM0MyNDAwX0dQRzNfSTJTU0RJICAgKDB4MDMgPDwgNikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXMzYzI0MTItbWVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtczNjMjQxMi1tZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGM3OTNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXMzYzI0MTItbWVtLmgKQEAgLTAsMCArMSwyOSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXMzYzI0MTItbWVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjQxMiBtZW1vcnkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyovCisKKyNpZm5kZWYgX19BU01fQVJNX1JFR1NfUzNDMjQxMl9NRU0KKyNkZWZpbmUgX19BU01fQVJNX1JFR1NfUzNDMjQxMl9NRU0KKworI2lmbmRlZiBTM0MyNDEyX01FTVJFRworI2RlZmluZSBTM0MyNDEyX01FTVJFRyh4KSAoUzNDMjRYWF9WQV9NRU1DVFJMICsgKHgpKQorI2VuZGlmCisKKyNkZWZpbmUgUzNDMjQxMl9CQU5LQ0ZHCQkJUzNDMjQxMl9NRU1SRUcoMHgwMCkKKyNkZWZpbmUgUzNDMjQxMl9CQU5LQ09OMQkJUzNDMjQxMl9NRU1SRUcoMHgwNCkKKyNkZWZpbmUgUzNDMjQxMl9CQU5LQ09OMgkJUzNDMjQxMl9NRU1SRUcoMHgwOCkKKyNkZWZpbmUgUzNDMjQxMl9CQU5LQ09OMwkJUzNDMjQxMl9NRU1SRUcoMHgwQykKKworI2RlZmluZSBTM0MyNDEyX1JFRlJFU0gJCQlTM0MyNDEyX01FTVJFRygweDEwKQorI2RlZmluZSBTM0MyNDEyX1RJTUVPVVQJCQlTM0MyNDEyX01FTVJFRygweDE0KQorCisjZW5kaWYgLyogIF9fQVNNX0FSTV9SRUdTX1MzQzI0MTJfTUVNICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zcGkuaAppbmRleCA3Y2EwZWQ5Li4zNTJkMzM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3NwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3BpLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAogc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gewogCXVuc2lnbmVkIGxvbmcJCSBwaW5fY3M7CS8qIHNpbXBsZSBncGlvIGNzICovCisJdW5zaWduZWQgaW50CQkgbnVtX2NzOwkvKiB0b3RhbCBjaGlwc2VsZWN0cyAqLwogCiAJdm9pZCAoKnNldF9jcykoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwgaW50IGNzLCBpbnQgcG9sKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS1yZXNldC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0tcmVzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjE1YmNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0tcmVzZXQuaApAQCAtMCwwICsxLDY0IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS1yZXNldC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBTeXN0ZW0gZGVmaW5lIGZvciBhcmNoX3Jlc2V0KCkgZnVuY3Rpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworZXh0ZXJuIHZvaWQgKCpzM2MyNHh4X3Jlc2V0X2hvb2spKHZvaWQpOworCitzdGF0aWMgdm9pZAorYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJc3RydWN0IGNsayAqd2R0Y2xrOworCisJaWYgKG1vZGUgPT0gJ3MnKSB7CisJCWNwdV9yZXNldCgwKTsKKwl9CisKKwlpZiAoczNjMjR4eF9yZXNldF9ob29rKQorCQlzM2MyNHh4X3Jlc2V0X2hvb2soKTsKKworCXByaW50aygiYXJjaF9yZXNldDogYXR0ZW1wdGluZyB3YXRjaGRvZyByZXNldFxuIik7CisKKwlfX3Jhd193cml0ZWwoMCwgUzNDMjQxMF9XVENPTik7CSAgLyogZGlzYWJsZSB3YXRjaGRvZywgdG8gYmUgc2FmZSAgKi8KKworCXdkdGNsayA9IGNsa19nZXQoTlVMTCwgIndhdGNoZG9nIik7CisJaWYgKCFJU19FUlIod2R0Y2xrKSkgeworCQljbGtfZW5hYmxlKHdkdGNsayk7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3YXJuaW5nOiBjYW5ub3QgZ2V0IHdhdGNoZG9nIGNsb2NrXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBwdXQgaW5pdGlhbCB2YWx1ZXMgaW50byBjb3VudCBhbmQgZGF0YSAqLworCV9fcmF3X3dyaXRlbCgweDgwLCBTM0MyNDEwX1dUQ05UKTsKKwlfX3Jhd193cml0ZWwoMHg4MCwgUzNDMjQxMF9XVERBVCk7CisKKwkvKiBzZXQgdGhlIHdhdGNoZG9nIHRvIGdvIGFuZCByZXNldC4uLiAqLworCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRXxTM0MyNDEwX1dUQ09OX0RJVjE2fFMzQzI0MTBfV1RDT05fUlNURU4gfAorCQkgICAgIFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHgyMCksIFMzQzI0MTBfV1RDT04pOworCisJLyogd2FpdCBmb3IgcmVzZXQgdG8gYXNzZXJ0Li4uICovCisJbWRlbGF5KDUwMCk7CisKKwlwcmludGsoS0VSTl9FUlIgIldhdGNoZG9nIHJlc2V0IGZhaWxlZCB0byBhc3NlcnQgcmVzZXRcbiIpOworCisJLyogZGVsYXkgdG8gYWxsb3cgdGhlIHNlcmlhbCBwb3J0IHRvIHNob3cgdGhlIG1lc3NhZ2UgKi8KKwltZGVsYXkoNTApOworCisJLyogd2UnbGwgdGFrZSBhIGp1bXAgdGhyb3VnaCB6ZXJvIGFzIGEgcG9vciBzZWNvbmQgKi8KKwljcHVfcmVzZXQoMCk7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaAppbmRleCAxNGRlNGU1Li5hZDI1ODA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3lzdGVtLmgKQEAgLTE3LDEyICsxNyw4IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaWRsZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3Jlc2V0Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy13YXRjaGRvZy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KIAotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotCiB2b2lkICgqczNjMjR4eF9pZGxlKSh2b2lkKTsKIHZvaWQgKCpzM2MyNHh4X3Jlc2V0X2hvb2spKHZvaWQpOwogCkBAIC01OSw0NCArNTUsNCBAQAogCQlzM2MyNHh4X2RlZmF1bHRfaWRsZSgpOwogfQogCi1zdGF0aWMgdm9pZAotYXJjaF9yZXNldChjaGFyIG1vZGUpCi17Ci0Jc3RydWN0IGNsayAqd2R0Y2xrOwotCi0JaWYgKG1vZGUgPT0gJ3MnKSB7Ci0JCWNwdV9yZXNldCgwKTsKLQl9Ci0KLQlpZiAoczNjMjR4eF9yZXNldF9ob29rKQotCQlzM2MyNHh4X3Jlc2V0X2hvb2soKTsKLQotCXByaW50aygiYXJjaF9yZXNldDogYXR0ZW1wdGluZyB3YXRjaGRvZyByZXNldFxuIik7Ci0KLQlfX3Jhd193cml0ZWwoMCwgUzNDMjQxMF9XVENPTik7CSAgLyogZGlzYWJsZSB3YXRjaGRvZywgdG8gYmUgc2FmZSAgKi8KLQotCXdkdGNsayA9IGNsa19nZXQoTlVMTCwgIndhdGNoZG9nIik7Ci0JaWYgKCFJU19FUlIod2R0Y2xrKSkgewotCQljbGtfZW5hYmxlKHdkdGNsayk7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3YXJuaW5nOiBjYW5ub3QgZ2V0IHdhdGNoZG9nIGNsb2NrXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBwdXQgaW5pdGlhbCB2YWx1ZXMgaW50byBjb3VudCBhbmQgZGF0YSAqLwotCV9fcmF3X3dyaXRlbCgweDgwLCBTM0MyNDEwX1dUQ05UKTsKLQlfX3Jhd193cml0ZWwoMHg4MCwgUzNDMjQxMF9XVERBVCk7Ci0KLQkvKiBzZXQgdGhlIHdhdGNoZG9nIHRvIGdvIGFuZCByZXNldC4uLiAqLwotCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRXxTM0MyNDEwX1dUQ09OX0RJVjE2fFMzQzI0MTBfV1RDT05fUlNURU4gfAotCQkgICAgIFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHgyMCksIFMzQzI0MTBfV1RDT04pOwotCi0JLyogd2FpdCBmb3IgcmVzZXQgdG8gYXNzZXJ0Li4uICovCi0JbWRlbGF5KDUwMCk7Ci0KLQlwcmludGsoS0VSTl9FUlIgIldhdGNoZG9nIHJlc2V0IGZhaWxlZCB0byBhc3NlcnQgcmVzZXRcbiIpOwotCi0JLyogZGVsYXkgdG8gYWxsb3cgdGhlIHNlcmlhbCBwb3J0IHRvIHNob3cgdGhlIG1lc3NhZ2UgKi8KLQltZGVsYXkoNTApOwotCi0JLyogd2UnbGwgdGFrZSBhIGp1bXAgdGhyb3VnaCB6ZXJvIGFzIGEgcG9vciBzZWNvbmQgKi8KLQljcHVfcmVzZXQoMCk7Ci19CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzdGVtLXJlc2V0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2dwaW8uaAppbmRleCBlN2E5ZDI2Li45M2QzMzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9ncGlvLmgKQEAgLTI2LDM1ICsyNiwyOCBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm47Ci19Ci0KLWV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQogewotCXJldHVybiBHUExSICYgR1BJT19HUElPKGdwaW8pOworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChncGlvKSAmJiAoZ3BpbyA8PSBHUElPX01BWCkpCisJCXJldHVybiBHUExSICYgR1BJT19HUElPKGdwaW8pOworCWVsc2UKKwkJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7Ci0JaWYgKHZhbHVlKQotCQlHUFNSID0gR1BJT19HUElPKGdwaW8pOworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChncGlvKSAmJiAoZ3BpbyA8PSBHUElPX01BWCkpCisJCWlmICh2YWx1ZSkKKwkJCUdQU1IgPSBHUElPX0dQSU8oZ3Bpbyk7CisJCWVsc2UKKwkJCUdQQ1IgPSBHUElPX0dQSU8oZ3Bpbyk7CiAJZWxzZQotCQlHUENSID0gR1BJT19HUElPKGdwaW8pOworCQlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKIH0KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4JCQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLworI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY3B1LW11bHRpMzIuaCBiL2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCmluZGV4IDcxNWUxOGEuLjM0NzlkZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCkBAIC0yMSw2ICsyMSwxMCBAQAogCSAqLwogCXZvaWQgKCpfZGF0YV9hYm9ydCkodW5zaWduZWQgbG9uZyBwYyk7CiAJLyoKKwkgKiBSZXRyaWV2ZSBwcmVmZXRjaCBmYXVsdCBhZGRyZXNzCisJICovCisJdW5zaWduZWQgbG9uZyAoKl9wcmVmZXRjaF9hYm9ydCkodW5zaWduZWQgbG9uZyBscik7CisJLyoKIAkgKiBTZXQgdXAgYW55IHByb2Nlc3NvciBzcGVjaWZpY3MKIAkgKi8KIAl2b2lkICgqX3Byb2NfaW5pdCkodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZ2x1ZS5oIGIvaW5jbHVkZS9hc20tYXJtL2dsdWUuaAppbmRleCAyMjI3NGNlLi5hOTdhMTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZ2x1ZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9nbHVlLmgKQEAgLTQwLDgzICs0MCwxMTAgQEAKICAqCSAgdjZfZWFybHkJLSBBUk12NiBnZW5lcmljIGVhcmx5IGFib3J0IGhhbmRsZXIKICAqCSAgdjdfZWFybHkJLSBBUk12NyBnZW5lcmljIGVhcmx5IGFib3J0IGhhbmRsZXIKICAqLwotI3VuZGVmIENQVV9BQk9SVF9IQU5ETEVSCi0jdW5kZWYgTVVMVElfQUJPUlQKKyN1bmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyN1bmRlZiBNVUxUSV9EQUJPUlQKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk02MTApCi0jIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQogIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgY3B1X2FybTZfZGF0YV9hYm9ydAorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtNl9kYXRhX2Fib3J0CiAjIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk03MTApCi0jIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQogIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgY3B1X2FybTdfZGF0YV9hYm9ydAorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtN19kYXRhX2Fib3J0CiAjIGVuZGlmCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DUFVfQUJSVF9MVjRUCi0jIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQogIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgdjR0X2xhdGVfYWJvcnQKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2xhdGVfYWJvcnQKICMgZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNAotIyBpZmRlZiBDUFVfQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0FCT1JUIDEKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKICMgZWxzZQotIyAgZGVmaW5lIENQVV9BQk9SVF9IQU5ETEVSIHY0X2Vhcmx5X2Fib3J0CisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0X2Vhcmx5X2Fib3J0CiAjIGVuZGlmCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjRUCi0jIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQogIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgdjR0X2Vhcmx5X2Fib3J0CisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0dF9lYXJseV9hYm9ydAogIyBlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY1VEoKLSMgaWZkZWYgQ1BVX0FCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9BQk9SVCAxCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfQUJPUlRfSEFORExFUiB2NXRqX2Vhcmx5X2Fib3J0CisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY1dGpfZWFybHlfYWJvcnQKICMgZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNVQKLSMgaWZkZWYgQ1BVX0FCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9BQk9SVCAxCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfQUJPUlRfSEFORExFUiB2NXRfZWFybHlfYWJvcnQKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjV0X2Vhcmx5X2Fib3J0CiAjIGVuZGlmCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjYKLSMgaWZkZWYgQ1BVX0FCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9BQk9SVCAxCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfQUJPUlRfSEFORExFUiB2Nl9lYXJseV9hYm9ydAorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2Nl9lYXJseV9hYm9ydAogIyBlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY3Ci0jIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQogIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgdjdfZWFybHlfYWJvcnQKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjdfZWFybHlfYWJvcnQKICMgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjaWZuZGVmIENQVV9EQUJPUlRfSEFORExFUgogI2Vycm9yIFVua25vd24gZGF0YSBhYm9ydCBoYW5kbGVyIHR5cGUKICNlbmRpZgogCisvKgorICogUHJlZmV0Y2ggYWJvcnQgaGFuZGxlci4gIElmIHRoZSBDUFUgaGFzIGFuIElGQVIgdXNlIHRoYXQsIG90aGVyd2lzZQorICogdXNlIHRoZSBhZGRyZXNzIG9mIHRoZSBhYm9ydGVkIGluc3RydWN0aW9uCisgKi8KKyN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyN1bmRlZiBNVUxUSV9QQUJPUlQKKworI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfSUZBUgorIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSKHJlZywgaW5zbikJbXJjIHAxNSwgMCwgcmVnLCBjcjYsIGNyMCwgMgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX05PSUZBUgorIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSKHJlZywgaW5zbikJbW92IHJlZywgaW5zbgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCisjZXJyb3IgVW5rbm93biBwcmVmZXRjaCBhYm9ydCBoYW5kbGVyIHR5cGUKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hcm1fc2N1LmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYXJtX3NjdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDI4ZWI1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hcm1fc2N1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIEFTTUFSTV9IQVJEV0FSRV9BUk1fU0NVX0gKLSNkZWZpbmUgQVNNQVJNX0hBUkRXQVJFX0FSTV9TQ1VfSAotCi0jaW5jbHVkZSA8YXNtL2FyY2gvc2N1Lmg+Ci0KLS8qCi0gKiBTQ1UgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgU0NVX0NUUkwJCTB4MDAKLSNkZWZpbmUgU0NVX0NPTkZJRwkJMHgwNAotI2RlZmluZSBTQ1VfQ1BVX1NUQVRVUwkJMHgwOAotI2RlZmluZSBTQ1VfSU5WQUxJREFURQkJMHgwYwotI2RlZmluZSBTQ1VfRlBHQV9SRVZJU0lPTgkweDEwCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC1hZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LWFkbWEuaAppbmRleCA1YzUyOWU2Li5hMzJiODZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LWFkbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LWFkbWEuaApAQCAtMjYwLDcgKzI2MCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBpb3AzeHhfYWF1X3hvcl9zbG90X2NvdW50KHNpemVfdCBsZW4sIGludCBzcmNfY250LAogCQkJCQlpbnQgKnNsb3RzX3Blcl9vcCkKIHsKLQljb25zdCBzdGF0aWMgaW50IHNsb3RfY291bnRfdGFibGVbXSA9IHsgMCwKKwlzdGF0aWMgY29uc3QgaW50IHNsb3RfY291bnRfdGFibGVbXSA9IHsgMCwKIAkJCQkJCTEsIDEsIDEsIDEsIC8qIDAxIC0gMDQgKi8KIAkJCQkJCTIsIDIsIDIsIDIsIC8qIDA1IC0gMDggKi8KIAkJCQkJCTQsIDQsIDQsIDQsIC8qIDA5IC0gMTIgKi8KQEAgLTM2OSw3ICszNjksNyBAQAogLyogdHJhbnNsYXRlIHRoZSBzcmNfaWR4IHRvIGEgZGVzY3JpcHRvciB3b3JkIGluZGV4ICovCiBzdGF0aWMgaW5saW5lIGludCBfX2Rlc2NfaWR4KGludCBzcmNfaWR4KQogewotCWNvbnN0IHN0YXRpYyBpbnQgZGVzY19pZHhfdGFibGVbXSA9IHsgMCwgMCwgMCwgMCwKKwlzdGF0aWMgY29uc3QgaW50IGRlc2NfaWR4X3RhYmxlW10gPSB7IDAsIDAsIDAsIDAsCiAJCQkJCSAgICAgIDAsIDEsIDIsIDMsCiAJCQkJCSAgICAgIDUsIDYsIDcsIDgsCiAJCQkJCSAgICAgIDksIDEwLCAxMSwgMTIsCkBAIC03NjcsMjAgKzc2NywxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGlvcF9jaGFuX2FwcGVuZChzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqY2hhbikKIHsKIAl1MzIgZG1hX2NoYW5fY3RybDsKLQkvKiB3b3JrYXJvdW5kIGRyb3BwZWQgaW50ZXJydXB0cyBvbiAzeHggKi8KLQltb2RfdGltZXIoJmNoYW4tPmNsZWFudXBfd2F0Y2hkb2csIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDMpKTsKIAogCWRtYV9jaGFuX2N0cmwgPSBfX3Jhd19yZWFkbChETUFfQ0NSKGNoYW4pKTsKIAlkbWFfY2hhbl9jdHJsIHw9IDB4MjsKIAlfX3Jhd193cml0ZWwoZG1hX2NoYW5fY3RybCwgRE1BX0NDUihjaGFuKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb3BfY2hhbl9pZGxlKGludCBidXN5LCBzdHJ1Y3QgaW9wX2FkbWFfY2hhbiAqY2hhbikKLXsKLQlpZiAoIWJ1c3kpCi0JCWRlbF90aW1lcigmY2hhbi0+Y2xlYW51cF93YXRjaGRvZyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTMyIGlvcF9jaGFuX2dldF9zdGF0dXMoc3RydWN0IGlvcF9hZG1hX2NoYW4gKmNoYW4pCiB7CiAJcmV0dXJuIF9fcmF3X3JlYWRsKERNQV9DU1IoY2hhbikpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC5oCmluZGV4IGVkZTM3N2UuLjE4ZjY5MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb3AzeHguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LmgKQEAgLTI5LDYgKzI5LDcgQEAKIGV4dGVybiBpbnQgIGdwaW9fbGluZV9nZXQoaW50IGxpbmUpOwogZXh0ZXJuIHZvaWQgZ3Bpb19saW5lX3NldChpbnQgbGluZSwgaW50IHZhbHVlKTsKIGV4dGVybiBpbnQgaW5pdF9hdHU7CitleHRlcm4gaW50IGlvcDN4eF9nZXRfaW5pdF9hdHUodm9pZCk7CiAjZW5kaWYKIAogCkBAIC0xMTIsMTQgKzExMyw2IEBACiAjZGVmaW5lIElPUDNYWF9JTklUX0FUVV9ESVNBQkxFIC0xCiAjZGVmaW5lIElPUDNYWF9JTklUX0FUVV9FTkFCTEUJIDEKIAotI2lmZGVmIENPTkZJR19JT1AzWFhfQVRVCi0jZGVmaW5lIGlvcDN4eF9nZXRfaW5pdF9hdHUoeCkgKGluaXRfYXR1ID09IElPUDNYWF9JTklUX0FUVV9ERUZBVUxUID9cCi0JCQkJSU9QM1hYX0lOSVRfQVRVX0VOQUJMRSA6IGluaXRfYXR1KQotI2Vsc2UKLSNkZWZpbmUgaW9wM3h4X2dldF9pbml0X2F0dSh4KSAoaW5pdF9hdHUgPT0gSU9QM1hYX0lOSVRfQVRVX0RFRkFVTFQgP1wKLQkJCQlJT1AzWFhfSU5JVF9BVFVfRElTQUJMRSA6IGluaXRfYXR1KQotI2VuZGlmCi0KIC8qIE1lc3NhZ2luZyBVbml0ICAqLwogI2RlZmluZSBJT1AzWFhfSU1SMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAzMTApCiAjZGVmaW5lIElPUDNYWF9JTVIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDMxNCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb3BfYWRtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcF9hZG1hLmgKaW5kZXggY2E4ZTcxZi4uY2I3ZTM2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcF9hZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcF9hZG1hLmgKQEAgLTUxLDcgKzUxLDYgQEAKICAqIEBjb21tb246IGNvbW1vbiBkbWFlbmdpbmUgY2hhbm5lbCBvYmplY3QgbWVtYmVycwogICogQGxhc3RfdXNlZDogcGxhY2UgaG9sZGVyIGZvciBhbGxvY2F0aW9uIHRvIGNvbnRpbnVlIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYKICAqIEBhbGxfc2xvdHM6IGNvbXBsZXRlIGRvbWFpbiBvZiBzbG90cyB1c2FibGUgYnkgdGhlIGNoYW5uZWwKLSAqIEBjbGVhbnVwX3dhdGNoZG9nOiB3b3JrYXJvdW5kIG1pc3NlZCBpbnRlcnJ1cHRzIG9uIGlvcDN4eAogICogQHNsb3RzX2FsbG9jYXRlZDogcmVjb3JkcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGRlc2NyaXB0b3Igc2xvdCBwb29sCiAgKiBAaXJxX3Rhc2tsZXQ6IGJvdHRvbSBoYWxmIHdoZXJlIGlvcF9hZG1hX3Nsb3RfY2xlYW51cCBydW5zCiAgKi8KQEAgLTY1LDcgKzY0LDYgQEAKIAlzdHJ1Y3QgZG1hX2NoYW4gY29tbW9uOwogCXN0cnVjdCBpb3BfYWRtYV9kZXNjX3Nsb3QgKmxhc3RfdXNlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFsbF9zbG90czsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBjbGVhbnVwX3dhdGNoZG9nOwogCWludCBzbG90c19hbGxvY2F0ZWQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zY29vcC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmgKaW5kZXggZDM3YmY3NC4uZGZiODMzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3Njb29wLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBpb19kaXI7CiAJdW5zaWduZWQgc2hvcnQgc3VzcGVuZF9jbHI7CiAJdW5zaWduZWQgc2hvcnQgc3VzcGVuZF9zZXQ7CisJaW50IGdwaW9fYmFzZTsKIH07CiAKIC8qIFN0cnVjdHVyZSBmb3IgbGlua2luZyBzY29vcCBkZXZpY2VzIHRvIFBDTUNJQSBzb2NrZXRzICovCkBAIC02Miw3ICs2Myw3IEBACiBleHRlcm4gc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKIAogdm9pZCByZXNldF9zY29vcChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotdW5zaWduZWQgc2hvcnQgc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpOwotdW5zaWduZWQgc2hvcnQgcmVzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCk7Cit1bnNpZ25lZCBzaG9ydCBfX2RlcHJlY2F0ZWQgc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpOwordW5zaWduZWQgc2hvcnQgX19kZXByZWNhdGVkIHJlc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpOwogdW5zaWduZWQgc2hvcnQgcmVhZF9zY29vcF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCByZWcpOwogdm9pZCB3cml0ZV9zY29vcF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IGRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2h3Y2FwLmggYi9pbmNsdWRlL2FzbS1hcm0vaHdjYXAuaAppbmRleCAwMWExMzkxLi44MWY0Yzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaHdjYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaHdjYXAuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBIV0NBUF9KQVZBCTI1NgogI2RlZmluZSBIV0NBUF9JV01NWFQJNTEyCiAjZGVmaW5lIEhXQ0FQX0NSVU5DSAkxMDI0CisjZGVmaW5lIEhXQ0FQX1RIVU1CRUUJMjA0OAogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lkZS5oIGIvaW5jbHVkZS9hc20tYXJtL2lkZS5oCmluZGV4IGYzNDhmY2YuLjg4ZjRkMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaWRlLmgKQEAgLTE3LDE0ICsxNyw2IEBACiAjZGVmaW5lIE1BWF9IV0lGUwk0CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX0w3MjAwKQotIyBpZmRlZiBDT05GSUdfQVJDSF9DTFBTNzUwMAotIyAgZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCi0jIGVsc2UKLSMgIGRlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKDApCi0jIGVuZGlmCi0jZW5kaWYgLyogIUFSQ0hfTDcyMDAgKi8KLQogI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsYWRkcixsZW4pCXJlYWRzdyhwb3J0LGFkZHIsbGVuKQogI2RlZmluZSBfX2lkZV9tbV9pbnNsKHBvcnQsYWRkcixsZW4pCXJlYWRzbChwb3J0LGFkZHIsbGVuKQogI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LGFkZHIsbGVuKQl3cml0ZXN3KHBvcnQsYWRkcixsZW4pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0va2V4ZWMuaCBiL2luY2x1ZGUvYXNtLWFybS9rZXhlYy5oCmluZGV4IDFlZTE3YjYuLjQ3ZmUzNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9rZXhlYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9rZXhlYy5oCkBAIC04LDcgKzgsNyBAQAogLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiByZWFjaCBpbiBwaHlzaWNhbCBhZGRyZXNzIG1vZGUgKi8KICNkZWZpbmUgS0VYRUNfREVTVElOQVRJT05fTUVNT1JZX0xJTUlUICgtMVVMKQogLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiB1c2UgZm9yIHRoZSBjb250cm9sIGNvZGUgYnVmZmVyICovCi0jZGVmaW5lIEtFWEVDX0NPTlRST0xfTUVNT1JZX0xJTUlUIFRBU0tfU0laRQorI2RlZmluZSBLRVhFQ19DT05UUk9MX01FTU9SWV9MSU1JVCAoLTFVTCkKIAogI2RlZmluZSBLRVhFQ19DT05UUk9MX0NPREVfU0laRQk0MDk2CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1hcm0va3Byb2Jlcy5oCmluZGV4IDRlN2JkMzIuLmMwNDIxOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2twcm9iZXMuaApAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCi0jZGVmaW5lIEFSQ0hfU1VQUE9SVFNfS1JFVFBST0JFUwogI2RlZmluZSBfX0FSQ0hfV0FOVF9LUFJPQkVTX0lOU05fU0xPVAogI2RlZmluZSBNQVhfSU5TTl9TSVpFCQkJMgogI2RlZmluZSBNQVhfU1RBQ0tfU0laRQkJCTY0CS8qIDMyIHdvdWxkIHByb2JhYmx5IGJlIE9LICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0va3ZtLmggYi9pbmNsdWRlL2FzbS1hcm0va3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzYzA4YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fQVJNX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fQVJNX0gKKworLyogYXJtIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oCmluZGV4IGM1OWZhZDEuLmJjYzhhZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9hcmNoLmgKQEAgLTE3LDcgKzE3LDcgQEAKIHN0cnVjdCBtYWNoaW5lX2Rlc2MgewogCS8qCiAJICogTm90ZSEgVGhlIGZpcnN0IGZvdXIgZWxlbWVudHMgYXJlIHVzZWQKLQkgKiBieSBhc3NlbWJsZXIgY29kZSBpbiBoZWFkLWFybXYuUworCSAqIGJ5IGFzc2VtYmxlciBjb2RlIGluIGhlYWQuUywgaGVhZC1jb21tb24uUwogCSAqLwogCXVuc2lnbmVkIGludAkJbnI7CQkvKiBhcmNoaXRlY3R1cmUgbnVtYmVyCSovCiAJdW5zaWduZWQgaW50CQlwaHlzX2lvOwkvKiBzdGFydCBvZiBwaHlzaWNhbCBpbwkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvcGNpLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaAppbmRleCAyNDYyMWM0Li45ZDRmNmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaApAQCAtNTUsNiArNTUsNyBAQAogZXh0ZXJuIGludCBpb3AzeHhfcGNpX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKIGV4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqaW9wM3h4X3BjaV9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKik7CiBleHRlcm4gdm9pZCBpb3AzeHhfcGNpX3ByZWluaXQodm9pZCk7CitleHRlcm4gdm9pZCBpb3AzeHhfcGNpX3ByZWluaXRfY29uZCh2b2lkKTsKIAogZXh0ZXJuIGludCBkYzIxMjg1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKIGV4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqZGMyMTI4NV9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKaW5kZXggZDliZmIzOS4uOWJhNGQ3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaApAQCAtMjE3LDcgKzIxNywxMCBAQAogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAKICNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQlQSFlTX1BGTl9PRkZTRVQKKworI2lmbmRlZiBDT05GSUdfU1BBUlNFTUVNCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gUEhZU19QRk5fT0ZGU0VUICYmIChwZm4pIDwgKFBIWVNfUEZOX09GRlNFVCArIG1heF9tYXBucikpCisjZW5kaWYKIAogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJKCh1bnNpZ25lZCBsb25nKShrYWRkcikgPj0gUEFHRV9PRkZTRVQgJiYgKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtbm9tbXUuaCBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLW5vbW11LmgKaW5kZXggMzNjODNkZC4uMmU1ODY4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtbm9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS1ub21tdS5oCkBAIC05Miw2ICs5Miw4IEBACiAKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTICAgICAgKDApCiAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CisKICNlbHNlIAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtb3Jpb24vZWhjaS1vcmlvbi5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtb3Jpb24vZWhjaS1vcmlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTcwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi9laGNpLW9yaW9uLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9wbGF0LW9yaW9uL2VoY2ktb3Jpb24uaAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fUExBVF9PUklPTl9FSENJX09SSU9OX0gKKyNkZWZpbmUgX19BU01fUExBVF9PUklPTl9FSENJX09SSU9OX0gKKworI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKworc3RydWN0IG9yaW9uX2VoY2lfZGF0YSB7CisJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbwkqZHJhbTsKK307CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LW9yaW9uL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YWVlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi9pcnEuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL3BsYXQtb3Jpb24vaXJxLmgKKyAqCisgKiBNYXJ2ZWxsIE9yaW9uIFNvQyBJUlEgaGFuZGxpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX09SSU9OX0lSUV9ICisjZGVmaW5lIF9fQVNNX1BMQVRfT1JJT05fSVJRX0gKKwordm9pZCBvcmlvbl9pcnFfaW5pdCh1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LCB2b2lkIF9faW9tZW0gKm1hc2thZGRyKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LW9yaW9uL29yaW9uX25hbmQuaCBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LW9yaW9uL29yaW9uX25hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQzODUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtb3Jpb24vb3Jpb25fbmFuZC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi9vcmlvbl9uYW5kLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfT1JJT05fT1JJT05fTkFORF9ICisjZGVmaW5lIF9fQVNNX1BMQVRfT1JJT05fT1JJT05fTkFORF9ICisKKy8qCisgKiBEZXZpY2UgYnVzIE5BTkQgcHJpdmF0ZSBkYXRhCisgKi8KK3N0cnVjdCBvcmlvbl9uYW5kX2RhdGEgeworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwl1MzIgbnJfcGFydHM7CisJdTggYWxlOwkJLyogYWRkcmVzcyBsaW5lIG51bWJlciBjb25uZWN0ZWQgdG8gQUxFICovCisJdTggY2xlOwkJLyogYWRkcmVzcyBsaW5lIG51bWJlciBjb25uZWN0ZWQgdG8gQ0xFICovCisJdTggd2lkdGg7CS8qIGJ1c3dpZHRoICovCit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtb3Jpb24vcGNpZS5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtb3Jpb24vcGNpZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi9wY2llLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9wbGF0LW9yaW9uL3BjaWUuaAorICoKKyAqIE1hcnZlbGwgT3Jpb24gU29DIFBDSWUgaGFuZGxpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX09SSU9OX1BDSUVfSAorI2RlZmluZSBfX0FTTV9QTEFUX09SSU9OX1BDSUVfSAorCit1MzIgb3Jpb25fcGNpZV9kZXZfaWQodm9pZCBfX2lvbWVtICpiYXNlKTsKK3UzMiBvcmlvbl9wY2llX3Jldih2b2lkIF9faW9tZW0gKmJhc2UpOworaW50IG9yaW9uX3BjaWVfbGlua191cCh2b2lkIF9faW9tZW0gKmJhc2UpOworaW50IG9yaW9uX3BjaWVfZ2V0X2xvY2FsX2J1c19ucih2b2lkIF9faW9tZW0gKmJhc2UpOwordm9pZCBvcmlvbl9wY2llX3NldF9sb2NhbF9idXNfbnIodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgbnIpOwordm9pZCBvcmlvbl9wY2llX3NldHVwKHZvaWQgX19pb21lbSAqYmFzZSwKKwkJICAgICAgc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbSk7CitpbnQgb3Jpb25fcGNpZV9yZF9jb25mKHZvaWQgX19pb21lbSAqYmFzZSwgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJICAgICAgIHUzMiBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpOworaW50IG9yaW9uX3BjaWVfcmRfY29uZl90bHAodm9pZCBfX2lvbWVtICpiYXNlLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJICAgdTMyIGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCk7CitpbnQgb3Jpb25fcGNpZV9yZF9jb25mX3dhKHZvaWQgX19pb21lbSAqd2FfYmFzZSwgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCSAgdTMyIGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCk7CitpbnQgb3Jpb25fcGNpZV93cl9jb25mKHZvaWQgX19pb21lbSAqYmFzZSwgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJICAgICAgIHUzMiBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi90aW1lLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4NWNjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1vcmlvbi90aW1lLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9wbGF0LW9yaW9uL3RpbWUuaAorICoKKyAqIE1hcnZlbGwgT3Jpb24gU29DIHRpbWUgaGFuZGxpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX09SSU9OX1RJTUVfSAorI2RlZmluZSBfX0FTTV9QTEFUX09SSU9OX1RJTUVfSAorCit2b2lkIG9yaW9uX3RpbWVfaW5pdCh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdGNsayk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3VuY29tcHJlc3MuaAppbmRleCBiNWU2MjA4Li4xOWI5ZWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy91bmNvbXByZXNzLmgKQEAgLTI3LDggKzI3LDggQEAKIAogLyogZGVmaW5lcyBmb3IgVUFSVCByZWdpc3RlcnMgKi8KIAotI2luY2x1ZGUgImFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oIgotI2luY2x1ZGUgImFzbS9wbGF0LXMzYy9yZWdzLXdhdGNoZG9nLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtd2F0Y2hkb2cuaD4KIAogLyogd29ya2luZyBpbiBwaHlzaWNhbCBzcGFjZS4uLiAqLwogI3VuZGVmIFMzQzI0MTBfV0RPR1JFRwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmggYi9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaAppbmRleCBhNGNlNDU3Li43NWVjNzYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaApAQCAtMjE0LDkgKzIxNCw5IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaWZuZGVmIE1VTFRJX0NQVQotI2luY2x1ZGUgImFzbS9jcHUtc2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL2NwdS1zaW5nbGUuaD4KICNlbHNlCi0jaW5jbHVkZSAiYXNtL2NwdS1tdWx0aTMyLmgiCisjaW5jbHVkZSA8YXNtL2NwdS1tdWx0aTMyLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vc2VtYXBob3JlLWhlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDdmMTk4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9zZW1hcGhvcmUtaGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0jaWZuZGVmIEFTTUFSTV9TRU1BUEhPUkVfSEVMUEVSX0gKLSNkZWZpbmUgQVNNQVJNX1NFTUFQSE9SRV9IRUxQRVJfSAotCi0vKgotICogVGhlc2UgdHdvIF9tdXN0XyBleGVjdXRlIGF0b21pY2FsbHkgd3J0IGVhY2ggb3RoZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX29uZV9tb3JlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZzZW0tPmNvdW50KSA8PSAwKQotCQlzZW0tPndha2luZysrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlpZiAoc2VtLT53YWtpbmcgPiAwKSB7Ci0JCXNlbS0+d2FraW5nLS07Ci0JCXJldCA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogd2FraW5nIG5vbiB6ZXJvIGludGVycnVwdGlibGUKLSAqCTEJZ290IHRoZSBsb2NrCi0gKgkwCWdvIHRvIHNsZWVwCi0gKgktRUlOVFIJaW50ZXJydXB0ZWQKLSAqCi0gKiBXZSBtdXN0IHVuZG8gdGhlIHNlbS0+Y291bnQgZG93bl9pbnRlcnJ1cHRpYmxlKCkgaW5jcmVtZW50IHdoaWxlIHdlIGFyZQotICogcHJvdGVjdGVkIGJ5IHRoZSBzcGlubG9jayBpbiBvcmRlciB0byBtYWtlIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCi0gKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQotICovCi1zdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sCi0JCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlpZiAoc2VtLT53YWtpbmcgPiAwKSB7Ci0JCXNlbS0+d2FraW5nLS07Ci0JCXJldCA9IDE7Ci0JfSBlbHNlIGlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7Ci0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCQlyZXQgPSAtRUlOVFI7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwkKLX0KLQotLyoKLSAqIHdha2luZ19ub25femVyb190cnlfbG9jazoKLSAqCTEJZmFpbGVkIHRvIGxvY2sKLSAqCTAJZ290IHRoZSBsb2NrCi0gKgotICogV2UgbXVzdCB1bmRvIHRoZSBzZW0tPmNvdW50IGRvd25faW50ZXJydXB0aWJsZSgpIGluY3JlbWVudCB3aGlsZSB3ZSBhcmUKLSAqIHByb3RlY3RlZCBieSB0aGUgc3BpbmxvY2sgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGF0b21pY19pbmMoKSB3aXRoIHRoZQotICogYXRvbWljX3JlYWQoKSBpbiB3YWtlX29uZV9tb3JlKCksIG90aGVyd2lzZSB3ZSBjYW4gcmFjZS4gLWFyY2EKLSAqLwotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCWlmIChzZW0tPndha2luZyA8PSAwKQotCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKLQllbHNlIHsKLQkJc2VtLT53YWtpbmctLTsKLQkJcmV0ID0gMDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tYXJtL3NlbWFwaG9yZS5oCmluZGV4IDFjOGI0NDEuLmQ5YjIwMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2VtYXBob3JlLmgKQEAgLTEsOTggKzEgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vc2VtYXBob3JlLmgKLSAqLwotI2lmbmRlZiBfX0FTTV9BUk1fU0VNQVBIT1JFX0gKLSNkZWZpbmUgX19BU01fQVJNX1NFTUFQSE9SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vbG9ja3MuaD4KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVQobmFtZSwgY250KQkJCQlcCi17CQkJCQkJCQlcCi0JLmNvdW50CT0gQVRPTUlDX0lOSVQoY250KSwJCQkJXAotCS53YWl0CT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpLAlcCi19Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpCVwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKQkJX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKLQlzZW0tPnNsZWVwZXJzID0gMDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLS8qCi0gKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbgotICovCi1hc21saW5rYWdlIHZvaWQgX19kb3duX2ZhaWxlZCh2b2lkKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZV9mYWlsZWQodm9pZCk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2tfZmFpbGVkKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQpOwotCi1leHRlcm4gdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWV4dGVybiBpbnQgIF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotZXh0ZXJuIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLQotLyoKLSAqIFRoaXMgaXMgdWdseSwgYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgY2FzZSB0byBmYWxsIHRocm91Z2guCi0gKiAiX19kb3duIiBpcyB0aGUgYWN0dWFsIHJvdXRpbmUgdGhhdCB3YWl0cy4uLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JX19kb3duX29wKHNlbSwgX19kb3duX2ZhaWxlZCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgotICogIl9fZG93bl9pbnRlcnJ1cHRpYmxlIiBpcyB0aGUgYWN0dWFsIHJvdXRpbmUgdGhhdCB3YWl0cy4uLgotICovCi1zdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUgKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLQlyZXR1cm4gX19kb3duX29wX3JldChzZW0sIF9fZG93bl9pbnRlcnJ1cHRpYmxlX2ZhaWxlZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JcmV0dXJuIF9fZG93bl9vcF9yZXQoc2VtLCBfX2Rvd25fdHJ5bG9ja19mYWlsZWQpOwotfQotCi0vKgotICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgotICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KLSAqIFRoZSBkZWZhdWx0IGNhc2UgKG5vIGNvbnRlbnRpb24pIHdpbGwgcmVzdWx0IGluIE5PCi0gKiBqdW1wcyBmb3IgYm90aCBkb3duKCkgYW5kIHVwKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCV9fdXBfb3Aoc2VtLCBfX3VwX3dha2V1cCk7Ci19Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NwYXJzZW1lbS5oIGIvaW5jbHVkZS9hc20tYXJtL3NwYXJzZW1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NzE1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc3BhcnNlbWVtLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBBU01BUk1fU1BBUlNFTUVNX0gKKyNkZWZpbmUgQVNNQVJNX1NQQVJTRU1FTV9ICisKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisKKyNkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMJMzIKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkzMgorI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwlOT0RFX01FTV9TSVpFX0JJVFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCmluZGV4IDQxNzg0MzUuLmY1YTY2NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCkBAIC02Miw2ICs2Miw5IEBACiAJc3RydWN0IGNydW5jaF9zdGF0ZQljcnVuY2hzdGF0ZTsKIAl1bmlvbiBmcF9zdGF0ZQkJZnBzdGF0ZSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiAJdW5pb24gdmZwX3N0YXRlCQl2ZnBzdGF0ZTsKKyNpZmRlZiBDT05GSUdfQVJNX1RIVU1CRUUKKwl1bnNpZ25lZCBsb25nCQl0aHVtYmVlX3N0YXRlOwkvKiBUaHVtYkVFIEhhbmRsZXIgQmFzZSByZWdpc3RlciAqLworI2VuZGlmCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWFybS91bmFsaWduZWQuaAppbmRleCA4NDMxZjZlLi41ZGIwM2NmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdW5hbGlnbmVkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3VuYWxpZ25lZC5oCkBAIC00MCwxNiArNDAsMTYgQEAKICAqLwogCiAjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF8yX2xlKF9fcCkJCQkJCVwKLQkoX19wWzBdIHwgX19wWzFdIDw8IDgpCisJKHVuc2lnbmVkIGludCkoX19wWzBdIHwgX19wWzFdIDw8IDgpCiAKICNkZWZpbmUgX19nZXRfdW5hbGlnbmVkXzJfYmUoX19wKQkJCQkJXAotCShfX3BbMF0gPDwgOCB8IF9fcFsxXSkKKwkodW5zaWduZWQgaW50KShfX3BbMF0gPDwgOCB8IF9fcFsxXSkKIAogI2RlZmluZSBfX2dldF91bmFsaWduZWRfNF9sZShfX3ApCQkJCQlcCi0JKF9fcFswXSB8IF9fcFsxXSA8PCA4IHwgX19wWzJdIDw8IDE2IHwgX19wWzNdIDw8IDI0KQorCSh1bnNpZ25lZCBpbnQpKF9fcFswXSB8IF9fcFsxXSA8PCA4IHwgX19wWzJdIDw8IDE2IHwgX19wWzNdIDw8IDI0KQogCiAjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF80X2JlKF9fcCkJCQkJCVwKLQkoX19wWzBdIDw8IDI0IHwgX19wWzFdIDw8IDE2IHwgX19wWzJdIDw8IDggfCBfX3BbM10pCisJKHVuc2lnbmVkIGludCkoX19wWzBdIDw8IDI0IHwgX19wWzFdIDw8IDE2IHwgX19wWzJdIDw8IDggfCBfX3BbM10pCiAKICNkZWZpbmUgX19nZXRfdW5hbGlnbmVkXzhfbGUoX19wKQkJCQkJXAogCSgodW5zaWduZWQgbG9uZyBsb25nKV9fZ2V0X3VuYWxpZ25lZF80X2xlKChfX3ArNCkpIDw8IDMyIHwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCmluZGV4IDg4ZTg2OGIuLjdjNTcwMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKQEAgLTM3Niw5ICszNzYsMTEgQEAKICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NykKICNkZWZpbmUgX19OUl91dGltZW5zYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ4KQogI2RlZmluZSBfX05SX3NpZ25hbGZkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0OSkKLSNkZWZpbmUgX19OUl90aW1lcmZkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MCkKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MCkKICNkZWZpbmUgX19OUl9ldmVudGZkCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MSkKICNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzUyKQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MykKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJCShfX05SX1NZU0NBTExfQkFTRSszNTQpCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIFNXSXMgYXJlIEFSTSBwcml2YXRlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYm9hcmQuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwL2JvYXJkLmgKaW5kZXggNzU5N2IwYi4uYTRlMmQyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9ib2FyZC5oCkBAIC0zOCw5ICszOCw3IEBACiBhdDMyX2FkZF9kZXZpY2VfbGNkYyh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpkYXRhLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgZmJtZW1fc3RhcnQsIHVuc2lnbmVkIGxvbmcgZmJtZW1fbGVuKTsKIAotc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSB7Ci0JaW50IHZidXNfcGluOwotfTsKK3N0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKIGF0MzJfYWRkX2RldmljZV91c2JhKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CiAKQEAgLTY4LDcgKzY2LDEwIEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKIGF0MzJfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDMyX2FkZF9kZXZpY2VfdHdpKHVuc2lnbmVkIGludCBpZCk7CitzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDMyX2FkZF9kZXZpY2VfdHdpKHVuc2lnbmVkIGludCBpZCwKKwkJCQkJICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqYiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBuKTsKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0MzJfYWRkX2RldmljZV9tY2kodW5zaWduZWQgaW50IGlkKTsKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0MzJfYWRkX2RldmljZV9hYzk3Yyh1bnNpZ25lZCBpbnQgaWQpOwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQzMl9hZGRfZGV2aWNlX2FiZGFjKHVuc2lnbmVkIGludCBpZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9wbS5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZlNDMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvcG0uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQVZSMzIgQVAgUG93ZXIgTWFuYWdlbWVudC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FWUjMyX0FSQ0hfUE1fSAorI2RlZmluZSBfX0FTTV9BVlIzMl9BUkNIX1BNX0gKKworLyogUG9zc2libGUgYXJndW1lbnRzIHRvIHRoZSAic2xlZXAiIGluc3RydWN0aW9uICovCisjZGVmaW5lIENQVV9TTEVFUF9JRExFCQkwCisjZGVmaW5lIENQVV9TTEVFUF9GUk9aRU4JMQorI2RlZmluZSBDUFVfU0xFRVBfU1RBTkRCWQkyCisjZGVmaW5lIENQVV9TTEVFUF9TVE9QCQkzCisjZGVmaW5lIENQVV9TTEVFUF9TVEFUSUMJNQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgY3B1X2VudGVyX2lkbGUodm9pZCk7CisKK2V4dGVybiBib29sIGRpc2FibGVfaWRsZV9zbGVlcDsKKworc3RhdGljIGlubGluZSB2b2lkIGNwdV9kaXNhYmxlX2lkbGVfc2xlZXAodm9pZCkKK3sKKwlkaXNhYmxlX2lkbGVfc2xlZXAgPSB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2VuYWJsZV9pZGxlX3NsZWVwKHZvaWQpCit7CisJZGlzYWJsZV9pZGxlX3NsZWVwID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfaWRsZV9zbGVlcCh2b2lkKQoreworCS8qCisJICogSWYgd2UncmUgdXNpbmcgdGhlIENPVU5UIGFuZCBDT01QQVJFIHJlZ2lzdGVycyBmb3IKKwkgKiB0aW1la2VlcGluZywgd2UgY2FuJ3QgdXNlIHRoZSBJRExFIHN0YXRlLgorCSAqLworCWlmIChkaXNhYmxlX2lkbGVfc2xlZXApCisJCWNwdV9yZWxheCgpOworCWVsc2UKKwkJY3B1X2VudGVyX2lkbGUoKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQVZSMzJfQVJDSF9QTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC90aW1lLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC90aW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOGE0MzQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvdGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX0FTTV9BVlIzMl9BUkNIX0FUMzJBUF9USU1FX0gKLSNkZWZpbmUgX0FTTV9BVlIzMl9BUkNIX0FUMzJBUF9USU1FX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi1leHRlcm4gc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnFhY3Rpb247Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDMyX3N5c3RjMF9kZXZpY2U7Ci1leHRlcm4gdm9pZCBsb2NhbF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLQotI2RlZmluZSBUSU1FUl9CQ1IJCQkJCTB4MDAwMDAwYzAKLSNkZWZpbmUgVElNRVJfQkNSX1NZTkMJCQkJCQkgMAotI2RlZmluZSBUSU1FUl9CTVIJCQkJCTB4MDAwMDAwYzQKLSNkZWZpbmUgVElNRVJfQk1SX1RDMFhDMFMJCQkJCSAwCi0jZGVmaW5lIFRJTUVSX0JNUl9UQzFYQzFTCQkJCQkgMgotI2RlZmluZSBUSU1FUl9CTVJfVEMyWEMyUwkJCQkJIDQKLSNkZWZpbmUgVElNRVJfQ0NSCQkJCQkweDAwMDAwMDAwCi0jZGVmaW5lIFRJTUVSX0NDUl9DTEtESVMJCQkJCSAxCi0jZGVmaW5lIFRJTUVSX0NDUl9DTEtFTgkJCQkJCSAwCi0jZGVmaW5lIFRJTUVSX0NDUl9TV1RSRwkJCQkJCSAyCi0jZGVmaW5lIFRJTUVSX0NNUgkJCQkJMHgwMDAwMDAwNAotI2RlZmluZSBUSU1FUl9DTVJfQUJFVFJHCQkJCQkxMAotI2RlZmluZSBUSU1FUl9DTVJfQUNQQQkJCQkJCTE2Ci0jZGVmaW5lIFRJTUVSX0NNUl9BQ1BDCQkJCQkJMTgKLSNkZWZpbmUgVElNRVJfQ01SX0FFRVZUCQkJCQkJMjAKLSNkZWZpbmUgVElNRVJfQ01SX0FTV1RSRwkJCQkJMjIKLSNkZWZpbmUgVElNRVJfQ01SX0JDUEIJCQkJCQkyNAotI2RlZmluZSBUSU1FUl9DTVJfQkNQQwkJCQkJCTI2Ci0jZGVmaW5lIFRJTUVSX0NNUl9CRUVWVAkJCQkJCTI4Ci0jZGVmaW5lIFRJTUVSX0NNUl9CU1dUUkcJCQkJCTMwCi0jZGVmaW5lIFRJTUVSX0NNUl9CVVJTVAkJCQkJCSA0Ci0jZGVmaW5lIFRJTUVSX0NNUl9DTEtJCQkJCQkJIDMKLSNkZWZpbmUgVElNRVJfQ01SX0NQQ0RJUwkJCQkJIDcKLSNkZWZpbmUgVElNRVJfQ01SX0NQQ1NUT1AJCQkJCSA2Ci0jZGVmaW5lIFRJTUVSX0NNUl9DUENUUkcJCQkJCTE0Ci0jZGVmaW5lIFRJTUVSX0NNUl9FRVZUCQkJCQkJMTAKLSNkZWZpbmUgVElNRVJfQ01SX0VFVlRFREcJCQkJCSA4Ci0jZGVmaW5lIFRJTUVSX0NNUl9FTkVUUkcJCQkJCTEyCi0jZGVmaW5lIFRJTUVSX0NNUl9FVFJHRURHCQkJCQkgOAotI2RlZmluZSBUSU1FUl9DTVJfTERCRElTCQkJCQkgNwotI2RlZmluZSBUSU1FUl9DTVJfTERCU1RPUAkJCQkJIDYKLSNkZWZpbmUgVElNRVJfQ01SX0xEUkEJCQkJCQkxNgotI2RlZmluZSBUSU1FUl9DTVJfTERSQgkJCQkJCTE4Ci0jZGVmaW5lIFRJTUVSX0NNUl9UQ0NMS1MJCQkJCSAwCi0jZGVmaW5lIFRJTUVSX0NNUl9XQVZFCQkJCQkJMTUKLSNkZWZpbmUgVElNRVJfQ01SX1dBVlNFTAkJCQkJMTMKLSNkZWZpbmUgVElNRVJfQ1YJCQkJCTB4MDAwMDAwMTAKLSNkZWZpbmUgVElNRVJfQ1ZfQ1YJCQkJCQkgMAotI2RlZmluZSBUSU1FUl9JRFIJCQkJCTB4MDAwMDAwMjgKLSNkZWZpbmUgVElNRVJfSURSX0NPVkZTCQkJCQkJIDAKLSNkZWZpbmUgVElNRVJfSURSX0NQQVMJCQkJCQkgMgotI2RlZmluZSBUSU1FUl9JRFJfQ1BCUwkJCQkJCSAzCi0jZGVmaW5lIFRJTUVSX0lEUl9DUENTCQkJCQkJIDQKLSNkZWZpbmUgVElNRVJfSURSX0VUUkdTCQkJCQkJIDcKLSNkZWZpbmUgVElNRVJfSURSX0xEUkFTCQkJCQkJIDUKLSNkZWZpbmUgVElNRVJfSURSX0xEUkJTCQkJCQkJIDYKLSNkZWZpbmUgVElNRVJfSURSX0xPVlJTCQkJCQkJIDEKLSNkZWZpbmUgVElNRVJfSUVSCQkJCQkweDAwMDAwMDI0Ci0jZGVmaW5lIFRJTUVSX0lFUl9DT1ZGUwkJCQkJCSAwCi0jZGVmaW5lIFRJTUVSX0lFUl9DUEFTCQkJCQkJIDIKLSNkZWZpbmUgVElNRVJfSUVSX0NQQlMJCQkJCQkgMwotI2RlZmluZSBUSU1FUl9JRVJfQ1BDUwkJCQkJCSA0Ci0jZGVmaW5lIFRJTUVSX0lFUl9FVFJHUwkJCQkJCSA3Ci0jZGVmaW5lIFRJTUVSX0lFUl9MRFJBUwkJCQkJCSA1Ci0jZGVmaW5lIFRJTUVSX0lFUl9MRFJCUwkJCQkJCSA2Ci0jZGVmaW5lIFRJTUVSX0lFUl9MT1ZSUwkJCQkJCSAxCi0jZGVmaW5lIFRJTUVSX0lNUgkJCQkJMHgwMDAwMDAyYwotI2RlZmluZSBUSU1FUl9JTVJfQ09WRlMJCQkJCQkgMAotI2RlZmluZSBUSU1FUl9JTVJfQ1BBUwkJCQkJCSAyCi0jZGVmaW5lIFRJTUVSX0lNUl9DUEJTCQkJCQkJIDMKLSNkZWZpbmUgVElNRVJfSU1SX0NQQ1MJCQkJCQkgNAotI2RlZmluZSBUSU1FUl9JTVJfRVRSR1MJCQkJCQkgNwotI2RlZmluZSBUSU1FUl9JTVJfTERSQVMJCQkJCQkgNQotI2RlZmluZSBUSU1FUl9JTVJfTERSQlMJCQkJCQkgNgotI2RlZmluZSBUSU1FUl9JTVJfTE9WUlMJCQkJCQkgMQotI2RlZmluZSBUSU1FUl9SQQkJCQkJMHgwMDAwMDAxNAotI2RlZmluZSBUSU1FUl9SQV9SQQkJCQkJCSAwCi0jZGVmaW5lIFRJTUVSX1JCCQkJCQkweDAwMDAwMDE4Ci0jZGVmaW5lIFRJTUVSX1JCX1JCCQkJCQkJIDAKLSNkZWZpbmUgVElNRVJfUkMJCQkJCTB4MDAwMDAwMWMKLSNkZWZpbmUgVElNRVJfUkNfUkMJCQkJCQkgMAotI2RlZmluZSBUSU1FUl9TUgkJCQkJMHgwMDAwMDAyMAotI2RlZmluZSBUSU1FUl9TUl9DTEtTVEEJCQkJCQkxNgotI2RlZmluZSBUSU1FUl9TUl9DT1ZGUwkJCQkJCSAwCi0jZGVmaW5lIFRJTUVSX1NSX0NQQVMJCQkJCQkgMgotI2RlZmluZSBUSU1FUl9TUl9DUEJTCQkJCQkJIDMKLSNkZWZpbmUgVElNRVJfU1JfQ1BDUwkJCQkJCSA0Ci0jZGVmaW5lIFRJTUVSX1NSX0VUUkdTCQkJCQkJIDcKLSNkZWZpbmUgVElNRVJfU1JfTERSQVMJCQkJCQkgNQotI2RlZmluZSBUSU1FUl9TUl9MRFJCUwkJCQkJCSA2Ci0jZGVmaW5lIFRJTUVSX1NSX0xPVlJTCQkJCQkJIDEKLSNkZWZpbmUgVElNRVJfU1JfTVRJT0EJCQkJCQkxNwotI2RlZmluZSBUSU1FUl9TUl9NVElPQgkJCQkJCTE4Ci0KLS8qIEJpdCBtYW5pcHVsYXRpb24gbWFjcm9zICovCi0jZGVmaW5lIFRJTUVSX0JJVChuYW1lKQkJKDEgPDwgVElNRVJfIyNuYW1lKQotI2RlZmluZSBUSU1FUl9CRihuYW1lLHZhbHVlKQkoKHZhbHVlKSA8PCBUSU1FUl8jI25hbWUpCi0KLS8qIFJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgKi8KLSNkZWZpbmUgdGltZXJfcmVhZChwb3J0LGluc3RhbmNlLHJlZykgXAotCV9fcmF3X3JlYWRsKHBvcnQgKyAoMHg0MCAqIGluc3RhbmNlKSArIFRJTUVSXyMjcmVnKQotI2RlZmluZSB0aW1lcl93cml0ZShwb3J0LGluc3RhbmNlLHJlZyx2YWx1ZSkgXAotCV9fcmF3X3dyaXRlbCgodmFsdWUpLCBwb3J0ICsgKDB4NDAgKiBpbnN0YW5jZSkgKyBUSU1FUl8jI3JlZykKLQotI2VuZGlmIC8qIF9BU01fQVZSMzJfQVJDSF9BVDMyQVBfVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9hc20uaCBiL2luY2x1ZGUvYXNtLWF2cjMyL2FzbS5oCmluZGV4IDUxNWM3NjEuLmEyYzY0ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL2FzbS5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL2FzbS5oCkBAIC0xMiwxMCArMTIsMTAgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAotI2RlZmluZSBtYXNrX2ludGVycnVwdHMJCXNzcmYJU1JfR01fQklUCi0jZGVmaW5lIG1hc2tfZXhjZXB0aW9ucwkJc3NyZglTUl9FTV9CSVQKLSNkZWZpbmUgdW5tYXNrX2ludGVycnVwdHMJY3NyZglTUl9HTV9CSVQKLSNkZWZpbmUgdW5tYXNrX2V4Y2VwdGlvbnMJY3NyZglTUl9FTV9CSVQKKyNkZWZpbmUgbWFza19pbnRlcnJ1cHRzCQlzc3JmCVNZU1JFR19HTV9PRkZTRVQKKyNkZWZpbmUgbWFza19leGNlcHRpb25zCQlzc3JmCVNZU1JFR19FTV9PRkZTRVQKKyNkZWZpbmUgdW5tYXNrX2ludGVycnVwdHMJY3NyZglTWVNSRUdfR01fT0ZGU0VUCisjZGVmaW5lIHVubWFza19leGNlcHRpb25zCWNzcmYJU1lTUkVHX0VNX09GRlNFVAogCiAjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKIAkubWFjcm8Jc2F2ZV9mcApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9ieXRlb3JkZXIuaAppbmRleCA0MDJmZjQxLi5kNzdiNDhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9ieXRlb3JkZXIuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9ieXRlb3JkZXIuaApAQCAtMTIsOCArMTIsMTQgQEAKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBfX2J1aWx0aW5fYnN3YXBfMTYodW5zaWduZWQgc2hvcnQgeCk7CiAjZW5kaWYKIAorLyoKKyAqIGF2cjMyLWxpbnV4LWdjYyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gNC4yIGltcHJvcGVybHkgc2lnbi1leHRlbmRzCisgKiB0aGUgcmVzdWx0LgorICovCisjaWYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgMikKICNkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgX19idWlsdGluX2Jzd2FwXzMyKHgpCiAjZGVmaW5lIF9fYXJjaF9fc3dhYjE2KHgpIF9fYnVpbHRpbl9ic3dhcF8xNih4KQorI2VuZGlmCiAKICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKICMgZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvaW50Yy5oIGIvaW5jbHVkZS9hc20tYXZyMzIvaW50Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWM5Y2E3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL2ludGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0FWUjMyX0lOVENfSAotI2RlZmluZSBfX0FTTV9BVlIzMl9JTlRDX0gKLQotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi1zdHJ1Y3QgaXJxX2NvbnRyb2xsZXI7Ci1zdHJ1Y3QgaXJxYWN0aW9uOwotc3RydWN0IHB0X3JlZ3M7Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7Ci0KLS8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotc3RydWN0IGludGNfZGV2aWNlIHsKLQkvKiBpb3JlbWFwcGVkIGFkZHJlc3Mgb2YgY29uZmlndXJhdGlvbiBibG9jayAqLwotCXZvaWQgX19pb21lbSAqcmVnczsKLQotCS8qIHRoZSBwaHlzaWNhbCBkZXZpY2UgKi8KLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyogTnVtYmVyIG9mIGludGVycnVwdCBsaW5lcyBwZXIgZ3JvdXAuICovCi0JdW5zaWduZWQgaW50IGlycXNfcGVyX2dyb3VwOwotCi0JLyogVGhlIGhpZ2hlc3QgZ3JvdXAgSUQgKyAxICovCi0JdW5zaWduZWQgaW50IG5yX2dyb3VwczsKLQotCS8qCi0JICogQml0ZmllbGQgaW5kaWNhdGluZyB3aGljaCBncm91cHMgYXJlIGFjdHVhbGx5IGluIHVzZS4gIFRoZQotCSAqIHNpemUgb2YgdGhlIGFycmF5IGlzCi0JICogY2VpbChncm91cF9tYXggLyAoOCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkuCi0JICovCi0JdW5zaWduZWQgaW50IGdyb3VwX21hc2tbXTsKLX07Ci0KLXN0cnVjdCBpcnFfY29udHJvbGxlcl9jbGFzcyB7Ci0JLyoKLQkgKiBBIHNob3J0IG5hbWUgaWRlbnRpZnlpbmcgdGhpcyBraW5kIG9mIGNvbnRyb2xsZXIuCi0JICovCi0JY29uc3QgY2hhciAqdHlwZW5hbWU7Ci0JLyoKLQkgKiBIYW5kbGUgdGhlIElSUS4gIE11c3QgZG8gYW55IG5lY2Vzc2FyeSBhY2tpbmcgYW5kIG1hc2tpbmcuCi0JICovCi0JaXJxcmV0dXJuX3QgKCpoYW5kbGUpKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCS8qCi0JICogUmVnaXN0ZXIgYSBuZXcgSVJRIGhhbmRsZXIuCi0JICovCi0JaW50ICgqc2V0dXApKHN0cnVjdCBpcnFfY29udHJvbGxlciAqY3RybCwgdW5zaWduZWQgaW50IGlycSwKLQkJICAgICBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOwotCS8qCi0JICogVW5yZWdpc3RlciBhIElSUSBoYW5kbGVyLgotCSAqLwotCXZvaWQgKCpmcmVlKShzdHJ1Y3QgaXJxX2NvbnRyb2xsZXIgKmN0cmwsIHVuc2lnbmVkIGludCBpcnEsCi0JCSAgICAgdm9pZCAqZGV2X2lkKTsKLQkvKgotCSAqIE1hc2sgdGhlIElSUSBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuCi0JICovCi0Jdm9pZCAoKm1hc2spKHN0cnVjdCBpcnFfY29udHJvbGxlciAqY3RybCwgdW5zaWduZWQgaW50IGlycSk7Ci0JLyoKLQkgKiBVbm1hc2sgdGhlIElSUSBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuCi0JICovCi0Jdm9pZCAoKnVubWFzaykoc3RydWN0IGlycV9jb250cm9sbGVyICpjdHJsLCB1bnNpZ25lZCBpbnQgaXJxKTsKLQkvKgotCSAqIFNldCB0aGUgdHlwZSBvZiB0aGUgSVJRLiBTZWUgYmVsb3cgZm9yIHBvc3NpYmxlIHR5cGVzLgotCSAqIFJldHVybiAtRUlOVkFMIGlmIGEgZ2l2ZW4gdHlwZSBpcyBub3Qgc3VwcG9ydGVkCi0JICovCi0JaW50ICgqc2V0X3R5cGUpKHN0cnVjdCBpcnFfY29udHJvbGxlciAqY3RybCwgdW5zaWduZWQgaW50IGlycSwKLQkJCXVuc2lnbmVkIGludCB0eXBlKTsKLQkvKgotCSAqIFJldHVybiB0aGUgSVJRIHR5cGUgY3VycmVudGx5IHNldAotCSAqLwotCXVuc2lnbmVkIGludCAoKmdldF90eXBlKShzdHJ1Y3QgaXJxX2NvbnRyb2xsZXIgKmN0cmwsIHVuc2lnbmVkIGludCBpcnEpOwotfTsKLQotc3RydWN0IGlycV9jb250cm9sbGVyIHsKLQlzdHJ1Y3QgaXJxX2NvbnRyb2xsZXJfY2xhc3MgKmNsYXNzOwotCXVuc2lnbmVkIGludCBpcnFfZ3JvdXA7Ci0JdW5zaWduZWQgaW50IGZpcnN0X2lycTsKLQl1bnNpZ25lZCBpbnQgbnJfaXJxczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1zdHJ1Y3QgaW50Y19ncm91cF9kZXNjIHsKLQlzdHJ1Y3QgaXJxX2NvbnRyb2xsZXIgKmN0cmw7Ci0JaXJxcmV0dXJuX3QgKCpoYW5kbGUpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmRldl9pZDsKLQljb25zdCBjaGFyICpkZXZuYW1lOwotfTsKLQotLyoKLSAqIFRoZSBpbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlci4gIERlZmluZWQgaW4gYm9hcmQvcGFydC1zcGVjaWZpYwotICogZGV2aWNlcy5jLgotICogVE9ETzogU2hvdWxkIHByb2JhYmx5IGJlIGRlZmluZWQgcGVyLWNwdS4KLSAqLwotZXh0ZXJuIHN0cnVjdCBpbnRjX2RldmljZSBpbnRjOwotCi1leHRlcm4gaW50IHJlcXVlc3RfaW50ZXJuYWxfaXJxKHVuc2lnbmVkIGludCBpcnEsCi0JCQkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCi0JCQkJdW5zaWduZWQgbG9uZyBpcnFmbGFncywKLQkJCQljb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOwotZXh0ZXJuIHZvaWQgZnJlZV9pbnRlcm5hbF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIE9ubHkgdXNlZCBieSB0aW1lX2luaXQoKSAqLwotZXh0ZXJuIGludCBzZXR1cF9pbnRlcm5hbF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGludGNfZ3JvdXBfZGVzYyAqZGVzYyk7Ci0KLS8qCi0gKiBTZXQgaW50ZXJydXB0IHByaW9yaXR5IGZvciBhIGdpdmVuIGdyb3VwLiBgZ3JvdXAnIGNhbiBiZSBmb3VuZCBieQotICogdXNpbmcgaXJxX3RvX2dyb3VwKGlycSkuIFByaW9yaXR5IGNhbiBiZSBmcm9tIDAgKGxvd2VzdCkgdG8gMwotICogKGhpZ2hlc3QpLiBIaWdoZXItcHJpb3JpdHkgaW50ZXJydXB0cyB3aWxsIHByZWVtcHQgbG93ZXItcHJpb3JpdHkKLSAqIGludGVycnVwdHMgKHVubGVzcyBpbnRlcnJ1cHRzIGFyZSBtYXNrZWQgZ2xvYmFsbHkpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGNvbmZsaWN0cyB3aXRoaW4gYSBncm91cC4KLSAqLwotZXh0ZXJuIGludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgZ3JvdXAsCi0JCQkgICAgIHVuc2lnbmVkIGludCBwcmlvcml0eSk7Ci0KLS8qCi0gKiBSZXR1cm5zIGEgYml0bWFzayBvZiBwZW5kaW5nIGludGVycnVwdHMgaW4gYSBncm91cC4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50Y19nZXRfcGVuZGluZyh1bnNpZ25lZCBpbnQgZ3JvdXApOwotCi0vKgotICogUmVnaXN0ZXIgYSBuZXcgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXIuICBSZXR1cm5zIHRoZSBmaXJzdAotICogZXh0ZXJuYWwgSVJRIG51bWJlciB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSBuZXcgY29udHJvbGxlci4KLSAqLwotZXh0ZXJuIGludCBpbnRjX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IGlycV9jb250cm9sbGVyICpjdHJsKTsKLQotI2VuZGlmIC8qIF9fQVNNX0FWUjMyX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvaXJxLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9pcnEuaAppbmRleCA5MzE1NzI0Li5jNTYzYjc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9pcnEuaApAQCAtMTQsNiArMTQsMTEgQEAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogaW50IG5taV9lbmFibGUodm9pZCk7CiB2b2lkIG5taV9kaXNhYmxlKHZvaWQpOworCisvKgorICogUmV0dXJucyBhIGJpdG1hc2sgb2YgcGVuZGluZyBpbnRlcnJ1cHRzIGluIGEgZ3JvdXAuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGludGNfZ2V0X3BlbmRpbmcodW5zaWduZWQgaW50IGdyb3VwKTsKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQVZSMzJfSU9DVExTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2t2bS5oIGIvaW5jbHVkZS9hc20tYXZyMzIva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1Nzc3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL2t2bS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0xJTlVYX0tWTV9BVlIzMl9ICisjZGVmaW5lIF9fTElOVVhfS1ZNX0FWUjMyX0gKKworLyogYXZyMzIgZG9lcyBub3Qgc3VwcG9ydCBLVk0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9wYWdlLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9wYWdlLmgKaW5kZXggNTU4Mjk2OC4uY2JiYzVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL3BhZ2UuaApAQCAtOCwxMyArOCwxMSBAQAogI2lmbmRlZiBfX0FTTV9BVlIzMl9QQUdFX0gKICNkZWZpbmUgX19BU01fQVZSMzJfUEFHRV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCTEyCi0jaWZkZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIFBBR0VfU0laRQkoMSA8PCBQQUdFX1NISUZUKQotI2Vsc2UKLSNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKLSNlbmRpZgorI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLCBVTCkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKICNkZWZpbmUgUFRFX01BU0sJUEFHRV9NQVNLCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL3BndGFibGUuaAppbmRleCAwMThmNmUyLi4zYWU3YjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvcGd0YWJsZS5oCkBAIC0xNTcsNiArMTU3LDcgQEAKICNkZWZpbmUgX1BBR0VfUyh4KQlfUEFHRV9OT1JNQUwoeCkKIAogI2RlZmluZSBQQUdFX0NPUFkJX1BBR0VfUChQQUdFX1dSSVRFIHwgUEFHRV9SRUFEKQorI2RlZmluZSBQQUdFX1NIQVJFRAlfUEFHRV9TKFBBR0VfV1JJVEUgfCBQQUdFX1JFQUQpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9zZW1hcGhvcmUuaAppbmRleCBmZWFmMWQ0Li5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9zZW1hcGhvcmUuaApAQCAtMSwxMDggKzEgQEAKLS8qCi0gKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbgotICoKLSAqIEJhc2VkIG9uIGluY2x1ZGUvYXNtLWkzODYvc2VtYXBob3JlLmgKLSAqICAgQ29weXJpZ2h0IChDKSAxOTk2IExpbnVzIFRvcnZhbGRzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2lmbmRlZiBfX0FTTV9BVlIzMl9TRU1BUEhPUkVfSAotI2RlZmluZSBfX0FTTV9BVlIzMl9TRU1BUEhPUkVfSAotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKLQlzZW0tPnNsZWVwZXJzID0gMDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAwKTsKLX0KLQotdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1pbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotCi0vKgotICogVGhpcyBpcyB1Z2x5LCBidXQgd2Ugd2FudCB0aGUgZGVmYXVsdCBjYXNlIHRvIGZhbGwgdGhyb3VnaC4KLSAqICJfX2Rvd25fZmFpbGVkIiBpcyBhIHNwZWNpYWwgYXNtIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgQwotICogcm91dGluZSB0aGF0IGFjdHVhbGx5IHdhaXRzLiBTZWUgYXJjaC9pMzg2L2tlcm5lbC9zZW1hcGhvcmUuYwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuICgmc2VtLT5jb3VudCkgPCAwKSkKLQkJX19kb3duIChzZW0pOwotfQotCi0vKgotICogSW50ZXJydXB0aWJsZSB0cnkgdG8gYWNxdWlyZSBhIHNlbWFwaG9yZS4gIElmIHdlIG9idGFpbmVkCi0gKiBpdCwgcmV0dXJuIHplcm8uICBJZiB3ZSB3ZXJlIGludGVycnVwdGVkLCByZXR1cm5zIC1FSU5UUgotICovCi1zdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuICgmc2VtLT5jb3VudCkgPCAwKSkKLQkJcmV0ID0gX19kb3duX2ludGVycnVwdGlibGUgKHNlbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIE5vbi1ibG9ja2luZ2x5IGF0dGVtcHQgdG8gZG93bigpIGEgc2VtYXBob3JlLgotICogUmV0dXJucyB6ZXJvIGlmIHdlIGFjcXVpcmVkIGl0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJldHVybiBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZzZW0tPmNvdW50KSA8IDA7Ci19Ci0KLS8qCi0gKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCi0gKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgotICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KLSAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaWYgKHVubGlrZWx5KGF0b21pY19pbmNfcmV0dXJuICgmc2VtLT5jb3VudCkgPD0gMCkpCi0JCV9fdXAgKHNlbSk7Ci19Ci0KLSNlbmRpZiAvKl9fQVNNX0FWUjMyX1NFTUFQSE9SRV9IICovCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2FlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9zZXJpYWwuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9BU01fU0VSSUFMX0gKKyNkZWZpbmUgX0FTTV9TRVJJQUxfSAorCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgorICoKKyAqIEl0J2QgYmUgbmljZSBpZiBzb21lb25lIGJ1aWx0IGEgc2VyaWFsIGNhcmQgd2l0aCBhIDI0LjU3NiBNSHoKKyAqIGNsb2NrLCBzaW5jZSB0aGUgMTY1NTBBIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgYSB0b3Agc3BlZWQgb2YgMS41CisgKiBtZWdhYml0cy9zZWNvbmQ7IGJ1dCB0aGlzIHJlcXVpcmVzIHRoZSBmYXN0ZXIgY2xvY2suCisgKi8KKyNkZWZpbmUgQkFTRV9CQVVEICgxODQzMjAwIC8gMTYpCisKKyNlbmRpZiAvKiBfQVNNX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi94b3IuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Yzg3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi94b3IuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX0FTTV9YT1JfSAorI2RlZmluZSBfQVNNX1hPUl9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy94b3IuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9kbWEuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2RtYS5oCmluZGV4IDVhYmFhMmMuLjE2ZDQ5MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2RtYS5oCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9ncHRpbWVycy5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vZ3B0aW1lcnMuaAppbmRleCA4MjY1ZWE0Li40ZjMxOGYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9ncHRpbWVycy5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2dwdGltZXJzLmgKQEAgLTEsMTIgKzEsMTEgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS9iZjV4eF90aW1lcnMuaAorICogZ3B0aW1lcnMuaCAtIEJsYWNrZmluIEdlbmVyYWwgUHVycG9zZSBUaW1lciBzdHJ1Y3RzL2RlZmluZXMvcHJvdG90eXBlcwogICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbWFqb3IgRGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMKLSAqIHVzZWQgZm9yIEdlbmVyYWwgUHVycG9zZSBUaW1lciBJbXBsZW1lbnRhdGlvbiBpbiBCRjV4eAotICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNSBKb2huIERlSG9yaXR5CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSGVsbGEgQWdsYWlhIEdtYkggKGF3ZUBhZ2xhaWEtZ21iaC5kZSkKICAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fVElNRVJTX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9pZGUuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lkZS5oCmluZGV4IDEyMWUyNzIuLjViODhkZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lkZS5oCkBAIC0xOSwxMCArMTksNiBAQAogCiAjZGVmaW5lIE1BWF9IV0lGUwkxCiAKLS8qIExlZ2FjeSAuLi4gQkxLX0RFVl9JREVDUyAqLwotI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwotCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lycS5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vaXJxLmgKaW5kZXggNjU0ODBkYS4uODZiNjc4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vaXJxLmgKQEAgLTY3LDQgKzY3LDYgQEAKICNkZWZpbmUgTk9fSVJRICgodW5zaWduZWQgaW50KSgtMSkpCiAjZW5kaWYKIAorI2RlZmluZSBTSUNfU1lTSVJRKGlycSkJKGlycSAtIChJUlFfQ09SRVRNUiArIDEpKQorCiAjZW5kaWYJCQkJLyogX0JGSU5fSVJRX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9rdm0uaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2t2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDc3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fQkxBQ0tGSU5fSAorI2RlZmluZSBfX0xJTlVYX0tWTV9CTEFDS0ZJTl9ICisKKy8qIGJsYWNrZmluIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZmluX3NlcmlhbF81eHguaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggMTVkYmMyMS4uYzA2OTRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZmluX3NlcmlhbF81eHguaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0yMyw3ICsyMyw2IEBACiAjZGVmaW5lIFVBUlRfR0VUX0RMSCh1YXJ0KQliZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExIKSkKICNkZWZpbmUgVUFSVF9HRVRfSUlSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0lJUikpCiAjZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQotI2RlZmluZSBVQVJUX0dFVF9MU1IodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSKSkKICNkZWZpbmUgVUFSVF9HRVRfR0NUTCh1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0dDVEwpKQogCiAjZGVmaW5lIFVBUlRfUFVUX0NIQVIodWFydCwgdikgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1RIUiksIHYpCkBAIC01OCw2ICs1Nyw3IEBACiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCB7CiAJc3RydWN0IHVhcnRfcG9ydCBwb3J0OwogCXVuc2lnbmVkIGludCBvbGRfc3RhdHVzOworCXVuc2lnbmVkIGludCBsc3I7CiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQogCWludCB0eF9kb25lOwogCWludCB0eF9jb3VudDsKQEAgLTY3LDE1ICs2NywzMSBAQAogCXVuc2lnbmVkIGludCB0eF9kbWFfY2hhbm5lbDsKIAl1bnNpZ25lZCBpbnQgcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X2RtYV93b3JrcXVldWU7Ci0jZWxzZQotCXN0cnVjdCB3b3JrX3N0cnVjdCBjdHNfd29ya3F1ZXVlOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUworCXN0cnVjdCB3b3JrX3N0cnVjdCBjdHNfd29ya3F1ZXVlOwogCWludCBjdHNfcGluOwogCWludCBydHNfcGluOwogI2VuZGlmCiB9OwogCisvKiBUaGUgaGFyZHdhcmUgY2xlYXJzIHRoZSBMU1IgYml0cyB1cG9uIHJlYWQsIHNvIHdlIG5lZWQgdG8gY2FjaGUKKyAqIHNvbWUgb2YgdGhlIG1vcmUgZnVuIGJpdHMgaW4gc29mdHdhcmUgc28gdGhleSBkb24ndCBnZXQgbG9zdAorICogd2hlbiBjaGVja2luZyB0aGUgTFNSIGluIG90aGVyIGNvZGUgcGF0aHMgKFRYKS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgVUFSVF9HRVRfTFNSKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQoreworCXVuc2lnbmVkIGludCBsc3IgPSBiZmluX3JlYWQxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSKTsKKwl1YXJ0LT5sc3IgfD0gKGxzciAmIChCSXxGRXxQRXxPRSkpOworCXJldHVybiBsc3IgfCB1YXJ0LT5sc3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBVQVJUX0NMRUFSX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKK3sKKwl1YXJ0LT5sc3IgPSAwOworCWJmaW5fd3JpdGUxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSLCAtMSk7Cit9CisKIHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IGJmaW5fc2VyaWFsX3BvcnRzW05SX1BPUlRTXTsKIHN0cnVjdCBiZmluX3NlcmlhbF9yZXMgewogCXVuc2lnbmVkIGxvbmcgdWFydF9iYXNlX2FkZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2JmaW5fc2VyaWFsXzV4eC5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9iZmluX3NlcmlhbF81eHguaAppbmRleCA3ODcxZDQzLi5iNmY1MTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTIzLDcgKzIzLDYgQEAKICNkZWZpbmUgVUFSVF9HRVRfRExIKHVhcnQpCWJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9ETEgpKQogI2RlZmluZSBVQVJUX0dFVF9JSVIodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUlSKSkKICNkZWZpbmUgVUFSVF9HRVRfTENSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xDUikpCi0jZGVmaW5lIFVBUlRfR0VUX0xTUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IpKQogI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCkpCiAKICNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLHYpCkBAIC00Niw2ICs0NSw3IEBACiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCB7CiAgICAgICAgIHN0cnVjdCB1YXJ0X3BvcnQgICAgICAgIHBvcnQ7CiAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIG9sZF9zdGF0dXM7CisJdW5zaWduZWQgaW50IGxzcjsKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BCiAJaW50CQkJdHhfZG9uZTsKIAlpbnQJCQl0eF9jb3VudDsKQEAgLTU2LDE0ICs1NiwzNCBAQAogCXVuc2lnbmVkIGludAkJcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0CXR4X2RtYV93b3JrcXVldWU7CiAjZWxzZQotCXN0cnVjdCB3b3JrX3N0cnVjdCAJY3RzX3dvcmtxdWV1ZTsKKyMgaWYgQU5PTUFMWV8wNTAwMDIzMAorCXVuc2lnbmVkIGludCBhbm9tYWx5X3RocmVzaG9sZDsKKyMgZW5kaWYKICNlbmRpZgogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgCWN0c193b3JrcXVldWU7CiAJaW50CQkJY3RzX3BpbjsKIAlpbnQJCQlydHNfcGluOwogI2VuZGlmCiB9OwogCisvKiBUaGUgaGFyZHdhcmUgY2xlYXJzIHRoZSBMU1IgYml0cyB1cG9uIHJlYWQsIHNvIHdlIG5lZWQgdG8gY2FjaGUKKyAqIHNvbWUgb2YgdGhlIG1vcmUgZnVuIGJpdHMgaW4gc29mdHdhcmUgc28gdGhleSBkb24ndCBnZXQgbG9zdAorICogd2hlbiBjaGVja2luZyB0aGUgTFNSIGluIG90aGVyIGNvZGUgcGF0aHMgKFRYKS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgVUFSVF9HRVRfTFNSKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQoreworCXVuc2lnbmVkIGludCBsc3IgPSBiZmluX3JlYWQxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSKTsKKwl1YXJ0LT5sc3IgfD0gKGxzciAmIChCSXxGRXxQRXxPRSkpOworCXJldHVybiBsc3IgfCB1YXJ0LT5sc3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBVQVJUX0NMRUFSX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKK3sKKwl1YXJ0LT5sc3IgPSAwOworCWJmaW5fd3JpdGUxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSLCAtMSk7Cit9CisKIHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IGJmaW5fc2VyaWFsX3BvcnRzW05SX1BPUlRTXTsKIHN0cnVjdCBiZmluX3NlcmlhbF9yZXMgewogCXVuc2lnbmVkIGxvbmcJdWFydF9iYXNlX2FkZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmaW5fc2VyaWFsXzV4eC5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZmluX3NlcmlhbF81eHguaAppbmRleCA4NmU0NWMzLi44ZmM2NzJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTIzLDcgKzIzLDYgQEAKICNkZWZpbmUgVUFSVF9HRVRfRExIKHVhcnQpCWJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9ETEgpKQogI2RlZmluZSBVQVJUX0dFVF9JSVIodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfSUlSKSkKICNkZWZpbmUgVUFSVF9HRVRfTENSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xDUikpCi0jZGVmaW5lIFVBUlRfR0VUX0xTUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IpKQogI2RlZmluZSBVQVJUX0dFVF9HQ1RMKHVhcnQpICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfR0NUTCkpCiAKICNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLHYpCkBAIC01OCw2ICs1Nyw3IEBACiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCB7CiAgICAgICAgIHN0cnVjdCB1YXJ0X3BvcnQgICAgICAgIHBvcnQ7CiAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIG9sZF9zdGF0dXM7CisJdW5zaWduZWQgaW50IGxzcjsKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BCiAJaW50CQkJdHhfZG9uZTsKIAlpbnQJCQl0eF9jb3VudDsKQEAgLTY3LDE1ICs2NywzMSBAQAogCXVuc2lnbmVkIGludAkJdHhfZG1hX2NoYW5uZWw7CiAJdW5zaWduZWQgaW50CQlyeF9kbWFfY2hhbm5lbDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfZG1hX3dvcmtxdWV1ZTsKLSNlbHNlCi0Jc3RydWN0IHdvcmtfc3RydWN0IAljdHNfd29ya3F1ZXVlOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUworCXN0cnVjdCB3b3JrX3N0cnVjdCAJY3RzX3dvcmtxdWV1ZTsKIAlpbnQJCWN0c19waW47CiAJaW50IAkJcnRzX3BpbjsKICNlbmRpZgogfTsKIAorLyogVGhlIGhhcmR3YXJlIGNsZWFycyB0aGUgTFNSIGJpdHMgdXBvbiByZWFkLCBzbyB3ZSBuZWVkIHRvIGNhY2hlCisgKiBzb21lIG9mIHRoZSBtb3JlIGZ1biBiaXRzIGluIHNvZnR3YXJlIHNvIHRoZXkgZG9uJ3QgZ2V0IGxvc3QKKyAqIHdoZW4gY2hlY2tpbmcgdGhlIExTUiBpbiBvdGhlciBjb2RlIHBhdGhzIChUWCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFVBUlRfR0VUX0xTUihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKK3sKKwl1bnNpZ25lZCBpbnQgbHNyID0gYmZpbl9yZWFkMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUik7CisJdWFydC0+bHNyIHw9IChsc3IgJiAoQkl8RkV8UEV8T0UpKTsKKwlyZXR1cm4gbHNyIHwgdWFydC0+bHNyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVUFSVF9DTEVBUl9MU1Ioc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCit7CisJdWFydC0+bHNyID0gMDsKKwliZmluX3dyaXRlMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiwgLTEpOworfQorCiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCBiZmluX3NlcmlhbF9wb3J0c1tOUl9QT1JUU107CiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nCXVhcnRfYmFzZV9hZGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9iZmluX3NlcmlhbF81eHguaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggMzc3MGFhMy4uN2U2MzM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9iZmluX3NlcmlhbF81eHguaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0yNCw2ICsyNCw4IEBACiAjZGVmaW5lIFVBUlRfR0VUX0xDUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MQ1IpKQogI2RlZmluZSBVQVJUX0dFVF9MU1IodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSKSkKICNkZWZpbmUgVUFSVF9HRVRfR0NUTCh1YXJ0KSAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0dDVEwpKQorI2RlZmluZSBVQVJUX0dFVF9NU1IodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTVNSKSkKKyNkZWZpbmUgVUFSVF9HRVRfTUNSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX01DUikpCiAKICNkZWZpbmUgVUFSVF9QVVRfQ0hBUih1YXJ0LHYpICAgYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9USFIpLHYpCiAjZGVmaW5lIFVBUlRfUFVUX0RMTCh1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfRExMKSx2KQpAQCAtMzIsNyArMzQsOSBAQAogI2RlZmluZSBVQVJUX1BVVF9ETEgodWFydCx2KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0RMSCksdikKICNkZWZpbmUgVUFSVF9QVVRfTFNSKHVhcnQsdikJYmZpbl93cml0ZTE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IpLHYpCiAjZGVmaW5lIFVBUlRfUFVUX0xDUih1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTENSKSx2KQorI2RlZmluZSBVQVJUX0NMRUFSX0xTUih1YXJ0KSAgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiksIC0xKQogI2RlZmluZSBVQVJUX1BVVF9HQ1RMKHVhcnQsdikgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0dDVEwpLHYpCisjZGVmaW5lIFVBUlRfUFVUX01DUih1YXJ0LHYpICAgIGJmaW5fd3JpdGUxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTUNSKSx2KQogCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fVUFSVDFfQ1RTUlRTKQogIyBkZWZpbmUgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwpAQCAtNjgsMTAgKzcyLDkgQEAKIAl1bnNpZ25lZCBpbnQJCXR4X2RtYV9jaGFubmVsOwogCXVuc2lnbmVkIGludAkJcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0CXR4X2RtYV93b3JrcXVldWU7Ci0jZWxzZQotCXN0cnVjdCB3b3JrX3N0cnVjdCAJY3RzX3dvcmtxdWV1ZTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgCWN0c193b3JrcXVldWU7CiAJaW50CQljdHNfcGluOwogCWludCAJCXJ0c19waW47CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmZpbl9zZXJpYWxfNXh4LmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IDc4NzFkNDMuLmI2ZjUxM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9iZmluX3NlcmlhbF81eHguaApAQCAtMjMsNyArMjMsNiBAQAogI2RlZmluZSBVQVJUX0dFVF9ETEgodWFydCkJYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0RMSCkpCiAjZGVmaW5lIFVBUlRfR0VUX0lJUih1YXJ0KSAgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9JSVIpKQogI2RlZmluZSBVQVJUX0dFVF9MQ1IodWFydCkgICAgICBiZmluX3JlYWQxNigoKHVhcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTENSKSkKLSNkZWZpbmUgVUFSVF9HRVRfTFNSKHVhcnQpICAgICAgYmZpbl9yZWFkMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUikpCiAjZGVmaW5lIFVBUlRfR0VUX0dDVEwodWFydCkgICAgIGJmaW5fcmVhZDE2KCgodWFydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9HQ1RMKSkKIAogI2RlZmluZSBVQVJUX1BVVF9DSEFSKHVhcnQsdikgICBiZmluX3dyaXRlMTYoKCh1YXJ0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1RIUiksdikKQEAgLTQ2LDYgKzQ1LDcgQEAKIHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IHsKICAgICAgICAgc3RydWN0IHVhcnRfcG9ydCAgICAgICAgcG9ydDsKICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgb2xkX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgbHNyOwogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKIAlpbnQJCQl0eF9kb25lOwogCWludAkJCXR4X2NvdW50OwpAQCAtNTYsMTQgKzU2LDM0IEBACiAJdW5zaWduZWQgaW50CQlyeF9kbWFfY2hhbm5lbDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfZG1hX3dvcmtxdWV1ZTsKICNlbHNlCi0Jc3RydWN0IHdvcmtfc3RydWN0IAljdHNfd29ya3F1ZXVlOworIyBpZiBBTk9NQUxZXzA1MDAwMjMwCisJdW5zaWduZWQgaW50IGFub21hbHlfdGhyZXNob2xkOworIyBlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUworCXN0cnVjdCB3b3JrX3N0cnVjdCAJY3RzX3dvcmtxdWV1ZTsKIAlpbnQJCQljdHNfcGluOwogCWludAkJCXJ0c19waW47CiAjZW5kaWYKIH07CiAKKy8qIFRoZSBoYXJkd2FyZSBjbGVhcnMgdGhlIExTUiBiaXRzIHVwb24gcmVhZCwgc28gd2UgbmVlZCB0byBjYWNoZQorICogc29tZSBvZiB0aGUgbW9yZSBmdW4gYml0cyBpbiBzb2Z0d2FyZSBzbyB0aGV5IGRvbid0IGdldCBsb3N0CisgKiB3aGVuIGNoZWNraW5nIHRoZSBMU1IgaW4gb3RoZXIgY29kZSBwYXRocyAoVFgpLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBVQVJUX0dFVF9MU1Ioc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCit7CisJdW5zaWduZWQgaW50IGxzciA9IGJmaW5fcmVhZDE2KHVhcnQtPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IpOworCXVhcnQtPmxzciB8PSAobHNyICYgKEJJfEZFfFBFfE9FKSk7CisJcmV0dXJuIGxzciB8IHVhcnQtPmxzcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIFVBUlRfQ0xFQVJfTFNSKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQoreworCXVhcnQtPmxzciA9IDA7CisJYmZpbl93cml0ZTE2KHVhcnQtPnBvcnQubWVtYmFzZSArIE9GRlNFVF9MU1IsIC0xKTsKK30KKwogc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgYmZpbl9zZXJpYWxfcG9ydHNbTlJfUE9SVFNdOwogc3RydWN0IGJmaW5fc2VyaWFsX3JlcyB7CiAJdW5zaWduZWQgbG9uZwl1YXJ0X2Jhc2VfYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmxhY2tmaW4uaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmxhY2tmaW4uaAppbmRleCAzNjI2MTdmLi4zYTE2ZGYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2JsYWNrZmluLmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9ibGFja2Zpbi5oCkBAIC00OSw3ICs0OSw4IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9GSU9fSU5FTigpIGJmaW5fcmVhZF9GSU8wX0lORU4oKQogI2RlZmluZSBiZmluX3dyaXRlX0ZJT19JTkVOKHZhbCkgYmZpbl93cml0ZV9GSU8wX0lORU4odmFsKQogCi0KKyNkZWZpbmUgU0lDX0lXUjAgU0lDQV9JV1IwCisjZGVmaW5lIFNJQ19JV1IxIFNJQ0FfSVdSMQogI2RlZmluZSBTSUNfSUFSMCBTSUNBX0lBUjAKICNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSU1BU0swIGJmaW5fd3JpdGVfU0lDQV9JTUFTSzAKICNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSU1BU0sxIGJmaW5fd3JpdGVfU0lDQV9JTUFTSzEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvY2RlZkJGNTYxLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2NkZWZCRjU2MS5oCmluZGV4IGQ2Njc4MTYuLjFiYzhkMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvY2RlZkJGNTYxLmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9jZGVmQkY1NjEuaApAQCAtNTU5LDYgKzU1OSw3IEBACiAjZGVmaW5lIGJmaW5fd3JpdGVfUFBJMF9DT05UUk9MKHZhbCkgICAgICAgICBiZmluX3dyaXRlMTYoUFBJMF9DT05UUk9MLHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX1BQSTBfU1RBVFVTKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KFBQSTBfU1RBVFVTKQogI2RlZmluZSBiZmluX3dyaXRlX1BQSTBfU1RBVFVTKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTE2KFBQSTBfU1RBVFVTLHZhbCkKKyNkZWZpbmUgYmZpbl9jbGVhcl9QUEkwX1NUQVRVUygpICAgICAgICAgICAgIGJmaW5fcmVhZF9QUEkwX1NUQVRVUygpCiAjZGVmaW5lIGJmaW5fcmVhZF9QUEkwX0NPVU5UKCkgICAgICAgICAgICAgICBiZmluX3JlYWQxNihQUEkwX0NPVU5UKQogI2RlZmluZSBiZmluX3dyaXRlX1BQSTBfQ09VTlQodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTE2KFBQSTBfQ09VTlQsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfUFBJMF9ERUxBWSgpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoUFBJMF9ERUxBWSkKQEAgLTU3MCw2ICs1NzEsNyBAQAogI2RlZmluZSBiZmluX3dyaXRlX1BQSTFfQ09OVFJPTCh2YWwpICAgICAgICAgYmZpbl93cml0ZTE2KFBQSTFfQ09OVFJPTCx2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9QUEkxX1NUQVRVUygpICAgICAgICAgICAgICBiZmluX3JlYWQxNihQUEkxX1NUQVRVUykKICNkZWZpbmUgYmZpbl93cml0ZV9QUEkxX1NUQVRVUyh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihQUEkxX1NUQVRVUyx2YWwpCisjZGVmaW5lIGJmaW5fY2xlYXJfUFBJMV9TVEFUVVMoKSAgICAgICAgICAgICBiZmluX3JlYWRfUFBJMV9TVEFUVVMoKQogI2RlZmluZSBiZmluX3JlYWRfUFBJMV9DT1VOVCgpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoUFBJMV9DT1VOVCkKICNkZWZpbmUgYmZpbl93cml0ZV9QUEkxX0NPVU5UKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUxNihQUEkxX0NPVU5ULHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX1BQSTFfREVMQVkoKSAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KFBQSTFfREVMQVkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbW11X2NvbnRleHQuaAppbmRleCBiNWViNjc1Li5mNTVlYzNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21tdV9jb250ZXh0LmgKQEAgLTczLDcgKzczLDcgQEAKIAlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqdG1wOwogCiAJaWYgKGN1cnJlbnRfbDFfc3RhY2tfc2F2ZSA9PSBtbS0+Y29udGV4dC5sMV9zdGFja19zYXZlKQotCQljdXJyZW50X2wxX3N0YWNrX3NhdmUgPSAwOworCQljdXJyZW50X2wxX3N0YWNrX3NhdmUgPSBOVUxMOwogCWlmIChtbS0+Y29udGV4dC5sMV9zdGFja19zYXZlKQogCQlmcmVlX2wxc3RhY2soKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vc2VtYXBob3JlLWhlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDgyYjBkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL3NlbWFwaG9yZS1oZWxwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qIEJhc2VkIG9uIE02OEsgdmVyc2lvbiwJTGluZW8gSW5jLglNYXkgMjAwMSAqLwotCi0jaWZuZGVmIF9CRklOX1NFTUFQSE9SRV9IRUxQRVJfSAotI2RlZmluZSBfQkZJTl9TRU1BUEhPUkVfSEVMUEVSX0gKLQotLyoKLSAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMgaGVscGVyIGZ1bmN0aW9ucy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotCi0vKgotICogVGhlc2UgdHdvIF9tdXN0XyBleGVjdXRlIGF0b21pY2FsbHkgd3J0IGVhY2ggb3RoZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX29uZV9tb3JlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlhdG9taWNfaW5jKCZzZW0tPndha2luZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVybyhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JcmV0ID0gMDsKLQlpZiAoYXRvbWljX3JlYWQoJnNlbS0+d2FraW5nKSA+IDApIHsKLQkJYXRvbWljX2RlYygmc2VtLT53YWtpbmcpOwotCQlyZXQgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlOgotICoJMQlnb3QgdGhlIGxvY2sKLSAqCTAJZ28gdG8gc2xlZXAKLSAqCS1FSU5UUglpbnRlcnJ1cHRlZAotICovCi1zdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sCi0JCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZzZW0tPndha2luZykgPiAwKSB7Ci0JCWF0b21pY19kZWMoJnNlbS0+d2FraW5nKTsKLQkJcmV0ID0gMTsKLQl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKLQkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7Ci0JCXJldCA9IC1FSU5UUjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jazoKLSAqCTEJZmFpbGVkIHRvIGxvY2sKLSAqCTAJZ290IHRoZSBsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb190cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgcmV0ID0gMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZzZW0tPndha2luZykgPiAwKSB7Ci0JCWF0b21pY19kZWMoJnNlbS0+d2FraW5nKTsKLQkJcmV0ID0gMDsKLQl9IGVsc2UKLQkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZgkJCQkvKiBfQkZJTl9TRU1BUEhPUkVfSEVMUEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vc2VtYXBob3JlLmgKaW5kZXggNTMzZjkwZi4uZDliMjAzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vc2VtYXBob3JlLmgKQEAgLTEsMTA1ICsxIEBACi0jaWZuZGVmIF9CRklOX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9CRklOX1NFTUFQSE9SRV9ICi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLS8qCi0gKiBJbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLi4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqCi0gKiBCRklOIHZlcnNpb24gYnkgYWtiYXIgaHVzc2FpbiBMaW5lbyBJbmMgIEFwcmlsIDIwMDEKLSAqCi0gKi8KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLnNsZWVwZXJzCT0gMCwJCQkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKLXsKLQkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKnNlbSwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVgoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDApOwotfQotCi1hc21saW5rYWdlIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7Ci1hc21saW5rYWdlIGludCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOwotYXNtbGlua2FnZSBpbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKTsKLWFzbWxpbmthZ2Ugdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7Ci0KLWV4dGVybiBzcGlubG9ja190IHNlbWFwaG9yZV93YWtlX2xvY2s7Ci0KLS8qCi0gKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgotICogImRvd25fZmFpbGVkIiBpcyBhIHNwZWNpYWwgYXNtIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgQwotICogcm91dGluZSB0aGF0IGFjdHVhbGx5IHdhaXRzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnNlbS0+Y291bnQpIDwgMCkKLQkJX19kb3duKHNlbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQotCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotCXJldHVybiAocmV0KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQotCQlyZXQgPSBfX2Rvd25fdHJ5bG9jayhzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCi0gKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgotICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KLSAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApCi0JCV9fdXAoc2VtKTsKLX0KLQotI2VuZGlmCQkJCS8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmCQkJCS8qIF9CRklOX1NFTUFQSE9SRV9IICovCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL3VuaXN0ZC5oCmluZGV4IGU5ODE2NzMuLmMxOGEzOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL3VuaXN0ZC5oCkBAIC0zNjEsNyArMzYxLDcgQEAKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzNDYKICNkZWZpbmUgX19OUl91dGltZW5zYXQJCTM0NwogI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzNDgKLSNkZWZpbmUgX19OUl90aW1lcmZkCQkzNDkKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzNDkKICNkZWZpbmUgX19OUl9ldmVudGZkCQkzNTAKICNkZWZpbmUgX19OUl9wcmVhZDY0CQkzNTEKICNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMzUyCkBAIC0zNzAsOCArMzcwLDEwIEBACiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTM1NQogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMzU2CiAjZGVmaW5lIF9fTlJfc2VtdGltZWRvcAkJMzU3CisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCTM1OAorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkzNTkKIAotI2RlZmluZSBfX05SX3N5c2NhbGwJCTM1OAorI2RlZmluZSBfX05SX3N5c2NhbGwJCTM2MAogI2RlZmluZSBOUl9zeXNjYWxscwkJX19OUl9zeXNjYWxsCiAKIC8qIE9sZCBvcHRpb25hbCBzdHVmZiBubyBvbmUgYWN0dWFsbHkgdXNlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9rdm0uaCBiL2luY2x1ZGUvYXNtLWNyaXMva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2MGY1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMva3ZtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTElOVVhfS1ZNX0NSSVNfSAorI2RlZmluZSBfX0xJTlVYX0tWTV9DUklTX0gKKworLyogY3JpcyBkb2VzIG5vdCBzdXBwb3J0IEtWTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zZW1hcGhvcmUtaGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YmZlY2ExLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvc2VtYXBob3JlLWhlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyogJElkOiBzZW1hcGhvcmUtaGVscGVyLmgsdiAxLjMgMjAwMS8wMy8yNiAxNTowMDozMyBvcmphbmYgRXhwICQKLSAqCi0gKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzIGhlbHBlciBmdW5jdGlvbnMuIEdlbmVyaWMgdmVyc2lvbnMsIG5vCi0gKiBvcHRpbWl6YXRpb25zIHdoYXRzb2V2ZXIuLi4gCi0gKgotICovCi0KLSNpZm5kZWYgX0FTTV9TRU1BUEhPUkVfSEVMUEVSX0gKLSNkZWZpbmUgX0FTTV9TRU1BUEhPUkVfSEVMUEVSX0gKLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jZGVmaW5lIHJlYWQoYSkgKChhKS0+Y291bnRlcikKLSNkZWZpbmUgaW5jKGEpICgoKGEpLT5jb3VudGVyKSsrKQotI2RlZmluZSBkZWMoYSkgKCgoYSktPmNvdW50ZXIpLS0pCi0KLSNkZWZpbmUgY291bnRfaW5jKGEpICgoKihhKSkrKykKLQotLyoKLSAqIFRoZXNlIHR3byBfbXVzdF8gZXhlY3V0ZSBhdG9taWNhbGx5IHdydCBlYWNoIG90aGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWF0b21pY19pbmMoJnNlbS0+d2FraW5nKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChyZWFkKCZzZW0tPndha2luZykgPiAwKSB7Ci0JCWRlYygmc2VtLT53YWtpbmcpOwotCQlyZXQgPSAxOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLAotCQkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAocmVhZCgmc2VtLT53YWtpbmcpID4gMCkgewotCQlkZWMoJnNlbS0+d2FraW5nKTsKLQkJcmV0ID0gMTsKLQl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKLQkJaW5jKCZzZW0tPmNvdW50KTsKLQkJcmV0ID0gLUVJTlRSOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotICAgICAgICBpbnQgcmV0ID0gMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChyZWFkKCZzZW0tPndha2luZykgPD0gMCkKLQkJaW5jKCZzZW0tPmNvdW50KTsKLQllbHNlIHsKLQkJZGVjKCZzZW0tPndha2luZyk7Ci0JCXJldCA9IDA7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogX0FTTV9TRU1BUEhPUkVfSEVMUEVSX0ggKi8KLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zZW1hcGhvcmUuaAppbmRleCAzMWE0YWM0Li5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc2VtYXBob3JlLmgKQEAgLTEsMTMzICsxIEBACi0vKiAkSWQ6IHNlbWFwaG9yZS5oLHYgMS4zIDIwMDEvMDUvMDggMTM6NTQ6MDkgYmpvcm53IEV4cCAkICovCi0KLS8qIE9uIHRoZSBpMzg2IHRoZXNlIGFyZSBjb2RlZCBpbiBhc20sIHBlcmhhcHMgd2Ugc2hvdWxkIGFzIHdlbGwuIExhdGVyLi4gKi8KLQotI2lmbmRlZiBfQ1JJU19TRU1BUEhPUkVfSAotI2RlZmluZSBfQ1JJU19TRU1BUEhPUkVfSAotCi0jZGVmaW5lIFJXX0xPQ0tfQklBUyAgICAgICAgICAgICAweDAxMDAwMDAwCi0KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotLyoKLSAqIENSSVMgc2VtYXBob3JlcywgaW1wbGVtZW50ZWQgaW4gQy1vbmx5IHNvIGZhci4gCi0gKi8KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JYXRvbWljX3Qgd2FraW5nOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLndha2luZwkJPSBBVE9NSUNfSU5JVCgwKSwJCQkJXAotCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KSAgICBcCi19Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKLSAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkKLQotI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW1hX2luaXQoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQotewotCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigoKnNlbSksdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLSAgICAgICAgc2VtYV9pbml0KHNlbSwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotICAgICAgICBzZW1hX2luaXQoc2VtLCAwKTsKLX0KLQotZXh0ZXJuIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotZXh0ZXJuIGludCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWV4dGVybiBpbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotCi0vKiBub3RpY2UgLSB3ZSBwcm9iYWJseSBjYW4gZG8gY2xpL3N0aSBoZXJlIGluc3RlYWQgb2Ygc2F2aW5nICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZmFpbGVkOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCS8qIGF0b21pY2FsbHkgZGVjcmVtZW50IHRoZSBzZW1hcGhvcmVzIGNvdW50LCBhbmQgaWYgaXRzIG5lZ2F0aXZlLCB3ZSB3YWl0ICovCi0JY3Jpc19hdG9taWNfc2F2ZShzZW0sIGZsYWdzKTsKLQlmYWlsZWQgPSAtLShzZW0tPmNvdW50LmNvdW50ZXIpIDwgMDsKLQljcmlzX2F0b21pY19yZXN0b3JlKHNlbSwgZmxhZ3MpOwotCWlmKGZhaWxlZCkgewotCQlfX2Rvd24oc2VtKTsKLQl9Ci19Ci0KLS8qCi0gKiBUaGlzIHZlcnNpb24gd2FpdHMgaW4gaW50ZXJydXB0aWJsZSBzdGF0ZSBzbyB0aGF0IHRoZSB3YWl0aW5nCi0gKiBwcm9jZXNzIGNhbiBiZSBraWxsZWQuICBUaGUgZG93bl9pbnRlcnJ1cHRpYmxlIHJvdXRpbmUKLSAqIHJldHVybnMgbmVnYXRpdmUgZm9yIHNpZ25hbGxlZCBhbmQgemVybyBmb3Igc2VtYXBob3JlIGFjcXVpcmVkLgotICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZhaWxlZDsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0KLQkvKiBhdG9taWNhbGx5IGRlY3JlbWVudCB0aGUgc2VtYXBob3JlcyBjb3VudCwgYW5kIGlmIGl0cyBuZWdhdGl2ZSwgd2Ugd2FpdCAqLwotCWNyaXNfYXRvbWljX3NhdmUoc2VtLCBmbGFncyk7Ci0JZmFpbGVkID0gLS0oc2VtLT5jb3VudC5jb3VudGVyKSA8IDA7Ci0JY3Jpc19hdG9taWNfcmVzdG9yZShzZW0sIGZsYWdzKTsKLQlpZihmYWlsZWQpCi0JCWZhaWxlZCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci0JcmV0dXJuKGZhaWxlZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZhaWxlZDsKLQotCWNyaXNfYXRvbWljX3NhdmUoc2VtLCBmbGFncyk7Ci0JZmFpbGVkID0gLS0oc2VtLT5jb3VudC5jb3VudGVyKSA8IDA7Ci0JY3Jpc19hdG9taWNfcmVzdG9yZShzZW0sIGZsYWdzKTsKLQlpZihmYWlsZWQpCi0JCWZhaWxlZCA9IF9fZG93bl90cnlsb2NrKHNlbSk7Ci0JcmV0dXJuKGZhaWxlZCk7Ci0KLX0KLQotLyoKLSAqIE5vdGUhIFRoaXMgaXMgc3VidGxlLiBXZSBqdW1wIHRvIHdha2UgcGVvcGxlIHVwIG9ubHkgaWYKLSAqIHRoZSBzZW1hcGhvcmUgd2FzIG5lZ2F0aXZlICg9PSBzb21lYm9keSB3YXMgd2FpdGluZyBvbiBpdCkuCi0gKiBUaGUgZGVmYXVsdCBjYXNlIChubyBjb250ZW50aW9uKSB3aWxsIHJlc3VsdCBpbiBOTwotICoganVtcHMgZm9yIGJvdGggZG93bigpIGFuZCB1cCgpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsgIAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHdha2V1cDsKLQotCS8qIGF0b21pY2FsbHkgaW5jcmVtZW50IHRoZSBzZW1hcGhvcmVzIGNvdW50LCBhbmQgaWYgaXQgd2FzIG5lZ2F0aXZlLCB3ZSB3YWtlIHBlb3BsZSAqLwotCWNyaXNfYXRvbWljX3NhdmUoc2VtLCBmbGFncyk7Ci0Jd2FrZXVwID0gKysoc2VtLT5jb3VudC5jb3VudGVyKSA8PSAwOwotCWNyaXNfYXRvbWljX3Jlc3RvcmUoc2VtLCBmbGFncyk7Ci0JaWYod2FrZXVwKSB7Ci0JCV9fdXAoc2VtKTsKLQl9Ci19Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1jcmlzL3VhY2Nlc3MuaAppbmRleCA2OWQ0OGEyLi5lYTExZWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3VhY2Nlc3MuaApAQCAtMSw0MyArMSw2IEBACiAvKiAKICAqIEF1dGhvcnM6ICAgIEJqb3JuIFdlc2VuIChiam9ybndAYXhpcy5jb20pCiAgKgkgICAgICAgSGFucy1QZXRlciBOaWxzc29uIChocEBheGlzLmNvbSkKLSAqCi0gKiAkTG9nOiB1YWNjZXNzLmgsdiAkCi0gKiBSZXZpc2lvbiAxLjggIDIwMDEvMTAvMjkgMTM6MDE6NDggIGJqb3JudwotICogUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUgdG1wMiBpbiBzdHJubGVuX3VzZXIKLSAqCi0gKiBSZXZpc2lvbiAxLjcgIDIwMDEvMTAvMDIgMTI6NDQ6NTIgIGhwCi0gKiBBZGQgc3VwcG9ydCBmb3IgNjQtYml0IHB1dF91c2VyL2dldF91c2VyCi0gKgotICogUmV2aXNpb24gMS42ICAyMDAxLzEwLzAxIDE0OjUxOjE3ICBiam9ybncKLSAqIEFkZGVkIHJlZ2lzdGVyIHByZWZpeGVzIGFuZCByZW1vdmVkIHVuZGVyc2NvcmVzCi0gKgotICogUmV2aXNpb24gMS41ICAyMDAwLzEwLzI1IDAzOjMzOjIxICBocAotICogLSBQcm92aWRlIGltcGxlbWVudGF0aW9uIGZvciBldmVyeXRoaW5nIGVsc2UgYnV0IGdldF91c2VyIGFuZCBwdXRfdXNlcjsKLSAqICAgY29weWluZyBpbmxpbmUgdG8vZnJvbSB1c2VyIGZvciBjb25zdGFudCBsZW5ndGggMC4uMTYsIDIwLCAyNCwgYW5kCi0gKiAgIGNsZWFyaW5nIGZvciAwLi40LCA4LCAxMiwgMTYsIDIwLCAyNCwgc3RybmNweV9mcm9tX3VzZXIgYW5kIHN0cm5sZW5fdXNlcgotICogICBhbHdheXMgaW5saW5lLgotICogLSBDb25zdHJhaW50cyBmb3IgZGVzdGluYXRpb24gYWRkciBpbiBnZXRfdXNlciBjYW5ub3QgYmUgbWVtb3J5LCBvbmx5IHJlZy4KLSAqIC0gQ29ycmVjdCBsYWJlbHMgZm9yIFBDIGF0IGV4cGVjdGVkIGZhdWx0IHBvaW50cy4KLSAqIC0gTml0cyB3aXRoIGFzc2VtYmx5IGNvZGUuCi0gKiAtIERvbid0IHVzZSBzdGF0ZW1lbnQgZXhwcmVzc2lvbnMgd2l0aG91dCB2YWx1ZTsgdXNlICJkbyB7fSB3aGlsZSAoMCkiLgotICogLSBSZXR1cm4gY29ycmVjdCB2YWx1ZXMgZnJvbSBfX2dlbmVyaWNfLi4uIGZ1bmN0aW9ucy4KLSAqCi0gKiBSZXZpc2lvbiAxLjQgIDIwMDAvMDkvMTIgMTY6Mjg6MjUgIGJqb3JudwotICogKiBSZW1vdmVkIGNvbW1lbnRzIGZyb20gdGhlIGdldC9wdXQgdXNlciBhc20gY29kZQotICogKiBDb25zdHJhaW5zIGZvciBkZXN0aW5hdGlvbiBhZGRyIGluIHB1dF91c2VyIGNhbm5vdCBiZSBtZW1vcnksIG9ubHkgcmVnCi0gKgotICogUmV2aXNpb24gMS4zICAyMDAwLzA5LzEyIDE0OjMwOjIwICBiam9ybncKLSAqIE1BWF9BRERSX1VTRVIgZG9lcyBub3QgZXhpc3QgYW55bW9yZQotICoKLSAqIFJldmlzaW9uIDEuMiAgMjAwMC8wNy8xMyAxNTo1Mjo0OCAgYmpvcm53Ci0gKiBOZXcgdXNlci1hY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogUmV2aXNpb24gMS4xLjEuMSAgMjAwMC8wNy8xMCAxNjozMjozMSAgYmpvcm53Ci0gKiBDUklTIGFyY2hpdGVjdHVyZSwgd29ya2luZyBkcmFmdAotICoKLSAqCi0gKgogICovCiAKIC8qIEFzbTpzIGhhdmUgYmVlbiB0d2Vha2VkICh3aXRoaW4gdGhlIGRvbWFpbiBvZiBjb3JyZWN0bmVzcykgdG8gZ2l2ZQpAQCAtMjA5LDkgKzE3Miw5IEBACiAvKiBNb3JlIGNvbXBsZXggZnVuY3Rpb25zLiAgTW9zdCBhcmUgaW5saW5lLCBidXQgc29tZSBjYWxsIGZ1bmN0aW9ucyB0aGF0CiAgICBsaXZlIGluIGxpYi91c2VyY29weS5jICAqLwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2NvcHlfdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV91c2VyX3plcm9pbmcodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2RvX2NsZWFyX3VzZXIodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2NvcHlfdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2NvcHlfdXNlcl96ZXJvaW5nKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fZG9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbik7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19nZW5lcmljX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKQEAgLTI1Myw3ICsyMTYsNyBAQAogfQogCiAKLS8qIE5vdGUgdGhhdCBpZiB0aGVzZSBleHBhbmQgYXdmdWxseSBpZiBtYWRlIGludG8gc3dpdGNoIGNvbnN0cnVjdHMsIHNvCisvKiBOb3RlIHRoYXQgdGhlc2UgZXhwYW5kIGF3ZnVsbHkgaWYgbWFkZSBpbnRvIHN3aXRjaCBjb25zdHJ1Y3RzLCBzbwogICAgZG9uJ3QgZG8gdGhhdC4gICovCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpAQCAtNDA3LDE5ICszNzAsMjEgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcl9ub2NoZWNrKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCitfX2dlbmVyaWNfY29weV9mcm9tX3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlyZXR1cm4gX19jb3B5X3VzZXJfemVyb2luZyh0byxmcm9tLG4pOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fZ2VuZXJpY19jb3B5X3RvX3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQorX19nZW5lcmljX2NvcHlfdG9fdXNlcl9ub2NoZWNrKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG4pCiB7CiAJcmV0dXJuIF9fY29weV91c2VyKHRvLGZyb20sbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19nZW5lcmljX2NsZWFyX3VzZXJfbm9jaGVjayh2b2lkICp0bywgdW5zaWduZWQgbG9uZyBuKQorX19nZW5lcmljX2NsZWFyX3VzZXJfbm9jaGVjayh2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlyZXR1cm4gX19kb19jbGVhcl91c2VyKHRvLG4pOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKaW5kZXggMDA3Y2IxNi4uNzYzOThlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCkBAIC0zMjksMTIgKzMyOSwxMiBAQAogI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCTMyMgogI2RlZmluZSBfX05SX2V2ZW50ZmQJCTMyMwogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMzI0Ci0jZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lICAgIDMxNQotI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSAgICAzMTYKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzI1CisjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMyNgogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDMyNQorI2RlZmluZSBOUl9zeXNjYWxscyAzMjcKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3VuaXN0ZC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYva3ZtLmggYi9pbmNsdWRlL2FzbS1mcnYva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4YTRmMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fRlJWX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fRlJWX0gKKworLyogZnJ2IGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L21lbS1sYXlvdXQuaCBiL2luY2x1ZGUvYXNtLWZydi9tZW0tbGF5b3V0LmgKaW5kZXggODM1MzIyNS4uNzM0YTFkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L21lbS1sYXlvdXQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvbWVtLWxheW91dC5oCkBAIC02MCw3ICs2MCw3IEBACiAgKi8KICNkZWZpbmUgQlJLX0JBU0UJCQlfX1VMKDIgKiAxMDI0ICogMTAyNCArIFBBR0VfU0laRSkKICNkZWZpbmUgU1RBQ0tfVE9QCQkJX19VTCgyICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIFNUQUNLX1RPUF9NQVgJU1RBQ0tfVE9QCisjZGVmaW5lIFNUQUNLX1RPUF9NQVgJCQlfX1VMKDB4YzAwMDAwMDApCiAKIC8qIHVzZXJzcGFjZSBwcm9jZXNzIHNpemUgKi8KICNpZmRlZiBDT05GSUdfTU1VCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaAppbmRleCA2YzA2ODJlLi40ZTIxOTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKQEAgLTUwNywxMyArNTA3LDIyIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKIHsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAl1bnNpZ25lZCBsb25nIGFtcHI7Ci0JcGdkX3QgKnBnZSA9IHBnZF9vZmZzZXQoY3VycmVudC0+bW0sIGFkZHJlc3MpOwotCXB1ZF90ICpwdWUgPSBwdWRfb2Zmc2V0KHBnZSwgYWRkcmVzcyk7Ci0JcG1kX3QgKnBtZSA9IHBtZF9vZmZzZXQocHVlLCBhZGRyZXNzKTsKIAotCWFtcHIgPSBwbWUtPnN0ZVswXSAmIDB4ZmZmZmZmMDA7Ci0JYW1wciB8PSB4QU1QUnhfTCB8IHhBTVBSeF9TU18xNktiIHwgeEFNUFJ4X1MgfCB4QU1QUnhfQyB8IHhBTVBSeF9WOworCW1tID0gY3VycmVudC0+bW07CisJaWYgKG1tKSB7CisJCXBnZF90ICpwZ2UgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKKwkJcHVkX3QgKnB1ZSA9IHB1ZF9vZmZzZXQocGdlLCBhZGRyZXNzKTsKKwkJcG1kX3QgKnBtZSA9IHBtZF9vZmZzZXQocHVlLCBhZGRyZXNzKTsKKworCQlhbXByID0gcG1lLT5zdGVbMF0gJiAweGZmZmZmZjAwOworCQlhbXByIHw9IHhBTVBSeF9MIHwgeEFNUFJ4X1NTXzE2S2IgfCB4QU1QUnhfUyB8IHhBTVBSeF9DIHwKKwkJCXhBTVBSeF9WOworCX0gZWxzZSB7CisJCWFkZHJlc3MgPSBVTE9OR19NQVg7CisJCWFtcHIgPSAwOworCX0KIAogCWFzbSB2b2xhdGlsZSgibW92Z3MgJTAsc2NyMFxuIgogCQkgICAgICJtb3ZncyAlMCxzY3IxXG4iCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1mcnYvc2VtYXBob3JlLmgKaW5kZXggZDdhYWExOS4uZDliMjAzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zZW1hcGhvcmUuaApAQCAtMSwxNTUgKzEgQEAKLS8qIHNlbWFwaG9yZS5oOiBzZW1hcGhvcmVzIGZvciB0aGUgRlItVgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2lmbmRlZiBfQVNNX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9BU01fU0VNQVBIT1JFX0gKLQotI2RlZmluZSBSV19MT0NLX0JJQVMJCSAweDAxMDAwMDAwCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQotLyoKLSAqIHRoZSBzZW1hcGhvcmUgZGVmaW5pdGlvbgotICogLSBpZiBjb3VudGVyIGlzID4wIHRoZW4gdGhlcmUgYXJlIHRva2VucyBhdmFpbGFibGUgb24gdGhlIHNlbWFwaG9yZSBmb3IgZG93biB0byBjb2xsZWN0Ci0gKiAtIGlmIGNvdW50ZXIgaXMgPD0wIHRoZW4gdGhlcmUgYXJlIG5vIHNwYXJlIHRva2VucywgYW5kIGFueW9uZSB0aGF0IHdhbnRzIG9uZSBtdXN0IHdhaXQKLSAqIC0gaWYgd2FpdF9saXN0IGlzIG5vdCBlbXB0eSwgdGhlbiB0aGVyZSBhcmUgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIHRoZSBzZW1hcGhvcmUKLSAqLwotc3RydWN0IHNlbWFwaG9yZSB7Ci0JdW5zaWduZWQJCWNvdW50ZXI7Ci0Jc3BpbmxvY2tfdAkJd2FpdF9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwotI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKLQl1bnNpZ25lZAkJX19tYWdpYzsKLSNlbmRpZgotfTsKLQotI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKLSMgZGVmaW5lIF9fU0VNX0RFQlVHX0lOSVQobmFtZSkgLCAobG9uZykmKG5hbWUpLl9fbWFnaWMKLSNlbHNlCi0jIGRlZmluZSBfX1NFTV9ERUJVR19JTklUKG5hbWUpCi0jZW5kaWYKLQotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpIFwKLXsgY291bnQsIFNQSU5fTE9DS19VTkxPQ0tFRCwgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgX19TRU1fREVCVUdfSU5JVChuYW1lKSB9Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQotCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQotewotCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSkgX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKnNlbSwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWV4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotZXh0ZXJuIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLWV4dGVybiB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCi0JQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpa2VseShzZW0tPmNvdW50ZXIgPiAwKSkgewotCQlzZW0tPmNvdW50ZXItLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQl9Ci0JZWxzZSB7Ci0JCV9fZG93bihzZW0sIGZsYWdzKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKLQlDSEVDS19NQUdJQyhzZW0tPl9fbWFnaWMpOwotI2VuZGlmCi0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQlpZiAobGlrZWx5KHNlbS0+Y291bnRlciA+IDApKSB7Ci0JCXNlbS0+Y291bnRlci0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCX0KLQllbHNlIHsKLQkJcmV0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtLCBmbGFncyk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBub24tYmxvY2tpbmdseSBhdHRlbXB0IHRvIGRvd24oKSBhIHNlbWFwaG9yZS4KLSAqIC0gcmV0dXJucyB6ZXJvIGlmIHdlIGFjcXVpcmVkIGl0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc3VjY2VzcyA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCi0JQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7Ci0JaWYgKHNlbS0+Y291bnRlciA+IDApIHsKLQkJc2VtLT5jb3VudGVyLS07Ci0JCXN1Y2Nlc3MgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCXJldHVybiAhc3VjY2VzczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQotCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7Ci0jZW5kaWYKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCWlmICghbGlzdF9lbXB0eSgmc2VtLT53YWl0X2xpc3QpKQotCQlfX3VwKHNlbSk7Ci0JZWxzZQotCQlzZW0tPmNvdW50ZXIrKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzZW1fZ2V0Y291bnQoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXJldHVybiBzZW0tPmNvdW50ZXI7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc3ByLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWZydi9zcHItcmVncy5oCmluZGV4IGMyYTU0MWUuLjAxZTZhZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9zcHItcmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zcHItcmVncy5oCkBAIC05OSw5ICs5OSwyMyBAQAogI2RlZmluZSBUQlJfVFRfVFJBUDEJCSgweDgxIDw8IDQpCiAjZGVmaW5lIFRCUl9UVF9UUkFQMgkJKDB4ODIgPDwgNCkKICNkZWZpbmUgVEJSX1RUX1RSQVAzCQkoMHg4MyA8PCA0KQorI2RlZmluZSBUQlJfVFRfVFJBUDEyMAkJKDB4ZjggPDwgNCkKKyNkZWZpbmUgVEJSX1RUX1RSQVAxMjEJCSgweGY5IDw8IDQpCisjZGVmaW5lIFRCUl9UVF9UUkFQMTIyCQkoMHhmYSA8PCA0KQorI2RlZmluZSBUQlJfVFRfVFJBUDEyMwkJKDB4ZmIgPDwgNCkKKyNkZWZpbmUgVEJSX1RUX1RSQVAxMjQJCSgweGZjIDw8IDQpCisjZGVmaW5lIFRCUl9UVF9UUkFQMTI1CQkoMHhmZCA8PCA0KQogI2RlZmluZSBUQlJfVFRfVFJBUDEyNgkJKDB4ZmUgPDwgNCkKICNkZWZpbmUgVEJSX1RUX0JSRUFLCQkoMHhmZiA8PCA0KQogCisjZGVmaW5lIFRCUl9UVF9BVE9NSUNfQ01QWENIRzMyCVRCUl9UVF9UUkFQMTIwCisjZGVmaW5lIFRCUl9UVF9BVE9NSUNfWENIRzMyCVRCUl9UVF9UUkFQMTIxCisjZGVmaW5lIFRCUl9UVF9BVE9NSUNfWE9SCVRCUl9UVF9UUkFQMTIyCisjZGVmaW5lIFRCUl9UVF9BVE9NSUNfT1IJVEJSX1RUX1RSQVAxMjMKKyNkZWZpbmUgVEJSX1RUX0FUT01JQ19BTkQJVEJSX1RUX1RSQVAxMjQKKyNkZWZpbmUgVEJSX1RUX0FUT01JQ19TVUIJVEJSX1RUX1RSQVAxMjUKKyNkZWZpbmUgVEJSX1RUX0FUT01JQ19BREQJVEJSX1RUX1RSQVAxMjYKKwogI2RlZmluZSBfX2dldF9UQlIoKQkoeyB1bnNpZ25lZCBsb25nIHg7IGFzbSB2b2xhdGlsZSgibW92c2cgdGJyLCUwIiA6ICI9ciIoeCkpOyB4OyB9KQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCmluZGV4IGI0MDBjZWEuLmNiMzA3ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKQEAgLTE3OSwxOSArMTc5LDIzIEBACiAjZGVmaW5lIG1iKCkJCQlhc20gdm9sYXRpbGUgKCJtZW1iYXIiIDogOiA6Im1lbW9yeSIpCiAjZGVmaW5lIHJtYigpCQkJYXNtIHZvbGF0aWxlICgibWVtYmFyIiA6IDogOiJtZW1vcnkiKQogI2RlZmluZSB3bWIoKQkJCWFzbSB2b2xhdGlsZSAoIm1lbWJhciIgOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpCWRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJYmFycmllcigpCiAKLSNkZWZpbmUgc21wX21iKCkJCW1iKCkKLSNkZWZpbmUgc21wX3JtYigpCQlybWIoKQotI2RlZmluZSBzbXBfd21iKCkJCXdtYigpCi0KLSNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkJZG8ge30gd2hpbGUoMCkKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCQkJbWIoKQorI2RlZmluZSBzbXBfcm1iKCkJCQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJCQl3bWIoKQogI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCi0KLSNkZWZpbmUgSEFSRF9SRVNFVF9OT1coKQkJCVwKLWRvIHsJCQkJCQlcCi0JY2xpKCk7CQkJCQlcCi19IHdoaWxlKDEpCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCisJZG8geyB4Y2hnKCZ2YXIsICh2YWx1ZSkpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJCQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCQkJYmFycmllcigpCisjZGVmaW5lIHNtcF93bWIoKQkJCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgXAorCWRvIHsgdmFyID0gKHZhbHVlKTsgYmFycmllcigpOyB9IHdoaWxlICgwKQorI2VuZGlmCiAKIGV4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CiBleHRlcm4gdm9pZCBmcmVlX2luaXRtZW0odm9pZCk7CkBAIC0yMzQsNyArMjM4LDcgQEAKIAkJYnJlYWs7CQkJCQkJCQlcCiAJCQkJCQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJCQlcCi0JCV9feGdfb3JpZyA9IDA7CQkJCQkJCVwKKwkJX194Z19vcmlnID0gKF9fdHlwZW9mX18oX194Z19vcmlnKSkwOwkJCQlcCiAJCWFzbSB2b2xhdGlsZSgiYnJlYWsiKTsJCQkJCQlcCiAJCWJyZWFrOwkJCQkJCQkJXAogCX0JCQkJCQkJCQlcCkBAIC0yNTksNyArMjYzLDcgQEAKIAkJCQkJIChfX2ZvcmNlIHVpbnQzMl90KV9feGdfdGVzdCwJCVwKIAkJCQkJIChfX2ZvcmNlIHVpbnQzMl90KV9feGdfbmV3KTsgYnJlYWs7CVwKIAlkZWZhdWx0OgkJCQkJCQkJXAotCQlfX3hnX29yaWcgPSAwOwkJCQkJCQlcCisJCV9feGdfb3JpZyA9IChfX3R5cGVvZl9fKF9feGdfb3JpZykpMDsJCQkJXAogCQlhc20gdm9sYXRpbGUoImJyZWFrIik7CQkJCQkJXAogCQlicmVhazsJCQkJCQkJCVwKIAl9CQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1mcnYvdG9wb2xvZ3kuaAppbmRleCBhYmU3Mjk4Li45NDI3MjQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdG9wb2xvZ3kuaApAQCAtNSwxMCArNSw4IEBACiAKICNlcnJvciBOVU1BIG5vdCBzdXBwb3J0ZWQgeWV0CiAKLSNlbHNlIC8qICFDT05GSUdfTlVNQSAqLworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgogCi0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8KLQogI2VuZGlmIC8qIF9BU01fVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCmluZGV4IGU4Yzk4NjYuLmYxODRlYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKQEAgLTMyOCw5ICszMjgsMTEgQEAKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTkKICNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMyMAogI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMjEKLS8qICNkZWZpbmUgX19OUl90aW1lcmZkCQkzMjIgcmVtb3ZlZCAqLworI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCTMyMgogI2RlZmluZSBfX05SX2V2ZW50ZmQJCTMyMwogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMzI0CisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCTMyNQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkzMjYKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCmluZGV4IGZkOWRjZmQuLjkyYTZkOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KQEAgLTEsMyArMSw1IEBACitoZWFkZXIteSAgKz0ga3ZtLmgKKwogaWZlcSAoJCh3aWxkY2FyZCBpbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2Eub3V0LmgpLGluY2x1ZGUvYXNtLSQoU1JDQVJDSCkvYS5vdXQuaCkKIHVuaWZkZWYteSArPSBhLm91dC5oCiBlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKaW5kZXggNGI4ZDMxYy4uYjBlNjNjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCkBAIC0zMiw2ICszMiw4IEBACiAgKi8KICNpZm5kZWYgX19teV9jcHVfb2Zmc2V0CiAjZGVmaW5lIF9fbXlfY3B1X29mZnNldCBwZXJfY3B1X29mZnNldChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX1BSRUVNUFQKICNkZWZpbmUgbXlfY3B1X29mZnNldCBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpCiAjZWxzZQogI2RlZmluZSBteV9jcHVfb2Zmc2V0IF9fbXlfY3B1X29mZnNldApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90b3BvbG9neS5oCmluZGV4IDM0MmEyYTAuLmE2YWVhNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmgKQEAgLTI3LDYgKzI3LDggQEAKICNpZm5kZWYgX0FTTV9HRU5FUklDX1RPUE9MT0dZX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX1RPUE9MT0dZX0gKIAorI2lmbmRlZglDT05GSUdfTlVNQQorCiAvKiBPdGhlciBhcmNoaXRlY3R1cmVzIHdpc2hpbmcgdG8gdXNlIHRoaXMgc2ltcGxlIHRvcG9sb2d5IEFQSSBzaG91bGQgZmlsbAogICAgaW4gdGhlIGJlbG93IGZ1bmN0aW9ucyBhcyBhcHByb3ByaWF0ZSBpbiB0aGVpciBvd24gPGFzbS90b3BvbG9neS5oPiBmaWxlLiAqLwogI2lmbmRlZiBjcHVfdG9fbm9kZQpAQCAtNTIsNCArNTQsMTYgQEAKIAkJCQkpCiAjZW5kaWYKIAorI2VuZGlmCS8qIENPTkZJR19OVU1BICovCisKKy8qIHJldHVybnMgcG9pbnRlciB0byBjcHVtYXNrIGZvciBzcGVjaWZpZWQgbm9kZSAqLworI2lmbmRlZiBub2RlX3RvX2NwdW1hc2tfcHRyCisKKyNkZWZpbmUJbm9kZV90b19jcHVtYXNrX3B0cih2LCBub2RlKSAJCQkJCVwKKwkJY3B1bWFza190IF8jI3YgPSBub2RlX3RvX2NwdW1hc2sobm9kZSksICp2ID0gJl8jI3YKKworI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJCQkJXAorCQkJICBfIyN2ID0gbm9kZV90b19jcHVtYXNrKG5vZGUpCisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fR0VORVJJQ19UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggZjc4NGQyZi4uZjA1NDc3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMjM4LDYgKzIzOCw5IEBACiAJCSooLmtwcm9iZXMudGV4dCkJCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19rcHJvYmVzX3RleHRfZW5kKSA9IC47CiAKKy8qIFNlY3Rpb24gdXNlZCBmb3IgZWFybHkgaW5pdCAoaW4gLlMgZmlsZXMpICovCisjZGVmaW5lIEhFQURfVEVYVCAgKiguaGVhZC50ZXh0KQorCiAvKiBpbml0IGFuZCBleGl0IHNlY3Rpb24gaGFuZGxpbmcgKi8KICNkZWZpbmUgSU5JVF9EQVRBCQkJCQkJCVwKIAkqKC5pbml0LmRhdGEpCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2hhcmRpcnEuaAppbmRleCAxOGZhNzkzLi45ZDdmN2E3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvaGFyZGlycS5oCkBAIC0xMiw2ICsxMiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLwogCitleHRlcm4gdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKwogI2RlZmluZSBIQVJESVJRX0JJVFMJOAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvaXJxLmggYi9pbmNsdWRlL2FzbS1oODMwMC9pcnEuaAppbmRleCA1NmVlYzI4Li4xM2Q3YzYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9pcnEuaApAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAotI2lmIGRlZmluZWQoX19IODMwMEhfXykKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSDgzMDBIKQogI2RlZmluZSBOUl9JUlFTIDY0CiAjZGVmaW5lIEVYVF9JUlEwIDEyCiAjZGVmaW5lIEVYVF9JUlExIDEzCkBAIC0xNCwxNCArMTQsNiBAQAogI2RlZmluZSBFWFRfSVJRNiAxOAogI2RlZmluZSBFWFRfSVJRNyAxOQogI2RlZmluZSBFWFRfSVJRUyA1Ci0KLSNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KLSNkZWZpbmUgaDgzMDBfY2xlYXJfaXNyKGlycSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChpcnEgPj0gRVhUX0lSUTAgJiYgaXJxIDw9IEVYVF9JUlE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilJU1IgJj0gfigxIDw8IChpcnEgLSBFWFRfSVJRMCkpOyBcCi19IHdoaWxlKDApCi0KICNkZWZpbmUgSUVSX1JFR1MgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopSUVSCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfSDhTKQpAQCAtNDQsMTMgKzM2LDYgQEAKICNkZWZpbmUgRVhUX0lSUTE1IDMxCiAjZGVmaW5lIEVYVF9JUlFTIDE1CiAKLSNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KLSNkZWZpbmUgaDgzMDBfY2xlYXJfaXNyKGlycSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKGlycSA+PSBFWFRfSVJRMCAmJiBpcnEgPD0gRVhUX0lSUTE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSVNSICY9IH4oMSA8PCAoaXJxIC0gRVhUX0lSUTApKTsgXAotfSB3aGlsZSgwKQotCiAjZGVmaW5lIElFUl9SRUdTICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJRVIKICNlbmRpZgogCkBAIC01OSw0ICs0NCw2IEBACiAJcmV0dXJuIGlycTsKIH0KIAordHlwZWRlZiB2b2lkICgqaDgzMDBfdmVjdG9yKSh2b2lkKTsKKwogI2VuZGlmIC8qIF9IODMwMF9JUlFfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2t2bS5oIGIvaW5jbHVkZS9hc20taDgzMDAva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiZWQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2t2bS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0xJTlVYX0tWTV9IODMwMF9ICisjZGVmaW5lIF9fTElOVVhfS1ZNX0g4MzAwX0gKKworLyogaDgzMDAgZG9lcyBub3Qgc3VwcG9ydCBLVk0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUtaGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZWEzNmIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLWhlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotI2lmbmRlZiBfSDgzMDBfU0VNQVBIT1JFX0hFTFBFUl9ICi0jZGVmaW5lIF9IODMwMF9TRU1BUEhPUkVfSEVMUEVSX0gKLQotLyoKLSAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMgaGVscGVyIGZ1bmN0aW9ucy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqCi0gKiBiYXNlZCBvbgotICogbTY4ayB2ZXJzaW9uIGJ5IEFuZHJlYXMgU2Nod2FiCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KLS8qCi0gKiBUaGVzZSB0d28gX211c3RfIGV4ZWN1dGUgYXRvbWljYWxseSB3cnQgZWFjaCBvdGhlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHdha2Vfb25lX21vcmUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlhdG9taWNfaW5jKChhdG9taWNfdCAqKSZzZW0tPnNsZWVwZXJzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldCA9IDA7Ci0JaWYgKHNlbS0+c2xlZXBlcnMgPiAwKSB7Ci0JCXNlbS0+c2xlZXBlcnMtLTsKLQkJcmV0ID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZToKLSAqCTEJZ290IHRoZSBsb2NrCi0gKgkwCWdvIHRvIHNsZWVwCi0gKgktRUlOVFIJaW50ZXJydXB0ZWQKLSAqLwotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLAotCQkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSAwOwotCWlmIChzZW0tPnNsZWVwZXJzID4gMCkgewotCQlzZW0tPnNsZWVwZXJzLS07Ci0JCXJldCA9IDE7Ci0JfSBlbHNlIGlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7Ci0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCQlyZXQgPSAtRUlOVFI7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogd2FraW5nX25vbl96ZXJvX3RyeWxvY2s6Ci0gKgkxCWZhaWxlZCB0byBsb2NrCi0gKgkwCWdvdCB0aGUgbG9jawotICovCi1zdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSAxOwotCWlmIChzZW0tPnNsZWVwZXJzIDw9IDApCi0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCWVsc2UgewotCQlzZW0tPnNsZWVwZXJzLS07Ci0JCXJldCA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLmgKaW5kZXggZjNmZmZmOC4uZDliMjAzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLmgKQEAgLTEsMTkwICsxIEBACi0jaWZuZGVmIF9IODMwMF9TRU1BUEhPUkVfSAotI2RlZmluZSBfSDgzMDBfU0VNQVBIT1JFX0gKLQotI2RlZmluZSBSV19MT0NLX0JJQVMJCSAweDAxMDAwMDAwCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLS8qCi0gKiBJbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLi4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqCi0gKiBIOC8zMDAgdmVyc2lvbiBieSBZb3NoaW5vcmkgU2F0bwotICovCi0KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLnNsZWVwZXJzCT0gMCwJCQkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCpzZW0sIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDApOwotfQotCi1hc21saW5rYWdlIHZvaWQgX19kb3duX2ZhaWxlZCh2b2lkIC8qIHNwZWNpYWwgcmVnaXN0ZXIgY2FsbGluZyBjb252ZW50aW9uICovKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgIC8qIHBhcmFtcyBpbiByZWdpc3RlcnMgKi8pOwotYXNtbGlua2FnZSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOwotCi1hc21saW5rYWdlIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci0KLWV4dGVybiBzcGlubG9ja190IHNlbWFwaG9yZV93YWtlX2xvY2s7Ci0KLS8qCi0gKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgotICogImRvd25fZmFpbGVkIiBpcyBhIHNwZWNpYWwgYXNtIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgQwotICogcm91dGluZSB0aGF0IGFjdHVhbGx5IHdhaXRzLiBTZWUgYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJlZ2lzdGVyIGF0b21pY190ICpjb3VudCBhc20oImVyMCIpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCWNvdW50ID0gJihzZW0tPmNvdW50KTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInN0YyBjY3IscjNsXG5cdCIKLQkJIm9yYyAjMHg4MCxjY3Jcblx0IgotCQkibW92LmwgJTIsIGVyMVxuXHQiCi0JCSJkZWMubCAjMSxlcjFcblx0IgotCQkibW92LmwgZXIxLCUwXG5cdCIKLQkJImJwbCAxZlxuXHQiCi0JCSJsZGMgcjNsLGNjclxuXHQiCi0JCSJtb3YubCAlMSxlcjBcblx0IgotCQkianNyIEBfX19kb3duXG5cdCIKLQkJImJyYSAyZlxuIgotCQkiMTpcblx0IgotCQkibGRjIHIzbCxjY3JcbiIKLQkJIjI6IgotCQk6ICI9bSIoKmNvdW50KQotCQk6ICJnIihzZW0pLCJtIigqY291bnQpCi0JCTogImNjIiwgICJlcjEiLCAiZXIyIiwgImVyMyIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlyZWdpc3RlciBhdG9taWNfdCAqY291bnQgYXNtKCJlcjAiKTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0KLQljb3VudCA9ICYoc2VtLT5jb3VudCk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJzdGMgY2NyLHIxbFxuXHQiCi0JCSJvcmMgIzB4ODAsY2NyXG5cdCIKLQkJIm1vdi5sICUzLCBlcjJcblx0IgotCQkiZGVjLmwgIzEsZXIyXG5cdCIKLQkJIm1vdi5sIGVyMiwlMVxuXHQiCi0JCSJicGwgMWZcblx0IgotCQkibGRjIHIxbCxjY3Jcblx0IgotCQkibW92LmwgJTIsZXIwXG5cdCIKLQkJImpzciBAX19fZG93bl9pbnRlcnJ1cHRpYmxlXG5cdCIKLQkJImJyYSAyZlxuIgotCQkiMTpcblx0IgotCQkibGRjIHIxbCxjY3Jcblx0IgotCQkic3ViLmwgJTAsJTBcblx0IgotCQkiMjpcblx0IgotCQk6ICI9ciIgKGNvdW50KSwiPW0iICgqY291bnQpCi0JCTogImciKHNlbSksIm0iKCpjb3VudCkKLQkJOiAiY2MiLCAiZXIxIiwgImVyMiIsICJlcjMiKTsKLQlyZXR1cm4gKGludCljb3VudDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JcmVnaXN0ZXIgYXRvbWljX3QgKmNvdW50IGFzbSgiZXIwIik7Ci0KLQljb3VudCA9ICYoc2VtLT5jb3VudCk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJzdGMgY2NyLHIzbFxuXHQiCi0JCSJvcmMgIzB4ODAsY2NyXG5cdCIKLQkJIm1vdi5sICUzLGVyMlxuXHQiCi0JCSJkZWMubCAjMSxlcjJcblx0IgotCQkibW92LmwgZXIyLCUwXG5cdCIKLQkJImJwbCAxZlxuXHQiCi0JCSJsZGMgcjNsLGNjclxuXHQiCi0JCSJqbXAgQDNmXG5cdCIKLQkJTE9DS19TRUNUSU9OX1NUQVJUKCIuYWxpZ24gMlxuXHQiKQotCQkiMzpcblx0IgotCQkibW92LmwgJTIsZXIwXG5cdCIKLQkJImpzciBAX19fZG93bl90cnlsb2NrXG5cdCIKLQkJImptcCBAMmZcblx0IgotCQlMT0NLX1NFQ1RJT05fRU5ECi0JCSIxOlxuXHQiCi0JCSJsZGMgcjNsLGNjclxuXHQiCi0JCSJzdWIubCAlMSwlMVxuIgotCQkiMjoiCi0JCTogIj1tIiAoKmNvdW50KSwiPXIiKGNvdW50KQotCQk6ICJnIihzZW0pLCJtIigqY291bnQpCi0JCTogImNjIiwgImVyMSIsImVyMiIsICJlcjMiKTsKLQlyZXR1cm4gKGludCljb3VudDsKLX0KLQotLyoKLSAqIE5vdGUhIFRoaXMgaXMgc3VidGxlLiBXZSBqdW1wIHRvIHdha2UgcGVvcGxlIHVwIG9ubHkgaWYKLSAqIHRoZSBzZW1hcGhvcmUgd2FzIG5lZ2F0aXZlICg9PSBzb21lYm9keSB3YXMgd2FpdGluZyBvbiBpdCkuCi0gKiBUaGUgZGVmYXVsdCBjYXNlIChubyBjb250ZW50aW9uKSB3aWxsIHJlc3VsdCBpbiBOTwotICoganVtcHMgZm9yIGJvdGggZG93bigpIGFuZCB1cCgpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlyZWdpc3RlciBhdG9taWNfdCAqY291bnQgYXNtKCJlcjAiKTsKLQotCWNvdW50ID0gJihzZW0tPmNvdW50KTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInN0YyBjY3IscjNsXG5cdCIKLQkJIm9yYyAjMHg4MCxjY3Jcblx0IgotCQkibW92LmwgJTIsZXIxXG5cdCIKLQkJImluYy5sICMxLGVyMVxuXHQiCi0JCSJtb3YubCBlcjEsJTBcblx0IgotCQkibGRjIHIzbCxjY3Jcblx0IgotCQkic3ViLmwgZXIyLGVyMlxuXHQiCi0JCSJjbXAubCBlcjIsZXIxXG5cdCIKLQkJImJndCAxZlxuXHQiCi0JCSJtb3YubCAlMSxlcjBcblx0IgotCQkianNyIEBfX191cFxuIgotCQkiMToiCi0JCTogIj1tIigqY291bnQpCi0JCTogImciKHNlbSksIm0iKCpjb3VudCkKLQkJOiAiY2MiLCAiZXIxIiwgImVyMiIsICJlcjMiKTsKLX0KLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3VhY2Nlc3MuaAppbmRleCBlYmU1OGM2Li4zNTYwNjhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdWFjY2Vzcy5oCkBAIC05MSwxOSArOTEsMTYgQEAKICNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQkJCQkJXAogKHsJCQkJCQkJCVwKICAgICBpbnQgX19ndV9lcnIgPSAwOwkJCQkJCVwKLSAgICB0eXBlb2YoKihwdHIpKSBfX2d1X3ZhbCA9IDA7CQkJCVwKKyAgICB0eXBlb2YoKihwdHIpKSBfX2d1X3ZhbCA9ICpwdHI7CQkJCVwKICAgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCiAgICAgY2FzZSAxOgkJCQkJCQlcCiAgICAgY2FzZSAyOgkJCQkJCQlcCiAgICAgY2FzZSA0OgkJCQkJCQlcCi0JX19ndV92YWwgPSAqKHB0cik7CSAgICAgICAgICAgICAgICAJCVwKLQlicmVhazsJCQkJCQkJXAotICAgIGNhc2UgODoJCQkJCQkJXAotCW1lbWNweSgmX19ndV92YWwsIHB0ciwgc2l6ZW9mICgqKHB0cikpKTsgCQlcCisgICAgY2FzZSA4OiAJCQkJCQkJXAogCWJyZWFrOwkJCQkJCQlcCiAgICAgZGVmYXVsdDoJCQkJCQkJXAotCV9fZ3VfdmFsID0gMDsJCQkJCQlcCiAJX19ndV9lcnIgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJX19ndV92YWwgPSAwOwkJCQkJCVwKIAlicmVhazsJCQkJCQkJXAogICAgIH0JCQkJCQkJCVwKICAgICAoeCkgPSBfX2d1X3ZhbDsJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L0tidWlsZCBiL2luY2x1ZGUvYXNtLWlhNjQvS2J1aWxkCmluZGV4IDRhMWU0OGIuLmViMjRhM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvS2J1aWxkCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvS2J1aWxkCkBAIC0zLDcgKzMsNiBAQAogaGVhZGVyLXkgKz0gYnJlYWsuaAogaGVhZGVyLXkgKz0gZnB1LmgKIGhlYWRlci15ICs9IGZwc3dhLmgKLWhlYWRlci15ICs9IGdjY19pbnRyaW4uaAogaGVhZGVyLXkgKz0gaWE2NHJlZ3MuaAogaGVhZGVyLXkgKz0gaW50ZWxfaW50cmluLmgKIGhlYWRlci15ICs9IGludHJpbnNpY3MuaApAQCAtMTIsNSArMTEsNiBAQAogaGVhZGVyLXkgKz0gcnNlLmgKIGhlYWRlci15ICs9IHVjb250ZXh0LmgKIAordW5pZmRlZi15ICs9IGdjY19pbnRyaW4uaAogdW5pZmRlZi15ICs9IHBlcmZtb24uaAogdW5pZmRlZi15ICs9IHVzdGFjay5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FjcGkuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCmluZGV4IGNkMWNjMzkuLmZjZmFkMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL251bWEuaD4KIAogI2RlZmluZSBDT01QSUxFUl9ERVBFTkRFTlRfSU5UNjQJbG9uZwogI2RlZmluZSBDT01QSUxFUl9ERVBFTkRFTlRfVUlOVDY0CXVuc2lnbmVkIGxvbmcKQEAgLTExNSw3ICsxMTYsMTEgQEAKIGV4dGVybiB2b2lkIHNldF9jcGVpX3RhcmdldF9jcHUodW5zaWduZWQgaW50IGNwdSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGdldF9jcGVpX3RhcmdldF9jcHUodm9pZCk7CiBleHRlcm4gdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9IT1RQTFVHX0NQVQogZXh0ZXJuIGludCBhZGRpdGlvbmFsX2NwdXM7CisjZWxzZQorI2RlZmluZSBhZGRpdGlvbmFsX2NwdXMgMAorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCiAjaWYgTUFYX05VTU5PREVTID4gMjU2CkBAIC0xMjksNiArMTM0LDM0IEBACiAKICNkZWZpbmUgYWNwaV91bmxhenlfdGxiKHgpCiAKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCitleHRlcm4gY3B1bWFza190IGVhcmx5X2NwdV9wb3NzaWJsZV9tYXA7CisjZGVmaW5lIGZvcl9lYWNoX3Bvc3NpYmxlX2Vhcmx5X2NwdShjcHUpICBcCisJZm9yX2VhY2hfY3B1X21hc2soKGNwdSksIGVhcmx5X2NwdV9wb3NzaWJsZV9tYXApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJfY3B1X3NjYW5fZmluYWxpemUoaW50IG1pbl9jcHVzLCBpbnQgcmVzZXJ2ZV9jcHVzKQoreworCWludCBsb3dfY3B1LCBoaWdoX2NwdTsKKwlpbnQgY3B1OworCWludCBuZXh0X25pZCA9IDA7CisKKwlsb3dfY3B1ID0gY3B1c193ZWlnaHQoZWFybHlfY3B1X3Bvc3NpYmxlX21hcCk7CisKKwloaWdoX2NwdSA9IG1heChsb3dfY3B1LCBtaW5fY3B1cyk7CisJaGlnaF9jcHUgPSBtaW4oaGlnaF9jcHUgKyByZXNlcnZlX2NwdXMsIE5SX0NQVVMpOworCisJZm9yIChjcHUgPSBsb3dfY3B1OyBjcHUgPCBoaWdoX2NwdTsgY3B1KyspIHsKKwkJY3B1X3NldChjcHUsIGVhcmx5X2NwdV9wb3NzaWJsZV9tYXApOworCQlpZiAobm9kZV9jcHVpZFtjcHVdLm5pZCA9PSBOVU1BX05PX05PREUpIHsKKwkJCW5vZGVfY3B1aWRbY3B1XS5uaWQgPSBuZXh0X25pZDsKKwkJCW5leHRfbmlkKys7CisJCQlpZiAobmV4dF9uaWQgPj0gbnVtX29ubGluZV9ub2RlcygpKQorCQkJCW5leHRfbmlkID0gMDsKKwkJfQorCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfQUNQSV9OVU1BICovCisKICNlbmRpZiAvKl9fS0VSTkVMX18qLwogCiAjZW5kaWYgLypfQVNNX0FDUElfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2NwdXRpbWUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvY3B1dGltZS5oCmluZGV4IDcyNDAwYTcuLmY5YWJkZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvY3B1dGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvY3B1dGltZS5oCkBAIC0xLDYgKzEsMTEwIEBACisvKgorICogaW5jbHVkZS9hc20taWE2NC9jcHV0aW1lLmg6CisgKgkJRGVmaW5pdGlvbnMgZm9yIG1lYXN1cmluZyBjcHV0aW1lIG9uIGlhNjQgbWFjaGluZXMuCisgKgorICogQmFzZWQgb24gPGFzbS1wb3dlcnBjL2NwdXRpbWUuaD4uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEZVSklUU1UgTElNSVRFRAorICogQ29weXJpZ2h0IChDKSAyMDA3IEhpZGV0b3NoaSBTZXRvIDxzZXRvLmhpZGV0b3NoaUBqcC5mdWppdHN1LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIElmIHdlIGhhdmUgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcsIHdlIG1lYXN1cmUgY3B1IHRpbWUgaW4gbnNlYy4KKyAqIE90aGVyd2lzZSB3ZSBtZWFzdXJlIGNwdSB0aW1lIGluIGppZmZpZXMgdXNpbmcgdGhlIGdlbmVyaWMgZGVmaW5pdGlvbnMuCisgKi8KKwogI2lmbmRlZiBfX0lBNjRfQ1BVVElNRV9ICiAjZGVmaW5lIF9fSUE2NF9DUFVUSU1FX0gKIAorI2lmbmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKyNlbHNlCiAKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKwordHlwZWRlZiB1NjQgY3B1dGltZV90OwordHlwZWRlZiB1NjQgY3B1dGltZTY0X3Q7CisKKyNkZWZpbmUgY3B1dGltZV96ZXJvCQkJKChjcHV0aW1lX3QpMCkKKyNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4oKGNwdXRpbWVfdCkwKSA+PiAxKSAtIDEpCisjZGVmaW5lIGNwdXRpbWVfYWRkKF9fYSwgX19iKQkJKChfX2EpICsgIChfX2IpKQorI2RlZmluZSBjcHV0aW1lX3N1YihfX2EsIF9fYikJCSgoX19hKSAtICAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9kaXYoX19hLCBfX24pCQkoKF9fYSkgLyAgKF9fbikpCisjZGVmaW5lIGNwdXRpbWVfaGFsdmUoX19hKQkJKChfX2EpID4+IDEpCisjZGVmaW5lIGNwdXRpbWVfZXEoX19hLCBfX2IpCQkoKF9fYSkgPT0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZ3QoX19hLCBfX2IpCQkoKF9fYSkgPiAgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZ2UoX19hLCBfX2IpCQkoKF9fYSkgPj0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfbHQoX19hLCBfX2IpCQkoKF9fYSkgPCAgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfbGUoX19hLCBfX2IpCQkoKF9fYSkgPD0gKF9fYikpCisKKyNkZWZpbmUgY3B1dGltZTY0X3plcm8JCQkoKGNwdXRpbWU2NF90KTApCisjZGVmaW5lIGNwdXRpbWU2NF9hZGQoX19hLCBfX2IpCQkoKF9fYSkgKyAoX19iKSkKKyNkZWZpbmUgY3B1dGltZTY0X3N1YihfX2EsIF9fYikJCSgoX19hKSAtIChfX2IpKQorI2RlZmluZSBjcHV0aW1lX3RvX2NwdXRpbWU2NChfX2N0KQkoX19jdCkKKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSA8LT4gamlmZmllcyAoSFopCisgKi8KKyNkZWZpbmUgY3B1dGltZV90b19qaWZmaWVzKF9fY3QpCSgoX19jdCkgLyAoTlNFQ19QRVJfU0VDIC8gSFopKQorI2RlZmluZSBqaWZmaWVzX3RvX2NwdXRpbWUoX19qaWYpCSgoX19qaWYpICogKE5TRUNfUEVSX1NFQyAvIEhaKSkKKyNkZWZpbmUgY3B1dGltZTY0X3RvX2ppZmZpZXM2NChfX2N0KQkoKF9fY3QpIC8gKE5TRUNfUEVSX1NFQyAvIEhaKSkKKyNkZWZpbmUgamlmZmllczY0X3RvX2NwdXRpbWU2NChfX2ppZikJKChfX2ppZikgKiAoTlNFQ19QRVJfU0VDIC8gSFopKQorCisvKgorICogQ29udmVydCBjcHV0aW1lIDwtPiBtaWxsaXNlY29uZHMKKyAqLworI2RlZmluZSBjcHV0aW1lX3RvX21zZWNzKF9fY3QpCQkoKF9fY3QpIC8gTlNFQ19QRVJfTVNFQykKKyNkZWZpbmUgbXNlY3NfdG9fY3B1dGltZShfX21zZWNzKQkoKF9fbXNlY3MpICogTlNFQ19QRVJfTVNFQykKKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSA8LT4gc2Vjb25kcworICovCisjZGVmaW5lIGNwdXRpbWVfdG9fc2VjcyhfX2N0KQkJKChfX2N0KSAvIE5TRUNfUEVSX1NFQykKKyNkZWZpbmUgc2Vjc190b19jcHV0aW1lKF9fc2VjcykJCSgoX19zZWNzKSAqIE5TRUNfUEVSX1NFQykKKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSA8LT4gdGltZXNwZWMgKG5zZWMpCisgKi8KK3N0YXRpYyBpbmxpbmUgY3B1dGltZV90IHRpbWVzcGVjX3RvX2NwdXRpbWUoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp2YWwpCit7CisJY3B1dGltZV90IHJldCA9IHZhbC0+dHZfc2VjICogTlNFQ19QRVJfU0VDOworCXJldHVybiAocmV0ICsgdmFsLT50dl9uc2VjKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHV0aW1lX3RvX3RpbWVzcGVjKGNvbnN0IGNwdXRpbWVfdCBjdCwgc3RydWN0IHRpbWVzcGVjICp2YWwpCit7CisJdmFsLT50dl9zZWMgID0gY3QgLyBOU0VDX1BFUl9TRUM7CisJdmFsLT50dl9uc2VjID0gY3QgJSBOU0VDX1BFUl9TRUM7Cit9CisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgPC0+IHRpbWV2YWwgKG1zZWMpCisgKi8KK3N0YXRpYyBpbmxpbmUgY3B1dGltZV90IHRpbWV2YWxfdG9fY3B1dGltZShzdHJ1Y3QgdGltZXZhbCAqdmFsKQoreworCWNwdXRpbWVfdCByZXQgPSB2YWwtPnR2X3NlYyAqIE5TRUNfUEVSX1NFQzsKKwlyZXR1cm4gKHJldCArIHZhbC0+dHZfdXNlYyAqIE5TRUNfUEVSX1VTRUMpOworfQorc3RhdGljIGlubGluZSB2b2lkIGNwdXRpbWVfdG9fdGltZXZhbChjb25zdCBjcHV0aW1lX3QgY3QsIHN0cnVjdCB0aW1ldmFsICp2YWwpCit7CisJdmFsLT50dl9zZWMgPSBjdCAvIE5TRUNfUEVSX1NFQzsKKwl2YWwtPnR2X3VzZWMgPSAoY3QgJSBOU0VDX1BFUl9TRUMpIC8gTlNFQ19QRVJfVVNFQzsKK30KKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSA8LT4gY2xvY2sgKFVTRVJfSFopCisgKi8KKyNkZWZpbmUgY3B1dGltZV90b19jbG9ja190KF9fY3QpCSgoX19jdCkgLyAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpCisjZGVmaW5lIGNsb2NrX3RfdG9fY3B1dGltZShfX3gpCQkoKF9feCkgKiAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpCisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWU2NCB0byBjbG9jay4KKyAqLworI2RlZmluZSBjcHV0aW1lNjRfdG9fY2xvY2tfdChfX2N0KSAgICAgIGNwdXRpbWVfdG9fY2xvY2tfdCgoY3B1dGltZV90KV9fY3QpCisKKyNlbmRpZiAvKiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyAqLwogI2VuZGlmIC8qIF9fSUE2NF9DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmggYi9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oCmluZGV4IGY4ZTgzZWMuLjVlMGMxYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9lbGYuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBFTEZfQVJDSAlFTV9JQV82NAogCiAjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIENPUkVfRFVNUF9VU0VfUkVHU0VUCiAKIC8qIExlYXN0LXNpZ25pZmljYW50IGZvdXIgYml0cyBvZiBFTEYgaGVhZGVyJ3MgZV9mbGFncyBhcmUgT1Mtc3BlY2lmaWMuICBUaGUgYml0cyBhcmUKICAgIGludGVycHJldGVkIGFzIGZvbGxvd3MgYnkgTGludXg6ICovCkBAIC0xNTQsNiArMTU1LDMwIEBACiAjZGVmaW5lIEVMRl9OR1JFRwkxMjgJLyogd2UgcmVhbGx5IG5lZWQganVzdCA3MiBidXQgbGV0J3MgbGVhdmUgc29tZSBoZWFkcm9vbS4uLiAqLwogI2RlZmluZSBFTEZfTkZQUkVHCTEyOAkvKiBmMCBhbmQgZjEgY291bGQgYmUgb21pdHRlZCwgYnV0IHNvIHdoYXQuLi4gKi8KIAorLyogZWxmX2dyZWdzZXRfdCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIEVMRl9HUl8wX09GRlNFVCAgICAgMAorI2RlZmluZSBFTEZfTkFUX09GRlNFVCAgICAgKDMyICogc2l6ZW9mKGVsZl9ncmVnX3QpKQorI2RlZmluZSBFTEZfUFJfT0ZGU0VUICAgICAgKDMzICogc2l6ZW9mKGVsZl9ncmVnX3QpKQorI2RlZmluZSBFTEZfQlJfMF9PRkZTRVQgICAgKDM0ICogc2l6ZW9mKGVsZl9ncmVnX3QpKQorI2RlZmluZSBFTEZfQ1JfSUlQX09GRlNFVCAgKDQyICogc2l6ZW9mKGVsZl9ncmVnX3QpKQorI2RlZmluZSBFTEZfQ0ZNX09GRlNFVCAgICAgKDQzICogc2l6ZW9mKGVsZl9ncmVnX3QpKQorI2RlZmluZSBFTEZfQ1JfSVBTUl9PRkZTRVQgKDQ0ICogc2l6ZW9mKGVsZl9ncmVnX3QpKQorI2RlZmluZSBFTEZfR1JfT0ZGU0VUKGkpICAgKEVMRl9HUl8wX09GRlNFVCArIGkgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9CUl9PRkZTRVQoaSkgICAoRUxGX0JSXzBfT0ZGU0VUICsgaSAqIHNpemVvZihlbGZfZ3JlZ190KSkKKyNkZWZpbmUgRUxGX0FSX1JTQ19PRkZTRVQgICg0NSAqIHNpemVvZihlbGZfZ3JlZ190KSkKKyNkZWZpbmUgRUxGX0FSX0JTUF9PRkZTRVQgICg0NiAqIHNpemVvZihlbGZfZ3JlZ190KSkKKyNkZWZpbmUgRUxGX0FSX0JTUFNUT1JFX09GRlNFVCAoNDcgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9STkFUX09GRlNFVCAoNDggKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9DQ1ZfT0ZGU0VUICAoNDkgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9VTkFUX09GRlNFVCAoNTAgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9GUFNSX09GRlNFVCAoNTEgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9QRlNfT0ZGU0VUICAoNTIgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9MQ19PRkZTRVQgICAoNTMgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9FQ19PRkZTRVQgICAoNTQgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9DU0RfT0ZGU0VUICAoNTUgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9TU0RfT0ZGU0VUICAoNTYgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisjZGVmaW5lIEVMRl9BUl9FTkRfT0ZGU0VUICAoNTcgKiBzaXplb2YoZWxmX2dyZWdfdCkpCisKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZnB4cmVnc2V0X3Q7CiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwpAQCAtMTgzLDEyICsyMDgsNiBAQAogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKLWV4dGVybiBpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9ncmVnc2V0X3QgKik7Ci1leHRlcm4gaW50IGR1bXBfdGFza19mcHUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZnByZWdzZXRfdCAqKTsKLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyh0c2ssIGVsZl9ncmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCBlbGZfZ3JlZ3MpCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCi0KICNkZWZpbmUgR0FURV9FSERSCSgoY29uc3Qgc3RydWN0IGVsZmhkciAqKSBHQVRFX0FERFIpCiAKIC8qIHVwZGF0ZSBBVF9WRUNUT1JfU0laRV9BUkNIIGlmIHRoZSBudW1iZXIgb2YgTkVXX0FVWF9FTlQgZW50cmllcyBjaGFuZ2VzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2h3X2lycS5oIGIvaW5jbHVkZS9hc20taWE2NC9od19pcnEuaAppbmRleCA3ZTZlMzc3Li43NjM2NmRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmgKQEAgLTkzLDYgKzkzLDkgQEAKIHN0cnVjdCBpcnFfY2ZnIHsKIAlpYTY0X3ZlY3RvciB2ZWN0b3I7CiAJY3B1bWFza190IGRvbWFpbjsKKwljcHVtYXNrX3Qgb2xkX2RvbWFpbjsKKwl1bnNpZ25lZCBtb3ZlX2NsZWFudXBfY291bnQ7CisJdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7CiB9OwogZXh0ZXJuIHNwaW5sb2NrX3QgdmVjdG9yX2xvY2s7CiBleHRlcm4gc3RydWN0IGlycV9jZmcgaXJxX2NmZ1tOUl9JUlFTXTsKQEAgLTEwNiwxMiArMTA5LDE5IEBACiBleHRlcm4gdm9pZCBmcmVlX2lycV92ZWN0b3IgKGludCB2ZWN0b3IpOwogZXh0ZXJuIGludCByZXNlcnZlX2lycV92ZWN0b3IgKGludCB2ZWN0b3IpOwogZXh0ZXJuIHZvaWQgX19zZXR1cF92ZWN0b3JfaXJxKGludCBjcHUpOwotZXh0ZXJuIGludCByZWFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGludCBjcHUpOwogZXh0ZXJuIHZvaWQgaWE2NF9zZW5kX2lwaSAoaW50IGNwdSwgaW50IHZlY3RvciwgaW50IGRlbGl2ZXJ5X21vZGUsIGludCByZWRpcmVjdCk7CiBleHRlcm4gdm9pZCByZWdpc3Rlcl9wZXJjcHVfaXJxIChpYTY0X3ZlY3RvciB2ZWMsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CiBleHRlcm4gaW50IGNoZWNrX2lycV91c2VkIChpbnQgaXJxKTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfYW5kX3Jlc2VydmVfaXJxICh1bnNpZ25lZCBpbnQgaXJxKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgKGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfSUE2NF9ESUcpKQorZXh0ZXJuIGludCBpcnFfcHJlcGFyZV9tb3ZlKGludCBpcnEsIGludCBjcHUpOworZXh0ZXJuIHZvaWQgaXJxX2NvbXBsZXRlX21vdmUodW5zaWduZWQgaW50IGlycSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaXJxX3ByZXBhcmVfbW92ZShpbnQgaXJxLCBpbnQgY3B1KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2NvbXBsZXRlX21vdmUodW5zaWduZWQgaW50IGlycSkge30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgaWE2NF9yZXNlbmRfaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCiB7CiAJcGxhdGZvcm1fc2VuZF9pcGkoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ZWN0b3IsIElBNjRfSVBJX0RNX0lOVCwgMCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oIGIvaW5jbHVkZS9hc20taWE2NC9pZGUuaAppbmRleCAxY2NmMjM4Li44ZmEzZjhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaWRlLmgKQEAgLTE2LDggKzE2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCi0jZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0RFRkFVTFRTCi0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCiB7CiAJc3dpdGNoIChiYXNlKSB7CkBAIC00NiwxNCArNDQsNiBAQAogCX0KIH0KIAotI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotI2RlZmluZSBpZGVfaW5pdF9kZWZhdWx0X2lycShiYXNlKQkoMCkKLSNlbHNlCi0jZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCWlkZV9kZWZhdWx0X2lycShiYXNlKQotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaAppbmRleCBhOTNjZTllLi5lZjcxYjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaApAQCAtMzAsOCArMzAsMTIgQEAKICNpbmNsdWRlIDxhc20vYnJlYWsuaD4KIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9LUFJPQkVTX0lOU05fU0xPVAotI2RlZmluZSBNQVhfSU5TTl9TSVpFICAgMQorI2RlZmluZSBNQVhfSU5TTl9TSVpFICAgMgkvKiBsYXN0IGhhbGYgaXMgZm9yIGtwcm9iZS1ib29zdGVyICovCiAjZGVmaW5lIEJSRUFLX0lOU1QJKGxvbmcpKF9fSUE2NF9CUkVBS19LUFJPQkUgPDwgNikKKyNkZWZpbmUgTk9QX01fSU5TVAkobG9uZykoMTw8MjcpCisjZGVmaW5lIEJSTF9JTlNUKGkxLCBpMikgKChsb25nKSgoMHhjTCA8PCAzNykgfAkvKiBicmwgKi8gXAorCQkJCSgweDFMIDw8IDEyKSB8CS8qIG1hbnkgKi8gXAorCQkJCSgoKGkxKSAmIDEpIDw8IDM2KSB8ICgoaTIpIDw8IDEzKSkpIC8qIGltbSAqLwogCiB0eXBlZGVmIHVuaW9uIGNtcF9pbnN0IHsKIAlzdHJ1Y3QgewpAQCAtODIsNyArODYsNiBAQAogCXN0cnVjdCBwcmV2X2twcm9iZSBwcmV2X2twcm9iZVtBUkNIX1BSRVZfS1BST0JFX1NaXTsKIH07CiAKLSNkZWZpbmUgQVJDSF9TVVBQT1JUU19LUkVUUFJPQkVTCiAjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZSAwCiAKICNkZWZpbmUgU0xPVDBfT1BDT0RFX1NISUZUCSgzNykKQEAgLTExMywxOSArMTE2LDE2IEBACiAgI2RlZmluZSBJTlNUX0ZMQUdfRklYX1JFTEFUSVZFX0lQX0FERFIJCTEKICAjZGVmaW5lIElOU1RfRkxBR19GSVhfQlJBTkNIX1JFRwkJMgogICNkZWZpbmUgSU5TVF9GTEFHX0JSRUFLX0lOU1QJCQk0CisgI2RlZmluZSBJTlNUX0ZMQUdfQk9PU1RBQkxFCQkJOAogIAl1bnNpZ25lZCBsb25nIGluc3RfZmxhZzsKICAJdW5zaWduZWQgc2hvcnQgdGFyZ2V0X2JyX3JlZzsKIAl1bnNpZ25lZCBzaG9ydCBzbG90OwogfTsKIAotZXh0ZXJuIGludCBrcHJvYmVzX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpOworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CiBleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKIAotLyogaWE2NCBkb2VzIG5vdCBuZWVkIHRoaXMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBqcHJvYmVfcmV0dXJuKHZvaWQpCi17Ci19CiBleHRlcm4gdm9pZCBpbnZhbGlkYXRlX3N0YWNrZWRfcmVncyh2b2lkKTsKIGV4dGVybiB2b2lkIGZsdXNoX3JlZ2lzdGVyX3N0YWNrKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rcmVncy5oIGIvaW5jbHVkZS9hc20taWE2NC9rcmVncy5oCmluZGV4IDdlNTVhNTguLmFlZmNkZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQva3JlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2tyZWdzLmgKQEAgLTMxLDYgKzMxLDkgQEAKICNkZWZpbmUgSUE2NF9UUl9QQUxDT0RFCQkxCS8qIGl0cjE6IG1hcHMgUEFMY29kZSBhcyByZXF1aXJlZCBieSBFRkkgKi8KICNkZWZpbmUgSUE2NF9UUl9DVVJSRU5UX1NUQUNLCTEJLyogZHRyMTogbWFwcyBrZXJuZWwncyBtZW1vcnktICYgcmVnaXN0ZXItc3RhY2tzICovCiAKKyNkZWZpbmUgSUE2NF9UUl9BTExPQ19CQVNFCTIgCS8qIGl0ciZkdHI6IEJhc2Ugb2YgZHluYW1pYyBUUiByZXNvdXJjZSovCisjZGVmaW5lIElBNjRfVFJfQUxMT0NfTUFYCTMyIAkvKiBNYXggbnVtYmVyIGZvciBkeW5hbWljIHVzZSovCisKIC8qIFByb2Nlc3NvciBzdGF0dXMgcmVnaXN0ZXIgYml0czogKi8KICNkZWZpbmUgSUE2NF9QU1JfQkVfQklUCQkxCiAjZGVmaW5lIElBNjRfUFNSX1VQX0JJVAkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rdm0uaCBiL2luY2x1ZGUvYXNtLWlhNjQva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwZDI5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva3ZtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTElOVVhfS1ZNX0lBNjRfSAorI2RlZmluZSBfX0xJTlVYX0tWTV9JQTY0X0gKKworLyogaWE2NCBkb2VzIG5vdCBzdXBwb3J0IEtWTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKaW5kZXggZjkzMzA4Zi4uNzI0NWE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKQEAgLTM1LDYgKzM1LDcgQEAKIGV4dGVybiB2b2lkIHJlc2VydmVfbWVtb3J5ICh2b2lkKTsKIGV4dGVybiB2b2lkIGZpbmRfaW5pdHJkICh2b2lkKTsKIGV4dGVybiBpbnQgZmlsdGVyX3JzdmRfbWVtb3J5ICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgZmlsdGVyX21lbW9yeSAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZyk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBlZmlfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyAqcywgdW5zaWduZWQgbG9uZyAqZSk7CiBleHRlcm4gaW50IGZpbmRfbWF4X21pbl9sb3dfcGZuICh1bnNpZ25lZCBsb25nICwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIApAQCAtNTYsNyArNTcsNyBAQAogCiAjZGVmaW5lIElHTk9SRV9QRk4wCTEJLyogWFhYIGZpeCBtZTogaWdub3JlIHBmbiAwIHVudGlsIFRMQiBtaXNzIGhhbmRsZXIgaXMgdXBkYXRlZC4uLiAqLwogCi1leHRlcm4gaW50IHJlZ2lzdGVyX2FjdGl2ZV9yYW5nZXModTY0IHN0YXJ0LCB1NjQgZW5kLCB2b2lkICphcmcpOworZXh0ZXJuIGludCByZWdpc3Rlcl9hY3RpdmVfcmFuZ2VzKHU2NCBzdGFydCwgdTY0IGxlbiwgaW50IG5pZCk7CiAKICNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCiAjIGRlZmluZSBMQVJHRV9HQVAJMHg0MDAwMDAwMCAvKiBVc2UgdmlydHVhbCBtZW0gbWFwIGlmIGhvbGUgaXMgPiB0aGFuIHRoaXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbnVtYS5oIGIvaW5jbHVkZS9hc20taWE2NC9udW1hLmgKaW5kZXggNmE4YTI3Yy4uMzQ5OWZmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9udW1hLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9udW1hLmgKQEAgLTIyLDYgKzIyLDggQEAKIAogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KIAorI2RlZmluZSBOVU1BX05PX05PREUJLTEKKwogZXh0ZXJuIHUxNiBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKIGV4dGVybiBjcHVtYXNrX3Qgbm9kZV90b19jcHVfbWFza1tNQVhfTlVNTk9ERVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiBleHRlcm4gcGdfZGF0YV90ICpwZ2RhdF9saXN0W01BWF9OVU1OT0RFU107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9wYWwuaAppbmRleCA4YTY5NWQzLi42N2IwMjkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKQEAgLTEzLDYgKzEzLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBWQSBMaW51eCBTeXN0ZW1zCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU3Jpbml2YXNhIFByYXNhZCBUaGlydW1hbGFjaGFyIDxzcHJhc2FkQHNwcmFzYWQuZW5nci5zZ2kuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gKFNHSSkKICAqCiAgKiA5OS8xMC8wMQlkYXZpZG0JTWFrZSBzdXJlIHdlIHBhc3MgemVybyBmb3IgcmVzZXJ2ZWQgcGFyYW1ldGVycy4KICAqIDAwLzAzLzA3CWRhdmlkbQlVcGRhdGVkIHBhbF9jYWNoZV9mbHVzaCgpIHRvIGJlIGluIHN5bmMgd2l0aCBQQUwgdjIuNi4KQEAgLTczLDYgKzc0LDggQEAKICNkZWZpbmUgUEFMX0NBQ0hFX1NIQVJFRF9JTkZPCTQzCS8qIHJldHVybnMgaW5mb3JtYXRpb24gb24gY2FjaGVzIHNoYXJlZCBieSBsb2dpY2FsIHByb2Nlc3NvciAqLwogI2RlZmluZSBQQUxfR0VUX0hXX1BPTElDWQk0OAkvKiBHZXQgY3VycmVudCBoYXJkd2FyZSByZXNvdXJjZSBzaGFyaW5nIHBvbGljeSAqLwogI2RlZmluZSBQQUxfU0VUX0hXX1BPTElDWQk0OQkvKiBTZXQgY3VycmVudCBoYXJkd2FyZSByZXNvdXJjZSBzaGFyaW5nIHBvbGljeSAqLworI2RlZmluZSBQQUxfVlBfSU5GTwkJNTAJLyogSW5mb3JtYXRpb24gYWJvdXQgdmlydHVhbCBwcm9jZXNzb3IgZmVhdHVyZXMgKi8KKyNkZWZpbmUgUEFMX01DX0hXX1RSQUNLSU5HCTUxCS8qIEhhcmR3YXJlIHRyYWNraW5nIHN0YXR1cyAqLwogCiAjZGVmaW5lIFBBTF9DT1BZX1BBTAkJMjU2CS8qIHJlbG9jYXRlIFBBTCBwcm9jZWR1cmVzIGFuZCBQQUwgUE1JICovCiAjZGVmaW5lIFBBTF9IQUxUX0lORk8JCTI1NwkvKiByZXR1cm4gdGhlIGxvdyBwb3dlciBjYXBhYmlsaXRpZXMgb2YgcHJvY2Vzc29yICovCkBAIC01MDQsNyArNTA3LDggQEAKIAkJCXdpdgkJOiAxLAkvKiBXYXkgZmllbGQgdmFsaWQgKi8KIAkJCXJlc2VydmVkMgk6IDEsCiAJCQlkcAkJOiAxLAkvKiBEYXRhIHBvaXNvbmVkIG9uIE1CRSAqLwotCQkJcmVzZXJ2ZWQzCTogOCwKKwkJCXJlc2VydmVkMwk6IDYsCisJCQlobHRoCQk6IDIsCS8qIEhlYWx0aCBpbmRpY2F0b3IgKi8KIAogCQkJaW5kZXgJCTogMjAsCS8qIENhY2hlIGxpbmUgaW5kZXggKi8KIAkJCXJlc2VydmVkNAk6IDIsCkBAIC01NDIsNyArNTQ2LDkgQEAKIAkJCWR0YwkJOiAxLAkvKiBGYWlsIGluIGRhdGEgVEMgKi8KIAkJCWl0YwkJOiAxLAkvKiBGYWlsIGluIGluc3QuIFRDICovCiAJCQlvcAkJOiA0LAkvKiBDYWNoZSBvcGVyYXRpb24gKi8KLQkJCXJlc2VydmVkMwk6IDMwLAorCQkJcmVzZXJ2ZWQzCTogNiwKKwkJCWhsdGgJCTogMiwJLyogSGVhbHRoIGluZGljYXRvciAqLworCQkJcmVzZXJ2ZWQ0CTogMjIsCiAKIAkJCWlzCQk6IDEsCS8qIGluc3RydWN0aW9uIHNldCAoMSA9PSBpYTMyKSAqLwogCQkJaXYJCTogMSwJLyogaW5zdHJ1Y3Rpb24gc2V0IGZpZWxkIHZhbGlkICovCkBAIC02MzMsNyArNjM5LDggQEAKIAkJCXdheQkJOiA2LAkvKiBXYXkgb2Ygc3RydWN0dXJlICovCiAJCQl3dgkJOiAxLAkvKiB3YXkgdmFsaWQgKi8KIAkJCXh2CQk6IDEsCS8qIGluZGV4IHZhbGlkICovCi0JCQlyZXNlcnZlZDEJOiA4LAorCQkJcmVzZXJ2ZWQxCTogNiwKKwkJCWhsdGgJCTogMiwJLyogSGVhbHRoIGluZGljYXRvciAqLwogCQkJaW5kZXgJCTogOCwJLyogSW5kZXggb3Igc2V0IG9mIHRoZSB1YXJjaAogCQkJCQkJICogc3RydWN0dXJlIHRoYXQgZmFpbGVkLgogCQkJCQkJICovCkBAIC0xMjEzLDE0ICsxMjIwLDEyIEBACiAKIC8qIFJldHVybiB0aGUgbWFjaGluZSBjaGVjayBkeW5hbWljIHByb2Nlc3NvciBzdGF0ZSAqLwogc3RhdGljIGlubGluZSBzNjQKLWlhNjRfcGFsX21jX2R5bmFtaWNfc3RhdGUgKHU2NCBvZmZzZXQsIHU2NCAqc2l6ZSwgdTY0ICpwZHMpCitpYTY0X3BhbF9tY19keW5hbWljX3N0YXRlICh1NjQgaW5mb190eXBlLCB1NjQgZHlfYnVmZmVyLCB1NjQgKnNpemUpCiB7CiAJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OwotCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19EWU5BTUlDX1NUQVRFLCBvZmZzZXQsIDAsIDApOworCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19EWU5BTUlDX1NUQVRFLCBpbmZvX3R5cGUsIGR5X2J1ZmZlciwgMCk7CiAJaWYgKHNpemUpCiAJCSpzaXplID0gaXBydi52MDsKLQlpZiAocGRzKQotCQkqcGRzID0gaXBydi52MTsKIAlyZXR1cm4gaXBydi5zdGF0dXM7CiB9CiAKQEAgLTEyODEsMTUgKzEyODYsNDEgQEAKIAlyZXR1cm4gaXBydi5zdGF0dXM7CiB9CiAKK3R5cGVkZWYgdW5pb24gcGFsX2h3X3RyYWNraW5nX3UgeworCXU2NAkJCXBodF9kYXRhOworCXN0cnVjdCB7CisJCXU2NAkJaXRjCTo0LAkvKiBJbnN0cnVjdGlvbiBjYWNoZSB0cmFja2luZyAqLworCQkJCWRjdAk6NCwJLyogRGF0ZSBjYWNoZSB0cmFja2luZyAqLworCQkJCWl0dAk6NCwJLyogSW5zdHJ1Y3Rpb24gVExCIHRyYWNraW5nICovCisJCQkJZGR0CTo0LAkvKiBEYXRhIFRMQiB0cmFja2luZyAqLworCQkJCXJlc2VydmVkOjQ4OworCX0gcGFsX2h3X3RyYWNraW5nX3M7Cit9IHBhbF9od190cmFja2luZ191X3Q7CisKKy8qCisgKiBIYXJkd2FyZSB0cmFja2luZyBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgczY0CitpYTY0X3BhbF9tY19od190cmFja2luZyAodTY0ICpzdGF0dXMpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19IV19UUkFDS0lORywgMCwgMCwgMCk7CisJaWYgKHN0YXR1cykKKwkJKnN0YXR1cyA9IGlwcnYudjA7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCiAvKiBSZWdpc3RlciBhIHBsYXRmb3JtIGRlcGVuZGVudCBsb2NhdGlvbiB3aXRoIFBBTCB0byB3aGljaCBpdCBjYW4gc2F2ZQogICogbWluaW1hbCBwcm9jZXNzb3Igc3RhdGUgaW4gdGhlIGV2ZW50IG9mIGEgbWFjaGluZSBjaGVjayBvciBpbml0aWFsaXphdGlvbgogICogZXZlbnQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgczY0Ci1pYTY0X3BhbF9tY19yZWdpc3Rlcl9tZW0gKHU2NCBwaHlzaWNhbF9hZGRyKQoraWE2NF9wYWxfbWNfcmVnaXN0ZXJfbWVtICh1NjQgcGh5c2ljYWxfYWRkciwgdTY0IHNpemUsIHU2NCAqcmVxX3NpemUpCiB7CiAJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OwotCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19SRUdJU1RFUl9NRU0sIHBoeXNpY2FsX2FkZHIsIDAsIDApOworCVBBTF9DQUxMKGlwcnYsIFBBTF9NQ19SRUdJU1RFUl9NRU0sIHBoeXNpY2FsX2FkZHIsIHNpemUsIDApOworCWlmIChyZXFfc2l6ZSkKKwkJKnJlcV9zaXplID0gaXBydi52MDsKIAlyZXR1cm4gaXBydi5zdGF0dXM7CiB9CiAKQEAgLTE2MzEsNiArMTY2MiwyOSBAQAogCXJldHVybiBpcHJ2LnN0YXR1czsKIH0KIAordHlwZWRlZiB1bmlvbiBwYWxfdnBfaW5mb191IHsKKwl1NjQJCQlwdmlfdmFsOworCXN0cnVjdCB7CisJCXU2NAkJaW5kZXg6CQk0OCwJLyogdmlydHVhbCBmZWF0dXJlIHNldCBpbmZvICovCisJCQkJdm1tX2lkOgkJMTY7CS8qIGZlYXR1cmUgc2V0IGlkICovCisJfSBwYWxfdnBfaW5mb19zOworfSBwYWxfdnBfaW5mb191X3Q7CisKKy8qCisgKiBSZXR1cm5zIGluZm9tYXRpb24gYWJvdXQgdmlydHVhbCBwcm9jZXNzb3IgZmVhdHVyZXMKKyAqLworc3RhdGljIGlubGluZSBzNjQKK2lhNjRfcGFsX3ZwX2luZm8gKHU2NCBmZWF0dXJlX3NldCwgdTY0IHZwX2J1ZmZlciwgdTY0ICp2cF9pbmZvLCB1NjQgKnZtbV9pZCkKK3sKKwlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIGlwcnY7CisJUEFMX0NBTEwoaXBydiwgUEFMX1ZQX0lORk8sIGZlYXR1cmVfc2V0LCB2cF9idWZmZXIsIDApOworCWlmICh2cF9pbmZvKQorCQkqdnBfaW5mbyA9IGlwcnYudjA7CisJaWYgKHZtbV9pZCkKKwkJKnZtbV9pZCA9IGlwcnYudjE7CisJcmV0dXJuIGlwcnYuc3RhdHVzOworfQorCiB0eXBlZGVmIHVuaW9uIHBhbF9pdHJfdmFsaWRfdSB7CiAJdTY0CQkJcGl2X3ZhbDsKIAlzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAppbmRleCBlNjIwNGYxNC4uZWQ3MDg2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgKQEAgLTM3MSw3ICszNzEsNyBAQAogLyogVGhlIG9mZnNldCBpbiB0aGUgMS1sZXZlbCBkaXJlY3RvcnkgaXMgZ2l2ZW4gYnkgdGhlIDMgcmVnaW9uIGJpdHMKICAgICg2MS4uNjMpIGFuZCB0aGUgbGV2ZWwtMSBiaXRzLiAgKi8KIHN0YXRpYyBpbmxpbmUgcGdkX3QqCi1wZ2Rfb2Zmc2V0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorcGdkX29mZnNldCAoY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gbW0tPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oCmluZGV4IDBiZGNlN2QuLjRiMmE4ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaApAQCAtMjMzLDggKzIzMyw2IEBACiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0jZGVmaW5lIF9fQVJDSF9TWVNfUFRSQUNFCTEKLQogLyoKICAqIFdlIHVzZSB0aGUgaWE2NF9wc3IocmVncyktPnJpIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdGhyZWUKICAqIGluc3RydWN0aW9ucyBpbiBidW5kbGUgKDE2IGJ5dGVzKSB0b29rIHRoZSBzYW1wbGUuIEdlbmVyYXRlCkBAIC0zMTQsNiArMzEyLDEzIEBACiAgICNkZWZpbmUgYXJjaF9wdHJhY2VfYXR0YWNoKGNoaWxkKSBcCiAJcHRyYWNlX2F0dGFjaF9zeW5jX3VzZXJfcmJzKGNoaWxkKQogCisgICNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKSAgKDEpCisgIGV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKyAgZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworICAjZGVmaW5lIGFyY2hfaGFzX2Jsb2NrX3N0ZXAoKSAgICgxKQorICBleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9ibG9ja19zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKwogI2VuZGlmIC8qICFfX0tFUk5FTF9fICovCiAKIC8qIHB0X2FsbF91c2VyX3JlZ3MgaXMgdXNlZCBmb3IgUFRSQUNFX0dFVFJFR1MgUFRSQUNFX1NFVFJFR1MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NhbC5oCmluZGV4IDIyNTExMTguLjg5NTk0YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zYWwuaApAQCAtMjk2LDYgKzI5Niw5IEBACiAgICAgRUZJX0dVSUQoMHhlNDI5ZmFmOCwgMHgzY2I3LCAweDExZDQsIDB4YmMsIDB4YTcsIDB4MCwgMHg4MCwgMHhjNywgMHgzYywgMHg4OCwgMHg4MSkKICNkZWZpbmUgU0FMX1BMQVRfQlVTX0VSUl9TRUNUX0dVSUQgIFwKICAgICBFRklfR1VJRCgweGU0MjlmYWY5LCAweDNjYjcsIDB4MTFkNCwgMHhiYywgMHhhNywgMHgwLCAweDgwLCAweGM3LCAweDNjLCAweDg4LCAweDgxKQorI2RlZmluZSBQUk9DRVNTT1JfQUJTVFJBQ1RJT05fTEFZRVJfT1ZFUldSSVRFX0dVSUQgXAorICAgIEVGSV9HVUlEKDB4NmNiMGEyMDAsIDB4ODkzYSwgMHgxMWRhLCAweDk2LCAweGQyLCAweDAsIDB4MTAsIDB4ODMsIDB4ZmYsIFwKKwkJMHhjYSwgMHg0ZCkKIAogI2RlZmluZSBNQVhfQ0FDSEVfRVJST1JTCTYKICNkZWZpbmUgTUFYX1RMQl9FUlJPUlMJCTYKQEAgLTgwNyw2ICs4MTAsMTAgQEAKIGlhNjRfc2FsX3BoeXNpY2FsX2lkX2luZm8odTE2ICpzcGxpZCkKIHsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CisKKwlpZiAoc2FsX3JldmlzaW9uIDwgU0FMX1ZFUlNJT05fQ09ERSgzLDIpKQorCQlyZXR1cm4gLTE7CisKIAlTQUxfQ0FMTChpc3J2LCBTQUxfUEhZU0lDQUxfSURfSU5GTywgMCwgMCwgMCwgMCwgMCwgMCwgMCk7CiAJaWYgKHNwbGlkKQogCQkqc3BsaWQgPSBpc3J2LnYwOwpAQCAtODc1LDYgKzg4MiwyNCBAQAogCiBleHRlcm4gdm9pZCBpYTY0X3NhbF9oYW5kbGVyX2luaXQodm9pZCAqZW50cnlfcG9pbnQsIHZvaWQgKmdwdmFsKTsKIAorI2RlZmluZSBQQUxPX01BWF9UTEJfUFVSR0VTCTB4RkZGRgorI2RlZmluZSBQQUxPX1NJRwkiUEFMTyIKKworc3RydWN0IHBhbG9fdGFibGUgeworCXU4ICBzaWduYXR1cmVbNF07CS8qIFNob3VsZCBiZSAiUEFMTyIgKi8KKwl1MzIgbGVuZ3RoOworCXU4ICBtaW5vcl9yZXZpc2lvbjsKKwl1OCAgbWFqb3JfcmV2aXNpb247CisJdTggIGNoZWNrc3VtOworCXU4ICByZXNlcnZlZDFbNV07CisJdTE2IG1heF90bGJfcHVyZ2VzOworCXU4ICByZXNlcnZlZDJbNl07Cit9OworCisjZGVmaW5lIE5QVENHX0ZST01fUEFMCQkJMAorI2RlZmluZSBOUFRDR19GUk9NX1BBTE8JCQkxCisjZGVmaW5lIE5QVENHX0ZST01fS0VSTkVMX1BBUkFNRVRFUgkyCisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9TQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2VtYXBob3JlLmgKaW5kZXggZDgzOTNkMS4uZDliMjAzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NlbWFwaG9yZS5oCkBAIC0xLDk5ICsxIEBACi0jaWZuZGVmIF9BU01fSUE2NF9TRU1BUEhPUkVfSAotI2RlZmluZSBfQVNNX0lBNjRfU0VNQVBIT1JFX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEhld2xldHQtUGFja2FyZCBDbwotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLnNsZWVwZXJzCT0gMCwJCQkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkJCQkJCVwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBjb3VudCkKLQotI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpCQlfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgMSkKLQotc3RhdGljIGlubGluZSB2b2lkCi1zZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKLXsKLQkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCpzZW0sIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWV4dGVybiB2b2lkIF9fZG93biAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZSAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gaW50ICBfX2Rvd25fdHJ5bG9jayAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gdm9pZCBfX3VwIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLQotLyoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50IHRoZSBzZW1hcGhvcmUncyBjb3VudC4gIElmIGl0IGdvZXMgbmVnYXRpdmUsCi0gKiBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQgaW4gdGhlIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHN0YXRlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRvd24gKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQltaWdodF9zbGVlcCgpOwotCWlmIChpYTY0X2ZldGNoYWRkKC0xLCAmc2VtLT5jb3VudC5jb3VudGVyLCBhY3EpIDwgMSkKLQkJX19kb3duKHNlbSk7Ci19Ci0KLS8qCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudCB0aGUgc2VtYXBob3JlJ3MgY291bnQuICBJZiBpdCBnb2VzIG5lZ2F0aXZlLAotICogYmxvY2sgdGhlIGNhbGxpbmcgdGhyZWFkIGluIHRoZSBUQVNLX0lOVEVSUlVQVElCTEUgc3RhdGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1kb3duX2ludGVycnVwdGlibGUgKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotCWlmIChpYTY0X2ZldGNoYWRkKC0xLCAmc2VtLT5jb3VudC5jb3VudGVyLCBhY3EpIDwgMSkKLQkJcmV0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZG93bl90cnlsb2NrIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoaWE2NF9mZXRjaGFkZCgtMSwgJnNlbS0+Y291bnQuY291bnRlciwgYWNxKSA8IDEpCi0JCXJldCA9IF9fZG93bl90cnlsb2NrKHNlbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi11cCAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpZiAoaWE2NF9mZXRjaGFkZCgxLCAmc2VtLT5jb3VudC5jb3VudGVyLCByZWwpIDw9IC0xKQotCQlfX3VwKHNlbSk7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX0lBNjRfU0VNQVBIT1JFX0ggKi8KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCmluZGV4IDRmYTczM2QuLmVjNWYzNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbXAuaApAQCAtMzgsNiArMzgsOSBAQAogCXJldHVybiBsaWQuZi5pZCA8PCA4IHwgbGlkLmYuZWlkOwogfQogCitleHRlcm4gaW50IHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza190IG1hc2ssIHZvaWQgKCpmdW5jKSh2b2lkICopLAorCQkJCSAgdm9pZCAqaW5mbywgaW50IHdhaXQpOworCiAjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQlpYTY0X2dldF9saWQoKQogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9ub2RlcGRhLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL25vZGVwZGEuaAppbmRleCA2ZjZkNjllLi5lZTExOGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL25vZGVwZGEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL25vZGVwZGEuaApAQCAtOSw3ICs5LDYgQEAKICNkZWZpbmUgX0FTTV9JQTY0X1NOX05PREVQREFfSAogCiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zbi9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2ludHIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCmluZGV4IDU5NTExMmIuLmRmZjgxMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaApAQCAtMjEwLDYgKzIxMCwxMyBAQAogZXh0ZXJuIHZvaWQgaWE2NF9zYXZlX2V4dHJhIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogZXh0ZXJuIHZvaWQgaWE2NF9sb2FkX2V4dHJhIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCisjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKK2V4dGVybiB2b2lkIGlhNjRfYWNjb3VudF9vbl9zd2l0Y2ggKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKKyMgZGVmaW5lIElBNjRfQUNDT1VOVF9PTl9TV0lUQ0gocCxuKSBpYTY0X2FjY291bnRfb25fc3dpdGNoKHAsbikKKyNlbHNlCisjIGRlZmluZSBJQTY0X0FDQ09VTlRfT05fU1dJVENIKHAsbikKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BFUkZNT04KICAgREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHBmbV9zeXN0X2luZm8pOwogIyBkZWZpbmUgUEVSRk1PTl9JU19TWVNXSURFKCkgKF9fZ2V0X2NwdV92YXIocGZtX3N5c3RfaW5mbykgJiAweDEpCkBAIC0yMjIsNiArMjI5LDcgQEAKIAkgfHwgSVNfSUEzMl9QUk9DRVNTKHRhc2tfcHRfcmVncyh0KSkgfHwgUEVSRk1PTl9JU19TWVNXSURFKCkpCiAKICNkZWZpbmUgX19zd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJCQkJCQkJIFwKKwlJQTY0X0FDQ09VTlRfT05fU1dJVENIKHByZXYsIG5leHQpOwkJCQkJCQkgXAogCWlmIChJQTY0X0hBU19FWFRSQV9TVEFURShwcmV2KSkJCQkJCQkJCSBcCiAJCWlhNjRfc2F2ZV9leHRyYShwcmV2KTsJCQkJCQkJCSBcCiAJaWYgKElBNjRfSEFTX0VYVFJBX1NUQVRFKG5leHQpKQkJCQkJCQkJIFwKQEAgLTI2Niw2ICsyNzQsMTAgQEAKIAogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCk7CiAKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworZXh0ZXJuIHZvaWQgYWNjb3VudF9zeXN0ZW1fdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICopOworI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaAppbmRleCA5M2Q4M2NiLi42ZGE4MDY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCkBAIC0zMSw2ICszMSwxMiBAQAogCW1tX3NlZ21lbnRfdCBhZGRyX2xpbWl0OwkvKiB1c2VyLWxldmVsIGFkZHJlc3Mgc3BhY2UgbGltaXQgKi8KIAlpbnQgcHJlZW1wdF9jb3VudDsJCS8qIDA9cHJlbXB0YWJsZSwgPDA9QlVHOyB3aWxsIGFsc28gc2VydmUgYXMgYmgtY291bnRlciAqLwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrIHJlc3RhcnRfYmxvY2s7CisjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKKwlfX3U2NCBhY19zdGFtcDsKKwlfX3U2NCBhY19sZWF2ZTsKKwlfX3U2NCBhY19zdGltZTsKKwlfX3U2NCBhY191dGltZTsKKyNlbmRpZgogfTsKIAogI2RlZmluZSBUSFJFQURfU0laRQkJCUtFUk5FTF9TVEFDS19TSVpFCkBAIC02Miw5ICs2OCwxNyBAQAogI2RlZmluZSB0YXNrX3N0YWNrX3BhZ2UodHNrKQkoKHZvaWQgKikodHNrKSkKIAogI2RlZmluZSBfX0hBVkVfVEhSRUFEX0ZVTkNUSU9OUworI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisjZGVmaW5lIHNldHVwX3RocmVhZF9zdGFjayhwLCBvcmcpCQkJXAorCSp0YXNrX3RocmVhZF9pbmZvKHApID0gKnRhc2tfdGhyZWFkX2luZm8ob3JnKTsJXAorCXRhc2tfdGhyZWFkX2luZm8ocCktPmFjX3N0aW1lID0gMDsJCVwKKwl0YXNrX3RocmVhZF9pbmZvKHApLT5hY191dGltZSA9IDA7CQlcCisJdGFza190aHJlYWRfaW5mbyhwKS0+dGFzayA9IChwKTsKKyNlbHNlCiAjZGVmaW5lIHNldHVwX3RocmVhZF9zdGFjayhwLCBvcmcpIFwKIAkqdGFza190aHJlYWRfaW5mbyhwKSA9ICp0YXNrX3RocmVhZF9pbmZvKG9yZyk7IFwKIAl0YXNrX3RocmVhZF9pbmZvKHApLT50YXNrID0gKHApOworI2VuZGlmCiAjZGVmaW5lIGVuZF9vZl9zdGFjayhwKSAodW5zaWduZWQgbG9uZyAqKSgodm9pZCAqKShwKSArIElBNjRfUkJTX09GRlNFVCkKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9UQVNLX1NUUlVDVF9BTExPQ0FUT1IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RsYi5oCmluZGV4IDI2ZWRjYjcuLjIwZDhhMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC90bGIuaApAQCAtNjQsNiArNjQsMzIgQEAKIAlzdHJ1Y3QgcGFnZSAJCSpwYWdlc1tGUkVFX1BURV9OUl07CiB9OwogCitzdHJ1Y3QgaWE2NF90cl9lbnRyeSB7CisJdTY0IGlmYTsKKwl1NjQgaXRpcjsKKwl1NjQgcHRlOworCXU2NCBycjsKK307IC8qUmVjb3JkIGZvciB0ciBlbnRyeSEqLworCitleHRlcm4gaW50IGlhNjRfaXRyX2VudHJ5KHU2NCB0YXJnZXRfbWFzaywgdTY0IHZhLCB1NjQgcHRlLCB1NjQgbG9nX3NpemUpOworZXh0ZXJuIHZvaWQgaWE2NF9wdHJfZW50cnkodTY0IHRhcmdldF9tYXNrLCBpbnQgc2xvdCk7CisKK2V4dGVybiBzdHJ1Y3QgaWE2NF90cl9lbnRyeSBfX3Blcl9jcHVfaWR0cnNbTlJfQ1BVU11bMl1bSUE2NF9UUl9BTExPQ19NQVhdOworCisvKgorIHJlZ2lvbiByZWdpc3RlciBtYWNyb3MKKyovCisjZGVmaW5lIFJSX1RPX1ZFKHZhbCkgICAoKCh2YWwpID4+IDApICYgMHgwMDAwMDAwMDAwMDAwMDAxKQorI2RlZmluZSBSUl9WRSh2YWwpCSgoKHZhbCkgJiAweDAwMDAwMDAwMDAwMDAwMDEpIDw8IDApCisjZGVmaW5lIFJSX1ZFX01BU0sJMHgwMDAwMDAwMDAwMDAwMDAxTAorI2RlZmluZSBSUl9WRV9TSElGVAkwCisjZGVmaW5lIFJSX1RPX1BTKHZhbCkJKCgodmFsKSA+PiAyKSAmIDB4MDAwMDAwMDAwMDAwMDAzZikKKyNkZWZpbmUgUlJfUFModmFsKQkoKCh2YWwpICYgMHgwMDAwMDAwMDAwMDAwMDNmKSA8PCAyKQorI2RlZmluZSBSUl9QU19NQVNLCTB4MDAwMDAwMDAwMDAwMDBmY0wKKyNkZWZpbmUgUlJfUFNfU0hJRlQJMgorI2RlZmluZSBSUl9SSURfTUFTSwkweDAwMDAwMDAwZmZmZmZmMDBMCisjZGVmaW5lIFJSX1RPX1JJRCh2YWwpIAkoKHZhbCA+PiA4KSAmIDB4ZmZmZmZmKQorCiAvKiBVc2VycyBvZiB0aGUgZ2VuZXJpYyBUTEIgc2hvb3Rkb3duIGNvZGUgbXVzdCBkZWNsYXJlIHRoaXMgc3RvcmFnZSBzcGFjZS4gKi8KIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKaW5kZXggNzc3NGExYy4uM2JlMjVkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaApAQCAtMTcsNiArMTcsNyBAQAogICogTm93IGZvciBzb21lIFRMQiBmbHVzaGluZyByb3V0aW5lcy4gIFRoaXMgaXMgdGhlIGtpbmQgb2Ygc3R1ZmYgdGhhdAogICogY2FuIGJlIHZlcnkgZXhwZW5zaXZlLCBzbyB0cnkgdG8gYXZvaWQgdGhlbSB3aGVuZXZlciBwb3NzaWJsZS4KICAqLworZXh0ZXJuIHZvaWQgc2V0dXBfcHRjZ19zZW0oaW50IG1heF9wdXJnZXMsIGludCBmcm9tX3BhbG8pOwogCiAvKgogICogRmx1c2ggZXZlcnl0aGluZyAoa2VybmVsIG1hcHBpbmcgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkIGR1ZSB0bwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oCmluZGV4IDJkNjdiNzIuLmYyZjcyZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmgKQEAgLTkzLDcgKzkzLDcgQEAKIAkuY2FjaGVfbmljZV90cmllcwk9IDIsCQkJXAogCS5idXN5X2lkeAkJPSAzLAkJCVwKIAkuaWRsZV9pZHgJCT0gMiwJCQlcCi0JLm5ld2lkbGVfaWR4CQk9IDAsIC8qIHVudXNlZCAqLwlcCisJLm5ld2lkbGVfaWR4CQk9IDIsCQkJXAogCS53YWtlX2lkeAkJPSAxLAkJCVwKIAkuZm9ya2V4ZWNfaWR4CQk9IDEsCQkJXAogCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKQEAgLTExNiw2ICsxMTYsMTEgQEAKICNkZWZpbmUgc210X2NhcGFibGUoKSAJCQkJKHNtcF9udW1fc2libGluZ3MgPiAxKQogI2VuZGlmCiAKKyNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKKwkJCQkJQ1BVX01BU0tfQUxMIDogXAorCQkJCQlub2RlX3RvX2NwdW1hc2socGNpYnVzX3RvX25vZGUoYnVzKSkgXAorCQkJCSkKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKaW5kZXggNWQyMDQ0ZS4uMWU3ZjY0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oCkBAIC0yMyw4ICsyMyw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9ERUZBVUxUUwotCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKIHsKIAlzd2l0Y2ggKGJhc2UpIHsKQEAgLTY1LDE0ICs2Myw2IEBACiAJfQogfQogCi0jZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCi0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKLSNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkgICAgICgwKQotI2Vsc2UKLSNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkgICAgIGlkZV9kZWZhdWx0X2lycShiYXNlKQotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9rdm0uaCBiL2luY2x1ZGUvYXNtLW0zMnIva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhNDA1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2t2bS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0xJTlVYX0tWTV9NMzJSX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fTTMyUl9ICisKKy8qIG0zMnIgZG9lcyBub3Qgc3VwcG9ydCBLVk0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaAppbmRleCBiNWJmOTVhLi5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKQEAgLTEsMTQ0ICsxIEBACi0jaWZuZGVmIF9BU01fTTMyUl9TRU1BUEhPUkVfSAotI2RlZmluZSBfQVNNX00zMlJfU0VNQVBIT1JFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMuLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiAgTGludXMgVG9ydmFsZHMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1zdHJ1Y3Qgc2VtYXBob3JlIHsKLQlhdG9taWNfdCBjb3VudDsKLQlpbnQgc2xlZXBlcnM7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLX07Ci0KLSNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAotewkJCQkJCQkJCVwKLQkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKLQkuc2xlZXBlcnMJPSAwLAkJCQkJCVwKLQkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAotfQotCi0jZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KSBcCi0Jc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkKLQotI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKLXsKLS8qCi0gKgkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKCpzZW0pLHZhbCk7Ci0gKgotICogaSdkIHJhdGhlciB1c2UgdGhlIG1vcmUgZmxleGlibGUgaW5pdGlhbGl6YXRpb24gYWJvdmUsIGJ1dCBzYWRseQotICogR0NDIDIuNy4yLjMgZW1pdHMgYSBib2d1cyB3YXJuaW5nLiBFR0NTIGRvZXNudC4gT2ggd2VsbC4KLSAqLwotCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7Ci0Jc2VtLT5zbGVlcGVycyA9IDA7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Ci1hc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7Ci0KLWFzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLQotLyoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50IHRoZSBzZW1hcGhvcmUncyBjb3VudC4gIElmIGl0IGdvZXMgbmVnYXRpdmUsCi0gKiBibG9jayB0aGUgY2FsbGluZyB0aHJlYWQgaW4gdGhlIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHN0YXRlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApKQotCQlfX2Rvd24oc2VtKTsKLX0KLQotLyoKLSAqIEludGVycnVwdGlibGUgdHJ5IHRvIGFjcXVpcmUgYSBzZW1hcGhvcmUuICBJZiB3ZSBvYnRhaW5lZAotICogaXQsIHJldHVybiB6ZXJvLiAgSWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCwgcmV0dXJucyAtRUlOVFIKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKSkKLQkJcmVzdWx0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBOb24tYmxvY2tpbmdseSBhdHRlbXB0IHRvIGRvd24oKSBhIHNlbWFwaG9yZS4KLSAqIFJldHVybnMgemVybyBpZiB3ZSBhY3F1aXJlZCBpdAotICovCi1zdGF0aWMgaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgY291bnQ7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiIyBkb3duX3RyeWxvY2sJCQlcblx0IgotCQlEQ0FDSEVfQ0xFQVIoIiUwIiwgInI0IiwgIiUxIikKLQkJTTMyUl9MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJImFkZGkJJTAsICMtMTsJCVxuXHQiCi0JCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwkJXG5cdCIKLQkJOiAiPSZyIiAoY291bnQpCi0JCTogInIiICgmc2VtLT5jb3VudCkKLQkJOiAibWVtb3J5IgotI2lmZGVmIENPTkZJR19DSElQX00zMjcwMF9UUzEKLQkJLCAicjQiCi0jZW5kaWYJLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLwotCSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGNvdW50IDwgMCkpCi0JCXJlc3VsdCA9IF9fZG93bl90cnlsb2NrKHNlbSk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgotICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KLSAqIFRoZSBkZWZhdWx0IGNhc2UgKG5vIGNvbnRlbnRpb24pIHdpbGwgcmVzdWx0IGluIE5PCi0gKiBqdW1wcyBmb3IgYm90aCBkb3duKCkgYW5kIHVwKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWlmICh1bmxpa2VseShhdG9taWNfaW5jX3JldHVybigmc2VtLT5jb3VudCkgPD0gMCkpCi0JCV9fdXAoc2VtKTsKLX0KLQotI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAgLyogX0FTTV9NMzJSX1NFTUFQSE9SRV9IICovCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2t2bS5oIGIvaW5jbHVkZS9hc20tbTY4ay9rdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWQyN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fTTY4S19ICisjZGVmaW5lIF9fTElOVVhfS1ZNX002OEtfSAorCisvKiBtNjhrIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmMzBiYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1NFTUFQSE9SRV9IRUxQRVJfSAotI2RlZmluZSBfTTY4S19TRU1BUEhPUkVfSEVMUEVSX0gKLQotLyoKLSAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMgaGVscGVyIGZ1bmN0aW9ucy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqCi0gKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotLyoKLSAqIFRoZXNlIHR3byBfbXVzdF8gZXhlY3V0ZSBhdG9taWNhbGx5IHdydCBlYWNoIG90aGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9vbmVfbW9yZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWF0b21pY19pbmMoJnNlbS0+d2FraW5nKTsKLX0KLQotI2lmbmRlZiBDT05GSUdfUk1XX0lOU05TCi1leHRlcm4gc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2NrOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVybyhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldDsKLSNpZm5kZWYgQ09ORklHX1JNV19JTlNOUwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldCA9IDA7Ci0JaWYgKGF0b21pY19yZWFkKCZzZW0tPndha2luZykgPiAwKSB7Ci0JCWF0b21pY19kZWMoJnNlbS0+d2FraW5nKTsKLQkJcmV0ID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotI2Vsc2UKLQlpbnQgdG1wMSwgdG1wMjsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fCi0JICAoIjE6CW1vdmVsCSUxLCUyXG4iCi0JICAgIiAgICBqbGUJMmZcbiIKLQkgICAiCXN1YnFsCSMxLCUyXG4iCi0JICAgIgljYXNsCSUxLCUyLCUzXG4iCi0JICAgIglqbmUJMWJcbiIKLQkgICAiCW1vdmVxCSMxLCUwXG4iCi0JICAgIjI6IgotCSAgIDogIj1kIiAocmV0KSwgIj1kIiAodG1wMSksICI9ZCIgKHRtcDIpCi0JICAgOiAibSIgKHNlbS0+d2FraW5nKSwgIjAiICgwKSwgIjEiIChzZW0tPndha2luZykpOwotI2VuZGlmCi0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGU6Ci0gKgkxCWdvdCB0aGUgbG9jawotICoJMAlnbyB0byBzbGVlcAotICoJLUVJTlRSCWludGVycnVwdGVkCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwKLQkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWludCByZXQ7Ci0jaWZuZGVmIENPTkZJR19STVdfSU5TTlMKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSAwOwotCWlmIChhdG9taWNfcmVhZCgmc2VtLT53YWtpbmcpID4gMCkgewotCQlhdG9taWNfZGVjKCZzZW0tPndha2luZyk7Ci0JCXJldCA9IDE7Ci0JfSBlbHNlIGlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7Ci0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCQlyZXQgPSAtRUlOVFI7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IHRtcDEsIHRtcDI7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXwotCSAgKCIxOgltb3ZlbAklMSwlMlxuIgotCSAgICIJamxlCTJmXG4iCi0JICAgIglzdWJxbAkjMSwlMlxuIgotCSAgICIJY2FzbAklMSwlMiwlM1xuIgotCSAgICIJam5lCTFiXG4iCi0JICAgIgltb3ZlcQkjMSwlMFxuIgotCSAgICIJanJhCSVhNFxuIgotCSAgICIyOiIKLQkgICA6ICI9ZCIgKHJldCksICI9ZCIgKHRtcDEpLCAiPWQiICh0bXAyKQotCSAgIDogIm0iIChzZW0tPndha2luZyksICJpIiAoJiZuZXh0KSwgIjAiICgwKSwgIjEiIChzZW0tPndha2luZykpOwotCWlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7Ci0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCQlyZXQgPSAtRUlOVFI7Ci0JfQotbmV4dDoKLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIHdha2luZ19ub25femVyb190cnlsb2NrOgotICoJMQlmYWlsZWQgdG8gbG9jawotICoJMAlnb3QgdGhlIGxvY2sKLSAqLwotc3RhdGljIGlubGluZSBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCWludCByZXQ7Ci0jaWZuZGVmIENPTkZJR19STVdfSU5TTlMKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXQgPSAxOwotCWlmIChhdG9taWNfcmVhZCgmc2VtLT53YWtpbmcpID4gMCkgewotCQlhdG9taWNfZGVjKCZzZW0tPndha2luZyk7Ci0JCXJldCA9IDA7Ci0JfSBlbHNlCi0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IHRtcDEsIHRtcDI7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXwotCSAgKCIxOgltb3ZlbAklMSwlMlxuIgotCSAgICIgICAgamxlCTJmXG4iCi0JICAgIglzdWJxbAkjMSwlMlxuIgotCSAgICIJY2FzbAklMSwlMiwlM1xuIgotCSAgICIJam5lCTFiXG4iCi0JICAgIgltb3ZlcQkjMCwlMFxuIgotCSAgICIyOiIKLQkgICA6ICI9ZCIgKHJldCksICI9ZCIgKHRtcDEpLCAiPWQiICh0bXAyKQotCSAgIDogIm0iIChzZW0tPndha2luZyksICIwIiAoMSksICIxIiAoc2VtLT53YWtpbmcpKTsKLQlpZiAocmV0KQotCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2VtYXBob3JlLmgKaW5kZXggNjRkNmIxMS4uZDliMjAzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS5oCkBAIC0xLDE2MyArMSBAQAotI2lmbmRlZiBfTTY4S19TRU1BUEhPUkVfSAotI2RlZmluZSBfTTY4S19TRU1BUEhPUkVfSAotCi0jZGVmaW5lIFJXX0xPQ0tfQklBUwkJIDB4MDEwMDAwMDAKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotLyoKLSAqIEludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMuLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcwotICoKLSAqIG02OGsgdmVyc2lvbiBieSBBbmRyZWFzIFNjaHdhYgotICovCi0KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JYXRvbWljX3Qgd2FraW5nOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLndha2luZwkJPSBBVE9NSUNfSU5JVCgwKSwJCQkJXAotCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCi19Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQotCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCpzZW0sIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDApOwotfQotCi1hc21saW5rYWdlIHZvaWQgX19kb3duX2ZhaWxlZCh2b2lkIC8qIHNwZWNpYWwgcmVnaXN0ZXIgY2FsbGluZyBjb252ZW50aW9uICovKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgIC8qIHBhcmFtcyBpbiByZWdpc3RlcnMgKi8pOwotYXNtbGlua2FnZSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOwotCi1hc21saW5rYWdlIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci0KLS8qCi0gKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgotICogImRvd25fZmFpbGVkIiBpcyBhIHNwZWNpYWwgYXNtIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgQwotICogcm91dGluZSB0aGF0IGFjdHVhbGx5IHdhaXRzLiBTZWUgYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07Ci0KLQltaWdodF9zbGVlcCgpOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkifCBhdG9taWMgZG93biBvcGVyYXRpb25cblx0IgotCQkic3VicWwgIzEsJTBAXG5cdCIKLQkJImptaSAyZlxuXHQiCi0JCSIxOlxuIgotCQlMT0NLX1NFQ1RJT05fU1RBUlQoIi5ldmVuXG5cdCIpCi0JCSIyOlx0cGVhIDFiXG5cdCIKLQkJImpicmEgX19kb3duX2ZhaWxlZFxuIgotCQlMT0NLX1NFQ1RJT05fRU5ECi0JCTogLyogbm8gb3V0cHV0cyAqLwotCQk6ICJhIiAoc2VtMSkKLQkJOiAibWVtb3J5Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07Ci0JcmVnaXN0ZXIgaW50IHJlc3VsdCBfX2FzbV9fICgiJWQwIik7Ci0KLQltaWdodF9zbGVlcCgpOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkifCBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCi0JCSJzdWJxbCAjMSwlMUBcblx0IgotCQkiam1pIDJmXG5cdCIKLQkJImNscmwgJTBcbiIKLQkJIjE6XG4iCi0JCUxPQ0tfU0VDVElPTl9TVEFSVCgiLmV2ZW5cblx0IikKLQkJIjI6XHRwZWEgMWJcblx0IgotCQkiamJyYSBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGVcbiIKLQkJTE9DS19TRUNUSU9OX0VORAotCQk6ICI9ZCIgKHJlc3VsdCkKLQkJOiAiYSIgKHNlbTEpCi0JCTogIm1lbW9yeSIpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07Ci0JcmVnaXN0ZXIgaW50IHJlc3VsdCBfX2FzbV9fICgiJWQwIik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInwgYXRvbWljIGRvd24gdHJ5bG9jayBvcGVyYXRpb25cblx0IgotCQkic3VicWwgIzEsJTFAXG5cdCIKLQkJImptaSAyZlxuXHQiCi0JCSJjbHJsICUwXG4iCi0JCSIxOlxuIgotCQlMT0NLX1NFQ1RJT05fU1RBUlQoIi5ldmVuXG5cdCIpCi0JCSIyOlx0cGVhIDFiXG5cdCIKLQkJImpicmEgX19kb3duX2ZhaWxlZF90cnlsb2NrXG4iCi0JCUxPQ0tfU0VDVElPTl9FTkQKLQkJOiAiPWQiIChyZXN1bHQpCi0JCTogImEiIChzZW0xKQotCQk6ICJtZW1vcnkiKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgotICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KLSAqIFRoZSBkZWZhdWx0IGNhc2UgKG5vIGNvbnRlbnRpb24pIHdpbGwgcmVzdWx0IGluIE5PCi0gKiBqdW1wcyBmb3IgYm90aCBkb3duKCkgYW5kIHVwKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JcmVnaXN0ZXIgc3RydWN0IHNlbWFwaG9yZSAqc2VtMSBfX2FzbV9fICgiJWExIikgPSBzZW07Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInwgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCi0JCSJhZGRxbCAjMSwlMEBcblx0IgotCQkiamxlIDJmXG4iCi0JCSIxOlxuIgotCQlMT0NLX1NFQ1RJT05fU1RBUlQoIi5ldmVuXG5cdCIpCi0JCSIyOlx0IgotCQkicGVhIDFiXG5cdCIKLQkJImpicmEgX191cF93YWtldXBcbiIKLQkJTE9DS19TRUNUSU9OX0VORAotCQk6IC8qIG5vIG91dHB1dHMgKi8KLQkJOiAiYSIgKHNlbTEpCi0JCTogIm1lbW9yeSIpOwotfQotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW02OGsvdW5pc3RkLmgKaW5kZXggODdmNzdiMS4uZTcyYmE1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oCkBAIC0zMjAsMTMgKzMyMCwxNSBAQAogI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CTMxNQogI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMzE2CiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQJCTMxNwotI2RlZmluZSBfX05SX3RpbWVyZmQJCTMxOAorI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCTMxOAogI2RlZmluZSBfX05SX2V2ZW50ZmQJCTMxOQogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMzIwCisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCTMyMQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkzMjIKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzIxCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzMjMKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2t2bS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2t2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OWQ0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUva3ZtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTElOVVhfS1ZNX002OEtOT01NVV9ICisjZGVmaW5lIF9fTElOVVhfS1ZNX002OEtOT01NVV9ICisKKy8qIG02OGtub21tdSBkb2VzIG5vdCBzdXBwb3J0IEtWTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tYWNoZGVwLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWFjaGRlcC5oCmluZGV4IDFjZjI2ZDIuLmRlOWY0N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21hY2hkZXAuaApAQCAtMjEsNCArMjEsNiBAQAogCiBleHRlcm4gdm9pZCBjb25maWdfQlNQKGNoYXIgKmNvbW1hbmQsIGludCBsZW4pOwogCitleHRlcm4gdm9pZCBkb19JUlEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKKwogI2VuZGlmIC8qIF9NNjhLTk9NTVVfTUFDSERFUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWFwaG9yZS1oZWxwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNkYTdiYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLWhlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19TRU1BUEhPUkVfSEVMUEVSX0gKLSNkZWZpbmUgX002OEtfU0VNQVBIT1JFX0hFTFBFUl9ICi0KLS8qCi0gKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzIGhlbHBlciBmdW5jdGlvbnMuCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCi0gKgotICogbTY4ayB2ZXJzaW9uIGJ5IEFuZHJlYXMgU2Nod2FiCi0gKi8KLQotCi0vKgotICogVGhlc2UgdHdvIF9tdXN0XyBleGVjdXRlIGF0b21pY2FsbHkgd3J0IGVhY2ggb3RoZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX29uZV9tb3JlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JYXRvbWljX2luYygmc2VtLT53YWtpbmcpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm8oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JcmV0ID0gMDsKLQlpZiAoYXRvbWljX3JlYWQoJnNlbS0+d2FraW5nKSA+IDApIHsKLQkJYXRvbWljX2RlYygmc2VtLT53YWtpbmcpOwotCQlyZXQgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlOgotICoJMQlnb3QgdGhlIGxvY2sKLSAqCTAJZ28gdG8gc2xlZXAKLSAqCS1FSU5UUglpbnRlcnJ1cHRlZAotICovCi1zdGF0aWMgaW5saW5lIGludCB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sCi0JCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldCA9IDA7Ci0JaWYgKGF0b21pY19yZWFkKCZzZW0tPndha2luZykgPiAwKSB7Ci0JCWF0b21pY19kZWMoJnNlbS0+d2FraW5nKTsKLQkJcmV0ID0gMTsKLQl9IGVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKLQkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7Ci0JCXJldCA9IC1FSU5UUjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jazoKLSAqCTEJZmFpbGVkIHRvIGxvY2sKLSAqCTAJZ290IHRoZSBsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHdha2luZ19ub25femVyb190cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldCA9IDE7Ci0JaWYgKGF0b21pY19yZWFkKCZzZW0tPndha2luZykgPiAwKSB7Ci0JCWF0b21pY19kZWMoJnNlbS0+d2FraW5nKTsKLQkJcmV0ID0gMDsKLQl9IGVsc2UKLQkJYXRvbWljX2luYygmc2VtLT5jb3VudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWFwaG9yZS5oCmluZGV4IDU3NzllYjYuLmQ5YjIwMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLmgKQEAgLTEsMTUzICsxIEBACi0jaWZuZGVmIF9NNjhLX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9NNjhLX1NFTUFQSE9SRV9ICi0KLSNkZWZpbmUgUldfTE9DS19CSUFTCQkgMHgwMTAwMDAwMAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0vKgotICogSW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4uCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCi0gKgotICogbTY4ayB2ZXJzaW9uIGJ5IEFuZHJlYXMgU2Nod2FiCi0gKi8KLQotCi1zdHJ1Y3Qgc2VtYXBob3JlIHsKLQlhdG9taWNfdCBjb3VudDsKLQlhdG9taWNfdCB3YWtpbmc7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLX07Ci0KLSNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAotewkJCQkJCQkJCVwKLQkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKLQkud2FraW5nCQk9IEFUT01JQ19JTklUKDApLAkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCpzZW0sIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDApOwotfQotCi1hc21saW5rYWdlIHZvaWQgX19kb3duX2ZhaWxlZCh2b2lkIC8qIHNwZWNpYWwgcmVnaXN0ZXIgY2FsbGluZyBjb252ZW50aW9uICovKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgIC8qIHBhcmFtcyBpbiByZWdpc3RlcnMgKi8pOwotYXNtbGlua2FnZSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOwotCi1hc21saW5rYWdlIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotYXNtbGlua2FnZSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci0KLWV4dGVybiBzcGlubG9ja190IHNlbWFwaG9yZV93YWtlX2xvY2s7Ci0KLS8qCi0gKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgotICogImRvd25fZmFpbGVkIiBpcyBhIHNwZWNpYWwgYXNtIGhhbmRsZXIgdGhhdCBjYWxscyB0aGUgQwotICogcm91dGluZSB0aGF0IGFjdHVhbGx5IHdhaXRzLiBTZWUgYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJ8IGF0b21pYyBkb3duIG9wZXJhdGlvblxuXHQiCi0JCSJtb3ZlbAklMCwgJSVhMVxuXHQiCi0JCSJsZWEJJSVwY0AoMWYpLCAlJWEwXG5cdCIKLQkJInN1YnFsCSMxLCAlJWExQFxuXHQiCi0JCSJqbWkgX19kb3duX2ZhaWxlZFxuIgotCQkiMToiCi0JCTogLyogbm8gb3V0cHV0cyAqLwotCQk6ICJnIiAoc2VtKQotCQk6ICJjYyIsICIlYTAiLCAiJWExIiwgIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgcmV0OwotCi0JbWlnaHRfc2xlZXAoKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInwgYXRvbWljIGRvd24gb3BlcmF0aW9uXG5cdCIKLQkJIm1vdmVsCSUxLCAlJWExXG5cdCIKLQkJImxlYQklJXBjQCgxZiksICUlYTBcblx0IgotCQkic3VicWwJIzEsICUlYTFAXG5cdCIKLQkJImptaSBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGVcblx0IgotCQkiY2xybAklJWQwXG4iCi0JCSIxOiBtb3ZlbAklJWQwLCAlMFxuIgotCQk6ICI9ZCIgKHJldCkKLQkJOiAiZyIgKHNlbSkKLQkJOiAiY2MiLCAiJWQwIiwgIiVhMCIsICIlYTEiLCAibWVtb3J5Iik7Ci0JcmV0dXJuKHJldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJlZ2lzdGVyIHN0cnVjdCBzZW1hcGhvcmUgKnNlbTEgX19hc21fXyAoIiVhMSIpID0gc2VtOwotCXJlZ2lzdGVyIGludCByZXN1bHQgX19hc21fXyAoIiVkMCIpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJ8IGF0b21pYyBkb3duIHRyeWxvY2sgb3BlcmF0aW9uXG5cdCIKLQkJInN1YnFsICMxLCUxQFxuXHQiCi0JCSJqbWkgMmZcblx0IgotCQkiY2xybCAlMFxuIgotCQkiMTpcbiIKLQkJIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iCi0JCSIuZXZlblxuIgotCQkiMjpcdHBlYSAxYlxuXHQiCi0JCSJqYnJhIF9fZG93bl9mYWlsZWRfdHJ5bG9ja1xuIgotCQkiLnByZXZpb3VzIgotCQk6ICI9ZCIgKHJlc3VsdCkKLQkJOiAiYSIgKHNlbTEpCi0JCTogIm1lbW9yeSIpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCi0gKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgotICogVGhlIGRlZmF1bHQgY2FzZSAobm8gY29udGVudGlvbikgd2lsbCByZXN1bHQgaW4gTk8KLSAqIGp1bXBzIGZvciBib3RoIGRvd24oKSBhbmQgdXAoKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJ8IGF0b21pYyB1cCBvcGVyYXRpb25cblx0IgotCQkibW92ZWwJJTAsICUlYTFcblx0IgotCQkibGVhCSUlcGNAKDFmKSwgJSVhMFxuXHQiCi0JCSJhZGRxbAkjMSwgJSVhMUBcblx0IgotCQkiamxlIF9fdXBfd2FrZXVwXG4iCi0JCSIxOiIKLQkJOiAvKiBubyBvdXRwdXRzICovCi0JCTogImciIChzZW0pCi0JCTogImNjIiwgIiVhMCIsICIlYTEiLCAibWVtb3J5Iik7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmgKaW5kZXggMjdjMmY5Yi4uNGJhOThiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmlzdGQuaApAQCAtMzIxLDEzICszMjEsMTUgQEAKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTUKICNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNgogI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTcKLSNkZWZpbmUgX19OUl90aW1lcmZkCQkzMTgKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTgKICNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTkKICNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMyMAorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMjEKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzIyCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTMyMQorI2RlZmluZSBOUl9zeXNjYWxscwkJMzIzCiAKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKaW5kZXggNDkzM2I0OS4uZDVjMGYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKQEAgLTYzLDggKzYzLDIyIEBACiB9CiAKIGV4dGVybiB2b2lkICgqZmx1c2hfaWNhY2hlX3JhbmdlKSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKworZXh0ZXJuIHZvaWQgKCpfX2ZsdXNoX2NhY2hlX3ZtYXApKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfdm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzKQorCQlfX2ZsdXNoX2NhY2hlX3ZtYXAoKTsKK30KKworZXh0ZXJuIHZvaWQgKCpfX2ZsdXNoX2NhY2hlX3Z1bm1hcCkodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV92dW5tYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKKwkJX19mbHVzaF9jYWNoZV92dW5tYXAoKTsKK30KIAogZXh0ZXJuIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLApAQCAtOTMsNyArMTA3LDcgQEAKIAljbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmKHBhZ2UpLT5mbGFncykKIAogLyogUnVuIGtlcm5lbCBjb2RlIHVuY2FjaGVkLCB1c2VmdWwgZm9yIGNhY2hlIHByb2JpbmcgZnVuY3Rpb25zLiAqLwotdW5zaWduZWQgbG9uZyBfX2luaXQgcnVuX3VuY2FjaGVkKHZvaWQgKmZ1bmMpOwordW5zaWduZWQgbG9uZyBydW5fdW5jYWNoZWQodm9pZCAqZnVuYyk7CiAKIGV4dGVybiB2b2lkICprbWFwX2NvaGVyZW50KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIHZvaWQga3VubWFwX2NvaGVyZW50KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaAppbmRleCA0ZDZiZDVjLi40Mzc0YWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaApAQCAtMzksNyArMzksNiBAQAogICogZWFzaWx5LCBzdWJzZXF1ZW50IHB0ZSB0YWJsZXMgaGF2ZSB0byBiZSBhbGxvY2F0ZWQgaW4gb25lIHBoeXNpY2FsCiAgKiBjaHVuayBvZiBSQU0uCiAgKi8KLSNkZWZpbmUgUEtNQVBfQkFTRSAoMHhmZTAwMDAwMFVMKQogI2RlZmluZSBMQVNUX1BLTUFQIDEwMjQKICNkZWZpbmUgTEFTVF9QS01BUF9NQVNLIChMQVNUX1BLTUFQLTEpCiAjZGVmaW5lIFBLTUFQX05SKHZpcnQpICAoKHZpcnQtUEtNQVBfQkFTRSkgPj4gUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMva3ZtLmggYi9pbmNsdWRlL2FzbS1taXBzL2t2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2E1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2t2bS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0xJTlVYX0tWTV9NSVBTX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fTUlQU19ICisKKy8qIG1pcHMgZG9lcyBub3Qgc3VwcG9ydCBLVk0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDAuaAppbmRleCBjYjE4YWY5Li41YmI1N2JmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwLmgKQEAgLTE3ODYsNiArMTc4Niw3IEBACiAJY2hhcgkJKmNwdV9uYW1lOwogCXVuc2lnbmVkIGNoYXIJY3B1X29kOwkJLyogU2V0IENvbmZpZ1tPRF0gKi8KIAl1bnNpZ25lZCBjaGFyCWNwdV9iY2xrOwkvKiBFbmFibGUgQkNMSyBzd2l0Y2hpbmcgKi8KKwl1bnNpZ25lZCBjaGFyCWNwdV9wbGxfd287CS8qIHN5c19jcHVwbGwgcmVnLiB3cml0ZS1vbmx5ICovCiB9OwogCiBleHRlcm4gc3RydWN0IGNwdV9zcGVjCQljcHVfc3BlY3NbXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2lkZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgKaW5kZXggZTRmZTI2Yy4uODk2NTVjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgKQEAgLTEyMiwyNCArMTIyLDYgQEAKIH07CiAjZW5kaWYKIAotLyogZnVuY3Rpb24gcHJvdG90eXBpbmcgKi8KLXU4IGF1aWRlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOwotdTE2IGF1aWRlX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOwotdTMyIGF1aWRlX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOwotdm9pZCBhdWlkZV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KTsKLXZvaWQgYXVpZGVfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7Ci12b2lkIGF1aWRlX291dGIodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLXZvaWQgYXVpZGVfb3V0YnN5bmMoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotdm9pZCBhdWlkZV9vdXR3KHUxNiBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotdm9pZCBhdWlkZV9vdXRsKHUzMiBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotdm9pZCBhdWlkZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7Ci12b2lkIGF1aWRlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KTsKLXN0YXRpYyB2b2lkIGF1aWRlX3R1bmVfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlLCBieXRlIHBpbyk7Ci1zdGF0aWMgaW50IGF1aWRlX3R1bmVfY2hpcHNldChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKTsKLXN0YXRpYyBpbnQgYXVpZGVfZGRtYV9pbml0KCBfYXVpZGVfaHdpZiAqYXVpZGUgKTsKLXN0YXRpYyB2b2lkIGF1aWRlX3NldHVwX3BvcnRzKGh3X3JlZ3NfdCAqaHcsIF9hdWlkZV9od2lmICphaHdpZik7Ci1pbnQgX19pbml0IGF1aWRlX3Byb2JlKHZvaWQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBQSU8gTW9kZSB0aW1pbmcgY2FsY3VsYXRpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMTIwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjEyMDAuaAppbmRleCAwNTBlYWU4Li5kMmUyOGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMTIwMC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kYjF4MDAvZGIxMjAwLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgX19BU01fREIxMjAwX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KIAogLy8gVGhpcyBpcyBkZWZpbmVkIGluIGF1MTAwMC5oIHdpdGggYm9ndXMgdmFsdWUKICN1bmRlZiBBVTFYMDBfRVhURVJOQUxfSU5UCkBAIC0xNzIsOCArMTczLDggQEAKICNkZWZpbmUgQVUxWFhYX1NNQzkxMTExX0lSUQkJCURCMTIwMF9FVEhfSU5UCiAKICNkZWZpbmUgQVUxWFhYX0FUQV9QSFlTX0FERFIJCSgweDE4ODAwMDAwKQotI2RlZmluZSBBVTFYWFhfQVRBX1BIWVNfTEVOCQkJKDB4MTAwKQotI2RlZmluZSBBVTFYWFhfQVRBX1JFR19PRkZTRVQJKDUpCisjZGVmaW5lIEFVMVhYWF9BVEFfUkVHX09GRlNFVAkJKDUpCisjZGVmaW5lIEFVMVhYWF9BVEFfUEhZU19MRU4JCSgxNiA8PCBBVTFYWFhfQVRBX1JFR19PRkZTRVQpCiAjZGVmaW5lIEFVMVhYWF9BVEFfSU5UCQkJREIxMjAwX0lERV9JTlQKICNkZWZpbmUgQVUxWFhYX0FUQV9ERE1BX1JFUQkJRFNDUl9DTUQwX0RNQV9SRVExOwogI2RlZmluZSBBVTFYWFhfQVRBX1JRU0laRQkJMTI4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMXgwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjF4MDAuaAppbmRleCAwZjVmNGMyLi5lN2E4OGJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMXgwMC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kYjF4MDAvZGIxeDAwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZm5kZWYgX19BU01fREIxWDAwX0gKICNkZWZpbmUgX19BU01fREIxWDAwX0gKIAorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmg+CiAKICNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaAppbmRleCA0ZWMyYjkzLi4wZjZjMjUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaApAQCAtMjcsOCArMjcsNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfREVGQVVMVFMKLQogc3RhdGljIF9faW5saW5lX18gaW50IGlkZV9wcm9iZV9sZWdhY3kodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUENJCkBAIC05OCwxNCArOTYsNiBAQAogCX0KIH0KIAotI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCi0jZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCSgwKQotI2Vsc2UKLSNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJaWRlX2RlZmF1bHRfaXJxKGJhc2UpCi0jZW5kaWYKLQogLyogTUlQUyBwb3J0IGFuZCBtZW1vcnktbWFwcGVkIEkvTyBzdHJpbmcgb3BlcmF0aW9ucy4gICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pZGVfZmx1c2hfcHJvbG9ndWUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggZmUwNzYzOC4uN2QzMTEyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTM0LDcgKzM0LDExIEBACiAjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCiAKICNkZWZpbmUgY3B1X2hhc180a2V4CQkxCisjZGVmaW5lIGNwdV9oYXNfM2tfY2FjaGUJMAorI2RlZmluZSBjcHVfaGFzXzZrX2NhY2hlCTAKICNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCisjZGVmaW5lIGNwdV9oYXNfOGtfY2FjaGUJMAorI2RlZmluZSBjcHVfaGFzX3R4MzlfY2FjaGUJMAogCiAjZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMJMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9kbWEtY29oZXJlbmNlLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9kbWEtY29oZXJlbmNlLmgKaW5kZXggM2ZkYmJmNi4uZWQ3ZTYyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvZG1hLWNvaGVyZW5jZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2RtYS1jb2hlcmVuY2UuaApAQCAtMzUsNyArMzUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGF0X2RtYV9hZGRyX3RvX3BoeXMoZG1hX2FkZHJfdCBkbWFfYWRkcikKIHsKLQlyZXR1cm4gZG1hX2FkZHIgJiAoMHhmZlVMIDw8IDU2KTsKKwlyZXR1cm4gZG1hX2FkZHIgJiB+KDB4ZmZVTCA8PCA1Nik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbGF0X3VubWFwX2RtYV9tZW0oZG1hX2FkZHJfdCBkbWFfYWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qbXIzOTI3L2lvcmVtYXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qbXIzOTI3L2lvcmVtYXAuaAppbmRleCBhYTEzMWFkLi4yOTk4OWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtam1yMzkyNy9pb3JlbWFwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWptcjM5MjcvaW9yZW1hcC5oCkBAIC0yNSw3ICsyNSw3IEBACiB7CiAjZGVmaW5lIFRYWDlfRElSRUNUTUFQX0JBU0UJMHhmZjAwMDAwMHVsCiAJaWYgKG9mZnNldCA+PSBUWFg5X0RJUkVDVE1BUF9CQVNFICYmCi0JICAgIG9mZnNldCA8IFRYWDlfRElSRUNUTUFQX0JBU0UgKyAweGYwMDAwKQorCSAgICBvZmZzZXQgPCBUWFg5X0RJUkVDVE1BUF9CQVNFICsgMHhmZjAwMDApCiAJCXJldHVybiAodm9pZCBfX2lvbWVtICopb2Zmc2V0OwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWxhc2F0L2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWxhc2F0L2lycS5oCmluZGV4IGRhNzVmODkuLjNhMjgyNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1sYXNhdC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbGFzYXQvaXJxLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9BU01fTUFDSF9MQVNBVF9JUlFfSAogI2RlZmluZSBfQVNNX01BQ0hfTEFTQVRfSVJRX0gKIAotI2RlZmluZSBMQVNBVF9DQVNDQURFX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyAwKQorI2RlZmluZSBMQVNBVF9DQVNDQURFX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyAyKQogCiAjZGVmaW5lIExBU0FUX0lSUV9CQVNFCQk4CiAjZGVmaW5lIExBU0FUX0lSUV9FTkQJCTIzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTIwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjEyMDAuaAppbmRleCBkOWYzODRhLi5lZGFhNDg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTIwMC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxMjAwLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgX19BU01fUEIxMjAwX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KIAogLy8gVGhpcyBpcyBkZWZpbmVkIGluIGF1MTAwMC5oIHdpdGggYm9ndXMgdmFsdWUKICN1bmRlZiBBVTFYMDBfRVhURVJOQUxfSU5UCkBAIC0xODUsOCArMTg2LDggQEAKICNkZWZpbmUgQVUxWFhYX1NNQzkxMTExX0lSUQkJCVBCMTIwMF9FVEhfSU5UCiAKICNkZWZpbmUgQVUxWFhYX0FUQV9QSFlTX0FERFIJCSgweDBDODAwMDAwKQotI2RlZmluZSBBVTFYWFhfQVRBX1BIWVNfTEVOCQkJKDB4MTAwKQotI2RlZmluZSBBVTFYWFhfQVRBX1JFR19PRkZTRVQJKDUpCisjZGVmaW5lIEFVMVhYWF9BVEFfUkVHX09GRlNFVAkJKDUpCisjZGVmaW5lIEFVMVhYWF9BVEFfUEhZU19MRU4JCSgxNiA8PCBBVTFYWFhfQVRBX1JFR19PRkZTRVQpCiAjZGVmaW5lIEFVMVhYWF9BVEFfSU5UCQkJUEIxMjAwX0lERV9JTlQKICNkZWZpbmUgQVUxWFhYX0FUQV9ERE1BX1JFUQkJRFNDUl9DTUQwX0RNQV9SRVExOwogI2RlZmluZSBBVTFYWFhfQVRBX1JRU0laRQkJMTI4CkBAIC0yNDQsNyArMjQ1LDcgQEAKIAlQQjEyMDBfU0QxX0lOU0VSVF9JTlQsCiAJUEIxMjAwX1NEMV9FSkVDVF9JTlQsCiAKLQlQQjEyMDBfSU5UX0VORAkJCShQQjEyMDBfSU5UX0JFR0lOICsgMTUpCisJUEIxMjAwX0lOVF9FTkQJCT0gUEIxMjAwX0lOVF9CRUdJTiArIDE1CiB9OwogCiAvKiBGb3IgZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjE1NTAuaAppbmRleCA5YTQ5NTVjLi5jMmFiMGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTUwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgX19BU01fUEIxNTUwX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KIAogI2RlZmluZSBEQkRNQV9BQzk3X1RYX0NIQU4gRFNDUl9DTUQwX1BTQzFfVFgKICNkZWZpbmUgREJETUFfQUM5N19SWF9DSEFOIERTQ1JfQ01EMF9QU0MxX1JYCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS0zMi5oCmluZGV4IGEwOTQ3MDkuLmNlZWZlMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS0zMi5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS0zMi5oCkBAIC02NSw2ICs2NSw4IEBACiAKICNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICAgTUFQX0JBU0UKIAorI2RlZmluZSBQS01BUF9CQVNFCQkoMHhmZTAwMDAwMFVMKQorCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KICMgZGVmaW5lIFZNQUxMT0NfRU5ECShQS01BUF9CQVNFLTIqUEFHRV9TSVpFKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcWVtdS5oIGIvaW5jbHVkZS9hc20tbWlwcy9xZW11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4N2NlZDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9xZW11LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKLSAqLwotI2lmbmRlZiBfX0FTTV9RRU1VX0gKLSNkZWZpbmUgX19BU01fUUVNVV9ICi0KLS8qCi0gKiBJbnRlcnJ1cHQgbnVtYmVycwotICovCi0jZGVmaW5lIFFfUElDX0lSUV9CQVNFCQkwCi0jZGVmaW5lIFFfQ09VTlRfQ09NUEFSRV9JUlEJMjMKLQotLyoKLSAqIFFlbXUgY2xvY2sgcmF0ZS4gIFVubGlrZSBvbiByZWFsIE1JUFMgdGhpcyBoYXMgbm8gcmVsYXRpb24gdG8gdGhlCi0gKiBpbnN0cnVjdGlvbiBpc3N1ZSByYXRlLCBzbyB0aGUgY2hvb3NlbiB2YWx1ZSBpcyBwdXJlIGZpY3Rpb24sIGp1c3QgbmVlZHMKLSAqIHRvIG1hdGNoIHRoZSB2YWx1ZSBpbiBRZW11IGl0c2VsZi4KLSAqLwotI2RlZmluZSBRRU1VX0MwX0NPVU5URVJfQ0xPQ0sJMTAwMDAwMDAwCi0KLS8qCi0gKiBNYWdpYyBxZW11IHN5c3RlbSBjb250cm9sIGxvY2F0aW9uLgotICovCi0jZGVmaW5lIFFFTVVfUkVTVEFSVF9SRUcJMHhCRkJGMDAwMAotI2RlZmluZSBRRU1VX0hBTFRfUkVHCQkweEJGQkYwMDA0Ci0KLSNlbmRpZiAvKiBfX0FTTV9RRU1VX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1taXBzL3NlbWFwaG9yZS5oCmluZGV4IGZkZjgwNDJiLi5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2VtYXBob3JlLmgKQEAgLTEsMTA4ICsxIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2ICBMaW51cyBUb3J2YWxkcwotICogQ29weXJpZ2h0IChDKSAxOTk4LCA5OSwgMjAwMCwgMDEsIDA0ICBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMDEgIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwMCwgMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KLSAqCi0gKiBJbiBhbGwgaG9uZXN0eSwgbGl0dGxlIG9mIHRoZSBvbGQgTUlQUyBjb2RlIGxlZnQgLSB0aGUgUFBDNjQgdmFyaWFudCB3YXMKLSAqIGp1c3QgbG9va2luZyBuaWNlIGFuZCBwb3J0YWJsZSBzbyBJIHJpcHBlZCBpdC4gIENyZWRpdHMgdG8gd2hvZXZlciB3cm90ZQotICogaXQuCi0gKi8KLSNpZm5kZWYgX19BU01fU0VNQVBIT1JFX0gKLSNkZWZpbmUgX19BU01fU0VNQVBIT1JFX0gKLQotLyoKLSAqIFJlbW92ZSBzcGlubG9jay1iYXNlZCBSVyBzZW1hcGhvcmVzOyBSVyBzZW1hcGhvcmUgZGVmaW5pdGlvbnMgYXJlCi0gKiBub3cgaW4gcndzZW0uaCBhbmQgd2UgdXNlIHRoZSBnZW5lcmljIGxpYi9yd3NlbS5jIGltcGxlbWVudGF0aW9uLgotICogUmV3b3JrIHNlbWFwaG9yZXMgdG8gdXNlIGF0b21pY19kZWNfaWZfcG9zaXRpdmUuCi0gKiAtLSBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQHNhbWJhLm9yZykKLSAqLwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JLyoKLQkgKiBOb3RlIHRoYXQgYW55IG5lZ2F0aXZlIHZhbHVlIG9mIGNvdW50IGlzIGVxdWl2YWxlbnQgdG8gMCwKLQkgKiBidXQgYWRkaXRpb25hbGx5IGluZGljYXRlcyB0aGF0IHNvbWUgcHJvY2VzcyhlcykgbWlnaHQgYmUKLQkgKiBzbGVlcGluZyBvbiBgd2FpdCcuCi0JICovCi0JYXRvbWljX3QgY291bnQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLX07Ci0KLSNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAotewkJCQkJCQkJCVwKLQkuY291bnQJCT0gQVRPTUlDX0lOSVQobiksCQkJCVwKLQkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAotfQotCi0jZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCBjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIGNvdW50KQotCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkJCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKLXsKLQlhdG9taWNfc2V0KCZzZW0tPmNvdW50LCB2YWwpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbS0+d2FpdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAwKTsKLX0KLQotZXh0ZXJuIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotZXh0ZXJuIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0KLQkvKgotCSAqIFRyeSB0byBnZXQgdGhlIHNlbWFwaG9yZSwgdGFrZSB0aGUgc2xvdyBwYXRoIGlmIHdlIGZhaWwuCi0JICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApKQotCQlfX2Rvd24oc2VtKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApKQotCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJldHVybiBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZzZW0tPmNvdW50KSA8IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWlmICh1bmxpa2VseShhdG9taWNfaW5jX3JldHVybigmc2VtLT5jb3VudCkgPD0gMCkpCi0JCV9fdXAoc2VtKTsKLX0KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9fQVNNX1NFTUFQSE9SRV9IICovCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbmkuaAppbmRleCBlNzE2NDQ3Li44YzFlYjAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc25pLmgKQEAgLTIyOCw3ICsyMjgsMTQgQEAKIGV4dGVybiB2b2lkIHNuaV9jcHVfdGltZV9pbml0KHZvaWQpOwogCiAvKiBlaXNhIGluaXQgZm9yIFJNMjAwLzQwMCAqLworI2lmZGVmIENPTkZJR19FSVNBCiBleHRlcm4gaW50IHNuaV9laXNhX3Jvb3RfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzbmlfZWlzYV9yb290X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiBjb21tb24gaXJxIHN0dWZmICovCiBleHRlcm4gdm9pZCAoKnNuaV9od2ludCkodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RpbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCmluZGV4IGE4ZmQxNmUuLmQzYmQ1YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCkBAIC02NCwxMCArNjQsMTEgQEAKICAqIEluaXRpYWxpemUgdGhlIGNvdW50IHJlZ2lzdGVyIGFzIGEgY2xvY2tzb3VyY2UKICAqLwogI2lmZGVmIENPTkZJR19DRVZUX1I0SwotZXh0ZXJuIHZvaWQgaW5pdF9taXBzX2Nsb2Nrc291cmNlKHZvaWQpOworZXh0ZXJuIGludCBpbml0X21pcHNfY2xvY2tzb3VyY2Uodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfbWlwc19jbG9ja3NvdXJjZSh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgaW5pdF9taXBzX2Nsb2Nrc291cmNlKHZvaWQpCiB7CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKaW5kZXggZmE5YTU4Ny4uNDk2NGM4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCkBAIC0zNDEsMTYgKzM0MSwxOSBAQAogI2RlZmluZSBfX05SX3RpbWVyZmQJCQkoX19OUl9MaW51eCArIDMxOCkKICNkZWZpbmUgX19OUl9ldmVudGZkCQkJKF9fTlJfTGludXggKyAzMTkpCiAjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkJKF9fTlJfTGludXggKyAzMjApCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJCShfX05SX0xpbnV4ICsgMzIxKQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkJKF9fTlJfTGludXggKyAzMjIpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCQkoX19OUl9MaW51eCArIDMyMykKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCBvMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMjAKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzIzCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCiAKICNkZWZpbmUgX19OUl9PMzJfTGludXgJCQk0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMjAKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTMyMwogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAogCkBAIC02MzgsMTYgKzY0MSwxOSBAQAogI2RlZmluZSBfX05SX3RpbWVyZmQJCQkoX19OUl9MaW51eCArIDI3NykKICNkZWZpbmUgX19OUl9ldmVudGZkCQkJKF9fTlJfTGludXggKyAyNzgpCiAjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkJKF9fTlJfTGludXggKyAyNzkpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJCShfX05SX0xpbnV4ICsgMjgwKQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkJKF9fTlJfTGludXggKyAyODEpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCQkoX19OUl9MaW51eCArIDI4MikKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCA2NC1iaXQgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNzkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjgyCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCiAKICNkZWZpbmUgX19OUl82NF9MaW51eAkJCTUwMDAKLSNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjc5CisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI4MgogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIApAQCAtOTM5LDE2ICs5NDUsMTkgQEAKICNkZWZpbmUgX19OUl90aW1lcmZkCQkJKF9fTlJfTGludXggKyAyODEpCiAjZGVmaW5lIF9fTlJfZXZlbnRmZAkJCShfX05SX0xpbnV4ICsgMjgyKQogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJCShfX05SX0xpbnV4ICsgMjgzKQorI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCQkoX19OUl9MaW51eCArIDI4NCkKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJCShfX05SX0xpbnV4ICsgMjg1KQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkJKF9fTlJfTGludXggKyAyODYpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTjMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjgzCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI4NgogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KIAogI2RlZmluZSBfX05SX04zMl9MaW51eAkJCTYwMDAKLSNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI4MworI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMjg2CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvS2J1aWxkIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9LYnVpbGQKaW5kZXggNzkzODRjNS4uYzY4ZTE2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9LYnVpbGQKQEAgLTEsNSArMSBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KLQotdW5pZmRlZi15ICs9IHRlcm1pb3MuaAotdW5pZmRlZi15ICs9IHB0cmFjZS5oCi11bmlmZGVmLXkgKz0gcGFnZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2t2bS5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9rdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmI2MDlmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fTU4xMDMwMF9ICisjZGVmaW5lIF9fTElOVVhfS1ZNX01OMTAzMDBfSAorCisvKiBtbjEwMzAwIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9wYXJhbS5oCmluZGV4IDU0Yjg4M2UuLjc4OWIxZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3BhcmFtLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNkZWZpbmUgX0FTTV9QQVJBTV9ICiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIEhaCQkxMDAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisjZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwogI2RlZmluZSBVU0VSX0haCQkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbgogCQkJCQkgKiAidGlja3MiICovCiAjZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3NlbWFwaG9yZS5oCmluZGV4IDVhOWUxYWQuLmQ5YjIwMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zZW1hcGhvcmUuaApAQCAtMSwxNjkgKzEgQEAKLS8qIE1OMTAzMDAgU2VtYXBob3JlcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2lmbmRlZiBfQVNNX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9BU01fU0VNQVBIT1JFX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotCi0jZGVmaW5lIFNFTUFQSE9SRV9ERUJVRwkJMAotCi0vKgotICogdGhlIHNlbWFwaG9yZSBkZWZpbml0aW9uCi0gKiAtIGlmIGNvdW50IGlzID4wIHRoZW4gdGhlcmUgYXJlIHRva2VucyBhdmFpbGFibGUgb24gdGhlIHNlbWFwaG9yZSBmb3IgZG93bgotICogICB0byBjb2xsZWN0Ci0gKiAtIGlmIGNvdW50IGlzIDw9MCB0aGVuIHRoZXJlIGFyZSBubyBzcGFyZSB0b2tlbnMsIGFuZCBhbnlvbmUgdGhhdCB3YW50cyBvbmUKLSAqICAgbXVzdCB3YWl0Ci0gKiAtIGlmIHdhaXRfbGlzdCBpcyBub3QgZW1wdHksIHRoZW4gdGhlcmUgYXJlIHByb2Nlc3NlcyB3YWl0aW5nIGZvciB0aGUKLSAqICAgc2VtYXBob3JlCi0gKi8KLXN0cnVjdCBzZW1hcGhvcmUgewotCWF0b21pY190CQljb3VudDsJCS8qIGl0J3Mgbm90IHJlYWxseSBhdG9taWMsIGl0J3MKLQkJCQkJCSAqIGp1c3QgdGhhdCBjZXJ0YWluIG1vZHVsZXMKLQkJCQkJCSAqIGV4cGVjdCB0byBiZSBhYmxlIHRvIGFjY2VzcwotCQkJCQkJICogaXQgZGlyZWN0bHkgKi8KLQlzcGlubG9ja190CQl3YWl0X2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7Ci0jaWYgU0VNQVBIT1JFX0RFQlVHCi0JdW5zaWduZWQJCV9fbWFnaWM7Ci0jZW5kaWYKLX07Ci0KLSNpZiBTRU1BUEhPUkVfREVCVUcKLSMgZGVmaW5lIF9fU0VNX0RFQlVHX0lOSVQobmFtZSkgLCAobG9uZykmKG5hbWUpLl9fbWFnaWMKLSNlbHNlCi0jIGRlZmluZSBfX1NFTV9ERUJVR19JTklUKG5hbWUpCi0jZW5kaWYKLQotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIGluaXRfY291bnQpCQkJXAotewkJCQkJCQkJCVwKLQkuY291bnQJCT0gQVRPTUlDX0lOSVQoaW5pdF9jb3VudCksCQkJXAotCS53YWl0X2xvY2sJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkud2FpdF9sb2NrKSwJXAotCS53YWl0X2xpc3QJPSBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KQkJXAotCV9fU0VNX0RFQlVHX0lOSVQobmFtZSkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBjb3VudCkKLQotI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQotI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgMCkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigqc2VtLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWV4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotZXh0ZXJuIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLWV4dGVybiB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNvdW50OwotCi0jaWYgU0VNQVBIT1JFX0RFQlVHCi0JQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7Ci0JY291bnQgPSBhdG9taWNfcmVhZCgmc2VtLT5jb3VudCk7Ci0JaWYgKGxpa2VseShjb3VudCA+IDApKSB7Ci0JCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIGNvdW50IC0gMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIHsKLQkJX19kb3duKHNlbSwgZmxhZ3MpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjb3VudCwgcmV0ID0gMDsKLQotI2lmIFNFTUFQSE9SRV9ERUJVRwotCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7Ci0jZW5kaWYKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCWNvdW50ID0gYXRvbWljX3JlYWQoJnNlbS0+Y291bnQpOwotCWlmIChsaWtlbHkoY291bnQgPiAwKSkgewotCQlhdG9taWNfc2V0KCZzZW0tPmNvdW50LCBjb3VudCAtIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCXJldCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSwgZmxhZ3MpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogbm9uLWJsb2NraW5nbHkgYXR0ZW1wdCB0byBkb3duKCkgYSBzZW1hcGhvcmUuCi0gKiAtIHJldHVybnMgemVybyBpZiB3ZSBhY3F1aXJlZCBpdAotICovCi1zdGF0aWMgaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNvdW50LCBzdWNjZXNzID0gMDsKLQotI2lmIFNFTUFQSE9SRV9ERUJVRwotCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7Ci0jZW5kaWYKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCWNvdW50ID0gYXRvbWljX3JlYWQoJnNlbS0+Y291bnQpOwotCWlmIChsaWtlbHkoY291bnQgPiAwKSkgewotCQlhdG9taWNfc2V0KCZzZW0tPmNvdW50LCBjb3VudCAtIDEpOwotCQlzdWNjZXNzID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gIXN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotI2lmIFNFTUFQSE9SRV9ERUJVRwotCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7Ci0jZW5kaWYKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotCWlmICghbGlzdF9lbXB0eSgmc2VtLT53YWl0X2xpc3QpKQotCQlfX3VwKHNlbSk7Ci0JZWxzZQotCQlhdG9taWNfc2V0KCZzZW0tPmNvdW50LCBhdG9taWNfcmVhZCgmc2VtLT5jb3VudCkgKyAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzZW1fZ2V0Y291bnQoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXJldHVybiBhdG9taWNfcmVhZCgmc2VtLT5jb3VudCk7Ci19Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaAppbmRleCA5OWNhNjQ4Li44MGFmOWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmgKQEAgLTUyLDQgKzUyLDYgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QTlMJCTM1CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBOUwkJU09fVElNRVNUQU1QTlMKIAorI2RlZmluZSBTT19NQVJLCQkJMzYKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaAppbmRleCBjZTBjMGQ4Li5kMGE0YTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oCkBAIC0yMDQsNyArMjA0LDcgQEAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSB0aG9zZSBmb3IgMzItYml0IEVMRiBiaW5hcmllcyBvbiBhIDMyLWJpdAogICoga2VybmVsIGFuZCBmb3IgNjQtYml0IGJpbmFyaWVzIG9uIGEgNjQtYml0IGtlcm5lbC4gIFRvIHJ1biAzMi1iaXQgYmluYXJpZXMKLSAqIG9uIGEgNjQtYml0IGtlcm5lbCwgYXJjaC9wYXJpc2M2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMgZGVmaW5lcyB0aGVzZQorICogb24gYSA2NC1iaXQga2VybmVsLCBhcmNoL3BhcmlzYy9rZXJuZWwvYmluZm10X2VsZjMyLmMgZGVmaW5lcyB0aGVzZQogICogbWFjcm9zIGFwcHJvcHJpYXRlbHkgYW5kIHRoZW4gI2luY2x1ZGVzIGJpbmZtdF9lbGYuYywgd2hpY2ggdGhlbiBpbmNsdWRlcwogICogdGhpcyBmaWxlLgogICovCkBAIC0yMTYsMjYgKzIxNiwyNSBAQAogICogTm90ZSB0aGF0IHRoaXMgaGVhZGVyIGZpbGUgaXMgdXNlZCBieSBkZWZhdWx0IGluIGZzL2JpbmZtdF9lbGYuYy4gU28KICAqIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBmb3IgdGhlIGRlZmF1bHQgY2FzZS4gSG93ZXZlciwgZm9yIHRoZSA2NAogICogYml0IGtlcm5lbCB3ZSBhbHNvIHN1cHBvcnQgMzIgYml0IHBhcmlzYyBiaW5hcmllcy4gVG8gZG8gdGhhdAotICogYXJjaC9wYXJpc2M2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMgZGVmaW5lcyBpdHMgb3duIHNldCBvZiB0aGVzZQorICogYXJjaC9wYXJpc2Mva2VybmVsL2JpbmZtdF9lbGYzMi5jIGRlZmluZXMgaXRzIG93biBzZXQgb2YgdGhlc2UKICAqIG1hY3JvcywgYW5kIHRoZW4gaXQgaW5jbHVkZXMgZnMvYmluZm10X2VsZi5jIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlCiAgKiBlbGYgYmluYXJ5IGhhbmRsZXIgZm9yIDMyIGJpdCBiaW5hcmllcyAob24gdGhlIDY0IGJpdCBrZXJuZWwpLgogICovCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIEVMRl9DTEFTUyAgICAgICBFTEZDTEFTUzY0CisjZGVmaW5lIEVMRl9DTEFTUyAgIEVMRkNMQVNTNjQKICNlbHNlCiAjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCiAjZW5kaWYKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CiAKLS8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgotICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KLSAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorLyoKKyAqIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgorICogc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KKyAqIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLgorICovCiAKLSAgIEZvciB0aGUgbW9tZW50LCB3ZSBoYXZlIG9ubHkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIEludGVsIGdlbmVyYXRpb25zLAotICAgYnV0IHRoYXQgY291bGQgY2hhbmdlLi4uICovCi0KLSNkZWZpbmUgRUxGX1BMQVRGT1JNICAoIlBBUklTQ1wwIiAvKisoKGJvb3RfY3B1X2RhdGEueDg2LTMpKjUpICovKQorI2RlZmluZSBFTEZfUExBVEZPUk0gICgiUEFSSVNDXDAiKQogCiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIFwKIAljdXJyZW50LT5wZXJzb25hbGl0eSA9IFBFUl9MSU5VWDsgXApAQCAtMzEwLDcgKzMwOSw3IEBACiAjZGVmaW5lIEVMRl9PU0FCSSAJRUxGT1NBQklfTElOVVgKIAogLyogJXIyMyBpcyBzZXQgYnkgbGQuc28gdG8gYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUgCi0gICByZWdpc3RlcmVkIHVzaW5nIGF0ZXhpdC4gIFRoaXMgcHJvdmlkZXMgYSBtZWFuIGZvciB0aGUgZHluYW1pYworICAgcmVnaXN0ZXJlZCB1c2luZyBhdGV4aXQuICBUaGlzIHByb3ZpZGVzIGEgbWVhbnMgZm9yIHRoZSBkeW5hbWljCiAgICBsaW5rZXIgdG8gY2FsbCBEVF9GSU5JIGZ1bmN0aW9ucyBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aGF0IGhhdmUKICAgIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUgY29kZSBydW5zLgogCkBAIC0zMzksNiArMzM4LDUgQEAKICAgIGJ1dCBpdCdzIG5vdCBlYXN5LCBhbmQgd2UndmUgYWxyZWFkeSBkb25lIGl0IGhlcmUuICAqLwogCiAjZGVmaW5lIEVMRl9IV0NBUAkwCi0vKiAoYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZml4bWFwLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZml4bWFwLmgKaW5kZXggYTVjYWY0Yi4uZGUzZmUzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9maXhtYXAuaApAQCAtMjAsNCArMjAsMTEgQEAKICNkZWZpbmUgS0VSTkVMX01BUF9TVEFSVAkoR0FURVdBWV9QQUdFX1NJWkUpCiAjZGVmaW5lIEtFUk5FTF9NQVBfRU5ECQkoVE1QQUxJQVNfTUFQX1NUQVJUKQogCi0jZW5kaWYKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCAqdm1hbGxvY19zdGFydDsKKyNkZWZpbmUgUENYTF9ETUFfTUFQX1NJWkUJKDgqMTAyNCoxMDI0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoKHVuc2lnbmVkIGxvbmcpdm1hbGxvY19zdGFydCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCShLRVJORUxfTUFQX0VORCkKKyNlbmRpZiAvKl9fQVNTRU1CTFlfXyovCisKKyNlbmRpZiAvKl9BU01fRklYTUFQX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaAppbmRleCBkYmVlNmU2Li5mZGM2ZDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvZnV0ZXguaApAQCAtNTYsNiArNTYsMTIgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgdXZhbDsKIAorCS8qIGZ1dGV4LmMgd2FudHMgdG8gZG8gYSBjbXB4Y2hnX2luYXRvbWljIG9uIGtlcm5lbCBOVUxMLCB3aGljaCBpcworCSAqIG91ciBnYXRld2F5IHBhZ2UsIGFuZCBjYXVzZXMgbm8gZW5kIG9mIHRyb3VibGUuLi4KKwkgKi8KKwlpZiAoc2VnbWVudF9lcShLRVJORUxfRFMsIGdldF9mcygpKSAmJiAhdWFkZHIpCisJCXJldHVybiAtRUZBVUxUOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtNjcsNSArNzMsNSBAQAogCXJldHVybiB1dmFsOwogfQogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qX19LRVJORUxfXyovCisjZW5kaWYgLypfQVNNX1BBUklTQ19GVVRFWF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaAppbmRleCBiZTg3NjBmLi5kYjBjOTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCkBAIC0xNyw4ICsxNyw2IEBACiAjZGVmaW5lIE1BWF9IV0lGUwkyCiAjZW5kaWYKIAotI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwotCiAjZGVmaW5lIGlkZV9yZXF1ZXN0X2lycShpcnEsaGFuZCxmbGcsZGV2LGlkKQlyZXF1ZXN0X2lycSgoaXJxKSwoaGFuZCksKGZsZyksKGRldiksKGlkKSkKICNkZWZpbmUgaWRlX2ZyZWVfaXJxKGlycSxkZXZfaWQpCQlmcmVlX2lycSgoaXJxKSwgKGRldl9pZCkpCiAjZGVmaW5lIGlkZV9yZXF1ZXN0X3JlZ2lvbihmcm9tLGV4dGVudCxuYW1lKQlyZXF1ZXN0X3JlZ2lvbigoZnJvbSksIChleHRlbnQpLCAobmFtZSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mva3ZtLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjYzQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fUEFSSVNDX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fUEFSSVNDX0gKKworLyogcGFyaXNjIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oCmluZGV4IGRlZGE4YzMuLjllYWE3OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKQEAgLTY0NSw4ICs2NDUsNyBAQAogdm9pZCBwZGNfaW9fcmVzZXQodm9pZCk7CiB2b2lkIHBkY19pb19yZXNldF9kZXZpY2VzKHZvaWQpOwogaW50IHBkY19pb2RjX2dldGModm9pZCk7Ci1pbnQgcGRjX2lvZGNfcHJpbnQodW5zaWduZWQgY2hhciAqc3RyLCB1bnNpZ25lZCBjb3VudCk7Ci12b2lkIHBkY19wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IHBkY19pb2RjX3ByaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpOwogCiB2b2lkIHBkY19lbWVyZ2VuY3lfdW5sb2NrKHZvaWQpOwogaW50IHBkY19zdGlfY2FsbCh1bnNpZ25lZCBsb25nIGZ1bmMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BnYWxsb2MuaAppbmRleCAzOTk2ZGZjLi5mYzk4N2ExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ2FsbG9jLmgKQEAgLTEzOCwxMCArMTM4LDEwIEBACiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwdGUpCiB7CiAJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKLQlwdGVfZnJlZV9rZXJuZWwocGFnZV9hZGRyZXNzKChwdGUpKTsKKwlwdGVfZnJlZV9rZXJuZWwobW0sIHBhZ2VfYWRkcmVzcyhwdGUpKTsKIH0KIAogI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAppbmRleCBjZDBmYTRmLi5kYzg2YWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKQEAgLTExNiwxNCArMTE2LDYgQEAKIAogI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuICB2b2lkICp2bWFsbG9jX3N0YXJ0OwotI2RlZmluZSBQQ1hMX0RNQV9NQVBfU0laRSAgICg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICgodW5zaWduZWQgbG9uZyl2bWFsbG9jX3N0YXJ0KQotLyogdGhpcyBpcyBhIGZpeG1hcCByZW1uYW50LCBzZWUgZml4bWFwLmggKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQJKEtFUk5FTF9NQVBfRU5EKQotI2VuZGlmCi0KIC8qIE5COiBUaGUgdGxiIG1pc3MgaGFuZGxlcnMgbWFrZSBjZXJ0YWluIGFzc3VtcHRpb25zIGFib3V0IHRoZSBvcmRlciAqLwogLyogICAgIG9mIHRoZSBmb2xsb3dpbmcgYml0cywgc28gYmUgY2FyZWZ1bCAoT25lIGV4YW1wbGUsIGJpdHMgMjUtMzEgICovCiAvKiAgICAgYXJlIG1vdmVkIHRvZ2V0aGVyIGluIG9uZSBpbnN0cnVjdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VtYXBob3JlLWhlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdmN2MxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUtaGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jaWZuZGVmIF9BU01fUEFSSVNDX1NFTUFQSE9SRV9IRUxQRVJfSAotI2RlZmluZSBfQVNNX1BBUklTQ19TRU1BUEhPUkVfSEVMUEVSX0gKLQotLyoKLSAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMgaGVscGVyIGZ1bmN0aW9ucy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqIChDKSBDb3B5cmlnaHQgMTk5OSBBbmRyZWEgQXJjYW5nZWxpCi0gKi8KLQotLyoKLSAqIFRoZXNlIHR3byBfbXVzdF8gZXhlY3V0ZSBhdG9taWNhbGx5IHdydCBlYWNoIG90aGVyLgotICoKLSAqIFRoaXMgaXMgdHJpdmlhbGx5IGRvbmUgd2l0aCBsb2FkX2xvY2tlZC9zdG9yZV9jb25kLAotICogd2hpY2ggd2UgaGF2ZS4gIExldCB0aGUgcmVzdCBvZiB0aGUgbG9zZXJzIHN1Y2sgZWdncy4KLSAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCB3YWtlX29uZV9tb3JlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JYXRvbWljX2luYygoYXRvbWljX3QgKikmc2VtLT53YWtpbmcpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlpZiAoc2VtLT53YWtpbmcgPiAwKSB7Ci0JCXNlbS0+d2FraW5nLS07Ci0JCXJldCA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogd2FraW5nX25vbl96ZXJvX2ludGVycnVwdGlibGU6Ci0gKgkxCWdvdCB0aGUgbG9jawotICoJMAlnbyB0byBzbGVlcAotICoJLUVJTlRSCWludGVycnVwdGVkCi0gKgotICogV2UgbXVzdCB1bmRvIHRoZSBzZW0tPmNvdW50IGRvd25faW50ZXJydXB0aWJsZSgpIGluY3JlbWVudCB3aGlsZSB3ZSBhcmUKLSAqIHByb3RlY3RlZCBieSB0aGUgc3BpbmxvY2sgaW4gb3JkZXIgdG8gbWFrZSBhdG9taWMgdGhpcyBhdG9taWNfaW5jKCkgd2l0aCB0aGUKLSAqIGF0b21pY19yZWFkKCkgaW4gd2FrZV9vbmVfbW9yZSgpLCBvdGhlcndpc2Ugd2UgY2FuIHJhY2UuIC1hcmNhCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sCi0JCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlpZiAoc2VtLT53YWtpbmcgPiAwKSB7Ci0JCXNlbS0+d2FraW5nLS07Ci0JCXJldCA9IDE7Ci0JfSBlbHNlIGlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7Ci0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCQlyZXQgPSAtRUlOVFI7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogd2FraW5nX25vbl96ZXJvX3RyeWxvY2s6Ci0gKgkxCWZhaWxlZCB0byBsb2NrCi0gKgkwCWdvdCB0aGUgbG9jawotICoKLSAqIFdlIG11c3QgdW5kbyB0aGUgc2VtLT5jb3VudCBkb3duX3RyeWxvY2soKSBpbmNyZW1lbnQgd2hpbGUgd2UgYXJlCi0gKiBwcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrIGluIG9yZGVyIHRvIG1ha2UgYXRvbWljIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCi0gKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQotICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCWlmIChzZW0tPndha2luZyA8PSAwKQotCQlhdG9taWNfaW5jKCZzZW0tPmNvdW50KTsKLQllbHNlIHsKLQkJc2VtLT53YWtpbmctLTsKLQkJcmV0ID0gMDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX1BBUklTQ19TRU1BUEhPUkVfSEVMUEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zZW1hcGhvcmUuaAppbmRleCBhMTYyNzFjLi5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NlbWFwaG9yZS5oCkBAIC0xLDE0NSArMSBAQAotLyogICAgU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4KLSAqICAgIFBBLVJJU0MgdmVyc2lvbiBieSBNYXR0aGV3IFdpbGNveAotICoKLSAqICAgIExpbnV4L1BBLVJJU0MgUHJvamVjdCAoaHR0cDovL3d3dy5wYXJpc2MtbGludXgub3JnLykKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NiBMaW51cyBUb3J2YWxkcwotICogICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgTWF0dGhldyBXaWxjb3ggPCB3aWxseSBhdCBkZWJpYW4gZDBUIG9yZyA+Ci0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAgR3JhbnQgR3J1bmRsZXIgPCBncnVuZGxlciBhIGRlYmlhbiBvcmcgPgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaWZuZGVmIF9BU01fUEFSSVNDX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9BU01fUEFSSVNDX1NFTUFQSE9SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0vKgotICogVGhlIGBjb3VudCcgaXMgaW5pdGlhbGlzZWQgdG8gdGhlIG51bWJlciBvZiBwZW9wbGUgd2hvIGFyZSBhbGxvd2VkIHRvCi0gKiB0YWtlIHRoZSBsb2NrLiAgKE5vcm1hbGx5IHdlIHdhbnQgYSBtdXRleCwgc28gdGhpcyBpcyBgMScpLiAgaWYKLSAqIGBjb3VudCcgaXMgcG9zaXRpdmUsIHRoZSBsb2NrIGNhbiBiZSB0YWtlbi4gIGlmIGl0J3MgMCwgbm8tb25lIGlzCi0gKiB3YWl0aW5nIG9uIGl0LiAgaWYgaXQncyAtMSwgYXQgbGVhc3Qgb25lIHRhc2sgaXMgd2FpdGluZy4KLSAqLwotc3RydWN0IHNlbWFwaG9yZSB7Ci0Jc3BpbmxvY2tfdAlzZW50cnk7Ci0JaW50CQljb3VudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwotfTsKLQotI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCi17CQkJCQkJCQkJXAotCS5zZW50cnkJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCQlcCi0JLmNvdW50CQk9IG4sCQkJCQkJXAotCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCi19Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQotCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQotewotCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigoKnNlbSksdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNlbV9nZXRjb3VudChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JcmV0dXJuIHNlbS0+Y291bnQ7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLQotLyogU2VtYXBob3JlcyBjYW4gYmUgYHRyaWVkJyBmcm9tIGlycSBjb250ZXh0LiAgU28gd2UgaGF2ZSB0byBkaXNhYmxlCi0gKiBpbnRlcnJ1cHRzIHdoaWxlIHdlJ3JlIG1lc3Npbmcgd2l0aCB0aGUgc2VtYXBob3JlLiAgU29ycnkuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQltaWdodF9zbGVlcCgpOwotCXNwaW5fbG9ja19pcnEoJnNlbS0+c2VudHJ5KTsKLQlpZiAoc2VtLT5jb3VudCA+IDApIHsKLQkJc2VtLT5jb3VudC0tOwotCX0gZWxzZSB7Ci0JCV9fZG93bihzZW0pOwotCX0KLQlzcGluX3VubG9ja19pcnEoJnNlbS0+c2VudHJ5KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0JbWlnaHRfc2xlZXAoKTsKLQlzcGluX2xvY2tfaXJxKCZzZW0tPnNlbnRyeSk7Ci0JaWYgKHNlbS0+Y291bnQgPiAwKSB7Ci0JCXNlbS0+Y291bnQtLTsKLQl9IGVsc2UgewotCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotCX0KLQlzcGluX3VubG9ja19pcnEoJnNlbS0+c2VudHJ5KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogZG93bl90cnlsb2NrIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHdlIGZhaWxlZCB0byBnZXQgdGhlIGxvY2suCi0gKiBNYXkgbm90IHNsZWVwLCBidXQgbXVzdCBwcmVzZXJ2ZSBpcnEgc3RhdGUKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY291bnQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT5zZW50cnksIGZsYWdzKTsKLQljb3VudCA9IHNlbS0+Y291bnQgLSAxOwotCWlmIChjb3VudCA+PSAwKQotCQlzZW0tPmNvdW50ID0gY291bnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT5zZW50cnksIGZsYWdzKTsKLQlyZXR1cm4gKGNvdW50IDwgMCk7Ci19Ci0KLS8qCi0gKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCi0gKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+c2VudHJ5LCBmbGFncyk7Ci0JaWYgKHNlbS0+Y291bnQgPCAwKSB7Ci0JCV9fdXAoc2VtKTsKLQl9IGVsc2UgewotCQlzZW0tPmNvdW50Kys7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+c2VudHJ5LCBmbGFncyk7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX1BBUklTQ19TRU1BUEhPUkVfSCAqLworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCmluZGV4IDA4MWI0YWUuLmE3ZDg1N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKQEAgLTc5OCw4ICs3OTgsMTEgQEAKICNkZWZpbmUgX19OUl90aW1lcmZkCQkoX19OUl9MaW51eCArIDMwMykKICNkZWZpbmUgX19OUl9ldmVudGZkCQkoX19OUl9MaW51eCArIDMwNCkKICNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCShfX05SX0xpbnV4ICsgMzA1KQorI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCShfX05SX0xpbnV4ICsgMzA2KQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkoX19OUl9MaW51eCArIDMwNykKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJKF9fTlJfTGludXggKyAzMDgpCiAKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl9mYWxsb2NhdGUgKyAxKQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX3RpbWVyZmRfZ2V0dGltZSArIDEpCiAKIAogI2RlZmluZSBfX0lHTk9SRV9zZWxlY3QJCS8qIG5ld3NlbGVjdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9LYnVpbGQgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL0tidWlsZAppbmRleCA1ZjY0MGU1Li43MzgxOTE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL0tidWlsZApAQCAtMSw1ICsxLDYgQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCiAKK2hlYWRlci15ICs9IGEub3V0LmgKIGhlYWRlci15ICs9IGF1eHZlYy5oCiBoZWFkZXIteSArPSBpb2N0bHMuaAogaGVhZGVyLXkgKz0gbW1hbi5oCkBAIC0yMyw3ICsyNCw2IEBACiBoZWFkZXIteSArPSBzdGF0ZnMuaAogaGVhZGVyLXkgKz0gcHMzZmIuaAogCi11bmlmZGVmLXkgKz0gYS5vdXQuaAogdW5pZmRlZi15ICs9IGFzbS1jb21wYXQuaAogdW5pZmRlZi15ICs9IGJvb3R4LmgKIHVuaWZkZWYteSArPSBieXRlb3JkZXIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCmluZGV4IDRhYTIyMDcuLjk4MzI0YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKQEAgLTEyLDEwICsxMiwxMSBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbG1iLmg+CisKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogCiBzdHJ1Y3QgbXNjaHVua3NfbWFwIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCmluZGV4IDIyMGQ5YTcuLmE5OWE3NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaApAQCAtMzEyLDI0ICszMTIsMjYgQEAKIAlhc20gKCJjbnRsencgJTAsJTEiIDogIj1yIiAobHopIDogInIiICh4KSk7CiAJcmV0dXJuIDMyIC0gbHo7CiB9CisKKy8qCisgKiA2NC1iaXQgY2FuIGRvIHRoaXMgdXNpbmcgb25lIGNudGx6ZCAoY291bnQgbGVhZGluZyB6ZXJvZXMgZG91Ymxld29yZCkKKyAqIGluc3RydWN0aW9uOyBmb3IgMzItYml0IHdlIHVzZSB0aGUgZ2VuZXJpYyB2ZXJzaW9uLCB3aGljaCBkb2VzIHR3bworICogMzItYml0IGZscyBjYWxscy4KKyAqLworI2lmZGVmIF9fcG93ZXJwYzY0X18KK3N0YXRpYyBfX2lubGluZV9fIGludCBmbHM2NChfX3U2NCB4KQoreworCWludCBsejsKKworCWFzbSAoImNudGx6ZCAlMCwlMSIgOiAiPXIiIChseikgOiAiciIgKHgpKTsKKwlyZXR1cm4gNjQgLSBsejsKK30KKyNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CisjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KLQotI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIGZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKLXVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCi0JCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotLyoqCi0gKiBmaW5kX2ZpcnN0X2JpdCAtIGZpbmQgdGhlIGZpcnN0IHNldCBiaXQgaW4gYSBtZW1vcnkgcmVnaW9uCi0gKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gc3RhcnQgdGhlIHNlYXJjaCBhdAotICogQHNpemU6IFRoZSBtYXhpbXVtIHNpemUgdG8gc2VhcmNoCi0gKgotICogUmV0dXJucyB0aGUgYml0LW51bWJlciBvZiB0aGUgZmlyc3Qgc2V0IGJpdCwgbm90IHRoZSBudW1iZXIgb2YgdGhlIGJ5dGUKLSAqIGNvbnRhaW5pbmcgYSBiaXQuCi0gKi8KLSNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgZmluZF9uZXh0X2JpdCgoYWRkciksIChzaXplKSwgMCkKLXVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAKIC8qIExpdHRsZS1lbmRpYW4gdmVyc2lvbnMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcG0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3BtLmgKaW5kZXggNzdlMzlkYS4uZWRlMzhmZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3BtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcG0uaApAQCAtNCw2ICs0LDIwIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisvKiBPcGNvZGVzIGNvbW1vbiB0byBDUE0xIGFuZCBDUE0yCisqLworI2RlZmluZSBDUE1fQ1JfSU5JVF9UUlgJCSgodXNob3J0KTB4MDAwMCkKKyNkZWZpbmUgQ1BNX0NSX0lOSVRfUlgJCSgodXNob3J0KTB4MDAwMSkKKyNkZWZpbmUgQ1BNX0NSX0lOSVRfVFgJCSgodXNob3J0KTB4MDAwMikKKyNkZWZpbmUgQ1BNX0NSX0hVTlRfTU9ERQkoKHVzaG9ydCkweDAwMDMpCisjZGVmaW5lIENQTV9DUl9TVE9QX1RYCQkoKHVzaG9ydCkweDAwMDQpCisjZGVmaW5lIENQTV9DUl9HUkFfU1RPUF9UWAkoKHVzaG9ydCkweDAwMDUpCisjZGVmaW5lIENQTV9DUl9SRVNUQVJUX1RYCSgodXNob3J0KTB4MDAwNikKKyNkZWZpbmUgQ1BNX0NSX0NMT1NFX1JYX0JECSgodXNob3J0KTB4MDAwNykKKyNkZWZpbmUgQ1BNX0NSX1NFVF9HQUREUgkoKHVzaG9ydCkweDAwMDgpCisjZGVmaW5lIENQTV9DUl9TRVRfVElNRVIJKCh1c2hvcnQpMHgwMDA4KQorI2RlZmluZSBDUE1fQ1JfU1RPUF9JRE1BCSgodXNob3J0KTB4MDAwYikKKwogLyogQnVmZmVyIGRlc2NyaXB0b3JzIHVzZWQgYnkgbWFueSBvZiB0aGUgQ1BNIHByb3RvY29scy4gKi8KIHR5cGVkZWYgc3RydWN0IGNwbV9idWZfZGVzYyB7CiAJdXNob3J0CWNiZF9zYzsJCS8qIFN0YXR1cyBhbmQgQ29udHJvbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcG0xLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwbTEuaAppbmRleCBiMmViZDZhLi4zZGY0Mzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwbTEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwbTEuaApAQCAtMjgsMTkgKzI4LDYgQEAKICNkZWZpbmUgQ1BNX0NSX0NIQU4JKCh1c2hvcnQpMHgwMGYwKQogI2RlZmluZSBDUE1fQ1JfRkxHCSgodXNob3J0KTB4MDAwMSkKIAotLyogU29tZSBjb21tYW5kcyAodGhlcmUgYXJlIG1vcmUuLi5sYXRlcikKLSovCi0jZGVmaW5lIENQTV9DUl9JTklUX1RSWAkJKCh1c2hvcnQpMHgwMDAwKQotI2RlZmluZSBDUE1fQ1JfSU5JVF9SWAkJKCh1c2hvcnQpMHgwMDAxKQotI2RlZmluZSBDUE1fQ1JfSU5JVF9UWAkJKCh1c2hvcnQpMHgwMDAyKQotI2RlZmluZSBDUE1fQ1JfSFVOVF9NT0RFCSgodXNob3J0KTB4MDAwMykKLSNkZWZpbmUgQ1BNX0NSX1NUT1BfVFgJCSgodXNob3J0KTB4MDAwNCkKLSNkZWZpbmUgQ1BNX0NSX0dSQV9TVE9QX1RYCSgodXNob3J0KTB4MDAwNSkKLSNkZWZpbmUgQ1BNX0NSX1JFU1RBUlRfVFgJKCh1c2hvcnQpMHgwMDA2KQotI2RlZmluZSBDUE1fQ1JfQ0xPU0VfUlhfQkQJKCh1c2hvcnQpMHgwMDA3KQotI2RlZmluZSBDUE1fQ1JfU0VUX0dBRERSCSgodXNob3J0KTB4MDAwOCkKLSNkZWZpbmUgQ1BNX0NSX1NFVF9USU1FUglDUE1fQ1JfU0VUX0dBRERSCi0KIC8qIENoYW5uZWwgbnVtYmVycy4KICovCiAjZGVmaW5lIENQTV9DUl9DSF9TQ0MxCQkoKHVzaG9ydCkweDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwbTIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3BtMi5oCmluZGV4IGI5M2E1M2UuLjRjODVlZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3BtMi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3BtMi5oCkBAIC03MSwxOCArNzEsOSBAQAogCiAjZGVmaW5lIENQTV9DUl9GQ0NfUEFHRSh4KQkoeCArIDB4MDQpCiAKLS8qIFNvbWUgb3Bjb2RlcyAodGhlcmUgYXJlIG1vcmUuLi5sYXRlcikKKy8qIENQTTItc3BlY2lmaWMgb3Bjb2RlcyAoc2VlIGNwbS5oIGZvciBjb21tb24gb3Bjb2RlcykKICovCi0jZGVmaW5lIENQTV9DUl9JTklUX1RSWAkJKCh1c2hvcnQpMHgwMDAwKQotI2RlZmluZSBDUE1fQ1JfSU5JVF9SWAkJKCh1c2hvcnQpMHgwMDAxKQotI2RlZmluZSBDUE1fQ1JfSU5JVF9UWAkJKCh1c2hvcnQpMHgwMDAyKQotI2RlZmluZSBDUE1fQ1JfSFVOVF9NT0RFCSgodXNob3J0KTB4MDAwMykKLSNkZWZpbmUgQ1BNX0NSX1NUT1BfVFgJCSgodXNob3J0KTB4MDAwNCkKLSNkZWZpbmUgQ1BNX0NSX0dSQV9TVE9QX1RYCSgodXNob3J0KTB4MDAwNSkKLSNkZWZpbmUgQ1BNX0NSX1JFU1RBUlRfVFgJKCh1c2hvcnQpMHgwMDA2KQotI2RlZmluZSBDUE1fQ1JfU0VUX0dBRERSCSgodXNob3J0KTB4MDAwOCkKICNkZWZpbmUgQ1BNX0NSX1NUQVJUX0lETUEJKCh1c2hvcnQpMHgwMDA5KQotI2RlZmluZSBDUE1fQ1JfU1RPUF9JRE1BCSgodXNob3J0KTB4MDAwYikKIAogI2RlZmluZSBta19jcl9jbWQoUEcsIFNCQywgTUNOLCBPUCkgXAogCSgoUEcgPDwgMjYpIHwgKFNCQyA8PCAyMSkgfCAoTUNOIDw8IDYpIHwgT1ApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRocmVhZHMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGhyZWFkcy5oCmluZGV4IDg0ODVjMjguLmZiMTFiMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGhyZWFkcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGhyZWFkcy5oCkBAIC0zNSw3ICszNSw3IEBACiAKIAlyZXMgPSBDUFVfTUFTS19OT05FOwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpICs9IHRocmVhZHNfcGVyX2NvcmUpIHsKLQkJY3B1c19zaGlmdF9yaWdodCh0bXAsIHRocmVhZHNfY29yZV9tYXNrLCBpKTsKKwkJY3B1c19zaGlmdF9sZWZ0KHRtcCwgdGhyZWFkc19jb3JlX21hc2ssIGkpOwogCQlpZiAoY3B1c19pbnRlcnNlY3RzKHRocmVhZHMsIHRtcCkpCiAJCQljcHVfc2V0KGksIHJlcyk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9kY3ItbmF0aXZlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci1uYXRpdmUuaAppbmRleCBiZTZjODc5Li5mODM5OGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci1uYXRpdmUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci1uYXRpdmUuaApAQCAtODIsNiArODIsMTkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkY3JfaW5kX2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fZGNyaV9jbHJzZXQoaW50IGJhc2VfYWRkciwgaW50IGJhc2VfZGF0YSwgaW50IHJlZywKKwkJCQkgdW5zaWduZWQgY2xyLCB1bnNpZ25lZCBzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRjcl9pbmRfbG9jaywgZmxhZ3MpOworCV9fbXRkY3IoYmFzZV9hZGRyLCByZWcpOworCXZhbCA9IChfX21mZGNyKGJhc2VfZGF0YSkgJiB+Y2xyKSB8IHNldDsKKwlfX210ZGNyKGJhc2VfZGF0YSwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkY3JfaW5kX2xvY2ssIGZsYWdzKTsKK30KKwogI2RlZmluZSBtZmRjcmkoYmFzZSwgcmVnKQlfX21mZGNyaShEQ1JOXyAjIyBiYXNlICMjIF9DT05GSUdfQUREUiwJXAogCQkJCQkgRENSTl8gIyMgYmFzZSAjIyBfQ09ORklHX0RBVEEsCVwKIAkJCQkJIHJlZykKQEAgLTkwLDYgKzEwMywxMCBAQAogCQkJCQkgRENSTl8gIyMgYmFzZSAjIyBfQ09ORklHX0RBVEEsCVwKIAkJCQkJIHJlZywgZGF0YSkKIAorI2RlZmluZSBkY3JpX2NscnNldChiYXNlLCByZWcsIGNsciwgc2V0KQlfX2RjcmlfY2xyc2V0KERDUk5fICMjIGJhc2UgIyMgX0NPTkZJR19BRERSLAlcCisJCQkJCQkJICAgICAgRENSTl8gIyMgYmFzZSAjIyBfQ09ORklHX0RBVEEsCVwKKwkJCQkJCQkgICAgICByZWcsIGNsciwgc2V0KQorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19EQ1JfTkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLXJlZ3MuaAppbmRleCA5ZjFmYjk4Li4yOWIwZWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kY3ItcmVncy5oCkBAIC02OCw0ICs2OCw4MiBAQAogI2RlZmluZSBTRFIwX1VBUlQzCQkweDAxMjMKICNkZWZpbmUgU0RSMF9DVVNUMAkJMHg0MDAwCiAKKy8qCisgKiBBbGwgdGhvc2UgRENSIHJlZ2lzdGVyIGFkZHJlc3NlcyBhcmUgb2Zmc2V0cyBmcm9tIHRoZSBiYXNlIGFkZHJlc3MKKyAqIGZvciB0aGUgU1JBTTAgY29udHJvbGxlciAoZS5nLiAweDIwIG9uIDQ0MEdYKS4gVGhlIGJhc2UgYWRkcmVzcyBpcworICogZXhjbHVkZWQgaGVyZSBhbmQgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKi8KKyNkZWZpbmUgRENSTl9TUkFNMF9TQjBDUgkweDAwCisjZGVmaW5lIERDUk5fU1JBTTBfU0IxQ1IJMHgwMQorI2RlZmluZSBEQ1JOX1NSQU0wX1NCMkNSCTB4MDIKKyNkZWZpbmUgRENSTl9TUkFNMF9TQjNDUgkweDAzCisjZGVmaW5lICBTUkFNX1NCQ1JfQlVfTUFTSwkweDAwMDAwMTgwCisjZGVmaW5lICBTUkFNX1NCQ1JfQlNfNjRLQgkweDAwMDAwODAwCisjZGVmaW5lICBTUkFNX1NCQ1JfQlVfUk8JMHgwMDAwMDA4MAorI2RlZmluZSAgU1JBTV9TQkNSX0JVX1JXCTB4MDAwMDAxODAKKyNkZWZpbmUgRENSTl9TUkFNMF9CRUFSCQkweDA0CisjZGVmaW5lIERDUk5fU1JBTTBfQkVTUjAJMHgwNQorI2RlZmluZSBEQ1JOX1NSQU0wX0JFU1IxCTB4MDYKKyNkZWZpbmUgRENSTl9TUkFNMF9QTUVHCQkweDA3CisjZGVmaW5lIERDUk5fU1JBTTBfQ0lECQkweDA4CisjZGVmaW5lIERDUk5fU1JBTTBfUkVWSUQJMHgwOQorI2RlZmluZSBEQ1JOX1NSQU0wX0RQQwkJMHgwYQorI2RlZmluZSAgU1JBTV9EUENfRU5BQkxFCTB4ODAwMDAwMDAKKworLyoKKyAqIEFsbCB0aG9zZSBEQ1IgcmVnaXN0ZXIgYWRkcmVzc2VzIGFyZSBvZmZzZXRzIGZyb20gdGhlIGJhc2UgYWRkcmVzcworICogZm9yIHRoZSBTUkFNMCBjb250cm9sbGVyIChlLmcuIDB4MzAgb24gNDQwR1gpLiBUaGUgYmFzZSBhZGRyZXNzIGlzCisgKiBleGNsdWRlZCBoZXJlIGFuZCBjb25maWd1cmVkIGluIHRoZSBkZXZpY2UgdHJlZS4KKyAqLworI2RlZmluZSBEQ1JOX0wyQzBfQ0ZHCQkweDAwCisjZGVmaW5lICBMMkNfQ0ZHX0wyTQkJMHg4MDAwMDAwMAorI2RlZmluZSAgTDJDX0NGR19JQ1UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgIEwyQ19DRkdfRENVCQkweDIwMDAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX0RDV19NQVNLCTB4MWUwMDAwMDAKKyNkZWZpbmUgIEwyQ19DRkdfVFBDCQkweDAxMDAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX0NQQwkJMHgwMDgwMDAwMAorI2RlZmluZSAgTDJDX0NGR19GUkFOCQkweDAwMjAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX1NTX01BU0sJMHgwMDE4MDAwMAorI2RlZmluZSAgTDJDX0NGR19TU18yNTYJCTB4MDAwMDAwMDAKKyNkZWZpbmUgIEwyQ19DRkdfQ1BJTQkJMHgwMDA0MDAwMAorI2RlZmluZSAgTDJDX0NGR19UUElNCQkweDAwMDIwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX0xJTQkJMHgwMDAxMDAwMAorI2RlZmluZSAgTDJDX0NGR19QTVVYX01BU0sJMHgwMDAwNzAwMAorI2RlZmluZSAgTDJDX0NGR19QTVVYX1NOUAkweDAwMDAwMDAwCisjZGVmaW5lICBMMkNfQ0ZHX1BNVVhfSUYJMHgwMDAwMTAwMAorI2RlZmluZSAgTDJDX0NGR19QTVVYX0RGCTB4MDAwMDIwMDAKKyNkZWZpbmUgIEwyQ19DRkdfUE1VWF9EUwkweDAwMDAzMDAwCisjZGVmaW5lICBMMkNfQ0ZHX1BNSU0JCTB4MDAwMDA4MDAKKyNkZWZpbmUgIEwyQ19DRkdfVFBFSQkJMHgwMDAwMDQwMAorI2RlZmluZSAgTDJDX0NGR19DUEVJCQkweDAwMDAwMjAwCisjZGVmaW5lICBMMkNfQ0ZHX05BTQkJMHgwMDAwMDEwMAorI2RlZmluZSAgTDJDX0NGR19TTUNNCQkweDAwMDAwMDgwCisjZGVmaW5lICBMMkNfQ0ZHX05CUk0JCTB4MDAwMDAwNDAKKyNkZWZpbmUgIEwyQ19DRkdfUkRCVwkJMHgwMDAwMDAwOAkvKiBvbmx5IDQ2MEVYL0dUICovCisjZGVmaW5lIERDUk5fTDJDMF9DTUQJCTB4MDEKKyNkZWZpbmUgIEwyQ19DTURfQ0xSCQkweDgwMDAwMDAwCisjZGVmaW5lICBMMkNfQ01EX0RJQUcJCTB4NDAwMDAwMDAKKyNkZWZpbmUgIEwyQ19DTURfSU5WCQkweDIwMDAwMDAwCisjZGVmaW5lICBMMkNfQ01EX0NDUAkJMHgxMDAwMDAwMAorI2RlZmluZSAgTDJDX0NNRF9DVEUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgIEwyQ19DTURfU1RSQwkJMHgwNDAwMDAwMAorI2RlZmluZSAgTDJDX0NNRF9TVFBDCQkweDAyMDAwMDAwCisjZGVmaW5lICBMMkNfQ01EX1JQTUMJCTB4MDEwMDAwMDAKKyNkZWZpbmUgIEwyQ19DTURfSENDCQkweDAwODAwMDAwCisjZGVmaW5lIERDUk5fTDJDMF9BRERSCQkweDAyCisjZGVmaW5lIERDUk5fTDJDMF9EQVRBCQkweDAzCisjZGVmaW5lIERDUk5fTDJDMF9TUgkJMHgwNAorI2RlZmluZSAgTDJDX1NSX0NDCQkweDgwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfQ1BFCQkweDQwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfVFBFCQkweDIwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfTFJVCQkweDEwMDAwMDAwCisjZGVmaW5lICBMMkNfU1JfUENTCQkweDA4MDAwMDAwCisjZGVmaW5lIERDUk5fTDJDMF9SRVZJRAkJMHgwNQorI2RlZmluZSBEQ1JOX0wyQzBfU05QMAkJMHgwNgorI2RlZmluZSBEQ1JOX0wyQzBfU05QMQkJMHgwNworI2RlZmluZSAgTDJDX1NOUF9CQV9NQVNLCTB4ZmZmZjAwMDAKKyNkZWZpbmUgIEwyQ19TTlBfU1NSX01BU0sJMHgwMDAwZjAwMAorI2RlZmluZSAgTDJDX1NOUF9TU1JfMzJHCTB4MDAwMGYwMDAKKyNkZWZpbmUgIEwyQ19TTlBfRVNSCQkweDAwMDAwODAwCisKICNlbmRpZiAvKiBfX0RDUl9SRUdTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9leGNlcHRpb24uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZXhjZXB0aW9uLmgKaW5kZXggMzlhYmRiMC4uMzI5MTQ4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9leGNlcHRpb24uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2V4Y2VwdGlvbi5oCkBAIC0yMjgsMTggKzIyOCwxOCBAQAogQkVHSU5fRldfRlRSX1NFQ1RJT047CQkJCVwKIAlzdGIJcjExLFBBQ0FIQVJESVJRRU4ocjEzKTsJCVwKIEVORF9GV19GVFJfU0VDVElPTl9JRkNMUihGV19GRUFUVVJFX0lTRVJJRVMpOwlcCisJVFJBQ0VfRElTQUJMRV9JTlRTOwkJCVwKIEJFR0lOX0ZXX0ZUUl9TRUNUSU9OOwkJCQlcCiAJbWZtc3IJcjEwOwkJCQlcCiAJb3JpCXIxMCxyMTAsTVNSX0VFOwkJCVwKIAltdG1zcmQJcjEwLDE7CQkJCVwKIEVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCi0KICNlbHNlCiAjZGVmaW5lIERJU0FCTEVfSU5UUwkJCQlcCiAJbGkJcjExLDA7CQkJCVwKIAlzdGIJcjExLFBBQ0FTT0ZUSVJRRU4ocjEzKTsJCVwKLQlzdGIJcjExLFBBQ0FIQVJESVJRRU4ocjEzKQotCisJc3RiCXIxMSxQQUNBSEFSRElSUUVOKHIxMyk7CQlcCisJVFJBQ0VfRElTQUJMRV9JTlRTCiAjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAKICNkZWZpbmUgRU5BQkxFX0lOVFMJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9mc2xfbGJjLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2ZzbF9sYmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDNmNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mc2xfbGJjLmgKQEAgLTAsMCArMSwzMTEgQEAKKy8qIEZyZWVzY2FsZSBMb2NhbCBCdXMgQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKgorICogQXV0aG9yczogTmljayBTcGVuY2UgPG5pY2suc3BlbmNlQGZyZWVzY2FsZS5jb20+LAorICogICAgICAgICAgU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19BU01fRlNMX0xCQ19ICisjZGVmaW5lIF9fQVNNX0ZTTF9MQkNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdHJ1Y3QgZnNsX2xiY19iYW5rIHsKKwlfX2JlMzIgYnI7ICAgICAgICAgICAgIC8qKjwgQmFzZSBSZWdpc3RlciAgKi8KKyNkZWZpbmUgQlJfQkEgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgQlJfQkFfU0hJRlQgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQlJfUFMgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQlJfUFNfU0hJRlQgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQlJfUFNfOCAgICAgICAgIDB4MDAwMDA4MDAgIC8qIFBvcnQgU2l6ZSA4IGJpdCAqLworI2RlZmluZSBCUl9QU18xNiAgICAgICAgMHgwMDAwMTAwMCAgLyogUG9ydCBTaXplIDE2IGJpdCAqLworI2RlZmluZSBCUl9QU18zMiAgICAgICAgMHgwMDAwMTgwMCAgLyogUG9ydCBTaXplIDMyIGJpdCAqLworI2RlZmluZSBCUl9ERUNDICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBCUl9ERUNDX1NISUZUICAgICAgICAgICAgOQorI2RlZmluZSBCUl9ERUNDX09GRiAgICAgMHgwMDAwMDAwMCAgLyogSFcgRUNDIGNoZWNraW5nIGFuZCBnZW5lcmF0aW9uIG9mZiAqLworI2RlZmluZSBCUl9ERUNDX0NISyAgICAgMHgwMDAwMDIwMCAgLyogSFcgRUNDIGNoZWNraW5nIG9uLCBnZW5lcmF0aW9uIG9mZiAqLworI2RlZmluZSBCUl9ERUNDX0NIS19HRU4gMHgwMDAwMDQwMCAgLyogSFcgRUNDIGNoZWNraW5nIGFuZCBnZW5lcmF0aW9uIG9uICovCisjZGVmaW5lIEJSX1dQICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEJSX1dQX1NISUZUICAgICAgICAgICAgICA4CisjZGVmaW5lIEJSX01TRUwgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIEJSX01TRUxfU0hJRlQgICAgICAgICAgICA1CisjZGVmaW5lIEJSX01TX0dQQ00gICAgICAweDAwMDAwMDAwICAvKiBHUENNICovCisjZGVmaW5lIEJSX01TX0ZDTSAgICAgICAweDAwMDAwMDIwICAvKiBGQ00gKi8KKyNkZWZpbmUgQlJfTVNfU0RSQU0gICAgIDB4MDAwMDAwNjAgIC8qIFNEUkFNICovCisjZGVmaW5lIEJSX01TX1VQTUEgICAgICAweDAwMDAwMDgwICAvKiBVUE1BICovCisjZGVmaW5lIEJSX01TX1VQTUIgICAgICAweDAwMDAwMEEwICAvKiBVUE1CICovCisjZGVmaW5lIEJSX01TX1VQTUMgICAgICAweDAwMDAwMEMwICAvKiBVUE1DICovCisjZGVmaW5lIEJSX1YgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEJSX1ZfU0hJRlQgICAgICAgICAgICAgICAwCisjZGVmaW5lIEJSX1JFUyAgICAgICAgICB+KEJSX0JBfEJSX1BTfEJSX0RFQ0N8QlJfV1B8QlJfTVNFTHxCUl9WKQorCisJX19iZTMyIG9yOyAgICAgICAgICAgICAvKio8IEJhc2UgUmVnaXN0ZXIgICovCisjZGVmaW5lIE9SMCAweDUwMDQKKyNkZWZpbmUgT1IxIDB4NTAwQworI2RlZmluZSBPUjIgMHg1MDE0CisjZGVmaW5lIE9SMyAweDUwMUMKKyNkZWZpbmUgT1I0IDB4NTAyNAorI2RlZmluZSBPUjUgMHg1MDJDCisjZGVmaW5lIE9SNiAweDUwMzQKKyNkZWZpbmUgT1I3IDB4NTAzQworCisjZGVmaW5lIE9SX0ZDTV9BTSAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgT1JfRkNNX0FNX1NISUZUICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBPUl9GQ01fQkNUTEQgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIE9SX0ZDTV9CQ1RMRF9TSElGVCAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgT1JfRkNNX1BHUyAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBPUl9GQ01fUEdTX1NISUZUICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIE9SX0ZDTV9DU0NUICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgT1JfRkNNX0NTQ1RfU0hJRlQgICAgICAgICAgICAgICAgOQorI2RlZmluZSBPUl9GQ01fQ1NUICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE9SX0ZDTV9DU1RfU0hJRlQgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgT1JfRkNNX0NIVCAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBPUl9GQ01fQ0hUX1NISUZUICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIE9SX0ZDTV9TQ1kgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgT1JfRkNNX1NDWV9TSElGVCAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBPUl9GQ01fU0NZXzEgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE9SX0ZDTV9TQ1lfMiAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgT1JfRkNNX1NDWV8zICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBPUl9GQ01fU0NZXzQgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIE9SX0ZDTV9TQ1lfNSAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgT1JfRkNNX1NDWV82ICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBPUl9GQ01fU0NZXzcgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIE9SX0ZDTV9SU1QgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgT1JfRkNNX1JTVF9TSElGVCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBPUl9GQ01fVFJMWCAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE9SX0ZDTV9UUkxYX1NISUZUICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgT1JfRkNNX0VIVFIgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBPUl9GQ01fRUhUUl9TSElGVCAgICAgICAgICAgICAgICAxCit9OworCitzdHJ1Y3QgZnNsX2xiY19yZWdzIHsKKwlzdHJ1Y3QgZnNsX2xiY19iYW5rIGJhbmtbOF07CisJdTggcmVzMFsweDI4XTsKKwlfX2JlMzIgbWFyOyAgICAgICAgICAgICAvKio8IFVQTSBBZGRyZXNzIFJlZ2lzdGVyICovCisJdTggcmVzMVsweDRdOworCV9fYmUzMiBtYW1yOyAgICAgICAgICAgIC8qKjwgVVBNQSBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIE14TVJfT1BfTk8JKDAgPDwgMjgpIC8qKjwgbm9ybWFsIG9wZXJhdGlvbiAqLworI2RlZmluZSBNeE1SX09QX1dBCSgxIDw8IDI4KSAvKio8IHdyaXRlIGFycmF5ICovCisjZGVmaW5lIE14TVJfT1BfUkEJKDIgPDwgMjgpIC8qKjwgcmVhZCBhcnJheSAqLworI2RlZmluZSBNeE1SX09QX1JQCSgzIDw8IDI4KSAvKio8IHJ1biBwYXR0ZXJuICovCisjZGVmaW5lIE14TVJfTUFECTB4M2YgICAgICAvKio8IG1hY2hpbmUgYWRkcmVzcyAqLworCV9fYmUzMiBtYm1yOyAgICAgICAgICAgIC8qKjwgVVBNQiBNb2RlIFJlZ2lzdGVyICovCisJX19iZTMyIG1jbXI7ICAgICAgICAgICAgLyoqPCBVUE1DIE1vZGUgUmVnaXN0ZXIgKi8KKwl1OCByZXMyWzB4OF07CisJX19iZTMyIG1ydHByOyAgICAgICAgICAgLyoqPCBNZW1vcnkgUmVmcmVzaCBUaW1lciBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KKwlfX2JlMzIgbWRyOyAgICAgICAgICAgICAvKio8IFVQTSBEYXRhIFJlZ2lzdGVyICovCisJdTggcmVzM1sweDRdOworCV9fYmUzMiBsc29yOyAgICAgICAgICAgIC8qKjwgU3BlY2lhbCBPcGVyYXRpb24gSW5pdGlhdGlvbiBSZWdpc3RlciAqLworCV9fYmUzMiBsc2RtcjsgICAgICAgICAgIC8qKjwgU0RSQU0gTW9kZSBSZWdpc3RlciAqLworCXU4IHJlczRbMHg4XTsKKwlfX2JlMzIgbHVydDsgICAgICAgICAgICAvKio8IFVQTSBSZWZyZXNoIFRpbWVyICovCisJX19iZTMyIGxzcnQ7ICAgICAgICAgICAgLyoqPCBTRFJBTSBSZWZyZXNoIFRpbWVyICovCisJdTggcmVzNVsweDhdOworCV9fYmUzMiBsdGVzcjsgICAgICAgICAgIC8qKjwgVHJhbnNmZXIgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExURVNSX0JNICAgMHg4MDAwMDAwMAorI2RlZmluZSBMVEVTUl9GQ1QgIDB4NDAwMDAwMDAKKyNkZWZpbmUgTFRFU1JfUEFSICAweDIwMDAwMDAwCisjZGVmaW5lIExURVNSX1dQICAgMHgwNDAwMDAwMAorI2RlZmluZSBMVEVTUl9BVE1XIDB4MDA4MDAwMDAKKyNkZWZpbmUgTFRFU1JfQVRNUiAweDAwNDAwMDAwCisjZGVmaW5lIExURVNSX0NTICAgMHgwMDA4MDAwMAorI2RlZmluZSBMVEVTUl9DQyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFRFU1JfTkFORF9NQVNLIChMVEVTUl9GQ1QgfCBMVEVTUl9QQVIgfCBMVEVTUl9DQykKKwlfX2JlMzIgbHRlZHI7ICAgICAgICAgICAvKio8IFRyYW5zZmVyIEVycm9yIERpc2FibGUgUmVnaXN0ZXIgKi8KKwlfX2JlMzIgbHRlaXI7ICAgICAgICAgICAvKio8IFRyYW5zZmVyIEVycm9yIEludGVycnVwdCBSZWdpc3RlciAqLworCV9fYmUzMiBsdGVhdHI7ICAgICAgICAgIC8qKjwgVHJhbnNmZXIgRXJyb3IgQXR0cmlidXRlcyBSZWdpc3RlciAqLworCV9fYmUzMiBsdGVhcjsgICAgICAgICAgIC8qKjwgVHJhbnNmZXIgRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLworCXU4IHJlczZbMHhDXTsKKwlfX2JlMzIgbGJjcjsgICAgICAgICAgICAvKio8IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEJDUl9MRElTICAweDgwMDAwMDAwCisjZGVmaW5lIExCQ1JfTERJU19TSElGVCAgICAzMQorI2RlZmluZSBMQkNSX0JDVExDIDB4MDBDMDAwMDAKKyNkZWZpbmUgTEJDUl9CQ1RMQ19TSElGVCAgIDIyCisjZGVmaW5lIExCQ1JfQUhEICAgMHgwMDIwMDAwMAorI2RlZmluZSBMQkNSX0xQQlNFIDB4MDAwMjAwMDAKKyNkZWZpbmUgTEJDUl9MUEJTRV9TSElGVCAgIDE3CisjZGVmaW5lIExCQ1JfRVBBUiAgMHgwMDAxMDAwMAorI2RlZmluZSBMQkNSX0VQQVJfU0hJRlQgICAgMTYKKyNkZWZpbmUgTEJDUl9CTVQgICAweDAwMDBGRjAwCisjZGVmaW5lIExCQ1JfQk1UX1NISUZUICAgICAgOAorI2RlZmluZSBMQkNSX0lOSVQgIDB4MDAwNDAwMDAKKwlfX2JlMzIgbGNycjsgICAgICAgICAgICAvKio8IENsb2NrIFJhdGlvIFJlZ2lzdGVyICovCisjZGVmaW5lIExDUlJfREJZUCAgICAweDgwMDAwMDAwCisjZGVmaW5lIExDUlJfREJZUF9TSElGVCAgICAgIDMxCisjZGVmaW5lIExDUlJfQlVGQ01EQyAweDMwMDAwMDAwCisjZGVmaW5lIExDUlJfQlVGQ01EQ19TSElGVCAgIDI4CisjZGVmaW5lIExDUlJfRUNMICAgICAweDAzMDAwMDAwCisjZGVmaW5lIExDUlJfRUNMX1NISUZUICAgICAgIDI0CisjZGVmaW5lIExDUlJfRUFEQyAgICAweDAwMDMwMDAwCisjZGVmaW5lIExDUlJfRUFEQ19TSElGVCAgICAgIDE2CisjZGVmaW5lIExDUlJfQ0xLRElWICAweDAwMDAwMDBGCisjZGVmaW5lIExDUlJfQ0xLRElWX1NISUZUICAgICAwCisJdTggcmVzN1sweDhdOworCV9fYmUzMiBmbXI7ICAgICAgICAgICAgIC8qKjwgRmxhc2ggTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBGTVJfQ1dUTyAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGTVJfQ1dUT19TSElGVCAgICAgICAxMgorI2RlZmluZSBGTVJfQk9PVCAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTVJfRUNDTSAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTVJfQUwgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBGTVJfQUxfU0hJRlQgICAgICAgICAgNAorI2RlZmluZSBGTVJfT1AgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBGTVJfT1BfU0hJRlQgICAgICAgICAgMAorCV9fYmUzMiBmaXI7ICAgICAgICAgICAgIC8qKjwgRmxhc2ggSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRklSX09QMCAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRklSX09QMF9TSElGVCAgICAgICAgMjgKKyNkZWZpbmUgRklSX09QMSAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRklSX09QMV9TSElGVCAgICAgICAgMjQKKyNkZWZpbmUgRklSX09QMiAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgRklSX09QMl9TSElGVCAgICAgICAgMjAKKyNkZWZpbmUgRklSX09QMyAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRklSX09QM19TSElGVCAgICAgICAgMTYKKyNkZWZpbmUgRklSX09QNCAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRklSX09QNF9TSElGVCAgICAgICAgMTIKKyNkZWZpbmUgRklSX09QNSAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgRklSX09QNV9TSElGVCAgICAgICAgIDgKKyNkZWZpbmUgRklSX09QNiAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgRklSX09QNl9TSElGVCAgICAgICAgIDQKKyNkZWZpbmUgRklSX09QNyAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRklSX09QN19TSElGVCAgICAgICAgIDAKKyNkZWZpbmUgRklSX09QX05PUCAgIDB4MAkvKiBObyBvcGVyYXRpb24gYW5kIGVuZCBvZiBzZXF1ZW5jZSAqLworI2RlZmluZSBGSVJfT1BfQ0EgICAgMHgxICAgICAgICAvKiBJc3N1ZSBjdXJyZW50IGNvbHVtbiBhZGRyZXNzICovCisjZGVmaW5lIEZJUl9PUF9QQSAgICAweDIgICAgICAgIC8qIElzc3VlIGN1cnJlbnQgYmxvY2srcGFnZSBhZGRyZXNzICovCisjZGVmaW5lIEZJUl9PUF9VQSAgICAweDMgICAgICAgIC8qIElzc3VlIHVzZXIgZGVmaW5lZCBhZGRyZXNzICovCisjZGVmaW5lIEZJUl9PUF9DTTAgICAweDQgICAgICAgIC8qIElzc3VlIGNvbW1hbmQgZnJvbSBGQ1JbQ01EMF0gKi8KKyNkZWZpbmUgRklSX09QX0NNMSAgIDB4NSAgICAgICAgLyogSXNzdWUgY29tbWFuZCBmcm9tIEZDUltDTUQxXSAqLworI2RlZmluZSBGSVJfT1BfQ00yICAgMHg2ICAgICAgICAvKiBJc3N1ZSBjb21tYW5kIGZyb20gRkNSW0NNRDJdICovCisjZGVmaW5lIEZJUl9PUF9DTTMgICAweDcgICAgICAgIC8qIElzc3VlIGNvbW1hbmQgZnJvbSBGQ1JbQ01EM10gKi8KKyNkZWZpbmUgRklSX09QX1dCICAgIDB4OCAgICAgICAgLyogV3JpdGUgRkJDUiBieXRlcyBmcm9tIEZDTSBidWZmZXIgKi8KKyNkZWZpbmUgRklSX09QX1dTICAgIDB4OSAgICAgICAgLyogV3JpdGUgMSBvciAyIGJ5dGVzIGZyb20gTURSW0FTXSAqLworI2RlZmluZSBGSVJfT1BfUkIgICAgMHhBICAgICAgICAvKiBSZWFkIEZCQ1IgYnl0ZXMgdG8gRkNNIGJ1ZmZlciAqLworI2RlZmluZSBGSVJfT1BfUlMgICAgMHhCICAgICAgICAvKiBSZWFkIDEgb3IgMiBieXRlcyB0byBNRFJbQVNdICovCisjZGVmaW5lIEZJUl9PUF9DVzAgICAweEMgICAgICAgIC8qIFdhaXQgdGhlbiBpc3N1ZSBGQ1JbQ01EMF0gKi8KKyNkZWZpbmUgRklSX09QX0NXMSAgIDB4RCAgICAgICAgLyogV2FpdCB0aGVuIGlzc3VlIEZDUltDTUQxXSAqLworI2RlZmluZSBGSVJfT1BfUkJXICAgMHhFICAgICAgICAvKiBXYWl0IHRoZW4gcmVhZCBGQkNSIGJ5dGVzICovCisjZGVmaW5lIEZJUl9PUF9SU1cgICAweEUgICAgICAgIC8qIFdhaXQgdGhlbiByZWFkIDEgb3IgMiBieXRlcyAqLworCV9fYmUzMiBmY3I7ICAgICAgICAgICAgIC8qKjwgRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBGQ1JfQ01EMCAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGQ1JfQ01EMF9TSElGVCAgICAgICAyNAorI2RlZmluZSBGQ1JfQ01EMSAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ1JfQ01EMV9TSElGVCAgICAgICAxNgorI2RlZmluZSBGQ1JfQ01EMiAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ1JfQ01EMl9TSElGVCAgICAgICAgOAorI2RlZmluZSBGQ1JfQ01EMyAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ1JfQ01EM19TSElGVCAgICAgICAgMAorCV9fYmUzMiBmYmFyOyAgICAgICAgICAgIC8qKjwgRmxhc2ggQmxvY2sgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBGQkFSX0JMSyAgICAgMHgwMEZGRkZGRgorCV9fYmUzMiBmcGFyOyAgICAgICAgICAgIC8qKjwgRmxhc2ggUGFnZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEZQQVJfU1BfUEkgICAweDAwMDA3QzAwCisjZGVmaW5lIEZQQVJfU1BfUElfU0hJRlQgICAgIDEwCisjZGVmaW5lIEZQQVJfU1BfTVMgICAweDAwMDAwMjAwCisjZGVmaW5lIEZQQVJfU1BfQ0kgICAweDAwMDAwMUZGCisjZGVmaW5lIEZQQVJfU1BfQ0lfU0hJRlQgICAgICAwCisjZGVmaW5lIEZQQVJfTFBfUEkgICAweDAwMDNGMDAwCisjZGVmaW5lIEZQQVJfTFBfUElfU0hJRlQgICAgIDEyCisjZGVmaW5lIEZQQVJfTFBfTVMgICAweDAwMDAwODAwCisjZGVmaW5lIEZQQVJfTFBfQ0kgICAweDAwMDAwN0ZGCisjZGVmaW5lIEZQQVJfTFBfQ0lfU0hJRlQgICAgICAwCisJX19iZTMyIGZiY3I7ICAgICAgICAgICAgLyoqPCBGbGFzaCBCeXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIEZCQ1JfQkMgICAgICAweDAwMDAwRkZGCisJdTggcmVzMTFbMHg4XTsKKwl1OCByZXM4WzB4RjAwXTsKK307CisKK2V4dGVybiBzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmZzbF9sYmNfcmVnczsKK2V4dGVybiBzcGlubG9ja190IGZzbF9sYmNfbG9jazsKKworLyoKKyAqIEZTTCBVUE0gcm91dGluZXMKKyAqLworc3RydWN0IGZzbF91cG0geworCV9fYmUzMiBfX2lvbWVtICpteG1yOworCWludCB3aWR0aDsKK307CisKK2V4dGVybiBpbnQgZnNsX2xiY19maW5kKHBoeXNfYWRkcl90IGFkZHJfYmFzZSk7CitleHRlcm4gaW50IGZzbF91cG1fZmluZChwaHlzX2FkZHJfdCBhZGRyX2Jhc2UsIHN0cnVjdCBmc2xfdXBtICp1cG0pOworCisvKioKKyAqIGZzbF91cG1fc3RhcnRfcGF0dGVybiAtIHN0YXJ0IFVQTSBwYXR0ZXJucyBleGVjdXRpb24KKyAqIEB1cG06CXBvaW50ZXIgdG8gdGhlIGZzbF91cG0gc3RydWN0dXJlIG9idGFpbmVkIHZpYSBmc2xfdXBtX2ZpbmQKKyAqIEBwYXRfb2Zmc2V0OglVUE0gcGF0dGVybiBvZmZzZXQgZm9yIHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkCisgKgorICogVGhpcyByb3V0aW5lIHByb2dyYW1tZXMgVVBNIHNvIHRoZSBuZXh0IG1lbW9yeSBhY2Nlc3MgdGhhdCBoaXRzIGFuIFVQTQorICogd2lsbCB0cmlnZ2VyIHBhdHRlcm4gZXhlY3V0aW9uLCBzdGFydGluZyBhdCBwYXRfb2Zmc2V0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNsX3VwbV9zdGFydF9wYXR0ZXJuKHN0cnVjdCBmc2xfdXBtICp1cG0sIHU4IHBhdF9vZmZzZXQpCit7CisJY2xyc2V0Yml0c19iZTMyKHVwbS0+bXhtciwgTXhNUl9NQUQsIE14TVJfT1BfUlAgfCBwYXRfb2Zmc2V0KTsKK30KKworLyoqCisgKiBmc2xfdXBtX2VuZF9wYXR0ZXJuIC0gZW5kIFVQTSBwYXR0ZXJucyBleGVjdXRpb24KKyAqIEB1cG06CXBvaW50ZXIgdG8gdGhlIGZzbF91cG0gc3RydWN0dXJlIG9idGFpbmVkIHZpYSBmc2xfdXBtX2ZpbmQKKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV2ZXJ0cyBVUE0gdG8gbm9ybWFsIG9wZXJhdGlvbiBtb2RlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNsX3VwbV9lbmRfcGF0dGVybihzdHJ1Y3QgZnNsX3VwbSAqdXBtKQoreworCWNscmJpdHMzMih1cG0tPm14bXIsIE14TVJfT1BfUlApOworCisJd2hpbGUgKGluX2JlMzIodXBtLT5teG1yKSAmIE14TVJfT1BfUlApCisJCWNwdV9yZWxheCgpOworfQorCisvKioKKyAqIGZzbF91cG1fcnVuX3BhdHRlcm4gLSBhY3R1YWxseSBydW4gYW4gVVBNIHBhdHRlcm4KKyAqIEB1cG06CXBvaW50ZXIgdG8gdGhlIGZzbF91cG0gc3RydWN0dXJlIG9idGFpbmVkIHZpYSBmc2xfdXBtX2ZpbmQKKyAqIEBpb19iYXNlOglyZW1hcHBlZCBwb2ludGVyIHRvIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgc2hvdWxkIGhhcHBlbgorICogQG1hcjoJTUFSIHJlZ2lzdGVyIGNvbnRlbnQgZHVyaW5nIHBhdHRlcm4gZXhlY3V0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBkdW1teSB3cml0ZSB0byB0aGUgbWVtb3J5IHNwZWNpZmllZCBieSB0aGUgaW9fYmFzZSwKKyAqIHRodXMgVVBNIHBhdHRlcm4gYWN0dWFsbHkgZXhlY3V0ZWQuIE5vdGUgdGhhdCBtYXIgdXNhZ2UgZGVwZW5kcyBvbiB0aGUKKyAqIHByZS1wcm9ncmFtbWVkIEFNWCBiaXRzIGluIHRoZSBVUE0gUkFNLgorICovCitzdGF0aWMgaW5saW5lIGludCBmc2xfdXBtX3J1bl9wYXR0ZXJuKHN0cnVjdCBmc2xfdXBtICp1cG0sCisJCQkJICAgICAgdm9pZCBfX2lvbWVtICppb19iYXNlLCB1MzIgbWFyKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2xiY19sb2NrLCBmbGFncyk7CisKKwlvdXRfYmUzMigmZnNsX2xiY19yZWdzLT5tYXIsIG1hciA8PCAoMzIgLSB1cG0tPndpZHRoKSk7CisKKwlzd2l0Y2ggKHVwbS0+d2lkdGgpIHsKKwljYXNlIDg6CisJCW91dF84KGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCW91dF9iZTE2KGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCW91dF9iZTMyKGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9sYmNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8qIF9fQVNNX0ZTTF9MQkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9ncGlvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2FkM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9ncGlvLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIEdlbmVyaWMgR1BJTyBBUEkgaW1wbGVtZW50YXRpb24gZm9yIFBvd2VyUEMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9QT1dFUlBDX0dQSU9fSAorI2RlZmluZSBfX0FTTV9QT1dFUlBDX0dQSU9fSAorCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNpZmRlZiBDT05GSUdfSEFWRV9HUElPX0xJQgorCisvKgorICogV2UgZG9uJ3QgKHlldCkgaW1wbGVtZW50IGlubGluZWQvcmFwaWQgdmVyc2lvbnMgZm9yIG9uLWNoaXAgZ3Bpb3MuCisgKiBKdXN0IGNhbGwgZ3Bpb2xpYi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbHVlKQoreworCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2NhbnNsZWVwKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7Cit9CisKKy8qCisgKiBOb3QgaW1wbGVtZW50ZWQsIHlldC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9HUElPX0xJQiAqLworCisjZW5kaWYgLyogX19BU01fUE9XRVJQQ19HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCmluZGV4IGE3YjYwYmYuLmFkOGM5ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaApAQCAtMjcsNyArMjcsNyBAQAogCXJldHVybiBmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvY2FsX2lycV9kaXNhYmxlKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmF3X2xvY2FsX2lycV9kaXNhYmxlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgemVybzsKIApAQCAtMzksMTQgKzM5LDE1IEBACiAJcmV0dXJuIGZsYWdzOwogfQogCi1leHRlcm4gdm9pZCBsb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkIGlzZXJpZXNfaGFuZGxlX2ludGVycnVwdHModm9pZCk7CiAKLSNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCWxvY2FsX2lycV9yZXN0b3JlKDEpCi0jZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCSgoZmxhZ3MpID0gbG9jYWxfZ2V0X2ZsYWdzKCkpCi0jZGVmaW5lIGxvY2FsX2lycV9zYXZlKGZsYWdzKQkoKGZsYWdzKSA9IGxvY2FsX2lycV9kaXNhYmxlKCkpCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfZW5hYmxlKCkJCXJhd19sb2NhbF9pcnFfcmVzdG9yZSgxKQorI2RlZmluZSByYXdfbG9jYWxfc2F2ZV9mbGFncyhmbGFncykJKChmbGFncykgPSBsb2NhbF9nZXRfZmxhZ3MoKSkKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKQkoKGZsYWdzKSA9IHJhd19sb2NhbF9pcnFfZGlzYWJsZSgpKQogCi0jZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJKGxvY2FsX2dldF9mbGFncygpID09IDApCisjZGVmaW5lIHJhd19pcnFzX2Rpc2FibGVkKCkJCShsb2NhbF9nZXRfZmxhZ3MoKSA9PSAwKQorI2RlZmluZSByYXdfaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykJKChmbGFncykgPT0gMCkKIAogI2RlZmluZSBfX2hhcmRfaXJxX2VuYWJsZSgpCV9fbXRtc3JkKG1mbXNyKCkgfCBNU1JfRUUsIDEpCiAjZGVmaW5lIF9faGFyZF9pcnFfZGlzYWJsZSgpCV9fbXRtc3JkKG1mbXNyKCkgJiB+TVNSX0VFLCAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaWRlLmgKaW5kZXggNmQ1MDMxMC4uM2Q5MGJmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oCkBAIC0zMSwzOSArMzEsNDggQEAKICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCi1zdHJ1Y3QgaWRlX21hY2hkZXBfY2FsbHMgewotICAgICAgICBpbnQgICAgICAgICAoKmRlZmF1bHRfaXJxKSh1bnNpZ25lZCBsb25nIGJhc2UpOwotICAgICAgICB1bnNpZ25lZCBsb25nICgqZGVmYXVsdF9pb19iYXNlKShpbnQgaW5kZXgpOwotICAgICAgICB2b2lkICAgICAgICAoKmlkZV9pbml0X2h3aWYpKGh3X3JlZ3NfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjdHJsX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppcnEpOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBpZGVfbWFjaGRlcF9jYWxscyBwcGNfaWRlX21kOwotCi0jZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0RFRkFVTFRTCi0KKy8qIEZJWE1FOiB1c2UgaWRlX3BsYXRmb3JtIGhvc3QgZHJpdmVyICovCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKIHsKLQlpZiAocHBjX2lkZV9tZC5kZWZhdWx0X2lycSkKLQkJcmV0dXJuIHBwY19pZGVfbWQuZGVmYXVsdF9pcnEoYmFzZSk7CisjaWZkZWYgQ09ORklHX1BQTFVTCisJc3dpdGNoIChiYXNlKSB7CisJY2FzZSAweDFmMDoJcmV0dXJuIDE0OworCWNhc2UgMHgxNzA6CXJldHVybiAxNTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDX1BSRVAKKwlzd2l0Y2ggKGJhc2UpIHsKKwljYXNlIDB4MWYwOglyZXR1cm4gMTM7CisJY2FzZSAweDE3MDoJcmV0dXJuIDEzOworCWNhc2UgMHgxZTg6CXJldHVybiAxMTsKKwljYXNlIDB4MTY4OglyZXR1cm4gMTA7CisJY2FzZSAweGZmZjA6CXJldHVybiAxNDsJLyogTUNQKE4pNzUwIGlkZTAgKi8KKwljYXNlIDB4ZmZlMDoJcmV0dXJuIDE1OwkvKiBNQ1AoTik3NTAgaWRlMSAqLworCX0KKyNlbmRpZgogCXJldHVybiAwOwogfQogCisvKiBGSVhNRTogdXNlIGlkZV9wbGF0Zm9ybSBob3N0IGRyaXZlciAqLwogc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBpZGVfZGVmYXVsdF9pb19iYXNlKGludCBpbmRleCkKIHsKLQlpZiAocHBjX2lkZV9tZC5kZWZhdWx0X2lvX2Jhc2UpCi0JCXJldHVybiBwcGNfaWRlX21kLmRlZmF1bHRfaW9fYmFzZShpbmRleCk7CisjaWZkZWYgQ09ORklHX1BQTFVTCisJc3dpdGNoIChpbmRleCkgeworCWNhc2UgMDoJCXJldHVybiAweDFmMDsKKwljYXNlIDE6CQlyZXR1cm4gMHgxNzA7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BQQ19QUkVQCisJc3dpdGNoIChpbmRleCkgeworCWNhc2UgMDoJCXJldHVybiAweDFmMDsKKwljYXNlIDE6CQlyZXR1cm4gMHgxNzA7CisJY2FzZSAyOgkJcmV0dXJuIDB4MWU4OworCWNhc2UgMzoJCXJldHVybiAweDE2ODsKKwl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0kKLSNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJKDApCi0jZWxzZQotI2RlZmluZSBpZGVfaW5pdF9kZWZhdWx0X2lycShiYXNlKQlpZGVfZGVmYXVsdF9pcnEoYmFzZSkKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfTVBDOHh4X0lERQogI2RlZmluZSBJREVfQVJDSF9BQ0tfSU5UUiAgMQogI2RlZmluZSBpZGVfYWNrX2ludHIoaHdpZikgKChod2lmKS0+YWNrX2ludHIgPyAoaHdpZiktPmFja19pbnRyKGh3aWYpIDogMSkKQEAgLTcxLDggKzgwLDYgQEAKIAogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAotI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2ltbWFwX3FlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2ltbWFwX3FlLmgKaW5kZXggODJhNDUyNi4uN2I2ZjQxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pbW1hcF9xZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW1tYXBfcWUuaApAQCAtMjAsNiArMjAsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIFFFX0lNTUFQX1NJWkUJKDEwMjQgKiAxMDI0KQkvKiAxTUIgZnJvbSAxTUIrSU1NUiAqLwogCkBAIC00NjgsNyArNDY5LDcgQEAKIAl1OAkJCXJlczE4WzB4QzAwMDBdOwkvKiAweDE0MDAwMCAtIDB4MjAwMDAwICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotZXh0ZXJuIHN0cnVjdCBxZV9pbW1hcCAqcWVfaW1tcjsKK2V4dGVybiBzdHJ1Y3QgcWVfaW1tYXAgX19pb21lbSAqcWVfaW1tcjsKIGV4dGVybiBwaHlzX2FkZHJfdCBnZXRfcWVfYmFzZSh2b2lkKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGltbXJiYXJfdmlydF90b19waHlzKHZvaWQgKmFkZHJlc3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycWZsYWdzLmgKaW5kZXggNzk3MGNiYS4uY2M2ZmRiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnFmbGFncy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxZmxhZ3MuaApAQCAtMiwzMCArMiw0MyBAQAogICogaW5jbHVkZS9hc20tcG93ZXJwYy9pcnFmbGFncy5oCiAgKgogICogSVJRIGZsYWdzIGhhbmRsaW5nCi0gKgotICogVGhpcyBmaWxlIGdldHMgaW5jbHVkZWQgZnJvbSBsb3dsZXZlbCBhc20gaGVhZGVycyB0b28sIHRvIHByb3ZpZGUKLSAqIHdyYXBwZWQgdmVyc2lvbnMgb2YgdGhlIGxvY2FsX2lycV8qKCkgQVBJcywgYmFzZWQgb24gdGhlCi0gKiByYXdfbG9jYWxfaXJxXyooKSBtYWNyb3MgZnJvbSB0aGUgbG93bGV2ZWwgaGVhZGVycy4KICAqLwogI2lmbmRlZiBfQVNNX0lSUUZMQUdTX0gKICNkZWZpbmUgX0FTTV9JUlFGTEFHU19ICiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgogICogR2V0IGRlZmluaXRpb25zIGZvciByYXdfbG9jYWxfc2F2ZV9mbGFncyh4KSwgZXRjLgogICovCiAjaW5jbHVkZSA8YXNtLXBvd2VycGMvaHdfaXJxLmg+CiAKLS8qCi0gKiBEbyB0aGUgQ1BVJ3MgSVJRLXN0YXRlIHRyYWNpbmcgZnJvbSBhc3NlbWJseSBjb2RlLiBXZSBjYWxsIGEKLSAqIEMgZnVuY3Rpb24sIHNvIHNhdmUgYWxsIHRoZSBDLWNsb2JiZXJlZCByZWdpc3RlcnM6Ci0gKi8KLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQotI2Vycm9yIE5vIHN1cHBvcnQgb24gUG93ZXJQQyB5ZXQgZm9yIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCiAjZWxzZQotIyBkZWZpbmUgVFJBQ0VfSVJRU19PTgotIyBkZWZpbmUgVFJBQ0VfSVJRU19PRkYKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKy8qCisgKiBNb3N0IG9mIHRoZSBDUFUncyBJUlEtc3RhdGUgdHJhY2luZyBpcyBkb25lIGZyb20gYXNzZW1ibHkgY29kZTsgd2UKKyAqIGhhdmUgdG8gY2FsbCBhIEMgZnVuY3Rpb24gc28gY2FsbCBhIHdyYXBwZXIgdGhhdCBzYXZlcyBhbGwgdGhlCisgKiBDLWNsb2JiZXJlZCByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgVFJBQ0VfRU5BQkxFX0lOVFMJYmwgLnRyYWNlX2hhcmRpcnFzX29uCisjZGVmaW5lIFRSQUNFX0RJU0FCTEVfSU5UUwlibCAudHJhY2VfaGFyZGlycXNfb2ZmCisjZGVmaW5lIFRSQUNFX0FORF9SRVNUT1JFX0lSUV9QQVJUSUFMKGVuLHNraXApCVwKKwljbXBkaQllbiwgMDsJCQkJXAorCWJuZQk5NWY7CQkJCVwKKwlzdGIJZW4sUEFDQVNPRlRJUlFFTihyMTMpOwkJXAorCWJsCS50cmFjZV9oYXJkaXJxc19vZmY7CQlcCisJYglza2lwOwkJCQlcCis5NToJYmwJLnRyYWNlX2hhcmRpcnFzX29uOwkJXAorCWxpCWVuLDE7CisjZGVmaW5lIFRSQUNFX0FORF9SRVNUT1JFX0lSUShlbikJCVwKKwlUUkFDRV9BTkRfUkVTVE9SRV9JUlFfUEFSVElBTChlbiw5NmYpOwlcCis5NjoJc3RiCWVuLFBBQ0FTT0ZUSVJRRU4ocjEzKQorI2Vsc2UKKyNkZWZpbmUgVFJBQ0VfRU5BQkxFX0lOVFMKKyNkZWZpbmUgVFJBQ0VfRElTQUJMRV9JTlRTCisjZGVmaW5lIFRSQUNFX0FORF9SRVNUT1JFX0lSUV9QQVJUSUFMKGVuLHNraXApCisjZGVmaW5lIFRSQUNFX0FORF9SRVNUT1JFX0lSUShlbikJCVwKKwlzdGIJZW4sUEFDQVNPRlRJUlFFTihyMTMpCisjZW5kaWYKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9hbHBhY2EuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9hbHBhY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGNjZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2FscGFjYS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCAgU3RlcGhlbiBSb3Rod2VsbCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfSVNFUklFU19BTFBBQ0FfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfSVNFUklFU19BTFBBQ0FfSAorCisvKgorICogVGhpcyBpcyB0aGUgcGFydCBvZiB0aGUgcGFjYSB0aGF0IHRoZSBpU2VyaWVzIGh5cGVydmlzb3IKKyAqIG5lZWRzIHRvIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGlzZWQuIEltbWVkaWF0ZWx5IGFmdGVyIGJvb3QKKyAqIHdlIHN3aXRjaCB0byB0aGUgbm9ybWFsIExpbnV4IHBhY2EuCisgKi8KK3N0cnVjdCBhbHBhY2EgeworCXN0cnVjdCBscHBhY2EgKmxwcGFjYV9wdHI7CS8qIFBvaW50ZXIgdG8gTHBQYWNhIGZvciBQTElDICovCisJY29uc3Qgdm9pZCAqcmVnX3NhdmVfcHRyOwkvKiBQb2ludGVyIHRvIExwUmVnU2F2ZSBmb3IgUExJQyAqLworfTsKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19JU0VSSUVTX0FMUEFDQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfbHBfcmVnX3NhdmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pdF9scF9yZWdfc2F2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDAzYjc1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pdF9scF9yZWdfc2F2ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMSAgTWlrZSBDb3JyaWdhbiBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqLwotI2lmbmRlZiBfQVNNX1BPV0VSUENfSVNFUklFU19JVF9MUF9SRUdfU0FWRV9ICi0jZGVmaW5lIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lUX0xQX1JFR19TQVZFX0gKLQotLyoKLSAqIFRoaXMgY29udHJvbCBibG9jayBjb250YWlucyB0aGUgZGF0YSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIFBMSUMKLSAqIGFuZCB0aGUgT1MKLSAqLwotCi1zdHJ1Y3QgSXRMcFJlZ1NhdmUgewotCXUzMgl4RGVzYzsJCS8vIEV5ZSBjYXRjaGVyICAiTHBSUyIgZWJjZGljCTAwMC0wMDMKLQl1MTYJeFNpemU7CQkvLyBTaXplIG9mIHRoaXMgY2xhc3MJCTAwNC0wMDUKLQl1OAl4SW5Vc2U7ICAgICAgICAgLy8gQXJlYSBpcyBsaXZlICAgICAgICAgICAgICAgICAwMDYtMDA3Ci0JdTgJeFJzdmQxWzldOwkvLyBSZXNlcnZlZAkJCTAwNy0wMEYKLQotCXU4ICAgICAgeEZpeGVkUmVnU2F2ZVszNTJdOyAvLyBGaXhlZCBSZWdpc3RlciBTYXZlIEFyZWEgMDEwLTE2RgotCXUzMgl4Q1RSTDsJCS8vIENvbnRyb2wgUmVnaXN0ZXIJCTE3MC0xNzMKLQl1MzIJeERFQzsJCS8vIERlY3JlbWVudGVyCQkJMTc0LTE3NwotCXUzMgl4RlBTQ1I7CQkvLyBGUCBTdGF0dXMgYW5kIENvbnRyb2wgUmVnCTE3OC0xN0IKLQl1MzIJeFBWUjsJCS8vIFByb2Nlc3NvciBWZXJzaW9uIE51bWJlcgkxN0MtMTdGCi0KLQl1NjQJeE1NQ1IwOwkJLy8gTW9uaXRvciBNb2RlIENvbnRyb2wgUmVnIDAJMTgwLTE4NwotCXUzMgl4UE1DMTsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDEJMTg4LTE4QgotCXUzMgl4UE1DMjsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDIJMThDLTE4RgotCXUzMgl4UE1DMzsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDMJMTkwLTE5MwotCXUzMgl4UE1DNDsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDQJMTk0LTE5NwotCXUzMgl4UElSOwkJLy8gUHJvY2Vzc29yIElEIFJlZwkJMTk4LTE5QgotCi0JdTMyCXhNTUNSMTsJCS8vIE1vbml0b3IgTW9kZSBDb250cm9sIFJlZyAxCTE5Qy0xOUYKLQl1MzIJeE1NQ1JBOwkJLy8gTW9uaXRvciBNb2RlIENvbnRyb2wgUmVnIEEJMUEwLTFBMwotCXUzMgl4UE1DNTsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDUJMUE0LTFBNwotCXUzMgl4UE1DNjsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDYJMUE4LTFBQgotCXUzMgl4UE1DNzsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDcJMUFDLTFBRgotCXUzMgl4UE1DODsJCS8vIFBlcmYgTW9uaXRvciBDb3VudGVyIDgJMUIwLTFCMwotCXUzMgl4VFNDOwkJLy8gVGhyZWFkIFN3aXRjaCBDb250cm9sCTFCNC0xQjcKLQl1MzIJeFRTVDsJCS8vIFRocmVhZCBTd2l0Y2ggVGltZW91dAkxQjgtMUJCCi0JdTMyCXhSc3ZkOyAgICAgICAgICAvLyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIDFCQy0xQkYKLQotCXU2NAl4QUNDUjsJCS8vIEFkZHJlc3MgQ29tcGFyZSBDb250cm9sIFJlZwkxQzAtMUM3Ci0JdTY0CXhJTVI7CQkvLyBJbnN0cnVjdGlvbiBNYXRjaCBSZWdpc3RlcgkxQzgtMUNGCi0JdTY0CXhTRFIxOwkJLy8gU3RvcmFnZSBEZXNjcmlwdGlvbiBSZWcgMQkxRDAtMUQ3Ci0JdTY0CXhTUFJHMDsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDAJMUQ4LTFERgotCXU2NAl4U1BSRzE7CQkvLyBTcGVjaWFsIFB1cnBvc2UgUmVnIEdlbmVyYWwxCTFFMC0xRTcKLQl1NjQJeFNQUkcyOwkJLy8gU3BlY2lhbCBQdXJwb3NlIFJlZyBHZW5lcmFsMgkxRTgtMUVGCi0JdTY0CXhTUFJHMzsJCS8vIFNwZWNpYWwgUHVycG9zZSBSZWcgR2VuZXJhbDMJMUYwLTFGNwotCXU2NAl4VEI7CQkvLyBUaW1lIEJhc2UgUmVnaXN0ZXIJCTFGOC0xRkYKLQotCXU2NAl4RlBSWzMyXTsJLy8gRmxvYXRpbmcgUG9pbnQgUmVnaXN0ZXJzCTIwMC0yRkYKLQotCXU2NAl4TVNSOwkJLy8gTWFjaGluZSBTdGF0ZSBSZWdpc3RlcgkzMDAtMzA3Ci0JdTY0CXhOSUE7CQkvLyBOZXh0IEluc3RydWN0aW9uIEFkZHJlc3MJMzA4LTMwRgotCi0JdTY0CXhEQUJSOwkJLy8gRGF0YSBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnCTMxMC0zMTcKLQl1NjQJeElBQlI7CQkvLyBJbnN0IEFkZHJlc3MgQnJlYWtwb2ludCBSZWcJMzE4LTMxRgotCi0JdTY0CXhISUQwOwkJLy8gSFcgSW1wbGVtZW50YXRpb24gRGVwZW5kZW50MAkzMjAtMzI3Ci0KLQl1NjQJeEhJRDQ7CQkvLyBIVyBJbXBsZW1lbnRhdGlvbiBEZXBlbmRlbnQ0CTMyOC0zMkYKLQl1NjQJeFNDT01kOwkJLy8gU0NPTiBEYXRhIFJlZyAoU1BSRzQpCTMzMC0zMzcKLQl1NjQJeFNDT01jOwkJLy8gU0NPTiBDb21tYW5kIFJlZyAoU1BSRzUpCTMzOC0zM0YKLQl1NjQJeFNEQVI7CQkvLyBTYW1wbGUgRGF0YSBBZGRyZXNzIFJlZ2lzdGVyCTM0MC0zNDcKLQl1NjQJeFNJQVI7CQkvLyBTYW1wbGUgSW5zdCBBZGRyZXNzIFJlZ2lzdGVyCTM0OC0zNEYKLQotCXU4CXhSc3ZkM1sxNzZdOwkvLyBSZXNlcnZlZAkJCTM1MC0zRkYKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgSXRMcFJlZ1NhdmUgaXNlcmllc19yZWdfc2F2ZVtdOwotCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX0lTRVJJRVNfSVRfTFBfUkVHX1NBVkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2twcm9iZXMuaAppbmRleCBhZmFiYWQyLi5kMGU3NzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2twcm9iZXMuaApAQCAtODAsNyArODAsNiBAQAogI2RlZmluZSBpc190cmFwKGluc3RyKQkoSVNfVFcoaW5zdHIpIHx8IElTX1RXSShpbnN0cikpCiAjZW5kaWYKIAotI2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKICNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUga3JldHByb2JlX2JsYWNrbGlzdF9zaXplIDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rdm0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNTMwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMva3ZtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTElOVVhfS1ZNX1BPV0VSUENfSAorI2RlZmluZSBfX0xJTlVYX0tWTV9QT1dFUlBDX0gKKworLyogcG93ZXJwYyBkb2VzIG5vdCBzdXBwb3J0IEtWTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbG1iLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2xtYi5oCmluZGV4IDVkMWRjNDguLjZmNWZkZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbG1iLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9sbWIuaApAQCAtMSw4MSArMSwxNSBAQAogI2lmbmRlZiBfQVNNX1BPV0VSUENfTE1CX0gKICNkZWZpbmUgX0FTTV9QT1dFUlBDX0xNQl9ICi0jaWZkZWYgX19LRVJORUxfXwogCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIE9wZW4gRmlybXdhcmUgUFJPTSBvbgotICogUG93ZXIgTWFjaW50b3NoIGNvbXB1dGVycy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgQmVyZ25lciwgSUJNIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLworI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNkZWZpbmUgTE1CX0RCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKIAotI2RlZmluZSBNQVhfTE1CX1JFR0lPTlMgMTI4CisjaWZkZWYgQ09ORklHX1BQQzMyCitleHRlcm4gcGh5c19hZGRyX3QgbG93bWVtX2VuZF9hZGRyOworI2RlZmluZSBMTUJfUkVBTF9MSU1JVAlsb3dtZW1fZW5kX2FkZHIKKyNlbHNlCisjZGVmaW5lIExNQl9SRUFMX0xJTUlUCTAKKyNlbmRpZgogCi1zdHJ1Y3QgbG1iX3Byb3BlcnR5IHsKLQl1bnNpZ25lZCBsb25nIGJhc2U7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotfTsKLQotc3RydWN0IGxtYl9yZWdpb24gewotCXVuc2lnbmVkIGxvbmcgY250OwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlzdHJ1Y3QgbG1iX3Byb3BlcnR5IHJlZ2lvbltNQVhfTE1CX1JFR0lPTlMrMV07Ci19OwotCi1zdHJ1Y3QgbG1iIHsKLQl1bnNpZ25lZCBsb25nIGRlYnVnOwotCXVuc2lnbmVkIGxvbmcgcm1vX3NpemU7Ci0Jc3RydWN0IGxtYl9yZWdpb24gbWVtb3J5OwotCXN0cnVjdCBsbWJfcmVnaW9uIHJlc2VydmVkOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBsbWIgbG1iOwotCi1leHRlcm4gdm9pZCBfX2luaXQgbG1iX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgbG1iX2FuYWx5emUodm9pZCk7Ci1leHRlcm4gbG9uZyBfX2luaXQgbG1iX2FkZCh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9hbGxvY19iYXNlKHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBtYXhfYWRkcik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgX19sbWJfYWxsb2NfYmFzZSh1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgbWF4X2FkZHIpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9waHlzX21lbV9zaXplKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9lbmRfb2ZfRFJBTSh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBsbWJfZW5mb3JjZV9tZW1vcnlfbGltaXQodW5zaWduZWQgbG9uZyBtZW1vcnlfbGltaXQpOwotZXh0ZXJuIGludCBfX2luaXQgbG1iX2lzX3Jlc2VydmVkKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci0KLWV4dGVybiB2b2lkIGxtYl9kdW1wX2FsbCh2b2lkKTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1sbWJfc2l6ZV9ieXRlcyhzdHJ1Y3QgbG1iX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCi17Ci0JcmV0dXJuIHR5cGUtPnJlZ2lvbltyZWdpb25fbnJdLnNpemU7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLWxtYl9zaXplX3BhZ2VzKHN0cnVjdCBsbWJfcmVnaW9uICp0eXBlLCB1bnNpZ25lZCBsb25nIHJlZ2lvbl9ucikKLXsKLQlyZXR1cm4gbG1iX3NpemVfYnl0ZXModHlwZSwgcmVnaW9uX25yKSA+PiBQQUdFX1NISUZUOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1sbWJfc3RhcnRfcGZuKHN0cnVjdCBsbWJfcmVnaW9uICp0eXBlLCB1bnNpZ25lZCBsb25nIHJlZ2lvbl9ucikKLXsKLQlyZXR1cm4gdHlwZS0+cmVnaW9uW3JlZ2lvbl9ucl0uYmFzZSA+PiBQQUdFX1NISUZUOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1sbWJfZW5kX3BmbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCi17Ci0JcmV0dXJuIGxtYl9zdGFydF9wZm4odHlwZSwgcmVnaW9uX25yKSArCi0JICAgICAgIGxtYl9zaXplX3BhZ2VzKHR5cGUsIHJlZ2lvbl9ucik7Ci19Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0xNQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCmluZGV4IDA4NzJlYzIuLjU0ZWQ2NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCkBAIC02OCw2ICs2OCw4IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmZsYWdzLAogCQkJCSAgICAgICBpbnQgcHNpemUsIGludCBzc2l6ZSk7CiAJbG9uZwkJKCpocHRlX3JlbW92ZSkodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwKTsKKwl2b2lkICAgICAgICAgICAgKCpocHRlX3JlbW92ZWJvbHRlZCkodW5zaWduZWQgbG9uZyBlYSwKKwkJCQkJICAgICBpbnQgcHNpemUsIGludCBzc2l6ZSk7CiAJdm9pZAkJKCpmbHVzaF9oYXNoX3JhbmdlKSh1bnNpZ25lZCBsb25nIG51bWJlciwgaW50IGxvY2FsKTsKIAogCS8qIHNwZWNpYWwgZm9yIGtleGVjLCB0byBiZSBjYWxsZWQgaW4gcmVhbCBtb2RlLCBsaW5hciBtYXBwaW5nIGlzCkBAIC0xOTYsOSArMTk4LDYgQEAKIAkgICBNYXkgYmUgTlVMTC4gKi8KIAl2b2lkCQkoKmluaXQpKHZvaWQpOwogCi0Jdm9pZAkJKCpzZXR1cF9pb19tYXBwaW5ncykodm9pZCk7Ci0KLQl2b2lkCQkoKmVhcmx5X3NlcmlhbF9tYXApKHZvaWQpOwogCXZvaWQJCSgqa2dkYl9tYXBfc2NjKSh2b2lkKTsKIAogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2lvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2lvLmgKaW5kZXggM2E2Y2IxYS4uMDc5YzA2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNpby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaW8uaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19NQUNJT19BU0lDX0hfXwogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KIAogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBtYWNpb19idXNfdHlwZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tZWRpYWJheS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tZWRpYWJheS5oCmluZGV4IGRlODNmZTEuLmRmMTExYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWVkaWFiYXkuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21lZGlhYmF5LmgKQEAgLTIyLDEwICsyMiwxNCBAQAogLyogTnVtYmVyIG9mIGJheXMgaW4gdGhlIG1hY2hpbmUgb3IgMCAqLwogZXh0ZXJuIGludCBtZWRpYV9iYXlfY291bnQ7CiAKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQworI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCiBpbnQgY2hlY2tfbWVkaWFfYmF5X2J5X2Jhc2UodW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgd2hhdCk7CiAvKiBjYWxsZWQgYnkgSURFIFBNQUMgaG9zdCBkcml2ZXIgdG8gcmVnaXN0ZXIgSURFIGNvbnRyb2xsZXIgZm9yIG1lZGlhIGJheSAqLwogaW50IG1lZGlhX2JheV9zZXRfaWRlX2luZm9zKHN0cnVjdCBkZXZpY2Vfbm9kZSAqd2hpY2hfYmF5LCB1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkgICAgaW50IGlycSwgaW50IGluZGV4KTsKKwkJCSAgICBpbnQgaXJxLCBpZGVfaHdpZl90ICpod2lmKTsKKyNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9QUENfTUVESUFCQVlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtNDB4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS00MHguaAppbmRleCA3ZDM3Zjc3Li4zZDEwODY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS00MHguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS00MHguaApAQCAtNTMsOCArNTMsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGlkOwogCXVuc2lnbmVkIGxvbmcgdmRzb19iYXNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtNDR4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS00NHguaAppbmRleCA2Mjc3MmFlLi5jOGIwMmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS00NHguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS00NHguaApAQCAtNTMsOCArNTMsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzX2FkZHJfdDsKLQogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgaWQ7CiAJdW5zaWduZWQgbG9uZyB2ZHNvX2Jhc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS04eHguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LTh4eC5oCmluZGV4IDk1MmJkODguLjlkYjg3N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LTh4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LTh4eC5oCkBAIC0xMzYsOCArMTM2LDYgQEAKICNkZWZpbmUgU1BSTl9NX1RXCTc5OQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBoeXNfYWRkcl90OwotCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBpZDsKIAl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LWZzbC1ib29rZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtZnNsLWJvb2tlLmgKaW5kZXggMzc1ODAwMC4uOTI1ZDkzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtZnNsLWJvb2tlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtZnNsLWJvb2tlLmgKQEAgLTczLDEyICs3Myw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpZm5kZWYgQ09ORklHX1BIWVNfNjRCSVQKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHJfdDsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzX2FkZHJfdDsKLSNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBpZDsKIAl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LWhhc2gzMi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtaGFzaDMyLmgKaW5kZXggNGJkNzM1Yi4uNmUyMWNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtaGFzaDMyLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtaGFzaDMyLmgKQEAgLTg0LDggKzg0LDYgQEAKIAl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKIH0gbW1fY29udGV4dF90OwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7Ci0KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTU1VX0hBU0gzMl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtaGFzaDY0LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS1oYXNoNjQuaAppbmRleCAyODY0ZmEzLi4wZGZmNzY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS1oYXNoNjQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS1oYXNoNjQuaApAQCAtNDY5LDkgKzQ2OSw2IEBACiAJCQkJIFZTSURfTU9EVUxVU18yNTZNKQogI2RlZmluZSBLRVJORUxfVlNJRChlYSkJCVZTSURfU0NSQU1CTEUoR0VUX0VTSUQoZWEpKQogCi0vKiBQaHlzaWNhbCBhZGRyZXNzIHVzZWQgYnkgc29tZSBJTyBmdW5jdGlvbnMgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHJfdDsKLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX01NVV9IQVNINjRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKaW5kZXggNzQ4YjM1YS4uZWI2MWI5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKQEAgLTQyLDEwICs0Miw3IEBACiAgKiBEZWZpbmVzIHRoZSBsYXlvdXQgb2YgdGhlIHBhY2EuCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2VkIGJ5IGZpcm13YXJlIG9yIHRoZSBzZXJ2aWNlCi0gKiBwcm9jZXNzb3IgZXhjZXB0IGZvciB0aGUgZmlyc3QgdHdvIHBvaW50ZXJzIHRoYXQgcG9pbnQgdG8gdGhlCi0gKiBscHBhY2EgYXJlYSBhbmQgdGhlIEl0THBSZWdTYXZlIGFyZWEgZm9yIHRoaXMgQ1BVLiAgVGhlIGxwcGFjYQotICogb2JqZWN0IGlzIGN1cnJlbnRseSBjb250YWluZWQgd2l0aGluIHRoZSBQQUNBIGJ1dCBpdCBkb2Vzbid0IG5lZWQKLSAqIHRvIGJlLgorICogcHJvY2Vzc29yLgogICovCiBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgewogCS8qCkBAIC01NSwxNCArNTIsNyBAQAogCSAqIGF2b2lkIGNhY2hlbGluZSBib3VuY2luZy4KIAkgKi8KIAotCS8qCi0JICogTUFHSUM6IFRoZXNlIGZpcnN0IHR3byBwb2ludGVycyBjYW4ndCBiZSBtb3ZlZCAtIHRoZXkncmUKLQkgKiBhY2Nlc3NlZCBieSB0aGUgZmlybXdhcmUKLQkgKi8KIAlzdHJ1Y3QgbHBwYWNhICpscHBhY2FfcHRyOwkvKiBQb2ludGVyIHRvIExwUGFjYSBmb3IgUExJQyAqLwotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCXZvaWQgKnJlZ19zYXZlX3B0cjsgLyogUG9pbnRlciB0byBMcFJlZ1NhdmUgZm9yIFBMSUMgKi8KLSNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KIAogCS8qCiAJICogTUFHSUM6IHRoZSBzcGlubG9jayBmdW5jdGlvbnMgaW4gYXJjaC9wb3dlcnBjL2xpYi9sb2Nrcy5jIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaAppbmRleCBkZjQ3YmJiLi42Yzg1MDYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaApAQCAtNTMsNiArNTMsNyBAQAogCiAjZGVmaW5lIFBBR0VfT0ZGU0VUICAgICBBU01fQ09OU1QoQ09ORklHX0tFUk5FTF9TVEFSVCkKICNkZWZpbmUgS0VSTkVMQkFTRSAgICAgIChQQUdFX09GRlNFVCArIFBIWVNJQ0FMX1NUQVJUKQorI2RlZmluZSBMT0FEX09GRlNFVAlQQUdFX09GRlNFVAogCiAjaWZkZWYgQ09ORklHX0ZMQVRNRU0KICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG1heF9tYXBucikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV8zMi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzMyLmgKaW5kZXggNjVlYTE5ZS4uNTFmODEzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzMyLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzMyLmgKQEAgLTMsOCArMyw2IEBACiAKICNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCVZNX0RBVEFfREVGQVVMVF9GTEFHUzMyCiAKLSNkZWZpbmUgUFBDX01FTVNUQVJUCTAKLQogI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKICNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCUwxX0NBQ0hFX0JZVEVTCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFzZW1pX2RtYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYXNlbWlfZG1hLmgKaW5kZXggYjQ1MjZmZi4uMTlmZDc5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYXNlbWlfZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYXNlbWlfZG1hLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFBBIFNlbWksIEluYworICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggUEEgU2VtaSwgSW5jCiAgKgogICogSGFyZHdhcmUgcmVnaXN0ZXIgbGF5b3V0IGFuZCBkZXNjcmlwdG9yIGZvcm1hdHMgZm9yIHRoZSBvbi1ib2FyZAogICogRE1BIGVuZ2luZSBvbiBQQSBTZW1pIFBXUmZpY2llbnQuIFVzZWQgYnkgZXRoZXJuZXQsIGZ1bmN0aW9uIGFuZCBzZWN1cml0eQpAQCAtNDAsNiArNDAsMTEgQEAKIAlQQVNfRE1BX0NPTV9UWFNUQSA9IDB4MTA0LAkvKiBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgICAqLwogCVBBU19ETUFfQ09NX1JYQ01EID0gMHgxMDgsCS8qIFJlY2VpdmUgQ29tbWFuZCBSZWdpc3RlciAgICovCiAJUEFTX0RNQV9DT01fUlhTVEEgPSAweDEwYywJLyogUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgICAgKi8KKwlQQVNfRE1BX0NPTV9DRkcgICA9IDB4MTE0LAkvKiBDb21tb24gY29uZmlnIHJlZwkgICAgICAqLworCVBBU19ETUFfVFhGX1NGTEcwID0gMHgxNDAsCS8qIFNldCBmbGFncyAgICAgICAgICAgICAgICAgICovCisJUEFTX0RNQV9UWEZfU0ZMRzEgPSAweDE0NCwJLyogU2V0IGZsYWdzICAgICAgICAgICAgICAgICAgKi8KKwlQQVNfRE1BX1RYRl9DRkxHMCA9IDB4MTQ4LAkvKiBTZXQgZmxhZ3MgICAgICAgICAgICAgICAgICAqLworCVBBU19ETUFfVFhGX0NGTEcxID0gMHgxNGMsCS8qIFNldCBmbGFncyAgICAgICAgICAgICAgICAgICovCiB9OwogCiAKQEAgLTEyMywxMSArMTI4LDE2IEBACiAjZGVmaW5lICAgIFBBU19ETUFfVFhDSEFOX1RDTURTVEFfREEJMHgwMDAwMDEwMAogI2RlZmluZSBQQVNfRE1BX1RYQ0hBTl9DRkcoYykgICAgICgweDMwNCsoYykqX1BBU19ETUFfVFhDSEFOX1NUUklERSkKICNkZWZpbmUgICAgUEFTX0RNQV9UWENIQU5fQ0ZHX1RZX0lGQUNFCTB4MDAwMDAwMDAJLyogVHlwZSA9IGludGVyZmFjZSAqLworI2RlZmluZSAgICBQQVNfRE1BX1RYQ0hBTl9DRkdfVFlfQ09QWQkweDAwMDAwMDAxCS8qIFR5cGUgPSBjb3B5IG9ubHkgKi8KKyNkZWZpbmUgICAgUEFTX0RNQV9UWENIQU5fQ0ZHX1RZX0ZVTkMJMHgwMDAwMDAwMgkvKiBUeXBlID0gZnVuY3Rpb24gKi8KKyNkZWZpbmUgICAgUEFTX0RNQV9UWENIQU5fQ0ZHX1RZX1hPUgkweDAwMDAwMDAzCS8qIFR5cGUgPSB4b3Igb25seSAqLwogI2RlZmluZSAgICBQQVNfRE1BX1RYQ0hBTl9DRkdfVEFUVFJfTQkweDAwMDAwMDNjCiAjZGVmaW5lICAgIFBBU19ETUFfVFhDSEFOX0NGR19UQVRUUl9TCTIKICNkZWZpbmUgICAgUEFTX0RNQV9UWENIQU5fQ0ZHX1RBVFRSKHgpCSgoKHgpIDw8IFBBU19ETUFfVFhDSEFOX0NGR19UQVRUUl9TKSAmIFwKIAkJCQkJIFBBU19ETUFfVFhDSEFOX0NGR19UQVRUUl9NKQotI2RlZmluZSAgICBQQVNfRE1BX1RYQ0hBTl9DRkdfV1RfTQkweDAwMDAwMWMwCisjZGVmaW5lICAgIFBBU19ETUFfVFhDSEFOX0NGR19MUERRCTB4MDAwMDA4MDAKKyNkZWZpbmUgICAgUEFTX0RNQV9UWENIQU5fQ0ZHX0xQU1EJMHgwMDAwMDQwMAorI2RlZmluZSAgICBQQVNfRE1BX1RYQ0hBTl9DRkdfV1RfTQkweDAwMDAwM2MwCiAjZGVmaW5lICAgIFBBU19ETUFfVFhDSEFOX0NGR19XVF9TCTYKICNkZWZpbmUgICAgUEFTX0RNQV9UWENIQU5fQ0ZHX1dUKHgpCSgoKHgpIDw8IFBBU19ETUFfVFhDSEFOX0NGR19XVF9TKSAmIFwKIAkJCQkJIFBBU19ETUFfVFhDSEFOX0NGR19XVF9NKQpAQCAtMzk0LDExICs0MDQsNjIgQEAKIAkJCQkgWENUX0NPUFlfTExFTl9NKQogI2RlZmluZSBYQ1RfQ09QWV9TRQkJMHgwMDAwMDAwMDAwMDAwMDAxdWxsCiAKKy8qIEZ1bmN0aW9uIGRlc2NyaXB0b3IgZmllbGRzICovCisjZGVmaW5lIFhDVF9GVU5fVAkJMHg4MDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFhDVF9GVU5fU1QJCTB4NDAwMDAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX1JSX00JCTB4MzAwMDAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX1JSX05PUkVTCTB4MDAwMDAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX1JSXzhCUkVTCTB4MTAwMDAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX1JSXzI0QlJFUwkweDIwMDAwMDAwMDAwMDAwMDB1bGwKKyNkZWZpbmUgWENUX0ZVTl9SUl80MEJSRVMJMHgzMDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFhDVF9GVU5fSQkJMHgwODAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFhDVF9GVU5fTwkJMHgwNDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFhDVF9GVU5fRQkJMHgwMjAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFhDVF9GVU5fRlVOX00JCTB4MDFjMDAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX0ZVTl9TCQk1NAorI2RlZmluZSBYQ1RfRlVOX0ZVTih4KQkJKCgoKGxvbmcpKHgpKSA8PCBYQ1RfRlVOX0ZVTl9TKSAmIFhDVF9GVU5fRlVOX00pCisjZGVmaW5lIFhDVF9GVU5fQ1JNX00JCTB4MDAzODAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX0NSTV9OT1AJCTB4MDAwMDAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX0NSTV9TSUcJCTB4MDAwODAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX0xMRU5fTQkJMHgwMDA3ZmZmZjAwMDAwMDAwdWxsCisjZGVmaW5lIFhDVF9GVU5fTExFTl9TCQkzMgorI2RlZmluZSBYQ1RfRlVOX0xMRU4oeCkJCSgoKChsb25nKSh4KSkgPDwgWENUX0ZVTl9MTEVOX1MpICYgWENUX0ZVTl9MTEVOX00pCisjZGVmaW5lIFhDVF9GVU5fU0hMX00JCTB4MDAwMDAwMDBmODAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX1NITF9TCQkyNworI2RlZmluZSBYQ1RfRlVOX1NITCh4KQkJKCgoKGxvbmcpKHgpKSA8PCBYQ1RfRlVOX1NITF9TKSAmIFhDVF9GVU5fU0hMX00pCisjZGVmaW5lIFhDVF9GVU5fQ0hMX00JCTB4MDAwMDAwMDAwN2MwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX0hTWl9NCQkweDAwMDAwMDAwMDAzYzAwMDB1bGwKKyNkZWZpbmUgWENUX0ZVTl9BTEdfTQkJMHgwMDAwMDAwMDAwMDM4MDAwdWxsCisjZGVmaW5lIFhDVF9GVU5fSFAJCTB4MDAwMDAwMDAwMDAwNDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOX0JDTV9NCQkweDAwMDAwMDAwMDAwMDM4MDB1bGwKKyNkZWZpbmUgWENUX0ZVTl9CQ1BfTQkJMHgwMDAwMDAwMDAwMDAwNjAwdWxsCisjZGVmaW5lIFhDVF9GVU5fU0lHX00JCTB4MDAwMDAwMDAwMDAwMDFmMHVsbAorI2RlZmluZSBYQ1RfRlVOX1NJR19UQ1A0CTB4MDAwMDAwMDAwMDAwMDE0MHVsbAorI2RlZmluZSBYQ1RfRlVOX1NJR19UQ1A2CTB4MDAwMDAwMDAwMDAwMDE1MHVsbAorI2RlZmluZSBYQ1RfRlVOX1NJR19VRFA0CTB4MDAwMDAwMDAwMDAwMDE2MHVsbAorI2RlZmluZSBYQ1RfRlVOX1NJR19VRFA2CTB4MDAwMDAwMDAwMDAwMDE3MHVsbAorI2RlZmluZSBYQ1RfRlVOX0EJCTB4MDAwMDAwMDAwMDAwMDAwOHVsbAorI2RlZmluZSBYQ1RfRlVOX0MJCTB4MDAwMDAwMDAwMDAwMDAwNHVsbAorI2RlZmluZSBYQ1RfRlVOX0FMMgkJMHgwMDAwMDAwMDAwMDAwMDAydWxsCisjZGVmaW5lIFhDVF9GVU5fU0UJCTB4MDAwMDAwMDAwMDAwMDAwMXVsbAorCisvKiBGdW5jdGlvbiBkZXNjcmlwdG9yIDhieXRlIHJlc3VsdCBmaWVsZHMgKi8KKyNkZWZpbmUgWENUX0ZVTlJFU184Ql9DU19NCTB4MDAwMGZmZmYwMDAwMDAwMHVsbAorI2RlZmluZSBYQ1RfRlVOUkVTXzhCX0NTX1MJMzIKKyNkZWZpbmUgWENUX0ZVTlJFU184Ql9DUkNfTQkweDAwMDAwMDAwZmZmZmZmZmZ1bGwKKyNkZWZpbmUgWENUX0ZVTlJFU184Ql9DUkNfUwkwCisKIC8qIENvbnRyb2wgZGVzY3JpcHRvciBmaWVsZHMgKi8KICNkZWZpbmUgQ1RSTF9DTURfVAkJMHg4MDAwMDAwMDAwMDAwMDAwdWxsCiAjZGVmaW5lIENUUkxfQ01EX01FVEFfRVZUCTB4MjAwMDAwMDAwMDAwMDAwMHVsbAogI2RlZmluZSBDVFJMX0NNRF9PCQkweDA0MDAwMDAwMDAwMDAwMDB1bGwKLSNkZWZpbmUgQ1RSTF9DTURfUkVHX00JCTB4MDAwMDAwMDAwMDAwMDAwZnVsbAorI2RlZmluZSBDVFJMX0NNRF9FVFlQRV9NCTB4MDAzODAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBDVFJMX0NNRF9FVFlQRV9FWFQJMHgwMDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIENUUkxfQ01EX0VUWVBFX1dTRVQJMHgwMDIwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIENUUkxfQ01EX0VUWVBFX1dDTFIJMHgwMDI4MDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIENUUkxfQ01EX0VUWVBFX1NFVAkweDAwMzAwMDAwMDAwMDAwMDB1bGwKKyNkZWZpbmUgQ1RSTF9DTURfRVRZUEVfQ0xSCTB4MDAzODAwMDAwMDAwMDAwMHVsbAorI2RlZmluZSBDVFJMX0NNRF9SRUdfTQkJMHgwMDAwMDAwMDAwMDAwMDdmdWxsCiAjZGVmaW5lIENUUkxfQ01EX1JFR19TCQkwCiAjZGVmaW5lIENUUkxfQ01EX1JFRyh4KQkJKCgoKGxvbmcpKHgpKSA8PCBDVFJMX0NNRF9SRUdfUykgJiBcCiAJCQkJIENUUkxfQ01EX1JFR19NKQpAQCAtNDYxLDYgKzUyMiwxNiBAQAogZXh0ZXJuIHZvaWQgcGFzZW1pX2RtYV9mcmVlX2J1ZihzdHJ1Y3QgcGFzZW1pX2RtYWNoYW4gKmNoYW4sIGludCBzaXplLAogCQkJCWRtYV9hZGRyX3QgKmhhbmRsZSk7CiAKKy8qIFJvdXRpbmVzIHRvIGFsbG9jYXRlIGZsYWdzIChldmVudHMpIGZvciBjaGFubmVsIHN5bmNyb25pemF0aW9uICovCitleHRlcm4gaW50ICBwYXNlbWlfZG1hX2FsbG9jX2ZsYWcodm9pZCk7CitleHRlcm4gdm9pZCBwYXNlbWlfZG1hX2ZyZWVfZmxhZyhpbnQgZmxhZyk7CitleHRlcm4gdm9pZCBwYXNlbWlfZG1hX3NldF9mbGFnKGludCBmbGFnKTsKK2V4dGVybiB2b2lkIHBhc2VtaV9kbWFfY2xlYXJfZmxhZyhpbnQgZmxhZyk7CisKKy8qIFJvdXRpbmVzIHRvIGFsbG9jYXRlIGZ1bmN0aW9uIGVuZ2luZXMgKi8KK2V4dGVybiBpbnQgIHBhc2VtaV9kbWFfYWxsb2NfZnVuKHZvaWQpOworZXh0ZXJuIHZvaWQgcGFzZW1pX2RtYV9mcmVlX2Z1bihpbnQgZnVuKTsKKwogLyogSW5pdGlhbGl6ZSB0aGUgbGlicmFyeSwgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgcGFzZW1pX2RtYV9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BjaS1icmlkZ2UuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGNpLWJyaWRnZS5oCmluZGV4IGU1ODAyYzYuLmI5NWQwMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGNpLWJyaWRnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGNpLWJyaWRnZS5oCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogI2lmbmRlZiBDT05GSUdfUFBDNjQKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaV9idXNfdG9faG9zdChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaV9idXNfdG9faG9zdChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXJldHVybiBidXMtPnN5c2RhdGE7CiB9CkBAIC0yMzUsNyArMjM1LDcgQEAKIAogZXh0ZXJuIGludCBwY2liaW9zX3JlbW92ZV9yb290X2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYik7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2lfYnVzX3RvX2hvc3Qoc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2lfYnVzX3RvX2hvc3QoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJ1c2RuID0gYnVzLT5zeXNkYXRhOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZXJjcHUuaAppbmRleCBjY2IwNTIzLi5mODc5MjUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGVyY3B1LmgKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogCiAjZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAocGFjYVtjcHVdLmRhdGFfb2Zmc2V0KQotI2RlZmluZSBfX215X2NwdV9vZmZzZXQgZ2V0X3BhY2EoKS0+ZGF0YV9vZmZzZXQKKyNkZWZpbmUgX19teV9jcHVfb2Zmc2V0IGxvY2FsX3BhY2EtPmRhdGFfb2Zmc2V0CiAjZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0KHgpKQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLXBwYzMyLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtcHBjMzIuaAppbmRleCBkMTMzMmJiLi5kYWVhNzY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtcHBjMzIuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtcHBjMzIuaApAQCAtOTgsOSArOTgsNiBAQAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFIC8gUEdESVJfU0laRSkKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKIAotI2RlZmluZSBVU0VSX1BHRF9QVFJTIChQQUdFX09GRlNFVCA+PiBQR0RJUl9TSElGVCkKLSNkZWZpbmUgS0VSTkVMX1BHRF9QVFJTIChQVFJTX1BFUl9QR0QtVVNFUl9QR0RfUFRSUykKLQogI2RlZmluZSBwdGVfRVJST1IoZSkgXAogCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJWxseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgXAogCQkodW5zaWduZWQgbG9uZyBsb25nKXB0ZV92YWwoZSkpCkBAIC0zMzksMTQgKzMzNiw2IEBACiAjZGVmaW5lIF9QTURfUEFHRV9NQVNLCTB4MDAwYwogI2RlZmluZSBfUE1EX1BBR0VfOE0JMHgwMDBjCiAKLS8qCi0gKiBUaGUgOHh4IFRMQiBtaXNzIGhhbmRsZXIgYWxsZWdlZGx5IHNldHMgX1BBR0VfQUNDRVNTRUQgaW4gdGhlIFBURQotICogZm9yIGFuIGFkZHJlc3MgZXZlbiBpZiBfUEFHRV9QUkVTRU5UIGlzIG5vdCBzZXQsIGFzIGEgcGVyZm9ybWFuY2UKLSAqIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgYSBidWcgaWYgeW91IGV2ZXIgd2FudCB0byB1c2Ugc3dhcCB1bmxlc3MKLSAqIF9QQUdFX0FDQ0VTU0VEIGlzIDIsIHdoaWNoIGl0IGlzbid0LCBvciB1bmxlc3MgeW91IGhhdmUgOHh4LXNwZWNpZmljCi0gKiBkZWZpbml0aW9ucyBmb3IgX19zd3BfZW50cnkgZXRjLiBiZWxvdywgd2hpY2ggd291bGQgYmUgZ3Jvc3MuCi0gKiAgLS0gcGF1bHVzCi0gKi8KICNkZWZpbmUgX1BURV9OT05FX01BU0sgX1BBR0VfQUNDRVNTRUQKIAogI2Vsc2UgLyogQ09ORklHXzZ4eCAqLwpAQCAtNDI4LDcgKzQxNyw4IEBACiAjZGVmaW5lIF9QQUdFX0lPCShfUEFHRV9LRVJORUwgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpCiAjZGVmaW5lIF9QQUdFX1JBTQkoX1BBR0VfS0VSTkVMIHwgX1BBR0VfSFdFWEVDKQogCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgZGVmaW5lZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkKKyNpZiBkZWZpbmVkKENPTkZJR19LR0RCKSB8fCBkZWZpbmVkKENPTkZJR19YTU9OKSB8fCBkZWZpbmVkKENPTkZJR19CRElfU1dJVENIKSB8fFwKKwlkZWZpbmVkKENPTkZJR19LUFJPQkVTKQogLyogV2Ugd2FudCB0aGUgZGVidWdnZXJzIHRvIGJlIGFibGUgdG8gc2V0IGJyZWFrcG9pbnRzIGFueXdoZXJlLCBzbwogICogZG9uJ3Qgd3JpdGUgcHJvdGVjdCB0aGUga2VybmVsIHRleHQgKi8KICNkZWZpbmUgX1BBR0VfUkFNX1RFWFQJX1BBR0VfUkFNCkBAIC03MDAsNyArNjkwLDcgQEAKICNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKQlcCiAJKCh1bnNpZ25lZCBsb25nKSAocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKICNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJXAotCShtZW1fbWFwICsgKF9fcGEocG1kX3ZhbChwbWQpKSA+PiBQQUdFX1NISUZUKSkKKwlwZm5fdG9fcGFnZSgoX19wYShwbWRfdmFsKHBtZCkpID4+IFBBR0VfU0hJRlQpKQogI2VuZGlmCiAKIC8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGh5cF9kdW1wLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BoeXBfZHVtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzRjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BoeXBfZHVtcC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBIeXBlcnZpc29yLWFzc2lzdGVkIGR1bXAKKyAqCisgKiBMaW5hcyBWZXBzdGFzLCBNYW5pc2ggQWh1amEgMjAwOAorICogQ29weXJpZ2h0IDIwMDggSUJNIENvcnAuCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX1BQQzY0X1BIWVBfRFVNUF9ICisjZGVmaW5lIF9QUEM2NF9QSFlQX0RVTVBfSAorCisjaWZkZWYgQ09ORklHX1BIWVBfRFVNUAorCisvKiBUaGUgUk1SIHJlZ2lvbiB3aWxsIGJlIHNhdmVkIGZvciBsYXRlciBkdW1waW5nCisgKiB3aGVuZXZlciB0aGUga2VybmVsIGNyYXNoZXMuIFNldCB0aGlzIHRvIDI1Nk1CLiAqLworI2RlZmluZSBQSFlQX0RVTVBfUk1SX1NUQVJUIDB4MAorI2RlZmluZSBQSFlQX0RVTVBfUk1SX0VORCAgICgxVUw8PDI4KQorCitzdHJ1Y3QgcGh5cF9kdW1wIHsKKwkvKiBNZW1vcnkgdGhhdCBpcyByZXNlcnZlZCBkdXJpbmcgdmVyeSBlYXJseSBib290LiAqLworCXVuc2lnbmVkIGxvbmcgaW5pdF9yZXNlcnZlX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgaW5pdF9yZXNlcnZlX3NpemU7CisJLyogY21kIGxpbmUgb3B0aW9ucyBkdXJpbmcgYm9vdCAqLworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZV9ib290dmFyOworCXVuc2lnbmVkIGxvbmcgcGh5cF9kdW1wX2F0X2Jvb3Q7CisJLyogQ2hlY2sgc3RhdHVzIGR1cmluZyBib290IGlmIGR1bXAgc3VwcG9ydGVkLCBhY3RpdmUgJiBwcmVzZW50Ki8KKwl1bnNpZ25lZCBsb25nIHBoeXBfZHVtcF9jb25maWd1cmVkOworCXVuc2lnbmVkIGxvbmcgcGh5cF9kdW1wX2lzX2FjdGl2ZTsKKwkvKiBzdG9yZSBjcHUgJiBocHRlIHNpemUgKi8KKwl1bnNpZ25lZCBsb25nIGNwdV9zdGF0ZV9zaXplOworCXVuc2lnbmVkIGxvbmcgaHB0ZV9yZWdpb25fc2l6ZTsKKwkvKiBwcmV2aW91cyBzY3JhdGNoIGFyZWEgdmFsdWVzICovCisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9zY3JhdGNoX2FkZHI7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9zY3JhdGNoX3NpemU7Cit9OworCitleHRlcm4gc3RydWN0IHBoeXBfZHVtcCAqcGh5cF9kdW1wX2luZm87CisKK2ludCBlYXJseV9pbml0X2R0X3NjYW5fcGh5cF9kdW1wKHVuc2lnbmVkIGxvbmcgbm9kZSwKKwkJY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSk7CisKKyNlbmRpZiAvKiBDT05GSUdfUEhZUF9EVU1QICovCisjZW5kaWYgLyogX1BQQzY0X1BIWVBfRFVNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtaS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWkuaAppbmRleCAyMjU5ZDRjLi5lMWRjMDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1pLmgKQEAgLTI5LDggKzI5LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KLQogI2RlZmluZSBQTUlfVFlQRV9GUkVRX0NIQU5HRQkweDAxCiAjZGVmaW5lIFBNSV9SRUFEX1RZUEUJCTAKICNkZWZpbmUgUE1JX1JFQURfREFUQTAJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjNHh4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYzR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzAzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYzR4eC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBQUEM0eHggUHJvdG90eXBlcyBhbmQgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fUE9XRVJQQ19QUEM0eHhfSF9fCisjZGVmaW5lIF9fQVNNX1BPV0VSUENfUFBDNHh4X0hfXworCitleHRlcm4gdm9pZCBwcGM0eHhfcmVzZXRfc3lzdGVtKGNoYXIgKmNtZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX1BQQzR4eF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHMzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BzMy5oCmluZGV4IDJiNjkzNjcuLjllOGVkNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHMzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wczMuaApAQCAtNDM0LDggKzQzNCwxMSBAQAogfTsKIAogdm9pZCBwczNfc3lzX21hbmFnZXJfcmVnaXN0ZXJfb3BzKGNvbnN0IHN0cnVjdCBwczNfc3lzX21hbmFnZXJfb3BzICpvcHMpOwotdm9pZCBwczNfc3lzX21hbmFnZXJfcG93ZXJfb2ZmKHZvaWQpOwotdm9pZCBwczNfc3lzX21hbmFnZXJfcmVzdGFydCh2b2lkKTsKK3ZvaWQgX19ub3JldHVybiBwczNfc3lzX21hbmFnZXJfcG93ZXJfb2ZmKHZvaWQpOwordm9pZCBfX25vcmV0dXJuIHBzM19zeXNfbWFuYWdlcl9yZXN0YXJ0KHZvaWQpOwordm9pZCBfX25vcmV0dXJuIHBzM19zeXNfbWFuYWdlcl9oYWx0KHZvaWQpOworaW50IHBzM19zeXNfbWFuYWdlcl9nZXRfd29sKHZvaWQpOwordm9pZCBwczNfc3lzX21hbmFnZXJfc2V0X3dvbChpbnQgc3RhdGUpOwogCiBzdHJ1Y3QgcHMzX3ByZWFsbG9jIHsKICAgICBjb25zdCBjaGFyICpuYW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHRyYWNlLmgKaW5kZXggODkxZDY4OS4uMzkwMjNkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3B0cmFjZS5oCkBAIC01OCw2ICs1OCwxMSBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1BUUkFDRQogCiAjZGVmaW5lIFNUQUNLX0ZSQU1FX09WRVJIRUFECTExMgkvKiBzaXplIG9mIG1pbmltdW0gc3RhY2sgZnJhbWUgKi8KKyNkZWZpbmUgU1RBQ0tfRlJBTUVfTFJfU0FWRQkyCS8qIExvY2F0aW9uIG9mIExSIGluIHN0YWNrIGZyYW1lICovCisjZGVmaW5lIFNUQUNLX0ZSQU1FX1JFR1NfTUFSS0VSCUFTTV9DT05TVCgweDcyNjU2NzczNjg2NTcyNjUpCisjZGVmaW5lIFNUQUNLX0lOVF9GUkFNRV9TSVpFCShzaXplb2Yoc3RydWN0IHB0X3JlZ3MpICsgXAorCQkJCQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIDI4OCkKKyNkZWZpbmUgU1RBQ0tfRlJBTUVfTUFSS0VSCTEyCiAKIC8qIFNpemUgb2YgZHVtbXkgc3RhY2sgZnJhbWUgYWxsb2NhdGVkIHdoZW4gY2FsbGluZyBzaWduYWwgaGFuZGxlci4gKi8KICNkZWZpbmUgX19TSUdOQUxfRlJBTUVTSVpFCTEyOApAQCAtNjYsNiArNzEsMTAgQEAKICNlbHNlIC8qIF9fcG93ZXJwYzY0X18gKi8KIAogI2RlZmluZSBTVEFDS19GUkFNRV9PVkVSSEVBRAkxNgkvKiBzaXplIG9mIG1pbmltdW0gc3RhY2sgZnJhbWUgKi8KKyNkZWZpbmUgU1RBQ0tfRlJBTUVfTFJfU0FWRQkxCS8qIExvY2F0aW9uIG9mIExSIGluIHN0YWNrIGZyYW1lICovCisjZGVmaW5lIFNUQUNLX0ZSQU1FX1JFR1NfTUFSS0VSCUFTTV9DT05TVCgweDcyNjU2NzczKQorI2RlZmluZSBTVEFDS19JTlRfRlJBTUVfU0laRQkoc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSArIFNUQUNLX0ZSQU1FX09WRVJIRUFEKQorI2RlZmluZSBTVEFDS19GUkFNRV9NQVJLRVIJMgogCiAvKiBTaXplIG9mIHN0YWNrIGZyYW1lIGFsbG9jYXRlZCB3aGVuIGNhbGxpbmcgc2lnbmFsIGhhbmRsZXIuICovCiAjZGVmaW5lIF9fU0lHTkFMX0ZSQU1FU0laRQk2NApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9xZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9xZS5oCmluZGV4IDQzMGRjNzcuLmMzYmU2ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcWUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3FlLmgKQEAgLTg1LDYgKzg1LDcgQEAKIC8qIFFFIGludGVybmFsIEFQSSAqLwogaW50IHFlX2lzc3VlX2NtZCh1MzIgY21kLCB1MzIgZGV2aWNlLCB1OCBtY25fcHJvdG9jb2wsIHUzMiBjbWRfaW5wdXQpOwogZW51bSBxZV9jbG9jayBxZV9jbG9ja19zb3VyY2UoY29uc3QgY2hhciAqc291cmNlKTsKK3Vuc2lnbmVkIGludCBxZV9nZXRfYnJnX2Nsayh2b2lkKTsKIGludCBxZV9zZXRicmcoZW51bSBxZV9jbG9jayBicmcsIHVuc2lnbmVkIGludCByYXRlLCB1bnNpZ25lZCBpbnQgbXVsdGlwbGllcik7CiBpbnQgcWVfZ2V0X3NudW0odm9pZCk7CiB2b2lkIHFlX3B1dF9zbnVtKHU4IHNudW0pOwpAQCAtOTIsNyArOTMsMTYgQEAKIGludCBxZV9tdXJhbV9mcmVlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKIHVuc2lnbmVkIGxvbmcgcWVfbXVyYW1fYWxsb2NfZml4ZWQodW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBzaXplKTsKIHZvaWQgcWVfbXVyYW1fZHVtcCh2b2lkKTsKLXZvaWQgKnFlX211cmFtX2FkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcWVfbXVyYW1fYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSZxZV9pbW1yLT5tdXJhbVtvZmZzZXRdOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcWVfbXVyYW1fb2Zmc2V0KHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gYWRkciAtICh2b2lkIF9faW9tZW0gKilxZV9pbW1yLT5tdXJhbTsKK30KIAogLyogU3RydWN0dXJlIHRoYXQgZGVmaW5lcyBRRSBmaXJtd2FyZSBiaW5hcnkgZmlsZXMuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKaW5kZXggMGQ2MjM4OS4uZWRjMGNmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCkBAIC0xNTMsNiArMTUzLDkgQEAKICNkZWZpbmUgICBDVFJMX1JVTkxBVENICTB4MQogI2RlZmluZSBTUFJOX0RBQlIJMHgzRjUJLyogRGF0YSBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICBEQUJSX1RSQU5TTEFUSU9OCSgxVUwgPDwgMikKKyNkZWZpbmUgU1BSTl9EQUJSWAkweDNGNwkvKiBEYXRhIEFkZHJlc3MgQnJlYWtwb2ludCBSZWdpc3RlciBFeHRlbnNpb24gKi8KKyNkZWZpbmUgICBEQUJSWF9VU0VSCSgxVUwgPDwgMCkKKyNkZWZpbmUgICBEQUJSWF9LRVJORUwJKDFVTCA8PCAxKQogI2RlZmluZSBTUFJOX0RBUgkweDAxMwkvKiBEYXRhIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9EU0lTUgkweDAxMgkvKiBEYXRhIFN0b3JhZ2UgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgIERTSVNSX05PSFBURQkJMHg0MDAwMDAwMAkvKiBubyB0cmFuc2xhdGlvbiBmb3VuZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9yd3NlbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yd3NlbS5oCmluZGV4IGNlZmMxNDcuLmE2Y2M5M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcndzZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3J3c2VtLmgKQEAgLTMyLDExICszMiwyMCBAQAogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCXN0cnVjdCBsb2NrZGVwX21hcAlkZXBfbWFwOworI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKSAsIC5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9CisjZWxzZQorIyBkZWZpbmUgX19SV1NFTV9ERVBfTUFQX0lOSVQobG9ja25hbWUpCisjZW5kaWYKKwogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKLQl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIFwKLQkgIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIH0KKwl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkud2FpdF9sb2NrKSwgXAorCSAgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgX19SV1NFTV9ERVBfTUFQX0lOSVQobmFtZSkgfQogCiAjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkJCVwKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCkBAIC00NiwxMiArNTUsMTUgQEAKIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bmdyYWRlX3dha2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGluaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKLQlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7Ci19CitleHRlcm4gdm9pZCBfX2luaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKKworI2RlZmluZSBpbml0X3J3c2VtKHNlbSkJCQkJCVwKKwlkbyB7CQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwlcCisJCQkJCQkJXAorCQlfX2luaXRfcndzZW0oKHNlbSksICNzZW0sICZfX2tleSk7CVwKKwl9IHdoaWxlICgwKQogCiAvKgogICogbG9jayBmb3IgcmVhZGluZwpAQCAtNzgsNyArOTAsNyBAQAogLyoKICAqIGxvY2sgZm9yIHdyaXRpbmcKICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlX25lc3RlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCBzdWJjbGFzcykKIHsKIAlpbnQgdG1wOwogCkBAIC04OCw2ICsxMDAsMTEgQEAKIAkJcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc2VtKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJX19kb3duX3dyaXRlX25lc3RlZChzZW0sIDApOworfQorCiBzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7CiAJaW50IHRtcDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NlbWFwaG9yZS5oCmluZGV4IDQ4ZGQzMmUuLmQ5YjIwMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zZW1hcGhvcmUuaApAQCAtMSw5NCArMSBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfU0VNQVBIT1JFX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX1NFTUFQSE9SRV9ICi0KLS8qCi0gKiBSZW1vdmUgc3BpbmxvY2stYmFzZWQgUlcgc2VtYXBob3JlczsgUlcgc2VtYXBob3JlIGRlZmluaXRpb25zIGFyZQotICogbm93IGluIHJ3c2VtLmggYW5kIHdlIHVzZSB0aGUgZ2VuZXJpYyBsaWIvcndzZW0uYyBpbXBsZW1lbnRhdGlvbi4KLSAqIFJld29yayBzZW1hcGhvcmVzIHRvIHVzZSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlLgotICogLS0gUGF1bCBNYWNrZXJyYXMgKHBhdWx1c0BzYW1iYS5vcmcpCi0gKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KLXN0cnVjdCBzZW1hcGhvcmUgewotCS8qCi0JICogTm90ZSB0aGF0IGFueSBuZWdhdGl2ZSB2YWx1ZSBvZiBjb3VudCBpcyBlcXVpdmFsZW50IHRvIDAsCi0JICogYnV0IGFkZGl0aW9uYWxseSBpbmRpY2F0ZXMgdGhhdCBzb21lIHByb2Nlc3MoZXMpIG1pZ2h0IGJlCi0JICogc2xlZXBpbmcgb24gYHdhaXQnLgotCSAqLwotCWF0b21pY190IGNvdW50OwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgY291bnQpIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQotCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkJCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAwKTsKLX0KLQotZXh0ZXJuIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotZXh0ZXJuIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0KLQkvKgotCSAqIFRyeSB0byBnZXQgdGhlIHNlbWFwaG9yZSwgdGFrZSB0aGUgc2xvdyBwYXRoIGlmIHdlIGZhaWwuCi0JICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApKQotCQlfX2Rvd24oc2VtKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApKQotCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCXJldHVybiBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZzZW0tPmNvdW50KSA8IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWlmICh1bmxpa2VseShhdG9taWNfaW5jX3JldHVybigmc2VtLT5jb3VudCkgPD0gMCkpCi0JCV9fdXAoc2VtKTsKLX0KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19TRU1BUEhPUkVfSCAqLworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BhcnNlbWVtLmgKaW5kZXggZThiNDkzZC4uOWFlYThlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwYXJzZW1lbS5oCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIGV4dGVybiB2b2lkIGNyZWF0ZV9zZWN0aW9uX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIGludCByZW1vdmVfc2VjdGlvbl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCBob3RfYWRkX3Njbl90b19uaWQodW5zaWduZWQgbG9uZyBzY25fYWRkcik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGlubG9jay5oCmluZGV4IGNjNGNmY2UuLjI1OGM5MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwaW5sb2NrLmgKQEAgLTE5LDYgKzE5LDcgQEAKICAqCiAgKiAodGhlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluIGFzbS9zcGlubG9ja190eXBlcy5oKQogICovCisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCmluZGV4IGYwN2M5OWIuLmUzYzg0NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaApAQCAtOTgsOSArOTgsOCBAQAogI2RlZmluZSBNRkNfUFJJVl9BVFROX0VWRU5UICAgICAgICAgICAgICAgICAweDAwMDAwODAwCiAjZGVmaW5lIE1GQ19NVUxUSV9TUkNfRVZFTlQgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKIAotLyogRmxhZ3MgaW5kaWNhdGluZyBwcm9ncmVzcyBkdXJpbmcgY29udGV4dCBzd2l0Y2guICovCisvKiBGbGFnIGluZGljYXRpbmcgcHJvZ3Jlc3MgZHVyaW5nIGNvbnRleHQgc3dpdGNoLiAqLwogI2RlZmluZSBTUFVfQ09OVEVYVF9TV0lUQ0hfUEVORElORwkwVUwKLSNkZWZpbmUgU1BVX0NPTlRFWFRfU1dJVENIX0FDVElWRQkxVUwKIAogc3RydWN0IHNwdV9jb250ZXh0Owogc3RydWN0IHNwdV9ydW5xdWV1ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N0cmluZy5oCmluZGV4IGFhNDBmOTIuLmU0MDAxMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zdHJpbmcuaApAQCAtNyw2ICs3LDcgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNQWQogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4KICNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ01QCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DTVAKICNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0FUCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFkKQEAgLTE4LDYgKzE5LDcgQEAKIGV4dGVybiBjaGFyICogc3RybmNweShjaGFyICosY29uc3QgY2hhciAqLCBfX2tlcm5lbF9zaXplX3QpOwogZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2tlcm5lbF9zaXplX3QpOwogZXh0ZXJuIGNoYXIgKiBzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpOwogZXh0ZXJuIHZvaWQgKiBtZW1jcHkodm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKaW5kZXggMjk1NTJmZi4uZmFiMTY3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCkBAIC01LDYgKzUsNyBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfU1lTVEVNX0gKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAKICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAppbmRleCBjYTIzYjY4Li4xMDBjNmZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCkBAIC05NiwxMSArOTYsMTAgQEAKIHsKIH0KIAorI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgogCi0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8KLQogI2lmZGVmIENPTkZJR19TTVAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNkZWZpbmUgc210X2NhcGFibGUoKQkJKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NNVCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3R5cGVzLmgKaW5kZXggOTAzZmQxOS4uYzI0M2E2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHlwZXMuaApAQCAtODQsNiArODQsMTMgQEAKIAogdHlwZWRlZiBfX3ZlY3RvcjEyOCB2ZWN0b3IxMjg7CiAKKy8qIFBoeXNpY2FsIGFkZHJlc3MgdXNlZCBieSBzb21lIElPIGZ1bmN0aW9ucyAqLworI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19QSFlTXzY0QklUKQordHlwZWRlZiB1NjQgcGh5c19hZGRyX3Q7CisjZWxzZQordHlwZWRlZiB1MzIgcGh5c19hZGRyX3Q7CisjZW5kaWYKKwogI2lmZGVmIF9fcG93ZXJwYzY0X18KIHR5cGVkZWYgdTY0IGRtYV9hZGRyX3Q7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29jcC5oIGIvaW5jbHVkZS9hc20tcHBjL29jcC5oCmluZGV4IDEzNzlhNGYuLjM5MDlhMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9vY3AuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvb2NwLmgKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vb2NwX2lkcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2lmZGVmIENPTkZJR19QUENfT0NQCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCmluZGV4IDY5MzQ3YmQuLjcwNDM1ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaApAQCAtMjk5LDE0ICsyOTksNiBAQAogI2RlZmluZSBfUE1EX1BBR0VfTUFTSwkweDAwMGMKICNkZWZpbmUgX1BNRF9QQUdFXzhNCTB4MDAwYwogCi0vKgotICogVGhlIDh4eCBUTEIgbWlzcyBoYW5kbGVyIGFsbGVnZWRseSBzZXRzIF9QQUdFX0FDQ0VTU0VEIGluIHRoZSBQVEUKLSAqIGZvciBhbiBhZGRyZXNzIGV2ZW4gaWYgX1BBR0VfUFJFU0VOVCBpcyBub3Qgc2V0LCBhcyBhIHBlcmZvcm1hbmNlCi0gKiBvcHRpbWl6YXRpb24uICBUaGlzIGlzIGEgYnVnIGlmIHlvdSBldmVyIHdhbnQgdG8gdXNlIHN3YXAgdW5sZXNzCi0gKiBfUEFHRV9BQ0NFU1NFRCBpcyAyLCB3aGljaCBpdCBpc24ndCwgb3IgdW5sZXNzIHlvdSBoYXZlIDh4eC1zcGVjaWZpYwotICogZGVmaW5pdGlvbnMgZm9yIF9fc3dwX2VudHJ5IGV0Yy4gYmVsb3csIHdoaWNoIHdvdWxkIGJlIGdyb3NzLgotICogIC0tIHBhdWx1cwotICovCiAjZGVmaW5lIF9QVEVfTk9ORV9NQVNLIF9QQUdFX0FDQ0VTU0VECiAKICNlbHNlIC8qIENPTkZJR182eHggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCmluZGV4IGFiODNjODQuLjk2NTM5NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaApAQCAtNDU2LDE2ICs0NTYsMTggQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJYWhpCSUxLDMxXG4iCi0JCSIJc3JsCSUxLDVcbiIKKwkJIglhaGkJJTEsLTFcbiIKKwkJIglzcmEJJTEsNVxuIgorCQkiCWp6CTFmXG4iCiAJCSIwOgljCSUyLDAoJTAsJTMpXG4iCiAJCSIJam5lCTFmXG4iCiAJCSIJbGEJJTAsNCglMClcbiIKIAkJIglicmN0CSUxLDBiXG4iCiAJCSIxOlxuIgogI2Vsc2UKLQkJIglhZ2hpCSUxLDYzXG4iCi0JCSIJc3JsZwklMSwlMSw2XG4iCisJCSIJYWdoaQklMSwtMVxuIgorCQkiCXNyYWcJJTEsJTEsNlxuIgorCQkiCWp6CTFmXG4iCiAJCSIwOgljZwklMiwwKCUwLCUzKVxuIgogCQkiCWpuZQkxZlxuIgogCQkiCWxhCSUwLDgoJTApXG4iCkBAIC00OTEsMTYgKzQ5MywxOCBAQAogCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglhaGkJJTEsMzFcbiIKLQkJIglzcmwJJTEsNVxuIgorCQkiCWFoaQklMSwtMVxuIgorCQkiCXNyYQklMSw1XG4iCisJCSIJanoJMWZcbiIKIAkJIjA6CWMJJTIsMCglMCwlMylcbiIKIAkJIglqbmUJMWZcbiIKIAkJIglsYQklMCw0KCUwKVxuIgogCQkiCWJyY3QJJTEsMGJcbiIKIAkJIjE6XG4iCiAjZWxzZQotCQkiCWFnaGkJJTEsNjNcbiIKLQkJIglzcmxnCSUxLCUxLDZcbiIKKwkJIglhZ2hpCSUxLC0xXG4iCisJCSIJc3JhZwklMSwlMSw2XG4iCisJCSIJanoJMWZcbiIKIAkJIjA6CWNnCSUyLDAoJTAsJTMpXG4iCiAJCSIJam5lCTFmXG4iCiAJCSIJbGEJJTAsOCglMClcbiIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY2lvLmggYi9pbmNsdWRlL2FzbS1zMzkwL2Npby5oCmluZGV4IDEyM2I1NTcuLjA4MThlY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvY2lvLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jaW8uaApAQCAtMzk3LDYgKzM5NywxMCBAQAogCiBleHRlcm4gaW50IGNpb19nZXRfaXBsaW5mbyhzdHJ1Y3QgY2lvX2lwbGluZm8gKmlwbGluZm8pOwogCisvKiBGdW5jdGlvbiBmcm9tIGRyaXZlcnMvczM5MC9jaW8vY2hzYy5jICovCitpbnQgY2hzY19zc3RwYyh2b2lkICpwYWdlLCB1bnNpZ25lZCBpbnQgb3AsIHUxNiBjdHJsKTsKK2ludCBjaHNjX3NzdHBpKHZvaWQgKnBhZ2UsIHZvaWQgKnJlc3VsdCwgc2l6ZV90IHNpemUpOworCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NwdS5oIGIvaW5jbHVkZS9hc20tczM5MC9jcHUuaAppbmRleCAzNTJkZGUxLi5lNWE2YTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY3B1LmgKQEAgLTIyLDQgKzIyLDEyIEBACiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgczM5MF9pZGxlX2RhdGEsIHMzOTBfaWRsZSk7CiAKK3ZvaWQgczM5MF9pZGxlX2xlYXZlKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgczM5MF9pZGxlX2NoZWNrKHZvaWQpCit7CisJaWYgKCgmX19nZXRfY3B1X3ZhcihzMzkwX2lkbGUpKS0+aW5faWRsZSkKKwkJczM5MF9pZGxlX2xlYXZlKCk7Cit9CisKICNlbmRpZiAvKiBfQVNNX1MzOTBfQ1BVX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmggYi9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKaW5kZXggYzAwZGQyYi4uMzM1YmFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaApAQCAtNzMsNiArNzMsNyBAQAogCXN0cnVjdCBkZW50cnkqIGRlYnVnZnNfZW50cmllc1tERUJVR19NQVhfVklFV1NdOwogCXN0cnVjdCBkZWJ1Z192aWV3KiB2aWV3c1tERUJVR19NQVhfVklFV1NdOwkKIAljaGFyIG5hbWVbREVCVUdfTUFYX05BTUVfTEVOXTsKKwltb2RlX3QgbW9kZTsKIH0gZGVidWdfaW5mb190OwogCiB0eXBlZGVmIGludCAoZGVidWdfaGVhZGVyX3Byb2NfdCkgKGRlYnVnX2luZm9fdCogaWQsCkBAIC0xMjIsNiArMTIzLDEwIEBACiBkZWJ1Z19pbmZvX3QqIGRlYnVnX3JlZ2lzdGVyKGNoYXIqIG5hbWUsIGludCBwYWdlcywgaW50IG5yX2FyZWFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX3NpemUpOwogCitkZWJ1Z19pbmZvX3QgKmRlYnVnX3JlZ2lzdGVyX21vZGUoY2hhciAqbmFtZSwgaW50IHBhZ2VzLCBpbnQgbnJfYXJlYXMsCisJCQkJICBpbnQgYnVmX3NpemUsIG1vZGVfdCBtb2RlLCB1aWRfdCB1aWQsCisJCQkJICBnaWRfdCBnaWQpOworCiB2b2lkIGRlYnVnX3VucmVnaXN0ZXIoZGVidWdfaW5mb190KiBpZCk7CiAKIHZvaWQgZGVidWdfc2V0X2xldmVsKGRlYnVnX2luZm9fdCogaWQsIGludCBuZXdfbGV2ZWwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9leHRtZW0uaCBiL2luY2x1ZGUvYXNtLXMzOTAvZXh0bWVtLmgKaW5kZXggYzg4MDJjOS4uMzM4MzdkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9leHRtZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2V4dG1lbS5oCkBAIC0yMiwxMSArMjIsMTIgQEAKICNkZWZpbmUgU0VHTUVOVF9TSEFSRUQgMAogI2RlZmluZSBTRUdNRU5UX0VYQ0xVU0lWRSAxCiAKLWV4dGVybiBpbnQgc2VnbWVudF9sb2FkIChjaGFyICpuYW1lLGludCBzZWd0eXBlLHVuc2lnbmVkIGxvbmcgKmFkZHIsdW5zaWduZWQgbG9uZyAqbGVuZ3RoKTsKLWV4dGVybiB2b2lkIHNlZ21lbnRfdW5sb2FkKGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgc2VnbWVudF9zYXZlKGNoYXIgKm5hbWUpOwotZXh0ZXJuIGludCBzZWdtZW50X3R5cGUgKGNoYXIqIG5hbWUpOwotZXh0ZXJuIGludCBzZWdtZW50X21vZGlmeV9zaGFyZWQgKGNoYXIgKm5hbWUsIGludCBkb19ub25zaGFyZWQpOworaW50IHNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IHNlZ3R5cGUsIHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgKmxlbmd0aCk7Cit2b2lkIHNlZ21lbnRfdW5sb2FkKGNoYXIgKm5hbWUpOwordm9pZCBzZWdtZW50X3NhdmUoY2hhciAqbmFtZSk7CitpbnQgc2VnbWVudF90eXBlIChjaGFyKiBuYW1lKTsKK2ludCBzZWdtZW50X21vZGlmeV9zaGFyZWQgKGNoYXIgKm5hbWUsIGludCBkb19ub25zaGFyZWQpOwordm9pZCBzZWdtZW50X3dhcm5pbmcoaW50IHJjLCBjaGFyICpzZWdfbmFtZSk7CiAKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oCmluZGV4IDMxYmViMTguLjRiN2NiOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oCkBAIC0zMiw2ICszMiw2IEBACiAKICNkZWZpbmUgSEFSRElSUV9CSVRTCTgKIAotZXh0ZXJuIHZvaWQgYWNjb3VudF90aWNrcyh1NjQgdGltZSk7Cit2b2lkIGNsb2NrX2NvbXBhcmF0b3Jfd29yayh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVNNX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2twcm9iZXMuaAppbmRleCA5NDhkYjNkLi4zMzBmNjhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2twcm9iZXMuaApAQCAtNDYsNyArNDYsNiBAQAogCT8gKE1BWF9TVEFDS19TSVpFKSBcCiAJOiAoKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgKyBUSFJFQURfU0laRSAtIChBRERSKSkpCiAKLSNkZWZpbmUgQVJDSF9TVVBQT1JUU19LUkVUUFJPQkVTCiAjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZSAwCiAKICNkZWZpbmUgS1BST0JFX1NXQVBfSU5TVAkweDEwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2t2bS5oIGIvaW5jbHVkZS9hc20tczM5MC9rdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzNmMmEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fUzM5MF9ICisjZGVmaW5lIF9fTElOVVhfS1ZNX1MzOTBfSAorCisvKiBzMzkwIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAppbmRleCA4MDFhNmZkLi41ZGUzZWZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaApAQCAtNTYsNiArNTYsOCBAQAogI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JEICAgICAgICAgICAgICAgIDB4MEMwCiAjZGVmaW5lIF9fTENfTUNDS19DT0RFICAgICAgICAgICAgICAgICAgMHgwRTgKIAorI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsgCQkweDExMAorCiAjZGVmaW5lIF9fTENfUkVUVVJOX1BTVyAgICAgICAgICAgICAgICAgMHgyMDAKIAogI2RlZmluZSBfX0xDX1NBVkVfQVJFQSAgICAgICAgICAgICAgICAgIDB4QzAwCkBAIC04MCw3ICs4Miw2IEBACiAjZGVmaW5lIF9fTENfQ1BVSUQgICAgICAgICAgICAgICAgICAgICAgMHhDNjAKICNkZWZpbmUgX19MQ19DUFVBRERSICAgICAgICAgICAgICAgICAgICAweEM2OAogI2RlZmluZSBfX0xDX0lQTERFViAgICAgICAgICAgICAgICAgICAgIDB4QzdDCi0jZGVmaW5lIF9fTENfSklGRllfVElNRVIJCTB4QzgwCiAjZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4QzkwCiAjZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHhDOTgKICNlbHNlIC8qIF9fczM5MHhfXyAqLwpAQCAtMTAzLDcgKzEwNCw2IEBACiAjZGVmaW5lIF9fTENfQ1BVSUQJCQkweEQ4MAogI2RlZmluZSBfX0xDX0NQVUFERFIJCQkweEQ4OAogI2RlZmluZSBfX0xDX0lQTERFViAgICAgICAgICAgICAgICAgICAgIDB4REI4Ci0jZGVmaW5lIF9fTENfSklGRllfVElNRVIJCTB4REMwCiAjZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4REQ4CiAjZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHhERTgKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KQEAgLTI3Niw3ICsyNzYsNyBAQAogCS8qIGVudHJ5LlMgc2Vuc2l0aXZlIGFyZWEgZW5kICovCiAKICAgICAgICAgLyogU01QIGluZm8gYXJlYTogZGVmaW5lZCBieSBESkIgKi8KLSAgICAgICAgX191NjQgICAgICAgIGppZmZ5X3RpbWVyOyAgICAgICAgICAgICAgLyogMHhjODAgKi8KKwlfX3U2NAkgICAgIGNsb2NrX2NvbXBhcmF0b3I7CSAgICAgICAvKiAweGM4MCAqLwogCV9fdTMyICAgICAgICBleHRfY2FsbF9mYXN0OyAgICAgICAgICAgIC8qIDB4Yzg4ICovCiAJX191MzIgICAgICAgIHBlcmNwdV9vZmZzZXQ7ICAgICAgICAgICAgLyogMHhjOGMgKi8KIAlfX3UzMiAgICAgICAgY3VycmVudF90YXNrOwkgICAgICAgLyogMHhjOTAgKi8KQEAgLTM2OCwxMSArMzY4LDEyIEBACiAJLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KIAogICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLwotICAgICAgICBfX3U2NCAgICAgICAgamlmZnlfdGltZXI7ICAgICAgICAgICAgICAvKiAweGRjMCAqLworCV9fdTY0CSAgICAgY2xvY2tfY29tcGFyYXRvcjsJICAgICAgIC8qIDB4ZGMwICovCiAJX191NjQgICAgICAgIGV4dF9jYWxsX2Zhc3Q7ICAgICAgICAgICAgLyogMHhkYzggKi8KIAlfX3U2NCAgICAgICAgcGVyY3B1X29mZnNldDsgICAgICAgICAgICAvKiAweGRkMCAqLwogCV9fdTY0ICAgICAgICBjdXJyZW50X3Rhc2s7CSAgICAgICAvKiAweGRkOCAqLwotCV9fdTY0ICAgICAgICBzb2Z0aXJxX3BlbmRpbmc7CSAgICAgICAvKiAweGRlMCAqLworCV9fdTMyCSAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhkZTAgKi8KKwlfX3UzMgkgICAgIHBhZF8weDBkZTQ7CSAgICAgICAvKiAweGRlNCAqLwogCV9fdTY0ICAgICAgICBpbnRfY2xvY2s7ICAgICAgICAgICAgICAgIC8qIDB4ZGU4ICovCiAgICAgICAgIF9fdTggICAgICAgICBwYWQxMlsweGUwMC0weGRmMF07ICAgICAgIC8qIDB4ZGYwICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCmluZGV4IDUxZDg4OTEuLjhlYWYzNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaApAQCAtMTc1LDYgKzE3NSwxMyBAQAogZXh0ZXJuIHZvaWQgc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgc2hvd19jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCk7CisjaWZkZWYgQ09ORklHXzY0QklUCitleHRlcm4gdm9pZCBzaG93X2xhc3RfYnJlYWtpbmdfZXZlbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG93X2xhc3RfYnJlYWtpbmdfZXZlbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7Cit9CisjZW5kaWYKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKICNkZWZpbmUgdGFza19wdF9yZWdzKHRzaykgKChzdHJ1Y3QgcHRfcmVncyAqKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tczM5MC9zZW1hcGhvcmUuaAppbmRleCAwZTcwMDFhLi5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2VtYXBob3JlLmgKQEAgLTEsMTA3ICsxIEBACi0vKgotICogIGluY2x1ZGUvYXNtLXMzOTAvc2VtYXBob3JlLmgKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqICBEZXJpdmVkIGZyb20gImluY2x1ZGUvYXNtLWkzODYvc2VtYXBob3JlLmgiCi0gKiAgICAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqLwotCi0jaWZuZGVmIF9TMzkwX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9TMzkwX1NFTUFQSE9SRV9ICi0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotCi1zdHJ1Y3Qgc2VtYXBob3JlIHsKLQkvKgotCSAqIE5vdGUgdGhhdCBhbnkgbmVnYXRpdmUgdmFsdWUgb2YgY291bnQgaXMgZXF1aXZhbGVudCB0byAwLAotCSAqIGJ1dCBhZGRpdGlvbmFsbHkgaW5kaWNhdGVzIHRoYXQgc29tZSBwcm9jZXNzKGVzKSBtaWdodCBiZQotCSAqIHNsZWVwaW5nIG9uIGB3YWl0Jy4KLQkgKi8KLQlhdG9taWNfdCBjb3VudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwotfTsKLQotI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KSBcCi0JeyBBVE9NSUNfSU5JVChjb3VudCksIF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KSB9Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQotCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQotewotCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQltaWdodF9zbGVlcCgpOwotCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQotCQlfX2Rvd24oc2VtKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltaWdodF9zbGVlcCgpOwotCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VtLT5jb3VudCkgPCAwKQotCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCBvbGRfdmFsLCBuZXdfdmFsOwotCi0JLyoKLQkgKiBUaGlzIGlubGluZSBhc3NlbWJseSBhdG9taWNhbGx5IGltcGxlbWVudHMgdGhlIGVxdWl2YWxlbnQKLQkgKiB0byB0aGUgZm9sbG93aW5nIEMgY29kZToKLQkgKiAgIG9sZF92YWwgPSBzZW0tPmNvdW50LmNvdW50ZXI7Ci0JICogICBpZiAoKG5ld192YWwgPSBvbGRfdmFsKSA+IDApCi0JICogICAgICAgc2VtLT5jb3VudC5jb3VudGVyID0gLS1uZXdfdmFsOwotCSAqIEluIHRoZSBwcGMgY29kZSB0aGlzIGlzIGNhbGxlZCBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlLgotCSAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIglsCSUwLDAoJTMpXG4iCi0JCSIwOglsdHIJJTEsJTBcbiIKLQkJIglqbGUJMWZcbiIKLQkJIglhaGkJJTEsLTFcbiIKLQkJIgljcwklMCwlMSwwKCUzKVxuIgotCQkiCWpsCTBiXG4iCi0JCSIxOiIKLQkJOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwgIj1tIiAoc2VtLT5jb3VudC5jb3VudGVyKQotCQk6ICJhIiAoJnNlbS0+Y291bnQuY291bnRlciksICJtIiAoc2VtLT5jb3VudC5jb3VudGVyKQotCQk6ICJjYyIsICJtZW1vcnkiKTsKLQlyZXR1cm4gb2xkX3ZhbCA8PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlbS0+Y291bnQpIDw9IDApCi0JCV9fdXAoc2VtKTsKLX0KLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaAppbmRleCBjN2I3NDMyLi42ZjM4MjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKQEAgLTkwLDYgKzkwLDkgQEAKIGV4dGVybiB2b2lkIGNwdV9kaWUgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwogZXh0ZXJuIGludCBfX2NwdV91cCAodW5zaWduZWQgaW50IGNwdSk7CiAKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggc21wX2NwdV9zdGF0ZV9tdXRleDsKK2V4dGVybiBpbnQgc21wX2NwdV9wb2xhcml6YXRpb25bXTsKKwogZXh0ZXJuIGludCBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdW1hc2tfdCBtYXNrLCB2b2lkICgqZnVuYykodm9pZCAqKSwKIAl2b2lkICppbmZvLCBpbnQgd2FpdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc3lzaW5mby5oIGIvaW5jbHVkZS9hc20tczM5MC9zeXNpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlMTBhZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3lzaW5mby5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogZGVmaW5pdGlvbiBmb3Igc3RvcmUgc3lzdGVtIGluZm9ybWF0aW9uIHN0c2kKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsMjAwOAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIgb25seSkKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAgIEF1dGhvcihzKTogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAZGUuaWJtLmNvbT4KKyAqCQkgQ2hyaXN0aWFuIEJvcm50cmFlZ2VyIDxib3JudHJhZWdlckBkZS5pYm0uY29tPgorICovCisKK3N0cnVjdCBzeXNpbmZvXzFfMV8xIHsKKwljaGFyIHJlc2VydmVkXzBbMzJdOworCWNoYXIgbWFudWZhY3R1cmVyWzE2XTsKKwljaGFyIHR5cGVbNF07CisJY2hhciByZXNlcnZlZF8xWzEyXTsKKwljaGFyIG1vZGVsX2NhcGFjaXR5WzE2XTsKKwljaGFyIHNlcXVlbmNlWzE2XTsKKwljaGFyIHBsYW50WzRdOworCWNoYXIgbW9kZWxbMTZdOworCWNoYXIgbW9kZWxfcGVybV9jYXBbMTZdOworCWNoYXIgbW9kZWxfdGVtcF9jYXBbMTZdOworCWNoYXIgbW9kZWxfY2FwX3JhdGluZ1s0XTsKKwljaGFyIG1vZGVsX3Blcm1fY2FwX3JhdGluZ1s0XTsKKwljaGFyIG1vZGVsX3RlbXBfY2FwX3JhdGluZ1s0XTsKK307CisKK3N0cnVjdCBzeXNpbmZvXzFfMl8xIHsKKwljaGFyIHJlc2VydmVkXzBbODBdOworCWNoYXIgc2VxdWVuY2VbMTZdOworCWNoYXIgcGxhbnRbNF07CisJY2hhciByZXNlcnZlZF8xWzJdOworCXVuc2lnbmVkIHNob3J0IGNwdV9hZGRyZXNzOworfTsKKworc3RydWN0IHN5c2luZm9fMV8yXzIgeworCWNoYXIgZm9ybWF0OworCWNoYXIgcmVzZXJ2ZWRfMFsxXTsKKwl1bnNpZ25lZCBzaG9ydCBhY2Nfb2Zmc2V0OworCWNoYXIgcmVzZXJ2ZWRfMVsyNF07CisJdW5zaWduZWQgaW50IHNlY29uZGFyeV9jYXBhYmlsaXR5OworCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OworCXVuc2lnbmVkIHNob3J0IGNwdXNfdG90YWw7CisJdW5zaWduZWQgc2hvcnQgY3B1c19jb25maWd1cmVkOworCXVuc2lnbmVkIHNob3J0IGNwdXNfc3RhbmRieTsKKwl1bnNpZ25lZCBzaG9ydCBjcHVzX3Jlc2VydmVkOworCXVuc2lnbmVkIHNob3J0IGFkanVzdG1lbnRbMF07Cit9OworCitzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24geworCXVuc2lnbmVkIGludCBhbHRfY2FwYWJpbGl0eTsKKwl1bnNpZ25lZCBzaG9ydCBhbHRfYWRqdXN0bWVudFswXTsKK307CisKK3N0cnVjdCBzeXNpbmZvXzJfMl8xIHsKKwljaGFyIHJlc2VydmVkXzBbODBdOworCWNoYXIgc2VxdWVuY2VbMTZdOworCWNoYXIgcGxhbnRbNF07CisJdW5zaWduZWQgc2hvcnQgY3B1X2lkOworCXVuc2lnbmVkIHNob3J0IGNwdV9hZGRyZXNzOworfTsKKworc3RydWN0IHN5c2luZm9fMl8yXzIgeworCWNoYXIgcmVzZXJ2ZWRfMFszMl07CisJdW5zaWduZWQgc2hvcnQgbHBhcl9udW1iZXI7CisJY2hhciByZXNlcnZlZF8xOworCXVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyaXN0aWNzOworCXVuc2lnbmVkIHNob3J0IGNwdXNfdG90YWw7CisJdW5zaWduZWQgc2hvcnQgY3B1c19jb25maWd1cmVkOworCXVuc2lnbmVkIHNob3J0IGNwdXNfc3RhbmRieTsKKwl1bnNpZ25lZCBzaG9ydCBjcHVzX3Jlc2VydmVkOworCWNoYXIgbmFtZVs4XTsKKwl1bnNpZ25lZCBpbnQgY2FmOworCWNoYXIgcmVzZXJ2ZWRfMlsxNl07CisJdW5zaWduZWQgc2hvcnQgY3B1c19kZWRpY2F0ZWQ7CisJdW5zaWduZWQgc2hvcnQgY3B1c19zaGFyZWQ7Cit9OworCisjZGVmaW5lIExQQVJfQ0hBUl9ERURJQ0FURUQJKDEgPDwgNykKKyNkZWZpbmUgTFBBUl9DSEFSX1NIQVJFRAkoMSA8PCA2KQorI2RlZmluZSBMUEFSX0NIQVJfTElNSVRFRAkoMSA8PCA1KQorCitzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB7CisJY2hhciByZXNlcnZlZF8wWzMxXTsKKwl1bnNpZ25lZCBjaGFyIGNvdW50OworCXN0cnVjdCB7CisJCWNoYXIgcmVzZXJ2ZWRfMFs0XTsKKwkJdW5zaWduZWQgc2hvcnQgY3B1c190b3RhbDsKKwkJdW5zaWduZWQgc2hvcnQgY3B1c19jb25maWd1cmVkOworCQl1bnNpZ25lZCBzaG9ydCBjcHVzX3N0YW5kYnk7CisJCXVuc2lnbmVkIHNob3J0IGNwdXNfcmVzZXJ2ZWQ7CisJCWNoYXIgbmFtZVs4XTsKKwkJdW5zaWduZWQgaW50IGNhZjsKKwkJY2hhciBjcGlbMTZdOworCQljaGFyIHJlc2VydmVkXzFbMjRdOworCisJfSB2bVs4XTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0c2kodm9pZCAqc3lzaW5mbywgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCit7CisJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gKGZjIDw8IDI4KSB8IHNlbDE7CisJcmVnaXN0ZXIgaW50IHIxIGFzbSgiMSIpID0gc2VsMjsKKworCWFzbSB2b2xhdGlsZSgKKwkJIiAgIHN0c2kgMCglMilcbiIKKwkJIjA6IGp6ICAgMmZcbiIKKwkJIjE6IGxoaSAgJTAsJTNcbiIKKwkJIjI6XG4iCisJCUVYX1RBQkxFKDBiLCAxYikKKwkJOiAiK2QiIChyMCkgOiAiZCIgKHIxKSwgImEiIChzeXNpbmZvKSwgIksiICgtRU5PU1lTKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gcjA7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaAppbmRleCAxNWFiYTMwLi45MjA5OGRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKQEAgLTQwNiw2ICs0MDYsOCBAQAogI2RlZmluZSBsb2NhbF9tY2NrX2VuYWJsZSgpICBfX3NldF9wc3dfbWFzayhwc3dfa2VybmVsX2JpdHMpCiAjZGVmaW5lIGxvY2FsX21jY2tfZGlzYWJsZSgpIF9fc2V0X3Bzd19tYXNrKHBzd19rZXJuZWxfYml0cyAmIH5QU1dfTUFTS19NQ0hFQ0spCiAKK2ludCBzdGZsZSh1bnNpZ25lZCBsb25nIGxvbmcgKmxpc3QsIGludCBkb3VibGV3b3Jkcyk7CisKICNpZmRlZiBDT05GSUdfU01QCiAKIGV4dGVybiB2b2lkIHNtcF9jdGxfc2V0X2JpdChpbnQgY3IsIGludCBiaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90aW1leC5oIGIvaW5jbHVkZS9hc20tczM5MC90aW1leC5oCmluZGV4IDk4MjI5ZGIuLmQ3NDRjM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3RpbWV4LmgKQEAgLTYyLDE2ICs2MiwxOCBAQAogCXJldHVybiBjbGs7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY2xvY2tfZXh0ZW5kZWQodm9pZCAqZGVzdCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGdldF9jbG9ja194dCh2b2lkKQogewotCXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIGNsa1syXTsgfSBfX2Nsb2NrX3Q7CisJdW5zaWduZWQgY2hhciBjbGtbMTZdOwogCiAjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLQlhc20gdm9sYXRpbGUoInN0Y2tlICUwIiA6ICI9USIgKCooKF9fY2xvY2tfdCAqKWRlc3QpKSA6IDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJzdGNrZSAlMCIgOiAiPVEiIChjbGspIDogOiAiY2MiKTsKICNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKCJzdGNrZSAwKCUxKSIgOiAiPW0iICgqKChfX2Nsb2NrX3QgKilkZXN0KSkKLQkJCQkgICA6ICJhIiAoKF9fY2xvY2tfdCAqKWRlc3QpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJzdGNrZSAwKCUxKSIgOiAiPW0iIChjbGspCisJCQkJICAgOiAiYSIgKGNsaykgOiAiY2MiKTsKICNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisJcmV0dXJuICooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZjbGtbMV0pOwogfQogCiBzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZCkKQEAgLTgxLDUgKzgzLDYgQEAKIAogaW50IGdldF9zeW5jX2Nsb2NrKHVuc2lnbmVkIGxvbmcgbG9uZyAqY2xvY2spOwogdm9pZCBpbml0X2NwdV90aW1lcih2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBtb25vdG9uaWNfY2xvY2sodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oCmluZGV4IDM1ZmI0ZjkuLjllNTdhOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmgKQEAgLTEzLDEyICsxMywxNCBAQAogCWFzbSB2b2xhdGlsZSgicHRsYiIgOiA6IDogIm1lbW9yeSIpOwogfQogCisjaWZkZWYgQ09ORklHX1NNUAogLyoKICAqIEZsdXNoIGFsbCB0bGIgZW50cmllcyBvbiBhbGwgY3B1cy4KICAqLwordm9pZCBzbXBfcHRsYl9hbGwodm9pZCk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9mbHVzaF9nbG9iYWwodm9pZCkKIHsKLQlleHRlcm4gdm9pZCBzbXBfcHRsYl9hbGwodm9pZCk7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcyIGFzbSgiMiIpOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMyBhc20oIjMiKTsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzQgYXNtKCI0Iik7CkBAIC0zOSw2ICs0MSwyNSBAQAogCQk6IDogImQiIChyZWcyKSwgImQiIChyZWczKSwgImQiIChyZWc0KSwgIm0iIChkdW1teSkgOiAiY2MiICk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9mbHVzaF9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWNwdW1hc2tfdCBsb2NhbF9jcHVtYXNrOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJLyoKKwkgKiBJZiB0aGUgcHJvY2VzcyBvbmx5IHJhbiBvbiB0aGUgbG9jYWwgY3B1LCBkbyBhIGxvY2FsIGZsdXNoLgorCSAqLworCWxvY2FsX2NwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChjcHVzX2VxdWFsKG1tLT5jcHVfdm1fbWFzaywgbG9jYWxfY3B1bWFzaykpCisJCV9fdGxiX2ZsdXNoX2xvY2FsKCk7CisJZWxzZQorCQlfX3RsYl9mbHVzaF9nbG9iYWwoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorI2Vsc2UKKyNkZWZpbmUgX190bGJfZmx1c2hfZnVsbChtbSkJX190bGJfZmx1c2hfbG9jYWwoKQorI2VuZGlmCisKIC8qCiAgKiBGbHVzaCBhbGwgdGxiIGVudHJpZXMgb2YgYSBwYWdlIHRhYmxlIG9uIGFsbCBjcHVzLgogICovCkBAIC01MSw4ICs3Miw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9mbHVzaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCiB7Ci0JY3B1bWFza190IGxvY2FsX2NwdW1hc2s7Ci0KIAlpZiAodW5saWtlbHkoY3B1c19lbXB0eShtbS0+Y3B1X3ZtX21hc2spKSkKIAkJcmV0dXJuOwogCS8qCkBAIC02OSwxNiArODgsNyBAQAogCQkJCSBtbS0+Y29udGV4dC5hc2NlX2JpdHMpOwogCQlyZXR1cm47CiAJfQotCXByZWVtcHRfZGlzYWJsZSgpOwotCS8qCi0JICogSWYgdGhlIHByb2Nlc3Mgb25seSByYW4gb24gdGhlIGxvY2FsIGNwdSwgZG8gYSBsb2NhbCBmbHVzaC4KLQkgKi8KLQlsb2NhbF9jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIGxvY2FsX2NwdW1hc2spKQotCQlfX3RsYl9mbHVzaF9sb2NhbCgpOwotCWVsc2UKLQkJX190bGJfZmx1c2hfZ2xvYmFsKCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlfX3RsYl9mbHVzaF9mdWxsKG1tKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2ZsdXNoX21tX2NvbmQoc3RydWN0IG1tX3N0cnVjdCAqIG1tKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tczM5MC90b3BvbG9neS5oCmluZGV4IDYxM2FhNjQuLjhlOTdiMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3RvcG9sb2d5LmgKQEAgLTEsNiArMSwyOSBAQAogI2lmbmRlZiBfQVNNX1MzOTBfVE9QT0xPR1lfSAogI2RlZmluZSBfQVNNX1MzOTBfVE9QT0xPR1lfSAogCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCisjZGVmaW5lIG1jX2NhcGFibGUoKQkoMSkKKworY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKHVuc2lnbmVkIGludCBjcHUpOworCitpbnQgdG9wb2xvZ3lfc2V0X2NwdV9tYW5hZ2VtZW50KGludCBmYyk7Cit2b2lkIHRvcG9sb2d5X3NjaGVkdWxlX3VwZGF0ZSh2b2lkKTsKKworI2RlZmluZSBQT0xBUklaQVRJT05fVU5LTldOCSgtMSkKKyNkZWZpbmUgUE9MQVJJWkFUSU9OX0hSWgkoMCkKKyNkZWZpbmUgUE9MQVJJWkFUSU9OX1ZMCQkoMSkKKyNkZWZpbmUgUE9MQVJJWkFUSU9OX1ZNCQkoMikKKyNkZWZpbmUgUE9MQVJJWkFUSU9OX1ZICQkoMykKKworI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgczM5MF9pbml0X2NwdV90b3BvbG9neSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgczM5MF9pbml0X2NwdV90b3BvbG9neSh2b2lkKQoreworfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KIAogI2VuZGlmIC8qIF9BU01fUzM5MF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9idWdzLmggYi9pbmNsdWRlL2FzbS1zaC9idWdzLmgKaW5kZXggY2ZkYTdkNS4uMTIxYjJlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1Z3MuaApAQCAtMjUsNyArMjUsNyBAQAogCWNhc2UgQ1BVX1NINzYxOToKIAkJKnArKyA9ICcyJzsKIAkJYnJlYWs7Ci0JY2FzZSBDUFVfU0g3MjAzIC4uLiBDUFVfU0g3MjYzOgorCWNhc2UgQ1BVX1NINzIwMyAuLi4gQ1BVX01YRzoKIAkJKnArKyA9ICcyJzsKIAkJKnArKyA9ICdhJzsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oCmluZGV4IDBlYjk5MDQuLjRjMTNlNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oCkBAIC0xMSwxMyArMTEsMTMgQEAKIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKIHsKIAlfX2FzbV9fKAotI2lmZGVmIENPTkZJR19TVVBFUkgzMgorI2lmZGVmIF9fU0g1X18KKwkJImJ5dGVyZXYJJTAsICUwXG5cdCIKKwkJInNoYXJpCQklMCwgMzIsICUwIgorI2Vsc2UKIAkJInN3YXAuYgkJJTAsICUwXG5cdCIKIAkJInN3YXAudwkJJTAsICUwXG5cdCIKIAkJInN3YXAuYgkJJTAsICUwIgotI2Vsc2UKLQkJImJ5dGVyZXYJJTAsICUwXG5cdCIKLQkJInNoYXJpCQklMCwgMzIsICUwIgogI2VuZGlmCiAJCTogIj1yIiAoeCkKIAkJOiAiMCIgKHgpKTsKQEAgLTI4LDEyICsyOCwxMSBAQAogc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTE2IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQogewogCV9fYXNtX18oCi0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCi0JCSJzd2FwLmIJCSUwLCAlMCIKLSNlbHNlCisjaWZkZWYgX19TSDVfXwogCQkiYnl0ZXJldgklMCwgJTBcblx0IgogCQkic2hhcmkJCSUwLCAzMiwgJTAiCi0KKyNlbHNlCisJCSJzd2FwLmIJCSUwLCAlMCIKICNlbmRpZgogCQk6ICI9ciIgKHgpCiAJCTogICIwIiAoeCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZS5oCmluZGV4IDU2YmQ4MzguLmJlZTJkODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2NhY2hlLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCi0jZGVmaW5lIENDUjMJMHhhNDAwMDBiNAorI2RlZmluZSBDQ1IzX1JFRwkweGE0MDAwMGI0CiAjZGVmaW5lIENDUl9DQUNIRV8xNktCICAweDAwMDEwMDAwCiAjZGVmaW5lIENDUl9DQUNIRV8zMktCCTB4MDAwMjAwMDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9mcmVxLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaAppbmRleCBlYzAyOGM2Li5kYTQ2ZTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaApAQCAtMTAsMTQgKzEwLDE0IEBACiAjaWZuZGVmIF9fQVNNX0NQVV9TSDRfRlJFUV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDRfRlJFUV9ICiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NikKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYpCiAjZGVmaW5lIEZSUUNSCQkgICAgICAgIDB4YTQxNTAwMDAKICNkZWZpbmUgVkNMS0NSCQkJMHhhNDE1MDAwNAogI2RlZmluZSBTQ0xLQUNSCQkJMHhhNDE1MDAwOAogI2RlZmluZSBTQ0xLQkNSCQkJMHhhNDE1MDAwYwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKICNkZWZpbmUgSXJEQUNMS0NSCQkweGE0MTUwMDEwCi0jZW5kaWYKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQogI2RlZmluZQlGUlFDUgkJCTB4ZmZjODAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvcnRjLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3J0Yy5oCmluZGV4IGYzZDBmNTMuLjI1YjFlNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9ydGMuaApAQCAtMSw3ICsxLDEyIEBACiAjaWZuZGVmIF9fQVNNX1NIX0NQVV9TSDRfUlRDX0gKICNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9SVENfSAogCisjaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMworI2RlZmluZSBydGNfcmVnX3NpemUJCXNpemVvZih1MTYpCisjZWxzZQogI2RlZmluZSBydGNfcmVnX3NpemUJCXNpemVvZih1MzIpCisjZW5kaWYKKwogI2RlZmluZSBSVENfQklUX0lOVkVSVEVECTB4NDAJLyogYnVnIG9uIFNINzc1MCwgU0g3NzUwUyAqLwogI2RlZmluZSBSVENfREVGX0NBUEFCSUxJVElFUwlSVENfQ0FQXzRfRElHSVRfWUVBUgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9kZWxheS5oIGIvaW5jbHVkZS9hc20tc2gvZGVsYXkuaAppbmRleCBkNWQ0NjQwLi40YjE2YmY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2RlbGF5LmgKQEAgLTE1LDcgKzE1LDYgQEAKIGV4dGVybiB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgeGxvb3BzKTsKIGV4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CiAKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKICNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKIAkoKG4pID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KChuKSAqIDB4MTBjNnVsKSkgOiBcCiAJX191ZGVsYXkobikpCkBAIC0yMyw5ICsyMiw1IEBACiAjZGVmaW5lIG5kZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyBcCiAJKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6IFwKIAlfX25kZWxheShuKSkKLSNlbHNlCi1leHRlcm4gdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7Ci1leHRlcm4gdm9pZCBuZGVsYXkodW5zaWduZWQgbG9uZyBuc2Vjcyk7Ci0jZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX1NIX0RFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2VudHJ5LW1hY3Jvcy5TIGIvaW5jbHVkZS9hc20tc2gvZW50cnktbWFjcm9zLlMKaW5kZXggNTAwMDMwZS4uMmRhYjBiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZW50cnktbWFjcm9zLlMKKysrIGIvaW5jbHVkZS9hc20tc2gvZW50cnktbWFjcm9zLlMKQEAgLTEyLDcgKzEyLDcgQEAKIAlub3QJcjExLCByMTEKIAlzdGMJc3IsIHIxMAogCWFuZAlyMTEsIHIxMAotI2lmZGVmIENPTkZJR19IQVNfU1JfUkIKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19TUl9SQgogCXN0YwlrX2dfaW1hc2ssIHIxMQogCW9yCXIxMSwgcjEwCiAjZW5kaWYKQEAgLTIwLDcgKzIwLDcgQEAKIAkuZW5kbQogCiAJLm1hY3JvCWdldF9jdXJyZW50X3RocmVhZF9pbmZvLCB0aSwgdG1wCi0jaWZkZWYgQ09ORklHX0hBU19TUl9SQgorI2lmZGVmIENPTkZJR19DUFVfSEFTX1NSX1JCCiAJc3RjCXI3X2JhbmssIFx0aQogI2Vsc2UKIAltb3YJIygoVEhSRUFEX1NJWkUgLSAxKSA+PiAxMCkgXiAweGZmLCBcdG1wCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXNoL2Zsb3BweS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWZiZmRjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2Zsb3BweS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLS8qCi0gKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEZsb3BweSBkcml2ZXIKLSAqICAgaW5jbHVkZS9hc20taTM4Ni9mbG9wcHkuaAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NQotICovCi0jaWZuZGVmIF9fQVNNX1NIX0ZMT1BQWV9ICi0jZGVmaW5lIF9fQVNNX1NIX0ZMT1BQWV9ICi0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLQotLyoKLSAqIFRoZSBETUEgY2hhbm5lbCB1c2VkIGJ5IHRoZSBmbG9wcHkgY29udHJvbGxlciBjYW5ub3QgYWNjZXNzIGRhdGEgYXQKLSAqIGFkZHJlc3NlcyA+PSAxNk1CCi0gKgotICogV2VudCBiYWNrIHRvIHRoZSAxTUIgbGltaXQsIGFzIHNvbWUgcGVvcGxlIGhhZCBwcm9ibGVtcyB3aXRoIHRoZSBmbG9wcHkKLSAqIGRyaXZlciBvdGhlcndpc2UuIEl0IGRvZXNuJ3QgbWF0dGVyIG11Y2ggZm9yIHBlcmZvcm1hbmNlIGFueXdheSwgYXMgbW9zdAotICogZmxvcHB5IGFjY2Vzc2VzIGdvIHRocm91Z2ggdGhlIHRyYWNrIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBfQ1JPU1NfNjRLQihhLHMsdmRtYSkgXAotKCF2ZG1hICYmICgodW5zaWduZWQgbG9uZykoYSkvS182NCAhPSAoKHVuc2lnbmVkIGxvbmcpKGEpICsgKHMpIC0gMSkgLyBLXzY0KSkKLQotI2RlZmluZSBDUk9TU182NEtCKGEscykgX0NST1NTXzY0S0IoYSxzLHVzZV92aXJ0dWFsX2RtYSAmIDEpCi0KLQotI2RlZmluZSBTVyBmZF9yb3V0aW5lW3VzZV92aXJ0dWFsX2RtYSYxXQotI2RlZmluZSBDU1cgZmRfcm91dGluZVtjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMV0KLQotCi0jZGVmaW5lIGZkX2luYihwb3J0KQkJCWluYl9wKHBvcnQpCi0jZGVmaW5lIGZkX291dGIodmFsdWUscG9ydCkJCW91dGJfcCh2YWx1ZSxwb3J0KQotCi0jZGVmaW5lIGZkX3JlcXVlc3RfZG1hKCkgICAgICAgIENTVy5fcmVxdWVzdF9kbWEoRkxPUFBZX0RNQSwiZmxvcHB5IikKLSNkZWZpbmUgZmRfZnJlZV9kbWEoKSAgICAgICAgICAgQ1NXLl9mcmVlX2RtYShGTE9QUFlfRE1BKQotI2RlZmluZSBmZF9lbmFibGVfaXJxKCkgICAgICAgICBlbmFibGVfaXJxKEZMT1BQWV9JUlEpCi0jZGVmaW5lIGZkX2Rpc2FibGVfaXJxKCkgICAgICAgIGRpc2FibGVfaXJxKEZMT1BQWV9JUlEpCi0jZGVmaW5lIGZkX2ZyZWVfaXJxKCkJCWZyZWVfaXJxKEZMT1BQWV9JUlEsIE5VTEwpCi0jZGVmaW5lIGZkX2dldF9kbWFfcmVzaWR1ZSgpICAgIFNXLl9nZXRfZG1hX3Jlc2lkdWUoRkxPUFBZX0RNQSkKLSNkZWZpbmUgZmRfZG1hX21lbV9hbGxvYyhzaXplKQlTVy5fZG1hX21lbV9hbGxvYyhzaXplKQotI2RlZmluZSBmZF9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pIFNXLl9kbWFfc2V0dXAoYWRkciwgc2l6ZSwgbW9kZSwgaW8pCi0KLSNkZWZpbmUgRkxPUFBZX0NBTl9GQUxMQkFDS19PTl9OT0RNQQotCi1zdGF0aWMgaW50IHZpcnR1YWxfZG1hX2NvdW50Owotc3RhdGljIGludCB2aXJ0dWFsX2RtYV9yZXNpZHVlOwotc3RhdGljIGNoYXIgKnZpcnR1YWxfZG1hX2FkZHI7Ci1zdGF0aWMgaW50IHZpcnR1YWxfZG1hX21vZGU7Ci1zdGF0aWMgaW50IGRvaW5nX3BkbWE7Ci0KLXN0YXRpYyB2b2lkIGZsb3BweV9oYXJkaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgc3Q7Ci0KLSN1bmRlZiBUUkFDRV9GTFBZX0lOVAotCi0jaWZkZWYgVFJBQ0VfRkxQWV9JTlQKLQlzdGF0aWMgaW50IGNhbGxzPTA7Ci0Jc3RhdGljIGludCBieXRlcz0wOwotCXN0YXRpYyBpbnQgZG1hX3dhaXQ9MDsKLSNlbmRpZgotCWlmKCFkb2luZ19wZG1hKSB7Ci0JCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHJlZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0jaWZkZWYgVFJBQ0VfRkxQWV9JTlQKLQlpZighY2FsbHMpCi0JCWJ5dGVzID0gdmlydHVhbF9kbWFfY291bnQ7Ci0jZW5kaWYKLQotCXsKLQkJcmVnaXN0ZXIgaW50IGxjb3VudDsKLQkJcmVnaXN0ZXIgY2hhciAqbHB0cjsKLQotCQlzdCA9IDE7Ci0JCWZvcihsY291bnQ9dmlydHVhbF9kbWFfY291bnQsIGxwdHI9dmlydHVhbF9kbWFfYWRkcjsgCi0JCSAgICBsY291bnQ7IGxjb3VudC0tLCBscHRyKyspIHsKLQkJCXN0PWluYih2aXJ0dWFsX2RtYV9wb3J0KzQpICYgMHhhMCA7Ci0JCQlpZihzdCAhPSAweGEwKSAKLQkJCQlicmVhazsKLQkJCWlmKHZpcnR1YWxfZG1hX21vZGUpCi0JCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0KzUpOwotCQkJZWxzZQotCQkJCSpscHRyID0gaW5iX3AodmlydHVhbF9kbWFfcG9ydCs1KTsKLQkJfQotCQl2aXJ0dWFsX2RtYV9jb3VudCA9IGxjb3VudDsKLQkJdmlydHVhbF9kbWFfYWRkciA9IGxwdHI7Ci0JCXN0ID0gaW5iKHZpcnR1YWxfZG1hX3BvcnQrNCk7Ci0JfQotCi0jaWZkZWYgVFJBQ0VfRkxQWV9JTlQKLQljYWxscysrOwotI2VuZGlmCi0JaWYoc3QgPT0gMHgyMCkKLQkJcmV0dXJuOwotCWlmKCEoc3QgJiAweDIwKSkgewotCQl2aXJ0dWFsX2RtYV9yZXNpZHVlICs9IHZpcnR1YWxfZG1hX2NvdW50OwotCQl2aXJ0dWFsX2RtYV9jb3VudD0wOwotI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCi0JCXByaW50aygiY291bnQ9JXgsIHJlc2lkdWU9JXggY2FsbHM9JWQgYnl0ZXM9JWQgZG1hX3dhaXQ9JWRcbiIsIAotCQkgICAgICAgdmlydHVhbF9kbWFfY291bnQsIHZpcnR1YWxfZG1hX3Jlc2lkdWUsIGNhbGxzLCBieXRlcywKLQkJICAgICAgIGRtYV93YWl0KTsKLQkJY2FsbHMgPSAwOwotCQlkbWFfd2FpdD0wOwotI2VuZGlmCi0JCWRvaW5nX3BkbWEgPSAwOwotCQlmbG9wcHlfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKLQkJcmV0dXJuOwotCX0KLSNpZmRlZiBUUkFDRV9GTFBZX0lOVAotCWlmKCF2aXJ0dWFsX2RtYV9jb3VudCkKLQkJZG1hX3dhaXQrKzsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBmZF9kaXNhYmxlX2RtYSh2b2lkKQotewotCWlmKCEgKGNhbl91c2VfdmlydHVhbF9kbWEgJiAxKSkKLQkJZGlzYWJsZV9kbWEoRkxPUFBZX0RNQSk7Ci0JZG9pbmdfcGRtYSA9IDA7Ci0JdmlydHVhbF9kbWFfcmVzaWR1ZSArPSB2aXJ0dWFsX2RtYV9jb3VudDsKLQl2aXJ0dWFsX2RtYV9jb3VudD0wOwotfQotCi1zdGF0aWMgaW50IHZkbWFfcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB2ZG1hX25vcCh1bnNpZ25lZCBpbnQgZHVtbXkpCi17Ci19Ci0KLQotc3RhdGljIGludCB2ZG1hX2dldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZHVtbXkpCi17Ci0JcmV0dXJuIHZpcnR1YWxfZG1hX2NvdW50ICsgdmlydHVhbF9kbWFfcmVzaWR1ZTsKLX0KLQotCi1zdGF0aWMgaW50IGZkX3JlcXVlc3RfaXJxKHZvaWQpCi17Ci0JaWYoY2FuX3VzZV92aXJ0dWFsX2RtYSkKLQkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LAotCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKLQllbHNlCi0JCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAotCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JcmV0dXJuIF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLGdldF9vcmRlcihzaXplKSk7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdmRtYV9tZW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZykgdm1hbGxvYyhzaXplKTsKLQotfQotCi0jZGVmaW5lIG5vZG1hX21lbV9hbGxvYyhzaXplKSB2ZG1hX21lbV9hbGxvYyhzaXplKQotCi1zdGF0aWMgdm9pZCBfZmRfZG1hX21lbV9mcmVlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCWlmKCh1bnNpZ25lZCBpbnQpIGFkZHIgPj0gKHVuc2lnbmVkIGludCkgaGlnaF9tZW1vcnkpCi0JCXJldHVybiB2ZnJlZSgodm9pZCAqKWFkZHIpOwotCWVsc2UKLQkJZnJlZV9wYWdlcyhhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwkJCi19Ci0KLSNkZWZpbmUgZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpICBfZmRfZG1hX21lbV9mcmVlKGFkZHIsIHNpemUpIAotCi1zdGF0aWMgdm9pZCBfZmRfY2hvc2VfZG1hX21vZGUoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCWlmKGNhbl91c2VfdmlydHVhbF9kbWEgPT0gMikgewotCQlpZigodW5zaWduZWQgaW50KSBhZGRyID49ICh1bnNpZ25lZCBpbnQpIGhpZ2hfbWVtb3J5IHx8Ci0JCSAgIHZpcnRfdG9fcGh5cyhhZGRyKSA+PSAweDEwMDAwMDAwKQotCQkJdXNlX3ZpcnR1YWxfZG1hID0gMTsKLQkJZWxzZQotCQkJdXNlX3ZpcnR1YWxfZG1hID0gMDsKLQl9IGVsc2UgewotCQl1c2VfdmlydHVhbF9kbWEgPSBjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMTsKLQl9Ci19Ci0KLSNkZWZpbmUgZmRfY2hvc2VfZG1hX21vZGUoYWRkciwgc2l6ZSkgX2ZkX2Nob3NlX2RtYV9tb2RlKGFkZHIsIHNpemUpCi0KLQotc3RhdGljIGludCB2ZG1hX2RtYV9zZXR1cChjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pCi17Ci0JZG9pbmdfcGRtYSA9IDE7Ci0JdmlydHVhbF9kbWFfcG9ydCA9IGlvOwotCXZpcnR1YWxfZG1hX21vZGUgPSAobW9kZSAgPT0gRE1BX01PREVfV1JJVEUpOwotCXZpcnR1YWxfZG1hX2FkZHIgPSBhZGRyOwotCXZpcnR1YWxfZG1hX2NvdW50ID0gc2l6ZTsKLQl2aXJ0dWFsX2RtYV9yZXNpZHVlID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoYXJkX2RtYV9zZXR1cChjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pCi17Ci0jaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSwotCWlmIChDUk9TU182NEtCKGFkZHIsIHNpemUpKSB7Ci0JCXByaW50aygiRE1BIGNyb3NzaW5nIDY0LUsgYm91bmRhcnkgJXAtJXBcbiIsIGFkZHIsIGFkZHIrc2l6ZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0jZW5kaWYKLQotCV9fZmx1c2hfcHVyZ2VfcmVnaW9uKGFkZHIsIHNpemUpOwotCi0JLyogYWN0dWFsLCBwaHlzaWNhbCBETUEgKi8KLQlkb2luZ19wZG1hID0gMDsKLQljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7Ci0Jc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsbW9kZSk7Ci0Jc2V0X2RtYV9hZGRyKEZMT1BQWV9ETUEsdmlydF90b19waHlzKGFkZHIpKTsKLQlzZXRfZG1hX2NvdW50KEZMT1BQWV9ETUEsc2l6ZSk7Ci0JZW5hYmxlX2RtYShGTE9QUFlfRE1BKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBmZF9yb3V0aW5lX2wgewotCWludCAoKl9yZXF1ZXN0X2RtYSkodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKLQl2b2lkICgqX2ZyZWVfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIpOwotCWludCAoKl9nZXRfZG1hX3Jlc2lkdWUpKHVuc2lnbmVkIGludCBkdW1teSk7Ci0JdW5zaWduZWQgbG9uZyAoKl9kbWFfbWVtX2FsbG9jKSAodW5zaWduZWQgbG9uZyBzaXplKTsKLQlpbnQgKCpfZG1hX3NldHVwKShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBtb2RlLCBpbnQgaW8pOwotfSBmZF9yb3V0aW5lW10gPSB7Ci0JewotCQlyZXF1ZXN0X2RtYSwKLQkJZnJlZV9kbWEsCi0JCWdldF9kbWFfcmVzaWR1ZSwKLQkJZG1hX21lbV9hbGxvYywKLQkJaGFyZF9kbWFfc2V0dXAKLQl9LAotCXsKLQkJdmRtYV9yZXF1ZXN0X2RtYSwKLQkJdmRtYV9ub3AsCi0JCXZkbWFfZ2V0X2RtYV9yZXNpZHVlLAotCQl2ZG1hX21lbV9hbGxvYywKLQkJdmRtYV9kbWFfc2V0dXAKLQl9Ci19OwotCi0KLXN0YXRpYyBpbnQgRkRDMSA9IDB4M2YwOwotc3RhdGljIGludCBGREMyID0gLTE7Ci0KLS8qCi0gKiBGbG9wcHkgdHlwZXMgYXJlIHN0b3JlZCBpbiB0aGUgcnRjJ3MgQ01PUyBSQU0gYW5kIHNvIHJ0Y19sb2NrCi0gKiBpcyBuZWVkZWQgdG8gcHJldmVudCBjb3JydXB0ZWQgQ01PUyBSQU0gaW4gY2FzZSAiaW5zbW9kIGZsb3BweSIKLSAqIGNvaW5jaWRlcyB3aXRoIGFub3RoZXIgcnRjIENNT1MgdXNlci4JCVBhdWwgRy4KLSAqLwotI2RlZmluZSBGTE9QUFkwX1RZUEUJKDQpCi0jZGVmaW5lIEZMT1BQWTFfVFlQRQkoMCkKLQotI2RlZmluZSBOX0ZEQyAyCi0jZGVmaW5lIE5fRFJJVkUgOAotCi0jZGVmaW5lIEVYVFJBX0ZMT1BQWV9QQVJBTVMKLQotI2VuZGlmIC8qIF9fQVNNX1NIX0ZMT1BQWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9mcHUuaCBiL2luY2x1ZGUvYXNtLXNoL2ZwdS5oCmluZGV4IGY4NDI5ODguLjkxNDYyZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2ZwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2ZwdS5oCkBAIC0xLDkgKzEsOCBAQAogI2lmbmRlZiBfX0FTTV9TSF9GUFVfSAogI2RlZmluZSBfX0FTTV9TSF9GUFVfSAogCi0jZGVmaW5lIFNSX0ZEICAgIDB4MDAwMDgwMDAKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAjaWZkZWYgQ09ORklHX1NIX0ZQVQpAQCAtMjEsMjUgKzIwLDM1IEBACiAKIGV4dGVybiB2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqX190c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKICNlbHNlCisKICNkZWZpbmUgcmVsZWFzZV9mcHUocmVncykJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBncmFiX2ZwdShyZWdzKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBzYXZlX2ZwdSh0c2ssIHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfVVNFREZQVSk7Cit9CiAjZW5kaWYKIAogZXh0ZXJuIGludCBkb19mcHVfaW5zdCh1bnNpZ25lZCBzaG9ydCwgc3RydWN0IHB0X3JlZ3MgKik7CiAKLSNkZWZpbmUgdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpIGRvIHsJCQlcCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1VTRURGUFUpKSB7CVwKLQkJc2F2ZV9mcHUodHNrLCByZWdzKTsJCQlcCi0JfQkJCQkJCVwKLX0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgdW5sYXp5X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1VTRURGUFUpKQorCQlzYXZlX2ZwdSh0c2ssIHJlZ3MpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CiAKLSNkZWZpbmUgY2xlYXJfZnB1KHRzaywgcmVncykgZG8gewkJCQlcCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1VTRURGUFUpKSB7CQlcCi0JCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9VU0VERlBVKTsJXAotCQlyZWxlYXNlX2ZwdShyZWdzKTsJCQkJXAotCX0JCQkJCQkJXAotfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9VU0VERlBVKSkgeworCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfVVNFREZQVSk7CisJCXJlbGVhc2VfZnB1KHJlZ3MpOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworfQogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lkZS5oIGIvaW5jbHVkZS9hc20tc2gvaWRlLmgKaW5kZXggOWY4ZTkxNC4uNThlMGJkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaWRlLmgKQEAgLTE0LDkgKzE0LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotCi0jZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoMCkKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9rdm0uaCBiL2luY2x1ZGUvYXNtLXNoL2t2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjUxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fU0hfSAorI2RlZmluZSBfX0xJTlVYX0tWTV9TSF9ICisKKy8qIHNoIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbWlnb3IuaCBiL2luY2x1ZGUvYXNtLXNoL21pZ29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyOTM2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL21pZ29yLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBfX0FTTV9TSF9NSUdPUl9ICisjZGVmaW5lIF9fQVNNX1NIX01JR09SX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL21pZ29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyogR1BJTyAqLworI2RlZmluZSBNU1RQQ1IwIDB4YTQxNTAwMzAKKyNkZWZpbmUgTVNUUENSMSAweGE0MTUwMDM0CisjZGVmaW5lIE1TVFBDUjIgMHhhNDE1MDAzOAorCisjZGVmaW5lIFBPUlRfUEFDUiAweGE0MDUwMTAwCisjZGVmaW5lIFBPUlRfUERDUiAweGE0MDUwMTA2CisjZGVmaW5lIFBPUlRfUEVDUiAweGE0MDUwMTA4CisjZGVmaW5lIFBPUlRfUEhDUiAweGE0MDUwMTBlCisjZGVmaW5lIFBPUlRfUEpDUiAweGE0MDUwMTEwCisjZGVmaW5lIFBPUlRfUEtDUiAweGE0MDUwMTEyCisjZGVmaW5lIFBPUlRfUExDUiAweGE0MDUwMTE0CisjZGVmaW5lIFBPUlRfUE1DUiAweGE0MDUwMTE2CisjZGVmaW5lIFBPUlRfUFJDUiAweGE0MDUwMTFjCisjZGVmaW5lIFBPUlRfUFdDUiAweGE0MDUwMTQ2CisjZGVmaW5lIFBPUlRfUFhDUiAweGE0MDUwMTQ4CisjZGVmaW5lIFBPUlRfUFlDUiAweGE0MDUwMTRhCisjZGVmaW5lIFBPUlRfUFpDUiAweGE0MDUwMTRjCisjZGVmaW5lIFBPUlRfUEFEUiAweGE0MDUwMTIwCisjZGVmaW5lIFBPUlRfUFdEUiAweGE0MDUwMTY2CisKKyNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAorI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCisKKyNkZWZpbmUgUE9SVF9NU0VMQ1JCIDB4YTQwNTAxODIKKworI2RlZmluZSBNU1RQQ1IxIDB4YTQxNTAwMzQKKyNkZWZpbmUgTVNUUENSMiAweGE0MTUwMDM4CisKKyNkZWZpbmUgUE9SVF9QU0VMQSAweGE0MDUwMTRlCisjZGVmaW5lIFBPUlRfUFNFTEIgMHhhNDA1MDE1MAorI2RlZmluZSBQT1JUX1BTRUxDIDB4YTQwNTAxNTIKKyNkZWZpbmUgUE9SVF9QU0VMRCAweGE0MDUwMTU0CisKKyNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAorI2RlZmluZSBQT1JUX0hJWkNSQiAweGE0MDUwMTVhCisjZGVmaW5lIFBPUlRfSElaQ1JDIDB4YTQwNTAxNWMKKworI2RlZmluZSBCU0NfQ1M2QUJDUiAweGZlYzEwMDFjCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9NSUdPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL3BjaS5oIGIvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9wY2kuaAppbmRleCA1ZDM3MTJjLi5kOTE2MmM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvcGNpLmgKQEAgLTI0LDggKzI0LDYgQEAKICNkZWZpbmUgUENJX1BST0JFX0JJT1MgICAgMQogI2RlZmluZSBQQ0lfUFJPQkVfQ09ORjEgICAyCiAjZGVmaW5lIFBDSV9QUk9CRV9DT05GMiAgIDQKLSNkZWZpbmUgUENJX05PX1NPUlQgICAgICAgMHgxMDAKLSNkZWZpbmUgUENJX0JJT1NfU09SVCAgICAgMHgyMDAKICNkZWZpbmUgUENJX05PX0NIRUNLUyAgICAgMHg0MDAKICNkZWZpbmUgUENJX0FTU0lHTl9ST01TICAgMHgxMDAwCiAjZGVmaW5lIFBDSV9CSU9TX0lSUV9TQ0FOIDB4MjAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoL3Bvc2l4X3R5cGVzLmgKaW5kZXggNGI5ZDExYy4uNGVlYjcyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcG9zaXhfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wb3NpeF90eXBlcy5oCkBAIC00LDQgKzQsMTAgQEAKICMgZWxzZQogIyAgaW5jbHVkZSAicG9zaXhfdHlwZXNfNjQuaCIKICMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fU0g1X18KKyMgIGluY2x1ZGUgInBvc2l4X3R5cGVzXzY0LmgiCisjIGVsc2UKKyMgIGluY2x1ZGUgInBvc2l4X3R5cGVzXzMyLmgiCisjIGVuZGlmCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaAppbmRleCAxOWZlNDdjLi5iN2M3Y2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX19BU01fU0hfUFJPQ0VTU09SX0gKIAogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgpAQCAtMTcsNyArMTYsNyBAQAogCUNQVV9TSDc2MTksCiAKIAkvKiBTSC0yQSB0eXBlcyAqLwotCUNQVV9TSDcyMDMsIENQVV9TSDcyMDYsIENQVV9TSDcyNjMsCisJQ1BVX1NINzIwMywgQ1BVX1NINzIwNiwgQ1BVX1NINzI2MywgQ1BVX01YRywKIAogCS8qIFNILTMgdHlwZXMgKi8KIAlDUFVfU0g3NzA1LCBDUFVfU0g3NzA2LCBDUFVfU0g3NzA3LApAQCAtMzAsNyArMjksOCBAQAogCUNQVV9TSDc3NjAsIENQVV9TSDRfMjAyLCBDUFVfU0g0XzUwMSwKIAogCS8qIFNILTRBIHR5cGVzICovCi0JQ1BVX1NINzc2MywgQ1BVX1NINzc3MCwgQ1BVX1NINzc4MCwgQ1BVX1NINzc4MSwgQ1BVX1NINzc4NSwgQ1BVX1NIWDMsCisJQ1BVX1NINzc2MywgQ1BVX1NINzc3MCwgQ1BVX1NINzc4MCwgQ1BVX1NINzc4MSwgQ1BVX1NINzc4NSwKKwlDUFVfU0g3NzIzLCBDUFVfU0hYMywKIAogCS8qIFNINEFMLURTUCB0eXBlcyAqLwogCUNQVV9TSDczNDMsIENQVV9TSDc3MjIsIENQVV9TSDczNjYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3JfMzIuaCBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvcl8zMi5oCmluZGV4IGRmMmQ1YjAuLmMwOTMwNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvcl8zMi5oCkBAIC03MCw2ICs3MCw3IEBACiAgKi8KICNkZWZpbmUgU1JfRFNQCQkweDAwMDAxMDAwCiAjZGVmaW5lIFNSX0lNQVNLCTB4MDAwMDAwZjAKKyNkZWZpbmUgU1JfRkQJCTB4MDAwMDgwMDAKIAogLyoKICAqIEZQVSBzdHJ1Y3R1cmUgYW5kIGRhdGEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvcl82NC5oIGIvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yXzY0LmgKaW5kZXggZWRhNGJlZi4uODhhMmVkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yXzY0LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yXzY0LmgKQEAgLTExMiw2ICsxMTIsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgU1JfSU1BU0sgMHgwMDAwMDBmMAorI2RlZmluZSBTUl9GRCAgICAweDAwMDA4MDAwCiAjZGVmaW5lIFNSX1NTVEVQIDB4MDgwMDAwMDAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3I3NzgwcnAuaCBiL2luY2x1ZGUvYXNtLXNoL3I3NzgwcnAuaAppbmRleCAxNzcwNDYwLi5hMzM4MzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9yNzc4MHJwLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcjc3ODBycC5oCkBAIC01NSwxMSArNTUsMTEgQEAKICNkZWZpbmUgUEFfU0NTUFRSMSAgICAgIChQQV9CQ1IrMHgwNTI0KSAvKiBTQ0lGMSBTZXJpYWwgUG9ydCBjb250cm9sICovCiAjZGVmaW5lIFBBX1NDTFNSMSAgICAgICAoUEFfQkNSKzB4MDUyOCkgLyogU0NJRjEgTGluZSBTdGF0dXMgY29udHJvbCAqLwogI2RlZmluZSBQQV9TQ1JFUjEgICAgICAgKFBBX0JDUisweDA1MmMpIC8qIFNDSUYxIFNlcmlhbCBFcnJvciBjb250cm9sICovCi0jZGVmaW5lIFBBX0lDQ1IgICAgICAgICAoUEFfQkNSKzB4MDYwMCkgLyogU2VyaWFsIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfU0FSICAgICAgICAgIChQQV9CQ1IrMHgwNjAyKSAvKiBTZXJpYWwgU2xhdmUgY29udHJvbCAqLwotI2RlZmluZSBQQV9NRFIgICAgICAgICAgKFBBX0JDUisweDA2MDQpIC8qIFNlcmlhbCBNb2RlIGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfQURSMSAgICAgICAgIChQQV9CQ1IrMHgwNjA2KSAvKiBTZXJpYWwgQWRkcmVzczEgY29udHJvbCAqLwotI2RlZmluZSBQQV9EQVIxICAgICAgICAgKFBBX0JDUisweDA2NDYpIC8qIFNlcmlhbCBEYXRhMSBjb250cm9sICovCisjZGVmaW5lIFBBX1NNQ1IgICAgICAgICAoUEFfQkNSKzB4MDYwMCkgLyogMi13aXJlIFNlcmlhbCBjb250cm9sICovCisjZGVmaW5lIFBBX1NNU01BRFIgICAgICAoUEFfQkNSKzB4MDYwMikgLyogMi13aXJlIFNlcmlhbCBTbGF2ZSBjb250cm9sICovCisjZGVmaW5lIFBBX1NNTVIgICAgICAgICAoUEFfQkNSKzB4MDYwNCkgLyogMi13aXJlIFNlcmlhbCBNb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU01TQURSMSAgICAgIChQQV9CQ1IrMHgwNjA2KSAvKiAyLXdpcmUgU2VyaWFsIEFkZHJlc3MxIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU01UUkRSMSAgICAgIChQQV9CQ1IrMHgwNjQ2KSAvKiAyLXdpcmUgU2VyaWFsIERhdGExIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfVkVSUkVHICAgICAgIChQQV9CQ1IrMHgwNzAwKSAvKiBGUEdBIFZlcnNpb24gUmVnaXN0ZXIgKi8KICNkZWZpbmUgUEFfUE9GRiAgICAgICAgIChQQV9CQ1IrMHgwODAwKSAvKiBTeXN0ZW0gUG93ZXIgT2ZmIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfUE1SICAgICAgICAgIChQQV9CQ1IrMHgwOTAwKSAvKiAgKi8KQEAgLTEwNywxMSArMTA3LDExIEBACiAjZGVmaW5lIFBBX1NDRkNSCShQQV9CQ1IrMHgwNDBjKQkvKiBTQ0lGIEZJRk8gY29udHJvbCAqLwogI2RlZmluZSBQQV9TQ0ZEUgkoUEFfQkNSKzB4MDQwZSkJLyogU0NJRiBGSUZPIGRhdGEgY29udHJvbCAqLwogI2RlZmluZSBQQV9TQ0xTUgkoUEFfQkNSKzB4MDQxMikJLyogU0NJRiBMaW5lIFN0YXR1cyBjb250cm9sICovCi0jZGVmaW5lIFBBX0lDQ1IJCShQQV9CQ1IrMHgwNTAwKQkvKiBTZXJpYWwgY29udHJvbCAqLwotI2RlZmluZSBQQV9TQVIJCShQQV9CQ1IrMHgwNTAyKQkvKiBTZXJpYWwgU2xhdmUgY29udHJvbCAqLwotI2RlZmluZSBQQV9NRFIJCShQQV9CQ1IrMHgwNTA0KQkvKiBTZXJpYWwgTW9kZSBjb250cm9sICovCi0jZGVmaW5lIFBBX0FEUjEJCShQQV9CQ1IrMHgwNTA2KQkvKiBTZXJpYWwgQWRkcmVzczEgY29udHJvbCAqLwotI2RlZmluZSBQQV9EQVIxCQkoUEFfQkNSKzB4MDU0NikJLyogU2VyaWFsIERhdGExIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU01DUgkJKFBBX0JDUisweDA1MDApCS8qIDItd2lyZSBTZXJpYWwgY29udHJvbCAqLworI2RlZmluZSBQQV9TTVNNQURSCShQQV9CQ1IrMHgwNTAyKQkvKiAyLXdpcmUgU2VyaWFsIFNsYXZlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU01NUgkJKFBBX0JDUisweDA1MDQpCS8qIDItd2lyZSBTZXJpYWwgTW9kZSBjb250cm9sICovCisjZGVmaW5lIFBBX1NNU0FEUjEJKFBBX0JDUisweDA1MDYpCS8qIDItd2lyZSBTZXJpYWwgQWRkcmVzczEgY29udHJvbCAqLworI2RlZmluZSBQQV9TTVRSRFIxCShQQV9CQ1IrMHgwNTQ2KQkvKiAyLXdpcmUgU2VyaWFsIERhdGExIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfVkVSUkVHCShQQV9CQ1IrMHgwNjAwKQkvKiBGUEdBIFZlcnNpb24gUmVnaXN0ZXIgKi8KIAogI2RlZmluZSBQQV9BWDg4Nzk2TAkweGE1ODAwNDAwCS8qIEFYODg3OTZMIEFyZWEgKi8KQEAgLTE5MCw2ICsxOTAsOCBAQAogI2RlZmluZSBJUlFfVFAJCQkoSExfRlBHQV9JUlFfQkFTRSArIDEyKQogI2RlZmluZSBJUlFfUlRDCQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxMykKICNkZWZpbmUgSVJRX1RIX0FMRVJUCQkoSExfRlBHQV9JUlFfQkFTRSArIDE0KQorI2RlZmluZSBJUlFfU0NJRjAJCShITF9GUEdBX0lSUV9CQVNFICsgMTUpCisjZGVmaW5lIElSUV9TQ0lGMQkJKEhMX0ZQR0FfSVJRX0JBU0UgKyAxNikKIAogdW5zaWduZWQgY2hhciAqaGlnaGxhbmRlcl9pbml0X2lycV9yNzc4MG1wKHZvaWQpOwogdW5zaWduZWQgY2hhciAqaGlnaGxhbmRlcl9pbml0X2lycV9yNzc4MHJwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2NpLmggYi9pbmNsdWRlL2FzbS1zaC9zY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJlNzM2Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfU0NJX0gKLSNkZWZpbmUgX19BU01fU0hfU0NJX0gKLQotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0KLS8qCi0gKiBHZW5lcmljIGhlYWRlciBmb3IgU3VwZXJIIFNDSShGKQotICoKLSAqIERvIG5vdCBwbGFjZSBTSC1zcGVjaWZpYyBwYXJ0cyBpbiBoZXJlLCBzaDY0IGFuZCBoODMwMCBkZXBlbmQgb24gdGhpcyB0b28uCi0gKi8KLQotLyogT2Zmc2V0cyBpbnRvIHRoZSBzY2lfcG9ydC0+aXJxcyBhcnJheSAqLwotZW51bSB7Ci0JU0NJeF9FUklfSVJRLAotCVNDSXhfUlhJX0lSUSwKLQlTQ0l4X1RYSV9JUlEsCi0JU0NJeF9CUklfSVJRLAotCVNDSXhfTlJfSVJRUywKLX07Ci0KLS8qCi0gKiBQbGF0Zm9ybSBkZXZpY2Ugc3BlY2lmaWMgcGxhdGZvcm1fZGF0YSBzdHJ1Y3QKLSAqLwotc3RydWN0IHBsYXRfc2NpX3BvcnQgewotCXZvaWQgX19pb21lbQkqbWVtYmFzZTsJCS8qIGlvIGNvb2tpZSAqLwotCXVuc2lnbmVkIGxvbmcJbWFwYmFzZTsJCS8qIHJlc291cmNlIGJhc2UgKi8KLQl1bnNpZ25lZCBpbnQJaXJxc1tTQ0l4X05SX0lSUVNdOwkvKiBFUkksIFJYSSwgVFhJLCBCUkkgKi8KLQl1bnNpZ25lZCBpbnQJdHlwZTsJCQkvKiBTQ0kgLyBTQ0lGIC8gSVJEQSAqLwotCXVwZl90CQlmbGFnczsJCQkvKiBVUEZfKiBmbGFncyAqLwotfTsKLQotaW50IGVhcmx5X3NjaV9zZXR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKLQotI2VuZGlmIC8qIF9fQVNNX1NIX1NDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZTc3MjEuaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzcyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTdmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZTc3MjEuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKgorICogSGl0YWNoaSBVTCBTb2x1dGlvbkVuZ2luZSA3NzIxIFN1cHBvcnQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fU0hfU0U3NzIxX0gKKyNkZWZpbmUgX19BU01fU0hfU0U3NzIxX0gKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKy8qIEJveCBzcGVjaWZpYyBhZGRyZXNzZXMuICovCisjZGVmaW5lIFNFX0FSRUEwX1dJRFRICTIJCS8qIEFyZWEwOiAzMmJpdCAqLworI2RlZmluZSBQQV9ST00JCTB4YTAwMDAwMDAJLyogRVBST00gKi8KKyNkZWZpbmUgUEFfUk9NX1NJWkUJMHgwMDIwMDAwMAkvKiBFUFJPTSBzaXplIDJNIGJ5dGUgKi8KKyNkZWZpbmUgUEFfRlJPTQkJMHhhMTAwMDAwMAkvKiBGbGFzaC1ST00gKi8KKyNkZWZpbmUgUEFfRlJPTV9TSVpFCTB4MDEwMDAwMDAJLyogRmxhc2gtUk9NIHNpemUgMTZNIGJ5dGUgKi8KKyNkZWZpbmUgUEFfRVhUMQkJMHhhNDAwMDAwMAorI2RlZmluZSBQQV9FWFQxX1NJWkUJMHgwNDAwMDAwMAorI2RlZmluZSBQQV9TRFJBTQkweGFDMDAwMDAwCS8qIFNEUkFNKEFyZWEzKSA2NE1CICovCisjZGVmaW5lIFBBX1NEUkFNX1NJWkUJMHgwNDAwMDAwMAorCisjZGVmaW5lIFBBX0VYVDQJCTB4YjAwMDAwMDAKKyNkZWZpbmUgUEFfRVhUNF9TSVpFCTB4MDQwMDAwMDAKKworI2RlZmluZSBQQV9QRVJJUEhFUkFMCTB4QjgwMDAwMDAKKworI2RlZmluZSBQQV9QQ0lDCQlQQV9QRVJJUEhFUkFMCisjZGVmaW5lIFBBX01SU0hQQwkoUEFfUEVSSVBIRVJBTCArIDB4MDAzZmZmZTApCisjZGVmaW5lIFBBX01SU0hQQ19NVzEJKFBBX1BFUklQSEVSQUwgKyAweDAwNDAwMDAwKQorI2RlZmluZSBQQV9NUlNIUENfTVcyCShQQV9QRVJJUEhFUkFMICsgMHgwMDUwMDAwMCkKKyNkZWZpbmUgUEFfTVJTSFBDX0lPCShQQV9QRVJJUEhFUkFMICsgMHgwMDYwMDAwMCkKKyNkZWZpbmUgTVJTSFBDX09QVElPTgkoUEFfTVJTSFBDICsgNikKKyNkZWZpbmUgTVJTSFBDX0NTUgkoUEFfTVJTSFBDICsgOCkKKyNkZWZpbmUgTVJTSFBDX0lTUgkoUEFfTVJTSFBDICsgMTApCisjZGVmaW5lIE1SU0hQQ19JQ1IJKFBBX01SU0hQQyArIDEyKQorI2RlZmluZSBNUlNIUENfQ1BXQ1IJKFBBX01SU0hQQyArIDE0KQorI2RlZmluZSBNUlNIUENfTVcwQ1IxCShQQV9NUlNIUEMgKyAxNikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMQkoUEFfTVJTSFBDICsgMTgpCisjZGVmaW5lIE1SU0hQQ19JT1dDUjEJKFBBX01SU0hQQyArIDIwKQorI2RlZmluZSBNUlNIUENfTVcwQ1IyCShQQV9NUlNIUEMgKyAyMikKKyNkZWZpbmUgTVJTSFBDX01XMUNSMgkoUEFfTVJTSFBDICsgMjQpCisjZGVmaW5lIE1SU0hQQ19JT1dDUjIJKFBBX01SU0hQQyArIDI2KQorI2RlZmluZSBNUlNIUENfQ0RDUgkoUEFfTVJTSFBDICsgMjgpCisjZGVmaW5lIE1SU0hQQ19QQ0lDX0lORk8JKFBBX01SU0hQQyArIDMwKQorCisjZGVmaW5lIFBBX0xFRAkJMHhCNjgwMDAwMAkvKiA4Yml0IExFRCAqLworI2RlZmluZSBQQV9GUEdBCQkweEI3MDAwMDAwIAkvKiBGUEdBIGJhc2UgYWRkcmVzcyAqLworCisjZGVmaW5lIE1SU0hQQ19JUlEwCTEwCisKKyNkZWZpbmUgRlBHQV9JTFNSMQkoUEFfRlBHQSArIDB4MDIpCisjZGVmaW5lIEZQR0FfSUxTUjIJKFBBX0ZQR0EgKyAweDAzKQorI2RlZmluZSBGUEdBX0lMU1IzCShQQV9GUEdBICsgMHgwNCkKKyNkZWZpbmUgRlBHQV9JTFNSNAkoUEFfRlBHQSArIDB4MDUpCisjZGVmaW5lIEZQR0FfSUxTUjUJKFBBX0ZQR0EgKyAweDA2KQorI2RlZmluZSBGUEdBX0lMU1I2CShQQV9GUEdBICsgMHgwNykKKyNkZWZpbmUgRlBHQV9JTFNSNwkoUEFfRlBHQSArIDB4MDgpCisjZGVmaW5lIEZQR0FfSUxTUjgJKFBBX0ZQR0EgKyAweDA5KQorCit2b2lkIGluaXRfc2U3NzIxX0lSUSh2b2lkKTsKKworI2RlZmluZSBfX0lPX1BSRUZJWAkJc2U3NzIxCisjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KKworI2VuZGlmICAvKiBfX0FTTV9TSF9TRTc3MjFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2U3NzIyLmggYi9pbmNsdWRlL2FzbS1zaC9zZTc3MjIuaAppbmRleCBlMGU4OWZjLi4zNjkwZmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zZTc3MjIuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZTc3MjIuaApAQCAtNzcsNiArNzcsOCBAQAogI2RlZmluZSBQT1JUX1BTRUxBICAgICAgMHhBNDA1MDE0RVVMCiAjZGVmaW5lIFBPUlRfUFlDUiAgICAgICAweEE0MDUwMTRBVUwKICNkZWZpbmUgUE9SVF9QWkNSICAgICAgIDB4QTQwNTAxNENVTAorI2RlZmluZSBQT1JUX0hJWkNSQSAgICAgMHhBNDA1MDE1OFVMCisjZGVmaW5lIFBPUlRfSElaQ1JDICAgICAweEE0MDUwMTVDVUwKIAogLyogSVJRICovCiAjZGVmaW5lIElSUTBfSVJRICAgICAgICAzMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2VtYXBob3JlLWhlbHBlci5oIGIvaW5jbHVkZS9hc20tc2gvc2VtYXBob3JlLWhlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDgyMzBjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL3NlbWFwaG9yZS1oZWxwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfU0VNQVBIT1JFX0hFTFBFUl9ICi0jZGVmaW5lIF9fQVNNX1NIX1NFTUFQSE9SRV9IRUxQRVJfSAotCi0vKgotICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3JlcyBoZWxwZXIgZnVuY3Rpb25zLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMTk5NiBMaW51cyBUb3J2YWxkcwotICogKEMpIENvcHlyaWdodCAxOTk5IEFuZHJlYSBBcmNhbmdlbGkKLSAqLwotCi0vKgotICogVGhlc2UgdHdvIF9tdXN0XyBleGVjdXRlIGF0b21pY2FsbHkgd3J0IGVhY2ggb3RoZXIuCi0gKgotICogVGhpcyBpcyB0cml2aWFsbHkgZG9uZSB3aXRoIGxvYWRfbG9ja2VkL3N0b3JlX2NvbmQsCi0gKiB3aGljaCB3ZSBoYXZlLiAgTGV0IHRoZSByZXN0IG9mIHRoZSBsb3NlcnMgc3VjayBlZ2dzLgotICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHdha2Vfb25lX21vcmUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlhdG9taWNfaW5jKChhdG9taWNfdCAqKSZzZW0tPnNsZWVwZXJzKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IHdha2luZ19ub25femVybyhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZW1hcGhvcmVfd2FrZV9sb2NrLCBmbGFncyk7Ci0JaWYgKHNlbS0+c2xlZXBlcnMgPiAwKSB7Ci0JCXNlbS0+c2xlZXBlcnMtLTsKLQkJcmV0ID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiB3YWtpbmdfbm9uX3plcm9faW50ZXJydXB0aWJsZToKLSAqCTEJZ290IHRoZSBsb2NrCi0gKgkwCWdvIHRvIHNsZWVwCi0gKgktRUlOVFIJaW50ZXJydXB0ZWQKLSAqCi0gKiBXZSBtdXN0IHVuZG8gdGhlIHNlbS0+Y291bnQgZG93bl9pbnRlcnJ1cHRpYmxlKCkgaW5jcmVtZW50IHdoaWxlIHdlIGFyZQotICogcHJvdGVjdGVkIGJ5IHRoZSBzcGlubG9jayBpbiBvcmRlciB0byBtYWtlIGF0b21pYyB0aGlzIGF0b21pY19pbmMoKSB3aXRoIHRoZQotICogYXRvbWljX3JlYWQoKSBpbiB3YWtlX29uZV9tb3JlKCksIG90aGVyd2lzZSB3ZSBjYW4gcmFjZS4gLWFyY2EKLSAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwKLQkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCWlmIChzZW0tPnNsZWVwZXJzID4gMCkgewotCQlzZW0tPnNsZWVwZXJzLS07Ci0JCXJldCA9IDE7Ci0JfSBlbHNlIGlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7Ci0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCQlyZXQgPSAtRUlOVFI7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogd2FraW5nX25vbl96ZXJvX3RyeWxvY2s6Ci0gKgkxCWZhaWxlZCB0byBsb2NrCi0gKgkwCWdvdCB0aGUgbG9jawotICoKLSAqIFdlIG11c3QgdW5kbyB0aGUgc2VtLT5jb3VudCBkb3duX3RyeWxvY2soKSBpbmNyZW1lbnQgd2hpbGUgd2UgYXJlCi0gKiBwcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrIGluIG9yZGVyIHRvIG1ha2UgYXRvbWljIHRoaXMgYXRvbWljX2luYygpIHdpdGggdGhlCi0gKiBhdG9taWNfcmVhZCgpIGluIHdha2Vfb25lX21vcmUoKSwgb3RoZXJ3aXNlIHdlIGNhbiByYWNlLiAtYXJjYQotICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgd2FraW5nX25vbl96ZXJvX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtYXBob3JlX3dha2VfbG9jaywgZmxhZ3MpOwotCWlmIChzZW0tPnNsZWVwZXJzIDw9IDApCi0JCWF0b21pY19pbmMoJnNlbS0+Y291bnQpOwotCWVsc2UgewotCQlzZW0tPnNsZWVwZXJzLS07Ci0JCXJldCA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbWFwaG9yZV93YWtlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogX19BU01fU0hfU0VNQVBIT1JFX0hFTFBFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXNoL3NlbWFwaG9yZS5oCmluZGV4IDllNWEzN2MuLmQ5YjIwMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlbWFwaG9yZS5oCkBAIC0xLDExNSArMSBAQAotI2lmbmRlZiBfX0FTTV9TSF9TRU1BUEhPUkVfSAotI2RlZmluZSBfX0FTTV9TSF9TRU1BUEhPUkVfSAotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotLyoKLSAqIFNNUC0gYW5kIGludGVycnVwdC1zYWZlIHNlbWFwaG9yZXMuCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCi0gKgotICogU3VwZXJIIHZlcmlzb24gYnkgTmlpYmUgWXV0YWthCi0gKiAgKEN1cnJlbnRseSBubyBhc20gaW1wbGVtZW50YXRpb24gYnV0IGdlbmVyaWMgQyBjb2RlLi4uKQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLnNsZWVwZXJzCT0gMCwJCQkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0vKgotICoJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCgqc2VtKSx2YWwpOwotICoKLSAqIGknZCByYXRoZXIgdXNlIHRoZSBtb3JlIGZsZXhpYmxlIGluaXRpYWxpemF0aW9uIGFib3ZlLCBidXQgc2FkbHkKLSAqIEdDQyAyLjcuMi4zIGVtaXRzIGEgYm9ndXMgd2FybmluZy4gRUdDUyBkb2Vzbid0LiBPaCB3ZWxsLgotICovCi0JYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKLQlzZW0tPnNsZWVwZXJzID0gMDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAwKTsKLX0KLQotI2lmIDAKLWFzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Ci1hc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7Ci0jZW5kaWYKLQotYXNtbGlua2FnZSB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWFzbWxpbmthZ2Ugdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotCi1leHRlcm4gc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2NrOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCi0JCV9fZG93bihzZW0pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZW0tPmNvdW50KSA8IDApCi0JCXJldCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnNlbS0+Y291bnQpIDwgMCkKLQkJcmV0ID0gX19kb3duX3RyeWxvY2soc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgotICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzZW0tPmNvdW50KSA8PSAwKQotCQlfX3VwKHNlbSk7Ci19Ci0KLSNlbmRpZgotI2VuZGlmIC8qIF9fQVNNX1NIX1NFTUFQSE9SRV9IICovCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaF9rZXlzYy5oIGIvaW5jbHVkZS9hc20tc2gvc2hfa2V5c2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE0ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2hfa2V5c2MuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fQVNNX0tFWVNDX0hfXworI2RlZmluZSBfX0FTTV9LRVlTQ19IX18KKworI2RlZmluZSBTSF9LRVlTQ19NQVhLRVlTIDMwCisKK3N0cnVjdCBzaF9rZXlzY19pbmZvIHsKKwllbnVtIHsgU0hfS0VZU0NfTU9ERV8xLCBTSF9LRVlTQ19NT0RFXzIsIFNIX0tFWVNDX01PREVfMyB9IG1vZGU7CisJaW50IHNjYW5fdGltaW5nOyAvKiAwIC0+IDcsIHNlZSBLWUNSMSwgU0NOWzI6MF0gKi8KKwlpbnQgZGVsYXk7CisJaW50IGtleWNvZGVzW1NIX0tFWVNDX01BWEtFWVNdOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0tFWVNDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaAppbmRleCA1MTQ1YWEyLi5lNjViNmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaApAQCAtMTQ2LDYgKzE0Niw4IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZDsKIAorZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnNoX2RlYnVnZnNfcm9vdDsKKwogLyogWFhYCiAgKiBkaXNhYmxlIGhsdCBkdXJpbmcgY2VydGFpbiBjcml0aWNhbCBpL28gb3BlcmF0aW9ucwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tc2gvdG9wb2xvZ3kuaAppbmRleCBmNDAyYTNiLi4zNGNkYjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3RvcG9sb2d5LmgKQEAgLTE2LDcgKzE2LDcgQEAKIAkuY2FjaGVfbmljZV90cmllcwk9IDIsCQkJXAogCS5idXN5X2lkeAkJPSAzLAkJCVwKIAkuaWRsZV9pZHgJCT0gMiwJCQlcCi0JLm5ld2lkbGVfaWR4CQk9IDAsCQkJXAorCS5uZXdpZGxlX2lkeAkJPSAyLAkJCVwKIAkud2FrZV9pZHgJCT0gMSwJCQlcCiAJLmZvcmtleGVjX2lkeAkJPSAxLAkJCVwKIAkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91YWNjZXNzXzMyLmggYi9pbmNsdWRlL2FzbS1zaC91YWNjZXNzXzMyLmgKaW5kZXggYzAzMThiNi4uMWU0MWZkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdWFjY2Vzc18zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3VhY2Nlc3NfMzIuaApAQCAtNTUsMTMgKzU1LDEwIEBACiAgKiBJZiB3ZSBkb24ndCBoYXZlIGFuIE1NVSAob3IgaWYgaXRzIGRpc2FibGVkKSB0aGUgb25seSB0aGluZyB3ZSByZWFsbHkgaGF2ZQogICogdG8gbG9vayBvdXQgZm9yIGlzIGlmIHRoZSBhZGRyZXNzIHJlc2lkZXMgc29tZXdoZXJlIG91dHNpZGUgb2Ygd2hhdAogICogYXZhaWxhYmxlIFJBTSB3ZSBoYXZlLgotICoKLSAqIFRPRE86IFRoaXMgY2hlY2sgY291bGQgcHJvYmFibHkgYWxzbyBzdGFuZCB0byBiZSByZXN0cmljdGVkIHNvbWV3aGF0IG1vcmUuLgotICogdGhvdWdoIGl0IHN0aWxsIGRvZXMgdGhlIFJpZ2h0IFRoaW5nKHRtKSBmb3IgdGhlIHRpbWUgYmVpbmcuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fYWNjZXNzX29rKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiAoKGFkZHIgPj0gbWVtb3J5X3N0YXJ0KSAmJiAoKGFkZHIgKyBzaXplKSA8IG1lbW9yeV9lbmQpKTsKKwlyZXR1cm4gMTsKIH0KICNlbHNlIC8qIENPTkZJR19NTVUgKi8KICNkZWZpbmUgX19hZGRyX29rKGFkZHIpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL0tidWlsZCBiL2luY2x1ZGUvYXNtLXNwYXJjL0tidWlsZAppbmRleCBjNmE1NWNmLi42NzEyMjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvS2J1aWxkCkBAIC01LDcgKzUsNiBAQAogaGVhZGVyLXkgKz0gYnBwLmgKIGhlYWRlci15ICs9IGpzZmxhc2guaAogaGVhZGVyLXkgKz0gb3BlbnByb21pby5oCi1oZWFkZXIteSArPSBwY29uZi5oCiBoZWFkZXIteSArPSByZWcuaAogaGVhZGVyLXkgKz0gdHJhcHMuaAogaGVhZGVyLXkgKz0gdmZjX2lvY3Rscy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hLm91dC1jb3JlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hLm91dC1jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZmQzMzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYS5vdXQtY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyogYS5vdXQgY29yZWR1bXAgcmVnaXN0ZXIgZHVtcGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX0FTTV9BX09VVF9DT1JFX0gKLSNkZWZpbmUgX0FTTV9BX09VVF9DT1JFX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLQotLyoKLSAqIGZpbGwgaW4gdGhlIHVzZXIgc3RydWN0dXJlIGZvciBhbiBhLm91dCBjb3JlIGR1bXAKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGFvdXRfZHVtcF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyICpkdW1wKQotewotCXVuc2lnbmVkIGxvbmcgZmlyc3Rfc3RhY2tfcGFnZTsKLQotCWR1bXAtPm1hZ2ljID0gU1VOT1NfQ09SRV9NQUdJQzsKLQlkdW1wLT5sZW4gPSBzaXplb2Yoc3RydWN0IHVzZXIpOwotCWR1bXAtPnJlZ3MucHNyID0gcmVncy0+cHNyOwotCWR1bXAtPnJlZ3MucGMgPSByZWdzLT5wYzsKLQlkdW1wLT5yZWdzLm5wYyA9IHJlZ3MtPm5wYzsKLQlkdW1wLT5yZWdzLnkgPSByZWdzLT55OwotCS8qIGZ1Y2sgbWUgcGxlbnR5ICovCi0JbWVtY3B5KCZkdW1wLT5yZWdzLnJlZ3NbMF0sICZyZWdzLT51X3JlZ3NbMV0sIChzaXplb2YodW5zaWduZWQgbG9uZykgKiAxNSkpOwotCWR1bXAtPnVleGVjID0gY3VycmVudC0+dGhyZWFkLmNvcmVfZXhlYzsKLQlkdW1wLT51X3RzaXplID0gKCgodW5zaWduZWQgbG9uZykgY3VycmVudC0+bW0tPmVuZF9jb2RlKSAtCi0JCSgodW5zaWduZWQgbG9uZykgY3VycmVudC0+bW0tPnN0YXJ0X2NvZGUpKSAmIH4oUEFHRV9TSVpFIC0gMSk7Ci0JZHVtcC0+dV9kc2l6ZSA9ICgodW5zaWduZWQgbG9uZykgKGN1cnJlbnQtPm1tLT5icmsgKyAoUEFHRV9TSVpFLTEpKSk7Ci0JZHVtcC0+dV9kc2l6ZSAtPSBkdW1wLT51X3RzaXplOwotCWR1bXAtPnVfZHNpemUgJj0gfihQQUdFX1NJWkUgLSAxKTsKLQlmaXJzdF9zdGFja19wYWdlID0gKHJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSAmIH4oUEFHRV9TSVpFIC0gMSkpOwotCWR1bXAtPnVfc3NpemUgPSAoVEFTS19TSVpFIC0gZmlyc3Rfc3RhY2tfcGFnZSkgJiB+KFBBR0VfU0laRSAtIDEpOwotCW1lbWNweSgmZHVtcC0+ZnB1LmZwc3RhdHVzLmZyZWdzLnJlZ3NbMF0sICZjdXJyZW50LT50aHJlYWQuZmxvYXRfcmVnc1swXSwgKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDMyKSk7Ci0JZHVtcC0+ZnB1LmZwc3RhdHVzLmZzciA9IGN1cnJlbnQtPnRocmVhZC5mc3I7Ci0JZHVtcC0+ZnB1LmZwc3RhdHVzLmZsYWdzID0gZHVtcC0+ZnB1LmZwc3RhdHVzLmV4dHJhID0gMDsKLQlkdW1wLT5mcHUuZnBzdGF0dXMuZnBxX2NvdW50ID0gY3VycmVudC0+dGhyZWFkLmZwcWRlcHRoOwotCW1lbWNweSgmZHVtcC0+ZnB1LmZwc3RhdHVzLmZwcVswXSwgJmN1cnJlbnQtPnRocmVhZC5mcHF1ZXVlWzBdLAotCSAgICAgICAoKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDIpICogMTYpKTsKLQlkdW1wLT5zaWdjb2RlID0gMDsKLX0KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX0FfT1VUX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2Eub3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMWMzNzQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSNpZm5kZWYgX19TUEFSQ19BX09VVF9IX18KLSNkZWZpbmUgX19TUEFSQ19BX09VVF9IX18KLQotI2RlZmluZSBTUEFSQ19QR1NJWkUgICAgMHgyMDAwICAgICAgICAvKiBUaGFua3MgdG8gdGhlIHN1bjQgYXJjaGl0ZWN0dXJlLi4uICovCi0jZGVmaW5lIFNFR01FTlRfU0laRSAgICBTUEFSQ19QR1NJWkUgIC8qIHdoZWUuLi4gKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IGV4ZWMgewotCXVuc2lnbmVkIGNoYXIgYV9keW5hbWljOjE7ICAgICAgLyogQSBfX0RZTkFNSUMgaXMgaW4gdGhpcyBpbWFnZSAqLwotCXVuc2lnbmVkIGNoYXIgYV90b29sdmVyc2lvbjo3OwotCXVuc2lnbmVkIGNoYXIgYV9tYWNodHlwZTsKLQl1bnNpZ25lZCBzaG9ydCBhX2luZm87Ci0JdW5zaWduZWQgaW50IGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgYV9ic3M7CQkvKiBsZW5ndGggb2YgYnNzLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBhX2VudHJ5OwkJLyogd2hlcmUgcHJvZ3JhbSBiZWdpbnMgKi8KLQl1bnNpZ25lZCBpbnQgYV90cnNpemU7Ci0JdW5zaWduZWQgaW50IGFfZHJzaXplOwotfTsKLQotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotLyogV2hlcmUgaW4gdGhlIGZpbGUgZG9lcyB0aGUgdGV4dCBpbmZvcm1hdGlvbiBiZWdpbj8gKi8KLSNkZWZpbmUgTl9UWFRPRkYoeCkgICAgIChOX01BR0lDKHgpID09IFpNQUdJQyA/IDAgOiBzaXplb2YgKHN0cnVjdCBleGVjKSkKLQotLyogV2hlcmUgZG8gdGhlIFN5bWJvbHMgc3RhcnQ/ICovCi0jZGVmaW5lIE5fU1lNT0ZGKHgpICAgICAoTl9UWFRPRkYoeCkgKyAoeCkuYV90ZXh0ICsgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHgpLmFfZGF0YSArICh4KS5hX3Ryc2l6ZSArICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHgpLmFfZHJzaXplKQotCi0vKiBXaGVyZSBkb2VzIHRleHQgc2VnbWVudCBnbyBpbiBtZW1vcnkgYWZ0ZXIgYmVpbmcgbG9hZGVkPyAqLwotI2RlZmluZSBOX1RYVEFERFIoeCkgICAgKHVuc2lnbmVkIGxvbmcpKCgoTl9NQUdJQyh4KSA9PSBaTUFHSUMpICYmIFwKLQkgICAgICAgICAgICAgICAgICgoeCkuYV9lbnRyeSA8IFNQQVJDX1BHU0laRSkpID8gICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBTUEFSQ19QR1NJWkUpCi0KLS8qIEFuZCBzYW1lIGZvciB0aGUgZGF0YSBzZWdtZW50Li4gKi8KLSNkZWZpbmUgTl9EQVRBRERSKHgpIChOX01BR0lDKHgpPT1PTUFHSUMgPyAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAoTl9UWFRBRERSKHgpICsgKHgpLmFfdGV4dCkgIFwKLQkJICAgICAgIDogKHVuc2lnbmVkIGxvbmcpIChfTl9TRUdNRU5UX1JPVU5EIChfTl9UWFRFTkRBRERSKHgpKSkpCi0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKgotICogU3BhcmMgcmVsb2NhdGlvbiB0eXBlcwotICovCi1lbnVtIHJlbG9jX3R5cGUKLXsKLQlSRUxPQ184LAotCVJFTE9DXzE2LAotCVJFTE9DXzMyLAkvKiBzaW1wbGVzdCByZWxvY3MgKi8KLQlSRUxPQ19ESVNQOCwKLQlSRUxPQ19ESVNQMTYsCi0JUkVMT0NfRElTUDMyLAkvKiBEaXNwJ3MgKHBjLXJlbCkgKi8KLQlSRUxPQ19XRElTUDMwLAotCVJFTE9DX1dESVNQMjIsICAvKiBTUiB3b3JkIGRpc3AncyAqLwotCVJFTE9DX0hJMjIsCi0JUkVMT0NfMjIsCS8qIFNSIDIyLWJpdCByZWxvY3MgKi8KLQlSRUxPQ18xMywKLQlSRUxPQ19MTzEwLAkvKiBTUiAxMyYxMC1iaXQgcmVsb2NzICovCi0JUkVMT0NfU0ZBX0JBU0UsCi0JUkVMT0NfU0ZBX09GRjEzLCAvKiBTUiBTLkYuQS4gcmVsb2NzICovCi0JUkVMT0NfQkFTRTEwLAotCVJFTE9DX0JBU0UxMywKLQlSRUxPQ19CQVNFMjIsCS8qIGJhc2VfcmVsYXRpdmUgcGljICovCi0JUkVMT0NfUEMxMCwKLQlSRUxPQ19QQzIyLAkvKiBzcGVjaWFsIHBjLXJlbCBwaWMgKi8KLQlSRUxPQ19KTVBfVEJMLAkvKiBqbXBfdGJsX3JlbCBpbiBwaWMgKi8KLQlSRUxPQ19TRUdPRkYxNiwJLyogU2hMaWIgb2Zmc2V0LWluLXNlZyAqLwotCVJFTE9DX0dMT0JfREFULAotCVJFTE9DX0pNUF9TTE9ULAotCVJFTE9DX1JFTEFUSVZFIAkvKiBydGxkIHJlbG9jcyAqLwotfTsKLQotLyoKLSAqIEZvcm1hdCBvZiBhIHJlbG9jYXRpb24gZGF0dW0uCi0gKi8KLXN0cnVjdCByZWxvY2F0aW9uX2luZm8gLyogdXNlZCB3aGVuIGhlYWRlci5hX21hY2h0eXBlID09IE1fU1BBUkMgKi8KLXsKLSAgICAgICAgdW5zaWduZWQgaW50ICAgIHJfYWRkcmVzczsgIC8qIHJlbG9jYXRpb24gYWRkciAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgICAgcl9pbmRleDoyNDsgLyogc2VnbWVudCBpbmRleCBvciBzeW1ib2wgaW5kZXggKi8KLSAgICAgICAgdW5zaWduZWQgaW50ICAgIHJfZXh0ZXJuOjE7IC8qIGlmIEYsIHJfaW5kZXg9PVNFRyM7IGlmIFQsIFNZTSBpZHggKi8KLSAgICAgICAgdW5zaWduZWQgaW50ICAgIHJfcGFkOjI7ICAgIC8qIDx1bnVzZWQ+ICovCi0gICAgICAgIGVudW0gcmVsb2NfdHlwZSByX3R5cGU6NTsgICAvKiB0eXBlIG9mIHJlbG9jYXRpb24gdG8gcGVyZm9ybSAqLwotICAgICAgICBpbnQgICAgICAgICAgICAgcl9hZGRlbmQ7ICAgLyogYWRkZW5kIGZvciByZWxvY2F0aW9uIHZhbHVlICovCi19OwotCi0jZGVmaW5lIE5fUkVMT0NBVElPTl9JTkZPX0RFQ0xBUkVEIDEKLQotI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwotCi0jZW5kaWYgLyogX19TUEFSQ19BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKaW5kZXggZGJlN2E1OC4uZDM5NzhlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAvKiBPdXIgbG93LWxldmVsIGVudHJ5IHBvaW50IGluIGFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgKi8KIGV4dGVybiBpbnQgc3BhcmNfZmxvcHB5X3JlcXVlc3RfaXJxKGludCBpcnEsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkJICAgIGlycXJldHVybl90ICgqaXJxX2hhbmRsZXIpKGludCBpcnEsIHZvaWQgKikpOworCQkJCSAgICBpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyKTsKIAogc3RhdGljIGludCBzdW5fZmRfcmVxdWVzdF9pcnEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2hlYWQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2hlYWQuaAppbmRleCAxYTAzYzI4Li5mY2RiYTUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9oZWFkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaGVhZC5oCkBAIC00Niw0NSArNDYsMTIgQEAKICAgICAgICAgYiBsaW51eF9zcGFyY19zeXNjYWxsOyBcCiAgICAgICAgIHJkICVwc3IsICVsMDsKIAotLyogU29mdHdhcmUgdHJhcCBmb3IgU3VuT1M0LjEueCBzeXN0ZW0gY2FsbHMuICovCi0jZGVmaW5lIFNVTk9TX1NZU0NBTExfVFJBUCBcCi0gICAgICAgIHJkICVwc3IsICVsMDsgXAotICAgICAgICBzZXRoaSAlaGkoc3Vub3Nfc3lzX3RhYmxlKSwgJWw3OyBcCi0gICAgICAgIGIgbGludXhfc3BhcmNfc3lzY2FsbDsgXAotICAgICAgICBvciAlbDcsICVsbyhzdW5vc19zeXNfdGFibGUpLCAlbDc7Ci0KLSNkZWZpbmUgU1VOT1NfTk9fU1lTQ0FMTF9UUkFQIFwKLSAgICAgICAgYiBzdW5vc19zeXNjYWxsOyBcCi0gICAgICAgIHJkICVwc3IsICVsMDsgXAotICAgICAgICBub3A7IFwKLSAgICAgICAgbm9wOwotCi0vKiBTb2Z0d2FyZSB0cmFwIGZvciBTbG93YXJpcyBzeXN0ZW0gY2FsbHMuICovCi0jZGVmaW5lIFNPTEFSSVNfU1lTQ0FMTF9UUkFQIFwKLSAgICAgICAgYiBzb2xhcmlzX3N5c2NhbGw7IFwKLSAgICAgICAgcmQgJXBzciwgJWwwOyBcCi0gICAgICAgIG5vcDsgXAotICAgICAgICBub3A7Ci0KLSNkZWZpbmUgSU5ESVJFQ1RfU09MQVJJU19TWVNDQUxMKHgpIFwKLQltb3YgeCwgJWcxOyBcCi0JYiBzb2xhcmlzX3N5c2NhbGw7IFwKLQlyZCAlcHNyLCAlbDA7IFwKLQlub3A7Ci0KICNkZWZpbmUgQlJFQUtQT0lOVF9UUkFQIFwKIAliIGJyZWFrcG9pbnRfdHJhcDsgXAogCXJkICVwc3IsJWwwOyBcCiAJbm9wOyBcCiAJbm9wOwogCi0vKiBTb2Z0d2FyZSB0cmFwIGZvciBTcGFyYy1uZXRic2Qgc3lzdGVtIGNhbGxzLiAqLwotI2RlZmluZSBORVRCU0RfU1lTQ0FMTF9UUkFQIFwKLSAgICAgICAgc2V0aGkgJWhpKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCi0gICAgICAgIG9yICVsNywgJWxvKHN5c19jYWxsX3RhYmxlKSwgJWw3OyBcCi0gICAgICAgIGIgYnNkX3N5c2NhbGw7IFwKLSAgICAgICAgcmQgJXBzciwgJWwwOwotCiAvKiBUaGUgR2V0IENvbmRpdGlvbiBDb2RlcyBzb2Z0d2FyZSB0cmFwIGZvciB1c2VybGFuZC4gKi8KICNkZWZpbmUgR0VUQ0NfVFJBUCBcCiAgICAgICAgIGIgZ2V0Y2NfdHJhcF9oYW5kbGVyOyBtb3YgJXBzciwgJWwwOyBub3A7IG5vcDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lkZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaWRlLmgKaW5kZXggNDA3NmNiNS4uYWZkMTczNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaWRlLmgKQEAgLTE3LDggKzE3LDYgQEAKICN1bmRlZiAgTUFYX0hXSUZTCiAjZGVmaW5lIE1BWF9IV0lGUwkyCiAKLSNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KLQogI2RlZmluZSBfX2lkZV9pbnNsKGRhdGFfcmVnLCBidWZmZXIsIHdjb3VudCkgXAogCV9faWRlX2luc3coZGF0YV9yZWcsIGJ1ZmZlciwgKHdjb3VudCk8PDEpCiAjZGVmaW5lIF9faWRlX291dHNsKGRhdGFfcmVnLCBidWZmZXIsIHdjb3VudCkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaAppbmRleCAwNThjMjA2Li4zZjRkMDA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pb2N0bHMuaApAQCAtNDMsOCArNDMsNiBAQAogI2RlZmluZSBfX1RJT0NTRVRYICAgICAgICBfSU9XKCd0JywgMzQsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KICNkZWZpbmUgX19USU9DR0VUWCAgICAgICAgX0lPUigndCcsIDM1LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCiAjZGVmaW5lIFRJT0NDT05TCV9JTygndCcsIDM2KQotI2RlZmluZSBfX1RJT0NTU0laRSAgICAgX0lPVygndCcsIDM3LCBzdHJ1Y3Qgc3Vub3NfdHR5c2l6ZSkgLyogU3VuT1MgU3BlY2lmaWMgKi8KLSNkZWZpbmUgX19USU9DR1NJWkUgICAgIF9JT1IoJ3QnLCAzOCwgc3RydWN0IHN1bm9zX3R0eXNpemUpIC8qIFN1bk9TIFNwZWNpZmljICovCiAjZGVmaW5lIFRJT0NHU09GVENBUglfSU9SKCd0JywgMTAwLCBpbnQpCiAjZGVmaW5lIFRJT0NTU09GVENBUglfSU9XKCd0JywgMTAxLCBpbnQpCiAjZGVmaW5lIF9fVElPQ1VDTlRMICAgICAgIF9JT1coJ3QnLCAxMDIsIGludCkgLyogU3VuT1MgU3BlY2lmaWMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2t2bS5oIGIvaW5jbHVkZS9hc20tc3BhcmMva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1NDc4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fU1BBUkNfSAorI2RlZmluZSBfX0xJTlVYX0tWTV9TUEFSQ19ICisKKy8qIHNwYXJjIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW1hbi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW1hbi5oCmluZGV4IGI3ZGM0MGIuLmUxOGJlOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL21tYW4uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tbWFuLmgKQEAgLTIyLDE5ICsyMiw2IEBACiAjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCiAKLS8qIFhYWCBOZWVkIHRvIGFkZCBmbGFncyB0byBTdW5PUydzIG1jdGwsIG1sb2NrYWxsLCBhbmQgbWFkdmlzZSBzeXN0ZW0KLSAqIFhYWCBjYWxscy4KLSAqLwotCi0vKiBTdW5PUyBzeXNfbWN0bCgpIHN0dWZmLi4uICovCi0jZGVmaW5lIE1DX1NZTkMgICAgICAgICAxICAvKiBTeW5jIHBhZ2VzIGluIG1lbW9yeSB3aXRoIHN0b3JhZ2UgKHVzdS4gYSBmaWxlKSAqLwotI2RlZmluZSBNQ19MT0NLICAgICAgICAgMiAgLyogTG9jayBwYWdlcyBpbnRvIGNvcmUgcmFtLCBkbyBub3QgYWxsb3cgc3dhcHBpbmcgb2YgdGhlbSAqLwotI2RlZmluZSBNQ19VTkxPQ0sgICAgICAgMyAgLyogVW5sb2NrIHBhZ2VzIGxvY2tlZCB2aWEgcHJldmlvdXMgbWN0bCgpIHdpdGggTUNfTE9DSyBhcmcgKi8KLSNkZWZpbmUgTUNfTE9DS0FTICAgICAgIDUgIC8qIExvY2sgYW4gZW50aXJlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyAqLwotI2RlZmluZSBNQ19VTkxPQ0tBUyAgICAgNiAgLyogVW5sb2NrIGVudGlyZSBhZGRyZXNzIHNwYWNlIG9mIGNhbGxpbmcgcHJvY2VzcyAqLwotCi0jZGVmaW5lIE1BRFZfRlJFRQkweDUJCS8qIChTb2xhcmlzKSBjb250ZW50cyBjYW4gYmUgZnJlZWQgKi8KLQogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIGFyY2hfbW1hcF9jaGVjawlzcGFyY19tbWFwX2NoZWNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9uYW1laS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbmFtZWkuaAppbmRleCBmMjQ2MWU4Li42MTgzNDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9uYW1laS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL25hbWVpLmgKQEAgLTgsMTkgKzgsNiBAQAogI2lmbmRlZiBfX1NQQVJDX05BTUVJX0gKICNkZWZpbmUgX19TUEFSQ19OQU1FSV9ICiAKLSNkZWZpbmUgU1BBUkNfQlNEX0VNVUwgIi91c3IvZ25lbXVsL3N1bm9zLyIKLSNkZWZpbmUgU1BBUkNfU09MX0VNVUwgIi91c3IvZ25lbXVsL3NvbGFyaXMvIgotCi1zdGF0aWMgaW5saW5lIGNoYXIgKiBfX2VtdWxfcHJlZml4KHZvaWQpCi17Ci0Jc3dpdGNoIChjdXJyZW50LT5wZXJzb25hbGl0eSkgewotCWNhc2UgUEVSX1NVTk9TOgotCQlyZXR1cm4gU1BBUkNfQlNEX0VNVUw7Ci0JY2FzZSBQRVJfU1ZSNDoKLQkJcmV0dXJuIFNQQVJDX1NPTF9FTVVMOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwotCX0KLX0KKyNkZWZpbmUgX19lbXVsX3ByZWZpeCgpIE5VTEwKIAogI2VuZGlmIC8qIF9fU1BBUkNfTkFNRUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGNvbmYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Bjb25mLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3M2MxZjEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcGNvbmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qICRJZDogcGNvbmYuaCx2IDEuMyAxOTk2LzA0LzI1IDA2OjEzOjI1IGRhdmVtIEV4cCAkCi0gKiBwY29uZi5oOiBwYXRoY29uZigpIGFuZCBmcGF0aGNvbmYoKSBkZWZpbmVzIGZvciBTdW5PUwotICogICAgICAgICAgc3lzdGVtIGNhbGwgY29tcGF0aWJpbGl0eS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpZm5kZWYgX1NQQVJDX1BDT05GX0gKLSNkZWZpbmUgX1NQQVJDX1BDT05GX0gKLQotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Ci0KLSNkZWZpbmUgX1BDT05GX0xJTksgICAgICAgMSAvKiBNYXggbnVtYmVyIG9mIGxpbmtzIHRvIGFuIG9iamVjdCAgICAgICAgKi8KLSNkZWZpbmUgX1BDT05GX0NBTk9OICAgICAgMiAvKiBUVFkgaW5wdXQgYnVmZmVyIGxpbmUgc2l6ZSAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDT05GX0lOUFVUICAgICAgMyAvKiBCaWdnZXN0IHBhY2tldCBhIHR0eSBjYW4gaW1iaWJlIGF0IG9uY2UgKi8KLSNkZWZpbmUgX1BDT05GX05BTUUgICAgICAgNCAvKiBGaWxlbmFtZSBsZW5ndGggbWF4ICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDT05GX1BBVEggICAgICAgNSAvKiBNYXggc2l6ZSBvZiBhIHBhdGhuYW1lICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDT05GX1BJUEUgICAgICAgNiAvKiBCdWZmZXIgc2l6ZSBmb3IgYSBwaXBlICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDT05GX0NIUkVTVFJJQ1QgNyAvKiBDYW4gb25seSByb290IGNob3duIGZpbGVzPyAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDT05GX05PVFJVTkMgICAgOCAvKiBBcmUgcGF0aG5hbWVzIHRydW5jYXRlZCBpZiB0b28gYmlnPyAgICAgKi8KLSNkZWZpbmUgX1BDT05GX1ZESVNBQkxFICAgOSAvKiBNYWdpYyBjaGFyIHRvIGRpc2FibGUgc3BlY2lhbCB0dHkgY2hhcnMgKi8KLSNkZWZpbmUgX1BDT05GX01BWFBDT05GICAgOQotCi0jZW5kaWYgLyogIShfU1BBUkNfUENPTkZfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKaW5kZXggNDBiMWU0MS4uZTMwMDY5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvY2Vzc29yLmgKQEAgLTEzLDggKzEzLDYgQEAKICAqLwogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBfX2FzbV9fKCJzZXRoaSAlJWhpKDFmKSwgJTA7IG9yICUwLCAlJWxvKDFmKSwgJTA7XG4xOiIgOiAiPXIiIChwYykpOyBwYzsgfSkKIAotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+Ci0KICNpbmNsdWRlIDxhc20vcHNyLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9oZWFkLmg+CkBAIC02Nyw3ICs2NSw2IEBACiAJc3RydWN0IGZwcQlmcHF1ZXVlWzE2XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCW1tX3NlZ21lbnRfdCBjdXJyZW50X2RzOwotCXN0cnVjdCBleGVjIGNvcmVfZXhlYzsgICAgIC8qIGp1c3Qgd2hhdCBpdCBzYXlzLiAqLwogCWludCBuZXdfc2lnbmFsOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZW1hcGhvcmUuaAppbmRleCA4MDE4ZjlmLi5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zZW1hcGhvcmUuaApAQCAtMSwxOTIgKzEgQEAKLSNpZm5kZWYgX1NQQVJDX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9TUEFSQ19TRU1BUEhPUkVfSAotCi0vKiBEaW5reSwgZ29vZCBmb3Igbm90aGluZywganVzdCBiYXJlbHkgaXJxIHNhZmUsIFNwYXJjIHNlbWFwaG9yZXMuICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KLXN0cnVjdCBzZW1hcGhvcmUgewotCWF0b21pYzI0X3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQzI0X0lOSVQobiksCQkJCVwKLQkuc2xlZXBlcnMJPSAwLAkJCQkJCVwKLQkud2FpdAkJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkJXAotfQotCi0jZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KSBcCi0Jc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkKLQotI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKLXsKLQlhdG9taWMyNF9zZXQoJnNlbS0+Y291bnQsIHZhbCk7Ci0Jc2VtLT5zbGVlcGVycyA9IDA7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWV4dGVybiB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWV4dGVybiBpbnQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1leHRlcm4gaW50IF9fZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotZXh0ZXJuIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlyZWdpc3RlciB2b2xhdGlsZSBpbnQgKnB0ciBhc20oImcxIik7Ci0JcmVnaXN0ZXIgaW50IGluY3JlbWVudCBhc20oImcyIik7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0JcHRyID0gJihzZW0tPmNvdW50LmNvdW50ZXIpOwotCWluY3JlbWVudCA9IDE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkibW92CSUlbzcsICUlZzRcblx0IgotCSJjYWxsCV9fX2F0b21pYzI0X3N1YlxuXHQiCi0JIiBhZGQJJSVvNywgOCwgJSVvN1xuXHQiCi0JInRzdAklJWcyXG5cdCIKLQkiYmwJMmZcblx0IgotCSIgbm9wXG4iCi0JIjE6XG5cdCIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIyOlxuXHQiCi0JInNhdmUJJSVzcCwgLTY0LCAlJXNwXG5cdCIKLQkibW92CSUlZzEsICUlbDFcblx0IgotCSJtb3YJJSVnNSwgJSVsNVxuXHQiCi0JImNhbGwJJTNcblx0IgotCSIgbW92CSUlZzEsICUlbzBcblx0IgotCSJtb3YJJSVsMSwgJSVnMVxuXHQiCi0JImJhCTFiXG5cdCIKLQkiIHJlc3RvcmUgJSVsNSwgJSVnMCwgJSVnNVxuXHQiCi0JIi5wcmV2aW91c1xuIgotCTogIj0mciIgKGluY3JlbWVudCkKLQk6ICIwIiAoaW5jcmVtZW50KSwgInIiIChwdHIpLCAiaSIgKF9fZG93bikKLQk6ICJnMyIsICJnNCIsICJnNyIsICJtZW1vcnkiLCAiY2MiKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JcmVnaXN0ZXIgdm9sYXRpbGUgaW50ICpwdHIgYXNtKCJnMSIpOwotCXJlZ2lzdGVyIGludCBpbmNyZW1lbnQgYXNtKCJnMiIpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCXB0ciA9ICYoc2VtLT5jb3VudC5jb3VudGVyKTsKLQlpbmNyZW1lbnQgPSAxOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIm1vdgklJW83LCAlJWc0XG5cdCIKLQkiY2FsbAlfX19hdG9taWMyNF9zdWJcblx0IgotCSIgYWRkCSUlbzcsIDgsICUlbzdcblx0IgotCSJ0c3QJJSVnMlxuXHQiCi0JImJsCTJmXG5cdCIKLQkiIGNscgklJWcyXG4iCi0JIjE6XG5cdCIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIyOlxuXHQiCi0JInNhdmUJJSVzcCwgLTY0LCAlJXNwXG5cdCIKLQkibW92CSUlZzEsICUlbDFcblx0IgotCSJtb3YJJSVnNSwgJSVsNVxuXHQiCi0JImNhbGwJJTNcblx0IgotCSIgbW92CSUlZzEsICUlbzBcblx0IgotCSJtb3YJJSVsMSwgJSVnMVxuXHQiCi0JIm1vdgklJWw1LCAlJWc1XG5cdCIKLQkiYmEJMWJcblx0IgotCSIgcmVzdG9yZSAlJW8wLCAlJWcwLCAlJWcyXG5cdCIKLQkiLnByZXZpb3VzXG4iCi0JOiAiPSZyIiAoaW5jcmVtZW50KQotCTogIjAiIChpbmNyZW1lbnQpLCAiciIgKHB0ciksICJpIiAoX19kb3duX2ludGVycnVwdGlibGUpCi0JOiAiZzMiLCAiZzQiLCAiZzciLCAibWVtb3J5IiwgImNjIik7Ci0KLQlyZXR1cm4gaW5jcmVtZW50OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlyZWdpc3RlciB2b2xhdGlsZSBpbnQgKnB0ciBhc20oImcxIik7Ci0JcmVnaXN0ZXIgaW50IGluY3JlbWVudCBhc20oImcyIik7Ci0KLQlwdHIgPSAmKHNlbS0+Y291bnQuY291bnRlcik7Ci0JaW5jcmVtZW50ID0gMTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJtb3YJJSVvNywgJSVnNFxuXHQiCi0JImNhbGwJX19fYXRvbWljMjRfc3ViXG5cdCIKLQkiIGFkZAklJW83LCA4LCAlJW83XG5cdCIKLQkidHN0CSUlZzJcblx0IgotCSJibAkyZlxuXHQiCi0JIiBjbHIJJSVnMlxuIgotCSIxOlxuXHQiCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjpcblx0IgotCSJzYXZlCSUlc3AsIC02NCwgJSVzcFxuXHQiCi0JIm1vdgklJWcxLCAlJWwxXG5cdCIKLQkibW92CSUlZzUsICUlbDVcblx0IgotCSJjYWxsCSUzXG5cdCIKLQkiIG1vdgklJWcxLCAlJW8wXG5cdCIKLQkibW92CSUlbDEsICUlZzFcblx0IgotCSJtb3YJJSVsNSwgJSVnNVxuXHQiCi0JImJhCTFiXG5cdCIKLQkiIHJlc3RvcmUgJSVvMCwgJSVnMCwgJSVnMlxuXHQiCi0JIi5wcmV2aW91c1xuIgotCTogIj0mciIgKGluY3JlbWVudCkKLQk6ICIwIiAoaW5jcmVtZW50KSwgInIiIChwdHIpLCAiaSIgKF9fZG93bl90cnlsb2NrKQotCTogImczIiwgImc0IiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOwotCi0JcmV0dXJuIGluY3JlbWVudDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JcmVnaXN0ZXIgdm9sYXRpbGUgaW50ICpwdHIgYXNtKCJnMSIpOwotCXJlZ2lzdGVyIGludCBpbmNyZW1lbnQgYXNtKCJnMiIpOwotCi0JcHRyID0gJihzZW0tPmNvdW50LmNvdW50ZXIpOwotCWluY3JlbWVudCA9IDE7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkibW92CSUlbzcsICUlZzRcblx0IgotCSJjYWxsCV9fX2F0b21pYzI0X2FkZFxuXHQiCi0JIiBhZGQJJSVvNywgOCwgJSVvN1xuXHQiCi0JInRzdAklJWcyXG5cdCIKLQkiYmxlCTJmXG5cdCIKLQkiIG5vcFxuIgotCSIxOlxuXHQiCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjpcblx0IgotCSJzYXZlCSUlc3AsIC02NCwgJSVzcFxuXHQiCi0JIm1vdgklJWcxLCAlJWwxXG5cdCIKLQkibW92CSUlZzUsICUlbDVcblx0IgotCSJjYWxsCSUzXG5cdCIKLQkiIG1vdgklJWcxLCAlJW8wXG5cdCIKLQkibW92CSUlbDEsICUlZzFcblx0IgotCSJiYQkxYlxuXHQiCi0JIiByZXN0b3JlICUlbDUsICUlZzAsICUlZzVcblx0IgotCSIucHJldmlvdXNcbiIKLQk6ICI9JnIiIChpbmNyZW1lbnQpCi0JOiAiMCIgKGluY3JlbWVudCksICJyIiAocHRyKSwgImkiIChfX3VwKQotCTogImczIiwgImc0IiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOwotfQkKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qICEoX1NQQVJDX1NFTUFQSE9SRV9IKSAqLworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zb2NrZXQuaAppbmRleCAyZTJiZDBiLi5hMDBlMTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zb2NrZXQuaApAQCAtMjQsOSArMjQsNiBAQAogI2RlZmluZSBTT19TTkRUSU1FTyAgICAgMHg0MDAwCiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JMHg4MDAwCiAKLS8qIHdoYSE/Pz8gKi8KLSNkZWZpbmUgU09fRE9OVExJTkdFUiAgICh+U09fTElOR0VSKSAgLyogT2xkZXIgU3VuT1MgY29tcGF0LiBoYWNrICovCi0KICNkZWZpbmUgU09fU05EQlVGCTB4MTAwMQogI2RlZmluZSBTT19SQ1ZCVUYJMHgxMDAyCiAjZGVmaW5lIFNPX1NOREJVRkZPUkNFCTB4MTAwYQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc29sZXJybm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NvbGVycm5vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYmNlN2UuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc29sZXJybm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKiAkSWQ6IHNvbGVycm5vLmgsdiAxLjUgMTk5Ni8wNC8yNSAwNjoxMzozMiBkYXZlbSBFeHAgJAotICogc29sZXJybm8uaDogU29sYXJpcyBlcnJvciByZXR1cm4gY29kZXMgZm9yIGNvbXBhdGliaWxpdHkuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9TUEFSQ19TT0xFUlJOT19ICi0jZGVmaW5lIF9TUEFSQ19TT0xFUlJOT19ICi0KLSNkZWZpbmUgU09MX0VQRVJNICAgICAgICAgIDEgICAgIC8qIFJlcXVpcmVkIHN1cGVydXNlciBhY2Nlc3MgcGVybXMgICovCi0jZGVmaW5lIFNPTF9FTk9FTlQgICAgICAgICAyICAgICAvKiBGaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCAqLwotI2RlZmluZSBTT0xfRVNSQ0ggICAgICAgICAgMyAgICAgLyogUHJvY2VzcyBkaWQgbm90IGV4aXN0ICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VJTlRSICAgICAgICAgIDQgICAgIC8qIFN5c3RlbSBjYWxsIHdhcyBpbnRlcnJ1cHRlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FSU8gICAgICAgICAgICA1ICAgICAvKiBBbiBpL28gZXJyb3Igb2NjdXJyZWQgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5YSU8gICAgICAgICAgNiAgICAgLyogRGV2aWNlIG9yIEFkZHJlc3MgZG9lcyBub3QgZXhpc3QgKi8KLSNkZWZpbmUJU09MX0UyQklHICAgICAgICAgIDcJIC8qIFRvbyBtYW55IGFyZ3VtZW50cyB3ZXJlIGdpdmVuICAgICovCi0jZGVmaW5lCVNPTF9FTk9FWEVDICAgICAgICA4ICAgICAvKiBIZWFkZXIgb2YgZXhlY3V0YWJsZSB3YXMgbXVuZ2VkICAqLwotI2RlZmluZQlTT0xfRUJBREYgICAgICAgICAgOSAgICAgLyogQm9ndXMgZmlsZSBudW1iZXIgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VDSElMRCAgICAgICAgIDEwICAgIC8qIE5vIGNoaWxkcmVuIG9mIHByb2Nlc3MgZXhpc3QgICAgICovCi0jZGVmaW5lCVNPTF9FQUdBSU4gICAgICAgICAxMSAgICAvKiBiZWVwIGJlZXAsICJ0cnkgYWdhaW4gbGF0ZXIiICAgICAqLwotI2RlZmluZQlTT0xfRU5PTUVNICAgICAgICAgMTIgICAgLyogTm8gbWVtb3J5IGF2YWlsYWJsZSAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VBQ0NFUyAgICAgICAgIDEzICAgIC8qIEFjY2VzcyBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FRkFVTFQgICAgICAgICAxNCAgICAvKiBBZGRyZXNzIHBhc3NlZCB3YXMgaW52YWxpZCAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PVEJMSyAgICAgICAgMTUgICAgLyogYmxrZGV2IG9wIG9uIG5vbi1ibG9jayBkZXZpY2UgICAgKi8KLSNkZWZpbmUJU09MX0VCVVNZICAgICAgICAgIDE2ICAgIC8qIE1vdW50ZWQgZGV2aWNlIHdhcyBidXN5ICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FRVhJU1QgICAgICAgICAxNyAgICAvKiBGaWxlIHNwZWNpZmllZCBhbHJlYWR5IGV4aXN0cyAgICAqLwotI2RlZmluZQlTT0xfRVhERVYgICAgICAgICAgMTggICAgLyogTGluayByZXF1ZXN0IGFjcm9zcyBkaWZmIGRldmljZXMgKi8KLSNkZWZpbmUJU09MX0VOT0RFViAgICAgICAgIDE5ICAgIC8qIERldmljZSBkb2VzIG5vdCBleGlzdCBvbiBzeXN0ZW0gICovCi0jZGVmaW5lCVNPTF9FTk9URElSICAgICAgICAyMCAgICAvKiBEaXIgb3BlcmF0aW9uIG9uIG5vbi1kaXJlY3RvcnkgICAqLwotI2RlZmluZQlTT0xfRUlTRElSICAgICAgICAgMjEgICAgLyogRmlsZSB3YXMgb2YgZGlyZWN0b3J5IHR5cGUgICAgICAgKi8KLSNkZWZpbmUJU09MX0VJTlZBTCAgICAgICAgIDIyICAgIC8qIEFyZ3VtZW50IHBhc3NlZCB3YXMgaW52YWxpZCAgICAgICovCi0jZGVmaW5lCVNPTF9FTkZJTEUgICAgICAgICAyMyAgICAvKiBObyBtb3JlIHJvb20gaW4gZmlsZSB0YWJsZSAgICAgICAqLwotI2RlZmluZQlTT0xfRU1GSUxFICAgICAgICAgMjQgICAgLyogUHJvYyBoYXMgdG9vIG1hbnkgZmlsZXMgb3BlbiAgICAgKi8KLSNkZWZpbmUJU09MX0VOT1RUWSAgICAgICAgIDI1ICAgIC8qIElvY3RsIHdhcyBpbnZhbGlkIGZvciByZXEgZGV2aWNlICovCi0jZGVmaW5lCVNPTF9FVFhUQlNZICAgICAgICAyNiAgICAvKiBUZXh0IGZpbGUgaW4gYnVzeSBzdGF0ZSAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUZCSUcgICAgICAgICAgMjcgICAgLyogVG9vIGJpZyBvZiBhIGZpbGUgZm9yIG9wZXJhdGlvbiAgKi8KLSNkZWZpbmUJU09MX0VOT1NQQyAgICAgICAgIDI4ICAgIC8qIERpc2sgaXMgZnVsbCAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FU1BJUEUgICAgICAgICAyOSAgICAvKiBTZWVrIGF0dGVtcHRlZCBvbiBub24tc2Vla2luZyBkZXYqLwotI2RlZmluZQlTT0xfRVJPRlMgICAgICAgICAgMzAgICAgLyogV3JpdGUgYXR0ZW1wdGVkIG9uIHJlYWQtb25seSBmcyAgKi8KLSNkZWZpbmUJU09MX0VNTElOSyAgICAgICAgIDMxICAgIC8qIFRvbyBtYW55IGxpbmtzIGluIGZpbGUgc2VhcmNoICAgICovCi0jZGVmaW5lCVNPTF9FUElQRSAgICAgICAgICAzMiAgICAvKiBDYWxsIGEgcGx1bWJlciAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRURPTSAgICAgICAgICAgMzMgICAgLyogQXJndW1lbnQgd2FzIG91dCBvZiBmY3QgZG9tYWluICAgKi8KLSNkZWZpbmUJU09MX0VSQU5HRSAgICAgICAgIDM0ICAgIC8qIENvdWxkIG5vdCByZXByZXNlbnQgbWF0aCByZXN1bHQgICovCi0jZGVmaW5lCVNPTF9FTk9NU0cgICAgICAgICAzNSAgICAvKiBNZXNzYWdlIG9mIHJlcSB0eXBlIGRvZXNuJ3QgZXhpc3QgKi8KLSNkZWZpbmUJU09MX0VJRFJNICAgICAgICAgIDM2ICAgIC8qIElkZW50aWZpZXIgaGFzIGJlZW4gcmVtb3ZlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FQ0hSTkcgICAgICAgICAzNyAgICAvKiBSZXEgY2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICAqLwotI2RlZmluZQlTT0xfRUwyTlNZTkMgICAgICAgMzggICAgLyogQ291bGQgbm90IHN5bmMgYXQgcnVuIGxldmVsIDIgICAgKi8KLSNkZWZpbmUJU09MX0VMM0hMVCAgICAgICAgIDM5ICAgIC8qIEhhbHRlZCBhdCBydW4gbGV2ZWwgMyAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FTDNSU1QgICAgICAgICA0MCAgICAvKiBSZXNldCBhdCBydW4gbGV2ZWwgMyAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUxOUk5HICAgICAgICAgNDEgICAgLyogT3V0IG9mIHJhbmdlIGxpbmsgbnVtYmVyICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VVTkFUQ0ggICAgICAgIDQyICAgIC8qIERyaXZlciBmb3IgcHJvdG9jb2wgbm90IGF0dGFjaGVkICovCi0jZGVmaW5lCVNPTF9FTk9DU0kgICAgICAgICA0MyAgICAvKiBDU0kgc3RydWN0dXJlIG5vdCBhcm91bmQgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUwySExUICAgICAgICAgNDQgICAgLyogSGFsdGVkIGF0IHJ1biBsZXZlbCAyICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VERUFETEsgICAgICAgIDQ1ICAgIC8qIERlYWRsb2NrIGNvbmRpdGlvbiBkZXRlY3RlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FTk9MQ0sgICAgICAgICA0NiAgICAvKiBSZWNvcmQgbG9ja3MgdW5hdmFpbGFibGUgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUNBTkNFTEVEICAgICAgNDcgICAgLyogQ2FuY2VsbGF0aW9uIG9mIG9wZXIuIGhhcHBlbmVkICAgKi8KLSNkZWZpbmUJU09MX0VOT1RTVVAgICAgICAgIDQ4ICAgIC8qIEF0dGVtcHQgb2YgdW5zdXBwb3J0ZWQgb3BlcmF0aW9uICovCi0jZGVmaW5lCVNPTF9FRFFVT1QgICAgICAgICA0OSAgICAvKiBVc2VycyBkaXNrIHF1b3RhIGV4Y2VlZGVkICAgICAgICAqLwotI2RlZmluZQlTT0xfRUJBREUgICAgICAgICAgNTAgICAgLyogSW52YWxpZCBleGNoYW5nZSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VCQURSICAgICAgICAgIDUxICAgIC8qIFJlcXVlc3QgZGVzY3JpcHRvciB3YXMgaW52YWxpZCAgICovCi0jZGVmaW5lCVNPTF9FWEZVTEwgICAgICAgICA1MiAgICAvKiBGdWxsIGV4Y2hhbmdlICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PQU5PICAgICAgICAgNTMgICAgLyogYW5vIGRvZXMgbm90IGV4aXN0ICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VCQURSUUMgICAgICAgIDU0ICAgIC8qIFJlcSBjb2RlIHdhcyBpbnZhbGlkICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FQkFEU0xUICAgICAgICA1NSAgICAvKiBCYWQgc2xvdCBudW1iZXIgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRURFQURMT0NLICAgICAgNTYgICAgLyogRGVhZGxvY2sgaW4gZnMgZXJyb3IgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VCRk9OVCAgICAgICAgIDU3ICAgIC8qIEZvbnQgZmlsZSBmb3JtYXQgaW52YWxpZCAgICAgICAgICovCi0vKiBZT1csIEkgTE9WRSBTWVNWIFNUUkVBTVMhISEhICovCi0jZGVmaW5lCVNPTF9FTk9TVFIgICAgICAgICA2MCAgICAvKiBTdHJlYW0tb3Agb24gbm9uLXN0cmVhbSBkZXYgICAgICAqLwotI2RlZmluZQlTT0xfRU5PREFUQSAgICAgICAgNjEgICAgLyogTm8gZGF0YSBhdmFpbCBhdCB0aGlzIHRpbWUgICAgICAgKi8KLSNkZWZpbmUJU09MX0VUSU1FICAgICAgICAgIDYyICAgIC8qIEV4cGlyYXRpb24gb2YgdGltZSBvY2N1cnJlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FTk9TUiAgICAgICAgICA2MyAgICAvKiBTdHJlYW1zIHJlc291cmNlcyBleGhhdXN0ZWQgICAgICAqLwotI2RlZmluZQlTT0xfRU5PTkVUICAgICAgICAgNjQgICAgLyogTm8gbmV0d29yayBjb25uZWN0ZWQgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VOT1BLRyAgICAgICAgIDY1ICAgIC8qIE5vbi1pbnN0YWxsZWQgcGFja2FnZSAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FUkVNT1RFICAgICAgICA2NiAgICAvKiBPYmplY3Qgd2FzIG9uIHJlbW90ZSBtYWNoaW5lICAgICAqLwotI2RlZmluZQlTT0xfRU5PTElOSyAgICAgICAgNjcgICAgLyogQ3V0IGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VBRFYgICAgICAgICAgIDY4ICAgIC8qIEVycm9yIGluIGFkdmVydGlzZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FU1JNTlQgICAgICAgICA2OSAgICAvKiBTb21lIG1hZ2ljIHNybW91bnQgcHJvYmxlbSAgICAgICAqLwotI2RlZmluZQlTT0xfRUNPTU0gICAgICAgICAgNzAgICAgLyogRHVyaW5nIHNlbmQsIGNvbW0gZXJyb3Igb2NjdXJyZWQgKi8KLSNkZWZpbmUJU09MX0VQUk9UTyAgICAgICAgIDcxICAgIC8qIFByb3RvY29sIGJvdGNoICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FTVVMVElIT1AgICAgICA3NCAgICAvKiBNdWx0aWhvcCBhdHRlbXB0ZWQgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUJBRE1TRyAgICAgICAgNzcgICAgLyogTWVzc2FnZSB3YXMgdW5yZWFkYWJsZSAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VOQU1FVE9PTE9ORyAgIDc4ICAgIC8qIFRvbyBsb25nIG9mIGEgcGF0aCBuYW1lICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FT1ZFUkZMT1cgICAgICA3OSAgICAvKiBEYXRhIHR5cGUgdG9vIHNtYWxsIGZvciBkYXR1bSAgICAqLwotI2RlZmluZQlTT0xfRU5PVFVOSVEgICAgICAgODAgICAgLyogTG9naWNhbCBuYW1lIHdhcyBub3QgdW5pcXVlICAgICAgKi8KLSNkZWZpbmUJU09MX0VCQURGRCAgICAgICAgIDgxICAgIC8qIE9wIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gZmQgICAgICovCi0jZGVmaW5lCVNPTF9FUkVNQ0hHICAgICAgICA4MiAgICAvKiBSZW1vdGUgYWRkcmVzcyBpcyBub3cgZGlmZmVyZW50ICAqLwotI2RlZmluZQlTT0xfRUxJQkFDQyAgICAgICAgODMgICAgLyogU2hhcmVkIGxpYiBjb3VsZCBub3QgYmUgYWNjZXNzZWQgKi8KLSNkZWZpbmUJU09MX0VMSUJCQUQgICAgICAgIDg0ICAgIC8qIFNoTGliIGlzIGNvcnJ1cHRlZCBpbiBzb21lIHdheSAgICovCi0jZGVmaW5lCVNPTF9FTElCU0NOICAgICAgICA4NSAgICAvKiBBLm91dCBTaExpYiBwcm9ibGVtcyAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUxJQk1BWCAgICAgICAgODYgICAgLyogRXhjZWVkZWQgU2hMaWIgbGlua2FnZSBsaW1pdCAgICAgKi8KLSNkZWZpbmUJU09MX0VMSUJFWEVDICAgICAgIDg3ICAgIC8qIEV4ZWN1dGlvbiBvZiBTaExpYiBhdHRlbXB0ZWQgICAgICovCi0jZGVmaW5lCVNPTF9FSUxTRVEgICAgICAgICA4OCAgICAvKiBCYWQgYnl0ZSBzZXF1ZW5jZSBmb3VuZCAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PU1lTICAgICAgICAgODkgICAgLyogSW52YWxpZCBmaWxlc3lzdGVtIG9wZXJhdGlvbiAgICAgKi8KLSNkZWZpbmUJU09MX0VMT09QICAgICAgICAgIDkwICAgIC8qIERldGVjdGVkIGxvb3AgaW4gc3ltYm9saWMgbGlua3MgICovCi0jZGVmaW5lCVNPTF9FUkVTVEFSVCAgICAgICA5MSAgICAvKiBTeXN0ZW0gY2FsbCBpcyByZXN0YXJ0YWJsZSAgICAgICAqLwotI2RlZmluZQlTT0xfRVNUUlBJUEUgICAgICAgOTIgICAgLyogRG8gbm90IHNsZWVwIGluIGhlYWQgb2Ygc3RyZWFtICAgKi8KLSNkZWZpbmUJU09MX0VOT1RFTVBUWSAgICAgIDkzICAgIC8qIFJtZGlyIG9mIG5vbi1lbXB0eSBkaXJlY3RvcnkgICAgICovCi0jZGVmaW5lCVNPTF9FVVNFUlMgICAgICAgICA5NCAgICAvKiBPdmVyIGFidW5kYW5jZSBvZiB1c2VycyBmb3IgdWZzICAqLwotI2RlZmluZQlTT0xfRU5PVFNPQ0sgICAgICAgOTUgICAgLyogU29jay1vcCBvbiBub24tc29jayAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VERVNUQUREUlJFUSAgIDk2ICAgIC8qIE5vIGRlc3QgYWRkciBnaXZlbiwgYnV0IG5lZWRlZCAgICovCi0jZGVmaW5lCVNPTF9FTVNHU0laRSAgICAgICA5NyAgICAvKiBNc2cgdG9vIGJpZyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRVBST1RPVFlQRSAgICAgOTggICAgLyogQmFkIHNvY2tldCBwcm90b2NvbCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VOT1BST1RPT1BUICAgIDk5ICAgIC8qIFVuYXZhaWxhYmxlIHByb3RvY29sICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FUFJPVE9OT1NVUFBPUlQgMTIwICAvKiBVbnN1cHBvcnRlZCBwcm90b2NvbCAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRVNPQ0tUTk9TVVBQT1JUIDEyMSAgLyogVW5zdXBwb3J0ZWQgc29ja2V0IHR5cGUgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VPUE5PVFNVUFAgICAgIDEyMiAgIC8qIFVuc3VwcG9ydGVkIHNvY2stb3AgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FUEZOT1NVUFBPUlQgICAxMjMgICAvKiBVbnN1cHBvcnRlZCBwcm90b2NvbCBmYW1pbHkgICAgICAqLwotI2RlZmluZQlTT0xfRUFGTk9TVVBQT1JUICAgMTI0ICAgLyogVW5zdXAgYWRkciBmYW1pbHkgZm9yIHByb3RvY29sICAgKi8KLSNkZWZpbmUJU09MX0VBRERSSU5VU0UgICAgIDEyNSAgIC8qIFJlcSBhZGRyIGlzIGFscmVhZHkgaW4gdXNlICAgICAgICovCi0jZGVmaW5lCVNPTF9FQUREUk5PVEFWQUlMICAxMjYgICAvKiBSZXEgYWRkciBub3QgYXZhaWxhYmxlIHJpZ2h0IG5vdyAqLwotI2RlZmluZQlTT0xfRU5FVERPV04gICAgICAgMTI3ICAgLyogWW91ciBzdWJuZXQgaXMgb24gZmlyZSAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VORVRVTlJFQUNIICAgIDEyOCAgIC8qIFNvbWVvbmUgcGxheWluZyB3aXRoIGdhdGV3YXkgYW5kICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaWQgbm90IHRlbGwgeW91IGhlIHdhcyBnb2luZyB0byAqLwotI2RlZmluZQlTT0xfRU5FVFJFU0VUICAgICAgMTI5ICAgLyogQnV5IGxlc3MtYnVnZ3kgZXRoZXJuZXQgY2FyZHMgICAgKi8KLSNkZWZpbmUJU09MX0VDT05OQUJPUlRFRCAgIDEzMCAgIC8qIEFib3J0ZWQgY29ubmVjdGlvbiBkdWUgdG8gc3cgICAgICovCi0jZGVmaW5lCVNPTF9FQ09OTlJFU0VUICAgICAxMzEgICAvKiBZb3VyIHBlZXJzIHJlc2V0IHlvdXIgY29ubmVjdGlvbiAqLwotI2RlZmluZQlTT0xfRU5PQlVGUyAgICAgICAgMTMyICAgLyogTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VJU0NPTk4gICAgICAgIDEzMyAgIC8qIENvbm5lY3Qgb24gYWxyZWFkeSBjb25uZWN0ZWQgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2NrZXQgYXR0ZW1wdGVkICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PVENPTk4gICAgICAgMTM0ICAgLyogQ29tbSBvbiBub24tY29ubmVjdGVkIHNvY2tldCAgICAgKi8KLSNkZWZpbmUJU09MX0VTSFVURE9XTiAgICAgIDE0MyAgIC8qIE9wIGF0dGVtcHRlZCBhZnRlciBzb2NrLXNodXRkb3duICovCi0jZGVmaW5lCVNPTF9FVE9PTUFOWVJFRlMgICAxNDQgICAvKiBSZWZlcmVuY2UgbGltaXQgZXhjZWVkZWQgICAgICAgICAqLwotI2RlZmluZQlTT0xfRVRJTUVET1VUICAgICAgMTQ1ICAgLyogVGltZWQgb3V0IGNvbm5lY3Rpb24gICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VDT05OUkVGVVNFRCAgIDE0NiAgIC8qIENvbm5lY3Rpb24gcmVmdXNlZCBieSByZW1vdGUgaG9zdCovCi0jZGVmaW5lCVNPTF9FSE9TVERPV04gICAgICAxNDcgICAvKiBSZW1vdGUgaG9zdCBpcyB1cCBpbiBmbGFtZXMgICAgICAqLwotI2RlZmluZQlTT0xfRUhPU1RVTlJFQUNIICAgMTQ4ICAgLyogTWFrZSBhIGxlZnQgYXQgRWFzdG9uIEF2ZS4uLi4uICAgKi8KLSNkZWZpbmUJU09MX0VXT1VMREJMT0NLICAgIEVBR0FJTiAvKiBKdXN0IGFuIGFsaWFzICovCi0jZGVmaW5lCVNPTF9FQUxSRUFEWSAgICAgICAxNDkgICAvKiBPcGVyYXRpb24gaXMgYWxyZWFkeSBvY2N1cnJpbmcgICAqLwotI2RlZmluZQlTT0xfRUlOUFJPR1JFU1MgICAgMTUwICAgLyogT3BlcmF0aW9uIGlzIGhhcHBlbmluZyBub3cgICAgICAgKi8KLSNkZWZpbmUJU09MX0VTVEFMRSAgICAgICAgIDE1MSAgIC8qIEZ1bmd1cyBncm93dGggb24gTkZTIGZpbGUgaGFuZGxlICovCi0KLSNlbmRpZiAvKiAhKF9TUEFSQ19TT0xFUlJOT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3ZyNC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3ZyNC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTFmMWM5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3N2cjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBTb2xhcmlzL1NQQVJDIGNvbnN0YW50cyBhbmQgZGVmaW5pdGlvbnMgLS0gCi0gKiAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEKLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIGluY2x1ZGVkIGJ5IHVzZXIgbGV2ZWwgYXBwbGljYXRpb25zCi0gKiBidXQgdGhlIHNvbGFyaXMgc3lzY2FsbCBlbXVsYXRvcgotICovCi0KLSNpZm5kZWYgX1NQQVJDX1NWUjRfSAotI2RlZmluZSBfU1BBUkNfU1ZSNF9ICi0KLS8qIFNpZ25hbHMgYXMgdXNlZCBieSBzdnI0ICovCi10eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgIC8qIHNpZ25hbCBzZXQgdHlwZSAqLwotCXVsb25nIHNpZ2JpdHNbNF07Ci19IHN2cjRfc2lnc2V0X3Q7Ci0KLS8qIFZhbHVlcyBmb3Igc2lnaW5mby5jb2RlICovCi0jZGVmaW5lIFNWUjRfU0lOT0lORk8gMzI3NjcKLS8qIFNpZ2luZm8sIHN1Y2tlciBleHBlY3RzIGJ1bmNoIG9mIGluZm9ybWF0aW9uIG9uIHRob3NlIHBhcmFtZXRlcnMgKi8KLXR5cGVkZWYgdW5pb24gewotCWNoYXIgdG90YWxfc2l6ZSBbMTI4XTsKLQlzdHJ1Y3QgewotCQlpbnQgc2lnbm87Ci0JCWludCBjb2RlOwotCQlpbnQgZXJyb3I7Ci0JCXVuaW9uIHsKLQkJfSBkYXRhOyAKLQl9IHNpZ2luZm87Ci19IHN2cjRfc2lnaW5mb190OwotCi0vKiBDb250ZXh0IGRlZmluaXRpb24gKi8KLQotLyogTG9jYXRpb24gb2YgdGhlIHVzZXIgc3RvcmVkIHJlZ2lzdGVycyBpbnRvIGEgZ3JlZ190ICovCi1lbnVtIHsKLQlTVlI0X1BTUiwgU1ZSNF9QQywgU1ZSNF9OUEMsIFNWUjRfWSwKLQlTVlI0X0cxLCAgU1ZSNF9HMiwgU1ZSNF9HMywgIFNWUjRfRzQsCi0JU1ZSNF9HNSwgIFNWUjRfRzYsIFNWUjRfRzcsICBTVlI0X08wLAotCVNWUjRfTzEsICBTVlI0X08yLCBTVlI0X08zLCAgU1ZSNF9PNCwKLQlTVlI0X081LCAgU1ZSNF9PNiwgU1ZSNF9PNwotfTsKLQotLyogc2l6ZW9mIChyZWdzKSAvIHNpemVvZiAoZ3JlZ190KSwgZGVmaW5lZCBpbiB0aGUgQUJJICovCi0jZGVmaW5lIFNWUjRfTlJFR1MgIDE5Ci0jZGVmaW5lIFNWUjRfTUFYV0lOIDMxCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1aW50IHJ3aW5fbG9bOF07Ci0JdWludCByd2luX2luWzhdOwotfSBzdnI0X3J3aW5kb3dfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludCAgICAgICAgICAgIGNvdW50OwotCWludCAgICAgICAgICAgIF9fdXNlciAqd2lucHRyIFtTVlI0X01BWFdJTl07IC8qIHBvaW50ZXIgdG8gdGhlIHdpbmRvd3MgKi8KLQlzdnI0X3J3aW5kb3dfdCB3aW5bU1ZSNF9NQVhXSU5dOyAgICAgIC8qIHRoZSB3aW5kb3dzICovCi19IHN2cjRfZ3dpbmRvd3NfdDsKLQotdHlwZWRlZiBpbnQgc3ZyNF9ncmVnc2V0X3RbU1ZSNF9OUkVHU107Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlkb3VibGUgICBmcHVfcmVnc1szMl07Ci0Jdm9pZCAgICAgKmZwX3E7Ci0JdW5zaWduZWQgZnBfZnNyOwotCXVfY2hhciAgIGZwX25xZWw7Ci0JdV9jaGFyICAgZnBfbnFzaXplOwotCXVfY2hhciAgIGludXNlOwkJLyogaWYgZnB1IGlzIGluIHVzZSAqLwotfSBzdnI0X2ZyZWdzZXRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQgICAgaWQ7CQkvKiBpZiB0aGlzIGhvbGRzICJ4cnMiIHN0cmluZyA9PiBwdHIgaXMgdmFsaWQgKi8KLQljYWRkcl90IHB0cjsKLX0gc3ZyNF94cnNfdDsKLQotLyogTWFjaGluZSBkZXBlbmRlbnQgY29udGV4dCAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXN2cjRfZ3JlZ3NldF90ICAgZ3JlZzsJLyogcmVnaXN0ZXJzIDAuLjE5IChzZWUgdG9wKSAqLwotCXN2cjRfZ3dpbmRvd3NfdCAgX191c2VyICpnd2luOwkvKiBtYXkgcG9pbnQgdG8gcmVnaXN0ZXIgd2luZG93cyAqLwotCXN2cjRfZnJlZ3NldF90ICAgZnJlZzsJLyogZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0Jc3ZyNF94cnNfdCAgICAgICB4cnM7CS8qIG1obT8gKi8KLQlsb25nICAgICAgICAgICAgIHBhZFsxOV07Ci19IHN2cjRfbWNvbnRleHRfdDsKLQotLyogZmxhZ3MgZm9yIHN0YWNrX3QuZmxhZ3MgKi8KLWVudW0gc3ZyNF9zdGFja19mbGFncyB7Ci0JU1ZSNF9TU19PTlNUQUNLLAotCVNWUjRfU1NfRElTQUJMRSwKLX07Ci0KLS8qIHNpZ25hbCBzdGFjayBleGVjdGlvbiBwbGFjZSwgdW5zdXBwb3J0ZWQgKi8KLXR5cGVkZWYgc3RydWN0IHN2cjRfc3RhY2tfdCB7Ci0gICAgICAgIGNoYXIgX191c2VyICpzcDsKLSAgICAgICAgaW50ICBzaXplOwotICAgICAgICBpbnQgIGZsYWdzOwotfSBzdnI0X3N0YWNrX3Q7Ci0KLS8qIENvbnRleHQgdXNlZCBieSBnZXRjb250ZXh0IGFuZCBzZXRjb250ZXh0ICovCi10eXBlZGVmIHN0cnVjdCBzdnI0X3Vjb250ZXh0X3QgewotCXVfbG9uZyAgICAgICAgICAgICAgIGZsYWdzOyAvKiBjb250ZXh0IGZsYWdzLCBpbmRpY2F0ZSB3aGF0IGlzIGxvYWRlZCAqLwotCXN0cnVjdCBzdnI0X3Vjb250ZXh0ICpsaW5rOwotCXN2cjRfc2lnc2V0X3QgICAgICAgIHNpZ21hc2s7Ci0Jc3ZyNF9zdGFja190ICAgICAgICAgc3RhY2s7Ci0Jc3ZyNF9tY29udGV4dF90ICAgICAgbWNvbnRleHQ7Ci0JbG9uZyAgICAgICAgICAgICAgICAgcGFkWzIzXTsKLX0gc3ZyNF91Y29udGV4dF90OyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLS8qIHdpbmRvd3MgaG9sZCB0aGUgd2luZG93cyBhcyB0aGV5IHdlcmUgYXQgc2lnbmFsIHRpbWUsCi0gKiB1Y29udGV4dC0+bWNvbnRleHQgaG9sZHMgYSBwb2ludGVyIHRvIHRoZW0uCi0gKiBhZGRyZXNzZXMgZm9yIHVjIGFuZCBzaSBhcmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMgdG8gc3ZyNCBzaWduYWwKLSAqIGhhbmRsZXIKLSAqLwotCi0vKiBUaGlzIGlzIHRoZSBzaWduYWwgZnJhbWUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHNpZ25hbCBoYW5kbGVyICovCi10eXBlZGVmIHN0cnVjdCB7Ci0Jc3ZyNF9nd2luZG93c190IGd3OwkvKiB3aW5kb3dzICovCi0Jc3ZyNF91Y29udGV4dF90IHVjOwkvKiBtYWNoaW5lIGNvbnRleHQgKi8KLQlzdnI0X3NpZ2luZm9fdCAgc2k7CS8qIHNpZ2luZm8gKi8KLX0gc3ZyNF9zaWduYWxfZnJhbWVfdDsKLQotI2RlZmluZSBTVlI0X1NGX0FMSUdORUQgKCgoc2l6ZW9mIChzdnI0X3NpZ25hbF9mcmFtZV90KSArIDcpICYgKH43KSkpCi0KLSNlbmRpZiAvKiBpbmNsdWRlIGNvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtLmgKaW5kZXggNDVlNDdjMS4uNGUwODIxMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3N5c3RlbS5oCkBAIC00NCw2ICs0NCw4IEBACiAKICNkZWZpbmUgU1VONE1fTkNQVVMgICAgICAgICAgICA0ICAgICAgICAgICAgICAvKiBBcmNoaXRlY3R1cmFsIGxpbWl0IG9mIHN1bjRtLiAqLwogCitleHRlcm4gY2hhciByZWJvb3RfY29tbWFuZFtdOworCiBleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3NldFtOUl9DUFVTXTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfYmFkX3BhZ2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtaW9zLmgKaW5kZXggNDMzMzIzMi4uNzMzZDQwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdGVybWlvcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1pb3MuaApAQCAtMzMsMTEgKzMzLDYgQEAKIH07CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCi1zdHJ1Y3Qgc3Vub3NfdHR5c2l6ZSB7Ci0JaW50IHN0X2xpbmVzOyAgIC8qIExpbmVzIG9uIHRoZSB0ZXJtaW5hbCAqLwotCWludCBzdF9jb2x1bW5zOyAvKiBDb2x1bW5zIG9uIHRoZSB0ZXJtaW5hbCAqLwotfTsKLQogc3RydWN0IHdpbnNpemUgewogCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsKIAl1bnNpZ25lZCBzaG9ydCB3c19jb2w7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91c2VyLmggYi9pbmNsdWRlL2FzbS1zcGFyYy91c2VyLmgKaW5kZXggYjVmMWFiZi4uMzQwMGVhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdXNlci5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VzZXIuaApAQCAtMSw2MCArMSw2IEBACi0vKiAkSWQ6IHVzZXIuaCx2IDEuNSAxOTk4LzAyLzIzIDAxOjQ5OjIyIHJ0aCBFeHAgJAotICogYXNtLXNwYXJjL3VzZXIuaDogQ29yZSBmaWxlIGRlZmluaXRpb25zIGZvciB0aGUgU3BhcmMuCi0gKgotICogS2VlcCBpbiBzeW5jIHdpdGggcmVnLmguICBBY3R1YWxseSwgd2UgY291bGQgZ2V0IHJpZCBvZiB0aGlzCi0gKiBvbmUsIHNpbmNlIHdlIHdvbid0IGEub3V0IGNvcmUgZHVtcCB0aGF0IG11Y2ggYW55d2F5cyAtIG1pZ3VlbC4KLSAqIENvcHlyaWdodCAoQykgMTk5NSAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwogI2lmbmRlZiBfU1BBUkNfVVNFUl9ICiAjZGVmaW5lIF9TUEFSQ19VU0VSX0gKIAotI2luY2x1ZGUgPGFzbS9hLm91dC5oPgotc3RydWN0IHN1bm9zX3JlZ3MgewotCXVuc2lnbmVkIGxvbmcgcHNyLCBwYywgbnBjLCB5OwotCXVuc2lnbmVkIGxvbmcgcmVnc1sxNV07Ci19OwotCi1zdHJ1Y3Qgc3Vub3NfZnBxdWV1ZSB7Ci0JdW5zaWduZWQgbG9uZyAqYWRkcjsKLQl1bnNpZ25lZCBsb25nIGluc3Q7Ci19OwotCi1zdHJ1Y3Qgc3Vub3NfZnAgewotCXVuaW9uIHsKLQkJdW5zaWduZWQgbG9uZyByZWdzWzMyXTsKLQkJZG91YmxlIHJlZ19kYmxzWzE2XTsKLQl9IGZyZWdzOwotCXVuc2lnbmVkIGxvbmcgZnNyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBleHRyYTsKLQl1bnNpZ25lZCBsb25nIGZwcV9jb3VudDsKLQlzdHJ1Y3Qgc3Vub3NfZnBxdWV1ZSBmcHFbMTZdOwotfTsKLQotc3RydWN0IHN1bm9zX2ZwdSB7Ci0Jc3RydWN0IHN1bm9zX2ZwIGZwc3RhdHVzOwotfTsKLQotLyogVGhlIFN1bk9TIGNvcmUgZmlsZSBoZWFkZXIgbGF5b3V0LiAqLwotc3RydWN0IHVzZXIgewotCXVuc2lnbmVkIGxvbmcgbWFnaWM7Ci0JdW5zaWduZWQgbG9uZyBsZW47Ci0Jc3RydWN0IHN1bm9zX3JlZ3MgcmVnczsKLQlzdHJ1Y3QgZXhlYyB1ZXhlYzsKLQlpbnQgICAgICAgICAgIHNpZ25hbDsKLQlzaXplX3QgICAgICAgIHVfdHNpemU7IC8qIGFsbCBvZiB0aGVzZSBpbiBieXRlcyEgKi8KLQlzaXplX3QgICAgICAgIHVfZHNpemU7Ci0Jc2l6ZV90ICAgICAgICB1X3NzaXplOwotCWNoYXIgICAgICAgICAgdV9jb21tWzE3XTsKLQlzdHJ1Y3Qgc3Vub3NfZnB1IGZwdTsKLQl1bnNpZ25lZCBsb25nIHNpZ2NvZGU7ICAgLyogU3BlY2lhbCBzaWdjb250ZXh0IHN1YmNvZGUsIGlmIGFueSAqLwotfTsKLQotI2RlZmluZSBOQlBHICAgICAgICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBVUEFHRVMgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgICAodS5zdGFydF9jb2RlKQotI2RlZmluZSBIT1NUX0RBVEFfU1RBUlRfQUREUiAgICh1LnVleGVjLmFfZGF0YSkKLSNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAgICAoLSB1LnVfc3NpemUgKiBOQlBHKQotI2RlZmluZSBTVU5PU19DT1JFX01BR0lDICAgICAgIDB4MDgwNDU2CisvKiBOb3RoaW5nIHRvIGRlZmluZS4gICovCiAKICNlbmRpZiAvKiAhKF9TUEFSQ19VU0VSX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L0tidWlsZCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvS2J1aWxkCmluZGV4IGE5MGRjODIuLmRjZTFjZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvS2J1aWxkCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvS2J1aWxkCkBAIC0xMiw3ICsxMiw2IEBACiBoZWFkZXIteSArPSBlbnZjdHJsLmgKIGhlYWRlci15ICs9IG9wZW5wcm9tLmgKIGhlYWRlci15ICs9IG9wZW5wcm9taW8uaAotaGVhZGVyLXkgKz0gcGNvbmYuaAogaGVhZGVyLXkgKz0gcHNyY29tcGF0LmgKIGhlYWRlci15ICs9IHBzdGF0ZS5oCiBoZWFkZXIteSArPSByZWcuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hLm91dC1jb3JlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Eub3V0LWNvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5OWIzYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Eub3V0LWNvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIGEub3V0IGNvcmVkdW1wIHJlZ2lzdGVyIGR1bXBlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fQV9PVVRfQ09SRV9ICi0jZGVmaW5lIF9BU01fQV9PVVRfQ09SRV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0KLS8qCi0gKiBmaWxsIGluIHRoZSB1c2VyIHN0cnVjdHVyZSBmb3IgYW4gYS5vdXQgY29yZSBkdW1wCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhb3V0X2R1bXBfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdXNlciAqZHVtcCkKLXsKLQkvKiBPbmx5IHNob3VsZCBiZSB1c2VkIGZvciBTdW5PUyBhbmQgYW5jaWVudCBhLm91dAotCSAqIFNwYXJjTGludXggYmluYXJpZXMuLi4gIE5vdCB3b3J0aCBpbXBsZW1lbnRpbmcuCi0JICovCi0JbWVtc2V0KGR1bXAsIDAsIHNpemVvZihzdHJ1Y3QgdXNlcikpOwotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fQV9PVVRfQ09SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Eub3V0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Eub3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjA4YzIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9hLm91dC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1zcGFyYy9hLm91dC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iYWNrb2ZmLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JhY2tvZmYuaAppbmRleCBkYWRkNmMzLi5mYTFmZGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JhY2tvZmYuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JhY2tvZmYuaApAQCAtMTIsNyArMTIsOCBAQAogCW1vdglyZWcsIHRtcDsgXAogODg6CWJybnoscHQJdG1wLCA4OGI7IFwKIAkgc3ViCXRtcCwgMSwgdG1wOyBcCi0JY21wCXJlZywgQkFDS09GRl9MSU1JVDsgXAorCXNldAlCQUNLT0ZGX0xJTUlULCB0bXA7IFwKKwljbXAJcmVnLCB0bXA7IFwKIAliZyxwbgkleGNjLCBsYWJlbDsgXAogCSBub3A7IFwKIAliYSxwdAkleGNjLCBsYWJlbDsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jcHVkYXRhLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaAppbmRleCA1NDI0MjE0Li41MzI5NzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaApAQCAtODYsNiArODYsOCBAQAogZXh0ZXJuIHZvaWQgaW5pdF9jdXJfY3B1X3RyYXAoc3RydWN0IHRocmVhZF9pbmZvICopOwogZXh0ZXJuIHZvaWQgc2V0dXBfdGJhKHZvaWQpOwogZXh0ZXJuIGludCBuY3B1c19wcm9iZWQ7CitleHRlcm4gdm9pZCBfX2luaXQgY3B1X3Byb2JlKHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyByZWFsX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kY3UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGN1LmgKaW5kZXggZWNiZWQyYS4uMGY3MDRlMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGN1LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kY3UuaApAQCAtMSwyNiArMSwyNyBAQAotLyogJElkOiBkY3UuaCx2IDEuMiAyMDAxLzAzLzAxIDIzOjIzOjMzIGRhdmVtIEV4cCAkICovCiAjaWZuZGVmIF9TUEFSQzY0X0RDVV9ICiAjZGVmaW5lIF9TUEFSQzY0X0RDVV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorCiAvKiBVbHRyYVNwYXJjLUlJSSBEYXRhIENhY2hlIFVuaXQgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBEQ1VfQ1AJCTB4MDAwMjAwMDAwMDAwMDAwMCAvKiBQaHlzaWNhbCBDYWNoZSBFbmFibGUgdy9vIG1tdSovCi0jZGVmaW5lIERDVV9DVgkJMHgwMDAxMDAwMDAwMDAwMDAwIC8qIFZpcnR1YWwgQ2FjaGUgRW5hYmxlCXcvbyBtbXUJKi8KLSNkZWZpbmUgRENVX01FCQkweDAwMDA4MDAwMDAwMDAwMDAgLyogTkMtc3RvcmUgTWVyZ2luZyBFbmFibGUJKi8KLSNkZWZpbmUgRENVX1JFCQkweDAwMDA0MDAwMDAwMDAwMDAgLyogUkFXIGJ5cGFzcyBFbmFibGUJCSovCi0jZGVmaW5lIERDVV9QRQkJMHgwMDAwMjAwMDAwMDAwMDAwIC8qIFBDYWNoZSBFbmFibGUJCSovCi0jZGVmaW5lIERDVV9IUEUJCTB4MDAwMDEwMDAwMDAwMDAwMCAvKiBIVyBwcmVmZXRjaCBFbmFibGUJCSovCi0jZGVmaW5lIERDVV9TUEUJCTB4MDAwMDA4MDAwMDAwMDAwMCAvKiBTVyBwcmVmZXRjaCBFbmFibGUJCSovCi0jZGVmaW5lIERDVV9TTAkJMHgwMDAwMDQwMDAwMDAwMDAwIC8qIFNlY29uZGFyeSBsb2FkIHN0ZWVyaW5nIEVuYWIJKi8KLSNkZWZpbmUgRENVX1dFCQkweDAwMDAwMjAwMDAwMDAwMDAgLyogV0NhY2hlIGVuYWJsZQkJKi8KLSNkZWZpbmUgRENVX1BNCQkweDAwMDAwMWZlMDAwMDAwMDAgLyogUEEgV2F0Y2hwb2ludCBCeXRlIE1hc2sJKi8KLSNkZWZpbmUgRENVX1ZNCQkweDAwMDAwMDAxZmUwMDAwMDAgLyogVkEgV2F0Y2hwb2ludCBCeXRlIE1hc2sJKi8KLSNkZWZpbmUgRENVX1BSCQkweDAwMDAwMDAwMDEwMDAwMDAgLyogUEEgV2F0Y2hwb2ludCBSZWFkIEVuYWJsZQkqLwotI2RlZmluZSBEQ1VfUFcJCTB4MDAwMDAwMDAwMDgwMDAwMCAvKiBQQSBXYXRjaHBvaW50IFdyaXRlIEVuYWJsZQkqLwotI2RlZmluZSBEQ1VfVlIJCTB4MDAwMDAwMDAwMDQwMDAwMCAvKiBWQSBXYXRjaHBvaW50IFJlYWQgRW5hYmxlCSovCi0jZGVmaW5lIERDVV9WVwkJMHgwMDAwMDAwMDAwMjAwMDAwIC8qIFZBIFdhdGNocG9pbnQgV3JpdGUgRW5hYmxlCSovCi0jZGVmaW5lIERDVV9ETQkJMHgwMDAwMDAwMDAwMDAwMDA4IC8qIERNTVUgRW5hYmxlCQkJKi8KLSNkZWZpbmUgRENVX0lNCQkweDAwMDAwMDAwMDAwMDAwMDQgLyogSU1NVSBFbmFibGUJCQkqLwotI2RlZmluZSBEQ1VfREMJCTB4MDAwMDAwMDAwMDAwMDAwMiAvKiBEYXRhIENhY2hlIEVuYWJsZQkJKi8KLSNkZWZpbmUgRENVX0lDCQkweDAwMDAwMDAwMDAwMDAwMDEgLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRW5hYmxlCSovCisjZGVmaW5lIERDVV9DUAlfQUMoMHgwMDAyMDAwMDAwMDAwMDAwLFVMKSAvKiBQaHlzIENhY2hlIEVuYWJsZSB3L28gbW11CSovCisjZGVmaW5lIERDVV9DVglfQUMoMHgwMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiBWaXJ0IENhY2hlIEVuYWJsZSB3L28gbW11CSovCisjZGVmaW5lIERDVV9NRQlfQUMoMHgwMDAwODAwMDAwMDAwMDAwLFVMKSAvKiBOQy1zdG9yZSBNZXJnaW5nIEVuYWJsZQkqLworI2RlZmluZSBEQ1VfUkUJX0FDKDB4MDAwMDQwMDAwMDAwMDAwMCxVTCkgLyogUkFXIGJ5cGFzcyBFbmFibGUJCSovCisjZGVmaW5lIERDVV9QRQlfQUMoMHgwMDAwMjAwMDAwMDAwMDAwLFVMKSAvKiBQQ2FjaGUgRW5hYmxlCQkqLworI2RlZmluZSBEQ1VfSFBFCV9BQygweDAwMDAxMDAwMDAwMDAwMDAsVUwpIC8qIEhXIHByZWZldGNoIEVuYWJsZQkqLworI2RlZmluZSBEQ1VfU1BFCV9BQygweDAwMDAwODAwMDAwMDAwMDAsVUwpIC8qIFNXIHByZWZldGNoIEVuYWJsZQkqLworI2RlZmluZSBEQ1VfU0wJX0FDKDB4MDAwMDA0MDAwMDAwMDAwMCxVTCkgLyogU2Vjb25kYXJ5IGxkLXN0ZWVyaW5nIEVuYWIqLworI2RlZmluZSBEQ1VfV0UJX0FDKDB4MDAwMDAyMDAwMDAwMDAwMCxVTCkgLyogV0NhY2hlIGVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX1BNCV9BQygweDAwMDAwMWZlMDAwMDAwMDAsVUwpIC8qIFBBIFdhdGNocG9pbnQgQnl0ZSBNYXNrCSovCisjZGVmaW5lIERDVV9WTQlfQUMoMHgwMDAwMDAwMWZlMDAwMDAwLFVMKSAvKiBWQSBXYXRjaHBvaW50IEJ5dGUgTWFzawkqLworI2RlZmluZSBEQ1VfUFIJX0FDKDB4MDAwMDAwMDAwMTAwMDAwMCxVTCkgLyogUEEgV2F0Y2hwb2ludCBSZWFkIEVuYWJsZQkqLworI2RlZmluZSBEQ1VfUFcJX0FDKDB4MDAwMDAwMDAwMDgwMDAwMCxVTCkgLyogUEEgV2F0Y2hwb2ludCBXcml0ZSBFbmFibGUqLworI2RlZmluZSBEQ1VfVlIJX0FDKDB4MDAwMDAwMDAwMDQwMDAwMCxVTCkgLyogVkEgV2F0Y2hwb2ludCBSZWFkIEVuYWJsZQkqLworI2RlZmluZSBEQ1VfVlcJX0FDKDB4MDAwMDAwMDAwMDIwMDAwMCxVTCkgLyogVkEgV2F0Y2hwb2ludCBXcml0ZSBFbmFibGUqLworI2RlZmluZSBEQ1VfRE0JX0FDKDB4MDAwMDAwMDAwMDAwMDAwOCxVTCkgLyogRE1NVSBFbmFibGUJCSovCisjZGVmaW5lIERDVV9JTQlfQUMoMHgwMDAwMDAwMDAwMDAwMDA0LFVMKSAvKiBJTU1VIEVuYWJsZQkJKi8KKyNkZWZpbmUgRENVX0RDCV9BQygweDAwMDAwMDAwMDAwMDAwMDIsVUwpIC8qIERhdGEgQ2FjaGUgRW5hYmxlCQkqLworI2RlZmluZSBEQ1VfSUMJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMSxVTCkgLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRW5hYmxlCSovCiAKICNlbmRpZiAvKiBfU1BBUkM2NF9EQ1VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9odnRyYW1wLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2h2dHJhbXAuaAppbmRleCBjN2RkNmFkLi5iMmI5Yjk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2h2dHJhbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2h2dHJhbXAuaApAQCAtMTYsNyArMTYsNyBAQAogCV9fdTY0CQkJZmF1bHRfaW5mb192YTsKIAlfX3U2NAkJCWZhdWx0X2luZm9fcGE7CiAJX191NjQJCQl0aHJlYWRfcmVnOwotCXN0cnVjdCBodnRyYW1wX21hcHBpbmcJbWFwc1syXTsKKwlzdHJ1Y3QgaHZ0cmFtcF9tYXBwaW5nCW1hcHNbMV07CiB9OwogCiBleHRlcm4gdm9pZCBodl9jcHVfc3RhcnR1cCh1bnNpZ25lZCBsb25nIGh2ZGVzY3JfcGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmgKaW5kZXggYWM3ZWIyMS4uYzVmZGFiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCkBAIC0yNCw4ICsyNCw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwotCiAjZGVmaW5lIF9faWRlX2luc2woZGF0YV9yZWcsIGJ1ZmZlciwgd2NvdW50KSBcCiAJX19pZGVfaW5zdyhkYXRhX3JlZywgYnVmZmVyLCAod2NvdW50KTw8MSkKICNkZWZpbmUgX19pZGVfb3V0c2woZGF0YV9yZWcsIGJ1ZmZlciwgd2NvdW50KSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pb2N0bHMuaAppbmRleCAwODNjOWEwLi5jMWJlNDA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGxzLmgKQEAgLTQ0LDggKzQ0LDYgQEAKICNkZWZpbmUgX19USU9DU0VUWCAgICAgICAgX0lPVygndCcsIDM0LCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCiAjZGVmaW5lIF9fVElPQ0dFVFggICAgICAgIF9JT1IoJ3QnLCAzNSwgaW50KSAvKiBTdW5PUyBTcGVjaWZpYyAqLwogI2RlZmluZSBUSU9DQ09OUwlfSU8oJ3QnLCAzNikKLSNkZWZpbmUgX19USU9DU1NJWkUgICAgIF9JT1coJ3QnLCAzNywgc3RydWN0IHN1bm9zX3R0eXNpemUpIC8qIFN1bk9TIFNwZWNpZmljICovCi0jZGVmaW5lIF9fVElPQ0dTSVpFICAgICBfSU9SKCd0JywgMzgsIHN0cnVjdCBzdW5vc190dHlzaXplKSAvKiBTdW5PUyBTcGVjaWZpYyAqLwogI2RlZmluZSBUSU9DR1NPRlRDQVIJX0lPUigndCcsIDEwMCwgaW50KQogI2RlZmluZSBUSU9DU1NPRlRDQVIJX0lPVygndCcsIDEwMSwgaW50KQogI2RlZmluZSBfX1RJT0NVQ05UTCAgICAgICBfSU9XKCd0JywgMTAyLCBpbnQpIC8qIFN1bk9TIFNwZWNpZmljICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnEuaAppbmRleCAzMGNiNzZiLi4wYmI5YmY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmgKQEAgLTY0LDYgKzY0LDcgQEAKIGV4dGVybiB2b2lkIHZpcnRfaXJxX2ZyZWUodW5zaWduZWQgaW50IHZpcnRfaXJxKTsKICNlbmRpZgogCitleHRlcm4gdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBmaXh1cF9pcnFzKHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3NvZnRpbnQodW5zaWduZWQgbG9uZyBiaXRzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAppbmRleCA3MjM3ZGQ4Li41ODc5ZDcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaApAQCAtMTQsOCArMTQsNiBAQAogCiAjZGVmaW5lIGFyY2hfcmVtb3ZlX2twcm9iZShwKQlkbyB7fSB3aGlsZSAoMCkKIAotI2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKLQogI2RlZmluZSBmbHVzaF9pbnNuX3Nsb3QocCkJCVwKIGRvIHsgCWZsdXNoaSgmKHApLT5haW5zbi5pbnNuWzBdKTsJXAogCWZsdXNoaSgmKHApLT5haW5zbi5pbnNuWzFdKTsJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rdm0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwNTM3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3ZtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTElOVVhfS1ZNX1NQQVJDNjRfSAorI2RlZmluZSBfX0xJTlVYX0tWTV9TUEFSQzY0X0gKKworLyogc3BhcmM2NCBkb2VzIG5vdCBzdXBwb3J0IEtWTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbG1iLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xtYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzUyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xtYi5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX1NQQVJDNjRfTE1CX0gKKyNkZWZpbmUgX1NQQVJDNjRfTE1CX0gKKworI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorCisjZGVmaW5lIExNQl9EQkcoZm10Li4uKSBwcm9tX3ByaW50ZihmbXQpCisKKyNkZWZpbmUgTE1CX1JFQUxfTElNSVQJMAorCisjZW5kaWYgLyogIShfU1BBUkM2NF9MTUJfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW1hbi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbWFuLmgKaW5kZXggOGNjMTg2MC4uZTU4NDU2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbWFuLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbWFuLmgKQEAgLTIyLDE5ICsyMiw2IEBACiAjZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwogI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCiAKLS8qIFhYWCBOZWVkIHRvIGFkZCBmbGFncyB0byBTdW5PUydzIG1jdGwsIG1sb2NrYWxsLCBhbmQgbWFkdmlzZSBzeXN0ZW0KLSAqIFhYWCBjYWxscy4KLSAqLwotCi0vKiBTdW5PUyBzeXNfbWN0bCgpIHN0dWZmLi4uICovCi0jZGVmaW5lIE1DX1NZTkMgICAgICAgICAxICAvKiBTeW5jIHBhZ2VzIGluIG1lbW9yeSB3aXRoIHN0b3JhZ2UgKHVzdS4gYSBmaWxlKSAqLwotI2RlZmluZSBNQ19MT0NLICAgICAgICAgMiAgLyogTG9jayBwYWdlcyBpbnRvIGNvcmUgcmFtLCBkbyBub3QgYWxsb3cgc3dhcHBpbmcgb2YgdGhlbSAqLwotI2RlZmluZSBNQ19VTkxPQ0sgICAgICAgMyAgLyogVW5sb2NrIHBhZ2VzIGxvY2tlZCB2aWEgcHJldmlvdXMgbWN0bCgpIHdpdGggTUNfTE9DSyBhcmcgKi8KLSNkZWZpbmUgTUNfTE9DS0FTICAgICAgIDUgIC8qIExvY2sgYW4gZW50aXJlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyAqLwotI2RlZmluZSBNQ19VTkxPQ0tBUyAgICAgNiAgLyogVW5sb2NrIGVudGlyZSBhZGRyZXNzIHNwYWNlIG9mIGNhbGxpbmcgcHJvY2VzcyAqLwotCi0jZGVmaW5lIE1BRFZfRlJFRQkweDUJCS8qIChTb2xhcmlzKSBjb250ZW50cyBjYW4gYmUgZnJlZWQgKi8KLQogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIGFyY2hfbW1hcF9jaGVjawlzcGFyYzY0X21tYXBfY2hlY2sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbmFtZWkuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbmFtZWkuaAppbmRleCBjY2RhMTllLi4yNzUxNjFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L25hbWVpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9uYW1laS5oCkBAIC04LDE5ICs4LDYgQEAKICNpZm5kZWYgX19TUEFSQzY0X05BTUVJX0gKICNkZWZpbmUgX19TUEFSQzY0X05BTUVJX0gKIAotI2RlZmluZSBTUEFSQ19CU0RfRU1VTCAiL3Vzci9nbmVtdWwvc3Vub3MvIgotI2RlZmluZSBTUEFSQ19TT0xfRU1VTCAiL3Vzci9nbmVtdWwvc29sYXJpcy8iCi0KLXN0YXRpYyBpbmxpbmUgY2hhciAqIF9fZW11bF9wcmVmaXgodm9pZCkKLXsKLQlzd2l0Y2ggKGN1cnJlbnQtPnBlcnNvbmFsaXR5KSB7Ci0JY2FzZSBQRVJfU1VOT1M6Ci0JCXJldHVybiBTUEFSQ19CU0RfRU1VTDsKLQljYXNlIFBFUl9TVlI0OgotCQlyZXR1cm4gU1BBUkNfU09MX0VNVUw7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQorI2RlZmluZSBfX2VtdWxfcHJlZml4KCkgTlVMTAogCiAjZW5kaWYgLyogX19TUEFSQzY0X05BTUVJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNvbmYuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNvbmYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkMTA2YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Bjb25mLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKiAkSWQ6IHBjb25mLmgsdiAxLjEgMTk5Ni8xMi8wMiAwMDowOToxMCBkYXZlbSBFeHAgJAotICogcGNvbmYuaDogcGF0aGNvbmYoKSBhbmQgZnBhdGhjb25mKCkgZGVmaW5lcyBmb3IgU3VuT1MKLSAqICAgICAgICAgIHN5c3RlbSBjYWxsIGNvbXBhdGliaWxpdHkuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaWZuZGVmIF9TUEFSQzY0X1BDT05GX0gKLSNkZWZpbmUgX1NQQVJDNjRfUENPTkZfSAotCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KLQotI2RlZmluZSBfUENPTkZfTElOSyAgICAgICAxIC8qIE1heCBudW1iZXIgb2YgbGlua3MgdG8gYW4gb2JqZWN0ICAgICAgICAqLwotI2RlZmluZSBfUENPTkZfQ0FOT04gICAgICAyIC8qIFRUWSBpbnB1dCBidWZmZXIgbGluZSBzaXplICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENPTkZfSU5QVVQgICAgICAzIC8qIEJpZ2dlc3QgcGFja2V0IGEgdHR5IGNhbiBpbWJpYmUgYXQgb25jZSAqLwotI2RlZmluZSBfUENPTkZfTkFNRSAgICAgICA0IC8qIEZpbGVuYW1lIGxlbmd0aCBtYXggICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENPTkZfUEFUSCAgICAgICA1IC8qIE1heCBzaXplIG9mIGEgcGF0aG5hbWUgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENPTkZfUElQRSAgICAgICA2IC8qIEJ1ZmZlciBzaXplIGZvciBhIHBpcGUgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENPTkZfQ0hSRVNUUklDVCA3IC8qIENhbiBvbmx5IHJvb3QgY2hvd24gZmlsZXM/ICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENPTkZfTk9UUlVOQyAgICA4IC8qIEFyZSBwYXRobmFtZXMgdHJ1bmNhdGVkIGlmIHRvbyBiaWc/ICAgICAqLwotI2RlZmluZSBfUENPTkZfVkRJU0FCTEUgICA5IC8qIE1hZ2ljIGNoYXIgdG8gZGlzYWJsZSBzcGVjaWFsIHR0eSBjaGFycyAqLwotI2RlZmluZSBfUENPTkZfTUFYUENPTkYgICA5Ci0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X1BDT05GX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCmluZGV4IDMxNjdjY2YuLjU0OWU0NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCkBAIC0yMyw5ICsyMyw5IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLS8qIFRoZSBrZXJuZWwgaW1hZ2Ugb2NjdXBpZXMgMHg0MDAwMDAwIHRvIDB4MTAwMDAwMCAoNE1CIC0tPiAzMk1CKS4KLSAqIFRoZSBwYWdlIGNvcHkgYmxvY2tvcHMgY2FuIHVzZSAweDIwMDAwMDAgdG8gMHg0MDAwMDAwLgotICogVGhlIFRTQiBpcyBtYXBwZWQgaW4gdGhlIDB4NDAwMDAwMCB0byAweDYwMDAwMDAgcmFuZ2UuCisvKiBUaGUga2VybmVsIGltYWdlIG9jY3VwaWVzIDB4NDAwMDAwMCB0byAweDYwMDAwMDAgKDRNQiAtLT4gOTZNQikuCisgKiBUaGUgcGFnZSBjb3B5IGJsb2Nrb3BzIGNhbiB1c2UgMHg2MDAwMDAwIHRvIDB4ODAwMDAwMC4KKyAqIFRoZSBUU0IgaXMgbWFwcGVkIGluIHRoZSAweDgwMDAwMDAgdG8gMHhhMDAwMDAwIHJhbmdlLgogICogVGhlIFBST00gcmVzaWRlcyBpbiBhbiBhcmVhIHNwYW5uaW5nIDB4ZjAwMDAwMDAgdG8gMHgxMDAwMDAwMDAuCiAgKiBUaGUgdm1hbGxvYyBhcmVhIHNwYW5zIDB4MTAwMDAwMDAwIHRvIDB4MjAwMDAwMDAwLgogICogU2luY2UgbW9kdWxlcyBuZWVkIHRvIGJlIGluIHRoZSBsb3dlc3QgMzItYml0cyBvZiB0aGUgYWRkcmVzcyBzcGFjZSwKQEAgLTMzLDggKzMzLDggQEAKICAqIFRoZXJlIGlzIGEgc2luZ2xlIHN0YXRpYyBrZXJuZWwgUE1EIHdoaWNoIG1hcHMgZnJvbSAweDAgdG8gYWRkcmVzcwogICogMHg0MDAwMDAwMDAuCiAgKi8KLSNkZWZpbmUJVExCVEVNUF9CQVNFCQlfQUMoMHgwMDAwMDAwMDAyMDAwMDAwLFVMKQotI2RlZmluZQlUU0JNQVBfQkFTRQkJX0FDKDB4MDAwMDAwMDAwNDAwMDAwMCxVTCkKKyNkZWZpbmUJVExCVEVNUF9CQVNFCQlfQUMoMHgwMDAwMDAwMDA2MDAwMDAwLFVMKQorI2RlZmluZQlUU0JNQVBfQkFTRQkJX0FDKDB4MDAwMDAwMDAwODAwMDAwMCxVTCkKICNkZWZpbmUgTU9EVUxFU19WQUREUgkJX0FDKDB4MDAwMDAwMDAxMDAwMDAwMCxVTCkKICNkZWZpbmUgTU9EVUxFU19MRU4JCV9BQygweDAwMDAwMDAwZTAwMDAwMDAsVUwpCiAjZGVmaW5lIE1PRFVMRVNfRU5ECQlfQUMoMHgwMDAwMDAwMGYwMDAwMDAwLFVMKQpAQCAtNzYxLDYgKzc2MSw4IEBACiBleHRlcm4gdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBzdW40dl9yZWdpc3Rlcl9mYXVsdF9zdGF0dXModm9pZCk7CiBleHRlcm4gdm9pZCBzdW40dl9rdHNiX3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGNoZWV0YWhfZWNhY2hlX2ZsdXNoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzdW40dl9wYXRjaF90bGJfaGFuZGxlcnModm9pZCk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNtZGxpbmVfbWVtb3J5X3NpemU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCmluZGV4IDhkYTQ4NGMuLjg4NWI2YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaApAQCAtMzcsNiArMzcsOSBAQAogI2VuZGlmCiAKICNkZWZpbmUgVEFTS19TSVpFCSgodW5zaWduZWQgbG9uZyktVlBURV9TSVpFKQorI2RlZmluZSBUQVNLX1NJWkVfT0YodHNrKSBcCisJKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzayxUSUZfMzJCSVQpID8gXAorCSAoMVVMIDw8IDMyVUwpIDogVEFTS19TSVpFKQogI2lmZGVmIF9fS0VSTkVMX18KIAogI2RlZmluZSBTVEFDS19UT1AzMgkoKDFVTCA8PCAzMlVMKSAtIFBBR0VfU0laRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3B0cmFjZS5oCmluZGV4IDg2MTdjM2EuLjZkYTE5NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wdHJhY2UuaApAQCAtMTAyLDEyICsxMDIsMTQgQEAKIH0gd2hpbGUgKDApCiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoISgocmVncyktPnRzdGF0ZSAmIFRTVEFURV9QUklWKSkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT50cGMpCisjZGVmaW5lIHJlZ3NfcmV0dXJuX3ZhbHVlKHJlZ3MpICgocmVncyktPnVfcmVnc1tVUkVHX0kwXSkKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICopOwogI2Vsc2UKICNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCiAjZW5kaWYKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIF9fc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOwogI2VuZGlmCiAKICNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yZWJvb3QuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzZjQzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcmVib290LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9TUEFSQzY0X1JFQk9PVF9ICisjZGVmaW5lIF9TUEFSQzY0X1JFQk9PVF9ICisKK2V4dGVybiB2b2lkIG1hY2hpbmVfYWx0X3Bvd2VyX29mZih2b2lkKTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1JFQk9PVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zZW1hcGhvcmUuaAppbmRleCA3ZjdjMGM0Li5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2VtYXBob3JlLmgKQEAgLTEsNTMgKzEgQEAKLSNpZm5kZWYgX1NQQVJDNjRfU0VNQVBIT1JFX0gKLSNkZWZpbmUgX1NQQVJDNjRfU0VNQVBIT1JFX0gKLQotLyogVGhlc2UgYXJlIGFjdHVhbGx5IHJlYXNvbmFibGUgb24gdGhlIFY5LgotICoKLSAqIFNlZSBhc20tcHBjL3NlbWFwaG9yZS5oIGZvciBpbXBsZW1lbnRhdGlvbiBjb21tZW50YXJ5LAotICogb25seSBzcGFyYzY0IHNwZWNpZmljIGlzc3VlcyBhcmUgY29tbWVudGVkIGhlcmUuCi0gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotCi1zdHJ1Y3Qgc2VtYXBob3JlIHsKLQlhdG9taWNfdCBjb3VudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwotfTsKLQotI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBjb3VudCkgXAotCXsgQVRPTUlDX0lOSVQoY291bnQpLCBcCi0JICBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCkgfQotCi0jZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCBjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKQkJX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsIDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKLXsKLQlhdG9taWNfc2V0KCZzZW0tPmNvdW50LCB2YWwpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbS0+d2FpdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDApOwotfQotCi1leHRlcm4gdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOwotZXh0ZXJuIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOwotZXh0ZXJuIGludCBkb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqc2VtKTsKLWV4dGVybiBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X1NFTUFQSE9SRV9IKSAqLworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2V0LmgKaW5kZXggNDRhNjI1YS4uOGNmMDcxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NvY2tldC5oCkBAIC0yNCw5ICsyNCw2IEBACiAjZGVmaW5lIFNPX1NORFRJTUVPICAgICAweDQwMDAKICNkZWZpbmUgU09fQUNDRVBUQ09OTgkweDgwMDAKIAotLyogd2hhIT8/PyAqLwotI2RlZmluZSBTT19ET05UTElOR0VSICAgKH5TT19MSU5HRVIpICAvKiBPbGRlciBTdW5PUyBjb21wYXQuIGhhY2sgKi8KLQogI2RlZmluZSBTT19TTkRCVUYJMHgxMDAxCiAjZGVmaW5lIFNPX1JDVkJVRgkweDEwMDIKICNkZWZpbmUgU09fU05EQlVGRk9SQ0UJMHgxMDBhCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NvbGVycm5vLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NvbGVycm5vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZWE2ZmMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2xlcnJuby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qICRJZDogc29sZXJybm8uaCx2IDEuMSAxOTk2LzEyLzI2IDE0OjIyOjQwIGRhdmVtIEV4cCAkCi0gKiBzb2xlcnJuby5oOiBTb2xhcmlzIGVycm9yIHJldHVybiBjb2RlcyBmb3IgY29tcGF0aWJpbGl0eS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfU09MRVJSTk9fSAotI2RlZmluZSBfU1BBUkM2NF9TT0xFUlJOT19ICi0KLSNkZWZpbmUgU09MX0VQRVJNICAgICAgICAgIDEgICAgIC8qIFJlcXVpcmVkIHN1cGVydXNlciBhY2Nlc3MgcGVybXMgICovCi0jZGVmaW5lIFNPTF9FTk9FTlQgICAgICAgICAyICAgICAvKiBGaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCAqLwotI2RlZmluZSBTT0xfRVNSQ0ggICAgICAgICAgMyAgICAgLyogUHJvY2VzcyBkaWQgbm90IGV4aXN0ICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VJTlRSICAgICAgICAgIDQgICAgIC8qIFN5c3RlbSBjYWxsIHdhcyBpbnRlcnJ1cHRlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FSU8gICAgICAgICAgICA1ICAgICAvKiBBbiBpL28gZXJyb3Igb2NjdXJyZWQgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5YSU8gICAgICAgICAgNiAgICAgLyogRGV2aWNlIG9yIEFkZHJlc3MgZG9lcyBub3QgZXhpc3QgKi8KLSNkZWZpbmUJU09MX0UyQklHICAgICAgICAgIDcJIC8qIFRvbyBtYW55IGFyZ3VtZW50cyB3ZXJlIGdpdmVuICAgICovCi0jZGVmaW5lCVNPTF9FTk9FWEVDICAgICAgICA4ICAgICAvKiBIZWFkZXIgb2YgZXhlY3V0YWJsZSB3YXMgbXVuZ2VkICAqLwotI2RlZmluZQlTT0xfRUJBREYgICAgICAgICAgOSAgICAgLyogQm9ndXMgZmlsZSBudW1iZXIgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VDSElMRCAgICAgICAgIDEwICAgIC8qIE5vIGNoaWxkcmVuIG9mIHByb2Nlc3MgZXhpc3QgICAgICovCi0jZGVmaW5lCVNPTF9FQUdBSU4gICAgICAgICAxMSAgICAvKiBiZWVwIGJlZXAsICJ0cnkgYWdhaW4gbGF0ZXIiICAgICAqLwotI2RlZmluZQlTT0xfRU5PTUVNICAgICAgICAgMTIgICAgLyogTm8gbWVtb3J5IGF2YWlsYWJsZSAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VBQ0NFUyAgICAgICAgIDEzICAgIC8qIEFjY2VzcyBub3QgYWxsb3dlZCAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FRkFVTFQgICAgICAgICAxNCAgICAvKiBBZGRyZXNzIHBhc3NlZCB3YXMgaW52YWxpZCAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PVEJMSyAgICAgICAgMTUgICAgLyogYmxrZGV2IG9wIG9uIG5vbi1ibG9jayBkZXZpY2UgICAgKi8KLSNkZWZpbmUJU09MX0VCVVNZICAgICAgICAgIDE2ICAgIC8qIE1vdW50ZWQgZGV2aWNlIHdhcyBidXN5ICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FRVhJU1QgICAgICAgICAxNyAgICAvKiBGaWxlIHNwZWNpZmllZCBhbHJlYWR5IGV4aXN0cyAgICAqLwotI2RlZmluZQlTT0xfRVhERVYgICAgICAgICAgMTggICAgLyogTGluayByZXF1ZXN0IGFjcm9zcyBkaWZmIGRldmljZXMgKi8KLSNkZWZpbmUJU09MX0VOT0RFViAgICAgICAgIDE5ICAgIC8qIERldmljZSBkb2VzIG5vdCBleGlzdCBvbiBzeXN0ZW0gICovCi0jZGVmaW5lCVNPTF9FTk9URElSICAgICAgICAyMCAgICAvKiBEaXIgb3BlcmF0aW9uIG9uIG5vbi1kaXJlY3RvcnkgICAqLwotI2RlZmluZQlTT0xfRUlTRElSICAgICAgICAgMjEgICAgLyogRmlsZSB3YXMgb2YgZGlyZWN0b3J5IHR5cGUgICAgICAgKi8KLSNkZWZpbmUJU09MX0VJTlZBTCAgICAgICAgIDIyICAgIC8qIEFyZ3VtZW50IHBhc3NlZCB3YXMgaW52YWxpZCAgICAgICovCi0jZGVmaW5lCVNPTF9FTkZJTEUgICAgICAgICAyMyAgICAvKiBObyBtb3JlIHJvb20gaW4gZmlsZSB0YWJsZSAgICAgICAqLwotI2RlZmluZQlTT0xfRU1GSUxFICAgICAgICAgMjQgICAgLyogUHJvYyBoYXMgdG9vIG1hbnkgZmlsZXMgb3BlbiAgICAgKi8KLSNkZWZpbmUJU09MX0VOT1RUWSAgICAgICAgIDI1ICAgIC8qIElvY3RsIHdhcyBpbnZhbGlkIGZvciByZXEgZGV2aWNlICovCi0jZGVmaW5lCVNPTF9FVFhUQlNZICAgICAgICAyNiAgICAvKiBUZXh0IGZpbGUgaW4gYnVzeSBzdGF0ZSAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUZCSUcgICAgICAgICAgMjcgICAgLyogVG9vIGJpZyBvZiBhIGZpbGUgZm9yIG9wZXJhdGlvbiAgKi8KLSNkZWZpbmUJU09MX0VOT1NQQyAgICAgICAgIDI4ICAgIC8qIERpc2sgaXMgZnVsbCAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FU1BJUEUgICAgICAgICAyOSAgICAvKiBTZWVrIGF0dGVtcHRlZCBvbiBub24tc2Vla2luZyBkZXYqLwotI2RlZmluZQlTT0xfRVJPRlMgICAgICAgICAgMzAgICAgLyogV3JpdGUgYXR0ZW1wdGVkIG9uIHJlYWQtb25seSBmcyAgKi8KLSNkZWZpbmUJU09MX0VNTElOSyAgICAgICAgIDMxICAgIC8qIFRvbyBtYW55IGxpbmtzIGluIGZpbGUgc2VhcmNoICAgICovCi0jZGVmaW5lCVNPTF9FUElQRSAgICAgICAgICAzMiAgICAvKiBDYWxsIGEgcGx1bWJlciAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRURPTSAgICAgICAgICAgMzMgICAgLyogQXJndW1lbnQgd2FzIG91dCBvZiBmY3QgZG9tYWluICAgKi8KLSNkZWZpbmUJU09MX0VSQU5HRSAgICAgICAgIDM0ICAgIC8qIENvdWxkIG5vdCByZXByZXNlbnQgbWF0aCByZXN1bHQgICovCi0jZGVmaW5lCVNPTF9FTk9NU0cgICAgICAgICAzNSAgICAvKiBNZXNzYWdlIG9mIHJlcSB0eXBlIGRvZXNuJ3QgZXhpc3QgKi8KLSNkZWZpbmUJU09MX0VJRFJNICAgICAgICAgIDM2ICAgIC8qIElkZW50aWZpZXIgaGFzIGJlZW4gcmVtb3ZlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FQ0hSTkcgICAgICAgICAzNyAgICAvKiBSZXEgY2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICAqLwotI2RlZmluZQlTT0xfRUwyTlNZTkMgICAgICAgMzggICAgLyogQ291bGQgbm90IHN5bmMgYXQgcnVuIGxldmVsIDIgICAgKi8KLSNkZWZpbmUJU09MX0VMM0hMVCAgICAgICAgIDM5ICAgIC8qIEhhbHRlZCBhdCBydW4gbGV2ZWwgMyAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FTDNSU1QgICAgICAgICA0MCAgICAvKiBSZXNldCBhdCBydW4gbGV2ZWwgMyAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUxOUk5HICAgICAgICAgNDEgICAgLyogT3V0IG9mIHJhbmdlIGxpbmsgbnVtYmVyICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VVTkFUQ0ggICAgICAgIDQyICAgIC8qIERyaXZlciBmb3IgcHJvdG9jb2wgbm90IGF0dGFjaGVkICovCi0jZGVmaW5lCVNPTF9FTk9DU0kgICAgICAgICA0MyAgICAvKiBDU0kgc3RydWN0dXJlIG5vdCBhcm91bmQgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUwySExUICAgICAgICAgNDQgICAgLyogSGFsdGVkIGF0IHJ1biBsZXZlbCAyICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VERUFETEsgICAgICAgIDQ1ICAgIC8qIERlYWRsb2NrIGNvbmRpdGlvbiBkZXRlY3RlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FTk9MQ0sgICAgICAgICA0NiAgICAvKiBSZWNvcmQgbG9ja3MgdW5hdmFpbGFibGUgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUNBTkNFTEVEICAgICAgNDcgICAgLyogQ2FuY2VsbGF0aW9uIG9mIG9wZXIuIGhhcHBlbmVkICAgKi8KLSNkZWZpbmUJU09MX0VOT1RTVVAgICAgICAgIDQ4ICAgIC8qIEF0dGVtcHQgb2YgdW5zdXBwb3J0ZWQgb3BlcmF0aW9uICovCi0jZGVmaW5lCVNPTF9FRFFVT1QgICAgICAgICA0OSAgICAvKiBVc2VycyBkaXNrIHF1b3RhIGV4Y2VlZGVkICAgICAgICAqLwotI2RlZmluZQlTT0xfRUJBREUgICAgICAgICAgNTAgICAgLyogSW52YWxpZCBleGNoYW5nZSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VCQURSICAgICAgICAgIDUxICAgIC8qIFJlcXVlc3QgZGVzY3JpcHRvciB3YXMgaW52YWxpZCAgICovCi0jZGVmaW5lCVNPTF9FWEZVTEwgICAgICAgICA1MiAgICAvKiBGdWxsIGV4Y2hhbmdlICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PQU5PICAgICAgICAgNTMgICAgLyogYW5vIGRvZXMgbm90IGV4aXN0ICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VCQURSUUMgICAgICAgIDU0ICAgIC8qIFJlcSBjb2RlIHdhcyBpbnZhbGlkICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FQkFEU0xUICAgICAgICA1NSAgICAvKiBCYWQgc2xvdCBudW1iZXIgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRURFQURMT0NLICAgICAgNTYgICAgLyogRGVhZGxvY2sgaW4gZnMgZXJyb3IgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VCRk9OVCAgICAgICAgIDU3ICAgIC8qIEZvbnQgZmlsZSBmb3JtYXQgaW52YWxpZCAgICAgICAgICovCi0vKiBZT1csIEkgTE9WRSBTWVNWIFNUUkVBTVMhISEhICovCi0jZGVmaW5lCVNPTF9FTk9TVFIgICAgICAgICA2MCAgICAvKiBTdHJlYW0tb3Agb24gbm9uLXN0cmVhbSBkZXYgICAgICAqLwotI2RlZmluZQlTT0xfRU5PREFUQSAgICAgICAgNjEgICAgLyogTm8gZGF0YSBhdmFpbCBhdCB0aGlzIHRpbWUgICAgICAgKi8KLSNkZWZpbmUJU09MX0VUSU1FICAgICAgICAgIDYyICAgIC8qIEV4cGlyYXRpb24gb2YgdGltZSBvY2N1cnJlZCAgICAgICovCi0jZGVmaW5lCVNPTF9FTk9TUiAgICAgICAgICA2MyAgICAvKiBTdHJlYW1zIHJlc291cmNlcyBleGhhdXN0ZWQgICAgICAqLwotI2RlZmluZQlTT0xfRU5PTkVUICAgICAgICAgNjQgICAgLyogTm8gbmV0d29yayBjb25uZWN0ZWQgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VOT1BLRyAgICAgICAgIDY1ICAgIC8qIE5vbi1pbnN0YWxsZWQgcGFja2FnZSAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FUkVNT1RFICAgICAgICA2NiAgICAvKiBPYmplY3Qgd2FzIG9uIHJlbW90ZSBtYWNoaW5lICAgICAqLwotI2RlZmluZQlTT0xfRU5PTElOSyAgICAgICAgNjcgICAgLyogQ3V0IGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VBRFYgICAgICAgICAgIDY4ICAgIC8qIEVycm9yIGluIGFkdmVydGlzZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FU1JNTlQgICAgICAgICA2OSAgICAvKiBTb21lIG1hZ2ljIHNybW91bnQgcHJvYmxlbSAgICAgICAqLwotI2RlZmluZQlTT0xfRUNPTU0gICAgICAgICAgNzAgICAgLyogRHVyaW5nIHNlbmQsIGNvbW0gZXJyb3Igb2NjdXJyZWQgKi8KLSNkZWZpbmUJU09MX0VQUk9UTyAgICAgICAgIDcxICAgIC8qIFByb3RvY29sIGJvdGNoICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FTVVMVElIT1AgICAgICA3NCAgICAvKiBNdWx0aWhvcCBhdHRlbXB0ZWQgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUJBRE1TRyAgICAgICAgNzcgICAgLyogTWVzc2FnZSB3YXMgdW5yZWFkYWJsZSAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VOQU1FVE9PTE9ORyAgIDc4ICAgIC8qIFRvbyBsb25nIG9mIGEgcGF0aCBuYW1lICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FT1ZFUkZMT1cgICAgICA3OSAgICAvKiBEYXRhIHR5cGUgdG9vIHNtYWxsIGZvciBkYXR1bSAgICAqLwotI2RlZmluZQlTT0xfRU5PVFVOSVEgICAgICAgODAgICAgLyogTG9naWNhbCBuYW1lIHdhcyBub3QgdW5pcXVlICAgICAgKi8KLSNkZWZpbmUJU09MX0VCQURGRCAgICAgICAgIDgxICAgIC8qIE9wIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gZmQgICAgICovCi0jZGVmaW5lCVNPTF9FUkVNQ0hHICAgICAgICA4MiAgICAvKiBSZW1vdGUgYWRkcmVzcyBpcyBub3cgZGlmZmVyZW50ICAqLwotI2RlZmluZQlTT0xfRUxJQkFDQyAgICAgICAgODMgICAgLyogU2hhcmVkIGxpYiBjb3VsZCBub3QgYmUgYWNjZXNzZWQgKi8KLSNkZWZpbmUJU09MX0VMSUJCQUQgICAgICAgIDg0ICAgIC8qIFNoTGliIGlzIGNvcnJ1cHRlZCBpbiBzb21lIHdheSAgICovCi0jZGVmaW5lCVNPTF9FTElCU0NOICAgICAgICA4NSAgICAvKiBBLm91dCBTaExpYiBwcm9ibGVtcyAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRUxJQk1BWCAgICAgICAgODYgICAgLyogRXhjZWVkZWQgU2hMaWIgbGlua2FnZSBsaW1pdCAgICAgKi8KLSNkZWZpbmUJU09MX0VMSUJFWEVDICAgICAgIDg3ICAgIC8qIEV4ZWN1dGlvbiBvZiBTaExpYiBhdHRlbXB0ZWQgICAgICovCi0jZGVmaW5lCVNPTF9FSUxTRVEgICAgICAgICA4OCAgICAvKiBCYWQgYnl0ZSBzZXF1ZW5jZSBmb3VuZCAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PU1lTICAgICAgICAgODkgICAgLyogSW52YWxpZCBmaWxlc3lzdGVtIG9wZXJhdGlvbiAgICAgKi8KLSNkZWZpbmUJU09MX0VMT09QICAgICAgICAgIDkwICAgIC8qIERldGVjdGVkIGxvb3AgaW4gc3ltYm9saWMgbGlua3MgICovCi0jZGVmaW5lCVNPTF9FUkVTVEFSVCAgICAgICA5MSAgICAvKiBTeXN0ZW0gY2FsbCBpcyByZXN0YXJ0YWJsZSAgICAgICAqLwotI2RlZmluZQlTT0xfRVNUUlBJUEUgICAgICAgOTIgICAgLyogRG8gbm90IHNsZWVwIGluIGhlYWQgb2Ygc3RyZWFtICAgKi8KLSNkZWZpbmUJU09MX0VOT1RFTVBUWSAgICAgIDkzICAgIC8qIFJtZGlyIG9mIG5vbi1lbXB0eSBkaXJlY3RvcnkgICAgICovCi0jZGVmaW5lCVNPTF9FVVNFUlMgICAgICAgICA5NCAgICAvKiBPdmVyIGFidW5kYW5jZSBvZiB1c2VycyBmb3IgdWZzICAqLwotI2RlZmluZQlTT0xfRU5PVFNPQ0sgICAgICAgOTUgICAgLyogU29jay1vcCBvbiBub24tc29jayAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VERVNUQUREUlJFUSAgIDk2ICAgIC8qIE5vIGRlc3QgYWRkciBnaXZlbiwgYnV0IG5lZWRlZCAgICovCi0jZGVmaW5lCVNPTF9FTVNHU0laRSAgICAgICA5NyAgICAvKiBNc2cgdG9vIGJpZyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRVBST1RPVFlQRSAgICAgOTggICAgLyogQmFkIHNvY2tldCBwcm90b2NvbCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VOT1BST1RPT1BUICAgIDk5ICAgIC8qIFVuYXZhaWxhYmxlIHByb3RvY29sICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FUFJPVE9OT1NVUFBPUlQgMTIwICAvKiBVbnN1cHBvcnRlZCBwcm90b2NvbCAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRVNPQ0tUTk9TVVBQT1JUIDEyMSAgLyogVW5zdXBwb3J0ZWQgc29ja2V0IHR5cGUgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VPUE5PVFNVUFAgICAgIDEyMiAgIC8qIFVuc3VwcG9ydGVkIHNvY2stb3AgICAgICAgICAgICAgICovCi0jZGVmaW5lCVNPTF9FUEZOT1NVUFBPUlQgICAxMjMgICAvKiBVbnN1cHBvcnRlZCBwcm90b2NvbCBmYW1pbHkgICAgICAqLwotI2RlZmluZQlTT0xfRUFGTk9TVVBQT1JUICAgMTI0ICAgLyogVW5zdXAgYWRkciBmYW1pbHkgZm9yIHByb3RvY29sICAgKi8KLSNkZWZpbmUJU09MX0VBRERSSU5VU0UgICAgIDEyNSAgIC8qIFJlcSBhZGRyIGlzIGFscmVhZHkgaW4gdXNlICAgICAgICovCi0jZGVmaW5lCVNPTF9FQUREUk5PVEFWQUlMICAxMjYgICAvKiBSZXEgYWRkciBub3QgYXZhaWxhYmxlIHJpZ2h0IG5vdyAqLwotI2RlZmluZQlTT0xfRU5FVERPV04gICAgICAgMTI3ICAgLyogWW91ciBzdWJuZXQgaXMgb24gZmlyZSAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VORVRVTlJFQUNIICAgIDEyOCAgIC8qIFNvbWVvbmUgcGxheWluZyB3aXRoIGdhdGV3YXkgYW5kICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaWQgbm90IHRlbGwgeW91IGhlIHdhcyBnb2luZyB0byAqLwotI2RlZmluZQlTT0xfRU5FVFJFU0VUICAgICAgMTI5ICAgLyogQnV5IGxlc3MtYnVnZ3kgZXRoZXJuZXQgY2FyZHMgICAgKi8KLSNkZWZpbmUJU09MX0VDT05OQUJPUlRFRCAgIDEzMCAgIC8qIEFib3J0ZWQgY29ubmVjdGlvbiBkdWUgdG8gc3cgICAgICovCi0jZGVmaW5lCVNPTF9FQ09OTlJFU0VUICAgICAxMzEgICAvKiBZb3VyIHBlZXJzIHJlc2V0IHlvdXIgY29ubmVjdGlvbiAqLwotI2RlZmluZQlTT0xfRU5PQlVGUyAgICAgICAgMTMyICAgLyogTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VJU0NPTk4gICAgICAgIDEzMyAgIC8qIENvbm5lY3Qgb24gYWxyZWFkeSBjb25uZWN0ZWQgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2NrZXQgYXR0ZW1wdGVkICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlTT0xfRU5PVENPTk4gICAgICAgMTM0ICAgLyogQ29tbSBvbiBub24tY29ubmVjdGVkIHNvY2tldCAgICAgKi8KLSNkZWZpbmUJU09MX0VTSFVURE9XTiAgICAgIDE0MyAgIC8qIE9wIGF0dGVtcHRlZCBhZnRlciBzb2NrLXNodXRkb3duICovCi0jZGVmaW5lCVNPTF9FVE9PTUFOWVJFRlMgICAxNDQgICAvKiBSZWZlcmVuY2UgbGltaXQgZXhjZWVkZWQgICAgICAgICAqLwotI2RlZmluZQlTT0xfRVRJTUVET1VUICAgICAgMTQ1ICAgLyogVGltZWQgb3V0IGNvbm5lY3Rpb24gICAgICAgICAgICAgKi8KLSNkZWZpbmUJU09MX0VDT05OUkVGVVNFRCAgIDE0NiAgIC8qIENvbm5lY3Rpb24gcmVmdXNlZCBieSByZW1vdGUgaG9zdCovCi0jZGVmaW5lCVNPTF9FSE9TVERPV04gICAgICAxNDcgICAvKiBSZW1vdGUgaG9zdCBpcyB1cCBpbiBmbGFtZXMgICAgICAqLwotI2RlZmluZQlTT0xfRUhPU1RVTlJFQUNIICAgMTQ4ICAgLyogTWFrZSBhIGxlZnQgYXQgRWFzdG9uIEF2ZS4uLi4uICAgKi8KLSNkZWZpbmUJU09MX0VXT1VMREJMT0NLICAgIEVBR0FJTiAvKiBKdXN0IGFuIGFsaWFzICovCi0jZGVmaW5lCVNPTF9FQUxSRUFEWSAgICAgICAxNDkgICAvKiBPcGVyYXRpb24gaXMgYWxyZWFkeSBvY2N1cnJpbmcgICAqLwotI2RlZmluZQlTT0xfRUlOUFJPR1JFU1MgICAgMTUwICAgLyogT3BlcmF0aW9uIGlzIGhhcHBlbmluZyBub3cgICAgICAgKi8KLSNkZWZpbmUJU09MX0VTVEFMRSAgICAgICAgIDE1MSAgIC8qIEZ1bmd1cyBncm93dGggb24gTkZTIGZpbGUgaGFuZGxlICovCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X1NPTEVSUk5PX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaXRmaXJlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaXRmaXJlLmgKaW5kZXggNjNiNzA0MC4uOTg1ZWE3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGl0ZmlyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpdGZpcmUuaApAQCAtNjMsNiArNjMsOCBAQAogCSBTUElURklSRV9ISUdIRVNUX0xPQ0tFRF9UTEJFTlQgOiBcCiAJIENIRUVUQUhfSElHSEVTVF9MT0NLRURfVExCRU5UKQogCitleHRlcm4gaW50IG51bV9rZXJuZWxfaW1hZ2VfbWFwcGluZ3M7CisKIC8qIFRoZSBkYXRhIGNhY2hlIGlzIHdyaXRlIHRocm91Z2gsIHNvIHRoaXMganVzdCBpbnZhbGlkYXRlcyB0aGUKICAqIHNwZWNpZmllZCBsaW5lLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YWNrdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhY2t0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZWUzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YWNrdHJhY2UuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU1RBQ0tUUkFDRV9ICisjZGVmaW5lIF9TUEFSQzY0X1NUQUNLVFJBQ0VfSAorCitleHRlcm4gdm9pZCBzdGFja190cmFjZV9mbHVzaCh2b2lkKTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1NUQUNLVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zdnI0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N2cjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2ZDVmMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N2cjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKiBTb2xhcmlzL1NQQVJDIGNvbnN0YW50cyBhbmQgZGVmaW5pdGlvbnMgLS0gCi0gKiAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEKLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIGluY2x1ZGVkIGJ5IHVzZXIgbGV2ZWwgYXBwbGljYXRpb25zCi0gKiBidXQgdGhlIHNvbGFyaXMgc3lzY2FsbCBlbXVsYXRvcgotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfU1ZSNF9ICi0jZGVmaW5lIF9TUEFSQzY0X1NWUjRfSAotCi0vKiBTaWduYWxzIGFzIHVzZWQgYnkgc3ZyNCAqLwotdHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAvKiBzaWduYWwgc2V0IHR5cGUgKi8KLQl1aW50IHNpZ2JpdHNbNF07Ci19IHN2cjRfc2lnc2V0X3Q7Ci0KLS8qIFZhbHVlcyBmb3Igc2lnaW5mby5jb2RlICovCi0jZGVmaW5lIFNWUjRfU0lOT0lORk8gMzI3NjcKLS8qIFNpZ2luZm8sIHN1Y2tlciBleHBlY3RzIGJ1bmNoIG9mIGluZm9ybWF0aW9uIG9uIHRob3NlIHBhcmFtZXRlcnMgKi8KLXR5cGVkZWYgdW5pb24gewotCWNoYXIgdG90YWxfc2l6ZSBbMTI4XTsKLQlzdHJ1Y3QgewotCQlpbnQgc2lnbm87Ci0JCWludCBjb2RlOwotCQlpbnQgZXJyb3I7Ci0JCXVuaW9uIHsKLQkJfSBkYXRhOyAKLQl9IHNpZ2luZm87Ci19IHN2cjRfc2lnaW5mb190OwotCi0vKiBDb250ZXh0IGRlZmluaXRpb24gKi8KLQotLyogTG9jYXRpb24gb2YgdGhlIHVzZXIgc3RvcmVkIHJlZ2lzdGVycyBpbnRvIGEgZ3JlZ190ICovCi1lbnVtIHsKLQlTVlI0X1BTUiwgU1ZSNF9QQywgU1ZSNF9OUEMsIFNWUjRfWSwKLQlTVlI0X0cxLCAgU1ZSNF9HMiwgU1ZSNF9HMywgIFNWUjRfRzQsCi0JU1ZSNF9HNSwgIFNWUjRfRzYsIFNWUjRfRzcsICBTVlI0X08wLAotCVNWUjRfTzEsICBTVlI0X08yLCBTVlI0X08zLCAgU1ZSNF9PNCwKLQlTVlI0X081LCAgU1ZSNF9PNiwgU1ZSNF9PNwotfTsKLQotLyogc2l6ZW9mIChyZWdzKSAvIHNpemVvZiAoZ3JlZ190KSwgZGVmaW5lZCBpbiB0aGUgQUJJICovCi0jZGVmaW5lIFNWUjRfTlJFR1MgIDE5Ci0jZGVmaW5lIFNWUjRfTUFYV0lOIDMxCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1MzIgcndpbl9sb1s4XTsKLQl1MzIgcndpbl9pbls4XTsKLX0gc3ZyNF9yd2luZG93X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQgICAgICAgICAgICBjb3VudDsKLQl1MzIgICAgICAgICAgICB3aW5wdHIgW1NWUjRfTUFYV0lOXTsgLyogcG9pbnRlciB0byB0aGUgd2luZG93cyAqLwotCi0Jc3ZyNF9yd2luZG93X3Qgd2luW1NWUjRfTUFYV0lOXTsgICAgICAvKiB0aGUgd2luZG93cyAqLwotfSBzdnI0X2d3aW5kb3dzX3Q7Ci0KLXR5cGVkZWYgaW50IHN2cjRfZ3JlZ3NldF90W1NWUjRfTlJFR1NdOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdTY0ICAgCSBmcHVfcmVnc1szMl07Ci0JdTMyCSBmcF9xOwotCXUzMiAgICAgIGZwX2ZzcjsKLQl1X2NoYXIgICBmcF9ucWVsOwotCXVfY2hhciAgIGZwX25xc2l6ZTsKLQl1X2NoYXIgICBpbnVzZTsJCS8qIGlmIGZwdSBpcyBpbiB1c2UgKi8KLX0gc3ZyNF9mcmVnc2V0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1MzIgICAgaWQ7CQkvKiBpZiB0aGlzIGhvbGRzICJ4cnMiIHN0cmluZyA9PiBwdHIgaXMgdmFsaWQgKi8KLQl1MzIgICAgcHRyOwotfSBzdnI0X3hyc190OwotCi0vKiBNYWNoaW5lIGRlcGVuZGVudCBjb250ZXh0ICovCi10eXBlZGVmIHN0cnVjdCB7Ci0Jc3ZyNF9ncmVnc2V0X3QgICBncmVnOwkvKiByZWdpc3RlcnMgMC4uMTkgKHNlZSB0b3ApICovCi0JdTMyCQkgZ3dpbjsJLyogbWF5IHBvaW50IHRvIHJlZ2lzdGVyIHdpbmRvd3MgKi8KLQlzdnI0X2ZyZWdzZXRfdCAgIGZyZWc7CS8qIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwotCXN2cjRfeHJzX3QgICAgICAgeHJzOwkvKiBtaG0/ICovCi0JaW50ICAgICAgICAgICAgICBwYWRbMTldOwotfSBzdnI0X21jb250ZXh0X3Q7Ci0KLS8qIGZsYWdzIGZvciBzdGFja190LmZsYWdzICovCi1lbnVtIHN2cjRfc3RhY2tfZmxhZ3MgewotCVNWUjRfU1NfT05TVEFDSywKLQlTVlI0X1NTX0RJU0FCTEUsCi19OwotCi0vKiBzaWduYWwgc3RhY2sgZXhlY3V0aW9uIHBsYWNlLCB1bnN1cHBvcnRlZCAqLwotdHlwZWRlZiBzdHJ1Y3Qgc3ZyNF9zdGFja190IHsKLSAgICAgICAgdTMyICBzcDsKLSAgICAgICAgaW50ICBzaXplOwotICAgICAgICBpbnQgIGZsYWdzOwotfSBzdnI0X3N0YWNrX3Q7Ci0KLS8qIENvbnRleHQgdXNlZCBieSBnZXRjb250ZXh0IGFuZCBzZXRjb250ZXh0ICovCi10eXBlZGVmIHN0cnVjdCBzdnI0X3Vjb250ZXh0X3QgewotCXUzMgkJZmxhZ3M7IC8qIGNvbnRleHQgZmxhZ3MsIGluZGljYXRlIHdoYXQgaXMgbG9hZGVkICovCi0JdTMyCQlsaW5rOwotCXN2cjRfc2lnc2V0X3QJc2lnbWFzazsKLQlzdnI0X3N0YWNrX3QJc3RhY2s7Ci0Jc3ZyNF9tY29udGV4dF90CW1jb250ZXh0OwotCWludAkJcGFkWzIzXTsKLX0gc3ZyNF91Y29udGV4dF90OyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLS8qIHdpbmRvd3MgaG9sZCB0aGUgd2luZG93cyBhcyB0aGV5IHdlcmUgYXQgc2lnbmFsIHRpbWUsCi0gKiB1Y29udGV4dC0+bWNvbnRleHQgaG9sZHMgYSBwb2ludGVyIHRvIHRoZW0uCi0gKiBhZGRyZXNzZXMgZm9yIHVjIGFuZCBzaSBhcmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMgdG8gc3ZyNCBzaWduYWwKLSAqIGhhbmRsZXIKLSAqLwotCi0vKiBUaGlzIGlzIHRoZSBzaWduYWwgZnJhbWUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHNpZ25hbCBoYW5kbGVyICovCi10eXBlZGVmIHN0cnVjdCB7Ci0Jc3ZyNF9nd2luZG93c190IGd3OwkvKiB3aW5kb3dzICovCi0Jc3ZyNF91Y29udGV4dF90IHVjOwkvKiBtYWNoaW5lIGNvbnRleHQgKi8KLQlzdnI0X3NpZ2luZm9fdCAgc2k7CS8qIHNpZ2luZm8gKi8KLX0gc3ZyNF9zaWduYWxfZnJhbWVfdDsKLQotI2RlZmluZSBTVlI0X1NGX0FMSUdORUQgKCgoc2l6ZW9mIChzdnI0X3NpZ25hbF9mcmFtZV90KSArIDcpICYgKH43KSkpCi0KLSNlbmRpZiAvKiBpbmNsdWRlIGNvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzY2FsbHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzY2FsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE0M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXNjYWxscy5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU1lTQ0FMTFNfSAorI2RlZmluZSBfU1BBUkM2NF9TWVNDQUxMU19ICisKK3N0cnVjdCBwdF9yZWdzOworCitleHRlcm4gYXNtbGlua2FnZSBsb25nIHNwYXJjX2RvX2ZvcmsodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQsCisJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZSk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBzcGFyY19leGVjdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX1NQQVJDNjRfU1lTQ0FMTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKaW5kZXggMWZhZWZhNi4uNTNlYWUwOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBBUkNIX1NVTjRDX1NVTjQgMAogI2RlZmluZSBBUkNIX1NVTjQgMAogCitleHRlcm4gY2hhciByZWJvb3RfY29tbWFuZFtdOworCiAvKiBUaGVzZSBhcmUgaGVyZSBpbiBhbiBlZmZvcnQgdG8gbW9yZSBmdWxseSB3b3JrIGFyb3VuZCBTcGl0ZmlyZSBFcnJhdGEKICAqICM1MS4gIEVzc2VudGlhbGx5LCBpZiBhIG1lbW9yeSBiYXJyaWVyIG9jY3VycyBzb29uIGFmdGVyIGEgbWlzcHJlZGljdGVkCiAgKiBicmFuY2gsIHRoZSBjaGlwIGNhbiBzdG9wIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMgdW50aWwgYSB0cmFwIG9jY3Vycy4KQEAgLTExNyw2ICsxMTksNyBAQAogZXh0ZXJuIHZvaWQgc3VuX2RvX2JyZWFrKHZvaWQpOwogZXh0ZXJuIGludCBzdG9wX2FfZW5hYmxlZDsKIAorZXh0ZXJuIHZvaWQgZmF1bHRfaW5fdXNlcl93aW5kb3dzKHZvaWQpOwogZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfdXNlcl9zdGFjayh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgX19mbHVzaHdfdXNlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKaW5kZXggZWY1MjcyMS4uY2FjYmVhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKQEAgLTMzLDExICszMyw2IEBACiB9OwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotc3RydWN0IHN1bm9zX3R0eXNpemUgewotCWludCBzdF9saW5lczsgICAvKiBMaW5lcyBvbiB0aGUgdGVybWluYWwgKi8KLQlpbnQgc3RfY29sdW1uczsgLyogQ29sdW1ucyBvbiB0aGUgdGVybWluYWwgKi8KLX07Ci0KIHN0cnVjdCB3aW5zaXplIHsKIAl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CiAJdW5zaWduZWQgc2hvcnQgd3NfY29sOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oCmluZGV4IGNjYmQ2OTQuLjViNzc5ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmgKQEAgLTEsMTQgKzEsMTMgQEAKLS8qICRJZDogdGltZXIuaCx2IDEuMyAyMDAwLzA1LzA5IDE3OjQwOjE1IGRhdmVtIEV4cCAkCi0gKiB0aW1lci5oOiBTeXN0ZW0gdGltZXIgZGVmaW5pdGlvbnMgZm9yIHN1bjUuCisvKiB0aW1lci5oOiBTeXN0ZW0gdGltZXIgZGVmaW5pdGlvbnMgZm9yIHN1bjUuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMjAwOCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KIAogI2lmbmRlZiBfU1BBUkM2NF9USU1FUl9ICiAjZGVmaW5lIF9TUEFSQzY0X1RJTUVSX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzIHsKIAl1bnNpZ25lZCBsb25nICgqZ2V0X3RpY2spKHZvaWQpOwpAQCAtMjUsNSArMjQsNyBAQAogZXh0ZXJuIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzICp0aWNrX29wczsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3BhcmM2NF9nZXRfY2xvY2tfdGljayh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIF9fZGV2aW5pdCBzZXR1cF9zcGFyYzY0X3RpbWVyKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKTsKIAogI2VuZGlmIC8qIF9TUEFSQzY0X1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oCmluZGV4IGJiYjljOGYuLjcyMDhhNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaApAQCAtOTksMTQgKzk5LDYgQEAKIAkgb3IJJWw3LCAlbG8oc3lzdGJsKSwgJWw3OwkJCVwKIAlub3A7IG5vcDsKIAkKLSNkZWZpbmUgSU5ESVJFQ1RfU09MQVJJU19TWVNDQUxMKG51bSkJCQlcCi0Jc2V0aGkJJWhpKDEwOWYpLCAlZzc7CQkJCVwKLQliYSxwdAkleGNjLCBldHJhcDsJCQkJXAotMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCi0JYmEscHQJJXhjYywgdGwwX3NvbGFyaXMgKyAweGM7CQlcCi0JIG1vdgludW0sICVnMTsJCQkJXAotCW5vcDtub3A7bm9wOwotCQogI2RlZmluZSBUUkFQX1VUUkFQKGhhbmRsZXIsbHZsKQkJCQlcCiAJbW92CWhhbmRsZXIsICVnMzsJCQkJXAogCWJhLHB0CSV4Y2MsIHV0cmFwX3RyYXA7CQkJXApAQCAtMTE3LDExICsxMDksNiBAQAogCW5vcDsJCQkJCQlcCiAJbm9wOwogCi0jaWZkZWYgQ09ORklHX1NVTk9TX0VNVUwKLSNkZWZpbmUgU1VOT1NfU1lTQ0FMTF9UUkFQIFNZU0NBTExfVFJBUChsaW51eF9zcGFyY19zeXNjYWxsMzIsIHN1bm9zX3N5c190YWJsZSkKLSNlbHNlCi0jZGVmaW5lIFNVTk9TX1NZU0NBTExfVFJBUCBUUkFQKHN1bm9zX3N5c2NhbGwpCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjZGVmaW5lCUxJTlVYXzMyQklUX1NZU0NBTExfVFJBUCBTWVNDQUxMX1RSQVAobGludXhfc3BhcmNfc3lzY2FsbDMyLCBzeXNfY2FsbF90YWJsZTMyKQogI2Vsc2UKQEAgLTEzMCwxMSArMTE3LDYgQEAKICNkZWZpbmUgTElOVVhfNjRCSVRfU1lTQ0FMTF9UUkFQIFNZU0NBTExfVFJBUChsaW51eF9zcGFyY19zeXNjYWxsLCBzeXNfY2FsbF90YWJsZTY0KQogI2RlZmluZSBHRVRDQ19UUkFQIFRSQVAoZ2V0Y2MpCiAjZGVmaW5lIFNFVENDX1RSQVAgVFJBUChzZXRjYykKLSNpZmRlZiBDT05GSUdfU09MQVJJU19FTVVMCi0jZGVmaW5lIFNPTEFSSVNfU1lTQ0FMTF9UUkFQIFRSQVAoc29sYXJpc19zcGFyY19zeXNjYWxsKQotI2Vsc2UKLSNkZWZpbmUgU09MQVJJU19TWVNDQUxMX1RSQVAgVFJBUChzb2xhcmlzX3N5c2NhbGwpCi0jZW5kaWYKICNkZWZpbmUgQlJFQUtQT0lOVF9UUkFQIFRSQVAoYnJlYWtwb2ludF90cmFwKQogCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaAppbmRleCA3NzU1OWRhLi4xM2JlNDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKQEAgLTMzOCwxNiArMzM4LDYgQEAKICNkZWZpbmUgTlJfU1lTQ0FMTFMJCTMxNwogCiAjaWZkZWYgX19LRVJORUxfXwotLyogc3lzY29uZiBvcHRpb25zLCBmb3IgU3VuT1MgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSAgIF9TQ19BUkdfTUFYICAgICAgICAgICAgIDEKLSNkZWZpbmUgICBfU0NfQ0hJTERfTUFYICAgICAgICAgICAyCi0jZGVmaW5lICAgX1NDX0NMS19UQ0sgICAgICAgICAgICAgMwotI2RlZmluZSAgIF9TQ19OR1JPVVBTX01BWCAgICAgICAgIDQKLSNkZWZpbmUgICBfU0NfT1BFTl9NQVggICAgICAgICAgICA1Ci0jZGVmaW5lICAgX1NDX0pPQl9DT05UUk9MICAgICAgICAgNgotI2RlZmluZSAgIF9TQ19TQVZFRF9JRFMgICAgICAgICAgIDcKLSNkZWZpbmUgICBfU0NfVkVSU0lPTiAgICAgICAgICAgICA4Ci0KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3VzZXIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdXNlci5oCmluZGV4IDAyYjEzODkuLjI5ZmM2ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdXNlci5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdXNlci5oCkBAIC0xLDYwICsxIEBACi0vKiAkSWQ6IHVzZXIuaCx2IDEuMSAxOTk2LzEyLzI2IDE0OjIyOjQ0IGRhdmVtIEV4cCAkCi0gKiBhc20tc3BhcmM2NC91c2VyLmg6IENvcmUgZmlsZSBkZWZpbml0aW9ucyBmb3IgdGhlIFNwYXJjLgotICoKLSAqIEtlZXAgaW4gc3luYyB3aXRoIHJlZy5oLiAgQWN0dWFsbHksIHdlIGNvdWxkIGdldCByaWQgb2YgdGhpcwotICogb25lLCBzaW5jZSB3ZSB3b24ndCBhLm91dCBjb3JlIGR1bXAgdGhhdCBtdWNoIGFueXdheXMgLSBtaWd1ZWwuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCi0gKi8KLSNpZm5kZWYgX1NQQVJDNjRfVVNFUl9ICi0jZGVmaW5lIF9TUEFSQzY0X1VTRVJfSAotCi0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KLXN0cnVjdCBzdW5vc19yZWdzIHsKLQl1bnNpZ25lZCBpbnQgcHNyLCBwYywgbnBjLCB5OwotCXVuc2lnbmVkIGludCByZWdzWzE1XTsKLX07Ci0KLXN0cnVjdCBzdW5vc19mcHF1ZXVlIHsKLQl1bnNpZ25lZCBpbnQgKmFkZHI7Ci0JdW5zaWduZWQgaW50IGluc3Q7Ci19OwotCi1zdHJ1Y3Qgc3Vub3NfZnAgewotCXVuaW9uIHsKLQkJdW5zaWduZWQgaW50IHJlZ3NbMzJdOwotCQlkb3VibGUgcmVnX2RibHNbMTZdOwotCX0gZnJlZ3M7Ci0JdW5zaWduZWQgaW50IGZzcjsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGV4dHJhOwotCXVuc2lnbmVkIGludCBmcHFfY291bnQ7Ci0Jc3RydWN0IHN1bm9zX2ZwcXVldWUgZnBxWzE2XTsKLX07Ci0KLXN0cnVjdCBzdW5vc19mcHUgewotCXN0cnVjdCBzdW5vc19mcCBmcHN0YXR1czsKLX07Ci0KLS8qIFRoZSBTdW5PUyBjb3JlIGZpbGUgaGVhZGVyIGxheW91dC4gKi8KLXN0cnVjdCB1c2VyIHsKLQl1bnNpZ25lZCBpbnQgbWFnaWM7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQlzdHJ1Y3Qgc3Vub3NfcmVncyByZWdzOwotCXN0cnVjdCBleGVjIHVleGVjOwotCWludCAgICAgICAgICAgc2lnbmFsOwotCXNpemVfdCAgICAgICAgdV90c2l6ZTsgLyogYWxsIG9mIHRoZXNlIGluIGJ5dGVzISAqLwotCXNpemVfdCAgICAgICAgdV9kc2l6ZTsKLQlzaXplX3QgICAgICAgIHVfc3NpemU7Ci0JY2hhciAgICAgICAgICB1X2NvbW1bMTddOwotCXN0cnVjdCBzdW5vc19mcHUgZnB1OwotCXVuc2lnbmVkIGludCAgc2lnY29kZTsgICAvKiBTcGVjaWFsIHNpZ2NvbnRleHQgc3ViY29kZSwgaWYgYW55ICovCi19OwotCi0jZGVmaW5lIE5CUEcgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFIC8qIFhYWCA0MDk2IG1heWJlPyAqLwotI2RlZmluZSBVUEFHRVMgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgICAodS5zdGFydF9jb2RlKQotI2RlZmluZSBIT1NUX0RBVEFfU1RBUlRfQUREUiAgICh1LnN0YXJ0X2RhdGEpCi0jZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgICAgKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQotI2RlZmluZSBTVU5PU19DT1JFX01BR0lDICAgICAgIDB4MDgwNDU2Ci0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X1VTRVJfSCkgKi8KKyNpbmNsdWRlIDxhc20tc3BhcmMvdXNlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0va3ZtLmggYi9pbmNsdWRlL2FzbS11bS9rdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmFhNzcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0va3ZtLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fTElOVVhfS1ZNX1VNX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fVU1fSAorCisvKiB1bSBkb2VzIG5vdCBzdXBwb3J0IEtWTSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tdW0vc2VtYXBob3JlLmgKaW5kZXggZmYxM2MzNC4uZDliMjAzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc2VtYXBob3JlLmgKQEAgLTEsNiArMSBAQAotI2lmbmRlZiBfX1VNX1NFTUFQSE9SRV9ICi0jZGVmaW5lIF9fVU1fU0VNQVBIT1JFX0gKLQotI2luY2x1ZGUgImFzbS9hcmNoL3NlbWFwaG9yZS5oIgotCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RsYi5oIGIvaW5jbHVkZS9hc20tdW0vdGxiLmgKaW5kZXggMzlmYzQ3NS4uNTI0MGZhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vdGxiLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9fVU1fVExCX0gKICNkZWZpbmUgX19VTV9UTEJfSAogCisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAva3ZtLmggYi9pbmNsdWRlL2FzbS12ODUwL2t2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzI5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2t2bS5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0xJTlVYX0tWTV9WODUwX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fVjg1MF9ICisKKy8qIHY4NTAgZG9lcyBub3Qgc3VwcG9ydCBLVk0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tdjg1MC9zZW1hcGhvcmUuaAppbmRleCAxMGVkMGNjLi5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2VtYXBob3JlLmgKQEAgLTEsODQgKzEgQEAKLSNpZm5kZWYgX19WODUwX1NFTUFQSE9SRV9IX18KLSNkZWZpbmUgX19WODUwX1NFTUFQSE9SRV9IX18KLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1zdHJ1Y3Qgc2VtYXBob3JlIHsKLQlhdG9taWNfdCBjb3VudDsKLQlpbnQgc2xlZXBlcnM7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLX07Ci0KLSNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3VudCkJCQkJICAgICAgXAotCXsgQVRPTUlDX0lOSVQgKGNvdW50KSwgMCwJCQkJCSAgICAgIFwKLQkgIF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSICgobmFtZSkud2FpdCkgfQotCi0jZGVmaW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KQlcCi0Jc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIgKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKQkJX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDIChuYW1lLDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKLXsKLQkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKCpzZW0pLHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0IChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQgKHNlbSwgMCk7Ci19Ci0KLS8qCi0gKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbgotICovCi1hc21saW5rYWdlIHZvaWQgX19kb3duX2ZhaWxlZCAodm9pZCk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGVfZmFpbGVkICh2b2lkKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fdHJ5bG9ja19mYWlsZWQgKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIF9fdXBfd2FrZXVwICh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgX19kb3duIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWV4dGVybiBpbnQgIF9fZG93bl9pbnRlcnJ1cHRpYmxlIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWV4dGVybiBpbnQgIF9fZG93bl90cnlsb2NrIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWV4dGVybiB2b2lkIF9fdXAgKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93biAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQltaWdodF9zbGVlcCgpOwotCWlmIChhdG9taWNfZGVjX3JldHVybiAoJnNlbS0+Y291bnQpIDwgMCkKLQkJX19kb3duIChzZW0pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUgKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJldCA9IDA7Ci0JbWlnaHRfc2xlZXAoKTsKLQlpZiAoYXRvbWljX2RlY19yZXR1cm4gKCZzZW0tPmNvdW50KSA8IDApCi0JCXJldCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlIChzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCWludCByZXQgPSAwOwotCWlmIChhdG9taWNfZGVjX3JldHVybiAoJnNlbS0+Y291bnQpIDwgMCkKLQkJcmV0ID0gX19kb3duX3RyeWxvY2sgKHNlbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVwIChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWlmIChhdG9taWNfaW5jX3JldHVybiAoJnNlbS0+Y291bnQpIDw9IDApCi0JCV9fdXAgKHNlbSk7Ci19Ci0KLSNlbmRpZiAvKiBfX1Y4NTBfU0VNQVBIT1JFX0hfXyAqLworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L0tidWlsZCBiL2luY2x1ZGUvYXNtLXg4Ni9LYnVpbGQKaW5kZXggYjA0YTdmZi4uMWUzNTU0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS14ODYvS2J1aWxkCkBAIC0xMCwxMyArMTAsMTMgQEAKIGhlYWRlci15ICs9IHB0cmFjZS1hYmkuaAogaGVhZGVyLXkgKz0gc2lnY29udGV4dDMyLmgKIGhlYWRlci15ICs9IHVjb250ZXh0LmgKK2hlYWRlci15ICs9IHByb2Nlc3Nvci1mbGFncy5oCiAKIHVuaWZkZWYteSArPSBlODIwLmgKIHVuaWZkZWYteSArPSBpc3QuaAogdW5pZmRlZi15ICs9IG1jZS5oCiB1bmlmZGVmLXkgKz0gbXNyLmgKIHVuaWZkZWYteSArPSBtdHJyLmgKLXVuaWZkZWYteSArPSBwYWdlLmgKIHVuaWZkZWYteSArPSBwb3NpeF90eXBlc18zMi5oCiB1bmlmZGVmLXkgKz0gcG9zaXhfdHlwZXNfNjQuaAogdW5pZmRlZi15ICs9IHB0cmFjZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYS5vdXQtY29yZS5oIGIvaW5jbHVkZS9hc20teDg2L2Eub3V0LWNvcmUuaAppbmRleCBkMmI2ZTExLi43MTQyMDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYS5vdXQtY29yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9hLm91dC1jb3JlLmgKQEAgLTI5LDggKzI5LDkgQEAKIAlkdW1wLT5tYWdpYyA9IENNQUdJQzsKIAlkdW1wLT5zdGFydF9jb2RlID0gMDsKIAlkdW1wLT5zdGFydF9zdGFjayA9IHJlZ3MtPnNwICYgfihQQUdFX1NJWkUgLSAxKTsKLQlkdW1wLT51X3RzaXplID0gKCh1bnNpZ25lZCBsb25nKSBjdXJyZW50LT5tbS0+ZW5kX2NvZGUpID4+IFBBR0VfU0hJRlQ7Ci0JZHVtcC0+dV9kc2l6ZSA9ICgodW5zaWduZWQgbG9uZykgKGN1cnJlbnQtPm1tLT5icmsgKyAoUEFHRV9TSVpFLTEpKSkgPj4gUEFHRV9TSElGVDsKKwlkdW1wLT51X3RzaXplID0gKCh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPm1tLT5lbmRfY29kZSkgPj4gUEFHRV9TSElGVDsKKwlkdW1wLT51X2RzaXplID0gKCh1bnNpZ25lZCBsb25nKShjdXJyZW50LT5tbS0+YnJrICsgKFBBR0VfU0laRSAtIDEpKSkKKwkJCT4+IFBBR0VfU0hJRlQ7CiAJZHVtcC0+dV9kc2l6ZSAtPSBkdW1wLT51X3RzaXplOwogCWR1bXAtPnVfc3NpemUgPSAwOwogCWR1bXAtPnVfZGVidWdyZWdbMF0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWcwOwpAQCAtNDMsNyArNDQsOCBAQAogCWR1bXAtPnVfZGVidWdyZWdbN10gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWc3OwogCiAJaWYgKGR1bXAtPnN0YXJ0X3N0YWNrIDwgVEFTS19TSVpFKQotCQlkdW1wLT51X3NzaXplID0gKCh1bnNpZ25lZCBsb25nKSAoVEFTS19TSVpFIC0gZHVtcC0+c3RhcnRfc3RhY2spKSA+PiBQQUdFX1NISUZUOworCQlkdW1wLT51X3NzaXplID0gKCh1bnNpZ25lZCBsb25nKShUQVNLX1NJWkUgLSBkdW1wLT5zdGFydF9zdGFjaykpCisJCQkJPj4gUEFHRV9TSElGVDsKIAogCWR1bXAtPnJlZ3MuYnggPSByZWdzLT5ieDsKIAlkdW1wLT5yZWdzLmN4ID0gcmVncy0+Y3g7CkBAIC01NSw3ICs1Nyw3IEBACiAJZHVtcC0+cmVncy5kcyA9ICh1MTYpcmVncy0+ZHM7CiAJZHVtcC0+cmVncy5lcyA9ICh1MTYpcmVncy0+ZXM7CiAJZHVtcC0+cmVncy5mcyA9ICh1MTYpcmVncy0+ZnM7Ci0Jc2F2ZXNlZ21lbnQoZ3MsZ3MpOworCXNhdmVzZWdtZW50KGdzLCBncyk7CiAJZHVtcC0+cmVncy5vcmlnX2F4ID0gcmVncy0+b3JpZ19heDsKIAlkdW1wLT5yZWdzLmlwID0gcmVncy0+aXA7CiAJZHVtcC0+cmVncy5jcyA9ICh1MTYpcmVncy0+Y3M7CkBAIC02Myw3ICs2NSw3IEBACiAJZHVtcC0+cmVncy5zcCA9IHJlZ3MtPnNwOwogCWR1bXAtPnJlZ3Muc3MgPSAodTE2KXJlZ3MtPnNzOwogCi0JZHVtcC0+dV9mcHZhbGlkID0gZHVtcF9mcHUgKHJlZ3MsICZkdW1wLT5pMzg3KTsKKwlkdW1wLT51X2ZwdmFsaWQgPSBkdW1wX2ZwdShyZWdzLCAmZHVtcC0+aTM4Nyk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYWNwaS5oIGIvaW5jbHVkZS9hc20teDg2L2FjcGkuaAppbmRleCA3YTcyZDZhLi4xNDQxMWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYWNwaS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9hY3BpLmgKQEAgLTY3LDE2ICs2NywxNiBAQAogICovCiAjZGVmaW5lIEFDUElfRElWXzY0X0JZXzMyKG5faGksIG5fbG8sIGQzMiwgcTMyLCByMzIpIFwKIAlhc20oImRpdmwgJTI7IgkJCQkgICAgIFwKLQkgICAgOiI9YSIocTMyKSwgIj1kIihyMzIpCQkgICAgIFwKLQkgICAgOiJyIihkMzIpLAkJCQkgICAgIFwKKwkgICAgOiAiPWEiKHEzMiksICI9ZCIocjMyKQkJICAgICBcCisJICAgIDogInIiKGQzMiksCQkJCSAgICAgXAogCSAgICAgIjAiKG5fbG8pLCAiMSIobl9oaSkpCiAKIAogI2RlZmluZSBBQ1BJX1NISUZUX1JJR0hUXzY0KG5faGksIG5fbG8pIFwKIAlhc20oInNocmwgICAkMSwlMgk7IglcCiAJICAgICJyY3JsICAgJDEsJTM7IgkJXAotCSAgICA6Ij1yIihuX2hpKSwgIj1yIihuX2xvKQlcCi0JICAgIDoiMCIobl9oaSksICIxIihuX2xvKSkKKwkgICAgOiAiPXIiKG5faGkpLCAiPXIiKG5fbG8pCVwKKwkgICAgOiAiMCIobl9oaSksICIxIihuX2xvKSkKIAogI2lmZGVmIENPTkZJR19BQ1BJCiBleHRlcm4gaW50IGFjcGlfbGFwaWM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYWx0ZXJuYXRpdmUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hbHRlcm5hdGl2ZS5oCmluZGV4IGQ4YmFjZjMuLjFmNmE5Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hbHRlcm5hdGl2ZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9hbHRlcm5hdGl2ZS5oCkBAIC02Niw4ICs2Niw4IEBACiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqbmFtZSwKLQkJCQkJdm9pZCAqbG9ja3MsIHZvaWQgKmxvY2tzX2VuZCwKLQkJCQkJdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpIHt9CisJCQkJCSAgICAgICB2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAorCQkJCQkgICAgICAgdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKSB7fQogI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KQEAgLTE0OCwxNCArMTQ4LDM0IEBACiB2b2lkIGFwcGx5X3BhcmF2aXJ0KHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICpzdGFydCwKIAkJICAgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICplbmQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZAotYXBwbHlfcGFyYXZpcnQoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKnN0YXJ0LAotCSAgICAgICBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSAqZW5kKQorc3RhdGljIGlubGluZSB2b2lkIGFwcGx5X3BhcmF2aXJ0KHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICpzdGFydCwKKwkJCQkgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICplbmQpCiB7fQogI2RlZmluZSBfX3BhcmFpbnN0cnVjdGlvbnMJTlVMTAogI2RlZmluZSBfX3BhcmFpbnN0cnVjdGlvbnNfZW5kCU5VTEwKICNlbmRpZgogCi1leHRlcm4gdm9pZCB0ZXh0X3Bva2Uodm9pZCAqYWRkciwgdW5zaWduZWQgY2hhciAqb3Bjb2RlLCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIGFkZF9ub3BzKHZvaWQgKmluc25zLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoKKyAqIENsZWFyIGFuZCByZXN0b3JlIHRoZSBrZXJuZWwgd3JpdGUtcHJvdGVjdGlvbiBmbGFnIG9uIHRoZSBsb2NhbCBDUFUuCisgKiBBbGxvd3MgdGhlIGtlcm5lbCB0byBlZGl0IHJlYWQtb25seSBwYWdlcy4KKyAqIFNpZGUtZWZmZWN0OiBhbnkgaW50ZXJydXB0IGhhbmRsZXIgcnVubmluZyBiZXR3ZWVuIHNhdmUgYW5kIHJlc3RvcmUgd2lsbCBoYXZlCisgKiB0aGUgYWJpbGl0eSB0byB3cml0ZSB0byByZWFkLW9ubHkgcGFnZXMuCisgKgorICogV2FybmluZzoKKyAqIENvZGUgcGF0Y2hpbmcgaW4gdGhlIFVQIGNhc2UgaXMgc2FmZSBpZiBOTUlzIGFuZCBNQ0UgaGFuZGxlcnMgYXJlIHN0b3BwZWQgYW5kCisgKiBubyB0aHJlYWQgY2FuIGJlIHByZWVtcHRlZCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIGJlaW5nIG1vZGlmaWVkIChubyBpcmV0IHRvIGFuCisgKiBpbnZhbGlkIGluc3RydWN0aW9uIHBvc3NpYmxlKSBvciBpZiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjaGFuZ2VkIGZyb20gYQorICogY29uc2lzdGVudCBzdGF0ZSB0byBhbm90aGVyIGNvbnNpc3RlbnQgc3RhdGUgYXRvbWljYWxseS4KKyAqIE1vcmUgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gbW9kaWZ5aW5nIGNvZGUgaW4gdGhlIFNNUCBjYXNlIGJlY2F1c2Ugb2YKKyAqIEludGVsJ3MgZXJyYXRhLgorICogT24gdGhlIGxvY2FsIENQVSB5b3UgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYWdhaW4gTk1JIG9yIE1DRSBoYW5kbGVycyBzZWVpbmcgYW4KKyAqIGluY29uc2lzdGVudCBpbnN0cnVjdGlvbiB3aGlsZSB5b3UgcGF0Y2guCisgKiBUaGUgX2Vhcmx5IHZlcnNpb24gZXhwZWN0cyB0aGUgbWVtb3J5IHRvIGFscmVhZHkgYmUgUlcuCisgKi8KKworZXh0ZXJuIHZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwogCiAjZW5kaWYgLyogX0FTTV9YODZfQUxURVJOQVRJVkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgKaW5kZXggYmNmYzA3Zi4uYmU5NjM5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYXBpYy5oCkBAIC00NCw3ICs0NCw2IEBACiBleHRlcm4gaW50IGlvYXBpY19mb3JjZTsKIGV4dGVybiBpbnQgZGlzYWJsZV9hcGljOwogZXh0ZXJuIGludCBkaXNhYmxlX2FwaWNfdGltZXI7Ci1leHRlcm4gdW5zaWduZWQgYm9vdF9jcHVfaWQ7CiAKIC8qCiAgKiBCYXNpYyBmdW5jdGlvbnMgYWNjZXNzaW5nIEFQSUNzLgpAQCAtNTksNiArNTgsOCBAQAogI2RlZmluZSBzZXR1cF9zZWNvbmRhcnlfY2xvY2sgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sKICNlbmRpZgogCitleHRlcm4gaW50IGlzX3ZzbXBfYm94KHZvaWQpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2FwaWNfd3JpdGUodW5zaWduZWQgbG9uZyByZWcsIHUzMiB2KQogewogCSooKHZvbGF0aWxlIHUzMiAqKShBUElDX0JBU0UgKyByZWcpKSA9IHY7CkBAIC02Niw3ICs2Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfYXBpY193cml0ZV9hdG9taWModW5zaWduZWQgbG9uZyByZWcsIHUzMiB2KQogewotCSh2b2lkKSB4Y2hnKCh1MzIqKShBUElDX0JBU0UgKyByZWcpLCB2KTsKKwkodm9pZCl4Y2hnKCh1MzIgKikoQVBJQ19CQVNFICsgcmVnKSwgdik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG5hdGl2ZV9hcGljX3JlYWQodW5zaWduZWQgbG9uZyByZWcpCkBAIC0xMjMsNyArMTI0LDcgQEAKICAqIE9uIDMyYml0IHRoaXMgaXMgbWFjaC14eHggbG9jYWwKICAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKLWV4dGVybiB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfbGFwaWNfbWFwcGluZyh2b2lkKTsKICNlbmRpZgogCiBleHRlcm4gdTggc2V0dXBfQVBJQ19laWx2dF9tY2UodTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYXBpY2RlZi5oIGIvaW5jbHVkZS9hc20teDg2L2FwaWNkZWYuaAppbmRleCA1NTBhZjdhLi42YjkwMDhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYXBpY2RlZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9hcGljZGVmLmgKQEAgLTEyLDE3ICsxMiwxNSBAQAogCiAjZGVmaW5lCUFQSUNfSUQJCTB4MjAKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSMgZGVmaW5lCUFQSUNfSURfTUFTSwkJKDB4RkZ1PDwyNCkKLSMgZGVmaW5lCUdFVF9BUElDX0lEKHgpCQkoKCh4KT4+MjQpJjB4RkZ1KQotIyBkZWZpbmUJU0VUX0FQSUNfSUQoeCkJCSgoKHgpPDwyNCkpCi0jZW5kaWYKLQogI2RlZmluZQlBUElDX0xWUgkweDMwCiAjZGVmaW5lCQlBUElDX0xWUl9NQVNLCQkweEZGMDBGRgotI2RlZmluZQkJR0VUX0FQSUNfVkVSU0lPTih4KQkoKHgpJjB4RkZ1KQotI2RlZmluZQkJR0VUX0FQSUNfTUFYTFZUKHgpCSgoKHgpPj4xNikmMHhGRnUpCi0jZGVmaW5lCQlBUElDX0lOVEVHUkFURUQoeCkJKCh4KSYweEYwdSkKKyNkZWZpbmUJCUdFVF9BUElDX1ZFUlNJT04oeCkJKCh4KSAmIDB4RkZ1KQorI2RlZmluZQkJR0VUX0FQSUNfTUFYTFZUKHgpCSgoKHgpID4+IDE2KSAmIDB4RkZ1KQorI2lmZGVmIENPTkZJR19YODZfMzIKKyMgIGRlZmluZQlBUElDX0lOVEVHUkFURUQoeCkJKCh4KSAmIDB4RjB1KQorI2Vsc2UKKyMgIGRlZmluZQlBUElDX0lOVEVHUkFURUQoeCkJKDEpCisjZW5kaWYKICNkZWZpbmUJCUFQSUNfWEFQSUMoeCkJCSgoeCkgPj0gMHgxNCkKICNkZWZpbmUJQVBJQ19UQVNLUFJJCTB4ODAKICNkZWZpbmUJCUFQSUNfVFBSSV9NQVNLCQkweEZGdQpAQCAtMzMsMTYgKzMxLDE2IEBACiAjZGVmaW5lCQlBUElDX0VJT19BQ0sJCTB4MAogI2RlZmluZQlBUElDX1JSUgkweEMwCiAjZGVmaW5lCUFQSUNfTERSCTB4RDAKLSNkZWZpbmUJCUFQSUNfTERSX01BU0sJCSgweEZGdTw8MjQpCi0jZGVmaW5lCQlHRVRfQVBJQ19MT0dJQ0FMX0lEKHgpCSgoKHgpPj4yNCkmMHhGRnUpCi0jZGVmaW5lCQlTRVRfQVBJQ19MT0dJQ0FMX0lEKHgpCSgoKHgpPDwyNCkpCisjZGVmaW5lCQlBUElDX0xEUl9NQVNLCQkoMHhGRnUgPDwgMjQpCisjZGVmaW5lCQlHRVRfQVBJQ19MT0dJQ0FMX0lEKHgpCSgoKHgpID4+IDI0KSAmIDB4RkZ1KQorI2RlZmluZQkJU0VUX0FQSUNfTE9HSUNBTF9JRCh4KQkoKCh4KSA8PCAyNCkpCiAjZGVmaW5lCQlBUElDX0FMTF9DUFVTCQkweEZGdQogI2RlZmluZQlBUElDX0RGUgkweEUwCiAjZGVmaW5lCQlBUElDX0RGUl9DTFVTVEVSCQkweDBGRkZGRkZGdWwKICNkZWZpbmUJCUFQSUNfREZSX0ZMQVQJCQkweEZGRkZGRkZGdWwKICNkZWZpbmUJQVBJQ19TUElWCTB4RjAKLSNkZWZpbmUJCUFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRAkoMTw8OSkKLSNkZWZpbmUJCUFQSUNfU1BJVl9BUElDX0VOQUJMRUQJCSgxPDw4KQorI2RlZmluZQkJQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVECSgxIDw8IDkpCisjZGVmaW5lCQlBUElDX1NQSVZfQVBJQ19FTkFCTEVECQkoMSA8PCA4KQogI2RlZmluZQlBUElDX0lTUgkweDEwMAogI2RlZmluZQlBUElDX0lTUl9OUiAgICAgMHg4ICAgICAvKiBOdW1iZXIgb2YgMzIgYml0IElTUiByZWdpc3RlcnMuICovCiAjZGVmaW5lCUFQSUNfVE1SCTB4MTgwCkBAIC03OCwyNyArNzYsMjcgQEAKICNkZWZpbmUJCUFQSUNfRE1fRVhUSU5UCQkweDAwNzAwCiAjZGVmaW5lCQlBUElDX1ZFQ1RPUl9NQVNLCTB4MDAwRkYKICNkZWZpbmUJQVBJQ19JQ1IyCTB4MzEwCi0jZGVmaW5lCQlHRVRfQVBJQ19ERVNUX0ZJRUxEKHgpCSgoKHgpPj4yNCkmMHhGRikKLSNkZWZpbmUJCVNFVF9BUElDX0RFU1RfRklFTEQoeCkJKCh4KTw8MjQpCisjZGVmaW5lCQlHRVRfQVBJQ19ERVNUX0ZJRUxEKHgpCSgoKHgpID4+IDI0KSAmIDB4RkYpCisjZGVmaW5lCQlTRVRfQVBJQ19ERVNUX0ZJRUxEKHgpCSgoeCkgPDwgMjQpCiAjZGVmaW5lCUFQSUNfTFZUVAkweDMyMAogI2RlZmluZQlBUElDX0xWVFRITVIJMHgzMzAKICNkZWZpbmUJQVBJQ19MVlRQQwkweDM0MAogI2RlZmluZQlBUElDX0xWVDAJMHgzNTAKLSNkZWZpbmUJCUFQSUNfTFZUX1RJTUVSX0JBU0VfTUFTSwkoMHgzPDwxOCkKLSNkZWZpbmUJCUdFVF9BUElDX1RJTUVSX0JBU0UoeCkJCSgoKHgpPj4xOCkmMHgzKQotI2RlZmluZQkJU0VUX0FQSUNfVElNRVJfQkFTRSh4KQkJKCgoeCk8PDE4KSkKKyNkZWZpbmUJCUFQSUNfTFZUX1RJTUVSX0JBU0VfTUFTSwkoMHgzIDw8IDE4KQorI2RlZmluZQkJR0VUX0FQSUNfVElNRVJfQkFTRSh4KQkJKCgoeCkgPj4gMTgpICYgMHgzKQorI2RlZmluZQkJU0VUX0FQSUNfVElNRVJfQkFTRSh4KQkJKCgoeCkgPDwgMTgpKQogI2RlZmluZQkJQVBJQ19USU1FUl9CQVNFX0NMS0lOCQkweDAKICNkZWZpbmUJCUFQSUNfVElNRVJfQkFTRV9UTUJBU0UJCTB4MQogI2RlZmluZQkJQVBJQ19USU1FUl9CQVNFX0RJVgkJMHgyCi0jZGVmaW5lCQlBUElDX0xWVF9USU1FUl9QRVJJT0RJQwkJKDE8PDE3KQotI2RlZmluZQkJQVBJQ19MVlRfTUFTS0VECQkJKDE8PDE2KQotI2RlZmluZQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUgkJKDE8PDE1KQotI2RlZmluZQkJQVBJQ19MVlRfUkVNT1RFX0lSUgkJKDE8PDE0KQotI2RlZmluZQkJQVBJQ19JTlBVVF9QT0xBUklUWQkJKDE8PDEzKQotI2RlZmluZQkJQVBJQ19TRU5EX1BFTkRJTkcJCSgxPDwxMikKKyNkZWZpbmUJCUFQSUNfTFZUX1RJTUVSX1BFUklPRElDCQkoMSA8PCAxNykKKyNkZWZpbmUJCUFQSUNfTFZUX01BU0tFRAkJCSgxIDw8IDE2KQorI2RlZmluZQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUgkJKDEgPDwgMTUpCisjZGVmaW5lCQlBUElDX0xWVF9SRU1PVEVfSVJSCQkoMSA8PCAxNCkKKyNkZWZpbmUJCUFQSUNfSU5QVVRfUE9MQVJJVFkJCSgxIDw8IDEzKQorI2RlZmluZQkJQVBJQ19TRU5EX1BFTkRJTkcJCSgxIDw8IDEyKQogI2RlZmluZQkJQVBJQ19NT0RFX01BU0sJCQkweDcwMAotI2RlZmluZQkJR0VUX0FQSUNfREVMSVZFUllfTU9ERSh4KQkoKCh4KT4+OCkmMHg3KQotI2RlZmluZQkJU0VUX0FQSUNfREVMSVZFUllfTU9ERSh4LCB5KQkoKCh4KSZ+MHg3MDApfCgoeSk8PDgpKQorI2RlZmluZQkJR0VUX0FQSUNfREVMSVZFUllfTU9ERSh4KQkoKCh4KSA+PiA4KSAmIDB4NykKKyNkZWZpbmUJCVNFVF9BUElDX0RFTElWRVJZX01PREUoeCwgeSkJKCgoeCkgJiB+MHg3MDApIHwgKCh5KSA8PCA4KSkKICNkZWZpbmUJCQlBUElDX01PREVfRklYRUQJCTB4MAogI2RlZmluZQkJCUFQSUNfTU9ERV9OTUkJCTB4NAogI2RlZmluZQkJCUFQSUNfTU9ERV9FWFRJTlQJMHg3CkBAIC0xMDcsNyArMTA1LDcgQEAKICNkZWZpbmUJQVBJQ19UTUlDVAkweDM4MAogI2RlZmluZQlBUElDX1RNQ0NUCTB4MzkwCiAjZGVmaW5lCUFQSUNfVERDUgkweDNFMAotI2RlZmluZQkJQVBJQ19URFJfRElWX1RNQkFTRQkoMTw8MikKKyNkZWZpbmUJCUFQSUNfVERSX0RJVl9UTUJBU0UJKDEgPDwgMikKICNkZWZpbmUJCUFQSUNfVERSX0RJVl8xCQkweEIKICNkZWZpbmUJCUFQSUNfVERSX0RJVl8yCQkweDAKICNkZWZpbmUJCUFQSUNfVERSX0RJVl80CQkweDEKQEAgLTExNywxNCArMTE1LDE0IEBACiAjZGVmaW5lCQlBUElDX1REUl9ESVZfNjQJCTB4OQogI2RlZmluZQkJQVBJQ19URFJfRElWXzEyOAkweEEKICNkZWZpbmUJQVBJQ19FSUxWVDAgICAgIDB4NTAwCi0jZGVmaW5lCQlBUElDX0VJTFZUX05SX0FNRF9LOAkxCS8qIE51bWJlciBvZiBleHRlbmRlZCBpbnRlcnJ1cHRzICovCisjZGVmaW5lCQlBUElDX0VJTFZUX05SX0FNRF9LOAkxCS8qICMgb2YgZXh0ZW5kZWQgaW50ZXJydXB0cyAqLwogI2RlZmluZQkJQVBJQ19FSUxWVF9OUl9BTURfMTBICTQKLSNkZWZpbmUJCUFQSUNfRUlMVlRfTFZUT0ZGKHgpCSgoKHgpPj40KSYweEYpCisjZGVmaW5lCQlBUElDX0VJTFZUX0xWVE9GRih4KQkoKCh4KSA+PiA0KSAmIDB4RikKICNkZWZpbmUJCUFQSUNfRUlMVlRfTVNHX0ZJWAkweDAKICNkZWZpbmUJCUFQSUNfRUlMVlRfTVNHX1NNSQkweDIKICNkZWZpbmUJCUFQSUNfRUlMVlRfTVNHX05NSQkweDQKICNkZWZpbmUJCUFQSUNfRUlMVlRfTVNHX0VYVAkweDcKLSNkZWZpbmUJCUFQSUNfRUlMVlRfTUFTS0VECSgxPDwxNikKKyNkZWZpbmUJCUFQSUNfRUlMVlRfTUFTS0VECSgxIDw8IDE2KQogI2RlZmluZQlBUElDX0VJTFZUMSAgICAgMHg1MTAKICNkZWZpbmUJQVBJQ19FSUxWVDIgICAgIDB4NTIwCiAjZGVmaW5lCUFQSUNfRUlMVlQzICAgICAweDUzMApAQCAtMTM1LDcgKzEzMyw3IEBACiAjIGRlZmluZSBNQVhfSU9fQVBJQ1MgNjQKICNlbHNlCiAjIGRlZmluZSBNQVhfSU9fQVBJQ1MgMTI4Ci0jIGRlZmluZSBNQVhfTE9DQUxfQVBJQyAyNTYKKyMgZGVmaW5lIE1BWF9MT0NBTF9BUElDIDMyNzY4CiAjZW5kaWYKIAogLyoKQEAgLTQwOCw2ICs0MDYsOSBAQAogCiAjdW5kZWYgdTMyCiAKLSNkZWZpbmUgQkFEX0FQSUNJRCAweEZGdQotCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorICNkZWZpbmUgQkFEX0FQSUNJRCAweEZGdQorI2Vsc2UKKyAjZGVmaW5lIEJBRF9BUElDSUQgMHhGRkZGdQorI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9hdG9taWNfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hdG9taWNfMzIuaAppbmRleCA0MzdhYWM4Li4yMWE0ODI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYXRvbWljXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2F0b21pY18zMi5oCkBAIC0xNSwxMzggKzE1LDEzMyBAQAogICogb24gdXMuIFdlIG5lZWQgdG8gdXNlIF9leGFjdGx5XyB0aGUgYWRkcmVzcyB0aGUgdXNlciBnYXZlIHVzLAogICogbm90IHNvbWUgYWxpYXMgdGhhdCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgY291bnRlcjsKK30gYXRvbWljX3Q7CiAKICNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQogCiAvKioKICAqIGF0b21pY19yZWFkIC0gcmVhZCBhdG9taWMgdmFyaWFibGUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgotICovIAorICovCiAjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQogCiAvKioKICAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CiAgKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqIAorICoKICAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8gCi0jZGVmaW5lIGF0b21pY19zZXQodixpKQkJKCgodiktPmNvdW50ZXIpID0gKGkpKQorICovCisjZGVmaW5lIGF0b21pY19zZXQodiwgaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQogCiAvKioKICAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKICAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAogICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogCisgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKLQkJOiIrbSIgKHYtPmNvdW50ZXIpCi0JCToiaXIiIChpKSk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJpciIgKGkpKTsKIH0KIAogLyoqCiAgKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgaW50ZWdlciBmcm9tIGF0b21pYyB2YXJpYWJsZQogICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJzdWJsICUxLCUwIgotCQk6IittIiAodi0+Y291bnRlcikKLQkJOiJpciIgKGkpKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQorCQkgICAgIDogImlyIiAoaSkpOwogfQogCiAvKioKICAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAogICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKICAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCiAgKiBvdGhlciBjYXNlcy4KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQorc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgotCQk6IittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6ImlyIiAoaSkgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGM7CiB9CiAKIC8qKgogICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggImluY2wgJTAiCi0JCToiK20iICh2LT5jb3VudGVyKSk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOwogfQogCiAvKioKICAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiAKKyAqCiAgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLyAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJkZWNsICUwIgotCQk6IittIiAodi0+Y291bnRlcikpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKIH0KIAogLyoqCiAgKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiAKKyAqCiAgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKICAqIGNhc2VzLgotICovIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgotCQk6IittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6IDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOwogCXJldHVybiBjICE9IDA7CiB9CiAKIC8qKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdCAKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCiAgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAogICogb3RoZXIgY2FzZXMuCi0gKi8gCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKIHsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCToiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCTogOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogOiAibWVtb3J5Iik7CiAJcmV0dXJuIGMgIT0gMDsKIH0KIApAQCAtMTU0LDE5ICsxNDksMTggQEAKICAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKICAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogCisgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKICAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KICAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLyAKLXN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgotCQk6IittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6ImlyIiAoaSkgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGM7CiB9CiAKQEAgLTE3NywyMCArMTcxLDE5IEBACiAgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKIHsKIAlpbnQgX19pOwogI2lmZGVmIENPTkZJR19NMzg2CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZih1bmxpa2VseShib290X2NwdV9kYXRhLng4NiA8PSAzKSkKKwlpZiAodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPD0gMykpCiAJCWdvdG8gbm9feGFkZDsKICNlbmRpZgogCS8qIE1vZGVybiA0ODYrIHByb2Nlc3NvciAqLwogCV9faSA9IGk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTEiCi0JCToiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKLQkJOiA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKKwkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQorCQkgICAgIDogOiAibWVtb3J5Iik7CiAJcmV0dXJuIGkgKyBfX2k7CiAKICNpZmRlZiBDT05GSUdfTTM4NgpAQCAtMjEwLDkgKzIwMyw5IEBACiAgKgogICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucyBAdiAtIEBpCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCiB7Ci0JcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKC1pLHYpOworCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7CiB9CiAKICNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG9sZCksIChuZXcpKSkKQEAgLTIyNyw3ICsyMjAsNyBAQAogICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIEB2IHdhcyBub3QgYWxyZWFkeSBAdS4KICAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCiB7CiAJaW50IGMsIG9sZDsKIAljID0gYXRvbWljX3JlYWQodik7CkBAIC0yNDQsMTcgKzIzNywxNyBAQAogCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCi0jZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSx2KSkKLSNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLHYpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAgKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAgKGF0b21pY19zdWJfcmV0dXJuKDEsIHYpKQogCiAvKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCi0jZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpIFwKLV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJhbmRsICUwLCUxIiBcCi06IDogInIiICh+KG1hc2spKSwibSIgKCphZGRyKSA6ICJtZW1vcnkiKQorI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKQkJCQlcCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRsICUwLCUxIgkJCVwKKwkJICAgICA6IDogInIiICh+KG1hc2spKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQogCi0jZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKSBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAib3JsICUwLCUxIiBcCi06IDogInIiIChtYXNrKSwibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisjZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKQkJCQlcCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJvcmwgJTAsJTEiCQkJCVwKKwkJICAgICA6IDogInIiIChtYXNrKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQogCiAvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiB4ODYgKi8KICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2F0b21pY182NC5oIGIvaW5jbHVkZS9hc20teDg2L2F0b21pY182NC5oCmluZGV4IDJkMjBhN2EuLjNlMGNkN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hdG9taWNfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYXRvbWljXzY0LmgKQEAgLTIyLDE0MCArMjIsMTM1IEBACiAgKiBvbiB1cy4gV2UgbmVlZCB0byB1c2UgX2V4YWN0bHlfIHRoZSBhZGRyZXNzIHRoZSB1c2VyIGdhdmUgdXMsCiAgKiBub3Qgc29tZSBhbGlhcyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGluZm9ybWF0aW9uLgogICovCi10eXBlZGVmIHN0cnVjdCB7IGludCBjb3VudGVyOyB9IGF0b21pY190OwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBjb3VudGVyOworfSBhdG9taWNfdDsKIAogI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CiAKIC8qKgogICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQogICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogCisgKgogICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKi8gCisgKi8KICNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCiAKIC8qKgogICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKICAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICogCisgKgogICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KLSAqLyAKLSNkZWZpbmUgYXRvbWljX3NldCh2LGkpCQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisgKi8KKyNkZWZpbmUgYXRvbWljX3NldCh2LCBpKQkJKCgodiktPmNvdW50ZXIpID0gKGkpKQogCiAvKioKICAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKICAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAogICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogCisgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKLQkJOiI9bSIgKHYtPmNvdW50ZXIpCi0JCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKIH0KIAogLyoqCiAgKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYyB2YXJpYWJsZQogICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJzdWJsICUxLCUwIgotCQk6Ij1tIiAodi0+Y291bnRlcikKLQkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwogfQogCiAvKioKICAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAogICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKICAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCiAgKiBvdGhlciBjYXNlcy4KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQorc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgotCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGM7CiB9CiAKIC8qKgogICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggImluY2wgJTAiCi0JCToiPW0iICh2LT5jb3VudGVyKQotCQk6Im0iICh2LT5jb3VudGVyKSk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwogfQogCiAvKioKICAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiAKKyAqCiAgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLyAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJkZWNsICUwIgotCQk6Ij1tIiAodi0+Y291bnRlcikKLQkJOiJtIiAodi0+Y291bnRlcikpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKIH0KIAogLyoqCiAgKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiAKKyAqCiAgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKICAqIGNhc2VzLgotICovIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgotCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwogCXJldHVybiBjICE9IDA7CiB9CiAKIC8qKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdCAKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIAorICoKICAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCiAgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAogICogb3RoZXIgY2FzZXMuCi0gKi8gCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKIHsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCToiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCToibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGMgIT0gMDsKIH0KIApAQCAtMTYzLDE5ICsxNTgsMTggQEAKICAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKICAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAogICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogCisgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKICAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KICAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLyAKLXN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgotCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGM7CiB9CiAKQEAgLTE4NiwyNyArMTgwLDI4IEBACiAgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKIHsKIAlpbnQgX19pID0gaTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKLQkJOiIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQotCQk6IDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gaSArIF9faTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKIHsKLQlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksdik7CisJcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKC1pLCB2KTsKIH0KIAotI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAgKGF0b21pY19hZGRfcmV0dXJuKDEsdikpCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSx2KSkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKIAogLyogQW4gNjRiaXQgYXRvbWljIHR5cGUgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIGNvdW50ZXI7IH0gYXRvbWljNjRfdDsKK3R5cGVkZWYgc3RydWN0IHsKKwlsb25nIGNvdW50ZXI7Cit9IGF0b21pYzY0X3Q7CiAKICNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQl7IChpKSB9CiAKQEAgLTIyNiw3ICsyMjEsNyBAQAogICoKICAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCiAgKi8KLSNkZWZpbmUgYXRvbWljNjRfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKyNkZWZpbmUgYXRvbWljNjRfc2V0KHYsIGkpCQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCiAKIC8qKgogICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljNjQgdmFyaWFibGUKQEAgLTIzNSwxMiArMjMwLDExIEBACiAgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2FkZChsb25nIGksIGF0b21pYzY0X3QgKnYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggImFkZHEgJTEsJTAiCi0JCToiPW0iICh2LT5jb3VudGVyKQotCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CiB9CiAKIC8qKgpAQCAtMjUwLDEyICsyNDQsMTEgQEAKICAqCiAgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc3ViKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggInN1YnEgJTEsJTAiCi0JCToiPW0iICh2LT5jb3VudGVyKQotCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VicSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CiB9CiAKIC8qKgpAQCAtMjY3LDE0ICsyNjAsMTMgQEAKICAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCiAgKiBvdGhlciBjYXNlcy4KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdChsb25nIGksIGF0b21pYzY0X3QgKnYpCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9zdWJfYW5kX3Rlc3QobG9uZyBpLCBhdG9taWM2NF90ICp2KQogewogCXVuc2lnbmVkIGNoYXIgYzsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLX1BSRUZJWCAic3VicSAlMiwlMDsgc2V0ZSAlMSIKLQkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VicSAlMiwlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwogCXJldHVybiBjOwogfQogCkBAIC0yODQsMTIgKzI3NiwxMSBAQAogICoKICAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLX1BSRUZJWCAiaW5jcSAlMCIKLQkJOiI9bSIgKHYtPmNvdW50ZXIpCi0JCToibSIgKHYtPmNvdW50ZXIpKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7CiB9CiAKIC8qKgpAQCAtMjk4LDEyICsyODksMTEgQEAKICAqCiAgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KICAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DS19QUkVGSVggImRlY3EgJTAiCi0JCToiPW0iICh2LT5jb3VudGVyKQotCQk6Im0iICh2LT5jb3VudGVyKSk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNxICUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwogfQogCiAvKioKQEAgLTMxNCwxNCArMzA0LDEzIEBACiAgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCiAgKiBjYXNlcy4KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pYzY0X2RlY19hbmRfdGVzdChhdG9taWM2NF90ICp2KQorc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJkZWNxICUwOyBzZXRlICUxIgotCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwogCXJldHVybiBjICE9IDA7CiB9CiAKQEAgLTMzMywxNCArMzIyLDEzIEBACiAgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAogICogb3RoZXIgY2FzZXMuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2luY19hbmRfdGVzdChhdG9taWM2NF90ICp2KQogewogCXVuc2lnbmVkIGNoYXIgYzsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLX1BSRUZJWCAiaW5jcSAlMDsgc2V0ZSAlMSIKLQkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJOiJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwOyBzZXRlICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gYyAhPSAwOwogfQogCkBAIC0zNTMsMTQgKzM0MSwxMyBAQAogICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgogICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljNjRfYWRkX25lZ2F0aXZlKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgotCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGM7CiB9CiAKQEAgLTM3MSwyOSArMzU4LDI4IEBACiAgKgogICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKICAqLwotc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKIHsKIAlsb25nIF9faSA9IGk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgotCQk6IityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCTogOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gaSArIF9faTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKIHsKLQlyZXR1cm4gYXRvbWljNjRfYWRkX3JldHVybigtaSx2KTsKKwlyZXR1cm4gYXRvbWljNjRfYWRkX3JldHVybigtaSwgdik7CiB9CiAKLSNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KSAgKGF0b21pYzY0X2FkZF9yZXR1cm4oMSx2KSkKLSNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSAgKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSx2KSkKKyNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KSAgKGF0b21pYzY0X2FkZF9yZXR1cm4oMSwgKHYpKSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSAgKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwgKHYpKSkKIAotI2RlZmluZSBhdG9taWM2NF9jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIG9sZCwgbmV3KSkKKyNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvbGQsIG5ldykgKGNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAob2xkKSwgKG5ldykpKQogI2RlZmluZSBhdG9taWM2NF94Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIG9sZCwgbmV3KSkKLSNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvbGQpLCAobmV3KSkpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCAobmV3KSkpCiAKIC8qKgogICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQpAQCAtNDA0LDcgKzM5MCw3IEBACiAgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KICAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCiB7CiAJaW50IGMsIG9sZDsKIAljID0gYXRvbWljX3JlYWQodik7CkBAIC00MzAsNyArNDE2LDcgQEAKICAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgogICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQorc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKIHsKIAlsb25nIGMsIG9sZDsKIAljID0gYXRvbWljNjRfcmVhZCh2KTsKQEAgLTQ0OCwxMyArNDM0LDE0IEBACiAjZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAogLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKSBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIgXAotOiA6ICJyIiAofihtYXNrKSksIm0iICgqYWRkcikgOiAibWVtb3J5IikKKyNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJCVwKKwkJICAgICA6IDogInIiICh+KG1hc2spKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQogCi0jZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKSBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAib3JsICUwLCUxIiBcCi06IDogInIiICgodW5zaWduZWQpbWFzayksIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQorI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQkJXAorCQkgICAgIDogOiAiciIgKCh1bnNpZ25lZCkobWFzaykpLCAibSIgKCooYWRkcikpCQlcCisJCSAgICAgOiAibWVtb3J5IikKIAogLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvYmlvc19lYmRhLmggYi9pbmNsdWRlL2FzbS14ODYvYmlvc19lYmRhLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvYmlvc19lYmRhLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXg4Ni9iaW9zX2ViZGEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teDg2L2JpdG9wcy5oCmluZGV4IDFhMjNjZTEuLjFhZTdiMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYml0b3BzLmgKQEAgLTIzLDEwICsyMywxMyBAQAogI2lmIF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDEpCiAvKiBUZWNobmljYWxseSB3cm9uZywgYnV0IHRoaXMgYXZvaWRzIGNvbXBpbGF0aW9uIGVycm9ycyBvbiBzb21lIGdjYwogICAgdmVyc2lvbnMuICovCi0jZGVmaW5lIEFERFIgIj1tIiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCisjZGVmaW5lIEFERFIgIj1tIiAoKih2b2xhdGlsZSBsb25nICopYWRkcikKKyNkZWZpbmUgQklUX0FERFIgIj1tIiAoKCh2b2xhdGlsZSBpbnQgKilhZGRyKVtuciA+PiA1XSkKICNlbHNlCiAjZGVmaW5lIEFERFIgIittIiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCisjZGVmaW5lIEJJVF9BRERSICIrbSIgKCgodm9sYXRpbGUgaW50ICopYWRkcilbbnIgPj4gNV0pCiAjZW5kaWYKKyNkZWZpbmUgQkFTRV9BRERSICJtIiAoKih2b2xhdGlsZSBpbnQgKilhZGRyKQogCiAvKioKICAqIHNldF9iaXQgLSBBdG9taWNhbGx5IHNldCBhIGJpdCBpbiBtZW1vcnkKQEAgLTQ1LDkgKzQ4LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYnRzICUxLCUwIgotCQkgICAgIDogQUREUgotCQkgICAgIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYnRzICUxLCUwIiA6IEFERFIgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CiB9CiAKIC8qKgpAQCAtNzksOSArODAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0ciAlMSwlMCIKLQkJICAgICA6IEFERFIKLQkJICAgICA6ICJJciIgKG5yKSk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJidHIgJTEsJTIiIDogQklUX0FERFIgOiAiSXIiIChuciksIEJBU0VfQUREUik7CiB9CiAKIC8qCkBAIC0xMDAsNyArOTksNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewotCWFzbSB2b2xhdGlsZSgiYnRyICUxLCUwIiA6IEFERFIgOiAiSXIiIChucikpOworCWFzbSB2b2xhdGlsZSgiYnRyICUxLCUyIiA6IEJJVF9BRERSIDogIklyIiAobnIpLCBCQVNFX0FERFIpOwogfQogCiAvKgpAQCAtMTM1LDcgKzEzNCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQogewotCWFzbSB2b2xhdGlsZSgiYnRjICUxLCUwIiA6IEFERFIgOiAiSXIiIChucikpOworCWFzbSB2b2xhdGlsZSgiYnRjICUxLCUyIiA6IEJJVF9BRERSIDogIklyIiAobnIpLCBCQVNFX0FERFIpOwogfQogCiAvKioKQEAgLTE0OSw4ICsxNDgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJidGMgJTEsJTAiCi0JCSAgICAgOiBBRERSIDogIklyIiAobnIpKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0YyAlMSwlMiIgOiBCSVRfQUREUiA6ICJJciIgKG5yKSwgQkFTRV9BRERSKTsKIH0KIAogLyoqCkBAIC0xNjYsOSArMTY0LDcgQEAKIAlpbnQgb2xkYml0OwogCiAJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJidHMgJTIsJTFcblx0IgotCQkgICAgICJzYmIgJTAsJTAiCi0JCSAgICAgOiAiPXIiIChvbGRiaXQpLCBBRERSCi0JCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CisJCSAgICAgInNiYiAlMCwlMCIgOiAiPXIiIChvbGRiaXQpLCBBRERSIDogIklyIiAobnIpIDogIm1lbW9yeSIpOwogCiAJcmV0dXJuIG9sZGJpdDsKIH0KQEAgLTE5OCwxMCArMTk0LDkgQEAKIHsKIAlpbnQgb2xkYml0OwogCi0JYXNtKCJidHMgJTIsJTFcblx0IgotCSAgICAic2JiICUwLCUwIgotCSAgICA6ICI9ciIgKG9sZGJpdCksIEFERFIKLQkgICAgOiAiSXIiIChucikpOworCWFzbSB2b2xhdGlsZSgiYnRzICUyLCUzXG5cdCIKKwkJICAgICAic2JiICUwLCUwIgorCQkgICAgIDogIj1yIiAob2xkYml0KSwgQklUX0FERFIgOiAiSXIiIChuciksIEJBU0VfQUREUik7CiAJcmV0dXJuIG9sZGJpdDsKIH0KIApAQCAtMjE5LDggKzIxNCw3IEBACiAKIAlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImJ0ciAlMiwlMVxuXHQiCiAJCSAgICAgInNiYiAlMCwlMCIKLQkJICAgICA6ICI9ciIgKG9sZGJpdCksIEFERFIKLQkJICAgICA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKKwkJICAgICA6ICI9ciIgKG9sZGJpdCksIEFERFIgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CiAKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMjM4LDEwICsyMzIsOSBAQAogewogCWludCBvbGRiaXQ7CiAKLQlhc20gdm9sYXRpbGUoImJ0ciAlMiwlMVxuXHQiCisJYXNtIHZvbGF0aWxlKCJidHIgJTIsJTNcblx0IgogCQkgICAgICJzYmIgJTAsJTAiCi0JCSAgICAgOiAiPXIiIChvbGRiaXQpLCBBRERSCi0JCSAgICAgOiAiSXIiIChucikpOworCQkgICAgIDogIj1yIiAob2xkYml0KSwgQklUX0FERFIgOiAiSXIiIChuciksIEJBU0VfQUREUik7CiAJcmV0dXJuIG9sZGJpdDsKIH0KIApAQCAtMjUwLDEwICsyNDMsOSBAQAogewogCWludCBvbGRiaXQ7CiAKLQlhc20gdm9sYXRpbGUoImJ0YyAlMiwlMVxuXHQiCisJYXNtIHZvbGF0aWxlKCJidGMgJTIsJTNcblx0IgogCQkgICAgICJzYmIgJTAsJTAiCi0JCSAgICAgOiAiPXIiIChvbGRiaXQpLCBBRERSCi0JCSAgICAgOiAiSXIiIChucikgOiAibWVtb3J5Iik7CisJCSAgICAgOiAiPXIiIChvbGRiaXQpLCBCSVRfQUREUiA6ICJJciIgKG5yKSwgQkFTRV9BRERSKTsKIAogCXJldHVybiBvbGRiaXQ7CiB9CkBAIC0yNzIsOCArMjY0LDcgQEAKIAogCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYnRjICUyLCUxXG5cdCIKIAkJICAgICAic2JiICUwLCUwIgotCQkgICAgIDogIj1yIiAob2xkYml0KSwgQUREUgotCQkgICAgIDogIklyIiAobnIpIDogIm1lbW9yeSIpOworCQkgICAgIDogIj1yIiAob2xkYml0KSwgQUREUiA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKIAogCXJldHVybiBvbGRiaXQ7CiB9CkBAIC0yODgsMTAgKzI3OSwxMSBAQAogewogCWludCBvbGRiaXQ7CiAKLQlhc20gdm9sYXRpbGUoImJ0ICUyLCUxXG5cdCIKKwlhc20gdm9sYXRpbGUoImJ0ICUyLCUzXG5cdCIKIAkJICAgICAic2JiICUwLCUwIgogCQkgICAgIDogIj1yIiAob2xkYml0KQotCQkgICAgIDogIm0iICgqKHVuc2lnbmVkIGxvbmcgKilhZGRyKSwgIklyIiAobnIpKTsKKwkJICAgICA6ICJtIiAoKCh2b2xhdGlsZSBjb25zdCBpbnQgKilhZGRyKVtuciA+PiA1XSksCisJCSAgICAgICAiSXIiIChuciksIEJBU0VfQUREUik7CiAKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMzEwLDYgKzMwMiw4IEBACiAJIGNvbnN0YW50X3Rlc3RfYml0KChuciksKGFkZHIpKSA6CVwKIAkgdmFyaWFibGVfdGVzdF9iaXQoKG5yKSwoYWRkcikpKQogCisjdW5kZWYgQkFTRV9BRERSCisjdW5kZWYgQklUX0FERFIKICN1bmRlZiBBRERSCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYml0b3BzXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvYml0b3BzXzMyLmgKaW5kZXggZTRkNzVmYy4uMjUxM2E4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2JpdG9wc18zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHNfMzIuaApAQCAtMjAsMjAgKzIwLDIyIEBACiAKIAlpZiAoIXNpemUpCiAJCXJldHVybiAwOwotCS8qIFRoaXMgbG9va3MgYXQgbWVtb3J5LiBNYXJrIGl0IHZvbGF0aWxlIHRvIHRlbGwgZ2NjIG5vdCB0byBtb3ZlIGl0IGFyb3VuZCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibW92bCAkLTEsJSVlYXhcblx0IgotCQkieG9ybCAlJWVkeCwlJWVkeFxuXHQiCi0JCSJyZXBlOyBzY2FzbFxuXHQiCi0JCSJqZSAxZlxuXHQiCi0JCSJ4b3JsIC00KCUlZWRpKSwlJWVheFxuXHQiCi0JCSJzdWJsICQ0LCUlZWRpXG5cdCIKLQkJImJzZmwgJSVlYXgsJSVlZHhcbiIKLQkJIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5cdCIKLQkJInNobGwgJDMsJSVlZGlcblx0IgotCQkiYWRkbCAlJWVkaSwlJWVkeCIKLQkJOiI9ZCIgKHJlcyksICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JmEiIChkMikKLQkJOiIxIiAoKHNpemUgKyAzMSkgPj4gNSksICIyIiAoYWRkciksICJiIiAoYWRkcikgOiAibWVtb3J5Iik7CisJLyogVGhpcyBsb29rcyBhdCBtZW1vcnkuCisJICogTWFyayBpdCB2b2xhdGlsZSB0byB0ZWxsIGdjYyBub3QgdG8gbW92ZSBpdCBhcm91bmQKKwkgKi8KKwlhc20gdm9sYXRpbGUoIm1vdmwgJC0xLCUlZWF4XG5cdCIKKwkJICAgICAieG9ybCAlJWVkeCwlJWVkeFxuXHQiCisJCSAgICAgInJlcGU7IHNjYXNsXG5cdCIKKwkJICAgICAiamUgMWZcblx0IgorCQkgICAgICJ4b3JsIC00KCUlZWRpKSwlJWVheFxuXHQiCisJCSAgICAgInN1YmwgJDQsJSVlZGlcblx0IgorCQkgICAgICJic2ZsICUlZWF4LCUlZWR4XG4iCisJCSAgICAgIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5cdCIKKwkJICAgICAic2hsbCAkMywlJWVkaVxuXHQiCisJCSAgICAgImFkZGwgJSVlZGksJSVlZHgiCisJCSAgICAgOiAiPWQiIChyZXMpLCAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpCisJCSAgICAgOiAiMSIgKChzaXplICsgMzEpID4+IDUpLCAiMiIgKGFkZHIpLAorCQkgICAgICAgImIiIChhZGRyKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC03NSw3ICs3Nyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgdmFsID0gKmFkZHIrKzsKIAkJaWYgKHZhbCkKIAkJCXJldHVybiBfX2Zmcyh2YWwpICsgeDsKLQkJeCArPSAoc2l6ZW9mKCphZGRyKTw8Myk7CisJCXggKz0gc2l6ZW9mKCphZGRyKSA8PCAzOwogCX0KIAlyZXR1cm4geDsKIH0KQEAgLTE1MiwxMCArMTU0LDEwIEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CiAKLSNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikgXAotCQl0ZXN0X2FuZF9zZXRfYml0KChuciksICh1bnNpZ25lZCBsb25nICopYWRkcikKLSNkZWZpbmUgZXh0Ml9jbGVhcl9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKSBcCi0JCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpLCAodW5zaWduZWQgbG9uZyAqKWFkZHIpCisjZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQkJXAorCXRlc3RfYW5kX3NldF9iaXQoKG5yKSwgKHVuc2lnbmVkIGxvbmcgKikoYWRkcikpCisjZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLCBuciwgYWRkcikJCQlcCisJdGVzdF9hbmRfY2xlYXJfYml0KChuciksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHNfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHNfNjQuaAppbmRleCBhYWYxNTE5Li4zNjVmODIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYml0b3BzXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2JpdG9wc182NC5oCkBAIC0xNywzNSArMTcsMzUgQEAKIAlyZXR1cm4gdmFsOwogfQogCi0jZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsc2l6ZSkgXAotKChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSkgPD0gQklUU19QRVJfTE9ORyA/IFwKLSAgKF9fc2NhbmJpdCgqKHVuc2lnbmVkIGxvbmcgKilhZGRyLChzaXplKSkpIDogXAotICBmaW5kX2ZpcnN0X2JpdChhZGRyLHNpemUpKSkKLQogI2RlZmluZSBmaW5kX25leHRfYml0KGFkZHIsc2l6ZSxvZmYpIFwKICgoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpemUpIDw9IEJJVFNfUEVSX0xPTkcgPyAJICBcCiAgICgob2ZmKSArIChfX3NjYW5iaXQoKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpID4+IChvZmYpLChzaXplKS0ob2ZmKSkpKSA6IFwKIAlmaW5kX25leHRfYml0KGFkZHIsc2l6ZSxvZmYpKSkKIAotI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsc2l6ZSkgXAotKChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSkgPD0gQklUU19QRVJfTE9ORyA/IFwKLSAgKF9fc2NhbmJpdCh+Kih1bnNpZ25lZCBsb25nICopYWRkciwoc2l6ZSkpKSA6IFwKLSAgCWZpbmRfZmlyc3RfemVyb19iaXQoYWRkcixzaXplKSkpCi0JCiAjZGVmaW5lIGZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLHNpemUsb2ZmKSBcCiAoKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmIChzaXplKSA8PSBCSVRTX1BFUl9MT05HID8gCSAgXAogICAoKG9mZikrKF9fc2NhbmJpdCh+KCgoKih1bnNpZ25lZCBsb25nICopYWRkcikpID4+IChvZmYpKSwoc2l6ZSktKG9mZikpKSkgOiBcCiAJZmluZF9uZXh0X3plcm9fYml0KGFkZHIsc2l6ZSxvZmYpKSkKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXRfc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyBpLCAKLQkJCQkgIGludCBsZW4pIAoteyAKLQl1bnNpZ25lZCBsb25nIGVuZCA9IGkgKyBsZW47IAorI2RlZmluZSBmaW5kX2ZpcnN0X2JpdChhZGRyLCBzaXplKQkJCQkJXAorCSgoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemUpKSAmJiAoc2l6ZSkgPD0gQklUU19QRVJfTE9ORwlcCisJICA/IChfX3NjYW5iaXQoKih1bnNpZ25lZCBsb25nICopKGFkZHIpLCAoc2l6ZSkpKQkJXAorCSAgOiBmaW5kX2ZpcnN0X2JpdCgoYWRkciksIChzaXplKSkpKQorCisjZGVmaW5lIGZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkJCQkJCVwKKwkoKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplKSkgJiYgKHNpemUpIDw9IEJJVFNfUEVSX0xPTkcJXAorCSAgPyAoX19zY2FuYml0KH4qKHVuc2lnbmVkIGxvbmcgKikoYWRkciksIChzaXplKSkpCQlcCisJICA6IGZpbmRfZmlyc3RfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSkpKSkKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXRfc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyBpLAorCQkJCSAgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGkgKyBsZW47CiAJd2hpbGUgKGkgPCBlbmQpIHsKLQkJX19zZXRfYml0KGksIGJpdG1hcCk7IAorCQlfX3NldF9iaXQoaSwgYml0bWFwKTsKIAkJaSsrOwogCX0KLX0gCit9CiAKIC8qKgogICogZmZ6IC0gZmluZCBmaXJzdCB6ZXJvIGluIHdvcmQuCkBAIC0xNTAsMTAgKzE1MCwxMCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgogCi0jZGVmaW5lIGV4dDJfc2V0X2JpdF9hdG9taWMobG9jayxucixhZGRyKSBcCi0JICAgICAgICB0ZXN0X2FuZF9zZXRfYml0KChuciksKHVuc2lnbmVkIGxvbmcqKWFkZHIpCi0jZGVmaW5lIGV4dDJfY2xlYXJfYml0X2F0b21pYyhsb2NrLG5yLGFkZHIpIFwKLQkgICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdCgobnIpLCh1bnNpZ25lZCBsb25nKilhZGRyKQorI2RlZmluZSBleHQyX3NldF9iaXRfYXRvbWljKGxvY2ssIG5yLCBhZGRyKQkJCVwKKwl0ZXN0X2FuZF9zZXRfYml0KChuciksICh1bnNpZ25lZCBsb25nICopKGFkZHIpKQorI2RlZmluZSBleHQyX2NsZWFyX2JpdF9hdG9taWMobG9jaywgbnIsIGFkZHIpCQkJXAorCXRlc3RfYW5kX2NsZWFyX2JpdCgobnIpLCAodW5zaWduZWQgbG9uZyAqKShhZGRyKSkKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9taW5peC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYm9vdC5oIGIvaW5jbHVkZS9hc20teDg2L2Jvb3QuaAppbmRleCBlZDhhZmZiLi4yZmFlZDdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYm9vdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9ib290LmgKQEAgLTE3LDQgKzE3LDEyIEBACiAJCQkJKyAoQ09ORklHX1BIWVNJQ0FMX0FMSUdOIC0gMSkpIFwKIAkJCQkmIH4oQ09ORklHX1BIWVNJQ0FMX0FMSUdOIC0gMSkpCiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIEJPT1RfSEVBUF9TSVpFCTB4NzAwMAorI2RlZmluZSBCT09UX1NUQUNLX1NJWkUJMHg0MDAwCisjZWxzZQorI2RlZmluZSBCT09UX0hFQVBfU0laRQkweDQwMDAKKyNkZWZpbmUgQk9PVF9TVEFDS19TSVpFCTB4MTAwMAorI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX0JPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2J1Zy5oIGIvaW5jbHVkZS9hc20teDg2L2J1Zy5oCmluZGV4IDhkNDc3YTIuLmI2OWFhNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9idWcuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYnVnLmgKQEAgLTEyLDI1ICsxMiwyNSBAQAogIyBkZWZpbmUgX19CVUdfQzAJIjI6XHQucXVhZCAxYiwgJWMwXG4iCiAjZW5kaWYKIAotI2RlZmluZSBCVUcoKQkJCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKCIxOlx0dWQyXG4iCQkJCVwKLQkJCSAgICAgIi5wdXNoc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJXAotCQkJICAgICBfX0JVR19DMAkJCQkJXAotCQkJICAgICAiXHQud29yZCAlYzEsIDBcbiIJCQkJXAotCQkJICAgICAiXHQub3JnIDJiKyVjMlxuIgkJCQlcCi0JCQkgICAgICIucG9wc2VjdGlvbiIJCQkJXAotCQkJICAgICA6IDogImkiIChfX0ZJTEVfXyksICJpIiAoX19MSU5FX18pLAlcCi0JCQkgICAgICJpIiAoc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpKSk7CQlcCi0JCWZvcig7OykgOwkJCQkJCVwKLQl9IHdoaWxlKDApCisjZGVmaW5lIEJVRygpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIjE6XHR1ZDJcbiIJCQkJXAorCQkgICAgICIucHVzaHNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCVwKKwkJICAgICBfX0JVR19DMAkJCQkJXAorCQkgICAgICJcdC53b3JkICVjMSwgMFxuIgkJCQlcCisJCSAgICAgIlx0Lm9yZyAyYislYzJcbiIJCQkJXAorCQkgICAgICIucG9wc2VjdGlvbiIJCQkJXAorCQkgICAgIDogOiAiaSIgKF9fRklMRV9fKSwgImkiIChfX0xJTkVfXyksCVwKKwkJICAgICAiaSIgKHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KSkpOwkJXAorCWZvciAoOzspIDsJCQkJCQlcCit9IHdoaWxlICgwKQogCiAjZWxzZQotI2RlZmluZSBCVUcoKQkJCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKCJ1ZDIiKTsJCQkJCVwKLQkJZm9yKDs7KSA7CQkJCQkJXAotCX0gd2hpbGUoMCkKKyNkZWZpbmUgQlVHKCkJCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgidWQyIik7CQkJCQlcCisJZm9yICg7OykgOwkJCQkJCVwKK30gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qICFDT05GSUdfQlVHICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS14ODYvYnl0ZW9yZGVyLmgKaW5kZXggZmUyZjJlNS4uZTAyYWUyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9ieXRlb3JkZXIuaApAQCAtOCw1MCArOCw1OSBAQAogCiAjaWZkZWYgX19pMzg2X18KIAotc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKIHsKICNpZmRlZiBDT05GSUdfWDg2X0JTV0FQCi0JX19hc21fXygiYnN3YXAgJTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKKwlhc20oImJzd2FwICUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7CiAjZWxzZQotCV9fYXNtX18oInhjaGdiICViMCwlaDBcblx0IgkvKiBzd2FwIGxvd2VyIGJ5dGVzCSovCi0JCSJyb3JsICQxNiwlMFxuXHQiCS8qIHN3YXAgd29yZHMJCSovCi0JCSJ4Y2hnYiAlYjAsJWgwIgkJLyogc3dhcCBoaWdoZXIgYnl0ZXMJKi8KLQkJOiI9cSIgKHgpCi0JCTogIjAiICh4KSk7CisJYXNtKCJ4Y2hnYiAlYjAsJWgwXG5cdCIJLyogc3dhcCBsb3dlciBieXRlcwkqLworCSAgICAicm9ybCAkMTYsJTBcblx0IgkvKiBzd2FwIHdvcmRzCQkqLworCSAgICAieGNoZ2IgJWIwLCVoMCIJLyogc3dhcCBoaWdoZXIgYnl0ZXMJKi8KKwkgICAgOiAiPXEiICh4KQorCSAgICA6ICIwIiAoeCkpOwogI2VuZGlmCiAJcmV0dXJuIHg7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHZhbCkKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3U2NCBfX19hcmNoX19zd2FiNjQoX191NjQgdmFsKQogewogCXVuaW9uIHsKLQkJc3RydWN0IHsgX191MzIgYSxiOyB9IHM7CisJCXN0cnVjdCB7CisJCQlfX3UzMiBhOworCQkJX191MzIgYjsKKwkJfSBzOwogCQlfX3U2NCB1OwogCX0gdjsKIAl2LnUgPSB2YWw7CiAjaWZkZWYgQ09ORklHX1g4Nl9CU1dBUAotCV9fYXNtX18oImJzd2FwbCAlMCA7IGJzd2FwbCAlMSA7IHhjaGdsICUwLCUxIgorCWFzbSgiYnN3YXBsICUwIDsgYnN3YXBsICUxIDsgeGNoZ2wgJTAsJTEiCiAJICAgIDogIj1yIiAodi5zLmEpLCAiPXIiICh2LnMuYikKIAkgICAgOiAiMCIgKHYucy5hKSwgIjEiICh2LnMuYikpOwogI2Vsc2UKIAl2LnMuYSA9IF9fX2FyY2hfX3N3YWIzMih2LnMuYSk7CiAJdi5zLmIgPSBfX19hcmNoX19zd2FiMzIodi5zLmIpOwotCV9fYXNtX18oInhjaGdsICUwLCUxIiA6ICI9ciIgKHYucy5hKSwgIj1yIiAodi5zLmIpIDogIjAiICh2LnMuYSksICIxIiAodi5zLmIpKTsKKwlhc20oInhjaGdsICUwLCUxIgorCSAgICA6ICI9ciIgKHYucy5hKSwgIj1yIiAodi5zLmIpCisJICAgIDogIjAiICh2LnMuYSksICIxIiAodi5zLmIpKTsKICNlbmRpZgogCXJldHVybiB2LnU7CiB9CiAKICNlbHNlIC8qIF9faTM4Nl9fICovCiAKLXN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHgpCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHgpCiB7Ci0JX19hc21fXygiYnN3YXBxICUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7CisJYXNtKCJic3dhcHEgJTAiCisJICAgIDogIj1yIiAoeCkKKwkgICAgOiAiMCIgKHgpKTsKIAlyZXR1cm4geDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKIHsKLQlfX2FzbV9fKCJic3dhcGwgJTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKKwlhc20oImJzd2FwbCAlMCIKKwkgICAgOiAiPXIiICh4KQorCSAgICA6ICIwIiAoeCkpOwogCXJldHVybiB4OwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20teDg2L2NhY2hlZmx1c2guaAppbmRleCA1Mzk2YzIxLi5mNGMwYWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9jYWNoZWZsdXNoLmgKQEAgLTE0LDE4ICsxNCw3NyBAQAogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGcsIGFkciwgbGVuKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQotI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLQltZW1jcHkoZHN0LCBzcmMsIGxlbikKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikJXAorCW1lbWNweSgoZHN0KSwgKHNyYyksIChsZW4pKQorI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pCVwKKwltZW1jcHkoKGRzdCksIChzcmMpLCAobGVuKSkKIAotaW50IF9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlcyBjaGFuZ2VfcGFnZV9hdHRyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsCi0JCQkJCQkJCXBncHJvdF90IHByb3QpOworCisvKgorICogVGhlIHNldF9tZW1vcnlfKiBBUEkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBhIHZpcnR1YWwKKyAqIGFkZHJlc3MgcmFuZ2UuIFRoZSBhdHRyaWJ1dGVzIGluY2x1ZGU6CisgKiBDYWNoYWJpbGl0eSAgIDogVW5DYWNoZWQsIFdyaXRlQ29tYmluaW5nLCBXcml0ZUJhY2sKKyAqIEV4ZWN1dGFiaWxpdHkgOiBlWGV1dGFibGUsIE5vdGVYZWN1dGFibGUKKyAqIFJlYWQvV3JpdGUgICAgOiBSZWFkT25seSwgUmVhZFdyaXRlCisgKiBQcmVzZW5jZSAgICAgIDogTm90UHJlc2VudAorICoKKyAqIFdpdGhpbiBhIGNhdGFnb3J5LCB0aGUgYXR0cmlidXRlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIEFQSSB3aWxsIHRha2UgY2FyZSBvZiB2YXJpb3VzIGFzcGVjdHMgdGhhdAorICogYXJlIGFzc29jaWF0ZWQgd2l0aCBjaGFuZ2luZyBzdWNoIGF0dHJpYnV0ZXMsIHN1Y2ggYXM6CisgKiAtIEZsdXNoaW5nIFRMQnMKKyAqIC0gRmx1c2hpbmcgQ1BVIGNhY2hlcworICogLSBNYWtpbmcgc3VyZSBhbGlhc2VzIG9mIHRoZSBtZW1vcnkgYmVoaW5kIHRoZSBtYXBwaW5nIGRvbid0IHZpb2xhdGUKKyAqICAgY29oZXJlbmN5IHJ1bGVzIGFzIGRlZmluZWQgYnkgdGhlIENQVSBpbiB0aGUgc3lzdGVtLgorICoKKyAqIFdoYXQgdGhpcyBBUEkgZG9lcyBub3QgZG86CisgKiAtIFByb3ZpZGUgZXhjbHVzaW9uIGJldHdlZW4gdmFyaW91cyBjYWxsZXJzIC0gaW5jbHVkaW5nIGNhbGxlcnMgdGhhdAorICogICBvcGVyYXRpb24gb24gb3RoZXIgbWFwcGluZ3Mgb2YgdGhlIHNhbWUgcGh5c2ljYWwgcGFnZQorICogLSBSZXN0b3JlIGRlZmF1bHQgYXR0cmlidXRlcyB3aGVuIGEgcGFnZSBpcyBmcmVlZAorICogLSBHdWFyYW50ZWUgdGhhdCBtYXBwaW5ncyBvdGhlciB0aGFuIHRoZSByZXF1ZXN0ZWQgb25lIGFyZQorICogICBpbiBhbnkgc3RhdGUsIG90aGVyIHRoYW4gdGhhdCB0aGVzZSBkbyBub3QgdmlvbGF0ZSBydWxlcyBmb3IKKyAqICAgdGhlIENQVSB5b3UgaGF2ZS4gRG8gbm90IGRlcGVuZCBvbiBhbnkgZWZmZWN0cyBvbiBvdGhlciBtYXBwaW5ncywKKyAqICAgQ1BVcyBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGhhdmUgbWF5IGhhdmUgbW9yZSByZWxheGVkIHJ1bGVzLgorICogVGhlIGNhbGxlciBpcyByZXF1aXJlZCB0byB0YWtlIGNhcmUgb2YgdGhlc2UuCisgKi8KKworaW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOworaW50IHNldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOworaW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOworaW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOworaW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CisKKy8qCisgKiBGb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIEFQSXMsIGEgZmV3IGZ1bmN0aW9ucworICogYXJlIHByb3ZpZGVkIHRoYXQgd29yayBvbiBhICJzdHJ1Y3QgcGFnZSIuCisgKiBUaGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBPTkxZIG9uIHRoZSAxOjEga2VybmVsIG1hcHBpbmcgb2YgdGhlCisgKiBtZW1vcnkgdGhhdCB0aGUgc3RydWN0IHBhZ2UgcmVwcmVzZW50cywgYW5kIGludGVybmFsbHkganVzdAorICogY2FsbCB0aGUgc2V0X21lbW9yeV8qIGZ1bmN0aW9uLiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZQorICogc2V0X21lbW9yeV8qIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gY29udmVudGlvbnMuCisgKgorICogVGhlc2UgQVBJcyBzaG91bGQgYmUgY29uc2lkZXJlZCAqZGVwcmVjYXRlZCogYW5kIGFyZSBsaWtlbHkgZ29pbmcgdG8KKyAqIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKyAqIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhlIGltcGxpY2l0IG9wZXJhdGlvbiBvbiB0aGUgMToxIG1hcHBpbmcgb25seSwKKyAqIG1ha2luZyB0aGlzIG5vdCBhIGdlbmVyYWxseSB1c2VmdWwgQVBJLgorICoKKyAqIFNwZWNpZmljYWxseSwgbWFueSB1c2VycyBvZiB0aGUgb2xkIEFQSXMgaGFkIGEgdmlydHVhbCBhZGRyZXNzLAorICogY2FsbGVkIHZpcnRfdG9fcGFnZSgpIG9yIHZtYWxsb2NfdG9fcGFnZSgpIG9uIHRoYXQgYWRkcmVzcyB0bworICogZ2V0IGEgc3RydWN0IHBhZ2UqIHRoYXQgdGhlIG9sZCBBUEkgcmVxdWlyZWQuCisgKiBUbyBjb252ZXJ0IHRoZXNlIGNhc2VzLCB1c2Ugc2V0X21lbW9yeV8qKCkgb24gdGhlIG9yaWdpbmFsCisgKiB2aXJ0dWFsIGFkZHJlc3MsIGRvIG5vdCB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCiAKIGludCBzZXRfcGFnZXNfdWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7CiBpbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOwpAQCAtMzQsMTMgKzkzLDYgQEAKIGludCBzZXRfcGFnZXNfcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcyk7CiBpbnQgc2V0X3BhZ2VzX3J3KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpOwogCi1pbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7Ci1pbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKLWludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKLWludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKLWludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKLWludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKIAogdm9pZCBjbGZsdXNoX2NhY2hlX3JhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBzaXplKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NoZWNrc3VtXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvY2hlY2tzdW1fMzIuaAppbmRleCA3NTE5NGFiLi41MmJiYjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvY2hlY2tzdW1fMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvY2hlY2tzdW1fMzIuaApAQCAtMjgsNyArMjgsOCBAQAogICovCiAKIGFzbWxpbmthZ2UgX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCi0JCQkJCQkgIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqc3JjX2Vycl9wdHIsIGludCAqZHN0X2Vycl9wdHIpOworCQkJCQkgICAgaW50IGxlbiwgX193c3VtIHN1bSwKKwkJCQkJICAgIGludCAqc3JjX2Vycl9wdHIsIGludCAqZHN0X2Vycl9wdHIpOwogCiAvKgogICoJTm90ZTogd2hlbiB5b3UgZ2V0IGEgTlVMTCBwb2ludGVyIGV4Y2VwdGlvbiBoZXJlIHRoaXMgbWVhbnMgc29tZW9uZQpAQCAtMzcsMjAgKzM4LDIwIEBACiAgKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZQogICoJYWNjZXNzX29rKCkuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fCi1fX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCi0JCQkJCWludCBsZW4sIF9fd3N1bSBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCQkgICAgICAgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKLQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyAoIHNyYywgZHN0LCBsZW4sIHN1bSwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBOVUxMKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18KLV9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAotCQkJCQkJaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICplcnJfcHRyKQorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJCQkgdm9pZCAqZHN0LAorCQkJCQkJIGludCBsZW4sIF9fd3N1bSBzdW0sCisJCQkJCQkgaW50ICplcnJfcHRyKQogewogCW1pZ2h0X3NsZWVwKCk7CiAJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKXNyYywgZHN0LAotCQkJCQlsZW4sIHN1bSwgZXJyX3B0ciwgTlVMTCk7CisJCQkJCSBsZW4sIHN1bSwgZXJyX3B0ciwgTlVMTCk7CiB9CiAKIC8qCkBAIC02NCwzMCArNjUsMjkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgc3VtOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JICAgICJtb3ZsICglMSksICUwCTtcbiIKLQkgICAgInN1YmwgJDQsICUyCTtcbiIKLQkgICAgImpiZSAyZgkJO1xuIgotCSAgICAiYWRkbCA0KCUxKSwgJTAJO1xuIgotCSAgICAiYWRjbCA4KCUxKSwgJTAJO1xuIgotCSAgICAiYWRjbCAxMiglMSksICUwCTtcbiIKLSIxOgkgICAgYWRjbCAxNiglMSksICUwCTtcbiIKLQkgICAgImxlYSA0KCUxKSwgJTEJO1xuIgotCSAgICAiZGVjbCAlMgkJO1xuIgotCSAgICAiam5lIDFiCQk7XG4iCi0JICAgICJhZGNsICQwLCAlMAk7XG4iCi0JICAgICJtb3ZsICUwLCAlMgk7XG4iCi0JICAgICJzaHJsICQxNiwgJTAJO1xuIgotCSAgICAiYWRkdyAldzIsICV3MAk7XG4iCi0JICAgICJhZGNsICQwLCAlMAk7XG4iCi0JICAgICJub3RsICUwCQk7XG4iCi0iMjoJCQkJO1xuIgorCWFzbSB2b2xhdGlsZSgibW92bCAoJTEpLCAlMAk7XG4iCisJCSAgICAgInN1YmwgJDQsICUyCTtcbiIKKwkJICAgICAiamJlIDJmCQk7XG4iCisJCSAgICAgImFkZGwgNCglMSksICUwCTtcbiIKKwkJICAgICAiYWRjbCA4KCUxKSwgJTAJO1xuIgorCQkgICAgICJhZGNsIDEyKCUxKSwgJTA7XG4iCisJCSAgICAgIjE6CWFkY2wgMTYoJTEpLCAlMAk7XG4iCisJCSAgICAgImxlYSA0KCUxKSwgJTEJO1xuIgorCQkgICAgICJkZWNsICUyCTtcbiIKKwkJICAgICAiam5lIDFiCQk7XG4iCisJCSAgICAgImFkY2wgJDAsICUwCTtcbiIKKwkJICAgICAibW92bCAlMCwgJTIJO1xuIgorCQkgICAgICJzaHJsICQxNiwgJTAJO1xuIgorCQkgICAgICJhZGR3ICV3MiwgJXcwCTtcbiIKKwkJICAgICAiYWRjbCAkMCwgJTAJO1xuIgorCQkgICAgICJub3RsICUwCTtcbiIKKwkJICAgICAiMjoJCTtcbiIKIAkvKiBTaW5jZSB0aGUgaW5wdXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSBsb2FkZWQgd2l0aCBpcGggYW5kIGlobAogCSAgIGFyZSBtb2RpZmllZCwgd2UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlbSBhcyBvdXRwdXRzLCBvciBnY2MKIAkgICB3aWxsIGFzc3VtZSB0aGV5IGNvbnRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiAqLwotCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKQotCTogIjEiIChpcGgpLCAiMiIgKGlobCkKLQk6ICJtZW1vcnkiKTsKKwkJICAgICA6ICI9ciIgKHN1bSksICI9ciIgKGlwaCksICI9ciIgKGlobCkKKwkJICAgICA6ICIxIiAoaXBoKSwgIjIiIChpaGwpCisJCSAgICAgOiAibWVtb3J5Iik7CiAJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCkBAIC05NywyOSArOTcsMjcgQEAKIAogc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQogewotCV9fYXNtX18oCi0JCSJhZGRsICUxLCAlMAkJO1xuIgotCQkiYWRjbCAkMHhmZmZmLCAlMAk7XG4iCi0JCTogIj1yIiAoc3VtKQotCQk6ICJyIiAoKF9fZm9yY2UgdTMyKXN1bSA8PCAxNiksCi0JCSAgIjAiICgoX19mb3JjZSB1MzIpc3VtICYgMHhmZmZmMDAwMCkKLQkpOworCWFzbSgiYWRkbCAlMSwgJTAJCTtcbiIKKwkgICAgImFkY2wgJDB4ZmZmZiwgJTAJO1xuIgorCSAgICA6ICI9ciIgKHN1bSkKKwkgICAgOiAiciIgKChfX2ZvcmNlIHUzMilzdW0gPDwgMTYpLAorCSAgICAgICIwIiAoKF9fZm9yY2UgdTMyKXN1bSAmIDB4ZmZmZjAwMDApKTsKIAlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikofihfX2ZvcmNlIHUzMilzdW0gPj4gMTYpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCSAgIF9fd3N1bSBzdW0pCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCV9fd3N1bSBzdW0pCiB7Ci0gICAgX19hc21fXygKLQkiYWRkbCAlMSwgJTAJO1xuIgotCSJhZGNsICUyLCAlMAk7XG4iCi0JImFkY2wgJTMsICUwCTtcbiIKLQkiYWRjbCAkMCwgJTAJO1xuIgotCTogIj1yIiAoc3VtKQotCTogImciIChkYWRkciksICJnIihzYWRkciksICJnIigobGVuICsgcHJvdG8pIDw8IDgpLCAiMCIoc3VtKSk7Ci0gICAgcmV0dXJuIHN1bTsKKwlhc20oImFkZGwgJTEsICUwCTtcbiIKKwkgICAgImFkY2wgJTIsICUwCTtcbiIKKwkgICAgImFkY2wgJTMsICUwCTtcbiIKKwkgICAgImFkY2wgJDAsICUwCTtcbiIKKwkgICAgOiAiPXIiIChzdW0pCisJICAgIDogImciIChkYWRkciksICJnIihzYWRkciksCisJICAgICAgImciICgobGVuICsgcHJvdG8pIDw8IDgpLCAiMCIgKHN1bSkpOworCXJldHVybiBzdW07CiB9CiAKIC8qCkBAIC0xMjcsMTEgKzEyNSwxMSBAQAogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwogc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICBfX3dzdW0gc3VtKQorCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQlfX3dzdW0gc3VtKQogewotCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKKwlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIGxlbiwgcHJvdG8sIHN1bSkpOwogfQogCiAvKgpAQCAtMTQxLDMwICsxMzksMjkgQEAKIAogc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewotICAgIHJldHVybiBjc3VtX2ZvbGQgKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKKyAgICByZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KIAogI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQotc3RhdGljIF9faW5saW5lX18gX19zdW0xNiBjc3VtX2lwdjZfbWFnaWMoY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkgIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCSAgX193c3VtIHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2lwdjZfbWFnaWMoY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCSAgICAgIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJICAgICAgX193c3VtIHN1bSkKIHsKLQlfX2FzbV9fKAotCQkiYWRkbCAwKCUxKSwgJTAJCTtcbiIKLQkJImFkY2wgNCglMSksICUwCQk7XG4iCi0JCSJhZGNsIDgoJTEpLCAlMAkJO1xuIgotCQkiYWRjbCAxMiglMSksICUwCTtcbiIKLQkJImFkY2wgMCglMiksICUwCQk7XG4iCi0JCSJhZGNsIDQoJTIpLCAlMAkJO1xuIgotCQkiYWRjbCA4KCUyKSwgJTAJCTtcbiIKLQkJImFkY2wgMTIoJTIpLCAlMAk7XG4iCi0JCSJhZGNsICUzLCAlMAkJO1xuIgotCQkiYWRjbCAlNCwgJTAJCTtcbiIKLQkJImFkY2wgJDAsICUwCQk7XG4iCi0JCTogIj0mciIgKHN1bSkKLQkJOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksCi0JCSAgInIiKGh0b25sKGxlbikpLCAiciIoaHRvbmwocHJvdG8pKSwgIjAiKHN1bSkpOworCWFzbSgiYWRkbCAwKCUxKSwgJTAJO1xuIgorCSAgICAiYWRjbCA0KCUxKSwgJTAJO1xuIgorCSAgICAiYWRjbCA4KCUxKSwgJTAJO1xuIgorCSAgICAiYWRjbCAxMiglMSksICUwCTtcbiIKKwkgICAgImFkY2wgMCglMiksICUwCTtcbiIKKwkgICAgImFkY2wgNCglMiksICUwCTtcbiIKKwkgICAgImFkY2wgOCglMiksICUwCTtcbiIKKwkgICAgImFkY2wgMTIoJTIpLCAlMAk7XG4iCisJICAgICJhZGNsICUzLCAlMAk7XG4iCisJICAgICJhZGNsICU0LCAlMAk7XG4iCisJICAgICJhZGNsICQwLCAlMAk7XG4iCisJICAgIDogIj0mciIgKHN1bSkKKwkgICAgOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksCisJICAgICAgInIiIChodG9ubChsZW4pKSwgInIiIChodG9ubChwcm90bykpLCAiMCIgKHN1bSkpOwogCiAJcmV0dXJuIGNzdW1fZm9sZChzdW0pOwogfQpAQCAtMTczLDE0ICsxNzAsMTUgQEAKICAqCUNvcHkgYW5kIGNoZWNrc3VtIHRvIHVzZXIKICAqLwogI2RlZmluZSBIQVZFX0NTVU1fQ09QWV9VU0VSCi1zdGF0aWMgX19pbmxpbmVfXyBfX3dzdW0gY3N1bV9hbmRfY29weV90b191c2VyKGNvbnN0IHZvaWQgKnNyYywKLQkJCQkJCSAgICAgdm9pZCBfX3VzZXIgKmRzdCwKLQkJCQkJCSAgICAgaW50IGxlbiwgX193c3VtIHN1bSwKLQkJCQkJCSAgICAgaW50ICplcnJfcHRyKQorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV9hbmRfY29weV90b191c2VyKGNvbnN0IHZvaWQgKnNyYywKKwkJCQkJICAgdm9pZCBfX3VzZXIgKmRzdCwKKwkJCQkJICAgaW50IGxlbiwgX193c3VtIHN1bSwKKwkJCQkJICAgaW50ICplcnJfcHRyKQogewogCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkKLQkJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCAoX19mb3JjZSB2b2lkICopZHN0LCBsZW4sIHN1bSwgTlVMTCwgZXJyX3B0cik7CisJCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKHNyYywgKF9fZm9yY2Ugdm9pZCAqKWRzdCwKKwkJCQkJCSBsZW4sIHN1bSwgTlVMTCwgZXJyX3B0cik7CiAKIAlpZiAobGVuKQogCQkqZXJyX3B0ciA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY2hlY2tzdW1fNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jaGVja3N1bV82NC5oCmluZGV4IGU1Zjc5OTkuLjhiZDg2MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9jaGVja3N1bV82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9jaGVja3N1bV82NC5oCkBAIC0xLDMzICsxLDMxIEBACiAjaWZuZGVmIF9YODZfNjRfQ0hFQ0tTVU1fSAogI2RlZmluZSBfWDg2XzY0X0NIRUNLU1VNX0gKIAotLyogCi0gKiBDaGVja3N1bXMgZm9yIHg4Ni02NCAKLSAqIENvcHlyaWdodCAyMDAyIGJ5IEFuZGkgS2xlZW4sIFN1U0UgTGFicyAKKy8qCisgKiBDaGVja3N1bXMgZm9yIHg4Ni02NAorICogQ29weXJpZ2h0IDIwMDIgYnkgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCiAgKiB3aXRoIHNvbWUgY29kZSBmcm9tIGFzbS14ODYvY2hlY2tzdW0uaAotICovIAorICovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0vKiogCisvKioKICAqIGNzdW1fZm9sZCAtIEZvbGQgYW5kIGludmVydCBhIDMyYml0IGNoZWNrc3VtLgogICogc3VtOiAzMmJpdCB1bmZvbGRlZCBzdW0KLSAqIAorICoKICAqIEZvbGQgYSAzMmJpdCBydW5uaW5nIGNoZWNrc3VtIHRvIDE2Yml0IGFuZCBpbnZlcnQgaXQuIFRoaXMgaXMgdXN1YWxseQogICogdGhlIGxhc3Qgc3RlcCBiZWZvcmUgcHV0dGluZyBhIGNoZWNrc3VtIGludG8gYSBwYWNrZXQuCiAgKiBNYWtlIHN1cmUgbm90IHRvIG1peCB3aXRoIDY0Yml0IGNoZWNrc3Vtcy4KICAqLwogc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQogewotCV9fYXNtX18oCi0JCSIgIGFkZGwgJTEsJTBcbiIKLQkJIiAgYWRjbCAkMHhmZmZmLCUwIgotCQk6ICI9ciIgKHN1bSkKLQkJOiAiciIgKChfX2ZvcmNlIHUzMilzdW0gPDwgMTYpLAotCQkgICIwIiAoKF9fZm9yY2UgdTMyKXN1bSAmIDB4ZmZmZjAwMDApCi0JKTsKKwlhc20oIiAgYWRkbCAlMSwlMFxuIgorCSAgICAiICBhZGNsICQweGZmZmYsJTAiCisJICAgIDogIj1yIiAoc3VtKQorCSAgICA6ICJyIiAoKF9fZm9yY2UgdTMyKXN1bSA8PCAxNiksCisJICAgICAgIjAiICgoX19mb3JjZSB1MzIpc3VtICYgMHhmZmZmMDAwMCkpOwogCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSh+KF9fZm9yY2UgdTMyKXN1bSA+PiAxNik7CiB9CiAKQEAgLTQzLDQ2ICs0MSw0NiBAQAogICogaXBfZmFzdF9jc3VtIC0gQ29tcHV0ZSB0aGUgSVB2NCBoZWFkZXIgY2hlY2tzdW0gZWZmaWNpZW50bHkuCiAgKiBpcGg6IGlwdjQgaGVhZGVyCiAgKiBpaGw6IGxlbmd0aCBvZiBoZWFkZXIgLyA0Ci0gKi8gCisgKi8KIHN0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXVuc2lnbmVkIGludCBzdW07CiAKLQlhc20oCSIgIG1vdmwgKCUxKSwgJTBcbiIKLQkJIiAgc3VibCAkNCwgJTJcbiIKLQkJIiAgamJlIDJmXG4iCi0JCSIgIGFkZGwgNCglMSksICUwXG4iCi0JCSIgIGFkY2wgOCglMSksICUwXG4iCi0JCSIgIGFkY2wgMTIoJTEpLCAlMFxuIgotCQkiMTogYWRjbCAxNiglMSksICUwXG4iCi0JCSIgIGxlYSA0KCUxKSwgJTFcbiIKLQkJIiAgZGVjbCAlMlxuIgotCQkiICBqbmUJMWJcbiIKLQkJIiAgYWRjbCAkMCwgJTBcbiIKLQkJIiAgbW92bCAlMCwgJTJcbiIKLQkJIiAgc2hybCAkMTYsICUwXG4iCi0JCSIgIGFkZHcgJXcyLCAldzBcbiIKLQkJIiAgYWRjbCAkMCwgJTBcbiIKLQkJIiAgbm90bCAlMFxuIgotCQkiMjoiCisJYXNtKCIgIG1vdmwgKCUxKSwgJTBcbiIKKwkgICAgIiAgc3VibCAkNCwgJTJcbiIKKwkgICAgIiAgamJlIDJmXG4iCisJICAgICIgIGFkZGwgNCglMSksICUwXG4iCisJICAgICIgIGFkY2wgOCglMSksICUwXG4iCisJICAgICIgIGFkY2wgMTIoJTEpLCAlMFxuIgorCSAgICAiMTogYWRjbCAxNiglMSksICUwXG4iCisJICAgICIgIGxlYSA0KCUxKSwgJTFcbiIKKwkgICAgIiAgZGVjbCAlMlxuIgorCSAgICAiICBqbmUJMWJcbiIKKwkgICAgIiAgYWRjbCAkMCwgJTBcbiIKKwkgICAgIiAgbW92bCAlMCwgJTJcbiIKKwkgICAgIiAgc2hybCAkMTYsICUwXG4iCisJICAgICIgIGFkZHcgJXcyLCAldzBcbiIKKwkgICAgIiAgYWRjbCAkMCwgJTBcbiIKKwkgICAgIiAgbm90bCAlMFxuIgorCSAgICAiMjoiCiAJLyogU2luY2UgdGhlIGlucHV0IHJlZ2lzdGVycyB3aGljaCBhcmUgbG9hZGVkIHdpdGggaXBoIGFuZCBpaGwKIAkgICBhcmUgbW9kaWZpZWQsIHdlIG11c3QgYWxzbyBzcGVjaWZ5IHRoZW0gYXMgb3V0cHV0cywgb3IgZ2NjCiAJICAgd2lsbCBhc3N1bWUgdGhleSBjb250YWluIHRoZWlyIG9yaWdpbmFsIHZhbHVlcy4gKi8KLQk6ICI9ciIgKHN1bSksICI9ciIgKGlwaCksICI9ciIgKGlobCkKLQk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCi0JOiAibWVtb3J5Iik7CisJICAgIDogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKQorCSAgICA6ICIxIiAoaXBoKSwgIjIiIChpaGwpCisJICAgIDogIm1lbW9yeSIpOwogCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KXN1bTsKIH0KIAotLyoqIAorLyoqCiAgKiBjc3VtX3RjcHVwX25vZm9sZCAtIENvbXB1dGUgYW4gSVB2NCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLgogICogQHNhZGRyOiBzb3VyY2UgYWRkcmVzcwogICogQGRhZGRyOiBkZXN0aW5hdGlvbiBhZGRyZXNzCiAgKiBAbGVuOiBsZW5ndGggb2YgcGFja2V0CiAgKiBAcHJvdG86IGlwIHByb3RvY29sIG9mIHBhY2tldAotICogQHN1bTogaW5pdGlhbCBzdW0gdG8gYmUgYWRkZWQgaW4gKDMyYml0IHVuZm9sZGVkKSAKLSAqIAotICogUmV0dXJucyB0aGUgcHNldWRvIGhlYWRlciBjaGVja3N1bSB0aGUgaW5wdXQgZGF0YS4gUmVzdWx0IGlzIAorICogQHN1bTogaW5pdGlhbCBzdW0gdG8gYmUgYWRkZWQgaW4gKDMyYml0IHVuZm9sZGVkKQorICoKKyAqIFJldHVybnMgdGhlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gdGhlIGlucHV0IGRhdGEuIFJlc3VsdCBpcwogICogMzJiaXQgdW5mb2xkZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgX193c3VtCkBAIC05MywzMiArOTEsMzIgQEAKIAkgICAgIiAgYWRjbCAlMiwgJTBcbiIKIAkgICAgIiAgYWRjbCAlMywgJTBcbiIKIAkgICAgIiAgYWRjbCAkMCwgJTBcbiIKLQkJOiAiPXIiIChzdW0pCisJICAgIDogIj1yIiAoc3VtKQogCSAgICA6ICJnIiAoZGFkZHIpLCAiZyIgKHNhZGRyKSwKIAkgICAgICAiZyIgKChsZW4gKyBwcm90byk8PDgpLCAiMCIgKHN1bSkpOwotICAgIHJldHVybiBzdW07CisJcmV0dXJuIHN1bTsKIH0KIAogCi0vKiogCisvKioKICAqIGNzdW1fdGNwdXBfbWFnaWMgLSBDb21wdXRlIGFuIElQdjQgcHNldWRvIGhlYWRlciBjaGVja3N1bS4KICAqIEBzYWRkcjogc291cmNlIGFkZHJlc3MKICAqIEBkYWRkcjogZGVzdGluYXRpb24gYWRkcmVzcwogICogQGxlbjogbGVuZ3RoIG9mIHBhY2tldAogICogQHByb3RvOiBpcCBwcm90b2NvbCBvZiBwYWNrZXQKLSAqIEBzdW06IGluaXRpYWwgc3VtIHRvIGJlIGFkZGVkIGluICgzMmJpdCB1bmZvbGRlZCkgCi0gKiAKKyAqIEBzdW06IGluaXRpYWwgc3VtIHRvIGJlIGFkZGVkIGluICgzMmJpdCB1bmZvbGRlZCkKKyAqCiAgKiBSZXR1cm5zIHRoZSAxNmJpdCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtIHRoZSBpbnB1dCBkYXRhIGFscmVhZHkKICAqIGNvbXBsZW1lbnRlZCBhbmQgcmVhZHkgdG8gYmUgZmlsbGVkIGluLgogICovCi1zdGF0aWMgaW5saW5lIF9fc3VtMTYKLWNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkgIHVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7Ci0JcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7CiB9CiAKLS8qKiAKKy8qKgogICogY3N1bV9wYXJ0aWFsIC0gQ29tcHV0ZSBhbiBpbnRlcm5ldCBjaGVja3N1bS4KICAqIEBidWZmOiBidWZmZXIgdG8gYmUgY2hlY2tzdW1tZWQKICAqIEBsZW46IGxlbmd0aCBvZiBidWZmZXIuCkBAIC0xMjcsNyArMTI1LDcgQEAKICAqIFJldHVybnMgdGhlIDMyYml0IHVuZm9sZGVkIGludGVybmV0IGNoZWNrc3VtIG9mIHRoZSBidWZmZXIuCiAgKiBCZWZvcmUgZmlsbGluZyBpdCBpbiBpdCBuZWVkcyB0byBiZSBjc3VtX2ZvbGQoKSdlZC4KICAqIGJ1ZmYgc2hvdWxkIGJlIGFsaWduZWQgdG8gYSA2NGJpdCBib3VuZGFyeSBpZiBwb3NzaWJsZS4KLSAqLyAKKyAqLwogZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKICNkZWZpbmUgIF9IQVZFX0FSQ0hfQ09QWV9BTkRfQ1NVTV9GUk9NX1VTRVIgMQpAQCAtMTM2LDIzICsxMzQsMjIgQEAKIAogLyogRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIHRoZSB3cmFwcGVycyBiZWxvdyAqLwogZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IHZvaWQgKnNyYywgY29uc3Qgdm9pZCAqZHN0LAotCQkJCQkgICAgICAgaW50IGxlbiwKLQkJCQkJICAgICAgIF9fd3N1bSBzdW0sCi0JCQkJCSAgICAgICBpbnQgKnNyY19lcnJfcHRyLCBpbnQgKmRzdF9lcnJfcHRyKTsKKwkJCQkJaW50IGxlbiwgX193c3VtIHN1bSwKKwkJCQkJaW50ICpzcmNfZXJyX3B0ciwgaW50ICpkc3RfZXJyX3B0cik7CiAKIAogZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAotCQkJCSAgICAgICBpbnQgbGVuLCBfX3dzdW0gaXN1bSwgaW50ICplcnJwKTsKKwkJCQkJICBpbnQgbGVuLCBfX3dzdW0gaXN1bSwgaW50ICplcnJwKTsKIGV4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsIHZvaWQgX191c2VyICpkc3QsCi0JCQkJICAgICAgaW50IGxlbiwgX193c3VtIGlzdW0sIGludCAqZXJycCk7Ci1leHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sCi0JCQkJCSAgICAgIF9fd3N1bSBzdW0pOworCQkJCQlpbnQgbGVuLCBfX3dzdW0gaXN1bSwgaW50ICplcnJwKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJaW50IGxlbiwgX193c3VtIHN1bSk7CiAKIC8qIE9sZCBuYW1lcy4gVG8gYmUgcmVtb3ZlZC4gKi8KICNkZWZpbmUgY3N1bV9hbmRfY29weV90b191c2VyIGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIKICNkZWZpbmUgY3N1bV9hbmRfY29weV9mcm9tX3VzZXIgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyCiAKLS8qKiAKKy8qKgogICogaXBfY29tcHV0ZV9jc3VtIC0gQ29tcHV0ZSBhbiAxNmJpdCBJUCBjaGVja3N1bS4KICAqIEBidWZmOiBidWZmZXIgYWRkcmVzcy4KICAqIEBsZW46IGxlbmd0aCBvZiBidWZmZXIuCkBAIC0xNzAsNyArMTY3LDcgQEAKICAqIEBwcm90bzogcHJvdG9jb2wgb2YgcGFja2V0CiAgKiBAc3VtOiBpbml0aWFsIHN1bSAoMzJiaXQgdW5mb2xkZWQpIHRvIGJlIGFkZGVkIGluCiAgKgotICogQ29tcHV0ZXMgYW4gSVB2NiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLiBUaGlzIHN1bSBpcyBhZGRlZCB0aGUgY2hlY2tzdW0gCisgKiBDb21wdXRlcyBhbiBJUHY2IHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0uIFRoaXMgc3VtIGlzIGFkZGVkIHRoZSBjaGVja3N1bQogICogaW50byBVRFAvVENQIHBhY2tldHMgYW5kIGNvbnRhaW5zIHNvbWUgbGluayBsYXllciBpbmZvcm1hdGlvbi4KICAqIFJldHVybnMgdGhlIHVuZm9sZGVkIDMyYml0IGNoZWNrc3VtLgogICovCkBAIC0xODUsMTEgKzE4MiwxMCBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBhZGQzMl93aXRoX2NhcnJ5KHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIpCiB7CiAJYXNtKCJhZGRsICUyLCUwXG5cdCIKLQkgICAgImFkY2wgJDAsJTAiIAotCSAgICA6ICI9ciIgKGEpIAorCSAgICAiYWRjbCAkMCwlMCIKKwkgICAgOiAiPXIiIChhKQogCSAgICA6ICIwIiAoYSksICJyIiAoYikpOwogCXJldHVybiBhOwogfQogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnXzMyLmgKaW5kZXggY2VhMWRhZS4uYmY1YTY5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvY21weGNoZ18zMi5oCkBAIC04LDkgKzgsMTIgQEAKICAqICAgICAgIHlvdSBuZWVkIHRvIHRlc3QgZm9yIHRoZSBmZWF0dXJlIGluIGJvb3RfY3B1X2RhdGEuCiAgKi8KIAotI2RlZmluZSB4Y2hnKHB0cix2KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLChwdHIpLHNpemVvZigqKHB0cikpKSkKKyNkZWZpbmUgeGNoZyhwdHIsIHYpCQkJCQkJCVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLCAocHRyKSwgc2l6ZW9mKCoocHRyKSkpKQogCi1zdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CitzdHJ1Y3QgX194Y2hnX2R1bW15IHsKKwl1bnNpZ25lZCBsb25nIGFbMTAwXTsKK307CiAjZGVmaW5lIF9feGcoeCkgKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQogCiAvKgpAQCAtMjcsNzIgKzMwLDc0IEBACiAgKiBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2V0IHJlZmVyZW5jZSAyNDMxOTEwMi5wZGYuIFdlIG5lZWQKICAqIHRoZSByZWFkZXIgc2lkZSB0byBzZWUgdGhlIGNvaGVyZW50IDY0Yml0IHZhbHVlLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXQgKHVuc2lnbmVkIGxvbmcgbG9uZyAqIHB0ciwKLQkJdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gpCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXQodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiXG4xOlx0IgotCQkibW92bCAoJTApLCAlJWVheFxuXHQiCi0JCSJtb3ZsIDQoJTApLCAlJWVkeFxuXHQiCi0JCUxPQ0tfUFJFRklYICJjbXB4Y2hnOGIgKCUwKVxuXHQiCi0JCSJqbnogMWIiCi0JCTogLyogbm8gb3V0cHV0cyAqLwotCQk6CSJEIihwdHIpLAotCQkJImIiKGxvdyksCi0JCQkiYyIoaGlnaCkKLQkJOgkiYXgiLCJkeCIsIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZSgiXG4xOlx0IgorCQkgICAgICJtb3ZsICglMCksICUlZWF4XG5cdCIKKwkJICAgICAibW92bCA0KCUwKSwgJSVlZHhcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICJjbXB4Y2hnOGIgKCUwKVxuXHQiCisJCSAgICAgImpueiAxYiIKKwkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJICAgICA6ICJEIihwdHIpLAorCQkgICAgICAgImIiKGxvdyksCisJCSAgICAgICAiYyIoaGlnaCkKKwkJICAgICA6ICJheCIsICJkeCIsICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X2NvbnN0YW50ICh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfY29uc3RhbnQodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKIHsKLQlfX3NldF82NGJpdChwdHIsKHVuc2lnbmVkIGludCkodmFsdWUpLCAodW5zaWduZWQgaW50KSgodmFsdWUpPj4zMlVMTCkpOwotfQotI2RlZmluZSBsbF9sb3coeCkJKigoKHVuc2lnbmVkIGludCopJih4KSkrMCkKLSNkZWZpbmUgbGxfaGlnaCh4KQkqKCgodW5zaWduZWQgaW50KikmKHgpKSsxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfdmFyICh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKLQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCi17Ci0JX19zZXRfNjRiaXQocHRyLGxsX2xvdyh2YWx1ZSksIGxsX2hpZ2godmFsdWUpKTsKKwlfX3NldF82NGJpdChwdHIsICh1bnNpZ25lZCBpbnQpdmFsdWUsICh1bnNpZ25lZCBpbnQpKHZhbHVlID4+IDMyKSk7CiB9CiAKLSNkZWZpbmUgc2V0XzY0Yml0KHB0cix2YWx1ZSkgXAotKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbHVlKSA/IFwKLSBfX3NldF82NGJpdF9jb25zdGFudChwdHIsIHZhbHVlKSA6IFwKLSBfX3NldF82NGJpdF92YXIocHRyLCB2YWx1ZSkgKQorI2RlZmluZSBsbF9sb3coeCkJKigoKHVuc2lnbmVkIGludCAqKSYoeCkpICsgMCkKKyNkZWZpbmUgbGxfaGlnaCh4KQkqKCgodW5zaWduZWQgaW50ICopJih4KSkgKyAxKQogCi0jZGVmaW5lIF9zZXRfNjRiaXQocHRyLHZhbHVlKSBcCi0oX19idWlsdGluX2NvbnN0YW50X3AodmFsdWUpID8gXAotIF9fc2V0XzY0Yml0KHB0ciwgKHVuc2lnbmVkIGludCkodmFsdWUpLCAodW5zaWduZWQgaW50KSgodmFsdWUpPj4zMlVMTCkgKSA6IFwKLSBfX3NldF82NGJpdChwdHIsIGxsX2xvdyh2YWx1ZSksIGxsX2hpZ2godmFsdWUpKSApCitzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfdmFyKHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKK3sKKwlfX3NldF82NGJpdChwdHIsIGxsX2xvdyh2YWx1ZSksIGxsX2hpZ2godmFsdWUpKTsKK30KKworI2RlZmluZSBzZXRfNjRiaXQocHRyLCB2YWx1ZSkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKCh2YWx1ZSkpCQlcCisJID8gX19zZXRfNjRiaXRfY29uc3RhbnQoKHB0ciksICh2YWx1ZSkpCVwKKwkgOiBfX3NldF82NGJpdF92YXIoKHB0ciksICh2YWx1ZSkpKQorCisjZGVmaW5lIF9zZXRfNjRiaXQocHRyLCB2YWx1ZSkJCQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbHVlKQkJCQkJXAorCSA/IF9fc2V0XzY0Yml0KHB0ciwgKHVuc2lnbmVkIGludCkodmFsdWUpLAkJCVwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpKCh2YWx1ZSkgPj4gMzIpKQkJCVwKKwkgOiBfX3NldF82NGJpdChwdHIsIGxsX2xvdygodmFsdWUpKSwgbGxfaGlnaCgodmFsdWUpKSkpCiAKIC8qCiAgKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5CiAgKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCiAgKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKKwkJCQkgICBpbnQgc2l6ZSkKIHsKIAlzd2l0Y2ggKHNpemUpIHsKLQkJY2FzZSAxOgotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdiICViMCwlMSIKLQkJCQk6Ij1xIiAoeCkKLQkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJCToibWVtb3J5Iik7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGd3ICV3MCwlMSIKLQkJCQk6Ij1yIiAoeCkKLQkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJCToibWVtb3J5Iik7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdsICUwLCUxIgotCQkJCToiPXIiICh4KQotCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkJOiJtZW1vcnkiKTsKLQkJCWJyZWFrOworCWNhc2UgMToKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hnYiAlYjAsJTEiCisJCQkgICAgIDogIj1xIiAoeCkKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlicmVhazsKKwljYXNlIDI6CisJCWFzbSB2b2xhdGlsZSgieGNoZ3cgJXcwLCUxIgorCQkJICAgICA6ICI9ciIgKHgpCisJCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlhc20gdm9sYXRpbGUoInhjaGdsICUwLCUxIgorCQkJICAgICA6ICI9ciIgKHgpCisJCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiB4OwogfQpAQCAtMTA1LDI0ICsxMTAsMjcgQEAKIAogI2lmZGVmIENPTkZJR19YODZfQ01QWENIRwogI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKLSNkZWZpbmUgY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJICAgICBcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCSAgICAgXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKSkKLSNkZWZpbmUgc3luY19jbXB4Y2hnKHB0ciwgbywgbikJCQkJCQkgICAgIFwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNfY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAkgICAgIFwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSkpCi0jZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJICAgICBcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCSAgICAgXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKSkKKyNkZWZpbmUgY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKShuKSwJCVwKKwkJCQkgICAgICAgc2l6ZW9mKCoocHRyKSkpKQorI2RlZmluZSBzeW5jX2NtcHhjaGcocHRyLCBvLCBuKQkJCQkJCVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNfY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCisJCQkJCSAgICAodW5zaWduZWQgbG9uZykobiksCQlcCisJCQkJCSAgICBzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZ19sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCisJCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCisJCQkJCSAgICAgc2l6ZW9mKCoocHRyKSkpKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0NNUFhDSEc2NAotI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCSAgICAgIFwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NCgocHRyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykobyksICAgICAgXAotCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSkpCi0jZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQkgICAgICBcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjRfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLFwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpKQorI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NCgocHRyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykobyksIFwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKSkKKyNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NF9sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykobyksIFwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCkBAIC0xMzEsMjIgKzEzOSwyMiBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnYiAlYjEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOworCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdiICViMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCWNhc2UgMjoKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DS19QUkVGSVggImNtcHhjaGd3ICV3MSwlMiIKLQkJCQkgICAgIDogIj1hIihwcmV2KQotCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ3cgJXcxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKIAkJcmV0dXJuIHByZXY7CiAJY2FzZSA0OgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiY21weGNoZ2wgJTEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOworCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdsICUxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKIAkJcmV0dXJuIHByZXY7CiAJfQogCXJldHVybiBvbGQ7CkBAIC0xNTgsODUgKzE2Niw4OCBAQAogICogaXNuJ3QuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3N5bmNfY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAxOgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jazsgY21weGNoZ2IgJWIxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnYiAlYjEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOwogCQlyZXR1cm4gcHJldjsKIAljYXNlIDI6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBjbXB4Y2hndyAldzEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOworCQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCWNhc2UgNDoKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdsICUxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnbCAlMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCX0KIAlyZXR1cm4gb2xkOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCXVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAxOgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY21weGNoZ2IgJWIxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hnYiAlYjEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOwogCQlyZXR1cm4gcHJldjsKIAljYXNlIDI6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJjbXB4Y2hndyAldzEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOworCQlhc20gdm9sYXRpbGUoImNtcHhjaGd3ICV3MSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCWNhc2UgNDoKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcHhjaGdsICUxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hnbCAlMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCX0KIAlyZXR1cm4gb2xkOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NtcHhjaGc2NCh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQl1bnNpZ25lZCBsb25nIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3KQorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvbGQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5ldykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcHJldjsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiY21weGNoZzhiICUzIgotCQkJICAgICA6ICI9QSIocHJldikKLQkJCSAgICAgOiAiYiIoKHVuc2lnbmVkIGxvbmcpbmV3KSwKLQkJCSAgICAgICAiYyIoKHVuc2lnbmVkIGxvbmcpKG5ldyA+PiAzMikpLAotCQkJICAgICAgICJtIigqX194ZyhwdHIpKSwKLQkJCSAgICAgICAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMyIKKwkJICAgICA6ICI9QSIocHJldikKKwkJICAgICA6ICJiIigodW5zaWduZWQgbG9uZyluZXcpLAorCQkgICAgICAgImMiKCh1bnNpZ25lZCBsb25nKShuZXcgPj4gMzIpKSwKKwkJICAgICAgICJtIigqX194ZyhwdHIpKSwKKwkJICAgICAgICIwIihvbGQpCisJCSAgICAgOiAibWVtb3J5Iik7CiAJcmV0dXJuIHByZXY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fY21weGNoZzY0X2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXcpCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgb2xkLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG5ldykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcHJldjsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY21weGNoZzhiICUzIgotCQkJICAgICA6ICI9QSIocHJldikKLQkJCSAgICAgOiAiYiIoKHVuc2lnbmVkIGxvbmcpbmV3KSwKLQkJCSAgICAgICAiYyIoKHVuc2lnbmVkIGxvbmcpKG5ldyA+PiAzMikpLAotCQkJICAgICAgICJtIigqX194ZyhwdHIpKSwKLQkJCSAgICAgICAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoImNtcHhjaGc4YiAlMyIKKwkJICAgICA6ICI9QSIocHJldikKKwkJICAgICA6ICJiIigodW5zaWduZWQgbG9uZyluZXcpLAorCQkgICAgICAgImMiKCh1bnNpZ25lZCBsb25nKShuZXcgPj4gMzIpKSwKKwkJICAgICAgICJtIigqX194ZyhwdHIpKSwKKwkJICAgICAgICIwIihvbGQpCisJCSAgICAgOiAibWVtb3J5Iik7CiAJcmV0dXJuIHByZXY7CiB9CiAKQEAgLTI1Miw3ICsyNjMsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTMyKHZvbGF0aWxlIHZvaWQgKiwgdTMyLCB1MzIpOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODYodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCisJCQkJCXVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKIHsKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6CkBAIC0yNjksMjIgKzI4MCwyNiBAQAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAogCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSkJCQkJXAotCQlfX3JldCA9IF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAkJXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKTsgXAorCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLAkJXAorCQkJCSh1bnNpZ25lZCBsb25nKShvKSwgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCisJCQkJc2l6ZW9mKCoocHRyKSkpOwkJCVwKIAllbHNlCQkJCQkJCQlcCi0JCV9fcmV0ID0gY21weGNoZ18zODYoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJCVwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7IFwKKwkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKWNtcHhjaGdfMzg2KChwdHIpLAkJXAorCQkJCSh1bnNpZ25lZCBsb25nKShvKSwgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCisJCQkJc2l6ZW9mKCoocHRyKSkpOwkJCVwKIAlfX3JldDsJCQkJCQkJCVwKIH0pCiAjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAogCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSkJCQkJXAotCQlfX3JldCA9IF9fY21weGNoZ19sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCi0JCQkJCSh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpOyBcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGdfbG9jYWwoKHB0ciksCVwKKwkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAorCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCiAJZWxzZQkJCQkJCQkJXAotCQlfX3JldCA9IGNtcHhjaGdfMzg2KChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCQlcCi0JCQkJCSh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpOyBcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzM4NigocHRyKSwJCVwKKwkJCQkodW5zaWduZWQgbG9uZykobyksICh1bnNpZ25lZCBsb25nKShuKSwJXAorCQkJCXNpemVvZigqKHB0cikpKTsJCQlcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQogI2VuZGlmCkBAIC0zMDEsMTAgKzMxNiwxMiBAQAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAogCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiA0KSkJCQkJXAotCQlfX3JldCA9IF9fY21weGNoZzY0KChwdHIpLCAodW5zaWduZWQgbG9uZyBsb25nKShvKSwJXAorCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjQoKHB0ciksCQlcCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAogCWVsc2UJCQkJCQkJCVwKLQkJX19yZXQgPSBjbXB4Y2hnXzQ4Nl91NjQoKHB0ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQpAQCAtMzEyLDEwICszMjksMTIgQEAKICh7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKIAlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gNCkpCQkJCVwKLQkJX19yZXQgPSBfX2NtcHhjaGc2NF9sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykobyksIFwKKwkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0X2xvY2FsKChwdHIpLAlcCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAogCWVsc2UJCQkJCQkJCVwKLQkJX19yZXQgPSBjbXB4Y2hnXzQ4Nl91NjQoKHB0ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAlcCisJCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSljbXB4Y2hnXzQ4Nl91NjQoKHB0ciksCVwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCiAJX19yZXQ7CQkJCQkJCQlcCiB9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jbXB4Y2hnXzY0LmgKaW5kZXggNTZmNWI0MS4uZDliMjZiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NtcHhjaGdfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvY21weGNoZ182NC5oCkBAIC0zLDcgKzMsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+IC8qIFByb3ZpZGVzIExPQ0tfUFJFRklYICovCiAKLSNkZWZpbmUgeGNoZyhwdHIsdikgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHhjaGcocHRyLCB2KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLCBcCisJCQkJCQkgKHB0ciksIHNpemVvZigqKHB0cikpKSkKIAogI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUgbG9uZyAqKSh4KSkKIApAQCAtMTksMzMgKzIwLDM0IEBACiAgKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCiAgKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKKwkJCQkgICBpbnQgc2l6ZSkKIHsKIAlzd2l0Y2ggKHNpemUpIHsKLQkJY2FzZSAxOgotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdiICViMCwlMSIKLQkJCQk6Ij1xIiAoeCkKLQkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJCToibWVtb3J5Iik7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGd3ICV3MCwlMSIKLQkJCQk6Ij1yIiAoeCkKLQkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJCToibWVtb3J5Iik7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdsICVrMCwlMSIKLQkJCQk6Ij1yIiAoeCkKLQkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJCToibWVtb3J5Iik7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdxICUwLCUxIgotCQkJCToiPXIiICh4KQotCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkJOiJtZW1vcnkiKTsKLQkJCWJyZWFrOworCWNhc2UgMToKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hnYiAlYjAsJTEiCisJCQkgICAgIDogIj1xIiAoeCkKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkgICAgIDogIm1lbW9yeSIpOworCQlicmVhazsKKwljYXNlIDI6CisJCWFzbSB2b2xhdGlsZSgieGNoZ3cgJXcwLCUxIgorCQkJICAgICA6ICI9ciIgKHgpCisJCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlhc20gdm9sYXRpbGUoInhjaGdsICVrMCwlMSIKKwkJCSAgICAgOiAiPXIiICh4KQorCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hncSAlMCwlMSIKKwkJCSAgICAgOiAiPXIiICh4KQorCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4geDsKIH0KQEAgLTY0LDYxICs2Niw2MiBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnYiAlYjEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOworCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdiICViMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCWNhc2UgMjoKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DS19QUkVGSVggImNtcHhjaGd3ICV3MSwlMiIKLQkJCQkgICAgIDogIj1hIihwcmV2KQotCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ3cgJXcxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKIAkJcmV0dXJuIHByZXY7CiAJY2FzZSA0OgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiY21weGNoZ2wgJWsxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlazEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOwogCQlyZXR1cm4gcHJldjsKIAljYXNlIDg6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hncSAlMSwlMiIKLQkJCQkgICAgIDogIj1hIihwcmV2KQotCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ3EgJTEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOwogCQlyZXR1cm4gcHJldjsKIAl9CiAJcmV0dXJuIG9sZDsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQl1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBwcmV2OwogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgMToKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcHhjaGdiICViMSwlMiIKLQkJCQkgICAgIDogIj1hIihwcmV2KQotCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCWFzbSB2b2xhdGlsZSgiY21weGNoZ2IgJWIxLCUyIgorCQkJICAgICA6ICI9YSIocHJldikKKwkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJICAgICA6ICJtZW1vcnkiKTsKIAkJcmV0dXJuIHByZXY7CiAJY2FzZSAyOgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY21weGNoZ3cgJXcxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hndyAldzEsJTIiCisJCQkgICAgIDogIj1hIihwcmV2KQorCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOwogCQlyZXR1cm4gcHJldjsKIAljYXNlIDQ6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJjbXB4Y2hnbCAlazEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOworCQlhc20gdm9sYXRpbGUoImNtcHhjaGdsICVrMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCWNhc2UgODoKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcHhjaGdxICUxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hncSAlMSwlMiIKKwkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CiAJCXJldHVybiBwcmV2OwogCX0KIAlyZXR1cm4gb2xkOwpAQCAtMTI2LDE5ICsxMjksMjAgQEAKIAogI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikJCQkJCQlcCiAJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSkpCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpKQogI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKLSAgKHsJCQkJCQkJCQlcCisoewkJCQkJCQkJCVwKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKCoocHRyKSkgIT0gOCk7CQkJCVwKIAljbXB4Y2hnKChwdHIpLCAobyksIChuKSk7CQkJCQlcCi0gIH0pCit9KQogI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgbywgbikJCQkJCVwKIAkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKSkKKwkJCQkJICAgICAodW5zaWduZWQgbG9uZykobiksCVwKKwkJCQkJICAgICBzaXplb2YoKihwdHIpKSkpCiAjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQlcCi0gICh7CQkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCiAJQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQlcCiAJY21weGNoZ19sb2NhbCgocHRyKSwgKG8pLCAobikpOwkJCQkJXAotICB9KQorfSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY29tcGF0LmggYi9pbmNsdWRlL2FzbS14ODYvY29tcGF0LmgKaW5kZXggZDNlOGYzZS4uMTc5M2FjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9jb21wYXQuaApAQCAtMjA0LDcgKzIwNCw3IEBACiAJcmV0dXJuICh1MzIpKHVuc2lnbmVkIGxvbmcpdXB0cjsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3VzZXIgKmNvbXBhdF9hbGxvY191c2VyX3NwYWNlKGxvbmcgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobG9uZyBsZW4pCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CiAJcmV0dXJuICh2b2lkIF9fdXNlciAqKXJlZ3MtPnNwIC0gbGVuOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2NwdWZlYXR1cmUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKaW5kZXggMDY1ZTkyOS4uMGQ2MDljOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NwdWZlYXR1cmUuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oCkBAIC0xMjAsNiArMTIwLDkgQEAKIGV4dGVybiBjb25zdCBjaGFyICogY29uc3QgeDg2X2NhcF9mbGFnc1tOQ0FQSU5UUyozMl07CiBleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHg4Nl9wb3dlcl9mbGFnc1szMl07CiAKKyNkZWZpbmUgdGVzdF9jcHVfY2FwKGMsIGJpdCkJCQkJCQlcCisJIHRlc3RfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikoKGMpLT54ODZfY2FwYWJpbGl0eSkpCisKICNkZWZpbmUgY3B1X2hhcyhjLCBiaXQpCQkJCQkJCVwKIAkoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSAmJgkJCQkJXAogCSAoICgoKGJpdCk+PjUpPT0wICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMCkpIHx8CVwKQEAgLTEzMSw3ICsxMzQsOCBAQAogCSAgICgoKGJpdCk+PjUpPT02ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNikpIHx8CVwKIAkgICAoKChiaXQpPj41KT09NyAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzcpKSApCVwKIAkgID8gMSA6CQkJCQkJCQlcCi0JIHRlc3RfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikoKGMpLT54ODZfY2FwYWJpbGl0eSkpKQorCSB0ZXN0X2NwdV9jYXAoYywgYml0KSkKKwogI2RlZmluZSBib290X2NwdV9oYXMoYml0KQljcHVfaGFzKCZib290X2NwdV9kYXRhLCBiaXQpCiAKICNkZWZpbmUgc2V0X2NwdV9jYXAoYywgYml0KQlzZXRfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikoKGMpLT54ODZfY2FwYWJpbGl0eSkpCkBAIC0xODEsNiArMTg1LDggQEAKICNkZWZpbmUgY3B1X2hhc19jbGZsdXNoCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFNIKQogI2RlZmluZSBjcHVfaGFzX2J0cwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JUUykKICNkZWZpbmUgY3B1X2hhc19nYnBhZ2VzCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfR0JQQUdFUykKKyNkZWZpbmUgY3B1X2hhc19hcmNoX3BlcmZtb24JYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikKKyNkZWZpbmUgY3B1X2hhc19wYXQJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QQVQpCiAKICNpZiBkZWZpbmVkKENPTkZJR19YODZfSU5WTFBHKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCiAjIGRlZmluZSBjcHVfaGFzX2ludmxwZwkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2N1cnJlbnRfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9jdXJyZW50XzMyLmgKaW5kZXggZDM1MjQ4NS4uNWFmOWJkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2N1cnJlbnRfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvY3VycmVudF8zMi5oCkBAIC0xMSw3ICsxMSw3IEBACiB7CiAJcmV0dXJuIHg4Nl9yZWFkX3BlcmNwdShjdXJyZW50X3Rhc2spOwogfQotIAorCiAjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQogCiAjZW5kaWYgLyogIShfSTM4Nl9DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY3VycmVudF82NC5oIGIvaW5jbHVkZS9hc20teDg2L2N1cnJlbnRfNjQuaAppbmRleCBiYzhhZGVjLi4yZDM2OGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvY3VycmVudF82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9jdXJyZW50XzY0LmgKQEAgLTEsMjMgKzEsMjMgQEAKICNpZm5kZWYgX1g4Nl82NF9DVVJSRU5UX0gKICNkZWZpbmUgX1g4Nl82NF9DVVJSRU5UX0gKIAotI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogc3RydWN0IHRhc2tfc3RydWN0OwogCiAjaW5jbHVkZSA8YXNtL3BkYS5oPgogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkgCi17IAotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHJlYWRfcGRhKHBjdXJyZW50KTsgCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSByZWFkX3BkYShwY3VycmVudCk7CiAJcmV0dXJuIHQ7Ci19IAorfQogCiAjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQogCiAjZWxzZQogCiAjaWZuZGVmIEFTTV9PRkZTRVRfSAotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPiAKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNlbmRpZgogCiAjZGVmaW5lIEdFVF9DVVJSRU5UKHJlZykgbW92cSAlZ3M6KHBkYV9wY3VycmVudCkscmVnCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZGVzYy5oIGIvaW5jbHVkZS9hc20teDg2L2Rlc2MuaAppbmRleCA1YjZhMDVkLi4yNjhhMDEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZGVzYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9kZXNjLmgKQEAgLTYyLDggKzYyLDggQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBhY2tfZ2F0ZShnYXRlX2Rlc2MgKmdhdGUsIHVuc2lnbmVkIGNoYXIgdHlwZSwKLSAgICAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGRwbCwgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIHNob3J0IHNlZykKLQorCQkJICAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGRwbCwgdW5zaWduZWQgZmxhZ3MsCisJCQkgICAgIHVuc2lnbmVkIHNob3J0IHNlZykKIHsKIAlnYXRlLT5hID0gKHNlZyA8PCAxNikgfCAoYmFzZSAmIDB4ZmZmZik7CiAJZ2F0ZS0+YiA9IChiYXNlICYgMHhmZmZmMDAwMCkgfApAQCAtODQsMjIgKzg0LDIzIEBACiAjZGVmaW5lIGxvYWRfVFJfZGVzYygpIG5hdGl2ZV9sb2FkX3RyX2Rlc2MoKQogI2RlZmluZSBsb2FkX2dkdChkdHIpIG5hdGl2ZV9sb2FkX2dkdChkdHIpCiAjZGVmaW5lIGxvYWRfaWR0KGR0cikgbmF0aXZlX2xvYWRfaWR0KGR0cikKLSNkZWZpbmUgbG9hZF90cih0cikgX19hc21fXyBfX3ZvbGF0aWxlKCJsdHIgJTAiOjoibSIgKHRyKSkKLSNkZWZpbmUgbG9hZF9sZHQobGR0KSBfX2FzbV9fIF9fdm9sYXRpbGUoImxsZHQgJTAiOjoibSIgKGxkdCkpCisjZGVmaW5lIGxvYWRfdHIodHIpIGFzbSB2b2xhdGlsZSgibHRyICUwIjo6Im0iICh0cikpCisjZGVmaW5lIGxvYWRfbGR0KGxkdCkgYXNtIHZvbGF0aWxlKCJsbGR0ICUwIjo6Im0iIChsZHQpKQogCiAjZGVmaW5lIHN0b3JlX2dkdChkdHIpIG5hdGl2ZV9zdG9yZV9nZHQoZHRyKQogI2RlZmluZSBzdG9yZV9pZHQoZHRyKSBuYXRpdmVfc3RvcmVfaWR0KGR0cikKICNkZWZpbmUgc3RvcmVfdHIodHIpICh0ciA9IG5hdGl2ZV9zdG9yZV90cigpKQotI2RlZmluZSBzdG9yZV9sZHQobGR0KSBfX2FzbV9fICgic2xkdCAlMCI6Ij1tIiAobGR0KSkKKyNkZWZpbmUgc3RvcmVfbGR0KGxkdCkgYXNtKCJzbGR0ICUwIjoiPW0iIChsZHQpKQogCiAjZGVmaW5lIGxvYWRfVExTKHQsIGNwdSkgbmF0aXZlX2xvYWRfdGxzKHQsIGNwdSkKICNkZWZpbmUgc2V0X2xkdCBuYXRpdmVfc2V0X2xkdAogCi0jZGVmaW5lIHdyaXRlX2xkdF9lbnRyeShkdCwgZW50cnksIGRlc2MpIFwKLQkJCQluYXRpdmVfd3JpdGVfbGR0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYykKLSNkZWZpbmUgd3JpdGVfZ2R0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYywgdHlwZSkgXAotCQkJCW5hdGl2ZV93cml0ZV9nZHRfZW50cnkoZHQsIGVudHJ5LCBkZXNjLCB0eXBlKQotI2RlZmluZSB3cml0ZV9pZHRfZW50cnkoZHQsIGVudHJ5LCBnKSBuYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeSwgZykKKyNkZWZpbmUgd3JpdGVfbGR0X2VudHJ5KGR0LCBlbnRyeSwgZGVzYykJXAorCW5hdGl2ZV93cml0ZV9sZHRfZW50cnkoZHQsIGVudHJ5LCBkZXNjKQorI2RlZmluZSB3cml0ZV9nZHRfZW50cnkoZHQsIGVudHJ5LCBkZXNjLCB0eXBlKQkJXAorCW5hdGl2ZV93cml0ZV9nZHRfZW50cnkoZHQsIGVudHJ5LCBkZXNjLCB0eXBlKQorI2RlZmluZSB3cml0ZV9pZHRfZW50cnkoZHQsIGVudHJ5LCBnKQkJXAorCW5hdGl2ZV93cml0ZV9pZHRfZW50cnkoZHQsIGVudHJ5LCBnKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGdhdGVfZGVzYyAqaWR0LCBpbnQgZW50cnksCkBAIC0xMzgsOCArMTM5LDggQEAKIHsKIAlkZXNjLT5hID0gKChiYXNlICYgMHhmZmZmKSA8PCAxNikgfCAobGltaXQgJiAweGZmZmYpOwogCWRlc2MtPmIgPSAoYmFzZSAmIDB4ZmYwMDAwMDApIHwgKChiYXNlICYgMHhmZjAwMDApID4+IDE2KSB8Ci0JCSAgKGxpbWl0ICYgMHgwMDBmMDAwMCkgfCAoKHR5cGUgJiAweGZmKSA8PCA4KSB8Ci0JCSAgKChmbGFncyAmIDB4ZikgPDwgMjApOworCQkobGltaXQgJiAweDAwMGYwMDAwKSB8ICgodHlwZSAmIDB4ZmYpIDw8IDgpIHwKKwkJKChmbGFncyAmIDB4ZikgPDwgMjApOwogCWRlc2MtPnAgPSAxOwogfQogCkBAIC0xNTksNyArMTYwLDYgQEAKIAlkZXNjLT5iYXNlMiA9IChQVFJfTUlERExFKGFkZHIpID4+IDgpICYgMHhGRjsKIAlkZXNjLT5iYXNlMyA9IFBUUl9ISUdIKGFkZHIpOwogI2Vsc2UKLQogCXBhY2tfZGVzY3JpcHRvcigoc3RydWN0IGRlc2Nfc3RydWN0ICopZCwgYWRkciwgc2l6ZSwgMHg4MCB8IHR5cGUsIDApOwogI2VuZGlmCiB9CkBAIC0xNzcsNyArMTc3LDggQEAKIAkgKiBsYXN0IHZhbGlkIGJ5dGUKIAkgKi8KIAlzZXRfdHNzbGR0X2Rlc2NyaXB0b3IoJnRzcywgKHVuc2lnbmVkIGxvbmcpYWRkciwgREVTQ19UU1MsCi0JCUlPX0JJVE1BUF9PRkZTRVQgKyBJT19CSVRNQVBfQllURVMgKyBzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTsKKwkJCSAgICAgIElPX0JJVE1BUF9PRkZTRVQgKyBJT19CSVRNQVBfQllURVMgKworCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiAJd3JpdGVfZ2R0X2VudHJ5KGQsIGVudHJ5LCAmdHNzLCBERVNDX1RTUyk7CiB9CiAKQEAgLTE4Niw3ICsxODcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfbGR0KGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBlbnRyaWVzKQogewogCWlmIChsaWtlbHkoZW50cmllcyA9PSAwKSkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxsZHQgJXcwIjo6InEiICgwKSk7CisJCWFzbSB2b2xhdGlsZSgibGxkdCAldzAiOjoicSIgKDApKTsKIAllbHNlIHsKIAkJdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlsZHRfZGVzYyBsZHQ7CkBAIC0xOTUsNyArMTk2LDcgQEAKIAkJCQkgICAgICBERVNDX0xEVCwgZW50cmllcyAqIHNpemVvZihsZHQpIC0gMSk7CiAJCXdyaXRlX2dkdF9lbnRyeShnZXRfY3B1X2dkdF90YWJsZShjcHUpLCBHRFRfRU5UUllfTERULAogCQkJCSZsZHQsIERFU0NfTERUKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxsZHQgJXcwIjo6InEiIChHRFRfRU5UUllfTERUKjgpKTsKKwkJYXNtIHZvbGF0aWxlKCJsbGR0ICV3MCI6OiJxIiAoR0RUX0VOVFJZX0xEVCo4KSk7CiAJfQogfQogCkBAIC0yNDAsMTUgKzI0MSwxNSBAQAogCQlnZHRbR0RUX0VOVFJZX1RMU19NSU4gKyBpXSA9IHQtPnRsc19hcnJheVtpXTsKIH0KIAotI2RlZmluZSBfTERUX2VtcHR5KGluZm8pIChcCi0JKGluZm8pLT5iYXNlX2FkZHIJPT0gMAkmJiBcCi0JKGluZm8pLT5saW1pdAkJPT0gMAkmJiBcCi0JKGluZm8pLT5jb250ZW50cwk9PSAwCSYmIFwKLQkoaW5mbyktPnJlYWRfZXhlY19vbmx5CT09IDEJJiYgXAotCShpbmZvKS0+c2VnXzMyYml0CT09IDAJJiYgXAotCShpbmZvKS0+bGltaXRfaW5fcGFnZXMJPT0gMAkmJiBcCi0JKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJiBcCi0JKGluZm8pLT51c2VhYmxlCQk9PSAwKQorI2RlZmluZSBfTERUX2VtcHR5KGluZm8pCQkJCVwKKwkoKGluZm8pLT5iYXNlX2FkZHIJCT09IDAJJiYJXAorCSAoaW5mbyktPmxpbWl0CQkJPT0gMAkmJglcCisJIChpbmZvKS0+Y29udGVudHMJCT09IDAJJiYJXAorCSAoaW5mbyktPnJlYWRfZXhlY19vbmx5CQk9PSAxCSYmCVwKKwkgKGluZm8pLT5zZWdfMzJiaXQJCT09IDAJJiYJXAorCSAoaW5mbyktPmxpbWl0X2luX3BhZ2VzCQk9PSAwCSYmCVwKKwkgKGluZm8pLT5zZWdfbm90X3ByZXNlbnQJPT0gMQkmJglcCisJIChpbmZvKS0+dXNlYWJsZQkJPT0gMCkKIAogI2lmZGVmIENPTkZJR19YODZfNjQKICNkZWZpbmUgTERUX2VtcHR5KGluZm8pIChfTERUX2VtcHR5KGluZm8pICYmICgoaW5mbyktPmxtID09IDApKQpAQCAtMjg3LDcgKzI4OCw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfc2V0X2dhdGUoaW50IGdhdGUsIHVuc2lnbmVkIHR5cGUsIHZvaWQgKmFkZHIsCi0JCQkgICAgICB1bnNpZ25lZCBkcGwsIHVuc2lnbmVkIGlzdCwgdW5zaWduZWQgc2VnKQorCQkJICAgICB1bnNpZ25lZCBkcGwsIHVuc2lnbmVkIGlzdCwgdW5zaWduZWQgc2VnKQogewogCWdhdGVfZGVzYyBzOwogCXBhY2tfZ2F0ZSgmcywgdHlwZSwgKHVuc2lnbmVkIGxvbmcpYWRkciwgZHBsLCBpc3QsIHNlZyk7CkBAIC0zNzAsMTAgKzM3MSwxMCBAQAogICogICAgV2lsbCByZWFkIHRoZSBiYXNlIGFkZHJlc3Mgb2YgR0RUX0VOVFJZX0VTUEZJWF9TUyBhbmQgcHV0IGl0IGludG8gJWVheC4KICAqLwogI2RlZmluZSBHRVRfREVTQ19CQVNFKGlkeCwgZ2R0LCBiYXNlLCBsb193LCBsb19iLCBoaV9iKSBcCi0JbW92YiBpZHgqOCs0KGdkdCksIGxvX2I7IFwKLQltb3ZiIGlkeCo4KzcoZ2R0KSwgaGlfYjsgXAotCXNobGwgJDE2LCBiYXNlOyBcCi0JbW92dyBpZHgqOCsyKGdkdCksIGxvX3c7CisJbW92YiBpZHggKiA4ICsgNChnZHQpLCBsb19iOwkJCVwKKwltb3ZiIGlkeCAqIDggKyA3KGdkdCksIGhpX2I7CQkJXAorCXNobGwgJDE2LCBiYXNlOwkJCQkJXAorCW1vdncgaWR4ICogOCArIDIoZ2R0KSwgbG9fdzsKIAogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZGVzY182NC5oIGIvaW5jbHVkZS9hc20teDg2L2Rlc2NfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxMzc4OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZGVzY182NC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZGVzY19kZWZzLmggYi9pbmNsdWRlL2FzbS14ODYvZGVzY19kZWZzLmgKaW5kZXggZTMzZjA3OC4uZWNjYjRlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Rlc2NfZGVmcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9kZXNjX2RlZnMuaApAQCAtMTgsMTcgKzE4LDE5IEBACiAgKiBpbmNyZW1lbnRhbGx5LiBXZSBrZWVwIHRoZSBzaWduYXR1cmUgYXMgYSBzdHJ1Y3QsIHJhdGhlciB0aGFuIGFuIHVuaW9uLAogICogc28gd2UgY2FuIGdldCByaWQgb2YgaXQgdHJhbnNwYXJlbnRseSBpbiB0aGUgZnV0dXJlIC0tIGdsb21tZXIKICAqLwotLy8gOCBieXRlIHNlZ21lbnQgZGVzY3JpcHRvcgorLyogOCBieXRlIHNlZ21lbnQgZGVzY3JpcHRvciAqLwogc3RydWN0IGRlc2Nfc3RydWN0IHsKIAl1bmlvbiB7Ci0JCXN0cnVjdCB7IHVuc2lnbmVkIGludCBhLCBiOyB9OworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IGE7CisJCQl1bnNpZ25lZCBpbnQgYjsKKwkJfTsKIAkJc3RydWN0IHsKIAkJCXUxNiBsaW1pdDA7CiAJCQl1MTYgYmFzZTA7CiAJCQl1bnNpZ25lZCBiYXNlMTogOCwgdHlwZTogNCwgczogMSwgZHBsOiAyLCBwOiAxOwogCQkJdW5zaWduZWQgbGltaXQ6IDQsIGF2bDogMSwgbDogMSwgZDogMSwgZzogMSwgYmFzZTI6IDg7CiAJCX07Ci0KIAl9OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApAQCAtMzksNyArNDEsNyBAQAogCUdBVEVfVEFTSyA9IDB4NSwKIH07CiAKLS8vIDE2Ynl0ZSBnYXRlCisvKiAxNmJ5dGUgZ2F0ZSAqLwogc3RydWN0IGdhdGVfc3RydWN0NjQgewogCXUxNiBvZmZzZXRfbG93OwogCXUxNiBzZWdtZW50OwpAQCAtNTYsMTAgKzU4LDEwIEBACiBlbnVtIHsKIAlERVNDX1RTUyA9IDB4OSwKIAlERVNDX0xEVCA9IDB4MiwKLQlERVNDVFlQRV9TID0JMHgxMCwJLyogIXN5c3RlbSAqLworCURFU0NUWVBFX1MgPSAweDEwLAkvKiAhc3lzdGVtICovCiB9OwogCi0vLyBMRFQgb3IgVFNTIGRlc2NyaXB0b3IgaW4gdGhlIEdEVC4gMTYgYnl0ZXMuCisvKiBMRFQgb3IgVFNTIGRlc2NyaXB0b3IgaW4gdGhlIEdEVC4gMTYgYnl0ZXMuICovCiBzdHJ1Y3QgbGR0dHNzX2Rlc2M2NCB7CiAJdTE2IGxpbWl0MDsKIAl1MTYgYmFzZTA7CkBAIC04NCw3ICs4Niw2IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CiAKLQogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZGl2NjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9kaXY2NC5oCmluZGV4IGU5OGQxNmUuLjBkYmY4YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kaXY2NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9kaXY2NC5oCkBAIC0xNywxOCArMTcsMjAgQEAKICAqIFRoaXMgZW5kcyB1cCBiZWluZyB0aGUgbW9zdCBlZmZpY2llbnQgImNhbGxpbmcKICAqIGNvbnZlbnRpb24iIG9uIHg4Ni4KICAqLwotI2RlZmluZSBkb19kaXYobixiYXNlKSAoeyBcCi0JdW5zaWduZWQgbG9uZyBfX3VwcGVyLCBfX2xvdywgX19oaWdoLCBfX21vZCwgX19iYXNlOyBcCi0JX19iYXNlID0gKGJhc2UpOyBcCi0JYXNtKCIiOiI9YSIgKF9fbG93KSwgIj1kIiAoX19oaWdoKToiQSIgKG4pKTsgXAotCV9fdXBwZXIgPSBfX2hpZ2g7IFwKLQlpZiAoX19oaWdoKSB7IFwKLQkJX191cHBlciA9IF9faGlnaCAlIChfX2Jhc2UpOyBcCi0JCV9faGlnaCA9IF9faGlnaCAvIChfX2Jhc2UpOyBcCi0JfSBcCi0JYXNtKCJkaXZsICUyIjoiPWEiIChfX2xvdyksICI9ZCIgKF9fbW9kKToicm0iIChfX2Jhc2UpLCAiMCIgKF9fbG93KSwgIjEiIChfX3VwcGVyKSk7IFwKLQlhc20oIiI6Ij1BIiAobik6ImEiIChfX2xvdyksImQiIChfX2hpZ2gpKTsgXAotCV9fbW9kOyBcCisjZGVmaW5lIGRvX2RpdihuLCBiYXNlKQkJCQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3VwcGVyLCBfX2xvdywgX19oaWdoLCBfX21vZCwgX19iYXNlOwlcCisJX19iYXNlID0gKGJhc2UpOwkJCQkJXAorCWFzbSgiIjoiPWEiIChfX2xvdyksICI9ZCIgKF9faGlnaCkgOiAiQSIgKG4pKTsJCVwKKwlfX3VwcGVyID0gX19oaWdoOwkJCQkJXAorCWlmIChfX2hpZ2gpIHsJCQkJCQlcCisJCV9fdXBwZXIgPSBfX2hpZ2ggJSAoX19iYXNlKTsJCQlcCisJCV9faGlnaCA9IF9faGlnaCAvIChfX2Jhc2UpOwkJCVwKKwl9CQkJCQkJCVwKKwlhc20oImRpdmwgJTIiOiI9YSIgKF9fbG93KSwgIj1kIiAoX19tb2QpCQlcCisJICAgIDogInJtIiAoX19iYXNlKSwgIjAiIChfX2xvdyksICIxIiAoX191cHBlcikpOwlcCisJYXNtKCIiOiI9QSIgKG4pIDogImEiIChfX2xvdyksICJkIiAoX19oaWdoKSk7CQlcCisJX19tb2Q7CQkJCQkJCVwKIH0pCiAKIC8qCkBAIC0zNywxNCArMzksMTMgQEAKICAqCiAgKiBXYXJuaW5nLCB0aGlzIHdpbGwgZG8gYW4gZXhjZXB0aW9uIGlmIFggb3ZlcmZsb3dzLgogICovCi0jZGVmaW5lIGRpdl9sb25nX2xvbmdfcmVtKGEsYixjKSBkaXZfbGxfWF9sX3JlbShhLGIsYykKKyNkZWZpbmUgZGl2X2xvbmdfbG9uZ19yZW0oYSwgYiwgYykgZGl2X2xsX1hfbF9yZW0oYSwgYiwgYykKIAotc3RhdGljIGlubGluZSBsb25nCi1kaXZfbGxfWF9sX3JlbShsb25nIGxvbmcgZGl2cywgbG9uZyBkaXYsIGxvbmcgKnJlbSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBkaXZfbGxfWF9sX3JlbShsb25nIGxvbmcgZGl2cywgbG9uZyBkaXYsIGxvbmcgKnJlbSkKIHsKIAlsb25nIGR1bTI7Ci0gICAgICBfX2FzbV9fKCJkaXZsICUyIjoiPWEiKGR1bTIpLCAiPWQiKCpyZW0pCi0gICAgICA6CSJybSIoZGl2KSwgIkEiKGRpdnMpKTsKKwlhc20oImRpdmwgJTIiOiI9YSIoZHVtMiksICI9ZCIoKnJlbSkKKwkgICAgOiAicm0iKGRpdiksICJBIihkaXZzKSk7CiAKIAlyZXR1cm4gZHVtMjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmcuaAppbmRleCA1OGY3OTBmLi5hMWE0ZGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmcuaApAQCAtMSw1ICsxLDIzNyBAQAorI2lmbmRlZiBfQVNNX0RNQV9NQVBQSU5HX0hfCisjZGVmaW5lIF9BU01fRE1BX01BUFBJTkdfSF8KKworLyoKKyAqIElPTU1VIGludGVyZmFjZS4gU2VlIERvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0IGFuZCBETUEtQVBJLnR4dCBmb3IKKyAqIGRvY3VtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KKworZXh0ZXJuIGRtYV9hZGRyX3QgYmFkX2RtYV9hZGRyZXNzOworZXh0ZXJuIGludCBpb21tdV9tZXJnZTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlIGZhbGxiYWNrX2RldjsKK2V4dGVybiBpbnQgcGFuaWNfb25fb3ZlcmZsb3c7CitleHRlcm4gaW50IGZvcmJpZF9kYWM7CitleHRlcm4gaW50IGZvcmNlX2lvbW11OworCitzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHsKKwlpbnQgICAgICAgICAgICAgKCptYXBwaW5nX2Vycm9yKShkbWFfYWRkcl90IGRtYV9hZGRyKTsKKwl2b2lkKiAgICAgICAgICAgKCphbGxvY19jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApOworCXZvaWQgICAgICAgICAgICAoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisJZG1hX2FkZHJfdCAgICAgICgqbWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqaHdkZXYsIHBoeXNfYWRkcl90IHB0ciwKKwkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisJLyogbGlrZSBtYXBfc2luZ2xlLCBidXQgZG9lc24ndCBjaGVjayB0aGUgZGV2aWNlIG1hc2sgKi8KKwlkbWFfYWRkcl90ICAgICAgKCptYXBfc2ltcGxlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcHRyLAorCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKwl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCWludCBkaXJlY3Rpb24pOworCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCWludCBkaXJlY3Rpb24pOworCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2dfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQlpbnQgZGlyZWN0aW9uKTsKKwlpbnQgICAgICAgICAgICAgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCWludCBuZW50cywgaW50IGRpcmVjdGlvbik7CisJdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCQlpbnQgZGlyZWN0aW9uKTsKKwlpbnQgICAgICAgICAgICAgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOworCWludAkJaXNfcGh5czsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOworCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCWlmIChkbWFfb3BzLT5tYXBwaW5nX2Vycm9yKQorCQlyZXR1cm4gZG1hX29wcy0+bWFwcGluZ19lcnJvcihkbWFfYWRkcik7CisKKwlyZXR1cm4gKGRtYV9hZGRyID09IGJhZF9kbWFfYWRkcmVzcyk7Cit9CisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOworCit2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisKKworZXh0ZXJuIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7CitleHRlcm4gaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90CitkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgaW50IGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJcmV0dXJuIGRtYV9vcHMtPm1hcF9zaW5nbGUoaHdkZXYsIHZpcnRfdG9fcGh5cyhwdHIpLCBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLAorCQkgaW50IGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJaWYgKGRtYV9vcHMtPnVubWFwX3NpbmdsZSkKKwkJZG1hX29wcy0+dW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RtYV9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlyZXR1cm4gZG1hX29wcy0+bWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJICAgICBpbnQgZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlpZiAoZG1hX29wcy0+dW5tYXBfc2cpCisJCWRtYV9vcHMtPnVubWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlpZiAoZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2NwdSkKKwkJZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwKKwkJCQkJICAgICBkaXJlY3Rpb24pOworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCWlmIChkbWFfb3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKQorCQlkbWFfb3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLAorCQkJCQkJZGlyZWN0aW9uKTsKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJaWYgKGRtYV9vcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpCisJCWRtYV9vcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCwKKwkJCQkJCSAgIHNpemUsIGRpcmVjdGlvbik7CisKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSBpbnQgZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlpZiAoZG1hX29wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkKKwkJZG1hX29wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShod2RldiwgZG1hX2hhbmRsZSwKKwkJCQkJCSAgICAgIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJaWYgKGRtYV9vcHMtPnN5bmNfc2dfZm9yX2NwdSkKKwkJZG1hX29wcy0+c3luY19zZ19mb3JfY3B1KGh3ZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJaWYgKGRtYV9vcHMtPnN5bmNfc2dfZm9yX2RldmljZSkKKwkJZG1hX29wcy0+c3luY19zZ19mb3JfZGV2aWNlKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOworCisJZmx1c2hfd3JpdGVfYnVmZmVycygpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgaW50IGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJcmV0dXJuIGRtYV9vcHMtPm1hcF9zaW5nbGUoZGV2LCBwYWdlX3RvX3BoeXMocGFnZSkrb2Zmc2V0LAorCQkJCSAgIHNpemUsIGRpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCit7CisJLyogbm8gZWFzeSB3YXkgdG8gZ2V0IGNhY2hlIHNpemUgb24gYWxsIHg4Niwgc28gcmV0dXJuIHRoZQorCSAqIG1heGltdW0gcG9zc2libGUsIHRvIGJlIHNhZmUgKi8KKwlyZXR1cm4gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplOworfQorCisjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpCSgxKQorCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJkbWEtbWFwcGluZ18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiZG1hLW1hcHBpbmdfNjQuaCIKKyMgIGRlZmluZSBBUkNIX0hBU19ETUFfREVDTEFSRV9DT0hFUkVOVF9NRU1PUlkKK3N0cnVjdCBkbWFfY29oZXJlbnRfbWVtIHsKKwl2b2lkCQkqdmlydF9iYXNlOworCXUzMgkJZGV2aWNlX2Jhc2U7CisJaW50CQlzaXplOworCWludAkJZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkqYml0bWFwOworfTsKKworZXh0ZXJuIGludAorZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKKwkJCSAgICBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKKworZXh0ZXJuIHZvaWQKK2RtYV9yZWxlYXNlX2RlY2xhcmVkX21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZCAqCitkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUpOworI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RtYS1tYXBwaW5nXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmdfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmMDFiZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmdfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0jaWZuZGVmIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICi0jZGVmaW5lIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYnVnLmg+Ci0KLSNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQotI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQotCi12b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOwotCi12b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7Ci0KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAotZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCVdBUk5fT04oc2l6ZSA9PSAwKTsKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7Ci0JcmV0dXJuIHZpcnRfdG9fcGh5cyhwdHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZW50cywKLQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlpbnQgaTsKLQotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlXQVJOX09OKG5lbnRzID09IDAgfHwgc2dsaXN0WzBdLmxlbmd0aCA9PSAwKTsKLQotCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIG5lbnRzLCBpKSB7Ci0JCUJVR19PTighc2dfcGFnZShzZykpOwotCi0JCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpOwotCX0KLQotCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKLQlyZXR1cm4gbmVudHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAotZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCSAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAotCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHJpZXMsCi0JICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlyZXR1cm4gMDsKLX0KLQotZXh0ZXJuIGludCBmb3JiaWRfZGFjOwotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotICAgICAgICAvKgotICAgICAgICAgKiB3ZSBmYWxsIGJhY2sgdG8gR0ZQX0RNQSB3aGVuIHRoZSBtYXNrIGlzbid0IGFsbCAxcywKLSAgICAgICAgICogc28gd2UgY2FuJ3QgZ3VhcmFudGVlIGFsbG9jYXRpb25zIHRoYXQgbXVzdCBiZQotICAgICAgICAgKiB3aXRoaW4gYSB0aWdodGVyIHJhbmdlIHRoYW4gR0ZQX0RNQS4uCi0gICAgICAgICAqLwotICAgICAgICBpZihtYXNrIDwgMHgwMGZmZmZmZikKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotCS8qIFdvcmsgYXJvdW5kIGNoaXBzZXQgYnVncyAqLwotCWlmIChmb3JiaWRfZGFjID4gMCAmJiBtYXNrID4gMHhmZmZmZmZmZlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCWlmKCFkZXYtPmRtYV9tYXNrIHx8ICFkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCi0JCXJldHVybiAtRUlPOwotCi0JKmRldi0+ZG1hX21hc2sgPSBtYXNrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCS8qIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCB4ODYsIHNvIHJldHVybiB0aGUKLQkgKiBtYXhpbXVtIHBvc3NpYmxlLCB0byBiZSBzYWZlICovCi0JcmV0dXJuICgxIDw8IElOVEVSTk9ERV9DQUNIRV9TSElGVCk7Ci19Ci0KLSNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7Ci19Ci0KLSNkZWZpbmUgQVJDSF9IQVNfRE1BX0RFQ0xBUkVfQ09IRVJFTlRfTUVNT1JZCi1leHRlcm4gaW50Ci1kbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAotCQkJICAgIGRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwotCi1leHRlcm4gdm9pZAotZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLWV4dGVybiB2b2lkICoKLWRtYV9tYXJrX2RlY2xhcmVkX21lbW9yeV9vY2N1cGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2RtYS1tYXBwaW5nXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmdfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNkMGY2MS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZG1hLW1hcHBpbmdfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0jaWZuZGVmIF9YODY2NF9ETUFfTUFQUElOR19ICi0jZGVmaW5lIF9YODY2NF9ETUFfTUFQUElOR19IIDEKLQotLyoKLSAqIElPTU1VIGludGVyZmFjZS4gU2VlIERvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0IGFuZCBETUEtQVBJLnR4dCBmb3IKLSAqIGRvY3VtZW50YXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KLQotc3RydWN0IGRtYV9tYXBwaW5nX29wcyB7Ci0JaW50ICAgICAgICAgICAgICgqbWFwcGluZ19lcnJvcikoZG1hX2FkZHJfdCBkbWFfYWRkcik7Ci0Jdm9pZCogICAgICAgICAgICgqYWxsb2NfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCk7Ci0Jdm9pZCAgICAgICAgICAgICgqZnJlZV9jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7Ci0JZG1hX2FkZHJfdCAgICAgICgqbWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCS8qIGxpa2UgbWFwX3NpbmdsZSwgYnV0IGRvZXNuJ3QgY2hlY2sgdGhlIGRldmljZSBtYXNrICovCi0JZG1hX2FkZHJfdCAgICAgICgqbWFwX3NpbXBsZSkoc3RydWN0IGRldmljZSAqaHdkZXYsIGNoYXIgKnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnVubWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCi0JCSAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCSAgICAgICAgICAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCSAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NnX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0JaW50ICAgICAgICAgICAgICgqbWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJICAgICAgICAgICAgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQlpbnQgICAgICAgICAgICAgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOwotCWludAkJaXNfcGh5czsKLX07Ci0KLWV4dGVybiBkbWFfYWRkcl90IGJhZF9kbWFfYWRkcmVzczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzKiBkbWFfb3BzOwotZXh0ZXJuIGludCBpb21tdV9tZXJnZTsKLQotc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlpZiAoZG1hX29wcy0+bWFwcGluZ19lcnJvcikKLQkJcmV0dXJuIGRtYV9vcHMtPm1hcHBpbmdfZXJyb3IoZG1hX2FkZHIpOwotCi0JcmV0dXJuIChkbWFfYWRkciA9PSBiYWRfZG1hX2FkZHJlc3MpOwotfQotCi0jZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKLSNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKLQotI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCi0jZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCi0KLWV4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApOwotZXh0ZXJuIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCi0JCQkgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotCSAgICAgICBpbnQgZGlyZWN0aW9uKQotewotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShod2RldiwgcHRyLCBzaXplLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsc2l6ZV90IHNpemUsCi0JCSBpbnQgZGlyZWN0aW9uKQotewotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlkbWFfb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOwotfQotCi0jZGVmaW5lIGRtYV9tYXBfcGFnZShkZXYscGFnZSxvZmZzZXQsc2l6ZSxkaXIpIFwKLQlkbWFfbWFwX3NpbmdsZSgoZGV2KSwgcGFnZV9hZGRyZXNzKHBhZ2UpKyhvZmZzZXQpLCAoc2l6ZSksIChkaXIpKQotCi0jZGVmaW5lIGRtYV91bm1hcF9wYWdlIGRtYV91bm1hcF9zaW5nbGUKLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCWlmIChkbWFfb3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KQotCQlkbWFfb3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLAotCQkJCQkgICAgIGRpcmVjdGlvbik7Ci0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JaWYgKGRtYV9vcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpCi0JCWRtYV9vcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsCi0JCQkJCQlkaXJlY3Rpb24pOwotCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlpZiAoZG1hX29wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkgewotCQlkbWFfb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KGh3ZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7Ci0JfQotCi0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JaWYgKGRtYV9vcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UpCi0JCWRtYV9vcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoaHdkZXYsIGRtYV9oYW5kbGUsCi0JCQkJCQkgICAgICBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7Ci0KLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCWlmIChkbWFfb3BzLT5zeW5jX3NnX2Zvcl9jcHUpCi0JCWRtYV9vcHMtPnN5bmNfc2dfZm9yX2NwdShod2Rldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJICAgICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCWlmIChkbWFfb3BzLT5zeW5jX3NnX2Zvcl9kZXZpY2UpIHsKLQkJZG1hX29wcy0+c3luY19zZ19mb3JfZGV2aWNlKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOwotCX0KLQotCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKLXsKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JcmV0dXJuIGRtYV9vcHMtPm1hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCSAgICAgaW50IGRpcmVjdGlvbikKLXsKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JZG1hX29wcy0+dW5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKLX0KLQotZXh0ZXJuIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7Ci0KLS8qIHNhbWUgZm9yIGdhcnQsIHN3aW90bGIsIGFuZCBub21tdSAqLwotc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQlyZXR1cm4gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplOwotfQotCi0jZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpIDEKLQotZXh0ZXJuIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCi0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKLX0KLQotZXh0ZXJuIHN0cnVjdCBkZXZpY2UgZmFsbGJhY2tfZGV2OwotZXh0ZXJuIGludCBwYW5pY19vbl9vdmVyZmxvdzsKLQotI2VuZGlmIC8qIF9YODY2NF9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZG1hLmggYi9pbmNsdWRlL2FzbS14ODYvZG1hLmgKaW5kZXggZTk3MzNjZS4uY2ExMDk4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9kbWEuaApAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotCiAjaWZkZWYgSEFWRV9SRUFMTFlfU0xPV19ETUFfQ09OVFJPTExFUgogI2RlZmluZSBkbWFfb3V0YglvdXRiX3AKICNlbHNlCkBAIC03NCwxNSArNzMsMTUgQEAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAKIC8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIERNQSB0cmFuc2ZlciB0byBvbiB0aGlzIHBsYXRmb3JtICovCi0jZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgICAgIChQQUdFX09GRlNFVCsweDEwMDAwMDApCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMCkKIAogI2Vsc2UKIAogLyogMTZNQiBJU0EgRE1BIHpvbmUgKi8KLSNkZWZpbmUgTUFYX0RNQV9QRk4gICAoKDE2KjEwMjQqMTAyNCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgTUFYX0RNQV9QRk4gICAoKDE2ICogMTAyNCAqIDEwMjQpID4+IFBBR0VfU0hJRlQpCiAKIC8qIDRHQiBicm9rZW4gUENJL0FHUCBoYXJkd2FyZSBidXMgbWFzdGVyIHpvbmUgKi8KLSNkZWZpbmUgTUFYX0RNQTMyX1BGTiAoKDRVTCoxMDI0KjEwMjQqMTAyNCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgTUFYX0RNQTMyX1BGTiAoKDRVTCAqIDEwMjQgKiAxMDI0ICogMTAyNCkgPj4gUEFHRV9TSElGVCkKIAogLyogQ29tcGF0IGRlZmluZSBmb3Igb2xkIGRtYSB6b25lICovCiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAoKHVuc2lnbmVkIGxvbmcpX192YShNQVhfRE1BX1BGTiA8PCBQQUdFX1NISUZUKSkKQEAgLTE1NCwyMCArMTUzLDIwIEBACiAKIGV4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOwogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGNsYWltX2RtYV9sb2NrKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2xhaW1fZG1hX2xvY2sodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGZsYWdzOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJlbGVhc2VfZG1hX2xvY2sodW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2RtYV9sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX3NwaW5fbG9jaywgZmxhZ3MpOwogfQogCiAvKiBlbmFibGUvZGlzYWJsZSBhIHNwZWNpZmljIERNQSBjaGFubmVsICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQogewogCWlmIChkbWFuciA8PSAzKQogCQlkbWFfb3V0YihkbWFuciwgRE1BMV9NQVNLX1JFRyk7CkBAIC0xNzUsNyArMTc0LDcgQEAKIAkJZG1hX291dGIoZG1hbnIgJiAzLCBETUEyX01BU0tfUkVHKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBkaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQogewogCWlmIChkbWFuciA8PSAzKQogCQlkbWFfb3V0YihkbWFuciB8IDQsIERNQTFfTUFTS19SRUcpOwpAQCAtMTkwLDcgKzE4OSw3IEBACiAgKiAtLS0gSW4gb3JkZXIgdG8gZG8gdGhhdCwgdGhlIERNQSByb3V0aW5lcyBiZWxvdyBzaG91bGQgLS0tCiAgKiAtLS0gb25seSBiZSB1c2VkIHdoaWxlIGhvbGRpbmcgdGhlIERNQSBsb2NrICEgLS0tCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfZG1hX2ZmKHVuc2lnbmVkIGludCBkbWFucikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9kbWFfZmYodW5zaWduZWQgaW50IGRtYW5yKQogewogCWlmIChkbWFuciA8PSAzKQogCQlkbWFfb3V0YigwLCBETUExX0NMRUFSX0ZGX1JFRyk7CkBAIC0xOTksNyArMTk4LDcgQEAKIH0KIAogLyogc2V0IG1vZGUgKGFib3ZlKSBmb3IgYSBzcGVjaWZpYyBETUEgY2hhbm5lbCAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCBjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBtb2RlKQogewogCWlmIChkbWFuciA8PSAzKQogCQlkbWFfb3V0Yihtb2RlIHwgZG1hbnIsIERNQTFfTU9ERV9SRUcpOwpAQCAtMjEyLDcgKzIxMSw3IEBACiAgKiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgRE1BIGN1cnJlbnQgYWRkcmVzcyByZWdpc3RlciwgYnV0IGEgNjRrIGJvdW5kYXJ5CiAgKiBtYXkgaGF2ZSBiZWVuIGNyb3NzZWQuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBwYWdlbnIpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBkbWFuciwgY2hhciBwYWdlbnIpCiB7CiAJc3dpdGNoIChkbWFucikgewogCWNhc2UgMDoKQEAgLTI0MywxNSArMjQyLDE1IEBACiAvKiBTZXQgdHJhbnNmZXIgYWRkcmVzcyAmIHBhZ2UgYml0cyBmb3Igc3BlY2lmaWMgRE1BIGNoYW5uZWwuCiAgKiBBc3N1bWVzIGRtYSBmbGlwZmxvcCBpcyBjbGVhci4KICAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYSkKIHsKIAlzZXRfZG1hX3BhZ2UoZG1hbnIsIGE+PjE2KTsKIAlpZiAoZG1hbnIgPD0gMykgIHsKIAkJZG1hX291dGIoYSAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAxKSArIElPX0RNQTFfQkFTRSk7CiAJCWRtYV9vdXRiKChhID4+IDgpICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDEpICsgSU9fRE1BMV9CQVNFKTsKIAl9ICBlbHNlICB7Ci0JICAgIGRtYV9vdXRiKChhID4+IDEpICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDIpICsgSU9fRE1BMl9CQVNFKTsKLQkgICAgZG1hX291dGIoKGEgPj4gOSkgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMikgKyBJT19ETUEyX0JBU0UpOworCQlkbWFfb3V0YigoYSA+PiAxKSAmIDB4ZmYsICgoZG1hbnIgJiAzKSA8PCAyKSArIElPX0RNQTJfQkFTRSk7CisJCWRtYV9vdXRiKChhID4+IDkpICYgMHhmZiwgKChkbWFuciAmIDMpIDw8IDIpICsgSU9fRE1BMl9CQVNFKTsKIAl9CiB9CiAKQEAgLTI2NCwxOCArMjYzLDE4IEBACiAgKiBBc3N1bWVzIGRtYSBmbGlwLWZsb3AgaXMgY2xlYXIuCiAgKiBOT1RFIDI6ICJjb3VudCIgcmVwcmVzZW50cyBfYnl0ZXNfIGFuZCBtdXN0IGJlIGV2ZW4gZm9yIGNoYW5uZWxzIDUtNy4KICAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfZG1hX2NvdW50KHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJY291bnQtLTsKIAlpZiAoZG1hbnIgPD0gMykgIHsKLQkgICAgZG1hX291dGIoY291bnQgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMSkgKyAxICsgSU9fRE1BMV9CQVNFKTsKLQkgICAgZG1hX291dGIoKGNvdW50ID4+IDgpICYgMHhmZiwKLQkJICAgICAoKGRtYW5yICYgMykgPDwgMSkgKyAxICsgSU9fRE1BMV9CQVNFKTsKKwkJZG1hX291dGIoY291bnQgJiAweGZmLCAoKGRtYW5yICYgMykgPDwgMSkgKyAxICsgSU9fRE1BMV9CQVNFKTsKKwkJZG1hX291dGIoKGNvdW50ID4+IDgpICYgMHhmZiwKKwkJCSAoKGRtYW5yICYgMykgPDwgMSkgKyAxICsgSU9fRE1BMV9CQVNFKTsKIAl9IGVsc2UgewotCSAgICBkbWFfb3V0YigoY291bnQgPj4gMSkgJiAweGZmLAotCQkgICAgICgoZG1hbnIgJiAzKSA8PCAyKSArIDIgKyBJT19ETUEyX0JBU0UpOwotCSAgICBkbWFfb3V0YigoY291bnQgPj4gOSkgJiAweGZmLAotCQkgICAgICgoZG1hbnIgJiAzKSA8PCAyKSArIDIgKyBJT19ETUEyX0JBU0UpOworCQlkbWFfb3V0YigoY291bnQgPj4gMSkgJiAweGZmLAorCQkJICgoZG1hbnIgJiAzKSA8PCAyKSArIDIgKyBJT19ETUEyX0JBU0UpOworCQlkbWFfb3V0YigoY291bnQgPj4gOSkgJiAweGZmLAorCQkJICgoZG1hbnIgJiAzKSA8PCAyKSArIDIgKyBJT19ETUEyX0JBU0UpOwogCX0KIH0KIApAQCAtMjg4LDcgKzI4Nyw3IEBACiAgKgogICogQXNzdW1lcyBETUEgZmxpcC1mbG9wIGlzIGNsZWFyLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9kbWFfcmVzaWR1ZSh1bnNpZ25lZCBpbnQgZG1hbnIpCiB7CiAJdW5zaWduZWQgaW50IGlvX3BvcnQ7CiAJLyogdXNpbmcgc2hvcnQgdG8gZ2V0IDE2LWJpdCB3cmFwIGFyb3VuZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2R3YXJmMl82NC5oIGIvaW5jbHVkZS9hc20teDg2L2R3YXJmMl82NC5oCmluZGV4IGVlZGMwODUuLmM5NTA1MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kd2FyZjJfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZHdhcmYyXzY0LmgKQEAgLTEsMTYgKzEsMTUgQEAKICNpZm5kZWYgX0RXQVJGMl9ICiAjZGVmaW5lIF9EV0FSRjJfSCAxCiAKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KICN3YXJuaW5nICJhc20vZHdhcmYyLmggc2hvdWxkIGJlIG9ubHkgaW5jbHVkZWQgaW4gcHVyZSBhc3NlbWJseSBmaWxlcyIKICNlbmRpZgogCi0vKiAKKy8qCiAgICBNYWNyb3MgZm9yIGR3YXJmMiBDRkkgdW53aW5kIHRhYmxlIGVudHJpZXMuCi0gICBTZWUgImFzLmluZm8iIGZvciBkZXRhaWxzIG9uIHRoZXNlIHBzZXVkbyBvcHMuIFVuZm9ydHVuYXRlbHkgCi0gICB0aGV5IGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB2ZXJ5IG5ldyBiaW51dGlscywgc28gZGVmaW5lIHRoZW0gCi0gICBhd2F5IGZvciBvbGRlciB2ZXJzaW9uLiAKKyAgIFNlZSAiYXMuaW5mbyIgZm9yIGRldGFpbHMgb24gdGhlc2UgcHNldWRvIG9wcy4gVW5mb3J0dW5hdGVseQorICAgdGhleSBhcmUgb25seSBzdXBwb3J0ZWQgaW4gdmVyeSBuZXcgYmludXRpbHMsIHNvIGRlZmluZSB0aGVtCisgICBhd2F5IGZvciBvbGRlciB2ZXJzaW9uLgogICovCiAKICNpZmRlZiBDT05GSUdfQVNfQ0ZJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZTgyMF8zMi5oIGIvaW5jbHVkZS9hc20teDg2L2U4MjBfMzIuaAppbmRleCBmMWRhN2ViLi5hOWY3YzZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZTgyMF8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lODIwXzMyLmgKQEAgLTI0LDE2ICsyNCwxOCBAQAogZXh0ZXJuIGludCBlODIwX2FsbF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkgICB1bnNpZ25lZCB0eXBlKTsKIGV4dGVybiBpbnQgZTgyMF9hbnlfbWFwcGVkKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgdHlwZSk7Ci1leHRlcm4gdm9pZCBmaW5kX21heF9wZm4odm9pZCk7CitleHRlcm4gdm9pZCBwcm9wYWdhdGVfZTgyMF9tYXAodm9pZCk7CiBleHRlcm4gdm9pZCByZWdpc3Rlcl9ib290bWVtX2xvd19wYWdlcyh1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuKTsKIGV4dGVybiB2b2lkIGFkZF9tZW1vcnlfcmVnaW9uKHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplLCBpbnQgdHlwZSk7CitleHRlcm4gdm9pZCB1cGRhdGVfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAorCQkJCXVuc2lnbmVkIG5ld190eXBlKTsKIGV4dGVybiB2b2lkIGU4MjBfcmVnaXN0ZXJfbWVtb3J5KHZvaWQpOwogZXh0ZXJuIHZvaWQgbGltaXRfcmVnaW9ucyh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBwcmludF9tZW1vcnlfbWFwKGNoYXIgKndobyk7CiBleHRlcm4gdm9pZCBpbml0X2lvbWVtX3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKmNvZGVfcmVzb3VyY2UsCi0JCQkgICAgc3RydWN0IHJlc291cmNlICpkYXRhX3Jlc291cmNlLAotCQkJICAgIHN0cnVjdCByZXNvdXJjZSAqYnNzX3Jlc291cmNlKTsKKwkJCQkgc3RydWN0IHJlc291cmNlICpkYXRhX3Jlc291cmNlLAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKmJzc19yZXNvdXJjZSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfSElCRVJOQVRJT04pCiBleHRlcm4gdm9pZCBlODIwX21hcmtfbm9zYXZlX3JlZ2lvbnModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZTgyMF82NC5oIGIvaW5jbHVkZS9hc20teDg2L2U4MjBfNjQuaAppbmRleCBhNTYwYzRmLi5mNDc4YzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZTgyMF82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lODIwXzY0LmgKQEAgLTE0LDE4ICsxNCwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9lODIwX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIAotCQkJCSAgICB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKTsKLWV4dGVybiB2b2lkIGFkZF9tZW1vcnlfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgCitleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX2U4MjBfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZpbmRfZTgyMF9hcmVhX3NpemUodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemVwLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbik7CitleHRlcm4gdm9pZCBhZGRfbWVtb3J5X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICAgICBpbnQgdHlwZSk7CitleHRlcm4gdm9pZCB1cGRhdGVfbWVtb3J5X3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAorCQkJCXVuc2lnbmVkIG5ld190eXBlKTsKIGV4dGVybiB2b2lkIHNldHVwX21lbW9yeV9yZWdpb24odm9pZCk7Ci1leHRlcm4gdm9pZCBjb250aWdfZTgyMF9zZXR1cCh2b2lkKTsgCitleHRlcm4gdm9pZCBjb250aWdfZTgyMF9zZXR1cCh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGU4MjBfZW5kX29mX3JhbSh2b2lkKTsKLWV4dGVybiB2b2lkIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpjb2RlX3Jlc291cmNlLAotCQlzdHJ1Y3QgcmVzb3VyY2UgKmRhdGFfcmVzb3VyY2UsIHN0cnVjdCByZXNvdXJjZSAqYnNzX3Jlc291cmNlKTsKK2V4dGVybiB2b2lkIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXModm9pZCk7CiBleHRlcm4gdm9pZCBlODIwX21hcmtfbm9zYXZlX3JlZ2lvbnModm9pZCk7Ci1leHRlcm4gaW50IGU4MjBfYW55X21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSk7Ci1leHRlcm4gaW50IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSk7CitleHRlcm4gaW50IGU4MjBfYW55X21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgIHVuc2lnbmVkIHR5cGUpOworZXh0ZXJuIGludCBlODIwX2FsbF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgICB1bnNpZ25lZCB0eXBlKTsKIGV4dGVybiBpbnQgZTgyMF9hbnlfbm9uX3Jlc2VydmVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiBpbnQgaXNfbWVtb3J5X2FueV92YWxpZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gaW50IGU4MjBfYWxsX25vbl9yZXNlcnZlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CkBAIC0zMyw4ICszOSw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBlODIwX2hvbGVfc2l6ZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKIGV4dGVybiB2b2lkIGU4MjBfc2V0dXBfZ2FwKHZvaWQpOwotZXh0ZXJuIHZvaWQgZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLAotCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pOworZXh0ZXJuIHZvaWQgZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CiAKIGV4dGVybiB2b2lkIGZpbmlzaF9lODIwX3BhcnNpbmcodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9lZGFjLmggYi9pbmNsdWRlL2FzbS14ODYvZWRhYy5oCmluZGV4IGNmMzIwMGEuLmE4MDg4ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9lZGFjLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2VkYWMuaApAQCAtMyw3ICszLDcgQEAKIAogLyogRUNDIGF0b21pYywgRE1BLCBTTVAgYW5kIGludGVycnVwdCBzYWZlIHNjcnViIGZ1bmN0aW9uICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX3NjcnViKHZvaWQgKnZhLCB1MzIgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2NydWIodm9pZCAqdmEsIHUzMiBzaXplKQogewogCXUzMiBpLCAqdmlydF9hZGRyID0gdmE7CiAKQEAgLTEyLDcgKzEyLDcgQEAKIAkgKiBhcmUgaW50ZXJydXB0LCBETUEgYW5kIFNNUCBzYWZlLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSsrLCB2aXJ0X2FkZHIrKykKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGFkZGwgJDAsICUwIjo6Im0iKCp2aXJ0X2FkZHIpKTsKKwkJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLCAlMCI6OiJtIiAoKnZpcnRfYWRkcikpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaAppbmRleCBlYTk3MzRiLi5kNTMwMDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZWZpLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2VmaS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAogI2RlZmluZSBlZmlfY2FsbF92aXJ0KGYsIGFyZ3MuLi4pIFwKLSAgICAgKChlZmlfIyNmIyNfdCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkqKWVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpKGFyZ3MpCisJKChlZmlfIyNmIyNfdCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkqKWVmaS5zeXN0YWItPnJ1bnRpbWUtPmYpKGFyZ3MpCiAKICNkZWZpbmUgZWZpX2NhbGxfdmlydDAoZikJCWVmaV9jYWxsX3ZpcnQoZikKICNkZWZpbmUgZWZpX2NhbGxfdmlydDEoZiwgYTEpCQllZmlfY2FsbF92aXJ0KGYsIGExKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VsZi5oIGIvaW5jbHVkZS9hc20teDg2L2VsZi5oCmluZGV4IGZiNjJmOTkuLjhmMjMyZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZWxmLmgKQEAgLTExLDcgKzExLDcgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CiAKLSNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQogdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKIAogdHlwZWRlZiBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKQEAgLTgyLDggKzgyLDkgQEAKICNkZWZpbmUgZWxmX2NoZWNrX2FyY2hfaWEzMih4KSBcCiAJKCgoeCktPmVfbWFjaGluZSA9PSBFTV8zODYpIHx8ICgoeCktPmVfbWFjaGluZSA9PSBFTV80ODYpKQogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2lmZGVmIENPTkZJR19YODZfMzIKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBmb3Igc2F2ZXNlZ21lbnQgKi8KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogCkBAIC05OSwxMCArMTAwLDExIEBACiAgICBXZSBtaWdodCBhcyB3ZWxsIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGVsc2UgaXMgY2xlYXJlZCB0b28gKGV4Y2VwdCBmb3IgJWVzcCksCiAgICBqdXN0IHRvIG1ha2UgdGhpbmdzIG1vcmUgZGV0ZXJtaW5pc3RpYy4KICAqLwotI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCWRvIHsgXAotCV9yLT5ieCA9IDA7IF9yLT5jeCA9IDA7IF9yLT5keCA9IDA7IFwKLQlfci0+c2kgPSAwOyBfci0+ZGkgPSAwOyBfci0+YnAgPSAwOyBcCi0JX3ItPmF4ID0gMDsgXAorI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCQlcCisJZG8gewkJCQkJXAorCV9yLT5ieCA9IDA7IF9yLT5jeCA9IDA7IF9yLT5keCA9IDA7CVwKKwlfci0+c2kgPSAwOyBfci0+ZGkgPSAwOyBfci0+YnAgPSAwOwlcCisJX3ItPmF4ID0gMDsJCQkJXAogfSB3aGlsZSAoMCkKIAogLyoKQEAgLTExMCwyNCArMTEyLDI1IEBACiAgKiBub3cgc3RydWN0X3VzZXJfcmVncywgdGhleSBhcmUgZGlmZmVyZW50KQogICovCiAKLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykgZG8gewkJXAotCXByX3JlZ1swXSA9IHJlZ3MtPmJ4OwkJCQlcCi0JcHJfcmVnWzFdID0gcmVncy0+Y3g7CQkJCVwKLQlwcl9yZWdbMl0gPSByZWdzLT5keDsJCQkJXAotCXByX3JlZ1szXSA9IHJlZ3MtPnNpOwkJCQlcCi0JcHJfcmVnWzRdID0gcmVncy0+ZGk7CQkJCVwKLQlwcl9yZWdbNV0gPSByZWdzLT5icDsJCQkJXAotCXByX3JlZ1s2XSA9IHJlZ3MtPmF4OwkJCQlcCi0JcHJfcmVnWzddID0gcmVncy0+ZHMgJiAweGZmZmY7CQkJXAotCXByX3JlZ1s4XSA9IHJlZ3MtPmVzICYgMHhmZmZmOwkJCVwKLQlwcl9yZWdbOV0gPSByZWdzLT5mcyAmIDB4ZmZmZjsJCQlcCi0Jc2F2ZXNlZ21lbnQoZ3MsIHByX3JlZ1sxMF0pOwkJCVwKLQlwcl9yZWdbMTFdID0gcmVncy0+b3JpZ19heDsJCQlcCi0JcHJfcmVnWzEyXSA9IHJlZ3MtPmlwOwkJCQlcCi0JcHJfcmVnWzEzXSA9IHJlZ3MtPmNzICYgMHhmZmZmOwkJCVwKLQlwcl9yZWdbMTRdID0gcmVncy0+ZmxhZ3M7CQkJXAotCXByX3JlZ1sxNV0gPSByZWdzLT5zcDsJCQkJXAotCXByX3JlZ1sxNl0gPSByZWdzLT5zcyAmIDB4ZmZmZjsJCQlcCisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhwcl9yZWcsIHJlZ3MpCVwKK2RvIHsJCQkJCQlcCisJcHJfcmVnWzBdID0gcmVncy0+Yng7CQkJXAorCXByX3JlZ1sxXSA9IHJlZ3MtPmN4OwkJCVwKKwlwcl9yZWdbMl0gPSByZWdzLT5keDsJCQlcCisJcHJfcmVnWzNdID0gcmVncy0+c2k7CQkJXAorCXByX3JlZ1s0XSA9IHJlZ3MtPmRpOwkJCVwKKwlwcl9yZWdbNV0gPSByZWdzLT5icDsJCQlcCisJcHJfcmVnWzZdID0gcmVncy0+YXg7CQkJXAorCXByX3JlZ1s3XSA9IHJlZ3MtPmRzICYgMHhmZmZmOwkJXAorCXByX3JlZ1s4XSA9IHJlZ3MtPmVzICYgMHhmZmZmOwkJXAorCXByX3JlZ1s5XSA9IHJlZ3MtPmZzICYgMHhmZmZmOwkJXAorCXNhdmVzZWdtZW50KGdzLCBwcl9yZWdbMTBdKTsJCVwKKwlwcl9yZWdbMTFdID0gcmVncy0+b3JpZ19heDsJCVwKKwlwcl9yZWdbMTJdID0gcmVncy0+aXA7CQkJXAorCXByX3JlZ1sxM10gPSByZWdzLT5jcyAmIDB4ZmZmZjsJCVwKKwlwcl9yZWdbMTRdID0gcmVncy0+ZmxhZ3M7CQlcCisJcHJfcmVnWzE1XSA9IHJlZ3MtPnNwOwkJCVwKKwlwcl9yZWdbMTZdID0gcmVncy0+c3MgJiAweGZmZmY7CQlcCiB9IHdoaWxlICgwKTsKIAogI2RlZmluZSBFTEZfUExBVEZPUk0JKHV0c25hbWUoKS0+bWFjaGluZSkKQEAgLTEzNSwxMiArMTM4LDEwIEBACiAKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KIAotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQogLyoKICAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCiAgKi8KLSNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgXAorI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KQkJCVwKIAkoKHgpLT5lX21hY2hpbmUgPT0gRU1fWDg2XzY0KQogCiAjZGVmaW5lIGNvbXBhdF9lbGZfY2hlY2tfYXJjaCh4KQllbGZfY2hlY2tfYXJjaF9pYTMyKHgpCkBAIC0xNjksMjQgKzE3MCwzMCBAQAogCXQtPmRzID0gdC0+ZXMgPSBkczsKIH0KIAotI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCWRvIHsJCSAgXAotCWVsZl9jb21tb25faW5pdCgmY3VycmVudC0+dGhyZWFkLCBfciwgMCk7CSAgXAotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JQTMyKTsJCQkgIFwKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQkJCVwKK2RvIHsJCQkJCQkJXAorCWVsZl9jb21tb25faW5pdCgmY3VycmVudC0+dGhyZWFkLCBfciwgMCk7CVwKKwljbGVhcl90aHJlYWRfZmxhZyhUSUZfSUEzMik7CQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZQlDT01QQVRfRUxGX1BMQVRfSU5JVChyZWdzLCBsb2FkX2FkZHIpCVwKKyNkZWZpbmUJQ09NUEFUX0VMRl9QTEFUX0lOSVQocmVncywgbG9hZF9hZGRyKQkJXAogCWVsZl9jb21tb25faW5pdCgmY3VycmVudC0+dGhyZWFkLCByZWdzLCBfX1VTRVJfRFMpCi0jZGVmaW5lCWNvbXBhdF9zdGFydF90aHJlYWQocmVncywgaXAsIHNwKQlkbyB7CQlcCi0JCXN0YXJ0X2lhMzJfdGhyZWFkKHJlZ3MsIGlwLCBzcCk7CQlcCi0JCXNldF9mcyhVU0VSX0RTKTsJCQkJXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIENPTVBBVF9TRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQlkbyB7CQlcCi0JCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSkJCQlcCi0JCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwlcCi0JCWVsc2UJCQkJCQlcCi0JCQlzZXRfdGhyZWFkX2ZsYWcoVElGX0FCSV9QRU5ESU5HKTsJXAotCQljdXJyZW50LT5wZXJzb25hbGl0eSB8PSBmb3JjZV9wZXJzb25hbGl0eTMyOwlcCi0JfSB3aGlsZSAoMCkKKworI2RlZmluZQljb21wYXRfc3RhcnRfdGhyZWFkKHJlZ3MsIGlwLCBzcCkJCVwKK2RvIHsJCQkJCQkJXAorCXN0YXJ0X2lhMzJfdGhyZWFkKHJlZ3MsIGlwLCBzcCk7CQlcCisJc2V0X2ZzKFVTRVJfRFMpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBBVF9TRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJXAorZG8gewkJCQkJCQlcCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpKQkJCVwKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0FCSV9QRU5ESU5HKTsJXAorCWVsc2UJCQkJCQlcCisJCXNldF90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwlcCisJY3VycmVudC0+cGVyc29uYWxpdHkgfD0gZm9yY2VfcGVyc29uYWxpdHkzMjsJXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBDT01QQVRfRUxGX1BMQVRGT1JNCQkJKCJpNjg2IikKIAogLyoKQEAgLTE5NSw3ICsyMDIsOCBAQAogICogZ2V0dGluZyBkdW1wZWQuCiAgKi8KIAotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKSAgZG8gewkJCVwKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJCQlcCitkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgdjsJCQkJCQlcCiAJKHByX3JlZylbMF0gPSAocmVncyktPnIxNTsJCQkJXAogCShwcl9yZWcpWzFdID0gKHJlZ3MpLT5yMTQ7CQkJCVwKQEAgLTI2OSwxMCArMjc3LDEyIEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAotI2RlZmluZQlBUkNIX0RMSU5GT19JQTMyKHZkc29fZW5hYmxlZCkgXAotZG8gaWYgKHZkc29fZW5hYmxlZCkgewkJCQkJCQlcCisjZGVmaW5lCUFSQ0hfRExJTkZPX0lBMzIodmRzb19lbmFibGVkKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodmRzb19lbmFibGVkKSB7CQkJCQkJXAogCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPLAlWRFNPX0VOVFJZKTsJCQlcCiAJCU5FV19BVVhfRU5UKEFUX1NZU0lORk9fRUhEUiwgVkRTT19DVVJSRU5UX0JBU0UpOwlcCisJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTI5MCw5ICszMDAsMTEgQEAKIC8qIDFHQiBmb3IgNjRiaXQsIDhNQiBmb3IgMzJiaXQgKi8KICNkZWZpbmUgU1RBQ0tfUk5EX01BU0sgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpID8gMHg3ZmYgOiAweDNmZmZmZikKIAotI2RlZmluZSBBUkNIX0RMSU5GTwkJCQkJCVwKLWRvIGlmICh2ZHNvX2VuYWJsZWQpIHsJCQkJCQlcCi0JTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLCh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc28pO1wKKyNkZWZpbmUgQVJDSF9ETElORk8JCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodmRzb19lbmFibGVkKQkJCQkJCVwKKwkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLAkJCQlcCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+bW0tPmNvbnRleHQudmRzbyk7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQVRfU1lTSU5GTwkJMzIKQEAgLTMwNSw4ICszMTcsOCBAQAogCiAjZGVmaW5lIFZEU09fQ1VSUkVOVF9CQVNFCSgodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvKQogCi0jZGVmaW5lIFZEU09fRU5UUlkgXAotCSgodW5zaWduZWQgbG9uZykgVkRTTzMyX1NZTUJPTChWRFNPX0NVUlJFTlRfQkFTRSwgdnN5c2NhbGwpKQorI2RlZmluZSBWRFNPX0VOVFJZCQkJCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpVkRTTzMyX1NZTUJPTChWRFNPX0NVUlJFTlRfQkFTRSwgdnN5c2NhbGwpKQogCiBzdHJ1Y3QgbGludXhfYmlucHJtOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmgKaW5kZXggYTc0MDRkNS4uZWIxNjY1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcF8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9maXhtYXBfMzIuaApAQCAtOTksOCArOTksNyBAQAogCSAqLwogI2RlZmluZSBOUl9GSVhfQlRNQVBTCQk2NAogI2RlZmluZSBGSVhfQlRNQVBTX05FU1RJTkcJNAotCUZJWF9CVE1BUF9FTkQgPQotCQlfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgNTEyIC0KKwlGSVhfQlRNQVBfRU5EID0gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIDUxMiAtCiAJCQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIDUxMSksCiAJRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMqRklYX0JUTUFQU19ORVNUSU5HIC0gMSwKIAlGSVhfV1BfVEVTVCwKQEAgLTExMCwyMCArMTA5LDIwIEBACiAJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCiB9OwogCi1leHRlcm4gdm9pZCBfX3NldF9maXhtYXAgKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKLQkJCQkJdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CitleHRlcm4gdm9pZCBfX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAorCQkJIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcmVzZXJ2ZV90b3BfYWRkcmVzcyh1bnNpZ25lZCBsb25nIHJlc2VydmUpOwogCi0jZGVmaW5lIHNldF9maXhtYXAoaWR4LCBwaHlzKSBcCi0JCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMKQorI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykJCQkJXAorCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMKQogLyoKICAqIFNvbWUgaGFyZHdhcmUgd2FudHMgdG8gZ2V0IGZpeG1hcHBlZCB3aXRob3V0IGNhY2hpbmcuCiAgKi8KLSNkZWZpbmUgc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgcGh5cykgXAotCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQorI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKQkJCVwKKwlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQogCi0jZGVmaW5lIGNsZWFyX2ZpeG1hcChpZHgpIFwKLQkJX19zZXRfZml4bWFwKGlkeCwgMCwgX19wZ3Byb3QoMCkpCisjZGVmaW5lIGNsZWFyX2ZpeG1hcChpZHgpCQkJXAorCV9fc2V0X2ZpeG1hcChpZHgsIDAsIF9fcGdwcm90KDApKQogCiAjZGVmaW5lIEZJWEFERFJfVE9QCSgodW5zaWduZWQgbG9uZylfX0ZJWEFERFJfVE9QKQogCkBAIC0xNTYsNyArMTU1LDcgQEAKIAlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykKIAkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOwogCi0gICAgICAgIHJldHVybiBfX2ZpeF90b192aXJ0KGlkeCk7CisJcmV0dXJuIF9fZml4X3RvX3ZpcnQoaWR4KTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fZml4KGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFkZHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzY0LmgKaW5kZXggNzBkZGIyMS4uZjNkNzY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcF82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9maXhtYXBfNjQuaApAQCAtMzQsMzIgKzM0LDM0IEBACiAKIGVudW0gZml4ZWRfYWRkcmVzc2VzIHsKIAlWU1lTQ0FMTF9MQVNUX1BBR0UsCi0JVlNZU0NBTExfRklSU1RfUEFHRSA9IFZTWVNDQUxMX0xBU1RfUEFHRSArICgoVlNZU0NBTExfRU5ELVZTWVNDQUxMX1NUQVJUKSA+PiBQQUdFX1NISUZUKSAtIDEsCisJVlNZU0NBTExfRklSU1RfUEFHRSA9IFZTWVNDQUxMX0xBU1RfUEFHRQorCQkJICAgICsgKChWU1lTQ0FMTF9FTkQtVlNZU0NBTExfU1RBUlQpID4+IFBBR0VfU0hJRlQpIC0gMSwKIAlWU1lTQ0FMTF9IUEVULAogCUZJWF9EQkdQX0JBU0UsCiAJRklYX0VBUkxZQ09OX01FTV9CQVNFLAogCUZJWF9IUEVUX0JBU0UsCiAJRklYX0FQSUNfQkFTRSwJLyogbG9jYWwgKENQVSkgQVBJQykgLS0gcmVxdWlyZWQgZm9yIFNNUCBvciBub3QgKi8KIAlGSVhfSU9fQVBJQ19CQVNFXzAsCi0JRklYX0lPX0FQSUNfQkFTRV9FTkQgPSBGSVhfSU9fQVBJQ19CQVNFXzAgKyBNQVhfSU9fQVBJQ1MtMSwKKwlGSVhfSU9fQVBJQ19CQVNFX0VORCA9IEZJWF9JT19BUElDX0JBU0VfMCArIE1BWF9JT19BUElDUyAtIDEsCiAJRklYX0VGSV9JT19NQVBfTEFTVF9QQUdFLAotCUZJWF9FRklfSU9fTUFQX0ZJUlNUX1BBR0UgPSBGSVhfRUZJX0lPX01BUF9MQVNUX1BBR0UrTUFYX0VGSV9JT19QQUdFUy0xLAorCUZJWF9FRklfSU9fTUFQX0ZJUlNUX1BBR0UgPSBGSVhfRUZJX0lPX01BUF9MQVNUX1BBR0UKKwkJCQkgICsgTUFYX0VGSV9JT19QQUdFUyAtIDEsCiAjaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKIAlGSVhfT0hDSTEzOTRfQkFTRSwKICNlbmRpZgogCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcwogfTsKIAotZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwIChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCi0JCQkJCXVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOworZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKKwkJCSB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKIAotI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgXAotCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKKyNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpCQkJXAorCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMKQogLyoKICAqIFNvbWUgaGFyZHdhcmUgd2FudHMgdG8gZ2V0IGZpeG1hcHBlZCB3aXRob3V0IGNhY2hpbmcuCiAgKi8KLSNkZWZpbmUgc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgcGh5cykgXAotCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQorI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKQkJCVwKKwlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQogCiAjZGVmaW5lIEZJWEFERFJfVE9QCShWU1lTQ0FMTF9FTkQtUEFHRV9TSVpFKQogI2RlZmluZSBGSVhBRERSX1NJWkUJKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20teDg2L2Zsb3BweS5oCmluZGV4IGE0OGQ3MTUuLmRiZTgyYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZmxvcHB5LmgKQEAgLTIwLDIwICsyMCwyMSBAQAogICogZHJpdmVyIG90aGVyd2lzZS4gSXQgZG9lc24ndCBtYXR0ZXIgbXVjaCBmb3IgcGVyZm9ybWFuY2UgYW55d2F5LCBhcyBtb3N0CiAgKiBmbG9wcHkgYWNjZXNzZXMgZ28gdGhyb3VnaCB0aGUgdHJhY2sgYnVmZmVyLgogICovCi0jZGVmaW5lIF9DUk9TU182NEtCKGEscyx2ZG1hKSBcCi0oISh2ZG1hKSAmJiAoKHVuc2lnbmVkIGxvbmcpKGEpL0tfNjQgIT0gKCh1bnNpZ25lZCBsb25nKShhKSArIChzKSAtIDEpIC8gS182NCkpCisjZGVmaW5lIF9DUk9TU182NEtCKGEsIHMsIHZkbWEpCQkJCQkJXAorCSghKHZkbWEpICYmCQkJCQkJCVwKKwkgKCh1bnNpZ25lZCBsb25nKShhKS9LXzY0ICE9ICgodW5zaWduZWQgbG9uZykoYSkgKyAocykgLSAxKSAvIEtfNjQpKQogCi0jZGVmaW5lIENST1NTXzY0S0IoYSxzKSBfQ1JPU1NfNjRLQihhLHMsdXNlX3ZpcnR1YWxfZG1hICYgMSkKKyNkZWZpbmUgQ1JPU1NfNjRLQihhLCBzKSBfQ1JPU1NfNjRLQihhLCBzLCB1c2VfdmlydHVhbF9kbWEgJiAxKQogCiAKLSNkZWZpbmUgU1cgZmRfcm91dGluZVt1c2VfdmlydHVhbF9kbWEmMV0KKyNkZWZpbmUgU1cgZmRfcm91dGluZVt1c2VfdmlydHVhbF9kbWEgJiAxXQogI2RlZmluZSBDU1cgZmRfcm91dGluZVtjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMV0KIAogCiAjZGVmaW5lIGZkX2luYihwb3J0KQkJaW5iX3AocG9ydCkKLSNkZWZpbmUgZmRfb3V0Yih2YWx1ZSxwb3J0KQlvdXRiX3AodmFsdWUscG9ydCkKKyNkZWZpbmUgZmRfb3V0Yih2YWx1ZSwgcG9ydCkJb3V0Yl9wKHZhbHVlLCBwb3J0KQogCi0jZGVmaW5lIGZkX3JlcXVlc3RfZG1hKCkJQ1NXLl9yZXF1ZXN0X2RtYShGTE9QUFlfRE1BLCJmbG9wcHkiKQorI2RlZmluZSBmZF9yZXF1ZXN0X2RtYSgpCUNTVy5fcmVxdWVzdF9kbWEoRkxPUFBZX0RNQSwgImZsb3BweSIpCiAjZGVmaW5lIGZkX2ZyZWVfZG1hKCkJCUNTVy5fZnJlZV9kbWEoRkxPUFBZX0RNQSkKICNkZWZpbmUgZmRfZW5hYmxlX2lycSgpCQllbmFibGVfaXJxKEZMT1BQWV9JUlEpCiAjZGVmaW5lIGZkX2Rpc2FibGVfaXJxKCkJZGlzYWJsZV9pcnEoRkxPUFBZX0lSUSkKQEAgLTUyLDY0ICs1Myw2NCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZmxvcHB5X2hhcmRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgc3Q7CisJdW5zaWduZWQgY2hhciBzdDsKIAogI3VuZGVmIFRSQUNFX0ZMUFlfSU5UCiAKICNpZmRlZiBUUkFDRV9GTFBZX0lOVAotCXN0YXRpYyBpbnQgY2FsbHM9MDsKLQlzdGF0aWMgaW50IGJ5dGVzPTA7Ci0Jc3RhdGljIGludCBkbWFfd2FpdD0wOworCXN0YXRpYyBpbnQgY2FsbHM7CisJc3RhdGljIGludCBieXRlczsKKwlzdGF0aWMgaW50IGRtYV93YWl0OwogI2VuZGlmCiAJaWYgKCFkb2luZ19wZG1hKQogCQlyZXR1cm4gZmxvcHB5X2ludGVycnVwdChpcnEsIGRldl9pZCk7CiAKICNpZmRlZiBUUkFDRV9GTFBZX0lOVAotCWlmKCFjYWxscykKKwlpZiAoIWNhbGxzKQogCQlieXRlcyA9IHZpcnR1YWxfZG1hX2NvdW50OwogI2VuZGlmCiAKIAl7Ci0JCXJlZ2lzdGVyIGludCBsY291bnQ7Ci0JCXJlZ2lzdGVyIGNoYXIgKmxwdHI7CisJCWludCBsY291bnQ7CisJCWNoYXIgKmxwdHI7CiAKIAkJc3QgPSAxOwotCQlmb3IobGNvdW50PXZpcnR1YWxfZG1hX2NvdW50LCBscHRyPXZpcnR1YWxfZG1hX2FkZHI7Ci0JCSAgICBsY291bnQ7IGxjb3VudC0tLCBscHRyKyspIHsKLQkJCXN0PWluYih2aXJ0dWFsX2RtYV9wb3J0KzQpICYgMHhhMCA7Ci0JCQlpZihzdCAhPSAweGEwKQorCQlmb3IgKGxjb3VudCA9IHZpcnR1YWxfZG1hX2NvdW50LCBscHRyID0gdmlydHVhbF9kbWFfYWRkcjsKKwkJICAgICBsY291bnQ7IGxjb3VudC0tLCBscHRyKyspIHsKKwkJCXN0ID0gaW5iKHZpcnR1YWxfZG1hX3BvcnQgKyA0KSAmIDB4YTA7CisJCQlpZiAoc3QgIT0gMHhhMCkKIAkJCQlicmVhazsKLQkJCWlmKHZpcnR1YWxfZG1hX21vZGUpCi0JCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0KzUpOworCQkJaWYgKHZpcnR1YWxfZG1hX21vZGUpCisJCQkJb3V0Yl9wKCpscHRyLCB2aXJ0dWFsX2RtYV9wb3J0ICsgNSk7CiAJCQllbHNlCi0JCQkJKmxwdHIgPSBpbmJfcCh2aXJ0dWFsX2RtYV9wb3J0KzUpOworCQkJCSpscHRyID0gaW5iX3AodmlydHVhbF9kbWFfcG9ydCArIDUpOwogCQl9CiAJCXZpcnR1YWxfZG1hX2NvdW50ID0gbGNvdW50OwogCQl2aXJ0dWFsX2RtYV9hZGRyID0gbHB0cjsKLQkJc3QgPSBpbmIodmlydHVhbF9kbWFfcG9ydCs0KTsKKwkJc3QgPSBpbmIodmlydHVhbF9kbWFfcG9ydCArIDQpOwogCX0KIAogI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCiAJY2FsbHMrKzsKICNlbmRpZgotCWlmKHN0ID09IDB4MjApCisJaWYgKHN0ID09IDB4MjApCiAJCXJldHVybiBJUlFfSEFORExFRDsKLQlpZighKHN0ICYgMHgyMCkpIHsKKwlpZiAoIShzdCAmIDB4MjApKSB7CiAJCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7Ci0JCXZpcnR1YWxfZG1hX2NvdW50PTA7CisJCXZpcnR1YWxfZG1hX2NvdW50ID0gMDsKICNpZmRlZiBUUkFDRV9GTFBZX0lOVAogCQlwcmludGsoImNvdW50PSV4LCByZXNpZHVlPSV4IGNhbGxzPSVkIGJ5dGVzPSVkIGRtYV93YWl0PSVkXG4iLAogCQkgICAgICAgdmlydHVhbF9kbWFfY291bnQsIHZpcnR1YWxfZG1hX3Jlc2lkdWUsIGNhbGxzLCBieXRlcywKIAkJICAgICAgIGRtYV93YWl0KTsKIAkJY2FsbHMgPSAwOwotCQlkbWFfd2FpdD0wOworCQlkbWFfd2FpdCA9IDA7CiAjZW5kaWYKIAkJZG9pbmdfcGRtYSA9IDA7CiAJCWZsb3BweV9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogI2lmZGVmIFRSQUNFX0ZMUFlfSU5UCi0JaWYoIXZpcnR1YWxfZG1hX2NvdW50KQorCWlmICghdmlydHVhbF9kbWFfY291bnQpCiAJCWRtYV93YWl0Kys7CiAjZW5kaWYKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMTcsMTQgKzExOCwxNCBAQAogCiBzdGF0aWMgdm9pZCBmZF9kaXNhYmxlX2RtYSh2b2lkKQogewotCWlmKCEgKGNhbl91c2VfdmlydHVhbF9kbWEgJiAxKSkKKwlpZiAoIShjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMSkpCiAJCWRpc2FibGVfZG1hKEZMT1BQWV9ETUEpOwogCWRvaW5nX3BkbWEgPSAwOwogCXZpcnR1YWxfZG1hX3Jlc2lkdWUgKz0gdmlydHVhbF9kbWFfY291bnQ7Ci0JdmlydHVhbF9kbWFfY291bnQ9MDsKKwl2aXJ0dWFsX2RtYV9jb3VudCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgdmRtYV9yZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpCitzdGF0aWMgaW50IHZkbWFfcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDIsNyArMTQzLDcgQEAKIAogc3RhdGljIGludCBmZF9yZXF1ZXN0X2lycSh2b2lkKQogewotCWlmKGNhbl91c2VfdmlydHVhbF9kbWEpCisJaWYgKGNhbl91c2VfdmlydHVhbF9kbWEpCiAJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCwKIAkJCQkgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCk7CiAJZWxzZQpAQCAtMTUyLDEzICsxNTMsMTMgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX05PUkVUUlksZ2V0X29yZGVyKHNpemUpKTsKKwlyZXR1cm4gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfTk9SRVRSWSwgZ2V0X29yZGVyKHNpemUpKTsKIH0KIAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKSB2bWFsbG9jKHNpemUpOworCXJldHVybiAodW5zaWduZWQgbG9uZyl2bWFsbG9jKHNpemUpOwogCiB9CiAKQEAgLTE2Niw3ICsxNjcsNyBAQAogCiBzdGF0aWMgdm9pZCBfZmRfZG1hX21lbV9mcmVlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCWlmKCh1bnNpZ25lZCBsb25nKSBhZGRyID49ICh1bnNpZ25lZCBsb25nKSBoaWdoX21lbW9yeSkKKwlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkKIAkJdmZyZWUoKHZvaWQgKilhZGRyKTsKIAllbHNlCiAJCWZyZWVfcGFnZXMoYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKQEAgLTE3NiwxMCArMTc3LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9mZF9jaG9zZV9kbWFfbW9kZShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JaWYoY2FuX3VzZV92aXJ0dWFsX2RtYSA9PSAyKSB7Ci0JCWlmKCh1bnNpZ25lZCBsb25nKSBhZGRyID49ICh1bnNpZ25lZCBsb25nKSBoaWdoX21lbW9yeSB8fAotCQkgICBpc2FfdmlydF90b19idXMoYWRkcikgPj0gMHgxMDAwMDAwIHx8Ci0JCSAgIF9DUk9TU182NEtCKGFkZHIsIHNpemUsIDApKQorCWlmIChjYW5fdXNlX3ZpcnR1YWxfZG1hID09IDIpIHsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKWFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgfHwKKwkJICAgIGlzYV92aXJ0X3RvX2J1cyhhZGRyKSA+PSAweDEwMDAwMDAgfHwKKwkJICAgIF9DUk9TU182NEtCKGFkZHIsIHNpemUsIDApKQogCQkJdXNlX3ZpcnR1YWxfZG1hID0gMTsKIAkJZWxzZQogCQkJdXNlX3ZpcnR1YWxfZG1hID0gMDsKQEAgLTE5NSw3ICsxOTYsNyBAQAogewogCWRvaW5nX3BkbWEgPSAxOwogCXZpcnR1YWxfZG1hX3BvcnQgPSBpbzsKLQl2aXJ0dWFsX2RtYV9tb2RlID0gKG1vZGUgID09IERNQV9NT0RFX1dSSVRFKTsKKwl2aXJ0dWFsX2RtYV9tb2RlID0gKG1vZGUgPT0gRE1BX01PREVfV1JJVEUpOwogCXZpcnR1YWxfZG1hX2FkZHIgPSBhZGRyOwogCXZpcnR1YWxfZG1hX2NvdW50ID0gc2l6ZTsKIAl2aXJ0dWFsX2RtYV9yZXNpZHVlID0gMDsKQEAgLTIxMywxOCArMjE0LDE4IEBACiAJLyogYWN0dWFsLCBwaHlzaWNhbCBETUEgKi8KIAlkb2luZ19wZG1hID0gMDsKIAljbGVhcl9kbWFfZmYoRkxPUFBZX0RNQSk7Ci0Jc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsbW9kZSk7Ci0Jc2V0X2RtYV9hZGRyKEZMT1BQWV9ETUEsaXNhX3ZpcnRfdG9fYnVzKGFkZHIpKTsKLQlzZXRfZG1hX2NvdW50KEZMT1BQWV9ETUEsc2l6ZSk7CisJc2V0X2RtYV9tb2RlKEZMT1BQWV9ETUEsIG1vZGUpOworCXNldF9kbWFfYWRkcihGTE9QUFlfRE1BLCBpc2FfdmlydF90b19idXMoYWRkcikpOworCXNldF9kbWFfY291bnQoRkxPUFBZX0RNQSwgc2l6ZSk7CiAJZW5hYmxlX2RtYShGTE9QUFlfRE1BKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBmZF9yb3V0aW5lX2wgewotCWludCAoKl9yZXF1ZXN0X2RtYSkodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKKwlpbnQgKCpfcmVxdWVzdF9kbWEpKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqZGV2aWNlX2lkKTsKIAl2b2lkICgqX2ZyZWVfZG1hKSh1bnNpZ25lZCBpbnQgZG1hbnIpOwogCWludCAoKl9nZXRfZG1hX3Jlc2lkdWUpKHVuc2lnbmVkIGludCBkdW1teSk7Ci0JdW5zaWduZWQgbG9uZyAoKl9kbWFfbWVtX2FsbG9jKSAodW5zaWduZWQgbG9uZyBzaXplKTsKKwl1bnNpZ25lZCBsb25nICgqX2RtYV9tZW1fYWxsb2MpKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAJaW50ICgqX2RtYV9zZXR1cCkoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKTsKIH0gZmRfcm91dGluZVtdID0gewogCXsKQEAgLTI1Miw3ICsyNTMsOCBAQAogICogaXMgbmVlZGVkIHRvIHByZXZlbnQgY29ycnVwdGVkIENNT1MgUkFNIGluIGNhc2UgImluc21vZCBmbG9wcHkiCiAgKiBjb2luY2lkZXMgd2l0aCBhbm90aGVyIHJ0YyBDTU9TIHVzZXIuCQlQYXVsIEcuCiAgKi8KLSNkZWZpbmUgRkxPUFBZMF9UWVBFCSh7CQkJCVwKKyNkZWZpbmUgRkxPUFBZMF9UWVBFCQkJCQlcCisoewkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJXAogCXVuc2lnbmVkIGNoYXIgdmFsOwkJCQlcCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CQlcCkBAIC0yNjEsNyArMjYzLDggQEAKIAl2YWw7CQkJCQkJXAogfSkKIAotI2RlZmluZSBGTE9QUFkxX1RZUEUJKHsJCQkJXAorI2RlZmluZSBGTE9QUFkxX1RZUEUJCQkJCVwKKyh7CQkJCQkJCVwKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQlcCiAJdW5zaWduZWQgY2hhciB2YWw7CQkJCVwKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9mdXRleC5oIGIvaW5jbHVkZS9hc20teDg2L2Z1dGV4LmgKaW5kZXggY2Q5Zjg5NC4uYWMwZmJmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2Z1dGV4LmgKQEAgLTEyLDM1ICsxMiwzMiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AxKGluc24sIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpCVwKLSAgX19hc21fXyBfX3ZvbGF0aWxlKAkJCQkJCVwKLSIxOgkiIGluc24gIlxuIgkJCQkJCVwKLSIyOgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4JCQkJXAotMzoJbW92CSUzLCAlMVxuCQkJCQlcCi0Jam1wCTJiXG4JCQkJCQlcCi0JLnByZXZpb3VzXG4iCQkJCQkJXAotCV9BU01fRVhUQUJMRSgxYiwzYikJCQkJCVwKLQk6ICI9ciIgKG9sZHZhbCksICI9ciIgKHJldCksICIrbSIgKCp1YWRkcikJCVwKLQk6ICJpIiAoLUVGQVVMVCksICIwIiAob3BhcmcpLCAiMSIgKDApKQorCWFzbSB2b2xhdGlsZSgiMTpcdCIgaW5zbiAiXG4iCQkJCVwKKwkJICAgICAiMjpcdC5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCVwKKwkJICAgICAiMzpcdG1vdlx0JTMsICUxXG4iCQkJXAorCQkgICAgICJcdGptcFx0MmJcbiIJCQkJXAorCQkgICAgICJcdC5wcmV2aW91c1xuIgkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikJCQlcCisJCSAgICAgOiAiPXIiIChvbGR2YWwpLCAiPXIiIChyZXQpLCAiK20iICgqdWFkZHIpCVwKKwkJICAgICA6ICJpIiAoLUVGQVVMVCksICIwIiAob3BhcmcpLCAiMSIgKDApKQogCiAjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX29wMihpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKQlcCi0gIF9fYXNtX18gX192b2xhdGlsZSgJCQkJCQlcCi0iMToJbW92bAklMiwgJTBcbgkJCQkJXAotCW1vdmwJJTAsICUzXG4iCQkJCQlcCi0JaW5zbiAiXG4iCQkJCQkJXAotIjI6CWxvY2s7IGNtcHhjaGdsICUzLCAlMlxuCQkJCQlcCi0Jam56CTFiXG4JCQkJCQlcCi0zOgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4JCQkJXAotNDoJbW92CSU1LCAlMVxuCQkJCQlcCi0Jam1wCTNiXG4JCQkJCQlcCi0JLnByZXZpb3VzXG4iCQkJCQkJXAotCV9BU01fRVhUQUJMRSgxYiw0YikJCQkJCVwKLQlfQVNNX0VYVEFCTEUoMmIsNGIpCQkJCQlcCi0JOiAiPSZhIiAob2xkdmFsKSwgIj0mciIgKHJldCksICIrbSIgKCp1YWRkciksCQlcCi0JICAiPSZyIiAodGVtKQkJCQkJCVwKLQk6ICJyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpLCAiMSIgKDApKQorCWFzbSB2b2xhdGlsZSgiMTpcdG1vdmwJJTIsICUwXG4iCQkJXAorCQkgICAgICJcdG1vdmxcdCUwLCAlM1xuIgkJCQlcCisJCSAgICAgIlx0IiBpbnNuICJcbiIJCQkJXAorCQkgICAgICIyOlx0bG9jazsgY21weGNoZ2wgJTMsICUyXG4iCQlcCisJCSAgICAgIlx0am56XHQxYlxuIgkJCQlcCisJCSAgICAgIjM6XHQuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCisJCSAgICAgIjQ6XHRtb3ZcdCU1LCAlMVxuIgkJCVwKKwkJICAgICAiXHRqbXBcdDNiXG4iCQkJCVwKKwkJICAgICAiXHQucHJldmlvdXNcbiIJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgNGIpCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgyYiwgNGIpCQkJXAorCQkgICAgIDogIj0mYSIgKG9sZHZhbCksICI9JnIiIChyZXQpLAkJXAorCQkgICAgICAgIittIiAoKnVhZGRyKSwgIj0mciIgKHRlbSkJCVwKKwkJICAgICA6ICJyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpLCAiMSIgKDApKQogCi1zdGF0aWMgaW5saW5lIGludAotZnV0ZXhfYXRvbWljX29wX2ludXNlcihpbnQgZW5jb2RlZF9vcCwgaW50IF9fdXNlciAqdWFkZHIpCitzdGF0aWMgaW5saW5lIGludCBmdXRleF9hdG9taWNfb3BfaW51c2VyKGludCBlbmNvZGVkX29wLCBpbnQgX191c2VyICp1YWRkcikKIHsKIAlpbnQgb3AgPSAoZW5jb2RlZF9vcCA+PiAyOCkgJiA3OwogCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKQEAgLTg3LDM0ICs4NCw1MyBAQAogCiAJaWYgKCFyZXQpIHsKIAkJc3dpdGNoIChjbXApIHsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6IHJldCA9IChvbGR2YWwgPT0gY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX05FOiByZXQgPSAob2xkdmFsICE9IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9MVDogcmV0ID0gKG9sZHZhbCA8IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9HRTogcmV0ID0gKG9sZHZhbCA+PSBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfTEU6IHJldCA9IChvbGR2YWwgPD0gY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0dUOiByZXQgPSAob2xkdmFsID4gY21wYXJnKTsgYnJlYWs7Ci0JCWRlZmF1bHQ6IHJldCA9IC1FTk9TWVM7CisJCWNhc2UgRlVURVhfT1BfQ01QX0VROgorCQkJcmV0ID0gKG9sZHZhbCA9PSBjbXBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX05FOgorCQkJcmV0ID0gKG9sZHZhbCAhPSBjbXBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xUOgorCQkJcmV0ID0gKG9sZHZhbCA8IGNtcGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR0U6CisJCQlyZXQgPSAob2xkdmFsID49IGNtcGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTEU6CisJCQlyZXQgPSAob2xkdmFsIDw9IGNtcGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR1Q6CisJCQlyZXQgPSAob2xkdmFsID4gY21wYXJnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT1NZUzsKIAkJfQogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludAotZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoaW50IF9fdXNlciAqdWFkZHIsIGludCBvbGR2YWwsIGludCBuZXd2YWwpCitzdGF0aWMgaW5saW5lIGludCBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyhpbnQgX191c2VyICp1YWRkciwgaW50IG9sZHZhbCwKKwkJCQkJCWludCBuZXd2YWwpCiB7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmICFkZWZpbmVkKENPTkZJR19YODZfQlNXQVApCisJLyogUmVhbCBpMzg2IG1hY2hpbmVzIGhhdmUgbm8gY21weGNoZyBpbnN0cnVjdGlvbiAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAzKQorCQlyZXR1cm4gLUVOT1NZUzsKKyNlbmRpZgorCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiMToJbG9jazsgY21weGNoZ2wgJTMsICUxCQkJXG4iCi0JCSIyOgkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIgkJCVxuIgotCQkiMzoJbW92ICAgICAlMiwgJTAJCQkJXG4iCi0JCSIJam1wICAgICAyYgkJCQlcbiIKLQkJIgkucHJldmlvdXMJCQkJXG4iCi0JCV9BU01fRVhUQUJMRSgxYiwzYikKLQkJOiAiPWEiIChvbGR2YWwpLCAiK20iICgqdWFkZHIpCi0JCTogImkiICgtRUZBVUxUKSwgInIiIChuZXd2YWwpLCAiMCIgKG9sZHZhbCkKLQkJOiAibWVtb3J5IgorCWFzbSB2b2xhdGlsZSgiMTpcdGxvY2s7IGNtcHhjaGdsICUzLCAlMVxuIgorCQkgICAgICIyOlx0LnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKKwkJICAgICAiMzpcdG1vdiAgICAgJTIsICUwXG4iCisJCSAgICAgIlx0am1wICAgICAyYlxuIgorCQkgICAgICJcdC5wcmV2aW91c1xuIgorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCisJCSAgICAgOiAiPWEiIChvbGR2YWwpLCAiK20iICgqdWFkZHIpCisJCSAgICAgOiAiaSIgKC1FRkFVTFQpLCAiciIgKG5ld3ZhbCksICIwIiAob2xkdmFsKQorCQkgICAgIDogIm1lbW9yeSIKIAkpOwogCiAJcmV0dXJuIG9sZHZhbDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY18zMi5oCmluZGV4IDMzZTNmZmUuLmIwMmVhNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfMzIuaApAQCAtMTQsMjMgKzE0LDIyIEBACiAgKiBDb3B5cmlnaHQgMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKi8KIAotc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb247CiBzdHJ1Y3QgbXBjX2NvbmZpZ19idXM7CiBzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlOwogc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yOwogCi1zdHJ1Y3QgZ2VuYXBpYyB7IAotCWNoYXIgKm5hbWU7IAotCWludCAoKnByb2JlKSh2b2lkKTsgCitzdHJ1Y3QgZ2VuYXBpYyB7CisJY2hhciAqbmFtZTsKKwlpbnQgKCpwcm9iZSkodm9pZCk7CiAKIAlpbnQgKCphcGljX2lkX3JlZ2lzdGVyZWQpKHZvaWQpOwogCWNwdW1hc2tfdCAoKnRhcmdldF9jcHVzKSh2b2lkKTsKIAlpbnQgaW50X2RlbGl2ZXJ5X21vZGU7Ci0JaW50IGludF9kZXN0X21vZGU7IAorCWludCBpbnRfZGVzdF9tb2RlOwogCWludCBFU1JfRElTQUJMRTsKIAlpbnQgYXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsOwogCXVuc2lnbmVkIGxvbmcgKCpjaGVja19hcGljaWRfdXNlZCkocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpOwotCXVuc2lnbmVkIGxvbmcgKCpjaGVja19hcGljaWRfcHJlc2VudCkoaW50IGFwaWNpZCk7IAorCXVuc2lnbmVkIGxvbmcgKCpjaGVja19hcGljaWRfcHJlc2VudCkoaW50IGFwaWNpZCk7CiAJaW50IG5vX2JhbGFuY2VfaXJxOwogCWludCBub19pb2FwaWNfY2hlY2s7CiAJdm9pZCAoKmluaXRfYXBpY19sZHIpKHZvaWQpOwpAQCAtMzgsMjggKzM3LDIxIEBACiAKIAl2b2lkICgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKIAlpbnQgKCptdWx0aV90aW1lcl9jaGVjaykoaW50IGFwaWMsIGludCBpcnEpOwotCWludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOyAKKwlpbnQgKCphcGljaWRfdG9fbm9kZSkoaW50IGxvZ2ljYWxfYXBpY2lkKTsKIAlpbnQgKCpjcHVfdG9fbG9naWNhbF9hcGljaWQpKGludCBjcHUpOwogCWludCAoKmNwdV9wcmVzZW50X3RvX2FwaWNpZCkoaW50IG1wc19jcHUpOwogCXBoeXNpZF9tYXNrX3QgKCphcGljaWRfdG9fY3B1X3ByZXNlbnQpKGludCBwaHlzX2FwaWNpZCk7Ci0JaW50ICgqbXBjX2FwaWNfaWQpKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSwgCi0JCQkgICBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdCk7IAotCXZvaWQgKCpzZXR1cF9wb3J0aW9fcmVtYXApKHZvaWQpOyAKKwl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKIAlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKIAl2b2lkICgqZW5hYmxlX2FwaWNfbW9kZSkodm9pZCk7CiAJdTMyICgqcGh5c19wa2dfaWQpKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKIAogCS8qIG1wcGFyc2UgKi8KLQl2b2lkICgqbXBjX29lbV9idXNfaW5mbykoc3RydWN0IG1wY19jb25maWdfYnVzICosIGNoYXIgKiwgCi0JCQkJIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICopOwotCXZvaWQgKCptcGNfb2VtX3BjaV9idXMpKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqLCAKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqKTsgCi0KIAkvKiBXaGVuIG9uZSBvZiB0aGUgbmV4dCB0d28gaG9va3MgcmV0dXJucyAxIHRoZSBnZW5hcGljCi0JICAgaXMgc3dpdGNoZWQgdG8gdGhpcy4gRXNzZW50aWFsbHkgdGhleSBhcmUgYWRkaXRpb25hbCBwcm9iZSAKKwkgICBpcyBzd2l0Y2hlZCB0byB0aGlzLiBFc3NlbnRpYWxseSB0aGV5IGFyZSBhZGRpdGlvbmFsIHByb2JlCiAJICAgZnVuY3Rpb25zLiAqLwotCWludCAoKm1wc19vZW1fY2hlY2spKHN0cnVjdCBtcF9jb25maWdfdGFibGUgKm1wYywgY2hhciAqb2VtLCAKLQkJCSAgICAgIGNoYXIgKnByb2R1Y3RpZCk7CisJaW50ICgqbXBzX29lbV9jaGVjaykoc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sCisJCQkgICAgIGNoYXIgKnByb2R1Y3RpZCk7CiAJaW50ICgqYWNwaV9tYWR0X29lbV9jaGVjaykoY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOwogCiAJdW5zaWduZWQgKCpnZXRfYXBpY19pZCkodW5zaWduZWQgbG9uZyB4KTsKQEAgLTcyLDcgKzY0LDcgQEAKIAl2b2lkICgqc2VuZF9JUElfYWxsYnV0c2VsZikoaW50IHZlY3Rvcik7CiAJdm9pZCAoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7CiAjZW5kaWYKLX07IAorfTsKIAogI2RlZmluZSBBUElDRlVOQyh4KSAueCA9IHgsCiAKQEAgLTg1LDQzICs3Nyw0NyBAQAogI2RlZmluZSBJUElGVU5DKHgpCiAjZW5kaWYKIAotI2RlZmluZSBBUElDX0lOSVQoYW5hbWUsIGFwcm9iZSkgeyBcCi0JLm5hbWUgPSBhbmFtZSwgXAotCS5wcm9iZSA9IGFwcm9iZSwgXAotCS5pbnRfZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFLCBcCi0JLmludF9kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFLCBcCi0JLm5vX2JhbGFuY2VfaXJxID0gTk9fQkFMQU5DRV9JUlEsIFwKLQkuRVNSX0RJU0FCTEUgPSBlc3JfZGlzYWJsZSwgXAotCS5hcGljX2Rlc3RpbmF0aW9uX2xvZ2ljYWwgPSBBUElDX0RFU1RfTE9HSUNBTCwgXAotCUFQSUNGVU5DKGFwaWNfaWRfcmVnaXN0ZXJlZCkgXAotCUFQSUNGVU5DKHRhcmdldF9jcHVzKSBcCi0JQVBJQ0ZVTkMoY2hlY2tfYXBpY2lkX3VzZWQpIFwKLQlBUElDRlVOQyhjaGVja19hcGljaWRfcHJlc2VudCkgXAotCUFQSUNGVU5DKGluaXRfYXBpY19sZHIpIFwKLQlBUElDRlVOQyhpb2FwaWNfcGh5c19pZF9tYXApIFwKLQlBUElDRlVOQyhzZXR1cF9hcGljX3JvdXRpbmcpIFwKLQlBUElDRlVOQyhtdWx0aV90aW1lcl9jaGVjaykgXAotCUFQSUNGVU5DKGFwaWNpZF90b19ub2RlKSBcCi0JQVBJQ0ZVTkMoY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKSBcCi0JQVBJQ0ZVTkMoY3B1X3ByZXNlbnRfdG9fYXBpY2lkKSBcCi0JQVBJQ0ZVTkMoYXBpY2lkX3RvX2NwdV9wcmVzZW50KSBcCi0JQVBJQ0ZVTkMobXBjX2FwaWNfaWQpIFwKLQlBUElDRlVOQyhzZXR1cF9wb3J0aW9fcmVtYXApIFwKLQlBUElDRlVOQyhjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KSBcCi0JQVBJQ0ZVTkMobXBjX29lbV9idXNfaW5mbykgXAotCUFQSUNGVU5DKG1wY19vZW1fcGNpX2J1cykgXAotCUFQSUNGVU5DKG1wc19vZW1fY2hlY2spIFwKLQlBUElDRlVOQyhnZXRfYXBpY19pZCkgXAotCS5hcGljX2lkX21hc2sgPSBBUElDX0lEX01BU0ssIFwKLQlBUElDRlVOQyhjcHVfbWFza190b19hcGljaWQpIFwKLQlBUElDRlVOQyhhY3BpX21hZHRfb2VtX2NoZWNrKSBcCi0JSVBJRlVOQyhzZW5kX0lQSV9tYXNrKSBcCi0JSVBJRlVOQyhzZW5kX0lQSV9hbGxidXRzZWxmKSBcCi0JSVBJRlVOQyhzZW5kX0lQSV9hbGwpIFwKLQlBUElDRlVOQyhlbmFibGVfYXBpY19tb2RlKSBcCi0JQVBJQ0ZVTkMocGh5c19wa2dfaWQpIFwKLQl9CisjZGVmaW5lIEFQSUNfSU5JVChhbmFtZSwgYXByb2JlKQkJCVwKK3sJCQkJCQkJXAorCS5uYW1lID0gYW5hbWUsCQkJCQlcCisJLnByb2JlID0gYXByb2JlLAkJCQlcCisJLmludF9kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREUsCQlcCisJLmludF9kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFLAkJCVwKKwkubm9fYmFsYW5jZV9pcnEgPSBOT19CQUxBTkNFX0lSUSwJCVwKKwkuRVNSX0RJU0FCTEUgPSBlc3JfZGlzYWJsZSwJCQlcCisJLmFwaWNfZGVzdGluYXRpb25fbG9naWNhbCA9IEFQSUNfREVTVF9MT0dJQ0FMLAlcCisJQVBJQ0ZVTkMoYXBpY19pZF9yZWdpc3RlcmVkKQkJCVwKKwlBUElDRlVOQyh0YXJnZXRfY3B1cykJCQkJXAorCUFQSUNGVU5DKGNoZWNrX2FwaWNpZF91c2VkKQkJCVwKKwlBUElDRlVOQyhjaGVja19hcGljaWRfcHJlc2VudCkJCQlcCisJQVBJQ0ZVTkMoaW5pdF9hcGljX2xkcikJCQkJXAorCUFQSUNGVU5DKGlvYXBpY19waHlzX2lkX21hcCkJCQlcCisJQVBJQ0ZVTkMoc2V0dXBfYXBpY19yb3V0aW5nKQkJCVwKKwlBUElDRlVOQyhtdWx0aV90aW1lcl9jaGVjaykJCQlcCisJQVBJQ0ZVTkMoYXBpY2lkX3RvX25vZGUpCQkJXAorCUFQSUNGVU5DKGNwdV90b19sb2dpY2FsX2FwaWNpZCkJCQlcCisJQVBJQ0ZVTkMoY3B1X3ByZXNlbnRfdG9fYXBpY2lkKQkJCVwKKwlBUElDRlVOQyhhcGljaWRfdG9fY3B1X3ByZXNlbnQpCQkJXAorCUFQSUNGVU5DKHNldHVwX3BvcnRpb19yZW1hcCkJCQlcCisJQVBJQ0ZVTkMoY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkJCVwKKwlBUElDRlVOQyhtcHNfb2VtX2NoZWNrKQkJCQlcCisJQVBJQ0ZVTkMoZ2V0X2FwaWNfaWQpCQkJCVwKKwkuYXBpY19pZF9tYXNrID0gQVBJQ19JRF9NQVNLLAkJCVwKKwlBUElDRlVOQyhjcHVfbWFza190b19hcGljaWQpCQkJXAorCUFQSUNGVU5DKGFjcGlfbWFkdF9vZW1fY2hlY2spCQkJXAorCUlQSUZVTkMoc2VuZF9JUElfbWFzaykJCQkJXAorCUlQSUZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZikJCQlcCisJSVBJRlVOQyhzZW5kX0lQSV9hbGwpCQkJCVwKKwlBUElDRlVOQyhlbmFibGVfYXBpY19tb2RlKQkJCVwKKwlBUElDRlVOQyhwaHlzX3BrZ19pZCkJCQkJXAorfQogCiBleHRlcm4gc3RydWN0IGdlbmFwaWMgKmdlbmFwaWM7CiAKK2VudW0gdXZfc3lzdGVtX3R5cGUge1VWX05PTkUsIFVWX0xFR0FDWV9BUElDLCBVVl9YMkFQSUMsIFVWX05PTl9VTklRVUVfQVBJQ307CisjZGVmaW5lIGdldF91dl9zeXN0ZW1fdHlwZSgpCQlVVl9OT05FCisjZGVmaW5lIGlzX3V2X3N5c3RlbSgpCQkJMAorI2RlZmluZSB1dl93YWtldXBfc2Vjb25kYXJ5KGEsIGIpCTEKKworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY182NC5oCmluZGV4IGQ3ZTUxNmMuLjFkZTkzMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfNjQuaApAQCAtMzMsNSArMzMsMTUgQEAKIAogZXh0ZXJuIHN0cnVjdCBnZW5hcGljIGFwaWNfZmxhdDsKIGV4dGVybiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3BoeXNmbGF0OworZXh0ZXJuIGludCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKiwgY2hhciAqKTsKKworZW51bSB1dl9zeXN0ZW1fdHlwZSB7VVZfTk9ORSwgVVZfTEVHQUNZX0FQSUMsIFVWX1gyQVBJQywgVVZfTk9OX1VOSVFVRV9BUElDfTsKK2V4dGVybiBlbnVtIHV2X3N5c3RlbV90eXBlIGdldF91dl9zeXN0ZW1fdHlwZSh2b2lkKTsKK2V4dGVybiBpbnQgaXNfdXZfc3lzdGVtKHZvaWQpOworCitleHRlcm4gc3RydWN0IGdlbmFwaWMgYXBpY194MmFwaWNfdXZfeDsKK0RFQ0xBUkVfUEVSX0NQVShpbnQsIHgyYXBpY19leHRyYV9iaXRzKTsKK2V4dGVybiB2b2lkIHV2X2NwdV9pbml0KHZvaWQpOworZXh0ZXJuIGludCB1dl93YWtldXBfc2Vjb25kYXJ5KGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgaW50IHN0YXJ0X3JpcCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2dlb2RlLmggYi9pbmNsdWRlL2FzbS14ODYvZ2VvZGUuaAppbmRleCA5ZTcyODAwLi45ODcwY2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZ2VvZGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZ2VvZGUuaApAQCAtMTY3LDcgKzE2Nyw3IEBACiAvKiBNRkdQVHMgKi8KIAogI2RlZmluZSBNRkdQVF9NQVhfVElNRVJTCTgKLSNkZWZpbmUgTUZHUFRfVElNRVJfQU5ZCQktMQorI2RlZmluZSBNRkdQVF9USU1FUl9BTlkJCSgtMSkKIAogI2RlZmluZSBNRkdQVF9ET01BSU5fV09SS0lORwkxCiAjZGVmaW5lIE1GR1BUX0RPTUFJTl9TVEFOREJZCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS14ODYvaGlnaG1lbS5oCmluZGV4IDQ3OTc2N2MuLmUxNTNmM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2hpZ2htZW0uaApAQCAtOCw3ICs4LDcgQEAKICAqCQkgICAgICBHZXJoYXJkLldpY2hlcnRAcGRiLnNpZW1lbnMuZGUKICAqCiAgKgotICogUmVkZXNpZ25lZCB0aGUgeDg2IDMyLWJpdCBWTSBhcmNoaXRlY3R1cmUgdG8gZGVhbCB3aXRoIAorICogUmVkZXNpZ25lZCB0aGUgeDg2IDMyLWJpdCBWTSBhcmNoaXRlY3R1cmUgdG8gZGVhbCB3aXRoCiAgKiB1cCB0byAxNiBUZXJhYnl0ZSBwaHlzaWNhbCBtZW1vcnkuIFdpdGggY3VycmVudCB4ODYgQ1BVcwogICogd2Ugbm93IHN1cHBvcnQgdXAgdG8gNjQgR2lnYWJ5dGVzIHBoeXNpY2FsIFJBTS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaHdfaXJxXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvaHdfaXJxXzY0LmgKaW5kZXggMzEyYTU4ZC4uMDA2MmVmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2h3X2lycV82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9od19pcnFfNjQuaApAQCAtMzYsNyArMzYsNyBAQAogICogY2xlYW51cCBhZnRlciBpcnEgbWlncmF0aW9uLgogICovCiAjZGVmaW5lIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SCUZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgotIAorCiAvKgogICogVmVjdG9ycyAweDMwLTB4M2YgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgogICovCkBAIC0xNTksMTMgKzE1OSwxMiBAQAogICoJU01QIGhhcyBhIGZldyBzcGVjaWFsIGludGVycnVwdHMgZm9yIElQSSBtZXNzYWdlcwogICovCiAKLSNkZWZpbmUgQlVJTERfSVJRKG5yKSBcCi1hc21saW5rYWdlIHZvaWQgSVJRX05BTUUobnIpOyBcCi1fX2FzbV9fKCBcCi0iXG4ucDJhbGlnblxuIiBcCi0iSVJRIiAjbnIgIl9pbnRlcnJ1cHQ6XG5cdCIgXAotCSJwdXNoICR+KCIgI25yICIpIDsgIiBcCi0JImptcCBjb21tb25faW50ZXJydXB0Iik7CisjZGVmaW5lIEJVSUxEX0lSUShucikJCQkJXAorCWFzbWxpbmthZ2Ugdm9pZCBJUlFfTkFNRShucik7CQlcCisJYXNtKCJcbi5wMmFsaWduXG4iCQkJXAorCSAgICAiSVJRIiAjbnIgIl9pbnRlcnJ1cHQ6XG5cdCIJCVwKKwkgICAgInB1c2ggJH4oIiAjbnIgIikgOyAiCQlcCisJICAgICJqbXAgY29tbW9uX2ludGVycnVwdCIpOwogCiAjZGVmaW5lIHBsYXRmb3JtX2xlZ2FjeV9pcnEoaXJxKQkoKGlycSkgPCAxNikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2h5cGVydHJhbnNwb3J0LmggYi9pbmNsdWRlL2FzbS14ODYvaHlwZXJ0cmFuc3BvcnQuaAppbmRleCBjMTZjNmZmLi5kMmJiZDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaHlwZXJ0cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaHlwZXJ0cmFuc3BvcnQuaApAQCAtOCwxMiArOCwxNCBAQAogI2RlZmluZSBIVF9JUlFfTE9XX0JBU0UJCQkweGY4MDAwMDAwCiAKICNkZWZpbmUgSFRfSVJRX0xPV19WRUNUT1JfU0hJRlQJCTE2Ci0jZGVmaW5lICBIVF9JUlFfTE9XX1ZFQ1RPUl9NQVNLCQkweDAwZmYwMDAwCi0jZGVmaW5lICBIVF9JUlFfTE9XX1ZFQ1RPUih2KQkJKCgodikgPDwgSFRfSVJRX0xPV19WRUNUT1JfU0hJRlQpICYgSFRfSVJRX0xPV19WRUNUT1JfTUFTSykKKyNkZWZpbmUgSFRfSVJRX0xPV19WRUNUT1JfTUFTSwkJMHgwMGZmMDAwMAorI2RlZmluZSBIVF9JUlFfTE9XX1ZFQ1RPUih2KQkJCQkJCVwKKwkoKCh2KSA8PCBIVF9JUlFfTE9XX1ZFQ1RPUl9TSElGVCkgJiBIVF9JUlFfTE9XX1ZFQ1RPUl9NQVNLKQogCiAjZGVmaW5lIEhUX0lSUV9MT1dfREVTVF9JRF9TSElGVAk4Ci0jZGVmaW5lICBIVF9JUlFfTE9XX0RFU1RfSURfTUFTSwkweDAwMDBmZjAwCi0jZGVmaW5lICBIVF9JUlFfTE9XX0RFU1RfSUQodikJCSgoKHYpIDw8IEhUX0lSUV9MT1dfREVTVF9JRF9TSElGVCkgJiBIVF9JUlFfTE9XX0RFU1RfSURfTUFTSykKKyNkZWZpbmUgSFRfSVJRX0xPV19ERVNUX0lEX01BU0sJCTB4MDAwMGZmMDAKKyNkZWZpbmUgSFRfSVJRX0xPV19ERVNUX0lEKHYpCQkJCQkJXAorCSgoKHYpIDw8IEhUX0lSUV9MT1dfREVTVF9JRF9TSElGVCkgJiBIVF9JUlFfTE9XX0RFU1RfSURfTUFTSykKIAogI2RlZmluZSBIVF9JUlFfTE9XX0RNX1BIWVNJQ0FMCQkweDAwMDAwMDAKICNkZWZpbmUgSFRfSVJRX0xPV19ETV9MT0dJQ0FMCQkweDAwMDAwNDAKQEAgLTM2LDcgKzM4LDggQEAKIAogCiAjZGVmaW5lIEhUX0lSUV9ISUdIX0RFU1RfSURfU0hJRlQJMAotI2RlZmluZSAgSFRfSVJRX0hJR0hfREVTVF9JRF9NQVNLCTB4MDBmZmZmZmYKLSNkZWZpbmUgIEhUX0lSUV9ISUdIX0RFU1RfSUQodikJCSgoKCh2KSA+PiA4KSA8PCBIVF9JUlFfSElHSF9ERVNUX0lEX1NISUZUKSAmIEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSykKKyNkZWZpbmUgSFRfSVJRX0hJR0hfREVTVF9JRF9NQVNLCTB4MDBmZmZmZmYKKyNkZWZpbmUgSFRfSVJRX0hJR0hfREVTVF9JRCh2KQkJCQkJCVwKKwkoKCgodikgPj4gOCkgPDwgSFRfSVJRX0hJR0hfREVTVF9JRF9TSElGVCkgJiBIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spCiAKICNlbmRpZiAvKiBBU01fSFlQRVJUUkFOU1BPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2kzODcuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pMzg3LmgKaW5kZXggNmIxODk1Yy4uZGEyYWRiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2kzODcuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaTM4Ny5oCkBAIC0yMCwxMCArMjAsMTAgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBleHRlcm4gdm9pZCBmcHVfaW5pdCh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbXhjc3JfZmVhdHVyZV9tYXNrOwogZXh0ZXJuIHZvaWQgbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIG1hdGhfc3RhdGVfcmVzdG9yZSh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfdGhyZWFkX3hzdGF0ZSh2b2lkKTsKIAogZXh0ZXJuIHVzZXJfcmVnc2V0X2FjdGl2ZV9mbiBmcHJlZ3NfYWN0aXZlLCB4ZnByZWdzX2FjdGl2ZTsKIGV4dGVybiB1c2VyX3JlZ3NldF9nZXRfZm4gZnByZWdzX2dldCwgeGZwcmVnc19nZXQsIGZwcmVnc19zb2Z0X2dldDsKQEAgLTQyLDcgKzQyLDcgQEAKIHsKIAlhc20gdm9sYXRpbGUoIjE6IGZ3YWl0XG4iCiAJCSAgICAgIjI6XG4iCi0JCSAgICAgX0FTTV9FWFRBQkxFKDFiLDJiKSk7CisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAyYikpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCByZXN0b3JlX2ZwdV9jaGVja2luZyhzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCkKQEAgLTU1LDcgKzU1LDcgQEAKIAkJICAgICAiMzogIG1vdmwgJC0xLCVbZXJyXVxuIgogCQkgICAgICIgICAgam1wICAyYlxuIgogCQkgICAgICIucHJldmlvdXNcbiIKLQkJICAgICBfQVNNX0VYVEFCTEUoMWIsM2IpCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikKIAkJICAgICA6IFtlcnJdICI9ciIgKGVycikKICNpZiAwIC8qIFNlZSBjb21tZW50IGluIF9fc2F2ZV9pbml0X2ZwdSgpIGJlbG93LiAqLwogCQkgICAgIDogW2Z4XSAiciIgKGZ4KSwgIm0iICgqZngpLCAiMCIgKDApKTsKQEAgLTc3LDExICs3NywxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2ZwdV9zdGF0ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0ICpmeCkKIHsKIAlpZiAodW5saWtlbHkoZngtPnN3ZCAmIFg4N19GU1dfRVMpKQotCQkgYXNtIHZvbGF0aWxlKCJmbmNsZXgiKTsKKwkJYXNtIHZvbGF0aWxlKCJmbmNsZXgiKTsKIAlhbHRlcm5hdGl2ZV9pbnB1dChBU01fTk9QOCBBU01fTk9QMiwKLQkJICAgICAiICAgIGVtbXNcbiIJCS8qIGNsZWFyIHN0YWNrIHRhZ3MgKi8KLQkJICAgICAiICAgIGZpbGRsICUlZ3M6MCIsCS8qIGxvYWQgdG8gY2xlYXIgc3RhdGUgKi8KLQkJICAgICBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyk7CisJCQkgICIgICAgZW1tc1xuIgkJLyogY2xlYXIgc3RhY2sgdGFncyAqLworCQkJICAiICAgIGZpbGRsICUlZ3M6MCIsCS8qIGxvYWQgdG8gY2xlYXIgc3RhdGUgKi8KKwkJCSAgWDg2X0ZFQVRVUkVfRlhTQVZFX0xFQUspOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzYXZlX2kzODdfY2hlY2tpbmcoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBfX3VzZXIgKmZ4KQpAQCAtOTQsMTQgKzk0LDE1IEBACiAJCSAgICAgIjM6ICBtb3ZsICQtMSwlW2Vycl1cbiIKIAkJICAgICAiICAgIGptcCAgMmJcbiIKIAkJICAgICAiLnByZXZpb3VzXG4iCi0JCSAgICAgX0FTTV9FWFRBQkxFKDFiLDNiKQorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCiAJCSAgICAgOiBbZXJyXSAiPXIiIChlcnIpLCAiPW0iICgqZngpCiAjaWYgMCAvKiBTZWUgY29tbWVudCBpbiBfX2Z4c2F2ZV9jbGVhcigpIGJlbG93LiAqLwogCQkgICAgIDogW2Z4XSAiciIgKGZ4KSwgIjAiICgwKSk7CiAjZWxzZQogCQkgICAgIDogW2Z4XSAiY2RhU0RiIiAoZngpLCAiMCIgKDApKTsKICNlbmRpZgotCWlmICh1bmxpa2VseShlcnIpICYmIF9fY2xlYXJfdXNlcihmeCwgc2l6ZW9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QpKSkKKwlpZiAodW5saWtlbHkoZXJyKSAmJgorCSAgICBfX2NsZWFyX3VzZXIoZngsIHNpemVvZihzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0KSkpCiAJCWVyciA9IC1FRkFVTFQ7CiAJLyogTm8gbmVlZCB0byBjbGVhciBoZXJlIGJlY2F1c2UgdGhlIGNhbGxlciBjbGVhcnMgVVNFRF9NQVRIICovCiAJcmV0dXJuIGVycjsKQEAgLTExNywyNCArMTE4LDIyIEBACiAJLyogVXNpbmcgImZ4c2F2ZXEgJTAiIHdvdWxkIGJlIHRoZSBpZGVhbCBjaG9pY2UsIGJ1dCBpcyBvbmx5IHN1cHBvcnRlZAogCSAgIHN0YXJ0aW5nIHdpdGggZ2FzIDIuMTYuICovCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImZ4c2F2ZXEgJTAiCi0JCQkgICAgIDogIj1tIiAodHNrLT50aHJlYWQuaTM4Ny5meHNhdmUpKTsKKwkJCSAgICAgOiAiPW0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSkpOwogI2VsaWYgMAogCS8qIFVzaW5nLCBhcyBhIHdvcmthcm91bmQsIHRoZSBwcm9wZXJseSBwcmVmaXhlZCBmb3JtIGJlbG93IGlzbid0CiAJICAgYWNjZXB0ZWQgYnkgYW55IGJpbnV0aWxzIHZlcnNpb24gc28gZmFyIHJlbGVhc2VkLCBjb21wbGFpbmluZyB0aGF0CiAJICAgdGhlIHNhbWUgdHlwZSBvZiBwcmVmaXggaXMgdXNlZCB0d2ljZSBpZiBhbiBleHRlbmRlZCByZWdpc3RlciBpcwogCSAgIG5lZWRlZCBmb3IgYWRkcmVzc2luZyAoZml4IHN1Ym1pdHRlZCB0byBtYWlubGluZSAyMDA1LTExLTIxKS4gKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmV4NjQvZnhzYXZlICUwIgotCQkJICAgICA6ICI9bSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlKSk7CisJCQkgICAgIDogIj1tIiAodHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUpKTsKICNlbHNlCiAJLyogVGhpcywgaG93ZXZlciwgd2UgY2FuIHdvcmsgYXJvdW5kIGJ5IGZvcmNpbmcgdGhlIGNvbXBpbGVyIHRvIHNlbGVjdAogCSAgIGFuIGFkZHJlc3NpbmcgbW9kZSB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBleHRlbmRlZCByZWdpc3RlcnMuICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInJleDY0L2Z4c2F2ZSAlUDIoJTEpIgotCQkJICAgICA6ICI9bSIgKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlKQotCQkJICAgICA6ICJjZGFTRGIiICh0c2spLAotCQkJCSJpIiAob2Zmc2V0b2YoX190eXBlb2ZfXygqdHNrKSwKLQkJCQkJICAgICAgdGhyZWFkLmkzODcuZnhzYXZlKSkpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXg2NC9meHNhdmUgKCUxKSIKKwkJCSAgICAgOiAiPW0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSkKKwkJCSAgICAgOiAiY2RhU0RiIiAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKSk7CiAjZW5kaWYKLQljbGVhcl9mcHVfc3RhdGUoJnRzay0+dGhyZWFkLmkzODcuZnhzYXZlKTsKKwljbGVhcl9mcHVfc3RhdGUoJnRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKTsKIAl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKIH0KIApAQCAtMTQ4LDcgKzE0Nyw3IEBACiAJaW50IGVyciA9IDA7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0KSAhPQotCQkJc2l6ZW9mKHRzay0+dGhyZWFkLmkzODcuZnhzYXZlKSk7CisJCQlzaXplb2YodHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUpKTsKIAogCWlmICgodW5zaWduZWQgbG9uZylidWYgJSAxNikKIAkJcHJpbnRrKCJzYXZlX2kzODc6IGJhZCBmcHN0YXRlICVwXG4iLCBidWYpOwpAQCAtMTU3LDEyICsxNTYsMTQgQEAKIAkJcmV0dXJuIDA7CiAJY2xlYXJfdXNlZF9tYXRoKCk7IC8qIHRyaWdnZXIgZmluaXQgKi8KIAlpZiAodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19VU0VERlBVKSB7Ci0JCWVyciA9IHNhdmVfaTM4N19jaGVja2luZygoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBfX3VzZXIgKilidWYpOwotCQlpZiAoZXJyKSByZXR1cm4gZXJyOworCQllcnIgPSBzYXZlX2kzODdfY2hlY2tpbmcoKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgX191c2VyICopCisJCQkJCSBidWYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAkJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7CiAJCXN0dHMoKTsKIAl9IGVsc2UgewotCQlpZiAoX19jb3B5X3RvX3VzZXIoYnVmLCAmdHNrLT50aHJlYWQuaTM4Ny5meHNhdmUsCisJCWlmIChfX2NvcHlfdG9fdXNlcihidWYsICZ0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSwKIAkJCQkgICBzaXplb2Yoc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCkpKQogCQkJcmV0dXJuIC0xOwogCX0KQEAgLTE5OSw3ICsyMDAsNyBAQAogCQkibm9wIDsgZnJzdG9yICUxIiwKIAkJImZ4cnN0b3IgJTEiLAogCQlYODZfRkVBVFVSRV9GWFNSLAotCQkibSIgKCh0c2spLT50aHJlYWQuaTM4Ny5meHNhdmUpKTsKKwkJIm0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSkpOwogfQogCiAvKiBXZSBuZWVkIGEgc2FmZSBhZGRyZXNzIHRoYXQgaXMgY2hlYXAgdG8gZmluZCBhbmQgdGhhdCBpcyBhbHJlYWR5CkBAIC0yMjMsOCArMjI0LDggQEAKIAkJImZ4c2F2ZSAlW2Z4XVxuIgogCQkiYnQgJDcsJVtmc3ddIDsgam5jIDFmIDsgZm5jbGV4XG4xOiIsCiAJCVg4Nl9GRUFUVVJFX0ZYU1IsCi0JCVtmeF0gIm0iICh0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZSksCi0JCVtmc3ddICJtIiAodHNrLT50aHJlYWQuaTM4Ny5meHNhdmUuc3dkKSA6ICJtZW1vcnkiKTsKKwkJW2Z4XSAibSIgKHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlKSwKKwkJW2Zzd10gIm0iICh0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZS5zd2QpIDogIm1lbW9yeSIpOwogCS8qIEFNRCBLNy9LOCBDUFVzIGRvbid0IHNhdmUvcmVzdG9yZSBGRFAvRklQL0ZPUCB1bmxlc3MgYW4gZXhjZXB0aW9uCiAJICAgaXMgcGVuZGluZy4gIENsZWFyIHRoZSB4ODcgc3RhdGUgaGVyZSBieSBzZXR0aW5nIGl0IHRvIGZpeGVkCiAJICAgdmFsdWVzLiBzYWZlX2FkZHJlc3MgaXMgYSByYW5kb20gdmFyaWFibGUgdGhhdCBzaG91bGQgYmUgaW4gTDEgKi8KQEAgLTMyNSwyNSArMzI2LDI1IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGdldF9mcHVfY3dkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCWlmIChjcHVfaGFzX2Z4c3IpIHsKLQkJcmV0dXJuIHRzay0+dGhyZWFkLmkzODcuZnhzYXZlLmN3ZDsKKwkJcmV0dXJuIHRzay0+dGhyZWFkLnhzdGF0ZS0+ZnhzYXZlLmN3ZDsKIAl9IGVsc2UgewotCQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KXRzay0+dGhyZWFkLmkzODcuZnNhdmUuY3dkOworCQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KXRzay0+dGhyZWFkLnhzdGF0ZS0+ZnNhdmUuY3dkOwogCX0KIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBnZXRfZnB1X3N3ZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlpZiAoY3B1X2hhc19meHNyKSB7Ci0JCXJldHVybiB0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZS5zd2Q7CisJCXJldHVybiB0c2stPnRocmVhZC54c3RhdGUtPmZ4c2F2ZS5zd2Q7CiAJfSBlbHNlIHsKLQkJcmV0dXJuICh1bnNpZ25lZCBzaG9ydCl0c2stPnRocmVhZC5pMzg3LmZzYXZlLnN3ZDsKKwkJcmV0dXJuICh1bnNpZ25lZCBzaG9ydCl0c2stPnRocmVhZC54c3RhdGUtPmZzYXZlLnN3ZDsKIAl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgZ2V0X2ZwdV9teGNzcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlpZiAoY3B1X2hhc194bW0pIHsKLQkJcmV0dXJuIHRzay0+dGhyZWFkLmkzODcuZnhzYXZlLm14Y3NyOworCQlyZXR1cm4gdHNrLT50aHJlYWQueHN0YXRlLT5meHNhdmUubXhjc3I7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIE1YQ1NSX0RFRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2k4MjU5LmggYi9pbmNsdWRlL2FzbS14ODYvaTgyNTkuaAppbmRleCA2N2MzMTllLi40NWQ0ZGYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaTgyNTkuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaTgyNTkuaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9fQVNNX0k4MjU5X0hfXwogI2RlZmluZSBfX0FTTV9JODI1OV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKIGV4dGVybiB1bnNpZ25lZCBpbnQgY2FjaGVkX2lycV9tYXNrOwogCi0jZGVmaW5lIF9fYnl0ZSh4LHkpCQkoKCh1bnNpZ25lZCBjaGFyICopICYoeSkpW3hdKQorI2RlZmluZSBfX2J5dGUoeCwgeSkJCSgoKHVuc2lnbmVkIGNoYXIgKikmKHkpKVt4XSkKICNkZWZpbmUgY2FjaGVkX21hc3Rlcl9tYXNrCShfX2J5dGUoMCwgY2FjaGVkX2lycV9tYXNrKSkKICNkZWZpbmUgY2FjaGVkX3NsYXZlX21hc2sJKF9fYnl0ZSgxLCBjYWNoZWRfaXJxX21hc2spKQogCkBAIC0yOSw3ICszMSwyOCBAQAogZXh0ZXJuIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdW5zaWduZWQgaW50IHN0YXJ0dXBfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCi0jZGVmaW5lIGluYl9waWMJCWluYl9wCi0jZGVmaW5lIG91dGJfcGljCW91dGJfcAorLyogdGhlIFBJQyBtYXkgbmVlZCBhIGNhcmVmdWwgZGVsYXkgb24gc29tZSBwbGF0Zm9ybXMsIGhlbmNlIHNwZWNpZmljIGNhbGxzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgaW5iX3BpYyh1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbHVlID0gaW5iKHBvcnQpOworCisJLyoKKwkgKiBkZWxheSBmb3Igc29tZSBhY2Nlc3NlcyB0byBQSUMgb24gbW90aGVyYm9hcmQgb3IgaW4gY2hpcHNldAorCSAqIG11c3QgYmUgYXQgbGVhc3Qgb25lIG1pY3Jvc2Vjb25kLCBzbyBiZSBzYWZlIGhlcmU6CisJICovCisJdWRlbGF5KDIpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0Yl9waWModW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJb3V0Yih2YWx1ZSwgcG9ydCk7CisJLyoKKwkgKiBkZWxheSBmb3Igc29tZSBhY2Nlc3NlcyB0byBQSUMgb24gbW90aGVyYm9hcmQgb3IgaW4gY2hpcHNldAorCSAqIG11c3QgYmUgYXQgbGVhc3Qgb25lIG1pY3Jvc2Vjb25kLCBzbyBiZSBzYWZlIGhlcmU6CisJICovCisJdWRlbGF5KDIpOworfQogCiAjZW5kaWYJLyogX19BU01fSTgyNTlfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaWEzMi5oIGIvaW5jbHVkZS9hc20teDg2L2lhMzIuaAppbmRleCBhYTk3MzMyLi41NWQzYWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaWEzMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pYTMyLmgKQEAgLTE0LDE5ICsxNCwxOSBAQAogCiAvKiBzaWduYWwuaCAqLwogc3RydWN0IHNpZ2FjdGlvbjMyIHsKLSAgICAgICB1bnNpZ25lZCBpbnQgIHNhX2hhbmRsZXI7CS8qIFJlYWxseSBhIHBvaW50ZXIsIGJ1dCBuZWVkIHRvIGRlYWwgCi0JCQkJCSAgICAgd2l0aCAzMiBiaXRzICovCi0gICAgICAgdW5zaWduZWQgaW50IHNhX2ZsYWdzOwotICAgICAgIHVuc2lnbmVkIGludCBzYV9yZXN0b3JlcjsJLyogQW5vdGhlciAzMiBiaXQgcG9pbnRlciAqLwotICAgICAgIGNvbXBhdF9zaWdzZXRfdCBzYV9tYXNrOwkJLyogQSAzMiBiaXQgbWFzayAqLworCXVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbAorCQkJCQkgICB3aXRoIDMyIGJpdHMgKi8KKwl1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7CisJdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCisJY29tcGF0X3NpZ3NldF90IHNhX21hc2s7CS8qIEEgMzIgYml0IG1hc2sgKi8KIH07CiAKIHN0cnVjdCBvbGRfc2lnYWN0aW9uMzIgewotICAgICAgIHVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbCAKLQkJCQkJICAgICB3aXRoIDMyIGJpdHMgKi8KLSAgICAgICBjb21wYXRfb2xkX3NpZ3NldF90IHNhX21hc2s7CQkvKiBBIDMyIGJpdCBtYXNrICovCi0gICAgICAgdW5zaWduZWQgaW50IHNhX2ZsYWdzOwotICAgICAgIHVuc2lnbmVkIGludCBzYV9yZXN0b3JlcjsJLyogQW5vdGhlciAzMiBiaXQgcG9pbnRlciAqLworCXVuc2lnbmVkIGludCAgc2FfaGFuZGxlcjsJLyogUmVhbGx5IGEgcG9pbnRlciwgYnV0IG5lZWQgdG8gZGVhbAorCQkJCQkgICB3aXRoIDMyIGJpdHMgKi8KKwljb21wYXRfb2xkX3NpZ3NldF90IHNhX21hc2s7CS8qIEEgMzIgYml0IG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQgc2FfZmxhZ3M7CisJdW5zaWduZWQgaW50IHNhX3Jlc3RvcmVyOwkvKiBBbm90aGVyIDMyIGJpdCBwb2ludGVyICovCiB9OwogCiB0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFja19pYTMyIHsKQEAgLTY1LDcgKzY1LDcgQEAKIAlsb25nIGxvbmcJCXN0X3NpemU7CiAJdW5zaWduZWQgaW50CQlzdF9ibGtzaXplOwogCi0JbG9uZyBsb25nCQlzdF9ibG9ja3M7LyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJbG9uZyBsb25nCQlzdF9ibG9ja3M7LyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQgKi8KIAogCXVuc2lnbmVkIAkJc3RfYXRpbWU7CiAJdW5zaWduZWQgCQlzdF9hdGltZV9uc2VjOwpAQCAtNzcsMTMgKzc3LDEzIEBACiAJdW5zaWduZWQgbG9uZyBsb25nCXN0X2lubzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IGNvbXBhdF9zaWdpbmZvewordHlwZWRlZiBzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gewogCWludCBzaV9zaWdubzsKIAlpbnQgc2lfZXJybm87CiAJaW50IHNpX2NvZGU7CiAKIAl1bmlvbiB7Ci0JCWludCBfcGFkWygoMTI4L3NpemVvZihpbnQpKSAtIDMpXTsKKwkJaW50IF9wYWRbKCgxMjggLyBzaXplb2YoaW50KSkgLSAzKV07CiAKIAkJLyoga2lsbCgpICovCiAJCXN0cnVjdCB7CkBAIC0xMjksMjggKzEyOSwyNiBAQAogCX0gX3NpZmllbGRzOwogfSBjb21wYXRfc2lnaW5mb190OwogCi1zdHJ1Y3Qgc2lnZnJhbWUzMgotewotICAgICAgICB1MzIgcHJldGNvZGU7Ci0gICAgICAgIGludCBzaWc7Ci0gICAgICAgIHN0cnVjdCBzaWdjb250ZXh0X2lhMzIgc2M7Ci0gICAgICAgIHN0cnVjdCBfZnBzdGF0ZV9pYTMyIGZwc3RhdGU7Ci0gICAgICAgIHVuc2lnbmVkIGludCBleHRyYW1hc2tbX0NPTVBBVF9OU0lHX1dPUkRTLTFdOworc3RydWN0IHNpZ2ZyYW1lMzIgeworCXUzMiBwcmV0Y29kZTsKKwlpbnQgc2lnOworCXN0cnVjdCBzaWdjb250ZXh0X2lhMzIgc2M7CisJc3RydWN0IF9mcHN0YXRlX2lhMzIgZnBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgZXh0cmFtYXNrW19DT01QQVRfTlNJR19XT1JEUy0xXTsKIH07CiAKLXN0cnVjdCBydF9zaWdmcmFtZTMyCi17Ci0gICAgICAgIHUzMiBwcmV0Y29kZTsKLSAgICAgICAgaW50IHNpZzsKLSAgICAgICAgdTMyIHBpbmZvOwotICAgICAgICB1MzIgcHVjOwotICAgICAgICBjb21wYXRfc2lnaW5mb190IGluZm87Ci0gICAgICAgIHN0cnVjdCB1Y29udGV4dF9pYTMyIHVjOwotICAgICAgICBzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBmcHN0YXRlOworc3RydWN0IHJ0X3NpZ2ZyYW1lMzIgeworCXUzMiBwcmV0Y29kZTsKKwlpbnQgc2lnOworCXUzMiBwaW5mbzsKKwl1MzIgcHVjOworCWNvbXBhdF9zaWdpbmZvX3QgaW5mbzsKKwlzdHJ1Y3QgdWNvbnRleHRfaWEzMiB1YzsKKwlzdHJ1Y3QgX2Zwc3RhdGVfaWEzMiBmcHN0YXRlOwogfTsKIAogc3RydWN0IHVzdGF0MzIgewotCV9fdTMyCWZfdGZyZWU7CisJX191MzIJCQlmX3RmcmVlOwogCWNvbXBhdF9pbm9fdAkJZl90aW5vZGU7CiAJY2hhcgkJCWZfZm5hbWVbNl07CiAJY2hhcgkJCWZfZnBhY2tbNl07CkBAIC0xNjgsNSArMTY2LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogIUNPTkZJR19JQTMyX1NVUFBPUlQgKi8KLSAKLSNlbmRpZiAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaWRlLmggYi9pbmNsdWRlL2FzbS14ODYvaWRlLmgKaW5kZXggYzI1NTJkOC4uY2Y5Yzk4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pZGUuaApAQCAtMjAsOCArMjAsNiBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfREVGQVVMVFMKLQogc3RhdGljIF9faW5saW5lX18gaW50IGlkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCiB7CiAJc3dpdGNoIChiYXNlKSB7CkBAIC02MCwxNCArNTgsNiBAQAogCX0KIH0KIAotI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCi0jZGVmaW5lIGlkZV9pbml0X2RlZmF1bHRfaXJxKGJhc2UpCSgwKQotI2Vsc2UKLSNkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJaWRlX2RlZmF1bHRfaXJxKGJhc2UpCi0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW8uaCBiL2luY2x1ZGUvYXNtLXg4Ni9pby5oCmluZGV4IDVhNThiMTcuLjdiMjkyZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pby5oCkBAIC0xLDUgKzEsMTEgQEAKKyNkZWZpbmUgQVJDSF9IQVNfSU9SRU1BUF9XQworCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogIyBpbmNsdWRlICJpb18zMi5oIgogI2Vsc2UKICMgaW5jbHVkZSAiaW9fNjQuaCIKICNlbmRpZgorZXh0ZXJuIGludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQl1bnNpZ25lZCBsb25nIHByb3RfdmFsKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2ModW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pb18zMi5oIGIvaW5jbHVkZS9hc20teDg2L2lvXzMyLmgKaW5kZXggNThkMmM0NS4uNTA5MDQ1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2lvXzMyLmgKQEAgLTY1LDE0ICs2NSwxNCBAQAogICoKICAqCVRoZSByZXR1cm5lZCBwaHlzaWNhbCBhZGRyZXNzIGlzIHRoZSBwaHlzaWNhbCAoQ1BVKSBtYXBwaW5nIGZvcgogICoJdGhlIG1lbW9yeSBhZGRyZXNzIGdpdmVuLiBJdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uCi0gKglhZGRyZXNzZXMgZGlyZWN0bHkgbWFwcGVkIG9yIGFsbG9jYXRlZCB2aWEga21hbGxvYy4gCisgKglhZGRyZXNzZXMgZGlyZWN0bHkgbWFwcGVkIG9yIGFsbG9jYXRlZCB2aWEga21hbGxvYy4KICAqCiAgKglUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGdpdmUgYnVzIG1hcHBpbmdzIGZvciBETUEgdHJhbnNmZXJzLiBJbgogICoJYWxtb3N0IGFsbCBjb25jZWl2YWJsZSBjYXNlcyBhIGRldmljZSBkcml2ZXIgc2hvdWxkIG5vdCBiZSB1c2luZwogICoJdGhpcyBmdW5jdGlvbgogICovCi0gCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCiB7CiAJcmV0dXJuIF9fcGEoYWRkcmVzcyk7CiB9CkBAIC05MCw3ICs5MCw3IEBACiAgKgl0aGlzIGZ1bmN0aW9uCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gX192YShhZGRyZXNzKTsKIH0KQEAgLTExNCwxMyArMTE0LDEzIEBACiAgKiBJZiB0aGUgYXJlYSB5b3UgYXJlIHRyeWluZyB0byBtYXAgaXMgYSBQQ0kgQkFSIHlvdSBzaG91bGQgaGF2ZSBhCiAgKiBsb29rIGF0IHBjaV9pb21hcCgpLgogICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9ub2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2NhY2hlKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIC8qCiAgKiBUaGUgZGVmYXVsdCBpb3JlbWFwKCkgYmVoYXZpb3IgaXMgbm9uLWNhY2hlZDoKICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICppb3JlbWFwKHJlc291cmNlX3NpemVfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSk7CiB9CkBAIC0xNjksMTYgKzE2OSwxOSBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKSBhZGRyOworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19mb3JjZSAqKWFkZHI7CiB9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKikgYWRkcjsKKwlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopYWRkcjsKIH0KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopIGFkZHI7CiB9CisKICNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQogI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCiAjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKQEAgLTE4OCwxNSArMTkxLDE3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZWIodW5zaWduZWQgY2hhciBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9fZm9yY2UgKikgYWRkciA9IGI7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9fZm9yY2UgKilhZGRyID0gYjsKIH0KKwogc3RhdGljIGlubGluZSB2b2lkIHdyaXRldyh1bnNpZ25lZCBzaG9ydCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2ZvcmNlICopIGFkZHIgPSBiOworCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19mb3JjZSAqKWFkZHIgPSBiOwogfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVsKHVuc2lnbmVkIGludCBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyID0gYjsKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopYWRkciA9IGI7CiB9CiAjZGVmaW5lIF9fcmF3X3dyaXRlYiB3cml0ZWIKICNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldwpAQCAtMjM5LDEyICsyNDQsMTIgQEAKICAqCTEuIE91dCBvZiBvcmRlciBhd2FyZSBwcm9jZXNzb3JzCiAgKgkyLiBBY2NpZGVudGFsbHkgb3V0IG9mIG9yZGVyIHByb2Nlc3NvcnMgKFBQcm8gZXJyYXRhICM1MSkKICAqLwotIAorCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X09PU1RPUkUpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QUFJPX0ZFTkNFKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfd3JpdGVfYnVmZmVycyh2b2lkKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSI6IDogOiJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7CiB9CiAKICNlbHNlCkBAIC0yNjQsNyArMjY5LDggQEAKICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd25faW8odm9pZCkgeworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQorewogCW5hdGl2ZV9pb19kZWxheSgpOwogI2lmZGVmIFJFQUxMWV9TTE9XX0lPCiAJbmF0aXZlX2lvX2RlbGF5KCk7CkBAIC0yNzUsNTEgKzI4MSw3NCBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBfX0JVSUxESU8oYndsLGJ3LHR5cGUpIFwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkgeyBcCi0Jb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7IFwKLX0gXAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2woaW50IHBvcnQpIHsgXAotCXJldHVybiBpbiMjYndsIyNfbG9jYWwocG9ydCk7IFwKKyNkZWZpbmUgX19CVUlMRElPKGJ3bCwgYncsIHR5cGUpCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAorewkJCQkJCQkJXAorCW91dCMjYndsIyNfbG9jYWwodmFsdWUsIHBvcnQpOwkJCQlcCit9CQkJCQkJCQlcCisJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsKGludCBwb3J0KQkJCVwKK3sJCQkJCQkJCVwKKwlyZXR1cm4gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCQlcCiB9CiAKLSNkZWZpbmUgQlVJTERJTyhid2wsYncsdHlwZSkgXAotc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfbG9jYWwodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOyBcCi19IFwKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfbG9jYWwoaW50IHBvcnQpIHsgXAotCXVuc2lnbmVkIHR5cGUgdmFsdWU7IFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIgOiAiPWEiKHZhbHVlKSA6ICJOZCIocG9ydCkpOyBcCi0JcmV0dXJuIHZhbHVlOyBcCi19IFwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgXAotCW91dCMjYndsIyNfbG9jYWwodmFsdWUsIHBvcnQpOyBcCi0Jc2xvd19kb3duX2lvKCk7IFwKLX0gXAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbF9wKGludCBwb3J0KSB7IFwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOyBcCi0Jc2xvd19kb3duX2lvKCk7IFwKLQlyZXR1cm4gdmFsdWU7IFwKLX0gXAotX19CVUlMRElPKGJ3bCxidyx0eXBlKSBcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19wKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KSB7IFwKLQlvdXQjI2J3bCh2YWx1ZSwgcG9ydCk7IFwKLQlzbG93X2Rvd25faW8oKTsgXAotfSBcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpIHsgXAotCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOyBcCi0Jc2xvd19kb3duX2lvKCk7IFwKLQlyZXR1cm4gdmFsdWU7IFwKLX0gXAotc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bChpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInJlcDsgb3V0cyIgI2J3bCA6ICIrUyIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsgXAotfSBcCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5zIyNid2woaW50IHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIHsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZXA7IGlucyIgI2J3bCA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsgXAorI2RlZmluZSBCVUlMRElPKGJ3bCwgYncsIHR5cGUpCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfbG9jYWwodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIJCVwKKwkJICAgICA6IDogImEiKHZhbHVlKSwgIk5kIihwb3J0KSk7CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfbG9jYWwoaW50IHBvcnQpCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImluIiAjYndsICIgJXcxLCAlIiAjYncgIjAiCQlcCisJCSAgICAgOiAiPWEiKHZhbHVlKSA6ICJOZCIocG9ydCkpOwkJCVwKKwlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbF9wKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KQlcCit7CQkJCQkJCQkJXAorCW91dCMjYndsIyNfbG9jYWwodmFsdWUsIHBvcnQpOwkJCQkJXAorCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbF9wKGludCBwb3J0KQkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgdHlwZSB2YWx1ZSA9IGluIyNid2wjI19sb2NhbChwb3J0KTsJCQlcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKKwlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitfX0JVSUxESU8oYndsLCBidywgdHlwZSkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19wKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KQkJXAorewkJCQkJCQkJCVwKKwlvdXQjI2J3bCh2YWx1ZSwgcG9ydCk7CQkJCQkJXAorCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19wKGludCBwb3J0KQkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgdHlwZSB2YWx1ZSA9IGluIyNid2wocG9ydCk7CQkJCVwKKwlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAorCXJldHVybiB2YWx1ZTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNid2woaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIFwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJyZXA7IG91dHMiICNid2wJCQkJCVwKKwkJICAgICA6ICIrUyIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zIyNid2woaW50IHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCVwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJyZXA7IGlucyIgI2J3bAkJCQkJXAorCQkgICAgIDogIitEIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOwkJXAogfQogCi1CVUlMRElPKGIsYixjaGFyKQotQlVJTERJTyh3LHcsc2hvcnQpCi1CVUlMRElPKGwsLGludCkKK0JVSUxESU8oYiwgYiwgY2hhcikKK0JVSUxESU8odywgdywgc2hvcnQpCitCVUlMRElPKGwsICwgaW50KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pb182NC5oIGIvaW5jbHVkZS9hc20teDg2L2lvXzY0LmgKaW5kZXggZjY0YTU5Yy4uYzJmNWVlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2lvXzY0LmgKQEAgLTU4LDYwICs1OCw3NSBAQAogLyoKICAqIFRhbGsgYWJvdXQgbWlzdXNpbmcgbWFjcm9zLi4KICAqLwotI2RlZmluZSBfX09VVDEocyx4KSBcCisjZGVmaW5lIF9fT1VUMShzLCB4KQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNzKHVuc2lnbmVkIHggdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsKIAotI2RlZmluZSBfX09VVDIocyxzMSxzMikgXAotX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICNzICIgJSIgczEgIjAsJSIgczIgIjEiCisjZGVmaW5lIF9fT1VUMihzLCBzMSwgczIpCQkJCVwKK2FzbSB2b2xhdGlsZSAoIm91dCIgI3MgIiAlIiBzMSAiMCwlIiBzMiAiMSIKIAogI2lmbmRlZiBSRUFMTFlfU0xPV19JTwogI2RlZmluZSBSRUFMTFlfU0xPV19JTwogI2RlZmluZSBVTlNFVF9SRUFMTFlfU0xPV19JTwogI2VuZGlmCiAKLSNkZWZpbmUgX19PVVQocyxzMSx4KSBcCi1fX09VVDEocyx4KSBfX09VVDIocyxzMSwidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyB9IFwKLV9fT1VUMShzIyNfcCwgeCkgX19PVVQyKHMsIHMxLCAidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyBcCi0JCXNsb3dfZG93bl9pbygpOyB9CisjZGVmaW5lIF9fT1VUKHMsIHMxLCB4KQkJCQkJCQlcCisJX19PVVQxKHMsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsJXAorCX0JCQkJCQkJCVwKKwlfX09VVDEocyMjX3AsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsgXAorCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCit9CiAKLSNkZWZpbmUgX19JTjEocykgXAotc3RhdGljIGlubGluZSBSRVRVUk5fVFlQRSBpbiMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IFJFVFVSTl9UWVBFIF92OworI2RlZmluZSBfX0lOMShzKQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIFJFVFVSTl9UWVBFIGluIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQpCQkJXAorewkJCQkJCQkJCVwKKwlSRVRVUk5fVFlQRSBfdjsKIAotI2RlZmluZSBfX0lOMihzLHMxLHMyKSBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyAoImluIiAjcyAiICUiIHMyICIxLCUiIHMxICIwIgorI2RlZmluZSBfX0lOMihzLCBzMSwgczIpCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoImluIiAjcyAiICUiIHMyICIxLCUiIHMxICIwIgogCi0jZGVmaW5lIF9fSU4ocyxzMSxpLi4uKSBcCi1fX0lOMShzKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOyByZXR1cm4gX3Y7IH0gXAotX19JTjEocyMjX3ApIF9fSU4yKHMsIHMxLCAidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCksICMjaSk7CSAgXAotCQkJCXNsb3dfZG93bl9pbygpOyByZXR1cm4gX3Y7IH0KKyNkZWZpbmUgX19JTihzLCBzMSwgaS4uLikJCQkJCQlcCisJX19JTjEocykgX19JTjIocywgczEsICJ3IikgOiAiPWEiIChfdikgOiAiTmQiIChwb3J0KSwgIyNpKTsJXAorCXJldHVybiBfdjsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX0lOMShzIyNfcCkgX19JTjIocywgczEsICJ3IikgOiAiPWEiIChfdikgOiAiTmQiIChwb3J0KSwgIyNpKTsJXAorCXNsb3dfZG93bl9pbygpOyBcCisJcmV0dXJuIF92OyB9CiAKICNpZmRlZiBVTlNFVF9SRUFMTFlfU0xPV19JTwogI3VuZGVmIFJFQUxMWV9TTE9XX0lPCiAjZW5kaWYKIAotI2RlZmluZSBfX0lOUyhzKSBcCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5zIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQsIHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCi17IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgaW5zIiAjcyBcCi06ICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCkgOiAiZCIgKHBvcnQpLCIwIiAoYWRkciksIjEiIChjb3VudCkpOyB9CisjZGVmaW5lIF9fSU5TKHMpCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqYWRkciwJCVwKKwkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAorewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJyZXAgOyBpbnMiICNzCQkJCQlcCisJCSAgICAgIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KQkJCVwKKwkJICAgICAgOiAiZCIgKHBvcnQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KSk7CQlcCit9CiAKLSNkZWZpbmUgX19PVVRTKHMpIFwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCi17IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgb3V0cyIgI3MgXAotOiAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpIDogImQiIChwb3J0KSwiMCIgKGFkZHIpLCIxIiAoY291bnQpKTsgfQorI2RlZmluZSBfX09VVFMocykJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dHMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwJXAorCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAorewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCJyZXAgOyBvdXRzIiAjcwkJCQkJXAorCQkgICAgICA6ICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJCQlcCisJCSAgICAgIDogImQiIChwb3J0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkpOwkJXAorfQogCiAjZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGNoYXIKLV9fSU4oYiwiIikKK19fSU4oYiwgIiIpCiAjdW5kZWYgUkVUVVJOX1RZUEUKICNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgc2hvcnQKLV9fSU4odywiIikKK19fSU4odywgIiIpCiAjdW5kZWYgUkVUVVJOX1RZUEUKICNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgaW50Ci1fX0lOKGwsIiIpCitfX0lOKGwsICIiKQogI3VuZGVmIFJFVFVSTl9UWVBFCiAKLV9fT1VUKGIsImIiLGNoYXIpCi1fX09VVCh3LCJ3IixzaG9ydCkKLV9fT1VUKGwsLGludCkKK19fT1VUKGIsICJiIiwgY2hhcikKK19fT1VUKHcsICJ3Iiwgc2hvcnQpCitfX09VVChsLCAsIGludCkKIAogX19JTlMoYikKIF9fSU5TKHcpCkBAIC0xMzIsMTIgKzE0NywxMiBAQAogICogQ2hhbmdlIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdnYuCiAgKiBUaGVzZSBhcmUgcHJldHR5IHRyaXZpYWwKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqYWRkcmVzcykKIHsKIAlyZXR1cm4gX19wYShhZGRyZXNzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gX192YShhZGRyZXNzKTsKIH0KQEAgLTE1OCwxMyArMTczLDEzIEBACiAgKiBpdCdzIHVzZWZ1bCBpZiBzb21lIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBpbiBzdWNoIGFuIGFyZWEgYW5kIHdyaXRlIGNvbWJpbmluZwogICogb3IgcmVhZCBjYWNoaW5nIGlzIG5vdCBkZXNpcmFibGU6CiAgKi8KLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX25vY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfY2FjaGUocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAogLyoKICAqIFRoZSBkZWZhdWx0IGlvcmVtYXAoKSBiZWhhdmlvciBpcyBub24tY2FjaGVkOgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXJldHVybiBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKTsKIH0KQEAgLTIwMCwxOCArMjE1LDIyIEBACiB7CiAJcmV0dXJuICooX19mb3JjZSB2b2xhdGlsZSBfX3U4ICopYWRkcjsKIH0KKwogc3RhdGljIGlubGluZSBfX3UxNiBfX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTE2ICopYWRkcjsKIH0KKwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3UzMiBfX3JlYWRsKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTMyICopYWRkcjsKIH0KKwogc3RhdGljIGlubGluZSBfX3U2NCBfX3JlYWRxKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTY0ICopYWRkcjsKIH0KKwogI2RlZmluZSByZWFkYih4KSBfX3JlYWRiKHgpCiAjZGVmaW5lIHJlYWR3KHgpIF9fcmVhZHcoeCkKICNkZWZpbmUgcmVhZGwoeCkgX19yZWFkbCh4KQpAQCAtMjMxLDM3ICsyNTAsNDQgQEAKIHsKIAkqKF9fZm9yY2Ugdm9sYXRpbGUgX191MzIgKilhZGRyID0gYjsKIH0KKwogc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVxKF9fdTY0IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAkqKF9fZm9yY2Ugdm9sYXRpbGUgX191NjQgKilhZGRyID0gYjsKIH0KKwogc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGViKF9fdTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewogCSooX19mb3JjZSB2b2xhdGlsZSBfX3U4ICopYWRkciA9IGI7CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRldyhfX3UxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTE2ICopYWRkciA9IGI7CiB9Ci0jZGVmaW5lIHdyaXRlcSh2YWwsYWRkcikgX193cml0ZXEoKHZhbCksKGFkZHIpKQotI2RlZmluZSB3cml0ZWwodmFsLGFkZHIpIF9fd3JpdGVsKCh2YWwpLChhZGRyKSkKLSNkZWZpbmUgd3JpdGV3KHZhbCxhZGRyKSBfX3dyaXRldygodmFsKSwoYWRkcikpCi0jZGVmaW5lIHdyaXRlYih2YWwsYWRkcikgX193cml0ZWIoKHZhbCksKGFkZHIpKQorCisjZGVmaW5lIHdyaXRlcSh2YWwsIGFkZHIpIF9fd3JpdGVxKCh2YWwpLCAoYWRkcikpCisjZGVmaW5lIHdyaXRlbCh2YWwsIGFkZHIpIF9fd3JpdGVsKCh2YWwpLCAoYWRkcikpCisjZGVmaW5lIHdyaXRldyh2YWwsIGFkZHIpIF9fd3JpdGV3KCh2YWwpLCAoYWRkcikpCisjZGVmaW5lIHdyaXRlYih2YWwsIGFkZHIpIF9fd3JpdGViKCh2YWwpLCAoYWRkcikpCiAjZGVmaW5lIF9fcmF3X3dyaXRlYiB3cml0ZWIKICNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCiAjZGVmaW5lIF9fcmF3X3dyaXRlcSB3cml0ZXEKIAotdm9pZCBfX21lbWNweV9mcm9taW8odm9pZCosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCk7Ci12b2lkIF9fbWVtY3B5X3RvaW8odW5zaWduZWQgbG9uZyxjb25zdCB2b2lkKix1bnNpZ25lZCk7Cit2b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKK3ZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKIAotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgdW5zaWduZWQgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwKKwkJCQkgdW5zaWduZWQgbGVuKQogewotCV9fbWVtY3B5X2Zyb21pbyh0bywodW5zaWduZWQgbG9uZylmcm9tLGxlbik7CisJX19tZW1jcHlfZnJvbWlvKHRvLCAodW5zaWduZWQgbG9uZylmcm9tLCBsZW4pOwogfQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbikKKworc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCisJCQkgICAgICAgdW5zaWduZWQgbGVuKQogewotCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sZnJvbSxsZW4pOworCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIGxlbik7CiB9CiAKIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKTsKQEAgLTI3Niw3ICszMDIsNyBAQAogICovCiAjZGVmaW5lIF9fSVNBX0lPX2Jhc2UgKChjaGFyIF9faW9tZW0gKikoUEFHRV9PRkZTRVQpKQogCi0jZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSAKKyNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCiAKIGV4dGVybiBpbnQgaW9tbXVfYmlvX21lcmdlOwogI2RlZmluZSBCSU9fVk1FUkdFX0JPVU5EQVJZIGlvbW11X2Jpb19tZXJnZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pb19hcGljLmgKaW5kZXggMGY1YjNmZS4uMGM5ZTE3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaW9fYXBpYy5oCkBAIC0xMTAsNiArMTEwLDEzIEBACiAgKiBNUC1CSU9TIGlycSBjb25maWd1cmF0aW9uIHRhYmxlIHN0cnVjdHVyZXM6CiAgKi8KIAorc3RydWN0IG1wX2lvYXBpY19yb3V0aW5nIHsKKwlpbnQgYXBpY19pZDsKKwlpbnQgZ3NpX2Jhc2U7CisJaW50IGdzaV9lbmQ7CisJdTMyIHBpbl9wcm9ncmFtbWVkWzRdOworfTsKKwogLyogSS9PIEFQSUMgZW50cmllcyAqLwogZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107CiAKQEAgLTE0Niw3ICsxNTMsNiBAQAogZXh0ZXJuIGludCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGludCBpb2FwaWMpOwogZXh0ZXJuIGludCBpb19hcGljX3NldF9wY2lfcm91dGluZyhpbnQgaW9hcGljLCBpbnQgcGluLCBpbnQgaXJxLAogCQkJCSAgIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKLWV4dGVybiBpbnQgdGltZXJfdXNlc19pb2FwaWNfcGluXzA7CiAjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KIAogZXh0ZXJuIGludCAoKmlvYXBpY19yZW51bWJlcl9pcnEpKGludCBpb2FwaWMsIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvY3Rscy5oIGIvaW5jbHVkZS9hc20teDg2L2lvY3Rscy5oCmluZGV4IDkzYzg5NGQuLmMwYzMzOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaW9jdGxzLmgKQEAgLTQ3LDEyICs0NywxMyBAQAogI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KLSNkZWZpbmUgVENHRVRTMgkJX0lPUignVCcsMHgyQSwgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUQ1NFVFMyCQlfSU9XKCdUJywweDJCLCBzdHJ1Y3QgdGVybWlvczIpCi0jZGVmaW5lIFRDU0VUU1cyCV9JT1coJ1QnLDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsMHgyRCwgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KLSNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVENHRVRTMgkJX0lPUignVCcsIDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsIDB4MkIsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsIDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsIDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkKKwkJCQkvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCisjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsIDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLwogCiAjZGVmaW5lIEZJT05DTEVYCTB4NTQ1MAogI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pcGNidWYuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pcGNidWYuaAppbmRleCAyYWRmOGIzLi5lZTY3OGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaXBjYnVmLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2lwY2J1Zi5oCkBAIC0xMSw4ICsxMSw3IEBACiAgKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCiAgKi8KIAotc3RydWN0IGlwYzY0X3Blcm0KLXsKK3N0cnVjdCBpcGM2NF9wZXJtIHsKIAlfX2tlcm5lbF9rZXlfdAkJa2V5OwogCV9fa2VybmVsX3VpZDMyX3QJdWlkOwogCV9fa2VybmVsX2dpZDMyX3QJZ2lkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lwaS5oIGIvaW5jbHVkZS9hc20teDg2L2lwaS5oCmluZGV4IDZkMDExYmQuLmVjYzgwZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcGkuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXBpLmgKQEAgLTI3LDcgKzI3LDggQEAKICAqIFdlIHVzZSAnYnJvYWRjYXN0JywgQ1BVLT5DUFUgSVBJcyBhbmQgc2VsZi1JUElzIHRvby4KICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3ByZXBhcmVfSUNSICh1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IsIHVuc2lnbmVkIGludCBkZXN0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19wcmVwYXJlX0lDUih1bnNpZ25lZCBpbnQgc2hvcnRjdXQsIGludCB2ZWN0b3IsCisJCQkJCSB1bnNpZ25lZCBpbnQgZGVzdCkKIHsKIAl1bnNpZ25lZCBpbnQgaWNyID0gc2hvcnRjdXQgfCBkZXN0OwogCkBAIC00MiwxMiArNDMsMTMgQEAKIAlyZXR1cm4gaWNyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3ByZXBhcmVfSUNSMiAodW5zaWduZWQgaW50IG1hc2spCitzdGF0aWMgaW5saW5lIGludCBfX3ByZXBhcmVfSUNSMih1bnNpZ25lZCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gU0VUX0FQSUNfREVTVF9GSUVMRChtYXNrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fc2VuZF9JUElfc2hvcnRjdXQodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NlbmRfSVBJX3Nob3J0Y3V0KHVuc2lnbmVkIGludCBzaG9ydGN1dCwgaW50IHZlY3RvciwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3QpCiB7CiAJLyoKIAkgKiBTdWJ0bGUuIEluIHRoZSBjYXNlIG9mIHRoZSAnbmV2ZXIgZG8gZG91YmxlIHdyaXRlcycgd29ya2Fyb3VuZApAQCAtNzgsNyArODAsOCBAQAogICogVGhpcyBpcyB1c2VkIHRvIHNlbmQgYW4gSVBJIHdpdGggbm8gc2hvcnRoYW5kIG5vdGF0aW9uICh0aGUgZGVzdGluYXRpb24gaXMKICAqIHNwZWNpZmllZCBpbiBiaXRzIDU2IHRvIDYzIG9mIHRoZSBJQ1IpLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZW5kX0lQSV9kZXN0X2ZpZWxkKHVuc2lnbmVkIGludCBtYXNrLCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NlbmRfSVBJX2Rlc3RfZmllbGQodW5zaWduZWQgaW50IG1hc2ssIGludCB2ZWN0b3IsCisJCQkJCSB1bnNpZ25lZCBpbnQgZGVzdCkKIHsKIAl1bnNpZ25lZCBsb25nIGNmZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L2lycV8zMi5oCmluZGV4IGFjYTljOTYuLjBiNzlmMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcnFfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXJxXzMyLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlICJpcnFfdmVjdG9ycy5oIgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQorc3RhdGljIGlubGluZSBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQogewogCXJldHVybiAoKGlycSA9PSAyKSA/IDkgOiBpcnEpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycV82NC5oIGIvaW5jbHVkZS9hc20teDg2L2lycV82NC5oCmluZGV4IDUwMDZjNmUuLjA4M2QzNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcnFfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXJxXzY0LmgKQEAgLTMxLDEwICszMSwxMCBAQAogCiAjZGVmaW5lIEZJUlNUX1NZU1RFTV9WRUNUT1IJMHhlZiAgIC8qIGR1cGxpY2F0ZWQgaW4gaHdfaXJxLmggKi8KIAotI2RlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDMyICpOUl9DUFVTKSkKKyNkZWZpbmUgTlJfSVJRUyAoTlJfVkVDVE9SUyArICgzMiAqIE5SX0NQVVMpKQogI2RlZmluZSBOUl9JUlFfVkVDVE9SUyBOUl9JUlFTCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBpcnFfY2Fub25pY2FsaXplKGludCBpcnEpCitzdGF0aWMgaW5saW5lIGludCBpcnFfY2Fub25pY2FsaXplKGludCBpcnEpCiB7CiAJcmV0dXJuICgoaXJxID09IDIpID8gOSA6IGlycSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaXJxZmxhZ3MuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pcnFmbGFncy5oCmluZGV4IDkyMDIxYzEuLmMyNDI1MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcnFmbGFncy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pcnFmbGFncy5oCkBAIC0xMiwyNSArMTIsMjEgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIjIF9fcmF3X3NhdmVfZmxhZ3Ncblx0IgotCQkicHVzaGYgOyBwb3AgJTAiCi0JCTogIj1nIiAoZmxhZ3MpCi0JCTogLyogbm8gaW5wdXQgKi8KLQkJOiAibWVtb3J5IgotCSk7CisJYXNtIHZvbGF0aWxlKCIjIF9fcmF3X3NhdmVfZmxhZ3Ncblx0IgorCQkgICAgICJwdXNoZiA7IHBvcCAlMCIKKwkJICAgICA6ICI9ZyIgKGZsYWdzKQorCQkgICAgIDogLyogbm8gaW5wdXQgKi8KKwkJICAgICA6ICJtZW1vcnkiKTsKIAogCXJldHVybiBmbGFnczsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9yZXN0b3JlX2ZsKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJwdXNoICUwIDsgcG9wZiIKLQkJOiAvKiBubyBvdXRwdXQgKi8KLQkJOiJnIiAoZmxhZ3MpCi0JCToibWVtb3J5IiwgImNjIgotCSk7CisJYXNtIHZvbGF0aWxlKCJwdXNoICUwIDsgcG9wZiIKKwkJICAgICA6IC8qIG5vIG91dHB1dCAqLworCQkgICAgIDoiZyIgKGZsYWdzKQorCQkgICAgIDoibWVtb3J5IiwgImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfaXJxX2Rpc2FibGUodm9pZCkKQEAgLTEzMSwxMSArMTI3LDExIEBACiAjZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIHJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSBcCi0JCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpCQkJCVwKKwlkbyB7IChmbGFncykgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSBcCi0JCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX2lycV9zYXZlKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncykJCQkJXAorCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX2lycV9zYXZlKCk7IH0gd2hpbGUgKDApCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva2RlYnVnLmggYi9pbmNsdWRlL2FzbS14ODYva2RlYnVnLmgKaW5kZXggOTlkY2JhZi4uOTY2NTFiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9rZGVidWcuaApAQCAtMjAsMTUgKzIwLDE2IEBACiAJRElFX0NBTEwsCiAJRElFX05NSV9JUEksCiAJRElFX1BBR0VfRkFVTFQsCisJRElFX05NSVVOS05PV04sCiB9OwogCiBleHRlcm4gdm9pZCBwcmludGtfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCByZWxpYWJsZSk7Ci1leHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLHN0cnVjdCBwdF9yZWdzICosbG9uZyk7CitleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLGxvbmcpOwogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgX19kaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIGV4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIF9fc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKiwgaW50IGFsbCk7CiBleHRlcm4gdm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQl1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCk7CisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCk7CiBleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb29wc19iZWdpbih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9rZXhlYy5oIGIvaW5jbHVkZS9hc20teDg2L2tleGVjLmgKaW5kZXggYzkwZDNjNy4uOGY4NTVhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2tleGVjLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2tleGVjLmgKQEAgLTk0LDEwICs5NCw5IEBACiB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCW5ld3JlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpJihvbGRyZWdzLT5zcCk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkieG9ybCAlJWVheCwgJSVlYXhcblx0IgotCQkJIm1vdncgJSVzcywgJSVheFxuXHQiCi0JCQk6Ij1hIihuZXdyZWdzLT5zcykpOworCWFzbSB2b2xhdGlsZSgieG9ybCAlJWVheCwgJSVlYXhcblx0IgorCQkgICAgICJtb3Z3ICUlc3MsICUlYXhcblx0IgorCQkgICAgIDoiPWEiKG5ld3JlZ3MtPnNzKSk7CiAjZW5kaWYKIH0KIApAQCAtMTE0LDM5ICsxMTMsMzkgQEAKIAkJY3Jhc2hfZml4dXBfc3NfZXNwKG5ld3JlZ3MsIG9sZHJlZ3MpOwogCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92bCAlJWVieCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmJ4KSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZsICUlZWN4LCUwIiA6ICI9bSIobmV3cmVncy0+Y3gpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmwgJSVlZHgsJTAiIDogIj1tIihuZXdyZWdzLT5keCkpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92bCAlJWVzaSwlMCIgOiAiPW0iKG5ld3JlZ3MtPnNpKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZsICUlZWRpLCUwIiA6ICI9bSIobmV3cmVncy0+ZGkpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmwgJSVlYnAsJTAiIDogIj1tIihuZXdyZWdzLT5icCkpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92bCAlJWVheCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmF4KSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZsICUlZXNwLCUwIiA6ICI9bSIobmV3cmVncy0+c3ApKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmwgJSVzcywgJSVlYXg7IiA6Ij1hIihuZXdyZWdzLT5zcykpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92bCAlJWNzLCAlJWVheDsiIDoiPWEiKG5ld3JlZ3MtPmNzKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZsICUlZHMsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+ZHMpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmwgJSVlcywgJSVlYXg7IiA6Ij1hIihuZXdyZWdzLT5lcykpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsOyBwb3BsICUwIiA6Ij1tIihuZXdyZWdzLT5mbGFncykpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYngsJTAiIDogIj1tIihuZXdyZWdzLT5ieCkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlY3gsJTAiIDogIj1tIihuZXdyZWdzLT5jeCkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlZHgsJTAiIDogIj1tIihuZXdyZWdzLT5keCkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlc2ksJTAiIDogIj1tIihuZXdyZWdzLT5zaSkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlZGksJTAiIDogIj1tIihuZXdyZWdzLT5kaSkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYnAsJTAiIDogIj1tIihuZXdyZWdzLT5icCkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYXgsJTAiIDogIj1tIihuZXdyZWdzLT5heCkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlc3AsJTAiIDogIj1tIihuZXdyZWdzLT5zcCkpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVzcywgJSVlYXg7IiA6Ij1hIihuZXdyZWdzLT5zcykpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVjcywgJSVlYXg7IiA6Ij1hIihuZXdyZWdzLT5jcykpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVkcywgJSVlYXg7IiA6Ij1hIihuZXdyZWdzLT5kcykpOworCQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlcywgJSVlYXg7IiA6Ij1hIihuZXdyZWdzLT5lcykpOworCQlhc20gdm9sYXRpbGUoInB1c2hmbDsgcG9wbCAlMCIgOiI9bSIobmV3cmVncy0+ZmxhZ3MpKTsKICNlbHNlCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcmJ4LCUwIiA6ICI9bSIobmV3cmVncy0+YngpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnEgJSVyY3gsJTAiIDogIj1tIihuZXdyZWdzLT5jeCkpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92cSAlJXJkeCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmR4KSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcnNpLCUwIiA6ICI9bSIobmV3cmVncy0+c2kpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnEgJSVyZGksJTAiIDogIj1tIihuZXdyZWdzLT5kaSkpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92cSAlJXJicCwlMCIgOiAiPW0iKG5ld3JlZ3MtPmJwKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcmF4LCUwIiA6ICI9bSIobmV3cmVncy0+YXgpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnEgJSVyc3AsJTAiIDogIj1tIihuZXdyZWdzLT5zcCkpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92cSAlJXI4LCUwIiA6ICI9bSIobmV3cmVncy0+cjgpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnEgJSVyOSwlMCIgOiAiPW0iKG5ld3JlZ3MtPnI5KSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcjEwLCUwIiA6ICI9bSIobmV3cmVncy0+cjEwKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcjExLCUwIiA6ICI9bSIobmV3cmVncy0+cjExKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcjEyLCUwIiA6ICI9bSIobmV3cmVncy0+cjEyKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcjEzLCUwIiA6ICI9bSIobmV3cmVncy0+cjEzKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcjE0LCUwIiA6ICI9bSIobmV3cmVncy0+cjE0KSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZxICUlcjE1LCUwIiA6ICI9bSIobmV3cmVncy0+cjE1KSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZsICUlc3MsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+c3MpKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmwgJSVjcywgJSVlYXg7IiA6Ij1hIihuZXdyZWdzLT5jcykpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZxOyBwb3BxICUwIiA6Ij1tIihuZXdyZWdzLT5mbGFncykpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyYngsJTAiIDogIj1tIihuZXdyZWdzLT5ieCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyY3gsJTAiIDogIj1tIihuZXdyZWdzLT5jeCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyZHgsJTAiIDogIj1tIihuZXdyZWdzLT5keCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyc2ksJTAiIDogIj1tIihuZXdyZWdzLT5zaSkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyZGksJTAiIDogIj1tIihuZXdyZWdzLT5kaSkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyYnAsJTAiIDogIj1tIihuZXdyZWdzLT5icCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyYXgsJTAiIDogIj1tIihuZXdyZWdzLT5heCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyc3AsJTAiIDogIj1tIihuZXdyZWdzLT5zcCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyOCwlMCIgOiAiPW0iKG5ld3JlZ3MtPnI4KSk7CisJCWFzbSB2b2xhdGlsZSgibW92cSAlJXI5LCUwIiA6ICI9bSIobmV3cmVncy0+cjkpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcjEwLCUwIiA6ICI9bSIobmV3cmVncy0+cjEwKSk7CisJCWFzbSB2b2xhdGlsZSgibW92cSAlJXIxMSwlMCIgOiAiPW0iKG5ld3JlZ3MtPnIxMSkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyMTIsJTAiIDogIj1tIihuZXdyZWdzLT5yMTIpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZxICUlcjEzLCUwIiA6ICI9bSIobmV3cmVncy0+cjEzKSk7CisJCWFzbSB2b2xhdGlsZSgibW92cSAlJXIxNCwlMCIgOiAiPW0iKG5ld3JlZ3MtPnIxNCkpOworCQlhc20gdm9sYXRpbGUoIm1vdnEgJSVyMTUsJTAiIDogIj1tIihuZXdyZWdzLT5yMTUpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlc3MsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+c3MpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZsICUlY3MsICUlZWF4OyIgOiI9YSIobmV3cmVncy0+Y3MpKTsKKwkJYXNtIHZvbGF0aWxlKCJwdXNoZnE7IHBvcHEgJTAiIDoiPW0iKG5ld3JlZ3MtPmZsYWdzKSk7CiAjZW5kaWYKIAkJbmV3cmVncy0+aXAgPSAodW5zaWduZWQgbG9uZyljdXJyZW50X3RleHRfYWRkcigpOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9rZ2RiLmggYi9pbmNsdWRlL2FzbS14ODYva2dkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGM0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODYva2dkYi5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgX0FTTV9LR0RCX0hfCisjZGVmaW5lIF9BU01fS0dEQl9IXworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgQW1pdCBTLiBLYWxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKi8KKworLyoKKyAqIEJVRk1BWCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGluYm91bmQvb3V0Ym91bmQKKyAqIGJ1ZmZlcnMgYXQgbGVhc3QgTlVNUkVHQllURVMqMiBhcmUgbmVlZGVkIGZvciByZWdpc3RlciBwYWNrZXRzCisgKiBMb25nZXIgYnVmZmVyIGlzIG5lZWRlZCB0byBsaXN0IGFsbCB0aHJlYWRzCisgKi8KKyNkZWZpbmUgQlVGTUFYCQkJMTAyNAorCisvKgorICogIE5vdGUgdGhhdCB0aGlzIHJlZ2lzdGVyIGltYWdlIGlzIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4KKyAqICB0aGUgcmVnaXN0ZXIgaW1hZ2UgdGhhdCBMaW51eCBwcm9kdWNlcyBhdCBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiAgTGludXgncyByZWdpc3RlciBpbWFnZSBpcyBkZWZpbmVkIGJ5IHN0cnVjdCBwdF9yZWdzIGluIHB0cmFjZS5oLgorICogIEp1c3Qgd2h5IEdEQiB1c2VzIGEgZGlmZmVyZW50IG9yZGVyIGlzIGEgaGlzdG9yaWNhbCBteXN0ZXJ5LgorICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZW51bSByZWduYW1lcyB7CisJR0RCX0FYLAkJCS8qIDAgKi8KKwlHREJfQ1gsCQkJLyogMSAqLworCUdEQl9EWCwJCQkvKiAyICovCisJR0RCX0JYLAkJCS8qIDMgKi8KKwlHREJfU1AsCQkJLyogNCAqLworCUdEQl9CUCwJCQkvKiA1ICovCisJR0RCX1NJLAkJCS8qIDYgKi8KKwlHREJfREksCQkJLyogNyAqLworCUdEQl9QQywJCQkvKiA4IGFsc28ga25vd24gYXMgZWlwICovCisJR0RCX1BTLAkJCS8qIDkgYWxzbyBrbm93biBhcyBlZmxhZ3MgKi8KKwlHREJfQ1MsCQkJLyogMTAgKi8KKwlHREJfU1MsCQkJLyogMTEgKi8KKwlHREJfRFMsCQkJLyogMTIgKi8KKwlHREJfRVMsCQkJLyogMTMgKi8KKwlHREJfRlMsCQkJLyogMTQgKi8KKwlHREJfR1MsCQkJLyogMTUgKi8KK307CisjZWxzZSAvKiAhIENPTkZJR19YODZfMzIgKi8KK2VudW0gcmVnbmFtZXMgeworCUdEQl9BWCwJCQkvKiAwICovCisJR0RCX0RYLAkJCS8qIDEgKi8KKwlHREJfQ1gsCQkJLyogMiAqLworCUdEQl9CWCwJCQkvKiAzICovCisJR0RCX1NJLAkJCS8qIDQgKi8KKwlHREJfREksCQkJLyogNSAqLworCUdEQl9CUCwJCQkvKiA2ICovCisJR0RCX1NQLAkJCS8qIDcgKi8KKwlHREJfUjgsCQkJLyogOCAqLworCUdEQl9SOSwJCQkvKiA5ICovCisJR0RCX1IxMCwJCS8qIDEwICovCisJR0RCX1IxMSwJCS8qIDExICovCisJR0RCX1IxMiwJCS8qIDEyICovCisJR0RCX1IxMywJCS8qIDEzICovCisJR0RCX1IxNCwJCS8qIDE0ICovCisJR0RCX1IxNSwJCS8qIDE1ICovCisJR0RCX1BDLAkJCS8qIDE2ICovCisJR0RCX1BTLAkJCS8qIDE3ICovCit9OworI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworLyoKKyAqIE51bWJlciBvZiBieXRlcyBvZiByZWdpc3RlcnM6CisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBOVU1SRUdCWVRFUwkJNjQKKyNlbHNlCisjIGRlZmluZSBOVU1SRUdCWVRFUwkJKChHREJfUFMrMSkqOCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZ2RiX2JyZWFrcG9pbnQodm9pZCkKK3sKKwlhc20oIiAgIGludCAkMyIpOworfQorI2RlZmluZSBCUkVBS19JTlNUUl9TSVpFCTEKKyNkZWZpbmUgQ0FDSEVfRkxVU0hfSVNfU0FGRQkxCisKKyNlbmRpZgkJCQkvKiBfQVNNX0tHREJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS14ODYva3Byb2Jlcy5oCmluZGV4IDE0MzQ3NmEuLjU0OTgwYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2twcm9iZXMuaApAQCAtMzUsMTQgKzM1LDEzIEBACiAjZGVmaW5lIFJFTEFUSVZFSlVNUF9JTlNUUlVDVElPTiAweGU5CiAjZGVmaW5lIE1BWF9JTlNOX1NJWkUgMTYKICNkZWZpbmUgTUFYX1NUQUNLX1NJWkUgNjQKLSNkZWZpbmUgTUlOX1NUQUNLX1NJWkUoQUREUikgKCgoTUFYX1NUQUNLX1NJWkUpIDwgXAotCSgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIFwKLQkgLSAodW5zaWduZWQgbG9uZykoQUREUikpKSBcCi0JPyAoTUFYX1NUQUNLX1NJWkUpIFwKLQk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIFwKLQkgICAtICh1bnNpZ25lZCBsb25nKShBRERSKSkpCisjZGVmaW5lIE1JTl9TVEFDS19TSVpFKEFERFIpCQkJCQkgICAgICAgXAorCSgoKE1BWF9TVEFDS19TSVpFKSA8ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFwKKwkJCSAgICAgIFRIUkVBRF9TSVpFIC0gKHVuc2lnbmVkIGxvbmcpKEFERFIpKSkgICAgXAorCSA/IChNQVhfU1RBQ0tfU0laRSkJCQkJCSAgICAgICBcCisJIDogKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsJCSAgICAgICBcCisJICAgIFRIUkVBRF9TSVpFIC0gKHVuc2lnbmVkIGxvbmcpKEFERFIpKSkKIAotI2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKICNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCWRvIHsgfSB3aGlsZSAoMCkKIAogZXh0ZXJuIGNvbnN0IGludCBrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3ZtX2hvc3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCmluZGV4IDQ3MDJiMDQuLjY4ZWUzOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCkBAIC0yMiwxNSArMjIsMTYgQEAKIAogI2RlZmluZSBDUjNfUEFFX1JFU0VSVkVEX0JJVFMgKChYODZfQ1IzX1BXVCB8IFg4Nl9DUjNfUENEKSAtIDEpCiAjZGVmaW5lIENSM19OT05QQUVfUkVTRVJWRURfQklUUyAoKFBBR0VfU0laRS0xKSAmIH4oWDg2X0NSM19QV1QgfCBYODZfQ1IzX1BDRCkpCi0jZGVmaW5lIENSM19MX01PREVfUkVTRVJWRURfQklUUyAoQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTfDB4RkZGRkZGMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgQ1IzX0xfTU9ERV9SRVNFUlZFRF9CSVRTIChDUjNfTk9OUEFFX1JFU0VSVkVEX0JJVFMgfAlcCisJCQkJICAweEZGRkZGRjAwMDAwMDAwMDBVTEwpCiAKLSNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLIFwKKyNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLCQkJCSAgIFwKIAkoWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUgfCBYODZfQ1IwX1dQIHwgWDg2X0NSMF9ORSBcCiAJIHwgWDg2X0NSMF9OVyB8IFg4Nl9DUjBfQ0QpCi0jZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OIFwKKyNkZWZpbmUgS1ZNX1ZNX0NSMF9BTFdBWVNfT04JCQkJCQlcCiAJKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFIHwgWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgfCBYODZfQ1IwX1RTIFwKIAkgfCBYODZfQ1IwX01QKQotI2RlZmluZSBLVk1fR1VFU1RfQ1I0X01BU0sgXAorI2RlZmluZSBLVk1fR1VFU1RfQ1I0X01BU0sJCQkJCQlcCiAJKFg4Nl9DUjRfVk1FIHwgWDg2X0NSNF9QU0UgfCBYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfUEdFIHwgWDg2X0NSNF9WTVhFKQogI2RlZmluZSBLVk1fUE1PREVfVk1fQ1I0X0FMV0FZU19PTiAoWDg2X0NSNF9QQUUgfCBYODZfQ1I0X1ZNWEUpCiAjZGVmaW5lIEtWTV9STU9ERV9WTV9DUjRfQUxXQVlTX09OIChYODZfQ1I0X1ZNRSB8IFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9WTVhFKQpAQCAtMTMzLDEyICsxMzQsMTIgQEAKIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHsKIAl1bnNpZ25lZCB3b3JkOwogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGdsZXZlbHMgOiA0OwotCQl1bnNpZ25lZCBsZXZlbCA6IDQ7Ci0JCXVuc2lnbmVkIHF1YWRyYW50IDogMjsKLQkJdW5zaWduZWQgcGFkX2Zvcl9uaWNlX2hleF9vdXRwdXQgOiA2OwotCQl1bnNpZ25lZCBtZXRhcGh5c2ljYWwgOiAxOwotCQl1bnNpZ25lZCBhY2Nlc3MgOiAzOworCQl1bnNpZ25lZCBnbGV2ZWxzOjQ7CisJCXVuc2lnbmVkIGxldmVsOjQ7CisJCXVuc2lnbmVkIHF1YWRyYW50OjI7CisJCXVuc2lnbmVkIHBhZF9mb3JfbmljZV9oZXhfb3V0cHV0OjY7CisJCXVuc2lnbmVkIG1ldGFwaHlzaWNhbDoxOworCQl1bnNpZ25lZCBhY2Nlc3M6MzsKIAl9OwogfTsKIApAQCAtNjA2LDYgKzYwNyw3IEBACiAjZGVmaW5lIFRTU19CQVNFX1NJWkUgMHg2OAogI2RlZmluZSBUU1NfSU9QQl9TSVpFICg2NTUzNiAvIDgpCiAjZGVmaW5lIFRTU19SRURJUkVDVElPTl9TSVpFICgyNTYgLyA4KQotI2RlZmluZSBSTU9ERV9UU1NfU0laRSAoVFNTX0JBU0VfU0laRSArIFRTU19SRURJUkVDVElPTl9TSVpFICsgVFNTX0lPUEJfU0laRSArIDEpCisjZGVmaW5lIFJNT0RFX1RTU19TSVpFCQkJCQkJCVwKKwkoVFNTX0JBU0VfU0laRSArIFRTU19SRURJUkVDVElPTl9TSVpFICsgVFNTX0lPUEJfU0laRSArIDEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2t2bV94ODZfZW11bGF0ZS5oIGIvaW5jbHVkZS9hc20teDg2L2t2bV94ODZfZW11bGF0ZS5oCmluZGV4IDdkYjkxYjkuLmQ2MzM3Zjk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYva3ZtX3g4Nl9lbXVsYXRlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2t2bV94ODZfZW11bGF0ZS5oCkBAIC02OCwxMCArNjgsMTAgQEAKIAkgKiAgQHZhbDogICBbT1VUXSBWYWx1ZSByZWFkIGZyb20gbWVtb3J5LCB6ZXJvLWV4dGVuZGVkIHRvICd1X2xvbmcnLgogCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gbWVtb3J5LgogCSAqLwotCWludCAoKnJlYWRfZW11bGF0ZWQpICh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICB2b2lkICp2YWwsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKnJlYWRfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgdm9pZCAqdmFsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIAkvKgogCSAqIHdyaXRlX2VtdWxhdGVkOiBSZWFkIGJ5dGVzIGZyb20gZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KQEAgLTgwLDEwICs4MCwxMCBAQAogCSAqICAgICAgICAgICAgICAgIHJlcXVpcmVkKS4KIAkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgdG8gbWVtb3J5LgogCSAqLwotCWludCAoKndyaXRlX2VtdWxhdGVkKSAodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgIGNvbnN0IHZvaWQgKnZhbCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwlpbnQgKCp3cml0ZV9lbXVsYXRlZCkodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgY29uc3Qgdm9pZCAqdmFsLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCS8qCiAJICogY21weGNoZ19lbXVsYXRlZDogRW11bGF0ZSBhbiBhdG9taWMgKExPQ0tlZCkgQ01QWENIRyBvcGVyYXRpb24gb24gYW4KQEAgLTkzLDExICs5MywxMSBAQAogCSAqICBAbmV3OiAgIFtJTiBdIFZhbHVlIHRvIHdyaXRlIHRvIEBhZGRyLgogCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byBhY2Nlc3MgdXNpbmcgQ01QWENIRy4KIAkgKi8KLQlpbnQgKCpjbXB4Y2hnX2VtdWxhdGVkKSAodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSBjb25zdCB2b2lkICpvbGQsCi0JCQkJIGNvbnN0IHZvaWQgKm5ldywKLQkJCQkgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJCSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKmNtcHhjaGdfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQljb25zdCB2b2lkICpvbGQsCisJCQkJY29uc3Qgdm9pZCAqbmV3LAorCQkJCXVuc2lnbmVkIGludCBieXRlcywKKwkJCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB9OwogCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkvKiBSZWdpc3RlciBzdGF0ZSBiZWZvcmUvYWZ0ZXIgZW11bGF0aW9uLiAqLwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAotCS8qIExpbmVhciBmYXVsdGluZyBhZGRyZXNzIChpZiBlbXVsYXRpbmcgYSBwYWdlLWZhdWx0aW5nIGluc3RydWN0aW9uKS4gKi8KKwkvKiBMaW5lYXIgZmF1bHRpbmcgYWRkcmVzcyAoaWYgZW11bGF0aW5nIGEgcGFnZS1mYXVsdGluZyBpbnN0cnVjdGlvbikgKi8KIAl1bnNpZ25lZCBsb25nIGVmbGFnczsKIAogCS8qIEVtdWxhdGVkIGV4ZWN1dGlvbiBtb2RlLCByZXByZXNlbnRlZCBieSBhbiBYODZFTVVMX01PREUgdmFsdWUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbGd1ZXN0LmggYi9pbmNsdWRlL2FzbS14ODYvbGd1ZXN0LmgKaW5kZXggNGQ5MzY3Yi4uYmU0YTcyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2xndWVzdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9sZ3Vlc3QuaApAQCAtMjMsOCArMjMsMTggQEAKIC8qIEZvdW5kIGluIHN3aXRjaGVyLlMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGRlZmF1bHRfaWR0X2VudHJpZXNbXTsKIAotc3RydWN0IGxndWVzdF9yZWdzCi17CisvKiBEZWNsYXJhdGlvbnMgZm9yIGRlZmluaXRpb25zIGluIGxndWVzdF9ndWVzdC5TICovCitleHRlcm4gY2hhciBsZ3Vlc3Rfbm9pcnFfc3RhcnRbXSwgbGd1ZXN0X25vaXJxX2VuZFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgbGdzdGFydF9jbGlbXSwgbGdlbmRfY2xpW107CitleHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X3N0aVtdLCBsZ2VuZF9zdGlbXTsKK2V4dGVybiBjb25zdCBjaGFyIGxnc3RhcnRfcG9wZltdLCBsZ2VuZF9wb3BmW107CitleHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X3B1c2hmW10sIGxnZW5kX3B1c2hmW107CitleHRlcm4gY29uc3QgY2hhciBsZ3N0YXJ0X2lyZXRbXSwgbGdlbmRfaXJldFtdOworCitleHRlcm4gdm9pZCBsZ3Vlc3RfaXJldCh2b2lkKTsKK2V4dGVybiB2b2lkIGxndWVzdF9pbml0KHZvaWQpOworCitzdHJ1Y3QgbGd1ZXN0X3JlZ3MgewogCS8qIE1hbnVhbGx5IHNhdmVkIHBhcnQuICovCiAJdW5zaWduZWQgbG9uZyBlYXgsIGVieCwgZWN4LCBlZHg7CiAJdW5zaWduZWQgbG9uZyBlc2ksIGVkaSwgZWJwOwpAQCAtNDAsOCArNTAsNyBAQAogfTsKIAogLyogVGhpcyBpcyBhIGd1ZXN0LXNwZWNpZmljIHBhZ2UgKG1hcHBlZCBybykgaW50byB0aGUgZ3Vlc3QuICovCi1zdHJ1Y3QgbGd1ZXN0X3JvX3N0YXRlCi17CitzdHJ1Y3QgbGd1ZXN0X3JvX3N0YXRlIHsKIAkvKiBIb3N0IGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gcmVzdG9yZSB3aGVuIHdlIHN3aXRjaCBiYWNrLiAqLwogCXUzMiBob3N0X2NyMzsKIAlzdHJ1Y3QgZGVzY19wdHIgaG9zdF9pZHRfZGVzYzsKQEAgLTU2LDggKzY1LDcgQEAKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZ3Vlc3RfZ2R0W0dEVF9FTlRSSUVTXTsKIH07CiAKLXN0cnVjdCBsZ19jcHVfYXJjaAoteworc3RydWN0IGxnX2NwdV9hcmNoIHsKIAkvKiBUaGUgR0RUIGVudHJpZXMgY29waWVkIGludG8gbGd1ZXN0X3JvX3N0YXRlIHdoZW4gcnVubmluZy4gKi8KIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZ2R0W0dEVF9FTlRSSUVTXTsKIApAQCAtNzQsNyArODIsNyBAQAogCiAJY3IwID0gcmVhZF9jcjAoKTsKIAlpZiAoIShjcjAgJiA4KSkKLQkJd3JpdGVfY3IwKGNyMHw4KTsKKwkJd3JpdGVfY3IwKGNyMCB8IDgpOwogfQogCiAvKiBGdWxsIDRHIHNlZ21lbnQgZGVzY3JpcHRvcnMsIHN1aXRhYmxlIGZvciBDUyBhbmQgRFMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbGd1ZXN0X2hjYWxsLmggYi9pbmNsdWRlL2FzbS14ODYvbGd1ZXN0X2hjYWxsLmgKaW5kZXggNzU4YjlhNS4uYTMyNDFmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2xndWVzdF9oY2FsbC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9sZ3Vlc3RfaGNhbGwuaApAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAKLS8qRzowMzEgRmlyc3QsIGhvdyBkb2VzIG91ciBHdWVzdCBjb250YWN0IHRoZSBIb3N0IHRvIGFzayBmb3IgcHJpdmlsZWdlZAorLypHOjAzMSBCdXQgZmlyc3QsIGhvdyBkb2VzIG91ciBHdWVzdCBjb250YWN0IHRoZSBIb3N0IHRvIGFzayBmb3IgcHJpdmlsZWdlZAogICogb3BlcmF0aW9ucz8gIFRoZXJlIGFyZSB0d28gd2F5czogdGhlIGRpcmVjdCB3YXkgaXMgdG8gbWFrZSBhICJoeXBlcmNhbGwiLAogICogdG8gbWFrZSByZXF1ZXN0cyBvZiB0aGUgSG9zdCBJdHNlbGYuCiAgKgpAQCAtNDYsNyArNDYsNyBAQAogewogCS8qICJpbnQiIGlzIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiB0byB0cmlnZ2VyIGEgdHJhcC4gKi8KIAlhc20gdm9sYXRpbGUoImludCAkIiBfX3N0cmluZ2lmeShMR1VFU1RfVFJBUF9FTlRSWSkKLQkJICAgICAgIC8qIFRoZSBjYWxsIGluICVlYXggKGFrYSAiYSIpIG1pZ2h0IGJlIG92ZXJ3cml0dGVuICovCisJCSAgICAgLyogVGhlIGNhbGwgaW4gJWVheCAoYWthICJhIikgbWlnaHQgYmUgb3ZlcndyaXR0ZW4gKi8KIAkJICAgICA6ICI9YSIoY2FsbCkKIAkJICAgICAgIC8qIFRoZSBhcmd1bWVudHMgYXJlIGluICVlYXgsICVlZHgsICVlYnggJiAlZWN4ICovCiAJCSAgICAgOiAiYSIoY2FsbCksICJkIihhcmcxKSwgImIiKGFyZzIpLCAiYyIoYXJnMykKQEAgLTYyLDggKzYyLDcgQEAKICNkZWZpbmUgTEdVRVNUX0lSUVMgKE5SX0lSUVMgPCAzMiA/IE5SX0lSUVM6IDMyKQogCiAjZGVmaW5lIExIQ0FMTF9SSU5HX1NJWkUgNjQKLXN0cnVjdCBoY2FsbF9hcmdzCi17CitzdHJ1Y3QgaGNhbGxfYXJncyB7CiAJLyogVGhlc2UgbWFwIGRpcmVjdGx5IG9udG8gZWF4LCBlYngsIGVjeCwgZWR4IGluIHN0cnVjdCBsZ3Vlc3RfcmVncyAqLwogCXVuc2lnbmVkIGxvbmcgYXJnMCwgYXJnMiwgYXJnMywgYXJnMTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20teDg2L2xpbmthZ2UuaAppbmRleCAzMTczOWM3Li42NGU0NDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbGlua2FnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9saW5rYWdlLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAogI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKIAorI3VuZGVmIG5vdHJhY2UKKyNkZWZpbmUgbm90cmFjZSBfX2F0dHJpYnV0ZV9fKChub19pbnN0cnVtZW50X2Z1bmN0aW9uKSkKKwogI2lmZGVmIENPTkZJR19YODZfNjQKICNkZWZpbmUgX19BTElHTiAucDJhbGlnbiA0LCwxNQogI2RlZmluZSBfX0FMSUdOX1NUUiAiLnAyYWxpZ24gNCwsMTUiCkBAIC04LDEyICsxMSw0NSBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBhc21saW5rYWdlIENQUF9BU01MSU5LQUdFIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKQotI2RlZmluZSBwcmV2ZW50X3RhaWxfY2FsbChyZXQpIF9fYXNtX18gKCIiIDogIj1yIiAocmV0KSA6ICIwIiAocmV0KSkKIC8qCiAgKiBGb3IgMzItYml0IFVNTCAtIG1hcmsgZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIGFzc2VtYmx5IHRoYXQgdXNlCiAgKiByZWdwYXJtIGlucHV0IHBhcmFtZXRlcnM6CiAgKi8KICNkZWZpbmUgYXNtcmVncGFybSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9lc24ndCBkbyBhbnl0aGluZyBzdHVwaWQgd2l0aCB0aGUKKyAqIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgLSB0aGV5IGFyZSBvd25lZCBieSB0aGUgKmNhbGxlciosIG5vdAorICogdGhlIGNhbGxlZS4gVGhpcyBqdXN0IGZvb2xzIGdjYyBpbnRvIG5vdCBzcGlsbGluZyBpbnRvIHRoZW0sCisgKiBhbmQga2VlcHMgaXQgZnJvbSBkb2luZyB0YWlsY2FsbCByZWN1cnNpb24gYW5kL29yIHVzaW5nIHRoZQorICogc3RhY2sgc2xvdHMgZm9yIHRlbXBvcmFyaWVzLCBzaW5jZSB0aGV5IGFyZSBsaXZlIGFuZCAidXNlZCIKKyAqIGFsbCB0aGUgd2F5IHRvIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgorICoKKyAqIE5PVEUhIE9uIHg4Ni02NCwgYWxsIHRoZSBhcmd1bWVudHMgYXJlIGluIHJlZ2lzdGVycywgc28gdGhpcworICogb25seSBtYXR0ZXJzIG9uIGEgMzItYml0IGtlcm5lbC4KKyAqLworI2RlZmluZSBhc21saW5rYWdlX3Byb3RlY3QobiwgcmV0LCBhcmdzLi4uKSBcCisJX19hc21saW5rYWdlX3Byb3RlY3QjI24ocmV0LCAjI2FyZ3MpCisjZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCBhcmdzLi4uKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAocmV0KSA6ICIwIiAocmV0KSwgIyNhcmdzKQorI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdDAocmV0KSBcCisJX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQpCisjZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0MShyZXQsIGFyZzEpIFwKKwlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSkKKyNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3QyKHJldCwgYXJnMSwgYXJnMikgXAorCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCAiZyIgKGFyZzEpLCAiZyIgKGFyZzIpKQorI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdDMocmV0LCBhcmcxLCBhcmcyLCBhcmczKSBcCisJX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsICJnIiAoYXJnMSksICJnIiAoYXJnMiksICJnIiAoYXJnMykpCisjZGVmaW5lIF9fYXNtbGlua2FnZV9wcm90ZWN0NChyZXQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIFwKKwlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSwgImciIChhcmcyKSwgImciIChhcmczKSwgXAorCQkJICAgICAgImciIChhcmc0KSkKKyNkZWZpbmUgX19hc21saW5rYWdlX3Byb3RlY3Q1KHJldCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAorCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCAiZyIgKGFyZzEpLCAiZyIgKGFyZzIpLCAiZyIgKGFyZzMpLCBcCisJCQkgICAgICAiZyIgKGFyZzQpLCAiZyIgKGFyZzUpKQorI2RlZmluZSBfX2FzbWxpbmthZ2VfcHJvdGVjdDYocmV0LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KSBcCisJX19hc21saW5rYWdlX3Byb3RlY3RfbihyZXQsICJnIiAoYXJnMSksICJnIiAoYXJnMiksICJnIiAoYXJnMyksIFwKKwkJCSAgICAgICJnIiAoYXJnNCksICJnIiAoYXJnNSksICJnIiAoYXJnNikpCisKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl9BTElHTk1FTlRfMTYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9sb2NhbC5oIGIvaW5jbHVkZS9hc20teDg2L2xvY2FsLmgKaW5kZXggZjg1MmM2Mi4uMzMwYTcyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2xvY2FsLmgKQEAgLTE4LDMyICsxOCwyOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaW5jKGxvY2FsX3QgKmwpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCV9BU01fSU5DICIlMCIKLQkJOiIrbSIgKGwtPmEuY291bnRlcikpOworCWFzbSB2b2xhdGlsZShfQVNNX0lOQyAiJTAiCisJCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2RlYyhsb2NhbF90ICpsKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlfQVNNX0RFQyAiJTAiCi0JCToiK20iIChsLT5hLmNvdW50ZXIpKTsKKwlhc20gdm9sYXRpbGUoX0FTTV9ERUMgIiUwIgorCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9hZGQobG9uZyBpLCBsb2NhbF90ICpsKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlfQVNNX0FERCAiJTEsJTAiCi0JCToiK20iIChsLT5hLmNvdW50ZXIpCi0JCToiaXIiIChpKSk7CisJYXNtIHZvbGF0aWxlKF9BU01fQUREICIlMSwlMCIKKwkJICAgICA6ICIrbSIgKGwtPmEuY291bnRlcikKKwkJICAgICA6ICJpciIgKGkpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3N1Yihsb25nIGksIGxvY2FsX3QgKmwpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCV9BU01fU1VCICIlMSwlMCIKLQkJOiIrbSIgKGwtPmEuY291bnRlcikKLQkJOiJpciIgKGkpKTsKKwlhc20gdm9sYXRpbGUoX0FTTV9TVUIgIiUxLCUwIgorCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKQorCQkgICAgIDogImlyIiAoaSkpOwogfQogCiAvKioKQEAgLTU5LDEwICs1NSw5IEBACiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCV9BU01fU1VCICIlMiwlMDsgc2V0ZSAlMSIKLQkJOiIrbSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQotCQk6ImlyIiAoaSkgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKF9BU01fU1VCICIlMiwlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGM7CiB9CiAKQEAgLTc4LDEwICs3Myw5IEBACiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCV9BU01fREVDICIlMDsgc2V0ZSAlMSIKLQkJOiIrbSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQotCQk6IDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShfQVNNX0RFQyAiJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOwogCXJldHVybiBjICE9IDA7CiB9CiAKQEAgLTk3LDEwICs5MSw5IEBACiB7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCV9BU01fSU5DICIlMDsgc2V0ZSAlMSIKLQkJOiIrbSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQotCQk6IDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShfQVNNX0lOQyAiJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iIChsLT5hLmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOwogCXJldHVybiBjICE9IDA7CiB9CiAKQEAgLTExNywxMCArMTEwLDkgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJX0FTTV9BREQgIiUyLCUwOyBzZXRzICUxIgotCQk6IittIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCToiaXIiIChpKSA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoX0FTTV9BREQgIiUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIittIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gYzsKIH0KIApAQCAtMTQxLDEwICsxMzMsOSBAQAogI2VuZGlmCiAJLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCiAJX19pID0gaTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJX0FTTV9YQUREICIlMCwgJTE7IgotCQk6IityIiAoaSksICIrbSIgKGwtPmEuY291bnRlcikKLQkJOiA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoX0FTTV9YQUREICIlMCwgJTE7IgorCQkgICAgIDogIityIiAoaSksICIrbSIgKGwtPmEuY291bnRlcikKKwkJICAgICA6IDogIm1lbW9yeSIpOwogCXJldHVybiBpICsgX19pOwogCiAjaWZkZWYgQ09ORklHX00zODYKQEAgLTE4MiwxMSArMTczLDExIEBACiAjZGVmaW5lIGxvY2FsX2FkZF91bmxlc3MobCwgYSwgdSkJCQkJXAogKHsJCQkJCQkJCVwKIAlsb25nIGMsIG9sZDsJCQkJCQlcCi0JYyA9IGxvY2FsX3JlYWQobCk7CQkJCQlcCisJYyA9IGxvY2FsX3JlYWQoKGwpKTsJCQkJCVwKIAlmb3IgKDs7KSB7CQkJCQkJXAogCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCiAJCQlicmVhazsJCQkJCVwKLQkJb2xkID0gbG9jYWxfY21weGNoZygobCksIGMsIGMgKyAoYSkpOwlcCisJCW9sZCA9IGxvY2FsX2NtcHhjaGcoKGwpLCBjLCBjICsgKGEpKTsJCVwKIAkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKIAkJCWJyZWFrOwkJCQkJXAogCQljID0gb2xkOwkJCQkJXApAQCAtMjE0LDI2ICsyMDUsMzAgQEAKIAogLyogTmVlZCB0byBkaXNhYmxlIHByZWVtcHRpb24gZm9yIHRoZSBjcHUgbG9jYWwgY291bnRlcnMgb3RoZXJ3aXNlIHdlIGNvdWxkCiAgICBzdGlsbCBhY2Nlc3MgYSB2YXJpYWJsZSBvZiBhIHByZXZpb3VzIENQVSBpbiBhIG5vbiBhdG9taWMgd2F5LiAqLwotI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCSAJXAotCSh7IGxvY2FsX3QgcmVzX187CQlcCi0JICAgcHJlZW1wdF9kaXNhYmxlKCk7IAkJXAotCSAgIHJlc19fID0gKGwpOwkJCVwKLQkgICBwcmVlbXB0X2VuYWJsZSgpOwkJXAotCSAgIHJlc19fOyB9KQorI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCQlcCisoewkJCQkJXAorCWxvY2FsX3QgcmVzX187CQkJXAorCXByZWVtcHRfZGlzYWJsZSgpOyAJCVwKKwlyZXNfXyA9IChsKTsJCQlcCisJcHJlZW1wdF9lbmFibGUoKTsJCVwKKwlyZXNfXzsJCQkJXAorfSkKICNkZWZpbmUgY3B1X2xvY2FsX3dyYXAobCkJCVwKLQkoeyBwcmVlbXB0X2Rpc2FibGUoKTsJCVwKLQkgICBsOwkJCQlcCi0JICAgcHJlZW1wdF9lbmFibGUoKTsgfSkJCVwKKyh7CQkJCQlcCisJcHJlZW1wdF9kaXNhYmxlKCk7CQlcCisJKGwpOwkJCQlcCisJcHJlZW1wdF9lbmFibGUoKTsJCVwKK30pCQkJCQlcCiAKLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpKQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKChsKSkpKQorI2RlZmluZSBjcHVfbG9jYWxfc2V0KGwsIGkpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIoKGwpKSwgKGkpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKChsKSkpKQorI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIoKGwpKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKChsKSkpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcigobCkpKSkKIAotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJY3B1X2xvY2FsX2luYyhsKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJY3B1X2xvY2FsX2RlYyhsKQorI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJY3B1X2xvY2FsX2luYygobCkpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyhsKQljcHVfbG9jYWxfZGVjKChsKSkKICNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCWNwdV9sb2NhbF9hZGQoKGkpLCAobCkpCiAjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQljcHVfbG9jYWxfc3ViKChpKSwgKGwpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1iaWdzbXAvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1iaWdzbXAvbWFjaF9hcGljLmgKaW5kZXggNmRmMjM1ZS4uODMyNzkwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtYmlnc21wL21hY2hfYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWJpZ3NtcC9tYWNoX2FwaWMuaApAQCAtMSwxMCArMSw3IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICiAKLQotZXh0ZXJuIHU4IGJpb3NfY3B1X2FwaWNpZFtdOwotCi0jZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIChiaW9zX2NwdV9hcGljaWRbY3B1XSkKKyNkZWZpbmUgeGFwaWNfcGh5c190b19sb2dfYXBpY2lkKGNwdSkgKHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSkKICNkZWZpbmUgZXNyX2Rpc2FibGUgKDEpCiAKIHN0YXRpYyBpbmxpbmUgaW50IGFwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQpAQCAtOTAsNyArODcsNyBAQAogc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQogewogCWlmIChtcHNfY3B1IDwgTlJfQ1BVUykKLQkJcmV0dXJuIChpbnQpIGJpb3NfY3B1X2FwaWNpZFttcHNfY3B1XTsKKwkJcmV0dXJuIChpbnQpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CiAKIAlyZXR1cm4gQkFEX0FQSUNJRDsKIH0KQEAgLTEwOSwxNyArMTA2LDYgQEAKIAlyZXR1cm4gY3B1X3BoeXNpY2FsX2lkKGNwdSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG1wY19hcGljX2lkKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSwKLQkJCSAgICAgIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbl9yZWNvcmQpCi17Ci0JcHJpbnRrKCJQcm9jZXNzb3IgIyVkICV1OiV1IEFQSUMgdmVyc2lvbiAlZFxuIiwKLQkgICAgICAgbS0+bXBjX2FwaWNpZCwKLQkgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX0ZBTUlMWV9NQVNLKSA+PiA4LAotCSAgICAgICAobS0+bXBjX2NwdWZlYXR1cmUgJiBDUFVfTU9ERUxfTUFTSykgPj4gNCwKLQkgICAgICAgbS0+bXBjX2FwaWN2ZXIpOwotCXJldHVybiBtLT5tcGNfYXBpY2lkOwotfQotCiBzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCiB7CiAJLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaAppbmRleCBlM2MyYzEwLi4wYTY2MzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICiAKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwogI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIApAQCAtMTQsMjQgKzE2LDI1IEBACiAJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOwogI2VuZGlmCiB9IAotI2RlZmluZSBUQVJHRVRfQ1BVUyAodGFyZ2V0X2NwdXMoKSkKIAogI2RlZmluZSBOT19CQUxBTkNFX0lSUSAoMCkKICNkZWZpbmUgZXNyX2Rpc2FibGUgKDApCiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KKyNkZWZpbmUgSU5UX0RFTElWRVJZX01PREUgKGdlbmFwaWMtPmludF9kZWxpdmVyeV9tb2RlKQorI2RlZmluZSBJTlRfREVTVF9NT0RFIChnZW5hcGljLT5pbnRfZGVzdF9tb2RlKQorI2RlZmluZSBUQVJHRVRfQ1BVUwkgIChnZW5hcGljLT50YXJnZXRfY3B1cygpKQorI2RlZmluZSBhcGljX2lkX3JlZ2lzdGVyZWQgKGdlbmFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCkKKyNkZWZpbmUgaW5pdF9hcGljX2xkciAoZ2VuYXBpYy0+aW5pdF9hcGljX2xkcikKKyNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCisjZGVmaW5lIHBoeXNfcGtnX2lkCShnZW5hcGljLT5waHlzX3BrZ19pZCkKKyNkZWZpbmUgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluICAgIChnZW5hcGljLT52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4pCitleHRlcm4gdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCk7CisjZWxzZQogI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSBkZXN0X0xvd2VzdFByaW8KICNkZWZpbmUgSU5UX0RFU1RfTU9ERSAxICAgICAvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgcHJvY3MgKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQotewotCXJldHVybiBwaHlzaWRfaXNzZXQoYXBpY2lkLCBiaXRtYXApOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotfQotCisjZGVmaW5lIFRBUkdFVF9DUFVTICh0YXJnZXRfY3B1cygpKQogLyoKICAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0aW5hdGlvbiBJRC4KICAqCkBAIC00OSwyNyArNTIsNTUgQEAKIAlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xEUiwgdmFsKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChHRVRfQVBJQ19JRChyZWFkX2FwaWNfaWQoKSksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQoreworCXJldHVybiBjcHVzX2FkZHIoY3B1bWFzaylbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCisJCQkJCSJGbGF0IiwgbnJfaW9hcGljcyk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCit7CisJcmV0dXJuIHBoeXNpZF9pc3NldChiaXQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKwogc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IGlvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfbWFwKQogewogCXJldHVybiBwaHlzX21hcDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2FwaWNfcm91dGluZyh2b2lkKQotewotCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3NcbiIsCi0JCQkJCSJGbGF0IiwgbnJfaW9hcGljcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCiBzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKIHsKQEAgLTc4LDggKzEwOSwxMyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCiB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmIChjcHVfcHJlc2VudChtcHNfY3B1KSkKKwkJcmV0dXJuIChpbnQpcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKKyNlbHNlCiAJaWYgKG1wc19jcHUgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCiAJCXJldHVybiAgbXBzX2NwdTsKKyNlbmRpZgogCWVsc2UKIAkJcmV0dXJuIEJBRF9BUElDSUQ7CiB9CkBAIC04OSwxNyArMTI1LDYgQEAKIAlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbXBjX2FwaWNfaWQoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptLAotCQkJICAgICAgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uX3JlY29yZCkKLXsKLQlwcmludGsoIlByb2Nlc3NvciAjJWQgJXU6JXUgQVBJQyB2ZXJzaW9uICVkXG4iLAotCSAgICAgICBtLT5tcGNfYXBpY2lkLAotCSAgICAgICAobS0+bXBjX2NwdWZlYXR1cmUgJiBDUFVfRkFNSUxZX01BU0spID4+IDgsCi0JICAgICAgIChtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9NT0RFTF9NQVNLKSA+PiA0LAotCSAgICAgICBtLT5tcGNfYXBpY3Zlcik7Ci0JcmV0dXJuIG0tPm1wY19hcGljaWQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wb3J0aW9fcmVtYXAodm9pZCkKIHsKIH0KQEAgLTEwOSwyMyArMTM0LDkgQEAKIAlyZXR1cm4gcGh5c2lkX2lzc2V0KGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKLXsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2tfdCBjcHVtYXNrKQotewotCXJldHVybiBjcHVzX2FkZHIoY3B1bWFzaylbMF07Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHBoeXNfcGtnX2lkKHUzMiBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKLX0KLQorI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwogI2VuZGlmIC8qIF9fQVNNX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWNkZWYuaAppbmRleCBhZTk4NDEzLi5lNGIyOWJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpY2RlZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljZGVmLmgKQEAgLTMsMTAgKzMsMTQgQEAKIAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lCUFQSUNfSURfTUFTSwkJKDB4RkZ1PDwyNCkKKyNkZWZpbmUgR0VUX0FQSUNfSUQoeCkgICAgICAgICAgKCgoeCk+PjI0KSYweEZGdSkKKyNkZWZpbmUJU0VUX0FQSUNfSUQoeCkJCSgoKHgpPDwyNCkpCisjZWxzZQogI2RlZmluZQkJQVBJQ19JRF9NQVNLCQkoMHhGPDwyNCkKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpIAoteyAKK3sKIAl1bnNpZ25lZCBpbnQgdmVyID0gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKIAlpZiAoQVBJQ19YQVBJQyh2ZXIpKQogCQlyZXR1cm4gKCgoeCk+PjI0KSYweEZGKTsKQEAgLTE1LDUgKzE5LDYgQEAKIH0gCiAKICNkZWZpbmUJCUdFVF9BUElDX0lEKHgpCWdldF9hcGljX2lkKHgpCisjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfaXBpLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfaXBpLmgKaW5kZXggMGRiYTI0NC4uYmUzMjMzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2lwaS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9pcGkuaApAQCAtOSwxMCArOSwxNSBAQAogCiBleHRlcm4gaW50IG5vX2Jyb2FkY2FzdDsKIAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNpbmNsdWRlIDxhc20vZ2VuYXBpYy5oPgorI2RlZmluZSBzZW5kX0lQSV9tYXNrIChnZW5hcGljLT5zZW5kX0lQSV9tYXNrKQorI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgdmVjdG9yKQogewogCXNlbmRfSVBJX21hc2tfYml0bWFzayhtYXNrLCB2ZWN0b3IpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2xvY2FsX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKIHsKQEAgLTMzLDYgKzM4LDEwIEBACiAJCV9fc2VuZF9JUElfc2hvcnRjdXQoQVBJQ19ERVNUX0FMTElOQywgdmVjdG9yKTsKIH0KIAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgc2VuZF9JUElfYWxsYnV0c2VsZiAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZikKKyNkZWZpbmUgc2VuZF9JUElfYWxsIChnZW5hcGljLT5zZW5kX0lQSV9hbGwpCisjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKIHsKIAkvKgpAQCAtNTAsNSArNTksNiBAQAogewogCV9fbG9jYWxfc2VuZF9JUElfYWxsKHZlY3Rvcik7CiB9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVBJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oCmluZGV4IDFkMzgzMjQuLmQxNDEwODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHBhcnNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX21wcGFyc2UuaApAQCAtMSwxNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfTVBQQVJTRV9ICiAjZGVmaW5lIF9fQVNNX01BQ0hfTVBQQVJTRV9ICiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtcGNfb2VtX2J1c19pbmZvKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwgY2hhciAqbmFtZSwgCi0JCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uKQotewotLy8JRHByaW50aygiQnVzICMlZCBpcyAlc1xuIiwgbS0+bXBjX2J1c2lkLCBuYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIAotCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKLXsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgCiAJCWNoYXIgKnByb2R1Y3RpZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9yZWJvb3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9yZWJvb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkZWU2YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfcmVib290LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogIGFyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvbWFjaF9yZWJvb3QuaAotICoKLSAqICBNYWNoaW5lIHNwZWNpZmljIHJlYm9vdCBmdW5jdGlvbnMgZm9yIGdlbmVyaWMuCi0gKiAgU3BsaXQgb3V0IGZyb20gcmVib290LmMgYnkgT3NhbXUgVG9taXRhIDx0b21pdGFAY2luZXQuY28uanA+Ci0gKi8KLSNpZm5kZWYgX01BQ0hfUkVCT09UX0gKLSNkZWZpbmUgX01BQ0hfUkVCT09UX0gKLQotc3RhdGljIGlubGluZSB2b2lkIGtiX3dhaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAweDEwMDAwOyBpKyspCi0JCWlmICgoaW5iX3AoMHg2NCkgJiAweDAyKSA9PSAwKQotCQkJYnJlYWs7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWNoX3JlYm9vdCh2b2lkKQotewotCWludCBpOwotCi0JLyogb2xkIG1ldGhvZCwgd29ya3Mgb24gbW9zdCBtYWNoaW5lcyAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWtiX3dhaXQoKTsKLQkJdWRlbGF5KDUwKTsKLQkJb3V0YigweGZlLCAweDY0KTsJLyogcHVsc2UgcmVzZXQgbG93ICovCi0JCXVkZWxheSg1MCk7Ci0JfQotCi0JLyogTmV3IG1ldGhvZDogc2V0cyB0aGUgIlN5c3RlbSBmbGFnIiB3aGljaCwgd2hlbiBzZXQsIGluZGljYXRlcwotCSAqIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUga2V5Ym9hcmQgY29udHJvbGxlciBzZWxmLXRlc3QgKEJhc2ljCi0JICogQXNzdXJhbmNlIFRlc3QsIEJBVCkuICBUaGlzIGlzIG5lZWRlZCBmb3Igc29tZSBtYWNoaW5lcyB3aXRoIG5vCi0JICoga2V5Ym9hcmQgcGx1Z2dlZCBpbi4gIFRoaXMgcmVhZC1tb2RpZnktd3JpdGUgc2VxdWVuY2Ugc2V0cyBvbmx5IHRoZQotCSAqIHN5c3RlbSBmbGFnCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJaW50IGNtZDsKLQotCQlvdXRiKDB4MjAsIDB4NjQpOwkvKiByZWFkIENvbnRyb2xsZXIgQ29tbWFuZCBCeXRlICovCi0JCXVkZWxheSg1MCk7Ci0JCWtiX3dhaXQoKTsKLQkJdWRlbGF5KDUwKTsKLQkJY21kID0gaW5iKDB4NjApOwotCQl1ZGVsYXkoNTApOwotCQlrYl93YWl0KCk7Ci0JCXVkZWxheSg1MCk7Ci0JCW91dGIoMHg2MCwgMHg2NCk7CS8qIHdyaXRlIENvbnRyb2xsZXIgQ29tbWFuZCBCeXRlICovCi0JCXVkZWxheSg1MCk7Ci0JCWtiX3dhaXQoKTsKLQkJdWRlbGF5KDUwKTsKLQkJb3V0YihjbWQgfCAweDE0LCAweDYwKTsgLyogc2V0ICJTeXN0ZW0gZmxhZyIgYW5kICJLZXlib2FyZCBEaXNhYmxlZCIgKi8KLQkJdWRlbGF5KDUwKTsKLQkJa2Jfd2FpdCgpOwotCQl1ZGVsYXkoNTApOwotCQlvdXRiKDB4ZmUsIDB4NjQpOwkvKiBwdWxzZSByZXNldCBsb3cgKi8KLQkJdWRlbGF5KDUwKTsKLQl9Ci19Ci0KLSNlbmRpZiAvKiAhX01BQ0hfUkVCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvc21wYm9vdF9ob29rcy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmgKaW5kZXggN2Y0NWY2My4uM2ZmMmM1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9zbXBib290X2hvb2tzLmgKQEAgLTQxLDQgKzQxLDExIEBACiAJICovCiAJaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQogCQlzZXR1cF9JT19BUElDKCk7CisJZWxzZQorCQlucl9pb2FwaWNzID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3RfY2xlYXJfaW9fYXBpYyh2b2lkKQoreworCW5yX2lvYXBpY3MgPSAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZXM3MDAwL21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZXM3MDAwL21hY2hfYXBpYy5oCmluZGV4IGQyMzAxMWYuLmZiYzhhZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWVzNzAwMC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1lczcwMDAvbWFjaF9hcGljLmgKQEAgLTEsOSArMSw3IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICiAKLWV4dGVybiB1OCBiaW9zX2NwdV9hcGljaWRbXTsKLQotI2RlZmluZSB4YXBpY19waHlzX3RvX2xvZ19hcGljaWQoY3B1KSAoYmlvc19jcHVfYXBpY2lkW2NwdV0pCisjZGVmaW5lIHhhcGljX3BoeXNfdG9fbG9nX2FwaWNpZChjcHUpIHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KQogI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKIAogc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCkBAIC04MCw3ICs3OCw3IEBACiBleHRlcm4gaW50IGFwaWNfdmVyc2lvbiBbTUFYX0FQSUNTXTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9hcGljX3JvdXRpbmcodm9pZCkKIHsKLQlpbnQgYXBpYyA9IGJpb3NfY3B1X2FwaWNpZFtzbXBfcHJvY2Vzc29yX2lkKCldOworCWludCBhcGljID0gcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3MsIHRhcmdldCBjcHVzICVseFxuIiwKIAkJKGFwaWNfdmVyc2lvblthcGljXSA9PSAweDE0KSA/IAogCQkiUGh5c2ljYWwgQ2x1c3RlciIgOiAiTG9naWNhbCBDbHVzdGVyIiwgbnJfaW9hcGljcywgY3B1c19hZGRyKFRBUkdFVF9DUFVTKVswXSk7CkBAIC0xMDIsNyArMTAwLDcgQEAKIAlpZiAoIW1wc19jcHUpCiAJCXJldHVybiBib290X2NwdV9waHlzaWNhbF9hcGljaWQ7CiAJZWxzZSBpZiAobXBzX2NwdSA8IE5SX0NQVVMpCi0JCXJldHVybiAoaW50KSBiaW9zX2NwdV9hcGljaWRbbXBzX2NwdV07CisJCXJldHVybiAoaW50KSBwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIG1wc19jcHUpOwogCWVsc2UKIAkJcmV0dXJuIEJBRF9BUElDSUQ7CiB9CkBAIC0xMjksMTYgKzEyNyw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbXBjX2FwaWNfaWQoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptLCBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdW51c2VkKQotewotCXByaW50aygiUHJvY2Vzc29yICMlZCAldToldSBBUElDIHZlcnNpb24gJWRcbiIsCi0JICAgICAgIG0tPm1wY19hcGljaWQsCi0JICAgICAgIChtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9GQU1JTFlfTUFTSykgPj4gOCwKLQkgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX01PREVMX01BU0spID4+IDQsCi0JICAgICAgIG0tPm1wY19hcGljdmVyKTsKLQlyZXR1cm4gKG0tPm1wY19hcGljaWQpOwotfQotCiBzdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCiB7CiAJLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCkBAIC0xNTMsNyArMTQxLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOwogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgY3B1X3BoeXNpY2FsX2FwaWNpZCkKIHsKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IEdFVF9BUElDX0lEKHJlYWRfYXBpY19pZCgpKTsKIAlyZXR1cm4gKDEpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1lczcwMDAvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1lczcwMDAvbWFjaF9tcHBhcnNlLmgKaW5kZXggNTJlZTc1Yy4uZWYyNmQzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZXM3MDAwL21hY2hfbXBwYXJzZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWVzNzAwMC9tYWNoX21wcGFyc2UuaApAQCAtMywxNyArMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtcGNfb2VtX2J1c19pbmZvKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwgY2hhciAqbmFtZSwKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCi17Ci0JRHByaW50aygiQnVzICMlZCBpcyAlc1xuIiwgbS0+bXBjX2J1c2lkLCBuYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sCi0JCQkJc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uKQotewotfQotCiBleHRlcm4gaW50IHBhcnNlX3VuaXN5c19vZW0gKGNoYXIgKm9lbXB0cik7CiBleHRlcm4gaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKTsKIGV4dGVybiB2b2lkIHNldHVwX3VuaXN5cyh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oCmluZGV4IGEyMzZlNzAuLjZlZmYzNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBjcHVfdG9fbG9naWNhbF9hcGljaWQgKGdlbmFwaWMtPmNwdV90b19sb2dpY2FsX2FwaWNpZCkgCiAjZGVmaW5lIGNwdV9wcmVzZW50X3RvX2FwaWNpZCAoZ2VuYXBpYy0+Y3B1X3ByZXNlbnRfdG9fYXBpY2lkKQogI2RlZmluZSBhcGljaWRfdG9fY3B1X3ByZXNlbnQgKGdlbmFwaWMtPmFwaWNpZF90b19jcHVfcHJlc2VudCkKLSNkZWZpbmUgbXBjX2FwaWNfaWQgKGdlbmFwaWMtPm1wY19hcGljX2lkKSAKICNkZWZpbmUgc2V0dXBfcG9ydGlvX3JlbWFwIChnZW5hcGljLT5zZXR1cF9wb3J0aW9fcmVtYXApCiAjZGVmaW5lIGNoZWNrX2FwaWNpZF9wcmVzZW50IChnZW5hcGljLT5jaGVja19hcGljaWRfcHJlc2VudCkKICNkZWZpbmUgY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCAoZ2VuYXBpYy0+Y2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfbXBwYXJzZS5oCmluZGV4IGRiZDlmY2UuLjBkMGI1YmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9tcHBhcnNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX21wcGFyc2UuaApAQCAtMSwxMSArMSw2IEBACiAjaWZuZGVmIF9NQUNIX01QUEFSU0VfSAogI2RlZmluZSBfTUFDSF9NUFBBUlNFX0ggMQogCi0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLQotI2RlZmluZSBtcGNfb2VtX2J1c19pbmZvIChnZW5hcGljLT5tcGNfb2VtX2J1c19pbmZvKQotI2RlZmluZSBtcGNfb2VtX3BjaV9idXMgKGdlbmFwaWMtPm1wY19vZW1fcGNpX2J1cykKLQogaW50IG1wc19vZW1fY2hlY2soc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sIGNoYXIgKnByb2R1Y3RpZCk7IAogaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOyAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtbnVtYXEvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1udW1hcS9tYWNoX2FwaWMuaAppbmRleCAzYjYzN2ZhLi43NWE1NmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1udW1hcS9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1udW1hcS9tYWNoX2FwaWMuaApAQCAtOTUsNiArOTUsMTYgQEAKIAlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGNwdSArIDQqbm9kZSk7CiB9CiAKK3N0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uIHsKKwl1bnNpZ25lZCBjaGFyIG1wY190eXBlOworCXVuc2lnbmVkIGNoYXIgdHJhbnNfbGVuOworCXVuc2lnbmVkIGNoYXIgdHJhbnNfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHRyYW5zX3F1YWQ7CisJdW5zaWduZWQgY2hhciB0cmFuc19nbG9iYWw7CisJdW5zaWduZWQgY2hhciB0cmFuc19sb2NhbDsKKwl1bnNpZ25lZCBzaG9ydCB0cmFuc19yZXNlcnZlZDsKK307CisKIHN0YXRpYyBpbmxpbmUgaW50IG1wY19hcGljX2lkKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSwgCiAJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fcmVjb3JkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtbnVtYXEvbWFjaF9tcHBhcnNlLmggYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1udW1hcS9tYWNoX21wcGFyc2UuaAppbmRleCA1MWJiYWM4Li40NTliMTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1udW1hcS9tYWNoX21wcGFyc2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1udW1hcS9tYWNoX21wcGFyc2UuaApAQCAtMSwyNSArMSwxMCBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX01QUEFSU0VfSAogI2RlZmluZSBfX0FTTV9NQUNIX01QUEFSU0VfSAogCi1zdGF0aWMgaW5saW5lIHZvaWQgbXBjX29lbV9idXNfaW5mbyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIGNoYXIgKm5hbWUsIAotCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKLXsKLQlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uLT50cmFuc19xdWFkOwotCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uLT50cmFuc19sb2NhbDsKLQotCW1wX2J1c19pZF90b19ub2RlW20tPm1wY19idXNpZF0gPSBxdWFkOwotCW1wX2J1c19pZF90b19sb2NhbFttLT5tcGNfYnVzaWRdID0gbG9jYWw7Ci0JcHJpbnRrKCJCdXMgIyVkIGlzICVzIChub2RlICVkKVxuIiwgbS0+bXBjX2J1c2lkLCBuYW1lLCBxdWFkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIAotCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKLXsKLQlpbnQgcXVhZCA9IHRyYW5zbGF0aW9uLT50cmFuc19xdWFkOwotCWludCBsb2NhbCA9IHRyYW5zbGF0aW9uLT50cmFuc19sb2NhbDsKLQotCXF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkW3F1YWRdW2xvY2FsXSA9IG0tPm1wY19idXNpZDsKLX0KK2V4dGVybiB2b2lkIG1wY19vZW1fYnVzX2luZm8oc3RydWN0IG1wY19jb25maWdfYnVzICptLCBjaGFyICpuYW1lLAorCQkJICAgICBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pOworZXh0ZXJuIHZvaWQgbXBjX29lbV9wY2lfYnVzKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqbSwKKwlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pOwogCiAvKiBIb29rIGZyb20gZ2VuZXJpYyBBQ1BJIHRhYmxlcy5jICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXJkYzMyMXgvZ3Bpby5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtcmRjMzIxeC9ncGlvLmgKaW5kZXggZGIzMWI5Mi4uYWNjZTBiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtcmRjMzIxeC9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtcmRjMzIxeC9ncGlvLmgKQEAgLTUsMTkgKzUsMjAgQEAKIGV4dGVybiB2b2lkIHJkY19ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwogZXh0ZXJuIGludCByZGNfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CiBleHRlcm4gaW50IHJkY19ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKLQorZXh0ZXJuIGludCByZGNfZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKK2V4dGVybiB2b2lkIHJkY19ncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7CitleHRlcm4gdm9pZCBfX2luaXQgcmRjMzIxeF9ncGlvX3NldHVwKHZvaWQpOwogCiAvKiBXcmFwcGVycyBmb3IgdGhlIGFyY2gtbmV1dHJhbCBHUElPIEFQSSAqLwogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCiB7Ci0JLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLwotCXJldHVybiAwOworCXJldHVybiByZGNfZ3Bpb19yZXF1ZXN0KGdwaW8sIGxhYmVsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQogewotCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwlyZGNfZ3Bpb19mcmVlKGdwaW8pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtcmRjMzIxeC9yZGMzMjF4X2RlZnMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXJkYzMyMXgvcmRjMzIxeF9kZWZzLmgKaW5kZXggODM4YmE4Zi4uYzhlOWM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtcmRjMzIxeC9yZGMzMjF4X2RlZnMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1yZGMzMjF4L3JkYzMyMXhfZGVmcy5oCkBAIC0zLDQgKzMsMTAgQEAKIC8qIEdlbmVyYWwgcHVycG9zZSBjb25maWd1cmF0aW9uIGFuZCBkYXRhIHJlZ2lzdGVycyAqLwogI2RlZmluZSBSREMzMjEwX0NGR1JFR19BRERSICAgICAweDBDRjgKICNkZWZpbmUgUkRDMzIxMF9DRkdSRUdfREFUQSAgICAgMHgwQ0ZDCi0jZGVmaW5lIFJEQ19NQVhfR1BJTwkJMHgzQQorCisjZGVmaW5lIFJEQzMyMVhfR1BJT19DVFJMX1JFRzEJMHg0OAorI2RlZmluZSBSREMzMjFYX0dQSU9fQ1RSTF9SRUcyCTB4ODQKKyNkZWZpbmUgUkRDMzIxWF9HUElPX0RBVEFfUkVHMQkweDRjCisjZGVmaW5lIFJEQzMyMVhfR1BJT19EQVRBX1JFRzIJMHg4OAorCisjZGVmaW5lIFJEQzMyMVhfTUFYX0dQSU8JNTgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaAppbmRleCAwNjJjOTdmLi4xZjc2YzJlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaApAQCAtNDAsNyArNDAsNiBAQAogCiAjZGVmaW5lIGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgKChhcGljaWQpICYgWEFQSUNfREVTVF9DTFVTVEVSX01BU0spCiAKLWV4dGVybiB1OCBiaW9zX2NwdV9hcGljaWRbXTsKIGV4dGVybiB1OCBjcHVfMl9sb2dpY2FsX2FwaWNpZFtdOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hcGljX2xkcih2b2lkKQpAQCAtMTEwLDcgKzEwOSw3IEBACiBzdGF0aWMgaW5saW5lIGludCBjcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCiB7CiAJaWYgKG1wc19jcHUgPCBOUl9DUFVTKQotCQlyZXR1cm4gKGludCliaW9zX2NwdV9hcGljaWRbbXBzX2NwdV07CisJCXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7CiAJZWxzZQogCQlyZXR1cm4gQkFEX0FQSUNJRDsKIH0KQEAgLTEyNiwxNyArMTI1LDYgQEAKIAlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKDApOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtcGNfYXBpY19pZChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0sCi0JCQkgICAgICBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb25fcmVjb3JkKQotewotCXByaW50aygiUHJvY2Vzc29yICMlZCAldToldSBBUElDIHZlcnNpb24gJWRcbiIsCi0JICAgICAgIG0tPm1wY19hcGljaWQsCi0JICAgICAgIChtLT5tcGNfY3B1ZmVhdHVyZSAmIENQVV9GQU1JTFlfTUFTSykgPj4gOCwKLQkgICAgICAgKG0tPm1wY19jcHVmZWF0dXJlICYgQ1BVX01PREVMX01BU0spID4+IDQsCi0JICAgICAgIG0tPm1wY19hcGljdmVyKTsKLQlyZXR1cm4gbS0+bXBjX2FwaWNpZDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BvcnRpb19yZW1hcCh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtc3VtbWl0L21hY2hfbXBwYXJzZS5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtc3VtbWl0L21hY2hfbXBwYXJzZS5oCmluZGV4IGMyNTIwNTMuLmZkZjU5MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXN1bW1pdC9tYWNoX21wcGFyc2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1zdW1taXQvbWFjaF9tcHBhcnNlLmgKQEAgLTEyLDE3ICsxMiw2IEBACiAjZGVmaW5lIHNldHVwX3N1bW1pdCgpCXt9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fYnVzX2luZm8oc3RydWN0IG1wY19jb25maWdfYnVzICptLCBjaGFyICpuYW1lLCAKLQkJCQlzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdHJhbnNsYXRpb24pCi17Ci0JRHByaW50aygiQnVzICMlZCBpcyAlc1xuIiwgbS0+bXBjX2J1c2lkLCBuYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1wY19vZW1fcGNpX2J1cyhzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgKm0sIAotCQkJCXN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICp0cmFuc2xhdGlvbikKLXsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbXBzX29lbV9jaGVjayhzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgCiAJCWNoYXIgKnByb2R1Y3RpZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL21hY2hfYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3MvbWFjaF9hcGljLmgKaW5kZXggZWZhYzZmMC4uYTllZjMzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3MvbWFjaF9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3MvbWFjaF9hcGljLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpCiB7Ci0JcmV0dXJuIHBoeXNpZF9pc3NldChHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJcmV0dXJuIHBoeXNpZF9pc3NldChHRVRfQVBJQ19JRChyZWFkX2FwaWNfaWQoKSksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL3NtcGJvb3RfaG9va3MuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLXZpc3dzL3NtcGJvb3RfaG9va3MuaAppbmRleCBkOTI2NDcxLi5jOWI4M2UzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC12aXN3cy9zbXBib290X2hvb2tzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtdmlzd3Mvc21wYm9vdF9ob29rcy5oCkBAIC0yMiwzICsyMiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc21wYm9vdF9zZXR1cF9pb19hcGljKHZvaWQpCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X2NsZWFyX2lvX2FwaWModm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoX2FwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3MTE1YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaF9hcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX01BQ0hfQVBJQ19ICi0jZGVmaW5lIF9fQVNNX01BQ0hfQVBJQ19ICi0KLS8qCi0gKiBDb3B5cmlnaHQgMjAwNCBKYW1lcyBDbGV2ZXJkb24sIElCTS4KLSAqIFN1YmplY3QgdG8gdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdi4yCi0gKgotICogR2VuZXJpYyBBUElDIHN1Yi1hcmNoIGRlZmluZXMuCi0gKgotICogSGFja2VkIGZvciB4ODYtNjQgYnkgSmFtZXMgQ2xldmVyZG9uIGZyb20gaTM4NiBhcmNoaXRlY3R1cmUgY29kZSBieQotICogTWFydGluIEJsaWdoLCBBbmRpIEtsZWVuLCBKYW1lcyBCb3R0b21sZXksIEpvaG4gU3R1bHR6LCBhbmQKLSAqIEphbWVzIENsZXZlcmRvbi4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2dlbmFwaWMuaD4KLQotI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZ2VuYXBpYy0+aW50X2RlbGl2ZXJ5X21vZGUpCi0jZGVmaW5lIElOVF9ERVNUX01PREUgKGdlbmFwaWMtPmludF9kZXN0X21vZGUpCi0jZGVmaW5lIFRBUkdFVF9DUFVTCSAgKGdlbmFwaWMtPnRhcmdldF9jcHVzKCkpCi0jZGVmaW5lIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgkoZ2VuYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQotI2RlZmluZSBhcGljX2lkX3JlZ2lzdGVyZWQgKGdlbmFwaWMtPmFwaWNfaWRfcmVnaXN0ZXJlZCkKLSNkZWZpbmUgaW5pdF9hcGljX2xkciAoZ2VuYXBpYy0+aW5pdF9hcGljX2xkcikKLSNkZWZpbmUgc2VuZF9JUElfbWFzayAoZ2VuYXBpYy0+c2VuZF9JUElfbWFzaykKLSNkZWZpbmUgc2VuZF9JUElfYWxsYnV0c2VsZiAoZ2VuYXBpYy0+c2VuZF9JUElfYWxsYnV0c2VsZikKLSNkZWZpbmUgc2VuZF9JUElfYWxsIChnZW5hcGljLT5zZW5kX0lQSV9hbGwpCi0jZGVmaW5lIGNwdV9tYXNrX3RvX2FwaWNpZCAoZ2VuYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkKQotI2RlZmluZSBwaHlzX3BrZ19pZAkoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCi0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS14ODYvbWMxNDY4MThydGMuaAppbmRleCBjZGQ5Zjk2Li5kYWYxY2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWMxNDY4MThydGMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWMxNDY4MThydGMuaApAQCAtNDIsNyArNDIsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGxvY2tfY21vcyh1bnNpZ25lZCBjaGFyIHJlZykKIHsKIAl1bnNpZ25lZCBsb25nIG5ldzsKLQluZXcgPSAoKHNtcF9wcm9jZXNzb3JfaWQoKSsxKSA8PCA4KSB8IHJlZzsKKwluZXcgPSAoKHNtcF9wcm9jZXNzb3JfaWQoKSArIDEpIDw8IDgpIHwgcmVnOwogCWZvciAoOzspIHsKIAkJaWYgKGNtb3NfbG9jaykgewogCQkJY3B1X3JlbGF4KCk7CkBAIC01NywyMiArNTcsMjYgQEAKIHsKIAljbW9zX2xvY2sgPSAwOwogfQorCiBzdGF0aWMgaW5saW5lIGludCBkb19pX2hhdmVfbG9ja19jbW9zKHZvaWQpCiB7Ci0JcmV0dXJuIChjbW9zX2xvY2sgPj4gOCkgPT0gKHNtcF9wcm9jZXNzb3JfaWQoKSsxKTsKKwlyZXR1cm4gKGNtb3NfbG9jayA+PiA4KSA9PSAoc21wX3Byb2Nlc3Nvcl9pZCgpICsgMSk7CiB9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjdXJyZW50X2xvY2tfY21vc19yZWcodm9pZCkKIHsKIAlyZXR1cm4gY21vc19sb2NrICYgMHhmZjsKIH0KLSNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpIFwKKworI2RlZmluZSBsb2NrX2Ntb3NfcHJlZml4KHJlZykJCQlcCiAJZG8gewkJCQkJXAogCQl1bnNpZ25lZCBsb25nIGNtb3NfZmxhZ3M7CVwKIAkJbG9jYWxfaXJxX3NhdmUoY21vc19mbGFncyk7CVwKIAkJbG9ja19jbW9zKHJlZykKLSNkZWZpbmUgbG9ja19jbW9zX3N1ZmZpeChyZWcpIFwKLQkJdW5sb2NrX2Ntb3MoKTsJCQlcCi0JCWxvY2FsX2lycV9yZXN0b3JlKGNtb3NfZmxhZ3MpOwlcCisKKyNkZWZpbmUgbG9ja19jbW9zX3N1ZmZpeChyZWcpCQkJXAorCXVubG9ja19jbW9zKCk7CQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShjbW9zX2ZsYWdzKTsJCVwKIAl9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpIGRvIHt9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21jYV9kbWEuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tY2FfZG1hLmgKaW5kZXggZmJiMWYzYi4uYzNkY2E2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21jYV9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWNhX2RtYS5oCkBAIC0xMiwxOCArMTIsMTggQEAKICAqICAgY291bnQgYnkgMiB3aGVuIHVzaW5nIDE2LWJpdCBkbWE7IHRoYXQgaXMgbm90IGhhbmRsZWQgYnkgdGhlc2UgZnVuY3Rpb25zLgogICoKICAqIFJhbWVuIE5vb2RsZXMgYXJlIHl1bW15LgotICogCi0gKiAgMTk5OCBUeW1tIFR3aWxsbWFuIDx0eW1tQGNvbXB1dGVyLm9yZz4gIAorICoKKyAqICAxOTk4IFR5bW0gVHdpbGxtYW4gPHR5bW1AY29tcHV0ZXIub3JnPgogICovCiAKIC8qCi0gKiBSZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBieSB0aGUgRE1BIGNvbnRyb2xsZXI7IEZOIGlzIHRoZSBmdW5jdGlvbiByZWdpc3RlciAKKyAqIFJlZ2lzdGVycyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBETUEgY29udHJvbGxlcjsgRk4gaXMgdGhlIGZ1bmN0aW9uIHJlZ2lzdGVyCiAgKiAgICh0ZWxsIHRoZSBjb250cm9sbGVyIHdoYXQgdG8gZG8pIGFuZCBFWEUgaXMgdGhlIGV4ZWN1dGlvbiByZWdpc3RlciAoaG93CiAgKiAgIHRvIGRvIGl0KQogICovCiAKICNkZWZpbmUgTUNBX0RNQV9SRUdfRk4gIDB4MTgKLSNkZWZpbmUgTUNBX0RNQV9SRUdfRVhFIDB4MUEgCisjZGVmaW5lIE1DQV9ETUFfUkVHX0VYRSAweDFBCiAKIC8qCiAgKiBGdW5jdGlvbnMgdGhhdCB0aGUgRE1BIGNvbnRyb2xsZXIgY2FuIGRvCkBAIC00Myw5ICs0Myw5IEBACiAKIC8qCiAgKiBNb2RlcyAodXNlZCBieSBzZXR0aW5nIE1DQV9ETUFfRk5fTU9ERSBpbiB0aGUgZnVuY3Rpb24gcmVnaXN0ZXIpCi0gKiAKKyAqCiAgKiBOb3RlIHRoYXQgdGhlIE1PREVfUkVBRCBpcyByZWFkIGZyb20gbWVtb3J5ICh3cml0ZSB0byBkZXZpY2UpLCBhbmQKLSAqICAgTU9ERV9XUklURSBpcyB2aWNlLXZlcnNhLiAgCisgKiAgIE1PREVfV1JJVEUgaXMgdmljZS12ZXJzYS4KICAqLwogCiAjZGVmaW5lIE1DQV9ETUFfTU9ERV9YRkVSICAweDA0ICAvKiByZWFkIGJ5IGRlZmF1bHQgKi8KQEAgLTYzLDcgKzYzLDcgQEAKICAqCUlSUSBjb250ZXh0LgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbWNhX2VuYWJsZV9kbWEodW5zaWduZWQgaW50IGRtYW5yKQorc3RhdGljIGlubGluZSB2b2lkIG1jYV9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKIHsKIAlvdXRiKE1DQV9ETUFfRk5fUkVTRVRfTUFTSyB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7CiB9CkBAIC03Niw3ICs3Niw3IEBACiAgKglJUlEgY29udGV4dC4KICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1jYV9kaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpCitzdGF0aWMgaW5saW5lIHZvaWQgbWNhX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBkbWFucikKIHsKIAlvdXRiKE1DQV9ETUFfRk5fTUFTSyB8IGRtYW5yLCBNQ0FfRE1BX1JFR19GTik7CiB9CkBAIC04NywxMCArODcsMTAgQEAKICAqCUBhOiAyNGJpdCBidXMgYWRkcmVzcwogICoKICAqCUxvYWQgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgaW4gdGhlIERNQSBjb250cm9sbGVyLiBUaGlzIGhhcyBhIDI0Yml0Ci0gKglsaW1pdGF0aW9uICgxNk1iKS4gCisgKglsaW1pdGF0aW9uICgxNk1iKS4KICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1jYV9zZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgYSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2Ffc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGEpCiB7CiAJb3V0YihNQ0FfRE1BX0ZOX1NFVF9BRERSIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKIAlvdXRiKGEgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOwpAQCAtMTA2LDE0ICsxMDYsMTQgQEAKICAqCWxpbWl0YXRpb24gKDE2TWIpLiBUaGUgcmV0dXJuIGlzIGEgYnVzIGFkZHJlc3MuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IG1jYV9nZXRfZG1hX2FkZHIodW5zaWduZWQgaW50IGRtYW5yKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWNhX2dldF9kbWFfYWRkcih1bnNpZ25lZCBpbnQgZG1hbnIpCiB7CiAJdW5zaWduZWQgaW50IGFkZHI7CiAKIAlvdXRiKE1DQV9ETUFfRk5fR0VUX0FERFIgfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOwogCWFkZHIgPSBpbmIoTUNBX0RNQV9SRUdfRVhFKTsKIAlhZGRyIHw9IGluYihNQ0FfRE1BX1JFR19FWEUpIDw8IDg7Ci0JYWRkciB8PSBpbmIoTUNBX0RNQV9SRUdfRVhFKSA8PCAxNjsgIAorCWFkZHIgfD0gaW5iKE1DQV9ETUFfUkVHX0VYRSkgPDwgMTY7CiAKIAlyZXR1cm4gYWRkcjsKIH0KQEAgLTEyNyw3ICsxMjcsNyBAQAogICoJU2V0dGluZyBhIGNvdW50IG9mIHplcm8gd2lsbCBub3QgZG8gd2hhdCB5b3UgZXhwZWN0LgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbWNhX3NldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgbWNhX3NldF9kbWFfY291bnQodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJY291bnQtLTsgIC8qIHRyYW5zZmVycyBvbmUgbW9yZSB0aGFuIGNvdW50IC0tIGNvcnJlY3QgZm9yIHRoaXMgKi8KIApAQCAtMTQ0LDcgKzE0NCw3IEBACiAgKglvbiB0aGlzIERNQSBjaGFubmVsLgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBtY2FfZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBkbWFucikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1jYV9nZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGRtYW5yKQogewogCXVuc2lnbmVkIHNob3J0IGNvdW50OwogCkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogICoJd2l0aCBhbiBJL08gcG9ydCB0YXJnZXQuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBtY2Ffc2V0X2RtYV9pbyh1bnNpZ25lZCBpbnQgZG1hbnIsIHVuc2lnbmVkIGludCBpb19hZGRyKQorc3RhdGljIGlubGluZSB2b2lkIG1jYV9zZXRfZG1hX2lvKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IGlvX2FkZHIpCiB7CiAJLyoKIAkgKiBETUEgZnJvbSBhIHBvcnQgYWRkcmVzcyAtLSBzZXQgdGhlIGlvIGFkZHJlc3MKIAkgKi8KLQkKKwogCW91dGIoTUNBX0RNQV9GTl9TRVRfSU8gfCBkbWFuciwgTUNBX0RNQV9SRUdfRk4pOwogCW91dGIoaW9fYWRkciAmIDB4ZmYsIE1DQV9ETUFfUkVHX0VYRSk7CiAJb3V0YigoaW9fYWRkciA+PiAgOCkgJiAweGZmLCBNQ0FfRE1BX1JFR19FWEUpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAgKgklTUNBX0RNQV9NT0RFXzE2IHRvIGRvIDE2Yml0IHRyYW5zZmVycy4KICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1jYV9zZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGRtYW5yLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2Ffc2V0X2RtYV9tb2RlKHVuc2lnbmVkIGludCBkbWFuciwgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJb3V0YihNQ0FfRE1BX0ZOX1NFVF9NT0RFIHwgZG1hbnIsIE1DQV9ETUFfUkVHX0ZOKTsKIAlvdXRiKG1vZGUsIE1DQV9ETUFfUkVHX0VYRSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbW11LmggYi9pbmNsdWRlL2FzbS14ODYvbW11LmgKaW5kZXggZWZhOTYyYy4uMDBlODg2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tbXUuaApAQCAtMTAsMTAgKzEwLDEwIEBACiAgKgogICogY3B1X3ZtX21hc2sgaXMgdXNlZCB0byBvcHRpbWl6ZSBsZHQgZmx1c2hpbmcuCiAgKi8KLXR5cGVkZWYgc3RydWN0IHsgCit0eXBlZGVmIHN0cnVjdCB7CiAJdm9pZCAqbGR0OwogI2lmZGVmIENPTkZJR19YODZfNjQKLQlyd2xvY2tfdCBsZHRsb2NrOyAKKwlyd2xvY2tfdCBsZHRsb2NrOwogI2VuZGlmCiAJaW50IHNpemU7CiAJc3RydWN0IG11dGV4IGxvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbW11X2NvbnRleHRfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbXVfY29udGV4dF8zMi5oCmluZGV4IDgxOThkMWMuLjk3NTZhZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tbXVfY29udGV4dF8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tbXVfY29udGV4dF8zMi5oCkBAIC02Miw3ICs2Miw3IEBACiAJCUJVR19PTihwZXJfY3B1KGNwdV90bGJzdGF0ZSwgY3B1KS5hY3RpdmVfbW0gIT0gbmV4dCk7CiAKIAkJaWYgKCFjcHVfdGVzdF9hbmRfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spKSB7Ci0JCQkvKiBXZSB3ZXJlIGluIGxhenkgdGxiIG1vZGUgYW5kIGxlYXZlX21tIGRpc2FibGVkIAorCQkJLyogV2Ugd2VyZSBpbiBsYXp5IHRsYiBtb2RlIGFuZCBsZWF2ZV9tbSBkaXNhYmxlZAogCQkJICogdGxiIGZsdXNoIElQSSBkZWxpdmVyeS4gV2UgbXVzdCByZWxvYWQgJWNyMy4KIAkJCSAqLwogCQkJbG9hZF9jcjMobmV4dC0+cGdkKTsKQEAgLTc1LDEwICs3NSwxMCBAQAogI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzaywgbW0pCQkJXAogCWFzbSgibW92bCAlMCwlJWdzIjogOiJyIiAoMCkpOwogCi0jZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsIG5leHQpCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlwYXJhdmlydF9hY3RpdmF0ZV9tbShwcmV2LCBuZXh0KTsJXAotCQlzd2l0Y2hfbW0oKHByZXYpLChuZXh0KSxOVUxMKTsJCVwKLQl9IHdoaWxlKDApOworI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LCBuZXh0KQkJCVwKK2RvIHsJCQkJCQlcCisJcGFyYXZpcnRfYWN0aXZhdGVfbW0oKHByZXYpLCAobmV4dCkpOwlcCisJc3dpdGNoX21tKChwcmV2KSwgKG5leHQpLCBOVUxMKTsJXAorfSB3aGlsZSAoMCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21tdV9jb250ZXh0XzY0LmggYi9pbmNsdWRlL2FzbS14ODYvbW11X2NvbnRleHRfNjQuaAppbmRleCBhZDZkYzgyLi5jYTQ0YzcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbW11X2NvbnRleHRfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbW11X2NvbnRleHRfNjQuaApAQCAtMjAsMTIgKzIwLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocmVhZF9wZGEobW11X3N0YXRlKSA9PSBUTEJTVEFURV9PSykgCisJaWYgKHJlYWRfcGRhKG1tdV9zdGF0ZSkgPT0gVExCU1RBVEVfT0spCiAJCXdyaXRlX3BkYShtbXVfc3RhdGUsIFRMQlNUQVRFX0xBWlkpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCiAJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXVuc2lnbmVkIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTM5LDcgKzM5LDcgQEAKIAkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKIAkJbG9hZF9jcjMobmV4dC0+cGdkKTsKIAotCQlpZiAodW5saWtlbHkobmV4dC0+Y29udGV4dC5sZHQgIT0gcHJldi0+Y29udGV4dC5sZHQpKSAKKwkJaWYgKHVubGlrZWx5KG5leHQtPmNvbnRleHQubGR0ICE9IHByZXYtPmNvbnRleHQubGR0KSkKIAkJCWxvYWRfTERUX25vbG9jaygmbmV4dC0+Y29udGV4dCk7CiAJfQogI2lmZGVmIENPTkZJR19TTVAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJaWYgKHJlYWRfcGRhKGFjdGl2ZV9tbSkgIT0gbmV4dCkKIAkJCUJVRygpOwogCQlpZiAoIWNwdV90ZXN0X2FuZF9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzaykpIHsKLQkJCS8qIFdlIHdlcmUgaW4gbGF6eSB0bGIgbW9kZSBhbmQgbGVhdmVfbW0gZGlzYWJsZWQgCisJCQkvKiBXZSB3ZXJlIGluIGxhenkgdGxiIG1vZGUgYW5kIGxlYXZlX21tIGRpc2FibGVkCiAJCQkgKiB0bGIgZmx1c2ggSVBJIGRlbGl2ZXJ5LiBXZSBtdXN0IHJlbG9hZCBDUjMKIAkJCSAqIHRvIG1ha2Ugc3VyZSB0byB1c2Ugbm8gZnJlZWQgcGFnZSB0YWJsZXMuCiAJCQkgKi8KQEAgLTU5LDEzICs1OSwxNCBAQAogI2VuZGlmCiB9CiAKLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgXAotCWxvYWRfZ3NfaW5kZXgoMCk7IFwKLQlhc20gdm9sYXRpbGUoIm1vdmwgJTAsJSVmcyI6OiJyIigwKSk7ICBcCi19IHdoaWxlKDApCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkJCQlcCitkbyB7CQkJCQkJXAorCWxvYWRfZ3NfaW5kZXgoMCk7CQkJXAorCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWZzIjo6InIiKDApKTsJXAorfSB3aGlsZSAoMCkKIAotI2RlZmluZSBhY3RpdmF0ZV9tbShwcmV2LCBuZXh0KSBcCi0Jc3dpdGNoX21tKChwcmV2KSwobmV4dCksTlVMTCkKKyNkZWZpbmUgYWN0aXZhdGVfbW0ocHJldiwgbmV4dCkJCQlcCisJc3dpdGNoX21tKChwcmV2KSwgKG5leHQpLCBOVUxMKQogCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21teC5oIGIvaW5jbHVkZS9hc20teDg2L21teC5oCmluZGV4IDQ2YjcxZGEuLjk0MDg4MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tbXguaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbW14LmgKQEAgLTYsNyArNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0gCisKIGV4dGVybiB2b2lkICpfbW14X21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IHNpemUpOwogZXh0ZXJuIHZvaWQgbW14X2NsZWFyX3BhZ2Uodm9pZCAqcGFnZSk7CiBleHRlcm4gdm9pZCBtbXhfY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmVfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmVfMzIuaAppbmRleCAyNzRhNTk1Li5jYjJjYWQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbW16b25lXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21tem9uZV8zMi5oCkBAIC0xOCw3ICsxOCw3IEBACiAJI2luY2x1ZGUgPGFzbS9zcmF0Lmg+CiAjZW5kaWYKIAotZXh0ZXJuIGludCBnZXRfbWVtY2ZnX251bWFfZmxhdCh2b2lkICk7CitleHRlcm4gaW50IGdldF9tZW1jZmdfbnVtYV9mbGF0KHZvaWQpOwogLyoKICAqIFRoaXMgYWxsb3dzIGFueSBvbmUgTlVNQSBhcmNoaXRlY3R1cmUgdG8gYmUgY29tcGlsZWQKICAqIGZvciwgYW5kIHN0aWxsIGZhbGwgYmFjayB0byB0aGUgZmxhdCBmdW5jdGlvbiBpZiBpdApAQCAtMTI5LDcgKzEyOSw3IEBACiAJc3RydWN0IHBnbGlzdF9kYXRhICBfX21heWJlX3VudXNlZAkJCVwKIAkJCQkqX19hbGxvY19ib290bWVtX25vZGVfX3BnZGF0ID0gKHBnZGF0KTsJXAogCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsCQlcCi0JCQkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpCVwKKwkJCQkJCV9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CVwKIH0pCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzX25vZGUocGdkYXQsIHgpCQkJCVwKICh7CQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21tem9uZV82NC5oIGIvaW5jbHVkZS9hc20teDg2L21tem9uZV82NC5oCmluZGV4IGViYWY5NjYuLjU5NGJkMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tbXpvbmVfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbW16b25lXzY0LmgKQEAgLTcsNyArNyw3IEBACiAKICNpZmRlZiBDT05GSUdfTlVNQQogCi0jZGVmaW5lIFZJUlRVQUxfQlVHX09OKHgpIAorI2RlZmluZSBWSVJUVUFMX0JVR19PTih4KQogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCkBAIC0xNiw3ICsxNiw3IEBACiAJaW50IHNoaWZ0OwogCXVuc2lnbmVkIGludCBtYXBzaXplOwogCXMxNiAqbWFwOwotCXMxNiBlbWJlZGRlZF9tYXBbNjQtOF07CisJczE2IGVtYmVkZGVkX21hcFs2NCAtIDhdOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7IC8qIHRvdGFsIHNpemUgPSAxMjggYnl0ZXMgKi8KIGV4dGVybiBzdHJ1Y3QgbWVtbm9kZSBtZW1ub2RlOwogI2RlZmluZSBtZW1ub2RlX3NoaWZ0IG1lbW5vZGUuc2hpZnQKQEAgLTI1LDI3ICsyNSwyNyBAQAogCiBleHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTsKIAotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChwdXJlKSkgaW50IHBoeXNfdG9fbmlkKHVuc2lnbmVkIGxvbmcgYWRkcikgCi17IAotCXVuc2lnbmVkIG5pZDsgCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKHB1cmUpKSBpbnQgcGh5c190b19uaWQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIG5pZDsKIAlWSVJUVUFMX0JVR19PTighbWVtbm9kZW1hcCk7CiAJVklSVFVBTF9CVUdfT04oKGFkZHIgPj4gbWVtbm9kZV9zaGlmdCkgPj0gbWVtbm9kZW1hcHNpemUpOwotCW5pZCA9IG1lbW5vZGVtYXBbYWRkciA+PiBtZW1ub2RlX3NoaWZ0XTsgCi0JVklSVFVBTF9CVUdfT04obmlkID49IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9kYXRhW25pZF0pOyAKLQlyZXR1cm4gbmlkOyAKLX0gCisJbmlkID0gbWVtbm9kZW1hcFthZGRyID4+IG1lbW5vZGVfc2hpZnRdOworCVZJUlRVQUxfQlVHX09OKG5pZCA+PSBNQVhfTlVNTk9ERVMgfHwgIW5vZGVfZGF0YVtuaWRdKTsKKwlyZXR1cm4gbmlkOworfQogCiAjZGVmaW5lIE5PREVfREFUQShuaWQpCQkobm9kZV9kYXRhW25pZF0pCiAKICNkZWZpbmUgbm9kZV9zdGFydF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQotI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsgXAorI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsJXAogCQkJCSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQogCiBleHRlcm4gaW50IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pOwogCiAjaWZkZWYgQ09ORklHX05VTUFfRU1VCi0jZGVmaW5lIEZBS0VfTk9ERV9NSU5fU0laRQkoNjQqMTAyNCoxMDI0KQotI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxdUwpKQorI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXBzcGVjLmggYi9pbmNsdWRlL2FzbS14ODYvbXBzcGVjLmgKaW5kZXggNzgxYWQ3NC4uNTdhOTkxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21wc3BlYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tcHNwZWMuaApAQCAtMSwxNiArMSwxMyBAQAogI2lmbmRlZiBfQU1fWDg2X01QU1BFQ19ICiAjZGVmaW5lIF9BTV9YODZfTVBTUEVDX0gKIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwogI2luY2x1ZGUgPGFzbS9tcHNwZWNfZGVmLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjaW5jbHVkZSA8bWFjaF9tcHNwZWMuaD4KIAotZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fdHlwZVtNQVhfTVBfQlVTU0VTXTsKLWV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX25vZGVbTUFYX01QX0JVU1NFU107Ci1leHRlcm4gaW50IG1wX2J1c19pZF90b19sb2NhbFtNQVhfTVBfQlVTU0VTXTsKLWV4dGVybiBpbnQgcXVhZF9sb2NhbF90b19tcF9idXNfaWRbTlJfQ1BVUy80XVs0XTsKLQogZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZfdG9fYmlnc21wOwogZXh0ZXJuIGludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKIGV4dGVybiB1OCBhcGljaWRfMl9ub2RlW107CkBAIC0yNCwyNyArMjEsMzAgQEAKIC8qIEVhY2ggUENJIHNsb3QgbWF5IGJlIGEgY29tYm8gY2FyZCB3aXRoIGl0cyBvd24gYnVzLiAgNCBJUlEgcGlucyBwZXIgc2xvdC4gKi8KICNkZWZpbmUgTUFYX0lSUV9TT1VSQ0VTIChNQVhfTVBfQlVTU0VTICogNCkKIAotZXh0ZXJuIERFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKK2V4dGVybiB2b2lkIGVhcmx5X2ZpbmRfc21wX2NvbmZpZyh2b2lkKTsKK2V4dGVybiB2b2lkIGVhcmx5X2dldF9zbXBfY29uZmlnKHZvaWQpOwogCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX01DQSkgfHwgZGVmaW5lZChDT05GSUdfRUlTQSkKK2V4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3R5cGVbTUFYX01QX0JVU1NFU107CisjZW5kaWYKKworZXh0ZXJuIERFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKKwogZXh0ZXJuIGludCBtcF9idXNfaWRfdG9fcGNpX2J1c1tNQVhfTVBfQlVTU0VTXTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQ7CiBleHRlcm4gaW50IHNtcF9mb3VuZF9jb25maWc7Ci1leHRlcm4gaW50IG5yX2lvYXBpY3M7Ci1leHRlcm4gaW50IG1wX2lycV9lbnRyaWVzOwotZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107CiBleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOwogCiBleHRlcm4gdm9pZCBmaW5kX3NtcF9jb25maWcodm9pZCk7CiBleHRlcm4gdm9pZCBnZXRfc21wX2NvbmZpZyh2b2lkKTsKIAordm9pZCBfX2NwdWluaXQgZ2VuZXJpY19wcm9jZXNzb3JfaW5mbyhpbnQgYXBpY2lkLCBpbnQgdmVyc2lvbik7CiAjaWZkZWYgQ09ORklHX0FDUEkKLWV4dGVybiB2b2lkIG1wX3JlZ2lzdGVyX2xhcGljKHU4IGlkLCB1OCBlbmFibGVkKTsKLWV4dGVybiB2b2lkIG1wX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3ModTY0IGFkZHJlc3MpOwotZXh0ZXJuIHZvaWQgbXBfcmVnaXN0ZXJfaW9hcGljKHU4IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKTsKK2V4dGVybiB2b2lkIG1wX3JlZ2lzdGVyX2lvYXBpYyhpbnQgaWQsIHUzMiBhZGRyZXNzLCB1MzIgZ3NpX2Jhc2UpOwogZXh0ZXJuIHZvaWQgbXBfb3ZlcnJpZGVfbGVnYWN5X2lycSh1OCBidXNfaXJxLCB1OCBwb2xhcml0eSwgdTggdHJpZ2dlciwKIAkJCQkgICB1MzIgZ3NpKTsKIGV4dGVybiB2b2lkIG1wX2NvbmZpZ19hY3BpX2xlZ2FjeV9pcnFzKHZvaWQpOwpAQCAtNTMsOCArNTMsNyBAQAogCiAjZGVmaW5lIFBIWVNJRF9BUlJBWV9TSVpFCUJJVFNfVE9fTE9OR1MoTUFYX0FQSUNTKQogCi1zdHJ1Y3QgcGh5c2lkX21hc2sKLXsKK3N0cnVjdCBwaHlzaWRfbWFzayB7CiAJdW5zaWduZWQgbG9uZyBtYXNrW1BIWVNJRF9BUlJBWV9TSVpFXTsKIH07CiAKQEAgLTYzLDM0ICs2MiwzNCBAQAogI2RlZmluZSBwaHlzaWRfc2V0KHBoeXNpZCwgbWFwKQkJCXNldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQogI2RlZmluZSBwaHlzaWRfY2xlYXIocGh5c2lkLCBtYXApCQljbGVhcl9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQogI2RlZmluZSBwaHlzaWRfaXNzZXQocGh5c2lkLCBtYXApCQl0ZXN0X2JpdChwaHlzaWQsIChtYXApLm1hc2spCi0jZGVmaW5lIHBoeXNpZF90ZXN0X2FuZF9zZXQocGh5c2lkLCBtYXApIFwKKyNkZWZpbmUgcGh5c2lkX3Rlc3RfYW5kX3NldChwaHlzaWQsIG1hcCkJCQlcCiAJdGVzdF9hbmRfc2V0X2JpdChwaHlzaWQsIChtYXApLm1hc2spCiAKLSNkZWZpbmUgcGh5c2lkc19hbmQoZHN0LCBzcmMxLCBzcmMyKSBcCisjZGVmaW5lIHBoeXNpZHNfYW5kKGRzdCwgc3JjMSwgc3JjMikJCQkJCVwKIAliaXRtYXBfYW5kKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0FQSUNTKQogCi0jZGVmaW5lIHBoeXNpZHNfb3IoZHN0LCBzcmMxLCBzcmMyKSBcCisjZGVmaW5lIHBoeXNpZHNfb3IoZHN0LCBzcmMxLCBzcmMyKQkJCQkJXAogCWJpdG1hcF9vcigoZHN0KS5tYXNrLCAoc3JjMSkubWFzaywgKHNyYzIpLm1hc2ssIE1BWF9BUElDUykKIAotI2RlZmluZSBwaHlzaWRzX2NsZWFyKG1hcCkgXAorI2RlZmluZSBwaHlzaWRzX2NsZWFyKG1hcCkJCQkJCVwKIAliaXRtYXBfemVybygobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCiAKLSNkZWZpbmUgcGh5c2lkc19jb21wbGVtZW50KGRzdCwgc3JjKSBcCisjZGVmaW5lIHBoeXNpZHNfY29tcGxlbWVudChkc3QsIHNyYykJCQkJXAogCWJpdG1hcF9jb21wbGVtZW50KChkc3QpLm1hc2ssIChzcmMpLm1hc2ssIE1BWF9BUElDUykKIAotI2RlZmluZSBwaHlzaWRzX2VtcHR5KG1hcCkgXAorI2RlZmluZSBwaHlzaWRzX2VtcHR5KG1hcCkJCQkJCVwKIAliaXRtYXBfZW1wdHkoKG1hcCkubWFzaywgTUFYX0FQSUNTKQogCi0jZGVmaW5lIHBoeXNpZHNfZXF1YWwobWFwMSwgbWFwMikgXAorI2RlZmluZSBwaHlzaWRzX2VxdWFsKG1hcDEsIG1hcDIpCQkJCVwKIAliaXRtYXBfZXF1YWwoKG1hcDEpLm1hc2ssIChtYXAyKS5tYXNrLCBNQVhfQVBJQ1MpCiAKLSNkZWZpbmUgcGh5c2lkc193ZWlnaHQobWFwKSBcCisjZGVmaW5lIHBoeXNpZHNfd2VpZ2h0KG1hcCkJCQkJCVwKIAliaXRtYXBfd2VpZ2h0KChtYXApLm1hc2ssIE1BWF9BUElDUykKIAotI2RlZmluZSBwaHlzaWRzX3NoaWZ0X3JpZ2h0KGQsIHMsIG4pIFwKKyNkZWZpbmUgcGh5c2lkc19zaGlmdF9yaWdodChkLCBzLCBuKQkJCQlcCiAJYml0bWFwX3NoaWZ0X3JpZ2h0KChkKS5tYXNrLCAocykubWFzaywgbiwgTUFYX0FQSUNTKQogCi0jZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKSBcCisjZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKQkJCQlcCiAJYml0bWFwX3NoaWZ0X2xlZnQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfQVBJQ1MpCiAKICNkZWZpbmUgcGh5c2lkc19jb2VyY2UobWFwKQkJCSgobWFwKS5tYXNrWzBdKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21wc3BlY19kZWYuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tcHNwZWNfZGVmLmgKaW5kZXggMzUwNDYxNy4uZGM2ZWY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21wc3BlY19kZWYuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbXBzcGVjX2RlZi5oCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBpbmZvcm1hdGlvbiBpcy4KICAqLwogCi0jZGVmaW5lIFNNUF9NQUdJQ19JREVOVAkoKCdfJzw8MjQpfCgnUCc8PDE2KXwoJ00nPDw4KXwnXycpCisjZGVmaW5lIFNNUF9NQUdJQ19JREVOVAkoKCdfJzw8MjQpIHwgKCdQJzw8MTYpIHwgKCdNJzw8OCkgfCAnXycpCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGRlZmluZSBNQVhfTVBDX0VOVFJZIDEwMjQKQEAgLTIzLDggKzIzLDcgQEAKICMgZGVmaW5lIE1BWF9BUElDUyAyNTUKICNlbmRpZgogCi1zdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcKLXsKK3N0cnVjdCBpbnRlbF9tcF9mbG9hdGluZyB7CiAJY2hhciBtcGZfc2lnbmF0dXJlWzRdOwkJLyogIl9NUF8iCQkJKi8KIAl1bnNpZ25lZCBpbnQgbXBmX3BoeXNwdHI7CS8qIENvbmZpZ3VyYXRpb24gdGFibGUgYWRkcmVzcwkqLwogCXVuc2lnbmVkIGNoYXIgbXBmX2xlbmd0aDsJLyogT3VyIGxlbmd0aCAocGFyYWdyYXBocykJKi8KQEAgLTM5LDE0ICszOCwxMyBAQAogCiAjZGVmaW5lIE1QQ19TSUdOQVRVUkUgIlBDTVAiCiAKLXN0cnVjdCBtcF9jb25maWdfdGFibGUKLXsKK3N0cnVjdCBtcF9jb25maWdfdGFibGUgewogCWNoYXIgbXBjX3NpZ25hdHVyZVs0XTsKIAl1bnNpZ25lZCBzaG9ydCBtcGNfbGVuZ3RoOwkvKiBTaXplIG9mIHRhYmxlICovCi0JY2hhciAgbXBjX3NwZWM7CQkJLyogMHgwMSAqLwotCWNoYXIgIG1wY19jaGVja3N1bTsKLQljaGFyICBtcGNfb2VtWzhdOwotCWNoYXIgIG1wY19wcm9kdWN0aWRbMTJdOworCWNoYXIgbXBjX3NwZWM7CQkJLyogMHgwMSAqLworCWNoYXIgbXBjX2NoZWNrc3VtOworCWNoYXIgbXBjX29lbVs4XTsKKwljaGFyIG1wY19wcm9kdWN0aWRbMTJdOwogCXVuc2lnbmVkIGludCBtcGNfb2VtcHRyOwkvKiAwIGlmIG5vdCBwcmVzZW50ICovCiAJdW5zaWduZWQgc2hvcnQgbXBjX29lbXNpemU7CS8qIDAgaWYgbm90IHByZXNlbnQgKi8KIAl1bnNpZ25lZCBzaG9ydCBtcGNfb2VtY291bnQ7CkBAIC03MSw4ICs2OSw3IEBACiAjZGVmaW5lIENQVV9NT0RFTF9NQVNLCQkweDAwRjAKICNkZWZpbmUgQ1BVX0ZBTUlMWV9NQVNLCQkweDBGMDAKIAotc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yCi17CitzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgewogCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CiAJdW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOwkvKiBMb2NhbCBBUElDIG51bWJlciAqLwogCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CS8qIEl0cyB2ZXJzaW9ucyAqLwpAQCAtODIsOCArNzksNyBAQAogCXVuc2lnbmVkIGludCBtcGNfcmVzZXJ2ZWRbMl07CiB9OwogCi1zdHJ1Y3QgbXBjX2NvbmZpZ19idXMKLXsKK3N0cnVjdCBtcGNfY29uZmlnX2J1cyB7CiAJdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKIAl1bnNpZ25lZCBjaGFyIG1wY19idXNpZDsKIAl1bnNpZ25lZCBjaGFyIG1wY19idXN0eXBlWzZdOwpAQCAtMTExLDggKzEwNyw3IEBACiAKICNkZWZpbmUgTVBDX0FQSUNfVVNBQkxFCQkweDAxCiAKLXN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYwoteworc3RydWN0IG1wY19jb25maWdfaW9hcGljIHsKIAl1bnNpZ25lZCBjaGFyIG1wY190eXBlOwogCXVuc2lnbmVkIGNoYXIgbXBjX2FwaWNpZDsKIAl1bnNpZ25lZCBjaGFyIG1wY19hcGljdmVyOwpAQCAtMTIwLDggKzExNSw3IEBACiAJdW5zaWduZWQgaW50IG1wY19hcGljYWRkcjsKIH07CiAKLXN0cnVjdCBtcGNfY29uZmlnX2ludHNyYwoteworc3RydWN0IG1wY19jb25maWdfaW50c3JjIHsKIAl1bnNpZ25lZCBjaGFyIG1wY190eXBlOwogCXVuc2lnbmVkIGNoYXIgbXBjX2lycXR5cGU7CiAJdW5zaWduZWQgc2hvcnQgbXBjX2lycWZsYWc7CkBAIC0xNDQsOCArMTM4LDcgQEAKIAogI2RlZmluZSBNUF9BUElDX0FMTAkweEZGCiAKLXN0cnVjdCBtcGNfY29uZmlnX2xpbnRzcmMKLXsKK3N0cnVjdCBtcGNfY29uZmlnX2xpbnRzcmMgewogCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CiAJdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKIAl1bnNpZ25lZCBzaG9ydCBtcGNfaXJxZmxhZzsKQEAgLTE1Nyw4ICsxNTAsNyBAQAogCiAjZGVmaW5lIE1QQ19PRU1fU0lHTkFUVVJFICJfT0VNIgogCi1zdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlCi17CitzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlIHsKIAljaGFyIG9lbV9zaWduYXR1cmVbNF07CiAJdW5zaWduZWQgc2hvcnQgb2VtX2xlbmd0aDsJLyogU2l6ZSBvZiB0YWJsZSAqLwogCWNoYXIgIG9lbV9yZXY7CQkJLyogMHgwMSAqLwpAQCAtMTY2LDE3ICsxNTgsNiBAQAogCWNoYXIgIG1wY19vZW1bOF07CiB9OwogCi1zdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbgotewotCXVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7Ci0JdW5zaWduZWQgY2hhciB0cmFuc19sZW47Ci0JdW5zaWduZWQgY2hhciB0cmFuc190eXBlOwotCXVuc2lnbmVkIGNoYXIgdHJhbnNfcXVhZDsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX2dsb2JhbDsKLQl1bnNpZ25lZCBjaGFyIHRyYW5zX2xvY2FsOwotCXVuc2lnbmVkIHNob3J0IHRyYW5zX3Jlc2VydmVkOwotfTsKLQogLyoKICAqCURlZmF1bHQgY29uZmlndXJhdGlvbnMKICAqCkBAIC0xOTYsNCArMTc3LDMgQEAKIAlNUF9CVVNfTUNBLAogfTsKICNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXNpZGVmLmggYi9pbmNsdWRlL2FzbS14ODYvbXNpZGVmLmgKaW5kZXggNWI4YWNkZC4uMjk2ZjI5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21zaWRlZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tc2lkZWYuaApAQCAtMTEsNyArMTEsOCBAQAogCiAjZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9TSElGVAkJMAogI2RlZmluZSAgTVNJX0RBVEFfVkVDVE9SX01BU0sJCTB4MDAwMDAwZmYKLSNkZWZpbmUJIE1TSV9EQVRBX1ZFQ1RPUih2KQkJKCgodikgPDwgTVNJX0RBVEFfVkVDVE9SX1NISUZUKSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKQorI2RlZmluZQkgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpICYgXAorCQkJCQkgTVNJX0RBVEFfVkVDVE9SX01BU0spCiAKICNkZWZpbmUgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVAk4CiAjZGVmaW5lICBNU0lfREFUQV9ERUxJVkVSWV9GSVhFRAkoMCA8PCBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUKQpAQCAtMzcsMTEgKzM4LDE0IEBACiAjZGVmaW5lCSBNU0lfQUREUl9ERVNUX01PREVfTE9HSUNBTAkoMSA8PCBNU0lfQUREUl9ERVNUX01PREVfU0hJRlQpCiAKICNkZWZpbmUgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQJMwotI2RlZmluZSAgTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVCSgwIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKSAvKiBkZWRpY2F0ZWQgY3B1ICovCi0jZGVmaW5lICBNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkJKDEgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpIC8qIGxvd2VzdCBwcmlvcml0eSAqLworI2RlZmluZSAgTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVCSgwIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQorCQkJCQkvKiBkZWRpY2F0ZWQgY3B1ICovCisjZGVmaW5lICBNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkJKDEgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisJCQkJCS8qIGxvd2VzdCBwcmlvcml0eSAqLwogCiAjZGVmaW5lIE1TSV9BRERSX0RFU1RfSURfU0hJRlQJCTEyCiAjZGVmaW5lCSBNU0lfQUREUl9ERVNUX0lEX01BU0sJCTB4MDBmZmZmMAotI2RlZmluZSAgTVNJX0FERFJfREVTVF9JRChkZXN0KQkJKCgoZGVzdCkgPDwgTVNJX0FERFJfREVTVF9JRF9TSElGVCkgJiBNU0lfQUREUl9ERVNUX0lEX01BU0spCisjZGVmaW5lICBNU0lfQUREUl9ERVNUX0lEKGRlc3QpCQkoKChkZXN0KSA8PCBNU0lfQUREUl9ERVNUX0lEX1NISUZUKSAmIFwKKwkJCQkJIE1TSV9BRERSX0RFU1RfSURfTUFTSykKIAogI2VuZGlmIC8qIEFTTV9NU0lERUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oIGIvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oCmluZGV4IGZhZTExOGEuLjA5NDEzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmgKQEAgLTU3LDYgKzU3LDggQEAKICNkZWZpbmUgTVNSX01UUlJmaXg0S19GODAwMAkJMHgwMDAwMDI2ZgogI2RlZmluZSBNU1JfTVRSUmRlZlR5cGUJCQkweDAwMDAwMmZmCiAKKyNkZWZpbmUgTVNSX0lBMzJfQ1JfUEFUCQkJMHgwMDAwMDI3NworCiAjZGVmaW5lIE1TUl9JQTMyX0RFQlVHQ1RMTVNSCQkweDAwMDAwMWQ5CiAjZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hGUk9NSVAJMHgwMDAwMDFkYgogI2RlZmluZSBNU1JfSUEzMl9MQVNUQlJBTkNIVE9JUAkJMHgwMDAwMDFkYwpAQCAtODMsNiArODUsNyBAQAogLyogQU1ENjQgTVNScy4gTm90IGNvbXBsZXRlLiBTZWUgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwgZm9yIGEgbW9yZQogICAgY29tcGxldGUgbGlzdC4gKi8KIAorI2RlZmluZSBNU1JfQU1ENjRfTkJfQ0ZHCQkweGMwMDEwMDFmCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSENUTAkJMHhjMDAxMTAzMAogI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hMSU5BRAkJMHhjMDAxMTAzMQogI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hQSFlTQUQJMHhjMDAxMTAzMgpAQCAtMTA5LDYgKzExMiw3IEBACiAjZGVmaW5lIE1TUl9LOF9TWVNDRkcJCQkweGMwMDEwMDEwCiAjZGVmaW5lIE1TUl9LOF9IV0NSCQkJMHhjMDAxMDAxNQogI2RlZmluZSBNU1JfSzhfRU5BQkxFX0MxRQkJMHhjMDAxMDA1NQorI2RlZmluZSBNU1JfSzhfVFNFR19BRERSCQkweGMwMDEwMTEyCiAjZGVmaW5lIEs4X01UUlJGSVhSQU5HRV9EUkFNX0VOQUJMRQkweDAwMDQwMDAwIC8qIE10cnJGaXhEcmFtRW4gYml0ICAgICovCiAjZGVmaW5lIEs4X01UUlJGSVhSQU5HRV9EUkFNX01PRElGWQkweDAwMDgwMDAwIC8qIE10cnJGaXhEcmFtTW9kRW4gYml0ICovCiAjZGVmaW5lIEs4X01UUlJfUkRNRU1fV1JNRU1fTUFTSwkweDE4MTgxODE4IC8qIE1hc2s6IFJkTWVtfFdyTWVtICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXNyLmggYi9pbmNsdWRlL2FzbS14ODYvbXNyLmgKaW5kZXggM2NhMjllYi4uMzcwNzY1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21zci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tc3IuaApAQCAtMTYsOCArMTYsOCBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3JlYWRfdHNjcCh1bnNpZ25lZCBpbnQgKmF1eCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvdywgaGlnaDsKLQlhc20gdm9sYXRpbGUgKCIuYnl0ZSAweDBmLDB4MDEsMHhmOSIKLQkJICAgICAgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSwgIj1jIiAoKmF1eCkpOworCWFzbSB2b2xhdGlsZSgiLmJ5dGUgMHgwZiwweDAxLDB4ZjkiCisJCSAgICAgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSwgIj1jIiAoKmF1eCkpOwogCXJldHVybiBsb3cgfCAoKHU2NCloaWdoID4+IDMyKTsKIH0KIApAQCAtMjksNyArMjksNyBAQAogICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2RlZmluZSBERUNMQVJFX0FSR1ModmFsLCBsb3csIGhpZ2gpCXVuc2lnbmVkIGxvdywgaGlnaAotI2RlZmluZSBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCkJKGxvdyB8ICgodTY0KShoaWdoKSA8PCAzMikpCisjZGVmaW5lIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKQkoKGxvdykgfCAoKHU2NCkoaGlnaCkgPDwgMzIpKQogI2RlZmluZSBFQVhfRURYX0FSR1ModmFsLCBsb3csIGhpZ2gpCSJhIiAobG93KSwgImQiIChoaWdoKQogI2RlZmluZSBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkJIj1hIiAobG93KSwgIj1kIiAoaGlnaCkKICNlbHNlCkBAIC01Nyw3ICs1Nyw3IEBACiAJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcblx0IgogCQkgICAgICIzOiAgbW92ICUzLCUwIDsgam1wIDFiXG5cdCIKIAkJICAgICAiLnByZXZpb3VzXG5cdCIKLQkJICAgICBfQVNNX0VYVEFCTEUoMmIsM2IpCisJCSAgICAgX0FTTV9FWFRBQkxFKDJiLCAzYikKIAkJICAgICA6ICI9ciIgKCplcnIpLCBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkKIAkJICAgICA6ICJjIiAobXNyKSwgImkiICgtRUZBVUxUKSk7CiAJcmV0dXJuIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKTsKQEAgLTc4LDEwICs3OCwxMCBAQAogCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cdCIKIAkJICAgICAiMzogIG1vdiAlNCwlMCA7IGptcCAxYlxuXHQiCiAJCSAgICAgIi5wcmV2aW91c1xuXHQiCi0JCSAgICAgX0FTTV9FWFRBQkxFKDJiLDNiKQorCQkgICAgIF9BU01fRVhUQUJMRSgyYiwgM2IpCiAJCSAgICAgOiAiPWEiIChlcnIpCiAJCSAgICAgOiAiYyIgKG1zciksICIwIiAobG93KSwgImQiIChoaWdoKSwKLQkJICAgICAgICJpIiAoLUVGQVVMVCkpOworCQkgICAgICJpIiAoLUVGQVVMVCkpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExNiwyMyArMTE2LDIzIEBACiAgKiBwb2ludGVyIGluZGlyZWN0aW9uKSwgdGhpcyBhbGxvd3MgZ2NjIHRvIG9wdGltaXplIGJldHRlcgogICovCiAKLSNkZWZpbmUgcmRtc3IobXNyLHZhbDEsdmFsMikJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQl1NjQgX192YWwgPSBuYXRpdmVfcmVhZF9tc3IobXNyKTsJCQlcCi0JCSh2YWwxKSA9ICh1MzIpX192YWw7CQkJCQlcCi0JCSh2YWwyKSA9ICh1MzIpKF9fdmFsID4+IDMyKTsJCQkJXAotCX0gd2hpbGUoMCkKKyNkZWZpbmUgcmRtc3IobXNyLCB2YWwxLCB2YWwyKQkJCQkJXAorZG8gewkJCQkJCQkJXAorCXU2NCBfX3ZhbCA9IG5hdGl2ZV9yZWFkX21zcigobXNyKSk7CQkJXAorCSh2YWwxKSA9ICh1MzIpX192YWw7CQkJCQlcCisJKHZhbDIpID0gKHUzMikoX192YWwgPj4gMzIpOwkJCQlcCit9IHdoaWxlICgwKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgd3Jtc3IodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpCiB7CiAJbmF0aXZlX3dyaXRlX21zcihtc3IsIGxvdywgaGlnaCk7CiB9CiAKLSNkZWZpbmUgcmRtc3JsKG1zcix2YWwpCQkJCQkJCVwKLQkoKHZhbCkgPSBuYXRpdmVfcmVhZF9tc3IobXNyKSkKKyNkZWZpbmUgcmRtc3JsKG1zciwgdmFsKQkJCVwKKwkoKHZhbCkgPSBuYXRpdmVfcmVhZF9tc3IoKG1zcikpKQogCiAjZGVmaW5lIHdybXNybChtc3IsIHZhbCkJCQkJCQlcCi0JbmF0aXZlX3dyaXRlX21zcihtc3IsICh1MzIpKCh1NjQpKHZhbCkpLCAodTMyKSgodTY0KSh2YWwpID4+IDMyKSkKKwluYXRpdmVfd3JpdGVfbXNyKChtc3IpLCAodTMyKSgodTY0KSh2YWwpKSwgKHUzMikoKHU2NCkodmFsKSA+PiAzMikpCiAKIC8qIHdybXNyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nICovCiBzdGF0aWMgaW5saW5lIGludCB3cm1zcl9zYWZlKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKQpAQCAtMTQxLDE0ICsxNDEsMjIgQEAKIH0KIAogLyogcmRtc3Igd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgKi8KLSNkZWZpbmUgcmRtc3Jfc2FmZShtc3IscDEscDIpCQkJCQkJXAotCSh7CQkJCQkJCQlcCi0JCWludCBfX2VycjsJCQkJCQlcCi0JCXU2NCBfX3ZhbCA9IG5hdGl2ZV9yZWFkX21zcl9zYWZlKG1zciwgJl9fZXJyKTsJCVwKLQkJKCpwMSkgPSAodTMyKV9fdmFsOwkJCQkJXAotCQkoKnAyKSA9ICh1MzIpKF9fdmFsID4+IDMyKTsJCQkJXAotCQlfX2VycjsJCQkJCQkJXAotCX0pCisjZGVmaW5lIHJkbXNyX3NhZmUobXNyLCBwMSwgcDIpCQkJCQlcCisoewkJCQkJCQkJXAorCWludCBfX2VycjsJCQkJCQlcCisJdTY0IF9fdmFsID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUoKG1zciksICZfX2Vycik7CVwKKwkoKnAxKSA9ICh1MzIpX192YWw7CQkJCQlcCisJKCpwMikgPSAodTMyKShfX3ZhbCA+PiAzMik7CQkJCVwKKwlfX2VycjsJCQkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSBpbnQgcmRtc3JsX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCit7CisJaW50IGVycjsKKworCSpwID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUobXNyLCAmZXJyKTsKKwlyZXR1cm4gZXJyOworfQogCiAjZGVmaW5lIHJkdHNjbChsb3cpCQkJCQkJXAogCSgobG93KSA9ICh1MzIpbmF0aXZlX3JlYWRfdHNjKCkpCkBAIC0xNTYsMzUgKzE2NCwzNyBAQAogI2RlZmluZSByZHRzY2xsKHZhbCkJCQkJCQlcCiAJKCh2YWwpID0gbmF0aXZlX3JlYWRfdHNjKCkpCiAKLSNkZWZpbmUgcmRwbWMoY291bnRlcixsb3csaGlnaCkJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJdTY0IF9sID0gbmF0aXZlX3JlYWRfcG1jKGNvdW50ZXIpOwkJXAotCQkobG93KSAgPSAodTMyKV9sOwkJCQlcCi0JCShoaWdoKSA9ICh1MzIpKF9sID4+IDMyKTsJCQlcCi0JfSB3aGlsZSgwKQorI2RlZmluZSByZHBtYyhjb3VudGVyLCBsb3csIGhpZ2gpCQkJXAorZG8gewkJCQkJCQlcCisJdTY0IF9sID0gbmF0aXZlX3JlYWRfcG1jKChjb3VudGVyKSk7CQlcCisJKGxvdykgID0gKHUzMilfbDsJCQkJXAorCShoaWdoKSA9ICh1MzIpKF9sID4+IDMyKTsJCQlcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIHJkdHNjcChsb3csIGhpZ2gsIGF1eCkJCQkJCQlcCi0gICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJdW5zaWduZWQgbG9uZyBsb25nIF92YWwgPSBuYXRpdmVfcmVhZF90c2NwKCYoYXV4KSk7ICAgICBcCi0JCShsb3cpID0gKHUzMilfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkoaGlnaCkgPSAodTMyKShfdmFsID4+IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9IHdoaWxlICgwKQorI2RlZmluZSByZHRzY3AobG93LCBoaWdoLCBhdXgpCQkJCQlcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGxvbmcgbG9uZyBfdmFsID0gbmF0aXZlX3JlYWRfdHNjcCgmKGF1eCkpOyAgICAgXAorCShsb3cpID0gKHUzMilfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShoaWdoKSA9ICh1MzIpKF92YWwgPj4gMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKIAogI2RlZmluZSByZHRzY3BsbCh2YWwsIGF1eCkgKHZhbCkgPSBuYXRpdmVfcmVhZF90c2NwKCYoYXV4KSkKIAogI2VuZGlmCS8qICFDT05GSUdfUEFSQVZJUlQgKi8KIAogCi0jZGVmaW5lIGNoZWNraW5nX3dybXNybChtc3IsdmFsKSB3cm1zcl9zYWZlKG1zciwodTMyKSh2YWwpLCh1MzIpKCh2YWwpPj4zMikpCisjZGVmaW5lIGNoZWNraW5nX3dybXNybChtc3IsIHZhbCkgd3Jtc3Jfc2FmZSgobXNyKSwgKHUzMikodmFsKSwJCVwKKwkJCQkJICAgICAodTMyKSgodmFsKSA+PiAzMikpCiAKLSNkZWZpbmUgd3JpdGVfdHNjKHZhbDEsdmFsMikgd3Jtc3IoMHgxMCwgdmFsMSwgdmFsMikKKyNkZWZpbmUgd3JpdGVfdHNjKHZhbDEsIHZhbDIpIHdybXNyKDB4MTAsICh2YWwxKSwgKHZhbDIpKQogCi0jZGVmaW5lIHdyaXRlX3JkdHNjcF9hdXgodmFsKSB3cm1zcigweGMwMDAwMTAzLCB2YWwsIDApCisjZGVmaW5lIHdyaXRlX3JkdHNjcF9hdXgodmFsKSB3cm1zcigweGMwMDAwMTAzLCAodmFsKSwgMCkKIAogI2lmZGVmIENPTkZJR19TTVAKIHZvaWQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKTsKIHZvaWQgd3Jtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCk7CiBpbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpOworCiBpbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKTsKICNlbHNlICAvKiAgQ09ORklHX1NNUCAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCkBAIC0xOTUsNyArMjA1LDggQEAKIHsKIAl3cm1zcihtc3Jfbm8sIGwsIGgpOwogfQotc3RhdGljIGlubGluZSBpbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCitzdGF0aWMgaW5saW5lIGludCByZG1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLAorCQkJCSAgICB1MzIgKmwsIHUzMiAqaCkKIHsKIAlyZXR1cm4gcmRtc3Jfc2FmZShtc3Jfbm8sIGwsIGgpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L210cnIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tdHJyLmgKaW5kZXggMzE5ZDA2NS4uYTY5YTAxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L210cnIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbXRyci5oCkBAIC0yOCw4ICsyOCw3IEBACiAKICNkZWZpbmUJTVRSUl9JT0NUTF9CQVNFCSdNJwogCi1zdHJ1Y3QgbXRycl9zZW50cnkKLXsKK3N0cnVjdCBtdHJyX3NlbnRyeSB7CiAgICAgdW5zaWduZWQgbG9uZyBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLwogICAgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKiAgU2l6ZSBvZiByZWdpb24gICAqLwogICAgIHVuc2lnbmVkIGludCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KQEAgLTQxLDggKzQwLDcgQEAKICAgIHdpbGwgYnJlYWsuICovCiAKICNpZmRlZiBfX2kzODZfXwotc3RydWN0IG10cnJfZ2VudHJ5Ci17CitzdHJ1Y3QgbXRycl9nZW50cnkgewogICAgIHVuc2lnbmVkIGludCByZWdudW07ICAgLyogIFJlZ2lzdGVyIG51bWJlciAgKi8KICAgICB1bnNpZ25lZCBsb25nIGJhc2U7ICAgIC8qICBCYXNlIGFkZHJlc3MgICAgICovCiAgICAgdW5zaWduZWQgaW50IHNpemU7ICAgIC8qICBTaXplIG9mIHJlZ2lvbiAgICovCkBAIC01MSw4ICs0OSw3IEBACiAKICNlbHNlIC8qIF9faTM4Nl9fICovCiAKLXN0cnVjdCBtdHJyX2dlbnRyeQoteworc3RydWN0IG10cnJfZ2VudHJ5IHsKICAgICB1bnNpZ25lZCBsb25nIGJhc2U7ICAgIC8qICBCYXNlIGFkZHJlc3MgICAgICovCiAgICAgdW5zaWduZWQgaW50IHNpemU7ICAgIC8qICBTaXplIG9mIHJlZ2lvbiAgICovCiAgICAgdW5zaWduZWQgaW50IHJlZ251bTsgICAvKiAgUmVnaXN0ZXIgbnVtYmVyICAqLwpAQCAtODYsMzggKzgzLDQ1IEBACiAKIC8qICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZm9yIHVzZSBieSBvdGhlciBkcml2ZXJzICAqLwogIyBpZmRlZiBDT05GSUdfTVRSUgorZXh0ZXJuIHU4IG10cnJfdHlwZV9sb29rdXAodTY0IGFkZHIsIHU2NCBlbmQpOwogZXh0ZXJuIHZvaWQgbXRycl9zYXZlX2ZpeGVkX3Jhbmdlcyh2b2lkICopOwogZXh0ZXJuIHZvaWQgbXRycl9zYXZlX3N0YXRlKHZvaWQpOwotZXh0ZXJuIGludCBtdHJyX2FkZCAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCSAgICAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KTsKLWV4dGVybiBpbnQgbXRycl9hZGRfcGFnZSAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCSAgICAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KTsKLWV4dGVybiBpbnQgbXRycl9kZWwgKGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiBpbnQgbXRycl9kZWxfcGFnZSAoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCBtdHJyX2FkZCh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgIHVuc2lnbmVkIGludCB0eXBlLCBib29sIGluY3JlbWVudCk7CitleHRlcm4gaW50IG10cnJfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KTsKK2V4dGVybiBpbnQgbXRycl9kZWwoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCBtdHJyX2RlbF9wYWdlKGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIG10cnJfY2VudGF1cl9yZXBvcnRfbWNyKGludCBtY3IsIHUzMiBsbywgdTMyIGhpKTsKIGV4dGVybiB2b2lkIG10cnJfYXBfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG10cnJfYnBfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgbXRycl90cmltX3VuY2FjaGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIGVuZF9wZm4pOworZXh0ZXJuIGludCBhbWRfc3BlY2lhbF9kZWZhdWx0X210cnIodm9pZCk7CiAjICBlbHNlCitzdGF0aWMgaW5saW5lIHU4IG10cnJfdHlwZV9sb29rdXAodTY0IGFkZHIsIHU2NCBlbmQpCit7CisJLyoKKwkgKiBSZXR1cm4gbm8tTVRSUnM6CisJICovCisJcmV0dXJuIDB4ZmY7Cit9CiAjZGVmaW5lIG10cnJfc2F2ZV9maXhlZF9yYW5nZXMoYXJnKSBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgbXRycl9zYXZlX3N0YXRlKCkgZG8ge30gd2hpbGUgKDApCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgbXRycl9hZGQgKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorc3RhdGljIGlubGluZSBpbnQgbXRycl9hZGQodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBpbmNyZW1lbnQpCit7CisgICAgcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgaW5saW5lIGludCBtdHJyX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCXVuc2lnbmVkIGludCB0eXBlLCBib29sIGluY3JlbWVudCkKIHsKICAgICByZXR1cm4gLUVOT0RFVjsKIH0KLXN0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2FkZF9wYWdlICh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQl1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBpbmNyZW1lbnQpCitzdGF0aWMgaW5saW5lIGludCBtdHJyX2RlbChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICByZXR1cm4gLUVOT0RFVjsKIH0KLXN0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2RlbCAoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAotCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLSAgICByZXR1cm4gLUVOT0RFVjsKLX0KLXN0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2RlbF9wYWdlIChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkJdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIGlubGluZSBpbnQgbXRycl9kZWxfcGFnZShpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICByZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTEyNSw3ICsxMjksOSBAQAogewogCXJldHVybiAwOwogfQotc3RhdGljIF9faW5saW5lX18gdm9pZCBtdHJyX2NlbnRhdXJfcmVwb3J0X21jcihpbnQgbWNyLCB1MzIgbG8sIHUzMiBoaSkgezt9CitzdGF0aWMgaW5saW5lIHZvaWQgbXRycl9jZW50YXVyX3JlcG9ydF9tY3IoaW50IG1jciwgdTMyIGxvLCB1MzIgaGkpCit7Cit9CiAKICNkZWZpbmUgbXRycl9hcF9pbml0KCkgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIG10cnJfYnBfaW5pdCgpIGRvIHt9IHdoaWxlICgwKQpAQCAtMTM0LDE1ICsxNDAsMTMgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKLXN0cnVjdCBtdHJyX3NlbnRyeTMyCi17CitzdHJ1Y3QgbXRycl9zZW50cnkzMiB7CiAgICAgY29tcGF0X3Vsb25nX3QgYmFzZTsgICAgLyogIEJhc2UgYWRkcmVzcyAgICAgKi8KICAgICBjb21wYXRfdWludF90IHNpemU7ICAgIC8qICBTaXplIG9mIHJlZ2lvbiAgICovCiAgICAgY29tcGF0X3VpbnRfdCB0eXBlOyAgICAgLyogIFR5cGUgb2YgcmVnaW9uICAgKi8KIH07CiAKLXN0cnVjdCBtdHJyX2dlbnRyeTMyCi17CitzdHJ1Y3QgbXRycl9nZW50cnkzMiB7CiAgICAgY29tcGF0X3Vsb25nX3QgcmVnbnVtOyAgIC8qICBSZWdpc3RlciBudW1iZXIgICovCiAgICAgY29tcGF0X3VpbnRfdCBiYXNlOyAgICAvKiAgQmFzZSBhZGRyZXNzICAgICAqLwogICAgIGNvbXBhdF91aW50X3Qgc2l6ZTsgICAgLyogIFNpemUgb2YgcmVnaW9uICAgKi8KQEAgLTE1MSwxNiArMTU1LDE3IEBACiAKICNkZWZpbmUgTVRSUl9JT0NUTF9CQVNFICdNJwogCi0jZGVmaW5lIE1UUlJJT0MzMl9BRERfRU5UUlkgICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMCwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9TRVRfRU5UUlkgICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9ERUxfRU5UUlkgICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMiwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9HRVRfRU5UUlkgICAgICAgIF9JT1dSKE1UUlJfSU9DVExfQkFTRSwgMywgc3RydWN0IG10cnJfZ2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9LSUxMX0VOVFJZICAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNCwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9BRERfUEFHRV9FTlRSWSAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9TRVRfUEFHRV9FTlRSWSAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNiwgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9ERUxfUEFHRV9FTlRSWSAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNywgc3RydWN0IG10cnJfc2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9HRVRfUEFHRV9FTlRSWSAgIF9JT1dSKE1UUlJfSU9DVExfQkFTRSwgOCwgc3RydWN0IG10cnJfZ2VudHJ5MzIpCi0jZGVmaW5lIE1UUlJJT0MzMl9LSUxMX1BBR0VfRU5UUlkgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgOSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCisjZGVmaW5lIE1UUlJJT0MzMl9BRERfRU5UUlkgICAgICBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDAsIHN0cnVjdCBtdHJyX3NlbnRyeTMyKQorI2RlZmluZSBNVFJSSU9DMzJfU0VUX0VOVFJZICAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICAxLCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKKyNkZWZpbmUgTVRSUklPQzMyX0RFTF9FTlRSWSAgICAgIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgMiwgc3RydWN0IG10cnJfc2VudHJ5MzIpCisjZGVmaW5lIE1UUlJJT0MzMl9HRVRfRU5UUlkgICAgICBfSU9XUihNVFJSX0lPQ1RMX0JBU0UsIDMsIHN0cnVjdCBtdHJyX2dlbnRyeTMyKQorI2RlZmluZSBNVFJSSU9DMzJfS0lMTF9FTlRSWSAgICAgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA0LCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKKyNkZWZpbmUgTVRSUklPQzMyX0FERF9QQUdFX0VOVFJZIF9JT1coTVRSUl9JT0NUTF9CQVNFLCAgNSwgc3RydWN0IG10cnJfc2VudHJ5MzIpCisjZGVmaW5lIE1UUlJJT0MzMl9TRVRfUEFHRV9FTlRSWSBfSU9XKE1UUlJfSU9DVExfQkFTRSwgIDYsIHN0cnVjdCBtdHJyX3NlbnRyeTMyKQorI2RlZmluZSBNVFJSSU9DMzJfREVMX1BBR0VfRU5UUlkgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA3LCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKKyNkZWZpbmUgTVRSUklPQzMyX0dFVF9QQUdFX0VOVFJZIF9JT1dSKE1UUlJfSU9DVExfQkFTRSwgOCwgc3RydWN0IG10cnJfZ2VudHJ5MzIpCisjZGVmaW5lIE1UUlJJT0MzMl9LSUxMX1BBR0VfRU5UUlkJCVwKKwkJCQkgX0lPVyhNVFJSX0lPQ1RMX0JBU0UsICA5LCBzdHJ1Y3QgbXRycl9zZW50cnkzMikKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXV0ZXhfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tdXRleF8zMi5oCmluZGV4IGJiZWVmYjkuLjczZTkyOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tdXRleF8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tdXRleF8zMi5oCkBAIC05LDcgKzksNyBAQAogI2lmbmRlZiBfQVNNX01VVEVYX0gKICNkZWZpbmUgX0FTTV9NVVRFWF9ICiAKLSNpbmNsdWRlICJhc20vYWx0ZXJuYXRpdmUuaCIKKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KIAogLyoqCiAgKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrIC0gdHJ5IHRvIHRha2UgdGhlIGxvY2sgYnkgbW92aW5nIHRoZSBjb3VudApAQCAtMjEsMjIgKzIxLDIwIEBACiAgKiB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBUaGlzIGZ1bmN0aW9uIE1VU1QgbGVhdmUgdGhlIHZhbHVlIGxvd2VyIHRoYW4gMQogICogZXZlbiB3aGVuIHRoZSAiMSIgYXNzZXJ0aW9uIHdhc24ndCB0cnVlLgogICovCi0jZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayhjb3VudCwgZmFpbF9mbikJCQkJXAotZG8gewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgZHVtbXk7CQkJCQkJXAotCQkJCQkJCQkJXAotCXR5cGVjaGVjayhhdG9taWNfdCAqLCBjb3VudCk7CQkJCQlcCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayhjb3VudCwgZmFpbF9mbikJCQlcCitkbyB7CQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGR1bW15OwkJCQkJXAorCQkJCQkJCQlcCisJdHlwZWNoZWNrKGF0b21pY190ICosIGNvdW50KTsJCQkJXAogCXR5cGVjaGVja19mbih2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCi0JCQkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQlMT0NLX1BSRUZJWCAiICAgZGVjbCAoJSVlYXgpCVxuIgkJCVwKLQkJCSIgICBqbnMgMWYJCVxuIgkJCVwKLQkJCSIgICBjYWxsICIjZmFpbF9mbiIJXG4iCQkJXAotCQkJIjE6CQkJXG4iCQkJXAotCQkJCQkJCQkJXAotCQk6Ij1hIiAoZHVtbXkpCQkJCQkJXAotCQk6ICJhIiAoY291bnQpCQkJCQkJXAotCQk6ICJtZW1vcnkiLCAiZWN4IiwgImVkeCIpOwkJCQlcCisJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIiAgIGRlY2wgKCUlZWF4KVxuIgkJXAorCQkgICAgICIgICBqbnMgMWYJXG4iCQkJCVwKKwkJICAgICAiICAgY2FsbCAiICNmYWlsX2ZuICJcbiIJCQlcCisJCSAgICAgIjE6XG4iCQkJCQlcCisJCSAgICAgOiAiPWEiIChkdW1teSkJCQkJXAorCQkgICAgIDogImEiIChjb3VudCkJCQkJXAorCQkgICAgIDogIm1lbW9yeSIsICJlY3giLCAiZWR4Iik7CQkJXAogfSB3aGlsZSAoMCkKIAogCkBAIC01MCw4ICs0OCw4IEBACiAgKiB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgZmFzdHBhdGggc3VjY2VlZHMsCiAgKiBvciBhbnl0aGluZyB0aGUgc2xvdyBwYXRoIGZ1bmN0aW9uIHJldHVybnMKICAqLwotc3RhdGljIGlubGluZSBpbnQKLV9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoYXRvbWljX3QgKmNvdW50LCBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoYXRvbWljX3QgKmNvdW50LAorCQkJCQkgICAgICAgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7CiAJaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKGNvdW50KSA8IDApKQogCQlyZXR1cm4gZmFpbF9mbihjb3VudCk7CkBAIC03MiwyMiArNzAsMjAgQEAKICAqIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkgbWFjcm8gbmVlZHMgdG8gcmV0dXJuIDEsIGl0IG5lZWRzCiAgKiB0byByZXR1cm4gMCBvdGhlcndpc2UuCiAgKi8KLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF91bmxvY2soY291bnQsIGZhaWxfZm4pCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IGR1bW15OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0eXBlY2hlY2soYXRvbWljX3QgKiwgY291bnQpOwkJCQkJXAorI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayhjb3VudCwgZmFpbF9mbikJCQlcCitkbyB7CQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGR1bW15OwkJCQkJXAorCQkJCQkJCQlcCisJdHlwZWNoZWNrKGF0b21pY190ICosIGNvdW50KTsJCQkJXAogCXR5cGVjaGVja19mbih2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCi0JCQkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQlMT0NLX1BSRUZJWCAiICAgaW5jbCAoJSVlYXgpCVxuIgkJCVwKLQkJCSIgICBqZwkxZgkJXG4iCQkJXAotCQkJIiAgIGNhbGwgIiNmYWlsX2ZuIglcbiIJCQlcCi0JCQkiMToJCQlcbiIJCQlcCi0JCQkJCQkJCQlcCi0JCToiPWEiIChkdW1teSkJCQkJCQlcCi0JCTogImEiIChjb3VudCkJCQkJCQlcCi0JCTogIm1lbW9yeSIsICJlY3giLCAiZWR4Iik7CQkJCVwKKwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiICAgaW5jbCAoJSVlYXgpXG4iCQlcCisJCSAgICAgIiAgIGpnCTFmXG4iCQkJCVwKKwkJICAgICAiICAgY2FsbCAiICNmYWlsX2ZuICJcbiIJCQlcCisJCSAgICAgIjE6XG4iCQkJCQlcCisJCSAgICAgOiAiPWEiIChkdW1teSkJCQkJXAorCQkgICAgIDogImEiIChjb3VudCkJCQkJXAorCQkgICAgIDogIm1lbW9yeSIsICJlY3giLCAiZWR4Iik7CQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfX211dGV4X3Nsb3dwYXRoX25lZWRzX3RvX3VubG9jaygpCTEKQEAgLTEwNCw4ICsxMDAsOCBAQAogICogQWRkaXRpb25hbGx5LCBpZiB0aGUgdmFsdWUgd2FzIDwgMCBvcmlnaW5hbGx5LCB0aGlzIGZ1bmN0aW9uIG11c3Qgbm90IGxlYXZlCiAgKiBpdCB0byAwIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1fX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soYXRvbWljX3QgKmNvdW50LCBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsCisJCQkJCSAgIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQogewogCS8qCiAJICogV2UgaGF2ZSB0d28gdmFyaWFudHMgaGVyZS4gVGhlIGNtcHhjaGcgYmFzZWQgb25lIGlzIHRoZSBiZXN0IG9uZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L211dGV4XzY0LmggYi9pbmNsdWRlL2FzbS14ODYvbXV0ZXhfNjQuaAppbmRleCA2YzI5NDlhLi5mM2ZhZTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbXV0ZXhfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbXV0ZXhfNjQuaApAQCAtMTYsMjMgKzE2LDIxIEBACiAgKgogICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGFuZCBjYWxscyA8ZmFpbF9mbj4gaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAqLwotI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2sodiwgZmFpbF9mbikJCQkJXAotZG8gewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGR1bW15OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0eXBlY2hlY2soYXRvbWljX3QgKiwgdik7CQkJCQlcCi0JdHlwZWNoZWNrX2ZuKHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCQlcCi0JCQkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQlMT0NLX1BSRUZJWCAiICAgZGVjbCAoJSVyZGkpCVxuIgkJCVwKLQkJCSIgICBqbnMgMWYJCVxuIgkJCVwKLQkJCSIgICBjYWxsICIjZmFpbF9mbiIJXG4iCQkJXAotCQkJIjE6IgkJCQkJCVwKLQkJCQkJCQkJCVwKLQkJOiI9RCIgKGR1bW15KQkJCQkJCVwKLQkJOiAiRCIgKHYpCQkJCQkJXAotCQk6ICJyYXgiLCAicnNpIiwgInJkeCIsICJyY3giLAkJCQlcCi0JCSAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAibWVtb3J5Iik7CQkJXAorI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2sodiwgZmFpbF9mbikJCQlcCitkbyB7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBkdW1teTsJCQkJCVwKKwkJCQkJCQkJXAorCXR5cGVjaGVjayhhdG9taWNfdCAqLCB2KTsJCQkJXAorCXR5cGVjaGVja19mbih2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCisJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIiAgIGRlY2wgKCUlcmRpKVxuIgkJXAorCQkgICAgICIgICBqbnMgMWYJCVxuIgkJCVwKKwkJICAgICAiICAgY2FsbCAiICNmYWlsX2ZuICJcbiIJCQlcCisJCSAgICAgIjE6IgkJCQkJXAorCQkgICAgIDogIj1EIiAoZHVtbXkpCQkJCVwKKwkJICAgICA6ICJEIiAodikJCQkJCVwKKwkJICAgICA6ICJyYXgiLCAicnNpIiwgInJkeCIsICJyY3giLAkJXAorCQkgICAgICAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAibWVtb3J5Iik7CVwKIH0gd2hpbGUgKDApCiAKIC8qKgpAQCAtNDUsOSArNDMsOCBAQAogICogaXQgd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIGZhc3RwYXRoIHN1Y2NlZWRzLAogICogb3IgYW55dGhpbmcgdGhlIHNsb3cgcGF0aCBmdW5jdGlvbiByZXR1cm5zCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1fX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGF0b21pY190ICpjb3VudCwKLQkJCSAgICAgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCitzdGF0aWMgaW5saW5lIGludCBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGF0b21pY190ICpjb3VudCwKKwkJCQkJICAgICAgIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQogewogCWlmICh1bmxpa2VseShhdG9taWNfZGVjX3JldHVybihjb3VudCkgPCAwKSkKIAkJcmV0dXJuIGZhaWxfZm4oY291bnQpOwpAQCAtNjIsMjMgKzU5LDIxIEBACiAgKgogICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGFuZCBjYWxscyA8ZmFpbF9mbj4gaWYgdGhlIHJlc3VsdCBpcyBub25wb3NpdGl2ZS4KICAqLwotI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayh2LCBmYWlsX2ZuKQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZHVtbXk7CQkJCQkJXAotCQkJCQkJCQkJXAotCXR5cGVjaGVjayhhdG9taWNfdCAqLCB2KTsJCQkJCVwKLQl0eXBlY2hlY2tfZm4odm9pZCAoKikoYXRvbWljX3QgKiksIGZhaWxfZm4pOwkJCVwKLQkJCQkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCUxPQ0tfUFJFRklYICIgICBpbmNsICglJXJkaSkJXG4iCQkJXAotCQkJIiAgIGpnIDFmCQlcbiIJCQlcCi0JCQkiICAgY2FsbCAiI2ZhaWxfZm4iCVxuIgkJCVwKLQkJCSIxOgkJCSAgIgkJCVwKLQkJCQkJCQkJCVwKLQkJOiI9RCIgKGR1bW15KQkJCQkJCVwKLQkJOiAiRCIgKHYpCQkJCQkJXAotCQk6ICJyYXgiLCAicnNpIiwgInJkeCIsICJyY3giLAkJCQlcCi0JCSAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAibWVtb3J5Iik7CQkJXAorI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayh2LCBmYWlsX2ZuKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGR1bW15OwkJCQkJXAorCQkJCQkJCQlcCisJdHlwZWNoZWNrKGF0b21pY190ICosIHYpOwkJCQlcCisJdHlwZWNoZWNrX2ZuKHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKKwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiICAgaW5jbCAoJSVyZGkpXG4iCQlcCisJCSAgICAgIiAgIGpnIDFmXG4iCQkJCVwKKwkJICAgICAiICAgY2FsbCAiICNmYWlsX2ZuICJcbiIJCQlcCisJCSAgICAgIjE6IgkJCQkJXAorCQkgICAgIDogIj1EIiAoZHVtbXkpCQkJCVwKKwkJICAgICA6ICJEIiAodikJCQkJCVwKKwkJICAgICA6ICJyYXgiLCAicnNpIiwgInJkeCIsICJyY3giLAkJXAorCQkgICAgICAgInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAibWVtb3J5Iik7CVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKQkxCkBAIC05Myw4ICs4OCw4IEBACiAgKiBpZiBpdCB3YXNuJ3QgMSBvcmlnaW5hbGx5LiBbdGhlIGZhbGxiYWNrIGZ1bmN0aW9uIGlzIG5ldmVyIHVzZWQgb24KICAqIHg4Nl82NCwgYmVjYXVzZSBhbGwgeDg2XzY0IENQVXMgaGF2ZSBhIENNUFhDSEcgaW5zdHJ1Y3Rpb24uXQogICovCi1zdGF0aWMgaW5saW5lIGludAotX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKGF0b21pY190ICpjb3VudCwgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCitzdGF0aWMgaW5saW5lIGludCBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soYXRvbWljX3QgKmNvdW50LAorCQkJCQkgICBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKIHsKIAlpZiAobGlrZWx5KGF0b21pY19jbXB4Y2hnKGNvdW50LCAxLCAwKSA9PSAxKSkKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbm1pLmggYi9pbmNsdWRlL2FzbS14ODYvbm1pLmgKaW5kZXggNTNjY2FjMS4uMWUzNjMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L25taS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9ubWkuaApAQCAtMSw1ICsxLDkzIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJubWlfMzIuaCIKKyNpZm5kZWYgX0FTTV9YODZfTk1JX0hfCisjZGVmaW5lIF9BU01fWDg2X05NSV9IXworCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZmRlZiBBUkNIX0hBU19OTUlfV0FUQ0hET0cKKworLyoqCisgKiBkb19ubWlfY2FsbGJhY2sKKyAqCisgKiBDaGVjayB0byBzZWUgaWYgYSBjYWxsYmFjayBleGlzdHMgYW5kIGV4ZWN1dGUgaXQuICBSZXR1cm4gMQorICogaWYgdGhlIGhhbmRsZXIgZXhpc3RzIGFuZCB3YXMgaGFuZGxlZCBzdWNjZXNzZnVsbHkuCisgKi8KK2ludCBkb19ubWlfY2FsbGJhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpOworCisjaWZkZWYgQ09ORklHX1BNCisKKy8qKiBSZXBsYWNlIHRoZSBQTSBjYWxsYmFjayByb3V0aW5lIGZvciBOTUkuICovCitzdHJ1Y3QgcG1fZGV2ICpzZXRfbm1pX3BtX2NhbGxiYWNrKHBtX2NhbGxiYWNrIGNhbGxiYWNrKTsKKworLyoqIFVuc2V0IHRoZSBQTSBjYWxsYmFjayByb3V0aW5lIGJhY2sgdG8gdGhlIGRlZmF1bHQuICovCit2b2lkIHVuc2V0X25taV9wbV9jYWxsYmFjayhzdHJ1Y3QgcG1fZGV2ICpkZXYpOworCiAjZWxzZQotIyBpbmNsdWRlICJubWlfNjQuaCIKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG1fZGV2ICpzZXRfbm1pX3BtX2NhbGxiYWNrKHBtX2NhbGxiYWNrIGNhbGxiYWNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5zZXRfbm1pX3BtX2NhbGxiYWNrKHN0cnVjdCBwbV9kZXYgKmRldikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorZXh0ZXJuIHZvaWQgZGVmYXVsdF9kb19ubWkoc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBkaWVfbm1pKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBkb19wYW5pYyk7CitleHRlcm4gdm9pZCBubWlfd2F0Y2hkb2dfZGVmYXVsdCh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIG5taV93YXRjaGRvZ19kZWZhdWx0KCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gaW50IG5taV93YXRjaGRvZ19lbmFibGVkOworZXh0ZXJuIGludCB1bmtub3duX25taV9wYW5pYzsKK2V4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgcmVzZXJ2ZV9ldm50c2VsX25taSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9ldm50c2VsX25taSh1bnNpZ25lZCBpbnQpOworCitleHRlcm4gdm9pZCBzZXR1cF9hcGljX25taV93YXRjaGRvZyh2b2lkICopOworZXh0ZXJuIHZvaWQgc3RvcF9hcGljX25taV93YXRjaGRvZyh2b2lkICopOworZXh0ZXJuIHZvaWQgZGlzYWJsZV90aW1lcl9ubWlfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gdm9pZCBlbmFibGVfdGltZXJfbm1pX3dhdGNoZG9nKHZvaWQpOworZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfdGljayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgcmVhc29uKTsKKworZXh0ZXJuIGF0b21pY190IG5taV9hY3RpdmU7CitleHRlcm4gdW5zaWduZWQgaW50IG5taV93YXRjaGRvZzsKKyNkZWZpbmUgTk1JX0RJU0FCTEVEICAgIC0xCisjZGVmaW5lIE5NSV9OT05FCTAKKyNkZWZpbmUgTk1JX0lPX0FQSUMJMQorI2RlZmluZSBOTUlfTE9DQUxfQVBJQwkyCisjZGVmaW5lIE5NSV9JTlZBTElECTMKKyNkZWZpbmUgTk1JX0RFRkFVTFQJTk1JX0RJU0FCTEVECisKK3N0cnVjdCBjdGxfdGFibGU7CitzdHJ1Y3QgZmlsZTsKK2V4dGVybiBpbnQgcHJvY19ubWlfZW5hYmxlZChzdHJ1Y3QgY3RsX3RhYmxlICosIGludCAsIHN0cnVjdCBmaWxlICosCisJCQl2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOworZXh0ZXJuIGludCB1bmtub3duX25taV9wYW5pYzsKKwordm9pZCBfX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCk7CisjZGVmaW5lIHRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKSBfX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKQorCisjZW5kaWYKKwordm9pZCBsYXBpY193YXRjaGRvZ19zdG9wKHZvaWQpOworaW50IGxhcGljX3dhdGNoZG9nX2luaXQodW5zaWduZWQgbm1pX2h6KTsKK2ludCBsYXBpY193ZF9ldmVudCh1bnNpZ25lZCBubWlfaHopOwordW5zaWduZWQgbGFwaWNfYWRqdXN0X25taV9oeih1bnNpZ25lZCBoeik7CitpbnQgbGFwaWNfd2F0Y2hkb2dfb2sodm9pZCk7Cit2b2lkIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwordm9pZCBlbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwordm9pZCBzdG9wX25taSh2b2lkKTsKK3ZvaWQgcmVzdGFydF9ubWkodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L25taV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L25taV8zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjA2YzdlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9ubWlfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSNpZm5kZWYgQVNNX05NSV9ICi0jZGVmaW5lIEFTTV9OTUlfSAotCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpZmRlZiBBUkNIX0hBU19OTUlfV0FUQ0hET0cKLQotLyoqCi0gKiBkb19ubWlfY2FsbGJhY2sKLSAqCi0gKiBDaGVjayB0byBzZWUgaWYgYSBjYWxsYmFjayBleGlzdHMgYW5kIGV4ZWN1dGUgaXQuICBSZXR1cm4gMQotICogaWYgdGhlIGhhbmRsZXIgZXhpc3RzIGFuZCB3YXMgaGFuZGxlZCBzdWNjZXNzZnVsbHkuCi0gKi8KLWludCBkb19ubWlfY2FsbGJhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpOwotCi1leHRlcm4gaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwotZXh0ZXJuIGludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQodW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgcmVzZXJ2ZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgcmVsZWFzZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIGludCByZXNlcnZlX2V2bnRzZWxfbm1pKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCByZWxlYXNlX2V2bnRzZWxfbm1pKHVuc2lnbmVkIGludCk7Ci0KLWV4dGVybiB2b2lkIHNldHVwX2FwaWNfbm1pX3dhdGNoZG9nICh2b2lkICopOwotZXh0ZXJuIHZvaWQgc3RvcF9hcGljX25taV93YXRjaGRvZyAodm9pZCAqKTsKLWV4dGVybiB2b2lkIGRpc2FibGVfdGltZXJfbm1pX3dhdGNoZG9nKHZvaWQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX3RpbWVyX25taV93YXRjaGRvZyh2b2lkKTsKLWV4dGVybiBpbnQgbm1pX3dhdGNoZG9nX3RpY2sgKHN0cnVjdCBwdF9yZWdzICogcmVncywgdW5zaWduZWQgcmVhc29uKTsKLQotZXh0ZXJuIGF0b21pY190IG5taV9hY3RpdmU7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5taV93YXRjaGRvZzsKLSNkZWZpbmUgTk1JX0RJU0FCTEVEICAgIC0xCi0jZGVmaW5lIE5NSV9OT05FCTAKLSNkZWZpbmUgTk1JX0lPX0FQSUMJMQotI2RlZmluZSBOTUlfTE9DQUxfQVBJQwkyCi0jZGVmaW5lIE5NSV9JTlZBTElECTMKLSNkZWZpbmUgTk1JX0RFRkFVTFQJTk1JX0RJU0FCTEVECi0KLXN0cnVjdCBjdGxfdGFibGU7Ci1zdHJ1Y3QgZmlsZTsKLWV4dGVybiBpbnQgcHJvY19ubWlfZW5hYmxlZChzdHJ1Y3QgY3RsX3RhYmxlICosIGludCAsIHN0cnVjdCBmaWxlICosCi0JCQl2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwotZXh0ZXJuIGludCB1bmtub3duX25taV9wYW5pYzsKLQotdm9pZCBfX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCk7Ci0jZGVmaW5lIHRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKSBfX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKQotCi0jZW5kaWYKLQotdm9pZCBsYXBpY193YXRjaGRvZ19zdG9wKHZvaWQpOwotaW50IGxhcGljX3dhdGNoZG9nX2luaXQodW5zaWduZWQgbm1pX2h6KTsKLWludCBsYXBpY193ZF9ldmVudCh1bnNpZ25lZCBubWlfaHopOwotdW5zaWduZWQgbGFwaWNfYWRqdXN0X25taV9oeih1bnNpZ25lZCBoeik7Ci1pbnQgbGFwaWNfd2F0Y2hkb2dfb2sodm9pZCk7Ci12b2lkIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwotdm9pZCBlbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwotdm9pZCBzdG9wX25taSh2b2lkKTsKLXZvaWQgcmVzdGFydF9ubWkodm9pZCk7Ci0KLSNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9ubWlfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9ubWlfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlYjc0ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbm1pXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0jaWZuZGVmIEFTTV9OTUlfSAotI2RlZmluZSBBU01fTk1JX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0gCi0vKioKLSAqIGRvX25taV9jYWxsYmFjawotICoKLSAqIENoZWNrIHRvIHNlZSBpZiBhIGNhbGxiYWNrIGV4aXN0cyBhbmQgZXhlY3V0ZSBpdC4gIFJldHVybiAxCi0gKiBpZiB0aGUgaGFuZGxlciBleGlzdHMgYW5kIHdhcyBoYW5kbGVkIHN1Y2Nlc3NmdWxseS4KLSAqLwotaW50IGRvX25taV9jYWxsYmFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNwdSk7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLSAKLS8qKiBSZXBsYWNlIHRoZSBQTSBjYWxsYmFjayByb3V0aW5lIGZvciBOTUkuICovCi1zdHJ1Y3QgcG1fZGV2ICogc2V0X25taV9wbV9jYWxsYmFjayhwbV9jYWxsYmFjayBjYWxsYmFjayk7Ci0KLS8qKiBVbnNldCB0aGUgUE0gY2FsbGJhY2sgcm91dGluZSBiYWNrIHRvIHRoZSBkZWZhdWx0LiAqLwotdm9pZCB1bnNldF9ubWlfcG1fY2FsbGJhY2soc3RydWN0IHBtX2RldiAqIGRldik7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBtX2RldiAqIHNldF9ubWlfcG1fY2FsbGJhY2socG1fY2FsbGJhY2sgY2FsbGJhY2spCi17Ci0JcmV0dXJuIDA7Ci19IAotIAotc3RhdGljIGlubGluZSB2b2lkIHVuc2V0X25taV9wbV9jYWxsYmFjayhzdHJ1Y3QgcG1fZGV2ICogZGV2KQotewotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0gCi1leHRlcm4gdm9pZCBkZWZhdWx0X2RvX25taShzdHJ1Y3QgcHRfcmVncyAqKTsKLWV4dGVybiB2b2lkIGRpZV9ubWkoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGRvX3BhbmljKTsKLQotI2RlZmluZSBnZXRfbm1pX3JlYXNvbigpIGluYigweDYxKQotCi1leHRlcm4gaW50IHVua25vd25fbm1pX3BhbmljOwotZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKLQotZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCk7Ci1leHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pX2JpdCh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIGludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIGludCByZXNlcnZlX3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCByZWxlYXNlX3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IHJlc2VydmVfZXZudHNlbF9ubWkodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIHJlbGVhc2VfZXZudHNlbF9ubWkodW5zaWduZWQgaW50KTsKLQotZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2cgKHZvaWQgKik7Ci1leHRlcm4gdm9pZCBzdG9wX2FwaWNfbm1pX3dhdGNoZG9nICh2b2lkICopOwotZXh0ZXJuIHZvaWQgZGlzYWJsZV90aW1lcl9ubWlfd2F0Y2hkb2codm9pZCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfdGltZXJfbm1pX3dhdGNoZG9nKHZvaWQpOwotZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfdGljayAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCB1bnNpZ25lZCByZWFzb24pOwotCi1leHRlcm4gdm9pZCBubWlfd2F0Y2hkb2dfZGVmYXVsdCh2b2lkKTsKLQotZXh0ZXJuIGF0b21pY190IG5taV9hY3RpdmU7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5taV93YXRjaGRvZzsKLSNkZWZpbmUgTk1JX0RJU0FCTEVEICAgIC0xCi0jZGVmaW5lIE5NSV9OT05FCTAKLSNkZWZpbmUgTk1JX0lPX0FQSUMJMQotI2RlZmluZSBOTUlfTE9DQUxfQVBJQwkyCi0jZGVmaW5lIE5NSV9JTlZBTElECTMKLSNkZWZpbmUgTk1JX0RFRkFVTFQJTk1JX0RJU0FCTEVECi0KLXN0cnVjdCBjdGxfdGFibGU7Ci1zdHJ1Y3QgZmlsZTsKLWV4dGVybiBpbnQgcHJvY19ubWlfZW5hYmxlZChzdHJ1Y3QgY3RsX3RhYmxlICosIGludCAsIHN0cnVjdCBmaWxlICosCi0JCQl2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwotCi1leHRlcm4gaW50IHVua25vd25fbm1pX3BhbmljOwotCi12b2lkIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKTsKLSNkZWZpbmUgdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpCi0KLQotdm9pZCBsYXBpY193YXRjaGRvZ19zdG9wKHZvaWQpOwotaW50IGxhcGljX3dhdGNoZG9nX2luaXQodW5zaWduZWQgbm1pX2h6KTsKLWludCBsYXBpY193ZF9ldmVudCh1bnNpZ25lZCBubWlfaHopOwotdW5zaWduZWQgbGFwaWNfYWRqdXN0X25taV9oeih1bnNpZ25lZCBoeik7Ci1pbnQgbGFwaWNfd2F0Y2hkb2dfb2sodm9pZCk7Ci12b2lkIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwotdm9pZCBlbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwotdm9pZCBzdG9wX25taSh2b2lkKTsKLXZvaWQgcmVzdGFydF9ubWkodm9pZCk7Ci0KLSNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9ub3BzLmggYi9pbmNsdWRlL2FzbS14ODYvbm9wcy5oCmluZGV4IGZlYzAyNWMuLmFkMGJlZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9ub3BzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L25vcHMuaApAQCAtMywxNyArMywzMSBAQAogCiAvKiBEZWZpbmUgbm9wcyBmb3IgdXNlIHdpdGggYWx0ZXJuYXRpdmUoKSAqLwogCi0vKiBnZW5lcmljIHZlcnNpb25zIGZyb20gZ2FzICovCi0jZGVmaW5lIEdFTkVSSUNfTk9QMQkiLmJ5dGUgMHg5MFxuIgotI2RlZmluZSBHRU5FUklDX05PUDIgICAgCSIuYnl0ZSAweDg5LDB4ZjZcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1AzICAgICAgICAiLmJ5dGUgMHg4ZCwweDc2LDB4MDBcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1A0ICAgICAgICAiLmJ5dGUgMHg4ZCwweDc0LDB4MjYsMHgwMFxuIgotI2RlZmluZSBHRU5FUklDX05PUDUgICAgICAgIEdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDQKLSNkZWZpbmUgR0VORVJJQ19OT1A2CSIuYnl0ZSAweDhkLDB4YjYsMHgwMCwweDAwLDB4MDAsMHgwMFxuIgotI2RlZmluZSBHRU5FUklDX05PUDcJIi5ieXRlIDB4OGQsMHhiNCwweDI2LDB4MDAsMHgwMCwweDAwLDB4MDBcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1A4CUdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDcKKy8qIGdlbmVyaWMgdmVyc2lvbnMgZnJvbSBnYXMKKyAgIDE6IG5vcAorICAgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgYXJlIE5PVCBub3BzIGluIDY0LWJpdCBtb2RlLAorICAgZm9yIDY0LWJpdCBtb2RlIHVzZSBLOCBvciBQNiBub3BzIGluc3RlYWQKKyAgIDI6IG1vdmwgJWVzaSwlZXNpCisgICAzOiBsZWFsIDB4MDAoJWVzaSksJWVzaQorICAgNDogbGVhbCAweDAwKCwlZXNpLDEpLCVlc2kKKyAgIDY6IGxlYWwgMHgwMDAwMDAwMCglZXNpKSwlZXNpCisgICA3OiBsZWFsIDB4MDAwMDAwMDAoLCVlc2ksMSksJWVzaQorKi8KKyNkZWZpbmUgR0VORVJJQ19OT1AxICIuYnl0ZSAweDkwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QMiAiLmJ5dGUgMHg4OSwweGY2XG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QMyAiLmJ5dGUgMHg4ZCwweDc2LDB4MDBcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1A0ICIuYnl0ZSAweDhkLDB4NzQsMHgyNiwweDAwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QNSBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A0CisjZGVmaW5lIEdFTkVSSUNfTk9QNiAiLmJ5dGUgMHg4ZCwweGI2LDB4MDAsMHgwMCwweDAwLDB4MDBcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1A3ICIuYnl0ZSAweDhkLDB4YjQsMHgyNiwweDAwLDB4MDAsMHgwMCwweDAwXG4iCisjZGVmaW5lIEdFTkVSSUNfTk9QOCBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A3CiAKLS8qIE9wdGVyb24gNjRiaXQgbm9wcyAqLworLyogT3B0ZXJvbiA2NGJpdCBub3BzCisgICAxOiBub3AKKyAgIDI6IG9zcCBub3AKKyAgIDM6IG9zcCBvc3Agbm9wCisgICA0OiBvc3Agb3NwIG9zcCBub3AKKyovCiAjZGVmaW5lIEs4X05PUDEgR0VORVJJQ19OT1AxCiAjZGVmaW5lIEs4X05PUDIJIi5ieXRlIDB4NjYsMHg5MFxuIgogI2RlZmluZSBLOF9OT1AzCSIuYnl0ZSAweDY2LDB4NjYsMHg5MFxuIgpAQCAtMjMsMTkgKzM3LDM1IEBACiAjZGVmaW5lIEs4X05PUDcJSzhfTk9QNCBLOF9OT1AzCiAjZGVmaW5lIEs4X05PUDgJSzhfTk9QNCBLOF9OT1A0CiAKLS8qIEs3IG5vcHMgKi8KLS8qIHVzZXMgZWF4IGRlcGVuZGVuY2llcyAoYXJiaXRhcnkgY2hvaWNlKSAqLwotI2RlZmluZSBLN19OT1AxICBHRU5FUklDX05PUDEKKy8qIEs3IG5vcHMKKyAgIHVzZXMgZWF4IGRlcGVuZGVuY2llcyAoYXJiaXRhcnkgY2hvaWNlKQorICAgMTogbm9wCisgICAyOiBtb3ZsICVlYXgsJWVheAorICAgMzogbGVhbCAoLCVlYXgsMSksJWVheAorICAgNDogbGVhbCAweDAwKCwlZWF4LDEpLCVlYXgKKyAgIDY6IGxlYWwgMHgwMDAwMDAwMCglZWF4KSwlZWF4CisgICA3OiBsZWFsIDB4MDAwMDAwMDAoLCVlYXgsMSksJWVheAorKi8KKyNkZWZpbmUgSzdfTk9QMQlHRU5FUklDX05PUDEKICNkZWZpbmUgSzdfTk9QMgkiLmJ5dGUgMHg4YiwweGMwXG4iCiAjZGVmaW5lIEs3X05PUDMJIi5ieXRlIDB4OGQsMHgwNCwweDIwXG4iCiAjZGVmaW5lIEs3X05PUDQJIi5ieXRlIDB4OGQsMHg0NCwweDIwLDB4MDBcbiIKICNkZWZpbmUgSzdfTk9QNQlLN19OT1A0IEFTTV9OT1AxCiAjZGVmaW5lIEs3X05PUDYJIi5ieXRlIDB4OGQsMHg4MCwwLDAsMCwwXG4iCi0jZGVmaW5lIEs3X05PUDcgICAgICAgICIuYnl0ZSAweDhELDB4MDQsMHgwNSwwLDAsMCwwXG4iCi0jZGVmaW5lIEs3X05PUDggICAgICAgIEs3X05PUDcgQVNNX05PUDEKKyNkZWZpbmUgSzdfTk9QNwkiLmJ5dGUgMHg4RCwweDA0LDB4MDUsMCwwLDAsMFxuIgorI2RlZmluZSBLN19OT1A4CUs3X05PUDcgQVNNX05PUDEKIAotLyogUDYgbm9wcyAqLwotLyogdXNlcyBlYXggZGVwZW5kZW5jaWVzIChJbnRlbC1yZWNvbW1lbmRlZCBjaG9pY2UpICovCisvKiBQNiBub3BzCisgICB1c2VzIGVheCBkZXBlbmRlbmNpZXMgKEludGVsLXJlY29tbWVuZGVkIGNob2ljZSkKKyAgIDE6IG5vcAorICAgMjogb3NwIG5vcAorICAgMzogbm9wbCAoJWVheCkKKyAgIDQ6IG5vcGwgMHgwMCglZWF4KQorICAgNTogbm9wbCAweDAwKCVlYXgsJWVheCwxKQorICAgNjogb3NwIG5vcGwgMHgwMCglZWF4LCVlYXgsMSkKKyAgIDc6IG5vcGwgMHgwMDAwMDAwMCglZWF4KQorICAgODogbm9wbCAweDAwMDAwMDAwKCVlYXgsJWVheCwxKQorKi8KICNkZWZpbmUgUDZfTk9QMQlHRU5FUklDX05PUDEKICNkZWZpbmUgUDZfTk9QMgkiLmJ5dGUgMHg2NiwweDkwXG4iCiAjZGVmaW5lIFA2X05PUDMJIi5ieXRlIDB4MGYsMHgxZiwweDAwXG4iCkBAIC00NSwxNiArNzUsNyBAQAogI2RlZmluZSBQNl9OT1A3CSIuYnl0ZSAweDBmLDB4MWYsMHg4MCwwLDAsMCwwXG4iCiAjZGVmaW5lIFA2X05PUDgJIi5ieXRlIDB4MGYsMHgxZiwweDg0LDB4MDAsMCwwLDAsMFxuIgogCi0jaWYgZGVmaW5lZChDT05GSUdfTUs4KQotI2RlZmluZSBBU01fTk9QMSBLOF9OT1AxCi0jZGVmaW5lIEFTTV9OT1AyIEs4X05PUDIKLSNkZWZpbmUgQVNNX05PUDMgSzhfTk9QMwotI2RlZmluZSBBU01fTk9QNCBLOF9OT1A0Ci0jZGVmaW5lIEFTTV9OT1A1IEs4X05PUDUKLSNkZWZpbmUgQVNNX05PUDYgSzhfTk9QNgotI2RlZmluZSBBU01fTk9QNyBLOF9OT1A3Ci0jZGVmaW5lIEFTTV9OT1A4IEs4X05PUDgKLSNlbGlmIGRlZmluZWQoQ09ORklHX01LNykKKyNpZiBkZWZpbmVkKENPTkZJR19NSzcpCiAjZGVmaW5lIEFTTV9OT1AxIEs3X05PUDEKICNkZWZpbmUgQVNNX05PUDIgSzdfTk9QMgogI2RlZmluZSBBU01fTk9QMyBLN19OT1AzCkBAIC02Myw5ICs4NCw3IEBACiAjZGVmaW5lIEFTTV9OT1A2IEs3X05PUDYKICNkZWZpbmUgQVNNX05PUDcgSzdfTk9QNwogI2RlZmluZSBBU01fTk9QOCBLN19OT1A4Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjg2KSB8fCBkZWZpbmVkKENPTkZJR19NUEVOVElVTUlJKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19NUEVOVElVTUlJSSkgfHwgZGVmaW5lZChDT05GSUdfTVBFTlRJVU1NKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19NQ09SRTIpIHx8IGRlZmluZWQoQ09ORklHX1BFTlRJVU00KQorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2X1A2X05PUCkKICNkZWZpbmUgQVNNX05PUDEgUDZfTk9QMQogI2RlZmluZSBBU01fTk9QMiBQNl9OT1AyCiAjZGVmaW5lIEFTTV9OT1AzIFA2X05PUDMKQEAgLTc0LDYgKzkzLDE1IEBACiAjZGVmaW5lIEFTTV9OT1A2IFA2X05PUDYKICNkZWZpbmUgQVNNX05PUDcgUDZfTk9QNwogI2RlZmluZSBBU01fTk9QOCBQNl9OT1A4CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjZGVmaW5lIEFTTV9OT1AxIEs4X05PUDEKKyNkZWZpbmUgQVNNX05PUDIgSzhfTk9QMgorI2RlZmluZSBBU01fTk9QMyBLOF9OT1AzCisjZGVmaW5lIEFTTV9OT1A0IEs4X05PUDQKKyNkZWZpbmUgQVNNX05PUDUgSzhfTk9QNQorI2RlZmluZSBBU01fTk9QNiBLOF9OT1A2CisjZGVmaW5lIEFTTV9OT1A3IEs4X05PUDcKKyNkZWZpbmUgQVNNX05PUDggSzhfTk9QOAogI2Vsc2UKICNkZWZpbmUgQVNNX05PUDEgR0VORVJJQ19OT1AxCiAjZGVmaW5lIEFTTV9OT1AyIEdFTkVSSUNfTk9QMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L251bWFfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9udW1hXzY0LmgKaW5kZXggMTVmZTA3Yy4uMjJlODdjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L251bWFfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbnVtYV82NC5oCkBAIC0xLDE0ICsxLDE2IEBACi0jaWZuZGVmIF9BU01fWDg2NjRfTlVNQV9IIAorI2lmbmRlZiBfQVNNX1g4NjY0X05VTUFfSAogI2RlZmluZSBfQVNNX1g4NjY0X05VTUFfSCAxCiAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAKIHN0cnVjdCBib290bm9kZSB7Ci0JdTY0IHN0YXJ0LGVuZDsgCisJdTY0IHN0YXJ0OworCXU2NCBlbmQ7CiB9OwogCi1leHRlcm4gaW50IGNvbXB1dGVfaGFzaF9zaGlmdChzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzLCBpbnQgbnVtbm9kZXMpOworZXh0ZXJuIGludCBjb21wdXRlX2hhc2hfc2hpZnQoc3RydWN0IGJvb3Rub2RlICpub2RlcywgaW50IG51bWJsa3MsCisJCQkgICAgICBpbnQgKm5vZGVpZHMpOwogCiAjZGVmaW5lIFpPTkVfQUxJR04gKDFVTCA8PCAoTUFYX09SREVSK1BBR0VfU0hJRlQpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbnVtYXEuaCBiL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS5oCmluZGV4IDM4ZjcxMGQuLjk0Yjg2YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCiAgKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzMsNyArMzMsOCBAQAogLyoKICAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQogICovCi0jZGVmaW5lIFNZU19DRkdfREFUQV9QUklWX0FERFIJCTB4MDAwOWQwMDAgLyogcGxhY2UgZm9yIHNjZCBpbiBwcml2YXRlIHF1YWQgc3BhY2UgKi8KKyNkZWZpbmUgU1lTX0NGR19EQVRBX1BSSVZfQUREUgkJMHgwMDA5ZDAwMCAvKiBwbGFjZSBmb3Igc2NkIGluIHByaXZhdGUKKwkJCQkJCSAgICAgIHF1YWQgc3BhY2UgKi8KIAogLyoKICAqIENvbW11bmljYXRpb24gYXJlYSBmb3IgZWFjaCBwcm9jZXNzb3Igb24gbHlueGVyLXByb2Nlc3NvciB0ZXN0cy4KQEAgLTEzOSw3ICsxNDAsNyBAQAogCXVuc2lnbmVkIGludAlsb3dfc2hyZF9tZW1fYmFzZTsgLyogMCBvciA1MTJNQiBvciAxR0IgKi8KIAl1bnNpZ25lZCBpbnQJbG93X3NocmRfbWVtX3F1YWRfb2Zmc2V0OyAvKiAwLDEyOE0sMjU2TSw1MTJNLDFHICovCiAJCQkJCS8qIG1heSBub3QgYmUgdG90YWxseSBwb3B1bGF0ZWQgKi8KLQl1bnNpZ25lZCBpbnQJc3BsaXRfbWVtX2VuYmw7IC8qIDAgZm9yIG5vIGxvdyBzaGFyZWQgbWVtb3J5ICovIAorCXVuc2lnbmVkIGludAlzcGxpdF9tZW1fZW5ibDsgLyogMCBmb3Igbm8gbG93IHNoYXJlZCBtZW1vcnkgKi8KIAl1bnNpZ25lZCBpbnQJbW1pb19zejsgLyogU2l6ZSBvZiB0b3RhbCBzeXN0ZW0gbWVtb3J5IG1hcHBlZCBJL08gKi8KIAkJCQkgLyogKGluIE1CKS4gKi8KIAl1bnNpZ25lZCBpbnQJcXVhZF9zcGluX2xvY2s7IC8qIFNwYXJlIGxvY2F0aW9uIHVzZWQgZm9yIHF1YWQgKi8KQEAgLTE1Miw3ICsxNTMsNyBAQAogCS8qCiAJICoJbWVtb3J5IGNvbmZpZ3VyYXRpb24gYXJlYSBmb3IgZWFjaCBxdWFkCiAJICovCi0gICAgICAgIHN0cnVjdAllYWNocXVhZG1lbSBlcVtNQVhfTlVNTk9ERVNdOwkvKiBpbmRleGVkIGJ5IHF1YWQgaWQgKi8KKwlzdHJ1Y3QJCWVhY2hxdWFkbWVtIGVxW01BWF9OVU1OT0RFU107CS8qIGluZGV4ZWQgYnkgcXVhZCBpZCAqLwogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICpnZXRfemhvbGVzX3NpemUoaW50IG5pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmggYi9pbmNsdWRlL2FzbS14ODYvcGFnZS5oCmluZGV4IDFjYjdjNTEuLjY3MjRhNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BhZ2UuaApAQCAtMzMsMTAgKzMzLDggQEAKIAogI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRlIDxhc20vcGFnZV82NC5oPgotI2RlZmluZSBtYXhfcGZuX21hcHBlZAkJZW5kX3Bmbl9tYXAKICNlbHNlCiAjaW5jbHVkZSA8YXNtL3BhZ2VfMzIuaD4KLSNkZWZpbmUgbWF4X3Bmbl9tYXBwZWQJCW1heF9sb3dfcGZuCiAjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLwogCiAjZGVmaW5lIFBBR0VfT0ZGU0VUCQkoKHVuc2lnbmVkIGxvbmcpX19QQUdFX09GRlNFVCkKQEAgLTUwLDE1ICs0OCwxNyBAQAogCiBleHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CisKIHN0cnVjdCBwYWdlOwogCi1zdGF0aWMgdm9pZCBpbmxpbmUgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCiAJCQkJc3RydWN0IHBhZ2UgKnBnKQogewogCWNsZWFyX3BhZ2UocGFnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwKIAkJCQlzdHJ1Y3QgcGFnZSAqdG9wYWdlKQogewogCWNvcHlfcGFnZSh0bywgZnJvbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGFnZV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L3BhZ2VfMzIuaAppbmRleCA1ZjcyNTdmLi40MjRlODJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGFnZV8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzMyLmgKQEAgLTQ3LDcgKzQ3LDEwIEBACiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGh5c19hZGRyX3Q7CiAKLXR5cGVkZWYgdW5pb24geyBwdGV2YWxfdCBwdGUsIHB0ZV9sb3c7IH0gcHRlX3Q7Cit0eXBlZGVmIHVuaW9uIHsKKwlwdGV2YWxfdCBwdGU7CisJcHRldmFsX3QgcHRlX2xvdzsKK30gcHRlX3Q7CiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwpAQCAtNjEsNyArNjQsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIF9fcGh5c19hZGRyKHgpCQkoKHgpLVBBR0VfT0ZGU0VUKQorI2RlZmluZSBfX3BoeXNfYWRkcih4KQkJKCh4KSAtIFBBR0VfT0ZGU0VUKQogI2RlZmluZSBfX3BoeXNfcmVsb2NfaGlkZSh4KQlSRUxPQ19ISURFKCh4KSwgMCkKIAogI2lmZGVmIENPTkZJR19GTEFUTUVNCkBAIC03OCw3ICs4MSw3IEBACiBleHRlcm4gaW50IHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OwogCiAjZGVmaW5lIFZNQUxMT0NfUkVTRVJWRQkJKCh1bnNpZ25lZCBsb25nKV9fVk1BTExPQ19SRVNFUlZFKQotI2RlZmluZSBNQVhNRU0JCQkoLV9fUEFHRV9PRkZTRVQtX19WTUFMTE9DX1JFU0VSVkUpCisjZGVmaW5lIE1BWE1FTQkJCSgtX19QQUdFX09GRlNFVCAtIF9fVk1BTExPQ19SRVNFUlZFKQogCiAjaWZkZWYgQ09ORklHX1g4Nl9VU0VfM0ROT1cKICNpbmNsdWRlIDxhc20vbW14Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGFnZV82NC5oIGIvaW5jbHVkZS9hc20teDg2L3BhZ2VfNjQuaAppbmRleCBmNzM5M2JjLi42ZWE3Mjg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGFnZV82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzY0LmgKQEAgLTUsNyArNSw3IEBACiAKICNkZWZpbmUgVEhSRUFEX09SREVSCTEKICNkZWZpbmUgVEhSRUFEX1NJWkUgIChQQUdFX1NJWkUgPDwgVEhSRUFEX09SREVSKQotI2RlZmluZSBDVVJSRU5UX01BU0sgKH4oVEhSRUFEX1NJWkUtMSkpCisjZGVmaW5lIENVUlJFTlRfTUFTSyAofihUSFJFQURfU0laRSAtIDEpKQogCiAjZGVmaW5lIEVYQ0VQVElPTl9TVEFDS19PUkRFUiAwCiAjZGVmaW5lIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFIDw8IEVYQ0VQVElPTl9TVEFDS19PUkRFUikKQEAgLTQ3LDE1ICs0NywxOCBAQAogI2RlZmluZSBfX1BIWVNJQ0FMX01BU0tfU0hJRlQJNDYKICNkZWZpbmUgX19WSVJUVUFMX01BU0tfU0hJRlQJNDgKIAotI2RlZmluZSBLRVJORUxfVEVYVF9TSVpFICAoNDAqMTAyNCoxMDI0KQotI2RlZmluZSBLRVJORUxfVEVYVF9TVEFSVCBfQUMoMHhmZmZmZmZmZjgwMDAwMDAwLCBVTCkKKy8qCisgKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGxldmVsMl9rZXJuZWxfcGd0IGluCisgKiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TKSwgYW5kIGl0IGlzIG1hcHBlZCBoZXJlOgorICovCisjZGVmaW5lIEtFUk5FTF9JTUFHRV9TSVpFCSg1MTIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgS0VSTkVMX0lNQUdFX1NUQVJUCV9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwogdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBlbmRfcGZuOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbl9tYXA7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcpOwpAQCAtNzcsNiArODAsOSBAQAogCiAjZGVmaW5lIHZtZW1tYXAgKChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfU1RBUlQpCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfbWVtb3J5X21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kKTsKKwogI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KIAogI2lmZGVmIENPTkZJR19GTEFUTUVNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYXJhbS5oCmluZGV4IGM5OTZlYzQuLjZmMGQwNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wYXJhbS5oCkBAIC0zLDggKzMsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KLSMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKSAgICAgICAvKiBsaWtlIHRpbWVzKCkgKi8KKyMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgKi8KKyMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKSAgICAgICAvKiBpbiAidGlja3MiIGxpa2UgdGltZXMoKSAqLwogI2VuZGlmCiAKICNpZm5kZWYgSFoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wYXJhdmlydC5oIGIvaW5jbHVkZS9hc20teDg2L3BhcmF2aXJ0LmgKaW5kZXggZDYyMzZlYi4uM2Q0MTkzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhcmF2aXJ0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BhcmF2aXJ0LmgKQEAgLTIzMSw3ICsyMzEsOCBAQAogCXZvaWQgKCpzZXRfcHRlX2F0KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CiAJdm9pZCAoKnNldF9wbWQpKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpOwotCXZvaWQgKCpwdGVfdXBkYXRlKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7CisJdm9pZCAoKnB0ZV91cGRhdGUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICBwdGVfdCAqcHRlcCk7CiAJdm9pZCAoKnB0ZV91cGRhdGVfZGVmZXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKIApAQCAtMjQ2LDcgKzI0Nyw4IEBACiAJdm9pZCAoKnNldF9wdGVfYXRvbWljKShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKTsKIAl2b2lkICgqc2V0X3B0ZV9wcmVzZW50KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOwotCXZvaWQgKCpwdGVfY2xlYXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKKwl2b2lkICgqcHRlX2NsZWFyKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICBwdGVfdCAqcHRlcCk7CiAJdm9pZCAoKnBtZF9jbGVhcikocG1kX3QgKnBtZHApOwogCiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KQEAgLTI3NCw4ICsyNzYsNyBAQAogLyogVGhpcyBjb250YWlucyBhbGwgdGhlIHBhcmF2aXJ0IHN0cnVjdHVyZXM6IHdlIGdldCBhIGNvbnZlbmllbnQKICAqIG51bWJlciBmb3IgZWFjaCBmdW5jdGlvbiB1c2luZyB0aGUgb2Zmc2V0IHdoaWNoIHdlIHVzZSB0byBpbmRpY2F0ZQogICogd2hhdCB0byBwYXRjaC4gKi8KLXN0cnVjdCBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZQoteworc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlIHsKIAlzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7CiAJc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOwogCXN0cnVjdCBwdl9jcHVfb3BzIHB2X2NwdV9vcHM7CkBAIC02NjAsNDMgKzY2MSw1NiBAQAogfQogCiAvKiBUaGVzZSBzaG91bGQgYWxsIGRvIEJVR19PTihfZXJyKSwgYnV0IG91ciBoZWFkZXJzIGFyZSB0b28gdGFuZ2xlZC4gKi8KLSNkZWZpbmUgcmRtc3IobXNyLHZhbDEsdmFsMikgZG8gewkJXAorI2RlZmluZSByZG1zcihtc3IsIHZhbDEsIHZhbDIpCQkJXAorZG8gewkJCQkJCVwKIAlpbnQgX2VycjsJCQkJXAogCXU2NCBfbCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJl9lcnIpOwlcCiAJdmFsMSA9ICh1MzIpX2w7CQkJCVwKIAl2YWwyID0gX2wgPj4gMzI7CQkJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAotI2RlZmluZSB3cm1zcihtc3IsdmFsMSx2YWwyKSBkbyB7CQlcCisjZGVmaW5lIHdybXNyKG1zciwgdmFsMSwgdmFsMikJCQlcCitkbyB7CQkJCQkJXAogCXBhcmF2aXJ0X3dyaXRlX21zcihtc3IsIHZhbDEsIHZhbDIpOwlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIHJkbXNybChtc3IsdmFsKSBkbyB7CQkJXAorI2RlZmluZSByZG1zcmwobXNyLCB2YWwpCQkJXAorZG8gewkJCQkJCVwKIAlpbnQgX2VycjsJCQkJXAogCXZhbCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJl9lcnIpOwlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIHdybXNybChtc3IsdmFsKQkJd3Jtc3IobXNyLCAodTMyKSgodTY0KSh2YWwpKSwgKCh1NjQpKHZhbCkpPj4zMikKLSNkZWZpbmUgd3Jtc3Jfc2FmZShtc3IsYSxiKQlwYXJhdmlydF93cml0ZV9tc3IobXNyLCBhLCBiKQorI2RlZmluZSB3cm1zcmwobXNyLCB2YWwpCXdybXNyKG1zciwgKHUzMikoKHU2NCkodmFsKSksICgodTY0KSh2YWwpKT4+MzIpCisjZGVmaW5lIHdybXNyX3NhZmUobXNyLCBhLCBiKQlwYXJhdmlydF93cml0ZV9tc3IobXNyLCBhLCBiKQogCiAvKiByZG1zciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyAqLwotI2RlZmluZSByZG1zcl9zYWZlKG1zcixhLGIpICh7CQkJXAorI2RlZmluZSByZG1zcl9zYWZlKG1zciwgYSwgYikJCQlcCisoewkJCQkJCVwKIAlpbnQgX2VycjsJCQkJXAogCXU2NCBfbCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJl9lcnIpOwlcCiAJKCphKSA9ICh1MzIpX2w7CQkJCVwKIAkoKmIpID0gX2wgPj4gMzI7CQkJXAotCV9lcnI7IH0pCisJX2VycjsJCQkJCVwKK30pCiAKK3N0YXRpYyBpbmxpbmUgaW50IHJkbXNybF9zYWZlKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG9uZyBsb25nICpwKQoreworCWludCBlcnI7CisKKwkqcCA9IHBhcmF2aXJ0X3JlYWRfbXNyKG1zciwgJmVycik7CisJcmV0dXJuIGVycjsKK30KIAogc3RhdGljIGlubGluZSB1NjQgcGFyYXZpcnRfcmVhZF90c2Modm9pZCkKIHsKIAlyZXR1cm4gUFZPUF9DQUxMMCh1NjQsIHB2X2NwdV9vcHMucmVhZF90c2MpOwogfQogCi0jZGVmaW5lIHJkdHNjbChsb3cpIGRvIHsJCQlcCisjZGVmaW5lIHJkdHNjbChsb3cpCQkJCVwKK2RvIHsJCQkJCQlcCiAJdTY0IF9sID0gcGFyYXZpcnRfcmVhZF90c2MoKTsJCVwKIAlsb3cgPSAoaW50KV9sOwkJCQlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiAjZGVmaW5lIHJkdHNjbGwodmFsKSAodmFsID0gcGFyYXZpcnRfcmVhZF90c2MoKSkKIApAQCAtNzExLDExICs3MjUsMTIgQEAKIAlyZXR1cm4gUFZPUF9DQUxMMSh1NjQsIHB2X2NwdV9vcHMucmVhZF9wbWMsIGNvdW50ZXIpOwogfQogCi0jZGVmaW5lIHJkcG1jKGNvdW50ZXIsbG93LGhpZ2gpIGRvIHsJCVwKKyNkZWZpbmUgcmRwbWMoY291bnRlciwgbG93LCBoaWdoKQkJXAorZG8gewkJCQkJCVwKIAl1NjQgX2wgPSBwYXJhdmlydF9yZWFkX3BtYyhjb3VudGVyKTsJXAogCWxvdyA9ICh1MzIpX2w7CQkJCVwKIAloaWdoID0gX2wgPj4gMzI7CQkJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcGFyYXZpcnRfcmR0c2NwKHVuc2lnbmVkIGludCAqYXV4KQogewpAQCAtNzk0LDcgKzgwOSw4IEBACiB9CiAKIC8qIFRoZSBwYXJhdmlydHVhbGl6ZWQgSS9PIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKSB7CitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duX2lvKHZvaWQpCit7CiAJcHZfY3B1X29wcy5pb19kZWxheSgpOwogI2lmZGVmIFJFQUxMWV9TTE9XX0lPCiAJcHZfY3B1X29wcy5pb19kZWxheSgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhcnBvcnQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYXJwb3J0LmgKaW5kZXggMDE5Y2JjYS4uM2M0ZmZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhcnBvcnQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGFycG9ydC5oCkBAIC0xLDEwICsxLDEwIEBACiAjaWZuZGVmIF9BU01fWDg2X1BBUlBPUlRfSAogI2RlZmluZSBfQVNNX1g4Nl9QQVJQT1JUX0gKIAotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyAoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMoaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKQogewotCXJldHVybiBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzIChhdXRvaXJxLCBhdXRvZG1hKTsKKwlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyhhdXRvaXJxLCBhdXRvZG1hKTsKIH0KIAogI2VuZGlmIC8qIF9BU01fWDg2X1BBUlBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhdC5oIGIvaW5jbHVkZS9hc20teDg2L3BhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiODIyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGF0LmgKQEAgLTAsMCArMSwxNiBAQAorCisjaWZuZGVmIF9BU01fUEFUX0gKKyNkZWZpbmUgX0FTTV9QQVRfSCAxCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gaW50IHBhdF93Y19lbmFibGVkOworCitleHRlcm4gdm9pZCBwYXRfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCByZXNlcnZlX21lbXR5cGUodTY0IHN0YXJ0LCB1NjQgZW5kLAorCQl1bnNpZ25lZCBsb25nIHJlcV90eXBlLCB1bnNpZ25lZCBsb25nICpyZXRfdHlwZSk7CitleHRlcm4gaW50IGZyZWVfbWVtdHlwZSh1NjQgc3RhcnQsIHU2NCBlbmQpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BjaS1kaXJlY3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wY2ktZGlyZWN0LmgKaW5kZXggNjgyM2ZhNC4uNWIyMTQ4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BjaS1kaXJlY3QuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGNpLWRpcmVjdC5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIERpcmVjdCBQQ0kgYWNjZXNzLiBUaGlzIGlzIHVzZWQgZm9yIFBDSSBhY2Nlc3NlcyBpbiBlYXJseSBib290IGJlZm9yZQotICAgdGhlIFBDSSBzdWJzeXN0ZW0gd29ya3MuICovIAorICAgdGhlIFBDSSBzdWJzeXN0ZW0gd29ya3MuICovCiAKIGV4dGVybiB1MzIgcmVhZF9wY2lfY29uZmlnKHU4IGJ1cywgdTggc2xvdCwgdTggZnVuYywgdTggb2Zmc2V0KTsKIGV4dGVybiB1OCByZWFkX3BjaV9jb25maWdfYnl0ZSh1OCBidXMsIHU4IHNsb3QsIHU4IGZ1bmMsIHU4IG9mZnNldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGNpLmggYi9pbmNsdWRlL2FzbS14ODYvcGNpLmgKaW5kZXggYzYxMTkwYy4uZGRkOGUyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wY2kuaApAQCAtOCwxNCArOCwxMyBAQAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAKIHN0cnVjdCBwY2lfc3lzZGF0YSB7CiAJaW50CQlkb21haW47CQkvKiBQQ0kgZG9tYWluICovCiAJaW50CQlub2RlOwkJLyogTlVNQSBub2RlICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCXZvaWQqCQlpb21tdTsJCS8qIElPTU1VIHByaXZhdGUgZGF0YSAqLworCXZvaWQJCSppb21tdTsJCS8qIElPTU1VIHByaXZhdGUgZGF0YSAqLwogI2VuZGlmCiB9OwogCkBAIC01Miw3ICs1MSw3IEBACiAjZGVmaW5lIFBDSUJJT1NfTUlOX0NBUkRCVVNfSU8JMHg0MDAwCiAKIHZvaWQgcGNpYmlvc19jb25maWdfaW5pdCh2b2lkKTsKLXN0cnVjdCBwY2lfYnVzICogcGNpYmlvc19zY2FuX3Jvb3QoaW50IGJ1cyk7CitzdHJ1Y3QgcGNpX2J1cyAqcGNpYmlvc19zY2FuX3Jvb3QoaW50IGJ1cyk7CiAKIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSk7CkBAIC02Miw3ICs2MSw4IEBACiAKICNkZWZpbmUgSEFWRV9QQ0lfTU1BUAogZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpOworCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwKKwkJCSAgICAgICBpbnQgd3JpdGVfY29tYmluZSk7CiAKIAogI2lmZGVmIENPTkZJR19QQ0kKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wY2lfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wY2lfNjQuaAppbmRleCAzNzQ2OTAzLi5mMzMwMjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGNpXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BjaV82NC5oCkBAIC0xLDEyICsxLDEwIEBACiAjaWZuZGVmIF9feDg2NjRfUENJX0gKICNkZWZpbmUgX194ODY2NF9QQ0lfSAogCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAKLQogI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VCi1zdGF0aWMgaW5saW5lIHZvaWQqIHBjaV9pb21tdShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIGlubGluZSB2b2lkICpwY2lfaW9tbXUoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX3N5c2RhdGEgKnNkID0gYnVzLT5zeXNkYXRhOwogCXJldHVybiBzZC0+aW9tbXU7CkBAIC0xOSwxMiArMTcsMTIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQ0FMR0FSWV9JT01NVSAqLwogCitleHRlcm4gaW50ICgqcGNpX2NvbmZpZ19yZWFkKShpbnQgc2VnLCBpbnQgYnVzLCBpbnQgZGV2LCBpbnQgZm4sCisJCQkgICAgICBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgKnZhbHVlKTsKK2V4dGVybiBpbnQgKCpwY2lfY29uZmlnX3dyaXRlKShpbnQgc2VnLCBpbnQgYnVzLCBpbnQgZGV2LCBpbnQgZm4sCisJCQkgICAgICAgaW50IHJlZywgaW50IGxlbiwgdTMyIHZhbHVlKTsKIAotZXh0ZXJuIGludCAoKnBjaV9jb25maWdfcmVhZCkoaW50IHNlZywgaW50IGJ1cywgaW50IGRldiwgaW50IGZuLCBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgKnZhbHVlKTsKLWV4dGVybiBpbnQgKCpwY2lfY29uZmlnX3dyaXRlKShpbnQgc2VnLCBpbnQgYnVzLCBpbnQgZGV2LCBpbnQgZm4sIGludCByZWcsIGludCBsZW4sIHUzMiB2YWx1ZSk7Ci0KLQotCitleHRlcm4gdm9pZCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9pZCk7CiBleHRlcm4gdm9pZCBwY2lfaW9tbXVfYWxsb2Modm9pZCk7CiAKIC8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKQEAgLTY1LDUgKzYzLDQgQEAKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotCiAjZW5kaWYgLyogX194ODY2NF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BkYS5oIGIvaW5jbHVkZS9hc20teDg2L3BkYS5oCmluZGV4IGMwMzA1YmYuLjEwMWZiOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZGEuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGRhLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAkJCQkJICAgb2Zmc2V0IDQwISEhICovCiAjZW5kaWYKIAljaGFyICppcnFzdGFja3B0cjsKLQl1bnNpZ25lZCBpbnQgbm9kZW51bWJlcjsJLyogbnVtYmVyIG9mIGN1cnJlbnQgbm9kZSAqLwogCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKIAl1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7CS8qIG51bWJlciBvZiBOTUkgb24gdGhpcyBDUFVzICovCiAJc2hvcnQgbW11X3N0YXRlOwpAQCAtNTgsMzQgKzU3LDM2IEBACiAKICNkZWZpbmUgcGRhX29mZnNldChmaWVsZCkgb2Zmc2V0b2Yoc3RydWN0IHg4NjY0X3BkYSwgZmllbGQpCiAKLSNkZWZpbmUgcGRhX3RvX29wKG9wLCBmaWVsZCwgdmFsKSBkbyB7CQlcCi0JdHlwZWRlZiB0eXBlb2YoX3Byb3h5X3BkYS5maWVsZCkgVF9fOwlcCi0JaWYgKDApIHsgVF9fIHRtcF9fOyB0bXBfXyA9ICh2YWwpOyB9CS8qIHR5cGUgY2hlY2tpbmcgKi8gXAotCXN3aXRjaCAoc2l6ZW9mKF9wcm94eV9wZGEuZmllbGQpKSB7CVwKLQljYXNlIDI6CQkJCQlcCi0JCWFzbShvcCAidyAlMSwlJWdzOiVjMiIgOglcCi0JCSAgICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6CVwKLQkJICAgICJyaSIgKChUX18pdmFsKSwJCVwKLQkJICAgICJpIihwZGFfb2Zmc2V0KGZpZWxkKSkpOwlcCi0JCWJyZWFrOwkJCQlcCi0JY2FzZSA0OgkJCQkJXAotCQlhc20ob3AgImwgJTEsJSVnczolYzIiIDoJXAotCQkgICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOglcCi0JCSAgICAicmkiICgoVF9fKXZhbCksCQlcCi0JCSAgICAiaSIgKHBkYV9vZmZzZXQoZmllbGQpKSk7CVwKLQkJYnJlYWs7CQkJCVwKLQljYXNlIDg6CQkJCQlcCi0JCWFzbShvcCAicSAlMSwlJWdzOiVjMiI6CQlcCi0JCSAgICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6CVwKLQkJICAgICJyaSIgKChUX18pdmFsKSwJCVwKLQkJICAgICJpIihwZGFfb2Zmc2V0KGZpZWxkKSkpOwlcCi0JCWJyZWFrOwkJCQlcCi0JZGVmYXVsdDoJCQkJXAotCQlfX2JhZF9wZGFfZmllbGQoKTsJCVwKLQl9CQkJCQlcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGRhX3RvX29wKG9wLCBmaWVsZCwgdmFsKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl0eXBlZGVmIHR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSBUX187CQkJCVwKKwlpZiAoMCkgeyBUX18gdG1wX187IHRtcF9fID0gKHZhbCk7IH0JLyogdHlwZSBjaGVja2luZyAqLwlcCisJc3dpdGNoIChzaXplb2YoX3Byb3h5X3BkYS5maWVsZCkpIHsJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJYXNtKG9wICJ3ICUxLCUlZ3M6JWMyIiA6CQkJCVwKKwkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAorCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAorCQkgICAgImkiKHBkYV9vZmZzZXQoZmllbGQpKSk7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCWFzbShvcCAibCAlMSwlJWdzOiVjMiIgOgkJCQlcCisJCSAgICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6CQkJCVwKKwkJICAgICJyaSIgKChUX18pdmFsKSwJCQkJCVwKKwkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJYXNtKG9wICJxICUxLCUlZ3M6JWMyIjoJCQkJCVwKKwkJICAgICIrbSIgKF9wcm94eV9wZGEuZmllbGQpIDoJCQkJXAorCQkgICAgInJpIiAoKFRfXyl2YWwpLAkJCQkJXAorCQkgICAgImkiKHBkYV9vZmZzZXQoZmllbGQpKSk7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9fYmFkX3BkYV9maWVsZCgpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCiAKLSNkZWZpbmUgcGRhX2Zyb21fb3Aob3AsZmllbGQpICh7CQlcCisjZGVmaW5lIHBkYV9mcm9tX29wKG9wLCBmaWVsZCkJCQlcCisoewkJCQkJCVwKIAl0eXBlb2YoX3Byb3h5X3BkYS5maWVsZCkgcmV0X187CQlcCiAJc3dpdGNoIChzaXplb2YoX3Byb3h5X3BkYS5maWVsZCkpIHsJXAogCWNhc2UgMjoJCQkJCVwKQEAgLTkzLDIzICs5NCwyNCBAQAogCQkgICAgIj1yIiAocmV0X18pIDoJCVwKIAkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCiAJCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAotCQkgYnJlYWs7CQkJCVwKKwkJYnJlYWs7CQkJCVwKIAljYXNlIDQ6CQkJCQlcCiAJCWFzbShvcCAibCAlJWdzOiVjMSwlMCI6CQlcCiAJCSAgICAiPXIiIChyZXRfXyk6CQlcCiAJCSAgICAiaSIgKHBkYV9vZmZzZXQoZmllbGQpKSwJXAogCQkgICAgIm0iIChfcHJveHlfcGRhLmZpZWxkKSk7CVwKLQkJIGJyZWFrOwkJCQlcCisJCWJyZWFrOwkJCQlcCiAJY2FzZSA4OgkJCQkJXAogCQlhc20ob3AgInEgJSVnczolYzEsJTAiOgkJXAogCQkgICAgIj1yIiAocmV0X18pIDoJCVwKIAkJICAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLAlcCiAJCSAgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsJXAotCQkgYnJlYWs7CQkJCVwKKwkJYnJlYWs7CQkJCVwKIAlkZWZhdWx0OgkJCQlcCiAJCV9fYmFkX3BkYV9maWVsZCgpOwkJXAotICAgICAgIH0JCQkJCVwKLSAgICAgICByZXRfXzsgfSkKKwl9CQkJCQlcCisJcmV0X187CQkJCQlcCit9KQogCiAjZGVmaW5lIHJlYWRfcGRhKGZpZWxkKQkJcGRhX2Zyb21fb3AoIm1vdiIsIGZpZWxkKQogI2RlZmluZSB3cml0ZV9wZGEoZmllbGQsIHZhbCkJcGRhX3RvX29wKCJtb3YiLCBmaWVsZCwgdmFsKQpAQCAtMTE4LDEyICsxMjAsMTMgQEAKICNkZWZpbmUgb3JfcGRhKGZpZWxkLCB2YWwpCXBkYV90b19vcCgib3IiLCBmaWVsZCwgdmFsKQogCiAvKiBUaGlzIGlzIG5vdCBhdG9taWMgYWdhaW5zdCBvdGhlciBDUFVzIC0tIENQVSBwcmVlbXB0aW9uIG5lZWRzIHRvIGJlIG9mZiAqLwotI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXRfcGRhKGJpdCwgZmllbGQpICh7CQlcCi0JaW50IG9sZF9fOwkJCQkJCVwKLQlhc20gdm9sYXRpbGUoImJ0ciAlMiwlJWdzOiVjM1xuXHRzYmJsICUwLCUwIgkJXAotCSAgICA6ICI9ciIgKG9sZF9fKSwgIittIiAoX3Byb3h5X3BkYS5maWVsZCkJCVwKLQkgICAgOiAiZElyIiAoYml0KSwgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSkgOiAibWVtb3J5Iik7CVwKLQlvbGRfXzsJCQkJCQkJXAorI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXRfcGRhKGJpdCwgZmllbGQpCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBvbGRfXzsJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiYnRyICUyLCUlZ3M6JWMzXG5cdHNiYmwgJTAsJTAiCQkJXAorCQkgICAgIDogIj1yIiAob2xkX18pLCAiK20iIChfcHJveHlfcGRhLmZpZWxkKQkJXAorCQkgICAgIDogImRJciIgKGJpdCksICJpIiAocGRhX29mZnNldChmaWVsZCkpIDogIm1lbW9yeSIpO1wKKwlvbGRfXzsJCQkJCQkJCVwKIH0pCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20teDg2L3BlcmNwdS5oCmluZGV4IDBkZWMwMGYuLjczNmZjM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGVyY3B1LmgKQEAgLTg1LDU4ICs4NSw2MiBAQAogICogZG9uJ3QgZ2l2ZSBhbiBsdmFsdWUgdGhvdWdoKS4gKi8KIGV4dGVybiB2b2lkIF9fYmFkX3BlcmNwdV9zaXplKHZvaWQpOwogCi0jZGVmaW5lIHBlcmNwdV90b19vcChvcCx2YXIsdmFsKQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCXR5cGVkZWYgdHlwZW9mKHZhcikgVF9fOwkJCVwKLQkJaWYgKDApIHsgVF9fIHRtcF9fOyB0bXBfXyA9ICh2YWwpOyB9CQlcCi0JCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJXAotCQljYXNlIDE6CQkJCQkJXAotCQkJYXNtKG9wICJiICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCi0JCQkgICAgOiAiK20iICh2YXIpCQkJXAotCQkJICAgIDoicmkiICgoVF9fKXZhbCkpOwkJCVwKLQkJCWJyZWFrOwkJCQkJXAotCQljYXNlIDI6CQkJCQkJXAotCQkJYXNtKG9wICJ3ICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCi0JCQkgICAgOiAiK20iICh2YXIpCQkJXAotCQkJICAgIDoicmkiICgoVF9fKXZhbCkpOwkJCVwKLQkJCWJyZWFrOwkJCQkJXAotCQljYXNlIDQ6CQkJCQkJXAotCQkJYXNtKG9wICJsICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCi0JCQkgICAgOiAiK20iICh2YXIpCQkJXAotCQkJICAgIDoicmkiICgoVF9fKXZhbCkpOwkJCVwKLQkJCWJyZWFrOwkJCQkJXAotCQlkZWZhdWx0OiBfX2JhZF9wZXJjcHVfc2l6ZSgpOwkJCVwKLQkJfQkJCQkJCVwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBwZXJjcHVfdG9fb3Aob3AsIHZhciwgdmFsKQkJCVwKK2RvIHsJCQkJCQkJXAorCXR5cGVkZWYgdHlwZW9mKHZhcikgVF9fOwkJCVwKKwlpZiAoMCkgewkJCQkJXAorCQlUX18gdG1wX187CQkJCVwKKwkJdG1wX18gPSAodmFsKTsJCQkJXAorCX0JCQkJCQlcCisJc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQlcCisJY2FzZSAxOgkJCQkJCVwKKwkJYXNtKG9wICJiICUxLCJfX3BlcmNwdV9zZWciJTAiCQlcCisJCSAgICA6ICIrbSIgKHZhcikJCQlcCisJCSAgICA6ICJyaSIgKChUX18pdmFsKSk7CQkJXAorCQlicmVhazsJCQkJCVwKKwljYXNlIDI6CQkJCQkJXAorCQlhc20ob3AgIncgJTEsIl9fcGVyY3B1X3NlZyIlMCIJCVwKKwkJICAgIDogIittIiAodmFyKQkJCVwKKwkJICAgIDogInJpIiAoKFRfXyl2YWwpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgNDoJCQkJCQlcCisJCWFzbShvcCAibCAlMSwiX19wZXJjcHVfc2VnIiUwIgkJXAorCQkgICAgOiAiK20iICh2YXIpCQkJXAorCQkgICAgOiAicmkiICgoVF9fKXZhbCkpOwkJCVwKKwkJYnJlYWs7CQkJCQlcCisJZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQlcCisJfQkJCQkJCVwKK30gd2hpbGUgKDApCiAKLSNkZWZpbmUgcGVyY3B1X2Zyb21fb3Aob3AsdmFyKQkJCQkJXAotCSh7CQkJCQkJCVwKLQkJdHlwZW9mKHZhcikgcmV0X187CQkJCVwKLQkJc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQlcCi0JCWNhc2UgMToJCQkJCQlcCi0JCQlhc20ob3AgImIgIl9fcGVyY3B1X3NlZyIlMSwlMCIJCVwKLQkJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKLQkJCSAgICA6ICJtIiAodmFyKSk7CQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWNhc2UgMjoJCQkJCQlcCi0JCQlhc20ob3AgIncgIl9fcGVyY3B1X3NlZyIlMSwlMCIJCVwKLQkJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKLQkJCSAgICA6ICJtIiAodmFyKSk7CQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWNhc2UgNDoJCQkJCQlcCi0JCQlhc20ob3AgImwgIl9fcGVyY3B1X3NlZyIlMSwlMCIJCVwKLQkJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKLQkJCSAgICA6ICJtIiAodmFyKSk7CQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJXAotCQl9CQkJCQkJXAotCQlyZXRfXzsgfSkKKyNkZWZpbmUgcGVyY3B1X2Zyb21fb3Aob3AsIHZhcikJCQkJXAorKHsJCQkJCQkJXAorCXR5cGVvZih2YXIpIHJldF9fOwkJCQlcCisJc3dpdGNoIChzaXplb2YodmFyKSkgewkJCQlcCisJY2FzZSAxOgkJCQkJCVwKKwkJYXNtKG9wICJiICJfX3BlcmNwdV9zZWciJTEsJTAiCQlcCisJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKKwkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMjoJCQkJCQlcCisJCWFzbShvcCAidyAiX19wZXJjcHVfc2VnIiUxLCUwIgkJXAorCQkgICAgOiAiPXIiIChyZXRfXykJCQlcCisJCSAgICA6ICJtIiAodmFyKSk7CQkJXAorCQlicmVhazsJCQkJCVwKKwljYXNlIDQ6CQkJCQkJXAorCQlhc20ob3AgImwgIl9fcGVyY3B1X3NlZyIlMSwlMCIJCVwKKwkJICAgIDogIj1yIiAocmV0X18pCQkJXAorCQkgICAgOiAibSIgKHZhcikpOwkJCVwKKwkJYnJlYWs7CQkJCQlcCisJZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQlcCisJfQkJCQkJCVwKKwlyZXRfXzsJCQkJCQlcCit9KQogCiAjZGVmaW5lIHg4Nl9yZWFkX3BlcmNwdSh2YXIpIHBlcmNwdV9mcm9tX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhcikKLSNkZWZpbmUgeDg2X3dyaXRlX3BlcmNwdSh2YXIsdmFsKSBwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHg4Nl9hZGRfcGVyY3B1KHZhcix2YWwpIHBlcmNwdV90b19vcCgiYWRkIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKLSNkZWZpbmUgeDg2X3N1Yl9wZXJjcHUodmFyLHZhbCkgcGVyY3B1X3RvX29wKCJzdWIiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSB4ODZfb3JfcGVyY3B1KHZhcix2YWwpIHBlcmNwdV90b19vcCgib3IiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQorI2RlZmluZSB4ODZfd3JpdGVfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHg4Nl9hZGRfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoImFkZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHg4Nl9zdWJfcGVyY3B1KHZhciwgdmFsKSBwZXJjcHVfdG9fb3AoInN1YiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHg4Nl9vcl9wZXJjcHUodmFyLCB2YWwpIHBlcmNwdV90b19vcCgib3IiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiAhQ09ORklHX1g4Nl82NCAqLwogI2VuZGlmIC8qIF9BU01fWDg2X1BFUkNQVV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtMmxldmVsLmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0ybGV2ZWwuaAppbmRleCA3MDE0MDRmLi40NmJjNTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0ybGV2ZWwuaApAQCAtMjYsNyArMjYsOCBAQAogCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAluYXRpdmVfc2V0X3B0ZShwdGVwLCBwdGUpOwpAQCAtMzcsNyArMzgsOCBAQAogCW5hdGl2ZV9zZXRfcG1kKHBtZHAsIF9fcG1kKDApKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnhwKQorc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnhwKQogewogCSp4cCA9IG5hdGl2ZV9tYWtlX3B0ZSgwKTsKIH0KQEAgLTYxLDE2ICs2MywxOCBAQAogICovCiAjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5CiAKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgXAotCSgoKChwdGUpLnB0ZV9sb3cgPj4gMSkgJiAweDFmICkgKyAoKChwdGUpLnB0ZV9sb3cgPj4gOCkgPDwgNSApKQorI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkJCQkJCVwKKwkoKCgocHRlKS5wdGVfbG93ID4+IDEpICYgMHgxZikgKyAoKChwdGUpLnB0ZV9sb3cgPj4gOCkgPDwgNSkpCiAKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgXAotCSgocHRlX3QpIHsgLnB0ZV9sb3cgPSAoKChvZmYpICYgMHgxZikgPDwgMSkgKyAoKChvZmYpID4+IDUpIDw8IDgpICsgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJCQkJCVwKKwkoKHB0ZV90KSB7IC5wdGVfbG93ID0gKCgob2ZmKSAmIDB4MWYpIDw8IDEpICsJCQlcCisJCQkoKChvZmYpID4+IDUpIDw8IDgpICsgX1BBR0VfRklMRSB9KQogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gMSkgJiAweDFmKQogI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiA4KQotI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAxKSB8ICgob2Zmc2V0KSA8PCA4KSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpCQkJCVwKKwkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMSkgfCAoKG9mZnNldCkgPDwgOCkgfSkKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgKHB0ZSkucHRlX2xvdyB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgLnB0ZSA9ICh4KS52YWwgfSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUtM2xldmVsLmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAxZDc2M2VlLi44YjRhOWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS0zbGV2ZWwuaApAQCAtOCwyMiArOCwyNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogICovCiAKLSNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcHRlICVwKCUwOGx4JTA4bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCAoZSkucHRlX2hpZ2gsIChlKS5wdGVfbG93KQotI2RlZmluZSBwbWRfRVJST1IoZSkgXAotCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJXAoJTAxNkx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcG1kX3ZhbChlKSkKLSNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcGdkICVwKCUwMTZMeCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHBnZF92YWwoZSkpCi0KKyNkZWZpbmUgcHRlX0VSUk9SKGUpCQkJCQkJCVwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICVwKCUwOGx4JTA4bHgpLlxuIiwJCQlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgKGUpLnB0ZV9oaWdoLCAoZSkucHRlX2xvdykKKyNkZWZpbmUgcG1kX0VSUk9SKGUpCQkJCQkJCVwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICVwKCUwMTZMeCkuXG4iLAkJCQlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcG1kX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpCQkJCQkJCVwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICVwKCUwMTZMeCkuXG4iLAkJCQlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcGdkX3ZhbChlKSkKIAogc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKQogewogCXJldHVybiBwdWRfdmFsKHB1ZCkgPT0gMDsKIH0KKwogc3RhdGljIGlubGluZSBpbnQgcHVkX2JhZChwdWRfdCBwdWQpCiB7CiAJcmV0dXJuIChwdWRfdmFsKHB1ZCkgJiB+KFBURV9NQVNLIHwgX0tFUk5QR19UQUJMRSB8IF9QQUdFX1VTRVIpKSAhPSAwOwogfQorCiBzdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpCiB7CiAJcmV0dXJuIHB1ZF92YWwocHVkKSAmIF9QQUdFX1BSRVNFTlQ7CkBAIC00OCw3ICs1Miw4IEBACiAgKiB3ZSBhcmUganVzdGlmaWVkIGluIG1lcmVseSBjbGVhcmluZyB0aGUgUFRFIHByZXNlbnQgYml0LCBmb2xsb3dlZAogICogYnkgYSBzZXQuICBUaGUgb3JkZXJpbmcgaGVyZSBpcyBpbXBvcnRhbnQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlwdGVwLT5wdGVfbG93ID0gMDsKQEAgLTYwLDE1ICs2NSwxNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7Ci0Jc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocHRlcCksbmF0aXZlX3B0ZV92YWwocHRlKSk7CisJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikocHRlcCksIG5hdGl2ZV9wdGVfdmFsKHB0ZSkpOwogfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIHsKLQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwbWRwKSxuYXRpdmVfcG1kX3ZhbChwbWQpKTsKKwlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwbWRwKSwgbmF0aXZlX3BtZF92YWwocG1kKSk7CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQogewotCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB1ZHApLG5hdGl2ZV9wdWRfdmFsKHB1ZCkpOworCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB1ZHApLCBuYXRpdmVfcHVkX3ZhbChwdWQpKTsKIH0KIAogLyoKQEAgLTc2LDcgKzgzLDggQEAKICAqIGVudHJ5LCBzbyBjbGVhciB0aGUgYm90dG9tIGhhbGYgZmlyc3QgYW5kIGVuZm9yY2Ugb3JkZXJpbmcgd2l0aCBhIGNvbXBpbGVyCiAgKiBiYXJyaWVyLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgIHB0ZV90ICpwdGVwKQogewogCXB0ZXAtPnB0ZV9sb3cgPSAwOwogCXNtcF93bWIoKTsKQEAgLTEwNywyMCArMTE1LDE5IEBACiAJICogY3VycmVudCBwZ2QgdG8gYXZvaWQgdW5uZWNlc3NhcnkgVExCIGZsdXNoZXMuCiAJICovCiAJcGdkID0gcmVhZF9jcjMoKTsKLQlpZiAoX19wYShwdWRwKSA+PSBwZ2QgJiYgX19wYShwdWRwKSA8IChwZ2QgKyBzaXplb2YocGdkX3QpKlBUUlNfUEVSX1BHRCkpCisJaWYgKF9fcGEocHVkcCkgPj0gcGdkICYmIF9fcGEocHVkcCkgPAorCSAgICAocGdkICsgc2l6ZW9mKHBnZF90KSpQVFJTX1BFUl9QR0QpKQogCQl3cml0ZV9jcjMocGdkKTsKIH0KIAotI2RlZmluZSBwdWRfcGFnZShwdWQpIFwKLSgoc3RydWN0IHBhZ2UgKikgX192YShwdWRfdmFsKHB1ZCkgJiBQQUdFX01BU0spKQorI2RlZmluZSBwdWRfcGFnZShwdWQpICgoc3RydWN0IHBhZ2UgKikgX192YShwdWRfdmFsKHB1ZCkgJiBQQUdFX01BU0spKQogCi0jZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkgXAotKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBBR0VfTUFTSykpCisjZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBBR0VfTUFTSykpCiAKIAogLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLwotI2RlZmluZSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykgKChwbWRfdCAqKSBwdWRfcGFnZSgqKHB1ZCkpICsgXAotCQkJcG1kX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykgKChwbWRfdCAqKXB1ZF9wYWdlKCoocHVkKSkgKwlcCisJCQkJICBwbWRfaW5kZXgoYWRkcmVzcykpCiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW5saW5lIHB0ZV90IG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIocHRlX3QgKnB0ZXApCkBAIC0xNjEsNyArMTY4LDggQEAKICAqIHB1dCB0aGUgMzIgYml0cyBvZiBvZmZzZXQgaW50byB0aGUgaGlnaCBwYXJ0LgogICovCiAjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpICgocHRlKS5wdGVfaGlnaCkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgKChwdGVfdCkgeyB7IC5wdGVfbG93ID0gX1BBR0VfRklMRSwgLnB0ZV9oaWdoID0gKG9mZikgfSB9KQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJCQkJCVwKKwkoKHB0ZV90KSB7IHsgLnB0ZV9sb3cgPSBfUEFHRV9GSUxFLCAucHRlX2hpZ2ggPSAob2ZmKSB9IH0pCiAjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTICAgICAgIDMyCiAKIC8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS5oCmluZGV4IDE3NGI4NzcuLmYxZDlmNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaApAQCAtNCwxMyArNCwxMyBAQAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoKFRBU0tfU0laRS0xKS9QR0RJUl9TSVpFKzEpCiAjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCiAKLSNkZWZpbmUgX1BBR0VfQklUX1BSRVNFTlQJMAotI2RlZmluZSBfUEFHRV9CSVRfUlcJCTEKLSNkZWZpbmUgX1BBR0VfQklUX1VTRVIJCTIKLSNkZWZpbmUgX1BBR0VfQklUX1BXVAkJMwotI2RlZmluZSBfUEFHRV9CSVRfUENECQk0Ci0jZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAk1Ci0jZGVmaW5lIF9QQUdFX0JJVF9ESVJUWQkJNgorI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkwCS8qIGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1JXCQkxCS8qIHdyaXRlYWJsZSAqLworI2RlZmluZSBfUEFHRV9CSVRfVVNFUgkJMgkvKiB1c2Vyc3BhY2UgYWRkcmVzc2FibGUgKi8KKyNkZWZpbmUgX1BBR0VfQklUX1BXVAkJMwkvKiBwYWdlIHdyaXRlIHRocm91Z2ggKi8KKyNkZWZpbmUgX1BBR0VfQklUX1BDRAkJNAkvKiBwYWdlIGNhY2hlIGRpc2FibGVkICovCisjZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAk1CS8qIHdhcyBhY2Nlc3NlZCAocmFpc2VkIGJ5IENQVSkgKi8KKyNkZWZpbmUgX1BBR0VfQklUX0RJUlRZCQk2CS8qIHdhcyB3cml0dGVuIHRvIChyYWlzZWQgYnkgQ1BVKSAqLwogI2RlZmluZSBfUEFHRV9CSVRfRklMRQkJNgogI2RlZmluZSBfUEFHRV9CSVRfUFNFCQk3CS8qIDQgTUIgKG9yIDJNQikgcGFnZSAqLwogI2RlZmluZSBfUEFHRV9CSVRfUEFUCQk3CS8qIG9uIDRLQiBwYWdlcyAqLwpAQCAtNDgsMjQgKzQ4LDM5IEBACiAjZW5kaWYKIAogLyogSWYgX1BBR0VfUFJFU0VOVCBpcyBjbGVhciwgd2UgdXNlIHRoZXNlOiAqLwotI2RlZmluZSBfUEFHRV9GSUxFCV9QQUdFX0RJUlRZCS8qIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcsIHNhdmVkIFBURTsgdW5zZXQ6c3dhcCAqLworI2RlZmluZSBfUEFHRV9GSUxFCV9QQUdFX0RJUlRZCS8qIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcsCisJCQkJCSAqIHNhdmVkIFBURTsgdW5zZXQ6c3dhcCAqLwogI2RlZmluZSBfUEFHRV9QUk9UTk9ORQlfUEFHRV9QU0UJLyogaWYgdGhlIHVzZXIgbWFwcGVkIGl0IHdpdGggUFJPVF9OT05FOwogCQkJCQkgICBwdGVfcHJlc2VudCBnaXZlcyB0cnVlICovCiAKLSNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQotI2RlZmluZSBfS0VSTlBHX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfUEFHRV9UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CVwKKwkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfS0VSTlBHX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8CVwKKwkJCSBfUEFHRV9ESVJUWSkKIAogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQogCi0jZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgX1BBR0VfQ0FDSEVfTUFTSwkoX1BBR0VfUENEIHwgX1BBR0VfUFdUKQorI2RlZmluZSBfUEFHRV9DQUNIRV9XQgkJKDApCisjZGVmaW5lIF9QQUdFX0NBQ0hFX1dDCQkoX1BBR0VfUFdUKQorI2RlZmluZSBfUEFHRV9DQUNIRV9VQ19NSU5VUwkoX1BBR0VfUENEKQorI2RlZmluZSBfUEFHRV9DQUNIRV9VQwkJKF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKIAotI2RlZmluZSBQQUdFX1NIQVJFRF9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKLSNkZWZpbmUgUEFHRV9DT1BZX05PRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCi0jZGVmaW5lIFBBR0VfQ09QWV9FWEVDCQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IFwKKwkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKworI2RlZmluZSBQQUdFX1NIQVJFRF9FWEVDCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8CVwKKwkJCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZX05PRVhFQwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKKwkJCQkJIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIFBBR0VfQ09QWV9FWEVDCQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8CVwKKwkJCQkJIF9QQUdFX0FDQ0VTU0VEKQogI2RlZmluZSBQQUdFX0NPUFkJCVBBR0VfQ09QWV9OT0VYRUMKLSNkZWZpbmUgUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQotI2RlZmluZSBQQUdFX1JFQURPTkxZX0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQorI2RlZmluZSBQQUdFX1JFQURPTkxZX0VYRUMJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfAlcCisJCQkJCSBfUEFHRV9BQ0NFU1NFRCkKIAogI2lmZGVmIENPTkZJR19YODZfMzIKICNkZWZpbmUgX1BBR0VfS0VSTkVMX0VYRUMgXApAQCAtODQsNyArOTksOSBAQAogI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JPCQkoX19QQUdFX0tFUk5FTCAmIH5fUEFHRV9SVykKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9SWAkJKF9fUEFHRV9LRVJORUxfRVhFQyAmIH5fUEFHRV9SVykKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9FWEVDX05PQ0FDSEUJKF9fUEFHRV9LRVJORUxfRVhFQyB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9XQwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9DQUNIRV9XQykKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9OT0NBQ0hFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9VQ19NSU5VUwkJKF9fUEFHRV9LRVJORUwgfCBfUEFHRV9QQ0QpCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfVlNZU0NBTEwJCShfX1BBR0VfS0VSTkVMX1JYIHwgX1BBR0VfVVNFUikKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFCShfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0xBUkdFCQkoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKQEAgLTEwMCw3ICsxMTcsOSBAQAogI2RlZmluZSBQQUdFX0tFUk5FTF9STwkJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfUk8pCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfRVhFQykKICNkZWZpbmUgUEFHRV9LRVJORUxfUlgJCQlNQUtFX0dMT0JBTChfX1BBR0VfS0VSTkVMX1JYKQorI2RlZmluZSBQQUdFX0tFUk5FTF9XQwkJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfV0MpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfTk9DQUNIRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfVUNfTUlOVVMJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfVUNfTUlOVVMpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRQlNQUtFX0dMT0JBTChfX1BBR0VfS0VSTkVMX0VYRUNfTk9DQUNIRSkKICNkZWZpbmUgUEFHRV9LRVJORUxfTEFSR0UJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfTEFSR0UpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX0VYRUMJCU1BS0VfR0xPQkFMKF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQykKQEAgLTEzMiw3ICsxNTEsNyBAQAogICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKICAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZyldOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CiAjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQogCiBleHRlcm4gc3BpbmxvY2tfdCBwZ2RfbG9jazsKQEAgLTE0MiwzMCArMTYxLDEwMSBAQAogICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgogICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgogICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfaHVnZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QU0U7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9nbG9iYWwocHRlX3QgcHRlKSAJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfR0xPQkFMOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCQl7IHJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX05YKTsgfQotCi1zdGF0aWMgaW5saW5lIGludCBwbWRfbGFyZ2UocG1kX3QgcHRlKSB7Ci0JcmV0dXJuIChwbWRfdmFsKHB0ZSkgJiAoX1BBR0VfUFNFfF9QQUdFX1BSRVNFTlQpKSA9PQotCQkoX1BBR0VfUFNFfF9QQUdFX1BSRVNFTlQpOworc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQl7IHJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+KHB0ZXZhbF90KV9QQUdFX0RJUlRZKTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQl7IHJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+KHB0ZXZhbF90KV9QQUdFX0FDQ0VTU0VEKTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyByZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfihwdGV2YWxfdClfUEFHRV9SVyk7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCXsgcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH4ocHRldmFsX3QpX1BBR0VfTlgpOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkJeyByZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRElSVFkpOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkJeyByZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQUNDRVNTRUQpOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyByZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUlcpOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQl7IHJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9QU0UpOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9jbHJodWdlKHB0ZV90IHB0ZSkJeyByZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfihwdGV2YWxfdClfUEFHRV9QU0UpOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2dsb2JhbChwdGVfdCBwdGUpCXsgcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0dMT0JBTCk7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2Nscmdsb2JhbChwdGVfdCBwdGUpCXsgcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH4ocHRldmFsX3QpX1BBR0VfR0xPQkFMKTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9odWdlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUFNFOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZ2xvYmFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfR0xPQkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpCit7CisJcmV0dXJuICEocHRlX3ZhbChwdGUpICYgX1BBR0VfTlgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfbGFyZ2UocG1kX3QgcHRlKQoreworCXJldHVybiAocG1kX3ZhbChwdGUpICYgKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpKSA9PQorCQkoX1BBR0VfUFNFIHwgX1BBR0VfUFJFU0VOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+KHB0ZXZhbF90KV9QQUdFX0RJUlRZKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+KHB0ZXZhbF90KV9QQUdFX0FDQ0VTU0VEKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfihwdGV2YWxfdClfUEFHRV9SVyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVfdCBwdGUpCit7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH4ocHRldmFsX3QpX1BBR0VfTlgpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRElSVFkpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQUNDRVNTRUQpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUlcpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQoreworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9QU0UpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9jbHJodWdlKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfihwdGV2YWxfdClfUEFHRV9QU0UpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2dsb2JhbChwdGVfdCBwdGUpCit7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0dMT0JBTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2Nscmdsb2JhbChwdGVfdCBwdGUpCit7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSAmIH4ocHRldmFsX3QpX1BBR0VfR0xPQkFMKTsKK30KIAogZXh0ZXJuIHB0ZXZhbF90IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOwogCkBAIC0zMzIsNyArNDIyLDggQEAKIH0pCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICAgIHB0ZV90ICpwdGVwKQogewogCXB0ZV90IHB0ZSA9IG5hdGl2ZV9wdGVwX2dldF9hbmRfY2xlYXIocHRlcCk7CiAJcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCk7CkBAIC0zNDAsNyArNDMxLDkgQEAKIH0KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVJfRlVMTAotc3RhdGljIGlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgaW50IGZ1bGwpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwKKwkJCQkJICAgIGludCBmdWxsKQogewogCXB0ZV90IHB0ZTsKIAlpZiAoZnVsbCkgewpAQCAtMzU2LDcgKzQ0OSw4IEBACiB9CiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQorc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewogCWNsZWFyX2JpdChfUEFHRV9CSVRfUlcsICh1bnNpZ25lZCBsb25nICopJnB0ZXAtPnB0ZSk7CiAJcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGVfMzIuaAppbmRleCBhODQyYzcyLi5jNGE2NDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzMyLmgKQEAgLTI2LDEwICsyNiw5IEBACiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAKIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqcG1kX2NhY2hlOwotdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpIHsgfQogdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIAogCkBAIC00MSwxMyArNDAsMTMgQEAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwtZGVmcy5oPgogIyBkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCi0jIGRlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKyMgZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFIC0gMSkpCiAjZWxzZQogIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwtZGVmcy5oPgogI2VuZGlmCiAKICNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQotI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRSAtIDEpKQogCiAjZGVmaW5lIFVTRVJfUEdEX1BUUlMgKFBBR0VfT0ZGU0VUID4+IFBHRElSX1NISUZUKQogI2RlZmluZSBLRVJORUxfUEdEX1BUUlMgKFBUUlNfUEVSX1BHRC1VU0VSX1BHRF9QVFJTKQpAQCAtNTksMjEgKzU4LDIyIEBACiAgKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKICAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKICAqLwotI2RlZmluZSBWTUFMTE9DX09GRlNFVAkoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJKCgodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgKyBcCi0JCQkyKlZNQUxMT0NfT0ZGU0VULTEpICYgfihWTUFMTE9DX09GRlNFVC0xKSkKKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQJKDggKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVAkoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgMiAqIFZNQUxMT0NfT0ZGU0VUIC0gMSkgXAorCQkJICYgfihWTUFMTE9DX09GRlNFVCAtIDEpKQogI2lmZGVmIENPTkZJR19YODZfUEFFCiAjZGVmaW5lIExBU1RfUEtNQVAgNTEyCiAjZWxzZQogI2RlZmluZSBMQVNUX1BLTUFQIDEwMjQKICNlbmRpZgogCi0jZGVmaW5lIFBLTUFQX0JBU0UgKChGSVhBRERSX0JPT1RfU1RBUlQgLSBQQUdFX1NJWkUqKExBU1RfUEtNQVAgKyAxKSkgJiBQTURfTUFTSykKKyNkZWZpbmUgUEtNQVBfQkFTRSAoKEZJWEFERFJfQk9PVF9TVEFSVCAtIFBBR0VfU0laRSAqIChMQVNUX1BLTUFQICsgMSkpCVwKKwkJICAgICYgUE1EX01BU0spCiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQotIyBkZWZpbmUgVk1BTExPQ19FTkQJKFBLTUFQX0JBU0UtMipQQUdFX1NJWkUpCisjIGRlZmluZSBWTUFMTE9DX0VORAkoUEtNQVBfQkFTRSAtIDIgKiBQQUdFX1NJWkUpCiAjZWxzZQotIyBkZWZpbmUgVk1BTExPQ19FTkQJKEZJWEFERFJfU1RBUlQtMipQQUdFX1NJWkUpCisjIGRlZmluZSBWTUFMTE9DX0VORAkoRklYQUREUl9TVEFSVCAtIDIgKiBQQUdFX1NJWkUpCiAjZW5kaWYKIAogLyoKQEAgLTg5LDEwICs4OSwxNiBAQAogI2RlZmluZSBwdGVfcHJlc2VudCh4KQkoKHgpLnB0ZV9sb3cgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKIAogLyogVG8gYXZvaWQgaGFybWZ1bCByYWNlcywgcG1kX25vbmUoeCkgc2hvdWxkIGNoZWNrIG9ubHkgdGhlIGxvd2VyIHdoZW4gUEFFICovCi0jZGVmaW5lIHBtZF9ub25lKHgpCSghKHVuc2lnbmVkIGxvbmcpcG1kX3ZhbCh4KSkKLSNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoeCkgJiBfUEFHRV9QUkVTRU5UKQotI2RlZmluZQlwbWRfYmFkKHgpCSgocG1kX3ZhbCh4KSAmICh+UEFHRV9NQVNLICYgfl9QQUdFX1VTRVIpKSAhPSBfS0VSTlBHX1RBQkxFKQorI2RlZmluZSBwbWRfbm9uZSh4KQkoISh1bnNpZ25lZCBsb25nKXBtZF92YWwoKHgpKSkKKyNkZWZpbmUgcG1kX3ByZXNlbnQoeCkJKHBtZF92YWwoKHgpKSAmIF9QQUdFX1BSRVNFTlQpCiAKK2V4dGVybiBpbnQgcG1kX2JhZChwbWRfdCBwbWQpOworCisjZGVmaW5lIHBtZF9iYWRfdjEoeCkJCQkJCQkJXAorCShfS0VSTlBHX1RBQkxFICE9IChwbWRfdmFsKCh4KSkgJiB+KFBBR0VfTUFTSyB8IF9QQUdFX1VTRVIpKSkKKyNkZWZpbmUJcG1kX2JhZF92Mih4KQkJCQkJCQlcCisJKF9LRVJOUEdfVEFCTEUgIT0gKHBtZF92YWwoKHgpKSAmIH4oUEFHRV9NQVNLIHwgX1BBR0VfVVNFUiB8CVwKKwkJCQkJICAgIF9QQUdFX1BTRSB8IF9QQUdFX05YKSkpCiAKICNkZWZpbmUgcGFnZXNfdG9fbWIoeCkgKCh4KSA+PiAoMjAtUEFHRV9TSElGVCkpCiAKQEAgLTExOCwxNyArMTI0LDE4IEBACiB9CiAKIC8qCi0gKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuICBPbiBwcm9jZXNzb3JzIHdoaWNoIGRvIG5vdCBzdXBwb3J0Ci0gKiBpdCwgdGhpcyBpcyBhIG5vLW9wLgorICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgorICogT24gcHJvY2Vzc29ycyB3aGljaCBkbyBub3Qgc3VwcG9ydCBpdCwgdGhpcyBpcyBhIG5vLW9wLgogICovCi0jZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJKChib290X2NwdV9kYXRhLng4NiA+IDMpCQkJCQkgIFwKLQkJCQkgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpIDogKHByb3QpKQorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCQkJCQlcCisJKChib290X2NwdV9kYXRhLng4NiA+IDMpCQkJCVwKKwkgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpCVwKKwkgOiAocHJvdCkpCiAKIC8qCiAgKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAogICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KICAqLwotCiAjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQogCiAvKgpAQCAtMTM3LDIwICsxNDQsMjAgQEAKICAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwZ2QgcGFnZSB3aGljaCB3b3VsZAogICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCiAgKi8KLSNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QtMSkpCi0jZGVmaW5lIHBnZF9pbmRleF9rKGFkZHIpIHBnZF9pbmRleChhZGRyKQorI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRCAtIDEpKQorI2RlZmluZSBwZ2RfaW5kZXhfayhhZGRyKSBwZ2RfaW5kZXgoKGFkZHIpKQogCiAvKgogICogcGdkX29mZnNldCgpIHJldHVybnMgYSAocGdkX3QgKikKICAqIHBnZF9pbmRleCgpIGlzIHVzZWQgZ2V0IHRoZSBvZmZzZXQgaW50byB0aGUgcGdkIHBhZ2UncyBhcnJheSBvZiBwZ2RfdCdzOwogICovCi0jZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpICgobW0pLT5wZ2QrcGdkX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKSAoKG1tKS0+cGdkICsgcGdkX2luZGV4KChhZGRyZXNzKSkpCiAKIC8qCiAgKiBhIHNob3J0Y3V0IHdoaWNoIGltcGxpZXMgdGhlIHVzZSBvZiB0aGUga2VybmVsJ3MgcGdkLCBpbnN0ZWFkCiAgKiBvZiBhIHByb2Nlc3MncwogICovCi0jZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgKGFkZHJlc3MpKQogCiBzdGF0aWMgaW5saW5lIGludCBwdWRfbGFyZ2UocHVkX3QgcHVkKSB7IHJldHVybiAwOyB9CiAKQEAgLTE2MCw4ICsxNjcsOCBAQAogICogdGhpcyBtYWNybyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHBtZCBwYWdlIHdoaWNoIHdvdWxkCiAgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKICAqLwotI2RlZmluZSBwbWRfaW5kZXgoYWRkcmVzcykgXAotCQkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSkKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCQkJCVwKKwkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpKQogCiAvKgogICogdGhlIHB0ZSBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcHRlX3RbUFRSU19QRVJfUFRFXQpAQCAtMTY5LDQzICsxNzYsNDUgQEAKICAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwdGUgcGFnZSB3aGljaCB3b3VsZAogICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCiAgKi8KLSNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpIFwKLQkJKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgXAotCSgocHRlX3QgKikgcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArICBwdGVfaW5kZXgoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKQkJCQkJXAorCSgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpCQkJCVwKKwkoKHB0ZV90ICopcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArICBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKIAotI2RlZmluZSBwbWRfcGFnZShwbWQpIChwZm5fdG9fcGFnZShwbWRfdmFsKHBtZCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgKHBmbl90b19wYWdlKHBtZF92YWwoKHBtZCkpID4+IFBBR0VfU0hJRlQpKQogCi0jZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkgXAotCQkoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUEFHRV9NQVNLKSkKKyNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKQkJCQkJXAorCSgodW5zaWduZWQgbG9uZylfX3ZhKHBtZF92YWwoKHBtZCkpICYgUEFHRV9NQVNLKSkKIAogI2lmIGRlZmluZWQoQ09ORklHX0hJR0hQVEUpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykgXAotCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSxLTV9QVEUwKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgXAotCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSxLTV9QVEUxKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcHRlX3VubWFwKHB0ZSkga3VubWFwX2F0b21pYyhwdGUsIEtNX1BURTApCi0jZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBrdW5tYXBfYXRvbWljKHB0ZSwgS01fUFRFMSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQkJCQkJXAorCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMCkgKwkJXAorCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykJCQkJXAorCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMSkgKwkJXAorCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkga3VubWFwX2F0b21pYygocHRlKSwgS01fUFRFMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGt1bm1hcF9hdG9taWMoKHB0ZSksIEtNX1BURTEpCiAjZWxzZQotI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpIFwKLQkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgcHRlX2luZGV4KGFkZHJlc3MpKQotI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykJCQkJCVwKKwkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgcHRlX2luZGV4KChhZGRyZXNzKSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfbWFwKChkaXIpLCAoYWRkcmVzcykpCiAjZGVmaW5lIHB0ZV91bm1hcChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBDbGVhciBhIGtlcm5lbCBQVEUgYW5kIGZsdXNoIGl0IGZyb20gdGhlIFRMQiAqLwotI2RlZmluZSBrcHRlX2NsZWFyX2ZsdXNoKHB0ZXAsIHZhZGRyKQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlwdGVfY2xlYXIoJmluaXRfbW0sIHZhZGRyLCBwdGVwKTsJCQkJXAotCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7CQkJCQkJXAorI2RlZmluZSBrcHRlX2NsZWFyX2ZsdXNoKHB0ZXAsIHZhZGRyKQkJXAorZG8gewkJCQkJCVwKKwlwdGVfY2xlYXIoJmluaXRfbW0sICh2YWRkciksIChwdGVwKSk7CVwKKwlfX2ZsdXNoX3RsYl9vbmUoKHZhZGRyKSk7CQlcCiB9IHdoaWxlICgwKQogCiAvKgogICogVGhlIGkzODYgZG9lc24ndCBoYXZlIGFueSBleHRlcm5hbCBNTVUgaW5mbzogdGhlIGtlcm5lbCBwYWdlCiAgKiB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KICAqLwotI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyZXNzLHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKSBkbyB7IH0gd2hpbGUgKDApCiAKIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7CiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSk7CkBAIC0yMzQsNyArMjQzLDcgQEAKICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGthZGRyKQkoMCkKICNlbmRpZgogCi0jZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCVwKKwlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogCiAjZW5kaWYgLyogX0kzODZfUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV82NC5oIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGVfNjQuaAppbmRleCBiZDQ3NDBhLi45ZmQ4N2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzY0LmgKQEAgLTUyLDE0ICs1MiwxOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jZGVmaW5lIHB0ZV9FUlJPUihlKSBcCi0JcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlcCglMDE2bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwdGVfdmFsKGUpKQotI2RlZmluZSBwbWRfRVJST1IoZSkgXAotCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJXAoJTAxNmx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcG1kX3ZhbChlKSkKLSNkZWZpbmUgcHVkX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcHVkICVwKCUwMTZseCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHB1ZF92YWwoZSkpCi0jZGVmaW5lIHBnZF9FUlJPUihlKSBcCi0JcHJpbnRrKCIlczolZDogYmFkIHBnZCAlcCglMDE2bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwZ2RfdmFsKGUpKQorI2RlZmluZSBwdGVfRVJST1IoZSkJCQkJCVwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICVwKCUwMTZseCkuXG4iLAkJXAorCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHB0ZV92YWwoZSkpCisjZGVmaW5lIHBtZF9FUlJPUihlKQkJCQkJXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJXAoJTAxNmx4KS5cbiIsCQlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgJihlKSwgcG1kX3ZhbChlKSkKKyNkZWZpbmUgcHVkX0VSUk9SKGUpCQkJCQlcCisJcHJpbnRrKCIlczolZDogYmFkIHB1ZCAlcCglMDE2bHgpLlxuIiwJCVwKKwkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBwdWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkJCQkJCVwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICVwKCUwMTZseCkuXG4iLAkJXAorCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICYoZSksIHBnZF92YWwoZSkpCiAKICNkZWZpbmUgcGdkX25vbmUoeCkJKCFwZ2RfdmFsKHgpKQogI2RlZmluZSBwdWRfbm9uZSh4KQkoIXB1ZF92YWwoeCkpCkBAIC04Nyw3ICs5MSw4IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCXJldHVybiBuYXRpdmVfbWFrZV9wdGUoeGNoZygmeHAtPnB0ZSwgMCkpOwogI2Vsc2UKLQkvKiBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyLCBidXQgZHVwbGljYXRlZCBiZWNhdXNlIG9mIGN5Y2xpYyBkZXBlbmRlbmN5ICovCisJLyogbmF0aXZlX2xvY2FsX3B0ZXBfZ2V0X2FuZF9jbGVhciwKKwkgICBidXQgZHVwbGljYXRlZCBiZWNhdXNlIG9mIGN5Y2xpYyBkZXBlbmRlbmN5ICovCiAJcHRlX3QgcmV0ID0gKnhwOwogCW5hdGl2ZV9wdGVfY2xlYXIoTlVMTCwgMCwgeHApOwogCXJldHVybiByZXQ7CkBAIC0xMTksNyArMTI0LDcgQEAKIAkqcGdkcCA9IHBnZDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wZ2RfY2xlYXIocGdkX3QgKiBwZ2QpCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3BnZF9jbGVhcihwZ2RfdCAqcGdkKQogewogCW5hdGl2ZV9zZXRfcGdkKHBnZCwgbmF0aXZlX21ha2VfcGdkKDApKTsKIH0KQEAgLTEyOCwxOSArMTMzLDE5IEBACiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKLSNkZWZpbmUgUE1EX1NJWkUJKF9BQygxLFVMKSA8PCBQTURfU0hJRlQpCi0jZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQotI2RlZmluZSBQVURfU0laRQkoX0FDKDEsVUwpIDw8IFBVRF9TSElGVCkKLSNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUtMSkpCi0jZGVmaW5lIFBHRElSX1NJWkUJKF9BQygxLFVMKSA8PCBQR0RJUl9TSElGVCkKLSNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorI2RlZmluZSBQTURfU0laRQkoX0FDKDEsIFVMKSA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFIC0gMSkpCisjZGVmaW5lIFBVRF9TSVpFCShfQUMoMSwgVUwpIDw8IFBVRF9TSElGVCkKKyNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUgLSAxKSkKKyNkZWZpbmUgUEdESVJfU0laRQkoX0FDKDEsIFVMKSA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFIC0gMSkpCiAKIAotI2RlZmluZSBNQVhNRU0JCSBfQUMoMHgzZmZmZmZmZmZmZmYsIFVMKQorI2RlZmluZSBNQVhNRU0JCSBfQUMoMHgwMDAwM2ZmZmZmZmZmZmZmLCBVTCkKICNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICBfQUMoMHhmZmZmYzIwMDAwMDAwMDAwLCBVTCkKICNkZWZpbmUgVk1BTExPQ19FTkQgICAgICBfQUMoMHhmZmZmZTFmZmZmZmZmZmZmLCBVTCkKICNkZWZpbmUgVk1FTU1BUF9TVEFSVAkgX0FDKDB4ZmZmZmUyMDAwMDAwMDAwMCwgVUwpCi0jZGVmaW5lIE1PRFVMRVNfVkFERFIgICAgX0FDKDB4ZmZmZmZmZmY4ODAwMDAwMCwgVUwpCisjZGVmaW5lIE1PRFVMRVNfVkFERFIgICAgX0FDKDB4ZmZmZmZmZmZhMDAwMDAwMCwgVUwpCiAjZGVmaW5lIE1PRFVMRVNfRU5EICAgICAgX0FDKDB4ZmZmZmZmZmZmZmYwMDAwMCwgVUwpCiAjZGVmaW5lIE1PRFVMRVNfTEVOICAgKE1PRFVMRVNfRU5EIC0gTU9EVUxFU19WQUREUikKIApAQCAtMTUzLDI2ICsxNTgsMjggQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF9iYWQocHVkX3QgcHVkKQogewotCXJldHVybiBwdWRfdmFsKHB1ZCkgJiB+KFBURV9NQVNLIHwgX0tFUk5QR19UQUJMRSB8IF9QQUdFX1VTRVIpOworCXJldHVybiBwdWRfdmFsKHB1ZCkgJgorCQl+KFBURV9NQVNLIHwgX0tFUk5QR19UQUJMRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9QU0UgfCBfUEFHRV9OWCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfYmFkKHBtZF90IHBtZCkKIHsKLQlyZXR1cm4gcG1kX3ZhbChwbWQpICYgfihQVEVfTUFTSyB8IF9LRVJOUEdfVEFCTEUgfCBfUEFHRV9VU0VSKTsKKwlyZXR1cm4gcG1kX3ZhbChwbWQpICYKKwkJfihQVEVfTUFTSyB8IF9LRVJOUEdfVEFCTEUgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUFNFIHwgX1BBR0VfTlgpOwogfQogCi0jZGVmaW5lIHB0ZV9ub25lKHgpCSghcHRlX3ZhbCh4KSkKLSNkZWZpbmUgcHRlX3ByZXNlbnQoeCkJKHB0ZV92YWwoeCkgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKKyNkZWZpbmUgcHRlX25vbmUoeCkJKCFwdGVfdmFsKCh4KSkpCisjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCShwdGVfdmFsKCh4KSkgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1ROT05FKSkKIAotI2RlZmluZSBwYWdlc190b19tYih4KSAoKHgpID4+ICgyMC1QQUdFX1NISUZUKSkJLyogRklYTUU6IGlzIHRoaXMgcmlnaHQ/ICovCi0jZGVmaW5lIHB0ZV9wYWdlKHgpCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCi0jZGVmaW5lIHB0ZV9wZm4oeCkgICgocHRlX3ZhbCh4KSAmIF9fUEhZU0lDQUxfTUFTSykgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkJKCh4KSA+PiAoMjAgLSBQQUdFX1NISUZUKSkgICAvKiBGSVhNRTogaXMgdGhpcyByaWdodD8gKi8KKyNkZWZpbmUgcHRlX3BhZ2UoeCkJcGZuX3RvX3BhZ2UocHRlX3BmbigoeCkpKQorI2RlZmluZSBwdGVfcGZuKHgpCSgocHRlX3ZhbCgoeCkpICYgX19QSFlTSUNBTF9NQVNLKSA+PiBQQUdFX1NISUZUKQogCiAvKgogICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgogICovCi0jZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJKF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKQotCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJCQkJCVwKKwkoX19wZ3Byb3QocGdwcm90X3ZhbCgocHJvdCkpIHwgX1BBR0VfUENEIHwgX1BBR0VfUFdUKSkKIAogLyoKICAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCkBAIC0xODIsNzMgKzE4OSw4MSBAQAogLyoKICAqIExldmVsIDQgYWNjZXNzLgogICovCi0jZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKCh1bnNpZ25lZCBsb25nKXBnZF92YWwocGdkKSAmIFBURV9NQVNLKSkKLSNkZWZpbmUgcGdkX3BhZ2UocGdkKQkJKHBmbl90b19wYWdlKHBnZF92YWwocGdkKSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBHRElSX1NISUZUKSAmIChQVFJTX1BFUl9QR0QtMSkpCi0jZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHIpICgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCi0jZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSAoaW5pdF9sZXZlbDRfcGd0ICsgcGdkX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpCQkJCQkJXAorCSgodW5zaWduZWQgbG9uZylfX3ZhKCh1bnNpZ25lZCBsb25nKXBnZF92YWwoKHBnZCkpICYgUFRFX01BU0spKQorI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQkocGZuX3RvX3BhZ2UocGdkX3ZhbCgocGdkKSkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdEIC0gMSkpCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoKGFkZHJlc3MpKSkKKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIChpbml0X2xldmVsNF9wZ3QgKyBwZ2RfaW5kZXgoKGFkZHJlc3MpKSkKICNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKSAocGdkX3ZhbChwZ2QpICYgX1BBR0VfUFJFU0VOVCkKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9sYXJnZShwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0KICNkZWZpbmUgbWtfa2VybmVsX3BnZChhZGRyZXNzKSAoKHBnZF90KXsgKGFkZHJlc3MpIHwgX0tFUk5QR19UQUJMRSB9KQogCiAvKiBQVUQgLSBMZXZlbDMgYWNjZXNzICovCiAvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCi0jZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHB1ZF92YWwocHVkKSAmIFBIWVNJQ0FMX1BBR0VfTUFTSykpCi0jZGVmaW5lIHB1ZF9wYWdlKHB1ZCkJCShwZm5fdG9fcGFnZShwdWRfdmFsKHB1ZCkgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHB1ZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQVURfU0hJRlQpICYgKFBUUlNfUEVSX1BVRC0xKSkKLSNkZWZpbmUgcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpICgocHVkX3QgKikgcGdkX3BhZ2VfdmFkZHIoKihwZ2QpKSArIHB1ZF9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcHVkX3ByZXNlbnQocHVkKSAocHVkX3ZhbChwdWQpICYgX1BBR0VfUFJFU0VOVCkKKyNkZWZpbmUgcHVkX3BhZ2VfdmFkZHIocHVkKQkJCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcpX192YShwdWRfdmFsKChwdWQpKSAmIFBIWVNJQ0FMX1BBR0VfTUFTSykpCisjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkJKHBmbl90b19wYWdlKHB1ZF92YWwoKHB1ZCkpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwdWRfaW5kZXgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gUFVEX1NISUZUKSAmIChQVFJTX1BFUl9QVUQgLSAxKSkKKyNkZWZpbmUgcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpCQkJCQlcCisJKChwdWRfdCAqKXBnZF9wYWdlX3ZhZGRyKCoocGdkKSkgKyBwdWRfaW5kZXgoKGFkZHJlc3MpKSkKKyNkZWZpbmUgcHVkX3ByZXNlbnQocHVkKSAocHVkX3ZhbCgocHVkKSkgJiBfUEFHRV9QUkVTRU5UKQogCiBzdGF0aWMgaW5saW5lIGludCBwdWRfbGFyZ2UocHVkX3QgcHRlKQogewotCXJldHVybiAocHVkX3ZhbChwdGUpICYgKF9QQUdFX1BTRXxfUEFHRV9QUkVTRU5UKSkgPT0KLQkJKF9QQUdFX1BTRXxfUEFHRV9QUkVTRU5UKTsKKwlyZXR1cm4gKHB1ZF92YWwocHRlKSAmIChfUEFHRV9QU0UgfCBfUEFHRV9QUkVTRU5UKSkgPT0KKwkJKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpOwogfQogCiAvKiBQTUQgIC0gTGV2ZWwgMiBhY2Nlc3MgKi8KLSNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKSAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpICYgUFRFX01BU0spKQotI2RlZmluZSBwbWRfcGFnZShwbWQpCQkocGZuX3RvX3BhZ2UocG1kX3ZhbChwbWQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpICgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKChwbWQpKSAmIFBURV9NQVNLKSkKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJKHBmbl90b19wYWdlKHBtZF92YWwoKHBtZCkpID4+IFBBR0VfU0hJRlQpKQogCi0jZGVmaW5lIHBtZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSkKLSNkZWZpbmUgcG1kX29mZnNldChkaXIsIGFkZHJlc3MpICgocG1kX3QgKikgcHVkX3BhZ2VfdmFkZHIoKihkaXIpKSArIFwKLQkJCXBtZF9pbmRleChhZGRyZXNzKSkKLSNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKHgpKQotI2RlZmluZSBwbWRfcHJlc2VudCh4KQkocG1kX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCi0jZGVmaW5lIHBmbl9wbWQobnIscHJvdCkgKF9fcG1kKCgobnIpIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkpCi0jZGVmaW5lIHBtZF9wZm4oeCkgICgocG1kX3ZhbCh4KSAmIF9fUEhZU0lDQUxfTUFTSykgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpCisjZGVmaW5lIHBtZF9vZmZzZXQoZGlyLCBhZGRyZXNzKSAoKHBtZF90ICopcHVkX3BhZ2VfdmFkZHIoKihkaXIpKSArIFwKKwkJCQkgIHBtZF9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcG1kX25vbmUoeCkJKCFwbWRfdmFsKCh4KSkpCisjZGVmaW5lIHBtZF9wcmVzZW50KHgpCShwbWRfdmFsKCh4KSkgJiBfUEFHRV9QUkVTRU5UKQorI2RlZmluZSBwZm5fcG1kKG5yLCBwcm90KSAoX19wbWQoKChucikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKChwcm90KSkpKQorI2RlZmluZSBwbWRfcGZuKHgpICAoKHBtZF92YWwoKHgpKSAmIF9fUEhZU0lDQUxfTUFTSykgPj4gUEFHRV9TSElGVCkKIAotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZV92YWwocHRlKSAmIFBIWVNJQ0FMX1BBR0VfTUFTSykgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgKChwdGVfdCkgeyAucHRlID0gKChvZmYpIDw8IFBBR0VfU0hJRlQpIHwgX1BBR0VfRklMRSB9KQorI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZV92YWwoKHB0ZSkpICYgUEhZU0lDQUxfUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7IC5wdGUgPSAoKG9mZikgPDwgUEFHRV9TSElGVCkgfAlcCisJCQkJCSAgICBfUEFHRV9GSUxFIH0pCiAjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTIF9fUEhZU0lDQUxfTUFTS19TSElGVAogCiAvKiBQVEUgLSBMZXZlbCAxIGFjY2Vzcy4gKi8KIAogLyogcGFnZSwgcHJvdGVjdGlvbiAtPiBwdGUgKi8KLSNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCi0gCi0jZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSBcCi0JCSgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQorI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKChwYWdlKSksIChwZ3Byb3QpKQorCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKICNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSAoKHB0ZV90ICopIHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBcCi0JCQlwdGVfaW5kZXgoYWRkcmVzcykpCisJCQkJCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKIAogLyogeDg2LTY0IGFsd2F5cyBoYXMgYWxsIHBhZ2UgdGFibGVzIG1hcHBlZC4gKi8KLSNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLGFkZHJlc3MpIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyZXNzKQotI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLGFkZHJlc3MpIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyZXNzKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfa2VybmVsKChkaXIpLCAoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfa2VybmVsKChkaXIpLCAoYWRkcmVzcykpCiAjZGVmaW5lIHB0ZV91bm1hcChwdGUpIC8qIE5PUCAqLwotI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgLyogTk9QICovIAorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgLyogTk9QICovCiAKLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcmVzcyxwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSkgZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gaW50IGRpcmVjdF9nYnBhZ2VzOwogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gMSkgJiAweDNmKQogI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiA4KQotI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAxKSB8ICgob2Zmc2V0KSA8PCA4KSB9KQotI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMSkgfCBcCisJCQkJCQkJICgob2Zmc2V0KSA8PCA4KSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKChwdGUpKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgLnB0ZSA9ICh4KS52YWwgfSkKIAotZXh0ZXJuIGludCBrZXJuX2FkZHJfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyKTsgCitleHRlcm4gaW50IGtlcm5fYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgY2xlYW51cF9oaWdobWFwKHZvaWQpOwogCi0jZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCi0JCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCVwKKwlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogCiAjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCiAjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBX1RPUERPV04KQEAgLTI2MSw4ICsyNzYsMTAgQEAKIAogLyogZnMvcHJvYy9rY29yZS5jICovCiAjZGVmaW5lCWtjX3ZhZGRyX3RvX29mZnNldCh2KSAoKHYpICYgX19WSVJUVUFMX01BU0spCi0jZGVmaW5lCWtjX29mZnNldF90b192YWRkcihvKSBcCi0gICAoKChvKSAmICgxVUwgPDwgKF9fVklSVFVBTF9NQVNLX1NISUZULTEpKSkgPyAoKG8pIHwgKH5fX1ZJUlRVQUxfTUFTSykpIDogKG8pKQorI2RlZmluZQlrY19vZmZzZXRfdG9fdmFkZHIobykJCQkJXAorCSgoKG8pICYgKDFVTCA8PCAoX19WSVJUVUFMX01BU0tfU0hJRlQgLSAxKSkpCVwKKwkgPyAoKG8pIHwgfl9fVklSVFVBTF9NQVNLKQkJCVwKKwkgOiAobykpCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wb3NpeF90eXBlcy5oCmluZGV4IGJiNzEzM2QuLmZlMzEyYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wb3NpeF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wb3NpeF90eXBlcy5oCkBAIC0xLDExICsxLDUgQEAKICNpZmRlZiBfX0tFUk5FTF9fCi0jIGlmZGVmIENPTkZJR19YODZfMzIKLSMgIGluY2x1ZGUgInBvc2l4X3R5cGVzXzMyLmgiCi0jIGVsc2UKLSMgIGluY2x1ZGUgInBvc2l4X3R5cGVzXzY0LmgiCi0jIGVuZGlmCi0jZWxzZQotIyBpZmRlZiBfX2kzODZfXworIyBpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpIHx8IGRlZmluZWQoX19pMzg2X18pCiAjICBpbmNsdWRlICJwb3NpeF90eXBlc18zMi5oIgogIyBlbHNlCiAjICBpbmNsdWRlICJwb3NpeF90eXBlc182NC5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Bvc2l4X3R5cGVzXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvcG9zaXhfdHlwZXNfMzIuaAppbmRleCAwMTVlNTM5Li5iMDMxZWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcG9zaXhfdHlwZXNfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcG9zaXhfdHlwZXNfMzIuaApAQCAtNDUsMzIgKzQ1LDM5IEBACiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQogCiAjdW5kZWYJX19GRF9TRVQKLSNkZWZpbmUgX19GRF9TRVQoZmQsZmRzZXRwKSBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJidHNsICUxLCUwIjogXAotCQkJIittIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpOiJyIiAoKGludCkgKGZkKSkpCisjZGVmaW5lIF9fRkRfU0VUKGZkLGZkc2V0cCkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImJ0c2wgJTEsJTAiOgkJCQlcCisJCSAgICAgIittIiAoKihfX2tlcm5lbF9mZF9zZXQgKikoZmRzZXRwKSkJXAorCQkgICAgIDogInIiICgoaW50KShmZCkpKQogCiAjdW5kZWYJX19GRF9DTFIKLSNkZWZpbmUgX19GRF9DTFIoZmQsZmRzZXRwKSBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJidHJsICUxLCUwIjogXAotCQkJIittIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpOiJyIiAoKGludCkgKGZkKSkpCisjZGVmaW5lIF9fRkRfQ0xSKGZkLGZkc2V0cCkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImJ0cmwgJTEsJTAiOgkJCQlcCisJCSAgICAgIittIiAoKihfX2tlcm5lbF9mZF9zZXQgKikoZmRzZXRwKSkJXAorCQkgICAgIDogInIiICgoaW50KSAoZmQpKSkKIAogI3VuZGVmCV9fRkRfSVNTRVQKLSNkZWZpbmUgX19GRF9JU1NFVChmZCxmZHNldHApIChfX2V4dGVuc2lvbl9fICh7IFwKLQkJdW5zaWduZWQgY2hhciBfX3Jlc3VsdDsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYnRsICUxLCUyIDsgc2V0YiAlMCIgXAotCQkJOiI9cSIgKF9fcmVzdWx0KSA6InIiICgoaW50KSAoZmQpKSwgXAotCQkJIm0iICgqKF9fa2VybmVsX2ZkX3NldCAqKSAoZmRzZXRwKSkpOyBcCi0JCV9fcmVzdWx0OyB9KSkKKyNkZWZpbmUgX19GRF9JU1NFVChmZCxmZHNldHApCQkJCQlcCisJKF9fZXh0ZW5zaW9uX18JCQkJCQlcCisJICh7CQkJCQkJCVwKKwkgdW5zaWduZWQgY2hhciBfX3Jlc3VsdDsJCQkJXAorCSBhc20gdm9sYXRpbGUoImJ0bCAlMSwlMiA7IHNldGIgJTAiCQkJXAorCQkgICAgICA6ICI9cSIgKF9fcmVzdWx0KQkJCQlcCisJCSAgICAgIDogInIiICgoaW50KShmZCkpLAkJCVwKKwkJCSJtIiAoKihfX2tlcm5lbF9mZF9zZXQgKikoZmRzZXRwKSkpOwlcCisJIF9fcmVzdWx0OwkJCQkJCVwKK30pKQogCiAjdW5kZWYJX19GRF9aRVJPCi0jZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApIFwKLWRvIHsgXAotCWludCBfX2QwLCBfX2QxOyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImNsZCA7IHJlcCA7IHN0b3NsIiBcCi0JCQk6Ij1tIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpLCBcCi0JCQkgICI9JmMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIFwKLQkJCToiYSIgKDApLCAiMSIgKF9fRkRTRVRfTE9OR1MpLCBcCi0JCQkiMiIgKChfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpIDogIm1lbW9yeSIpOyBcCisjZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaW50IF9fZDAsIF9fZDE7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiY2xkIDsgcmVwIDsgc3Rvc2wiCQkJXAorCQkgICAgIDogIj1tIiAoKihfX2tlcm5lbF9mZF9zZXQgKikoZmRzZXRwKSksCVwKKwkJICAgICAgICI9JmMiIChfX2QwKSwgIj0mRCIgKF9fZDEpCQlcCisJCSAgICAgOiAiYSIgKDApLCAiMSIgKF9fRkRTRVRfTE9OR1MpLAkJXAorCQkgICAgICAgIjIiICgoX19rZXJuZWxfZmRfc2V0ICopKGZkc2V0cCkpCVwKKwkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIGRlZmluZWQoX19LRVJORUxfXykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wb3NpeF90eXBlc182NC5oIGIvaW5jbHVkZS9hc20teDg2L3Bvc2l4X3R5cGVzXzY0LmgKaW5kZXggOTkyNmFhNC4uZDY2MjRjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3Bvc2l4X3R5cGVzXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3Bvc2l4X3R5cGVzXzY0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICN1bmRlZiBfX0ZEX1NFVAotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX0ZEX1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKIHsKIAl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKIAl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKQEAgLTU0LDcgKzU0LDcgQEAKIH0KIAogI3VuZGVmIF9fRkRfQ0xSCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQorc3RhdGljIGlubGluZSB2b2lkIF9fRkRfQ0xSKHVuc2lnbmVkIGxvbmcgZmQsIF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQogewogCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOwogCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOwpAQCAtNjIsNyArNjIsNyBAQAogfQogCiAjdW5kZWYgX19GRF9JU1NFVAotc3RhdGljIF9faW5saW5lX18gaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBmZCwgX19jb25zdF9fIF9fa2VybmVsX2ZkX3NldCAqcCkKK3N0YXRpYyBpbmxpbmUgaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBmZCwgX19jb25zdF9fIF9fa2VybmVsX2ZkX3NldCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKIAl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKQEAgLTc0LDM2ICs3NCwzNiBAQAogICogZm9yIDI1NiBhbmQgMTAyNC1iaXQgZmRfc2V0cyByZXNwZWN0aXZlbHkpCiAgKi8KICN1bmRlZiBfX0ZEX1pFUk8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9fa2VybmVsX2ZkX3NldCAqcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX0ZEX1pFUk8oX19rZXJuZWxfZmRfc2V0ICpwKQogewogCXVuc2lnbmVkIGxvbmcgKnRtcCA9IHAtPmZkc19iaXRzOwogCWludCBpOwogCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fRkRTRVRfTE9OR1MpKSB7CiAJCXN3aXRjaCAoX19GRFNFVF9MT05HUykgewotCQkJY2FzZSAzMjoKLQkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7Ci0JCQkgIHRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOwotCQkJICB0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKLQkJCSAgdG1wWzEyXSA9IDA7IHRtcFsxM10gPSAwOyB0bXBbMTRdID0gMDsgdG1wWzE1XSA9IDA7Ci0JCQkgIHRtcFsxNl0gPSAwOyB0bXBbMTddID0gMDsgdG1wWzE4XSA9IDA7IHRtcFsxOV0gPSAwOwotCQkJICB0bXBbMjBdID0gMDsgdG1wWzIxXSA9IDA7IHRtcFsyMl0gPSAwOyB0bXBbMjNdID0gMDsKLQkJCSAgdG1wWzI0XSA9IDA7IHRtcFsyNV0gPSAwOyB0bXBbMjZdID0gMDsgdG1wWzI3XSA9IDA7Ci0JCQkgIHRtcFsyOF0gPSAwOyB0bXBbMjldID0gMDsgdG1wWzMwXSA9IDA7IHRtcFszMV0gPSAwOwotCQkJICByZXR1cm47Ci0JCQljYXNlIDE2OgotCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKLQkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7Ci0JCQkgIHRtcFsgOF0gPSAwOyB0bXBbIDldID0gMDsgdG1wWzEwXSA9IDA7IHRtcFsxMV0gPSAwOwotCQkJICB0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKLQkJCSAgcmV0dXJuOwotCQkJY2FzZSA4OgotCQkJICB0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKLQkJCSAgdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7Ci0JCQkgIHJldHVybjsKLQkJCWNhc2UgNDoKLQkJCSAgdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7Ci0JCQkgIHJldHVybjsKKwkJY2FzZSAzMjoKKwkJCXRtcFsgMF0gPSAwOyB0bXBbIDFdID0gMDsgdG1wWyAyXSA9IDA7IHRtcFsgM10gPSAwOworCQkJdG1wWyA0XSA9IDA7IHRtcFsgNV0gPSAwOyB0bXBbIDZdID0gMDsgdG1wWyA3XSA9IDA7CisJCQl0bXBbIDhdID0gMDsgdG1wWyA5XSA9IDA7IHRtcFsxMF0gPSAwOyB0bXBbMTFdID0gMDsKKwkJCXRtcFsxMl0gPSAwOyB0bXBbMTNdID0gMDsgdG1wWzE0XSA9IDA7IHRtcFsxNV0gPSAwOworCQkJdG1wWzE2XSA9IDA7IHRtcFsxN10gPSAwOyB0bXBbMThdID0gMDsgdG1wWzE5XSA9IDA7CisJCQl0bXBbMjBdID0gMDsgdG1wWzIxXSA9IDA7IHRtcFsyMl0gPSAwOyB0bXBbMjNdID0gMDsKKwkJCXRtcFsyNF0gPSAwOyB0bXBbMjVdID0gMDsgdG1wWzI2XSA9IDA7IHRtcFsyN10gPSAwOworCQkJdG1wWzI4XSA9IDA7IHRtcFsyOV0gPSAwOyB0bXBbMzBdID0gMDsgdG1wWzMxXSA9IDA7CisJCQlyZXR1cm47CisJCWNhc2UgMTY6CisJCQl0bXBbIDBdID0gMDsgdG1wWyAxXSA9IDA7IHRtcFsgMl0gPSAwOyB0bXBbIDNdID0gMDsKKwkJCXRtcFsgNF0gPSAwOyB0bXBbIDVdID0gMDsgdG1wWyA2XSA9IDA7IHRtcFsgN10gPSAwOworCQkJdG1wWyA4XSA9IDA7IHRtcFsgOV0gPSAwOyB0bXBbMTBdID0gMDsgdG1wWzExXSA9IDA7CisJCQl0bXBbMTJdID0gMDsgdG1wWzEzXSA9IDA7IHRtcFsxNF0gPSAwOyB0bXBbMTVdID0gMDsKKwkJCXJldHVybjsKKwkJY2FzZSA4OgorCQkJdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQl0bXBbIDRdID0gMDsgdG1wWyA1XSA9IDA7IHRtcFsgNl0gPSAwOyB0bXBbIDddID0gMDsKKwkJCXJldHVybjsKKwkJY2FzZSA0OgorCQkJdG1wWyAwXSA9IDA7IHRtcFsgMV0gPSAwOyB0bXBbIDJdID0gMDsgdG1wWyAzXSA9IDA7CisJCQlyZXR1cm47CiAJCX0KIAl9CiAJaSA9IF9fRkRTRVRfTE9OR1M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yLmgKaW5kZXggMTQ5OTIwZC4uZTZiZjkyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3IuaApAQCAtMyw4ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAotLyogbWlncmF0aW9uIGhlbHBlcnMsIGZvciBLVk0gLSB3aWxsIGJlIHJlbW92ZWQgaW4gMi42LjI1OiAqLwotI2luY2x1ZGUgPGFzbS92bTg2Lmg+CisvKiBtaWdyYXRpb24gaGVscGVyLCBmb3IgS1ZNIC0gd2lsbCBiZSByZW1vdmVkIGluIDIuNi4yNTogKi8KICNkZWZpbmUgWGd0X2Rlc2Nfc3RydWN0CWRlc2NfcHRyCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCkBAIC0yNCw2ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9kZXNjX2RlZnMuaD4KICNpbmNsdWRlIDxhc20vbm9wcy5oPgorCiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KQEAgLTM3LDE2ICszNywxOCBAQAogc3RhdGljIGlubGluZSB2b2lkICpjdXJyZW50X3RleHRfYWRkcih2b2lkKQogewogCXZvaWQgKnBjOwotCWFzbSB2b2xhdGlsZSgibW92ICQxZiwlMFxuMToiOiI9ciIgKHBjKSk7CisKKwlhc20gdm9sYXRpbGUoIm1vdiAkMWYsICUwOyAxOiI6Ij1yIiAocGMpKTsKKwogCXJldHVybiBwYzsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfVlNNUAotI2RlZmluZSBBUkNIX01JTl9UQVNLQUxJR04JKDEgPDwgSU5URVJOT0RFX0NBQ0hFX1NISUZUKQotI2RlZmluZSBBUkNIX01JTl9NTVNUUlVDVF9BTElHTgkoMSA8PCBJTlRFUk5PREVfQ0FDSEVfU0hJRlQpCisjIGRlZmluZSBBUkNIX01JTl9UQVNLQUxJR04JCSgxIDw8IElOVEVSTk9ERV9DQUNIRV9TSElGVCkKKyMgZGVmaW5lIEFSQ0hfTUlOX01NU1RSVUNUX0FMSUdOCSgxIDw8IElOVEVSTk9ERV9DQUNIRV9TSElGVCkKICNlbHNlCi0jZGVmaW5lIEFSQ0hfTUlOX1RBU0tBTElHTgkxNgotI2RlZmluZSBBUkNIX01JTl9NTVNUUlVDVF9BTElHTgkwCisjIGRlZmluZSBBUkNIX01JTl9UQVNLQUxJR04JCTE2CisjIGRlZmluZSBBUkNIX01JTl9NTVNUUlVDVF9BTElHTgkwCiAjZW5kaWYKIAogLyoKQEAgLTU2LDY5ICs1OCw4MiBAQAogICovCiAKIHN0cnVjdCBjcHVpbmZvX3g4NiB7Ci0JX191OAl4ODY7CQkvKiBDUFUgZmFtaWx5ICovCi0JX191OAl4ODZfdmVuZG9yOwkvKiBDUFUgdmVuZG9yICovCi0JX191OAl4ODZfbW9kZWw7Ci0JX191OAl4ODZfbWFzazsKKwlfX3U4CQkJeDg2OwkJLyogQ1BVIGZhbWlseSAqLworCV9fdTgJCQl4ODZfdmVuZG9yOwkvKiBDUFUgdmVuZG9yICovCisJX191OAkJCXg4Nl9tb2RlbDsKKwlfX3U4CQkJeDg2X21hc2s7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCWNoYXIJd3Bfd29ya3Nfb2s7CS8qIEl0IGRvZXNuJ3Qgb24gMzg2J3MgKi8KLQljaGFyCWhsdF93b3Jrc19vazsJLyogUHJvYmxlbXMgb24gc29tZSA0ODZEeDQncyBhbmQgb2xkIDM4NidzICovCi0JY2hhcgloYXJkX21hdGg7Ci0JY2hhcglyZnU7Ci0JY2hhcglmZGl2X2J1ZzsKLQljaGFyCWYwMGZfYnVnOwotCWNoYXIJY29tYV9idWc7Ci0JY2hhcglwYWQwOworCWNoYXIJCQl3cF93b3Jrc19vazsJLyogSXQgZG9lc24ndCBvbiAzODYncyAqLworCisJLyogUHJvYmxlbXMgb24gc29tZSA0ODZEeDQncyBhbmQgb2xkIDM4NidzOiAqLworCWNoYXIJCQlobHRfd29ya3Nfb2s7CisJY2hhcgkJCWhhcmRfbWF0aDsKKwljaGFyCQkJcmZ1OworCWNoYXIJCQlmZGl2X2J1ZzsKKwljaGFyCQkJZjAwZl9idWc7CisJY2hhcgkJCWNvbWFfYnVnOworCWNoYXIJCQlwYWQwOwogI2Vsc2UKLQkvKiBudW1iZXIgb2YgNEsgcGFnZXMgaW4gRFRMQi9JVExCIGNvbWJpbmVkKGluIHBhZ2VzKSovCi0JaW50ICAgICB4ODZfdGxic2l6ZTsKLQlfX3U4ICAgIHg4Nl92aXJ0X2JpdHMsIHg4Nl9waHlzX2JpdHM7Ci0JLyogY3B1aWQgcmV0dXJuZWQgY29yZSBpZCBiaXRzICovCi0JX191OCAgICB4ODZfY29yZWlkX2JpdHM7Ci0JLyogTWF4IGV4dGVuZGVkIENQVUlEIGZ1bmN0aW9uIHN1cHBvcnRlZCAqLwotCV9fdTMyICAgZXh0ZW5kZWRfY3B1aWRfbGV2ZWw7CisJLyogTnVtYmVyIG9mIDRLIHBhZ2VzIGluIERUTEIvSVRMQiBjb21iaW5lZChpbiBwYWdlcyk6ICovCisJaW50CQkJIHg4Nl90bGJzaXplOworCV9fdTgJCQl4ODZfdmlydF9iaXRzOworCV9fdTgJCQl4ODZfcGh5c19iaXRzOworCS8qIENQVUlEIHJldHVybmVkIGNvcmUgaWQgYml0czogKi8KKwlfX3U4CQkJeDg2X2NvcmVpZF9iaXRzOworCS8qIE1heCBleHRlbmRlZCBDUFVJRCBmdW5jdGlvbiBzdXBwb3J0ZWQ6ICovCisJX191MzIJCQlleHRlbmRlZF9jcHVpZF9sZXZlbDsKICNlbmRpZgotCWludAljcHVpZF9sZXZlbDsJLyogTWF4aW11bSBzdXBwb3J0ZWQgQ1BVSUQgbGV2ZWwsIC0xPW5vIENQVUlEICovCi0JX191MzIJeDg2X2NhcGFiaWxpdHlbTkNBUElOVFNdOwotCWNoYXIJeDg2X3ZlbmRvcl9pZFsxNl07Ci0JY2hhcgl4ODZfbW9kZWxfaWRbNjRdOwotCWludCAJeDg2X2NhY2hlX3NpemU7ICAvKiBpbiBLQiAtIHZhbGlkIGZvciBDUFVTIHdoaWNoIHN1cHBvcnQgdGhpcwotCQkJCSAgICBjYWxsICAqLwotCWludCAJeDg2X2NhY2hlX2FsaWdubWVudDsJLyogSW4gYnl0ZXMgKi8KLQlpbnQJeDg2X3Bvd2VyOwotCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OworCS8qIE1heGltdW0gc3VwcG9ydGVkIENQVUlEIGxldmVsLCAtMT1ubyBDUFVJRDogKi8KKwlpbnQJCQljcHVpZF9sZXZlbDsKKwlfX3UzMgkJCXg4Nl9jYXBhYmlsaXR5W05DQVBJTlRTXTsKKwljaGFyCQkJeDg2X3ZlbmRvcl9pZFsxNl07CisJY2hhcgkJCXg4Nl9tb2RlbF9pZFs2NF07CisJLyogaW4gS0IgLSB2YWxpZCBmb3IgQ1BVUyB3aGljaCBzdXBwb3J0IHRoaXMgY2FsbDogKi8KKwlpbnQJCQl4ODZfY2FjaGVfc2l6ZTsKKwlpbnQJCQl4ODZfY2FjaGVfYWxpZ25tZW50OwkvKiBJbiBieXRlcyAqLworCWludAkJCXg4Nl9wb3dlcjsKKwl1bnNpZ25lZCBsb25nCQlsb29wc19wZXJfamlmZnk7CiAjaWZkZWYgQ09ORklHX1NNUAotCWNwdW1hc2tfdCBsbGNfc2hhcmVkX21hcDsJLyogY3B1cyBzaGFyaW5nIHRoZSBsYXN0IGxldmVsIGNhY2hlICovCisJLyogY3B1cyBzaGFyaW5nIHRoZSBsYXN0IGxldmVsIGNhY2hlOiAqLworCWNwdW1hc2tfdAkJbGxjX3NoYXJlZF9tYXA7CiAjZW5kaWYKLQl1MTYgeDg2X21heF9jb3JlczsJCS8qIGNwdWlkIHJldHVybmVkIG1heCBjb3JlcyB2YWx1ZSAqLwotCXUxNiBhcGljaWQ7Ci0JdTE2IHg4Nl9jbGZsdXNoX3NpemU7CisJLyogY3B1aWQgcmV0dXJuZWQgbWF4IGNvcmVzIHZhbHVlOiAqLworCXUxNgkJCSB4ODZfbWF4X2NvcmVzOworCXUxNgkJCWFwaWNpZDsKKwl1MTYJCQlpbml0aWFsX2FwaWNpZDsKKwl1MTYJCQl4ODZfY2xmbHVzaF9zaXplOwogI2lmZGVmIENPTkZJR19TTVAKLQl1MTYgYm9vdGVkX2NvcmVzOwkJLyogbnVtYmVyIG9mIGNvcmVzIGFzIHNlZW4gYnkgT1MgKi8KLQl1MTYgcGh5c19wcm9jX2lkOyAJCS8qIFBoeXNpY2FsIHByb2Nlc3NvciBpZC4gKi8KLQl1MTYgY3B1X2NvcmVfaWQ7ICAJCS8qIENvcmUgaWQgKi8KLQl1MTYgY3B1X2luZGV4OwkJCS8qIGluZGV4IGludG8gcGVyX2NwdSBsaXN0ICovCisJLyogbnVtYmVyIG9mIGNvcmVzIGFzIHNlZW4gYnkgdGhlIE9TOiAqLworCXUxNgkJCWJvb3RlZF9jb3JlczsKKwkvKiBQaHlzaWNhbCBwcm9jZXNzb3IgaWQ6ICovCisJdTE2CQkJcGh5c19wcm9jX2lkOworCS8qIENvcmUgaWQ6ICovCisJdTE2CQkJY3B1X2NvcmVfaWQ7CisJLyogSW5kZXggaW50byBwZXJfY3B1IGxpc3Q6ICovCisJdTE2CQkJY3B1X2luZGV4OwogI2VuZGlmCiB9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKTsKIAotI2RlZmluZSBYODZfVkVORE9SX0lOVEVMIDAKLSNkZWZpbmUgWDg2X1ZFTkRPUl9DWVJJWCAxCi0jZGVmaW5lIFg4Nl9WRU5ET1JfQU1EIDIKLSNkZWZpbmUgWDg2X1ZFTkRPUl9VTUMgMwotI2RlZmluZSBYODZfVkVORE9SX05FWEdFTiA0Ci0jZGVmaW5lIFg4Nl9WRU5ET1JfQ0VOVEFVUiA1Ci0jZGVmaW5lIFg4Nl9WRU5ET1JfVFJBTlNNRVRBIDcKLSNkZWZpbmUgWDg2X1ZFTkRPUl9OU0MgOAotI2RlZmluZSBYODZfVkVORE9SX05VTSA5Ci0jZGVmaW5lIFg4Nl9WRU5ET1JfVU5LTk9XTiAweGZmCisjZGVmaW5lIFg4Nl9WRU5ET1JfSU5URUwJMAorI2RlZmluZSBYODZfVkVORE9SX0NZUklYCTEKKyNkZWZpbmUgWDg2X1ZFTkRPUl9BTUQJCTIKKyNkZWZpbmUgWDg2X1ZFTkRPUl9VTUMJCTMKKyNkZWZpbmUgWDg2X1ZFTkRPUl9ORVhHRU4JNAorI2RlZmluZSBYODZfVkVORE9SX0NFTlRBVVIJNQorI2RlZmluZSBYODZfVkVORE9SX1RSQU5TTUVUQQk3CisjZGVmaW5lIFg4Nl9WRU5ET1JfTlNDCQk4CisjZGVmaW5lIFg4Nl9WRU5ET1JfTlVNCQk5CisKKyNkZWZpbmUgWDg2X1ZFTkRPUl9VTktOT1dOCTB4ZmYKIAogLyoKICAqIGNhcGFiaWxpdGllcyBvZiBDUFVzCiAgKi8KLWV4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YTsKLWV4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgbmV3X2NwdV9kYXRhOwotZXh0ZXJuIHN0cnVjdCB0c3Nfc3RydWN0IGRvdWJsZWZhdWx0X3RzczsKLWV4dGVybiBfX3UzMiBjbGVhcmVkX2NwdV9jYXBzW05DQVBJTlRTXTsKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYJYm9vdF9jcHVfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYJbmV3X2NwdV9kYXRhOworCitleHRlcm4gc3RydWN0IHRzc19zdHJ1Y3QJZG91YmxlZmF1bHRfdHNzOworZXh0ZXJuIF9fdTMyCQkJY2xlYXJlZF9jcHVfY2Fwc1tOQ0FQSU5UU107CiAKICNpZmRlZiBDT05GSUdfU01QCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CkBAIC0xMjksNyArMTQ0LDE4IEBACiAjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEJYm9vdF9jcHVfZGF0YQogI2VuZGlmCiAKLXZvaWQgY3B1X2RldGVjdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworc3RhdGljIGlubGluZSBpbnQgaGx0X3dvcmtzKGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXJldHVybiBjcHVfZGF0YShjcHUpLmhsdF93b3Jrc19vazsKKyNlbHNlCisJcmV0dXJuIDE7CisjZW5kaWYKK30KKworI2RlZmluZSBjYWNoZV9saW5lX3NpemUoKQkoYm9vdF9jcHVfZGF0YS54ODZfY2FjaGVfYWxpZ25tZW50KQorCitleHRlcm4gdm9pZCBjcHVfZGV0ZWN0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CiAKIGV4dGVybiB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKik7CiBleHRlcm4gdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKTsKQEAgLTE0NiwxNSArMTcyLDE1IEBACiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9jcHVpZCh1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCi0JCQkJCSB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpCisJCQkJdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGludCAqZWR4KQogewogCS8qIGVjeCBpcyBvZnRlbiBhbiBpbnB1dCBhcyB3ZWxsIGFzIGFuIG91dHB1dC4gKi8KLQlfX2FzbV9fKCJjcHVpZCIKLQkJOiAiPWEiICgqZWF4KSwKLQkJICAiPWIiICgqZWJ4KSwKLQkJICAiPWMiICgqZWN4KSwKLQkJICAiPWQiICgqZWR4KQotCQk6ICIwIiAoKmVheCksICIyIiAoKmVjeCkpOworCWFzbSgiY3B1aWQiCisJICAgIDogIj1hIiAoKmVheCksCisJICAgICAgIj1iIiAoKmVieCksCisJICAgICAgIj1jIiAoKmVjeCksCisJICAgICAgIj1kIiAoKmVkeCkKKwkgICAgOiAiMCIgKCplYXgpLCAiMiIgKCplY3gpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvYWRfY3IzKHBnZF90ICpwZ2RpcikKQEAgLTE2NSw1NCArMTkxLDY3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogLyogVGhpcyBpcyB0aGUgVFNTIGRlZmluZWQgYnkgdGhlIGhhcmR3YXJlLiAqLwogc3RydWN0IHg4Nl9od190c3MgewotCXVuc2lnbmVkIHNob3J0CWJhY2tfbGluaywgX19ibGg7Ci0JdW5zaWduZWQgbG9uZwlzcDA7Ci0JdW5zaWduZWQgc2hvcnQJc3MwLCBfX3NzMGg7Ci0JdW5zaWduZWQgbG9uZwlzcDE7Ci0JdW5zaWduZWQgc2hvcnQJc3MxLCBfX3NzMWg7CS8qIHNzMSBjYWNoZXMgTVNSX0lBMzJfU1lTRU5URVJfQ1MgKi8KLQl1bnNpZ25lZCBsb25nCXNwMjsKLQl1bnNpZ25lZCBzaG9ydAlzczIsIF9fc3MyaDsKLQl1bnNpZ25lZCBsb25nCV9fY3IzOwotCXVuc2lnbmVkIGxvbmcJaXA7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQl1bnNpZ25lZCBsb25nCWF4LCBjeCwgZHgsIGJ4OwotCXVuc2lnbmVkIGxvbmcJc3AsIGJwLCBzaSwgZGk7Ci0JdW5zaWduZWQgc2hvcnQJZXMsIF9fZXNoOwotCXVuc2lnbmVkIHNob3J0CWNzLCBfX2NzaDsKLQl1bnNpZ25lZCBzaG9ydAlzcywgX19zc2g7Ci0JdW5zaWduZWQgc2hvcnQJZHMsIF9fZHNoOwotCXVuc2lnbmVkIHNob3J0CWZzLCBfX2ZzaDsKLQl1bnNpZ25lZCBzaG9ydAlncywgX19nc2g7Ci0JdW5zaWduZWQgc2hvcnQJbGR0LCBfX2xkdGg7Ci0JdW5zaWduZWQgc2hvcnQJdHJhY2UsIGlvX2JpdG1hcF9iYXNlOworCXVuc2lnbmVkIHNob3J0CQliYWNrX2xpbmssIF9fYmxoOworCXVuc2lnbmVkIGxvbmcJCXNwMDsKKwl1bnNpZ25lZCBzaG9ydAkJc3MwLCBfX3NzMGg7CisJdW5zaWduZWQgbG9uZwkJc3AxOworCS8qIHNzMSBjYWNoZXMgTVNSX0lBMzJfU1lTRU5URVJfQ1M6ICovCisJdW5zaWduZWQgc2hvcnQJCXNzMSwgX19zczFoOworCXVuc2lnbmVkIGxvbmcJCXNwMjsKKwl1bnNpZ25lZCBzaG9ydAkJc3MyLCBfX3NzMmg7CisJdW5zaWduZWQgbG9uZwkJX19jcjM7CisJdW5zaWduZWQgbG9uZwkJaXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJYXg7CisJdW5zaWduZWQgbG9uZwkJY3g7CisJdW5zaWduZWQgbG9uZwkJZHg7CisJdW5zaWduZWQgbG9uZwkJYng7CisJdW5zaWduZWQgbG9uZwkJc3A7CisJdW5zaWduZWQgbG9uZwkJYnA7CisJdW5zaWduZWQgbG9uZwkJc2k7CisJdW5zaWduZWQgbG9uZwkJZGk7CisJdW5zaWduZWQgc2hvcnQJCWVzLCBfX2VzaDsKKwl1bnNpZ25lZCBzaG9ydAkJY3MsIF9fY3NoOworCXVuc2lnbmVkIHNob3J0CQlzcywgX19zc2g7CisJdW5zaWduZWQgc2hvcnQJCWRzLCBfX2RzaDsKKwl1bnNpZ25lZCBzaG9ydAkJZnMsIF9fZnNoOworCXVuc2lnbmVkIHNob3J0CQlncywgX19nc2g7CisJdW5zaWduZWQgc2hvcnQJCWxkdCwgX19sZHRoOworCXVuc2lnbmVkIHNob3J0CQl0cmFjZTsKKwl1bnNpZ25lZCBzaG9ydAkJaW9fYml0bWFwX2Jhc2U7CisKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAjZWxzZQogc3RydWN0IHg4Nl9od190c3MgewotCXUzMiByZXNlcnZlZDE7Ci0JdTY0IHNwMDsKLQl1NjQgc3AxOwotCXU2NCBzcDI7Ci0JdTY0IHJlc2VydmVkMjsKLQl1NjQgaXN0WzddOwotCXUzMiByZXNlcnZlZDM7Ci0JdTMyIHJlc2VydmVkNDsKLQl1MTYgcmVzZXJ2ZWQ1OwotCXUxNiBpb19iaXRtYXBfYmFzZTsKKwl1MzIJCQlyZXNlcnZlZDE7CisJdTY0CQkJc3AwOworCXU2NAkJCXNwMTsKKwl1NjQJCQlzcDI7CisJdTY0CQkJcmVzZXJ2ZWQyOworCXU2NAkJCWlzdFs3XTsKKwl1MzIJCQlyZXNlcnZlZDM7CisJdTMyCQkJcmVzZXJ2ZWQ0OworCXUxNgkJCXJlc2VydmVkNTsKKwl1MTYJCQlpb19iaXRtYXBfYmFzZTsKKwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAjZW5kaWYKIAogLyoKLSAqIFNpemUgb2YgaW9fYml0bWFwLgorICogSU8tYml0bWFwIHNpemVzOgogICovCi0jZGVmaW5lIElPX0JJVE1BUF9CSVRTICA2NTUzNgotI2RlZmluZSBJT19CSVRNQVBfQllURVMgKElPX0JJVE1BUF9CSVRTLzgpCi0jZGVmaW5lIElPX0JJVE1BUF9MT05HUyAoSU9fQklUTUFQX0JZVEVTL3NpemVvZihsb25nKSkKLSNkZWZpbmUgSU9fQklUTUFQX09GRlNFVCBvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCwgaW9fYml0bWFwKQotI2RlZmluZSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVQgMHg4MDAwCi0jZGVmaW5lIElOVkFMSURfSU9fQklUTUFQX09GRlNFVF9MQVpZIDB4OTAwMAorI2RlZmluZSBJT19CSVRNQVBfQklUUwkJCTY1NTM2CisjZGVmaW5lIElPX0JJVE1BUF9CWVRFUwkJCShJT19CSVRNQVBfQklUUy84KQorI2RlZmluZSBJT19CSVRNQVBfTE9OR1MJCQkoSU9fQklUTUFQX0JZVEVTL3NpemVvZihsb25nKSkKKyNkZWZpbmUgSU9fQklUTUFQX09GRlNFVAkJb2Zmc2V0b2Yoc3RydWN0IHRzc19zdHJ1Y3QsIGlvX2JpdG1hcCkKKyNkZWZpbmUgSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUCTB4ODAwMAorI2RlZmluZSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVRfTEFaWQkweDkwMDAKIAogc3RydWN0IHRzc19zdHJ1Y3QgewotCXN0cnVjdCB4ODZfaHdfdHNzIHg4Nl90c3M7CisJLyoKKwkgKiBUaGUgaGFyZHdhcmUgc3RhdGU6CisJICovCisJc3RydWN0IHg4Nl9od190c3MJeDg2X3RzczsKIAogCS8qCiAJICogVGhlIGV4dHJhIDEgaXMgdGhlcmUgYmVjYXVzZSB0aGUgQ1BVIHdpbGwgYWNjZXNzIGFuCkBAIC0yMjAsMTM5ICsyNTksMTY0IEBACiAJICogYml0bWFwLiBUaGUgZXh0cmEgYnl0ZSBtdXN0IGJlIGFsbCAxIGJpdHMsIGFuZCBtdXN0CiAJICogYmUgd2l0aGluIHRoZSBsaW1pdC4KIAkgKi8KLQl1bnNpZ25lZCBsb25nCWlvX2JpdG1hcFtJT19CSVRNQVBfTE9OR1MgKyAxXTsKKwl1bnNpZ25lZCBsb25nCQlpb19iaXRtYXBbSU9fQklUTUFQX0xPTkdTICsgMV07CiAJLyoKIAkgKiBDYWNoZSB0aGUgY3VycmVudCBtYXhpbXVtIGFuZCB0aGUgbGFzdCB0YXNrIHRoYXQgdXNlZCB0aGUgYml0bWFwOgogCSAqLwotCXVuc2lnbmVkIGxvbmcgaW9fYml0bWFwX21heDsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqaW9fYml0bWFwX293bmVyOworCXVuc2lnbmVkIGxvbmcJCWlvX2JpdG1hcF9tYXg7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QJKmlvX2JpdG1hcF9vd25lcjsKKwogCS8qCi0JICogcGFkcyB0aGUgVFNTIHRvIGJlIGNhY2hlbGluZS1hbGlnbmVkIChzaXplIGlzIDB4MTAwKQorCSAqIFBhZCB0aGUgVFNTIHRvIGJlIGNhY2hlbGluZS1hbGlnbmVkIChzaXplIGlzIDB4MTAwKToKIAkgKi8KLQl1bnNpZ25lZCBsb25nIF9fY2FjaGVsaW5lX2ZpbGxlclszNV07CisJdW5zaWduZWQgbG9uZwkJX19jYWNoZWxpbmVfZmlsbGVyWzM1XTsKIAkvKgotCSAqIC4uIGFuZCB0aGVuIGFub3RoZXIgMHgxMDAgYnl0ZXMgZm9yIGVtZXJnZW5jeSBrZXJuZWwgc3RhY2sKKwkgKiAuLiBhbmQgdGhlbiBhbm90aGVyIDB4MTAwIGJ5dGVzIGZvciB0aGUgZW1lcmdlbmN5IGtlcm5lbCBzdGFjazoKIAkgKi8KLQl1bnNpZ25lZCBsb25nIHN0YWNrWzY0XTsKKwl1bnNpZ25lZCBsb25nCQlzdGFja1s2NF07CisKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdHNzX3N0cnVjdCwgaW5pdF90c3MpOwogCi0vKiBTYXZlIHRoZSBvcmlnaW5hbCBpc3QgdmFsdWVzIGZvciBjaGVja2luZyBzdGFjayBwb2ludGVycyBkdXJpbmcgZGVidWdnaW5nICovCisvKgorICogU2F2ZSB0aGUgb3JpZ2luYWwgaXN0IHZhbHVlcyBmb3IgY2hlY2tpbmcgc3RhY2sgcG9pbnRlcnMgZHVyaW5nIGRlYnVnZ2luZworICovCiBzdHJ1Y3Qgb3JpZ19pc3QgewotCXVuc2lnbmVkIGxvbmcgaXN0WzddOworCXVuc2lnbmVkIGxvbmcJCWlzdFs3XTsKIH07CiAKICNkZWZpbmUJTVhDU1JfREVGQVVMVAkJMHgxZjgwCiAKIHN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCB7Ci0JdTMyCWN3ZDsKLQl1MzIJc3dkOwotCXUzMgl0d2Q7Ci0JdTMyCWZpcDsKLQl1MzIJZmNzOwotCXUzMglmb287Ci0JdTMyCWZvczsKLQl1MzIJc3Rfc3BhY2VbMjBdOwkvKiA4KjEwIGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDgwIGJ5dGVzICovCi0JdTMyCXN0YXR1czsJCS8qIHNvZnR3YXJlIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCXUzMgkJCWN3ZDsJLyogRlBVIENvbnRyb2wgV29yZAkJKi8KKwl1MzIJCQlzd2Q7CS8qIEZQVSBTdGF0dXMgV29yZAkJKi8KKwl1MzIJCQl0d2Q7CS8qIEZQVSBUYWcgV29yZAkJCSovCisJdTMyCQkJZmlwOwkvKiBGUFUgSVAgT2Zmc2V0CQkqLworCXUzMgkJCWZjczsJLyogRlBVIElQIFNlbGVjdG9yCQkqLworCXUzMgkJCWZvbzsJLyogRlBVIE9wZXJhbmQgUG9pbnRlciBPZmZzZXQJKi8KKwl1MzIJCQlmb3M7CS8qIEZQVSBPcGVyYW5kIFBvaW50ZXIgU2VsZWN0b3IJKi8KKworCS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXM6CQkJKi8KKwl1MzIJCQlzdF9zcGFjZVsyMF07CisKKwkvKiBTb2Z0d2FyZSBzdGF0dXMgaW5mb3JtYXRpb24gW25vdCB0b3VjaGVkIGJ5IEZTQVZFIF06CQkqLworCXUzMgkJCXN0YXR1czsKIH07CiAKIHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgewotCXUxNgljd2Q7Ci0JdTE2CXN3ZDsKLQl1MTYJdHdkOwotCXUxNglmb3A7CisJdTE2CQkJY3dkOyAvKiBDb250cm9sIFdvcmQJCQkqLworCXUxNgkJCXN3ZDsgLyogU3RhdHVzIFdvcmQJCQkqLworCXUxNgkJCXR3ZDsgLyogVGFnIFdvcmQJCQkqLworCXUxNgkJCWZvcDsgLyogTGFzdCBJbnN0cnVjdGlvbiBPcGNvZGUJCSovCiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdTY0CXJpcDsKLQkJCXU2NAlyZHA7CisJCQl1NjQJcmlwOyAvKiBJbnN0cnVjdGlvbiBQb2ludGVyCQkqLworCQkJdTY0CXJkcDsgLyogRGF0YSBQb2ludGVyCQkJKi8KIAkJfTsKIAkJc3RydWN0IHsKLQkJCXUzMglmaXA7Ci0JCQl1MzIJZmNzOwotCQkJdTMyCWZvbzsKLQkJCXUzMglmb3M7CisJCQl1MzIJZmlwOyAvKiBGUFUgSVAgT2Zmc2V0CQkJKi8KKwkJCXUzMglmY3M7IC8qIEZQVSBJUCBTZWxlY3RvcgkJCSovCisJCQl1MzIJZm9vOyAvKiBGUFUgT3BlcmFuZCBPZmZzZXQJCSovCisJCQl1MzIJZm9zOyAvKiBGUFUgT3BlcmFuZCBTZWxlY3RvcgkJKi8KIAkJfTsKIAl9OwotCXUzMglteGNzcjsKLQl1MzIJbXhjc3JfbWFzazsKLQl1MzIJc3Rfc3BhY2VbMzJdOwkvKiA4KjE2IGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDEyOCBieXRlcyAqLwotCXUzMgl4bW1fc3BhY2VbNjRdOwkvKiAxNioxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMjU2IGJ5dGVzICovCi0JdTMyCXBhZGRpbmdbMjRdOworCXUzMgkJCW14Y3NyOwkJLyogTVhDU1IgUmVnaXN0ZXIgU3RhdGUgKi8KKwl1MzIJCQlteGNzcl9tYXNrOwkvKiBNWENTUiBNYXNrCQkqLworCisJLyogOCoxNiBieXRlcyBmb3IgZWFjaCBGUC1yZWcgPSAxMjggYnl0ZXM6CQkJKi8KKwl1MzIJCQlzdF9zcGFjZVszMl07CisKKwkvKiAxNioxNiBieXRlcyBmb3IgZWFjaCBYTU0tcmVnID0gMjU2IGJ5dGVzOgkJCSovCisJdTMyCQkJeG1tX3NwYWNlWzY0XTsKKworCXUzMgkJCXBhZGRpbmdbMjRdOworCiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7CiAKIHN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IHsKLQl1MzIJY3dkOwotCXUzMglzd2Q7Ci0JdTMyCXR3ZDsKLQl1MzIJZmlwOwotCXUzMglmY3M7Ci0JdTMyCWZvbzsKLQl1MzIJZm9zOwotCXUzMglzdF9zcGFjZVsyMF07CS8qIDgqMTAgYnl0ZXMgZm9yIGVhY2ggRlAtcmVnID0gODAgYnl0ZXMgKi8KLQl1OAlmdG9wLCBjaGFuZ2VkLCBsb29rYWhlYWQsIG5vX3VwZGF0ZSwgcm0sIGFsaW1pdDsKLQlzdHJ1Y3QgaW5mbwkqaW5mbzsKLQl1MzIJZW50cnlfZWlwOworCXUzMgkJCWN3ZDsKKwl1MzIJCQlzd2Q7CisJdTMyCQkJdHdkOworCXUzMgkJCWZpcDsKKwl1MzIJCQlmY3M7CisJdTMyCQkJZm9vOworCXUzMgkJCWZvczsKKwkvKiA4KjEwIGJ5dGVzIGZvciBlYWNoIEZQLXJlZyA9IDgwIGJ5dGVzOiAqLworCXUzMgkJCXN0X3NwYWNlWzIwXTsKKwl1OAkJCWZ0b3A7CisJdTgJCQljaGFuZ2VkOworCXU4CQkJbG9va2FoZWFkOworCXU4CQkJbm9fdXBkYXRlOworCXU4CQkJcm07CisJdTgJCQlhbGltaXQ7CisJc3RydWN0IGluZm8JCSppbmZvOworCXUzMgkJCWVudHJ5X2VpcDsKIH07CiAKLXVuaW9uIGkzODdfdW5pb24gewordW5pb24gdGhyZWFkX3hzdGF0ZSB7CiAJc3RydWN0IGkzODdfZnNhdmVfc3RydWN0CWZzYXZlOwogCXN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QJZnhzYXZlOwotCXN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IAlzb2Z0OworCXN0cnVjdCBpMzg3X3NvZnRfc3RydWN0CQlzb2Z0OwogfTsKIAotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qCi0gKiB0aGUgZm9sbG93aW5nIG5vdyBsaXZlcyBpbiB0aGUgcGVyIGNwdSBhcmVhOgotICogZXh0ZXJuCWludCBjcHVfbGxjX2lkW05SX0NQVVNdOwotICovCi1ERUNMQVJFX1BFUl9DUFUodTgsIGNwdV9sbGNfaWQpOwotI2Vsc2UKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IG9yaWdfaXN0LCBvcmlnX2lzdCk7CiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9feDg2ICopOworZXh0ZXJuIHVuc2lnbmVkIGludCB4c3RhdGVfc2l6ZTsKK2V4dGVybiB2b2lkIGZyZWVfdGhyZWFkX3hzdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcDsKIGV4dGVybiB2b2lkIGluaXRfc2NhdHRlcmVkX2NwdWlkX2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CiBleHRlcm4gdW5zaWduZWQgaW50IGluaXRfaW50ZWxfY2FjaGVpbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CiBleHRlcm4gdW5zaWduZWQgc2hvcnQgbnVtX2NhY2hlX2xlYXZlczsKIAogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewotLyogY2FjaGVkIFRMUyBkZXNjcmlwdG9ycy4gKi8KLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgdGxzX2FycmF5W0dEVF9FTlRSWV9UTFNfRU5UUklFU107Ci0JdW5zaWduZWQgbG9uZwlzcDA7Ci0JdW5zaWduZWQgbG9uZwlzcDsKKwkvKiBDYWNoZWQgVExTIGRlc2NyaXB0b3JzOiAqLworCXN0cnVjdCBkZXNjX3N0cnVjdAl0bHNfYXJyYXlbR0RUX0VOVFJZX1RMU19FTlRSSUVTXTsKKwl1bnNpZ25lZCBsb25nCQlzcDA7CisJdW5zaWduZWQgbG9uZwkJc3A7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCXVuc2lnbmVkIGxvbmcJc3lzZW50ZXJfY3M7CisJdW5zaWduZWQgbG9uZwkJc3lzZW50ZXJfY3M7CiAjZWxzZQotCXVuc2lnbmVkIGxvbmcgCXVzZXJzcDsJLyogQ29weSBmcm9tIFBEQSAqLwotCXVuc2lnbmVkIHNob3J0CWVzLCBkcywgZnNpbmRleCwgZ3NpbmRleDsKKwl1bnNpZ25lZCBsb25nCQl1c2Vyc3A7CS8qIENvcHkgZnJvbSBQREEgKi8KKwl1bnNpZ25lZCBzaG9ydAkJZXM7CisJdW5zaWduZWQgc2hvcnQJCWRzOworCXVuc2lnbmVkIHNob3J0CQlmc2luZGV4OworCXVuc2lnbmVkIHNob3J0CQlnc2luZGV4OwogI2VuZGlmCi0JdW5zaWduZWQgbG9uZwlpcDsKLQl1bnNpZ25lZCBsb25nCWZzOwotCXVuc2lnbmVkIGxvbmcJZ3M7Ci0vKiBIYXJkd2FyZSBkZWJ1Z2dpbmcgcmVnaXN0ZXJzICovCi0JdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzA7Ci0JdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzE7Ci0JdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzI7Ci0JdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzM7Ci0JdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzY7Ci0JdW5zaWduZWQgbG9uZwlkZWJ1Z3JlZzc7Ci0vKiBmYXVsdCBpbmZvICovCi0JdW5zaWduZWQgbG9uZwljcjIsIHRyYXBfbm8sIGVycm9yX2NvZGU7Ci0vKiBmbG9hdGluZyBwb2ludCBpbmZvICovCi0JdW5pb24gaTM4N191bmlvbglpMzg3IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7OworCXVuc2lnbmVkIGxvbmcJCWlwOworCXVuc2lnbmVkIGxvbmcJCWZzOworCXVuc2lnbmVkIGxvbmcJCWdzOworCS8qIEhhcmR3YXJlIGRlYnVnZ2luZyByZWdpc3RlcnM6ICovCisJdW5zaWduZWQgbG9uZwkJZGVidWdyZWcwOworCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnMTsKKwl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzI7CisJdW5zaWduZWQgbG9uZwkJZGVidWdyZWczOworCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnNjsKKwl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzc7CisJLyogRmF1bHQgaW5mbzogKi8KKwl1bnNpZ25lZCBsb25nCQljcjI7CisJdW5zaWduZWQgbG9uZwkJdHJhcF9ubzsKKwl1bnNpZ25lZCBsb25nCQllcnJvcl9jb2RlOworCS8qIGZsb2F0aW5nIHBvaW50IGFuZCBleHRlbmRlZCBwcm9jZXNzb3Igc3RhdGUgKi8KKwl1bmlvbiB0aHJlYWRfeHN0YXRlCSp4c3RhdGU7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotLyogdmlydHVhbCA4NiBtb2RlIGluZm8gKi8KKwkvKiBWaXJ0dWFsIDg2IG1vZGUgaW5mbyAqLwogCXN0cnVjdCB2bTg2X3N0cnVjdCBfX3VzZXIgKnZtODZfaW5mbzsKIAl1bnNpZ25lZCBsb25nCQlzY3JlZW5fYml0bWFwOwotCXVuc2lnbmVkIGxvbmcJCXY4NmZsYWdzLCB2ODZtYXNrLCBzYXZlZF9zcDA7Ci0JdW5zaWduZWQgaW50CQlzYXZlZF9mcywgc2F2ZWRfZ3M7CisJdW5zaWduZWQgbG9uZwkJdjg2ZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJdjg2bWFzazsKKwl1bnNpZ25lZCBsb25nCQlzYXZlZF9zcDA7CisJdW5zaWduZWQgaW50CQlzYXZlZF9mczsKKwl1bnNpZ25lZCBpbnQJCXNhdmVkX2dzOwogI2VuZGlmCi0vKiBJTyBwZXJtaXNzaW9ucyAqLwotCXVuc2lnbmVkIGxvbmcJKmlvX2JpdG1hcF9wdHI7Ci0JdW5zaWduZWQgbG9uZwlpb3BsOwotLyogbWF4IGFsbG93ZWQgcG9ydCBpbiB0aGUgYml0bWFwLCBpbiBieXRlczogKi8KLQl1bnNpZ25lZCBpb19iaXRtYXBfbWF4OworCS8qIElPIHBlcm1pc3Npb25zOiAqLworCXVuc2lnbmVkIGxvbmcJCSppb19iaXRtYXBfcHRyOworCXVuc2lnbmVkIGxvbmcJCWlvcGw7CisJLyogTWF4IGFsbG93ZWQgcG9ydCBpbiB0aGUgYml0bWFwLCBpbiBieXRlczogKi8KKwl1bnNpZ25lZAkJaW9fYml0bWFwX21heDsKIC8qIE1TUl9JQTMyX0RFQlVHQ1RMTVNSIHZhbHVlIHRvIHN3aXRjaCBpbiBpZiBUSUZfREVCVUdDVExNU1IgaXMgc2V0LiAgKi8KIAl1bnNpZ25lZCBsb25nCWRlYnVnY3RsbXNyOwogLyogRGVidWcgU3RvcmUgLSBpZiBub3QgMCBwb2ludHMgdG8gYSBEUyBTYXZlIEFyZWEgY29uZmlndXJhdGlvbjsKQEAgLTM2MiwyMSArNDI2LDI3IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuYXRpdmVfZ2V0X2RlYnVncmVnKGludCByZWdubykKIHsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IDA7IAkvKiBEYW1uIHlvdSwgZ2NjISAqLworCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsJLyogRGFtbiB5b3UsIGdjYyEgKi8KIAogCXN3aXRjaCAocmVnbm8pIHsKIAljYXNlIDA6Ci0JCWFzbSgibW92ICUlZGIwLCAlMCIgOiI9ciIgKHZhbCkpOyBicmVhazsKKwkJYXNtKCJtb3YgJSVkYjAsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOwogCWNhc2UgMToKLQkJYXNtKCJtb3YgJSVkYjEsICUwIiA6Ij1yIiAodmFsKSk7IGJyZWFrOworCQlhc20oIm1vdiAlJWRiMSwgJTAiIDoiPXIiICh2YWwpKTsKKwkJYnJlYWs7CiAJY2FzZSAyOgotCQlhc20oIm1vdiAlJWRiMiwgJTAiIDoiPXIiICh2YWwpKTsgYnJlYWs7CisJCWFzbSgibW92ICUlZGIyLCAlMCIgOiI9ciIgKHZhbCkpOworCQlicmVhazsKIAljYXNlIDM6Ci0JCWFzbSgibW92ICUlZGIzLCAlMCIgOiI9ciIgKHZhbCkpOyBicmVhazsKKwkJYXNtKCJtb3YgJSVkYjMsICUwIiA6Ij1yIiAodmFsKSk7CisJCWJyZWFrOwogCWNhc2UgNjoKLQkJYXNtKCJtb3YgJSVkYjYsICUwIiA6Ij1yIiAodmFsKSk7IGJyZWFrOworCQlhc20oIm1vdiAlJWRiNiwgJTAiIDoiPXIiICh2YWwpKTsKKwkJYnJlYWs7CiAJY2FzZSA3OgotCQlhc20oIm1vdiAlJWRiNywgJTAiIDoiPXIiICh2YWwpKTsgYnJlYWs7CisJCWFzbSgibW92ICUlZGI3LCAlMCIgOiI9ciIgKHZhbCkpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CkBAIC0zODcsMjIgKzQ1NywyMiBAQAogewogCXN3aXRjaCAocmVnbm8pIHsKIAljYXNlIDA6Ci0JCWFzbSgibW92ICUwLCUlZGIwIgk6IC8qIG5vIG91dHB1dCAqLyA6InIiICh2YWx1ZSkpOworCQlhc20oIm1vdiAlMCwgJSVkYjAiCTo6InIiICh2YWx1ZSkpOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWFzbSgibW92ICUwLCUlZGIxIgk6IC8qIG5vIG91dHB1dCAqLyA6InIiICh2YWx1ZSkpOworCQlhc20oIm1vdiAlMCwgJSVkYjEiCTo6InIiICh2YWx1ZSkpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWFzbSgibW92ICUwLCUlZGIyIgk6IC8qIG5vIG91dHB1dCAqLyA6InIiICh2YWx1ZSkpOworCQlhc20oIm1vdiAlMCwgJSVkYjIiCTo6InIiICh2YWx1ZSkpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCWFzbSgibW92ICUwLCUlZGIzIgk6IC8qIG5vIG91dHB1dCAqLyA6InIiICh2YWx1ZSkpOworCQlhc20oIm1vdiAlMCwgJSVkYjMiCTo6InIiICh2YWx1ZSkpOwogCQlicmVhazsKIAljYXNlIDY6Ci0JCWFzbSgibW92ICUwLCUlZGI2Igk6IC8qIG5vIG91dHB1dCAqLyA6InIiICh2YWx1ZSkpOworCQlhc20oIm1vdiAlMCwgJSVkYjYiCTo6InIiICh2YWx1ZSkpOwogCQlicmVhazsKIAljYXNlIDc6Ci0JCWFzbSgibW92ICUwLCUlZGI3Igk6IC8qIG5vIG91dHB1dCAqLyA6InIiICh2YWx1ZSkpOworCQlhc20oIm1vdiAlMCwgJSVkYjciCTo6InIiICh2YWx1ZSkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTQxNiwyMyArNDg2LDI0IEBACiB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCXVuc2lnbmVkIGludCByZWc7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwdXNoZmw7IgotCQkJICAgICAgInBvcGwgJTA7IgotCQkJICAgICAgImFuZGwgJTEsICUwOyIKLQkJCSAgICAgICJvcmwgJTIsICUwOyIKLQkJCSAgICAgICJwdXNobCAlMDsiCi0JCQkgICAgICAicG9wZmwiCi0JCQkJOiAiPSZyIiAocmVnKQotCQkJCTogImkiICh+WDg2X0VGTEFHU19JT1BMKSwgInIiIChtYXNrKSk7CisKKwlhc20gdm9sYXRpbGUgKCJwdXNoZmw7IgorCQkgICAgICAicG9wbCAlMDsiCisJCSAgICAgICJhbmRsICUxLCAlMDsiCisJCSAgICAgICJvcmwgJTIsICUwOyIKKwkJICAgICAgInB1c2hsICUwOyIKKwkJICAgICAgInBvcGZsIgorCQkgICAgICA6ICI9JnIiIChyZWcpCisJCSAgICAgIDogImkiICh+WDg2X0VGTEFHU19JT1BMKSwgInIiIChtYXNrKSk7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9sb2FkX3NwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLAotCQkJCSAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCitzdGF0aWMgaW5saW5lIHZvaWQKK25hdGl2ZV9sb2FkX3NwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLCBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQogewogCXRzcy0+eDg2X3Rzcy5zcDAgPSB0aHJlYWQtPnNwMDsKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogT25seSBoYXBwZW5zIHdoZW4gU0VQIGlzIGVuYWJsZWQsIG5vIG5lZWQgdG8gdGVzdCAiU0VQImFyYXRlbHkgKi8KKwkvKiBPbmx5IGhhcHBlbnMgd2hlbiBTRVAgaXMgZW5hYmxlZCwgbm8gbmVlZCB0byB0ZXN0ICJTRVAiYXJhdGVseTogKi8KIAlpZiAodW5saWtlbHkodHNzLT54ODZfdHNzLnNzMSAhPSB0aHJlYWQtPnN5c2VudGVyX2NzKSkgewogCQl0c3MtPng4Nl90c3Muc3MxID0gdGhyZWFkLT5zeXNlbnRlcl9jczsKIAkJd3Jtc3IoTVNSX0lBMzJfU1lTRU5URVJfQ1MsIHRocmVhZC0+c3lzZW50ZXJfY3MsIDApOwpAQCAtNDUwLDggKzUyMSw4IEBACiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjZWxzZQotI2RlZmluZSBfX2NwdWlkIG5hdGl2ZV9jcHVpZAotI2RlZmluZSBwYXJhdmlydF9lbmFibGVkKCkgMAorI2RlZmluZSBfX2NwdWlkCQkJbmF0aXZlX2NwdWlkCisjZGVmaW5lIHBhcmF2aXJ0X2VuYWJsZWQoKQkwCiAKIC8qCiAgKiBUaGVzZSBzcGVjaWFsIG1hY3JvcyBjYW4gYmUgdXNlZCB0byBnZXQgb3Igc2V0IGEgZGVidWdnaW5nIHJlZ2lzdGVyCkBAIC00NzcsMTEgKzU0OCwxMiBAQAogICogZW5hYmxlKSwgc28gdGhhdCBhbnkgQ1BVJ3MgdGhhdCBib290IHVwCiAgKiBhZnRlciB1cyBjYW4gZ2V0IHRoZSBjb3JyZWN0IGZsYWdzLgogICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY3I0X2ZlYXR1cmVzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCW1tdV9jcjRfZmVhdHVyZXM7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5fY3I0KHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKIAl1bnNpZ25lZCBjcjQ7CisKIAltbXVfY3I0X2ZlYXR1cmVzIHw9IG1hc2s7CiAJY3I0ID0gcmVhZF9jcjQoKTsKIAljcjQgfD0gbWFzazsKQEAgLTQ5MSw2ICs1NjMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2luX2NyNCh1bnNpZ25lZCBsb25nIG1hc2spCiB7CiAJdW5zaWduZWQgY3I0OworCiAJbW11X2NyNF9mZWF0dXJlcyAmPSB+bWFzazsKIAljcjQgPSByZWFkX2NyNCgpOwogCWNyNCAmPSB+bWFzazsKQEAgLTQ5OCw0MiArNTcxLDQyIEBACiB9CiAKIHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyIHsKLQl1bnNpZ25lZCBpbnQgaGRydmVyOwotCXVuc2lnbmVkIGludCByZXY7Ci0JdW5zaWduZWQgaW50IGRhdGU7Ci0JdW5zaWduZWQgaW50IHNpZzsKLQl1bnNpZ25lZCBpbnQgY2tzdW07Ci0JdW5zaWduZWQgaW50IGxkcnZlcjsKLQl1bnNpZ25lZCBpbnQgcGY7Ci0JdW5zaWduZWQgaW50IGRhdGFzaXplOwotCXVuc2lnbmVkIGludCB0b3RhbHNpemU7Ci0JdW5zaWduZWQgaW50IHJlc2VydmVkWzNdOworCXVuc2lnbmVkIGludAkJaGRydmVyOworCXVuc2lnbmVkIGludAkJcmV2OworCXVuc2lnbmVkIGludAkJZGF0ZTsKKwl1bnNpZ25lZCBpbnQJCXNpZzsKKwl1bnNpZ25lZCBpbnQJCWNrc3VtOworCXVuc2lnbmVkIGludAkJbGRydmVyOworCXVuc2lnbmVkIGludAkJcGY7CisJdW5zaWduZWQgaW50CQlkYXRhc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCXRvdGFsc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCXJlc2VydmVkWzNdOwogfTsKIAogc3RydWN0IG1pY3JvY29kZSB7Ci0Jc3RydWN0IG1pY3JvY29kZV9oZWFkZXIgaGRyOwotCXVuc2lnbmVkIGludCBiaXRzWzBdOworCXN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyCWhkcjsKKwl1bnNpZ25lZCBpbnQJCWJpdHNbMF07CiB9OwogCi10eXBlZGVmIHN0cnVjdCBtaWNyb2NvZGUgbWljcm9jb2RlX3Q7Ci10eXBlZGVmIHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyIG1pY3JvY29kZV9oZWFkZXJfdDsKK3R5cGVkZWYgc3RydWN0IG1pY3JvY29kZQltaWNyb2NvZGVfdDsKK3R5cGVkZWYgc3RydWN0IG1pY3JvY29kZV9oZWFkZXIJbWljcm9jb2RlX2hlYWRlcl90OwogCiAvKiBtaWNyb2NvZGUgZm9ybWF0IGlzIGV4dGVuZGVkIGZyb20gcHJlc2NvdHQgcHJvY2Vzc29ycyAqLwogc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSB7Ci0JdW5zaWduZWQgaW50IHNpZzsKLQl1bnNpZ25lZCBpbnQgcGY7Ci0JdW5zaWduZWQgaW50IGNrc3VtOworCXVuc2lnbmVkIGludAkJc2lnOworCXVuc2lnbmVkIGludAkJcGY7CisJdW5zaWduZWQgaW50CQlja3N1bTsKIH07CiAKIHN0cnVjdCBleHRlbmRlZF9zaWd0YWJsZSB7Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCXVuc2lnbmVkIGludCBja3N1bTsKLQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRbM107CisJdW5zaWduZWQgaW50CQljb3VudDsKKwl1bnNpZ25lZCBpbnQJCWNrc3VtOworCXVuc2lnbmVkIGludAkJcmVzZXJ2ZWRbM107CiAJc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSBzaWdzWzBdOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgc2VnOworCXVuc2lnbmVkIGxvbmcJCXNlZzsKIH0gbW1fc2VnbWVudF90OwogCiAKQEAgLTU0NSw3ICs2MTgsNyBAQAogLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCiBleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKLS8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzICovCisvKiBQcmVwYXJlIHRvIGNvcHkgdGhyZWFkIHN0YXRlIC0gdW5sYXp5IGFsbCBsYXp5IHN0YXRlICovCiBleHRlcm4gdm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwpAQCAtNTgyLDExOSArNjU1LDEzNyBAQAogCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CiAKIAljcHVpZChvcCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKIAlyZXR1cm4gZWF4OwogfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYngodW5zaWduZWQgaW50IG9wKQogewogCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CiAKIAljcHVpZChvcCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKIAlyZXR1cm4gZWJ4OwogfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQgaW50IG9wKQogewogCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CiAKIAljcHVpZChvcCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKIAlyZXR1cm4gZWN4OwogfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKQogewogCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CiAKIAljcHVpZChvcCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKIAlyZXR1cm4gZWR4OwogfQogCiAvKiBSRVAgTk9QIChQQVVTRSkgaXMgYSBnb29kIHRoaW5nIHRvIGluc2VydCBpbnRvIGJ1c3ktd2FpdCBsb29wcy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBfbm9wKHZvaWQpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInJlcDtub3AiOiA6IDoibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKCJyZXA7IG5vcCIgOjo6ICJtZW1vcnkiKTsKIH0KIAotLyogU3RvcCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZCkKK3sKKwlyZXBfbm9wKCk7Cit9CisKKy8qIFN0b3Agc3BlY3VsYXRpdmUgZXhlY3V0aW9uOiAqLwogc3RhdGljIGlubGluZSB2b2lkIHN5bmNfY29yZSh2b2lkKQogewogCWludCB0bXA7CisKIAlhc20gdm9sYXRpbGUoImNwdWlkIiA6ICI9YSIgKHRtcCkgOiAiMCIgKDEpCi0JCQkJCSAgOiAiZWJ4IiwgImVjeCIsICJlZHgiLCAibWVtb3J5Iik7CisJCSAgICAgOiAiZWJ4IiwgImVjeCIsICJlZHgiLCAibWVtb3J5Iik7CiB9CiAKLSNkZWZpbmUgY3B1X3JlbGF4KCkgICByZXBfbm9wKCkKLQogc3RhdGljIGlubGluZSB2b2lkIF9fbW9uaXRvcihjb25zdCB2b2lkICplYXgsIHVuc2lnbmVkIGxvbmcgZWN4LAotCQl1bnNpZ25lZCBsb25nIGVkeCkKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBlZHgpCiB7Ci0JLyogIm1vbml0b3IgJWVheCwlZWN4LCVlZHg7IiAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIi5ieXRlIDB4MGYsMHgwMSwweGM4OyIKLQkJOiA6ImEiIChlYXgpLCAiYyIgKGVjeCksICJkIihlZHgpKTsKKwkvKiAibW9uaXRvciAlZWF4LCAlZWN4LCAlZWR4OyIgKi8KKwlhc20gdm9sYXRpbGUoIi5ieXRlIDB4MGYsIDB4MDEsIDB4Yzg7IgorCQkgICAgIDo6ICJhIiAoZWF4KSwgImMiIChlY3gpLCAiZCIoZWR4KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX213YWl0KHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCkKIHsKLQkvKiAibXdhaXQgJWVheCwlZWN4OyIgKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIuYnl0ZSAweDBmLDB4MDEsMHhjOTsiCi0JCTogOiJhIiAoZWF4KSwgImMiIChlY3gpKTsKKwkvKiAibXdhaXQgJWVheCwgJWVjeDsiICovCisJYXNtIHZvbGF0aWxlKCIuYnl0ZSAweDBmLCAweDAxLCAweGM5OyIKKwkJICAgICA6OiAiYSIgKGVheCksICJjIiAoZWN4KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N0aV9td2FpdCh1bnNpZ25lZCBsb25nIGVheCwgdW5zaWduZWQgbG9uZyBlY3gpCiB7Ci0JLyogIm13YWl0ICVlYXgsJWVjeDsiICovCi0JYXNtIHZvbGF0aWxlKAotCQkic3RpOyAuYnl0ZSAweDBmLDB4MDEsMHhjOTsiCi0JCTogOiJhIiAoZWF4KSwgImMiIChlY3gpKTsKKwkvKiAibXdhaXQgJWVheCwgJWVjeDsiICovCisJYXNtIHZvbGF0aWxlKCJzdGk7IC5ieXRlIDB4MGYsIDB4MDEsIDB4Yzk7IgorCQkgICAgIDo6ICJhIiAoZWF4KSwgImMiIChlY3gpKTsKIH0KIAogZXh0ZXJuIHZvaWQgbXdhaXRfaWRsZV93aXRoX2hpbnRzKHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCk7CiAKLWV4dGVybiBpbnQgZm9yY2VfbXdhaXQ7CitleHRlcm4gaW50CQkJZm9yY2VfbXdhaXQ7CiAKIGV4dGVybiB2b2lkIHNlbGVjdF9pZGxlX3JvdXRpbmUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYm9vdF9vcHRpb25faWRsZV9vdmVycmlkZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nCQlib290X29wdGlvbl9pZGxlX292ZXJyaWRlOwogCiBleHRlcm4gdm9pZCBlbmFibGVfc2VwX2NwdSh2b2lkKTsKIGV4dGVybiBpbnQgc3lzZW50ZXJfc2V0dXAodm9pZCk7CiAKIC8qIERlZmluZWQgaW4gaGVhZC5TICovCi1leHRlcm4gc3RydWN0IGRlc2NfcHRyIGVhcmx5X2dkdF9kZXNjcjsKK2V4dGVybiBzdHJ1Y3QgZGVzY19wdHIJCWVhcmx5X2dkdF9kZXNjcjsKIAogZXh0ZXJuIHZvaWQgY3B1X3NldF9nZHQoaW50KTsKIGV4dGVybiB2b2lkIHN3aXRjaF90b19uZXdfZ2R0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY3B1X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X2dkdChpbnQgY3B1KTsKIAotLyogZnJvbSBzeXN0ZW0gZGVzY3JpcHRpb24gdGFibGUgaW4gQklPUy4gIE1vc3RseSBmb3IgTUNBIHVzZSwgYnV0Ci0gKiBvdGhlcnMgbWF5IGZpbmQgaXQgdXNlZnVsLiAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBtYWNoaW5lX2lkOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtYWNoaW5lX3N1Ym1vZGVsX2lkOwotZXh0ZXJuIHVuc2lnbmVkIGludCBCSU9TX3JldmlzaW9uOwotZXh0ZXJuIHVuc2lnbmVkIGludCBtY2FfcGVudGl1bV9mbGFnOworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9kZWJ1Z2N0bG1zcih1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyKQoreworI2lmbmRlZiBDT05GSUdfWDg2X0RFQlVHQ1RMTVNSCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgNikKKwkJcmV0dXJuOworI2VuZGlmCisJd3Jtc3JsKE1TUl9JQTMyX0RFQlVHQ1RMTVNSLCBkZWJ1Z2N0bG1zcik7Cit9CiAKLS8qIEJvb3QgbG9hZGVyIHR5cGUgZnJvbSB0aGUgc2V0dXAgaGVhZGVyICovCi1leHRlcm4gaW50IGJvb3Rsb2FkZXJfdHlwZTsKKy8qCisgKiBmcm9tIHN5c3RlbSBkZXNjcmlwdGlvbiB0YWJsZSBpbiBCSU9TLiBNb3N0bHkgZm9yIE1DQSB1c2UsIGJ1dAorICogb3RoZXJzIG1heSBmaW5kIGl0IHVzZWZ1bDoKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludAkJbWFjaGluZV9pZDsKK2V4dGVybiB1bnNpZ25lZCBpbnQJCW1hY2hpbmVfc3VibW9kZWxfaWQ7CitleHRlcm4gdW5zaWduZWQgaW50CQlCSU9TX3JldmlzaW9uOwogCi1leHRlcm4gY2hhciBpZ25vcmVfZnB1X2lycTsKLSNkZWZpbmUgY2FjaGVfbGluZV9zaXplKCkgKGJvb3RfY3B1X2RhdGEueDg2X2NhY2hlX2FsaWdubWVudCkKKy8qIEJvb3QgbG9hZGVyIHR5cGUgZnJvbSB0aGUgc2V0dXAgaGVhZGVyOiAqLworZXh0ZXJuIGludAkJCWJvb3Rsb2FkZXJfdHlwZTsKKworZXh0ZXJuIGNoYXIJCQlpZ25vcmVfZnB1X2lycTsKIAogI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVCAxCiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVwogI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBCQVNFX1BSRUZFVENICUFTTV9OT1A0Ci0jZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICisjIGRlZmluZSBCQVNFX1BSRUZFVENICQlBU01fTk9QNAorIyBkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKICNlbHNlCi0jZGVmaW5lIEJBU0VfUFJFRkVUQ0gJInByZWZldGNodDAgKCUxKSIKKyMgZGVmaW5lIEJBU0VfUFJFRkVUQ0gJCSJwcmVmZXRjaHQwICglMSkiCiAjZW5kaWYKIAotLyogUHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zIGZvciBQZW50aXVtIElJSSBhbmQgQU1EIEF0aGxvbiAqLwotLyogSXQncyBub3Qgd29ydGggdG8gY2FyZSBhYm91dCAzZG5vdyEgcHJlZmV0Y2hlcyBmb3IgdGhlIEs2Ci0gICBiZWNhdXNlIHRoZXkgYXJlIG1pY3JvY29kZWQgdGhlcmUgYW5kIHZlcnkgc2xvdy4KLSAgIEhvd2V2ZXIgd2UgZG9uJ3QgZG8gcHJlZmV0Y2hlcyBmb3IgcHJlIFhQIEF0aGxvbnMgY3VycmVudGx5Ci0gICBUaGF0IHNob3VsZCBiZSBmaXhlZC4gKi8KKy8qCisgKiBQcmVmZXRjaCBpbnN0cnVjdGlvbnMgZm9yIFBlbnRpdW0gSUlJICgrKSBhbmQgQU1EIEF0aGxvbiAoKykKKyAqCisgKiBJdCdzIG5vdCB3b3J0aCB0byBjYXJlIGFib3V0IDNkbm93IHByZWZldGNoZXMgZm9yIHRoZSBLNgorICogYmVjYXVzZSB0aGV5IGFyZSBtaWNyb2NvZGVkIHRoZXJlIGFuZCB2ZXJ5IHNsb3cuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICp4KQogewogCWFsdGVybmF0aXZlX2lucHV0KEJBU0VfUFJFRkVUQ0gsCkBAIC03MDMsOCArNzk0LDExIEBACiAJCQkgICJyIiAoeCkpOwogfQogCi0vKiAzZG5vdyEgcHJlZmV0Y2ggdG8gZ2V0IGFuIGV4Y2x1c2l2ZSBjYWNoZSBsaW5lLiBVc2VmdWwgZm9yCi0gICBzcGlubG9ja3MgdG8gYXZvaWQgb25lIHN0YXRlIHRyYW5zaXRpb24gaW4gdGhlIGNhY2hlIGNvaGVyZW5jeSBwcm90b2NvbC4gKi8KKy8qCisgKiAzZG5vdyBwcmVmZXRjaCB0byBnZXQgYW4gZXhjbHVzaXZlIGNhY2hlIGxpbmUuCisgKiBVc2VmdWwgZm9yIHNwaW5sb2NrcyB0byBhdm9pZCBvbmUgc3RhdGUgdHJhbnNpdGlvbiBpbiB0aGUKKyAqIGNhY2hlIGNvaGVyZW5jeSBwcm90b2NvbDoKKyAqLwogc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICp4KQogewogCWFsdGVybmF0aXZlX2lucHV0KEJBU0VfUFJFRkVUQ0gsCkBAIC03MTMsMjEgKzgwNywyNSBAQAogCQkJICAiciIgKHgpKTsKIH0KIAotI2RlZmluZSBzcGluX2xvY2tfcHJlZmV0Y2goeCkJcHJlZmV0Y2h3KHgpCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrX3ByZWZldGNoKGNvbnN0IHZvaWQgKngpCit7CisJcHJlZmV0Y2h3KHgpOworfQorCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogLyoKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAzR0IgKGRlZmF1bHQpLgogICovCi0jZGVmaW5lIFRBU0tfU0laRQkoUEFHRV9PRkZTRVQpCi0jZGVmaW5lIFNUQUNLX1RPUAlUQVNLX1NJWkUKLSNkZWZpbmUgU1RBQ0tfVE9QX01BWAlTVEFDS19UT1AKKyNkZWZpbmUgVEFTS19TSVpFCQlQQUdFX09GRlNFVAorI2RlZmluZSBTVEFDS19UT1AJCVRBU0tfU0laRQorI2RlZmluZSBTVEFDS19UT1BfTUFYCQlTVEFDS19UT1AKIAotI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCQkJCQlcCi0JLnNwMCA9IHNpemVvZihpbml0X3N0YWNrKSArIChsb25nKSZpbml0X3N0YWNrLAkJCVwKLQkudm04Nl9pbmZvID0gTlVMTCwJCQkJCQlcCi0JLnN5c2VudGVyX2NzID0gX19LRVJORUxfQ1MsCQkJCQlcCi0JLmlvX2JpdG1hcF9wdHIgPSBOVUxMLAkJCQkJCVwKLQkuZnMgPSBfX0tFUk5FTF9QRVJDUFUsCQkJCQkJXAorI2RlZmluZSBJTklUX1RIUkVBRCAgewkJCQkJCQkgIFwKKwkuc3AwCQkJPSBzaXplb2YoaW5pdF9zdGFjaykgKyAobG9uZykmaW5pdF9zdGFjaywgXAorCS52bTg2X2luZm8JCT0gTlVMTCwJCQkJCSAgXAorCS5zeXNlbnRlcl9jcwkJPSBfX0tFUk5FTF9DUywJCQkJICBcCisJLmlvX2JpdG1hcF9wdHIJCT0gTlVMTCwJCQkJCSAgXAorCS5mcwkJCT0gX19LRVJORUxfUEVSQ1BVLAkJCSAgXAogfQogCiAvKgpAQCAtNzM2LDI5ICs4MzQsMTYgQEAKICAqIHBlcm1pc3Npb24gYml0bWFwLiBUaGUgZXh0cmEgYnl0ZSBtdXN0IGJlIGFsbCAxIGJpdHMsIGFuZCBtdXN0CiAgKiBiZSB3aXRoaW4gdGhlIGxpbWl0LgogICovCi0jZGVmaW5lIElOSVRfVFNTICB7CQkJCQkJCVwKLQkueDg2X3RzcyA9IHsJCQkJCQkJXAorI2RlZmluZSBJTklUX1RTUyAgewkJCQkJCQkgIFwKKwkueDg2X3RzcyA9IHsJCQkJCQkJICBcCiAJCS5zcDAJCT0gc2l6ZW9mKGluaXRfc3RhY2spICsgKGxvbmcpJmluaXRfc3RhY2ssIFwKLQkJLnNzMAkJPSBfX0tFUk5FTF9EUywJCQkJXAotCQkuc3MxCQk9IF9fS0VSTkVMX0NTLAkJCQlcCi0JCS5pb19iaXRtYXBfYmFzZQk9IElOVkFMSURfSU9fQklUTUFQX09GRlNFVCwJCVwKLQkgfSwJCQkJCQkJCVwKLQkuaW9fYml0bWFwCT0geyBbMCAuLi4gSU9fQklUTUFQX0xPTkdTXSA9IH4wIH0sCQlcCisJCS5zczAJCT0gX19LRVJORUxfRFMsCQkJCSAgXAorCQkuc3MxCQk9IF9fS0VSTkVMX0NTLAkJCQkgIFwKKwkJLmlvX2JpdG1hcF9iYXNlCT0gSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VULAkJICBcCisJIH0sCQkJCQkJCQkgIFwKKwkuaW9fYml0bWFwCQk9IHsgWzAgLi4uIElPX0JJVE1BUF9MT05HU10gPSB+MCB9LAkgIFwKIH0KIAotI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X2VpcCwgbmV3X2VzcCkgZG8gewkJXAotCV9fYXNtX18oIm1vdmwgJTAsJSVncyI6IDoiciIgKDApKTsJCQlcCi0JcmVncy0+ZnMgPSAwOwkJCQkJCVwKLQlzZXRfZnMoVVNFUl9EUyk7CQkJCQlcCi0JcmVncy0+ZHMgPSBfX1VTRVJfRFM7CQkJCQlcCi0JcmVncy0+ZXMgPSBfX1VTRVJfRFM7CQkJCQlcCi0JcmVncy0+c3MgPSBfX1VTRVJfRFM7CQkJCQlcCi0JcmVncy0+Y3MgPSBfX1VTRVJfQ1M7CQkJCQlcCi0JcmVncy0+aXAgPSBuZXdfZWlwOwkJCQkJXAotCXJlZ3MtPnNwID0gbmV3X2VzcDsJCQkJCVwKLX0gd2hpbGUgKDApCi0KLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAogI2RlZmluZSBUSFJFQURfU0laRV9MT05HUyAgICAgIChUSFJFQURfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZykpCkBAIC03ODUsMjQgKzg3MCwyNCBAQAogICAgICAgIF9fcmVnc19fIC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9KQogCi0jZGVmaW5lIEtTVEtfRVNQKHRhc2spICh0YXNrX3B0X3JlZ3ModGFzayktPnNwKQorI2RlZmluZSBLU1RLX0VTUCh0YXNrKQkJKHRhc2tfcHRfcmVncyh0YXNrKS0+c3ApCiAKICNlbHNlCiAvKgogICogVXNlciBzcGFjZSBwcm9jZXNzIHNpemUuIDQ3Yml0cyBtaW51cyBvbmUgZ3VhcmQgcGFnZS4KICAqLwotI2RlZmluZSBUQVNLX1NJWkU2NAkoMHg4MDAwMDAwMDAwMDBVTCAtIDQwOTYpCisjZGVmaW5lIFRBU0tfU0laRTY0CSgoMVVMIDw8IDQ3KSAtIFBBR0VfU0laRSkKIAogLyogVGhpcyBkZWNpZGVzIHdoZXJlIHRoZSBrZXJuZWwgd2lsbCBzZWFyY2ggZm9yIGEgZnJlZSBjaHVuayBvZiB2bQogICogc3BhY2UgZHVyaW5nIG1tYXAncy4KICAqLwotI2RlZmluZSBJQTMyX1BBR0VfT0ZGU0VUICgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0xJTUlUXzNHQikgPyBcCi0JCQkgICAweGMwMDAwMDAwIDogMHhGRkZGZTAwMCkKKyNkZWZpbmUgSUEzMl9QQUdFX09GRlNFVAkoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9MSU1JVF8zR0IpID8gXAorCQkJCQkweGMwMDAwMDAwIDogMHhGRkZGZTAwMCkKIAotI2RlZmluZSBUQVNLX1NJWkUgCQkodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgPyBcCi0JCQkJIElBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkU2NCkKLSNkZWZpbmUgVEFTS19TSVpFX09GKGNoaWxkKSAJKCh0ZXN0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX0lBMzIpKSA/IFwKLQkJCQkgIElBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkU2NCkKKyNkZWZpbmUgVEFTS19TSVpFCQkodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgPyBcCisJCQkJCUlBMzJfUEFHRV9PRkZTRVQgOiBUQVNLX1NJWkU2NCkKKyNkZWZpbmUgVEFTS19TSVpFX09GKGNoaWxkKQkoKHRlc3RfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfSUEzMikpID8gXAorCQkJCQlJQTMyX1BBR0VfT0ZGU0VUIDogVEFTS19TSVpFNjQpCiAKICNkZWZpbmUgU1RBQ0tfVE9QCQlUQVNLX1NJWkUKICNkZWZpbmUgU1RBQ0tfVE9QX01BWAkJVEFTS19TSVpFNjQKQEAgLTgxNSwzMyArOTAwLDMyIEBACiAJLng4Nl90c3Muc3AwID0gKHVuc2lnbmVkIGxvbmcpJmluaXRfc3RhY2sgKyBzaXplb2YoaW5pdF9zdGFjaykgXAogfQogCi0jZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcmlwLCBuZXdfcnNwKSBkbyB7IAkJCSAgICAgXAotCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWZzOyBtb3ZsICUwLCUlZXM7IG1vdmwgJTAsJSVkcyI6IDoiciIgKDApKTsgIFwKLQlsb2FkX2dzX2luZGV4KDApOwkJCQkJCSAgICAgXAotCShyZWdzKS0+aXAgPSAobmV3X3JpcCk7CQkJCQkJICAgICBcCi0JKHJlZ3MpLT5zcCA9IChuZXdfcnNwKTsJCQkJCQkgICAgIFwKLQl3cml0ZV9wZGEob2xkcnNwLCAobmV3X3JzcCkpOwkJCQkJICAgICBcCi0JKHJlZ3MpLT5jcyA9IF9fVVNFUl9DUzsJCQkJCQkgICAgIFwKLQkocmVncyktPnNzID0gX19VU0VSX0RTOwkJCQkJCSAgICAgXAotCShyZWdzKS0+ZmxhZ3MgPSAweDIwMDsJCQkJCQkgICAgIFwKLQlzZXRfZnMoVVNFUl9EUyk7CQkJCQkJICAgICBcCi19IHdoaWxlICgwKQotCiAvKgogICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuCiAgKiBXaGF0IGlzIHRoaXMgZ29vZCBmb3I/IGl0IHdpbGwgYmUgYWx3YXlzIHRoZSBzY2hlZHVsZXIgb3IgcmV0X2Zyb21fZm9yay4KICAqLwotI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModCkgKCoodW5zaWduZWQgbG9uZyAqKSgodCktPnRocmVhZC5zcCAtIDgpKQorI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModCkJKCoodW5zaWduZWQgbG9uZyAqKSgodCktPnRocmVhZC5zcCAtIDgpKQogCi0jZGVmaW5lIHRhc2tfcHRfcmVncyh0c2spICgoc3RydWN0IHB0X3JlZ3MgKikodHNrKS0+dGhyZWFkLnNwMCAtIDEpCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykgLTEgLyogc29ycnkuIGRvZXNuJ3Qgd29yayBmb3Igc3lzY2FsbC4gKi8KKyNkZWZpbmUgdGFza19wdF9yZWdzKHRzaykJKChzdHJ1Y3QgcHRfcmVncyAqKSh0c2spLT50aHJlYWQuc3AwIC0gMSkKKyNkZWZpbmUgS1NUS19FU1AodHNrKQkJLTEgLyogc29ycnkuIGRvZXNuJ3Qgd29yayBmb3Igc3lzY2FsbC4gKi8KICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAKLS8qIFRoaXMgZGVjaWRlcyB3aGVyZSB0aGUga2VybmVsIHdpbGwgc2VhcmNoIGZvciBhIGZyZWUgY2h1bmsgb2Ygdm0KK2V4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfaXAsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5ld19zcCk7CisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCiAgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLgogICovCiAjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRQkoUEFHRV9BTElHTihUQVNLX1NJWkUgLyAzKSkKIAotI2RlZmluZSBLU1RLX0VJUCh0YXNrKSAodGFza19wdF9yZWdzKHRhc2spLT5pcCkKKyNkZWZpbmUgS1NUS19FSVAodGFzaykJCSh0YXNrX3B0X3JlZ3ModGFzayktPmlwKQorCisvKiBHZXQvc2V0IGEgcHJvY2VzcycgYWJpbGl0eSB0byB1c2UgdGhlIHRpbWVzdGFtcCBjb3VudGVyIGluc3RydWN0aW9uICovCisjZGVmaW5lIEdFVF9UU0NfQ1RMKGFkcikJZ2V0X3RzY19tb2RlKChhZHIpKQorI2RlZmluZSBTRVRfVFNDX0NUTCh2YWwpCXNldF90c2NfbW9kZSgodmFsKSkKKworZXh0ZXJuIGludCBnZXRfdHNjX21vZGUodW5zaWduZWQgbG9uZyBhZHIpOworZXh0ZXJuIGludCBzZXRfdHNjX21vZGUodW5zaWduZWQgaW50IHZhbCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Byb3RvLmggYi9pbmNsdWRlL2FzbS14ODYvcHJvdG8uaAppbmRleCA2ODU2M2MwLi4xZTE3YmNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcHJvdG8uaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcHJvdG8uaApAQCAtNyw4ICs3LDYgQEAKIAogZXh0ZXJuIHZvaWQgZWFybHlfaWR0X2hhbmRsZXIodm9pZCk7CiAKLWV4dGVybiB2b2lkIGluaXRfbWVtb3J5X21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwotCiBleHRlcm4gdm9pZCBzeXN0ZW1fY2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIHN5c2NhbGxfaW5pdCh2b2lkKTsKIApAQCAtMjYsNyArMjQsNyBAQAogCiBsb25nIGRvX2FyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotI2RlZmluZSByb3VuZF91cCh4LHkpICgoKHgpICsgKHkpIC0gMSkgJiB+KCh5KS0xKSkKLSNkZWZpbmUgcm91bmRfZG93bih4LHkpICgoeCkgJiB+KCh5KS0xKSkKKyNkZWZpbmUgcm91bmRfdXAoeCwgeSkgKCgoeCkgKyAoeSkgLSAxKSAmIH4oKHkpIC0gMSkpCisjZGVmaW5lIHJvdW5kX2Rvd24oeCwgeSkgKCh4KSAmIH4oKHkpIC0gMSkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3B0cmFjZS1hYmkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UtYWJpLmgKaW5kZXggODFhOGVlNC4uZjIyNGViMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3B0cmFjZS1hYmkuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcHRyYWNlLWFiaS5oCkBAIC04OSwxMyArODksMTMgQEAKICovCiBzdHJ1Y3QgcHRyYWNlX2J0c19jb25maWcgewogCS8qIHJlcXVlc3RlZCBvciBhY3R1YWwgc2l6ZSBvZiBCVFMgYnVmZmVyIGluIGJ5dGVzICovCi0JdTMyIHNpemU7CisJX191MzIgc2l6ZTsKIAkvKiBiaXRtYXNrIG9mIGJlbG93IGZsYWdzICovCi0JdTMyIGZsYWdzOworCV9fdTMyIGZsYWdzOwogCS8qIGJ1ZmZlciBvdmVyZmxvdyBzaWduYWwgKi8KLQl1MzIgc2lnbmFsOworCV9fdTMyIHNpZ25hbDsKIAkvKiBhY3R1YWwgc2l6ZSBvZiBidHNfc3RydWN0IGluIGJ5dGVzICovCi0JdTMyIGJ0c19zaXplOworCV9fdTMyIGJ0c19zaXplOwogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS14ODYvcHRyYWNlLmgKaW5kZXggZDllMDRiNC4uMjRlYzA2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UuaApAQCAtMzYsMjMgKzM2LDIzIEBACiAjZWxzZSAvKiBfX0tFUk5FTF9fICovCiAKIHN0cnVjdCBwdF9yZWdzIHsKLQlsb25nIGJ4OwotCWxvbmcgY3g7Ci0JbG9uZyBkeDsKLQlsb25nIHNpOwotCWxvbmcgZGk7Ci0JbG9uZyBicDsKLQlsb25nIGF4OwotCWludCAgZHM7Ci0JaW50ICBlczsKLQlpbnQgIGZzOworCXVuc2lnbmVkIGxvbmcgYng7CisJdW5zaWduZWQgbG9uZyBjeDsKKwl1bnNpZ25lZCBsb25nIGR4OworCXVuc2lnbmVkIGxvbmcgc2k7CisJdW5zaWduZWQgbG9uZyBkaTsKKwl1bnNpZ25lZCBsb25nIGJwOworCXVuc2lnbmVkIGxvbmcgYXg7CisJdW5zaWduZWQgbG9uZyBkczsKKwl1bnNpZ25lZCBsb25nIGVzOworCXVuc2lnbmVkIGxvbmcgZnM7CiAJLyogaW50ICBnczsgKi8KLQlsb25nIG9yaWdfYXg7Ci0JbG9uZyBpcDsKLQlpbnQgIGNzOwotCWxvbmcgZmxhZ3M7Ci0JbG9uZyBzcDsKLQlpbnQgIHNzOworCXVuc2lnbmVkIGxvbmcgb3JpZ19heDsKKwl1bnNpZ25lZCBsb25nIGlwOworCXVuc2lnbmVkIGxvbmcgY3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNwOworCXVuc2lnbmVkIGxvbmcgc3M7CiB9OwogCiAjaW5jbHVkZSA8YXNtL3ZtODYuaD4KQEAgLTE0MCwxMiArMTQwLDE2IEBACiBjb252ZXJ0X2lwX3RvX2xpbmVhcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi1leHRlcm4gdm9pZCBzZW5kX3NpZ3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZXJyb3JfY29kZSk7CitleHRlcm4gdm9pZCBzZW5kX3NpZ3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJIGludCBlcnJvcl9jb2RlKTsKICNlbHNlCiB2b2lkIHNpZ25hbF9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCBfX3VzZXIgKmZyYW1lLCBjaGFyICp3aGVyZSk7CiAjZW5kaWYKIAotI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKSAoKHJlZ3MpLT5heCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWdzX3JldHVybl92YWx1ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+YXg7Cit9CiAKIC8qCiAgKiB1c2VyX21vZGVfdm0ocmVncykgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmVnaXN0ZXIgc2V0IGNhbWUgZnJvbSB1c2VyIG1vZGUuCkBAIC0xNjYsOCArMTcwLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IHVzZXJfbW9kZV92bShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JcmV0dXJuICgocmVncy0+Y3MgJiBTRUdNRU5UX1JQTF9NQVNLKSB8Ci0JCShyZWdzLT5mbGFncyAmIFZNX01BU0spKSA+PSBVU0VSX1JQTDsKKwlyZXR1cm4gKChyZWdzLT5jcyAmIFNFR01FTlRfUlBMX01BU0spIHwgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spKSA+PQorCQlVU0VSX1JQTDsKICNlbHNlCiAJcmV0dXJuIHVzZXJfbW9kZShyZWdzKTsKICNlbmRpZgpAQCAtMTc2LDcgKzE4MCw3IEBACiBzdGF0aWMgaW5saW5lIGludCB2ODA4Nl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKLQlyZXR1cm4gKHJlZ3MtPmZsYWdzICYgVk1fTUFTSyk7CisJcmV0dXJuIChyZWdzLT5mbGFncyAmIFg4Nl9WTV9NQVNLKTsKICNlbHNlCiAJcmV0dXJuIDA7CS8qIE5vIFY4NiBtb2RlIHN1cHBvcnQgaW4gbG9uZyBtb2RlICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9yZWJvb3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9yZWJvb3QuaAppbmRleCBlOWUzZmZjLi42YjUyMzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcmVib290LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3JlYm9vdC5oCkBAIC0zLDggKzMsNyBAQAogCiBzdHJ1Y3QgcHRfcmVnczsKIAotc3RydWN0IG1hY2hpbmVfb3BzCi17CitzdHJ1Y3QgbWFjaGluZV9vcHMgewogCXZvaWQgKCpyZXN0YXJ0KShjaGFyICpjbWQpOwogCXZvaWQgKCpoYWx0KSh2b2lkKTsKIAl2b2lkICgqcG93ZXJfb2ZmKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9yZXN1bWUtdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9yZXN1bWUtdHJhY2UuaAppbmRleCA0NmY3MjViLi4yNTU3NTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcmVzdW1lLXRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3Jlc3VtZS10cmFjZS5oCkBAIC0zLDE2ICszLDE3IEBACiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CiAKLSNkZWZpbmUgVFJBQ0VfUkVTVU1FKHVzZXIpIGRvIHsJCQkJCVwKKyNkZWZpbmUgVFJBQ0VfUkVTVU1FKHVzZXIpCQkJCQlcCitkbyB7CQkJCQkJCQlcCiAJaWYgKHBtX3RyYWNlX2VuYWJsZWQpIHsJCQkJCVwKIAkJdm9pZCAqdHJhY2VkYXRhOwkJCQlcCiAJCWFzbSB2b2xhdGlsZShfQVNNX01PVl9VTCAiICQxZiwlMFxuIgkJXAotCQkJIi5zZWN0aW9uIC50cmFjZWRhdGEsXCJhXCJcbiIJCVwKLQkJCSIxOlx0LndvcmQgJWMxXG5cdCIJCQlcCi0JCQlfQVNNX1BUUiAiICVjMlxuIgkJCVwKLQkJCSIucHJldmlvdXMiCQkJCVwKLQkJCToiPXIiICh0cmFjZWRhdGEpCQkJXAotCQkJOiAiaSIgKF9fTElORV9fKSwgImkiIChfX0ZJTEVfXykpOwlcCisJCQkgICAgICIuc2VjdGlvbiAudHJhY2VkYXRhLFwiYVwiXG4iCVwKKwkJCSAgICAgIjE6XHQud29yZCAlYzFcblx0IgkJXAorCQkJICAgICBfQVNNX1BUUiAiICVjMlxuIgkJCVwKKwkJCSAgICAgIi5wcmV2aW91cyIJCQlcCisJCQkgICAgIDoiPXIiICh0cmFjZWRhdGEpCQkJXAorCQkJICAgICA6ICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSk7CVwKIAkJZ2VuZXJhdGVfcmVzdW1lX3RyYWNlKHRyYWNlZGF0YSwgdXNlcik7CQlcCiAJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3Jpby5oIGIvaW5jbHVkZS9hc20teDg2L3Jpby5oCmluZGV4IDk3Y2RjYzkuLjM0NTFjNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9yaW8uaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcmlvLmgKQEAgLTExLDUzICsxMSw1MyBAQAogI2RlZmluZSBSSU9fVEFCTEVfVkVSU0lPTgkzCiAKIHN0cnVjdCByaW9fdGFibGVfaGRyIHsKLQl1OCB2ZXJzaW9uOyAgICAgIC8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgICovCi0JdTggbnVtX3NjYWxfZGV2OyAvKiAjIG9mIFNjYWxhYmlsaXR5IGRldmljZXMgICAgICAgICAgICAgICAqLwotCXU4IG51bV9yaW9fZGV2OyAgLyogIyBvZiBSSU8gSS9PIGRldmljZXMgICAgICAgICAgICAgICAgICAgKi8KKwl1OCB2ZXJzaW9uOwkJLyogVmVyc2lvbiBudW1iZXIgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSAgKi8KKwl1OCBudW1fc2NhbF9kZXY7CS8qICMgb2YgU2NhbGFiaWxpdHkgZGV2aWNlcyAgICAgICAgICAgICAgICovCisJdTggbnVtX3Jpb19kZXY7CQkvKiAjIG9mIFJJTyBJL08gZGV2aWNlcyAgICAgICAgICAgICAgICAgICAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHNjYWxfZGV0YWlsIHsKLQl1OCBub2RlX2lkOyAgICAgIC8qIFNjYWxhYmlsaXR5IE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICovCi0JdTMyIENCQVI7ICAgICAgICAvKiBBZGRyZXNzIG9mIDFNQiByZWdpc3RlciBzcGFjZSAgICAgICAgICAqLwotCXU4IHBvcnQwbm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KLQl1OCBwb3J0MHBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgICovCi0JICAgICAgICAgICAgICAgICAvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IHBvcnQxbm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRiA9IE5vbmUgKi8KLQl1OCBwb3J0MXBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgICovCi0JICAgICAgICAgICAgICAgICAvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IHBvcnQybm9kZTsgICAgLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRiA9IE5vbmUgKi8KLQl1OCBwb3J0MnBvcnQ7ICAgIC8qIFBvcnQgbnVtIHBvcnQgY29ubmVjdGVkIHRvOiAwLDEsMiwgb3IgICovCi0JICAgICAgICAgICAgICAgICAvKiAweEZGPU5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IGNoYXNzaXNfbnVtOyAgLyogMSBiYXNlZCBDaGFzc2lzIG51bWJlciAoMSA9IGJvb3Qgbm9kZSkgKi8KKwl1OCBub2RlX2lkOwkJLyogU2NhbGFiaWxpdHkgTm9kZSBJRCAgICAgICAgICAgICAgICAgICAgKi8KKwl1MzIgQ0JBUjsJCS8qIEFkZHJlc3Mgb2YgMU1CIHJlZ2lzdGVyIHNwYWNlICAgICAgICAgICovCisJdTggcG9ydDBub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KKwl1OCBwb3J0MHBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLworCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggcG9ydDFub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRiA9IE5vbmUgKi8KKwl1OCBwb3J0MXBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLworCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggcG9ydDJub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRiA9IE5vbmUgKi8KKwl1OCBwb3J0MnBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLworCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggY2hhc3Npc19udW07CQkvKiAxIGJhc2VkIENoYXNzaXMgbnVtYmVyICgxID0gYm9vdCBub2RlKSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHJpb19kZXRhaWwgewotCXU4IG5vZGVfaWQ7ICAgICAgLyogUklPIE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1MzIgQkJBUjsgICAgICAgIC8qIEFkZHJlc3Mgb2YgMU1CIHJlZ2lzdGVyIHNwYWNlICAgICAgICAgICovCi0JdTggdHlwZTsgICAgICAgICAvKiBUeXBlIG9mIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IG93bmVyX2lkOyAgICAgLyogTm9kZSBJRCBvZiBIdXJyaWNhbmUgdGhhdCBvd25zIHRoaXMgICAgKi8KLQkgICAgICAgICAgICAgICAgIC8qIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdTggcG9ydDBub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAqLwotCXU4IHBvcnQwcG9ydDsgICAgLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KLQkgICAgICAgICAgICAgICAgIC8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdTggcG9ydDFub2RlOyAgICAvKiBOb2RlIElEIHBvcnQgY29ubmVjdGVkIHRvOiAweEZGPU5vbmUgICAqLwotCXU4IHBvcnQxcG9ydDsgICAgLyogUG9ydCBudW0gcG9ydCBjb25uZWN0ZWQgdG86IDAsMSwyLCBvciAgKi8KLQkgICAgICAgICAgICAgICAgIC8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdTggZmlyc3Rfc2xvdDsgICAvKiBMb3dlc3Qgc2xvdCBudW1iZXIgYmVsb3cgdGhpcyBDYWxnYXJ5ICAqLwotCXU4IHN0YXR1czsgICAgICAgLyogQml0IDAgPSAxIDogdGhlIFhBUElDIGlzIHVzZWQgICAgICAgICAgKi8KLQkgICAgICAgICAgICAgICAgIC8qICAgICAgID0gMCA6IHRoZSBYQVBJQyBpcyBub3QgdXNlZCwgaWU6ICovCi0JICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgIGludHMgZndkZWQgdG8gYW5vdGhlciBYQVBJQyAqLwotCSAgICAgICAgICAgICAgICAgLyogICAgICAgICAgIEJpdHMxOjcgUmVzZXJ2ZWQgICAgICAgICAgICAgKi8KLQl1OCBXUF9pbmRleDsgICAgIC8qIGluc3RhbmNlIGluZGV4IC0gbG93ZXIgb25lcyBoYXZlICAgICAgICovCi0JICAgICAgICAgICAgICAgICAvKiAgICAgbG93ZXIgc2xvdCBudW1iZXJzL1BDSSBidXMgbnVtYmVycyAqLwotCXU4IGNoYXNzaXNfbnVtOyAgLyogMSBiYXNlZCBDaGFzc2lzIG51bWJlciAgICAgICAgICAgICAgICAgKi8KKwl1OCBub2RlX2lkOwkJLyogUklPIE5vZGUgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1MzIgQkJBUjsJCS8qIEFkZHJlc3Mgb2YgMU1CIHJlZ2lzdGVyIHNwYWNlICAgICAgICAgICovCisJdTggdHlwZTsJCS8qIFR5cGUgb2YgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggb3duZXJfaWQ7CQkvKiBOb2RlIElEIG9mIEh1cnJpY2FuZSB0aGF0IG93bnMgdGhpcyAgICAqLworCQkJCS8qIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggcG9ydDBub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KKwl1OCBwb3J0MHBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLworCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggcG9ydDFub2RlOwkJLyogTm9kZSBJRCBwb3J0IGNvbm5lY3RlZCB0bzogMHhGRj1Ob25lICAgKi8KKwl1OCBwb3J0MXBvcnQ7CQkvKiBQb3J0IG51bSBwb3J0IGNvbm5lY3RlZCB0bzogMCwxLDIsIG9yICAqLworCQkJCS8qIDB4RkY9Tm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTggZmlyc3Rfc2xvdDsJCS8qIExvd2VzdCBzbG90IG51bWJlciBiZWxvdyB0aGlzIENhbGdhcnkgICovCisJdTggc3RhdHVzOwkJLyogQml0IDAgPSAxIDogdGhlIFhBUElDIGlzIHVzZWQgICAgICAgICAgKi8KKwkJCQkvKiAgICAgICA9IDAgOiB0aGUgWEFQSUMgaXMgbm90IHVzZWQsIGllOiAqLworCQkJCS8qICAgICAgICAgICAgaW50cyBmd2RlZCB0byBhbm90aGVyIFhBUElDICovCisJCQkJLyogICAgICAgICAgIEJpdHMxOjcgUmVzZXJ2ZWQgICAgICAgICAgICAgKi8KKwl1OCBXUF9pbmRleDsJCS8qIGluc3RhbmNlIGluZGV4IC0gbG93ZXIgb25lcyBoYXZlICAgICAgICovCisJCQkJLyogICAgIGxvd2VyIHNsb3QgbnVtYmVycy9QQ0kgYnVzIG51bWJlcnMgKi8KKwl1OCBjaGFzc2lzX251bTsJCS8qIDEgYmFzZWQgQ2hhc3NpcyBudW1iZXIgICAgICAgICAgICAgICAgICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBlbnVtIHsKLQlIVVJSX1NDQUxBQklMVFkJPSAwLCAgLyogSHVycmljYW5lIFNjYWxhYmlsaXR5IGluZm8gKi8KLQlIVVJSX1JJT0lCCT0gMiwgIC8qIEh1cnJpY2FuZSBSSU9JQiBpbmZvICAgICAgICovCi0JQ09NUEFUX0NBTEdBUlkJPSA0LCAgLyogQ29tcGF0aWJpbGl0eSBDYWxnYXJ5ICAgICAgKi8KLQlBTFRfQ0FMR0FSWQk9IDUsICAvKiBTZWNvbmQgUGxhbmFyIENhbGdhcnkgICAgICAqLworCUhVUlJfU0NBTEFCSUxUWQk9IDAsCS8qIEh1cnJpY2FuZSBTY2FsYWJpbGl0eSBpbmZvICovCisJSFVSUl9SSU9JQgk9IDIsCS8qIEh1cnJpY2FuZSBSSU9JQiBpbmZvICAgICAgICovCisJQ09NUEFUX0NBTEdBUlkJPSA0LAkvKiBDb21wYXRpYmlsaXR5IENhbGdhcnkgICAgICAqLworCUFMVF9DQUxHQVJZCT0gNSwJLyogU2Vjb25kIFBsYW5hciBDYWxnYXJ5ICAgICAgKi8KIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcndzZW0uaCBiL2luY2x1ZGUvYXNtLXg4Ni9yd3NlbS5oCmluZGV4IDUyMGEzNzkuLjc1MGYyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9yd3NlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9yd3NlbS5oCkBAIC01NiwxNCArNTYsMTYgQEAKIC8qCiAgKiB0aGUgc2VtYXBob3JlIGRlZmluaXRpb24KICAqLwotc3RydWN0IHJ3X3NlbWFwaG9yZSB7Ci0Jc2lnbmVkIGxvbmcJCWNvdW50OworCiAjZGVmaW5lIFJXU0VNX1VOTE9DS0VEX1ZBTFVFCQkweDAwMDAwMDAwCiAjZGVmaW5lIFJXU0VNX0FDVElWRV9CSUFTCQkweDAwMDAwMDAxCiAjZGVmaW5lIFJXU0VNX0FDVElWRV9NQVNLCQkweDAwMDBmZmZmCiAjZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJKC0weDAwMDEwMDAwKQogI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUwogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQorCitzdHJ1Y3Qgcndfc2VtYXBob3JlIHsKKwlzaWduZWQgbG9uZwkJY291bnQ7CiAJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCkBAIC03OCwxMSArODAsMTMgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCi17IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkud2FpdF9sb2NrKSwgXAotICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBfX1JXU0VNX0RFUF9NQVBfSU5JVChuYW1lKSB9CisjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkJCQkJXAorewkJCQkJCQkJXAorCVJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkud2FpdF9sb2NrKSwgXAorCUxJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIF9fUldTRU1fREVQX01BUF9JTklUKG5hbWUpIFwKK30KIAotI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpIFwKKyNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKQkJCQkJXAogCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKIAogZXh0ZXJuIHZvaWQgX19pbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTEwMCwxNiArMTA0LDE2IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIjIGJlZ2lubmluZyBkb3duX3JlYWRcblx0IgotTE9DS19QUkVGSVgJIiAgaW5jbCAgICAgICglJWVheClcblx0IiAvKiBhZGRzIDB4MDAwMDAwMDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwotCQkiICBqbnMgICAgICAgIDFmXG4iCi0JCSIgIGNhbGwgY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkXG4iCi0JCSIxOlxuXHQiCi0JCSIjIGVuZGluZyBkb3duX3JlYWRcblx0IgotCQk6ICIrbSIgKHNlbS0+Y291bnQpCi0JCTogImEiIChzZW0pCi0JCTogIm1lbW9yeSIsICJjYyIpOworCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgZG93bl9yZWFkXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICBpbmNsICAgICAgKCUlZWF4KVxuXHQiCisJCSAgICAgLyogYWRkcyAweDAwMDAwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJICAgICAiICBqbnMgICAgICAgIDFmXG4iCisJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWRcbiIKKwkJICAgICAiMTpcblx0IgorCQkgICAgICIjIGVuZGluZyBkb3duX3JlYWRcblx0IgorCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKKwkJICAgICA6ICJhIiAoc2VtKQorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCiAvKgpAQCAtMTE4LDIxICsxMjIsMjAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewogCV9fczMyIHJlc3VsdCwgdG1wOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIyBiZWdpbm5pbmcgX19kb3duX3JlYWRfdHJ5bG9ja1xuXHQiCi0JCSIgIG1vdmwgICAgICAlMCwlMVxuXHQiCi0JCSIxOlxuXHQiCi0JCSIgIG1vdmwJICAgICAlMSwlMlxuXHQiCi0JCSIgIGFkZGwgICAgICAlMywlMlxuXHQiCi0JCSIgIGpsZQkgICAgIDJmXG5cdCIKLUxPQ0tfUFJFRklYCSIgIGNtcHhjaGdsICAlMiwlMFxuXHQiCi0JCSIgIGpuegkgICAgIDFiXG5cdCIKLQkJIjI6XG5cdCIKLQkJIiMgZW5kaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgotCQk6ICIrbSIgKHNlbS0+Y291bnQpLCAiPSZhIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKLQkJOiAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCi0JCTogIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiByZXN1bHQ+PTAgPyAxIDogMDsKKwlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgorCQkgICAgICIgIG1vdmwgICAgICAlMCwlMVxuXHQiCisJCSAgICAgIjE6XG5cdCIKKwkJICAgICAiICBtb3ZsCSAgICAgJTEsJTJcblx0IgorCQkgICAgICIgIGFkZGwgICAgICAlMywlMlxuXHQiCisJCSAgICAgIiAgamxlCSAgICAgMmZcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIGNtcHhjaGdsICAlMiwlMFxuXHQiCisJCSAgICAgIiAgam56CSAgICAgMWJcblx0IgorCQkgICAgICIyOlxuXHQiCisJCSAgICAgIiMgZW5kaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgorCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9JmEiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCQkgICAgIDogImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworCXJldHVybiByZXN1bHQgPj0gMCA/IDEgOiAwOwogfQogCiAvKgpAQCAtMTQzLDE3ICsxNDYsMTggQEAKIAlpbnQgdG1wOwogCiAJdG1wID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKLUxPQ0tfUFJFRklYCSIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCi0JCSIgIHRlc3RsICAgICAlJWVkeCwlJWVkeFxuXHQiIC8qIHdhcyB0aGUgY291bnQgMCBiZWZvcmU/ICovCi0JCSIgIGp6ICAgICAgICAxZlxuIgotCQkiICBjYWxsIGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWRcbiIKLQkJIjE6XG4iCi0JCSIjIGVuZGluZyBkb3duX3dyaXRlIgotCQk6ICIrbSIgKHNlbS0+Y291bnQpLCAiPWQiICh0bXApCi0JCTogImEiIChzZW0pLCAiMSIgKHRtcCkKLQkJOiAibWVtb3J5IiwgImNjIik7CisJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCisJCSAgICAgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCisJCSAgICAgIiAgdGVzdGwgICAgICUlZWR4LCUlZWR4XG5cdCIKKwkJICAgICAvKiB3YXMgdGhlIGNvdW50IDAgYmVmb3JlPyAqLworCQkgICAgICIgIGp6ICAgICAgICAxZlxuIgorCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duX3dyaXRlX2ZhaWxlZFxuIgorCQkgICAgICIxOlxuIgorCQkgICAgICIjIGVuZGluZyBkb3duX3dyaXRlIgorCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKKwkJICAgICA6ICJhIiAoc2VtKSwgIjEiICh0bXApCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQpAQCAtMTY3LDcgKzE3MSw3IEBACiBzdGF0aWMgaW5saW5lIGludCBfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7CiAJc2lnbmVkIGxvbmcgcmV0ID0gY21weGNoZygmc2VtLT5jb3VudCwKLQkJCQkgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCAKKwkJCQkgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAogCQkJCSAgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpOwogCWlmIChyZXQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpCiAJCXJldHVybiAxOwpAQCAtMTgwLDE2ICsxODQsMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewogCV9fczMyIHRtcCA9IC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIyBiZWdpbm5pbmcgX191cF9yZWFkXG5cdCIKLUxPQ0tfUFJFRklYCSIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIgLyogc3VidHJhY3RzIDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwotCQkiICBqbnMgICAgICAgIDFmXG5cdCIKLQkJIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKLQkJIjE6XG4iCi0JCSIjIGVuZGluZyBfX3VwX3JlYWRcbiIKLQkJOiAiK20iIChzZW0tPmNvdW50KSwgIj1kIiAodG1wKQotCQk6ICJhIiAoc2VtKSwgIjEiICh0bXApCi0JCTogIm1lbW9yeSIsICJjYyIpOworCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX191cF9yZWFkXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCisJCSAgICAgLyogc3VidHJhY3RzIDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLworCQkgICAgICIgIGpucyAgICAgICAgMWZcblx0IgorCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iCisJCSAgICAgIjE6XG4iCisJCSAgICAgIiMgZW5kaW5nIF9fdXBfcmVhZFxuIgorCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKKwkJICAgICA6ICJhIiAoc2VtKSwgIjEiICh0bXApCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKIC8qCkBAIC0xOTcsMTcgKzIwMSwxOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIjIGJlZ2lubmluZyBfX3VwX3dyaXRlXG5cdCIKLQkJIiAgbW92bCAgICAgICUyLCUlZWR4XG5cdCIKLUxPQ0tfUFJFRklYCSIgIHhhZGRsICAgICAlJWVkeCwoJSVlYXgpXG5cdCIgLyogdHJpZXMgdG8gdHJhbnNpdGlvbiAweGZmZmYwMDAxIC0+IDB4MDAwMDAwMDAgKi8KLQkJIiAganogICAgICAgMWZcbiIKLQkJIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKLQkJIjE6XG5cdCIKLQkJIiMgZW5kaW5nIF9fdXBfd3JpdGVcbiIKLQkJOiAiK20iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCi0JCTogIm1lbW9yeSIsICJjYyIsICJlZHgiKTsKKwlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgorCQkgICAgICIgIG1vdmwgICAgICAlMiwlJWVkeFxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZGwgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIC8qIHRyaWVzIHRvIHRyYW5zaXRpb24KKwkJCTB4ZmZmZjAwMDEgLT4gMHgwMDAwMDAwMCAqLworCQkgICAgICIgIGp6ICAgICAgIDFmXG4iCisJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKKwkJICAgICAiMTpcblx0IgorCQkgICAgICIjIGVuZGluZyBfX3VwX3dyaXRlXG4iCisJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQorCQkgICAgIDogImEiIChzZW0pLCAiaSIgKC1SV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiZWR4Iik7CiB9CiAKIC8qCkBAIC0yMTUsMTYgKzIyMCwxNiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIyBiZWdpbm5pbmcgX19kb3duZ3JhZGVfd3JpdGVcblx0IgotTE9DS19QUkVGSVgJIiAgYWRkbCAgICAgICUyLCglJWVheClcblx0IiAvKiB0cmFuc2l0aW9ucyAweFpaWlowMDAxIC0+IDB4WVlZWTAwMDEgKi8KLQkJIiAgam5zICAgICAgIDFmXG5cdCIKLQkJIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25ncmFkZV93YWtlXG4iCi0JCSIxOlxuXHQiCi0JCSIjIGVuZGluZyBfX2Rvd25ncmFkZV93cml0ZVxuIgotCQk6ICIrbSIgKHNlbS0+Y291bnQpCi0JCTogImEiIChzZW0pLCAiaSIgKC1SV1NFTV9XQUlUSU5HX0JJQVMpCi0JCTogIm1lbW9yeSIsICJjYyIpOworCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgX19kb3duZ3JhZGVfd3JpdGVcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIGFkZGwgICAgICAlMiwoJSVlYXgpXG5cdCIKKwkJICAgICAvKiB0cmFuc2l0aW9ucyAweFpaWlowMDAxIC0+IDB4WVlZWTAwMDEgKi8KKwkJICAgICAiICBqbnMgICAgICAgMWZcblx0IgorCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV9kb3duZ3JhZGVfd2FrZVxuIgorCQkgICAgICIxOlxuXHQiCisJCSAgICAgIiMgZW5kaW5nIF9fZG93bmdyYWRlX3dyaXRlXG4iCisJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KQorCQkgICAgIDogImEiIChzZW0pLCAiaSIgKC1SV1NFTV9XQUlUSU5HX0JJQVMpCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKIC8qCkBAIC0yMzIsMTAgKzIzNyw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotTE9DS19QUkVGSVgJImFkZGwgJTEsJTAiCi0JCTogIittIiAoc2VtLT5jb3VudCkKLQkJOiAiaXIiIChkZWx0YSkpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCisJCSAgICAgOiAiaXIiIChkZWx0YSkpOwogfQogCiAvKgpAQCAtMjQ1LDEyICsyNDksMTEgQEAKIHsKIAlpbnQgdG1wID0gZGVsdGE7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLUxPQ0tfUFJFRklYCSJ4YWRkICUwLCUxIgotCQk6ICIrciIgKHRtcCksICIrbSIgKHNlbS0+Y291bnQpCi0JCTogOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkICUwLCUxIgorCQkgICAgIDogIityIiAodG1wKSwgIittIiAoc2VtLT5jb3VudCkKKwkJICAgICA6IDogIm1lbW9yeSIpOwogCi0JcmV0dXJuIHRtcCtkZWx0YTsKKwlyZXR1cm4gdG1wICsgZGVsdGE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ3c2VtX2lzX2xvY2tlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zY2F0dGVybGlzdC5oCmluZGV4IGQxM2MxOTcuLmMwNDMyMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zY2F0dGVybGlzdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zY2F0dGVybGlzdC5oCkBAIC0xMSw5ICsxMSw3IEBACiAJdW5zaWduZWQgaW50CW9mZnNldDsKIAl1bnNpZ25lZCBpbnQJbGVuZ3RoOwogCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCXVuc2lnbmVkIGludAlkbWFfbGVuZ3RoOwotI2VuZGlmCiB9OwogCiAjZGVmaW5lIEFSQ0hfSEFTX1NHX0NIQUlOCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20teDg2L3NlZ21lbnQuaAppbmRleCAyM2YwNTM1Li5lZDUxMzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc2VnbWVudC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zZWdtZW50LmgKQEAgLTE5MSwxMyArMTkxLDE0IEBACiAjZGVmaW5lIFNFR01FTlRfVElfTUFTSwkJMHg0CiAKICNkZWZpbmUgSURUX0VOVFJJRVMgMjU2CisjZGVmaW5lIE5VTV9FWENFUFRJT05fVkVDVE9SUyAzMgogI2RlZmluZSBHRFRfU0laRSAoR0RUX0VOVFJJRVMgKiA4KQogI2RlZmluZSBHRFRfRU5UUllfVExTX0VOVFJJRVMgMwogI2RlZmluZSBUTFNfU0laRSAoR0RUX0VOVFJZX1RMU19FTlRSSUVTICogOCkKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gY29uc3QgY2hhciBlYXJseV9pZHRfaGFuZGxlcnNbSURUX0VOVFJJRVNdWzEwXTsKK2V4dGVybiBjb25zdCBjaGFyIGVhcmx5X2lkdF9oYW5kbGVyc1tOVU1fRVhDRVBUSU9OX1ZFQ1RPUlNdWzEwXTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zZW1hcGhvcmUuaAppbmRleCA1NzJjMGI2Li5kOWIyMDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3NlbWFwaG9yZS5oCkBAIC0xLDUgKzEgQEAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgInNlbWFwaG9yZV8zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAic2VtYXBob3JlXzY0LmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zZW1hcGhvcmVfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zZW1hcGhvcmVfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5NmQzOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc2VtYXBob3JlXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotI2lmbmRlZiBfSTM4Nl9TRU1BUEhPUkVfSAotI2RlZmluZSBfSTM4Nl9TRU1BUEhPUkVfSAotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogU01QLSBhbmQgaW50ZXJydXB0LXNhZmUgc2VtYXBob3Jlcy4uCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk2IExpbnVzIFRvcnZhbGRzCi0gKgotICogTW9kaWZpZWQgMTk5Ni0xMi0yMyBieSBEYXZlIEdyb3RoZSA8ZGF2ZUBnY29tLmNvbT4gdG8gZml4IGJ1Z3MgaW4KLSAqICAgICAgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIGNvZGUgYW5kIHRvIG1ha2Ugc2VtYXBob3JlIHdhaXRzCi0gKiAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGlibGUgc28gdGhhdCBwcm9jZXNzZXMgd2FpdGluZyBvbgotICogICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVzIGNhbiBiZSBraWxsZWQuCi0gKiBNb2RpZmllZCAxOTk5LTAyLTE0IGJ5IEFuZHJlYSBBcmNhbmdlbGksIHNwbGl0IHRoZSBzY2hlZC5jIGhlbHBlcgotICoJCSAgICAgICBmdW5jdGlvbnMgaW4gYXNtL3NlbXBhaG9yZS1oZWxwZXIuaCB3aGlsZSBmaXhpbmcgYQotICoJCSAgICAgICBwb3RlbnRpYWwgYW5kIHN1YnRsZSByYWNlIGRpc2NvdmVyZWQgYnkgVWxyaWNoIFNjaG1pZAotICoJCSAgICAgICBpbiBkb3duX2ludGVycnVwdGlibGUoKS4gU2luY2UgSSBzdGFydGVkIHRvIHBsYXkgaGVyZSBJCi0gKgkJICAgICAgIGFsc28gaW1wbGVtZW50ZWQgdGhlIGB0cnlsb2NrJyBzZW1hcGhvcmUgb3BlcmF0aW9uLgotICogICAgICAgICAgMTk5OS0wNy0wMiBBcnR1ciBTa2F3aW5hIDxza2F3aW5hQGdlb2NpdGllcy5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplZCAiMChlY3gpIiAtPiAiKGVjeCkiICh0aGUgYXNzZW1ibGVyIGRvZXMgbm90Ci0gKiAgICAgICAgICAgICAgICAgICAgIGRvIHRoaXMpLiBDaGFuZ2VkIGNhbGxpbmcgc2VxdWVuY2VzIGZyb20gcHVzaC9qbXAgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgdHJhZGl0aW9uYWwgY2FsbC9yZXQuCi0gKiBNb2RpZmllZCAyMDAxLTAxLTAxIEFuZHJlYXMgRnJhbmNrIDxhZnJhbmNrQGdteC5kZT4KLSAqCQkgICAgICAgU29tZSBoYWNrcyB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHJlY2VudAotICoJCSAgICAgICBHQ0Mgc25hcHNob3RzLCB0byBhdm9pZCBzdGFjayBjb3JydXB0aW9uIHdoZW4gY29tcGlsaW5nCi0gKgkJICAgICAgIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIuIEl0J3Mgbm90IHN1cmUgaWYgdGhpcyB3aWxsCi0gKgkJICAgICAgIGJlIGZpeGVkIGluIEdDQywgYXMgb3VyIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIHdhcyBhCi0gKgkJICAgICAgIGJpdCBkdWJpb3VzLgotICoKLSAqIElmIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSBhbiBhbmFseXNpcyBvZiB0aGlzIGltcGxlbWVudGF0aW9uLCBwbGVhc2UKLSAqIGZ0cCB0byBnY29tLmNvbSBhbmQgZG93bmxvYWQgdGhlIGZpbGUKLSAqIC9wdWIvbGludXgvc3JjL3NlbWFwaG9yZS9zZW1hcGhvcmUtMi4wLjI0LnRhci5nei4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KLXN0cnVjdCBzZW1hcGhvcmUgewotCWF0b21pY190IGNvdW50OwotCWludCBzbGVlcGVyczsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwotfTsKLQotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsIG4pCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLnNsZWVwZXJzCT0gMCwJCQkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0vKgotICoJKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlKV9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCgqc2VtKSx2YWwpOwotICoKLSAqIGknZCByYXRoZXIgdXNlIHRoZSBtb3JlIGZsZXhpYmxlIGluaXRpYWxpemF0aW9uIGFib3ZlLCBidXQgc2FkbHkKLSAqIEdDQyAyLjcuMi4zIGVtaXRzIGEgYm9ndXMgd2FybmluZy4gRUdDUyBkb2Vzbid0LiBPaCB3ZWxsLgotICovCi0JYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKLQlzZW0tPnNsZWVwZXJzID0gMDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAwKTsKLX0KLQotZXh0ZXJuIGFzbXJlZ3Bhcm0gdm9pZCBfX2Rvd25fZmFpbGVkKGF0b21pY190ICpjb3VudF9wdHIpOwotZXh0ZXJuIGFzbXJlZ3Bhcm0gaW50ICBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUoYXRvbWljX3QgKmNvdW50X3B0cik7Ci1leHRlcm4gYXNtcmVncGFybSBpbnQgIF9fZG93bl9mYWlsZWRfdHJ5bG9jayhhdG9taWNfdCAqY291bnRfcHRyKTsKLWV4dGVybiBhc21yZWdwYXJtIHZvaWQgX191cF93YWtldXAoYXRvbWljX3QgKmNvdW50X3B0cik7Ci0KLS8qCi0gKiBUaGlzIGlzIHVnbHksIGJ1dCB3ZSB3YW50IHRoZSBkZWZhdWx0IGNhc2UgdG8gZmFsbCB0aHJvdWdoLgotICogIl9fZG93bl9mYWlsZWQiIGlzIGEgc3BlY2lhbCBhc20gaGFuZGxlciB0aGF0IGNhbGxzIHRoZSBDCi0gKiByb3V0aW5lIHRoYXQgYWN0dWFsbHkgd2FpdHMuIFNlZSBhcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiMgYXRvbWljIGRvd24gb3BlcmF0aW9uXG5cdCIKLQkJTE9DS19QUkVGSVggImRlY2wgJTBcblx0IiAgICAgLyogLS1zZW0tPmNvdW50ICovCi0JCSJqbnMgMmZcbiIKLQkJIlx0bGVhICUwLCUlZWF4XG5cdCIKLQkJImNhbGwgX19kb3duX2ZhaWxlZFxuIgotCQkiMjoiCi0JCToiK20iIChzZW0tPmNvdW50KQotCQk6Ci0JCToibWVtb3J5IiwiYXgiKTsKLX0KLQotLyoKLSAqIEludGVycnVwdGlibGUgdHJ5IHRvIGFjcXVpcmUgYSBzZW1hcGhvcmUuICBJZiB3ZSBvYnRhaW5lZAotICogaXQsIHJldHVybiB6ZXJvLiAgSWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCwgcmV0dXJucyAtRUlOVFIKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJlc3VsdDsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIjIGF0b21pYyBpbnRlcnJ1cHRpYmxlIGRvd24gb3BlcmF0aW9uXG5cdCIKLQkJInhvcmwgJTAsJTBcblx0IgotCQlMT0NLX1BSRUZJWCAiZGVjbCAlMVxuXHQiICAgICAvKiAtLXNlbS0+Y291bnQgKi8KLQkJImpucyAyZlxuXHQiCi0JCSJsZWEgJTEsJSVlYXhcblx0IgotCQkiY2FsbCBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGVcbiIKLQkJIjI6IgotCQk6Ij0mYSIgKHJlc3VsdCksICIrbSIgKHNlbS0+Y291bnQpCi0JCToKLQkJOiJtZW1vcnkiKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogTm9uLWJsb2NraW5nbHkgYXR0ZW1wdCB0byBkb3duKCkgYSBzZW1hcGhvcmUuCi0gKiBSZXR1cm5zIHplcm8gaWYgd2UgYWNxdWlyZWQgaXQKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJlc3VsdDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCi0JCSJ4b3JsICUwLCUwXG5cdCIKLQkJTE9DS19QUkVGSVggImRlY2wgJTFcblx0IiAgICAgLyogLS1zZW0tPmNvdW50ICovCi0JCSJqbnMgMmZcblx0IgotCQkibGVhICUxLCUlZWF4XG5cdCIKLQkJImNhbGwgX19kb3duX2ZhaWxlZF90cnlsb2NrXG5cdCIKLQkJIjI6XG4iCi0JCToiPSZhIiAocmVzdWx0KSwgIittIiAoc2VtLT5jb3VudCkKLQkJOgotCQk6Im1lbW9yeSIpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBOb3RlISBUaGlzIGlzIHN1YnRsZS4gV2UganVtcCB0byB3YWtlIHBlb3BsZSB1cCBvbmx5IGlmCi0gKiB0aGUgc2VtYXBob3JlIHdhcyBuZWdhdGl2ZSAoPT0gc29tZWJvZHkgd2FzIHdhaXRpbmcgb24gaXQpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiMgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCi0JCUxPQ0tfUFJFRklYICJpbmNsICUwXG5cdCIgICAgIC8qICsrc2VtLT5jb3VudCAqLwotCQkiamcgMWZcblx0IgotCQkibGVhICUwLCUlZWF4XG5cdCIKLQkJImNhbGwgX191cF93YWtldXBcbiIKLQkJIjE6IgotCQk6IittIiAoc2VtLT5jb3VudCkKLQkJOgotCQk6Im1lbW9yeSIsImF4Iik7Ci19Ci0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc2VtYXBob3JlXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvc2VtYXBob3JlXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Njk0MzAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NlbWFwaG9yZV82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLSNpZm5kZWYgX1g4Nl82NF9TRU1BUEhPUkVfSAotI2RlZmluZSBfWDg2XzY0X1NFTUFQSE9SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBTTVAtIGFuZCBpbnRlcnJ1cHQtc2FmZSBzZW1hcGhvcmVzLi4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqCi0gKiBNb2RpZmllZCAxOTk2LTEyLTIzIGJ5IERhdmUgR3JvdGhlIDxkYXZlQGdjb20uY29tPiB0byBmaXggYnVncyBpbgotICogICAgICAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgY29kZSBhbmQgdG8gbWFrZSBzZW1hcGhvcmUgd2FpdHMKLSAqICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0aWJsZSBzbyB0aGF0IHByb2Nlc3NlcyB3YWl0aW5nIG9uCi0gKiAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZXMgY2FuIGJlIGtpbGxlZC4KLSAqIE1vZGlmaWVkIDE5OTktMDItMTQgYnkgQW5kcmVhIEFyY2FuZ2VsaSwgc3BsaXQgdGhlIHNjaGVkLmMgaGVscGVyCi0gKgkJICAgICAgIGZ1bmN0aW9ucyBpbiBhc20vc2VtcGFob3JlLWhlbHBlci5oIHdoaWxlIGZpeGluZyBhCi0gKgkJICAgICAgIHBvdGVudGlhbCBhbmQgc3VidGxlIHJhY2UgZGlzY292ZXJlZCBieSBVbHJpY2ggU2NobWlkCi0gKgkJICAgICAgIGluIGRvd25faW50ZXJydXB0aWJsZSgpLiBTaW5jZSBJIHN0YXJ0ZWQgdG8gcGxheSBoZXJlIEkKLSAqCQkgICAgICAgYWxzbyBpbXBsZW1lbnRlZCB0aGUgYHRyeWxvY2snIHNlbWFwaG9yZSBvcGVyYXRpb24uCi0gKiAgICAgICAgICAxOTk5LTA3LTAyIEFydHVyIFNrYXdpbmEgPHNrYXdpbmFAZ2VvY2l0aWVzLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemVkICIwKGVjeCkiIC0+ICIoZWN4KSIgKHRoZSBhc3NlbWJsZXIgZG9lcyBub3QKLSAqICAgICAgICAgICAgICAgICAgICAgZG8gdGhpcykuIENoYW5nZWQgY2FsbGluZyBzZXF1ZW5jZXMgZnJvbSBwdXNoL2ptcCB0bwotICogICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCBjYWxsL3JldC4KLSAqIE1vZGlmaWVkIDIwMDEtMDEtMDEgQW5kcmVhcyBGcmFuY2sgPGFmcmFuY2tAZ214LmRlPgotICoJCSAgICAgICBTb21lIGhhY2tzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggcmVjZW50Ci0gKgkJICAgICAgIEdDQyBzbmFwc2hvdHMsIHRvIGF2b2lkIHN0YWNrIGNvcnJ1cHRpb24gd2hlbiBjb21waWxpbmcKLSAqCQkgICAgICAgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlci4gSXQncyBub3Qgc3VyZSBpZiB0aGlzIHdpbGwKLSAqCQkgICAgICAgYmUgZml4ZWQgaW4gR0NDLCBhcyBvdXIgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd2FzIGEKLSAqCQkgICAgICAgYml0IGR1YmlvdXMuCi0gKgotICogSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VlIGFuIGFuYWx5c2lzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24sIHBsZWFzZQotICogZnRwIHRvIGdjb20uY29tIGFuZCBkb3dubG9hZCB0aGUgZmlsZQotICogL3B1Yi9saW51eC9zcmMvc2VtYXBob3JlL3NlbWFwaG9yZS0yLjAuMjQudGFyLmd6LgotICoKLSAqLwotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vcndsb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+Ci0KLXN0cnVjdCBzZW1hcGhvcmUgewotCWF0b21pY190IGNvdW50OwotCWludCBzbGVlcGVyczsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwotfTsKLQotI2RlZmluZSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBuKQkJCQlcCi17CQkJCQkJCQkJXAotCS5jb3VudAkJPSBBVE9NSUNfSU5JVChuKSwJCQkJXAotCS5zbGVlcGVycwk9IDAsCQkJCQkJXAotCS53YWl0CQk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KQlcCi19Ci0KLSNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpIFwKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLGNvdW50KQotCi0jZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKLQotc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQotewotLyoKLSAqCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSlfX1NFTUFQSE9SRV9JTklUSUFMSVpFUigoKnNlbSksdmFsKTsKLSAqCi0gKiBpJ2QgcmF0aGVyIHVzZSB0aGUgbW9yZSBmbGV4aWJsZSBpbml0aWFsaXphdGlvbiBhYm92ZSwgYnV0IHNhZGx5Ci0gKiBHQ0MgMi43LjIuMyBlbWl0cyBhIGJvZ3VzIHdhcm5pbmcuIEVHQ1MgZG9lc24ndC4gT2ggd2VsbC4KLSAqLwotCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7Ci0Jc2VtLT5zbGVlcGVycyA9IDA7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtYV9pbml0KHNlbSwgMCk7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgLyogc3BlY2lhbCByZWdpc3RlciBjYWxsaW5nIGNvbnZlbnRpb24gKi8pOwotYXNtbGlua2FnZSBpbnQgIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSh2b2lkICAvKiBwYXJhbXMgaW4gcmVnaXN0ZXJzICovKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCAgLyogcGFyYW1zIGluIHJlZ2lzdGVycyAqLyk7Ci1hc21saW5rYWdlIHZvaWQgX191cF93YWtldXAodm9pZCAvKiBzcGVjaWFsIHJlZ2lzdGVyIGNhbGxpbmcgY29udmVudGlvbiAqLyk7Ci0KLWFzbWxpbmthZ2Ugdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIGludCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7Ci1hc21saW5rYWdlIHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLQotLyoKLSAqIFRoaXMgaXMgdWdseSwgYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgY2FzZSB0byBmYWxsIHRocm91Z2guCi0gKiAiX19kb3duX2ZhaWxlZCIgaXMgYSBzcGVjaWFsIGFzbSBoYW5kbGVyIHRoYXQgY2FsbHMgdGhlIEMKLSAqIHJvdXRpbmUgdGhhdCBhY3R1YWxseSB3YWl0cy4gU2VlIGFyY2gveDg2XzY0L2tlcm5lbC9zZW1hcGhvcmUuYwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiMgYXRvbWljIGRvd24gb3BlcmF0aW9uXG5cdCIKLQkJTE9DS19QUkVGSVggImRlY2wgJTBcblx0IiAgICAgLyogLS1zZW0tPmNvdW50ICovCi0JCSJqbnMgMWZcblx0IgotCQkiY2FsbCBfX2Rvd25fZmFpbGVkXG4iCi0JCSIxOiIKLQkJOiI9bSIgKHNlbS0+Y291bnQpCi0JCToiRCIgKHNlbSkKLQkJOiJtZW1vcnkiKTsKLX0KLQotLyoKLSAqIEludGVycnVwdGlibGUgdHJ5IHRvIGFjcXVpcmUgYSBzZW1hcGhvcmUuICBJZiB3ZSBvYnRhaW5lZAotICogaXQsIHJldHVybiB6ZXJvLiAgSWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCwgcmV0dXJucyAtRUlOVFIKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJlc3VsdDsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiMgYXRvbWljIGludGVycnVwdGlibGUgZG93biBvcGVyYXRpb25cblx0IgotCQkieG9ybCAlMCwlMFxuXHQiCi0JCUxPQ0tfUFJFRklYICJkZWNsICUxXG5cdCIgICAgIC8qIC0tc2VtLT5jb3VudCAqLwotCQkiam5zIDJmXG5cdCIKLQkJImNhbGwgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlXG4iCi0JCSIyOlxuIgotCQk6Ij0mYSIgKHJlc3VsdCksICI9bSIgKHNlbS0+Y291bnQpCi0JCToiRCIgKHNlbSkKLQkJOiJtZW1vcnkiKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogTm9uLWJsb2NraW5nbHkgYXR0ZW1wdCB0byBkb3duKCkgYSBzZW1hcGhvcmUuCi0gKiBSZXR1cm5zIHplcm8gaWYgd2UgYWNxdWlyZWQgaXQKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCi17Ci0JaW50IHJlc3VsdDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCi0JCSJ4b3JsICUwLCUwXG5cdCIKLQkJTE9DS19QUkVGSVggImRlY2wgJTFcblx0IiAgICAgLyogLS1zZW0tPmNvdW50ICovCi0JCSJqbnMgMmZcblx0IgotCQkiY2FsbCBfX2Rvd25fZmFpbGVkX3RyeWxvY2tcblx0IgotCQkiMjpcbiIKLQkJOiI9JmEiIChyZXN1bHQpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6IkQiIChzZW0pCi0JCToibWVtb3J5IiwiY2MiKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogTm90ZSEgVGhpcyBpcyBzdWJ0bGUuIFdlIGp1bXAgdG8gd2FrZSBwZW9wbGUgdXAgb25seSBpZgotICogdGhlIHNlbWFwaG9yZSB3YXMgbmVnYXRpdmUgKD09IHNvbWVib2R5IHdhcyB3YWl0aW5nIG9uIGl0KS4KLSAqIFRoZSBkZWZhdWx0IGNhc2UgKG5vIGNvbnRlbnRpb24pIHdpbGwgcmVzdWx0IGluIE5PCi0gKiBqdW1wcyBmb3IgYm90aCBkb3duKCkgYW5kIHVwKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiIyBhdG9taWMgdXAgb3BlcmF0aW9uXG5cdCIKLQkJTE9DS19QUkVGSVggImluY2wgJTBcblx0IiAgICAgLyogKytzZW0tPmNvdW50ICovCi0JCSJqZyAxZlxuXHQiCi0JCSJjYWxsIF9fdXBfd2FrZXVwXG4iCi0JCSIxOiIKLQkJOiI9bSIgKHNlbS0+Y291bnQpCi0JCToiRCIgKHNlbSkKLQkJOiJtZW1vcnkiKTsKLX0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zZXR1cC5oIGIvaW5jbHVkZS9hc20teDg2L3NldHVwLmgKaW5kZXggMDcxZTA1NC4uZmE2NzYzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3NldHVwLmgKQEAgLTQsNiArNCwxMCBAQAogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyMDQ4CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIEludGVycnVwdCBjb250cm9sIGZvciB2U01Qb3dlcmVkIHg4Nl82NCBzeXN0ZW1zICovCit2b2lkIHZzbXBfaW5pdCh2b2lkKTsKKwogY2hhciAqbWFjaGluZV9zcGVjaWZpY19tZW1vcnlfc2V0dXAodm9pZCk7CiAjaWZuZGVmIENPTkZJR19QQVJBVklSVAogI2RlZmluZSBwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCkJZG8ge30gd2hpbGUgKDApCkBAIC01MSw4ICs1NSw4IEBACiBjaGFyICogX19pbml0IG1hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwKHZvaWQpOwogY2hhciAqbWVtb3J5X3NldHVwKHZvaWQpOwogCi1pbnQgX19pbml0IGNvcHlfZTgyMF9tYXAoc3RydWN0IGU4MjBlbnRyeSAqIGJpb3NtYXAsIGludCBucl9tYXApOwotaW50IF9faW5pdCBzYW5pdGl6ZV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICogYmlvc21hcCwgY2hhciAqIHBucl9tYXApOworaW50IF9faW5pdCBjb3B5X2U4MjBfbWFwKHN0cnVjdCBlODIwZW50cnkgKmJpb3NtYXAsIGludCBucl9tYXApOworaW50IF9faW5pdCBzYW5pdGl6ZV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICpiaW9zbWFwLCBjaGFyICpwbnJfbWFwKTsKIHZvaWQgX19pbml0IGFkZF9tZW1vcnlfcmVnaW9uKHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplLCBpbnQgdHlwZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS14ODYvc2lnY29udGV4dC5oCmluZGV4IGQ3NDM5NDcuLjJmOWM4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zaWdjb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3NpZ2NvbnRleHQuaApAQCAtNzksNyArNzksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBzcF9hdF9zaWduYWw7CiAJdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwotCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKiBmcHN0YXRlOworCXN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBvbGRtYXNrOwogCXVuc2lnbmVkIGxvbmcgY3IyOwogfTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZWZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZXNwX2F0X3NpZ25hbDsKIAl1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7Ci0Jc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqIGZwc3RhdGU7CisJc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqZnBzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIG9sZG1hc2s7CiAJdW5zaWduZWQgbG9uZyBjcjI7CiB9OwpAQCAtMTIxLDcgKzEyMSw4IEBACiBzdHJ1Y3QgX2Zwc3RhdGUgewogCV9fdTE2CWN3ZDsKIAlfX3UxNglzd2Q7Ci0JX191MTYJdHdkOwkvKiBOb3RlIHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSAzMmJpdC94ODcvRlNBVkUgdHdkICovCisJX191MTYJdHdkOwkJLyogTm90ZSB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUKKwkJCQkgICAzMmJpdC94ODcvRlNBVkUgdHdkICovCiAJX191MTYJZm9wOwogCV9fdTY0CXJpcDsKIAlfX3U2NAlyZHA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc2lnY29udGV4dDMyLmggYi9pbmNsdWRlL2FzbS14ODYvc2lnY29udGV4dDMyLmgKaW5kZXggNmZmYWI0Zi4uNTdhOTY4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NpZ2NvbnRleHQzMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zaWdjb250ZXh0MzIuaApAQCAtMjYsNyArMjYsNyBAQAogCV9fdTMyIAljdzsKIAlfX3UzMglzdzsKIAlfX3UzMgl0YWc7CS8qIG5vdCBjb21wYXRpYmxlIHRvIDY0Yml0IHR3ZCAqLwotCV9fdTMyCWlwb2ZmOwkJCQorCV9fdTMyCWlwb2ZmOwogCV9fdTMyCWNzc2VsOwogCV9fdTMyCWRhdGFvZmY7CiAJX191MzIJZGF0YXNlbDsKQEAgLTM5LDcgKzM5LDcgQEAKIAlfX3UzMglteGNzcjsKIAlfX3UzMglyZXNlcnZlZDsKIAlzdHJ1Y3QgX2ZweHJlZwlfZnhzcl9zdFs4XTsKLQlzdHJ1Y3QgX3htbXJlZwlfeG1tWzhdOwkvKiBJdCdzIGFjdHVhbGx5IDE2ICovIAorCXN0cnVjdCBfeG1tcmVnCV94bW1bOF07CS8qIEl0J3MgYWN0dWFsbHkgMTYgKi8KIAlfX3UzMglwYWRkaW5nWzU2XTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zaWduYWwuaAppbmRleCBhZWU3ZWNhLi5mMTUxODZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3NpZ25hbC5oCkBAIC0xODUsNjEgKzE4NSw2MSBAQAogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKIAotI2RlZmluZSBzaWdhZGRzZXQoc2V0LHNpZykJCSAgIFwKLQkoX19idWlsdGluX2NvbnN0YW50cChzaWcpID8JICAgXAotCSBfX2NvbnN0X3NpZ2FkZHNldCgoc2V0KSwoc2lnKSkgOiAgXAotCSBfX2dlbl9zaWdhZGRzZXQoKHNldCksKHNpZykpKQorI2RlZmluZSBzaWdhZGRzZXQoc2V0LHNpZykJCSAgICBcCisJKF9fYnVpbHRpbl9jb25zdGFudHAoc2lnKQkgICAgXAorCSA/IF9fY29uc3Rfc2lnYWRkc2V0KChzZXQpLCAoc2lnKSkgIFwKKwkgOiBfX2dlbl9zaWdhZGRzZXQoKHNldCksIChzaWcpKSkKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2dlbl9zaWdhZGRzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCitzdGF0aWMgaW5saW5lIHZvaWQgX19nZW5fc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQogewotCV9fYXNtX18oImJ0c2wgJTEsJTAiIDogIittIigqc2V0KSA6ICJJciIoX3NpZyAtIDEpIDogImNjIik7CisJYXNtKCJidHNsICUxLCUwIiA6ICIrbSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY29uc3Rfc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQorc3RhdGljIGlubGluZSB2b2lkIF9fY29uc3Rfc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQogewogCXVuc2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7CiAJc2V0LT5zaWdbc2lnIC8gX05TSUdfQlBXXSB8PSAxIDw8IChzaWcgJSBfTlNJR19CUFcpOwogfQogCi0jZGVmaW5lIHNpZ2RlbHNldChzZXQsc2lnKQkJICAgXAotCShfX2J1aWx0aW5fY29uc3RhbnRfcChzaWcpID8gICAgICAgXAotCSBfX2NvbnN0X3NpZ2RlbHNldCgoc2V0KSwoc2lnKSkgOiAgXAotCSBfX2dlbl9zaWdkZWxzZXQoKHNldCksKHNpZykpKQorI2RlZmluZSBzaWdkZWxzZXQoc2V0LCBzaWcpCQkgICAgXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcChzaWcpCSAgICBcCisJID8gX19jb25zdF9zaWdkZWxzZXQoKHNldCksIChzaWcpKSAgXAorCSA6IF9fZ2VuX3NpZ2RlbHNldCgoc2V0KSwgKHNpZykpKQogCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19nZW5fc2lnZGVsc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQorc3RhdGljIGlubGluZSB2b2lkIF9fZ2VuX3NpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKIHsKLQlfX2FzbV9fKCJidHJsICUxLCUwIiA6ICIrbSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIpOworCWFzbSgiYnRybCAlMSwlMCIgOiAiK20iKCpzZXQpIDogIklyIihfc2lnIC0gMSkgOiAiY2MiKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NvbnN0X3NpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvbnN0X3NpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKIHsKIAl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOwogCXNldC0+c2lnW3NpZyAvIF9OU0lHX0JQV10gJj0gfigxIDw8IChzaWcgJSBfTlNJR19CUFcpKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IF9fY29uc3Rfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQogewogCXVuc2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7CiAJcmV0dXJuIDEgJiAoc2V0LT5zaWdbc2lnIC8gX05TSUdfQlBXXSA+PiAoc2lnICUgX05TSUdfQlBXKSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBfX2dlbl9zaWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2VuX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQogewogCWludCByZXQ7Ci0JX19hc21fXygiYnRsICUyLCUxXG5cdHNiYmwgJTAsJTAiCi0JCTogIj1yIihyZXQpIDogIm0iKCpzZXQpLCAiSXIiKF9zaWctMSkgOiAiY2MiKTsKKwlhc20oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCSAgICA6ICI9ciIocmV0KSA6ICJtIigqc2V0KSwgIklyIihfc2lnLTEpIDogImNjIik7CiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBzaWdpc21lbWJlcihzZXQsc2lnKQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKSA/CQlcCi0JIF9fY29uc3Rfc2lnaXNtZW1iZXIoKHNldCksKHNpZykpIDoJXAotCSBfX2dlbl9zaWdpc21lbWJlcigoc2V0KSwoc2lnKSkpCisjZGVmaW5lIHNpZ2lzbWVtYmVyKHNldCwgc2lnKQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKQkJXAorCSA/IF9fY29uc3Rfc2lnaXNtZW1iZXIoKHNldCksIChzaWcpKQlcCisJIDogX19nZW5fc2lnaXNtZW1iZXIoKHNldCksIChzaWcpKSkKIAotc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3JkKQorc3RhdGljIGlubGluZSBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdvcmQpCiB7Ci0JX19hc21fXygiYnNmbCAlMSwlMCIgOiAiPXIiKHdvcmQpIDogInJtIih3b3JkKSA6ICJjYyIpOworCWFzbSgiYnNmbCAlMSwlMCIgOiAiPXIiKHdvcmQpIDogInJtIih3b3JkKSA6ICJjYyIpOwogCXJldHVybiB3b3JkOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc21wLmggYi9pbmNsdWRlL2FzbS14ODYvc21wLmgKaW5kZXggZjJlODMxOS4uNjJlYmRlYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc21wLmgKQEAgLTEsNSArMSwyMDkgQEAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgInNtcF8zMi5oIgorI2lmbmRlZiBfQVNNX1g4Nl9TTVBfSF8KKyNkZWZpbmUgX0FTTV9YODZfU01QX0hfCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorCisvKgorICogV2UgbmVlZCB0aGUgQVBJQyBkZWZpbml0aW9ucyBhdXRvbWF0aWNhbGx5IGFzIHBhcnQgb2YgJ3NtcC5oJworICovCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisjIGluY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyMgaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyMgaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisjICBpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgorIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL3BkYS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorCitleHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKKworZXh0ZXJuIHZvaWQgKCptdHJyX2hvb2spKHZvaWQpOworZXh0ZXJuIHZvaWQgemFwX2xvd19tYXBwaW5ncyh2b2lkKTsKKworZXh0ZXJuIGludCBzbXBfbnVtX3NpYmxpbmdzOworZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOworCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHUxNiB4ODZfY3B1X3RvX2FwaWNpZF9pbml0W107CitleHRlcm4gdTE2IHg4Nl9iaW9zX2NwdV9hcGljaWRfaW5pdFtdOworZXh0ZXJuIHZvaWQgKng4Nl9jcHVfdG9fYXBpY2lkX2Vhcmx5X3B0cjsKK2V4dGVybiB2b2lkICp4ODZfYmlvc19jcHVfYXBpY2lkX2Vhcmx5X3B0cjsKICNlbHNlCi0jIGluY2x1ZGUgInNtcF82NC5oIgorI2RlZmluZSB4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHIgTlVMTAorI2RlZmluZSB4ODZfYmlvc19jcHVfYXBpY2lkX2Vhcmx5X3B0ciBOVUxMCisjZW5kaWYKKworREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X3NpYmxpbmdfbWFwKTsKK0RFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9jb3JlX21hcCk7CitERUNMQVJFX1BFUl9DUFUodTE2LCBjcHVfbGxjX2lkKTsKK0RFQ0xBUkVfUEVSX0NQVSh1MTYsIHg4Nl9jcHVfdG9fYXBpY2lkKTsKK0RFQ0xBUkVfUEVSX0NQVSh1MTYsIHg4Nl9iaW9zX2NwdV9hcGljaWQpOworCisvKiBTdGF0aWMgc3RhdGUgaW4gaGVhZC5TIHVzZWQgdG8gc2V0IHVwIGEgQ1BVICovCitleHRlcm4gc3RydWN0IHsKKwl2b2lkICpzcDsKKwl1bnNpZ25lZCBzaG9ydCBzczsKK30gc3RhY2tfc3RhcnQ7CisKK3N0cnVjdCBzbXBfb3BzIHsKKwl2b2lkICgqc21wX3ByZXBhcmVfYm9vdF9jcHUpKHZvaWQpOworCXZvaWQgKCpzbXBfcHJlcGFyZV9jcHVzKSh1bnNpZ25lZCBtYXhfY3B1cyk7CisJaW50ICgqY3B1X3VwKSh1bnNpZ25lZCBjcHUpOworCXZvaWQgKCpzbXBfY3B1c19kb25lKSh1bnNpZ25lZCBtYXhfY3B1cyk7CisKKwl2b2lkICgqc21wX3NlbmRfc3RvcCkodm9pZCk7CisJdm9pZCAoKnNtcF9zZW5kX3Jlc2NoZWR1bGUpKGludCBjcHUpOworCWludCAoKnNtcF9jYWxsX2Z1bmN0aW9uX21hc2spKGNwdW1hc2tfdCBtYXNrLAorCQkJCSAgICAgIHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKKwkJCQkgICAgICBpbnQgd2FpdCk7Cit9OworCisvKiBHbG9iYWxzIGR1ZSB0byBwYXJhdmlydCAqLworZXh0ZXJuIHZvaWQgc2V0X2NwdV9zaWJsaW5nX21hcChpbnQgY3B1KTsKKworI2lmZGVmIENPTkZJR19TTVAKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCisjZGVmaW5lIHN0YXJ0dXBfaXBpX2hvb2socGh5c19hcGljaWQsIHN0YXJ0X2VpcCwgc3RhcnRfZXNwKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKK2V4dGVybiBzdHJ1Y3Qgc21wX29wcyBzbXBfb3BzOworCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQoreworCXNtcF9vcHMuc21wX3NlbmRfc3RvcCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKK3sKKwlzbXBfb3BzLnNtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlzbXBfb3BzLnNtcF9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJc21wX29wcy5zbXBfY3B1c19kb25lKG1heF9jcHVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc21wX29wcy5jcHVfdXAoY3B1KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKK3sKKwlzbXBfb3BzLnNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVtYXNrX3QgbWFzaywKKwkJCQkJIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkJCSBpbnQgd2FpdCkKK3sKKwlyZXR1cm4gc21wX29wcy5zbXBfY2FsbF9mdW5jdGlvbl9tYXNrKG1hc2ssIGZ1bmMsIGluZm8sIHdhaXQpOworfQorCit2b2lkIG5hdGl2ZV9zbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKTsKK3ZvaWQgbmF0aXZlX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKK3ZvaWQgbmF0aXZlX3NtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKTsKK2ludCBuYXRpdmVfY3B1X3VwKHVuc2lnbmVkIGludCBjcHVudW0pOworCitleHRlcm4gaW50IF9fY3B1X2Rpc2FibGUodm9pZCk7CitleHRlcm4gdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpOworCit2b2lkIHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpOworI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpCisKKy8qIFdlIGRvbid0IG1hcmsgQ1BVcyBvbmxpbmUgdW50aWwgX19jcHVfdXAoKSwgc28gd2UgbmVlZCBhbm90aGVyIG1lYXN1cmUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG51bV9ib290aW5nX2NwdXModm9pZCkKK3sKKwlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK2V4dGVybiB1bnNpZ25lZCBkaXNhYmxlZF9jcHVzIF9fY3B1aW5pdGRhdGE7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyX1NNUAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIGJ5IGFsbCBTTVAgc3lzdGVtcy4gSXQgbXVzdCBfYWx3YXlzXyBiZSB2YWxpZAorICogZnJvbSB0aGUgaW5pdGlhbCBzdGFydHVwLiBXZSBtYXAgQVBJQ19CQVNFIHZlcnkgZWFybHkgaW4gcGFnZV9zZXR1cCgpLAorICogc28gdGhpcyBpcyBjb3JyZWN0IGluIHRoZSB4ODYgY2FzZS4KKyAqLworREVDTEFSRV9QRVJfQ1BVKGludCwgY3B1X251bWJlcik7CisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKHg4Nl9yZWFkX3BlcmNwdShjcHVfbnVtYmVyKSkKK2V4dGVybiBpbnQgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOworCisjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjRfU01QKQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCXJlYWRfcGRhKGNwdW51bWJlcikKKworI2RlZmluZSBzdGFja19zbXBfcHJvY2Vzc29yX2lkKCkJCQkJCVwKKyh7CQkJCQkJCQlcCisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsJCQkJCQlcCisJX19hc21fXygiYW5kcSAlJXJzcCwlMDsgIjoiPXIiICh0aSkgOiAiMCIgKENVUlJFTlRfTUFTSykpOwlcCisJdGktPmNwdTsJCQkJCQkJXAorfSkKKyNkZWZpbmUgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkJCXNtcF9wcm9jZXNzb3JfaWQoKQorCisjZWxzZSAvKiAhQ09ORklHX1g4Nl8zMl9TTVAgJiYgIUNPTkZJR19YODZfNjRfU01QICovCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQKKyNkZWZpbmUgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkJCTAKKyNkZWZpbmUgc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpIAkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCitzdGF0aWMgaW5saW5lIGludCBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCisJcmV0dXJuIEdFVF9BUElDX0xPR0lDQUxfSUQoKih1MzIgKikoQVBJQ19CQVNFICsgQVBJQ19MRFIpKTsKK30KKworI2lmbmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkX2FwaWNfaWQodm9pZCkKK3sKKwlyZXR1cm4gKih1MzIgKikoQVBJQ19CQVNFICsgQVBJQ19JRCk7Cit9CisjZWxzZQorZXh0ZXJuIHVuc2lnbmVkIGludCByZWFkX2FwaWNfaWQodm9pZCk7CisjZW5kaWYKKworCisjIGlmZGVmIEFQSUNfREVGSU5JVElPTgorZXh0ZXJuIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CisjIGVsc2UKKyMgIGluY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorc3RhdGljIGlubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLworCXJldHVybiBHRVRfQVBJQ19JRChyZWFkX2FwaWNfaWQoKSk7Cit9CisjIGVuZGlmIC8qIEFQSUNfREVGSU5JVElPTiAqLworCisjZWxzZSAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KKworIyBpZm5kZWYgQ09ORklHX1NNUAorIyAgZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCTAKKyMgZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitleHRlcm4gdm9pZCBjcHVfZXhpdF9jbGVhcih2b2lkKTsKK2V4dGVybiB2b2lkIGNwdV91bmluaXQodm9pZCk7CitleHRlcm4gdm9pZCByZW1vdmVfc2libGluZ2luZm8oaW50IGNwdSk7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgc21wX2FsbG9jX21lbW9yeSh2b2lkKTsKK2V4dGVybiB2b2lkIGxvY2tfaXBpX2NhbGxfbG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIHVubG9ja19pcGlfY2FsbF9sb2NrKHZvaWQpOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc21wXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvc21wXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MTUyZTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NtcF8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU01QX0gKLSNkZWZpbmUgX19BU01fU01QX0gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0vKgotICogV2UgbmVlZCB0aGUgQVBJQyBkZWZpbml0aW9ucyBhdXRvbWF0aWNhbGx5IGFzIHBhcnQgb2YgJ3NtcC5oJwotICovCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0jIGluY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSMgaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSMgaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0jICBpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgotIyBlbmRpZgotI2VuZGlmCi0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKLQotZXh0ZXJuIGludCBzbXBfbnVtX3NpYmxpbmdzOwotZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKLQotZXh0ZXJuIHZvaWQgc21wX2FsbG9jX21lbW9yeSh2b2lkKTsKLWV4dGVybiB2b2lkIGxvY2tfaXBpX2NhbGxfbG9jayh2b2lkKTsKLWV4dGVybiB2b2lkIHVubG9ja19pcGlfY2FsbF9sb2NrKHZvaWQpOwotCi1leHRlcm4gdm9pZCAoKm10cnJfaG9vaykgKHZvaWQpOwotZXh0ZXJuIHZvaWQgemFwX2xvd19tYXBwaW5ncyAodm9pZCk7Ci0KLWV4dGVybiB1OCBfX2luaXRkYXRhIHg4Nl9jcHVfdG9fYXBpY2lkX2luaXRbXTsKLWV4dGVybiB2b2lkICp4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHI7Ci0KLURFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7Ci1ERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfY29yZV9tYXApOwotREVDTEFSRV9QRVJfQ1BVKHU4LCBjcHVfbGxjX2lkKTsKLURFQ0xBUkVfUEVSX0NQVSh1OCwgeDg2X2NwdV90b19hcGljaWQpOwotCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1leHRlcm4gdm9pZCBjcHVfZXhpdF9jbGVhcih2b2lkKTsKLWV4dGVybiB2b2lkIGNwdV91bmluaXQodm9pZCk7Ci1leHRlcm4gdm9pZCByZW1vdmVfc2libGluZ2luZm8oaW50IGNwdSk7Ci0jZW5kaWYKLQotLyogR2xvYmFscyBkdWUgdG8gcGFyYXZpcnQgKi8KLWV4dGVybiB2b2lkIHNldF9jcHVfc2libGluZ19tYXAoaW50IGNwdSk7Ci0KLXN0cnVjdCBzbXBfb3BzCi17Ci0Jdm9pZCAoKnNtcF9wcmVwYXJlX2Jvb3RfY3B1KSh2b2lkKTsKLQl2b2lkICgqc21wX3ByZXBhcmVfY3B1cykodW5zaWduZWQgbWF4X2NwdXMpOwotCWludCAoKmNwdV91cCkodW5zaWduZWQgY3B1KTsKLQl2b2lkICgqc21wX2NwdXNfZG9uZSkodW5zaWduZWQgbWF4X2NwdXMpOwotCi0Jdm9pZCAoKnNtcF9zZW5kX3N0b3ApKHZvaWQpOwotCXZvaWQgKCpzbXBfc2VuZF9yZXNjaGVkdWxlKShpbnQgY3B1KTsKLQlpbnQgKCpzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKShjcHVtYXNrX3QgbWFzaywKLQkJCQkgICAgICB2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCi0JCQkJICAgICAgaW50IHdhaXQpOwotfTsKLQotI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiBzdHJ1Y3Qgc21wX29wcyBzbXBfb3BzOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKLXsKLQlzbXBfb3BzLnNtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0Jc21wX29wcy5zbXBfcHJlcGFyZV9jcHVzKG1heF9jcHVzKTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JcmV0dXJuIHNtcF9vcHMuY3B1X3VwKGNwdSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0Jc21wX29wcy5zbXBfY3B1c19kb25lKG1heF9jcHVzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKLXsKLQlzbXBfb3BzLnNtcF9zZW5kX3N0b3AoKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCi17Ci0Jc21wX29wcy5zbXBfc2VuZF9yZXNjaGVkdWxlKGNwdSk7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdW1hc2tfdCBtYXNrLAotCQkJCQkgdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKLQkJCQkJIGludCB3YWl0KQotewotCXJldHVybiBzbXBfb3BzLnNtcF9jYWxsX2Z1bmN0aW9uX21hc2sobWFzaywgZnVuYywgaW5mbywgd2FpdCk7Ci19Ci0KLXZvaWQgbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpOwotdm9pZCBuYXRpdmVfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOwotaW50IG5hdGl2ZV9jcHVfdXAodW5zaWduZWQgaW50IGNwdW51bSk7Ci12b2lkIG5hdGl2ZV9zbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cyk7Ci0KLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jZGVmaW5lIHN0YXJ0dXBfaXBpX2hvb2socGh5c19hcGljaWQsIHN0YXJ0X2VpcCwgc3RhcnRfZXNwKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotZXh0ZXJuIGludCBfX2NwdV9kaXNhYmxlKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQgYnkgYWxsIFNNUCBzeXN0ZW1zLiBJdCBtdXN0IF9hbHdheXNfIGJlIHZhbGlkCi0gKiBmcm9tIHRoZSBpbml0aWFsIHN0YXJ0dXAuIFdlIG1hcCBBUElDX0JBU0UgdmVyeSBlYXJseSBpbiBwYWdlX3NldHVwKCksCi0gKiBzbyB0aGlzIGlzIGNvcnJlY3QgaW4gdGhlIHg4NiBjYXNlLgotICovCi1ERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfbnVtYmVyKTsKLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAoeDg2X3JlYWRfcGVyY3B1KGNwdV9udW1iZXIpKQotCi0jZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkKLQotZXh0ZXJuIGludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7Ci0KLXZvaWQgX19jcHVpbml0IHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpOwotCi0vKiBXZSBkb24ndCBtYXJrIENQVXMgb25saW5lIHVudGlsIF9fY3B1X3VwKCksIHNvIHdlIG5lZWQgYW5vdGhlciBtZWFzdXJlICovCi1zdGF0aWMgaW5saW5lIGludCBudW1fYm9vdGluZ19jcHVzKHZvaWQpCi17Ci0JcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9jYWxsb3V0X21hcCk7Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19TTVAgKi8KLQotI2RlZmluZSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAotI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCi0KLSNlbmRpZiAvKiAhQ09ORklHX1NNUCAqLwotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLwotCXJldHVybiBHRVRfQVBJQ19MT0dJQ0FMX0lEKCoodTMyICopKEFQSUNfQkFTRSArIEFQSUNfTERSKSk7Ci19Ci0KLSMgaWZkZWYgQVBJQ19ERUZJTklUSU9OCi1leHRlcm4gaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKLSMgZWxzZQotIyAgaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCi0JcmV0dXJuIEdFVF9BUElDX0lEKCoodTMyICopKEFQSUNfQkFTRSArIEFQSUNfSUQpKTsKLX0KLSMgZW5kaWYgLyogQVBJQ19ERUZJTklUSU9OICovCi0KLSNlbHNlIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLwotCi0jIGlmbmRlZiBDT05GSUdfU01QCi0jICBkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJMAotIyBlbmRpZgotCi0jZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCi0KLSNlbmRpZiAvKiAhQVNTRU1CTFkgKi8KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NtcF82NC5oIGIvaW5jbHVkZS9hc20teDg2L3NtcF82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGE3NTUxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zbXBfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NNUF9ICi0jZGVmaW5lIF9fQVNNX1NNUF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0vKgotICogV2UgbmVlZCB0aGUgQVBJQyBkZWZpbml0aW9ucyBhdXRvbWF0aWNhbGx5IGFzIHBhcnQgb2YgJ3NtcC5oJwotICovCi0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLSNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+Ci0jaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+Ci0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfaW5pdGlhbGl6ZWQ7Ci0KLWV4dGVybiBpbnQgc21wX251bV9zaWJsaW5nczsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NvcnM7Ci0KLWV4dGVybiB2b2lkIHNtcF9hbGxvY19tZW1vcnkodm9pZCk7Ci1leHRlcm4gdm9pZCBsb2NrX2lwaV9jYWxsX2xvY2sodm9pZCk7Ci1leHRlcm4gdm9pZCB1bmxvY2tfaXBpX2NhbGxfbG9jayh2b2lkKTsKLQotZXh0ZXJuIGludCBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdW1hc2tfdCBtYXNrLCB2b2lkICgqZnVuYykodm9pZCAqKSwKLQkJCQkgIHZvaWQgKmluZm8sIGludCB3YWl0KTsKLQotZXh0ZXJuIHUxNiBfX2luaXRkYXRhIHg4Nl9jcHVfdG9fYXBpY2lkX2luaXRbXTsKLWV4dGVybiB1MTYgX19pbml0ZGF0YSB4ODZfYmlvc19jcHVfYXBpY2lkX2luaXRbXTsKLWV4dGVybiB2b2lkICp4ODZfY3B1X3RvX2FwaWNpZF9lYXJseV9wdHI7Ci1leHRlcm4gdm9pZCAqeDg2X2Jpb3NfY3B1X2FwaWNpZF9lYXJseV9wdHI7Ci0KLURFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7Ci1ERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfY29yZV9tYXApOwotREVDTEFSRV9QRVJfQ1BVKHUxNiwgY3B1X2xsY19pZCk7Ci1ERUNMQVJFX1BFUl9DUFUodTE2LCB4ODZfY3B1X3RvX2FwaWNpZCk7Ci1ERUNMQVJFX1BFUl9DUFUodTE2LCB4ODZfYmlvc19jcHVfYXBpY2lkKTsKLQotc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQotewotCWlmIChjcHVfcHJlc2VudChtcHNfY3B1KSkKLQkJcmV0dXJuIChpbnQpcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBtcHNfY3B1KTsKLQllbHNlCi0JCXJldHVybiBCQURfQVBJQ0lEOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotCi0jZGVmaW5lIFNNUF9UUkFNUE9MSU5FX0JBU0UgMHg2MDAwCi0KLWV4dGVybiBpbnQgX19jcHVfZGlzYWJsZSh2b2lkKTsKLWV4dGVybiB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIF9fY3B1aW5pdGRhdGEgZGlzYWJsZWRfY3B1czsKLQotI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCXJlYWRfcGRhKGNwdW51bWJlcikKLSNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KQotCi0jZGVmaW5lIHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKQkJCQkJXAotCSh7CQkJCQkJCQlcCi0Jc3RydWN0IHRocmVhZF9pbmZvICp0aTsJCQkJCQlcCi0JX19hc21fXygiYW5kcSAlJXJzcCwlMDsgIjoiPXIiICh0aSkgOiAiMCIgKENVUlJFTlRfTUFTSykpOwlcCi0JdGktPmNwdTsJCQkJCQkJXAotfSkKLQotLyoKLSAqIE9uIHg4NiBhbGwgQ1BVcyBhcmUgbWFwcGVkIDE6MSB0byB0aGUgQVBJQyBzcGFjZS4gVGhpcyBzaW1wbGlmaWVzCi0gKiBzY2hlZHVsaW5nIGFuZCBJUEkgc2VuZGluZyBhbmQgY29tcHJlc3NlcyBkYXRhIHN0cnVjdHVyZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG51bV9ib290aW5nX2NwdXModm9pZCkKLXsKLQlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKLX0KLQotZXh0ZXJuIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KTsKLQotI2Vsc2UgLyogQ09ORklHX1NNUCAqLwotCi1leHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X2lkOwotI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQlib290X2NwdV9pZAotI2RlZmluZSBzdGFja19zbXBfcHJvY2Vzc29yX2lkKCkgMAotCi0jZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KLQotI2RlZmluZSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKQkJc21wX3Byb2Nlc3Nvcl9pZCgpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLwotCXJldHVybiBHRVRfQVBJQ19MT0dJQ0FMX0lEKCoodTMyICopKEFQSUNfQkFTRSArIEFQSUNfTERSKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCS8qIHdlIGRvbid0IHdhbnQgdG8gbWFyayB0aGlzIGFjY2VzcyB2b2xhdGlsZSAtIGJhZCBjb2RlIGdlbmVyYXRpb24gKi8KLQlyZXR1cm4gR0VUX0FQSUNfSUQoKih1MzIgKikoQVBJQ19CQVNFICsgQVBJQ19JRCkpOwotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NwYXJzZW1lbS5oIGIvaW5jbHVkZS9hc20teDg2L3NwYXJzZW1lbS5oCmluZGV4IGZhNThjZDUuLjliZDQ4YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zcGFyc2VtZW0uaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc3BhcnNlbWVtLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKICMgaWZkZWYgQ09ORklHX1g4Nl9QQUUKLSMgIGRlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkzMAorIyAgZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCTI5CiAjICBkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMJMzYKICMgIGRlZmluZSBNQVhfUEhZU01FTV9CSVRTCTM2CiAjIGVsc2UKQEAgLTI2LDggKzI2LDggQEAKICMgZW5kaWYKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KICMgZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCTI3IC8qIG1hdHQgLSAxMjggaXMgY29udmVuaWVudCByaWdodCBub3cgKi8KLSMgZGVmaW5lIE1BWF9QSFlTQUREUl9CSVRTCTQwCi0jIGRlZmluZSBNQVhfUEhZU01FTV9CSVRTCTQwCisjIGRlZmluZSBNQVhfUEhZU0FERFJfQklUUwk0NAorIyBkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwk0NAogI2VuZGlmCiAKICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXg4Ni9zcGlubG9jay5oCmluZGV4IDIzODA0YzEuLmJjNjM3NmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zcGlubG9jay5oCkBAIC03OCwxMSArNzgsMTEgQEAKIAlyZXR1cm4gKCgodG1wID4+IDgpICYgMHhmZikgLSAodG1wICYgMHhmZikpID4gMTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJc2hvcnQgaW5jID0gMHgwMTAwOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSAoCiAJCUxPQ0tfUFJFRklYICJ4YWRkdyAldzAsICUxXG4iCiAJCSIxOlx0IgogCQkiY21wYiAlaDAsICViMFxuXHQiCkBAIC05Miw0MiArOTIsNDAgQEAKIAkJLyogZG9uJ3QgbmVlZCBsZmVuY2UgaGVyZSwgYmVjYXVzZSBsb2FkcyBhcmUgaW4tb3JkZXIgKi8KIAkJImptcCAxYlxuIgogCQkiMjoiCi0JCToiK1EiIChpbmMpLCAiK20iIChsb2NrLT5zbG9jaykKKwkJOiAiK1EiIChpbmMpLCAiK20iIChsb2NrLT5zbG9jaykKIAkJOgotCQk6Im1lbW9yeSIsICJjYyIpOworCQk6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAogI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcDsKIAlzaG9ydCBuZXc7CiAKLQlhc20gdm9sYXRpbGUoCi0JCSJtb3Z3ICUyLCV3MFxuXHQiCi0JCSJjbXBiICVoMCwlYjBcblx0IgotCQkiam5lIDFmXG5cdCIKLQkJIm1vdncgJXcwLCV3MVxuXHQiCi0JCSJpbmNiICVoMVxuXHQiCi0JCSJsb2NrIDsgY21weGNoZ3cgJXcxLCUyXG5cdCIKLQkJIjE6IgotCQkic2V0ZSAlYjFcblx0IgotCQkibW92emJsICViMSwlMFxuXHQiCi0JCToiPSZhIiAodG1wKSwgIj1RIiAobmV3KSwgIittIiAobG9jay0+c2xvY2spCi0JCToKLQkJOiAibWVtb3J5IiwgImNjIik7CisJYXNtIHZvbGF0aWxlKCJtb3Z3ICUyLCV3MFxuXHQiCisJCSAgICAgImNtcGIgJWgwLCViMFxuXHQiCisJCSAgICAgImpuZSAxZlxuXHQiCisJCSAgICAgIm1vdncgJXcwLCV3MVxuXHQiCisJCSAgICAgImluY2IgJWgxXG5cdCIKKwkJICAgICAibG9jayA7IGNtcHhjaGd3ICV3MSwlMlxuXHQiCisJCSAgICAgIjE6IgorCQkgICAgICJzZXRlICViMVxuXHQiCisJCSAgICAgIm1vdnpibCAlYjEsJTBcblx0IgorCQkgICAgIDogIj0mYSIgKHRtcCksICI9USIgKG5ldyksICIrbSIgKGxvY2stPnNsb2NrKQorCQkgICAgIDoKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIAogCXJldHVybiB0bXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJVU5MT0NLX0xPQ0tfUFJFRklYICJpbmNiICUwIgotCQk6IittIiAobG9jay0+c2xvY2spCi0JCToKLQkJOiJtZW1vcnkiLCAiY2MiKTsKKwlhc20gdm9sYXRpbGUoVU5MT0NLX0xPQ0tfUFJFRklYICJpbmNiICUwIgorCQkgICAgIDogIittIiAobG9jay0+c2xvY2spCisJCSAgICAgOgorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQpAQCAtMTQ0LDYwICsxNDIsNTcgQEAKIAlyZXR1cm4gKCgodG1wID4+IDE2KSAmIDB4ZmZmZikgLSAodG1wICYgMHhmZmZmKSkgPiAxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlpbnQgaW5jID0gMHgwMDAxMDAwMDsKIAlpbnQgdG1wOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkibG9jayA7IHhhZGRsICUwLCAlMVxuIgotCQkibW92endsICV3MCwgJTJcblx0IgotCQkic2hybCAkMTYsICUwXG5cdCIKLQkJIjE6XHQiCi0JCSJjbXBsICUwLCAlMlxuXHQiCi0JCSJqZSAyZlxuXHQiCi0JCSJyZXAgOyBub3Bcblx0IgotCQkibW92endsICUxLCAlMlxuXHQiCi0JCS8qIGRvbid0IG5lZWQgbGZlbmNlIGhlcmUsIGJlY2F1c2UgbG9hZHMgYXJlIGluLW9yZGVyICovCi0JCSJqbXAgMWJcbiIKLQkJIjI6IgotCQk6IitRIiAoaW5jKSwgIittIiAobG9jay0+c2xvY2spLCAiPXIiICh0bXApCi0JCToKLQkJOiJtZW1vcnkiLCAiY2MiKTsKKwlhc20gdm9sYXRpbGUoImxvY2sgOyB4YWRkbCAlMCwgJTFcbiIKKwkJICAgICAibW92endsICV3MCwgJTJcblx0IgorCQkgICAgICJzaHJsICQxNiwgJTBcblx0IgorCQkgICAgICIxOlx0IgorCQkgICAgICJjbXBsICUwLCAlMlxuXHQiCisJCSAgICAgImplIDJmXG5cdCIKKwkJICAgICAicmVwIDsgbm9wXG5cdCIKKwkJICAgICAibW92endsICUxLCAlMlxuXHQiCisJCSAgICAgLyogZG9uJ3QgbmVlZCBsZmVuY2UgaGVyZSwgYmVjYXVzZSBsb2FkcyBhcmUgaW4tb3JkZXIgKi8KKwkJICAgICAiam1wIDFiXG4iCisJCSAgICAgIjI6IgorCQkgICAgIDogIitRIiAoaW5jKSwgIittIiAobG9jay0+c2xvY2spLCAiPXIiICh0bXApCisJCSAgICAgOgorCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlpbnQgdG1wOwogCWludCBuZXc7CiAKLQlhc20gdm9sYXRpbGUoCi0JCSJtb3ZsICUyLCUwXG5cdCIKLQkJIm1vdmwgJTAsJTFcblx0IgotCQkicm9sbCAkMTYsICUwXG5cdCIKLQkJImNtcGwgJTAsJTFcblx0IgotCQkiam5lIDFmXG5cdCIKLQkJImFkZGwgJDB4MDAwMTAwMDAsICUxXG5cdCIKLQkJImxvY2sgOyBjbXB4Y2hnbCAlMSwlMlxuXHQiCi0JCSIxOiIKLQkJInNldGUgJWIxXG5cdCIKLQkJIm1vdnpibCAlYjEsJTBcblx0IgotCQk6Ij0mYSIgKHRtcCksICI9ciIgKG5ldyksICIrbSIgKGxvY2stPnNsb2NrKQotCQk6Ci0JCTogIm1lbW9yeSIsICJjYyIpOworCWFzbSB2b2xhdGlsZSgibW92bCAlMiwlMFxuXHQiCisJCSAgICAgIm1vdmwgJTAsJTFcblx0IgorCQkgICAgICJyb2xsICQxNiwgJTBcblx0IgorCQkgICAgICJjbXBsICUwLCUxXG5cdCIKKwkJICAgICAiam5lIDFmXG5cdCIKKwkJICAgICAiYWRkbCAkMHgwMDAxMDAwMCwgJTFcblx0IgorCQkgICAgICJsb2NrIDsgY21weGNoZ2wgJTEsJTJcblx0IgorCQkgICAgICIxOiIKKwkJICAgICAic2V0ZSAlYjFcblx0IgorCQkgICAgICJtb3Z6YmwgJWIxLCUwXG5cdCIKKwkJICAgICA6ICI9JmEiICh0bXApLCAiPXIiIChuZXcpLCAiK20iIChsb2NrLT5zbG9jaykKKwkJICAgICA6CisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiAKIAlyZXR1cm4gdG1wOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCVVOTE9DS19MT0NLX1BSRUZJWCAiaW5jdyAlMCIKLQkJOiIrbSIgKGxvY2stPnNsb2NrKQotCQk6Ci0JCToibWVtb3J5IiwgImNjIik7CisJYXNtIHZvbGF0aWxlKFVOTE9DS19MT0NLX1BSRUZJWCAiaW5jdyAlMCIKKwkJICAgICA6ICIrbSIgKGxvY2stPnNsb2NrKQorCQkgICAgIDoKKwkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3JhdC5oIGIvaW5jbHVkZS9hc20teDg2L3NyYXQuaAppbmRleCAxNjVhYjRiLi5mNGJiYTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3JhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zcmF0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogU29tZSBvZiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgaGFzIGJlZW4gZ2xlYW5lZCBmcm9tIHRoZSA2NCBiaXQgCisgKiBTb21lIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBoYXMgYmVlbiBnbGVhbmVkIGZyb20gdGhlIDY0IGJpdAogICogZGlzY29udGlnbWVtIHN1cHBvcnQgY29kZSBiYXNlLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgSUJNIENvcnAuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3RyaW5nXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvc3RyaW5nXzMyLmgKaW5kZXggYzVkMTNhOC4uYjQ5MzY5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N0cmluZ18zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zdHJpbmdfMzIuaApAQCAtMyw3ICszLDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotLyogTGV0IGdjYyBkZWNpZGUgd2V0aGVyIHRvIGlubGluZSBvciB1c2UgdGhlIG91dCBvZiBsaW5lIGZ1bmN0aW9ucyAqLworLyogTGV0IGdjYyBkZWNpZGUgd2hldGhlciB0byBpbmxpbmUgb3IgdXNlIHRoZSBvdXQgb2YgbGluZSBmdW5jdGlvbnMgKi8KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDUFkKIGV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdHJpbmdfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdHJpbmdfNjQuaAppbmRleCBlNTgzZGE3Li41MmI1YWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3RyaW5nXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N0cmluZ182NC5oCkBAIC0zLDI2ICszLDI0IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLS8qIFdyaXR0ZW4gMjAwMiBieSBBbmRpIEtsZWVuICovIAorLyogV3JpdHRlbiAyMDAyIGJ5IEFuZGkgS2xlZW4gKi8KIAotLyogT25seSB1c2VkIGZvciBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuIFN0b2xlbiBmcm9tIGkzODYvc3RyaW5nLmggKi8gCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgotX19pbmxpbmVfbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBuKQorLyogT25seSB1c2VkIGZvciBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuIFN0b2xlbiBmcm9tIGkzODYvc3RyaW5nLmggKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19pbmxpbmVfbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbikKIHsKLXVuc2lnbmVkIGxvbmcgZDAsIGQxLCBkMjsKLV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJyZXAgOyBtb3ZzbFxuXHQiCi0JInRlc3RiICQyLCViNFxuXHQiCi0JImplIDFmXG5cdCIKLQkibW92c3dcbiIKLQkiMTpcdHRlc3RiICQxLCViNFxuXHQiCi0JImplIDJmXG5cdCIKLQkibW92c2JcbiIKLQkiMjoiCi0JOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpCi0JOiIwIiAobi80KSwgInEiIChuKSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkKLQk6ICJtZW1vcnkiKTsKLXJldHVybiAodG8pOworCXVuc2lnbmVkIGxvbmcgZDAsIGQxLCBkMjsKKwlhc20gdm9sYXRpbGUoInJlcCA7IG1vdnNsXG5cdCIKKwkJICAgICAidGVzdGIgJDIsJWI0XG5cdCIKKwkJICAgICAiamUgMWZcblx0IgorCQkgICAgICJtb3Zzd1xuIgorCQkgICAgICIxOlx0dGVzdGIgJDEsJWI0XG5cdCIKKwkJICAgICAiamUgMmZcblx0IgorCQkgICAgICJtb3ZzYlxuIgorCQkgICAgICIyOiIKKwkJICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikKKwkJICAgICA6ICIwIiAobiAvIDQpLCAicSIgKG4pLCAiMSIgKChsb25nKXRvKSwgIjIiICgobG9uZylmcm9tKQorCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiB0bzsKIH0KIAogLyogRXZlbiB3aXRoIF9fYnVpbHRpbl8gdGhlIGNvbXBpbGVyIG1heSBkZWNpZGUgdG8gdXNlIHRoZSBvdXQgb2YgbGluZQpAQCAtMzIsMjggKzMwLDMwIEBACiAjaWYgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiA0CiBleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbGVuKTsKICNlbHNlCi1leHRlcm4gdm9pZCAqX19tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBsZW4pOyAKLSNkZWZpbmUgbWVtY3B5KGRzdCxzcmMsbGVuKSBcCi0JKHsgc2l6ZV90IF9fbGVuID0gKGxlbik7CQkJCVwKLQkgICB2b2lkICpfX3JldDsJCQkJCQlcCi0JICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGxlbikgJiYgX19sZW4gPj0gNjQpCVwKLQkJIF9fcmV0ID0gX19tZW1jcHkoKGRzdCksKHNyYyksX19sZW4pOwkJXAotCSAgIGVsc2UJCQkJCQkJXAotCQkgX19yZXQgPSBfX2J1aWx0aW5fbWVtY3B5KChkc3QpLChzcmMpLF9fbGVuKTsJXAotCSAgIF9fcmV0OyB9KSAKK2V4dGVybiB2b2lkICpfX21lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbik7CisjZGVmaW5lIG1lbWNweShkc3QsIHNyYywgbGVuKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlzaXplX3QgX19sZW4gPSAobGVuKTsJCQkJCVwKKwl2b2lkICpfX3JldDsJCQkJCQlcCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGxlbikgJiYgX19sZW4gPj0gNjQpCQlcCisJCV9fcmV0ID0gX19tZW1jcHkoKGRzdCksIChzcmMpLCBfX2xlbik7CQlcCisJZWxzZQkJCQkJCQlcCisJCV9fcmV0ID0gX19idWlsdGluX21lbWNweSgoZHN0KSwgKHNyYyksIF9fbGVuKTsJXAorCV9fcmV0OwkJCQkJCQlcCit9KQogI2VuZGlmCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCiB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFCi12b2lkICogbWVtbW92ZSh2b2lkICogZGVzdCxjb25zdCB2b2lkICpzcmMsc2l6ZV90IGNvdW50KTsKK3ZvaWQgKm1lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpOwogCi1pbnQgbWVtY21wKGNvbnN0IHZvaWQgKiBjcyxjb25zdCB2b2lkICogY3Qsc2l6ZV90IGNvdW50KTsKLXNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqIHMpOwotY2hhciAqc3RyY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYyk7Ci1jaGFyICpzdHJjYXQoY2hhciAqIGRlc3QsIGNvbnN0IGNoYXIgKiBzcmMpOwotaW50IHN0cmNtcChjb25zdCBjaGFyICogY3MsY29uc3QgY2hhciAqIGN0KTsKK2ludCBtZW1jbXAoY29uc3Qgdm9pZCAqY3MsIGNvbnN0IHZvaWQgKmN0LCBzaXplX3QgY291bnQpOworc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKTsKK2NoYXIgKnN0cmNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOworY2hhciAqc3RyY2F0KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CitpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdXNwZW5kXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvc3VzcGVuZF8zMi5oCmluZGV4IDFiYmRhM2EuLjI0ZTFjMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdXNwZW5kXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N1c3BlbmRfMzIuaApAQCAtMTAsNyArMTAsNyBAQAogCiAvKiBpbWFnZSBvZiB0aGUgc2F2ZWQgcHJvY2Vzc29yIHN0YXRlICovCiBzdHJ1Y3Qgc2F2ZWRfY29udGV4dCB7Ci0gIAl1MTYgZXMsIGZzLCBncywgc3M7CisJdTE2IGVzLCBmcywgZ3MsIHNzOwogCXVuc2lnbmVkIGxvbmcgY3IwLCBjcjIsIGNyMywgY3I0OwogCXN0cnVjdCBkZXNjX3B0ciBnZHQ7CiAJc3RydWN0IGRlc2NfcHRyIGlkdDsKQEAgLTMyLDExICszMiwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGFjcGlfc2F2ZV9yZWdpc3Rlcl9zdGF0ZSh1bnNpZ25lZCBsb25nIHJldHVybl9wb2ludCkKIHsKIAlzYXZlZF9laXAgPSByZXR1cm5fcG9pbnQ7Ci0JYXNtIHZvbGF0aWxlICgibW92bCAlJWVzcCwlMCIgOiAiPW0iIChzYXZlZF9lc3ApKTsKLQlhc20gdm9sYXRpbGUgKCJtb3ZsICUlZWJwLCUwIiA6ICI9bSIgKHNhdmVkX2VicCkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdmwgJSVlYngsJTAiIDogIj1tIiAoc2F2ZWRfZWJ4KSk7Ci0JYXNtIHZvbGF0aWxlICgibW92bCAlJWVkaSwlMCIgOiAiPW0iIChzYXZlZF9lZGkpKTsKLQlhc20gdm9sYXRpbGUgKCJtb3ZsICUlZXNpLCUwIiA6ICI9bSIgKHNhdmVkX2VzaSkpOworCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzcCwlMCIgOiAiPW0iIChzYXZlZF9lc3ApKTsKKwlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYnAsJTAiIDogIj1tIiAoc2F2ZWRfZWJwKSk7CisJYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWJ4LCUwIiA6ICI9bSIgKHNhdmVkX2VieCkpOworCWFzbSB2b2xhdGlsZSgibW92bCAlJWVkaSwlMCIgOiAiPW0iIChzYXZlZF9lZGkpKTsKKwlhc20gdm9sYXRpbGUoIm1vdmwgJSVlc2ksJTAiIDogIj1tIiAoc2F2ZWRfZXNpKSk7CiB9CiAKICNkZWZpbmUgYWNwaV9yZXN0b3JlX3JlZ2lzdGVyX3N0YXRlKCkgIGRvIHt9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N1c3BlbmRfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdXNwZW5kXzY0LmgKaW5kZXggMmViOTJjYi4uZGMzMjYyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N1c3BlbmRfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc3VzcGVuZF82NC5oCkBAIC05LDggKzksNyBAQAogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KIAotc3RhdGljIGlubGluZSBpbnQKLWFyY2hfcHJlcGFyZV9zdXNwZW5kKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfc3VzcGVuZCh2b2lkKQogewogCXJldHVybiAwOwogfQpAQCAtMjUsNyArMjQsNyBAQAogICovCiBzdHJ1Y3Qgc2F2ZWRfY29udGV4dCB7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKLSAgCXUxNiBkcywgZXMsIGZzLCBncywgc3M7CisJdTE2IGRzLCBlcywgZnMsIGdzLCBzczsKIAl1bnNpZ25lZCBsb25nIGdzX2Jhc2UsIGdzX2tlcm5lbF9iYXNlLCBmc19iYXNlOwogCXVuc2lnbmVkIGxvbmcgY3IwLCBjcjIsIGNyMywgY3I0LCBjcjg7CiAJdW5zaWduZWQgbG9uZyBlZmVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N3aW90bGIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zd2lvdGxiLmgKaW5kZXggZjljNTg5NS4uZjVkOWU3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N3aW90bGIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc3dpb3RsYi5oCkBAIC04LDE1ICs4LDE1IEBACiBleHRlcm4gZG1hX2FkZHJfdCBzd2lvdGxiX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwKIAkJCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKIGV4dGVybiB2b2lkICpzd2lvdGxiX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpOworCQkJCSAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncyk7CiBleHRlcm4gdm9pZCBzd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKKwkJCQkgc2l6ZV90IHNpemUsIGludCBkaXIpOwogZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCQkgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKKwkJCQkJZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkJc2l6ZV90IHNpemUsIGludCBkaXIpOwogZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCQkgICAgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKKwkJCQkJICAgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXIpOwogZXh0ZXJuIHZvaWQgc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAogCQkJCQkgICAgICBkbWFfYWRkcl90IGRldl9hZGRyLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKQEAgLTI2LDE4ICsyNiwxOCBAQAogCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKIGV4dGVybiB2b2lkIHN3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQkgICAgIGludCBkaXIpOworCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkJCSAgICBpbnQgZGlyKTsKIGV4dGVybiB2b2lkIHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCQlpbnQgZGlyKTsKKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQkgICAgICAgaW50IGRpcik7CiBleHRlcm4gaW50IHN3aW90bGJfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOworCQkJICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOwogZXh0ZXJuIHZvaWQgc3dpb3RsYl91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOworCQkJICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOwogZXh0ZXJuIGludCBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpOwotZXh0ZXJuIHZvaWQgc3dpb3RsYl9mcmVlX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CitleHRlcm4gdm9pZCBzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CiBleHRlcm4gaW50IHN3aW90bGJfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOwogZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3luY19iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zeW5jX2JpdG9wcy5oCmluZGV4IGNiY2UwOGEuLmI0N2ExZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zeW5jX2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zeW5jX2JpdG9wcy5oCkBAIC0xMyw3ICsxMyw3IEBACiAgKiBiaXQgMCBpcyB0aGUgTFNCIG9mIGFkZHI7IGJpdCAzMiBpcyB0aGUgTFNCIG9mIChhZGRyKzEpLgogICovCiAKLSNkZWZpbmUgQUREUiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCisjZGVmaW5lIEFERFIgKCoodm9sYXRpbGUgbG9uZyAqKWFkZHIpCiAKIC8qKgogICogc3luY19zZXRfYml0IC0gQXRvbWljYWxseSBzZXQgYSBiaXQgaW4gbWVtb3J5CkBAIC0yMywxOSArMjMsMTUgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIFNlZSBfX3NldF9iaXQoKQogICogaWYgeW91IGRvIG5vdCByZXF1aXJlIHRoZSBhdG9taWMgZ3VhcmFudGVlcy4KICAqCi0gKiBOb3RlOiB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgcmVvcmRlcmVkCi0gKiBvbiBub24teDg2IGFyY2hpdGVjdHVyZXMsIHNvIGlmIHlvdSBhcmUgd3JpdGluZyBwb3J0YWJsZSBjb2RlLAotICogbWFrZSBzdXJlIG5vdCB0byByZWx5IG9uIGl0cyByZW9yZGVyaW5nIGd1YXJhbnRlZXMuCi0gKgogICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAogICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHN5bmNfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIHN5bmNfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGJ0c2wgJTEsJTAiCi0JCQkgICAgIDoiK20iIChBRERSKQotCQkJICAgICA6IklyIiAobnIpCi0JCQkgICAgIDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZSgibG9jazsgYnRzbCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKEFERFIpCisJCSAgICAgOiAiSXIiIChucikKKwkJICAgICA6ICJtZW1vcnkiKTsKIH0KIAogLyoqCkBAIC00OCwxMiArNDQsMTIgQEAKICAqIHlvdSBzaG91bGQgY2FsbCBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKSBhbmQvb3Igc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQogICogaW4gb3JkZXIgdG8gZW5zdXJlIGNoYW5nZXMgYXJlIHZpc2libGUgb24gb3RoZXIgcHJvY2Vzc29ycy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHN5bmNfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY19jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBidHJsICUxLCUwIgotCQkJICAgICA6IittIiAoQUREUikKLQkJCSAgICAgOiJJciIgKG5yKQotCQkJICAgICA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoImxvY2s7IGJ0cmwgJTEsJTAiCisJCSAgICAgOiAiK20iIChBRERSKQorCQkgICAgIDogIklyIiAobnIpCisJCSAgICAgOiAibWVtb3J5Iik7CiB9CiAKIC8qKgpAQCAtNjEsMTcgKzU3LDE2IEBACiAgKiBAbnI6IEJpdCB0byBjaGFuZ2UKICAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KICAqCi0gKiBjaGFuZ2VfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gSXQgbWF5IGJlCi0gKiByZW9yZGVyZWQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGFuIHg4Ni4KKyAqIHN5bmNfY2hhbmdlX2JpdCgpIGlzIGF0b21pYyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuCiAgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CiAgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc3luY19jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY19jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jazsgYnRjbCAlMSwlMCIKLQkJCSAgICAgOiIrbSIgKEFERFIpCi0JCQkgICAgIDoiSXIiIChucikKLQkJCSAgICAgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKCJsb2NrOyBidGNsICUxLCUwIgorCQkgICAgIDogIittIiAoQUREUikKKwkJICAgICA6ICJJciIgKG5yKQorCQkgICAgIDogIm1lbW9yeSIpOwogfQogCiAvKioKQEAgLTgwLDE2ICs3NSwxNSBAQAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKICAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KLSAqIEl0IG1heSBiZSByZW9yZGVyZWQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGFuIHg4Ni4KICAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogICovCi1zdGF0aWMgaW5saW5lIGludCBzeW5jX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHN5bmNfdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7CiAJaW50IG9sZGJpdDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBidHNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCi0JCQkgICAgIDoiPXIiIChvbGRiaXQpLCIrbSIgKEFERFIpCi0JCQkgICAgIDoiSXIiIChucikgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKCJsb2NrOyBidHNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCSAgICAgOiAiPXIiIChvbGRiaXQpLCAiK20iIChBRERSKQorCQkgICAgIDogIklyIiAobnIpIDogIm1lbW9yeSIpOwogCXJldHVybiBvbGRiaXQ7CiB9CiAKQEAgLTk5LDE2ICs5MywxNSBAQAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKICAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KLSAqIEl0IGNhbiBiZSByZW9yZGVyZGVyZWQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHg4Ni4KICAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogICovCi1zdGF0aWMgaW5saW5lIGludCBzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQorc3RhdGljIGlubGluZSBpbnQgc3luY190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewogCWludCBvbGRiaXQ7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jazsgYnRybCAlMiwlMVxuXHRzYmJsICUwLCUwIgotCQkJICAgICA6Ij1yIiAob2xkYml0KSwiK20iIChBRERSKQotCQkJICAgICA6IklyIiAobnIpIDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZSgibG9jazsgYnRybCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCQkgICAgIDogIj1yIiAob2xkYml0KSwgIittIiAoQUREUikKKwkJICAgICA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gb2xkYml0OwogfQogCkBAIC0xMjAsMzYgKzExMywxNyBAQAogICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgogICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHN5bmNfdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCBzeW5jX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewogCWludCBvbGRiaXQ7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jazsgYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUwIgotCQkJICAgICA6Ij1yIiAob2xkYml0KSwiK20iIChBRERSKQotCQkJICAgICA6IklyIiAobnIpIDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZSgibG9jazsgYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCQkgICAgIDogIj1yIiAob2xkYml0KSwgIittIiAoQUREUikKKwkJICAgICA6ICJJciIgKG5yKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gb2xkYml0OwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzeW5jX2NvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQlyZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmCi0JCSgoKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKWFkZHIpW25yID4+IDVdKSkgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc3luY192YXJfdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcikKLXsKLQlpbnQgb2xkYml0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgotCQkJICAgICA6Ij1yIiAob2xkYml0KQotCQkJICAgICA6Im0iIChBRERSKSwiSXIiIChucikpOwotCXJldHVybiBvbGRiaXQ7Ci19Ci0KLSNkZWZpbmUgc3luY190ZXN0X2JpdChucixhZGRyKQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8JCVwKLQkgc3luY19jb25zdGFudF90ZXN0X2JpdCgobnIpLChhZGRyKSkgOglcCi0JIHN5bmNfdmFyX3Rlc3RfYml0KChuciksKGFkZHIpKSkKKyNkZWZpbmUgc3luY190ZXN0X2JpdChuciwgYWRkcikgdGVzdF9iaXQobnIsIGFkZHIpCiAKICN1bmRlZiBBRERSCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXg4Ni9zeXN0ZW0uaAppbmRleCA5Y2ZmMDJmLi5hMmYwNGNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N5c3RlbS5oCkBAIC0yNywyMiArMjcsNDQgQEAKICAqIFNhdmluZyBlZmxhZ3MgaXMgaW1wb3J0YW50LiBJdCBzd2l0Y2hlcyBub3Qgb25seSBJT1BMIGJldHdlZW4gdGFza3MsCiAgKiBpdCBhbHNvIHByb3RlY3RzIG90aGVyIHRhc2tzIGZyb20gTlQgbGVha2luZyB0aHJvdWdoIHN5c2VudGVyIGV0Yy4KICAqLwotI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgZG8gewkJCQlcCi0JdW5zaWduZWQgbG9uZyBlc2ksIGVkaTsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCJwdXNoZmxcblx0IgkJLyogU2F2ZSBmbGFncyAqLwlcCi0JCSAgICAgInB1c2hsICUlZWJwXG5cdCIJCQkJCVwKLQkJICAgICAibW92bCAlJWVzcCwlMFxuXHQiCS8qIHNhdmUgRVNQICovCQlcCi0JCSAgICAgIm1vdmwgJTUsJSVlc3Bcblx0IgkvKiByZXN0b3JlIEVTUCAqLwlcCi0JCSAgICAgIm1vdmwgJDFmLCUxXG5cdCIJCS8qIHNhdmUgRUlQICovCQlcCi0JCSAgICAgInB1c2hsICU2XG5cdCIJCS8qIHJlc3RvcmUgRUlQICovCVwKLQkJICAgICAiam1wIF9fc3dpdGNoX3RvXG4iCQkJCVwKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCS8qCQkJCQkJCQlcCisJICogQ29udGV4dC1zd2l0Y2hpbmcgY2xvYmJlcnMgYWxsIHJlZ2lzdGVycywgc28gd2UgY2xvYmJlcglcCisJICogdGhlbSBleHBsaWNpdGx5LCB2aWEgdW51c2VkIG91dHB1dCB2YXJpYWJsZXMuCQlcCisJICogKEVBWCBhbmQgRUJQIGlzIG5vdCBsaXN0ZWQgYmVjYXVzZSBFQlAgaXMgc2F2ZWQvcmVzdG9yZWQJXAorCSAqIGV4cGxpY2l0bHkgZm9yIHdjaGFuIGFjY2VzcyBhbmQgRUFYIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YJXAorCSAqIF9fc3dpdGNoX3RvKCkpCQkJCQkJXAorCSAqLwkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZWJ4LCBlY3gsIGVkeCwgZXNpLCBlZGk7CQkJCVwKKwkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoInB1c2hmbFxuXHQiCQkvKiBzYXZlICAgIGZsYWdzICovCVwKKwkJICAgICAicHVzaGwgJSVlYnBcblx0IgkJLyogc2F2ZSAgICBFQlAgICAqLwlcCisJCSAgICAgIm1vdmwgJSVlc3AsJVtwcmV2X3NwXVxuXHQiCS8qIHNhdmUgICAgRVNQICAgKi8gXAorCQkgICAgICJtb3ZsICVbbmV4dF9zcF0sJSVlc3Bcblx0IgkvKiByZXN0b3JlIEVTUCAgICovIFwKKwkJICAgICAibW92bCAkMWYsJVtwcmV2X2lwXVxuXHQiCS8qIHNhdmUgICAgRUlQICAgKi8JXAorCQkgICAgICJwdXNobCAlW25leHRfaXBdXG5cdCIJLyogcmVzdG9yZSBFSVAgICAqLwlcCisJCSAgICAgImptcCBfX3N3aXRjaF90b1xuIgkvKiByZWdwYXJtIGNhbGwgICovCVwKIAkJICAgICAiMTpcdCIJCQkJCQlcCi0JCSAgICAgInBvcGwgJSVlYnBcblx0IgkJCQkJXAotCQkgICAgICJwb3BmbCIJCQkJCQlcCi0JCSAgICAgOiI9bSIgKHByZXYtPnRocmVhZC5zcCksICI9bSIgKHByZXYtPnRocmVhZC5pcCksCVwKLQkJICAgICAgIj1hIiAobGFzdCksICI9UyIgKGVzaSksICI9RCIgKGVkaSkJCVwKLQkJICAgICA6Im0iIChuZXh0LT50aHJlYWQuc3ApLCAibSIgKG5leHQtPnRocmVhZC5pcCksCVwKLQkJICAgICAgIjIiIChwcmV2KSwgImQiIChuZXh0KSk7CQkJCVwKKwkJICAgICAicG9wbCAlJWVicFxuXHQiCQkvKiByZXN0b3JlIEVCUCAgICovCVwKKwkJICAgICAicG9wZmxcbiIJCQkvKiByZXN0b3JlIGZsYWdzICovCVwKKwkJCQkJCQkJCVwKKwkJICAgICAvKiBvdXRwdXQgcGFyYW1ldGVycyAqLwkJCQlcCisJCSAgICAgOiBbcHJldl9zcF0gIj1tIiAocHJldi0+dGhyZWFkLnNwKSwJCVwKKwkJICAgICAgIFtwcmV2X2lwXSAiPW0iIChwcmV2LT50aHJlYWQuaXApLAkJXAorCQkgICAgICAgIj1hIiAobGFzdCksCQkJCQlcCisJCQkJCQkJCQlcCisJCSAgICAgICAvKiBjbG9iYmVyZWQgb3V0cHV0IHJlZ2lzdGVyczogKi8JCVwKKwkJICAgICAgICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCksCQlcCisJCSAgICAgICAiPVMiIChlc2kpLCAiPUQiIChlZGkpCQkJCVwKKwkJICAgICAgIAkJCQkJCQlcCisJCSAgICAgICAvKiBpbnB1dCBwYXJhbWV0ZXJzOiAqLwkJCQlcCisJCSAgICAgOiBbbmV4dF9zcF0gICJtIiAobmV4dC0+dGhyZWFkLnNwKSwJCVwKKwkJICAgICAgIFtuZXh0X2lwXSAgIm0iIChuZXh0LT50aHJlYWQuaXApLAkJXAorCQkgICAgICAgCQkJCQkJCVwKKwkJICAgICAgIC8qIHJlZ3Bhcm0gcGFyYW1ldGVycyBmb3IgX19zd2l0Y2hfdG8oKTogKi8JXAorCQkgICAgICAgW3ByZXZdICAgICAiYSIgKHByZXYpLAkJCQlcCisJCSAgICAgICBbbmV4dF0gICAgICJkIiAobmV4dCkpOwkJCQlcCiB9IHdoaWxlICgwKQogCiAvKgpAQCAtMTIyLDM1ICsxNDQsMzQgQEAKICAqLwogI2RlZmluZSBsb2Fkc2VnbWVudChzZWcsIHZhbHVlKQkJCVwKIAlhc20gdm9sYXRpbGUoIlxuIgkJCVwKLQkJIjE6XHQiCQkJCVwKLQkJIm1vdmwgJWswLCUlIiAjc2VnICJcbiIJCVwKLQkJIjI6XG4iCQkJCVwKLQkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJXAotCQkiMzpcdCIJCQkJXAotCQkibW92bCAlazEsICUlIiAjc2VnICJcblx0IglcCi0JCSJqbXAgMmJcbiIJCQlcCi0JCSIucHJldmlvdXNcbiIJCQlcCi0JCV9BU01fRVhUQUJMRSgxYiwzYikJCVwKLQkJOiA6InIiICh2YWx1ZSksICJyIiAoMCkpCisJCSAgICAgIjE6XHQiCQkJXAorCQkgICAgICJtb3ZsICVrMCwlJSIgI3NlZyAiXG4iCVwKKwkJICAgICAiMjpcbiIJCQlcCisJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJXAorCQkgICAgICIzOlx0IgkJCVwKKwkJICAgICAibW92bCAlazEsICUlIiAjc2VnICJcblx0IglcCisJCSAgICAgImptcCAyYlxuIgkJCVwKKwkJICAgICAiLnByZXZpb3VzXG4iCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLDNiKQlcCisJCSAgICAgOiA6InIiICh2YWx1ZSksICJyIiAoMCkpCiAKIAogLyoKICAqIFNhdmUgYSBzZWdtZW50IHJlZ2lzdGVyIGF3YXkKICAqLwotI2RlZmluZSBzYXZlc2VnbWVudChzZWcsIHZhbHVlKSBcCisjZGVmaW5lIHNhdmVzZWdtZW50KHNlZywgdmFsdWUpCQkJCVwKIAlhc20gdm9sYXRpbGUoIm1vdiAlJSIgI3NlZyAiLCUwIjoiPXJtIiAodmFsdWUpKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2xpbWl0KHVuc2lnbmVkIGxvbmcgc2VnbWVudCkKIHsKIAl1bnNpZ25lZCBsb25nIF9fbGltaXQ7Ci0JX19hc21fXygibHNsbCAlMSwlMCIKLQkJOiI9ciIgKF9fbGltaXQpOiJyIiAoc2VnbWVudCkpOwotCXJldHVybiBfX2xpbWl0KzE7CisJYXNtKCJsc2xsICUxLCUwIiA6ICI9ciIgKF9fbGltaXQpIDogInIiIChzZWdtZW50KSk7CisJcmV0dXJuIF9fbGltaXQgKyAxOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2NsdHModm9pZCkKIHsKLQlhc20gdm9sYXRpbGUgKCJjbHRzIik7CisJYXNtIHZvbGF0aWxlKCJjbHRzIik7CiB9CiAKIC8qCkBAIC0xNjUsNDMgKzE4Niw0MyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyMCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwotCWFzbSB2b2xhdGlsZSgibW92ICUlY3IwLCUwXG5cdCIgOiI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpKTsKKwlhc20gdm9sYXRpbGUoIm1vdiAlJWNyMCwlMFxuXHQiIDogIj1yIiAodmFsKSwgIj1tIiAoX19mb3JjZV9vcmRlcikpOwogCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfY3IwKHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWFzbSB2b2xhdGlsZSgibW92ICUwLCUlY3IwIjogOiJyIiAodmFsKSwgIm0iIChfX2ZvcmNlX29yZGVyKSk7CisJYXNtIHZvbGF0aWxlKCJtb3YgJTAsJSVjcjAiOiA6ICJyIiAodmFsKSwgIm0iIChfX2ZvcmNlX29yZGVyKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjIodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKLQlhc20gdm9sYXRpbGUoIm1vdiAlJWNyMiwlMFxuXHQiIDoiPXIiICh2YWwpLCAiPW0iIChfX2ZvcmNlX29yZGVyKSk7CisJYXNtIHZvbGF0aWxlKCJtb3YgJSVjcjIsJTBcblx0IiA6ICI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpKTsKIAlyZXR1cm4gdmFsOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIHZhbCkKIHsKLQlhc20gdm9sYXRpbGUoIm1vdiAlMCwlJWNyMiI6IDoiciIgKHZhbCksICJtIiAoX19mb3JjZV9vcmRlcikpOworCWFzbSB2b2xhdGlsZSgibW92ICUwLCUlY3IyIjogOiAiciIgKHZhbCksICJtIiAoX19mb3JjZV9vcmRlcikpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3IzKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJtb3YgJSVjcjMsJTBcblx0IiA6Ij1yIiAodmFsKSwgIj1tIiAoX19mb3JjZV9vcmRlcikpOworCWFzbSB2b2xhdGlsZSgibW92ICUlY3IzLCUwXG5cdCIgOiAiPXIiICh2YWwpLCAiPW0iIChfX2ZvcmNlX29yZGVyKSk7CiAJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV93cml0ZV9jcjModW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JYXNtIHZvbGF0aWxlKCJtb3YgJTAsJSVjcjMiOiA6InIiICh2YWwpLCAibSIgKF9fZm9yY2Vfb3JkZXIpKTsKKwlhc20gdm9sYXRpbGUoIm1vdiAlMCwlJWNyMyI6IDogInIiICh2YWwpLCAibSIgKF9fZm9yY2Vfb3JkZXIpKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyNCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwotCWFzbSB2b2xhdGlsZSgibW92ICUlY3I0LCUwXG5cdCIgOiI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpKTsKKwlhc20gdm9sYXRpbGUoIm1vdiAlJWNyNCwlMFxuXHQiIDogIj1yIiAodmFsKSwgIj1tIiAoX19mb3JjZV9vcmRlcikpOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTIxMyw3ICsyMzQsNyBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIAlhc20gdm9sYXRpbGUoIjE6IG1vdiAlJWNyNCwgJTBcbiIKIAkJICAgICAiMjpcbiIKLQkJICAgICBfQVNNX0VYVEFCTEUoMWIsMmIpCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAyYikKIAkJICAgICA6ICI9ciIgKHZhbCksICI9bSIgKF9fZm9yY2Vfb3JkZXIpIDogIjAiICgwKSk7CiAjZWxzZQogCXZhbCA9IG5hdGl2ZV9yZWFkX2NyNCgpOwpAQCAtMjIzLDcgKzI0NCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfY3I0KHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWFzbSB2b2xhdGlsZSgibW92ICUwLCUlY3I0IjogOiJyIiAodmFsKSwgIm0iIChfX2ZvcmNlX29yZGVyKSk7CisJYXNtIHZvbGF0aWxlKCJtb3YgJTAsJSVjcjQiOiA6ICJyIiAodmFsKSwgIm0iIChfX2ZvcmNlX29yZGVyKSk7CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC0yNDQsNiArMjY1LDcgQEAKIHsKIAlhc20gdm9sYXRpbGUoIndiaW52ZCI6IDogOiJtZW1vcnkiKTsKIH0KKwogI2lmZGVmIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2Vsc2UKQEAgLTI3Niw3ICsyOTgsNyBAQAogCWFzbSB2b2xhdGlsZSgiY2xmbHVzaCAlMCIgOiAiK20iICgqKHZvbGF0aWxlIGNoYXIgX19mb3JjZSAqKV9fcCkpOwogfQogCi0jZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKyNkZWZpbmUgbm9wKCkgYXNtIHZvbGF0aWxlICgibm9wIikKIAogdm9pZCBkaXNhYmxlX2hsdCh2b2lkKTsKIHZvaWQgZW5hYmxlX2hsdCh2b2lkKTsKQEAgLTI5NiwxNiArMzE4LDcgQEAKICAqLwogI2lmZGVmIENPTkZJR19YODZfMzIKIC8qCi0gKiBGb3Igbm93LCAid21iKCkiIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcsIGFzIGFsbAotICogSW50ZWwgQ1BVJ3MgZm9sbG93IHdoYXQgSW50ZWwgY2FsbHMgYSAqUHJvY2Vzc29yIE9yZGVyKiwKLSAqIGluIHdoaWNoIGFsbCB3cml0ZXMgYXJlIHNlZW4gaW4gdGhlIHByb2dyYW0gb3JkZXIgZXZlbgotICogb3V0c2lkZSB0aGUgQ1BVLgotICoKLSAqIEkgZXhwZWN0IGZ1dHVyZSBJbnRlbCBDUFUncyB0byBoYXZlIGEgd2Vha2VyIG9yZGVyaW5nLAotICogYnV0IEknZCBhbHNvIGV4cGVjdCB0aGVtIHRvIGZpbmFsbHkgZ2V0IHRoZWlyIGFjdCB0b2dldGhlcgotICogYW5kIGFkZCBzb21lIHJlYWwgbWVtb3J5IGJhcnJpZXJzIGlmIHNvLgotICoKLSAqIFNvbWUgbm9uIGludGVsIGNsb25lcyBzdXBwb3J0IG91dCBvZiBvcmRlciBzdG9yZS4gd21iKCkgY2Vhc2VzIHRvIGJlIGEKKyAqIFNvbWUgbm9uLUludGVsIGNsb25lcyBzdXBwb3J0IG91dCBvZiBvcmRlciBzdG9yZS4gd21iKCkgY2Vhc2VzIHRvIGJlIGEKICAqIG5vcCBmb3IgdGhlc2UuCiAgKi8KICNkZWZpbmUgbWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJtZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0yKQpAQCAtMzg0LDcgKzM5Nyw3IEBACiAjIGRlZmluZSBzbXBfd21iKCkJYmFycmllcigpCiAjZW5kaWYKICNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQotI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyAodm9pZCkgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7ICh2b2lkKXhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCiAjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90Y2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni90Y2UuaAppbmRleCBjZDk1NWQzLi5iMWE0ZWEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdGNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3RjZS5oCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIFRDRV9SUE5fTUFTSyAgICAgMHgwMDAwZmZmZmZmZmZmMDAwVUxMCiAKIGV4dGVybiB2b2lkIHRjZV9idWlsZChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgdW5zaWduZWQgbG9uZyBpbmRleCwKLSAgICAgICAgdW5zaWduZWQgaW50IG5wYWdlcywgdW5zaWduZWQgbG9uZyB1YWRkciwgaW50IGRpcmVjdGlvbik7CisJCSAgICAgIHVuc2lnbmVkIGludCBucGFnZXMsIHVuc2lnbmVkIGxvbmcgdWFkZHIsIGludCBkaXJlY3Rpb24pOwogZXh0ZXJuIHZvaWQgdGNlX2ZyZWUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGludCBucGFnZXMpOwogZXh0ZXJuIHZvaWQgKiBfX2luaXQgYWxsb2NfdGNlX3RhYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IGZyZWVfdGNlX3RhYmxlKHZvaWQgKnRibCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXg4Ni90aHJlYWRfaW5mby5oCmluZGV4IGQ1ZmQxMmYuLjc3MjQ0ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni90aHJlYWRfaW5mby5oCkBAIC0xLDUgKzEsMTQgQEAKKyNpZm5kZWYgX0FTTV9YODZfVEhSRUFEX0lORk9fSAogI2lmZGVmIENPTkZJR19YODZfMzIKICMgaW5jbHVkZSAidGhyZWFkX2luZm9fMzIuaCIKICNlbHNlCiAjIGluY2x1ZGUgInRocmVhZF9pbmZvXzY0LmgiCiAjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIGFyY2hfdGFza19jYWNoZV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKTsKK2V4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTsKKyNkZWZpbmUgYXJjaF90YXNrX2NhY2hlX2luaXQgYXJjaF90YXNrX2NhY2hlX2luaXQKKyNlbmRpZgorI2VuZGlmIC8qIF9BU01fWDg2X1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90aHJlYWRfaW5mb18zMi5oIGIvaW5jbHVkZS9hc20teDg2L3RocmVhZF9pbmZvXzMyLmgKaW5kZXggNWJkNTA4Mi4uNTMxODU5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RocmVhZF9pbmZvXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3RocmVhZF9pbmZvXzMyLmgKQEAgLTIwLDcgKzIwLDggQEAKICAqIGxvdyBsZXZlbCB0YXNrIGRhdGEgdGhhdCBlbnRyeS5TIG5lZWRzIGltbWVkaWF0ZSBhY2Nlc3MgdG8KICAqIC0gdGhpcyBzdHJ1Y3Qgc2hvdWxkIGZpdCBlbnRpcmVseSBpbnNpZGUgb2Ygb25lIGNhY2hlIGxpbmUKICAqIC0gdGhpcyBzdHJ1Y3Qgc2hhcmVzIHRoZSBzdXBlcnZpc29yIHN0YWNrIHBhZ2VzCi0gKiAtIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgY2hhbmdlZCwgdGhlIGFzc2VtYmx5IGNvbnN0YW50cyBtdXN0IGFsc28gYmUgY2hhbmdlZAorICogLSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGNoYW5nZWQsCisgKiAgIHRoZSBhc3NlbWJseSBjb25zdGFudHMgbXVzdCBhbHNvIGJlIGNoYW5nZWQKICAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMzAsMTggKzMxLDE2IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KIAl1bnNpZ25lZCBsb25nCQlzdGF0dXM7CQkvKiB0aHJlYWQtc3luY2hyb25vdXMgZmxhZ3MgKi8KIAlfX3UzMgkJCWNwdTsJCS8qIGN1cnJlbnQgQ1BVICovCi0JaW50CQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCi0KLQorCWludAkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsCisJCQkJCQkgICA8MCA9PiBCVUcgKi8KIAltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlOgotCQkJCQkgCSAgIDAtMHhCRkZGRkZGRiBmb3IgdXNlci10aGVhZAotCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwtdGhyZWFkCisJCQkJCQkgICAwLTB4QkZGRkZGRkYgdXNlci10aHJlYWQKKwkJCQkJCSAgIDAtMHhGRkZGRkZGRiBrZXJuZWwtdGhyZWFkCiAJCQkJCQkqLwogCXZvaWQJCQkqc3lzZW50ZXJfcmV0dXJuOwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICAgIHJlc3RhcnRfYmxvY2s7Ci0KLQl1bnNpZ25lZCBsb25nICAgICAgICAgICBwcmV2aW91c19lc3A7ICAgLyogRVNQIG9mIHRoZSBwcmV2aW91cyBzdGFjayBpbiBjYXNlCi0JCQkJCQkgICBvZiBuZXN0ZWQgKElSUSkgc3RhY2tzCisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgcHJldmlvdXNfZXNwOyAgIC8qIEVTUCBvZiB0aGUgcHJldmlvdXMgc3RhY2sgaW4KKwkJCQkJCSAgIGNhc2Ugb2YgbmVzdGVkIChJUlEpIHN0YWNrcwogCQkJCQkJKi8KIAlfX3U4CQkJc3VwZXJ2aXNvcl9zdGFja1swXTsKIH07CkBAIC05MCwyNCArODksMjMgQEAKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewotCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopKGN1cnJlbnRfc3RhY2tfcG9pbnRlciAmIH4oVEhSRUFEX1NJWkUgLSAxKSk7CisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKKwkJKGN1cnJlbnRfc3RhY2tfcG9pbnRlciAmIH4oVEhSRUFEX1NJWkUgLSAxKSk7CiB9CiAKIC8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgXAotCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHwgX19HRlBfWkVSTywgZ2V0X29yZGVyKFRIUkVBRF9TSVpFKSkpCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikJCQlcCisJX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgZ2V0X29yZGVyKFRIUkVBRF9TSVpFKSkpCiAjZWxzZQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spICgoc3RydWN0IHRocmVhZF9pbmZvICopIFwKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKSAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQkJCVwKIAlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihUSFJFQURfU0laRSkpKQogI2VuZGlmCiAKLSNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyhpbmZvKQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKShpbmZvKSwgZ2V0X29yZGVyKFRIUkVBRF9TSVpFKSkKLQogI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCi0jZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpIFwKKyNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykJIFwKIAltb3ZsICQtVEhSRUFEX1NJWkUsIHJlZzsgXAogCWFuZGwgJWVzcCwgcmVnCiAKQEAgLTExOSwxNCArMTE3LDE2IEBACiAKIC8qCiAgKiB0aHJlYWQgaW5mb3JtYXRpb24gZmxhZ3MKLSAqIC0gdGhlc2UgYXJlIHByb2Nlc3Mgc3RhdGUgZmxhZ3MgdGhhdCB2YXJpb3VzIGFzc2VtYmx5IGZpbGVzIG1heSBuZWVkIHRvIGFjY2VzcworICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyB0aGF0IHZhcmlvdXMKKyAqICAgYXNzZW1ibHkgZmlsZXMgbWF5IG5lZWQgdG8gYWNjZXNzCiAgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGFyZSBpbiBMU1cKICAqIC0gb3RoZXIgZmxhZ3MgaW4gTVNXCiAgKi8KICNkZWZpbmUgVElGX1NZU0NBTExfVFJBQ0UJMAkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwogI2RlZmluZSBUSUZfU0lHUEVORElORwkJMQkvKiBzaWduYWwgcGVuZGluZyAqLwogI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTIJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwotI2RlZmluZSBUSUZfU0lOR0xFU1RFUAkJMwkvKiByZXN0b3JlIHNpbmdsZXN0ZXAgb24gcmV0dXJuIHRvIHVzZXIgbW9kZSAqLworI2RlZmluZSBUSUZfU0lOR0xFU1RFUAkJMwkvKiByZXN0b3JlIHNpbmdsZXN0ZXAgb24gcmV0dXJuIHRvCisJCQkJCSAgIHVzZXIgbW9kZSAqLwogI2RlZmluZSBUSUZfSVJFVAkJNAkvKiByZXR1cm4gd2l0aCBpcmV0ICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX0VNVQkJNQkvKiBzeXNjYWxsIGVtdWxhdGlvbiBhY3RpdmUgKi8KICNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJNgkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLwpAQCAtMTQzLDM2ICsxNDMsMzYgQEAKICNkZWZpbmUgVElGX0RTX0FSRUFfTVNSIAkyMyAgICAgIC8qIHVzZXMgdGhyZWFkX3N0cnVjdC5kc19hcmVhX21zciAqLwogI2RlZmluZSBUSUZfQlRTX1RSQUNFX1RTICAgICAgICAyNCAgICAgIC8qIHJlY29yZCBzY2hlZHVsaW5nIGV2ZW50IHRpbWVzdGFtcHMgKi8KIAotI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQotI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKLSNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCi0jZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDE8PFRJRl9TSU5HTEVTVEVQKQotI2RlZmluZSBfVElGX0lSRVQJCSgxPDxUSUZfSVJFVCkKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0VNVQkoMTw8VElGX1NZU0NBTExfRU1VKQotI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDE8PFRJRl9TWVNDQUxMX0FVRElUKQotI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxPDxUSUZfU0VDQ09NUCkKLSNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCi0jZGVmaW5lIF9USUZfSFJUSUNLX1JFU0NIRUQJKDE8PFRJRl9IUlRJQ0tfUkVTQ0hFRCkKLSNkZWZpbmUgX1RJRl9ERUJVRwkJKDE8PFRJRl9ERUJVRykKLSNkZWZpbmUgX1RJRl9JT19CSVRNQVAJCSgxPDxUSUZfSU9fQklUTUFQKQotI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCi0jZGVmaW5lIF9USUZfTk9UU0MJCSgxPDxUSUZfTk9UU0MpCi0jZGVmaW5lIF9USUZfRk9SQ0VEX1RGCQkoMTw8VElGX0ZPUkNFRF9URikKLSNkZWZpbmUgX1RJRl9ERUJVR0NUTE1TUgkoMTw8VElGX0RFQlVHQ1RMTVNSKQotI2RlZmluZSBfVElGX0RTX0FSRUFfTVNSCSgxPDxUSUZfRFNfQVJFQV9NU1IpCi0jZGVmaW5lIF9USUZfQlRTX1RSQUNFX1RTCSgxPDxUSUZfQlRTX1RSQUNFX1RTKQorI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgPDwgVElGX1NJTkdMRVNURVApCisjZGVmaW5lIF9USUZfSVJFVAkJKDEgPDwgVElGX0lSRVQpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9FTVUJKDEgPDwgVElGX1NZU0NBTExfRU1VKQorI2RlZmluZSBfVElGX1NZU0NBTExfQVVESVQJKDEgPDwgVElGX1NZU0NBTExfQVVESVQpCisjZGVmaW5lIF9USUZfU0VDQ09NUAkJKDEgPDwgVElGX1NFQ0NPTVApCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfSFJUSUNLX1JFU0NIRUQJKDEgPDwgVElGX0hSVElDS19SRVNDSEVEKQorI2RlZmluZSBfVElGX0RFQlVHCQkoMSA8PCBUSUZfREVCVUcpCisjZGVmaW5lIF9USUZfSU9fQklUTUFQCQkoMSA8PCBUSUZfSU9fQklUTUFQKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKKyNkZWZpbmUgX1RJRl9OT1RTQwkJKDEgPDwgVElGX05PVFNDKQorI2RlZmluZSBfVElGX0ZPUkNFRF9URgkJKDEgPDwgVElGX0ZPUkNFRF9URikKKyNkZWZpbmUgX1RJRl9ERUJVR0NUTE1TUgkoMSA8PCBUSUZfREVCVUdDVExNU1IpCisjZGVmaW5lIF9USUZfRFNfQVJFQV9NU1IJKDEgPDwgVElGX0RTX0FSRUFfTVNSKQorI2RlZmluZSBfVElGX0JUU19UUkFDRV9UUwkoMSA8PCBUSUZfQlRTX1RSQUNFX1RTKQogCiAvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCi0jZGVmaW5lIF9USUZfV09SS19NQVNLIFwKLSAgKDB4MDAwMEZGRkYgJiB+KF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IFwKLQkJICBfVElGX1NFQ0NPTVAgfCBfVElGX1NZU0NBTExfRU1VKSkKKyNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCQkJCQkJXAorCSgweDAwMDBGRkZGICYgfihfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfQVVESVQgfAlcCisJCQlfVElGX1NFQ0NPTVAgfCBfVElGX1NZU0NBTExfRU1VKSkKIC8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCSgweDAwMDBGRkZGICYgfl9USUZfU0VDQ09NUCkKIAogLyogZmxhZ3MgdG8gY2hlY2sgaW4gX19zd2l0Y2hfdG8oKSAqLwotI2RlZmluZSBfVElGX1dPUktfQ1RYU1cgXAotICAgIChfVElGX0lPX0JJVE1BUCB8IF9USUZfTk9UU0MgfCBfVElGX0RFQlVHQ1RMTVNSIHwgXAotICAgICBfVElGX0RTX0FSRUFfTVNSIHwgX1RJRl9CVFNfVFJBQ0VfVFMpCisjZGVmaW5lIF9USUZfV09SS19DVFhTVwkJCQkJCVwKKwkoX1RJRl9JT19CSVRNQVAgfCBfVElGX05PVFNDIHwgX1RJRl9ERUJVR0NUTE1TUiB8CVwKKwkgX1RJRl9EU19BUkVBX01TUiB8IF9USUZfQlRTX1RSQUNFX1RTKQogI2RlZmluZSBfVElGX1dPUktfQ1RYU1dfUFJFViBfVElGX1dPUktfQ1RYU1cKICNkZWZpbmUgX1RJRl9XT1JLX0NUWFNXX05FWFQgKF9USUZfV09SS19DVFhTVyB8IF9USUZfREVCVUcpCiAKQEAgLTE4NCw4ICsxODQsMTAgQEAKICAqIGV2ZXIgdG91Y2hlcyBvdXIgdGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cywgc28gd2UgZG9uJ3QKICAqIGhhdmUgdG8gd29ycnkgYWJvdXQgYXRvbWljIGFjY2Vzc2VzLgogICovCi0jZGVmaW5lIFRTX1VTRURGUFUJCTB4MDAwMQkvKiBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrIHRoaXMgcXVhbnR1bSAoU01QKSAqLwotI2RlZmluZSBUU19QT0xMSU5HCQkweDAwMDIJLyogVHJ1ZSBpZiBpbiBpZGxlIGxvb3AgYW5kIG5vdCBzbGVlcGluZyAqLworI2RlZmluZSBUU19VU0VERlBVCQkweDAwMDEJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzaworCQkJCQkgICB0aGlzIHF1YW50dW0gKFNNUCkgKi8KKyNkZWZpbmUgVFNfUE9MTElORwkJMHgwMDAyCS8qIFRydWUgaWYgaW4gaWRsZSBsb29wCisJCQkJCSAgIGFuZCBub3Qgc2xlZXBpbmcgKi8KIAogI2RlZmluZSB0c2tfaXNfcG9sbGluZyh0KSAodGFza190aHJlYWRfaW5mbyh0KS0+c3RhdHVzICYgVFNfUE9MTElORykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3RocmVhZF9pbmZvXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm9fNjQuaAppbmRleCA2YzliMjE0Li5lZDY2NGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm9fNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdGhyZWFkX2luZm9fNjQuaApAQCAtMjksOSArMjksOSBAQAogCV9fdTMyCQkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KIAlfX3UzMgkJCXN0YXR1czsJCS8qIHRocmVhZCBzeW5jaHJvbm91cyBmbGFncyAqLwogCV9fdTMyCQkJY3B1OwkJLyogY3VycmVudCBDUFUgKi8KLQlpbnQgCQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCi0KLQltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CQorCWludCAJCQlwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLAorCQkJCQkJICAgPDAgPT4gQlVHICovCisJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICAgIHJlc3RhcnRfYmxvY2s7CiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCiAJdm9pZCBfX3VzZXIJCSpzeXNlbnRlcl9yZXR1cm47CkBAIC02MSwxNyArNjEsMTcgQEAKICNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQoteyAKK3sKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwogCXRpID0gKHZvaWQgKikocmVhZF9wZGEoa2VybmVsc3RhY2spICsgUERBX1NUQUNLT0ZGU0VUIC0gVEhSRUFEX1NJWkUpOwotCXJldHVybiB0aTsgCisJcmV0dXJuIHRpOwogfQogCiAvKiBkbyBub3QgdXNlIGluIGludGVycnVwdCBjb250ZXh0ICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqc3RhY2tfdGhyZWFkX2luZm8odm9pZCkKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOwotCV9fYXNtX18oImFuZHEgJSVyc3AsJTA7ICI6Ij1yIiAodGkpIDogIjAiICh+KFRIUkVBRF9TSVpFIC0gMSkpKTsKKwlhc20oImFuZHEgJSVyc3AsJTA7ICIgOiAiPXIiICh0aSkgOiAiMCIgKH4oVEhSRUFEX1NJWkUgLSAxKSkpOwogCXJldHVybiB0aTsKIH0KIApAQCAtODIsMTAgKzgyLDggQEAKICNkZWZpbmUgVEhSRUFEX0ZMQUdTIEdGUF9LRVJORUwKICNlbmRpZgogCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykgXAotCSgoc3RydWN0IHRocmVhZF9pbmZvICopIF9fZ2V0X2ZyZWVfcGFnZXMoVEhSRUFEX0ZMQUdTLCBUSFJFQURfT1JERVIpKQotCi0jZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpICh0aSksIFRIUkVBRF9PUkRFUikKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJCVwKKwkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKV9fZ2V0X2ZyZWVfcGFnZXMoVEhSRUFEX0ZMQUdTLCBUSFJFQURfT1JERVIpKQogCiAjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCiAKQEAgLTk4LDcgKzk2LDggQEAKIAogLyoKICAqIHRocmVhZCBpbmZvcm1hdGlvbiBmbGFncwotICogLSB0aGVzZSBhcmUgcHJvY2VzcyBzdGF0ZSBmbGFncyB0aGF0IHZhcmlvdXMgYXNzZW1ibHkgZmlsZXMgbWF5IG5lZWQgdG8gYWNjZXNzCisgKiAtIHRoZXNlIGFyZSBwcm9jZXNzIHN0YXRlIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcworICogICBtYXkgbmVlZCB0byBhY2Nlc3MKICAqIC0gcGVuZGluZyB3b3JrLXRvLWJlLWRvbmUgZmxhZ3MgYXJlIGluIExTVwogICogLSBvdGhlciBmbGFncyBpbiBNU1cKICAqIFdhcm5pbmc6IGxheW91dCBvZiBMU1cgaXMgaGFyZGNvZGVkIGluIGVudHJ5LlMKQEAgLTExNCw3ICsxMTMsNyBAQAogI2RlZmluZSBUSUZfTUNFX05PVElGWQkJMTAJLyogbm90aWZ5IHVzZXJzcGFjZSBvZiBhbiBNQ0UgKi8KICNkZWZpbmUgVElGX0hSVElDS19SRVNDSEVECTExCS8qIHJlcHJvZ3JhbSBocnRpY2sgdGltZXIgKi8KIC8qIDE2IGZyZWUgKi8KLSNkZWZpbmUgVElGX0lBMzIJCTE3CS8qIDMyYml0IHByb2Nlc3MgKi8gCisjZGVmaW5lIFRJRl9JQTMyCQkxNwkvKiAzMmJpdCBwcm9jZXNzICovCiAjZGVmaW5lIFRJRl9GT1JLCQkxOAkvKiByZXRfZnJvbV9mb3JrICovCiAjZGVmaW5lIFRJRl9BQklfUEVORElORwkJMTkKICNkZWZpbmUgVElGX01FTURJRQkJMjAKQEAgLTEyNSw0MCArMTI0LDQzIEBACiAjZGVmaW5lIFRJRl9ERUJVR0NUTE1TUgkJMjUJLyogdXNlcyB0aHJlYWRfc3RydWN0LmRlYnVnY3RsbXNyICovCiAjZGVmaW5lIFRJRl9EU19BUkVBX01TUgkJMjYgICAgICAvKiB1c2VzIHRocmVhZF9zdHJ1Y3QuZHNfYXJlYV9tc3IgKi8KICNkZWZpbmUgVElGX0JUU19UUkFDRV9UUwkyNyAgICAgIC8qIHJlY29yZCBzY2hlZHVsaW5nIGV2ZW50IHRpbWVzdGFtcHMgKi8KKyNkZWZpbmUgVElGX05PVFNDCQkyOAkvKiBUU0MgaXMgbm90IGFjY2Vzc2libGUgaW4gdXNlcmxhbmQgKi8KIAotI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQotI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKLSNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMTw8VElGX1NJTkdMRVNURVApCi0jZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQotI2RlZmluZSBfVElGX0lSRVQJCSgxPDxUSUZfSVJFVCkKLSNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKLSNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMTw8VElGX1NFQ0NPTVApCi0jZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQotI2RlZmluZSBfVElGX01DRV9OT1RJRlkJCSgxPDxUSUZfTUNFX05PVElGWSkKLSNkZWZpbmUgX1RJRl9IUlRJQ0tfUkVTQ0hFRAkoMTw8VElGX0hSVElDS19SRVNDSEVEKQotI2RlZmluZSBfVElGX0lBMzIJCSgxPDxUSUZfSUEzMikKLSNkZWZpbmUgX1RJRl9GT1JLCQkoMTw8VElGX0ZPUkspCi0jZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDE8PFRJRl9BQklfUEVORElORykKLSNkZWZpbmUgX1RJRl9ERUJVRwkJKDE8PFRJRl9ERUJVRykKLSNkZWZpbmUgX1RJRl9JT19CSVRNQVAJCSgxPDxUSUZfSU9fQklUTUFQKQotI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCi0jZGVmaW5lIF9USUZfRk9SQ0VEX1RGCQkoMTw8VElGX0ZPUkNFRF9URikKLSNkZWZpbmUgX1RJRl9ERUJVR0NUTE1TUgkoMTw8VElGX0RFQlVHQ1RMTVNSKQotI2RlZmluZSBfVElGX0RTX0FSRUFfTVNSCSgxPDxUSUZfRFNfQVJFQV9NU1IpCi0jZGVmaW5lIF9USUZfQlRTX1RSQUNFX1RTCSgxPDxUSUZfQlRTX1RSQUNFX1RTKQorI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCisjZGVmaW5lIF9USUZfU0lOR0xFU1RFUAkJKDEgPDwgVElGX1NJTkdMRVNURVApCisjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfSVJFVAkJKDEgPDwgVElGX0lSRVQpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMSA8PCBUSUZfU0VDQ09NUCkKKyNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9NQ0VfTk9USUZZCQkoMSA8PCBUSUZfTUNFX05PVElGWSkKKyNkZWZpbmUgX1RJRl9IUlRJQ0tfUkVTQ0hFRAkoMSA8PCBUSUZfSFJUSUNLX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfSUEzMgkJKDEgPDwgVElGX0lBMzIpCisjZGVmaW5lIF9USUZfRk9SSwkJKDEgPDwgVElGX0ZPUkspCisjZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDEgPDwgVElGX0FCSV9QRU5ESU5HKQorI2RlZmluZSBfVElGX0RFQlVHCQkoMSA8PCBUSUZfREVCVUcpCisjZGVmaW5lIF9USUZfSU9fQklUTUFQCQkoMSA8PCBUSUZfSU9fQklUTUFQKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKKyNkZWZpbmUgX1RJRl9GT1JDRURfVEYJCSgxIDw8IFRJRl9GT1JDRURfVEYpCisjZGVmaW5lIF9USUZfREVCVUdDVExNU1IJKDEgPDwgVElGX0RFQlVHQ1RMTVNSKQorI2RlZmluZSBfVElGX0RTX0FSRUFfTVNSCSgxIDw8IFRJRl9EU19BUkVBX01TUikKKyNkZWZpbmUgX1RJRl9CVFNfVFJBQ0VfVFMJKDEgPDwgVElGX0JUU19UUkFDRV9UUykKKyNkZWZpbmUgX1RJRl9OT1RTQwkJKDEgPDwgVElGX05PVFNDKQogCiAvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCi0jZGVmaW5lIF9USUZfV09SS19NQVNLIFwKLSAgKDB4MDAwMEZGRkYgJiB+KF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TSU5HTEVTVEVQfF9USUZfU0VDQ09NUCkpCisjZGVmaW5lIF9USUZfV09SS19NQVNLCQkJCQkJCVwKKwkoMHgwMDAwRkZGRiAmCQkJCQkJCVwKKwkgfihfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0lOR0xFU1RFUHxfVElGX1NFQ0NPTVApKQogLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHVzZXIgc3BhY2UgKi8KICNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sgKDB4MDAwMEZGRkYgJiB+X1RJRl9TRUNDT01QKQogCi0jZGVmaW5lIF9USUZfRE9fTk9USUZZX01BU0sgXAorI2RlZmluZSBfVElGX0RPX05PVElGWV9NQVNLCQkJCQkJXAogCShfVElGX1NJR1BFTkRJTkd8X1RJRl9TSU5HTEVTVEVQfF9USUZfTUNFX05PVElGWXxfVElGX0hSVElDS19SRVNDSEVEKQogCiAvKiBmbGFncyB0byBjaGVjayBpbiBfX3N3aXRjaF90bygpICovCi0jZGVmaW5lIF9USUZfV09SS19DVFhTVyBcCi0gICAgKF9USUZfSU9fQklUTUFQfF9USUZfREVCVUdDVExNU1J8X1RJRl9EU19BUkVBX01TUnxfVElGX0JUU19UUkFDRV9UUykKKyNkZWZpbmUgX1RJRl9XT1JLX0NUWFNXCQkJCQkJCVwKKwkoX1RJRl9JT19CSVRNQVB8X1RJRl9ERUJVR0NUTE1TUnxfVElGX0RTX0FSRUFfTVNSfF9USUZfQlRTX1RSQUNFX1RTfF9USUZfTk9UU0MpCiAjZGVmaW5lIF9USUZfV09SS19DVFhTV19QUkVWIF9USUZfV09SS19DVFhTVwogI2RlZmluZSBfVElGX1dPUktfQ1RYU1dfTkVYVCAoX1RJRl9XT1JLX0NUWFNXfF9USUZfREVCVUcpCiAKQEAgLTE3MSw5ICsxNzMsMTEgQEAKICAqIGV2ZXIgdG91Y2hlcyBvdXIgdGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cywgc28gd2UgZG9uJ3QKICAqIGhhdmUgdG8gd29ycnkgYWJvdXQgYXRvbWljIGFjY2Vzc2VzLgogICovCi0jZGVmaW5lIFRTX1VTRURGUFUJCTB4MDAwMQkvKiBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrIHRoaXMgcXVhbnR1bSAoU01QKSAqLworI2RlZmluZSBUU19VU0VERlBVCQkweDAwMDEJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzaworCQkJCQkgICB0aGlzIHF1YW50dW0gKFNNUCkgKi8KICNkZWZpbmUgVFNfQ09NUEFUCQkweDAwMDIJLyogMzJiaXQgc3lzY2FsbCBhY3RpdmUgKi8KLSNkZWZpbmUgVFNfUE9MTElORwkJMHgwMDA0CS8qIHRydWUgaWYgaW4gaWRsZSBsb29wIGFuZCBub3Qgc2xlZXBpbmcgKi8KKyNkZWZpbmUgVFNfUE9MTElORwkJMHgwMDA0CS8qIHRydWUgaWYgaW4gaWRsZSBsb29wCisJCQkJCSAgIGFuZCBub3Qgc2xlZXBpbmcgKi8KIAogI2RlZmluZSB0c2tfaXNfcG9sbGluZyh0KSAodGFza190aHJlYWRfaW5mbyh0KS0+c3RhdHVzICYgVFNfUE9MTElORykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS14ODYvdGxiZmx1c2guaAppbmRleCAzOTk4NzA5Li4wYzA2NzRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdGxiZmx1c2guaApAQCAtMzIsNyArMzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19uYXRpdmVfZmx1c2hfdGxiX3NpbmdsZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oImludmxwZyAoJTApIiA6OiJyIiAoYWRkcikgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKCJpbnZscGcgKCUwKSIgOjoiciIgKGFkZHIpIDogIm1lbW9yeSIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGJfYWxsKHZvaWQpCkBAIC0xMzQsOCArMTM0LDcgQEAKICNkZWZpbmUgVExCU1RBVEVfTEFaWQkyCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCi1zdHJ1Y3QgdGxiX3N0YXRlCi17CitzdHJ1Y3QgdGxiX3N0YXRlIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07CiAJaW50IHN0YXRlOwogCWNoYXIgX19jYWNoZWxpbmVfcGFkZGluZ1tMMV9DQUNIRV9CWVRFUy04XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5LmgKaW5kZXggOGFmMDVhOS4uMjIwNzMyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5LmgKQEAgLTMyLDE1ICszMiwyMCBAQAogLyogTWFwcGluZ3MgYmV0d2VlbiBsb2dpY2FsIGNwdSBudW1iZXIgYW5kIG5vZGUgbnVtYmVyICovCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIGludCBjcHVfdG9fbm9kZV9tYXBbXTsKLQogI2Vsc2UKLURFQ0xBUkVfUEVSX0NQVShpbnQsIHg4Nl9jcHVfdG9fbm9kZV9tYXApOwotZXh0ZXJuIGludCB4ODZfY3B1X3RvX25vZGVfbWFwX2luaXRbXTsKLWV4dGVybiB2b2lkICp4ODZfY3B1X3RvX25vZGVfbWFwX2Vhcmx5X3B0cjsKIC8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBOb2RlLiAqLwogI2RlZmluZSBudW1hX25vZGVfaWQoKQkJKGVhcmx5X2NwdV90b19ub2RlKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpKQogI2VuZGlmCiAKK0RFQ0xBUkVfUEVSX0NQVShpbnQsIHg4Nl9jcHVfdG9fbm9kZV9tYXApOworCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIGludCB4ODZfY3B1X3RvX25vZGVfbWFwX2luaXRbXTsKK2V4dGVybiB2b2lkICp4ODZfY3B1X3RvX25vZGVfbWFwX2Vhcmx5X3B0cjsKKyNlbHNlCisjZGVmaW5lIHg4Nl9jcHVfdG9fbm9kZV9tYXBfZWFybHlfcHRyIE5VTEwKKyNlbmRpZgorCiBleHRlcm4gY3B1bWFza190IG5vZGVfdG9fY3B1bWFza19tYXBbXTsKIAogI2RlZmluZSBOVU1BX05PX05PREUJKC0xKQpAQCAtNTQsNiArNTksOCBAQAogfQogCiAjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisKKyNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW5saW5lIGludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQogewogCWludCAqY3B1X3RvX25vZGVfbWFwID0geDg2X2NwdV90b19ub2RlX21hcF9lYXJseV9wdHI7CkBAIC02NSwyMiArNzIsMzMgQEAKIAllbHNlCiAJCXJldHVybiBOVU1BX05PX05PREU7CiB9CisjZWxzZQorI2RlZmluZQllYXJseV9jcHVfdG9fbm9kZShjcHUpCWNwdV90b19ub2RlKGNwdSkKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQogewogI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKIAlpZiAoeDg2X2NwdV90b19ub2RlX21hcF9lYXJseV9wdHIpIHsKIAkJcHJpbnRrKCJLRVJOX05PVElDRSBjcHVfdG9fbm9kZSglZCk6IHVzYWdlIHRvbyBlYXJseSFcbiIsCi0JCQkoaW50KWNwdSk7CisJCSAgICAgICAoaW50KWNwdSk7CiAJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuICgoaW50ICopeDg2X2NwdV90b19ub2RlX21hcF9lYXJseV9wdHIpW2NwdV07CiAJfQogI2VuZGlmCi0JaWYgKHBlcl9jcHVfb2Zmc2V0KGNwdSkpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7Ci0JZWxzZQotCQlyZXR1cm4gTlVNQV9OT19OT0RFOworCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7CiB9CisKKyNpZmRlZglDT05GSUdfTlVNQQorCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3B1bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLworI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyKHYsIG5vZGUpCQlcCisJCWNwdW1hc2tfdCAqdiA9ICYobm9kZV90b19jcHVtYXNrX21hcFtub2RlXSkKKworI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJXAorCQkJICAgdiA9ICYobm9kZV90b19jcHVtYXNrX21hcFtub2RlXSkKKyNlbmRpZgorCiAjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCiAvKgpAQCAtMTI5LDE3ICsxNDcsMTMgQEAKIAogIyBkZWZpbmUgU0RfQ0FDSEVfTklDRV9UUklFUwkyCiAjIGRlZmluZSBTRF9JRExFX0lEWAkJMgotIyBkZWZpbmUgU0RfTkVXSURMRV9JRFgJCTAKKyMgZGVmaW5lIFNEX05FV0lETEVfSURYCQkyCiAjIGRlZmluZSBTRF9GT1JLRVhFQ19JRFgJMQogCiAjZW5kaWYKIAogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIE5VTUFRIG1hY2hpbmVzICovCiAjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAotCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCi0JLnBhcmVudAkJCT0gTlVMTCwJCQlcCi0JLmNoaWxkCQkJPSBOVUxMLAkJCVwKLQkuZ3JvdXBzCQkJPSBOVUxMLAkJCVwKIAkubWluX2ludGVydmFsCQk9IDgsCQkJXAogCS5tYXhfaW50ZXJ2YWwJCT0gMzIsCQkJXAogCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCkBAIC0xNTcsNyArMTcxLDYgQEAKIAkJCQl8IFNEX1dBS0VfQkFMQU5DRSwJXAogCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKIAkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAotCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXAogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl82NF9BQ1BJX05VTUEKQEAgLTE2NywxMCArMTgwLDEwIEBACiAKICNlbHNlIC8qIENPTkZJR19OVU1BICovCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgotCiAjZW5kaWYKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAoaW50IGNwdSk7CiAKICNpZmRlZiBFTkFCTEVfVE9QT19ERUZJTkVTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdHJhbXBvbGluZS5oIGIvaW5jbHVkZS9hc20teDg2L3RyYW1wb2xpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTU2YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2L3RyYW1wb2xpbmUuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9fVFJBTVBPTElORV9IRUFERVIKKyNkZWZpbmUgX19UUkFNUE9MSU5FX0hFQURFUgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogVHJhbXBvbGluZSA4MHg4NiBwcm9ncmFtIGFzIGFuIGFycmF5LgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciB0cmFtcG9saW5lX2RhdGEgW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciB0cmFtcG9saW5lX2VuZCAgW107CitleHRlcm4gdW5zaWduZWQgY2hhciAqdHJhbXBvbGluZV9iYXNlOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3JzcDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGluaXRpYWxfY29kZTsKKworI2RlZmluZSBUUkFNUE9MSU5FX0JBU0UgMHg2MDAwCitleHRlcm4gdW5zaWduZWQgbG9uZyBzZXR1cF90cmFtcG9saW5lKHZvaWQpOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX1RSQU1QT0xJTkVfSEVBREVSICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdHNjLmggYi9pbmNsdWRlL2FzbS14ODYvdHNjLmgKaW5kZXggN2QzZTI3Zi4uMDQzNGJkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RzYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni90c2MuaApAQCAtMTgsNiArMTgsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCB0c2Nfa2h6OwogCiBleHRlcm4gdm9pZCBkaXNhYmxlX1RTQyh2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9UU0Modm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQogewpAQCAtNDIsNyArNDMsNyBAQAogCWlmICghY3B1X2hhc190c2MpCiAJCXJldHVybiAwOwogI2VuZGlmCi0JcmV0dXJuIChjeWNsZXNfdCkgX19uYXRpdmVfcmVhZF90c2MoKTsKKwlyZXR1cm4gKGN5Y2xlc190KV9fbmF0aXZlX3JlYWRfdHNjKCk7CiB9CiAKIGV4dGVybiB2b2lkIHRzY19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3VhY2Nlc3NfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzXzMyLmgKaW5kZXggZmNjNTcwZS4uOGU3NTk1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3VhY2Nlc3NfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzc18zMi5oCkBAIC0zMiw3ICszMiw3IEBACiAjZGVmaW5lIGdldF9mcygpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQpCiAjZGVmaW5lIHNldF9mcyh4KQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHgpKQogCi0jZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorI2RlZmluZSBzZWdtZW50X2VxKGEsIGIpCSgoYSkuc2VnID09IChiKS5zZWcpCiAKIC8qCiAgKiBtb3ZzbCBjYW4gYmUgc2xvdyB3aGVuIHNvdXJjZSBhbmQgZGVzdCBhcmUgbm90IGJvdGggOC1ieXRlIGFsaWduZWQKQEAgLTQzLDcgKzQzLDkgQEAKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBtb3ZzbF9tYXNrOwogI2VuZGlmCiAKLSNkZWZpbmUgX19hZGRyX29rKGFkZHIpICgodW5zaWduZWQgbG9uZyBfX2ZvcmNlKShhZGRyKSA8IChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSkKKyNkZWZpbmUgX19hZGRyX29rKGFkZHIpCQkJCQlcCisJKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpKGFkZHIpIDwJCVwKKwkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpKQogCiAvKgogICogVGVzdCB3aGV0aGVyIGEgYmxvY2sgb2YgbWVtb3J5IGlzIGEgdmFsaWQgdXNlciBzcGFjZSBhZGRyZXNzLgpAQCAtNTQsMTMgKzU2LDE2IEBACiAgKgogICogVGhpcyBuZWVkcyAzMy1iaXQgYXJpdGhtZXRpYy4gV2UgaGF2ZSBhIGNhcnJ5Li4uCiAgKi8KLSNkZWZpbmUgX19yYW5nZV9vayhhZGRyLHNpemUpICh7IFwKLQl1bnNpZ25lZCBsb25nIGZsYWcscm9rc3VtOyBcCi0JX19jaGtfdXNlcl9wdHIoYWRkcik7IFwKLQlhc20oImFkZGwgJTMsJTEgOyBzYmJsICUwLCUwOyBjbXBsICUxLCU0OyBzYmJsICQwLCUwIiBcCi0JCToiPSZyIiAoZmxhZyksICI9ciIgKHJva3N1bSkgXAotCQk6IjEiIChhZGRyKSwiZyIgKChpbnQpKHNpemUpKSwicm0iIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSk7IFwKLQlmbGFnOyB9KQorI2RlZmluZSBfX3JhbmdlX29rKGFkZHIsIHNpemUpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnLCByb2tzdW07CQkJCQlcCisJX19jaGtfdXNlcl9wdHIoYWRkcik7CQkJCQkJXAorCWFzbSgiYWRkbCAlMywlMSA7IHNiYmwgJTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAiCQlcCisJICAgIDoiPSZyIiAoZmxhZyksICI9ciIgKHJva3N1bSkJCQkJXAorCSAgICA6IjEiIChhZGRyKSwgImciICgoaW50KShzaXplKSksCQkJCVwKKwkgICAgInJtIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZykpOwkJXAorCWZsYWc7CQkJCQkJCQlcCit9KQogCiAvKioKICAqIGFjY2Vzc19vazogLSBDaGVja3MgaWYgYSB1c2VyIHNwYWNlIHBvaW50ZXIgaXMgdmFsaWQKQEAgLTgxLDcgKzg2LDcgQEAKICAqIGNoZWNrcyB0aGF0IHRoZSBwb2ludGVyIGlzIGluIHRoZSB1c2VyIHNwYWNlIHJhbmdlIC0gYWZ0ZXIgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbiwgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMgbWF5IHN0aWxsIHJldHVybiAtRUZBVUxULgogICovCi0jZGVmaW5lIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkgKGxpa2VseShfX3JhbmdlX29rKGFkZHIsc2l6ZSkgPT0gMCkpCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLCBhZGRyLCBzaXplKSAobGlrZWx5KF9fcmFuZ2Vfb2soYWRkciwgc2l6ZSkgPT0gMCkpCiAKIC8qCiAgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQpAQCAtOTYsOCArMTAxLDcgQEAKICAqIG9uIG91ciBjYWNoZSBvciB0bGIgZW50cmllcy4KICAqLwogCi1zdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5Ci17CitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOwogfTsKIApAQCAtMTIyLDEzICsxMjYsMTUgQEAKIGV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMih2b2lkKTsKIGV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfNCh2b2lkKTsKIAotI2RlZmluZSBfX2dldF91c2VyX3goc2l6ZSxyZXQseCxwdHIpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX2dldF91c2VyXyIgI3NpemUgXAotCQk6Ij1hIiAocmV0KSwiPWQiICh4KSBcCi0JCToiMCIgKHB0cikpCisjZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLCByZXQsIHgsIHB0cikJICAgICAgXAorCWFzbSB2b2xhdGlsZSgiY2FsbCBfX2dldF91c2VyXyIgI3NpemUgXAorCQkgICAgIDoiPWEiIChyZXQpLCI9ZCIgKHgpICAgICBcCisJCSAgICAgOiIwIiAocHRyKSkKIAogCi0vKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlciBmb3Igc2lnbiByZWFzb25zICovCisvKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlcgorICogZm9yIHNpZ24gcmVhc29ucyAqLworCiAvKioKICAqIGdldF91c2VyOiAtIEdldCBhIHNpbXBsZSB2YXJpYWJsZSBmcm9tIHVzZXIgc3BhY2UuCiAgKiBAeDogICBWYXJpYWJsZSB0byBzdG9yZSByZXN1bHQuCkBAIC0xNDYsMTUgKzE1MiwyNCBAQAogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCiAgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgogICovCi0jZGVmaW5lIGdldF91c2VyKHgscHRyKQkJCQkJCQlcCi0oewlpbnQgX19yZXRfZ3U7CQkJCQkJCVwKKyNkZWZpbmUgZ2V0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldF9ndTsJCQkJCQkJXAogCXVuc2lnbmVkIGxvbmcgX192YWxfZ3U7CQkJCQkJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAotCXN3aXRjaChzaXplb2YgKCoocHRyKSkpIHsJCQkJCVwKLQljYXNlIDE6ICBfX2dldF91c2VyX3goMSxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQljYXNlIDI6ICBfX2dldF91c2VyX3goMixfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQljYXNlIDQ6ICBfX2dldF91c2VyX3goNCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKLQlkZWZhdWx0OiBfX2dldF91c2VyX3goWCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsJCVwKKwlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX3goMSwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl94KDIsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfeCg0LCBfX3JldF9ndSwgX192YWxfZ3UsIHB0cik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX2dldF91c2VyX3goWCwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpOwkJXAorCQlicmVhazsJCQkJCQkJXAogCX0JCQkJCQkJCVwKIAkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fdmFsX2d1OwkJCQlcCiAJX19yZXRfZ3U7CQkJCQkJCVwKQEAgLTE3MSwxMSArMTg2LDI1IEBACiBleHRlcm4gdm9pZCBfX3B1dF91c2VyXzQodm9pZCk7CiBleHRlcm4gdm9pZCBfX3B1dF91c2VyXzgodm9pZCk7CiAKLSNkZWZpbmUgX19wdXRfdXNlcl8xKHgsIHB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGwgX19wdXRfdXNlcl8xIjoiPWEiIChfX3JldF9wdSk6IjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQotI2RlZmluZSBfX3B1dF91c2VyXzIoeCwgcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyXzIiOiI9YSIgKF9fcmV0X3B1KToiMCIgKCh0eXBlb2YoKihwdHIpKSkoeCkpLCAiYyIgKHB0cikpCi0jZGVmaW5lIF9fcHV0X3VzZXJfNCh4LCBwdHIpIF9fYXNtX18gX192b2xhdGlsZV9fKCJjYWxsIF9fcHV0X3VzZXJfNCI6Ij1hIiAoX19yZXRfcHUpOiIwIiAoKHR5cGVvZigqKHB0cikpKSh4KSksICJjIiAocHRyKSkKLSNkZWZpbmUgX19wdXRfdXNlcl84KHgsIHB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGwgX19wdXRfdXNlcl84IjoiPWEiIChfX3JldF9wdSk6IkEiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQotI2RlZmluZSBfX3B1dF91c2VyX1goeCwgcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyX1giOiI9YSIgKF9fcmV0X3B1KToiYyIgKHB0cikpCisjZGVmaW5lIF9fcHV0X3VzZXJfMSh4LCBwdHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfMSIgOiAiPWEiIChfX3JldF9wdSkJXAorCQkgICAgIDogIjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfMih4LCBwdHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfMiIgOiAiPWEiIChfX3JldF9wdSkJXAorCQkgICAgIDogIjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfNCh4LCBwdHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfNCIgOiAiPWEiIChfX3JldF9wdSkJXAorCQkgICAgIDogIjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfOCh4LCBwdHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfOCIgOiAiPWEiIChfX3JldF9wdSkJXAorCQkgICAgIDogIkEiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfWCh4LCBwdHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfWCIgOiAiPWEiIChfX3JldF9wdSkJXAorCQkgICAgIDogImMiIChwdHIpKQogCiAvKioKICAqIHB1dF91c2VyOiAtIFdyaXRlIGEgc2ltcGxlIHZhbHVlIGludG8gdXNlciBzcGFjZS4KQEAgLTE5NSwzMiArMjI0LDQzIEBACiAgKi8KICNpZmRlZiBDT05GSUdfWDg2X1dQX1dPUktTX09LCiAKLSNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpCQkJCQkJXAotKHsJaW50IF9fcmV0X3B1OwkJCQkJCVwKKyNkZWZpbmUgcHV0X3VzZXIoeCwgcHRyKQkJCQkJXAorKHsJCQkJCQkJCVwKKwlpbnQgX19yZXRfcHU7CQkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3B1X3ZhbDsJCQkJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQlcCiAJX19wdV92YWwgPSB4OwkJCQkJCVwKLQlzd2l0Y2goc2l6ZW9mKCoocHRyKSkpIHsJCQkJXAotCWNhc2UgMTogX19wdXRfdXNlcl8xKF9fcHVfdmFsLCBwdHIpOyBicmVhazsJCVwKLQljYXNlIDI6IF9fcHV0X3VzZXJfMihfX3B1X3ZhbCwgcHRyKTsgYnJlYWs7CQlcCi0JY2FzZSA0OiBfX3B1dF91c2VyXzQoX19wdV92YWwsIHB0cik7IGJyZWFrOwkJXAotCWNhc2UgODogX19wdXRfdXNlcl84KF9fcHVfdmFsLCBwdHIpOyBicmVhazsJCVwKLQlkZWZhdWx0Ol9fcHV0X3VzZXJfWChfX3B1X3ZhbCwgcHRyKTsgYnJlYWs7CQlcCisJc3dpdGNoIChzaXplb2YoKihwdHIpKSkgewkJCQlcCisJY2FzZSAxOgkJCQkJCQlcCisJCV9fcHV0X3VzZXJfMShfX3B1X3ZhbCwgcHRyKTsJCQlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl8yKF9fcHVfdmFsLCBwdHIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJXAorCQlfX3B1dF91c2VyXzQoX19wdV92YWwsIHB0cik7CQkJXAorCQlicmVhazsJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQlcCisJCV9fcHV0X3VzZXJfOChfX3B1X3ZhbCwgcHRyKTsJCQlcCisJCWJyZWFrOwkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCVwKKwkJX19wdXRfdXNlcl9YKF9fcHVfdmFsLCBwdHIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJXAogCX0JCQkJCQkJXAogCV9fcmV0X3B1OwkJCQkJCVwKIH0pCiAKICNlbHNlCi0jZGVmaW5lIHB1dF91c2VyKHgscHRyKQkJCQkJCVwKKyNkZWZpbmUgcHV0X3VzZXIoeCwgcHRyKQkJCQkJXAogKHsJCQkJCQkJCVwKLSAJaW50IF9fcmV0X3B1OwkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX19wdXNfdG1wID0geDsJCQlcCi0JX19yZXRfcHU9MDsJCQkJCQlcCi0JaWYodW5saWtlbHkoX19jb3B5X3RvX3VzZXJfbGwocHRyLCAmX19wdXNfdG1wLAkJXAotCQkJCXNpemVvZigqKHB0cikpKSAhPSAwKSkJCVwKLSAJCV9fcmV0X3B1PS1FRkFVTFQ7CQkJCVwKLSAJX19yZXRfcHU7CQkJCQkJXAotIH0pCisJaW50IF9fcmV0X3B1OwkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSlfX3B1c190bXAgPSB4OwkJCVwKKwlfX3JldF9wdSA9IDA7CQkJCQkJXAorCWlmICh1bmxpa2VseShfX2NvcHlfdG9fdXNlcl9sbChwdHIsICZfX3B1c190bXAsCQlcCisJCQkJICAgICAgIHNpemVvZigqKHB0cikpKSAhPSAwKSkJXAorCQlfX3JldF9wdSA9IC1FRkFVTFQ7CQkJCVwKKwlfX3JldF9wdTsJCQkJCQlcCit9KQogCiAKICNlbmRpZgpAQCAtMjQ1LDggKzI4NSw4IEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgLUVGQVVMVCBvbiBlcnJvci4KICAqIE9uIGVycm9yLCB0aGUgdmFyaWFibGUgQHggaXMgc2V0IHRvIHplcm8uCiAgKi8KLSNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgXAotICBfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikJCQkJXAorCV9fZ2V0X3VzZXJfbm9jaGVjaygoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKIAogCiAvKioKQEAgLTI2OCw1NCArMzA4LDYyIEBACiAgKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCiAgKi8KLSNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikgXAotICBfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKQkJCQkJCVwKKwlfX3B1dF91c2VyX25vY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKIAotI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkJCQkJXAorI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCVwKICh7CQkJCQkJCQlcCiAJbG9uZyBfX3B1X2VycjsJCQkJCQlcCi0JX19wdXRfdXNlcl9zaXplKCh4KSwocHRyKSwoc2l6ZSksX19wdV9lcnIsLUVGQVVMVCk7CVwKKwlfX3B1dF91c2VyX3NpemUoKHgpLCAocHRyKSwgKHNpemUpLCBfX3B1X2VyciwgLUVGQVVMVCk7CVwKIAlfX3B1X2VycjsJCQkJCQlcCiB9KQogCiAKLSNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JCSIxOgltb3ZsICUlZWF4LDAoJTIpXG4iCQkJXAotCQkiMjoJbW92bCAlJWVkeCw0KCUyKVxuIgkJCVwKLQkJIjM6XG4iCQkJCQkJXAotCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKLQkJIjQ6CW1vdmwgJTMsJTBcbiIJCQkJXAotCQkiCWptcCAzYlxuIgkJCQlcCi0JCSIucHJldmlvdXNcbiIJCQkJCVwKLQkJX0FTTV9FWFRBQkxFKDFiLDRiKQkJCQlcCi0JCV9BU01fRVhUQUJMRSgyYiw0YikJCQkJXAotCQk6ICI9ciIoZXJyKQkJCQkJXAotCQk6ICJBIiAoeCksICJyIiAoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikpCisjZGVmaW5lIF9fcHV0X3VzZXJfdTY0KHgsIGFkZHIsIGVycikJCQkJCVwKKwlhc20gdm9sYXRpbGUoIjE6CW1vdmwgJSVlYXgsMCglMilcbiIJCQlcCisJCSAgICAgIjI6CW1vdmwgJSVlZHgsNCglMilcbiIJCQlcCisJCSAgICAgIjM6XG4iCQkJCQkJXAorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKKwkJICAgICAiNDoJbW92bCAlMywlMFxuIgkJCQlcCisJCSAgICAgIglqbXAgM2JcbiIJCQkJCVwKKwkJICAgICAiLnByZXZpb3VzXG4iCQkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCA0YikJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgyYiwgNGIpCQkJCVwKKwkJICAgICA6ICI9ciIgKGVycikJCQkJCVwKKwkJICAgICA6ICJBIiAoeCksICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKIAogI2lmZGVmIENPTkZJR19YODZfV1BfV09SS1NfT0sKIAotI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwsZXJycmV0KQkJCVwKKyNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsLCBlcnJyZXQpCQkJXAogZG8gewkJCQkJCQkJCVwKIAlyZXR2YWwgPSAwOwkJCQkJCQlcCiAJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCiAJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKLQljYXNlIDE6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwiYiIsImIiLCJpcSIsZXJycmV0KTticmVhazsJXAotCWNhc2UgMjogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJ3IiwidyIsImlyIixlcnJyZXQpO2JyZWFrOyBcCi0JY2FzZSA0OiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImwiLCIiLCJpciIsZXJycmV0KTsgYnJlYWs7CVwKLQljYXNlIDg6IF9fcHV0X3VzZXJfdTY0KChfX3R5cGVvZl9fKCpwdHIpKSh4KSxwdHIscmV0dmFsKTsgYnJlYWs7XAotCSAgZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAiYiIsICJiIiwgImlxIiwgZXJycmV0KTsJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJ3IiwgInciLCAiaXIiLCBlcnJyZXQpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImwiLCAiIiwgICJpciIsIGVycnJldCk7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCV9fcHV0X3VzZXJfdTY0KChfX3R5cGVvZl9fKCpwdHIpKSh4KSwgcHRyLCByZXR2YWwpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX3B1dF91c2VyX2JhZCgpOwkJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNlbHNlCiAKLSNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsLGVycnJldCkJCQlcCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCwgZXJycmV0KQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fcHVzX3RtcCA9IHg7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSlfX3B1c190bXAgPSB4OwkJCQlcCiAJcmV0dmFsID0gMDsJCQkJCQkJXAogCQkJCQkJCQkJXAotCWlmKHVubGlrZWx5KF9fY29weV90b191c2VyX2xsKHB0ciwgJl9fcHVzX3RtcCwgc2l6ZSkgIT0gMCkpCVwKKwlpZiAodW5saWtlbHkoX19jb3B5X3RvX3VzZXJfbGwocHRyLCAmX19wdXNfdG1wLCBzaXplKSAhPSAwKSkJXAogCQlyZXR2YWwgPSBlcnJyZXQ7CQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC0zMjksNjUgKzM3Nyw3MCBAQAogICogYWxpYXNpbmcgaXNzdWVzLgogICovCiAjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUsIHJ0eXBlLCBsdHlwZSwgZXJycmV0KQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiMToJbW92Iml0eXBlIiAlInJ0eXBlIjEsJTJcbiIJCQlcCi0JCSIyOlxuIgkJCQkJCQlcCi0JCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJCVwKLQkJIjM6CW1vdmwgJTMsJTBcbiIJCQkJCVwKLQkJIglqbXAgMmJcbiIJCQkJCVwKLQkJIi5wcmV2aW91c1xuIgkJCQkJCVwKLQkJX0FTTV9FWFRBQkxFKDFiLDNiKQkJCQkJXAotCQk6ICI9ciIoZXJyKQkJCQkJCVwKLQkJOiBsdHlwZSAoeCksICJtIihfX20oYWRkcikpLCAiaSIoZXJycmV0KSwgIjAiKGVycikpCisJYXNtIHZvbGF0aWxlKCIxOgltb3YiaXR5cGUiICUicnR5cGUiMSwlMlxuIgkJXAorCQkgICAgICIyOlxuIgkJCQkJCVwKKwkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisJCSAgICAgIjM6CW1vdmwgJTMsJTBcbiIJCQkJXAorCQkgICAgICIJam1wIDJiXG4iCQkJCQlcCisJCSAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCQkJCVwKKwkJICAgICA6ICI9ciIoZXJyKQkJCQkJXAorCQkgICAgIDogbHR5cGUgKHgpLCAibSIgKF9fbShhZGRyKSksICJpIiAoZXJycmV0KSwgIjAiIChlcnIpKQogCiAKLSNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCVwKLSh7CQkJCQkJCQlcCi0JbG9uZyBfX2d1X2VycjsJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsJCQkJCVwKLQlfX2dldF91c2VyX3NpemUoX19ndV92YWwsKHB0ciksKHNpemUpLF9fZ3VfZXJyLC1FRkFVTFQpO1wKLQkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCVwKLQlfX2d1X2VycjsJCQkJCQlcCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnI7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfdmFsOwkJCQkJCVwKKwlfX2dldF91c2VyX3NpemUoX19ndV92YWwsIChwdHIpLCAoc2l6ZSksIF9fZ3VfZXJyLCAtRUZBVUxUKTsJXAorCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7CQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAogfSkKIAogZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7CiAKLSNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsLGVycnJldCkJCQlcCisjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCwgZXJycmV0KQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJcmV0dmFsID0gMDsJCQkJCQkJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQkJXAogCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCi0JY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImIiLCJiIiwiPXEiLGVycnJldCk7YnJlYWs7CVwKLQljYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwidyIsInciLCI9ciIsZXJycmV0KTticmVhazsJXAotCWNhc2UgNDogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJsIiwiIiwiPXIiLGVycnJldCk7YnJlYWs7CVwKLQlkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOwkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImIiLCAiYiIsICI9cSIsIGVycnJldCk7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAidyIsICJ3IiwgIj1yIiwgZXJycmV0KTsJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJsIiwgIiIsICI9ciIsIGVycnJldCk7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCSh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCQlcCiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlLCBydHlwZSwgbHR5cGUsIGVycnJldCkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJIjE6CW1vdiJpdHlwZSIgJTIsJSJydHlwZSIxXG4iCQkJXAotCQkiMjpcbiIJCQkJCQkJXAotCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCi0JCSIzOgltb3ZsICUzLCUwXG4iCQkJCQlcCi0JCSIJeG9yIml0eXBlIiAlInJ0eXBlIjEsJSJydHlwZSIxXG4iCQlcCi0JCSIJam1wIDJiXG4iCQkJCQlcCi0JCSIucHJldmlvdXNcbiIJCQkJCQlcCi0JCV9BU01fRVhUQUJMRSgxYiwzYikJCQkJCVwKLQkJOiAiPXIiKGVyciksIGx0eXBlICh4KQkJCQkJXAotCQk6ICJtIihfX20oYWRkcikpLCAiaSIoZXJycmV0KSwgIjAiKGVycikpCisJYXNtIHZvbGF0aWxlKCIxOgltb3YiaXR5cGUiICUyLCUicnR5cGUiMVxuIgkJXAorCQkgICAgICIyOlxuIgkJCQkJCVwKKwkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCQlcCisJCSAgICAgIjM6CW1vdmwgJTMsJTBcbiIJCQkJXAorCQkgICAgICIJeG9yIml0eXBlIiAlInJ0eXBlIjEsJSJydHlwZSIxXG4iCQlcCisJCSAgICAgIglqbXAgMmJcbiIJCQkJCVwKKwkJICAgICAiLnByZXZpb3VzXG4iCQkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikJCQkJXAorCQkgICAgIDogIj1yIiAoZXJyKSwgbHR5cGUgKHgpCQkJCVwKKwkJICAgICA6ICJtIiAoX19tKGFkZHIpKSwgImkiIChlcnJyZXQpLCAiMCIgKGVycikpCiAKIAotdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X3RvX3VzZXJfbGwodm9pZCBfX3VzZXIgKnRvLAotCQkJCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7Ci11bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfZnJvbV91c2VyX2xsKHZvaWQgKnRvLAotCQkJCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwotdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X2Zyb21fdXNlcl9sbF9ub3plcm8odm9pZCAqdG8sCi0JCQkJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7Ci11bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfZnJvbV91c2VyX2xsX25vY2FjaGUodm9pZCAqdG8sCi0JCQkJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7Ci11bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfZnJvbV91c2VyX2xsX25vY2FjaGVfbm96ZXJvKHZvaWQgKnRvLAotCQkJCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwordW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X3RvX3VzZXJfbGwKKwkJKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK3Vuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfbGwKKwkJKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK3Vuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfbGxfbm96ZXJvCisJCSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7Cit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfZnJvbV91c2VyX2xsX25vY2FjaGUKKwkJKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK3Vuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfbGxfbm9jYWNoZV9ub3plcm8KKwkJKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKIAogLyoqCiAgKiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYzogLSBDb3B5IGEgYmxvY2sgb2YgZGF0YSBpbnRvIHVzZXIgc3BhY2UsIHdpdGggbGVzcyBjaGVja2luZy4KQEAgLTQxNiwxMyArNDY5LDE2IEBACiAKIAkJc3dpdGNoIChuKSB7CiAJCWNhc2UgMToKLQkJCV9fcHV0X3VzZXJfc2l6ZSgqKHU4ICopZnJvbSwgKHU4IF9fdXNlciAqKXRvLCAxLCByZXQsIDEpOworCQkJX19wdXRfdXNlcl9zaXplKCoodTggKilmcm9tLCAodTggX191c2VyICopdG8sCisJCQkJCTEsIHJldCwgMSk7CiAJCQlyZXR1cm4gcmV0OwogCQljYXNlIDI6Ci0JCQlfX3B1dF91c2VyX3NpemUoKih1MTYgKilmcm9tLCAodTE2IF9fdXNlciAqKXRvLCAyLCByZXQsIDIpOworCQkJX19wdXRfdXNlcl9zaXplKCoodTE2ICopZnJvbSwgKHUxNiBfX3VzZXIgKil0bywKKwkJCQkJMiwgcmV0LCAyKTsKIAkJCXJldHVybiByZXQ7CiAJCWNhc2UgNDoKLQkJCV9fcHV0X3VzZXJfc2l6ZSgqKHUzMiAqKWZyb20sICh1MzIgX191c2VyICopdG8sIDQsIHJldCwgNCk7CisJCQlfX3B1dF91c2VyX3NpemUoKih1MzIgKilmcm9tLCAodTMyIF9fdXNlciAqKXRvLAorCQkJCQk0LCByZXQsIDQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTU0NSwxOSArNjAxLDIxIEBACiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZwotX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pY19ub2NhY2hlKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQorX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pY19ub2NhY2hlKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbikKIHsKICAgICAgICByZXR1cm4gX19jb3B5X2Zyb21fdXNlcl9sbF9ub2NhY2hlX25vemVybyh0bywgZnJvbSwgbik7CiB9CiAKIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sCi0JCQkJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKKwkJCQkJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIGNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLAotCQkJCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworCQkJCQkgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgbik7CiBsb25nIF9fbXVzdF9jaGVjayBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsCi0JCQkJbG9uZyBjb3VudCk7CisJCQkJICAgIGxvbmcgY291bnQpOwogbG9uZyBfX211c3RfY2hlY2sgX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsCi0JCQkJY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7CisJCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCk7CiAKIC8qKgogICogc3RybGVuX3VzZXI6IC0gR2V0IHRoZSBzaXplIG9mIGEgc3RyaW5nIGluIHVzZXIgc3BhY2UuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzc182NC5oIGIvaW5jbHVkZS9hc20teDg2L3VhY2Nlc3NfNjQuaAppbmRleCBiODdlYjRiLi5iOGEyZjQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdWFjY2Vzc182NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni91YWNjZXNzXzY0LmgKQEAgLTI5LDIzICsyOSwyNyBAQAogI2RlZmluZSBnZXRfZnMoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQogI2RlZmluZSBzZXRfZnMoeCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9ICh4KSkKIAotI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKyNkZWZpbmUgc2VnbWVudF9lcShhLCBiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQogCi0jZGVmaW5lIF9fYWRkcl9vayhhZGRyKSAoISgodW5zaWduZWQgbG9uZykoYWRkcikgJiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZykpKQorI2RlZmluZSBfX2FkZHJfb2soYWRkcikgKCEoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICYJCQlcCisJCQkgICAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZykpKQogCiAvKgogICogVWhodWgsIHRoaXMgbmVlZHMgNjUtYml0IGFyaXRobWV0aWMuIFdlIGhhdmUgYSBjYXJyeS4uCiAgKi8KLSNkZWZpbmUgX19yYW5nZV9ub3Rfb2soYWRkcixzaXplKSAoeyBcCi0JdW5zaWduZWQgbG9uZyBmbGFnLHJva3N1bTsgXAotCV9fY2hrX3VzZXJfcHRyKGFkZHIpOyBcCi0JYXNtKCIjIHJhbmdlX29rXG5cciIgXAotCQkiYWRkcSAlMywlMSA7IHNiYnEgJTAsJTAgOyBjbXBxICUxLCU0IDsgc2JicSAkMCwlMCIgIFwKLQkJOiI9JnIiIChmbGFnKSwgIj1yIiAocm9rc3VtKSBcCi0JCToiMSIgKGFkZHIpLCJnIiAoKGxvbmcpKHNpemUpKSwiZyIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpKTsgXAotCWZsYWc7IH0pCisjZGVmaW5lIF9fcmFuZ2Vfbm90X29rKGFkZHIsIHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWcsIHJva3N1bTsJCQkJCVwKKwlfX2Noa191c2VyX3B0cihhZGRyKTsJCQkJCQlcCisJYXNtKCIjIHJhbmdlX29rXG5cciIJCQkJCQlcCisJICAgICJhZGRxICUzLCUxIDsgc2JicSAlMCwlMCA7IGNtcHEgJTEsJTQgOyBzYmJxICQwLCUwIgkJXAorCSAgICA6ICI9JnIiIChmbGFnKSwgIj1yIiAocm9rc3VtKQkJCQlcCisJICAgIDogIjEiIChhZGRyKSwgImciICgobG9uZykoc2l6ZSkpLAkJCQlcCisJICAgICAgImciIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSk7CQlcCisJZmxhZzsJCQkJCQkJCVwKK30pCiAKLSNkZWZpbmUgYWNjZXNzX29rKHR5cGUsIGFkZHIsIHNpemUpIChfX3JhbmdlX25vdF9vayhhZGRyLHNpemUpID09IDApCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLCBhZGRyLCBzaXplKSAoX19yYW5nZV9ub3Rfb2soYWRkciwgc2l6ZSkgPT0gMCkKIAogLyoKICAqIFRoZSBleGNlcHRpb24gdGFibGUgY29uc2lzdHMgb2YgcGFpcnMgb2YgYWRkcmVzc2VzOiB0aGUgZmlyc3QgaXMgdGhlCkBAIC02MCw4ICs2NCw3IEBACiAgKiBvbiBvdXIgY2FjaGUgb3IgdGxiIGVudHJpZXMuCiAgKi8KIAotc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoteworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSB7CiAJdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKIH07CiAKQEAgLTg0LDIzICs4NywzNiBAQAogICogYWNjZXNzZXMgdG8gdGhlIHNhbWUgYXJlYSBvZiB1c2VyIG1lbW9yeSkuCiAgKi8KIAotI2RlZmluZSBfX2dldF91c2VyX3goc2l6ZSxyZXQseCxwdHIpIFwKLQlhc20gdm9sYXRpbGUoImNhbGwgX19nZXRfdXNlcl8iICNzaXplIFwKLQkJOiI9YSIgKHJldCksIj1kIiAoeCkgXAotCQk6ImMiIChwdHIpIFwKLQkJOiJyOCIpCisjZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLCByZXQsIHgsIHB0cikJCSAgICAgIFwKKwlhc20gdm9sYXRpbGUoImNhbGwgX19nZXRfdXNlcl8iICNzaXplCSAgICAgIFwKKwkJICAgICA6ICI9YSIgKHJldCksIj1kIiAoeCkJICAgICAgXAorCQkgICAgIDogImMiIChwdHIpCQkgICAgICBcCisJCSAgICAgOiAicjgiKQogCi0vKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlciBmb3Igc2lnbiByZWFzb25zICovCi0jZGVmaW5lIGdldF91c2VyKHgscHRyKQkJCQkJCQlcCi0oewl1bnNpZ25lZCBsb25nIF9fdmFsX2d1OwkJCQkJCVwKLQlpbnQgX19yZXRfZ3U7IAkJCQkJCQlcCisvKiBDYXJlZnVsOiB3ZSBoYXZlIHRvIGNhc3QgdGhlIHJlc3VsdCB0byB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlcgorICogZm9yIHNpZ24gcmVhc29ucyAqLworCisjZGVmaW5lIGdldF91c2VyKHgsIHB0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fdmFsX2d1OwkJCQkJCVwKKwlpbnQgX19yZXRfZ3U7CQkJCQkJCVwKIAlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKLQlzd2l0Y2goc2l6ZW9mICgqKHB0cikpKSB7CQkJCQlcCi0JY2FzZSAxOiAgX19nZXRfdXNlcl94KDEsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JY2FzZSAyOiAgX19nZXRfdXNlcl94KDIsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JY2FzZSA0OiAgX19nZXRfdXNlcl94KDQsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JY2FzZSA4OiAgX19nZXRfdXNlcl94KDgsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7CQlcCi0JZGVmYXVsdDogX19nZXRfdXNlcl9iYWQoKTsgYnJlYWs7CQkJCVwKKwlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX2dldF91c2VyX3goMSwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl94KDIsIF9fcmV0X2d1LCBfX3ZhbF9ndSwgcHRyKTsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfeCg0LCBfX3JldF9ndSwgX192YWxfZ3UsIHB0cik7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJXAorCQlfX2dldF91c2VyX3goOCwgX19yZXRfZ3UsIF9fdmFsX2d1LCBwdHIpOwkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl9iYWQoKTsJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKIAl9CQkJCQkJCQlcCiAJKHgpID0gKF9fZm9yY2UgdHlwZW9mKCoocHRyKSkpX192YWxfZ3U7CQkJCVwKIAlfX3JldF9ndTsJCQkJCQkJXApAQCAtMTEyLDU1ICsxMjgsNzMgQEAKIGV4dGVybiB2b2lkIF9fcHV0X3VzZXJfOCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fcHV0X3VzZXJfYmFkKHZvaWQpOwogCi0jZGVmaW5lIF9fcHV0X3VzZXJfeChzaXplLHJldCx4LHB0cikJCQkJCVwKLQlhc20gdm9sYXRpbGUoImNhbGwgX19wdXRfdXNlcl8iICNzaXplCQkJXAotCQk6Ij1hIiAocmV0KQkJCQkJCVwKLQkJOiJjIiAocHRyKSwiZCIgKHgpCQkJCQlcCi0JCToicjgiKQorI2RlZmluZSBfX3B1dF91c2VyX3goc2l6ZSwgcmV0LCB4LCBwdHIpCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJjYWxsIF9fcHV0X3VzZXJfIiAjc2l6ZQkJCQlcCisJCSAgICAgOiI9YSIgKHJldCkJCQkJCVwKKwkJICAgICA6ImMiIChwdHIpLCJkIiAoeCkJCQkJCVwKKwkJICAgICA6InI4IikKIAotI2RlZmluZSBwdXRfdXNlcih4LHB0cikJCQkJCQkJXAotICBfX3B1dF91c2VyX2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCQkJXAorCV9fcHV0X3VzZXJfY2hlY2soKF9fdHlwZW9mX18oKihwdHIpKSkoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkKIAotI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSBcCi0gIF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCi0jZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpIFwKLSAgX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQorI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikJCQkJCQlcCisJX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQorI2RlZmluZSBfX3B1dF91c2VyKHgsIHB0cikJCQkJCQlcCisJX19wdXRfdXNlcl9ub2NoZWNrKChfX3R5cGVvZl9fKCoocHRyKSkpKHgpLCAocHRyKSwgc2l6ZW9mKCoocHRyKSkpCiAKICNkZWZpbmUgX19nZXRfdXNlcl91bmFsaWduZWQgX19nZXRfdXNlcgogI2RlZmluZSBfX3B1dF91c2VyX3VuYWxpZ25lZCBfX3B1dF91c2VyCiAKLSNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJXAorI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJXAogKHsJCQkJCQkJXAogCWludCBfX3B1X2VycjsJCQkJCVwKLQlfX3B1dF91c2VyX3NpemUoKHgpLChwdHIpLChzaXplKSxfX3B1X2Vycik7CVwKKwlfX3B1dF91c2VyX3NpemUoKHgpLCAocHRyKSwgKHNpemUpLCBfX3B1X2Vycik7CVwKIAlfX3B1X2VycjsJCQkJCVwKIH0pCiAKIAotI2RlZmluZSBfX3B1dF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJXAotKHsJCQkJCQkJXAotCWludCBfX3B1X2VycjsJCQkJCVwKLQl0eXBlb2YoKihwdHIpKSBfX3VzZXIgKl9fcHVfYWRkciA9IChwdHIpOwlcCi0Jc3dpdGNoIChzaXplKSB7IAkJCQlcCi0JY2FzZSAxOiBfX3B1dF91c2VyX3goMSxfX3B1X2Vycix4LF9fcHVfYWRkcik7IGJyZWFrOwlcCi0JY2FzZSAyOiBfX3B1dF91c2VyX3goMixfX3B1X2Vycix4LF9fcHVfYWRkcik7IGJyZWFrOwlcCi0JY2FzZSA0OiBfX3B1dF91c2VyX3goNCxfX3B1X2Vycix4LF9fcHVfYWRkcik7IGJyZWFrOwlcCi0JY2FzZSA4OiBfX3B1dF91c2VyX3goOCxfX3B1X2Vycix4LF9fcHVfYWRkcik7IGJyZWFrOwlcCi0JZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsJCQlcCi0JfQkJCQkJCVwKLQlfX3B1X2VycjsJCQkJCVwKKyNkZWZpbmUgX19wdXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpCQkJCVwKKyh7CQkJCQkJCQlcCisJaW50IF9fcHVfZXJyOwkJCQkJCVwKKwl0eXBlb2YoKihwdHIpKSBfX3VzZXIgKl9fcHVfYWRkciA9IChwdHIpOwkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl94KDEsIF9fcHVfZXJyLCB4LCBfX3B1X2FkZHIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl94KDIsIF9fcHVfZXJyLCB4LCBfX3B1X2FkZHIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl94KDQsIF9fcHVfZXJyLCB4LCBfX3B1X2FkZHIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCVwKKwkJX19wdXRfdXNlcl94KDgsIF9fcHVfZXJyLCB4LCBfX3B1X2FkZHIpOwlcCisJCWJyZWFrOwkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCVwKKwkJX19wdXRfdXNlcl9iYWQoKTsJCQkJXAorCX0JCQkJCQkJXAorCV9fcHVfZXJyOwkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCQlcCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlyZXR2YWwgPSAwOwkJCQkJCQlcCiAJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCiAJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKLQkgIGNhc2UgMTogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJiIiwiYiIsImlxIiwtRUZBVUxUKTsgYnJlYWs7XAotCSAgY2FzZSAyOiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInciLCJ3IiwiaXIiLC1FRkFVTFQpOyBicmVhaztcCi0JICBjYXNlIDQ6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwibCIsImsiLCJpciIsLUVGQVVMVCk7IGJyZWFrO1wKLQkgIGNhc2UgODogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJxIiwiIiwiWnIiLC1FRkFVTFQpOyBicmVhaztcCi0JICBkZWZhdWx0OiBfX3B1dF91c2VyX2JhZCgpOwkJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJiIiwgImIiLCAiaXEiLCAtRUZBVUxUKTtcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX3B1dF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgInciLCAidyIsICJpciIsIC1FRkFVTFQpO1wKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCV9fcHV0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAibCIsICJrIiwgImlyIiwgLUVGQVVMVCk7XAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJX19wdXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJxIiwgIiIsICJaciIsIC1FRkFVTFQpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX3B1dF91c2VyX2JhZCgpOwkJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKQEAgLTE3NCwyMyArMjA4LDIyIEBACiAgKiBhbGlhc2luZyBpc3N1ZXMuCiAgKi8KICNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBpdHlwZSwgcnR5cGUsIGx0eXBlLCBlcnJubykJXAotCWFzbSB2b2xhdGlsZSgJCQkJCVwKLQkJIjE6CW1vdiJpdHlwZSIgJSJydHlwZSIxLCUyXG4iCQlcCi0JCSIyOlxuIgkJCQkJCVwKLQkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCi0JCSIzOgltb3YgJTMsJTBcbiIJCQkJXAotCQkiCWptcCAyYlxuIgkJCQlcCi0JCSIucHJldmlvdXNcbiIJCQkJCVwKLQkJX0FTTV9FWFRBQkxFKDFiLDNiKQkJCQlcCi0JCTogIj1yIihlcnIpCQkJCQlcCi0JCTogbHR5cGUgKHgpLCAibSIoX19tKGFkZHIpKSwgImkiKGVycm5vKSwgIjAiKGVycikpCisJYXNtIHZvbGF0aWxlKCIxOgltb3YiaXR5cGUiICUicnR5cGUiMSwlMlxuIgkJXAorCQkgICAgICIyOlxuIgkJCQkJCVwKKwkJICAgICAiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIJCQlcCisJCSAgICAgIjM6CW1vdiAlMywlMFxuIgkJCQlcCisJCSAgICAgIglqbXAgMmJcbiIJCQkJCVwKKwkJICAgICAiLnByZXZpb3VzXG4iCQkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikJCQkJXAorCQkgICAgIDogIj1yIihlcnIpCQkJCQlcCisJCSAgICAgOiBsdHlwZSAoeCksICJtIiAoX19tKGFkZHIpKSwgImkiIChlcnJubyksICIwIiAoZXJyKSkKIAogCi0jZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQlcCisjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCQkJXAogKHsJCQkJCQkJCVwKIAlpbnQgX19ndV9lcnI7CQkJCQkJXAogCXVuc2lnbmVkIGxvbmcgX19ndV92YWw7CQkJCQlcCi0JX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLChwdHIpLChzaXplKSxfX2d1X2Vycik7CVwKKwlfX2dldF91c2VyX3NpemUoX19ndV92YWwsIChwdHIpLCAoc2l6ZSksIF9fZ3VfZXJyKTsJXAogCSh4KSA9IChfX2ZvcmNlIHR5cGVvZigqKHB0cikpKV9fZ3VfdmFsOwkJCVwKIAlfX2d1X2VycjsJCQkJCQlcCiB9KQpAQCAtMjAxLDMxICsyMzQsMzkgQEAKIGV4dGVybiBpbnQgX19nZXRfdXNlcl84KHZvaWQpOwogZXh0ZXJuIGludCBfX2dldF91c2VyX2JhZCh2b2lkKTsKIAotI2RlZmluZSBfX2dldF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwpCQkJCVwKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCXJldHZhbCA9IDA7CQkJCQkJCVwKIAlfX2Noa191c2VyX3B0cihwdHIpOwkJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAotCSAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImIiLCJiIiwiPXEiLC1FRkFVTFQpOyBicmVhaztcCi0JICBjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwidyIsInciLCI9ciIsLUVGQVVMVCk7IGJyZWFrO1wKLQkgIGNhc2UgNDogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJsIiwiayIsIj1yIiwtRUZBVUxUKTsgYnJlYWs7XAotCSAgY2FzZSA4OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInEiLCIiLCI9ciIsLUVGQVVMVCk7IGJyZWFrO1wKLQkgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAiYiIsICJiIiwgIj1xIiwgLUVGQVVMVCk7XAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oeCwgcHRyLCByZXR2YWwsICJ3IiwgInciLCAiPXIiLCAtRUZBVUxUKTtcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlfX2dldF91c2VyX2FzbSh4LCBwdHIsIHJldHZhbCwgImwiLCAiayIsICI9ciIsIC1FRkFVTFQpO1wKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKHgsIHB0ciwgcmV0dmFsLCAicSIsICIiLCAiPXIiLCAtRUZBVUxUKTsJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJKHgpID0gX19nZXRfdXNlcl9iYWQoKTsJCQkJCVwKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUsIHJ0eXBlLCBsdHlwZSwgZXJybm8pCVwKLQlhc20gdm9sYXRpbGUoCQkJCQlcCi0JCSIxOgltb3YiaXR5cGUiICUyLCUicnR5cGUiMVxuIgkJXAotCQkiMjpcbiIJCQkJCQlcCi0JCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQkJXAotCQkiMzoJbW92ICUzLCUwXG4iCQkJCVwKLQkJIgl4b3IiaXR5cGUiICUicnR5cGUiMSwlInJ0eXBlIjFcbiIJXAotCQkiCWptcCAyYlxuIgkJCQlcCi0JCSIucHJldmlvdXNcbiIJCQkJCVwKLQkJX0FTTV9FWFRBQkxFKDFiLDNiKQkJCQlcCi0JCTogIj1yIihlcnIpLCBsdHlwZSAoeCkJCQkJXAotCQk6ICJtIihfX20oYWRkcikpLCAiaSIoZXJybm8pLCAiMCIoZXJyKSkKKwlhc20gdm9sYXRpbGUoIjE6CW1vdiJpdHlwZSIgJTIsJSJydHlwZSIxXG4iCQlcCisJCSAgICAgIjI6XG4iCQkJCQkJXAorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsIFwiYXhcIlxuIgkJCVwKKwkJICAgICAiMzoJbW92ICUzLCUwXG4iCQkJCVwKKwkJICAgICAiCXhvciJpdHlwZSIgJSJydHlwZSIxLCUicnR5cGUiMVxuIgkJXAorCQkgICAgICIJam1wIDJiXG4iCQkJCQlcCisJCSAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCQkJCVwKKwkJICAgICA6ICI9ciIgKGVyciksIGx0eXBlICh4KQkJCQlcCisJCSAgICAgOiAibSIgKF9fbShhZGRyKSksICJpIihlcnJubyksICIwIihlcnIpKQogCiAvKgogICogQ29weSBUby9Gcm9tIFVzZXJzcGFjZQpAQCAtMjQ0LDExMCArMjg1LDE0MiBAQAogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjawogaW50IF9fY29weV9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKQoteyAKK3sKIAlpbnQgcmV0ID0gMDsKIAlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKQotCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoZHN0LChfX2ZvcmNlIHZvaWQgKilzcmMsc2l6ZSk7Ci0Jc3dpdGNoIChzaXplKSB7IAotCWNhc2UgMTpfX2dldF91c2VyX2FzbSgqKHU4Kilkc3QsKHU4IF9fdXNlciAqKXNyYyxyZXQsImIiLCJiIiwiPXEiLDEpOyAKKwkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKGRzdCwgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSk7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOl9fZ2V0X3VzZXJfYXNtKCoodTggKilkc3QsICh1OCBfX3VzZXIgKilzcmMsCisJCQkgICAgICByZXQsICJiIiwgImIiLCAiPXEiLCAxKTsKIAkJcmV0dXJuIHJldDsKLQljYXNlIDI6X19nZXRfdXNlcl9hc20oKih1MTYqKWRzdCwodTE2IF9fdXNlciAqKXNyYyxyZXQsInciLCJ3IiwiPXIiLDIpOworCWNhc2UgMjpfX2dldF91c2VyX2FzbSgqKHUxNiAqKWRzdCwgKHUxNiBfX3VzZXIgKilzcmMsCisJCQkgICAgICByZXQsICJ3IiwgInciLCAiPXIiLCAyKTsKIAkJcmV0dXJuIHJldDsKLQljYXNlIDQ6X19nZXRfdXNlcl9hc20oKih1MzIqKWRzdCwodTMyIF9fdXNlciAqKXNyYyxyZXQsImwiLCJrIiwiPXIiLDQpOworCWNhc2UgNDpfX2dldF91c2VyX2FzbSgqKHUzMiAqKWRzdCwgKHUzMiBfX3VzZXIgKilzcmMsCisJCQkgICAgICByZXQsICJsIiwgImsiLCAiPXIiLCA0KTsKIAkJcmV0dXJuIHJldDsKLQljYXNlIDg6X19nZXRfdXNlcl9hc20oKih1NjQqKWRzdCwodTY0IF9fdXNlciAqKXNyYyxyZXQsInEiLCIiLCI9ciIsOCk7Ci0JCXJldHVybiByZXQ7IAorCWNhc2UgODpfX2dldF91c2VyX2FzbSgqKHU2NCAqKWRzdCwgKHU2NCBfX3VzZXIgKilzcmMsCisJCQkgICAgICByZXQsICJxIiwgIiIsICI9ciIsIDgpOworCQlyZXR1cm4gcmV0OwogCWNhc2UgMTA6Ci0JICAgICAgIAlfX2dldF91c2VyX2FzbSgqKHU2NCopZHN0LCh1NjQgX191c2VyICopc3JjLHJldCwicSIsIiIsIj1yIiwxNik7Ci0JCWlmICh1bmxpa2VseShyZXQpKSByZXR1cm4gcmV0OwotCQlfX2dldF91c2VyX2FzbSgqKHUxNiopKDgrKGNoYXIqKWRzdCksKHUxNiBfX3VzZXIgKikoOCsoY2hhciBfX3VzZXIgKilzcmMpLHJldCwidyIsInciLCI9ciIsMik7Ci0JCXJldHVybiByZXQ7IAorCQlfX2dldF91c2VyX2FzbSgqKHU2NCAqKWRzdCwgKHU2NCBfX3VzZXIgKilzcmMsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiPXIiLCAxNik7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwkJX19nZXRfdXNlcl9hc20oKih1MTYgKikoOCArIChjaGFyICopZHN0KSwKKwkJCSAgICAgICAodTE2IF9fdXNlciAqKSg4ICsgKGNoYXIgX191c2VyICopc3JjKSwKKwkJCSAgICAgICByZXQsICJ3IiwgInciLCAiPXIiLCAyKTsKKwkJcmV0dXJuIHJldDsKIAljYXNlIDE2OgotCQlfX2dldF91c2VyX2FzbSgqKHU2NCopZHN0LCh1NjQgX191c2VyICopc3JjLHJldCwicSIsIiIsIj1yIiwxNik7Ci0JCWlmICh1bmxpa2VseShyZXQpKSByZXR1cm4gcmV0OwotCQlfX2dldF91c2VyX2FzbSgqKHU2NCopKDgrKGNoYXIqKWRzdCksKHU2NCBfX3VzZXIgKikoOCsoY2hhciBfX3VzZXIgKilzcmMpLHJldCwicSIsIiIsIj1yIiw4KTsKLQkJcmV0dXJuIHJldDsgCisJCV9fZ2V0X3VzZXJfYXNtKCoodTY0ICopZHN0LCAodTY0IF9fdXNlciAqKXNyYywKKwkJCSAgICAgICByZXQsICJxIiwgIiIsICI9ciIsIDE2KTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlyZXR1cm4gcmV0OworCQlfX2dldF91c2VyX2FzbSgqKHU2NCAqKSg4ICsgKGNoYXIgKilkc3QpLAorCQkJICAgICAgICh1NjQgX191c2VyICopKDggKyAoY2hhciBfX3VzZXIgKilzcmMpLAorCQkJICAgICAgIHJldCwgInEiLCAiIiwgIj1yIiwgOCk7CisJCXJldHVybiByZXQ7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKGRzdCwoX19mb3JjZSB2b2lkICopc3JjLHNpemUpOyAKKwkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKGRzdCwgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSk7CiAJfQotfQkKK30KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sKIGludCBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIHNpemUpCi17IAorewogCWludCByZXQgPSAwOwogCWlmICghX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpCi0JCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LHNyYyxzaXplKTsKLQlzd2l0Y2ggKHNpemUpIHsgCi0JY2FzZSAxOl9fcHV0X3VzZXJfYXNtKCoodTgqKXNyYywodTggX191c2VyICopZHN0LHJldCwiYiIsImIiLCJpcSIsMSk7IAorCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwgc3JjLCBzaXplKTsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6X19wdXRfdXNlcl9hc20oKih1OCAqKXNyYywgKHU4IF9fdXNlciAqKWRzdCwKKwkJCSAgICAgIHJldCwgImIiLCAiYiIsICJpcSIsIDEpOwogCQlyZXR1cm4gcmV0OwotCWNhc2UgMjpfX3B1dF91c2VyX2FzbSgqKHUxNiopc3JjLCh1MTYgX191c2VyICopZHN0LHJldCwidyIsInciLCJpciIsMik7CisJY2FzZSAyOl9fcHV0X3VzZXJfYXNtKCoodTE2ICopc3JjLCAodTE2IF9fdXNlciAqKWRzdCwKKwkJCSAgICAgIHJldCwgInciLCAidyIsICJpciIsIDIpOwogCQlyZXR1cm4gcmV0OwotCWNhc2UgNDpfX3B1dF91c2VyX2FzbSgqKHUzMiopc3JjLCh1MzIgX191c2VyICopZHN0LHJldCwibCIsImsiLCJpciIsNCk7CisJY2FzZSA0Ol9fcHV0X3VzZXJfYXNtKCoodTMyICopc3JjLCAodTMyIF9fdXNlciAqKWRzdCwKKwkJCSAgICAgIHJldCwgImwiLCAiayIsICJpciIsIDQpOwogCQlyZXR1cm4gcmV0OwotCWNhc2UgODpfX3B1dF91c2VyX2FzbSgqKHU2NCopc3JjLCh1NjQgX191c2VyICopZHN0LHJldCwicSIsIiIsImlyIiw4KTsKLQkJcmV0dXJuIHJldDsgCisJY2FzZSA4Ol9fcHV0X3VzZXJfYXNtKCoodTY0ICopc3JjLCAodTY0IF9fdXNlciAqKWRzdCwKKwkJCSAgICAgIHJldCwgInEiLCAiIiwgImlyIiwgOCk7CisJCXJldHVybiByZXQ7CiAJY2FzZSAxMDoKLQkJX19wdXRfdXNlcl9hc20oKih1NjQqKXNyYywodTY0IF9fdXNlciAqKWRzdCxyZXQsInEiLCIiLCJpciIsMTApOwotCQlpZiAodW5saWtlbHkocmV0KSkgcmV0dXJuIHJldDsKKwkJX19wdXRfdXNlcl9hc20oKih1NjQgKilzcmMsICh1NjQgX191c2VyICopZHN0LAorCQkJICAgICAgIHJldCwgInEiLCAiIiwgImlyIiwgMTApOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCXJldHVybiByZXQ7CiAJCWFzbSgiIjo6OiJtZW1vcnkiKTsKLQkJX19wdXRfdXNlcl9hc20oNFsodTE2KilzcmNdLDQrKHUxNiBfX3VzZXIgKilkc3QscmV0LCJ3IiwidyIsImlyIiwyKTsKLQkJcmV0dXJuIHJldDsgCisJCV9fcHV0X3VzZXJfYXNtKDRbKHUxNiAqKXNyY10sIDQgKyAodTE2IF9fdXNlciAqKWRzdCwKKwkJCSAgICAgICByZXQsICJ3IiwgInciLCAiaXIiLCAyKTsKKwkJcmV0dXJuIHJldDsKIAljYXNlIDE2OgotCQlfX3B1dF91c2VyX2FzbSgqKHU2NCopc3JjLCh1NjQgX191c2VyICopZHN0LHJldCwicSIsIiIsImlyIiwxNik7Ci0JCWlmICh1bmxpa2VseShyZXQpKSByZXR1cm4gcmV0OworCQlfX3B1dF91c2VyX2FzbSgqKHU2NCAqKXNyYywgKHU2NCBfX3VzZXIgKilkc3QsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiaXIiLCAxNik7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKIAkJYXNtKCIiOjo6Im1lbW9yeSIpOwotCQlfX3B1dF91c2VyX2FzbSgxWyh1NjQqKXNyY10sMSsodTY0IF9fdXNlciAqKWRzdCxyZXQsInEiLCIiLCJpciIsOCk7Ci0JCXJldHVybiByZXQ7IAorCQlfX3B1dF91c2VyX2FzbSgxWyh1NjQgKilzcmNdLCAxICsgKHU2NCBfX3VzZXIgKilkc3QsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiaXIiLCA4KTsKKwkJcmV0dXJuIHJldDsKIAlkZWZhdWx0OgotCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCxzcmMsc2l6ZSk7IAorCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwgc3JjLCBzaXplKTsKIAl9Ci19CQorfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbXVzdF9jaGVjawogaW50IF9fY29weV9pbl91c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCi17IAorewogCWludCByZXQgPSAwOwogCWlmICghX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpCi0JCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LChfX2ZvcmNlIHZvaWQgKilzcmMsc2l6ZSk7Ci0Jc3dpdGNoIChzaXplKSB7IAotCWNhc2UgMTogeyAKKwkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3QsCisJCQkJCSAoX19mb3JjZSB2b2lkICopc3JjLCBzaXplKTsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6IHsKIAkJdTggdG1wOwotCQlfX2dldF91c2VyX2FzbSh0bXAsKHU4IF9fdXNlciAqKXNyYyxyZXQsImIiLCJiIiwiPXEiLDEpOyAKKwkJX19nZXRfdXNlcl9hc20odG1wLCAodTggX191c2VyICopc3JjLAorCQkJICAgICAgIHJldCwgImIiLCAiYiIsICI9cSIsIDEpOwogCQlpZiAobGlrZWx5KCFyZXQpKQotCQkJX19wdXRfdXNlcl9hc20odG1wLCh1OCBfX3VzZXIgKilkc3QscmV0LCJiIiwiYiIsImlxIiwxKTsgCisJCQlfX3B1dF91c2VyX2FzbSh0bXAsICh1OCBfX3VzZXIgKilkc3QsCisJCQkJICAgICAgIHJldCwgImIiLCAiYiIsICJpcSIsIDEpOwogCQlyZXR1cm4gcmV0OwogCX0KLQljYXNlIDI6IHsgCisJY2FzZSAyOiB7CiAJCXUxNiB0bXA7Ci0JCV9fZ2V0X3VzZXJfYXNtKHRtcCwodTE2IF9fdXNlciAqKXNyYyxyZXQsInciLCJ3IiwiPXIiLDIpOyAKKwkJX19nZXRfdXNlcl9hc20odG1wLCAodTE2IF9fdXNlciAqKXNyYywKKwkJCSAgICAgICByZXQsICJ3IiwgInciLCAiPXIiLCAyKTsKIAkJaWYgKGxpa2VseSghcmV0KSkKLQkJCV9fcHV0X3VzZXJfYXNtKHRtcCwodTE2IF9fdXNlciAqKWRzdCxyZXQsInciLCJ3IiwiaXIiLDIpOyAKKwkJCV9fcHV0X3VzZXJfYXNtKHRtcCwgKHUxNiBfX3VzZXIgKilkc3QsCisJCQkJICAgICAgIHJldCwgInciLCAidyIsICJpciIsIDIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNhc2UgNDogeyAKKwljYXNlIDQ6IHsKIAkJdTMyIHRtcDsKLQkJX19nZXRfdXNlcl9hc20odG1wLCh1MzIgX191c2VyICopc3JjLHJldCwibCIsImsiLCI9ciIsNCk7IAorCQlfX2dldF91c2VyX2FzbSh0bXAsICh1MzIgX191c2VyICopc3JjLAorCQkJICAgICAgIHJldCwgImwiLCAiayIsICI9ciIsIDQpOwogCQlpZiAobGlrZWx5KCFyZXQpKQotCQkJX19wdXRfdXNlcl9hc20odG1wLCh1MzIgX191c2VyICopZHN0LHJldCwibCIsImsiLCJpciIsNCk7IAorCQkJX19wdXRfdXNlcl9hc20odG1wLCAodTMyIF9fdXNlciAqKWRzdCwKKwkJCQkgICAgICAgcmV0LCAibCIsICJrIiwgImlyIiwgNCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWNhc2UgODogeyAKKwljYXNlIDg6IHsKIAkJdTY0IHRtcDsKLQkJX19nZXRfdXNlcl9hc20odG1wLCh1NjQgX191c2VyICopc3JjLHJldCwicSIsIiIsIj1yIiw4KTsgCisJCV9fZ2V0X3VzZXJfYXNtKHRtcCwgKHU2NCBfX3VzZXIgKilzcmMsCisJCQkgICAgICAgcmV0LCAicSIsICIiLCAiPXIiLCA4KTsKIAkJaWYgKGxpa2VseSghcmV0KSkKLQkJCV9fcHV0X3VzZXJfYXNtKHRtcCwodTY0IF9fdXNlciAqKWRzdCxyZXQsInEiLCIiLCJpciIsOCk7IAorCQkJX19wdXRfdXNlcl9hc20odG1wLCAodTY0IF9fdXNlciAqKWRzdCwKKwkJCQkgICAgICAgcmV0LCAicSIsICIiLCAiaXIiLCA4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJZGVmYXVsdDoKLQkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3QsKF9fZm9yY2Ugdm9pZCAqKXNyYyxzaXplKTsgCisJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopZHN0LAorCQkJCQkgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSk7CiAJfQotfQkKK30KIAotX19tdXN0X2NoZWNrIGxvbmcgCitfX211c3RfY2hlY2sgbG9uZwogc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KTsKLV9fbXVzdF9jaGVjayBsb25nIAorX19tdXN0X2NoZWNrIGxvbmcKIF9fc3RybmNweV9mcm9tX3VzZXIoY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KTsKIF9fbXVzdF9jaGVjayBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pOwogX19tdXN0X2NoZWNrIGxvbmcgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKTsKQEAgLTM1NSw3ICs0MjgsOCBAQAogX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcgY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CiBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwogCi1fX211c3RfY2hlY2sgbG9uZyBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgc2l6ZSk7CitfX211c3RfY2hlY2sgbG9uZyBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKKwkJCQkJICAgIHVuc2lnbmVkIHNpemUpOwogCiBzdGF0aWMgX19tdXN0X2NoZWNrIF9fYWx3YXlzX2lubGluZSBpbnQKIF9fY29weV90b191c2VyX2luYXRvbWljKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgc2l6ZSkKQEAgLTM2NCwxNSArNDM4LDE5IEBACiB9CiAKICNkZWZpbmUgQVJDSF9IQVNfTk9DQUNIRV9VQUNDRVNTIDEKLWV4dGVybiBsb25nIF9fY29weV91c2VyX25vY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplLCBpbnQgemVyb3Jlc3QpOworZXh0ZXJuIGxvbmcgX19jb3B5X3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJdW5zaWduZWQgc2l6ZSwgaW50IHplcm9yZXN0KTsKIAotc3RhdGljIGlubGluZSBpbnQgX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29weV9mcm9tX3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJCSAgIHVuc2lnbmVkIHNpemUpCiB7CiAJbWlnaHRfc2xlZXAoKTsKIAlyZXR1cm4gX19jb3B5X3VzZXJfbm9jYWNoZShkc3QsIHNyYywgc2l6ZSwgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCitzdGF0aWMgaW5saW5lIGludCBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodm9pZCAqZHN0LAorCQkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkJCQkgICAgdW5zaWduZWQgc2l6ZSkKIHsKIAlyZXR1cm4gX19jb3B5X3VzZXJfbm9jYWNoZShkc3QsIHNyYywgc2l6ZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS14ODYvdW5hbGlnbmVkLmgKaW5kZXggOTEzNTk4ZC4uZDI3MGZmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni91bmFsaWduZWQuaApAQCAtMzIsNiArMzIsNiBAQAogICoKICAqIE5vdGUgdGhhdCB1bmFsaWduZWQgYWNjZXNzZXMgY2FuIGJlIHZlcnkgZXhwZW5zaXZlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4KICAqLwotI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCAqKHB0cikgPSAodmFsKSApKQorI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCoocHRyKSA9ICh2YWwpKSkKIAogI2VuZGlmIC8qIF9BU01fWDg2X1VOQUxJR05FRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS14ODYvdW5pc3RkLmgKaW5kZXggMmE1OGVkMy4uZWZmYzdhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni91bmlzdGQuaApAQCAtMSwxMSArMSw1IEBACiAjaWZkZWYgX19LRVJORUxfXwotIyBpZmRlZiBDT05GSUdfWDg2XzMyCi0jICBpbmNsdWRlICJ1bmlzdGRfMzIuaCIKLSMgZWxzZQotIyAgaW5jbHVkZSAidW5pc3RkXzY0LmgiCi0jIGVuZGlmCi0jZWxzZQotIyBpZmRlZiBfX2kzODZfXworIyBpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpIHx8IGRlZmluZWQoX19pMzg2X18pCiAjICBpbmNsdWRlICJ1bmlzdGRfMzIuaCIKICMgZWxzZQogIyAgaW5jbHVkZSAidW5pc3RkXzY0LmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdW5pc3RkXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvdW5pc3RkXzMyLmgKaW5kZXggOTg0MTIzYS4uODMxN2Q5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3VuaXN0ZF8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni91bmlzdGRfMzIuaApAQCAtODEsNyArODEsNyBAQAogI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcJCSA3MwogI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCSA3NAogI2RlZmluZSBfX05SX3NldHJsaW1pdAkJIDc1Ci0jZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkgNzYJLyogQmFjayBjb21wYXRpYmxlIDJHaWcgbGltaXRlZCBybGltaXQgKi8KKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NiAgIC8qIEJhY2sgY29tcGF0aWJsZSAyR2lnIGxpbWl0ZWQgcmxpbWl0ICovCiAjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKICNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CiAjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3VuaXN0ZF82NC5oIGIvaW5jbHVkZS9hc20teDg2L3VuaXN0ZF82NC5oCmluZGV4IDM4ODNjZWIuLmZlMjZlMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91bmlzdGRfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdW5pc3RkXzY0LmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9BU01fWDg2XzY0X1VOSVNURF9IXwogCiAjaWZuZGVmIF9fU1lTQ0FMTAotI2RlZmluZSBfX1NZU0NBTEwoYSxiKQorI2RlZmluZSBfX1NZU0NBTEwoYSwgYikKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3VzZXIzMi5oIGIvaW5jbHVkZS9hc20teDg2L3VzZXIzMi5oCmluZGV4IGY3Njk4NzIuLmEzZDkxMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdXNlcjMyLmgKQEAgLTEsNyArMSw4IEBACiAjaWZuZGVmIFVTRVIzMl9ICiAjZGVmaW5lIFVTRVIzMl9IIDEKIAotLyogSUEzMiBjb21wYXRpYmxlIHVzZXIgc3RydWN0dXJlcyBmb3IgcHRyYWNlLiBUaGVzZSBzaG91bGQgYmUgdXNlZCBmb3IgMzJiaXQgY29yZWR1bXBzIHRvby4gKi8KKy8qIElBMzIgY29tcGF0aWJsZSB1c2VyIHN0cnVjdHVyZXMgZm9yIHB0cmFjZS4KKyAqIFRoZXNlIHNob3VsZCBiZSB1c2VkIGZvciAzMmJpdCBjb3JlZHVtcHMgdG9vLiAqLwogCiBzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IHsKIAl1MzIJY3dkOwpAQCAtNDIsOSArNDMsOSBAQAogfTsKIAogc3RydWN0IHVzZXIzMiB7Ci0gIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIgcmVnczsJCS8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLworICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyIHJlZ3M7IC8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLwogICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgdGhpcyBtZXNzLiBOb3QgeWV0IHVzZWQuICovCisJCQkJLyogZm9yIHRoaXMgbWVzcy4gTm90IHlldCB1c2VkLiAqLwogICBzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IGkzODc7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHJlZ2lzdGVycy4gKi8KIC8qIFRoZSByZXN0IG9mIHRoaXMganVuayBpcyB0byBoZWxwIGdkYiBmaWd1cmUgb3V0IHdoYXQgZ29lcyB3aGVyZSAqLwogICBfX3UzMiB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3VzZXJfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni91c2VyXzMyLmgKaW5kZXggNjE1N2RhNi4uZDZlNTFlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3VzZXJfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdXNlcl8zMi5oCkBAIC0xMDAsMTAgKzEwMCwxMCBAQAogc3RydWN0IHVzZXJ7CiAvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IiBpcyByZXR1cm5lZAogICAgZnJvbSB0aGUgcHRyYWNlKDMsLi4uKSBmdW5jdGlvbi4gICovCi0gIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CQkvKiBXaGVyZSB0aGUgcmVnaXN0ZXJzIGFyZSBhY3R1YWxseSBzdG9yZWQgKi8KKyAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgcmVnczsJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCiAvKiBwdHJhY2UgZG9lcyBub3QgeWV0IHN1cHBseSB0aGVzZS4gIFNvbWVkYXkuLi4uICovCiAgIGludCB1X2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0aGlzIG1lc3MuIE5vdCB5ZXQgdXNlZC4gKi8KKwkJCQkvKiBmb3IgdGhpcyBtZXNzLiBOb3QgeWV0IHVzZWQuICovCiAgIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IGkzODc7CS8qIE1hdGggQ28tcHJvY2Vzc29yIHJlZ2lzdGVycy4gKi8KIC8qIFRoZSByZXN0IG9mIHRoaXMganVuayBpcyB0byBoZWxwIGdkYiBmaWd1cmUgb3V0IHdoYXQgZ29lcyB3aGVyZSAqLwogICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLwpAQCAtMTE4LDcgKzExOCw3IEBACiAgIGludCByZXNlcnZlZDsJCQkvKiBObyBsb25nZXIgdXNlZCAqLwogICB1bnNpZ25lZCBsb25nIHVfYXIwOwkJLyogVXNlZCBieSBnZGIgdG8gaGVscCBmaW5kIHRoZSB2YWx1ZXMgZm9yICovCiAJCQkJLyogdGhlIHJlZ2lzdGVycy4gKi8KLSAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QqIHVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlci4gKi8KKyAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgKnVfZnBzdGF0ZTsJLyogTWF0aCBDby1wcm9jZXNzb3IgcG9pbnRlci4gKi8KICAgdW5zaWduZWQgbG9uZyBtYWdpYzsJCS8qIFRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29yZSBmaWxlICovCiAgIGNoYXIgdV9jb21tWzMyXTsJCS8qIFVzZXIgY29tbWFuZCB0aGF0IHdhcyByZXNwb25zaWJsZSAqLwogICBpbnQgdV9kZWJ1Z3JlZ1s4XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvdXNlcl82NC5oCmluZGV4IDk2MzYxNjQuLjYwMzdiNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91c2VyXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3VzZXJfNjQuaApAQCAtNDUsMTIgKzQ1LDEzIEBACiAgKi8KIAogLyogVGhpcyBtYXRjaGVzIHRoZSA2NGJpdCBGWFNBVkUgZm9ybWF0IGFzIGRlZmluZWQgYnkgQU1ELiBJdCBpcyB0aGUgc2FtZQotICAgYXMgdGhlIDMyYml0IGZvcm1hdCBkZWZpbmVkIGJ5IEludGVsLCBleGNlcHQgdGhhdCB0aGUgc2VsZWN0b3I6b2Zmc2V0IHBhaXJzIGZvcgotICAgZGF0YSBhbmQgZWlwIGFyZSByZXBsYWNlZCB3aXRoIGZsYXQgNjRiaXQgcG9pbnRlcnMuICovCisgICBhcyB0aGUgMzJiaXQgZm9ybWF0IGRlZmluZWQgYnkgSW50ZWwsIGV4Y2VwdCB0aGF0IHRoZSBzZWxlY3RvcjpvZmZzZXQgcGFpcnMKKyAgIGZvciBkYXRhIGFuZCBlaXAgYXJlIHJlcGxhY2VkIHdpdGggZmxhdCA2NGJpdCBwb2ludGVycy4gKi8KIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IHsKIAl1bnNpZ25lZCBzaG9ydAljd2Q7CiAJdW5zaWduZWQgc2hvcnQJc3dkOwotCXVuc2lnbmVkIHNob3J0CXR3ZDsgLyogTm90ZSB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgMzJiaXQveDg3L0ZTQVZFIHR3ZCAqLworCXVuc2lnbmVkIHNob3J0CXR3ZDsJLyogTm90ZSB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcworCQkJCSAgIHRoZSAzMmJpdC94ODcvRlNBVkUgdHdkICovCiAJdW5zaWduZWQgc2hvcnQJZm9wOwogCV9fdTY0CXJpcDsKIAlfX3U2NAlyZHA7CkBAIC05NywxMyArOTgsMTQgQEAKIC8qIFdoZW4gdGhlIGtlcm5lbCBkdW1wcyBjb3JlLCBpdCBzdGFydHMgYnkgZHVtcGluZyB0aGUgdXNlciBzdHJ1Y3QgLQogICAgdGhpcyB3aWxsIGJlIHVzZWQgYnkgZ2RiIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYW5kIHN0YWNrIHNlZ21lbnRzCiAgICBhcmUgd2l0aGluIHRoZSBmaWxlLCBhbmQgd2hhdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byB1c2UuICovCi1zdHJ1Y3QgdXNlcnsKKworc3RydWN0IHVzZXIgewogLyogV2Ugc3RhcnQgd2l0aCB0aGUgcmVnaXN0ZXJzLCB0byBtaW1pYyB0aGUgd2F5IHRoYXQgIm1lbW9yeSIgaXMgcmV0dXJuZWQKICAgIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLwotICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwkJLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CS8qIFdoZXJlIHRoZSByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHN0b3JlZCAqLwogLyogcHRyYWNlIGRvZXMgbm90IHlldCBzdXBwbHkgdGhlc2UuICBTb21lZGF5Li4uLiAqLwogICBpbnQgdV9mcHZhbGlkOwkJLyogVHJ1ZSBpZiBtYXRoIGNvLXByb2Nlc3NvciBiZWluZyB1c2VkLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgdGhpcyBtZXNzLiBOb3QgeWV0IHVzZWQuICovCisJCQkJLyogZm9yIHRoaXMgbWVzcy4gTm90IHlldCB1c2VkLiAqLwogICBpbnQgcGFkMDsKICAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgaTM4NzsJLyogTWF0aCBDby1wcm9jZXNzb3IgcmVnaXN0ZXJzLiAqLwogLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCkBAIC0xMjAsNyArMTIyLDcgQEAKICAgaW50IHBhZDE7CiAgIHVuc2lnbmVkIGxvbmcgdV9hcjA7CQkvKiBVc2VkIGJ5IGdkYiB0byBoZWxwIGZpbmQgdGhlIHZhbHVlcyBmb3IgKi8KIAkJCQkvKiB0aGUgcmVnaXN0ZXJzLiAqLwotICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCogdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyLiAqLworICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqdV9mcHN0YXRlOwkvKiBNYXRoIENvLXByb2Nlc3NvciBwb2ludGVyLiAqLwogICB1bnNpZ25lZCBsb25nIG1hZ2ljOwkJLyogVG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb3JlIGZpbGUgKi8KICAgY2hhciB1X2NvbW1bMzJdOwkJLyogVXNlciBjb21tYW5kIHRoYXQgd2FzIHJlc3BvbnNpYmxlICovCiAgIHVuc2lnbmVkIGxvbmcgdV9kZWJ1Z3JlZ1s4XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di91dl9odWIuaCBiL2luY2x1ZGUvYXNtLXg4Ni91di91dl9odWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmI5MjQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2L3V2L3V2X2h1Yi5oCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIGFyY2hpdGVjdHVyYWwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX19BU01fWDg2X1VWX0hVQl9IX18KKyNkZWZpbmUgX19BU01fWDg2X1VWX0hVQl9IX18KKworI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisKKworLyoKKyAqIEFkZHJlc3NpbmcgVGVybWlub2xvZ3kKKyAqCisgKiAJTkFTSUQgLSBuZXR3b3JrIElEIG9mIGEgcm91dGVyLCBNYnJpY2sgb3IgQ2JyaWNrLiBOYXNpZCB2YWx1ZXMgb2YKKyAqIAkJcm91dGVycyBhbHdheXMgaGF2ZSBsb3cgYml0IG9mIDEsIEMvTUJyaWNrcyBoYXZlIGxvdyBiaXQKKyAqIAkJZXF1YWwgdG8gMC4gTW9zdCBhZGRyZXNzaW5nIG1hY3JvcyB0aGF0IHRhcmdldCBVViBodWIgY2hpcHMKKyAqIAkJcmlnaHQgc2hpZnQgdGhlIE5BU0lEIGJ5IDEgdG8gZXhjbHVkZSB0aGUgYWx3YXlzLXplcm8gYml0LgorICoKKyAqCVNOQVNJRCAtIE5BU0lEIHJpZ2h0IHNoaWZ0ZWQgYnkgMSBiaXQuCisgKgorICoKKyAqICBNZW1vcnkvVVYtSFVCIFByb2Nlc3NvciBTb2NrZXQgQWRkcmVzcyBGb3JtYXQ6CisgKiAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgfDAwLi4wMDAwfCAgICBTTkFTSUQgICAgIHwgICAgICBOb2RlT2Zmc2V0ICAgICB8CisgKiAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgPC0tLSBOIGJpdHMgLS0tPnw8LS0tLS0tLS1NIGJpdHMgLS0tLS0+CisgKgorICoJTSBudW1iZXIgb2Ygbm9kZSBvZmZzZXQgYml0cyAoMzUgLi4gNDApCisgKglOIG51bWJlciBvZiBTTkFTSUQgYml0cyAoMCAuLiAxMCkKKyAqCisgKgkJTm90ZTogTSArIE4gY2Fubm90IGN1cnJlbnRseSBleGNlZWQgNDQgKHg4Nl82NCkgb3IgNDYgKElBNjQpLgorICoJCVRoZSBhY3R1YWwgdmFsdWVzIGFyZSBjb25maWd1cmF0aW9uIGRlcGVuZGVudCBhbmQgYXJlIHNldCBhdAorICoJCWJvb3QgdGltZQorICoKKyAqIEFQSUNJRCBmb3JtYXQKKyAqIAlOT1RFISEhISEhIFRoaXMgaXMgdGhlIGN1cnJlbnQgZm9ybWF0IG9mIHRoZSBBUElDSUQuIEhvd2V2ZXIsIGNvZGUKKyAqIAlzaG91bGQgYXNzdW1lIHRoYXQgdGhpcyB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlLiBVc2UgZnVuY3Rpb25zCisgKiAJaW4gdGhpcyBmaWxlIGZvciBhbGwgQVBJQ0lEIGJpdCBtYW5pcHVsYXRpb25zIGFuZCBjb252ZXJzaW9uLgorICoKKyAqIAkJMTExMTExMDAwMDAwMDAwMAorICogCQk1NDMyMTA5ODc2NTQzMjEwCisgKgkJbm5ubm5ubm5ubmxjMGNjaAorICoJCXNzc3Nzc3Nzc3NzCisgKgorICoJCQluICA9IHNuYXNpZCBiaXRzCisgKgkJCWwgPSAgc29ja2V0IG51bWJlciBvbiBib2FyZAorICoJCQljICA9IGNvcmUKKyAqCQkJaCAgPSBoeXBlcnRocmVhZAorICoJCQlzICA9IGJpdHMgdGhhdCBhcmUgaW4gdGhlIHNvY2tldCBDU1IKKyAqCisgKglOb3RlOiBQcm9jZXNzb3Igb25seSBzdXBwb3J0cyAxMiBiaXRzIGluIHRoZSBBUElDSUQgcmVnaXN0ZXIuIFRoZSBBQ1BJCisgKgkgICAgICB0YWJsZXMgaG9sZCBhbGwgMTYgYml0cy4gU29mdHdhcmUgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhpcy4KKyAqCisgKiAJICAgICAgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCByZWZlcmVuY2VzIHRvIEFQSUNJRCByZWZlciB0bworICogCSAgICAgIHRoZSBGVUxMIHZhbHVlIGNvbnRhaW5lZCBpbiBBQ1BJIHRhYmxlcywgbm90IHRoZSBzdWJzZXQgaW4gdGhlCisgKiAJICAgICAgcHJvY2Vzc29yIEFQSUNJRCByZWdpc3Rlci4KKyAqLworCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBicmlja3MgaW4gYWxsIHBhcnRpdGlvbnMgYW5kIGluIGFsbCBjb2hlcmVuY3kgZG9tYWlucy4KKyAqIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBicmlja3MgYWNjZXNzaWJsZSBpbiB0aGUgbnVtYWxpbmsgZmFicmljLiBJdAorICogaW5jbHVkZXMgYWxsIEMgJiBNIGJyaWNrcy4gUm91dGVycyBhcmUgTk9UIGluY2x1ZGVkLgorICoKKyAqIFRoaXMgdmFsdWUgaXMgYWxzbyB0aGUgdmFsdWUgb2YgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vbi1yb3V0ZXIgTkFTSURzCisgKiBpbiB0aGUgbnVtYWxpbmsgZmFicmljLgorICoKKyAqIE5PVEU6IGEgYnJpY2sgbWF5IGJlIDEgb3IgMiBPUyBub2Rlcy4gRG9uJ3QgZ2V0IHRoZXNlIGNvbmZ1c2VkLgorICovCisjZGVmaW5lIFVWX01BWF9OVU1BTElOS19CTEFERVMJMTYzODQKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIEMvTWJyaWNrcyB3aXRoaW4gYSBzb2Z0d2FyZSBTU0kgKGhhcmR3YXJlIG1heSBzdXBwb3J0CisgKiBtb3JlKS4KKyAqLworI2RlZmluZSBVVl9NQVhfU1NJX0JMQURFUwkyNTYKKworLyoKKyAqIFRoZSBsYXJnZXN0IHBvc3NpYmxlIE5BU0lEIG9mIGEgQyBvciBNIGJyaWNrICgrIDIpCisgKi8KKyNkZWZpbmUgVVZfTUFYX05BU0lEX1ZBTFVFCShVVl9NQVhfTlVNQUxJTktfTk9ERVMgKiAyKQorCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGF0dHJpYnV0ZXMgb2YgdGhlIEhVQiBjaGlwLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZQorICogZnJlcXVlbnRseSByZWZlcmVuY2VkIGFuZCBhcmUga2VwdCBpbiB0aGUgcGVyLWNwdSBkYXRhIGFyZWFzIG9mIGVhY2ggY3B1LgorICogVGhleSBhcmUga2VwdCB0b2dldGhlciBpbiBhIHN0cnVjdCB0byBtaW5pbWl6ZSBjYWNoZSBtaXNzZXMuCisgKi8KK3N0cnVjdCB1dl9odWJfaW5mb19zIHsKKwl1bnNpZ25lZCBsb25nCWdsb2JhbF9tbXJfYmFzZTsKKwl1bnNpZ25lZCBzaG9ydAlsb2NhbF9uYXNpZDsKKwl1bnNpZ25lZCBzaG9ydAlnbm9kZV91cHBlcjsKKwl1bnNpZ25lZCBzaG9ydAljb2hlcmVuY3lfZG9tYWluX251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydAludW1hX2JsYWRlX2lkOworCXVuc2lnbmVkIGNoYXIJYmxhZGVfcHJvY2Vzc29yX2lkOworCXVuc2lnbmVkIGNoYXIJbV92YWw7CisJdW5zaWduZWQgY2hhcgluX3ZhbDsKK307CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHV2X2h1Yl9pbmZvX3MsIF9fdXZfaHViX2luZm8pOworI2RlZmluZSB1dl9odWJfaW5mbyAJCSgmX19nZXRfY3B1X3ZhcihfX3V2X2h1Yl9pbmZvKSkKKyNkZWZpbmUgdXZfY3B1X2h1Yl9pbmZvKGNwdSkJKCZwZXJfY3B1KF9fdXZfaHViX2luZm8sIGNwdSkpCisKKy8qCisgKiBMb2NhbCAmIEdsb2JhbCBNTVIgc3BhY2UgbWFjcm9zLgorICogCU5vdGU6IG1hY3JvcyBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBPTkxZIGJ5IGlubGluZSBmdW5jdGlvbnMKKyAqIAlpbiB0aGlzIGZpbGUgLSBub3QgYnkgb3RoZXIga2VybmVsIGNvZGUuCisgKi8KKyNkZWZpbmUgVVZfU05BU0lEKG4pCQkJKChuKSA+PiAxKQorI2RlZmluZSBVVl9OQVNJRChuKQkJCSgobikgPDwgMSkKKworI2RlZmluZSBVVl9MT0NBTF9NTVJfQkFTRQkJMHhmNDAwMDAwMFVMCisjZGVmaW5lIFVWX0dMT0JBTF9NTVIzMl9CQVNFCQkweGY4MDAwMDAwVUwKKyNkZWZpbmUgVVZfR0xPQkFMX01NUjY0X0JBU0UJCSh1dl9odWJfaW5mby0+Z2xvYmFsX21tcl9iYXNlKQorCisjZGVmaW5lIFVWX0dMT0JBTF9NTVIzMl9TTkFTSURfTUFTSwkweDNmZgorI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfU05BU0lEX1NISUZUCTE1CisjZGVmaW5lIFVWX0dMT0JBTF9NTVI2NF9TTkFTSURfU0hJRlQJMjYKKworI2RlZmluZSBVVl9HTE9CQUxfTU1SMzJfTkFTSURfQklUUyhuKQkJCQkJXAorCQkoKChVVl9TTkFTSUQobikgJiBVVl9HTE9CQUxfTU1SMzJfU05BU0lEX01BU0spKSA8PAlcCisJCShVVl9HTE9CQUxfTU1SMzJfU05BU0lEX1NISUZUKSkKKworI2RlZmluZSBVVl9HTE9CQUxfTU1SNjRfTkFTSURfQklUUyhuKQkJCQkJXAorCSgodW5zaWduZWQgbG9uZylVVl9TTkFTSUQobikgPDwgVVZfR0xPQkFMX01NUjY0X1NOQVNJRF9TSElGVCkKKworI2RlZmluZSBVVl9BUElDX05BU0lEX1NISUZUCTYKKworLyoKKyAqIEV4dHJhY3QgYSBOQVNJRCBmcm9tIGFuIEFQSUNJRCAoZnVsbCBhcGljaWQsIG5vdCBwcm9jZXNzb3Igc3Vic2V0KQorICovCitzdGF0aWMgaW5saW5lIGludCB1dl9hcGljaWRfdG9fbmFzaWQoaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gKFVWX05BU0lEKGFwaWNpZCA+PiBVVl9BUElDX05BU0lEX1NISUZUKSk7Cit9CisKKy8qCisgKiBBY2Nlc3MgZ2xvYmFsIE1NUnMgdXNpbmcgdGhlIGxvdyBtZW1vcnkgTU1SMzIgc3BhY2UuIFRoaXMgcmVnaW9uIHN1cHBvcnRzCisgKiBmYXN0ZXIgTU1SIGFjY2VzcyBidXQgbm90IGFsbCBNTVJzIGFyZSBhY2Nlc3NpYmxlIGluIHRoaXMgc3BhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MoaW50IG5hc2lkLAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiBfX3ZhKFVWX0dMT0JBTF9NTVIzMl9CQVNFIHwKKwkJICAgICAgIFVWX0dMT0JBTF9NTVIzMl9OQVNJRF9CSVRTKG5hc2lkKSB8IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9nbG9iYWxfbW1yMzIoaW50IG5hc2lkLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJKnV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKG5hc2lkLCBvZmZzZXQpID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9nbG9iYWxfbW1yMzIoaW50IG5hc2lkLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiAqdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MobmFzaWQsIG9mZnNldCk7Cit9CisKKy8qCisgKiBBY2Nlc3MgR2xvYmFsIE1NUiBzcGFjZSB1c2luZyB0aGUgTU1SIHNwYWNlIGxvY2F0ZWQgYXQgdGhlIHRvcCBvZiBwaHlzaWNhbAorICogbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKGludCBuYXNpZCwKKwkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gX192YShVVl9HTE9CQUxfTU1SNjRfQkFTRSB8CisJCSAgICAgICBVVl9HTE9CQUxfTU1SNjRfTkFTSURfQklUUyhuYXNpZCkgfCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfZ2xvYmFsX21tcjY0KGludCBuYXNpZCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJdW5zaWduZWQgbG9uZyB2YWwpCit7CisJKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKG5hc2lkLCBvZmZzZXQpID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9nbG9iYWxfbW1yNjQoaW50IG5hc2lkLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiAqdXZfZ2xvYmFsX21tcjY0X2FkZHJlc3MobmFzaWQsIG9mZnNldCk7Cit9CisKKy8qCisgKiBBY2Nlc3Mgbm9kZSBsb2NhbCBNTVJzLiBGYXN0ZXIgdGhhbiB1c2luZyBnbG9iYWwgc3BhY2UgYnV0IG9ubHkgbG9jYWwgTU1ScworICogYXJlIGFjY2Vzc2libGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqdXZfbG9jYWxfbW1yX2FkZHJlc3ModW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIF9fdmEoVVZfTE9DQUxfTU1SX0JBU0UgfCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9sb2NhbF9tbXIodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuICp1dl9sb2NhbF9tbXJfYWRkcmVzcyhvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfbG9jYWxfbW1yKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwkqdXZfbG9jYWxfbW1yX2FkZHJlc3Mob2Zmc2V0KSA9IHZhbDsKK30KKworLyoKKyAqIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gY3B1LCBub2RlLCBhbmQgYmxhZGUKKyAqIG51bWJlcnMuCisgKi8KK3N0cnVjdCB1dl9ibGFkZV9pbmZvIHsKKwl1bnNpZ25lZCBzaG9ydAlucl9wb3NpYmxlX2NwdXM7CisJdW5zaWduZWQgc2hvcnQJbnJfb25saW5lX2NwdXM7CisJdW5zaWduZWQgc2hvcnQJbmFzaWQ7Cit9Oworc3RydWN0IHV2X2JsYWRlX2luZm8gKnV2X2JsYWRlX2luZm87CitleHRlcm4gc2hvcnQgKnV2X25vZGVfdG9fYmxhZGU7CitleHRlcm4gc2hvcnQgKnV2X2NwdV90b19ibGFkZTsKK2V4dGVybiBzaG9ydCB1dl9wb3NzaWJsZV9ibGFkZXM7CisKKy8qIEJsYWRlLWxvY2FsIGNwdSBudW1iZXIgb2YgY3VycmVudCBjcHUuIE51bWJlcmVkIDAgLi4gPCMgY3B1cyBvbiB0aGUgYmxhZGU+ICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ibGFkZV9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwlyZXR1cm4gdXZfaHViX2luZm8tPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKK30KKworLyogQmxhZGUgbnVtYmVyIG9mIGN1cnJlbnQgY3B1LiBOdW1uYmVyZWQgMCAuLiA8I2JsYWRlcyAtMT4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X251bWFfYmxhZGVfaWQodm9pZCkKK3sKKwlyZXR1cm4gdXZfaHViX2luZm8tPm51bWFfYmxhZGVfaWQ7Cit9CisKKy8qIENvbnZlcnQgYSBjcHUgbnVtYmVyIHRvIHRoZSB0aGUgVVYgYmxhZGUgbnVtYmVyICovCitzdGF0aWMgaW5saW5lIGludCB1dl9jcHVfdG9fYmxhZGVfaWQoaW50IGNwdSkKK3sKKwlyZXR1cm4gdXZfY3B1X3RvX2JsYWRlW2NwdV07Cit9CisKKy8qIENvbnZlcnQgbGludXggbm9kZSBudW1iZXIgdG8gdGhlIFVWIGJsYWRlIG51bWJlciAqLworc3RhdGljIGlubGluZSBpbnQgdXZfbm9kZV90b19ibGFkZV9pZChpbnQgbmlkKQoreworCXJldHVybiB1dl9ub2RlX3RvX2JsYWRlW25pZF07Cit9CisKKy8qIENvbnZlcnQgYSBibGFkZSBpZCB0byB0aGUgTkFTSUQgb2YgdGhlIGJsYWRlICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ibGFkZV90b19uYXNpZChpbnQgYmlkKQoreworCXJldHVybiB1dl9ibGFkZV9pbmZvW2JpZF0ubmFzaWQ7Cit9CisKKy8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGNwdXMgb24gYSBibGFkZSAqLworc3RhdGljIGlubGluZSBpbnQgdXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyhpbnQgYmlkKQoreworCXJldHVybiB1dl9ibGFkZV9pbmZvW2JpZF0ubnJfcG9zaWJsZV9jcHVzOworfQorCisvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBvbmxpbmUgY3B1cyBvbiBhIGJsYWRlICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ibGFkZV9ucl9vbmxpbmVfY3B1cyhpbnQgYmlkKQoreworCXJldHVybiB1dl9ibGFkZV9pbmZvW2JpZF0ubnJfb25saW5lX2NwdXM7Cit9CisKKy8qIENvbnZlcnQgYSBjcHUgaWQgdG8gdGhlIE5BU0lEIG9mIHRoZSBibGFkZSBjb250YWluaW5nIHRoZSBjcHUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X2NwdV90b19uYXNpZChpbnQgY3B1KQoreworCXJldHVybiB1dl9ibGFkZV9pbmZvW3V2X2NwdV90b19ibGFkZV9pZChjcHUpXS5uYXNpZDsKK30KKworLyogQ29udmVydCBhIG5vZGUgbnVtYmVyIHRvIHRoZSBOQVNJRCBvZiB0aGUgYmxhZGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X25vZGVfdG9fbmFzaWQoaW50IG5pZCkKK3sKKwlyZXR1cm4gdXZfYmxhZGVfaW5mb1t1dl9ub2RlX3RvX2JsYWRlX2lkKG5pZCldLm5hc2lkOworfQorCisvKiBNYXhpbXVtIHBvc3NpYmxlIG51bWJlciBvZiBibGFkZXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X251bV9wb3NzaWJsZV9ibGFkZXModm9pZCkKK3sKKwlyZXR1cm4gdXZfcG9zc2libGVfYmxhZGVzOworfQorCisjZW5kaWYgLyogX19BU01fWDg2X1VWX0hVQl9fICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di91dl9tbXJzLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvdXZfbW1ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNjlmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14ODYvdXYvdXZfbW1ycy5oCkBAIC0wLDAgKzEsMzczIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIE1NUiBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX1g4Nl9VVl9NTVJTX18KKyNkZWZpbmUgX19BU01fWDg2X1VWX01NUlNfXworCisvKgorICogICAgICAgQVVUTyBHRU5FUkFURUQgLSBEbyBub3QgZWRpdAorICovCisKKyAjZGVmaW5lIFVWX01NUl9FTkFCTEUJCSgxVUwgPDwgNjMpCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9JUElfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0lQSV9JTlQgMHg2MDUwMFVMCisjZGVmaW5lIFVWSF9JUElfSU5UXzMyIDB4MDM2MAorCisjZGVmaW5lIFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0lQSV9JTlRfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0lQSV9JTlRfREVMSVZFUllfTU9ERV9TSEZUIDgKKyNkZWZpbmUgVVZIX0lQSV9JTlRfREVMSVZFUllfTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDcwMFVMCisjZGVmaW5lIFVWSF9JUElfSU5UX0RFU1RNT0RFX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0lQSV9JTlRfREVTVE1PREVfTUFTSyAweDAwMDAwMDAwMDAwMDA4MDBVTAorI2RlZmluZSBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0lQSV9JTlRfQVBJQ19JRF9NQVNLIDB4MDAwMGZmZmZmZmZmMDAwMFVMCisjZGVmaW5lIFVWSF9JUElfSU5UX1NFTkRfU0hGVCA2MworI2RlZmluZSBVVkhfSVBJX0lOVF9TRU5EX01BU0sgMHg4MDAwMDAwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX2lwaV9pbnRfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfaXBpX2ludF9zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gICAgICAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZWxpdmVyeV9tb2RlIDogIDM7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZGVzdG1vZGUgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTJfMTUgICAgOiAgNDsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICAgICAgIDogMzI7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80OF82MiAgICA6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXNlbmQgICAgICAgICAgOiAgMTsgIC8qIFdQICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1QgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVCAweDMyMDA1MFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0ZJUlNUXzMyIDB4MDA5ZjAKKworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVF9BRERSRVNTX1NIRlQgNAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVF9BRERSRVNTX01BU0sgMHgwMDAwMDdmZmZmZmZmZmYwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1RfTk9ERV9JRF9TSEZUIDQ5CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0ZJUlNUX05PREVfSURfTUFTSyAweDdmZmUwMDAwMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfbGJfYmF1X2ludGRfcGF5bG9hZF9xdWV1ZV9maXJzdF91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9sYl9iYXVfaW50ZF9wYXlsb2FkX3F1ZXVlX2ZpcnN0X3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzM6ICA0OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFkZHJlc3MgOiAzOTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQzXzQ4OiAgNjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlub2RlX2lkIDogMTQ7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF82MyA6ICAxOyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfTEFTVCAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0xBU1QgMHgzMjAwNjBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9MQVNUXzMyIDB4MDA5ZjgKKworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9MQVNUX0FERFJFU1NfU0hGVCA0CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX0xBU1RfQUREUkVTU19NQVNLIDB4MDAwMDA3ZmZmZmZmZmZmMFVMCisKK3VuaW9uIHV2aF9sYl9iYXVfaW50ZF9wYXlsb2FkX3F1ZXVlX2xhc3RfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfbGJfYmF1X2ludGRfcGF5bG9hZF9xdWV1ZV9sYXN0X3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzM6ICA0OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFkZHJlc3MgOiAzOTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzQzXzYzOiAyMTsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfSU5URF9QQVlMT0FEX1FVRVVFX1RBSUwgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9UQUlMIDB4MzIwMDcwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfVEFJTF8zMiAweDAwYTAwCisKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfVEFJTF9BRERSRVNTX1NIRlQgNAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9UQUlMX0FERFJFU1NfTUFTSyAweDAwMDAwN2ZmZmZmZmZmZjBVTAorCit1bmlvbiB1dmhfbGJfYmF1X2ludGRfcGF5bG9hZF9xdWV1ZV90YWlsX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2xiX2JhdV9pbnRkX3BheWxvYWRfcXVldWVfdGFpbF9zIHsKKwl1bnNpZ25lZCBsb25nCXJzdmRfMF8zOiAgNDsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhZGRyZXNzIDogMzk7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80M182MzogMjE7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRSAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFIDB4MzIwMDgwVUwKKworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18wX1NIRlQgMAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18wX01BU0sgMHgwMDAwMDAwMDAwMDAwMDAxVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfMV9TSEZUIDEKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfMV9NQVNLIDB4MDAwMDAwMDAwMDAwMDAwMlVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzJfU0hGVCAyCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDRVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18zX1NIRlQgMworI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR18zX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA4VUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfNF9TSEZUIDQKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfNF9NQVNLIDB4MDAwMDAwMDAwMDAwMDAxMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzVfU0hGVCA1CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9QRU5ESU5HXzVfTUFTSyAweDAwMDAwMDAwMDAwMDAwMjBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR182X1NIRlQgNgorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfUEVORElOR182X01BU0sgMHgwMDAwMDAwMDAwMDAwMDQwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfN19TSEZUIDcKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1BFTkRJTkdfN19NQVNLIDB4MDAwMDAwMDAwMDAwMDA4MFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzBfU0hGVCA4CisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzBfTUFTSyAweDAwMDAwMDAwMDAwMDAxMDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8xX1NIRlQgOQorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8xX01BU0sgMHgwMDAwMDAwMDAwMDAwMjAwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfMl9TSEZUIDEwCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzJfTUFTSyAweDAwMDAwMDAwMDAwMDA0MDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF8zX1NIRlQgMTEKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfM19NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzRfU0hGVCAxMgorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF80X01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfNV9TSEZUIDEzCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzVfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF82X1NIRlQgMTQKKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX1RJTUVPVVRfNl9NQVNLIDB4MDAwMDAwMDAwMDAwNDAwMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9USU1FT1VUXzdfU0hGVCAxNQorI2RlZmluZSBVVkhfTEJfQkFVX0lOVERfU09GVFdBUkVfQUNLTk9XTEVER0VfVElNRU9VVF83X01BU0sgMHgwMDAwMDAwMDAwMDA4MDAwVUwKK3VuaW9uIHV2aF9sYl9iYXVfaW50ZF9zb2Z0d2FyZV9hY2tub3dsZWRnZV91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9sYl9iYXVfaW50ZF9zb2Z0d2FyZV9hY2tub3dsZWRnZV9zIHsKKwl1bnNpZ25lZCBsb25nCXBlbmRpbmdfMCA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcGVuZGluZ18xIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlwZW5kaW5nXzIgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXBlbmRpbmdfMyA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcGVuZGluZ180IDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwlwZW5kaW5nXzUgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXBlbmRpbmdfNiA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcGVuZGluZ183IDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwl0aW1lb3V0XzAgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVvdXRfMSA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJdGltZW91dF8yIDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwl0aW1lb3V0XzMgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVvdXRfNCA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJdGltZW91dF81IDogIDE7ICAvKiBSVywgVzFDICovCisJdW5zaWduZWQgbG9uZwl0aW1lb3V0XzYgOiAgMTsgIC8qIFJXLCBXMUMgKi8KKwl1bnNpZ25lZCBsb25nCXRpbWVvdXRfNyA6ICAxOyAgLyogUlcsIFcxQyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xNl82MzogNDg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgIFVWSF9MQl9CQVVfSU5URF9TT0ZUV0FSRV9BQ0tOT1dMRURHRV9BTElBUyAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0xCX0JBVV9JTlREX1NPRlRXQVJFX0FDS05PV0xFREdFX0FMSUFTIDB4MDAwMDAwMDAwMDMyMDA4OFVMCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0wgMHgzMjAwMjBVTAorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fQ09OVFJPTF8zMiAweDAwOWQ4CisKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfSU5ERVhfU0hGVCAwCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MX0lOREVYX01BU0sgMHgwMDAwMDAwMDAwMDAwMDNmVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfUFVTSF9TSEZUIDYyCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9DT05UUk9MX1BVU0hfTUFTSyAweDQwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0FDVElWQVRJT05fQ09OVFJPTF9JTklUX1NIRlQgNjMKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX0NPTlRST0xfSU5JVF9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9jb250cm9sX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX2xiX2JhdV9zYl9hY3RpdmF0aW9uX2NvbnRyb2xfcyB7CisJdW5zaWduZWQgbG9uZwlpbmRleCA6ICA2OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNl82MTogNTY7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJcHVzaCAgOiAgMTsgIC8qIFdQICovCisJdW5zaWduZWQgbG9uZwlpbml0ICA6ICAxOyAgLyogV1AgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18wICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMCAweDMyMDAzMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMF8zMiAweDAwOWUwCisKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18wX1NUQVRVU19TSEZUIDAKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18wX1NUQVRVU19NQVNLIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCisKK3VuaW9uIHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMF91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMF9zIHsKKwl1bnNpZ25lZCBsb25nCXN0YXR1cyA6IDY0OyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18xICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMSAweDMyMDA0MFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfQUNUSVZBVElPTl9TVEFUVVNfMV8zMiAweDAwOWU4CisKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18xX1NUQVRVU19TSEZUIDAKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9BQ1RJVkFUSU9OX1NUQVRVU18xX1NUQVRVU19NQVNLIDB4ZmZmZmZmZmZmZmZmZmZmZlVMCisKK3VuaW9uIHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMV91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9sYl9iYXVfc2JfYWN0aXZhdGlvbl9zdGF0dXNfMV9zIHsKKwl1bnNpZ25lZCBsb25nCXN0YXR1cyA6IDY0OyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFIDB4MzIwMDEwVUwKKyNkZWZpbmUgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0VfMzIgMHgwMDlkMAorCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFX1BBR0VfQUREUkVTU19TSEZUIDEyCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFX1BBR0VfQUREUkVTU19NQVNLIDB4MDAwMDA3ZmZmZmZmZjAwMFVMCisjZGVmaW5lIFVWSF9MQl9CQVVfU0JfREVTQ1JJUFRPUl9CQVNFX05PREVfSURfU0hGVCA0OQorI2RlZmluZSBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRV9OT0RFX0lEX01BU0sgMHg3ZmZlMDAwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX2xiX2JhdV9zYl9kZXNjcmlwdG9yX2Jhc2VfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfbGJfYmF1X3NiX2Rlc2NyaXB0b3JfYmFzZV9zIHsKKwl1bnNpZ25lZCBsb25nCXJzdmRfMF8xMSAgICA6IDEyOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXBhZ2VfYWRkcmVzcyA6IDMxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNDNfNDggICA6ICA2OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCW5vZGVfaWQgICAgICA6IDE0OyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNjMgICAgICA6ICAxOyAgLyogICAgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfTk9ERV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9OT0RFX0lEIDB4MFVMCisKKyNkZWZpbmUgVVZIX05PREVfSURfRk9SQ0UxX1NIRlQgMAorI2RlZmluZSBVVkhfTk9ERV9JRF9GT1JDRTFfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDFVTAorI2RlZmluZSBVVkhfTk9ERV9JRF9NQU5VRkFDVFVSRVJfU0hGVCAxCisjZGVmaW5lIFVWSF9OT0RFX0lEX01BTlVGQUNUVVJFUl9NQVNLIDB4MDAwMDAwMDAwMDAwMGZmZVVMCisjZGVmaW5lIFVWSF9OT0RFX0lEX1BBUlRfTlVNQkVSX1NIRlQgMTIKKyNkZWZpbmUgVVZIX05PREVfSURfUEFSVF9OVU1CRVJfTUFTSyAweDAwMDAwMDAwMGZmZmYwMDBVTAorI2RlZmluZSBVVkhfTk9ERV9JRF9SRVZJU0lPTl9TSEZUIDI4CisjZGVmaW5lIFVWSF9OT0RFX0lEX1JFVklTSU9OX01BU0sgMHgwMDAwMDAwMGYwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX05PREVfSURfTk9ERV9JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9OT0RFX0lEX05PREVfSURfTUFTSyAweDAwMDA3ZmZmMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfTk9ERV9JRF9OT0RFU19QRVJfQklUX1NIRlQgNDgKKyNkZWZpbmUgVVZIX05PREVfSURfTk9ERVNfUEVSX0JJVF9NQVNLIDB4MDA3ZjAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9OT0RFX0lEX05JX1BPUlRfU0hGVCA1NgorI2RlZmluZSBVVkhfTk9ERV9JRF9OSV9QT1JUX01BU0sgMHgwZjAwMDAwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX25vZGVfaWRfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfbm9kZV9pZF9zIHsKKwl1bnNpZ25lZCBsb25nCWZvcmNlMSAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltYW51ZmFjdHVyZXIgIDogMTE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcGFydF9udW1iZXIgICA6IDE2OyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJldmlzaW9uICAgICAgOiAgNDsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlub2RlX2lkICAgICAgIDogMTU7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80NyAgICAgICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCW5vZGVzX3Blcl9iaXQgOiAgNzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzU1ICAgICAgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJbmlfcG9ydCAgICAgICA6ICA0OyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfNjBfNjMgICAgOiAgNDsgIC8qICAgICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUiAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVIgMHgxNjAwMDEwVUwKKworI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9TSEZUIDI4CisjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9CQVNFX01BU0sgMHgwMDAwM2ZmZmYwMDAwMDAwVUwKKyNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0dSNF9TSEZUIDQ2CisjZGVmaW5lIFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUl9HUjRfTUFTSyAweDAwMDA0MDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfTl9HUlVfU0hGVCA1MgorI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfTl9HUlVfTUFTSyAweDAwZjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBVVkhfUkhfR0FNX0dSVV9PVkVSTEFZX0NPTkZJR19NTVJfRU5BQkxFX1NIRlQgNjMKKyNkZWZpbmUgVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SX0VOQUJMRV9NQVNLIDB4ODAwMDAwMDAwMDAwMDAwMFVMCisKK3VuaW9uIHV2aF9yaF9nYW1fZ3J1X292ZXJsYXlfY29uZmlnX21tcl91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9yaF9nYW1fZ3J1X292ZXJsYXlfY29uZmlnX21tcl9zIHsKKwl1bnNpZ25lZCBsb25nCXJzdmRfMF8yNzogMjg7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJYmFzZSAgIDogMTg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZ3I0ICAgIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80N181MTogIDU7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJbl9ncnUgIDogIDQ7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MjogIDc7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZW5hYmxlIDogIDE7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVIgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SIDB4MTYwMDAyOFVMCisKKyNkZWZpbmUgVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SX0JBU0VfU0hGVCAyNgorI2RlZmluZSBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVJfQkFTRV9NQVNLIDB4MDAwMDNmZmZmYzAwMDAwMFVMCisjZGVmaW5lIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9EVUFMX0hVQl9TSEZUIDQ2CisjZGVmaW5lIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9EVUFMX0hVQl9NQVNLIDB4MDAwMDQwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUl9FTkFCTEVfU0hGVCA2MworI2RlZmluZSBVVkhfUkhfR0FNX01NUl9PVkVSTEFZX0NPTkZJR19NTVJfRU5BQkxFX01BU0sgMHg4MDAwMDAwMDAwMDAwMDAwVUwKKwordW5pb24gdXZoX3JoX2dhbV9tbXJfb3ZlcmxheV9jb25maWdfbW1yX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3JoX2dhbV9tbXJfb3ZlcmxheV9jb25maWdfbW1yX3MgeworCXVuc2lnbmVkIGxvbmcJcnN2ZF8wXzI1OiAyNjsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwliYXNlICAgICA6IDIwOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWR1YWxfaHViIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF80N182MjogMTY7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJZW5hYmxlICAgOiAgMTsgIC8qIFJXICovCisgICAgfSBzOworfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfUlRDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfUlRDIDB4MjgwMDBVTAorCisjZGVmaW5lIFVWSF9SVENfUkVBTF9USU1FX0NMT0NLX1NIRlQgMAorI2RlZmluZSBVVkhfUlRDX1JFQUxfVElNRV9DTE9DS19NQVNLIDB4MDBmZmZmZmZmZmZmZmZmZlVMCisKK3VuaW9uIHV2aF9ydGNfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfcnRjX3MgeworCXVuc2lnbmVkIGxvbmcJcmVhbF90aW1lX2Nsb2NrIDogNTY7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF81Nl82MyAgICAgIDogIDg7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfU0lfQUREUl9NQVBfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX1NJX0FERFJfTUFQX0NPTkZJRyAweGM4MDAwMFVMCisKKyNkZWZpbmUgVVZIX1NJX0FERFJfTUFQX0NPTkZJR19NX1NLVF9TSEZUIDAKKyNkZWZpbmUgVVZIX1NJX0FERFJfTUFQX0NPTkZJR19NX1NLVF9NQVNLIDB4MDAwMDAwMDAwMDAwMDAzZlVMCisjZGVmaW5lIFVWSF9TSV9BRERSX01BUF9DT05GSUdfTl9TS1RfU0hGVCA4CisjZGVmaW5lIFVWSF9TSV9BRERSX01BUF9DT05GSUdfTl9TS1RfTUFTSyAweDAwMDAwMDAwMDAwMDBmMDBVTAorCit1bmlvbiB1dmhfc2lfYWRkcl9tYXBfY29uZmlnX3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3NpX2FkZHJfbWFwX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCW1fc2t0IDogIDY7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF82Xzc6ICAyOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCW5fc2t0IDogIDQ7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJcnN2ZF8xMl82MzogNTI7ICAvKiAgICAqLworICAgIH0gczsKK307CisKKworI2VuZGlmIC8qIF9fQVNNX1g4Nl9VVl9NTVJTX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni92ZHNvLmggYi9pbmNsdWRlL2FzbS14ODYvdmRzby5oCmluZGV4IDYyOWJjYjYuLjg2ZTA4NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni92ZHNvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3Zkc28uaApAQCAtOCw5ICs4LDExIEBACiAgKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIHZEU08gaW1hZ2UsIGZpbmQgdGhlIHBvaW50ZXIgdG8gVkRTTzY0X25hbWUKICAqIGFzIHRoYXQgc3ltYm9sIGlzIGRlZmluZWQgaW4gdGhlIHZEU08gc291cmNlcyBvciBsaW5rZXIgc2NyaXB0LgogICovCi0jZGVmaW5lIFZEU082NF9TWU1CT0woYmFzZSwgbmFtZSkgKHsJCVwKLQlleHRlcm4gY29uc3QgY2hhciBWRFNPNjRfIyNuYW1lW107CVwKLQkodm9pZCAqKSAoVkRTTzY0XyMjbmFtZSAtIFZEU082NF9QUkVMSU5LICsgKHVuc2lnbmVkIGxvbmcpIChiYXNlKSk7IH0pCisjZGVmaW5lIFZEU082NF9TWU1CT0woYmFzZSwgbmFtZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWV4dGVybiBjb25zdCBjaGFyIFZEU082NF8jI25hbWVbXTsJCQkJXAorCSh2b2lkICopKFZEU082NF8jI25hbWUgLSBWRFNPNjRfUFJFTElOSyArICh1bnNpZ25lZCBsb25nKShiYXNlKSk7IFwKK30pCiAjZW5kaWYKIAogI2lmIGRlZmluZWQgQ09ORklHX1g4Nl8zMiB8fCBkZWZpbmVkIENPTkZJR19DT01QQVQKQEAgLTIwLDkgKzIyLDE4IEBACiAgKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIHZEU08gaW1hZ2UsIGZpbmQgdGhlIHBvaW50ZXIgdG8gVkRTTzMyX25hbWUKICAqIGFzIHRoYXQgc3ltYm9sIGlzIGRlZmluZWQgaW4gdGhlIHZEU08gc291cmNlcyBvciBsaW5rZXIgc2NyaXB0LgogICovCi0jZGVmaW5lIFZEU08zMl9TWU1CT0woYmFzZSwgbmFtZSkgKHsJCVwKLQlleHRlcm4gY29uc3QgY2hhciBWRFNPMzJfIyNuYW1lW107CVwKLQkodm9pZCAqKSAoVkRTTzMyXyMjbmFtZSAtIFZEU08zMl9QUkVMSU5LICsgKHVuc2lnbmVkIGxvbmcpIChiYXNlKSk7IH0pCisjZGVmaW5lIFZEU08zMl9TWU1CT0woYmFzZSwgbmFtZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWV4dGVybiBjb25zdCBjaGFyIFZEU08zMl8jI25hbWVbXTsJCQkJXAorCSh2b2lkICopKFZEU08zMl8jI25hbWUgLSBWRFNPMzJfUFJFTElOSyArICh1bnNpZ25lZCBsb25nKShiYXNlKSk7IFwKK30pCiAjZW5kaWYKIAorLyoKKyAqIFRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgd2l0aCB0aGUgYWRkcmVzc2VzIGluIHRoZSB2c3lzY2FsbCBwYWdlLgorICogU2VlIHZzeXNjYWxsLXNpZ3JldHVybi5TLgorICovCitleHRlcm4gdm9pZCBfX3VzZXIgX19rZXJuZWxfc2lncmV0dXJuOworZXh0ZXJuIHZvaWQgX191c2VyIF9fa2VybmVsX3J0X3NpZ3JldHVybjsKKwogI2VuZGlmCS8qIGFzbS14ODYvdmRzby5oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdmdhLmggYi9pbmNsdWRlL2FzbS14ODYvdmdhLmgKaW5kZXggMGVjZjY4YS4uMGNjZjgwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3ZnYS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni92Z2EuaApAQCAtMTIsOSArMTIsOSBAQAogICoJYWNjZXNzIHRoZSB2aWRlb3JhbSBkaXJlY3RseSB3aXRob3V0IGFueSBibGFjayBtYWdpYy4KICAqLwogCi0jZGVmaW5lIFZHQV9NQVBfTUVNKHgscykgKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHgpCisjZGVmaW5lIFZHQV9NQVBfTUVNKHgsIHMpICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh4KQogCiAjZGVmaW5lIHZnYV9yZWFkYih4KSAoKih4KSkKLSNkZWZpbmUgdmdhX3dyaXRlYih4LHkpICgqKHkpID0gKHgpKQorI2RlZmluZSB2Z2Ffd3JpdGViKHgsIHkpICgqKHkpID0gKHgpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni92bTg2LmggYi9pbmNsdWRlL2FzbS14ODYvdm04Ni5oCmluZGV4IGM5MmZlNGEuLjA3NGIzNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni92bTg2LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3ZtODYuaApAQCAtMTIsMTkgKzEyLDEzIEBACiAgKiBMaW51cwogICovCiAKLSNkZWZpbmUgVEZfTUFTSwkJMHgwMDAwMDEwMAotI2RlZmluZSBJRl9NQVNLCQkweDAwMDAwMjAwCi0jZGVmaW5lIElPUExfTUFTSwkweDAwMDAzMDAwCi0jZGVmaW5lIE5UX01BU0sJCTB4MDAwMDQwMDAKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisKICNpZmRlZiBDT05GSUdfVk04NgotI2RlZmluZSBWTV9NQVNLCQkweDAwMDIwMDAwCisjZGVmaW5lIFg4Nl9WTV9NQVNLCVg4Nl9FRkxBR1NfVk0KICNlbHNlCi0jZGVmaW5lIFZNX01BU0sJCTAgLyogaWdub3JlZCAqLworI2RlZmluZSBYODZfVk1fTUFTSwkwIC8qIE5vIFZNODYgc3VwcG9ydCAqLwogI2VuZGlmCi0jZGVmaW5lIEFDX01BU0sJCTB4MDAwNDAwMDAKLSNkZWZpbmUgVklGX01BU0sJMHgwMDA4MDAwMAkvKiB2aXJ0dWFsIGludGVycnVwdCBmbGFnICovCi0jZGVmaW5lIFZJUF9NQVNLCTB4MDAxMDAwMDAJLyogdmlydHVhbCBpbnRlcnJ1cHQgcGVuZGluZyAqLwotI2RlZmluZSBJRF9NQVNLCQkweDAwMjAwMDAwCiAKICNkZWZpbmUgQklPU1NFRwkJMHgwZjAwMAogCkBAIC00Miw5ICszNiwxMSBAQAogI2RlZmluZSBWTTg2X0FSRyhyZXR2YWwpCSgocmV0dmFsKSA+PiA4KQogCiAjZGVmaW5lIFZNODZfU0lHTkFMCTAJLyogcmV0dXJuIGR1ZSB0byBzaWduYWwgKi8KLSNkZWZpbmUgVk04Nl9VTktOT1dOCTEJLyogdW5oYW5kbGVkIEdQIGZhdWx0IC0gSU8taW5zdHJ1Y3Rpb24gb3Igc2ltaWxhciAqLworI2RlZmluZSBWTTg2X1VOS05PV04JMQkvKiB1bmhhbmRsZWQgR1AgZmF1bHQKKwkJCQkgICAtIElPLWluc3RydWN0aW9uIG9yIHNpbWlsYXIgKi8KICNkZWZpbmUgVk04Nl9JTlR4CTIJLyogaW50My9pbnQgeCBpbnN0cnVjdGlvbiAoQVJHID0geCkgKi8KLSNkZWZpbmUgVk04Nl9TVEkJMwkvKiBzdGkvcG9wZi9pcmV0IGluc3RydWN0aW9uIGVuYWJsZWQgdmlydHVhbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFZNODZfU1RJCTMJLyogc3RpL3BvcGYvaXJldCBpbnN0cnVjdGlvbiBlbmFibGVkCisJCQkJICAgdmlydHVhbCBpbnRlcnJ1cHRzICovCiAKIC8qCiAgKiBBZGRpdGlvbmFsIHJldHVybiB2YWx1ZXMgd2hlbiBpbnZva2luZyBuZXcgdm04NigpCkBAIC0yMDUsNyArMjAxLDggQEAKICNkZWZpbmUgaGFuZGxlX3ZtODZfZmF1bHQoYSwgYikKICNkZWZpbmUgcmVsZWFzZV92bTg2X2lycXMoYSkKIAotc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3ZtODZfdHJhcChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqYSwgbG9uZyBiLCBpbnQgYykgeworc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3ZtODZfdHJhcChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqYSwgbG9uZyBiLCBpbnQgYykKK3sKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3ZtaS5oIGIvaW5jbHVkZS9hc20teDg2L3ZtaS5oCmluZGV4IGViOGJkODkuLmI3YzBkZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni92bWkuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdm1pLmgKQEAgLTE1NSw5ICsxNTUsOSBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogc3RydWN0IHZtaV9yZWxvY2F0aW9uX2luZm8gewotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAqZWlwOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICB0eXBlOwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICByZXNlcnZlZFszXTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqZWlwOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIHR5cGU7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgcmVzZXJ2ZWRbM107CiB9OwogI2VuZGlmCiAKQEAgLTE3Myw1MyArMTczLDUzIEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBzdHJ1Y3QgdnJvbV9oZWFkZXIgewotCXUxNiAgICAgcm9tX3NpZ25hdHVyZTsgIC8vIG9wdGlvbiBST00gc2lnbmF0dXJlCi0JdTggICAgICByb21fbGVuZ3RoOyAgICAgLy8gUk9NIGxlbmd0aCBpbiA1MTIgYnl0ZSBjaHVua3MKLQl1OCAgICAgIHJvbV9lbnRyeVs0XTsgICAvLyAxNi1iaXQgY29kZSBlbnRyeSBwb2ludAotCXU4ICAgICAgcm9tX3BhZDA7ICAgICAgIC8vIDQtYnl0ZSBhbGlnbiBwYWQKLQl1MzIgICAgIHZyb21fc2lnbmF0dXJlOyAvLyBWUk9NIGlkZW50aWZpY2F0aW9uIHNpZ25hdHVyZQotCXU4ICAgICAgYXBpX3ZlcnNpb25fbWluOy8vIE1pbm9yIHZlcnNpb24gb2YgQVBJCi0JdTggICAgICBhcGlfdmVyc2lvbl9tYWo7Ly8gTWFqb3IgdmVyc2lvbiBvZiBBUEkKLQl1OCAgICAgIGp1bXBfc2xvdHM7ICAgICAvLyBOdW1iZXIgb2YganVtcCBzbG90cwotCXU4ICAgICAgcmVzZXJ2ZWQxOyAgICAgIC8vIFJlc2VydmVkIGZvciBleHBhbnNpb24KLQl1MzIgICAgIHZpcnR1YWxfdG9wOyAgICAvLyBIeXBlcnZpc29yIHZpcnR1YWwgYWRkcmVzcyBzdGFydAotCXUxNiAgICAgcmVzZXJ2ZWQyOyAgICAgIC8vIFJlc2VydmVkIGZvciBleHBhbnNpb24KLQl1MTYJbGljZW5zZV9vZmZzOwkvLyBPZmZzZXQgdG8gTGljZW5zZSBzdHJpbmcKLQl1MTYgICAgIHBjaV9oZWFkZXJfb2ZmczsvLyBPZmZzZXQgdG8gUENJIE9QUk9NIGhlYWRlcgotCXUxNiAgICAgcG5wX2hlYWRlcl9vZmZzOy8vIE9mZnNldCB0byBQblAgT1BST00gaGVhZGVyCi0JdTMyICAgICByb21fcGFkMzsgICAgICAgLy8gUG5QIHJlc2VydmVyZCAvIFZNSSByZXNlcnZlZAotCXU4ICAgICAgcmVzZXJ2ZWRbOTZdOyAgIC8vIFJlc2VydmVkIGZvciBoZWFkZXJzCi0JY2hhciAgICB2bWlfaW5pdFs4XTsgICAgLy8gVk1JX0luaXQganVtcCBwb2ludAotCWNoYXIgICAgZ2V0X3JlbG9jWzhdOyAgIC8vIFZNSV9HZXRSZWxvY2F0aW9uSW5mbyBqdW1wIHBvaW50CisJdTE2ICAgICByb21fc2lnbmF0dXJlOyAgLyogb3B0aW9uIFJPTSBzaWduYXR1cmUgKi8KKwl1OCAgICAgIHJvbV9sZW5ndGg7ICAgICAvKiBST00gbGVuZ3RoIGluIDUxMiBieXRlIGNodW5rcyAqLworCXU4ICAgICAgcm9tX2VudHJ5WzRdOyAgIC8qIDE2LWJpdCBjb2RlIGVudHJ5IHBvaW50ICovCisJdTggICAgICByb21fcGFkMDsgICAgICAgLyogNC1ieXRlIGFsaWduIHBhZCAqLworCXUzMiAgICAgdnJvbV9zaWduYXR1cmU7IC8qIFZST00gaWRlbnRpZmljYXRpb24gc2lnbmF0dXJlICovCisJdTggICAgICBhcGlfdmVyc2lvbl9taW47LyogTWlub3IgdmVyc2lvbiBvZiBBUEkgKi8KKwl1OCAgICAgIGFwaV92ZXJzaW9uX21hajsvKiBNYWpvciB2ZXJzaW9uIG9mIEFQSSAqLworCXU4ICAgICAganVtcF9zbG90czsgICAgIC8qIE51bWJlciBvZiBqdW1wIHNsb3RzICovCisJdTggICAgICByZXNlcnZlZDE7ICAgICAgLyogUmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbiAqLworCXUzMiAgICAgdmlydHVhbF90b3A7ICAgIC8qIEh5cGVydmlzb3IgdmlydHVhbCBhZGRyZXNzIHN0YXJ0ICovCisJdTE2ICAgICByZXNlcnZlZDI7ICAgICAgLyogUmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbiAqLworCXUxNglsaWNlbnNlX29mZnM7CS8qIE9mZnNldCB0byBMaWNlbnNlIHN0cmluZyAqLworCXUxNiAgICAgcGNpX2hlYWRlcl9vZmZzOy8qIE9mZnNldCB0byBQQ0kgT1BST00gaGVhZGVyICovCisJdTE2ICAgICBwbnBfaGVhZGVyX29mZnM7LyogT2Zmc2V0IHRvIFBuUCBPUFJPTSBoZWFkZXIgKi8KKwl1MzIgICAgIHJvbV9wYWQzOyAgICAgICAvKiBQblAgcmVzZXJ2ZXJkIC8gVk1JIHJlc2VydmVkICovCisJdTggICAgICByZXNlcnZlZFs5Nl07ICAgLyogUmVzZXJ2ZWQgZm9yIGhlYWRlcnMgKi8KKwljaGFyICAgIHZtaV9pbml0WzhdOyAgICAvKiBWTUlfSW5pdCBqdW1wIHBvaW50ICovCisJY2hhciAgICBnZXRfcmVsb2NbOF07ICAgLyogVk1JX0dldFJlbG9jYXRpb25JbmZvIGp1bXAgcG9pbnQgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBwbnBfaGVhZGVyIHsKLSAgICAgICAgY2hhciBzaWdbNF07Ci0gICAgICAgIGNoYXIgcmV2OwotICAgICAgICBjaGFyIHNpemU7Ci0gICAgICAgIHNob3J0IG5leHQ7Ci0gICAgICAgIHNob3J0IHJlczsKLSAgICAgICAgbG9uZyBkZXZJRDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgbWFudWZhY3R1cmVyX29mZnNldDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvZHVjdF9vZmZzZXQ7CisJY2hhciBzaWdbNF07CisJY2hhciByZXY7CisJY2hhciBzaXplOworCXNob3J0IG5leHQ7CisJc2hvcnQgcmVzOworCWxvbmcgZGV2SUQ7CisJdW5zaWduZWQgc2hvcnQgbWFudWZhY3R1cmVyX29mZnNldDsKKwl1bnNpZ25lZCBzaG9ydCBwcm9kdWN0X29mZnNldDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBwY2lfaGVhZGVyIHsKLSAgICAgICAgY2hhciBzaWdbNF07Ci0gICAgICAgIHNob3J0IHZlbmRvcklEOwotICAgICAgICBzaG9ydCBkZXZpY2VJRDsKLSAgICAgICAgc2hvcnQgdnBkRGF0YTsKLSAgICAgICAgc2hvcnQgc2l6ZTsKLSAgICAgICAgY2hhciByZXY7Ci0gICAgICAgIGNoYXIgY2xhc3M7Ci0gICAgICAgIGNoYXIgc3ViY2xhc3M7Ci0gICAgICAgIGNoYXIgaW50ZXJmYWNlOwotICAgICAgICBzaG9ydCBjaHVua3M7Ci0gICAgICAgIGNoYXIgcm9tX3ZlcnNpb25fbWluOwotICAgICAgICBjaGFyIHJvbV92ZXJzaW9uX21hajsKLSAgICAgICAgY2hhciBjb2RldHlwZTsKLSAgICAgICAgY2hhciBsYXN0Um9tOwotICAgICAgICBzaG9ydCByZXNlcnZlZDsKKwljaGFyIHNpZ1s0XTsKKwlzaG9ydCB2ZW5kb3JJRDsKKwlzaG9ydCBkZXZpY2VJRDsKKwlzaG9ydCB2cGREYXRhOworCXNob3J0IHNpemU7CisJY2hhciByZXY7CisJY2hhciBjbGFzczsKKwljaGFyIHN1YmNsYXNzOworCWNoYXIgaW50ZXJmYWNlOworCXNob3J0IGNodW5rczsKKwljaGFyIHJvbV92ZXJzaW9uX21pbjsKKwljaGFyIHJvbV92ZXJzaW9uX21hajsKKwljaGFyIGNvZGV0eXBlOworCWNoYXIgbGFzdFJvbTsKKwlzaG9ydCByZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGJvb3RzdHJhcHBpbmcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni92b3lhZ2VyLmggYi9pbmNsdWRlL2FzbS14ODYvdm95YWdlci5oCmluZGV4IDkxYTk5MzI5Li45YzgxMWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdm95YWdlci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni92b3lhZ2VyLmgKQEAgLTkxLDggKzkxLDcgQEAKICNkZWZpbmUgVk9ZQUdFUl9XUklURV9DT05GSUcJCQkweDIKICNkZWZpbmUgVk9ZQUdFUl9CWVBBU1MJCQkJMHhmZgogCi10eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2FzaWMgCi17Cit0eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2FzaWMgewogCV9fdTgJYXNpY19hZGRyOwkvKiBBU0lDIGFkZHJlc3M7IExldmVsIDQgKi8KIAlfX3U4CWFzaWNfdHlwZTsgICAgICAvKiBBU0lDIHR5cGUgKi8KIAlfX3U4CWFzaWNfaWQ7CS8qIEFTSUMgaWQgKi8KQEAgLTExMyw3ICsxMTIsNyBAQAogCV9fdTE2ICAgbGFyZ2VzdF9yZWc7CQkvKiBMYXJnZXN0IHJlZ2lzdGVyIGluIHRoZSBzY2FuIHBhdGggKi8KIAlfX3UxNiAgIHNtYWxsZXN0X3JlZzsJCS8qIFNtYWxsZXN0IHJlZ2lzdGVyIGluIHRoZSBzY2FuIHBhdGggKi8KIAl2b3lhZ2VyX2FzaWNfdCAgICphc2ljOwkJLyogRmlyc3QgQVNJQyBpbiBzY2FuIHBhdGggKENBVF9JKSAqLwotCXN0cnVjdCAgIHZveWFnZXJfbW9kdWxlICpzdWJtb2R1bGU7CS8qIFN1Ym1vZHVsZSBwb2ludGVyICovIAorCXN0cnVjdCAgIHZveWFnZXJfbW9kdWxlICpzdWJtb2R1bGU7CS8qIFN1Ym1vZHVsZSBwb2ludGVyICovCiAJc3RydWN0ICAgdm95YWdlcl9tb2R1bGUgKm5leHQ7CQkvKiBOZXh0IG1vZHVsZSBpbiBsaW5rZWQgbGlzdCAqLwogfSB2b3lhZ2VyX21vZHVsZV90OwogCkBAIC0xMzUsNyArMTM0LDcgQEAKIAkgX191MTYgY2N0X29mZnNldDsKIAkgX191MTYgbG9nX2xlbmd0aDsJLyogbGVuZ3RoIG9mIGVyciBsb2cgKi8KIAkgX191MTYgeHN1bV9lbmQ7CS8qIG9mZnNldCB0byBlbmQgb2YKLQkJCQkJCQkgICBjaGVja3N1bSAqLworCQkJCSAgIGNoZWNrc3VtICovCiAJIF9fdTggIHJlc2VydmVkWzRdOwogCSBfX3U4ICBzZmxhZzsJCS8qIHN0YXJ0aW5nIHNlbnRpbmFsICovCiAJIF9fdTggIHBhcnRfbnVtYmVyWzEzXTsJLyogcHJvbSBwYXJ0IG51bWJlciAqLwpAQCAtMTQ4LDcgKzE0Nyw4IEBACiAKIAogCi0jZGVmaW5lIFZPWUFHRVJfRVBST01fU0laRV9PRkZTRVQgICAoKF9fdTE2KSgmKCgodm95YWdlcl9lcHJvbV9oZHJfdCAqKTApLT5lZV9zaXplKSkpCisjZGVmaW5lIFZPWUFHRVJfRVBST01fU0laRV9PRkZTRVQJCQkJXAorCSgoX191MTYpKCYoKCh2b3lhZ2VyX2Vwcm9tX2hkcl90ICopMCktPmVlX3NpemUpKSkKICNkZWZpbmUgVk9ZQUdFUl9YU1VNX0VORF9PRkZTRVQJCTB4MmEKIAogLyogdGhlIGZvbGxvd2luZyB0aHJlZSBkZWZpbml0aW9ucyBhcmUgZm9yIGludGVybmFsIHRhYmxlIGxheW91dHMKQEAgLTE5OSw3ICsxOTksNyBAQAogI2RlZmluZSBWT1lBR0VSX1dDQklDX1RPTV9MCTB4NAogI2RlZmluZSBWT1lBR0VSX1dDQklDX1RPTV9ICTB4NQogCi0vKiByZWdpc3RlciBkZWZpbmVzIGZvciBWb3lhZ2VyIE1lbW9yeSBDb250b2wgKFZNQykgCisvKiByZWdpc3RlciBkZWZpbmVzIGZvciBWb3lhZ2VyIE1lbW9yeSBDb250b2wgKFZNQykKICAqIHRoZXNlIGFyZSBwcmVzZW50IG9uIEw0IG1hY2hpbmVzIG9ubHkgKi8KICNkZWZpbmUJVk9ZQUdFUl9WTUMxCQkweDgxCiAjZGVmaW5lIFZPWUFHRVJfVk1DMgkJMHg5MQpAQCAtMzM0LDcgKzMzNCw3IEBACiAKIHN0cnVjdCBRdWFkRGVzY3JpcHRpb24gewogCV9fdTggIFR5cGU7CS8qIGZvciB0eXBlIDAgKERZQURJQyBvciBNT05BRElDKSBhbGwgZmllbGRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3aWxsIGJlIHplcm8gZXhjZXB0IGZvciBzbG90ICovCisJCQkgKiB3aWxsIGJlIHplcm8gZXhjZXB0IGZvciBzbG90ICovCiAJX191OCBTdHJ1Y3R1cmVWZXJzaW9uOwogCV9fdTMyIENQSV9CYXNlQWRkcmVzczsKIAlfX3UzMiAgTEFSQ19CYW5rU2l6ZTsKQEAgLTM0Miw3ICszNDIsNyBAQAogCV9fdTggIFNsb3Q7IC8qIFByb2Nlc3NvciBzbG90cyAxIC0gNCAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RydWN0IFByb2NCb2FyZEluZm8geyAKK3N0cnVjdCBQcm9jQm9hcmRJbmZvIHsKIAlfX3U4IFR5cGU7CiAJX191OCBTdHJ1Y3R1cmVWZXJzaW9uOwogCV9fdTggTnVtYmVyT2ZCb2FyZHM7CkBAIC0zODIsMTkgKzM4MiwzMCBAQAogICogcGFja2VkIGluIGl0IGJ5IG91ciBmcmllbmQgdGhlIGNvbXBpbGVyLgogICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0JX191OAlNYWlsYm94X1NVUzsJCS8qIFdyaXR0ZW4gdG8gYnkgU1VTIHRvIGdpdmUgY29tbWFuZHMvcmVzcG9uc2UgdG8gdGhlIE9TICovCi0JX191OAlNYWlsYm94X09TOwkJLyogV3JpdHRlbiB0byBieSB0aGUgT1MgdG8gZ2l2ZSBjb21tYW5kcy9yZXNwb25zZSB0byBTVVMgKi8KLQlfX3U4CVNVU19NYWlsYm94VmVyc2lvbjsJLyogVGVsbHMgdGhlIE9TIHdoaWNoIGl0ZXJhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIFNVUyBzdXBwb3J0cyAqLwotCV9fdTgJT1NfTWFpbGJveFZlcnNpb247CS8qIFRlbGxzIFNVUyB3aGljaCBpdGVyYXRpb24gb2YgdGhlIGludGVyZmFjZSB0aGUgT1Mgc3VwcG9ydHMgKi8KLQlfX3UzMglPU19GbGFnczsJCS8qIEZsYWdzIHNldCBieSB0aGUgT1MgYXMgaW5mbyBmb3IgU1VTICovCi0JX191MzIJU1VTX0ZsYWdzOwkJLyogRmxhZ3Mgc2V0IGJ5IFNVUyBhcyBpbmZvIGZvciB0aGUgT1MgKi8KLQlfX3UzMglXYXRjaERvZ1BlcmlvZDsJCS8qIFdhdGNoZG9nIHBlcmlvZCAoaW4gc2Vjb25kcykgd2hpY2ggdGhlIERQIHVzZXMgdG8gc2VlIGlmIHRoZSBPUyBpcyBkZWFkICovCisJX191OAlNYWlsYm94X1NVUzsJCS8qIFdyaXR0ZW4gdG8gYnkgU1VTIHRvIGdpdmUKKwkJCQkJICAgY29tbWFuZHMvcmVzcG9uc2UgdG8gdGhlIE9TICovCisJX191OAlNYWlsYm94X09TOwkJLyogV3JpdHRlbiB0byBieSB0aGUgT1MgdG8gZ2l2ZQorCQkJCQkgICBjb21tYW5kcy9yZXNwb25zZSB0byBTVVMgKi8KKwlfX3U4CVNVU19NYWlsYm94VmVyc2lvbjsJLyogVGVsbHMgdGhlIE9TIHdoaWNoIGl0ZXJhdGlvbiBvZiB0aGUKKwkJCQkJICAgaW50ZXJmYWNlIFNVUyBzdXBwb3J0cyAqLworCV9fdTgJT1NfTWFpbGJveFZlcnNpb247CS8qIFRlbGxzIFNVUyB3aGljaCBpdGVyYXRpb24gb2YgdGhlCisJCQkJCSAgIGludGVyZmFjZSB0aGUgT1Mgc3VwcG9ydHMgKi8KKwlfX3UzMglPU19GbGFnczsJCS8qIEZsYWdzIHNldCBieSB0aGUgT1MgYXMgaW5mbyBmb3IKKwkJCQkJICAgU1VTICovCisJX191MzIJU1VTX0ZsYWdzOwkJLyogRmxhZ3Mgc2V0IGJ5IFNVUyBhcyBpbmZvCisJCQkJCSAgIGZvciB0aGUgT1MgKi8KKwlfX3UzMglXYXRjaERvZ1BlcmlvZDsJCS8qIFdhdGNoZG9nIHBlcmlvZCAoaW4gc2Vjb25kcykgd2hpY2gKKwkJCQkJICAgdGhlIERQIHVzZXMgdG8gc2VlIGlmIHRoZSBPUworCQkJCQkgICBpcyBkZWFkICovCiAJX191MzIJV2F0Y2hEb2dDb3VudDsJCS8qIFVwZGF0ZWQgYnkgdGhlIE9TIG9uIGV2ZXJ5IHRpYy4gKi8KLQlfX3UzMglNZW1vcnlGb3JfU1VTX0Vycm9yTG9nOwkvKiBGbGF0IDMyIGJpdCBhZGRyZXNzIHdoaWNoIHRlbGxzIFNVUyB3aGVyZSB0byBzdHVmZiB0aGUgU1VTIGVycm9yIGxvZyBvbiBhIGR1bXAgKi8KLQlNQ19TbG90SW5mb3JtYXRpb25fdCAgTUNfU2xvdEluZm9bTlVNQkVSX09GX01DX0JVU1NFUypTTE9UU19QRVJfTUNfQlVTXTsJLyogU3RvcmFnZSBmb3IgTUNBIFBPUyBkYXRhICovCisJX191MzIJTWVtb3J5Rm9yX1NVU19FcnJvckxvZzsJLyogRmxhdCAzMiBiaXQgYWRkcmVzcyB3aGljaCB0ZWxscyBTVVMKKwkJCQkJICAgd2hlcmUgdG8gc3R1ZmYgdGhlIFNVUyBlcnJvciBsb2cKKwkJCQkJICAgb24gYSBkdW1wICovCisJTUNfU2xvdEluZm9ybWF0aW9uX3QgTUNfU2xvdEluZm9bTlVNQkVSX09GX01DX0JVU1NFUypTTE9UU19QRVJfTUNfQlVTXTsKKwkJCQkJLyogU3RvcmFnZSBmb3IgTUNBIFBPUyBkYXRhICovCiAJLyogQWxsIG5ldyBTRUNPTkRfUEFTU19JTlRFUkZBQ0UgZmllbGRzIGFkZGVkIGZyb20gdGhpcyBwb2ludCAqLwotICAgICAgICBzdHJ1Y3QgUHJvY0JvYXJkSW5mbyAgICAqQm9hcmREYXRhOwotICAgICAgICBzdHJ1Y3QgQ1BVX0luZm8gICAgICAgICAqQ1BVX0RhdGE7CisJc3RydWN0IFByb2NCb2FyZEluZm8gICAgKkJvYXJkRGF0YTsKKwlzdHJ1Y3QgQ1BVX0luZm8gICAgICAgICAqQ1BVX0RhdGE7CiAJLyogQWxsIG5ldyBmaWVsZHMgbXVzdCBiZSBhZGRlZCBmcm9tIHRoaXMgcG9pbnQgKi8KIH0gVm95YWdlcl9LZXJuZWxTVVNfTWJveF90OwogCkBAIC00NzgsNyArNDg5LDcgQEAKIAlfX3UzMglTVVNfZXJyb3Jsb2c7CiAJLyogbG90cyBvZiBzeXN0ZW0gY29uZmlndXJhdGlvbiBzdHVmZiB1bmRlciBoZXJlICovCiB9OwotCQorCiAvKiBWYXJpYWJsZXMgZXhwb3J0ZWQgYnkgdm95YWdlcl9zbXAgKi8KIGV4dGVybiBfX3UzMiB2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzOwogZXh0ZXJuIF9fdTMyIHZveWFnZXJfYWxsb3dlZF9ib290X3Byb2Nlc3NvcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveG9yXzMyLmggYi9pbmNsdWRlL2FzbS14ODYveG9yXzMyLmgKaW5kZXggYTQxZWYxYi4uMDY3YjVjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3hvcl8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni94b3JfMzIuaApAQCAtMTYsMTIgKzE2LDEyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIuCiAgKi8KIAotI2RlZmluZSBMRCh4LHkpCQkiICAgICAgIG1vdnEgICA4KigiI3giKSglMSksICUlbW0iI3kiICAgO1xuIgotI2RlZmluZSBTVCh4LHkpCQkiICAgICAgIG1vdnEgJSVtbSIjeSIsICAgOCooIiN4IikoJTEpICAgO1xuIgotI2RlZmluZSBYTzEoeCx5KQkiICAgICAgIHB4b3IgICA4KigiI3giKSglMiksICUlbW0iI3kiICAgO1xuIgotI2RlZmluZSBYTzIoeCx5KQkiICAgICAgIHB4b3IgICA4KigiI3giKSglMyksICUlbW0iI3kiICAgO1xuIgotI2RlZmluZSBYTzMoeCx5KQkiICAgICAgIHB4b3IgICA4KigiI3giKSglNCksICUlbW0iI3kiICAgO1xuIgotI2RlZmluZSBYTzQoeCx5KQkiICAgICAgIHB4b3IgICA4KigiI3giKSglNSksICUlbW0iI3kiICAgO1xuIgorI2RlZmluZSBMRCh4LCB5KQkiICAgICAgIG1vdnEgICA4KigiI3giKSglMSksICUlbW0iI3kiICAgO1xuIgorI2RlZmluZSBTVCh4LCB5KQkiICAgICAgIG1vdnEgJSVtbSIjeSIsICAgOCooIiN4IikoJTEpICAgO1xuIgorI2RlZmluZSBYTzEoeCwgeSkJIiAgICAgICBweG9yICAgOCooIiN4IikoJTIpLCAlJW1tIiN5IiAgIDtcbiIKKyNkZWZpbmUgWE8yKHgsIHkpCSIgICAgICAgcHhvciAgIDgqKCIjeCIpKCUzKSwgJSVtbSIjeSIgICA7XG4iCisjZGVmaW5lIFhPMyh4LCB5KQkiICAgICAgIHB4b3IgICA4KigiI3giKSglNCksICUlbW0iI3kiICAgO1xuIgorI2RlZmluZSBYTzQoeCwgeSkJIiAgICAgICBweG9yICAgOCooIiN4IikoJTUpLCAlJW1tIiN5IiAgIDtcbiIKIAogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAKQEAgLTMyLDI0ICszMiwyNCBAQAogCiAJa2VybmVsX2ZwdV9iZWdpbigpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKICN1bmRlZiBCTE9DSwotI2RlZmluZSBCTE9DSyhpKSBcCi0JTEQoaSwwKQkJCQkJXAotCQlMRChpKzEsMSkJCQlcCi0JCQlMRChpKzIsMikJCVwKLQkJCQlMRChpKzMsMykJXAotCVhPMShpLDApCQkJCVwKLQlTVChpLDApCQkJCQlcCi0JCVhPMShpKzEsMSkJCQlcCi0JCVNUKGkrMSwxKQkJCVwKLQkJCVhPMShpKzIsMikJCVwKLQkJCVNUKGkrMiwyKQkJXAotCQkJCVhPMShpKzMsMykJXAotCQkJCVNUKGkrMywzKQorI2RlZmluZSBCTE9DSyhpKQkJCQlcCisJTEQoaSwgMCkJCQkJXAorCQlMRChpICsgMSwgMSkJCQlcCisJCQlMRChpICsgMiwgMikJCVwKKwkJCQlMRChpICsgMywgMykJXAorCVhPMShpLCAwKQkJCQlcCisJU1QoaSwgMCkJCQkJXAorCQlYTzEoaSsxLCAxKQkJCVwKKwkJU1QoaSsxLCAxKQkJCVwKKwkJCVhPMShpICsgMiwgMikJCVwKKwkJCVNUKGkgKyAyLCAyKQkJXAorCQkJCVhPMShpICsgMywgMykJXAorCQkJCVNUKGkgKyAzLCAzKQogCiAJIiAuYWxpZ24gMzIJCQk7XG4iCi0gIAkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKIAogCUJMT0NLKDApCiAJQkxPQ0soNCkKQEAgLTc2LDI1ICs3NiwyNSBAQAogCiAJa2VybmVsX2ZwdV9iZWdpbigpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKICN1bmRlZiBCTE9DSwotI2RlZmluZSBCTE9DSyhpKSBcCi0JTEQoaSwwKQkJCQkJXAotCQlMRChpKzEsMSkJCQlcCi0JCQlMRChpKzIsMikJCVwKLQkJCQlMRChpKzMsMykJXAotCVhPMShpLDApCQkJCVwKLQkJWE8xKGkrMSwxKQkJCVwKLQkJCVhPMShpKzIsMikJCVwKLQkJCQlYTzEoaSszLDMpCVwKLQlYTzIoaSwwKQkJCQlcCi0JU1QoaSwwKQkJCQkJXAotCQlYTzIoaSsxLDEpCQkJXAotCQlTVChpKzEsMSkJCQlcCi0JCQlYTzIoaSsyLDIpCQlcCi0JCQlTVChpKzIsMikJCVwKLQkJCQlYTzIoaSszLDMpCVwKLQkJCQlTVChpKzMsMykKKyNkZWZpbmUgQkxPQ0soaSkJCQkJXAorCUxEKGksIDApCQkJCVwKKwkJTEQoaSArIDEsIDEpCQkJXAorCQkJTEQoaSArIDIsIDIpCQlcCisJCQkJTEQoaSArIDMsIDMpCVwKKwlYTzEoaSwgMCkJCQkJXAorCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJWE8xKGkgKyAyLCAyKQkJXAorCQkJCVhPMShpICsgMywgMykJXAorCVhPMihpLCAwKQkJCQlcCisJU1QoaSwgMCkJCQkJXAorCQlYTzIoaSArIDEsIDEpCQkJXAorCQlTVChpICsgMSwgMSkJCQlcCisJCQlYTzIoaSArIDIsIDIpCQlcCisJCQlTVChpICsgMiwgMikJCVwKKwkJCQlYTzIoaSArIDMsIDMpCVwKKwkJCQlTVChpICsgMywgMykKIAogCSIgLmFsaWduIDMyCQkJO1xuIgogCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgpAQCAtMTI1LDI5ICsxMjUsMjkgQEAKIAogCWtlcm5lbF9mcHVfYmVnaW4oKTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwlhc20gdm9sYXRpbGUoCiAjdW5kZWYgQkxPQ0sKLSNkZWZpbmUgQkxPQ0soaSkgXAotCUxEKGksMCkJCQkJCVwKLQkJTEQoaSsxLDEpCQkJXAotCQkJTEQoaSsyLDIpCQlcCi0JCQkJTEQoaSszLDMpCVwKLQlYTzEoaSwwKQkJCQlcCi0JCVhPMShpKzEsMSkJCQlcCi0JCQlYTzEoaSsyLDIpCQlcCi0JCQkJWE8xKGkrMywzKQlcCi0JWE8yKGksMCkJCQkJXAotCQlYTzIoaSsxLDEpCQkJXAotCQkJWE8yKGkrMiwyKQkJXAotCQkJCVhPMihpKzMsMykJXAotCVhPMyhpLDApCQkJCVwKLQlTVChpLDApCQkJCQlcCi0JCVhPMyhpKzEsMSkJCQlcCi0JCVNUKGkrMSwxKQkJCVwKLQkJCVhPMyhpKzIsMikJCVwKLQkJCVNUKGkrMiwyKQkJXAotCQkJCVhPMyhpKzMsMykJXAotCQkJCVNUKGkrMywzKQorI2RlZmluZSBCTE9DSyhpKQkJCQlcCisJTEQoaSwgMCkJCQkJXAorCQlMRChpICsgMSwgMSkJCQlcCisJCQlMRChpICsgMiwgMikJCVwKKwkJCQlMRChpICsgMywgMykJXAorCVhPMShpLCAwKQkJCQlcCisJCVhPMShpICsgMSwgMSkJCQlcCisJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJWE8xKGkgKyAzLCAzKQlcCisJWE8yKGksIDApCQkJCVwKKwkJWE8yKGkgKyAxLCAxKQkJCVwKKwkJCVhPMihpICsgMiwgMikJCVwKKwkJCQlYTzIoaSArIDMsIDMpCVwKKwlYTzMoaSwgMCkJCQkJXAorCVNUKGksIDApCQkJCVwKKwkJWE8zKGkgKyAxLCAxKQkJCVwKKwkJU1QoaSArIDEsIDEpCQkJXAorCQkJWE8zKGkgKyAyLCAyKQkJXAorCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJWE8zKGkgKyAzLCAzKQlcCisJCQkJU1QoaSArIDMsIDMpCiAKIAkiIC5hbGlnbiAzMgkJCTtcbiIKIAkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKQEAgLTE4NiwzNSArMTg2LDM1IEBACiAJICAgYmVjYXVzZSB3ZSBtb2RpZnkgcDQgYW5kIHA1IHRoZXJlLCBidXQgd2UgY2FuJ3QgbWFyayB0aGVtCiAJICAgYXMgcmVhZC93cml0ZSwgb3RoZXJ3aXNlIHdlJ2Qgb3ZlcmZsb3cgdGhlIDEwLWFzbS1vcGVyYW5kcwogCSAgIGxpbWl0IG9mIEdDQyA8IDMuMS4gICovCi0JX19hc21fXyAoIiIgOiAiK3IiIChwNCksICIrciIgKHA1KSk7CisJYXNtKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKICN1bmRlZiBCTE9DSwotI2RlZmluZSBCTE9DSyhpKSBcCi0JTEQoaSwwKQkJCQkJXAotCQlMRChpKzEsMSkJCQlcCi0JCQlMRChpKzIsMikJCVwKLQkJCQlMRChpKzMsMykJXAotCVhPMShpLDApCQkJCVwKLQkJWE8xKGkrMSwxKQkJCVwKLQkJCVhPMShpKzIsMikJCVwKLQkJCQlYTzEoaSszLDMpCVwKLQlYTzIoaSwwKQkJCQlcCi0JCVhPMihpKzEsMSkJCQlcCi0JCQlYTzIoaSsyLDIpCQlcCi0JCQkJWE8yKGkrMywzKQlcCi0JWE8zKGksMCkJCQkJXAotCQlYTzMoaSsxLDEpCQkJXAotCQkJWE8zKGkrMiwyKQkJXAotCQkJCVhPMyhpKzMsMykJXAotCVhPNChpLDApCQkJCVwKLQlTVChpLDApCQkJCQlcCi0JCVhPNChpKzEsMSkJCQlcCi0JCVNUKGkrMSwxKQkJCVwKLQkJCVhPNChpKzIsMikJCVwKLQkJCVNUKGkrMiwyKQkJXAotCQkJCVhPNChpKzMsMykJXAotCQkJCVNUKGkrMywzKQorI2RlZmluZSBCTE9DSyhpKQkJCQlcCisJTEQoaSwgMCkJCQkJXAorCQlMRChpICsgMSwgMSkJCQlcCisJCQlMRChpICsgMiwgMikJCVwKKwkJCQlMRChpICsgMywgMykJXAorCVhPMShpLCAwKQkJCQlcCisJCVhPMShpICsgMSwgMSkJCQlcCisJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJWE8xKGkgKyAzLCAzKQlcCisJWE8yKGksIDApCQkJCVwKKwkJWE8yKGkgKyAxLCAxKQkJCVwKKwkJCVhPMihpICsgMiwgMikJCVwKKwkJCQlYTzIoaSArIDMsIDMpCVwKKwlYTzMoaSwgMCkJCQkJXAorCQlYTzMoaSArIDEsIDEpCQkJXAorCQkJWE8zKGkgKyAyLCAyKQkJXAorCQkJCVhPMyhpICsgMywgMykJXAorCVhPNChpLCAwKQkJCQlcCisJU1QoaSwgMCkJCQkJXAorCQlYTzQoaSArIDEsIDEpCQkJXAorCQlTVChpICsgMSwgMSkJCQlcCisJCQlYTzQoaSArIDIsIDIpCQlcCisJCQlTVChpICsgMiwgMikJCVwKKwkJCQlYTzQoaSArIDMsIDMpCVwKKwkJCQlTVChpICsgMywgMykKIAogCSIgLmFsaWduIDMyCQkJO1xuIgogCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgpAQCAtMjMzLDEzICsyMzMsMTMgQEAKIAkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICA7XG4iCiAJOiAiK3IiIChsaW5lcyksCiAJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCi0JOiAiciIgKHA0KSwgInIiIChwNSkgCisJOiAiciIgKHA0KSwgInIiIChwNSkKIAk6ICJtZW1vcnkiKTsKIAogCS8qIHA0IGFuZCBwNSB3ZXJlIG1vZGlmaWVkLCBhbmQgbm93IHRoZSB2YXJpYWJsZXMgYXJlIGRlYWQuCiAJICAgQ2xvYmJlciB0aGVtIGp1c3QgdG8gYmUgc3VyZSBub2JvZHkgZG9lcyBzb21ldGhpbmcgc3R1cGlkCiAJICAgbGlrZSBhc3N1bWluZyB0aGV5IGhhdmUgc29tZSBsZWdhbCB2YWx1ZS4gICovCi0JX19hc21fXyAoIiIgOiAiPXIiIChwNCksICI9ciIgKHA1KSk7CisJYXNtKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOwogCiAJa2VybmVsX2ZwdV9lbmQoKTsKIH0KQEAgLTI1OSw3ICsyNTksNyBAQAogCiAJa2VybmVsX2ZwdV9iZWdpbigpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKIAkiIC5hbGlnbiAzMgkgICAgICAgICAgICAgO1xuIgogCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgogCSIgICAgICAgbW92cSAgICglMSksICUlbW0wICAgO1xuIgpAQCAtMjg2LDcgKzI4Niw3IEBACiAJIiAgICAgICBweG9yIDU2KCUyKSwgJSVtbTcgICA7XG4iCiAJIiAgICAgICBtb3ZxICUlbW02LCA0OCglMSkgICA7XG4iCiAJIiAgICAgICBtb3ZxICUlbW03LCA1NiglMSkgICA7XG4iCi0JCisKIAkiICAgICAgIGFkZGwgJDY0LCAlMSAgICAgICAgIDtcbiIKIAkiICAgICAgIGFkZGwgJDY0LCAlMiAgICAgICAgIDtcbiIKIAkiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgIDtcbiIKQEAgLTMwNyw3ICszMDcsNyBAQAogCiAJa2VybmVsX2ZwdV9iZWdpbigpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKIAkiIC5hbGlnbiAzMiwweDkwICAgICAgICAgICAgIDtcbiIKIAkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKIAkiICAgICAgIG1vdnEgICAoJTEpLCAlJW1tMCAgIDtcbiIKQEAgLTM0Miw3ICszNDIsNyBAQAogCSIgICAgICAgcHhvciA1NiglMyksICUlbW03ICAgO1xuIgogCSIgICAgICAgbW92cSAlJW1tNiwgNDgoJTEpICAgO1xuIgogCSIgICAgICAgbW92cSAlJW1tNywgNTYoJTEpICAgO1xuIgotICAgICAgCisKIAkiICAgICAgIGFkZGwgJDY0LCAlMSAgICAgICAgIDtcbiIKIAkiICAgICAgIGFkZGwgJDY0LCAlMiAgICAgICAgIDtcbiIKIAkiICAgICAgIGFkZGwgJDY0LCAlMyAgICAgICAgIDtcbiIKQEAgLTM2NCw3ICszNjQsNyBAQAogCiAJa2VybmVsX2ZwdV9iZWdpbigpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKIAkiIC5hbGlnbiAzMiwweDkwICAgICAgICAgICAgIDtcbiIKIAkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKIAkiICAgICAgIG1vdnEgICAoJTEpLCAlJW1tMCAgIDtcbiIKQEAgLTQwNyw3ICs0MDcsNyBAQAogCSIgICAgICAgcHhvciA1NiglNCksICUlbW03ICAgO1xuIgogCSIgICAgICAgbW92cSAlJW1tNiwgNDgoJTEpICAgO1xuIgogCSIgICAgICAgbW92cSAlJW1tNywgNTYoJTEpICAgO1xuIgotICAgICAgCisKIAkiICAgICAgIGFkZGwgJDY0LCAlMSAgICAgICAgIDtcbiIKIAkiICAgICAgIGFkZGwgJDY0LCAlMiAgICAgICAgIDtcbiIKIAkiICAgICAgIGFkZGwgJDY0LCAlMyAgICAgICAgIDtcbiIKQEAgLTQzNiw5ICs0MzYsOSBAQAogCSAgIGJlY2F1c2Ugd2UgbW9kaWZ5IHA0IGFuZCBwNSB0aGVyZSwgYnV0IHdlIGNhbid0IG1hcmsgdGhlbQogCSAgIGFzIHJlYWQvd3JpdGUsIG90aGVyd2lzZSB3ZSdkIG92ZXJmbG93IHRoZSAxMC1hc20tb3BlcmFuZHMKIAkgICBsaW1pdCBvZiBHQ0MgPCAzLjEuICAqLwotCV9fYXNtX18gKCIiIDogIityIiAocDQpLCAiK3IiIChwNSkpOworCWFzbSgiIiA6ICIrciIgKHA0KSwgIityIiAocDUpKTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwlhc20gdm9sYXRpbGUoCiAJIiAuYWxpZ24gMzIsMHg5MCAgICAgICAgICAgICA7XG4iCiAJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCiAJIiAgICAgICBtb3ZxICAgKCUxKSwgJSVtbTAgICA7XG4iCkBAIC00ODksNyArNDg5LDcgQEAKIAkiICAgICAgIHB4b3IgNTYoJTUpLCAlJW1tNyAgIDtcbiIKIAkiICAgICAgIG1vdnEgJSVtbTYsIDQ4KCUxKSAgIDtcbiIKIAkiICAgICAgIG1vdnEgJSVtbTcsIDU2KCUxKSAgIDtcbiIKLSAgICAgIAorCiAJIiAgICAgICBhZGRsICQ2NCwgJTEgICAgICAgICA7XG4iCiAJIiAgICAgICBhZGRsICQ2NCwgJTIgICAgICAgICA7XG4iCiAJIiAgICAgICBhZGRsICQ2NCwgJTMgICAgICAgICA7XG4iCkBAIC01MDUsNyArNTA1LDcgQEAKIAkvKiBwNCBhbmQgcDUgd2VyZSBtb2RpZmllZCwgYW5kIG5vdyB0aGUgdmFyaWFibGVzIGFyZSBkZWFkLgogCSAgIENsb2JiZXIgdGhlbSBqdXN0IHRvIGJlIHN1cmUgbm9ib2R5IGRvZXMgc29tZXRoaW5nIHN0dXBpZAogCSAgIGxpa2UgYXNzdW1pbmcgdGhleSBoYXZlIHNvbWUgbGVnYWwgdmFsdWUuICAqLwotCV9fYXNtX18gKCIiIDogIj1yIiAocDQpLCAiPXIiIChwNSkpOworCWFzbSgiIiA6ICI9ciIgKHA0KSwgIj1yIiAocDUpKTsKIAogCWtlcm5lbF9mcHVfZW5kKCk7CiB9CkBAIC01MzEsMTEgKzUzMSwxMiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IFphY2ggQnJvd24gKHdpdGggb2J2aW91cyBjcmVkaXQgZHVlIEluZ28pCiAgKi8KIAotI2RlZmluZSBYTU1TX1NBVkUgZG8gewkJCQlcCisjZGVmaW5lIFhNTVNfU0FWRQkJCQlcCitkbyB7CQkJCQkJXAogCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKIAljcjAgPSByZWFkX2NyMCgpOwkJCVwKIAljbHRzKCk7CQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCAJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQlcCiAJCSJtb3Z1cHMgJSV4bW0wLCglMCkJO1xuXHQiCVwKIAkJIm1vdnVwcyAlJXhtbTEsMHgxMCglMCkJO1xuXHQiCVwKIAkJIm1vdnVwcyAlJXhtbTIsMHgyMCglMCkJO1xuXHQiCVwKQEAgLTU0MywxMCArNTQ0LDExIEBACiAJCToJCQkJXAogCQk6ICJyIiAoeG1tX3NhdmUpIAkJXAogCQk6ICJtZW1vcnkiKTsJCQlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIFhNTVNfUkVTVE9SRSBkbyB7CQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fICggCQkJXAorI2RlZmluZSBYTU1TX1JFU1RPUkUJCQkJXAorZG8gewkJCQkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCVwKIAkJInNmZW5jZQkJCTtcblx0IglcCiAJCSJtb3Z1cHMgKCUwKSwlJXhtbTAJO1xuXHQiCVwKIAkJIm1vdnVwcyAweDEwKCUwKSwlJXhtbTEJO1xuXHQiCVwKQEAgLTU1Nyw3NiArNTU5LDc2IEBACiAJCTogIm1lbW9yeSIpOwkJCVwKIAl3cml0ZV9jcjAoY3IwKTsJCQkJXAogCXByZWVtcHRfZW5hYmxlKCk7CQkJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBBTElHTjE2IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSkKIAogI2RlZmluZSBPRkZTKHgpCQkiMTYqKCIjeCIpIgogI2RlZmluZSBQRl9PRkZTKHgpCSIyNTYrMTYqKCIjeCIpIgogI2RlZmluZQlQRjAoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCUxKQkJO1xuIgotI2RlZmluZSBMRCh4LHkpCQkiICAgICAgIG1vdmFwcyAgICJPRkZTKHgpIiglMSksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFNUKHgseSkJCSIgICAgICAgbW92YXBzICUleG1tIiN5IiwgICAiT0ZGUyh4KSIoJTEpCTtcbiIKKyNkZWZpbmUgTEQoeCwgeSkJIiAgICAgICBtb3ZhcHMgICAiT0ZGUyh4KSIoJTEpLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBTVCh4LCB5KQkiICAgICAgIG1vdmFwcyAlJXhtbSIjeSIsICAgIk9GRlMoeCkiKCUxKQk7XG4iCiAjZGVmaW5lIFBGMSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTIpCQk7XG4iCiAjZGVmaW5lIFBGMih4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTMpCQk7XG4iCiAjZGVmaW5lIFBGMyh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTQpCQk7XG4iCiAjZGVmaW5lIFBGNCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTUpCQk7XG4iCiAjZGVmaW5lIFBGNSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJTYpCQk7XG4iCi0jZGVmaW5lIFhPMSh4LHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJTIpLCAlJXhtbSIjeSIJO1xuIgotI2RlZmluZSBYTzIoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCUzKSwgJSV4bW0iI3kiCTtcbiIKLSNkZWZpbmUgWE8zKHgseSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglNCksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFhPNCh4LHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJTUpLCAlJXhtbSIjeSIJO1xuIgotI2RlZmluZSBYTzUoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCU2KSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE8xKHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJTIpLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzIoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglMyksICUleG1tIiN5Igk7XG4iCisjZGVmaW5lIFhPMyh4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCU0KSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE80KHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJTUpLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzUoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglNiksICUleG1tIiN5Igk7XG4iCiAKIAogc3RhdGljIHZvaWQKIHhvcl9zc2VfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OwogCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKIAlpbnQgY3IwOwogCiAJWE1NU19TQVZFOwogCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKwlhc20gdm9sYXRpbGUoCiAjdW5kZWYgQkxPQ0sKLSNkZWZpbmUgQkxPQ0soaSkgXAotCQlMRChpLDApCQkJCQlcCi0JCQlMRChpKzEsMSkJCQlcCisjZGVmaW5lIEJMT0NLKGkpCQkJCQlcCisJCUxEKGksIDApCQkJCVwKKwkJCUxEKGkgKyAxLCAxKQkJCVwKIAkJUEYxKGkpCQkJCQlcCi0JCQkJUEYxKGkrMikJCVwKLQkJCQlMRChpKzIsMikJCVwKLQkJCQkJTEQoaSszLDMpCVwKLQkJUEYwKGkrNCkJCQkJXAotCQkJCVBGMChpKzYpCQlcCi0JCVhPMShpLDApCQkJCVwKLQkJCVhPMShpKzEsMSkJCQlcCi0JCQkJWE8xKGkrMiwyKQkJXAotCQkJCQlYTzEoaSszLDMpCVwKLQkJU1QoaSwwKQkJCQkJXAotCQkJU1QoaSsxLDEpCQkJXAotCQkJCVNUKGkrMiwyKQkJXAotCQkJCQlTVChpKzMsMykJXAorCQkJCVBGMShpICsgMikJCVwKKwkJCQlMRChpICsgMiwgMikJCVwKKwkJCQkJTEQoaSArIDMsIDMpCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAorCQlYTzEoaSwgMCkJCQkJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAorCQlTVChpLCAwKQkJCQlcCisJCQlTVChpICsgMSwgMSkJCQlcCisJCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJCVNUKGkgKyAzLCAzKQlcCiAKIAogCQlQRjAoMCkKIAkJCQlQRjAoMikKIAogCSIgLmFsaWduIDMyCQkJO1xuIgotICAgICAgICAiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKIAogCQlCTE9DSygwKQogCQlCTE9DSyg0KQogCQlCTE9DSyg4KQogCQlCTE9DSygxMikKIAotICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTEgICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCi0gICAgICAgICIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDI1NiwgJTEgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDI1NiwgJTIgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKIAk6ICIrciIgKGxpbmVzKSwKIAkgICIrciIgKHAxKSwgIityIiAocDIpCiAJOgotICAgICAgICA6ICJtZW1vcnkiKTsKKwk6ICJtZW1vcnkiKTsKIAogCVhNTVNfUkVTVE9SRTsKIH0KQEAgLTYzNSw1OSArNjM3LDU5IEBACiB4b3Jfc3NlXzModW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAogCSAgdW5zaWduZWQgbG9uZyAqcDMpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OwogCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKIAlpbnQgY3IwOwogCiAJWE1NU19TQVZFOwogCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKwlhc20gdm9sYXRpbGUoCiAjdW5kZWYgQkxPQ0sKICNkZWZpbmUgQkxPQ0soaSkgXAogCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSsyKQkJXAorCQkJCVBGMShpICsgMikJCVwKIAkJTEQoaSwwKQkJCQkJXAotCQkJTEQoaSsxLDEpCQkJXAotCQkJCUxEKGkrMiwyKQkJXAotCQkJCQlMRChpKzMsMykJXAorCQkJTEQoaSArIDEsIDEpCQkJXAorCQkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCQlMRChpICsgMywgMykJXAogCQlQRjIoaSkJCQkJCVwKLQkJCQlQRjIoaSsyKQkJXAotCQlQRjAoaSs0KQkJCQlcCi0JCQkJUEYwKGkrNikJCVwKKwkJCQlQRjIoaSArIDIpCQlcCisJCVBGMChpICsgNCkJCQkJXAorCQkJCVBGMChpICsgNikJCVwKIAkJWE8xKGksMCkJCQkJXAotCQkJWE8xKGkrMSwxKQkJCVwKLQkJCQlYTzEoaSsyLDIpCQlcCi0JCQkJCVhPMShpKzMsMykJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAogCQlYTzIoaSwwKQkJCQlcCi0JCQlYTzIoaSsxLDEpCQkJXAotCQkJCVhPMihpKzIsMikJCVwKLQkJCQkJWE8yKGkrMywzKQlcCisJCQlYTzIoaSArIDEsIDEpCQkJXAorCQkJCVhPMihpICsgMiwgMikJCVwKKwkJCQkJWE8yKGkgKyAzLCAzKQlcCiAJCVNUKGksMCkJCQkJCVwKLQkJCVNUKGkrMSwxKQkJCVwKLQkJCQlTVChpKzIsMikJCVwKLQkJCQkJU1QoaSszLDMpCVwKKwkJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCQlTVChpICsgMiwgMikJCVwKKwkJCQkJU1QoaSArIDMsIDMpCVwKIAogCiAJCVBGMCgwKQogCQkJCVBGMCgyKQogCiAJIiAuYWxpZ24gMzIJCQk7XG4iCi0gICAgICAgICIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgogCiAJCUJMT0NLKDApCiAJCUJMT0NLKDQpCiAJCUJMT0NLKDgpCiAJCUJMT0NLKDEyKQogCi0gICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlMSAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTIgICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUzICAgICAgICAgICA7XG4iCi0gICAgICAgICIgICAgICAgZGVjbCAlMCAgICAgICAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDI1NiwgJTEgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDI1NiwgJTIgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZGwgJDI1NiwgJTMgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKKwkiICAgICAgIGpueiAxYiAgICAgICAgICAgICAgICAgIDtcbiIKIAk6ICIrciIgKGxpbmVzKSwKIAkgICIrciIgKHAxKSwgIityIihwMiksICIrciIocDMpCiAJOgotICAgICAgICA6ICJtZW1vcnkiICk7CisJOiAibWVtb3J5IiApOwogCiAJWE1NU19SRVNUT1JFOwogfQpAQCAtNjk2LDY2ICs2OTgsNjYgQEAKIHhvcl9zc2VfNCh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCiAJICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OworCXVuc2lnbmVkIGxvbmcgbGluZXMgPSBieXRlcyA+PiA4OwogCWNoYXIgeG1tX3NhdmVbMTYqNF0gQUxJR04xNjsKIAlpbnQgY3IwOwogCiAJWE1NU19TQVZFOwogCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKwlhc20gdm9sYXRpbGUoCiAjdW5kZWYgQkxPQ0sKICNkZWZpbmUgQkxPQ0soaSkgXAogCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSsyKQkJXAorCQkJCVBGMShpICsgMikJCVwKIAkJTEQoaSwwKQkJCQkJXAotCQkJTEQoaSsxLDEpCQkJXAotCQkJCUxEKGkrMiwyKQkJXAotCQkJCQlMRChpKzMsMykJXAorCQkJTEQoaSArIDEsIDEpCQkJXAorCQkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCQlMRChpICsgMywgMykJXAogCQlQRjIoaSkJCQkJCVwKLQkJCQlQRjIoaSsyKQkJXAorCQkJCVBGMihpICsgMikJCVwKIAkJWE8xKGksMCkJCQkJXAotCQkJWE8xKGkrMSwxKQkJCVwKLQkJCQlYTzEoaSsyLDIpCQlcCi0JCQkJCVhPMShpKzMsMykJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAogCQlQRjMoaSkJCQkJCVwKLQkJCQlQRjMoaSsyKQkJXAotCQlQRjAoaSs0KQkJCQlcCi0JCQkJUEYwKGkrNikJCVwKKwkJCQlQRjMoaSArIDIpCQlcCisJCVBGMChpICsgNCkJCQkJXAorCQkJCVBGMChpICsgNikJCVwKIAkJWE8yKGksMCkJCQkJXAotCQkJWE8yKGkrMSwxKQkJCVwKLQkJCQlYTzIoaSsyLDIpCQlcCi0JCQkJCVhPMihpKzMsMykJXAorCQkJWE8yKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzIoaSArIDIsIDIpCQlcCisJCQkJCVhPMihpICsgMywgMykJXAogCQlYTzMoaSwwKQkJCQlcCi0JCQlYTzMoaSsxLDEpCQkJXAotCQkJCVhPMyhpKzIsMikJCVwKLQkJCQkJWE8zKGkrMywzKQlcCisJCQlYTzMoaSArIDEsIDEpCQkJXAorCQkJCVhPMyhpICsgMiwgMikJCVwKKwkJCQkJWE8zKGkgKyAzLCAzKQlcCiAJCVNUKGksMCkJCQkJCVwKLQkJCVNUKGkrMSwxKQkJCVwKLQkJCQlTVChpKzIsMikJCVwKLQkJCQkJU1QoaSszLDMpCVwKKwkJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCQlTVChpICsgMiwgMikJCVwKKwkJCQkJU1QoaSArIDMsIDMpCVwKIAogCiAJCVBGMCgwKQogCQkJCVBGMCgyKQogCiAJIiAuYWxpZ24gMzIJCQk7XG4iCi0gICAgICAgICIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgogCiAJCUJMT0NLKDApCiAJCUJMT0NLKDQpCiAJCUJMT0NLKDgpCiAJCUJMT0NLKDEyKQogCi0gICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlMSAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTIgICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUzICAgICAgICAgICA7XG4iCi0gICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlNCAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUzICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICU0ICAgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCiAJOiAiK3IiIChsaW5lcyksCiAJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpLCAiK3IiIChwNCkKIAk6Ci0gICAgICAgIDogIm1lbW9yeSIgKTsKKwk6ICJtZW1vcnkiICk7CiAKIAlYTU1TX1JFU1RPUkU7CiB9CkBAIC03NjQsNyArNzY2LDcgQEAKIHhvcl9zc2VfNSh1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIsCiAJICB1bnNpZ25lZCBsb25nICpwMywgdW5zaWduZWQgbG9uZyAqcDQsIHVuc2lnbmVkIGxvbmcgKnA1KQogewotICAgICAgICB1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gODsKKwl1bnNpZ25lZCBsb25nIGxpbmVzID0gYnl0ZXMgPj4gODsKIAljaGFyIHhtbV9zYXZlWzE2KjRdIEFMSUdOMTY7CiAJaW50IGNyMDsKIApAQCAtNzc2LDY1ICs3NzgsNjUgQEAKIAkgICBiZWNhdXNlIHdlIG1vZGlmeSBwNCBhbmQgcDUgdGhlcmUsIGJ1dCB3ZSBjYW4ndCBtYXJrIHRoZW0KIAkgICBhcyByZWFkL3dyaXRlLCBvdGhlcndpc2Ugd2UnZCBvdmVyZmxvdyB0aGUgMTAtYXNtLW9wZXJhbmRzCiAJICAgbGltaXQgb2YgR0NDIDwgMy4xLiAgKi8KLQlfX2FzbV9fICgiIiA6ICIrciIgKHA0KSwgIityIiAocDUpKTsKKwlhc20oIiIgOiAiK3IiIChwNCksICIrciIgKHA1KSk7CiAKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKICN1bmRlZiBCTE9DSwogI2RlZmluZSBCTE9DSyhpKSBcCiAJCVBGMShpKQkJCQkJXAotCQkJCVBGMShpKzIpCQlcCisJCQkJUEYxKGkgKyAyKQkJXAogCQlMRChpLDApCQkJCQlcCi0JCQlMRChpKzEsMSkJCQlcCi0JCQkJTEQoaSsyLDIpCQlcCi0JCQkJCUxEKGkrMywzKQlcCisJCQlMRChpICsgMSwgMSkJCQlcCisJCQkJTEQoaSArIDIsIDIpCQlcCisJCQkJCUxEKGkgKyAzLCAzKQlcCiAJCVBGMihpKQkJCQkJXAotCQkJCVBGMihpKzIpCQlcCisJCQkJUEYyKGkgKyAyKQkJXAogCQlYTzEoaSwwKQkJCQlcCi0JCQlYTzEoaSsxLDEpCQkJXAotCQkJCVhPMShpKzIsMikJCVwKLQkJCQkJWE8xKGkrMywzKQlcCisJCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJCVhPMShpICsgMiwgMikJCVwKKwkJCQkJWE8xKGkgKyAzLCAzKQlcCiAJCVBGMyhpKQkJCQkJXAotCQkJCVBGMyhpKzIpCQlcCisJCQkJUEYzKGkgKyAyKQkJXAogCQlYTzIoaSwwKQkJCQlcCi0JCQlYTzIoaSsxLDEpCQkJXAotCQkJCVhPMihpKzIsMikJCVwKLQkJCQkJWE8yKGkrMywzKQlcCisJCQlYTzIoaSArIDEsIDEpCQkJXAorCQkJCVhPMihpICsgMiwgMikJCVwKKwkJCQkJWE8yKGkgKyAzLCAzKQlcCiAJCVBGNChpKQkJCQkJXAotCQkJCVBGNChpKzIpCQlcCi0JCVBGMChpKzQpCQkJCVwKLQkJCQlQRjAoaSs2KQkJXAorCQkJCVBGNChpICsgMikJCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAogCQlYTzMoaSwwKQkJCQlcCi0JCQlYTzMoaSsxLDEpCQkJXAotCQkJCVhPMyhpKzIsMikJCVwKLQkJCQkJWE8zKGkrMywzKQlcCisJCQlYTzMoaSArIDEsIDEpCQkJXAorCQkJCVhPMyhpICsgMiwgMikJCVwKKwkJCQkJWE8zKGkgKyAzLCAzKQlcCiAJCVhPNChpLDApCQkJCVwKLQkJCVhPNChpKzEsMSkJCQlcCi0JCQkJWE80KGkrMiwyKQkJXAotCQkJCQlYTzQoaSszLDMpCVwKKwkJCVhPNChpICsgMSwgMSkJCQlcCisJCQkJWE80KGkgKyAyLCAyKQkJXAorCQkJCQlYTzQoaSArIDMsIDMpCVwKIAkJU1QoaSwwKQkJCQkJXAotCQkJU1QoaSsxLDEpCQkJXAotCQkJCVNUKGkrMiwyKQkJXAotCQkJCQlTVChpKzMsMykJXAorCQkJU1QoaSArIDEsIDEpCQkJXAorCQkJCVNUKGkgKyAyLCAyKQkJXAorCQkJCQlTVChpICsgMywgMykJXAogCiAKIAkJUEYwKDApCiAJCQkJUEYwKDIpCiAKIAkiIC5hbGlnbiAzMgkJCTtcbiIKLSAgICAgICAgIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCiAKIAkJQkxPQ0soMCkKIAkJQkxPQ0soNCkKIAkJQkxPQ0soOCkKIAkJQkxPQ0soMTIpCiAKLSAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCi0gICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlMiAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGFkZGwgJDI1NiwgJTMgICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRsICQyNTYsICU0ICAgICAgICAgICA7XG4iCi0gICAgICAgICIgICAgICAgYWRkbCAkMjU2LCAlNSAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGRlY2wgJTAgICAgICAgICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUxICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUyICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICUzICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICU0ICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRsICQyNTYsICU1ICAgICAgICAgICA7XG4iCisJIiAgICAgICBkZWNsICUwICAgICAgICAgICAgICAgICA7XG4iCisJIiAgICAgICBqbnogMWIgICAgICAgICAgICAgICAgICA7XG4iCiAJOiAiK3IiIChsaW5lcyksCiAJICAiK3IiIChwMSksICIrciIgKHAyKSwgIityIiAocDMpCiAJOiAiciIgKHA0KSwgInIiIChwNSkKQEAgLTg0MywxNyArODQ1LDE3IEBACiAJLyogcDQgYW5kIHA1IHdlcmUgbW9kaWZpZWQsIGFuZCBub3cgdGhlIHZhcmlhYmxlcyBhcmUgZGVhZC4KIAkgICBDbG9iYmVyIHRoZW0ganVzdCB0byBiZSBzdXJlIG5vYm9keSBkb2VzIHNvbWV0aGluZyBzdHVwaWQKIAkgICBsaWtlIGFzc3VtaW5nIHRoZXkgaGF2ZSBzb21lIGxlZ2FsIHZhbHVlLiAgKi8KLQlfX2FzbV9fICgiIiA6ICI9ciIgKHA0KSwgIj1yIiAocDUpKTsKKwlhc20oIiIgOiAiPXIiIChwNCksICI9ciIgKHA1KSk7CiAKIAlYTU1TX1JFU1RPUkU7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHhvcl9ibG9ja19wSUlJX3NzZSA9IHsKLSAgICAgICAgLm5hbWUgPSAicElJSV9zc2UiLAotICAgICAgICAuZG9fMiA9ICB4b3Jfc3NlXzIsCi0gICAgICAgIC5kb18zID0gIHhvcl9zc2VfMywKLSAgICAgICAgLmRvXzQgPSAgeG9yX3NzZV80LAotICAgICAgICAuZG9fNSA9IHhvcl9zc2VfNSwKKwkubmFtZSA9ICJwSUlJX3NzZSIsCisJLmRvXzIgPSB4b3Jfc3NlXzIsCisJLmRvXzMgPSB4b3Jfc3NlXzMsCisJLmRvXzQgPSB4b3Jfc3NlXzQsCisJLmRvXzUgPSB4b3Jfc3NlXzUsCiB9OwogCiAvKiBBbHNvIHRyeSB0aGUgZ2VuZXJpYyByb3V0aW5lcy4gICovCkBAIC04NjEsMjEgKzg2MywyMSBAQAogCiAjdW5kZWYgWE9SX1RSWV9URU1QTEFURVMKICNkZWZpbmUgWE9SX1RSWV9URU1QTEFURVMJCQkJXAotCWRvIHsJCQkJCQlcCi0JCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzhyZWdzKTsJCVwKLQkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3NfcCk7CQlcCi0JCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVncyk7CQlcCi0JCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVnc19wKTsJCVwKLQkgICAgICAgIGlmIChjcHVfaGFzX3htbSkJCQlcCi0JCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19wSUlJX3NzZSk7CVwKLQkgICAgICAgIGlmIChjcHVfaGFzX21teCkgewkJCVwKLQkgICAgICAgICAgICAgICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfcElJX21teCk7CVwKLQkgICAgICAgICAgICAgICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfcDVfbW14KTsJXAotCSAgICAgICAgfQkJCQkJXAotCX0gd2hpbGUgKDApCitkbyB7CQkJCQkJCVwKKwl4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVncyk7CQkJXAorCXhvcl9zcGVlZCgmeG9yX2Jsb2NrXzhyZWdzX3ApOwkJCVwKKwl4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3MpOwkJCVwKKwl4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3NfcCk7CQkJXAorCWlmIChjcHVfaGFzX3htbSkJCQkJXAorCQl4b3Jfc3BlZWQoJnhvcl9ibG9ja19wSUlJX3NzZSk7CQlcCisJaWYgKGNwdV9oYXNfbW14KSB7CQkJCVwKKwkJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfcElJX21teCk7CQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX3A1X21teCk7CQlcCisJfQkJCQkJCVwKK30gd2hpbGUgKDApCiAKIC8qIFdlIGZvcmNlIHRoZSB1c2Ugb2YgdGhlIFNTRSB4b3IgYmxvY2sgYmVjYXVzZSBpdCBjYW4gd3JpdGUgYXJvdW5kIEwyLgogICAgV2UgbWF5IGFsc28gYmUgYWJsZSB0byBsb2FkIGludG8gdGhlIEwxIG9ubHkgZGVwZW5kaW5nIG9uIGhvdyB0aGUgY3B1CiAgICBkZWFscyB3aXRoIGEgbG9hZCB0byBhIGxpbmUgdGhhdCBpcyBiZWluZyBwcmVmZXRjaGVkLiAgKi8KLSNkZWZpbmUgWE9SX1NFTEVDVF9URU1QTEFURShGQVNURVNUKSBcCisjZGVmaW5lIFhPUl9TRUxFQ1RfVEVNUExBVEUoRkFTVEVTVCkJCQlcCiAJKGNwdV9oYXNfeG1tID8gJnhvcl9ibG9ja19wSUlJX3NzZSA6IEZBU1RFU1QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveG9yXzY0LmggYi9pbmNsdWRlL2FzbS14ODYveG9yXzY0LmgKaW5kZXggMWVlZTdmYy4uMjQ5NTdlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3hvcl82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni94b3JfNjQuaApAQCAtMjQsMjAgKzI0LDIzIEBACiAgKi8KIAogLyoKLSAqIHg4Ni02NCBjaGFuZ2VzIC8gZ2NjIGZpeGVzIGZyb20gQW5kaSBLbGVlbi4gCisgKiB4ODYtNjQgY2hhbmdlcyAvIGdjYyBmaXhlcyBmcm9tIEFuZGkgS2xlZW4uCiAgKiBDb3B5cmlnaHQgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKgogICogVGhpcyBoYXNuJ3QgYmVlbiBvcHRpbWl6ZWQgZm9yIHRoZSBoYW1tZXIgeWV0LCBidXQgdGhlcmUgYXJlIGxpa2VseQogICogbm8gYWR2YW50YWdlcyB0byBiZSBnb3R0ZW4gZnJvbSB4ODYtNjQgaGVyZSBhbnl3YXlzLgogICovCiAKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBhLGI7IH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKSB4bW1fc3RvcmVfdDsKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGEsIGI7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSkgeG1tX3N0b3JlX3Q7CiAKLS8qIERvZXNuJ3QgdXNlIGdjYyB0byBzYXZlIHRoZSBYTU0gcmVnaXN0ZXJzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIAorLyogRG9lc24ndCB1c2UgZ2NjIHRvIHNhdmUgdGhlIFhNTSByZWdpc3RlcnMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8KICAgIHRlbGwgaXQgdG8gZG8gYSBjbHRzIGJlZm9yZSB0aGUgcmVnaXN0ZXIgc2F2aW5nLiAqLwotI2RlZmluZSBYTU1TX1NBVkUgZG8gewkJCQlcCisjZGVmaW5lIFhNTVNfU0FWRQkJCQlcCitkbyB7CQkJCQkJXAogCXByZWVtcHRfZGlzYWJsZSgpOwkJCVwKLQlhc20gdm9sYXRpbGUgKAkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQlcCiAJCSJtb3ZxICUlY3IwLCUwCQk7XG5cdCIJXAogCQkiY2x0cwkJCTtcblx0IglcCiAJCSJtb3Z1cHMgJSV4bW0wLCglMSkJO1xuXHQiCVwKQEAgLTQ3LDEwICs1MCwxMSBAQAogCQk6ICI9JnIiIChjcjApCQkJXAogCQk6ICJyIiAoeG1tX3NhdmUpIAkJXAogCQk6ICJtZW1vcnkiKTsJCQlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIFhNTVNfUkVTVE9SRSBkbyB7CQkJXAotCWFzbSB2b2xhdGlsZSAoCQkJCVwKKyNkZWZpbmUgWE1NU19SRVNUT1JFCQkJCVwKK2RvIHsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQlcCiAJCSJzZmVuY2UJCQk7XG5cdCIJXAogCQkibW92dXBzICglMSksJSV4bW0wCTtcblx0IglcCiAJCSJtb3Z1cHMgMHgxMCglMSksJSV4bW0xCTtcblx0IglcCkBAIC02MSw3MiArNjUsNzIgQEAKIAkJOiAiciIgKGNyMCksICJyIiAoeG1tX3NhdmUpCVwKIAkJOiAibWVtb3J5Iik7CQkJXAogCXByZWVtcHRfZW5hYmxlKCk7CQkJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBPRkZTKHgpCQkiMTYqKCIjeCIpIgogI2RlZmluZSBQRl9PRkZTKHgpCSIyNTYrMTYqKCIjeCIpIgogI2RlZmluZQlQRjAoeCkJCSIJcHJlZmV0Y2hudGEgIlBGX09GRlMoeCkiKCVbcDFdKQkJO1xuIgotI2RlZmluZSBMRCh4LHkpCQkiICAgICAgIG1vdmFwcyAgICJPRkZTKHgpIiglW3AxXSksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFNUKHgseSkJCSIgICAgICAgbW92YXBzICUleG1tIiN5IiwgICAiT0ZGUyh4KSIoJVtwMV0pCTtcbiIKKyNkZWZpbmUgTEQoeCwgeSkJIiAgICAgICBtb3ZhcHMgICAiT0ZGUyh4KSIoJVtwMV0pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBTVCh4LCB5KQkiICAgICAgIG1vdmFwcyAlJXhtbSIjeSIsICAgIk9GRlMoeCkiKCVbcDFdKQk7XG4iCiAjZGVmaW5lIFBGMSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwMl0pCQk7XG4iCiAjZGVmaW5lIFBGMih4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwM10pCQk7XG4iCiAjZGVmaW5lIFBGMyh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNF0pCQk7XG4iCiAjZGVmaW5lIFBGNCh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNV0pCQk7XG4iCiAjZGVmaW5lIFBGNSh4KQkJIglwcmVmZXRjaG50YSAiUEZfT0ZGUyh4KSIoJVtwNl0pCQk7XG4iCi0jZGVmaW5lIFhPMSh4LHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwMl0pLCAlJXhtbSIjeSIJO1xuIgotI2RlZmluZSBYTzIoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDNdKSwgJSV4bW0iI3kiCTtcbiIKLSNkZWZpbmUgWE8zKHgseSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglW3A0XSksICUleG1tIiN5Igk7XG4iCi0jZGVmaW5lIFhPNCh4LHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwNV0pLCAlJXhtbSIjeSIJO1xuIgotI2RlZmluZSBYTzUoeCx5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDZdKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE8xKHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwMl0pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzIoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglW3AzXSksICUleG1tIiN5Igk7XG4iCisjZGVmaW5lIFhPMyh4LCB5KQkiICAgICAgIHhvcnBzICAgIk9GRlMoeCkiKCVbcDRdKSwgJSV4bW0iI3kiCTtcbiIKKyNkZWZpbmUgWE80KHgsIHkpCSIgICAgICAgeG9ycHMgICAiT0ZGUyh4KSIoJVtwNV0pLCAlJXhtbSIjeSIJO1xuIgorI2RlZmluZSBYTzUoeCwgeSkJIiAgICAgICB4b3JwcyAgICJPRkZTKHgpIiglW3A2XSksICUleG1tIiN5Igk7XG4iCiAKIAogc3RhdGljIHZvaWQKIHhvcl9zc2VfMih1bnNpZ25lZCBsb25nIGJ5dGVzLCB1bnNpZ25lZCBsb25nICpwMSwgdW5zaWduZWQgbG9uZyAqcDIpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBsaW5lcyA9IGJ5dGVzID4+IDg7CisJdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgPj4gODsKIAl1bnNpZ25lZCBsb25nIGNyMDsKIAl4bW1fc3RvcmVfdCB4bW1fc2F2ZVs0XTsKIAogCVhNTVNfU0FWRTsKIAotICAgICAgICBhc20gdm9sYXRpbGUgKAorCWFzbSB2b2xhdGlsZSgKICN1bmRlZiBCTE9DSwogI2RlZmluZSBCTE9DSyhpKSBcCi0JCUxEKGksMCkJCQkJCVwKLQkJCUxEKGkrMSwxKQkJCVwKKwkJTEQoaSwgMCkJCQkJXAorCQkJTEQoaSArIDEsIDEpCQkJXAogCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSsyKQkJXAotCQkJCUxEKGkrMiwyKQkJXAotCQkJCQlMRChpKzMsMykJXAotCQlQRjAoaSs0KQkJCQlcCi0JCQkJUEYwKGkrNikJCVwKLQkJWE8xKGksMCkJCQkJXAotCQkJWE8xKGkrMSwxKQkJCVwKLQkJCQlYTzEoaSsyLDIpCQlcCi0JCQkJCVhPMShpKzMsMykJXAotCQlTVChpLDApCQkJCQlcCi0JCQlTVChpKzEsMSkJCQlcCi0JCQkJU1QoaSsyLDIpCQlcCi0JCQkJCVNUKGkrMywzKQlcCisJCQkJUEYxKGkgKyAyKQkJXAorCQkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCQlMRChpICsgMywgMykJXAorCQlQRjAoaSArIDQpCQkJCVwKKwkJCQlQRjAoaSArIDYpCQlcCisJCVhPMShpLCAwKQkJCQlcCisJCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJCVhPMShpICsgMiwgMikJCVwKKwkJCQkJWE8xKGkgKyAzLCAzKQlcCisJCVNUKGksIDApCQkJCVwKKwkJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCQlTVChpICsgMiwgMikJCVwKKwkJCQkJU1QoaSArIDMsIDMpCVwKIAogCiAJCVBGMCgwKQogCQkJCVBGMCgyKQogCiAJIiAuYWxpZ24gMzIJCQk7XG4iCi0gICAgICAgICIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgogCiAJCUJMT0NLKDApCiAJCUJMT0NLKDQpCiAJCUJMT0NLKDgpCiAJCUJMT0NLKDEyKQogCi0gICAgICAgICIgICAgICAgYWRkcSAlW2luY10sICVbcDFdICAgICAgICAgICA7XG4iCi0gICAgICAgICIgICAgICAgYWRkcSAlW2luY10sICVbcDJdICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AyXSAgICAgICAgICAgO1xuIgogCQkiCQlkZWNsICVbY250XSA7IGpueiAxYiIKIAk6IFtwMV0gIityIiAocDEpLCBbcDJdICIrciIgKHAyKSwgW2NudF0gIityIiAobGluZXMpCi0JOiBbaW5jXSAiciIgKDI1NlVMKSAKLSAgICAgICAgOiAibWVtb3J5Iik7CisJOiBbaW5jXSAiciIgKDI1NlVMKQorCTogIm1lbW9yeSIpOwogCiAJWE1NU19SRVNUT1JFOwogfQpAQCAtMTQxLDUyICsxNDUsNTIgQEAKIAogCVhNTVNfU0FWRTsKIAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJYXNtIHZvbGF0aWxlKAogI3VuZGVmIEJMT0NLCiAjZGVmaW5lIEJMT0NLKGkpIFwKIAkJUEYxKGkpCQkJCQlcCi0JCQkJUEYxKGkrMikJCVwKLQkJTEQoaSwwKQkJCQkJXAotCQkJTEQoaSsxLDEpCQkJXAotCQkJCUxEKGkrMiwyKQkJXAotCQkJCQlMRChpKzMsMykJXAorCQkJCVBGMShpICsgMikJCVwKKwkJTEQoaSwgMCkJCQkJCVwKKwkJCUxEKGkgKyAxLCAxKQkJCVwKKwkJCQlMRChpICsgMiwgMikJCVwKKwkJCQkJTEQoaSArIDMsIDMpCVwKIAkJUEYyKGkpCQkJCQlcCi0JCQkJUEYyKGkrMikJCVwKLQkJUEYwKGkrNCkJCQkJXAotCQkJCVBGMChpKzYpCQlcCi0JCVhPMShpLDApCQkJCVwKLQkJCVhPMShpKzEsMSkJCQlcCi0JCQkJWE8xKGkrMiwyKQkJXAotCQkJCQlYTzEoaSszLDMpCVwKLQkJWE8yKGksMCkJCQkJXAotCQkJWE8yKGkrMSwxKQkJCVwKLQkJCQlYTzIoaSsyLDIpCQlcCi0JCQkJCVhPMihpKzMsMykJXAotCQlTVChpLDApCQkJCQlcCi0JCQlTVChpKzEsMSkJCQlcCi0JCQkJU1QoaSsyLDIpCQlcCi0JCQkJCVNUKGkrMywzKQlcCisJCQkJUEYyKGkgKyAyKQkJXAorCQlQRjAoaSArIDQpCQkJCVwKKwkJCQlQRjAoaSArIDYpCQlcCisJCVhPMShpLCAwKQkJCQlcCisJCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJCVhPMShpICsgMiwgMikJCVwKKwkJCQkJWE8xKGkgKyAzLCAzKQlcCisJCVhPMihpLCAwKQkJCQlcCisJCQlYTzIoaSArIDEsIDEpCQkJXAorCQkJCVhPMihpICsgMiwgMikJCVwKKwkJCQkJWE8yKGkgKyAzLCAzKQlcCisJCVNUKGksIDApCQkJCVwKKwkJCVNUKGkgKyAxLCAxKQkJCVwKKwkJCQlTVChpICsgMiwgMikJCVwKKwkJCQkJU1QoaSArIDMsIDMpCVwKIAogCiAJCVBGMCgwKQogCQkJCVBGMCgyKQogCiAJIiAuYWxpZ24gMzIJCQk7XG4iCi0gICAgICAgICIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgorCSIgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuIgogCiAJCUJMT0NLKDApCiAJCUJMT0NLKDQpCiAJCUJMT0NLKDgpCiAJCUJMT0NLKDEyKQogCi0gICAgICAgICIgICAgICAgYWRkcSAlW2luY10sICVbcDFdICAgICAgICAgICA7XG4iCi0gICAgICAgICIgICAgICAgYWRkcSAlW2luY10sICVbcDJdICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwM10gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AxXSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkcSAlW2luY10sICVbcDJdICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AzXSAgICAgICAgICAgO1xuIgogCQkiCQlkZWNsICVbY250XSA7IGpueiAxYiIKIAk6IFtjbnRdICIrciIgKGxpbmVzKSwKIAkgIFtwMV0gIityIiAocDEpLCBbcDJdICIrciIgKHAyKSwgW3AzXSAiK3IiIChwMykKIAk6IFtpbmNdICJyIiAoMjU2VUwpCi0JOiAibWVtb3J5Iik7IAorCTogIm1lbW9yeSIpOwogCVhNTVNfUkVTVE9SRTsKIH0KIApAQCAtMTk1LDY0ICsxOTksNjQgQEAKIAkgIHVuc2lnbmVkIGxvbmcgKnAzLCB1bnNpZ25lZCBsb25nICpwNCkKIHsKIAl1bnNpZ25lZCBpbnQgbGluZXMgPSBieXRlcyA+PiA4OwotCXhtbV9zdG9yZV90IHhtbV9zYXZlWzRdOyAKKwl4bW1fc3RvcmVfdCB4bW1fc2F2ZVs0XTsKIAl1bnNpZ25lZCBsb25nIGNyMDsKIAogCVhNTVNfU0FWRTsKIAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJYXNtIHZvbGF0aWxlKAogI3VuZGVmIEJMT0NLCiAjZGVmaW5lIEJMT0NLKGkpIFwKIAkJUEYxKGkpCQkJCQlcCi0JCQkJUEYxKGkrMikJCVwKLQkJTEQoaSwwKQkJCQkJXAotCQkJTEQoaSsxLDEpCQkJXAotCQkJCUxEKGkrMiwyKQkJXAotCQkJCQlMRChpKzMsMykJXAorCQkJCVBGMShpICsgMikJCVwKKwkJTEQoaSwgMCkJCQkJXAorCQkJTEQoaSArIDEsIDEpCQkJXAorCQkJCUxEKGkgKyAyLCAyKQkJXAorCQkJCQlMRChpICsgMywgMykJXAogCQlQRjIoaSkJCQkJCVwKLQkJCQlQRjIoaSsyKQkJXAotCQlYTzEoaSwwKQkJCQlcCi0JCQlYTzEoaSsxLDEpCQkJXAotCQkJCVhPMShpKzIsMikJCVwKLQkJCQkJWE8xKGkrMywzKQlcCisJCQkJUEYyKGkgKyAyKQkJXAorCQlYTzEoaSwgMCkJCQkJXAorCQkJWE8xKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzEoaSArIDIsIDIpCQlcCisJCQkJCVhPMShpICsgMywgMykJXAogCQlQRjMoaSkJCQkJCVwKLQkJCQlQRjMoaSsyKQkJXAotCQlQRjAoaSs0KQkJCQlcCi0JCQkJUEYwKGkrNikJCVwKLQkJWE8yKGksMCkJCQkJXAotCQkJWE8yKGkrMSwxKQkJCVwKLQkJCQlYTzIoaSsyLDIpCQlcCi0JCQkJCVhPMihpKzMsMykJXAotCQlYTzMoaSwwKQkJCQlcCi0JCQlYTzMoaSsxLDEpCQkJXAotCQkJCVhPMyhpKzIsMikJCVwKLQkJCQkJWE8zKGkrMywzKQlcCi0JCVNUKGksMCkJCQkJCVwKLQkJCVNUKGkrMSwxKQkJCVwKLQkJCQlTVChpKzIsMikJCVwKLQkJCQkJU1QoaSszLDMpCVwKKwkJCQlQRjMoaSArIDIpCQlcCisJCVBGMChpICsgNCkJCQkJXAorCQkJCVBGMChpICsgNikJCVwKKwkJWE8yKGksIDApCQkJCVwKKwkJCVhPMihpICsgMSwgMSkJCQlcCisJCQkJWE8yKGkgKyAyLCAyKQkJXAorCQkJCQlYTzIoaSArIDMsIDMpCVwKKwkJWE8zKGksIDApCQkJCVwKKwkJCVhPMyhpICsgMSwgMSkJCQlcCisJCQkJWE8zKGkgKyAyLCAyKQkJXAorCQkJCQlYTzMoaSArIDMsIDMpCVwKKwkJU1QoaSwgMCkJCQkJXAorCQkJU1QoaSArIDEsIDEpCQkJXAorCQkJCVNUKGkgKyAyLCAyKQkJXAorCQkJCQlTVChpICsgMywgMykJXAogCiAKIAkJUEYwKDApCiAJCQkJUEYwKDIpCiAKIAkiIC5hbGlnbiAzMgkJCTtcbiIKLSAgICAgICAgIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCisJIiAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4iCiAKIAkJQkxPQ0soMCkKIAkJQkxPQ0soNCkKIAkJQkxPQ0soOCkKIAkJQkxPQ0soMTIpCiAKLSAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMV0gICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwM10gICAgICAgICAgIDtcbiIKLSAgICAgICAgIiAgICAgICBhZGRxICVbaW5jXSwgJVtwNF0gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AxXSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkcSAlW2luY10sICVbcDJdICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwM10gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3A0XSAgICAgICAgICAgO1xuIgogCSIJZGVjbCAlW2NudF0gOyBqbnogMWIiCiAJOiBbY250XSAiK2MiIChsaW5lcyksCiAJICBbcDFdICIrciIgKHAxKSwgW3AyXSAiK3IiIChwMiksIFtwM10gIityIiAocDMpLCBbcDRdICIrciIgKHA0KQogCTogW2luY10gInIiICgyNTZVTCkKLSAgICAgICAgOiAibWVtb3J5IiApOworCTogIm1lbW9yeSIgKTsKIAogCVhNTVNfUkVTVE9SRTsKIH0KQEAgLTI2MSw3MCArMjY1LDcwIEBACiB4b3Jfc3NlXzUodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyLAogCSAgdW5zaWduZWQgbG9uZyAqcDMsIHVuc2lnbmVkIGxvbmcgKnA0LCB1bnNpZ25lZCBsb25nICpwNSkKIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGxpbmVzID0gYnl0ZXMgPj4gODsKKwl1bnNpZ25lZCBpbnQgbGluZXMgPSBieXRlcyA+PiA4OwogCXhtbV9zdG9yZV90IHhtbV9zYXZlWzRdOwogCXVuc2lnbmVkIGxvbmcgY3IwOwogCiAJWE1NU19TQVZFOwogCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKwlhc20gdm9sYXRpbGUoCiAjdW5kZWYgQkxPQ0sKICNkZWZpbmUgQkxPQ0soaSkgXAogCQlQRjEoaSkJCQkJCVwKLQkJCQlQRjEoaSsyKQkJXAotCQlMRChpLDApCQkJCQlcCi0JCQlMRChpKzEsMSkJCQlcCi0JCQkJTEQoaSsyLDIpCQlcCi0JCQkJCUxEKGkrMywzKQlcCisJCQkJUEYxKGkgKyAyKQkJXAorCQlMRChpLCAwKQkJCQlcCisJCQlMRChpICsgMSwgMSkJCQlcCisJCQkJTEQoaSArIDIsIDIpCQlcCisJCQkJCUxEKGkgKyAzLCAzKQlcCiAJCVBGMihpKQkJCQkJXAotCQkJCVBGMihpKzIpCQlcCi0JCVhPMShpLDApCQkJCVwKLQkJCVhPMShpKzEsMSkJCQlcCi0JCQkJWE8xKGkrMiwyKQkJXAotCQkJCQlYTzEoaSszLDMpCVwKKwkJCQlQRjIoaSArIDIpCQlcCisJCVhPMShpLCAwKQkJCQlcCisJCQlYTzEoaSArIDEsIDEpCQkJXAorCQkJCVhPMShpICsgMiwgMikJCVwKKwkJCQkJWE8xKGkgKyAzLCAzKQlcCiAJCVBGMyhpKQkJCQkJXAotCQkJCVBGMyhpKzIpCQlcCi0JCVhPMihpLDApCQkJCVwKLQkJCVhPMihpKzEsMSkJCQlcCi0JCQkJWE8yKGkrMiwyKQkJXAotCQkJCQlYTzIoaSszLDMpCVwKKwkJCQlQRjMoaSArIDIpCQlcCisJCVhPMihpLCAwKQkJCQlcCisJCQlYTzIoaSArIDEsIDEpCQkJXAorCQkJCVhPMihpICsgMiwgMikJCVwKKwkJCQkJWE8yKGkgKyAzLCAzKQlcCiAJCVBGNChpKQkJCQkJXAotCQkJCVBGNChpKzIpCQlcCi0JCVBGMChpKzQpCQkJCVwKLQkJCQlQRjAoaSs2KQkJXAotCQlYTzMoaSwwKQkJCQlcCi0JCQlYTzMoaSsxLDEpCQkJXAotCQkJCVhPMyhpKzIsMikJCVwKLQkJCQkJWE8zKGkrMywzKQlcCi0JCVhPNChpLDApCQkJCVwKLQkJCVhPNChpKzEsMSkJCQlcCi0JCQkJWE80KGkrMiwyKQkJXAotCQkJCQlYTzQoaSszLDMpCVwKLQkJU1QoaSwwKQkJCQkJXAotCQkJU1QoaSsxLDEpCQkJXAotCQkJCVNUKGkrMiwyKQkJXAotCQkJCQlTVChpKzMsMykJXAorCQkJCVBGNChpICsgMikJCVwKKwkJUEYwKGkgKyA0KQkJCQlcCisJCQkJUEYwKGkgKyA2KQkJXAorCQlYTzMoaSwgMCkJCQkJXAorCQkJWE8zKGkgKyAxLCAxKQkJCVwKKwkJCQlYTzMoaSArIDIsIDIpCQlcCisJCQkJCVhPMyhpICsgMywgMykJXAorCQlYTzQoaSwgMCkJCQkJXAorCQkJWE80KGkgKyAxLCAxKQkJCVwKKwkJCQlYTzQoaSArIDIsIDIpCQlcCisJCQkJCVhPNChpICsgMywgMykJXAorCQlTVChpLCAwKQkJCQlcCisJCQlTVChpICsgMSwgMSkJCQlcCisJCQkJU1QoaSArIDIsIDIpCQlcCisJCQkJCVNUKGkgKyAzLCAzKQlcCiAKIAogCQlQRjAoMCkKIAkJCQlQRjAoMikKIAogCSIgLmFsaWduIDMyCQkJO1xuIgotICAgICAgICAiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKKwkiIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiIKIAogCQlCTE9DSygwKQogCQlCTE9DSyg0KQogCQlCTE9DSyg4KQogCQlCTE9DSygxMikKIAotICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AxXSAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AyXSAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AzXSAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3A0XSAgICAgICAgICAgO1xuIgotICAgICAgICAiICAgICAgIGFkZHEgJVtpbmNdLCAlW3A1XSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkcSAlW2luY10sICVbcDFdICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwMl0gICAgICAgICAgIDtcbiIKKwkiICAgICAgIGFkZHEgJVtpbmNdLCAlW3AzXSAgICAgICAgICAgO1xuIgorCSIgICAgICAgYWRkcSAlW2luY10sICVbcDRdICAgICAgICAgICA7XG4iCisJIiAgICAgICBhZGRxICVbaW5jXSwgJVtwNV0gICAgICAgICAgIDtcbiIKIAkiCWRlY2wgJVtjbnRdIDsgam56IDFiIgogCTogW2NudF0gIitjIiAobGluZXMpLAotICAJICBbcDFdICIrciIgKHAxKSwgW3AyXSAiK3IiIChwMiksIFtwM10gIityIiAocDMpLCBbcDRdICIrciIgKHA0KSwgCisJICBbcDFdICIrciIgKHAxKSwgW3AyXSAiK3IiIChwMiksIFtwM10gIityIiAocDMpLCBbcDRdICIrciIgKHA0KSwKIAkgIFtwNV0gIityIiAocDUpCiAJOiBbaW5jXSAiciIgKDI1NlVMKQogCTogIm1lbW9yeSIpOwpAQCAtMzMzLDE4ICszMzcsMTggQEAKIH0KIAogc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX3NzZSA9IHsKLSAgICAgICAgLm5hbWUgPSAiZ2VuZXJpY19zc2UiLAotICAgICAgICAuZG9fMiA9IHhvcl9zc2VfMiwKLSAgICAgICAgLmRvXzMgPSB4b3Jfc3NlXzMsCi0gICAgICAgIC5kb180ID0geG9yX3NzZV80LAotICAgICAgICAuZG9fNSA9IHhvcl9zc2VfNSwKKwkubmFtZSA9ICJnZW5lcmljX3NzZSIsCisJLmRvXzIgPSB4b3Jfc3NlXzIsCisJLmRvXzMgPSB4b3Jfc3NlXzMsCisJLmRvXzQgPSB4b3Jfc3NlXzQsCisJLmRvXzUgPSB4b3Jfc3NlXzUsCiB9OwogCiAjdW5kZWYgWE9SX1RSWV9URU1QTEFURVMKLSNkZWZpbmUgWE9SX1RSWV9URU1QTEFURVMJCQkJXAotCWRvIHsJCQkJCQlcCi0JCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX3NzZSk7CVwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUwkJCVwKK2RvIHsJCQkJCQlcCisJeG9yX3NwZWVkKCZ4b3JfYmxvY2tfc3NlKTsJCVwKK30gd2hpbGUgKDApCiAKIC8qIFdlIGZvcmNlIHRoZSB1c2Ugb2YgdGhlIFNTRSB4b3IgYmxvY2sgYmVjYXVzZSBpdCBjYW4gd3JpdGUgYXJvdW5kIEwyLgogICAgV2UgbWF5IGFsc28gYmUgYWJsZSB0byBsb2FkIGludG8gdGhlIEwxIG9ubHkgZGVwZW5kaW5nIG9uIGhvdyB0aGUgY3B1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2NhY2hlZmx1c2guaAppbmRleCBiNzczYzU3Li45NGM0YzUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jYWNoZWZsdXNoLmgKQEAgLTcwLDYgKzcwLDggQEAKICNlbmRpZgogI2lmIChJQ0FDSEVfV0FZX1NJWkUgPiBQQUdFX1NJWkUpCiBleHRlcm4gdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2VfYWxpYXModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisjZWxzZQorIyBkZWZpbmUgX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlX2FsaWFzKHYscCkJZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9jb3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2NvcHJvY2Vzc29yLmgKaW5kZXggYWEyMTIxMC4uMWNiY2Y5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2NvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2NvcHJvY2Vzc29yLmgKQEAgLTUsODEgKzUsMTczIEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgVGVuc2lsaWNhIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDcgVGVuc2lsaWNhIEluYy4KICAqLwogCisKICNpZm5kZWYgX1hURU5TQV9DT1BST0NFU1NPUl9ICiAjZGVmaW5lIF9YVEVOU0FfQ09QUk9DRVNTT1JfSAogCi0jaW5jbHVkZSA8YXNtL3ZhcmlhbnQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGFzbS92YXJpYW50L3RpZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi0jaWYgIVhDSEFMX0hBVkVfQ1AKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyMgaW5jbHVkZSA8YXNtL3ZhcmlhbnQvdGllLWFzbS5oPgogCi0jZGVmaW5lIFhURU5TQV9DUF9FWFRSQV9PRkZTRVQgCTAKLSNkZWZpbmUgWFRFTlNBX0NQX0VYVFJBX0FMSUdOCTEJLyogbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KLSNkZWZpbmUgWFRFTlNBX0NQX0VYVFJBX1NJWkUJMAorLm1hY3JvCXhjaGFsX3NhX3N0YXJ0ICBhIGIKKwkuc2V0IC5MeGNoYWxfcG9mc18sIDAKKwkuc2V0IC5MeGNoYWxfb2ZzXywgMAorLmVuZG0KIAotI2Vsc2UKKy5tYWNybwl4Y2hhbF9zYV9hbGlnbiAgcHRyIG1pbm9mcyBtYXhvZnMgb2ZzYWxpZ24gdG90YWxpZ24KKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgLkx4Y2hhbF9wb2ZzXyArIFx0b3RhbGlnbiAtIDEKKwkuc2V0CS5MeGNoYWxfb2ZzXywgKC5MeGNoYWxfb2ZzXyAmIC1cdG90YWxpZ24pIC0gLkx4Y2hhbF9wb2ZzXworLmVuZG0KIAotI2RlZmluZSBYVE9GUyhsYXN0X3N0YXJ0LGxhc3Rfc2l6ZSxhbGlnbikgXAotCSgobGFzdF9zdGFydCtsYXN0X3NpemUrYWxpZ24tMSkgJiAtYWxpZ24pCisjZGVmaW5lIF9TRUxFQ1QJKCAgWFRIQUxfU0FTX1RJRSB8IFhUSEFMX1NBU19PUFQgXAorCQkgfCBYVEhBTF9TQVNfQ0MgXAorCQkgfCBYVEhBTF9TQVNfQ0FMUiB8IFhUSEFMX1NBU19DQUxFICkKIAotI2RlZmluZSBYVEVOU0FfQ1BfRVhUUkFfT0ZGU0VUCTAKLSNkZWZpbmUgWFRFTlNBX0NQX0VYVFJBX0FMSUdOCVhDSEFMX0VYVFJBX1NBX0FMSUdOCisubWFjcm8gc2F2ZV94dHJlZ3Nfb3B0IHB0ciBjbGIgYXQxIGF0MiBhdDMgYXQ0IG9mZnNldAorCS5pZiBYVFJFR1NfT1BUX1NJWkUgPiAwCisJCWFkZGkJXGNsYiwgXHB0ciwgXG9mZnNldAorCQl4Y2hhbF9uY3Bfc3RvcmUgXGNsYiBcYXQxIFxhdDIgXGF0MyBcYXQ0IHNlbGVjdD1fU0VMRUNUCisJLmVuZGlmCisuZW5kbQogCi0jZGVmaW5lIFhURU5TQV9DUEVfQ1AwX09GRlNFVAlcCi0JWFRPRlMoWFRFTlNBX0NQX0VYVFJBX09GRlNFVCwgWENIQUxfRVhUUkFfU0FfU0laRSwgWENIQUxfQ1AwX1NBX0FMSUdOKQotI2RlZmluZSBYVEVOU0FfQ1BFX0NQMV9PRkZTRVQJXAotCVhUT0ZTKFhURU5TQV9DUEVfQ1AwX09GRlNFVCwgWENIQUxfQ1AwX1NBX1NJWkUsIFhDSEFMX0NQMV9TQV9BTElHTikKLSNkZWZpbmUgWFRFTlNBX0NQRV9DUDJfT0ZGU0VUCVwKLQlYVE9GUyhYVEVOU0FfQ1BFX0NQMV9PRkZTRVQsIFhDSEFMX0NQMV9TQV9TSVpFLCBYQ0hBTF9DUDJfU0FfQUxJR04pCi0jZGVmaW5lIFhURU5TQV9DUEVfQ1AzX09GRlNFVAlcCi0JWFRPRlMoWFRFTlNBX0NQRV9DUDJfT0ZGU0VULCBYQ0hBTF9DUDJfU0FfU0laRSwgWENIQUxfQ1AzX1NBX0FMSUdOKQotI2RlZmluZSBYVEVOU0FfQ1BFX0NQNF9PRkZTRVQJXAotCVhUT0ZTKFhURU5TQV9DUEVfQ1AzX09GRlNFVCwgWENIQUxfQ1AzX1NBX1NJWkUsIFhDSEFMX0NQNF9TQV9BTElHTikKLSNkZWZpbmUgWFRFTlNBX0NQRV9DUDVfT0ZGU0VUCVwKLQlYVE9GUyhYVEVOU0FfQ1BFX0NQNF9PRkZTRVQsIFhDSEFMX0NQNF9TQV9TSVpFLCBYQ0hBTF9DUDVfU0FfQUxJR04pCi0jZGVmaW5lIFhURU5TQV9DUEVfQ1A2X09GRlNFVAlcCi0JWFRPRlMoWFRFTlNBX0NQRV9DUDVfT0ZGU0VULCBYQ0hBTF9DUDVfU0FfU0laRSwgWENIQUxfQ1A2X1NBX0FMSUdOKQotI2RlZmluZSBYVEVOU0FfQ1BFX0NQN19PRkZTRVQJXAotCVhUT0ZTKFhURU5TQV9DUEVfQ1A2X09GRlNFVCwgWENIQUxfQ1A2X1NBX1NJWkUsIFhDSEFMX0NQN19TQV9BTElHTikKLSNkZWZpbmUgWFRFTlNBX0NQX0VYVFJBX1NJWkUJXAotCVhUT0ZTKFhURU5TQV9DUEVfQ1A3X09GRlNFVCwgWENIQUxfQ1A3X1NBX1NJWkUsIDE2KQorLm1hY3JvIGxvYWRfeHRyZWdzX29wdCBwdHIgY2xiIGF0MSBhdDIgYXQzIGF0NCBvZmZzZXQKKwkuaWYgWFRSRUdTX09QVF9TSVpFID4gMAorCQlhZGRpCVxjbGIsIFxwdHIsIFxvZmZzZXQKKwkJeGNoYWxfbmNwX2xvYWQgXGNsYiBcYXQxIFxhdDIgXGF0MyBcYXQ0IHNlbGVjdD1fU0VMRUNUCisJLmVuZGlmCisuZW5kbQorI3VuZGVmIF9TRUxFQ1QKIAotI2lmIFhDSEFMX0NQX05VTSA+IDAKLSMgaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBfU0VMRUNUCSggIFhUSEFMX1NBU19USUUgfCBYVEhBTF9TQVNfT1BUIFwKKwkJIHwgWFRIQUxfU0FTX05PQ0MgXAorCQkgfCBYVEhBTF9TQVNfQ0FMUiB8IFhUSEFMX1NBU19DQUxFIHwgWFRIQUxfU0FTX0dMT0IgKQorCisubWFjcm8gc2F2ZV94dHJlZ3NfdXNlciBwdHIgY2xiIGF0MSBhdDIgYXQzIGF0NCBvZmZzZXQKKwkuaWYgWFRSRUdTX1VTRVJfU0laRSA+IDAKKwkJYWRkaQlcY2xiLCBccHRyLCBcb2Zmc2V0CisJCXhjaGFsX25jcF9zdG9yZSBcY2xiIFxhdDEgXGF0MiBcYXQzIFxhdDQgc2VsZWN0PV9TRUxFQ1QKKwkuZW5kaWYKKy5lbmRtCisKKy5tYWNybyBsb2FkX3h0cmVnc191c2VyIHB0ciBjbGIgYXQxIGF0MiBhdDMgYXQ0IG9mZnNldAorCS5pZiBYVFJFR1NfVVNFUl9TSVpFID4gMAorCQlhZGRpCVxjbGIsIFxwdHIsIFxvZmZzZXQKKwkJeGNoYWxfbmNwX2xvYWQgXGNsYiBcYXQxIFxhdDIgXGF0MyBcYXQ0IHNlbGVjdD1fU0VMRUNUCisJLmVuZGlmCisuZW5kbQorI3VuZGVmIF9TRUxFQ1QKKworCisKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKwogLyoKLSAqIFRhc2tzIHRoYXQgb3duIGNvbnRlbnRzIG9mIChsYXN0IHVzZXIpIGVhY2ggY29wcm9jZXNzb3IuCi0gKiBFbnRyaWVzIGFyZSAwIGZvciBub3Qtb3duZWQgb3Igbm9uLWV4aXN0ZW50IGNvcHJvY2Vzc29ycy4KLSAqIE5vdGU6IFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGlzIGZpeGVkIHRvIDggYnl0ZXMgaW4gZW50cnkuUworICogWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1IoeCkgcmV0dXJucyAxIGlmIGNvcHJvY2Vzc29yIHggaXMgY29uZmlndXJlZC4KKyAqCisgKiBYVEVOU0FfSEFWRV9JT19QT1JUKHgpIHJldHVybnMgMSBpZiBpby1wb3J0IHggaXMgY29uZmlndXJlZC4KKyAqCiAgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyOwkvKiBvd25lciAqLwotCWludCBvZmZzZXQ7CQkJLyogb2Zmc2V0IGluIGNwZXh0cmEgc3BhY2UuICovCi19IGNvcHJvY2Vzc29yX2luZm9fdDsKLSMgZWxzZQotIyAgZGVmaW5lIENPUFJPQ0VTU09SX0lORk9fT1dORVIgMAotIyAgZGVmaW5lIENPUFJPQ0VTU09SX0lORk9fT0ZGU0VUIDQKLSMgIGRlZmluZSBDT1BST0NFU1NPUl9JTkZPX1NJWkUgOAotIyBlbmRpZgotI2VuZGlmCi0jZW5kaWYJLyogWENIQUxfSEFWRV9DUCAqLwogCisjZGVmaW5lIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKHgpCQkJCQlcCisJKChYQ0hBTF9DUF9NQVNLIF4gWENIQUxfQ1BfUE9SVF9NQVNLKSAmICgxIDw8ICh4KSkpCisjZGVmaW5lIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SUwkJCQkJXAorCShYQ0hBTF9DUF9NQVNLIF4gWENIQUxfQ1BfUE9SVF9NQVNLKQorI2RlZmluZSBYVEVOU0FfSEFWRV9JT19QT1JUKHgpCQkJCQkJXAorCShYQ0hBTF9DUF9QT1JUX01BU0sgJiAoMSA8PCAoeCkpKQorI2RlZmluZSBYVEVOU0FfSEFWRV9JT19QT1JUUwkJCQkJCVwKKwlYQ0hBTF9DUF9QT1JUX01BU0sKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSMgaWYgWENIQUxfQ1BfTlVNID4gMAotc3RydWN0IHRhc2tfc3RydWN0OwotZXh0ZXJuIHZvaWQgcmVsZWFzZV9jb3Byb2Nlc3NvcnMgKHN0cnVjdCB0YXNrX3N0cnVjdCopOwotZXh0ZXJuIHZvaWQgc2F2ZV9jb3Byb2Nlc3Nvcl9yZWdpc3RlcnModm9pZCosIGludCk7Ci0jIGVsc2UKLSMgIGRlZmluZSByZWxlYXNlX2NvcHJvY2Vzc29ycyh0YXNrKQotIyBlbmRpZgogCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgY3Bfc3RhdGVfdFtYVEVOU0FfQ1BfRVhUUkFfU0laRV0KLQlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoWFRFTlNBX0NQX0VYVFJBX0FMSUdOKSkpOworCisjaWYgWENIQUxfSEFWRV9DUAorCisjZGVmaW5lIFJTUl9DUEVOQUJMRSh4KQlkbyB7CQkJCQkJICBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJzciAlMCwiIF9fc3RyaW5naWZ5KENQRU5BQkxFKSA6ICI9YSIgKHgpKTsgXAorCX0gd2hpbGUoMCk7CisjZGVmaW5lIFdTUl9DUEVOQUJMRSh4KQlkbyB7CQkJCQkJICBcCisgIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3NyICUwLCIgX19zdHJpbmdpZnkoQ1BFTkFCTEUpICI7IHJzeW5jIiAJICBcCisJICAgIAkJICAgICA6OiAiYSIgKHgpKTsJCQkJICBcCisJfSB3aGlsZSgwKTsKKworI2VuZGlmIC8qIFhDSEFMX0hBVkVfQ1AgKi8KKworCisvKgorICogQWRkaXRpb25hbCByZWdpc3RlcnMuCisgKiBXZSBkZWZpbmUgdGhyZWUgdHlwZXMgb2YgYWRkaXRpb25hbCByZWdpc3RlcnM6CisgKiAgZXh0OiBleHRyYSByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBieSB0aGUgY29tcGlsZXIKKyAqICBjcG46IG9wdGlvbmFsIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGEgdXNlciBhcHBsaWNhdGlvbgorICogIGNwWDogY29wcm9jZXNzb3IgcmVnaXN0ZXJzIHRoYXQgY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgY29ycmVzcG9uZGluZworICogICAgICAgQ1BFTkFCTEUgYml0IGlzIHNldC4KKyAqLworCisjZGVmaW5lIFhDSEFMX1NBX1JFRyhsaXN0LGNjLGFiaSx0eXBlLHksbmFtZSx6LGFsaWduLHNpemUsLi4uKQlcCisJX19SRUcgIyMgbGlzdCAoY2MsIGFiaSwgdHlwZSwgbmFtZSwgc2l6ZSwgYWxpZ24pCisKKyNkZWZpbmUgX19SRUcwKGNjLGFiaSx0LG5hbWUscyxhKQlfX1JFRzBfICMjIGNjIChhYmksbmFtZSkKKyNkZWZpbmUgX19SRUcxKGNjLGFiaSx0LG5hbWUscyxhKQlfX1JFRzFfICMjIGNjIChuYW1lKQorI2RlZmluZSBfX1JFRzIoY2MsYWJpLHR5cGUsLi4uKQkJX19SRUcyXyAjIyB0eXBlIChfX1ZBX0FSR1NfXykKKworI2RlZmluZSBfX1JFRzBfMChhYmksbmFtZSkKKyNkZWZpbmUgX19SRUcwXzEoYWJpLG5hbWUpCQlfX1JFRzBfMSAjIyBhYmkgKG5hbWUpCisjZGVmaW5lIF9fUkVHMF8xMChuYW1lKQlfX3UzMiBuYW1lOworI2RlZmluZSBfX1JFRzBfMTEobmFtZSkJX191MzIgbmFtZTsKKyNkZWZpbmUgX19SRUcwXzEyKG5hbWUpCisKKyNkZWZpbmUgX19SRUcxXzAobmFtZSkJX191MzIgbmFtZTsKKyNkZWZpbmUgX19SRUcxXzEobmFtZSkKKworI2RlZmluZSBfX1JFRzJfMChuLHMsYSkJX191MzIgbmFtZTsKKyNkZWZpbmUgX19SRUcyXzEobixzLGEpCXVuc2lnbmVkIGNoYXIgbltzXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChhKSkpOworI2RlZmluZSBfX1JFRzJfMihuLHMsYSkgdW5zaWduZWQgY2hhciBuW3NdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKGEpKSk7CisKK3R5cGVkZWYgc3RydWN0IHsgWENIQUxfTkNQX1NBX0xJU1QoMCkgfSB4dHJlZ3Nfb3B0X3QKKwlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoWENIQUxfTkNQX1NBX0FMSUdOKSkpOwordHlwZWRlZiBzdHJ1Y3QgeyBYQ0hBTF9OQ1BfU0FfTElTVCgxKSB9IHh0cmVnc191c2VyX3QKKwlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoWENIQUxfTkNQX1NBX0FMSUdOKSkpOworCisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisKK3R5cGVkZWYgc3RydWN0IHsgWENIQUxfQ1AwX1NBX0xJU1QoMikgfSB4dHJlZ3NfY3AwX3QKKwlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoWENIQUxfQ1AwX1NBX0FMSUdOKSkpOwordHlwZWRlZiBzdHJ1Y3QgeyBYQ0hBTF9DUDFfU0FfTElTVCgyKSB9IHh0cmVnc19jcDFfdAorCV9fYXR0cmlidXRlX18gKChhbGlnbmVkIChYQ0hBTF9DUDFfU0FfQUxJR04pKSk7Cit0eXBlZGVmIHN0cnVjdCB7IFhDSEFMX0NQMl9TQV9MSVNUKDIpIH0geHRyZWdzX2NwMl90CisJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKFhDSEFMX0NQMl9TQV9BTElHTikpKTsKK3R5cGVkZWYgc3RydWN0IHsgWENIQUxfQ1AzX1NBX0xJU1QoMikgfSB4dHJlZ3NfY3AzX3QKKwlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoWENIQUxfQ1AzX1NBX0FMSUdOKSkpOwordHlwZWRlZiBzdHJ1Y3QgeyBYQ0hBTF9DUDRfU0FfTElTVCgyKSB9IHh0cmVnc19jcDRfdAorCV9fYXR0cmlidXRlX18gKChhbGlnbmVkIChYQ0hBTF9DUDRfU0FfQUxJR04pKSk7Cit0eXBlZGVmIHN0cnVjdCB7IFhDSEFMX0NQNV9TQV9MSVNUKDIpIH0geHRyZWdzX2NwNV90CisJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKFhDSEFMX0NQNV9TQV9BTElHTikpKTsKK3R5cGVkZWYgc3RydWN0IHsgWENIQUxfQ1A2X1NBX0xJU1QoMikgfSB4dHJlZ3NfY3A2X3QKKwlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoWENIQUxfQ1A2X1NBX0FMSUdOKSkpOwordHlwZWRlZiBzdHJ1Y3QgeyBYQ0hBTF9DUDdfU0FfTElTVCgyKSB9IHh0cmVnc19jcDdfdAorCV9fYXR0cmlidXRlX18gKChhbGlnbmVkIChYQ0hBTF9DUDdfU0FfQUxJR04pKSk7CisKK2V4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8qIGNvcHJvY2Vzc29yX293bmVyW1hDSEFMX0NQX01BWF07CitleHRlcm4gdm9pZCBjb3Byb2Nlc3Nvcl9zYXZlKHZvaWQqLCBpbnQpOworZXh0ZXJuIHZvaWQgY29wcm9jZXNzb3JfbG9hZCh2b2lkKiwgaW50KTsKK2V4dGVybiB2b2lkIGNvcHJvY2Vzc29yX2ZsdXNoKHN0cnVjdCB0aHJlYWRfaW5mbyosIGludCk7CitleHRlcm4gdm9pZCBjb3Byb2Nlc3Nvcl9yZXN0b3JlKHN0cnVjdCB0aHJlYWRfaW5mbyosIGludCk7CisKK2V4dGVybiB2b2lkIGNvcHJvY2Vzc29yX3JlbGVhc2VfYWxsKHN0cnVjdCB0aHJlYWRfaW5mbyopOworZXh0ZXJuIHZvaWQgY29wcm9jZXNzb3JfZmx1c2hfYWxsKHN0cnVjdCB0aHJlYWRfaW5mbyopOworCitzdGF0aWMgaW5saW5lIHZvaWQgY29wcm9jZXNzb3JfY2xlYXJfY3BlbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGkgPSAwOworCVdTUl9DUEVOQUJMRShpKTsKK30KKworI2VuZGlmCS8qIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SUyAqLwogCiAjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwotCi0KICNlbmRpZgkvKiBfWFRFTlNBX0NPUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9lbGYuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9lbGYuaAppbmRleCA0NjczODQ1Li5jYTZlNTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2VsZi5oCkBAIC03MiwxMTUgKzcyLDMyIEBACiAKIC8qIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4gVGhpcyBpcyBuZWVkZWQgZm9yIGNvcmUgZHVtcCBzdXBwb3J0LiAgKi8KIAotLyoKLSAqIGVsZl9ncmVnc2V0X3QgY29udGFpbnMgdGhlIGFwcGxpY2F0aW9uLWxldmVsIHN0YXRlIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0gKiBQcm9jZXNzb3IgaW5mbzogCWNvbmZpZ192ZXJzaW9uLCBjcHV4eQotICogUHJvY2Vzc29yIHN0YXRlOglwYywgcHMsIGV4Y2NhdXNlLCBleGN2YWRkciwgd2IsIHdzLAotICoJCQlsYmVnLCBsZW5kLCBsY291bnQsIHNhcgotICogR1AgcmVnczoJCWFyMCAtIGFyWFgKLSAqLwotCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCWVsZl9ncmVnX3QgeGNoYWxfY29uZmlnX2lkMDsKLQllbGZfZ3JlZ190IHhjaGFsX2NvbmZpZ19pZDE7Ci0JZWxmX2dyZWdfdCBjcHV4OwotCWVsZl9ncmVnX3QgY3B1eTsKIAllbGZfZ3JlZ190IHBjOwogCWVsZl9ncmVnX3QgcHM7Ci0JZWxmX2dyZWdfdCBleGNjYXVzZTsKLQllbGZfZ3JlZ190IGV4Y3ZhZGRyOwotCWVsZl9ncmVnX3Qgd2luZG93YmFzZTsKLQllbGZfZ3JlZ190IHdpbmRvd3N0YXJ0OwogCWVsZl9ncmVnX3QgbGJlZzsKIAllbGZfZ3JlZ190IGxlbmQ7CiAJZWxmX2dyZWdfdCBsY291bnQ7CiAJZWxmX2dyZWdfdCBzYXI7Ci0JZWxmX2dyZWdfdCBzeXNjYWxsOwotCWVsZl9ncmVnX3QgYXJbNjRdOworCWVsZl9ncmVnX3Qgd2luZG93c3RhcnQ7CisJZWxmX2dyZWdfdCB3aW5kb3diYXNlOworCWVsZl9ncmVnX3QgcmVzZXJ2ZWRbOCs0OF07CisJZWxmX2dyZWdfdCBhWzY0XTsKIH0geHRlbnNhX2dyZWdzZXRfdDsKIAogI2RlZmluZSBFTEZfTkdSRUcJKHNpemVvZih4dGVuc2FfZ3JlZ3NldF90KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKIAogdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKIAotLyoKLSAqICBDb21wdXRlIHRoZSBzaXplIG9mIHRoZSBjb3Byb2Nlc3NvciBhbmQgZXh0cmEgc3RhdGUgbGF5b3V0IChyZWdpc3RlciBpbmZvKQotICogIHRhYmxlIChpbiBieXRlcykuCi0gKiAgVGhpcyBpcyBhY3R1YWxseSB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSB0YWJsZSwgYXMgb3Bwb3NlZCB0byB0aGUgc2l6ZSwKLSAqICB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgX3h0ZW5zYV9yZWdpbmZvX3RhYmxlX3NpemUgZ2xvYmFsIHZhcmlhYmxlLgotICoKLSAqICAoU2VlIGFsc28gYXJjaC94dGVuc2Eva2VybmVsL2NvcHJvY2Vzc29yLlMpCi0gKgotICovCi0KLSNpZm5kZWYgWENIQUxfRVhUUkFfU0FfQ09OVEVOVFNfTElCREJfTlVNCi0jIGRlZmluZSBYVEVOU0FfQ1BFX0xUQUJMRV9TSVpFCQkwCi0jZWxzZQotIyBkZWZpbmUgWFRFTlNBX0NQRV9TRUdNRU5UKG51bSkJKG51bSA/ICgxK251bSkgOiAwKQotIyBkZWZpbmUgWFRFTlNBX0NQRV9MVEFCTEVfRU5UUklFUwlcCi0JCSggWFRFTlNBX0NQRV9TRUdNRU5UKFhDSEFMX0VYVFJBX1NBX0NPTlRFTlRTX0xJQkRCX05VTSkJXAotCQkrIFhURU5TQV9DUEVfU0VHTUVOVChYQ0hBTF9DUDBfU0FfQ09OVEVOVFNfTElCREJfTlVNKQlcCi0JCSsgWFRFTlNBX0NQRV9TRUdNRU5UKFhDSEFMX0NQMV9TQV9DT05URU5UU19MSUJEQl9OVU0pCVwKLQkJKyBYVEVOU0FfQ1BFX1NFR01FTlQoWENIQUxfQ1AyX1NBX0NPTlRFTlRTX0xJQkRCX05VTSkJXAotCQkrIFhURU5TQV9DUEVfU0VHTUVOVChYQ0hBTF9DUDNfU0FfQ09OVEVOVFNfTElCREJfTlVNKQlcCi0JCSsgWFRFTlNBX0NQRV9TRUdNRU5UKFhDSEFMX0NQNF9TQV9DT05URU5UU19MSUJEQl9OVU0pCVwKLQkJKyBYVEVOU0FfQ1BFX1NFR01FTlQoWENIQUxfQ1A1X1NBX0NPTlRFTlRTX0xJQkRCX05VTSkJXAotCQkrIFhURU5TQV9DUEVfU0VHTUVOVChYQ0hBTF9DUDZfU0FfQ09OVEVOVFNfTElCREJfTlVNKQlcCi0JCSsgWFRFTlNBX0NQRV9TRUdNRU5UKFhDSEFMX0NQN19TQV9DT05URU5UU19MSUJEQl9OVU0pCVwKLQkJKyAxCQkvKiBmaW5hbCBlbnRyeSAqLwkJCVwKLQkJKQotIyBkZWZpbmUgWFRFTlNBX0NQRV9MVEFCTEVfU0laRQkJKFhURU5TQV9DUEVfTFRBQkxFX0VOVFJJRVMgKiA4KQotI2VuZGlmCi0KLQotLyoKLSAqIEluc3RhbnRpYXRpb25zIG9mIHRoZSBlbGZfZnByZWdzZXRfdCB0eXBlIGNvbnRhaW4sIGluIG1vc3QKLSAqIGFyY2hpdGVjdHVyZXMsIHRoZSBmbG9hdGluZyBwb2ludCAoRlBVKSByZWdpc3RlciBzZXQuCi0gKiBGb3IgWHRlbnNhLCB0aGlzIHR5cGUgaXMgZXh0ZW5kZWQgdG8gY29udGFpbiBhbGwgY3VzdG9tIHN0YXRlLAotICogaWUuIGNvcHJvY2Vzc29yIGFuZCAiZXh0cmEiIChub24tY29wcm9jZXNzb3IpIHN0YXRlIChpbmNsdWRpbmcsCi0gKiBmb3IgZXhhbXBsZSwgVElFLWRlZmluZWQgc3RhdGVzIGFuZCByZWdpc3RlciBmaWxlczsgYXMgd2VsbAotICogYXMgb3RoZXIgb3B0aW9uYWwgcHJvY2Vzc29yIHN0YXRlKS4KLSAqIFRoaXMgaW5jbHVkZXMgRlBVIHN0YXRlIGlmIGEgZmxvYXRpbmctcG9pbnQgY29wcm9jZXNzb3IgaGFwcGVucwotICogdG8gaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBYdGVuc2EgcHJvY2Vzc29yLgotICoKLSAqIFRPVEFMX0ZQUkVHU19TSVpFIGlzIHRoZSByZXF1aXJlZCBzaXplICh3aXRob3V0IHJvdW5kaW5nKQotICogb2YgZWxmX2ZwcmVnc2V0X3QuICBJdCBwcm92aWRlcyBzcGFjZSBmb3IgdGhlIGZvbGxvd2luZzoKLSAqCi0gKiAgYSkJMzItYml0IG1hc2sgb2YgYWN0aXZlIGNvcHJvY2Vzc29ycyBmb3IgdGhpcyB0YXNrIChzaW1pbGFyCi0gKgl0byBDUEVOQUJMRSBpbiBzaW5nbGUtdGhyZWFkZWQgWHRlbnNhIHByb2Nlc3NvciBzeXN0ZW1zKQotICoKLSAqICBiKQl0YWJsZSBkZXNjcmliaW5nIHRoZSBsYXlvdXQgb2YgY3VzdG9tIHN0YXRlcyAoaWUuIG9mCi0gKiAgICAgIGluZGl2aWR1YWwgcmVnaXN0ZXJzLCBldGMpIHdpdGhpbiB0aGUgc2F2ZSBhcmVhcwotICoKLSAqICBjKSAgc2F2ZSBhcmVhcyBmb3IgZWFjaCBjb3Byb2Nlc3NvciBhbmQgZm9yIG5vbi1jb3Byb2Nlc3NvcgotICogICAgICAoImV4dHJhIikgc3RhdGUKLSAqCi0gKiBOb3RlIHRoYXQgc2F2ZSBhcmVhcyBtYXkgcmVxdWlyZSB1cCB0byAxNi1ieXRlIGFsaWdubWVudCB3aGVuCi0gKiBhY2Nlc3NlZCBieSBzYXZlL3Jlc3RvcmUgc2VxdWVuY2VzLiAgV2UgZG8gbm90IG5lZWQgdG8gZW5zdXJlCi0gKiBzdWNoIGFsaWdubWVudCBpbiBhbiBlbGZfZnByZWdzZXRfdCBzdHJ1Y3R1cmUgYmVjYXVzZSBjdXN0b20KLSAqIHN0YXRlIGlzIG5vdCBkaXJlY3RseSBsb2FkZWQvc3RvcmVkIGludG8gaXQ7IHJhdGhlciwgc2F2ZSBhcmVhCi0gKiBjb250ZW50cyBhcmUgY29waWVkIHRvIGVsZl9mcHJlZ3NldF90IGZyb20gdGhlIGFjdGl2ZSBzYXZlIGFyZWFzCi0gKiAoc2VlICdzdHJ1Y3QgdGFza19zdHJ1Y3QnIGRlZmluaXRpb24gaW4gcHJvY2Vzc29yLmggZm9yIHRoYXQpCi0gKiB1c2luZyBtZW1jcHkoKS4gIEJ1dCB3ZSBkbyBhbGxvdyBzcGFjZSBmb3Igc3VjaCBhbGlnbm1lbnQsCi0gKiB0byBhbGxvdyBvcHRpbWl6YXRpb25zIG9mIGxheW91dCBhbmQgY29weWluZy4KLSAqLwotI2lmIDAKLSNkZWZpbmUgVE9UQUxfRlBSRUdTX1NJWkUJCQkJCQlcCi0gIAkoNCArIFhURU5TQV9DUEVfTFRBQkxFX1NJWkUgKyBYVEVOU0FfQ1BfRVhUUkFfU0laRSkKLSNkZWZpbmUgRUxGX05GUFJFRwkJCQkJCQlcCi0JKChUT1RBTF9GUFJFR1NfU0laRSArIHNpemVvZihlbGZfZnByZWdfdCkgLSAxKSAvIHNpemVvZihlbGZfZnByZWdfdCkpCi0jZWxzZQotI2RlZmluZSBUT1RBTF9GUFJFR1NfU0laRQkwCi0jZGVmaW5lIEVMRl9ORlBSRUcJCTAKLSNlbmRpZgorI2RlZmluZSBFTEZfTkZQUkVHCTE4CiAKIHR5cGVkZWYgdW5zaWduZWQgaW50IGVsZl9mcHJlZ190OwogdHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKIAogI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MoX2VyZWdzLCBfcHJlZ3MpIAkJCQlcCi0JeHRlbnNhX2VsZl9jb3JlX2NvcHlfcmVncyAoJl9lcmVncywgX3ByZWdzKTsKKwl4dGVuc2FfZWxmX2NvcmVfY29weV9yZWdzICgoeHRlbnNhX2dyZWdzZXRfdCopJihfZXJlZ3MpLCBfcHJlZ3MpOwogCiBleHRlcm4gdm9pZCB4dGVuc2FfZWxmX2NvcmVfY29weV9yZWdzICh4dGVuc2FfZ3JlZ3NldF90ICosIHN0cnVjdCBwdF9yZWdzICopOwogCkBAIC0yNTcsNiArMTc0LDIxIEBACiAgICAgICAgX3ItPmFyZWdbMTJdPTA7IF9yLT5hcmVnWzEzXT0wOyAgIF9yLT5hcmVnWzE0XT0wOyBfci0+YXJlZ1sxNV09MDsgXAogICB9IHdoaWxlICgwKQogCit0eXBlZGVmIHN0cnVjdCB7CisJeHRyZWdzX29wdF90CW9wdDsKKwl4dHJlZ3NfdXNlcl90CXVzZXI7CisjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1JTCisJeHRyZWdzX2NwMF90CWNwMDsKKwl4dHJlZ3NfY3AxX3QJY3AxOworCXh0cmVnc19jcDJfdAljcDI7CisJeHRyZWdzX2NwM190CWNwMzsKKwl4dHJlZ3NfY3A0X3QJY3A0OworCXh0cmVnc19jcDVfdAljcDU7CisJeHRyZWdzX2NwNl90CWNwNjsKKwl4dHJlZ3NfY3A3X3QJY3A3OworI2VuZGlmCit9IGVsZl94dHJlZ3NfdDsKKwogI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYXzMyQklUKQogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Eva3ZtLmggYi9pbmNsdWRlL2FzbS14dGVuc2Eva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhNGUzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9rdm0uaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19MSU5VWF9LVk1fWFRFTlNBX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fWFRFTlNBX0gKKworLyogeHRlbnNhIGRvZXMgbm90IHN1cHBvcnQgS1ZNICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL21vZHVsZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL21vZHVsZS5oCmluZGV4IGZmYjI1YmYuLmQ5YjM0YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvbW9kdWxlLmgKQEAgLTE1LDkgKzE1LDExIEBACiAKIHN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYwogewotCS8qIE1vZHVsZSBzdXBwb3J0IGlzIG5vdCBjb21wbGV0ZWx5IGltcGxlbWVudGVkLiAqLworCS8qIE5vIHNwZWNpYWwgZWxlbWVudHMsIHlldC4gKi8KIH07CiAKKyNkZWZpbmUgTU9EVUxFX0FSQ0hfVkVSTUFHSUMgInh0ZW5zYS0iIF9fc3RyaW5naWZ5KFhDSEFMX0NPUkVfSUQpICIgIgorCiAjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKICNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KICNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ2FsbG9jLmgKaW5kZXggOGQxNTQ0ZS4uNGY0YTc5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGdhbGxvYy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocGd0YWJsZV9jYWNoZSwgR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90b2tlbl90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCitzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3BndGFibGUuaAppbmRleCBjMGZjYzFjLi5jOGIwMjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ3RhYmxlLmgKQEAgLTY2LDExICs2Niw5IEBACiAgKi8KIAogI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkweEMwMDAwMDAwCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkweEM2RkVGRkZGCi0jZGVmaW5lIFRMQlRFTVBfQkFTRV8xCQkweEM2RkYwMDAwCi0jZGVmaW5lIFRMQlRFTVBfQkFTRV8yCQkweEM2RkY4MDAwCi0jZGVmaW5lIE1PRFVMRV9TVEFSVAkJMHhDNzAwMDAwMAotI2RlZmluZSBNT0RVTEVfRU5ECQkweEM3RkZGRkZGCisjZGVmaW5lIFZNQUxMT0NfRU5ECQkweEM3RkVGRkZGCisjZGVmaW5lIFRMQlRFTVBfQkFTRV8xCQkweEM3RkYwMDAwCisjZGVmaW5lIFRMQlRFTVBfQkFTRV8yCQkweEM3RkY4MDAwCiAKIC8qCiAgKiBYdGVuc2EgTGludXggY29uZmlnIFBURSBsYXlvdXQgKHdoZW4gcHJlc2VudCk6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvcHJvY2Vzc29yLmgKaW5kZXggOTY0MDhmNC4uNDkxOGE0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wcm9jZXNzb3IuaApAQCAtMTAzLDEwICsxMDMsNiBAQAogCXVuc2lnbmVkIGxvbmcgZGJyZWFrYVtYQ0hBTF9OVU1fREJSRUFLXTsKIAl1bnNpZ25lZCBsb25nIGRicmVha2NbWENIQUxfTlVNX0RCUkVBS107CiAKLQkvKiBBbGxvY2F0ZSBzdG9yYWdlIGZvciBleHRyYSBzdGF0ZSBhbmQgY29wcm9jZXNzb3Igc3RhdGUuICovCi0JdW5zaWduZWQgY2hhciBjcF9zYXZlW1hURU5TQV9DUF9FWFRSQV9TSVpFXQotCQlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChYVEVOU0FfQ1BfRVhUUkFfQUxJR04pKSk7Ci0KIAkvKiBNYWtlIHN0cnVjdHVyZSAxNiBieXRlcyBhbGlnbmVkLiAqLwogCWludCBhbGlnblswXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKIH07CkBAIC0xNjIsMjEgKzE1OCwxNiBAQAogc3RydWN0IHRhc2tfc3RydWN0Owogc3RydWN0IG1tX3N0cnVjdDsKIAotLy8gRklYTUU6IGRvIHdlIG5lZWQgcmVsZWFzZV90aHJlYWQgZm9yIENQPz8KIC8qIEZyZWUgYWxsIHJlc291cmNlcyBoZWxkIGJ5IGEgdGhyZWFkLiAqLwogI2RlZmluZSByZWxlYXNlX3RocmVhZCh0aHJlYWQpIGRvIHsgfSB3aGlsZSgwKQogCi0vLyBGSVhNRTogZG8gd2UgbmVlZCBwcmVwYXJlX3RvX2NvcHkgKGxhenkgc3RhdHVzKSBmb3IgQ1A/PwogLyogUHJlcGFyZSB0byBjb3B5IHRocmVhZCBzdGF0ZSAtIHVubGF6eSBhbGwgbGF6eSBzdGF0dXMgKi8KLSNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykJZG8geyB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgcHJlcGFyZV90b19jb3B5KHN0cnVjdCB0YXNrX3N0cnVjdCopOwogCi0vKgotICogY3JlYXRlIGEga2VybmVsIHRocmVhZCB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGFza2xpc3RzCi0gKi8KKy8qIENyZWF0ZSBhIGtlcm5lbCB0aHJlYWQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRhc2tsaXN0cyAqLwogZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAogLyogQ29weSBhbmQgcmVsZWFzZSBhbGwgc2VnbWVudCBpbmZvIGFzc29jaWF0ZWQgd2l0aCBhIFZNICovCi0KICNkZWZpbmUgY29weV9zZWdtZW50cyhwLCBtbSkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIHJlbGVhc2Vfc2VnbWVudHMobW0pCWRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSBmb3JnZXRfc2VnbWVudHMoKQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvcHRyYWNlLmgKaW5kZXggNzdmZjAyZC4uNDIyYzczZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wdHJhY2UuaApAQCAtNTMsMzMgKzUzLDMwIEBACiAKIC8qIFJlZ2lzdGVycyB1c2VkIGJ5IHN0cmFjZSAqLwogCi0jZGVmaW5lIFJFR19BX0JBU0UJMHhmYzAwMDAwMAotI2RlZmluZSBSRUdfQVJfQkFTRQkweDA0MDAwMDAwCi0jZGVmaW5lIFJFR19QQwkJMHgxNDAwMDAwMAotI2RlZmluZSBSRUdfUFMJCTB4MDgwMDAwZTYKLSNkZWZpbmUgUkVHX1dCCQkweDA4MDAwMDQ4Ci0jZGVmaW5lIFJFR19XUwkJMHgwODAwMDA0OQotI2RlZmluZSBSRUdfTEJFRwkweDA4MDAwMDAwCi0jZGVmaW5lIFJFR19MRU5ECTB4MDgwMDAwMDEKLSNkZWZpbmUgUkVHX0xDT1VOVAkweDA4MDAwMDAyCi0jZGVmaW5lIFJFR19TQVIJCTB4MDgwMDAwMDMKLSNkZWZpbmUgUkVHX0RFUEMJMHgwODAwMDBjMAotI2RlZmluZQlSRUdfRVhDQ0FVU0UJMHgwODAwMDBlOAotI2RlZmluZSBSRUdfRVhDVkFERFIJMHgwODAwMDBlZQotI2RlZmluZSBTWVNDQUxMX05SCTB4MQorI2RlZmluZSBSRUdfQV9CQVNFCTB4MDAwMAorI2RlZmluZSBSRUdfQVJfQkFTRQkweDAxMDAKKyNkZWZpbmUgUkVHX1BDCQkweDAwMjAKKyNkZWZpbmUgUkVHX1BTCQkweDAyZTYKKyNkZWZpbmUgUkVHX1dCCQkweDAyNDgKKyNkZWZpbmUgUkVHX1dTCQkweDAyNDkKKyNkZWZpbmUgUkVHX0xCRUcJMHgwMjAwCisjZGVmaW5lIFJFR19MRU5ECTB4MDIwMQorI2RlZmluZSBSRUdfTENPVU5UCTB4MDIwMgorI2RlZmluZSBSRUdfU0FSCQkweDAyMDMKIAotI2RlZmluZSBBUl9SRUdOT19UT19BX1JFR05PKGFyLCB3YikgKGFyIC0gd2IqNCkgJiB+KFhDSEFMX05VTV9BUkVHUyAtIDEpCisjZGVmaW5lIFNZU0NBTExfTlIJMHgwMGZmCiAKIC8qIE90aGVyIFBUUkFDRV8gdmFsdWVzIGRlZmluZWQgaW4gPGxpbnV4L3B0cmFjZS5oPiB1c2luZyB2YWx1ZXMgMC05LDE2LDE3LDI0ICovCiAKLSNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgICAgICAgICAgICAxMgotI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKLSNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQotI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTSVpFICAgICAgIDE4CisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKyNkZWZpbmUgUFRSQUNFX0dFVFhUUkVHUwkxOAorI2RlZmluZSBQVFJBQ0VfU0VUWFRSRUdTCTE5CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIC8qCiAgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQogICoga2VybmVsIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsIG9yIG90aGVyIGtlcm5lbCBlbnRyeS4KQEAgLTEwMiw2ICs5OSw5IEBACiAJdW5zaWduZWQgbG9uZyBpY291bnRsZXZlbDsJLyogIDYwICovCiAJaW50IHJlc2VydmVkWzFdOwkJLyogIDY0ICovCiAKKwkvKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYWJsZSByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBieSB0aGUgY29tcGlsZXIuICovCisJeHRyZWdzX29wdF90IHh0cmVnc19vcHQ7CisKIAkvKiBNYWtlIHN1cmUgdGhlIGFyZWcgZmllbGQgaXMgMTYgYnl0ZXMgYWxpZ25lZC4gKi8KIAlpbnQgYWxpZ25bMF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CiAKQEAgLTExMSw4ICsxMTEsNiBAQAogCXVuc2lnbmVkIGxvbmcgYXJlZ1sxNl07CQkvKiAxMjggKDY0KSAqLwogfTsKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2luY2x1ZGUgPGFzbS92YXJpYW50L2NvcmUuaD4KIAogIyBkZWZpbmUgdGFza19wdF9yZWdzKHRzaykgKChzdHJ1Y3QgcHRfcmVncyopIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9yZWdzLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvcmVncy5oCmluZGV4IGM5MTNkMjUuLmQ0YmFlZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3JlZ3MuaApAQCAtMTAwLDcgKzEwMCwxNCBAQAogI2RlZmluZSBFWENDQVVTRV9EVExCX1NJWkVfUkVTVFJJQ1RJT04JCTI3CiAjZGVmaW5lIEVYQ0NBVVNFX0xPQURfQ0FDSEVfQVRUUklCVVRFCQkyOAogI2RlZmluZSBFWENDQVVTRV9TVE9SRV9DQUNIRV9BVFRSSUJVVEUJCTI5Ci0jZGVmaW5lIEVYQ0NBVVNFX0ZMT0FUSU5HX1BPSU5UCQkJNDAKKyNkZWZpbmUgRVhDQ0FVU0VfQ09QUk9DRVNTT1IwX0RJU0FCTEVECQkzMgorI2RlZmluZSBFWENDQVVTRV9DT1BST0NFU1NPUjFfRElTQUJMRUQJCTMzCisjZGVmaW5lIEVYQ0NBVVNFX0NPUFJPQ0VTU09SMl9ESVNBQkxFRAkJMzQKKyNkZWZpbmUgRVhDQ0FVU0VfQ09QUk9DRVNTT1IzX0RJU0FCTEVECQkzNQorI2RlZmluZSBFWENDQVVTRV9DT1BST0NFU1NPUjRfRElTQUJMRUQJCTM2CisjZGVmaW5lIEVYQ0NBVVNFX0NPUFJPQ0VTU09SNV9ESVNBQkxFRAkJMzcKKyNkZWZpbmUgRVhDQ0FVU0VfQ09QUk9DRVNTT1I2X0RJU0FCTEVECQkzOAorI2RlZmluZSBFWENDQVVTRV9DT1BST0NFU1NPUjdfRElTQUJMRUQJCTM5CiAKIC8qICBQUyByZWdpc3RlciBmaWVsZHMuICAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Evc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS14dGVuc2Evc2VtYXBob3JlLmgKaW5kZXggM2UwNDE2Ny4uZDliMjAzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zZW1hcGhvcmUuaApAQCAtMSw5OSArMSBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLXh0ZW5zYS9zZW1hcGhvcmUuaAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDUgVGVuc2lsaWNhIEluYy4KLSAqLwotCi0jaWZuZGVmIF9YVEVOU0FfU0VNQVBIT1JFX0gKLSNkZWZpbmUgX1hURU5TQV9TRU1BUEhPUkVfSAotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQotc3RydWN0IHNlbWFwaG9yZSB7Ci0JYXRvbWljX3QgY291bnQ7Ci0JaW50IHNsZWVwZXJzOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci19OwotCi0jZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsbikJCQkJCVwKLXsJCQkJCQkJCQlcCi0JLmNvdW50CQk9IEFUT01JQ19JTklUKG4pLAkJCQlcCi0JLnNsZWVwZXJzCT0gMCwJCQkJCQlcCi0JLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKG5hbWUpLndhaXQpCVwKLX0KLQotI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgCQkJXAotCXN0cnVjdCBzZW1hcGhvcmUgbmFtZSA9IF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKG5hbWUsY291bnQpCi0KLSNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwpCi17Ci0JYXRvbWljX3NldCgmc2VtLT5jb3VudCwgdmFsKTsKLQlzZW0tPnNsZWVwZXJzID0gMDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXNlbWFfaW5pdChzZW0sIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW1hX2luaXQoc2VtLCAwKTsKLX0KLQotYXNtbGlua2FnZSB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWFzbWxpbmthZ2UgaW50ICBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKLWFzbWxpbmthZ2Ugdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwotCi1leHRlcm4gc3BpbmxvY2tfdCBzZW1hcGhvcmVfd2FrZV9sb2NrOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0KLQlpZiAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgJnNlbS0+Y291bnQpIDwgMCkKLQkJX19kb3duKHNlbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCByZXQgPSAwOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCWlmIChhdG9taWNfc3ViX3JldHVybigxLCAmc2VtLT5jb3VudCkgPCAwKQotCQlyZXQgPSBfX2Rvd25faW50ZXJydXB0aWJsZShzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKGF0b21pY19zdWJfcmV0dXJuKDEsICZzZW0tPmNvdW50KSA8IDApCi0JCXJldCA9IF9fZG93bl90cnlsb2NrKHNlbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIE5vdGUhIFRoaXMgaXMgc3VidGxlLiBXZSBqdW1wIHRvIHdha2UgcGVvcGxlIHVwIG9ubHkgaWYKLSAqIHRoZSBzZW1hcGhvcmUgd2FzIG5lZ2F0aXZlICg9PSBzb21lYm9keSB3YXMgd2FpdGluZyBvbiBpdCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQotewotCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmc2VtLT5jb3VudCkgPD0gMCkKLQkJX191cChzZW0pOwotfQotCi0jZW5kaWYgLyogX1hURU5TQV9TRU1BUEhPUkVfSCAqLworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zaWdjb250ZXh0LmgKaW5kZXggZTMzODFjZS4uMDMzODNhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc2lnY29udGV4dC5oCkBAIC0xMyw5ICsxMyw2IEBACiAKIAogc3RydWN0IHNpZ2NvbnRleHQgewotCXVuc2lnbmVkIGxvbmcJb2xkbWFzazsKLQotCS8qIENQVSByZWdpc3RlcnMgKi8KIAl1bnNpZ25lZCBsb25nIHNjX3BjOwogCXVuc2lnbmVkIGxvbmcgc2NfcHM7CiAJdW5zaWduZWQgbG9uZyBzY19sYmVnOwpAQCAtMjUsNiArMjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2NfYWNjbG87CiAJdW5zaWduZWQgbG9uZyBzY19hY2NoaTsKIAl1bnNpZ25lZCBsb25nIHNjX2FbMTZdOworCXZvaWQgKnNjX3h0cmVnczsKIH07CiAKICNlbmRpZiAvKiBfWFRFTlNBX1NJR0NPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3N0YXQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zdGF0LmgKaW5kZXggMTQ5ZjRiYy4uYzQ5OTIwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3N0YXQuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3RhdC5oCkBAIC01LDI1ICs1LDIzIEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDUgVGVuc2lsaWNhIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDcgVGVuc2lsaWNhIEluYy4KICAqLwogCiAjaWZuZGVmIF9YVEVOU0FfU1RBVF9ICiAjZGVmaW5lIF9YVEVOU0FfU1RBVF9ICiAKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKIAogc3RydWN0IHN0YXQgewogCXVuc2lnbmVkIGxvbmcJc3RfZGV2OwotCWlub190CQlzdF9pbm87Ci0JbW9kZV90CQlzdF9tb2RlOwotCW5saW5rX3QJCXN0X25saW5rOwotCXVpZF90CQlzdF91aWQ7Ci0JZ2lkX3QJCXN0X2dpZDsKLQl1bnNpZ25lZCBpbnQJc3RfcmRldjsKLQlvZmZfdAkJc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXN0X2lubzsKKwl1bnNpZ25lZCBpbnQJc3RfbW9kZTsKKwl1bnNpZ25lZCBpbnQJc3Rfbmxpbms7CisJdW5zaWduZWQgaW50CXN0X3VpZDsKKwl1bnNpZ25lZCBpbnQJc3RfZ2lkOworCXVuc2lnbmVkIGxvbmcJc3RfcmRldjsKKwlsb25nCQlzdF9zaXplOwogCXVuc2lnbmVkIGxvbmcJc3RfYmxrc2l6ZTsKIAl1bnNpZ25lZCBsb25nCXN0X2Jsb2NrczsKIAl1bnNpZ25lZCBsb25nCXN0X2F0aW1lOwpAQCAtMzYsOCArMzQsNiBAQAogCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ1OwogfTsKIAotLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMtMi4zICovCi0KIHN0cnVjdCBzdGF0NjQgIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3RfZGV2OwkvKiBEZXZpY2UgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOwkvKiBGaWxlIHNlcmlhbCBudW1iZXIgKi8KQEAgLTQ3LDIwICs0MywxNCBAQAogCXVuc2lnbmVkIGludCAgc3RfZ2lkOwkJLyogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cC4gKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgc3RfcmRldjsJLyogRGV2aWNlIG51bWJlciwgaWYgZGV2aWNlLiAqLwogCWxvbmcgbG9uZyBzdF9zaXplOwkJLyogU2l6ZSBvZiBmaWxlLCBpbiBieXRlcy4gKi8KLQlsb25nIHN0X2Jsa3NpemU7CQkvKiBPcHRpbWFsIGJsb2NrIHNpemUgZm9yIEkvTy4gKi8KKwl1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CS8qIE9wdGltYWwgYmxvY2sgc2l6ZSBmb3IgSS9PLiAqLwogCXVuc2lnbmVkIGxvbmcgX191bnVzZWQyOwotI2lmZGVmIF9fWFRFTlNBX0VCX18KLQl1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKLQlsb25nIHN0X2Jsb2NrczsJCQkvKiBOdW1iZXIgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZC4gKi8KLSNlbHNlCi0JbG9uZyBzdF9ibG9ja3M7CQkJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCi0JdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7Ci0jZW5kaWYKLQlsb25nIHN0X2F0aW1lOwkJCS8qIFRpbWUgb2YgbGFzdCBhY2Nlc3MuICovCisJdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJdW5zaWduZWQgbG9uZyBzdF9hdGltZTsJCS8qIFRpbWUgb2YgbGFzdCBhY2Nlc3MuICovCiAJdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwotCWxvbmcgc3RfbXRpbWU7CQkJLyogVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gKi8KKwl1bnNpZ25lZCBsb25nIHN0X210aW1lOwkJLyogVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gKi8KIAl1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7Ci0JbG9uZyBzdF9jdGltZTsJCQkvKiBUaW1lIG9mIGxhc3Qgc3RhdHVzIGNoYW5nZS4gKi8KKwl1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwkJLyogVGltZSBvZiBsYXN0IHN0YXR1cyBjaGFuZ2UuICovCiAJdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwogCXVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwogCXVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCmluZGV4IGUwY2I5MTEuLjYyYjFlOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKQEAgLTQ2LDQyICs0Niw2IEBACiAJcmV0dXJuIGZsYWdzICYgMHhmOwogfQogCi0jZGVmaW5lIFJTUl9DUEVOQUJMRSh4KQlkbyB7CQkJCQkJICBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInJzciAlMCwiIF9fc3RyaW5naWZ5KENQRU5BQkxFKSA6ICI9YSIgKHgpKTsgXAotCX0gd2hpbGUoMCk7Ci0jZGVmaW5lIFdTUl9DUEVOQUJMRSh4KQlkbyB7CQkJCQkJICBcCi0gIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3NyICUwLCIgX19zdHJpbmdpZnkoQ1BFTkFCTEUpIjtyc3luYyIgCSAgXAotCSAgICAJCSAgICAgOjogImEiICh4KSk7fSB3aGlsZSgwKTsKLQotI2RlZmluZSBjbGVhcl9jcGVuYWJsZSgpIF9fY2xlYXJfY3BlbmFibGUoKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9jcGVuYWJsZSh2b2lkKQotewotI2lmIFhDSEFMX0hBVkVfQ1AKLQl1bnNpZ25lZCBsb25nIGkgPSAwOwotCVdTUl9DUEVOQUJMRShpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2NvcHJvY2Vzc29yKGludCBpKQotewotI2lmIFhDSEFMX0hBVkVfQ1AKLQlpbnQgY3A7Ci0JUlNSX0NQRU5BQkxFKGNwKTsKLQljcCB8PSAxIDw8IGk7Ci0JV1NSX0NQRU5BQkxFKGNwKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9jb3Byb2Nlc3NvcihpbnQgaSkKLXsKLSNpZiBYQ0hBTF9IQVZFX0NQCi0JaW50IGNwOwotCVJTUl9DUEVOQUJMRShjcCk7Ci0JY3AgJj0gfigxIDw8IGkpOwotCVdTUl9DUEVOQUJMRShjcCk7Ci0jZW5kaWYKLX0KIAogI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBkbyB7IH0gd2hpbGUoMCkKQEAgLTExMSw3ICs3NSw2IEBACiAKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KQkJXAogZG8gewkJCQkJCVwKLQljbGVhcl9jcGVuYWJsZSgpOwkJCVwKIAkobGFzdCkgPSBfc3dpdGNoX3RvKHByZXYsIG5leHQpOwlcCiB9IHdoaWxlKDApCiAKQEAgLTI0NCw3ICsyMDcsNyBAQAogCQkid3NyCWExMywiIF9fc3RyaW5naWZ5KFNBUikgIlxuXHQiCiAJCSJ3c3IJYTE0LCIgX19zdHJpbmdpZnkoUFMpICJcblx0IgogCQk6OiAiYSIgKCZhMCksICJhIiAoJnBzKQotCQk6ICJhMiIsICJhMyIsICJhMTIiLCAiYTEzIiwgImExNCIsICJhMTUiLCAibWVtb3J5Iik7CisJCTogImEyIiwgImEzIiwgImE0IiwgImE3IiwgImExMSIsICJhMTIiLCAiYTEzIiwgImExNCIsICJhMTUiLCAibWVtb3J5Iik7CiB9CiAKICNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmgKaW5kZXggNTJjOTU4Mi4uYTJjNjQwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmgKQEAgLTI3LDYgKzI3LDIxIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpZiBYVEVOU0FfSEFWRV9DT1BST0NFU1NPUlMKKwordHlwZWRlZiBzdHJ1Y3QgeHRyZWdzX2NvcHJvY2Vzc29yIHsKKwl4dHJlZ3NfY3AwX3QgY3AwOworCXh0cmVnc19jcDFfdCBjcDE7CisJeHRyZWdzX2NwMl90IGNwMjsKKwl4dHJlZ3NfY3AzX3QgY3AzOworCXh0cmVnc19jcDRfdCBjcDQ7CisJeHRyZWdzX2NwNV90IGNwNTsKKwl4dHJlZ3NfY3A2X3QgY3A2OworCXh0cmVnc19jcDdfdCBjcDc7Cit9IHh0cmVnc19jb3Byb2Nlc3Nvcl90OworCisjZW5kaWYKKwogc3RydWN0IHRocmVhZF9pbmZvIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiBtYWluIHRhc2sgc3RydWN0dXJlICovCiAJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLwpAQCAtMzgsNyArNTMsMTMgQEAKIAltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlICovCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sgICAgcmVzdGFydF9ibG9jazsKIAorCXVuc2lnbmVkIGxvbmcJCWNwZW5hYmxlOwogCisJLyogQWxsb2NhdGUgc3RvcmFnZSBmb3IgZXh0cmEgdXNlciBzdGF0ZXMgYW5kIGNvcHJvY2Vzc29yIHN0YXRlcy4gKi8KKyNpZiBYVEVOU0FfSEFWRV9DT1BST0NFU1NPUlMKKwl4dHJlZ3NfY29wcm9jZXNzb3JfdAl4dHJlZ3NfY3A7CisjZW5kaWYKKwl4dHJlZ3NfdXNlcl90CQl4dHJlZ3NfdXNlcjsKIH07CiAKICNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS90aW1leC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3RpbWV4LmgKaW5kZXggYTVmY2E1OS4uYjgzYTgxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3RpbWV4LmgKQEAgLTYzLDEwICs2MywxMCBAQAogICogUmVnaXN0ZXIgYWNjZXNzLgogICovCiAKLSNkZWZpbmUgV1NSX0NDT1VOVChyKQkgIF9fYXNtX18oIndzciAlMCwiX19zdHJpbmdpZnkoQ0NPVU5UKSA6OiAiYSIgKHIpKQotI2RlZmluZSBSU1JfQ0NPVU5UKHIpCSAgX19hc21fXygicnNyICUwLCJfX3N0cmluZ2lmeShDQ09VTlQpIDogIj1hIiAocikpCi0jZGVmaW5lIFdTUl9DQ09NUEFSRSh4LHIpIF9fYXNtX18oIndzciAlMCwiX19zdHJpbmdpZnkoQ0NPTVBBUkUpIisiX19zdHJpbmdpZnkoeCkgOjogImEiKHIpKQotI2RlZmluZSBSU1JfQ0NPTVBBUkUoeCxyKSBfX2FzbV9fKCJyc3IgJTAsIl9fc3RyaW5naWZ5KENDT01QQVJFKSIrIl9fc3RyaW5naWZ5KHgpIDogIj1hIihyKSkKKyNkZWZpbmUgV1NSX0NDT1VOVChyKQkgIGFzbSB2b2xhdGlsZSAoIndzciAlMCwiX19zdHJpbmdpZnkoQ0NPVU5UKSA6OiAiYSIgKHIpKQorI2RlZmluZSBSU1JfQ0NPVU5UKHIpCSAgYXNtIHZvbGF0aWxlICgicnNyICUwLCJfX3N0cmluZ2lmeShDQ09VTlQpIDogIj1hIiAocikpCisjZGVmaW5lIFdTUl9DQ09NUEFSRSh4LHIpIGFzbSB2b2xhdGlsZSAoIndzciAlMCwiX19zdHJpbmdpZnkoQ0NPTVBBUkUpIisiX19zdHJpbmdpZnkoeCkgOjogImEiKHIpKQorI2RlZmluZSBSU1JfQ0NPTVBBUkUoeCxyKSBhc20gdm9sYXRpbGUgKCJyc3IgJTAsIl9fc3RyaW5naWZ5KENDT01QQVJFKSIrIl9fc3RyaW5naWZ5KHgpIDogIj1hIihyKSkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9jY291bnQgKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3VhY2Nlc3MuaAppbmRleCBkNjM1MmRhMC4uYjg1Mjg0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdWFjY2Vzcy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qCiAgKiBUaGVzZSBhc3NlbWJseSBtYWNyb3MgbWlycm9yIHRoZSBDIG1hY3JvcyB0aGF0IGZvbGxvdyBiZWxvdy4gIFRoZXkKQEAgLTExOCw3ICsxMTksNyBAQAogICogCTxhdD4JZGVzdHJveWVkIChhY3R1YWxseSwgKFRBU0tfU0laRSArIDEgLSBzaXplKSkKICAqLwogCS5tYWNybwl1c2VyX29rCWFhLCBhcywgYXQsIGVycm9yCi0JbW92aQlcYXQsIChUQVNLX1NJWkUrMSkKKwltb3ZpCVxhdCwgX19YVEVOU0FfVUxfQ09OU1QoVEFTS19TSVpFKQogCWJnZXUJXGFzLCBcYXQsIFxlcnJvcgogCXN1YglcYXQsIFxhdCwgXGFzCiAJYmdldQlcYWEsIFxhdCwgXGVycm9yCkBAIC0yMjYsMjAgKzIyNywyMSBAQAogCV9fcHVfZXJyOwkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsKQkJCVwKLWRvIHsJCQkJCQkJCVwKLQlyZXR2YWwgPSAwOwkJCQkJCVwKLQlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCi0gICAgICAgIGNhc2UgMTogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLDEsInM4aSIpOyAgYnJlYWs7CVwKLSAgICAgICAgY2FzZSAyOiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsMiwiczE2aSIpOyBicmVhazsgICBcCi0gICAgICAgIGNhc2UgNDogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLDQsInMzMmkiKTsgYnJlYWs7ICAgXAotICAgICAgICBjYXNlIDg6IHsJCQkJCQlcCi0JCSAgICAgX190eXBlb2ZfXygqcHRyKSBfX3Y2NCA9IHg7CQlcCi0JCSAgICAgcmV0dmFsID0gX19jb3B5X3RvX3VzZXIocHRyLCZfX3Y2NCw4KTsJXAotCQkgICAgIGJyZWFrOwkJCQkJXAotCSAgICAgICAgfQkJCQkJCVwKLQlkZWZhdWx0OiBfX3B1dF91c2VyX2JhZCgpOwkJCQlcCi0JfQkJCQkJCQlcCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpbnQgX19jYjsJCQkJCQkJXAorCXJldHZhbCA9IDA7CQkJCQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorICAgICAgICBjYXNlIDE6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwxLCJzOGkiLF9fY2IpOyAgYnJlYWs7CVwKKyAgICAgICAgY2FzZSAyOiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsMiwiczE2aSIsX19jYik7IGJyZWFrOwlcCisgICAgICAgIGNhc2UgNDogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLDQsInMzMmkiLF9fY2IpOyBicmVhazsJXAorICAgICAgICBjYXNlIDg6IHsJCQkJCQkJXAorCQkgICAgIF9fdHlwZW9mX18oKnB0cikgX192NjQgPSB4OwkJCVwKKwkJICAgICByZXR2YWwgPSBfX2NvcHlfdG9fdXNlcihwdHIsJl9fdjY0LDgpOwkJXAorCQkgICAgIGJyZWFrOwkJCQkJCVwKKwkgICAgICAgIH0JCQkJCQkJXAorCWRlZmF1bHQ6IF9fcHV0X3VzZXJfYmFkKCk7CQkJCQlcCisJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAogCkBAIC0yNjcsMTQgKzI2OSwxNCBAQAogI2RlZmluZSBfX2NoZWNrX2FsaWduXzEgICIiCiAKICNkZWZpbmUgX19jaGVja19hbGlnbl8yCQkJCVwKLQkiICAgX2JiY2kubCAlMiwgIDAsIDFmCQlcbiIJXAotCSIgICBtb3ZpICAgICUwLCAlMwkJXG4iCVwKKwkiICAgX2JiY2kubCAlMywgIDAsIDFmCQlcbiIJXAorCSIgICBtb3ZpICAgICUwLCAlNAkJXG4iCVwKIAkiICAgX2ogICAgICAyZgkJCVxuIgogCiAjZGVmaW5lIF9fY2hlY2tfYWxpZ25fNAkJCQlcCi0JIiAgIF9iYnNpLmwgJTIsICAwLCAwZgkJXG4iCVwKLQkiICAgX2JiY2kubCAlMiwgIDEsIDFmCQlcbiIJXAotCSIwOiBtb3ZpICAgICUwLCAlMwkJXG4iCVwKKwkiICAgX2Jic2kubCAlMywgIDAsIDBmCQlcbiIJXAorCSIgICBfYmJjaS5sICUzLCAgMSwgMWYJCVxuIglcCisJIjA6IG1vdmkgICAgJTAsICU0CQlcbiIJXAogCSIgICBfaiAgICAgIDJmCQkJXG4iCiAKIApAQCAtMjg2LDI0ICsyODgsMjQgQEAKICAqIFdBUk5JTkc6IElmIHlvdSBtb2RpZnkgdGhpcyBtYWNybyBhdCBhbGwsIHZlcmlmeSB0aGF0IHRoZQogICogX19jaGVja19hbGlnbl8qIG1hY3JvcyBzdGlsbCB3b3JrLgogICovCi0jZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgYWxpZ24sIGluc24pIFwKLSAgIF9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKLQlfX2NoZWNrX2FsaWduXyMjYWxpZ24JCQlcCi0JIjE6ICJpbnNuIiAgJTEsICUyLCAwCQlcbiIJXAotCSIyOgkJCQlcbiIJXAotCSIgICAuc2VjdGlvbiAgLmZpeHVwLFwiYXhcIglcbiIJXAotCSIgICAuYWxpZ24gNAkJCVxuIglcCi0JIjQ6CQkJCVxuIglcCi0JIiAgIC5sb25nICAyYgkJCVxuIglcCi0JIjU6CQkJCVxuIglcCi0JIiAgIGwzMnIgICAlMiwgNGIJCVxuIglcCi0gICAgICAgICIgICBtb3ZpICAgJTAsICUzCQlcbiIJXAotICAgICAgICAiICAganggICAgICUyCQkJXG4iCVwKLQkiICAgLnByZXZpb3VzCQkJXG4iCVwKLQkiICAgLnNlY3Rpb24gIF9fZXhfdGFibGUsXCJhXCIJXG4iCVwKLQkiICAgLmxvbmcJMWIsIDViCQlcbiIJXAotCSIgICAucHJldmlvdXMiCQkJCVwKLQk6Ij1yIiAoZXJyKQkJCQlcCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgYWxpZ24sIGluc24sIGNiKQlcCisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCV9fY2hlY2tfYWxpZ25fIyNhbGlnbgkJCQlcCisJIjE6ICJpbnNuIiAgJTIsICUzLCAwCQlcbiIJCVwKKwkiMjoJCQkJXG4iCQlcCisJIiAgIC5zZWN0aW9uICAuZml4dXAsXCJheFwiCVxuIgkJXAorCSIgICAuYWxpZ24gNAkJCVxuIgkJXAorCSI0OgkJCQlcbiIJCVwKKwkiICAgLmxvbmcgIDJiCQkJXG4iCQlcCisJIjU6CQkJCVxuIgkJXAorCSIgICBsMzJyICAgJTEsIDRiCQlcbiIJCVwKKyAgICAgICAgIiAgIG1vdmkgICAlMCwgJTQJCVxuIgkJXAorICAgICAgICAiICAganggICAgICUxCQkJXG4iCQlcCisJIiAgIC5wcmV2aW91cwkJCVxuIgkJXAorCSIgICAuc2VjdGlvbiAgX19leF90YWJsZSxcImFcIglcbiIJCVwKKwkiICAgLmxvbmcJMWIsIDViCQlcbiIJCVwKKwkiICAgLnByZXZpb3VzIgkJCQkJXAorCToiPXIiIChlcnIpLCAiPXIiIChjYikJCQkJXAogCToiciIgKChpbnQpKHgpKSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpKQogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKQkJCQlcCkBAIC0zMjgsMTEgKzMzMCwxMiBAQAogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCkJCQkJXAogZG8gewkJCQkJCQkJCVwKKwlpbnQgX19jYjsJCQkJCQkJXAogCXJldHZhbCA9IDA7CQkJCQkJCVwKICAgICAgICAgc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKLSAgICAgICAgICBjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwxLCJsOHVpIik7ICBicmVhazsJXAotICAgICAgICAgIGNhc2UgMjogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLDIsImwxNnVpIik7IGJyZWFrOwlcCi0gICAgICAgICAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsNCwibDMyaSIpOyAgYnJlYWs7CVwKKyAgICAgICAgICBjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwxLCJsOHVpIixfX2NiKTsgIGJyZWFrOwlcCisgICAgICAgICAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsMiwibDE2dWkiLF9fY2IpOyBicmVhazsJXAorICAgICAgICAgIGNhc2UgNDogX19nZXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLDQsImwzMmkiLF9fY2IpOyAgYnJlYWs7CVwKICAgICAgICAgICBjYXNlIDg6IHJldHZhbCA9IF9fY29weV9mcm9tX3VzZXIoJngscHRyLDgpOyAgICBicmVhazsJXAogICAgICAgICAgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7CQkJCVwKICAgICAgICAgfQkJCQkJCQkJXApAQCAtMzQzLDI1ICszNDYsMjUgQEAKICAqIFdBUk5JTkc6IElmIHlvdSBtb2RpZnkgdGhpcyBtYWNybyBhdCBhbGwsIHZlcmlmeSB0aGF0IHRoZQogICogX19jaGVja19hbGlnbl8qIG1hY3JvcyBzdGlsbCB3b3JrLgogICovCi0jZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgYWxpZ24sIGluc24pIFwKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBhbGlnbiwgaW5zbiwgY2IpIFwKICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKIAlfX2NoZWNrX2FsaWduXyMjYWxpZ24JCQlcCi0JIjE6ICJpbnNuIiAgJTEsICUyLCAwCQlcbiIJXAorCSIxOiAiaW5zbiIgICUyLCAlMywgMAkJXG4iCVwKIAkiMjoJCQkJXG4iCVwKIAkiICAgLnNlY3Rpb24gIC5maXh1cCxcImF4XCIJXG4iCVwKIAkiICAgLmFsaWduIDQJCQlcbiIJXAogCSI0OgkJCQlcbiIJXAogCSIgICAubG9uZyAgMmIJCQlcbiIJXAogCSI1OgkJCQlcbiIJXAotCSIgICBsMzJyICAgJTIsIDRiCQlcbiIJXAotCSIgICBtb3ZpICAgJTEsIDAJCVxuIglcCi0gICAgICAgICIgICBtb3ZpICAgJTAsICUzCQlcbiIJXAotICAgICAgICAiICAganggICAgICUyCQkJXG4iCVwKKwkiICAgbDMyciAgICUxLCA0YgkJXG4iCVwKKwkiICAgbW92aSAgICUyLCAwCQlcbiIJXAorICAgICAgICAiICAgbW92aSAgICUwLCAlNAkJXG4iCVwKKyAgICAgICAgIiAgIGp4ICAgICAlMQkJCVxuIglcCiAJIiAgIC5wcmV2aW91cwkJCVxuIglcCiAJIiAgIC5zZWN0aW9uICBfX2V4X3RhYmxlLFwiYVwiCVxuIglcCiAJIiAgIC5sb25nCTFiLCA1YgkJXG4iCVwKIAkiICAgLnByZXZpb3VzIgkJCQlcCi0JOiI9ciIgKGVyciksICI9ciIgKHgpCQkJXAorCToiPXIiIChlcnIpLCAiPXIiIChjYiksICI9ciIgKHgpCVwKIAk6InIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpKQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWZzZi90aWUtYXNtLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1mc2YvdGllLWFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTczYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1mc2YvdGllLWFzbS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGFzc2VtYmx5LWxhbmd1YWdlIGRlZmluaXRpb25zIChhc3NlbWJseQorICogbWFjcm9zLCBldGMuKSBmb3IgdGhpcyBzcGVjaWZpYyBYdGVuc2EgcHJvY2Vzc29yJ3MgVElFIGV4dGVuc2lvbnMKKyAqIGFuZCBvcHRpb25zLiAgSXQgaXMgY3VzdG9taXplZCB0byB0aGlzIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwOCBUZW5zaWxpY2EgSW5jLgorICovCisKKyNpZm5kZWYgX1hURU5TQV9DT1JFX1RJRV9BU01fSAorI2RlZmluZSBfWFRFTlNBX0NPUkVfVElFX0FTTV9ICisKKy8qICBTZWxlY3Rpb24gcGFyYW1ldGVyIHZhbHVlcyBmb3Igc2F2ZS1hcmVhIHNhdmUvcmVzdG9yZSBtYWNyb3M6ICAqLworLyogIE9wdGlvbiB2cy4gVElFOiAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX1RJRQkweDAwMDEJLyogY3VzdG9tIGV4dGVuc2lvbiBvciBjb3Byb2Nlc3NvciAqLworI2RlZmluZSBYVEhBTF9TQVNfT1BUCTB4MDAwMgkvKiBvcHRpb25hbCAoYW5kIG5vdCBhIGNvcHJvY2Vzc29yKSAqLworLyogIFdoZXRoZXIgdXNlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbXBpbGVyOiAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX05PQ0MJMHgwMDA0CS8qIG5vdCB1c2VkIGJ5IGNvbXBpbGVyIHcvbyBzcGVjaWFsIG9wdHMvY29kZSAqLworI2RlZmluZSBYVEhBTF9TQVNfQ0MJMHgwMDA4CS8qIHVzZWQgYnkgY29tcGlsZXIgd2l0aG91dCBzcGVjaWFsIG9wdHMvY29kZSAqLworLyogIEFCSSBoYW5kbGluZyBhY3Jvc3MgZnVuY3Rpb24gY2FsbHM6ICAqLworI2RlZmluZSBYVEhBTF9TQVNfQ0FMUgkweDAwMTAJLyogY2FsbGVyLXNhdmVkICovCisjZGVmaW5lIFhUSEFMX1NBU19DQUxFCTB4MDAyMAkvKiBjYWxsZWUtc2F2ZWQgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX0dMT0IJMHgwMDQwCS8qIGdsb2JhbCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgKGluIHRocmVhZCkgKi8KKy8qICBNaXNjICAqLworI2RlZmluZSBYVEhBTF9TQVNfQUxMCTB4RkZGRgkvKiBpbmNsdWRlIGFsbCBkZWZhdWx0IE5DUCBjb250ZW50cyAqLworCisKKworLyogTWFjcm8gdG8gc2F2ZSBhbGwgbm9uLWNvcHJvY2Vzc29yIChleHRyYSkgY3VzdG9tIFRJRSBhbmQgb3B0aW9uYWwgc3RhdGUKKyAqIChub3QgaW5jbHVkaW5nIHplcm8tb3ZlcmhlYWQgbG9vcCByZWdpc3RlcnMpLgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDEgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9OQ1BfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworCS5tYWNybyB4Y2hhbF9uY3Bfc3RvcmUgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQJXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19PUFQgfCBYVEhBTF9TQVNfQ0MgfCBYVEhBTF9TQVNfR0xPQikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDEwMjQtNCwgNCwgNAorCXJ1cglcYXQxLCBUSFJFQURQVFIJCS8vIHRocmVhZHB0ciBvcHRpb24KKwlzMzJpCVxhdDEsIFxwdHIsIC5MeGNoYWxfb2ZzXyArIDAKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNAorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX25jcF9zdG9yZQorCisvKiBNYWNybyB0byBzYXZlIGFsbCBub24tY29wcm9jZXNzb3IgKGV4dHJhKSBjdXN0b20gVElFIGFuZCBvcHRpb25hbCBzdGF0ZQorICogKG5vdCBpbmNsdWRpbmcgemVyby1vdmVyaGVhZCBsb29wIHJlZ2lzdGVycykuCisgKiBTYXZlIGFyZWEgcHRyIChjbG9iYmVyZWQpOiAgcHRyICAoMSBieXRlIGFsaWduZWQpCisgKiBTY3JhdGNoIHJlZ3MgIChjbG9iYmVyZWQpOiAgYXQxLi5hdDQgIChvbmx5IGZpcnN0IFhDSEFMX05DUF9OVU1fQVRNUFMgbmVlZGVkKQorICovCisJLm1hY3JvIHhjaGFsX25jcF9sb2FkICBwdHIgYXQxIGF0MiBhdDMgYXQ0ICBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9WFRIQUxfU0FTX0FMTAorCXhjaGFsX3NhX3N0YXJ0CVxjb250aW51ZSwgXG9mcworCS5pZmVxIChYVEhBTF9TQVNfT1BUIHwgWFRIQUxfU0FTX0NDIHwgWFRIQUxfU0FTX0dMT0IpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAxMDI0LTQsIDQsIDQKKwlsMzJpCVxhdDEsIFxwdHIsIC5MeGNoYWxfb2ZzXyArIDAKKwl3dXIJXGF0MSwgVEhSRUFEUFRSCQkvLyB0aHJlYWRwdHIgb3B0aW9uCisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDQKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9uY3BfbG9hZAorCisKKworI2RlZmluZSBYQ0hBTF9OQ1BfTlVNX0FUTVBTCTEKKworCisjZGVmaW5lIFhDSEFMX1NBX05VTV9BVE1QUwkxCisKKyNlbmRpZiAvKl9YVEVOU0FfQ09SRV9USUVfQVNNX0gqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1mc2YvdGllLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1mc2YvdGllLmgKaW5kZXggYTczYzcxNi4uYmY0MDIwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3ZhcmlhbnQtZnNmL3RpZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWZzZi90aWUuaApAQCAtMSwyMiArMSw3NyBAQAogLyoKLSAqIFh0ZW5zYSBwcm9jZXNzb3IgY29yZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICogVGhpcyBoZWFkZXIgZmlsZSBkZXNjcmliZXMgdGhpcyBzcGVjaWZpYyBYdGVuc2EgcHJvY2Vzc29yJ3MgVElFIGV4dGVuc2lvbnMKKyAqIHRoYXQgZXh0ZW5kIGJhc2ljIFh0ZW5zYSBjb3JlIGZ1bmN0aW9uYWxpdHkuICBJdCBpcyBjdXN0b21pemVkIHRvIHRoaXMKKyAqIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbi4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiBUZW5zaWxpY2EgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgVGVuc2lsaWNhIEluYy4KICAqLwogCi0jaWZuZGVmIFhURU5TQV9USUVfSAotI2RlZmluZSBYVEVOU0FfVElFX0gKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQlDT1BST0NFU1NPUlMgYW5kIEVYVFJBIFNUQVRFCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmbmRlZiBfWFRFTlNBX0NPUkVfVElFX0gKKyNkZWZpbmUgX1hURU5TQV9DT1JFX1RJRV9ICiAKICNkZWZpbmUgWENIQUxfQ1BfTlVNCQkJMAkvKiBudW1iZXIgb2YgY29wcm9jZXNzb3JzICovCi0jZGVmaW5lIFhDSEFMX0NQX01BU0sJCQkweDAwCisjZGVmaW5lIFhDSEFMX0NQX01BWAkJCTAJLyogbWF4IENQIElEICsgMSAoMCBpZiBub25lKSAqLworI2RlZmluZSBYQ0hBTF9DUF9NQVNLCQkJMHgwMAkvKiBiaXRtYXNrIG9mIGFsbCBDUHMgYnkgSUQgKi8KKyNkZWZpbmUgWENIQUxfQ1BfUE9SVF9NQVNLCQkweDAwCS8qIGJpdG1hc2sgb2Ygb25seSBwb3J0IENQcyAqLwogCi0jZW5kaWYgLypYVEVOU0FfQ09ORklHX1RJRV9IKi8KKy8qICBCYXNpYyBwYXJhbWV0ZXJzIG9mIGVhY2ggY29wcm9jZXNzb3I6ICAqLworI2RlZmluZSBYQ0hBTF9DUDdfTkFNRQkJCSJYVElPUCIKKyNkZWZpbmUgWENIQUxfQ1A3X0lERU5UCQkJWFRJT1AKKyNkZWZpbmUgWENIQUxfQ1A3X1NBX1NJWkUJCTAJLyogc2l6ZSBvZiBzdGF0ZSBzYXZlIGFyZWEgKi8KKyNkZWZpbmUgWENIQUxfQ1A3X1NBX0FMSUdOCQkxCS8qIG1pbiBhbGlnbm1lbnQgb2Ygc2F2ZSBhcmVhICovCisjZGVmaW5lIFhDSEFMX0NQX0lEX1hUSU9QCQk3CS8qIGNvcHJvY2Vzc29yIElEICgwLi43KSAqLworCisvKiAgRmlsbGVyIGluZm8gZm9yIHVuYXNzaWduZWQgY29wcm9jZXNzb3JzLCB0byBzaW1wbGlmeSBhcnJheXMgZXRjOiAgKi8KKyNkZWZpbmUgWENIQUxfTkNQX1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfTkNQX1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQMF9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQMF9TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDFfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDFfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQM19TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQM19TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDRfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDRfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQNl9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQNl9TQV9BTElHTgkJMQorCisvKiAgU2F2ZSBhcmVhIGZvciBub24tY29wcm9jZXNzb3Igb3B0aW9uYWwgYW5kIGN1c3RvbSAoVElFKSBzdGF0ZTogICovCisjZGVmaW5lIFhDSEFMX05DUF9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX05DUF9TQV9BTElHTgkJMQorCisvKiAgVG90YWwgc2F2ZSBhcmVhIGZvciBvcHRpb25hbCBhbmQgY3VzdG9tIHN0YXRlIChOQ1AgKyBDUG4pOiAgKi8KKyNkZWZpbmUgWENIQUxfVE9UQUxfU0FfU0laRQkJMAkvKiB3aXRoIDE2LWJ5dGUgYWxpZ24gcGFkZGluZyAqLworI2RlZmluZSBYQ0hBTF9UT1RBTF9TQV9BTElHTgkJMQkvKiBhY3R1YWwgbWluaW11bSBhbGlnbm1lbnQgKi8KKworI2RlZmluZSBYQ0hBTF9OQ1BfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfTkNQX1NBX0xJU1QocykKKyNkZWZpbmUgWENIQUxfQ1AwX1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQMF9TQV9MSVNUKHMpCisjZGVmaW5lIFhDSEFMX0NQMV9TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDFfU0FfTElTVChzKQorI2RlZmluZSBYQ0hBTF9DUDJfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX0xJU1QocykKKyNkZWZpbmUgWENIQUxfQ1AzX1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQM19TQV9MSVNUKHMpCisjZGVmaW5lIFhDSEFMX0NQNF9TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDRfU0FfTElTVChzKQorI2RlZmluZSBYQ0hBTF9DUDVfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX0xJU1QocykKKyNkZWZpbmUgWENIQUxfQ1A2X1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQNl9TQV9MSVNUKHMpCisjZGVmaW5lIFhDSEFMX0NQN19TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDdfU0FfTElTVChzKQorCisvKiBCeXRlIGxlbmd0aCBvZiBpbnN0cnVjdGlvbiBmcm9tIGl0cyBmaXJzdCBuaWJibGUgKG9wMCBmaWVsZCksIHBlciBGTElYLiAgKi8KKyNkZWZpbmUgWENIQUxfT1AwX0ZPUk1BVF9MRU5HVEhTCTMsMywzLDMsMywzLDMsMywyLDIsMiwyLDIsMiwzLDMKKworI2VuZGlmIC8qX1hURU5TQV9DT1JFX1RJRV9IKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vYWVzLmggYi9pbmNsdWRlL2NyeXB0by9hZXMuaAppbmRleCBkNDgwYjc2Li40MDAwOGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9hZXMuaAorKysgYi9pbmNsdWRlL2NyeXB0by9hZXMuaApAQCAtMTQsMTEgKzE0LDEzIEBACiAjZGVmaW5lIEFFU19LRVlTSVpFXzE5MgkJMjQKICNkZWZpbmUgQUVTX0tFWVNJWkVfMjU2CQkzMgogI2RlZmluZSBBRVNfQkxPQ0tfU0laRQkJMTYKKyNkZWZpbmUgQUVTX01BWF9LRVlMRU5HVEgJKDE1ICogMTYpCisjZGVmaW5lIEFFU19NQVhfS0VZTEVOR1RIX1UzMgkoQUVTX01BWF9LRVlMRU5HVEggLyBzaXplb2YodTMyKSkKIAogc3RydWN0IGNyeXB0b19hZXNfY3R4IHsKIAl1MzIga2V5X2xlbmd0aDsKLQl1MzIga2V5X2VuY1s2MF07Ci0JdTMyIGtleV9kZWNbNjBdOworCXUzMiBrZXlfZW5jW0FFU19NQVhfS0VZTEVOR1RIX1UzMl07CisJdTMyIGtleV9kZWNbQUVTX01BWF9LRVlMRU5HVEhfVTMyXTsKIH07CiAKIGV4dGVybiB1MzIgY3J5cHRvX2Z0X3RhYls0XVsyNTZdOwpAQCAtMjgsNCArMzAsNiBAQAogCiBpbnQgY3J5cHRvX2Flc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCiAJCXVuc2lnbmVkIGludCBrZXlfbGVuKTsKK2ludCBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksCisJCXVuc2lnbmVkIGludCBrZXlfbGVuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaCBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmgKaW5kZXggMmJhNDJjZC4uY2NjMzJiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaAorKysgYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9za2NpcGhlci5oCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NrY2lwaGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHN0cnVjdCBydGF0dHI7CkBAIC02NCw2ICs2NSwxMSBAQAogaW50IHNrY2lwaGVyX2dlbml2X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CiB2b2lkIHNrY2lwaGVyX2dlbml2X2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CiAKK2ludCBfX2luaXQgZXNlcWl2X21vZHVsZV9pbml0KHZvaWQpOwordm9pZCBfX2V4aXQgZXNlcWl2X21vZHVsZV9leGl0KHZvaWQpOworaW50IF9faW5pdCBjaGFpbml2X21vZHVsZV9pbml0KHZvaWQpOwordm9pZCBjaGFpbml2X21vZHVsZV9leGl0KHZvaWQpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqc2tjaXBoZXJfZ2VuaXZfY2lwaGVyKAogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqZ2VuaXYpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvcnhycGMtdHlwZS5oIGIvaW5jbHVkZS9rZXlzL3J4cnBjLXR5cGUuaAppbmRleCA0ZWE0MjliLi43NjA5MzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2tleXMvcnhycGMtdHlwZS5oCisrKyBiL2luY2x1ZGUva2V5cy9yeHJwYy10eXBlLmgKQEAgLTIxLDQgKzIxLDQgQEAKIAogZXh0ZXJuIHN0cnVjdCBrZXkgKnJ4cnBjX2dldF9udWxsX2tleShjb25zdCBjaGFyICopOwogCi0jZW5kaWYgLyogX0tFWVNfVVNFUl9UWVBFX0ggKi8KKyNlbmRpZiAvKiBfS0VZU19SWFJQQ19UWVBFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggNWNhZTliNS4uYjNkOWNjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTYxLDYgKzYxLDcgQEAKIGhlYWRlci15ICs9IGVsZi1mZHBpYy5oCiBoZWFkZXIteSArPSBlbGYtZW0uaAogaGVhZGVyLXkgKz0gZmFkdmlzZS5oCitoZWFkZXIteSArPSBmYWxsb2MuaAogaGVhZGVyLXkgKz0gZmQuaAogaGVhZGVyLXkgKz0gZmRyZWcuaAogaGVhZGVyLXkgKz0gZmliX3J1bGVzLmgKQEAgLTcwLDcgKzcxLDYgQEAKIGhlYWRlci15ICs9IGdlbmV0bGluay5oCiBoZWFkZXIteSArPSBnZW5fc3RhdHMuaAogaGVhZGVyLXkgKz0gZ2lnYXNldF9kZXYuaAotaGVhZGVyLXkgKz0gaGRzbWFydC5oCiBoZWFkZXIteSArPSBoeXNkbl9pZi5oCiBoZWFkZXIteSArPSBpMm8tZGV2LmgKIGhlYWRlci15ICs9IGk4ay5oCkBAIC04Niw2ICs4Niw3IEBACiBoZWFkZXIteSArPSBpZl9wcHAuaAogaGVhZGVyLXkgKz0gaWZfc2xpcC5oCiBoZWFkZXIteSArPSBpZl9zdHJpcC5oCitoZWFkZXIteSArPSBpZl90dW4uaAogaGVhZGVyLXkgKz0gaWZfdHVubmVsLmgKIGhlYWRlci15ICs9IGluNi5oCiBoZWFkZXIteSArPSBpbl9yb3V0ZS5oCkBAIC0xMjcsNyArMTI4LDYgQEAKIGhlYWRlci15ICs9IHBvc2l4X3R5cGVzLmgKIGhlYWRlci15ICs9IHBwZGV2LmgKIGhlYWRlci15ICs9IHByY3RsLmgKLWhlYWRlci15ICs9IHBzMmVzZGkuaAogaGVhZGVyLXkgKz0gcW54dHlwZXMuaAogaGVhZGVyLXkgKz0gcXVvdGFpb192MS5oCiBoZWFkZXIteSArPSBxdW90YWlvX3YyLmgKQEAgLTE5Niw3ICsxOTYsNiBAQAogdW5pZmRlZi15ICs9IGV2ZW50cG9sbC5oCiB1bmlmZGVmLXkgKz0gc2lnbmFsZmQuaAogdW5pZmRlZi15ICs9IGV4dDJfZnMuaAotdW5pZmRlZi15ICs9IGV4dDNfZnMuaAogdW5pZmRlZi15ICs9IGZiLmgKIHVuaWZkZWYteSArPSBmY250bC5oCiB1bmlmZGVmLXkgKz0gZmlsdGVyLmgKQEAgLTIwNSwxMiArMjA0LDEyIEBACiB1bmlmZGVmLXkgKz0gZnMuaAogdW5pZmRlZi15ICs9IGdhbWVwb3J0LmgKIHVuaWZkZWYteSArPSBnZW5lcmljX3NlcmlhbC5oCi11bmlmZGVmLXkgKz0gZ2VuaGQuaAogdW5pZmRlZi15ICs9IGdmczJfb25kaXNrLmgKIHVuaWZkZWYteSArPSBoYXllc2VzcC5oCiB1bmlmZGVmLXkgKz0gaGRsY2Rydi5oCiB1bmlmZGVmLXkgKz0gaGRsYy5oCiB1bmlmZGVmLXkgKz0gaGRyZWcuaAordW5pZmRlZi15ICs9IGhkc21hcnQuaAogdW5pZmRlZi15ICs9IGhpZGRldi5oCiB1bmlmZGVmLXkgKz0gaHBldC5oCiB1bmlmZGVmLXkgKz0gaTJjLmgKQEAgLTIzMSw5ICsyMzAsNyBAQAogdW5pZmRlZi15ICs9IGlmX3BwcG9sMnRwLmgKIHVuaWZkZWYteSArPSBpZl9wcHBveC5oCiB1bmlmZGVmLXkgKz0gaWZfdHIuaAotdW5pZmRlZi15ICs9IGlmX3R1bi5oCiB1bmlmZGVmLXkgKz0gaWZfdmxhbi5oCi11bmlmZGVmLXkgKz0gaWZfd2FucGlwZS5oCiB1bmlmZGVmLXkgKz0gaWdtcC5oCiB1bmlmZGVmLXkgKz0gaW5ldF9kaWFnLmgKIHVuaWZkZWYteSArPSBpbi5oCkBAIC0yNDksMTQgKzI0NiwxMyBAQAogdW5pZmRlZi15ICs9IGlzZG5pZi5oCiB1bmlmZGVmLXkgKz0gaXNkbl9kaXZlcnRpZi5oCiB1bmlmZGVmLXkgKz0gaXNkbl9wcHAuaAotdW5pZmRlZi15ICs9IGpiZC5oCiB1bmlmZGVmLXkgKz0gam95c3RpY2suaAogdW5pZmRlZi15ICs9IGtkZXZfdC5oCiB1bmlmZGVmLXkgKz0ga2QuaAogdW5pZmRlZi15ICs9IGtlcm5lbGNhcGkuaAogdW5pZmRlZi15ICs9IGtlcm5lbC5oCiB1bmlmZGVmLXkgKz0ga2V5Ym9hcmQuaAotdW5pZmRlZi0kKENPTkZJR19IQVZFX0tWTSkgKz0ga3ZtLmgKK3VuaWZkZWYteSArPSBrdm0uaAogdW5pZmRlZi15ICs9IGxsYy5oCiB1bmlmZGVmLXkgKz0gbG9vcC5oCiB1bmlmZGVmLXkgKz0gbHAuaApAQCAtMjY0LDYgKzI2MCw3IEBACiB1bmlmZGVmLXkgKz0gbWlpLmgKIHVuaWZkZWYteSArPSBtbWFuLmgKIHVuaWZkZWYteSArPSBtcm91dGUuaAordW5pZmRlZi15ICs9IG1yb3V0ZTYuaAogdW5pZmRlZi15ICs9IG1zZG9zX2ZzLmgKIHVuaWZkZWYteSArPSBtc2cuaAogdW5pZmRlZi15ICs9IG5iZC5oCkBAIC0yOTIsNiArMjg5LDcgQEAKIHVuaWZkZWYteSArPSBwYXRjaGtleS5oCiB1bmlmZGVmLXkgKz0gcGNpLmgKIHVuaWZkZWYteSArPSBwZXJzb25hbGl0eS5oCit1bmlmZGVmLXkgKz0gcGltLmgKIHVuaWZkZWYteSArPSBwa3RjZHZkLmgKIHVuaWZkZWYteSArPSBwbXUuaAogdW5pZmRlZi15ICs9IHBvbGwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZXIuaCBiL2luY2x1ZGUvbGludXgvYWVyLmgKaW5kZXggYmNmMjM2ZC4uZjI1MTgxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Flci5oCkBAIC0xMyw3ICsxMyw2IEBACiBleHRlcm4gaW50IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBpbnQgcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7Ci1leHRlcm4gaW50IHBjaV9jbGVhbnVwX2Flcl9jb3JyZWN0X2Vycm9yX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC0zMSwxMCArMzAsNiBAQAogewogCXJldHVybiAtRUlOVkFMOwogfQotc3RhdGljIGlubGluZSBpbnQgcGNpX2NsZWFudXBfYWVyX2NvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19CiAjZW5kaWYKIAogI2VuZGlmIC8vX0FFUl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9haW8uaCBiL2luY2x1ZGUvbGludXgvYWlvLmgKaW5kZXggYTk5MzFlMi4uMGQwYjdmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Fpby5oCkBAIC0xMDUsNyArMTA1LDYgQEAKIAl3YWl0X3F1ZXVlX3QJCWtpX3dhaXQ7CiAJbG9mZl90CQkJa2lfcG9zOwogCi0JYXRvbWljX3QJCWtpX2Jpb19jb3VudDsJLyogbnVtIGJpbyB1c2VkIGZvciB0aGlzIGlvY2IgKi8KIAl2b2lkCQkJKnByaXZhdGU7CiAJLyogU3RhdGUgdGhhdCB3ZSByZW1lbWJlciB0byBiZSBhYmxlIHRvIHJlc3RhcnQvcmV0cnkgICovCiAJdW5zaWduZWQgc2hvcnQJCWtpX29wY29kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCmluZGV4IGZkZTY3NTguLmExOTE2MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMjgzLDggKzI4Myw4IEBACiAJaW50IG5leHRfYnVmLCBmaXJzdF9mcmVlX2J1ZjsKIAogCS8qIG5ldHdvcmsgInJlY29uZmlndXJhdGlvbiIgaGFuZGxpbmcgKi8KLQl0aW1lX3QgZmlyc3RfcmVjb24sCS8qIHRpbWUgb2YgImZpcnN0IiBSRUNPTiBtZXNzYWdlIHRvIGNvdW50ICovCi0JCWxhc3RfcmVjb247CS8qIHRpbWUgb2YgbW9zdCByZWNlbnQgUkVDT04gKi8KKwl1bnNpZ25lZCBsb25nIGZpcnN0X3JlY29uOyAvKiB0aW1lIG9mICJmaXJzdCIgUkVDT04gbWVzc2FnZSB0byBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9yZWNvbjsgIC8qIHRpbWUgb2YgbW9zdCByZWNlbnQgUkVDT04gKi8KIAlpbnQgbnVtX3JlY29uczsJCS8qIG51bWJlciBvZiBSRUNPTnMgYmV0d2VlbiBmaXJzdCBhbmQgbGFzdC4gKi8KIAlib29sIG5ldHdvcmtfZG93bjsJLyogZG8gd2UgdGhpbmsgdGhlIG5ldHdvcmsgaXMgZG93bj8gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggNzhiYmFjYS4uMWM2MjJlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC02NTksNiArNjU5LDExIEBACiAJcmV0dXJuIChkZXZfaWRbMF0gPj4gOCkgJiAweDFmOwogfQogCitzdGF0aWMgaW5saW5lIGludCBhdGFwaV9pZF9kbWFkaXIoY29uc3QgdTE2ICpkZXZfaWQpCit7CisJcmV0dXJuIGF0YV9pZF9tYWpvcl92ZXJzaW9uKGRldl9pZCkgPj0gNyAmJiAoZGV2X2lkWzYyXSAmIDB4ODAwMCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGlzX211bHRpX3Rhc2tmaWxlKHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQogewogCXJldHVybiAodGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9SRUFEX01VTFRJKSB8fApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGFfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvYXRhX3BsYXRmb3JtLmgKaW5kZXggYjg1NmEyYS4uOWEyNmM4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGFfcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YV9wbGF0Zm9ybS5oCkBAIC0yNyw3ICsyNywxMCBAQAogLyoKICAqIE1hcnZlbGwgU0FUQSBwcml2YXRlIGRhdGEKICAqLworc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbzsKKwogc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbwkqZHJhbTsKIAlpbnQJbl9wb3J0czsgLyogbnVtYmVyIG9mIHNhdGEgcG9ydHMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhbGsuaCBiL2luY2x1ZGUvbGludXgvYXRhbGsuaAppbmRleCBjZWQ4YTFlLi5lOWViYWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0YWxrLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGFsay5oCkBAIC04NSw4ICs4NSw2IEBACiAJcmV0dXJuIChzdHJ1Y3QgYXRhbGtfc29jayAqKXNrOwogfQogCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCiBzdHJ1Y3QgZGRwZWhkciB7CiAJX19iZTE2CWRlaF9sZW5faG9wczsJLyogbG93ZXIgMTAgYml0cyBhcmUgbGVuZ3RoLCBuZXh0IDQgLSBob3BzICovCiAJX19iZTE2CWRlaF9zdW07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWVsX3RjLmggYi9pbmNsdWRlL2xpbnV4L2F0bWVsX3RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiYTY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtZWxfdGMuaApAQCAtMCwwICsxLDI1MiBAQAorLyoKKyAqIFRpbWVyL0NvdW50ZXIgVW5pdCAoVEMpIHJlZ2lzdGVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVRNRUxfVENfSAorI2RlZmluZSBBVE1FTF9UQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyoKKyAqIE1hbnkgMzItYml0IEF0bWVsIFNPQ3MgaW5jbHVkZSBvbmUgb3IgbW9yZSBUQyBibG9ja3MsIGVhY2ggb2Ygd2hpY2ggaG9sZHMKKyAqIHRocmVlIGdlbmVyYWwtcHVycG9zZSAxNi1iaXQgdGltZXJzLiAgVGhlc2UgdGltZXJzIHNoYXJlIG9uZSByZWdpc3RlciBiYW5rLgorICogRGVwZW5kaW5nIG9uIHRoZSBTT0MsIGVhY2ggdGltZXIgbWF5IGhhdmUgaXRzIG93biBjbG9jayBhbmQgSVJRLCBvciB0aG9zZQorICogbWF5IGJlIHNoYXJlZCBieSB0aGUgd2hvbGUgVEMgYmxvY2suCisgKgorICogVGhlc2UgVEMgYmxvY2tzIG1heSBoYXZlIHVwIHRvIG5pbmUgZXh0ZXJuYWwgcGluczogIFRDTEswLi4yIHNpZ25hbHMgZm9yCisgKiBjbG9ja3Mgb3IgY2xvY2sgZ2F0ZXMsIGFuZCBwZXItdGltZXIgVElPQSBhbmQgVElPQiBzaWduYWxzIHVzZWQgZm9yIFBXTQorICogb3IgdHJpZ2dlcmluZy4gIFRob3NlIHBpbnMgbmVlZCB0byBiZSBzZXQgdXAgZm9yIHVzZSB3aXRoIHRoZSBUQyBibG9jaywKKyAqIGVsc2UgdGhleSB3aWxsIGJlIHVzZWQgYXMgR1BJT3Mgb3IgZm9yIGEgZGlmZmVyZW50IGNvbnRyb2xsZXIuCisgKgorICogQWx0aG91Z2ggd2UgZXhwZWN0IGVhY2ggVEMgYmxvY2sgdG8gaGF2ZSBhIHBsYXRmb3JtX2RldmljZSBub2RlLCB0aG9zZQorICogbm9kZXMgYXJlIG5vdCB3aGF0IGRyaXZlcnMgYmluZCB0by4gIEluc3RlYWQsIHRoZXkgYXNrIGZvciBhIHNwZWNpZmljCisgKiBUQyBibG9jaywgYnkgbnVtYmVyIC4uLiB3aGljaCBpcyBhIGNvbW1vbiBhcHByb2FjaCBvbiBzeXN0ZW1zIHdpdGggbWFueQorICogdGltZXJzLiAgVGhlbiB0aGV5IHVzZSBjbGtfZ2V0KCkgYW5kIHBsYXRmb3JtX2dldF9pcnEoKSB0byBnZXQgY2xvY2sgYW5kCisgKiBJUlEgcmVzb3VyY2VzLgorICovCisKK3N0cnVjdCBjbGs7CisKKy8qKgorICogc3RydWN0IGF0bWVsX3RjIC0gaW5mb3JtYXRpb24gYWJvdXQgYSBUaW1lci9Db3VudGVyIEJsb2NrCisgKiBAcGRldjogcGh5c2ljYWwgZGV2aWNlCisgKiBAaW9tZW06IHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgSS9PIHJlZ2lzdGVyCisgKiBAcmVnczogbWFwcGluZyB0aHJvdWdoIHdoaWNoIHRoZSBJL08gcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NlZAorICogQGlycTogaXJxIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBjaGFubmVscworICogQGNsazogaW50ZXJuYWwgY2xvY2sgc291cmNlIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBjaGFubmVscworICogQG5vZGU6IGxpc3Qgbm9kZSwgZm9yIHRjbGliIGludGVybmFsIHVzZQorICoKKyAqIE9uIHNvbWUgcGxhdGZvcm1zLCBlYWNoIFRDIGNoYW5uZWwgaGFzIGl0cyBvd24gY2xvY2tzIGFuZCBJUlFzLAorICogd2hpbGUgb24gb3RoZXJzLCBhbGwgVEMgY2hhbm5lbHMgc2hhcmUgdGhlIHNhbWUgY2xvY2sgYW5kIElSUS4KKyAqIERyaXZlcnMgc2hvdWxkIGNsa19lbmFibGUoKSBhbGwgdGhlIGNsb2NrcyB0aGV5IG5lZWQgZXZlbiB0aG91Z2gKKyAqIGFsbCB0aGUgZW50cmllcyBpbiBAY2xrIG1heSBwb2ludCB0byB0aGUgc2FtZSBwaHlzaWNhbCBjbG9jay4KKyAqIExpa2V3aXNlLCBkcml2ZXJzIHNob3VsZCByZXF1ZXN0IGlycXMgaW5kZXBlbmRlbnRseSBmb3IgZWFjaAorICogY2hhbm5lbCwgYnV0IHRoZXkgbXVzdCB1c2UgSVJRRl9TSEFSRUQgaW4gY2FzZSBzb21lIG9mIHRoZSBlbnRyaWVzCisgKiBpbiBAaXJxIGFyZSBhY3R1YWxseSB0aGUgc2FtZSBJUlEuCisgKi8KK3N0cnVjdCBhdG1lbF90YyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSppb21lbTsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCWludAkJCWlycVszXTsKKwlzdHJ1Y3QgY2xrCQkqY2xrWzNdOworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgYXRtZWxfdGMgKmF0bWVsX3RjX2FsbG9jKHVuc2lnbmVkIGJsb2NrLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGF0bWVsX3RjX2ZyZWUoc3RydWN0IGF0bWVsX3RjICp0Yyk7CisKKy8qIHBsYXRmb3JtLXNwZWNpZmljIEFUTUVMX1RDX1RJTUVSX0NMT0NLeCBkaXZpc29ycyAoMCBtZWFucyAzMktpSHopICovCitleHRlcm4gY29uc3QgdTggYXRtZWxfdGNfZGl2aXNvcnNbNV07CisKKworLyoKKyAqIFR3byByZWdpc3RlcnMgaGF2ZSBibG9jay13aWRlIGNvbnRyb2xzLiAgVGhlc2UgYXJlOiBjb25maWd1cmluZyB0aGUgdGhyZWUKKyAqICJleHRlcm5hbCIgY2xvY2tzIChvciBldmVudCBzb3VyY2VzKSB1c2VkIGJ5IHRoZSB0aW1lciBjaGFubmVsczsgYW5kCisgKiBzeW5jaHJvbml6aW5nIHRoZSB0aW1lcnMgYnkgcmVzZXR0aW5nIHRoZW0gYWxsIGF0IG9uY2UuCisgKgorICogIkV4dGVybmFsIiBjYW4gbWVhbiAiZXh0ZXJuYWwgdG8gY2hpcCIgdXNpbmcgdGhlIFRDTEswLCBUQ0xLMSwgb3IgVENMSzIKKyAqIHNpZ25hbHMuICBPciwgaXQgY2FuIG1lYW4gImV4dGVybmFsIHRvIHRpbWVyIiwgdXNpbmcgdGhlIFRJT0Egb3V0cHV0IGZyb20KKyAqIG9uZSBvZiB0aGUgb3RoZXIgdHdvIHRpbWVycyB0aGF0J3MgYmVpbmcgcnVuIGluIHdhdmVmb3JtIG1vZGUuCisgKi8KKworI2RlZmluZSBBVE1FTF9UQ19CQ1IJMHhjMAkJLyogVEMgQmxvY2sgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgQVRNRUxfVENfU1lOQwkoMSA8PCAwKQkvKiBzeW5jaHJvbml6ZSB0aW1lcnMgKi8KKworI2RlZmluZSBBVE1FTF9UQ19CTVIJMHhjNAkJLyogVEMgQmxvY2sgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgQVRNRUxfVENfVEMwWEMwUwkoMyA8PCAwKQkvKiBleHRlcm5hbCBjbG9jayAwIHNvdXJjZSAqLworI2RlZmluZSAgICAgICAgQVRNRUxfVENfVEMwWEMwU19UQ0xLMAkoMCA8PCAwKQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfVEMwWEMwU19OT05FCSgxIDw8IDApCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19UQzBYQzBTX1RJT0ExCSgyIDw8IDApCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19UQzBYQzBTX1RJT0EyCSgzIDw8IDApCisjZGVmaW5lICAgICBBVE1FTF9UQ19UQzFYQzFTCSgzIDw8IDIpCS8qIGV4dGVybmFsIGNsb2NrIDEgc291cmNlICovCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19UQzFYQzFTX1RDTEsxCSgwIDw8IDIpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19UQzFYQzFTX05PTkUJKDEgPDwgMikKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1RDMVhDMVNfVElPQTAJKDIgPDwgMikKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1RDMVhDMVNfVElPQTIJKDMgPDwgMikKKyNkZWZpbmUgICAgIEFUTUVMX1RDX1RDMlhDMlMJKDMgPDwgNCkJLyogZXh0ZXJuYWwgY2xvY2sgMiBzb3VyY2UgKi8KKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1RDMlhDMlNfVENMSzIJKDAgPDwgNCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1RDMlhDMlNfTk9ORQkoMSA8PCA0KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfVEMyWEMyU19USU9BMAkoMiA8PCA0KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfVEMyWEMyU19USU9BMQkoMyA8PCA0KQorCisKKy8qCisgKiBFYWNoIFRDIGJsb2NrIGhhcyB0aHJlZSAiY2hhbm5lbHMiLCBlYWNoIHdpdGggb25lIGNvdW50ZXIgYW5kIGNvbnRyb2xzLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgc2VtYW50aWNzIG9mIEFUTUVMX1RDX1RJTUVSX0NMT0NLeCAoaW5wdXQgY2xvY2sgc2VsZWN0aW9uCisgKiB3aGVuIGl0J3Mgbm90ICJleHRlcm5hbCIpIGlzIHNpbGljb24tc3BlY2lmaWMuICBBVDkxIHBsYXRmb3JtcyB1c2Ugb25lCisgKiBzZXQgb2YgZGVmaW5pdGlvbnM7IEFWUjMyIHBsYXRmb3JtcyB1c2UgYSBkaWZmZXJlbnQgc2V0LiAgRG9uJ3QgaGFyZC13aXJlCisgKiBzdWNoIGtub3dsZWRnZSBpbnRvIHlvdXIgY29kZSwgdXNlIHRoZSBnbG9iYWwgImF0bWVsX3RjX2Rpdmlzb3JzIiAuLi4KKyAqIHdoZXJlIGluZGV4IE4gaXMgdGhlIGRpdmlzb3IgZm9yIGNsb2NrIE4rMSwgZWxzZSB6ZXJvIHRvIGluZGljYXRlIGl0IHVzZXMKKyAqIHRoZSAzMiBLaUh6IGNsb2NrLgorICoKKyAqIFRoZSB0aW1lcnMgY2FuIGJlIGNoYWluZWQgaW4gdmFyaW91cyB3YXlzLCBhbmQgb3BlcmF0ZWQgaW4gIndhdmVmb3JtIgorICogZ2VuZXJhdGlvbiBtb2RlIChpbmNsdWRpbmcgUFdNKSBvciAiY2FwdHVyZSIgbW9kZSAodG8gdGltZSBldmVudHMpLiAgSW4KKyAqIGJvdGggbW9kZXMsIGJlaGF2aW9yIGNhbiBiZSBjb25maWd1cmVkIGluIG1hbnkgd2F5cy4KKyAqCisgKiBFYWNoIHRpbWVyIGhhcyB0d28gSS9PIHBpbnMsIFRJT0EgYW5kIFRJT0IuICBXYXZlZm9ybSBtb2RlIHVzZXMgVElPQSBhcyBhCisgKiBQV00gb3V0cHV0LCBhbmQgVElPQiBhcyBlaXRoZXIgYW5vdGhlciBQV00gb3IgYXMgYSB0cmlnZ2VyLiAgQ2FwdHVyZSBtb2RlCisgKiB1c2VzIHRoZW0gb25seSBhcyBpbnB1dHMuCisgKi8KKyNkZWZpbmUgQVRNRUxfVENfQ0hBTihpZHgpCSgoaWR4KSoweDQwKQorI2RlZmluZSBBVE1FTF9UQ19SRUcoaWR4LCByZWcpCShBVE1FTF9UQ19DSEFOKGlkeCkgKyBBVE1FTF9UQ18gIyMgcmVnKQorCisjZGVmaW5lIEFUTUVMX1RDX0NDUgkweDAwCQkvKiBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX0NMS0VOCSgxIDw8IDApCS8qIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSAgICAgQVRNRUxfVENfQ0xLRElTCSgxIDw8IDEpCS8qIGNsb2NrIGRpc2FibGUgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX1NXVFJHCSgxIDw8IDIpCS8qIHNvZnR3YXJlIHRyaWdnZXIgKi8KKworI2RlZmluZSBBVE1FTF9UQ19DTVIJMHgwNAkJLyogQ2hhbm5lbCBNb2RlIFJlZ2lzdGVyICovCisKKy8qIEJvdGggbW9kZXMgc2hhcmUgc29tZSBDTVIgYml0cyAqLworI2RlZmluZSAgICAgQVRNRUxfVENfVENDTEtTCSg3IDw8IDApCS8qIGNsb2NrIHNvdXJjZSAqLworI2RlZmluZSAgICAgICAgQVRNRUxfVENfVElNRVJfQ0xPQ0sxCSgwIDw8IDApCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19USU1FUl9DTE9DSzIJKDEgPDwgMCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1RJTUVSX0NMT0NLMwkoMiA8PCAwKQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfVElNRVJfQ0xPQ0s0CSgzIDw8IDApCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19USU1FUl9DTE9DSzUJKDQgPDwgMCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1hDMAkJKDUgPDwgMCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1hDMQkJKDYgPDwgMCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1hDMgkJKDcgPDwgMCkKKyNkZWZpbmUgICAgIEFUTUVMX1RDX0NMS0kJKDEgPDwgMykJLyogY2xvY2sgaW52ZXJ0ICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19CVVJTVAkoMyA8PCA0KQkvKiBjbG9jayBnYXRpbmcgKi8KKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0dBVEVfTk9ORQkoMCA8PCA0KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfR0FURV9YQzAJKDEgPDwgNCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0dBVEVfWEMxCSgyIDw8IDQpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19HQVRFX1hDMgkoMyA8PCA0KQorI2RlZmluZSAgICAgQVRNRUxfVENfV0FWRQkoMSA8PCAxNSkJLyogdHJ1ZSA9IFdhdmVmb3JtIG1vZGUgKi8KKworLyogQ0FQVFVSRSBtb2RlIENNUiBiaXRzICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19MREJTVE9QCSgxIDw8IDYpCS8qIGNvdW50ZXIgc3RvcHMgb24gUkIgbG9hZCAqLworI2RlZmluZSAgICAgQVRNRUxfVENfTERCRElTCSgxIDw8IDcpCS8qIGNvdW50ZXIgZGlzYWJsZSBvbiBSQiBsb2FkICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19FVFJHRURHCSgzIDw8IDgpCS8qIGV4dGVybmFsIHRyaWdnZXIgZWRnZSAqLworI2RlZmluZSAgICAgICAgQVRNRUxfVENfRVRSR0VER19OT05FCSgwIDw8IDgpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19FVFJHRURHX1JJU0lORwkoMSA8PCA4KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfRVRSR0VER19GQUxMSU5HCSgyIDw8IDgpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19FVFJHRURHX0JPVEgJKDMgPDwgOCkKKyNkZWZpbmUgICAgIEFUTUVMX1RDX0FCRVRSRwkoMSA8PCAxMCkJLyogZXh0ZXJuYWwgdHJpZ2dlciBpcyBUSU9BPyAqLworI2RlZmluZSAgICAgQVRNRUxfVENfQ1BDVFJHCSgxIDw8IDE0KQkvKiBSQyBjb21wYXJlIHRyaWdnZXIgZW5hYmxlICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19MRFJBCSgzIDw8IDE2KQkvKiBSQSBsb2FkaW5nIGVkZ2UgKG9mIFRJT0EpICovCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19MRFJBX05PTkUJKDAgPDwgMTYpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19MRFJBX1JJU0lORwkoMSA8PCAxNikKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0xEUkFfRkFMTElORwkoMiA8PCAxNikKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0xEUkFfQk9USAkoMyA8PCAxNikKKyNkZWZpbmUgICAgIEFUTUVMX1RDX0xEUkIJKDMgPDwgMTgpCS8qIFJCIGxvYWRpbmcgZWRnZSAob2YgVElPQSkgKi8KKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0xEUkJfTk9ORQkoMCA8PCAxOCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0xEUkJfUklTSU5HCSgxIDw8IDE4KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfTERSQl9GQUxMSU5HCSgyIDw8IDE4KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfTERSQl9CT1RICSgzIDw8IDE4KQorCisvKiBXQVZFRk9STSBtb2RlIENNUiBiaXRzICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19DUENTVE9QCSgxIDw8ICA2KQkvKiBSQyBjb21wYXJlIHN0b3BzIGNvdW50ZXIgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX0NQQ0RJUwkoMSA8PCAgNykJLyogUkMgY29tcGFyZSBkaXNhYmxlcyBjb3VudGVyICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19FRVZURURHCSgzIDw8ICA4KQkvKiBleHRlcm5hbCBldmVudCBlZGdlICovCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19FRVZURURHX05PTkUJKDAgPDwgOCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0VFVlRFREdfUklTSU5HCSgxIDw8IDgpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19FRVZURURHX0ZBTExJTkcJKDIgPDwgOCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0VFVlRFREdfQk9USAkoMyA8PCA4KQorI2RlZmluZSAgICAgQVRNRUxfVENfRUVWVAkoMyA8PCAxMCkJLyogZXh0ZXJuYWwgZXZlbnQgc291cmNlICovCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19FRVZUX1RJT0IJKDAgPDwgMTApCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19FRVZUX1hDMAkoMSA8PCAxMCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0VFVlRfWEMxCSgyIDw8IDEwKQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfRUVWVF9YQzIJKDMgPDwgMTApCisjZGVmaW5lICAgICBBVE1FTF9UQ19FTkVUUkcJKDEgPDwgMTIpCS8qIGV4dGVybmFsIGV2ZW50IGlzIHRyaWdnZXIgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX1dBVkVTRUwJKDMgPDwgMTMpCS8qIHdhdmVmb3JtIHR5cGUgKi8KKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1dBVkVTRUxfVVAJKDAgPDwgMTMpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19XQVZFU0VMX1VQRE9XTgkoMSA8PCAxMykKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1dBVkVTRUxfVVBfQVVUTwkoMiA8PCAxMykKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX1dBVkVTRUxfVVBET1dOX0FVVE8gKDMgPDwgMTMpCisjZGVmaW5lICAgICBBVE1FTF9UQ19BQ1BBCSgzIDw8IDE2KQkvKiBSQSBjb21wYXJlIGNoYW5nZXMgVElPQSAqLworI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUNQQV9OT05FCSgwIDw8IDE2KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUNQQV9TRVQJKDEgPDwgMTYpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19BQ1BBX0NMRUFSCSgyIDw8IDE2KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUNQQV9UT0dHTEUJKDMgPDwgMTYpCisjZGVmaW5lICAgICBBVE1FTF9UQ19BQ1BDCSgzIDw8IDE4KQkvKiBSQyBjb21wYXJlIGNoYW5nZXMgVElPQSAqLworI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUNQQ19OT05FCSgwIDw8IDE4KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUNQQ19TRVQJKDEgPDwgMTgpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19BQ1BDX0NMRUFSCSgyIDw8IDE4KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUNQQ19UT0dHTEUJKDMgPDwgMTgpCisjZGVmaW5lICAgICBBVE1FTF9UQ19BRUVWVAkoMyA8PCAyMCkJLyogZXh0ZXJuYWwgZXZlbnQgY2hhbmdlcyBUSU9BICovCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19BRUVWVF9OT05FCSgwIDw8IDIwKQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUVFVlRfU0VUCSgxIDw8IDIwKQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQUVFVlRfQ0xFQVIJKDIgPDwgMjApCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19BRUVWVF9UT0dHTEUJKDMgPDwgMjApCisjZGVmaW5lICAgICBBVE1FTF9UQ19BU1dUUkcJKDMgPDwgMjIpCS8qIHNvZnR3YXJlIHRyaWdnZXIgY2hhbmdlcyBUSU9BICovCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19BU1dUUkdfTk9ORQkoMCA8PCAyMikKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0FTV1RSR19TRVQJKDEgPDwgMjIpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19BU1dUUkdfQ0xFQVIJKDIgPDwgMjIpCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19BU1dUUkdfVE9HR0xFCSgzIDw8IDIyKQorI2RlZmluZSAgICAgQVRNRUxfVENfQkNQQgkoMyA8PCAyNCkJLyogUkIgY29tcGFyZSBjaGFuZ2VzIFRJT0IgKi8KKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JDUEJfTk9ORQkoMCA8PCAyNCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JDUEJfU0VUCSgxIDw8IDI0KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQkNQQl9DTEVBUgkoMiA8PCAyNCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JDUEJfVE9HR0xFCSgzIDw8IDI0KQorI2RlZmluZSAgICAgQVRNRUxfVENfQkNQQwkoMyA8PCAyNikJLyogUkMgY29tcGFyZSBjaGFuZ2VzIFRJT0IgKi8KKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JDUENfTk9ORQkoMCA8PCAyNikKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JDUENfU0VUCSgxIDw8IDI2KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQkNQQ19DTEVBUgkoMiA8PCAyNikKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JDUENfVE9HR0xFCSgzIDw8IDI2KQorI2RlZmluZSAgICAgQVRNRUxfVENfQkVFVlQJKDMgPDwgMjgpCS8qIGV4dGVybmFsIGV2ZW50IGNoYW5nZXMgVElPQiAqLworI2RlZmluZSAgICAgICAgQVRNRUxfVENfQkVFVlRfTk9ORQkoMCA8PCAyOCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JFRVZUX1NFVAkoMSA8PCAyOCkKKyNkZWZpbmUgICAgICAgIEFUTUVMX1RDX0JFRVZUX0NMRUFSCSgyIDw8IDI4KQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQkVFVlRfVE9HR0xFCSgzIDw8IDI4KQorI2RlZmluZSAgICAgQVRNRUxfVENfQlNXVFJHCSgzIDw8IDMwKQkvKiBzb2Z0d2FyZSB0cmlnZ2VyIGNoYW5nZXMgVElPQiAqLworI2RlZmluZSAgICAgICAgQVRNRUxfVENfQlNXVFJHX05PTkUJKDAgPDwgMzApCisjZGVmaW5lICAgICAgICBBVE1FTF9UQ19CU1dUUkdfU0VUCSgxIDw8IDMwKQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQlNXVFJHX0NMRUFSCSgyIDw8IDMwKQorI2RlZmluZSAgICAgICAgQVRNRUxfVENfQlNXVFJHX1RPR0dMRQkoMyA8PCAzMCkKKworI2RlZmluZSBBVE1FTF9UQ19DVgkweDEwCQkvKiBjb3VudGVyIFZhbHVlICovCisjZGVmaW5lIEFUTUVMX1RDX1JBCTB4MTQJCS8qIHJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgQVRNRUxfVENfUkIJMHgxOAkJLyogcmVnaXN0ZXIgQiAqLworI2RlZmluZSBBVE1FTF9UQ19SQwkweDFjCQkvKiByZWdpc3RlciBDICovCisKKyNkZWZpbmUgQVRNRUxfVENfU1IJMHgyMAkJLyogc3RhdHVzIChyZWFkLW9ubHkpICovCisvKiBTdGF0dXMtb25seSBmbGFncyAqLworI2RlZmluZSAgICAgQVRNRUxfVENfQ0xLU1RBCSgxIDw8IDE2KQkvKiBjbG9jayBlbmFibGVkICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19NVElPQQkoMSA8PCAxNykJLyogVElPQSBtaXJyb3IgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX01USU9CCSgxIDw8IDE4KQkvKiBUSU9CIG1pcnJvciAqLworCisjZGVmaW5lIEFUTUVMX1RDX0lFUgkweDI0CQkvKiBpbnRlcnJ1cHQgZW5hYmxlICh3cml0ZS1vbmx5KSAqLworI2RlZmluZSBBVE1FTF9UQ19JRFIJMHgyOAkJLyogaW50ZXJydXB0IGRpc2FibGUgKHdyaXRlLW9ubHkpICovCisjZGVmaW5lIEFUTUVMX1RDX0lNUgkweDJjCQkvKiBpbnRlcnJ1cHQgbWFzayAocmVhZC1vbmx5KSAqLworCisvKiBTdGF0dXMgYW5kIElSUSBmbGFncyAqLworI2RlZmluZSAgICAgQVRNRUxfVENfQ09WRlMJKDEgPDwgIDApCS8qIGNvdW50ZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX0xPVlJTCSgxIDw8ICAxKQkvKiBsb2FkIG92ZXJydW4gKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX0NQQVMJKDEgPDwgIDIpCS8qIFJBIGNvbXBhcmUgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX0NQQlMJKDEgPDwgIDMpCS8qIFJCIGNvbXBhcmUgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX0NQQ1MJKDEgPDwgIDQpCS8qIFJDIGNvbXBhcmUgKi8KKyNkZWZpbmUgICAgIEFUTUVMX1RDX0xEUkFTCSgxIDw8ICA1KQkvKiBSQSBsb2FkaW5nICovCisjZGVmaW5lICAgICBBVE1FTF9UQ19MRFJCUwkoMSA8PCAgNikJLyogUkIgbG9hZGluZyAqLworI2RlZmluZSAgICAgQVRNRUxfVENfRVRSR1MJKDEgPDwgIDcpCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaCBiL2luY2x1ZGUvbGludXgvYXR0cmlidXRlX2NvbnRhaW5lci5oCmluZGV4IGY1NTgyMzMuLjc5NGFkNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXR0cmlidXRlX2NvbnRhaW5lci5oCisrKyBiL2luY2x1ZGUvbGludXgvYXR0cmlidXRlX2NvbnRhaW5lci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGNsYXNzX2NvbnRhaW5lci5oIC0gYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYWxsIGNsYXNzZXMKKyAqIGF0dHJpYnV0ZV9jb250YWluZXIuaCAtIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFsbCBjbGFzc2VzCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA1IC0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAc3RlZWxleWUuY29tPgogICoKQEAgLTE4LDcgKzE4LDcgQEAKIAlzdHJ1Y3Qga2xpc3QJCWNvbnRhaW5lcnM7CiAJc3RydWN0IGNsYXNzCQkqY2xhc3M7CiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqZ3JwOwotCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICoqYXR0cnM7CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiphdHRyczsKIAlpbnQgKCptYXRjaCkoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqKTsKICNkZWZpbmUJQVRUUklCVVRFX0NPTlRBSU5FUl9OT19DTEFTU0RFVlMJMHgwMQogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMzcsMzUgKzM3LDM1IEBACiB9CiAKIGludCBhdHRyaWJ1dGVfY29udGFpbmVyX3JlZ2lzdGVyKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250KTsKLWludCBhdHRyaWJ1dGVfY29udGFpbmVyX3VucmVnaXN0ZXIoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQpOworaW50IF9fbXVzdF9jaGVjayBhdHRyaWJ1dGVfY29udGFpbmVyX3VucmVnaXN0ZXIoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQpOwogdm9pZCBhdHRyaWJ1dGVfY29udGFpbmVyX2NyZWF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgICBpbnQgKCpmbikoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwKIAkJCQkJCSBzdHJ1Y3QgZGV2aWNlICosCi0JCQkJCQkgc3RydWN0IGNsYXNzX2RldmljZSAqKSk7CisJCQkJCQkgc3RydWN0IGRldmljZSAqKSk7CiB2b2lkIGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIGludCAoKmZuKShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqLAogCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICosCi0JCQkJCSAgICAgIHN0cnVjdCBjbGFzc19kZXZpY2UgKikpOworCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICopKTsKIHZvaWQgYXR0cmlidXRlX2NvbnRhaW5lcl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdm9pZCAoKmZuKShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqLAogCQkJCQkJICBzdHJ1Y3QgZGV2aWNlICosCi0JCQkJCQkgIHN0cnVjdCBjbGFzc19kZXZpY2UgKikpOworCQkJCQkJICBzdHJ1Y3QgZGV2aWNlICopKTsKIHZvaWQgYXR0cmlidXRlX2NvbnRhaW5lcl9kZXZpY2VfdHJpZ2dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIAogCQkJCQlpbnQgKCpmbikoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwKIAkJCQkJCSAgc3RydWN0IGRldmljZSAqLAotCQkJCQkJICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopKTsKKwkJCQkJCSAgc3RydWN0IGRldmljZSAqKSk7CiB2b2lkIGF0dHJpYnV0ZV9jb250YWluZXJfdHJpZ2dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIAogCQkJCSBpbnQgKCpmbikoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwKIAkJCQkJICAgc3RydWN0IGRldmljZSAqKSk7Ci1pbnQgYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfYXR0cnMoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOwotaW50IGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2NsYXNzX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2Rldik7CitpbnQgYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfYXR0cnMoc3RydWN0IGRldmljZSAqY2xhc3NkZXYpOworaW50IGF0dHJpYnV0ZV9jb250YWluZXJfYWRkX2NsYXNzX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbGFzc2Rldik7CiBpbnQgYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlX2FkYXB0ZXIoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmNvbnQsCiAJCQkJCQkgc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KTsKLXZvaWQgYXR0cmlidXRlX2NvbnRhaW5lcl9yZW1vdmVfYXR0cnMoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOwotdm9pZCBhdHRyaWJ1dGVfY29udGFpbmVyX2NsYXNzX2RldmljZV9kZWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOwotc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fY29udGFpbmVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKik7Ci1zdHJ1Y3QgY2xhc3NfZGV2aWNlICphdHRyaWJ1dGVfY29udGFpbmVyX2ZpbmRfY2xhc3NfZGV2aWNlKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKik7Ci1zdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqKmF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fYXR0cnMoY29uc3Qgc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOworCQkJCQkJIHN0cnVjdCBkZXZpY2UgKmNsYXNzZGV2KTsKK3ZvaWQgYXR0cmlidXRlX2NvbnRhaW5lcl9yZW1vdmVfYXR0cnMoc3RydWN0IGRldmljZSAqY2xhc3NkZXYpOwordm9pZCBhdHRyaWJ1dGVfY29udGFpbmVyX2NsYXNzX2RldmljZV9kZWwoc3RydWN0IGRldmljZSAqY2xhc3NkZXYpOworc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fY29udGFpbmVyKHN0cnVjdCBkZXZpY2UgKik7CitzdHJ1Y3QgZGV2aWNlICphdHRyaWJ1dGVfY29udGFpbmVyX2ZpbmRfY2xhc3NfZGV2aWNlKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKik7CitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKmF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fYXR0cnMoY29uc3Qgc3RydWN0IGRldmljZSAqY2xhc3NkZXYpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCAyYWY5ZWMwLi40Y2NiMDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0zNTMsNiArMzUzLDMzIEBACiBzdHJ1Y3QgbGludXhfYmlucHJtOwogc3RydWN0IG1xX2F0dHI7CiBzdHJ1Y3QgbXFzdGF0Oworc3RydWN0IGF1ZGl0X3dhdGNoOworc3RydWN0IGF1ZGl0X3RyZWU7CisKK3N0cnVjdCBhdWRpdF9rcnVsZSB7CisJaW50CQkJdmVyc19vcHM7CisJdTMyCQkJZmxhZ3M7CisJdTMyCQkJbGlzdG5yOworCXUzMgkJCWFjdGlvbjsKKwl1MzIJCQltYXNrW0FVRElUX0JJVE1BU0tfU0laRV07CisJdTMyCQkJYnVmbGVuOyAvKiBmb3IgZGF0YSBhbGxvYyBvbiBsaXN0IHJ1bGVzICovCisJdTMyCQkJZmllbGRfY291bnQ7CisJY2hhcgkJCSpmaWx0ZXJrZXk7IC8qIHRpZXMgZXZlbnRzIHRvIHJ1bGVzICovCisJc3RydWN0IGF1ZGl0X2ZpZWxkCSpmaWVsZHM7CisJc3RydWN0IGF1ZGl0X2ZpZWxkCSphcmNoX2Y7IC8qIHF1aWNrIGFjY2VzcyB0byBhcmNoIGZpZWxkICovCisJc3RydWN0IGF1ZGl0X2ZpZWxkCSppbm9kZV9mOyAvKiBxdWljayBhY2Nlc3MgdG8gYW4gaW5vZGUgZmllbGQgKi8KKwlzdHJ1Y3QgYXVkaXRfd2F0Y2gJKndhdGNoOwkvKiBhc3NvY2lhdGVkIHdhdGNoICovCisJc3RydWN0IGF1ZGl0X3RyZWUJKnRyZWU7CS8qIGFzc29jaWF0ZWQgd2F0Y2hlZCB0cmVlICovCisJc3RydWN0IGxpc3RfaGVhZAlybGlzdDsJLyogZW50cnkgaW4gYXVkaXRfe3dhdGNoLHRyZWV9LnJ1bGVzIGxpc3QgKi8KK307CisKK3N0cnVjdCBhdWRpdF9maWVsZCB7CisJdTMyCQkJCXR5cGU7CisJdTMyCQkJCXZhbDsKKwl1MzIJCQkJb3A7CisJY2hhcgkJCQkqbHNtX3N0cjsKKwl2b2lkCQkJCSpsc21fcnVsZTsKK307CiAKICNkZWZpbmUgQVVESVRTQ19JTlZBTElEIDAKICNkZWZpbmUgQVVESVRTQ19TVUNDRVNTIDEKQEAgLTUzNiw2ICs1NjMsOCBAQAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19sb3N0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIGludAkJICAgIGF1ZGl0X3VwZGF0ZV9sc21fcnVsZXModm9pZCk7CisKIAkJCQkvKiBQcml2YXRlIEFQSSAoZm9yIGF1ZGl0LmMgb25seSkgKi8KIGV4dGVybiBpbnQgYXVkaXRfZmlsdGVyX3VzZXIoc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpjYiwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBhdWRpdF9maWx0ZXJfdHlwZShpbnQgdHlwZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCA0ZGE0NDEzLi5kMjU5NjkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTMyNiw4ICszMjYsOSBAQAogCQkJCWdmcF90KTsKIGV4dGVybiB2b2lkIGJpb19zZXRfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTsKIGV4dGVybiB2b2lkIGJpb19jaGVja19wYWdlc19kaXJ0eShzdHJ1Y3QgYmlvICpiaW8pOwotZXh0ZXJuIHZvaWQgYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvKTsKIGV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fY29weV91c2VyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgYmlvICpiaW9fY29weV91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3Qgc2dfaW92ZWMgKiwKKwkJCQkgICAgIGludCwgaW50KTsKIGV4dGVybiBpbnQgYmlvX3VuY29weV91c2VyKHN0cnVjdCBiaW8gKik7CiB2b2lkIHplcm9fZmlsbF9iaW8oc3RydWN0IGJpbyAqYmlvKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaCBiL2luY2x1ZGUvbGludXgvYml0bWFwLmgKaW5kZXggYWNhZDExMC4uMWRiZTA3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC0xMDgsNiArMTA4LDcgQEAKIAogZXh0ZXJuIGludCBiaXRtYXBfc2NucHJpbnRmKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IG5iaXRzKTsKK2V4dGVybiBpbnQgYml0bWFwX3NjbnByaW50Zl9sZW4odW5zaWduZWQgaW50IGxlbik7CiBleHRlcm4gaW50IF9fYml0bWFwX3BhcnNlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IGlzX3VzZXIsCiAJCQl1bnNpZ25lZCBsb25nICpkc3QsIGludCBuYml0cyk7CiBleHRlcm4gaW50IGJpdG1hcF9wYXJzZV91c2VyKGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCB1bnNpZ25lZCBpbnQgdWxlbiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0b3BzLmggYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCmluZGV4IDY5YzFlZGIuLjQwZDU0NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtNjUsNiArNjUsNDYgQEAKIAlyZXR1cm4gKHdvcmQgPj4gc2hpZnQpIHwgKHdvcmQgPDwgKDMyIC0gc2hpZnQpKTsKIH0KIAorLyoqCisgKiByb2wxNiAtIHJvdGF0ZSBhIDE2LWJpdCB2YWx1ZSBsZWZ0CisgKiBAd29yZDogdmFsdWUgdG8gcm90YXRlCisgKiBAc2hpZnQ6IGJpdHMgdG8gcm9sbAorICovCitzdGF0aWMgaW5saW5lIF9fdTE2IHJvbDE2KF9fdTE2IHdvcmQsIHVuc2lnbmVkIGludCBzaGlmdCkKK3sKKwlyZXR1cm4gKHdvcmQgPDwgc2hpZnQpIHwgKHdvcmQgPj4gKDE2IC0gc2hpZnQpKTsKK30KKworLyoqCisgKiByb3IxNiAtIHJvdGF0ZSBhIDE2LWJpdCB2YWx1ZSByaWdodAorICogQHdvcmQ6IHZhbHVlIHRvIHJvdGF0ZQorICogQHNoaWZ0OiBiaXRzIHRvIHJvbGwKKyAqLworc3RhdGljIGlubGluZSBfX3UxNiByb3IxNihfX3UxNiB3b3JkLCB1bnNpZ25lZCBpbnQgc2hpZnQpCit7CisJcmV0dXJuICh3b3JkID4+IHNoaWZ0KSB8ICh3b3JkIDw8ICgxNiAtIHNoaWZ0KSk7Cit9CisKKy8qKgorICogcm9sOCAtIHJvdGF0ZSBhbiA4LWJpdCB2YWx1ZSBsZWZ0CisgKiBAd29yZDogdmFsdWUgdG8gcm90YXRlCisgKiBAc2hpZnQ6IGJpdHMgdG8gcm9sbAorICovCitzdGF0aWMgaW5saW5lIF9fdTggcm9sOChfX3U4IHdvcmQsIHVuc2lnbmVkIGludCBzaGlmdCkKK3sKKwlyZXR1cm4gKHdvcmQgPDwgc2hpZnQpIHwgKHdvcmQgPj4gKDggLSBzaGlmdCkpOworfQorCisvKioKKyAqIHJvcjggLSByb3RhdGUgYW4gOC1iaXQgdmFsdWUgcmlnaHQKKyAqIEB3b3JkOiB2YWx1ZSB0byByb3RhdGUKKyAqIEBzaGlmdDogYml0cyB0byByb2xsCisgKi8KK3N0YXRpYyBpbmxpbmUgX191OCByb3I4KF9fdTggd29yZCwgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVybiAod29yZCA+PiBzaGlmdCkgfCAod29yZCA8PCAoOCAtIHNoaWZ0KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmxzX2xvbmcodW5zaWduZWQgbG9uZyBsKQogewogCWlmIChzaXplb2YobCkgPT0gNCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGUxODg4Y2MuLmM1MDY1ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMTEyLDYgKzExMiw3IEBACiAJX19SRVFfUldfU1lOQywJCS8qIHJlcXVlc3QgaXMgc3luYyAoT19ESVJFQ1QpICovCiAJX19SRVFfQUxMT0NFRCwJCS8qIHJlcXVlc3QgY2FtZSBmcm9tIG91ciBhbGxvYyBwb29sICovCiAJX19SRVFfUldfTUVUQSwJCS8qIG1ldGFkYXRhIGlvIHJlcXVlc3QgKi8KKwlfX1JFUV9DT1BZX1VTRVIsCS8qIGNvbnRhaW5zIGNvcGllcyBvZiB1c2VyIHBhZ2VzICovCiAJX19SRVFfTlJfQklUUywJCS8qIHN0b3BzIGhlcmUgKi8KIH07CiAKQEAgLTEzMyw2ICsxMzQsNyBAQAogI2RlZmluZSBSRVFfUldfU1lOQwkoMSA8PCBfX1JFUV9SV19TWU5DKQogI2RlZmluZSBSRVFfQUxMT0NFRAkoMSA8PCBfX1JFUV9BTExPQ0VEKQogI2RlZmluZSBSRVFfUldfTUVUQQkoMSA8PCBfX1JFUV9SV19NRVRBKQorI2RlZmluZSBSRVFfQ09QWV9VU0VSCSgxIDw8IF9fUkVRX0NPUFlfVVNFUikKIAogI2RlZmluZSBCTEtfTUFYX0NEQgkxNgogCkBAIC0yMTcsNiArMjE5LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CiAKIAl1bnNpZ25lZCBpbnQgZGF0YV9sZW47CisJdW5zaWduZWQgaW50IGV4dHJhX2xlbjsJLyogbGVuZ3RoIG9mIGFsaWdubWVudCBhbmQgcGFkZGluZyAqLwogCXVuc2lnbmVkIGludCBzZW5zZV9sZW47CiAJdm9pZCAqZGF0YTsKIAl2b2lkICpzZW5zZTsKQEAgLTI1OCw2ICsyNjEsNyBAQAogdHlwZWRlZiBpbnQgKG1lcmdlX2J2ZWNfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fdmVjICopOwogdHlwZWRlZiB2b2lkIChwcmVwYXJlX2ZsdXNoX2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKHNvZnRpcnFfZG9uZV9mbikoc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIGludCAoZG1hX2RyYWluX25lZWRlZF9mbikoc3RydWN0IHJlcXVlc3QgKik7CiAKIGVudW0gYmxrX3F1ZXVlX3N0YXRlIHsKIAlRdWV1ZV9kb3duLApAQCAtMjk0LDYgKzI5OCw3IEBACiAJbWVyZ2VfYnZlY19mbgkJKm1lcmdlX2J2ZWNfZm47CiAJcHJlcGFyZV9mbHVzaF9mbgkqcHJlcGFyZV9mbHVzaF9mbjsKIAlzb2Z0aXJxX2RvbmVfZm4JCSpzb2Z0aXJxX2RvbmVfZm47CisJZG1hX2RyYWluX25lZWRlZF9mbgkqZG1hX2RyYWluX25lZWRlZDsKIAogCS8qCiAJICogRGlzcGF0Y2ggcXVldWUgc29ydGluZwpAQCAtMzU5LDYgKzM2NCw3IEBACiAJdW5zaWduZWQgbG9uZwkJc2VnX2JvdW5kYXJ5X21hc2s7CiAJdm9pZAkJCSpkbWFfZHJhaW5fYnVmZmVyOwogCXVuc2lnbmVkIGludAkJZG1hX2RyYWluX3NpemU7CisJdW5zaWduZWQgaW50CQlkbWFfcGFkX21hc2s7CiAJdW5zaWduZWQgaW50CQlkbWFfYWxpZ25tZW50OwogCiAJc3RydWN0IGJsa19xdWV1ZV90YWcJKnF1ZXVlX3RhZ3M7CkBAIC01MjksOCArNTM1LDEzIEBACiAgKiBCTEtfQk9VTkNFX0FOWQk6IGRvbid0IGJvdW5jZSBhbnl0aGluZwogICogQkxLX0JPVU5DRV9JU0EJOiBib3VuY2UgcGFnZXMgYWJvdmUgSVNBIERNQSBib3VuZGFyeQogICovCisKKyNpZiBCSVRTX1BFUl9MT05HID09IDMyCiAjZGVmaW5lIEJMS19CT1VOQ0VfSElHSAkJKCh1NjQpYmxrX21heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIEJMS19CT1VOQ0VfQU5ZCQkoKHU2NClibGtfbWF4X3BmbiA8PCBQQUdFX1NISUZUKQorI2Vsc2UKKyNkZWZpbmUgQkxLX0JPVU5DRV9ISUdICQktMVVMTAorI2VuZGlmCisjZGVmaW5lIEJMS19CT1VOQ0VfQU5ZCQkoLTFVTEwpCiAjZGVmaW5lIEJMS19CT1VOQ0VfSVNBCQkoSVNBX0RNQV9USFJFU0hPTEQpCiAKIC8qCkBAIC02OTgsOCArNzA5LDEwIEBACiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3N0YWNrX2xpbWl0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKmIpOwotZXh0ZXJuIGludCBibGtfcXVldWVfZG1hX2RyYWluKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB2b2lkICpidWYsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2RtYV9wYWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgYmxrX3F1ZXVlX2RtYV9kcmFpbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCSAgICAgICBkbWFfZHJhaW5fbmVlZGVkX2ZuICpkbWFfZHJhaW5fbmVlZGVkLAorCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfcHJlcF9ycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBwcmVwX3JxX2ZuICpwZm4pOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21lcmdlX2J2ZWMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgbWVyZ2VfYnZlY19mbiAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnNnLmggYi9pbmNsdWRlL2xpbnV4L2JzZy5oCmluZGV4IDYwZTM3N2I1Mi4uZTg0MDZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ic2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JzZy5oCkBAIC01NSw3ICs1NSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0JTRykKIHN0cnVjdCBic2dfY2xhc3NfZGV2aWNlIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgbWlub3I7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZHJvbS5oIGIvaW5jbHVkZS9saW51eC9jZHJvbS5oCmluZGV4IGE1Y2QyMDQuLjVkYjI2NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Ryb20uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nkcm9tLmgKQEAgLTkxMCw2ICs5MTAsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogbm90IHJlYWxseSBuZWVkZWQsIGxhdGVyLi4gKi8KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKIHN0cnVjdCBwYWNrZXRfY29tbWFuZAogewpAQCAtOTM0LDcgKzkzNSw3IEBACiAvKiBVbmlmb3JtIGNkcm9tIGRhdGEgc3RydWN0dXJlcyBmb3IgY2Ryb20uYyAqLwogc3RydWN0IGNkcm9tX2RldmljZV9pbmZvIHsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAgKm9wczsgIC8qIGxpbmsgdG8gZGV2aWNlX29wcyAqLwotCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqbmV4dDsgLyogbmV4dCBkZXZpY2VfaW5mbyBmb3IgdGhpcyBtYWpvciAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpbmtlZCBsaXN0IG9mIGFsbCBkZXZpY2VfaW5mbyAqLwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOwkJLyogbWF0Y2hpbmcgYmxvY2sgbGF5ZXIgZGlzayAqLwogCXZvaWQgKmhhbmRsZTsJCSAgICAgICAgLyogZHJpdmVyLWRlcGVuZGVudCBkYXRhICovCiAvKiBzcGVjaWZpY2F0aW9ucyAqLwpAQCAtOTk0LDcgKzk5NSw3IEBACiBleHRlcm4gaW50IGNkcm9tX21lZGlhX2NoYW5nZWQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICopOwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX2Nkcm9tKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKTsKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jZHJvbShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2Nkcm9tKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGludCBkYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggZmY5MDU1Zi4uYTZhNjAzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC0xNzUsNyArMTc1LDcgQEAKICAqCiAgKgogICogV2hlbiByZWFkaW5nL3dyaXRpbmcgdG8gYSBmaWxlOgotICoJLSB0aGUgY2dyb3VwIHRvIHVzZSBpbiBmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQtPmRfZnNkYXRhCisgKgktIHRoZSBjZ3JvdXAgdG8gdXNlIGlzIGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudC0+ZF9mc2RhdGEKICAqCS0gdGhlICdjZnR5cGUnIG9mIHRoZSBmaWxlIGlzIGZpbGUtPmZfZGVudHJ5LT5kX2ZzZGF0YQogICovCiAKQEAgLTE4NiwxNSArMTg2LDE1IEBACiAJY2hhciBuYW1lW01BWF9DRlRZUEVfTkFNRV07CiAJaW50IHByaXZhdGU7CiAJaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLQlzc2l6ZV90ICgqcmVhZCkgKHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwlzc2l6ZV90ICgqcmVhZCkgKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZnR5cGUgKmNmdCwKIAkJCSBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpOwogCS8qCiAJICogcmVhZF91aW50KCkgaXMgYSBzaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIHJldHVybmluZyBhCiAJICogc2luZ2xlIGludGVnZXIuIFVzZSBpdCBpbiBwbGFjZSBvZiByZWFkKCkKIAkgKi8KLQl1NjQgKCpyZWFkX3VpbnQpIChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQpOwotCXNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwl1NjQgKCpyZWFkX3VpbnQpIChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQpOworCXNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZnR5cGUgKmNmdCwKIAkJCSAgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcyk7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogCSAqIGEgc2luZ2xlIGludGVnZXIgKGFzIHBhcnNlZCBieSBzaW1wbGVfc3RydG91bGwpIGZyb20KIAkgKiB1c2Vyc3BhY2UuIFVzZSBpbiBwbGFjZSBvZiB3cml0ZSgpOyByZXR1cm4gMCBvciBlcnJvci4KIAkgKi8KLQlpbnQgKCp3cml0ZV91aW50KSAoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKTsKKwlpbnQgKCp3cml0ZV91aW50KSAoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKTsKIAogCWludCAoKnJlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiB9OwpAQCAtMjE4LDQ0ICsyMTgsNDUgQEAKIAogLyogQWRkIGEgbmV3IGZpbGUgdG8gdGhlIGdpdmVuIGNncm91cCBkaXJlY3RvcnkuIFNob3VsZCBvbmx5IGJlCiAgKiBjYWxsZWQgYnkgc3Vic3lzdGVtcyBmcm9tIHdpdGhpbiBhIHBvcHVsYXRlKCkgbWV0aG9kICovCi1pbnQgY2dyb3VwX2FkZF9maWxlKHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXMsCitpbnQgY2dyb3VwX2FkZF9maWxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXMsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2Z0eXBlICpjZnQpOwogCiAvKiBBZGQgYSBzZXQgb2YgbmV3IGZpbGVzIHRvIHRoZSBnaXZlbiBjZ3JvdXAgZGlyZWN0b3J5LiBTaG91bGQKICAqIG9ubHkgYmUgY2FsbGVkIGJ5IHN1YnN5c3RlbXMgZnJvbSB3aXRoaW4gYSBwb3B1bGF0ZSgpIG1ldGhvZCAqLwotaW50IGNncm91cF9hZGRfZmlsZXMoc3RydWN0IGNncm91cCAqY29udCwKK2ludCBjZ3JvdXBfYWRkX2ZpbGVzKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3Vic3lzLAogCQkJY29uc3Qgc3RydWN0IGNmdHlwZSBjZnRbXSwKIAkJCWludCBjb3VudCk7CiAKLWludCBjZ3JvdXBfaXNfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjb250KTsKK2ludCBjZ3JvdXBfaXNfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIAotaW50IGNncm91cF9wYXRoKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNvbnQsIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CitpbnQgY2dyb3VwX3BhdGgoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKIAotaW50IGNncm91cF90YXNrX2NvdW50KGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNvbnQpOworaW50IGNncm91cF90YXNrX2NvdW50KGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnApOwogCiAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2dyb3VwIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgY3VycmVudCBjZ3JvdXAgKi8KLWludCBjZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjb250KTsKK2ludCBjZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIAogLyogQ29udHJvbCBHcm91cCBzdWJzeXN0ZW0gdHlwZS4gU2VlIERvY3VtZW50YXRpb24vY2dyb3Vwcy50eHQgZm9yIGRldGFpbHMgKi8KIAogc3RydWN0IGNncm91cF9zdWJzeXMgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICooKmNyZWF0ZSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAotCQkJCQkJICBzdHJ1Y3QgY2dyb3VwICpjb250KTsKLQl2b2lkICgqcHJlX2Rlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCk7Ci0Jdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCk7CisJCQkJCQkgIHN0cnVjdCBjZ3JvdXAgKmNncnApOworCXZvaWQgKCpwcmVfZGVzdHJveSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIAlpbnQgKCpjYW5fYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCi0JCQkgIHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLQl2b2lkICgqYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQsCi0JCQlzdHJ1Y3QgY2dyb3VwICpvbGRfY29udCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCQkJICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisJdm9pZCAoKmF0dGFjaCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCQkJc3RydWN0IGNncm91cCAqb2xkX2NncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAl2b2lkICgqZm9yaykoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCXZvaWQgKCpleGl0KShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAJaW50ICgqcG9wdWxhdGUpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKLQkJCXN0cnVjdCBjZ3JvdXAgKmNvbnQpOwotCXZvaWQgKCpwb3N0X2Nsb25lKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpOworCQkJc3RydWN0IGNncm91cCAqY2dycCk7CisJdm9pZCAoKnBvc3RfY2xvbmUpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CiAJdm9pZCAoKmJpbmQpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqcm9vdCk7CiAJaW50IHN1YnN5c19pZDsKIAlpbnQgYWN0aXZlOworCWludCBkaXNhYmxlZDsKIAlpbnQgZWFybHlfaW5pdDsKICNkZWZpbmUgTUFYX0NHUk9VUF9UWVBFX05BTUVMRU4gMzIKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMjczLDkgKzI3NCw5IEBACiAjdW5kZWYgU1VCU1lTCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNncm91cF9zdWJzeXNfc3RhdGUoCi0Jc3RydWN0IGNncm91cCAqY29udCwgaW50IHN1YnN5c19pZCkKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBpbnQgc3Vic3lzX2lkKQogewotCXJldHVybiBjb250LT5zdWJzeXNbc3Vic3lzX2lkXTsKKwlyZXR1cm4gY2dycC0+c3Vic3lzW3N1YnN5c19pZF07CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnRhc2tfc3Vic3lzX3N0YXRlKApAQCAtMjkwLDggKzI5MSw2IEBACiAJcmV0dXJuIHRhc2tfc3Vic3lzX3N0YXRlKHRhc2ssIHN1YnN5c19pZCktPmNncm91cDsKIH0KIAotaW50IGNncm91cF9wYXRoKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNvbnQsIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Ci0KIGludCBjZ3JvdXBfY2xvbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyk7CiAKIC8qIEEgY2dyb3VwX2l0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3BhcXVlIG9iamVjdCAqLwpAQCAtMzEzLDEwICszMTIsMTAgQEAKICAqICAgIC0gY2dyb3VwX3NjYW5fdGFza3MoKSBob2xkcyB0aGUgY3NzX3NldF9sb2NrIHdoZW4gY2FsbGluZyB0aGUgdGVzdF90YXNrKCkKICAqICAgICAgY2FsbGJhY2ssIGJ1dCBub3Qgd2hpbGUgY2FsbGluZyB0aGUgcHJvY2Vzc190YXNrKCkgY2FsbGJhY2suCiAgKi8KLXZvaWQgY2dyb3VwX2l0ZXJfc3RhcnQoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNncm91cF9pdGVyICppdCk7Ci1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmNncm91cF9pdGVyX25leHQoc3RydWN0IGNncm91cCAqY29udCwKK3ZvaWQgY2dyb3VwX2l0ZXJfc3RhcnQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNncm91cF9pdGVyICppdCk7CitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNncm91cF9pdGVyX25leHQoc3RydWN0IGNncm91cCAqY2dycCwKIAkJCQkJc3RydWN0IGNncm91cF9pdGVyICppdCk7Ci12b2lkIGNncm91cF9pdGVyX2VuZChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2dyb3VwX2l0ZXIgKml0KTsKK3ZvaWQgY2dyb3VwX2l0ZXJfZW5kKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZ3JvdXBfaXRlciAqaXQpOwogaW50IGNncm91cF9zY2FuX3Rhc2tzKHN0cnVjdCBjZ3JvdXBfc2Nhbm5lciAqc2Nhbik7CiBpbnQgY2dyb3VwX2F0dGFjaF90YXNrKHN0cnVjdCBjZ3JvdXAgKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCmluZGV4IGFjNmFhZDkuLjFkZGViZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCkBAIC0zNyw3ICszNyw3IEBACiAKIC8qICovCiAKLSNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9DT05UCisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKIFNVQlNZUyhtZW1fY2dyb3VwKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCA4NTc3OGE0Li4zNTA5NDQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0yMTYsNiArMjE2LDcgQEAKIC8qIHVzZWQgdG8gaW5zdGFsbCBhIG5ldyBjbG9ja3NvdXJjZSAqLwogZXh0ZXJuIGludCBjbG9ja3NvdXJjZV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tzb3VyY2UqKTsKIGV4dGVybiB2b2lkIGNsb2Nrc291cmNlX3VucmVnaXN0ZXIoc3RydWN0IGNsb2Nrc291cmNlKik7CitleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV90b3VjaF93YXRjaGRvZyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UqIGNsb2Nrc291cmNlX2dldF9uZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfY2hhbmdlX3JhdGluZyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCBpbnQgcmF0aW5nKTsKIGV4dGVybiB2b2lkIGNsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IGE2NzFkYmYuLjhmYTc4NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtMTkyLDggKzE5Miw4IEBACiAJCXN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2cCk7CiAKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3dhaXQ0KGNvbXBhdF9waWRfdCBwaWQsCi0JCQkJIGNvbXBhdF91aW50X3QgKnN0YXRfYWRkciwgaW50IG9wdGlvbnMsCi0JCQkJIHN0cnVjdCBjb21wYXRfcnVzYWdlICpydSk7CisJCQkJIGNvbXBhdF91aW50X3QgX191c2VyICpzdGF0X2FkZHIsIGludCBvcHRpb25zLAorCQkJCSBzdHJ1Y3QgY29tcGF0X3J1c2FnZSBfX3VzZXIgKnJ1KTsKIAogI2RlZmluZSBCSVRTX1BFUl9DT01QQVRfTE9ORyAgICAoOCpzaXplb2YoY29tcGF0X2xvbmdfdCkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCBkMGUxN2UxLi5kY2FlMGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0xMzgsNiArMTM4LDEyIEBACiAjZGVmaW5lIG5vaW5saW5lCiAjZW5kaWYKIAorLyoKKyAqIFJhdGhlciB0aGVuIHVzaW5nIG5vaW5saW5lIHRvIHByZXZlbnQgc3RhY2sgY29uc3VtcHRpb24sIHVzZQorICogbm9pbmxpbmVfZm9yX3N0YWNrIGluc3RlYWQuICBGb3IgZG9jdW1lbnRhaXRvbiByZWFzb25zLgorICovCisjZGVmaW5lIG5vaW5saW5lX2Zvcl9zdGFjayBub2lubGluZQorCiAjaWZuZGVmIF9fYWx3YXlzX2lubGluZQogI2RlZmluZSBfX2Fsd2F5c19pbmxpbmUgaW5saW5lCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IGRhNmRkOTUuLjk2YTg5ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMTcwLDcgKzE3MCw1IEBACiAKIHZvaWQgY25fcXVldWVfd3JhcHBlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCi1leHRlcm4gaW50IGNuX2FscmVhZHlfaW5pdGlhbGl6ZWQ7Ci0KICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJCQkJLyogX19DT05ORUNUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHUuaCBiL2luY2x1ZGUvbGludXgvY3B1LmgKaW5kZXggMGJlOGQ2NS4uZjIxMmZhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdS5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBzdHJ1Y3QgY3B1IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1aWRsZS5oIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKaW5kZXggNmI3MmE0NS4uNTFlNmIxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKQEAgLTM4LDggKzM4LDggQEAKIAl1bnNpZ25lZCBpbnQJcG93ZXJfdXNhZ2U7IC8qIGluIG1XICovCiAJdW5zaWduZWQgaW50CXRhcmdldF9yZXNpZGVuY3k7IC8qIGluIFVTICovCiAKLQl1bnNpZ25lZCBpbnQJdXNhZ2U7Ci0JdW5zaWduZWQgaW50CXRpbWU7IC8qIGluIFVTICovCisJdW5zaWduZWQgbG9uZyBsb25nCXVzYWdlOworCXVuc2lnbmVkIGxvbmcgbG9uZwl0aW1lOyAvKiBpbiBVUyAqLwogCiAJaW50ICgqZW50ZXIpCShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmggYi9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaAppbmRleCA3MDQ3ZjU4Li4yNTljODA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaApAQCAtMjIyLDggKzIyMiwxMyBAQAogI2RlZmluZSBuZXh0X2NwdShuLCBzcmMpCSh7ICh2b2lkKShzcmMpOyAxOyB9KQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9DUFVNQVNLX09GX0NQVV9NQVAKK2V4dGVybiBjcHVtYXNrX3QgKmNwdW1hc2tfb2ZfY3B1X21hcDsKKyNkZWZpbmUgY3B1bWFza19vZl9jcHUoY3B1KSAgICAoY3B1bWFza19vZl9jcHVfbWFwW2NwdV0pCisKKyNlbHNlCiAjZGVmaW5lIGNwdW1hc2tfb2ZfY3B1KGNwdSkJCQkJCQlcCi0oewkJCQkJCQkJCVwKKygqKHsJCQkJCQkJCQlcCiAJdHlwZW9mKF91bnVzZWRfY3B1bWFza19hcmdfKSBtOwkJCQkJXAogCWlmIChzaXplb2YobSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CQkJXAogCQltLmJpdHNbMF0gPSAxVUw8PChjcHUpOwkJCQkJXApAQCAtMjMxLDggKzIzNiw5IEBACiAJCWNwdXNfY2xlYXIobSk7CQkJCQkJXAogCQljcHVfc2V0KChjcHUpLCBtKTsJCQkJCVwKIAl9CQkJCQkJCQlcCi0JbTsJCQkJCQkJCVwKLX0pCisJJm07CQkJCQkJCQlcCit9KSkKKyNlbmRpZgogCiAjZGVmaW5lIENQVV9NQVNLX0xBU1RfV09SRCBCSVRNQVBfTEFTVF9XT1JEX01BU0soTlJfQ1BVUykKIApAQCAtMjQzLDYgKzI0OSw4IEBACiAJW0JJVFNfVE9fTE9OR1MoTlJfQ1BVUyktMV0gPSBDUFVfTUFTS19MQVNUX1dPUkQJCQlcCiB9IH0KIAorI2RlZmluZSBDUFVfTUFTS19BTExfUFRSCSgmQ1BVX01BU0tfQUxMKQorCiAjZWxzZQogCiAjZGVmaW5lIENQVV9NQVNLX0FMTAkJCQkJCQlcCkBAIC0yNTEsNiArMjU5LDEwIEBACiAJW0JJVFNfVE9fTE9OR1MoTlJfQ1BVUyktMV0gPSBDUFVfTUFTS19MQVNUX1dPUkQJCQlcCiB9IH0KIAorLyogY3B1X21hc2tfYWxsIGlzIGluIGluaXQvbWFpbi5jICovCitleHRlcm4gY3B1bWFza190IGNwdV9tYXNrX2FsbDsKKyNkZWZpbmUgQ1BVX01BU0tfQUxMX1BUUgkoJmNwdV9tYXNrX2FsbCkKKwogI2VuZGlmCiAKICNkZWZpbmUgQ1BVX01BU0tfTk9ORQkJCQkJCQlcCkBAIC0yNzMsNiArMjg1LDEzIEBACiAJcmV0dXJuIGJpdG1hcF9zY25wcmludGYoYnVmLCBsZW4sIHNyY3AtPmJpdHMsIG5iaXRzKTsKIH0KIAorI2RlZmluZSBjcHVtYXNrX3NjbnByaW50Zl9sZW4obGVuKSBcCisJCQlfX2NwdW1hc2tfc2NucHJpbnRmX2xlbigobGVuKSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fY3B1bWFza19zY25wcmludGZfbGVuKGludCBsZW4pCit7CisJcmV0dXJuIGJpdG1hcF9zY25wcmludGZfbGVuKGxlbik7Cit9CisKICNkZWZpbmUgY3B1bWFza19wYXJzZV91c2VyKHVidWYsIHVsZW4sIGRzdCkgXAogCQkJX19jcHVtYXNrX3BhcnNlX3VzZXIoKHVidWYpLCAodWxlbiksICYoZHN0KSwgTlJfQ1BVUykKIHN0YXRpYyBpbmxpbmUgaW50IF9fY3B1bWFza19wYXJzZV91c2VyKGNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBsZW4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdXNldC5oIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaAppbmRleCAwYTI2YmUzLi43MjY3NjFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKQEAgLTIwLDggKzIwLDggQEAKIGV4dGVybiBpbnQgY3B1c2V0X2luaXRfZWFybHkodm9pZCk7CiBleHRlcm4gaW50IGNwdXNldF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY3B1c2V0X2luaXRfc21wKHZvaWQpOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVzZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Ci1leHRlcm4gY3B1bWFza190IGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CitleHRlcm4gdm9pZCBjcHVzZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1bWFza190ICptYXNrKTsKK2V4dGVybiB2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1bWFza190ICptYXNrKTsKIGV4dGVybiBub2RlbWFza190IGNwdXNldF9tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKICNkZWZpbmUgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIChjdXJyZW50LT5tZW1zX2FsbG93ZWQpCiB2b2lkIGNwdXNldF9pbml0X2N1cnJlbnRfbWVtc19hbGxvd2VkKHZvaWQpOwpAQCAtODQsMTMgKzg0LDE0IEBACiBzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2luaXRfc21wKHZvaWQpIHt9CiAKLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IGNwdXNldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjcHVtYXNrX3QgKm1hc2spCiB7Ci0JcmV0dXJuIGNwdV9wb3NzaWJsZV9tYXA7CisJKm1hc2sgPSBjcHVfcG9zc2libGVfbWFwOwogfQotc3RhdGljIGlubGluZSBjcHVtYXNrX3QgY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQkJCQkJY3B1bWFza190ICptYXNrKQogewotCXJldHVybiBjcHVfcG9zc2libGVfbWFwOworCSptYXNrID0gY3B1X3Bvc3NpYmxlX21hcDsKIH0KIAogc3RhdGljIGlubGluZSBub2RlbWFza190IGNwdXNldF9tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggNWUwMmQxYi4uNDI1ODI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC0zMTcsMTQgKzMxNyw3IEBACiAvKgogICogQWxnb3JpdGhtIHF1ZXJ5IGludGVyZmFjZS4KICAqLwotI2lmZGVmIENPTkZJR19DUllQVE8KIGludCBjcnlwdG9faGFzX2FsZyhjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19oYXNfYWxnKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgogCiAvKgogICogVHJhbnNmb3JtczogdXNlci1pbnN0YW50aWF0ZWQgb2JqZWN0cyB3aGljaCBlbmNhcHN1bGF0ZSBhbGdvcml0aG1zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaCBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCmluZGV4IGY1OTJkNmQuLjcyNjYxMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVidWdmcy5oCkBAIC0yNyw2ICsyNywxMSBAQAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCisvKiBkZWNsYXJlZCBvdmVyIGluIGZpbGUuYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGVidWdmc19saW5rX29wZXJhdGlvbnM7CisKIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCiAJCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWxheS5oIGIvaW5jbHVkZS9saW51eC9kZWxheS5oCmluZGV4IDE3ZGRiNTUuLjU0NTUyZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVsYXkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlbGF5LmgKQEAgLTcsNiArNyw4IEBACiAgKiBEZWxheSByb3V0aW5lcywgdXNpbmcgYSBwcmUtY29tcHV0ZWQgImxvb3BzX3Blcl9qaWZmeSIgdmFsdWUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KQEAgLTMyLDcgKzM0LDExIEBACiAjZW5kaWYKIAogI2lmbmRlZiBuZGVsYXkKLSNkZWZpbmUgbmRlbGF5KHgpCXVkZWxheSgoKHgpKzk5OSkvMTAwMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZGVsYXkodW5zaWduZWQgbG9uZyB4KQoreworCXVkZWxheShESVZfUk9VTkRfVVAoeCwgMTAwMCkpOworfQorI2RlZmluZSBuZGVsYXkoeCkgbmRlbGF5KHgpCiAjZW5kaWYKIAogdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCAyMjU4ZDg5Li4xYTA2MDI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vZGV2aWNlLmg+CiAKQEAgLTQyOSw3ICs0MjksNiBAQAogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CiAJY2hhcglidXNfaWRbQlVTX0lEX1NJWkVdOwkvKiBwb3NpdGlvbiBvbiBwYXJlbnQgYnVzICovCiAJc3RydWN0IGRldmljZV90eXBlCSp0eXBlOwotCXVuc2lnbmVkCQlpc19yZWdpc3RlcmVkOjE7CiAJdW5zaWduZWQJCXVldmVudF9zdXBwcmVzczoxOwogCiAJc3RydWN0IHNlbWFwaG9yZQlzZW07CS8qIHNlbWFwaG9yZSB0byBzeW5jaHJvbml6ZSBjYWxscyB0bwpAQCAtNDc1LDYgKzQ3NCw5IEBACiAJdm9pZAkoKnJlbGVhc2UpKHN0cnVjdCBkZXZpY2UgKmRldik7CiB9OwogCisvKiBHZXQgdGhlIHdha2V1cCByb3V0aW5lcywgd2hpY2ggZGVwZW5kIG9uIHN0cnVjdCBkZXZpY2UgKi8KKyNpbmNsdWRlIDxsaW51eC9wbV93YWtldXAuaD4KKwogI2lmZGVmIENPTkZJR19OVU1BCiBzdGF0aWMgaW5saW5lIGludCBkZXZfdG9fbm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC01MDYsNyArNTA4LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBkZXYtPmlzX3JlZ2lzdGVyZWQ7CisJcmV0dXJuIGRldi0+a29iai5zdGF0ZV9pbl9zeXNmczsKIH0KIAogdm9pZCBkcml2ZXJfaW5pdCh2b2lkKTsKQEAgLTU0MywyMCArNTQ1LDYgQEAKIAkJCQkgICAgZGV2X3QgZGV2dCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQkJICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDQsIDUpKSk7CiBleHRlcm4gdm9pZCBkZXZpY2VfZGVzdHJveShzdHJ1Y3QgY2xhc3MgKmNscywgZGV2X3QgZGV2dCk7Ci0jaWZkZWYgQ09ORklHX1BNX1NMRUVQCi1leHRlcm4gdm9pZCBkZXN0cm95X3N1c3BlbmRlZF9kZXZpY2Uoc3RydWN0IGNsYXNzICpjbHMsIGRldl90IGRldnQpOwotZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX3NjaGVkdWxlX3JlbW92YWwoc3RydWN0IGRldmljZSAqKTsKLSNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3N1c3BlbmRlZF9kZXZpY2Uoc3RydWN0IGNsYXNzICpjbHMsIGRldl90IGRldnQpCi17Ci0JZGV2aWNlX2Rlc3Ryb3koY2xzLCBkZXZ0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9zY2hlZHVsZV9yZW1vdmFsKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwotfQotI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogLyoKICAqIFBsYXRmb3JtICJmaXh1cCIgZnVuY3Rpb25zIC0gYWxsb3cgdGhlIHBsYXRmb3JtIHRvIGhhdmUgdGhlaXIgc2F5CkBAIC02MDgsMjEgKzU5NiwxNiBAQAogI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJZGV2X3ByaW50ayhLRVJOX0RFQlVHICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQotZGV2X2RiZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXJldHVybiAwOwotfQorI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCisJKHsgaWYgKDApIGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCBmb3JtYXQsICMjYXJnKTsgMDsgfSkKICNlbmRpZgogCiAjaWZkZWYgVkVSQk9TRV9ERUJVRwogI2RlZmluZSBkZXZfdmRiZwlkZXZfZGJnCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCi1kZXZfdmRiZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXJldHVybiAwOwotfQorCisjZGVmaW5lIGRldl92ZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCisJKHsgaWYgKDApIGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCBmb3JtYXQsICMjYXJnKTsgMDsgfSkKICNlbmRpZgogCiAvKiBDcmVhdGUgYWxpYXMsIHNvIEkgY2FuIGJlIGF1dG9sb2FkZWQuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAppbmRleCBhY2JiMzY0Li5kMDhhNWM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKQEAgLTk1LDEyICs5NSwxNyBAQAogI2RlZmluZSBETUFfVFhfVFlQRV9FTkQgKERNQV9JTlRFUlJVUFQgKyAxKQogCiAvKioKLSAqIGVudW0gZG1hX3ByZXBfZmxhZ3MgLSBETUEgZmxhZ3MgdG8gYXVnbWVudCBvcGVyYXRpb24gcHJlcGFyYXRpb24KKyAqIGVudW0gZG1hX2N0cmxfZmxhZ3MgLSBETUEgZmxhZ3MgdG8gYXVnbWVudCBvcGVyYXRpb24gcHJlcGFyYXRpb24sCisgKiAJY29udHJvbCBjb21wbGV0aW9uLCBhbmQgY29tbXVuaWNhdGUgc3RhdHVzLgogICogQERNQV9QUkVQX0lOVEVSUlVQVCAtIHRyaWdnZXIgYW4gaW50ZXJydXB0IChjYWxsYmFjaykgdXBvbiBjb21wbGV0aW9uIG9mCiAgKiAJdGhpcyB0cmFuc2FjdGlvbgorICogQERNQV9DVFJMX0FDSyAtIHRoZSBkZXNjcmlwdG9yIGNhbm5vdCBiZSByZXVzZWQgdW50aWwgdGhlIGNsaWVudAorICogCWFja25vd2xlZGdlcyByZWNlaXB0LCBpLmUuIGhhcyBoYXMgYSBjaGFuY2UgdG8gZXN0YWJsaXNoIGFueQorICogCWRlcGVuZGVuY3kgY2hhaW5zCiAgKi8KLWVudW0gZG1hX3ByZXBfZmxhZ3MgeworZW51bSBkbWFfY3RybF9mbGFncyB7CiAJRE1BX1BSRVBfSU5URVJSVVBUID0gKDEgPDwgMCksCisJRE1BX0NUUkxfQUNLID0gKDEgPDwgMSksCiB9OwogCiAvKioKQEAgLTIxMSw4ICsyMTYsOCBAQAogICogLS0tZG1hIGdlbmVyaWMgb2ZmbG9hZCBmaWVsZHMtLS0KICAqIEBjb29raWU6IHRyYWNraW5nIGNvb2tpZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiwgc2V0IHRvIC1FQlVTWSBpZgogICoJdGhpcyB0eCBpcyBzaXR0aW5nIG9uIGEgZGVwZW5kZW5jeSBsaXN0Ci0gKiBAYWNrOiB0aGUgZGVzY3JpcHRvciBjYW4gbm90IGJlIHJldXNlZCB1bnRpbCB0aGUgY2xpZW50IGFja25vd2xlZGdlcwotICoJcmVjZWlwdCwgaS5lLiBoYXMgaGFzIGEgY2hhbmNlIHRvIGVzdGFibGlzaCBhbnkgZGVwZW5kZW5jeSBjaGFpbnMKKyAqIEBmbGFnczogZmxhZ3MgdG8gYXVnbWVudCBvcGVyYXRpb24gcHJlcGFyYXRpb24sIGNvbnRyb2wgY29tcGxldGlvbiwgYW5kCisgKiAJY29tbXVuaWNhdGUgc3RhdHVzCiAgKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcgogICogQHR4X2xpc3Q6IGRyaXZlciBjb21tb24gZmllbGQgZm9yIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIG11bHRpcGxlCiAgKglkZXNjcmlwdG9ycwpAQCAtMjIxLDIzICsyMjYsMjAgQEAKICAqIEBjYWxsYmFjazogcm91dGluZSB0byBjYWxsIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGNvbXBsZXRlCiAgKiBAY2FsbGJhY2tfcGFyYW06IGdlbmVyYWwgcGFyYW1ldGVyIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIHJvdXRpbmUKICAqIC0tLWFzeW5jX3R4IGFwaSBzcGVjaWZpYyBmaWVsZHMtLS0KLSAqIEBkZXBlbmRfbGlzdDogYXQgY29tcGxldGlvbiB0aGlzIGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGFyZSBzdWJtaXR0ZWQKLSAqIEBkZXBlbmRfbm9kZTogYWxsb3cgdGhpcyB0cmFuc2FjdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciBhbm90aGVyCi0gKgl0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkLCBwb3NzaWJseSBvbiBhbm90aGVyIGNoYW5uZWwKKyAqIEBuZXh0OiBhdCBjb21wbGV0aW9uIHN1Ym1pdCB0aGlzIGRlc2NyaXB0b3IKICAqIEBwYXJlbnQ6IHBvaW50ZXIgdG8gdGhlIG5leHQgbGV2ZWwgdXAgaW4gdGhlIGRlcGVuZGVuY3kgY2hhaW4KLSAqIEBsb2NrOiBwcm90ZWN0IHRoZSBkZXBlbmRlbmN5IGxpc3QKKyAqIEBsb2NrOiBwcm90ZWN0IHRoZSBwYXJlbnQgYW5kIG5leHQgcG9pbnRlcnMKICAqLwogc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yIHsKIAlkbWFfY29va2llX3QgY29va2llOwotCWludCBhY2s7CisJZW51bSBkbWFfY3RybF9mbGFncyBmbGFnczsgLyogbm90IGEgJ2xvbmcnIHRvIHBhY2sgd2l0aCBjb29raWUgKi8KIAlkbWFfYWRkcl90IHBoeXM7CiAJc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OwogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKIAlkbWFfY29va2llX3QgKCp0eF9zdWJtaXQpKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpOwogCWRtYV9hc3luY190eF9jYWxsYmFjayBjYWxsYmFjazsKIAl2b2lkICpjYWxsYmFja19wYXJhbTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRlcGVuZF9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgZGVwZW5kX25vZGU7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpuZXh0OwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqcGFyZW50OwogCXNwaW5sb2NrX3QgbG9jazsKIH07CkBAIC0yNjEsNyArMjYzLDYgQEAKICAqIEBkZXZpY2VfcHJlcF9kbWFfemVyb19zdW06IHByZXBhcmVzIGEgemVyb19zdW0gb3BlcmF0aW9uCiAgKiBAZGV2aWNlX3ByZXBfZG1hX21lbXNldDogcHJlcGFyZXMgYSBtZW1zZXQgb3BlcmF0aW9uCiAgKiBAZGV2aWNlX3ByZXBfZG1hX2ludGVycnVwdDogcHJlcGFyZXMgYW4gZW5kIG9mIGNoYWluIGludGVycnVwdCBvcGVyYXRpb24KLSAqIEBkZXZpY2VfZGVwZW5kZW5jeV9hZGRlZDogYXN5bmNfdHggbm90aWZpZXMgdGhlIGNoYW5uZWwgYWJvdXQgbmV3IGRlcHMKICAqIEBkZXZpY2VfaXNzdWVfcGVuZGluZzogcHVzaCBwZW5kaW5nIHRyYW5zYWN0aW9ucyB0byBoYXJkd2FyZQogICovCiBzdHJ1Y3QgZG1hX2RldmljZSB7CkBAIC0yOTQsOSArMjk1LDggQEAKIAkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRlc3QsIGludCB2YWx1ZSwgc2l6ZV90IGxlbiwKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICooKmRldmljZV9wcmVwX2RtYV9pbnRlcnJ1cHQpKAotCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCi0Jdm9pZCAoKmRldmljZV9kZXBlbmRlbmN5X2FkZGVkKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOwogCWVudW0gZG1hX3N0YXR1cyAoKmRldmljZV9pc190eF9jb21wbGV0ZSkoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgZG1hX2Nvb2tpZV90ICpsYXN0LAogCQkJZG1hX2Nvb2tpZV90ICp1c2VkKTsKQEAgLTMyMSw3ICszMjEsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogYXN5bmNfdHhfYWNrKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7Ci0JdHgtPmFjayA9IDE7CisJdHgtPmZsYWdzIHw9IERNQV9DVFJMX0FDSzsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2FzeW5jX3R4X3Rlc3RfYWNrKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCit7CisJcmV0dXJuIHR4LT5mbGFncyAmIERNQV9DVFJMX0FDSzsKIH0KIAogI2RlZmluZSBmaXJzdF9kbWFfY2FwKG1hc2spIF9fZmlyc3RfZG1hX2NhcCgmKG1hc2spKQpAQCAtMzY2LDcgKzM3Miw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7Ci0JcmV0dXJuIGNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcoY2hhbik7CisJY2hhbi0+ZGV2aWNlLT5kZXZpY2VfaXNzdWVfcGVuZGluZyhjaGFuKTsKIH0KIAogI2RlZmluZSBkbWFfYXN5bmNfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbikgZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoY2hhbikKQEAgLTM5OCw3ICs0MDQsNyBAQAogICogQGxhc3RfdXNlZDogbGFzdCBjb29raWUgdmFsdWUgaGFuZGVkIG91dAogICoKICAqIGRtYV9hc3luY19pc19jb21wbGV0ZSgpIGlzIHVzZWQgaW4gZG1hX2FzeW5jX21lbWNweV9jb21wbGV0ZSgpCi0gKiB0aGUgdGVzdCBsb2dpYyBpcyBzZXBlcmF0ZWQgZm9yIGxpZ2h0d2VpZ2h0IHRlc3Rpbmcgb2YgbXVsdGlwbGUgY29va2llcworICogdGhlIHRlc3QgbG9naWMgaXMgc2VwYXJhdGVkIGZvciBsaWdodHdlaWdodCB0ZXN0aW5nIG9mIG11bHRpcGxlIGNvb2tpZXMKICAqLwogc3RhdGljIGlubGluZSBlbnVtIGRtYV9zdGF0dXMgZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGRtYV9jb29raWVfdCBjb29raWUsCiAJCQlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZSwgZG1hX2Nvb2tpZV90IGxhc3RfdXNlZCkKQEAgLTQyMyw3ICs0MjksNyBAQAogLyogLS0tIEhlbHBlciBpb3YtbG9ja2luZyBmdW5jdGlvbnMgLS0tICovCiAKIHN0cnVjdCBkbWFfcGFnZV9saXN0IHsKLQljaGFyICpiYXNlX2FkZHJlc3M7CisJY2hhciBfX3VzZXIgKmJhc2VfYWRkcmVzczsKIAlpbnQgbnJfcGFnZXM7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaAppbmRleCAxNDgxM2I1Li5hNWYzNTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTM5NCw0ICszOTUsMTAgQEAKIAl1MTYgbGVuZ3RoOwogfSBfX2F0dHJpYnV0ZSAoKHBhY2tlZCkpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtcmFuZ2VfZWZpX3RvX25hdGl2ZSh1NjQgKmFkZHIsIHU2NCAqbnBhZ2VzKQoreworCSpucGFnZXMgPSBQRk5fVVAoKmFkZHIgKyAoKm5wYWdlczw8RUZJX1BBR0VfU0hJRlQpKSAtIFBGTl9ET1dOKCphZGRyKTsKKwkqYWRkciAmPSBQQUdFX01BU0s7Cit9CisKICNlbmRpZiAvKiBfTElOVVhfRUZJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZzX2Rpci5oIGIvaW5jbHVkZS9saW51eC9lZnNfZGlyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwOWVjMDEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9lZnNfZGlyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogZWZzX2Rpci5oCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk5IEFsIFNtaXRoCi0gKi8KLQotI2lmbmRlZiBfX0VGU19ESVJfSF9fCi0jZGVmaW5lIF9fRUZTX0RJUl9IX18KLQotI2RlZmluZSBFRlNfRElSQlNJWkVfQklUUwlFRlNfQkxPQ0tTSVpFX0JJVFMKLSNkZWZpbmUgRUZTX0RJUkJTSVpFCQkoMSA8PCBFRlNfRElSQlNJWkVfQklUUykKLQotc3RydWN0IGVmc19kZW50cnkgewotCV9fYmUzMgkJaW5vZGU7Ci0JdW5zaWduZWQgY2hhcgluYW1lbGVuOwotCWNoYXIJCW5hbWVbM107Ci19OwotCi0jZGVmaW5lIEVGU19ERU5UU0laRQkoc2l6ZW9mKHN0cnVjdCBlZnNfZGVudHJ5KSAtIDMgKyAxKQotI2RlZmluZSBFRlNfTUFYTkFNRUxFTiAgKCgxIDw8IChzaXplb2YoY2hhcikgKiA4KSkgLSAxKQotCi0jZGVmaW5lIEVGU19ESVJCTEtfSEVBREVSU0laRQk0Ci0jZGVmaW5lIEVGU19ESVJCTEtfTUFHSUMJMHhiZWVmCS8qIG1vbyAqLwotCi1zdHJ1Y3QgZWZzX2RpciB7Ci0JX19iZTE2CW1hZ2ljOwotCXVuc2lnbmVkIGNoYXIJZmlyc3R1c2VkOwotCXVuc2lnbmVkIGNoYXIJc2xvdHM7Ci0KLQl1bnNpZ25lZCBjaGFyCXNwYWNlW0VGU19ESVJCU0laRSAtIEVGU19ESVJCTEtfSEVBREVSU0laRV07Ci19OwotCi0jZGVmaW5lIEVGU19NQVhFTlRTIFwKLQkoKEVGU19ESVJCU0laRSAtIEVGU19ESVJCTEtfSEVBREVSU0laRSkgLyBcCi0JIChFRlNfREVOVFNJWkUgKyBzaXplb2YoY2hhcikpKQotCi0jZGVmaW5lIEVGU19TTE9UQVQoZGlyLCBzbG90KSBFRlNfUkVBTE9GRigoZGlyKS0+c3BhY2Vbc2xvdF0pCi0KLSNkZWZpbmUgRUZTX1JFQUxPRkYob2Zmc2V0KSAoKG9mZnNldCA8PCAxKSkKLQotI2VuZGlmIC8qIF9fRUZTX0RJUl9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvZWZzX2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OTVkNjMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9lZnNfZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBlZnNfZnMuaAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OSBBbCBTbWl0aAotICoKLSAqIFBvcnRpb25zIGRlcml2ZWQgZnJvbSB3b3JrIChjKSAxOTk1LDE5OTYgQ2hyaXN0aWFuIFZvZ2VsZ3NhbmcuCi0gKi8KLQotI2lmbmRlZiBfX0VGU19GU19IX18KLSNkZWZpbmUgX19FRlNfRlNfSF9fCi0KLSNkZWZpbmUgRUZTX1ZFUlNJT04gIjEuMGEiCi0KLXN0YXRpYyBjb25zdCBjaGFyIGNwcnRbXSA9ICJFRlM6ICJFRlNfVkVSU0lPTiIgLSAoYykgMTk5OSBBbCBTbWl0aCA8QWwuU21pdGhAYWVzY2hpLmNoLmV1Lm9yZz4iOwotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotLyogMSBibG9jayBpcyA1MTIgYnl0ZXMgKi8KLSNkZWZpbmUJRUZTX0JMT0NLU0laRV9CSVRTCTkKLSNkZWZpbmUJRUZTX0JMT0NLU0laRQkJKDEgPDwgRUZTX0JMT0NLU0laRV9CSVRTKQotCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9lZnNfZnNfaS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vmc19mc19zYi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vmc19kaXIuaD4KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZWZzX2lub2RlX2luZm8gKklOT0RFX0lORk8oc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgZWZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGVmc19zYl9pbmZvICpTVVBFUl9JTkZPKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JcmV0dXJuIHNiLT5zX2ZzX2luZm87Ci19Ci0KLXN0cnVjdCBzdGF0ZnM7Ci1zdHJ1Y3QgZmlkOwotCi1leHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWZzX3N5bWxpbmtfYW9wczsKLQotZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIGVmc19ibG9ja190IGVmc19tYXBfYmxvY2soc3RydWN0IGlub2RlICosIGVmc19ibG9ja190KTsKLWV4dGVybiBpbnQgZWZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwotCi1leHRlcm4gc3RydWN0IGRlbnRyeSAqZWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOwotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmVmc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLAotCQlpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSk7Ci1leHRlcm4gc3RydWN0IGRlbnRyeSAqZWZzX2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsCi0JCWludCBmaF9sZW4sIGludCBmaF90eXBlKTsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICplZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICopOwotZXh0ZXJuIGludCBlZnNfYm1hcChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKLQotI2VuZGlmIC8qIF9fRUZTX0ZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZnNfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9lZnNfZnNfaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTdjNDc0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZWZzX2ZzX2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBlZnNfZnNfaS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk5IEFsIFNtaXRoCi0gKgotICogUG9ydGlvbnMgZGVyaXZlZCBmcm9tIElSSVggaGVhZGVyIGZpbGVzIChjKSAxOTg4IFNpbGljb24gR3JhcGhpY3MKLSAqLwotCi0jaWZuZGVmCV9fRUZTX0ZTX0lfSF9fCi0jZGVmaW5lCV9fRUZTX0ZTX0lfSF9fCi0KLXR5cGVkZWYJaW50MzJfdAkJZWZzX2Jsb2NrX3Q7Ci10eXBlZGVmIHVpbnQzMl90CWVmc19pbm9fdDsKLQotI2RlZmluZQlFRlNfRElSRUNURVhURU5UUwkxMgotCi0vKgotICogbGF5b3V0IG9mIGFuIGV4dGVudCwgaW4gbWVtb3J5IGFuZCBvbiBkaXNrLiA4IGJ5dGVzIGV4YWN0bHkuCi0gKi8KLXR5cGVkZWYgdW5pb24gZXh0ZW50X3UgewotCXVuc2lnbmVkIGNoYXIgcmF3WzhdOwotCXN0cnVjdCBleHRlbnRfcyB7Ci0JCXVuc2lnbmVkIGludAlleF9tYWdpYzo4OwkvKiBtYWdpYyAjICh6ZXJvKSAqLwotCQl1bnNpZ25lZCBpbnQJZXhfYm46MjQ7CS8qIGJhc2ljIGJsb2NrICovCi0JCXVuc2lnbmVkIGludAlleF9sZW5ndGg6ODsJLyogbnVtYmxvY2tzIGluIHRoaXMgZXh0ZW50ICovCi0JCXVuc2lnbmVkIGludAlleF9vZmZzZXQ6MjQ7CS8qIGxvZ2ljYWwgb2Zmc2V0IGludG8gZmlsZSAqLwotCX0gY29va2VkOwotfSBlZnNfZXh0ZW50OwotCi10eXBlZGVmIHN0cnVjdCBlZGV2cyB7Ci0JX19iZTE2CQlvZGV2OwotCV9fYmUzMgkJbmRldjsKLX0gZWZzX2RldnM7Ci0KLS8qCi0gKiBleHRlbnQgYmFzZWQgZmlsZXN5c3RlbSBpbm9kZSBhcyBpdCBhcHBlYXJzIG9uIGRpc2suICBUaGUgZWZzIGlub2RlCi0gKiBpcyBleGFjdGx5IDEyOCBieXRlcyBsb25nLgotICovCi1zdHJ1Y3QJZWZzX2Rpbm9kZSB7Ci0JX19iZTE2CQlkaV9tb2RlOwkvKiBtb2RlIGFuZCB0eXBlIG9mIGZpbGUgKi8KLQlfX2JlMTYJCWRpX25saW5rOwkvKiBudW1iZXIgb2YgbGlua3MgdG8gZmlsZSAqLwotCV9fYmUxNgkJZGlfdWlkOwkJLyogb3duZXIncyB1c2VyIGlkICovCi0JX19iZTE2CQlkaV9naWQ7CQkvKiBvd25lcidzIGdyb3VwIGlkICovCi0JX19iZTMyCQlkaV9zaXplOwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gZmlsZSAqLwotCV9fYmUzMgkJZGlfYXRpbWU7CS8qIHRpbWUgbGFzdCBhY2Nlc3NlZCAqLwotCV9fYmUzMgkJZGlfbXRpbWU7CS8qIHRpbWUgbGFzdCBtb2RpZmllZCAqLwotCV9fYmUzMgkJZGlfY3RpbWU7CS8qIHRpbWUgY3JlYXRlZCAqLwotCV9fYmUzMgkJZGlfZ2VuOwkJLyogZ2VuZXJhdGlvbiBudW1iZXIgKi8KLQlfX2JlMTYJCWRpX251bWV4dGVudHM7CS8qICMgb2YgZXh0ZW50cyAqLwotCXVfY2hhcgkJZGlfdmVyc2lvbjsJLyogdmVyc2lvbiBvZiBpbm9kZSAqLwotCXVfY2hhcgkJZGlfc3BhcmU7CS8qIHNwYXJlIC0gdXNlZCBieSBBRlMgKi8KLQl1bmlvbiBkaV9hZGRyIHsKLQkJZWZzX2V4dGVudAlkaV9leHRlbnRzW0VGU19ESVJFQ1RFWFRFTlRTXTsKLQkJZWZzX2RldnMJZGlfZGV2OwkvKiBkZXZpY2UgZm9yIElGQ0hSL0lGQkxLICovCi0JfSBkaV91OwotfTsKLQotLyogZWZzIGlub2RlIHN0b3JhZ2UgaW4gbWVtb3J5ICovCi1zdHJ1Y3QgZWZzX2lub2RlX2luZm8gewotCWludAkJbnVtZXh0ZW50czsKLQlpbnQJCWxhc3RleHRlbnQ7Ci0KLQllZnNfZXh0ZW50CWV4dGVudHNbRUZTX0RJUkVDVEVYVEVOVFNdOwotCXN0cnVjdCBpbm9kZQl2ZnNfaW5vZGU7Ci19OwotCi0jZW5kaWYJLyogX19FRlNfRlNfSV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGZjb3JlLWNvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLWNvbXBhdC5oCmluZGV4IDUzMmQxM2EuLjBhOTBlMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmY29yZS1jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZmNvcmUtY29tcGF0LmgKQEAgLTQ1LDggKzQ1LDggQEAKIAljaGFyCQkJCXByX3pvbWI7CiAJY2hhcgkJCQlwcl9uaWNlOwogCWNvbXBhdF91bG9uZ190CQkJcHJfZmxhZzsKLQljb21wYXRfdWlkX3QJCQlwcl91aWQ7Ci0JY29tcGF0X2dpZF90CQkJcHJfZ2lkOworCV9fY29tcGF0X3VpZF90CQkJcHJfdWlkOworCV9fY29tcGF0X2dpZF90CQkJcHJfZ2lkOwogCWNvbXBhdF9waWRfdAkJCXByX3BpZCwgcHJfcHBpZCwgcHJfcGdycCwgcHJfc2lkOwogCWNoYXIJCQkJcHJfZm5hbWVbMTZdOwogCWNoYXIJCQkJcHJfcHNhcmdzW0VMRl9QUkFSR1NaXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmggYi9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oCmluZGV4IGE1OTc4ZjEuLjQzMzI0NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaApAQCAtODIsNyArODIsOCBAQAogCiBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCB7CiAJdm9pZCAqc2NyYXRjaDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNkZXY7CisJc3RydWN0IGRldmljZSBjZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAllbnVtIGVuY2xvc3VyZV9jb21wb25lbnRfdHlwZSB0eXBlOwogCWludCBudW1iZXI7CiAJaW50IGZhdWx0OwpAQCAtOTQsMjAgKzk1LDIwIEBACiBzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSB7CiAJdm9pZCAqc2NyYXRjaDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSBjZGV2OworCXN0cnVjdCBkZXZpY2UgZWRldjsKIAlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudF9jYWxsYmFja3MgKmNiOwogCWludCBjb21wb25lbnRzOwogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50IGNvbXBvbmVudFswXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKgotdG9fZW5jbG9zdXJlX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYpCit0b19lbmNsb3N1cmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UsIGNkZXYpOworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSwgZWRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKgotdG9fZW5jbG9zdXJlX2NvbXBvbmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYpCit0b19lbmNsb3N1cmVfY29tcG9uZW50KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQsIGNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCBmY2JlOGI2Li5jOGQyMTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMTIsNiArMTIsNyBAQAogI2lmbmRlZiBfTElOVVhfRVRIVE9PTF9ICiAjZGVmaW5lIF9MSU5VWF9FVEhUT09MX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGJvdGggMzIgYW5kIDY0IGJpdCB1c2VybGFuZC4gKi8KIHN0cnVjdCBldGh0b29sX2NtZCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmggYi9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmgKaW5kZXggNTFkMjE0MS4uYWRjYmIwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaApAQCAtNDksMTEgKzQ5LDExIEBACiAKIC8qKgogICogc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIC0gZm9yIG5mc2QgdG8gY29tbXVuaWNhdGUgd2l0aCBmaWxlIHN5c3RlbXMKLSAqIEBkZWNvZGVfZmg6ICAgICAgZGVjb2RlIGEgZmlsZSBoYW5kbGUgZnJhZ21lbnQgYW5kIHJldHVybiBhICZzdHJ1Y3QgZGVudHJ5CiAgKiBAZW5jb2RlX2ZoOiAgICAgIGVuY29kZSBhIGZpbGUgaGFuZGxlIGZyYWdtZW50IGZyb20gYSBkZW50cnkKKyAqIEBmaF90b19kZW50cnk6ICAgZmluZCB0aGUgaW1wbGllZCBvYmplY3QgYW5kIGdldCBhIGRlbnRyeSBmb3IgaXQKKyAqIEBmaF90b19wYXJlbnQ6ICAgZmluZCB0aGUgaW1wbGllZCBvYmplY3QncyBwYXJlbnQgYW5kIGdldCBhIGRlbnRyeSBmb3IgaXQKICAqIEBnZXRfbmFtZTogICAgICAgZmluZCB0aGUgbmFtZSBmb3IgYSBnaXZlbiBpbm9kZSBpbiBhIGdpdmVuIGRpcmVjdG9yeQogICogQGdldF9wYXJlbnQ6ICAgICBmaW5kIHRoZSBwYXJlbnQgb2YgYSBnaXZlbiBkaXJlY3RvcnkKLSAqIEBnZXRfZGVudHJ5OiAgICAgZmluZCBhIGRlbnRyeSBmb3IgdGhlIGlub2RlIGdpdmVuIGEgZmlsZSBoYW5kbGUgc3ViLWZyYWdtZW50CiAgKgogICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvRXhwb3J0aW5nIGZvciBkZXRhaWxzIG9uIGhvdyB0byB1c2UKICAqIHRoaXMgaW50ZXJmYWNlIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0NF9mc19leHRlbnRzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfZXh0ZW50cy5oCmluZGV4IDY5N2RhNGIuLjEyODVjNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0NF9mc19leHRlbnRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2V4dGVudHMuaApAQCAtMjI3LDUgKzIyNyw2IEBACiAJCQkJCQlleHQ0X2xibGtfdCAqLCBleHQ0X2ZzYmxrX3QgKik7CiBleHRlcm4gaW50IGV4dDRfZXh0X3NlYXJjaF9yaWdodChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0X3BhdGggKiwKIAkJCQkJCWV4dDRfbGJsa190ICosIGV4dDRfZnNibGtfdCAqKTsKK2V4dGVybiB2b2lkIGV4dDRfZXh0X2Ryb3BfcmVmcyhzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTsKICNlbmRpZiAvKiBfTElOVVhfRVhUNF9FWFRFTlRTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9maWxlLmgKaW5kZXggNzIzOWJhYS4uNjUzNDc3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9maWxlLmgKQEAgLTYxLDYgKzYxLDcgQEAKIAogZXh0ZXJuIHZvaWQgX19mcHV0KHN0cnVjdCBmaWxlICopOwogZXh0ZXJuIHZvaWQgZnB1dChzdHJ1Y3QgZmlsZSAqKTsKK2V4dGVybiB2b2lkIGRyb3BfZmlsZV93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUpOwogCiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zOwogc3RydWN0IHZmc21vdW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggZGRmYTAzNy4uYjZlYTlhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0zNywyMSArMzcsNiBAQAogCXN0cnVjdCBzb2NrX2ZpbHRlciBfX3VzZXIgKmZpbHRlcjsKIH07CiAKLSNpZmRlZiBfX0tFUk5FTF9fCi1zdHJ1Y3Qgc2tfZmlsdGVyCi17Ci0JYXRvbWljX3QJCXJlZmNudDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAJbGVuOwkvKiBOdW1iZXIgb2YgZmlsdGVyIGJsb2NrcyAqLwotCXN0cnVjdCByY3VfaGVhZAkJcmN1OwotCXN0cnVjdCBzb2NrX2ZpbHRlciAgICAgCWluc25zWzBdOwotfTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tfZmlsdGVyX2xlbihzdHJ1Y3Qgc2tfZmlsdGVyICpmcCkKLXsKLQlyZXR1cm4gZnAtPmxlbipzaXplb2Yoc3RydWN0IHNvY2tfZmlsdGVyKSArIHNpemVvZigqZnApOwotfQotI2VuZGlmCi0KIC8qCiAgKiBJbnN0cnVjdGlvbiBjbGFzc2VzCiAgKi8KQEAgLTEzNiwxNSArMTIxLDMxIEBACiAjZGVmaW5lIFNLRl9BRF9QUk9UT0NPTCAwCiAjZGVmaW5lIFNLRl9BRF9QS1RUWVBFIAk0CiAjZGVmaW5lIFNLRl9BRF9JRklOREVYIAk4Ci0jZGVmaW5lIFNLRl9BRF9NQVggCTEyCisjZGVmaW5lIFNLRl9BRF9OTEFUVFIJMTIKKyNkZWZpbmUgU0tGX0FEX01BWCAJMTYKICNkZWZpbmUgU0tGX05FVF9PRkYgICAoLTB4MTAwMDAwKQogI2RlZmluZSBTS0ZfTExfT0ZGICAgICgtMHgyMDAwMDApCiAKICNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3Qgc2tfZmlsdGVyCit7CisJYXRvbWljX3QJCXJlZmNudDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAJbGVuOwkvKiBOdW1iZXIgb2YgZmlsdGVyIGJsb2NrcyAqLworCXN0cnVjdCByY3VfaGVhZAkJcmN1OworCXN0cnVjdCBzb2NrX2ZpbHRlciAgICAgCWluc25zWzBdOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tfZmlsdGVyX2xlbihjb25zdCBzdHJ1Y3Qgc2tfZmlsdGVyICpmcCkKK3sKKwlyZXR1cm4gZnAtPmxlbiAqIHNpemVvZihzdHJ1Y3Qgc29ja19maWx0ZXIpICsgc2l6ZW9mKCpmcCk7Cit9CisKIHN0cnVjdCBza19idWZmOwogc3RydWN0IHNvY2s7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgc2tfcnVuX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlciwgaW50IGZsZW4pOworZXh0ZXJuIGludCBza19maWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2tfcnVuX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsIGludCBmbGVuKTsKIGV4dGVybiBpbnQgc2tfYXR0YWNoX2ZpbHRlcihzdHJ1Y3Qgc29ja19mcHJvZyAqZnByb2csIHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gaW50IHNrX2RldGFjaF9maWx0ZXIoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgc2tfY2hrX2ZpbHRlcihzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlciwgaW50IGZsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJtd2FyZS5oIGIvaW5jbHVkZS9saW51eC9maXJtd2FyZS5oCmluZGV4IDMzZDhmMjAuLjRkMTBjNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlybXdhcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLmgKQEAgLTEwLDcgKzEwLDEwIEBACiAJc2l6ZV90IHNpemU7CiAJdTggKmRhdGE7CiB9OworCiBzdHJ1Y3QgZGV2aWNlOworCisjaWYgZGVmaW5lZChDT05GSUdfRldfTE9BREVSKSB8fCBkZWZpbmVkKENPTkZJR19GV19MT0FERVJfTU9EVUxFKQogaW50IHJlcXVlc3RfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgc3RydWN0IGRldmljZSAqZGV2aWNlKTsKIGludCByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCgKQEAgLTE5LDQgKzIyLDI0IEBACiAJdm9pZCAoKmNvbnQpKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpKTsKIAogdm9pZCByZWxlYXNlX2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHJlcXVlc3RfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCgKKwlzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCB1ZXZlbnQsCisJY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpjb250ZXh0LAorCXZvaWQgKCpjb250KShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKK30KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA5OGZmYjZlLi4wYzYwOWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0yODcsOSArMjg3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9waWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnM7CkBAIC03NzYsNiArNzc2LDkgQEAKIAkJaW5kZXggPCAgcmEtPnN0YXJ0ICsgcmEtPnNpemUpOwogfQogCisjZGVmaW5lIEZJTEVfTU5UX1dSSVRFX1RBS0VOCTEKKyNkZWZpbmUgRklMRV9NTlRfV1JJVEVfUkVMRUFTRUQJMgorCiBzdHJ1Y3QgZmlsZSB7CiAJLyoKIAkgKiBmdV9saXN0IGJlY29tZXMgaW52YWxpZCBhZnRlciBmaWxlX2ZyZWUgaXMgY2FsbGVkIGFuZCBxdWV1ZWQgdmlhCkBAIC04MTAsNiArODEzLDkgQEAKIAlzcGlubG9ja190CQlmX2VwX2xvY2s7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19FUE9MTCAqLwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSpmX21hcHBpbmc7CisjaWZkZWYgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQKKwl1bnNpZ25lZCBsb25nIGZfbW50X3dyaXRlX3N0YXRlOworI2VuZGlmCiB9OwogZXh0ZXJuIHNwaW5sb2NrX3QgZmlsZXNfbG9jazsKICNkZWZpbmUgZmlsZV9saXN0X2xvY2soKSBzcGluX2xvY2soJmZpbGVzX2xvY2spOwpAQCAtODE4LDYgKzgyNCw0OSBAQAogI2RlZmluZSBnZXRfZmlsZSh4KQlhdG9taWNfaW5jKCYoeCktPmZfY291bnQpCiAjZGVmaW5lIGZpbGVfY291bnQoeCkJYXRvbWljX3JlYWQoJih4KS0+Zl9jb3VudCkKIAorI2lmZGVmIENPTkZJR19ERUJVR19XUklURUNPVU5UCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsZV90YWtlX3dyaXRlKHN0cnVjdCBmaWxlICpmKQoreworCVdBUk5fT04oZi0+Zl9tbnRfd3JpdGVfc3RhdGUgIT0gMCk7CisJZi0+Zl9tbnRfd3JpdGVfc3RhdGUgPSBGSUxFX01OVF9XUklURV9UQUtFTjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxlX3JlbGVhc2Vfd3JpdGUoc3RydWN0IGZpbGUgKmYpCit7CisJZi0+Zl9tbnRfd3JpdGVfc3RhdGUgfD0gRklMRV9NTlRfV1JJVEVfUkVMRUFTRUQ7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZmlsZV9yZXNldF93cml0ZShzdHJ1Y3QgZmlsZSAqZikKK3sKKwlmLT5mX21udF93cml0ZV9zdGF0ZSA9IDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZmlsZV9jaGVja19zdGF0ZShzdHJ1Y3QgZmlsZSAqZikKK3sKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIGVpdGhlciBib3RoIG9yIG5laXRoZXIgb2YgdGhlc2UgYml0cworCSAqIHNob3VsZCBiZSBzZXQuCisJICovCisJV0FSTl9PTihmLT5mX21udF93cml0ZV9zdGF0ZSA9PSBGSUxFX01OVF9XUklURV9UQUtFTik7CisJV0FSTl9PTihmLT5mX21udF93cml0ZV9zdGF0ZSA9PSBGSUxFX01OVF9XUklURV9SRUxFQVNFRCk7Cit9CitzdGF0aWMgaW5saW5lIGludCBmaWxlX2NoZWNrX3dyaXRlYWJsZShzdHJ1Y3QgZmlsZSAqZikKK3sKKwlpZiAoZi0+Zl9tbnRfd3JpdGVfc3RhdGUgPT0gRklMRV9NTlRfV1JJVEVfVEFLRU4pCisJCXJldHVybiAwOworCXByaW50ayhLRVJOX1dBUk5JTkcgIndyaXRlYWJsZSBmaWxlIHdpdGggbm8gIgorCQkJICAgICJtbnRfd2FudF93cml0ZSgpXG4iKTsKKwlXQVJOX09OKDEpOworCXJldHVybiAtRUlOVkFMOworfQorI2Vsc2UgLyogIUNPTkZJR19ERUJVR19XUklURUNPVU5UICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsZV90YWtlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGZpbGVfcmVsZWFzZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxlX3Jlc2V0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGZpbGVfY2hlY2tfc3RhdGUoc3RydWN0IGZpbGUgKmZpbHApIHt9CitzdGF0aWMgaW5saW5lIGludCBmaWxlX2NoZWNrX3dyaXRlYWJsZShzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCAqLworCiAjZGVmaW5lCU1BWF9OT05fTEZTCSgoMVVMPDwzMSkgLSAxKQogCiAvKiBQYWdlIGNhY2hlIGxpbWl0LiBUaGUgZmlsZXN5c3RlbXMgc2hvdWxkIHB1dCB0aGF0IGludG8gdGhlaXIgc19tYXhieXRlcyAKQEAgLTE1OTAsNyArMTYzOSw2IEBACiBleHRlcm4gdm9pZCBiZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZCBiZHB1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKm9wZW5fYnlfZGV2bnVtKGRldl90LCB1bnNpZ25lZCk7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBkZWZfYmxrX2FvcHM7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQogI2VuZGlmCkBAIC0xNzM2LDcgKzE3ODQsOCBAQAogZXh0ZXJuIHN0cnVjdCBmaWxlICpjcmVhdGVfd3JpdGVfcGlwZSh2b2lkKTsKIGV4dGVybiB2b2lkIGZyZWVfd3JpdGVfcGlwZShzdHJ1Y3QgZmlsZSAqKTsKIAotZXh0ZXJuIGludCBvcGVuX25hbWVpKGludCBkZmQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CitleHRlcm4gc3RydWN0IGZpbGUgKmRvX2ZpbHBfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwKKwkJaW50IG9wZW5fZmxhZywgaW50IG1vZGUpOwogZXh0ZXJuIGludCBtYXlfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICosIGludCwgaW50KTsKIAogZXh0ZXJuIGludCBrZXJuZWxfcmVhZChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCmluZGV4IDE4MzFiMTkuLjJjYWQ1YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKQEAgLTUwLDcgKzUwLDcgQEAKIAl1MzIJZGV2aWNlX2ZsYWdzOwogCS8qIGJvYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uICovCiAJdTMyCWJvYXJkX2ZsYWdzOwotCXUzMglidXNfaWQ7CisJY2hhcglidXNfaWRbTUlJX0JVU19JRF9TSVpFXTsKIAl1MzIJcGh5X2lkOwogCXU4CW1hY19hZGRyWzZdOwogCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKaW5kZXggOTAwNDhmYi4uNTg2YWI1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaApAQCAtMTY3LDYgKzE2Nyw3IEBACiAjaWZkZWYgQ09ORklHX0ZVVEVYCiBleHRlcm4gdm9pZCBleGl0X3JvYnVzdF9saXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vycik7CiBleHRlcm4gdm9pZCBleGl0X3BpX3N0YXRlX2xpc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKTsKK2V4dGVybiBpbnQgZnV0ZXhfY21weGNoZ19lbmFibGVkOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3JvYnVzdF9saXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCAwOWEzYjE4Li5lY2QyYmY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC0xOCwxMSArMTgsMTMgQEAKICNkZWZpbmUgZGV2X3RvX2Rpc2soZGV2aWNlKSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgZ2VuZGlzaywgZGV2KQogI2RlZmluZSBkZXZfdG9fcGFydChkZXZpY2UpIGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBoZF9zdHJ1Y3QsIGRldikKIAotZXh0ZXJuIHN0cnVjdCBkZXZpY2VfdHlwZSBkaXNrX3R5cGU7CiBleHRlcm4gc3RydWN0IGRldmljZV90eXBlIHBhcnRfdHlwZTsKIGV4dGVybiBzdHJ1Y3Qga29iamVjdCAqYmxvY2tfZGVwcjsKIGV4dGVybiBzdHJ1Y3QgY2xhc3MgYmxvY2tfY2xhc3M7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFydGl0aW9uc19vcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGlza3N0YXRzX29wOworCiBlbnVtIHsKIC8qIFRoZXNlIHRocmVlIGhhdmUgaWRlbnRpY2FsIGJlaGF2aW91cjsgdXNlIHRoZSBzZWNvbmQgb25lIGlmIERPUyBGRElTSyBnZXRzCiAgICBjb25mdXNlZCBhYm91dCBleHRlbmRlZC9sb2dpY2FsIHBhcnRpdGlvbnMgc3RhcnRpbmcgcGFzdCBjeWxpbmRlciAxMDIzLiAqLwpAQCAtNTMsMjQgKzU1LDYgQEAKIAlVTklYV0FSRV9QQVJUSVRJT04gPSAweDYzLAkvKiBTYW1lIGFzIEdOVV9IVVJEIGFuZCBTQ08gVW5peCAqLwogfTsKIAotI2lmbmRlZiBfX0tFUk5FTF9fCi0KLXN0cnVjdCBwYXJ0aXRpb24gewotCXVuc2lnbmVkIGNoYXIgYm9vdF9pbmQ7CQkvKiAweDgwIC0gYWN0aXZlICovCi0JdW5zaWduZWQgY2hhciBoZWFkOwkJLyogc3RhcnRpbmcgaGVhZCAqLwotCXVuc2lnbmVkIGNoYXIgc2VjdG9yOwkJLyogc3RhcnRpbmcgc2VjdG9yICovCi0JdW5zaWduZWQgY2hhciBjeWw7CQkvKiBzdGFydGluZyBjeWxpbmRlciAqLwotCXVuc2lnbmVkIGNoYXIgc3lzX2luZDsJCS8qIFdoYXQgcGFydGl0aW9uIHR5cGUgKi8KLQl1bnNpZ25lZCBjaGFyIGVuZF9oZWFkOwkJLyogZW5kIGhlYWQgKi8KLQl1bnNpZ25lZCBjaGFyIGVuZF9zZWN0b3I7CS8qIGVuZCBzZWN0b3IgKi8KLQl1bnNpZ25lZCBjaGFyIGVuZF9jeWw7CQkvKiBlbmQgY3lsaW5kZXIgKi8KLQl1bnNpZ25lZCBpbnQgc3RhcnRfc2VjdDsJLyogc3RhcnRpbmcgc2VjdG9yIGNvdW50aW5nIGZyb20gMCAqLwotCXVuc2lnbmVkIGludCBucl9zZWN0czsJCS8qIG5yIG9mIHNlY3RvcnMgaW4gcGFydGl0aW9uICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jZW5kaWYKLQotI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtMjI2LDcgKzIxMCw3IEBACiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGRpc2tfc3RhdHMpKTsKIH0KIAkJCQkKLSNlbHNlCisjZWxzZSAvKiAhQ09ORklHX1NNUCAqLwogI2RlZmluZSBfX2Rpc2tfc3RhdF9hZGQoZ2VuZGlza3AsIGZpZWxkLCBhZGRuZCkgXAogCQkJCShnZW5kaXNrcC0+ZGtzdGF0cy5maWVsZCArPSBhZGRuZCkKICNkZWZpbmUgZGlza19zdGF0X3JlYWQoZ2VuZGlza3AsIGZpZWxkKQkoZ2VuZGlza3AtPmRrc3RhdHMuZmllbGQpCkBAIC0yNTQsNyArMjM4LDcgQEAKIAltZW1zZXQoJnBhcnQtPmRrc3RhdHMsIHZhbHVlLCBzaXplb2Yoc3RydWN0IGRpc2tfc3RhdHMpKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjZGVmaW5lIGRpc2tfc3RhdF9hZGQoZ2VuZGlza3AsIGZpZWxkLCBhZGRuZCkJCQlcCiAJZG8gewkJCQkJCQlcCkBAIC0zOTMsOCArMzc3LDYgQEAKIAlkaXNrLT5jYXBhY2l0eSA9IHNpemU7CiB9CiAKLSNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCi0KICNpZmRlZiBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OCiAKICNkZWZpbmUgU09MQVJJU19YODZfTlVNU0xJQ0UJMTYKQEAgLTUzOCw4ICs1MjAsNiBAQAogIyAgIGRlZmluZSBNSU5JWF9OUl9TVUJQQVJUSVRJT05TICA0CiAjZW5kaWYgLyogQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjZGVmaW5lIEFERFBBUlRfRkxBR19OT05FCTAKICNkZWZpbmUgQUREUEFSVF9GTEFHX1JBSUQJMQogI2RlZmluZSBBRERQQVJUX0ZMQUdfV0hPTEVESVNLCTIKQEAgLTU1Niw3ICs1MzYsNiBAQAogZXh0ZXJuIHN0cnVjdCBnZW5kaXNrICphbGxvY19kaXNrKGludCBtaW5vcnMpOwogZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICpnZXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiBleHRlcm4gdm9pZCBwdXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7Ci1leHRlcm4gdm9pZCBnZW5oZF9tZWRpYV9jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIGJsa19yZWdpc3Rlcl9yZWdpb24oZGV2X3QgZGV2dCwgdW5zaWduZWQgbG9uZyByYW5nZSwKIAkJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKIAkJCXN0cnVjdCBrb2JqZWN0ICooKnByb2JlKShkZXZfdCwgaW50ICosIHZvaWQgKiksCkBAIC01NjksOCArNTQ4LDYgQEAKIAlyZXR1cm4gYmRnZXQoTUtERVYoZGlzay0+bWFqb3IsIGRpc2stPmZpcnN0X21pbm9yKSArIGluZGV4KTsKIH0KIAotI2VuZGlmCi0KICNlbHNlIC8qIENPTkZJR19CTE9DSyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2FsbF9wYXJ0aXRpb25zKHZvaWQpIHsgfQpAQCAtNTgzLDQgKzU2MCw0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgKi8KIAotI2VuZGlmCisjZW5kaWYgLyogX0xJTlVYX0dFTkhEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4N2E4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZ3Bpby5oCkBAIC0wLDAgKzEsOTUgQEAKKyNpZm5kZWYgX19MSU5VWF9HUElPX0gKKyNkZWZpbmUgX19MSU5VWF9HUElPX0gKKworLyogc2VlIERvY3VtZW50YXRpb24vZ3Bpby50eHQgKi8KKworI2lmZGVmIENPTkZJR19HRU5FUklDX0dQSU8KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorCisjZWxzZQorCisvKgorICogU29tZSBwbGF0Zm9ybXMgZG9uJ3Qgc3VwcG9ydCB0aGUgR1BJTyBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCisgKgorICogSW4gY2FzZSBzb21lIGRyaXZlciB1c2VzIGl0IGFueXdheSAoaXQgc2hvdWxkIG5vcm1hbGx5IGhhdmUKKyAqIGRlcGVuZGVkIG9uIEdFTkVSSUNfR1BJTyksIHRoZXNlIHJvdXRpbmVzIGhlbHAgdGhlIGNvbXBpbGVyCisgKiBvcHRpbWl6ZSBvdXQgbXVjaCBHUElPLXJlbGF0ZWQgY29kZSAuLi4gb3IgdHJpZ2dlciBhIHJ1bnRpbWUKKyAqIHdhcm5pbmcgd2hlbiBzb21ldGhpbmcgaXMgd3JvbmdseSBjYWxsZWQuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKK3sKKwkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gcmVxdWVzdGVkICovCisJV0FSTl9PTigxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3sKKwkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gcmVxdWVzdGVkIG9yIHNldCBhcyB7aW4sb3V0fXB1dCAqLworCVdBUk5fT04oMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJLyogR1BJTyBjYW4gbmV2ZXIgaGF2ZSBiZWVuIHJlcXVlc3RlZCBvciBzZXQgYXMgb3V0cHV0ICovCisJV0FSTl9PTigxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBncGlvKQoreworCS8qIEdQSU8gY2FuIG5ldmVyIGhhdmUgYmVlbiByZXF1ZXN0ZWQgb3Igc2V0IGFzIHtpbixvdXR9cHV0ICovCisJV0FSTl9PTigxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAodW5zaWduZWQgZ3BpbykKK3sKKwkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gcmVxdWVzdGVkIG9yIHNldCBhcyB7aW4sb3V0fXB1dCAqLworCVdBUk5fT04oMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJLyogR1BJTyBjYW4gbmV2ZXIgaGF2ZSBiZWVuIHJlcXVlc3RlZCBvciBzZXQgYXMgb3V0cHV0ICovCisJV0FSTl9PTigxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKK3sKKwkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gcmVxdWVzdGVkIG9yIHNldCBhcyBpbnB1dCAqLworCVdBUk5fT04oMSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKK3sKKwkvKiBpcnEgY2FuIG5ldmVyIGhhdmUgYmVlbiByZXR1cm5lZCBmcm9tIGdwaW9fdG9faXJxKCkgKi8KKwlXQVJOX09OKDEpOworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTElOVVhfR1BJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaCBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCmluZGV4IDI5NjFlYzcuLjg5N2Y3MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCkBAIC03Miw2ICs3MiwxMyBAQAogI2RlZmluZSBpbl9zb2Z0aXJxKCkJCShzb2Z0aXJxX2NvdW50KCkpCiAjZGVmaW5lIGluX2ludGVycnVwdCgpCQkoaXJxX2NvdW50KCkpCiAKKy8qCisgKiBBcmUgd2UgcnVubmluZyBpbiBhdG9taWMgY29udGV4dD8gIFdBUk5JTkc6IHRoaXMgbWFjcm8gY2Fubm90CisgKiBhbHdheXMgZGV0ZWN0IGF0b21pYyBjb250ZXh0OyBpbiBwYXJ0aWN1bGFyLCBpdCBjYW5ub3Qga25vdyBhYm91dAorICogaGVsZCBzcGlubG9ja3MgaW4gbm9uLXByZWVtcHRpYmxlIGtlcm5lbHMuICBUaHVzIGl0IHNob3VsZCBub3QgYmUKKyAqIHVzZWQgaW4gdGhlIGdlbmVyYWwgY2FzZSB0byBkZXRlcm1pbmUgd2hldGhlciBzbGVlcGluZyBpcyBwb3NzaWJsZS4KKyAqIERvIG5vdCB1c2UgaW5fYXRvbWljKCkgaW4gZHJpdmVyIGNvZGUuCisgKi8KICNkZWZpbmUgaW5fYXRvbWljKCkJCSgocHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFKSAhPSAwKQogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKQEAgLTEwOSw2ICsxMTYsMTQgQEAKIH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpICYmIGRlZmluZWQoQ09ORklHX05PX0haKQorZXh0ZXJuIHZvaWQgcmN1X2lycV9lbnRlcih2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9pcnFfZXhpdCh2b2lkKTsKKyNlbHNlCisjIGRlZmluZSByY3VfaXJxX2VudGVyKCkgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X2lycV9leGl0KCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUX1JDVSAqLworCiAvKgogICogSXQgaXMgc2FmZSB0byBkbyBub24tYXRvbWljIG9wcyBvbiAtPmhhcmRpcnFfY29udGV4dCwKICAqIGJlY2F1c2UgTk1JIGhhbmRsZXJzIG1heSBub3QgcHJlZW1wdCBhbmQgdGhlIG9wcyBhcmUKQEAgLTExNyw2ICsxMzIsNyBAQAogICovCiAjZGVmaW5lIF9faXJxX2VudGVyKCkJCQkJCVwKIAlkbyB7CQkJCQkJXAorCQlyY3VfaXJxX2VudGVyKCk7CQkJXAogCQlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsJCVwKIAkJYWRkX3ByZWVtcHRfY291bnQoSEFSRElSUV9PRkZTRVQpOwlcCiAJCXRyYWNlX2hhcmRpcnFfZW50ZXIoKTsJCQlcCkBAIC0xMzUsNiArMTUxLDcgQEAKIAkJdHJhY2VfaGFyZGlycV9leGl0KCk7CQkJXAogCQlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsJCVwKIAkJc3ViX3ByZWVtcHRfY291bnQoSEFSRElSUV9PRkZTRVQpOwlcCisJCXJjdV9pcnFfZXhpdCgpOwkJCQlcCiAJfSB3aGlsZSAoMCkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRyZWcuaCBiL2luY2x1ZGUvbGludXgvaGRyZWcuaAppbmRleCBlMzhlNzU5Li5jMzdlOTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkcmVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9oZHJlZy5oCkBAIC00MjIsOSArNDIyLDExIEBACiAjZGVmaW5lIEhESU9fU0VUX05PV0VSUgkJMHgwMzI1CS8qIGNoYW5nZSBpZ25vcmUtd3JpdGUtZXJyb3IgZmxhZyAqLwogI2RlZmluZSBIRElPX1NFVF9ETUEJCTB4MDMyNgkvKiBjaGFuZ2UgdXNlLWRtYSBmbGFnICovCiAjZGVmaW5lIEhESU9fU0VUX1BJT19NT0RFCTB4MDMyNwkvKiByZWNvbmZpZyBpbnRlcmZhY2UgdG8gbmV3IHNwZWVkICovCisjaWZuZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgSERJT19TQ0FOX0hXSUYJCTB4MDMyOAkvKiByZWdpc3RlciBhbmQgKHJlKXNjYW4gaW50ZXJmYWNlICovCi0jZGVmaW5lIEhESU9fU0VUX05JQ0UJCTB4MDMyOQkvKiBzZXQgbmljZSBmbGFncyAqLwogI2RlZmluZSBIRElPX1VOUkVHSVNURVJfSFdJRgkweDAzMmEgIC8qIHVucmVnaXN0ZXIgaW50ZXJmYWNlICovCisjZW5kaWYKKyNkZWZpbmUgSERJT19TRVRfTklDRQkJMHgwMzI5CS8qIHNldCBuaWNlIGZsYWdzICovCiAjZGVmaW5lIEhESU9fU0VUX1dDQUNIRQkJMHgwMzJiCS8qIGNoYW5nZSB3cml0ZSBjYWNoZSBlbmFibGUtZGlzYWJsZSAqLwogI2RlZmluZSBIRElPX1NFVF9BQ09VU1RJQwkweDAzMmMJLyogY2hhbmdlIGFjb3VzdGljIGJlaGF2aW9yICovCiAjZGVmaW5lIEhESU9fU0VUX0JVU1NUQVRFCTB4MDMyZAkvKiBzZXQgdGhlIGJ1cyBzdGF0ZSBvZiB0aGUgaHdpZiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZHNtYXJ0LmggYi9pbmNsdWRlL2xpbnV4L2hkc21hcnQuaAppbmRleCBlNjkxOTIxLi40ZjRmYWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkc21hcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkc21hcnQuaApAQCAtMTcsNyArMTcsNyBAQAogI2lmbmRlZiBfTElOVVhfSERTTUFSVF9ICiAjZGVmaW5lIF9MSU5VWF9IRFNNQVJUX0gKIAotI2lmbmRlZiBfX0tFUk5FTAorI2lmbmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIE9GRkxJTkVfRlVMTF9TQ0FOCQkwCiAjZGVmaW5lIFNIT1JUX1NFTEZfVEVTVAkJCTEKICNkZWZpbmUgRVhURU5EX1NFTEZfVEVTVAkJMgpAQCAtMTIxLDYgKzEyMSw2IEBACiAJdW5zaWduZWQgY2hhcgkJCXJlc2V2ZXJlZFsyXTsKIAl1bnNpZ25lZCBjaGFyCQkJY2hrc3VtOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X3NlbGZ0ZXN0bG9nX3Q7Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0xJTlVYX0hEU01BUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWxfbWxjLmggYi9pbmNsdWRlL2xpbnV4L2hpbF9tbGMuaAppbmRleCA4ZGYyOWNhLi4zOTRhODQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpbF9tbGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpbF9tbGMuaApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHBldC5oIGIvaW5jbHVkZS9saW51eC9ocGV0LmgKaW5kZXggOWNkOTRiZi4uMmRjMjljZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocGV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9ocGV0LmgKQEAgLTY0LDcgKzY0LDcgQEAKICAqLwogCiAjZGVmaW5lCVRuX0lOVF9ST1VURV9DQVBfTUFTSwkJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkKLSNkZWZpbmUJVG5fSU5UX1JPVVRFX0NBUF9TSElGVAkJKDMyVUwpCisjZGVmaW5lCVRuX0lOSV9ST1VURV9DQVBfU0hJRlQJCSgzMlVMKQogI2RlZmluZQlUbl9GU0JfSU5UX0RFTENBUF9NQVNLCQkoMHg4MDAwVUwpCiAjZGVmaW5lCVRuX0ZTQl9JTlRfREVMQ0FQX1NISUZUCQkoMTUpCiAjZGVmaW5lCVRuX0ZTQl9FTl9DTkZfTUFTSwkJKDB4NDAwMFVMKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAppbmRleCAxYWQ1NmE3Li41NmYzMjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaApAQCAtMTczLDcgKzE3Myw2IEBACiAgKiBzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAtIHRoZSBwZXIgY3B1IGNsb2NrIGJhc2VzCiAgKiBAbG9jazoJCWxvY2sgcHJvdGVjdGluZyB0aGUgYmFzZSBhbmQgYXNzb2NpYXRlZCBjbG9jayBiYXNlcwogICoJCQlhbmQgdGltZXJzCi0gKiBAbG9ja19rZXk6CQl0aGUgbG9ja19jbGFzc19rZXkgZm9yIHVzZSB3aXRoIGxvY2tkZXAKICAqIEBjbG9ja19iYXNlOgkJYXJyYXkgb2YgY2xvY2sgYmFzZXMgZm9yIHRoaXMgY3B1CiAgKiBAY3Vycl90aW1lcjoJCXRoZSB0aW1lciB3aGljaCBpcyBleGVjdXRpbmcgYSBjYWxsYmFjayByaWdodCBub3cKICAqIEBleHBpcmVzX25leHQ6CWFic29sdXRlIHRpbWUgb2YgdGhlIG5leHQgZXZlbnQgd2hpY2ggd2FzIHNjaGVkdWxlZApAQCAtMTg5LDcgKzE4OCw2IEBACiAgKi8KIHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlIHsKIAlzcGlubG9ja190CQkJbG9jazsKLQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkJCWxvY2tfa2V5OwogCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UJY2xvY2tfYmFzZVtIUlRJTUVSX01BWF9DTE9DS19CQVNFU107CiAJc3RydWN0IGxpc3RfaGVhZAkJY2JfcGVuZGluZzsKICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h3X3JhbmRvbS5oIGIvaW5jbHVkZS9saW51eC9od19yYW5kb20uaAppbmRleCA0MjEzMTgyLi44NWQxMTkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h3X3JhbmRvbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaHdfcmFuZG9tLmgKQEAgLTQ0LDE1ICs0NCw3IEBACiAvKiogUmVnaXN0ZXIgYSBuZXcgSGFyZHdhcmUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgZHJpdmVyLiAqLwogZXh0ZXJuIGludCBod3JuZ19yZWdpc3RlcihzdHJ1Y3QgaHdybmcgKnJuZyk7CiAvKiogVW5yZWdpc3RlciBhIEhhcmR3YXJlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIGRyaXZlci4gKi8KLWV4dGVybiB2b2lkIF9faHdybmdfdW5yZWdpc3RlcihzdHJ1Y3QgaHdybmcgKnJuZywgYm9vbCBzdXNwZW5kZWQpOwotc3RhdGljIGlubGluZSB2b2lkIGh3cm5nX3VucmVnaXN0ZXIoc3RydWN0IGh3cm5nICpybmcpCi17Ci0JX19od3JuZ191bnJlZ2lzdGVyKHJuZywgZmFsc2UpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGh3cm5nX3VucmVnaXN0ZXJfc3VzcGVuZGVkKHN0cnVjdCBod3JuZyAqcm5nKQotewotCV9faHdybmdfdW5yZWdpc3RlcihybmcsIHRydWUpOwotfQorZXh0ZXJuIHZvaWQgaHdybmdfdW5yZWdpc3RlcihzdHJ1Y3QgaHdybmcgKnJuZyk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogTElOVVhfSFdSQU5ET01fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDc2MDE0ZjguLjM2NWUwZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMjcxLDkgKzI3MSwxNiBAQAogICogVGhpcyBpcyBkb25lIGF0IGFyY2hfaW5pdGNhbGwgdGltZSwgYmVmb3JlIGRlY2xhcmluZyBhbnkgaTJjIGFkYXB0ZXJzLgogICogTW9kdWxlcyBmb3IgYWRkLW9uIGJvYXJkcyBtdXN0IHVzZSBvdGhlciBjYWxscy4KICAqLworI2lmZGVmIENPTkZJR19JMkNfQk9BUkRJTkZPCiBleHRlcm4gaW50CiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpbnQgYnVzbnVtLCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sIHVuc2lnbmVkIG4pOwotCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQKK2kyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKGludCBidXNudW0sIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywgdW5zaWduZWQgbikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKgogICogVGhlIGZvbGxvd2luZyBzdHJ1Y3RzIGFyZSBmb3IgdGhvc2Ugd2hvIGxpa2UgdG8gaW1wbGVtZW50IG5ldyBidXMgZHJpdmVyczoKQEAgLTU5OCw3ICs2MDUsNyBAQAogCQkgICAgICAgImFkZGl0aW9uYWxseSIpOwkJCQkJXAogSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShpZ25vcmUsICJMaXN0IG9mIGFkYXB0ZXIsYWRkcmVzcyBwYWlycyBub3QgdG8gIglcCiAJCSAgICAgICAic2NhbiIpOwkJCQkJCVwKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7CQlcCiAJLm5vcm1hbF9pMmMJPSBub3JtYWxfaTJjLAkJCQkJXAogCS5wcm9iZQkJPSBwcm9iZSwJCQkJCVwKIAkuaWdub3JlCQk9IGlnbm9yZSwJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3RwczY1MDEwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90cHM2NTAxMC5oCmluZGV4IDcwMjE2MzUuLjkxOGM1MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3RwczY1MDEwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHBzNjUwMTAuaApAQCAtMTUyLDUgKzE1MiwzNSBAQAogICovCiBleHRlcm4gaW50IHRwczY1MDEzX3NldF9sb3dfcHdyKHVuc2lnbmVkIG1vZGUpOwogCisKK3N0cnVjdCBpMmNfY2xpZW50OworCisvKioKKyAqIHN0cnVjdCB0cHM2NTAxMF9ib2FyZCAtIHBhY2thZ2VzIEdQSU8gYW5kIExFRCBsaW5lcworICogQGJhc2U6IHRoZSBHUElPIG51bWJlciB0byBhc3NpZ24gdG8gR1BJTy0xCisgKiBAb3V0bWFzazogYml0IChOLTEpIGlzIHNldCB0byBhbGxvdyBHUElPLU4gdG8gYmUgdXNlZCBhcyBhbgorICoJKG9wZW4gZHJhaW4pIG91dHB1dAorICogQHNldHVwOiBvcHRpb25hbCBjYWxsYmFjayBpc3N1ZWQgb25jZSB0aGUgR1BJT3MgYXJlIHZhbGlkCisgKiBAdGVhcmRvd246IG9wdGlvbmFsIGNhbGxiYWNrIGlzc3VlZCBiZWZvcmUgdGhlIEdQSU9zIGFyZSBpbnZhbGlkYXRlZAorICogQGNvbnRleHQ6IG9wdGlvbmFsIHBhcmFtZXRlciBwYXNzZWQgdG8gc2V0dXAoKSBhbmQgdGVhcmRvd24oKQorICoKKyAqIEJvYXJkIGRhdGEgbWF5IGJlIHVzZWQgdG8gcGFja2FnZSB0aGUgR1BJTyAoYW5kIExFRCkgbGluZXMgZm9yIHVzZQorICogaW4gYnkgdGhlIGdlbmVyaWMgR1BJTyBhbmQgTEVEIGZyYW1ld29ya3MuICBUaGUgZmlyc3QgZm91ciBHUElPcworICogc3RhcnRpbmcgYXQgZ3Bpb19iYXNlIGFyZSBHUElPMS4uR1BJTzQuICBUaGUgbmV4dCB0d28gYXJlIExFRDEvblBHCisgKiBhbmQgTEVEMiAod2l0aCBoYXJkd2FyZSBibGlua2luZyBjYXBhYmlsaXR5LCBub3QgY3VycmVudGx5IGV4cG9zZWQpLgorICoKKyAqIFRoZSBAc2V0dXAgY2FsbGJhY2sgbWF5IGJlIHVzZWQgd2l0aCB0aGUga2luZCBvZiBib2FyZC1zcGVjaWZpYyBnbHVlCisgKiB3aGljaCBoYW5kcyB0aGUgKG5vdy12YWxpZCkgR1BJT3MgdG8gb3RoZXIgZHJpdmVycywgb3Igd2hpY2ggcHV0cworICogZGV2aWNlcyBpbiB0aGVpciBpbml0aWFsIHN0YXRlcyB1c2luZyB0aGVzZSBHUElPcy4KKyAqLworc3RydWN0IHRwczY1MDEwX2JvYXJkIHsKKwlpbnQJCQkJYmFzZTsKKwl1bnNpZ25lZAkJCW91dG1hc2s7CisKKwlpbnQJCSgqc2V0dXApKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHZvaWQgKmNvbnRleHQpOworCWludAkJKCp0ZWFyZG93bikoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdm9pZCAqY29udGV4dCk7CisJdm9pZAkJKmNvbnRleHQ7Cit9OworCiAjZW5kaWYgLyogIF9fTElOVVhfSTJDX1RQUzY1MDEwX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8uaCBiL2luY2x1ZGUvbGludXgvaTJvLmgKaW5kZXggN2RhNWI5OC4uZTkyMTcwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyby5oCkBAIC0zMyw5ICszMyw5IEBACiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4JLyogTmVlZGVkIGZvciBNVVRFWCBpbml0IG1hY3JvcyAqLwogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgkvKiBOZWVkZWQgZm9yIE1VVEVYIGluaXQgbWFjcm9zICovCiAKIC8qIG1lc3NhZ2UgcXVldWUgZW1wdHkgKi8KICNkZWZpbmUgSTJPX1FVRVVFX0VNUFRZCQkweGZmZmZmZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaAppbmRleCA3YzVlOTgxLi4wMzA2NzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTE3NiwxMiArMTc2LDIxIEBACiAJCQkJCQkgICAgX191MzIgaW5mbywgCiAJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQJCQkJaWNtcHY2X2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcyk7CitleHRlcm4gaW50CQkJCWljbXB2Nl9pbml0KHZvaWQpOwogZXh0ZXJuIGludAkJCQlpY21wdjZfZXJyX2NvbnZlcnQoaW50IHR5cGUsIGludCBjb2RlLAogCQkJCQkJCSAgIGludCAqZXJyKTsKIGV4dGVybiB2b2lkCQkJCWljbXB2Nl9jbGVhbnVwKHZvaWQpOwogZXh0ZXJuIHZvaWQJCQkJaWNtcHY2X3BhcmFtX3Byb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCQkgIGludCBjb2RlLCBpbnQgcG9zKTsKKworc3RydWN0IGZsb3dpOworc3RydWN0IGluNl9hZGRyOworZXh0ZXJuIHZvaWQJCQkJaWNtcHY2X2Zsb3dfaW5pdChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkJIHN0cnVjdCBmbG93aSAqZmwsCisJCQkJCQkJIHU4IHR5cGUsCisJCQkJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCQkJIGludCBvaWYpOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggYTNiNjljMS4uNWYzZTgyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC0yMywxMCArMjMsOSBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9tdXRleC5oPgogCi0jaWYgZGVmaW5lZChDUklTKSB8fCBkZWZpbmVkKEZSVikKKyNpZiBkZWZpbmVkKENPTkZJR19DUklTKSB8fCBkZWZpbmVkKENPTkZJR19GUlYpCiAjIGRlZmluZSBTVVBQT1JUX1ZMQl9TWU5DIDAKICNlbHNlCiAjIGRlZmluZSBTVVBQT1JUX1ZMQl9TWU5DIDEKQEAgLTgyLDI0ICs4MSwxMCBAQAogCiAjZGVmaW5lIElERV9GRUFUVVJFX09GRlNFVAlJREVfRVJST1JfT0ZGU0VUCiAjZGVmaW5lIElERV9DT01NQU5EX09GRlNFVAlJREVfU1RBVFVTX09GRlNFVAotCi0jZGVmaW5lIElERV9EQVRBX1JFRwkJKEhXSUYoZHJpdmUpLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKQotI2RlZmluZSBJREVfRVJST1JfUkVHCQkoSFdJRihkcml2ZSktPmlvX3BvcnRzW0lERV9FUlJPUl9PRkZTRVRdKQotI2RlZmluZSBJREVfTlNFQ1RPUl9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX05TRUNUT1JfT0ZGU0VUXSkKLSNkZWZpbmUgSURFX1NFQ1RPUl9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX1NFQ1RPUl9PRkZTRVRdKQotI2RlZmluZSBJREVfTENZTF9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX0xDWUxfT0ZGU0VUXSkKLSNkZWZpbmUgSURFX0hDWUxfUkVHCQkoSFdJRihkcml2ZSktPmlvX3BvcnRzW0lERV9IQ1lMX09GRlNFVF0pCi0jZGVmaW5lIElERV9TRUxFQ1RfUkVHCQkoSFdJRihkcml2ZSktPmlvX3BvcnRzW0lERV9TRUxFQ1RfT0ZGU0VUXSkKLSNkZWZpbmUgSURFX1NUQVRVU19SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX1NUQVRVU19PRkZTRVRdKQotI2RlZmluZSBJREVfQ09OVFJPTF9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSkKLSNkZWZpbmUgSURFX0lSUV9SRUcJCShIV0lGKGRyaXZlKS0+aW9fcG9ydHNbSURFX0lSUV9PRkZTRVRdKQotCi0jZGVmaW5lIElERV9GRUFUVVJFX1JFRwkJSURFX0VSUk9SX1JFRwotI2RlZmluZSBJREVfQ09NTUFORF9SRUcJCUlERV9TVEFUVVNfUkVHCi0jZGVmaW5lIElERV9BTFRTVEFUVVNfUkVHCUlERV9DT05UUk9MX1JFRwotI2RlZmluZSBJREVfSVJFQVNPTl9SRUcJCUlERV9OU0VDVE9SX1JFRwotI2RlZmluZSBJREVfQkNPVU5UTF9SRUcJCUlERV9MQ1lMX1JFRwotI2RlZmluZSBJREVfQkNPVU5USF9SRUcJCUlERV9IQ1lMX1JFRworI2RlZmluZSBJREVfQUxUU1RBVFVTX09GRlNFVAlJREVfQ09OVFJPTF9PRkZTRVQKKyNkZWZpbmUgSURFX0lSRUFTT05fT0ZGU0VUCUlERV9OU0VDVE9SX09GRlNFVAorI2RlZmluZSBJREVfQkNPVU5UTF9PRkZTRVQJSURFX0xDWUxfT0ZGU0VUCisjZGVmaW5lIElERV9CQ09VTlRIX09GRlNFVAlJREVfSENZTF9PRkZTRVQKIAogI2RlZmluZSBPS19TVEFUKHN0YXQsZ29vZCxiYWQpCSgoKHN0YXQpJigoZ29vZCl8KGJhZCkpKT09KGdvb2QpKQogI2RlZmluZSBCQURfUl9TVEFUCQkoQlVTWV9TVEFUICAgfCBFUlJfU1RBVCkKQEAgLTE2OSw3ICsxNTQsNyBAQAogCQlpZGVfcnoxMDAwLAlpZGVfdHJtMjkwLAogCQlpZGVfY21kNjQ2LAlpZGVfY3k4MmM2OTMsCWlkZV80ZHJpdmVzLAogCQlpZGVfcG1hYywJaWRlX2V0cmF4MTAwLAlpZGVfYWNvcm4sCi0JCWlkZV9hdTF4eHgsCWlkZV9wYWxtMzcxMCwJaWRlX2ZvcmNlZAorCQlpZGVfYXUxeHh4LAlpZGVfcGFsbTM3MTAKIH07CiAKIHR5cGVkZWYgdTggaHdpZl9jaGlwc2V0X3Q7CkBAIC0xODYsMTQgKzE3MSw5IEBACiB9IGh3X3JlZ3NfdDsKIAogc3RydWN0IGh3aWZfcyAqIGlkZV9maW5kX3BvcnQodW5zaWduZWQgbG9uZyk7Ci1zdHJ1Y3QgaHdpZl9zICppZGVfZGVwcmVjYXRlZF9maW5kX3BvcnQodW5zaWduZWQgbG9uZyk7CiB2b2lkIGlkZV9pbml0X3BvcnRfZGF0YShzdHJ1Y3QgaHdpZl9zICosIHVuc2lnbmVkIGludCk7CiB2b2lkIGlkZV9pbml0X3BvcnRfaHcoc3RydWN0IGh3aWZfcyAqLCBod19yZWdzX3QgKik7CiAKLXN0cnVjdCBpZGVfZHJpdmVfczsKLWludCBpZGVfcmVnaXN0ZXJfaHcoaHdfcmVnc190ICosIHZvaWQgKCopKHN0cnVjdCBpZGVfZHJpdmVfcyAqKSwKLQkJICAgIHN0cnVjdCBod2lmX3MgKiopOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3N0ZF9pbml0X3BvcnRzKGh3X3JlZ3NfdCAqaHcsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpb19hZGRyLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY3RsX2FkZHIpCkBAIC0yMTMsNDUgKzE5Myw2IEBACiAjZGVmaW5lIE1BWF9IV0lGUwlDT05GSUdfSURFX01BWF9IV0lGUwogI2VuZGlmCiAKLS8qIG5lZWRlZCBvbiBhbHBoYSwgeDg2L3g4Nl82NCwgaWE2NCwgbWlwcywgcHBjMzIgYW5kIHNoICovCi0jaWZuZGVmIElERV9BUkNIX09CU09MRVRFX0RFRkFVTFRTCi0jIGRlZmluZSBpZGVfZGVmYXVsdF9pb19iYXNlKGluZGV4KQkoMCkKLSMgZGVmaW5lIGlkZV9kZWZhdWx0X2lycShiYXNlKQkJKDApCi0jIGRlZmluZSBpZGVfaW5pdF9kZWZhdWx0X2lycShiYXNlKQkoMCkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQKLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqaHcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fYWRkciwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdGxfYWRkciwKLQkJCQkgICAgICAgaW50ICppcnEpCi17Ci0JaWYgKCFjdGxfYWRkcikKLQkJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBpb19hZGRyLCBpZGVfZGVmYXVsdF9pb19jdGwoaW9fYWRkcikpOwotCWVsc2UKLQkJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBpb19hZGRyLCBjdGxfYWRkcik7Ci0KLQlpZiAoaXJxKQotCQkqaXJxID0gMDsKLQotCWh3LT5pb19wb3J0c1tJREVfSVJRX09GRlNFVF0gPSAwOwotCi0jaWZkZWYgQ09ORklHX1BQQzMyCi0JaWYgKHBwY19pZGVfbWQuaWRlX2luaXRfaHdpZikKLQkJcHBjX2lkZV9tZC5pZGVfaW5pdF9od2lmKGh3LCBpb19hZGRyLCBjdGxfYWRkciwgaXJxKTsKLSNlbmRpZgotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfaW5pdF9od2lmX3BvcnRzKGh3X3JlZ3NfdCAqaHcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fYWRkciwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdGxfYWRkciwKLQkJCQkgICAgICAgaW50ICppcnEpCi17Ci0JaWYgKGlvX2FkZHIgfHwgY3RsX2FkZHIpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtdXN0IG5vdCBiZSBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQgKi8KLQogLyogQ3VycmVudGx5IG9ubHkgbTY4aywgYXB1cyBhbmQgbTh4eCBuZWVkIGl0ICovCiAjaWZuZGVmIElERV9BUkNIX0FDS19JTlRSCiAjIGRlZmluZSBpZGVfYWNrX2ludHIoaHdpZikgKDEpCkBAIC00MDYsNyArMzQ3LDcgQEAKICAgICAgICAgdTgJd2NhY2hlOwkJLyogc3RhdHVzIG9mIHdyaXRlIGNhY2hlICovCiAJdTgJYWNvdXN0aWM7CS8qIGFjb3VzdGljIG1hbmFnZW1lbnQgKi8KIAl1OAltZWRpYTsJCS8qIGRpc2ssIGNkcm9tLCB0YXBlLCBmbG9wcHksIC4uLiAqLwotCXU4CWN0bDsJCS8qICJub3JtYWwiIHZhbHVlIGZvciBJREVfQ09OVFJPTF9SRUcgKi8KKwl1OAljdGw7CQkvKiAibm9ybWFsIiB2YWx1ZSBmb3IgQ29udHJvbCByZWdpc3RlciAqLwogCXU4CXJlYWR5X3N0YXQ7CS8qIG1pbiBzdGF0dXMgdmFsdWUgZm9yIGRyaXZlIHJlYWR5ICovCiAJdTgJbXVsdF9jb3VudDsJLyogY3VycmVudCBtdWx0aXBsZSBzZWN0b3Igc2V0dGluZyAqLwogCXU4CW11bHRfcmVxOwkvKiByZXF1ZXN0ZWQgbXVsdGlwbGUgc2VjdG9yIHNldHRpbmcgKi8KQEAgLTUwNyw4ICs0NDgsNiBAQAogCXZvaWQJKCptYXNrcHJvYykoaWRlX2RyaXZlX3QgKiwgaW50KTsKIAkvKiBjaGVjayBob3N0J3MgZHJpdmUgcXVpcmsgbGlzdCAqLwogCXZvaWQJKCpxdWlya3Byb2MpKGlkZV9kcml2ZV90ICopOwotCS8qIGRyaXZlciBzb2Z0LXBvd2VyIGludGVyZmFjZSAqLwotCWludAkoKmJ1c3Byb2MpKGlkZV9kcml2ZV90ICosIGludCk7CiAjZW5kaWYKIAl1OCAoKm1kbWFfZmlsdGVyKShpZGVfZHJpdmVfdCAqKTsKIAl1OCAoKnVkbWFfZmlsdGVyKShpZGVfZHJpdmVfdCAqKTsKQEAgLTU3OCw3ICs1MTcsNiBAQAogCiAJdW5zaWduZWQJbm9wcm9iZSAgICA6IDE7CS8qIGRvbid0IHByb2JlIGZvciB0aGlzIGludGVyZmFjZSAqLwogCXVuc2lnbmVkCXByZXNlbnQgICAgOiAxOwkvKiB0aGlzIGludGVyZmFjZSBleGlzdHMgKi8KLQl1bnNpZ25lZAlob2xkICAgICAgIDogMTsgLyogdGhpcyBpbnRlcmZhY2UgaXMgYWx3YXlzIHByZXNlbnQgKi8KIAl1bnNpZ25lZAlzZXJpYWxpemVkIDogMTsJLyogc2VyaWFsaXplZCBhbGwgY2hhbm5lbCBvcGVyYXRpb24gKi8KIAl1bnNpZ25lZAlzaGFyaW5nX2lycTogMTsJLyogMSA9IHNoYXJpbmcgaXJxIHdpdGggYW5vdGhlciBod2lmICovCiAJdW5zaWduZWQJcmVzZXQgICAgICA6IDE7CS8qIHJlc2V0IGFmdGVyIHByb2JlICovCkBAIC01ODYsNyArNTI0LDkgQEAKIAl1bnNpZ25lZAltbWlvICAgICAgIDogMTsgLyogaG9zdCB1c2VzIE1NSU8gKi8KIAl1bnNpZ25lZAlzdHJhaWdodDggIDogMTsJLyogQWxhbidzIHN0cmFpZ2h0IDggY2hlY2sgKi8KIAotCXN0cnVjdCBkZXZpY2UJZ2VuZGV2OworCXN0cnVjdCBkZXZpY2UJCWdlbmRldjsKKwlzdHJ1Y3QgZGV2aWNlCQkqcG9ydGRldjsKKwogCXN0cnVjdCBjb21wbGV0aW9uIGdlbmRldl9yZWxfY29tcDsgLyogVG8gZGVhbCB3aXRoIGRldmljZSByZWxlYXNlKCkgKi8KIAogCXZvaWQJCSpod2lmX2RhdGE7CS8qIGV4dHJhIGh3aWYgZGF0YSAqLwpAQCAtNjQ3LDYgKzU4Nyw2OCBAQAogaW50IHNldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCBpbnQpOwogaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKiwgaW50KTsKIAorLyogQVRBUEkgcGFja2V0IGNvbW1hbmQgZmxhZ3MgKi8KK2VudW0geworCS8qIHNldCB3aGVuIGFuIGVycm9yIGlzIGNvbnNpZGVyZWQgbm9ybWFsIC0gbm8gcmV0cnkgKGlkZS10YXBlKSAqLworCVBDX0ZMQUdfQUJPUlQJCQk9ICgxIDw8IDApLAorCVBDX0ZMQUdfU1VQUFJFU1NfRVJST1IJCT0gKDEgPDwgMSksCisJUENfRkxBR19XQUlUX0ZPUl9EU0MJCT0gKDEgPDwgMiksCisJUENfRkxBR19ETUFfT0sJCQk9ICgxIDw8IDMpLAorCVBDX0ZMQUdfRE1BX1JFQ09NTUVOREVECQk9ICgxIDw8IDQpLAorCVBDX0ZMQUdfRE1BX0lOX1BST0dSRVNTCQk9ICgxIDw8IDUpLAorCVBDX0ZMQUdfRE1BX0VSUk9SCQk9ICgxIDw8IDYpLAorCVBDX0ZMQUdfV1JJVElORwkJCT0gKDEgPDwgNyksCisJLyogY29tbWFuZCB0aW1lZCBvdXQgKi8KKwlQQ19GTEFHX1RJTUVET1VUCQk9ICgxIDw8IDgpLAorfTsKKworc3RydWN0IGlkZV9hdGFwaV9wYyB7CisJLyogYWN0dWFsIHBhY2tldCBieXRlcyAqLworCXU4IGNbMTJdOworCS8qIGluY3JlbWVudGVkIG9uIGVhY2ggcmV0cnkgKi8KKwlpbnQgcmV0cmllczsKKwlpbnQgZXJyb3I7CisKKwkvKiBieXRlcyB0byB0cmFuc2ZlciAqLworCWludCByZXFfeGZlcjsKKwkvKiBieXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLworCWludCB4ZmVycmVkOworCisJLyogZGF0YSBidWZmZXIgKi8KKwl1OCAqYnVmOworCS8qIGN1cnJlbnQgYnVmZmVyIHBvc2l0aW9uICovCisJdTggKmN1cl9wb3M7CisJaW50IGJ1Zl9zaXplOworCS8qIG1pc3NpbmcvYXZhaWxhYmxlIGRhdGEgb24gdGhlIGN1cnJlbnQgYnVmZmVyICovCisJaW50IGJfY291bnQ7CisKKwkvKiB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0ICovCisJc3RydWN0IHJlcXVlc3QgKnJxOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogdGhvc2UgYXJlIG1vcmUgb3IgbGVzcyBkcml2ZXItc3BlY2lmaWMgYW5kIHNvbWUgb2YgdGhlbSBhcmUgc3ViamVjdAorCSAqIHRvIGNoYW5nZS9yZW1vdmFsIGxhdGVyLgorCSAqLworCXU4IHBjX2J1ZlsyNTZdOworCXZvaWQgKCppZGVmbG9wcHlfY2FsbGJhY2spIChpZGVfZHJpdmVfdCAqKTsKKwlpZGVfc3RhcnRzdG9wX3QgKCppZGV0YXBlX2NhbGxiYWNrKSAoaWRlX2RyaXZlX3QgKik7CisKKwkvKiBpZGV0YXBlIG9ubHkgKi8KKwlzdHJ1Y3QgaWRldGFwZV9iaCAqYmg7CisJY2hhciAqYl9kYXRhOworCisJLyogaWRlc2NzaSBvbmx5IGZvciBub3cgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBzZ19jbnQ7CisKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZDsKKwl2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKik7CisKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Cit9OworCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAvKgogICogY29uZmlndXJhYmxlIGRyaXZlIHNldHRpbmdzCkBAIC02OTEsNiArNjkzLDcgQEAKIHZvaWQgcHJvY19pZGVfZGVzdHJveSh2b2lkKTsKIHZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfcHJvY19wb3J0X3JlZ2lzdGVyX2RldmljZXMoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kZXZpY2UoaWRlX2RyaXZlX3QgKik7CiB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2RyaXZlcl90ICopOwogdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqLCBpZGVfZHJpdmVyX3QgKik7CkBAIC03MjQsNiArNzI3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2lkZV9kZXN0cm95KHZvaWQpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3BvcnRfcmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKSB7IDsgfQpAQCAtOTkwLDcgKzk5NCw2IEBACiB2b2lkIGlkZV9pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKiwgaWRlX2RyaXZlX3QgKik7CiAKICNpZmRlZiBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUgotZXh0ZXJuIGludCBpZGVfc2Nhbl9kaXJlY3Rpb247CiBleHRlcm4gaW50IF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKTsKICNkZWZpbmUgaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZCkgX19pZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihkLCBUSElTX01PRFVMRSwgS0JVSUxEX01PRE5BTUUpCiAjZWxzZQpAQCAtMTE5NSw3ICsxMTk4LDcgQEAKIHZvaWQgaWRlX3JlbW92ZV9wb3J0X2Zyb21faHdncm91cChpZGVfaHdpZl90ICopOwogZXh0ZXJuIGludCBpZGVfaHdpZl9yZXF1ZXN0X3JlZ2lvbnMoaWRlX2h3aWZfdCAqaHdpZik7CiBleHRlcm4gdm9pZCBpZGVfaHdpZl9yZWxlYXNlX3JlZ2lvbnMoaWRlX2h3aWZfdCogaHdpZik7Ci12b2lkIGlkZV91bnJlZ2lzdGVyKHVuc2lnbmVkIGludCwgaW50LCBpbnQpOwordm9pZCBpZGVfdW5yZWdpc3Rlcih1bnNpZ25lZCBpbnQpOwogCiB2b2lkIGlkZV9yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGdlbmRpc2sgKik7CiB2b2lkIGlkZV91bnJlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3QgZ2VuZGlzayAqKTsKQEAgLTEyMDQsNiArMTIwNyw4IEBACiAKIGludCBpZGVfZGV2aWNlX2FkZF9hbGwodTggKmlkeCwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7CiBpbnQgaWRlX2RldmljZV9hZGQodTggaWR4WzRdLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqKTsKK3ZvaWQgaWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKGlkZV9od2lmX3QgKik7Cit2b2lkIGlkZV9wb3J0X3NjYW4oaWRlX2h3aWZfdCAqKTsKIAogc3RhdGljIGlubGluZSB2b2lkICppZGVfZ2V0X2h3aWZkYXRhIChpZGVfaHdpZl90ICogaHdpZikKIHsKQEAgLTEyNzksNiArMTI4NCw3IEBACiAjZGVmaW5lIGxvY2FsX2lycV9zZXQoZmxhZ3MpCWRvIHsgbG9jYWxfc2F2ZV9mbGFncygoZmxhZ3MpKTsgbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7IH0gd2hpbGUgKDApCiAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgaWRlX2J1c190eXBlOworZXh0ZXJuIHN0cnVjdCBjbGFzcyAqaWRlX3BvcnRfY2xhc3M7CiAKIC8qIGNoZWNrIGlmIENBQ0hFIEZMVVNIIChFWFQpIGNvbW1hbmQgaXMgc3VwcG9ydGVkIChiaXRzIGRlZmluZWQgaW4gQVRBLTYpICovCiAjZGVmaW5lIGlkZV9pZF9oYXNfZmx1c2hfY2FjaGUoaWQpCSgoaWQpLT5jZnNfZW5hYmxlXzIgJiAweDMwMDApCkBAIC0xMzA3LDcgKzEzMTMsMTAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlkZV9zZXRfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQogewotCWRyaXZlLT5od2lmLT5PVVRCKGRyaXZlLT5jdGwgfCAob24gPyAwIDogMiksIElERV9DT05UUk9MX1JFRyk7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCisJaHdpZi0+T1VUQihkcml2ZS0+Y3RsIHwgKG9uID8gMCA6IDIpLAorCQkgICBod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBpZGVfcmVhZF9zdGF0dXMoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtMTMzMSw0ICsxMzQwLDI2IEBACiAJcmV0dXJuIGh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfRVJST1JfT0ZGU0VUXSk7CiB9CiAKKy8qCisgKiBUb28gYmFkLiBUaGUgZHJpdmUgd2FudHMgdG8gc2VuZCB1cyBkYXRhIHdoaWNoIHdlIGFyZSBub3QgcmVhZHkgdG8gYWNjZXB0LgorICogSnVzdCB0aHJvdyBpdCBhd2F5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2F0YXBpX2Rpc2NhcmRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGJjb3VudCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKKwkvKiBGSVhNRTogdXNlIC0+YXRhcGlfaW5wdXRfYnl0ZXMgKi8KKwl3aGlsZSAoYmNvdW50LS0pCisJCSh2b2lkKWh3aWYtPklOQihod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlkZV9hdGFwaV93cml0ZV96ZXJvcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGJjb3VudCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKKwkvKiBGSVhNRTogdXNlIC0+YXRhcGlfb3V0cHV0X2J5dGVzICovCisJd2hpbGUgKGJjb3VudC0tKQorCQlod2lmLT5PVVRCKDAsIGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0pOworfQorCiAjZW5kaWYgLyogX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAppbmRleCBmNTc3YzhmLi5mMjdkMTFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgSUVFRTgwMjExX01BWF9GUkFNRV9MRU4JCTIzNTIKIAogI2RlZmluZSBJRUVFODAyMTFfTUFYX1NTSURfTEVOCQkzMgorI2RlZmluZSBJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOCTMyCiAKIHN0cnVjdCBpZWVlODAyMTFfaGRyIHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKQEAgLTEwOSw2ICsxMTAsMTYgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKK3N0cnVjdCBpZWVlODAyMTFzX2hkciB7CisJdTggZmxhZ3M7CisJdTggdHRsOworCXU4IHNlcW51bVszXTsKKwl1OCBlYWRkcjFbNl07CisJdTggZWFkZHIyWzZdOworCXU4IGVhZGRyM1s2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKIHN0cnVjdCBpZWVlODAyMTFfbWdtdCB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CiAJX19sZTE2IGR1cmF0aW9uOwpAQCAtMjA2LDYgKzIxNywyMyBAQAogCQkJCQlfX2xlMTYgcGFyYW1zOwogCQkJCQlfX2xlMTYgcmVhc29uX2NvZGU7CiAJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBkZWxiYTsKKwkJCQlzdHJ1Y3R7CisJCQkJCXU4IGFjdGlvbl9jb2RlOworCQkJCQkvKiBjYXBhYl9pbmZvIGZvciBvcGVuIGFuZCBjb25maXJtLAorCQkJCQkgKiByZWFzb24gZm9yIGNsb3NlCisJCQkJCSAqLworCQkJCQlfX2xlMTYgYXV4OworCQkJCQkvKiBGb2xsb3dlZCBpbiBwbGlua19jb25maXJtIGJ5IHN0YXR1cworCQkJCQkgKiBjb2RlLCBBSUQgYW5kIHN1cHBvcnRlZCByYXRlcywKKwkJCQkJICogYW5kIGRpcmVjdGx5IGJ5IHN1cHBvcnRlZCByYXRlcyBpbgorCQkJCQkgKiBwbGlua19vcGVuIGFuZCBwbGlua19jbG9zZQorCQkJCQkgKi8KKwkJCQkJdTggdmFyaWFibGVbMF07CisJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBwbGlua19hY3Rpb247CisJCQkJc3RydWN0eworCQkJCQl1OCBhY3Rpb25fY29kZTsKKwkJCQkJdTggdmFyaWFibGVbMF07CisJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtZXNoX2FjdGlvbjsKIAkJCX0gdTsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWN0aW9uOwogCX0gdTsKQEAgLTQzNyw2ICs0NjUsMTMgQEAKIAlXTEFOX0VJRF9UU19ERUxBWSA9IDQzLAogCVdMQU5fRUlEX1RDTEFTX1BST0NFU1NJTkcgPSA0NCwKIAlXTEFOX0VJRF9RT1NfQ0FQQSA9IDQ2LAorCS8qIDgwMi4xMXMgKi8KKwlXTEFOX0VJRF9NRVNIX0NPTkZJRyA9IDM2LCAgICAgIC8qIFBlbmRpbmcgSUVFRSA4MDIuMTEgQU5BIGFwcHJvdmFsICovCisJV0xBTl9FSURfTUVTSF9JRCA9IDM3LCAgICAgICAgICAvKiBQZW5kaW5nIElFRUUgODAyLjExIEFOQSBhcHByb3ZhbCAqLworCVdMQU5fRUlEX1BFRVJfTElOSyA9IDQwLAkvKiBQZW5kaW5nIElFRUUgODAyLjExIEFOQSBhcHByb3ZhbCAqLworCVdMQU5fRUlEX1BSRVEgPSA1MywJCS8qIFBlbmRpbmcgSUVFRSA4MDIuMTEgQU5BIGFwcHJvdmFsICovCisJV0xBTl9FSURfUFJFUCA9IDU0LAkJLyogUGVuZGluZyBJRUVFIDgwMi4xMSBBTkEgYXBwcm92YWwgKi8KKwlXTEFOX0VJRF9QRVJSID0gNTUsCQkvKiBQZW5kaW5nIElFRUUgODAyLjExIEFOQSBhcHByb3ZhbCAqLwogCS8qIDgwMi4xMWggKi8KIAlXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVCA9IDMyLAogCVdMQU5fRUlEX1BXUl9DQVBBQklMSVRZID0gMzMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2FycC5oIGIvaW5jbHVkZS9saW51eC9pZl9hcnAuaAppbmRleCAyOTZlOGU4Li40ZDM0MDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2FycC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKQEAgLTE1Niw2ICsxNTYsMTIgQEAKIHsKIAlyZXR1cm4gKHN0cnVjdCBhcnBoZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIH0KKworc3RhdGljIGlubGluZSBpbnQgYXJwX2hkcl9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvKiBBUlAgaGVhZGVyLCBwbHVzIDIgZGV2aWNlIGFkZHJlc3NlcywgcGx1cyAyIElQIGFkZHJlc3Nlcy4gKi8KKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsgKGRldi0+YWRkcl9sZW4gKyBzaXplb2YodTMyKSkgKiAyOworfQogI2VuZGlmCiAKICNlbmRpZgkvKiBfTElOVVhfSUZfQVJQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaCBiL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAppbmRleCA0MDc0M2UwLi42ZmI3ZjE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wcHBfY2hhbm5lbC5oPgogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNpbmNsdWRlIDxsaW51eC9pZl9wcHBvbDJ0cC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggNzJmMWM1Zi4uOGM3MWZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0xOCw0NyArMTgsOCBAQAogI2lmbmRlZiBfX0lGX1RVTl9ICiAjZGVmaW5lIF9fSUZfVFVOX0gKIAotLyogVW5jb21tZW50IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgKi8KLS8qICNkZWZpbmUgVFVOX0RFQlVHIDEgKi8KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZmRlZiBUVU5fREVCVUcKLSNkZWZpbmUgREJHICBpZih0dW4tPmRlYnVnKXByaW50awotI2RlZmluZSBEQkcxIGlmKGRlYnVnPT0yKXByaW50awotI2Vsc2UKLSNkZWZpbmUgREJHKCBhLi4uICkKLSNkZWZpbmUgREJHMSggYS4uLiApCi0jZW5kaWYKLQotc3RydWN0IHR1bl9zdHJ1Y3QgewotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7Ci0JdW5zaWduZWQgbG9uZyAJCWZsYWdzOwotCWludAkJCWF0dGFjaGVkOwotCXVpZF90CQkJb3duZXI7Ci0JZ2lkX3QJCQlncm91cDsKLQotCXdhaXRfcXVldWVfaGVhZF90CXJlYWRfd2FpdDsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXJlYWRxOwotCi0Jc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKLQotCXN0cnVjdCBmYXN5bmNfc3RydWN0ICAgICpmYXN5bmM7Ci0KLQl1bnNpZ25lZCBsb25nIGlmX2ZsYWdzOwotCXU4IGRldl9hZGRyW0VUSF9BTEVOXTsKLQl1MzIgY2hyX2ZpbHRlclsyXTsKLQl1MzIgbmV0X2ZpbHRlclsyXTsKLQotI2lmZGVmIFRVTl9ERUJVRwkKLQlpbnQgZGVidWc7Ci0jZW5kaWYgIAotfTsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogLyogUmVhZCBxdWV1ZSBzaXplICovCiAjZGVmaW5lIFRVTl9SRUFEUV9TSVpFCTUwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaAppbmRleCAyMjhlYjRlLi5mMWZiZTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKQEAgLTcsNiArNywxMCBAQAogI2RlZmluZSBTSU9DQUREVFVOTkVMICAgKFNJT0NERVZQUklWQVRFICsgMSkKICNkZWZpbmUgU0lPQ0RFTFRVTk5FTCAgIChTSU9DREVWUFJJVkFURSArIDIpCiAjZGVmaW5lIFNJT0NDSEdUVU5ORUwgICAoU0lPQ0RFVlBSSVZBVEUgKyAzKQorI2RlZmluZSBTSU9DR0VUUFJMICAgICAgKFNJT0NERVZQUklWQVRFICsgNCkKKyNkZWZpbmUgU0lPQ0FERFBSTCAgICAgIChTSU9DREVWUFJJVkFURSArIDUpCisjZGVmaW5lIFNJT0NERUxQUkwgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA2KQorI2RlZmluZSBTSU9DQ0hHUFJMICAgICAgKFNJT0NERVZQUklWQVRFICsgNykKIAogI2RlZmluZSBHUkVfQ1NVTQlfX2NvbnN0YW50X2h0b25zKDB4ODAwMCkKICNkZWZpbmUgR1JFX1JPVVRJTkcJX19jb25zdGFudF9odG9ucygweDQwMDApCkBAIC0xNyw5ICsyMSw2IEBACiAjZGVmaW5lIEdSRV9GTEFHUwlfX2NvbnN0YW50X2h0b25zKDB4MDBGOCkKICNkZWZpbmUgR1JFX1ZFUlNJT04JX19jb25zdGFudF9odG9ucygweDAwMDcpCiAKLS8qIGlfZmxhZ3MgdmFsdWVzIGZvciBTSVQgbW9kZSAqLwotI2RlZmluZQlTSVRfSVNBVEFQCTB4MDAwMQotCiBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0KIHsKIAljaGFyCQkJbmFtZVtJRk5BTVNJWl07CkBAIC0zMSw0ICszMiwxOSBAQAogCXN0cnVjdCBpcGhkcgkJaXBoOwogfTsKIAorLyogU0lULW1vZGUgaV9mbGFncyAqLworI2RlZmluZQlTSVRfSVNBVEFQCTB4MDAwMQorCitzdHJ1Y3QgaXBfdHVubmVsX3BybCB7CisJX19iZTMyCQkJYWRkcjsKKwlfX3UxNgkJCWZsYWdzOworCV9fdTE2CQkJX19yZXNlcnZlZDsKKwlfX3UzMgkJCWRhdGFsZW47CisJX191MzIJCQlfX3Jlc2VydmVkMjsKKwl2b2lkIF9fdXNlcgkJKmRhdGE7Cit9OworCisvKiBQUkwgZmxhZ3MgKi8KKyNkZWZpbmUJUFJMX0RFRkFVTFQJCTB4MDAwMQorCiAjZW5kaWYgLyogX0lGX1RVTk5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCA3OTUwNGIyLi4xNWFjZTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtODEsNyArODEsOSBAQAogI2RlZmluZSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOICAgICAoVkxBTl9HUk9VUF9BUlJBWV9MRU4vVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUUykKIAogc3RydWN0IHZsYW5fZ3JvdXAgewotCWludCByZWFsX2Rldl9pZmluZGV4OyAvKiBUaGUgaWZpbmRleCBvZiB0aGUgZXRoZXJuZXQobGlrZSkgZGV2aWNlIHRoZSB2bGFuIGlzIGF0dGFjaGVkIHRvLiAqLworCXN0cnVjdCBuZXRfZGV2aWNlCSpyZWFsX2RldjsgLyogVGhlIGV0aGVybmV0KGxpa2UpIGRldmljZQorCQkJCQkgICAgKiB0aGUgdmxhbiBpcyBhdHRhY2hlZCB0by4KKwkJCQkJICAgICovCiAJdW5zaWduZWQgaW50CQlucl92bGFuczsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlobGlzdDsJLyogbGlua2VkIGxpc3QgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW5fZGV2aWNlc19hcnJheXNbVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUU107CkBAIC05Myw3ICs5NSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKiphcnJheTsKIAlhcnJheSA9IHZnLT52bGFuX2RldmljZXNfYXJyYXlzW3ZsYW5faWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTsKLQlyZXR1cm4gYXJyYXlbdmxhbl9pZCAlIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dOworCXJldHVybiBhcnJheSA/IGFycmF5W3ZsYW5faWQgJSBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXSA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2dyb3VwX3NldF9kZXZpY2Uoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl93YW5waXBlLmggYi9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5NGNhNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogaWZfd2FucGlwZS5oCUhlYWRlciBmaWxlIGZvciB0aGUgU2FuZ29tYSBBRl9XQU5QSVBFIFNvY2tldCAJCi0qCi0qIEF1dGhvcjogCU5lbmFkIENvcmJpYyAJCi0qCi0qIENvcHlyaWdodDoJKGMpIDIwMDAgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgotKgotKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBKYW4gMjgsIDIwMDAJTmVuYWQgQ29yYmljIAlJbml0aWFsIFZlcnNpb24KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fTElOVVhfSUZfV0FOX1BBQ0tFVF9ICi0jZGVmaW5lIF9fTElOVVhfSUZfV0FOX1BBQ0tFVF9ICi0KLXN0cnVjdCB3YW5fc29ja2FkZHJfbGwKLXsKLQl1bnNpZ25lZCBzaG9ydAlzbGxfZmFtaWx5OwotCXVuc2lnbmVkIHNob3J0CXNsbF9wcm90b2NvbDsKLQlpbnQJCXNsbF9pZmluZGV4OwotCXVuc2lnbmVkIHNob3J0CXNsbF9oYXR5cGU7Ci0JdW5zaWduZWQgY2hhcglzbGxfcGt0dHlwZTsKLQl1bnNpZ25lZCBjaGFyCXNsbF9oYWxlbjsKLQl1bnNpZ25lZCBjaGFyCXNsbF9hZGRyWzhdOwotCXVuc2lnbmVkIGNoYXIgICBzbGxfZGV2aWNlWzE0XTsKLQl1bnNpZ25lZCBjaGFyIAlzbGxfY2FyZFsxNF07Ci19OwotCi10eXBlZGVmIHN0cnVjdCAKLXsKLQl1bnNpZ25lZCBjaGFyIGZyZWU7Ci0JdW5zaWduZWQgY2hhciBzdGF0ZV9zazsKLQlpbnQgcmN2YnVmOwotCWludCBzbmRidWY7Ci0JaW50IHJtZW07Ci0JaW50IHdtZW07Ci0JaW50IHNrX2NvdW50OwotCXVuc2lnbmVkIGNoYXIgYm91bmQ7Ci0JY2hhciBuYW1lWzE0XTsKLQl1bnNpZ25lZCBjaGFyIGRfc3RhdGU7Ci0JdW5zaWduZWQgY2hhciBzdmM7Ci0JdW5zaWduZWQgc2hvcnQgbGNuOwotCXVuc2lnbmVkIGNoYXIgbWJveDsKLQl1bnNpZ25lZCBjaGFyIGNtZF9idXN5OwotCXVuc2lnbmVkIGNoYXIgY29tbWFuZDsKLQl1bnNpZ25lZCBwb2xsOwotCXVuc2lnbmVkIHBvbGxfY250OwotCWludCByYmxvY2s7CQotfSB3YW5fZGVidWdfaGRyX3Q7Ci0KLSNkZWZpbmUgTUFYX05VTV9ERUJVRyAgMTAKLSNkZWZpbmUgWDI1X1BST1QgICAgICAgMHgxNgotI2RlZmluZSBQVkNfUFJPVCAgICAgICAweDE3CQotCi10eXBlZGVmIHN0cnVjdAotewotCXdhbl9kZWJ1Z19oZHJfdCBkZWJ1Z1tNQVhfTlVNX0RFQlVHXTsKLX13YW5fZGVidWdfdDsKLQotI2RlZmluZQlTSU9DX1dBTlBJUEVfR0VUX0NBTExfREFUQQkoU0lPQ1BST1RPUFJJVkFURSArIDApCi0jZGVmaW5lCVNJT0NfV0FOUElQRV9TRVRfQ0FMTF9EQVRBCShTSU9DUFJPVE9QUklWQVRFICsgMSkKLSNkZWZpbmUgU0lPQ19XQU5QSVBFX0FDQ0VQVF9DQUxMCShTSU9DUFJPVE9QUklWQVRFICsgMikKLSNkZWZpbmUgU0lPQ19XQU5QSVBFX0NMRUFSX0NBTEwJICAgICAgICAoU0lPQ1BST1RPUFJJVkFURSArIDMpCi0jZGVmaW5lIFNJT0NfV0FOUElQRV9SRVNFVF9DQUxMCSAgICAgICAgKFNJT0NQUk9UT1BSSVZBVEUgKyA0KQotI2RlZmluZSBTSU9DX1dBTlBJUEVfREVCVUcJICAgICAgICAoU0lPQ1BST1RPUFJJVkFURSArIDUpCi0jZGVmaW5lIFNJT0NfV0FOUElQRV9TRVRfTk9OQkxPQ0sJKFNJT0NQUk9UT1BSSVZBVEUgKyA2KQotI2RlZmluZSBTSU9DX1dBTlBJUEVfQ0hFQ0tfVFgJCShTSU9DUFJPVE9QUklWQVRFICsgNykKLSNkZWZpbmUgU0lPQ19XQU5QSVBFX1NPQ0tfU1RBVEUJCShTSU9DUFJPVE9QUklWQVRFICsgOCkKLQotLyogUGFja2V0IHR5cGVzICovCi0KLSNkZWZpbmUgV0FOX1BBQ0tFVF9IT1NUCQkwCQkvKiBUbyB1cwkJKi8KLSNkZWZpbmUgV0FOX1BBQ0tFVF9CUk9BRENBU1QJMQkJLyogVG8gYWxsCQkqLwotI2RlZmluZSBXQU5fUEFDS0VUX01VTFRJQ0FTVAkyCQkvKiBUbyBncm91cAkJKi8KLSNkZWZpbmUgV0FOX1BBQ0tFVF9PVEhFUkhPU1QJMwkJLyogVG8gc29tZW9uZSBlbHNlIAkqLwotI2RlZmluZSBXQU5fUEFDS0VUX09VVEdPSU5HCQk0CQkvKiBPdXRnb2luZyBvZiBhbnkgdHlwZSAqLwotLyogVGhlc2Ugb25lcyBhcmUgaW52aXNpYmxlIGJ5IHVzZXIgbGV2ZWwgKi8KLSNkZWZpbmUgV0FOX1BBQ0tFVF9MT09QQkFDSwkJNQkJLyogTUMvQlJEIGZyYW1lIGxvb3BlZCBiYWNrICovCi0jZGVmaW5lIFdBTl9QQUNLRVRfRkFTVFJPVVRFCTYJCS8qIEZhc3Ryb3V0ZWQgZnJhbWUJKi8KLQotCi0vKiBYMjUgc3BlY2lmaWMgKi8KLSNkZWZpbmUgV0FOX1BBQ0tFVF9EQVRBIAk3Ci0jZGVmaW5lIFdBTl9QQUNLRVRfQ01EIAkJOAotI2RlZmluZSBXQU5fUEFDS0VUX0FTWU5DCTkKLSNkZWZpbmUgV0FOX1BBQ0tFVF9FUlIJICAgICAgIDEwCi0KLS8qIFBhY2tldCBzb2NrZXQgb3B0aW9ucyAqLwotCi0jZGVmaW5lIFdBTl9QQUNLRVRfQUREX01FTUJFUlNISVAJCTEKLSNkZWZpbmUgV0FOX1BBQ0tFVF9EUk9QX01FTUJFUlNISVAJCTIKLQotI2RlZmluZSBXQU5fUEFDS0VUX01SX01VTFRJQ0FTVAkwCi0jZGVmaW5lIFdBTl9QQUNLRVRfTVJfUFJPTUlTQwkxCi0jZGVmaW5lIFdBTl9QQUNLRVRfTVJfQUxMTVVMVEkJMgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKiBQcml2YXRlIHdhbnBpcGUgc29ja2V0IHN0cnVjdHVyZXMuICovCi1zdHJ1Y3Qgd2FucGlwZV9vcHQKLXsKLQl2b2lkICAgKm1ib3g7CQkvKiBNYWlsIGJveCAgKi8KLQl2b2lkICAgKmNhcmQ7IAkJLyogQ2FyZCBib3VkZWQgdG8gKi8KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwkvKiBCb3VuZGVkIGRldmljZSAqLwotCXVuc2lnbmVkIHNob3J0IGxjbjsJLyogQmluZGVkIExDTiAqLwotCXVuc2lnbmVkIGNoYXIgIHN2YzsJLyogMD1wdmMsIDE9c3ZjICovCi0JdW5zaWduZWQgY2hhciAgdGltZXI7ICAgLyogZmxhZyBmb3IgZGVsYXllZCB0cmFuc21pdCovCQotCXN0cnVjdCB0aW1lcl9saXN0IHR4X3RpbWVyOwotCXVuc2lnbmVkIHBvbGxfY250OwotCXVuc2lnbmVkIGNoYXIgZm9yY2U7CS8qIFVzZWQgdG8gZm9yY2Ugc29jayByZWxlYXNlICovCi0JYXRvbWljX3QgcGFja2V0X3NlbnQ7ICAgCi0JdW5zaWduZWQgc2hvcnQgbnVtOyAKLX07Ci0KLSNkZWZpbmUgd3Bfc2soX19zaykgKChzdHJ1Y3Qgd2FucGlwZV9vcHQgKikoX19zayktPnNrX3Byb3RpbmZvKQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oCmluZGV4IGY1MTBlN2UuLmY1YTFhMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWdtcC5oCkBAIC04MCwyNyArODAsNiBAQAogCV9fYmUzMiBzcmNzWzBdOwogfTsKIAotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaWdtcGhkciAqaWdtcF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gKHN0cnVjdCBpZ21waGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqCi0JCQlpZ21wdjNfcmVwb3J0X2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAoc3RydWN0IGlnbXB2M19yZXBvcnQgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpZ21wdjNfcXVlcnkgKgotCQkJaWdtcHYzX3F1ZXJ5X2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAoc3RydWN0IGlnbXB2M19xdWVyeSAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7Ci19Ci0jZW5kaWYKLQogI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9RVUVSWQkweDExCS8qIEZyb20gUkZDMTExMiAqLwogI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQJMHgxMgkvKiBEaXR0byAqLwogI2RlZmluZSBJR01QX0RWTVJQCQkJMHgxMwkvKiBEVk1SUCByb3V0aW5nICovCkBAIC0xNTEsNiArMTMwLDIzIEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ21waGRyICppZ21wX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc3RydWN0IGlnbXBoZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ21wdjNfcmVwb3J0ICoKKwkJCWlnbXB2M19yZXBvcnRfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnbXB2M19xdWVyeSAqCisJCQlpZ21wdjNfcXVlcnlfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgaWdtcHYzX3F1ZXJ5ICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKK30KKwogZXh0ZXJuIGludCBzeXNjdGxfaWdtcF9tYXhfbWVtYmVyc2hpcHM7CiBleHRlcm4gaW50IHN5c2N0bF9pZ21wX21heF9tc2Y7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW4uaCBiL2luY2x1ZGUvbGludXgvaW4uaAppbmRleCA3MGM2ZGY4Li40MDY1MzEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbi5oCkBAIC0yNjUsNyArMjY1LDcgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpcHY0X2lzX2xiY2FzdChfX2JlMzIgYWRkcikKIHsKIAkvKiBsaW1pdGVkIGJyb2FkY2FzdCAqLwotCXJldHVybiBhZGRyID09IElOQUREUl9CUk9BRENBU1Q7CisJcmV0dXJuIGFkZHIgPT0gaHRvbmwoSU5BRERSX0JST0FEQ0FTVCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpcHY0X2lzX3plcm9uZXQoX19iZTMyIGFkZHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luNi5oIGIvaW5jbHVkZS9saW51eC9pbjYuaAppbmRleCAyYTYxYzgyLi5iYzQ5MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luNi5oCisrKyBiL2luY2x1ZGUvbGludXgvaW42LmgKQEAgLTQ4LDYgKzQ4LDE0IEBACiAjZGVmaW5lIElONkFERFJfQU5ZX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9IH0gfQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOwogI2RlZmluZSBJTjZBRERSX0xPT1BCQUNLX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSB9IH0gfQorI2lmZGVmIF9fS0VSTkVMX18KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9saW5rbG9jYWxfYWxsbm9kZXM7CisjZGVmaW5lIElONkFERFJfTElOS0xPQ0FMX0FMTE5PREVTX0lOSVQJXAorCQl7IHsgeyAweGZmLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxIH0gfSB9CitleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbGlua2xvY2FsX2FsbHJvdXRlcnM7CisjZGVmaW5lIElONkFERFJfTElOS0xPQ0FMX0FMTFJPVVRFUlNfSU5JVCBcCisJCXsgeyB7IDB4ZmYsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIgfSB9IH0KKyNlbmRpZgogCiBzdHJ1Y3Qgc29ja2FkZHJfaW42IHsKIAl1bnNpZ25lZCBzaG9ydCBpbnQJc2luNl9mYW1pbHk7ICAgIC8qIEFGX0lORVQ2ICovCkBAIC0yNDksNCArMjU3LDMwIEBACiAgKiBJUDZUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQJNjkKICAqLwogCisvKiBSRkM1MDE0OiBTb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgSVBWNl9BRERSX1BSRUZFUkVOQ0VTCTcyCisKKyNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX1RNUAkJMHgwMDAxCisjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19QVUJMSUMJCTB4MDAwMgorI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfUFVCVE1QX0RFRkFVTFQJMHgwMTAwCisjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19DT0EJCTB4MDAwNAorI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfSE9NRQkJMHgwNDAwCisjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19DR0EJCTB4MDAwOAorI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfTk9OQ0dBCQkweDA4MDAKKworLyoKKyAqIE11bHRpY2FzdCBSb3V0aW5nOgorICogc2VlIGluY2x1ZGUvbGludXgvbXJvdXRlNi5oLgorICoKKyAqIE1SVDZfSU5JVAkJCTIwMAorICogTVJUNl9ET05FCQkJMjAxCisgKiBNUlQ2X0FERF9NSUYJCQkyMDIKKyAqIE1SVDZfREVMX01JRgkJCTIwMworICogTVJUNl9BRERfTUZDCQkJMjA0CisgKiBNUlQ2X0RFTF9NRkMJCQkyMDUKKyAqIE1SVDZfVkVSU0lPTgkJCTIwNgorICogTVJUNl9BU1NFUlQJCQkyMDcKKyAqIE1SVDZfUElNCQkJMjA4CisgKiAocmVzZXJ2ZWQpCQkJMjA5CisgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCBmYzRlM2RiLi43MDA5YjBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtNzAsMTMgKzcwLDEzIEBACiAJaXB2NF9kZXZjb25mX3NldCgoaW5fZGV2KSwgTkVUX0lQVjRfQ09ORl8gIyMgYXR0ciwgKHZhbCkpCiAKICNkZWZpbmUgSU5fREVWX0FORENPTkYoaW5fZGV2LCBhdHRyKSBcCi0JKElQVjRfREVWQ09ORl9BTEwoaW5fZGV2LT5kZXYtPm5kX25ldCwgYXR0cikgJiYgXAorCShJUFY0X0RFVkNPTkZfQUxMKGRldl9uZXQoaW5fZGV2LT5kZXYpLCBhdHRyKSAmJiBcCiAJIElOX0RFVl9DT05GX0dFVCgoaW5fZGV2KSwgYXR0cikpCiAjZGVmaW5lIElOX0RFVl9PUkNPTkYoaW5fZGV2LCBhdHRyKSBcCi0JKElQVjRfREVWQ09ORl9BTEwoaW5fZGV2LT5kZXYtPm5kX25ldCwgYXR0cikgfHwgXAorCShJUFY0X0RFVkNPTkZfQUxMKGRldl9uZXQoaW5fZGV2LT5kZXYpLCBhdHRyKSB8fCBcCiAJIElOX0RFVl9DT05GX0dFVCgoaW5fZGV2KSwgYXR0cikpCiAjZGVmaW5lIElOX0RFVl9NQVhDT05GKGluX2RldiwgYXR0cikgXAotCShtYXgoSVBWNF9ERVZDT05GX0FMTChpbl9kZXYtPmRldi0+bmRfbmV0LCBhdHRyKSwgXAorCShtYXgoSVBWNF9ERVZDT05GX0FMTChkZXZfbmV0KGluX2Rldi0+ZGV2KSwgYXR0ciksIFwKIAkgICAgIElOX0RFVl9DT05GX0dFVCgoaW5fZGV2KSwgYXR0cikpKQogCiAjZGVmaW5lIElOX0RFVl9GT1JXQVJEKGluX2RldikJCUlOX0RFVl9DT05GX0dFVCgoaW5fZGV2KSwgRk9SV0FSRElORykKQEAgLTEyOSw3ICsxMjksNyBAQAogCiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmlwX2Rldl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGFkZHIpOwogZXh0ZXJuIGludAkJaW5ldF9hZGRyX29ubGluayhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhLCBfX2JlMzIgYik7Ci1leHRlcm4gaW50CQlkZXZpbmV0X2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICopOworZXh0ZXJuIGludAkJZGV2aW5ldF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICopOwogZXh0ZXJuIHZvaWQJCWRldmluZXRfaW5pdCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgaW5fZGV2aWNlCSppbmV0ZGV2X2J5X2luZGV4KHN0cnVjdCBuZXQgKiwgaW50KTsKIGV4dGVybiBfX2JlMzIJCWluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGRzdCwgaW50IHNjb3BlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggYTQwNGEwMC4uZmI1OGMwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTQyLDYgKzQyLDcgQEAKICAgIGRpc2NhcmQgaXQgaW4gbW9kdWxlcykgKi8KICNkZWZpbmUgX19pbml0CQlfX3NlY3Rpb24oLmluaXQudGV4dCkgX19jb2xkCiAjZGVmaW5lIF9faW5pdGRhdGEJX19zZWN0aW9uKC5pbml0LmRhdGEpCisjZGVmaW5lIF9faW5pdGNvbnN0CV9fc2VjdGlvbiguaW5pdC5yb2RhdGEpCiAjZGVmaW5lIF9fZXhpdGRhdGEJX19zZWN0aW9uKC5leGl0LmRhdGEpCiAjZGVmaW5lIF9fZXhpdF9jYWxsCV9fdXNlZCBfX3NlY3Rpb24oLmV4aXRjYWxsLmV4aXQpCiAKQEAgLTEwNiw2ICsxMDcsNyBAQAogI2RlZmluZSBfX21lbWV4aXRjb25zdCAgIF9fc2VjdGlvbigubWVtZXhpdC5yb2RhdGEpCiAKIC8qIEZvciBhc3NlbWJseSByb3V0aW5lcyAqLworI2RlZmluZSBfX0hFQUQJCS5zZWN0aW9uCSIuaGVhZC50ZXh0IiwiYXgiCiAjZGVmaW5lIF9fSU5JVAkJLnNlY3Rpb24JIi5pbml0LnRleHQiLCJheCIKICNkZWZpbmUgX19GSU5JVAkJLnByZXZpb3VzCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IDFmNzRlMWQuLjM3YTZmNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTUxLDYgKzE1MSw5IEBACiAJLmNwdXNfYWxsb3dlZAk9IENQVV9NQVNLX0FMTCwJCQkJCVwKIAkubW0JCT0gTlVMTCwJCQkJCQlcCiAJLmFjdGl2ZV9tbQk9ICZpbml0X21tLAkJCQkJXAorCS5zZQkJPSB7CQkJCQkJXAorCQkuZ3JvdXBfbm9kZSAJPSBMSVNUX0hFQURfSU5JVCh0c2suc2UuZ3JvdXBfbm9kZSksCVwKKwl9LAkJCQkJCQkJXAogCS5ydAkJPSB7CQkJCQkJXAogCQkucnVuX2xpc3QJPSBMSVNUX0hFQURfSU5JVCh0c2sucnQucnVuX2xpc3QpLAlcCiAJCS50aW1lX3NsaWNlCT0gSFosIAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDFiZGMzOWEuLmNhZTJjMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTEyMjcsMTIgKzEyMjcsMTMgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9nZXRfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQlyZXR1cm4gdG9faW5wdXRfZGV2KGdldF9kZXZpY2UoJmRldi0+ZGV2KSk7CisJcmV0dXJuIGRldiA/IHRvX2lucHV0X2RldihnZXRfZGV2aWNlKCZkZXYtPmRldikpIDogTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGlucHV0X3B1dF9kZXZpY2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewotCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKKwlpZiAoZGV2KQorCQlwdXRfZGV2aWNlKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW5wdXRfZ2V0X2RydmRhdGEoc3RydWN0IGlucHV0X2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggZjhhYjRjZS4uYjVmZWYxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0xMDIsNiArMTAyLDI1IEBACiBleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpCisKK2V4dGVybiBpbnQgaXJxX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgY3B1bWFzayk7CitleHRlcm4gaW50IGlycV9jYW5fc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpOworCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGNwdW1hc2spCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9jYW5fc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICYmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTICovCisKICNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogLyoKICAqIFNwZWNpYWwgbG9ja2RlcCB2YXJpYW50cyBvZiBpcnEgZGlzYWJsaW5nL2VuYWJsaW5nLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvaW9jb250ZXh0LmgKaW5kZXggNTkzYjIyMi4uMmI3YTExOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBJT0NPTlRFWFRfSAogCiAjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBwZXItcHJvY2VzcyBhbnRpY2lwYXRvcnkgSS9PIHNjaGVkdWxlciBzdGF0ZS4KQEAgLTUwLDkgKzUxLDEyIEBACiAJc2VjdG9yX3Qgc2Vla19tZWFuOwogCiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9saXN0OworCXN0cnVjdCBobGlzdF9ub2RlIGNpY19saXN0OwogCiAJdm9pZCAoKmR0b3IpKHN0cnVjdCBpb19jb250ZXh0ICopOyAvKiBkZXN0cnVjdG9yICovCiAJdm9pZCAoKmV4aXQpKHN0cnVjdCBpb19jb250ZXh0ICopOyAvKiBjYWxsZWQgb24gdGFzayBleGl0ICovCisKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CiB9OwogCiAvKgpAQCAtNzcsNiArODEsNyBAQAogCiAJc3RydWN0IGFzX2lvX2NvbnRleHQgKmFpYzsKIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IHJhZGl4X3Jvb3Q7CisJc3RydWN0IGhsaXN0X2hlYWQgY2ljX2xpc3Q7CiAJdm9pZCAqaW9jX2RhdGE7CiB9OwogCkBAIC04Niw4ICs5MSwxMCBAQAogCSAqIGlmIHJlZiBjb3VudCBpcyB6ZXJvLCBkb24ndCBhbGxvdyBzaGFyaW5nIChpb2MgaXMgZ29pbmcgYXdheSwgaXQncwogCSAqIGEgcmFjZSkuCiAJICovCi0JaWYgKGlvYyAmJiBhdG9taWNfaW5jX25vdF96ZXJvKCZpb2MtPnJlZmNvdW50KSkKKwlpZiAoaW9jICYmIGF0b21pY19pbmNfbm90X3plcm8oJmlvYy0+cmVmY291bnQpKSB7CisJCWF0b21pY19pbmMoJmlvYy0+bnJfdGFza3MpOwogCQlyZXR1cm4gaW9jOworCX0KIAogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaCBiL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKaW5kZXggNGRkNGMwNC4uYzk3NWNhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvbW11LWhlbHBlci5oCkBAIC0xLDMgKzEsNiBAQAorZXh0ZXJuIGludCBpb21tdV9pc19zcGFuX2JvdW5kYXJ5KHVuc2lnbmVkIGludCBpbmRleCwgdW5zaWduZWQgaW50IG5yLAorCQkJCSAgdW5zaWduZWQgbG9uZyBzaGlmdCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfc2l6ZSk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9hcmVhX2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGludCBuciwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNoaWZ0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaCBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKaW5kZXggNjA1ZDIzNy4uZDVkNDBhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCkBAIC00NCw3ICs0NCw5IEBACiAjZGVmaW5lIElPUkVTT1VSQ0VfQ0FDSEVBQkxFCTB4MDAwMDQwMDAKICNkZWZpbmUgSU9SRVNPVVJDRV9SQU5HRUxFTkdUSAkweDAwMDA4MDAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfU0hBRE9XQUJMRQkweDAwMDEwMDAwCi0jZGVmaW5lIElPUkVTT1VSQ0VfQlVTX0hBU19WR0EJMHgwMDA4MDAwMAorCisjZGVmaW5lIElPUkVTT1VSQ0VfU0laRUFMSUdOCTB4MDAwMjAwMDAJLyogc2l6ZSBpbmRpY2F0ZXMgYWxpZ25tZW50ICovCisjZGVmaW5lIElPUkVTT1VSQ0VfU1RBUlRBTElHTgkweDAwMDQwMDAwCS8qIHN0YXJ0IGZpZWxkIGlzIGFsaWdubWVudCAqLwogCiAjZGVmaW5lIElPUkVTT1VSQ0VfRElTQUJMRUQJMHgxMDAwMDAwMAogI2RlZmluZSBJT1JFU09VUkNFX1VOU0VUCTB4MjAwMDAwMDAKQEAgLTExMCw2ICsxMTIsNyBAQAogCQkJICAgICB2b2lkICphbGlnbmZfZGF0YSk7CiBpbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CityZXNvdXJjZV9zaXplX3QgcmVzb3VyY2VfYWxpZ25tZW50KHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIAogLyogQ29udmVuaWVuY2Ugc2hvcnRoYW5kIHdpdGggYWxsb2NhdGlvbiAqLwogI2RlZmluZSByZXF1ZXN0X3JlZ2lvbihzdGFydCxuLG5hbWUpCV9fcmVxdWVzdF9yZWdpb24oJmlvcG9ydF9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pLCAobmFtZSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCmluZGV4IDRhYWVmYzMuLjEwYjY2NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCkBAIC01Myw3ICs1Myw3IEBACiAJLyogCiAJICogVExWIGVuY29kZWQgb3B0aW9uIGRhdGEgZm9sbG93cy4KIAkgKi8KLX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsJLyogcmVxdWlyZWQgZm9yIHNvbWUgYXJjaHMgKi8KIAogI2RlZmluZSBpcHY2X2Rlc3RvcHRfaGRyIGlwdjZfb3B0X2hkcgogI2RlZmluZSBpcHY2X2hvcG9wdF9oZHIgIGlwdjZfb3B0X2hkcgpAQCAtMTYwLDYgKzE2MCw5IEBACiAjaWZkZWYgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQKIAlfX3MzMgkJb3B0aW1pc3RpY19kYWQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEUKKwlfX3MzMgkJbWNfZm9yd2FyZGluZzsKKyNlbmRpZgogCXZvaWQJCSpzeXNjdGw7CiB9OwogCkBAIC0xOTAsNiArMTkzLDcgQEAKIAlERVZDT05GX1BST1hZX05EUCwKIAlERVZDT05GX09QVElNSVNUSUNfREFELAogCURFVkNPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSwKKwlERVZDT05GX01DX0ZPUldBUkRJTkcsCiAJREVWQ09ORl9NQVgKIH07CiAKQEAgLTIzMCw2ICsyMzQsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgSVA2U0tCX1hGUk1fVFJBTlNGT1JNRUQJMQorI2RlZmluZSBJUDZTS0JfRk9SV0FSREVECTIKIH07CiAKICNkZWZpbmUgSVA2Q0Ioc2tiKQkoKHN0cnVjdCBpbmV0Nl9za2JfcGFybSopKChza2IpLT5jYikpCkBAIC0yNzQsOCArMjc5LDI5IEBACiAKIAlfX2JlMzIJCQlmbG93X2xhYmVsOwogCV9fdTMyCQkJZnJhZ19zaXplOwotCV9fczE2CQkJaG9wX2xpbWl0OwotCV9fczE2CQkJbWNhc3RfaG9wczsKKworCS8qCisJICogUGFja2VkIGluIDE2Yml0cy4KKwkgKiBPbWl0IG9uZSBzaGlmdCBieSBieSBwdXR0aW5nIHRoZSBzaWduZWQgZmllbGQgYXQgTVNCLgorCSAqLworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fczE2CQkJaG9wX2xpbWl0Ojk7CisJX191MTYJCQlfX3VudXNlZF8xOjc7CisjZWxzZQorCV9fdTE2CQkJX191bnVzZWRfMTo3OworCV9fczE2CQkJaG9wX2xpbWl0Ojk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCS8qIFBhY2tlZCBpbiAxNmJpdHMuICovCisJX19zMTYJCQltY2FzdF9ob3BzOjk7CisJX191MTYJCQlfX3VudXNlZF8yOjYsCisJCQkJbWNfbG9vcDoxOworI2Vsc2UKKwlfX3UxNgkJCW1jX2xvb3A6MSwKKwkJCQlfX3VudXNlZF8yOjY7CisJX19zMTYJCQltY2FzdF9ob3BzOjk7CisjZW5kaWYKIAlpbnQJCQltY2FzdF9vaWY7CiAKIAkvKiBwa3RvcHRpb24gZmxhZ3MgKi8KQEAgLTI5OCwxMSArMzI0LDE0IEBACiAJfSByeG9wdDsKIAogCS8qIHNvY2tvcHQgZmxhZ3MgKi8KLQlfX3U4CQkJbWNfbG9vcDoxLAotCSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3ZlcnI6MSwKKwlfX3U4CQkJcmVjdmVycjoxLAogCSAgICAgICAgICAgICAgICAgICAgICAgIHNuZGZsb3c6MSwKIAkJCQlwbXR1ZGlzYzoyLAotCQkJCWlwdjZvbmx5OjE7CisJCQkJaXB2Nm9ubHk6MSwKKwkJCQlzcmNwcmVmczozOwkvKiAwMDE6IHByZWZlciB0ZW1wb3JhcnkgYWRkcmVzcworCQkJCQkJICogMDEwOiBwcmVmZXIgcHVibGljIGFkZHJlc3MKKwkJCQkJCSAqIDEwMDogcHJlZmVyIGNhcmUtb2YgYWRkcmVzcworCQkJCQkJICovCiAJX191OAkJCXRjbGFzczsKIAogCV9fdTMyCQkJZHN0X2Nvb2tpZTsKQEAgLTMxNSw5ICszNDQsOCBAQAogCXN0cnVjdCBza19idWZmCQkqcGt0b3B0aW9uczsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDsKLQkJc3RydWN0IHJ0Nl9pbmZvCSpydDsKLQkJaW50IGhvcF9saW1pdDsKLQkJaW50IHRjbGFzczsKKwkJdTggaG9wX2xpbWl0OworCQl1OCB0Y2xhc3M7CiAJfSBjb3JrOwogfTsKIApAQCAtNDU4LDcgKzQ4Niw3IEBACiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCiAKICNkZWZpbmUgSU5FVDZfTUFUQ0goX19zaywgX19uZXQsIF9faGFzaCwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpXAotCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKSAmJiAoKF9fc2spLT5za19uZXQgPT0gKF9fbmV0KSkJJiYgXAorCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKSAmJiBzb2NrX25ldCgoX19zaykpID09IChfX25ldCkJJiYgXAogCSAoKCooKF9fcG9ydHBhaXIgKikmKGluZXRfc2soX19zayktPmRwb3J0KSkpID09IChfX3BvcnRzKSkgIAkmJiBcCiAJICgoX19zayktPnNrX2ZhbWlseQkJPT0gQUZfSU5FVDYpCQkmJiBcCiAJIGlwdjZfYWRkcl9lcXVhbCgmaW5ldDZfc2soX19zayktPmRhZGRyLCAoX19zYWRkcikpCSYmIFwKQEAgLTQ2Niw3ICs0OTQsNyBAQAogCSAoISgoX19zayktPnNrX2JvdW5kX2Rldl9pZikgfHwgKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmID09IChfX2RpZikpKSkKIAogI2RlZmluZSBJTkVUNl9UV19NQVRDSChfX3NrLCBfX25ldCwgX19oYXNoLCBfX3NhZGRyLCBfX2RhZGRyLCBfX3BvcnRzLCBfX2RpZikgXAotCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKSAmJiAoKF9fc2spLT5za19uZXQgPT0gKF9fbmV0KSkJJiYgXAorCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKSAmJiBzb2NrX25ldCgoX19zaykpID09IChfX25ldCkJJiYgXAogCSAoKigoX19wb3J0cGFpciAqKSYoaW5ldF90d3NrKF9fc2spLT50d19kcG9ydCkpID09IChfX3BvcnRzKSkJJiYgXAogCSAoKF9fc2spLT5za19mYW1pbHkJICAgICAgID09IFBGX0lORVQ2KQkJCSYmIFwKIAkgKGlwdjZfYWRkcl9lcXVhbCgmaW5ldDZfdHdzayhfX3NrKS0+dHdfdjZfZGFkZHIsIChfX3NhZGRyKSkpCSYmIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDE3NmU1ZTcuLjE4ODNhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMjI4LDIxICsyMjgsMTEgQEAKIAogI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRICovCiAKLWV4dGVybiBpbnQgaXJxX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgY3B1bWFzayk7Ci1leHRlcm4gaW50IGlycV9jYW5fc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpOwotCiAjZWxzZSAvKiBDT05GSUdfU01QICovCiAKICNkZWZpbmUgbW92ZV9uYXRpdmVfaXJxKHgpCiAjZGVmaW5lIG1vdmVfbWFza2VkX2lycSh4KQogCi1zdGF0aWMgaW5saW5lIGludCBpcnFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBjcHVtYXNrKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfY2FuX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxKSB7IHJldHVybiAwOyB9Ci0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKICNpZmRlZiBDT05GSUdfSVJRQkFMQU5DRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oIGIvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oCmluZGV4IDQxMmUwMjUuLmU2MDBjNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmgKQEAgLTg0LDEwICs4NCwxMCBAQAogCiAjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCQkJCVwKICh7CQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9mbGFnczsJCQkJCVwKIAkJCQkJCQkJXAotCXJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJCQkJXAotCXJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKTsJCQkJXAorCXJhd19sb2NhbF9zYXZlX2ZsYWdzKF9mbGFncyk7CQkJCVwKKwlyYXdfaXJxc19kaXNhYmxlZF9mbGFncyhfZmxhZ3MpOwkJCVwKIH0pCiAKICNkZWZpbmUgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykJcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzY3NpX2liZnQuaCBiL2luY2x1ZGUvbGludXgvaXNjc2lfaWJmdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTI0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzY3NpX2liZnQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KKyAqICBieSBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+CisgKiAgQ29weXJpZ2h0IDIwMDcgSUJNLCBJbmMuCisgKiAgYnkgS29ucmFkIFJ6ZXN6dXRlayA8a29ucmFkckBsaW51eC52bmV0LmlibS5jb20+CisgKiAgQ29weXJpZ2h0IDIwMDgKKyAqICBieSBLb25yYWQgUnplc3p1dGVrIDxrZXR1enNlenJAZGFybm9rLm9yZz4KKyAqCisgKiBUaGlzIGNvZGUgZXhwb3NlcyB0aGUgaVNDU0kgQm9vdCBGb3JtYXQgVGFibGUgdG8gdXNlcmxhbmQgdmlhIHN5c2ZzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyLjAgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIElTQ1NJX0lCRlRfSAorI2RlZmluZSBJU0NTSV9JQkZUX0gKKworc3RydWN0IGliZnRfdGFibGVfaGVhZGVyIHsKKwljaGFyIHNpZ25hdHVyZVs0XTsKKwl1MzIgbGVuZ3RoOworCXU4IHJldmlzaW9uOworCXU4IGNoZWNrc3VtOworCWNoYXIgb2VtX2lkWzZdOworCWNoYXIgb2VtX3RhYmxlX2lkWzhdOworCWNoYXIgcmVzZXJ2ZWRbMjRdOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiBMb2dpY2FsIGxvY2F0aW9uIG9mIGlTQ1NJIEJvb3QgRm9ybWF0IFRhYmxlLgorICogSWYgdGhlIHZhbHVlIGlzIE5VTEwgdGhlcmUgaXMgbm8gaUJGVCBvbiB0aGUgbWFjaGluZS4KKyAqLworZXh0ZXJuIHN0cnVjdCBpYmZ0X3RhYmxlX2hlYWRlciAqaWJmdF9hZGRyOworCisvKgorICogUm91dGluZSB1c2VkIHRvIGZpbmQgYW5kIHJlc2VydmUgdGhlIGlTQ1NJIEJvb3QgRm9ybWF0IFRhYmxlLiBUaGUKKyAqIG1hcHBlZCBhZGRyZXNzIGlzIHNldCBpbiB0aGUgaWJmdF9hZGRyIHZhcmlhYmxlLgorICovCisjaWZkZWYgQ09ORklHX0lTQ1NJX0lCRlRfRklORAorZXh0ZXJuIHZvaWQgX19pbml0IHJlc2VydmVfaWJmdF9yZWdpb24odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlc2VydmVfaWJmdF9yZWdpb24odm9pZCkgeyB9CisjZW5kaWYKKworI2VuZGlmIC8qIElTQ1NJX0lCRlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4uaAppbmRleCA5Y2IyODU1Li40NGNkNjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4uaApAQCAtMTYsMTQgKzE2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKLSNpZmRlZiBDT05GSUdfQ09CQUxUX01JQ1JPX1NFUlZFUgotLyogU2F2ZSBtZW1vcnkgKi8KLSNkZWZpbmUgSVNETl9NQVhfRFJJVkVSUyAgICAyCi0jZGVmaW5lIElTRE5fTUFYX0NIQU5ORUxTICAgOAotI2Vsc2UKICNkZWZpbmUgSVNETl9NQVhfRFJJVkVSUyAgICAzMgogI2RlZmluZSBJU0ROX01BWF9DSEFOTkVMUyAgIDY0Ci0jZW5kaWYKIAogLyogTmV3IGlvY3RsLWNvZGVzICovCiAjZGVmaW5lIElJT0NORVRBSUYgIF9JTygnSScsMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkLmggYi9pbmNsdWRlL2xpbnV4L2piZC5oCmluZGV4IGIxOGZkM2IuLjA3YTliNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQuaApAQCAtMzIsOCArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCiAjZGVmaW5lIGpvdXJuYWxfb29tX3JldHJ5IDEKIAogLyoKQEAgLTM0OCw4ICszNDYsNyBAQAogc3RydWN0IGpiZF9yZXZva2VfdGFibGVfczsKIAogLyoqCi0gKiBzdHJ1Y3QgaGFuZGxlX3MgLSBUaGUgaGFuZGxlX3MgdHlwZSBpcyB0aGUgY29uY3JldGUgdHlwZSBhc3NvY2lhdGVkIHdpdGgKLSAqICAgICBoYW5kbGVfdC4KKyAqIHN0cnVjdCBoYW5kbGVfcyAtIHRoaXMgaXMgdGhlIGNvbmNyZXRlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIGhhbmRsZV90LgogICogQGhfdHJhbnNhY3Rpb246IFdoaWNoIGNvbXBvdW5kIHRyYW5zYWN0aW9uIGlzIHRoaXMgdXBkYXRlIGEgcGFydCBvZj8KICAqIEBoX2J1ZmZlcl9jcmVkaXRzOiBOdW1iZXIgb2YgcmVtYWluaW5nIGJ1ZmZlcnMgd2UgYXJlIGFsbG93ZWQgdG8gZGlydHkuCiAgKiBAaF9yZWY6IFJlZmVyZW5jZSBjb3VudCBvbiB0aGlzIGhhbmRsZQpAQCAtMzU4LDEyICszNTUsNyBAQAogICogQGhfamRhdGE6IGZsYWcgdG8gZm9yY2UgZGF0YSBqb3VybmFsaW5nCiAgKiBAaF9hYm9ydGVkOiBmbGFnIGluZGljYXRpbmcgZmF0YWwgZXJyb3Igb24gaGFuZGxlCiAgKiBAaF9sb2NrZGVwX21hcDogbG9ja2RlcCBpbmZvIGZvciBkZWJ1Z2dpbmcgbG9jayBwcm9ibGVtcwotICoqLwotCi0vKiBEb2Nib29rIGNhbid0IHlldCBjb3BlIHdpdGggdGhlIGJpdCBmaWVsZHMsIGJ1dCB3aWxsIGxlYXZlIHRoZSBkb2N1bWVudGF0aW9uCi0gKiBpbiBzbyBpdCBjYW4gYmUgZml4ZWQgbGF0ZXIuCiAgKi8KLQogc3RydWN0IGhhbmRsZV9zCiB7CiAJLyogV2hpY2ggY29tcG91bmQgdHJhbnNhY3Rpb24gaXMgdGhpcyB1cGRhdGUgYSBwYXJ0IG9mPyAqLwpAQCAtNTU4LDggKzU1MCw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBqb3VybmFsX3MgLSBUaGUgam91cm5hbF9zIHR5cGUgaXMgdGhlIGNvbmNyZXRlIHR5cGUgYXNzb2NpYXRlZCB3aXRoCi0gKiAgICAgam91cm5hbF90LgorICogc3RydWN0IGpvdXJuYWxfcyAtIHRoaXMgaXMgdGhlIGNvbmNyZXRlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIGpvdXJuYWxfdC4KICAqIEBqX2ZsYWdzOiAgR2VuZXJhbCBqb3VybmFsaW5nIHN0YXRlIGZsYWdzCiAgKiBAal9lcnJubzogIElzIHRoZXJlIGFuIG91dHN0YW5kaW5nIHVuY2xlYXJlZCBlcnJvciBvbiB0aGUgam91cm5hbCAoZnJvbSBhCiAgKiAgICAgcHJpb3IgYWJvcnQpPwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCAyY2JmNmZkLi4wNWUyYjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdF9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNlbmRpZgogCiAjZGVmaW5lIGpvdXJuYWxfb29tX3JldHJ5IDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKaW5kZXggZTBiNWI2OC4uMzNlZjcxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNlbGlmIEhaID49IDYxNDQgJiYgSFogPCAxMjI4OAogIyBkZWZpbmUgU0hJRlRfSFoJMTMKICNlbHNlCi0jIGVycm9yIFlvdSBsb3NlLgorIyBlcnJvciBJbnZhbGlkIHZhbHVlIG9mIEhaLgogI2VuZGlmCiAKIC8qIExBVENIIGlzIHVzZWQgaW4gdGhlIGludGVydmFsIHRpbWVyIGFuZCBmdGFwZSBzZXR1cC4gKi8KQEAgLTEzNSw2ICsxMzUsMjIgQEAKICNkZWZpbmUgdGltZV9iZWZvcmVfZXE2NChhLGIpCXRpbWVfYWZ0ZXJfZXE2NChiLGEpCiAKIC8qCisgKiBUaGVzZSBmb3VyIG1hY3JvcyBjb21wYXJlIGppZmZpZXMgYW5kICdhJyBmb3IgY29udmVuaWVuY2UuCisgKi8KKworLyogdGltZV9pc19iZWZvcmVfamlmZmllcyhhKSByZXR1cm4gdHJ1ZSBpZiBhIGlzIGJlZm9yZSBqaWZmaWVzICovCisjZGVmaW5lIHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMoYSkgdGltZV9hZnRlcihqaWZmaWVzLCBhKQorCisvKiB0aW1lX2lzX2FmdGVyX2ppZmZpZXMoYSkgcmV0dXJuIHRydWUgaWYgYSBpcyBhZnRlciBqaWZmaWVzICovCisjZGVmaW5lIHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhhKSB0aW1lX2JlZm9yZShqaWZmaWVzLCBhKQorCisvKiB0aW1lX2lzX2JlZm9yZV9lcV9qaWZmaWVzKGEpIHJldHVybiB0cnVlIGlmIGEgaXMgYmVmb3JlIG9yIGVxdWFsIHRvIGppZmZpZXMqLworI2RlZmluZSB0aW1lX2lzX2JlZm9yZV9lcV9qaWZmaWVzKGEpIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgYSkKKworLyogdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGEpIHJldHVybiB0cnVlIGlmIGEgaXMgYWZ0ZXIgb3IgZXF1YWwgdG8gamlmZmllcyovCisjZGVmaW5lIHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhhKSB0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBhKQorCisvKgogICogSGF2ZSB0aGUgMzIgYml0IGppZmZpZXMgdmFsdWUgd3JhcCA1IG1pbnV0ZXMgYWZ0ZXIgYm9vdAogICogc28gamlmZmllcyB3cmFwIGJ1Z3Mgc2hvdyB1cCBlYXJsaWVyLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCAyZGY0NGU3Li5jZDZkMDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTI5MywxMCArMjkzLDggQEAKICNkZWZpbmUgcHJfZGVidWcoZm10LCBhcmcuLi4pIFwKIAlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjYXJnKQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKSBwcl9kZWJ1Zyhjb25zdCBjaGFyICogZm10LCAuLi4pCi17Ci0JcmV0dXJuIDA7Ci19CisjZGVmaW5lIHByX2RlYnVnKGZtdCwgYXJnLi4uKSBcCisJKHsgaWYgKDApIHByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyNhcmcpOyAwOyB9KQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbGNhcGkuaCBiL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCmluZGV4IDhjNDM1MGEuLmE1M2U5MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2RlZmluZQlLQ0lfQ09OVFJVUAkwCS8qIGFyZzogc3RydWN0IGNhcGlfcHJvZmlsZSAqLwogI2RlZmluZQlLQ0lfQ09OVFJET1dOCTEJLyogYXJnOiBOVUxMICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tnZGIuaCBiL2luY2x1ZGUvbGludXgva2dkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NTdiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tnZGIuaApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIFRoaXMgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyBhbmQgZnVuY3Rpb25zIHRoYXQgS0dEQiBuZWVkcyB0byBzaGFyZSBiZXR3ZWVuCisgKiB0aGUgY29yZSwgSS9PIGFuZCBhcmNoLXNwZWNpZmljIHBvcnRpb25zLgorICoKKyAqIEF1dGhvcjogQW1pdCBLYWxlIDxhbWl0a2FsZUBsaW5zeXNzb2Z0LmNvbT4gYW5kCisgKiAgICAgICAgIFRvbSBSaW5pIDx0cmluaUBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKKyAqIDIwMDEtMjAwNCAoYykgQW1pdCBTLiBLYWxlIGFuZCAyMDAzLTIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX0tHREJfSF8KKyNkZWZpbmUgX0tHREJfSF8KKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20va2dkYi5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworLyoqCisgKglrZ2RiX3NraXBleGNlcHRpb24gLSAob3B0aW9uYWwpIGV4aXQga2dkYl9oYW5kbGVfZXhjZXB0aW9uIGVhcmx5CisgKglAZXhjZXB0aW9uOiBFeGNlcHRpb24gdmVjdG9yIG51bWJlcgorICoJQHJlZ3M6IEN1cnJlbnQgJnN0cnVjdCBwdF9yZWdzLgorICoKKyAqCU9uIHNvbWUgYXJjaGl0ZWN0dXJlcyBpdCBpcyByZXF1aXJlZCB0byBza2lwIGEgYnJlYWtwb2ludAorICoJZXhjZXB0aW9uIHdoZW4gaXQgb2NjdXJzIGFmdGVyIGEgYnJlYWtwb2ludCBoYXMgYmVlbiByZW1vdmVkLgorICoJVGhpcyBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBwb3J0aW9uIG9mCisgKglmb3Iga2dkYi4KKyAqLworZXh0ZXJuIGludCBrZ2RiX3NraXBleGNlcHRpb24oaW50IGV4Y2VwdGlvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKioKKyAqCWtnZGJfcG9zdF9wcmltYXJ5X2NvZGUgLSAob3B0aW9uYWwpIFNhdmUgZXJyb3IgdmVjdG9yL2NvZGUgbnVtYmVycy4KKyAqCUByZWdzOiBPcmlnaW5hbCBwdF9yZWdzLgorICoJQGVfdmVjdG9yOiBPcmlnaW5hbCBlcnJvciB2ZWN0b3IuCisgKglAZXJyX2NvZGU6IE9yaWdpbmFsIGVycm9yIGNvZGUuCisgKgorICoJVGhpcyBpcyB1c3VhbGx5IG5lZWRlZCBvbiBhcmNoaXRlY3R1cmVzIHdoaWNoIHN1cHBvcnQgU01QIGFuZAorICoJS0dEQi4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGFsbCB0aGUgc2Vjb25kYXJ5IGNwdXMgaGF2ZQorICoJYmVlbiBwdXQgdG8gYSBrbm93IHNwaW4gc3RhdGUgYW5kIHRoZSBwcmltYXJ5IENQVSBoYXMgY29udHJvbCBvdmVyCisgKglLR0RCLgorICovCitleHRlcm4gdm9pZCBrZ2RiX3Bvc3RfcHJpbWFyeV9jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZV92ZWN0b3IsCisJCQkJICBpbnQgZXJyX2NvZGUpOworCisvKioKKyAqCWtnZGJfZGlzYWJsZV9od19kZWJ1ZyAtIChvcHRpb25hbCkgRGlzYWJsZSBoYXJkd2FyZSBkZWJ1Z2dpbmcgaG9vaworICoJQHJlZ3M6IEN1cnJlbnQgJnN0cnVjdCBwdF9yZWdzLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaWYgdGhlIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIG11c3QKKyAqCWRpc2FibGUgaGFyZHdhcmUgZGVidWdnaW5nIHdoaWxlIGl0IGlzIHByb2Nlc3NpbmcgZ2RiIHBhY2tldHMgb3IKKyAqCWhhbmRsaW5nIGV4Y2VwdGlvbi4KKyAqLworZXh0ZXJuIHZvaWQga2dkYl9kaXNhYmxlX2h3X2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RydWN0IHRhc2tsZXRfc3RydWN0Oworc3RydWN0IHRhc2tfc3RydWN0Oworc3RydWN0IHVhcnRfcG9ydDsKKworLyoqCisgKglrZ2RiX2JyZWFrcG9pbnQgLSBjb21waWxlZCBpbiBicmVha3BvaW50CisgKgorICoJVGhpcyB3aWxsIGJlIGltcGVsbWVudGVkIGEgc3RhdGljIGlubGluZSBwZXIgYXJjaGl0ZWN0dXJlLiAgVGhpcworICoJZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBrZ2RiIGNvcmUgdG8gZXhlY3V0ZSBhbiBhcmNoaXRlY3R1cmUKKyAqCXNwZWNpZmljIHRyYXAgdG8gY2F1c2Uga2dkYiB0byBlbnRlciB0aGUgZXhjZXB0aW9uIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIGtnZGJfYnJlYWtwb2ludCh2b2lkKTsKKworZXh0ZXJuIGludCBrZ2RiX2Nvbm5lY3RlZDsKKworZXh0ZXJuIGF0b21pY190CQkJa2dkYl9zZXR0aW5nX2JyZWFrcG9pbnQ7CitleHRlcm4gYXRvbWljX3QJCQlrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcDsKKworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdAkqa2dkYl91c2V0aHJlYWQ7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0CSprZ2RiX2NvbnR0aHJlYWQ7CisKK2VudW0ga2dkYl9icHR5cGUgeworCUJQX0JSRUFLUE9JTlQgPSAwLAorCUJQX0hBUkRXQVJFX0JSRUFLUE9JTlQsCisJQlBfV1JJVEVfV0FUQ0hQT0lOVCwKKwlCUF9SRUFEX1dBVENIUE9JTlQsCisJQlBfQUNDRVNTX1dBVENIUE9JTlQKK307CisKK2VudW0ga2dkYl9icHN0YXRlIHsKKwlCUF9VTkRFRklORUQgPSAwLAorCUJQX1JFTU9WRUQsCisJQlBfU0VULAorCUJQX0FDVElWRQorfTsKKworc3RydWN0IGtnZGJfYmtwdCB7CisJdW5zaWduZWQgbG9uZwkJYnB0X2FkZHI7CisJdW5zaWduZWQgY2hhcgkJc2F2ZWRfaW5zdHJbQlJFQUtfSU5TVFJfU0laRV07CisJZW51bSBrZ2RiX2JwdHlwZQl0eXBlOworCWVudW0ga2dkYl9icHN0YXRlCXN0YXRlOworfTsKKworI2lmbmRlZiBLR0RCX01BWF9CUkVBS1BPSU5UUworIyBkZWZpbmUgS0dEQl9NQVhfQlJFQUtQT0lOVFMJMTAwMAorI2VuZGlmCisKKyNkZWZpbmUgS0dEQl9IV19CUkVBS1BPSU5UCTEKKworLyoKKyAqIEZ1bmN0aW9ucyBlYWNoIEtHREItc3VwcG9ydGluZyBhcmNoaXRlY3R1cmUgbXVzdCBwcm92aWRlOgorICovCisKKy8qKgorICoJa2dkYl9hcmNoX2luaXQgLSBQZXJmb3JtIGFueSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5pdGFsaXphdGlvbi4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHRoZSBpbml0YWxpemF0aW9uIG9mIGFueSBhcmNoaXRlY3R1cmUKKyAqCXNwZWNpZmljIGNhbGxiYWNrcy4KKyAqLworZXh0ZXJuIGludCBrZ2RiX2FyY2hfaW5pdCh2b2lkKTsKKworLyoqCisgKglrZ2RiX2FyY2hfZXhpdCAtIFBlcmZvcm0gYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB1bmluaXRhbGl6YXRpb24uCisgKgorICoJVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSB0aGUgdW5pbml0YWxpemF0aW9uIG9mIGFueSBhcmNoaXRlY3R1cmUKKyAqCXNwZWNpZmljIGNhbGxiYWNrcywgZm9yIGR5bmFtaWMgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4KKyAqLworZXh0ZXJuIHZvaWQga2dkYl9hcmNoX2V4aXQodm9pZCk7CisKKy8qKgorICoJcHRfcmVnc190b19nZGJfcmVncyAtIENvbnZlcnQgcHRyYWNlIHJlZ3MgdG8gR0RCIHJlZ3MKKyAqCUBnZGJfcmVnczogQSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlZ2lzdGVycyBpbiB0aGUgb3JkZXIgR0RCIHdhbnRzLgorICoJQHJlZ3M6IFRoZSAmc3RydWN0IHB0X3JlZ3Mgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAqCisgKglDb252ZXJ0IHRoZSBwdF9yZWdzIGluIEByZWdzIGludG8gdGhlIGZvcm1hdCBmb3IgcmVnaXN0ZXJzIHRoYXQKKyAqCUdEQiBleHBlY3RzLCBzdG9yZWQgaW4gQGdkYl9yZWdzLgorICovCitleHRlcm4gdm9pZCBwdF9yZWdzX3RvX2dkYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qKgorICoJc2xlZXBpbmdfdGhyZWFkX3RvX2dkYl9yZWdzIC0gQ29udmVydCBwdHJhY2UgcmVncyB0byBHREIgcmVncworICoJQGdkYl9yZWdzOiBBIHBvaW50ZXIgdG8gaG9sZCB0aGUgcmVnaXN0ZXJzIGluIHRoZSBvcmRlciBHREIgd2FudHMuCisgKglAcDogVGhlICZzdHJ1Y3QgdGFza19zdHJ1Y3Qgb2YgdGhlIGRlc2lyZWQgcHJvY2Vzcy4KKyAqCisgKglDb252ZXJ0IHRoZSByZWdpc3RlciB2YWx1ZXMgb2YgdGhlIHNsZWVwaW5nIHByb2Nlc3MgaW4gQHAgdG8KKyAqCXRoZSBmb3JtYXQgdGhhdCBHREIgZXhwZWN0cy4KKyAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4ga2dkYiBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUKKyAqCSZzdHJ1Y3QgcHRfcmVncyBhbmQgdGhlcmVmb3JlIGl0IHNob3VsZCBmaWxsIHRoZSBnZGIgcmVnaXN0ZXJzCisgKglAZ2RiX3JlZ3Mgd2l0aCB3aGF0IGhhcwliZWVuIHNhdmVkIGluICZzdHJ1Y3QgdGhyZWFkX3N0cnVjdAorICoJdGhyZWFkIGZpZWxkIGR1cmluZyBzd2l0Y2hfdG8uCisgKi8KK2V4dGVybiB2b2lkCitzbGVlcGluZ190aHJlYWRfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qKgorICoJZ2RiX3JlZ3NfdG9fcHRfcmVncyAtIENvbnZlcnQgR0RCIHJlZ3MgdG8gcHRyYWNlIHJlZ3MuCisgKglAZ2RiX3JlZ3M6IEEgcG9pbnRlciB0byBob2xkIHRoZSByZWdpc3RlcnMgd2UndmUgcmVjZWl2ZWQgZnJvbSBHREIuCisgKglAcmVnczogQSBwb2ludGVyIHRvIGEgJnN0cnVjdCBwdF9yZWdzIHRvIGhvbGQgdGhlc2UgdmFsdWVzIGluLgorICoKKyAqCUNvbnZlcnQgdGhlIEdEQiByZWdzIGluIEBnZGJfcmVncyBpbnRvIHRoZSBwdF9yZWdzLCBhbmQgc3RvcmUgdGhlbQorICoJaW4gQHJlZ3MuCisgKi8KK2V4dGVybiB2b2lkIGdkYl9yZWdzX3RvX3B0X3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyoqCisgKglrZ2RiX2FyY2hfaGFuZGxlX2V4Y2VwdGlvbiAtIEhhbmRsZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgR0RCIHBhY2tldHMuCisgKglAdmVjdG9yOiBUaGUgZXJyb3IgdmVjdG9yIG9mIHRoZSBleGNlcHRpb24gdGhhdCBoYXBwZW5lZC4KKyAqCUBzaWdubzogVGhlIHNpZ25hbCBudW1iZXIgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGhhcHBlbmVkLgorICoJQGVycl9jb2RlOiBUaGUgZXJyb3IgY29kZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaGFwcGVuZWQuCisgKglAcmVtY29tX2luX2J1ZmZlcjogVGhlIGJ1ZmZlciBvZiB0aGUgcGFja2V0IHdlIGhhdmUgcmVhZC4KKyAqCUByZW1jb21fb3V0X2J1ZmZlcjogVGhlIGJ1ZmZlciBvZiAlQlVGTUFYIGJ5dGVzIHRvIHdyaXRlIGEgcGFja2V0IGludG8uCisgKglAcmVnczogVGhlICZzdHJ1Y3QgcHRfcmVncyBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gTVVTVCBoYW5kbGUgdGhlICdjJyBhbmQgJ3MnIGNvbW1hbmQgcGFja2V0cywKKyAqCWFzIHdlbGwgcGFja2V0cyB0byBzZXQgLyByZW1vdmUgYSBoYXJkd2FyZSBicmVha3BvaW50LCBpZiB1c2VkLgorICoJSWYgdGhlcmUgYXJlIGFkZGl0aW9uYWwgcGFja2V0cyB3aGljaCB0aGUgaGFyZHdhcmUgbmVlZHMgdG8gaGFuZGxlLAorICoJdGhleSBhcmUgaGFuZGxlZCBoZXJlLiAgVGhlIGNvZGUgc2hvdWxkIHJldHVybiAtMSBpZiBpdCB3YW50cyB0bworICoJcHJvY2VzcyBtb3JlIHBhY2tldHMsIGFuZCBhICUwIG9yICUxIGlmIGl0IHdhbnRzIHRvIGV4aXQgZnJvbSB0aGUKKyAqCWtnZGIgY2FsbGJhY2suCisgKi8KK2V4dGVybiBpbnQKK2tnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGludCB2ZWN0b3IsIGludCBzaWdubywgaW50IGVycl9jb2RlLAorCQkJICAgY2hhciAqcmVtY29tX2luX2J1ZmZlciwKKwkJCSAgIGNoYXIgKnJlbWNvbV9vdXRfYnVmZmVyLAorCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKioKKyAqCWtnZGJfcm91bmR1cF9jcHVzIC0gR2V0IG90aGVyIENQVXMgaW50byBhIGhvbGRpbmcgcGF0dGVybgorICoJQGZsYWdzOiBDdXJyZW50IElSUSBzdGF0ZQorICoKKyAqCU9uIFNNUCBzeXN0ZW1zLCB3ZSBuZWVkIHRvIGdldCB0aGUgYXR0ZW50aW9uIG9mIHRoZSBvdGhlciBDUFVzCisgKglhbmQgZ2V0IHRoZW0gYmUgaW4gYSBrbm93biBzdGF0ZS4gIFRoaXMgc2hvdWxkIGRvIHdoYXQgaXMgbmVlZGVkCisgKgl0byBnZXQgdGhlIG90aGVyIENQVXMgdG8gY2FsbCBrZ2RiX3dhaXQoKS4gTm90ZSB0aGF0IG9uIHNvbWUgYXJjaGVzLAorICoJdGhlIE5NSSBhcHByb2FjaCBpcyBub3QgdXNlZCBmb3Igcm91bmRpbmcgdXAgYWxsIHRoZSBDUFVzLiBGb3IgZXhhbXBsZSwKKyAqCWluIGNhc2Ugb2YgTUlQUywgc21wX2NhbGxfZnVuY3Rpb24oKSBpcyB1c2VkIHRvIHJvdW5kdXAgQ1BVcy4gSW4KKyAqCXRoaXMgY2FzZSwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGJlZm9yZQorICoJY2FsbGluZyBzbXBfY2FsbF9mdW5jdGlvbigpLiBUaGUgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbiBpcworICoJdGhlIGZsYWdzIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIHRoZSBpbnRlcnJ1cHRzLiBUaGVyZSBpcworICoJbG9jYWxfaXJxX3NhdmUoKSBjYWxsIGJlZm9yZSBrZ2RiX3JvdW5kdXBfY3B1cygpLgorICoKKyAqCU9uIG5vbi1TTVAgc3lzdGVtcywgdGhpcyBpcyBub3QgY2FsbGVkLgorICovCitleHRlcm4gdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworLyogT3B0aW9uYWwgZnVuY3Rpb25zLiAqLworZXh0ZXJuIGludCBrZ2RiX3ZhbGlkYXRlX2JyZWFrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBpbnQga2dkYl9hcmNoX3NldF9icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc2F2ZWRfaW5zdHIpOworZXh0ZXJuIGludCBrZ2RiX2FyY2hfcmVtb3ZlX2JyZWFrcG9pbnQodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICpidW5kbGUpOworCisvKioKKyAqIHN0cnVjdCBrZ2RiX2FyY2ggLSBEZXNjcmliZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWVzLgorICogQGdkYl9icHRfaW5zdHI6IFRoZSBpbnN0cnVjdGlvbiB0byB0cmlnZ2VyIGEgYnJlYWtwb2ludC4KKyAqIEBmbGFnczogRmxhZ3MgZm9yIHRoZSBicmVha3BvaW50LCBjdXJyZW50bHkganVzdCAlS0dEQl9IV19CUkVBS1BPSU5ULgorICogQHNldF9icmVha3BvaW50OiBBbGxvdyBhbiBhcmNoaXRlY3R1cmUgdG8gc3BlY2lmeSBob3cgdG8gc2V0IGEgc29mdHdhcmUKKyAqIGJyZWFrcG9pbnQuCisgKiBAcmVtb3ZlX2JyZWFrcG9pbnQ6IEFsbG93IGFuIGFyY2hpdGVjdHVyZSB0byBzcGVjaWZ5IGhvdyB0byByZW1vdmUgYQorICogc29mdHdhcmUgYnJlYWtwb2ludC4KKyAqIEBzZXRfaHdfYnJlYWtwb2ludDogQWxsb3cgYW4gYXJjaGl0ZWN0dXJlIHRvIHNwZWNpZnkgaG93IHRvIHNldCBhIGhhcmR3YXJlCisgKiBicmVha3BvaW50LgorICogQHJlbW92ZV9od19icmVha3BvaW50OiBBbGxvdyBhbiBhcmNoaXRlY3R1cmUgdG8gc3BlY2lmeSBob3cgdG8gcmVtb3ZlIGEKKyAqIGhhcmR3YXJlIGJyZWFrcG9pbnQuCisgKiBAcmVtb3ZlX2FsbF9od19icmVhazogQWxsb3cgYW4gYXJjaGl0ZWN0dXJlIHRvIHNwZWNpZnkgaG93IHRvIHJlbW92ZSBhbGwKKyAqIGhhcmR3YXJlIGJyZWFrcG9pbnRzLgorICogQGNvcnJlY3RfaHdfYnJlYWs6IEFsbG93IGFuIGFyY2hpdGVjdHVyZSB0byBzcGVjaWZ5IGhvdyB0byBjb3JyZWN0IHRoZQorICogaGFyZHdhcmUgZGVidWcgcmVnaXN0ZXJzLgorICovCitzdHJ1Y3Qga2dkYl9hcmNoIHsKKwl1bnNpZ25lZCBjaGFyCQlnZGJfYnB0X2luc3RyW0JSRUFLX0lOU1RSX1NJWkVdOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaW50CSgqc2V0X2JyZWFrcG9pbnQpKHVuc2lnbmVkIGxvbmcsIGNoYXIgKik7CisJaW50CSgqcmVtb3ZlX2JyZWFrcG9pbnQpKHVuc2lnbmVkIGxvbmcsIGNoYXIgKik7CisJaW50CSgqc2V0X2h3X2JyZWFrcG9pbnQpKHVuc2lnbmVkIGxvbmcsIGludCwgZW51bSBrZ2RiX2JwdHlwZSk7CisJaW50CSgqcmVtb3ZlX2h3X2JyZWFrcG9pbnQpKHVuc2lnbmVkIGxvbmcsIGludCwgZW51bSBrZ2RiX2JwdHlwZSk7CisJdm9pZAkoKnJlbW92ZV9hbGxfaHdfYnJlYWspKHZvaWQpOworCXZvaWQJKCpjb3JyZWN0X2h3X2JyZWFrKSh2b2lkKTsKK307CisKKy8qKgorICogc3RydWN0IGtnZGJfaW8gLSBEZXNjcmliZSB0aGUgaW50ZXJmYWNlIGZvciBhbiBJL08gZHJpdmVyIHRvIHRhbGsgd2l0aCBLR0RCLgorICogQG5hbWU6IE5hbWUgb2YgdGhlIEkvTyBkcml2ZXIuCisgKiBAcmVhZF9jaGFyOiBQb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHJldHVybiBvbmUgY2hhci4KKyAqIEB3cml0ZV9jaGFyOiBQb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHdyaXRlIG9uZSBjaGFyLgorICogQGZsdXNoOiBQb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGZsdXNoIGFueSBwZW5kaW5nIHdyaXRlcy4KKyAqIEBpbml0OiBQb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGluaXRpYWxpemUgdGhlIGRldmljZS4KKyAqIEBwcmVfZXhjZXB0aW9uOiBQb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGRvIGFueSBwcmVwIHdvcmsgZm9yCisgKiB0aGUgSS9PIGRyaXZlci4KKyAqIEBwb3N0X2V4Y2VwdGlvbjogUG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBkbyBhbnkgY2xlYW51cCB3b3JrCisgKiBmb3IgdGhlIEkvTyBkcml2ZXIuCisgKi8KK3N0cnVjdCBrZ2RiX2lvIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlpbnQJCQkoKnJlYWRfY2hhcikgKHZvaWQpOworCXZvaWQJCQkoKndyaXRlX2NoYXIpICh1OCk7CisJdm9pZAkJCSgqZmx1c2gpICh2b2lkKTsKKwlpbnQJCQkoKmluaXQpICh2b2lkKTsKKwl2b2lkCQkJKCpwcmVfZXhjZXB0aW9uKSAodm9pZCk7CisJdm9pZAkJCSgqcG9zdF9leGNlcHRpb24pICh2b2lkKTsKK307CisKK2V4dGVybiBzdHJ1Y3Qga2dkYl9hcmNoCQlhcmNoX2tnZGJfb3BzOworCitleHRlcm4gaW50IGtnZGJfcmVnaXN0ZXJfaW9fbW9kdWxlKHN0cnVjdCBrZ2RiX2lvICpsb2NhbF9rZ2RiX2lvX29wcyk7CitleHRlcm4gdm9pZCBrZ2RiX3VucmVnaXN0ZXJfaW9fbW9kdWxlKHN0cnVjdCBrZ2RiX2lvICpsb2NhbF9rZ2RiX2lvX29wcyk7CisKK2V4dGVybiBpbnQga2dkYl9oZXgybG9uZyhjaGFyICoqcHRyLCBsb25nICpsb25nX3ZhbCk7CitleHRlcm4gaW50IGtnZGJfbWVtMmhleChjaGFyICptZW0sIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK2V4dGVybiBpbnQga2dkYl9oZXgybWVtKGNoYXIgKmJ1ZiwgY2hhciAqbWVtLCBpbnQgY291bnQpOworCitleHRlcm4gaW50IGtnZGJfaXNyZW1vdmVkYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyKTsKKworZXh0ZXJuIGludAora2dkYl9oYW5kbGVfZXhjZXB0aW9uKGludCBleF92ZWN0b3IsIGludCBzaWdubywgaW50IGVycl9jb2RlLAorCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IGtnZGJfbm1pY2FsbGJhY2soaW50IGNwdSwgdm9pZCAqcmVncyk7CisKK2V4dGVybiBpbnQJCQlrZ2RiX3NpbmdsZV9zdGVwOworZXh0ZXJuIGF0b21pY190CQkJa2dkYl9hY3RpdmU7CisKKyNlbmRpZiAvKiBfS0dEQl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmggYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAppbmRleCA0YTZjZTgyLi4wZjI4NDg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaApAQCAtMTI1LDExICsxMjUsMTEgQEAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlICosIGN1cnJlbnRfa3Byb2JlKTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CiAKLSNpZmRlZiBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKKyNpZmRlZiBDT05GSUdfS1JFVFBST0JFUwogZXh0ZXJuIHZvaWQgYXJjaF9wcmVwYXJlX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKIAkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gaW50IGFyY2hfdHJhbXBvbGluZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7Ci0jZWxzZSAvKiBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMgKi8KKyNlbHNlIC8qIENPTkZJR19LUkVUUFJPQkVTICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9wcmVwYXJlX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlICpycCwKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0xMzgsNyArMTM4LDcgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMgKi8KKyNlbmRpZiAvKiBDT05GSUdfS1JFVFBST0JFUyAqLwogLyoKICAqIEZ1bmN0aW9uLXJldHVybiBwcm9iZSAtCiAgKiBOb3RlOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdGltZS5oIGIvaW5jbHVkZS9saW51eC9rdGltZS5oCmluZGV4IDJjZDdmYTcuLmNlNTk4MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t0aW1lLmgKQEAgLTMyNyw0ICszMjcsMTAgQEAKIC8qIEdldCB0aGUgcmVhbCAod2FsbC0pIHRpbWUgaW4gdGltZXNwZWMgZm9ybWF0OiAqLwogI2RlZmluZSBrdGltZV9nZXRfcmVhbF90cyh0cykJZ2V0bnN0aW1lb2ZkYXkodHMpCiAKK3N0YXRpYyBpbmxpbmUga3RpbWVfdCBuc190b19rdGltZSh1NjQgbnMpCit7CisJc3RhdGljIGNvbnN0IGt0aW1lX3Qga3RpbWVfemVybyA9IHsgLnR2NjQgPSAwIH07CisJcmV0dXJuIGt0aW1lX2FkZF9ucyhrdGltZV96ZXJvLCBucyk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm0uaCBiL2luY2x1ZGUvbGludXgva3ZtLmgKaW5kZXggNGRlNGZkMi4uYzFlYzA0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bS5oCkBAIC0yMjEsNiArMjIxLDcgQEAKICAqIEdldCBzaXplIGZvciBtbWFwKHZjcHVfZmQpCiAgKi8KICNkZWZpbmUgS1ZNX0dFVF9WQ1BVX01NQVBfU0laRSAgICBfSU8oS1ZNSU8sICAgMHgwNCkgLyogaW4gYnl0ZXMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQgICBfSU9XUihLVk1JTywgMHgwNSwgc3RydWN0IGt2bV9jcHVpZDIpCiAKIC8qCiAgKiBFeHRlbnNpb24gY2FwYWJpbGl0eSBsaXN0LgpAQCAtMjMwLDggKzIzMSw4IEBACiAjZGVmaW5lIEtWTV9DQVBfTU1VX1NIQURPV19DQUNIRV9DT05UUk9MIDIKICNkZWZpbmUgS1ZNX0NBUF9VU0VSX01FTU9SWSAzCiAjZGVmaW5lIEtWTV9DQVBfU0VUX1RTU19BRERSIDQKLSNkZWZpbmUgS1ZNX0NBUF9FWFRfQ1BVSUQgNQogI2RlZmluZSBLVk1fQ0FQX1ZBUElDIDYKKyNkZWZpbmUgS1ZNX0NBUF9FWFRfQ1BVSUQgNwogCiAvKgogICogaW9jdGxzIGZvciBWTSBmZHMKQEAgLTI0OSw3ICsyNTAsNiBAQAogI2RlZmluZSBLVk1fQ1JFQVRFX1ZDUFUgICAgICAgICAgIF9JTyhLVk1JTywgIDB4NDEpCiAjZGVmaW5lIEtWTV9HRVRfRElSVFlfTE9HICAgICAgICAgX0lPVyhLVk1JTywgMHg0Miwgc3RydWN0IGt2bV9kaXJ0eV9sb2cpCiAjZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FMSUFTICAgICAgX0lPVyhLVk1JTywgMHg0Mywgc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMpCi0jZGVmaW5lIEtWTV9HRVRfU1VQUE9SVEVEX0NQVUlEICAgX0lPV1IoS1ZNSU8sIDB4NDgsIHN0cnVjdCBrdm1fY3B1aWQyKQogLyogRGV2aWNlIG1vZGVsIElPQyAqLwogI2RlZmluZSBLVk1fQ1JFQVRFX0lSUUNISVAJICBfSU8oS1ZNSU8sICAweDYwKQogI2RlZmluZSBLVk1fSVJRX0xJTkUJCSAgX0lPVyhLVk1JTywgMHg2MSwgc3RydWN0IGt2bV9pcnFfbGV2ZWwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggZWE0NzY0Yi4uOTI4YjBkNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTEwNyw2ICsxMDcsNyBAQAogc3RydWN0IGt2bSB7CiAJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB2Y3B1cyBhcnJheSBhbmQgQVBJQyBhY2Nlc3NlcyAqLwogCXNwaW5sb2NrX3QgbW11X2xvY2s7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSBzbG90c19sb2NrOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOyAvKiB1c2Vyc3BhY2UgdGllZCB0byB0aGlzIHZtICovCiAJaW50IG5tZW1zbG90czsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG1lbXNsb3RzW0tWTV9NRU1PUllfU0xPVFMgKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCAwMjAxZjZmLi5iMDdlM2Q0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xlZHMuaApAQCAtNTksMTUgKzU5LDcgQEAKIAogZXh0ZXJuIGludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkJCSBzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7Ci1leHRlcm4gdm9pZCBfX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIHN1cyk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGNkKQotewotCV9fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIobGNkLCBmYWxzZSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXJfc3VzcGVuZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxjZCkKLXsKLQlfX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGxjZCwgdHJ1ZSk7Ci19CitleHRlcm4gdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsY2QpOwogZXh0ZXJuIHZvaWQgbGVkX2NsYXNzZGV2X3N1c3BlbmQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogZXh0ZXJuIHZvaWQgbGVkX2NsYXNzZGV2X3Jlc3VtZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGd1ZXN0X2xhdW5jaGVyLmggYi9pbmNsdWRlL2xpbnV4L2xndWVzdF9sYXVuY2hlci5oCmluZGV4IDU4OWJlM2UuLmU3MjE3ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGd1ZXN0X2xhdW5jaGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9sZ3Vlc3RfbGF1bmNoZXIuaApAQCAtMTYsNiArMTYsMTAgQEAKICAqIGEgbmV3IGRldmljZSwgd2Ugc2ltcGx5IG5lZWQgdG8gd3JpdGUgYSBuZXcgdmlydGlvIGRyaXZlciBhbmQgY3JlYXRlIHN1cHBvcnQKICAqIGZvciBpdCBpbiB0aGUgTGF1bmNoZXI6IHRoaXMgY29kZSB3b24ndCBuZWVkIHRvIGNoYW5nZS4KICAqCisgKiBWaXJ0aW8gZGV2aWNlcyBhcmUgYWxzbyB1c2VkIGJ5IGt2bSwgc28gd2UgY2FuIHNpbXBseSByZXVzZSB0aGVpciBvcHRpbWl6ZWQKKyAqIGRldmljZSBkcml2ZXJzLiAgQW5kIG9uZSBkYXkgd2hlbiBldmVyeW9uZSB1c2VzIHZpcnRpbywgbXkgcGxhbiB3aWxsIGJlCisgKiBjb21wbGV0ZS4gIEJ3YWhhaGFoYWghCisgKgogICogRGV2aWNlcyBhcmUgZGVzY3JpYmVkIGJ5IGEgc2ltcGxpZmllZCBJRCwgYSBzdGF0dXMgYnl0ZSwgYW5kIHNvbWUgImNvbmZpZyIKICAqIGJ5dGVzIHdoaWNoIGRlc2NyaWJlIHRoaXMgZGV2aWNlJ3MgY29uZmlndXJhdGlvbi4gIFRoaXMgaXMgcGxhY2VkIGJ5IHRoZQogICogTGF1bmNoZXIganVzdCBhYm92ZSB0aGUgdG9wIG9mIHBoeXNpY2FsIG1lbW9yeToKQEAgLTI2LDcgKzMwLDcgQEAKIAkvKiBUaGUgbnVtYmVyIG9mIHZpcnRxdWV1ZXMgKGZpcnN0IGluIGNvbmZpZyBhcnJheSkgKi8KIAlfX3U4IG51bV92cTsKIAkvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGZlYXR1cmUgYml0cy4gIE11bHRpcGx5IGJ5IDI6IG9uZSBmb3IgaG9zdAotCSAqIGZlYXR1cmVzIGFuZCBvbmUgZm9yIGd1ZXN0IGFja25vd2xlZGdlbWVudHMuICovCisJICogZmVhdHVyZXMgYW5kIG9uZSBmb3IgR3Vlc3QgYWNrbm93bGVkZ2VtZW50cy4gKi8KIAlfX3U4IGZlYXR1cmVfbGVuOwogCS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIGNvbmZpZyBhcnJheSBhZnRlciB2aXJ0cXVldWVzLiAqLwogCV9fdTggY29uZmlnX2xlbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGJjNWE4ZDAuLjA3ZWQ1NmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMTIyLDYgKzEyMiw4IEBACiAKIAlBVEFQSV9NQVhfRFJBSU4JCT0gMTYgPDwgMTAsCiAKKwlBVEFfQUxMX0RFVklDRVMJCT0gKDEgPDwgQVRBX01BWF9ERVZJQ0VTKSAtIDEsCisKIAlBVEFfU0hUX0VNVUxBVEVECT0gMSwKIAlBVEFfU0hUX0NNRF9QRVJfTFVOCT0gMSwKIAlBVEFfU0hUX1RISVNfSUQJCT0gLTEsCkBAIC0xMzgsNiArMTQwLDcgQEAKIAlBVEFfREZMQUdfQU4JCT0gKDEgPDwgNyksIC8qIEFOIGNvbmZpZ3VyZWQgKi8KIAlBVEFfREZMQUdfSElQTQkJPSAoMSA8PCA4KSwgLyogZGV2aWNlIHN1cHBvcnRzIEhJUE0gKi8KIAlBVEFfREZMQUdfRElQTQkJPSAoMSA8PCA5KSwgLyogZGV2aWNlIHN1cHBvcnRzIERJUE0gKi8KKwlBVEFfREZMQUdfRE1BRElSCT0gKDEgPDwgMTApLCAvKiBkZXZpY2UgcmVxdWlyZXMgRE1BRElSICovCiAJQVRBX0RGTEFHX0NGR19NQVNLCT0gKDEgPDwgMTIpIC0gMSwKIAogCUFUQV9ERkxBR19QSU8JCT0gKDEgPDwgMTIpLCAvKiBkZXZpY2UgbGltaXRlZCB0byBQSU8gbW9kZSAqLwpAQCAtMTYyLDkgKzE2NSw2IEBACiAJQVRBX0RFVl9OT05FCQk9IDksCS8qIG5vIGRldmljZSAqLwogCiAJLyogc3RydWN0IGF0YV9saW5rIGZsYWdzICovCi0JQVRBX0xGTEFHX0hSU1RfVE9fUkVTVU1FID0gKDEgPDwgMCksIC8qIGhhcmRyZXNldCB0byByZXN1bWUgbGluayAqLwotCUFUQV9MRkxBR19TS0lQX0QySF9CU1kJPSAoMSA8PCAxKSwgLyogY2FuJ3Qgd2FpdCBmb3IgdGhlIGZpcnN0IEQySAotCQkJCQkgICAgICogUmVnaXN0ZXIgRklTIGNsZWFyaW5nIEJTWSAqLwogCUFUQV9MRkxBR19OT19TUlNUCT0gKDEgPDwgMiksIC8qIGF2b2lkIHNvZnRyZXNldCAqLwogCUFUQV9MRkxBR19BU1NVTUVfQVRBCT0gKDEgPDwgMyksIC8qIGFzc3VtZSBBVEEgY2xhc3MgKi8KIAlBVEFfTEZMQUdfQVNTVU1FX1NFTUIJPSAoMSA8PCA0KSwgLyogYXNzdW1lIFNFTUIgY2xhc3MgKi8KQEAgLTIyNCw2ICsyMjQsNyBAQAogCUFUQV9RQ0ZMQUdfUkVTVUxUX1RGCT0gKDEgPDwgNCksIC8qIHJlc3VsdCBURiByZXF1ZXN0ZWQgKi8KIAlBVEFfUUNGTEFHX0NMRUFSX0VYQ0wJPSAoMSA8PCA1KSwgLyogY2xlYXIgZXhjbF9saW5rIG9uIGNvbXBsZXRpb24gKi8KIAlBVEFfUUNGTEFHX1FVSUVUCT0gKDEgPDwgNiksIC8qIGRvbid0IHJlcG9ydCBkZXZpY2UgZXJyb3IgKi8KKwlBVEFfUUNGTEFHX1JFVFJZCT0gKDEgPDwgNyksIC8qIHJldHJ5IGFmdGVyIGZhaWx1cmUgKi8KIAogCUFUQV9RQ0ZMQUdfRkFJTEVECT0gKDEgPDwgMTYpLCAvKiBjbWQgZmFpbGVkIGFuZCBpcyBvd25lZCBieSBFSCAqLwogCUFUQV9RQ0ZMQUdfU0VOU0VfVkFMSUQJPSAoMSA8PCAxNyksIC8qIHNlbnNlIGRhdGEgdmFsaWQgKi8KQEAgLTI0OCw2ICsyNDksMjUgQEAKIAkgKi8KIAlBVEFfVE1PVVRfRkZfV0FJVAk9IDQgKiBIWiAvIDUsCiAKKwkvKiBTcGVjIG1hbmRhdGVzIHRvIHdhaXQgZm9yICI+PSAybXMiIGJlZm9yZSBjaGVja2luZyBzdGF0dXMKKwkgKiBhZnRlciByZXNldC4gIFdlIHdhaXQgMTUwbXMsIGJlY2F1c2UgdGhhdCB3YXMgdGhlIG1hZ2ljCisJICogZGVsYXkgdXNlZCBmb3IgQVRBUEkgZGV2aWNlcyBpbiBIYWxlIExhbmRpcydzIEFUQURSVlIsIGZvcgorCSAqIHRoZSBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIEFUQSBjb21tYW5kIHJlZ2lzdGVyIGlzCisJICogd3JpdHRlbiwgYW5kIHRoZW4gc3RhdHVzIGlzIGNoZWNrZWQuICBCZWNhdXNlIHdhaXRpbmcgZm9yCisJICogImEgd2hpbGUiIGJlZm9yZSBjaGVja2luZyBzdGF0dXMgaXMgZmluZSwgcG9zdCBTUlNULCB3ZQorCSAqIHBlcmZvcm0gdGhpcyBtYWdpYyBkZWxheSBoZXJlIGFzIHdlbGwuCisJICoKKwkgKiBPbGQgZHJpdmVycy9pZGUgdXNlcyB0aGUgMm1TIHJ1bGUgYW5kIHRoZW4gd2FpdHMgZm9yIHJlYWR5LgorCSAqLworCUFUQV9XQUlUX0FGVEVSX1JFU0VUX01TRUNTID0gMTUwLAorCisJLyogSWYgUE1QIGlzIHN1cHBvcnRlZCwgd2UgaGF2ZSB0byBkbyBmb2xsb3ctdXAgU1JTVC4gIEFzIHNvbWUKKwkgKiBQTVBzIGRvbid0IHNlbmQgRDJIIFJlZyBGSVMgYWZ0ZXIgaGFyZHJlc2V0LCBMTERzIGFyZQorCSAqIGFkdmlzZWQgdG8gd2FpdCBvbmx5IGZvciB0aGUgZm9sbG93aW5nIGR1cmF0aW9uIGJlZm9yZQorCSAqIGRvaW5nIFNSU1QuCisJICovCisJQVRBX1RNT1VUX1BNUF9TUlNUX1dBSVQJPSAxICogSFosCisKIAkvKiBBVEEgYnVzIHN0YXRlcyAqLwogCUJVU19VTktOT1dOCQk9IDAsCiAJQlVTX0RNQQkJCT0gMSwKQEAgLTI3OCw3ICsyOTgsNiBAQAogCiAJLyogc2l6ZSBvZiBidWZmZXIgdG8gcGFkIHhmZXJzIGVuZGluZyBvbiB1bmFsaWduZWQgYm91bmRhcmllcyAqLwogCUFUQV9ETUFfUEFEX1NaCQk9IDQsCi0JQVRBX0RNQV9QQURfQlVGX1NaCT0gQVRBX0RNQV9QQURfU1ogKiBBVEFfTUFYX1FVRVVFLAogCiAJLyogZXJpbmcgc2l6ZSAqLwogCUFUQV9FUklOR19TSVpFCQk9IDMyLApAQCAtMjkyLDE5ICszMTEsMTggQEAKIAogCS8qIHJlc2V0IC8gcmVjb3ZlcnkgYWN0aW9uIHR5cGVzICovCiAJQVRBX0VIX1JFVkFMSURBVEUJPSAoMSA8PCAwKSwKLQlBVEFfRUhfU09GVFJFU0VUCT0gKDEgPDwgMSksCi0JQVRBX0VIX0hBUkRSRVNFVAk9ICgxIDw8IDIpLAorCUFUQV9FSF9TT0ZUUkVTRVQJPSAoMSA8PCAxKSwgLyogbWVhbmluZ2Z1bCBvbmx5IGluIC0+cHJlcmVzZXQgKi8KKwlBVEFfRUhfSEFSRFJFU0VUCT0gKDEgPDwgMiksIC8qIG1lYW5pbmdmdWwgb25seSBpbiAtPnByZXJlc2V0ICovCisJQVRBX0VIX1JFU0VUCQk9IEFUQV9FSF9TT0ZUUkVTRVQgfCBBVEFfRUhfSEFSRFJFU0VULAogCUFUQV9FSF9FTkFCTEVfTElOSwk9ICgxIDw8IDMpLAorCUFUQV9FSF9MUE0JCT0gKDEgPDwgNCksICAvKiBsaW5rIHBvd2VyIG1hbmFnZW1lbnQgYWN0aW9uICovCiAKLQlBVEFfRUhfUkVTRVRfTUFTSwk9IEFUQV9FSF9TT0ZUUkVTRVQgfCBBVEFfRUhfSEFSRFJFU0VULAogCUFUQV9FSF9QRVJERVZfTUFTSwk9IEFUQV9FSF9SRVZBTElEQVRFLAogCiAJLyogYXRhX2VoX2luZm8tPmZsYWdzICovCiAJQVRBX0VISV9IT1RQTFVHR0VECT0gKDEgPDwgMCksICAvKiBjb3VsZCBoYXZlIGJlZW4gaG90cGx1Z2dlZCAqLwotCUFUQV9FSElfUkVTVU1FX0xJTksJPSAoMSA8PCAxKSwgIC8qIHJlc3VtZSBsaW5rIChyZXNldCBtb2RpZmllcikgKi8KIAlBVEFfRUhJX05PX0FVVE9QU1kJPSAoMSA8PCAyKSwgIC8qIG5vIGF1dG9wc3kgKi8KIAlBVEFfRUhJX1FVSUVUCQk9ICgxIDw8IDMpLCAgLyogYmUgcXVpZXQgKi8KLQlBVEFfRUhJX0xQTQkJPSAoMSA8PCA0KSwgIC8qIGxpbmsgcG93ZXIgbWFuYWdlbWVudCBhY3Rpb24gKi8KIAogCUFUQV9FSElfRElEX1NPRlRSRVNFVAk9ICgxIDw8IDE2KSwgLyogYWxyZWFkeSBzb2Z0LXJlc2V0IHRoaXMgcG9ydCAqLwogCUFUQV9FSElfRElEX0hBUkRSRVNFVAk9ICgxIDw8IDE3KSwgLyogYWxyZWFkeSBzb2Z0LXJlc2V0IHRoaXMgcG9ydCAqLwpAQCAtMzEzLDcgKzMzMSw2IEBACiAJQVRBX0VISV9QT1NUX1NFVE1PREUJPSAoMSA8PCAyMCksIC8qIHJldmFpbGRhdGluZyBhZnRlciBzZXRtb2RlICovCiAKIAlBVEFfRUhJX0RJRF9SRVNFVAk9IEFUQV9FSElfRElEX1NPRlRSRVNFVCB8IEFUQV9FSElfRElEX0hBUkRSRVNFVCwKLQlBVEFfRUhJX1JFU0VUX01PRElGSUVSX01BU0sgPSBBVEFfRUhJX1JFU1VNRV9MSU5LLAogCiAJLyogbWF4IHRyaWVzIGlmIGVycm9yIGNvbmRpdGlvbiBpcyBzdGlsbCBzZXQgYWZ0ZXIgLT5lcnJvcl9oYW5kbGVyICovCiAJQVRBX0VIX01BWF9UUklFUwk9IDUsCkBAIC0zNTAsNyArMzY3LDI0IEBACiAJQVRBUElfUkVBRAkJPSAwLAkJLyogUkVBRHMgKi8KIAlBVEFQSV9XUklURQkJPSAxLAkJLyogV1JJVEVzICovCiAJQVRBUElfUkVBRF9DRAkJPSAyLAkJLyogUkVBRCBDRCBbTVNGXSAqLwotCUFUQVBJX01JU0MJCT0gMywJCS8qIHRoZSByZXN0ICovCisJQVRBUElfUEFTU19USFJVCQk9IDMsCQkvKiBTQVQgcGFzcy10aHJ1ICovCisJQVRBUElfTUlTQwkJPSA0LAkJLyogdGhlIHJlc3QgKi8KKworCS8qIFRpbWluZyBjb25zdGFudHMgKi8KKwlBVEFfVElNSU5HX1NFVFVQCT0gKDEgPDwgMCksCisJQVRBX1RJTUlOR19BQ1Q4Qgk9ICgxIDw8IDEpLAorCUFUQV9USU1JTkdfUkVDOEIJPSAoMSA8PCAyKSwKKwlBVEFfVElNSU5HX0NZQzhCCT0gKDEgPDwgMyksCisJQVRBX1RJTUlOR184QklUCQk9IEFUQV9USU1JTkdfQUNUOEIgfCBBVEFfVElNSU5HX1JFQzhCIHwKKwkJCQkgIEFUQV9USU1JTkdfQ1lDOEIsCisJQVRBX1RJTUlOR19BQ1RJVkUJPSAoMSA8PCA0KSwKKwlBVEFfVElNSU5HX1JFQ09WRVIJPSAoMSA8PCA1KSwKKwlBVEFfVElNSU5HX0NZQ0xFCT0gKDEgPDwgNiksCisJQVRBX1RJTUlOR19VRE1BCQk9ICgxIDw8IDcpLAorCUFUQV9USU1JTkdfQUxMCQk9IEFUQV9USU1JTkdfU0VUVVAgfCBBVEFfVElNSU5HX0FDVDhCIHwKKwkJCQkgIEFUQV9USU1JTkdfUkVDOEIgfCBBVEFfVElNSU5HX0NZQzhCIHwKKwkJCQkgIEFUQV9USU1JTkdfQUNUSVZFIHwgQVRBX1RJTUlOR19SRUNPVkVSIHwKKwkJCQkgIEFUQV9USU1JTkdfQ1lDTEUgfCBBVEFfVElNSU5HX1VETUEsCiB9OwogCiBlbnVtIGF0YV94ZmVyX21hc2sgewpAQCAtNDA5LDggKzQ0Myw5IEBACiAJTUFYX1BFUkZPUk1BTkNFLAogCU1FRElVTV9QT1dFUiwKIH07Ci1leHRlcm4gc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgY2xhc3NfZGV2aWNlX2F0dHJfbGlua19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5OwogCisjaWZkZWYgQ09ORklHX0FUQV9TRkYKIHN0cnVjdCBhdGFfaW9wb3J0cyB7CiAJdm9pZCBfX2lvbWVtCQkqY21kX2FkZHI7CiAJdm9pZCBfX2lvbWVtCQkqZGF0YV9hZGRyOwpAQCAtNDI4LDYgKzQ2Myw3IEBACiAJdm9pZCBfX2lvbWVtCQkqYm1kbWFfYWRkcjsKIAl2b2lkIF9faW9tZW0JCSpzY3JfYWRkcjsKIH07CisjZW5kaWYgLyogQ09ORklHX0FUQV9TRkYgKi8KIAogc3RydWN0IGF0YV9ob3N0IHsKIAlzcGlubG9ja190CQlsb2NrOwpAQCAtNDM1LDcgKzQ3MSw3IEBACiAJdm9pZCBfX2lvbWVtICogY29uc3QJKmlvbWFwOwogCXVuc2lnbmVkIGludAkJbl9wb3J0czsKIAl2b2lkCQkJKnByaXZhdGVfZGF0YTsKLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyAqb3BzOworCXN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpvcHM7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCiAJYWNwaV9oYW5kbGUJCWFjcGlfaGFuZGxlOwpAQCAtNDU3LDI0ICs0OTMsMTkgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEFUQV9RQ0ZMQUdfeHh4ICovCiAJdW5zaWduZWQgaW50CQl0YWc7CiAJdW5zaWduZWQgaW50CQluX2VsZW07Ci0JdW5zaWduZWQgaW50CQltYXBwZWRfbl9lbGVtOwogCiAJaW50CQkJZG1hX2RpcjsKIAotCXVuc2lnbmVkIGludAkJcGFkX2xlbjsKIAl1bnNpZ25lZCBpbnQJCXNlY3Rfc2l6ZTsKIAogCXVuc2lnbmVkIGludAkJbmJ5dGVzOwotCXVuc2lnbmVkIGludAkJcmF3X25ieXRlczsKKwl1bnNpZ25lZCBpbnQJCWV4dHJhYnl0ZXM7CiAJdW5zaWduZWQgaW50CQljdXJieXRlczsKIAogCXN0cnVjdCBzY2F0dGVybGlzdAkqY3Vyc2c7CiAJdW5zaWduZWQgaW50CQljdXJzZ19vZnM7CiAKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKmxhc3Rfc2c7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0CXNhdmVkX2xhc3Rfc2c7CiAJc3RydWN0IHNjYXR0ZXJsaXN0CXNnZW50OwotCXN0cnVjdCBzY2F0dGVybGlzdAlleHRyYV9zZ1syXTsKIAogCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CiAKQEAgLTYwOSw3ICs2NDAsNyBAQAogCiBzdHJ1Y3QgYXRhX3BvcnQgewogCXN0cnVjdCBTY3NpX0hvc3QJKnNjc2lfaG9zdDsgLyogb3VyIGNvLWFsbG9jYXRlZCBzY3NpIGhvc3QgKi8KLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyAqb3BzOworCXN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpvcHM7CiAJc3BpbmxvY2tfdAkJKmxvY2s7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CS8qIEFUQV9GTEFHX3h4eCAqLwogCXVuc2lnbmVkIGludAkJcGZsYWdzOyAvKiBBVEFfUEZMQUdfeHh4ICovCkBAIC02MTksMTAgKzY1MCw5IEBACiAJc3RydWN0IGF0YV9wcmQJCSpwcmQ7CSAvKiBvdXIgU0cgbGlzdCAqLwogCWRtYV9hZGRyX3QJCXByZF9kbWE7IC8qIGFuZCBpdHMgRE1BIG1hcHBpbmcgKi8KIAotCXZvaWQJCQkqcGFkOwkvKiBhcnJheSBvZiBETUEgcGFkIGJ1ZmZlcnMgKi8KLQlkbWFfYWRkcl90CQlwYWRfZG1hOwotCisjaWZkZWYgQ09ORklHX0FUQV9TRkYKIAlzdHJ1Y3QgYXRhX2lvcG9ydHMJaW9hZGRyOwkvKiBBVEEgY21kL2N0bC9kbWEgcmVnaXN0ZXIgYmxvY2tzICovCisjZW5kaWYgLyogQ09ORklHX0FUQV9TRkYgKi8KIAogCXU4CQkJY3RsOwkvKiBjYWNoZSBvZiBBVEEgY29udHJvbCByZWdpc3RlciAqLwogCXU4CQkJbGFzdF9jdGw7CS8qIENhY2hlIGxhc3Qgd3JpdHRlbiB2YWx1ZSAqLwpAQCAtNjc0LDgxICs3MDQsMTA4IEBACiAJdTgJCQlzZWN0b3JfYnVmW0FUQV9TRUNUX1NJWkVdOyAvKiBvd25lZCBieSBFSCAqLwogfTsKIAorLyogVGhlIGZvbGxvd2luZyBpbml0aWFsaXplciBvdmVycmlkZXMgYSBtZXRob2QgdG8gTlVMTCB3aGV0aGVyIG9uZSBvZgorICogaXRzIHBhcmVudCBoYXMgdGhlIG1ldGhvZCBkZWZpbmVkIG9yIG5vdC4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICogRVJSX1BUUigtRU5PRU5UKS4gIFVuZm9ydHVuYXRlbHksIEVSUl9QVFIgZG9lc24ndCByZW5kZXIgYSBjb25zdGFudAorICogZXhwcmVzc2lvbiBhbmQgdGh1cyBjYW4ndCBiZSB1c2VkIGFzIGFuIGluaXRpYWxpemVyLgorICovCisjZGVmaW5lIEFUQV9PUF9OVUxMCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKSgtRU5PRU5UKQorCiBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB7Ci0Jdm9pZCAoKmRldl9jb25maWcpIChzdHJ1Y3QgYXRhX2RldmljZSAqKTsKLQotCXZvaWQgKCpzZXRfcGlvbW9kZSkgKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKLQl2b2lkICgqc2V0X2RtYW1vZGUpIChzdHJ1Y3QgYXRhX3BvcnQgKiwgc3RydWN0IGF0YV9kZXZpY2UgKik7Ci0JdW5zaWduZWQgbG9uZyAoKm1vZGVfZmlsdGVyKSAoc3RydWN0IGF0YV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyk7Ci0KLQl2b2lkICgqdGZfbG9hZCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKLQl2b2lkICgqdGZfcmVhZCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKLQotCXZvaWQgKCpleGVjX2NvbW1hbmQpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKLQl1OCAgICgqY2hlY2tfc3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLQl1OCAgICgqY2hlY2tfYWx0c3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLQl2b2lkICgqZGV2X3NlbGVjdCkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7Ci0KLQl2b2lkICgqcGh5X3Jlc2V0KSAoc3RydWN0IGF0YV9wb3J0ICphcCk7IC8qIG9ic29sZXRlICovCi0JaW50ICAoKnNldF9tb2RlKSAoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnJfZmFpbGVkX2Rldik7Ci0KLQlpbnQgKCpjYWJsZV9kZXRlY3QpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLQotCWludCAgKCpjaGVja19hdGFwaV9kbWEpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLQotCXZvaWQgKCpibWRtYV9zZXR1cCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotCXZvaWQgKCpibWRtYV9zdGFydCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotCi0JdW5zaWduZWQgaW50ICgqZGF0YV94ZmVyKSAoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCSAgIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBydyk7Ci0KLQlpbnQgKCpxY19kZWZlcikgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotCXZvaWQgKCpxY19wcmVwKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci0JdW5zaWduZWQgaW50ICgqcWNfaXNzdWUpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLQotCS8qIHBvcnQgbXVsdGlwbGllciAqLwotCXZvaWQgKCpwbXBfYXR0YWNoKSAoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci0Jdm9pZCAoKnBtcF9kZXRhY2gpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLQotCS8qIEVycm9yIGhhbmRsZXJzLiAgLT5lcnJvcl9oYW5kbGVyIG92ZXJyaWRlcyAtPmVuZ190aW1lb3V0IGFuZAotCSAqIGluZGljYXRlcyB0aGF0IG5ldy1zdHlsZSBFSCBpcyBpbiBwbGFjZS4KKwkvKgorCSAqIENvbW1hbmQgZXhlY3V0aW9uCiAJICovCi0Jdm9pZCAoKmVuZ190aW1lb3V0KSAoc3RydWN0IGF0YV9wb3J0ICphcCk7IC8qIG9ic29sZXRlICovCisJaW50ICAoKnFjX2RlZmVyKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKKwlpbnQgICgqY2hlY2tfYXRhcGlfZG1hKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKKwl2b2lkICgqcWNfcHJlcCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisJdW5zaWduZWQgaW50ICgqcWNfaXNzdWUpKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworCWJvb2wgKCpxY19maWxsX3J0Zikoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAKLQl2b2lkICgqZnJlZXplKSAoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci0Jdm9pZCAoKnRoYXcpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLQl2b2lkICgqZXJyb3JfaGFuZGxlcikgKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotCXZvaWQgKCpwb3N0X2ludGVybmFsX2NtZCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworCS8qCisJICogQ29uZmlndXJhdGlvbiBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nCisJICovCisJaW50ICAoKmNhYmxlX2RldGVjdCkoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdW5zaWduZWQgbG9uZyAoKm1vZGVfZmlsdGVyKShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHhmZXJfbWFzayk7CisJdm9pZCAoKnNldF9waW9tb2RlKShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKKwl2b2lkICgqc2V0X2RtYW1vZGUpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOworCWludCAgKCpzZXRfbW9kZSkoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnJfZmFpbGVkX2Rldik7CiAKLQlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyOwotCXZvaWQgKCppcnFfY2xlYXIpIChzdHJ1Y3QgYXRhX3BvcnQgKik7Ci0JdTggKCppcnFfb24pIChzdHJ1Y3QgYXRhX3BvcnQgKik7CisJdm9pZCAoKmRldl9jb25maWcpKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwogCi0JaW50ICgqc2NyX3JlYWQpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgKnZhbCk7Ci0JaW50ICgqc2NyX3dyaXRlKSAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CisJdm9pZCAoKmZyZWV6ZSkoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdm9pZCAoKnRoYXcpKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCWF0YV9wcmVyZXNldF9mbl90CXByZXJlc2V0OworCWF0YV9yZXNldF9mbl90CQlzb2Z0cmVzZXQ7CisJYXRhX3Jlc2V0X2ZuX3QJCWhhcmRyZXNldDsKKwlhdGFfcG9zdHJlc2V0X2ZuX3QJcG9zdHJlc2V0OworCWF0YV9wcmVyZXNldF9mbl90CXBtcF9wcmVyZXNldDsKKwlhdGFfcmVzZXRfZm5fdAkJcG1wX3NvZnRyZXNldDsKKwlhdGFfcmVzZXRfZm5fdAkJcG1wX2hhcmRyZXNldDsKKwlhdGFfcG9zdHJlc2V0X2ZuX3QJcG1wX3Bvc3RyZXNldDsKKwl2b2lkICgqZXJyb3JfaGFuZGxlcikoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdm9pZCAoKnBvc3RfaW50ZXJuYWxfY21kKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAotCWludCAoKnBvcnRfc3VzcGVuZCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHBtX21lc3NhZ2VfdCBtZXNnKTsKLQlpbnQgKCpwb3J0X3Jlc3VtZSkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotCWludCAoKmVuYWJsZV9wbSkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGVudW0gbGlua19wbSBwb2xpY3kpOwotCXZvaWQgKCpkaXNhYmxlX3BtKSAoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci0JaW50ICgqcG9ydF9zdGFydCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotCXZvaWQgKCpwb3J0X3N0b3ApIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwkvKgorCSAqIE9wdGlvbmFsIGZlYXR1cmVzCisJICovCisJaW50ICAoKnNjcl9yZWFkKShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgKnZhbCk7CisJaW50ICAoKnNjcl93cml0ZSkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CisJdm9pZCAoKnBtcF9hdHRhY2gpKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXZvaWQgKCpwbXBfZGV0YWNoKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwlpbnQgICgqZW5hYmxlX3BtKShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBlbnVtIGxpbmtfcG0gcG9saWN5KTsKKwl2b2lkICgqZGlzYWJsZV9wbSkoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKLQl2b2lkICgqaG9zdF9zdG9wKSAoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKKwkvKgorCSAqIFN0YXJ0LCBzdG9wLCBzdXNwZW5kIGFuZCByZXN1bWUKKwkgKi8KKwlpbnQgICgqcG9ydF9zdXNwZW5kKShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBwbV9tZXNzYWdlX3QgbWVzZyk7CisJaW50ICAoKnBvcnRfcmVzdW1lKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwlpbnQgICgqcG9ydF9zdGFydCkoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdm9pZCAoKnBvcnRfc3RvcCkoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdm9pZCAoKmhvc3Rfc3RvcCkoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKIAotCXZvaWQgKCpibWRtYV9zdG9wKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci0JdTggICAoKmJtZG1hX3N0YXR1cykgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworI2lmZGVmIENPTkZJR19BVEFfU0ZGCisJLyoKKwkgKiBTRkYgLyB0YXNrZmlsZSBvcmllbnRlZCBvcHMKKwkgKi8KKwl2b2lkICgqc2ZmX2Rldl9zZWxlY3QpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpOworCXU4ICAgKCpzZmZfY2hlY2tfc3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl1OCAgICgqc2ZmX2NoZWNrX2FsdHN0YXR1cykoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJdm9pZCAoKnNmZl90Zl9sb2FkKShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CisJdm9pZCAoKnNmZl90Zl9yZWFkKShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CisJdm9pZCAoKnNmZl9leGVjX2NvbW1hbmQpKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKKwl1bnNpZ25lZCBpbnQgKCpzZmZfZGF0YV94ZmVyKShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAorCQkJdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCBpbnQgcncpOworCXU4ICAgKCpzZmZfaXJxX29uKShzdHJ1Y3QgYXRhX3BvcnQgKik7CisJdm9pZCAoKnNmZl9pcnFfY2xlYXIpKHN0cnVjdCBhdGFfcG9ydCAqKTsKKworCXZvaWQgKCpibWRtYV9zZXR1cCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisJdm9pZCAoKmJtZG1hX3N0YXJ0KShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKKwl2b2lkICgqYm1kbWFfc3RvcCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisJdTggICAoKmJtZG1hX3N0YXR1cykoc3RydWN0IGF0YV9wb3J0ICphcCk7CisjZW5kaWYgLyogQ09ORklHX0FUQV9TRkYgKi8KKworCS8qCisJICogT2Jzb2xldGUKKwkgKi8KKwl2b2lkICgqcGh5X3Jlc2V0KShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKwl2b2lkICgqZW5nX3RpbWVvdXQpKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCisJLyoKKwkgKiAtPmluaGVyaXRzIG11c3QgYmUgdGhlIGxhc3QgZmllbGQgYW5kIGFsbCB0aGUgcHJlY2VkaW5nCisJICogZmllbGRzIG11c3QgYmUgcG9pbnRlcnMuCisJICovCisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMJKmluaGVyaXRzOwogfTsKIAogc3RydWN0IGF0YV9wb3J0X2luZm8gewotCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUJKnNodDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAl1bnNpZ25lZCBsb25nCQlsaW5rX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcJCXBpb19tYXNrOwogCXVuc2lnbmVkIGxvbmcJCW13ZG1hX21hc2s7CiAJdW5zaWduZWQgbG9uZwkJdWRtYV9tYXNrOwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpwb3J0X29wczsKLQlpcnFfaGFuZGxlcl90CQlpcnFfaGFuZGxlcjsKKwlzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyAqcG9ydF9vcHM7CiAJdm9pZCAJCQkqcHJpdmF0ZV9kYXRhOwogfTsKIApAQCAtNzY2LDExICs4MjMsMTQgQEAKIAogI2RlZmluZSBGSVQodiwgdm1pbiwgdm1heCkJbWF4X3Qoc2hvcnQsIG1pbl90KHNob3J0LCB2LCB2bWF4KSwgdm1pbikKIAorLyoKKyAqIENvcmUgbGF5ZXIgLSBkcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisgKi8KIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHNhdGFfZGViX3RpbWluZ19ub3JtYWxbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHNhdGFfZGViX3RpbWluZ19ob3RwbHVnW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzYXRhX2RlYl90aW1pbmdfbG9uZ1tdOwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXRhX2R1bW15X3BvcnRfb3BzOworZXh0ZXJuIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGF0YV9kdW1teV9wb3J0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBhdGFfZHVtbXlfcG9ydF9pbmZvOwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2lnbmVkIGxvbmcgKgpAQCAtNzg5LDIyICs4NDksMjEgQEAKIAogZXh0ZXJuIHZvaWQgc2F0YV9wcmludF9saW5rX3N0YXR1cyhzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspOwogZXh0ZXJuIHZvaWQgYXRhX3BvcnRfcHJvYmUoc3RydWN0IGF0YV9wb3J0ICopOwotZXh0ZXJuIHZvaWQgYXRhX2J1c19yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgc2F0YV9zZXRfc3BkKHN0cnVjdCBhdGFfbGluayAqbGluayk7CitleHRlcm4gaW50IGF0YV9zdGRfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK2V4dGVybiBpbnQgYXRhX3dhaXRfYWZ0ZXJfcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lLAorCQkJCWludCAoKmNoZWNrX3JlYWR5KShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspKTsKIGV4dGVybiBpbnQgc2F0YV9saW5rX2RlYm91bmNlKHN0cnVjdCBhdGFfbGluayAqbGluaywKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnBhcmFtcywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiBleHRlcm4gaW50IHNhdGFfbGlua19yZXN1bWUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBjb25zdCB1bnNpZ25lZCBsb25nICpwYXJhbXMsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7Ci1leHRlcm4gaW50IGF0YV9zdGRfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKLWV4dGVybiBpbnQgYXRhX3N0ZF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwogZXh0ZXJuIGludCBzYXRhX2xpbmtfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywKLQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnRpbWluZywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CisJCQljb25zdCB1bnNpZ25lZCBsb25nICp0aW1pbmcsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUsCisJCQlib29sICpvbmxpbmUsIGludCAoKmNoZWNrX3JlYWR5KShzdHJ1Y3QgYXRhX2xpbmsgKikpOwogZXh0ZXJuIGludCBzYXRhX3N0ZF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CiBleHRlcm4gdm9pZCBhdGFfc3RkX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CiBleHRlcm4gdm9pZCBhdGFfcG9ydF9kaXNhYmxlKHN0cnVjdCBhdGFfcG9ydCAqKTsKLWV4dGVybiB2b2lkIGF0YV9zdGRfcG9ydHMoc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIpOwogCiBleHRlcm4gc3RydWN0IGF0YV9ob3N0ICphdGFfaG9zdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtYXhfcG9ydHMpOwogZXh0ZXJuIHN0cnVjdCBhdGFfaG9zdCAqYXRhX2hvc3RfYWxsb2NfcGluZm8oc3RydWN0IGRldmljZSAqZGV2LApAQCAtODE3LDcgKzg3Niw3IEBACiAJCQkgICAgIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCk7CiBleHRlcm4gdm9pZCBhdGFfaG9zdF9kZXRhY2goc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKIGV4dGVybiB2b2lkIGF0YV9ob3N0X2luaXQoc3RydWN0IGF0YV9ob3N0ICosIHN0cnVjdCBkZXZpY2UgKiwKLQkJCSAgdW5zaWduZWQgbG9uZywgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKik7CisJCQkgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICopOwogZXh0ZXJuIGludCBhdGFfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0KTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKQEAgLTgzMCw3ICs4ODksNiBAQAogZXh0ZXJuIGludCBhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGF0YV9wb3J0ICopOwogZXh0ZXJuIGludCBhdGFfc2FzX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKiksCiAJCQkgICAgc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGF0YV9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaW50IHNhdGFfc2NyX3ZhbGlkKHN0cnVjdCBhdGFfbGluayAqbGluayk7CiBleHRlcm4gaW50IHNhdGFfc2NyX3JlYWQoc3RydWN0IGF0YV9saW5rICpsaW5rLCBpbnQgcmVnLCB1MzIgKnZhbCk7CiBleHRlcm4gaW50IHNhdGFfc2NyX3dyaXRlKHN0cnVjdCBhdGFfbGluayAqbGluaywgaW50IHJlZywgdTMyIHZhbCk7CkBAIC04NDIsMjEgKzkwMCwxMCBAQAogZXh0ZXJuIHZvaWQgYXRhX2hvc3RfcmVzdW1lKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7CiAjZW5kaWYKIGV4dGVybiBpbnQgYXRhX3JhdGVsaW1pdCh2b2lkKTsKLWV4dGVybiBpbnQgYXRhX2J1c3lfc2xlZXAoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJCSAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3BhdCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKLWV4dGVybiB2b2lkIGF0YV93YWl0X2FmdGVyX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwotZXh0ZXJuIGludCBhdGFfd2FpdF9yZWFkeShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIGV4dGVybiB1MzIgYXRhX3dhaXRfcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1MzIgdmFsLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGludGVydmFsX21zZWMsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tc2VjKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgYXRhX2Rldl90cnlfY2xhc3NpZnkoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgaW50IHByZXNlbnQsCi0JCQkJCSB1OCAqcl9lcnIpOwotCi0vKgotICogRGVmYXVsdCBkcml2ZXIgb3BzIGltcGxlbWVudGF0aW9ucwotICovCi1leHRlcm4gdm9pZCBhdGFfdGZfbG9hZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7Ci1leHRlcm4gdm9pZCBhdGFfdGZfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CitleHRlcm4gaW50IGF0YXBpX2NtZF90eXBlKHU4IG9wY29kZSk7CiBleHRlcm4gdm9pZCBhdGFfdGZfdG9fZmlzKGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLAogCQkJICB1OCBwbXAsIGludCBpc19jbWQsIHU4ICpmaXMpOwogZXh0ZXJuIHZvaWQgYXRhX3RmX2Zyb21fZmlzKGNvbnN0IHU4ICpmaXMsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKQEAgLTg3MCwyMyArOTE3LDkgQEAKIGV4dGVybiBpbnQgYXRhX3hmZXJfbW9kZTJzaGlmdCh1bnNpZ25lZCBsb25nIHhmZXJfbW9kZSk7CiBleHRlcm4gY29uc3QgY2hhciAqYXRhX21vZGVfc3RyaW5nKHVuc2lnbmVkIGxvbmcgeGZlcl9tYXNrKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGF0YV9pZF94ZmVybWFzayhjb25zdCB1MTYgKmlkKTsKLWV4dGVybiB2b2lkIGF0YV9ub29wX2Rldl9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7Ci1leHRlcm4gdm9pZCBhdGFfc3RkX2Rldl9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7Ci1leHRlcm4gdTggYXRhX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLWV4dGVybiB1OCBhdGFfYWx0c3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotZXh0ZXJuIHZvaWQgYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CiBleHRlcm4gaW50IGF0YV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwotZXh0ZXJuIGludCBhdGFfc2ZmX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1leHRlcm4gaXJxcmV0dXJuX3QgYXRhX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfZGF0YV94ZmVyKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCi0JCQl1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBydyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGF0YV9kYXRhX3hmZXJfbm9pcnEoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKLQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IHJ3KTsKIGV4dGVybiBpbnQgYXRhX3N0ZF9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLWV4dGVybiB2b2lkIGF0YV9kdW1iX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci1leHRlcm4gdm9pZCBhdGFfcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9ub29wX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGF0YV9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHZvaWQgYXRhX3NnX2luaXQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKIAkJIHVuc2lnbmVkIGludCBuX2VsZW0pOwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfZGV2X2NsYXNzaWZ5KGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKQEAgLTg5NSwyNCArOTI4LDggQEAKIAkJCSAgdW5zaWduZWQgaW50IG9mcywgdW5zaWduZWQgaW50IGxlbik7CiBleHRlcm4gdm9pZCBhdGFfaWRfY19zdHJpbmcoY29uc3QgdTE2ICppZCwgdW5zaWduZWQgY2hhciAqcywKIAkJCSAgICB1bnNpZ25lZCBpbnQgb2ZzLCB1bnNpZ25lZCBpbnQgbGVuKTsKLWV4dGVybiB2b2lkIGF0YV9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLWV4dGVybiB2b2lkIGF0YV9ibWRtYV9zdGFydChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLWV4dGVybiB2b2lkIGF0YV9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotZXh0ZXJuIHU4ICAgYXRhX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLWV4dGVybiB2b2lkIGF0YV9ibWRtYV9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1leHRlcm4gdm9pZCBhdGFfYm1kbWFfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotZXh0ZXJuIHZvaWQgYXRhX2JtZG1hX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci1leHRlcm4gdm9pZCBhdGFfYm1kbWFfZHJpdmVfZWgoc3RydWN0IGF0YV9wb3J0ICphcCwgYXRhX3ByZXJlc2V0X2ZuX3QgcHJlcmVzZXQsCi0JCQkgICAgICAgYXRhX3Jlc2V0X2ZuX3Qgc29mdHJlc2V0LAotCQkJICAgICAgIGF0YV9yZXNldF9mbl90IGhhcmRyZXNldCwKLQkJCSAgICAgICBhdGFfcG9zdHJlc2V0X2ZuX3QgcG9zdHJlc2V0KTsKLWV4dGVybiB2b2lkIGF0YV9ibWRtYV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotZXh0ZXJuIHZvaWQgYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotZXh0ZXJuIGludCBhdGFfaHNtX21vdmUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywKLQkJCXU4IHN0YXR1cywgaW50IGluX3dxKTsKIGV4dGVybiB2b2lkIGF0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLWV4dGVybiBpbnQgYXRhX3FjX2NvbXBsZXRlX211bHRpcGxlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBxY19hY3RpdmUsCi0JCQkJICAgIHZvaWQgKCpmaW5pc2hfcWMpKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqKSk7CitleHRlcm4gaW50IGF0YV9xY19jb21wbGV0ZV9tdWx0aXBsZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1MzIgcWNfYWN0aXZlKTsKIGV4dGVybiB2b2lkIGF0YV9zY3NpX3NpbXVsYXRlKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKIAkJCSAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKIGV4dGVybiBpbnQgYXRhX3N0ZF9iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKQEAgLTkyNCw3ICs5NDEsNiBAQAogCQkJCSAgICAgICBpbnQgcXVldWVfZGVwdGgpOwogZXh0ZXJuIHN0cnVjdCBhdGFfZGV2aWNlICphdGFfZGV2X3BhaXIoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpOwogZXh0ZXJuIGludCBhdGFfZG9fc2V0X21vZGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnJfZmFpbGVkX2Rldik7Ci1leHRlcm4gdTggYXRhX2lycV9vbihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogZXh0ZXJuIGludCBhdGFfY2FibGVfNDB3aXJlKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfY2FibGVfODB3aXJlKHN0cnVjdCBhdGFfcG9ydCAqYXApOwpAQCAtOTMyLDEwICs5NDgsNyBAQAogZXh0ZXJuIGludCBhdGFfY2FibGVfaWdub3JlKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfY2FibGVfdW5rbm93bihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAotLyoKLSAqIFRpbWluZyBoZWxwZXJzCi0gKi8KLQorLyogVGltaW5nIGhlbHBlcnMgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3Bpb19uZWVkX2lvcmR5KGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICopOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdGFfdGltaW5nICphdGFfdGltaW5nX2ZpbmRfbW9kZSh1OCB4ZmVyX21vZGUpOwogZXh0ZXJuIGludCBhdGFfdGltaW5nX2NvbXB1dGUoc3RydWN0IGF0YV9kZXZpY2UgKiwgdW5zaWduZWQgc2hvcnQsCkBAIC05NDUsMjQgKzk1OCwzMSBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHU4IGF0YV90aW1pbmdfY3ljbGUybW9kZSh1bnNpZ25lZCBpbnQgeGZlcl9zaGlmdCwgaW50IGN5Y2xlKTsKIAotZW51bSB7Ci0JQVRBX1RJTUlOR19TRVRVUAk9ICgxIDw8IDApLAotCUFUQV9USU1JTkdfQUNUOEIJPSAoMSA8PCAxKSwKLQlBVEFfVElNSU5HX1JFQzhCCT0gKDEgPDwgMiksCi0JQVRBX1RJTUlOR19DWUM4Qgk9ICgxIDw8IDMpLAotCUFUQV9USU1JTkdfOEJJVAkJPSBBVEFfVElNSU5HX0FDVDhCIHwgQVRBX1RJTUlOR19SRUM4QiB8Ci0JCQkJICBBVEFfVElNSU5HX0NZQzhCLAotCUFUQV9USU1JTkdfQUNUSVZFCT0gKDEgPDwgNCksCi0JQVRBX1RJTUlOR19SRUNPVkVSCT0gKDEgPDwgNSksCi0JQVRBX1RJTUlOR19DWUNMRQk9ICgxIDw8IDYpLAotCUFUQV9USU1JTkdfVURNQQkJPSAoMSA8PCA3KSwKLQlBVEFfVElNSU5HX0FMTAkJPSBBVEFfVElNSU5HX1NFVFVQIHwgQVRBX1RJTUlOR19BQ1Q4QiB8Ci0JCQkJICBBVEFfVElNSU5HX1JFQzhCIHwgQVRBX1RJTUlOR19DWUM4QiB8Ci0JCQkJICBBVEFfVElNSU5HX0FDVElWRSB8IEFUQV9USU1JTkdfUkVDT1ZFUiB8Ci0JCQkJICBBVEFfVElNSU5HX0NZQ0xFIHwgQVRBX1RJTUlOR19VRE1BLAorLyogUENJICovCisjaWZkZWYgQ09ORklHX1BDSQorc3RydWN0IHBjaV9kZXY7CisKK3N0cnVjdCBwY2lfYml0cyB7CisJdW5zaWduZWQgaW50CQlyZWc7CS8qIFBDSSBjb25maWcgcmVnaXN0ZXIgdG8gcmVhZCAqLworCXVuc2lnbmVkIGludAkJd2lkdGg7CS8qIDEgKDggYml0KSwgMiAoMTYgYml0KSwgNCAoMzIgYml0KSAqLworCXVuc2lnbmVkIGxvbmcJCW1hc2s7CisJdW5zaWduZWQgbG9uZwkJdmFsOwogfTsKIAotLyogbGliYXRhLWFjcGkuYyAqLworZXh0ZXJuIGludCBwY2lfdGVzdF9jb25maWdfYml0cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9iaXRzICpiaXRzKTsKK2V4dGVybiB2b2lkIGF0YV9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiB2b2lkIGF0YV9wY2lfZGV2aWNlX2RvX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKTsKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitleHRlcm4gaW50IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKTsKK2V4dGVybiBpbnQgYXRhX3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKy8qCisgKiBBQ1BJIC0gZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYworICovCiAjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBhdGFfYWNwaV9ndG0gKmF0YV9hY3BpX2luaXRfZ3RtKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CkBAIC0xMDA2LDU2ICsxMDI2LDggQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BDSQotc3RydWN0IHBjaV9kZXY7Ci0KLWV4dGVybiBpbnQgYXRhX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqIHBwaSk7Ci1leHRlcm4gdm9pZCBhdGFfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotI2lmZGVmIENPTkZJR19QTQotZXh0ZXJuIHZvaWQgYXRhX3BjaV9kZXZpY2VfZG9fc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLWV4dGVybiBpbnQgYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpOwotZXh0ZXJuIGludCBhdGFfcGNpX2RldmljZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotI2VuZGlmCi1leHRlcm4gaW50IGF0YV9wY2lfY2xlYXJfc2ltcGxleChzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci0KLXN0cnVjdCBwY2lfYml0cyB7Ci0JdW5zaWduZWQgaW50CQlyZWc7CS8qIFBDSSBjb25maWcgcmVnaXN0ZXIgdG8gcmVhZCAqLwotCXVuc2lnbmVkIGludAkJd2lkdGg7CS8qIDEgKDggYml0KSwgMiAoMTYgYml0KSwgNCAoMzIgYml0KSAqLwotCXVuc2lnbmVkIGxvbmcJCW1hc2s7Ci0JdW5zaWduZWQgbG9uZwkJdmFsOwotfTsKLQotZXh0ZXJuIGludCBhdGFfcGNpX2luaXRfc2ZmX2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKLWV4dGVybiBpbnQgYXRhX3BjaV9pbml0X2JtZG1hKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7Ci1leHRlcm4gaW50IGF0YV9wY2lfcHJlcGFyZV9zZmZfaG9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqIHBwaSwKLQkJCQkgICAgc3RydWN0IGF0YV9ob3N0ICoqcl9ob3N0KTsKLWV4dGVybiBpbnQgYXRhX3BjaV9hY3RpdmF0ZV9zZmZfaG9zdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsCi0JCQkJICAgICBpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyLAotCQkJCSAgICAgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0KTsKLWV4dGVybiBpbnQgcGNpX3Rlc3RfY29uZmlnX2JpdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfYml0cyAqYml0cyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIHhmZXJfbWFzayk7Ci0jZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCiAvKgotICogUE1QCi0gKi8KLWV4dGVybiBpbnQgc2F0YV9wbXBfcWNfZGVmZXJfY21kX3N3aXRjaChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLWV4dGVybiBpbnQgc2F0YV9wbXBfc3RkX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7Ci1leHRlcm4gaW50IHNhdGFfcG1wX3N0ZF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAotCQkJCSAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7Ci1leHRlcm4gdm9pZCBzYXRhX3BtcF9zdGRfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcyk7Ci1leHRlcm4gdm9pZCBzYXRhX3BtcF9kb19laChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQlhdGFfcHJlcmVzZXRfZm5fdCBwcmVyZXNldCwgYXRhX3Jlc2V0X2ZuX3Qgc29mdHJlc2V0LAotCQlhdGFfcmVzZXRfZm5fdCBoYXJkcmVzZXQsIGF0YV9wb3N0cmVzZXRfZm5fdCBwb3N0cmVzZXQsCi0JCWF0YV9wcmVyZXNldF9mbl90IHBtcF9wcmVyZXNldCwgYXRhX3Jlc2V0X2ZuX3QgcG1wX3NvZnRyZXNldCwKLQkJYXRhX3Jlc2V0X2ZuX3QgcG1wX2hhcmRyZXNldCwgYXRhX3Bvc3RyZXNldF9mbl90IHBtcF9wb3N0cmVzZXQpOwotCi0vKgotICogRUgKKyAqIEVIIC0gZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKICAqLwogZXh0ZXJuIHZvaWQgYXRhX3BvcnRfc2NoZWR1bGVfZWgoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IGF0YV9saW5rX2Fib3J0KHN0cnVjdCBhdGFfbGluayAqbGluayk7CkBAIC0xMDcyLDYgKzEwNDQsOTIgQEAKIGV4dGVybiB2b2lkIGF0YV9kb19laChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBhdGFfcHJlcmVzZXRfZm5fdCBwcmVyZXNldCwKIAkJICAgICAgYXRhX3Jlc2V0X2ZuX3Qgc29mdHJlc2V0LCBhdGFfcmVzZXRfZm5fdCBoYXJkcmVzZXQsCiAJCSAgICAgIGF0YV9wb3N0cmVzZXRfZm5fdCBwb3N0cmVzZXQpOworZXh0ZXJuIHZvaWQgYXRhX3N0ZF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCisvKgorICogQmFzZSBvcGVyYXRpb25zIHRvIGluaGVyaXQgZnJvbSBhbmQgaW5pdGlhbGl6ZXJzIGZvciBzaHQKKyAqCisgKiBPcGVyYXRpb25zCisgKgorICogYmFzZSAgOiBDb21tb24gdG8gYWxsIGxpYmF0YSBkcml2ZXJzLgorICogc2F0YSAgOiBTQVRBIGNvbnRyb2xsZXJzIHcvIG5hdGl2ZSBpbnRlcmZhY2UuCisgKiBwbXAgICA6IFNBVEEgY29udHJvbGxlcnMgdy8gUE1QIHN1cHBvcnQuCisgKiBzZmYgICA6IFNGRiBBVEEgY29udHJvbGxlcnMgdy9vIEJNRE1BIHN1cHBvcnQuCisgKiBibWRtYSA6IFNGRiBBVEEgY29udHJvbGxlcnMgdy8gQk1ETUEgc3VwcG9ydC4KKyAqCisgKiBzaHQgaW5pdGlhbGl6ZXJzCisgKgorICogQkFTRSAgOiBDb21tb24gdG8gYWxsIGxpYmF0YSBkcml2ZXJzLiAgVGhlIHVzZXIgbXVzdCBzZXQKKyAqCSAgIHNnX3RhYmxlc2l6ZSBhbmQgZG1hX2JvdW5kYXJ5LgorICogUElPICAgOiBTRkYgQVRBIGNvbnRyb2xsZXJzIHcvIG9ubHkgUElPIHN1cHBvcnQuCisgKiBCTURNQSA6IFNGRiBBVEEgY29udHJvbGxlcnMgdy8gQk1ETUEgc3VwcG9ydC4gIHNnX3RhYmxlc2l6ZSBhbmQKKyAqCSAgIGRtYV9ib3VuZGFyeSBhcmUgc2V0IHRvIEJNRE1BIGxpbWl0cy4KKyAqIE5DUSAgIDogU0FUQSBjb250cm9sbGVycyBzdXBwb3J0aW5nIE5DUS4gIFRoZSB1c2VyIG11c3Qgc2V0CisgKgkgICBzZ190YWJsZXNpemUsIGRtYV9ib3VuZGFyeSBhbmQgY2FuX3F1ZXVlLgorICovCitleHRlcm4gY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXRhX2Jhc2VfcG9ydF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2F0YV9wb3J0X29wczsKKworI2RlZmluZSBBVEFfQkFTRV9TSFQoZHJ2X25hbWUpCQkJCQlcCisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCQkJXAorCS5uYW1lCQkJPSBkcnZfbmFtZSwJCQlcCisJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwJCVwKKwkucXVldWVjb21tYW5kCQk9IGF0YV9zY3NpX3F1ZXVlY21kLAkJXAorCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwJCVwKKwkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCQlcCisJLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCQlcCisJLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCQlcCisJLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCVwKKwkucHJvY19uYW1lCQk9IGRydl9uYW1lLAkJCVwKKwkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAlcCisJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwJXAorCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbQorCisjZGVmaW5lIEFUQV9OQ1FfU0hUKGRydl9uYW1lKQkJCQkJXAorCUFUQV9CQVNFX1NIVChkcnZfbmFtZSksCQkJCQlcCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aAorCisvKgorICogUE1QIGhlbHBlcnMKKyAqLworI2lmZGVmIENPTkZJR19TQVRBX1BNUAorc3RhdGljIGlubGluZSBib29sIHNhdGFfcG1wX3N1cHBvcnRlZChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiBhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QTVA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzYXRhX3BtcF9hdHRhY2hlZChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiBhcC0+bnJfcG1wX2xpbmtzICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0YV9pc19ob3N0X2xpbmsoY29uc3Qgc3RydWN0IGF0YV9saW5rICpsaW5rKQoreworCXJldHVybiBsaW5rID09ICZsaW5rLT5hcC0+bGluazsKK30KKyNlbHNlIC8qIENPTkZJR19TQVRBX1BNUCAqLworc3RhdGljIGlubGluZSBib29sIHNhdGFfcG1wX3N1cHBvcnRlZChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNhdGFfcG1wX2F0dGFjaGVkKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdGFfaXNfaG9zdF9saW5rKGNvbnN0IHN0cnVjdCBhdGFfbGluayAqbGluaykKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU0FUQV9QTVAgKi8KKworc3RhdGljIGlubGluZSBpbnQgc2F0YV9zcnN0X3BtcChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspCit7CisJaWYgKHNhdGFfcG1wX3N1cHBvcnRlZChsaW5rLT5hcCkgJiYgYXRhX2lzX2hvc3RfbGluayhsaW5rKSkKKwkJcmV0dXJuIFNBVEFfUE1QX0NUUkxfUE9SVDsKKwlyZXR1cm4gbGluay0+cG1wOworfQogCiAvKgogICogcHJpbnRrIGhlbHBlcnMKQEAgLTEwODAsNyArMTEzOCw3IEBACiAJcHJpbnRrKCIlc2F0YSV1OiAiZm10LCBsdiwgKGFwKS0+cHJpbnRfaWQgLCAjI2FyZ3MpCiAKICNkZWZpbmUgYXRhX2xpbmtfcHJpbnRrKGxpbmssIGx2LCBmbXQsIGFyZ3MuLi4pIGRvIHsgXAotCWlmICgobGluayktPmFwLT5ucl9wbXBfbGlua3MpIFwKKwlpZiAoc2F0YV9wbXBfYXR0YWNoZWQoKGxpbmspLT5hcCkpIFwKIAkJcHJpbnRrKCIlc2F0YSV1LiUwMnU6ICJmbXQsIGx2LCAobGluayktPmFwLT5wcmludF9pZCwJXAogCQkgICAgICAgKGxpbmspLT5wbXAgLCAjI2FyZ3MpOyBcCiAJZWxzZSBcCkBAIC0xMTAwLDE4ICsxMTU4LDExIEBACiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwogZXh0ZXJuIHZvaWQgYXRhX2VoaV9jbGVhcl9kZXNjKHN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGF0YV9laGlfc2NoZWR1bGVfcHJvYmUoc3RydWN0IGF0YV9laF9pbmZvICplaGkpCi17Ci0JZWhpLT5mbGFncyB8PSBBVEFfRUhJX1JFU1VNRV9MSU5LOwotCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9TT0ZUUkVTRVQ7Ci0JZWhpLT5wcm9iZV9tYXNrIHw9ICgxIDw8IEFUQV9NQVhfREVWSUNFUykgLSAxOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRhX2VoaV9ob3RwbHVnZ2VkKHN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpKQogewotCWF0YV9laGlfc2NoZWR1bGVfcHJvYmUoZWhpKTsKKwllaGktPnByb2JlX21hc2sgfD0gKDEgPDwgQVRBX01BWF9ERVZJQ0VTKSAtIDE7CiAJZWhpLT5mbGFncyB8PSBBVEFfRUhJX0hPVFBMVUdHRUQ7Ci0JZWhpLT5hY3Rpb24gfD0gQVRBX0VIX0VOQUJMRV9MSU5LOworCWVoaS0+YWN0aW9uIHw9IEFUQV9FSF9SRVNFVCB8IEFUQV9FSF9FTkFCTEVfTElOSzsKIAllaGktPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOwogfQogCkBAIC0xMTMyLDcgKzExODMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGFfdGFnX2ludGVybmFsKHVuc2lnbmVkIGludCB0YWcpCiB7Ci0JcmV0dXJuIHRhZyA9PSBBVEFfTUFYX1FVRVVFIC0gMTsKKwlyZXR1cm4gdGFnID09IEFUQV9UQUdfSU5URVJOQUw7CiB9CiAKIC8qCkBAIC0xMTczLDExICsxMjI0LDYgQEAKIC8qCiAgKiBsaW5rIGhlbHBlcnMKICAqLwotc3RhdGljIGlubGluZSBpbnQgYXRhX2lzX2hvc3RfbGluayhjb25zdCBzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspCi17Ci0JcmV0dXJuIGxpbmsgPT0gJmxpbmstPmFwLT5saW5rOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBhdGFfbGlua19tYXhfZGV2aWNlcyhjb25zdCBzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspCiB7CiAJaWYgKGF0YV9pc19ob3N0X2xpbmsobGluaykgJiYgbGluay0+YXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9TUykKQEAgLTExOTIsNyArMTIzOCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF0YV9saW5rICphdGFfcG9ydF9maXJzdF9saW5rKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0JaWYgKGFwLT5ucl9wbXBfbGlua3MpCisJaWYgKHNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKIAkJcmV0dXJuIGFwLT5wbXBfbGluazsKIAlyZXR1cm4gJmFwLT5saW5rOwogfQpAQCAtMTIwMSwxMyArMTI0NywxMyBAQAogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKIAotCWlmIChsaW5rID09ICZhcC0+bGluaykgewotCQlpZiAoIWFwLT5ucl9wbXBfbGlua3MpCisJaWYgKGF0YV9pc19ob3N0X2xpbmsobGluaykpIHsKKwkJaWYgKCFzYXRhX3BtcF9hdHRhY2hlZChhcCkpCiAJCQlyZXR1cm4gTlVMTDsKIAkJcmV0dXJuIGFwLT5wbXBfbGluazsKIAl9CiAKLQlpZiAoKytsaW5rIC0gYXAtPnBtcF9saW5rIDwgYXAtPm5yX3BtcF9saW5rcykKKwlpZiAoKytsaW5rIDwgYXAtPm5yX3BtcF9saW5rcyArIGFwLT5wbXBfbGluaykKIAkJcmV0dXJuIGxpbms7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xMjI4LDExICsxMjc0LDYgQEAKIAlmb3IgKChkZXYpID0gKGxpbmspLT5kZXZpY2UgKyBhdGFfbGlua19tYXhfZGV2aWNlcyhsaW5rKSAtIDE7IFwKIAkgICAgIChkZXYpID49IChsaW5rKS0+ZGV2aWNlIHx8ICgoZGV2KSA9IE5VTEwpOyAoZGV2KS0tKQogCi1zdGF0aWMgaW5saW5lIHU4IGF0YV9jaGtfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JcmV0dXJuIGFwLT5vcHMtPmNoZWNrX3N0YXR1cyhhcCk7Ci19Ci0KIC8qKgogICoJYXRhX25jcV9lbmFibGVkIC0gVGVzdCB3aGV0aGVyIE5DUSBpcyBlbmFibGVkCiAgKglAZGV2OiBBVEEgZGV2aWNlIHRvIHRlc3QgZm9yCkBAIC0xMjQ5LDc0ICsxMjkwLDYgQEAKIAkJCSAgICAgIEFUQV9ERkxBR19OQ1EpKSA9PSBBVEFfREZMQUdfTkNROwogfQogCi0vKioKLSAqCWF0YV9wYXVzZSAtIEZsdXNoIHdyaXRlcyBhbmQgcGF1c2UgNDAwIG5hbm9zZWNvbmRzLgotICoJQGFwOiBQb3J0IHRvIHdhaXQgZm9yLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGF0YV9wYXVzZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9hbHRzdGF0dXMoYXApOwotCW5kZWxheSg0MDApOwotfQotCi0KLS8qKgotICoJYXRhX2J1c3lfd2FpdCAtIFdhaXQgZm9yIGEgcG9ydCBzdGF0dXMgcmVnaXN0ZXIKLSAqCUBhcDogUG9ydCB0byB3YWl0IGZvci4KLSAqCUBiaXRzOiBiaXRzIHRoYXQgbXVzdCBiZSBjbGVhcgotICoJQG1heDogbnVtYmVyIG9mIDEwdVMgd2FpdHMgdG8gcGVyZm9ybQotICoKLSAqCVdhaXRzIHVwIHRvIG1heCoxMCBtaWNyb3NlY29uZHMgZm9yIHRoZSBzZWxlY3RlZCBiaXRzIGluIHRoZSBwb3J0J3MKLSAqCXN0YXR1cyByZWdpc3RlciB0byBiZSBjbGVhcmVkLgotICoJUmV0dXJucyBmaW5hbCB2YWx1ZSBvZiBzdGF0dXMgcmVnaXN0ZXIuCi0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHU4IGF0YV9idXN5X3dhaXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGJpdHMsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IG1heCkKLXsKLQl1OCBzdGF0dXM7Ci0KLQlkbyB7Ci0JCXVkZWxheSgxMCk7Ci0JCXN0YXR1cyA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKLQkJbWF4LS07Ci0JfSB3aGlsZSAoc3RhdHVzICE9IDB4ZmYgJiYgKHN0YXR1cyAmIGJpdHMpICYmIChtYXggPiAwKSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0KLS8qKgotICoJYXRhX3dhaXRfaWRsZSAtIFdhaXQgZm9yIGEgcG9ydCB0byBiZSBpZGxlLgotICoJQGFwOiBQb3J0IHRvIHdhaXQgZm9yLgotICoKLSAqCVdhaXRzIHVwIHRvIDEwbXMgZm9yIHBvcnQncyBCVVNZIGFuZCBEUlEgc2lnbmFscyB0byBjbGVhci4KLSAqCVJldHVybnMgZmluYWwgdmFsdWUgb2Ygc3RhdHVzIHJlZ2lzdGVyLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCi0gKi8KLQotc3RhdGljIGlubGluZSB1OCBhdGFfd2FpdF9pZGxlKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JdTggc3RhdHVzID0gYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMDAwKTsKLQotI2lmZGVmIEFUQV9ERUJVRwotCWlmIChzdGF0dXMgIT0gMHhmZiAmJiAoc3RhdHVzICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpKQotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fREVCVUcsICJhYm5vcm1hbCBTdGF0dXMgMHglWFxuIiwKLQkJCQlzdGF0dXMpOwotI2VuZGlmCi0KLQlyZXR1cm4gc3RhdHVzOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRhX3FjX3NldF9wb2xsaW5nKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJcWMtPnRmLmN0bCB8PSBBVEFfTklFTjsKQEAgLTEzNDUsNiArMTMxOCwxMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGFfcWNfcmF3X25ieXRlcyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXJldHVybiBxYy0+bmJ5dGVzIC0gbWluKHFjLT5leHRyYWJ5dGVzLCBxYy0+bmJ5dGVzKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGF0YV90Zl9pbml0KHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQogewogCW1lbXNldCh0ZiwgMCwgc2l6ZW9mKCp0ZikpOwpAQCAtMTM2MywxMiArMTM0MSw5IEBACiAJcWMtPmZsYWdzID0gMDsKIAlxYy0+Y3Vyc2cgPSBOVUxMOwogCXFjLT5jdXJzZ19vZnMgPSAwOwotCXFjLT5uYnl0ZXMgPSBxYy0+cmF3X25ieXRlcyA9IHFjLT5jdXJieXRlcyA9IDA7CisJcWMtPm5ieXRlcyA9IHFjLT5leHRyYWJ5dGVzID0gcWMtPmN1cmJ5dGVzID0gMDsKIAlxYy0+bl9lbGVtID0gMDsKLQlxYy0+bWFwcGVkX25fZWxlbSA9IDA7CiAJcWMtPmVycl9tYXNrID0gMDsKLQlxYy0+cGFkX2xlbiA9IDA7Ci0JcWMtPmxhc3Rfc2cgPSBOVUxMOwogCXFjLT5zZWN0X3NpemUgPSBBVEFfU0VDVF9TSVpFOwogCiAJYXRhX3RmX2luaXQocWMtPmRldiwgJnFjLT50Zik7CkBAIC0xMzg1LDI3ICsxMzYwLDYgQEAKIAkgICAgICAgYXRhX2lkX2hhc19mbHVzaF9leHQoZGV2LT5pZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGF0YXBpX2NtZF90eXBlKHU4IG9wY29kZSkKLXsKLQlzd2l0Y2ggKG9wY29kZSkgewotCWNhc2UgR1BDTURfUkVBRF8xMDoKLQljYXNlIEdQQ01EX1JFQURfMTI6Ci0JCXJldHVybiBBVEFQSV9SRUFEOwotCi0JY2FzZSBHUENNRF9XUklURV8xMDoKLQljYXNlIEdQQ01EX1dSSVRFXzEyOgotCWNhc2UgR1BDTURfV1JJVEVfQU5EX1ZFUklGWV8xMDoKLQkJcmV0dXJuIEFUQVBJX1dSSVRFOwotCi0JY2FzZSBHUENNRF9SRUFEX0NEOgotCWNhc2UgR1BDTURfUkVBRF9DRF9NU0Y6Ci0JCXJldHVybiBBVEFQSV9SRUFEX0NEOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIEFUQVBJX01JU0M7Ci0JfQotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhY19lcnJfbWFzayh1OCBzdGF0dXMpCiB7CiAJaWYgKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQpAQCAtMTQyMywyMiArMTM3NywxNzYgQEAKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXRhX3BhZF9hbGxvYyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JYXAtPnBhZF9kbWEgPSAwOwotCWFwLT5wYWQgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQVRBX0RNQV9QQURfQlVGX1NaLAotCQkJCSAgICAgICZhcC0+cGFkX2RtYSwgR0ZQX0tFUk5FTCk7Ci0JcmV0dXJuIChhcC0+cGFkID09IE5VTEwpID8gLUVOT01FTSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGFfcGFkX2ZyZWUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGRldmljZSAqZGV2KQotewotCWRtYW1fZnJlZV9jb2hlcmVudChkZXYsIEFUQV9ETUFfUEFEX0JVRl9TWiwgYXAtPnBhZCwgYXAtPnBhZF9kbWEpOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGFfcG9ydCAqYXRhX3Nob3N0X3RvX3BvcnQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKIHsKIAlyZXR1cm4gKihzdHJ1Y3QgYXRhX3BvcnQgKiopJmhvc3QtPmhvc3RkYXRhWzBdOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUE1QIC0gZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jCisgKi8KKyNpZmRlZiBDT05GSUdfU0FUQV9QTVAKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNhdGFfcG1wX3BvcnRfb3BzOworCitleHRlcm4gaW50IHNhdGFfcG1wX3FjX2RlZmVyX2NtZF9zd2l0Y2goc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitleHRlcm4gdm9pZCBzYXRhX3BtcF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCisjZWxzZSAvKiBDT05GSUdfU0FUQV9QTVAgKi8KKworI2RlZmluZSBzYXRhX3BtcF9wb3J0X29wcwkJc2F0YV9wb3J0X29wcworI2RlZmluZSBzYXRhX3BtcF9xY19kZWZlcl9jbWRfc3dpdGNoCWF0YV9zdGRfcWNfZGVmZXIKKyNkZWZpbmUgc2F0YV9wbXBfZXJyb3JfaGFuZGxlcgkJYXRhX3N0ZF9lcnJvcl9oYW5kbGVyCisKKyNlbmRpZiAvKiBDT05GSUdfU0FUQV9QTVAgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNGRiAtIGRyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworICovCisjaWZkZWYgQ09ORklHX0FUQV9TRkYKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGF0YV9zZmZfcG9ydF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXRhX2JtZG1hX3BvcnRfb3BzOworCisvKiBQSU8gb25seSwgc2dfdGFibGVzaXplIGFuZCBkbWFfYm91bmRhcnkgbGltaXRzIGNhbiBiZSByZW1vdmVkICovCisjZGVmaW5lIEFUQV9QSU9fU0hUKGRydl9uYW1lKQkJCQkJXAorCUFUQV9CQVNFX1NIVChkcnZfbmFtZSksCQkJCQlcCisJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwJCVwKKwkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlkKKworI2RlZmluZSBBVEFfQk1ETUFfU0hUKGRydl9uYW1lKQkJCQkJXAorCUFUQV9CQVNFX1NIVChkcnZfbmFtZSksCQkJCQlcCisJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwJCVwKKwkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlkKKworZXh0ZXJuIHZvaWQgYXRhX3NmZl9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIHZvaWQgYXRhX3NmZl9kdW1iX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2Rldl9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7CitleHRlcm4gdTggYXRhX3NmZl9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gdTggYXRhX3NmZl9hbHRzdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gaW50IGF0YV9zZmZfYnVzeV9zbGVlcChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3BhdCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiBpbnQgYXRhX3NmZl93YWl0X3JlYWR5KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX3RmX2xvYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOworZXh0ZXJuIHZvaWQgYXRhX3NmZl90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfZXhlY19jb21tYW5kKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3NmZl9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IHJ3KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3NmZl9kYXRhX3hmZXJfbm9pcnEoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IHJ3KTsKK2V4dGVybiB1OCBhdGFfc2ZmX2lycV9vbihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIGludCBhdGFfc2ZmX2hzbV9tb3ZlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsCisJCQkgICAgdTggc3RhdHVzLCBpbnQgaW5fd3EpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfc2ZmX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIGJvb2wgYXRhX3NmZl9xY19maWxsX3J0ZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3NmZl9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkgICAgICBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBhdGFfc2ZmX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOworZXh0ZXJuIHZvaWQgYXRhX3NmZl9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gaW50IGF0YV9zZmZfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYXRhX3NmZl9kZXZfY2xhc3NpZnkoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgaW50IHByZXNlbnQsCisJCQkJCSAgdTggKnJfZXJyKTsKK2V4dGVybiBpbnQgYXRhX3NmZl93YWl0X2FmdGVyX3Jlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50IGRldm1hc2ssCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOworZXh0ZXJuIGludCBhdGFfc2ZmX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CitleHRlcm4gaW50IHNhdGFfc2ZmX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIGludCBhdGFfc2ZmX3BvcnRfc3RhcnQoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gdm9pZCBhdGFfc2ZmX3N0ZF9wb3J0cyhzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhdGFfYm1kbWFfbW9kZV9maWx0ZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyB4ZmVyX21hc2spOworZXh0ZXJuIHZvaWQgYXRhX2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIHZvaWQgYXRhX2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIHZvaWQgYXRhX2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitleHRlcm4gdTggYXRhX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2V4dGVybiB2b2lkIGF0YV9idXNfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CisKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gaW50IGF0YV9wY2lfYm1kbWFfY2xlYXJfc2ltcGxleChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitleHRlcm4gaW50IGF0YV9wY2lfYm1kbWFfaW5pdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpOworZXh0ZXJuIGludCBhdGFfcGNpX3NmZl9pbml0X2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKK2V4dGVybiBpbnQgYXRhX3BjaV9zZmZfcHJlcGFyZV9ob3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqIGNvbnN0ICogcHBpLAorCQkJCSAgICBzdHJ1Y3QgYXRhX2hvc3QgKipyX2hvc3QpOworZXh0ZXJuIGludCBhdGFfcGNpX3NmZl9hY3RpdmF0ZV9ob3N0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKKwkJCQkgICAgIGlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXIsCisJCQkJICAgICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOworZXh0ZXJuIGludCBhdGFfcGNpX3NmZl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqIGNvbnN0ICogcHBpLAorCQkJCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCwgdm9pZCAqaG9zdF9wcml2KTsKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKy8qKgorICoJYXRhX3NmZl9wYXVzZSAtIEZsdXNoIHdyaXRlcyBhbmQgcGF1c2UgNDAwIG5hbm9zZWNvbmRzLgorICoJQGFwOiBQb3J0IHRvIHdhaXQgZm9yLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFfc2ZmX3BhdXNlKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJYXRhX3NmZl9hbHRzdGF0dXMoYXApOworCW5kZWxheSg0MDApOworfQorCisvKioKKyAqCWF0YV9zZmZfYnVzeV93YWl0IC0gV2FpdCBmb3IgYSBwb3J0IHN0YXR1cyByZWdpc3RlcgorICoJQGFwOiBQb3J0IHRvIHdhaXQgZm9yLgorICoJQGJpdHM6IGJpdHMgdGhhdCBtdXN0IGJlIGNsZWFyCisgKglAbWF4OiBudW1iZXIgb2YgMTB1UyB3YWl0cyB0byBwZXJmb3JtCisgKgorICoJV2FpdHMgdXAgdG8gbWF4KjEwIG1pY3Jvc2Vjb25kcyBmb3IgdGhlIHNlbGVjdGVkIGJpdHMgaW4gdGhlIHBvcnQncworICoJc3RhdHVzIHJlZ2lzdGVyIHRvIGJlIGNsZWFyZWQuCisgKglSZXR1cm5zIGZpbmFsIHZhbHVlIG9mIHN0YXR1cyByZWdpc3Rlci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHU4IGF0YV9zZmZfYnVzeV93YWl0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBiaXRzLAorCQkJCSAgIHVuc2lnbmVkIGludCBtYXgpCit7CisJdTggc3RhdHVzOworCisJZG8geworCQl1ZGVsYXkoMTApOworCQlzdGF0dXMgPSBhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKKwkJbWF4LS07CisJfSB3aGlsZSAoc3RhdHVzICE9IDB4ZmYgJiYgKHN0YXR1cyAmIGJpdHMpICYmIChtYXggPiAwKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqCWF0YV93YWl0X2lkbGUgLSBXYWl0IGZvciBhIHBvcnQgdG8gYmUgaWRsZS4KKyAqCUBhcDogUG9ydCB0byB3YWl0IGZvci4KKyAqCisgKglXYWl0cyB1cCB0byAxMG1zIGZvciBwb3J0J3MgQlVTWSBhbmQgRFJRIHNpZ25hbHMgdG8gY2xlYXIuCisgKglSZXR1cm5zIGZpbmFsIHZhbHVlIG9mIHN0YXR1cyByZWdpc3Rlci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHU4IGF0YV93YWl0X2lkbGUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl1OCBzdGF0dXMgPSBhdGFfc2ZmX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMDAwKTsKKworI2lmZGVmIEFUQV9ERUJVRworCWlmIChzdGF0dXMgIT0gMHhmZiAmJiAoc3RhdHVzICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpKQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fREVCVUcsICJhYm5vcm1hbCBTdGF0dXMgMHglWFxuIiwKKwkJCQlzdGF0dXMpOworI2VuZGlmCisKKwlyZXR1cm4gc3RhdHVzOworfQorI2VuZGlmIC8qIENPTkZJR19BVEFfU0ZGICovCisKICNlbmRpZiAvKiBfX0xJTlVYX0xJQkFUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKaW5kZXggMDU5MjkzNi4uMjExOTYxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKQEAgLTE3LDggKzE3LDI0IEBACiAjIGRlZmluZSBhc21yZWdwYXJtCiAjZW5kaWYKIAotI2lmbmRlZiBwcmV2ZW50X3RhaWxfY2FsbAotIyBkZWZpbmUgcHJldmVudF90YWlsX2NhbGwocmV0KSBkbyB7IH0gd2hpbGUgKDApCisvKgorICogVGhpcyBpcyB1c2VkIGJ5IGFyY2hpdGVjdHVyZXMgdG8ga2VlcCBhcmd1bWVudHMgb24gdGhlIHN0YWNrCisgKiB1bnRvdWNoZWQgYnkgdGhlIGNvbXBpbGVyIGJ5IGtlZXBpbmcgdGhlbSBsaXZlIHVudGlsIHRoZSBlbmQuCisgKiBUaGUgYXJndW1lbnQgc3RhY2sgbWF5IGJlIG93bmVkIGJ5IHRoZSBhc3NlbWJseS1sYW5ndWFnZQorICogY2FsbGVyLCBub3QgdGhlIGNhbGxlZSwgYW5kIGdjYyBkb2Vzbid0IGFsd2F5cyB1bmRlcnN0YW5kCisgKiB0aGF0LgorICoKKyAqIFdlIGhhdmUgdGhlIHJldHVybiB2YWx1ZSwgYW5kIGEgbWF4aW11bSBvZiBzaXggYXJndW1lbnRzLgorICoKKyAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCBieSBhICJyZXR1cm4gcmV0IiBmb3IgdGhlCisgKiBwcm90ZWN0aW9uIHRvIHdvcmsgKGllIG5vIG1vcmUgd29yayB0aGF0IHRoZSBjb21waWxlciBtaWdodAorICogZW5kIHVwIG5lZWRpbmcgc3RhY2sgdGVtcG9yYXJpZXMgZm9yKS4KKyAqLworLyogQXNzZW1ibHkgZmlsZXMgbWF5IGJlIGNvbXBpbGVkIHdpdGggLXRyYWRpdGlvbmFsIC4uICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmbmRlZiBhc21saW5rYWdlX3Byb3RlY3QKKyMgZGVmaW5lIGFzbWxpbmthZ2VfcHJvdGVjdChuLCByZXQsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgogI2VuZGlmCiAKICNpZm5kZWYgX19BTElHTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCA3NWNlMmNiLi5kYWMxNmY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtNjMxLDMxICs2MzEsMTQgQEAKICAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgXAotCQlwcmVmZXRjaChyY3VfZGVyZWZlcmVuY2UocG9zKS0+bmV4dCksIHBvcyAhPSAoaGVhZCk7IFwKLSAgICAgICAgCXBvcyA9IHBvcy0+bmV4dCkKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZSgoaGVhZCktPm5leHQpOyBcCisJCXByZWZldGNoKHBvcy0+bmV4dCksIHBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCiAKICNkZWZpbmUgX19saXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgXAotCQlyY3VfZGVyZWZlcmVuY2UocG9zKSAhPSAoaGVhZCk7IFwKLSAgICAgICAgCXBvcyA9IHBvcy0+bmV4dCkKLQotLyoqCi0gKiBsaXN0X2Zvcl9lYWNoX3NhZmVfcmN1Ci0gKiBAcG9zOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCi0gKiBAbjoJCWFub3RoZXIgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCi0gKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KLSAqCi0gKiBJdGVyYXRlIG92ZXIgYW4gcmN1LXByb3RlY3RlZCBsaXN0LCBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVudHJ5LgotICoKLSAqIFRoaXMgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlIG1heSBzYWZlbHkgcnVuIGNvbmN1cnJlbnRseSB3aXRoCi0gKiB0aGUgX3JjdSBsaXN0LW11dGF0aW9uIHByaW1pdGl2ZXMgc3VjaCBhcyBsaXN0X2FkZF9yY3UoKQotICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgotICovCi0jZGVmaW5lIGxpc3RfZm9yX2VhY2hfc2FmZV9yY3UocG9zLCBuLCBoZWFkKSBcCi0JZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IFwKLQkJbiA9IHJjdV9kZXJlZmVyZW5jZShwb3MpLT5uZXh0LCBwb3MgIT0gKGhlYWQpOyBcCi0JCXBvcyA9IG4pCisJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5uZXh0KTsgXAorCQlwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IHJjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQpKQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CS0JaXRlcmF0ZSBvdmVyIHJjdSBsaXN0IG9mIGdpdmVuIHR5cGUKQEAgLTY2OCwxMCArNjUxLDkgQEAKICAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3MsIGhlYWQsIG1lbWJlcikgXAotCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsgXAotCQlwcmVmZXRjaChyY3VfZGVyZWZlcmVuY2UocG9zKS0+bWVtYmVyLm5leHQpLCBcCi0JCQkmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyBcCi0JCXBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCWZvciAocG9zID0gbGlzdF9lbnRyeShyY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5uZXh0KSwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOyBcCisJCXByZWZldGNoKHBvcy0+bWVtYmVyLm5leHQpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyBcCisJCXBvcyA9IGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHBvcy0+bWVtYmVyLm5leHQpLCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCiAKIAogLyoqCkBAIC02ODYsOSArNjY4LDkgQEAKICAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2NvbnRpbnVlX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKChwb3MpID0gKHBvcyktPm5leHQ7IFwKLQkJcHJlZmV0Y2gocmN1X2RlcmVmZXJlbmNlKChwb3MpKS0+bmV4dCksIChwb3MpICE9IChoZWFkKTsgXAotICAgICAgICAJKHBvcykgPSAocG9zKS0+bmV4dCkKKwlmb3IgKChwb3MpID0gcmN1X2RlcmVmZXJlbmNlKChwb3MpLT5uZXh0KTsgXAorCQlwcmVmZXRjaCgocG9zKS0+bmV4dCksIChwb3MpICE9IChoZWFkKTsgXAorCQkocG9zKSA9IHJjdV9kZXJlZmVyZW5jZSgocG9zKS0+bmV4dCkpCiAKIC8qCiAgKiBEb3VibGUgbGlua2VkIGxpc3RzIHdpdGggYSBzaW5nbGUgcG9pbnRlciBsaXN0IGhlYWQuCkBAIC05ODYsMTAgKzk2OCwxMCBAQAogICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikJCSBcCi0JZm9yIChwb3MgPSAoaGVhZCktPmZpcnN0OwkJCQkJIFwKLQkgICAgIHJjdV9kZXJlZmVyZW5jZShwb3MpICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7fSkgJiYJIFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZSgoaGVhZCktPmZpcnN0KTsJCQkgXAorCSAgICAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7fSkgJiYJCQkgXAogCQkoeyB0cG9zID0gaGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxO30pOyBcCi0JICAgICBwb3MgPSBwb3MtPm5leHQpCisJICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKIAogI2Vsc2UKICN3YXJuaW5nICJkb24ndCBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIGluIHVzZXJzcGFjZSIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmggYi9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCmluZGV4IDE0MThmZGMuLmYyNzQ5OTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmgKQEAgLTIxLDkgKzIxLDE1IEBACiAgKiBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0uICBUaGUgbG9jayBtb2R1bGUgc2hvdWxkbid0IGFzc2lnbiBhIGpvdXJuYWwgdG8gdGhlIEZTCiAgKiBtb3VudC4gIEl0IHNob3VsZG4ndCBzZW5kIHJlY292ZXJ5IGNhbGxiYWNrcyB0byB0aGUgRlMgbW91bnQuICBJZiB0aGUgbm9kZQogICogZGllcyBvciB3aXRoZHJhd3MsIGFsbCBsb2NrcyBjYW4gYmUgd2lwZWQgaW1tZWRpYXRlbHkuCisgKgorICogTE1fTUZMQUdfQ09OVl9OT0RST1AKKyAqIERvIG5vdCBhbGxvdyB0aGUgZGxtIHRvIGludGVybmFsbHkgcmVzb2x2ZSBjb252ZXJzaW9uIGRlYWRsb2NrcyBieSBkZW1vdGluZworICogdGhlIGxvY2sgdG8gdW5sb2NrZWQgYW5kIHRoZW4gcmVhY3F1aXJpbmcgaXQgaW4gdGhlIHJlcXVlc3RlZCBtb2RlLiBJbnN0ZWFkLAorICogaXQgc2hvdWxkIGNhbmNlbCB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIExNX09VVF9DT05WX0RFQURMSy4KICAqLwogCiAjZGVmaW5lIExNX01GTEFHX1NQRUNUQVRPUgkweDAwMDAwMDAxCisjZGVmaW5lIExNX01GTEFHX0NPTlZfTk9EUk9QCTB4MDAwMDAwMDIKIAogLyoKICAqIGxtX2xvY2tzdHJ1Y3QgZmxhZ3MKQEAgLTExMCw2ICsxMTYsOSBAQAogICoKICAqIExNX09VVF9BU1lOQwogICogVGhlIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCB3aWxsIGJlIHJldHVybmVkIGluIGFuIExNX0NCX0FTWU5DIGNhbGxiYWNrLgorICoKKyAqIExNX09VVF9DT05WX0RFQURMSworICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQgZG8gdG8gYSBjb252ZXJzaW9uIGRlYWRsb2NrLgogICovCiAKICNkZWZpbmUgTE1fT1VUX1NUX01BU0sJCTB4MDAwMDAwMDMKQEAgLTExNyw2ICsxMjYsNyBAQAogI2RlZmluZSBMTV9PVVRfQ0FOQ0VMRUQJCTB4MDAwMDAwMDgKICNkZWZpbmUgTE1fT1VUX0FTWU5DCQkweDAwMDAwMDgwCiAjZGVmaW5lIExNX09VVF9FUlJPUgkJMHgwMDAwMDEwMAorI2RlZmluZSBMTV9PVVRfQ09OVl9ERUFETEsJMHgwMDAwMDIwMAogCiAvKgogICogbG1fY2FsbGJhY2tfdCB0eXBlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sbWIuaCBiL2luY2x1ZGUvbGludXgvbG1iLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxMTUzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbG1iLmgKQEAgLTAsMCArMSw4NSBAQAorI2lmbmRlZiBfTElOVVhfTE1CX0gKKyNkZWZpbmUgX0xJTlVYX0xNQl9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogTG9naWNhbCBtZW1vcnkgYmxvY2tzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBCZXJnbmVyLCBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2RlZmluZSBNQVhfTE1CX1JFR0lPTlMgMTI4CisKK3N0cnVjdCBsbWJfcHJvcGVydHkgeworCXU2NCBiYXNlOworCXU2NCBzaXplOworfTsKKworc3RydWN0IGxtYl9yZWdpb24geworCXVuc2lnbmVkIGxvbmcgY250OworCXU2NCBzaXplOworCXN0cnVjdCBsbWJfcHJvcGVydHkgcmVnaW9uW01BWF9MTUJfUkVHSU9OUysxXTsKK307CisKK3N0cnVjdCBsbWIgeworCXVuc2lnbmVkIGxvbmcgZGVidWc7CisJdTY0IHJtb19zaXplOworCXN0cnVjdCBsbWJfcmVnaW9uIG1lbW9yeTsKKwlzdHJ1Y3QgbG1iX3JlZ2lvbiByZXNlcnZlZDsKK307CisKK2V4dGVybiBzdHJ1Y3QgbG1iIGxtYjsKKworZXh0ZXJuIHZvaWQgX19pbml0IGxtYl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGxtYl9hbmFseXplKHZvaWQpOworZXh0ZXJuIGxvbmcgX19pbml0IGxtYl9hZGQodTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiBsb25nIF9faW5pdCBsbWJfcmVzZXJ2ZSh1NjQgYmFzZSwgdTY0IHNpemUpOworZXh0ZXJuIHU2NCBfX2luaXQgbG1iX2FsbG9jX25pZCh1NjQgc2l6ZSwgdTY0IGFsaWduLCBpbnQgbmlkLAorCQkJCXU2NCAoKm5pZF9yYW5nZSkodTY0LCB1NjQsIGludCAqKSk7CitleHRlcm4gdTY0IF9faW5pdCBsbWJfYWxsb2ModTY0IHNpemUsIHU2NCBhbGlnbik7CitleHRlcm4gdTY0IF9faW5pdCBsbWJfYWxsb2NfYmFzZSh1NjQgc2l6ZSwKKwkJdTY0LCB1NjQgbWF4X2FkZHIpOworZXh0ZXJuIHU2NCBfX2luaXQgX19sbWJfYWxsb2NfYmFzZSh1NjQgc2l6ZSwKKwkJdTY0IGFsaWduLCB1NjQgbWF4X2FkZHIpOworZXh0ZXJuIHU2NCBfX2luaXQgbG1iX3BoeXNfbWVtX3NpemUodm9pZCk7CitleHRlcm4gdTY0IF9faW5pdCBsbWJfZW5kX29mX0RSQU0odm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHU2NCBtZW1vcnlfbGltaXQpOworZXh0ZXJuIGludCBfX2luaXQgbG1iX2lzX3Jlc2VydmVkKHU2NCBhZGRyKTsKKworZXh0ZXJuIHZvaWQgbG1iX2R1bXBfYWxsKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHU2NAorbG1iX3NpemVfYnl0ZXMoc3RydWN0IGxtYl9yZWdpb24gKnR5cGUsIHVuc2lnbmVkIGxvbmcgcmVnaW9uX25yKQoreworCXJldHVybiB0eXBlLT5yZWdpb25bcmVnaW9uX25yXS5zaXplOworfQorc3RhdGljIGlubGluZSB1NjQKK2xtYl9zaXplX3BhZ2VzKHN0cnVjdCBsbWJfcmVnaW9uICp0eXBlLCB1bnNpZ25lZCBsb25nIHJlZ2lvbl9ucikKK3sKKwlyZXR1cm4gbG1iX3NpemVfYnl0ZXModHlwZSwgcmVnaW9uX25yKSA+PiBQQUdFX1NISUZUOworfQorc3RhdGljIGlubGluZSB1NjQKK2xtYl9zdGFydF9wZm4oc3RydWN0IGxtYl9yZWdpb24gKnR5cGUsIHVuc2lnbmVkIGxvbmcgcmVnaW9uX25yKQoreworCXJldHVybiB0eXBlLT5yZWdpb25bcmVnaW9uX25yXS5iYXNlID4+IFBBR0VfU0hJRlQ7Cit9CitzdGF0aWMgaW5saW5lIHU2NAorbG1iX2VuZF9wZm4oc3RydWN0IGxtYl9yZWdpb24gKnR5cGUsIHVuc2lnbmVkIGxvbmcgcmVnaW9uX25yKQoreworCXJldHVybiBsbWJfc3RhcnRfcGZuKHR5cGUsIHJlZ2lvbl9ucikgKworCSAgICAgICBsbWJfc2l6ZV9wYWdlcyh0eXBlLCByZWdpb25fbnIpOworfQorCisjaW5jbHVkZSA8YXNtL2xtYi5oPgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0xJTlVYX0xNQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlLmggYi9pbmNsdWRlL2xpbnV4L21hcGxlLmgKaW5kZXggM2YwMWUyYi4uZDMxZTM2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFwbGUuaApAQCAtNjQsNyArNjQsNiBAQAogCWludCAoKmNvbm5lY3QpIChzdHJ1Y3QgbWFwbGVfZGV2aWNlICogZGV2KTsKIAl2b2lkICgqZGlzY29ubmVjdCkgKHN0cnVjdCBtYXBsZV9kZXZpY2UgKiBkZXYpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRydjsKLQlpbnQgcmVnaXN0ZXJlZDsKIH07CiAKIHZvaWQgbWFwbGVfZ2V0Y29uZF9jYWxsYmFjayhzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcmtlci5oIGIvaW5jbHVkZS9saW51eC9tYXJrZXIuaAppbmRleCA1ZGY4NzlkLi40MzBmNmFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hcmtlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFya2VyLmgKQEAgLTEwNCwxMCArMTA0LDE2IEBACiAjZGVmaW5lIE1BUktfTk9BUkdTICIgIgogCiAvKiBUbyBiZSB1c2VkIGZvciBzdHJpbmcgZm9ybWF0IHZhbGlkaXR5IGNoZWNraW5nIHdpdGggZ2NjICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wcmludGYoMSwgMikgX19tYXJrX2NoZWNrX2Zvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ByaW50ZigxLCAyKSBfX19tYXJrX2NoZWNrX2Zvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIH0KIAorI2RlZmluZSBfX21hcmtfY2hlY2tfZm9ybWF0KGZvcm1hdCwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKDApCQkJCQkJCVwKKwkJCV9fX21hcmtfY2hlY2tfZm9ybWF0KGZvcm1hdCwgIyMgYXJncyk7CQlcCisJfSB3aGlsZSAoMCkKKwogZXh0ZXJuIG1hcmtlcl9wcm9iZV9mdW5jIF9fbWFya19lbXB0eV9mdW5jdGlvbjsKIAogZXh0ZXJuIHZvaWQgbWFya2VyX3Byb2JlX2NiKGNvbnN0IHN0cnVjdCBtYXJrZXIgKm1kYXRhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYmNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L21iY2FjaGUuaAppbmRleCA5OWUwNDRiLi5hMDliODRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21iY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21iY2FjaGUuaApAQCAtMzQsNyArMzQsNyBAQAogCiAvKiBGdW5jdGlvbnMgb24gY2FjaGUgZW50cmllcyAqLwogCi1zdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm1iX2NhY2hlX2VudHJ5X2FsbG9jKHN0cnVjdCBtYl9jYWNoZSAqKTsKK3N0cnVjdCBtYl9jYWNoZV9lbnRyeSAqbWJfY2FjaGVfZW50cnlfYWxsb2Moc3RydWN0IG1iX2NhY2hlICosIGdmcF90KTsKIGludCBtYl9jYWNoZV9lbnRyeV9pbnNlcnQoc3RydWN0IG1iX2NhY2hlX2VudHJ5ICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKIAkJCSAgc2VjdG9yX3QsIHVuc2lnbmVkIGludFtdKTsKIHZvaWQgbWJfY2FjaGVfZW50cnlfcmVsZWFzZShzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21idXMuaCBiL2luY2x1ZGUvbGludXgvbWJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWZmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21idXMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogTWFydmVsbCBNQlVTIGNvbW1vbiBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01CVVNfSAorI2RlZmluZSBfX0xJTlVYX01CVVNfSAorCitzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvCit7CisJLyoKKwkgKiBUaGUgNC1iaXQgTUJVUyB0YXJnZXQgSUQgb2YgdGhlIERSQU0gY29udHJvbGxlci4KKwkgKi8KKwl1OAkJbWJ1c19kcmFtX3RhcmdldF9pZDsKKworCS8qCisJICogVGhlIGJhc2UgYWRkcmVzcywgc2l6ZSwgYW5kIE1CVVMgYXR0cmlidXRlIElEIGZvciBlYWNoCisJICogb2YgdGhlIHBvc3NpYmxlIERSQU0gY2hpcCBzZWxlY3RzLiAgUGVyaXBoZXJhbHMgYXJlCisJICogcmVxdWlyZWQgdG8gc3VwcG9ydCBhdCBsZWFzdCA0IGRlY29kZSB3aW5kb3dzLgorCSAqLworCWludAkJbnVtX2NzOworCXN0cnVjdCBtYnVzX2RyYW1fd2luZG93IHsKKwkJdTgJY3NfaW5kZXg7CisJCXU4CW1idXNfYXR0cjsKKwkJdTMyCWJhc2U7CisJCXUzMglzaXplOworCX0gY3NbNF07Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA5MjVkNTdiLi44YjFjNDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMjAsMjYgKzIwLDI1IEBACiAjaWZuZGVmIF9MSU5VWF9NRU1DT05UUk9MX0gKICNkZWZpbmUgX0xJTlVYX01FTUNPTlRST0xfSAogCi0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCiBzdHJ1Y3QgbWVtX2Nncm91cDsKIHN0cnVjdCBwYWdlX2Nncm91cDsKIHN0cnVjdCBwYWdlOwogc3RydWN0IG1tX3N0cnVjdDsKIAotI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX0NPTlQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogCiBleHRlcm4gdm9pZCBtbV9pbml0X2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIGV4dGVybiB2b2lkIG1tX2ZyZWVfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIHBhZ2VfYXNzaWduX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKTsKKworI2RlZmluZSBwYWdlX3Jlc2V0X2JhZF9jZ3JvdXAocGFnZSkJKChwYWdlKS0+cGFnZV9jZ3JvdXAgPSAwKQorCiBleHRlcm4gc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2dldF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQlnZnBfdCBnZnBfbWFzayk7Ci1leHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpOworZXh0ZXJuIGludCBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCWdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci1leHRlcm4gdm9pZCBtZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywgYm9vbCBhY3RpdmUpOworZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGFjdGl2ZSk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwKQEAgLTQ3LDExICs0Niw5IEBACiAJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY29udCwKIAkJCQkJaW50IGFjdGl2ZSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgZ2ZwX3QgZ2ZwX21hc2spOwotZXh0ZXJuIGludCBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCWdmcF90IGdmcF9tYXNrKTsKIGludCB0YXNrX2luX21lbV9jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIAotI2RlZmluZSB2bV9tYXRjaF9jZ3JvdXAobW0sIGNncm91cCkJXAorI2RlZmluZSBtbV9tYXRjaF9jZ3JvdXAobW0sIGNncm91cCkJXAogCSgoY2dyb3VwKSA9PSByY3VfZGVyZWZlcmVuY2UoKG1tKS0+bWVtX2Nncm91cCkpCiAKIGV4dGVybiBpbnQgbWVtX2Nncm91cF9wcmVwYXJlX21pZ3JhdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSk7CkBAIC03NSw3ICs3Miw3IEBACiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9pbmFjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpOwogCi0jZWxzZSAvKiBDT05GSUdfQ0dST1VQX01FTV9DT05UICovCisjZWxzZSAvKiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUiAqLwogc3RhdGljIGlubGluZSB2b2lkIG1tX2luaXRfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC04NSw4ICs4Miw3IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2Fzc2lnbl9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJCXN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9yZXNldF9iYWRfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQogewogfQogCkBAIC05NSwzMyArOTEsMjcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQlnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCitzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcF9tYXNrKQogeworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsCi0JCQkJCQlib29sIGFjdGl2ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgYWN0aXZlKQogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkJZ2ZwX3QgZ2ZwX21hc2spCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZtX21hdGNoX2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3N0YXRpYyBpbmxpbmUgaW50IG1tX21hdGNoX2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCmluZGV4IDMzZjBmZjAuLmY4MGUwZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtMTgsOCArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIHN0cnVjdCBtZW1vcnlfYmxvY2sgewogCXVuc2lnbmVkIGxvbmcgcGh5c19pbmRleDsKQEAgLTMwLDcgKzI5LDcgQEAKIAkgKiBjcmVhdGVkIGxvbmcgYWZ0ZXIgdGhlIGNyaXRpY2FsIGFyZWFzIGR1cmluZwogCSAqIGluaXRpYWxpemF0aW9uLgogCSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgc3RhdGVfc2VtOworCXN0cnVjdCBtdXRleCBzdGF0ZV9tdXRleDsKIAlpbnQgcGh5c19kZXZpY2U7CQkvKiB0byB3aGljaCBmcnUgZG9lcyB0aGlzIGJlbG9uZz8gKi8KIAl2b2lkICpodzsJCQkvKiBvcHRpb25hbCBwb2ludGVyIHRvIGZ3L2h3IGRhdGEgKi8KIAlpbnQgKCpwaHlzX2NhbGxiYWNrKShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1zdGljay5oIGIvaW5jbHVkZS9saW51eC9tZW1zdGljay5oCmluZGV4IDMzNGQwNTkuLjM3YTVjZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtc3RpY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbXN0aWNrLmgKQEAgLTIyLDYgKzIyLDggQEAKIAl1bnNpZ25lZCBjaGFyIHJlc2VydmVkOwogCXVuc2lnbmVkIGNoYXIgaW50ZXJydXB0OwogI2RlZmluZSBNRU1TVElDS19JTlRfQ01ETkFLICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBNRU1TVElDS19JTlRfSU9SRVEgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBNRU1TVElDS19JTlRfSU9CUkVRICAgICAgICAgICAgIDB4MDAxMAogI2RlZmluZSBNRU1TVElDS19JTlRfQlJFUSAgICAgICAgICAgICAgIDB4MDAyMAogI2RlZmluZSBNRU1TVElDS19JTlRfRVJSICAgICAgICAgICAgICAgIDB4MDA0MAogI2RlZmluZSBNRU1TVElDS19JTlRfQ0VEICAgICAgICAgICAgICAgIDB4MDA4MApAQCAtNDcsMTMgKzQ5LDE3IEBACiAKIHN0cnVjdCBtc19pZF9yZWdpc3RlciB7CiAJdW5zaWduZWQgY2hhciB0eXBlOwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ7CisJdW5zaWduZWQgY2hhciBpZl9tb2RlOwogCXVuc2lnbmVkIGNoYXIgY2F0ZWdvcnk7CiAJdW5zaWduZWQgY2hhciBjbGFzczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBtc19wYXJhbV9yZWdpc3RlciB7CiAJdW5zaWduZWQgY2hhciBzeXN0ZW07CisjZGVmaW5lIE1FTVNUSUNLX1NZU19BVEVOIDB4YzAKKyNkZWZpbmUgTUVNU1RJQ0tfU1lTX0JBTUQgMHg4MAorI2RlZmluZSBNRU1TVElDS19TWVNfUEFNICAweDA4CisKIAl1bnNpZ25lZCBjaGFyIGJsb2NrX2FkZHJlc3NfbXNiOwogCXVuc2lnbmVkIHNob3J0IGJsb2NrX2FkZHJlc3M7CiAJdW5zaWduZWQgY2hhciBjcDsKQEAgLTkwLDE2ICs5Niw0OCBAQAogCiBzdHJ1Y3QgbXNwcm9fcGFyYW1fcmVnaXN0ZXIgewogCXVuc2lnbmVkIGNoYXIgIHN5c3RlbTsKKyNkZWZpbmUgTUVNU1RJQ0tfU1lTX1NFUklBTCAweDgwCisjZGVmaW5lIE1FTVNUSUNLX1NZU19QQVI0ICAgMHgwMAorI2RlZmluZSBNRU1TVElDS19TWVNfUEFSOCAgIDB4NDAKKwogCXVuc2lnbmVkIHNob3J0IGRhdGFfY291bnQ7CiAJdW5zaWduZWQgaW50ICAgZGF0YV9hZGRyZXNzOwotCXVuc2lnbmVkIGNoYXIgIGNtZF9wYXJhbTsKKwl1bnNpZ25lZCBjaGFyICB0cGNfcGFyYW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbXNwcm9faW9faW5mb19yZWdpc3RlciB7CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgaW9fY2F0ZWdvcnk7CisJdW5zaWduZWQgY2hhciBjdXJyZW50X3JlcTsKKwl1bnNpZ25lZCBjaGFyIGNhcmRfb3B0X2luZm87CisJdW5zaWduZWQgY2hhciByZHlfd2FpdF90aW1lOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1zcHJvX2lvX2Z1bmNfcmVnaXN0ZXIgeworCXVuc2lnbmVkIGNoYXIgZnVuY19lbmFibGU7CisJdW5zaWduZWQgY2hhciBmdW5jX3NlbGVjdDsKKwl1bnNpZ25lZCBjaGFyIGZ1bmNfaW50bWFzazsKKwl1bnNpZ25lZCBjaGFyIHRyYW5zZmVyX21vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbXNwcm9faW9fY21kX3JlZ2lzdGVyIHsKKwl1bnNpZ25lZCBzaG9ydCB0cGNfcGFyYW07CisJdW5zaWduZWQgc2hvcnQgZGF0YV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgICBkYXRhX2FkZHJlc3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbXNwcm9fcmVnaXN0ZXIgewotCXN0cnVjdCBtc19zdGF0dXNfcmVnaXN0ZXIgICAgc3RhdHVzOwotCXN0cnVjdCBtc19pZF9yZWdpc3RlciAgICAgICAgaWQ7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICByZXNlcnZlZFs4XTsKLQlzdHJ1Y3QgbXNwcm9fcGFyYW1fcmVnaXN0ZXIgIHBhcmFtOworCXN0cnVjdCBtc19zdGF0dXNfcmVnaXN0ZXIgICAgIHN0YXR1czsKKwlzdHJ1Y3QgbXNfaWRfcmVnaXN0ZXIgICAgICAgICBpZDsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICByZXNlcnZlZDBbOF07CisJc3RydWN0IG1zcHJvX3BhcmFtX3JlZ2lzdGVyICAgcGFyYW07CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxWzhdOworCXN0cnVjdCBtc3Byb19pb19pbmZvX3JlZ2lzdGVyIGlvX2luZm87CisJc3RydWN0IG1zcHJvX2lvX2Z1bmNfcmVnaXN0ZXIgaW9fZnVuYzsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICByZXNlcnZlZDJbN107CisJc3RydWN0IG1zcHJvX2lvX2NtZF9yZWdpc3RlciAgaW9fY21kOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgIGlvX2ludDsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICBpb19pbnRfZnVuYzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBtc19yZWdpc3Rlcl9hZGRyIHsKQEAgLTExMCw0OSArMTQ4LDU1IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBlbnVtIHsKKwlNU19UUENfUkVBRF9NR19TVEFUVVMgICA9IDB4MDEsCiAJTVNfVFBDX1JFQURfTE9OR19EQVRBICAgPSAweDAyLAogCU1TX1RQQ19SRUFEX1NIT1JUX0RBVEEgID0gMHgwMywKKwlNU19UUENfUkVBRF9NR19EQVRBICAgICA9IDB4MDMsCiAJTVNfVFBDX1JFQURfUkVHICAgICAgICAgPSAweDA0LAotCU1TX1RQQ19SRUFEX0lPX0RBVEEgICAgID0gMHgwNSwgLyogdW52ZXJpZmllZCAqLworCU1TX1RQQ19SRUFEX1FVQURfREFUQSAgID0gMHgwNSwKKwlNU19UUENfUkVBRF9JT19EQVRBICAgICA9IDB4MDUsCiAJTVNfVFBDX0dFVF9JTlQgICAgICAgICAgPSAweDA3LAogCU1TX1RQQ19TRVRfUldfUkVHX0FEUlMgID0gMHgwOCwKIAlNU19UUENfRVhfU0VUX0NNRCAgICAgICA9IDB4MDksCi0JTVNfVFBDX1dSSVRFX0lPX0RBVEEgICAgPSAweDBhLCAvKiB1bnZlcmlmaWVkICovCisJTVNfVFBDX1dSSVRFX1FVQURfREFUQSAgPSAweDBhLAorCU1TX1RQQ19XUklURV9JT19EQVRBICAgID0gMHgwYSwKIAlNU19UUENfV1JJVEVfUkVHICAgICAgICA9IDB4MGIsCiAJTVNfVFBDX1dSSVRFX1NIT1JUX0RBVEEgPSAweDBjLAorCU1TX1RQQ19XUklURV9NR19EQVRBICAgID0gMHgwYywKIAlNU19UUENfV1JJVEVfTE9OR19EQVRBICA9IDB4MGQsCiAJTVNfVFBDX1NFVF9DTUQgICAgICAgICAgPSAweDBlCiB9OwogCiBlbnVtIHsKLQlNU19DTURfQkxPQ0tfRU5EICAgICA9IDB4MzMsCi0JTVNfQ01EX1JFU0VUICAgICAgICAgPSAweDNjLAotCU1TX0NNRF9CTE9DS19XUklURSAgID0gMHg1NSwKLQlNU19DTURfU0xFRVAgICAgICAgICA9IDB4NWEsCi0JTVNfQ01EX0JMT0NLX0VSQVNFICAgPSAweDk5LAotCU1TX0NNRF9CTE9DS19SRUFEICAgID0gMHhhYSwKLQlNU19DTURfQ0xFQVJfQlVGICAgICA9IDB4YzMsCi0JTVNfQ01EX0ZMQVNIX1NUT1AgICAgPSAweGNjLAotCU1TUFJPX0NNRF9GT1JNQVQgICAgID0gMHgxMCwKLQlNU1BST19DTURfU0xFRVAgICAgICA9IDB4MTEsCi0JTVNQUk9fQ01EX1JFQURfREFUQSAgPSAweDIwLAotCU1TUFJPX0NNRF9XUklURV9EQVRBID0gMHgyMSwKLQlNU1BST19DTURfUkVBRF9BVFJCICA9IDB4MjQsCi0JTVNQUk9fQ01EX1NUT1AgICAgICAgPSAweDI1LAotCU1TUFJPX0NNRF9FUkFTRSAgICAgID0gMHgyNiwKLQlNU1BST19DTURfU0VUX0lCQSAgICA9IDB4NDYsCi0JTVNQUk9fQ01EX1NFVF9JQkQgICAgPSAweDQ3Ci0vKgotCU1TUFJPX0NNRF9SRVNFVAotCU1TUFJPX0NNRF9XQUtFVVAKLQlNU1BST19DTURfSU5fSU9fREFUQQotCU1TUFJPX0NNRF9PVVRfSU9fREFUQQotCU1TUFJPX0NNRF9SRUFEX0lPX0FUUkIKLQlNU1BST19DTURfSU5fSU9fRklGTwotCU1TUFJPX0NNRF9PVVRfSU9fRklGTwotCU1TUFJPX0NNRF9JTl9JT00KLQlNU1BST19DTURfT1VUX0lPTQotKi8KKwlNU19DTURfQkxPQ0tfRU5EICAgICAgID0gMHgzMywKKwlNU19DTURfUkVTRVQgICAgICAgICAgID0gMHgzYywKKwlNU19DTURfQkxPQ0tfV1JJVEUgICAgID0gMHg1NSwKKwlNU19DTURfU0xFRVAgICAgICAgICAgID0gMHg1YSwKKwlNU19DTURfQkxPQ0tfRVJBU0UgICAgID0gMHg5OSwKKwlNU19DTURfQkxPQ0tfUkVBRCAgICAgID0gMHhhYSwKKwlNU19DTURfQ0xFQVJfQlVGICAgICAgID0gMHhjMywKKwlNU19DTURfRkxBU0hfU1RPUCAgICAgID0gMHhjYywKKwlNU19DTURfTE9BRF9JRCAgICAgICAgID0gMHg2MCwKKwlNU19DTURfQ01QX0lDViAgICAgICAgID0gMHg3ZiwKKwlNU1BST19DTURfRk9STUFUICAgICAgID0gMHgxMCwKKwlNU1BST19DTURfU0xFRVAgICAgICAgID0gMHgxMSwKKwlNU1BST19DTURfV0FLRVVQICAgICAgID0gMHgxMiwKKwlNU1BST19DTURfUkVBRF9EQVRBICAgID0gMHgyMCwKKwlNU1BST19DTURfV1JJVEVfREFUQSAgID0gMHgyMSwKKwlNU1BST19DTURfUkVBRF9BVFJCICAgID0gMHgyNCwKKwlNU1BST19DTURfU1RPUCAgICAgICAgID0gMHgyNSwKKwlNU1BST19DTURfRVJBU0UgICAgICAgID0gMHgyNiwKKwlNU1BST19DTURfUkVBRF9RVUFEICAgID0gMHgyNywKKwlNU1BST19DTURfV1JJVEVfUVVBRCAgID0gMHgyOCwKKwlNU1BST19DTURfU0VUX0lCRCAgICAgID0gMHg0NiwKKwlNU1BST19DTURfR0VUX0lCRCAgICAgID0gMHg0NywKKwlNU1BST19DTURfSU5fSU9fREFUQSAgID0gMHhiMCwKKwlNU1BST19DTURfT1VUX0lPX0RBVEEgID0gMHhiMSwKKwlNU1BST19DTURfUkVBRF9JT19BVFJCID0gMHhiMiwKKwlNU1BST19DTURfSU5fSU9fRklGTyAgID0gMHhiMywKKwlNU1BST19DTURfT1VUX0lPX0ZJRk8gID0gMHhiNCwKKwlNU1BST19DTURfSU5fSU9NICAgICAgID0gMHhiNSwKKwlNU1BST19DTURfT1VUX0lPTSAgICAgID0gMHhiNiwKIH07CiAKIC8qKiogRHJpdmVyIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyAqKiovCkBAIC0xNjUsNyArMjA5LDggQEAKICNkZWZpbmUgTUVNU1RJQ0tfUE9XRVJfT04gIDEKIAogI2RlZmluZSBNRU1TVElDS19TRVJJQUwgICAwCi0jZGVmaW5lIE1FTVNUSUNLX1BBUkFMTEVMIDEKKyNkZWZpbmUgTUVNU1RJQ0tfUEFSNCAgICAgMQorI2RlZmluZSBNRU1TVElDS19QQVI4ICAgICAyCiAKIHN0cnVjdCBtZW1zdGlja19ob3N0Owogc3RydWN0IG1lbXN0aWNrX2RyaXZlcjsKQEAgLTE5NCwxMiArMjM5LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHRwYzsKIAl1bnNpZ25lZCBjaGFyIGRhdGFfZGlyOjEsCiAJCSAgICAgIG5lZWRfY2FyZF9pbnQ6MSwKLQkJICAgICAgZ2V0X2ludF9yZWc6MSwKLQkJICAgICAgaW9fdHlwZToyOwotI2RlZmluZSAgICAgICAgICAgICAgIE1FTVNUSUNLX0lPX05PTkUgMAotI2RlZmluZSAgICAgICAgICAgICAgIE1FTVNUSUNLX0lPX1ZBTCAgMQotI2RlZmluZSAgICAgICAgICAgICAgIE1FTVNUSUNLX0lPX1NHICAgMgotCisJCSAgICAgIGxvbmdfZGF0YToxOwogCXVuc2lnbmVkIGNoYXIgaW50X3JlZzsKIAlpbnQgICAgICAgICAgIGVycm9yOwogCXVuaW9uIHsKQEAgLTIzMSwxMSArMjcxLDEyIEBACiAJc3RydWN0IG11dGV4ICAgICAgICBsb2NrOwogCXVuc2lnbmVkIGludCAgICAgICAgaWQ7CiAJdW5zaWduZWQgaW50ICAgICAgICBjYXBzOwotI2RlZmluZSBNRU1TVElDS19DQVBfUEFSQUxMRUwgICAgICAxCi0jZGVmaW5lIE1FTVNUSUNLX0NBUF9BVVRPX0dFVF9JTlQgIDIKKyNkZWZpbmUgTUVNU1RJQ0tfQ0FQX0FVVE9fR0VUX0lOVCAgMQorI2RlZmluZSBNRU1TVElDS19DQVBfUEFSNCAgICAgICAgICAyCisjZGVmaW5lIE1FTVNUSUNLX0NBUF9QQVI4ICAgICAgICAgIDQKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCAgbWVkaWFfY2hlY2tlcjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNkZXY7CisJc3RydWN0IGRldmljZSAgICAgICBkZXY7CiAKIAlzdHJ1Y3QgbWVtc3RpY2tfZGV2ICpjYXJkOwogCXVuc2lnbmVkIGludCAgICAgICAgcmV0cmllczsKQEAgLTI3MCw2ICszMTEsOCBAQAogdm9pZCBtZW1zdGlja19yZW1vdmVfaG9zdChzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqaG9zdCk7CiB2b2lkIG1lbXN0aWNrX2ZyZWVfaG9zdChzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqaG9zdCk7CiB2b2lkIG1lbXN0aWNrX2RldGVjdF9jaGFuZ2Uoc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QpOwordm9pZCBtZW1zdGlja19zdXNwZW5kX2hvc3Qoc3RydWN0IG1lbXN0aWNrX2hvc3QgKmhvc3QpOwordm9pZCBtZW1zdGlja19yZXN1bWVfaG9zdChzdHJ1Y3QgbWVtc3RpY2tfaG9zdCAqaG9zdCk7CiAKIHZvaWQgbWVtc3RpY2tfaW5pdF9yZXFfc2coc3RydWN0IG1lbXN0aWNrX3JlcXVlc3QgKm1ycSwgdW5zaWduZWQgY2hhciB0cGMsCiAJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvaHRjLWVncGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC9odGMtZWdwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDIwMWM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvaHRjLWVncGlvLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIEhUQyBzaW1wbGUgRUdQSU8gaXJxIGFuZCBncGlvIGV4dGVuZGVyCisgKi8KKworI2lmbmRlZiBfX0hUQ19FR1BJT19IX18KKyNkZWZpbmUgX19IVENfRUdQSU9fSF9fCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKy8qIERlc2NyaXB0aXZlIHZhbHVlcyBmb3IgYWxsLWluIG9yIGFsbC1vdXQgaHRjX2VncGlvX2NoaXAgZGVzY3JpcHRvcnMuICovCisjZGVmaW5lIEhUQ19FR1BJT19PVVRQVVQgKH4wKQorI2RlZmluZSBIVENfRUdQSU9fSU5QVVQgIDAKKworLyoqCisgKiBzdHJ1Y3QgaHRjX2VncGlvX2NoaXAgLSBkZXNjcmlwdG9yIHRvIGNyZWF0ZSBncGlvX2NoaXAgZm9yIHJlZ2lzdGVyIHJhbmdlCisgKiBAcmVnX3N0YXJ0OiBpbmRleCBvZiBmaXJzdCByZWdpc3RlcgorICogQGdwaW9fYmFzZTogZ3BpbyBudW1iZXIgb2YgZmlyc3QgcGluIGluIHRoaXMgcmVnaXN0ZXIgcmFuZ2UKKyAqIEBudW1fZ3Bpb3M6IG51bWJlciBvZiBncGlvcyBpbiB0aGlzIHJlZ2lzdGVyIHJhbmdlLCBtYXggQklUU19QRVJfTE9ORworICogICAgKG51bWJlciBvZiByZWdpc3RlcnMgPSBESVZfUk9VTkRfVVAobnVtX2dwaW9zLCByZWdfd2lkdGgpKQorICogQGRpcmVjdGlvbjogYml0ZmllbGQsICcwJyA9IGlucHV0LCAnMScgPSBvdXRwdXQsCisgKi8KK3N0cnVjdCBodGNfZWdwaW9fY2hpcCB7CisJaW50ICAgICAgICAgICByZWdfc3RhcnQ7CisJaW50ICAgICAgICAgICBncGlvX2Jhc2U7CisJaW50ICAgICAgICAgICBudW1fZ3Bpb3M7CisJdW5zaWduZWQgbG9uZyBkaXJlY3Rpb247CisJdW5zaWduZWQgbG9uZyBpbml0aWFsX3ZhbHVlczsKK307CisKKy8qKgorICogc3RydWN0IGh0Y19lZ3Bpb19wbGF0Zm9ybV9kYXRhIC0gZGVzY3JpcHRpb24gcHJvdmlkZWQgYnkgdGhlIGFyY2gKKyAqIEBpcnFfYmFzZTogYmVnaW5uaW5nIG9mIGF2YWlsYWJsZSBJUlFzIChlZywgSVJRX0JPQVJEX1NUQVJUKQorICogQG51bV9pcnFzOiBudW1iZXIgb2YgaXJxcworICogQHJlZ193aWR0aDogbnVtYmVyIG9mIGJpdHMgcGVyIHJlZ2lzdGVyLCBlaXRoZXIgOCBvciAxNiBiaXQKKyAqIEBidXNfd2lkdGg6IGFsaWdubWVudCBvZiB0aGUgcmVnaXN0ZXJzLCBlaXRoZXIgMTYgb3IgMzIgYml0CisgKiBAaW52ZXJ0X2Fja3M6IHNldCBpZiBjaGlwIHJlcXVpcmVzIHdyaXRpbmcgJzAnIHRvIGFjayBhbiBpcnEsIGluc3RlYWQgb2YgJzEnCisgKiBAYWNrX3JlZ2lzdGVyOiBsb2NhdGlvbiBvZiB0aGUgaXJxL2FjayByZWdpc3RlcgorICogQGNoaXA6IHBvaW50ZXIgdG8gYXJyYXkgb2YgaHRjX2VncGlvX2NoaXAgZGVzY3JpcHRvcnMKKyAqIEBudW1fY2hpcHM6IG51bWJlciBvZiBlZ3BpbyBjaGlwIGRlc2NyaXB0b3JzCisgKi8KK3N0cnVjdCBodGNfZWdwaW9fcGxhdGZvcm1fZGF0YSB7CisJaW50ICAgICAgICAgICAgICAgICAgIGJ1c193aWR0aDsKKwlpbnQgICAgICAgICAgICAgICAgICAgcmVnX3dpZHRoOworCisJaW50ICAgICAgICAgICAgICAgICAgIGlycV9iYXNlOworCWludCAgICAgICAgICAgICAgICAgICBudW1faXJxczsKKwlpbnQgICAgICAgICAgICAgICAgICAgaW52ZXJ0X2Fja3M7CisJaW50ICAgICAgICAgICAgICAgICAgIGFja19yZWdpc3RlcjsKKworCXN0cnVjdCBodGNfZWdwaW9fY2hpcCAqY2hpcDsKKwlpbnQgICAgICAgICAgICAgICAgICAgbnVtX2NoaXBzOworfTsKKworLyogRGV0ZXJtaW5lIHRoZSB3YWtldXAgaXJxLCB0byBiZSBjYWxsZWQgZHVyaW5nIGVhcmx5IHJlc3VtZSAqLworZXh0ZXJuIGludCBodGNfZWdwaW9fZ2V0X3dha2V1cF9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9odGMtcGFzaWMzLmggYi9pbmNsdWRlL2xpbnV4L21mZC9odGMtcGFzaWMzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyOTRmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2h0Yy1wYXNpYzMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogSFRDIFBBU0lDMyBkcml2ZXIgLSBMRURzIGFuZCBEUzFXTQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBQaGlsaXBwIFphYmVsIDxwaGlsaXBwLnphYmVsQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19QQVNJQzNfSAorI2RlZmluZSBfX1BBU0lDM19ICisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKK2V4dGVybiB2b2lkIHBhc2ljM193cml0ZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiByZWcsIHU4IHZhbCk7CitleHRlcm4gdTggcGFzaWMzX3JlYWRfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgcmVnKTsKKworLyoKKyAqIG1hc2sgZm9yIHJlZ2lzdGVycyAweDIwLDB4MjEsMHgyMgorICovCisjZGVmaW5lIFBBU0lDM19NQVNLX0xFRDAgMHgwNAorI2RlZmluZSBQQVNJQzNfTUFTS19MRUQxIDB4MDgKKyNkZWZpbmUgUEFTSUMzX01BU0tfTEVEMiAweDQwCisKKy8qCisgKiBiaXRzIGluIHJlZ2lzdGVyIDB4MDYKKyAqLworI2RlZmluZSBQQVNJQzNfQklUMl9MRUQwIDB4MDgKKyNkZWZpbmUgUEFTSUMzX0JJVDJfTEVEMSAweDEwCisjZGVmaW5lIFBBU0lDM19CSVQyX0xFRDIgMHgyMAorCitzdHJ1Y3QgcGFzaWMzX2xlZCB7CisJc3RydWN0IGxlZF9jbGFzc2RldiAgICAgICAgIGxlZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgaHdfbnVtOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBiaXQyOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBtYXNrOworCXN0cnVjdCBwYXNpYzNfbGVkc19tYWNoaW5mbyAqcGRhdGE7Cit9OworCitzdHJ1Y3QgcGFzaWMzX2xlZHNfbWFjaGluZm8geworCXVuc2lnbmVkIGludCAgICAgIG51bV9sZWRzOworCXVuc2lnbmVkIGludCAgICAgIHBvd2VyX2dwaW87CisJc3RydWN0IHBhc2ljM19sZWQgKmxlZHM7Cit9OworCitzdHJ1Y3QgcGFzaWMzX3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBwYXNpYzNfbGVkc19tYWNoaW5mbyAqbGVkX3BkYXRhOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgYnVzX3NoaWZ0OworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgY2xvY2tfcmF0ZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAppbmRleCAyNGIzMGI5Li4yNjQzM2VjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaApAQCAtNDMsMTUgKzQzLDcgQEAKIH07CiAKIGV4dGVybiBpbnQgbWlzY19yZWdpc3RlcihzdHJ1Y3QgbWlzY2RldmljZSAqIG1pc2MpOwotZXh0ZXJuIGludCBfX21pc2NfZGVyZWdpc3RlcihzdHJ1Y3QgbWlzY2RldmljZSAqbWlzYywgYm9vbCBzdXNwZW5kZWQpOwotc3RhdGljIGlubGluZSBpbnQgbWlzY19kZXJlZ2lzdGVyKHN0cnVjdCBtaXNjZGV2aWNlICptaXNjKQotewotCXJldHVybiBfX21pc2NfZGVyZWdpc3RlcihtaXNjLCBmYWxzZSk7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBtaXNjX2RlcmVnaXN0ZXJfc3VzcGVuZGVkKHN0cnVjdCBtaXNjZGV2aWNlICptaXNjKQotewotCXJldHVybiBfX21pc2NfZGVyZWdpc3RlcihtaXNjLCB0cnVlKTsKLX0KK2V4dGVybiBpbnQgbWlzY19kZXJlZ2lzdGVyKHN0cnVjdCBtaXNjZGV2aWNlICptaXNjKTsKIAogI2RlZmluZSBNT0RVTEVfQUxJQVNfTUlTQ0RFVihtaW5vcikJCQkJXAogCU1PRFVMRV9BTElBUygiY2hhci1tYWpvci0iIF9fc3RyaW5naWZ5KE1JU0NfTUFKT1IpCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAppbmRleCA3ZDFlYWE5Ny4uNzczMjNhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaApAQCAtODEsNyArODEsNyBAQAogCU1MWDRfQ01EX1NXMkhXX0NRCSA9IDB4MTYsCiAJTUxYNF9DTURfSFcyU1dfQ1EJID0gMHgxNywKIAlNTFg0X0NNRF9RVUVSWV9DUQkgPSAweDE4LAotCU1MWDRfQ01EX1JFU0laRV9DUQkgPSAweDJjLAorCU1MWDRfQ01EX01PRElGWV9DUQkgPSAweDJjLAogCiAJLyogU1JRIGNvbW1hbmRzICovCiAJTUxYNF9DTURfU1cySFdfU1JRCSA9IDB4MzUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvY3EuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9jcS5oCmluZGV4IDAxODFlMGEuLjA3MWNmOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9jcS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9jcS5oCkBAIC00NSwxMSArNDUsMTEgQEAKIAl1OAkJCXNsOwogCXU4CQkJcmVzZXJ2ZWQxOwogCV9fYmUxNgkJCXJsaWQ7Ci0JdTMyCQkJcmVzZXJ2ZWQyOworCV9fYmUzMgkJCWlwb2liX3N0YXR1czsKIAlfX2JlMzIJCQlieXRlX2NudDsKIAlfX2JlMTYJCQl3cWVfaW5kZXg7CiAJX19iZTE2CQkJY2hlY2tzdW07Ci0JdTgJCQlyZXNlcnZlZDNbM107CisJdTgJCQlyZXNlcnZlZDJbM107CiAJdTgJCQlvd25lcl9zcl9vcGNvZGU7CiB9OwogCkBAIC04NSw2ICs4NSwxNiBAQAogCU1MWDRfQ1FFX1NZTkRST01FX1JFTU9URV9BQk9SVEVEX0VSUgkJPSAweDIyLAogfTsKIAorZW51bSB7CisJTUxYNF9DUUVfSVBPSUJfU1RBVFVTX0lQVjQJCQk9IDEgPDwgMjIsCisJTUxYNF9DUUVfSVBPSUJfU1RBVFVTX0lQVjRGCQkJPSAxIDw8IDIzLAorCU1MWDRfQ1FFX0lQT0lCX1NUQVRVU19JUFY2CQkJPSAxIDw8IDI0LAorCU1MWDRfQ1FFX0lQT0lCX1NUQVRVU19JUFY0T1BUCQkJPSAxIDw8IDI1LAorCU1MWDRfQ1FFX0lQT0lCX1NUQVRVU19UQ1AJCQk9IDEgPDwgMjYsCisJTUxYNF9DUUVfSVBPSUJfU1RBVFVTX1VEUAkJCT0gMSA8PCAyNywKKwlNTFg0X0NRRV9JUE9JQl9TVEFUVVNfSVBPSwkJCT0gMSA8PCAyOCwKK307CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg0X2NxX2FybShzdHJ1Y3QgbWx4NF9jcSAqY3EsIHUzMiBjbWQsCiAJCQkgICAgICAgdm9pZCBfX2lvbWVtICp1YXJfcGFnZSwKIAkJCSAgICAgICBzcGlubG9ja190ICpkb29yYmVsbF9sb2NrKQpAQCAtMTIwLDQgKzEzMCw5IEBACiAJTUxYNF9DUV9EQl9SRVFfTk9UCQk9IDIgPDwgMjQKIH07CiAKK2ludCBtbHg0X2NxX21vZGlmeShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY3EgKmNxLAorCQkgICB1MTYgY291bnQsIHUxNiBwZXJpb2QpOworaW50IG1seDRfY3FfcmVzaXplKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9jcSAqY3EsCisJCSAgIGludCBlbnRyaWVzLCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCk7CisKICNlbmRpZiAvKiBNTFg0X0NRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAppbmRleCA2Y2RmODEzLi5mZjdkZjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCkBAIC0xODYsNiArMTg2LDcgQEAKIAl1MzIJCQlmbGFnczsKIAl1MTYJCQlzdGF0X3JhdGVfc3VwcG9ydDsKIAl1OAkJCXBvcnRfd2lkdGhfY2FwW01MWDRfTUFYX1BPUlRTICsgMV07CisJaW50CQkJbWF4X2dzb19zejsKIH07CiAKIHN0cnVjdCBtbHg0X2J1Zl9saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9kcml2ZXIuaAppbmRleCAxYjgzNWNhLi41M2M1ZmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2RyaXZlci5oCkBAIC00OCw4ICs0OCw3IEBACiAJdm9pZCAqCQkJKCphZGQpCSAoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogCXZvaWQJCQkoKnJlbW92ZSkoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmNvbnRleHQpOwogCXZvaWQJCQkoKmV2ZW50KSAoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmNvbnRleHQsCi0JCQkJCSAgZW51bSBtbHg0X2Rldl9ldmVudCBldmVudCwgaW50IHN1YnR5cGUsCi0JCQkJCSAgaW50IHBvcnQpOworCQkJCQkgIGVudW0gbWx4NF9kZXZfZXZlbnQgZXZlbnQsIGludCBwb3J0KTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvcXAuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9xcC5oCmluZGV4IDA5YTIyMzAuLmE1ZTQzZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9xcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9xcC5oCkBAIC0xNTgsMTAgKzE1OCwxMiBAQAogI2RlZmluZSBNTFg0X0ZXX1ZFUl9XUUVfQ1RSTF9ORUMgbWx4NF9md192ZXIoMiwgMiwgMjMyKQogCiBlbnVtIHsKLQlNTFg0X1dRRV9DVFJMX05FQwk9IDEgPDwgMjksCi0JTUxYNF9XUUVfQ1RSTF9GRU5DRQk9IDEgPDwgNiwKLQlNTFg0X1dRRV9DVFJMX0NRX1VQREFURQk9IDMgPDwgMiwKLQlNTFg0X1dRRV9DVFJMX1NPTElDSVRFRAk9IDEgPDwgMSwKKwlNTFg0X1dRRV9DVFJMX05FQwkJPSAxIDw8IDI5LAorCU1MWDRfV1FFX0NUUkxfRkVOQ0UJCT0gMSA8PCA2LAorCU1MWDRfV1FFX0NUUkxfQ1FfVVBEQVRFCQk9IDMgPDwgMiwKKwlNTFg0X1dRRV9DVFJMX1NPTElDSVRFRAkJPSAxIDw8IDEsCisJTUxYNF9XUUVfQ1RSTF9JUF9DU1VNCQk9IDEgPDwgNCwKKwlNTFg0X1dRRV9DVFJMX1RDUF9VRFBfQ1NVTQk9IDEgPDwgNSwKIH07CiAKIHN0cnVjdCBtbHg0X3dxZV9jdHJsX3NlZyB7CkBAIC0yMTcsNiArMjE5LDExIEBACiAJX19iZTMyCQkJcmVzZXJ2ZFsyXTsKIH07CiAKK3N0cnVjdCBtbHg0X2xzb19zZWcgeworCV9fYmUzMgkJCW1zc19oZHJfc2l6ZTsKKwlfX2JlMzIJCQloZWFkZXJbMF07Cit9OworCiBzdHJ1Y3QgbWx4NF93cWVfYmluZF9zZWcgewogCV9fYmUzMgkJCWZsYWdzMTsKIAlfX2JlMzIJCQlmbGFnczI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggMjZjNzEyNC4uYjY5NTg3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjM1LDEyICsyMzUsMjEgQEAKIHN0cnVjdCBwYWdlICp2bWFsbG9jX3RvX3BhZ2UoY29uc3Qgdm9pZCAqYWRkcik7CiB1bnNpZ25lZCBsb25nIHZtYWxsb2NfdG9fcGZuKGNvbnN0IHZvaWQgKmFkZHIpOwogCi0vKiBEZXRlcm1pbmUgaWYgYW4gYWRkcmVzcyBpcyB3aXRoaW4gdGhlIHZtYWxsb2MgcmFuZ2UgKi8KKy8qCisgKiBEZXRlcm1pbmUgaWYgYW4gYWRkcmVzcyBpcyB3aXRoaW4gdGhlIHZtYWxsb2MgcmFuZ2UKKyAqCisgKiBPbiBub21tdSwgdm1hbGxvYy92ZnJlZSB3cmFwIHRocm91Z2gga21hbGxvYy9rZnJlZSBkaXJlY3RseSwgc28gdGhlcmUKKyAqIGlzIG5vIHNwZWNpYWwgY2FzaW5nIHJlcXVpcmVkLgorICovCiBzdGF0aWMgaW5saW5lIGludCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeCkKIHsKKyNpZmRlZiBDT05GSUdfTU1VCiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpeDsKIAogCXJldHVybiBhZGRyID49IFZNQUxMT0NfU1RBUlQgJiYgYWRkciA8IFZNQUxMT0NfRU5EOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpjb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMTE3MSwxMiArMTE4MCwxOCBAQAogewogCWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkID0gMTsKIH0KKyNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KK2V4dGVybiBib29sIGtlcm5lbF9wYWdlX3ByZXNlbnQoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2VuZGlmIC8qIENPTkZJR19ISUJFUk5BVElPTiAqLwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZAoga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9kZWJ1Z19wYWdlYWxsb2Modm9pZCkKIHsKIH0KKyNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KK3N0YXRpYyBpbmxpbmUgYm9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYgLyogQ09ORklHX0hJQkVSTkFUSU9OICovCiAjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X2dhdGVfdm1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBiZmVlMGJkLi5hZjE5MGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC02NCwxMCArNjQsNyBAQAogI2lmIE5SX0NQVVMgPj0gQ09ORklHX1NQTElUX1BUTE9DS19DUFVTCiAJICAgIHNwaW5sb2NrX3QgcHRsOwogI2VuZGlmCi0JICAgIHN0cnVjdCB7Ci0JCSAgIHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiOwkvKiBTTFVCOiBQb2ludGVyIHRvIHNsYWIgKi8KLQkJICAgdm9pZCAqZW5kOwkJCS8qIFNMVUI6IGVuZCBtYXJrZXIgKi8KLQkgICAgfTsKKwkgICAgc3RydWN0IGttZW1fY2FjaGUgKnNsYWI7CS8qIFNMVUI6IFBvaW50ZXIgdG8gc2xhYiAqLwogCSAgICBzdHJ1Y3QgcGFnZSAqZmlyc3RfcGFnZTsJLyogQ29tcG91bmQgdGFpbCBwYWdlcyAqLwogCX07CiAJdW5pb24gewpAQCAtOTEsNyArODgsNyBAQAogCXZvaWQgKnZpcnR1YWw7CQkJLyogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoTlVMTCBpZgogCQkJCQkgICBub3Qga21hcHBlZCwgaWUuIGhpZ2htZW0pICovCiAjZW5kaWYgLyogV0FOVF9QQUdFX1ZJUlRVQUwgKi8KLSNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9DT05UCisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKIAl1bnNpZ25lZCBsb25nIHBhZ2VfY2dyb3VwOwogI2VuZGlmCiB9OwpAQCAtMjI1LDcgKzIyMiw3IEBACiAJLyogYWlvIGJpdHMgKi8KIAlyd2xvY2tfdAkJaW9jdHhfbGlzdF9sb2NrOwogCXN0cnVjdCBraW9jdHgJCSppb2N0eF9saXN0OwotI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX0NPTlQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggOGQ4ZDE5Ny4uOWYyNzRhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC02OTksNyArNjk5LDYgQEAKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgY29udGlnX3BhZ2VfZGF0YTsKICNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCSgmY29udGlnX3BhZ2VfZGF0YSkKICNkZWZpbmUgTk9ERV9NRU1fTUFQKG5pZCkJbWVtX21hcAotI2RlZmluZSBNQVhfTk9ERVNfU0hJRlQJCTEKIAogI2Vsc2UgLyogQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCmluZGV4IDZkMzA0N2QuLmQ2NjAwZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTI4LDggKzI5LDEwIEBACiAjZGVmaW5lIE1OVF9OT0FUSU1FCTB4MDgKICNkZWZpbmUgTU5UX05PRElSQVRJTUUJMHgxMAogI2RlZmluZSBNTlRfUkVMQVRJTUUJMHgyMAorI2RlZmluZSBNTlRfUkVBRE9OTFkJMHg0MAkvKiBkb2VzIHRoZSB1c2VyIHdhbnQgdGhpcyB0byBiZSByL28/ICovCiAKICNkZWZpbmUgTU5UX1NIUklOS0FCTEUJMHgxMDAKKyNkZWZpbmUgTU5UX0lNQkFMQU5DRURfV1JJVEVfQ09VTlQJMHgyMDAgLyoganVzdCBmb3IgZGVidWdnaW5nICovCiAKICNkZWZpbmUgTU5UX1NIQVJFRAkweDEwMDAJLyogaWYgdGhlIHZmc21vdW50IGlzIGEgc2hhcmVkIG1vdW50ICovCiAjZGVmaW5lIE1OVF9VTkJJTkRBQkxFCTB4MjAwMAkvKiBpZiB0aGUgdmZzbW91bnQgaXMgYSB1bmJpbmRhYmxlIG1vdW50ICovCkBAIC02MSw2ICs2NCwxMiBAQAogCWF0b21pY190IG1udF9jb3VudDsKIAlpbnQgbW50X2V4cGlyeV9tYXJrOwkJLyogdHJ1ZSBpZiBtYXJrZWQgZm9yIGV4cGlyeSAqLwogCWludCBtbnRfcGlubmVkOworCWludCBtbnRfZ2hvc3RzOworCS8qCisJICogVGhpcyB2YWx1ZSBpcyBub3Qgc3RhYmxlIHVubGVzcyBhbGwgb2YgdGhlIG1udF93cml0ZXJzW10gc3BpbmxvY2tzCisJICogYXJlIGhlbGQsIGFuZCBhbGwgbW50X3dyaXRlcltdcyBvbiB0aGlzIG1vdW50IGhhdmUgMCBhcyB0aGVpciAtPmNvdW50CisJICovCisJYXRvbWljX3QgX19tbnRfd3JpdGVyczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZmc21vdW50ICptbnRnZXQoc3RydWN0IHZmc21vdW50ICptbnQpCkBAIC03MCw5ICs3OSwxMiBAQAogCXJldHVybiBtbnQ7CiB9CiAKK2V4dGVybiBpbnQgbW50X3dhbnRfd3JpdGUoc3RydWN0IHZmc21vdW50ICptbnQpOworZXh0ZXJuIHZvaWQgbW50X2Ryb3Bfd3JpdGUoc3RydWN0IHZmc21vdW50ICptbnQpOwogZXh0ZXJuIHZvaWQgbW50cHV0X25vX2V4cGlyZShzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBleHRlcm4gdm9pZCBtbnRfcGluKHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiB2b2lkIG1udF91bnBpbihzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CitleHRlcm4gaW50IF9fbW50X2lzX3JlYWRvbmx5KHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKQEAgLTk4LDcgKzExMCw2IEBACiAJCQlpbnQgbW50X2ZsYWdzLCBzdHJ1Y3QgbGlzdF9oZWFkICpmc2xpc3QpOwogCiBleHRlcm4gdm9pZCBtYXJrX21vdW50c19mb3JfZXhwaXJ5KHN0cnVjdCBsaXN0X2hlYWQgKm1vdW50cyk7Ci1leHRlcm4gdm9pZCBzaHJpbmtfc3VibW91bnRzKHN0cnVjdCB2ZnNtb3VudCAqbW91bnRwb2ludCwgc3RydWN0IGxpc3RfaGVhZCAqbW91bnRzKTsKIAogZXh0ZXJuIHNwaW5sb2NrX3QgdmZzbW91bnRfbG9jazsKIGV4dGVybiBkZXZfdCBuYW1lX3RvX2Rldl90KGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKaW5kZXggMzVhODI3Ny4uZGU0ZGVjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0yLDcgKzIsMTEgQEAKICNkZWZpbmUgX19MSU5VWF9NUk9VVEVfSAogCiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9waW0uaD4KIAogLyoKICAqCUJhc2VkIG9uIHRoZSBNUk9VVElORyAzLjUgZGVmaW5lcyBwcmltYXJpbHkgdG8ga2VlcApAQCAtMjEwLDI3ICsyMTQsNiBAQAogI2RlZmluZSBJR01QTVNHX1dIT0xFUEtUCTMJCS8qIEZvciBQSU0gUmVnaXN0ZXIgcHJvY2Vzc2luZyAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotCi0jZGVmaW5lIFBJTV9WMV9WRVJTSU9OCQlfX2NvbnN0YW50X2h0b25sKDB4MTAwMDAwMDApCi0jZGVmaW5lIFBJTV9WMV9SRUdJU1RFUgkJMQotCi0jZGVmaW5lIFBJTV9WRVJTSU9OCQkyCi0jZGVmaW5lIFBJTV9SRUdJU1RFUgkJMQotCi0jZGVmaW5lIFBJTV9OVUxMX1JFR0lTVEVSCV9fY29uc3RhbnRfaHRvbmwoMHg0MDAwMDAwMCkKLQotLyogUElNdjIgcmVnaXN0ZXIgbWVzc2FnZSBoZWFkZXIgbGF5b3V0IChpZXRmLWRyYWZ0LWlkbXItcGltdnNtLXYyLTAwLnBzICovCi0KLXN0cnVjdCBwaW1yZWdoZHIKLXsKLQlfX3U4CXR5cGU7Ci0JX191OAlyZXNlcnZlZDsKLQlfX2JlMTYJY3N1bTsKLQlfX2JlMzIJZmxhZ3M7Ci19OwotCi1leHRlcm4gaW50IHBpbV9yY3ZfdjEoc3RydWN0IHNrX2J1ZmYgKik7Ci0KIHN0cnVjdCBydG1zZzsKIGV4dGVybiBpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTg5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaApAQCAtMCwwICsxLDIyOCBAQAorI2lmbmRlZiBfX0xJTlVYX01ST1VURTZfSAorI2RlZmluZSBfX0xJTlVYX01ST1VURTZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisKKy8qCisgKglCYXNlZCBvbiB0aGUgTVJPVVRJTkcgMy41IGRlZmluZXMgcHJpbWFyaWx5IHRvIGtlZXAKKyAqCXNvdXJjZSBjb21wYXRpYmlsaXR5IHdpdGggQlNELgorICoKKyAqCVNlZSB0aGUgcGltNnNkIGNvZGUgZm9yIHRoZSBvcmlnaW5hbCBoaXN0b3J5LgorICoKKyAqICAgICAgUHJvdG9jb2wgSW5kZXBlbmRlbnQgTXVsdGljYXN0IChQSU0pIGRhdGEgc3RydWN0dXJlcyBpbmNsdWRlZAorICogICAgICBDYXJsb3MgUGljb3RvIChjYXBAZGkuZmMudWwucHQpCisgKgorICovCisKKyNkZWZpbmUgTVJUNl9CQVNFCTIwMAorI2RlZmluZSBNUlQ2X0lOSVQJKE1SVDZfQkFTRSkJLyogQWN0aXZhdGUgdGhlIGtlcm5lbCBtcm91dGUgY29kZSAJKi8KKyNkZWZpbmUgTVJUNl9ET05FCShNUlQ2X0JBU0UrMSkJLyogU2h1dGRvd24gdGhlIGtlcm5lbCBtcm91dGUJCSovCisjZGVmaW5lIE1SVDZfQUREX01JRgkoTVJUNl9CQVNFKzIpCS8qIEFkZCBhIHZpcnR1YWwgaW50ZXJmYWNlCQkqLworI2RlZmluZSBNUlQ2X0RFTF9NSUYJKE1SVDZfQkFTRSszKQkvKiBEZWxldGUgYSB2aXJ0dWFsIGludGVyZmFjZQkJKi8KKyNkZWZpbmUgTVJUNl9BRERfTUZDCShNUlQ2X0JBU0UrNCkJLyogQWRkIGEgbXVsdGljYXN0IGZvcndhcmRpbmcgZW50cnkJKi8KKyNkZWZpbmUgTVJUNl9ERUxfTUZDCShNUlQ2X0JBU0UrNSkJLyogRGVsZXRlIGEgbXVsdGljYXN0IGZvcndhcmRpbmcgZW50cnkJKi8KKyNkZWZpbmUgTVJUNl9WRVJTSU9OCShNUlQ2X0JBU0UrNikJLyogR2V0IHRoZSBrZXJuZWwgbXVsdGljYXN0IHZlcnNpb24JKi8KKyNkZWZpbmUgTVJUNl9BU1NFUlQJKE1SVDZfQkFTRSs3KQkvKiBBY3RpdmF0ZSBQSU0gYXNzZXJ0IG1vZGUJCSovCisjZGVmaW5lIE1SVDZfUElNCShNUlQ2X0JBU0UrOCkJLyogZW5hYmxlIFBJTSBjb2RlCSovCisKKyNkZWZpbmUgU0lPQ0dFVE1JRkNOVF9JTjYJU0lPQ1BST1RPUFJJVkFURQkvKiBJUCBwcm90b2NvbCBwcml2YXRlcyAqLworI2RlZmluZSBTSU9DR0VUU0dDTlRfSU42CShTSU9DUFJPVE9QUklWQVRFKzEpCisjZGVmaW5lIFNJT0NHRVRSUEYJKFNJT0NQUk9UT1BSSVZBVEUrMikKKworI2RlZmluZSBNQVhNSUZTCQkzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1pZmJpdG1hcF90OwkvKiBVc2VyIG1vZGUgY29kZSBkZXBlbmRzIG9uIHRoaXMgbG90ICovCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1pZmlfdDsKKyNkZWZpbmUgQUxMX01JRlMJKChtaWZpX3QpKC0xKSkKKworI2lmbmRlZiBJRl9TRVRTSVpFCisjZGVmaW5lIElGX1NFVFNJWkUJMjU2CisjZW5kaWYKKwordHlwZWRlZglfX3UzMgkJaWZfbWFzazsKKyNkZWZpbmUgTklGQklUUyAoc2l6ZW9mKGlmX21hc2spICogOCkgICAgICAgIC8qIGJpdHMgcGVyIG1hc2sgKi8KKworI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKERJVl9ST1VORF9VUCkKKyNkZWZpbmUJRElWX1JPVU5EX1VQKHgseSkJKCgoeCkgKyAoKHkpIC0gMSkpIC8gKHkpKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGlmX3NldCB7CisJaWZfbWFzayBpZnNfYml0c1tESVZfUk9VTkRfVVAoSUZfU0VUU0laRSwgTklGQklUUyldOworfSBpZl9zZXQ7CisKKyNkZWZpbmUgSUZfU0VUKG4sIHApICAgICgocCktPmlmc19iaXRzWyhuKS9OSUZCSVRTXSB8PSAoMSA8PCAoKG4pICUgTklGQklUUykpKQorI2RlZmluZSBJRl9DTFIobiwgcCkgICAgKChwKS0+aWZzX2JpdHNbKG4pL05JRkJJVFNdICY9IH4oMSA8PCAoKG4pICUgTklGQklUUykpKQorI2RlZmluZSBJRl9JU1NFVChuLCBwKSAgKChwKS0+aWZzX2JpdHNbKG4pL05JRkJJVFNdICYgKDEgPDwgKChuKSAlIE5JRkJJVFMpKSkKKyNkZWZpbmUgSUZfQ09QWShmLCB0KSAgIGJjb3B5KGYsIHQsIHNpemVvZigqKGYpKSkKKyNkZWZpbmUgSUZfWkVSTyhwKSAgICAgIGJ6ZXJvKHAsIHNpemVvZigqKHApKSkKKworLyoKKyAqCVBhc3NlZCBieSBtcm91dGVkIGZvciBhbiBNUlRfQUREX01JRiAtIGFnYWluIHdlIHVzZSB0aGUKKyAqCW1yb3V0ZWQgMy42IHN0cnVjdHVyZXMgZm9yIGNvbXBhdGliaWxpdHkKKyAqLworCitzdHJ1Y3QgbWlmNmN0bCB7CisJbWlmaV90CW1pZjZjX21pZmk7CQkvKiBJbmRleCBvZiBNSUYgKi8KKwl1bnNpZ25lZCBjaGFyIG1pZjZjX2ZsYWdzOwkvKiBNSUZGXyBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIgdmlmY190aHJlc2hvbGQ7CS8qIHR0bCBsaW1pdCAqLworCXVfc2hvcnQJIG1pZjZjX3BpZmk7CQkvKiB0aGUgaW5kZXggb2YgdGhlIHBoeXNpY2FsIElGICovCisJdW5zaWduZWQgaW50IHZpZmNfcmF0ZV9saW1pdDsJLyogUmF0ZSBsaW1pdGVyIHZhbHVlcyAoTkkpICovCit9OworCisjZGVmaW5lIE1JRkZfUkVHSVNURVIJMHgxCS8qIHJlZ2lzdGVyIHZpZgkqLworCisvKgorICoJQ2FjaGUgbWFuaXB1bGF0aW9uIHN0cnVjdHVyZXMgZm9yIG1yb3V0ZWQgYW5kIFBJTWQKKyAqLworCitzdHJ1Y3QgbWY2Y2N0bAoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgbWY2Y2Nfb3JpZ2luOwkJLyogT3JpZ2luIG9mIG1jYXN0CSovCisJc3RydWN0IHNvY2thZGRyX2luNiBtZjZjY19tY2FzdGdycDsJCS8qIEdyb3VwIGluIHF1ZXN0aW9uCSovCisJbWlmaV90CW1mNmNjX3BhcmVudDsJCQkvKiBXaGVyZSBpdCBhcnJpdmVkCSovCisJc3RydWN0IGlmX3NldCBtZjZjY19pZnNldDsJCS8qIFdoZXJlIGl0IGlzIGdvaW5nICovCit9OworCisvKgorICoJR3JvdXAgY291bnQgcmV0cmlldmFsIGZvciBwaW02c2QKKyAqLworCitzdHJ1Y3Qgc2lvY19zZ19yZXE2Cit7CisJc3RydWN0IHNvY2thZGRyX2luNiBzcmM7CisJc3RydWN0IHNvY2thZGRyX2luNiBncnA7CisJdW5zaWduZWQgbG9uZyBwa3RjbnQ7CisJdW5zaWduZWQgbG9uZyBieXRlY250OworCXVuc2lnbmVkIGxvbmcgd3JvbmdfaWY7Cit9OworCisvKgorICoJVG8gZ2V0IHZpZiBwYWNrZXQgY291bnRzCisgKi8KKworc3RydWN0IHNpb2NfbWlmX3JlcTYKK3sKKwltaWZpX3QJbWlmaTsJCS8qIFdoaWNoIGlmYWNlICovCisJdW5zaWduZWQgbG9uZyBpY291bnQ7CS8qIEluIHBhY2tldHMgKi8KKwl1bnNpZ25lZCBsb25nIG9jb3VudDsJLyogT3V0IHBhY2tldHMgKi8KKwl1bnNpZ25lZCBsb25nIGlieXRlczsJLyogSW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIG9ieXRlczsJLyogT3V0IGJ5dGVzICovCit9OworCisvKgorICoJVGhhdCdzIGFsbCB1c2VybW9kZSBmb2xrcworICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4JLyogZm9yIHN0cnVjdCBza19idWZmX2hlYWQgKi8KKworI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorc3RhdGljIGlubGluZSBpbnQgaXA2X21yb3V0ZV9vcHQoaW50IG9wdCkKK3sKKwlyZXR1cm4gKG9wdCA+PSBNUlQ2X0JBU0UpICYmIChvcHQgPD0gTVJUNl9CQVNFICsgMTApOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGlwNl9tcm91dGVfb3B0KGludCBvcHQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RydWN0IHNvY2s7CisKK2V4dGVybiBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50KTsKK2V4dGVybiBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKK2V4dGVybiBpbnQgaXA2X21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOworZXh0ZXJuIHZvaWQgaXA2X21yX2luaXQodm9pZCk7CisKK3N0cnVjdCBtaWZfZGV2aWNlCit7CisJc3RydWN0IG5ldF9kZXZpY2UgCSpkZXY7CQkJLyogRGV2aWNlIHdlIGFyZSB1c2luZyAqLworCXVuc2lnbmVkIGxvbmcJYnl0ZXNfaW4sYnl0ZXNfb3V0OworCXVuc2lnbmVkIGxvbmcJcGt0X2luLHBrdF9vdXQ7CQkvKiBTdGF0aXN0aWNzIAkJCSovCisJdW5zaWduZWQgbG9uZwlyYXRlX2xpbWl0OwkJLyogVHJhZmZpYyBzaGFwaW5nIChOSSkgCSovCisJdW5zaWduZWQgY2hhcgl0aHJlc2hvbGQ7CQkvKiBUVEwgdGhyZXNob2xkIAkJKi8KKwl1bnNpZ25lZCBzaG9ydAlmbGFnczsJCQkvKiBDb250cm9sIGZsYWdzIAkJKi8KKwlpbnQJCWxpbms7CQkJLyogUGh5c2ljYWwgaW50ZXJmYWNlIGluZGV4CSovCit9OworCisjZGVmaW5lIFZJRkZfU1RBVElDIDB4ODAwMAorCitzdHJ1Y3QgbWZjNl9jYWNoZQoreworCXN0cnVjdCBtZmM2X2NhY2hlICpuZXh0OwkJLyogTmV4dCBlbnRyeSBvbiBjYWNoZSBsaW5lIAkqLworCXN0cnVjdCBpbjZfYWRkciBtZjZjX21jYXN0Z3JwOwkJCS8qIEdyb3VwIHRoZSBlbnRyeSBiZWxvbmdzIHRvIAkqLworCXN0cnVjdCBpbjZfYWRkciBtZjZjX29yaWdpbjsJCQkvKiBTb3VyY2Ugb2YgcGFja2V0IAkJKi8KKwltaWZpX3QgbWY2Y19wYXJlbnQ7CQkJLyogU291cmNlIGludGVyZmFjZQkJKi8KKwlpbnQgbWZjX2ZsYWdzOwkJCQkvKiBGbGFncyBvbiBsaW5lCQkqLworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBleHBpcmVzOworCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCB1bnJlc29sdmVkOwkvKiBVbnJlc29sdmVkIGJ1ZmZlcnMJCSovCisJCX0gdW5yZXM7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBsb25nIGxhc3RfYXNzZXJ0OworCQkJaW50IG1pbnZpZjsKKwkJCWludCBtYXh2aWY7CisJCQl1bnNpZ25lZCBsb25nIGJ5dGVzOworCQkJdW5zaWduZWQgbG9uZyBwa3Q7CisJCQl1bnNpZ25lZCBsb25nIHdyb25nX2lmOworCQkJdW5zaWduZWQgY2hhciB0dGxzW01BWE1JRlNdOwkvKiBUVEwgdGhyZXNob2xkcwkJKi8KKwkJfSByZXM7CisJfSBtZmNfdW47Cit9OworCisjZGVmaW5lIE1GQ19TVEFUSUMJCTEKKyNkZWZpbmUgTUZDX05PVElGWQkJMgorCisjZGVmaW5lIE1GQzZfTElORVMJCTY0CisKKyNkZWZpbmUgTUZDNl9IQVNIKGEsIGcpICgoKF9fZm9yY2UgdTMyKShhKS0+czZfYWRkcjMyWzBdIF4gXAorCQkJICAoX19mb3JjZSB1MzIpKGEpLT5zNl9hZGRyMzJbMV0gXiBcCisJCQkgIChfX2ZvcmNlIHUzMikoYSktPnM2X2FkZHIzMlsyXSBeIFwKKwkJCSAgKF9fZm9yY2UgdTMyKShhKS0+czZfYWRkcjMyWzNdIF4gXAorCQkJICAoX19mb3JjZSB1MzIpKGcpLT5zNl9hZGRyMzJbMF0gXiBcCisJCQkgIChfX2ZvcmNlIHUzMikoZyktPnM2X2FkZHIzMlsxXSBeIFwKKwkJCSAgKF9fZm9yY2UgdTMyKShnKS0+czZfYWRkcjMyWzJdIF4gXAorCQkJICAoX19mb3JjZSB1MzIpKGcpLT5zNl9hZGRyMzJbM10pICUgTUZDNl9MSU5FUykKKworI2RlZmluZSBNRkNfQVNTRVJUX1RIUkVTSCAoMypIWikJCS8qIE1heGltYWwgZnJlcS4gb2YgYXNzZXJ0cyAqLworCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBydG1zZzsKK2V4dGVybiBpbnQgaXA2bXJfZ2V0X3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KTsKKworI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorZXh0ZXJuIHN0cnVjdCBzb2NrICptcm91dGU2X3NvY2tldDsKK2V4dGVybiBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spOworI2Vsc2UKKyNkZWZpbmUgbXJvdXRlNl9zb2NrZXQgTlVMTAorc3RhdGljIGlubGluZSBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBjb21tdW5pY2F0ZSBmcm9tIGtlcm5lbCB0byBtdWx0aWNhc3Qgcm91dGVyLgorICogV2UnbGwgb3ZlcmxheSB0aGUgc3RydWN0dXJlIG9udG8gYW4gTUxEIGhlYWRlciAobm90IGFuIElQdjYgaGVkZXIgbGlrZSBpZ21wbXNne30KKyAqIHVzZWQgZm9yIElQdjQgaW1wbGVtZW50YXRpb24pLiBUaGlzIGlzIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSBwYXNzZWQgdmlhIGFuCisgKiBJUHY2IHJhdyBzb2NrZXQsIG9uIHdpY2ggYW4gYXBwbGljYXRpb24gd2lsbCBvbmx5IHJlY2VpdmVyIHRoZSBwYXlsb2FkIGkuZSB0aGUgZGF0YSBhZnRlcgorICogdGhlIElQdjYgaGVhZGVyIGFuZCBhbGwgdGhlIGV4dGVuc2lvbiBoZWFkZXJzLiAoU2VlIHNlY3Rpb24gMyBvZiBSRkMgMzU0MikKKyAqLworCitzdHJ1Y3QgbXJ0Nm1zZyB7CisjZGVmaW5lIE1SVDZNU0dfTk9DQUNIRQkJMQorI2RlZmluZSBNUlQ2TVNHX1dST05HTUlGCTIKKyNkZWZpbmUgTVJUNk1TR19XSE9MRVBLVAkzCQkvKiB1c2VkIGZvciB1c2UgbGV2ZWwgZW5jYXAgKi8KKwlfX3U4CQlpbTZfbWJ6OwkJLyogbXVzdCBiZSB6ZXJvCQkgICAqLworCV9fdTgJCWltNl9tc2d0eXBlOwkJLyogd2hhdCB0eXBlIG9mIG1lc3NhZ2UgICAgKi8KKwlfX3UxNgkJaW02X21pZjsJCS8qIG1pZiByZWMnZCBvbgkJICAgKi8KKwlfX3UzMgkJaW02X3BhZDsJCS8qIHBhZGRpbmcgZm9yIDY0IGJpdCBhcmNoICovCisJc3RydWN0IGluNl9hZGRyCWltNl9zcmMsIGltNl9kc3Q7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRpby5oIGIvaW5jbHVkZS9saW51eC9tdGlvLmgKaW5kZXggNmY4ZDJkNC4uZWYwMWQ2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGlvLmgKQEAgLTE5Miw2ICsxOTIsNyBAQAogI2RlZmluZSBNVF9TVF9TQ1NJMkxPR0lDQUwgICAgICAweDgwMAogI2RlZmluZSBNVF9TVF9TWVNWICAgICAgICAgICAgICAweDEwMDAKICNkZWZpbmUgTVRfU1RfTk9XQUlUICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIE1UX1NUX1NJTEkJCTB4NDAwMAogCiAvKiBUaGUgbW9kZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnRyb2xsZWQuIFBhcmFtZXRlciBjaG9zZW4gd2l0aCBiaXRzIDIwLTI4ICovCiAjZGVmaW5lIE1UX1NUX0NMRUFSX0RFRkFVTFQJMHhmZmZmZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggYzQxNGQ5MC4uNzFmN2RkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIF9MSU5VWF9ORVRfSAogCiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4KIAogc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwpAQCAtMjYsNyArMjcsNyBAQAogc3RydWN0IGlub2RlOwogc3RydWN0IG5ldDsKIAotI2RlZmluZSBOUFJPVE8JCTM0CQkvKiBzaG91bGQgYmUgZW5vdWdoIGZvciBub3cuLgkqLworI2RlZmluZSBOUFJPVE8JCUFGX01BWAogCiAjZGVmaW5lIFNZU19TT0NLRVQJMQkJLyogc3lzX3NvY2tldCgyKQkJKi8KICNkZWZpbmUgU1lTX0JJTkQJMgkJLyogc3lzX2JpbmQoMikJCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggYTJmMDAzMi4uN2MxZDQ0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zODMsOSArMzgzLDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXBpX2NvbXBsZXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbikKIHsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19uYXBpX2NvbXBsZXRlKG4pOwotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIC8qKgpAQCAtNzA4LDggKzcxMCwxMCBAQAogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqcG9sbF9jb250cm9sbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX05FVF9OUwogCS8qIE5ldHdvcmsgbmFtZXNwYWNlIHRoaXMgbmV0d29yayBkZXZpY2UgaXMgaW5zaWRlICovCiAJc3RydWN0IG5ldAkJKm5kX25ldDsKKyNlbmRpZgogCiAJLyogYnJpZGdlIHN0dWZmICovCiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydAkqYnJfcG9ydDsKQEAgLTcyNCw2ICs3MjgsMTAgQEAKIAkvKiBydG5ldGxpbmsgbGluayBvcHMgKi8KIAljb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqcnRubF9saW5rX29wczsKIAorCS8qIGZvciBzZXR0aW5nIGtlcm5lbCBzb2NrIGF0dHJpYnV0ZSBvbiBUQ1AgY29ubmVjdGlvbiBzZXR1cCAqLworI2RlZmluZSBHU09fTUFYX1NJWkUJCTY1NTM2CisJdW5zaWduZWQgaW50CQlnc29fbWF4X3NpemU7CisKIAkvKiBUaGUgVFggcXVldWUgY29udHJvbCBzdHJ1Y3R1cmVzICovCiAJdW5zaWduZWQgaW50CQkJZWdyZXNzX3N1YnF1ZXVlX2NvdW50OwogCXN0cnVjdCBuZXRfZGV2aWNlX3N1YnF1ZXVlCWVncmVzc19zdWJxdWV1ZVsxXTsKQEAgLTczMyw2ICs3NDEsMjggQEAKICNkZWZpbmUJTkVUREVWX0FMSUdOCQkzMgogI2RlZmluZQlORVRERVZfQUxJR05fQ09OU1QJKE5FVERFVl9BTElHTiAtIDEpCiAKKy8qCisgKiBOZXQgbmFtZXNwYWNlIGlubGluZXMKKyAqLworc3RhdGljIGlubGluZQorc3RydWN0IG5ldCAqZGV2X25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlyZXR1cm4gZGV2LT5uZF9uZXQ7CisjZWxzZQorCXJldHVybiAmaW5pdF9uZXQ7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZQordm9pZCBkZXZfbmV0X3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQpCit7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXJlbGVhc2VfbmV0KGRldi0+bmRfbmV0KTsKKwlkZXYtPm5kX25ldCA9IGhvbGRfbmV0KG5ldCk7CisjZW5kaWYKK30KKwogLyoqCiAgKgluZXRkZXZfcHJpdiAtIGFjY2VzcyBuZXR3b3JrIGRldmljZSBwcml2YXRlIGRhdGEKICAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCkBAIC04MDksNyArODM5LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaDsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKLQluZXQgPSBkZXYtPm5kX25ldDsKKwluZXQgPSBkZXZfbmV0KGRldik7CiAJbGggPSBkZXYtPmRldl9saXN0Lm5leHQ7CiAJcmV0dXJuIGxoID09ICZuZXQtPmRldl9iYXNlX2hlYWQgPyBOVUxMIDogbmV0X2RldmljZV9lbnRyeShsaCk7CiB9CkBAIC0xMDcyLDEyICsxMTAyLDE0IEBACiB9CiAKIC8qIFVzZSB0aGlzIHZhcmlhbnQgd2hlbiBpdCBpcyBrbm93biBmb3Igc3VyZSB0aGF0IGl0Ci0gKiBpcyBleGVjdXRpbmcgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIGlzIGV4ZWN1dGluZyBmcm9tIGhhcmR3YXJlIGludGVycnVwdCBjb250ZXh0IG9yIHdpdGggaGFyZHdhcmUgaW50ZXJydXB0cworICogZGlzYWJsZWQuCiAgKi8KIGV4dGVybiB2b2lkIGRldl9rZnJlZV9za2JfaXJxKHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKiBVc2UgdGhpcyB2YXJpYW50IGluIHBsYWNlcyB3aGVyZSBpdCBjb3VsZCBiZSBpbnZva2VkCi0gKiBlaXRoZXIgZnJvbSBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0LgorICogZnJvbSBlaXRoZXIgaGFyZHdhcmUgaW50ZXJydXB0IG9yIG90aGVyIGNvbnRleHQsIHdpdGggaGFyZHdhcmUgaW50ZXJydXB0cworICogZWl0aGVyIGRpc2FibGVkIG9yIGVuYWJsZWQuCiAgKi8KIGV4dGVybiB2b2lkIGRldl9rZnJlZV9za2JfYW55KHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC0xNDc1LDYgKzE1MDcsMTIgQEAKIAkJdW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgIHVuc2lnbmVkIGludCBzaXplKQoreworCWRldi0+Z3NvX21heF9zaXplID0gc2l6ZTsKK30KKwogLyogT24gYm9uZGluZyBzbGF2ZXMgb3RoZXIgdGhhbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzbGF2ZSwgc3VwcHJlc3MKICAqIGR1cGxpY2F0ZXMgZXhjZXB0IGZvciA4MDIuM2FkIEVUSF9QX1NMT1csIGFsYiBub24tbWNhc3QvYmNhc3QsIGFuZAogICogQVJQIG9uIGFjdGl2ZS1iYWNrdXAgc2xhdmVzIHdpdGggYXJwX3ZhbGlkYXRlIGVuYWJsZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAppbmRleCBkNzRlNzliLi5lNGM2NjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKQEAgLTYsMTEgKzYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCkBAIC0zMSw3ICszMyw3IEBACiAjZGVmaW5lIE5GX1ZFUkRJQ1RfUU1BU0sgMHhmZmZmMDAwMAogI2RlZmluZSBORl9WRVJESUNUX1FCSVRTIDE2CiAKLSNkZWZpbmUgTkZfUVVFVUVfTlIoeCkgKCgoeCA8PCBORl9WRVJESUNUX1FCSVRTKSAmIE5GX1ZFUkRJQ1RfUU1BU0spIHwgTkZfUVVFVUUpCisjZGVmaW5lIE5GX1FVRVVFX05SKHgpICgoKCh4KSA8PCBORl9WRVJESUNUX0JJVFMpICYgTkZfVkVSRElDVF9RTUFTSykgfCBORl9RVUVVRSkKIAogLyogb25seSBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkgKi8KICNpZm5kZWYgX19LRVJORUxfXwpAQCAtNTEsNyArNTMsNyBAQAogfTsKIAogdW5pb24gbmZfaW5ldF9hZGRyIHsKLQl1X2ludDMyX3QJYWxsWzRdOworCV9fdTMyCQlhbGxbNF07CiAJX19iZTMyCQlpcDsKIAlfX2JlMzIJCWlwNls0XTsKIAlzdHJ1Y3QgaW5fYWRkcglpbjsKQEAgLTYxLDEzICs2MywyMSBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAKK3N0YXRpYyBpbmxpbmUgaW50IG5mX2luZXRfYWRkcl9jbXAoY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphMSwKKwkJCQkgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmEyKQoreworCXJldHVybiBhMS0+YWxsWzBdID09IGEyLT5hbGxbMF0gJiYKKwkgICAgICAgYTEtPmFsbFsxXSA9PSBhMi0+YWxsWzFdICYmCisJICAgICAgIGExLT5hbGxbMl0gPT0gYTItPmFsbFsyXSAmJgorCSAgICAgICBhMS0+YWxsWzNdID09IGEyLT5hbGxbM107Cit9CisKIGV4dGVybiB2b2lkIG5ldGZpbHRlcl9pbml0KHZvaWQpOwogCiAvKiBMYXJnZXN0IGhvb2sgbnVtYmVyICsgMSAqLwogI2RlZmluZSBORl9NQVhfSE9PS1MgOAogCiBzdHJ1Y3Qgc2tfYnVmZjsKLXN0cnVjdCBuZXRfZGV2aWNlOwogCiB0eXBlZGVmIHVuc2lnbmVkIGludCBuZl9ob29rZm4odW5zaWduZWQgaW50IGhvb2tudW0sCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTIyNCw2ICsyMzQsMTEgQEAKIAl1bnNpZ25lZCBzaG9ydAlmYW1pbHk7CiAJX19zdW0xNgkJKCpjaGVja3N1bSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCiAJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCk7CisJX19zdW0xNgkJKCpjaGVja3N1bV9wYXJ0aWFsKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGhvb2ssCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkJCSAgICB1X2ludDhfdCBwcm90b2NvbCk7CiAJaW50CQkoKnJvdXRlKShzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LCBzdHJ1Y3QgZmxvd2kgKmZsKTsKIAl2b2lkCQkoKnNhdmVyb3V0ZSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpOwpAQCAtMjUzLDYgKzI2OCwyMyBAQAogCXJldHVybiBjc3VtOwogfQogCitzdGF0aWMgaW5saW5lIF9fc3VtMTYKK25mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCisJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbiwKKwkJICAgIHVfaW50OF90IHByb3RvY29sLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJY29uc3Qgc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvOworCV9fc3VtMTYgY3N1bSA9IDA7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJYWZpbmZvID0gbmZfZ2V0X2FmaW5mbyhmYW1pbHkpOworCWlmIChhZmluZm8pCisJCWNzdW0gPSBhZmluZm8tPmNoZWNrc3VtX3BhcnRpYWwoc2tiLCBob29rLCBkYXRhb2ZmLCBsZW4sCisJCQkJCQlwcm90b2NvbCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGNzdW07Cit9CisKIGV4dGVybiBpbnQgbmZfcmVnaXN0ZXJfYWZpbmZvKGNvbnN0IHN0cnVjdCBuZl9hZmluZm8gKmFmaW5mbyk7CiBleHRlcm4gdm9pZCBuZl91bnJlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm8pOwogCkBAIC0zMTEsNSArMzQzLDU2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfYXR0YWNoKHN0cnVjdCBza19idWZmICpuZXcsIHN0cnVjdCBza19idWZmICpza2IpIHt9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpuZl9wcmVfcm91dGluZ19uZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQpCit7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXJldHVybiBpbi0+bmRfbmV0OworI2Vsc2UKKwlyZXR1cm4gJmluaXRfbmV0OworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqbmZfbG9jYWxfaW5fbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0KQoreworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlyZXR1cm4gaW4tPm5kX25ldDsKKyNlbHNlCisJcmV0dXJuICZpbml0X25ldDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm5mX2ZvcndhcmRfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQpCit7CisjaWZkZWYgQ09ORklHX05FVF9OUworCUJVR19PTihpbi0+bmRfbmV0ICE9IG91dC0+bmRfbmV0KTsKKwlyZXR1cm4gaW4tPm5kX25ldDsKKyNlbHNlCisJcmV0dXJuICZpbml0X25ldDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm5mX2xvY2FsX291dF9uZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0KQoreworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlyZXR1cm4gb3V0LT5uZF9uZXQ7CisjZWxzZQorCXJldHVybiAmaW5pdF9uZXQ7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpuZl9wb3N0X3JvdXRpbmdfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCkKK3sKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJcmV0dXJuIG91dC0+bmRfbmV0OworI2Vsc2UKKwlyZXR1cm4gJmluaXRfbmV0OworI2VuZGlmCit9CisKICNlbmRpZiAvKl9fS0VSTkVMX18qLwogI2VuZGlmIC8qX19MSU5VWF9ORVRGSUxURVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKaW5kZXggOTFmZWYwYy4uM2FmZjUxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZApAQCAtMzAsNyArMzAsNiBAQAogaGVhZGVyLXkgKz0geHRfbXVsdGlwb3J0LmgKIGhlYWRlci15ICs9IHh0X293bmVyLmgKIGhlYWRlci15ICs9IHh0X3BrdHR5cGUuaAotaGVhZGVyLXkgKz0geHRfcG9saWN5LmgKIGhlYWRlci15ICs9IHh0X3JhdGVlc3QuaAogaGVhZGVyLXkgKz0geHRfcmVhbG0uaAogaGVhZGVyLXkgKz0geHRfc2N0cC5oCkBAIC00NywzICs0Niw0IEBACiB1bmlmZGVmLXkgKz0gbmZuZXRsaW5rX2NvbXBhdC5oCiB1bmlmZGVmLXkgKz0geF90YWJsZXMuaAogdW5pZmRlZi15ICs9IHh0X3BoeXNkZXYuaAordW5pZmRlZi15ICs9IHh0X3BvbGljeS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZGNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2RjY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGRjYzgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2RjY3AuaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfRENDUF9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfRENDUF9ICisKKy8qIEV4cG9zZWQgdG8gdXNlcnNwYWNlIG92ZXIgbmZuZXRsaW5rICovCitlbnVtIGN0X2RjY3Bfc3RhdGVzIHsKKwlDVF9EQ0NQX05PTkUsCisJQ1RfRENDUF9SRVFVRVNULAorCUNUX0RDQ1BfUkVTUE9ORCwKKwlDVF9EQ0NQX1BBUlRPUEVOLAorCUNUX0RDQ1BfT1BFTiwKKwlDVF9EQ0NQX0NMT1NFUkVRLAorCUNUX0RDQ1BfQ0xPU0lORywKKwlDVF9EQ0NQX1RJTUVXQUlULAorCUNUX0RDQ1BfSUdOT1JFLAorCUNUX0RDQ1BfSU5WQUxJRCwKKwlfX0NUX0RDQ1BfTUFYCit9OworI2RlZmluZSBDVF9EQ0NQX01BWAkJKF9fQ1RfRENDUF9NQVggLSAxKQorCitlbnVtIGN0X2RjY3Bfcm9sZXMgeworCUNUX0RDQ1BfUk9MRV9DTElFTlQsCisJQ1RfRENDUF9ST0xFX1NFUlZFUiwKKwlfX0NUX0RDQ1BfUk9MRV9NQVgKK307CisjZGVmaW5lIENUX0RDQ1BfUk9MRV9NQVgJKF9fQ1RfRENDUF9ST0xFX01BWCAtIDEpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KKworc3RydWN0IG5mX2N0X2RjY3AgeworCXVfaW50OF90CXJvbGVbSVBfQ1RfRElSX01BWF07CisJdV9pbnQ4X3QJc3RhdGU7CisJdV9pbnQ4X3QJbGFzdF9wa3Q7CisJdV9pbnQ4X3QJbGFzdF9kaXI7CisJdV9pbnQ2NF90CWhhbmRzaGFrZV9zZXE7Cit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19EQ0NQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaAppbmRleCA4ZTVjZTFjLi41ZGEwNGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oCkBAIC01LDM3ICs1LDE2NCBAQAogI2RlZmluZSBTSVBfUE9SVAk1MDYwCiAjZGVmaW5lIFNJUF9USU1FT1VUCTM2MDAKIAotZW51bSBzaXBfaGVhZGVyX3BvcyB7Ci0JUE9TX1JFR19SRVFfVVJJLAotCVBPU19SRVFfVVJJLAotCVBPU19GUk9NLAotCVBPU19UTywKLQlQT1NfVklBLAotCVBPU19DT05UQUNULAotCVBPU19DT05URU5ULAotCVBPU19NRURJQSwKLQlQT1NfT1dORVJfSVA0LAotCVBPU19DT05ORUNUSU9OX0lQNCwKLQlQT1NfT1dORVJfSVA2LAotCVBPU19DT05ORUNUSU9OX0lQNiwKLQlQT1NfU0RQX0hFQURFUiwKK3N0cnVjdCBuZl9jdF9zaXBfbWFzdGVyIHsKKwl1bnNpZ25lZCBpbnQJcmVnaXN0ZXJfY3NlcTsKK307CisKK2VudW0gc2lwX2V4cGVjdGF0aW9uX2NsYXNzZXMgeworCVNJUF9FWFBFQ1RfU0lHTkFMTElORywKKwlTSVBfRVhQRUNUX0FVRElPLAorCVNJUF9FWFBFQ1RfVklERU8sCisJX19TSVBfRVhQRUNUX01BWAorfTsKKyNkZWZpbmUgU0lQX0VYUEVDVF9NQVgJKF9fU0lQX0VYUEVDVF9NQVggLSAxKQorCitzdHJ1Y3Qgc2RwX21lZGlhX3R5cGUgeworCWNvbnN0IGNoYXIJCQkqbmFtZTsKKwl1bnNpZ25lZCBpbnQJCQlsZW47CisJZW51bSBzaXBfZXhwZWN0YXRpb25fY2xhc3NlcwljbGFzczsKK307CisKKyNkZWZpbmUgU0RQX01FRElBX1RZUEUoX19uYW1lLCBfX2NsYXNzKQkJCQkJXAorewkJCQkJCQkJCVwKKwkubmFtZQk9IChfX25hbWUpLAkJCQkJCVwKKwkubGVuCT0gc2l6ZW9mKF9fbmFtZSkgLSAxLAkJCQkJXAorCS5jbGFzcwk9IChfX2NsYXNzKSwJCQkJCQlcCit9CisKK3N0cnVjdCBzaXBfaGFuZGxlciB7CisJY29uc3QgY2hhcgkqbWV0aG9kOworCXVuc2lnbmVkIGludAlsZW47CisJaW50CQkoKnJlcXVlc3QpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3NlcSk7CisJaW50CQkoKnJlc3BvbnNlKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY3NlcSwgdW5zaWduZWQgaW50IGNvZGUpOworfTsKKworI2RlZmluZSBTSVBfSEFORExFUihfX21ldGhvZCwgX19yZXF1ZXN0LCBfX3Jlc3BvbnNlKQkJCVwKK3sJCQkJCQkJCQlcCisJLm1ldGhvZAkJPSAoX19tZXRob2QpLAkJCQkJXAorCS5sZW4JCT0gc2l6ZW9mKF9fbWV0aG9kKSAtIDEsCQkJCVwKKwkucmVxdWVzdAk9IChfX3JlcXVlc3QpLAkJCQkJXAorCS5yZXNwb25zZQk9IChfX3Jlc3BvbnNlKSwJCQkJCVwKK30KKworc3RydWN0IHNpcF9oZWFkZXIgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJY29uc3QgY2hhcgkqY25hbWU7CisJY29uc3QgY2hhcgkqc2VhcmNoOworCXVuc2lnbmVkIGludAlsZW47CisJdW5zaWduZWQgaW50CWNsZW47CisJdW5zaWduZWQgaW50CXNsZW47CisJaW50CQkoKm1hdGNoX2xlbikoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgICAgY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsCisJCQkJICAgICBpbnQgKnNoaWZ0KTsKK307CisKKyNkZWZpbmUgX19TSVBfSERSKF9fbmFtZSwgX19jbmFtZSwgX19zZWFyY2gsIF9fbWF0Y2gpCQkJXAorewkJCQkJCQkJCVwKKwkubmFtZQkJPSAoX19uYW1lKSwJCQkJCVwKKwkubGVuCQk9IHNpemVvZihfX25hbWUpIC0gMSwJCQkJXAorCS5jbmFtZQkJPSAoX19jbmFtZSksCQkJCQlcCisJLmNsZW4JCT0gKF9fY25hbWUpID8gc2l6ZW9mKF9fY25hbWUpIC0gMSA6IDAsCQlcCisJLnNlYXJjaAkJPSAoX19zZWFyY2gpLAkJCQkJXAorCS5zbGVuCQk9IChfX3NlYXJjaCkgPyBzaXplb2YoX19zZWFyY2gpIC0gMSA6IDAsCVwKKwkubWF0Y2hfbGVuCT0gKF9fbWF0Y2gpLAkJCQkJXAorfQorCisjZGVmaW5lIFNJUF9IRFIoX19uYW1lLCBfX2NuYW1lLCBfX3NlYXJjaCwgX19tYXRjaCkgXAorCV9fU0lQX0hEUihfX25hbWUsIF9fY25hbWUsIF9fc2VhcmNoLCBfX21hdGNoKQorCisjZGVmaW5lIFNEUF9IRFIoX19uYW1lLCBfX3NlYXJjaCwgX19tYXRjaCkgXAorCV9fU0lQX0hEUihfX25hbWUsIE5VTEwsIF9fc2VhcmNoLCBfX21hdGNoKQorCitlbnVtIHNpcF9oZWFkZXJfdHlwZXMgeworCVNJUF9IRFJfQ1NFUSwKKwlTSVBfSERSX0ZST00sCisJU0lQX0hEUl9UTywKKwlTSVBfSERSX0NPTlRBQ1QsCisJU0lQX0hEUl9WSUEsCisJU0lQX0hEUl9FWFBJUkVTLAorCVNJUF9IRFJfQ09OVEVOVF9MRU5HVEgsCit9OworCitlbnVtIHNkcF9oZWFkZXJfdHlwZXMgeworCVNEUF9IRFJfVU5TUEVDLAorCVNEUF9IRFJfVkVSU0lPTiwKKwlTRFBfSERSX09XTkVSX0lQNCwKKwlTRFBfSERSX0NPTk5FQ1RJT05fSVA0LAorCVNEUF9IRFJfT1dORVJfSVA2LAorCVNEUF9IRFJfQ09OTkVDVElPTl9JUDYsCisJU0RQX0hEUl9NRURJQSwKIH07CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2lwX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpkcHRyKTsKKwkJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbik7CitleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NpcF9leHBlY3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4pOworZXh0ZXJuIHVuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfYWRkcl9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkJICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0eXBlLAorCQkJCQkgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sCisJCQkJCSAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfcG9ydF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCisJCQkJCSAgICB1X2ludDE2X3QgcG9ydCk7CitleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9zZXNzaW9uX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCQkgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX21lZGlhX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLAorCQkJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgbWVkaWFvZmYsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG1lZGlhbGVuLAorCQkJCQkgICAgIHVuaW9uIG5mX2luZXRfYWRkciAqcnRwX2FkZHIpOwogCi1leHRlcm4gaW50IGN0X3NpcF9nZXRfaW5mbyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGxlbiwgdW5zaWduZWQgaW50ICptYXRjaG9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sIGVudW0gc2lwX2hlYWRlcl9wb3MgcG9zKTsKLWV4dGVybiBpbnQgY3Rfc2lwX2xubGVuKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmxpbWl0KTsKLWV4dGVybiBjb25zdCBjaGFyICpjdF9zaXBfc2VhcmNoKGNvbnN0IGNoYXIgKm5lZWRsZSwgY29uc3QgY2hhciAqaGF5c3RhY2ssCi0JCQkJIHNpemVfdCBuZWVkbGVfbGVuLCBzaXplX3QgaGF5c3RhY2tfbGVuLAotCQkJCSBpbnQgY2FzZV9zZW5zaXRpdmUpOworZXh0ZXJuIGludCBjdF9zaXBfcGFyc2VfcmVxdWVzdChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJY29uc3QgY2hhciAqZHB0ciwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkJdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbiwKKwkJCQl1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiAqcG9ydCk7CitleHRlcm4gaW50IGN0X3NpcF9nZXRfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJICAgICBlbnVtIHNpcF9oZWFkZXJfdHlwZXMgdHlwZSwKKwkJCSAgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbik7CitleHRlcm4gaW50IGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJCSAgIGVudW0gc2lwX2hlYWRlcl90eXBlcyB0eXBlLCBpbnQgKmluX2hlYWRlciwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLAorCQkJCSAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwgX19iZTE2ICpwb3J0KTsKK2V4dGVybiBpbnQgY3Rfc2lwX3BhcnNlX2FkZHJlc3NfcGFyYW0oY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCisJCQkJICAgICAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTsKK2V4dGVybiBpbnQgY3Rfc2lwX3BhcnNlX251bWVyaWNhbF9wYXJhbShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCisJCQkJCXVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJCQljb25zdCBjaGFyICpuYW1lLAorCQkJCQl1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNoZW4sCisJCQkJCXVuc2lnbmVkIGludCAqdmFsKTsKKworZXh0ZXJuIGludCBjdF9zaXBfZ2V0X3NkcF9oZWFkZXIoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJCSB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkJIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0eXBlLAorCQkJCSBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdGVybSwKKwkJCQkgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbik7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19ORl9DT05OVFJBQ0tfU0lQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCmluZGV4IDAyYTQyZDguLmUxNDUxNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKQEAgLTEsNiArMSw2IEBACiAjaWZuZGVmIF9ORk5FVExJTktfQ09NUEFUX0gKICNkZWZpbmUgX05GTkVUTElOS19DT01QQVRfSAotI2lmbmRlZiBfX0tFUk5FTAorI2lmbmRlZiBfX0tFUk5FTF9fCiAvKiBPbGQgbmZuZXRsaW5rIG1hY3JvcyBmb3IgdXNlcnNwYWNlICovCiAKIC8qIG5mbmV0bGluayBncm91cHM6IFVwIHRvIDMyIG1heGltdW0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaAppbmRleCBlM2UxNTMzLi4wYTM4M2FjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCkBAIC04MCw2ICs4MCw3IEBACiBlbnVtIGN0YXR0cl9wcm90b2luZm8gewogCUNUQV9QUk9UT0lORk9fVU5TUEVDLAogCUNUQV9QUk9UT0lORk9fVENQLAorCUNUQV9QUk9UT0lORk9fRENDUCwKIAlfX0NUQV9QUk9UT0lORk9fTUFYCiB9OwogI2RlZmluZSBDVEFfUFJPVE9JTkZPX01BWCAoX19DVEFfUFJPVE9JTkZPX01BWCAtIDEpCkBAIC05NSw2ICs5NiwxMyBAQAogfTsKICNkZWZpbmUgQ1RBX1BST1RPSU5GT19UQ1BfTUFYIChfX0NUQV9QUk9UT0lORk9fVENQX01BWCAtIDEpCiAKK2VudW0gY3RhdHRyX3Byb3RvaW5mb19kY2NwIHsKKwlDVEFfUFJPVE9JTkZPX0RDQ1BfVU5TUEVDLAorCUNUQV9QUk9UT0lORk9fRENDUF9TVEFURSwKKwlfX0NUQV9QUk9UT0lORk9fRENDUF9NQVgsCit9OworI2RlZmluZSBDVEFfUFJPVE9JTkZPX0RDQ1BfTUFYIChfX0NUQV9QUk9UT0lORk9fRENDUF9NQVggLSAxKQorCiBlbnVtIGN0YXR0cl9jb3VudGVycyB7CiAJQ1RBX0NPVU5URVJTX1VOU1BFQywKIAlDVEFfQ09VTlRFUlNfUEFDS0VUUywJCS8qIG9sZCA2NGJpdCBjb3VudGVycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggYjJjNjJjYy4uMjMyNjI5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC00MzAsMTMgKzQzMCwxMyBAQAogZXh0ZXJuIHZvaWQgeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoaW50IGFmKTsKIGV4dGVybiBzaG9ydCB4dF9jb21wYXRfY2FsY19qdW1wKGludCBhZiwgdW5zaWduZWQgaW50IG9mZnNldCk7CiAKLWV4dGVybiBpbnQgeHRfY29tcGF0X21hdGNoX29mZnNldChzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKTsKK2V4dGVybiBpbnQgeHRfY29tcGF0X21hdGNoX29mZnNldChjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKTsKIGV4dGVybiBpbnQgeHRfY29tcGF0X21hdGNoX2Zyb21fdXNlcihzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm0sCiAJCQkJICAgICB2b2lkICoqZHN0cHRyLCB1bnNpZ25lZCBpbnQgKnNpemUpOwogZXh0ZXJuIGludCB4dF9jb21wYXRfbWF0Y2hfdG9fdXNlcihzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm0sCiAJCQkJICAgdm9pZCBfX3VzZXIgKipkc3RwdHIsIHVuc2lnbmVkIGludCAqc2l6ZSk7CiAKLWV4dGVybiBpbnQgeHRfY29tcGF0X3RhcmdldF9vZmZzZXQoc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0KTsKK2V4dGVybiBpbnQgeHRfY29tcGF0X3RhcmdldF9vZmZzZXQoY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0KTsKIGV4dGVybiB2b2lkIHh0X2NvbXBhdF90YXJnZXRfZnJvbV91c2VyKHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnQsCiAJCQkJICAgICAgIHZvaWQgKipkc3RwdHIsIHVuc2lnbmVkIGludCAqc2l6ZSk7CiBleHRlcm4gaW50IHh0X2NvbXBhdF90YXJnZXRfdG9fdXNlcihzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaAppbmRleCA1OGI4MThlLi41MWIxOGQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaApAQCAtNjEsNyArNjEsNiBAQAogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm8gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotCXN0cnVjdCB4dF9oYXNobGltaXRfbXRpbmZvMSAqbWFzdGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKIH07CiAKICNlbmRpZiAvKl9YVF9IQVNITElNSVRfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKaW5kZXggZGQ1YTRmZC4uMzIwMDBiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaApAQCAtMzcsNjggKzM3LDU0IEBACiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVQoY2h1bmttYXAsIHR5cGUpIAkJXAogCWRvIHsgCQkJCQkJXAotCQljaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKKwkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKIAkJCTEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkJCSAJXAogCWRvIHsJCQkJCQkJXAotCQljaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gJj0gCQlcCisJCShjaHVua21hcClbdHlwZSAvIGJ5dGVzKHVfaW50MzJfdCldICY9IAkJXAogCQkJfigxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSkpOwlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX1NFVChjaHVua21hcCwgdHlwZSkgCQkJXAogKHsJCQkJCQkJCVwKLQkoY2h1bmttYXBbdHlwZSAvIGJ5dGVzICh1X2ludDMyX3QpXSAmIAkJCVwKKwkoKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMgKHVfaW50MzJfdCldICYgCQlcCiAJCSgxIDw8ICh0eXBlICUgYnl0ZXMgKHVfaW50MzJfdCkpKSkgPyAxOiAwOwlcCiB9KQogCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfUkVTRVQoY2h1bmttYXApIAkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWludCBpOyAJCQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKQlcCi0JCQljaHVua21hcFtpXSA9IDA7CQkJXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfUkVTRVQoY2h1bmttYXApIFwKKwltZW1zZXQoKGNodW5rbWFwKSwgMCwgc2l6ZW9mKGNodW5rbWFwKSkKIAotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1NFVF9BTEwoY2h1bmttYXApIAkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJaW50IGk7IAkJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2h1bmttYXApOyBpKyspIAlcCi0JCQljaHVua21hcFtpXSA9IH4wOwkJCVwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1NFVF9BTEwoY2h1bmttYXApIFwKKwltZW1zZXQoKGNodW5rbWFwKSwgfjBVLCBzaXplb2YoY2h1bmttYXApKQogCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ09QWShkZXN0bWFwLCBzcmNtYXApIAkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJaW50IGk7IAkJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3JjbWFwKTsgaSsrKSAJXAotCQkJZGVzdG1hcFtpXSA9IHNyY21hcFtpXTsJCQlcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9DT1BZKGRlc3RtYXAsIHNyY21hcCkgXAorCW1lbWNweSgoZGVzdG1hcCksIChzcmNtYXApLCBzaXplb2Yoc3JjbWFwKSkKIAotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0NMRUFSKGNodW5rbWFwKSAJCVwKLSh7CQkJCQkJCVwKLQlpbnQgaTsgCQkJCQkJXAotCWludCBmbGFnID0gMTsJCQkJCVwKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykgewlcCi0JCWlmIChjaHVua21hcFtpXSkgewkJCVwKLQkJCWZsYWcgPSAwOwkJCVwKLQkJCWJyZWFrOwkJCQlcCi0JCX0JCQkJCVwKLQl9CQkJCQkJXAotICAgICAgICBmbGFnOwkJCQkJCVwKLX0pCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIFwKKwlfX3NjdHBfY2h1bmttYXBfaXNfY2xlYXIoKGNodW5rbWFwKSwgQVJSQVlfU0laRShjaHVua21hcCkpCitzdGF0aWMgaW5saW5lIGJvb2wKK19fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQlpZiAoY2h1bmttYXBbaV0pCisJCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CiAKLSNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19BTExfU0VUKGNodW5rbWFwKSAJCVwKLSh7CQkJCQkJCVwKLQlpbnQgaTsgCQkJCQkJXAotCWludCBmbGFnID0gMTsJCQkJCVwKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykgewlcCi0JCWlmIChjaHVua21hcFtpXSAhPSB+MCkgewkJXAotCQkJZmxhZyA9IDA7CQkJXAotCQkJCWJyZWFrOwkJCVwKLQkJfQkJCQkJXAotCX0JCQkJCQlcCi0gICAgICAgIGZsYWc7CQkJCQkJXAotfSkKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19BTExfU0VUKGNodW5rbWFwKSBcCisJX19zY3RwX2NodW5rbWFwX2lzX2FsbF9zZXQoKGNodW5rbWFwKSwgQVJSQVlfU0laRShjaHVua21hcCkpCitzdGF0aWMgaW5saW5lIGJvb2wKK19fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KGNvbnN0IHVfaW50MzJfdCAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCWlmIChjaHVua21hcFtpXSAhPSB+MFUpCisJCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CiAKICNlbmRpZiAvKiBfWFRfU0NUUF9IXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaAppbmRleCBkYjIyM2NhLi5kZDljOTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKQEAgLTIzLDggKzIzLDYgQEAKIAogI2RlZmluZSBBUlBUX0ZVTkNUSU9OX01BWE5BTUVMRU4gWFRfRlVOQ1RJT05fTUFYTkFNRUxFTgogI2RlZmluZSBBUlBUX1RBQkxFX01BWE5BTUVMRU4gWFRfVEFCTEVfTUFYTkFNRUxFTgotI2RlZmluZSBhcnB0X3RhcmdldCB4dF90YXJnZXQKLSNkZWZpbmUgYXJwdF90YWJsZSB4dF90YWJsZQogCiAjZGVmaW5lIEFSUFRfREVWX0FERFJfTEVOX01BWCAxNgogCkBAIC0yNjYsMjAgKzI2NCwxNSBAQAogCS50YXJnZXQuZXJyb3JuYW1lID0gIkVSUk9SIiwJCQkJCSAgICAgICBcCiB9CiAKLSNkZWZpbmUgYXJwdF9yZWdpc3Rlcl90YXJnZXQodGd0KSAJXAotKHsJKHRndCktPmZhbWlseSA9IE5GX0FSUDsJCVwKLSAJeHRfcmVnaXN0ZXJfdGFyZ2V0KHRndCk7IH0pCi0jZGVmaW5lIGFycHRfdW5yZWdpc3Rlcl90YXJnZXQodGd0KSB4dF91bnJlZ2lzdGVyX3RhcmdldCh0Z3QpCi0KLWV4dGVybiBzdHJ1Y3QgYXJwdF90YWJsZSAqYXJwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCSAgICAgIHN0cnVjdCBhcnB0X3RhYmxlICp0YWJsZSwKLQkJCQkJICAgICAgY29uc3Qgc3RydWN0IGFycHRfcmVwbGFjZSAqcmVwbCk7Ci1leHRlcm4gdm9pZCBhcnB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGFycHRfdGFibGUgKnRhYmxlKTsKK2V4dGVybiBzdHJ1Y3QgeHRfdGFibGUgKmFycHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgICAgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBhcnB0X3JlcGxhY2UgKnJlcGwpOworZXh0ZXJuIHZvaWQgYXJwdF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBhcnB0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCQkJICBzdHJ1Y3QgYXJwdF90YWJsZSAqdGFibGUpOworCQkJCSAgc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CiAKICNkZWZpbmUgQVJQVF9BTElHTihzKSBYVF9BTElHTihzKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25mbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25mbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyODE3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmZsb2cuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9fTElOVVhfQlJJREdFX0VCVF9ORkxPR19ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9ORkxPR19ICisKKyNkZWZpbmUgRUJUX05GTE9HX01BU0sgMHgwCisKKyNkZWZpbmUgRUJUX05GTE9HX1BSRUZJWF9TSVpFIDY0CisjZGVmaW5lIEVCVF9ORkxPR19XQVRDSEVSICJuZmxvZyIKKworI2RlZmluZSBFQlRfTkZMT0dfREVGQVVMVF9HUk9VUAkJMHgxCisjZGVmaW5lIEVCVF9ORkxPR19ERUZBVUxUX1RIUkVTSE9MRAkxCisKK3N0cnVjdCBlYnRfbmZsb2dfaW5mbyB7CisJdV9pbnQzMl90IGxlbjsKKwl1X2ludDE2X3QgZ3JvdXA7CisJdV9pbnQxNl90IHRocmVzaG9sZDsKKwl1X2ludDE2X3QgZmxhZ3M7CisJdV9pbnQxNl90IHBhZDsKKwljaGFyIHByZWZpeFtFQlRfTkZMT0dfUFJFRklYX1NJWkVdOworfTsKKworI2VuZGlmCQkJCS8qIF9fTElOVVhfQlJJREdFX0VCVF9ORkxPR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKaW5kZXggOWExMDA5Mi4uNjUwMzE4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaApAQCAtNjIsOCArNjIsNiBAQAogCU5GX0lQX1BSSV9GSUxURVIgPSAwLAogCU5GX0lQX1BSSV9OQVRfU1JDID0gMTAwLAogCU5GX0lQX1BSSV9TRUxJTlVYX0xBU1QgPSAyMjUsCi0JTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIgPSBJTlRfTUFYIC0gMiwKLQlORl9JUF9QUklfTkFUX1NFUV9BREpVU1QgPSBJTlRfTUFYIC0gMSwKIAlORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0gPSBJTlRfTUFYLAogCU5GX0lQX1BSSV9MQVNUID0gSU5UX01BWCwKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IGEwNTI1YTEuLmUzZDc5NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0yNSw2ICsyNSw3IEBACiAKIHN0cnVjdCBuZXRwb2xsX2luZm8gewogCWF0b21pY190IHJlZmNudDsKKwlpbnQgcnhfZmxhZ3M7CiAJc3BpbmxvY2tfdCByeF9sb2NrOwogCXN0cnVjdCBuZXRwb2xsICpyeF9ucDsgLyogbmV0cG9sbCB0aGF0IHJlZ2lzdGVyZWQgYW4gcnhfaG9vayAqLwogCXN0cnVjdCBza19idWZmX2hlYWQgYXJwX3R4OyAvKiBsaXN0IG9mIGFycCByZXF1ZXN0cyB0byByZXBseSB0byAqLwpAQCAtNTAsMTIgKzUxLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghbnBpbmZvIHx8ICFucGluZm8tPnJ4X25wKQorCWlmICghbnBpbmZvIHx8ICghbnBpbmZvLT5yeF9ucCAmJiAhbnBpbmZvLT5yeF9mbGFncykpCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwotCS8qIGNoZWNrIHJ4X25wIGFnYWluIHdpdGggdGhlIGxvY2sgaGVsZCAqLwotCWlmIChucGluZm8tPnJ4X25wICYmIF9fbmV0cG9sbF9yeChza2IpKQorCS8qIGNoZWNrIHJ4X2ZsYWdzIGFnYWluIHdpdGggdGhlIGxvY2sgaGVsZCAqLworCWlmIChucGluZm8tPnJ4X2ZsYWdzICYmIF9fbmV0cG9sbF9yeChza2IpKQogCQlyZXQgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBhNjliYTgwLi5mNGEwZTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTE5NSw2ICsxOTUsNyBAQAogI2RlZmluZSBORlNfSU5PX0FEVklTRV9SRFBMVVMJKDEpCQkvKiBhZHZpc2UgcmVhZGRpcnBsdXMgKi8KICNkZWZpbmUgTkZTX0lOT19TVEFMRQkJKDIpCQkvKiBwb3NzaWJsZSBzdGFsZSBpbm9kZSAqLwogI2RlZmluZSBORlNfSU5PX0FDTF9MUlVfU0VUCSgzKQkJLyogSW5vZGUgaXMgb24gdGhlIExSVSBsaXN0ICovCisjZGVmaW5lIE5GU19JTk9fTU9VTlRQT0lOVAkoNCkJCS8qIGlub2RlIGlzIHJlbW90ZSBtb3VudHBvaW50ICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19pbm9kZSAqTkZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggOWZlY2Y5MC4uZWE2NTE3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTc4LDYgKzc4LDE4IEBACiAgKglvciwgaWYgbm8gTUFDIGFkZHJlc3MgZ2l2ZW4sIGFsbCBzdGF0aW9ucywgb24gdGhlIGludGVyZmFjZSBpZGVudGlmaWVkCiAgKglieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVguCiAgKgorICogQE5MODAyMTFfQ01EX0dFVF9NUEFUSDogR2V0IG1lc2ggcGF0aCBhdHRyaWJ1dGVzIGZvciBtZXNoIHBhdGggdG8KKyAqIAlkZXN0aW5hdGlvbiAlTkw4MDIxMV9BVFRSX01BQyBvbiB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkKKyAqIAklTkw4MDIxMV9BVFRSX0lGSU5ERVguCisgKiBATkw4MDIxMV9DTURfU0VUX01QQVRIOiAgU2V0IG1lc2ggcGF0aCBhdHRyaWJ1dGVzIGZvciBtZXNoIHBhdGggdG8KKyAqIAlkZXN0aW5hdGlvbiAlTkw4MDIxMV9BVFRSX01BQyBvbiB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkKKyAqIAklTkw4MDIxMV9BVFRSX0lGSU5ERVguCisgKiBATkw4MDIxMV9DTURfTkVXX1BBVEg6IEFkZCBhIG1lc2ggcGF0aCB3aXRoIGdpdmVuIGF0dHJpYnV0ZXMgdG8gdGhlCisgKgl0aGUgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkgJU5MODAyMTFfQVRUUl9JRklOREVYLgorICogQE5MODAyMTFfQ01EX0RFTF9QQVRIOiBSZW1vdmUgYSBtZXNoIHBhdGggaWRlbnRpZmllZCBieSAlTkw4MDIxMV9BVFRSX01BQworICoJb3IsIGlmIG5vIE1BQyBhZGRyZXNzIGdpdmVuLCBhbGwgbWVzaCBwYXRocywgb24gdGhlIGludGVyZmFjZSBpZGVudGlmaWVkCisgKglieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVguCisgKgogICogQE5MODAyMTFfQ01EX01BWDogaGlnaGVzdCB1c2VkIGNvbW1hbmQgbnVtYmVyCiAgKiBAX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMTEyLDYgKzEyNCwxMSBAQAogCiAJLyogYWRkIGNvbW1hbmRzIGhlcmUgKi8KIAorCU5MODAyMTFfQ01EX0dFVF9NUEFUSCwKKwlOTDgwMjExX0NNRF9TRVRfTVBBVEgsCisJTkw4MDIxMV9DTURfTkVXX01QQVRILAorCU5MODAyMTFfQ01EX0RFTF9NUEFUSCwKKwogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwogCV9fTkw4MDIxMV9DTURfQUZURVJfTEFTVCwKIAlOTDgwMjExX0NNRF9NQVggPSBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1QgLSAxCkBAIC0xNTcsOSArMTc0LDIzIEBACiAgKglyZXN0cmljdGlvbiAoYXQgbW9zdCAlTkw4MDIxMV9NQVhfU1VQUF9SQVRFUykuCiAgKiBATkw4MDIxMV9BVFRSX1NUQV9WTEFOOiBpbnRlcmZhY2UgaW5kZXggb2YgVkxBTiBpbnRlcmZhY2UgdG8gbW92ZSBzdGF0aW9uCiAgKgl0bywgb3IgdGhlIEFQIGludGVyZmFjZSB0aGUgc3RhdGlvbiB3YXMgb3JpZ2luYWxseSBhZGRlZCB0byB0by4KLSAqIEBOTDgwMjExX0FUVFJfU1RBX1NUQVRTOiBzdGF0aXN0aWNzIGZvciBhIHN0YXRpb24sIHBhcnQgb2Ygc3RhdGlvbiBpbmZvCisgKiBATkw4MDIxMV9BVFRSX1NUQV9JTkZPOiBpbmZvcm1hdGlvbiBhYm91dCBhIHN0YXRpb24sIHBhcnQgb2Ygc3RhdGlvbiBpbmZvCiAgKglnaXZlbiBmb3IgJU5MODAyMTFfQ01EX0dFVF9TVEFUSU9OLCBuZXN0ZWQgYXR0cmlidXRlIGNvbnRhaW5pbmcKLSAqCWluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9zdGF0cy4KKyAqCWluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvLgorICoKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfQkFORFM6IEluZm9ybWF0aW9uIGFib3V0IGFuIG9wZXJhdGluZyBiYW5kcywKKyAqCWNvbnNpc3Rpbmcgb2YgYSBuZXN0ZWQgYXJyYXkuCisgKgorICogQE5MODAyMTFfQVRUUl9NRVNIX0lEOiBtZXNoIGlkICgxLTMyIGJ5dGVzKS4KKyAqIEBOTDgwMjExX0FUVFJfUExJTktfQUNUSU9OOiBhY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgbWVzaCBwZWVyIGxpbmsuCisgKiBATkw4MDIxMV9BVFRSX01QQVRIX05FWFRfSE9QOiBNQUMgYWRkcmVzcyBvZiB0aGUgbmV4dCBob3AgZm9yIGEgbWVzaCBwYXRoLgorICogQE5MODAyMTFfQVRUUl9NUEFUSF9JTkZPOiBpbmZvcm1hdGlvbiBhYm91dCBhIG1lc2hfcGF0aCwgcGFydCBvZiBtZXNoIHBhdGgKKyAqIAlpbmZvIGdpdmVuIGZvciAlTkw4MDIxMV9DTURfR0VUX01QQVRILCBuZXN0ZWQgYXR0cmlidXRlIGRlc2NyaWJlZCBhdAorICoJJmVudW0gbmw4MDIxMV9tcGF0aF9pbmZvLgorICoKKyAqCisgKiBATkw4MDIxMV9BVFRSX01OVFJfRkxBR1M6IGZsYWdzLCBuZXN0ZWQgZWxlbWVudCB3aXRoIE5MQV9GTEFHIGF0dHJpYnV0ZXMgb2YKKyAqICAgICAgJmVudW0gbmw4MDIxMV9tbnRyX2ZsYWdzLgogICoKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKQEAgLTE5MywxMCArMjI0LDE5IEBACiAJTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUwsCiAJTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVMsCiAJTkw4MDIxMV9BVFRSX1NUQV9WTEFOLAotCU5MODAyMTFfQVRUUl9TVEFfU1RBVFMsCisJTkw4MDIxMV9BVFRSX1NUQV9JTkZPLAorCisJTkw4MDIxMV9BVFRSX1dJUEhZX0JBTkRTLAorCisJTkw4MDIxMV9BVFRSX01OVFJfRkxBR1MsCiAKIAkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KIAorCU5MODAyMTFfQVRUUl9NRVNIX0lELAorCU5MODAyMTFfQVRUUl9TVEFfUExJTktfQUNUSU9OLAorCU5MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUCwKKwlOTDgwMjExX0FUVFJfTVBBVEhfSU5GTywKKwogCV9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCiAJTkw4MDIxMV9BVFRSX01BWCA9IF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QgLSAxCiB9OwpAQCAtMjEzLDYgKzI1Myw3IEBACiAgKiBATkw4MDIxMV9JRlRZUEVfQVBfVkxBTjogVkxBTiBpbnRlcmZhY2UgZm9yIGFjY2VzcyBwb2ludHMKICAqIEBOTDgwMjExX0lGVFlQRV9XRFM6IHdpcmVsZXNzIGRpc3RyaWJ1dGlvbiBpbnRlcmZhY2UKICAqIEBOTDgwMjExX0lGVFlQRV9NT05JVE9SOiBtb25pdG9yIGludGVyZmFjZSByZWNlaXZpbmcgYWxsIGZyYW1lcworICogQE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6IG1lc2ggcG9pbnQKICAqIEBOTDgwMjExX0lGVFlQRV9NQVg6IGhpZ2hlc3QgaW50ZXJmYWNlIHR5cGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0lGVFlQRV9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqCkBAIC0yMjgsNiArMjY5LDcgQEAKIAlOTDgwMjExX0lGVFlQRV9BUF9WTEFOLAogCU5MODAyMTFfSUZUWVBFX1dEUywKIAlOTDgwMjExX0lGVFlQRV9NT05JVE9SLAorCU5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfSUZUWVBFX0FGVEVSX0xBU1QsCkBAIC0yNTcsMjcgKzI5OSwxNjcgQEAKIH07CiAKIC8qKgotICogZW51bSBubDgwMjExX3N0YV9zdGF0cyAtIHN0YXRpb24gc3RhdGlzdGljcworICogZW51bSBubDgwMjExX3N0YV9pbmZvIC0gc3RhdGlvbiBpbmZvcm1hdGlvbgogICoKLSAqIFRoZXNlIGF0dHJpYnV0ZSB0eXBlcyBhcmUgdXNlZCB3aXRoICVOTDgwMjExX0FUVFJfU1RBX1NUQVRTCisgKiBUaGVzZSBhdHRyaWJ1dGUgdHlwZXMgYXJlIHVzZWQgd2l0aCAlTkw4MDIxMV9BVFRSX1NUQV9JTkZPCiAgKiB3aGVuIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBzdGF0aW9uLgogICoKLSAqIEBfX05MODAyMTFfU1RBX1NUQVRfSU5WQUxJRDogYXR0cmlidXRlIG51bWJlciAwIGlzIHJlc2VydmVkCi0gKiBATkw4MDIxMV9TVEFfU1RBVF9JTkFDVElWRV9USU1FOiB0aW1lIHNpbmNlIGxhc3QgYWN0aXZpdHkgKHUzMiwgbXNlY3MpCi0gKiBATkw4MDIxMV9TVEFfU1RBVF9SWF9CWVRFUzogdG90YWwgcmVjZWl2ZWQgYnl0ZXMgKHUzMiwgZnJvbSB0aGlzIHN0YXRpb24pCi0gKiBATkw4MDIxMV9TVEFfU1RBVF9UWF9CWVRFUzogdG90YWwgdHJhbnNtaXR0ZWQgYnl0ZXMgKHUzMiwgdG8gdGhpcyBzdGF0aW9uKQotICogQF9fTkw4MDIxMV9TVEFfU1RBVF9BRlRFUl9MQVNUOiBpbnRlcm5hbAotICogQE5MODAyMTFfU1RBX1NUQVRfTUFYOiBoaWdoZXN0IHBvc3NpYmxlIHN0YXRpb24gc3RhdHMgYXR0cmlidXRlCisgKiBAX19OTDgwMjExX1NUQV9JTkZPX0lOVkFMSUQ6IGF0dHJpYnV0ZSBudW1iZXIgMCBpcyByZXNlcnZlZAorICogQE5MODAyMTFfU1RBX0lORk9fSU5BQ1RJVkVfVElNRTogdGltZSBzaW5jZSBsYXN0IGFjdGl2aXR5ICh1MzIsIG1zZWNzKQorICogQE5MODAyMTFfU1RBX0lORk9fUlhfQllURVM6IHRvdGFsIHJlY2VpdmVkIGJ5dGVzICh1MzIsIGZyb20gdGhpcyBzdGF0aW9uKQorICogQE5MODAyMTFfU1RBX0lORk9fVFhfQllURVM6IHRvdGFsIHRyYW5zbWl0dGVkIGJ5dGVzICh1MzIsIHRvIHRoaXMgc3RhdGlvbikKKyAqIEBfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVDogaW50ZXJuYWwKKyAqIEBOTDgwMjExX1NUQV9JTkZPX01BWDogaGlnaGVzdCBwb3NzaWJsZSBzdGF0aW9uIGluZm8gYXR0cmlidXRlCiAgKi8KLWVudW0gbmw4MDIxMV9zdGFfc3RhdHMgewotCV9fTkw4MDIxMV9TVEFfU1RBVF9JTlZBTElELAotCU5MODAyMTFfU1RBX1NUQVRfSU5BQ1RJVkVfVElNRSwKLQlOTDgwMjExX1NUQV9TVEFUX1JYX0JZVEVTLAotCU5MODAyMTFfU1RBX1NUQVRfVFhfQllURVMsCitlbnVtIG5sODAyMTFfc3RhX2luZm8geworCV9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElELAorCU5MODAyMTFfU1RBX0lORk9fSU5BQ1RJVkVfVElNRSwKKwlOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTLAorCU5MODAyMTFfU1RBX0lORk9fVFhfQllURVMsCisJTkw4MDIxMV9TVEFfSU5GT19MTElELAorCU5MODAyMTFfU1RBX0lORk9fUExJRCwKKwlOTDgwMjExX1NUQV9JTkZPX1BMSU5LX1NUQVRFLAogCiAJLyoga2VlcCBsYXN0ICovCi0JX19OTDgwMjExX1NUQV9TVEFUX0FGVEVSX0xBU1QsCi0JTkw4MDIxMV9TVEFfU1RBVF9NQVggPSBfX05MODAyMTFfU1RBX1NUQVRfQUZURVJfTEFTVCAtIDEKKwlfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKKwlOTDgwMjExX1NUQV9JTkZPX01BWCA9IF9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfbXBhdGhfZmxhZ3MgLSBubDgwMjExIG1lc2ggcGF0aCBmbGFncworICoKKyAqIEBOTDgwMjExX01QQVRIX0ZMQUdfQUNUSVZFOiB0aGUgbWVzaCBwYXRoIGlzIGFjdGl2ZQorICogQE5MODAyMTFfTVBBVEhfRkxBR19SRVNPTFZJTkc6IHRoZSBtZXNoIHBhdGggZGlzY292ZXJ5IHByb2Nlc3MgaXMgcnVubmluZworICogQE5MODAyMTFfTVBBVEhfRkxBR19EU05fVkFMSUQ6IHRoZSBtZXNoIHBhdGggY29udGFpbnMgYSB2YWxpZCBEU04KKyAqIEBOTDgwMjExX01QQVRIX0ZMQUdfRklYRUQ6IHRoZSBtZXNoIHBhdGggaGFzIGJlZW4gbWFudWFsbHkgc2V0CisgKiBATkw4MDIxMV9NUEFUSF9GTEFHX1JFU09MVkVEOiB0aGUgbWVzaCBwYXRoIGRpc2NvdmVyeSBwcm9jZXNzIHN1Y2NlZWRlZAorICovCitlbnVtIG5sODAyMTFfbXBhdGhfZmxhZ3MgeworCU5MODAyMTFfTVBBVEhfRkxBR19BQ1RJVkUgPQkxPDwwLAorCU5MODAyMTFfTVBBVEhfRkxBR19SRVNPTFZJTkcgPQkxPDwxLAorCU5MODAyMTFfTVBBVEhfRkxBR19EU05fVkFMSUQgPQkxPDwyLAorCU5MODAyMTFfTVBBVEhfRkxBR19GSVhFRCA9CTE8PDMsCisJTkw4MDIxMV9NUEFUSF9GTEFHX1JFU09MVkVEID0JMTw8NCwKK307CisKKy8qKgorICogZW51bSBubDgwMjExX21wYXRoX2luZm8gLSBtZXNoIHBhdGggaW5mb3JtYXRpb24KKyAqCisgKiBUaGVzZSBhdHRyaWJ1dGUgdHlwZXMgYXJlIHVzZWQgd2l0aCAlTkw4MDIxMV9BVFRSX01QQVRIX0lORk8gd2hlbiBnZXR0aW5nCisgKiBpbmZvcm1hdGlvbiBhYm91dCBhIG1lc2ggcGF0aC4KKyAqCisgKiBAX19OTDgwMjExX01QQVRIX0lORk9fSU5WQUxJRDogYXR0cmlidXRlIG51bWJlciAwIGlzIHJlc2VydmVkCisgKiBATkw4MDIxMV9BVFRSX01QQVRIX0ZSQU1FX1FMRU46IG51bWJlciBvZiBxdWV1ZWQgZnJhbWVzIGZvciB0aGlzIGRlc3RpbmF0aW9uCisgKiBATkw4MDIxMV9BVFRSX01QQVRIX0RTTjogZGVzdGluYXRpb24gc2VxdWVuY2UgbnVtYmVyCisgKiBATkw4MDIxMV9BVFRSX01QQVRIX01FVFJJQzogbWV0cmljIChjb3N0KSBvZiB0aGlzIG1lc2ggcGF0aAorICogQE5MODAyMTFfQVRUUl9NUEFUSF9FWFBUSU1FOiBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSBwYXRoLCBpbiBtc2VjIGZyb20gbm93CisgKiBATkw4MDIxMV9BVFRSX01QQVRIX0ZMQUdTOiBtZXNoIHBhdGggZmxhZ3MsIGVudW1lcmF0ZWQgaW4KKyAqIAkmZW51bSBubDgwMjExX21wYXRoX2ZsYWdzOworICogQE5MODAyMTFfQVRUUl9NUEFUSF9ESVNDT1ZFUllfVElNRU9VVDogdG90YWwgcGF0aCBkaXNjb3ZlcnkgdGltZW91dCwgaW4gbXNlYworICogQE5MODAyMTFfQVRUUl9NUEFUSF9ESVNDT1ZFUllfUkVUUklFUzogbWVzaCBwYXRoIGRpc2NvdmVyeSByZXRyaWVzCisgKi8KK2VudW0gbmw4MDIxMV9tcGF0aF9pbmZvIHsKKwlfX05MODAyMTFfTVBBVEhfSU5GT19JTlZBTElELAorCU5MODAyMTFfTVBBVEhfSU5GT19GUkFNRV9RTEVOLAorCU5MODAyMTFfTVBBVEhfSU5GT19EU04sCisJTkw4MDIxMV9NUEFUSF9JTkZPX01FVFJJQywKKwlOTDgwMjExX01QQVRIX0lORk9fRVhQVElNRSwKKwlOTDgwMjExX01QQVRIX0lORk9fRkxBR1MsCisJTkw4MDIxMV9NUEFUSF9JTkZPX0RJU0NPVkVSWV9USU1FT1VULAorCU5MODAyMTFfTVBBVEhfSU5GT19ESVNDT1ZFUllfUkVUUklFUywKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9NUEFUSF9JTkZPX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9NUEFUSF9JTkZPX01BWCA9IF9fTkw4MDIxMV9NUEFUSF9JTkZPX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9iYW5kX2F0dHIgLSBiYW5kIGF0dHJpYnV0ZXMKKyAqIEBfX05MODAyMTFfQkFORF9BVFRSX0lOVkFMSUQ6IGF0dHJpYnV0ZSBudW1iZXIgMCBpcyByZXNlcnZlZAorICogQE5MODAyMTFfQkFORF9BVFRSX0ZSRVFTOiBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgaW4gdGhpcyBiYW5kLAorICoJYW4gYXJyYXkgb2YgbmVzdGVkIGZyZXF1ZW5jeSBhdHRyaWJ1dGVzCisgKiBATkw4MDIxMV9CQU5EX0FUVFJfUkFURVM6IHN1cHBvcnRlZCBiaXRyYXRlcyBpbiB0aGlzIGJhbmQsCisgKglhbiBhcnJheSBvZiBuZXN0ZWQgYml0cmF0ZSBhdHRyaWJ1dGVzCisgKi8KK2VudW0gbmw4MDIxMV9iYW5kX2F0dHIgeworCV9fTkw4MDIxMV9CQU5EX0FUVFJfSU5WQUxJRCwKKwlOTDgwMjExX0JBTkRfQVRUUl9GUkVRUywKKwlOTDgwMjExX0JBTkRfQVRUUl9SQVRFUywKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9CQU5EX0FUVFJfQUZURVJfTEFTVCwKKwlOTDgwMjExX0JBTkRfQVRUUl9NQVggPSBfX05MODAyMTFfQkFORF9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9mcmVxdWVuY3lfYXR0ciAtIGZyZXF1ZW5jeSBhdHRyaWJ1dGVzCisgKiBATkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9GUkVROiBGcmVxdWVuY3kgaW4gTUh6CisgKiBATkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9ESVNBQkxFRDogQ2hhbm5lbCBpcyBkaXNhYmxlZCBpbiBjdXJyZW50CisgKglyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1BBU1NJVkVfU0NBTjogT25seSBwYXNzaXZlIHNjYW5uaW5nIGlzCisgKglwZXJtaXR0ZWQgb24gdGhpcyBjaGFubmVsIGluIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uCisgKiBATkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JQlNTOiBJQlNTIG5ldHdvcmtzIGFyZSBub3QgcGVybWl0dGVkCisgKglvbiB0aGlzIGNoYW5uZWwgaW4gY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1JBREFSOiBSYWRhciBkZXRlY3Rpb24gaXMgbWFuZGF0b3J5CisgKglvbiB0aGlzIGNoYW5uZWwgaW4gY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4KKyAqLworZW51bSBubDgwMjExX2ZyZXF1ZW5jeV9hdHRyIHsKKwlfX05MODAyMTFfRlJFUVVFTkNZX0FUVFJfSU5WQUxJRCwKKwlOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0ZSRVEsCisJTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9ESVNBQkxFRCwKKwlOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1BBU1NJVkVfU0NBTiwKKwlOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lCU1MsCisJTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9SQURBUiwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9BRlRFUl9MQVNULAorCU5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYID0gX19OTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9iaXRyYXRlX2F0dHIgLSBiaXRyYXRlIGF0dHJpYnV0ZXMKKyAqIEBOTDgwMjExX0JJVFJBVEVfQVRUUl9SQVRFOiBCaXRyYXRlIGluIHVuaXRzIG9mIDEwMCBrYnBzCisgKiBATkw4MDIxMV9CSVRSQVRFX0FUVFJfMkdIWl9TSE9SVFBSRUFNQkxFOiBTaG9ydCBwcmVhbWJsZSBzdXBwb3J0ZWQKKyAqCWluIDIuNCBHSHogYmFuZC4KKyAqLworZW51bSBubDgwMjExX2JpdHJhdGVfYXR0ciB7CisJX19OTDgwMjExX0JJVFJBVEVfQVRUUl9JTlZBTElELAorCU5MODAyMTFfQklUUkFURV9BVFRSX1JBVEUsCisJTkw4MDIxMV9CSVRSQVRFX0FUVFJfMkdIWl9TSE9SVFBSRUFNQkxFLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX0JJVFJBVEVfQVRUUl9BRlRFUl9MQVNULAorCU5MODAyMTFfQklUUkFURV9BVFRSX01BWCA9IF9fTkw4MDIxMV9CSVRSQVRFX0FUVFJfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX21udHJfZmxhZ3MgLSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gZmxhZ3MKKyAqCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24gZmxhZ3MuCisgKgorICogQF9fTkw4MDIxMV9NTlRSX0ZMQUdfSU5WQUxJRDogcmVzZXJ2ZWQKKyAqCisgKiBATkw4MDIxMV9NTlRSX0ZMQUdfRkNTRkFJTDogcGFzcyBmcmFtZXMgd2l0aCBiYWQgRkNTCisgKiBATkw4MDIxMV9NTlRSX0ZMQUdfUExDUEZBSUw6IHBhc3MgZnJhbWVzIHdpdGggYmFkIFBMQ1AKKyAqIEBOTDgwMjExX01OVFJfRkxBR19DT05UUk9MOiBwYXNzIGNvbnRyb2wgZnJhbWVzCisgKiBATkw4MDIxMV9NTlRSX0ZMQUdfT1RIRVJfQlNTOiBkaXNhYmxlIEJTU0lEIGZpbHRlcmluZworICogQE5MODAyMTFfTU5UUl9GTEFHX0NPT0tfRlJBTUVTOiByZXBvcnQgZnJhbWVzIGFmdGVyIHByb2Nlc3NpbmcuCisgKglvdmVycmlkZXMgYWxsIG90aGVyIGZsYWdzLgorICoKKyAqIEBfX05MODAyMTFfTU5UUl9GTEFHX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQorICogQE5MODAyMTFfTU5UUl9GTEFHX01BWDogaGlnaGVzdCBwb3NzaWJsZSBtb25pdG9yIGZsYWcKKyAqLworZW51bSBubDgwMjExX21udHJfZmxhZ3MgeworCV9fTkw4MDIxMV9NTlRSX0ZMQUdfSU5WQUxJRCwKKwlOTDgwMjExX01OVFJfRkxBR19GQ1NGQUlMLAorCU5MODAyMTFfTU5UUl9GTEFHX1BMQ1BGQUlMLAorCU5MODAyMTFfTU5UUl9GTEFHX0NPTlRST0wsCisJTkw4MDIxMV9NTlRSX0ZMQUdfT1RIRVJfQlNTLAorCU5MODAyMTFfTU5UUl9GTEFHX0NPT0tfRlJBTUVTLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX01OVFJfRkxBR19BRlRFUl9MQVNULAorCU5MODAyMTFfTU5UUl9GTEFHX01BWCA9IF9fTkw4MDIxMV9NTlRSX0ZMQUdfQUZURVJfTEFTVCAtIDEKIH07CiAKICNlbmRpZiAvKiBfX0xJTlVYX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZi5oIGIvaW5jbHVkZS9saW51eC9vZi5oCmluZGV4IDY5ODEwMTYuLjU5YTYxYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2YuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mLmgKQEAgLTYyLDYgKzYyLDcgQEAKIAkJCQkJIGludCAqbGVucCk7CiBleHRlcm4gaW50IG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLAogCQkJCSAgIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IG9mX2RldmljZV9pc19hdmFpbGFibGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpOwogZXh0ZXJuIGNvbnN0IHZvaWQgKm9mX2dldF9wcm9wZXJ0eShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCQkJY29uc3QgY2hhciAqbmFtZSwKIAkJCQlpbnQgKmxlbnApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L29mX2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWU5N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9vZl9ncGlvLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIE9GIGhlbHBlcnMgZm9yIHRoZSBHUElPIEFQSQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4ICBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQXV0aG9yOiBBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9PRl9HUElPX0gKKyNkZWZpbmUgX19MSU5VWF9PRl9HUElPX0gKKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKworI2lmZGVmIENPTkZJR19PRl9HUElPCisKKy8qCisgKiBHZW5lcmljIE9GIEdQSU8gY2hpcAorICovCitzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdjOworCWludCBncGlvX2NlbGxzOworCWludCAoKnhsYXRlKShzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYywgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJICAgICBjb25zdCB2b2lkICpncGlvX3NwZWMpOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICp0b19vZl9ncGlvX2NoaXAoc3RydWN0IGdwaW9fY2hpcCAqZ2MpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG9mX2dwaW9fY2hpcCwgZ2MpOworfQorCisvKgorICogT0YgR1BJTyBjaGlwIGZvciBtZW1vcnkgbWFwcGVkIGJhbmtzCisgKi8KK3N0cnVjdCBvZl9tbV9ncGlvX2NoaXAgeworCXN0cnVjdCBvZl9ncGlvX2NoaXAgb2ZfZ2M7CisJdm9pZCAoKnNhdmVfcmVncykoc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MpOworCXZvaWQgX19pb21lbSAqcmVnczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqdG9fb2ZfbW1fZ3Bpb19jaGlwKHN0cnVjdCBncGlvX2NoaXAgKmdjKQoreworCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gdG9fb2ZfZ3Bpb19jaGlwKGdjKTsKKworCXJldHVybiBjb250YWluZXJfb2Yob2ZfZ2MsIHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAsIG9mX2djKTsKK30KKworZXh0ZXJuIGludCBvZl9nZXRfZ3BpbyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaW5kZXgpOworZXh0ZXJuIGludCBvZl9tbV9ncGlvY2hpcF9hZGQoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCSAgICAgIHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djKTsKK2V4dGVybiBpbnQgb2ZfZ3Bpb19zaW1wbGVfeGxhdGUoc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MsCisJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQljb25zdCB2b2lkICpncGlvX3NwZWMpOworI2Vsc2UKKworLyogRHJpdmVycyBtYXkgbm90IHN0cmljdGx5IGRlcGVuZCBvbiB0aGUgR1BJTyBzdXBwb3J0LCBzbyBsZXQgdGhlbSBsaW5rLiAqLworc3RhdGljIGlubGluZSBpbnQgb2ZfZ2V0X2dwaW8oc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4KQoreworCXJldHVybiAtRU5PU1lTOworfQorCisjZW5kaWYgLyogQ09ORklHX09GX0dQSU8gKi8KKworI2VuZGlmIC8qIF9fTElOVVhfT0ZfR1BJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2kyYy5oIGIvaW5jbHVkZS9saW51eC9vZl9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTVhOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9vZl9pMmMuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogR2VuZXJpYyBJMkMgQVBJIGltcGxlbWVudGF0aW9uIGZvciBQb3dlclBDLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBKb2NoZW4gRnJpZWRyaWNoIDxqb2NoZW5Ac2NyYW0uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfT0ZfSTJDX0gKKyNkZWZpbmUgX19MSU5VWF9PRl9JMkNfSAorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpZmRlZiBDT05GSUdfT0ZfSTJDCisKK3ZvaWQgb2ZfcmVnaXN0ZXJfaTJjX2RldmljZXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFkYXBfbm9kZSk7CisKKyNlbmRpZiAvKiBDT05GSUdfT0ZfSTJDICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX09GX0kyQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IGJiYWQ0M2YuLmI1YjMwZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC0yNjYsNyArMjY2LDcgQEAKIAogI2RlZmluZSBQR19oZWFkX3RhaWxfbWFzayAoKDFMIDw8IFBHX2NvbXBvdW5kKSB8ICgxTCA8PCBQR19yZWNsYWltKSkKIAotI2RlZmluZSBQYWdlVGFpbChwYWdlKQkoKHBhZ2UtPmZsYWdzICYgUEdfaGVhZF90YWlsX21hc2spIFwKKyNkZWZpbmUgUGFnZVRhaWwocGFnZSkJKCgocGFnZSktPmZsYWdzICYgUEdfaGVhZF90YWlsX21hc2spCVwKIAkJCQk9PSBQR19oZWFkX3RhaWxfbWFzaykKIAogc3RhdGljIGlubGluZSB2b2lkIF9fU2V0UGFnZVRhaWwoc3RydWN0IHBhZ2UgKnBhZ2UpCkBAIC0yNzksNyArMjc5LDcgQEAKIAlwYWdlLT5mbGFncyAmPSB+UEdfaGVhZF90YWlsX21hc2s7CiB9CiAKLSNkZWZpbmUgUGFnZUhlYWQocGFnZSkJKChwYWdlLT5mbGFncyAmIFBHX2hlYWRfdGFpbF9tYXNrKSBcCisjZGVmaW5lIFBhZ2VIZWFkKHBhZ2UpCSgoKHBhZ2UpLT5mbGFncyAmIFBHX2hlYWRfdGFpbF9tYXNrKQlcCiAJCQkJPT0gKDFMIDw8IFBHX2NvbXBvdW5kKSkKICNkZWZpbmUgX19TZXRQYWdlSGVhZChwYWdlKQlfX1NldFBhZ2VDb21wb3VuZChwYWdlKQogI2RlZmluZSBfX0NsZWFyUGFnZUhlYWQocGFnZSkJX19DbGVhclBhZ2VDb21wb3VuZChwYWdlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYXJwb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAppbmRleCBkMWFkNTQ2Li5kY2I5ZTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaApAQCAtMTAxLDkgKzEwMSw5IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKIC8qIERlZmluZSB0aGlzIGxhdGVyLiAqLwogc3RydWN0IHBhcnBvcnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1hc3BtLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1hc3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhMWU2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLWFzcG0uaApAQCAtMCwwICsxLDU2IEBACisvKgorICoJYXNwbS5oCisgKgorICoJUENJIEV4cHJlc3MgQVNQTSBkZWZpbmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDA3IEludGVsIENvcnAuCisgKgkJWmhhbmcgWWFubWluICh5YW5taW4uemhhbmdAaW50ZWwuY29tKQorICoJCVNoYW9odWEgTGkgKHNoYW9odWEubGlAaW50ZWwuY29tKQorICoKKyAqCUZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCB0aGUgZm9sbG93aW5nIG1hbnVhbHMgKGxvb2sgYXQKKyAqCWh0dHA6Ly93d3cucGNpc2lnLmNvbS8gZm9yIGhvdyB0byBnZXQgdGhlbSk6CisgKgorICoJUENJIEV4cHJlc3MgU3BlY2lmaWNhdGlvbgorICovCisKKyNpZm5kZWYgTElOVVhfQVNQTV9ICisjZGVmaW5lIExJTlVYX0FTUE1fSAorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNkZWZpbmUgUENJRV9MSU5LX1NUQVRFX0wwUwkxCisjZGVmaW5lIFBDSUVfTElOS19TVEFURV9MMQkyCisjZGVmaW5lIFBDSUVfTElOS19TVEFURV9DTEtQTQk0CisKKyNpZmRlZiBDT05GSUdfUENJRUFTUE0KK2V4dGVybiB2b2lkIHBjaWVfYXNwbV9pbml0X2xpbmtfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworZXh0ZXJuIHZvaWQgcGNpZV9hc3BtX2V4aXRfbGlua19zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitleHRlcm4gdm9pZCBwY2llX2FzcG1fcG1fc3RhdGVfY2hhbmdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2V4dGVybiB2b2lkIHBjaV9kaXNhYmxlX2xpbmtfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBzdGF0ZSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBjaWVfYXNwbV9pbml0X2xpbmtfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9hc3BtX2V4aXRfbGlua19zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2FzcG1fcG1fc3RhdGVfY2hhbmdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX2xpbmtfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBzdGF0ZSkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSUVBU1BNX0RFQlVHIC8qIHRoaXMgZGVwZW5kcyBvbiBDT05GSUdfUENJRUFTUE0gKi8KK2V4dGVybiB2b2lkIHBjaWVfYXNwbV9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2V4dGVybiB2b2lkIHBjaWVfYXNwbV9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9hc3BtX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9hc3BtX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBMSU5VWF9BU1BNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDg3MTk1YjYuLjI5MjQ5MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMjAsNiArMjAsOCBAQAogLyogSW5jbHVkZSB0aGUgcGNpIHJlZ2lzdGVyIGRlZmluZXMgKi8KICNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgogCitzdHJ1Y3QgcGNpX3ZwZDsKKwogLyoKICAqIFRoZSBQQ0kgaW50ZXJmYWNlIHRyZWF0cyBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzIGFzIGluZGVwZW5kZW50CiAgKiBkZXZpY2VzLiAgVGhlIHNsb3QvZnVuY3Rpb24gYWRkcmVzcyBvZiBlYWNoIGRldmljZSBpcyBlbmNvZGVkCkBAIC0xMjgsMTEgKzEzMCwxMSBAQAogCXUzMiBkYXRhWzBdOwogfTsKIAorc3RydWN0IHBjaWVfbGlua19zdGF0ZTsKIC8qCiAgKiBUaGUgcGNpX2RldiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZXNjcmliZSBQQ0kgZGV2aWNlcy4KICAqLwogc3RydWN0IHBjaV9kZXYgewotCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX2xpc3Q7CS8qIG5vZGUgaW4gbGlzdCBvZiBhbGwgUENJIGRldmljZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1c19saXN0OwkvKiBub2RlIGluIHBlci1idXMgbGlzdCAqLwogCXN0cnVjdCBwY2lfYnVzCSpidXM7CQkvKiBidXMgdGhpcyBkZXZpY2UgaXMgb24gKi8KIAlzdHJ1Y3QgcGNpX2J1cwkqc3Vib3JkaW5hdGU7CS8qIGJ1cyB0aGlzIGRldmljZSBicmlkZ2VzIHRvICovCkBAIC0xNjUsNiArMTY3LDEwIEBACiAJCQkJCSAgIHRoaXMgaXMgRDAtRDMsIEQwIGJlaW5nIGZ1bGx5IGZ1bmN0aW9uYWwsCiAJCQkJCSAgIGFuZCBEMyBiZWluZyBvZmYuICovCiAKKyNpZmRlZiBDT05GSUdfUENJRUFTUE0KKwlzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlCSpsaW5rX3N0YXRlOwkvKiBBU1BNIGxpbmsgc3RhdGUuICovCisjZW5kaWYKKwogCXBjaV9jaGFubmVsX3N0YXRlX3QgZXJyb3Jfc3RhdGU7CS8qIGN1cnJlbnQgY29ubmVjdGl2aXR5IHN0YXRlICovCiAJc3RydWN0CWRldmljZQlkZXY7CQkvKiBHZW5lcmljIGRldmljZSBpbnRlcmZhY2UgKi8KIApAQCAtMTgxLDYgKzE4Nyw3IEBACiAJdW5zaWduZWQgaW50CXRyYW5zcGFyZW50OjE7CS8qIFRyYW5zcGFyZW50IFBDSSBicmlkZ2UgKi8KIAl1bnNpZ25lZCBpbnQJbXVsdGlmdW5jdGlvbjoxOy8qIFBhcnQgb2YgbXVsdGktZnVuY3Rpb24gZGV2aWNlICovCiAJLyoga2VlcCB0cmFjayBvZiBkZXZpY2Ugc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQJaXNfYWRkZWQ6MTsKIAl1bnNpZ25lZCBpbnQJaXNfYnVzbWFzdGVyOjE7IC8qIGRldmljZSBpcyBidXNtYXN0ZXIgKi8KIAl1bnNpZ25lZCBpbnQJbm9fbXNpOjE7CS8qIGRldmljZSBtYXkgbm90IHVzZSBtc2kgKi8KIAl1bnNpZ25lZCBpbnQJbm9fZDFkMjoxOyAgIC8qIG9ubHkgYWxsb3cgZDAgb3IgZDMgKi8KQEAgLTIwMSwxMSArMjA4LDExIEBACiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1zaV9saXN0OwogI2VuZGlmCisJc3RydWN0IHBjaV92cGQgKnZwZDsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGNpX2RldiAqYWxsb2NfcGNpX2Rldih2b2lkKTsKIAotI2RlZmluZSBwY2lfZGV2X2cobikgbGlzdF9lbnRyeShuLCBzdHJ1Y3QgcGNpX2RldiwgZ2xvYmFsX2xpc3QpCiAjZGVmaW5lIHBjaV9kZXZfYihuKSBsaXN0X2VudHJ5KG4sIHN0cnVjdCBwY2lfZGV2LCBidXNfbGlzdCkKICNkZWZpbmUJdG9fcGNpX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjaV9kZXYsIGRldikKICNkZWZpbmUgZm9yX2VhY2hfcGNpX2RldihkKSB3aGlsZSAoKGQgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkKSkgIT0gTlVMTCkKQEAgLTI3OCw2ICsyODUsNyBAQAogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQkqbGVnYWN5X2lvOyAvKiBsZWdhY3kgSS9PIGZvciB0aGlzIGJ1cyAqLwogCXN0cnVjdCBiaW5fYXR0cmlidXRlCSpsZWdhY3lfbWVtOyAvKiBsZWdhY3kgbWVtICovCisJdW5zaWduZWQgaW50CQlpc19hZGRlZDoxOwogfTsKIAogI2RlZmluZSBwY2lfYnVzX2IobikJbGlzdF9lbnRyeShuLCBzdHJ1Y3QgcGNpX2J1cywgbm9kZSkKQEAgLTM4OSw2ICszOTcsMTYgQEAKICNkZWZpbmUJdG9fcGNpX2RyaXZlcihkcnYpIGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBwY2lfZHJpdmVyLCBkcml2ZXIpCiAKIC8qKgorICogREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUgLSBtYWNybyB1c2VkIHRvIGRlc2NyaWJlIGEgcGNpIGRldmljZSB0YWJsZQorICogQF90YWJsZTogZGV2aWNlIHRhYmxlIG5hbWUKKyAqCisgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gY3JlYXRlIGEgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXJyYXkgKGEgZGV2aWNlIHRhYmxlKQorICogaW4gYSBnZW5lcmljIG1hbm5lci4KKyAqLworI2RlZmluZSBERUZJTkVfUENJX0RFVklDRV9UQUJMRShfdGFibGUpIFwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfdGFibGVbXSBfX2RldmluaXRjb25zdAorCisvKioKICAqIFBDSV9ERVZJQ0UgLSBtYWNybyB1c2VkIHRvIGRlc2NyaWJlIGEgc3BlY2lmaWMgcGNpIGRldmljZQogICogQHZlbmQ6IHRoZSAxNiBiaXQgUENJIFZlbmRvciBJRAogICogQGRldjogdGhlIDE2IGJpdCBQQ0kgRGV2aWNlIElECkBAIC00MzgsNyArNDU2LDYgQEAKIC8qIERvIE5PVCBkaXJlY3RseSBhY2Nlc3MgdGhlc2UgdHdvIHZhcmlhYmxlcywgdW5sZXNzIHlvdSBhcmUgYXJjaCBzcGVjaWZpYyBwY2kKICAqIGNvZGUsIG9yIHBjaSBjb3JlIGNvZGUuICovCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwY2lfcm9vdF9idXNlczsJLyogbGlzdCBvZiBhbGwga25vd24gUENJIGJ1c2VzICovCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwY2lfZGV2aWNlczsJLyogbGlzdCBvZiBhbGwgZGV2aWNlcyAqLwogLyogU29tZSBkZXZpY2UgZHJpdmVycyBuZWVkIGtub3cgaWYgcGNpIGlzIGluaXRpYXRlZCAqLwogZXh0ZXJuIGludCBub19wY2lfZGV2aWNlcyh2b2lkKTsKIApAQCAtNTAyLDIyICs1MTksMTcgQEAKIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKTsKIGludCBwY2lfZmluZF9odF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBodF9jYXApOwogaW50IHBjaV9maW5kX25leHRfaHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgaHRfY2FwKTsKLXZvaWQgcGNpZV93YWl0X3BlbmRpbmdfdHJhbnNhY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2ZpbmRfbmV4dF9idXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmZyb20pOwogCiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKIAkJCQlzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7Ci1zdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2VfcmV2ZXJzZSh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCQkJCXN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKLQogc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfc3Vic3lzKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsCiAJCQkJdW5zaWduZWQgaW50IHNzX3ZlbmRvciwgdW5zaWduZWQgaW50IHNzX2RldmljZSwKLQkJCQlzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pOwogc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfc2xvdChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pOwogc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfYnVzX2FuZF9zbG90KHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbik7CiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9jbGFzcyh1bnNpZ25lZCBpbnQgY2xhc3MsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKIGludCBwY2lfZGV2X3ByZXNlbnQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcyk7Ci1jb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2ZpbmRfcHJlc2VudChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzKTsKIAogaW50IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCiAJCQkgICAgIGludCB3aGVyZSwgdTggKnZhbCk7CkBAIC01OTEsNyArNjAzLDYgQEAKIGludCBwY2llX3NldF9yZWFkcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJxKTsKIHZvaWQgcGNpX3VwZGF0ZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc25vKTsKIGludCBfX211c3RfY2hlY2sgcGNpX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSk7Ci1pbnQgX19tdXN0X2NoZWNrIHBjaV9hc3NpZ25fcmVzb3VyY2VfZml4ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGkpOwogaW50IHBjaV9zZWxlY3RfYmFycyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAogLyogUk9NIGNvbnRyb2wgcmVsYXRlZCByb3V0aW5lcyAqLwpAQCAtNjE2LDYgKzYyNyw3IEBACiB2b2lkIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXModm9pZCk7CiB2b2lkIHBkZXZfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKIHZvaWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqKTsKK2ludCBwY2lfZW5hYmxlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgbWFzayk7CiB2b2lkIHBjaV9maXh1cF9pcnFzKHU4ICgqKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCAqKSwKIAkJICAgIGludCAoKikoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSk7CiAjZGVmaW5lIEhBVkVfUENJX1JFUV9SRUdJT05TCTIKQEAgLTc4MywxOCArNzk1LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfZGV2aWNlX3JldmVyc2UodW5zaWduZWQgaW50IHZlbmRvciwKLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfc3Vic3lzKHVuc2lnbmVkIGludCB2ZW5kb3IsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGRldmljZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgc3NfdmVuZG9yLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBzc19kZXZpY2UsCi0JCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC04MDcsNyArODEyLDYgQEAKIAogI2RlZmluZSBwY2lfZGV2X3ByZXNlbnQoaWRzKQkoMCkKICNkZWZpbmUgbm9fcGNpX2RldmljZXMoKQkoMSkKLSNkZWZpbmUgcGNpX2ZpbmRfcHJlc2VudChpZHMpCShOVUxMKQogI2RlZmluZSBwY2lfZGV2X3B1dChkZXYpCWRvIHsgfSB3aGlsZSAoMCkKIAogc3RhdGljIGlubGluZSB2b2lkIHBjaV9zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC04NzMsOSArODc3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBjaWVfd2FpdF9wZW5kaW5nX3RyYW5zYWN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17IH0KLQogLyogUG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHJvdXRpbmVzICovCiBzdGF0aWMgaW5saW5lIGludCBwY2lfc2F2ZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtMTAzNCw2ICsxMDM1LDggQEAKIHZvaWQgcGNpbV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIpOwogdm9pZCBfX2lvbWVtICogY29uc3QgKnBjaW1faW9tYXBfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogaW50IHBjaW1faW9tYXBfcmVnaW9ucyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG1hc2ssIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHBjaW1faW9tYXBfcmVnaW9uc19yZXF1ZXN0X2FsbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG1hc2ssCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIHBjaW1faW91bm1hcF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbWFzayk7CiAKIGV4dGVybiBpbnQgcGNpX3BjaV9wcm9ibGVtczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggZGY2ZGQ3OWEuLjcwZWIzYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xMzUxLDYgKzEzNTEsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMxXzQJMHg4MjM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjVfMQkweDgzMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfQ1g3MDAJCTB4ODMyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMF9JREUJMHgwNTgxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1ZYODAwCQkweDgzNTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM3MV8xCTB4ODM5MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMQkweDg1OTgKQEAgLTIxODMsNiArMjE4NCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjYJMHgyMzY2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjgJMHgyMzY4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzOFhfU0QJMHgyMzgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzOFhfTVMJMHgyMzgzCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9LT1JFTklYCQkweDE5ODIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMAkweDE2MDAKQEAgLTIzNzMsNiArMjM3NSwxMiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQzEJMHgzNTlhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTc1MjVfTUNICTB4MzU5ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfQ05CCTB4MzYwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzAJMHgzYTE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMQkweDNhMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF8yCTB4M2ExOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzMJMHgzYTFhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfNAkweDNhMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF81CTB4M2E2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CCTB4NDAyZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU0NOQgkweDY1ZmYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9UT0xBUEFJXzAJMHg1MDMxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKaW5kZXggYzE5MTRhOC4uYzBjMTIyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaApAQCAtMzk1LDkgKzM5NSwxNyBAQAogI2RlZmluZSAgUENJX0VYUF9ERVZTVEFfQVVYUEQJMHgxMAkvKiBBVVggUG93ZXIgRGV0ZWN0ZWQgKi8KICNkZWZpbmUgIFBDSV9FWFBfREVWU1RBX1RSUE5ECTB4MjAJLyogVHJhbnNhY3Rpb25zIFBlbmRpbmcgKi8KICNkZWZpbmUgUENJX0VYUF9MTktDQVAJCTEyCS8qIExpbmsgQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9BU1BNUwkweGMwMAkvKiBBU1BNIFN1cHBvcnQgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0wwU0VMCTB4NzAwMAkvKiBMMHMgRXhpdCBMYXRlbmN5ICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9MMUVMCTB4MzgwMDAJLyogTDEgRXhpdCBMYXRlbmN5ICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9DTEtQTQkweDQwMDAwCS8qIEwxIENsb2NrIFBvd2VyIE1hbmFnZW1lbnQgKi8KICNkZWZpbmUgUENJX0VYUF9MTktDVEwJCTE2CS8qIExpbmsgQ29udHJvbCAqLworI2RlZmluZSAgUENJX0VYUF9MTktDVExfUkwJMHgyMAkvKiBSZXRyYWluIExpbmsgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LQ1RMX0NDQwkweDQwCS8qIENvbW1vbiBDbG9jayBDT25maWd1cmF0aW9uICovCiAjZGVmaW5lICBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4gMHgxMDAJLyogRW5hYmxlIGNsa3JlcSAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQQkJMTgJLyogTGluayBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LU1RBX0xUCTB4ODAwCS8qIExpbmsgVHJhaW5pbmcgKi8KKyNkZWZpbmUgIFBDSV9FWFBfTE5LU1RBX1NMQwkweDEwMDAJLyogU2xvdCBDbG9jayBDb25maWd1cmF0aW9uICovCiAjZGVmaW5lIFBDSV9FWFBfU0xUQ0FQCQkyMAkvKiBTbG90IENhcGFiaWxpdGllcyAqLwogI2RlZmluZSBQQ0lfRVhQX1NMVENUTAkJMjQJLyogU2xvdCBDb250cm9sICovCiAjZGVmaW5lIFBDSV9FWFBfU0xUU1RBCQkyNgkvKiBTbG90IFN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wY291bnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODJkOWYyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcGNvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLSNpZm5kZWYgX19MSU5VWF9QQ09VTlRFUl9ICi0jZGVmaW5lIF9fTElOVVhfUENPVU5URVJfSAotLyoKLSAqIFVzaW5nIGEgZHluYW1pYyBwZXJjcHUgJ2ludCcgdmFyaWFibGUgaGFzIGEgY29zdCA6Ci0gKiAxKSBFeHRyYSBkZXJlZmVyZW5jZQotICogQ3VycmVudCBwZXJfY3B1X3B0cigpIGltcGxlbWVudGF0aW9uIHVzZXMgYW4gYXJyYXkgcGVyICdwZXJjcHUgdmFyaWFibGUnLgotICogMikgbWVtb3J5IGNvc3Qgb2YgTlJfQ1BVUyooMzIrc2l6ZW9mKHZvaWQgKikpIGluc3RlYWQgb2YgbnVtX3Bvc3NpYmxlX2NwdXMoKSo0Ci0gKgotICogVGhpcyBwY291bnRlciBpbXBsZW1lbnRhdGlvbiBpcyBhbiBhYnN0cmFjdGlvbiB0byBiZSBhYmxlIHRvIHVzZQotICogZWl0aGVyIGEgc3RhdGljIG9yIGEgZHluYW1pYyBwZXIgY3B1IHZhcmlhYmxlLgotICogT25lIGR5bmFtaWMgcGVyIGNwdSB2YXJpYWJsZSBnZXRzIGEgZmFzdCAmIGNoZWFwIGltcGxlbWVudGF0aW9uLCB3ZSBjYW4KLSAqIGNoYW5nZSBwY291bnRlciBpbXBsZW1lbnRhdGlvbiB0b28uCi0gKi8KLXN0cnVjdCBwY291bnRlciB7Ci0jaWZkZWYgQ09ORklHX1NNUAotCXZvaWQJCSgqYWRkKShzdHJ1Y3QgcGNvdW50ZXIgKnNlbGYsIGludCBpbmMpOwotCWludAkJKCpnZXR2YWwpKGNvbnN0IHN0cnVjdCBwY291bnRlciAqc2VsZiwgaW50IGNwdSk7Ci0JaW50CQkqcGVyX2NwdV92YWx1ZXM7Ci0jZWxzZQotCWludAkJdmFsOwotI2VuZGlmCi19OwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCi0jZGVmaW5lIERFRklORV9QQ09VTlRFUihOQU1FKQkJCQkJCVwKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIE5BTUUjI19wY291bnRlcl92YWx1ZXMpOwkJCVwKLXN0YXRpYyB2b2lkIE5BTUUjI19wY291bnRlcl9hZGQoc3RydWN0IHBjb3VudGVyICpzZWxmLCBpbnQgdmFsKQkJXAotewkJCQkJCQkJCVwKLSAgICAgICBfX2dldF9jcHVfdmFyKE5BTUUjI19wY291bnRlcl92YWx1ZXMpICs9IHZhbDsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIGludCBOQU1FIyNfcGNvdW50ZXJfZ2V0dmFsKGNvbnN0IHN0cnVjdCBwY291bnRlciAqc2VsZiwgaW50IGNwdSkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gcGVyX2NwdShOQU1FIyNfcGNvdW50ZXJfdmFsdWVzLCBjcHUpOwkJCVwKLX0JCQkJCQkJCQlcCi0KLSNkZWZpbmUgUENPVU5URVJfTUVNQkVSX0lOSVRJQUxJWkVSKE5BTUUsIE1FTUJFUikJCVwKLQlNRU1CRVIgPSB7CQkJCQkJXAotCQkuYWRkCT0gTkFNRSMjX3Bjb3VudGVyX2FkZCwJCQlcCi0JCS5nZXR2YWwgPSBOQU1FIyNfcGNvdW50ZXJfZ2V0dmFsLAkJXAotCX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNvdW50ZXJfYWRkKHN0cnVjdCBwY291bnRlciAqc2VsZiwgaW50IGluYykKLXsKLQlzZWxmLT5hZGQoc2VsZiwgaW5jKTsKLX0KLQotZXh0ZXJuIGludCBwY291bnRlcl9nZXR2YWwoY29uc3Qgc3RydWN0IHBjb3VudGVyICpzZWxmKTsKLWV4dGVybiBpbnQgcGNvdW50ZXJfYWxsb2Moc3RydWN0IHBjb3VudGVyICpzZWxmKTsKLWV4dGVybiB2b2lkIHBjb3VudGVyX2ZyZWUoc3RydWN0IHBjb3VudGVyICpzZWxmKTsKLQotCi0jZWxzZSAvKiBDT05GSUdfU01QICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY291bnRlcl9hZGQoc3RydWN0IHBjb3VudGVyICpzZWxmLCBpbnQgaW5jKQotewotCXNlbGYtPnZhbCArPSBpbmM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBjb3VudGVyX2dldHZhbChjb25zdCBzdHJ1Y3QgcGNvdW50ZXIgKnNlbGYpCi17Ci0JcmV0dXJuIHNlbGYtPnZhbDsKLX0KLQotI2RlZmluZSBERUZJTkVfUENPVU5URVIoTkFNRSkKLSNkZWZpbmUgUENPVU5URVJfTUVNQkVSX0lOSVRJQUxJWkVSKE5BTUUsIE1FTUJFUikKLSNkZWZpbmUgcGNvdW50ZXJfYWxsb2Moc2VsZikgMAotI2RlZmluZSBwY291bnRlcl9mcmVlKHNlbGYpCi0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLSNlbmRpZiAvKiBfX0xJTlVYX1BDT1VOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDVlNDNhZTcuLjc3OWNiY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMzksNyArMzksOCBAQAogCQkJCSBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfCBcCiAJCQkJIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkKIAotLyogU2V0IHBoeWRldi0+aXJxIHRvIFBIWV9QT0xMIGlmIGludGVycnVwdHMgYXJlIG5vdCBzdXBwb3J0ZWQsCisvKgorICogU2V0IHBoeWRldi0+aXJxIHRvIFBIWV9QT0xMIGlmIGludGVycnVwdHMgYXJlIG5vdCBzdXBwb3J0ZWQsCiAgKiBvciBub3QgZGVzaXJlZCBmb3IgdGhpcyBQSFkuICBTZXQgdG8gUEhZX0lHTk9SRV9JTlRFUlJVUFQgaWYKICAqIHRoZSBhdHRhY2hlZCBkcml2ZXIgaGFuZGxlcyB0aGUgaW50ZXJydXB0CiAgKi8KQEAgLTYzLDggKzY0LDYgQEAKIAlQSFlfSU5URVJGQUNFX01PREVfUlRCSQogfSBwaHlfaW50ZXJmYWNlX3Q7CiAKLSNkZWZpbmUgTUlJX0JVU19NQVggNAotCiAKICNkZWZpbmUgUEhZX0lOSVRfVElNRU9VVAkxMDAwMDAKICNkZWZpbmUgUEhZX1NUQVRFX1RJTUUJCTEKQEAgLTc0LDIwICs3MywzMCBAQAogI2RlZmluZSBQSFlfTUFYX0FERFIJMzIKIAogLyogVXNlZCB3aGVuIHRyeWluZyB0byBjb25uZWN0IHRvIGEgc3BlY2lmaWMgcGh5IChtaWkgYnVzIGlkOnBoeSBkZXZpY2UgaWQpICovCi0jZGVmaW5lIFBIWV9JRF9GTVQgIiV4OiUwMngiCisjZGVmaW5lIFBIWV9JRF9GTVQgIiVzOiUwMngiCiAKLS8qIFRoZSBCdXMgY2xhc3MgZm9yIFBIWXMuICBEZXZpY2VzIHdoaWNoIHByb3ZpZGUgYWNjZXNzIHRvCi0gKiBQSFlzIHNob3VsZCByZWdpc3RlciB1c2luZyB0aGlzIHN0cnVjdHVyZSAqLworLyoKKyAqIE5lZWQgdG8gYmUgYSBsaXR0bGUgc21hbGxlciB0aGFuIHBoeWRldi0+ZGV2LmJ1c19pZCB0byBsZWF2ZSByb29tCisgKiBmb3IgdGhlICI6JTAyeCIKKyAqLworI2RlZmluZSBNSUlfQlVTX0lEX1NJWkUJKEJVU19JRF9TSVpFIC0gMykKKworLyoKKyAqIFRoZSBCdXMgY2xhc3MgZm9yIFBIWXMuICBEZXZpY2VzIHdoaWNoIHByb3ZpZGUgYWNjZXNzIHRvCisgKiBQSFlzIHNob3VsZCByZWdpc3RlciB1c2luZyB0aGlzIHN0cnVjdHVyZQorICovCiBzdHJ1Y3QgbWlpX2J1cyB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgaWQ7CisJY2hhciBpZFtNSUlfQlVTX0lEX1NJWkVdOwogCXZvaWQgKnByaXY7CiAJaW50ICgqcmVhZCkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSk7CiAJaW50ICgqd3JpdGUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNiB2YWwpOwogCWludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTsKIAotCS8qIEEgbG9jayB0byBlbnN1cmUgdGhhdCBvbmx5IG9uZSB0aGluZyBjYW4gcmVhZC93cml0ZQotCSAqIHRoZSBNRElPIGJ1cyBhdCBhIHRpbWUgKi8KKwkvKgorCSAqIEEgbG9jayB0byBlbnN1cmUgdGhhdCBvbmx5IG9uZSB0aGluZyBjYW4gcmVhZC93cml0ZQorCSAqIHRoZSBNRElPIGJ1cyBhdCBhIHRpbWUKKwkgKi8KIAlzdHJ1Y3QgbXV0ZXggbWRpb19sb2NrOwogCiAJc3RydWN0IGRldmljZSAqZGV2OwpAQCAtOTgsOCArMTA3LDEwIEBACiAJLyogUGh5IGFkZHJlc3NlcyB0byBiZSBpZ25vcmVkIHdoZW4gcHJvYmluZyAqLwogCXUzMiBwaHlfbWFzazsKIAotCS8qIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgaW50ZXJydXB0cywgZWFjaCBQSFkncwotCSAqIGludGVycnVwdCBhdCB0aGUgaW5kZXggbWF0Y2hpbmcgaXRzIGFkZHJlc3MgKi8KKwkvKgorCSAqIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgaW50ZXJydXB0cywgZWFjaCBQSFkncworCSAqIGludGVycnVwdCBhdCB0aGUgaW5kZXggbWF0Y2hpbmcgaXRzIGFkZHJlc3MKKwkgKi8KIAlpbnQgKmlycTsKIH07CiAKQEAgLTI1MSw3ICsyNjIsOCBAQAogCS8qIEJ1cyBhZGRyZXNzIG9mIHRoZSBQSFkgKDAtMzIpICovCiAJaW50IGFkZHI7CiAKLQkvKiBmb3JjZWQgc3BlZWQgJiBkdXBsZXggKG5vIGF1dG9uZWcpCisJLyoKKwkgKiBmb3JjZWQgc3BlZWQgJiBkdXBsZXggKG5vIGF1dG9uZWcpCiAJICogcGFydG5lciBzcGVlZCAmIGR1cGxleCAmIHBhdXNlIChhdXRvbmVnKQogCSAqLwogCWludCBzcGVlZDsKQEAgLTI3NCw4ICsyODYsMTAgQEAKIAogCWludCBsaW5rX3RpbWVvdXQ7CiAKLQkvKiBJbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGlzIFBIWQotCSAqIC0xIG1lYW5zIG5vIGludGVycnVwdCAqLworCS8qCisJICogSW50ZXJydXB0IG51bWJlciBmb3IgdGhpcyBQSFkKKwkgKiAtMSBtZWFucyBubyBpbnRlcnJ1cHQKKwkgKi8KIAlpbnQgaXJxOwogCiAJLyogcHJpdmF0ZSBkYXRhIHBvaW50ZXIgKi8KQEAgLTMyNSwyMiArMzM5LDI4IEBACiAJdTMyIGZlYXR1cmVzOwogCXUzMiBmbGFnczsKIAotCS8qIENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFksCi0JICogaW5jbHVkaW5nIGFmdGVyIGEgcmVzZXQgKi8KKwkvKgorCSAqIENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFksCisJICogaW5jbHVkaW5nIGFmdGVyIGEgcmVzZXQKKwkgKi8KIAlpbnQgKCpjb25maWdfaW5pdCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKLQkvKiBDYWxsZWQgZHVyaW5nIGRpc2NvdmVyeS4gIFVzZWQgdG8gc2V0Ci0JICogdXAgZGV2aWNlLXNwZWNpZmljIHN0cnVjdHVyZXMsIGlmIGFueSAqLworCS8qCisJICogQ2FsbGVkIGR1cmluZyBkaXNjb3ZlcnkuICBVc2VkIHRvIHNldAorCSAqIHVwIGRldmljZS1zcGVjaWZpYyBzdHJ1Y3R1cmVzLCBpZiBhbnkKKwkgKi8KIAlpbnQgKCpwcm9iZSkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKIAkvKiBQSFkgUG93ZXIgTWFuYWdlbWVudCAqLwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKLQkvKiBDb25maWd1cmVzIHRoZSBhZHZlcnRpc2VtZW50IGFuZCByZXNldHMKKwkvKgorCSAqIENvbmZpZ3VyZXMgdGhlIGFkdmVydGlzZW1lbnQgYW5kIHJlc2V0cwogCSAqIGF1dG9uZWdvdGlhdGlvbiBpZiBwaHlkZXYtPmF1dG9uZWcgaXMgb24sCiAJICogZm9yY2VzIHRoZSBzcGVlZCB0byB0aGUgY3VycmVudCBzZXR0aW5ncyBpbiBwaHlkZXYKLQkgKiBpZiBwaHlkZXYtPmF1dG9uZWcgaXMgb2ZmICovCisJICogaWYgcGh5ZGV2LT5hdXRvbmVnIGlzIG9mZgorCSAqLwogCWludCAoKmNvbmZpZ19hbmVnKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAogCS8qIERldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleCAqLwpAQCAtMzYxLDYgKzM4MSw3IEBACiAKIGludCBwaHlfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKTsKIGludCBwaHlfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwgdTE2IHZhbCk7CitpbnQgZ2V0X3BoeV9pZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyICpwaHlfaWQpOwogc3RydWN0IHBoeV9kZXZpY2UqIGdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKTsKIGludCBwaHlfY2xlYXJfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBpbnRlcnJ1cHRzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGltLmggYi9pbmNsdWRlL2xpbnV4L3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNmZmZDMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9waW0uaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9fTElOVVhfUElNX0gKKyNkZWZpbmUgX19MSU5VWF9QSU1fSAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZuZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBwaW0geworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJcGltX3R5cGU6NCwJCS8qIFBJTSBtZXNzYWdlIHR5cGUgKi8KKwkJcGltX3Zlcjo0OwkJLyogUElNIHZlcnNpb24gKi8KKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorCV9fdTgJcGltX3Zlcjo0OwkJLyogUElNIHZlcnNpb24gKi8KKwkJcGltX3R5cGU6NDsJCS8qIFBJTSBtZXNzYWdlIHR5cGUgKi8KKyNlbmRpZgorCV9fdTgJcGltX3JzdjsJCS8qIFJlc2VydmVkICovCisJX19iZTE2CXBpbV9ja3N1bTsJCS8qIENoZWNrc3VtICovCit9OworCisjZGVmaW5lIFBJTV9NSU5MRU4JCTgKKyNlbmRpZgorCisvKiBNZXNzYWdlIHR5cGVzIC0gVjEgKi8KKyNkZWZpbmUgUElNX1YxX1ZFUlNJT04JCV9fY29uc3RhbnRfaHRvbmwoMHgxMDAwMDAwMCkKKyNkZWZpbmUgUElNX1YxX1JFR0lTVEVSCQkxCisKKy8qIE1lc3NhZ2UgdHlwZXMgLSBWMiAqLworI2RlZmluZSBQSU1fVkVSU0lPTgkJMgorI2RlZmluZSBQSU1fUkVHSVNURVIJCTEKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKyNkZWZpbmUgUElNX05VTExfUkVHSVNURVIJX19jb25zdGFudF9odG9ubCgweDQwMDAwMDAwKQorCisvKiBQSU12MiByZWdpc3RlciBtZXNzYWdlIGhlYWRlciBsYXlvdXQgKGlldGYtZHJhZnQtaWRtci1waW12c20tdjItMDAucHMgKi8KK3N0cnVjdCBwaW1yZWdoZHIKK3sKKwlfX3U4CXR5cGU7CisJX191OAlyZXNlcnZlZDsKKwlfX2JlMTYJY3N1bTsKKwlfX2JlMzIJZmxhZ3M7Cit9OworCitzdHJ1Y3Qgc2tfYnVmZjsKK2V4dGVybiBpbnQgcGltX3Jjdl92MShzdHJ1Y3Qgc2tfYnVmZiAqKTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaCBiL2luY2x1ZGUvbGludXgvcGt0X2Nscy5oCmluZGV4IDI4ZGZjNjFjLi45OWVmYmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BrdF9jbHMuaApAQCAtMjAxLDggKzIwMSw4IEBACiAKIHN0cnVjdCB0Y191MzJfa2V5CiB7Ci0JX191MzIJCW1hc2s7Ci0JX191MzIJCXZhbDsKKwlfX2JlMzIJCW1hc2s7CisJX19iZTMyCQl2YWw7CiAJaW50CQlvZmY7CiAJaW50CQlvZmZtYXNrOwogfTsKQEAgLTIxMywxMiArMjEzLDEyIEBACiAJdW5zaWduZWQgY2hhcgkJb2Zmc2hpZnQ7CiAJdW5zaWduZWQgY2hhcgkJbmtleXM7CiAKLQlfX3UxNgkJCW9mZm1hc2s7CisJX19iZTE2CQkJb2ZmbWFzazsKIAlfX3UxNgkJCW9mZjsKIAlzaG9ydAkJCW9mZm9mZjsKIAogCXNob3J0CQkJaG9mZjsKLQlfX3UzMgkJCWhtYXNrOworCV9fYmUzMgkJCWhtYXNrOwogCXN0cnVjdCB0Y191MzJfa2V5CWtleXNbMF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggZWNjZjU5ZS4uMWRlNzJjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMTQzLDYgKzE0Myw5IEBACiAgKiAJCXRoZSB1cGNvbWluZyBzeXN0ZW0gc3RhdGUgKHN1Y2ggYXMgUENJX0QzaG90KSwgYW5kIGVuYWJsZQogICogCQl3YWtldXAgZXZlbnRzIGFzIGFwcHJvcHJpYXRlLgogICoKKyAqIEhJQkVSTkFURQlFbnRlciBhIGxvdyBwb3dlciBkZXZpY2Ugc3RhdGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBoaWJlcm5hdGlvbgorICogCQlzdGF0ZSAoZWcuIEFDUEkgUzQpIGFuZCBlbmFibGUgd2FrZXVwIGV2ZW50cyBhcyBhcHByb3ByaWF0ZS4KKyAqCiAgKiBGUkVFWkUJUXVpZXNjZSBvcGVyYXRpb25zIHNvIHRoYXQgYSBjb25zaXN0ZW50IGltYWdlIGNhbiBiZSBzYXZlZDsKICAqIAkJYnV0IGRvIE5PVCBvdGhlcndpc2UgZW50ZXIgYSBsb3cgcG93ZXIgZGV2aWNlIHN0YXRlLCBhbmQgZG8KICAqIAkJTk9UIGVtaXQgc3lzdGVtIHdha2V1cCBldmVudHMuCkBAIC0xNjYsMTggKzE2OSwyMyBAQAogI2RlZmluZSBQTV9FVkVOVF9PTiAwCiAjZGVmaW5lIFBNX0VWRU5UX0ZSRUVaRSAxCiAjZGVmaW5lIFBNX0VWRU5UX1NVU1BFTkQgMgotI2RlZmluZSBQTV9FVkVOVF9QUkVUSEFXIDMKKyNkZWZpbmUgUE1fRVZFTlRfSElCRVJOQVRFIDQKKyNkZWZpbmUgUE1fRVZFTlRfUFJFVEhBVyA4CisKKyNkZWZpbmUgUE1fRVZFTlRfU0xFRVAJKFBNX0VWRU5UX1NVU1BFTkQgfCBQTV9FVkVOVF9ISUJFUk5BVEUpCiAKICNkZWZpbmUgUE1TR19GUkVFWkUJKChzdHJ1Y3QgcG1fbWVzc2FnZSl7IC5ldmVudCA9IFBNX0VWRU5UX0ZSRUVaRSwgfSkKICNkZWZpbmUgUE1TR19QUkVUSEFXCSgoc3RydWN0IHBtX21lc3NhZ2UpeyAuZXZlbnQgPSBQTV9FVkVOVF9QUkVUSEFXLCB9KQogI2RlZmluZSBQTVNHX1NVU1BFTkQJKChzdHJ1Y3QgcG1fbWVzc2FnZSl7IC5ldmVudCA9IFBNX0VWRU5UX1NVU1BFTkQsIH0pCisjZGVmaW5lIFBNU0dfSElCRVJOQVRFCSgoc3RydWN0IHBtX21lc3NhZ2UpeyAuZXZlbnQgPSBQTV9FVkVOVF9ISUJFUk5BVEUsIH0pCiAjZGVmaW5lIFBNU0dfT04JCSgoc3RydWN0IHBtX21lc3NhZ2UpeyAuZXZlbnQgPSBQTV9FVkVOVF9PTiwgfSkKIAogc3RydWN0IGRldl9wbV9pbmZvIHsKIAlwbV9tZXNzYWdlX3QJCXBvd2VyX3N0YXRlOwogCXVuc2lnbmVkCQljYW5fd2FrZXVwOjE7Ci0jaWZkZWYJQ09ORklHX1BNX1NMRUVQCiAJdW5zaWduZWQJCXNob3VsZF93YWtldXA6MTsKKwlib29sCQkJc2xlZXBpbmc6MTsJLyogT3duZWQgYnkgdGhlIFBNIGNvcmUgKi8KKyNpZmRlZglDT05GSUdfUE1fU0xFRVAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OwogI2VuZGlmCiB9OwpAQCAtMTkwLDExICsxOTgsNiBAQAogZXh0ZXJuIGludCBkZXZpY2Vfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBkZXZpY2VfcHJlcGFyZV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAKLSNkZWZpbmUgZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKGRldix2YWwpIFwKLQkoKGRldiktPnBvd2VyLnNob3VsZF93YWtldXAgPSAhISh2YWwpKQotI2RlZmluZSBkZXZpY2VfbWF5X3dha2V1cChkZXYpIFwKLQkoZGV2aWNlX2Nhbl93YWtldXAoZGV2KSAmJiAoZGV2KS0+cG93ZXIuc2hvdWxkX3dha2V1cCkKLQogZXh0ZXJuIHZvaWQgX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoY29uc3QgY2hhciAqZnVuY3Rpb24sIHZvaWQgKmZuLCBpbnQgcmV0KTsKIAogI2RlZmluZSBzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZm4sIHJldCkJCQkJCVwKQEAgLTIwMiwyMCArMjA1LDYgQEAKIAkJX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoX19GVU5DVElPTl9fLCBmbiwgcmV0KTsJCVwKIAl9IHdoaWxlICgwKQogCi0vKgotICogUGxhdGZvcm0gaG9vayB0byBhY3RpdmF0ZSBkZXZpY2Ugd2FrZXVwIGNhcGFiaWxpdHksIGlmIHRoYXQncyBub3QgYWxyZWFkeQotICogaGFuZGxlZCBieSBlbmFibGVfaXJxX3dha2UoKSBldGMuCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJubwotICovCi1leHRlcm4gaW50ICgqcGxhdGZvcm1fZW5hYmxlX3dha2V1cCkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfb24pOwotCi1zdGF0aWMgaW5saW5lIGludCBjYWxsX3BsYXRmb3JtX2VuYWJsZV93YWtldXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfb24pCi17Ci0JaWYgKHBsYXRmb3JtX2VuYWJsZV93YWtldXApCi0JCXJldHVybiAoKnBsYXRmb3JtX2VuYWJsZV93YWtldXApKGRldiwgaXNfb24pOwotCXJldHVybiAwOwotfQotCiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTIyMywyOSArMjEyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKGRldix2YWwpCWRve313aGlsZSgwKQotI2RlZmluZSBkZXZpY2VfbWF5X3dha2V1cChkZXYpCQkJKDApCi0KLSNkZWZpbmUgc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGZuLCByZXQpIGRvIHsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSBpbnQgY2FsbF9wbGF0Zm9ybV9lbmFibGVfd2FrZXVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlzX29uKQotewotCXJldHVybiAwOwotfQorI2RlZmluZSBzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZm4sIHJldCkJCWRvIHt9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCi0vKiBjaGFuZ2VzIHRvIGRldmljZV9tYXlfd2FrZXVwIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IHBtIHN0YXRlIGNoYW5nZS4KLSAqIGJ5IGRlZmF1bHQsIGRldmljZXMgc2hvdWxkIHdha2V1cCBpZiB0aGV5IGNhbi4KLSAqLwotI2RlZmluZSBkZXZpY2VfY2FuX3dha2V1cChkZXYpIFwKLQkoKGRldiktPnBvd2VyLmNhbl93YWtldXApCi0jZGVmaW5lIGRldmljZV9pbml0X3dha2V1cChkZXYsdmFsKSBcCi0JZG8geyBcCi0JCWRldmljZV9jYW5fd2FrZXVwKGRldikgPSAhISh2YWwpOyBcCi0JCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShkZXYsdmFsKTsgXAotCX0gd2hpbGUoMCkKLQogLyoKICAqIEdsb2JhbCBQb3dlciBNYW5hZ2VtZW50IGZsYWdzCiAgKiBVc2VkIHRvIGtlZXAgQVBNIGFuZCBBQ1BJIGZyb20gYm90aCBiZWluZyBhY3RpdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmggYi9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDBiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgcG1fd2FrZXVwLmggLSBQb3dlciBtYW5hZ2VtZW50IHdha2V1cCBpbnRlcmZhY2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFsYW4gU3Rlcm4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9MSU5VWF9QTV9XQUtFVVBfSAorI2RlZmluZSBfTElOVVhfUE1fV0FLRVVQX0gKKworI2lmbmRlZiBfREVWSUNFX0hfCisjIGVycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTQorCisvKiBjaGFuZ2VzIHRvIGRldmljZV9tYXlfd2FrZXVwIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IHBtIHN0YXRlIGNoYW5nZS4KKyAqIGJ5IGRlZmF1bHQsIGRldmljZXMgc2hvdWxkIHdha2V1cCBpZiB0aGV5IGNhbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9pbml0X3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCB2YWwpCit7CisJZGV2LT5wb3dlci5jYW5fd2FrZXVwID0gZGV2LT5wb3dlci5zaG91bGRfd2FrZXVwID0gISF2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRldmljZV9jYW5fd2FrZXVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5wb3dlci5jYW5fd2FrZXVwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHZhbCkKK3sKKwlkZXYtPnBvd2VyLnNob3VsZF93YWtldXAgPSAhIXZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX21heV93YWtldXAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnBvd2VyLmNhbl93YWtldXAgJiBkZXYtPnBvd2VyLnNob3VsZF93YWtldXA7Cit9CisKKy8qCisgKiBQbGF0Zm9ybSBob29rIHRvIGFjdGl2YXRlIGRldmljZSB3YWtldXAgY2FwYWJpbGl0eSwgaWYgdGhhdCdzIG5vdCBhbHJlYWR5CisgKiBoYW5kbGVkIGJ5IGVuYWJsZV9pcnFfd2FrZSgpIGV0Yy4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vCisgKi8KK2V4dGVybiBpbnQgKCpwbGF0Zm9ybV9lbmFibGVfd2FrZXVwKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpc19vbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNhbGxfcGxhdGZvcm1fZW5hYmxlX3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpc19vbikKK3sKKwlpZiAocGxhdGZvcm1fZW5hYmxlX3dha2V1cCkKKwkJcmV0dXJuICgqcGxhdGZvcm1fZW5hYmxlX3dha2V1cCkoZGV2LCBpc19vbik7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfUE0gKi8KKworLyogRm9yIHNvbWUgcmVhc29uIHRoZSBuZXh0IHR3byByb3V0aW5lcyB3b3JrIGV2ZW4gd2l0aG91dCBDT05GSUdfUE0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfaW5pdF93YWtldXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgdmFsKQoreworCWRldi0+cG93ZXIuY2FuX3dha2V1cCA9ICEhdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfY2FuX3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cG93ZXIuY2FuX3dha2V1cDsKK30KKworI2RlZmluZSBkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoZGV2LCB2YWwpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkZXZpY2VfbWF5X3dha2V1cChkZXYpCQkJMAorCitzdGF0aWMgaW5saW5lIGludCBjYWxsX3BsYXRmb3JtX2VuYWJsZV93YWtldXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfb24pCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAhQ09ORklHX1BNICovCisKKyNlbmRpZiAvKiBfTElOVVhfUE1fV0FLRVVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG11LmggYi9pbmNsdWRlL2xpbnV4L3BtdS5oCmluZGV4IDRjNWY2NTMuLmNhZmU5OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG11LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbXUuaApAQCAtMTQ3LDggKzE0NywxNSBAQAogLyogRm9yIHVzZSBiZWZvcmUgc3dpdGNoaW5nIGludGVycnVwdHMgb2ZmIGZvciBhIGxvbmcgdGltZTsKICAqIHdhcm5pbmc6IG5vdCBzdGFja2FibGUKICAqLworI2lmIGRlZmluZWQoQ09ORklHX0FEQl9QTVUpCiBleHRlcm4gdm9pZCBwbXVfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIHBtdV9yZXN1bWUodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBtdV9zdXNwZW5kKHZvaWQpCit7fQorc3RhdGljIGlubGluZSB2b2lkIHBtdV9yZXN1bWUodm9pZCkKK3t9CisjZW5kaWYKIAogZXh0ZXJuIHZvaWQgcG11X2VuYWJsZV9pcmxlZChpbnQgb24pOwogCkBAIC0xOTIsNyArMTk5LDcgQEAKIGV4dGVybiB2b2lkIHBtdV9iYWNrbGlnaHRfaW5pdCh2b2lkKTsKIAogLyogc29tZSBjb2RlIG5lZWRzIHRvIGtub3cgaWYgdGhlIFBNVSB3YXMgc3VzcGVuZGVkIGZvciBoaWJlcm5hdGlvbiAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKKyNpZiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKIGV4dGVybiBpbnQgcG11X3N5c19zdXNwZW5kZWQ7CiAjZWxzZQogLyogaWYgcG93ZXIgbWFuYWdlbWVudCBpcyBub3QgY29uZmlndXJlZCBpdCBjYW4ndCBiZSBzdXNwZW5kZWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG5wLmggYi9pbmNsdWRlL2xpbnV4L3BucC5oCmluZGV4IGNkNjMzMmIuLmIyZjA1YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG5wLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbnAuaApAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiAjZGVmaW5lIFBOUF9NQVhfUE9SVAkJNDAKLSNkZWZpbmUgUE5QX01BWF9NRU0JCTEyCisjZGVmaW5lIFBOUF9NQVhfTUVNCQkyNAogI2RlZmluZSBQTlBfTUFYX0lSUQkJMgogI2RlZmluZSBQTlBfTUFYX0RNQQkJMgogI2RlZmluZSBQTlBfTkFNRV9MRU4JCTUwCkBAIC0xNzUsNyArMTc1LDcgQEAKIHN0cnVjdCBwbnBfZGV2IHsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIERyaXZlciBNb2RlbCBkZXZpY2UgaW50ZXJmYWNlICovCiAJdTY0IGRtYV9tYXNrOwotCXVuc2lnbmVkIGNoYXIgbnVtYmVyOwkJLyogdXNlZCBhcyBhbiBpbmRleCwgbXVzdCBiZSB1bmlxdWUgKi8KKwl1bnNpZ25lZCBpbnQgbnVtYmVyOwkJLyogdXNlZCBhcyBhbiBpbmRleCwgbXVzdCBiZSB1bmlxdWUgKi8KIAlpbnQgc3RhdHVzOwogCiAJc3RydWN0IGxpc3RfaGVhZCBnbG9iYWxfbGlzdDsJLyogbm9kZSBpbiBnbG9iYWwgbGlzdCBvZiBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggMzgwMDYzOS4uNWM4MGIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtNjcsNCArNjcsMTAgQEAKICNkZWZpbmUgUFJfQ0FQQlNFVF9SRUFEIDIzCiAjZGVmaW5lIFBSX0NBUEJTRVRfRFJPUCAyNAogCisvKiBHZXQvc2V0IHRoZSBwcm9jZXNzJyBhYmlsaXR5IHRvIHVzZSB0aGUgdGltZXN0YW1wIGNvdW50ZXIgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgUFJfR0VUX1RTQyAyNQorI2RlZmluZSBQUl9TRVRfVFNDIDI2CisjIGRlZmluZSBQUl9UU0NfRU5BQkxFCQkxCS8qIGFsbG93IHRoZSB1c2Ugb2YgdGhlIHRpbWVzdGFtcCBjb3VudGVyICovCisjIGRlZmluZSBQUl9UU0NfU0lHU0VHVgkJMgkvKiB0aHJvdyBhIFNJR1NFR1YgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSBUU0MgKi8KKwogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IGQ5YTllNzEuLjliNmM5MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC01MCw4ICs1MCw2IEBACiB0eXBlZGVmCWludCAod3JpdGVfcHJvY190KShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpOwogdHlwZWRlZiBpbnQgKGdldF9pbmZvX3QpKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCk7Ci10eXBlZGVmIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKHNoYWRvd19wcm9jX3QpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlKTsKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5IHsKIAl1bnNpZ25lZCBpbnQgbG93X2lubzsKQEAgLTgyLDcgKzgwLDYgQEAKIAlpbnQgcGRlX3VzZXJzOwkvKiBudW1iZXIgb2YgY2FsbGVycyBpbnRvIG1vZHVsZSBpbiBwcm9ncmVzcyAqLwogCXNwaW5sb2NrX3QgcGRlX3VubG9hZF9sb2NrOyAvKiBwcm9jX2ZvcHMgY2hlY2tzIGFuZCBwZGVfdXNlcnMgYnVtcHMgKi8KIAlzdHJ1Y3QgY29tcGxldGlvbiAqcGRlX3VubG9hZF9jb21wbGV0aW9uOwotCXNoYWRvd19wcm9jX3QgKnNoYWRvd19wcm9jOwogfTsKIAogc3RydWN0IGtjb3JlX2xpc3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wczJlc2RpLmggYi9pbmNsdWRlL2xpbnV4L3BzMmVzZGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlMDUwYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3BzMmVzZGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLSNpZm5kZWYgX1BTMkVTRElfSF8KLSNkZWZpbmUgX1BTMkVTRElfSF8KLQotI2RlZmluZSBOUk1MX0VTRElfSUQgMHhkZGZmCi0jZGVmaW5lIElOVEdfRVNESV9JRCAweGRmOWYKLQotI2RlZmluZSBQUklNQVJZX0lPX0JBU0UgMHgzNTEwCi0jZGVmaW5lIEFMVF9JT19CQVNFIDB4MzUxOAotCi0jZGVmaW5lIEVTRElfQ01EX0lOVCAoaW9fYmFzZSswKQotI2RlZmluZSBFU0RJX1NUVF9JTlQgKGlvX2Jhc2UrMCkKLSNkZWZpbmUgRVNESV9DT05UUk9MIChpb19iYXNlKzIpCi0jZGVmaW5lIEVTRElfU1RBVFVTICAoaW9fYmFzZSsyKQotI2RlZmluZSBFU0RJX0FUVE4gICAgKGlvX2Jhc2UrMykKLSNkZWZpbmUgRVNESV9JTlRSUFQgIChpb19iYXNlKzMpCi0KLSNkZWZpbmUgU1RBVFVTX0VOQUJMRUQgICAgMHgwMQotI2RlZmluZSBTVEFUVVNfQUxURVJOQVRFICAweDAyCi0jZGVmaW5lIFNUQVRVU19CVVNZICAgICAgIDB4MTAKLSNkZWZpbmUgU1RBVFVTX1NUQVRfQVZBSUwgMHgwOAotI2RlZmluZSBTVEFUVVNfSU5UUiAgICAgICAweDAxCi0jZGVmaW5lIFNUQVRVU19SRVNFVF9GQUlMIDB4ZWEKLSNkZWZpbmUgU1RBVFVTX0NNRF9JTkYJICAweDA0Ci0KLSNkZWZpbmUgQ1RSTF9TT0ZUX1JFU0VUICAgMHhlNAotI2RlZmluZSBDVFJMX0hBUkRfUkVTRVQgICAweDgwCi0jZGVmaW5lIENUUkxfRU9JICAgICAgICAgIDB4ZTIKLSNkZWZpbmUgQ1RSTF9FTkFCTEVfRE1BICAgMHgwMgotI2RlZmluZSBDVFJMX0VOQUJMRV9JTlRSICAweDAxCi0jZGVmaW5lIENUUkxfRElTQUJMRV9JTlRSICAweDAwCi0KLSNkZWZpbmUgQVRUX0VPSSAweDAyCi0KLS8qIGJpdHMgb2Ygd29yZCAwIG9mIGNvbmZpZ3VyYXRpb24gc3RhdHVzIGJsb2NrLiBtb3JlIGluZm8gc2VlIHAuMzggb2YgdGVjaCByZWYgKi8KLSNkZWZpbmUgQ09ORklHX0lTIDB4MTAgLyogSW52YWxpZCBTZWNvbmRhcnkgKi8KLSNkZWZpbmUgQ09ORklHX1pEIDB4MDggLyogWmVybyBEZWZlY3QgKi8KLSNkZWZpbmUgQ09ORklHX1NGIDB4MDQgLyogU2tld2VkIEZvcm1hdCAqLwotI2RlZmluZSBDT05GSUdfRlIgMHgwMiAvKiBSZW1vdmFibGUgKi8KLSNkZWZpbmUgQ09ORklHX1JUIDB4MDEgLyogUmV0cmllcyAqLwotCi0jZGVmaW5lIFBPUlRfU1lTX0EgICAweDkyCi0jZGVmaW5lIFBPUlRfRE1BX0ZOICAweDE4Ci0jZGVmaW5lIFBPUlRfRE1BX0VYICAweDFhCi0KLSNkZWZpbmUgT04gKHVuc2lnbmVkIGNoYXIpMHg0MAotI2RlZmluZSBPRkYgKHVuc2lnbmVkIGNoYXIpfk9OCi0jZGVmaW5lIExJVEVfT04gb3V0YihpbmIoUE9SVF9TWVNfQSkgfCBPTixQT1JUX1NZU19BKQotI2RlZmluZSBMSVRFX09GRiBvdXRiKChpbmIoUE9SVF9TWVNfQSkgJiBPRkYpLFBPUlRfU1lTX0EpCi0KLSNkZWZpbmUgRkFJTCAwCi0jZGVmaW5lIFNVQ0NFUyAxCi0KLSNkZWZpbmUgSU5UX0NNRF9DT01QTEVURSAweDAxCi0jZGVmaW5lIElOVF9DTURfRUNDICAgICAgMHgwMwotI2RlZmluZSBJTlRfQ01EX1JFVFJZICAgIDB4MDUKLSNkZWZpbmUgSU5UX0NNRF9GT1JNQVQgICAweDA2Ci0jZGVmaW5lIElOVF9DTURfRUNDX1JFVFJZIDB4MDcKLSNkZWZpbmUgSU5UX0NNRF9XQVJOSU5HICAweDA4Ci0jZGVmaW5lIElOVF9DTURfQUJPUlQgICAgMHgwOQotI2RlZmluZSBJTlRfUkVTRVQgICAgICAgIDB4MEEKLSNkZWZpbmUgSU5UX1RSQU5TRkVSX1JFUSAweDBCCi0jZGVmaW5lIElOVF9DTURfRkFJTEVEICAgMHgwQwotI2RlZmluZSBJTlRfRE1BX0VSUiAgICAgIDB4MEQKLSNkZWZpbmUgSU5UX0NNRF9CTEtfRVJSICAweDBFCi0jZGVmaW5lIElOVF9BVFROX0VSUk9SICAgMHgwRgotCi0jZGVmaW5lIERNQV9NQVNLX0NIQU4gMHg5MAotI2RlZmluZSBETUFfVU5NQVNLX0NIQU4gMHhBMAotI2RlZmluZSBETUFfV1JJVEVfQUREUiAweDIwCi0jZGVmaW5lIERNQV9XUklURV9UQyAweDQwCi0jZGVmaW5lIERNQV9XUklURV9NT0RFIDB4NzAKLQotI2RlZmluZSBDTURfR0VUX0RFVl9DT05GSUcgMHgwOQotI2RlZmluZSBDTURfUkVBRCAweDQ2MDEKLSNkZWZpbmUgQ01EX1dSSVRFIDB4NDYwMgotI2RlZmluZSBETUFfUkVBRF8xNiAweDRDCi0jZGVmaW5lIERNQV9XUklURV8xNiAweDQ0Ci0KLQotI2RlZmluZSBNQiAxMDI0KjEwMjQKLSNkZWZpbmUgU0VDVF9TSVpFIDUxMiAgIAotCi0jZGVmaW5lIEVSUk9SIDEKLSNkZWZpbmUgT0sgMAotCi0jZGVmaW5lIEhESU9fR0VUR0VPIDB4MDMwMQotCi0jZGVmaW5lIEZBTFNFIDAKLSNkZWZpbmUgVFJVRSAhRkFMU0UKLQotc3RydWN0IHBzMmVzZGlfZ2VvbWV0cnkgewotCXVuc2lnbmVkIGNoYXIgaGVhZHM7Ci0JdW5zaWduZWQgY2hhciBzZWN0b3JzOwotCXVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OwotfTsKLQotI2VuZGlmIC8qIF9QUzJFU0RJX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKaW5kZXggNmUwMzkzYS4uZWI1NjBkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMTYwLDE0ICsxNjAsMTggQEAKIAogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCiAjaW5jbHVkZSA8bGludXgvZHFibGtfeGZzLmg+CiAjaW5jbHVkZSA8bGludXgvZHFibGtfdjEuaD4KICNpbmNsdWRlIDxsaW51eC9kcWJsa192Mi5oPgogCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCiBleHRlcm4gc3BpbmxvY2tfdCBkcV9kYXRhX2xvY2s7CiAKIC8qIE1heGltYWwgbnVtYmVycyBvZiB3cml0ZXMgZm9yIHF1b3RhIG9wZXJhdGlvbiAoaW5zZXJ0L2RlbGV0ZS91cGRhdGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKaW5kZXggZTUxYjUzMS4uNDdmYmNiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaApAQCAtMjM1LDYgKzIzNSw4IEBACiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaW50IGFsbGNsZWFuOworCiAJdW5zaWduZWQgbG9uZyBtYXhfd3JpdGVfYmVoaW5kOyAvKiB3cml0ZS1iZWhpbmQgbW9kZSAqLwogCWF0b21pY190IGJlaGluZF93cml0ZXM7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kLmgKaW5kZXggZmJhZWRhNy4uOGFiNjMwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL21kLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgX01EX0gKIAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCmluZGV4IDg1YTA2OGIuLjdiYjZkMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaApAQCAtODMsNiArODMsNyBAQAogI2RlZmluZQlCYXJyaWVyc05vdHN1cHAJNQkJLyogQklPX1JXX0JBUlJJRVIgaXMgbm90IHN1cHBvcnRlZCAqLwogI2RlZmluZQlBbGxSZXNlcnZlZAk2CQkvKiBJZiB3aG9sZSBkZXZpY2UgaXMgcmVzZXJ2ZWQgZm9yCiAJCQkJCSAqIG9uZSBhcnJheSAqLworI2RlZmluZQlBdXRvRGV0ZWN0ZWQJNwkJLyogYWRkZWQgYnkgYXV0by1kZXRlY3QgKi8KIAogCWludCBkZXNjX25yOwkJCS8qIGRlc2NyaXB0b3IgaW5kZXggaW4gdGhlIHN1cGVyYmxvY2sgKi8KIAlpbnQgcmFpZF9kaXNrOwkJCS8qIHJvbGUgb2YgZGV2aWNlIGluIGFycmF5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaCBiL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oCmluZGV4IGQyMmFkMzkuLjZiNTM3ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oCkBAIC01MywyMCArNTMsMjAgQEAKICNkZWZpbmUgREVGSU5FX1JBSURfQVRUUklCVVRFKHR5cGUsIGF0dHIpCQkJCSAgICAgIFwKIHN0YXRpYyBpbmxpbmUgdm9pZAkJCQkJCQkgICAgICBcCiByYWlkX3NldF8jI2F0dHIoc3RydWN0IHJhaWRfdGVtcGxhdGUgKnIsIHN0cnVjdCBkZXZpY2UgKmRldiwgdHlwZSB2YWx1ZSkgeyAgICBcCi0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9CQkJCQkgICAgICBcCisJc3RydWN0IGRldmljZSAqZGV2aWNlID0JCQkJCQkgICAgICBcCiAJCWF0dHJpYnV0ZV9jb250YWluZXJfZmluZF9jbGFzc19kZXZpY2UoJnItPnJhaWRfYXR0cnMuYWMsIGRldik7XAogCXN0cnVjdCByYWlkX2RhdGEgKnJkOwkJCQkJCSAgICAgIFwKLQlCVUdfT04oIWNkZXYpOwkJCQkJCQkgICAgICBcCi0JcmQgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsJCQkJCSAgICAgIFwKKwlCVUdfT04oIWRldmljZSk7CQkJCQkJICAgICAgXAorCXJkID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CQkJCQkgICAgICBcCiAJcmQtPmF0dHIgPSB2YWx1ZTsJCQkJCQkgICAgICBcCiB9CQkJCQkJCQkJICAgICAgXAogc3RhdGljIGlubGluZSB0eXBlCQkJCQkJCSAgICAgIFwKIHJhaWRfZ2V0XyMjYXR0cihzdHJ1Y3QgcmFpZF90ZW1wbGF0ZSAqciwgc3RydWN0IGRldmljZSAqZGV2KSB7CQkgICAgICBcCi0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9CQkJCQkgICAgICBcCisJc3RydWN0IGRldmljZSAqZGV2aWNlID0JCQkJCQkgICAgICBcCiAJCWF0dHJpYnV0ZV9jb250YWluZXJfZmluZF9jbGFzc19kZXZpY2UoJnItPnJhaWRfYXR0cnMuYWMsIGRldik7XAogCXN0cnVjdCByYWlkX2RhdGEgKnJkOwkJCQkJCSAgICAgIFwKLQlCVUdfT04oIWNkZXYpOwkJCQkJCQkgICAgICBcCi0JcmQgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsJCQkJCSAgICAgIFwKKwlCVUdfT04oIWRldmljZSk7CQkJCQkJICAgICAgXAorCXJkID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CQkJCQkgICAgICBcCiAJcmV0dXJuIHJkLT5hdHRyOwkJCQkJCSAgICAgIFwKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VjbGFzc2ljLmggYi9pbmNsdWRlL2xpbnV4L3JjdWNsYXNzaWMuaAppbmRleCA0ZDY2MjQyLi5iM2RjY2Q2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdWNsYXNzaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdWNsYXNzaWMuaApAQCAtMTYwLDUgKzE2MCw4IEBACiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgodm9pZCk7CiAKKyNkZWZpbmUgcmN1X2VudGVyX25vaHooKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJjdV9leGl0X25vaHooKQkJZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fTElOVVhfUkNVQ0xBU1NJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXByZWVtcHQuaCBiL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCmluZGV4IDYwYzJhMDMuLmQwMzhhYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oCkBAIC04Miw1ICs4MiwyNyBAQAogCiBzdHJ1Y3Qgc29mdGlycV9hY3Rpb247CiAKKyNpZmRlZiBDT05GSUdfTk9fSFoKK0RFQ0xBUkVfUEVSX0NQVShsb25nLCBkeW50aWNrc19wcm9ncmVzc19jb3VudGVyKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpCit7CisJc21wX21iKCk7IC8qIENQVXMgc2VlaW5nICsrIG11c3Qgc2VlIHByaW9yIFJDVSByZWFkLXNpZGUgY3JpdCBzZWN0cyAqLworCV9fZ2V0X2NwdV92YXIoZHludGlja3NfcHJvZ3Jlc3NfY291bnRlcikrKzsKKwlXQVJOX09OKF9fZ2V0X2NwdV92YXIoZHludGlja3NfcHJvZ3Jlc3NfY291bnRlcikgJiAweDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2V4aXRfbm9oeih2b2lkKQoreworCV9fZ2V0X2NwdV92YXIoZHludGlja3NfcHJvZ3Jlc3NfY291bnRlcikrKzsKKwlzbXBfbWIoKTsgLyogQ1BVcyBzZWVpbmcgKysgbXVzdCBzZWUgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCisJV0FSTl9PTighKF9fZ2V0X2NwdV92YXIoZHludGlja3NfcHJvZ3Jlc3NfY291bnRlcikgJiAweDEpKTsKK30KKworI2Vsc2UgLyogQ09ORklHX05PX0haICovCisjZGVmaW5lIHJjdV9lbnRlcl9ub2h6KCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByY3VfZXhpdF9ub2h6KCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBDT05GSUdfTk9fSFogKi8KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0xJTlVYX1JDVVBSRUVNUFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9saW51eC9zY2F0dGVybGlzdC5oCmluZGV4IGEzZDU2N2EuLjcxZmM4MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NhdHRlcmxpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjYXR0ZXJsaXN0LmgKQEAgLTIxMyw2ICsyMTMsMTEgQEAKIAkJICAgICBzZ19hbGxvY19mbiAqKTsKIGludCBzZ19hbGxvY190YWJsZShzdHJ1Y3Qgc2dfdGFibGUgKiwgdW5zaWduZWQgaW50LCBnZnBfdCk7CiAKK3NpemVfdCBzZ19jb3B5X2Zyb21fYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgbmVudHMsCisJCQkgICB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pOworc2l6ZV90IHNnX2NvcHlfdG9fYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgbmVudHMsCisJCQkgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKTsKKwogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZCBpbiBvbmUgcGllY2UsIGlmCiAgKiBhIGxpc3QgbGFyZ2VyIHRoYW4gdGhpcyBpcyByZXF1aXJlZCB0aGVuIGNoYWluaW5nIHdpbGwgYmUgdXRpbGl6ZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggZTIxN2QxOC4uMzExMzgwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0aW1lLmg+CkBAIC0yNDIsNiArMjQxLDcgQEAKIAogZXh0ZXJuIHZvaWQgc2NoZWRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNjaGVkX2luaXRfc21wKHZvaWQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzY2hlZHVsZV90YWlsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldik7CiBleHRlcm4gdm9pZCBpbml0X2lkbGUoc3RydWN0IHRhc2tfc3RydWN0ICppZGxlLCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGluaXRfaWRsZV9ib290dXBfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpOwogCkBAIC03MDMsNiArNzAzLDcgQEAKICNkZWZpbmUgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UJMjU2CS8qIEJhbGFuY2UgZm9yIHBvd2VyIHNhdmluZ3MgKi8KICNkZWZpbmUgU0RfU0hBUkVfUEtHX1JFU09VUkNFUwk1MTIJLyogRG9tYWluIG1lbWJlcnMgc2hhcmUgY3B1IHBrZyByZXNvdXJjZXMgKi8KICNkZWZpbmUgU0RfU0VSSUFMSVpFCQkxMDI0CS8qIE9ubHkgYSBzaW5nbGUgbG9hZCBiYWxhbmNpbmcgaW5zdGFuY2UgKi8KKyNkZWZpbmUgU0RfV0FLRV9JRExFX0ZBUgkyMDQ4CS8qIEdhaW4gbGF0ZW5jeSBzYWNyaWZpY2luZyBjYWNoZSBoaXQgKi8KIAogI2RlZmluZSBCQUxBTkNFX0ZPUl9NQ19QT1dFUglcCiAJKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzID8gU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UgOiAwKQpAQCAtNzMyLDEyICs3MzMsMzEgQEAKIAl1MzIgcmVjaXByb2NhbF9jcHVfcG93ZXI7CiB9OwogCitlbnVtIHNjaGVkX2RvbWFpbl9sZXZlbCB7CisJU0RfTFZfTk9ORSA9IDAsCisJU0RfTFZfU0lCTElORywKKwlTRF9MVl9NQywKKwlTRF9MVl9DUFUsCisJU0RfTFZfTk9ERSwKKwlTRF9MVl9BTExOT0RFUywKKwlTRF9MVl9NQVgKK307CisKK3N0cnVjdCBzY2hlZF9kb21haW5fYXR0ciB7CisJaW50IHJlbGF4X2RvbWFpbl9sZXZlbDsKK307CisKKyNkZWZpbmUgU0RfQVRUUl9JTklUCShzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIpIHsJXAorCS5yZWxheF9kb21haW5fbGV2ZWwgPSAtMSwJCQlcCit9CisKIHN0cnVjdCBzY2hlZF9kb21haW4gewogCS8qIFRoZXNlIGZpZWxkcyBtdXN0IGJlIHNldHVwICovCiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqcGFyZW50OwkvKiB0b3AgZG9tYWluIG11c3QgYmUgbnVsbCB0ZXJtaW5hdGVkICovCiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQ7CS8qIGJvdHRvbSBkb21haW4gbXVzdCBiZSBudWxsIHRlcm1pbmF0ZWQgKi8KIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwczsJLyogdGhlIGJhbGFuY2luZyBncm91cHMgb2YgdGhlIGRvbWFpbiAqLwogCWNwdW1hc2tfdCBzcGFuOwkJCS8qIHNwYW4gb2YgYWxsIENQVXMgaW4gdGhpcyBkb21haW4gKi8KKwlpbnQgZmlyc3RfY3B1OwkJCS8qIGNhY2hlIG9mIHRoZSBmaXJzdCBjcHUgaW4gdGhpcyBkb21haW4gKi8KIAl1bnNpZ25lZCBsb25nIG1pbl9pbnRlcnZhbDsJLyogTWluaW11bSBiYWxhbmNlIGludGVydmFsIG1zICovCiAJdW5zaWduZWQgbG9uZyBtYXhfaW50ZXJ2YWw7CS8qIE1heGltdW0gYmFsYW5jZSBpbnRlcnZhbCBtcyAqLwogCXVuc2lnbmVkIGludCBidXN5X2ZhY3RvcjsJLyogbGVzcyBiYWxhbmNpbmcgYnkgZmFjdG9yIGlmIGJ1c3kgKi8KQEAgLTc0OSw2ICs3NjksNyBAQAogCXVuc2lnbmVkIGludCB3YWtlX2lkeDsKIAl1bnNpZ25lZCBpbnQgZm9ya2V4ZWNfaWR4OwogCWludCBmbGFnczsJCQkvKiBTZWUgU0RfKiAqLworCWVudW0gc2NoZWRfZG9tYWluX2xldmVsIGxldmVsOwogCiAJLyogUnVudGltZSBmaWVsZHMuICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X2JhbGFuY2U7CS8qIGluaXQgdG8gamlmZmllcy4gdW5pdHMgaW4gamlmZmllcyAqLwpAQCAtNzg4LDcgKzgwOSw5IEBACiAjZW5kaWYKIH07CiAKLWV4dGVybiB2b2lkIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKGludCBuZG9tc19uZXcsIGNwdW1hc2tfdCAqZG9tc19uZXcpOworZXh0ZXJuIHZvaWQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgY3B1bWFza190ICpkb21zX25ldywKKwkJCQkgICAgc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICpkYXR0cl9uZXcpOworZXh0ZXJuIGludCBhcmNoX3JlaW5pdF9zY2hlZF9kb21haW5zKHZvaWQpOwogCiAjZW5kaWYJLyogQ09ORklHX1NNUCAqLwogCkBAIC04ODcsNyArOTEwLDggQEAKIAl2b2lkICgqc2V0X2N1cnJfdGFzaykgKHN0cnVjdCBycSAqcnEpOwogCXZvaWQgKCp0YXNrX3RpY2spIChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBxdWV1ZWQpOwogCXZvaWQgKCp0YXNrX25ldykgKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Ci0Jdm9pZCAoKnNldF9jcHVzX2FsbG93ZWQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1bWFza190ICpuZXdtYXNrKTsKKwl2b2lkICgqc2V0X2NwdXNfYWxsb3dlZCkoc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCSBjb25zdCBjcHVtYXNrX3QgKm5ld21hc2spOwogCiAJdm9pZCAoKmpvaW5fZG9tYWluKShzdHJ1Y3QgcnEgKnJxKTsKIAl2b2lkICgqbGVhdmVfZG9tYWluKShzdHJ1Y3QgcnEgKnJxKTsKQEAgLTg5OCw2ICs5MjIsMTAgQEAKIAkJCSAgICAgaW50IHJ1bm5pbmcpOwogCXZvaWQgKCpwcmlvX2NoYW5nZWQpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCSAgICAgaW50IG9sZHByaW8sIGludCBydW5uaW5nKTsKKworI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisJdm9pZCAoKm1vdmVkX2dyb3VwKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKyNlbmRpZgogfTsKIAogc3RydWN0IGxvYWRfd2VpZ2h0IHsKQEAgLTkxNyw2ICs5NDUsNyBAQAogc3RydWN0IHNjaGVkX2VudGl0eSB7CiAJc3RydWN0IGxvYWRfd2VpZ2h0CWxvYWQ7CQkvKiBmb3IgbG9hZC1iYWxhbmNpbmcgKi8KIAlzdHJ1Y3QgcmJfbm9kZQkJcnVuX25vZGU7CisJc3RydWN0IGxpc3RfaGVhZAlncm91cF9ub2RlOwogCXVuc2lnbmVkIGludAkJb25fcnE7CiAKIAl1NjQJCQlleGVjX3N0YXJ0OwpAQCAtOTI0LDYgKzk1Myw5IEBACiAJdTY0CQkJdnJ1bnRpbWU7CiAJdTY0CQkJcHJldl9zdW1fZXhlY19ydW50aW1lOwogCisJdTY0CQkJbGFzdF93YWtldXA7CisJdTY0CQkJYXZnX292ZXJsYXA7CisKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXU2NAkJCXdhaXRfc3RhcnQ7CiAJdTY0CQkJd2FpdF9tYXg7CkBAIC05NzMsNiArMTAwNSw3IEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWludCBucl9jcHVzX2FsbG93ZWQ7CiAKKwlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpiYWNrOwogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkJKnBhcmVudDsKIAkvKiBycSBvbiB3aGljaCB0aGlzIGVudGl0eSBpcyAodG8gYmUpIHF1ZXVlZDogKi8KQEAgLTExODksNyArMTIyMiw3IEBACiAJaW50IHNvZnRpcnFfY29udGV4dDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19MT0NLREVQCi0jIGRlZmluZSBNQVhfTE9DS19ERVBUSCAzMFVMCisjIGRlZmluZSBNQVhfTE9DS19ERVBUSCA0OFVMCiAJdTY0IGN1cnJfY2hhaW5fa2V5OwogCWludCBsb2NrZGVwX2RlcHRoOwogCXN0cnVjdCBoZWxkX2xvY2sgaGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07CkBAIC0xNDkzLDE1ICsxNTI2LDIxIEBACiAjZGVmaW5lIHVzZWRfbWF0aCgpIHRza191c2VkX21hdGgoY3VycmVudCkKIAogI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiBpbnQgc2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdW1hc2tfdCBuZXdfbWFzayk7CitleHRlcm4gaW50IHNldF9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQljb25zdCBjcHVtYXNrX3QgKm5ld19tYXNrKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBzZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1bWFza190IG5ld19tYXNrKQorc3RhdGljIGlubGluZSBpbnQgc2V0X2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCSAgICAgICBjb25zdCBjcHVtYXNrX3QgKm5ld19tYXNrKQogewotCWlmICghY3B1X2lzc2V0KDAsIG5ld19tYXNrKSkKKwlpZiAoIWNwdV9pc3NldCgwLCAqbmV3X21hc2spKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgorc3RhdGljIGlubGluZSBpbnQgc2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdW1hc2tfdCBuZXdfbWFzaykKK3sKKwlyZXR1cm4gc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgJm5ld19tYXNrKTsKK30KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKTsKIApAQCAtMTUzMiwxOSArMTU3MSwyMCBAQAogCiBleHRlcm4gdm9pZCBzY2hlZF9pZGxlX25leHQodm9pZCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgZGVmaW5lZChDT05GSUdfU01QKQorZXh0ZXJuIHZvaWQgd2FrZV91cF9pZGxlX2NwdShpbnQgY3B1KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV91cF9pZGxlX2NwdShpbnQgY3B1KSB7IH0KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCiBleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9sYXRlbmN5OwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5OwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwotZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfYmF0Y2hfd2FrZXVwX2dyYW51bGFyaXR5OwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfY2hpbGRfcnVuc19maXJzdDsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2ZlYXR1cmVzOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7CiBleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9ucl9taWdyYXRlOwotI2lmIGRlZmluZWQoQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21pbl9iYWxfaW50X3NoYXJlczsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21heF9iYWxfaW50X3NoYXJlczsKLSNlbmRpZgogCiBpbnQgc2NoZWRfbnJfbGF0ZW5jeV9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCXN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbmd0aCwKQEAgLTE1NTMsNiArMTU5MywxMCBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfcnRfcGVyaW9kOwogZXh0ZXJuIGludCBzeXNjdGxfc2NoZWRfcnRfcnVudGltZTsKIAoraW50IHNjaGVkX3J0X2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwKKwkJbG9mZl90ICpwcG9zKTsKKwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfY29tcGF0X3lpZWxkOwogCiAjaWZkZWYgQ09ORklHX1JUX01VVEVYRVMKQEAgLTIwMjAsNyArMjA2NCw3IEBACiB9CiAjZW5kaWYKIAotZXh0ZXJuIGxvbmcgc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCBjcHVtYXNrX3QgbmV3X21hc2spOworZXh0ZXJuIGxvbmcgc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCBjb25zdCBjcHVtYXNrX3QgKm5ld19tYXNrKTsKIGV4dGVybiBsb25nIHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgY3B1bWFza190ICptYXNrKTsKIAogZXh0ZXJuIGludCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzLCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5nczsKQEAgLTIwMzAsOCArMjA3NCwxMSBAQAogI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAogCiBleHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgaW5pdF90YXNrX2dyb3VwOworI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECitleHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgcm9vdF90YXNrX2dyb3VwOworI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3QgdGFza19ncm91cCAqc2NoZWRfY3JlYXRlX2dyb3VwKHZvaWQpOworZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwICpzY2hlZF9jcmVhdGVfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBzY2hlZF9kZXN0cm95X2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7CiBleHRlcm4gdm9pZCBzY2hlZF9tb3ZlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECkBAIC0yMDQyLDYgKzIwODksOSBAQAogZXh0ZXJuIGludCBzY2hlZF9ncm91cF9zZXRfcnRfcnVudGltZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsCiAJCQkJICAgICAgbG9uZyBydF9ydW50aW1lX3VzKTsKIGV4dGVybiBsb25nIHNjaGVkX2dyb3VwX3J0X3J1bnRpbWUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTsKK2V4dGVybiBpbnQgc2NoZWRfZ3JvdXBfc2V0X3J0X3BlcmlvZChzdHJ1Y3QgdGFza19ncm91cCAqdGcsCisJCQkJICAgICAgbG9uZyBydF9wZXJpb2RfdXMpOworZXh0ZXJuIGxvbmcgc2NoZWRfZ3JvdXBfcnRfcGVyaW9kKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggZmU1MmNkZS4uZmVhMWY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtMzQsMTUgKzM0LDEzIEBACiAjaW5jbHVkZSA8bGludXgveGZybS5oPgogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiAKLS8qIG9ubHkgYSBjaGFyIGluIHNlbGludXggc3VwZXJibG9jayBzZWN1cml0eSBzdHJ1Y3QgZmxhZ3MgKi8KLSNkZWZpbmUgRlNDT05URVhUX01OVAkJMHgwMQotI2RlZmluZSBDT05URVhUX01OVAkJMHgwMgotI2RlZmluZSBST09UQ09OVEVYVF9NTlQJCTB4MDQKLSNkZWZpbmUgREVGQ09OVEVYVF9NTlQJCTB4MDgKLQogZXh0ZXJuIHVuc2lnbmVkIHNlY3VyZWJpdHM7CiAKKy8qIE1heGltdW0gbnVtYmVyIG9mIGxldHRlcnMgZm9yIGFuIExTTSBuYW1lIHN0cmluZyAqLworI2RlZmluZSBTRUNVUklUWV9OQU1FX01BWAkxMAorCiBzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IGF1ZGl0X2tydWxlOwogCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBzZWN1cml0eS9jYXBhYmlsaXR5LmMgYW5kIGFyZSB1c2VkCkBAIC02Myw3ICs2MSw2IEBACiBleHRlcm4gaW50IGNhcF9pbm9kZV9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogZXh0ZXJuIGludCBjYXBfdGFza19wb3N0X3NldHVpZCAodWlkX3Qgb2xkX3J1aWQsIHVpZF90IG9sZF9ldWlkLCB1aWRfdCBvbGRfc3VpZCwgaW50IGZsYWdzKTsKIGV4dGVybiB2b2lkIGNhcF90YXNrX3JlcGFyZW50X3RvX2luaXQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Ci1leHRlcm4gaW50IGNhcF90YXNrX2tpbGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZywgdTMyIHNlY2lkKTsKIGV4dGVybiBpbnQgY2FwX3Rhc2tfc2V0c2NoZWR1bGVyIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwb2xpY3ksIHN0cnVjdCBzY2hlZF9wYXJhbSAqbHApOwogZXh0ZXJuIGludCBjYXBfdGFza19zZXRpb3ByaW8gKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGlvcHJpbyk7CiBleHRlcm4gaW50IGNhcF90YXNrX3NldG5pY2UgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pY2UpOwpAQCAtMTE0LDkgKzExMSw0MSBAQAogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAKK3N0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyB7CisJY2hhciAqKm1udF9vcHRzOworCWludCAqbW50X29wdHNfZmxhZ3M7CisJaW50IG51bV9tbnRfb3B0czsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbml0X21udF9vcHRzKHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKK3sKKwlvcHRzLT5tbnRfb3B0cyA9IE5VTEw7CisJb3B0cy0+bW50X29wdHNfZmxhZ3MgPSBOVUxMOworCW9wdHMtPm51bV9tbnRfb3B0cyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9mcmVlX21udF9vcHRzKHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKK3sKKwlpbnQgaTsKKwlpZiAob3B0cy0+bW50X29wdHMpCisJCWZvcihpID0gMDsgaSA8IG9wdHMtPm51bV9tbnRfb3B0czsgaSsrKQorCQkJa2ZyZWUob3B0cy0+bW50X29wdHNbaV0pOworCWtmcmVlKG9wdHMtPm1udF9vcHRzKTsKKwlvcHRzLT5tbnRfb3B0cyA9IE5VTEw7CisJa2ZyZWUob3B0cy0+bW50X29wdHNfZmxhZ3MpOworCW9wdHMtPm1udF9vcHRzX2ZsYWdzID0gTlVMTDsKKwlvcHRzLT5udW1fbW50X29wdHMgPSAwOworfQorCiAvKioKICAqIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIC0gbWFpbiBzZWN1cml0eSBzdHJ1Y3R1cmUKICAqCisgKiBTZWN1cml0eSBtb2R1bGUgaWRlbnRpZmllci4KKyAqCisgKiBAbmFtZToKKyAqCUEgc3RyaW5nIHRoYXQgYWN0cyBhcyBhIHVuaXF1ZSBpZGVudGlmZWlyIGZvciB0aGUgTFNNIHdpdGggbWF4IG51bWJlcgorICoJb2YgY2hhcmFjdGVycyA9IFNFQ1VSSVRZX05BTUVfTUFYLgorICoKICAqIFNlY3VyaXR5IGhvb2tzIGZvciBwcm9ncmFtIGV4ZWN1dGlvbiBvcGVyYXRpb25zLgogICoKICAqIEBicHJtX2FsbG9jX3NlY3VyaXR5OgpAQCAtMjYyLDE5ICsyOTEsMTkgQEAKICAqIEBzYl9nZXRfbW50X29wdHM6CiAgKglHZXQgdGhlIHNlY3VyaXR5IHJlbGV2YW50IG1vdW50IG9wdGlvbnMgdXNlZCBmb3IgYSBzdXBlcmJsb2NrCiAgKglAc2IgdGhlIHN1cGVyYmxvY2sgdG8gZ2V0IHNlY3VyaXR5IG1vdW50IG9wdGlvbnMgZnJvbQotICoJQG1vdW50X29wdGlvbnMgYXJyYXkgZm9yIHBvaW50ZXJzIHRvIG1vdW50IG9wdGlvbnMKLSAqCUBtb3VudF9mbGFncyBhcnJheSBvZiBpbnRzIHNwZWNpZnlpbmcgd2hhdCBlYWNoIG1vdW50IG9wdGlvbnMgaXMKLSAqCUBudW1fb3B0cyBudW1iZXIgb2Ygb3B0aW9ucyBpbiB0aGUgYXJyYXlzCisgKglAb3B0cyBiaW5hcnkgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgbHNtIG1vdW50IGRhdGEKICAqIEBzYl9zZXRfbW50X29wdHM6CiAgKglTZXQgdGhlIHNlY3VyaXR5IHJlbGV2YW50IG1vdW50IG9wdGlvbnMgdXNlZCBmb3IgYSBzdXBlcmJsb2NrCiAgKglAc2IgdGhlIHN1cGVyYmxvY2sgdG8gc2V0IHNlY3VyaXR5IG1vdW50IG9wdGlvbnMgZm9yCi0gKglAbW91bnRfb3B0aW9ucyBhcnJheSBmb3IgcG9pbnRlcnMgdG8gbW91bnQgb3B0aW9ucwotICoJQG1vdW50X2ZsYWdzIGFycmF5IG9mIGludHMgc3BlY2lmeWluZyB3aGF0IGVhY2ggbW91bnQgb3B0aW9ucyBpcwotICoJQG51bV9vcHRzIG51bWJlciBvZiBvcHRpb25zIGluIHRoZSBhcnJheXMKKyAqCUBvcHRzIGJpbmFyeSBkYXRhIHN0cnVjdHVyZSBjb250YWluaW5nIGFsbCBsc20gbW91bnQgZGF0YQogICogQHNiX2Nsb25lX21udF9vcHRzOgogICoJQ29weSBhbGwgc2VjdXJpdHkgb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gc3VwZXJibG9jayB0byBhbm90aGVyCiAgKglAb2xkc2Igb2xkIHN1cGVyYmxvY2sgd2hpY2ggY29udGFpbiBpbmZvcm1hdGlvbiB0byBjbG9uZQogICoJQG5ld3NiIG5ldyBzdXBlcmJsb2NrIHdoaWNoIG5lZWRzIGZpbGxlZCBpbgorICogQHNiX3BhcnNlX29wdHNfc3RyOgorICoJUGFyc2UgYSBzdHJpbmcgb2Ygc2VjdXJpdHkgZGF0YSBmaWxsaW5nIGluIHRoZSBvcHRzIHN0cnVjdHVyZQorICoJQG9wdGlvbnMgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIG1vdW50IG9wdGlvbnMga25vd24gYnkgdGhlIExTTQorICoJQG9wdHMgYmluYXJ5IGRhdGEgc3RydWN0dXJlIHVzYWJsZSBieSB0aGUgTFNNCiAgKgogICogU2VjdXJpdHkgaG9va3MgZm9yIGlub2RlIG9wZXJhdGlvbnMuCiAgKgpAQCAtNDQ5LDYgKzQ3OCwxMSBAQAogICoJQGRlbnRyeSBpcyB0aGUgZGVudHJ5IGJlaW5nIGNoYW5nZWQuCiAgKglSZXR1cm4gMCBvbiBzdWNjZXNzLiAgSWYgZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIG9wZXJhdGlvbgogICoJY2F1c2luZyBzZXR1aWQgYml0IHJlbW92YWwgaXMgZmFpbGVkLgorICogQGlub2RlX2dldHNlY2lkOgorICoJR2V0IHRoZSBzZWNpZCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuCisgKglAaW5vZGUgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBpbm9kZS4KKyAqCUBzZWNpZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHJlc3VsdCB3aWxsIGJlIHNhdmVkLgorICoJSW4gY2FzZSBvZiBmYWlsdXJlLCBAc2VjaWQgd2lsbCBiZSBzZXQgdG8gemVyby4KICAqCiAgKiBTZWN1cml0eSBob29rcyBmb3IgZmlsZSBvcGVyYXRpb25zCiAgKgpAQCAtNjE3LDYgKzY1MSw4IEBACiAgKiBAdGFza19nZXRzZWNpZDoKICAqCVJldHJpZXZlIHRoZSBzZWN1cml0eSBpZGVudGlmaWVyIG9mIHRoZSBwcm9jZXNzIEBwLgogICoJQHAgY29udGFpbnMgdGhlIHRhc2tfc3RydWN0IGZvciB0aGUgcHJvY2VzcyBhbmQgcGxhY2UgaXMgaW50byBAc2VjaWQuCisgKglJbiBjYXNlIG9mIGZhaWx1cmUsIEBzZWNpZCB3aWxsIGJlIHNldCB0byB6ZXJvLgorICoKICAqIEB0YXNrX3NldGdyb3VwczoKICAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgdGhlIHN1cHBsZW1lbnRhcnkgZ3JvdXAgc2V0IG9mIHRoZQogICoJY3VycmVudCBwcm9jZXNzLgpAQCAtODkxLDI0ICs5MjcsMjQgQEAKICAqIFNlY3VyaXR5IGhvb2tzIGZvciBYRlJNIG9wZXJhdGlvbnMuCiAgKgogICogQHhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5OgotICoJQHhwIGNvbnRhaW5zIHRoZSB4ZnJtX3BvbGljeSBiZWluZyBhZGRlZCB0byBTZWN1cml0eSBQb2xpY3kgRGF0YWJhc2UKLSAqCXVzZWQgYnkgdGhlIFhGUk0gc3lzdGVtLgorICoJQGN0eHAgaXMgYSBwb2ludGVyIHRvIHRoZSB4ZnJtX3NlY19jdHggYmVpbmcgYWRkZWQgdG8gU2VjdXJpdHkgUG9saWN5CisgKglEYXRhYmFzZSB1c2VkIGJ5IHRoZSBYRlJNIHN5c3RlbS4KICAqCUBzZWNfY3R4IGNvbnRhaW5zIHRoZSBzZWN1cml0eSBjb250ZXh0IGluZm9ybWF0aW9uIGJlaW5nIHByb3ZpZGVkIGJ5CiAgKgl0aGUgdXNlci1sZXZlbCBwb2xpY3kgdXBkYXRlIHByb2dyYW0gKGUuZy4sIHNldGtleSkuCiAgKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgeHAtPnNlY3VyaXR5IGZpZWxkOyB0aGUgc2VjdXJpdHkKICAqCWZpZWxkIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgd2hlbiB0aGUgeGZybV9wb2xpY3kgaXMgYWxsb2NhdGVkLgogICoJUmV0dXJuIDAgaWYgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIChtZW1vcnkgdG8gYWxsb2NhdGUsIGxlZ2FsIGNvbnRleHQpCiAgKiBAeGZybV9wb2xpY3lfY2xvbmVfc2VjdXJpdHk6Ci0gKglAb2xkIGNvbnRhaW5zIGFuIGV4aXN0aW5nIHhmcm1fcG9saWN5IGluIHRoZSBTUEQuCi0gKglAbmV3IGNvbnRhaW5zIGEgbmV3IHhmcm1fcG9saWN5IGJlaW5nIGNsb25lZCBmcm9tIG9sZC4KLSAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSBuZXctPnNlY3VyaXR5IGZpZWxkCi0gKgl0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvbGQtPnNlY3VyaXR5IGZpZWxkLgorICoJQG9sZF9jdHggY29udGFpbnMgYW4gZXhpc3RpbmcgeGZybV9zZWNfY3R4LgorICoJQG5ld19jdHhwIGNvbnRhaW5zIGEgbmV3IHhmcm1fc2VjX2N0eCBiZWluZyBjbG9uZWQgZnJvbSBvbGQuCisgKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSBpbiBuZXdfY3R4cCB0aGF0IGNvbnRhaW5zIHRoZQorICoJaW5mb3JtYXRpb24gZnJvbSB0aGUgb2xkX2N0eCBzdHJ1Y3R1cmUuCiAgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKG1lbW9yeSB0byBhbGxvY2F0ZSkuCiAgKiBAeGZybV9wb2xpY3lfZnJlZV9zZWN1cml0eToKLSAqCUB4cCBjb250YWlucyB0aGUgeGZybV9wb2xpY3kKKyAqCUBjdHggY29udGFpbnMgdGhlIHhmcm1fc2VjX2N0eAogICoJRGVhbGxvY2F0ZSB4cC0+c2VjdXJpdHkuCiAgKiBAeGZybV9wb2xpY3lfZGVsZXRlX3NlY3VyaXR5OgotICoJQHhwIGNvbnRhaW5zIHRoZSB4ZnJtX3BvbGljeS4KKyAqCUBjdHggY29udGFpbnMgdGhlIHhmcm1fc2VjX2N0eC4KICAqCUF1dGhvcml6ZSBkZWxldGlvbiBvZiB4cC0+c2VjdXJpdHkuCiAgKiBAeGZybV9zdGF0ZV9hbGxvY19zZWN1cml0eToKICAqCUB4IGNvbnRhaW5zIHRoZSB4ZnJtX3N0YXRlIGJlaW5nIGFkZGVkIHRvIHRoZSBTZWN1cml0eSBBc3NvY2lhdGlvbgpAQCAtOTI4LDcgKzk2NCw3IEBACiAgKglAeCBjb250YWlucyB0aGUgeGZybV9zdGF0ZS4KICAqCUF1dGhvcml6ZSBkZWxldGlvbiBvZiB4LT5zZWN1cml0eS4KICAqIEB4ZnJtX3BvbGljeV9sb29rdXA6Ci0gKglAeHAgY29udGFpbnMgdGhlIHhmcm1fcG9saWN5IGZvciB3aGljaCB0aGUgYWNjZXNzIGNvbnRyb2wgaXMgYmVpbmcKKyAqCUBjdHggY29udGFpbnMgdGhlIHhmcm1fc2VjX2N0eCBmb3Igd2hpY2ggdGhlIGFjY2VzcyBjb250cm9sIGlzIGJlaW5nCiAgKgljaGVja2VkLgogICoJQGZsX3NlY2lkIGNvbnRhaW5zIHRoZSBmbG93IHNlY3VyaXR5IGxhYmVsIHRoYXQgaXMgdXNlZCB0byBhdXRob3JpemUKICAqCWFjY2VzcyB0byB0aGUgcG9saWN5IHhwLgpAQCAtOTc4LDYgKzEwMTQsMTEgQEAKICAqCUBpcGNwIGNvbnRhaW5zIHRoZSBrZXJuZWwgSVBDIHBlcm1pc3Npb24gc3RydWN0dXJlCiAgKglAZmxhZyBjb250YWlucyB0aGUgZGVzaXJlZCAocmVxdWVzdGVkKSBwZXJtaXNzaW9uIHNldAogICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQGlwY19nZXRzZWNpZDoKKyAqCUdldCB0aGUgc2VjaWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpcGMgb2JqZWN0LgorICoJQGlwY3AgY29udGFpbnMgdGhlIGtlcm5lbCBJUEMgcGVybWlzc2lvbiBzdHJ1Y3R1cmUuCisgKglAc2VjaWQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSByZXN1bHQgd2lsbCBiZSBzYXZlZC4KKyAqCUluIGNhc2Ugb2YgZmFpbHVyZSwgQHNlY2lkIHdpbGwgYmUgc2V0IHRvIHplcm8uCiAgKgogICogU2VjdXJpdHkgaG9va3MgZm9yIGluZGl2aWR1YWwgbWVzc2FnZXMgaGVsZCBpbiBTeXN0ZW0gViBJUEMgbWVzc2FnZSBxdWV1ZXMKICAqIEBtc2dfbXNnX2FsbG9jX3NlY3VyaXR5OgpAQCAtMTIwNCw5ICsxMjQ1LDQyIEBACiAgKglAc2VjZGF0YSBjb250YWlucyB0aGUgc2VjdXJpdHkgY29udGV4dC4KICAqCUBzZWNsZW4gY29udGFpbnMgdGhlIGxlbmd0aCBvZiB0aGUgc2VjdXJpdHkgY29udGV4dC4KICAqCisgKiBTZWN1cml0eSBob29rcyBmb3IgQXVkaXQKKyAqCisgKiBAYXVkaXRfcnVsZV9pbml0OgorICoJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gTFNNIGF1ZGl0IHJ1bGUgc3RydWN0dXJlLgorICoJQGZpZWxkIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBBdWRpdCBhY3Rpb24uIEZpZWxkcyBmbGFncyBhcmUgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKyAqCUBvcCBjb250YWlucyB0aGUgb3BlcmF0b3IgdGhlIHJ1bGUgdXNlcy4KKyAqCUBydWxlc3RyIGNvbnRhaW5zIHRoZSBjb250ZXh0IHdoZXJlIHRoZSBydWxlIHdpbGwgYmUgYXBwbGllZCB0by4KKyAqCUBsc21ydWxlIGNvbnRhaW5zIGEgcG9pbnRlciB0byByZWNlaXZlIHRoZSByZXN1bHQuCisgKglSZXR1cm4gMCBpZiBAbHNtcnVsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0LAorICoJLUVJTlZBTCBpbiBjYXNlIG9mIGFuIGludmFsaWQgcnVsZS4KKyAqCisgKiBAYXVkaXRfcnVsZV9rbm93bjoKKyAqCVNwZWNpZmllcyB3aGV0aGVyIGdpdmVuIEBydWxlIGNvbnRhaW5zIGFueSBmaWVsZHMgcmVsYXRlZCB0byBjdXJyZW50IExTTS4KKyAqCUBydWxlIGNvbnRhaW5zIHRoZSBhdWRpdCBydWxlIG9mIGludGVyZXN0LgorICoJUmV0dXJuIDEgaW4gY2FzZSBvZiByZWxhdGlvbiBmb3VuZCwgMCBvdGhlcndpc2UuCisgKgorICogQGF1ZGl0X3J1bGVfbWF0Y2g6CisgKglEZXRlcm1pbmUgaWYgZ2l2ZW4gQHNlY2lkIG1hdGNoZXMgYSBydWxlIHByZXZpb3VzbHkgYXBwcm92ZWQKKyAqCWJ5IEBhdWRpdF9ydWxlX2tub3duLgorICoJQHNlY2lkIGNvbnRhaW5zIHRoZSBzZWN1cml0eSBpZCBpbiBxdWVzdGlvbi4KKyAqCUBmaWVsZCBjb250YWlucyB0aGUgZmllbGQgd2hpY2ggcmVsYXRlcyB0byBjdXJyZW50IExTTS4KKyAqCUBvcCBjb250YWlucyB0aGUgb3BlcmF0b3IgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIG1hdGNoaW5nLgorICoJQHJ1bGUgcG9pbnRzIHRvIHRoZSBhdWRpdCBydWxlIHRoYXQgd2lsbCBiZSBjaGVja2VkIGFnYWluc3QuCisgKglAYWN0eCBwb2ludHMgdG8gdGhlIGF1ZGl0IGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGVjay4KKyAqCVJldHVybiAxIGlmIHNlY2lkIG1hdGNoZXMgdGhlIHJ1bGUsIDAgaWYgaXQgZG9lcyBub3QsIC1FUlJOTyBvbiBmYWlsdXJlLgorICoKKyAqIEBhdWRpdF9ydWxlX2ZyZWU6CisgKglEZWFsbG9jYXRlIHRoZSBMU00gYXVkaXQgcnVsZSBzdHJ1Y3R1cmUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkKKyAqCWF1ZGl0X3J1bGVfaW5pdC4KKyAqCUBydWxlIGNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgcnVsZQorICoKICAqIFRoaXMgaXMgdGhlIG1haW4gc2VjdXJpdHkgc3RydWN0dXJlLgogICovCiBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyB7CisJY2hhciBuYW1lW1NFQ1VSSVRZX05BTUVfTUFYICsgMV07CisKIAlpbnQgKCpwdHJhY2UpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwYXJlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGNoaWxkKTsKIAlpbnQgKCpjYXBnZXQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXJnZXQsCiAJCSAgICAgICBrZXJuZWxfY2FwX3QgKiBlZmZlY3RpdmUsCkBAIC0xMjM4LDggKzEzMTIsNyBAQAogCiAJaW50ICgqc2JfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYik7CiAJdm9pZCAoKnNiX2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYik7Ci0JaW50ICgqc2JfY29weV9kYXRhKShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKLQkJCSAgICB2b2lkICpvcmlnLCB2b2lkICpjb3B5KTsKKwlpbnQgKCpzYl9jb3B5X2RhdGEpKGNoYXIgKm9yaWcsIGNoYXIgKmNvcHkpOwogCWludCAoKnNiX2tlcm5fbW91bnQpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhKTsKIAlpbnQgKCpzYl9zdGF0ZnMpIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKnNiX21vdW50KSAoY2hhciAqZGV2X25hbWUsIHN0cnVjdCBuYW1laWRhdGEgKiBuZCwKQEAgLTEyNTcsMTIgKzEzMzAsMTIgQEAKIAl2b2lkICgqc2JfcG9zdF9waXZvdHJvb3QpIChzdHJ1Y3QgbmFtZWlkYXRhICogb2xkX25kLAogCQkJCSAgIHN0cnVjdCBuYW1laWRhdGEgKiBuZXdfbmQpOwogCWludCAoKnNiX2dldF9tbnRfb3B0cykgKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJY2hhciAqKiptb3VudF9vcHRpb25zLCBpbnQgKipmbGFncywKLQkJCQlpbnQgKm51bV9vcHRzKTsKLQlpbnQgKCpzYl9zZXRfbW50X29wdHMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICoqbW91bnRfb3B0aW9ucywKLQkJCQlpbnQgKmZsYWdzLCBpbnQgbnVtX29wdHMpOworCQkJCXN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cyk7CisJaW50ICgqc2Jfc2V0X21udF9vcHRzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpOwogCXZvaWQgKCpzYl9jbG9uZV9tbnRfb3B0cykgKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqb2xkc2IsCiAJCQkJICAgc3RydWN0IHN1cGVyX2Jsb2NrICpuZXdzYik7CisJaW50ICgqc2JfcGFyc2Vfb3B0c19zdHIpIChjaGFyICpvcHRpb25zLCBzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpOwogCiAJaW50ICgqaW5vZGVfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsJCiAJdm9pZCAoKmlub2RlX2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTEyOTksNiArMTM3Miw3IEBACiAJaW50ICgqaW5vZGVfZ2V0c2VjdXJpdHkpKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKipidWZmZXIsIGJvb2wgYWxsb2MpOwogICAJaW50ICgqaW5vZGVfc2V0c2VjdXJpdHkpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKICAgCWludCAoKmlub2RlX2xpc3RzZWN1cml0eSkoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpOworCXZvaWQgKCppbm9kZV9nZXRzZWNpZCkoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpzZWNpZCk7CiAKIAlpbnQgKCpmaWxlX3Blcm1pc3Npb24pIChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGludCBtYXNrKTsKIAlpbnQgKCpmaWxlX2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IGZpbGUgKiBmaWxlKTsKQEAgLTEzNTEsNiArMTQyNSw3IEBACiAJdm9pZCAoKnRhc2tfdG9faW5vZGUpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIAlpbnQgKCppcGNfcGVybWlzc2lvbikgKHN0cnVjdCBrZXJuX2lwY19wZXJtICogaXBjcCwgc2hvcnQgZmxhZyk7CisJdm9pZCAoKmlwY19nZXRzZWNpZCkgKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB1MzIgKnNlY2lkKTsKIAogCWludCAoKm1zZ19tc2dfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3QgbXNnX21zZyAqIG1zZyk7CiAJdm9pZCAoKm1zZ19tc2dfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCBtc2dfbXNnICogbXNnKTsKQEAgLTE0MzYsMTcgKzE1MTEsMTcgQEAKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQotCWludCAoKnhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwKKwlpbnQgKCp4ZnJtX3BvbGljeV9hbGxvY19zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3NlY19jdHggKipjdHhwLAogCQkJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKLQlpbnQgKCp4ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldyk7Ci0Jdm9pZCAoKnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKLQlpbnQgKCp4ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKKwlpbnQgKCp4ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3NlY19jdHggKm9sZF9jdHgsIHN0cnVjdCB4ZnJtX3NlY19jdHggKipuZXdfY3R4KTsKKwl2b2lkICgqeGZybV9wb2xpY3lfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCk7CisJaW50ICgqeGZybV9wb2xpY3lfZGVsZXRlX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4KTsKIAlpbnQgKCp4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCwKIAkJdTMyIHNlY2lkKTsKIAl2b2lkICgqeGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCWludCAoKnhmcm1fc3RhdGVfZGVsZXRlX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fc3RhdGUgKngpOwotCWludCAoKnhmcm1fcG9saWN5X2xvb2t1cCkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIGZsX3NlY2lkLCB1OCBkaXIpOworCWludCAoKnhmcm1fcG9saWN5X2xvb2t1cCkoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4LCB1MzIgZmxfc2VjaWQsIHU4IGRpcik7CiAJaW50ICgqeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCkoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJCQlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKIAlpbnQgKCp4ZnJtX2RlY29kZV9zZXNzaW9uKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnNlY2lkLCBpbnQgY2thbGwpOwpAQCAtMTQ2MiwxMCArMTUzNywxOCBAQAogCiAjZW5kaWYJLyogQ09ORklHX0tFWVMgKi8KIAorI2lmZGVmIENPTkZJR19BVURJVAorCWludCAoKmF1ZGl0X3J1bGVfaW5pdCkodTMyIGZpZWxkLCB1MzIgb3AsIGNoYXIgKnJ1bGVzdHIsIHZvaWQgKipsc21ydWxlKTsKKwlpbnQgKCphdWRpdF9ydWxlX2tub3duKShzdHJ1Y3QgYXVkaXRfa3J1bGUgKmtydWxlKTsKKwlpbnQgKCphdWRpdF9ydWxlX21hdGNoKSh1MzIgc2VjaWQsIHUzMiBmaWVsZCwgdTMyIG9wLCB2b2lkICpsc21ydWxlLAorCQkJCXN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KTsKKwl2b2lkICgqYXVkaXRfcnVsZV9mcmVlKSh2b2lkICpsc21ydWxlKTsKKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KIH07CiAKIC8qIHByb3RvdHlwZXMgKi8KIGV4dGVybiBpbnQgc2VjdXJpdHlfaW5pdAkodm9pZCk7CitleHRlcm4gaW50IHNlY3VyaXR5X21vZHVsZV9lbmFibGUoc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcyk7CiBleHRlcm4gaW50IHJlZ2lzdGVyX3NlY3VyaXR5CShzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKTsKIGV4dGVybiBpbnQgbW9kX3JlZ19zZWN1cml0eQkoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcyk7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqc2VjdXJpdHlmc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKQEAgLTE1MDcsNyArMTU5MCw3IEBACiBpbnQgc2VjdXJpdHlfYnBybV9zZWN1cmVleGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwogaW50IHNlY3VyaXR5X3NiX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogdm9pZCBzZWN1cml0eV9zYl9mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotaW50IHNlY3VyaXR5X3NiX2NvcHlfZGF0YShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgdm9pZCAqb3JpZywgdm9pZCAqY29weSk7CitpbnQgc2VjdXJpdHlfc2JfY29weV9kYXRhKGNoYXIgKm9yaWcsIGNoYXIgKmNvcHkpOwogaW50IHNlY3VyaXR5X3NiX2tlcm5fbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSk7CiBpbnQgc2VjdXJpdHlfc2Jfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBpbnQgc2VjdXJpdHlfc2JfbW91bnQoY2hhciAqZGV2X25hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kLApAQCAtMTUyMCwxMiArMTYwMywxMiBAQAogdm9pZCBzZWN1cml0eV9zYl9wb3N0X2FkZG1vdW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgbmFtZWlkYXRhICptb3VudHBvaW50X25kKTsKIGludCBzZWN1cml0eV9zYl9waXZvdHJvb3Qoc3RydWN0IG5hbWVpZGF0YSAqb2xkX25kLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZXdfbmQpOwogdm9pZCBzZWN1cml0eV9zYl9wb3N0X3Bpdm90cm9vdChzdHJ1Y3QgbmFtZWlkYXRhICpvbGRfbmQsIHN0cnVjdCBuYW1laWRhdGEgKm5ld19uZCk7Ci1pbnQgc2VjdXJpdHlfc2JfZ2V0X21udF9vcHRzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKioqbW91bnRfb3B0aW9ucywKLQkJCSAgICAgaW50ICoqZmxhZ3MsIGludCAqbnVtX29wdHMpOwotaW50IHNlY3VyaXR5X3NiX3NldF9tbnRfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICoqbW91bnRfb3B0aW9ucywKLQkJCSAgICAgaW50ICpmbGFncywgaW50IG51bV9vcHRzKTsKK2ludCBzZWN1cml0eV9zYl9nZXRfbW50X29wdHMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpOworaW50IHNlY3VyaXR5X3NiX3NldF9tbnRfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpOwogdm9pZCBzZWN1cml0eV9zYl9jbG9uZV9tbnRfb3B0cyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9sZHNiLAogCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqbmV3c2IpOworaW50IHNlY3VyaXR5X3NiX3BhcnNlX29wdHNfc3RyKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cyk7CiAKIGludCBzZWN1cml0eV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTE1NjAsNiArMTY0Myw3IEBACiBpbnQgc2VjdXJpdHlfaW5vZGVfZ2V0c2VjdXJpdHkoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqKmJ1ZmZlciwgYm9vbCBhbGxvYyk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0c2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwogaW50IHNlY3VyaXR5X2lub2RlX2xpc3RzZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSk7Cit2b2lkIHNlY3VyaXR5X2lub2RlX2dldHNlY2lkKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqc2VjaWQpOwogaW50IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spOwogaW50IHNlY3VyaXR5X2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmZpbGUpOwogdm9pZCBzZWN1cml0eV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOwpAQCAtMTYwNCw2ICsxNjg4LDcgQEAKIHZvaWQgc2VjdXJpdHlfdGFza19yZXBhcmVudF90b19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiB2b2lkIHNlY3VyaXR5X3Rhc2tfdG9faW5vZGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBzZWN1cml0eV9pcGNfcGVybWlzc2lvbihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgc2hvcnQgZmxhZyk7Cit2b2lkIHNlY3VyaXR5X2lwY19nZXRzZWNpZChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgdTMyICpzZWNpZCk7CiBpbnQgc2VjdXJpdHlfbXNnX21zZ19hbGxvYyhzdHJ1Y3QgbXNnX21zZyAqbXNnKTsKIHZvaWQgc2VjdXJpdHlfbXNnX21zZ19mcmVlKHN0cnVjdCBtc2dfbXNnICptc2cpOwogaW50IHNlY3VyaXR5X21zZ19xdWV1ZV9hbGxvYyhzdHJ1Y3QgbXNnX3F1ZXVlICptc3EpOwpAQCAtMTYzNSw2ICsxNzIwLDE2IEBACiB2b2lkIHNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGNoYXIgKnNlY2RhdGEsIHUzMiBzZWNsZW4pOwogCiAjZWxzZSAvKiBDT05GSUdfU0VDVVJJVFkgKi8KK3N0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyB7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfaW5pdF9tbnRfb3B0cyhzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9mcmVlX21udF9vcHRzKHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKK3sKK30KIAogLyoKICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgY2FwYWJpbGl0aWVzIGZ1bmN0aW9uYWxpdHkuICBNb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucwpAQCAtMTc2Miw4ICsxODU3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zYl9mcmVlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogeyB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NiX2NvcHlfZGF0YSAoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsCi0JCQkJCSB2b2lkICpvcmlnLCB2b2lkICpjb3B5KQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfY29weV9kYXRhIChjaGFyICpvcmlnLCBjaGFyICpjb3B5KQogewogCXJldHVybiAwOwogfQpAQCAtMTgxOSw2ICsxOTEzLDI3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2JfcG9zdF9waXZvdHJvb3QgKHN0cnVjdCBuYW1laWRhdGEgKm9sZF9uZCwKIAkJCQkJICAgICAgIHN0cnVjdCBuYW1laWRhdGEgKm5ld19uZCkKIHsgfQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2JfZ2V0X21udF9vcHRzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCSAgIHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKK3sKKwlzZWN1cml0eV9pbml0X21udF9vcHRzKG9wdHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zYl9zZXRfbW50X29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJICAgc3RydWN0IHNlY3VyaXR5X21udF9vcHRzICpvcHRzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2JfY2xvbmVfbW50X29wdHMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpvbGRzYiwKKwkJCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpuZXdzYikKK3sgfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zYl9wYXJzZV9vcHRzX3N0cihjaGFyICpvcHRpb25zLCBzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpCit7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2FsbG9jIChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMTk3NCw2ICsyMDg5LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbm9kZV9nZXRzZWNpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNlY2lkKQoreworCSpzZWNpZCA9IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewogCXJldHVybiAwOwpAQCAtMjA4OSw3ICsyMjA5LDkgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3Rhc2tfZ2V0c2VjaWQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTMyICpzZWNpZCkKLXsgfQoreworCSpzZWNpZCA9IDA7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0Z3JvdXBzIChzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbykKIHsKQEAgLTIxMzgsNyArMjI2MCw3IEBACiAJCQkJICAgICAgc3RydWN0IHNpZ2luZm8gKmluZm8sIGludCBzaWcsCiAJCQkJICAgICAgdTMyIHNlY2lkKQogewotCXJldHVybiBjYXBfdGFza19raWxsKHAsIGluZm8sIHNpZywgc2VjaWQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3dhaXQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKQEAgLTIxNjgsNiArMjI5MCwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfaXBjX2dldHNlY2lkKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB1MzIgKnNlY2lkKQoreworCSpzZWNpZCA9IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21zZ19tc2dfYWxsb2MgKHN0cnVjdCBtc2dfbXNnICogbXNnKQogewogCXJldHVybiAwOwpAQCAtMjUxNCwxNiArMjY0MSwxNiBAQAogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQogCi1pbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2Moc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKLWludCBzZWN1cml0eV94ZnJtX3BvbGljeV9jbG9uZShzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgc3RydWN0IHhmcm1fcG9saWN5ICpuZXcpOwotdm9pZCBzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApOwotaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKK2ludCBzZWN1cml0eV94ZnJtX3BvbGljeV9hbGxvYyhzdHJ1Y3QgeGZybV9zZWNfY3R4ICoqY3R4cCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKK2ludCBzZWN1cml0eV94ZnJtX3BvbGljeV9jbG9uZShzdHJ1Y3QgeGZybV9zZWNfY3R4ICpvbGRfY3R4LCBzdHJ1Y3QgeGZybV9zZWNfY3R4ICoqbmV3X2N0eHApOwordm9pZCBzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCk7CitpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCk7CiBpbnQgc2VjdXJpdHlfeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jX2FjcXVpcmUoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJCQkJICAgICAgc3RydWN0IHhmcm1fc2VjX2N0eCAqcG9sc2VjLCB1MzIgc2VjaWQpOwogaW50IHNlY3VyaXR5X3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIHZvaWQgc2VjdXJpdHlfeGZybV9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKLWludCBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIGZsX3NlY2lkLCB1OCBkaXIpOworaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgsIHUzMiBmbF9zZWNpZCwgdTggZGlyKTsKIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX3BvbF9mbG93X21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJCSAgICAgICBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKIGludCBzZWN1cml0eV94ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2VjaWQpOwpAQCAtMjUzMSwyMSArMjY1OCwyMSBAQAogCiAjZWxzZQkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCkKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3NlY19jdHggKipjdHhwLCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2Nsb25lKHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldykKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2Nsb25lKHN0cnVjdCB4ZnJtX3NlY19jdHggKm9sZCwgc3RydWN0IHhmcm1fc2VjX2N0eCAqKm5ld19jdHhwKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQorc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4KQogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTcxLDcgKzI2OTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIGZsX3NlY2lkLCB1OCBkaXIpCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4LCB1MzIgZmxfc2VjaWQsIHU4IGRpcikKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTI2MjQsNSArMjc1MSwzOCBAQAogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX0tFWVMgKi8KIAorI2lmZGVmIENPTkZJR19BVURJVAorI2lmZGVmIENPTkZJR19TRUNVUklUWQoraW50IHNlY3VyaXR5X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwgdm9pZCAqKmxzbXJ1bGUpOworaW50IHNlY3VyaXR5X2F1ZGl0X3J1bGVfa25vd24oc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSk7CitpbnQgc2VjdXJpdHlfYXVkaXRfcnVsZV9tYXRjaCh1MzIgc2VjaWQsIHUzMiBmaWVsZCwgdTMyIG9wLCB2b2lkICpsc21ydWxlLAorCQkJICAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmFjdHgpOwordm9pZCBzZWN1cml0eV9hdWRpdF9ydWxlX2ZyZWUodm9pZCAqbHNtcnVsZSk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKwkJCQkJICAgdm9pZCAqKmxzbXJ1bGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2F1ZGl0X3J1bGVfa25vd24oc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYXVkaXRfcnVsZV9tYXRjaCh1MzIgc2VjaWQsIHUzMiBmaWVsZCwgdTMyIG9wLAorCQkJCSAgIHZvaWQgKmxzbXJ1bGUsIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfYXVkaXRfcnVsZV9mcmVlKHZvaWQgKmxzbXJ1bGUpCit7IH0KKworI2VuZGlmIC8qIENPTkZJR19TRUNVUklUWSAqLworI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLworCiAjZW5kaWYgLyogISBfX0xJTlVYX1NFQ1VSSVRZX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWxpbnV4LmggYi9pbmNsdWRlL2xpbnV4L3NlbGludXguaAppbmRleCA4YzJjYzRjLi4yMGY5NjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlbGludXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbGludXguaApAQCAtMTYsOTkgKzE2LDExIEBACiAKIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGU7CiBzdHJ1Y3QgYXVkaXRfY29udGV4dDsKLXN0cnVjdCBpbm9kZTsKIHN0cnVjdCBrZXJuX2lwY19wZXJtOwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKIAogLyoqCi0gKglzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCAtIGFsbG9jL2luaXQgYW4gc2VsaW51eCBhdWRpdCBydWxlIHN0cnVjdHVyZS4KLSAqCUBmaWVsZDogdGhlIGZpZWxkIHRoaXMgcnVsZSByZWZlcnMgdG8KLSAqCUBvcDogdGhlIG9wZXJhdGVyIHRoZSBydWxlIHVzZXMKLSAqCUBydWxlc3RyOiB0aGUgdGV4dCAidGFyZ2V0IiBvZiB0aGUgcnVsZQotICoJQHJ1bGU6IHBvaW50ZXIgdG8gdGhlIG5ldyBydWxlIHN0cnVjdHVyZSByZXR1cm5lZCB2aWEgdGhpcwotICoKLSAqCVJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtZXJybm8gaWYgbm90LiAgT24gc3VjY2VzcywgdGhlIHJ1bGUgc3RydWN0dXJlCi0gKgl3aWxsIGJlIGFsbG9jYXRlZCBpbnRlcm5hbGx5LiAgVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhpcyBzdHJ1Y3R1cmUgd2l0aAotICoJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUoKSBhZnRlciB1c2UuCi0gKi8KLWludCBzZWxpbnV4X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICoqcnVsZSk7Ci0KLS8qKgotICoJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUgLSBmcmVlIGFuIHNlbGludXggYXVkaXQgcnVsZSBzdHJ1Y3R1cmUuCi0gKglAcnVsZTogcG9pbnRlciB0byB0aGUgYXVkaXQgcnVsZSB0byBiZSBmcmVlZAotICoKLSAqCVRoaXMgd2lsbCBmcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBydWxlLgotICoJSWYgQHJ1bGUgaXMgTlVMTCwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KLSAqLwotdm9pZCBzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZShzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICpydWxlKTsKLQotLyoqCi0gKglzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2ggLSBkZXRlcm1pbmUgaWYgYSBjb250ZXh0IElEIG1hdGNoZXMgYSBydWxlLgotICoJQHNpZDogdGhlIGNvbnRleHQgSUQgdG8gY2hlY2sKLSAqCUBmaWVsZDogdGhlIGZpZWxkIHRoaXMgcnVsZSByZWZlcnMgdG8KLSAqCUBvcDogdGhlIG9wZXJhdGVyIHRoZSBydWxlIHVzZXMKLSAqCUBydWxlOiBwb2ludGVyIHRvIHRoZSBhdWRpdCBydWxlIHRvIGNoZWNrIGFnYWluc3QKLSAqCUBhY3R4OiB0aGUgYXVkaXQgY29udGV4dCAoY2FuIGJlIE5VTEwpIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2sKLSAqCi0gKglSZXR1cm5zIDEgaWYgdGhlIGNvbnRleHQgaWQgbWF0Y2hlcyB0aGUgcnVsZSwgMCBpZiBpdCBkb2VzIG5vdCwgYW5kCi0gKgktZXJybm8gb24gZmFpbHVyZS4KLSAqLwotaW50IHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaCh1MzIgc2lkLCB1MzIgZmllbGQsIHUzMiBvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmFjdHgpOwotCi0vKioKLSAqCXNlbGludXhfYXVkaXRfc2V0X2NhbGxiYWNrIC0gc2V0IHRoZSBjYWxsYmFjayBmb3IgcG9saWN5IHJlbG9hZHMuCi0gKglAY2FsbGJhY2s6IHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHBvbGljeSBpcyByZWxvYWRlZAotICoKLSAqCVRoaXMgc2V0cyB0aGUgZnVuY3Rpb24gY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIHVwZGF0ZSB0aGUgcnVsZXMKLSAqCXVwb24gcG9saWN5IHJlbG9hZHMuICBUaGlzIGNhbGxiYWNrIHNob3VsZCByZWJ1aWxkIGFsbCBleGlzdGluZyBydWxlcwotICoJdXNpbmcgc2VsaW51eF9hdWRpdF9ydWxlX2luaXQoKS4KLSAqLwotdm9pZCBzZWxpbnV4X2F1ZGl0X3NldF9jYWxsYmFjayhpbnQgKCpjYWxsYmFjaykodm9pZCkpOwotCi0vKioKLSAqICAgICBzZWxpbnV4X3NpZF90b19zdHJpbmcgLSBtYXAgYSBzZWN1cml0eSBjb250ZXh0IElEIHRvIGEgc3RyaW5nCi0gKiAgICAgQHNpZDogc2VjdXJpdHkgY29udGV4dCBJRCB0byBiZSBjb252ZXJ0ZWQuCi0gKiAgICAgQGN0eDogYWRkcmVzcyBvZiBjb250ZXh0IHN0cmluZyB0byBiZSByZXR1cm5lZAotICogICAgIEBjdHhsZW46IGxlbmd0aCBvZiByZXR1cm5lZCBjb250ZXh0IHN0cmluZy4KLSAqCi0gKiAgICAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1lcnJubyBpZiBub3QuICBPbiBzdWNjZXNzLCB0aGUgY29udGV4dAotICogICAgIHN0cmluZyB3aWxsIGJlIGFsbG9jYXRlZCBpbnRlcm5hbGx5LCBhbmQgdGhlIGNhbGxlciBtdXN0IGNhbGwKLSAqICAgICBrZnJlZSgpIG9uIGl0IGFmdGVyIHVzZS4KLSAqLwotaW50IHNlbGludXhfc2lkX3RvX3N0cmluZyh1MzIgc2lkLCBjaGFyICoqY3R4LCB1MzIgKmN0eGxlbik7Ci0KLS8qKgotICogICAgIHNlbGludXhfZ2V0X2lub2RlX3NpZCAtIGdldCB0aGUgaW5vZGUncyBzZWN1cml0eSBjb250ZXh0IElECi0gKiAgICAgQGlub2RlOiBpbm9kZSBzdHJ1Y3R1cmUgdG8gZ2V0IHRoZSBzaWQgZnJvbS4KLSAqICAgICBAc2lkOiBwb2ludGVyIHRvIHNlY3VyaXR5IGNvbnRleHQgSUQgdG8gYmUgZmlsbGVkIGluLgotICoKLSAqICAgICBSZXR1cm5zIG5vdGhpbmcKLSAqLwotdm9pZCBzZWxpbnV4X2dldF9pbm9kZV9zaWQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpzaWQpOwotCi0vKioKLSAqICAgICBzZWxpbnV4X2dldF9pcGNfc2lkIC0gZ2V0IHRoZSBpcGMgc2VjdXJpdHkgY29udGV4dCBJRAotICogICAgIEBpcGNwOiBpcGMgc3RydWN0dXJlIHRvIGdldCB0aGUgc2lkIGZyb20uCi0gKiAgICAgQHNpZDogcG9pbnRlciB0byBzZWN1cml0eSBjb250ZXh0IElEIHRvIGJlIGZpbGxlZCBpbi4KLSAqCi0gKiAgICAgUmV0dXJucyBub3RoaW5nCi0gKi8KLXZvaWQgc2VsaW51eF9nZXRfaXBjX3NpZChjb25zdCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgdTMyICpzaWQpOwotCi0vKioKLSAqICAgICBzZWxpbnV4X2dldF90YXNrX3NpZCAtIHJldHVybiB0aGUgU0lEIG9mIHRhc2sKLSAqICAgICBAdHNrOiB0aGUgdGFzayB3aG9zZSBTSUQgd2lsbCBiZSByZXR1cm5lZAotICogICAgIEBzaWQ6IHBvaW50ZXIgdG8gc2VjdXJpdHkgY29udGV4dCBJRCB0byBiZSBmaWxsZWQgaW4uCi0gKgotICogICAgIFJldHVybnMgbm90aGluZwotICovCi12b2lkIHNlbGludXhfZ2V0X3Rhc2tfc2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1MzIgKnNpZCk7Ci0KLS8qKgogICogICAgIHNlbGludXhfc3RyaW5nX3RvX3NpZCAtIG1hcCBhIHNlY3VyaXR5IGNvbnRleHQgc3RyaW5nIHRvIGEgc2VjdXJpdHkgSUQKICAqICAgICBAc3RyOiB0aGUgc2VjdXJpdHkgY29udGV4dCBzdHJpbmcgdG8gYmUgbWFwcGVkCiAgKiAgICAgQHNpZDogSUQgdmFsdWUgcmV0dXJuZWQgdmlhIHRoaXMuCkBAIC0xNTEsNTIgKzYzLDYgQEAKIHZvaWQgc2VsaW51eF9zZWNtYXJrX3JlZmNvdW50X2RlYyh2b2lkKTsKICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfYXVkaXRfcnVsZV9pbml0KHUzMiBmaWVsZCwgdTMyIG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcnVsZXN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKipydWxlKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfYXVkaXRfcnVsZV9mcmVlKHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKnJ1bGUpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2godTMyIHNpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYWN0eCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfYXVkaXRfc2V0X2NhbGxiYWNrKGludCAoKmNhbGxiYWNrKSh2b2lkKSkKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfc2lkX3RvX3N0cmluZyh1MzIgc2lkLCBjaGFyICoqY3R4LCB1MzIgKmN0eGxlbikKLXsKLSAgICAgICAqY3R4ID0gTlVMTDsKLSAgICAgICAqY3R4bGVuID0gMDsKLSAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfZ2V0X2lub2RlX3NpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNpZCkKLXsKLQkqc2lkID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfZ2V0X2lwY19zaWQoY29uc3Qgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHUzMiAqc2lkKQotewotCSpzaWQgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKQotewotCSpzaWQgPSAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X3N0cmluZ190b19zaWQoY29uc3QgY2hhciAqc3RyLCB1MzIgKnNpZCkKIHsKICAgICAgICAqc2lkID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VtYXBob3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYWU2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbWFwaG9yZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMgorICoKKyAqIFBsZWFzZSBzZWUga2VybmVsL3NlbWFwaG9yZS5jIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucworICovCisjaWZuZGVmIF9fTElOVVhfU0VNQVBIT1JFX0gKKyNkZWZpbmUgX19MSU5VWF9TRU1BUEhPUkVfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKy8qIFBsZWFzZSBkb24ndCBhY2Nlc3MgYW55IG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUgZGlyZWN0bHkgKi8KK3N0cnVjdCBzZW1hcGhvcmUgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgaW50CQljb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSwgbikJCQkJXAorewkJCQkJCQkJCVwKKwkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkubG9jayksCQlcCisJLmNvdW50CQk9IG4sCQkJCQkJXAorCS53YWl0X2xpc3QJPSBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSwJCVwKK30KKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwgY291bnQpIFwKKwlzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUSUFMSVpFUihuYW1lLCBjb3VudCkKKworI2RlZmluZSBERUNMQVJFX01VVEVYKG5hbWUpCV9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLCAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKK3sKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OworCSpzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSkgX19TRU1BUEhPUkVfSU5JVElBTElaRVIoKnNlbSwgdmFsKTsKKwlsb2NrZGVwX2luaXRfbWFwKCZzZW0tPmxvY2suZGVwX21hcCwgInNlbWFwaG9yZS0+bG9jayIsICZfX2tleSwgMCk7Cit9CisKKyNkZWZpbmUgaW5pdF9NVVRFWChzZW0pCQlzZW1hX2luaXQoc2VtLCAxKQorI2RlZmluZSBpbml0X01VVEVYX0xPQ0tFRChzZW0pCXNlbWFfaW5pdChzZW0sIDApCisKK2V4dGVybiB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZG93bl9raWxsYWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7CitleHRlcm4gaW50IF9fbXVzdF9jaGVjayBkb3duX3RpbWVvdXQoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBsb25nIGppZmZpZXMpOworZXh0ZXJuIHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKTsKKworI2VuZGlmIC8qIF9fTElOVVhfU0VNQVBIT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaAppbmRleCA2N2MyNTYzOS4uMWRhMWU2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApAQCAtNjIsMTggKzYyLDUgQEAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkICpzZXFfbGlzdF9uZXh0KHZvaWQgKnYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCiAJCWxvZmZfdCAqcHBvcyk7CiAKLXN0cnVjdCBuZXQ7Ci1zdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHsKLQlzdHJ1Y3QgbmV0ICpuZXQ7Ci19OwotCi1pbnQgc2VxX29wZW5fbmV0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLAotCQkgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zICosIGludCk7Ci1pbnQgc2VxX3JlbGVhc2VfbmV0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqc2VxX2ZpbGVfbmV0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQotewotCXJldHVybiAoKHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgKilzZXEtPnByaXZhdGUpLT5uZXQ7Ci19Ci0KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlX25ldC5oIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZV9uZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM1MjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZV9uZXQuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fU0VRX0ZJTEVfTkVUX0hfXworI2RlZmluZSBfX1NFUV9GSUxFX05FVF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKK3N0cnVjdCBuZXQ7CitleHRlcm4gc3RydWN0IG5ldCBpbml0X25ldDsKKworc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSB7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKm5ldDsKKyNlbmRpZgorfTsKKworaW50IHNlcV9vcGVuX25ldChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwKKwkJIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqLCBpbnQpOworaW50IHNlcV9yZWxlYXNlX25ldChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKnNlcV9maWxlX25ldChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3sKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJcmV0dXJuICgoc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSAqKXNlcS0+cHJpdmF0ZSktPm5ldDsKKyNlbHNlCisJcmV0dXJuICZpbml0X25ldDsKKyNlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCAyODk5NDJmLi43Y2IwOTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0yMTMsNiArMjEzLDEwIEBACiAJdm9pZAkJKCpjb25maWdfcG9ydCkoc3RydWN0IHVhcnRfcG9ydCAqLCBpbnQpOwogCWludAkJKCp2ZXJpZnlfcG9ydCkoc3RydWN0IHVhcnRfcG9ydCAqLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqKTsKIAlpbnQJCSgqaW9jdGwpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisJdm9pZAkoKnBvbGxfcHV0X2NoYXIpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgdW5zaWduZWQgY2hhcik7CisJaW50CQkoKnBvbGxfZ2V0X2NoYXIpKHN0cnVjdCB1YXJ0X3BvcnQgKik7CisjZW5kaWYKIH07CiAKICNkZWZpbmUgVUFSVF9DT05GSUdfVFlQRQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfc2NpLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTNjYzUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfc2NpLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX0xJTlVYX1NFUklBTF9TQ0lfSAorI2RlZmluZSBfX0xJTlVYX1NFUklBTF9TQ0lfSAorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworLyoKKyAqIEdlbmVyaWMgaGVhZGVyIGZvciBTdXBlckggU0NJKEYpICh1c2VkIGJ5IHNoL3NoNjQvaDgzMDAgYW5kIHJlbGF0ZWQgcGFydHMpCisgKi8KKworLyogT2Zmc2V0cyBpbnRvIHRoZSBzY2lfcG9ydC0+aXJxcyBhcnJheSAqLworZW51bSB7CisJU0NJeF9FUklfSVJRLAorCVNDSXhfUlhJX0lSUSwKKwlTQ0l4X1RYSV9JUlEsCisJU0NJeF9CUklfSVJRLAorCVNDSXhfTlJfSVJRUywKK307CisKKy8qCisgKiBQbGF0Zm9ybSBkZXZpY2Ugc3BlY2lmaWMgcGxhdGZvcm1fZGF0YSBzdHJ1Y3QKKyAqLworc3RydWN0IHBsYXRfc2NpX3BvcnQgeworCXZvaWQgX19pb21lbQkqbWVtYmFzZTsJCS8qIGlvIGNvb2tpZSAqLworCXVuc2lnbmVkIGxvbmcJbWFwYmFzZTsJCS8qIHJlc291cmNlIGJhc2UgKi8KKwl1bnNpZ25lZCBpbnQJaXJxc1tTQ0l4X05SX0lSUVNdOwkvKiBFUkksIFJYSSwgVFhJLCBCUkkgKi8KKwl1bnNpZ25lZCBpbnQJdHlwZTsJCQkvKiBTQ0kgLyBTQ0lGIC8gSVJEQSAqLworCXVwZl90CQlmbGFnczsJCQkvKiBVUEZfKiBmbGFncyAqLworfTsKKworaW50IGVhcmx5X3NjaV9zZXR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKKworI2VuZGlmIC8qIF9fTElOVVhfU0VSSUFMX1NDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA0MTI2NzJhNy4uMjk5ZWM0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0yMzIsNiArMjMyLDggQEAKICAqCUBtYXJrOiBHZW5lcmljIHBhY2tldCBtYXJrCiAgKglAbmZjdDogQXNzb2NpYXRlZCBjb25uZWN0aW9uLCBpZiBhbnkKICAqCUBpcHZzX3Byb3BlcnR5OiBza2J1ZmYgaXMgb3duZWQgYnkgaXB2cworICoJQHBlZWtlZDogdGhpcyBwYWNrZXQgaGFzIGJlZW4gc2VlbiBhbHJlYWR5LCBzbyBzdGF0cyBoYXZlIGJlZW4KKyAqCQlkb25lIGZvciBpdCwgZG9uJ3QgZG8gdGhlbSBhZ2FpbgogICoJQG5mX3RyYWNlOiBuZXRmaWx0ZXIgcGFja2V0IHRyYWNlIGZsYWcKICAqCUBuZmN0aW5mbzogUmVsYXRpb25zaGlwIG9mIHRoaXMgc2tiIHRvIHRoZSBjb25uZWN0aW9uCiAgKglAbmZjdF9yZWFzbTogbmV0ZmlsdGVyIGNvbm50cmFjayByZS1hc3NlbWJseSBwb2ludGVyCkBAIC0yNDAsNiArMjQyLDcgQEAKICAqCUBxdWV1ZV9tYXBwaW5nOiBRdWV1ZSBtYXBwaW5nIGZvciBtdWx0aXF1ZXVlIGRldmljZXMKICAqCUB0Y19pbmRleDogVHJhZmZpYyBjb250cm9sIGluZGV4CiAgKglAdGNfdmVyZDogdHJhZmZpYyBjb250cm9sIHZlcmRpY3QKKyAqCUBuZGlzY19ub2RldHlwZTogcm91dGVyIHR5cGUgKGZyb20gbGluayBsYXllcikKICAqCUBkbWFfY29va2llOiBhIGNvb2tpZSB0byBvbmUgb2Ygc2V2ZXJhbCBwb3NzaWJsZSBETUEgb3BlcmF0aW9ucwogICoJCWRvbmUgYnkgc2tiIERNQSBmdW5jdGlvbnMKICAqCUBzZWNtYXJrOiBzZWN1cml0eSBtYXJraW5nCkBAIC0yNTQsNyArMjU3LDEwIEBACiAJa3RpbWVfdAkJCXRzdGFtcDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCi0Jc3RydWN0ICBkc3RfZW50cnkJKmRzdDsKKwl1bmlvbiB7CisJCXN0cnVjdCAgZHN0X2VudHJ5CSpkc3Q7CisJCXN0cnVjdCAgcnRhYmxlCQkqcnRhYmxlOworCX07CiAJc3RydWN0CXNlY19wYXRoCSpzcDsKIAogCS8qCkBAIC0zMDgsNyArMzE0LDEwIEBACiAJX191MTYJCQl0Y192ZXJkOwkvKiB0cmFmZmljIGNvbnRyb2wgdmVyZGljdCAqLwogI2VuZGlmCiAjZW5kaWYKLQkvKiAyIGJ5dGUgaG9sZSAqLworI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCisJX191OAkJCW5kaXNjX25vZGV0eXBlOjI7CisjZW5kaWYKKwkvKiAxNCBiaXQgaG9sZSAqLwogCiAjaWZkZWYgQ09ORklHX05FVF9ETUEKIAlkbWFfY29va2llX3QJCWRtYV9jb29raWU7CkBAIC02NTUsMTEgKzY2NCwyMSBAQAogfQogCiAvKgotICoJSW5zZXJ0IGFuIHNrX2J1ZmYgYXQgdGhlIHN0YXJ0IG9mIGEgbGlzdC4KKyAqCUluc2VydCBhbiBza19idWZmIG9uIGEgbGlzdC4KICAqCiAgKglUaGUgIl9fc2tiX3h4eHgoKSIgZnVuY3Rpb25zIGFyZSB0aGUgbm9uLWF0b21pYyBvbmVzIHRoYXQKICAqCWNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KK2V4dGVybiB2b2lkICAgICAgICBza2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpuZXdzaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpuZXdzaywKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqcHJldiwgc3RydWN0IHNrX2J1ZmYgKm5leHQsCisJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK3sKKwluZXdzay0+bmV4dCA9IG5leHQ7CisJbmV3c2stPnByZXYgPSBwcmV2OworCW5leHQtPnByZXYgID0gcHJldi0+bmV4dCA9IG5ld3NrOworCWxpc3QtPnFsZW4rKzsKK30KIAogLyoqCiAgKglfX3NrYl9xdWV1ZV9hZnRlciAtIHF1ZXVlIGEgYnVmZmVyIGF0IHRoZSBsaXN0IGhlYWQKQEAgLTY3NiwxMyArNjk1LDE3IEBACiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcHJldiwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpuZXdzaykKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDsKLQlsaXN0LT5xbGVuKys7CisJX19za2JfaW5zZXJ0KG5ld3NrLCBwcmV2LCBwcmV2LT5uZXh0LCBsaXN0KTsKK30KIAotCW5leHQgPSBwcmV2LT5uZXh0OwotCW5ld3NrLT5uZXh0ID0gbmV4dDsKLQluZXdzay0+cHJldiA9IHByZXY7Ci0JbmV4dC0+cHJldiAgPSBwcmV2LT5uZXh0ID0gbmV3c2s7CitleHRlcm4gdm9pZCBza2JfYXBwZW5kKHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpuZXdzaywKKwkJICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfcXVldWVfYmVmb3JlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKm5leHQsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKm5ld3NrKQoreworCV9fc2tiX2luc2VydChuZXdzaywgbmV4dC0+cHJldiwgbmV4dCwgbGlzdCk7CiB9CiAKIC8qKgpAQCAtNzE2LDY2ICs3MzksNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnByZXYsICpuZXh0OwotCi0JbGlzdC0+cWxlbisrOwotCW5leHQgPSAoc3RydWN0IHNrX2J1ZmYgKilsaXN0OwotCXByZXYgPSBuZXh0LT5wcmV2OwotCW5ld3NrLT5uZXh0ID0gbmV4dDsKLQluZXdzay0+cHJldiA9IHByZXY7Ci0JbmV4dC0+cHJldiAgPSBwcmV2LT5uZXh0ID0gbmV3c2s7Ci19Ci0KLQotLyoqCi0gKglfX3NrYl9kZXF1ZXVlIC0gcmVtb3ZlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlCi0gKglAbGlzdDogbGlzdCB0byBkZXF1ZXVlIGZyb20KLSAqCi0gKglSZW1vdmUgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBhbnkgbG9ja3MKLSAqCXNvIG11c3QgYmUgdXNlZCB3aXRoIGFwcHJvcHJpYXRlIGxvY2tzIGhlbGQgb25seS4gVGhlIGhlYWQgaXRlbSBpcwotICoJcmV0dXJuZWQgb3IgJU5VTEwgaWYgdGhlIGxpc3QgaXMgZW1wdHkuCi0gKi8KLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3NrYl9kZXF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKm5leHQsICpwcmV2LCAqcmVzdWx0OwotCi0JcHJldiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBsaXN0OwotCW5leHQgPSBwcmV2LT5uZXh0OwotCXJlc3VsdCA9IE5VTEw7Ci0JaWYgKG5leHQgIT0gcHJldikgewotCQlyZXN1bHQJICAgICA9IG5leHQ7Ci0JCW5leHQJICAgICA9IG5leHQtPm5leHQ7Ci0JCWxpc3QtPnFsZW4tLTsKLQkJbmV4dC0+cHJldiAgID0gcHJldjsKLQkJcHJldi0+bmV4dCAgID0gbmV4dDsKLQkJcmVzdWx0LT5uZXh0ID0gcmVzdWx0LT5wcmV2ID0gTlVMTDsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vKgotICoJSW5zZXJ0IGEgcGFja2V0IG9uIGEgbGlzdC4KLSAqLwotZXh0ZXJuIHZvaWQgICAgICAgIHNrYl9pbnNlcnQoc3RydWN0IHNrX2J1ZmYgKm9sZCwgc3RydWN0IHNrX2J1ZmYgKm5ld3NrLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9pbnNlcnQoc3RydWN0IHNrX2J1ZmYgKm5ld3NrLAotCQkJCXN0cnVjdCBza19idWZmICpwcmV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQotewotCW5ld3NrLT5uZXh0ID0gbmV4dDsKLQluZXdzay0+cHJldiA9IHByZXY7Ci0JbmV4dC0+cHJldiAgPSBwcmV2LT5uZXh0ID0gbmV3c2s7Ci0JbGlzdC0+cWxlbisrOwotfQotCi0vKgotICoJUGxhY2UgYSBwYWNrZXQgYWZ0ZXIgYSBnaXZlbiBwYWNrZXQgaW4gYSBsaXN0LgotICovCi1leHRlcm4gdm9pZAkgICBza2JfYXBwZW5kKHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpuZXdzaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19za2JfYXBwZW5kKHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpuZXdzaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKLXsKLQlfX3NrYl9pbnNlcnQobmV3c2ssIG9sZCwgb2xkLT5uZXh0LCBsaXN0KTsKKwlfX3NrYl9xdWV1ZV9iZWZvcmUobGlzdCwgKHN0cnVjdCBza19idWZmICopbGlzdCwgbmV3c2spOwogfQogCiAvKgpAQCAtNzk1LDggKzc1OSwyMiBAQAogCXByZXYtPm5leHQgPSBuZXh0OwogfQogCi0KLS8qIFhYWDogbW9yZSBzdHJlYW1saW5lZCBpbXBsZW1lbnRhdGlvbiAqLworLyoqCisgKglfX3NrYl9kZXF1ZXVlIC0gcmVtb3ZlIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlCisgKglAbGlzdDogbGlzdCB0byBkZXF1ZXVlIGZyb20KKyAqCisgKglSZW1vdmUgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBhbnkgbG9ja3MKKyAqCXNvIG11c3QgYmUgdXNlZCB3aXRoIGFwcHJvcHJpYXRlIGxvY2tzIGhlbGQgb25seS4gVGhlIGhlYWQgaXRlbSBpcworICoJcmV0dXJuZWQgb3IgJU5VTEwgaWYgdGhlIGxpc3QgaXMgZW1wdHkuCisgKi8KK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3NrYl9kZXF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrKGxpc3QpOworCWlmIChza2IpCisJCV9fc2tiX3VubGluayhza2IsIGxpc3QpOworCXJldHVybiBza2I7Cit9CiAKIC8qKgogICoJX19za2JfZGVxdWV1ZV90YWlsIC0gcmVtb3ZlIGZyb20gdGhlIHRhaWwgb2YgdGhlIHF1ZXVlCkBAIC04ODcsNiArODY1LDcgQEAKIC8qCiAgKglBZGQgZGF0YSB0byBhbiBza19idWZmCiAgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyICpza2JfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpfX3NrYl9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBjaGFyICp0bXAgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CkBAIC04OTYsMjYgKzg3NSw3IEBACiAJcmV0dXJuIHRtcDsKIH0KIAotLyoqCi0gKglza2JfcHV0IC0gYWRkIGRhdGEgdG8gYSBidWZmZXIKLSAqCUBza2I6IGJ1ZmZlciB0byB1c2UKLSAqCUBsZW46IGFtb3VudCBvZiBkYXRhIHRvIGFkZAotICoKLSAqCVRoaXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgdXNlZCBkYXRhIGFyZWEgb2YgdGhlIGJ1ZmZlci4gSWYgdGhpcyB3b3VsZAotICoJZXhjZWVkIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSB0aGUga2VybmVsIHdpbGwgcGFuaWMuIEEgcG9pbnRlciB0byB0aGUKLSAqCWZpcnN0IGJ5dGUgb2YgdGhlIGV4dHJhIGRhdGEgaXMgcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXVuc2lnbmVkIGNoYXIgKnRtcCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKLQlTS0JfTElORUFSX0FTU0VSVChza2IpOwotCXNrYi0+dGFpbCArPSBsZW47Ci0Jc2tiLT5sZW4gICs9IGxlbjsKLQlpZiAodW5saWtlbHkoc2tiLT50YWlsID4gc2tiLT5lbmQpKQotCQlza2Jfb3Zlcl9wYW5pYyhza2IsIGxlbiwgY3VycmVudF90ZXh0X2FkZHIoKSk7Ci0JcmV0dXJuIHRtcDsKLX0KLQorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKnNrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpfX3NrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc2tiLT5kYXRhIC09IGxlbjsKQEAgLTkyMywyNCArODgzLDcgQEAKIAlyZXR1cm4gc2tiLT5kYXRhOwogfQogCi0vKioKLSAqCXNrYl9wdXNoIC0gYWRkIGRhdGEgdG8gdGhlIHN0YXJ0IG9mIGEgYnVmZmVyCi0gKglAc2tiOiBidWZmZXIgdG8gdXNlCi0gKglAbGVuOiBhbW91bnQgb2YgZGF0YSB0byBhZGQKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIHVzZWQgZGF0YSBhcmVhIG9mIHRoZSBidWZmZXIgYXQgdGhlIGJ1ZmZlcgotICoJc3RhcnQuIElmIHRoaXMgd291bGQgZXhjZWVkIHRoZSB0b3RhbCBidWZmZXIgaGVhZHJvb20gdGhlIGtlcm5lbCB3aWxsCi0gKglwYW5pYy4gQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBleHRyYSBkYXRhIGlzIHJldHVybmVkLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc2tiLT5kYXRhIC09IGxlbjsKLQlza2ItPmxlbiAgKz0gbGVuOwotCWlmICh1bmxpa2VseShza2ItPmRhdGE8c2tiLT5oZWFkKSkKLQkJc2tiX3VuZGVyX3BhbmljKHNrYiwgbGVuLCBjdXJyZW50X3RleHRfYWRkcigpKTsKLQlyZXR1cm4gc2tiLT5kYXRhOwotfQotCitleHRlcm4gdW5zaWduZWQgY2hhciAqc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKl9fc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlza2ItPmxlbiAtPSBsZW47CkBAIC05NDgsMjEgKzg5MSw2IEBACiAJcmV0dXJuIHNrYi0+ZGF0YSArPSBsZW47CiB9CiAKLS8qKgotICoJc2tiX3B1bGwgLSByZW1vdmUgZGF0YSBmcm9tIHRoZSBzdGFydCBvZiBhIGJ1ZmZlcgotICoJQHNrYjogYnVmZmVyIHRvIHVzZQotICoJQGxlbjogYW1vdW50IG9mIGRhdGEgdG8gcmVtb3ZlCi0gKgotICoJVGhpcyBmdW5jdGlvbiByZW1vdmVzIGRhdGEgZnJvbSB0aGUgc3RhcnQgb2YgYSBidWZmZXIsIHJldHVybmluZwotICoJdGhlIG1lbW9yeSB0byB0aGUgaGVhZHJvb20uIEEgcG9pbnRlciB0byB0aGUgbmV4dCBkYXRhIGluIHRoZSBidWZmZXIKLSAqCWlzIHJldHVybmVkLiBPbmNlIHRoZSBkYXRhIGhhcyBiZWVuIHB1bGxlZCBmdXR1cmUgcHVzaGVzIHdpbGwgb3ZlcndyaXRlCi0gKgl0aGUgb2xkIGRhdGEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlyZXR1cm4gdW5saWtlbHkobGVuID4gc2tiLT5sZW4pID8gTlVMTCA6IF9fc2tiX3B1bGwoc2tiLCBsZW4pOwotfQotCiBleHRlcm4gdW5zaWduZWQgY2hhciAqX19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKl9fcHNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCkBAIC0xMjAzLDIxICsxMTMxLDcgQEAKIAlza2Jfc2V0X3RhaWxfcG9pbnRlcihza2IsIGxlbik7CiB9CiAKLS8qKgotICoJc2tiX3RyaW0gLSByZW1vdmUgZW5kIGZyb20gYSBidWZmZXIKLSAqCUBza2I6IGJ1ZmZlciB0byBhbHRlcgotICoJQGxlbjogbmV3IGxlbmd0aAotICoKLSAqCUN1dCB0aGUgbGVuZ3RoIG9mIGEgYnVmZmVyIGRvd24gYnkgcmVtb3ZpbmcgZGF0YSBmcm9tIHRoZSB0YWlsLiBJZgotICoJdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IHVuZGVyIHRoZSBsZW5ndGggc3BlY2lmaWVkIGl0IGlzIG5vdCBtb2RpZmllZC4KLSAqCVRoZSBza2IgbXVzdCBiZSBsaW5lYXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWlmIChza2ItPmxlbiA+IGxlbikKLQkJX19za2JfdHJpbShza2IsIGxlbik7Ci19Ci0KK2V4dGVybiB2b2lkIHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwogCiBzdGF0aWMgaW5saW5lIGludCBfX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtMTMwMCwyMiArMTIxNCw3IEBACiAJcmV0dXJuIHNrYjsKIH0KIAotLyoqCi0gKglkZXZfYWxsb2Nfc2tiIC0gYWxsb2NhdGUgYW4gc2tidWZmIGZvciByZWNlaXZpbmcKLSAqCUBsZW5ndGg6IGxlbmd0aCB0byBhbGxvY2F0ZQotICoKLSAqCUFsbG9jYXRlIGEgbmV3ICZza19idWZmIGFuZCBhc3NpZ24gaXQgYSB1c2FnZSBjb3VudCBvZiBvbmUuIFRoZQotICoJYnVmZmVyIGhhcyB1bnNwZWNpZmllZCBoZWFkcm9vbSBidWlsdCBpbi4gVXNlcnMgc2hvdWxkIGFsbG9jYXRlCi0gKgl0aGUgaGVhZHJvb20gdGhleSB0aGluayB0aGV5IG5lZWQgd2l0aG91dCBhY2NvdW50aW5nIGZvciB0aGUKLSAqCWJ1aWx0IGluIHNwYWNlLiBUaGUgYnVpbHQgaW4gc3BhY2UgaXMgdXNlZCBmb3Igb3B0aW1pc2F0aW9ucy4KLSAqCi0gKgklTlVMTCBpcyByZXR1cm5lZCBpZiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS4gQWx0aG91Z2ggdGhpcyBmdW5jdGlvbgotICoJYWxsb2NhdGVzIG1lbW9yeSBpdCBjYW4gYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0LgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpkZXZfYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JcmV0dXJuIF9fZGV2X2FsbG9jX3NrYihsZW5ndGgsIEdGUF9BVE9NSUMpOwotfQorZXh0ZXJuIHN0cnVjdCBza19idWZmICpkZXZfYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBsZW5ndGgpOwogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKaW5kZXggZmNjNDgwOS4uMzljM2E1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaApAQCAtNDEsNyArNDEsNyBAQAogCQkJZ290byBmb3VuZDsgXAogCQllbHNlIFwKIAkJCWkrKzsKLSNpbmNsdWRlICJrbWFsbG9jX3NpemVzLmgiCisjaW5jbHVkZSA8bGludXgva21hbGxvY19zaXplcy5oPgogI3VuZGVmIENBQ0hFCiAJCXsKIAkJCWV4dGVybiB2b2lkIF9feW91X2Nhbm5vdF9rbWFsbG9jX3RoYXRfbXVjaCh2b2lkKTsKQEAgLTc1LDcgKzc1LDcgQEAKIAkJCWdvdG8gZm91bmQ7IFwKIAkJZWxzZSBcCiAJCQlpKys7Ci0jaW5jbHVkZSAia21hbGxvY19zaXplcy5oIgorI2luY2x1ZGUgPGxpbnV4L2ttYWxsb2Nfc2l6ZXMuaD4KICN1bmRlZiBDQUNIRQogCQl7CiAJCQlleHRlcm4gdm9pZCBfX3lvdV9jYW5ub3Rfa21hbGxvY190aGF0X211Y2godm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKaW5kZXggNTdkZWVjYy4uNzlkNTljOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaApAQCAtNDUsOSArNDUsOSBAQAogc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7CiAJc3BpbmxvY2tfdCBsaXN0X2xvY2s7CS8qIFByb3RlY3QgcGFydGlhbCBsaXN0IGFuZCBucl9wYXJ0aWFsICovCiAJdW5zaWduZWQgbG9uZyBucl9wYXJ0aWFsOwotCWF0b21pY19sb25nX3QgbnJfc2xhYnM7CiAJc3RydWN0IGxpc3RfaGVhZCBwYXJ0aWFsOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCisJYXRvbWljX2xvbmdfdCBucl9zbGFiczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGw7CiAjZW5kaWYKIH07CkBAIC02MSw3ICs2MSw3IEBACiAJaW50IHNpemU7CQkvKiBUaGUgc2l6ZSBvZiBhbiBvYmplY3QgaW5jbHVkaW5nIG1ldGEgZGF0YSAqLwogCWludCBvYmpzaXplOwkJLyogVGhlIHNpemUgb2YgYW4gb2JqZWN0IHdpdGhvdXQgbWV0YSBkYXRhICovCiAJaW50IG9mZnNldDsJCS8qIEZyZWUgcG9pbnRlciBvZmZzZXQuICovCi0JaW50IG9yZGVyOworCWludCBvcmRlcjsJCS8qIEN1cnJlbnQgcHJlZmVycmVkIGFsbG9jYXRpb24gb3JkZXIgKi8KIAogCS8qCiAJICogQXZvaWQgYW4gZXh0cmEgY2FjaGUgbGluZSBmb3IgVVAsIFNNUCBhbmQgZm9yIHRoZSBub2RlIGxvY2FsIHRvCkBAIC0xMzgsMTEgKzEzOCwxMSBAQAogCWlmIChzaXplIDw9ICAgICAgICA1MTIpIHJldHVybiA5OwogCWlmIChzaXplIDw9ICAgICAgIDEwMjQpIHJldHVybiAxMDsKIAlpZiAoc2l6ZSA8PSAgIDIgKiAxMDI0KSByZXR1cm4gMTE7CisJaWYgKHNpemUgPD0gICA0ICogMTAyNCkgcmV0dXJuIDEyOwogLyoKICAqIFRoZSBmb2xsb3dpbmcgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9ydCBhcmNoaXRlY3R1cmVzIHdpdGggYSBsYXJnZXIgcGFnZQogICogc2l6ZSB0aGFuIDRrLgogICovCi0JaWYgKHNpemUgPD0gICA0ICogMTAyNCkgcmV0dXJuIDEyOwogCWlmIChzaXplIDw9ICAgOCAqIDEwMjQpIHJldHVybiAxMzsKIAlpZiAoc2l6ZSA8PSAgMTYgKiAxMDI0KSByZXR1cm4gMTQ7CiAJaWYgKHNpemUgPD0gIDMyICogMTAyNCkgcmV0dXJuIDE1OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbTUwMS1yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3NtNTAxLXJlZ3MuaAppbmRleCA2NDIzNmI3Li5kNTM2NDJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtNTAxLXJlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtNTAxLXJlZ3MuaApAQCAtMTI5LDExICsxMjksMTQgQEAKIAogI2RlZmluZSBTTTUwMV9ERVZJQ0VJRF9TTTUwMQkJKDB4MDUwMTAwMDApCiAjZGVmaW5lIFNNNTAxX0RFVklDRUlEX0lETUFTSwkJKDB4ZmZmZjAwMDApCisjZGVmaW5lIFNNNTAxX0RFVklDRUlEX1JFVk1BU0sJCSgweDAwMDAwMGZmKQogCiAjZGVmaW5lIFNNNTAxX1BMTENMT0NLX0NPVU5UCQkoMHgwMDAwNjQpCiAjZGVmaW5lIFNNNTAxX01JU0NfVElNSU5HCQkoMHgwMDAwNjgpCiAjZGVmaW5lIFNNNTAxX0NVUlJFTlRfU0RSQU1fQ0xPQ0sJKDB4MDAwMDZDKQogCisjZGVmaW5lIFNNNTAxX1BST0dSQU1NQUJMRV9QTExfQ09OVFJPTAkoMHgwMDAwNzQpCisKIC8qIEdQSU8gYmFzZSAqLwogI2RlZmluZSBTTTUwMV9HUElPCQkJKDB4MDEwMDAwKQogI2RlZmluZSBTTTUwMV9HUElPX0RBVEFfTE9XCQkoMHgwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc201MDEuaCBiL2luY2x1ZGUvbGludXgvc201MDEuaAppbmRleCA5MzJhOWVmLi5iY2ExMzQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtNTAxLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbTUwMS5oCkBAIC0yNCw3ICsyNCw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBzbTUwMV9zZXRfY2xvY2soc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgaW50IGNsa3NyYywgdW5zaWduZWQgbG9uZyBmcmVxKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc201MDFfZmluZF9jbG9jayhpbnQgY2xrc3JjLCB1bnNpZ25lZCBsb25nIHJlcV9mcmVxKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNtNTAxX2ZpbmRfY2xvY2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGludCBjbGtzcmMsIHVuc2lnbmVkIGxvbmcgcmVxX2ZyZXEpOwogCiAvKiBzbTUwMV9taXNjX2NvbnRyb2wKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtYzkxeC5oIGIvaW5jbHVkZS9saW51eC9zbWM5MXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTA1NTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbWM5MXguaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fU01DOTFYX0hfXworI2RlZmluZSBfX1NNQzkxWF9IX18KKworI2RlZmluZSBTTUM5MVhfVVNFXzhCSVQgKDEgPDwgMCkKKyNkZWZpbmUgU01DOTFYX1VTRV8xNkJJVCAoMSA8PCAxKQorI2RlZmluZSBTTUM5MVhfVVNFXzMyQklUICgxIDw8IDIpCisKK3N0cnVjdCBzbWM5MXhfcGxhdGRhdGEgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7IC8qIElSUUZfLi4uICovCit9OworCisjZW5kaWYgLyogX19TTUM5MVhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKaW5kZXggNTc2YTVmNy4uZDMxMWEwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaApAQCAtMjk2LDQzICsyOTYsNiBAQAogfSkKIAogLyoKLSAqIExvY2tzIHR3byBzcGlubG9ja3MgbDEgYW5kIGwyLgotICogbDFfZmlyc3QgaW5kaWNhdGVzIGlmIHNwaW5sb2NrIGwxIHNob3VsZCBiZSB0YWtlbiBmaXJzdC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV9zcGluX2xvY2soc3BpbmxvY2tfdCAqbDEsIHNwaW5sb2NrX3QgKmwyLAotCQkJCSAgICBib29sIGwxX2ZpcnN0KQotCV9fYWNxdWlyZXMobDEpCi0JX19hY3F1aXJlcyhsMikKLXsKLQlpZiAobDFfZmlyc3QpIHsKLQkJc3Bpbl9sb2NrKGwxKTsKLQkJc3Bpbl9sb2NrKGwyKTsKLQl9IGVsc2UgewotCQlzcGluX2xvY2sobDIpOwotCQlzcGluX2xvY2sobDEpOwotCX0KLX0KLQotLyoKLSAqIFVubG9ja3MgdHdvIHNwaW5sb2NrcyBsMSBhbmQgbDIuCi0gKiBsMV90YWtlbl9maXJzdCBpbmRpY2F0ZXMgaWYgc3BpbmxvY2sgbDEgd2FzIHRha2VuIGZpcnN0IGFuZCB0aGVyZWZvcmUKLSAqIHNob3VsZCBiZSByZWxlYXNlZCBhZnRlciBzcGlubG9jayBsMi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV9zcGluX3VubG9jayhzcGlubG9ja190ICpsMSwgc3BpbmxvY2tfdCAqbDIsCi0JCQkJICAgICAgYm9vbCBsMV90YWtlbl9maXJzdCkKLQlfX3JlbGVhc2VzKGwxKQotCV9fcmVsZWFzZXMobDIpCi17Ci0JaWYgKGwxX3Rha2VuX2ZpcnN0KSB7Ci0JCXNwaW5fdW5sb2NrKGwyKTsKLQkJc3Bpbl91bmxvY2sobDEpOwotCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrKGwxKTsKLQkJc3Bpbl91bmxvY2sobDIpOwotCX0KLX0KLQotLyoKICAqIFB1bGwgdGhlIGF0b21pY190IGRlY2xhcmF0aW9uOgogICogKGFzbS1taXBzL2F0b21pYy5oIG5lZWRzIGFib3ZlIGRlZmluaXRpb25zKQogICovCkBAIC0zNDEsNiArMzA0LDkgQEAKICAqIGF0b21pY19kZWNfYW5kX2xvY2sgLSBsb2NrIG9uIHJlYWNoaW5nIHJlZmVyZW5jZSBjb3VudCB6ZXJvCiAgKiBAYXRvbWljOiB0aGUgYXRvbWljIGNvdW50ZXIKICAqIEBsb2NrOiB0aGUgc3BpbmxvY2sgaW4gcXVlc3Rpb24KKyAqCisgKiBEZWNyZW1lbnRzIEBhdG9taWMgYnkgMS4gIElmIHRoZSByZXN1bHQgaXMgMCwgcmV0dXJucyB0cnVlIGFuZCBsb2NrcworICogQGxvY2suICBSZXR1cm5zIGZhbHNlIGZvciBhbGwgb3RoZXIgY2FzZXMuCiAgKi8KIGV4dGVybiBpbnQgX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljX3QgKmF0b21pYywgc3BpbmxvY2tfdCAqbG9jayk7CiAjZGVmaW5lIGF0b21pY19kZWNfYW5kX2xvY2soYXRvbWljLCBsb2NrKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IDlkNWRhOGIuLjUwZGZkMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC03MiwxMCArNzIsMTggQEAKIC8qIExvd2xldmVsIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGUgZGV2aWNlIE1NSU8uCiAgKiBJbnRlcm5hbCwgZG9uJ3QgdXNlIHRoYXQgb3V0c2lkZSBvZiBzc2IuICovCiBzdHJ1Y3Qgc3NiX2J1c19vcHMgeworCXU4ICgqcmVhZDgpKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQpOwogCXUxNiAoKnJlYWQxNikoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCk7CiAJdTMyICgqcmVhZDMyKShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0KTsKKwl2b2lkICgqd3JpdGU4KShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0LCB1OCB2YWx1ZSk7CiAJdm9pZCAoKndyaXRlMTYpKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSk7CiAJdm9pZCAoKndyaXRlMzIpKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7CisjaWZkZWYgQ09ORklHX1NTQl9CTE9DS0lPCisJdm9pZCAoKmJsb2NrX3JlYWQpKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHZvaWQgKmJ1ZmZlciwKKwkJCSAgIHNpemVfdCBjb3VudCwgdTE2IG9mZnNldCwgdTggcmVnX3dpZHRoKTsKKwl2b2lkICgqYmxvY2tfd3JpdGUpKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCSAgICBzaXplX3QgY291bnQsIHUxNiBvZmZzZXQsIHU4IHJlZ193aWR0aCk7CisjZW5kaWYKIH07CiAKIApAQCAtMTI5LDYgKzEzNywxMCBAQAogCWNvbnN0IHN0cnVjdCBzc2JfYnVzX29wcyAqb3BzOwogCiAJc3RydWN0IGRldmljZSAqZGV2OworCS8qIFBvaW50ZXIgdG8gdGhlIGRldmljZSB0aGF0IGhhcyB0byBiZSB1c2VkIGZvcgorCSAqIGFueSBETUEgcmVsYXRlZCBvcGVyYXRpb24uICovCisJc3RydWN0IGRldmljZSAqZG1hX2RldjsKKwogCXN0cnVjdCBzc2JfYnVzICpidXM7CiAJc3RydWN0IHNzYl9kZXZpY2VfaWQgaWQ7CiAKQEAgLTI0Myw5ICsyNTUsOSBAQAogCS8qIFBvaW50ZXIgdG8gdGhlIFBDTUNJQSBkZXZpY2UgKG9ubHkgaWYgYnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ01DSUEpLiAqLwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpob3N0X3BjbWNpYTsKIAotI2lmZGVmIENPTkZJR19TU0JfUENJSE9TVAorI2lmZGVmIENPTkZJR19TU0JfU1BST00KIAkvKiBNdXRleCB0byBwcm90ZWN0IHRoZSBTUFJPTSB3cml0aW5nLiAqLwotCXN0cnVjdCBtdXRleCBwY2lfc3Byb21fbXV0ZXg7CisJc3RydWN0IG11dGV4IHNwcm9tX211dGV4OwogI2VuZGlmCiAKIAkvKiBJRCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ2hpcC4gKi8KQEAgLTI1OCw5ICsyNzAsNiBAQAogCXN0cnVjdCBzc2JfZGV2aWNlIGRldmljZXNbU1NCX01BWF9OUl9DT1JFU107CiAJdTggbnJfZGV2aWNlczsKIAotCS8qIFJlZmVyZW5jZSBjb3VudC4gTnVtYmVyIG9mIHN1c3BlbmRlZCBkZXZpY2VzLiAqLwotCXU4IHN1c3BlbmRfY250OwotCiAJLyogU29mdHdhcmUgSUQgbnVtYmVyIGZvciB0aGlzIGJ1cy4gKi8KIAl1bnNpZ25lZCBpbnQgYnVzbnVtYmVyOwogCkBAIC0yODIsNiArMjkxLDEzIEBACiAJc3RydWN0IHNzYl9ib2FyZGluZm8gYm9hcmRpbmZvOwogCS8qIENvbnRlbnRzIG9mIHRoZSBTUFJPTS4gKi8KIAlzdHJ1Y3Qgc3NiX3Nwcm9tIHNwcm9tOworCS8qIElmIHRoZSBib2FyZCBoYXMgYSBjYXJkYnVzIHNsb3QsIHRoaXMgaXMgc2V0IHRvIHRydWUuICovCisJYm9vbCBoYXNfY2FyZGJ1c19zbG90OworCisjaWZkZWYgQ09ORklHX1NTQl9FTUJFRERFRAorCS8qIExvY2sgZm9yIEdQSU8gcmVnaXN0ZXIgYWNjZXNzLiAqLworCXNwaW5sb2NrX3QgZ3Bpb19sb2NrOworI2VuZGlmIC8qIEVNQkVEREVEICovCiAKIAkvKiBJbnRlcm5hbC1vbmx5IHN0dWZmIGZvbGxvd3MuIERvIG5vdCB0b3VjaC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0yOTQsOCArMzEwLDEzIEBACiAKIC8qIFRoZSBpbml0aWFsaXphdGlvbi1pbnZhcmlhbnRzLiAqLwogc3RydWN0IHNzYl9pbml0X2ludmFyaWFudHMgeworCS8qIFZlcnNpb25pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFBDQi4gKi8KIAlzdHJ1Y3Qgc3NiX2JvYXJkaW5mbyBib2FyZGluZm87CisJLyogVGhlIFNQUk9NIGluZm9ybWF0aW9uLiBUaGF0J3MgZWl0aGVyIHN0b3JlZCBpbiBhbgorCSAqIEVFUFJPTSBvciBOVlJBTSBvbiB0aGUgYm9hcmQuICovCiAJc3RydWN0IHNzYl9zcHJvbSBzcHJvbTsKKwkvKiBJZiB0aGUgYm9hcmQgaGFzIGEgY2FyZGJ1cyBzbG90LCB0aGlzIGlzIHNldCB0byB0cnVlLiAqLworCWJvb2wgaGFzX2NhcmRidXNfc2xvdDsKIH07CiAvKiBUeXBlIG9mIGZ1bmN0aW9uIHRvIGZldGNoIHRoZSBpbnZhcmlhbnRzLiAqLwogdHlwZWRlZiBpbnQgKCpzc2JfaW52YXJpYW50c19mdW5jX3QpKHN0cnVjdCBzc2JfYnVzICpidXMsCkBAIC0zMjAsNiArMzQxLDEzIEBACiAKIGV4dGVybiB2b2lkIHNzYl9idXNfdW5yZWdpc3RlcihzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKIAorLyogU3VzcGVuZCBhIFNTQiBidXMuCisgKiBDYWxsIHRoaXMgZnJvbSB0aGUgcGFyZW50IGJ1cyBzdXNwZW5kIHJvdXRpbmUuICovCitleHRlcm4gaW50IHNzYl9idXNfc3VzcGVuZChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKKy8qIFJlc3VtZSBhIFNTQiBidXMuCisgKiBDYWxsIHRoaXMgZnJvbSB0aGUgcGFyZW50IGJ1cyByZXN1bWUgcm91dGluZS4gKi8KK2V4dGVybiBpbnQgc3NiX2J1c19yZXN1bWUoc3RydWN0IHNzYl9idXMgKmJ1cyk7CisKIGV4dGVybiB1MzIgc3NiX2Nsb2Nrc3BlZWQoc3RydWN0IHNzYl9idXMgKmJ1cyk7CiAKIC8qIElzIHRoZSBkZXZpY2UgZW5hYmxlZCBpbiBoYXJkd2FyZT8gKi8KQEAgLTMzMiw2ICszNjAsMTAgQEAKIAogCiAvKiBEZXZpY2UgTU1JTyByZWdpc3RlciByZWFkL3dyaXRlIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyBpbmxpbmUgdTggc3NiX3JlYWQ4KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIGRldi0+b3BzLT5yZWFkOChkZXYsIG9mZnNldCk7Cit9CiBzdGF0aWMgaW5saW5lIHUxNiBzc2JfcmVhZDE2KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQpCiB7CiAJcmV0dXJuIGRldi0+b3BzLT5yZWFkMTYoZGV2LCBvZmZzZXQpOwpAQCAtMzQwLDYgKzM3MiwxMCBAQAogewogCXJldHVybiBkZXYtPm9wcy0+cmVhZDMyKGRldiwgb2Zmc2V0KTsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzc2Jfd3JpdGU4KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHU4IHZhbHVlKQoreworCWRldi0+b3BzLT53cml0ZTgoZGV2LCBvZmZzZXQsIHZhbHVlKTsKK30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzc2Jfd3JpdGUxNihzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCiB7CiAJZGV2LT5vcHMtPndyaXRlMTYoZGV2LCBvZmZzZXQsIHZhbHVlKTsKQEAgLTM0OCw2ICszODQsMTkgQEAKIHsKIAlkZXYtPm9wcy0+d3JpdGUzMihkZXYsIG9mZnNldCwgdmFsdWUpOwogfQorI2lmZGVmIENPTkZJR19TU0JfQkxPQ0tJTworc3RhdGljIGlubGluZSB2b2lkIHNzYl9ibG9ja19yZWFkKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHZvaWQgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBjb3VudCwgdTE2IG9mZnNldCwgdTggcmVnX3dpZHRoKQoreworCWRldi0+b3BzLT5ibG9ja19yZWFkKGRldiwgYnVmZmVyLCBjb3VudCwgb2Zmc2V0LCByZWdfd2lkdGgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3NiX2Jsb2NrX3dyaXRlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkgICBzaXplX3QgY291bnQsIHUxNiBvZmZzZXQsIHU4IHJlZ193aWR0aCkKK3sKKwlkZXYtPm9wcy0+YmxvY2tfd3JpdGUoZGV2LCBidWZmZXIsIGNvdW50LCBvZmZzZXQsIHJlZ193aWR0aCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9CTE9DS0lPICovCiAKIAogLyogVHJhbnNsYXRpb24gKHJvdXRpbmcpIGJpdHMgdGhhdCBuZWVkIHRvIGJlIE9SZWQgdG8gRE1BCkBAIC00MDAsNSArNDQ5LDEyIEBACiBleHRlcm4gdTMyIHNzYl9hZG1hdGNoX2Jhc2UodTMyIGFkbSk7CiBleHRlcm4gdTMyIHNzYl9hZG1hdGNoX3NpemUodTMyIGFkbSk7CiAKKy8qIFBDSSBkZXZpY2UgbWFwcGluZyBhbmQgZml4dXAgcm91dGluZXMuCisgKiBDYWxsZWQgZnJvbSB0aGUgYXJjaGl0ZWN0dXJlIHBjaWJpb3MgaW5pdCBjb2RlLgorICogVGhlc2UgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFNTQl9FTUJFRERFRCBjb25maWd1cmF0aW9ucy4gKi8KKyNpZmRlZiBDT05GSUdfU1NCX0VNQkVEREVECitpbnQgc3NiX3BjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2ludCBzc2JfcGNpYmlvc19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CisjZW5kaWYgLyogQ09ORklHX1NTQl9FTUJFRERFRCAqLwogCiAjZW5kaWYgLyogTElOVVhfU1NCX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oCmluZGV4IDRjYjk5NTQuLjdkN2UwM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oCkBAIC01MSw5ICs1MSwxMiBAQAogI2RlZmluZSAgU1NCX0NISVBDT19DQVBfSlRBR00JCTB4MDA0MDAwMDAJLyogSlRBRyBtYXN0ZXIgcHJlc2VudCAqLwogI2RlZmluZSAgU1NCX0NISVBDT19DQVBfQlJPTQkJMHgwMDgwMDAwMAkvKiBJbnRlcm5hbCBib290IFJPTSBhY3RpdmUgKi8KICNkZWZpbmUgIFNTQl9DSElQQ09fQ0FQXzY0QklUCQkweDA4MDAwMDAwCS8qIDY0LWJpdCBCYWNrcGxhbmUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0FQX1BNVQkJMHgxMDAwMDAwMAkvKiBQTVUgYXZhaWxhYmxlIChyZXYgPj0gMjApICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NBUF9FQ0kJCTB4MjAwMDAwMDAJLyogRUNJIGF2YWlsYWJsZSAocmV2ID49IDIwKSAqLwogI2RlZmluZSBTU0JfQ0hJUENPX0NPUkVDVEwJCTB4MDAwOAogI2RlZmluZSAgU1NCX0NISVBDT19DT1JFQ1RMX1VBUlRDTEswCTB4MDAwMDAwMDEJLyogRHJpdmUgVUFSVCB3aXRoIGludGVybmFsIGNsb2NrICovCiAjZGVmaW5lCSBTU0JfQ0hJUENPX0NPUkVDVExfU0UJCTB4MDAwMDAwMDIJLyogc3luYyBjbGsgb3V0IGVuYWJsZSAoY29yZXJldiA+PSAzKSAqLworI2RlZmluZSAgU1NCX0NISVBDT19DT1JFQ1RMX1VBUlRDTEtFTgkweDAwMDAwMDA4CS8qIFVBUlQgY2xvY2sgZW5hYmxlIChyZXYgPj0gMjEpICovCiAjZGVmaW5lIFNTQl9DSElQQ09fQklTVAkJCTB4MDAwQwogI2RlZmluZSBTU0JfQ0hJUENPX09UUFMJCQkweDAwMTAJCS8qIE9UUCBzdGF0dXMgKi8KICNkZWZpbmUJIFNTQl9DSElQQ09fT1RQU19QUk9HRkFJTAkweDgwMDAwMDAwCkBAIC0zNTcsMTAgKzM2MCwxNCBAQAogCXUxNiBmYXN0X3B3cnVwX2RlbGF5OwogfTsKIAorc3RhdGljIGlubGluZSBib29sIHNzYl9jaGlwY29fYXZhaWxhYmxlKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCit7CisJcmV0dXJuIChjYy0+ZGV2ICE9IE5VTEwpOworfQorCiBleHRlcm4gdm9pZCBzc2JfY2hpcGNvbW1vbl9pbml0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpOwogCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KLWV4dGVybiB2b2lkIHNzYl9jaGlwY29fc3VzcGVuZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb19zdXNwZW5kKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpOwogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb19yZXN1bWUoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYyk7CiAKIGV4dGVybiB2b2lkIHNzYl9jaGlwY29fZ2V0X2Nsb2NrY3B1KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCkBAIC0zODIsMTEgKzM4OSwxNyBAQAogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb193YXRjaGRvZ190aW1lcl9zZXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKIAkJCQkJICB1MzIgdGlja3MpOwogCit2b2lkIHNzYl9jaGlwY29faXJxX21hc2soc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CisKK3UzMiBzc2JfY2hpcGNvX2lycV9zdGF0dXMoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2spOworCisvKiBDaGlwY29tbW9uIEdQSU8gcGluIGFjY2Vzcy4gKi8KIHUzMiBzc2JfY2hpcGNvX2dwaW9faW4oc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2spOwotCi12b2lkIHNzYl9jaGlwY29fZ3Bpb19vdXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Ci0KLXZvaWQgc3NiX2NoaXBjb19ncGlvX291dGVuKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIHNzYl9jaGlwY29fZ3Bpb19vdXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Cit1MzIgc3NiX2NoaXBjb19ncGlvX291dGVuKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIHNzYl9jaGlwY29fZ3Bpb19jb250cm9sKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIHNzYl9jaGlwY29fZ3Bpb19pbnRtYXNrKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIHNzYl9jaGlwY29fZ3Bpb19wb2xhcml0eShzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIAogI2lmZGVmIENPTkZJR19TU0JfU0VSSUFMCiBleHRlcm4gaW50IHNzYl9jaGlwY29fc2VyaWFsX2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfZXh0aWYuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfZXh0aWYuaAppbmRleCBhOTE2NDM1Li45MTE2MWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2V4dGlmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9leHRpZi5oCkBAIC0xNzEsMTEgKzE3MSwxNSBAQAogZXh0ZXJuIHZvaWQgc3NiX2V4dGlmX3RpbWluZ19pbml0KHN0cnVjdCBzc2JfZXh0aWYgKmV4dGlmLAogCQkJCSAgdW5zaWduZWQgbG9uZyBucyk7CiAKK2V4dGVybiB2b2lkIHNzYl9leHRpZl93YXRjaGRvZ190aW1lcl9zZXQoc3RydWN0IHNzYl9leHRpZiAqZXh0aWYsCisJCQkJCSB1MzIgdGlja3MpOworCisvKiBFeHRpZiBHUElPIHBpbiBhY2Nlc3MgKi8KIHUzMiBzc2JfZXh0aWZfZ3Bpb19pbihzdHJ1Y3Qgc3NiX2V4dGlmICpleHRpZiwgdTMyIG1hc2spOwotCi12b2lkIHNzYl9leHRpZl9ncGlvX291dChzdHJ1Y3Qgc3NiX2V4dGlmICpleHRpZiwgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Ci0KLXZvaWQgc3NiX2V4dGlmX2dwaW9fb3V0ZW4oc3RydWN0IHNzYl9leHRpZiAqZXh0aWYsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIHNzYl9leHRpZl9ncGlvX291dChzdHJ1Y3Qgc3NiX2V4dGlmICpleHRpZiwgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Cit1MzIgc3NiX2V4dGlmX2dwaW9fb3V0ZW4oc3RydWN0IHNzYl9leHRpZiAqZXh0aWYsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIHNzYl9leHRpZl9ncGlvX3BvbGFyaXR5KHN0cnVjdCBzc2JfZXh0aWYgKmV4dGlmLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKK3UzMiBzc2JfZXh0aWZfZ3Bpb19pbnRtYXNrKHN0cnVjdCBzc2JfZXh0aWYgKmV4dGlmLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIAogI2lmZGVmIENPTkZJR19TU0JfU0VSSUFMCiBleHRlcm4gaW50IHNzYl9leHRpZl9zZXJpYWxfaW5pdChzdHJ1Y3Qgc3NiX2V4dGlmICpleHRpZiwKQEAgLTIwMCw1ICsyMDQsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZQordm9pZCBzc2JfZXh0aWZfd2F0Y2hkb2dfdGltZXJfc2V0KHN0cnVjdCBzc2JfZXh0aWYgKmV4dGlmLAorCQkJCSAgdTMyIHRpY2tzKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX1NTQl9EUklWRVJfRVhUSUYgKi8KICNlbmRpZiAvKiBMSU5VWF9TU0JfRVhUSUZDT1JFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2dpZ2UuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfZ2lnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmJkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2dpZ2UuaApAQCAtMCwwICsxLDE3NCBAQAorI2lmbmRlZiBMSU5VWF9TU0JfRFJJVkVSX0dJR0VfSF8KKyNkZWZpbmUgTElOVVhfU1NCX0RSSVZFUl9HSUdFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworCisjaWZkZWYgQ09ORklHX1NTQl9EUklWRVJfR0lHRQorCisKKyNkZWZpbmUgU1NCX0dJR0VfUENJSU8JCQkweDAwMDAgLyogUENJIEkvTyBSZWdpc3RlcnMgKDEwMjQgYnl0ZXMpICovCisjZGVmaW5lIFNTQl9HSUdFX1JFU0VSVkVECQkweDA0MDAgLyogUmVzZXJ2ZWQgKDEwMjQgYnl0ZXMpICovCisjZGVmaW5lIFNTQl9HSUdFX1BDSUNGRwkJCTB4MDgwMCAvKiBQQ0kgY29uZmlnIHNwYWNlICgyNTYgYnl0ZXMpICovCisjZGVmaW5lIFNTQl9HSUdFX1NISU1fRkxVU0hTVEFUCQkweDBDMDAgLyogUENJIHRvIE9DUDogRmx1c2ggc3RhdHVzIGNvbnRyb2wgKDMyYml0KSAqLworI2RlZmluZSBTU0JfR0lHRV9TSElNX0ZMVVNIUkRBCQkweDBDMDQgLyogUENJIHRvIE9DUDogRmx1c2ggcmVhZCBhZGRyZXNzICgzMmJpdCkgKi8KKyNkZWZpbmUgU1NCX0dJR0VfU0hJTV9GTFVTSFRPCQkweDBDMDggLyogUENJIHRvIE9DUDogRmx1c2ggdGltZW91dCBjb3VudGVyICgzMmJpdCkgKi8KKyNkZWZpbmUgU1NCX0dJR0VfU0hJTV9CQVJSSUVSCQkweDBDMEMgLyogUENJIHRvIE9DUDogQmFycmllciByZWdpc3RlciAoMzJiaXQpICovCisjZGVmaW5lIFNTQl9HSUdFX1NISU1fTUFPQ1BTSQkJMHgwQzEwIC8qIFBDSSB0byBPQ1A6IE1hb2NwU0kgQ29udHJvbCAoMzJiaXQpICovCisjZGVmaW5lIFNTQl9HSUdFX1NISU1fU0lPQ1BNQQkJMHgwQzE0IC8qIFBDSSB0byBPQ1A6IFNpb2NwTWEgQ29udHJvbCAoMzJiaXQpICovCisKKy8qIFRNIFN0YXR1cyBIaWdoIGZsYWdzICovCisjZGVmaW5lIFNTQl9HSUdFX1RNU0hJR0hfUkdNSUkJCTB4MDAwMTAwMDAgLyogSGF2ZSBhbiBSR01JSSBQSFktYnVzICovCisvKiBUTSBTdGF0dXMgTG93IGZsYWdzICovCisjZGVmaW5lIFNTQl9HSUdFX1RNU0xPV19UWEJZUEFTUwkweDAwMDgwMDAwIC8qIFRYIGJ5cGFzcyAobm8gZGVsYXkpICovCisjZGVmaW5lIFNTQl9HSUdFX1RNU0xPV19SWEJZUEFTUwkweDAwMTAwMDAwIC8qIFJYIGJ5cGFzcyAobm8gZGVsYXkpICovCisjZGVmaW5lIFNTQl9HSUdFX1RNU0xPV19ETExFTgkJMHgwMTAwMDAwMCAvKiBFbmFibGUgRExMIGNvbnRyb2xzICovCisKKy8qIEJvYXJkZmxhZ3MgKGxvdykgKi8KKyNkZWZpbmUgU1NCX0dJR0VfQkZMX1JPQk9TV0lUQ0gJCTB4MDAxMAorCisKKyNkZWZpbmUgU1NCX0dJR0VfTUVNX1JFU19OQU1FCQkiU1NCIEJyb2FkY29tIDQ3eHggR2lnRSBtZW1vcnkiCisjZGVmaW5lIFNTQl9HSUdFX0lPX1JFU19OQU1FCQkiU1NCIEJyb2FkY29tIDQ3eHggR2lnRSBJL08iCisKK3N0cnVjdCBzc2JfZ2lnZSB7CisJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKKworCXNwaW5sb2NrX3QgbG9jazsKKworCS8qIFRydWUsIGlmIHRoZSBkZXZpY2UgaGFzIGFuIFJHTUlJIGJ1cy4KKwkgKiBGYWxzZSwgaWYgdGhlIGRldmljZSBoYXMgYSBHTUlJIGJ1cy4gKi8KKwlib29sIGhhc19yZ21paTsKKworCS8qIFRoZSBQQ0kgY29udHJvbGxlciBkZXZpY2UuICovCisJc3RydWN0IHBjaV9jb250cm9sbGVyIHBjaV9jb250cm9sbGVyOworCXN0cnVjdCBwY2lfb3BzIHBjaV9vcHM7CisJc3RydWN0IHJlc291cmNlIG1lbV9yZXNvdXJjZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgaW9fcmVzb3VyY2U7Cit9OworCisvKiBDaGVjayB3aGV0aGVyIGEgUENJIGRldmljZSBpcyBhIFNTQiBHaWdhYml0IEV0aGVybmV0IGNvcmUuICovCitleHRlcm4gYm9vbCBwZGV2X2lzX3NzYl9naWdlX2NvcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCisvKiBDb252ZXJ0IGEgcGNpX2RldiBwb2ludGVyIHRvIGEgc3NiX2dpZ2UgcG9pbnRlci4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNzYl9naWdlICogcGRldl90b19zc2JfZ2lnZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAoIXBkZXZfaXNfc3NiX2dpZ2VfY29yZShwZGV2KSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwZGV2LT5idXMtPm9wcywgc3RydWN0IHNzYl9naWdlLCBwY2lfb3BzKTsKK30KKworLyogUmV0dXJucyB3aGV0aGVyIHRoZSBQSFkgaXMgY29ubmVjdGVkIGJ5IGFuIFJHTUlJIGJ1cy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzc2JfZ2lnZV9pc19yZ21paShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiA9IHBkZXZfdG9fc3NiX2dpZ2UocGRldik7CisJcmV0dXJuIChkZXYgPyBkZXYtPmhhc19yZ21paSA6IDApOworfQorCisvKiBSZXR1cm5zIHdoZXRoZXIgd2UgaGF2ZSBhIFJvYm9zd2l0Y2guICovCitzdGF0aWMgaW5saW5lIGJvb2wgc3NiX2dpZ2VfaGF2ZV9yb2Jvc3dpdGNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBzc2JfZ2lnZSAqZGV2ID0gcGRldl90b19zc2JfZ2lnZShwZGV2KTsKKwlpZiAoZGV2KQorCQlyZXR1cm4gISEoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmCisJCQkgIFNTQl9HSUdFX0JGTF9ST0JPU1dJVENIKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJucyB3aGV0aGVyIHdlIGNhbiBvbmx5IGRvIG9uZSBETUEgYXQgb25jZS4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzc2JfZ2lnZV9vbmVfZG1hX2F0X29uY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHNzYl9naWdlICpkZXYgPSBwZGV2X3RvX3NzYl9naWdlKHBkZXYpOworCWlmIChkZXYpCisJCXJldHVybiAoKGRldi0+ZGV2LT5idXMtPmNoaXBfaWQgPT0gMHg0Nzg1KSAmJgorCQkJKGRldi0+ZGV2LT5idXMtPmNoaXBfcmV2IDwgMikpOworCXJldHVybiAwOworfQorCisvKiBSZXR1cm5zIHdoZXRoZXIgd2UgbXVzdCBmbHVzaCBwb3N0ZWQgd3JpdGVzLiAqLworc3RhdGljIGlubGluZSBib29sIHNzYl9naWdlX211c3RfZmx1c2hfcG9zdGVkX3dyaXRlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc3NiX2dpZ2UgKmRldiA9IHBkZXZfdG9fc3NiX2dpZ2UocGRldik7CisJaWYgKGRldikKKwkJcmV0dXJuIChkZXYtPmRldi0+YnVzLT5jaGlwX2lkID09IDB4NDc4NSk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBjaGFyICogbnZyYW1fZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOworLyogR2V0IHRoZSBkZXZpY2UgTUFDIGFkZHJlc3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzc2JfZ2lnZV9nZXRfbWFjYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggKm1hY2FkZHIpCit7CisjaWZkZWYgQ09ORklHX0JDTTk0N1hYCisJY2hhciAqcmVzID0gbnZyYW1fZ2V0KCJldDBtYWNhZGRyIik7CisJaWYgKHJlcykKKwkJbWVtY3B5KG1hY2FkZHIsIHJlcywgNik7CisjZW5kaWYKK30KKworZXh0ZXJuIGludCBzc2JfZ2lnZV9wY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHNzYl9kZXZpY2UgKnNkZXYsCisJCQkJCSAgc3RydWN0IHBjaV9kZXYgKnBkZXYpOworZXh0ZXJuIGludCBzc2JfZ2lnZV9tYXBfaXJxKHN0cnVjdCBzc2JfZGV2aWNlICpzZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworLyogVGhlIEdpZ0UgZHJpdmVyIGlzIG5vdCBhIHN0YW5kYWxvbmUgbW9kdWxlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgc3VwcG9ydAorICogZm9yIHVucmVnaXN0ZXJpbmcgdGhlIGRyaXZlci4gU28gd2UgY291bGQgbm90IHVubG9hZCB0aGUgbW9kdWxlIGFueXdheS4gKi8KK2V4dGVybiBpbnQgc3NiX2dpZ2VfaW5pdCh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzc2JfZ2lnZV9leGl0KHZvaWQpCit7CisJLyogQ3VycmVudGx5IHdlIGNhbiBub3QgdW5yZWdpc3RlciB0aGUgR2lnRSBkcml2ZXIsCisJICogYmVjYXVzZSB3ZSBjYW4gbm90IHVucmVnaXN0ZXIgdGhlIFBDSSBicmlkZ2UuICovCisJQlVHKCk7Cit9CisKKworI2Vsc2UgLyogQ09ORklHX1NTQl9EUklWRVJfR0lHRSAqLworLyogR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgZGlzYWJsZWQgKi8KKworCitzdGF0aWMgaW5saW5lIGludCBzc2JfZ2lnZV9wY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHNzYl9kZXZpY2UgKnNkZXYsCisJCQkJCQkgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitzdGF0aWMgaW5saW5lIGludCBzc2JfZ2lnZV9tYXBfaXJxKHN0cnVjdCBzc2JfZGV2aWNlICpzZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiAtRU5PU1lTOworfQorc3RhdGljIGlubGluZSBpbnQgc3NiX2dpZ2VfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHNzYl9naWdlX2V4aXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSBib29sIHBkZXZfaXNfc3NiX2dpZ2VfY29yZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNzYl9naWdlICogcGRldl90b19zc2JfZ2lnZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBzc2JfZ2lnZV9pc19yZ21paShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBzc2JfZ2lnZV9oYXZlX3JvYm9zd2l0Y2goc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGJvb2wgc3NiX2dpZ2Vfb25lX2RtYV9hdF9vbmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBib29sIHNzYl9naWdlX211c3RfZmx1c2hfcG9zdGVkX3dyaXRlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19TU0JfRFJJVkVSX0dJR0UgKi8KKyNlbmRpZiAvKiBMSU5VWF9TU0JfRFJJVkVSX0dJR0VfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfcGNpLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX3BjaS5oCmluZGV4IDljZmZmYjcuLjQxZTMzMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9wY2kuaApAQCAtMSw2ICsxLDExIEBACiAjaWZuZGVmIExJTlVYX1NTQl9QQ0lDT1JFX0hfCiAjZGVmaW5lIExJTlVYX1NTQl9QQ0lDT1JFX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcGNpX2RldjsKKworCiAjaWZkZWYgQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRQogCiAvKiBQQ0kgY29yZSByZWdpc3RlcnMuICovCkBAIC01MSw2ICs1NiwxMSBAQAogI2RlZmluZSAgU1NCX1BDSUNPUkVfU0JUT1BDSTFfTUFTSwkweEZDMDAwMDAwCiAjZGVmaW5lIFNTQl9QQ0lDT1JFX1NCVE9QQ0kyCQkweDAxMDgJLyogQmFja3BsYW5lIHRvIFBDSSB0cmFuc2xhdGlvbiAyIChzYnRvcGNpMikgKi8KICNkZWZpbmUgIFNTQl9QQ0lDT1JFX1NCVE9QQ0kyX01BU0sJMHhDMDAwMDAwMAorI2RlZmluZSBTU0JfUENJQ09SRV9QQ0lDRkcwCQkweDA0MDAJLyogUENJIGNvbmZpZyBzcGFjZSAwIChyZXYgPj0gOCkgKi8KKyNkZWZpbmUgU1NCX1BDSUNPUkVfUENJQ0ZHMQkJMHgwNTAwCS8qIFBDSSBjb25maWcgc3BhY2UgMSAocmV2ID49IDgpICovCisjZGVmaW5lIFNTQl9QQ0lDT1JFX1BDSUNGRzIJCTB4MDYwMAkvKiBQQ0kgY29uZmlnIHNwYWNlIDIgKHJldiA+PSA4KSAqLworI2RlZmluZSBTU0JfUENJQ09SRV9QQ0lDRkczCQkweDA3MDAJLyogUENJIGNvbmZpZyBzcGFjZSAzIChyZXYgPj0gOCkgKi8KKyNkZWZpbmUgU1NCX1BDSUNPUkVfU1BST00od29yZG9mZnNldCkJKDB4MDgwMCArICgod29yZG9mZnNldCkgKiAyKSkgLyogU1BST00gc2hhZG93IGFyZWEgKDcyIGJ5dGVzKSAqLwogCiAvKiBTQnRvUENJeCAqLwogI2RlZmluZSBTU0JfUENJQ09SRV9TQlRPUENJX01FTQkJMHgwMDAwMDAwMApAQCAtODMsNiArOTMsOSBAQAogZXh0ZXJuIGludCBzc2JfcGNpY29yZV9kZXZfaXJxdmVjc19lbmFibGUoc3RydWN0IHNzYl9wY2ljb3JlICpwYywKIAkJCQkJICBzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KTsKIAoraW50IHNzYl9wY2ljb3JlX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmQpOworaW50IHNzYl9wY2ljb3JlX3BjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworCiAKICNlbHNlIC8qIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUgKi8KIApAQCAtMTAyLDUgKzExNSwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lCitpbnQgc3NiX3BjaWNvcmVfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBpbmxpbmUKK2ludCBzc2JfcGNpY29yZV9wY2liaW9zX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXJldHVybiAtRU5PREVWOworfQorCiAjZW5kaWYgLyogQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRSAqLwogI2VuZGlmIC8qIExJTlVYX1NTQl9QQ0lDT1JFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZW1iZWRkZWQuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9lbWJlZGRlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOGRlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZW1iZWRkZWQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIExJTlVYX1NTQl9FTUJFRERFRF9IXworI2RlZmluZSBMSU5VWF9TU0JfRU1CRURERURfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorCisKK2V4dGVybiBpbnQgc3NiX3dhdGNoZG9nX3RpbWVyX3NldChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MzIgdGlja3MpOworCisvKiBHZW5lcmljIEdQSU8gQVBJICovCit1MzIgc3NiX2dwaW9faW4oc3RydWN0IHNzYl9idXMgKmJ1cywgdTMyIG1hc2spOwordTMyIHNzYl9ncGlvX291dChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKK3UzMiBzc2JfZ3Bpb19vdXRlbihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKK3UzMiBzc2JfZ3Bpb19jb250cm9sKHN0cnVjdCBzc2JfYnVzICpidXMsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIHNzYl9ncGlvX2ludG1hc2soc3RydWN0IHNzYl9idXMgKmJ1cywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Cit1MzIgc3NiX2dwaW9fcG9sYXJpdHkoc3RydWN0IHNzYl9idXMgKmJ1cywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CisKKyNlbmRpZiAvKiBMSU5VWF9TU0JfRU1CRURERURfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA0YzI1NzdiLi44ZGY2ZDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC02MCw3ICs2MCw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZGV2LmggYi9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCmluZGV4IGY3NTJlNzMuLmYyNzY3YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNkZXYuaApAQCAtNDUsMTIgKzQ1LDE2IEBACiAJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKLSNkZWZpbmUgU1lTREVWX0NMQVNTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAJCVwKLXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlIGF0dHJfIyNfbmFtZSA9IHsgCQkJXAorI2RlZmluZSBfU1lTREVWX0NMQVNTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAJCVwKK3sJCQkJCSAJCQlcCiAJLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUgfSwJXAogCS5zaG93CT0gX3Nob3csCQkJCQlcCiAJLnN0b3JlCT0gX3N0b3JlLAkJCQkJXAotfTsKK30KKworI2RlZmluZSBTWVNERVZfQ0xBU1NfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIAkJXAorCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlIGF0dHJfIyNfbmFtZSA9IAkJXAorCQlfU1lTREVWX0NMQVNTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQogCiAKIGV4dGVybiBpbnQgc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKik7CkBAIC0xMDAsMTUgKzEwNCwxNiBAQAogfTsKIAogCi0jZGVmaW5lIF9TWVNERVZfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCQkJXAorI2RlZmluZSBfU1lTREVWX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQkJXAogewkJCQkJCQkJXAogCS5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSB9LAlcCiAJLnNob3cJPSBfc2hvdywJCQkJCVwKIAkuc3RvcmUJPSBfc3RvcmUsCQkJCQlcCiB9CiAKLSNkZWZpbmUgU1lTREVWX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQkJXAotc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgYXR0cl8jI19uYW1lID0gX1NZU0RFVl9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSk7CisjZGVmaW5lIFNZU0RFVl9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkJCVwKKwlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBhdHRyXyMjX25hbWUgPQkJCVwKKwkJX1NZU0RFVl9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSk7CiAKIGV4dGVybiBpbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICosIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICopOwogZXh0ZXJuIHZvaWQgc3lzZGV2X3JlbW92ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICosIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDgwMjcxMDQuLjAzMzc4ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTEzMSw3ICsxMzEsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcmVtb3ZlX2RpcihzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKLQk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHN5c2ZzX3JlbmFtZV9kaXIoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5ld19uYW1lKQpAQCAtMTYwLDcgKzE1OSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyKQogewotCTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLApAQCAtMTY5LDEwICsxNjcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkJIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfbGluayhzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTE4Myw3ICsxODAsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfZ3JvdXAoc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0xOTUsNyArMTkxLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19yZW1vdmVfZ3JvdXAoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JwKQogewotCTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoc3RydWN0IGtvYmplY3QgKmtvYmosCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCAwODAyN2YxLi5kOTZkOWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTIzOSw2ICsyMzksMTEgQEAKIAlyZXR1cm4gKHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICopcmVxOwogfQogCitzdHJ1Y3QgdGNwX2RlZmVycmVkX2FjY2VwdF9pbmZvIHsKKwlzdHJ1Y3Qgc29jayAqbGlzdGVuX3NrOworCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcXVlc3Q7Cit9OworCiBzdHJ1Y3QgdGNwX3NvY2sgewogCS8qIGluZXRfY29ubmVjdGlvbl9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHRjcF9zb2NrICovCiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrCWluZXRfY29ubjsKQEAgLTM3NCw2ICszNzksOCBAQAogCXVuc2lnbmVkIGludAkJa2VlcGFsaXZlX2ludHZsOyAgLyogdGltZSBpbnRlcnZhbCBiZXR3ZWVuIGtlZXAgYWxpdmUgcHJvYmVzICovCiAJaW50CQkJbGluZ2VyMjsKIAorCXN0cnVjdCB0Y3BfZGVmZXJyZWRfYWNjZXB0X2luZm8gZGVmZXJfdGNwX2FjY2VwdDsKKwogCXVuc2lnbmVkIGxvbmcgbGFzdF9zeW5xX292ZXJmbG93OyAKIAogCXUzMgl0c29fZGVmZXJyZWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RoZXJtYWwuaCBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCmluZGV4IDgxOGNhMWMuLjkwYzFjMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCkBAIC01MCw3ICs1MCw3IEBACiB9OwogCiAjZGVmaW5lIFRIRVJNQUxfVFJJUFNfTk9ORSAtMQotI2RlZmluZSBUSEVSTUFMX01BWF9UUklQUyAxMAorI2RlZmluZSBUSEVSTUFMX01BWF9UUklQUyAxMgogI2RlZmluZSBUSEVSTUFMX05BTUVfTEVOR1RIIDIwCiBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSB7CiAJaW50IGlkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oCmluZGV4IDQyMTMyM2UuLmFjY2Q3YmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgKQEAgLTksNiArOSw5IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCitzdHJ1Y3QgdGltZXNwZWM7CitzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjOworCiAvKgogICogU3lzdGVtIGNhbGwgcmVzdGFydCBibG9jay4KICAqLwpAQCAtMjYsNiArMjksMTUgQEAKIAkJCXUzMiBiaXRzZXQ7CiAJCQl1NjQgdGltZTsKIAkJfSBmdXRleDsKKwkJLyogRm9yIG5hbm9zbGVlcCAqLworCQlzdHJ1Y3QgeworCQkJY2xvY2tpZF90IGluZGV4OworCQkJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqcm10cDsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCQlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqY29tcGF0X3JtdHA7CisjZW5kaWYKKwkJCXU2NCBleHBpcmVzOworCQl9IG5hbm9zbGVlcDsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aWZtLmggYi9pbmNsdWRlL2xpbnV4L3RpZm0uaAppbmRleCBkYTc2ZWQ4Li44NDhjMGYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpZm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpZm0uaApAQCAtNzAsOSArNzAsOSBAQAogCiAjZGVmaW5lIFRJRk1fRklGT19FTkFCTEUgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBUSUZNX0ZJRk9fUkVBRFkgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVElGTV9GSUZPX01PUkUgICAgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIFRJRk1fRklGT19JTlRfU0VUQUxMICAgICAgMHgwMDAwZmZmZgogI2RlZmluZSBUSUZNX0ZJRk9fSU5UTUFTSyAgICAgICAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgVElGTV9GSUZPX1NJWkUgICAgICAgICAgICAweDAwMDAwMjAwCiAKICNkZWZpbmUgVElGTV9ETUFfUkVTRVQgICAgICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIFRJRk1fRE1BX1RYICAgICAgICAgICAgICAgMHgwMDAwODAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCAyMDkxYTE5Li5kMzJlZjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtMTc0LDYgKzE3NCwxMCBAQAogewogCW5zICs9IGEtPnR2X25zZWM7CiAJd2hpbGUodW5saWtlbHkobnMgPj0gTlNFQ19QRVJfU0VDKSkgeworCQkvKiBUaGUgZm9sbG93aW5nIGFzbSgpIHByZXZlbnRzIHRoZSBjb21waWxlciBmcm9tCisJCSAqIG9wdGltaXNpbmcgdGhpcyBsb29wIGludG8gYSBtb2R1bG8gb3BlcmF0aW9uLiAgKi8KKwkJYXNtKCIiIDogIityIihucykpOworCiAJCW5zIC09IE5TRUNfUEVSX1NFQzsKIAkJYS0+dHZfc2VjKys7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IGMzZjM3NDcuLjhlYTNlNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTIzMiwxNCArMjMyLDcgQEAKICNlbHNlCiAjZGVmaW5lIE5UUF9JTlRFUlZBTF9GUkVRICAoSFopCiAjZW5kaWYKLQotI2RlZmluZSBDTE9DS19USUNLX09WRVJGTE9XCShMQVRDSCAqIEhaIC0gQ0xPQ0tfVElDS19SQVRFKQotI2RlZmluZSBDTE9DS19USUNLX0FESlVTVAkoKChzNjQpQ0xPQ0tfVElDS19PVkVSRkxPVyAqIE5TRUNfUEVSX1NFQykgLyBcCi0JCQkJCShzNjQpQ0xPQ0tfVElDS19SQVRFKQotCi0vKiBCZWNhdXNlIHVzaW5nIE5TRUNfUEVSX1NFQyB3b3VsZCBiZSB0b28gZWFzeSAqLwotI2RlZmluZSBOVFBfSU5URVJWQUxfTEVOR1RIICgoKChzNjQpVElDS19VU0VDICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopICsgXAotCQkJICAgICAgQ0xPQ0tfVElDS19BREpVU1QpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCisjZGVmaW5lIE5UUF9JTlRFUlZBTF9MRU5HVEggKE5TRUNfUEVSX1NFQy9OVFBfSU5URVJWQUxfRlJFUSkKIAogLyogUmV0dXJucyBob3cgbG9uZyB0aWNrcyBhcmUgYXQgcHJlc2VudCwgaW4gbnMgLyAyXihTSElGVF9TQ0FMRS0xMCkuICovCiBleHRlcm4gdTY0IGN1cnJlbnRfdGlja19sZW5ndGgodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKaW5kZXggMjM1MmY0Ni4uNGJiNzA3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaApAQCAtMzgsMTggKzM4LDE5IEBACiAjZW5kaWYKIAogI2lmbmRlZiBucl9jcHVzX25vZGUKLSNkZWZpbmUgbnJfY3B1c19ub2RlKG5vZGUpCQkJCQkJCVwKLQkoewkJCQkJCQkJCVwKLQkJY3B1bWFza190IF9fdG1wX187CQkJCQkJXAotCQlfX3RtcF9fID0gbm9kZV90b19jcHVtYXNrKG5vZGUpOwkJCQlcCi0JCWNwdXNfd2VpZ2h0KF9fdG1wX18pOwkJCQkJCVwKKyNkZWZpbmUgbnJfY3B1c19ub2RlKG5vZGUpCQkJCVwKKwkoewkJCQkJCVwKKwkJbm9kZV90b19jcHVtYXNrX3B0cihfX3RtcF9fLCBub2RlKTsJXAorCQljcHVzX3dlaWdodCgqX190bXBfXyk7CQkJXAogCX0pCiAjZW5kaWYKIAotI2RlZmluZSBmb3JfZWFjaF9ub2RlX3dpdGhfY3B1cyhub2RlKQkJCQkJCVwKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKQkJCQkJCVwKKyNkZWZpbmUgZm9yX2VhY2hfbm9kZV93aXRoX2NwdXMobm9kZSkJCQlcCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkJCQlcCiAJCWlmIChucl9jcHVzX25vZGUobm9kZSkpCiAKK3ZvaWQgYXJjaF91cGRhdGVfY3B1X3RvcG9sb2d5KHZvaWQpOworCiAvKiBDb25mb3JtIHRvIEFDUEkgMi4wIFNMSVQgZGlzdGFuY2UgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTE9DQUxfRElTVEFOQ0UJCTEwCiAjZGVmaW5lIFJFTU9URV9ESVNUQU5DRQkJMjAKQEAgLTc4LDcgKzc5LDkgQEAKICAqIGJ5IGRlZmluaW5nIHRoZWlyIG93biBhcmNoLXNwZWNpZmljIGluaXRpYWxpemVyIGluIGluY2x1ZGUvYXNtL3RvcG9sb2d5LmguCiAgKiBBIGRlZmluaXRpb24gdGhlcmUgd2lsbCBhdXRvbWFnaWNhbGx5IG92ZXJyaWRlIHRoZXNlIGRlZmF1bHQgaW5pdGlhbGl6ZXJzCiAgKiBhbmQgYWxsb3cgYXJjaC1zcGVjaWZpYyBwZXJmb3JtYW5jZSB0dW5pbmcgb2Ygc2NoZWRfZG9tYWlucy4KKyAqIChPbmx5IG5vbi16ZXJvIGFuZCBub24tbnVsbCBmaWVsZHMgbmVlZCBiZSBzcGVjaWZpZWQuKQogICovCisKICNpZmRlZiBDT05GSUdfU0NIRURfU01UCiAvKiBNQ0QgLSBEbyB3ZSByZWFsbHkgbmVlZCB0aGlzPyAgSXQgaXMgYWx3YXlzIG9uIGlmIENPTkZJR19TQ0hFRF9TTVQgaXMsCiAgKiBzbyBjYW4ndCB3ZSBkcm9wIHRoaXMgaW4gZmF2b3Igb2YgQ09ORklHX1NDSEVEX1NNVD8KQEAgLTg3LDIwICs5MCwxMCBAQAogLyogQ29tbW9uIHZhbHVlcyBmb3IgU01UIHNpYmxpbmdzICovCiAjaWZuZGVmIFNEX1NJQkxJTkdfSU5JVAogI2RlZmluZSBTRF9TSUJMSU5HX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKLQkuc3BhbgkJCT0gQ1BVX01BU0tfTk9ORSwJXAotCS5wYXJlbnQJCQk9IE5VTEwsCQkJXAotCS5jaGlsZAkJCT0gTlVMTCwJCQlcCi0JLmdyb3VwcwkJCT0gTlVMTCwJCQlcCiAJLm1pbl9pbnRlcnZhbAkJPSAxLAkJCVwKIAkubWF4X2ludGVydmFsCQk9IDIsCQkJXAogCS5idXN5X2ZhY3RvcgkJPSA2NCwJCQlcCiAJLmltYmFsYW5jZV9wY3QJCT0gMTEwLAkJCVwKLQkuY2FjaGVfbmljZV90cmllcwk9IDAsCQkJXAotCS5idXN5X2lkeAkJPSAwLAkJCVwKLQkuaWRsZV9pZHgJCT0gMCwJCQlcCi0JLm5ld2lkbGVfaWR4CQk9IDAsCQkJXAotCS53YWtlX2lkeAkJPSAwLAkJCVwKLQkuZm9ya2V4ZWNfaWR4CQk9IDAsCQkJXAogCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKIAkJCQl8IFNEX0JBTEFOQ0VfTkVXSURMRQlcCiAJCQkJfCBTRF9CQUxBTkNFX0ZPUksJXApAQCAtMTEwLDcgKzEwMyw2IEBACiAJCQkJfCBTRF9TSEFSRV9DUFVQT1dFUiwJXAogCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKIAkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAotCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXAogfQogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEX1NNVCAqLwpAQCAtMTE5LDE4ICsxMTEsMTIgQEAKIC8qIENvbW1vbiB2YWx1ZXMgZm9yIE1DIHNpYmxpbmdzLiBmb3Igbm93IG1vc3RseSBkZXJpdmVkIGZyb20gU0RfQ1BVX0lOSVQgKi8KICNpZm5kZWYgU0RfTUNfSU5JVAogI2RlZmluZSBTRF9NQ19JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCi0JLnNwYW4JCQk9IENQVV9NQVNLX05PTkUsCVwKLQkucGFyZW50CQkJPSBOVUxMLAkJCVwKLQkuY2hpbGQJCQk9IE5VTEwsCQkJXAotCS5ncm91cHMJCQk9IE5VTEwsCQkJXAogCS5taW5faW50ZXJ2YWwJCT0gMSwJCQlcCiAJLm1heF9pbnRlcnZhbAkJPSA0LAkJCVwKIAkuYnVzeV9mYWN0b3IJCT0gNjQsCQkJXAogCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCiAJLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCVwKIAkuYnVzeV9pZHgJCT0gMiwJCQlcCi0JLmlkbGVfaWR4CQk9IDAsCQkJXAotCS5uZXdpZGxlX2lkeAkJPSAwLAkJCVwKIAkud2FrZV9pZHgJCT0gMSwJCQlcCiAJLmZvcmtleGVjX2lkeAkJPSAxLAkJCVwKIAkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCkBAIC0xMzgsMTIgKzEyNCwxMCBAQAogCQkJCXwgU0RfQkFMQU5DRV9GT1JLCVwKIAkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCiAJCQkJfCBTRF9XQUtFX0FGRklORQlcCi0JCQkJfCBTRF9XQUtFX0lETEUJCVwKIAkJCQl8IFNEX1NIQVJFX1BLR19SRVNPVVJDRVNcCiAJCQkJfCBCQUxBTkNFX0ZPUl9NQ19QT1dFUiwJXAogCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKIAkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAotCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXAogfQogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEX01DICovCkBAIC0xNTEsMTAgKzEzNSw2IEBACiAvKiBDb21tb24gdmFsdWVzIGZvciBDUFVzICovCiAjaWZuZGVmIFNEX0NQVV9JTklUCiAjZGVmaW5lIFNEX0NQVV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCi0JLnNwYW4JCQk9IENQVV9NQVNLX05PTkUsCVwKLQkucGFyZW50CQkJPSBOVUxMLAkJCVwKLQkuY2hpbGQJCQk9IE5VTEwsCQkJXAotCS5ncm91cHMJCQk9IE5VTEwsCQkJXAogCS5taW5faW50ZXJ2YWwJCT0gMSwJCQlcCiAJLm1heF9pbnRlcnZhbAkJPSA0LAkJCVwKIAkuYnVzeV9mYWN0b3IJCT0gNjQsCQkJXApAQCAtMTczLDE2ICsxNTMsMTEgQEAKIAkJCQl8IEJBTEFOQ0VfRk9SX1BLR19QT1dFUixcCiAJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAogCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCi0JLm5yX2JhbGFuY2VfZmFpbGVkCT0gMCwJCQlcCiB9CiAjZW5kaWYKIAogLyogc2NoZWRfZG9tYWlucyBTRF9BTExOT0RFU19JTklUIGZvciBOVU1BIG1hY2hpbmVzICovCiAjZGVmaW5lIFNEX0FMTE5PREVTX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJXAotCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCi0JLnBhcmVudAkJCT0gTlVMTCwJCQlcCi0JLmNoaWxkCQkJPSBOVUxMLAkJCVwKLQkuZ3JvdXBzCQkJPSBOVUxMLAkJCVwKIAkubWluX2ludGVydmFsCQk9IDY0LAkJCVwKIAkubWF4X2ludGVydmFsCQk9IDY0Km51bV9vbmxpbmVfY3B1cygpLAlcCiAJLmJ1c3lfZmFjdG9yCQk9IDEyOCwJCQlcCkBAIC0xOTAsMTQgKzE2NSwxMCBAQAogCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCiAJLmJ1c3lfaWR4CQk9IDMsCQkJXAogCS5pZGxlX2lkeAkJPSAzLAkJCVwKLQkubmV3aWRsZV9pZHgJCT0gMCwgLyogdW51c2VkICovCVwKLQkud2FrZV9pZHgJCT0gMCwgLyogdW51c2VkICovCVwKLQkuZm9ya2V4ZWNfaWR4CQk9IDAsIC8qIHVudXNlZCAqLwlcCiAJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAogCQkJCXwgU0RfU0VSSUFMSVpFLAlcCiAJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAogCS5iYWxhbmNlX2ludGVydmFsCT0gNjQsCQkJXAotCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXAogfQogCiAjaWZkZWYgQ09ORklHX05VTUEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhbnNwb3J0X2NsYXNzLmggYi9pbmNsdWRlL2xpbnV4L3RyYW5zcG9ydF9jbGFzcy5oCmluZGV4IDFkNmNjMjIuLmVhZWMxZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhbnNwb3J0X2NsYXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFuc3BvcnRfY2xhc3MuaApAQCAtMTcsMTEgKzE3LDExIEBACiBzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzIHsKIAlzdHJ1Y3QgY2xhc3MgY2xhc3M7CiAJaW50ICgqc2V0dXApKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKiwKLQkJICAgICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworCQkgICAgIHN0cnVjdCBkZXZpY2UgKik7CiAJaW50ICgqY29uZmlndXJlKShzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqLCBzdHJ1Y3QgZGV2aWNlICosCi0JCQkgc3RydWN0IGNsYXNzX2RldmljZSAqKTsKKwkJCSBzdHJ1Y3QgZGV2aWNlICopOwogCWludCAoKnJlbW92ZSkoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqLAotCQkgICAgICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworCQkgICAgICBzdHJ1Y3QgZGV2aWNlICopOwogfTsKIAogI2RlZmluZSBERUNMQVJFX1RSQU5TUE9SVF9DTEFTUyhjbHMsIG5tLCBzdSwgcm0sIGNmZykJCQlcCkBAIC04Niw5ICs4NiwxMCBAQAogCXJldHVybiBhdHRyaWJ1dGVfY29udGFpbmVyX3JlZ2lzdGVyKCZ0Yy0+YWMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB0cmFuc3BvcnRfY29udGFpbmVyX3VucmVnaXN0ZXIoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKnRjKQorc3RhdGljIGlubGluZSB2b2lkIHRyYW5zcG9ydF9jb250YWluZXJfdW5yZWdpc3RlcihzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqdGMpCiB7Ci0JcmV0dXJuIGF0dHJpYnV0ZV9jb250YWluZXJfdW5yZWdpc3RlcigmdGMtPmFjKTsKKwlpZiAodW5saWtlbHkoYXR0cmlidXRlX2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZ0Yy0+YWMpKSkKKwkJQlVHKCk7CiB9CiAKIGludCB0cmFuc3BvcnRfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHRyYW5zcG9ydF9jbGFzcyAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggODVjOTVjZC4uMjFmNjlhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTEyNSw2ICsxMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KIAogc3RydWN0IHR0eV9zdHJ1Y3Q7CitzdHJ1Y3QgdHR5X2RyaXZlcjsKIAogc3RydWN0IHR0eV9vcGVyYXRpb25zIHsKIAlpbnQgICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CkBAIC0xNTcsNiArMTU4LDExIEBACiAJaW50ICgqdGlvY21nZXQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKIAlpbnQgKCp0aW9jbXNldCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKKwlpbnQgKCpwb2xsX2luaXQpKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBsaW5lLCBjaGFyICpvcHRpb25zKTsKKwlpbnQgKCpwb2xsX2dldF9jaGFyKShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgbGluZSk7CisJdm9pZCAoKnBvbGxfcHV0X2NoYXIpKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBsaW5lLCBjaGFyIGNoKTsKKyNlbmRpZgogfTsKIAogc3RydWN0IHR0eV9kcml2ZXIgewpAQCAtMjIwLDYgKzIyNiwxMSBAQAogCWludCAoKnRpb2NtZ2V0KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAJaW50ICgqdGlvY21zZXQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCisJaW50ICgqcG9sbF9pbml0KShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgbGluZSwgY2hhciAqb3B0aW9ucyk7CisJaW50ICgqcG9sbF9nZXRfY2hhcikoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgaW50IGxpbmUpOworCXZvaWQgKCpwb2xsX3B1dF9jaGFyKShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgbGluZSwgY2hhciBjaCk7CisjZW5kaWYKIAogCXN0cnVjdCBsaXN0X2hlYWQgdHR5X2RyaXZlcnM7CiB9OwpAQCAtMjMwLDYgKzI0MSw3IEBACiB2b2lkIHB1dF90dHlfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpOwogdm9pZCB0dHlfc2V0X29wZXJhdGlvbnMoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwKIAkJCWNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyAqb3ApOworZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICp0dHlfZmluZF9wb2xsaW5nX2RyaXZlcihjaGFyICpuYW1lLCBpbnQgKmxpbmUpOwogCiAvKiB0dHkgZHJpdmVyIG1hZ2ljIG51bWJlciAqLwogI2RlZmluZSBUVFlfRFJJVkVSX01BR0lDCQkweDU0MDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKaW5kZXggOTc1Yzk2My4uZmVjNmRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKQEAgLTg0LDQgKzg0LDI2IEBACiAJCXJldDsJCQkJCVwKIAl9KQogCisvKgorICogcHJvYmVfa2VybmVsX3JlYWQoKTogc2FmZWx5IGF0dGVtcHQgdG8gcmVhZCBmcm9tIGEgbG9jYXRpb24KKyAqIEBkc3Q6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHNoYWxsIHRha2UgdGhlIGRhdGEKKyAqIEBzcmM6IGFkZHJlc3MgdG8gcmVhZCBmcm9tCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgZGF0YSBjaHVuaworICoKKyAqIFNhZmVseSByZWFkIGZyb20gYWRkcmVzcyBAc3JjIHRvIHRoZSBidWZmZXIgYXQgQGRzdC4gIElmIGEga2VybmVsIGZhdWx0CisgKiBoYXBwZW5zLCBoYW5kbGUgdGhhdCBhbmQgcmV0dXJuIC1FRkFVTFQuCisgKi8KK2V4dGVybiBsb25nIHByb2JlX2tlcm5lbF9yZWFkKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSk7CisKKy8qCisgKiBwcm9iZV9rZXJuZWxfd3JpdGUoKTogc2FmZWx5IGF0dGVtcHQgdG8gd3JpdGUgdG8gYSBsb2NhdGlvbgorICogQGRzdDogYWRkcmVzcyB0byB3cml0ZSB0bworICogQHNyYzogcG9pbnRlciB0byB0aGUgZGF0YSB0aGF0IHNoYWxsIGJlIHdyaXR0ZW4KKyAqIEBzaXplOiBzaXplIG9mIHRoZSBkYXRhIGNodW5rCisgKgorICogU2FmZWx5IHdyaXRlIHRvIGFkZHJlc3MgQGRzdCBmcm9tIHRoZSBidWZmZXIgYXQgQHNyYy4gIElmIGEga2VybmVsIGZhdWx0CisgKiBoYXBwZW5zLCBoYW5kbGUgdGhhdCBhbmQgcmV0dXJuIC1FRkFVTFQuCisgKi8KK2V4dGVybiBsb25nIHByb2JlX2tlcm5lbF93cml0ZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IHNpemUpOworCiAjZW5kaWYJCS8qIF9fTElOVVhfVUFDQ0VTU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRwLmggYi9pbmNsdWRlL2xpbnV4L3VkcC5oCmluZGV4IDhlYzcwM2YuLjU4MWNhMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWRwLmgKKysrIGIvaW5jbHVkZS9saW51eC91ZHAuaApAQCAtMjYsMTUgKzI2LDYgQEAKIAlfX3N1bTE2CWNoZWNrOwogfTsKIAotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdWRwaGRyICp1ZHBfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgdWRwaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKLX0KLSNlbmRpZgotCiAvKiBVRFAgc29ja2V0IG9wdGlvbnMgKi8KICNkZWZpbmUgVURQX0NPUksJMQkvKiBOZXZlciBzZW5kIHBhcnRpYWxseSBjb21wbGV0ZSBzZWdtZW50cyAqLwogI2RlZmluZSBVRFBfRU5DQVAJMTAwCS8qIFNldCB0aGUgc29ja2V0IHRvIGFjY2VwdCBlbmNhcHN1bGF0ZWQgcGFja2V0cyAqLwpAQCAtNDUsOSArMzYsMTQgQEAKICNkZWZpbmUgVURQX0VOQ0FQX0wyVFBJTlVEUAkzIC8qIHJmYzI2NjEgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1ZHBoZHIgKnVkcF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCB1ZHBoZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOworfQorCiAjZGVmaW5lIFVEUF9IVEFCTEVfU0laRQkJMTI4CiAKIHN0cnVjdCB1ZHBfc29jayB7CkBAIC04Miw2ICs3OCw3IEBACiB7CiAJcmV0dXJuIChzdHJ1Y3QgdWRwX3NvY2sgKilzazsKIH0KKwogI2RlZmluZSBJU19VRFBMSVRFKF9fc2spICh1ZHBfc2soX19zayktPnBjZmxhZykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCAyMzcyZTJlLi41ODNlMDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTk0LDEwICs5NCw5IEBACiAgKiBAYWx0c2V0dGluZzogYXJyYXkgb2YgaW50ZXJmYWNlIHN0cnVjdHVyZXMsIG9uZSBmb3IgZWFjaCBhbHRlcm5hdGUKICAqIAlzZXR0aW5nIHRoYXQgbWF5IGJlIHNlbGVjdGVkLiAgRWFjaCBvbmUgaW5jbHVkZXMgYSBzZXQgb2YKICAqIAllbmRwb2ludCBjb25maWd1cmF0aW9ucy4gIFRoZXkgd2lsbCBiZSBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyLgotICogQG51bV9hbHRzZXR0aW5nOiBudW1iZXIgb2YgYWx0c2V0dGluZ3MgZGVmaW5lZC4KICAqIEBjdXJfYWx0c2V0dGluZzogdGhlIGN1cnJlbnQgYWx0c2V0dGluZy4KKyAqIEBudW1fYWx0c2V0dGluZzogbnVtYmVyIG9mIGFsdHNldHRpbmdzIGRlZmluZWQuCiAgKiBAaW50Zl9hc3NvYzogaW50ZXJmYWNlIGFzc29jaWF0aW9uIGRlc2NyaXB0b3IKLSAqIEBkcml2ZXI6IHRoZSBVU0IgZHJpdmVyIHRoYXQgaXMgYm91bmQgdG8gdGhpcyBpbnRlcmZhY2UuCiAgKiBAbWlub3I6IHRoZSBtaW5vciBudW1iZXIgYXNzaWduZWQgdG8gdGhpcyBpbnRlcmZhY2UsIGlmIHRoaXMKICAqCWludGVyZmFjZSBpcyBib3VuZCB0byBhIGRyaXZlciB0aGF0IHVzZXMgdGhlIFVTQiBtYWpvciBudW1iZXIuCiAgKglJZiB0aGlzIGludGVyZmFjZSBkb2VzIG5vdCB1c2UgdGhlIFVTQiBtYWpvciwgdGhpcyBmaWVsZCBzaG91bGQKQEAgLTc4MSw4ICs3ODAsNyBAQAogCS5pZFZlbmRvciA9ICh2ZW5kKSwgXAogCS5pZFByb2R1Y3QgPSAocHJvZCkKIC8qKgotICogVVNCX0RFVklDRV9WRVIgLSBtYWNybyB1c2VkIHRvIGRlc2NyaWJlIGEgc3BlY2lmaWMgdXNiIGRldmljZSB3aXRoIGEKLSAqCQl2ZXJzaW9uIHJhbmdlCisgKiBVU0JfREVWSUNFX1ZFUiAtIGRlc2NyaWJlIGEgc3BlY2lmaWMgdXNiIGRldmljZSB3aXRoIGEgdmVyc2lvbiByYW5nZQogICogQHZlbmQ6IHRoZSAxNiBiaXQgVVNCIFZlbmRvciBJRAogICogQHByb2Q6IHRoZSAxNiBiaXQgVVNCIFByb2R1Y3QgSUQKICAqIEBsbzogdGhlIGJjZERldmljZV9sbyB2YWx1ZQpAQCAtNzk5LDggKzc5Nyw3IEBACiAJLmJjZERldmljZV9oaSA9IChoaSkKIAogLyoqCi0gKiBVU0JfREVWSUNFX0lOVEVSRkFDRV9QUk9UT0NPTCAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSB1c2IKLSAqCQlkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIGludGVyZmFjZSBwcm90b2NvbAorICogVVNCX0RFVklDRV9JTlRFUkZBQ0VfUFJPVE9DT0wgLSBkZXNjcmliZSBhIHVzYiBkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIGludGVyZmFjZSBwcm90b2NvbAogICogQHZlbmQ6IHRoZSAxNiBiaXQgVVNCIFZlbmRvciBJRAogICogQHByb2Q6IHRoZSAxNiBiaXQgVVNCIFByb2R1Y3QgSUQKICAqIEBwcjogYkludGVyZmFjZVByb3RvY29sIHZhbHVlCkBAIC04NDYsOCArODQzLDcgQEAKIAkuYkludGVyZmFjZVByb3RvY29sID0gKHByKQogCiAvKioKLSAqIFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPIC0gbWFjcm8gdXNlZCB0byBkZXNjcmliZSBhIHNwZWNpZmljIHVzYiBkZXZpY2UKLSAqIAkJd2l0aCBhIGNsYXNzIG9mIHVzYiBpbnRlcmZhY2VzCisgKiBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyAtIGRlc2NyaWJlIGEgc3BlY2lmaWMgdXNiIGRldmljZSB3aXRoIGEgY2xhc3Mgb2YgdXNiIGludGVyZmFjZXMKICAqIEB2ZW5kOiB0aGUgMTYgYml0IFVTQiBWZW5kb3IgSUQKICAqIEBwcm9kOiB0aGUgMTYgYml0IFVTQiBQcm9kdWN0IElECiAgKiBAY2w6IGJJbnRlcmZhY2VDbGFzcyB2YWx1ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkIGIvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCmluZGV4IGI4Y2JhMWQuLjQyZTg0ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKQEAgLTMsNSArMyw1IEBACiBoZWFkZXIteSArPSBjaDkuaAogaGVhZGVyLXkgKz0gZ2FkZ2V0ZnMuaAogaGVhZGVyLXkgKz0gbWlkaS5oCi11bmlmZGVmLXkgKz0gZ19wcmludGVyLmgKK2hlYWRlci15ICs9IGdfcHJpbnRlci5oCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2F0bWVsX3VzYmFfdWRjLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMTFmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBQbGF0Zm9ybSBkYXRhIGRlZmluaXRpb25zIGZvciBBdG1lbCBVU0JBIGdhZGdldCBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9VU0JfVVNCQV9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1VTQkFfSAorCitzdHJ1Y3QgdXNiYV9lcF9kYXRhIHsKKwljaGFyCSpuYW1lOworCWludAlpbmRleDsKKwlpbnQJZmlmb19zaXplOworCWludAlucl9iYW5rczsKKwlpbnQJY2FuX2RtYTsKKwlpbnQJY2FuX2lzb2M7Cit9OworCitzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJCQl2YnVzX3BpbjsKKwlpbnQJCQludW1fZXA7CisJc3RydWN0IHVzYmFfZXBfZGF0YQllcFswXTsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9VU0JBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKaW5kZXggYWEzMDQ3Zi4uZjMyOTUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKQEAgLTE1LDggKzE1LDYgQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfR0FER0VUX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfR0FER0VUX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogc3RydWN0IHVzYl9lcDsKIAogLyoqCkBAIC04NDgsNiArODQ2LDQgQEAKIAogZXh0ZXJuIHZvaWQgdXNiX2VwX2F1dG9jb25maWdfcmVzZXQoc3RydWN0IHVzYl9nYWRnZXQgKikgX19kZXZpbml0OwogCi0jZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KLQogI2VuZGlmCS8qIF9fTElOVVhfVVNCX0dBREdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaCBiL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCmluZGV4IDI2OTJlYzkuLjFmOTk5ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCkBAIC05LDMgKzksNiBAQAogCiAvKiBkZXZpY2UgY2FuJ3QgcmVzdW1lIGNvcnJlY3RseSBzbyByZXNldCBpdCBpbnN0ZWFkICovCiAjZGVmaW5lIFVTQl9RVUlSS19SRVNFVF9SRVNVTUUJCTB4MDAwMDAwMDIKKworLyogZGV2aWNlIGNhbid0IGhhbmRsZSBTZXQtSW50ZXJmYWNlIHJlcXVlc3RzICovCisjZGVmaW5lIFVTQl9RVUlSS19OT19TRVRfSU5URgkJMHgwMDAwMDAwNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaCBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKaW5kZXggY2VlMDYyMy4uMGE0MGRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCkBAIC01MCw3ICs1MCw5IEBACiAJVVNfRkxBRyhDQVBBQ0lUWV9IRVVSSVNUSUNTLAkweDAwMDAxMDAwKQkJXAogCQkvKiBzb21ldGltZXMgc2l6ZXMgaXMgdG9vIGJpZyAqLwkJXAogCVVTX0ZMQUcoTUFYX1NFQ1RPUlNfTUlOLDB4MDAwMDIwMDApCQkJXAotCQkvKiBTZXRzIG1heF9zZWN0b3JzIHRvIGFyY2ggbWluICovCisJCS8qIFNldHMgbWF4X3NlY3RvcnMgdG8gYXJjaCBtaW4gKi8JCVwKKwlVU19GTEFHKEJVTEtfSUdOT1JFX1RBRywweDAwMDA0MDAwKQkJCVwKKwkJLyogSWdub3JlIHRhZyBtaXNtYXRjaCBpbiBidWxrIG9wZXJhdGlvbnMgKi8KIAogCiAjZGVmaW5lIFVTX0ZMQUcobmFtZSwgdmFsdWUpCVVTX0ZMXyMjbmFtZSA9IHZhbHVlICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaAppbmRleCA1MmUzZDVmLi45Mzg1YTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaWZuZGVmIF9fTElOVVhfVklERU9ERVZfSAogI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWX0gKIAorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkgfHwgIWRlZmluZWQgKF9fS0VSTkVMX18pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCA0Mzk0NzRmLi4xN2E4MDE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgX191c2VyCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCmluZGV4IDI2MGQxZmMuLmU3ZDEwODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW8uaApAQCAtNDEsMTMgKzQxLDE3IEBACiAgKglSZXR1cm5zIE5VTEwgb3IgdGhlICJkYXRhIiB0b2tlbiBoYW5kZWQgdG8gYWRkX2J1Zi4KICAqIEBkaXNhYmxlX2NiOiBkaXNhYmxlIGNhbGxiYWNrcwogICoJdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCisgKglOb3RlIHRoYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgc3luY2hyb25vdXMsIGhlbmNlIHVucmVsaWFibGUgYW5kIG9ubHkKKyAqCXVzZWZ1bCBhcyBhbiBvcHRpbWl6YXRpb24uCiAgKiBAZW5hYmxlX2NiOiByZXN0YXJ0IGNhbGxiYWNrcyBhZnRlciBkaXNhYmxlX2NiLgogICoJdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCi0gKglUaGlzIHJldHVybnMgImZhbHNlIiAoYW5kIGRvZXNuJ3QgcmUtZW5hYmxlKSBpZiB0aGVyZSBhcmUgcGVuZGluZwotICoJYnVmZmVycyBpbiB0aGUgcXVldWUsIHRvIGF2b2lkIGEgcmFjZS4KKyAqCVRoaXMgcmUtZW5hYmxlcyBjYWxsYmFja3M7IGl0IHJldHVybnMgImZhbHNlIiBpZiB0aGVyZSBhcmUgcGVuZGluZworICoJYnVmZmVycyBpbiB0aGUgcXVldWUsIHRvIGRldGVjdCBhIHBvc3NpYmxlIHJhY2UgYmV0d2VlbiB0aGUgZHJpdmVyCisgKgljaGVja2luZyBmb3IgbW9yZSB3b3JrLCBhbmQgZW5hYmxpbmcgY2FsbGJhY2tzLgogICoKICAqIExvY2tpbmcgcnVsZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IKLSAqIGxvY2tpbmcuICBObyB0d28gb3BlcmF0aW9ucyBtYXkgYmUgaW52b2tlZCBzaW11bHRhbmVvdXNseS4KKyAqIGxvY2tpbmcuICBObyB0d28gb3BlcmF0aW9ucyBtYXkgYmUgaW52b2tlZCBzaW11bHRhbmVvdXNseSwgd2l0aCB0aGUgZXhjZXB0aW9uCisgKiBvZiBAZGlzYWJsZV9jYi4KICAqCiAgKiBBbGwgb3BlcmF0aW9ucyBjYW4gYmUgY2FsbGVkIGluIGFueSBjb250ZXh0LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaAppbmRleCA3NTM3MGVjLi45ZjFiNGI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTI0Niw4ICsyNDYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZGVjX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCWVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKIHsKLQlhdG9taWNfbG9uZ19kZWMoJnBhZ2Vfem9uZShwYWdlKS0+dm1fc3RhdFtpdGVtXSk7Ci0JYXRvbWljX2xvbmdfZGVjKCZ2bV9zdGF0W2l0ZW1dKTsKKwlfX2RlY196b25lX3N0YXRlKHBhZ2Vfem9uZShwYWdlKSwgaXRlbSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggMzE2MGRmZWQuLjI4NjRiMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKQEAgLTQ1NSw2ICs0NTUsNyBAQAogI2RlZmluZSBJV19NT0RFX1JFUEVBVAk0CS8qIFdpcmVsZXNzIFJlcGVhdGVyIChmb3J3YXJkZXIpICovCiAjZGVmaW5lIElXX01PREVfU0VDT05ECTUJLyogU2Vjb25kYXJ5IG1hc3Rlci9yZXBlYXRlciAoYmFja3VwKSAqLwogI2RlZmluZSBJV19NT0RFX01PTklUT1IJNgkvKiBQYXNzaXZlIG1vbml0b3IgKGxpc3RlbiBvbmx5KSAqLworI2RlZmluZSBJV19NT0RFX01FU0gJNwkvKiBNZXNoIChJRUVFIDgwMi4xMXMpIG5ldHdvcmsgKi8KIAogLyogU3RhdGlzdGljcyBmbGFncyAoYml0bWFzayBpbiB1cGRhdGVkKSAqLwogI2RlZmluZSBJV19RVUFMX1FVQUxfVVBEQVRFRAkweDAxCS8qIFZhbHVlIHdhcyB1cGRhdGVkIHNpbmNlIGxhc3QgcmVhZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94ZnJtLmggYi9pbmNsdWRlL2xpbnV4L3hmcm0uaAppbmRleCBlMzFiOGM4Li4wYzgyYzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hmcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3hmcm0uaApAQCAtMTEzLDcgKzExMyw4IEBACiB7CiAJWEZSTV9QT0xJQ1lfVFlQRV9NQUlOCT0gMCwKIAlYRlJNX1BPTElDWV9UWVBFX1NVQgk9IDEsCi0JWEZSTV9QT0xJQ1lfVFlQRV9NQVgJPSAyCisJWEZSTV9QT0xJQ1lfVFlQRV9NQVgJPSAyLAorCVhGUk1fUE9MSUNZX1RZUEVfQU5ZCT0gMjU1CiB9OwogCiBlbnVtCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAppbmRleCA4MzE1NDdkLi5hNDI3NDIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19iZWhvbGRbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGRbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZVtJUl9LRVlUQUJfU0laRV07CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKaW5kZXggNDc1ZDBkOC4uMzE2YTU4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaApAQCAtNjEsOCArNjEsNiBAQAogCQkJdjRsX2NsaWVudF9wcmludGsoS0VSTl9ERUJVRywgY2xpZW50LCBmbXQgLCAjIyBhcmcpOyBcCiAJfSB3aGlsZSAoMCkKIAotLyogUHJpbnRzIHRoZSBpb2N0bCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAqLwotZXh0ZXJuIHZvaWQgdjRsX3ByaW50a19pb2N0bCh1bnNpZ25lZCBpbnQgY21kKTsKIAogLyogVXNlIHRoaXMgbWFjcm8gZm9yIG5vbi1JMkMgZHJpdmVycy4gUGFzcyB0aGUgZHJpdmVyIG5hbWUgYXMgdGhlIGZpcnN0IGFyZy4gKi8KICNkZWZpbmUgdjRsX3ByaW50X2lvY3RsKG5hbWUsIGNtZCkgIAkJIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCBjNTQ0YzZmLi5mMjExNDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC00NCw2ICs0NCw4IEBACiBleHRlcm4gY2hhciAqdjRsMl9ub3JtX3RvX25hbWUodjRsMl9zdGRfaWQgaWQpOwogZXh0ZXJuIGludCB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzLAogCQkJCSAgICBpbnQgaWQsIGNoYXIgKm5hbWUpOworLyogUHJpbnRzIHRoZSBpb2N0bCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAqLworZXh0ZXJuIHZvaWQgdjRsX3ByaW50a19pb2N0bCh1bnNpZ25lZCBpbnQgY21kKTsKIAogLyogcHJvcml0eSBoYW5kbGluZyAqLwogc3RydWN0IHY0bDJfcHJpb19zdGF0ZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtY29yZS5oCmluZGV4IDk3ZjE0ZDQuLjk5MDMzOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtY29yZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtY29yZS5oCkBAIC0xNDksNyArMTQ5LDcgQEAKIH07CiAKIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSB7Ci0Jc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICB2Yl9sb2NrOwogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICppcnFsb2NrOwogCXZvaWQJCQkgICAqZGV2OyAvKiBvbiBwY2ksIHBvaW50cyB0byBzdHJ1Y3QgcGNpX2RldiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oCmluZGV4IDI2YTg5NTguLmVjNjNhYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oCkBAIC0xNyw3ICsxNyw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdHJ1Y3QgdmlkZWJ1Zl92bWFsbG9jX21lbW9yeQorc3RydWN0IHZpZGVvYnVmX3ZtYWxsb2NfbWVtb3J5CiB7CiAJdTMyICAgICAgICAgICAgICAgICBtYWdpYzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaCBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKaW5kZXggNDk2NTAzYy4uMGEyZjAzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAorKysgYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCkBAIC01NSw5ICs1NSwxMiBAQAogZXh0ZXJuIGludAkJCWFkZHJjb25mX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZAkJCWFkZHJjb25mX2NsZWFudXAodm9pZCk7CiAKLWV4dGVybiBpbnQJCQlhZGRyY29uZl9hZGRfaWZhZGRyKHZvaWQgX191c2VyICphcmcpOwotZXh0ZXJuIGludAkJCWFkZHJjb25mX2RlbF9pZmFkZHIodm9pZCBfX3VzZXIgKmFyZyk7Ci1leHRlcm4gaW50CQkJYWRkcmNvbmZfc2V0X2RzdGFkZHIodm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50CQkJYWRkcmNvbmZfYWRkX2lmYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgICAgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50CQkJYWRkcmNvbmZfZGVsX2lmYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgICAgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50CQkJYWRkcmNvbmZfc2V0X2RzdGFkZHIoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkJICAgICB2b2lkIF9fdXNlciAqYXJnKTsKIAogZXh0ZXJuIGludAkJCWlwdjZfY2hrX2FkZHIoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCkBAIC02OCwxNiArNzEsMTggQEAKIGV4dGVybiBpbnQJCQlpcHY2X2Noa19ob21lX2FkZHIoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJICAgc3RydWN0IGluNl9hZGRyICphZGRyKTsKICNlbmRpZgorCitleHRlcm4gaW50CQkJaXB2Nl9jaGtfcHJlZml4KHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCiBleHRlcm4gc3RydWN0IGluZXQ2X2lmYWRkciAgICAgICppcHY2X2dldF9pZmFkZHIoc3RydWN0IG5ldCAqbmV0LAotCQkJCQkJIHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSBpbnQgc3RyaWN0KTsKIAotZXh0ZXJuIGludAkJCWlwdjZfZ2V0X3NhZGRyKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgCi0JCQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpzYWRkcik7CiBleHRlcm4gaW50CQkJaXB2Nl9kZXZfZ2V0X3NhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAotCQkJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3JjcHJlZnMsCiAJCQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKIGV4dGVybiBpbnQJCQlpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkciwKQEAgLTEwMCwzMSArMTA1LDMxIEBACiAvKgogICoJbXVsdGljYXN0IHByb3RvdHlwZXMgKG1jYXN0LmMpCiAgKi8KLWV4dGVybiBpbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgCi0JCSAgc3RydWN0IGluNl9hZGRyICphZGRyKTsKLWV4dGVybiBpbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgCi0JCSAgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK2V4dGVybiBpbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK2V4dGVybiBpbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiB2b2lkIGlwdjZfc29ja19tY19jbG9zZShzdHJ1Y3Qgc29jayAqc2spOwotZXh0ZXJuIGludCBpbmV0Nl9tY19jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqbWNfYWRkciwKLQkJc3RydWN0IGluNl9hZGRyICpzcmNfYWRkcik7CitleHRlcm4gaW50IGluZXQ2X21jX2NoZWNrKHN0cnVjdCBzb2NrICpzaywKKwkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptY19hZGRyLAorCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyY19hZGRyKTsKIAotZXh0ZXJuIGludCBpcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKLWV4dGVybiBpbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKLWV4dGVybiBpbnQgaXB2Nl9kZXZfbWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IGlwdjZfZGV2X21jX2luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBfX2lwdjZfZGV2X21jX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBpcHY2X2Rldl9tY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiB2b2lkIGlwdjZfbWNfdXAoc3RydWN0IGluZXQ2X2RldiAqaWRldik7CiBleHRlcm4gdm9pZCBpcHY2X21jX2Rvd24oc3RydWN0IGluZXQ2X2RldiAqaWRldik7CiBleHRlcm4gdm9pZCBpcHY2X21jX2luaXRfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwogZXh0ZXJuIHZvaWQgaXB2Nl9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTsKIGV4dGVybiB2b2lkIGFkZHJjb25mX2RhZF9mYWlsdXJlKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCk7CiAKLWV4dGVybiBpbnQgaXB2Nl9jaGtfbWNhc3RfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwLAotCQlzdHJ1Y3QgaW42X2FkZHIgKnNyY19hZGRyKTsKK2V4dGVybiBpbnQgaXB2Nl9jaGtfbWNhc3RfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3JvdXAsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmNfYWRkcik7CiBleHRlcm4gaW50IGlwdjZfaXNfbWxkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyKTsKIAogZXh0ZXJuIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuKTsKIAotZXh0ZXJuIGludCBpcHY2X2dldF9ob3BsaW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQogLyoKICAqCWFueWNhc3QgcHJvdG90eXBlcyAoYW55Y2FzdC5jKQogICovCkBAIC0xMzUsNyArMTQwLDggQEAKIAogZXh0ZXJuIGludCBpcHY2X2Rldl9hY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiBpbnQgX19pcHY2X2Rldl9hY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKLWV4dGVybiBpbnQgaXB2Nl9jaGtfYWNhc3RfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBpcHY2X2Noa19hY2FzdF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogCiAKIC8qIERldmljZSBub3RpZmllciAqLwpAQCAtMTg1LDI2ICsxOTEsNiBAQAogI2RlZmluZSBpbjZfaWZhX2hvbGQoaWZwKQlhdG9taWNfaW5jKCYoaWZwKS0+cmVmY250KQogCiAKLWV4dGVybiB2b2lkCQkJYWRkcmNvbmZfZm9yd2FyZGluZ19vbih2b2lkKTsKLS8qCi0gKglIYXNoIGZ1bmN0aW9uIHRha2VuIGZyb20gbmV0X2FsaWFzLmMKLSAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyB1OCBpcHY2X2FkZHJfaGFzaChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCi17CQotCV9fdTMyIHdvcmQ7Ci0KLQkvKiAKLQkgKiBXZSBwZXJmb3JtIHRoZSBoYXNoIGZ1bmN0aW9uIG92ZXIgdGhlIGxhc3QgNjQgYml0cyBvZiB0aGUgYWRkcmVzcwotCSAqIFRoaXMgd2lsbCBpbmNsdWRlIHRoZSBJRUVFIGFkZHJlc3MgdG9rZW4gb24gbGlua3MgdGhhdCBzdXBwb3J0IGl0LgotCSAqLwotCi0Jd29yZCA9IChfX2ZvcmNlIHUzMikoYWRkci0+czZfYWRkcjMyWzJdIF4gYWRkci0+czZfYWRkcjMyWzNdKTsKLQl3b3JkIF49ICh3b3JkID4+IDE2KTsKLQl3b3JkIF49ICh3b3JkID4+IDgpOwotCi0JcmV0dXJuICgod29yZCBeICh3b3JkID4+IDQpKSAmIDB4MGYpOwotfQogCiAvKgogICoJY29tcHV0ZSBsaW5rLWxvY2FsIHNvbGljaXRlZC1ub2RlIG11bHRpY2FzdCBhZGRyZXNzCkBAIC0yMTQsNjEgKzIwMCwzMSBAQAogCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqc29saWNpdGVkKQogewogCWlwdjZfYWRkcl9zZXQoc29saWNpdGVkLAotCQkgICAgICBfX2NvbnN0YW50X2h0b25sKDB4RkYwMjAwMDApLCAwLAotCQkgICAgICBfX2NvbnN0YW50X2h0b25sKDB4MSksCi0JCSAgICAgIF9fY29uc3RhbnRfaHRvbmwoMHhGRjAwMDAwMCkgfCBhZGRyLT5zNl9hZGRyMzJbM10pOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2FkZHJfYWxsX25vZGVzKHN0cnVjdCBpbjZfYWRkciAqYWRkcikKLXsKLQlpcHY2X2FkZHJfc2V0KGFkZHIsCi0JCSAgICAgIF9fY29uc3RhbnRfaHRvbmwoMHhGRjAyMDAwMCksIDAsIDAsCi0JCSAgICAgIF9fY29uc3RhbnRfaHRvbmwoMHgxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2FkZHJfYWxsX3JvdXRlcnMoc3RydWN0IGluNl9hZGRyICphZGRyKQotewotCWlwdjZfYWRkcl9zZXQoYWRkciwKLQkJICAgICAgX19jb25zdGFudF9odG9ubCgweEZGMDIwMDAwKSwgMCwgMCwKLQkJICAgICAgX19jb25zdGFudF9odG9ubCgweDIpKTsKKwkJICAgICAgaHRvbmwoMHhGRjAyMDAwMCksIDAsCisJCSAgICAgIGh0b25sKDB4MSksCisJCSAgICAgIGh0b25sKDB4RkYwMDAwMDApIHwgYWRkci0+czZfYWRkcjMyWzNdKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX2lzX211bHRpY2FzdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7Ci0JcmV0dXJuIChhZGRyLT5zNl9hZGRyMzJbMF0gJiBfX2NvbnN0YW50X2h0b25sKDB4RkYwMDAwMDApKSA9PSBfX2NvbnN0YW50X2h0b25sKDB4RkYwMDAwMDApOworCXJldHVybiAoYWRkci0+czZfYWRkcjMyWzBdICYgaHRvbmwoMHhGRjAwMDAwMCkpID09IGh0b25sKDB4RkYwMDAwMDApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfaXNfbGxfYWxsX25vZGVzKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQlyZXR1cm4gKGFkZHItPnM2X2FkZHIzMlswXSA9PSBodG9ubCgweGZmMDIwMDAwKSAmJgotCQlhZGRyLT5zNl9hZGRyMzJbMV0gPT0gMCAmJgotCQlhZGRyLT5zNl9hZGRyMzJbMl0gPT0gMCAmJgotCQlhZGRyLT5zNl9hZGRyMzJbM10gPT0gaHRvbmwoMHgwMDAwMDAwMSkpOworCXJldHVybiAoKChhZGRyLT5zNl9hZGRyMzJbMF0gXiBodG9ubCgweGZmMDIwMDAwKSkgfAorCQlhZGRyLT5zNl9hZGRyMzJbMV0gfCBhZGRyLT5zNl9hZGRyMzJbMl0gfAorCQkoYWRkci0+czZfYWRkcjMyWzNdIF4gaHRvbmwoMHgwMDAwMDAwMSkpKSA9PSAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX2lzX2xsX2FsbF9yb3V0ZXJzKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQlyZXR1cm4gKGFkZHItPnM2X2FkZHIzMlswXSA9PSBodG9ubCgweGZmMDIwMDAwKSAmJgotCQlhZGRyLT5zNl9hZGRyMzJbMV0gPT0gMCAmJgotCQlhZGRyLT5zNl9hZGRyMzJbMl0gPT0gMCAmJgotCQlhZGRyLT5zNl9hZGRyMzJbM10gPT0gaHRvbmwoMHgwMDAwMDAwMikpOworCXJldHVybiAoKChhZGRyLT5zNl9hZGRyMzJbMF0gXiBodG9ubCgweGZmMDIwMDAwKSkgfAorCQlhZGRyLT5zNl9hZGRyMzJbMV0gfCBhZGRyLT5zNl9hZGRyMzJbMl0gfAorCQkoYWRkci0+czZfYWRkcjMyWzNdIF4gaHRvbmwoMHgwMDAwMDAwMikpKSA9PSAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXB2Nl9pc2F0YXBfZXVpNjQodTggKmV1aSwgX19iZTMyIGFkZHIpCi17Ci0JZXVpWzBdID0gKGlwdjRfaXNfemVyb25ldChhZGRyKSB8fCBpcHY0X2lzX3ByaXZhdGVfMTAoYWRkcikgfHwKLQkJICBpcHY0X2lzX2xvb3BiYWNrKGFkZHIpIHx8IGlwdjRfaXNfbGlua2xvY2FsXzE2OShhZGRyKSB8fAotCQkgIGlwdjRfaXNfcHJpdmF0ZV8xNzIoYWRkcikgfHwgaXB2NF9pc190ZXN0XzE5MihhZGRyKSB8fAotCQkgIGlwdjRfaXNfYW55Y2FzdF82dG80KGFkZHIpIHx8IGlwdjRfaXNfcHJpdmF0ZV8xOTIoYWRkcikgfHwKLQkJICBpcHY0X2lzX3Rlc3RfMTk4KGFkZHIpIHx8IGlwdjRfaXNfbXVsdGljYXN0KGFkZHIpIHx8Ci0JCSAgaXB2NF9pc19sYmNhc3QoYWRkcikpID8gMHgwMCA6IDB4MDI7Ci0JZXVpWzFdID0gMDsKLQlldWlbMl0gPSAweDVFOwotCWV1aVszXSA9IDB4RkU7Ci0JbWVtY3B5IChldWkrNCwgJmFkZHIsIDQpOwotCXJldHVybiAwOwotfQorZXh0ZXJuIGludCBfX2lwdjZfaXNhdGFwX2lmaWQodTggKmV1aSwgX19iZTMyIGFkZHIpOwogCiBzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfaXNfaXNhdGFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAppbmRleCA3NzFkMTc3Li43NTA2NDhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCkBAIC0xNzAsNyArMTcwLDcgQEAKIGludCBidF9lcnIoX191MTYgY29kZSk7CiAKIGV4dGVybiBpbnQgaGNpX3NvY2tfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgaGNpX3NvY2tfY2xlYW51cCh2b2lkKTsKK2V4dGVybiB2b2lkIGhjaV9zb2NrX2NsZWFudXAodm9pZCk7CiAKIGV4dGVybiBpbnQgYnRfc3lzZnNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGJ0X3N5c2ZzX2NsZWFudXAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCBiY2M0ODBiLi5lMDA3NTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTEyLDYgKzEyLDE2IEBACiAgKiBDb3B5cmlnaHQgMjAwNiwgMjAwNwlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICovCiAKKy8qKgorICogc3RydWN0IHZpZl9wYXJhbXMgLSBkZXNjcmliZXMgdmlydHVhbCBpbnRlcmZhY2UgcGFyYW1ldGVycworICogQG1lc2hfaWQ6IG1lc2ggSUQgdG8gdXNlCisgKiBAbWVzaF9pZF9sZW46IGxlbmd0aCBvZiB0aGUgbWVzaCBJRAorICovCitzdHJ1Y3QgdmlmX3BhcmFtcyB7CisgICAgICAgdTggKm1lc2hfaWQ7CisgICAgICAgaW50IG1lc2hfaWRfbGVuOworfTsKKwogLyogUmFkaW90YXAgaGVhZGVyIGl0ZXJhdGlvbgogICogICBpbXBsZW1lbnRlZCBpbiBuZXQvd2lyZWxlc3MvcmFkaW90YXAuYwogICogICBkb2NzIGluIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYWRpb3RhcC1oZWFkZXJzLnR4dApAQCAtMTA5LDYgKzExOSwxOSBAQAogfTsKIAogLyoqCisgKiBlbnVtIHBsaW5rX2FjdGlvbiAtIGFjdGlvbnMgdG8gcGVyZm9ybSBpbiBtZXNoIHBlZXJzCisgKgorICogQFBMSU5LX0FDVElPTl9JTlZBTElEOiBhY3Rpb24gMCBpcyByZXNlcnZlZAorICogQFBMSU5LX0FDVElPTl9PUEVOOiBzdGFydCBtZXNoIHBlZXIgbGluayBlc3RhYmxpc2htZW50CisgKiBAUExJTktfQUNUSU9OX0JMT0NMOiBibG9jayB0cmFmZmljIGZyb20gdGhpcyBtZXNoIHBlZXIKKyAqLworZW51bSBwbGlua19hY3Rpb25zIHsKKwlQTElOS19BQ1RJT05fSU5WQUxJRCwKKwlQTElOS19BQ1RJT05fT1BFTiwKKwlQTElOS19BQ1RJT05fQkxPQ0ssCit9OworCisvKioKICAqIHN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgLSBzdGF0aW9uIHBhcmFtZXRlcnMKICAqCiAgKiBVc2VkIHRvIGNoYW5nZSBhbmQgY3JlYXRlIGEgbmV3IHN0YXRpb24uCkBAIC0xMjgsNDEgKzE1MSwxMjQgQEAKIAlpbnQgbGlzdGVuX2ludGVydmFsOwogCXUxNiBhaWQ7CiAJdTggc3VwcG9ydGVkX3JhdGVzX2xlbjsKKwl1OCBwbGlua19hY3Rpb247CiB9OwogCiAvKioKLSAqIGVudW0gc3RhdGlvbl9zdGF0c19mbGFncyAtIHN0YXRpb24gc3RhdGlzdGljcyBmbGFncworICogZW51bSBzdGF0aW9uX2luZm9fZmxhZ3MgLSBzdGF0aW9uIGluZm9ybWF0aW9uIGZsYWdzCiAgKgotICogVXNlZCBieSB0aGUgZHJpdmVyIHRvIGluZGljYXRlIHdoaWNoIGluZm8gaW4gJnN0cnVjdCBzdGF0aW9uX3N0YXRzCi0gKiBpdCBoYXMgZmlsbGVkIGluIGR1cmluZyBnZXRfc3RhdGlvbigpLgorICogVXNlZCBieSB0aGUgZHJpdmVyIHRvIGluZGljYXRlIHdoaWNoIGluZm8gaW4gJnN0cnVjdCBzdGF0aW9uX2luZm8KKyAqIGl0IGhhcyBmaWxsZWQgaW4gZHVyaW5nIGdldF9zdGF0aW9uKCkgb3IgZHVtcF9zdGF0aW9uKCkuCiAgKgotICogQFNUQVRJT05fU1RBVF9JTkFDVElWRV9USU1FOiBAaW5hY3RpdmVfdGltZSBmaWxsZWQKLSAqIEBTVEFUSU9OX1NUQVRfUlhfQllURVM6IEByeF9ieXRlcyBmaWxsZWQKLSAqIEBTVEFUSU9OX1NUQVRfVFhfQllURVM6IEB0eF9ieXRlcyBmaWxsZWQKKyAqIEBTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRTogQGluYWN0aXZlX3RpbWUgZmlsbGVkCisgKiBAU1RBVElPTl9JTkZPX1JYX0JZVEVTOiBAcnhfYnl0ZXMgZmlsbGVkCisgKiBAU1RBVElPTl9JTkZPX1RYX0JZVEVTOiBAdHhfYnl0ZXMgZmlsbGVkCisgKiBAU1RBVElPTl9JTkZPX0xMSUQ6IEBsbGlkIGZpbGxlZAorICogQFNUQVRJT05fSU5GT19QTElEOiBAcGxpZCBmaWxsZWQKKyAqIEBTVEFUSU9OX0lORk9fUExJTktfU1RBVEU6IEBwbGlua19zdGF0ZSBmaWxsZWQKICAqLwotZW51bSBzdGF0aW9uX3N0YXRzX2ZsYWdzIHsKLQlTVEFUSU9OX1NUQVRfSU5BQ1RJVkVfVElNRQk9IDE8PDAsCi0JU1RBVElPTl9TVEFUX1JYX0JZVEVTCQk9IDE8PDEsCi0JU1RBVElPTl9TVEFUX1RYX0JZVEVTCQk9IDE8PDIsCitlbnVtIHN0YXRpb25faW5mb19mbGFncyB7CisJU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUJPSAxPDwwLAorCVNUQVRJT05fSU5GT19SWF9CWVRFUwkJPSAxPDwxLAorCVNUQVRJT05fSU5GT19UWF9CWVRFUwkJPSAxPDwyLAorCVNUQVRJT05fSU5GT19MTElECQk9IDE8PDMsCisJU1RBVElPTl9JTkZPX1BMSUQJCT0gMTw8NCwKKwlTVEFUSU9OX0lORk9fUExJTktfU1RBVEUJPSAxPDw1LAogfTsKIAogLyoqCi0gKiBzdHJ1Y3Qgc3RhdGlvbl9zdGF0cyAtIHN0YXRpb24gc3RhdGlzdGljcworICogc3RydWN0IHN0YXRpb25faW5mbyAtIHN0YXRpb24gaW5mb3JtYXRpb24KICAqCi0gKiBTdGF0aW9uIGluZm9ybWF0aW9uIGZpbGxlZCBieSBkcml2ZXIgZm9yIGdldF9zdGF0aW9uKCkuCisgKiBTdGF0aW9uIGluZm9ybWF0aW9uIGZpbGxlZCBieSBkcml2ZXIgZm9yIGdldF9zdGF0aW9uKCkgYW5kIGR1bXBfc3RhdGlvbi4KICAqCi0gKiBAZmlsbGVkOiBiaXRmbGFnIG9mIGZsYWdzIGZyb20gJmVudW0gc3RhdGlvbl9zdGF0c19mbGFncworICogQGZpbGxlZDogYml0ZmxhZyBvZiBmbGFncyBmcm9tICZlbnVtIHN0YXRpb25faW5mb19mbGFncwogICogQGluYWN0aXZlX3RpbWU6IHRpbWUgc2luY2UgbGFzdCBzdGF0aW9uIGFjdGl2aXR5ICh0eC9yeCkgaW4gbWlsbGlzZWNvbmRzCiAgKiBAcnhfYnl0ZXM6IGJ5dGVzIHJlY2VpdmVkIGZyb20gdGhpcyBzdGF0aW9uCiAgKiBAdHhfYnl0ZXM6IGJ5dGVzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgorICogQGxsaWQ6IG1lc2ggbG9jYWwgbGluayBpZAorICogQHBsaWQ6IG1lc2ggcGVlciBsaW5rIGlkCisgKiBAcGxpbmtfc3RhdGU6IG1lc2ggcGVlciBsaW5rIHN0YXRlCiAgKi8KLXN0cnVjdCBzdGF0aW9uX3N0YXRzIHsKK3N0cnVjdCBzdGF0aW9uX2luZm8gewogCXUzMiBmaWxsZWQ7CiAJdTMyIGluYWN0aXZlX3RpbWU7CiAJdTMyIHJ4X2J5dGVzOwogCXUzMiB0eF9ieXRlczsKKwl1MTYgbGxpZDsKKwl1MTYgcGxpZDsKKwl1OCBwbGlua19zdGF0ZTsKIH07CiAKKy8qKgorICogZW51bSBtb25pdG9yX2ZsYWdzIC0gbW9uaXRvciBmbGFncworICoKKyAqIE1vbml0b3IgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZmxhZ3MuIE5vdGUgdGhhdCB0aGVzZSBtdXN0IGJlIHRoZSBiaXRzCisgKiBhY2NvcmRpbmcgdG8gdGhlIG5sODAyMTEgZmxhZ3MuCisgKgorICogQE1PTklUT1JfRkxBR19GQ1NGQUlMOiBwYXNzIGZyYW1lcyB3aXRoIGJhZCBGQ1MKKyAqIEBNT05JVE9SX0ZMQUdfUExDUEZBSUw6IHBhc3MgZnJhbWVzIHdpdGggYmFkIFBMQ1AKKyAqIEBNT05JVE9SX0ZMQUdfQ09OVFJPTDogcGFzcyBjb250cm9sIGZyYW1lcworICogQE1PTklUT1JfRkxBR19PVEhFUl9CU1M6IGRpc2FibGUgQlNTSUQgZmlsdGVyaW5nCisgKiBATU9OSVRPUl9GTEFHX0NPT0tfRlJBTUVTOiByZXBvcnQgZnJhbWVzIGFmdGVyIHByb2Nlc3NpbmcKKyAqLworZW51bSBtb25pdG9yX2ZsYWdzIHsKKwlNT05JVE9SX0ZMQUdfRkNTRkFJTAkJPSAxPDxOTDgwMjExX01OVFJfRkxBR19GQ1NGQUlMLAorCU1PTklUT1JfRkxBR19QTENQRkFJTAkJPSAxPDxOTDgwMjExX01OVFJfRkxBR19QTENQRkFJTCwKKwlNT05JVE9SX0ZMQUdfQ09OVFJPTAkJPSAxPDxOTDgwMjExX01OVFJfRkxBR19DT05UUk9MLAorCU1PTklUT1JfRkxBR19PVEhFUl9CU1MJCT0gMTw8Tkw4MDIxMV9NTlRSX0ZMQUdfT1RIRVJfQlNTLAorCU1PTklUT1JfRkxBR19DT09LX0ZSQU1FUwk9IDE8PE5MODAyMTFfTU5UUl9GTEFHX0NPT0tfRlJBTUVTLAorfTsKKworLyoqCisgKiBlbnVtIG1wYXRoX2luZm9fZmxhZ3MgLSAgbWVzaCBwYXRoIGluZm9ybWF0aW9uIGZsYWdzCisgKgorICogVXNlZCBieSB0aGUgZHJpdmVyIHRvIGluZGljYXRlIHdoaWNoIGluZm8gaW4gJnN0cnVjdCBtcGF0aF9pbmZvIGl0IGhhcyBmaWxsZWQKKyAqIGluIGR1cmluZyBnZXRfc3RhdGlvbigpIG9yIGR1bXBfc3RhdGlvbigpLgorICoKKyAqIE1QQVRIX0lORk9fRlJBTUVfUUxFTjogQGZyYW1lX3FsZW4gZmlsbGVkCisgKiBNUEFUSF9JTkZPX0RTTjogQGRzbiBmaWxsZWQKKyAqIE1QQVRIX0lORk9fTUVUUklDOiBAbWV0cmljIGZpbGxlZAorICogTVBBVEhfSU5GT19FWFBUSU1FOiBAZXhwdGltZSBmaWxsZWQKKyAqIE1QQVRIX0lORk9fRElTQ09WRVJZX1RJTUVPVVQ6IEBkaXNjb3ZlcnlfdGltZW91dCBmaWxsZWQKKyAqIE1QQVRIX0lORk9fRElTQ09WRVJZX1JFVFJJRVM6IEBkaXNjb3ZlcnlfcmV0cmllcyBmaWxsZWQKKyAqIE1QQVRIX0lORk9fRkxBR1M6IEBmbGFncyBmaWxsZWQKKyAqLworZW51bSBtcGF0aF9pbmZvX2ZsYWdzIHsKKwlNUEFUSF9JTkZPX0ZSQU1FX1FMRU4JCT0gQklUKDApLAorCU1QQVRIX0lORk9fRFNOCQkJPSBCSVQoMSksCisJTVBBVEhfSU5GT19NRVRSSUMJCT0gQklUKDIpLAorCU1QQVRIX0lORk9fRVhQVElNRQkJPSBCSVQoMyksCisJTVBBVEhfSU5GT19ESVNDT1ZFUllfVElNRU9VVAk9IEJJVCg0KSwKKwlNUEFUSF9JTkZPX0RJU0NPVkVSWV9SRVRSSUVTCT0gQklUKDUpLAorCU1QQVRIX0lORk9fRkxBR1MJCT0gQklUKDYpLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbXBhdGhfaW5mbyAtIG1lc2ggcGF0aCBpbmZvcm1hdGlvbgorICoKKyAqIE1lc2ggcGF0aCBpbmZvcm1hdGlvbiBmaWxsZWQgYnkgZHJpdmVyIGZvciBnZXRfbXBhdGgoKSBhbmQgZHVtcF9tcGF0aCgpLgorICoKKyAqIEBmaWxsZWQ6IGJpdGZpZWxkIG9mIGZsYWdzIGZyb20gJmVudW0gbXBhdGhfaW5mb19mbGFncworICogQGZyYW1lX3FsZW46IG51bWJlciBvZiBxdWV1ZWQgZnJhbWVzIGZvciB0aGlzIGRlc3RpbmF0aW9uCisgKiBAZHNuOiBkZXN0aW5hdGlvbiBzZXF1ZW5jZSBudW1iZXIKKyAqIEBtZXRyaWM6IG1ldHJpYyAoY29zdCkgb2YgdGhpcyBtZXNoIHBhdGgKKyAqIEBleHB0aW1lOiBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSBtZXNoIHBhdGggZnJvbSBub3csIGluIG1zZWNzCisgKiBAZmxhZ3M6IG1lc2ggcGF0aCBmbGFncworICogQGRpc2NvdmVyeV90aW1lb3V0OiB0b3RhbCBtZXNoIHBhdGggZGlzY292ZXJ5IHRpbWVvdXQsIGluIG1zZWNzCisgKiBAZGlzY292ZXJ5X3JldHJpZXM6IG1lc2ggcGF0aCBkaXNjb3ZlcnkgcmV0cmllcworICovCitzdHJ1Y3QgbXBhdGhfaW5mbyB7CisJdTMyIGZpbGxlZDsKKwl1MzIgZnJhbWVfcWxlbjsKKwl1MzIgZHNuOworCXUzMiBtZXRyaWM7CisJdTMyIGV4cHRpbWU7CisJdTMyIGRpc2NvdmVyeV90aW1lb3V0OworCXU4IGRpc2NvdmVyeV9yZXRyaWVzOworCXU4IGZsYWdzOworfTsKKworCiAvKiBmcm9tIG5ldC93aXJlbGVzcy5oICovCiBzdHJ1Y3Qgd2lwaHk7CiAKQEAgLTIxMCwxMyArMzE2LDE3IEBACiAgKiBAZGVsX3N0YXRpb246IFJlbW92ZSBhIHN0YXRpb247IEBtYWMgbWF5IGJlIE5VTEwgdG8gcmVtb3ZlIGFsbCBzdGF0aW9ucy4KICAqCiAgKiBAY2hhbmdlX3N0YXRpb246IE1vZGlmeSBhIGdpdmVuIHN0YXRpb24uCisgKgorICogQHNldF9tZXNoX2NmZzogc2V0IG1lc2ggcGFyYW1ldGVycyAoYnkgbm93LCBqdXN0IG1lc2ggaWQpCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9vcHMgewogCWludAkoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGNoYXIgKm5hbWUsCi0JCQkJICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSk7CisJCQkJICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKKwkJCQkgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CiAJaW50CSgqZGVsX3ZpcnR1YWxfaW50Zikoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50IGlmaW5kZXgpOwogCWludAkoKmNoYW5nZV92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4LAotCQkJCSAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpOworCQkJCSAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCisJCQkJICAgICAgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwogCiAJaW50CSgqYWRkX2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgIHU4IGtleV9pbmRleCwgdTggKm1hY19hZGRyLApAQCAtMjQ0LDcgKzM1NCwyMiBAQAogCWludAkoKmNoYW5nZV9zdGF0aW9uKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgdTggKm1hYywgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKTsKIAlpbnQJKCpnZXRfc3RhdGlvbikoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICB1OCAqbWFjLCBzdHJ1Y3Qgc3RhdGlvbl9zdGF0cyAqc3RhdHMpOworCQkJICAgICAgIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKTsKKwlpbnQJKCpkdW1wX3N0YXRpb24pKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgaW50IGlkeCwgdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pOworCisJaW50CSgqYWRkX21wYXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCk7CisJaW50CSgqZGVsX21wYXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHU4ICpkc3QpOworCWludAkoKmNoYW5nZV9tcGF0aCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCk7CisJaW50CSgqZ2V0X21wYXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCwKKwkJCSAgICAgICBzdHJ1Y3QgbXBhdGhfaW5mbyAqcGluZm8pOworCWludAkoKmR1bXBfbXBhdGgpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgaW50IGlkeCwgdTggKmRzdCwgdTggKm5leHRfaG9wLAorCQkJICAgICAgIHN0cnVjdCBtcGF0aF9pbmZvICpwaW5mbyk7CiB9OwogCiAjZW5kaWYgLyogX19ORVRfQ0ZHODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCBlM2FjN2QwLi4wMDI1MDBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3QuaAorKysgYi9pbmNsdWRlL25ldC9kc3QuaApAQCAtNTIsMTUgKzUyLDEwIEBACiAJdW5zaWduZWQgc2hvcnQJCWhlYWRlcl9sZW47CS8qIG1vcmUgc3BhY2UgYXQgaGVhZCByZXF1aXJlZCAqLwogCXVuc2lnbmVkIHNob3J0CQl0cmFpbGVyX2xlbjsJLyogc3BhY2UgdG8gcmVzZXJ2ZSBhdCB0YWlsICovCiAKLQl1MzIJCQltZXRyaWNzW1JUQVhfTUFYXTsKLQlzdHJ1Y3QgZHN0X2VudHJ5CSpwYXRoOwotCi0JdW5zaWduZWQgbG9uZwkJcmF0ZV9sYXN0OwkvKiByYXRlIGxpbWl0aW5nIGZvciBJQ01QICovCiAJdW5zaWduZWQgaW50CQlyYXRlX3Rva2VuczsKKwl1bnNpZ25lZCBsb25nCQlyYXRlX2xhc3Q7CS8qIHJhdGUgbGltaXRpbmcgZm9yIElDTVAgKi8KIAotI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCi0JX191MzIJCQl0Y2xhc3NpZDsKLSNlbmRpZgorCXN0cnVjdCBkc3RfZW50cnkJKnBhdGg7CiAKIAlzdHJ1Y3QgbmVpZ2hib3VyCSpuZWlnaGJvdXI7CiAJc3RydWN0IGhoX2NhY2hlCQkqaGg7CkBAIC03MCwxMCArNjUsMjAgQEAKIAlpbnQJCQkoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKTsKIAogCXN0cnVjdCAgZHN0X29wcwkgICAgICAgICpvcHM7Ci0JCQotCXVuc2lnbmVkIGxvbmcJCWxhc3R1c2U7CisKKwl1MzIJCQltZXRyaWNzW1JUQVhfTUFYXTsKKworI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCisJX191MzIJCQl0Y2xhc3NpZDsKKyNlbmRpZgorCisJLyoKKwkgKiBfX3JlZmNudCB3YW50cyB0byBiZSBvbiBhIGRpZmZlcmVudCBjYWNoZSBsaW5lIGZyb20KKwkgKiBpbnB1dC9vdXRwdXQvb3BzIG9yIHBlcmZvcm1hbmNlIHRhbmtzIGJhZGx5CisJICovCiAJYXRvbWljX3QJCV9fcmVmY250OwkvKiBjbGllbnQgcmVmZXJlbmNlcwkqLwogCWludAkJCV9fdXNlOworCXVuc2lnbmVkIGxvbmcJCWxhc3R1c2U7CiAJdW5pb24gewogCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXh0OwogCQlzdHJ1Y3QgcnRhYmxlICAgICpydF9uZXh0OwpAQCAtMTU4LDE1ICsxNjMsNyBAQAogCXJldHVybiBkc3Q7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgZHN0X3JlbGVhc2Uoc3RydWN0IGRzdF9lbnRyeSAqIGRzdCkKLXsKLQlpZiAoZHN0KSB7Ci0JCVdBUk5fT04oYXRvbWljX3JlYWQoJmRzdC0+X19yZWZjbnQpIDwgMSk7Ci0JCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKLQkJYXRvbWljX2RlYygmZHN0LT5fX3JlZmNudCk7Ci0JfQotfQorZXh0ZXJuIHZvaWQgZHN0X3JlbGVhc2Uoc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIAogLyogQ2hpbGRyZW4gZGVmaW5lIHRoZSBwYXRoIG9mIHRoZSBwYWNrZXQgdGhyb3VnaCB0aGUKICAqIExpbnV4IG5ldHdvcmtpbmcuICBUaHVzLCBkZXN0aW5hdGlvbnMgYXJlIHN0YWNrYWJsZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ZpYl9ydWxlcy5oIGIvaW5jbHVkZS9uZXQvZmliX3J1bGVzLmgKaW5kZXggMzQzNDlmOS4uYTVjNmNjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZmliX3J1bGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvZmliX3J1bGVzLmgKQEAgLTg3LDYgKzg3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWJfcnVsZV9wdXRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGZpYl9ydWxlLCByY3UpOworCXJlbGVhc2VfbmV0KHJ1bGUtPmZyX25ldCk7CiAJa2ZyZWUocnVsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ljbXAuaCBiL2luY2x1ZGUvbmV0L2ljbXAuaAppbmRleCA5ZjdlZjNjLi5kZGRiODM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pY21wLmgKKysrIGIvaW5jbHVkZS9uZXQvaWNtcC5oCkBAIC00OCw3ICs0OCw3IEBACiBleHRlcm4gdm9pZAlpY21wX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8pOwogZXh0ZXJuIGludAlpY21wX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJaWNtcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiB2b2lkCWljbXBfaW5pdChzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKTsKK2V4dGVybiBpbnQJaWNtcF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQJaWNtcF9vdXRfY291bnQodW5zaWduZWQgY2hhciB0eXBlKTsKIAogLyogTW92ZSBpbnRvIGRzdC5oID8gKi8KQEAgLTY1LDExICs2NSw0IEBACiAJcmV0dXJuIChzdHJ1Y3QgcmF3X3NvY2sgKilzazsKIH0KIAotZXh0ZXJuIGludCBzeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9hbGw7Ci1leHRlcm4gaW50IHN5c2N0bF9pY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHM7Ci1leHRlcm4gaW50IHN5c2N0bF9pY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXM7Ci1leHRlcm4gaW50IHN5c2N0bF9pY21wX2Vycm9yc191c2VfaW5ib3VuZF9pZmFkZHI7Ci1leHRlcm4gaW50IHN5c2N0bF9pY21wX3JhdGVsaW1pdDsKLWV4dGVybiBpbnQgc3lzY3RsX2ljbXBfcmF0ZW1hc2s7Ci0KICNlbmRpZgkvKiBfSUNNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCmluZGV4IDI4NWIyYWRmLi41Mjk4MTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaApAQCAtMTgzLDcgKzE4Myw2IEBACiAjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19SWChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SWCwgZiwgIyMgYSkKICNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1FPUyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9RT1MsIGYsICMjIGEpCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEX0VUSEVSICovCiAKICNpZm5kZWYgV0lSRUxFU1NfU1BZCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZjYyODIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLS8qCi0gKiBpZWVlODAyMTFzb2Z0bWFjLmggLSBwdWJsaWMgaW50ZXJmYWNlIHRvIHRoZSBzb2Z0bWFjCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICovCi0KLSNpZm5kZWYgSUVFRTgwMjExU09GVE1BQ19IXwotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+Ci0KLS8qIE9uY2UgdGhlIEFQSSBpcyBjb25zaWRlcmVkIG1vcmUgb3IgbGVzcyBzdGFibGUsCi0gKiB0aGlzIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBvbiBBUEkgaW5jb21wYXRpYmxlIGNoYW5nZXMuCi0gKi8KLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19BUEkJMAotCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfTUFYX1JBVEVTX0xFTgkJOAotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX01BWF9FWF9SQVRFU19MRU4JMjU1Ci0KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyB7Ci0JdTggY291bnQ7Ci0JdTggcmF0ZXNbSUVFRTgwMjExU09GVE1BQ19NQVhfUkFURVNfTEVOICsgSUVFRTgwMjExU09GVE1BQ19NQVhfRVhfUkFURVNfTEVOXTsKLX07Ci0KLS8qIGludGVybmFsIHN0cnVjdHVyZXMgKi8KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcms7Ci1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19zY2FuaW5mbzsKLQotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgewotCXU4IGxlbjsKLQljaGFyIGRhdGFbSVdfRVNTSURfTUFYX1NJWkUrMV07Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY193cGEgewotCWNoYXIgKklFOwotCWludCBJRWxlbjsKLQlpbnQgSUVidWZsZW47Ci19OwotCi0vKgotICogSW5mb3JtYXRpb24gYWJvdXQgYXNzb2NpYXRpb24KLSAqLwotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXNzb2NfaW5mbyB7Ci0KLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0KLQkvKgotCSAqIFRoaXMgaXMgdGhlIHJlcXVlc3RlZCBFU1NJRC4gSXQgaXMgd3JpdHRlbgotCSAqIG9ubHkgYnkgdGhlIFdYIGhhbmRsZXJzLgotCSAqCi0JICovCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgcmVxX2Vzc2lkOwotCS8qCi0JICogdGhlIEVTU0lEIG9mIHRoZSBuZXR3b3JrIHdlJ3JlIGN1cnJlbnRseQotCSAqIGFzc29jaWF0ZWQgKG9yIHRyeWluZykgdG8uIFRoaXMgaXMKLQkgKiB1cGRhdGVkIHRvIHRoZSBuZXR3b3JrJ3MgYWN0dWFsIEVTU0lECi0JICogZXZlbiBpZiB0aGUgcmVxdWVzdGVkIEVTU0lEIHdhcyAnQU5ZJwotCSAqLwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Vzc2lkIGFzc29jaWF0ZV9lc3NpZDsKLQkKLQkvKiBCU1NJRCB3ZSdyZSB0cnlpbmcgdG8gYXNzb2NpYXRlIHRvICovCi0JY2hhciBic3NpZFtFVEhfQUxFTl07Ci0JCi0JLyogc29tZSBmbGFncy4KLQkgKiBzdGF0aWNfZXNzaWQgaXMgdmFsaWQgaWYgdGhlIGVzc2lkIGlzIGNvbnN0YW50LAotCSAqIHRoaXMgaXMgZm9yIHVzZSBieSB0aGUgd3ggaGFuZGxlcnMgb25seS4KLQkgKgotCSAqIGFzc29jaWF0aW5nIGlzIHRydWUsIGlmIHRoZSBuZXR3b3JrIGhhcyBiZWVuCi0JICogYXV0aCdlZCBvbiBhbmQgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGFzc29jaWF0aW5nLgotCSAqCi0JICogYnNzdmFsaWQgaXMgdHJ1ZSBpZiB3ZSBmb3VuZCBhIG1hdGNoaW5nIG5ldHdvcmsKLQkgKiBhbmQgc2F2ZWQgaXQncyBCU1NJRCBpbnRvIHRoZSBic3NpZCBhYm92ZS4KLQkgKgotCSAqIGJzc2ZpeGVkIGlzIHVzZWQgZm9yIFNJT0NTSVdBUC4KLQkgKi8KLQl1OCBzdGF0aWNfZXNzaWQ7Ci0JdTggc2hvcnRfcHJlYW1ibGVfYXZhaWxhYmxlOwotCXU4IGFzc29jaWF0aW5nOwotCXU4IGFzc29jaWF0ZWQ7Ci0JdTggYXNzb2Nfd2FpdDsKLQl1OCBic3N2YWxpZDsKLQl1OCBic3NmaXhlZDsKLQotCS8qIFNjYW4gcmV0cmllcyByZW1haW5pbmcgKi8KLQlpbnQgc2Nhbl9yZXRyeTsKLQotCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHRpbWVvdXQ7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ic3NfaW5mbyB7Ci0JLyogUmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBuZXR3b3JrICovCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvIHN1cHBvcnRlZF9yYXRlczsKLQotCS8qIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgZnJhbWVzIGNhbiBjdXJyZW50bHkgYmUgdHJhbnNtaXR0ZWQgd2l0aAotCSAqIHNob3J0IHByZWFtYmxlIChvbmx5IHVzZSB0aGlzIHZhcmlhYmxlIGR1cmluZyBUWCBhdCBDQ0sgcmF0ZXMpICovCi0JdTggc2hvcnRfcHJlYW1ibGU6MTsKLQotCS8qIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgcHJvdGVjdGlvbiAoZS5nLiBzZWxmLUNUUykgc2hvdWxkIGJlIHVzZWQKLQkgKiB3aGVuIHRyYW5zbWl0dGluZyB3aXRoIE9GRE0gbW9kdWxhdGlvbiAqLwotCXU4IHVzZV9wcm90ZWN0aW9uOjE7Ci19OwotCi1lbnVtIHsKLQlJRUVFODAyMTFTT0ZUTUFDX0FVVEhfT1BFTl9SRVFVRVNUCT0gMSwKLQlJRUVFODAyMTFTT0ZUTUFDX0FVVEhfT1BFTl9SRVNQT05TRQk9IDIsCi19OwotCi1lbnVtIHsKLQlJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX1JFUVVFU1QJPSAxLAotCUlFRUU4MDIxMVNPRlRNQUNfQVVUSF9TSEFSRURfQ0hBTExFTkdFID0gMiwKLQlJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX1JFU1BPTlNFCT0gMywKLQlJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX1BBU1MJPSA0LAotfTsKLQotLyogV2Ugc2hvdWxkIG1ha2UgdGhlc2UgdHVuYWJsZQotICogQVVUSF9USU1FT1VUIHNlZW1zIHJlYWxseSBsb25nLCBidXQgdGhhdCdzIHdoYXQgaXQgaXMgaW4gQlNEICovCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfQVVUSF9USU1FT1VUCQkoMTIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19BVVRIX1JFVFJZX0xJTUlUCTUKLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUCTMKLQotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyB7Ci0JLyogVGhlIEJpdC1SYXRlIHRvIGJlIHVzZWQgZm9yIG11bHRpY2FzdCBmcmFtZXMuICovCi0JdTggbWNhc3RfcmF0ZTsKLQotCS8qIFRoZSBCaXQtUmF0ZSB0byBiZSB1c2VkIGZvciBtdWx0aWNhc3QgbWFuYWdlbWVudCBmcmFtZXMuICovCi0JdTggbWd0X21jYXN0X3JhdGU7Ci0KLQkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgYW55IG90aGVyIChub3JtYWwpIGRhdGEgcGFja2V0LiAqLwotCXU4IGRlZmF1bHRfcmF0ZTsKLQkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgZGVmYXVsdCBmYWxsYmFjawotCSAqIChJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGZhbGxiYWNrIGFuZCBoYXJkd2FyZS1yZXRyeSkKLQkgKi8KLQl1OCBkZWZhdWx0X2ZhbGxiYWNrOwotCi0JLyogVGhpcyBpcyB0aGUgcmF0ZSB0aGF0IHRoZSB1c2VyIGFza2VkIGZvciAqLwotCXU4IHVzZXJfcmF0ZTsKLX07Ci0KLS8qIEJpdHMgZm9yIHR4cmF0ZXNfY2hhbmdlIGNhbGxiYWNrLiAqLwotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUCQkoMSA8PCAwKSAvKiBkZWZhdWx0X3JhdGUgKi8KLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSwkoMSA8PCAxKSAvKiBkZWZhdWx0X2ZhbGxiYWNrICovCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01DQVNUCQkoMSA8PCAyKSAvKiBtY2FzdF9yYXRlICovCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01HVF9NQ0FTVAkJKDEgPDwgMykgLyogbWd0X21jYXN0X3JhdGUgKi8KLQotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfUkFURVMJCSgxIDw8IDApIC8qIHN1cHBvcnRlZF9yYXRlcyAqLwotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfU0hPUlRfUFJFQU1CTEUJKDEgPDwgMSkgLyogc2hvcnRfcHJlYW1ibGUgKi8KLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19CU1NJTkZPQ0hHX1BST1RFQ1RJT04JCSgxIDw8IDIpIC8qIHVzZV9wcm90ZWN0aW9uICovCi0KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSB7Ci0JLyogODAyLjExIHN0cnVjdHVyZSBmb3IgZGF0YSBzdHVmZiAqLwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0KLQkvKiBvbmx5IHZhbGlkIGlmIGFzc29jaWF0ZWQsIHRoZW4gaG9sZHMgdGhlIEFzc29jaWF0aW9uIElEICovCi0JdTE2IGFzc29jaWF0aW9uX2lkOwotCQotCS8qIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgY2FsbGJhY2tzIHRoYXQgdGhlIGRyaXZlcgotCSAqIHVzaW5nIHRoaXMgZnJhbWV3b3JrIGhhcyB0byBhc3NpZ24KLQkgKi8KLQotCS8qIGFsd2F5cyBhc3NpZ24gdGhlc2UgKi8KLQl2b2lkICgqc2V0X2Jzc2lkX2ZpbHRlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkKTsKLQl2b2lkICgqc2V0X2NoYW5uZWwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpOwotCi0JLyogYXNzaWduIGlmIHlvdSBuZWVkIGl0LCBpbmZvcm1hdGlvbmFsIG9ubHkgKi8KLQl2b2lkICgqbGlua19jaGFuZ2UpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0JLyogSWYgdGhlIGhhcmR3YXJlIGNhbiBkbyBzY2FubmluZywgYXNzaWduIF9hbGxfIHRocmVlIG9mIHRoZXNlIGNhbGxiYWNrcy4KLQkgKiBXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBjYWxsIGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZCgpLgotCSAqLwotCQotCS8qIHdoZW4gY2FsbGVkLCBzdGFydF9zY2FuIGlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGNhbGxlZCBhZ2FpbgotCSAqIHVudGlsIHlvdSBjYWxsIGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZC4KLQkgKiBSZXR1cm4gMCBpZiBzY2FubmluZyBjb3VsZCBzdGFydCwgZXJyb3Igb3RoZXJ3aXNlLgotCSAqIFNPRlRNQUMgQVVUSE9SUzogZG9uJ3QgY2FsbCB0aGlzLCB1c2UgaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuICovCi0JaW50ICgqc3RhcnRfc2Nhbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JLyogdGhpcyBzaG91bGQgYmxvY2sgdW50aWwgYWZ0ZXIgaWVlZTgwMjExc29mdG1hY19zY2FuX2ZpbmlzaGVkIHdhcyBjYWxsZWQKLQkgKiBTT0ZUTUFDIEFVVEhPUlM6IGRvbid0IGNhbGwgdGhpcywgdXNlIGllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2NhbiAqLwotCXZvaWQgKCp3YWl0X2Zvcl9zY2FuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQkvKiBzdG9wX3NjYW4gYWJvcnRzIGEgc2NhbiwgYnV0IGlzIGFzeW5jaHJvbm91cy4KLQkgKiBpZiB5b3Ugd2FudCB0byB3YWl0IGZvciBpdCB0b28sIHVzZSB3YWl0X2Zvcl9zY2FuCi0JICogU09GVE1BQyBBVVRIT1JTOiBkb24ndCBjYWxsIHRoaXMsIHVzZSBpZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2NhbiAqLwotCXZvaWQgKCpzdG9wX3NjYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0JLyogd2UnbGwgbmVlZCBzb21ldGhpbmcgYWJvdXQgYmVhY29ucyBoZXJlIHRvbywgZm9yIEFQIG9yIGFkLWhvYyBtb2RlcyAqLwotCi0JLyogVHJhbnNtaXNzaW9uIHJhdGVzIHRvIGJlIHVzZWQgYnkgdGhlIGRyaXZlci4KLQkgKiBUaGUgU29mdE1BQyBmaWd1cmVzIG91dCB0aGUgYmVzdCBwb3NzaWJsZSByYXRlcy4KLQkgKiBUaGUgZHJpdmVyIGp1c3QgbmVlZHMgdG8gcmVhZCB0aGVtLgotCSAqLwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgdHhyYXRlczsKLQotCS8qIElmIHRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gc3R1ZmYgb24gVFggcmF0ZSBjaGFuZ2VzLCBhc3NpZ24gdGhpcwotCSAqIGNhbGxiYWNrLiBTZWUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEcgZm9yIGNoYW5nZSBmbGFncy4gKi8KLQl2b2lkICgqdHhyYXRlc19jaGFuZ2UpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgdTMyIGNoYW5nZXMpOwotCi0JLyogSWYgdGhlIGRyaXZlciBuZWVkcyB0byBkbyBzdHVmZiB3aGVuIEJTUyBwcm9wZXJ0aWVzIGNoYW5nZSwgYXNzaWduCi0JICogdGhpcyBjYWxsYmFjay4gc2VlIElFRUU4MDIxMVNPRlRNQUNfQlNTSU5GT0NIRyBmb3IgY2hhbmdlIGZsYWdzLiAqLwotCXZvaWQgKCpic3NpbmZvX2NoYW5nZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICB1MzIgY2hhbmdlcyk7Ci0KLQkvKiBwcml2YXRlIHN0dWZmIGZvbGxvd3MgKi8KLQkvKiB0aGlzIGxvY2sgcHJvdGVjdHMgdGhpcyBzdHJ1Y3R1cmUgKi8KLQlzcGlubG9ja190IGxvY2s7Ci0KLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7Ci0KLQl1OCBydW5uaW5nOyAvKiBTb2Z0TUFDIHN0YXJ0ZWQ/ICovCi0JdTggc2Nhbm5pbmc7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19zY2FuaW5mbyAqc2NhbmluZm87Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXNzb2NfaW5mbyBhc3NvY2luZm87Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYnNzX2luZm8gYnNzaW5mbzsKLQotCXN0cnVjdCBsaXN0X2hlYWQgYXV0aF9xdWV1ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50czsKLQotIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gcmF0ZXNpbmZvOwotCWludCB0eHJhdGVfYmFkbmVzczsKLQkKLQkvKiBXUEEgc3R1ZmYgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY193cGEgd3BhOwotCi0JLyogd2UgbmVlZCB0byBrZWVwIGEgbGlzdCBvZiBuZXR3b3JrIHN0cnVjdHMgd2UgY29waWVkICovCi0Jc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2xpc3Q7Ci0KLQkvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgaXRlbSBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgZGF0YQotCSAqIGFsbG9jYXRlZCBiZXlvbmQgdGhpcyBzdHJ1Y3R1cmUgYnkgYWxsb2NfaWVlZTgwMjExICovCi0JdTggcHJpdlswXTsKLX07Ci0KLWV4dGVybiB2b2lkIGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKTsKLQotc3RhdGljIGlubGluZSB2b2lkICogaWVlZTgwMjExc29mdG1hY19wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICopaWVlZTgwMjExX3ByaXYoZGV2KSktPnByaXY7Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqIGFsbG9jX2llZWU4MDIxMXNvZnRtYWMoaW50IHNpemVvZl9wcml2KTsKLWV4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExc29mdG1hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyogQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBkZXRlY3QgYSBsb3N0IFRYIGZyYWdtZW50LgotICogKElmIHRoZSBkZXZpY2UgaW5kaWNhdGVzIGZhaWx1cmUgb2YgQUNLIFJYLCBmb3IgZXhhbXBsZS4pCi0gKiBJdCBpcyB3aXNlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIGFibGUgdG8gZGV0ZWN0IGxvc3QgcGFja2V0cywKLSAqIGJlY2F1c2UgaXQgY29udHJpYnV0ZXMgdG8gdGhlIFRYIFJhdGVzIGF1dG8gYWRqdXN0bWVudC4KLSAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExc29mdG1hY19mcmFnbWVudF9sb3N0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgIHUxNiB3aXJlbGVzc19zZXF1ZW5jZV9udW1iZXIpOwotLyogQ2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBfc3RhcnQgdG8gdGVsbCB0aGUgc29mdG1hYyB3aGF0IHJhdGVzCi0gKiB0aGUgaHcgc3VwcG9ydHMuIFRoZSByYXRlcyBwYXJhbWV0ZXIgaXMgY29waWVkLCBzbyB5b3UgY2FuCi0gKiBmcmVlIGl0IHJpZ2h0IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gCi0gKiBOb3RlIHRoYXQgdGhlIHJhdGVzIG5lZWQgdG8gYmUgc29ydGVkLiAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExc29mdG1hY19zZXRfcmF0ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggY291bnQsIHU4ICpyYXRlcyk7Ci0KLS8qIEZpbmRzIHRoZSBoaWdoZXN0IHJhdGUgd2hpY2ggaXM6Ci0gKiAgMS4gUHJlc2VudCBpbiByaSAob3B0aW9uYWxseSBhIGJhc2ljIHJhdGUpCi0gKiAgMi4gU3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKLSAqICAzLiBMZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHVzZXItZGVmaW5lZCByYXRlCi0gKi8KLWV4dGVybiB1OCBpZWVlODAyMTFzb2Z0bWFjX2hpZ2hlc3Rfc3VwcG9ydGVkX3JhdGUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyaSwgaW50IGJhc2ljX29ubHkpOwotCi0vKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYWR2aXNlcyB5b3UgdGhlIHJhdGUgYXQgd2hpY2ggYSBmcmFtZSBzaG91bGQgYmUKLSAqIHRyYW5zbWl0dGVkIGF0LiAqLwotc3RhdGljIGlubGluZSB1OCBpZWVlODAyMTFzb2Z0bWFjX3N1Z2dlc3RfdHhyYXRlKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCQkJCQkJIGludCBpc19tdWx0aWNhc3QsCi0JCQkJCQkgaW50IGlzX21ndCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzICp0eHJhdGVzID0gJm1hYy0+dHhyYXRlczsKLQotCWlmICghbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCkKLQkJcmV0dXJuIHR4cmF0ZXMtPm1ndF9tY2FzdF9yYXRlOwotCi0JLyogV2UgYXJlIGFzc29jaWF0ZWQsIHNlbmRpbmcgdW5pY2FzdCBmcmFtZSAqLwotCWlmICghaXNfbXVsdGljYXN0KQotCQlyZXR1cm4gdHhyYXRlcy0+ZGVmYXVsdF9yYXRlOwotCi0JLyogV2UgYXJlIGFzc29jaWF0ZWQsIHNlbmRpbmcgbXVsdGljYXN0IGZyYW1lICovCi0JaWYgKGlzX21ndCkKLQkJcmV0dXJuIHR4cmF0ZXMtPm1ndF9tY2FzdF9yYXRlOwotCWVsc2UKLQkJcmV0dXJuIHR4cmF0ZXMtPm1jYXN0X3JhdGU7Ci19Ci0KLS8qIEhlbHBlciBmdW5jdGlvbiB3aGljaCBhZHZpc2VzIHlvdSB3aGVuIGl0IGlzIHNhZmUgdG8gdHJhbnNtaXQgd2l0aCBzaG9ydAotICogcHJlYW1ibGUuCi0gKiBZb3Ugc2hvdWxkIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdHJhbnNtaXR0aW5nIGF0IENDSyByYXRlcy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMXNvZnRtYWNfc2hvcnRfcHJlYW1ibGVfb2soc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0JCQkJCQkgICAgaW50IGlzX211bHRpY2FzdCwKLQkJCQkJCSAgICBpbnQgaXNfbWd0KQotewotCXJldHVybiAoaXNfbXVsdGljYXN0ICYmIGlzX21ndCkgPyAwIDogbWFjLT5ic3NpbmZvLnNob3J0X3ByZWFtYmxlOwotfQotCi0vKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYWR2aXNlcyB5b3Ugd2hldGhlciBwcm90ZWN0aW9uIChlLmcuIHNlbGYtQ1RTKSBpcwotICogbmVlZGVkLiAxID0gcHJvdGVjdGlvbiBuZWVkZWQsIDAgPSBubyBwcm90ZWN0aW9uIG5lZWRlZAotICogT25seSB1c2UgdGhpcyBmdW5jdGlvbiB3aGVuIHRyYW5zbWl0dGluZyB3aXRoIE9GRE0gbW9kdWxhdGlvbi4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMXNvZnRtYWNfcHJvdGVjdGlvbl9uZWVkZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpCi17Ci0JcmV0dXJuIG1hYy0+YnNzaW5mby51c2VfcHJvdGVjdGlvbjsKLX0KLQotLyogU3RhcnQgdGhlIFNvZnRNQUMuIENhbGwgdGhpcyBhZnRlciB5b3UgaW5pdGlhbGl6ZWQgdGhlIGRldmljZQotICogYW5kIGl0IGlzIHJlYWR5IHRvIHJ1bi4KLSAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExc29mdG1hY19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLS8qIFN0b3AgdGhlIFNvZnRNQUMuIENhbGwgdGhpcyBiZWZvcmUgeW91IHNodXRkb3duIHRoZSBkZXZpY2UuICovCi1leHRlcm4gdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qCi0gKiBFdmVudCBzeXN0ZW0KLSAqLwotCi0vKiB2YWxpZCBldmVudCB0eXBlcyAqLwotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FOWQkJCS0xIC8qcHJpdmF0ZSB1c2Ugb25seSovCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfU0NBTl9GSU5JU0hFRAkJMAotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURUQJCTEKLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfRkFJTEVECQkyCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX1RJTUVPVVQJMwotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhFTlRJQ0FURUQJCTQKLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIX0ZBSUxFRAkJNQotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhfVElNRU9VVAkJNgotI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURV9ORVRfTk9UX0ZPVU5ECTcKLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVECQk4Ci0vKiBrZWVwIHRoaXMgdXBkYXRlZCEgKi8KLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9MQVNUCQkJOAotLyoKLSAqIElmIHlvdSB3YW50IHRvIGJlIG5vdGlmaWVkIG9mIGNlcnRhaW4gZXZlbnRzLCB5b3UgY2FuIGNhbGwKLSAqIGllZWU4MDIxMXNvZnRtYWNfbm90aWZ5W19hdG9taWNdIHdpdGgKLSAqIAktIGV2ZW50IHNldCB0byBvbmUgb2YgdGhlIGNvbnN0YW50cyBiZWxvdwotICogCS0gZnVuIHNldCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUKLSAqCS0gY29udGV4dCBzZXQgdG8gdGhlIGNvbnRleHQgZGF0YSB5b3Ugd2FudCBwYXNzZWQKLSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgMCwgb3IgYW4gZXJyb3IuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKm5vdGlmeV9mdW5jdGlvbl9wdHIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBldmVudF90eXBlLCB2b2lkICpjb250ZXh0KTsKLQotI2RlZmluZSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeShkZXYsIGV2ZW50LCBmdW4sIGNvbnRleHQpIGllZWU4MDIxMXNvZnRtYWNfbm90aWZ5X2dmcChkZXYsIGV2ZW50LCBmdW4sIGNvbnRleHQsIEdGUF9LRVJORUwpOwotI2RlZmluZSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9hdG9taWMoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0KSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9nZnAoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0LCBHRlBfQVRPTUlDKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9nZnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQlpbnQgZXZlbnQsIG5vdGlmeV9mdW5jdGlvbl9wdHIgZnVuLCB2b2lkICpjb250ZXh0LCBnZnBfdCBnZnBfbWFzayk7Ci0KLS8qIFRvIGNsZWFyIHBlbmRpbmcgd29yayAoZm9yIGlmY29uZmlnIGRvd24sIGV0Yy4pICovCi1leHRlcm4gdm9pZAotaWVlZTgwMjExc29mdG1hY19jbGVhcl9wZW5kaW5nX3dvcmsoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSk7Ci0KLSNlbmRpZiAvKiBJRUVFODAyMTFTT0ZUTUFDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjX3d4LmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjX3d4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZTNhZDUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hY193eC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcHJvdG90eXBlcyBmb3IgdGhlIHdpcmVsZXNzIGV4dGVuc2lvbgotICogaGFuZGxlcnMgdGhhdCB0aGUgc29mdG1hYyBBUEkgcHJvdmlkZXMuIEluY2x1ZGUgdGhpcyBmaWxlIHRvCi0gKiB1c2UgdGhlIHd4IGhhbmRsZXJzLCB5b3UgY2FuIGFzc2lnbiB0aGVzZSBkaXJlY3RseS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqICAgICAgICAgICAgICAgICAgICBKb3NlcGggSmV6YWsgPGpvc2VqeEBnZW50b28ub3JnPgotICogICAgICAgICAgICAgICAgICAgIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KLSAqICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKi8KLQotI2lmbmRlZiBfSUVFRTgwMjExU09GVE1BQ19XWF9ICi0jZGVmaW5lIF9JRUVFODAyMTFTT0ZUTUFDX1dYX0gKLQotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFzb2Z0bWFjLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotZXh0ZXJuIGludAotaWVlZTgwMjExc29mdG1hY193eF90cmlnZ2VyX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludAotaWVlZTgwMjExc29mdG1hY193eF9nZXRfc2Nhbl9yZXN1bHRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJICAgICBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQKLWllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkgICAgICBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQKLWllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkgICAgICBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQKLWllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkgICAgIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludAotaWVlZTgwMjExc29mdG1hY193eF9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCSAgICAgY2hhciAqZXh0cmEpOwotCi1leHRlcm4gaW50Ci1pZWVlODAyMTFzb2Z0bWFjX3d4X2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCSAgICAgIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludAotaWVlZTgwMjExc29mdG1hY193eF9zZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkgICAgICBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQKLWllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCSAgICAgIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludAotaWVlZTgwMjExc29mdG1hY193eF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgICAgY2hhciAqZXh0cmEpOwotZXh0ZXJuIGludAotaWVlZTgwMjExc29mdG1hY193eF9zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgICBjaGFyICpleHRyYSk7Ci0jZW5kaWYgLyogX0lFRUU4MDIxMVNPRlRNQUNfV1ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfY29tbW9uLmggYi9pbmNsdWRlL25ldC9pbmV0X2NvbW1vbi5oCmluZGV4IDM4ZDVhMWUuLjE4Yzc3MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb21tb24uaApAQCAtMzksNiArMzksMTcgQEAKIGV4dGVybiBpbnQJCQlpbmV0X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIAogCQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKK2V4dGVybiBpbnQJCQlpbmV0X2N0bF9zb2NrX2NyZWF0ZShzdHJ1Y3Qgc29jayAqKnNrLAorCQkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCisJCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisJCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgcHJvdG9jb2wsCisJCQkJCQkgICAgIHN0cnVjdCBuZXQgKm5ldCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2N0bF9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKQoreworCXNrX3JlbGVhc2Vfa2VybmVsKHNrKTsKK30KKwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKaW5kZXggZjAwZjA1Ny4uMmZmNTQ1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCkBAIC0zMjcsMTEgKzMyNyw2IEBACiAKIGV4dGVybiB2b2lkIGluZXRfY3NrX2FkZHIyc29ja2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyKTsKIAotZXh0ZXJuIGludCBpbmV0X2Nza19jdGxfc29ja19jcmVhdGUoc3RydWN0IHNvY2tldCAqKnNvY2ssCi0JCQkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSwKLQkJCQkgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKLQkJCQkgICAgdW5zaWduZWQgY2hhciBwcm90b2NvbCk7Ci0KIGV4dGVybiBpbnQgaW5ldF9jc2tfY29tcGF0X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCSAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CiBleHRlcm4gaW50IGluZXRfY3NrX2NvbXBhdF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmggYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCmluZGV4IGJhMzNkYjAuLjcwNDBhNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaApAQCAtNDcsNyArNDcsNyBAQAogICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUJSVA2X0VDTl9mbG93X3htaXQoc2ssIGxhYmVsKSBkbyB7CQkJCVwKLQlpZiAoSU5FVF9FQ05faXNfY2FwYWJsZShpbmV0X3NrKHNrKS0+dG9zKSkJCQlcCisJaWYgKElORVRfRUNOX2lzX2NhcGFibGUoaW5ldDZfc2soc2spLT50Y2xhc3MpKQkJCVwKIAkJKGxhYmVsKSB8PSBodG9ubChJTkVUX0VDTl9FQ1RfMCA8PCAyMCk7CQkJXAogICAgIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKaW5kZXggNzM3NDI1MS4uZTA4MWVlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKQEAgLTI1LDkgKzI1LDkgQEAKIAlpbnQJCQltZWF0OwogCV9fdTgJCQlsYXN0X2luOyAgICAvKiBmaXJzdC9sYXN0IHNlZ21lbnQgYXJyaXZlZD8gKi8KIAotI2RlZmluZSBDT01QTEVURQkJNAotI2RlZmluZSBGSVJTVF9JTgkJMgotI2RlZmluZSBMQVNUX0lOCQkJMQorI2RlZmluZSBJTkVUX0ZSQUdfQ09NUExFVEUJNAorI2RlZmluZSBJTkVUX0ZSQUdfRklSU1RfSU4JMgorI2RlZmluZSBJTkVUX0ZSQUdfTEFTVF9JTgkxCiB9OwogCiAjZGVmaW5lIElORVRGUkFHU19IQVNIU1oJCTY0CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaCBiL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCmluZGV4IDk3ZGMzNWEuLjczNWI5MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCkBAIC0yMjEsMjYgKzIyMSw3IEBACiB9CiAKIC8qIENhbGxlciBtdXN0IGRpc2FibGUgbG9jYWwgQkggcHJvY2Vzc2luZy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luZXRfaW5oZXJpdF9wb3J0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmNoaWxkKQotewotCXN0cnVjdCBpbmV0X2hhc2hpbmZvICp0YWJsZSA9IHNrLT5za19wcm90LT5oYXNoaW5mbzsKLQljb25zdCBpbnQgYmhhc2ggPSBpbmV0X2JoYXNoZm4oaW5ldF9zayhjaGlsZCktPm51bSwgdGFibGUtPmJoYXNoX3NpemUpOwotCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZCA9ICZ0YWJsZS0+Ymhhc2hbYmhhc2hdOwotCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKLQotCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7Ci0JdGIgPSBpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoOwotCXNrX2FkZF9iaW5kX25vZGUoY2hpbGQsICZ0Yi0+b3duZXJzKTsKLQlpbmV0X2NzayhjaGlsZCktPmljc2tfYmluZF9oYXNoID0gdGI7Ci0Jc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9pbmhlcml0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQpCi17Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCV9faW5ldF9pbmhlcml0X3BvcnQoc2ssIGNoaWxkKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKLX0KK2V4dGVybiB2b2lkIF9faW5ldF9pbmhlcml0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQpOwogCiBleHRlcm4gdm9pZCBpbmV0X3B1dF9wb3J0KHN0cnVjdCBzb2NrICpzayk7CiAKQEAgLTMxNCwyNSArMjk1LDI1IEBACiAJCQkJICAgKChfX2ZvcmNlIF9fdTY0KShfX2JlMzIpKF9fc2FkZHIpKSk7CiAjZW5kaWYgLyogX19CSUdfRU5ESUFOICovCiAjZGVmaW5lIElORVRfTUFUQ0goX19zaywgX19uZXQsIF9faGFzaCwgX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKVwKLQkoKChfX3NrKS0+c2tfaGFzaCA9PSAoX19oYXNoKSkgJiYgKChfX3NrKS0+c2tfbmV0ID09IChfX25ldCkpCSYmCVwKKwkoKChfX3NrKS0+c2tfaGFzaCA9PSAoX19oYXNoKSkgJiYgc29ja19uZXQoKF9fc2spKSA9PSAoX19uZXQpCSYmCVwKIAkgKCgqKChfX2FkZHJwYWlyICopJihpbmV0X3NrKF9fc2spLT5kYWRkcikpKSA9PSAoX19jb29raWUpKQkmJglcCiAJICgoKigoX19wb3J0cGFpciAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSkgPT0gKF9fcG9ydHMpKQkmJglcCiAJICghKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmKSB8fCAoKF9fc2spLT5za19ib3VuZF9kZXZfaWYgPT0gKF9fZGlmKSkpKQogI2RlZmluZSBJTkVUX1RXX01BVENIKF9fc2ssIF9fbmV0LCBfX2hhc2gsIF9fY29va2llLCBfX3NhZGRyLCBfX2RhZGRyLCBfX3BvcnRzLCBfX2RpZilcCi0JKCgoX19zayktPnNrX2hhc2ggPT0gKF9faGFzaCkpICYmICgoX19zayktPnNrX25ldCA9PSAoX19uZXQpKQkmJglcCisJKCgoX19zayktPnNrX2hhc2ggPT0gKF9faGFzaCkpICYmIHNvY2tfbmV0KChfX3NrKSkgPT0gKF9fbmV0KQkmJglcCiAJICgoKigoX19hZGRycGFpciAqKSYoaW5ldF90d3NrKF9fc2spLT50d19kYWRkcikpKSA9PSAoX19jb29raWUpKSAmJglcCiAJICgoKigoX19wb3J0cGFpciAqKSYoaW5ldF90d3NrKF9fc2spLT50d19kcG9ydCkpKSA9PSAoX19wb3J0cykpICYmCVwKIAkgKCEoKF9fc2spLT5za19ib3VuZF9kZXZfaWYpIHx8ICgoX19zayktPnNrX2JvdW5kX2Rldl9pZiA9PSAoX19kaWYpKSkpCiAjZWxzZSAvKiAzMi1iaXQgYXJjaCAqLwogI2RlZmluZSBJTkVUX0FERFJfQ09PS0lFKF9fbmFtZSwgX19zYWRkciwgX19kYWRkcikKICNkZWZpbmUgSU5FVF9NQVRDSChfX3NrLCBfX25ldCwgX19oYXNoLCBfX2Nvb2tpZSwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpCVwKLQkoKChfX3NrKS0+c2tfaGFzaCA9PSAoX19oYXNoKSkgJiYgKChfX3NrKS0+c2tfbmV0ID09IChfX25ldCkpCSYmCVwKKwkoKChfX3NrKS0+c2tfaGFzaCA9PSAoX19oYXNoKSkgJiYgc29ja19uZXQoKF9fc2spKSA9PSAoX19uZXQpCSYmCVwKIAkgKGluZXRfc2soX19zayktPmRhZGRyCQk9PSAoX19zYWRkcikpCQkmJglcCiAJIChpbmV0X3NrKF9fc2spLT5yY3Zfc2FkZHIJPT0gKF9fZGFkZHIpKQkJJiYJXAogCSAoKCooKF9fcG9ydHBhaXIgKikmKGluZXRfc2soX19zayktPmRwb3J0KSkpID09IChfX3BvcnRzKSkJJiYJXAogCSAoISgoX19zayktPnNrX2JvdW5kX2Rldl9pZikgfHwgKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmID09IChfX2RpZikpKSkKICNkZWZpbmUgSU5FVF9UV19NQVRDSChfX3NrLCBfX25ldCwgX19oYXNoLF9fY29va2llLCBfX3NhZGRyLCBfX2RhZGRyLCBfX3BvcnRzLCBfX2RpZikJXAotCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKSAmJiAoKF9fc2spLT5za19uZXQgPT0gKF9fbmV0KSkJJiYJXAorCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKSAmJiBzb2NrX25ldCgoX19zaykpID09IChfX25ldCkJJiYJXAogCSAoaW5ldF90d3NrKF9fc2spLT50d19kYWRkcgk9PSAoX19zYWRkcikpCQkmJglcCiAJIChpbmV0X3R3c2soX19zayktPnR3X3Jjdl9zYWRkcgk9PSAoX19kYWRkcikpCQkmJglcCiAJICgoKigoX19wb3J0cGFpciAqKSYoaW5ldF90d3NrKF9fc2spLT50d19kcG9ydCkpKSA9PSAoX19wb3J0cykpICYmCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggNzAwMTNjNS4uYTQyY2Q2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTQzLDggKzQzLDcgQEAKIAl1bnNpZ25lZCBjaGFyCXNycjsKIAl1bnNpZ25lZCBjaGFyCXJyOwogCXVuc2lnbmVkIGNoYXIJdHM7Ci0JdW5zaWduZWQgY2hhcglpc19kYXRhOjEsCi0JCQlpc19zdHJpY3Ryb3V0ZToxLAorCXVuc2lnbmVkIGNoYXIJaXNfc3RyaWN0cm91dGU6MSwKIAkJCXNycl9pc19oaXQ6MSwKIAkJCWlzX2NoYW5nZWQ6MSwKIAkJCXJyX25lZWRhZGRyOjEsCkBAIC0xMzcsNyArMTM2LDcgQEAKIAkJdW5zaWduZWQgaW50CQlmbGFnczsKIAkJdW5zaWduZWQgaW50CQlmcmFnc2l6ZTsKIAkJc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKLQkJc3RydWN0IHJ0YWJsZQkJKnJ0OworCQlzdHJ1Y3QgZHN0X2VudHJ5CSpkc3Q7CiAJCWludAkJCWxlbmd0aDsgLyogVG90YWwgbGVuZ3RoIG9mIGFsbCBmcmFtZXMgKi8KIAkJX19iZTMyCQkJYWRkcjsKIAkJc3RydWN0IGZsb3dpCQlmbDsKQEAgLTE3NSw3ICsxNzQsOCBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW5ldF9laGFzaGZuKGNvbnN0IF9fYmUzMiBsYWRkciwgY29uc3QgX191MTYgbHBvcnQsCiAJCQkJCWNvbnN0IF9fYmUzMiBmYWRkciwgY29uc3QgX19iZTE2IGZwb3J0KQogewotCXJldHVybiBqaGFzaF8yd29yZHMoKF9fZm9yY2UgX191MzIpIGxhZGRyIF4gKF9fZm9yY2UgX191MzIpIGZhZGRyLAorCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgX191MzIpIGxhZGRyLAorCQkJICAgIChfX2ZvcmNlIF9fdTMyKSBmYWRkciwKIAkJCSAgICAoKF9fdTMyKSBscG9ydCkgPDwgMTYgfCAoX19mb3JjZSBfX3UzMilmcG9ydCwKIAkJCSAgICBpbmV0X2VoYXNoX3NlY3JldCk7CiB9CkBAIC0xOTQsNyArMTk0LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaW5ldF9paWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gKChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3QpLT5ydF9paWY7CisJcmV0dXJuIHNrYi0+cnRhYmxlLT5ydF9paWY7CiB9CiAKICNlbmRpZgkvKiBfSU5FVF9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKaW5kZXggMjk2NTQ3Yi4uOTVjNjYwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKQEAgLTIwNyw0ICsyMDcsMjIgQEAKIAkJCSAgICAgICBjb25zdCBpbnQgdGltZW8sIGNvbnN0IGludCB0aW1ld2FpdF9sZW4pOwogZXh0ZXJuIHZvaWQgaW5ldF90d3NrX2Rlc2NoZWR1bGUoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsCiAJCQkJIHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyAqdHdkcik7CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBuZXQgKnR3c2tfbmV0KGNvbnN0IHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3c2spCit7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXJldHVybiB0d3NrLT50d19uZXQ7CisjZWxzZQorCXJldHVybiAmaW5pdF9uZXQ7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZQordm9pZCB0d3NrX25ldF9zZXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHdzaywgc3RydWN0IG5ldCAqbmV0KQoreworI2lmZGVmIENPTkZJR19ORVRfTlMKKwl0d3NrLT50d19uZXQgPSBuZXQ7CisjZW5kaWYKK30KICNlbmRpZgkvKiBfSU5FVF9USU1FV0FJVF9TT0NLXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggOWY1MGQ0Zi4uNmQ3YmNkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC0zNDcsMTAgKzM0NywxMSBAQAogZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LCBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZyk7CiBleHRlcm4gaW50IGlwX29wdGlvbnNfZWNobyhzdHJ1Y3QgaXBfb3B0aW9ucyAqZG9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZCBpcF9vcHRpb25zX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIGludCBpcF9vcHRpb25zX2NvbXBpbGUoc3RydWN0IGlwX29wdGlvbnMgKm9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0KHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKK2V4dGVybiBpbnQgaXBfb3B0aW9uc19jb21waWxlKHN0cnVjdCBuZXQgKm5ldCwKKwkJCSAgICAgIHN0cnVjdCBpcF9vcHRpb25zICpvcHQsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBpcF9vcHRpb25zX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKIAkJCSAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IG9wdGxlbik7Ci1leHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdHAsCitleHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKIAkJCQkgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRhdGEsIGludCBvcHRsZW4pOwogZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc191bmRvKHN0cnVjdCBpcF9vcHRpb25zICogb3B0KTsKIGV4dGVybiB2b2lkIGlwX2ZvcndhcmRfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTM2MSw3ICszNjIsOCBAQAogICovCiAKIGV4dGVybiB2b2lkCWlwX2Ntc2dfcmVjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIGludAlpcF9jbXNnX3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYyk7CitleHRlcm4gaW50CWlwX2Ntc2dfc2VuZChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IGlwY21fY29va2llICppcGMpOwogZXh0ZXJuIGludAlpcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CiBleHRlcm4gaW50CWlwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOwogZXh0ZXJuIGludAljb21wYXRfaXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCA5NTNkNjA0Li43YzVjMGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC0xNzQsMTcgKzE3NCwxOSBAQAogI2RlZmluZSBSVDZfVEFCTEVfTE9DQUwJCVJUNl9UQUJMRV9NQUlOCiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgcnQ2X2luZm8gKigqcG9sX2xvb2t1cF90KShzdHJ1Y3QgZmliNl90YWJsZSAqLAordHlwZWRlZiBzdHJ1Y3QgcnQ2X2luZm8gKigqcG9sX2xvb2t1cF90KShzdHJ1Y3QgbmV0ICosCisJCQkJCSBzdHJ1Y3QgZmliNl90YWJsZSAqLAogCQkJCQkgc3RydWN0IGZsb3dpICosIGludCk7CiAKIC8qCiAgKglleHBvcnRlZCBmdW5jdGlvbnMKICAqLwogCi1leHRlcm4gc3RydWN0IGZpYjZfdGFibGUgKglmaWI2X2dldF90YWJsZSh1MzIgaWQpOwotZXh0ZXJuIHN0cnVjdCBmaWI2X3RhYmxlICoJZmliNl9uZXdfdGFibGUodTMyIGlkKTsKLWV4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5ICoJZmliNl9ydWxlX2xvb2t1cChzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgZmxhZ3MsCi0JCQkJCQkgcG9sX2xvb2t1cF90IGxvb2t1cCk7CitleHRlcm4gc3RydWN0IGZpYjZfdGFibGUgICAgICAgICpmaWI2X2dldF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7CitleHRlcm4gc3RydWN0IGZpYjZfdGFibGUgICAgICAgICpmaWI2X25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7CitleHRlcm4gc3RydWN0IGRzdF9lbnRyeSAgICAgICAgICpmaWI2X3J1bGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCSAgc3RydWN0IGZsb3dpICpmbCwgaW50IGZsYWdzLAorCQkJCQkJICBwb2xfbG9va3VwX3QgbG9va3VwKTsKIAogZXh0ZXJuIHN0cnVjdCBmaWI2X25vZGUJCSpmaWI2X2xvb2t1cChzdHJ1Y3QgZmliNl9ub2RlICpyb290LAogCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCkBAIC0xOTQsNyArMTk2LDggQEAKIAkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBpbnQgZHN0X2xlbiwKIAkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBpbnQgc3JjX2xlbik7CiAKLWV4dGVybiB2b2lkCQkJZmliNl9jbGVhbl9hbGwoaW50ICgqZnVuYykoc3RydWN0IHJ0Nl9pbmZvICosIHZvaWQgKmFyZyksCitleHRlcm4gdm9pZAkJCWZpYjZfY2xlYW5fYWxsKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICAgICAgIGludCAoKmZ1bmMpKHN0cnVjdCBydDZfaW5mbyAqLCB2b2lkICphcmcpLAogCQkJCQkgICAgICAgaW50IHBydW5lLCB2b2lkICphcmcpOwogCiBleHRlcm4gaW50CQkJZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKQEAgLTIwNyw3ICsyMTAsOCBAQAogZXh0ZXJuIHZvaWQJCQlpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAogCQkJCQkJc3RydWN0IG5sX2luZm8gKmluZm8pOwogCi1leHRlcm4gdm9pZAkJCWZpYjZfcnVuX2djKHVuc2lnbmVkIGxvbmcgZHVtbXkpOworZXh0ZXJuIHZvaWQJCQlmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsCisJCQkJCSAgICBzdHJ1Y3QgbmV0ICpuZXQpOwogCiBleHRlcm4gdm9pZAkJCWZpYjZfZ2NfY2xlYW51cCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCBmOTllNGYwLi45MzEzNDkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzAsNjAgKzMwLDU0IEBACiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAKLSNkZWZpbmUgUlQ2X0xPT0tVUF9GX0lGQUNFCTB4MQotI2RlZmluZSBSVDZfTE9PS1VQX0ZfUkVBQ0hBQkxFCTB4MgotI2RlZmluZSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSCTB4NAorI2RlZmluZSBSVDZfTE9PS1VQX0ZfSUZBQ0UJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUlQ2X0xPT0tVUF9GX1JFQUNIQUJMRQkJMHgwMDAwMDAwMgorI2RlZmluZSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSCQkweDAwMDAwMDA0CisjZGVmaW5lIFJUNl9MT09LVVBfRl9TUkNQUkVGX1RNUAkweDAwMDAwMDA4CisjZGVmaW5lIFJUNl9MT09LVVBfRl9TUkNQUkVGX1BVQkxJQwkweDAwMDAwMDEwCisjZGVmaW5lIFJUNl9MT09LVVBfRl9TUkNQUkVGX0NPQQkweDAwMDAwMDIwCiAKLWV4dGVybiBzdHJ1Y3QgcnQ2X2luZm8JaXA2X251bGxfZW50cnk7CiAKICNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKLWV4dGVybiBzdHJ1Y3QgcnQ2X2luZm8JaXA2X3Byb2hpYml0X2VudHJ5OwotZXh0ZXJuIHN0cnVjdCBydDZfaW5mbwlpcDZfYmxrX2hvbGVfZW50cnk7CitleHRlcm4gc3RydWN0IHJ0Nl9pbmZvCSppcDZfcHJvaGliaXRfZW50cnk7CitleHRlcm4gc3RydWN0IHJ0Nl9pbmZvCSppcDZfYmxrX2hvbGVfZW50cnk7CiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQJCQlpcDZfcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLWV4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5ICoJaXA2X3JvdXRlX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssCitleHRlcm4gc3RydWN0IGRzdF9lbnRyeSAqCWlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkJIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCSBzdHJ1Y3QgZmxvd2kgKmZsKTsKIAogZXh0ZXJuIGludAkJCWlwNl9yb3V0ZV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQJCQlpcDZfcm91dGVfY2xlYW51cCh2b2lkKTsKIAotZXh0ZXJuIGludAkJCWlwdjZfcm91dGVfaW9jdGwodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50CQkJaXB2Nl9yb3V0ZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJCSB2b2lkIF9fdXNlciAqYXJnKTsKIAogZXh0ZXJuIGludAkJCWlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcpOwogZXh0ZXJuIGludAkJCWlwNl9pbnNfcnQoc3RydWN0IHJ0Nl9pbmZvICopOwogZXh0ZXJuIGludAkJCWlwNl9kZWxfcnQoc3RydWN0IHJ0Nl9pbmZvICopOwogCi1leHRlcm4gaW50CQkJaXA2X3J0X2FkZHJfYWRkKHN0cnVjdCBpbjZfYWRkciAqYWRkciwKLQkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCQlpbnQgYW55Y2FzdCk7Ci0KLWV4dGVybiBpbnQJCQlpcDZfcnRfYWRkcl9kZWwoc3RydWN0IGluNl9hZGRyICphZGRyLAotCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLWV4dGVybiB2b2lkCQkJcnQ2X3NuZG1zZyhpbnQgdHlwZSwgc3RydWN0IGluNl9hZGRyICpkc3QsCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqc3JjLAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3LAotCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKLQkJCQkJICAgaW50IGRzdGxlbiwgaW50IHNyY2xlbiwKLQkJCQkJICAgaW50IG1ldHJpYywgX191MzIgZmxhZ3MpOwotCi1leHRlcm4gc3RydWN0IHJ0Nl9pbmZvCQkqcnQ2X2xvb2t1cChzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkgICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKK2V4dGVybiBzdHJ1Y3QgcnQ2X2luZm8JCSpydDZfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAogCQkJCQkgICAgaW50IG9pZiwgaW50IGZsYWdzKTsKIAotZXh0ZXJuIHN0cnVjdCBkc3RfZW50cnkgKm5kaXNjX2RzdF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorZXh0ZXJuIHN0cnVjdCBkc3RfZW50cnkgKmljbXA2X2RzdF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCi0JCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCi0JCQkJCSBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICopKTsKLWV4dGVybiBpbnQgbmRpc2NfZHN0X2djKGludCAqbW9yZSk7Ci1leHRlcm4gdm9pZCBmaWI2X2ZvcmNlX3N0YXJ0X2djKHZvaWQpOworCQkJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK2V4dGVybiBpbnQgaWNtcDZfZHN0X2djKGludCAqbW9yZSk7CisKK2V4dGVybiB2b2lkIGZpYjZfZm9yY2Vfc3RhcnRfZ2Moc3RydWN0IG5ldCAqbmV0KTsKIAogZXh0ZXJuIHN0cnVjdCBydDZfaW5mbyAqYWRkcmNvbmZfZHN0X2FsbG9jKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkJICAgaW50IGFueWNhc3QpOwogCitleHRlcm4gaW50CQkJaXA2X2RzdF9ob3BsaW1pdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOworCiAvKgogICoJc3VwcG9ydCBmdW5jdGlvbnMgZm9yIE5ECiAgKgpAQCAtOTQsNyArODgsNyBAQAogCQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgdW5zaWduZWQgaW50IHByZWYpOwogCi1leHRlcm4gdm9pZAkJCXJ0Nl9wdXJnZV9kZmx0X3JvdXRlcnModm9pZCk7CitleHRlcm4gdm9pZAkJCXJ0Nl9wdXJnZV9kZmx0X3JvdXRlcnMoc3RydWN0IG5ldCAqbmV0KTsKIAogZXh0ZXJuIGludAkJCXJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgdTggKm9wdCwgaW50IGxlbiwKQEAgLTEyMSw3ICsxMTUsNyBAQAogfTsKIAogZXh0ZXJuIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCB2b2lkICpwX2FyZyk7Ci1leHRlcm4gdm9pZCBydDZfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcnQ2X2lmZG93bihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcnQ2X210dV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbXR1KTsKIAogZXh0ZXJuIHJ3bG9ja190IHJ0Nl9sb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCmluZGV4IGMxN2ZhMWYuLjY1MTJkODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKQEAgLTE0LDggKzE0LDYgQEAKIC8qIGNhcGFibGUgb2YgcmVjZWl2aW5nIHBhY2tldHMgKi8KICNkZWZpbmUgSVA2X1ROTF9GX0NBUF9SQ1YgMHgyMDAwMAogCi0jZGVmaW5lIElQNl9UTkxfTUFYIDEyOAotCiAvKiBJUHY2IHR1bm5lbCAqLwogCiBzdHJ1Y3QgaXA2X3RubCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcGlwLmggYi9pbmNsdWRlL25ldC9pcGlwLmgKaW5kZXggNTQ5ZTEzMi4uNjMzZWQ0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBpcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwaXAuaApAQCAtMjQsNiArMjQsMTYgQEAKIAlpbnQJCQltbGluazsKIAogCXN0cnVjdCBpcF90dW5uZWxfcGFybQlwYXJtczsKKworCXN0cnVjdCBpcF90dW5uZWxfcHJsX2VudHJ5CSpwcmw7CQkvKiBwb3RlbnRpYWwgcm91dGVyIGxpc3QgKi8KKwl1bnNpZ25lZCBpbnQJCQlwcmxfY291bnQ7CS8qICMgb2YgZW50cmllcyBpbiBQUkwgKi8KK307CisKK3N0cnVjdCBpcF90dW5uZWxfcHJsX2VudHJ5Cit7CisJc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkJKm5leHQ7CisJX19iZTMyCQkJCWFkZHI7CisJdTE2CQkJCWZsYWdzOwogfTsKIAogI2RlZmluZSBJUFRVTk5FTF9YTUlUKCkgZG8gewkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCBjMGMwMTlmLi40OWM0ODk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0yMDIsNiArMjAyLDcgQEAKIAl1MzIJCQlvd25lcjsKIAl1bnNpZ25lZCBsb25nCQlsYXN0dXNlOwogCXVuc2lnbmVkIGxvbmcJCWV4cGlyZXM7CisJc3RydWN0IG5ldAkJKmZsX25ldDsKIH07CiAKICNkZWZpbmUgSVBWNl9GTE9XSU5GT19NQVNLCV9fY29uc3RhbnRfaHRvbmwoMHgwRkZGRkZGRikKQEAgLTI0OSwxNSArMjUwLDYgQEAKIAogI2RlZmluZSBJUFY2X0ZSQUdfVElNRU9VVAkoNjAqSFopCQkvKiA2MCBzZWNvbmRzICovCiAKLS8qCi0gKglGdW5jdGlvbiBwcm90b3R5cGUgZm9yIGJ1aWxkX3htaXQKLSAqLwotCi10eXBlZGVmIGludAkJKCppbmV0X2dldGZyYWdfdCkgKGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqYWRkciwKLQkJCQkJICAgY2hhciAqLAotCQkJCQkgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci0KIGV4dGVybiBpbnQgX19pcHY2X2FkZHJfdHlwZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX3R5cGUoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewpAQCAtMjg4LDEyICsyODAsMTAgQEAKIGlwdjZfbWFza2VkX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbSwKIAkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEyKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJaWYgKChhMS0+czZfYWRkcjMyW2ldIF4gYTItPnM2X2FkZHIzMltpXSkgJiBtLT5zNl9hZGRyMzJbaV0pCi0JCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKCEhKCgoYTEtPnM2X2FkZHIzMlswXSBeIGEyLT5zNl9hZGRyMzJbMF0pICYgbS0+czZfYWRkcjMyWzBdKSB8CisJCSAgICgoYTEtPnM2X2FkZHIzMlsxXSBeIGEyLT5zNl9hZGRyMzJbMV0pICYgbS0+czZfYWRkcjMyWzFdKSB8CisJCSAgICgoYTEtPnM2X2FkZHIzMlsyXSBeIGEyLT5zNl9hZGRyMzJbMl0pICYgbS0+czZfYWRkcjMyWzJdKSB8CisJCSAgICgoYTEtPnM2X2FkZHIzMlszXSBeIGEyLT5zNl9hZGRyMzJbM10pICYgbS0+czZfYWRkcjMyWzNdKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9hZGRyX2NvcHkoc3RydWN0IGluNl9hZGRyICphMSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphMikKQEAgLTMyOCwxMCArMzE4LDEwIEBACiBzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IGluNl9hZGRyICphMSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpCiB7Ci0JcmV0dXJuIChhMS0+czZfYWRkcjMyWzBdID09IGEyLT5zNl9hZGRyMzJbMF0gJiYKLQkJYTEtPnM2X2FkZHIzMlsxXSA9PSBhMi0+czZfYWRkcjMyWzFdICYmCi0JCWExLT5zNl9hZGRyMzJbMl0gPT0gYTItPnM2X2FkZHIzMlsyXSAmJgotCQlhMS0+czZfYWRkcjMyWzNdID09IGEyLT5zNl9hZGRyMzJbM10pOworCXJldHVybiAoKChhMS0+czZfYWRkcjMyWzBdIF4gYTItPnM2X2FkZHIzMlswXSkgfAorCQkgKGExLT5zNl9hZGRyMzJbMV0gXiBhMi0+czZfYWRkcjMyWzFdKSB8CisJCSAoYTEtPnM2X2FkZHIzMlsyXSBeIGEyLT5zNl9hZGRyMzJbMl0pIHwKKwkJIChhMS0+czZfYWRkcjMyWzNdIF4gYTItPnM2X2FkZHIzMlszXSkpID09IDApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBfX2lwdjZfcHJlZml4X2VxdWFsKGNvbnN0IF9fYmUzMiAqYTEsIGNvbnN0IF9fYmUzMiAqYTIsCkBAIC0zNzksOCArMzY5LDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGlwdjZfYWRkcl92NG1hcHBlZChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEpCiB7Ci0JcmV0dXJuICgoYS0+czZfYWRkcjMyWzBdIHwgYS0+czZfYWRkcjMyWzFdKSA9PSAwICYmCi0JCSBhLT5zNl9hZGRyMzJbMl0gPT0gaHRvbmwoMHgwMDAwZmZmZikpOworCXJldHVybiAoKGEtPnM2X2FkZHIzMlswXSB8IGEtPnM2X2FkZHIzMlsxXSB8CisJCSAoYS0+czZfYWRkcjMyWzJdIF4gaHRvbmwoMHgwMDAwZmZmZikpKSA9PSAwKTsKK30KKworLyoKKyAqIENoZWNrIGZvciBhIFJGQyA0ODQzIE9SQ0hJRCBhZGRyZXNzCisgKiAoT3ZlcmxheSBSb3V0YWJsZSBDcnlwdG9ncmFwaGljIEhhc2ggSWRlbnRpZmllcnMpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlwdjZfYWRkcl9vcmNoaWQoY29uc3Qgc3RydWN0IGluNl9hZGRyICphKQoreworCXJldHVybiAoKGEtPnM2X2FkZHIzMlswXSAmIGh0b25sKDB4ZmZmZmZmZjApKQorCQk9PSBodG9ubCgweDIwMDEwMDEwKSk7CiB9CiAKIC8qCkBAIC00NTEsOCArNDUxLDggQEAKIGV4dGVybiBpbnQJCQlpcDZfbmRfaGRyKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkJICAgaW50IHByb3RvLCBpbnQgbGVuKTsKIAogZXh0ZXJuIGludAkJCWlwNl9maW5kXzFzdGZyYWdvcHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKipuZXh0aGRyKTsKQEAgLTQ5OSwxNCArNDk5LDYgQEAKICAqCUV4dGVuc2lvbiBoZWFkZXIgKG9wdGlvbnMpIHByb2Nlc3NpbmcKICAqLwogCi1leHRlcm4gdTggKgkJCWlwdjZfYnVpbGRfbmZyYWdfb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJICAgICAgdTggKnByZXZfaGRyLAotCQkJCQkJICAgICAgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsCi0JCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkJICAgICAgdTMyIGp1bWJvbGVuKTsKLWV4dGVybiB1OCAqCQkJaXB2Nl9idWlsZF9mcmFnX29wdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCSAgICAgdTggKnByZXZfaGRyLAotCQkJCQkJICAgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCk7CiBleHRlcm4gdm9pZCAJCQlpcHY2X3B1c2hfbmZyYWdfb3B0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkJICAgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKIAkJCQkJCSAgICAgdTggKnByb3RvLApAQCAtNTQ1LDEwICs1MzcsNiBAQAogCQkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwKIAkJCQkJCWludCBfX3VzZXIgKm9wdGxlbik7CiAKLWV4dGVybiBpbnQJCQlpcHY2X3BhY2tldF9pbml0KHZvaWQpOwotCi1leHRlcm4gdm9pZAkJCWlwdjZfcGFja2V0X2NsZWFudXAodm9pZCk7Ci0KIGV4dGVybiBpbnQJCQlpcDZfZGF0YWdyYW1fY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIAogCQkJCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhZGRyX2xlbik7CiAKQEAgLTU4NSwxNCArNTczLDE0IEBACiAJCQkgaW50IF9fdXNlciAqb3B0bGVuKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gaW50ICBhYzZfcHJvY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYWM2X3Byb2NfZXhpdCh2b2lkKTsKK2V4dGVybiBpbnQgIGFjNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIGFjNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KTsKIGV4dGVybiBpbnQgIHJhdzZfcHJvY19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcmF3Nl9wcm9jX2V4aXQodm9pZCk7Ci1leHRlcm4gaW50ICB0Y3A2X3Byb2NfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHRjcDZfcHJvY19leGl0KHZvaWQpOwotZXh0ZXJuIGludCAgdWRwNl9wcm9jX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCB1ZHA2X3Byb2NfZXhpdCh2b2lkKTsKK2V4dGVybiBpbnQgIHRjcDZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCB0Y3A2X3Byb2NfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIGludCAgdWRwNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIHVkcDZfcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCk7CiBleHRlcm4gaW50ICB1ZHBsaXRlNl9wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB1ZHBsaXRlNl9wcm9jX2V4aXQodm9pZCk7CiBleHRlcm4gaW50ICBpcHY2X21pc2NfcHJvY19pbml0KHZvaWQpOwpAQCAtNjAwLDE3ICs1ODgsMTEgQEAKIGV4dGVybiBpbnQgc25tcDZfcmVnaXN0ZXJfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwogZXh0ZXJuIGludCBzbm1wNl91bnJlZ2lzdGVyX2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTsKIAotZXh0ZXJuIHN0cnVjdCBydDZfc3RhdGlzdGljcyBydDZfc3RhdHM7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgc25tcDZfcmVnaXN0ZXJfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNubXA2X3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCi17Ci0JcmV0dXJuIDA7Ci19CitzdGF0aWMgaW5saW5lIGludCBhYzZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGFjNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHNubXA2X3JlZ2lzdGVyX2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBzbm1wNl91bnJlZ2lzdGVyX2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXRoLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2V0aC5oCmluZGV4IDAwNjIzNDcuLmRlNWM4MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXRoLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldGguaApAQCAtMjksNSArMjksNCBAQAogaW50ICBpcmxhbl9ldGhfcmVjZWl2ZSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogdm9pZCBpcmxhbl9ldGhfZmxvd19pbmRpY2F0aW9uKCB2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCBMT0NBTF9GTE9XIGZsb3cpOwotdm9pZCBpcmxhbl9ldGhfc2VuZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oCmluZGV4IDMyYzM4NWQuLjA3ODhjMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJ0dHAuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmgKQEAgLTE2OSwxNyArMTY5LDE3IEBACiB2b2lkIGlydHRwX2Zsb3dfcmVxdWVzdChzdHJ1Y3QgdHNhcF9jYiAqc2VsZiwgTE9DQUxfRkxPVyBmbG93KTsKIHN0cnVjdCB0c2FwX2NiICppcnR0cF9kdXAoc3RydWN0IHRzYXBfY2IgKnNlbGYsIHZvaWQgKmluc3RhbmNlKTsKIAotc3RhdGljIF9faW5saW5lIF9fdTMyIGlydHRwX2dldF9zYWRkcihzdHJ1Y3QgdHNhcF9jYiAqc2VsZikKK3N0YXRpYyBpbmxpbmUgX191MzIgaXJ0dHBfZ2V0X3NhZGRyKHN0cnVjdCB0c2FwX2NiICpzZWxmKQogewogCXJldHVybiBpcmxtcF9nZXRfc2FkZHIoc2VsZi0+bHNhcCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZSBfX3UzMiBpcnR0cF9nZXRfZGFkZHIoc3RydWN0IHRzYXBfY2IgKnNlbGYpCitzdGF0aWMgaW5saW5lIF9fdTMyIGlydHRwX2dldF9kYWRkcihzdHJ1Y3QgdHNhcF9jYiAqc2VsZikKIHsKIAlyZXR1cm4gaXJsbXBfZ2V0X2RhZGRyKHNlbGYtPmxzYXApOwogfQogCi1zdGF0aWMgX19pbmxpbmUgX191MzIgaXJ0dHBfZ2V0X21heF9zZWdfc2l6ZShzdHJ1Y3QgdHNhcF9jYiAqc2VsZikKK3N0YXRpYyBpbmxpbmUgX191MzIgaXJ0dHBfZ2V0X21heF9zZWdfc2l6ZShzdHJ1Y3QgdHNhcF9jYiAqc2VsZikKIHsKIAlyZXR1cm4gc2VsZi0+bWF4X3NlZ19zaXplOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjLmggYi9pbmNsdWRlL25ldC9sbGMuaAppbmRleCBmNTAyNDU4Li43OTQwZGExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGMuaAorKysgYi9pbmNsdWRlL25ldC9sbGMuaApAQCAtNjUsNyArNjUsNiBAQAogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsbGNfc2FwX2xpc3Q7CiBleHRlcm4gcndsb2NrX3QgbGxjX3NhcF9saXN0X2xvY2s7Ci1leHRlcm4gdW5zaWduZWQgY2hhciBsbGNfc3RhdGlvbl9tYWNfc2FbRVRIX0FMRU5dOwogCiBleHRlcm4gaW50IGxsY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19pZi5oIGIvaW5jbHVkZS9uZXQvbGxjX2lmLmgKaW5kZXggYzYwODgxMi4uYjU5NWEwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2lmLmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX2lmLmgKQEAgLTc0LDExICs3NCw2IEBACiAJcmV0dXJuIGlzX3plcm9fZXRoZXJfYWRkcihtYWMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBsbGNfYWRkcmFueShjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmFkZHIpCi17Ci0JcmV0dXJuIGxsY19tYWNfbnVsbChhZGRyLT5tYWMpICYmICFhZGRyLT5sc2FwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBsbGNfbWFjX211bHRpY2FzdChjb25zdCB1OCAqbWFjKQogewogCXJldHVybiBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihtYWMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX3BkdS5oIGIvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCmluZGV4IDRhOGY1OGIuLjc1YjhlMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19wZHUuaAorKysgYi9pbmNsdWRlL25ldC9sbGNfcGR1LmgKQEAgLTM4MSw3ICszODEsNyBAQAogCXhpZF9pbmZvLT5mbXRfaWQgPSBMTENfWElEX0ZNVF9JRDsJLyogMHg4MSAqLwogCXhpZF9pbmZvLT50eXBlCSA9IHN2Y3Nfc3VwcG9ydGVkOwogCXhpZF9pbmZvLT5ydwkgPSByeF93aW5kb3cgPDwgMTsJLyogc2l6ZSBvZiByZWNlaXZlIHdpbmRvdyAqLwotCXNrYl9wdXQoc2tiLCAzKTsKKwlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTsKIH0KIAogLyoqCkBAIC00MDYsNyArNDA2LDcgQEAKIAl4aWRfaW5mby0+Zm10X2lkID0gTExDX1hJRF9GTVRfSUQ7CiAJeGlkX2luZm8tPnR5cGUJID0gc3Zjc19zdXBwb3J0ZWQ7CiAJeGlkX2luZm8tPnJ3CSA9IHJ4X3dpbmRvdyA8PCAxOwotCXNrYl9wdXQoc2tiLCAzKTsKKwlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTsKIH0KIAogLyogTExDIFR5cGUgMiBGUk1SIHJlc3BvbnNlIGluZm9ybWF0aW9uIGZpZWxkIGZvcm1hdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX3NhcC5oIGIvaW5jbHVkZS9uZXQvbGxjX3NhcC5oCmluZGV4IDJjNTZkYmUuLmVkMjViZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19zYXAuaAorKysgYi9pbmNsdWRlL25ldC9sbGNfc2FwLmgKQEAgLTEsNSArMSw4IEBACiAjaWZuZGVmIExMQ19TQVBfSAogI2RlZmluZSBMTENfU0FQX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCiAvKgogICogQ29weXJpZ2h0IChjKSAxOTk3IGJ5IFByb2NvbSBUZWNobm9sb2d5LEluYy4KICAqIAkJIDIwMDEtMjAwMyBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KQEAgLTE5LDggKzIyLDggQEAKIGV4dGVybiB2b2lkIGxsY19zYXBfcnRuX3BkdShzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmKiBza2IsCiAJCQkgICAgICAgdW5zaWduZWQgY2hhciBwcmltKTsKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywKLQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHU4IHR5cGUsIHUzMiBkYXRhX3NpemUpOwogCiBleHRlcm4gdm9pZCBsbGNfYnVpbGRfYW5kX3NlbmRfdGVzdF9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwKIAkJCQkgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA5MDgzYmFmLi40YTgwZDc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTM4LDcgKzM4LDExIEBACiAgKiBjYWxsZWQgaW4gaGFyZHdhcmUgaW50ZXJydXB0IGNvbnRleHQuIFRoZSBsb3ctbGV2ZWwgZHJpdmVyIG11c3Qgbm90IGNhbGwgYW55CiAgKiBvdGhlciBmdW5jdGlvbnMgaW4gaGFyZHdhcmUgaW50ZXJydXB0IGNvbnRleHQuIElmIHRoZXJlIGlzIGEgbmVlZCBmb3Igc3VjaAogICogY2FsbCwgdGhlIGxvdy1sZXZlbCBkcml2ZXIgc2hvdWxkIGZpcnN0IEFDSyB0aGUgaW50ZXJydXB0IGFuZCBwZXJmb3JtIHRoZQotICogSUVFRSA4MDIuMTEgY29kZSBjYWxsIGFmdGVyIHRoaXMsIGUuZy4gZnJvbSBhIHNjaGVkdWxlZCB3b3JrcXVldWUgZnVuY3Rpb24uCisgKiBJRUVFIDgwMi4xMSBjb2RlIGNhbGwgYWZ0ZXIgdGhpcywgZS5nLiBmcm9tIGEgc2NoZWR1bGVkIHdvcmtxdWV1ZSBvciBldmVuCisgKiB0YXNrbGV0IGZ1bmN0aW9uLgorICoKKyAqIE5PVEU6IElmIHRoZSBkcml2ZXIgb3B0cyB0byB1c2UgdGhlIF9pcnFzYWZlKCkgZnVuY3Rpb25zLCBpdCBtYXkgbm90IGFsc28KKyAqCSB1c2UgdGhlIG5vbi1pcnFzYWZlIGZ1bmN0aW9ucyEKICAqLwogCiAvKioKQEAgLTY5LDkzICs3MywxMiBAQAogICogbm90IGRvIHNvIHRoZW4gbWFjODAyMTEgbWF5IGFkZCB0aGlzIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4KICAqLwogCi0jZGVmaW5lIElFRUU4MDIxMV9DSEFOX1dfU0NBTiAweDAwMDAwMDAxCi0jZGVmaW5lIElFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU4gMHgwMDAwMDAwMgotI2RlZmluZSBJRUVFODAyMTFfQ0hBTl9XX0lCU1MgMHgwMDAwMDAwNAotCi0vKiBDaGFubmVsIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gTG93LWxldmVsIGRyaXZlciBpcyBleHBlY3RlZCB0byBmaWxsIGluIGNoYW4sCi0gKiBmcmVxLCBhbmQgdmFsIGZpZWxkcy4gT3RoZXIgZmllbGRzIHdpbGwgYmUgZmlsbGVkIGluIGJ5IDgwMjExLm8gYmFzZWQgb24KLSAqIGhvc3RhcGQgaW5mb3JtYXRpb24gYW5kIGxvdy1sZXZlbCBkcml2ZXIgZG9lcyBub3QgbmVlZCB0byB1c2UgdGhlbS4gVGhlCi0gKiBsaW1pdHMgZm9yIGVhY2ggY2hhbm5lbCB3aWxsIGJlIHByb3ZpZGVkIGluICdzdHJ1Y3QgaWVlZTgwMjExX2NvbmYnIHdoZW4KLSAqIGNvbmZpZ3VyaW5nIHRoZSBsb3ctbGV2ZWwgZHJpdmVyIHdpdGggaHctPmNvbmZpZyBjYWxsYmFjay4gSWYgYSBkZXZpY2UgaGFzCi0gKiBhIGRlZmF1bHQgcmVndWxhdG9yeSBkb21haW4sIElFRUU4MDIxMV9IV19ERUZBVUxUX1JFR19ET01BSU5fQ09ORklHVVJFRAotICogY2FuIGJlIHNldCB0byBsZXQgdGhlIGRyaXZlciBjb25maWd1cmUgYWxsIGZpZWxkcyAqLwotc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHsKLQlzaG9ydCBjaGFuOyAvKiBjaGFubmVsIG51bWJlciAoSUVFRSA4MDIuMTEpICovCi0Jc2hvcnQgZnJlcTsgLyogZnJlcXVlbmN5IGluIE1IeiAqLwotCWludCB2YWw7IC8qIGh3IHNwZWNpZmljIHZhbHVlIGZvciB0aGUgY2hhbm5lbCAqLwotCWludCBmbGFnOyAvKiBmbGFnIGZvciBob3N0YXBkIHVzZSAoSUVFRTgwMjExX0NIQU5fKikgKi8KLQl1bnNpZ25lZCBjaGFyIHBvd2VyX2xldmVsOwotCXVuc2lnbmVkIGNoYXIgYW50ZW5uYV9tYXg7Ci19OwotCi0jZGVmaW5lIElFRUU4MDIxMV9SQVRFX0VSUCAweDAwMDAwMDAxCi0jZGVmaW5lIElFRUU4MDIxMV9SQVRFX0JBU0lDIDB4MDAwMDAwMDIKLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfUFJFQU1CTEUyIDB4MDAwMDAwMDQKLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfU1VQUE9SVEVEIDB4MDAwMDAwMTAKLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfT0ZETSAweDAwMDAwMDIwCi0jZGVmaW5lIElFRUU4MDIxMV9SQVRFX0NDSyAweDAwMDAwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9SQVRFX01BTkRBVE9SWSAweDAwMDAwMTAwCi0KLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfQ0NLXzIgKElFRUU4MDIxMV9SQVRFX0NDSyB8IElFRUU4MDIxMV9SQVRFX1BSRUFNQkxFMikKLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfTU9EVUxBVElPTihmKSBcCi0JKGYgJiAoSUVFRTgwMjExX1JBVEVfQ0NLIHwgSUVFRTgwMjExX1JBVEVfT0ZETSkpCi0KLS8qIExvdy1sZXZlbCBkcml2ZXIgc2hvdWxkIHNldCBQUkVBTUJMRTIsIE9GRE0gYW5kIENDSyBmbGFncy4KLSAqIEJBU0lDLCBTVVBQT1JURUQsIEVSUCwgYW5kIE1BTkRBVE9SWSBmbGFncyBhcmUgc2V0IGluIDgwMjExLm8gYmFzZWQgb24gdGhlCi0gKiBjb25maWd1cmF0aW9uLiAqLwotc3RydWN0IGllZWU4MDIxMV9yYXRlIHsKLQlpbnQgcmF0ZTsgLyogcmF0ZSBpbiAxMDAga2JwcyAqLwotCWludCB2YWw7IC8qIGh3IHNwZWNpZmljIHZhbHVlIGZvciB0aGUgcmF0ZSAqLwotCWludCBmbGFnczsgLyogSUVFRTgwMjExX1JBVEVfIGZsYWdzICovCi0JaW50IHZhbDI7IC8qIGh3IHNwZWNpZmljIHZhbHVlIGZvciB0aGUgcmF0ZSB3aGVuIHVzaW5nIHNob3J0IHByZWFtYmxlCi0JCSAgICogKG9ubHkgd2hlbiBJRUVFODAyMTFfUkFURV9QUkVBTUJMRTIgZmxhZyBpcyBzZXQsIGkuZS4sIGZvcgotCQkgICAqIDIsIDUuNSwgYW5kIDExIE1icHMpICovCi0Jc2lnbmVkIGNoYXIgbWluX3Jzc2lfYWNrOwotCXVuc2lnbmVkIGNoYXIgbWluX3Jzc2lfYWNrX2RlbHRhOwotCi0JLyogZm9sbG93aW5nIGZpZWxkcyBhcmUgc2V0IGJ5IDgwMjExLm8gYW5kIG5lZWQgbm90IGJlIGZpbGxlZCBieSB0aGUKLQkgKiBsb3ctbGV2ZWwgZHJpdmVyICovCi0JaW50IHJhdGVfaW52OyAvKiBpbnZlcnNlIG9mIHRoZSByYXRlIChMQ00oYWxsIHJhdGVzKSAvIHJhdGUpIGZvcgotCQkgICAgICAgKiBvcHRpbWl6aW5nIGNoYW5uZWwgdXRpbGl6YXRpb24gZXN0aW1hdGVzICovCi19OwotCiAvKioKLSAqIGVudW0gaWVlZTgwMjExX3BoeW1vZGUgLSBQSFkgbW9kZXMKLSAqCi0gKiBATU9ERV9JRUVFODAyMTFBOiA1R0h6IGFzIGRlZmluZWQgYnkgODAyLjExYS84MDIuMTFoCi0gKiBATU9ERV9JRUVFODAyMTFCOiAyLjQgR0h6IGFzIGRlZmluZWQgYnkgODAyLjExYgotICogQE1PREVfSUVFRTgwMjExRzogMi40IEdIeiBhcyBkZWZpbmVkIGJ5IDgwMi4xMWcgKHdpdGggT0ZETSksCi0gKgliYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIDExYiBtb2RlCi0gKiBATlVNX0lFRUU4MDIxMV9NT0RFUzogaW50ZXJuYWwKKyAqIGVudW0gaWVlZTgwMjExX25vdGlmaWNhdGlvbl90eXBlIC0gTG93IGxldmVsIGRyaXZlciBub3RpZmljYXRpb24KKyAqIEBJRUVFODAyMTFfTk9USUZZX1JFX0FTU09DOiBzdGFydCB0aGUgcmUtYXNzb2NpYXRpb24gc2VxdWVuY2UKICAqLwotZW51bSBpZWVlODAyMTFfcGh5bW9kZSB7Ci0JTU9ERV9JRUVFODAyMTFBLAotCU1PREVfSUVFRTgwMjExQiwKLQlNT0RFX0lFRUU4MDIxMUcsCi0KLQkvKiBrZWVwIGxhc3QgKi8KLQlOVU1fSUVFRTgwMjExX01PREVTCi19OwotCi0vKioKLSAqIHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAtIGRlc2NyaWJpbmcgU1RBJ3MgSFQgY2FwYWJpbGl0aWVzCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIG1vc3QgZXNzZW50aWFsIHBhcmFtZXRlcnMgbmVlZGVkCi0gKiB0byBkZXNjcmliZSA4MDIuMTFuIEhUIGNhcGFiaWxpdGllcyBmb3IgYW4gU1RBLgotICoKLSAqIEBodF9zdXBwb3J0ZWQ6IGlzIEhUIHN1cHBvcnRlZCBieSBTVEEsIDA6IG5vLCAxOiB5ZXMKLSAqIEBjYXA6IEhUIGNhcGFiaWxpdGllcyBtYXAgYXMgZGVzY3JpYmVkIGluIDgwMi4xMW4gc3BlYwotICogQGFtcGR1X2ZhY3RvcjogTWF4aW11bSBBLU1QRFUgbGVuZ3RoIGZhY3RvcgotICogQGFtcGR1X2RlbnNpdHk6IE1pbmltdW0gQS1NUERVIHNwYWNpbmcKLSAqIEBzdXBwX21jc19zZXQ6IFN1cHBvcnRlZCBNQ1Mgc2V0IGFzIGRlc2NyaWJlZCBpbiA4MDIuMTFuIHNwZWMKLSAqLwotc3RydWN0IGllZWU4MDIxMV9odF9pbmZvIHsKLQl1OCBodF9zdXBwb3J0ZWQ7Ci0JdTE2IGNhcDsgLyogdXNlIElFRUU4MDIxMV9IVF9DQVBfICovCi0JdTggYW1wZHVfZmFjdG9yOwotCXU4IGFtcGR1X2RlbnNpdHk7Ci0JdTggc3VwcF9tY3Nfc2V0WzE2XTsKK2VudW0gaWVlZTgwMjExX25vdGlmaWNhdGlvbl90eXBlcyB7CisJSUVFRTgwMjExX05PVElGWV9SRV9BU1NPQywKIH07CiAKIC8qKgpAQCAtMTc1LDQ2ICs5OCwyMiBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgLSBQSFkgbW9kZSBkZWZpbml0aW9uCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKLSAqIGluIGEgc2luZ2xlIFBIWSBtb2RlLgotICoKLSAqIEBsaXN0OiBpbnRlcm5hbAotICogQGNoYW5uZWxzOiBwb2ludGVyIHRvIGFycmF5IG9mIHN1cHBvcnRlZCBjaGFubmVscwotICogQHJhdGVzOiBwb2ludGVyIHRvIGFycmF5IG9mIHN1cHBvcnRlZCBiaXRyYXRlcwotICogQG1vZGU6IHRoZSBQSFkgbW9kZSBmb3IgdGhpcyBkZWZpbml0aW9uCi0gKiBAbnVtX2NoYW5uZWxzOiBudW1iZXIgb2Ygc3VwcG9ydGVkIGNoYW5uZWxzCi0gKiBAbnVtX3JhdGVzOiBudW1iZXIgb2Ygc3VwcG9ydGVkIGJpdHJhdGVzCi0gKiBAaHRfaW5mbzogUEhZJ3MgODAyLjExbiBIVCBhYmlsaXRpZXMgZm9yIHRoaXMgbW9kZQotICovCi1zdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZXM7Ci0JZW51bSBpZWVlODAyMTFfcGh5bW9kZSBtb2RlOwotCWludCBudW1fY2hhbm5lbHM7Ci0JaW50IG51bV9yYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gaHRfaW5mbzsKLX07Ci0KLS8qKgogICogc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgLSB0cmFuc21pdCBxdWV1ZSBjb25maWd1cmF0aW9uCiAgKgogICogVGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoaXMgc3RydWN0dXJlIGlzIHJlcXVpcmVkIGZvciBRb1MKLSAqIHRyYW5zbWl0IHF1ZXVlIGNvbmZpZ3VyYXRpb24uCisgKiB0cmFuc21pdCBxdWV1ZSBjb25maWd1cmF0aW9uLiBDZi4gSUVFRSA4MDIuMTEgNy4zLjIuMjkuCiAgKgogICogQGFpZnM6IGFyYml0cmF0aW9uIGludGVyZmFjZSBzcGFjZSBbMC4uMjU1LCAtMTogdXNlIGRlZmF1bHRdCiAgKiBAY3dfbWluOiBtaW5pbXVtIGNvbnRlbnRpb24gd2luZG93IFt3aWxsIGJlIGEgdmFsdWUgb2YgdGhlIGZvcm0KICAqCTJebi0xIGluIHRoZSByYW5nZSAxLi4xMDIzOyAwOiB1c2UgZGVmYXVsdF0KICAqIEBjd19tYXg6IG1heGltdW0gY29udGVudGlvbiB3aW5kb3cgW2xpa2UgQGN3X21pbl0KLSAqIEBidXJzdF90aW1lOiBtYXhpbXVtIGJ1cnN0IHRpbWUgaW4gdW5pdHMgb2YgMC4xbXMsIDAgbWVhbmluZyBkaXNhYmxlZAorICogQHR4b3A6IG1heGltdW0gYnVyc3QgdGltZSBpbiB1bml0cyBvZiAzMiB1c2VjcywgMCBtZWFuaW5nIGRpc2FibGVkCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHsKLQlpbnQgYWlmczsKLQlpbnQgY3dfbWluOwotCWludCBjd19tYXg7Ci0JaW50IGJ1cnN0X3RpbWU7CisJczE2IGFpZnM7CisJdTE2IGN3X21pbjsKKwl1MTYgY3dfbWF4OworCXUxNiB0eG9wOwogfTsKIAogLyoqCkBAIC0yNDYsNiArMTQ1LDcgQEAKICAqIEBJRUVFODAyMTFfVFhfUVVFVUVfQUZURVJfQkVBQ09OOiB0cmFuc21pdCBxdWV1ZSBmb3IgZnJhbWVzIHRvIGJlCiAgKglzZW50IGFmdGVyIGEgYmVhY29uCiAgKiBASUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTjogdHJhbnNtaXQgcXVldWUgZm9yIGJlYWNvbiBmcmFtZXMKKyAqIEBOVU1fVFhfREFUQV9RVUVVRVNfQU1QRFU6IGFkZGluZyBtb3JlIHF1ZXVlcyBmb3IgQS1NUERVCiAgKi8KIGVudW0gaWVlZTgwMjExX3R4X3F1ZXVlIHsKIAlJRUVFODAyMTFfVFhfUVVFVUVfREFUQTAsCkBAIC0yNjEsMTEgKzE2MSwxMiBAQAogICogdGhpcyBzdHJ1Y3QgbmVlZCB0byBoYXZlIGZpeGVkIHZhbHVlcy4gQXMgc29vbiBhcyBpdCBpcyByZW1vdmVkLCB3ZSBjYW4KICAqIGZpeCB0aGVzZSBlbnRyaWVzLiAqLwogCUlFRUU4MDIxMV9UWF9RVUVVRV9BRlRFUl9CRUFDT04gPSA2LAotCUlFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04gPSA3CisJSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTiA9IDcsCisJTlVNX1RYX0RBVEFfUVVFVUVTX0FNUERVID0gMTYKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgewotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHNfZGF0YSBkYXRhW05VTV9UWF9EQVRBX1FVRVVFU107CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0c19kYXRhIGRhdGFbTlVNX1RYX0RBVEFfUVVFVUVTX0FNUERVXTsKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIHsKQEAgLTI4NSwxMSArMTg2LDEzIEBACiAgKglhbHNvIGltcGxpZXMgYSBjaGFuZ2UgaW4gdGhlIEFJRC4KICAqIEBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1Q6IENUUyBwcm90ZWN0aW9uIGNoYW5nZWQKICAqIEBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEU6IHByZWFtYmxlIGNoYW5nZWQKKyAqIEBCU1NfQ0hBTkdFRF9IVDogODAyLjExbiBwYXJhbWV0ZXJzIGNoYW5nZWQKICAqLwogZW51bSBpZWVlODAyMTFfYnNzX2NoYW5nZSB7CiAJQlNTX0NIQU5HRURfQVNTT0MJCT0gMTw8MCwKIAlCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QJPSAxPDwxLAogCUJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRQk9IDE8PDIsCisJQlNTX0NIQU5HRURfSFQgICAgICAgICAgICAgICAgICA9IDE8PDQsCiB9OwogCiAvKioKQEAgLTMwMiw2ICsyMDUsMTIgQEAKICAqIEBhaWQ6IGFzc29jaWF0aW9uIElEIG51bWJlciwgdmFsaWQgb25seSB3aGVuIEBhc3NvYyBpcyB0cnVlCiAgKiBAdXNlX2N0c19wcm90OiB1c2UgQ1RTIHByb3RlY3Rpb24KICAqIEB1c2Vfc2hvcnRfcHJlYW1ibGU6IHVzZSA4MDIuMTFiIHNob3J0IHByZWFtYmxlCisgKiBAdGltZXN0YW1wOiBiZWFjb24gdGltZXN0YW1wCisgKiBAYmVhY29uX2ludDogYmVhY29uIGludGVydmFsCisgKiBAYXNzb2NfY2FwYWJpbGl0eTogY2FwYWJiaWxpdGllcyB0YWtlbiBmcm9tIGFzc29jIHJlc3AKKyAqIEBhc3NvY19odDogYXNzb2NpYXRpb24gaW4gSFQgbW9kZQorICogQGh0X2NvbmY6IGh0IGNhcGFiaWxpdGllcworICogQGh0X2Jzc19jb25mOiBodCBleHRlbmRlZCBjYXBhYmlsaXRpZXMKICAqLwogc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiB7CiAJLyogYXNzb2NpYXRpb24gcmVsYXRlZCBkYXRhICovCkBAIC0zMTAsNiArMjE5LDY5IEBACiAJLyogZXJwIHJlbGF0ZWQgZGF0YSAqLwogCWJvb2wgdXNlX2N0c19wcm90OwogCWJvb2wgdXNlX3Nob3J0X3ByZWFtYmxlOworCXUxNiBiZWFjb25faW50OworCXUxNiBhc3NvY19jYXBhYmlsaXR5OworCXU2NCB0aW1lc3RhbXA7CisJLyogaHQgcmVsYXRlZCBkYXRhICovCisJYm9vbCBhc3NvY19odDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2NvbmY7CisJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqaHRfYnNzX2NvbmY7Cit9OworCisvKioKKyAqIGVudW0gbWFjODAyMTFfdHhfY29udHJvbF9mbGFncyAtIGZsYWdzIHRvIGRlc2NyaWJlIFR4IGNvbmZpZ3VyYXRpb24gZm9yCisgKiAJCQkJICAgIHRoZSBUeCBmcmFtZQorICoKKyAqIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHdpdGggdGhlIEBmbGFncyBtZW1iZXIgb2YgJmllZWU4MDIxMV90eF9jb250cm9sCisgKgorICogQElFRUU4MDIxMV9UWENUTF9SRVFfVFhfU1RBVFVTOiByZXF1ZXN0IFRYIHN0YXR1cyBjYWxsYmFjayBmb3IgdGhpcyBmcmFtZS4KKyAqIEBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQ6IHNlbmQgdGhpcyBmcmFtZSB3aXRob3V0IGVuY3J5cHRpb247CisgKiAJCQkJICAgIGUuZy4sIGZvciBFQVBPTCBmcmFtZQorICogQElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUzogdXNlIFJUUy1DVFMgYmVmb3JlIHNlbmRpbmcgZnJhbWUKKyAqIEBJRUVFODAyMTFfVFhDVExfVVNFX0NUU19QUk9URUNUOiB1c2UgQ1RTIHByb3RlY3Rpb24gZm9yIHRoZSBmcmFtZSAoZS5nLiwKKyAqIAkJCQkgICAgIGZvciBjb21iaW5lZCA4MDIuMTFnIC8gODAyLjExYiBuZXR3b3JrcykKKyAqIEBJRUVFODAyMTFfVFhDVExfTk9fQUNLOiB0ZWxsIHRoZSBsb3cgbGV2ZWwgbm90IHRvIHdhaXQgZm9yIGFuIGFjaworICogQElFRUU4MDIxMV9UWENUTF9SQVRFX0NUUkxfUFJPQkUKKyAqIEBFRUU4MDIxMV9UWENUTF9DTEVBUl9QU19GSUxUOiBjbGVhciBwb3dlcnNhdmUgZmlsdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uCisgKiBASUVFRTgwMjExX1RYQ1RMX1JFUVVFVUU6CisgKiBASUVFRTgwMjExX1RYQ1RMX0ZJUlNUX0ZSQUdNRU5UOiB0aGlzIGlzIGEgZmlyc3QgZnJhZ21lbnQgb2YgdGhlIGZyYW1lCisgKiBASUVFRTgwMjExX1RYQ1RMX0xPTkdfUkVUUllfTElNSVQ6IHRoaXMgZnJhbWUgc2hvdWxkIGJlIHNlbmQgdXNpbmcgdGhlCisgKiAJCQkJICAgICAgdGhyb3VnaCBzZXRfcmV0cnlfbGltaXQgY29uZmlndXJlZCBsb25nCisgKiAJCQkJICAgICAgcmV0cnkgdmFsdWUKKyAqIEBJRUVFODAyMTFfVFhDVExfRUFQT0xfRlJBTUU6IGludGVybmFsIHRvIG1hYzgwMjExCisgKiBASUVFRTgwMjExX1RYQ1RMX1NFTkRfQUZURVJfRFRJTTogc2VuZCB0aGlzIGZyYW1lIGFmdGVyIERUSU0gYmVhY29uCisgKiBASUVFRTgwMjExX1RYQ1RMX0FNUERVOiB0aGlzIGZyYW1lIHNob3VsZCBiZSBzZW50IGFzIHBhcnQgb2YgYW4gQS1NUERVCisgKiBASUVFRTgwMjExX1RYQ1RMX09GRE1fSFQ6IHRoaXMgZnJhbWUgY2FuIGJlIHNlbnQgaW4gSFQgT0ZETSByYXRlcy4gbnVtYmVyCisgKiAJCQkgICAgIG9mIHN0cmVhbXMgd2hlbiB0aGlzIGZsYWcgaXMgb24gY2FuIGJlIGV4dHJhY3RlZAorICoJCQkgICAgIGZyb20gYW50ZW5uYV9zZWxfdHgsIHNvIGlmIDEgYW50ZW5uYSBpcyBtYXJrZWQKKyAqCQkJICAgICB1c2UgU0lTTywgMiBhbnRlbm5hcyBtYXJrZWQgdXNlIE1JTU8sIG4gYW50ZW5uYXMKKyAqCQkJICAgICBtYXJrZWQgdXNlIE1JTU9fbi4KKyAqIEBJRUVFODAyMTFfVFhDVExfR1JFRU5fRklFTEQ6IHVzZSBncmVlbiBmaWVsZCBwcm90ZWN0aW9uIGZvciB0aGlzIGZyYW1lCisgKiBASUVFRTgwMjExX1RYQ1RMXzQwX01IWl9XSURUSDogc2VuZCB0aGlzIGZyYW1lIHVzaW5nIDQwIE1oeiBjaGFubmVsIHdpZHRoCisgKiBASUVFRTgwMjExX1RYQ1RMX0RVUF9EQVRBOiBkdXBsaWNhdGUgZGF0YSBmcmFtZSBvbiBib3RoIDIwIE1oeiBjaGFubmVscworICogQElFRUU4MDIxMV9UWENUTF9TSE9SVF9HSTogc2VuZCB0aGlzIGZyYW1lIHVzaW5nIHNob3J0IGd1YXJkIGludGVydmFsCisgKi8KK2VudW0gbWFjODAyMTFfdHhfY29udHJvbF9mbGFncyB7CisJSUVFRTgwMjExX1RYQ1RMX1JFUV9UWF9TVEFUVVMJCT0gKDE8PDApLAorCUlFRUU4MDIxMV9UWENUTF9ET19OT1RfRU5DUllQVAkJPSAoMTw8MSksCisJSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTCQk9ICgxPDwyKSwKKwlJRUVFODAyMTFfVFhDVExfVVNFX0NUU19QUk9URUNUCQk9ICgxPDwzKSwKKwlJRUVFODAyMTFfVFhDVExfTk9fQUNLCQkJPSAoMTw8NCksCisJSUVFRTgwMjExX1RYQ1RMX1JBVEVfQ1RSTF9QUk9CRQkJPSAoMTw8NSksCisJSUVFRTgwMjExX1RYQ1RMX0NMRUFSX1BTX0ZJTFQJCT0gKDE8PDYpLAorCUlFRUU4MDIxMV9UWENUTF9SRVFVRVVFCQkJPSAoMTw8NyksCisJSUVFRTgwMjExX1RYQ1RMX0ZJUlNUX0ZSQUdNRU5UCQk9ICgxPDw4KSwKKwlJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEUJCT0gKDE8PDkpLAorCUlFRUU4MDIxMV9UWENUTF9MT05HX1JFVFJZX0xJTUlUCT0gKDE8PDEwKSwKKwlJRUVFODAyMTFfVFhDVExfRUFQT0xfRlJBTUUJCT0gKDE8PDExKSwKKwlJRUVFODAyMTFfVFhDVExfU0VORF9BRlRFUl9EVElNCQk9ICgxPDwxMiksCisJSUVFRTgwMjExX1RYQ1RMX0FNUERVCQkJPSAoMTw8MTMpLAorCUlFRUU4MDIxMV9UWENUTF9PRkRNX0hUCQkJPSAoMTw8MTQpLAorCUlFRUU4MDIxMV9UWENUTF9HUkVFTl9GSUVMRAkJPSAoMTw8MTUpLAorCUlFRUU4MDIxMV9UWENUTF80MF9NSFpfV0lEVEgJCT0gKDE8PDE2KSwKKwlJRUVFODAyMTFfVFhDVExfRFVQX0RBVEEJCT0gKDE8PDE3KSwKKwlJRUVFODAyMTFfVFhDVExfU0hPUlRfR0kJCT0gKDE8PDE4KSwKIH07CiAKIC8qIFRyYW5zbWl0IGNvbnRyb2wgZmllbGRzLiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHBhc3NlZCB0byBsb3ctbGV2ZWwgZHJpdmVyCkBAIC0zMTgsNTcgKzI5MCwyNyBAQAogCiBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgewogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0JaW50IHR4X3JhdGU7IC8qIFRyYW5zbWl0IHJhdGUsIGdpdmVuIGFzIHRoZSBodyBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlCi0JCSAgICAgICogcmF0ZSAoZnJvbSBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUpICovCi0JaW50IHJ0c19jdHNfcmF0ZTsgLyogVHJhbnNtaXQgcmF0ZSBmb3IgUlRTL0NUUyBmcmFtZSwgZ2l2ZW4gYXMgdGhlIGh3Ci0JCQkgICAqIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgcmF0ZSAoZnJvbQotCQkJICAgKiBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUpICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlICp0eF9yYXRlOwogCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9SRVFfVFhfU1RBVFVTCSgxPDwwKS8qIHJlcXVlc3QgVFggc3RhdHVzIGNhbGxiYWNrIGZvcgotCQkJCQkJKiB0aGlzIGZyYW1lICovCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9ET19OT1RfRU5DUllQVAkoMTw8MSkgLyogc2VuZCB0aGlzIGZyYW1lIHdpdGhvdXQKLQkJCQkJCSogZW5jcnlwdGlvbjsgZS5nLiwgZm9yIEVBUE9MCi0JCQkJCQkqIGZyYW1lcyAqLwotI2RlZmluZSBJRUVFODAyMTFfVFhDVExfVVNFX1JUU19DVFMJKDE8PDIpIC8qIHVzZSBSVFMtQ1RTIGJlZm9yZSBzZW5kaW5nCi0JCQkJCQkqIGZyYW1lICovCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1QJKDE8PDMpIC8qIHVzZSBDVFMgcHJvdGVjdGlvbiBmb3IgdGhlCi0JCQkJCQkqIGZyYW1lIChlLmcuLCBmb3IgY29tYmluZWQKLQkJCQkJCSogODAyLjExZyAvIDgwMi4xMWIgbmV0d29ya3MpICovCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9OT19BQ0sJCSgxPDw0KSAvKiB0ZWxsIHRoZSBsb3cgbGV2ZWwgbm90IHRvCi0JCQkJCQkqIHdhaXQgZm9yIGFuIGFjayAqLwotI2RlZmluZSBJRUVFODAyMTFfVFhDVExfUkFURV9DVFJMX1BST0JFCSgxPDw1KQotI2RlZmluZSBJRUVFODAyMTFfVFhDVExfQ0xFQVJfRFNUX01BU0sJKDE8PDYpCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9SRVFVRVVFCQkoMTw8NykKLSNkZWZpbmUgSUVFRTgwMjExX1RYQ1RMX0ZJUlNUX0ZSQUdNRU5UCSgxPDw4KSAvKiB0aGlzIGlzIGEgZmlyc3QgZnJhZ21lbnQgb2YKLQkJCQkJCSogdGhlIGZyYW1lICovCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9MT05HX1JFVFJZX0xJTUlUICgxPDwxMCkgLyogdGhpcyBmcmFtZSBzaG91bGQgYmUgc2VuZAotCQkJCQkJICAqIHVzaW5nIHRoZSB0aHJvdWdoCi0JCQkJCQkgICogc2V0X3JldHJ5X2xpbWl0IGNvbmZpZ3VyZWQKLQkJCQkJCSAgKiBsb25nIHJldHJ5IHZhbHVlICovCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9FQVBPTF9GUkFNRQkoMTw8MTEpIC8qIGludGVybmFsIHRvIG1hYzgwMjExICovCi0jZGVmaW5lIElFRUU4MDIxMV9UWENUTF9TRU5EX0FGVEVSX0RUSU0JKDE8PDEyKSAvKiBzZW5kIHRoaXMgZnJhbWUgYWZ0ZXIgRFRJTQotCQkJCQkJICogYmVhY29uICovCi0JdTMyIGZsYWdzOwkJCSAgICAgICAvKiB0eCBjb250cm9sIGZsYWdzIGRlZmluZWQKLQkJCQkJCSogYWJvdmUgKi8KKwkvKiBUcmFuc21pdCByYXRlIGZvciBSVFMvQ1RTIGZyYW1lICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpydHNfY3RzX3JhdGU7CisKKwkvKiByZXRyeSByYXRlIGZvciB0aGUgbGFzdCByZXRyaWVzICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlICphbHRfcmV0cnlfcmF0ZTsKKworCXUzMiBmbGFnczsJCS8qIHR4IGNvbnRyb2wgZmxhZ3MgZGVmaW5lZCBhYm92ZSAqLwogCXU4IGtleV9pZHg7CQkvKiBrZXlpZHggZnJvbSBody0+c2V0X2tleSgpLCB1bmRlZmluZWQgaWYKIAkJCQkgKiBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQgaXMgc2V0ICovCiAJdTggcmV0cnlfbGltaXQ7CQkvKiAxID0gb25seSBmaXJzdCBhdHRlbXB0LCAyID0gb25lIHJldHJ5LCAuLgogCQkJCSAqIFRoaXMgY291bGQgYmUgdXNlZCB3aGVuIHNldF9yZXRyeV9saW1pdAogCQkJCSAqIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgZHJpdmVyICovCi0JdTggcG93ZXJfbGV2ZWw7CQkvKiBwZXItcGFja2V0IHRyYW5zbWl0IHBvd2VyIGxldmVsLCBpbiBkQm0gKi8KLQl1OCBhbnRlbm5hX3NlbF90eDsgCS8qIDAgPSBkZWZhdWx0L2RpdmVyc2l0eSwgMSA9IEFudDAsIDIgPSBBbnQxICovCisJdTggYW50ZW5uYV9zZWxfdHg7IAkvKiAwID0gZGVmYXVsdC9kaXZlcnNpdHksIG90aGVyd2lzZSBiaXQKKwkJCQkgKiBwb3NpdGlvbiByZXByZXNlbnRzIGFudGVubmEgbnVtYmVyIHVzZWQgKi8KIAl1OCBpY3ZfbGVuOwkJLyogbGVuZ3RoIG9mIHRoZSBJQ1YvTUlDIGZpZWxkIGluIG9jdGV0cyAqLwogCXU4IGl2X2xlbjsJCS8qIGxlbmd0aCBvZiB0aGUgSVYgZmllbGQgaW4gb2N0ZXRzICovCiAJdTggcXVldWU7CQkvKiBoYXJkd2FyZSBxdWV1ZSB0byB1c2UgZm9yIHRoaXMgZnJhbWU7CiAJCQkJICogMCA9IGhpZ2hlc3QsIGh3LT5xdWV1ZXMtMSA9IGxvd2VzdCAqLwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsJCS8qIGludGVybmFsIDgwMjExLm8gcmF0ZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcnRzX3JhdGU7CS8qIGludGVybmFsIDgwMjExLm8gcmF0ZQotCQkJCQkJICogZm9yIFJUUy9DVFMgKi8KLQlpbnQgYWx0X3JldHJ5X3JhdGU7IC8qIHJldHJ5IHJhdGUgZm9yIHRoZSBsYXN0IHJldHJpZXMsIGdpdmVuIGFzIHRoZQotCQkJICAgICAqIGh3IHNwZWNpZmljIHZhbHVlIGZvciB0aGUgcmF0ZSAoZnJvbQotCQkJICAgICAqIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSkuIFRvIGJlIHVzZWQgdG8gbGltaXQKLQkJCSAgICAgKiBwYWNrZXQgZHJvcHBpbmcgd2hlbiBwcm9iaW5nIGhpZ2hlciByYXRlcywgaWYgaHcKLQkJCSAgICAgKiBzdXBwb3J0cyBtdWx0aXBsZSByZXRyeSByYXRlcy4gLTEgPSBub3QgdXNlZCAqLworCXUxNiBhaWQ7CQkvKiBTdGF0aW9uIEFJRCAqLwogCWludCB0eXBlOwkvKiBpbnRlcm5hbCAqLwogfTsKIApAQCAtMzkxLDcgKzMzMyw4IEBACiAgKiBAUlhfRkxBR19GQUlMRURfUExDUF9DUkM6IFNldCB0aGlzIGZsYWcgaWYgdGhlIFBDTFAgY2hlY2sgZmFpbGVkIG9uCiAgKgl0aGUgZnJhbWUuCiAgKiBAUlhfRkxBR19UU0ZUOiBUaGUgdGltZXN0YW1wIHBhc3NlZCBpbiB0aGUgUlggc3RhdHVzIChAbWFjdGltZSBmaWVsZCkKLSAqCWlzIHZhbGlkLgorICoJaXMgdmFsaWQuIFRoaXMgaXMgdXNlZnVsIGluIG1vbml0b3IgbW9kZSBhbmQgbmVjZXNzYXJ5IGZvciBiZWFjb24gZnJhbWVzCisgKgl0byBlbmFibGUgSUJTUyBtZXJnaW5nLgogICovCiBlbnVtIG1hYzgwMjExX3J4X2ZsYWdzIHsKIAlSWF9GTEFHX01NSUNfRVJST1IJPSAxPDwwLApAQCAtNDEwLDI3ICszNTMsMjYgQEAKICAqIFRoZSBsb3ctbGV2ZWwgZHJpdmVyIHNob3VsZCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gKHRoZSBzdWJzZXQKICAqIHN1cHBvcnRlZCBieSBoYXJkd2FyZSkgdG8gdGhlIDgwMi4xMSBjb2RlIHdpdGggZWFjaCByZWNlaXZlZAogICogZnJhbWUuCi0gKiBAbWFjdGltZTogTUFDIHRpbWVzdGFtcCBhcyBkZWZpbmVkIGJ5IDgwMi4xMQorICogQG1hY3RpbWU6IHZhbHVlIGluIG1pY3Jvc2Vjb25kcyBvZiB0aGUgNjQtYml0IFRpbWUgU3luY2hyb25pemF0aW9uIEZ1bmN0aW9uCisgKiAJKFRTRikgdGltZXIgd2hlbiB0aGUgZmlyc3QgZGF0YSBzeW1ib2wgKE1QRFUpIGFycml2ZWQgYXQgdGhlIGhhcmR3YXJlLgorICogQGJhbmQ6IHRoZSBhY3RpdmUgYmFuZCB3aGVuIHRoaXMgZnJhbWUgd2FzIHJlY2VpdmVkCiAgKiBAZnJlcTogZnJlcXVlbmN5IHRoZSByYWRpbyB3YXMgdHVuZWQgdG8gd2hlbiByZWNlaXZpbmcgdGhpcyBmcmFtZSwgaW4gTUh6Ci0gKiBAY2hhbm5lbDogY2hhbm5lbCB0aGUgcmFkaW8gd2FzIHR1bmVkIHRvCi0gKiBAcGh5bW9kZTogYWN0aXZlIFBIWSBtb2RlCiAgKiBAc3NpOiBzaWduYWwgc3RyZW5ndGggd2hlbiByZWNlaXZpbmcgdGhpcyBmcmFtZQogICogQHNpZ25hbDogdXNlZCBhcyAncXVhbCcgaW4gc3RhdGlzdGljcyByZXBvcnRpbmcKICAqIEBub2lzZTogUEhZIG5vaXNlIHdoZW4gcmVjZWl2aW5nIHRoaXMgZnJhbWUKICAqIEBhbnRlbm5hOiBhbnRlbm5hIHVzZWQKLSAqIEByYXRlOiBkYXRhIHJhdGUKKyAqIEByYXRlX2lkeDogaW5kZXggb2YgZGF0YSByYXRlIGludG8gYmFuZCdzIHN1cHBvcnRlZCByYXRlcwogICogQGZsYWc6ICVSWF9GTEFHXyoKICAqLwogc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgewogCXU2NCBtYWN0aW1lOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlpbnQgZnJlcTsKLQlpbnQgY2hhbm5lbDsKLQllbnVtIGllZWU4MDIxMV9waHltb2RlIHBoeW1vZGU7CiAJaW50IHNzaTsKIAlpbnQgc2lnbmFsOwogCWludCBub2lzZTsKIAlpbnQgYW50ZW5uYTsKLQlpbnQgcmF0ZTsKKwlpbnQgcmF0ZV9pZHg7CiAJaW50IGZsYWc7CiB9OwogCkBAIC00NDEsMTIgKzM4MywxNCBAQAogICoKICAqIEBJRUVFODAyMTFfVFhfU1RBVFVTX1RYX0ZJTFRFUkVEOiBUaGUgZnJhbWUgd2FzIG5vdCB0cmFuc21pdHRlZAogICoJYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gU1RBIHdhcyBpbiBwb3dlcnNhdmUgbW9kZS4KLSAqCiAgKiBASUVFRTgwMjExX1RYX1NUQVRVU19BQ0s6IEZyYW1lIHdhcyBhY2tub3dsZWRnZWQKKyAqIEBJRUVFODAyMTFfVFhfU1RBVFVTX0FNUERVOiBUaGUgZnJhbWUgd2FzIGFnZ3JlZ2F0ZWQsIHNvIHN0YXR1cworICogCWlzIGZvciB0aGUgd2hvbGUgYWdncmVnYXRpb24uCiAgKi8KIGVudW0gaWVlZTgwMjExX3R4X3N0YXR1c19mbGFncyB7CiAJSUVFRTgwMjExX1RYX1NUQVRVU19UWF9GSUxURVJFRAk9IDE8PDAsCiAJSUVFRTgwMjExX1RYX1NUQVRVU19BQ0sJCT0gMTw8MSwKKwlJRUVFODAyMTFfVFhfU1RBVFVTX0FNUERVCT0gMTw8MiwKIH07CiAKIC8qKgpAQCAtNDU3LDI0ICs0MDEsMjUgQEAKICAqCiAgKiBAY29udHJvbDogYSBjb3B5IG9mIHRoZSAmc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIHBhc3NlZCB0byB0aGUgZHJpdmVyCiAgKglpbiB0aGUgdHgoKSBjYWxsYmFjay4KLSAqCiAgKiBAZmxhZ3M6IHRyYW5zbWl0IHN0YXR1cyBmbGFncywgZGVmaW5lZCBhYm92ZQotICoKLSAqIEBhY2tfc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggb2YgdGhlIEFDSyBmcmFtZQotICoKKyAqIEByZXRyeV9jb3VudDogbnVtYmVyIG9mIHJldHJpZXMKICAqIEBleGNlc3NpdmVfcmV0cmllczogc2V0IHRvIDEgaWYgdGhlIGZyYW1lIHdhcyByZXRyaWVkIG1hbnkgdGltZXMKICAqCWJ1dCBub3QgYWNrbm93bGVkZ2VkCi0gKgotICogQHJldHJ5X2NvdW50OiBudW1iZXIgb2YgcmV0cmllcwotICoKKyAqIEBhbXBkdV9hY2tfbGVuOiBudW1iZXIgb2YgYWdncmVnYXRlZCBmcmFtZXMuCisgKiAJcmVsZXZhbnQgb25seSBpZiBJRUVFODAyMTFfVFhfU1RBVFVTX0FNUERVIHdhcyBzZXQuCisgKiBAYW1wZHVfYWNrX21hcDogYmxvY2sgYWNrIGJpdCBtYXAgZm9yIHRoZSBhZ2dyZWdhdGlvbi4KKyAqIAlyZWxldmFudCBvbmx5IGlmIElFRUU4MDIxMV9UWF9TVEFUVVNfQU1QRFUgd2FzIHNldC4KKyAqIEBhY2tfc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggb2YgdGhlIEFDSyBmcmFtZQogICogQHF1ZXVlX2xlbmd0aDogPz8gUkVNT1ZFCiAgKiBAcXVldWVfbnVtYmVyOiA/PyBSRU1PVkUKICAqLwogc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgewogCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sOwogCXU4IGZsYWdzOwotCWJvb2wgZXhjZXNzaXZlX3JldHJpZXM7CiAJdTggcmV0cnlfY291bnQ7CisJYm9vbCBleGNlc3NpdmVfcmV0cmllczsKKwl1OCBhbXBkdV9hY2tfbGVuOworCXU2NCBhbXBkdV9hY2tfbWFwOwogCWludCBhY2tfc2lnbmFsOwogCWludCBxdWV1ZV9sZW5ndGg7CiAJaW50IHF1ZXVlX251bWJlcjsKQEAgLTUwMiw0MSArNDQ3LDI5IEBACiAgKgogICogQHJhZGlvX2VuYWJsZWQ6IHdoZW4gemVybywgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHN3aXRjaCBvZmYgdGhlIHJhZGlvLgogICoJVE9ETyBtYWtlIGEgZmxhZwotICogQGNoYW5uZWw6IElFRUUgODAyLjExIGNoYW5uZWwgbnVtYmVyCi0gKiBAZnJlcTogZnJlcXVlbmN5IGluIE1IegotICogQGNoYW5uZWxfdmFsOiBoYXJkd2FyZSBzcGVjaWZpYyBjaGFubmVsIHZhbHVlIGZvciB0aGUgY2hhbm5lbAotICogQHBoeW1vZGU6IFBIWSBtb2RlIHRvIGFjdGl2YXRlIChSRU1PVkUpCi0gKiBAY2hhbjogY2hhbm5lbCB0byBzd2l0Y2ggdG8sIHBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgaW5mb3JtYXRpb24KLSAqIEBtb2RlOiBwb2ludGVyIHRvIG1vZGUgZGVmaW5pdGlvbgotICogQHJlZ3VsYXRvcnlfZG9tYWluOiA/PwogICogQGJlYWNvbl9pbnQ6IGJlYWNvbiBpbnRlcnZhbCAoVE9ETyBtYWtlIGludGVyZmFjZSBjb25maWcpCiAgKiBAZmxhZ3M6IGNvbmZpZ3VyYXRpb24gZmxhZ3MgZGVmaW5lZCBhYm92ZQotICogQHBvd2VyX2xldmVsOiB0cmFuc21pdCBwb3dlciBsaW1pdCBmb3IgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBpbiBkQm0KLSAqIEBhbnRlbm5hX21heDogbWF4aW11bSBhbnRlbm5hIGdhaW4KKyAqIEBwb3dlcl9sZXZlbDogcmVxdWVzdGVkIHRyYW5zbWl0IHBvd2VyIChpbiBkQm0pCisgKiBAbWF4X2FudGVubmFfZ2FpbjogbWF4aW11bSBhbnRlbm5hIGdhaW4gKGluIGRCaSkKICAqIEBhbnRlbm5hX3NlbF90eDogdHJhbnNtaXQgYW50ZW5uYSBzZWxlY3Rpb24sIDA6IGRlZmF1bHQvZGl2ZXJzaXR5LAogICoJMS8yOiBhbnRlbm5hIDAvMQogICogQGFudGVubmFfc2VsX3J4OiByZWNlaXZlIGFudGVubmEgc2VsZWN0aW9uLCBsaWtlIEBhbnRlbm5hX3NlbF90eAogICogQGh0X2NvbmY6IGRlc2NyaWJlcyBjdXJyZW50IHNlbGYgY29uZmlndXJhdGlvbiBvZiA4MDIuMTFuIEhUIGNhcGFiaWxpZXMKICAqIEBodF9ic3NfY29uZjogZGVzY3JpYmVzIGN1cnJlbnQgQlNTIGNvbmZpZ3VyYXRpb24gb2YgODAyLjExbiBIVCBwYXJhbWV0ZXJzCisgKiBAY2hhbm5lbDogdGhlIGNoYW5uZWwgdG8gdHVuZSB0bwogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgewotCWludCBjaGFubmVsOwkJCS8qIElFRUUgODAyLjExIGNoYW5uZWwgbnVtYmVyICovCi0JaW50IGZyZXE7CQkJLyogTUh6ICovCi0JaW50IGNoYW5uZWxfdmFsOwkJLyogaHcgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBjaGFubmVsICovCi0KLQllbnVtIGllZWU4MDIxMV9waHltb2RlIHBoeW1vZGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQl1bnNpZ25lZCBpbnQgcmVndWxhdG9yeV9kb21haW47CiAJaW50IHJhZGlvX2VuYWJsZWQ7CiAKIAlpbnQgYmVhY29uX2ludDsKIAl1MzIgZmxhZ3M7Ci0JdTggcG93ZXJfbGV2ZWw7Ci0JdTggYW50ZW5uYV9tYXg7CisJaW50IHBvd2VyX2xldmVsOworCWludCBtYXhfYW50ZW5uYV9nYWluOwogCXU4IGFudGVubmFfc2VsX3R4OwogCXU4IGFudGVubmFfc2VsX3J4OwogCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCiAJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvIGh0X2NvbmY7CiAJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyBodF9ic3NfY29uZjsKIH07CkBAIC01NTUsMTIgKzQ4OCwxNCBAQAogICogQElFRUU4MDIxMV9JRl9UWVBFX1dEUzogaW50ZXJmYWNlIGluIFdEUyBtb2RlLgogICogQElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46IFZMQU4gaW50ZXJmYWNlIGJvdW5kIHRvIGFuIEFQLCBkcml2ZXJzCiAgKgl3aWxsIG5ldmVyIHNlZSB0aGlzIHR5cGUuCisgKiBASUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDogODAyLjExcyBtZXNoIHBvaW50CiAgKi8KIGVudW0gaWVlZTgwMjExX2lmX3R5cGVzIHsKIAlJRUVFODAyMTFfSUZfVFlQRV9JTlZBTElELAogCUlFRUU4MDIxMV9JRl9UWVBFX0FQLAogCUlFRUU4MDIxMV9JRl9UWVBFX1NUQSwKIAlJRUVFODAyMTFfSUZfVFlQRV9JQlNTLAorCUlFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQsCiAJSUVFRTgwMjExX0lGX1RZUEVfTU5UUiwKIAlJRUVFODAyMTFfSUZfVFlQRV9XRFMsCiAJSUVFRTgwMjExX0lGX1RZUEVfVkxBTiwKQEAgLTU4Miw2ICs1MTcsMTQgQEAKIAl1OCBkcnZfcHJpdlswXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhzaXplb2Yodm9pZCAqKSkpKTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfdmlmX2lzX21lc2goc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCXJldHVybiB2aWYtPnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDsKKyNlbmRpZgorCXJldHVybiBmYWxzZTsKK30KKwogLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAtIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBhbiBpbnRlcmZhY2UKICAqCkBAIC03MjUsNiArNjY4LDIxIEBACiB9OwogCiAvKioKKyAqIGVudW0gaWVlZTgwMjExX3RraXBfa2V5X3R5cGUgLSBnZXQgdGtpcCBrZXkKKyAqCisgKiBVc2VkIGJ5IGRyaXZlcnMgd2hpY2ggbmVlZCB0byBnZXQgYSB0a2lwIGtleSBmb3Igc2tiLiBTb21lIGRyaXZlcnMgbmVlZCBhCisgKiBwaGFzZSAxIGtleSwgb3RoZXJzIG5lZWQgYSBwaGFzZSAyIGtleS4gQSBzaW5nbGUgZnVuY3Rpb24gYWxsb3dzIHRoZSBkcml2ZXIKKyAqIHRvIGdldCB0aGUga2V5LCB0aGlzIGVudW0gaW5kaWNhdGVzIHdoYXQgdHlwZSBvZiBrZXkgaXMgcmVxdWlyZWQuCisgKgorICogQElFRUU4MDIxMV9US0lQX1AxX0tFWTogdGhlIGRyaXZlciBuZWVkcyBhIHBoYXNlIDEga2V5CisgKiBASUVFRTgwMjExX1RLSVBfUDJfS0VZOiB0aGUgZHJpdmVyIG5lZWRzIGEgcGhhc2UgMiBrZXkKKyAqLworZW51bSBpZWVlODAyMTFfdGtpcF9rZXlfdHlwZSB7CisJSUVFRTgwMjExX1RLSVBfUDFfS0VZLAorCUlFRUU4MDIxMV9US0lQX1AyX0tFWSwKK307CisKKy8qKgogICogZW51bSBpZWVlODAyMTFfaHdfZmxhZ3MgLSBoYXJkd2FyZSBmbGFncwogICoKICAqIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGluZGljYXRlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0bwpAQCAtNzU3LDE1ICs3MTUsMTkgQEAKICAqCSVJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFIGlzIGFsc28gbm90IHNldCBiZWNhdXNlCiAgKglvdGhlcndpc2UgdGhlIHN0YWNrIHdpbGwgbm90IGtub3cgd2hlbiB0aGUgRFRJTSBiZWFjb24gd2FzIHNlbnQuCiAgKgotICogQElFRUU4MDIxMV9IV19ERUZBVUxUX1JFR19ET01BSU5fQ09ORklHVVJFRDoKLSAqCUNoYW5uZWxzIGFyZSBhbHJlYWR5IGNvbmZpZ3VyZWQgdG8gdGhlIGRlZmF1bHQgcmVndWxhdG9yeSBkb21haW4KLSAqCXNwZWNpZmllZCBpbiB0aGUgZGV2aWNlJ3MgRUVQUk9NCisgKiBASUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEU6CisgKglIYXJkd2FyZSBpcyBub3QgY2FwYWJsZSBvZiBzaG9ydCBzbG90IG9wZXJhdGlvbiBvbiB0aGUgMi40IEdIeiBiYW5kLgorICoKKyAqIEBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEU6CisgKglIYXJkd2FyZSBpcyBub3QgY2FwYWJsZSBvZiByZWNlaXZpbmcgZnJhbWVzIHdpdGggc2hvcnQgcHJlYW1ibGUgb24KKyAqCXRoZSAyLjQgR0h6IGJhbmQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2h3X2ZsYWdzIHsKIAlJRUVFODAyMTFfSFdfSE9TVF9HRU5fQkVBQ09OX1RFTVBMQVRFCQk9IDE8PDAsCiAJSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUwkJCT0gMTw8MSwKIAlJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HCT0gMTw8MiwKLQlJRUVFODAyMTFfSFdfREVGQVVMVF9SRUdfRE9NQUlOX0NPTkZJR1VSRUQJPSAxPDwzLAorCUlFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFCQk9IDE8PDMsCisJSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFCT0gMTw8NCwKIH07CiAKIC8qKgpAQCAtNzc3LDcgKzczOSw4IEBACiAgKiBAd2lwaHk6IFRoaXMgcG9pbnRzIHRvIHRoZSAmc3RydWN0IHdpcGh5IGFsbG9jYXRlZCBmb3IgdGhpcwogICoJODAyLjExIFBIWS4gWW91IG11c3QgZmlsbCBpbiB0aGUgQHBlcm1fYWRkciBhbmQgQGRldgogICoJbWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSB1c2luZyBTRVRfSUVFRTgwMjExX0RFVigpCi0gKglhbmQgU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoKS4KKyAqCWFuZCBTRVRfSUVFRTgwMjExX1BFUk1fQUREUigpLiBBZGRpdGlvbmFsbHksIGFsbCBzdXBwb3J0ZWQKKyAqCWJhbmRzICh3aXRoIGNoYW5uZWxzLCBiaXRyYXRlcykgYXJlIHJlZ2lzdGVyZWQgaGVyZS4KICAqCiAgKiBAY29uZjogJnN0cnVjdCBpZWVlODAyMTFfY29uZiwgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGRvbid0IHVzZS4KICAqCkBAIC04ODgsNiArODUxLDE2IEBACiAgKiBwYXJhbWV0ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCB1bnRpbCBhbm90aGVyIGNhbGwgdG8gc2V0X2tleSgpCiAgKiByZW1vdmVzIGl0LCBidXQgaXQgY2FuIG9ubHkgYmUgdXNlZCBhcyBhIGNvb2tpZSB0byBkaWZmZXJlbnRpYXRlCiAgKiBrZXlzLgorICoKKyAqIEluIFRLSVAgc29tZSBIVyBuZWVkIHRvIGJlIHByb3ZpZGVkIGEgcGhhc2UgMSBrZXksIGZvciBSWCBkZWNyeXB0aW9uCisgKiBhY2NlbGVyYXRpb24gKGkuZS4gaXdsd2lmaSkuIFRob3NlIGRyaXZlcnMgc2hvdWxkIHByb3ZpZGUgdXBkYXRlX3RraXBfa2V5CisgKiBoYW5kbGVyLgorICogVGhlIHVwZGF0ZV90a2lwX2tleSgpIGNhbGwgdXBkYXRlcyB0aGUgZHJpdmVyIHdpdGggdGhlIG5ldyBwaGFzZSAxIGtleS4KKyAqIFRoaXMgaGFwcGVucyBldmVyeXRpbWUgdGhlIGl2MTYgd3JhcHMgYXJvdW5kIChldmVyeSA2NTUzNiBwYWNrZXRzKS4gVGhlCisgKiBzZXRfa2V5KCkgY2FsbCB3aWxsIGhhcHBlbiBvbmx5IG9uY2UgZm9yIGVhY2gga2V5ICh1bmxlc3MgdGhlIEFQIGRpZAorICogcmVrZXlpbmcpLCBpdCB3aWxsIG5vdCBpbmNsdWRlIGEgdmFsaWQgcGhhc2UgMSBrZXkuIFRoZSB2YWxpZCBwaGFzZSAxIGtleSBpcworICogcHJvdmlkZWQgYnkgdWRwYXRlX3RraXBfa2V5IG9ubHkuIFRoZSB0cmlnZ2VyIHRoYXQgbWFrZXMgbWFjODAyMTEgY2FsbCB0aGlzCisgKiBoYW5kbGVyIGlzIHNvZnR3YXJlIGRlY3J5cHRpb24gd2l0aCB3cmFwIGFyb3VuZCBvZiBpdjE2LgogICovCiAKIC8qKgpAQCAtOTEzLDggKzg4NiwxOCBAQAogICogcGFyYW1ldGVyIHRvIHNlZSB3aGV0aGVyIG11bHRpY2FzdCBmcmFtZXMgc2hvdWxkIGJlIGFjY2VwdGVkCiAgKiBvciBkcm9wcGVkLgogICoKLSAqIEFsbCB1bnN1cHBvcnRlZCBmbGFncyBpbiBAdG90YWxfZmxhZ3MgbXVzdCBiZSBjbGVhcmVkLCBpLmUuIHlvdQotICogc2hvdWxkIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCB0aG9zZSB5b3UgaG9ub3VyZWQuCisgKiBBbGwgdW5zdXBwb3J0ZWQgZmxhZ3MgaW4gQHRvdGFsX2ZsYWdzIG11c3QgYmUgY2xlYXJlZC4KKyAqIEhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgYSBmbGFnIGlmIGl0IGlzIGluY2FwYWJsZSBvZiBfcGFzc2luZ18KKyAqIHRoZSBmcmFtZSB0byB0aGUgc3RhY2suIE90aGVyd2lzZSB0aGUgZHJpdmVyIG11c3QgaWdub3JlCisgKiB0aGUgZmxhZywgYnV0IG5vdCBjbGVhciBpdC4KKyAqIFlvdSBtdXN0IF9vbmx5XyBjbGVhciB0aGUgZmxhZyAoYW5ub3VuY2Ugbm8gc3VwcG9ydCBmb3IgdGhlCisgKiBmbGFnIHRvIG1hYzgwMjExKSBpZiB5b3UgYXJlIG5vdCBhYmxlIHRvIHBhc3MgdGhlIHBhY2tldCB0eXBlCisgKiB0byB0aGUgc3RhY2sgKHNvIHRoZSBoYXJkd2FyZSBhbHdheXMgZmlsdGVycyBpdCkuCisgKiBTbyBmb3IgZXhhbXBsZSwgeW91IHNob3VsZCBjbGVhciBARklGX0NPTlRST0wsIGlmIHlvdXIgaGFyZHdhcmUKKyAqIGFsd2F5cyBmaWx0ZXJzIGNvbnRyb2wgZnJhbWVzLiBJZiB5b3VyIGhhcmR3YXJlIGFsd2F5cyBwYXNzZXMKKyAqIGNvbnRyb2wgZnJhbWVzIHRvIHRoZSBrZXJuZWwgYW5kIGlzIGluY2FwYWJsZSBvZiBmaWx0ZXJpbmcgdGhlbSwKKyAqIHlvdSBkbyBfbm90XyBjbGVhciB0aGUgQEZJRl9DT05UUk9MIGZsYWcuCisgKiBUaGlzIHJ1bGUgYXBwbGllcyB0byBhbGwgb3RoZXIgRklGIGZsYWdzIGFzIHdlbGwuCiAgKi8KIAogLyoqCkBAIC05NjcsMTAgKzk1MCwxNCBAQAogICogJnN0cnVjdCBpZWVlODAyMTFfb3BzIHRvIGluZGljYXRlIHdoaWNoIGFjdGlvbiBpcyBuZWVkZWQuCiAgKiBASUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOiBzdGFydCBSeCBhZ2dyZWdhdGlvbgogICogQElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOiBzdG9wIFJ4IGFnZ3JlZ2F0aW9uCisgKiBASUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOiBzdGFydCBUeCBhZ2dyZWdhdGlvbgorICogQElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOiBzdG9wIFR4IGFnZ3JlZ2F0aW9uCiAgKi8KIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIHsKIAlJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCiAJSUVFRTgwMjExX0FNUERVX1JYX1NUT1AsCisJSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAorCUlFRUU4MDIxMV9BTVBEVV9UWF9TVE9QLAogfTsKIAogLyoqCkBAIC0xMDMzLDggKzEwMjAsNyBAQAogICoJbGV2ZWwgZHJpdmVyIChlLmcuIGFzc29jL2Rpc2Fzc29jIHN0YXR1cywgZXJwIHBhcmFtZXRlcnMpLgogICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgaWYgbm8gQlNTIGhhcyBiZWVuIHNldCwgdW5sZXNzCiAgKglmb3IgYXNzb2NpYXRpb24gaW5kaWNhdGlvbi4gVGhlIEBjaGFuZ2VkIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hpY2gKLSAqCW9mIHRoZSBic3MgcGFyYW1ldGVycyBoYXMgY2hhbmdlZCB3aGVuIGEgY2FsbCBpcyBtYWRlLiBUaGlzIGNhbGxiYWNrCi0gKgloYXMgdG8gYmUgYXRvbWljLgorICoJb2YgdGhlIGJzcyBwYXJhbWV0ZXJzIGhhcyBjaGFuZ2VkIHdoZW4gYSBjYWxsIGlzIG1hZGUuCiAgKgogICogQGNvbmZpZ3VyZV9maWx0ZXI6IENvbmZpZ3VyZSB0aGUgZGV2aWNlJ3MgUlggZmlsdGVyLgogICoJU2VlIHRoZSBzZWN0aW9uICJGcmFtZSBmaWx0ZXJpbmciIGZvciBtb3JlIGluZm9ybWF0aW9uLgpAQCAtMTA1MCw4ICsxMDM2LDE0IEBACiAgKglhbmQgcmVtb3ZlX2ludGVyZmFjZSBjYWxscywgaS5lLiB3aGlsZSB0aGUgaW50ZXJmYWNlIHdpdGggdGhlCiAgKglnaXZlbiBsb2NhbF9hZGRyZXNzIGlzIGVuYWJsZWQuCiAgKgorICogQHVwZGF0ZV90a2lwX2tleTogU2VlIHRoZSBzZWN0aW9uICJIYXJkd2FyZSBjcnlwdG8gYWNjZWxlcmF0aW9uIgorICogCVRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgUnguIENhbGxlZCBmb3IgZHJpdmVycworICogCXdoaWNoIHNldCBJRUVFODAyMTFfS0VZX0ZMQUdfVEtJUF9SRVFfUlhfUDFfS0VZLgorICoKICAqIEBod19zY2FuOiBBc2sgdGhlIGhhcmR3YXJlIHRvIHNlcnZpY2UgdGhlIHNjYW4gcmVxdWVzdCwgbm8gbmVlZCB0byBzdGFydAotICoJdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBpbiBzdGFjay4KKyAqCXRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgaW4gc3RhY2suIFRoZSBzY2FuIG11c3QgaG9ub3VyIHRoZSBjaGFubmVsCisgKgljb25maWd1cmF0aW9uIGRvbmUgYnkgdGhlIHJlZ3VsYXRvcnkgYWdlbnQgaW4gdGhlIHdpcGh5J3MgcmVnaXN0ZXJlZAorICoJYmFuZHMuCiAgKgogICogQGdldF9zdGF0czogcmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzCiAgKgpAQCAtMTExMSw3ICsxMTAzLDggQEAKICAqIAlUaGUgUkEvVElEIGNvbWJpbmF0aW9uIGRldGVybWluZXMgdGhlIGRlc3RpbmF0aW9uIGFuZCBUSUQgd2Ugd2FudAogICogCXRoZSBhbXBkdSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGZvci4gVGhlIGFjdGlvbiBpcyBkZWZpbmVkIHRocm91Z2gKICAqIAlpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24uIFN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciAoQHNzbikKLSAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4KKyAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4gbm90aWNlCisgKiAJdGhhdCBUWC9SWF9TVE9QIGNhbiBwYXNzIE5VTEwgZm9yIHRoaXMgcGFyYW1ldGVyLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyB7CiAJaW50ICgqdHgpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTEzOCw2ICsxMTMxLDkgQEAKIAlpbnQgKCpzZXRfa2V5KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCiAJCSAgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOworCXZvaWQgKCp1cGRhdGVfdGtpcF9rZXkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqY29uZiwgY29uc3QgdTggKmFkZHJlc3MsCisJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpOwogCWludCAoKmh3X3NjYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3NpZCwgc2l6ZV90IGxlbik7CiAJaW50ICgqZ2V0X3N0YXRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwpAQCAtMTE1OSwxMCArMTE1NSw5IEBACiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCk7CiAJaW50ICgqdHhfbGFzdF9iZWFjb24pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLQlpbnQgKCpjb25mX2h0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKTsKIAlpbnQgKCphbXBkdV9hY3Rpb24pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKLQkJCSAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pOworCQkJICAgIGNvbnN0IHU4ICphZGRyLCB1MTYgdGlkLCB1MTYgKnNzbik7CiB9OwogCiAvKioKQEAgLTExODMsOCArMTE3OCw5IEBACiAvKioKICAqIGllZWU4MDIxMV9yZWdpc3Rlcl9odyAtIFJlZ2lzdGVyIGhhcmR3YXJlIGRldmljZQogICoKLSAqIFlvdSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9ucwotICogZXhjZXB0IGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUuCisgKiBZb3UgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4KKyAqIG1hYzgwMjExLiBOb3RlIHRoYXQgYmVmb3JlIGEgaGFyZHdhcmUgY2FuIGJlIHJlZ2lzdGVyZWQsIHlvdQorICogbmVlZCB0byBmaWxsIHRoZSBjb250YWluZWQgd2lwaHkncyBpbmZvcm1hdGlvbi4KICAqCiAgKiBAaHc6IHRoZSBkZXZpY2UgdG8gcmVnaXN0ZXIgYXMgcmV0dXJuZWQgYnkgaWVlZTgwMjExX2FsbG9jX2h3KCkKICAqLwpAQCAtMTI3MiwxMCArMTI2OCw2IEBACiAjZW5kaWYKIH0KIAotLyogUmVnaXN0ZXIgYSBuZXcgaGFyZHdhcmUgUEhZTU9ERSBjYXBhYmlsaXR5IHRvIHRoZSBzdGFjay4gKi8KLWludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlKTsKLQogLyoqCiAgKiBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyAtIFVucmVnaXN0ZXIgYSBoYXJkd2FyZSBkZXZpY2UKICAqCkBAIC0xMzA4LDcgKzEzMDAsMTAgQEAKICAqIGJ1ZmZlciBpbiBAc2tiIG11c3Qgc3RhcnQgd2l0aCBhbiBJRUVFIDgwMi4xMSBoZWFkZXIgb3IgYSByYWRpb3RhcAogICogaGVhZGVyIGlmICVSWF9GTEFHX1JBRElPVEFQIGlzIHNldCBpbiB0aGUgQHN0YXR1cyBmbGFncy4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgY2FsbGVkIGluIElSUSBjb250ZXh0LgorICogVGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGNhbGxlZCBpbiBJUlEgY29udGV4dC4gQ2FsbHMgdG8gdGhpcyBmdW5jdGlvbgorICogZm9yIGEgc2luZ2xlIGhhcmR3YXJlIG11c3QgYmUgc3luY2hyb25pemVkIGFnYWluc3QgZWFjaCBvdGhlci4gQ2FsbHMKKyAqIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGllZWU4MDIxMV9yeF9pcnFzYWZlKCkgbWF5IG5vdCBiZSBtaXhlZCBmb3IgYQorICogc2luZ2xlIGhhcmR3YXJlLgogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKQEAgLTEzMjUsNyArMTMyMCwxMCBAQAogICogaWVlZTgwMjExX3J4X2lycXNhZmUgLSByZWNlaXZlIGZyYW1lCiAgKgogICogTGlrZSBpZWVlODAyMTFfcngoKSBidXQgY2FuIGJlIGNhbGxlZCBpbiBJUlEgY29udGV4dAotICogKGludGVybmFsbHkgZGVmZXJzIHRvIGEgd29ya3F1ZXVlLikKKyAqIChpbnRlcm5hbGx5IGRlZmVycyB0byBhIHRhc2tsZXQuKQorICoKKyAqIENhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGllZWU4MDIxMV9yeCgpIG1heSBub3QgYmUgbWl4ZWQgZm9yIGEKKyAqIHNpbmdsZSBoYXJkd2FyZS4KICAqCiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb24KICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCkBAIC0xMzQ0LDYgKzEzNDIsMTEgQEAKICAqIHRyYW5zbWl0dGVkLiBJdCBpcyBwZXJtaXNzaWJsZSB0byBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvcgogICogbXVsdGljYXN0IGZyYW1lcyBidXQgdGhpcyBjYW4gYWZmZWN0IHN0YXRpc3RpY3MuCiAgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGNhbGxlZCBpbiBJUlEgY29udGV4dC4gQ2FsbHMgdG8gdGhpcyBmdW5jdGlvbgorICogZm9yIGEgc2luZ2xlIGhhcmR3YXJlIG11c3QgYmUgc3luY2hyb25pemVkIGFnYWluc3QgZWFjaCBvdGhlci4gQ2FsbHMKKyAqIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSgpIG1heSBub3QgYmUgbWl4ZWQKKyAqIGZvciBhIHNpbmdsZSBoYXJkd2FyZS4KKyAqCiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGUgZnJhbWUgd2FzIHRyYW5zbWl0dGVkIGJ5CiAgKiBAc2tiOiB0aGUgZnJhbWUgdGhhdCB3YXMgdHJhbnNtaXR0ZWQsIG93bmVkIGJ5IG1hYzgwMjExIGFmdGVyIHRoaXMgY2FsbAogICogQHN0YXR1czogc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGlzIGZyYW1lOyB0aGUgc3RhdHVzIHBvaW50ZXIgbmVlZCBub3QKQEAgLTEzNTMsNiArMTM1NiwyMiBAQAogdm9pZCBpZWVlODAyMTFfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnN0YXR1cyk7CisKKy8qKgorICogaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlIC0gaXJxLXNhZmUgdHJhbnNtaXQgc3RhdHVzIGNhbGxiYWNrCisgKgorICogTGlrZSBpZWVlODAyMTFfdHhfc3RhdHVzKCkgYnV0IGNhbiBiZSBjYWxsZWQgaW4gSVJRIGNvbnRleHQKKyAqIChpbnRlcm5hbGx5IGRlZmVycyB0byBhIHRhc2tsZXQuKQorICoKKyAqIENhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGllZWU4MDIxMV90eF9zdGF0dXMoKSBtYXkgbm90IGJlIG1peGVkIGZvciBhCisgKiBzaW5nbGUgaGFyZHdhcmUuCisgKgorICogQGh3OiB0aGUgaGFyZHdhcmUgdGhlIGZyYW1lIHdhcyB0cmFuc21pdHRlZCBieQorICogQHNrYjogdGhlIGZyYW1lIHRoYXQgd2FzIHRyYW5zbWl0dGVkLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKKyAqIEBzdGF0dXM6IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBmcmFtZTsgdGhlIHN0YXR1cyBwb2ludGVyIG5lZWQgbm90CisgKgliZSB2YWxpZCBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW5kIGlzIG5vdCBmcmVlZCBieSBtYWM4MDIxMSwKKyAqCWl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaXQgcG9pbnRzIHRvIGEgc3RhY2sgYXJlYQorICovCiB2b2lkIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnN0YXR1cyk7CkBAIC0xNDQ5LDcgKzE0NjgsNyBAQAogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCiAgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KICAqIEBmcmFtZV9sZW46IHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lLgotICogQHJhdGU6IHRoZSByYXRlIChpbiAxMDBrYnBzKSBhdCB3aGljaCB0aGUgZnJhbWUgaXMgZ29pbmcgdG8gYmUgdHJhbnNtaXR0ZWQuCisgKiBAcmF0ZTogdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZyYW1lIGlzIGdvaW5nIHRvIGJlIHRyYW5zbWl0dGVkLgogICoKICAqIENhbGN1bGF0ZSB0aGUgZHVyYXRpb24gZmllbGQgb2Ygc29tZSBnZW5lcmljIGZyYW1lLCBnaXZlbiBpdHMKICAqIGxlbmd0aCBhbmQgdHJhbnNtaXNzaW9uIHJhdGUgKGluIDEwMGticHMpLgpAQCAtMTQ1Nyw3ICsxNDc2LDcgQEAKIF9fbGUxNiBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkJc2l6ZV90IGZyYW1lX2xlbiwKLQkJCQkJaW50IHJhdGUpOworCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpOwogCiAvKioKICAqIGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMgLSBhY2Nlc3NpbmcgYnVmZmVyZWQgYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgZnJhbWVzCkBAIC0xNTA3LDYgKzE1MjYsMjEgQEAKIGludCBpZWVlODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpOwogCiAvKioKKyAqIGllZWU4MDIxMV9nZXRfdGtpcF9rZXkgLSBnZXQgYSBUS0lQIHJjNCBmb3Igc2tiCisgKgorICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyBhIFRLSVAgcmM0IGtleSBmb3IgYW4gc2tiLiBJdCBjb21wdXRlcworICogYSBwaGFzZSAxIGtleSBpZiBuZWVkZWQgKGl2MTYgd3JhcHMgYXJvdW5kKS4gVGhpcyBmdW5jdGlvbiBpcyB0bworICogYmUgdXNlZCBieSBkcml2ZXJzIHdoaWNoIGNhbiBkbyBIVyBlbmNyeXB0aW9uIGJ1dCBuZWVkIHRvIGNvbXB1dGUKKyAqIHRvIHBoYXNlIDEvMiBrZXkgaW4gU1cuCisgKgorICogQGtleWNvbmY6IHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHdpdGggdGhlIHNldCBrZXkKKyAqIEBza2I6IHRoZSBza2IgZm9yIHdoaWNoIHRoZSBrZXkgaXMgbmVlZGVkCisgKiBAcmM0a2V5OiBhIGJ1ZmZlciB0byB3aGljaCB0aGUga2V5IHdpbGwgYmUgd3JpdHRlbgorICovCit2b2lkIGllZWU4MDIxMV9nZXRfdGtpcF9rZXkoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCWVudW0gaWVlZTgwMjExX3RraXBfa2V5X3R5cGUgdHlwZSwgdTggKmtleSk7CisvKioKICAqIGllZWU4MDIxMV93YWtlX3F1ZXVlIC0gd2FrZSBzcGVjaWZpYyBxdWV1ZQogICogQGh3OiBwb2ludGVyIGFzIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCiAgKiBAcXVldWU6IHF1ZXVlIG51bWJlciAoY291bnRlZCBmcm9tIHplcm8pLgpAQCAtMTU3NCw0ICsxNjA4LDkyIEBACiAJCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKSwKIAkJCQkJIHZvaWQgKmRhdGEpOwogCisvKioKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uIC0gU3RhcnQgYSB0eCBCbG9jayBBY2sgc2Vzc2lvbi4KKyAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgorICogQHJhOiByZWNlaXZlciBhZGRyZXNzIG9mIHRoZSBCQSBzZXNzaW9uIHJlY2lwaWVudAorICogQHRpZDogdGhlIFRJRCB0byBCQSBvbi4KKyAqIEByZXR1cm46IHN1Y2Nlc3MgaWYgYWRkQkEgcmVxdWVzdCB3YXMgc2VudCwgZmFpbHVyZSBvdGhlcndpc2UKKyAqCisgKiBBbHRob3VnaCBtYWM4MDIxMS9sb3cgbGV2ZWwgZHJpdmVyL3VzZXIgc3BhY2UgYXBwbGljYXRpb24gY2FuIGVzdGltYXRlCisgKiB0aGUgbmVlZCB0byBzdGFydCBhZ2dyZWdhdGlvbiBvbiBhIGNlcnRhaW4gUkEvVElELCB0aGUgc2Vzc2lvbiBsZXZlbAorICogd2lsbCBiZSBtYW5hZ2VkIGJ5IHRoZSBtYWM4MDIxMS4KKyAqLworaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpOworCisvKioKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYiAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gYWdncmVnYXRlLgorICogQGh3OiBwb2ludGVyIGFzIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCisgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgorICogQHRpZDogdGhlIFRJRCB0byBCQSBvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IGxvdyBsZXZlbCBkcml2ZXIgb25jZSBpdCBoYXMKKyAqIGZpbmlzaGVkIHdpdGggcHJlcGFyYXRpb25zIGZvciB0aGUgQkEgc2Vzc2lvbi4KKyAqLwordm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCk7CisKKy8qKgorICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUgLSBsb3cgbGV2ZWwgZHJpdmVyIHJlYWR5IHRvIGFnZ3JlZ2F0ZS4KKyAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgorICogQHJhOiByZWNlaXZlciBhZGRyZXNzIG9mIHRoZSBCQSBzZXNzaW9uIHJlY2lwaWVudC4KKyAqIEB0aWQ6IHRoZSBUSUQgdG8gQkEgb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSBsb3cgbGV2ZWwgZHJpdmVyIG9uY2UgaXQgaGFzCisgKiBmaW5pc2hlZCB3aXRoIHByZXBhcmF0aW9ucyBmb3IgdGhlIEJBIHNlc3Npb24uCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGlzIGlycSBzYWZlLgorICovCit2b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqcmEsCisJCQkJICAgICAgdTE2IHRpZCk7CisKKy8qKgorICogaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbiAtIFN0b3AgYSBCbG9jayBBY2sgc2Vzc2lvbi4KKyAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgorICogQHJhOiByZWNlaXZlciBhZGRyZXNzIG9mIHRoZSBCQSBzZXNzaW9uIHJlY2lwaWVudAorICogQHRpZDogdGhlIFRJRCB0byBzdG9wIEJBLgorICogQGluaXRpYXRvcjogaWYgaW5kaWNhdGVzIGluaXRpYXRvciBERUxCQSBmcmFtZSB3aWxsIGJlIHNlbnQuCisgKiBAcmV0dXJuOiBlcnJvciBpZiBubyBzdGEgd2l0aCBtYXRjaGluZyBkYSBmb3VuZCwgc3VjY2VzcyBvdGhlcndpc2UKKyAqCisgKiBBbHRob3VnaCBtYWM4MDIxMS9sb3cgbGV2ZWwgZHJpdmVyL3VzZXIgc3BhY2UgYXBwbGljYXRpb24gY2FuIGVzdGltYXRlCisgKiB0aGUgbmVlZCB0byBzdG9wIGFnZ3JlZ2F0aW9uIG9uIGEgY2VydGFpbiBSQS9USUQsIHRoZSBzZXNzaW9uIGxldmVsCisgKiB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIG1hYzgwMjExLgorICovCitpbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgdTggKnJhLCB1MTYgdGlkLAorCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKTsKKworLyoqCisgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9jYiAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gc3RvcCBhZ2dyZWdhdGUuCisgKiBAaHc6IHBvaW50ZXIgYXMgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KKyAqIEByYTogcmVjZWl2ZXIgYWRkcmVzcyBvZiB0aGUgQkEgc2Vzc2lvbiByZWNpcGllbnQuCisgKiBAdGlkOiB0aGUgZGVzaXJlZCBUSUQgdG8gQkEgb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSBsb3cgbGV2ZWwgZHJpdmVyIG9uY2UgaXQgaGFzCisgKiBmaW5pc2hlZCB3aXRoIHByZXBhcmF0aW9ucyBmb3IgdGhlIEJBIHNlc3Npb24gdGVhciBkb3duLgorICovCit2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHU4IHRpZCk7CisKKy8qKgorICogaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gc3RvcCBhZ2dyZWdhdGUuCisgKiBAaHc6IHBvaW50ZXIgYXMgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KKyAqIEByYTogcmVjZWl2ZXIgYWRkcmVzcyBvZiB0aGUgQkEgc2Vzc2lvbiByZWNpcGllbnQuCisgKiBAdGlkOiB0aGUgZGVzaXJlZCBUSUQgdG8gQkEgb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSBsb3cgbGV2ZWwgZHJpdmVyIG9uY2UgaXQgaGFzCisgKiBmaW5pc2hlZCB3aXRoIHByZXBhcmF0aW9ucyBmb3IgdGhlIEJBIHNlc3Npb24gdGVhciBkb3duLgorICogVGhpcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBpcyBpcnEgc2FmZS4KKyAqLwordm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqcmEsCisJCQkJICAgICB1MTYgdGlkKTsKKworLyoqCisgKiBpZWVlODAyMTFfbm90aWZ5X21hYyAtIGxvdyBsZXZlbCBkcml2ZXIgbm90aWZpY2F0aW9uCisgKiBAaHc6IHBvaW50ZXIgYXMgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KKyAqIEBub3RpZmljYXRpb25fdHlwZXM6IGVudW0gaWVlZTgwMjExX25vdGlmaWNhdGlvbl90eXBlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgbG93IGxldmVsIGRyaXZlciB0byBpbmZvcm0gbWFjODAyMTEgb2YKKyAqIGxvdyBsZXZlbCBkcml2ZXIgc3RhdHVzIGNoYW5nZSBvciBmb3JjZSBtYWM4MDIxMSB0byByZS1hc3NvYyBmb3IgbG93CisgKiBsZXZlbCBkcml2ZXIgaW50ZXJuYWwgZXJyb3IgdGhhdCByZXF1aXJlIHJlLWFzc29jLgorICovCit2b2lkIGllZWU4MDIxMV9ub3RpZnlfbWFjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICBlbnVtIGllZWU4MDIxMV9ub3RpZmljYXRpb25fdHlwZXMgIG5vdGlmX3R5cGUpOwogI2VuZGlmIC8qIE1BQzgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21pcDYuaCBiL2luY2x1ZGUvbmV0L21pcDYuaAppbmRleCA2MzI3MjYxLi5hODNhZDE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9taXA2LmgKKysrIGIvaW5jbHVkZS9uZXQvbWlwNi5oCkBAIC0yOCw5ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAotI2RlZmluZSBNSVA2X09QVF9QQURfMQkwCi0jZGVmaW5lIE1JUDZfT1BUX1BBRF9OCTEKLQogLyoKICAqIE1vYmlsaXR5IEhlYWRlcgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaAppbmRleCA1OWI3MDYyLi45YzQ1MWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTEyLDYgKzEyLDE1IEBACiAjZGVmaW5lIE5ESVNDX1JFRElSRUNUCQkJMTM3CiAKIC8qCisgKiBSb3V0ZXIgdHlwZTogY3Jvc3MtbGF5ZXIgaW5mb3JtYXRpb24gZnJvbSBsaW5rLWxheWVyIHRvCisgKiBJUHY2IGxheWVyIHJlcG9ydGVkIGJ5IGNlcnRhaW4gbGluayB0eXBlcyAoZS5nLiwgUkZDNDIxNCkuCisgKi8KKyNkZWZpbmUgTkRJU0NfTk9ERVRZUEVfVU5TUEVDCQkwCS8qIHVuc3BlY2lmaWVkIChkZWZhdWx0KSAqLworI2RlZmluZSBORElTQ19OT0RFVFlQRV9IT1NUCQkxCS8qIGhvc3Qgb3IgdW5hdXRob3JpemVkIHJvdXRlciAqLworI2RlZmluZSBORElTQ19OT0RFVFlQRV9OT0RFRkFVTFQJMgkvKiBub24tZGVmYXVsdCByb3V0ZXIgKi8KKyNkZWZpbmUgTkRJU0NfTk9ERVRZUEVfREVGQVVMVAkJMwkvKiBkZWZhdWx0IHJvdXRlciAqLworCisvKgogICoJbmRpc2Mgb3B0aW9ucwogICovCiAKQEAgLTc3LDcgKzg2LDcgQEAKIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwogCiAKLWV4dGVybiBpbnQJCQluZGlzY19pbml0KHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpOworZXh0ZXJuIGludAkJCW5kaXNjX2luaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkCQkJbmRpc2NfY2xlYW51cCh2b2lkKTsKIApAQCAtODUsMjAgKzk0LDE3IEBACiAKIGV4dGVybiB2b2lkCQkJbmRpc2Nfc2VuZF9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKLQkJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICpzb2xpY2l0LAotCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzb2xpY2l0LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKIAogZXh0ZXJuIHZvaWQJCQluZGlzY19zZW5kX3JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpOwotCi1leHRlcm4gdm9pZAkJCW5kaXNjX2ZvcndhcmRpbmdfb24odm9pZCk7Ci1leHRlcm4gdm9pZAkJCW5kaXNjX2ZvcndhcmRpbmdfb2ZmKHZvaWQpOworCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKTsKIAogZXh0ZXJuIHZvaWQJCQluZGlzY19zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCi0JCQkJCQkgICAgc3RydWN0IGluNl9hZGRyICp0YXJnZXQpOworCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KTsKIAogZXh0ZXJuIGludAkJCW5kaXNjX21jX21hcChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcik7CiAKQEAgLTEwNyw3ICsxMTMsNyBAQAogLyoKICAqCUlHTVAKICAqLwotZXh0ZXJuIGludAkJCWlnbXA2X2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcyk7CitleHRlcm4gaW50CQkJaWdtcDZfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQJCQlpZ21wNl9jbGVhbnVwKHZvaWQpOwogCkBAIC0xMTUsNyArMTIxLDYgQEAKIAogZXh0ZXJuIGludAkJCWlnbXA2X2V2ZW50X3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotZXh0ZXJuIHZvaWQJCQlpZ21wNl9jbGVhbnVwKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogZXh0ZXJuIGludCAJCQluZGlzY19pZmluZm9fc3lzY3RsX2NoYW5nZShzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsCkBAIC0xMjksNyArMTM0LDcgQEAKIGV4dGVybiB2b2lkIAkJCWluZXQ2X2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LAogCQkJCQkJICAgIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaGJvdXIgKiBuZGlzY19nZXRfbmVpZ2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hib3VyICogbmRpc2NfZ2V0X25laWdoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAogCWlmIChkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCmluZGV4IGViYmZiNTAuLmRjNDIwZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCkBAIC0zOCw3ICszOCw5IEBACiAKIHN0cnVjdCBuZWlnaF9wYXJtcwogeworI2lmZGVmIENPTkZJR19ORVRfTlMKIAlzdHJ1Y3QgbmV0ICpuZXQ7CisjZW5kaWYKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBuZWlnaF9wYXJtcyAqbmV4dDsKIAlpbnQJKCpuZWlnaF9zZXR1cCkoc3RydWN0IG5laWdoYm91ciAqKTsKQEAgLTEzMSw3ICsxMzMsOSBAQAogc3RydWN0IHBuZWlnaF9lbnRyeQogewogCXN0cnVjdCBwbmVpZ2hfZW50cnkJKm5leHQ7CisjaWZkZWYgQ09ORklHX05FVF9OUwogCXN0cnVjdCBuZXQJCSpuZXQ7CisjZW5kaWYKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCXU4CQkJZmxhZ3M7CiAJdTgJCQlrZXlbMF07CkBAIC0yMTMsMTMgKzIxNywzOCBAQAogCiBleHRlcm4gc3RydWN0IG5laWdoX3Bhcm1zCSpuZWlnaF9wYXJtc19hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCk7CiBleHRlcm4gdm9pZAkJCW5laWdoX3Bhcm1zX3JlbGVhc2Uoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXMpOworCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgbmV0CQkJKm5laWdoX3Bhcm1zX25ldChjb25zdCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnBhcm1zKQoreworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlyZXR1cm4gcGFybXMtPm5ldDsKKyNlbHNlCisJcmV0dXJuICZpbml0X25ldDsKKyNlbmRpZgorfQorCiBleHRlcm4gdW5zaWduZWQgbG9uZwkJbmVpZ2hfcmFuZF9yZWFjaF90aW1lKHVuc2lnbmVkIGxvbmcgYmFzZSk7CiAKIGV4dGVybiB2b2lkCQkJcG5laWdoX2VucXVldWUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZWlnaF9wYXJtcyAqcCwKIAkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHN0cnVjdCBwbmVpZ2hfZW50cnkJKnBuZWlnaF9sb29rdXAoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCAqa2V5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY3JlYXQpOworZXh0ZXJuIHN0cnVjdCBwbmVpZ2hfZW50cnkJKl9fcG5laWdoX2xvb2t1cChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwKKwkJCQkJCSBzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgY29uc3Qgdm9pZCAqa2V5LAorCQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludAkJCXBuZWlnaF9kZWxldGUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCAqa2V5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAorc3RhdGljIGlubGluZQorc3RydWN0IG5ldAkJCSpwbmVpZ2hfbmV0KGNvbnN0IHN0cnVjdCBwbmVpZ2hfZW50cnkgKnBuZWlnaCkKK3sKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJcmV0dXJuIHBuZWlnaC0+bmV0OworI2Vsc2UKKwlyZXR1cm4gJmluaXRfbmV0OworI2VuZGlmCit9CisKIGV4dGVybiB2b2lkIG5laWdoX2FwcF9ucyhzdHJ1Y3QgbmVpZ2hib3VyICpuKTsKIGV4dGVybiB2b2lkIG5laWdoX2Zvcl9lYWNoKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCB2b2lkICgqY2IpKHN0cnVjdCBuZWlnaGJvdXIgKiwgdm9pZCAqKSwgdm9pZCAqY29va2llKTsKIGV4dGVybiB2b2lkIF9fbmVpZ2hfZm9yX2VhY2hfcmVsZWFzZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgaW50ICgqY2IpKHN0cnVjdCBuZWlnaGJvdXIgKikpOwpAQCAtMjg0LDEyICszMTMsNiBAQAogCQluZWlnaC0+Y29uZmlybWVkID0gamlmZmllczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaXNfY29ubmVjdGVkKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKQotewotCXJldHVybiBuZWlnaC0+bnVkX3N0YXRlJk5VRF9DT05ORUNURUQ7Ci19Ci0KLQogc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfZXZlbnRfc2VuZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAluZWlnaC0+dXNlZCA9IGppZmZpZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggMjg3MzhiNy4uYWE1NDBlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtOCwzMCArOCwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorI2luY2x1ZGUgPG5ldC9uZXRucy9jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL3VuaXguaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvcGFja2V0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2lwdjQuaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9kY2NwLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL3hfdGFibGVzLmg+CiAKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeTsKIHN0cnVjdCBuZXRfZGV2aWNlOwogc3RydWN0IHNvY2s7CiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjsKK3N0cnVjdCBuZXRfZ2VuZXJpYzsKIAogc3RydWN0IG5ldCB7CiAJYXRvbWljX3QJCWNvdW50OwkJLyogVG8gZGVjaWRlZCB3aGVuIHRoZSBuZXR3b3JrCiAJCQkJCQkgKiAgbmFtZXNwYWNlIHNob3VsZCBiZSBmcmVlZC4KIAkJCQkJCSAqLworI2lmZGVmIE5FVE5TX1JFRkNOVF9ERUJVRwogCWF0b21pY190CQl1c2VfY291bnQ7CS8qIFRvIHRyYWNrIHJlZmVyZW5jZXMgd2UKIAkJCQkJCSAqIGRlc3Ryb3kgb24gZGVtYW5kCiAJCQkJCQkgKi8KKyNlbmRpZgogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsJCS8qIGxpc3Qgb2YgbmV0d29yayBuYW1lc3BhY2VzICovCiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CQkvKiB3b3JrIHN0cnVjdCBmb3IgZnJlZWluZyAqLwogCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5IAkqcHJvY19uZXQ7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5IAkqcHJvY19uZXRfc3RhdDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgCSpwcm9jX25ldF9yb290OwogCiAJc3RydWN0IGxpc3RfaGVhZAlzeXNjdGxfdGFibGVfaGVhZGVyczsKIApAQCAtNDcsNDAgKzUxLDQ2IEBACiAKIAlzdHJ1Y3Qgc29jayAJCSpydG5sOwkJCS8qIHJ0bmV0bGluayBzb2NrZXQgKi8KIAotCS8qIGNvcmUgc3lzY3RscyAqLwotCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSpzeXNjdGxfY29yZV9oZHI7Ci0JaW50CQkJc3lzY3RsX3NvbWF4Y29ubjsKLQorCXN0cnVjdCBuZXRuc19jb3JlCWNvcmU7CiAJc3RydWN0IG5ldG5zX3BhY2tldAlwYWNrZXQ7CiAJc3RydWN0IG5ldG5zX3VuaXgJdW54OwogCXN0cnVjdCBuZXRuc19pcHY0CWlwdjQ7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAJc3RydWN0IG5ldG5zX2lwdjYJaXB2NjsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0lQX0RDQ1ApIHx8IGRlZmluZWQoQ09ORklHX0lQX0RDQ1BfTU9EVUxFKQorCXN0cnVjdCBuZXRuc19kY2NwCWRjY3A7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAJc3RydWN0IG5ldG5zX3h0CQl4dDsKICNlbmRpZgorCXN0cnVjdCBuZXRfZ2VuZXJpYwkqZ2VuOwogfTsKIAotI2lmZGVmIENPTkZJR19ORVQKKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlX25ldC5oPgorCiAvKiBJbml0J3MgbmV0d29yayBuYW1lc3BhY2UgKi8KIGV4dGVybiBzdHJ1Y3QgbmV0IGluaXRfbmV0OwotI2RlZmluZSBJTklUX05FVF9OUyhuZXRfbnMpIC5uZXRfbnMgPSAmaW5pdF9uZXQsCi0jZWxzZQotI2RlZmluZSBJTklUX05FVF9OUyhuZXRfbnMpCi0jZW5kaWYKLQotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbmV0X25hbWVzcGFjZV9saXN0OwogCiAjaWZkZWYgQ09ORklHX05FVAorI2RlZmluZSBJTklUX05FVF9OUyhuZXRfbnMpIC5uZXRfbnMgPSAmaW5pdF9uZXQsCisKIGV4dGVybiBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgbmV0ICpuZXRfbnMpOwotI2Vsc2UKKworI2Vsc2UgLyogQ09ORklHX05FVCAqLworCisjZGVmaW5lIElOSVRfTkVUX05TKG5ldF9ucykKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgbmV0ICpuZXRfbnMpCiB7CiAJLyogVGhlcmUgaXMgbm90aGluZyB0byBjb3B5IHNvIHRoaXMgaXMgYSBub29wICovCiAJcmV0dXJuIG5ldF9uczsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19ORVQgKi8KKworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBuZXRfbmFtZXNwYWNlX2xpc3Q7CiAKICNpZmRlZiBDT05GSUdfTkVUX05TCiBleHRlcm4gdm9pZCBfX3B1dF9uZXQoc3RydWN0IG5ldCAqbmV0KTsKQEAgLTEwOSwxNSArMTE5LDEwIEBACiAJCV9fcHV0X25ldChuZXQpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmhvbGRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbmxpbmUKK2ludCBuZXRfZXEoY29uc3Qgc3RydWN0IG5ldCAqbmV0MSwgY29uc3Qgc3RydWN0IG5ldCAqbmV0MikKIHsKLQlhdG9taWNfaW5jKCZuZXQtPnVzZV9jb3VudCk7Ci0JcmV0dXJuIG5ldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfbmV0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlhdG9taWNfZGVjKCZuZXQtPnVzZV9jb3VudCk7CisJcmV0dXJuIG5ldDEgPT0gbmV0MjsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmdldF9uZXQoc3RydWN0IG5ldCAqbmV0KQpAQCAtMTI5LDYgKzEzNCwzMyBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm1heWJlX2dldF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBuZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBuZXRfZXEoY29uc3Qgc3RydWN0IG5ldCAqbmV0MSwgY29uc3Qgc3RydWN0IG5ldCAqbmV0MikKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBORVROU19SRUZDTlRfREVCVUcKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqaG9sZF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCWlmIChuZXQpCisJCWF0b21pY19pbmMoJm5ldC0+dXNlX2NvdW50KTsKKwlyZXR1cm4gbmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCWlmIChuZXQpCisJCWF0b21pY19kZWMoJm5ldC0+dXNlX2NvdW50KTsKK30KKyNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmhvbGRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlyZXR1cm4gbmV0OwpAQCAtMTM3LDEzICsxNjksOSBAQAogc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIH0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICptYXliZV9nZXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlyZXR1cm4gbmV0OwotfQogI2VuZGlmCiAKKwogI2RlZmluZSBmb3JfZWFjaF9uZXQoVkFSKQkJCQlcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShWQVIsICZuZXRfbmFtZXNwYWNlX2xpc3QsIGxpc3QpCiAKQEAgLTE2Nyw2ICsxOTUsOCBAQAogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqKTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfcGVybmV0X2RldmljZShzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgKik7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2Uoc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zICopOworZXh0ZXJuIGludCByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShpbnQgKmlkLCBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgKik7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKGludCBpZCwgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zICopOwogCiBzdHJ1Y3QgY3RsX3BhdGg7CiBzdHJ1Y3QgY3RsX3RhYmxlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IDkwYjNlN2YuLjJkYmQ2YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZGNjcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pY21wLmg+CkBAIC0zMCw2ICszMSw3IEBACiAvKiBwZXIgY29ubnRyYWNrOiBwcm90b2NvbCBwcml2YXRlIGRhdGEgKi8KIHVuaW9uIG5mX2Nvbm50cmFja19wcm90byB7CiAJLyogaW5zZXJ0IGNvbm50cmFjayBwcm90byBwcml2YXRlIGRhdGEgaGVyZSAqLworCXN0cnVjdCBuZl9jdF9kY2NwIGRjY3A7CiAJc3RydWN0IGlwX2N0X3NjdHAgc2N0cDsKIAlzdHJ1Y3QgaXBfY3RfdGNwIHRjcDsKIAlzdHJ1Y3QgaXBfY3RfaWNtcCBpY21wOwpAQCAtNDYsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg+CiAKIC8qIHBlciBjb25udHJhY2s6IGFwcGxpY2F0aW9uIGhlbHBlciBwcml2YXRlIGRhdGEgKi8KIHVuaW9uIG5mX2Nvbm50cmFja19oZWxwIHsKQEAgLTU0LDYgKzU3LDcgQEAKIAlzdHJ1Y3QgbmZfY3RfcHB0cF9tYXN0ZXIgY3RfcHB0cF9pbmZvOwogCXN0cnVjdCBuZl9jdF9oMzIzX21hc3RlciBjdF9oMzIzX2luZm87CiAJc3RydWN0IG5mX2N0X3NhbmVfbWFzdGVyIGN0X3NhbmVfaW5mbzsKKwlzdHJ1Y3QgbmZfY3Rfc2lwX21hc3RlciBjdF9zaXBfaW5mbzsKIH07CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNjEsMjAgKzY1LDE2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKLSNkZWZpbmUgTkZfQ1RfQVNTRVJUKHgpCQkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaWYgKCEoeCkpCQkJCQkJCVwKLQkJLyogV29vYWghICBJJ20gdHJpcHBpbmcgbXkgY29ubnRyYWNrIGluIGEgZnJlbnp5IG9mCVwKLQkJICAgbmV0cGxheS4uLiAqLwkJCQkJXAotCQlwcmludGsoIk5GX0NUX0FTU0VSVDogJXM6JWkoJXMpXG4iLAkJCVwKLQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCVwKLX0gd2hpbGUoMCkKKyNkZWZpbmUgTkZfQ1RfQVNTRVJUKHgpCQlXQVJOX09OKCEoeCkpCiAjZWxzZQogI2RlZmluZSBORl9DVF9BU1NFUlQoeCkKICNlbmRpZgogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcjsKIAorLyogTXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgY2xhc3NlcyBkZWZpbmVkIGJ5IGhlbHBlcnMgKi8KKyNkZWZpbmUgTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTCTMKKwogLyogbmZfY29ubiBmZWF0dXJlIGZvciBjb25uZWN0aW9ucyB0aGF0IGhhdmUgYSBoZWxwZXIgKi8KIHN0cnVjdCBuZl9jb25uX2hlbHAgewogCS8qIEhlbHBlci4gaWYgYW55ICovCkBAIC04NSw3ICs4NSw3IEBACiAJc3RydWN0IGhsaXN0X2hlYWQgZXhwZWN0YXRpb25zOwogCiAJLyogQ3VycmVudCBudW1iZXIgb2YgZXhwZWN0ZWQgY29ubmVjdGlvbnMgKi8KLQl1bnNpZ25lZCBpbnQgZXhwZWN0aW5nOworCXU4IGV4cGVjdGluZ1tORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVNdOwogfTsKIAogCkBAIC0xNDAsNiArMTQwLDE2IEBACiAJCQkgICAgdHVwbGVoYXNoW2hhc2gtPnR1cGxlLmRzdC5kaXJdKTsKIH0KIAorc3RhdGljIGlubGluZSB1X2ludDE2X3QgbmZfY3RfbDNudW0oY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50OF90IG5mX2N0X3Byb3RvbnVtKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bTsKK30KKwogLyogZ2V0IG1hc3RlciBjb25udHJhY2sgdmlhIG1hc3RlciBleHBlY3RhdGlvbiAqLwogI2RlZmluZSBtYXN0ZXJfY3QoY29ubnRyKSAoY29ubnRyLT5tYXN0ZXIpCiAKQEAgLTE4NCwxMiArMTk0LDExIEBACiAKIGV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19mbHVzaCh2b2lkKTsKIAotZXh0ZXJuIGludCBuZl9jdF9nZXRfdHVwbGVwcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICB1bnNpZ25lZCBpbnQgbmhvZmYsCi0JCQkgICAgIHVfaW50MTZfdCBsM251bSwKLQkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwotZXh0ZXJuIGludCBuZl9jdF9pbnZlcnRfdHVwbGVwcihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAotCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpOworZXh0ZXJuIGJvb2wgbmZfY3RfZ2V0X3R1cGxlcHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBuaG9mZiwgdV9pbnQxNl90IGwzbnVtLAorCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworZXh0ZXJuIGJvb2wgbmZfY3RfaW52ZXJ0X3R1cGxlcHIoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKKwkJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZyk7CiAKIGV4dGVybiB2b2lkIF9fbmZfY3RfcmVmcmVzaF9hY2N0KHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCmluZGV4IDllZTI2NDYuLmE4MTc3MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCkBAIC0zMCw3ICszMCw3IEBACiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19wcm90b19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX3Byb3RvX2Zpbmkodm9pZCk7CiAKLWV4dGVybiBpbnQKK2V4dGVybiBib29sCiBuZl9jdF9nZXRfdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdW5zaWduZWQgaW50IG5ob2ZmLAogCQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwKQEAgLTQwLDcgKzQwLDcgQEAKIAkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAogCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG8pOwogCi1leHRlcm4gaW50CitleHRlcm4gYm9vbAogbmZfY3RfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmludmVyc2UsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oCmluZGV4IGNiNjA4YTEuLmRmZGY0YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaApAQCAtNDEsNiArNDEsOSBAQAogCS8qIEZsYWdzICovCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCisJLyogRXhwZWN0YXRpb24gY2xhc3MgKi8KKwl1bnNpZ25lZCBpbnQgY2xhc3M7CisKICNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogCV9fYmUzMiBzYXZlZF9pcDsKIAkvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBwZXItcHJvdG8gcGFydCwgdXNlZCB0byBtYXAgdGhlCkBAIC01Myw3ICs1NiwxNiBAQAogCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCi0jZGVmaW5lIE5GX0NUX0VYUEVDVF9QRVJNQU5FTlQgMHgxCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kKK3sKKwl1bnNpZ25lZCBpbnQJbWF4X2V4cGVjdGVkOworCXVuc2lnbmVkIGludAl0aW1lb3V0OworfTsKKworI2RlZmluZSBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVAkwCisKKyNkZWZpbmUgTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVAkweDEKKyNkZWZpbmUgTkZfQ1RfRVhQRUNUX0lOQUNUSVZFCTB4MgogCiBpbnQgbmZfY29ubnRyYWNrX2V4cGVjdF9pbml0KHZvaWQpOwogdm9pZCBuZl9jb25udHJhY2tfZXhwZWN0X2Zpbmkodm9pZCk7CkBAIC03NCwxMCArODYsMTAgQEAKIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBhbiBleHBlY3RhdGlvbjogdGhpcyBpcyBtYW5kYXRvcnkgYmVmb3JlIGNhbGxpbmcKICAgIG5mX2N0X2V4cGVjdF9yZWxhdGVkLiAgWW91IHdpbGwgaGF2ZSB0byBjYWxsIHB1dCBhZnRlcndhcmRzLiAqLwogc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5mX2N0X2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWUpOwotdm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqLCBpbnQsCi0JCSAgICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKiwKLQkJICAgICAgIHVuaW9uIG5mX2luZXRfYWRkciAqLAotCQkgICAgICAgdV9pbnQ4X3QsIF9fYmUxNiAqLCBfX2JlMTYgKik7Cit2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICosIHVuc2lnbmVkIGludCwgaW50LAorCQkgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICosCisJCSAgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKiwKKwkJICAgICAgIHVfaW50OF90LCBjb25zdCBfX2JlMTYgKiwgY29uc3QgX19iZTE2ICopOwogdm9pZCBuZl9jdF9leHBlY3RfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOwogaW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaAppbmRleCA0OWFhYzYzLi5mNzM2ZTg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmgKQEAgLTE3LDcgKzE3LDYgQEAKIHN0cnVjdCBuZl9jdF9leHQgewogCXU4IG9mZnNldFtORl9DVF9FWFRfTlVNXTsKIAl1OCBsZW47Ci0JdTggcmVhbF9sZW47CiAJY2hhciBkYXRhWzBdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKaW5kZXggNGNhMTI1ZS4uZjgwNjBhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCkBAIC0yMCw5ICsyMCw3IEBACiAKIAljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgbW9kdWxlICovCiAJc3RydWN0IG1vZHVsZSAqbWU7CQkvKiBwb2ludGVyIHRvIHNlbGYgKi8KLQl1bnNpZ25lZCBpbnQgbWF4X2V4cGVjdGVkOwkvKiBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IAotCQkJCQkgKiBleHBlY3RlZCBjb25uZWN0aW9ucyAqLwotCXVuc2lnbmVkIGludCB0aW1lb3V0OwkJLyogdGltZW91dCBmb3IgZXhwZWN0ZWRzICovCisJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5OwogCiAJLyogVHVwbGUgb2YgdGhpbmdzIHdlIHdpbGwgaGVscCAoY29tcGFyZWQgYWdhaW5zdCBzZXJ2ZXIgcmVzcG9uc2UpICovCiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKQEAgLTM3LDYgKzM1LDcgQEAKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IG5mX2Nvbm4gKmN0KTsKIAogCWludCAoKnRvX25sYXR0cikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KTsKKwl1bnNpZ25lZCBpbnQgZXhwZWN0X2NsYXNzX21heDsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCmluZGV4IGI4ODZlM2EuLjAzNzg2NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCkBAIC0yOCwzMSArMjgsMjAgQEAKIAkgKiBUcnkgdG8gZmlsbCBpbiB0aGUgdGhpcmQgYXJnOiBuaG9mZiBpcyBvZmZzZXQgb2YgbDMgcHJvdG8KICAgICAgICAgICogaGRyLiAgUmV0dXJuIHRydWUgaWYgcG9zc2libGUuCiAJICovCi0JaW50ICgqcGt0X3RvX3R1cGxlKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCi0JCQkgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworCWJvb2wgKCpwa3RfdG9fdHVwbGUpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKKwkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiAJLyoKIAkgKiBJbnZlcnQgdGhlIHBlci1wcm90byBwYXJ0IG9mIHRoZSB0dXBsZTogaWUuIHR1cm4geG1pdCBpbnRvIHJlcGx5LgogCSAqIFNvbWUgcGFja2V0cyBjYW4ndCBiZSBpbnZlcnRlZDogcmV0dXJuIDAgaW4gdGhhdCBjYXNlLgogCSAqLwotCWludCAoKmludmVydF90dXBsZSkoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKTsKKwlib29sICgqaW52ZXJ0X3R1cGxlKShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKTsKIAogCS8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwogCWludCAoKnByaW50X3R1cGxlKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCiAJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICopOwogCi0JLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC0xIGZvciBpbnZhbGlkLiAqLwotCWludCAoKnBhY2tldCkoc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbyk7Ci0KLQkvKgotCSAqIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQ7Ci0JICogcmV0dXJucyBUUlVFIGlmIGl0J3MgT0suICBJZiBzbywgcGFja2V0KCkgY2FsbGVkIG5leHQuCi0JICovCi0JaW50ICgqbmV3KShzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOwotCiAJLyoKIAkgKiBDYWxsZWQgYmVmb3JlIHRyYWNraW5nLiAKIAkgKgkqZGF0YW9mZjogb2Zmc2V0IG9mIHByb3RvY29sIGhlYWRlciAoVENQLCBVRFAsLi4uKSBpbiBza2IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKaW5kZXggZWZjMTZlYy4uNzIzZGY5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKQEAgLTI1LDE1ICsyNSwxNCBAQAogCiAJLyogVHJ5IHRvIGZpbGwgaW4gdGhlIHRoaXJkIGFyZzogZGF0YW9mZiBpcyBvZmZzZXQgcGFzdCBuZXR3b3JrIHByb3RvY29sCiAgICAgICAgICAgIGhkci4gIFJldHVybiB0cnVlIGlmIHBvc3NpYmxlLiAqLwotCWludCAoKnBrdF90b190dXBsZSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJCSAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CisJYm9vbCAoKnBrdF90b190dXBsZSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKIAogCS8qIEludmVydCB0aGUgcGVyLXByb3RvIHBhcnQgb2YgdGhlIHR1cGxlOiBpZS4gdHVybiB4bWl0IGludG8gcmVwbHkuCiAJICogU29tZSBwYWNrZXRzIGNhbid0IGJlIGludmVydGVkOiByZXR1cm4gMCBpbiB0aGF0IGNhc2UuCiAJICovCi0JaW50ICgqaW52ZXJ0X3R1cGxlKShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAotCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpOworCWJvb2wgKCppbnZlcnRfdHVwbGUpKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmludmVyc2UsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpOwogCiAJLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC0xIGZvciBpbnZhbGlkLiAqLwogCWludCAoKnBhY2tldCkoc3RydWN0IG5mX2Nvbm4gKmN0LApAQCAtNDUsOCArNDQsOCBAQAogCiAJLyogQ2FsbGVkIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBmb3VuZDsKIAkgKiByZXR1cm5zIFRSVUUgaWYgaXQncyBPSy4gIElmIHNvLCBwYWNrZXQoKSBjYWxsZWQgbmV4dC4gKi8KLQlpbnQgKCpuZXcpKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgdW5zaWduZWQgaW50IGRhdGFvZmYpOworCWJvb2wgKCpuZXcpKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKTsKIAogCS8qIENhbGxlZCB3aGVuIGEgY29ubnRyYWNrIGVudHJ5IGlzIGRlc3Ryb3llZCAqLwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgbmZfY29ubiAqY3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCmluZGV4IGU2OWFiMmUuLjFiYjcwODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgKQEAgLTQxLDYgKzQxLDkgQEAKIAl9IGljbXA7CiAJc3RydWN0IHsKIAkJX19iZTE2IHBvcnQ7CisJfSBkY2NwOworCXN0cnVjdCB7CisJCV9fYmUxNiBwb3J0OwogCX0gc2N0cDsKIAlzdHJ1Y3QgewogCQlfX2JlMTYga2V5OwkvKiBHUkUga2V5IGlzIDMyYml0LCBQUHRQIG9ubHkgdXNlcyAxNmJpdCAqLwpAQCAtNzksNiArODIsOSBAQAogCQkJfSBpY21wOwogCQkJc3RydWN0IHsKIAkJCQlfX2JlMTYgcG9ydDsKKwkJCX0gZGNjcDsKKwkJCXN0cnVjdCB7CisJCQkJX19iZTE2IHBvcnQ7CiAJCQl9IHNjdHA7CiAJCQlzdHJ1Y3QgewogCQkJCV9fYmUxNiBrZXk7CkBAIC0xMTMsMTEgKzExOSwzNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5GX0NUX0RVTVBfVFVQTEUodHApCQkJCQkJICAgICBcCi1wcl9kZWJ1ZygidHVwbGUgJXA6ICV1ICV1ICIgTklQNl9GTVQgIiAlaHUgLT4gIiBOSVA2X0ZNVCAiICVodVxuIiwJICAgICBcCi0JICh0cCksICh0cCktPnNyYy5sM251bSwgKHRwKS0+ZHN0LnByb3RvbnVtLAkJCSAgICAgXAotCSBOSVA2KCooc3RydWN0IGluNl9hZGRyICopKHRwKS0+c3JjLnUzLmFsbCksIG50b2hzKCh0cCktPnNyYy51LmFsbCksIFwKLQkgTklQNigqKHN0cnVjdCBpbjZfYWRkciAqKSh0cCktPmRzdC51My5hbGwpLCBudG9ocygodHApLT5kc3QudS5hbGwpKQorc3RhdGljIGlubGluZSB2b2lkIG5mX2N0X2R1bXBfdHVwbGVfaXAoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCkKK3sKKyNpZmRlZiBERUJVRworCXByaW50aygidHVwbGUgJXA6ICV1ICIgTklQUVVBRF9GTVQgIjolaHUgLT4gIiBOSVBRVUFEX0ZNVCAiOiVodVxuIiwKKwkgICAgICAgdCwgdC0+ZHN0LnByb3RvbnVtLAorCSAgICAgICBOSVBRVUFEKHQtPnNyYy51My5pcCksIG50b2hzKHQtPnNyYy51LmFsbCksCisJICAgICAgIE5JUFFVQUQodC0+ZHN0LnUzLmlwKSwgbnRvaHModC0+ZHN0LnUuYWxsKSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5mX2N0X2R1bXBfdHVwbGVfaXB2Nihjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KQoreworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJ0dXBsZSAlcDogJXUgIiBOSVA2X0ZNVCAiICVodSAtPiAiIE5JUDZfRk1UICIgJWh1XG4iLAorCSAgICAgICB0LCB0LT5kc3QucHJvdG9udW0sCisJICAgICAgIE5JUDYoKihzdHJ1Y3QgaW42X2FkZHIgKil0LT5zcmMudTMuYWxsKSwgbnRvaHModC0+c3JjLnUuYWxsKSwKKwkgICAgICAgTklQNigqKHN0cnVjdCBpbjZfYWRkciAqKXQtPmRzdC51My5hbGwpLCBudG9ocyh0LT5kc3QudS5hbGwpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfZHVtcF90dXBsZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KQoreworCXN3aXRjaCAodC0+c3JjLmwzbnVtKSB7CisJY2FzZSBBRl9JTkVUOgorCQluZl9jdF9kdW1wX3R1cGxlX2lwKHQpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQluZl9jdF9kdW1wX3R1cGxlX2lwdjYodCk7CisJCWJyZWFrOworCX0KK30KIAogLyogSWYgd2UncmUgdGhlIGZpcnN0IHR1cGxlLCBpdCdzIHRoZSBvcmlnaW5hbCBkaXIuICovCiAjZGVmaW5lIE5GX0NUX0RJUkVDVElPTihoKQkJCQkJCVwKQEAgLTEzMiw3MCArMTY0LDY0IEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fbmZfY3RfdHVwbGVfc3JjX2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQxLAotCQkJCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQyKQorc3RhdGljIGlubGluZSBib29sIF9fbmZfY3RfdHVwbGVfc3JjX2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQxLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MikKIHsgCi0JcmV0dXJuICh0MS0+c3JjLnUzLmFsbFswXSA9PSB0Mi0+c3JjLnUzLmFsbFswXSAmJgotCQl0MS0+c3JjLnUzLmFsbFsxXSA9PSB0Mi0+c3JjLnUzLmFsbFsxXSAmJgotCQl0MS0+c3JjLnUzLmFsbFsyXSA9PSB0Mi0+c3JjLnUzLmFsbFsyXSAmJgotCQl0MS0+c3JjLnUzLmFsbFszXSA9PSB0Mi0+c3JjLnUzLmFsbFszXSAmJgorCXJldHVybiAobmZfaW5ldF9hZGRyX2NtcCgmdDEtPnNyYy51MywgJnQyLT5zcmMudTMpICYmCiAJCXQxLT5zcmMudS5hbGwgPT0gdDItPnNyYy51LmFsbCAmJgogCQl0MS0+c3JjLmwzbnVtID09IHQyLT5zcmMubDNudW0pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX25mX2N0X3R1cGxlX2RzdF9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MikKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX25mX2N0X3R1cGxlX2RzdF9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDIpCiB7Ci0JcmV0dXJuICh0MS0+ZHN0LnUzLmFsbFswXSA9PSB0Mi0+ZHN0LnUzLmFsbFswXSAmJgotCQl0MS0+ZHN0LnUzLmFsbFsxXSA9PSB0Mi0+ZHN0LnUzLmFsbFsxXSAmJgotCQl0MS0+ZHN0LnUzLmFsbFsyXSA9PSB0Mi0+ZHN0LnUzLmFsbFsyXSAmJgotCQl0MS0+ZHN0LnUzLmFsbFszXSA9PSB0Mi0+ZHN0LnUzLmFsbFszXSAmJgorCXJldHVybiAobmZfaW5ldF9hZGRyX2NtcCgmdDEtPmRzdC51MywgJnQyLT5kc3QudTMpICYmCiAJCXQxLT5kc3QudS5hbGwgPT0gdDItPmRzdC51LmFsbCAmJgogCQl0MS0+ZHN0LnByb3RvbnVtID09IHQyLT5kc3QucHJvdG9udW0pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuZl9jdF90dXBsZV9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDIpCitzdGF0aWMgaW5saW5lIGJvb2wgbmZfY3RfdHVwbGVfZXF1YWwoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MikKIHsKIAlyZXR1cm4gX19uZl9jdF90dXBsZV9zcmNfZXF1YWwodDEsIHQyKSAmJgogCSAgICAgICBfX25mX2N0X3R1cGxlX2RzdF9lcXVhbCh0MSwgdDIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuZl9jdF90dXBsZV9tYXNrX2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayAqbTEsCi0JCQkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm0yKQorc3RhdGljIGlubGluZSBib29sCituZl9jdF90dXBsZV9tYXNrX2VxdWFsKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayAqbTEsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm0yKQogewotCXJldHVybiAobTEtPnNyYy51My5hbGxbMF0gPT0gbTItPnNyYy51My5hbGxbMF0gJiYKLQkJbTEtPnNyYy51My5hbGxbMV0gPT0gbTItPnNyYy51My5hbGxbMV0gJiYKLQkJbTEtPnNyYy51My5hbGxbMl0gPT0gbTItPnNyYy51My5hbGxbMl0gJiYKLQkJbTEtPnNyYy51My5hbGxbM10gPT0gbTItPnNyYy51My5hbGxbM10gJiYKKwlyZXR1cm4gKG5mX2luZXRfYWRkcl9jbXAoJm0xLT5zcmMudTMsICZtMi0+c3JjLnUzKSAmJgogCQltMS0+c3JjLnUuYWxsID09IG0yLT5zcmMudS5hbGwpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuZl9jdF90dXBsZV9zcmNfbWFza19jbXAoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDEsCi0JCQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQyLAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm1hc2spCitzdGF0aWMgaW5saW5lIGJvb2wKK25mX2N0X3R1cGxlX3NyY19tYXNrX2NtcChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSwKKwkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MiwKKwkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm1hc2spCiB7CiAJaW50IGNvdW50OwogCiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTkZfQ1RfVFVQTEVfTDNTSVpFOyBjb3VudCsrKSB7CiAJCWlmICgodDEtPnNyYy51My5hbGxbY291bnRdIF4gdDItPnNyYy51My5hbGxbY291bnRdKSAmCiAJCSAgICBtYXNrLT5zcmMudTMuYWxsW2NvdW50XSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmICgodDEtPnNyYy51LmFsbCBeIHQyLT5zcmMudS5hbGwpICYgbWFzay0+c3JjLnUuYWxsKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKHQxLT5zcmMubDNudW0gIT0gdDItPnNyYy5sM251bSB8fAogCSAgICB0MS0+ZHN0LnByb3RvbnVtICE9IHQyLT5kc3QucHJvdG9udW0pCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbmZfY3RfdHVwbGVfbWFza19jbXAoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayAqbWFzaykKK3N0YXRpYyBpbmxpbmUgYm9vbAorbmZfY3RfdHVwbGVfbWFza19jbXAoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCwKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX21hc2sgKm1hc2spCiB7CiAJcmV0dXJuIG5mX2N0X3R1cGxlX3NyY19tYXNrX2NtcCh0LCB0dXBsZSwgbWFzaykgJiYKIAkgICAgICAgX19uZl9jdF90dXBsZV9kc3RfZXF1YWwodCwgdHVwbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmgKaW5kZXggNThkZDIyNi4uMjM3YTk2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oCkBAIC0yNCw2ICsyNCw5IEBACiBleHRlcm4gaW50IG5mX25hdF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pOworZXh0ZXJuIGludCAoKm5mX25hdF9zZXFfYWRqdXN0X2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbyk7CiAKIC8qIFNldHVwIE5BVCBvbiB0aGlzIGV4cGVjdGVkIGNvbm50cmFjayBzbyBpdCBmb2xsb3dzIG1hc3RlciwgYnV0IGdvZXMKICAqIHRvIHBvcnQgY3QtPm1hc3Rlci0+c2F2ZWRfcHJvdG8uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmgKaW5kZXggNGFhMGVkYi4uZjM2NjJjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9jb2wuaApAQCAtOCw5ICs4LDYgQEAKIAogc3RydWN0IG5mX25hdF9wcm90b2NvbAogewotCS8qIFByb3RvY29sIG5hbWUgKi8KLQljb25zdCBjaGFyICpuYW1lOwotCiAJLyogUHJvdG9jb2wgbnVtYmVyLiAqLwogCXVuc2lnbmVkIGludCBwcm90b251bTsKIApAQCAtMTgsMjUgKzE1LDI1IEBACiAKIAkvKiBUcmFuc2xhdGUgYSBwYWNrZXQgdG8gdGhlIHRhcmdldCBhY2NvcmRpbmcgdG8gbWFuaXAgdHlwZS4KIAkgICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZWVkZWQuICovCi0JaW50ICgqbWFuaXBfcGt0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHVuc2lnbmVkIGludCBpcGhkcm9mZiwKLQkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSk7CisJYm9vbCAoKm1hbmlwX3BrdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgdW5zaWduZWQgaW50IGlwaGRyb2ZmLAorCQkJICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpOwogCiAJLyogSXMgdGhlIG1hbmlwYWJsZSBwYXJ0IG9mIHRoZSB0dXBsZSBiZXR3ZWVuIG1pbiBhbmQgbWF4IGluY2w/ICovCi0JaW50ICgqaW5fcmFuZ2UpKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAotCQkJZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCi0JCQljb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptaW4sCi0JCQljb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptYXgpOworCWJvb2wgKCppbl9yYW5nZSkoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCQkgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAorCQkJIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1heCk7CiAKIAkvKiBBbHRlciB0aGUgcGVyLXByb3RvIHBhcnQgb2YgdGhlIHR1cGxlIChkZXBlbmRpbmcgb24KIAkgICBtYW5pcHR5cGUpLCB0byBnaXZlIGEgdW5pcXVlIHR1cGxlIGluIHRoZSBnaXZlbiByYW5nZSBpZgogCSAgIHBvc3NpYmxlOyByZXR1cm4gZmFsc2UgaWYgbm90LiAgUGVyLXByb3RvY29sIHBhcnQgb2YgdHVwbGUKIAkgICBpcyBpbml0aWFsaXplZCB0byB0aGUgaW5jb21pbmcgcGFja2V0LiAqLwotCWludCAoKnVuaXF1ZV90dXBsZSkoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCi0JCQkgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCi0JCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KTsKKwlib29sICgqdW5pcXVlX3R1cGxlKShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCisJCQkgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpOwogCiAJaW50ICgqcmFuZ2VfdG9fbmxhdHRyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKTsKQEAgLTYyLDkgKzU5LDIwIEBACiBleHRlcm4gdm9pZCBjbGVhbnVwX3Byb3RvY29scyh2b2lkKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpmaW5kX25hdF9wcm90byh1X2ludDE2X3QgcHJvdG9udW0pOwogCi1leHRlcm4gaW50IG5mX25hdF9wb3J0X3JhbmdlX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSk7Ci1leHRlcm4gaW50IG5mX25hdF9wb3J0X25sYXR0cl90b19yYW5nZShzdHJ1Y3QgbmxhdHRyICp0YltdLAotCQkJCSAgICAgICBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSk7CitleHRlcm4gYm9vbCBuZl9uYXRfcHJvdG9faW5fcmFuZ2UoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKKwkJCQkgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1pbiwKKwkJCQkgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1heCk7CisKK2V4dGVybiBib29sIG5mX25hdF9wcm90b191bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCisJCQkJICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgICAgIHVfaW50MTZfdCAqcm92ZXIpOworCitleHRlcm4gaW50IG5mX25hdF9wcm90b19yYW5nZV90b19ubGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpOworZXh0ZXJuIGludCBuZl9uYXRfcHJvdG9fbmxhdHRyX3RvX3JhbmdlKHN0cnVjdCBubGF0dHIgKnRiW10sCisJCQkJCXN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKTsKIAogI2VuZGlmIC8qX05GX05BVF9QUk9UT19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmgKaW5kZXggNzVkMTgyNS4uZTRhMThhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmgKQEAgLTE0LDcgKzE0LDQgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludAogYWxsb2NfbnVsbF9iaW5kaW5nKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgaW50IGhvb2tudW0pOwotCi1leHRlcm4gdW5zaWduZWQgaW50Ci1hbGxvY19udWxsX2JpbmRpbmdfY29uZmlybWVkKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgaW50IGhvb2tudW0pOwogI2VuZGlmIC8qIF9ORl9OQVRfUlVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oIGIvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaAppbmRleCAwY2E2N2Q3Li41ZTUzYTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAvKioKICAqIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgLSBOZXRMYWJlbCBMU00gc2VjdXJpdHkgYXR0cmlidXRlcwotICogQGZsYWdzOiBpbmRpY2F0ZSB3aGljaCBhdHRyaWJ1dGVzIGFyZSBjb250YWluZWQgaW4gdGhpcyBzdHJ1Y3R1cmUKKyAqIEBmbGFnczogaW5kaWNhdGUgc3RydWN0dXJlIGF0dHJpYnV0ZXMsIHNlZSBORVRMQkxfU0VDQVRUUl8qCiAgKiBAdHlwZTogaW5kaWNhdGUgdGhlIE5MVFlQRSBvZiB0aGUgYXR0cmlidXRlcwogICogQGRvbWFpbjogdGhlIE5ldExhYmVsIExTTSBkb21haW4KICAqIEBjYWNoZTogTmV0TGFiZWwgTFNNIHNwZWNpZmljIGNhY2hlCkBAIC0xODAsMTcgKzE4MCwyMiBAQAogICogTmV0TGFiZWwgaXRzZWxmIHdoZW4gcmV0dXJuaW5nIHNlY3VyaXR5IGF0dHJpYnV0ZXMgdG8gdGhlIExTTS4KICAqCiAgKi8KK3N0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgeworCXUzMiBmbGFnczsKKwkvKiBiaXRtYXAgdmFsdWVzIGZvciAnZmxhZ3MnICovCiAjZGVmaW5lIE5FVExCTF9TRUNBVFRSX05PTkUgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBORVRMQkxfU0VDQVRUUl9ET01BSU4gICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkVUTEJMX1NFQ0FUVFJfRE9NQUlOX0NQWSAgICAgICAoTkVUTEJMX1NFQ0FUVFJfRE9NQUlOIHwgXAorCQkJCQkgTkVUTEJMX1NFQ0FUVFJfRlJFRV9ET01BSU4pCiAjZGVmaW5lIE5FVExCTF9TRUNBVFRSX0NBQ0hFICAgICAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSBORVRMQkxfU0VDQVRUUl9NTFNfTFZMICAgICAgICAgIDB4MDAwMDAwMDQKICNkZWZpbmUgTkVUTEJMX1NFQ0FUVFJfTUxTX0NBVCAgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIE5FVExCTF9TRUNBVFRSX1NFQ0lEICAgICAgICAgICAgMHgwMDAwMDAxMAorCS8qIGJpdG1hcCBtZXRhLXZhbHVlcyBmb3IgJ2ZsYWdzJyAqLworI2RlZmluZSBORVRMQkxfU0VDQVRUUl9GUkVFX0RPTUFJTiAgICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgTkVUTEJMX1NFQ0FUVFJfQ0FDSEVBQkxFICAgICAgICAoTkVUTEJMX1NFQ0FUVFJfTUxTX0xWTCB8IFwKIAkJCQkJIE5FVExCTF9TRUNBVFRSX01MU19DQVQgfCBcCiAJCQkJCSBORVRMQkxfU0VDQVRUUl9TRUNJRCkKLXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgewotCXUzMiBmbGFnczsKIAl1MzIgdHlwZTsKIAljaGFyICpkb21haW47CiAJc3RydWN0IG5ldGxibF9sc21fY2FjaGUgKmNhY2hlOwpAQCAtMzAzLDcgKzMwOCw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRsYmxfc2VjYXR0cl9kZXN0cm95KHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0Ja2ZyZWUoc2VjYXR0ci0+ZG9tYWluKTsKKwlpZiAoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9GUkVFX0RPTUFJTikKKwkJa2ZyZWUoc2VjYXR0ci0+ZG9tYWluKTsKIAlpZiAoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9DQUNIRSkKIAkJbmV0bGJsX3NlY2F0dHJfY2FjaGVfZnJlZShzZWNhdHRyLT5jYWNoZSk7CiAJaWYgKHNlY2F0dHItPmZsYWdzICYgTkVUTEJMX1NFQ0FUVFJfTUxTX0NBVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL2NvcmUuaCBiL2luY2x1ZGUvbmV0L25ldG5zL2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQ0YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvY29yZS5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19ORVROU19DT1JFX0hfXworI2RlZmluZSBfX05FVE5TX0NPUkVfSF9fCisKK3N0cnVjdCBjdGxfdGFibGVfaGVhZGVyOworc3RydWN0IHByb3RfaW51c2U7CisKK3N0cnVjdCBuZXRuc19jb3JlIHsKKwkvKiBjb3JlIHN5c2N0bHMgKi8KKwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcgkqc3lzY3RsX2hkcjsKKworCWludAlzeXNjdGxfc29tYXhjb25uOworCisJc3RydWN0IHByb3RfaW51c2UJKmludXNlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9kY2NwLmggYi9pbmNsdWRlL25ldC9uZXRucy9kY2NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkMmE3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2RjY3AuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fTkVUTlNfRENDUF9IX18KKyNkZWZpbmUgX19ORVROU19EQ0NQX0hfXworCitzdHJ1Y3Qgc29jazsKKworc3RydWN0IG5ldG5zX2RjY3AgeworCXN0cnVjdCBzb2NrICp2NF9jdGxfc2s7CisJc3RydWN0IHNvY2sgKnY2X2N0bF9zazsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDRmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9nZW5lcmljLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIGdlbmVyaWMgbmV0IHBvaW50ZXJzCisgKi8KKworI2lmbmRlZiBfX05FVF9HRU5FUklDX0hfXworI2RlZmluZSBfX05FVF9HRU5FUklDX0hfXworCisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKworLyoKKyAqIEdlbmVyaWMgbmV0IHBvaW50ZXJzIGFyZSB0byBiZSB1c2VkIGJ5IG1vZHVsZXMgdG8gcHV0IHNvbWUgcHJpdmF0ZQorICogc3R1ZmYgb24gdGhlIHN0cnVjdCBuZXQgd2l0aG91dCBleHBsaWNpdCBzdHJ1Y3QgbmV0IG1vZGlmaWNhdGlvbgorICoKKyAqIFRoZSBydWxlcyBhcmUgc2ltcGxlOgorICogMS4gcmVnaXN0ZXIgdGhlIG9wcyB3aXRoIHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlIHRvIGdldCB0aGUgaWQKKyAqICAgIG9mIHlvdXIgcHJpdmF0ZSBwb2ludGVyOworICogMi4gY2FsbCBuZXRfYXNzaWduX2dlbmVyaWMoKSB0byBwdXQgdGhlIHByaXZhdGUgZGF0YSBvbiB0aGUgc3RydWN0CisgKiAgICBuZXQgKG1vc3QgcHJlZmVyYWJseSB0aGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSAtPmluaXQgY2FsbGJhY2sKKyAqICAgIG9mIHRoZSBvcHMgcmVnaXN0ZXJlZCk7CisgKiAzLiBkbyBub3QgY2hhbmdlIHRoaXMgcG9pbnRlciB3aGlsZSB0aGUgbmV0IGlzIGFsaXZlOworICogNC4gZG8gbm90IHRyeSB0byBoYXZlIGFueSBwcml2YXRlIHJlZmVyZW5jZSBvbiB0aGUgbmV0X2dlbmVyaWMgb2JqZWN0LgorICoKKyAqIEFmdGVyIGFjY29tcGxpc2hpbmcgYWxsIG9mIHRoZSBhYm92ZSwgdGhlIHByaXZhdGUgcG9pbnRlciBjYW4gYmUKKyAqIGFjY2Vzc2VkIHdpdGggdGhlIG5ldF9nZW5lcmljKCkgY2FsbC4KKyAqLworCitzdHJ1Y3QgbmV0X2dlbmVyaWMgeworCXVuc2lnbmVkIGludCBsZW47CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKworCXZvaWQgKnB0clswXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmV0X2dlbmVyaWMoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWQpCit7CisJc3RydWN0IG5ldF9nZW5lcmljICpuZzsKKwl2b2lkICpwdHI7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbmcgPSByY3VfZGVyZWZlcmVuY2UobmV0LT5nZW4pOworCUJVR19PTihpZCA9PSAwIHx8IGlkID4gbmctPmxlbik7CisJcHRyID0gbmctPnB0cltpZCAtIDFdOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHB0cjsKK30KKworZXh0ZXJuIGludCBuZXRfYXNzaWduX2dlbmVyaWMoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWQsIHZvaWQgKmRhdGEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmggYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKaW5kZXggYTliNGY2MC4uMzRlZTM0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaApAQCAtMTcsNiArMTcsNyBAQAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcgkqZm9yd19oZHI7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmZyYWdzX2hkcjsKKwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcgkqaXB2NF9oZHI7CiAjZW5kaWYKIAlzdHJ1Y3QgaXB2NF9kZXZjb25mCSpkZXZjb25mX2FsbDsKIAlzdHJ1Y3QgaXB2NF9kZXZjb25mCSpkZXZjb25mX2RmbHQ7CkBAIC0yNiw2ICsyNyw5IEBACiAJc3RydWN0IGhsaXN0X2hlYWQJKmZpYl90YWJsZV9oYXNoOwogCXN0cnVjdCBzb2NrCQkqZmlibmw7CiAKKwlzdHJ1Y3Qgc29jawkJKippY21wX3NrOworCXN0cnVjdCBzb2NrCQkqdGNwX3NvY2s7CisKIAlzdHJ1Y3QgbmV0bnNfZnJhZ3MJZnJhZ3M7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCXN0cnVjdCB4dF90YWJsZQkJKmlwdGFibGVfZmlsdGVyOwpAQCAtMzMsNSArMzcsMTIgQEAKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcHRhYmxlX3JhdzsKIAlzdHJ1Y3QgeHRfdGFibGUJCSphcnB0YWJsZV9maWx0ZXI7CiAjZW5kaWYKKworCWludCBzeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9hbGw7CisJaW50IHN5c2N0bF9pY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHM7CisJaW50IHN5c2N0bF9pY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXM7CisJaW50IHN5c2N0bF9pY21wX3JhdGVsaW1pdDsKKwlpbnQgc3lzY3RsX2ljbXBfcmF0ZW1hc2s7CisJaW50IHN5c2N0bF9pY21wX2Vycm9yc191c2VfaW5ib3VuZF9pZmFkZHI7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmggYi9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgKaW5kZXggMWRkN2RlNC4uYWMwNTNiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjYuaApAQCAtMzYsNSArMzYsMjMgQEAKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcDZ0YWJsZV9tYW5nbGU7CiAJc3RydWN0IHh0X3RhYmxlCQkqaXA2dGFibGVfcmF3OwogI2VuZGlmCisJc3RydWN0IHJ0Nl9pbmZvICAgICAgICAgKmlwNl9udWxsX2VudHJ5OworCXN0cnVjdCBydDZfc3RhdGlzdGljcyAgICpydDZfc3RhdHM7CisJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgKmlwNl9maWJfdGltZXI7CisJc3RydWN0IGhsaXN0X2hlYWQgICAgICAgKmZpYl90YWJsZV9oYXNoOworCXN0cnVjdCBmaWI2X3RhYmxlICAgICAgICpmaWI2X21haW5fdGJsOworCXN0cnVjdCBkc3Rfb3BzCQkqaXA2X2RzdF9vcHM7CisJdW5zaWduZWQgaW50CQkgaXA2X3J0X2djX2V4cGlyZTsKKwl1bnNpZ25lZCBsb25nCQkgaXA2X3J0X2xhc3RfZ2M7CisjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisJc3RydWN0IHJ0Nl9pbmZvICAgICAgICAgKmlwNl9wcm9oaWJpdF9lbnRyeTsKKwlzdHJ1Y3QgcnQ2X2luZm8gICAgICAgICAqaXA2X2Jsa19ob2xlX2VudHJ5OworCXN0cnVjdCBmaWI2X3RhYmxlICAgICAgICpmaWI2X2xvY2FsX3RibDsKKwlzdHJ1Y3QgZmliX3J1bGVzX29wcyAgICAqZmliNl9ydWxlc19vcHM7CisjZW5kaWYKKwlzdHJ1Y3Qgc29jawkJKippY21wX3NrOworCXN0cnVjdCBzb2NrICAgICAgICAgICAgICpuZGlzY19zazsKKwlzdHJ1Y3Qgc29jayAgICAgICAgICAgICAqdGNwX3NrOworCXN0cnVjdCBzb2NrICAgICAgICAgICAgICppZ21wX3NrOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2Nscy5oIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oCmluZGV4IGQzNDljNjYuLmFhOWUyODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaAorKysgYi9pbmNsdWRlL25ldC9wa3RfY2xzLmgKQEAgLTM1Myw3ICszNTMsNyBAQAogCWlmIChpbmRldlswXSkgewogCQlpZiAgKCFza2ItPmlpZikKIAkJCXJldHVybiAwOwotCQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBza2ItPmlpZik7CisJCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleChkZXZfbmV0KHNrYi0+ZGV2KSwgc2tiLT5paWYpOwogCQlpZiAoIWRldiB8fCBzdHJjbXAoaW5kZXYsIGRldi0+bmFtZSkpCiAJCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wcm90b2NvbC5oIGIvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaAppbmRleCBhZDhjNTg0Li44ZDAyNGQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wcm90b2NvbC5oCisrKyBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKQEAgLTM5LDcgKzM5LDggQEAKIAlpbnQJCQkoKmdzb19zZW5kX2NoZWNrKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlzdHJ1Y3Qgc2tfYnVmZgkgICAgICAgKigqZ3NvX3NlZ21lbnQpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICAgICBpbnQgZmVhdHVyZXMpOwotCWludAkJCW5vX3BvbGljeTsKKwl1bnNpZ25lZCBpbnQJCW5vX3BvbGljeToxLAorCQkJCW5ldG5zX29rOjE7CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmF3LmggYi9pbmNsdWRlL25ldC9yYXcuaAppbmRleCAxODI4ZjgxLi42YzE0YTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yYXcuaAorKysgYi9pbmNsdWRlL25ldC9yYXcuaApAQCAtNTMsNyArNTMsNyBAQAogCiAjZW5kaWYKIAotdm9pZCByYXdfaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByYXdfaGFzaGluZm8gKmgpOwotdm9pZCByYXdfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJhd19oYXNoaW5mbyAqaCk7Cit2b2lkIHJhd19oYXNoX3NrKHN0cnVjdCBzb2NrICpzayk7Cit2b2lkIHJhd191bmhhc2hfc2soc3RydWN0IHNvY2sgKnNrKTsKIAogI2VuZGlmCS8qIF9SQVdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmggYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAppbmRleCBjZmY0NjA4Li5iMjIwYjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaApAQCAtMzEsOCArMzEsNyBAQAogCWludAkJb2JqX3NpemU7CiAJc3RydWN0IGttZW1fY2FjaGUJKnNsYWI7CiAJaW50CQkoKnJ0eF9zeW5fYWNrKShzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKKwkJCQkgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIAl2b2lkCQkoKnNlbmRfYWNrKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwogCXZvaWQJCSgqc2VuZF9yZXNldCkoc3RydWN0IHNvY2sgKnNrLApAQCAtNDYsNyArNDUsNyBAQAogCXN0cnVjdCByZXF1ZXN0X3NvY2sJCSpkbF9uZXh0OyAvKiBNdXN0IGJlIGZpcnN0IG1lbWJlciEgKi8KIAl1MTYJCQkJbXNzOwogCXU4CQkJCXJldHJhbnM7Ci0JdTgJCQkJX19wYWQ7CisJdTgJCQkJY29va2llX3RzOyAvKiBzeW5jb29raWU6IGVuY29kZSB0Y3BvcHRzIGluIHRpbWVzdGFtcCAqLwogCS8qIFRoZSBmb2xsb3dpbmcgdHdvIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHJlY29tcHV0ZWQgSSB0aGluayAtQUsgKi8KIAl1MzIJCQkJd2luZG93X2NsYW1wOyAvKiB3aW5kb3cgY2xhbXAgYXQgY3JlYXRpb24gdGltZSAqLwogCXUzMgkJCQlyY3Zfd25kOwkgIC8qIHJjdl93bmQgb2ZmZXJlZCBmaXJzdCB0aW1lICovCkBAIC0xMTYsOCArMTE1LDggQEAKIAlzdHJ1Y3QgcmVxdWVzdF9zb2NrCSpyc2txX2FjY2VwdF9oZWFkOwogCXN0cnVjdCByZXF1ZXN0X3NvY2sJKnJza3FfYWNjZXB0X3RhaWw7CiAJcndsb2NrX3QJCXN5bl93YWl0X2xvY2s7Ci0JdTgJCQlyc2txX2RlZmVyX2FjY2VwdDsKLQkvKiAzIGJ5dGVzIGhvbGUsIHRyeSB0byBwYWNrICovCisJdTE2CQkJcnNrcV9kZWZlcl9hY2NlcHQ7CisJLyogMiBieXRlcyBob2xlLCB0cnkgdG8gcGFjayAqLwogCXN0cnVjdCBsaXN0ZW5fc29jawkqbGlzdGVuX29wdDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9pbmNsdWRlL25ldC9yb3V0ZS5oCmluZGV4IGVhZGFkNTkuLmM2MzM4ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpZm5kZWYgX19LRVJORUxfXwogI3dhcm5pbmcgVGhpcyBmaWxlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSB1c2VkIG91dHNpZGUgb2Yga2VybmVsLgpAQCAtMTYxLDcgKzE2MCw3IEBACiAJCQkJCSAuZHBvcnQgPSBkcG9ydCB9IH0gfTsKIAogCWludCBlcnI7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJaWYgKCFkc3QgfHwgIXNyYykgewogCQllcnIgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBycCwgJmZsKTsKIAkJaWYgKGVycikKQEAgLTE4OSw3ICsxODgsNyBAQAogCQlpcF9ydF9wdXQoKnJwKTsKIAkJKnJwID0gTlVMTDsKIAkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKLQkJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KHNrLT5za19uZXQsIHJwLCAmZmwsIHNrLCAwKTsKKwkJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgcnAsICZmbCwgc2ssIDApOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oIGIvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKaW5kZXggNzkzODYzZS4uM2MxODk1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKQEAgLTc0LDYgKzc0LDcgQEAKIAogZXh0ZXJuIGludAlfX3J0bmxfbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkCV9fcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyk7CitleHRlcm4gdm9pZAlydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTsKIAogZXh0ZXJuIGludAlydG5sX2xpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcyk7CiBleHRlcm4gdm9pZAlydG5sX2xpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKaW5kZXggMTBhZTJkYS4uODg5ODhhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogCVNDVFBfQ01EX0FEQVBUQVRJT05fSU5ELCAvKiBnZW5lcmF0ZSBhbmQgc2VuZCBhZGFwdGF0aW9uIGV2ZW50ICovCiAJU0NUUF9DTURfQVNTT0NfU0hLRVksICAgIC8qIGdlbmVyYXRlIHRoZSBhc3NvY2lhdGlvbiBzaGFyZWQga2V5cyAqLwogCVNDVFBfQ01EX1QxX1JFVFJBTiwJIC8qIE1hcmsgZm9yIHJldHJhbnNtaXNzaW9uIGFmdGVyIFQxIHRpbWVvdXQgICovCisJU0NUUF9DTURfVVBEQVRFX0lOSVRUQUcsIC8qIFVwZGF0ZSBwZWVyIGluaXR0YWcgKi8KIAlTQ1RQX0NNRF9MQVNUCiB9IHNjdHBfdmVyYl90OwogCkBAIC0yMDUsMTIgKzIwNiwxMSBAQAogaW50IHNjdHBfaW5pdF9jbWRfc2VxKHNjdHBfY21kX3NlcV90ICpzZXEpOwogCiAvKiBBZGQgYSBjb21tYW5kIHRvIGFuIHNjdHBfY21kX3NlcV90LgotICogUmV0dXJuIDAgaWYgdGhlIGNvbW1hbmQgc2VxdWVuY2UgaXMgZnVsbC4KICAqCiAgKiBVc2UgdGhlIFNDVFBfKiBjb25zdHJ1Y3RvcnMgZGVmaW5lZCBieSBTQ1RQX0FSR19DT05TVFJVQ1RPUigpIGFib3ZlCiAgKiB0byB3cmFwIGRhdGEgd2hpY2ggZ29lcyBpbiB0aGUgb2JqIGFyZ3VtZW50LgogICovCi1pbnQgc2N0cF9hZGRfY21kKHNjdHBfY21kX3NlcV90ICpzZXEsIHNjdHBfdmVyYl90IHZlcmIsIHNjdHBfYXJnX3Qgb2JqKTsKK3ZvaWQgc2N0cF9hZGRfY21kX3NmKHNjdHBfY21kX3NlcV90ICpzZXEsIHNjdHBfdmVyYl90IHZlcmIsIHNjdHBfYXJnX3Qgb2JqKTsKIAogLyogUmV0dXJuIHRoZSBuZXh0IGNvbW1hbmQgc3RydWN0dXJlIGluIGFuIHNjdHBfY21kX3NlcS4KICAqIFJldHVybiBOVUxMIGF0IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCA1N2RmMjdmLi45MGIxZThkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtMzY4LDExICszNjgsNiBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX3N5c2N0bF9yZWdpc3Rlcih2b2lkKSB7IHJldHVybjsgfQogc3RhdGljIGlubGluZSB2b2lkIHNjdHBfc3lzY3RsX3VucmVnaXN0ZXIodm9pZCkgeyByZXR1cm47IH0KLXN0YXRpYyBpbmxpbmUgaW50IHNjdHBfc3lzY3RsX2ppZmZpZXNfbXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCi0JCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCi0JCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pIHsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KICNlbmRpZgogCiAvKiBTaXplIG9mIFN1cHBvcnRlZCBBZGRyZXNzIFBhcmFtZXRlciBmb3IgJ3gnIGFkZHJlc3MgdHlwZXMuICovCkBAIC0zODAsMTUgKzM3NSwxOSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAKLWludCBzY3RwX3Y2X2luaXQodm9pZCk7Ci12b2lkIHNjdHBfdjZfZXhpdCh2b2lkKTsKK3ZvaWQgc2N0cF92Nl9wZl9pbml0KHZvaWQpOwordm9pZCBzY3RwX3Y2X3BmX2V4aXQodm9pZCk7CitpbnQgc2N0cF92Nl9wcm90b3N3X2luaXQodm9pZCk7Cit2b2lkIHNjdHBfdjZfcHJvdG9zd19leGl0KHZvaWQpOwogaW50IHNjdHBfdjZfYWRkX3Byb3RvY29sKHZvaWQpOwogdm9pZCBzY3RwX3Y2X2RlbF9wcm90b2NvbCh2b2lkKTsKIAogI2Vsc2UgLyogI2lmZGVmIGRlZmluZWQoQ09ORklHX0lQVjYpICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNjdHBfdjZfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2N0cF92Nl9leGl0KHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF92Nl9wZl9pbml0KHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF92Nl9wZl9leGl0KHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIGludCBzY3RwX3Y2X3Byb3Rvc3dfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF92Nl9wcm90b3N3X2V4aXQodm9pZCkgeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgaW50IHNjdHBfdjZfYWRkX3Byb3RvY29sKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX3Y2X2RlbF9wcm90b2NvbCh2b2lkKSB7IHJldHVybjsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NtLmggYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKaW5kZXggZWY5ZTdlZC4uMjQ4MTE3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc20uaApAQCAtMzg1LDE0ICszODUsNiBAQAogCXJldHVybiAoKChzKSA9PSAodCkpIHx8ICgoKHQpIC0gKHMpKSAmIEFERElQX1NFUklBTF9TSUdOX0JJVCkpOwogfQogCi0KLS8qIFJ1biBzY3RwX2FkZF9jbWQoKSBnZW5lcmF0aW5nIGEgQlVHKCkgaWYgdGhlcmUgaXMgYSBmYWlsdXJlLiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX2FkZF9jbWRfc2Yoc2N0cF9jbWRfc2VxX3QgKnNlcSwgc2N0cF92ZXJiX3QgdmVyYiwgc2N0cF9hcmdfdCBvYmopCi17Ci0JaWYgKHVubGlrZWx5KCFzY3RwX2FkZF9jbWQoc2VxLCB2ZXJiLCBvYmopKSkKLQkJQlVHKCk7Ci19Ci0KIC8qIENoZWNrIFZUQUcgb2YgdGhlIHBhY2tldCBtYXRjaGVzIHRoZSBzZW5kZXIncyBvd24gdGFnLiAqLwogc3RhdGljIGlubGluZSBpbnQKIHNjdHBfdnRhZ192ZXJpZnkoY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCA5YzgyN2E3Li4wY2UwNDQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtNjM3LDggKzYzNyw2IEBACiAJCQkJCSAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosCiAJCQkJCSAgICBzdHJ1Y3QgbXNnaGRyICosIGludCBsZW4pOwogdm9pZCBzY3RwX2RhdGFtc2dfcHV0KHN0cnVjdCBzY3RwX2RhdGFtc2cgKik7Ci12b2lkIHNjdHBfZGF0YW1zZ19mcmVlKHN0cnVjdCBzY3RwX2RhdGFtc2cgKik7Ci12b2lkIHNjdHBfZGF0YW1zZ190cmFjayhzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKIHZvaWQgc2N0cF9jaHVua19mYWlsKHN0cnVjdCBzY3RwX2NodW5rICosIGludCBlcnJvcik7CiBpbnQgc2N0cF9jaHVua19hYmFuZG9uZWQoc3RydWN0IHNjdHBfY2h1bmsgKik7CiAKQEAgLTE2NjEsNiArMTY1OSw5IEBACiAJLyogVHJhbnNwb3J0IHRvIHdoaWNoIFNIVVRET1dOIGNodW5rIHdhcyBsYXN0IHNlbnQuICAqLwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqc2h1dGRvd25fbGFzdF9zZW50X3RvOwogCisJLyogSG93IG1hbnkgdGltZXMgaGF2ZSB3ZSByZXNlbnQgYSBTSFVURE9XTiAqLworCWludCBzaHV0ZG93bl9yZXRyaWVzOworCiAJLyogVHJhbnNwb3J0IHRvIHdoaWNoIElOSVQgY2h1bmsgd2FzIGxhc3Qgc2VudC4gICovCiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICppbml0X2xhc3Rfc2VudF90bzsKIApAQCAtMTY5NSw2ICsxNjk2LDExIEBACiAJICovCiAJX191MTYgdW5hY2tfZGF0YTsKIAorCS8qIFRoZSB0b3RhbCBudW1iZXIgb2YgZGF0YSBjaHVua3MgdGhhdCB3ZSd2ZSBoYWQgdG8gcmV0cmFuc21pdAorCSAqIGFzIHRoZSByZXN1bHQgb2YgYSBUMyB0aW1lciBleHBpcmF0aW9uCisJICovCisJX191MzIgcnR4X2RhdGFfY2h1bmtzOworCiAJLyogVGhpcyBpcyB0aGUgYXNzb2NpYXRpb24ncyByZWNlaXZlIGJ1ZmZlciBzcGFjZS4gIFRoaXMgdmFsdWUgaXMgdXNlZAogCSAqIHRvIHNldCBhX3J3bmQgZmllbGQgaW4gYW4gSU5JVCBvciBhIFNBQ0sgY2h1bmsuCiAJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmggYi9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmgKaW5kZXggOWJjZmMxMi4uN2VhMTJlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvdWxwZXZlbnQuaApAQCAtNjcsNyArNjcsNyBAQAogfTsKIAogLyogUmV0cmlldmUgdGhlIHNrYiB0aGlzIGV2ZW50IHNpdHMgaW5zaWRlIG9mLiAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9ldmVudDJza2Ioc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2KQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2N0cF9ldmVudDJza2IoY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2KQogewogCXJldHVybiBjb250YWluZXJfb2YoKHZvaWQgKilldiwgc3RydWN0IHNrX2J1ZmYsIGNiKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKaW5kZXggOTQ2MmQ2YS4uOTYxOWI5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKQEAgLTQxMSw2ICs0MTEsNyBAQAogCV9fdTggc2N0cF9zaHV0ZG93bl9ldmVudDsKIAlfX3U4IHNjdHBfcGFydGlhbF9kZWxpdmVyeV9ldmVudDsKIAlfX3U4IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudDsKKwlfX3U4IHNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQ7CiB9OwogCiAvKgpAQCAtNTg3LDcgKzU4OCw3IEBACiAgKiBlbmRwb2ludCByZXF1aXJlcyB0aGUgcGVlciB0byB1c2UuCiAqLwogc3RydWN0IHNjdHBfaG1hY2FsZ28gewotCV9fdTE2CQlzaG1hY19udW1faWRlbnRzOworCV9fdTMyCQlzaG1hY19udW1faWRlbnRzOwogCV9fdTE2CQlzaG1hY19pZGVudHNbXTsKIH07CiAKQEAgLTYwMCw3ICs2MDEsNyBAQAogc3RydWN0IHNjdHBfYXV0aGtleSB7CiAJc2N0cF9hc3NvY190CXNjYV9hc3NvY19pZDsKIAlfX3UxNgkJc2NhX2tleW51bWJlcjsKLQlfX3UxNgkJc2NhX2tleWxlbjsKKwlfX3UxNgkJc2NhX2tleWxlbmd0aDsKIAlfX3U4CQlzY2Ffa2V5W107CiB9OwogCkBAIC02OTMsOCArNjk0LDkgQEAKICAqIHRoZSBwZWVyIHJlcXVpcmVzIHRvIGJlIHJlY2VpdmVkIGF1dGhlbnRpY2F0ZWQgb25seS4KICAqLwogc3RydWN0IHNjdHBfYXV0aGNodW5rcyB7Ci0Jc2N0cF9hc3NvY190ICAgICAgICAgICAgZ2F1dGhfYXNzb2NfaWQ7Ci0JdWludDhfdCAgICAgICAgICAgICAgICAgZ2F1dGhfY2h1bmtzW107CisJc2N0cF9hc3NvY190CWdhdXRoX2Fzc29jX2lkOworCV9fdTMyCQlnYXV0aF9udW1iZXJfb2ZfY2h1bmtzOworCXVpbnQ4X3QJCWdhdXRoX2NodW5rc1tdOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA4YTc4ODliLi5kYzQyYjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Bjb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CS8qIHN0cnVjdCBza19idWZmICovCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpAQCAtNzAsNyArNjksMTEgQEAKICNkZWZpbmUgU09DS19ERUJVRyhzaywgbXNnLi4uKSBkbyB7IGlmICgoc2spICYmIHNvY2tfZmxhZygoc2spLCBTT0NLX0RCRykpIFwKIAkJCQkJcHJpbnRrKEtFUk5fREVCVUcgbXNnKTsgfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIFNPQ0tfREVCVUcoc2ssIG1zZy4uLikgZG8geyB9IHdoaWxlICgwKQorLyogVmFsaWRhdGUgYXJndW1lbnRzIGFuZCBkbyBub3RoaW5nICovCitzdGF0aWMgdm9pZCBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorU09DS19ERUJVRyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm1zZywgLi4uKQoreworfQogI2VuZGlmCiAKIC8qIFRoaXMgaXMgdGhlIHBlci1zb2NrZXQgbG9jay4gIFRoZSBzcGlubG9jayBwcm92aWRlcyBhIHN5bmNocm9uaXphdGlvbgpAQCAtMTIyLDcgKzEyNSw5IEBACiAJYXRvbWljX3QJCXNrY19yZWZjbnQ7CiAJdW5zaWduZWQgaW50CQlza2NfaGFzaDsKIAlzdHJ1Y3QgcHJvdG8JCSpza2NfcHJvdDsKKyNpZmRlZiBDT05GSUdfTkVUX05TCiAJc3RydWN0IG5ldAkgCSpza2NfbmV0OworI2VuZGlmCiB9OwogCiAvKioKQEAgLTE1MSw2ICsxNTYsNyBAQAogICAqCUBza19ub19jaGVjazogJVNPX05PX0NIRUNLIHNldHRpbmcsIHdldGhlciBvciBub3QgY2hlY2t1cCBwYWNrZXRzCiAgICoJQHNrX3JvdXRlX2NhcHM6IHJvdXRlIGNhcGFiaWxpdGllcyAoZS5nLiAlTkVUSUZfRl9UU08pCiAgICoJQHNrX2dzb190eXBlOiBHU08gdHlwZSAoZS5nLiAlU0tCX0dTT19UQ1BWNCkKKyAgKglAc2tfZ3NvX21heF9zaXplOiBNYXhpbXVtIEdTTyBzZWdtZW50IHNpemUgdG8gYnVpbGQKICAgKglAc2tfbGluZ2VydGltZTogJVNPX0xJTkdFUiBsX2xpbmdlciBzZXR0aW5nCiAgICoJQHNrX2JhY2tsb2c6IGFsd2F5cyB1c2VkIHdpdGggdGhlIHBlci1zb2NrZXQgc3BpbmxvY2sgaGVsZAogICAqCUBza19jYWxsYmFja19sb2NrOiB1c2VkIHdpdGggdGhlIGNhbGxiYWNrcyBpbiB0aGUgZW5kIG9mIHRoaXMgc3RydWN0CkBAIC0xODAsNiArMTg2LDcgQEAKICAgKglAc2tfc25kbXNnX29mZjogY2FjaGVkIG9mZnNldCBmb3Igc2VuZG1zZwogICAqCUBza19zZW5kX2hlYWQ6IGZyb250IG9mIHN0dWZmIHRvIHRyYW5zbWl0CiAgICoJQHNrX3NlY3VyaXR5OiB1c2VkIGJ5IHNlY3VyaXR5IG1vZHVsZXMKKyAgKglAc2tfbWFyazogZ2VuZXJpYyBwYWNrZXQgbWFyawogICAqCUBza193cml0ZV9wZW5kaW5nOiBhIHdyaXRlIHRvIHN0cmVhbSBzb2NrZXQgd2FpdHMgdG8gc3RhcnQKICAgKglAc2tfc3RhdGVfY2hhbmdlOiBjYWxsYmFjayB0byBpbmRpY2F0ZSBjaGFuZ2UgaW4gdGhlIHN0YXRlIG9mIHRoZSBzb2NrCiAgICoJQHNrX2RhdGFfcmVhZHk6IGNhbGxiYWNrIHRvIGluZGljYXRlIHRoZXJlIGlzIGRhdGEgdG8gYmUgcHJvY2Vzc2VkCkBAIC0yMzYsNiArMjQzLDcgQEAKIAlnZnBfdAkJCXNrX2FsbG9jYXRpb247CiAJaW50CQkJc2tfcm91dGVfY2FwczsKIAlpbnQJCQlza19nc29fdHlwZTsKKwl1bnNpZ25lZCBpbnQJCXNrX2dzb19tYXhfc2l6ZTsKIAlpbnQJCQlza19yY3Zsb3dhdDsKIAl1bnNpZ25lZCBsb25nIAkJc2tfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZwkgICAgICAgIHNrX2xpbmdlcnRpbWU7CkBAIC00OTcsNiArNTA1LDcgQEAKIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzOwogc3RydWN0IHRpbWV3YWl0X3NvY2tfb3BzOwogc3RydWN0IGluZXRfaGFzaGluZm87CitzdHJ1Y3QgcmF3X2hhc2hpbmZvOwogCiAvKiBOZXR3b3JraW5nIHByb3RvY29sIGJsb2NrcyB3ZSBhdHRhY2ggdG8gc29ja2V0cy4KICAqIHNvY2tldCBsYXllciAtPiB0cmFuc3BvcnQgbGF5ZXIgaW50ZXJmYWNlCkBAIC01NTIsNyArNTYxLDcgQEAKIAogCS8qIEtlZXBpbmcgdHJhY2sgb2Ygc29ja2V0cyBpbiB1c2UgKi8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwY291bnRlcgkJaW51c2U7CisJdW5zaWduZWQgaW50CQlpbnVzZV9pZHg7CiAjZW5kaWYKIAogCS8qIE1lbW9yeSBwcmVzc3VyZSAqLwpAQCAtNTc5LDcgKzU4OCwxMSBAQAogCXN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzCSpyc2tfcHJvdDsKIAlzdHJ1Y3QgdGltZXdhaXRfc29ja19vcHMgKnR3c2tfcHJvdDsKIAotCXN0cnVjdCBpbmV0X2hhc2hpbmZvCSpoYXNoaW5mbzsKKwl1bmlvbiB7CisJCXN0cnVjdCBpbmV0X2hhc2hpbmZvCSpoYXNoaW5mbzsKKwkJc3RydWN0IGhsaXN0X2hlYWQJKnVkcF9oYXNoOworCQlzdHJ1Y3QgcmF3X2hhc2hpbmZvCSpyYXdfaGFzaDsKKwl9IGg7CiAKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAKQEAgLTYyMSwzNiArNjM0LDEyIEBACiAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0jIGRlZmluZSBERUZJTkVfUFJPVE9fSU5VU0UoTkFNRSkgREVGSU5FX1BDT1VOVEVSKE5BTUUpCi0jIGRlZmluZSBSRUZfUFJPVE9fSU5VU0UoTkFNRSkgUENPVU5URVJfTUVNQkVSX0lOSVRJQUxJWkVSKE5BTUUsIC5pbnVzZSkKIC8qIENhbGxlZCB3aXRoIGxvY2FsIGJoIGRpc2FibGVkICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19wcm90X2ludXNlX2FkZChzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBpbmMpCi17Ci0JcGNvdW50ZXJfYWRkKCZwcm90LT5pbnVzZSwgaW5jKTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcHJvdF9pbnVzZV9pbml0KHN0cnVjdCBwcm90byAqcHJvdG8pCi17Ci0JcmV0dXJuIHBjb3VudGVyX2FsbG9jKCZwcm90by0+aW51c2UpOwotfQotc3RhdGljIGlubGluZSBpbnQgc29ja19wcm90X2ludXNlX2dldChzdHJ1Y3QgcHJvdG8gKnByb3RvKQotewotCXJldHVybiBwY291bnRlcl9nZXR2YWwoJnByb3RvLT5pbnVzZSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc29ja19wcm90X2ludXNlX2ZyZWUoc3RydWN0IHByb3RvICpwcm90bykKLXsKLQlwY291bnRlcl9mcmVlKCZwcm90by0+aW51c2UpOwotfQorZXh0ZXJuIHZvaWQgc29ja19wcm90X2ludXNlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGluYyk7CitleHRlcm4gaW50IHNvY2tfcHJvdF9pbnVzZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHJvdG8gKnByb3RvKTsKICNlbHNlCi0jIGRlZmluZSBERUZJTkVfUFJPVE9fSU5VU0UoTkFNRSkKLSMgZGVmaW5lIFJFRl9QUk9UT19JTlVTRShOQU1FKQotc3RhdGljIHZvaWQgaW5saW5lIHNvY2tfcHJvdF9pbnVzZV9hZGQoc3RydWN0IHByb3RvICpwcm90LCBpbnQgaW5jKQotewotfQotc3RhdGljIGludCBpbmxpbmUgc29ja19wcm90X2ludXNlX2luaXQoc3RydWN0IHByb3RvICpwcm90bykKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyB2b2lkIGlubGluZSBzb2NrX3Byb3RfaW51c2VfZnJlZShzdHJ1Y3QgcHJvdG8gKnByb3RvKQorc3RhdGljIHZvaWQgaW5saW5lIHNvY2tfcHJvdF9pbnVzZV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHJvdG8gKnByb3QsCisJCWludCBpbmMpCiB7CiB9CiAjZW5kaWYKQEAgLTg0OSw2ICs4MzgsNyBAQAogCQkJCQkgIGdmcF90IHByaW9yaXR5LAogCQkJCQkgIHN0cnVjdCBwcm90byAqcHJvdCk7CiBleHRlcm4gdm9pZAkJCXNrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkCQkJc2tfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBzdHJ1Y3Qgc29jawkJKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBjb25zdCBnZnBfdCBwcmlvcml0eSk7CiAKQEAgLTkzOCw0MSArOTI4LDYgQEAKIGV4dGVybiB2b2lkIHNvY2tfaW5pdF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrICpzayk7CiAKIC8qKgotICoJc2tfZmlsdGVyIC0gcnVuIGEgcGFja2V0IHRocm91Z2ggYSBzb2NrZXQgZmlsdGVyCi0gKglAc2s6IHNvY2sgYXNzb2NpYXRlZCB3aXRoICZza19idWZmCi0gKglAc2tiOiBidWZmZXIgdG8gZmlsdGVyCi0gKglAbmVlZGxvY2s6IHNldCB0byAxIGlmIHRoZSBzb2NrIGlzIG5vdCBsb2NrZWQgYnkgY2FsbGVyLgotICoKLSAqIFJ1biB0aGUgZmlsdGVyIGNvZGUgYW5kIHRoZW4gY3V0IHNrYi0+ZGF0YSB0byBjb3JyZWN0IHNpemUgcmV0dXJuZWQgYnkKLSAqIHNrX3J1bl9maWx0ZXIuIElmIHBrdF9sZW4gaXMgMCB3ZSB0b3NzIHBhY2tldC4gSWYgc2tiLT5sZW4gaXMgc21hbGxlcgotICogdGhhbiBwa3RfbGVuIHdlIGtlZXAgd2hvbGUgc2tiLT5kYXRhLiBUaGlzIGlzIHRoZSBzb2NrZXQgbGV2ZWwKLSAqIHdyYXBwZXIgdG8gc2tfcnVuX2ZpbHRlci4gSXQgcmV0dXJucyAwIGlmIHRoZSBwYWNrZXQgc2hvdWxkCi0gKiBiZSBhY2NlcHRlZCBvciAtRVBFUk0gaWYgdGhlIHBhY2tldCBzaG91bGQgYmUgdG9zc2VkLgotICoKLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBza19maWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyOwotCQotCWVyciA9IHNlY3VyaXR5X3NvY2tfcmN2X3NrYihzaywgc2tiKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCQotCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7Ci0JaWYgKGZpbHRlcikgewotCQl1bnNpZ25lZCBpbnQgcGt0X2xlbiA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLAotCQkJCWZpbHRlci0+bGVuKTsKLQkJZXJyID0gcGt0X2xlbiA/IHBza2JfdHJpbShza2IsIHBrdF9sZW4pIDogLUVQRVJNOwotCX0KLSAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKioKICAqCXNrX2ZpbHRlcl9yZWxlYXNlOiBSZWxlYXNlIGEgc29ja2V0IGZpbHRlcgogICoJQHNrOiBzb2NrZXQKICAqCUBmcDogZmlsdGVyIHRvIHJlbW92ZQpAQCAtMTMzMiw2ICsxMjg3LDM2IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZQorc3RydWN0IG5ldCAqc29ja19uZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlyZXR1cm4gc2stPnNrX25ldDsKKyNlbHNlCisJcmV0dXJuICZpbml0X25ldDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lCit2b2lkIHNvY2tfbmV0X3NldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXQgKm5ldCkKK3sKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJc2stPnNrX25ldCA9IG5ldDsKKyNlbmRpZgorfQorCisvKgorICogS2VybmVsIHNvY2tldHMsIGYuZS4gcnRubCBvciBpY21wX3NvY2tldCwgYXJlIGEgcGFydCBvZiBhIG5hbWVzcGFjZS4KKyAqIFRoZXkgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJyZW5jZSB0byBhIG5hbWVzcGFjZSBpbiBvcmRlciB0byBhbGxvdworICogdG8gc3RvcCBpdC4KKyAqIFNvY2tldHMgYWZ0ZXIgc2tfY2hhbmdlX25ldCBzaG91bGQgYmUgcmVsZWFzZWQgdXNpbmcgc2tfcmVsZWFzZV9rZXJuZWwKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNrX2NoYW5nZV9uZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcHV0X25ldChzb2NrX25ldChzaykpOworCXNvY2tfbmV0X3NldChzaywgaG9sZF9uZXQobmV0KSk7Cit9CisKIGV4dGVybiB2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIGludCBzb2NrX2dldF90aW1lc3RhbXAoc3RydWN0IHNvY2sgKiwgc3RydWN0IHRpbWV2YWwgX191c2VyICopOwogZXh0ZXJuIGludCBzb2NrX2dldF90aW1lc3RhbXBucyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA3ZGU0ZWEzLi42MzMxNDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD4KQEAgLTEzOCw2ICsxMzksNyBAQAogI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTAkzMjc2NwogI2RlZmluZSBNQVhfVENQX0tFRVBDTlQJCTEyNwogI2RlZmluZSBNQVhfVENQX1NZTkNOVAkJMTI3CisjZGVmaW5lIE1BWF9UQ1BfQUNDRVBUX0RFRkVSUkVEIDY1NTM1CiAKICNkZWZpbmUgVENQX1NZTlFfSU5URVJWQUwJKEhaLzUpCS8qIFBlcmlvZCBvZiBTWU5BQ0sgdGltZXIgKi8KIApAQCAtNDM0LDExICs0MzYsMjAgQEAKIGV4dGVybiB2b2lkCQkJdGNwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spOwogCiAvKiBGcm9tIHN5bmNvb2tpZXMuYyAqLworZXh0ZXJuIF9fdTMyIHN5bmNvb2tpZV9zZWNyZXRbMl1bMTYtNCtTSEFfRElHRVNUX1dPUkRTXTsKIGV4dGVybiBzdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCiAJCQkJICAgIHN0cnVjdCBpcF9vcHRpb25zICpvcHQpOwogZXh0ZXJuIF9fdTMyIGNvb2tpZV92NF9pbml0X3NlcXVlbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCiAJCQkJICAgICBfX3UxNiAqbXNzKTsKIAorZXh0ZXJuIF9fdTMyIGNvb2tpZV9pbml0X3RpbWVzdGFtcChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOworZXh0ZXJuIHZvaWQgY29va2llX2NoZWNrX3RpbWVzdGFtcChzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnRjcF9vcHQpOworCisvKiBGcm9tIG5ldC9pcHY2L3N5bmNvb2tpZXMuYyAqLworZXh0ZXJuIHN0cnVjdCBzb2NrICpjb29raWVfdjZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBfX3UzMiBjb29raWVfdjZfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBfX3UxNiAqbXNzKTsKKwogLyogdGNwX291dHB1dC5jICovCiAKIGV4dGVybiB2b2lkIF9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY3VyX21zcywKQEAgLTc1Miw2ICs3NjMsOCBAQAogCXJldHVybiB0cC0+cGFja2V0c19vdXQgLSB0Y3BfbGVmdF9vdXQodHApICsgdHAtPnJldHJhbnNfb3V0OwogfQogCitleHRlcm4gaW50IHRjcF9saW1pdF9yZW5vX3NhY2tlZChzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKKwogLyogSWYgY3duZCA+IHNzdGhyZXNoLCB3ZSBtYXkgcmFpc2Ugc3N0aHJlc2ggdG8gYmUgaGFsZi13YXkgdG8gY3duZC4KICAqIFRoZSBleGNlcHRpb24gaXMgcmF0ZSBoYWx2aW5nIHBoYXNlLCB3aGVuIGN3bmQgaXMgZGVjcmVhc2luZyB0b3dhcmRzCiAgKiBzc3RocmVzaC4KQEAgLTc3NCwxMSArNzg3LDE0IEBACiBleHRlcm4gX191MzIgdGNwX2luaXRfY3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwogCiAvKiBTbG93IHN0YXJ0IHdpdGggZGVsYWNrIHByb2R1Y2VzIDMgcGFja2V0cyBvZiBidXJzdCwgc28gdGhhdAotICogaXQgaXMgc2FmZSAiZGUgZmFjdG8iLgorICogaXQgaXMgc2FmZSAiZGUgZmFjdG8iLiAgVGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0IC0gc2FtZSBhcworICogdGhlIGRlZmF1bHQgcmVvcmRlcmluZyB0aHJlc2hvbGQgLSBidXQgaWYgcmVvcmRlcmluZyBpbmNyZWFzZXMsCisgKiB3ZSBtdXN0IGJlIGFibGUgdG8gYWxsb3cgY3duZCB0byBidXJzdCBhdCBsZWFzdCB0aGlzIG11Y2ggaW4gb3JkZXIKKyAqIHRvIG5vdCBwdWxsIGl0IGJhY2sgd2hlbiBob2xlcyBhcmUgZmlsbGVkLgogICovCiBzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiB0Y3BfbWF4X2J1cnN0KGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApCiB7Ci0JcmV0dXJuIDM7CisJcmV0dXJuIHRwLT5yZW9yZGVyaW5nOwogfQogCiAvKiBSZXR1cm5zIGVuZCBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHJlY2VpdmVyJ3MgYWR2ZXJ0aXNlZCB3aW5kb3cgKi8KQEAgLTk0OCw2ICs5NjQsNyBAQAogCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAKIAlyZXEtPnJjdl93bmQgPSAwOwkJLyogU28gdGhhdCB0Y3Bfc2VuZF9zeW5hY2soKSBrbm93cyEgKi8KKwlyZXEtPmNvb2tpZV90cyA9IDA7CiAJdGNwX3JzayhyZXEpLT5yY3ZfaXNuID0gVENQX1NLQl9DQihza2IpLT5zZXE7CiAJcmVxLT5tc3MgPSByeF9vcHQtPm1zc19jbGFtcDsKIAlyZXEtPnRzX3JlY2VudCA9IHJ4X29wdC0+c2F3X3RzdGFtcCA/IHJ4X29wdC0+cmN2X3RzdmFsIDogMDsKQEAgLTEyMzUsNyArMTI1Miw3IEBACiAJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZiwKIAkJCQkJCXN0cnVjdCBzb2NrICpzaykKIHsKLQlfX3NrYl9hcHBlbmQoc2tiLCBidWZmLCAmc2stPnNrX3dyaXRlX3F1ZXVlKTsKKwlfX3NrYl9xdWV1ZV9hZnRlcigmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IsIGJ1ZmYpOwogfQogCiAvKiBJbnNlcnQgc2tiIGJldHdlZW4gcHJldiBhbmQgbmV4dCBvbiB0aGUgd3JpdGUgcXVldWUgb2Ygc2suICAqLwpAQCAtMTMxMywyNSArMTMzMCwyNSBAQAogfTsKIAogc3RydWN0IHRjcF9zZXFfYWZpbmZvIHsKLQlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAJY2hhcgkJCSpuYW1lOwogCXNhX2ZhbWlseV90CQlmYW1pbHk7Ci0JaW50CQkJKCpzZXFfc2hvdykgKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqc2VxX2ZvcHM7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwlzZXFfZm9wczsKKwlzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMJc2VxX29wczsKIH07CiAKIHN0cnVjdCB0Y3BfaXRlcl9zdGF0ZSB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZQlwOwogCXNhX2ZhbWlseV90CQlmYW1pbHk7CiAJZW51bSB0Y3Bfc2VxX3N0YXRlcwlzdGF0ZTsKIAlzdHJ1Y3Qgc29jawkJKnN5bl93YWl0X3NrOwogCWludAkJCWJ1Y2tldCwgc2J1Y2tldCwgbnVtLCB1aWQ7Ci0Jc3RydWN0IHNlcV9vcGVyYXRpb25zCXNlcV9vcHM7CiB9OwogCi1leHRlcm4gaW50IHRjcF9wcm9jX3JlZ2lzdGVyKHN0cnVjdCB0Y3Bfc2VxX2FmaW5mbyAqYWZpbmZvKTsKLWV4dGVybiB2b2lkIHRjcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IHRjcF9zZXFfYWZpbmZvICphZmluZm8pOworZXh0ZXJuIGludCB0Y3BfcHJvY19yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y3Bfc2VxX2FmaW5mbyAqYWZpbmZvKTsKK2V4dGVybiB2b2lkIHRjcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNwX3NlcV9hZmluZm8gKmFmaW5mbyk7CiAKIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyB0Y3BfcmVxdWVzdF9zb2NrX29wczsKK2V4dGVybiBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyB0Y3A2X3JlcXVlc3Rfc29ja19vcHM7CiAKIGV4dGVybiBpbnQgdGNwX3Y0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCkBAIC0xMzczLDcgKzEzOTAsNyBAQAogI2VuZGlmCiB9OwogCi1leHRlcm4gdm9pZCB0Y3BfdjRfaW5pdChzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKTsKK2V4dGVybiB2b2lkIHRjcF92NF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdGNwX2luaXQodm9pZCk7CiAKICNlbmRpZgkvKiBfVENQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19iZWFyZXIuaCBiL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19iZWFyZXIuaAppbmRleCAyMTUxYTgwLi5lZTJmMzA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90aXBjL3RpcGNfYmVhcmVyLmgKKysrIGIvaW5jbHVkZS9uZXQvdGlwYy90aXBjX2JlYXJlci5oCkBAIC05OSw2ICs5OSw5IEBACiAJY2hhciBuYW1lW1RJUENfTUFYX0JFQVJFUl9OQU1FXTsKIH07CiAKKy8qCisgKiBUSVBDIHJvdXRpbmVzIGF2YWlsYWJsZSB0byBzdXBwb3J0ZWQgbWVkaWEgdHlwZXMKKyAqLwogCiBpbnQgIHRpcGNfcmVnaXN0ZXJfbWVkaWEodTMyIG1lZGlhX3R5cGUsCiAJCQkgY2hhciAqbWVkaWFfbmFtZSwgCkBAIC0xMjMsNiArMTI2LDEyIEBACiBpbnQgdGlwY19lbmFibGVfYmVhcmVyKGNvbnN0IGNoYXIgKmJlYXJlcl9uYW1lLCB1MzIgYmNhc3Rfc2NvcGUsIHUzMiBwcmlvcml0eSk7CiBpbnQgdGlwY19kaXNhYmxlX2JlYXJlcihjb25zdCBjaGFyICpuYW1lKTsKIAorLyoKKyAqIFJvdXRpbmVzIG1hZGUgYXZhaWxhYmxlIHRvIFRJUEMgYnkgc3VwcG9ydGVkIG1lZGlhIHR5cGVzCisgKi8KKworaW50ICB0aXBjX2V0aF9tZWRpYV9zdGFydCh2b2lkKTsKK3ZvaWQgdGlwY19ldGhfbWVkaWFfc3RvcCh2b2lkKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19wb3J0LmggYi9pbmNsdWRlL25ldC90aXBjL3RpcGNfcG9ydC5oCmluZGV4IGNmYzRiYTQuLjExMTA1YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19wb3J0LmgKKysrIGIvaW5jbHVkZS9uZXQvdGlwYy90aXBjX3BvcnQuaApAQCAtODYsMTMgKzg2LDYgQEAKIAkJCXZvaWQgKCp3YWtldXApKHN0cnVjdCB0aXBjX3BvcnQgKiksCiAJCQljb25zdCB1MzIgaW1wb3J0YW5jZSk7CiAKLS8qCi0gKiB0aXBjX3NldF9tc2dfb3B0aW9uKCk6IHBvcnQgbXVzdCBiZSBsb2NrZWQuCi0gKi8KLWludCB0aXBjX3NldF9tc2dfb3B0aW9uKHN0cnVjdCB0aXBjX3BvcnQgKnRwX3B0ciwKLQkJCWNvbnN0IGNoYXIgKm9wdCwKLQkJCWNvbnN0IHUzMiBsZW4pOwotCiBpbnQgdGlwY19yZWplY3RfbXNnKHN0cnVjdCBza19idWZmICpidWYsIHUzMiBlcnIpOwogCiBpbnQgdGlwY19zZW5kX2J1Zl9mYXN0KHN0cnVjdCBza19idWZmICpidWYsIHUzMiBkZXN0bm9kZSk7CkBAIC0xMDMsNiArOTYsMTIgQEAKIAogdm9pZCAqdGlwY19nZXRfaGFuZGxlKGNvbnN0IHUzMiByZWYpOwogCisvKgorICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyByZXF1aXJlIHRoYXQgdGhlIHBvcnQgYmUgbG9ja2VkIG9uIGVudHJ5CisgKi8KKworaW50IHRpcGNfZGlzY29ubmVjdF9wb3J0KHN0cnVjdCB0aXBjX3BvcnQgKnRwX3B0cik7CisKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3VkcC5oIGIvaW5jbHVkZS9uZXQvdWRwLmgKaW5kZXggYzY2NjljMC4uM2U1NWE5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdWRwLmgKKysrIGIvaW5jbHVkZS9uZXQvdWRwLmgKQEAgLTExNSw3ICsxMTUsNyBAQAogCXdyaXRlX2xvY2tfYmgoJnVkcF9oYXNoX2xvY2spOwogCWlmIChza19kZWxfbm9kZV9pbml0KHNrKSkgewogCQlpbmV0X3NrKHNrKS0+bnVtID0gMDsKLQkJc29ja19wcm90X2ludXNlX2FkZChzay0+c2tfcHJvdCwgLTEpOworCQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIC0xKTsKIAl9CiAJd3JpdGVfdW5sb2NrX2JoKCZ1ZHBfaGFzaF9sb2NrKTsKIH0KQEAgLTEyNSw2ICsxMjUsOCBAQAogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIH0KIAorZXh0ZXJuIGludAl1ZHBfbGliX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKKwkJaW50ICgqKShjb25zdCBzdHJ1Y3Qgc29jayosY29uc3Qgc3RydWN0IHNvY2sqKSk7CiAKIC8qIG5ldC9pcHY0L3VkcC5jICovCiBleHRlcm4gaW50CXVkcF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCkBAIC0xODMsMjQgKzE4NSwyMyBAQAogCiAvKiAvcHJvYyAqLwogc3RydWN0IHVkcF9zZXFfYWZpbmZvIHsKLQlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAJY2hhcgkJCSpuYW1lOwogCXNhX2ZhbWlseV90CQlmYW1pbHk7CiAJc3RydWN0IGhsaXN0X2hlYWQJKmhhc2h0YWJsZTsKLQlpbnQgCQkJKCpzZXFfc2hvdykgKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqc2VxX2ZvcHM7Ci19OwotCi1zdHJ1Y3QgdWRwX2l0ZXJfc3RhdGUgewotCXNhX2ZhbWlseV90CQlmYW1pbHk7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJKmhhc2h0YWJsZTsKLQlpbnQJCQlidWNrZXQ7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwlzZXFfZm9wczsKIAlzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMJc2VxX29wczsKIH07CiAKK3N0cnVjdCB1ZHBfaXRlcl9zdGF0ZSB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSAgcDsKKwlzYV9mYW1pbHlfdAkJZmFtaWx5OworCXN0cnVjdCBobGlzdF9oZWFkCSpoYXNodGFibGU7CisJaW50CQkJYnVja2V0OworfTsKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gaW50IHVkcF9wcm9jX3JlZ2lzdGVyKHN0cnVjdCB1ZHBfc2VxX2FmaW5mbyAqYWZpbmZvKTsKLWV4dGVybiB2b2lkIHVkcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IHVkcF9zZXFfYWZpbmZvICphZmluZm8pOworZXh0ZXJuIGludCB1ZHBfcHJvY19yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1ZHBfc2VxX2FmaW5mbyAqYWZpbmZvKTsKK2V4dGVybiB2b2lkIHVkcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gKmFmaW5mbyk7CiAKIGV4dGVybiBpbnQgIHVkcDRfcHJvY19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgdWRwNF9wcm9jX2V4aXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oIGIvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaAppbmRleCBkMzBjNGJhLi42NjdiNDA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKQEAgLTEzLDYgKzEzLDE2MiBAQAogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCiAvKioKKyAqIGVudW0gaWVlZTgwMjExX2JhbmQgLSBzdXBwb3J0ZWQgZnJlcXVlbmN5IGJhbmRzCisgKgorICogVGhlIGJhbmRzIGFyZSBhc3NpZ25lZCB0aGlzIHdheSBiZWNhdXNlIHRoZSBzdXBwb3J0ZWQKKyAqIGJpdHJhdGVzIGRpZmZlciBpbiB0aGVzZSBiYW5kcy4KKyAqCisgKiBASUVFRTgwMjExX0JBTkRfMkdIWjogMi40R0h6IElTTSBiYW5kCisgKiBASUVFRTgwMjExX0JBTkRfNUdIWjogYXJvdW5kIDVHSHogYmFuZCAoNC45LTUuNykKKyAqLworZW51bSBpZWVlODAyMTFfYmFuZCB7CisJSUVFRTgwMjExX0JBTkRfMkdIWiwKKwlJRUVFODAyMTFfQkFORF81R0haLAorCisJLyoga2VlcCBsYXN0ICovCisJSUVFRTgwMjExX05VTV9CQU5EUworfTsKKworLyoqCisgKiBlbnVtIGllZWU4MDIxMV9jaGFubmVsX2ZsYWdzIC0gY2hhbm5lbCBmbGFncworICoKKyAqIENoYW5uZWwgZmxhZ3Mgc2V0IGJ5IHRoZSByZWd1bGF0b3J5IGNvbnRyb2wgY29kZS4KKyAqCisgKiBASUVFRTgwMjExX0NIQU5fRElTQUJMRUQ6IFRoaXMgY2hhbm5lbCBpcyBkaXNhYmxlZC4KKyAqIEBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU46IE9ubHkgcGFzc2l2ZSBzY2FubmluZyBpcyBwZXJtaXR0ZWQKKyAqCW9uIHRoaXMgY2hhbm5lbC4KKyAqIEBJRUVFODAyMTFfQ0hBTl9OT19JQlNTOiBJQlNTIGlzIG5vdCBhbGxvd2VkIG9uIHRoaXMgY2hhbm5lbC4KKyAqIEBJRUVFODAyMTFfQ0hBTl9SQURBUjogUmFkYXIgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkIG9uIHRoaXMgY2hhbm5lbC4KKyAqLworZW51bSBpZWVlODAyMTFfY2hhbm5lbF9mbGFncyB7CisJSUVFRTgwMjExX0NIQU5fRElTQUJMRUQJCT0gMTw8MCwKKwlJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4JPSAxPDwxLAorCUlFRUU4MDIxMV9DSEFOX05PX0lCU1MJCT0gMTw8MiwKKwlJRUVFODAyMTFfQ0hBTl9SQURBUgkJPSAxPDwzLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgLSBjaGFubmVsIGRlZmluaXRpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBzaW5nbGUgY2hhbm5lbCBmb3IgdXNlCisgKiB3aXRoIGNmZzgwMjExLgorICoKKyAqIEBjZW50ZXJfZnJlcTogY2VudGVyIGZyZXF1ZW5jeSBpbiBNSHoKKyAqIEBod192YWx1ZTogaGFyZHdhcmUtc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBjaGFubmVsCisgKiBAZmxhZ3M6IGNoYW5uZWwgZmxhZ3MgZnJvbSAmZW51bSBpZWVlODAyMTFfY2hhbm5lbF9mbGFncy4KKyAqIEBvcmlnX2ZsYWdzOiBjaGFubmVsIGZsYWdzIGF0IHJlZ2lzdHJhdGlvbiB0aW1lLCB1c2VkIGJ5IHJlZ3VsYXRvcnkKKyAqCWNvZGUgdG8gc3VwcG9ydCBkZXZpY2VzIHdpdGggYWRkaXRpb25hbCByZXN0cmljdGlvbnMKKyAqIEBiYW5kOiBiYW5kIHRoaXMgY2hhbm5lbCBiZWxvbmdzIHRvLgorICogQG1heF9hbnRlbm5hX2dhaW46IG1heGltdW0gYW50ZW5uYSBnYWluIGluIGRCaQorICogQG1heF9wb3dlcjogbWF4aW11bSB0cmFuc21pc3Npb24gcG93ZXIgKGluIGRCbSkKKyAqIEBvcmlnX21hZzogaW50ZXJuYWwgdXNlCisgKiBAb3JpZ19tcHdyOiBpbnRlcm5hbCB1c2UKKyAqLworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJdTE2IGNlbnRlcl9mcmVxOworCXUxNiBod192YWx1ZTsKKwl1MzIgZmxhZ3M7CisJaW50IG1heF9hbnRlbm5hX2dhaW47CisJaW50IG1heF9wb3dlcjsKKwl1MzIgb3JpZ19mbGFnczsKKwlpbnQgb3JpZ19tYWcsIG9yaWdfbXB3cjsKK307CisKKy8qKgorICogZW51bSBpZWVlODAyMTFfcmF0ZV9mbGFncyAtIHJhdGUgZmxhZ3MKKyAqCisgKiBIYXJkd2FyZS9zcGVjaWZpY2F0aW9uIGZsYWdzIGZvciByYXRlcy4gVGhlc2UgYXJlIHN0cnVjdHVyZWQKKyAqIGluIGEgd2F5IHRoYXQgYWxsb3dzIHVzaW5nIHRoZSBzYW1lIGJpdHJhdGUgc3RydWN0dXJlIGZvcgorICogZGlmZmVyZW50IGJhbmRzL1BIWSBtb2Rlcy4KKyAqCisgKiBASUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEU6IEhhcmR3YXJlIGNhbiBzZW5kIHdpdGggc2hvcnQKKyAqCXByZWFtYmxlIG9uIHRoaXMgYml0cmF0ZTsgb25seSByZWxldmFudCBpbiAyLjRHSHogYmFuZCBhbmQKKyAqCXdpdGggQ0NLIHJhdGVzLgorICogQElFRUU4MDIxMV9SQVRFX01BTkRBVE9SWV9BOiBUaGlzIGJpdHJhdGUgaXMgYSBtYW5kYXRvcnkgcmF0ZQorICoJd2hlbiB1c2VkIHdpdGggODAyLjExYSAob24gdGhlIDUgR0h6IGJhbmQpOyBmaWxsZWQgYnkgdGhlCisgKgljb3JlIGNvZGUgd2hlbiByZWdpc3RlcmluZyB0aGUgd2lwaHkuCisgKiBASUVFRTgwMjExX1JBVEVfTUFOREFUT1JZX0I6IFRoaXMgYml0cmF0ZSBpcyBhIG1hbmRhdG9yeSByYXRlCisgKgl3aGVuIHVzZWQgd2l0aCA4MDIuMTFiIChvbiB0aGUgMi40IEdIeiBiYW5kKTsgZmlsbGVkIGJ5IHRoZQorICoJY29yZSBjb2RlIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIHdpcGh5LgorICogQElFRUU4MDIxMV9SQVRFX01BTkRBVE9SWV9HOiBUaGlzIGJpdHJhdGUgaXMgYSBtYW5kYXRvcnkgcmF0ZQorICoJd2hlbiB1c2VkIHdpdGggODAyLjExZyAob24gdGhlIDIuNCBHSHogYmFuZCk7IGZpbGxlZCBieSB0aGUKKyAqCWNvcmUgY29kZSB3aGVuIHJlZ2lzdGVyaW5nIHRoZSB3aXBoeS4KKyAqIEBJRUVFODAyMTFfUkFURV9FUlBfRzogVGhpcyBpcyBhbiBFUlAgcmF0ZSBpbiA4MDIuMTFnIG1vZGUuCisgKi8KK2VudW0gaWVlZTgwMjExX3JhdGVfZmxhZ3MgeworCUlFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFCT0gMTw8MCwKKwlJRUVFODAyMTFfUkFURV9NQU5EQVRPUllfQQk9IDE8PDEsCisJSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZX0IJPSAxPDwyLAorCUlFRUU4MDIxMV9SQVRFX01BTkRBVE9SWV9HCT0gMTw8MywKKwlJRUVFODAyMTFfUkFURV9FUlBfRwkJPSAxPDw0LAorfTsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgLSBiaXRyYXRlIGRlZmluaXRpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBiaXRyYXRlIHRoYXQgYW4gODAyLjExIFBIWSBjYW4KKyAqIG9wZXJhdGUgd2l0aC4gVGhlIHR3byB2YWx1ZXMgQGh3X3ZhbHVlIGFuZCBAaHdfdmFsdWVfc2hvcnQKKyAqIGFyZSBvbmx5IGZvciBkcml2ZXIgdXNlIHdoZW4gcG9pbnRlcnMgdG8gdGhpcyBzdHJ1Y3R1cmUgYXJlCisgKiBwYXNzZWQgYXJvdW5kLgorICoKKyAqIEBmbGFnczogcmF0ZS1zcGVjaWZpYyBmbGFncworICogQGJpdHJhdGU6IGJpdHJhdGUgaW4gdW5pdHMgb2YgMTAwIEticHMKKyAqIEBod192YWx1ZTogZHJpdmVyL2hhcmR3YXJlIHZhbHVlIGZvciB0aGlzIHJhdGUKKyAqIEBod192YWx1ZV9zaG9ydDogZHJpdmVyL2hhcmR3YXJlIHZhbHVlIGZvciB0aGlzIHJhdGUgd2hlbgorICoJc2hvcnQgcHJlYW1ibGUgaXMgdXNlZAorICovCitzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgeworCXUzMiBmbGFnczsKKwl1MTYgYml0cmF0ZTsKKwl1MTYgaHdfdmFsdWUsIGh3X3ZhbHVlX3Nob3J0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gLSBkZXNjcmliaW5nIFNUQSdzIEhUIGNhcGFiaWxpdGllcworICoKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBtb3N0IGVzc2VudGlhbCBwYXJhbWV0ZXJzIG5lZWRlZAorICogdG8gZGVzY3JpYmUgODAyLjExbiBIVCBjYXBhYmlsaXRpZXMgZm9yIGFuIFNUQS4KKyAqCisgKiBAaHRfc3VwcG9ydGVkOiBpcyBIVCBzdXBwb3J0ZWQgYnkgU1RBLCAwOiBubywgMTogeWVzCisgKiBAY2FwOiBIVCBjYXBhYmlsaXRpZXMgbWFwIGFzIGRlc2NyaWJlZCBpbiA4MDIuMTFuIHNwZWMKKyAqIEBhbXBkdV9mYWN0b3I6IE1heGltdW0gQS1NUERVIGxlbmd0aCBmYWN0b3IKKyAqIEBhbXBkdV9kZW5zaXR5OiBNaW5pbXVtIEEtTVBEVSBzcGFjaW5nCisgKiBAc3VwcF9tY3Nfc2V0OiBTdXBwb3J0ZWQgTUNTIHNldCBhcyBkZXNjcmliZWQgaW4gODAyLjExbiBzcGVjCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyB7CisJdTE2IGNhcDsgLyogdXNlIElFRUU4MDIxMV9IVF9DQVBfICovCisJdTggaHRfc3VwcG9ydGVkOworCXU4IGFtcGR1X2ZhY3RvcjsKKwl1OCBhbXBkdV9kZW5zaXR5OworCXU4IHN1cHBfbWNzX3NldFsxNl07Cit9OworCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgLSBmcmVxdWVuY3kgYmFuZCBkZWZpbml0aW9uCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgZnJlcXVlbmN5IGJhbmQgYSB3aXBoeQorICogaXMgYWJsZSB0byBvcGVyYXRlIGluLgorICoKKyAqIEBjaGFubmVsczogQXJyYXkgb2YgY2hhbm5lbHMgdGhlIGhhcmR3YXJlIGNhbiBvcGVyYXRlIGluCisgKglpbiB0aGlzIGJhbmQuCisgKiBAYmFuZDogdGhlIGJhbmQgdGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cworICogQG5fY2hhbm5lbHM6IE51bWJlciBvZiBjaGFubmVscyBpbiBAY2hhbm5lbHMKKyAqIEBiaXRyYXRlczogQXJyYXkgb2YgYml0cmF0ZXMgdGhlIGhhcmR3YXJlIGNhbiBvcGVyYXRlIHdpdGgKKyAqCWluIHRoaXMgYmFuZC4gTXVzdCBiZSBzb3J0ZWQgdG8gZ2l2ZSBhIHZhbGlkICJzdXBwb3J0ZWQKKyAqCXJhdGVzIiBJRSwgaS5lLiBDQ0sgcmF0ZXMgZmlyc3QsIHRoZW4gT0ZETS4KKyAqIEBuX2JpdHJhdGVzOiBOdW1iZXIgb2YgYml0cmF0ZXMgaW4gQGJpdHJhdGVzCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHM7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJaW50IG5fY2hhbm5lbHM7CisJaW50IG5fYml0cmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvIGh0X2luZm87Cit9OworCisvKioKICAqIHN0cnVjdCB3aXBoeSAtIHdpcmVsZXNzIGhhcmR3YXJlIGRlc2NyaXB0aW9uCiAgKiBAaWR4OiB0aGUgd2lwaHkgaW5kZXggYXNzaWduZWQgdG8gdGhpcyBpdGVtCiAgKiBAY2xhc3NfZGV2OiB0aGUgY2xhc3MgZGV2aWNlIHJlcHJlc2VudGluZyAvc3lzL2NsYXNzL2llZWU4MDIxMS88d2lwaHktbmFtZT4KQEAgLTMwLDYgKzE4Niw4IEBACiAJICogaGVscCBkZXRlcm1pbmUgd2hldGhlciB5b3Ugb3duIHRoaXMgd2lwaHkgb3Igbm90LiAqLwogCXZvaWQgKnByaXZpZDsKIAorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCiAJLyogZmllbGRzIGJlbG93IGFyZSByZWFkLW9ubHksIGFzc2lnbmVkIGJ5IGNmZzgwMjExICovCiAKIAkvKiB0aGUgaXRlbSBpbiAvc3lzL2NsYXNzL2llZWU4MDIxMS8gcG9pbnRzIHRvIHRoaXMsCkBAIC0xMzYsNCArMjk0LDMyIEBACiAgKi8KIGV4dGVybiB2b2lkIHdpcGh5X2ZyZWUoc3RydWN0IHdpcGh5ICp3aXBoeSk7CiAKKy8qKgorICogaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5IC0gY29udmVydCBjaGFubmVsIG51bWJlciB0byBmcmVxdWVuY3kKKyAqLworZXh0ZXJuIGludCBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koaW50IGNoYW4pOworCisvKioKKyAqIGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCAtIGNvbnZlcnQgZnJlcXVlbmN5IHRvIGNoYW5uZWwgbnVtYmVyCisgKi8KK2V4dGVybiBpbnQgaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGludCBmcmVxKTsKKworLyoKKyAqIE5hbWUgaW5kaXJlY3Rpb24gbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGllZWU4MDIxMSBjb2RlIGFsc28gaGFzCisgKiBhIGZ1bmN0aW9uIG5hbWVkICJpZWVlODAyMTFfZ2V0X2NoYW5uZWwiLCBzbyBpZiB5b3UgaW5jbHVkZQorICogY2ZnODAyMTEncyBoZWFkZXIgZmlsZSB5b3UgZ2V0IGNmZzgwMjExJ3MgdmVyc2lvbiwgaWYgeW91IHRyeQorICogdG8gaW5jbHVkZSBib3RoIGhlYWRlciBmaWxlcyB5b3UnbGwgKHJpZ2h0ZnVsbHkhKSBnZXQgYSBzeW1ib2wKKyAqIGNsYXNoLgorICovCitleHRlcm4gc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpfX2llZWU4MDIxMV9nZXRfY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkJCSBpbnQgZnJlcSk7CisKKy8qKgorICogaWVlZTgwMjExX2dldF9jaGFubmVsIC0gZ2V0IGNoYW5uZWwgc3RydWN0IGZyb20gd2lwaHkgZm9yIHNwZWNpZmllZCBmcmVxdWVuY3kKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKgoraWVlZTgwMjExX2dldF9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBmcmVxKQoreworCXJldHVybiBfX2llZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgZnJlcSk7Cit9CiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IGVlYTc3ODUuLmI1NmI2YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTEyMSw2ICsxMjEsNyBAQAogc3RydWN0IHhmcm1fc3RhdGUKIHsKIAkvKiBOb3RlOiBieWRzdCBpcyByZS11c2VkIGR1cmluZyBnYyAqLworCXN0cnVjdCBsaXN0X2hlYWQJYWxsOwogCXN0cnVjdCBobGlzdF9ub2RlCWJ5ZHN0OwogCXN0cnVjdCBobGlzdF9ub2RlCWJ5c3JjOwogCXN0cnVjdCBobGlzdF9ub2RlCWJ5c3BpOwpAQCAtMjA0LDYgKzIwNSw3IEBACiAJICogdHJhbnNmb3JtZXIuICovCiAJY29uc3Qgc3RydWN0IHhmcm1fdHlwZQkqdHlwZTsKIAlzdHJ1Y3QgeGZybV9tb2RlCSppbm5lcl9tb2RlOworCXN0cnVjdCB4ZnJtX21vZGUJKmlubmVyX21vZGVfaWFmOwogCXN0cnVjdCB4ZnJtX21vZGUJKm91dGVyX21vZGU7CiAKIAkvKiBTZWN1cml0eSBjb250ZXh0ICovCkBAIC0yNzcsNyArMjc5LDcgQEAKIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyB7CiAJdW5zaWduZWQgaW50CQlmYW1pbHk7CiAJdW5zaWduZWQgaW50CQlwcm90bzsKLQl1bnNpZ25lZCBpbnQJCWV0aF9wcm90bzsKKwlfX2JlMTYJCQlldGhfcHJvdG87CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCWNvbnN0IHN0cnVjdCB4ZnJtX3R5cGUJKnR5cGVfbWFwW0lQUFJPVE9fTUFYXTsKIAlzdHJ1Y3QgeGZybV9tb2RlCSptb2RlX21hcFtYRlJNX01PREVfTUFYXTsKQEAgLTM4Nyw2ICszODksMjcgQEAKIGV4dGVybiBpbnQgeGZybV9yZWdpc3Rlcl9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUsIGludCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtX3VucmVnaXN0ZXJfbW9kZShzdHJ1Y3QgeGZybV9tb2RlICptb2RlLCBpbnQgZmFtaWx5KTsKIAorc3RhdGljIGlubGluZSBpbnQgeGZybV9hZjJwcm90byh1bnNpZ25lZCBpbnQgZmFtaWx5KQoreworCXN3aXRjaChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiBJUFBST1RPX0lQSVA7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIElQUFJPVE9fSVBWNjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhmcm1fbW9kZSAqeGZybV9pcDJpbm5lcl9tb2RlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgaXBwcm90bykKK3sKKwlpZiAoKGlwcHJvdG8gPT0gSVBQUk9UT19JUElQICYmIHgtPnByb3BzLmZhbWlseSA9PSBBRl9JTkVUKSB8fAorCSAgICAoaXBwcm90byA9PSBJUFBST1RPX0lQVjYgJiYgeC0+cHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSkKKwkJcmV0dXJuIHgtPmlubmVyX21vZGU7CisJZWxzZQorCQlyZXR1cm4geC0+aW5uZXJfbW9kZV9pYWY7Cit9CisKIHN0cnVjdCB4ZnJtX3RtcGwKIHsKIC8qIGlkIGluIHRlbXBsYXRlIGlzIGludGVycHJldGVkIGFzOgpAQCAtNDI0LDYgKzQ0Nyw3IEBACiBzdHJ1Y3QgeGZybV9wb2xpY3kKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kJKm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZAlieXR5cGU7CiAJc3RydWN0IGhsaXN0X25vZGUJYnlkc3Q7CiAJc3RydWN0IGhsaXN0X25vZGUJYnlpZHg7CiAKQEAgLTUzMCw2ICs1NTQsOSBAQAogCV9fYmUxNiBpZDsKIAlfX2JlMTYgZnJhZ19vZmY7CiAKKwkvKiBJUCBoZWFkZXIgbGVuZ3RoIChleGNsdWRpbmcgb3B0aW9ucyBvciBleHRlbnNpb24gaGVhZGVycykuICovCisJdTggaWhsOworCiAJLyogVE9TIGZvciBJUHY0LCBjbGFzcyBmb3IgSVB2Ni4gKi8KIAl1OCB0b3M7CiAKQEAgLTUzOSw2ICs1NjYsOSBAQAogCS8qIFByb3RvY29sIGZvciBJUHY0LCBOSCBmb3IgSVB2Ni4gKi8KIAl1OCBwcm90b2NvbDsKIAorCS8qIE9wdGlvbiBsZW5ndGggZm9yIElQdjQsIHplcm8gZm9yIElQdjYuICovCisJdTggb3B0bGVuOworCiAJLyogVXNlZCBieSBJUHY2IG9ubHksIHplcm8gZm9yIElQdjQuICovCiAJdTggZmxvd19sYmxbM107CiB9OwpAQCAtMTA0Myw2ICsxMDczLDIzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIHhmcm1fZmxvd2lfYWRkcl9nZXQoc3RydWN0IGZsb3dpICpmbCwKKwkJCSB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHhmcm1fYWRkcmVzc190ICpkYWRkciwKKwkJCSB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJc3dpdGNoKGZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJbWVtY3B5KCZzYWRkci0+YTQsICZmbC0+Zmw0X3NyYywgc2l6ZW9mKHNhZGRyLT5hNCkpOworCQltZW1jcHkoJmRhZGRyLT5hNCwgJmZsLT5mbDRfZHN0LCBzaXplb2YoZGFkZHItPmE0KSk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWlwdjZfYWRkcl9jb3B5KChzdHJ1Y3QgaW42X2FkZHIgKikmc2FkZHItPmE2LCAmZmwtPmZsNl9zcmMpOworCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopJmRhZGRyLT5hNiwgJmZsLT5mbDZfZHN0KTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQKIF9feGZybTRfc3RhdGVfYWRkcl9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAkJCSB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKQEAgLTExNjAsNiArMTIwNywxOCBAQAogCWludCBwcmlvcml0eTsKIH07CiAKK3N0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgeworCXN0cnVjdCB4ZnJtX3N0YXRlICpzdGF0ZTsKKwlpbnQgY291bnQ7CisJdTggcHJvdG87Cit9OworCitzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayB7CisJc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3k7CisJaW50IGNvdW50OworCXU4IHR5cGUsIGN1cl90eXBlOworfTsKKwogZXh0ZXJuIHZvaWQgeGZybV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgeGZybTRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHhmcm1fc3RhdGVfaW5pdCh2b2lkKTsKQEAgLTExODQsNyArMTI0MywyMyBAQAogZXh0ZXJuIGludCB4ZnJtX3Byb2NfaW5pdCh2b2lkKTsKICNlbmRpZgogCi1leHRlcm4gaW50IHhmcm1fc3RhdGVfd2Fsayh1OCBwcm90bywgaW50ICgqZnVuYykoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50LCB2b2lkKiksIHZvaWQgKik7CitzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9zdGF0ZV93YWxrX2luaXQoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsaywgdTggcHJvdG8pCit7CisJd2Fsay0+cHJvdG8gPSBwcm90bzsKKwl3YWxrLT5zdGF0ZSA9IE5VTEw7CisJd2Fsay0+Y291bnQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9zdGF0ZV93YWxrX2RvbmUoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsaykKK3sKKwlpZiAod2Fsay0+c3RhdGUgIT0gTlVMTCkgeworCQl4ZnJtX3N0YXRlX3B1dCh3YWxrLT5zdGF0ZSk7CisJCXdhbGstPnN0YXRlID0gTlVMTDsKKwl9Cit9CisKK2V4dGVybiBpbnQgeGZybV9zdGF0ZV93YWxrKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGssCisJCQkgICBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSwgdm9pZCAqKTsKIGV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9hbGxvYyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9maW5kKHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCAKIAkJCQkJICBzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3QgeGZybV90bXBsICp0bXBsLApAQCAtMTI1Myw2ICsxMzI4LDcgQEAKIGV4dGVybiBpbnQgeGZybV9pbnB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpOwogZXh0ZXJuIGludCB4ZnJtX291dHB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7CiBleHRlcm4gaW50IHhmcm1fb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCB4ZnJtX2lubmVyX2V4dHJhY3Rfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTRfZXh0cmFjdF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm00X2V4dHJhY3RfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNF9yY3ZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksCkBAIC0xMzA2LDcgKzEzODIsMjUgQEAKICNlbmRpZgogCiBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2FsbG9jKGdmcF90IGdmcCk7Ci1leHRlcm4gaW50IHhmcm1fcG9saWN5X3dhbGsodTggdHlwZSwgaW50ICgqZnVuYykoc3RydWN0IHhmcm1fcG9saWN5ICosIGludCwgaW50LCB2b2lkKiksIHZvaWQgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3BvbGljeV93YWxrX2luaXQoc3RydWN0IHhmcm1fcG9saWN5X3dhbGsgKndhbGssIHU4IHR5cGUpCit7CisJd2Fsay0+Y3VyX3R5cGUgPSBYRlJNX1BPTElDWV9UWVBFX01BSU47CisJd2Fsay0+dHlwZSA9IHR5cGU7CisJd2Fsay0+cG9saWN5ID0gTlVMTDsKKwl3YWxrLT5jb3VudCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3BvbGljeV93YWxrX2RvbmUoc3RydWN0IHhmcm1fcG9saWN5X3dhbGsgKndhbGspCit7CisJaWYgKHdhbGstPnBvbGljeSAhPSBOVUxMKSB7CisJCXhmcm1fcG9sX3B1dCh3YWxrLT5wb2xpY3kpOworCQl3YWxrLT5wb2xpY3kgPSBOVUxMOworCX0KK30KKworZXh0ZXJuIGludCB4ZnJtX3BvbGljeV93YWxrKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLAorCWludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3BvbGljeSAqLCBpbnQsIGludCwgdm9pZCopLCB2b2lkICopOwogaW50IHhmcm1fcG9saWN5X2luc2VydChpbnQgZGlyLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwgaW50IGV4Y2wpOwogc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9ieXNlbF9jdHgodTggdHlwZSwgaW50IGRpciwKIAkJCQkJICBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKaW5kZXggNjRhNzIxZi4uOGQ2NWJmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCkBAIC01MzMsNyArNTMzLDEwIEBACiAJX191MzIgbnVtX3NnZTsKIAlfX3UzMiBvcGNvZGU7CiAJX191MzIgc2VuZF9mbGFnczsKLQlfX3UzMiBpbW1fZGF0YTsKKwl1bmlvbiB7CisJCV9fdTMyIGltbV9kYXRhOworCQlfX3UzMiBpbnZhbGlkYXRlX3JrZXk7CisJfSBleDsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQlfX3U2NCByZW1vdGVfYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggNzAxZTdiNC4uMmRjYmVjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTk0LDcgKzk0LDcgQEAKIAlJQl9ERVZJQ0VfU1JRX1JFU0laRQkJPSAoMTw8MTMpLAogCUlCX0RFVklDRV9OX05PVElGWV9DUQkJPSAoMTw8MTQpLAogCUlCX0RFVklDRV9aRVJPX1NUQUcJCT0gKDE8PDE1KSwKLQlJQl9ERVZJQ0VfU0VORF9XX0lOVgkJPSAoMTw8MTYpLAorCUlCX0RFVklDRV9SRVNFUlZFRAkJPSAoMTw8MTYpLCAvKiBvbGQgU0VORF9XX0lOViAqLwogCUlCX0RFVklDRV9NRU1fV0lORE9XCQk9ICgxPDwxNyksCiAJLyoKIAkgKiBEZXZpY2VzIHNob3VsZCBzZXQgSUJfREVWSUNFX1VEX0lQX1NVTSBpZiB0aGV5IHN1cHBvcnQKQEAgLTEwNCw2ICsxMDQsOCBAQAogCSAqIElQb0lCIGRyaXZlciBtYXkgc2V0IE5FVElGX0ZfSVBfQ1NVTSBmb3IgZGF0YWdyYW0gbW9kZS4KIAkgKi8KIAlJQl9ERVZJQ0VfVURfSVBfQ1NVTQkJPSAoMTw8MTgpLAorCUlCX0RFVklDRV9VRF9UU08JCT0gKDE8PDE5KSwKKwlJQl9ERVZJQ0VfU0VORF9XX0lOVgkJPSAoMTw8MjEpLAogfTsKIAogZW51bSBpYl9hdG9taWNfY2FwIHsKQEAgLTQxMSw2ICs0MTMsNyBAQAogCUlCX1dDX0NPTVBfU1dBUCwKIAlJQl9XQ19GRVRDSF9BREQsCiAJSUJfV0NfQklORF9NVywKKwlJQl9XQ19MU08sCiAvKgogICogU2V0IHZhbHVlIG9mIElCX1dDX1JFQ1Ygc28gY29uc3VtZXJzIGNhbiB0ZXN0IGlmIGEgY29tcGxldGlvbiBpcyBhCiAgKiByZWNlaXZlIGJ5IHRlc3RpbmcgKG9wY29kZSAmIElCX1dDX1JFQ1YpLgpAQCAtNDk1LDYgKzQ5OCwxMCBAQAogCUlCX1FQVF9SQVdfRVRZCiB9OwogCitlbnVtIGliX3FwX2NyZWF0ZV9mbGFncyB7CisJSUJfUVBfQ1JFQVRFX0lQT0lCX1VEX0xTTwk9IDEgPDwgMCwKK307CisKIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgewogCXZvaWQgICAgICAgICAgICAgICAgICAoKmV2ZW50X2hhbmRsZXIpKHN0cnVjdCBpYl9ldmVudCAqLCB2b2lkICopOwogCXZvaWQJCSAgICAgICAqcXBfY29udGV4dDsKQEAgLTUwNCw2ICs1MTEsNyBAQAogCXN0cnVjdCBpYl9xcF9jYXAJY2FwOwogCWVudW0gaWJfc2lnX3R5cGUJc3Ffc2lnX3R5cGU7CiAJZW51bSBpYl9xcF90eXBlCQlxcF90eXBlOworCWVudW0gaWJfcXBfY3JlYXRlX2ZsYWdzCWNyZWF0ZV9mbGFnczsKIAl1OAkJCXBvcnRfbnVtOyAvKiBzcGVjaWFsIFFQIHR5cGVzIG9ubHkgKi8KIH07CiAKQEAgLTYxNyw3ICs2MjUsOSBAQAogCUlCX1dSX1NFTkRfV0lUSF9JTU0sCiAJSUJfV1JfUkRNQV9SRUFELAogCUlCX1dSX0FUT01JQ19DTVBfQU5EX1NXUCwKLQlJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERAorCUlCX1dSX0FUT01JQ19GRVRDSF9BTkRfQURELAorCUlCX1dSX0xTTywKKwlJQl9XUl9TRU5EX1dJVEhfSU5WLAogfTsKIAogZW51bSBpYl9zZW5kX2ZsYWdzIHsKQEAgLTY0MSw3ICs2NTEsMTAgQEAKIAlpbnQJCQludW1fc2dlOwogCWVudW0gaWJfd3Jfb3Bjb2RlCW9wY29kZTsKIAlpbnQJCQlzZW5kX2ZsYWdzOwotCV9fYmUzMgkJCWltbV9kYXRhOworCXVuaW9uIHsKKwkJX19iZTMyCQlpbW1fZGF0YTsKKwkJdTMyCQlpbnZhbGlkYXRlX3JrZXk7CisJfSBleDsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQl1NjQJcmVtb3RlX2FkZHI7CkBAIC02NTUsNiArNjY4LDkgQEAKIAkJfSBhdG9taWM7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaWJfYWggKmFoOworCQkJdm9pZCAgICpoZWFkZXI7CisJCQlpbnQgICAgIGhsZW47CisJCQlpbnQgICAgIG1zczsKIAkJCXUzMglyZW1vdGVfcXBuOwogCQkJdTMyCXJlbW90ZV9xa2V5OwogCQkJdTE2CXBrZXlfaW5kZXg7IC8qIHZhbGlkIGZvciBHU0kgb25seSAqLwpAQCAtNzMwLDcgKzc0Niw3IEBACiAJc3RydWN0IGliX3Vjb250ZXh0ICAgICAqY29udGV4dDsJLyogYXNzb2NpYXRlZCB1c2VyIGNvbnRleHQgKi8KIAl2b2lkCQkgICAgICAgKm9iamVjdDsJCS8qIGNvbnRhaW5pbmcgb2JqZWN0ICovCiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogbGluayB0byBjb250ZXh0J3MgbGlzdCAqLwotCXUzMgkJCWlkOwkJLyogaW5kZXggaW50byBrZXJuZWwgaWRyICovCisJaW50CQkJaWQ7CQkvKiBpbmRleCBpbnRvIGtlcm5lbCBpZHIgKi8KIAlzdHJ1Y3Qga3JlZgkJcmVmOwogCXN0cnVjdCByd19zZW1hcGhvcmUJbXV0ZXg7CQkvKiBwcm90ZWN0cyAubGl2ZSAqLwogCWludAkJCWxpdmU7CkBAIC05NzEsNiArOTg3LDggQEAKIAkJCQkJCWludCBjb21wX3ZlY3RvciwKIAkJCQkJCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKIAkJCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqbW9kaWZ5X2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCB1MTYgY3FfY291bnQsCisJCQkJCQl1MTYgY3FfcGVyaW9kKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKmRlc3Ryb3lfY3EpKHN0cnVjdCBpYl9jcSAqY3EpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcmVzaXplX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgY3FlLAogCQkJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CkBAIC0xMDMzLDcgKzEwNTEsNyBAQAogCXN0cnVjdCBpYl9kbWFfbWFwcGluZ19vcHMgICAqZG1hX29wczsKIAogCXN0cnVjdCBtb2R1bGUgICAgICAgICAgICAgICAqb3duZXI7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAgICAgICAgICBjbGFzc19kZXY7CisJc3RydWN0IGRldmljZSAgICAgICAgICAgICAgICBkZXY7CiAJc3RydWN0IGtvYmplY3QgICAgICAgICAgICAgICAqcG9ydHNfcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgcG9ydF9saXN0OwogCkBAIC0xMzc2LDYgKzEzOTQsMTUgQEAKIGludCBpYl9yZXNpemVfY3Eoc3RydWN0IGliX2NxICpjcSwgaW50IGNxZSk7CiAKIC8qKgorICogaWJfbW9kaWZ5X2NxIC0gTW9kaWZpZXMgbW9kZXJhdGlvbiBwYXJhbXMgb2YgdGhlIENRCisgKiBAY3E6IFRoZSBDUSB0byBtb2RpZnkuCisgKiBAY3FfY291bnQ6IG51bWJlciBvZiBDUUVzIHRoYXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50CisgKiBAY3FfcGVyaW9kOiBtYXggcGVyaW9kIG9mIHRpbWUgaW4gdXNlYyBiZWZvcmUgdHJpZ2dlcmluZyBhbiBldmVudAorICoKKyAqLworaW50IGliX21vZGlmeV9jcShzdHJ1Y3QgaWJfY3EgKmNxLCB1MTYgY3FfY291bnQsIHUxNiBjcV9wZXJpb2QpOworCisvKioKICAqIGliX2Rlc3Ryb3lfY3EgLSBEZXN0cm95cyB0aGUgc3BlY2lmaWVkIENRLgogICogQGNxOiBUaGUgQ1EgdG8gZGVzdHJveS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2lzY3NpX3Byb3RvLmggYi9pbmNsdWRlL3Njc2kvaXNjc2lfcHJvdG8uaAppbmRleCA1ZmZlYzhhLi5lMDU5M2JmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvaXNjc2lfcHJvdG8uaAorKysgYi9pbmNsdWRlL3Njc2kvaXNjc2lfcHJvdG8uaApAQCAtMTEyLDYgKzExMiw3IEBACiAKICNkZWZpbmUgSVNDU0lfQUhTVFlQRV9DREIJCTEKICNkZWZpbmUgSVNDU0lfQUhTVFlQRV9STEVOR1RICQkyCisjZGVmaW5lIElTQ1NJX0NEQl9TSVpFCQkJMTYKIAogLyogaVNDU0kgUERVIEhlYWRlciAqLwogc3RydWN0IGlzY3NpX2NtZCB7CkBAIC0xMjUsNyArMTI2LDcgQEAKIAlfX2JlMzIgZGF0YV9sZW5ndGg7CiAJX19iZTMyIGNtZHNuOwogCV9fYmUzMiBleHBfc3RhdHNuOwotCXVpbnQ4X3QgY2RiWzE2XTsJLyogU0NTSSBDb21tYW5kIEJsb2NrICovCisJdWludDhfdCBjZGJbSVNDU0lfQ0RCX1NJWkVdOwkvKiBTQ1NJIENvbW1hbmQgQmxvY2sgKi8KIAkvKiBBZGRpdGlvbmFsIERhdGEgKENvbW1hbmQgRGVwZW5kZW50KSAqLwogfTsKIApAQCAtMTU0LDcgKzE1NSw4IEBACiAJX19iZTE2IGFoc2xlbmd0aDsJLyogQ0RCIGxlbmd0aCAtIDE1LCBpbmNsdWRpbmcgcmVzZXJ2ZWQgYnl0ZSAqLwogCXVpbnQ4X3QgYWhzdHlwZTsKIAl1aW50OF90IHJlc2VydmVkOwotCXVpbnQ4X3QgZWNkYlsyNjAgLSAxNl07CS8qIDQtYnl0ZSBhbGlnbmVkIGV4dGVuZGVkIENEQiBzcGlsbG92ZXIgKi8KKwkvKiA0LWJ5dGUgYWxpZ25lZCBleHRlbmRlZCBDREIgc3BpbGxvdmVyICovCisJdWludDhfdCBlY2RiWzI2MCAtIElTQ1NJX0NEQl9TSVpFXTsKIH07CiAKIC8qIFNDU0kgUmVzcG9uc2UgSGVhZGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGlic2FzLmggYi9pbmNsdWRlL3Njc2kvbGlic2FzLmgKaW5kZXggM2ZmZDZiNS4uZTc4ZDNiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJzYXMuaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPHNjc2kvc2FzLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgpAQCAtNjc1LDUgKzY3NCw4IEBACiAKIGV4dGVybiB2b2lkIHNhc19zc3BfdGFza19yZXNwb25zZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzYXNfdGFzayAqdGFzaywKIAkJCQkgIHN0cnVjdCBzc3BfcmVzcG9uc2VfaXUgKml1KTsKK3N0cnVjdCBzYXNfcGh5ICpzYXNfZmluZF9sb2NhbF9waHkoc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldik7CisKK2ludCBzYXNfcmVxdWVzdF9hZGRyKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1OCAqYWRkcik7CiAKICNlbmRpZiAvKiBfU0FTTElCX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2FzX2F0YS5oIGIvaW5jbHVkZS9zY3NpL3Nhc19hdGEuaAppbmRleCBkZDVlZGM5Li5jNTgzMTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2FzX2F0YS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zYXNfYXRhLmgKQEAgLTQ3LDEyICs0NywxMiBAQAogewogCXJldHVybiAwOwogfQotaW50IHNhc19hdGFfaW5pdF9ob3N0X2FuZF9wb3J0KHN0cnVjdCBkb21haW5fZGV2aWNlICpmb3VuZF9kZXYsCitzdGF0aWMgaW5saW5lIGludCBzYXNfYXRhX2luaXRfaG9zdF9hbmRfcG9ydChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZm91bmRfZGV2LAogCQkJICAgICAgIHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlyZXR1cm4gMDsKIH0KLXZvaWQgc2FzX2F0YV90YXNrX2Fib3J0KHN0cnVjdCBzYXNfdGFzayAqdGFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXNfYXRhX3Rhc2tfYWJvcnQoc3RydWN0IHNhc190YXNrICp0YXNrKQogewogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKaW5kZXggZGUyOGFhYi4uOGQyMGU2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaApAQCAtMTMwLDYgKzEzMCw5IEBACiBleHRlcm4gaW50IHNjc2lfZG1hX21hcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogZXh0ZXJuIHZvaWQgc2NzaV9kbWFfdW5tYXAoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIAorc3RydWN0IHNjc2lfY21uZCAqc2NzaV9hbGxvY2F0ZV9jb21tYW5kKGdmcF90IGdmcF9tYXNrKTsKK3ZvaWQgc2NzaV9mcmVlX2NvbW1hbmQoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2NzaV9zZ19jb3VudChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJcmV0dXJuIGNtZC0+c2RiLnRhYmxlLm5lbnRzOwpAQCAtMTc1LDQgKzE3OCwxOCBAQAogCXJldHVybiAmY21kLT5zZGI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfc2dfY29weV9mcm9tX2J1ZmZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCisJCQkJCSAgIHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlyZXR1cm4gc2dfY29weV9mcm9tX2J1ZmZlcihzY3NpX3NnbGlzdChjbWQpLCBzY3NpX3NnX2NvdW50KGNtZCksCisJCQkJICAgYnVmLCBidWZsZW4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBzY3NpX3NnX2NvcHlfdG9fYnVmZmVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCQkJIHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlyZXR1cm4gc2dfY29weV90b19idWZmZXIoc2NzaV9zZ2xpc3QoY21kKSwgc2NzaV9zZ19jb3VudChjbWQpLAorCQkJCSBidWYsIGJ1Zmxlbik7Cit9CisKICNlbmRpZiAvKiBfU0NTSV9TQ1NJX0NNTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCBhYjdhY2JlLi5iOGIxOWUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMTU2LDggKzE1Niw4IEBACiAKIAlpbnQgdGltZW91dDsKIAotCXN0cnVjdCBkZXZpY2UJCXNkZXZfZ2VuZGV2OwotCXN0cnVjdCBjbGFzc19kZXZpY2UJc2Rldl9jbGFzc2RldjsKKwlzdHJ1Y3QgZGV2aWNlCQlzZGV2X2dlbmRldiwKKwkJCQlzZGV2X2RldjsKIAogCXN0cnVjdCBleGVjdXRlX3dvcmsJZXc7IC8qIHVzZWQgdG8gZ2V0IHByb2Nlc3MgY29udGV4dCBvbiBwdXQgKi8KIApAQCAtMTY3LDkgKzE2Nyw5IEBACiAjZGVmaW5lCXRvX3Njc2lfZGV2aWNlKGQpCVwKIAljb250YWluZXJfb2YoZCwgc3RydWN0IHNjc2lfZGV2aWNlLCBzZGV2X2dlbmRldikKICNkZWZpbmUJY2xhc3NfdG9fc2RldihkKQlcCi0JY29udGFpbmVyX29mKGQsIHN0cnVjdCBzY3NpX2RldmljZSwgc2Rldl9jbGFzc2RldikKKwljb250YWluZXJfb2YoZCwgc3RydWN0IHNjc2lfZGV2aWNlLCBzZGV2X2RldikKICNkZWZpbmUgdHJhbnNwb3J0X2NsYXNzX3RvX3NkZXYoY2xhc3NfZGV2KSBcCi0JdG9fc2NzaV9kZXZpY2UoY2xhc3NfZGV2LT5kZXYpCisJdG9fc2NzaV9kZXZpY2UoY2xhc3NfZGV2LT5wYXJlbnQpCiAKICNkZWZpbmUgc2Rldl9wcmludGsocHJlZml4LCBzZGV2LCBmbXQsIGEuLi4pCVwKIAlkZXZfcHJpbnRrKHByZWZpeCwgJihzZGV2KS0+c2Rldl9nZW5kZXYsIGZtdCwgIyNhKQpAQCAtMjIwLDcgKzIyMCw3IEBACiAJcmV0dXJuIHRvX3Njc2lfdGFyZ2V0KHNkZXYtPnNkZXZfZ2VuZGV2LnBhcmVudCk7CiB9CiAjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19zdGFyZ2V0KGNsYXNzX2RldikgXAotCXRvX3Njc2lfdGFyZ2V0KGNsYXNzX2Rldi0+ZGV2KQorCXRvX3Njc2lfdGFyZ2V0KGNsYXNzX2Rldi0+cGFyZW50KQogCiAjZGVmaW5lIHN0YXJnZXRfcHJpbnRrKHByZWZpeCwgc3RhcmdldCwgZm10LCBhLi4uKQlcCiAJZGV2X3ByaW50ayhwcmVmaXgsICYoc3RhcmdldCktPmRldiwgZm10LCAjI2EpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9laC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZWguaAppbmRleCAyNTA3MWQ1Li5kM2ExMzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9laC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2VoLmgKQEAgLTU3LDEzICs1NywxNiBAQAogCiBleHRlcm4gaW50IHNjc2lfZ2V0X3NlbnNlX2luZm9fZmxkKGNvbnN0IHU4ICogc2Vuc2VfYnVmZmVyLCBpbnQgc2JfbGVuLAogCQkJCSAgIHU2NCAqIGluZm9fb3V0KTsKLSAKKworZXh0ZXJuIHZvaWQgc2NzaV9idWlsZF9zZW5zZV9idWZmZXIoaW50IGRlc2MsIHU4ICpidWYsIHU4IGtleSwgdTggYXNjLCB1OCBhc2NxKTsKKwogLyoKICAqIFJlc2V0IHJlcXVlc3QgZnJvbSBleHRlcm5hbCBzb3VyY2UKICAqLwogI2RlZmluZSBTQ1NJX1RSWV9SRVNFVF9ERVZJQ0UJMQogI2RlZmluZSBTQ1NJX1RSWV9SRVNFVF9CVVMJMgogI2RlZmluZSBTQ1NJX1RSWV9SRVNFVF9IT1NUCTMKKyNkZWZpbmUgU0NTSV9UUllfUkVTRVRfVEFSR0VUCTQKIAogZXh0ZXJuIGludCBzY3NpX3Jlc2V0X3Byb3ZpZGVyKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggNTMwZmY0Yy4uZDk2N2Q2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtMTcyLDYgKzE3Miw3IEBACiAJICovCiAJaW50ICgqIGVoX2Fib3J0X2hhbmRsZXIpKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJaW50ICgqIGVoX2RldmljZV9yZXNldF9oYW5kbGVyKShzdHJ1Y3Qgc2NzaV9jbW5kICopOworCWludCAoKiBlaF90YXJnZXRfcmVzZXRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKIAlpbnQgKCogZWhfYnVzX3Jlc2V0X2hhbmRsZXIpKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJaW50ICgqIGVoX2hvc3RfcmVzZXRfaGFuZGxlcikoc3RydWN0IHNjc2lfY21uZCAqKTsKIApAQCAtNDY5LDcgKzQ3MCw3IEBACiAJLyoKIAkgKiBQb2ludGVyIHRvIHRoZSBzeXNmcyBjbGFzcyBwcm9wZXJ0aWVzIGZvciB0aGlzIGhvc3QsIE5VTEwgdGVybWluYXRlZC4KIAkgKi8KLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqKnNob3N0X2F0dHJzOworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICoqc2hvc3RfYXR0cnM7CiAKIAkvKgogCSAqIFBvaW50ZXIgdG8gdGhlIFNDU0kgZGV2aWNlIHByb3BlcnRpZXMgZm9yIHRoaXMgaG9zdCwgTlVMTCB0ZXJtaW5hdGVkLgpAQCAtNjU0LDggKzY1NSw3IEBACiAJZW51bSBzY3NpX2hvc3Rfc3RhdGUgc2hvc3Rfc3RhdGU7CiAKIAkvKiBsZG0gYml0cyAqLwotCXN0cnVjdCBkZXZpY2UJCXNob3N0X2dlbmRldjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlCXNob3N0X2NsYXNzZGV2OworCXN0cnVjdCBkZXZpY2UJCXNob3N0X2dlbmRldiwgc2hvc3RfZGV2OwogCiAJLyoKIAkgKiBMaXN0IG9mIGhvc3RzIHBlciB0ZW1wbGF0ZS4KQEAgLTY4Miw3ICs2ODIsNyBAQAogfTsKIAogI2RlZmluZQkJY2xhc3NfdG9fc2hvc3QoZCkJXAotCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgU2NzaV9Ib3N0LCBzaG9zdF9jbGFzc2RldikKKwljb250YWluZXJfb2YoZCwgc3RydWN0IFNjc2lfSG9zdCwgc2hvc3RfZGV2KQogCiAjZGVmaW5lIHNob3N0X3ByaW50ayhwcmVmaXgsIHNob3N0LCBmbXQsIGEuLi4pCVwKIAlkZXZfcHJpbnRrKHByZWZpeCwgJihzaG9zdCktPnNob3N0X2dlbmRldiwgZm10LCAjI2EpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oCmluZGV4IDBkZmVmNzUuLjQ5MGJkMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydC5oCkBAIC04MCw3ICs4MCw3IEBACiB9OwogCiAjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19zaG9zdCh0YykgXAotCWRldl90b19zaG9zdCgodGMpLT5kZXYpCisJZGV2X3RvX3Nob3N0KCh0YyktPnBhcmVudCkKIAogCiAvKiBQcml2YXRlIGFyZWEgbWFpbnRlbmFuY2UuIFRoZSBkcml2ZXIgcmVxdWVzdGVkIGFsbG9jYXRpb25zIGNvbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKaW5kZXggNDc2OWVmZC4uMDZmNzJiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKQEAgLTE2Myw4ICsxNjMsOCBAQAogCiAKIC8qIE1hY3JvIGZvciB1c2UgaW4gZGVmaW5pbmcgVmlydHVhbCBQb3J0IGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgRkNfVlBPUlRfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCQkJCVwKLXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGNsYXNzX2RldmljZV9hdHRyX3Zwb3J0XyMjX25hbWUgPSAJXAorI2RlZmluZSBGQ19WUE9SVF9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkJCVwKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX3Zwb3J0XyMjX25hbWUgPSAJXAogCV9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCiAKIApAQCAtMjM0LDggKzIzNCw4IEBACiAKICNkZWZpbmUJZGV2X3RvX3Zwb3J0KGQpCQkJCVwKIAljb250YWluZXJfb2YoZCwgc3RydWN0IGZjX3Zwb3J0LCBkZXYpCi0jZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b192cG9ydChjbGFzc2RldikJXAotCWRldl90b192cG9ydChjbGFzc2Rldi0+ZGV2KQorI2RlZmluZSB0cmFuc3BvcnRfY2xhc3NfdG9fdnBvcnQoZGV2KQkJXAorCWRldl90b192cG9ydChkZXYtPnBhcmVudCkKICNkZWZpbmUgdnBvcnRfdG9fc2hvc3QodikJCQlcCiAJKHYtPnNob3N0KQogI2RlZmluZSB2cG9ydF90b19zaG9zdF9jaGFubmVsKHYpCQlcCkBAIC0yNzEsNyArMjcxLDcgQEAKIAogLyogTWFjcm8gZm9yIHVzZSBpbiBkZWZpbmluZyBSZW1vdGUgUG9ydCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lIEZDX1JQT1JUX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQkJCQlcCi1zdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBjbGFzc19kZXZpY2VfYXR0cl9ycG9ydF8jI19uYW1lID0gCVwKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX3Jwb3J0XyMjX25hbWUgPSAJXAogCV9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCiAKIApAQCAtMzQxLDggKzM0MSw4IEBACiAKICNkZWZpbmUJZGV2X3RvX3Jwb3J0KGQpCQkJCVwKIAljb250YWluZXJfb2YoZCwgc3RydWN0IGZjX3Jwb3J0LCBkZXYpCi0jZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19ycG9ydChjbGFzc2RldikJXAotCWRldl90b19ycG9ydChjbGFzc2Rldi0+ZGV2KQorI2RlZmluZSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBvcnQoZGV2KQlcCisJZGV2X3RvX3Jwb3J0KGRldi0+cGFyZW50KQogI2RlZmluZSBycG9ydF90b19zaG9zdChyKQkJCVwKIAlkZXZfdG9fc2hvc3Qoci0+ZGV2LnBhcmVudCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAppbmRleCBkYmM5NmVmLi5hYWIxZWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaApAQCAtMTc3LDYgKzE3Nyw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBob3N0X2xpc3Q7CiAJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmxvY2tfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdW5ibG9ja193b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IHVuYmluZF93b3JrOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKaW5kZXggMDkxMjVmYS4uNjFhZDM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaApAQCAtODAsOCArODAsOCBAQAogCiAjZGVmaW5lIGRldl90b19waHkoZCkgXAogCWNvbnRhaW5lcl9vZigoZCksIHN0cnVjdCBzYXNfcGh5LCBkZXYpCi0jZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19waHkoY2RldikgXAotCWRldl90b19waHkoKGNkZXYpLT5kZXYpCisjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19waHkoZGV2KSBcCisJZGV2X3RvX3BoeSgoZGV2KS0+cGFyZW50KQogI2RlZmluZSBwaHlfdG9fc2hvc3QocGh5KSBcCiAJZGV2X3RvX3Nob3N0KChwaHkpLT5kZXYucGFyZW50KQogCkBAIC05Niw4ICs5Niw4IEBACiAKICNkZWZpbmUgZGV2X3RvX3JwaHkoZCkgXAogCWNvbnRhaW5lcl9vZigoZCksIHN0cnVjdCBzYXNfcnBoeSwgZGV2KQotI2RlZmluZSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBoeShjZGV2KSBcCi0JZGV2X3RvX3JwaHkoKGNkZXYpLT5kZXYpCisjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGRldikgXAorCWRldl90b19ycGh5KChkZXYpLT5wYXJlbnQpCiAjZGVmaW5lIHJwaHlfdG9fc2hvc3QocnBoeSkgXAogCWRldl90b19zaG9zdCgocnBoeSktPmRldi5wYXJlbnQpCiAjZGVmaW5lIHRhcmdldF90b19ycGh5KHRhcmcpIFwKQEAgLTE1Miw4ICsxNTIsOCBAQAogCiAjZGVmaW5lIGRldl90b19zYXNfcG9ydChkKSBcCiAJY29udGFpbmVyX29mKChkKSwgc3RydWN0IHNhc19wb3J0LCBkZXYpCi0jZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19zYXNfcG9ydChjZGV2KSBcCi0JZGV2X3RvX3Nhc19wb3J0KChjZGV2KS0+ZGV2KQorI2RlZmluZSB0cmFuc3BvcnRfY2xhc3NfdG9fc2FzX3BvcnQoZGV2KSBcCisJZGV2X3RvX3Nhc19wb3J0KChkZXYpLT5wYXJlbnQpCiAKIHN0cnVjdCBzYXNfcGh5X2xpbmtyYXRlcyB7CiAJZW51bSBzYXNfbGlua3JhdGUgbWF4aW11bV9saW5rcmF0ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zZC5oIGIvaW5jbHVkZS9zY3NpL3NkLmgKaW5kZXggOGVhOWY3My4uNGYwMzJkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3NkLmgKKysrIGIvaW5jbHVkZS9zY3NpL3NkLmgKQEAgLTM0LDcgKzM0LDcgQEAKIHN0cnVjdCBzY3NpX2Rpc2sgewogCXN0cnVjdCBzY3NpX2RyaXZlciAqZHJpdmVyOwkvKiBhbHdheXMgJnNkX3RlbXBsYXRlICovCiAJc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2U7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSBjZGV2OworCXN0cnVjdCBkZXZpY2UJZGV2OwogCXN0cnVjdCBnZW5kaXNrCSpkaXNrOwogCXVuc2lnbmVkIGludAlvcGVuZXJzOwkvKiBwcm90ZWN0ZWQgYnkgQktMIGZvciBub3csIHl1Y2sgKi8KIAlzZWN0b3JfdAljYXBhY2l0eTsJLyogc2l6ZSBpbiA1MTItYnl0ZSBzZWN0b3JzICovCkBAIC00Niw3ICs0Niw3IEBACiAJdW5zaWduZWQJUkNEIDogMTsJLyogc3RhdGUgb2YgZGlzayBSQ0QgYml0LCB1bnVzZWQgKi8KIAl1bnNpZ25lZAlEUE9GVUEgOiAxOwkvKiBzdGF0ZSBvZiBkaXNrIERQT0ZVQSBiaXQgKi8KIH07Ci0jZGVmaW5lIHRvX3Njc2lfZGlzayhvYmopIGNvbnRhaW5lcl9vZihvYmosc3RydWN0IHNjc2lfZGlzayxjZGV2KQorI2RlZmluZSB0b19zY3NpX2Rpc2sob2JqKSBjb250YWluZXJfb2Yob2JqLHN0cnVjdCBzY3NpX2Rpc2ssZGV2KQogCiAjZGVmaW5lIHNkX3ByaW50ayhwcmVmaXgsIHNkc2ssIGZtdCwgYS4uLikJCQkJXAogICAgICAgICAoc2RzayktPmRpc2sgPwkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL29wbDMuaCBiL2luY2x1ZGUvc291bmQvb3BsMy5oCmluZGV4IGEwYzVmZWIuLjZiYTY3MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvb3BsMy5oCisrKyBiL2luY2x1ZGUvc291bmQvb3BsMy5oCkBAIC0zNzAsMTIgKzM3MCwxMyBAQAogaW50IHNuZF9vcGwzX29wZW4oc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgc25kX29wbDNfaW9jdGwoc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotbG9uZyBzbmRfb3BsM193cml0ZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgbG9uZyBjb3VudCwKLQkJICAgIGxvZmZfdCAqb2Zmc2V0KTsKIGludCBzbmRfb3BsM19yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKiBodywgc3RydWN0IGZpbGUgKmZpbGUpOwogCiB2b2lkIHNuZF9vcGwzX3Jlc2V0KHN0cnVjdCBzbmRfb3BsMyAqIG9wbDMpOwogCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUikgfHwgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUl9NT0RVTEUpCitsb25nIHNuZF9vcGwzX3dyaXRlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBsb25nIGNvdW50LAorCQkgICAgbG9mZl90ICpvZmZzZXQpOwogaW50IHNuZF9vcGwzX2xvYWRfcGF0Y2goc3RydWN0IHNuZF9vcGwzICpvcGwzLAogCQkJaW50IHByb2csIGludCBiYW5rLCBpbnQgdHlwZSwKIAkJCWNvbnN0IGNoYXIgKm5hbWUsCkBAIC0zODQsNSArMzg1LDkgQEAKIHN0cnVjdCBmbV9wYXRjaCAqc25kX29wbDNfZmluZF9wYXRjaChzdHJ1Y3Qgc25kX29wbDMgKm9wbDMsIGludCBwcm9nLCBpbnQgYmFuaywKIAkJCQkgICAgIGludCBjcmVhdGVfcGF0Y2gpOwogdm9pZCBzbmRfb3BsM19jbGVhcl9wYXRjaGVzKHN0cnVjdCBzbmRfb3BsMyAqb3BsMyk7CisjZWxzZQorI2RlZmluZSBzbmRfb3BsM193cml0ZQlOVUxMCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX29wbDNfY2xlYXJfcGF0Y2hlcyhzdHJ1Y3Qgc25kX29wbDMgKm9wbDMpIHt9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fU09VTkRfT1BMM19IICovCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggZGNlZjhiNS4uYmEzYTM4OSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMzI4LDYgKzMyOCwxMyBAQAogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJZGVwZW5kcyBvbiBHUk9VUF9TQ0hFRAogCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZmVhdHVyZSBsZXRzIHlvdSBleHBsaWNpdGx5IGFsbG9jYXRlIHJlYWwgQ1BVIGJhbmR3aWR0aAorCSAgdG8gdXNlcnMgb3IgY29udHJvbCBncm91cHMgKGRlcGVuZGluZyBvbiB0aGUgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIKKwkgIHNldHRpbmcgYmVsb3cuIElmIGVuYWJsZWQsIGl0IHdpbGwgYWxzbyBtYWtlIGl0IGltcG9zc2libGUgdG8KKwkgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGUKKwkgIHJlYWx0aW1lIGJhbmR3aWR0aCBmb3IgdGhlbS4KKwkgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkLXJ0LWdyb3VwLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogY2hvaWNlCiAJZGVwZW5kcyBvbiBHUk9VUF9TQ0hFRApAQCAtMzY2LDEwICszNzMsMjkgQEAKICAgICAgICAgICBpbmZyYXN0cnVjdHVyZSB0aGF0IHdvcmtzIHdpdGggY2dyb3VwcwogCWRlcGVuZHMgb24gQ0dST1VQUwogCitjb25maWcgQ0dST1VQX01FTV9SRVNfQ1RMUgorCWJvb2wgIk1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyIGZvciBDb250cm9sIEdyb3VwcyIKKwlkZXBlbmRzIG9uIENHUk9VUFMgJiYgUkVTT1VSQ0VfQ09VTlRFUlMKKwloZWxwCisJICBQcm92aWRlcyBhIG1lbW9yeSByZXNvdXJjZSBjb250cm9sbGVyIHRoYXQgbWFuYWdlcyBib3RoIHBhZ2UgY2FjaGUgYW5kCisJICBSU1MgbWVtb3J5LgorCisJICBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIG9wdGlvbiBpbmNyZWFzZXMgZml4ZWQgbWVtb3J5IG92ZXJoZWFkCisJICBhc3NvY2lhdGVkIHdpdGggZWFjaCBwYWdlIG9mIG1lbW9yeSBpbiB0aGUgc3lzdGVtIGJ5IDQvOCBieXRlcworCSAgYW5kIGFsc28gaW5jcmVhc2VzIGNhY2hlIG1pc3NlcyBiZWNhdXNlIHN0cnVjdCBwYWdlIG9uIG1hbnkgNjRiaXQKKwkgIHN5c3RlbXMgd2lsbCBub3QgZml0IGludG8gYSBzaW5nbGUgY2FjaGUgbGluZSBhbnltb3JlLgorCisJICBPbmx5IGVuYWJsZSB3aGVuIHlvdSdyZSBvayB3aXRoIHRoZXNlIHRyYWRlIG9mZnMgYW5kIHJlYWxseQorCSAgc3VyZSB5b3UgbmVlZCB0aGUgbWVtb3J5IHJlc291cmNlIGNvbnRyb2xsZXIuCisKIGNvbmZpZyBTWVNGU19ERVBSRUNBVEVECisJYm9vbAorCitjb25maWcgU1lTRlNfREVQUkVDQVRFRF9WMgogCWJvb2wgIkNyZWF0ZSBkZXByZWNhdGVkIHN5c2ZzIGZpbGVzIgogCWRlcGVuZHMgb24gU1lTRlMKIAlkZWZhdWx0IHkKKwlzZWxlY3QgU1lTRlNfREVQUkVDQVRFRAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGNyZWF0ZXMgZGVwcmVjYXRlZCBzeW1saW5rcyBzdWNoIGFzIHRoZQogCSAgImRldmljZSItbGluaywgdGhlIDxzdWJzeXN0ZW0+OjxuYW1lPi1saW5rLCBhbmQgdGhlCkBAIC0zODIsMTcgKzQwOCwxMSBAQAogCiAJICBJZiBlbmFibGVkLCB0aGlzIG9wdGlvbiB3aWxsIGFsc28gbW92ZSBhbnkgZGV2aWNlIHN0cnVjdHVyZXMKIAkgIHRoYXQgYmVsb25nIHRvIGEgY2xhc3MsIGJhY2sgaW50byB0aGUgL3N5cy9jbGFzcyBoaWVyYXJjaHksIGluCi0JICBvcmRlciB0byBzdXBwb3J0IG9sZGVyIHZlcnNpb25zIG9mIHVkZXYuCisJICBvcmRlciB0byBzdXBwb3J0IG9sZGVyIHZlcnNpb25zIG9mIHVkZXYgYW5kIHNvbWUgdXNlcnNwYWNlCisJICBwcm9ncmFtcy4KIAotCSAgSWYgeW91IGFyZSB1c2luZyBhIGRpc3RybyB0aGF0IHdhcyByZWxlYXNlZCBpbiAyMDA2IG9yIGxhdGVyLAotCSAgaXQgc2hvdWxkIGJlIHNhZmUgdG8gc2F5IE4gaGVyZS4KLQotY29uZmlnIENHUk9VUF9NRU1fQ09OVAotCWJvb2wgIk1lbW9yeSBjb250cm9sbGVyIGZvciBjZ3JvdXBzIgotCWRlcGVuZHMgb24gQ0dST1VQUyAmJiBSRVNPVVJDRV9DT1VOVEVSUwotCWhlbHAKLQkgIFByb3ZpZGVzIGEgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBtYW5hZ2VzIGJvdGggcGFnZSBjYWNoZSBhbmQKLQkgIFJTUyBtZW1vcnkuCisJICBJZiB5b3UgYXJlIHVzaW5nIGEgZGlzdHJvIHdpdGggdGhlIG1vc3QgcmVjZW50IHVzZXJzcGFjZQorCSAgcGFja2FnZXMsIGl0IHNob3VsZCBiZSBzYWZlIHRvIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBQUk9DX1BJRF9DUFVTRVQKIAlib29sICJJbmNsdWRlIGxlZ2FjeSAvcHJvYy88cGlkPi9jcHVzZXQgZmlsZSIKQEAgLTc1MCw3ICs3NzAsNyBAQAogY29uZmlnIFNMQUJJTkZPCiAJYm9vbAogCWRlcGVuZHMgb24gUFJPQ19GUwotCWRlcGVuZHMgb24gU0xBQiB8fCBTTFVCCisJZGVwZW5kcyBvbiBTTEFCIHx8IFNMVUJfREVCVUcKIAlkZWZhdWx0IHkKIAogY29uZmlnIFJUX01VVEVYRVMKQEAgLTg1MiwzOCArODcyLDEwIEBACiBjb25maWcgUFJFRU1QVF9OT1RJRklFUlMKIAlib29sCiAKLWNob2ljZQotCXByb21wdCAiUkNVIGltcGxlbWVudGF0aW9uIHR5cGU6IgotCWRlZmF1bHQgQ0xBU1NJQ19SQ1UKLQloZWxwCi0JICBUaGlzIGFsbG93cyB5b3UgdG8gY2hvb3NlIGVpdGhlciB0aGUgY2xhc3NpYyBSQ1UgaW1wbGVtZW50YXRpb24KLQkgIHRoYXQgaXMgZGVzaWduZWQgZm9yIGJlc3QgcmVhZC1zaWRlIHBlcmZvcm1hbmNlIG9uIG5vbi1yZWFsdGltZQotCSAgc3lzdGVtcywgb3IgdGhlIHByZWVtcHRpYmxlIFJDVSBpbXBsZW1lbnRhdGlvbiBmb3IgYmVzdCBsYXRlbmN5Ci0JICBvbiByZWFsdGltZSBzeXN0ZW1zLiAgTm90ZSB0aGF0IHNvbWUga2VybmVsIHByZWVtcHRpb24gbW9kZXMKLQkgIHdpbGwgcmVzdHJpY3QgeW91ciBjaG9pY2UuCi0KLQkgIFNlbGVjdCB0aGUgZGVmYXVsdCBpZiB5b3UgYXJlIHVuc3VyZS4KLQogY29uZmlnIENMQVNTSUNfUkNVCi0JYm9vbCAiQ2xhc3NpYyBSQ1UiCisJZGVmX2Jvb2wgIVBSRUVNUFRfUkNVCiAJaGVscAogCSAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgY2xhc3NpYyBSQ1UgaW1wbGVtZW50YXRpb24gdGhhdCBpcwogCSAgZGVzaWduZWQgZm9yIGJlc3QgcmVhZC1zaWRlIHBlcmZvcm1hbmNlIG9uIG5vbi1yZWFsdGltZQotCSAgc3lzdGVtcy4KLQotCSAgU2F5IFkgaWYgeW91IGFyZSB1bnN1cmUuCi0KLWNvbmZpZyBQUkVFTVBUX1JDVQotCWJvb2wgIlByZWVtcHRpYmxlIFJDVSIKLQlkZXBlbmRzIG9uIFBSRUVNUFQKLQloZWxwCi0JICBUaGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBsYXRlbmN5IG9mIHRoZSBrZXJuZWwgYnkgbWFraW5nIGNlcnRhaW4KLQkgIFJDVSBzZWN0aW9ucyBwcmVlbXB0aWJsZS4gTm9ybWFsbHkgUkNVIGNvZGUgaXMgbm9uLXByZWVtcHRpYmxlLCBpZgotCSAgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgdGhlbiByZWFkLW9ubHkgUkNVIHNlY3Rpb25zIGJlY29tZQotCSAgcHJlZW1wdGlibGUuIFRoaXMgaGVscHMgbGF0ZW5jeSwgYnV0IG1heSBleHBvc2UgYnVncyBkdWUgdG8KLQkgIG5vdy1uYWl2ZSBhc3N1bXB0aW9ucyBhYm91dCBlYWNoIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgotCSAgcmVtYWluaW5nIG9uIGEgZ2l2ZW4gQ1BVIHRocm91Z2ggaXRzIGV4ZWN1dGlvbi4KLQotCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCi0KLWVuZGNob2ljZQorCSAgc3lzdGVtcy4gIENsYXNzaWMgUkNVIGlzIHRoZSBkZWZhdWx0LiAgTm90ZSB0aGF0IHRoZQorCSAgUFJFRU1QVF9SQ1Ugc3ltYm9sIGlzIHVzZWQgdG8gc2VsZWN0L2Rlc2VsZWN0IHRoaXMgb3B0aW9uLgpkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggYzBiMWUwNS4uZDUzZmVlOCAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC01MzgsNyArNTM4LDcgQEAKIAlpbml0cmRfZW5kID0gMDsKIH0KIAotaW50IF9faW5pdCBwb3B1bGF0ZV9yb290ZnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBvcHVsYXRlX3Jvb3Rmcyh2b2lkKQogewogCWNoYXIgKmVyciA9IHVucGFja190b19yb290ZnMoX19pbml0cmFtZnNfc3RhcnQsCiAJCQkgX19pbml0cmFtZnNfZW5kIC0gX19pbml0cmFtZnNfc3RhcnQsIDApOwpAQCAtNTc3LDEwICs1NzcsNCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNpZm5kZWYgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFRfSU5JVFJECi0vKgotICogaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgcG9wdWxhdGVfcm9vdGZzKCkgaXMgY2FsbGVkIF9lYXJsaWVyXyBpbiB0aGUKLSAqIGJvb3Qgc2VxdWVuY2UuIFRoaXMgaW5zdXJlcyB0aGF0IHRoZSBBQ1BJIGluaXRpYWxpc2F0aW9uIGNhbiBmaW5kIHRoZSBmaWxlLgotICovCiByb290ZnNfaW5pdGNhbGwocG9wdWxhdGVfcm9vdGZzKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA4YjE5ODIwLi44MzNhNjdkIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMTAyLDEyICsxMDIsNiBAQAogZXh0ZXJuIHZvaWQgdGNfaW5pdCh2b2lkKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFRfSU5JVFJECi1leHRlcm4gaW50IHBvcHVsYXRlX3Jvb3Rmcyh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcG9wdWxhdGVfcm9vdGZzKHZvaWQpIHt9Ci0jZW5kaWYKLQogZW51bSBzeXN0ZW1fc3RhdGVzIHN5c3RlbV9zdGF0ZTsKIEVYUE9SVF9TWU1CT0woc3lzdGVtX3N0YXRlKTsKIApAQCAtMjU0LDcgKzI0OCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBsb2dsZXZlbChjaGFyICpzdHIpCiB7CiAJZ2V0X29wdGlvbigmc3RyLCAmY29uc29sZV9sb2dsZXZlbCk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIGVhcmx5X3BhcmFtKCJsb2dsZXZlbCIsIGxvZ2xldmVsKTsKQEAgLTM2NSwxMCArMzU5LDMxIEBACiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbnJfY3B1X2lkcyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhjcHVzKSB7IH0KIAogI2Vsc2UKIAorI2lmIE5SX0NQVVMgPiBCSVRTX1BFUl9MT05HCitjcHVtYXNrX3QgY3B1X21hc2tfYWxsIF9fcmVhZF9tb3N0bHkgPSBDUFVfTUFTS19BTEw7CitFWFBPUlRfU1lNQk9MKGNwdV9tYXNrX2FsbCk7CisjZW5kaWYKKworLyogU2V0dXAgbnVtYmVyIG9mIHBvc3NpYmxlIHByb2Nlc3NvciBpZHMgKi8KK2ludCBucl9jcHVfaWRzIF9fcmVhZF9tb3N0bHkgPSBOUl9DUFVTOworRVhQT1JUX1NZTUJPTChucl9jcHVfaWRzKTsKKworLyogQW4gYXJjaCBtYXkgc2V0IG5yX2NwdV9pZHMgZWFybGllciBpZiBuZWVkZWQsIHNvIHRoaXMgd291bGQgYmUgcmVkdW5kYW50ICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbnJfY3B1X2lkcyh2b2lkKQoreworCWludCBjcHUsIGhpZ2hlc3RfY3B1ID0gMDsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCWhpZ2hlc3RfY3B1ID0gY3B1OworCisJbnJfY3B1X2lkcyA9IGhpZ2hlc3RfY3B1ICsgMTsKK30KKwogI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIHVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwogCkBAIC01NDMsNiArNTU4LDcgQEAKIAlzZXR1cF9jb21tYW5kX2xpbmUoY29tbWFuZF9saW5lKTsKIAl1bndpbmRfc2V0dXAoKTsKIAlzZXR1cF9wZXJfY3B1X2FyZWFzKCk7CisJc2V0dXBfbnJfY3B1X2lkcygpOwogCXNtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7CS8qIGFyY2gtc3BlY2lmaWMgYm9vdC1jcHUgaG9va3MgKi8KIAogCS8qCkBAIC02NTAsNyArNjY2LDYgQEAKIAogCWNoZWNrX2J1Z3MoKTsKIAotCXBvcHVsYXRlX3Jvb3RmcygpOyAvKiBGb3IgRFNEVCBvdmVycmlkZSBmcm9tIGluaXRyYW1mcyAqLwogCWFjcGlfZWFybHlfaW5pdCgpOyAvKiBiZWZvcmUgTEFQSUMgYW5kIFNNUCBpbml0ICovCiAKIAkvKiBEbyB0aGUgcmVzdCBub24tX19pbml0J2VkLCB3ZSdyZSBub3cgYWxpdmUgKi8KQEAgLTgxOCw3ICs4MzMsNyBAQAogCS8qCiAJICogaW5pdCBjYW4gcnVuIG9uIGFueSBjcHUuCiAJICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBDUFVfTUFTS19BTEwpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIENQVV9NQVNLX0FMTF9QVFIpOwogCS8qCiAJICogVGVsbCB0aGUgd29ybGQgdGhhdCB3ZSdyZSBnb2luZyB0byBiZSB0aGUgZ3JpbQogCSAqIHJlYXBlciBvZiBpbm5vY2VudCBvcnBoYW5lZCBjaGlsZHJlbi4KZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCA2MGY3YTI3Li45NGZkM2IwIDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC01OTgsNiArNTk4LDcgQEAKIAkJCWludCBvZmxhZywgbW9kZV90IG1vZGUsIHN0cnVjdCBtcV9hdHRyIF9fdXNlciAqdV9hdHRyKQogewogCXN0cnVjdCBtcV9hdHRyIGF0dHI7CisJc3RydWN0IGZpbGUgKnJlc3VsdDsKIAlpbnQgcmV0OwogCiAJaWYgKHVfYXR0cikgewpAQCAtNjEyLDEzICs2MTMsMjQgQEAKIAl9CiAKIAltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJcmV0ID0gbW50X3dhbnRfd3JpdGUobXF1ZXVlX21udCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CiAJcmV0ID0gdmZzX2NyZWF0ZShkaXItPmRfaW5vZGUsIGRlbnRyeSwgbW9kZSwgTlVMTCk7CiAJZGVudHJ5LT5kX2ZzZGF0YSA9IE5VTEw7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CiAKLQlyZXR1cm4gZGVudHJ5X29wZW4oZGVudHJ5LCBtcXVldWVfbW50LCBvZmxhZyk7CisJcmVzdWx0ID0gZGVudHJ5X29wZW4oZGVudHJ5LCBtcXVldWVfbW50LCBvZmxhZyk7CisJLyoKKwkgKiBkZW50cnlfb3BlbigpIHRvb2sgYSBwZXJzaXN0ZW50IG1udF93YW50X3dyaXRlKCksCisJICogc28gd2UgY2FuIG5vdyBkcm9wIHRoaXMgb25lLgorCSAqLworCW1udF9kcm9wX3dyaXRlKG1xdWV1ZV9tbnQpOworCXJldHVybiByZXN1bHQ7CiAKK291dF9kcm9wX3dyaXRlOgorCW1udF9kcm9wX3dyaXRlKG1xdWV1ZV9tbnQpOwogb3V0OgogCWRwdXQoZGVudHJ5KTsKIAltbnRwdXQobXF1ZXVlX21udCk7CkBAIC03NDIsOCArNzU0LDExIEBACiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaWYgKGlub2RlKQogCQlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7Ci0KKwllcnIgPSBtbnRfd2FudF93cml0ZShtcXVldWVfbW50KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9lcnI7CiAJZXJyID0gdmZzX3VubGluayhkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLCBkZW50cnkpOworCW1udF9kcm9wX3dyaXRlKG1xdWV1ZV9tbnQpOwogb3V0X2VycjoKIAlkcHV0KGRlbnRyeSk7CiAKZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCBjNDdlODcyLi5jYzYzZmFlIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC0yNzEsOSArMjcxLDEwIEBACiAKIAlpZiAoc2ZkLT52bV9vcHMtPmdldF9wb2xpY3kpCiAJCXBvbCA9IHNmZC0+dm1fb3BzLT5nZXRfcG9saWN5KHZtYSwgYWRkcik7Ci0JZWxzZSBpZiAodm1hLT52bV9wb2xpY3kpCisJZWxzZSBpZiAodm1hLT52bV9wb2xpY3kpIHsKIAkJcG9sID0gdm1hLT52bV9wb2xpY3k7Ci0JZWxzZQorCQltcG9sX2dldChwb2wpOwkvKiBnZXRfdm1hX3BvbGljeSgpIGV4cGVjdHMgdGhpcyAqLworCX0gZWxzZQogCQlwb2wgPSBjdXJyZW50LT5tZW1wb2xpY3k7CiAJcmV0dXJuIHBvbDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLnByZWVtcHQgYi9rZXJuZWwvS2NvbmZpZy5wcmVlbXB0CmluZGV4IDA2NjliNzAuLjlmZGJhMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9LY29uZmlnLnByZWVtcHQKKysrIGIva2VybmVsL0tjb25maWcucHJlZW1wdApAQCAtNTIsOCArNTIsMjMgQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBQUkVFTVBUX1JDVQorCWJvb2wgIlByZWVtcHRpYmxlIFJDVSIKKwlkZXBlbmRzIG9uIFBSRUVNUFQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBsYXRlbmN5IG9mIHRoZSBrZXJuZWwgYnkgbWFraW5nIGNlcnRhaW4KKwkgIFJDVSBzZWN0aW9ucyBwcmVlbXB0aWJsZS4gTm9ybWFsbHkgUkNVIGNvZGUgaXMgbm9uLXByZWVtcHRpYmxlLCBpZgorCSAgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgdGhlbiByZWFkLW9ubHkgUkNVIHNlY3Rpb25zIGJlY29tZQorCSAgcHJlZW1wdGlibGUuIFRoaXMgaGVscHMgbGF0ZW5jeSwgYnV0IG1heSBleHBvc2UgYnVncyBkdWUgdG8KKwkgIG5vdy1uYWl2ZSBhc3N1bXB0aW9ucyBhYm91dCBlYWNoIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgorCSAgcmVtYWluaW5nIG9uIGEgZ2l2ZW4gQ1BVIHRocm91Z2ggaXRzIGV4ZWN1dGlvbi4KKworCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisKIGNvbmZpZyBSQ1VfVFJBQ0UKIAlib29sICJFbmFibGUgdHJhY2luZyBmb3IgUkNVIC0gY3VycmVudGx5IHN0YXRzIGluIGRlYnVnZnMiCisJZGVwZW5kcyBvbiBQUkVFTVBUX1JDVQogCXNlbGVjdCBERUJVR19GUwogCWRlZmF1bHQgeQogCWhlbHAKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCA2YzU4NGM1Li42YzVmMDgxIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogCSAgICBzaWduYWwubyBzeXMubyBrbW9kLm8gd29ya3F1ZXVlLm8gcGlkLm8gXAogCSAgICByY3VwZGF0ZS5vIGV4dGFibGUubyBwYXJhbXMubyBwb3NpeC10aW1lcnMubyBcCiAJICAgIGt0aHJlYWQubyB3YWl0Lm8ga2ZpZm8ubyBzeXNfbmkubyBwb3NpeC1jcHUtdGltZXJzLm8gbXV0ZXgubyBcCi0JICAgIGhydGltZXIubyByd3NlbS5vIG5zcHJveHkubyBzcmN1Lm8gXAorCSAgICBocnRpbWVyLm8gcndzZW0ubyBuc3Byb3h5Lm8gc3JjdS5vIHNlbWFwaG9yZS5vIFwKIAkgICAgbm90aWZpZXIubyBrc3lzZnMubyBwbV9xb3NfcGFyYW1zLm8KIAogb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX2NoZWNrLm8KQEAgLTUzLDYgKzUzLDcgQEAKIG9iai0kKENPTkZJR19BVURJVFNZU0NBTEwpICs9IGF1ZGl0c2Mubwogb2JqLSQoQ09ORklHX0FVRElUX1RSRUUpICs9IGF1ZGl0X3RyZWUubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpICs9IGtwcm9iZXMubworb2JqLSQoQ09ORklHX0tHREIpICs9IGtnZGIubwogb2JqLSQoQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQKSArPSBzb2Z0bG9ja3VwLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0hBUkRJUlFTKSArPSBpcnEvCiBvYmotJChDT05GSUdfU0VDQ09NUCkgKz0gc2VjY29tcC5vCmRpZmYgLS1naXQgYS9rZXJuZWwvYWNjdC5jIGIva2VybmVsL2FjY3QuYwppbmRleCA1MjFkZmE1Li45MWUxY2ZkIDEwMDY0NAotLS0gYS9rZXJuZWwvYWNjdC5jCisrKyBiL2tlcm5lbC9hY2N0LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPiAvKiBzZWN0b3JfZGl2ICovCisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogCiAvKgogICogVGhlc2UgY29uc3RhbnRzIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBmcmVlc3BhY2UgdGhhdCBzdXNwZW5kIGFuZApAQCAtNzQsNyArNzUsNyBAQAogLyoKICAqIEV4dGVybmFsIHJlZmVyZW5jZXMgYW5kIGFsbCBvZiB0aGUgZ2xvYmFscy4KICAqLwotc3RhdGljIHZvaWQgZG9fYWNjdF9wcm9jZXNzKHN0cnVjdCBmaWxlICopOworc3RhdGljIHZvaWQgZG9fYWNjdF9wcm9jZXNzKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywgc3RydWN0IGZpbGUgKik7CiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHNvIHRoYXQgYWxsIHRoZSBkYXRhIHByb3RlY3RlZCBieSBsb2NrCkBAIC04Niw2ICs4Nyw3IEBACiAJdm9sYXRpbGUgaW50CQlhY3RpdmU7CiAJdm9sYXRpbGUgaW50CQluZWVkY2hlY2s7CiAJc3RydWN0IGZpbGUJCSpmaWxlOworCXN0cnVjdCBwaWRfbmFtZXNwYWNlCSpuczsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKIH07CiAKQEAgLTE3NSw5ICsxNzcsMTEgQEAKIHN0YXRpYyB2b2lkIGFjY3RfZmlsZV9yZW9wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGZpbGUgKm9sZF9hY2N0ID0gTlVMTDsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqb2xkX25zID0gTlVMTDsKIAogCWlmIChhY2N0X2dsb2JhbHMuZmlsZSkgewogCQlvbGRfYWNjdCA9IGFjY3RfZ2xvYmFscy5maWxlOworCQlvbGRfbnMgPSBhY2N0X2dsb2JhbHMubnM7CiAJCWRlbF90aW1lcigmYWNjdF9nbG9iYWxzLnRpbWVyKTsKIAkJYWNjdF9nbG9iYWxzLmFjdGl2ZSA9IDA7CiAJCWFjY3RfZ2xvYmFscy5uZWVkY2hlY2sgPSAwOwpAQCAtMTg1LDYgKzE4OSw3IEBACiAJfQogCWlmIChmaWxlKSB7CiAJCWFjY3RfZ2xvYmFscy5maWxlID0gZmlsZTsKKwkJYWNjdF9nbG9iYWxzLm5zID0gZ2V0X3BpZF9ucyh0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpOwogCQlhY2N0X2dsb2JhbHMubmVlZGNoZWNrID0gMDsKIAkJYWNjdF9nbG9iYWxzLmFjdGl2ZSA9IDE7CiAJCS8qIEl0J3MgYmVlbiBkZWxldGVkIGlmIGl0IHdhcyB1c2VkIGJlZm9yZSBzbyB0aGlzIGlzIHNhZmUgKi8KQEAgLTE5Niw4ICsyMDEsOSBAQAogCWlmIChvbGRfYWNjdCkgewogCQltbnRfdW5waW4ob2xkX2FjY3QtPmZfcGF0aC5tbnQpOwogCQlzcGluX3VubG9jaygmYWNjdF9nbG9iYWxzLmxvY2spOwotCQlkb19hY2N0X3Byb2Nlc3Mob2xkX2FjY3QpOworCQlkb19hY2N0X3Byb2Nlc3Mob2xkX25zLCBvbGRfYWNjdCk7CiAJCWZpbHBfY2xvc2Uob2xkX2FjY3QsIE5VTEwpOworCQlwdXRfcGlkX25zKG9sZF9ucyk7CiAJCXNwaW5fbG9jaygmYWNjdF9nbG9iYWxzLmxvY2spOwogCX0KIH0KQEAgLTQxOSw3ICs0MjUsNyBAQAogLyoKICAqICBkb19hY2N0X3Byb2Nlc3MgZG9lcyBhbGwgYWN0dWFsIHdvcmsuIENhbGxlciBob2xkcyB0aGUgcmVmZXJlbmNlIHRvIGZpbGUuCiAgKi8KLXN0YXRpYyB2b2lkIGRvX2FjY3RfcHJvY2VzcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyB2b2lkIGRvX2FjY3RfcHJvY2VzcyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBwYWNjdF9zdHJ1Y3QgKnBhY2N0ID0gJmN1cnJlbnQtPnNpZ25hbC0+cGFjY3Q7CiAJYWNjdF90IGFjOwpAQCAtNDgxLDggKzQ4NywxMCBAQAogCWFjLmFjX2dpZDE2ID0gY3VycmVudC0+Z2lkOwogI2VuZGlmCiAjaWYgQUNDVF9WRVJTSU9OPT0zCi0JYWMuYWNfcGlkID0gY3VycmVudC0+dGdpZDsKLQlhYy5hY19wcGlkID0gY3VycmVudC0+cmVhbF9wYXJlbnQtPnRnaWQ7CisJYWMuYWNfcGlkID0gdGFza190Z2lkX25yX25zKGN1cnJlbnQsIG5zKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJYWMuYWNfcHBpZCA9IHRhc2tfdGdpZF9ucl9ucyhyY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cmVhbF9wYXJlbnQpLCBucyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAjZW5kaWYKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtNTc4LDYgKzU4Niw3IEBACiB2b2lkIGFjY3RfcHJvY2Vzcyh2b2lkKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CiAKIAkvKgogCSAqIGFjY2VsZXJhdGUgdGhlIGNvbW1vbiBmYXN0cGF0aDoKQEAgLTU5Miw4ICs2MDEsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAlnZXRfZmlsZShmaWxlKTsKKwlucyA9IGdldF9waWRfbnMoYWNjdF9nbG9iYWxzLm5zKTsKIAlzcGluX3VubG9jaygmYWNjdF9nbG9iYWxzLmxvY2spOwogCi0JZG9fYWNjdF9wcm9jZXNzKGZpbGUpOworCWRvX2FjY3RfcHJvY2VzcyhucywgZmlsZSk7CiAJZnB1dChmaWxlKTsKKwlwdXRfcGlkX25zKG5zKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggMmVlZWE5YS4uYTdiMTYwOCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqCiAgKiBXcml0dGVuIGJ5IFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHJlZGhhdC5jb20+CiAgKgotICogR29hbHM6IDEpIEludGVncmF0ZSBmdWxseSB3aXRoIFNFTGludXguCisgKiBHb2FsczogMSkgSW50ZWdyYXRlIGZ1bGx5IHdpdGggU2VjdXJpdHkgTW9kdWxlcy4KICAqCSAgMikgTWluaW1hbCBydW4tdGltZSBvdmVyaGVhZDoKICAqCSAgICAgYSkgTWluaW1hbCB3aGVuIHN5c2NhbGwgYXVkaXRpbmcgaXMgZGlzYWJsZWQgKGF1ZGl0X2VuYWJsZT0wKS4KICAqCSAgICAgYikgU21hbGwgd2hlbiBzeXNjYWxsIGF1ZGl0aW5nIGlzIGVuYWJsZWQgYW5kIG5vIGF1ZGl0IHJlY29yZApAQCAtNTUsNyArNTUsNiBAQAogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9pbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpAQCAtNzgsOSArNzcsMTMgQEAKIC8qIElmIGF1ZGl0aW5nIGNhbm5vdCBwcm9jZWVkLCBhdWRpdF9mYWlsdXJlIHNlbGVjdHMgd2hhdCBoYXBwZW5zLiAqLwogc3RhdGljIGludAlhdWRpdF9mYWlsdXJlID0gQVVESVRfRkFJTF9QUklOVEs7CiAKLS8qIElmIGF1ZGl0IHJlY29yZHMgYXJlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIG5ldGxpbmsgc29ja2V0LCBhdWRpdF9waWQKLSAqIGNvbnRhaW5zIHRoZSAobm9uLXplcm8pIHBpZC4gKi8KKy8qCisgKiBJZiBhdWRpdCByZWNvcmRzIGFyZSB0byBiZSB3cml0dGVuIHRvIHRoZSBuZXRsaW5rIHNvY2tldCwgYXVkaXRfcGlkCisgKiBjb250YWlucyB0aGUgcGlkIG9mIHRoZSBhdWRpdGQgcHJvY2VzcyBhbmQgYXVkaXRfbmxrX3BpZCBjb250YWlucworICogdGhlIHBpZCB0byB1c2UgdG8gc2VuZCBuZXRsaW5rIG1lc3NhZ2VzIHRvIHRoYXQgcHJvY2Vzcy4KKyAqLwogaW50CQlhdWRpdF9waWQ7CitzdGF0aWMgaW50CWF1ZGl0X25sa19waWQ7CiAKIC8qIElmIGF1ZGl0X3JhdGVfbGltaXQgaXMgbm9uLXplcm8sIGxpbWl0IHRoZSByYXRlIG9mIHNlbmRpbmcgYXVkaXQgcmVjb3JkcwogICogdG8gdGhhdCBudW1iZXIgcGVyIHNlY29uZC4gIFRoaXMgcHJldmVudHMgRG9TIGF0dGFja3MsIGJ1dCByZXN1bHRzIGluCkBAIC0xNzAsNyArMTczLDkgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiYXVkaXQ6ICVzXG4iLCBtZXNzYWdlKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9GQUlMX1BBTklDOgotCQlwYW5pYygiYXVkaXQ6ICVzXG4iLCBtZXNzYWdlKTsKKwkJLyogdGVzdCBhdWRpdF9waWQgc2luY2UgcHJpbnRrIGlzIGFsd2F5cyBsb3NleSwgd2h5IGJvdGhlcj8gKi8KKwkJaWYgKGF1ZGl0X3BpZCkKKwkJCXBhbmljKCJhdWRpdDogJXNcbiIsIG1lc3NhZ2UpOwogCQlicmVhazsKIAl9CiB9CkBAIC0yNTksMTMgKzI2NCwxMyBAQAogCQljaGFyICpjdHggPSBOVUxMOwogCQl1MzIgbGVuOwogCi0JCXJjID0gc2VsaW51eF9zaWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbik7CisJCXJjID0gc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KHNpZCwgJmN0eCwgJmxlbik7CiAJCWlmIChyYykgewogCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBzaWQ9JXUiLCBzaWQpOwogCQkJYWxsb3dfY2hhbmdlcyA9IDA7IC8qIFNvbWV0aGluZyB3ZWlyZCwgZGVueSByZXF1ZXN0ICovCiAJCX0gZWxzZSB7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHN1Ymo9JXMiLCBjdHgpOwotCQkJa2ZyZWUoY3R4KTsKKwkJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGN0eCwgbGVuKTsKIAkJfQogCX0KIAlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHJlcz0lZCIsIGFsbG93X2NoYW5nZXMpOwpAQCAtMzQ4LDEwICszNTMsMTEgQEAKIAkJd2FrZV91cCgmYXVkaXRfYmFja2xvZ193YWl0KTsKIAkJaWYgKHNrYikgewogCQkJaWYgKGF1ZGl0X3BpZCkgewotCQkJCWludCBlcnIgPSBuZXRsaW5rX3VuaWNhc3QoYXVkaXRfc29jaywgc2tiLCBhdWRpdF9waWQsIDApOworCQkJCWludCBlcnIgPSBuZXRsaW5rX3VuaWNhc3QoYXVkaXRfc29jaywgc2tiLCBhdWRpdF9ubGtfcGlkLCAwKTsKIAkJCQlpZiAoZXJyIDwgMCkgewogCQkJCQlCVUdfT04oZXJyICE9IC1FQ09OTlJFRlVTRUQpOyAvKiBTaG91ZG4ndCBoYXBwZW4gKi8KIAkJCQkJcHJpbnRrKEtFUk5fRVJSICJhdWRpdDogKk5PKiBkYWVtb24gYXQgYXVkaXRfcGlkPSVkXG4iLCBhdWRpdF9waWQpOworCQkJCQlhdWRpdF9sb2dfbG9zdCgiYXVkaXRkIGRpc3NhcGVhcmVkXG4iKTsKIAkJCQkJYXVkaXRfcGlkID0gMDsKIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtNTQzLDEyICs1NDksMTMgQEAKIAlhdWRpdF9sb2dfZm9ybWF0KCphYiwgInVzZXIgcGlkPSVkIHVpZD0ldSBhdWlkPSV1IiwKIAkJCSBwaWQsIHVpZCwgYXVpZCk7CiAJaWYgKHNpZCkgewotCQlyYyA9IHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pOworCQlyYyA9IHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChzaWQsICZjdHgsICZsZW4pOwogCQlpZiAocmMpCiAJCQlhdWRpdF9sb2dfZm9ybWF0KCphYiwgIiBzc2lkPSV1Iiwgc2lkKTsKLQkJZWxzZQorCQllbHNlIHsKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoKmFiLCAiIHN1Ymo9JXMiLCBjdHgpOwotCQlrZnJlZShjdHgpOworCQkJc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoY3R4LCBsZW4pOworCQl9CiAJfQogCiAJcmV0dXJuIHJjOwpAQCAtNjIzLDYgKzYzMCw3IEBACiAJCQkJCQkJc2lkLCAxKTsKIAogCQkJYXVkaXRfcGlkID0gbmV3X3BpZDsKKwkJCWF1ZGl0X25sa19waWQgPSBORVRMSU5LX0NCKHNrYikucGlkOwogCQl9CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX1JBVEVfTElNSVQpCiAJCQllcnIgPSBhdWRpdF9zZXRfcmF0ZV9saW1pdChzdGF0dXNfZ2V0LT5yYXRlX2xpbWl0LApAQCAtNzUwLDE4ICs3NTgsMTggQEAKIAkJYnJlYWs7CiAJfQogCWNhc2UgQVVESVRfU0lHTkFMX0lORk86Ci0JCWVyciA9IHNlbGludXhfc2lkX3RvX3N0cmluZyhhdWRpdF9zaWdfc2lkLCAmY3R4LCAmbGVuKTsKKwkJZXJyID0gc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGF1ZGl0X3NpZ19zaWQsICZjdHgsICZsZW4pOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJc2lnX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqc2lnX2RhdGEpICsgbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzaWdfZGF0YSkgewotCQkJa2ZyZWUoY3R4KTsKKwkJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGN0eCwgbGVuKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCXNpZ19kYXRhLT51aWQgPSBhdWRpdF9zaWdfdWlkOwogCQlzaWdfZGF0YS0+cGlkID0gYXVkaXRfc2lnX3BpZDsKIAkJbWVtY3B5KHNpZ19kYXRhLT5jdHgsIGN0eCwgbGVuKTsKLQkJa2ZyZWUoY3R4KTsKKwkJc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoY3R4LCBsZW4pOwogCQlhdWRpdF9zZW5kX3JlcGx5KE5FVExJTktfQ0Ioc2tiKS5waWQsIHNlcSwgQVVESVRfU0lHTkFMX0lORk8sCiAJCQkJMCwgMCwgc2lnX2RhdGEsIHNpemVvZigqc2lnX2RhdGEpICsgbGVuKTsKIAkJa2ZyZWUoc2lnX2RhdGEpOwpAQCAtODczLDEwICs4ODEsNiBAQAogCWF1ZGl0X2VuYWJsZWQgPSBhdWRpdF9kZWZhdWx0OwogCWF1ZGl0X2V2ZXJfZW5hYmxlZCB8PSAhIWF1ZGl0X2RlZmF1bHQ7CiAKLQkvKiBSZWdpc3RlciB0aGUgY2FsbGJhY2sgd2l0aCBzZWxpbnV4LiAgVGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQKLQkgKiB3aGVuIGEgbmV3IHBvbGljeSBpcyBsb2FkZWQuICovCi0Jc2VsaW51eF9hdWRpdF9zZXRfY2FsbGJhY2soJnNlbGludXhfYXVkaXRfcnVsZV91cGRhdGUpOwotCiAJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0tFUk5FTCwgImluaXRpYWxpemVkIik7CiAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCkBAIC0xMjYxLDggKzEyNjUsOCBAQAogCiAvKioKICAqIGF1ZGl0X3N0cmluZ19jb250YWluc19jb250cm9sIC0gZG9lcyBhIHN0cmluZyBuZWVkIHRvIGJlIGxvZ2dlZCBpbiBoZXgKLSAqIEBzdHJpbmcgLSBzdHJpbmcgdG8gYmUgY2hlY2tlZAotICogQGxlbiAtIG1heCBsZW5ndGggb2YgdGhlIHN0cmluZyB0byBjaGVjaworICogQHN0cmluZzogc3RyaW5nIHRvIGJlIGNoZWNrZWQKKyAqIEBsZW46IG1heCBsZW5ndGggb2YgdGhlIHN0cmluZyB0byBjaGVjawogICovCiBpbnQgYXVkaXRfc3RyaW5nX2NvbnRhaW5zX2NvbnRyb2woY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbGVuKQogewpAQCAtMTI3Nyw3ICsxMjgxLDcgQEAKIC8qKgogICogYXVkaXRfbG9nX25fdW50cnVzdGVkc3RyaW5nIC0gbG9nIGEgc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gcmFuZG9tIGNoYXJhY3RlcnMKICAqIEBhYjogYXVkaXRfYnVmZmVyCi0gKiBAbGVuOiBsZW50aCBvZiBzdHJpbmcgKG5vdCBpbmNsdWRpbmcgdHJhaWxpbmcgbnVsbCkKKyAqIEBsZW46IGxlbmd0aCBvZiBzdHJpbmcgKG5vdCBpbmNsdWRpbmcgdHJhaWxpbmcgbnVsbCkKICAqIEBzdHJpbmc6IHN0cmluZyB0byBiZSBsb2dnZWQKICAqCiAgKiBUaGlzIGNvZGUgd2lsbCBlc2NhcGUgYSBzdHJpbmcgdGhhdCBpcyBwYXNzZWQgdG8gaXQgaWYgdGhlIHN0cmluZwpAQCAtMTM1MCwxNyArMTM1NCwxOSBAQAogCWlmICghYXVkaXRfcmF0ZV9jaGVjaygpKSB7CiAJCWF1ZGl0X2xvZ19sb3N0KCJyYXRlIGxpbWl0IGV4Y2VlZGVkIik7CiAJfSBlbHNlIHsKKwkJc3RydWN0IG5sbXNnaGRyICpubGggPSBubG1zZ19oZHIoYWItPnNrYik7CiAJCWlmIChhdWRpdF9waWQpIHsKLQkJCXN0cnVjdCBubG1zZ2hkciAqbmxoID0gbmxtc2dfaGRyKGFiLT5za2IpOwogCQkJbmxoLT5ubG1zZ19sZW4gPSBhYi0+c2tiLT5sZW4gLSBOTE1TR19TUEFDRSgwKTsKIAkJCXNrYl9xdWV1ZV90YWlsKCZhdWRpdF9za2JfcXVldWUsIGFiLT5za2IpOwogCQkJYWItPnNrYiA9IE5VTEw7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmthdWRpdGRfd2FpdCk7Ci0JCX0gZWxzZSBpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IG5sbXNnX2hkcihhYi0+c2tiKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAidHlwZT0lZCAlc1xuIiwgbmxoLT5ubG1zZ190eXBlLCBhYi0+c2tiLT5kYXRhICsgTkxNU0dfU1BBQ0UoMCkpOwotCQl9IGVsc2UgewotCQkJYXVkaXRfbG9nX2xvc3QoInByaW50ayBsaW1pdCBleGNlZWRlZFxuIik7CisJCX0gZWxzZSBpZiAobmxoLT5ubG1zZ190eXBlICE9IEFVRElUX0VPRSkgeworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAidHlwZT0lZCAlc1xuIiwKKwkJCQkJbmxoLT5ubG1zZ190eXBlLAorCQkJCQlhYi0+c2tiLT5kYXRhICsgTkxNU0dfU1BBQ0UoMCkpOworCQkJfSBlbHNlCisJCQkJYXVkaXRfbG9nX2xvc3QoInByaW50ayBsaW1pdCBleGNlZWRlZFxuIik7CiAJCX0KIAl9CiAJYXVkaXRfYnVmZmVyX2ZyZWUoYWIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmggYi9rZXJuZWwvYXVkaXQuaAppbmRleCAyNTU0YmQ1Li4zY2ZjNTRlIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuaAorKysgYi9rZXJuZWwvYXVkaXQuaApAQCAtNjUsMzQgKzY1LDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJ1bGVzOwkvKiBhc3NvY2lhdGVkIHJ1bGVzICovCiB9OwogCi1zdHJ1Y3QgYXVkaXRfZmllbGQgewotCXUzMgkJCQl0eXBlOwotCXUzMgkJCQl2YWw7Ci0JdTMyCQkJCW9wOwotCWNoYXIJCQkJKnNlX3N0cjsKLQlzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlCSpzZV9ydWxlOwotfTsKLQogc3RydWN0IGF1ZGl0X3RyZWU7CiBzdHJ1Y3QgYXVkaXRfY2h1bms7CiAKLXN0cnVjdCBhdWRpdF9rcnVsZSB7Ci0JaW50CQkJdmVyc19vcHM7Ci0JdTMyCQkJZmxhZ3M7Ci0JdTMyCQkJbGlzdG5yOwotCXUzMgkJCWFjdGlvbjsKLQl1MzIJCQltYXNrW0FVRElUX0JJVE1BU0tfU0laRV07Ci0JdTMyCQkJYnVmbGVuOyAvKiBmb3IgZGF0YSBhbGxvYyBvbiBsaXN0IHJ1bGVzICovCi0JdTMyCQkJZmllbGRfY291bnQ7Ci0JY2hhcgkJCSpmaWx0ZXJrZXk7IC8qIHRpZXMgZXZlbnRzIHRvIHJ1bGVzICovCi0Jc3RydWN0IGF1ZGl0X2ZpZWxkCSpmaWVsZHM7Ci0Jc3RydWN0IGF1ZGl0X2ZpZWxkCSphcmNoX2Y7IC8qIHF1aWNrIGFjY2VzcyB0byBhcmNoIGZpZWxkICovCi0Jc3RydWN0IGF1ZGl0X2ZpZWxkCSppbm9kZV9mOyAvKiBxdWljayBhY2Nlc3MgdG8gYW4gaW5vZGUgZmllbGQgKi8KLQlzdHJ1Y3QgYXVkaXRfd2F0Y2gJKndhdGNoOwkvKiBhc3NvY2lhdGVkIHdhdGNoICovCi0Jc3RydWN0IGF1ZGl0X3RyZWUJKnRyZWU7CS8qIGFzc29jaWF0ZWQgd2F0Y2hlZCB0cmVlICovCi0Jc3RydWN0IGxpc3RfaGVhZAlybGlzdDsJLyogZW50cnkgaW4gYXVkaXRfe3dhdGNoLHRyZWV9LnJ1bGVzIGxpc3QgKi8KLX07Ci0KIHN0cnVjdCBhdWRpdF9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXN0cnVjdCByY3VfaGVhZAkJcmN1OwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwppbmRleCAyZjI5MTRiLi4yOGZlZjZiIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYworKysgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KLSNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlICJhdWRpdC5oIgogCiAvKgpAQCAtMzgsNyArMzgsNyBAQAogICogCQlTeW5jaHJvbml6ZXMgd3JpdGVzIGFuZCBibG9ja2luZyByZWFkcyBvZiBhdWRpdCdzIGZpbHRlcmxpc3QKICAqIAkJZGF0YS4gIFJjdSBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBmaWx0ZXJsaXN0IGFuZCBhY2Nlc3MKICAqIAkJY29udGVudHMgb2Ygc3RydWN0cyBhdWRpdF9lbnRyeSwgYXVkaXRfd2F0Y2ggYW5kIG9wYXF1ZQotICogCQlzZWxpbnV4IHJ1bGVzIGR1cmluZyBmaWx0ZXJpbmcuICBJZiBtb2RpZmllZCwgdGhlc2Ugc3RydWN0dXJlcworICogCQlMU00gcnVsZXMgZHVyaW5nIGZpbHRlcmluZy4gIElmIG1vZGlmaWVkLCB0aGVzZSBzdHJ1Y3R1cmVzCiAgKiAJCW11c3QgYmUgY29waWVkIGFuZCByZXBsYWNlIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiB0aGUgZmlsdGVybGlzdC4KICAqIAkJQW4gYXVkaXRfcGFyZW50IHN0cnVjdCBpcyBub3QgYWNjZXNzZWQgZHVyaW5nIGZpbHRlcmluZywgc28gbWF5CiAgKiAJCWJlIHdyaXR0ZW4gZGlyZWN0bHkgcHJvdmlkZWQgYXVkaXRfZmlsdGVyX211dGV4IGlzIGhlbGQuCkBAIC0xMzksOCArMTM5LDggQEAKIAlpZiAoZS0+cnVsZS5maWVsZHMpCiAJCWZvciAoaSA9IDA7IGkgPCBlLT5ydWxlLmZpZWxkX2NvdW50OyBpKyspIHsKIAkJCXN0cnVjdCBhdWRpdF9maWVsZCAqZiA9ICZlLT5ydWxlLmZpZWxkc1tpXTsKLQkJCWtmcmVlKGYtPnNlX3N0cik7Ci0JCQlzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZShmLT5zZV9ydWxlKTsKKwkJCWtmcmVlKGYtPmxzbV9zdHIpOworCQkJc2VjdXJpdHlfYXVkaXRfcnVsZV9mcmVlKGYtPmxzbV9ydWxlKTsKIAkJfQogCWtmcmVlKGUtPnJ1bGUuZmllbGRzKTsKIAlrZnJlZShlLT5ydWxlLmZpbHRlcmtleSk7CkBAIC01NTQsOCArNTU0LDggQEAKIAkJZi0+b3AgPSBkYXRhLT5maWVsZGZsYWdzW2ldICYgQVVESVRfT1BFUkFUT1JTOwogCQlmLT50eXBlID0gZGF0YS0+ZmllbGRzW2ldOwogCQlmLT52YWwgPSBkYXRhLT52YWx1ZXNbaV07Ci0JCWYtPnNlX3N0ciA9IE5VTEw7Ci0JCWYtPnNlX3J1bGUgPSBOVUxMOworCQlmLT5sc21fc3RyID0gTlVMTDsKKwkJZi0+bHNtX3J1bGUgPSBOVUxMOwogCQlzd2l0Y2goZi0+dHlwZSkgewogCQljYXNlIEFVRElUX1BJRDoKIAkJY2FzZSBBVURJVF9VSUQ6CkBAIC01OTcsMTIgKzU5NywxMiBAQAogCQkJCWdvdG8gZXhpdF9mcmVlOwogCQkJZW50cnktPnJ1bGUuYnVmbGVuICs9IGYtPnZhbDsKIAotCQkJZXJyID0gc2VsaW51eF9hdWRpdF9ydWxlX2luaXQoZi0+dHlwZSwgZi0+b3AsIHN0ciwKLQkJCQkJCSAgICAgICZmLT5zZV9ydWxlKTsKKwkJCWVyciA9IHNlY3VyaXR5X2F1ZGl0X3J1bGVfaW5pdChmLT50eXBlLCBmLT5vcCwgc3RyLAorCQkJCQkJICAgICAgICh2b2lkICoqKSZmLT5sc21fcnVsZSk7CiAJCQkvKiBLZWVwIGN1cnJlbnRseSBpbnZhbGlkIGZpZWxkcyBhcm91bmQgaW4gY2FzZSB0aGV5CiAJCQkgKiBiZWNvbWUgdmFsaWQgYWZ0ZXIgYSBwb2xpY3kgcmVsb2FkLiAqLwogCQkJaWYgKGVyciA9PSAtRUlOVkFMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXVkaXQgcnVsZSBmb3Igc2VsaW51eCAiCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXVkaXQgcnVsZSBmb3IgTFNNICIKIAkJCQkgICAgICAgIlwnJXNcJyBpcyBpbnZhbGlkXG4iLCAgc3RyKTsKIAkJCQllcnIgPSAwOwogCQkJfQpAQCAtNjEwLDcgKzYxMCw3IEBACiAJCQkJa2ZyZWUoc3RyKTsKIAkJCQlnb3RvIGV4aXRfZnJlZTsKIAkJCX0gZWxzZQotCQkJCWYtPnNlX3N0ciA9IHN0cjsKKwkJCQlmLT5sc21fc3RyID0gc3RyOwogCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfV0FUQ0g6CiAJCQlzdHIgPSBhdWRpdF91bnBhY2tfc3RyaW5nKCZidWZwLCAmcmVtYWluLCBmLT52YWwpOwpAQCAtNzU0LDcgKzc1NCw3IEBACiAJCWNhc2UgQVVESVRfT0JKX0xFVl9MT1c6CiAJCWNhc2UgQVVESVRfT0JKX0xFVl9ISUdIOgogCQkJZGF0YS0+YnVmbGVuICs9IGRhdGEtPnZhbHVlc1tpXSA9Ci0JCQkJYXVkaXRfcGFja19zdHJpbmcoJmJ1ZnAsIGYtPnNlX3N0cik7CisJCQkJYXVkaXRfcGFja19zdHJpbmcoJmJ1ZnAsIGYtPmxzbV9zdHIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfV0FUQ0g6CiAJCQlkYXRhLT5idWZsZW4gKz0gZGF0YS0+dmFsdWVzW2ldID0KQEAgLTgwNiw3ICs4MDYsNyBAQAogCQljYXNlIEFVRElUX09CSl9UWVBFOgogCQljYXNlIEFVRElUX09CSl9MRVZfTE9XOgogCQljYXNlIEFVRElUX09CSl9MRVZfSElHSDoKLQkJCWlmIChzdHJjbXAoYS0+ZmllbGRzW2ldLnNlX3N0ciwgYi0+ZmllbGRzW2ldLnNlX3N0cikpCisJCQlpZiAoc3RyY21wKGEtPmZpZWxkc1tpXS5sc21fc3RyLCBiLT5maWVsZHNbaV0ubHNtX3N0cikpCiAJCQkJcmV0dXJuIDE7CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9XQVRDSDoKQEAgLTg2MiwyOCArODYyLDI4IEBACiAJcmV0dXJuIG5ldzsKIH0KIAotLyogRHVwbGljYXRlIHNlbGludXggZmllbGQgaW5mb3JtYXRpb24uICBUaGUgc2VfcnVsZSBpcyBvcGFxdWUsIHNvIG11c3QgYmUKKy8qIER1cGxpY2F0ZSBMU00gZmllbGQgaW5mb3JtYXRpb24uICBUaGUgbHNtX3J1bGUgaXMgb3BhcXVlLCBzbyBtdXN0IGJlCiAgKiByZS1pbml0aWFsaXplZC4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2R1cGVfc2VsaW51eF9maWVsZChzdHJ1Y3QgYXVkaXRfZmllbGQgKmRmLAorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfZHVwZV9sc21fZmllbGQoc3RydWN0IGF1ZGl0X2ZpZWxkICpkZiwKIAkJCQkJICAgc3RydWN0IGF1ZGl0X2ZpZWxkICpzZikKIHsKIAlpbnQgcmV0ID0gMDsKLQljaGFyICpzZV9zdHI7CisJY2hhciAqbHNtX3N0cjsKIAotCS8qIG91ciBvd24gY29weSBvZiBzZV9zdHIgKi8KLQlzZV9zdHIgPSBrc3RyZHVwKHNmLT5zZV9zdHIsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghc2Vfc3RyKSkKKwkvKiBvdXIgb3duIGNvcHkgb2YgbHNtX3N0ciAqLworCWxzbV9zdHIgPSBrc3RyZHVwKHNmLT5sc21fc3RyLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWxzbV9zdHIpKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkZi0+c2Vfc3RyID0gc2Vfc3RyOworCWRmLT5sc21fc3RyID0gbHNtX3N0cjsKIAotCS8qIG91ciBvd24gKHJlZnJlc2hlZCkgY29weSBvZiBzZV9ydWxlICovCi0JcmV0ID0gc2VsaW51eF9hdWRpdF9ydWxlX2luaXQoZGYtPnR5cGUsIGRmLT5vcCwgZGYtPnNlX3N0ciwKLQkJCQkgICAgICAmZGYtPnNlX3J1bGUpOworCS8qIG91ciBvd24gKHJlZnJlc2hlZCkgY29weSBvZiBsc21fcnVsZSAqLworCXJldCA9IHNlY3VyaXR5X2F1ZGl0X3J1bGVfaW5pdChkZi0+dHlwZSwgZGYtPm9wLCBkZi0+bHNtX3N0ciwKKwkJCQkgICAgICAgKHZvaWQgKiopJmRmLT5sc21fcnVsZSk7CiAJLyogS2VlcCBjdXJyZW50bHkgaW52YWxpZCBmaWVsZHMgYXJvdW5kIGluIGNhc2UgdGhleQogCSAqIGJlY29tZSB2YWxpZCBhZnRlciBhIHBvbGljeSByZWxvYWQuICovCiAJaWYgKHJldCA9PSAtRUlOVkFMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImF1ZGl0IHJ1bGUgZm9yIHNlbGludXggXCclc1wnIGlzICIKLQkJICAgICAgICJpbnZhbGlkXG4iLCBkZi0+c2Vfc3RyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXVkaXQgcnVsZSBmb3IgTFNNIFwnJXNcJyBpcyAiCisJCSAgICAgICAiaW52YWxpZFxuIiwgZGYtPmxzbV9zdHIpOwogCQlyZXQgPSAwOwogCX0KIApAQCAtODkxLDcgKzg5MSw3IEBACiB9CiAKIC8qIER1cGxpY2F0ZSBhbiBhdWRpdCBydWxlLiAgVGhpcyB3aWxsIGJlIGEgZGVlcCBjb3B5IHdpdGggdGhlIGV4Y2VwdGlvbgotICogb2YgdGhlIHdhdGNoIC0gdGhhdCBwb2ludGVyIGlzIGNhcnJpZWQgb3Zlci4gIFRoZSBzZWxpbnV4IHNwZWNpZmljIGZpZWxkcworICogb2YgdGhlIHdhdGNoIC0gdGhhdCBwb2ludGVyIGlzIGNhcnJpZWQgb3Zlci4gIFRoZSBMU00gc3BlY2lmaWMgZmllbGRzCiAgKiB3aWxsIGJlIHVwZGF0ZWQgaW4gdGhlIGNvcHkuICBUaGUgcG9pbnQgaXMgdG8gYmUgYWJsZSB0byByZXBsYWNlIHRoZSBvbGQKICAqIHJ1bGUgd2l0aCB0aGUgbmV3IHJ1bGUgaW4gdGhlIGZpbHRlcmxpc3QsIHRoZW4gZnJlZSB0aGUgb2xkIHJ1bGUuCiAgKiBUaGUgcmxpc3QgZWxlbWVudCBpcyB1bmRlZmluZWQ7IGxpc3QgbWFuaXB1bGF0aW9ucyBhcmUgaGFuZGxlZCBhcGFydCBmcm9tCkBAIC05MzAsNyArOTMwLDcgQEAKIAluZXctPnRyZWUgPSBvbGQtPnRyZWU7CiAJbWVtY3B5KG5ldy0+ZmllbGRzLCBvbGQtPmZpZWxkcywgc2l6ZW9mKHN0cnVjdCBhdWRpdF9maWVsZCkgKiBmY291bnQpOwogCi0JLyogZGVlcCBjb3B5IHRoaXMgaW5mb3JtYXRpb24sIHVwZGF0aW5nIHRoZSBzZV9ydWxlIGZpZWxkcywgYmVjYXVzZQorCS8qIGRlZXAgY29weSB0aGlzIGluZm9ybWF0aW9uLCB1cGRhdGluZyB0aGUgbHNtX3J1bGUgZmllbGRzLCBiZWNhdXNlCiAJICogdGhlIG9yaWdpbmFscyB3aWxsIGFsbCBiZSBmcmVlZCB3aGVuIHRoZSBvbGQgcnVsZSBpcyBmcmVlZC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgZmNvdW50OyBpKyspIHsKIAkJc3dpdGNoIChuZXctPmZpZWxkc1tpXS50eXBlKSB7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAkJY2FzZSBBVURJVF9PQkpfVFlQRToKIAkJY2FzZSBBVURJVF9PQkpfTEVWX0xPVzoKIAkJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6Ci0JCQllcnIgPSBhdWRpdF9kdXBlX3NlbGludXhfZmllbGQoJm5ldy0+ZmllbGRzW2ldLAorCQkJZXJyID0gYXVkaXRfZHVwZV9sc21fZmllbGQoJm5ldy0+ZmllbGRzW2ldLAogCQkJCQkJICAgICAgICZvbGQtPmZpZWxkc1tpXSk7CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9GSUxURVJLRVk6CkBAIC0xNTE1LDExICsxNTE1LDEyIEBACiAJaWYgKHNpZCkgewogCQljaGFyICpjdHggPSBOVUxMOwogCQl1MzIgbGVuOwotCQlpZiAoc2VsaW51eF9zaWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpCisJCWlmIChzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoc2lkLCAmY3R4LCAmbGVuKSkKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgc3NpZD0ldSIsIHNpZCk7Ci0JCWVsc2UKKwkJZWxzZSB7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHN1Ymo9JXMiLCBjdHgpOwotCQlrZnJlZShjdHgpOworCQkJc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoY3R4LCBsZW4pOworCQl9CiAJfQogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3A9JXMgcnVsZSBrZXk9IiwgYWN0aW9uKTsKIAlpZiAocnVsZS0+ZmlsdGVya2V5KQpAQCAtMTc2MSwzOCArMTc2MiwxMiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgcnVsZSBjb250YWlucyBhbnkgc2VsaW51eCBmaWVsZHMuICBSZXR1cm5zIDEgaWYgdGhlcmUKLSAgIGFyZSBzZWxpbnV4IGZpZWxkcyBzcGVjaWZpZWQgaW4gdGhlIHJ1bGUsIDAgb3RoZXJ3aXNlLiAqLwotc3RhdGljIGlubGluZSBpbnQgYXVkaXRfcnVsZV9oYXNfc2VsaW51eChzdHJ1Y3QgYXVkaXRfa3J1bGUgKnJ1bGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcnVsZS0+ZmllbGRfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmcnVsZS0+ZmllbGRzW2ldOwotCQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQkJY2FzZSBBVURJVF9TVUJKX1VTRVI6Ci0JCWNhc2UgQVVESVRfU1VCSl9ST0xFOgotCQljYXNlIEFVRElUX1NVQkpfVFlQRToKLQkJY2FzZSBBVURJVF9TVUJKX1NFTjoKLQkJY2FzZSBBVURJVF9TVUJKX0NMUjoKLQkJY2FzZSBBVURJVF9PQkpfVVNFUjoKLQkJY2FzZSBBVURJVF9PQkpfUk9MRToKLQkJY2FzZSBBVURJVF9PQkpfVFlQRToKLQkJY2FzZSBBVURJVF9PQkpfTEVWX0xPVzoKLQkJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmUtaW5pdGlhbGl6ZSB0aGUgc2VfcnVsZSBmaWVsZCBvZiBhbGwgYXBwbGljYWJsZSBydWxlcy4KLSAqIEl0IHdpbGwgdHJhdmVyc2UgdGhlIGZpbHRlciBsaXN0cyBzZXJhcmNoaW5nIGZvciBydWxlcyB0aGF0IGNvbnRhaW4gc2VsaW51eAorLyogVGhpcyBmdW5jdGlvbiB3aWxsIHJlLWluaXRpYWxpemUgdGhlIGxzbV9ydWxlIGZpZWxkIG9mIGFsbCBhcHBsaWNhYmxlIHJ1bGVzLgorICogSXQgd2lsbCB0cmF2ZXJzZSB0aGUgZmlsdGVyIGxpc3RzIHNlcmFyY2hpbmcgZm9yIHJ1bGVzIHRoYXQgY29udGFpbiBMU00KICAqIHNwZWNpZmljIGZpbHRlciBmaWVsZHMuICBXaGVuIHN1Y2ggYSBydWxlIGlzIGZvdW5kLCBpdCBpcyBjb3BpZWQsIHRoZQotICogc2VsaW51eCBmaWVsZCBpcyByZS1pbml0aWFsaXplZCwgYW5kIHRoZSBvbGQgcnVsZSBpcyByZXBsYWNlZCB3aXRoIHRoZQorICogTFNNIGZpZWxkIGlzIHJlLWluaXRpYWxpemVkLCBhbmQgdGhlIG9sZCBydWxlIGlzIHJlcGxhY2VkIHdpdGggdGhlCiAgKiB1cGRhdGVkIHJ1bGUuICovCi1pbnQgc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSh2b2lkKQoraW50IGF1ZGl0X3VwZGF0ZV9sc21fcnVsZXModm9pZCkKIHsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LCAqbiwgKm5lbnRyeTsKIAlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoOwpAQCAtMTgwNCw3ICsxNzc5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVURJVF9OUl9GSUxURVJTOyBpKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCAmYXVkaXRfZmlsdGVyX2xpc3RbaV0sIGxpc3QpIHsKLQkJCWlmICghYXVkaXRfcnVsZV9oYXNfc2VsaW51eCgmZW50cnktPnJ1bGUpKQorCQkJaWYgKCFzZWN1cml0eV9hdWRpdF9ydWxlX2tub3duKCZlbnRyeS0+cnVsZSkpCiAJCQkJY29udGludWU7CiAKIAkJCXdhdGNoID0gZW50cnktPnJ1bGUud2F0Y2g7CkBAIC0xODE1LDcgKzE3OTAsNyBAQAogCQkJCSAqIHJldHVybiB2YWx1ZSAqLwogCQkJCWlmICghZXJyKQogCQkJCQllcnIgPSBQVFJfRVJSKG5lbnRyeSk7Ci0JCQkJYXVkaXRfcGFuaWMoImVycm9yIHVwZGF0aW5nIHNlbGludXggZmlsdGVycyIpOworCQkJCWF1ZGl0X3BhbmljKCJlcnJvciB1cGRhdGluZyBMU00gZmlsdGVycyIpOwogCQkJCWlmICh3YXRjaCkKIAkJCQkJbGlzdF9kZWwoJmVudHJ5LT5ydWxlLnJsaXN0KTsKIAkJCQlsaXN0X2RlbF9yY3UoJmVudHJ5LT5saXN0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdHNjLmMgYi9rZXJuZWwvYXVkaXRzYy5jCmluZGV4IGFjNmQ5YjIuLjU2ZTU2ZWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdHNjLmMKKysrIGIva2VybmVsL2F1ZGl0c2MuYwpAQCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CkBAIC01MjgsMTQgKzUyNywxNCBAQAogCQkJICAgbWF0Y2ggZm9yIG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24gdGhhdAogCQkJICAgbWF5IGJlIHdhbnRlZC4gICBBbiBlcnJvciBtZXNzYWdlIHdpbGwgYWxzbyBiZQogCQkJICAgbG9nZ2VkIHVwb24gZXJyb3IgKi8KLQkJCWlmIChmLT5zZV9ydWxlKSB7CisJCQlpZiAoZi0+bHNtX3J1bGUpIHsKIAkJCQlpZiAobmVlZF9zaWQpIHsKLQkJCQkJc2VsaW51eF9nZXRfdGFza19zaWQodHNrLCAmc2lkKTsKKwkJCQkJc2VjdXJpdHlfdGFza19nZXRzZWNpZCh0c2ssICZzaWQpOwogCQkJCQluZWVkX3NpZCA9IDA7CiAJCQkJfQotCQkJCXJlc3VsdCA9IHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaChzaWQsIGYtPnR5cGUsCisJCQkJcmVzdWx0ID0gc2VjdXJpdHlfYXVkaXRfcnVsZV9tYXRjaChzaWQsIGYtPnR5cGUsCiAJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPm9wLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5zZV9ydWxlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5sc21fcnVsZSwKIAkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTQ2LDE4ICs1NDUsMTggQEAKIAkJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6CiAJCQkvKiBUaGUgYWJvdmUgbm90ZSBmb3IgQVVESVRfU1VCSl9VU0VSLi4uQVVESVRfU1VCSl9DTFIKIAkJCSAgIGFsc28gYXBwbGllcyBoZXJlICovCi0JCQlpZiAoZi0+c2VfcnVsZSkgeworCQkJaWYgKGYtPmxzbV9ydWxlKSB7CiAJCQkJLyogRmluZCBmaWxlcyB0aGF0IG1hdGNoICovCiAJCQkJaWYgKG5hbWUpIHsKLQkJCQkJcmVzdWx0ID0gc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKAorCQkJCQlyZXN1bHQgPSBzZWN1cml0eV9hdWRpdF9ydWxlX21hdGNoKAogCQkJCQkgICAgICAgICAgIG5hbWUtPm9zaWQsIGYtPnR5cGUsIGYtPm9wLAotCQkJCQkgICAgICAgICAgIGYtPnNlX3J1bGUsIGN0eCk7CisJCQkJCSAgICAgICAgICAgZi0+bHNtX3J1bGUsIGN0eCk7CiAJCQkJfSBlbHNlIGlmIChjdHgpIHsKIAkJCQkJZm9yIChqID0gMDsgaiA8IGN0eC0+bmFtZV9jb3VudDsgaisrKSB7Ci0JCQkJCQlpZiAoc2VsaW51eF9hdWRpdF9ydWxlX21hdGNoKAorCQkJCQkJaWYgKHNlY3VyaXR5X2F1ZGl0X3J1bGVfbWF0Y2goCiAJCQkJCQkgICAgICBjdHgtPm5hbWVzW2pdLm9zaWQsCiAJCQkJCQkgICAgICBmLT50eXBlLCBmLT5vcCwKLQkJCQkJCSAgICAgIGYtPnNlX3J1bGUsIGN0eCkpIHsKKwkJCQkJCSAgICAgIGYtPmxzbV9ydWxlLCBjdHgpKSB7CiAJCQkJCQkJKytyZXN1bHQ7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CkBAIC01NzAsNyArNTY5LDcgQEAKIAkJCQkJICAgICBhdXggPSBhdXgtPm5leHQpIHsKIAkJCQkJCWlmIChhdXgtPnR5cGUgPT0gQVVESVRfSVBDKSB7CiAJCQkJCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7Ci0JCQkJCQkJaWYgKHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaChheGktPm9zaWQsIGYtPnR5cGUsIGYtPm9wLCBmLT5zZV9ydWxlLCBjdHgpKSB7CisJCQkJCQkJaWYgKHNlY3VyaXR5X2F1ZGl0X3J1bGVfbWF0Y2goYXhpLT5vc2lkLCBmLT50eXBlLCBmLT5vcCwgZi0+bHNtX3J1bGUsIGN0eCkpIHsKIAkJCQkJCQkJKytyZXN1bHQ7CiAJCQkJCQkJCWJyZWFrOwogCQkJCQkJCX0KQEAgLTg4NSwxMSArODg0LDExIEBACiAJaW50IGVycm9yOwogCXUzMiBzaWQ7CiAKLQlzZWxpbnV4X2dldF90YXNrX3NpZChjdXJyZW50LCAmc2lkKTsKKwlzZWN1cml0eV90YXNrX2dldHNlY2lkKGN1cnJlbnQsICZzaWQpOwogCWlmICghc2lkKQogCQlyZXR1cm47CiAKLQllcnJvciA9IHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pOworCWVycm9yID0gc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KHNpZCwgJmN0eCwgJmxlbik7CiAJaWYgKGVycm9yKSB7CiAJCWlmIChlcnJvciAhPSAtRUlOVkFMKQogCQkJZ290byBlcnJvcl9wYXRoOwpAQCAtODk3LDcgKzg5Niw3IEBACiAJfQogCiAJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBzdWJqPSVzIiwgY3R4KTsKLQlrZnJlZShjdHgpOworCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGN0eCwgbGVuKTsKIAlyZXR1cm47CiAKIGVycm9yX3BhdGg6CkBAIC05NDEsNyArOTQwLDcgQEAKIAkJCQkgdTMyIHNpZCwgY2hhciAqY29tbSkKIHsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKLQljaGFyICpzID0gTlVMTDsKKwljaGFyICpjdHggPSBOVUxMOwogCXUzMiBsZW47CiAJaW50IHJjID0gMDsKIApAQCAtOTUxLDE1ICs5NTAsMTYgQEAKIAogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvcGlkPSVkIG9hdWlkPSVkIG91aWQ9JWQgb3Nlcz0lZCIsIHBpZCwgYXVpZCwKIAkJCSB1aWQsIHNlc3Npb25pZCk7Ci0JaWYgKHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZzLCAmbGVuKSkgeworCWlmIChzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoc2lkLCAmY3R4LCAmbGVuKSkgewogCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9iaj0obm9uZSkiKTsKIAkJcmMgPSAxOwotCX0gZWxzZQotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9iaj0lcyIsIHMpOworCX0gZWxzZSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwgY3R4KTsKKwkJc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoY3R4LCBsZW4pOworCX0KIAlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9jb21tPSIpOwogCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIGNvbW0pOwogCWF1ZGl0X2xvZ19lbmQoYWIpOwotCWtmcmVlKHMpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTAwMCw5ICsxMDAwLDEwIEBACiAJICogZm9yIHN0cmluZ3MgdGhhdCBhcmUgdG9vIGxvbmcsIHdlIHNob3VsZCBub3QgaGF2ZSBjcmVhdGVkCiAJICogYW55LgogCSAqLwotCWlmICh1bmxpa2VseSgobGVuICA9IC0xKSB8fCBsZW4gPiBNQVhfQVJHX1NUUkxFTiAtIDEpKSB7CisJaWYgKHVubGlrZWx5KChsZW4gPT0gLTEpIHx8IGxlbiA+IE1BWF9BUkdfU1RSTEVOIC0gMSkpIHsKIAkJV0FSTl9PTigxKTsKIAkJc2VuZF9zaWcoU0lHS0lMTCwgY3VycmVudCwgMCk7CisJCXJldHVybiAtMTsKIAl9CiAKIAkvKiB3YWxrIHRoZSB3aG9sZSBhcmd1bWVudCBsb29raW5nIGZvciBub24tYXNjaWkgY2hhcnMgKi8KQEAgLTEwMjAsNiArMTAyMSw3IEBACiAJCWlmIChyZXQpIHsKIAkJCVdBUk5fT04oMSk7CiAJCQlzZW5kX3NpZyhTSUdLSUxMLCBjdXJyZW50LCAwKTsKKwkJCXJldHVybiAtMTsKIAkJfQogCQlidWZbdG9fc2VuZF0gPSAnXDAnOwogCQloYXNfY250bCA9IGF1ZGl0X3N0cmluZ19jb250YWluc19jb250cm9sKGJ1ZiwgdG9fc2VuZCk7CkBAIC0xMDY4LDcgKzEwNzAsNyBAQAogCQkgKiBzbyB3ZSBjYW4gYmUgc3VyZSBub3RoaW5nIHdhcyBsb3N0LgogCQkgKi8KIAkJaWYgKChpID09IDApICYmICh0b29fbG9uZykpCi0JCQlhdWRpdF9sb2dfZm9ybWF0KCphYiwgImElZF9sZW49JWxkICIsIGFyZ19udW0sCisJCQlhdWRpdF9sb2dfZm9ybWF0KCphYiwgImElZF9sZW49JXp1ICIsIGFyZ19udW0sCiAJCQkJCSBoYXNfY250bCA/IDIqbGVuIDogbGVuKTsKIAogCQkvKgpAQCAtMTA4Myw2ICsxMDg1LDcgQEAKIAkJaWYgKHJldCkgewogCQkJV0FSTl9PTigxKTsKIAkJCXNlbmRfc2lnKFNJR0tJTEwsIGN1cnJlbnQsIDApOworCQkJcmV0dXJuIC0xOwogCQl9CiAJCWJ1Zlt0b19zZW5kXSA9ICdcMCc7CiAKQEAgLTEyNjgsMTQgKzEyNzEsMTUgQEAKIAkJCWlmIChheGktPm9zaWQgIT0gMCkgewogCQkJCWNoYXIgKmN0eCA9IE5VTEw7CiAJCQkJdTMyIGxlbjsKLQkJCQlpZiAoc2VsaW51eF9zaWRfdG9fc3RyaW5nKAorCQkJCWlmIChzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoCiAJCQkJCQlheGktPm9zaWQsICZjdHgsICZsZW4pKSB7CiAJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3NpZD0ldSIsCiAJCQkJCQkJYXhpLT5vc2lkKTsKIAkJCQkJY2FsbF9wYW5pYyA9IDE7Ci0JCQkJfSBlbHNlCisJCQkJfSBlbHNlIHsKIAkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvYmo9JXMiLCBjdHgpOwotCQkJCWtmcmVlKGN0eCk7CisJCQkJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGN0eCwgbGVuKTsKKwkJCQl9CiAJCQl9CiAJCQlicmVhazsgfQogCkBAIC0xMzg5LDEzICsxMzkzLDE0IEBACiAJCWlmIChuLT5vc2lkICE9IDApIHsKIAkJCWNoYXIgKmN0eCA9IE5VTEw7CiAJCQl1MzIgbGVuOwotCQkJaWYgKHNlbGludXhfc2lkX3RvX3N0cmluZygKKwkJCWlmIChzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoCiAJCQkJbi0+b3NpZCwgJmN0eCwgJmxlbikpIHsKIAkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLCBuLT5vc2lkKTsKIAkJCQljYWxsX3BhbmljID0gMjsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKIAkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9iaj0lcyIsIGN0eCk7Ci0JCQlrZnJlZShjdHgpOworCQkJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGN0eCwgbGVuKTsKKwkJCX0KIAkJfQogCiAJCWF1ZGl0X2xvZ19lbmQoYWIpOwpAQCAtMTc3Miw3ICsxNzc3LDcgQEAKIAluYW1lLT51aWQgICA9IGlub2RlLT5pX3VpZDsKIAluYW1lLT5naWQgICA9IGlub2RlLT5pX2dpZDsKIAluYW1lLT5yZGV2ICA9IGlub2RlLT5pX3JkZXY7Ci0Jc2VsaW51eF9nZXRfaW5vZGVfc2lkKGlub2RlLCAmbmFtZS0+b3NpZCk7CisJc2VjdXJpdHlfaW5vZGVfZ2V0c2VjaWQoaW5vZGUsICZuYW1lLT5vc2lkKTsKIH0KIAogLyoqCkBAIC0yMTg3LDggKzIxOTIsNyBAQAogCWF4LT51aWQgPSBpcGNwLT51aWQ7CiAJYXgtPmdpZCA9IGlwY3AtPmdpZDsKIAlheC0+bW9kZSA9IGlwY3AtPm1vZGU7Ci0Jc2VsaW51eF9nZXRfaXBjX3NpZChpcGNwLCAmYXgtPm9zaWQpOwotCisJc2VjdXJpdHlfaXBjX2dldHNlY2lkKGlwY3AsICZheC0+b3NpZCk7CiAJYXgtPmQudHlwZSA9IEFVRElUX0lQQzsKIAlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OwogCWNvbnRleHQtPmF1eCA9ICh2b2lkICopYXg7CkBAIC0yMzQwLDcgKzIzNDQsNyBAQAogCWNvbnRleHQtPnRhcmdldF9hdWlkID0gYXVkaXRfZ2V0X2xvZ2ludWlkKHQpOwogCWNvbnRleHQtPnRhcmdldF91aWQgPSB0LT51aWQ7CiAJY29udGV4dC0+dGFyZ2V0X3Nlc3Npb25pZCA9IGF1ZGl0X2dldF9zZXNzaW9uaWQodCk7Ci0Jc2VsaW51eF9nZXRfdGFza19zaWQodCwgJmNvbnRleHQtPnRhcmdldF9zaWQpOworCXNlY3VyaXR5X3Rhc2tfZ2V0c2VjaWQodCwgJmNvbnRleHQtPnRhcmdldF9zaWQpOwogCW1lbWNweShjb250ZXh0LT50YXJnZXRfY29tbSwgdC0+Y29tbSwgVEFTS19DT01NX0xFTik7CiB9CiAKQEAgLTIzNjgsNyArMjM3Miw3IEBACiAJCQkJYXVkaXRfc2lnX3VpZCA9IHRzay0+bG9naW51aWQ7CiAJCQllbHNlCiAJCQkJYXVkaXRfc2lnX3VpZCA9IHRzay0+dWlkOwotCQkJc2VsaW51eF9nZXRfdGFza19zaWQodHNrLCAmYXVkaXRfc2lnX3NpZCk7CisJCQlzZWN1cml0eV90YXNrX2dldHNlY2lkKHRzaywgJmF1ZGl0X3NpZ19zaWQpOwogCQl9CiAJCWlmICghYXVkaXRfc2lnbmFscyB8fCBhdWRpdF9kdW1teV9jb250ZXh0KCkpCiAJCQlyZXR1cm4gMDsKQEAgLTIzODEsNyArMjM4NSw3IEBACiAJCWN0eC0+dGFyZ2V0X2F1aWQgPSBhdWRpdF9nZXRfbG9naW51aWQodCk7CiAJCWN0eC0+dGFyZ2V0X3VpZCA9IHQtPnVpZDsKIAkJY3R4LT50YXJnZXRfc2Vzc2lvbmlkID0gYXVkaXRfZ2V0X3Nlc3Npb25pZCh0KTsKLQkJc2VsaW51eF9nZXRfdGFza19zaWQodCwgJmN0eC0+dGFyZ2V0X3NpZCk7CisJCXNlY3VyaXR5X3Rhc2tfZ2V0c2VjaWQodCwgJmN0eC0+dGFyZ2V0X3NpZCk7CiAJCW1lbWNweShjdHgtPnRhcmdldF9jb21tLCB0LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjQwMiw3ICsyNDA2LDcgQEAKIAlheHAtPnRhcmdldF9hdWlkW2F4cC0+cGlkX2NvdW50XSA9IGF1ZGl0X2dldF9sb2dpbnVpZCh0KTsKIAlheHAtPnRhcmdldF91aWRbYXhwLT5waWRfY291bnRdID0gdC0+dWlkOwogCWF4cC0+dGFyZ2V0X3Nlc3Npb25pZFtheHAtPnBpZF9jb3VudF0gPSBhdWRpdF9nZXRfc2Vzc2lvbmlkKHQpOwotCXNlbGludXhfZ2V0X3Rhc2tfc2lkKHQsICZheHAtPnRhcmdldF9zaWRbYXhwLT5waWRfY291bnRdKTsKKwlzZWN1cml0eV90YXNrX2dldHNlY2lkKHQsICZheHAtPnRhcmdldF9zaWRbYXhwLT5waWRfY291bnRdKTsKIAltZW1jcHkoYXhwLT50YXJnZXRfY29tbVtheHAtPnBpZF9jb3VudF0sIHQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwogCWF4cC0+cGlkX2NvdW50Kys7CiAKQEAgLTI0MzIsMTYgKzI0MzYsMTcgQEAKIAlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9BTk9NX0FCRU5EKTsKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXVpZD0ldSB1aWQ9JXUgZ2lkPSV1IHNlcz0ldSIsCiAJCQlhdWlkLCBjdXJyZW50LT51aWQsIGN1cnJlbnQtPmdpZCwgc2Vzc2lvbmlkKTsKLQlzZWxpbnV4X2dldF90YXNrX3NpZChjdXJyZW50LCAmc2lkKTsKKwlzZWN1cml0eV90YXNrX2dldHNlY2lkKGN1cnJlbnQsICZzaWQpOwogCWlmIChzaWQpIHsKIAkJY2hhciAqY3R4ID0gTlVMTDsKIAkJdTMyIGxlbjsKIAotCQlpZiAoc2VsaW51eF9zaWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpCisJCWlmIChzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoc2lkLCAmY3R4LCAmbGVuKSkKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgc3NpZD0ldSIsIHNpZCk7Ci0JCWVsc2UKKwkJZWxzZSB7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHN1Ymo9JXMiLCBjdHgpOwotCQlrZnJlZShjdHgpOworCQkJc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoY3R4LCBsZW4pOworCQl9CiAJfQogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcGlkPSVkIGNvbW09IiwgY3VycmVudC0+cGlkKTsKIAlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBjdXJyZW50LT5jb21tKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCA0NzY2YmI2Li42ZDhkZTA1IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xMTMsOSArMTEzLDkgQEAKICNkZWZpbmUgZHVtbXl0b3AgKCZyb290bm9kZS50b3BfY2dyb3VwKQogCiAvKiBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGFza3MgaW4gdGhlIGZvcmsgYW5kIGV4aXQgcGF0aHMgc2hvdWxkCi0gKiB0YWtlIGNhbGxiYWNrX211dGV4IGFuZCBjaGVjayBmb3IgZm9yay9leGl0IGhhbmRsZXJzIHRvIGNhbGwuIFRoaXMKLSAqIGF2b2lkcyB1cyBoYXZpbmcgdG8gZG8gZXh0cmEgd29yayBpbiB0aGUgZm9yay9leGl0IHBhdGggaWYgbm9uZSBvZiB0aGUKLSAqIHN1YnN5c3RlbXMgbmVlZCB0byBiZSBjYWxsZWQuCisgKiBjaGVjayBmb3IgZm9yay9leGl0IGhhbmRsZXJzIHRvIGNhbGwuIFRoaXMgYXZvaWRzIHVzIGhhdmluZyB0byBkbworICogZXh0cmEgd29yayBpbiB0aGUgZm9yay9leGl0IHBhdGggaWYgbm9uZSBvZiB0aGUgc3Vic3lzdGVtcyBuZWVkIHRvCisgKiBiZSBjYWxsZWQuCiAgKi8KIHN0YXRpYyBpbnQgbmVlZF9mb3JrZXhpdF9jYWxsYmFjazsKIApAQCAtMzA3LDcgKzMwNyw2IEBACiAgKiB0ZW1wbGF0ZTogbG9jYXRpb24gaW4gd2hpY2ggdG8gYnVpbGQgdGhlIGRlc2lyZWQgc2V0IG9mIHN1YnN5c3RlbQogICogc3RhdGUgb2JqZWN0cyBmb3IgdGhlIG5ldyBjZ3JvdXAgZ3JvdXAKICAqLwotCiBzdGF0aWMgc3RydWN0IGNzc19zZXQgKmZpbmRfZXhpc3RpbmdfY3NzX3NldCgKIAlzdHJ1Y3QgY3NzX3NldCAqb2xkY2csCiAJc3RydWN0IGNncm91cCAqY2dycCwKQEAgLTMyMCw3ICszMTksNyBAQAogCS8qIEJ1aWx0IHRoZSBzZXQgb2Ygc3Vic3lzdGVtIHN0YXRlIG9iamVjdHMgdGhhdCB3ZSB3YW50IHRvCiAJICogc2VlIGluIHRoZSBuZXcgY3NzX3NldCAqLwogCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKLQkJaWYgKHJvb3QtPnN1YnN5c19iaXRzICYgKDF1bGwgPDwgaSkpIHsKKwkJaWYgKHJvb3QtPnN1YnN5c19iaXRzICYgKDFVTCA8PCBpKSkgewogCQkJLyogU3Vic3lzdGVtIGlzIGluIHRoaXMgaGllcmFyY2h5LiBTbyB3ZSB3YW50CiAJCQkgKiB0aGUgc3Vic3lzdGVtIHN0YXRlIGZyb20gdGhlIG5ldwogCQkJICogY2dyb3VwICovCkBAIC0zNTQsNyArMzUzLDYgQEAKICAqIGFuZCBjaGFpbnMgdGhlbSBvbiB0bXAgdGhyb3VnaCB0aGVpciBjZ3JwX2xpbmtfbGlzdCBmaWVsZHMuIFJldHVybnMgMCBvbgogICogc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yCiAgKi8KLQogc3RhdGljIGludCBhbGxvY2F0ZV9jZ19saW5rcyhpbnQgY291bnQsIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCkKIHsKIAlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CkBAIC0zOTYsNyArMzk0LDYgQEAKICAqIHN1YnN0aXR1dGVkIGludG8gdGhlIGFwcHJvcHJpYXRlIGhpZXJhcmNoeS4gTXVzdCBiZSBjYWxsZWQgd2l0aAogICogY2dyb3VwX211dGV4IGhlbGQKICAqLwotCiBzdGF0aWMgc3RydWN0IGNzc19zZXQgKmZpbmRfY3NzX3NldCgKIAlzdHJ1Y3QgY3NzX3NldCAqb2xkY2csIHN0cnVjdCBjZ3JvdXAgKmNncnApCiB7CkBAIC00NzMsNyArNDcwLDYgQEAKIAkvKiBMaW5rIHRoaXMgY2dyb3VwIGdyb3VwIGludG8gdGhlIGxpc3QgKi8KIAlsaXN0X2FkZCgmcmVzLT5saXN0LCAmaW5pdF9jc3Nfc2V0Lmxpc3QpOwogCWNzc19zZXRfY291bnQrKzsKLQlJTklUX0xJU1RfSEVBRCgmcmVzLT50YXNrcyk7CiAJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOwogCiAJcmV0dXJuIHJlczsKQEAgLTUwNyw4ICs1MDMsOCBAQAogICogY3JpdGljYWwgcGllY2VzIG9mIGNvZGUgaGVyZS4gIFRoZSBleGNlcHRpb24gb2NjdXJzIG9uIGNncm91cF9leGl0KCksCiAgKiB3aGVuIGEgdGFzayBpbiBhIG5vdGlmeV9vbl9yZWxlYXNlIGNncm91cCBleGl0cy4gIFRoZW4gY2dyb3VwX211dGV4CiAgKiBpcyB0YWtlbiwgYW5kIGlmIHRoZSBjZ3JvdXAgY291bnQgaXMgemVybywgYSB1c2VybW9kZSBjYWxsIG1hZGUKLSAqIHRvIC9zYmluL2Nncm91cF9yZWxlYXNlX2FnZW50IHdpdGggdGhlIG5hbWUgb2YgdGhlIGNncm91cCAocGF0aAotICogcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgY2dyb3VwIGZpbGUgc3lzdGVtKSBhcyB0aGUgYXJndW1lbnQuCisgKiB0byB0aGUgcmVsZWFzZSBhZ2VudCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjZ3JvdXAgKHBhdGggcmVsYXRpdmUgdG8KKyAqIHRoZSByb290IG9mIGNncm91cCBmaWxlIHN5c3RlbSkgYXMgdGhlIGFyZ3VtZW50LgogICoKICAqIEEgY2dyb3VwIGNhbiBvbmx5IGJlIGRlbGV0ZWQgaWYgYm90aCBpdHMgJ2NvdW50JyBvZiB1c2luZyB0YXNrcwogICogaXMgemVybywgYW5kIGl0cyBsaXN0IG9mICdjaGlsZHJlbicgY2dyb3VwcyBpcyBlbXB0eS4gIFNpbmNlIGFsbApAQCAtNTIxLDcgKzUxNyw3IEBACiAgKgogICogVGhlIG5lZWQgZm9yIHRoaXMgZXhjZXB0aW9uIGFyaXNlcyBmcm9tIHRoZSBhY3Rpb24gb2YKICAqIGNncm91cF9hdHRhY2hfdGFzaygpLCB3aGljaCBvdmVyd3JpdGVzIG9uZSB0YXNrcyBjZ3JvdXAgcG9pbnRlciB3aXRoCi0gKiBhbm90aGVyLiAgSXQgZG9lcyBzbyB1c2luZyBjZ3JvdXBfbXV0ZXhlLCBob3dldmVyIHRoZXJlIGFyZQorICogYW5vdGhlci4gIEl0IGRvZXMgc28gdXNpbmcgY2dyb3VwX211dGV4LCBob3dldmVyIHRoZXJlIGFyZQogICogc2V2ZXJhbCBwZXJmb3JtYW5jZSBjcml0aWNhbCBwbGFjZXMgdGhhdCBuZWVkIHRvIHJlZmVyZW5jZQogICogdGFzay0+Y2dyb3VwIHdpdGhvdXQgdGhlIGV4cGVuc2Ugb2YgZ3JhYmJpbmcgYSBzeXN0ZW0gZ2xvYmFsCiAgKiBtdXRleC4gIFRoZXJlZm9yZSBleGNlcHQgYXMgbm90ZWQgYmVsb3csIHdoZW4gZGVyZWZlcmVuY2luZyBvciwgYXMKQEAgLTUzNyw3ICs1MzMsNiBAQAogICogY2dyb3VwX2xvY2sgLSBsb2NrIG91dCBhbnkgY2hhbmdlcyB0byBjZ3JvdXAgc3RydWN0dXJlcwogICoKICAqLwotCiB2b2lkIGNncm91cF9sb2NrKHZvaWQpCiB7CiAJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKQEAgLTU0OCw3ICs1NDMsNiBAQAogICoKICAqIFVuZG8gdGhlIGxvY2sgdGFrZW4gaW4gYSBwcmV2aW91cyBjZ3JvdXBfbG9jaygpIGNhbGwuCiAgKi8KLQogdm9pZCBjZ3JvdXBfdW5sb2NrKHZvaWQpCiB7CiAJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwpAQCAtNTkwLDcgKzU4NCw2IEBACiAgKiBDYWxsIHN1YnN5cydzIHByZV9kZXN0cm95IGhhbmRsZXIuCiAgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgY3NzIHJlZmNudCBjaGVjay4KICAqLwotCiBzdGF0aWMgdm9pZCBjZ3JvdXBfY2FsbF9wcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzczsKQEAgLTYwMCw3ICs1OTMsNiBAQAogCXJldHVybjsKIH0KIAotCiBzdGF0aWMgdm9pZCBjZ3JvdXBfZGlwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCS8qIGlzIGRlbnRyeSBhIGRpcmVjdG9yeSA/IGlmIHNvLCBrZnJlZSgpIGFzc29jaWF0ZWQgY2dyb3VwICovCkBAIC02OTYsNyArNjg4LDcgQEAKIAlhZGRlZF9iaXRzID0gZmluYWxfYml0cyAmIH5yb290LT5hY3R1YWxfc3Vic3lzX2JpdHM7CiAJLyogQ2hlY2sgdGhhdCBhbnkgYWRkZWQgc3Vic3lzdGVtcyBhcmUgY3VycmVudGx5IGZyZWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZyBiaXQgPSAxdWxsIDw8IGk7CisJCXVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IGk7CiAJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyA9IHN1YnN5c1tpXTsKIAkJaWYgKCEoYml0ICYgYWRkZWRfYml0cykpCiAJCQljb250aW51ZTsKQEAgLTc5MCw3ICs3ODIsMTQgQEAKIAkJaWYgKCEqdG9rZW4pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCFzdHJjbXAodG9rZW4sICJhbGwiKSkgewotCQkJb3B0cy0+c3Vic3lzX2JpdHMgPSAoMSA8PCBDR1JPVVBfU1VCU1lTX0NPVU5UKSAtIDE7CisJCQkvKiBBZGQgYWxsIG5vbi1kaXNhYmxlZCBzdWJzeXN0ZW1zICovCisJCQlpbnQgaTsKKwkJCW9wdHMtPnN1YnN5c19iaXRzID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKKwkJCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CisJCQkJaWYgKCFzcy0+ZGlzYWJsZWQpCisJCQkJCW9wdHMtPnN1YnN5c19iaXRzIHw9IDF1bCA8PCBpOworCQkJfQogCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJub3ByZWZpeCIpKSB7CiAJCQlzZXRfYml0KFJPT1RfTk9QUkVGSVgsICZvcHRzLT5mbGFncyk7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodG9rZW4sICJyZWxlYXNlX2FnZW50PSIsIDE0KSkgewpAQCAtODA4LDcgKzgwNyw4IEBACiAJCQlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CiAJCQkJc3MgPSBzdWJzeXNbaV07CiAJCQkJaWYgKCFzdHJjbXAodG9rZW4sIHNzLT5uYW1lKSkgewotCQkJCQlzZXRfYml0KGksICZvcHRzLT5zdWJzeXNfYml0cyk7CisJCQkJCWlmICghc3MtPmRpc2FibGVkKQorCQkJCQkJc2V0X2JpdChpLCAmb3B0cy0+c3Vic3lzX2JpdHMpOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC05MjcsNyArOTI3LDYgQEAKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCWlub2RlLT5pX29wID0gJmNncm91cF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIAkvKiBkaXJlY3RvcmllcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCkBAIC05NjEsOCArOTYwLDExIEBACiAJfQogCiAJcm9vdCA9IGt6YWxsb2Moc2l6ZW9mKCpyb290KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyb290KQorCWlmICghcm9vdCkgeworCQlpZiAob3B0cy5yZWxlYXNlX2FnZW50KQorCQkJa2ZyZWUob3B0cy5yZWxlYXNlX2FnZW50KTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJaW5pdF9jZ3JvdXBfcm9vdChyb290KTsKIAlyb290LT5zdWJzeXNfYml0cyA9IG9wdHMuc3Vic3lzX2JpdHM7CkBAIC0xMTI5LDggKzExMzEsMTMgQEAKIAlyZXR1cm4gZGVudHJ5LT5kX2ZzZGF0YTsKIH0KIAotLyoKLSAqIENhbGxlZCB3aXRoIGNncm91cF9tdXRleCBoZWxkLiAgV3JpdGVzIHBhdGggb2YgY2dyb3VwIGludG8gYnVmLgorLyoqCisgKiBjZ3JvdXBfcGF0aCAtIGdlbmVyYXRlIHRoZSBwYXRoIG9mIGEgY2dyb3VwCisgKiBAY2dycDogdGhlIGNncm91cCBpbiBxdWVzdGlvbgorICogQGJ1ZjogdGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgcGF0aCBpbnRvCisgKiBAYnVmbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqCisgKiBDYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gV3JpdGVzIHBhdGggb2YgY2dyb3VwIGludG8gYnVmLgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBlcnJvci4KICAqLwogaW50IGNncm91cF9wYXRoKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKQEAgLTExODgsMTEgKzExOTUsMTMgQEAKIAkJKnN1YnN5c19pZCA9IHRlc3Rfc3MtPnN1YnN5c19pZDsKIH0KIAotLyoKLSAqIEF0dGFjaCB0YXNrICd0c2snIHRvIGNncm91cCAnY2dycCcKKy8qKgorICogY2dyb3VwX2F0dGFjaF90YXNrIC0gYXR0YWNoIHRhc2sgJ3RzaycgdG8gY2dyb3VwICdjZ3JwJworICogQGNncnA6IHRoZSBjZ3JvdXAgdGhlIHRhc2sgaXMgYXR0YWNoaW5nIHRvCisgKiBAdHNrOiB0aGUgdGFzayB0byBiZSBhdHRhY2hlZAogICoKLSAqIENhbGwgaG9sZGluZyBjZ3JvdXBfbXV0ZXguICBNYXkgdGFrZSB0YXNrX2xvY2sgb2YKLSAqIHRoZSB0YXNrICdwaWQnIGR1cmluZyBjYWxsLgorICogQ2FsbCBob2xkaW5nIGNncm91cF9tdXRleC4gTWF5IHRha2UgdGFza19sb2NrIG9mCisgKiB0aGUgdGFzayAndHNrJyBkdXJpbmcgY2FsbC4KICAqLwogaW50IGNncm91cF9hdHRhY2hfdGFzayhzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKQEAgLTEyOTMsNyArMTMwMiw2IEBACiB9CiAKIC8qIFRoZSB2YXJpb3VzIHR5cGVzIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBhIGNncm91cCBmaWxlIHN5c3RlbSAqLwotCiBlbnVtIGNncm91cF9maWxldHlwZSB7CiAJRklMRV9ST09ULAogCUZJTEVfRElSLApAQCAtMTU4NCwxMiArMTU5MiwxMSBAQAogfQogCiAvKgotICoJY2dyb3VwX2NyZWF0ZV9kaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkgZm9yIGFuIG9iamVjdC4KLSAqCWNncnA6CXRoZSBjZ3JvdXAgd2UgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yLgotICoJCUl0IG11c3QgaGF2ZSBhIHZhbGlkIC0+cGFyZW50IGZpZWxkCi0gKgkJQW5kIHdlIGFyZSBnb2luZyB0byBmaWxsIGl0cyAtPmRlbnRyeSBmaWVsZC4KLSAqCWRlbnRyeTogZGVudHJ5IG9mIHRoZSBuZXcgY2dyb3VwCi0gKgltb2RlOgltb2RlIHRvIHNldCBvbiBuZXcgZGlyZWN0b3J5LgorICogY2dyb3VwX2NyZWF0ZV9kaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkgZm9yIGFuIG9iamVjdC4KKyAqIEBjZ3JwOiB0aGUgY2dyb3VwIHdlIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvci4gSXQgbXVzdCBoYXZlIGEgdmFsaWQKKyAqICAgICAgICAtPnBhcmVudCBmaWVsZC4gQW5kIHdlIGFyZSBnb2luZyB0byBmaWxsIGl0cyAtPmRlbnRyeSBmaWVsZC4KKyAqIEBkZW50cnk6IGRlbnRyeSBvZiB0aGUgbmV3IGNncm91cAorICogQG1vZGU6IG1vZGUgdG8gc2V0IG9uIG5ldyBkaXJlY3RvcnkuCiAgKi8KIHN0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9kaXIoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCWludCBtb2RlKQpAQCAtMTY1MSw4ICsxNjU4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENvdW50IHRoZSBudW1iZXIgb2YgdGFza3MgaW4gYSBjZ3JvdXAuICovCi0KKy8qKgorICogY2dyb3VwX3Rhc2tfY291bnQgLSBjb3VudCB0aGUgbnVtYmVyIG9mIHRhc2tzIGluIGEgY2dyb3VwLgorICogQGNncnA6IHRoZSBjZ3JvdXAgaW4gcXVlc3Rpb24KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0YXNrcyBpbiB0aGUgY2dyb3VwLgorICovCiBpbnQgY2dyb3VwX3Rhc2tfY291bnQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKIHsKIAlpbnQgY291bnQgPSAwOwpAQCAtMTcxMSw3ICsxNzIyLDEyIEBACiAJdXNlX3Rhc2tfY3NzX3NldF9saW5rcyA9IDE7CiAJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQl0YXNrX2xvY2socCk7Ci0JCWlmIChsaXN0X2VtcHR5KCZwLT5jZ19saXN0KSkKKwkJLyoKKwkJICogV2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIGV4aXRpbmcsIG90aGVyd2lzZQorCQkgKiBpdCB3aWxsIHJhY2Ugd2l0aCBjZ3JvdXBfZXhpdCgpIGluIHRoYXQgdGhlIGxpc3QKKwkJICogZW50cnkgd29uJ3QgYmUgZGVsZXRlZCB0aG91Z2ggdGhlIHByb2Nlc3MgaGFzIGV4aXRlZC4KKwkJICovCisJCWlmICghKHAtPmZsYWdzICYgUEZfRVhJVElORykgJiYgbGlzdF9lbXB0eSgmcC0+Y2dfbGlzdCkpCiAJCQlsaXN0X2FkZCgmcC0+Y2dfbGlzdCwgJnAtPmNncm91cHMtPnRhc2tzKTsKIAkJdGFza191bmxvY2socCk7CiAJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKQEAgLTE5NjIsMTIgKzE5NzgsMTMgQEAKIH0KIAogLyoqCi0gKiBCdWlsZCBhbmQgZmlsbCBjZ3JvdXBzdGF0cyBzbyB0aGF0IHRhc2tzdGF0cyBjYW4gZXhwb3J0IGl0IHRvIHVzZXIKLSAqIHNwYWNlLgotICoKKyAqIGNncm91cHN0YXRzX2J1aWxkIC0gYnVpbGQgYW5kIGZpbGwgY2dyb3Vwc3RhdHMKICAqIEBzdGF0czogY2dyb3Vwc3RhdHMgdG8gZmlsbCBpbmZvcm1hdGlvbiBpbnRvCiAgKiBAZGVudHJ5OiBBIGRlbnRyeSBlbnRyeSBiZWxvbmdpbmcgdG8gdGhlIGNncm91cCBmb3Igd2hpY2ggc3RhdHMgaGF2ZQogICogYmVlbiByZXF1ZXN0ZWQuCisgKgorICogQnVpbGQgYW5kIGZpbGwgY2dyb3Vwc3RhdHMgc28gdGhhdCB0YXNrc3RhdHMgY2FuIGV4cG9ydCBpdCB0byB1c2VyCisgKiBzcGFjZS4KICAqLwogaW50IGNncm91cHN0YXRzX2J1aWxkKHN0cnVjdCBjZ3JvdXBzdGF0cyAqc3RhdHMsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKQEAgLTIwNzgsNyArMjA5NSw3IEBACiAKIAkJa2ZyZWUocGlkYXJyYXkpOwogCX0gZWxzZSB7Ci0JCWN0ci0+YnVmID0gMDsKKwkJY3RyLT5idWYgPSBOVUxMOwogCQljdHItPmJ1ZnN6ID0gMDsKIAl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY3RyOwpAQCAtMjE5OSwxNCArMjIxNiwxMyBAQAogfQogCiAvKgotICoJY2dyb3VwX2NyZWF0ZSAtIGNyZWF0ZSBhIGNncm91cAotICoJcGFyZW50OgljZ3JvdXAgdGhhdCB3aWxsIGJlIHBhcmVudCBvZiB0aGUgbmV3IGNncm91cC4KLSAqCW5hbWU6CQluYW1lIG9mIHRoZSBuZXcgY2dyb3VwLiBXaWxsIGJlIHN0cmNweSdlZC4KLSAqCW1vZGU6CQltb2RlIHRvIHNldCBvbiBuZXcgaW5vZGUKKyAqIGNncm91cF9jcmVhdGUgLSBjcmVhdGUgYSBjZ3JvdXAKKyAqIEBwYXJlbnQ6IGNncm91cCB0aGF0IHdpbGwgYmUgcGFyZW50IG9mIHRoZSBuZXcgY2dyb3VwCisgKiBAZGVudHJ5OiBkZW50cnkgb2YgdGhlIG5ldyBjZ3JvdXAKKyAqIEBtb2RlOiBtb2RlIHRvIHNldCBvbiBuZXcgaW5vZGUKICAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtdXRleCBvbiB0aGUgcGFyZW50IGlub2RlIGhlbGQKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG11dGV4IG9uIHRoZSBwYXJlbnQgaW5vZGUgaGVsZAogICovCi0KIHN0YXRpYyBsb25nIGNncm91cF9jcmVhdGUoc3RydWN0IGNncm91cCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgIGludCBtb2RlKQogewpAQCAtMjIyOSw3ICsyMjQ1LDYgQEAKIAogCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CiAKLQljZ3JwLT5mbGFncyA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJmNncnAtPnNpYmxpbmcpOwogCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jaGlsZHJlbik7CiAJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNzc19zZXRzKTsKQEAgLTIyMzksNiArMjI1NCw5IEBACiAJY2dycC0+cm9vdCA9IHBhcmVudC0+cm9vdDsKIAljZ3JwLT50b3BfY2dyb3VwID0gcGFyZW50LT50b3BfY2dyb3VwOwogCisJaWYgKG5vdGlmeV9vbl9yZWxlYXNlKHBhcmVudCkpCisJCXNldF9iaXQoQ0dSUF9OT1RJRllfT05fUkVMRUFTRSwgJmNncnAtPmZsYWdzKTsKKwogCWZvcl9lYWNoX3N1YnN5cyhyb290LCBzcykgewogCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzID0gc3MtPmNyZWF0ZShzcywgY2dycCk7CiAJCWlmIChJU19FUlIoY3NzKSkgewpAQCAtMjM0OSwxMyArMjM2NywxMiBAQAogCXBhcmVudCA9IGNncnAtPnBhcmVudDsKIAlyb290ID0gY2dycC0+cm9vdDsKIAlzYiA9IHJvb3QtPnNiOworCiAJLyoKLQkgKiBDYWxsIHByZV9kZXN0cm95IGhhbmRsZXJzIG9mIHN1YnN5cworCSAqIENhbGwgcHJlX2Rlc3Ryb3kgaGFuZGxlcnMgb2Ygc3Vic3lzLiBOb3RpZnkgc3Vic3lzdGVtcworCSAqIHRoYXQgcm1kaXIoKSByZXF1ZXN0IGNvbWVzLgogCSAqLwogCWNncm91cF9jYWxsX3ByZV9kZXN0cm95KGNncnApOwotCS8qCi0JICogTm90aWZ5IHN1YnN5c2VzIHRoYXQgcm1kaXIoKSByZXF1ZXN0IGNvbWVzLgotCSAqLwogCiAJaWYgKGNncm91cF9oYXNfY3NzX3JlZnMoY2dycCkpIHsKIAkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwpAQCAtMjQzMSw4ICsyNDQ4LDEwIEBACiB9CiAKIC8qKgotICogY2dyb3VwX2luaXRfZWFybHkgLSBpbml0aWFsaXplIGNncm91cHMgYXQgc3lzdGVtIGJvb3QsIGFuZAotICogaW5pdGlhbGl6ZSBhbnkgc3Vic3lzdGVtcyB0aGF0IHJlcXVlc3QgZWFybHkgaW5pdC4KKyAqIGNncm91cF9pbml0X2Vhcmx5IC0gY2dyb3VwIGluaXRpYWxpemF0aW9uIGF0IHN5c3RlbSBib290CisgKgorICogSW5pdGlhbGl6ZSBjZ3JvdXBzIGF0IHN5c3RlbSBib290LCBhbmQgaW5pdGlhbGl6ZSBhbnkKKyAqIHN1YnN5c3RlbXMgdGhhdCByZXF1ZXN0IGVhcmx5IGluaXQuCiAgKi8KIGludCBfX2luaXQgY2dyb3VwX2luaXRfZWFybHkodm9pZCkKIHsKQEAgLTI0NzQsOCArMjQ5MywxMCBAQAogfQogCiAvKioKLSAqIGNncm91cF9pbml0IC0gcmVnaXN0ZXIgY2dyb3VwIGZpbGVzeXN0ZW0gYW5kIC9wcm9jIGZpbGUsIGFuZAotICogaW5pdGlhbGl6ZSBhbnkgc3Vic3lzdGVtcyB0aGF0IGRpZG4ndCByZXF1ZXN0IGVhcmx5IGluaXQuCisgKiBjZ3JvdXBfaW5pdCAtIGNncm91cCBpbml0aWFsaXphdGlvbgorICoKKyAqIFJlZ2lzdGVyIGNncm91cCBmaWxlc3lzdGVtIGFuZCAvcHJvYyBmaWxlLCBhbmQgaW5pdGlhbGl6ZQorICogYW55IHN1YnN5c3RlbXMgdGhhdCBkaWRuJ3QgcmVxdWVzdCBlYXJseSBpbml0LgogICovCiBpbnQgX19pbml0IGNncm91cF9pbml0KHZvaWQpCiB7CkBAIC0yNTUzLDYgKzI1NzQsNyBAQAogCQkvKiBTa2lwIHRoaXMgaGllcmFyY2h5IGlmIGl0IGhhcyBubyBhY3RpdmUgc3Vic3lzdGVtcyAqLwogCQlpZiAoIXJvb3QtPmFjdHVhbF9zdWJzeXNfYml0cykKIAkJCWNvbnRpbnVlOworCQlzZXFfcHJpbnRmKG0sICIlbHU6Iiwgcm9vdC0+c3Vic3lzX2JpdHMpOwogCQlmb3JfZWFjaF9zdWJzeXMocm9vdCwgc3MpCiAJCQlzZXFfcHJpbnRmKG0sICIlcyVzIiwgY291bnQrKyA/ICIsIiA6ICIiLCBzcy0+bmFtZSk7CiAJCXNlcV9wdXRjKG0sICc6Jyk7CkBAIC0yNTkyLDEzICsyNjE0LDEzIEBACiB7CiAJaW50IGk7CiAKLQlzZXFfcHV0cyhtLCAiI3N1YnN5c19uYW1lXHRoaWVyYXJjaHlcdG51bV9jZ3JvdXBzXG4iKTsKKwlzZXFfcHV0cyhtLCAiI3N1YnN5c19uYW1lXHRoaWVyYXJjaHlcdG51bV9jZ3JvdXBzXHRlbmFibGVkXG4iKTsKIAltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKIAkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOwotCQlzZXFfcHJpbnRmKG0sICIlc1x0JWx1XHQlZFxuIiwKKwkJc2VxX3ByaW50ZihtLCAiJXNcdCVsdVx0JWRcdCVkXG4iLAogCQkJICAgc3MtPm5hbWUsIHNzLT5yb290LT5zdWJzeXNfYml0cywKLQkJCSAgIHNzLT5yb290LT5udW1iZXJfb2ZfY2dyb3Vwcyk7CisJCQkgICBzcy0+cm9vdC0+bnVtYmVyX29mX2Nncm91cHMsICFzcy0+ZGlzYWJsZWQpOwogCX0KIAltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CiAJcmV0dXJuIDA7CkBAIC0yNjA2LDcgKzI2MjgsNyBAQAogCiBzdGF0aWMgaW50IGNncm91cHN0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3Vwc3RhdHNfc2hvdywgMCk7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3Vwc3RhdHNfc2hvdywgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKQEAgLTI2MTgsNyArMjY0MCw3IEBACiAKIC8qKgogICogY2dyb3VwX2ZvcmsgLSBhdHRhY2ggbmV3bHkgZm9ya2VkIHRhc2sgdG8gaXRzIHBhcmVudHMgY2dyb3VwLgotICogQHRzazogcG9pbnRlciB0byB0YXNrX3N0cnVjdCBvZiBmb3JraW5nIHBhcmVudCBwcm9jZXNzLgorICogQGNoaWxkOiBwb2ludGVyIHRvIHRhc2tfc3RydWN0IG9mIGZvcmtpbmcgcGFyZW50IHByb2Nlc3MuCiAgKgogICogRGVzY3JpcHRpb246IEEgdGFzayBpbmhlcml0cyBpdHMgcGFyZW50J3MgY2dyb3VwIGF0IGZvcmsoKS4KICAqCkBAIC0yNjQyLDkgKzI2NjQsMTIgQEAKIH0KIAogLyoqCi0gKiBjZ3JvdXBfZm9ya19jYWxsYmFja3MgLSBjYWxsZWQgb24gYSBuZXcgdGFzayB2ZXJ5IHNvb24gYmVmb3JlCi0gKiBhZGRpbmcgaXQgdG8gdGhlIHRhc2tsaXN0LiBObyBuZWVkIHRvIHRha2UgYW55IGxvY2tzIHNpbmNlIG5vLW9uZQotICogY2FuIGJlIG9wZXJhdGluZyBvbiB0aGlzIHRhc2sKKyAqIGNncm91cF9mb3JrX2NhbGxiYWNrcyAtIHJ1biBmb3JrIGNhbGxiYWNrcworICogQGNoaWxkOiB0aGUgbmV3IHRhc2sKKyAqCisgKiBDYWxsZWQgb24gYSBuZXcgdGFzayB2ZXJ5IHNvb24gYmVmb3JlIGFkZGluZyBpdCB0byB0aGUKKyAqIHRhc2tsaXN0LiBObyBuZWVkIHRvIHRha2UgYW55IGxvY2tzIHNpbmNlIG5vLW9uZSBjYW4KKyAqIGJlIG9wZXJhdGluZyBvbiB0aGlzIHRhc2suCiAgKi8KIHZvaWQgY2dyb3VwX2ZvcmtfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CkBAIC0yNjU5LDExICsyNjg0LDE0IEBACiB9CiAKIC8qKgotICogY2dyb3VwX3Bvc3RfZm9yayAtIGNhbGxlZCBvbiBhIG5ldyB0YXNrIGFmdGVyIGFkZGluZyBpdCB0byB0aGUKLSAqIHRhc2sgbGlzdC4gQWRkcyB0aGUgdGFzayB0byB0aGUgbGlzdCBydW5uaW5nIHRocm91Z2ggaXRzIGNzc19zZXQKLSAqIGlmIG5lY2Vzc2FyeS4gSGFzIHRvIGJlIGFmdGVyIHRoZSB0YXNrIGlzIHZpc2libGUgb24gdGhlIHRhc2sgbGlzdAotICogaW4gY2FzZSB3ZSByYWNlIHdpdGggdGhlIGZpcnN0IGNhbGwgdG8gY2dyb3VwX2l0ZXJfc3RhcnQoKSAtIHRvCi0gKiBndWFyYW50ZWUgdGhhdCB0aGUgbmV3IHRhc2sgZW5kcyB1cCBvbiBpdHMgbGlzdC4gKi8KKyAqIGNncm91cF9wb3N0X2ZvcmsgLSBjYWxsZWQgb24gYSBuZXcgdGFzayBhZnRlciBhZGRpbmcgaXQgdG8gdGhlIHRhc2sgbGlzdAorICogQGNoaWxkOiB0aGUgdGFzayBpbiBxdWVzdGlvbgorICoKKyAqIEFkZHMgdGhlIHRhc2sgdG8gdGhlIGxpc3QgcnVubmluZyB0aHJvdWdoIGl0cyBjc3Nfc2V0IGlmIG5lY2Vzc2FyeS4KKyAqIEhhcyB0byBiZSBhZnRlciB0aGUgdGFzayBpcyB2aXNpYmxlIG9uIHRoZSB0YXNrIGxpc3QgaW4gY2FzZSB3ZSByYWNlCisgKiB3aXRoIHRoZSBmaXJzdCBjYWxsIHRvIGNncm91cF9pdGVyX3N0YXJ0KCkgLSB0byBndWFyYW50ZWUgdGhhdCB0aGUKKyAqIG5ldyB0YXNrIGVuZHMgdXAgb24gaXRzIGxpc3QuCisgKi8KIHZvaWQgY2dyb3VwX3Bvc3RfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWlmICh1c2VfdGFza19jc3Nfc2V0X2xpbmtzKSB7CkBAIC0yNjc2LDYgKzI3MDQsNyBAQAogLyoqCiAgKiBjZ3JvdXBfZXhpdCAtIGRldGFjaCBjZ3JvdXAgZnJvbSBleGl0aW5nIHRhc2sKICAqIEB0c2s6IHBvaW50ZXIgdG8gdGFza19zdHJ1Y3Qgb2YgZXhpdGluZyBwcm9jZXNzCisgKiBAcnVuX2NhbGxiYWNrOiBydW4gZXhpdCBjYWxsYmFja3M/CiAgKgogICogRGVzY3JpcHRpb246IERldGFjaCBjZ3JvdXAgZnJvbSBAdHNrIGFuZCByZWxlYXNlIGl0LgogICoKQEAgLTI3MDYsNyArMjczNSw2IEBACiAgKiAgICB0b3BfY2dyb3VwIGlzbid0IGdvaW5nIGF3YXksIGFuZCBlaXRoZXIgdGFzayBoYXMgUEZfRVhJVElORyBzZXQsCiAgKiAgICB3aGljaCB3YXJkcyBvZmYgYW55IGNncm91cF9hdHRhY2hfdGFzaygpIGF0dGVtcHRzLCBvciB0YXNrIGlzIGEgZmFpbGVkCiAgKiAgICBmb3JrLCBuZXZlciB2aXNpYmxlIHRvIGNncm91cF9hdHRhY2hfdGFzay4KLSAqCiAgKi8KIHZvaWQgY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBydW5fY2FsbGJhY2tzKQogewpAQCAtMjc0Myw5ICsyNzcxLDEzIEBACiB9CiAKIC8qKgotICogY2dyb3VwX2Nsb25lIC0gZHVwbGljYXRlIHRoZSBjdXJyZW50IGNncm91cCBpbiB0aGUgaGllcmFyY2h5Ci0gKiB0aGF0IHRoZSBnaXZlbiBzdWJzeXN0ZW0gaXMgYXR0YWNoZWQgdG8sIGFuZCBtb3ZlIHRoaXMgdGFzayBpbnRvCi0gKiB0aGUgbmV3IGNoaWxkCisgKiBjZ3JvdXBfY2xvbmUgLSBjbG9uZSB0aGUgY2dyb3VwIHRoZSBnaXZlbiBzdWJzeXN0ZW0gaXMgYXR0YWNoZWQgdG8KKyAqIEB0c2s6IHRoZSB0YXNrIHRvIGJlIG1vdmVkCisgKiBAc3Vic3lzOiB0aGUgZ2l2ZW4gc3Vic3lzdGVtCisgKgorICogRHVwbGljYXRlIHRoZSBjdXJyZW50IGNncm91cCBpbiB0aGUgaGllcmFyY2h5IHRoYXQgdGhlIGdpdmVuCisgKiBzdWJzeXN0ZW0gaXMgYXR0YWNoZWQgdG8sIGFuZCBtb3ZlIHRoaXMgdGFzayBpbnRvIHRoZSBuZXcKKyAqIGNoaWxkLgogICovCiBpbnQgY2dyb3VwX2Nsb25lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3Vic3lzKQogewpAQCAtMjg1OCw5ICsyODkwLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFNlZSBpZiAiY2dycCIgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IHRhc2sncyBjZ3JvdXAgaW4KLSAqIHRoZSBhcHByb3ByaWF0ZSBoaWVyYXJjaHkKKy8qKgorICogY2dyb3VwX2lzX2Rlc2NlbmRhbnQgLSBzZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIGN1cnJlbnQgdGFzaydzIGNncnAKKyAqIEBjZ3JwOiB0aGUgY2dyb3VwIGluIHF1ZXN0aW9uCisgKgorICogU2VlIGlmIEBjZ3JwIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgY3VycmVudCB0YXNrJ3MgY2dyb3VwIGluCisgKiB0aGUgYXBwcm9wcmlhdGUgaGllcmFyY2h5LgogICoKICAqIElmIHdlIGFyZSBzZW5kaW5nIGluIGR1bW15dG9wLCB0aGVuIHByZXN1bWFibHkgd2UgYXJlIGNyZWF0aW5nCiAgKiB0aGUgdG9wIGNncm91cCBpbiB0aGUgc3Vic3lzdGVtLgpAQCAtMjkzOSw5ICsyOTc0LDcgQEAKICAqIHJlbGVhc2UgYWdlbnQgdGFzay4gIFdlIGRvbid0IGJvdGhlciB0byB3YWl0IGJlY2F1c2UgdGhlIGNhbGxlciBvZgogICogdGhpcyByb3V0aW5lIGhhcyBubyB1c2UgZm9yIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgcmVsZWFzZSBhZ2VudAogICogdGFzaywgc28gbm8gc2Vuc2UgaG9sZGluZyBvdXIgY2FsbGVyIHVwIGZvciB0aGF0LgotICoKICAqLwotCiBzdGF0aWMgdm9pZCBjZ3JvdXBfcmVsZWFzZV9hZ2VudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJQlVHX09OKHdvcmsgIT0gJnJlbGVhc2VfYWdlbnRfd29yayk7CkBAIC0yOTkxLDMgKzMwMjQsMjcgQEAKIAlzcGluX3VubG9jaygmcmVsZWFzZV9saXN0X2xvY2spOwogCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKIH0KKworc3RhdGljIGludCBfX2luaXQgY2dyb3VwX2Rpc2FibGUoY2hhciAqc3RyKQoreworCWludCBpOworCWNoYXIgKnRva2VuOworCisJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmc3RyLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKnRva2VuKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOworCisJCQlpZiAoIXN0cmNtcCh0b2tlbiwgc3MtPm5hbWUpKSB7CisJCQkJc3MtPmRpc2FibGVkID0gMTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgJXMgY29udHJvbCBncm91cCIKKwkJCQkJIiBzdWJzeXN0ZW1cbiIsIHNzLT5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImNncm91cF9kaXNhYmxlPSIsIGNncm91cF9kaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jb21wYXQuYyBiL2tlcm5lbC9jb21wYXQuYwppbmRleCA1ZjBlMjAxLi5lMWVmMDQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvY29tcGF0LmMKKysrIGIva2VybmVsL2NvbXBhdC5jCkBAIC00NywxNSArNDcsMTQgQEAKIAltbV9zZWdtZW50X3Qgb2xkZnM7CiAJbG9uZyByZXQ7CiAKLQlybXRwID0gKHN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICopKHJlc3RhcnQtPmFyZzEpOwotCXJlc3RhcnQtPmFyZzEgPSAodW5zaWduZWQgbG9uZykmcm10OworCXJlc3RhcnQtPm5hbm9zbGVlcC5ybXRwID0gKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKikgJnJtdDsKIAlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCXJldCA9IGhydGltZXJfbmFub3NsZWVwX3Jlc3RhcnQocmVzdGFydCk7CiAJc2V0X2ZzKG9sZGZzKTsKIAogCWlmIChyZXQpIHsKLQkJcmVzdGFydC0+YXJnMSA9ICh1bnNpZ25lZCBsb25nKXJtdHA7CisJCXJtdHAgPSByZXN0YXJ0LT5uYW5vc2xlZXAuY29tcGF0X3JtdHA7CiAKIAkJaWYgKHJtdHAgJiYgcHV0X2NvbXBhdF90aW1lc3BlYygmcm10LCBybXRwKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtODksNyArODgsNyBAQAogCQkJPSAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrOwogCiAJCXJlc3RhcnQtPmZuID0gY29tcGF0X25hbm9zbGVlcF9yZXN0YXJ0OwotCQlyZXN0YXJ0LT5hcmcxID0gKHVuc2lnbmVkIGxvbmcpcm10cDsKKwkJcmVzdGFydC0+bmFub3NsZWVwLmNvbXBhdF9ybXRwID0gcm10cDsKIAogCQlpZiAocm10cCAmJiBwdXRfY29tcGF0X3RpbWVzcGVjKCZybXQsIHJtdHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NDYsNyArNDQ1LDcgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNjaGVkX3NldGFmZmluaXR5KHBpZCwgbmV3X21hc2spOworCXJldHVybiBzY2hlZF9zZXRhZmZpbml0eShwaWQsICZuZXdfbWFzayk7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NjaGVkX2dldGFmZmluaXR5KGNvbXBhdF9waWRfdCBwaWQsIHVuc2lnbmVkIGludCBsZW4sCkBAIC02MDcsOSArNjA2LDkgQEAKIAlsb25nIGVycjsKIAltbV9zZWdtZW50X3Qgb2xkZnM7CiAJc3RydWN0IHRpbWVzcGVjIHR1OwotCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgKnJtdHAgPSAoc3RydWN0IGNvbXBhdF90aW1lc3BlYyAqKShyZXN0YXJ0LT5hcmcxKTsKKwlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjICpybXRwID0gcmVzdGFydC0+bmFub3NsZWVwLmNvbXBhdF9ybXRwOwogCi0JcmVzdGFydC0+YXJnMSA9ICh1bnNpZ25lZCBsb25nKSAmdHU7CisJcmVzdGFydC0+bmFub3NsZWVwLnJtdHAgPSAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSAmdHU7CiAJb2xkZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAllcnIgPSBjbG9ja19uYW5vc2xlZXBfcmVzdGFydChyZXN0YXJ0KTsKQEAgLTYyMSw3ICs2MjAsNyBAQAogCiAJaWYgKGVyciA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSB7CiAJCXJlc3RhcnQtPmZuID0gY29tcGF0X2Nsb2NrX25hbm9zbGVlcF9yZXN0YXJ0OwotCQlyZXN0YXJ0LT5hcmcxID0gKHVuc2lnbmVkIGxvbmcpIHJtdHA7CisJCXJlc3RhcnQtPm5hbm9zbGVlcC5jb21wYXRfcm10cCA9IHJtdHA7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC02NTIsNyArNjUxLDcgQEAKIAlpZiAoZXJyID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKIAkJcmVzdGFydCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2s7CiAJCXJlc3RhcnQtPmZuID0gY29tcGF0X2Nsb2NrX25hbm9zbGVlcF9yZXN0YXJ0OwotCQlyZXN0YXJ0LT5hcmcxID0gKHVuc2lnbmVkIGxvbmcpIHJtdHA7CisJCXJlc3RhcnQtPm5hbm9zbGVlcC5jb21wYXRfcm10cCA9IHJtdHA7CiAJfQogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggMmVmZjNmNi4uMjAxMWFkOGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTIzMiw5ICsyMzIsOSBAQAogCiAJLyogRW5zdXJlIHRoYXQgd2UgYXJlIG5vdCBydW5uYWJsZSBvbiBkeWluZyBjcHUgKi8KIAlvbGRfYWxsb3dlZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQl0bXAgPSBDUFVfTUFTS19BTEw7CisJY3B1c19zZXRhbGwodG1wKTsKIAljcHVfY2xlYXIoY3B1LCB0bXApOwotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgdG1wKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmdG1wKTsKIAogCXAgPSBfX3N0b3BfbWFjaGluZV9ydW4odGFrZV9jcHVfZG93biwgJnRjZF9wYXJhbSwgY3B1KTsKIApAQCAtMjY4LDcgKzI2OCw3IEBACiBvdXRfdGhyZWFkOgogCWVyciA9IGt0aHJlYWRfc3RvcChwKTsKIG91dF9hbGxvd2VkOgotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkX2FsbG93ZWQpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGRfYWxsb3dlZCk7CiBvdXRfcmVsZWFzZToKIAljcHVfaG90cGx1Z19kb25lKCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCAzZTI5NmVkLi44YjM1ZmJkIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC05OCw2ICs5OCw5IEBACiAJLyogcGFydGl0aW9uIG51bWJlciBmb3IgcmVidWlsZF9zY2hlZF9kb21haW5zKCkgKi8KIAlpbnQgcG47CiAKKwkvKiBmb3IgY3VzdG9tIHNjaGVkIGRvbWFpbiAqLworCWludCByZWxheF9kb21haW5fbGV2ZWw7CisKIAkvKiB1c2VkIGZvciB3YWxraW5nIGEgY3B1c2V0IGhlaXJhcmNoeSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc3RhY2tfbGlzdDsKIH07CkBAIC0zMjIsOCArMzI1LDggQEAKICAqIENhbGwgd2l0aG91dCBjYWxsYmFja19tdXRleCBvciB0YXNrX2xvY2soKSBoZWxkLiAgTWF5IGJlCiAgKiBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGNncm91cF9tdXRleCBoZWxkLiAgVGhhbmtzIGluIHBhcnQgdG8KICAqICd0aGVfdG9wX2NwdXNldF9oYWNrJywgdGhlIHRhc2sncyBjcHVzZXQgcG9pbnRlciB3aWxsIG5ldmVyCi0gKiBiZSBOVUxMLiAgVGhpcyByb3V0aW5lIGFsc28gbWlnaHQgYWNxdWlyZSBjYWxsYmFja19tdXRleCBhbmQKLSAqIGN1cnJlbnQtPm1tLT5tbWFwX3NlbSBkdXJpbmcgY2FsbC4KKyAqIGJlIE5VTEwuICBUaGlzIHJvdXRpbmUgYWxzbyBtaWdodCBhY3F1aXJlIGNhbGxiYWNrX211dGV4IGR1cmluZworICogY2FsbC4KICAqCiAgKiBSZWFkaW5nIGN1cnJlbnQtPmNwdXNldC0+bWVtc19nZW5lcmF0aW9uIGRvZXNuJ3QgbmVlZCB0YXNrX2xvY2sKICAqIHRvIGd1YXJkIHRoZSBjdXJyZW50LT5jcHVzZXQgZGVyZWZlbmNlLCBiZWNhdXNlIGl0IGlzIGd1YXJkZWQKQEAgLTQ3OCw2ICs0ODEsMTYgQEAKIAlyZXR1cm4gY3B1c19pbnRlcnNlY3RzKGEtPmNwdXNfYWxsb3dlZCwgYi0+Y3B1c19hbGxvd2VkKTsKIH0KIAorc3RhdGljIHZvaWQKK3VwZGF0ZV9kb21haW5fYXR0cihzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmRhdHRyLCBzdHJ1Y3QgY3B1c2V0ICpjKQoreworCWlmICghZGF0dHIpCisJCXJldHVybjsKKwlpZiAoZGF0dHItPnJlbGF4X2RvbWFpbl9sZXZlbCA8IGMtPnJlbGF4X2RvbWFpbl9sZXZlbCkKKwkJZGF0dHItPnJlbGF4X2RvbWFpbl9sZXZlbCA9IGMtPnJlbGF4X2RvbWFpbl9sZXZlbDsKKwlyZXR1cm47Cit9CisKIC8qCiAgKiByZWJ1aWxkX3NjaGVkX2RvbWFpbnMoKQogICoKQEAgLTU1MywxMiArNTY2LDE0IEBACiAJaW50IGNzbjsJCS8qIGhvdyBtYW55IGNwdXNldCBwdHJzIGluIGNzYSBzbyBmYXIgKi8KIAlpbnQgaSwgaiwgazsJCS8qIGluZGljZXMgZm9yIHBhcnRpdGlvbiBmaW5kaW5nIGxvb3BzICovCiAJY3B1bWFza190ICpkb21zOwkvKiByZXN1bHRpbmcgcGFydGl0aW9uOyBpLmUuIHNjaGVkIGRvbWFpbnMgKi8KKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmRhdHRyOyAgLyogYXR0cmlidXRlcyBmb3IgY3VzdG9tIGRvbWFpbnMgKi8KIAlpbnQgbmRvbXM7CQkvKiBudW1iZXIgb2Ygc2NoZWQgZG9tYWlucyBpbiByZXN1bHQgKi8KIAlpbnQgbnNsb3Q7CQkvKiBuZXh0IGVtcHR5IGRvbXNbXSBjcHVtYXNrX3Qgc2xvdCAqLwogCiAJcSA9IE5VTEw7CiAJY3NhID0gTlVMTDsKIAlkb21zID0gTlVMTDsKKwlkYXR0ciA9IE5VTEw7CiAKIAkvKiBTcGVjaWFsIGNhc2UgZm9yIHRoZSA5OSUgb2Ygc3lzdGVtcyB3aXRoIG9uZSwgZnVsbCwgc2NoZWQgZG9tYWluICovCiAJaWYgKGlzX3NjaGVkX2xvYWRfYmFsYW5jZSgmdG9wX2NwdXNldCkpIHsKQEAgLTU2Niw2ICs1ODEsMTEgQEAKIAkJZG9tcyA9IGttYWxsb2Moc2l6ZW9mKGNwdW1hc2tfdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWRvbXMpCiAJCQlnb3RvIHJlYnVpbGQ7CisJCWRhdHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChkYXR0cikgeworCQkJKmRhdHRyID0gU0RfQVRUUl9JTklUOworCQkJdXBkYXRlX2RvbWFpbl9hdHRyKGRhdHRyLCAmdG9wX2NwdXNldCk7CisJCX0KIAkJKmRvbXMgPSB0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZDsKIAkJZ290byByZWJ1aWxkOwogCX0KQEAgLTYyMiw2ICs2NDIsNyBAQAogCWRvbXMgPSBrbWFsbG9jKG5kb21zICogc2l6ZW9mKGNwdW1hc2tfdCksIEdGUF9LRVJORUwpOwogCWlmICghZG9tcykKIAkJZ290byByZWJ1aWxkOworCWRhdHRyID0ga21hbGxvYyhuZG9tcyAqIHNpemVvZihzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIpLCBHRlBfS0VSTkVMKTsKIAogCWZvciAobnNsb3QgPSAwLCBpID0gMDsgaSA8IGNzbjsgaSsrKSB7CiAJCXN0cnVjdCBjcHVzZXQgKmEgPSBjc2FbaV07CkBAIC02NDQsMTIgKzY2NSwxNSBAQAogCQkJfQogCiAJCQljcHVzX2NsZWFyKCpkcCk7CisJCQlpZiAoZGF0dHIpCisJCQkJKihkYXR0ciArIG5zbG90KSA9IFNEX0FUVFJfSU5JVDsKIAkJCWZvciAoaiA9IGk7IGogPCBjc247IGorKykgewogCQkJCXN0cnVjdCBjcHVzZXQgKmIgPSBjc2Fbal07CiAKIAkJCQlpZiAoYXBuID09IGItPnBuKSB7CiAJCQkJCWNwdXNfb3IoKmRwLCAqZHAsIGItPmNwdXNfYWxsb3dlZCk7CiAJCQkJCWItPnBuID0gLTE7CisJCQkJCXVwZGF0ZV9kb21haW5fYXR0cihkYXR0ciwgYik7CiAJCQkJfQogCQkJfQogCQkJbnNsb3QrKzsKQEAgLTY2MCw3ICs2ODQsNyBAQAogcmVidWlsZDoKIAkvKiBIYXZlIHNjaGVkdWxlciByZWJ1aWxkIHNjaGVkIGRvbWFpbnMgKi8KIAlnZXRfb25saW5lX2NwdXMoKTsKLQlwYXJ0aXRpb25fc2NoZWRfZG9tYWlucyhuZG9tcywgZG9tcyk7CisJcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMobmRvbXMsIGRvbXMsIGRhdHRyKTsKIAlwdXRfb25saW5lX2NwdXMoKTsKIAogZG9uZToKQEAgLTY2OCw2ICs2OTIsNyBAQAogCQlrZmlmb19mcmVlKHEpOwogCWtmcmVlKGNzYSk7CiAJLyogRG9uJ3Qga2ZyZWUoZG9tcykgLS0gcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoKSBkb2VzIHRoYXQuICovCisJLyogRG9uJ3Qga2ZyZWUoZGF0dHIpIC0tIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKCkgZG9lcyB0aGF0LiAqLwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzdGFydGVkX2FmdGVyX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0MSwKQEAgLTcyOSw3ICs3NTQsNyBAQAogICovCiB2b2lkIGNwdXNldF9jaGFuZ2VfY3B1bWFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKQogewotCXNldF9jcHVzX2FsbG93ZWQodHNrLCAoY2dyb3VwX2NzKHNjYW4tPmNnKSktPmNwdXNfYWxsb3dlZCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIodHNrLCAmKChjZ3JvdXBfY3Moc2Nhbi0+Y2cpKS0+Y3B1c19hbGxvd2VkKSk7CiB9CiAKIC8qKgpAQCAtMTAxMSw2ICsxMDM2LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdXBkYXRlX3JlbGF4X2RvbWFpbl9sZXZlbChzdHJ1Y3QgY3B1c2V0ICpjcywgY2hhciAqYnVmKQoreworCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCisJaWYgKHZhbCA8IDApCisJCXZhbCA9IC0xOworCisJaWYgKHZhbCAhPSBjcy0+cmVsYXhfZG9tYWluX2xldmVsKSB7CisJCWNzLT5yZWxheF9kb21haW5fbGV2ZWwgPSB2YWw7CisJCXJlYnVpbGRfc2NoZWRfZG9tYWlucygpOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogdXBkYXRlX2ZsYWcgLSByZWFkIGEgMCBvciBhIDEgaW4gYSBmaWxlIGFuZCB1cGRhdGUgYXNzb2NpYXRlZCBmbGFnCiAgKiBiaXQ6CXRoZSBiaXQgdG8gdXBkYXRlIChDU19DUFVfRVhDTFVTSVZFLCBDU19NRU1fRVhDTFVTSVZFLApAQCAtMTE3OCw3ICsxMjE4LDcgQEAKIAogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAlndWFyYW50ZWVfb25saW5lX2NwdXMoY3MsICZjcHVzKTsKLQlzZXRfY3B1c19hbGxvd2VkKHRzaywgY3B1cyk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIodHNrLCAmY3B1cyk7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKIAlmcm9tID0gb2xkY3MtPm1lbXNfYWxsb3dlZDsKQEAgLTEyMDIsNiArMTI0Miw3IEBACiAJRklMRV9DUFVfRVhDTFVTSVZFLAogCUZJTEVfTUVNX0VYQ0xVU0lWRSwKIAlGSUxFX1NDSEVEX0xPQURfQkFMQU5DRSwKKwlGSUxFX1NDSEVEX1JFTEFYX0RPTUFJTl9MRVZFTCwKIAlGSUxFX01FTU9SWV9QUkVTU1VSRV9FTkFCTEVELAogCUZJTEVfTUVNT1JZX1BSRVNTVVJFLAogCUZJTEVfU1BSRUFEX1BBR0UsCkBAIC0xMjU2LDYgKzEyOTcsOSBAQAogCWNhc2UgRklMRV9TQ0hFRF9MT0FEX0JBTEFOQ0U6CiAJCXJldHZhbCA9IHVwZGF0ZV9mbGFnKENTX1NDSEVEX0xPQURfQkFMQU5DRSwgY3MsIGJ1ZmZlcik7CiAJCWJyZWFrOworCWNhc2UgRklMRV9TQ0hFRF9SRUxBWF9ET01BSU5fTEVWRUw6CisJCXJldHZhbCA9IHVwZGF0ZV9yZWxheF9kb21haW5fbGV2ZWwoY3MsIGJ1ZmZlcik7CisJCWJyZWFrOwogCWNhc2UgRklMRV9NRU1PUllfTUlHUkFURToKIAkJcmV0dmFsID0gdXBkYXRlX2ZsYWcoQ1NfTUVNT1JZX01JR1JBVEUsIGNzLCBidWZmZXIpOwogCQlicmVhazsKQEAgLTEzNTQsNiArMTM5OCw5IEBACiAJY2FzZSBGSUxFX1NDSEVEX0xPQURfQkFMQU5DRToKIAkJKnMrKyA9IGlzX3NjaGVkX2xvYWRfYmFsYW5jZShjcykgPyAnMScgOiAnMCc7CiAJCWJyZWFrOworCWNhc2UgRklMRV9TQ0hFRF9SRUxBWF9ET01BSU5fTEVWRUw6CisJCXMgKz0gc3ByaW50ZihzLCAiJWQiLCBjcy0+cmVsYXhfZG9tYWluX2xldmVsKTsKKwkJYnJlYWs7CiAJY2FzZSBGSUxFX01FTU9SWV9NSUdSQVRFOgogCQkqcysrID0gaXNfbWVtb3J5X21pZ3JhdGUoY3MpID8gJzEnIDogJzAnOwogCQlicmVhazsKQEAgLTE0MjQsNiArMTQ3MSwxMyBAQAogCS5wcml2YXRlID0gRklMRV9TQ0hFRF9MT0FEX0JBTEFOQ0UsCiB9OwogCitzdGF0aWMgc3RydWN0IGNmdHlwZSBjZnRfc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsID0geworCS5uYW1lID0gInNjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCIsCisJLnJlYWQgPSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZCwKKwkud3JpdGUgPSBjcHVzZXRfY29tbW9uX2ZpbGVfd3JpdGUsCisJLnByaXZhdGUgPSBGSUxFX1NDSEVEX1JFTEFYX0RPTUFJTl9MRVZFTCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9tZW1vcnlfbWlncmF0ZSA9IHsKIAkubmFtZSA9ICJtZW1vcnlfbWlncmF0ZSIsCiAJLnJlYWQgPSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZCwKQEAgLTE0NzUsNiArMTUyOSw5IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBjZ3JvdXBfYWRkX2ZpbGUoY29udCwgc3MsICZjZnRfc2NoZWRfbG9hZF9iYWxhbmNlKSkgPCAwKQogCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gY2dyb3VwX2FkZF9maWxlKGNvbnQsIHNzLAorCQkJCQkmY2Z0X3NjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IGNncm91cF9hZGRfZmlsZShjb250LCBzcywgJmNmdF9tZW1vcnlfcHJlc3N1cmUpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBjZ3JvdXBfYWRkX2ZpbGUoY29udCwgc3MsICZjZnRfc3ByZWFkX3BhZ2UpKSA8IDApCkBAIC0xNTU1LDEwICsxNjEyLDExIEBACiAJaWYgKGlzX3NwcmVhZF9zbGFiKHBhcmVudCkpCiAJCXNldF9iaXQoQ1NfU1BSRUFEX1NMQUIsICZjcy0+ZmxhZ3MpOwogCXNldF9iaXQoQ1NfU0NIRURfTE9BRF9CQUxBTkNFLCAmY3MtPmZsYWdzKTsKLQljcy0+Y3B1c19hbGxvd2VkID0gQ1BVX01BU0tfTk9ORTsKLQljcy0+bWVtc19hbGxvd2VkID0gTk9ERV9NQVNLX05PTkU7CisJY3B1c19jbGVhcihjcy0+Y3B1c19hbGxvd2VkKTsKKwlub2Rlc19jbGVhcihjcy0+bWVtc19hbGxvd2VkKTsKIAljcy0+bWVtc19nZW5lcmF0aW9uID0gY3B1c2V0X21lbXNfZ2VuZXJhdGlvbisrOwogCWZtZXRlcl9pbml0KCZjcy0+Zm1ldGVyKTsKKwljcy0+cmVsYXhfZG9tYWluX2xldmVsID0gLTE7CiAKIAljcy0+cGFyZW50ID0gcGFyZW50OwogCW51bWJlcl9vZl9jcHVzZXRzKys7CkBAIC0xNjI1LDEyICsxNjgzLDEzIEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQl0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZCA9IENQVV9NQVNLX0FMTDsKLQl0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCA9IE5PREVfTUFTS19BTEw7CisJY3B1c19zZXRhbGwodG9wX2NwdXNldC5jcHVzX2FsbG93ZWQpOworCW5vZGVzX3NldGFsbCh0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCk7CiAKIAlmbWV0ZXJfaW5pdCgmdG9wX2NwdXNldC5mbWV0ZXIpOwogCXRvcF9jcHVzZXQubWVtc19nZW5lcmF0aW9uID0gY3B1c2V0X21lbXNfZ2VuZXJhdGlvbisrOwogCXNldF9iaXQoQ1NfU0NIRURfTE9BRF9CQUxBTkNFLCAmdG9wX2NwdXNldC5mbGFncyk7CisJdG9wX2NwdXNldC5yZWxheF9kb21haW5fbGV2ZWwgPSAtMTsKIAogCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNwdXNldF9mc190eXBlKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE4NDQsNiArMTkwMyw3IEBACiAKICAqIGNwdXNldF9jcHVzX2FsbG93ZWQgLSByZXR1cm4gY3B1c19hbGxvd2VkIG1hc2sgZnJvbSBhIHRhc2tzIGNwdXNldC4KICAqIEB0c2s6IHBvaW50ZXIgdG8gdGFza19zdHJ1Y3QgZnJvbSB3aGljaCB0byBvYnRhaW4gY3B1c2V0LT5jcHVzX2FsbG93ZWQuCisgKiBAcG1hc2s6IHBvaW50ZXIgdG8gY3B1bWFza190IHZhcmlhYmxlIHRvIHJlY2VpdmUgY3B1c19hbGxvd2VkIHNldC4KICAqCiAgKiBEZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgY3B1bWFza190IGNwdXNfYWxsb3dlZCBvZiB0aGUgY3B1c2V0CiAgKiBhdHRhY2hlZCB0byB0aGUgc3BlY2lmaWVkIEB0c2suICBHdWFyYW50ZWVkIHRvIHJldHVybiBzb21lIG5vbi1lbXB0eQpAQCAtMTg1MSwzNSArMTkxMSwyNyBAQAogICogdGFza3MgY3B1c2V0LgogICoqLwogCi1jcHVtYXNrX3QgY3B1c2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3ZvaWQgY3B1c2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY3B1bWFza190ICpwbWFzaykKIHsKLQljcHVtYXNrX3QgbWFzazsKLQogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKLQltYXNrID0gY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQodHNrKTsKKwljcHVzZXRfY3B1c19hbGxvd2VkX2xvY2tlZCh0c2ssIHBtYXNrKTsKIAltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKLQotCXJldHVybiBtYXNrOwogfQogCiAvKioKICAqIGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkIC0gcmV0dXJuIGNwdXNfYWxsb3dlZCBtYXNrIGZyb20gYSB0YXNrcyBjcHVzZXQuCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNhbGxiYWNrX211dGV4IGhlbGQuCiAgKiovCi1jcHVtYXNrX3QgY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjcHVtYXNrX3QgKnBtYXNrKQogewotCWNwdW1hc2tfdCBtYXNrOwotCiAJdGFza19sb2NrKHRzayk7Ci0JZ3VhcmFudGVlX29ubGluZV9jcHVzKHRhc2tfY3ModHNrKSwgJm1hc2spOworCWd1YXJhbnRlZV9vbmxpbmVfY3B1cyh0YXNrX2NzKHRzayksIHBtYXNrKTsKIAl0YXNrX3VubG9jayh0c2spOwotCi0JcmV0dXJuIG1hc2s7CiB9CiAKIHZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCkKIHsKLQljdXJyZW50LT5tZW1zX2FsbG93ZWQgPSBOT0RFX01BU0tfQUxMOworCW5vZGVzX3NldGFsbChjdXJyZW50LT5tZW1zX2FsbG93ZWQpOwogfQogCiAvKioKQEAgLTIyNjEsOCArMjMxMywxNiBAQAogCW0tPmNvdW50ICs9IGNwdW1hc2tfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LCBtLT5zaXplIC0gbS0+Y291bnQsCiAJCQkJCXRhc2stPmNwdXNfYWxsb3dlZCk7CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJDcHVzX2FsbG93ZWRfbGlzdDpcdCIpOworCW0tPmNvdW50ICs9IGNwdWxpc3Rfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LCBtLT5zaXplIC0gbS0+Y291bnQsCisJCQkJCXRhc2stPmNwdXNfYWxsb3dlZCk7CisJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1zX2FsbG93ZWQ6XHQiKTsKIAltLT5jb3VudCArPSBub2RlbWFza19zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKIAkJCQkJdGFzay0+bWVtc19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wcmludGYobSwgIk1lbXNfYWxsb3dlZF9saXN0Olx0Iik7CisJbS0+Y291bnQgKz0gbm9kZWxpc3Rfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LCBtLT5zaXplIC0gbS0+Y291bnQsCisJCQkJCXRhc2stPm1lbXNfYWxsb3dlZCk7CisJc2VxX3ByaW50ZihtLCAiXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDUwNmE5NTcuLjA3MzAwNWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMjE0LDIwICsyMTQsMTkgQEAKIHN0YXRpYyBpbnQgd2lsbF9iZWNvbWVfb3JwaGFuZWRfcGdycChzdHJ1Y3QgcGlkICpwZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlnbm9yZWRfdGFzaykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JaW50IHJldCA9IDE7CiAKIAlkb19lYWNoX3BpZF90YXNrKHBncnAsIFBJRFRZUEVfUEdJRCwgcCkgewotCQlpZiAocCA9PSBpZ25vcmVkX3Rhc2sKLQkJCQl8fCBwLT5leGl0X3N0YXRlCi0JCQkJfHwgaXNfZ2xvYmFsX2luaXQocC0+cmVhbF9wYXJlbnQpKQorCQlpZiAoKHAgPT0gaWdub3JlZF90YXNrKSB8fAorCQkgICAgKHAtPmV4aXRfc3RhdGUgJiYgdGhyZWFkX2dyb3VwX2VtcHR5KHApKSB8fAorCQkgICAgaXNfZ2xvYmFsX2luaXQocC0+cmVhbF9wYXJlbnQpKQogCQkJY29udGludWU7CisKIAkJaWYgKHRhc2tfcGdycChwLT5yZWFsX3BhcmVudCkgIT0gcGdycCAmJgotCQkgICAgdGFza19zZXNzaW9uKHAtPnJlYWxfcGFyZW50KSA9PSB0YXNrX3Nlc3Npb24ocCkpIHsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQorCQkgICAgdGFza19zZXNzaW9uKHAtPnJlYWxfcGFyZW50KSA9PSB0YXNrX3Nlc3Npb24ocCkpCisJCQlyZXR1cm4gMDsKIAl9IHdoaWxlX2VhY2hfcGlkX3Rhc2socGdycCwgUElEVFlQRV9QR0lELCBwKTsKLQlyZXR1cm4gcmV0OwkvKiAoc2lnaGluZykgIk9mdGVuISIgKi8KKworCXJldHVybiAxOwogfQogCiBpbnQgaXNfY3VycmVudF9wZ3JwX29ycGhhbmVkKHZvaWQpCkBAIC0yNTUsNiArMjU0LDM3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhbnkgcHJvY2VzcyBncm91cHMgaGF2ZSBiZWNvbWUgb3JwaGFuZWQgYXMKKyAqIGEgcmVzdWx0IG9mIG91ciBleGl0aW5nLCBhbmQgaWYgdGhleSBoYXZlIGFueSBzdG9wcGVkIGpvYnMsCisgKiBzZW5kIHRoZW0gYSBTSUdIVVAgYW5kIHRoZW4gYSBTSUdDT05ULiAoUE9TSVggMy4yLjIuMikKKyAqLworc3RhdGljIHZvaWQKK2tpbGxfb3JwaGFuZWRfcGdycChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCit7CisJc3RydWN0IHBpZCAqcGdycCA9IHRhc2tfcGdycCh0c2spOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWdub3JlZF90YXNrID0gdHNrOworCisJaWYgKCFwYXJlbnQpCisJCSAvKiBleGl0OiBvdXIgZmF0aGVyIGlzIGluIGEgZGlmZmVyZW50IHBncnAgdGhhbgorCQkgICogd2UgYXJlIGFuZCB3ZSB3ZXJlIHRoZSBvbmx5IGNvbm5lY3Rpb24gb3V0c2lkZS4KKwkJICAqLworCQlwYXJlbnQgPSB0c2stPnJlYWxfcGFyZW50OworCWVsc2UKKwkJLyogcmVwYXJlbnQ6IG91ciBjaGlsZCBpcyBpbiBhIGRpZmZlcmVudCBwZ3JwIHRoYW4KKwkJICogd2UgYXJlLCBhbmQgaXQgd2FzIHRoZSBvbmx5IGNvbm5lY3Rpb24gb3V0c2lkZS4KKwkJICovCisJCWlnbm9yZWRfdGFzayA9IE5VTEw7CisKKwlpZiAodGFza19wZ3JwKHBhcmVudCkgIT0gcGdycCAmJgorCSAgICB0YXNrX3Nlc3Npb24ocGFyZW50KSA9PSB0YXNrX3Nlc3Npb24odHNrKSAmJgorCSAgICB3aWxsX2JlY29tZV9vcnBoYW5lZF9wZ3JwKHBncnAsIGlnbm9yZWRfdGFzaykgJiYKKwkgICAgaGFzX3N0b3BwZWRfam9icyhwZ3JwKSkgeworCQlfX2tpbGxfcGdycF9pbmZvKFNJR0hVUCwgU0VORF9TSUdfUFJJViwgcGdycCk7CisJCV9fa2lsbF9wZ3JwX2luZm8oU0lHQ09OVCwgU0VORF9TSUdfUFJJViwgcGdycCk7CisJfQorfQorCiAvKioKICAqIHJlcGFyZW50X3RvX2t0aHJlYWRkIC0gUmVwYXJlbnQgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZCB0byBrdGhyZWFkZAogICoKQEAgLTYzNSwyMiArNjY1LDcgQEAKIAkgICAgcC0+ZXhpdF9zaWduYWwgIT0gLTEgJiYgdGhyZWFkX2dyb3VwX2VtcHR5KHApKQogCQlkb19ub3RpZnlfcGFyZW50KHAsIHAtPmV4aXRfc2lnbmFsKTsKIAotCS8qCi0JICogcHJvY2VzcyBncm91cCBvcnBoYW4gY2hlY2sKLQkgKiBDYXNlIGlpOiBPdXIgY2hpbGQgaXMgaW4gYSBkaWZmZXJlbnQgcGdycAotCSAqIHRoYW4gd2UgYXJlLCBhbmQgaXQgd2FzIHRoZSBvbmx5IGNvbm5lY3Rpb24KLQkgKiBvdXRzaWRlLCBzbyB0aGUgY2hpbGQgcGdycCBpcyBub3cgb3JwaGFuZWQuCi0JICovCi0JaWYgKCh0YXNrX3BncnAocCkgIT0gdGFza19wZ3JwKGZhdGhlcikpICYmCi0JICAgICh0YXNrX3Nlc3Npb24ocCkgPT0gdGFza19zZXNzaW9uKGZhdGhlcikpKSB7Ci0JCXN0cnVjdCBwaWQgKnBncnAgPSB0YXNrX3BncnAocCk7Ci0KLQkJaWYgKHdpbGxfYmVjb21lX29ycGhhbmVkX3BncnAocGdycCwgTlVMTCkgJiYKLQkJICAgIGhhc19zdG9wcGVkX2pvYnMocGdycCkpIHsKLQkJCV9fa2lsbF9wZ3JwX2luZm8oU0lHSFVQLCBTRU5EX1NJR19QUklWLCBwZ3JwKTsKLQkJCV9fa2lsbF9wZ3JwX2luZm8oU0lHQ09OVCwgU0VORF9TSUdfUFJJViwgcGdycCk7Ci0JCX0KLQl9CisJa2lsbF9vcnBoYW5lZF9wZ3JwKHAsIGZhdGhlcik7CiB9CiAKIC8qCkBAIC03MzUsMTEgKzc1MCw5IEBACiAgKiBTZW5kIHNpZ25hbHMgdG8gYWxsIG91ciBjbG9zZXN0IHJlbGF0aXZlcyBzbyB0aGF0IHRoZXkga25vdwogICogdG8gcHJvcGVybHkgbW91cm4gdXMuLgogICovCi1zdGF0aWMgdm9pZCBleGl0X25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0YXRpYyB2b2lkIGV4aXRfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgZ3JvdXBfZGVhZCkKIHsKIAlpbnQgc3RhdGU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0OwotCXN0cnVjdCBwaWQgKnBncnA7CiAKIAkvKgogCSAqIFRoaXMgZG9lcyB0d28gdGhpbmdzOgpAQCAtNzUzLDI1ICs3NjYsOCBAQAogCWV4aXRfdGFza19uYW1lc3BhY2VzKHRzayk7CiAKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7Ci0JLyoKLQkgKiBDaGVjayB0byBzZWUgaWYgYW55IHByb2Nlc3MgZ3JvdXBzIGhhdmUgYmVjb21lIG9ycGhhbmVkCi0JICogYXMgYSByZXN1bHQgb2Ygb3VyIGV4aXRpbmcsIGFuZCBpZiB0aGV5IGhhdmUgYW55IHN0b3BwZWQKLQkgKiBqb2JzLCBzZW5kIHRoZW0gYSBTSUdIVVAgYW5kIHRoZW4gYSBTSUdDT05ULiAgKFBPU0lYIDMuMi4yLjIpCi0JICoKLQkgKiBDYXNlIGk6IE91ciBmYXRoZXIgaXMgaW4gYSBkaWZmZXJlbnQgcGdycCB0aGFuIHdlIGFyZQotCSAqIGFuZCB3ZSB3ZXJlIHRoZSBvbmx5IGNvbm5lY3Rpb24gb3V0c2lkZSwgc28gb3VyIHBncnAKLQkgKiBpcyBhYm91dCB0byBiZWNvbWUgb3JwaGFuZWQuCi0JICovCi0JdCA9IHRzay0+cmVhbF9wYXJlbnQ7Ci0KLQlwZ3JwID0gdGFza19wZ3JwKHRzayk7Ci0JaWYgKCh0YXNrX3BncnAodCkgIT0gcGdycCkgJiYKLQkgICAgKHRhc2tfc2Vzc2lvbih0KSA9PSB0YXNrX3Nlc3Npb24odHNrKSkgJiYKLQkgICAgd2lsbF9iZWNvbWVfb3JwaGFuZWRfcGdycChwZ3JwLCB0c2spICYmCi0JICAgIGhhc19zdG9wcGVkX2pvYnMocGdycCkpIHsKLQkJX19raWxsX3BncnBfaW5mbyhTSUdIVVAsIFNFTkRfU0lHX1BSSVYsIHBncnApOwotCQlfX2tpbGxfcGdycF9pbmZvKFNJR0NPTlQsIFNFTkRfU0lHX1BSSVYsIHBncnApOwotCX0KKwlpZiAoZ3JvdXBfZGVhZCkKKwkJa2lsbF9vcnBoYW5lZF9wZ3JwKHRzay0+Z3JvdXBfbGVhZGVyLCBOVUxMKTsKIAogCS8qIExldCBmYXRoZXIga25vdyB3ZSBkaWVkCiAJICoKQEAgLTc4OCw4ICs3ODQsOCBAQAogCSAqIHRoZSBzYW1lIGFmdGVyIGEgZm9yay4KIAkgKi8KIAlpZiAodHNrLT5leGl0X3NpZ25hbCAhPSBTSUdDSExEICYmIHRzay0+ZXhpdF9zaWduYWwgIT0gLTEgJiYKLQkgICAgKCB0c2stPnBhcmVudF9leGVjX2lkICE9IHQtPnNlbGZfZXhlY19pZCAgfHwKLQkgICAgICB0c2stPnNlbGZfZXhlY19pZCAhPSB0c2stPnBhcmVudF9leGVjX2lkKQorCSAgICAodHNrLT5wYXJlbnRfZXhlY19pZCAhPSB0c2stPnJlYWxfcGFyZW50LT5zZWxmX2V4ZWNfaWQgfHwKKwkgICAgIHRzay0+c2VsZl9leGVjX2lkICE9IHRzay0+cGFyZW50X2V4ZWNfaWQpCiAJICAgICYmICFjYXBhYmxlKENBUF9LSUxMKSkKIAkJdHNrLT5leGl0X3NpZ25hbCA9IFNJR0NITEQ7CiAKQEAgLTk4Niw3ICs5ODIsNyBAQAogCQltb2R1bGVfcHV0KHRzay0+YmluZm10LT5tb2R1bGUpOwogCiAJcHJvY19leGl0X2Nvbm5lY3Rvcih0c2spOwotCWV4aXRfbm90aWZ5KHRzayk7CisJZXhpdF9ub3RpZnkodHNrLCBncm91cF9kZWFkKTsKICNpZmRlZiBDT05GSUdfTlVNQQogCW1wb2xfZnJlZSh0c2stPm1lbXBvbGljeSk7CiAJdHNrLT5tZW1wb2xpY3kgPSBOVUxMOwpAQCAtMTM4Miw3ICsxMzc4LDcgQEAKIAlpZiAoIXJldHZhbCAmJiBpbmZvcCkKIAkJcmV0dmFsID0gcHV0X3VzZXIoMCwgJmluZm9wLT5zaV9lcnJubyk7CiAJaWYgKCFyZXR2YWwgJiYgaW5mb3ApCi0JCXJldHZhbCA9IHB1dF91c2VyKHdoeSwgJmluZm9wLT5zaV9jb2RlKTsKKwkJcmV0dmFsID0gcHV0X3VzZXIoKHNob3J0KXdoeSwgJmluZm9wLT5zaV9jb2RlKTsKIAlpZiAoIXJldHZhbCAmJiBpbmZvcCkKIAkJcmV0dmFsID0gcHV0X3VzZXIoZXhpdF9jb2RlLCAmaW5mb3AtPnNpX3N0YXR1cyk7CiAJaWYgKCFyZXR2YWwgJiYgaW5mb3ApCkBAIC0xNjEyLDcgKzE2MDgsNyBAQAogCXB1dF9waWQocGlkKTsKIAogCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLwotCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJYXNtbGlua2FnZV9wcm90ZWN0KDUsIHJldCwgd2hpY2gsIHVwaWQsIGluZm9wLCBvcHRpb25zLCBydSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTY0NCw3ICsxNjQwLDcgQEAKIAlwdXRfcGlkKHBpZCk7CiAKIAkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KLQlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCWFzbWxpbmthZ2VfcHJvdGVjdCg0LCByZXQsIHVwaWQsIHN0YXRfYWRkciwgb3B0aW9ucywgcnUpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGRkMjQ5YzMuLjg5ZmU0MTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtMTMyLDYgKzEzMiwxNCBAQAogCQlmcmVlX3Rhc2sodHNrKTsKIH0KIAorLyoKKyAqIG1hY3JvIG92ZXJyaWRlIGluc3RlYWQgb2Ygd2VhayBhdHRyaWJ1dGUgYWxpYXMsIHRvIHdvcmthcm91bmQKKyAqIGdjYyA0LjEuMCBhbmQgNC4xLjEgYnVncyB3aXRoIHdlYWsgYXR0cmlidXRlIGFuZCBlbXB0eSBmdW5jdGlvbnMuCisgKi8KKyNpZm5kZWYgYXJjaF90YXNrX2NhY2hlX2luaXQKKyNkZWZpbmUgYXJjaF90YXNrX2NhY2hlX2luaXQoKQorI2VuZGlmCisKIHZvaWQgX19pbml0IGZvcmtfaW5pdCh1bnNpZ25lZCBsb25nIG1lbXBhZ2VzKQogewogI2lmbmRlZiBfX0hBVkVfQVJDSF9UQVNLX1NUUlVDVF9BTExPQ0FUT1IKQEAgLTE0NCw2ICsxNTIsOSBAQAogCQkJQVJDSF9NSU5fVEFTS0FMSUdOLCBTTEFCX1BBTklDLCBOVUxMKTsKICNlbmRpZgogCisJLyogZG8gdGhlIGFyY2ggc3BlY2lmaWMgdGFzayBjYWNoZXMgaW5pdCAqLworCWFyY2hfdGFza19jYWNoZV9pbml0KCk7CisKIAkvKgogCSAqIFRoZSBkZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgaXMgc2V0IHRvIGEgc2FmZQogCSAqIHZhbHVlOiB0aGUgdGhyZWFkIHN0cnVjdHVyZXMgY2FuIHRha2UgdXAgYXQgbW9zdCBoYWxmCkBAIC0xNjMsNiArMTc0LDEzIEBACiAJCWluaXRfdGFzay5zaWduYWwtPnJsaW1bUkxJTUlUX05QUk9DXTsKIH0KIAoraW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwKKwkJCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKQoreworCSpkc3QgPSAqc3JjOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpkdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpvcmlnKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwpAQCAtMTgxLDE1ICsxOTksMTUgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JKnRzayA9ICpvcmlnOworIAllcnIgPSBhcmNoX2R1cF90YXNrX3N0cnVjdCh0c2ssIG9yaWcpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJdHNrLT5zdGFjayA9IHRpOwogCiAJZXJyID0gcHJvcF9sb2NhbF9pbml0X3NpbmdsZSgmdHNrLT5kaXJ0aWVzKTsKLQlpZiAoZXJyKSB7Ci0JCWZyZWVfdGhyZWFkX2luZm8odGkpOwotCQlmcmVlX3Rhc2tfc3RydWN0KHRzayk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKIAogCXNldHVwX3RocmVhZF9zdGFjayh0c2ssIG9yaWcpOwogCkBAIC0yMDUsNiArMjIzLDExIEBACiAjZW5kaWYKIAl0c2stPnNwbGljZV9waXBlID0gTlVMTDsKIAlyZXR1cm4gdHNrOworCitvdXQ6CisJZnJlZV90aHJlYWRfaW5mbyh0aSk7CisJZnJlZV90YXNrX3N0cnVjdCh0c2spOworCXJldHVybiBOVUxMOwogfQogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMzk0LDcgKzQxNyw2IEBACiB7CiAJQlVHX09OKG1tID09ICZpbml0X21tKTsKIAltbV9mcmVlX3BnZChtbSk7Ci0JbW1fZnJlZV9jZ3JvdXAobW0pOwogCWRlc3Ryb3lfY29udGV4dChtbSk7CiAJZnJlZV9tbShtbSk7CiB9CkBAIC00MTYsNiArNDM4LDcgQEAKIAkJCXNwaW5fdW5sb2NrKCZtbWxpc3RfbG9jayk7CiAJCX0KIAkJcHV0X3N3YXBfdG9rZW4obW0pOworCQltbV9mcmVlX2Nncm91cChtbSk7CiAJCW1tZHJvcChtbSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCAyMjFmMjEyLi5lNDM5NDVlIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtNjAsNiArNjAsOCBAQAogCiAjaW5jbHVkZSAicnRtdXRleF9jb21tb24uaCIKIAoraW50IF9fcmVhZF9tb3N0bHkgZnV0ZXhfY21weGNoZ19lbmFibGVkOworCiAjZGVmaW5lIEZVVEVYX0hBU0hCSVRTIChDT05GSUdfQkFTRV9TTUFMTCA/IDQgOiA4KQogCiAvKgpAQCAtMjc5LDcgKzI4MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGdldF9mdXRleF9rZXlfcmVmcyh1bmlvbiBmdXRleF9rZXkgKmtleSkKIHsKLQlpZiAoa2V5LT5ib3RoLnB0ciA9PSAwKQorCWlmIChrZXktPmJvdGgucHRyID09IE5VTEwpCiAJCXJldHVybjsKIAlzd2l0Y2ggKGtleS0+Ym90aC5vZmZzZXQgJiAoRlVUX09GRl9JTk9ERXxGVVRfT0ZGX01NU0hBUkVEKSkgewogCQljYXNlIEZVVF9PRkZfSU5PREU6CkBAIC00NjksNiArNDcxLDggQEAKIAlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiOwogCXVuaW9uIGZ1dGV4X2tleSBrZXk7CiAKKwlpZiAoIWZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKKwkJcmV0dXJuOwogCS8qCiAJICogV2UgYXJlIGEgWk9NQklFIGFuZCBub2JvZHkgY2FuIGVucXVldWUgaXRzZWxmIG9uCiAJICogcGlfc3RhdGVfbGlzdCBhbnltb3JlLCBidXQgd2UgaGF2ZSB0byBiZSBjYXJlZnVsCkBAIC0xODcwLDYgKzE4NzQsOCBAQAogc3lzX3NldF9yb2J1c3RfbGlzdChzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKmhlYWQsCiAJCSAgICBzaXplX3QgbGVuKQogeworCWlmICghZnV0ZXhfY21weGNoZ19lbmFibGVkKQorCQlyZXR1cm4gLUVOT1NZUzsKIAkvKgogCSAqIFRoZSBrZXJuZWwga25vd3Mgb25seSBvbmUgc2l6ZSBmb3Igbm93OgogCSAqLwpAQCAtMTg5NCw2ICsxOTAwLDkgQEAKIAlzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKmhlYWQ7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKKwlpZiAoIWZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKIAlpZiAoIXBpZCkKIAkJaGVhZCA9IGN1cnJlbnQtPnJvYnVzdF9saXN0OwogCWVsc2UgewpAQCAtMTk5Nyw2ICsyMDA2LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZ1dGV4X29mZnNldDsKIAlpbnQgcmM7CiAKKwlpZiAoIWZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBGZXRjaCB0aGUgbGlzdCBoZWFkICh3aGljaCB3YXMgcmVnaXN0ZXJlZCBlYXJsaWVyLCB2aWEKIAkgKiBzeXNfc2V0X3JvYnVzdF9saXN0KCkpOgpAQCAtMjA1MSw3ICsyMDYzLDcgQEAKIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCwKIAkJdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOT1NZUzsKIAlpbnQgY21kID0gb3AgJiBGVVRFWF9DTURfTUFTSzsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkID0gTlVMTDsKIApAQCAtMjA4MywxMyArMjA5NSwxNiBAQAogCQlyZXQgPSBmdXRleF93YWtlX29wKHVhZGRyLCBmc2hhcmVkLCB1YWRkcjIsIHZhbCwgdmFsMiwgdmFsMyk7CiAJCWJyZWFrOwogCWNhc2UgRlVURVhfTE9DS19QSToKLQkJcmV0ID0gZnV0ZXhfbG9ja19waSh1YWRkciwgZnNoYXJlZCwgdmFsLCB0aW1lb3V0LCAwKTsKKwkJaWYgKGZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKKwkJCXJldCA9IGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZzaGFyZWQsIHZhbCwgdGltZW91dCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgRlVURVhfVU5MT0NLX1BJOgotCQlyZXQgPSBmdXRleF91bmxvY2tfcGkodWFkZHIsIGZzaGFyZWQpOworCQlpZiAoZnV0ZXhfY21weGNoZ19lbmFibGVkKQorCQkJcmV0ID0gZnV0ZXhfdW5sb2NrX3BpKHVhZGRyLCBmc2hhcmVkKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9UUllMT0NLX1BJOgotCQlyZXQgPSBmdXRleF9sb2NrX3BpKHVhZGRyLCBmc2hhcmVkLCAwLCB0aW1lb3V0LCAxKTsKKwkJaWYgKGZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKKwkJCXJldCA9IGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZzaGFyZWQsIDAsIHRpbWVvdXQsIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PU1lTOwpAQCAtMjE0MywxMCArMjE1OCwzMSBAQAogCS5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZnV0ZXhfaW5pdCh2b2lkKQogewotCWludCBpID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZnV0ZXhfZnNfdHlwZSk7CisJdTMyIGN1cnZhbDsKKwlpbnQgaTsKIAorCS8qCisJICogVGhpcyB3aWxsIGZhaWwgYW5kIHdlIHdhbnQgaXQuIFNvbWUgYXJjaCBpbXBsZW1lbnRhdGlvbnMgZG8KKwkgKiBydW50aW1lIGRldGVjdGlvbiBvZiB0aGUgZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoKQorCSAqIGZ1bmN0aW9uYWxpdHkuIFdlIHdhbnQgdG8ga25vdyB0aGF0IGJlZm9yZSB3ZSBjYWxsIGluIGFueQorCSAqIG9mIHRoZSBjb21wbGV4IGNvZGUgcGF0aHMuIEFsc28gd2Ugd2FudCB0byBwcmV2ZW50CisJICogcmVnaXN0cmF0aW9uIG9mIHJvYnVzdCBsaXN0cyBpbiB0aGF0IGNhc2UuIE5VTEwgaXMKKwkgKiBndWFyYW50ZWVkIHRvIGZhdWx0IGFuZCB3ZSBnZXQgLUVGQVVMVCBvbiBmdW5jdGlvbmFsCisJICogaW1wbGVtZW50YXRpb24sIHRoZSBub24gZnVuY3Rpb25hbCBvbmVzIHdpbGwgcmV0dXJuCisJICogLUVOT1NZUy4KKwkgKi8KKwljdXJ2YWwgPSBjbXB4Y2hnX2Z1dGV4X3ZhbHVlX2xvY2tlZChOVUxMLCAwLCAwKTsKKwlpZiAoY3VydmFsID09IC1FRkFVTFQpCisJCWZ1dGV4X2NtcHhjaGdfZW5hYmxlZCA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmdXRleF9xdWV1ZXMpOyBpKyspIHsKKwkJcGxpc3RfaGVhZF9pbml0KCZmdXRleF9xdWV1ZXNbaV0uY2hhaW4sICZmdXRleF9xdWV1ZXNbaV0ubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZmdXRleF9xdWV1ZXNbaV0ubG9jayk7CisJfQorCisJaSA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmZ1dGV4X2ZzX3R5cGUpOwogCWlmIChpKQogCQlyZXR1cm4gaTsKIApAQCAtMjE1NiwxMCArMjE5Miw2IEBACiAJCXJldHVybiBQVFJfRVJSKGZ1dGV4X21udCk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnV0ZXhfcXVldWVzKTsgaSsrKSB7Ci0JCXBsaXN0X2hlYWRfaW5pdCgmZnV0ZXhfcXVldWVzW2ldLmNoYWluLCAmZnV0ZXhfcXVldWVzW2ldLmxvY2spOwotCQlzcGluX2xvY2tfaW5pdCgmZnV0ZXhfcXVldWVzW2ldLmxvY2spOwotCX0KIAlyZXR1cm4gMDsKIH0KLV9faW5pdGNhbGwoaW5pdCk7CitfX2luaXRjYWxsKGZ1dGV4X2luaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jIGIva2VybmVsL2Z1dGV4X2NvbXBhdC5jCmluZGV4IDdkNWU0YjAuLjA0YWMzYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleF9jb21wYXQuYworKysgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKQEAgLTMwLDcgKzMwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX191c2VyICpmdXRleF91YWRkcihzdHJ1Y3Qgcm9idXN0X2xpc3QgKmVudHJ5LAorc3RhdGljIHZvaWQgX191c2VyICpmdXRleF91YWRkcihzdHJ1Y3Qgcm9idXN0X2xpc3QgX191c2VyICplbnRyeSwKIAkJCQljb21wYXRfbG9uZ190IGZ1dGV4X29mZnNldCkKIHsKIAljb21wYXRfdXB0cl90IGJhc2UgPSBwdHJfdG9fY29tcGF0KGVudHJ5KTsKQEAgLTU0LDYgKzU0LDkgQEAKIAljb21wYXRfbG9uZ190IGZ1dGV4X29mZnNldDsKIAlpbnQgcmM7CiAKKwlpZiAoIWZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBGZXRjaCB0aGUgbGlzdCBoZWFkICh3aGljaCB3YXMgcmVnaXN0ZXJlZCBlYXJsaWVyLCB2aWEKIAkgKiBzeXNfc2V0X3JvYnVzdF9saXN0KCkpOgpAQCAtMTE1LDYgKzExOCw5IEBACiBjb21wYXRfc3lzX3NldF9yb2J1c3RfbGlzdChzdHJ1Y3QgY29tcGF0X3JvYnVzdF9saXN0X2hlYWQgX191c2VyICpoZWFkLAogCQkJICAgY29tcGF0X3NpemVfdCBsZW4pCiB7CisJaWYgKCFmdXRleF9jbXB4Y2hnX2VuYWJsZWQpCisJCXJldHVybiAtRU5PU1lTOworCiAJaWYgKHVubGlrZWx5KGxlbiAhPSBzaXplb2YoKmhlYWQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEzMCw2ICsxMzYsOSBAQAogCXN0cnVjdCBjb21wYXRfcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKmhlYWQ7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKKwlpZiAoIWZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKIAlpZiAoIXBpZCkKIAkJaGVhZCA9IGN1cnJlbnQtPmNvbXBhdF9yb2J1c3RfbGlzdDsKIAllbHNlIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IDk4YmVlMDEuLmY3ODc3N2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMTIzOCw1MSArMTIzOCw1MCBAQAogLyoKICAqIENhbGxlZCBmcm9tIGhhcmRpcnEgY29udGV4dCBldmVyeSBqaWZmeQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcnVuX2hydGltZXJfcXVldWUoc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlLAotCQkJCSAgICAgaW50IGluZGV4KQotewotCXN0cnVjdCByYl9ub2RlICpub2RlOwotCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSAmY3B1X2Jhc2UtPmNsb2NrX2Jhc2VbaW5kZXhdOwotCi0JaWYgKCFiYXNlLT5maXJzdCkKLQkJcmV0dXJuOwotCi0JaWYgKGJhc2UtPmdldF9zb2Z0aXJxX3RpbWUpCi0JCWJhc2UtPnNvZnRpcnFfdGltZSA9IGJhc2UtPmdldF9zb2Z0aXJxX3RpbWUoKTsKLQotCXNwaW5fbG9jaygmY3B1X2Jhc2UtPmxvY2spOwotCi0Jd2hpbGUgKChub2RlID0gYmFzZS0+Zmlyc3QpKSB7Ci0JCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKLQotCQl0aW1lciA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKLQkJaWYgKGJhc2UtPnNvZnRpcnFfdGltZS50djY0IDw9IHRpbWVyLT5leHBpcmVzLnR2NjQpCi0JCQlicmVhazsKLQotCQlpZiAodGltZXItPmNiX21vZGUgPT0gSFJUSU1FUl9DQl9TT0ZUSVJRKSB7Ci0JCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLCBIUlRJTUVSX1NUQVRFX1BFTkRJTkcsIDApOwotCQkJbGlzdF9hZGRfdGFpbCgmdGltZXItPmNiX2VudHJ5LAotCQkJCQkmYmFzZS0+Y3B1X2Jhc2UtPmNiX3BlbmRpbmcpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlfX3J1bl9ocnRpbWVyKHRpbWVyKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmNwdV9iYXNlLT5sb2NrKTsKLX0KLQogdm9pZCBocnRpbWVyX3J1bl9xdWV1ZXModm9pZCkKIHsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKLQlpbnQgaTsKKwlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlOworCWludCBpbmRleCwgZ2V0dGltZSA9IDE7CiAKIAlpZiAoaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQogCQlyZXR1cm47CiAKLQlocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoY3B1X2Jhc2UpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpbmRleCsrKSB7CisJCWJhc2UgPSAmY3B1X2Jhc2UtPmNsb2NrX2Jhc2VbaW5kZXhdOwogCi0JZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspCi0JCXJ1bl9ocnRpbWVyX3F1ZXVlKGNwdV9iYXNlLCBpKTsKKwkJaWYgKCFiYXNlLT5maXJzdCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChiYXNlLT5nZXRfc29mdGlycV90aW1lKQorCQkJYmFzZS0+c29mdGlycV90aW1lID0gYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSgpOworCQllbHNlIGlmIChnZXR0aW1lKSB7CisJCQlocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoY3B1X2Jhc2UpOworCQkJZ2V0dGltZSA9IDA7CisJCX0KKworCQlzcGluX2xvY2soJmNwdV9iYXNlLT5sb2NrKTsKKworCQl3aGlsZSAoKG5vZGUgPSBiYXNlLT5maXJzdCkpIHsKKwkJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKKworCQkJdGltZXIgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CisJCQlpZiAoYmFzZS0+c29mdGlycV90aW1lLnR2NjQgPD0gdGltZXItPmV4cGlyZXMudHY2NCkKKwkJCQlicmVhazsKKworCQkJaWYgKHRpbWVyLT5jYl9tb2RlID09IEhSVElNRVJfQ0JfU09GVElSUSkgeworCQkJCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIGJhc2UsCisJCQkJCUhSVElNRVJfU1RBVEVfUEVORElORywgMCk7CisJCQkJbGlzdF9hZGRfdGFpbCgmdGltZXItPmNiX2VudHJ5LAorCQkJCQkmYmFzZS0+Y3B1X2Jhc2UtPmNiX3BlbmRpbmcpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlfX3J1bl9ocnRpbWVyKHRpbWVyKTsKKwkJfQorCQlzcGluX3VubG9jaygmY3B1X2Jhc2UtPmxvY2spOworCX0KIH0KIAogLyoKQEAgLTEzNTQsMTMgKzEzNTMsMTMgQEAKIAlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHQ7CiAJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAgKnJtdHA7CiAKLQlocnRpbWVyX2luaXQoJnQudGltZXIsIHJlc3RhcnQtPmFyZzAsIEhSVElNRVJfTU9ERV9BQlMpOwotCXQudGltZXIuZXhwaXJlcy50djY0ID0gKCh1NjQpcmVzdGFydC0+YXJnMyA8PCAzMikgfCAodTY0KSByZXN0YXJ0LT5hcmcyOworCWhydGltZXJfaW5pdCgmdC50aW1lciwgcmVzdGFydC0+bmFub3NsZWVwLmluZGV4LCBIUlRJTUVSX01PREVfQUJTKTsKKwl0LnRpbWVyLmV4cGlyZXMudHY2NCA9IHJlc3RhcnQtPm5hbm9zbGVlcC5leHBpcmVzOwogCiAJaWYgKGRvX25hbm9zbGVlcCgmdCwgSFJUSU1FUl9NT0RFX0FCUykpCiAJCXJldHVybiAwOwogCi0Jcm10cCA9IChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopcmVzdGFydC0+YXJnMTsKKwlybXRwID0gcmVzdGFydC0+bmFub3NsZWVwLnJtdHA7CiAJaWYgKHJtdHApIHsKIAkJaW50IHJldCA9IHVwZGF0ZV9ybXRwKCZ0LnRpbWVyLCBybXRwKTsKIAkJaWYgKHJldCA8PSAwKQpAQCAtMTM5NCwxMCArMTM5Myw5IEBACiAKIAlyZXN0YXJ0ID0gJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jazsKIAlyZXN0YXJ0LT5mbiA9IGhydGltZXJfbmFub3NsZWVwX3Jlc3RhcnQ7Ci0JcmVzdGFydC0+YXJnMCA9ICh1bnNpZ25lZCBsb25nKSB0LnRpbWVyLmJhc2UtPmluZGV4OwotCXJlc3RhcnQtPmFyZzEgPSAodW5zaWduZWQgbG9uZykgcm10cDsKLQlyZXN0YXJ0LT5hcmcyID0gdC50aW1lci5leHBpcmVzLnR2NjQgJiAweEZGRkZGRkZGOwotCXJlc3RhcnQtPmFyZzMgPSB0LnRpbWVyLmV4cGlyZXMudHY2NCA+PiAzMjsKKwlyZXN0YXJ0LT5uYW5vc2xlZXAuaW5kZXggPSB0LnRpbWVyLmJhc2UtPmluZGV4OworCXJlc3RhcnQtPm5hbm9zbGVlcC5ybXRwID0gcm10cDsKKwlyZXN0YXJ0LT5uYW5vc2xlZXAuZXhwaXJlcyA9IHQudGltZXIuZXhwaXJlcy50djY0OwogCiAJcmV0dXJuIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CiB9CkBAIC0xNDI1LDcgKzE0MjMsNiBAQAogCWludCBpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNwdV9iYXNlLT5sb2NrKTsKLQlsb2NrZGVwX3NldF9jbGFzcygmY3B1X2Jhc2UtPmxvY2ssICZjcHVfYmFzZS0+bG9ja19rZXkpOwogCiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspCiAJCWNwdV9iYXNlLT5jbG9ja19iYXNlW2ldLmNwdV9iYXNlID0gY3B1X2Jhc2U7CkBAIC0xNDY2LDE2ICsxNDYzLDE2IEBACiAJdGlja19jYW5jZWxfc2NoZWRfdGltZXIoY3B1KTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JZG91YmxlX3NwaW5fbG9jaygmbmV3X2Jhc2UtPmxvY2ssICZvbGRfYmFzZS0+bG9jaywKLQkJCSBzbXBfcHJvY2Vzc29yX2lkKCkgPCBjcHUpOworCXNwaW5fbG9jaygmbmV3X2Jhc2UtPmxvY2spOworCXNwaW5fbG9ja19uZXN0ZWQoJm9sZF9iYXNlLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKykgewogCQltaWdyYXRlX2hydGltZXJfbGlzdCgmb2xkX2Jhc2UtPmNsb2NrX2Jhc2VbaV0sCiAJCQkJICAgICAmbmV3X2Jhc2UtPmNsb2NrX2Jhc2VbaV0pOwogCX0KIAotCWRvdWJsZV9zcGluX3VubG9jaygmbmV3X2Jhc2UtPmxvY2ssICZvbGRfYmFzZS0+bG9jaywKLQkJCSAgIHNtcF9wcm9jZXNzb3JfaWQoKSA8IGNwdSk7CisJc3Bpbl91bmxvY2soJm9sZF9iYXNlLT5sb2NrKTsKKwlzcGluX3VubG9jaygmbmV3X2Jhc2UtPmxvY2spOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlwdXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggY2M1NGM2Mi4uOTY0OTY0YiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlkZXNjLT5pcnFfY291bnQgPSAwOwogCWRlc2MtPmlycXNfdW5oYW5kbGVkID0gMDsKICNpZmRlZiBDT05GSUdfU01QCi0JZGVzYy0+YWZmaW5pdHkgPSBDUFVfTUFTS19BTEw7CisJY3B1c19zZXRhbGwoZGVzYy0+YWZmaW5pdHkpOwogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMjQ2LDYgKzI0NiwxNyBAQAogfQogCiAvKgorICogZGVmYXVsdCBzaHV0ZG93biBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBkZWZhdWx0X3NodXRkb3duKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKKwlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CisJZGVzYy0+c3RhdHVzIHw9IElSUV9NQVNLRUQ7Cit9CisKKy8qCiAgKiBGaXh1cCBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbiBwb2ludGVycwogICovCiB2b2lkIGlycV9jaGlwX3NldF9kZWZhdWx0cyhzdHJ1Y3QgaXJxX2NoaXAgKmNoaXApCkBAIC0yNTYsOCArMjY3LDE1IEBACiAJCWNoaXAtPmRpc2FibGUgPSBkZWZhdWx0X2Rpc2FibGU7CiAJaWYgKCFjaGlwLT5zdGFydHVwKQogCQljaGlwLT5zdGFydHVwID0gZGVmYXVsdF9zdGFydHVwOworCS8qCisJICogV2UgdXNlIGNoaXAtPmRpc2FibGUsIHdoZW4gdGhlIHVzZXIgcHJvdmlkZWQgaXRzIG93bi4gV2hlbgorCSAqIHdlIGhhdmUgZGVmYXVsdF9kaXNhYmxlIHNldCBmb3IgY2hpcC0+ZGlzYWJsZSwgdGhlbiB3ZSBuZWVkCisJICogdG8gdXNlIGRlZmF1bHRfc2h1dGRvd24sIG90aGVyd2lzZSB0aGUgaXJxIGxpbmUgaXMgbm90CisJICogZGlzYWJsZWQgb24gZnJlZV9pcnEoKToKKwkgKi8KIAlpZiAoIWNoaXAtPnNodXRkb3duKQotCQljaGlwLT5zaHV0ZG93biA9IGNoaXAtPmRpc2FibGU7CisJCWNoaXAtPnNodXRkb3duID0gY2hpcC0+ZGlzYWJsZSAhPSBkZWZhdWx0X2Rpc2FibGUgPworCQkJY2hpcC0+ZGlzYWJsZSA6IGRlZmF1bHRfc2h1dGRvd247CiAJaWYgKCFjaGlwLT5uYW1lKQogCQljaGlwLT5uYW1lID0gY2hpcC0+dHlwZW5hbWU7CiAJaWYgKCFjaGlwLT5lbmQpCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggYTZiMmJjOC4uMDg4ZGFiYiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtNiw2ICs2LDcgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBzcHVyaW91cyBpbnRlcnJ1cHQgaGFuZGxpbmcuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgpAQCAtMTc5LDcgKzE4MCw3IEBACiAJCSAqIG90aGVyd2lzZSB0aGUgY291dGVyIGJlY29tZXMgYSBkb29tc2RheSB0aW1lciBmb3Igb3RoZXJ3aXNlCiAJCSAqIHdvcmtpbmcgc3lzdGVtcwogCQkgKi8KLQkJaWYgKGppZmZpZXMgLSBkZXNjLT5sYXN0X3VuaGFuZGxlZCA+IEhaLzEwKQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkZXNjLT5sYXN0X3VuaGFuZGxlZCArIEhaLzEwKSkKIAkJCWRlc2MtPmlycXNfdW5oYW5kbGVkID0gMTsKIAkJZWxzZQogCQkJZGVzYy0+aXJxc191bmhhbmRsZWQrKzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggMDZhMGUyNy4uNjc4MmRjZSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKIC8qIFBlciBjcHUgbWVtb3J5IGZvciBzdG9yaW5nIGNwdSBzdGF0ZXMgaW4gY2FzZSBvZiBzeXN0ZW0gY3Jhc2guICovCmRpZmYgLS1naXQgYS9rZXJuZWwva2dkYi5jIGIva2VybmVsL2tnZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQwZWMxCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2tnZGIuYwpAQCAtMCwwICsxLDE3MDAgQEAKKy8qCisgKiBLR0RCIHN0dWIuCisgKgorICogTWFpbnRhaW5lcjogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBWRVJJVEFTIFNvZnR3YXJlIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgVGltZXN5cyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgQW1pdCBTLiBLYWxlIDxhbWl0a2FsZUBsaW5zeXNzb2Z0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBUb20gUmluaSA8dHJpbmlAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IExpblN5c1NvZnQgVGVjaG5vbG9naWVzIFB2dC4gTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICoKKyAqIENvbnRyaWJ1dG9ycyBhdCB2YXJpb3VzIHN0YWdlcyBub3QgbGlzdGVkIGFib3ZlOgorICogIEphc29uIFdlc3NlbCAoIGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tICkKKyAqICBHZW9yZ2UgQW56aW5nZXIgPGdlb3JnZUBtdmlzdGEuY29tPgorICogIEFudXJla2ggU2F4ZW5hIChhbnVyZWtoLnNheGVuYUB0aW1lc3lzLmNvbSkKKyAqICBMYWtlIFN0ZXZlbnMgSW5zdHJ1bWVudCBEaXZpc2lvbiAoR2xlbm4gRW5nZWwpCisgKiAgSmltIEtpbmdkb24sIEN5Z251cyBTdXBwb3J0LgorICoKKyAqIE9yaWdpbmFsIEtHREIgc3R1YjogRGF2aWQgR3JvdGhlIDxkYXZlQGdjb20uY29tPiwKKyAqIFRpZ3JhbiBBaXZhemlhbiA8dGlncmFuQHNjby5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9waWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworc3RhdGljIGludCBrZ2RiX2JyZWFrX2FzYXA7CisKK3N0cnVjdCBrZ2RiX3N0YXRlIHsKKwlpbnQJCQlleF92ZWN0b3I7CisJaW50CQkJc2lnbm87CisJaW50CQkJZXJyX2NvZGU7CisJaW50CQkJY3B1OworCWludAkJCXBhc3NfZXhjZXB0aW9uOworCWxvbmcJCQl0aHJlYWRpZDsKKwlsb25nCQkJa2dkYl91c2V0aHJlYWRpZDsKKwlzdHJ1Y3QgcHRfcmVncwkJKmxpbnV4X3JlZ3M7Cit9OworCitzdGF0aWMgc3RydWN0IGRlYnVnZ2VyaW5mb19zdHJ1Y3QgeworCXZvaWQJCQkqZGVidWdnZXJpbmZvOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKK30ga2dkYl9pbmZvW05SX0NQVVNdOworCisvKioKKyAqIGtnZGJfY29ubmVjdGVkIC0gSXMgYSBob3N0IEdEQiBjb25uZWN0ZWQgdG8gdXM/CisgKi8KK2ludAkJCQlrZ2RiX2Nvbm5lY3RlZDsKK0VYUE9SVF9TWU1CT0xfR1BMKGtnZGJfY29ubmVjdGVkKTsKKworLyogQWxsIHRoZSBLR0RCIGhhbmRsZXJzIGFyZSBpbnN0YWxsZWQgKi8KK3N0YXRpYyBpbnQJCQlrZ2RiX2lvX21vZHVsZV9yZWdpc3RlcmVkOworCisvKiBHdWFyZCBmb3IgcmVjdXJzaXZlIGVudHJ5ICovCitzdGF0aWMgaW50CQkJZXhjZXB0aW9uX2xldmVsOworCitzdGF0aWMgc3RydWN0IGtnZGJfaW8JCSprZ2RiX2lvX29wczsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2dkYl9yZWdpc3RyYXRpb25fbG9jayk7CisKKy8qIGtnZGIgY29uc29sZSBkcml2ZXIgaXMgbG9hZGVkICovCitzdGF0aWMgaW50IGtnZGJfY29uX3JlZ2lzdGVyZWQ7CisvKiBkZXRlcm1pbmUgaWYga2dkYiBjb25zb2xlIG91dHB1dCBzaG91bGQgYmUgdXNlZCAqLworc3RhdGljIGludCBrZ2RiX3VzZV9jb247CisKK3N0YXRpYyBpbnQgX19pbml0IG9wdF9rZ2RiX2NvbihjaGFyICpzdHIpCit7CisJa2dkYl91c2VfY29uID0gMTsKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oImtnZGJjb24iLCBvcHRfa2dkYl9jb24pOworCittb2R1bGVfcGFyYW0oa2dkYl91c2VfY29uLCBpbnQsIDA2NDQpOworCisvKgorICogSG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYnJlYWtwb2ludHMgaW4gYSBrZXJuZWwuIFRoZXNlIGJyZWFrcG9pbnRzIGFyZQorICogYWRkZWQgYW5kIHJlbW92ZWQgYnkgZ2RiLgorICovCitzdGF0aWMgc3RydWN0IGtnZGJfYmtwdAkJa2dkYl9icmVha1tLR0RCX01BWF9CUkVBS1BPSU5UU10gPSB7CisJWzAgLi4uIEtHREJfTUFYX0JSRUFLUE9JTlRTLTFdID0geyAuc3RhdGUgPSBCUF9VTkRFRklORUQgfQorfTsKKworLyoKKyAqIFRoZSBDUFUjIG9mIHRoZSBhY3RpdmUgQ1BVLCBvciAtMSBpZiBub25lOgorICovCithdG9taWNfdAkJCWtnZGJfYWN0aXZlID0gQVRPTUlDX0lOSVQoLTEpOworCisvKgorICogV2UgdXNlIE5SX0NQVXMgbm90IFBFUkNQVSwgaW4gY2FzZSBrZ2RiIGlzIHVzZWQgdG8gZGVidWcgZWFybHkKKyAqIGJvb3R1cCBjb2RlICh3aGljaCBtaWdodCBub3QgaGF2ZSBwZXJjcHUgc2V0IHVwIHlldCk6CisgKi8KK3N0YXRpYyBhdG9taWNfdAkJCXBhc3NpdmVfY3B1X3dhaXRbTlJfQ1BVU107CitzdGF0aWMgYXRvbWljX3QJCQljcHVfaW5fa2dkYltOUl9DUFVTXTsKK2F0b21pY190CQkJa2dkYl9zZXR0aW5nX2JyZWFrcG9pbnQ7CisKK3N0cnVjdCB0YXNrX3N0cnVjdAkJKmtnZGJfdXNldGhyZWFkOworc3RydWN0IHRhc2tfc3RydWN0CQkqa2dkYl9jb250dGhyZWFkOworCitpbnQJCQkJa2dkYl9zaW5nbGVfc3RlcDsKKworLyogT3VyIEkvTyBidWZmZXJzLiAqLworc3RhdGljIGNoYXIJCQlyZW1jb21faW5fYnVmZmVyW0JVRk1BWF07CitzdGF0aWMgY2hhcgkJCXJlbWNvbV9vdXRfYnVmZmVyW0JVRk1BWF07CisKKy8qIFN0b3JhZ2UgZm9yIHRoZSByZWdpc3RlcnMsIGluIEdEQiBmb3JtYXQuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZwkJZ2RiX3JlZ3NbKE5VTVJFR0JZVEVTICsKKwkJCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSkgLworCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyldOworCisvKiB0byBrZWVwIHRyYWNrIG9mIHRoZSBDUFUgd2hpY2ggaXMgZG9pbmcgdGhlIHNpbmdsZSBzdGVwcGluZyovCithdG9taWNfdAkJCWtnZGJfY3B1X2RvaW5nX3NpbmdsZV9zdGVwID0gQVRPTUlDX0lOSVQoLTEpOworCisvKgorICogSWYgeW91IGFyZSBkZWJ1Z2dpbmcgYSBwcm9ibGVtIHdoZXJlIHJvdW5kdXAgKHRoZSBjb2xsZWN0aW9uIG9mCisgKiBhbGwgb3RoZXIgQ1BVcykgaXMgYSBwcm9ibGVtIFt0aGlzIHNob3VsZCBiZSBleHRyZW1lbHkgcmFyZV0sCisgKiB0aGVuIHVzZSB0aGUgbm9rZ2Ricm91bmR1cCBvcHRpb24gdG8gYXZvaWQgcm91bmR1cC4gSW4gdGhhdCBjYXNlCisgKiB0aGUgb3RoZXIgQ1BVcyBtaWdodCBpbnRlcmZlcmUgd2l0aCB5b3VyIGRlYnVnZ2luZyBjb250ZXh0LCBzbworICogdXNlIHRoaXMgd2l0aCBjYXJlOgorICovCitpbnQJCQkJa2dkYl9kb19yb3VuZHVwID0gMTsKKworc3RhdGljIGludCBfX2luaXQgb3B0X25va2dkYnJvdW5kdXAoY2hhciAqc3RyKQoreworCWtnZGJfZG9fcm91bmR1cCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oIm5va2dkYnJvdW5kdXAiLCBvcHRfbm9rZ2Ricm91bmR1cCk7CisKKy8qCisgKiBGaW5hbGx5LCBzb21lIEtHREIgY29kZSA6LSkKKyAqLworCisvKgorICogV2VhayBhbGlhc2VzIGZvciBicmVha3BvaW50IG1hbmFnZW1lbnQsCisgKiBjYW4gYmUgb3ZlcnJpZGVuIGJ5IGFyY2hpdGVjdHVyZXMgd2hlbiBuZWVkZWQ6CisgKi8KK2ludCBfX3dlYWsga2dkYl92YWxpZGF0ZV9icmVha19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwljaGFyIHRtcF92YXJpYWJsZVtCUkVBS19JTlNUUl9TSVpFXTsKKworCXJldHVybiBwcm9iZV9rZXJuZWxfcmVhZCh0bXBfdmFyaWFibGUsIChjaGFyICopYWRkciwgQlJFQUtfSU5TVFJfU0laRSk7Cit9CisKK2ludCBfX3dlYWsga2dkYl9hcmNoX3NldF9icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc2F2ZWRfaW5zdHIpCit7CisJaW50IGVycjsKKworCWVyciA9IHByb2JlX2tlcm5lbF9yZWFkKHNhdmVkX2luc3RyLCAoY2hhciAqKWFkZHIsIEJSRUFLX0lOU1RSX1NJWkUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKChjaGFyICopYWRkciwgYXJjaF9rZ2RiX29wcy5nZGJfYnB0X2luc3RyLAorCQkJCSAgQlJFQUtfSU5TVFJfU0laRSk7Cit9CisKK2ludCBfX3dlYWsga2dkYl9hcmNoX3JlbW92ZV9icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqYnVuZGxlKQoreworCXJldHVybiBwcm9iZV9rZXJuZWxfd3JpdGUoKGNoYXIgKilhZGRyLAorCQkJCSAgKGNoYXIgKilidW5kbGUsIEJSRUFLX0lOU1RSX1NJWkUpOworfQorCit1bnNpZ25lZCBsb25nIF9fd2VhayBrZ2RiX2FyY2hfcGMoaW50IGV4Y2VwdGlvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7Cit9CisKK2ludCBfX3dlYWsga2dkYl9hcmNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IF9fd2VhayBrZ2RiX3NraXBleGNlcHRpb24oaW50IGV4Y2VwdGlvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX193ZWFrCitrZ2RiX3Bvc3RfcHJpbWFyeV9jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZV92ZWN0b3IsIGludCBlcnJfY29kZSkKK3sKKwlyZXR1cm47Cit9CisKKy8qKgorICoJa2dkYl9kaXNhYmxlX2h3X2RlYnVnIC0gRGlzYWJsZSBoYXJkd2FyZSBkZWJ1Z2dpbmcgd2hpbGUgd2UgaW4ga2dkYi4KKyAqCUByZWdzOiBDdXJyZW50ICZzdHJ1Y3QgcHRfcmVncy4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlmIHRoZSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBtdXN0CisgKglkaXNhYmxlIGhhcmR3YXJlIGRlYnVnZ2luZyB3aGlsZSBpdCBpcyBwcm9jZXNzaW5nIGdkYiBwYWNrZXRzIG9yCisgKgloYW5kbGluZyBleGNlcHRpb24uCisgKi8KK3ZvaWQgX193ZWFrIGtnZGJfZGlzYWJsZV9od19kZWJ1ZyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKK30KKworLyoKKyAqIEdEQiByZW1vdGUgcHJvdG9jb2wgcGFyc2VyOgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyCWhleGNoYXJzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKK3N0YXRpYyBpbnQgaGV4KGNoYXIgY2gpCit7CisJaWYgKChjaCA+PSAnYScpICYmIChjaCA8PSAnZicpKQorCQlyZXR1cm4gY2ggLSAnYScgKyAxMDsKKwlpZiAoKGNoID49ICcwJykgJiYgKGNoIDw9ICc5JykpCisJCXJldHVybiBjaCAtICcwJzsKKwlpZiAoKGNoID49ICdBJykgJiYgKGNoIDw9ICdGJykpCisJCXJldHVybiBjaCAtICdBJyArIDEwOworCXJldHVybiAtMTsKK30KKworLyogc2NhbiBmb3IgdGhlIHNlcXVlbmNlICQ8ZGF0YT4jPGNoZWNrc3VtPiAqLworc3RhdGljIHZvaWQgZ2V0X3BhY2tldChjaGFyICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciBjaGVja3N1bTsKKwl1bnNpZ25lZCBjaGFyIHhtaXRjc3VtOworCWludCBjb3VudDsKKwljaGFyIGNoOworCisJZG8geworCQkvKgorCQkgKiBTcGluIGFuZCB3YWl0IGFyb3VuZCBmb3IgdGhlIHN0YXJ0IGNoYXJhY3RlciwgaWdub3JlIGFsbAorCQkgKiBvdGhlciBjaGFyYWN0ZXJzOgorCQkgKi8KKwkJd2hpbGUgKChjaCA9IChrZ2RiX2lvX29wcy0+cmVhZF9jaGFyKCkpKSAhPSAnJCcpCisJCQkvKiBub3RoaW5nICovOworCisJCWtnZGJfY29ubmVjdGVkID0gMTsKKwkJY2hlY2tzdW0gPSAwOworCQl4bWl0Y3N1bSA9IC0xOworCisJCWNvdW50ID0gMDsKKworCQkvKgorCQkgKiBub3csIHJlYWQgdW50aWwgYSAjIG9yIGVuZCBvZiBidWZmZXIgaXMgZm91bmQ6CisJCSAqLworCQl3aGlsZSAoY291bnQgPCAoQlVGTUFYIC0gMSkpIHsKKwkJCWNoID0ga2dkYl9pb19vcHMtPnJlYWRfY2hhcigpOworCQkJaWYgKGNoID09ICcjJykKKwkJCQlicmVhazsKKwkJCWNoZWNrc3VtID0gY2hlY2tzdW0gKyBjaDsKKwkJCWJ1ZmZlcltjb3VudF0gPSBjaDsKKwkJCWNvdW50ID0gY291bnQgKyAxOworCQl9CisJCWJ1ZmZlcltjb3VudF0gPSAwOworCisJCWlmIChjaCA9PSAnIycpIHsKKwkJCXhtaXRjc3VtID0gaGV4KGtnZGJfaW9fb3BzLT5yZWFkX2NoYXIoKSkgPDwgNDsKKwkJCXhtaXRjc3VtICs9IGhleChrZ2RiX2lvX29wcy0+cmVhZF9jaGFyKCkpOworCisJCQlpZiAoY2hlY2tzdW0gIT0geG1pdGNzdW0pCisJCQkJLyogZmFpbGVkIGNoZWNrc3VtICovCisJCQkJa2dkYl9pb19vcHMtPndyaXRlX2NoYXIoJy0nKTsKKwkJCWVsc2UKKwkJCQkvKiBzdWNjZXNzZnVsIHRyYW5zZmVyICovCisJCQkJa2dkYl9pb19vcHMtPndyaXRlX2NoYXIoJysnKTsKKwkJCWlmIChrZ2RiX2lvX29wcy0+Zmx1c2gpCisJCQkJa2dkYl9pb19vcHMtPmZsdXNoKCk7CisJCX0KKwl9IHdoaWxlIChjaGVja3N1bSAhPSB4bWl0Y3N1bSk7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBwYWNrZXQgaW4gYnVmZmVyLgorICogQ2hlY2sgZm9yIGdkYiBjb25uZWN0aW9uIGlmIGFza2VkIGZvci4KKyAqLworc3RhdGljIHZvaWQgcHV0X3BhY2tldChjaGFyICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciBjaGVja3N1bTsKKwlpbnQgY291bnQ7CisJY2hhciBjaDsKKworCS8qCisJICogJDxwYWNrZXQgaW5mbz4jPGNoZWNrc3VtPi4KKwkgKi8KKwl3aGlsZSAoMSkgeworCQlrZ2RiX2lvX29wcy0+d3JpdGVfY2hhcignJCcpOworCQljaGVja3N1bSA9IDA7CisJCWNvdW50ID0gMDsKKworCQl3aGlsZSAoKGNoID0gYnVmZmVyW2NvdW50XSkpIHsKKwkJCWtnZGJfaW9fb3BzLT53cml0ZV9jaGFyKGNoKTsKKwkJCWNoZWNrc3VtICs9IGNoOworCQkJY291bnQrKzsKKwkJfQorCisJCWtnZGJfaW9fb3BzLT53cml0ZV9jaGFyKCcjJyk7CisJCWtnZGJfaW9fb3BzLT53cml0ZV9jaGFyKGhleGNoYXJzW2NoZWNrc3VtID4+IDRdKTsKKwkJa2dkYl9pb19vcHMtPndyaXRlX2NoYXIoaGV4Y2hhcnNbY2hlY2tzdW0gJiAweGZdKTsKKwkJaWYgKGtnZGJfaW9fb3BzLT5mbHVzaCkKKwkJCWtnZGJfaW9fb3BzLT5mbHVzaCgpOworCisJCS8qIE5vdyBzZWUgd2hhdCB3ZSBnZXQgaW4gcmVwbHkuICovCisJCWNoID0ga2dkYl9pb19vcHMtPnJlYWRfY2hhcigpOworCisJCWlmIChjaCA9PSAzKQorCQkJY2ggPSBrZ2RiX2lvX29wcy0+cmVhZF9jaGFyKCk7CisKKwkJLyogSWYgd2UgZ2V0IGFuIEFDSywgd2UgYXJlIGRvbmUuICovCisJCWlmIChjaCA9PSAnKycpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogSWYgd2UgZ2V0IHRoZSBzdGFydCBvZiBhbm90aGVyIHBhY2tldCwgdGhpcyBtZWFucworCQkgKiB0aGF0IEdEQiBpcyBhdHRlbXB0aW5nIHRvIHJlY29ubmVjdC4gIFdlIHdpbGwgTkFLCisJCSAqIHRoZSBwYWNrZXQgYmVpbmcgc2VudCwgYW5kIHN0b3AgdHJ5aW5nIHRvIHNlbmQgdGhpcworCQkgKiBwYWNrZXQuCisJCSAqLworCQlpZiAoY2ggPT0gJyQnKSB7CisJCQlrZ2RiX2lvX29wcy0+d3JpdGVfY2hhcignLScpOworCQkJaWYgKGtnZGJfaW9fb3BzLT5mbHVzaCkKKwkJCQlrZ2RiX2lvX29wcy0+Zmx1c2goKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIGNoYXIgKnBhY2tfaGV4X2J5dGUoY2hhciAqcGt0LCB1OCBieXRlKQoreworCSpwa3QrKyA9IGhleGNoYXJzW2J5dGUgPj4gNF07CisJKnBrdCsrID0gaGV4Y2hhcnNbYnl0ZSAmIDB4Zl07CisKKwlyZXR1cm4gcGt0OworfQorCisvKgorICogQ29udmVydCB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgbWVtIGludG8gaGV4LCBwbGFjaW5nIHJlc3VsdCBpbiBidWYuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsYXN0IGNoYXIgcHV0IGluIGJ1ZiAobnVsbCkuIE1heSByZXR1cm4gYW4gZXJyb3IuCisgKi8KK2ludCBrZ2RiX21lbTJoZXgoY2hhciAqbWVtLCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwljaGFyICp0bXA7CisJaW50IGVycjsKKworCS8qCisJICogV2UgdXNlIHRoZSB1cHBlciBoYWxmIG9mIGJ1ZiBhcyBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGZvciB0aGUKKwkgKiByYXcgbWVtb3J5IGNvcHkuICBIZXggY29udmVyc2lvbiB3aWxsIHdvcmsgYWdhaW5zdCB0aGlzIG9uZS4KKwkgKi8KKwl0bXAgPSBidWYgKyBjb3VudDsKKworCWVyciA9IHByb2JlX2tlcm5lbF9yZWFkKHRtcCwgbWVtLCBjb3VudCk7CisJaWYgKCFlcnIpIHsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJYnVmID0gcGFja19oZXhfYnl0ZShidWYsICp0bXApOworCQkJdG1wKys7CisJCQljb3VudC0tOworCQl9CisKKwkJKmJ1ZiA9IDA7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENvcHkgdGhlIGJpbmFyeSBhcnJheSBwb2ludGVkIHRvIGJ5IGJ1ZiBpbnRvIG1lbS4gIEZpeCAkLCAjLCBhbmQKKyAqIDB4N2QgZXNjYXBlZCB3aXRoIDB4N2QuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIKKyAqIHRoZSBsYXN0IGJ5dGUgd3JpdHRlbi4KKyAqLworc3RhdGljIGludCBrZ2RiX2ViaW4ybWVtKGNoYXIgKmJ1ZiwgY2hhciAqbWVtLCBpbnQgY291bnQpCit7CisJaW50IGVyciA9IDA7CisJY2hhciBjOworCisJd2hpbGUgKGNvdW50LS0gPiAwKSB7CisJCWMgPSAqYnVmKys7CisJCWlmIChjID09IDB4N2QpCisJCQljID0gKmJ1ZisrIF4gMHgyMDsKKworCQllcnIgPSBwcm9iZV9rZXJuZWxfd3JpdGUobWVtLCAmYywgMSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQltZW0rKzsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ29udmVydCB0aGUgaGV4IGFycmF5IHBvaW50ZWQgdG8gYnkgYnVmIGludG8gYmluYXJ5IHRvIGJlIHBsYWNlZCBpbiBtZW0uCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgQUZURVIgdGhlIGxhc3QgYnl0ZSB3cml0dGVuLgorICogTWF5IHJldHVybiBhbiBlcnJvci4KKyAqLworaW50IGtnZGJfaGV4Mm1lbShjaGFyICpidWYsIGNoYXIgKm1lbSwgaW50IGNvdW50KQoreworCWNoYXIgKnRtcF9yYXc7CisJY2hhciAqdG1wX2hleDsKKworCS8qCisJICogV2UgdXNlIHRoZSB1cHBlciBoYWxmIG9mIGJ1ZiBhcyBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGZvciB0aGUKKwkgKiByYXcgbWVtb3J5IHRoYXQgaXMgY29udmVydGVkIGZyb20gaGV4LgorCSAqLworCXRtcF9yYXcgPSBidWYgKyBjb3VudCAqIDI7CisKKwl0bXBfaGV4ID0gdG1wX3JhdyAtIDE7CisJd2hpbGUgKHRtcF9oZXggPj0gYnVmKSB7CisJCXRtcF9yYXctLTsKKwkJKnRtcF9yYXcgPSBoZXgoKnRtcF9oZXgtLSk7CisJCSp0bXBfcmF3IHw9IGhleCgqdG1wX2hleC0tKSA8PCA0OworCX0KKworCXJldHVybiBwcm9iZV9rZXJuZWxfd3JpdGUobWVtLCB0bXBfcmF3LCBjb3VudCk7Cit9CisKKy8qCisgKiBXaGlsZSB3ZSBmaW5kIG5pY2UgaGV4IGNoYXJzLCBidWlsZCBhIGxvbmdfdmFsLgorICogUmV0dXJuIG51bWJlciBvZiBjaGFycyBwcm9jZXNzZWQuCisgKi8KK2ludCBrZ2RiX2hleDJsb25nKGNoYXIgKipwdHIsIGxvbmcgKmxvbmdfdmFsKQoreworCWludCBoZXhfdmFsOworCWludCBudW0gPSAwOworCisJKmxvbmdfdmFsID0gMDsKKworCXdoaWxlICgqKnB0cikgeworCQloZXhfdmFsID0gaGV4KCoqcHRyKTsKKwkJaWYgKGhleF92YWwgPCAwKQorCQkJYnJlYWs7CisKKwkJKmxvbmdfdmFsID0gKCpsb25nX3ZhbCA8PCA0KSB8IGhleF92YWw7CisJCW51bSsrOworCQkoKnB0cikrKzsKKwl9CisKKwlyZXR1cm4gbnVtOworfQorCisvKiBXcml0ZSBtZW1vcnkgZHVlIHRvIGFuICdNJyBvciAnWCcgcGFja2V0LiAqLworc3RhdGljIGludCB3cml0ZV9tZW1fbXNnKGludCBiaW5hcnkpCit7CisJY2hhciAqcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMV07CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCWludCBlcnI7CisKKwlpZiAoa2dkYl9oZXgybG9uZygmcHRyLCAmYWRkcikgPiAwICYmICoocHRyKyspID09ICcsJyAmJgorCSAgICBrZ2RiX2hleDJsb25nKCZwdHIsICZsZW5ndGgpID4gMCAmJiAqKHB0cisrKSA9PSAnOicpIHsKKwkJaWYgKGJpbmFyeSkKKwkJCWVyciA9IGtnZGJfZWJpbjJtZW0ocHRyLCAoY2hhciAqKWFkZHIsIGxlbmd0aCk7CisJCWVsc2UKKwkJCWVyciA9IGtnZGJfaGV4Mm1lbShwdHIsIChjaGFyICopYWRkciwgbGVuZ3RoKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmIChDQUNIRV9GTFVTSF9JU19TQUZFKQorCQkJZmx1c2hfaWNhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyBsZW5ndGggKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yX3BhY2tldChjaGFyICpwa3QsIGludCBlcnJvcikKK3sKKwllcnJvciA9IC1lcnJvcjsKKwlwa3RbMF0gPSAnRSc7CisJcGt0WzFdID0gaGV4Y2hhcnNbKGVycm9yIC8gMTApXTsKKwlwa3RbMl0gPSBoZXhjaGFyc1soZXJyb3IgJSAxMCldOworCXBrdFszXSA9ICdcMCc7Cit9CisKKy8qCisgKiBUaHJlYWQgSUQgYWNjZXNzb3JzLiBXZSByZXByZXNlbnQgYSBmbGF0IFRJRCBzcGFjZSB0byBHREIsIHdoZXJlCisgKiB0aGUgcGVyIENQVSBpZGxlIHRocmVhZHMgKHdoaWNoIHVuZGVyIExpbnV4IGFsbCBoYXZlIFBJRCAwKSBhcmUKKyAqIHJlbWFwcGVkIHRvIG5lZ2F0aXZlIFRJRHMuCisgKi8KKworI2RlZmluZSBCVUZfVEhSRUFEX0lEX1NJWkUJMTYKKworc3RhdGljIGNoYXIgKnBhY2tfdGhyZWFkaWQoY2hhciAqcGt0LCB1bnNpZ25lZCBjaGFyICppZCkKK3sKKwljaGFyICpsaW1pdDsKKworCWxpbWl0ID0gcGt0ICsgQlVGX1RIUkVBRF9JRF9TSVpFOworCXdoaWxlIChwa3QgPCBsaW1pdCkKKwkJcGt0ID0gcGFja19oZXhfYnl0ZShwa3QsICppZCsrKTsKKworCXJldHVybiBwa3Q7Cit9CisKK3N0YXRpYyB2b2lkIGludF90b190aHJlYWRyZWYodW5zaWduZWQgY2hhciAqaWQsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpzY2FuOworCWludCBpID0gNDsKKworCXNjYW4gPSAodW5zaWduZWQgY2hhciAqKWlkOworCXdoaWxlIChpLS0pCisJCSpzY2FuKysgPSAwOworCSpzY2FuKysgPSAodmFsdWUgPj4gMjQpICYgMHhmZjsKKwkqc2NhbisrID0gKHZhbHVlID4+IDE2KSAmIDB4ZmY7CisJKnNjYW4rKyA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisJKnNjYW4rKyA9ICh2YWx1ZSAmIDB4ZmYpOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpnZXR0aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0aWQpCit7CisJLyoKKwkgKiBOb24tcG9zaXRpdmUgVElEcyBhcmUgcmVtYXBwZWQgaWRsZSB0YXNrczoKKwkgKi8KKwlpZiAodGlkIDw9IDApCisJCXJldHVybiBpZGxlX3Rhc2soLXRpZCk7CisKKwkvKgorCSAqIGZpbmRfdGFza19ieV9waWRfbnMoKSBkb2VzIG5vdCB0YWtlIHRoZSB0YXNrbGlzdCBsb2NrIGFueW1vcmUKKwkgKiBidXQgaXMgbmljZWx5IFJDVSBsb2NrZWQgLSBoZW5jZSBpcyBhIHByZXR0eSByZXNpbGllbnQKKwkgKiB0aGluZyB0byB1c2U6CisJICovCisJcmV0dXJuIGZpbmRfdGFza19ieV9waWRfbnModGlkLCAmaW5pdF9waWRfbnMpOworfQorCisvKgorICogQ1BVIGRlYnVnIHN0YXRlIGNvbnRyb2w6CisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGtnZGJfd2FpdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjcHU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlrZ2RiX2luZm9bY3B1XS5kZWJ1Z2dlcmluZm8gPSByZWdzOworCWtnZGJfaW5mb1tjcHVdLnRhc2sgPSBjdXJyZW50OworCS8qCisJICogTWFrZSBzdXJlIHRoZSBhYm92ZSBpbmZvIHJlYWNoZXMgdGhlIHByaW1hcnkgQ1BVIGJlZm9yZQorCSAqIG91ciBjcHVfaW5fa2dkYltdIGZsYWcgc2V0dGluZyBkb2VzOgorCSAqLworCXNtcF93bWIoKTsKKwlhdG9taWNfc2V0KCZjcHVfaW5fa2dkYltjcHVdLCAxKTsKKworCS8qIFdhaXQgdGlsbCBwcmltYXJ5IENQVSBpcyBkb25lIHdpdGggZGVidWdnaW5nICovCisJd2hpbGUgKGF0b21pY19yZWFkKCZwYXNzaXZlX2NwdV93YWl0W2NwdV0pKQorCQljcHVfcmVsYXgoKTsKKworCWtnZGJfaW5mb1tjcHVdLmRlYnVnZ2VyaW5mbyA9IE5VTEw7CisJa2dkYl9pbmZvW2NwdV0udGFzayA9IE5VTEw7CisKKwkvKiBmaXggdXAgaGFyZHdhcmUgZGVidWcgcmVnaXN0ZXJzIG9uIGxvY2FsIGNwdSAqLworCWlmIChhcmNoX2tnZGJfb3BzLmNvcnJlY3RfaHdfYnJlYWspCisJCWFyY2hfa2dkYl9vcHMuY29ycmVjdF9od19icmVhaygpOworCisJLyogU2lnbmFsIHRoZSBwcmltYXJ5IENQVSB0aGF0IHdlIGFyZSBkb25lOiAqLworCWF0b21pY19zZXQoJmNwdV9pbl9rZ2RiW2NwdV0sIDApOworCWNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorI2VuZGlmCisKKy8qCisgKiBTb21lIGFyY2hpdGVjdHVyZXMgbmVlZCBjYWNoZSBmbHVzaGVzIHdoZW4gd2Ugc2V0L2NsZWFyIGEKKyAqIGJyZWFrcG9pbnQ6CisgKi8KK3N0YXRpYyB2b2lkIGtnZGJfZmx1c2hfc3dicmVha19hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoIUNBQ0hFX0ZMVVNIX0lTX1NBRkUpCisJCXJldHVybjsKKworCWlmIChjdXJyZW50LT5tbSAmJiBjdXJyZW50LT5tbS0+bW1hcF9jYWNoZSkgeworCQlmbHVzaF9jYWNoZV9yYW5nZShjdXJyZW50LT5tbS0+bW1hcF9jYWNoZSwKKwkJCQkgIGFkZHIsIGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFKTsKKwl9CisJLyogRm9yY2UgZmx1c2ggaW5zdHJ1Y3Rpb24gY2FjaGUgaWYgaXQgd2FzIG91dHNpZGUgdGhlIG1tICovCisJZmx1c2hfaWNhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFKTsKK30KKworLyoKKyAqIFNXIGJyZWFrcG9pbnQgbWFuYWdlbWVudDoKKyAqLworc3RhdGljIGludCBrZ2RiX2FjdGl2YXRlX3N3X2JyZWFrcG9pbnRzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBlcnJvciA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgS0dEQl9NQVhfQlJFQUtQT0lOVFM7IGkrKykgeworCQlpZiAoa2dkYl9icmVha1tpXS5zdGF0ZSAhPSBCUF9TRVQpCisJCQljb250aW51ZTsKKworCQlhZGRyID0ga2dkYl9icmVha1tpXS5icHRfYWRkcjsKKwkJZXJyb3IgPSBrZ2RiX2FyY2hfc2V0X2JyZWFrcG9pbnQoYWRkciwKKwkJCQlrZ2RiX2JyZWFrW2ldLnNhdmVkX2luc3RyKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCWtnZGJfZmx1c2hfc3dicmVha19hZGRyKGFkZHIpOworCQlrZ2RiX2JyZWFrW2ldLnN0YXRlID0gQlBfQUNUSVZFOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrZ2RiX3NldF9zd19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IGVyciA9IGtnZGJfdmFsaWRhdGVfYnJlYWtfYWRkcmVzcyhhZGRyKTsKKwlpbnQgYnJlYWtubyA9IC0xOworCWludCBpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBLR0RCX01BWF9CUkVBS1BPSU5UUzsgaSsrKSB7CisJCWlmICgoa2dkYl9icmVha1tpXS5zdGF0ZSA9PSBCUF9TRVQpICYmCisJCQkJCShrZ2RiX2JyZWFrW2ldLmJwdF9hZGRyID09IGFkZHIpKQorCQkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCWZvciAoaSA9IDA7IGkgPCBLR0RCX01BWF9CUkVBS1BPSU5UUzsgaSsrKSB7CisJCWlmIChrZ2RiX2JyZWFrW2ldLnN0YXRlID09IEJQX1JFTU9WRUQgJiYKKwkJCQkJa2dkYl9icmVha1tpXS5icHRfYWRkciA9PSBhZGRyKSB7CisJCQlicmVha25vID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGJyZWFrbm8gPT0gLTEpIHsKKwkJZm9yIChpID0gMDsgaSA8IEtHREJfTUFYX0JSRUFLUE9JTlRTOyBpKyspIHsKKwkJCWlmIChrZ2RiX2JyZWFrW2ldLnN0YXRlID09IEJQX1VOREVGSU5FRCkgeworCQkJCWJyZWFrbm8gPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGJyZWFrbm8gPT0gLTEpCisJCXJldHVybiAtRTJCSUc7CisKKwlrZ2RiX2JyZWFrW2JyZWFrbm9dLnN0YXRlID0gQlBfU0VUOworCWtnZGJfYnJlYWtbYnJlYWtub10udHlwZSA9IEJQX0JSRUFLUE9JTlQ7CisJa2dkYl9icmVha1ticmVha25vXS5icHRfYWRkciA9IGFkZHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrZ2RiX2RlYWN0aXZhdGVfc3dfYnJlYWtwb2ludHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IGVycm9yID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBLR0RCX01BWF9CUkVBS1BPSU5UUzsgaSsrKSB7CisJCWlmIChrZ2RiX2JyZWFrW2ldLnN0YXRlICE9IEJQX0FDVElWRSkKKwkJCWNvbnRpbnVlOworCQlhZGRyID0ga2dkYl9icmVha1tpXS5icHRfYWRkcjsKKwkJZXJyb3IgPSBrZ2RiX2FyY2hfcmVtb3ZlX2JyZWFrcG9pbnQoYWRkciwKKwkJCQkJa2dkYl9icmVha1tpXS5zYXZlZF9pbnN0cik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKworCQlrZ2RiX2ZsdXNoX3N3YnJlYWtfYWRkcihhZGRyKTsKKwkJa2dkYl9icmVha1tpXS5zdGF0ZSA9IEJQX1NFVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2dkYl9yZW1vdmVfc3dfYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEtHREJfTUFYX0JSRUFLUE9JTlRTOyBpKyspIHsKKwkJaWYgKChrZ2RiX2JyZWFrW2ldLnN0YXRlID09IEJQX1NFVCkgJiYKKwkJCQkoa2dkYl9icmVha1tpXS5icHRfYWRkciA9PSBhZGRyKSkgeworCQkJa2dkYl9icmVha1tpXS5zdGF0ZSA9IEJQX1JFTU9WRUQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworaW50IGtnZGJfaXNyZW1vdmVkYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEtHREJfTUFYX0JSRUFLUE9JTlRTOyBpKyspIHsKKwkJaWYgKChrZ2RiX2JyZWFrW2ldLnN0YXRlID09IEJQX1JFTU9WRUQpICYmCisJCQkJCShrZ2RiX2JyZWFrW2ldLmJwdF9hZGRyID09IGFkZHIpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmVtb3ZlX2FsbF9icmVhayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgZXJyb3I7CisJaW50IGk7CisKKwkvKiBDbGVhciBtZW1vcnkgYnJlYWtwb2ludHMuICovCisJZm9yIChpID0gMDsgaSA8IEtHREJfTUFYX0JSRUFLUE9JTlRTOyBpKyspIHsKKwkJaWYgKGtnZGJfYnJlYWtbaV0uc3RhdGUgIT0gQlBfQUNUSVZFKQorCQkJZ290byBzZXR1bmRlZmluZWQ7CisJCWFkZHIgPSBrZ2RiX2JyZWFrW2ldLmJwdF9hZGRyOworCQllcnJvciA9IGtnZGJfYXJjaF9yZW1vdmVfYnJlYWtwb2ludChhZGRyLAorCQkJCWtnZGJfYnJlYWtbaV0uc2F2ZWRfaW5zdHIpOworCQlpZiAoZXJyb3IpCisJCQlwcmludGsoS0VSTl9FUlIgIktHREI6IGJyZWFrcG9pbnQgcmVtb3ZlIGZhaWxlZDogJWx4XG4iLAorCQkJICAgYWRkcik7CitzZXR1bmRlZmluZWQ6CisJCWtnZGJfYnJlYWtbaV0uc3RhdGUgPSBCUF9VTkRFRklORUQ7CisJfQorCisJLyogQ2xlYXIgaGFyZHdhcmUgYnJlYWtwb2ludHMuICovCisJaWYgKGFyY2hfa2dkYl9vcHMucmVtb3ZlX2FsbF9od19icmVhaykKKwkJYXJjaF9rZ2RiX29wcy5yZW1vdmVfYWxsX2h3X2JyZWFrKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbWFwIG5vcm1hbCB0YXNrcyB0byB0aGVpciByZWFsIFBJRCwgaWRsZSB0YXNrcyB0byAtMSAuLi4gLU5SX0NQVXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNoYWRvd19waWQoaW50IHJlYWxwaWQpCit7CisJaWYgKHJlYWxwaWQpCisJCXJldHVybiByZWFscGlkOworCisJcmV0dXJuIC0xLXJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Cit9CisKK3N0YXRpYyBjaGFyIGdkYm1zZ2J1ZltCVUZNQVggKyAxXTsKKworc3RhdGljIHZvaWQga2dkYl9tc2dfd3JpdGUoY29uc3QgY2hhciAqcywgaW50IGxlbikKK3sKKwljaGFyICpidWZwdHI7CisJaW50IHdjb3VudDsKKwlpbnQgaTsKKworCS8qICdPJ3V0cHV0ICovCisJZ2RibXNnYnVmWzBdID0gJ08nOworCisJLyogRmlsbCBhbmQgc2VuZCBidWZmZXJzLi4uICovCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJYnVmcHRyID0gZ2RibXNnYnVmICsgMTsKKworCQkvKiBDYWxjdWxhdGUgaG93IG1hbnkgdGhpcyB0aW1lICovCisJCWlmICgobGVuIDw8IDEpID4gKEJVRk1BWCAtIDIpKQorCQkJd2NvdW50ID0gKEJVRk1BWCAtIDIpID4+IDE7CisJCWVsc2UKKwkJCXdjb3VudCA9IGxlbjsKKworCQkvKiBQYWNrIGluIGhleCBjaGFycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgd2NvdW50OyBpKyspCisJCQlidWZwdHIgPSBwYWNrX2hleF9ieXRlKGJ1ZnB0ciwgc1tpXSk7CisJCSpidWZwdHIgPSAnXDAnOworCisJCS8qIE1vdmUgdXAgKi8KKwkJcyArPSB3Y291bnQ7CisJCWxlbiAtPSB3Y291bnQ7CisKKwkJLyogV3JpdGUgcGFja2V0ICovCisJCXB1dF9wYWNrZXQoZ2RibXNnYnVmKTsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIHZhbGlkIGtnZGIgSS9PIG1vZHVsZS4gIEFsc28gaWYgbm8KKyAqIGRlYnVnZ2VyIGlzIGF0dGFjaGVkIGEgbWVzc2FnZSBjYW4gYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZSBhYm91dAorICogd2FpdGluZyBmb3IgdGhlIGRlYnVnZ2VyIHRvIGF0dGFjaC4KKyAqCisgKiBUaGUgcHJpbnRfd2FpdCBhcmd1bWVudCBpcyBvbmx5IHRvIGJlIHRydWUgd2hlbiBjYWxsZWQgZnJvbSBpbnNpZGUKKyAqIHRoZSBjb3JlIGtnZGJfaGFuZGxlX2V4Y2VwdGlvbiwgYmVjYXVzZSBpdCB3aWxsIHdhaXQgZm9yIHRoZQorICogZGVidWdnZXIgdG8gYXR0YWNoLgorICovCitzdGF0aWMgaW50IGtnZGJfaW9fcmVhZHkoaW50IHByaW50X3dhaXQpCit7CisJaWYgKCFrZ2RiX2lvX29wcykKKwkJcmV0dXJuIDA7CisJaWYgKGtnZGJfY29ubmVjdGVkKQorCQlyZXR1cm4gMTsKKwlpZiAoYXRvbWljX3JlYWQoJmtnZGJfc2V0dGluZ19icmVha3BvaW50KSkKKwkJcmV0dXJuIDE7CisJaWYgKHByaW50X3dhaXQpCisJCXByaW50ayhLRVJOX0NSSVQgIktHREI6IFdhaXRpbmcgZm9yIHJlbW90ZSBkZWJ1Z2dlclxuIik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBBbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggZ2RiX2NtZCBhcmUgdGhlIHZhcmlvdXMKKyAqIG9wZXJhdGlvbnMgdG8gaW1wbGVtZW50IHRoZSBoYW5kbGVycyBmb3IgdGhlIGdkYnNlcmlhbCBwcm90b2NvbAorICogd2hlcmUgS0dEQiBpcyBjb21tdW5pY2F0aW5nIHdpdGggYW4gZXh0ZXJuYWwgZGVidWdnZXIKKyAqLworCisvKiBIYW5kbGUgdGhlICc/JyBzdGF0dXMgcGFja2V0cyAqLworc3RhdGljIHZvaWQgZ2RiX2NtZF9zdGF0dXMoc3RydWN0IGtnZGJfc3RhdGUgKmtzKQoreworCS8qCisJICogV2Uga25vdyB0aGF0IHRoaXMgcGFja2V0IGlzIG9ubHkgc2VudAorCSAqIGR1cmluZyBpbml0aWFsIGNvbm5lY3QuICBTbyB0byBiZSBzYWZlLAorCSAqIHdlIGNsZWFyIG91dCBvdXIgYnJlYWtwb2ludHMgbm93IGluIGNhc2UKKwkgKiBHREIgaXMgcmVjb25uZWN0aW5nLgorCSAqLworCXJlbW92ZV9hbGxfYnJlYWsoKTsKKworCXJlbWNvbV9vdXRfYnVmZmVyWzBdID0gJ1MnOworCXBhY2tfaGV4X2J5dGUoJnJlbWNvbV9vdXRfYnVmZmVyWzFdLCBrcy0+c2lnbm8pOworfQorCisvKiBIYW5kbGUgdGhlICdnJyBnZXQgcmVnaXN0ZXJzIHJlcXVlc3QgKi8KK3N0YXRpYyB2b2lkIGdkYl9jbWRfZ2V0cmVncyhzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CisJdm9pZCAqbG9jYWxfZGVidWdnZXJpbmZvOworCWludCBpOworCisJdGhyZWFkID0ga2dkYl91c2V0aHJlYWQ7CisJaWYgKCF0aHJlYWQpIHsKKwkJdGhyZWFkID0ga2dkYl9pbmZvW2tzLT5jcHVdLnRhc2s7CisJCWxvY2FsX2RlYnVnZ2VyaW5mbyA9IGtnZGJfaW5mb1trcy0+Y3B1XS5kZWJ1Z2dlcmluZm87CisJfSBlbHNlIHsKKwkJbG9jYWxfZGVidWdnZXJpbmZvID0gTlVMTDsKKwkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQkJLyoKKwkJCSAqIFRyeSB0byBmaW5kIHRoZSB0YXNrIG9uIHNvbWUgb3RoZXIKKwkJCSAqIG9yIHBvc3NpYmx5IHRoaXMgbm9kZSBpZiB3ZSBkbyBub3QKKwkJCSAqIGZpbmQgdGhlIG1hdGNoaW5nIHRhc2sgdGhlbiB3ZSB0cnkKKwkJCSAqIHRvIGFwcHJveGltYXRlIHRoZSByZXN1bHRzLgorCQkJICovCisJCQlpZiAodGhyZWFkID09IGtnZGJfaW5mb1tpXS50YXNrKQorCQkJCWxvY2FsX2RlYnVnZ2VyaW5mbyA9IGtnZGJfaW5mb1tpXS5kZWJ1Z2dlcmluZm87CisJCX0KKwl9CisKKwkvKgorCSAqIEFsbCB0aHJlYWRzIHRoYXQgZG9uJ3QgaGF2ZSBkZWJ1Z2dlcmluZm8gc2hvdWxkIGJlCisJICogaW4gX19zY2hlZHVsZSgpIHNsZWVwaW5nLCBzaW5jZSBhbGwgb3RoZXIgQ1BVcworCSAqIGFyZSBpbiBrZ2RiX3dhaXQsIGFuZCB0aHVzIGhhdmUgZGVidWdnZXJpbmZvLgorCSAqLworCWlmIChsb2NhbF9kZWJ1Z2dlcmluZm8pIHsKKwkJcHRfcmVnc190b19nZGJfcmVncyhnZGJfcmVncywgbG9jYWxfZGVidWdnZXJpbmZvKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQdWxsIHN0dWZmIHNhdmVkIGR1cmluZyBzd2l0Y2hfdG87IG5vdGhpbmcKKwkJICogZWxzZSBpcyBhY2Nlc3NpYmxlIChvciBldmVuIHBhcnRpY3VsYXJseQorCQkgKiByZWxldmFudCkuCisJCSAqCisJCSAqIFRoaXMgc2hvdWxkIGJlIGVub3VnaCBmb3IgYSBzdGFjayB0cmFjZS4KKwkJICovCisJCXNsZWVwaW5nX3RocmVhZF90b19nZGJfcmVncyhnZGJfcmVncywgdGhyZWFkKTsKKwl9CisJa2dkYl9tZW0yaGV4KChjaGFyICopZ2RiX3JlZ3MsIHJlbWNvbV9vdXRfYnVmZmVyLCBOVU1SRUdCWVRFUyk7Cit9CisKKy8qIEhhbmRsZSB0aGUgJ0cnIHNldCByZWdpc3RlcnMgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgZ2RiX2NtZF9zZXRyZWdzKHN0cnVjdCBrZ2RiX3N0YXRlICprcykKK3sKKwlrZ2RiX2hleDJtZW0oJnJlbWNvbV9pbl9idWZmZXJbMV0sIChjaGFyICopZ2RiX3JlZ3MsIE5VTVJFR0JZVEVTKTsKKworCWlmIChrZ2RiX3VzZXRocmVhZCAmJiBrZ2RiX3VzZXRocmVhZCAhPSBjdXJyZW50KSB7CisJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJfSBlbHNlIHsKKwkJZ2RiX3JlZ3NfdG9fcHRfcmVncyhnZGJfcmVncywga3MtPmxpbnV4X3JlZ3MpOworCQlzdHJjcHkocmVtY29tX291dF9idWZmZXIsICJPSyIpOworCX0KK30KKworLyogSGFuZGxlIHRoZSAnbScgbWVtb3J5IHJlYWQgYnl0ZXMgKi8KK3N0YXRpYyB2b2lkIGdkYl9jbWRfbWVtcmVhZChzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJY2hhciAqcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMV07CisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBlcnI7CisKKwlpZiAoa2dkYl9oZXgybG9uZygmcHRyLCAmYWRkcikgPiAwICYmICpwdHIrKyA9PSAnLCcgJiYKKwkJCQkJa2dkYl9oZXgybG9uZygmcHRyLCAmbGVuZ3RoKSA+IDApIHsKKwkJZXJyID0ga2dkYl9tZW0yaGV4KChjaGFyICopYWRkciwgcmVtY29tX291dF9idWZmZXIsIGxlbmd0aCk7CisJCWlmIChlcnIpCisJCQllcnJvcl9wYWNrZXQocmVtY29tX291dF9idWZmZXIsIGVycik7CisJfSBlbHNlIHsKKwkJZXJyb3JfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAtRUlOVkFMKTsKKwl9Cit9CisKKy8qIEhhbmRsZSB0aGUgJ00nIG1lbW9yeSB3cml0ZSBieXRlcyAqLworc3RhdGljIHZvaWQgZ2RiX2NtZF9tZW13cml0ZShzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJaW50IGVyciA9IHdyaXRlX21lbV9tc2coMCk7CisKKwlpZiAoZXJyKQorCQllcnJvcl9wYWNrZXQocmVtY29tX291dF9idWZmZXIsIGVycik7CisJZWxzZQorCQlzdHJjcHkocmVtY29tX291dF9idWZmZXIsICJPSyIpOworfQorCisvKiBIYW5kbGUgdGhlICdYJyBtZW1vcnkgYmluYXJ5IHdyaXRlIGJ5dGVzICovCitzdGF0aWMgdm9pZCBnZGJfY21kX2JpbndyaXRlKHN0cnVjdCBrZ2RiX3N0YXRlICprcykKK3sKKwlpbnQgZXJyID0gd3JpdGVfbWVtX21zZygxKTsKKworCWlmIChlcnIpCisJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgZXJyKTsKKwllbHNlCisJCXN0cmNweShyZW1jb21fb3V0X2J1ZmZlciwgIk9LIik7Cit9CisKKy8qIEhhbmRsZSB0aGUgJ0QnIG9yICdrJywgZGV0YWNoIG9yIGtpbGwgcGFja2V0cyAqLworc3RhdGljIHZvaWQgZ2RiX2NtZF9kZXRhY2hraWxsKHN0cnVjdCBrZ2RiX3N0YXRlICprcykKK3sKKwlpbnQgZXJyb3I7CisKKwkvKiBUaGUgZGV0YWNoIGNhc2UgKi8KKwlpZiAocmVtY29tX2luX2J1ZmZlclswXSA9PSAnRCcpIHsKKwkJZXJyb3IgPSByZW1vdmVfYWxsX2JyZWFrKCk7CisJCWlmIChlcnJvciA8IDApIHsKKwkJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgZXJyb3IpOworCQl9IGVsc2UgeworCQkJc3RyY3B5KHJlbWNvbV9vdXRfYnVmZmVyLCAiT0siKTsKKwkJCWtnZGJfY29ubmVjdGVkID0gMDsKKwkJfQorCQlwdXRfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBBc3N1bWUgdGhlIGtpbGwgY2FzZSwgd2l0aCBubyBleGl0IGNvZGUgY2hlY2tpbmcsCisJCSAqIHRyeWluZyB0byBmb3JjZSBkZXRhY2ggdGhlIGRlYnVnZ2VyOgorCQkgKi8KKwkJcmVtb3ZlX2FsbF9icmVhaygpOworCQlrZ2RiX2Nvbm5lY3RlZCA9IDA7CisJfQorfQorCisvKiBIYW5kbGUgdGhlICdSJyByZWJvb3QgcGFja2V0cyAqLworc3RhdGljIGludCBnZGJfY21kX3JlYm9vdChzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJLyogRm9yIG5vdywgb25seSBob25vciBSMCAqLworCWlmIChzdHJjbXAocmVtY29tX2luX2J1ZmZlciwgIlIwIikgPT0gMCkgeworCQlwcmludGsoS0VSTl9DUklUICJFeGVjdXRpbmcgZW1lcmdlbmN5IHJlYm9vdFxuIik7CisJCXN0cmNweShyZW1jb21fb3V0X2J1ZmZlciwgIk9LIik7CisJCXB1dF9wYWNrZXQocmVtY29tX291dF9idWZmZXIpOworCisJCS8qCisJCSAqIEV4ZWN1dGlvbiBzaG91bGQgbm90IHJldHVybiBmcm9tCisJCSAqIG1hY2hpbmVfZW1lcmdlbmN5X3Jlc3RhcnQoKQorCQkgKi8KKwkJbWFjaGluZV9lbWVyZ2VuY3lfcmVzdGFydCgpOworCQlrZ2RiX2Nvbm5lY3RlZCA9IDA7CisKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBIYW5kbGUgdGhlICdxJyBxdWVyeSBwYWNrZXRzICovCitzdGF0aWMgdm9pZCBnZGJfY21kX3F1ZXJ5KHN0cnVjdCBrZ2RiX3N0YXRlICprcykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKKwl1bnNpZ25lZCBjaGFyIHRocmVmWzhdOworCWNoYXIgKnB0cjsKKwlpbnQgaTsKKworCXN3aXRjaCAocmVtY29tX2luX2J1ZmZlclsxXSkgeworCWNhc2UgJ3MnOgorCWNhc2UgJ2YnOgorCQlpZiAobWVtY21wKHJlbWNvbV9pbl9idWZmZXIgKyAyLCAiVGhyZWFkSW5mbyIsIDEwKSkgeworCQkJZXJyb3JfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAtRUlOVkFMKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlbWNvbV9pbl9idWZmZXJbMV0gPT0gJ2YnKQorCQkJa3MtPnRocmVhZGlkID0gMTsKKworCQlyZW1jb21fb3V0X2J1ZmZlclswXSA9ICdtJzsKKwkJcHRyID0gcmVtY29tX291dF9idWZmZXIgKyAxOworCisJCWZvciAoaSA9IDA7IGkgPCAxNzsga3MtPnRocmVhZGlkKyspIHsKKwkJCXRocmVhZCA9IGdldHRocmVhZChrcy0+bGludXhfcmVncywga3MtPnRocmVhZGlkKTsKKwkJCWlmICh0aHJlYWQpIHsKKwkJCQlpbnRfdG9fdGhyZWFkcmVmKHRocmVmLCBrcy0+dGhyZWFkaWQpOworCQkJCXBhY2tfdGhyZWFkaWQocHRyLCB0aHJlZik7CisJCQkJcHRyICs9IEJVRl9USFJFQURfSURfU0laRTsKKwkJCQkqKHB0cisrKSA9ICcsJzsKKwkJCQlpKys7CisJCQl9CisJCX0KKwkJKigtLXB0cikgPSAnXDAnOworCQlicmVhazsKKworCWNhc2UgJ0MnOgorCQkvKiBDdXJyZW50IHRocmVhZCBpZCAqLworCQlzdHJjcHkocmVtY29tX291dF9idWZmZXIsICJRQyIpOworCQlrcy0+dGhyZWFkaWQgPSBzaGFkb3dfcGlkKGN1cnJlbnQtPnBpZCk7CisJCWludF90b190aHJlYWRyZWYodGhyZWYsIGtzLT50aHJlYWRpZCk7CisJCXBhY2tfdGhyZWFkaWQocmVtY29tX291dF9idWZmZXIgKyAyLCB0aHJlZik7CisJCWJyZWFrOworCWNhc2UgJ1QnOgorCQlpZiAobWVtY21wKHJlbWNvbV9pbl9idWZmZXIgKyAxLCAiVGhyZWFkRXh0cmFJbmZvLCIsIDE2KSkgeworCQkJZXJyb3JfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAtRUlOVkFMKTsKKwkJCWJyZWFrOworCQl9CisJCWtzLT50aHJlYWRpZCA9IDA7CisJCXB0ciA9IHJlbWNvbV9pbl9idWZmZXIgKyAxNzsKKwkJa2dkYl9oZXgybG9uZygmcHRyLCAma3MtPnRocmVhZGlkKTsKKwkJaWYgKCFnZXR0aHJlYWQoa3MtPmxpbnV4X3JlZ3MsIGtzLT50aHJlYWRpZCkpIHsKKwkJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoa3MtPnRocmVhZGlkID4gMCkgeworCQkJa2dkYl9tZW0yaGV4KGdldHRocmVhZChrcy0+bGludXhfcmVncywKKwkJCQkJa3MtPnRocmVhZGlkKS0+Y29tbSwKKwkJCQkJcmVtY29tX291dF9idWZmZXIsIDE2KTsKKwkJfSBlbHNlIHsKKwkJCXN0YXRpYyBjaGFyIHRtcHN0clsyMyArIEJVRl9USFJFQURfSURfU0laRV07CisKKwkJCXNwcmludGYodG1wc3RyLCAiU2hhZG93IHRhc2sgJWQgZm9yIHBpZCAwIiwKKwkJCQkJKGludCkoLWtzLT50aHJlYWRpZC0xKSk7CisJCQlrZ2RiX21lbTJoZXgodG1wc3RyLCByZW1jb21fb3V0X2J1ZmZlciwgc3RybGVuKHRtcHN0cikpOworCQl9CisJCWJyZWFrOworCX0KK30KKworLyogSGFuZGxlIHRoZSAnSCcgdGFzayBxdWVyeSBwYWNrZXRzICovCitzdGF0aWMgdm9pZCBnZGJfY21kX3Rhc2soc3RydWN0IGtnZGJfc3RhdGUgKmtzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCWNoYXIgKnB0cjsKKworCXN3aXRjaCAocmVtY29tX2luX2J1ZmZlclsxXSkgeworCWNhc2UgJ2cnOgorCQlwdHIgPSAmcmVtY29tX2luX2J1ZmZlclsyXTsKKwkJa2dkYl9oZXgybG9uZygmcHRyLCAma3MtPnRocmVhZGlkKTsKKwkJdGhyZWFkID0gZ2V0dGhyZWFkKGtzLT5saW51eF9yZWdzLCBrcy0+dGhyZWFkaWQpOworCQlpZiAoIXRocmVhZCAmJiBrcy0+dGhyZWFkaWQgPiAwKSB7CisJCQllcnJvcl9wYWNrZXQocmVtY29tX291dF9idWZmZXIsIC1FSU5WQUwpOworCQkJYnJlYWs7CisJCX0KKwkJa2dkYl91c2V0aHJlYWQgPSB0aHJlYWQ7CisJCWtzLT5rZ2RiX3VzZXRocmVhZGlkID0ga3MtPnRocmVhZGlkOworCQlzdHJjcHkocmVtY29tX291dF9idWZmZXIsICJPSyIpOworCQlicmVhazsKKwljYXNlICdjJzoKKwkJcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMl07CisJCWtnZGJfaGV4MmxvbmcoJnB0ciwgJmtzLT50aHJlYWRpZCk7CisJCWlmICgha3MtPnRocmVhZGlkKSB7CisJCQlrZ2RiX2NvbnR0aHJlYWQgPSBOVUxMOworCQl9IGVsc2UgeworCQkJdGhyZWFkID0gZ2V0dGhyZWFkKGtzLT5saW51eF9yZWdzLCBrcy0+dGhyZWFkaWQpOworCQkJaWYgKCF0aHJlYWQgJiYga3MtPnRocmVhZGlkID4gMCkgeworCQkJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlrZ2RiX2NvbnR0aHJlYWQgPSB0aHJlYWQ7CisJCX0KKwkJc3RyY3B5KHJlbWNvbV9vdXRfYnVmZmVyLCAiT0siKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBIYW5kbGUgdGhlICdUJyB0aHJlYWQgcXVlcnkgcGFja2V0cyAqLworc3RhdGljIHZvaWQgZ2RiX2NtZF90aHJlYWQoc3RydWN0IGtnZGJfc3RhdGUgKmtzKQoreworCWNoYXIgKnB0ciA9ICZyZW1jb21faW5fYnVmZmVyWzFdOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCisJa2dkYl9oZXgybG9uZygmcHRyLCAma3MtPnRocmVhZGlkKTsKKwl0aHJlYWQgPSBnZXR0aHJlYWQoa3MtPmxpbnV4X3JlZ3MsIGtzLT50aHJlYWRpZCk7CisJaWYgKHRocmVhZCkKKwkJc3RyY3B5KHJlbWNvbV9vdXRfYnVmZmVyLCAiT0siKTsKKwllbHNlCisJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7Cit9CisKKy8qIEhhbmRsZSB0aGUgJ3onIG9yICdaJyBicmVha3BvaW50IHJlbW92ZSBvciBzZXQgcGFja2V0cyAqLworc3RhdGljIHZvaWQgZ2RiX2NtZF9icmVhayhzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJLyoKKwkgKiBTaW5jZSBHREItNS4zLCBpdCdzIGJlZW4gZHJhZnRlZCB0aGF0ICcwJyBpcyBhIHNvZnR3YXJlCisJICogYnJlYWtwb2ludCwgJzEnIGlzIGEgaGFyZHdhcmUgYnJlYWtwb2ludCwgc28gbGV0J3MgZG8gdGhhdC4KKwkgKi8KKwljaGFyICpicHRfdHlwZSA9ICZyZW1jb21faW5fYnVmZmVyWzFdOworCWNoYXIgKnB0ciA9ICZyZW1jb21faW5fYnVmZmVyWzJdOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGFyY2hfa2dkYl9vcHMuc2V0X2h3X2JyZWFrcG9pbnQgJiYgKmJwdF90eXBlID49ICcxJykgeworCQkvKiBVbnN1cHBvcnRlZCAqLworCQlpZiAoKmJwdF90eXBlID4gJzQnKQorCQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmICgqYnB0X3R5cGUgIT0gJzAnICYmICpicHRfdHlwZSAhPSAnMScpCisJCQkvKiBVbnN1cHBvcnRlZC4gKi8KKwkJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRlc3QgaWYgdGhpcyBpcyBhIGhhcmR3YXJlIGJyZWFrcG9pbnQsIGFuZAorCSAqIGlmIHdlIHN1cHBvcnQgaXQ6CisJICovCisJaWYgKCpicHRfdHlwZSA9PSAnMScgJiYgIShhcmNoX2tnZGJfb3BzLmZsYWdzICYgS0dEQl9IV19CUkVBS1BPSU5UKSkKKwkJLyogVW5zdXBwb3J0ZWQuICovCisJCXJldHVybjsKKworCWlmICgqKHB0cisrKSAhPSAnLCcpIHsKKwkJZXJyb3JfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAtRUlOVkFMKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWtnZGJfaGV4MmxvbmcoJnB0ciwgJmFkZHIpKSB7CisJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJCXJldHVybjsKKwl9CisJaWYgKCoocHRyKyspICE9ICcsJyB8fAorCQkha2dkYl9oZXgybG9uZygmcHRyLCAmbGVuZ3RoKSkgeworCQllcnJvcl9wYWNrZXQocmVtY29tX291dF9idWZmZXIsIC1FSU5WQUwpOworCQlyZXR1cm47CisJfQorCisJaWYgKHJlbWNvbV9pbl9idWZmZXJbMF0gPT0gJ1onICYmICpicHRfdHlwZSA9PSAnMCcpCisJCWVycm9yID0ga2dkYl9zZXRfc3dfYnJlYWsoYWRkcik7CisJZWxzZSBpZiAocmVtY29tX2luX2J1ZmZlclswXSA9PSAneicgJiYgKmJwdF90eXBlID09ICcwJykKKwkJZXJyb3IgPSBrZ2RiX3JlbW92ZV9zd19icmVhayhhZGRyKTsKKwllbHNlIGlmIChyZW1jb21faW5fYnVmZmVyWzBdID09ICdaJykKKwkJZXJyb3IgPSBhcmNoX2tnZGJfb3BzLnNldF9od19icmVha3BvaW50KGFkZHIsCisJCQkoaW50KWxlbmd0aCwgKmJwdF90eXBlIC0gJzAnKTsKKwllbHNlIGlmIChyZW1jb21faW5fYnVmZmVyWzBdID09ICd6JykKKwkJZXJyb3IgPSBhcmNoX2tnZGJfb3BzLnJlbW92ZV9od19icmVha3BvaW50KGFkZHIsCisJCQkoaW50KSBsZW5ndGgsICpicHRfdHlwZSAtICcwJyk7CisKKwlpZiAoZXJyb3IgPT0gMCkKKwkJc3RyY3B5KHJlbWNvbV9vdXRfYnVmZmVyLCAiT0siKTsKKwllbHNlCisJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgZXJyb3IpOworfQorCisvKiBIYW5kbGUgdGhlICdDJyBzaWduYWwgLyBleGNlcHRpb24gcGFzc2luZyBwYWNrZXRzICovCitzdGF0aWMgaW50IGdkYl9jbWRfZXhjZXB0aW9uX3Bhc3Moc3RydWN0IGtnZGJfc3RhdGUgKmtzKQoreworCS8qIEMwOSA9PSBwYXNzIGV4Y2VwdGlvbgorCSAqIEMxNSA9PSBkZXRhY2gga2dkYiwgcGFzcyBleGNlcHRpb24KKwkgKi8KKwlpZiAocmVtY29tX2luX2J1ZmZlclsxXSA9PSAnMCcgJiYgcmVtY29tX2luX2J1ZmZlclsyXSA9PSAnOScpIHsKKworCQlrcy0+cGFzc19leGNlcHRpb24gPSAxOworCQlyZW1jb21faW5fYnVmZmVyWzBdID0gJ2MnOworCisJfSBlbHNlIGlmIChyZW1jb21faW5fYnVmZmVyWzFdID09ICcxJyAmJiByZW1jb21faW5fYnVmZmVyWzJdID09ICc1JykgeworCisJCWtzLT5wYXNzX2V4Y2VwdGlvbiA9IDE7CisJCXJlbWNvbV9pbl9idWZmZXJbMF0gPSAnRCc7CisJCXJlbW92ZV9hbGxfYnJlYWsoKTsKKwkJa2dkYl9jb25uZWN0ZWQgPSAwOworCQlyZXR1cm4gMTsKKworCX0gZWxzZSB7CisJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJCXJldHVybiAwOworCX0KKworCS8qIEluZGljYXRlIGZhbGwgdGhyb3VnaCAqLworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYWxsIGdkYnNlcmlhbCBjb21tYW5kIHByb2Nlc2luZworICovCitzdGF0aWMgaW50IGdkYl9zZXJpYWxfc3R1YihzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJaW50IGVycm9yID0gMDsKKwlpbnQgdG1wOworCisJLyogQ2xlYXIgdGhlIG91dCBidWZmZXIuICovCisJbWVtc2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAwLCBzaXplb2YocmVtY29tX291dF9idWZmZXIpKTsKKworCWlmIChrZ2RiX2Nvbm5lY3RlZCkgeworCQl1bnNpZ25lZCBjaGFyIHRocmVmWzhdOworCQljaGFyICpwdHI7CisKKwkJLyogUmVwbHkgdG8gaG9zdCB0aGF0IGFuIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgKi8KKwkJcHRyID0gcmVtY29tX291dF9idWZmZXI7CisJCSpwdHIrKyA9ICdUJzsKKwkJcHRyID0gcGFja19oZXhfYnl0ZShwdHIsIGtzLT5zaWdubyk7CisJCXB0ciArPSBzdHJsZW4oc3RyY3B5KHB0ciwgInRocmVhZDoiKSk7CisJCWludF90b190aHJlYWRyZWYodGhyZWYsIHNoYWRvd19waWQoY3VycmVudC0+cGlkKSk7CisJCXB0ciA9IHBhY2tfdGhyZWFkaWQocHRyLCB0aHJlZik7CisJCSpwdHIrKyA9ICc7JzsKKwkJcHV0X3BhY2tldChyZW1jb21fb3V0X2J1ZmZlcik7CisJfQorCisJa2dkYl91c2V0aHJlYWQgPSBrZ2RiX2luZm9ba3MtPmNwdV0udGFzazsKKwlrcy0+a2dkYl91c2V0aHJlYWRpZCA9IHNoYWRvd19waWQoa2dkYl9pbmZvW2tzLT5jcHVdLnRhc2stPnBpZCk7CisJa3MtPnBhc3NfZXhjZXB0aW9uID0gMDsKKworCXdoaWxlICgxKSB7CisJCWVycm9yID0gMDsKKworCQkvKiBDbGVhciB0aGUgb3V0IGJ1ZmZlci4gKi8KKwkJbWVtc2V0KHJlbWNvbV9vdXRfYnVmZmVyLCAwLCBzaXplb2YocmVtY29tX291dF9idWZmZXIpKTsKKworCQlnZXRfcGFja2V0KHJlbWNvbV9pbl9idWZmZXIpOworCisJCXN3aXRjaCAocmVtY29tX2luX2J1ZmZlclswXSkgeworCQljYXNlICc/JzogLyogZ2Ric2VyaWFsIHN0YXR1cyAqLworCQkJZ2RiX2NtZF9zdGF0dXMoa3MpOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOiAvKiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBDUFUgcmVnaXN0ZXJzICovCisJCQlnZGJfY21kX2dldHJlZ3Moa3MpOworCQkJYnJlYWs7CisJCWNhc2UgJ0cnOiAvKiBzZXQgdGhlIHZhbHVlIG9mIHRoZSBDUFUgcmVnaXN0ZXJzIC0gcmV0dXJuIE9LICovCisJCQlnZGJfY21kX3NldHJlZ3Moa3MpOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOiAvKiBtQUEuLkFBLExMTEwgIFJlYWQgTExMTCBieXRlcyBhdCBhZGRyZXNzIEFBLi5BQSAqLworCQkJZ2RiX2NtZF9tZW1yZWFkKGtzKTsKKwkJCWJyZWFrOworCQljYXNlICdNJzogLyogTUFBLi5BQSxMTExMOiBXcml0ZSBMTExMIGJ5dGVzIGF0IGFkZHJlc3MgQUEuLkFBICovCisJCQlnZGJfY21kX21lbXdyaXRlKGtzKTsKKwkJCWJyZWFrOworCQljYXNlICdYJzogLyogWEFBLi5BQSxMTExMOiBXcml0ZSBMTExMIGJ5dGVzIGF0IGFkZHJlc3MgQUEuLkFBICovCisJCQlnZGJfY21kX2JpbndyaXRlKGtzKTsKKwkJCWJyZWFrOworCQkJLyoga2lsbCBvciBkZXRhY2guIEtHREIgc2hvdWxkIHRyZWF0IHRoaXMgbGlrZSBhCisJCQkgKiBjb250aW51ZS4KKwkJCSAqLworCQljYXNlICdEJzogLyogRGVidWdnZXIgZGV0YWNoICovCisJCWNhc2UgJ2snOiAvKiBEZWJ1Z2dlciBkZXRhY2ggdmlhIGtpbGwgKi8KKwkJCWdkYl9jbWRfZGV0YWNoa2lsbChrcyk7CisJCQlnb3RvIGRlZmF1bHRfaGFuZGxlOworCQljYXNlICdSJzogLyogUmVib290ICovCisJCQlpZiAoZ2RiX2NtZF9yZWJvb3Qoa3MpKQorCQkJCWdvdG8gZGVmYXVsdF9oYW5kbGU7CisJCQlicmVhazsKKwkJY2FzZSAncSc6IC8qIHF1ZXJ5IGNvbW1hbmQgKi8KKwkJCWdkYl9jbWRfcXVlcnkoa3MpOworCQkJYnJlYWs7CisJCWNhc2UgJ0gnOiAvKiB0YXNrIHJlbGF0ZWQgKi8KKwkJCWdkYl9jbWRfdGFzayhrcyk7CisJCQlicmVhazsKKwkJY2FzZSAnVCc6IC8qIFF1ZXJ5IHRocmVhZCBzdGF0dXMgKi8KKwkJCWdkYl9jbWRfdGhyZWFkKGtzKTsKKwkJCWJyZWFrOworCQljYXNlICd6JzogLyogQnJlYWsgcG9pbnQgcmVtb3ZlICovCisJCWNhc2UgJ1onOiAvKiBCcmVhayBwb2ludCBzZXQgKi8KKwkJCWdkYl9jbWRfYnJlYWsoa3MpOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOiAvKiBFeGNlcHRpb24gcGFzc2luZyAqLworCQkJdG1wID0gZ2RiX2NtZF9leGNlcHRpb25fcGFzcyhrcyk7CisJCQlpZiAodG1wID4gMCkKKwkJCQlnb3RvIGRlZmF1bHRfaGFuZGxlOworCQkJaWYgKHRtcCA9PSAwKQorCQkJCWJyZWFrOworCQkJLyogRmFsbCB0aHJvdWdoIG9uIHRtcCA8IDAgKi8KKwkJY2FzZSAnYyc6IC8qIENvbnRpbnVlIHBhY2tldCAqLworCQljYXNlICdzJzogLyogU2luZ2xlIHN0ZXAgcGFja2V0ICovCisJCQlpZiAoa2dkYl9jb250dGhyZWFkICYmIGtnZGJfY29udHRocmVhZCAhPSBjdXJyZW50KSB7CisJCQkJLyogQ2FuJ3Qgc3dpdGNoIHRocmVhZHMgaW4ga2dkYiAqLworCQkJCWVycm9yX3BhY2tldChyZW1jb21fb3V0X2J1ZmZlciwgLUVJTlZBTCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlrZ2RiX2FjdGl2YXRlX3N3X2JyZWFrcG9pbnRzKCk7CisJCQkvKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBwcm9jZXNzaW5nICovCisJCWRlZmF1bHQ6CitkZWZhdWx0X2hhbmRsZToKKwkJCWVycm9yID0ga2dkYl9hcmNoX2hhbmRsZV9leGNlcHRpb24oa3MtPmV4X3ZlY3RvciwKKwkJCQkJCWtzLT5zaWdubywKKwkJCQkJCWtzLT5lcnJfY29kZSwKKwkJCQkJCXJlbWNvbV9pbl9idWZmZXIsCisJCQkJCQlyZW1jb21fb3V0X2J1ZmZlciwKKwkJCQkJCWtzLT5saW51eF9yZWdzKTsKKwkJCS8qCisJCQkgKiBMZWF2ZSBjbWQgcHJvY2Vzc2luZyBvbiBlcnJvciwgZGV0YWNoLAorCQkJICoga2lsbCwgY29udGludWUsIG9yIHNpbmdsZSBzdGVwLgorCQkJICovCisJCQlpZiAoZXJyb3IgPj0gMCB8fCByZW1jb21faW5fYnVmZmVyWzBdID09ICdEJyB8fAorCQkJICAgIHJlbWNvbV9pbl9idWZmZXJbMF0gPT0gJ2snKSB7CisJCQkJZXJyb3IgPSAwOworCQkJCWdvdG8ga2dkYl9leGl0OworCQkJfQorCisJCX0KKworCQkvKiByZXBseSB0byB0aGUgcmVxdWVzdCAqLworCQlwdXRfcGFja2V0KHJlbWNvbV9vdXRfYnVmZmVyKTsKKwl9CisKK2tnZGJfZXhpdDoKKwlpZiAoa3MtPnBhc3NfZXhjZXB0aW9uKQorCQllcnJvciA9IDE7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGtnZGJfcmVlbnRlcl9jaGVjayhzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaWYgKGF0b21pY19yZWFkKCZrZ2RiX2FjdGl2ZSkgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBQYW5pYyBvbiByZWN1cnNpdmUgZGVidWdnZXIgY2FsbHM6ICovCisJZXhjZXB0aW9uX2xldmVsKys7CisJYWRkciA9IGtnZGJfYXJjaF9wYyhrcy0+ZXhfdmVjdG9yLCBrcy0+bGludXhfcmVncyk7CisJa2dkYl9kZWFjdGl2YXRlX3N3X2JyZWFrcG9pbnRzKCk7CisKKwkvKgorCSAqIElmIHRoZSBicmVhayBwb2ludCByZW1vdmVkIG9rIGF0IHRoZSBwbGFjZSBleGNlcHRpb24KKwkgKiBvY2N1cnJlZCwgdHJ5IHRvIHJlY292ZXIgYW5kIHByaW50IGEgd2FybmluZyB0byB0aGUgZW5kCisJICogdXNlciBiZWNhdXNlIHRoZSB1c2VyIHBsYW50ZWQgYSBicmVha3BvaW50IGluIGEgcGxhY2UgdGhhdAorCSAqIEtHREIgbmVlZHMgaW4gb3JkZXIgdG8gZnVuY3Rpb24uCisJICovCisJaWYgKGtnZGJfcmVtb3ZlX3N3X2JyZWFrKGFkZHIpID09IDApIHsKKwkJZXhjZXB0aW9uX2xldmVsID0gMDsKKwkJa2dkYl9za2lwZXhjZXB0aW9uKGtzLT5leF92ZWN0b3IsIGtzLT5saW51eF9yZWdzKTsKKwkJa2dkYl9hY3RpdmF0ZV9zd19icmVha3BvaW50cygpOworCQlwcmludGsoS0VSTl9DUklUICJLR0RCOiByZS1lbnRlciBlcnJvcjogYnJlYWtwb2ludCByZW1vdmVkICVseFxuIiwKKwkJCWFkZHIpOworCQlXQVJOX09OX09OQ0UoMSk7CisKKwkJcmV0dXJuIDE7CisJfQorCXJlbW92ZV9hbGxfYnJlYWsoKTsKKwlrZ2RiX3NraXBleGNlcHRpb24oa3MtPmV4X3ZlY3Rvciwga3MtPmxpbnV4X3JlZ3MpOworCisJaWYgKGV4Y2VwdGlvbl9sZXZlbCA+IDEpIHsKKwkJZHVtcF9zdGFjaygpOworCQlwYW5pYygiUmVjdXJzaXZlIGVudHJ5IHRvIGRlYnVnZ2VyIik7CisJfQorCisJcHJpbnRrKEtFUk5fQ1JJVCAiS0dEQjogcmUtZW50ZXIgZXhjZXB0aW9uOiBBTEwgYnJlYWtwb2ludHMga2lsbGVkXG4iKTsKKwlkdW1wX3N0YWNrKCk7CisJcGFuaWMoIlJlY3Vyc2l2ZSBlbnRyeSB0byBkZWJ1Z2dlciIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBrZ2RiX2hhbmRsZV9leGNlcHRpb24oKSAtIG1haW4gZW50cnkgcG9pbnQgZnJvbSBhIGtlcm5lbCBleGNlcHRpb24KKyAqCisgKiBMb2NraW5nIGhpZXJhcmNoeToKKyAqCWludGVyZmFjZSBsb2NrcywgaWYgYW55IChiZWdpbl9zZXNzaW9uKQorICoJa2dkYiBsb2NrIChrZ2RiX2FjdGl2ZSkKKyAqLworaW50CitrZ2RiX2hhbmRsZV9leGNlcHRpb24oaW50IGV2ZWN0b3IsIGludCBzaWdubywgaW50IGVjb2RlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga2dkYl9zdGF0ZSBrZ2RiX3ZhcjsKKwlzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MgPSAma2dkYl92YXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyb3IgPSAwOworCWludCBpLCBjcHU7CisKKwlrcy0+Y3B1CQkJPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWtzLT5leF92ZWN0b3IJCT0gZXZlY3RvcjsKKwlrcy0+c2lnbm8JCT0gc2lnbm87CisJa3MtPmV4X3ZlY3RvcgkJPSBldmVjdG9yOworCWtzLT5lcnJfY29kZQkJPSBlY29kZTsKKwlrcy0+a2dkYl91c2V0aHJlYWRpZAk9IDA7CisJa3MtPmxpbnV4X3JlZ3MJCT0gcmVnczsKKworCWlmIChrZ2RiX3JlZW50ZXJfY2hlY2soa3MpKQorCQlyZXR1cm4gMDsgLyogT3VjaCwgZG91YmxlIGV4Y2VwdGlvbiAhICovCisKK2FjcXVpcmVsb2NrOgorCS8qCisJICogSW50ZXJydXB0cyB3aWxsIGJlIHJlc3RvcmVkIGJ5IHRoZSAndHJhcCByZXR1cm4nIGNvZGUsIGV4Y2VwdCB3aGVuCisJICogc2luZ2xlIHN0ZXBwaW5nLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIEFjcXVpcmUgdGhlIGtnZGJfYWN0aXZlIGxvY2s6CisJICovCisJd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZrZ2RiX2FjdGl2ZSwgLTEsIGNwdSkgIT0gLTEpCisJCWNwdV9yZWxheCgpOworCisJLyoKKwkgKiBEbyBub3Qgc3RhcnQgdGhlIGRlYnVnZ2VyIGNvbm5lY3Rpb24gb24gdGhpcyBDUFUgaWYgdGhlIGxhc3QKKwkgKiBpbnN0YW5jZSBvZiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgd2FudGVkIHRvIGNvbWUgaW50byB0aGUKKwkgKiBkZWJ1Z2dlciBvbiBhIGRpZmZlcmVudCBDUFUgdmlhIGEgc2luZ2xlIHN0ZXAKKwkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmtnZGJfY3B1X2RvaW5nX3NpbmdsZV9zdGVwKSAhPSAtMSAmJgorCSAgICBhdG9taWNfcmVhZCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0ZXApICE9IGNwdSkgeworCisJCWF0b21pY19zZXQoJmtnZGJfYWN0aXZlLCAtMSk7CisJCWNsb2Nrc291cmNlX3RvdWNoX3dhdGNoZG9nKCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlnb3RvIGFjcXVpcmVsb2NrOworCX0KKworCWlmICgha2dkYl9pb19yZWFkeSgxKSkgeworCQllcnJvciA9IDE7CisJCWdvdG8ga2dkYl9yZXN0b3JlOyAvKiBObyBJL08gY29ubmVjdGlvbiwgc28gcmVzdW1lIHRoZSBzeXN0ZW0gKi8KKwl9CisKKwkvKgorCSAqIERvbid0IGVudGVyIGlmIHdlIGhhdmUgaGl0IGEgcmVtb3ZlZCBicmVha3BvaW50LgorCSAqLworCWlmIChrZ2RiX3NraXBleGNlcHRpb24oa3MtPmV4X3ZlY3Rvciwga3MtPmxpbnV4X3JlZ3MpKQorCQlnb3RvIGtnZGJfcmVzdG9yZTsKKworCS8qIENhbGwgdGhlIEkvTyBkcml2ZXIncyBwcmVfZXhjZXB0aW9uIHJvdXRpbmUgKi8KKwlpZiAoa2dkYl9pb19vcHMtPnByZV9leGNlcHRpb24pCisJCWtnZGJfaW9fb3BzLT5wcmVfZXhjZXB0aW9uKCk7CisKKwlrZ2RiX2luZm9ba3MtPmNwdV0uZGVidWdnZXJpbmZvID0ga3MtPmxpbnV4X3JlZ3M7CisJa2dkYl9pbmZvW2tzLT5jcHVdLnRhc2sgPSBjdXJyZW50OworCisJa2dkYl9kaXNhYmxlX2h3X2RlYnVnKGtzLT5saW51eF9yZWdzKTsKKworCS8qCisJICogR2V0IHRoZSBwYXNzaXZlIENQVSBsb2NrIHdoaWNoIHdpbGwgaG9sZCBhbGwgdGhlIG5vbi1wcmltYXJ5CisJICogQ1BVIGluIGEgc3BpbiBzdGF0ZSB3aGlsZSB0aGUgZGVidWdnZXIgaXMgYWN0aXZlCisJICovCisJaWYgKCFrZ2RiX3NpbmdsZV9zdGVwIHx8ICFrZ2RiX2NvbnR0aHJlYWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKKwkJCWF0b21pY19zZXQoJnBhc3NpdmVfY3B1X3dhaXRbaV0sIDEpOworCX0KKworCS8qCisJICogc3Bpbl9sb2NrIGNvZGUgaXMgZ29vZCBlbm91Z2ggYXMgYSBiYXJyaWVyIHNvIHdlIGRvbid0CisJICogbmVlZCBvbmUgaGVyZToKKwkgKi8KKwlhdG9taWNfc2V0KCZjcHVfaW5fa2dkYltrcy0+Y3B1XSwgMSk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJLyogU2lnbmFsIHRoZSBvdGhlciBDUFVzIHRvIGVudGVyIGtnZGJfd2FpdCgpICovCisJaWYgKCgha2dkYl9zaW5nbGVfc3RlcCB8fCAha2dkYl9jb250dGhyZWFkKSAmJiBrZ2RiX2RvX3JvdW5kdXApCisJCWtnZGJfcm91bmR1cF9jcHVzKGZsYWdzKTsKKyNlbmRpZgorCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgb3RoZXIgQ1BVcyB0byBiZSBub3RpZmllZCBhbmQgYmUgd2FpdGluZyBmb3IgdXM6CisJICovCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCXdoaWxlICghYXRvbWljX3JlYWQoJmNwdV9pbl9rZ2RiW2ldKSkKKwkJCWNwdV9yZWxheCgpOworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCB0aGUgcHJpbWFyeSBwcm9jZXNzb3IgaXMgY29tcGxldGVseQorCSAqIGluIHRoZSBkZWJ1Z2dlciBhbmQgYWxsIHNlY29uZGFyeSBDUFVzIGFyZSBxdWllc2NlbnQKKwkgKi8KKwlrZ2RiX3Bvc3RfcHJpbWFyeV9jb2RlKGtzLT5saW51eF9yZWdzLCBrcy0+ZXhfdmVjdG9yLCBrcy0+ZXJyX2NvZGUpOworCWtnZGJfZGVhY3RpdmF0ZV9zd19icmVha3BvaW50cygpOworCWtnZGJfc2luZ2xlX3N0ZXAgPSAwOworCWtnZGJfY29udHRocmVhZCA9IE5VTEw7CisJZXhjZXB0aW9uX2xldmVsID0gMDsKKworCS8qIFRhbGsgdG8gZGVidWdnZXIgd2l0aCBnZGJzZXJpYWwgcHJvdG9jb2wgKi8KKwllcnJvciA9IGdkYl9zZXJpYWxfc3R1Yihrcyk7CisKKwkvKiBDYWxsIHRoZSBJL08gZHJpdmVyJ3MgcG9zdF9leGNlcHRpb24gcm91dGluZSAqLworCWlmIChrZ2RiX2lvX29wcy0+cG9zdF9leGNlcHRpb24pCisJCWtnZGJfaW9fb3BzLT5wb3N0X2V4Y2VwdGlvbigpOworCisJa2dkYl9pbmZvW2tzLT5jcHVdLmRlYnVnZ2VyaW5mbyA9IE5VTEw7CisJa2dkYl9pbmZvW2tzLT5jcHVdLnRhc2sgPSBOVUxMOworCWF0b21pY19zZXQoJmNwdV9pbl9rZ2RiW2tzLT5jcHVdLCAwKTsKKworCWlmICgha2dkYl9zaW5nbGVfc3RlcCB8fCAha2dkYl9jb250dGhyZWFkKSB7CisJCWZvciAoaSA9IE5SX0NQVVMtMTsgaSA+PSAwOyBpLS0pCisJCQlhdG9taWNfc2V0KCZwYXNzaXZlX2NwdV93YWl0W2ldLCAwKTsKKwkJLyoKKwkJICogV2FpdCB0aWxsIGFsbCB0aGUgQ1BVcyBoYXZlIHF1aXQKKwkJICogZnJvbSB0aGUgZGVidWdnZXIuCisJCSAqLworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJCXdoaWxlIChhdG9taWNfcmVhZCgmY3B1X2luX2tnZGJbaV0pKQorCQkJCWNwdV9yZWxheCgpOworCQl9CisJfQorCitrZ2RiX3Jlc3RvcmU6CisJLyogRnJlZSBrZ2RiX2FjdGl2ZSAqLworCWF0b21pY19zZXQoJmtnZGJfYWN0aXZlLCAtMSk7CisJY2xvY2tzb3VyY2VfdG91Y2hfd2F0Y2hkb2coKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBrZ2RiX25taWNhbGxiYWNrKGludCBjcHUsIHZvaWQgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmICghYXRvbWljX3JlYWQoJmNwdV9pbl9rZ2RiW2NwdV0pICYmCisJCQlhdG9taWNfcmVhZCgma2dkYl9hY3RpdmUpICE9IGNwdSAmJgorCQkJYXRvbWljX3JlYWQoJmNwdV9pbl9rZ2RiW2F0b21pY19yZWFkKCZrZ2RiX2FjdGl2ZSldKSkgeworCQlrZ2RiX3dhaXQoKHN0cnVjdCBwdF9yZWdzICopcmVncyk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCXJldHVybiAxOworfQorCit2b2lkIGtnZGJfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBJZiB3ZSdyZSBkZWJ1Z2dpbmcsIG9yIEtHREIgaGFzIG5vdCBjb25uZWN0ZWQsIGRvbid0IHRyeQorCSAqIGFuZCBwcmludC4gKi8KKwlpZiAoIWtnZGJfY29ubmVjdGVkIHx8IGF0b21pY19yZWFkKCZrZ2RiX2FjdGl2ZSkgIT0gLTEpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlrZ2RiX21zZ193cml0ZShzLCBjb3VudCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUga2dkYmNvbnMgPSB7CisJLm5hbWUJCT0gImtnZGIiLAorCS53cml0ZQkJPSBrZ2RiX2NvbnNvbGVfd3JpdGUsCisJLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiB8IENPTl9FTkFCTEVELAorCS5pbmRleAkJPSAtMSwKK307CisKKyNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKK3N0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9nZGIoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpZiAoIWtnZGJfaW9fb3BzKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIkVSUk9SOiBObyBLR0RCIEkvTyBtb2R1bGUgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWtnZGJfY29ubmVjdGVkKQorCQlwcmludGsoS0VSTl9DUklUICJFbnRlcmluZyBLR0RCXG4iKTsKKworCWtnZGJfYnJlYWtwb2ludCgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9nZGJfb3AgPSB7CisJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfZ2RiLAorCS5oZWxwX21zZwk9ICJHZGIiLAorCS5hY3Rpb25fbXNnCT0gIkdEQiIsCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGtnZGJfcmVnaXN0ZXJfY2FsbGJhY2tzKHZvaWQpCit7CisJaWYgKCFrZ2RiX2lvX21vZHVsZV9yZWdpc3RlcmVkKSB7CisJCWtnZGJfaW9fbW9kdWxlX3JlZ2lzdGVyZWQgPSAxOworCQlrZ2RiX2FyY2hfaW5pdCgpOworI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQorCQlyZWdpc3Rlcl9zeXNycV9rZXkoJ2cnLCAmc3lzcnFfZ2RiX29wKTsKKyNlbmRpZgorCQlpZiAoa2dkYl91c2VfY29uICYmICFrZ2RiX2Nvbl9yZWdpc3RlcmVkKSB7CisJCQlyZWdpc3Rlcl9jb25zb2xlKCZrZ2RiY29ucyk7CisJCQlrZ2RiX2Nvbl9yZWdpc3RlcmVkID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQga2dkYl91bnJlZ2lzdGVyX2NhbGxiYWNrcyh2b2lkKQoreworCS8qCisJICogV2hlbiB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIEtHREIgc2hvdWxkIHVucmVnaXN0ZXIgZnJvbSB0aGUKKwkgKiBwYW5pYyBoYW5kbGVyIGFuZCBjbGVhbiB1cCwgbWFraW5nIHN1cmUgaXQgaXMgbm90IGhhbmRsaW5nIGFueQorCSAqIGJyZWFrIGV4Y2VwdGlvbnMgYXQgdGhlIHRpbWUuCisJICovCisJaWYgKGtnZGJfaW9fbW9kdWxlX3JlZ2lzdGVyZWQpIHsKKwkJa2dkYl9pb19tb2R1bGVfcmVnaXN0ZXJlZCA9IDA7CisJCWtnZGJfYXJjaF9leGl0KCk7CisjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCisJCXVucmVnaXN0ZXJfc3lzcnFfa2V5KCdnJywgJnN5c3JxX2dkYl9vcCk7CisjZW5kaWYKKwkJaWYgKGtnZGJfY29uX3JlZ2lzdGVyZWQpIHsKKwkJCXVucmVnaXN0ZXJfY29uc29sZSgma2dkYmNvbnMpOworCQkJa2dkYl9jb25fcmVnaXN0ZXJlZCA9IDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGtnZGJfaW5pdGlhbF9icmVha3BvaW50KHZvaWQpCit7CisJa2dkYl9icmVha19hc2FwID0gMDsKKworCXByaW50ayhLRVJOX0NSSVQgImtnZGI6IFdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gZnJvbSByZW1vdGUgZ2RiLi4uXG4iKTsKKwlrZ2RiX2JyZWFrcG9pbnQoKTsKK30KKworLyoqCisgKglrZ2RiX3JlZ2lzdGVyX2lvX21vZHVsZSAtIHJlZ2lzdGVyIEtHREIgSU8gbW9kdWxlCisgKglAbmV3X2tnZGJfaW9fb3BzOiB0aGUgaW8gb3BzIHZlY3RvcgorICoKKyAqCVJlZ2lzdGVyIGl0IHdpdGggdGhlIEtHREIgY29yZS4KKyAqLworaW50IGtnZGJfcmVnaXN0ZXJfaW9fbW9kdWxlKHN0cnVjdCBrZ2RiX2lvICpuZXdfa2dkYl9pb19vcHMpCit7CisJaW50IGVycjsKKworCXNwaW5fbG9jaygma2dkYl9yZWdpc3RyYXRpb25fbG9jayk7CisKKwlpZiAoa2dkYl9pb19vcHMpIHsKKwkJc3Bpbl91bmxvY2soJmtnZGJfcmVnaXN0cmF0aW9uX2xvY2spOworCisJCXByaW50ayhLRVJOX0VSUiAia2dkYjogQW5vdGhlciBJL08gZHJpdmVyIGlzIGFscmVhZHkgIgorCQkJCSJyZWdpc3RlcmVkIHdpdGggS0dEQi5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChuZXdfa2dkYl9pb19vcHMtPmluaXQpIHsKKwkJZXJyID0gbmV3X2tnZGJfaW9fb3BzLT5pbml0KCk7CisJCWlmIChlcnIpIHsKKwkJCXNwaW5fdW5sb2NrKCZrZ2RiX3JlZ2lzdHJhdGlvbl9sb2NrKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlrZ2RiX2lvX29wcyA9IG5ld19rZ2RiX2lvX29wczsKKworCXNwaW5fdW5sb2NrKCZrZ2RiX3JlZ2lzdHJhdGlvbl9sb2NrKTsKKworCXByaW50ayhLRVJOX0lORk8gImtnZGI6IFJlZ2lzdGVyZWQgSS9PIGRyaXZlciAlcy5cbiIsCisJICAgICAgIG5ld19rZ2RiX2lvX29wcy0+bmFtZSk7CisKKwkvKiBBcm0gS0dEQiBub3cuICovCisJa2dkYl9yZWdpc3Rlcl9jYWxsYmFja3MoKTsKKworCWlmIChrZ2RiX2JyZWFrX2FzYXApCisJCWtnZGJfaW5pdGlhbF9icmVha3BvaW50KCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGtnZGJfcmVnaXN0ZXJfaW9fbW9kdWxlKTsKKworLyoqCisgKglra2dkYl91bnJlZ2lzdGVyX2lvX21vZHVsZSAtIHVucmVnaXN0ZXIgS0dEQiBJTyBtb2R1bGUKKyAqCUBvbGRfa2dkYl9pb19vcHM6IHRoZSBpbyBvcHMgdmVjdG9yCisgKgorICoJVW5yZWdpc3RlciBpdCB3aXRoIHRoZSBLR0RCIGNvcmUuCisgKi8KK3ZvaWQga2dkYl91bnJlZ2lzdGVyX2lvX21vZHVsZShzdHJ1Y3Qga2dkYl9pbyAqb2xkX2tnZGJfaW9fb3BzKQoreworCUJVR19PTihrZ2RiX2Nvbm5lY3RlZCk7CisKKwkvKgorCSAqIEtHREIgaXMgbm8gbG9uZ2VyIGFibGUgdG8gY29tbXVuaWNhdGUgb3V0LCBzbworCSAqIHVucmVnaXN0ZXIgb3VyIGNhbGxiYWNrcyBhbmQgcmVzZXQgc3RhdGUuCisJICovCisJa2dkYl91bnJlZ2lzdGVyX2NhbGxiYWNrcygpOworCisJc3Bpbl9sb2NrKCZrZ2RiX3JlZ2lzdHJhdGlvbl9sb2NrKTsKKworCVdBUk5fT05fT05DRShrZ2RiX2lvX29wcyAhPSBvbGRfa2dkYl9pb19vcHMpOworCWtnZGJfaW9fb3BzID0gTlVMTDsKKworCXNwaW5fdW5sb2NrKCZrZ2RiX3JlZ2lzdHJhdGlvbl9sb2NrKTsKKworCXByaW50ayhLRVJOX0lORk8KKwkJImtnZGI6IFVucmVnaXN0ZXJlZCBJL08gZHJpdmVyICVzLCBkZWJ1Z2dlciBkaXNhYmxlZC5cbiIsCisJCW9sZF9rZ2RiX2lvX29wcy0+bmFtZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrZ2RiX3VucmVnaXN0ZXJfaW9fbW9kdWxlKTsKKworLyoqCisgKiBrZ2RiX2JyZWFrcG9pbnQgLSBnZW5lcmF0ZSBicmVha3BvaW50IGV4Y2VwdGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBhIGJyZWFrcG9pbnQgZXhjZXB0aW9uLiAgSXQgaXMgdXNlZCBhdCB0aGUKKyAqIGJlZ2lubmluZyBvZiBhIHByb2dyYW0gdG8gc3luYyB1cCB3aXRoIGEgZGVidWdnZXIgYW5kIGNhbiBiZSB1c2VkCisgKiBvdGhlcndpc2UgYXMgYSBxdWljayBtZWFucyB0byBzdG9wIHByb2dyYW0gZXhlY3V0aW9uIGFuZCAiYnJlYWsiIGludG8KKyAqIHRoZSBkZWJ1Z2dlci4KKyAqLwordm9pZCBrZ2RiX2JyZWFrcG9pbnQodm9pZCkKK3sKKwlhdG9taWNfc2V0KCZrZ2RiX3NldHRpbmdfYnJlYWtwb2ludCwgMSk7CisJd21iKCk7IC8qIFN5bmMgcG9pbnQgYmVmb3JlIGJyZWFrcG9pbnQgKi8KKwlhcmNoX2tnZGJfYnJlYWtwb2ludCgpOworCXdtYigpOyAvKiBTeW5jIHBvaW50IGFmdGVyIGJyZWFrcG9pbnQgKi8KKwlhdG9taWNfc2V0KCZrZ2RiX3NldHRpbmdfYnJlYWtwb2ludCwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrZ2RiX2JyZWFrcG9pbnQpOworCitzdGF0aWMgaW50IF9faW5pdCBvcHRfa2dkYl93YWl0KGNoYXIgKnN0cikKK3sKKwlrZ2RiX2JyZWFrX2FzYXAgPSAxOworCisJaWYgKGtnZGJfaW9fbW9kdWxlX3JlZ2lzdGVyZWQpCisJCWtnZGJfaW5pdGlhbF9icmVha3BvaW50KCk7CisKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oImtnZGJ3YWl0Iiwgb3B0X2tnZGJfd2FpdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwva21vZC5jIGIva2VybmVsL2ttb2QuYwppbmRleCAyMmJlM2ZmLi5lMjc2NDA0IDEwMDY0NAotLS0gYS9rZXJuZWwva21vZC5jCisrKyBiL2tlcm5lbC9rbW9kLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCX0KIAogCS8qIFdlIGNhbiBydW4gYW55d2hlcmUsIHVubGlrZSBvdXIgcGFyZW50IGtldmVudGQoKS4gKi8KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIENQVV9NQVNLX0FMTCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgQ1BVX01BU0tfQUxMX1BUUik7CiAKIAkvKgogCSAqIE91ciBwYXJlbnQgaXMga2V2ZW50ZCwgd2hpY2ggcnVucyB3aXRoIGVsZXZhdGVkIHNjaGVkdWxpbmcgcHJpb3JpdHkuCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCA3YTg2ZTY0Li5mY2ZiNTgwIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ5OCwyNyArNDk4LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBJZiB3ZSBoYXZlIGEgc3ltYm9sX25hbWUgYXJndW1lbnQsIGxvb2sgaXQgdXAgYW5kIGFkZCB0aGUgb2Zmc2V0IGZpZWxkCisgKiB0byBpdC4gVGhpcyB3YXksIHdlIGNhbiBzcGVjaWZ5IGEgcmVsYXRpdmUgYWRkcmVzcyB0byBhIHN5bWJvbC4KKyAqLworc3RhdGljIGtwcm9iZV9vcGNvZGVfdCBfX2twcm9iZXMgKmtwcm9iZV9hZGRyKHN0cnVjdCBrcHJvYmUgKnApCit7CisJa3Byb2JlX29wY29kZV90ICphZGRyID0gcC0+YWRkcjsKKwlpZiAocC0+c3ltYm9sX25hbWUpIHsKKwkJaWYgKGFkZHIpCisJCQlyZXR1cm4gTlVMTDsKKwkJa3Byb2JlX2xvb2t1cF9uYW1lKHAtPnN5bWJvbF9uYW1lLCBhZGRyKTsKKwl9CisKKwlpZiAoIWFkZHIpCisJCXJldHVybiBOVUxMOworCXJldHVybiAoa3Byb2JlX29wY29kZV90ICopKCgoY2hhciAqKWFkZHIpICsgcC0+b2Zmc2V0KTsKK30KKwogc3RhdGljIGludCBfX2twcm9iZXMgX19yZWdpc3Rlcl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwKIAl1bnNpZ25lZCBsb25nIGNhbGxlZF9mcm9tKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBrcHJvYmUgKm9sZF9wOwogCXN0cnVjdCBtb2R1bGUgKnByb2JlZF9tb2Q7CisJa3Byb2JlX29wY29kZV90ICphZGRyOwogCi0JLyoKLQkgKiBJZiB3ZSBoYXZlIGEgc3ltYm9sX25hbWUgYXJndW1lbnQgbG9vayBpdCB1cCwKLQkgKiBhbmQgYWRkIGl0IHRvIHRoZSBhZGRyZXNzLiAgVGhhdCB3YXkgdGhlIGFkZHIKLQkgKiBmaWVsZCBjYW4gZWl0aGVyIGJlIGdsb2JhbCBvciByZWxhdGl2ZSB0byBhIHN5bWJvbC4KLQkgKi8KLQlpZiAocC0+c3ltYm9sX25hbWUpIHsKLQkJaWYgKHAtPmFkZHIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJa3Byb2JlX2xvb2t1cF9uYW1lKHAtPnN5bWJvbF9uYW1lLCBwLT5hZGRyKTsKLQl9Ci0KLQlpZiAoIXAtPmFkZHIpCisJYWRkciA9IGtwcm9iZV9hZGRyKHApOworCWlmICghYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcC0+YWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikoKChjaGFyICopcC0+YWRkcikrIHAtPm9mZnNldCk7CisJcC0+YWRkciA9IGFkZHI7CiAKIAlpZiAoIWtlcm5lbF90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpIHx8CiAJICAgIGluX2twcm9iZXNfZnVuY3Rpb25zKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSkKQEAgLTY3OCw4ICs2ODcsNyBAQAogCXVucmVnaXN0ZXJfa3Byb2JlKCZqcC0+a3ApOwogfQogCi0jaWZkZWYgQVJDSF9TVVBQT1JUU19LUkVUUFJPQkVTCi0KKyNpZmRlZiBDT05GSUdfS1JFVFBST0JFUwogLyoKICAqIFRoaXMga3Byb2JlIHByZV9oYW5kbGVyIGlzIHJlZ2lzdGVyZWQgd2l0aCBldmVyeSBrcmV0cHJvYmUuIFdoZW4gcHJvYmUKICAqIGhpdHMgaXQgd2lsbCBzZXQgdXAgdGhlIHJldHVybiBwcm9iZS4KQEAgLTcyMiwxMiArNzMwLDEyIEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqaW5zdDsKIAlpbnQgaTsKLQl2b2lkICphZGRyID0gcnAtPmtwLmFkZHI7CisJdm9pZCAqYWRkcjsKIAogCWlmIChrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemUpIHsKLQkJaWYgKGFkZHIgPT0gTlVMTCkKLQkJCWtwcm9iZV9sb29rdXBfbmFtZShycC0+a3Auc3ltYm9sX25hbWUsIGFkZHIpOwotCQlhZGRyICs9IHJwLT5rcC5vZmZzZXQ7CisJCWFkZHIgPSBrcHJvYmVfYWRkcigmcnAtPmtwKTsKKwkJaWYgKCFhZGRyKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJZm9yIChpID0gMDsga3JldHByb2JlX2JsYWNrbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykgewogCQkJaWYgKGtyZXRwcm9iZV9ibGFja2xpc3RbaV0uYWRkciA9PSBhZGRyKQpAQCAtNzY5LDggKzc3Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2Vsc2UgLyogQVJDSF9TVVBQT1JUU19LUkVUUFJPQkVTICovCi0KKyNlbHNlIC8qIENPTkZJR19LUkVUUFJPQkVTICovCiBpbnQgX19rcHJvYmVzIHJlZ2lzdGVyX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlICpycCkKIHsKIAlyZXR1cm4gLUVOT1NZUzsKQEAgLTc4MSw4ICs3ODgsNyBAQAogewogCXJldHVybiAwOwogfQotCi0jZW5kaWYgLyogQVJDSF9TVVBQT1JUU19LUkVUUFJPQkVTICovCisjZW5kaWYgLyogQ09ORklHX0tSRVRQUk9CRVMgKi8KIAogdm9pZCBfX2twcm9iZXMgdW5yZWdpc3Rlcl9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnApCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCAwYWM4ODc4Li45MmNmNjkzIDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNkZWZpbmUgS1RIUkVBRF9OSUNFX0xFVkVMICgtNSkKIApAQCAtMTgwLDYgKzE3OSw3IEBACiAJd2FpdF90YXNrX2luYWN0aXZlKGspOwogCXNldF90YXNrX2NwdShrLCBjcHUpOwogCWstPmNwdXNfYWxsb3dlZCA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJay0+cnQubnJfY3B1c19hbGxvd2VkID0gMTsKIH0KIEVYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2xhdGVuY3l0b3AuYyBiL2tlcm5lbC9sYXRlbmN5dG9wLmMKaW5kZXggYjRlM2M4NS4uN2M3NGRhYiAxMDA2NDQKLS0tIGEva2VybmVsL2xhdGVuY3l0b3AuYworKysgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCkBAIC02NCw4ICs2NCw4IEBACiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhMUjsgaSsrKSB7Ci0JCWludCBxOwotCQlpbnQgc2FtZSA9IDE7CisJCWludCBxLCBzYW1lID0gMTsKKwogCQkvKiBOb3RoaW5nIHN0b3JlZDogKi8KIAkJaWYgKCFsYXRlbmN5X3JlY29yZFtpXS5iYWNrdHJhY2VbMF0pIHsKIAkJCWlmIChmaXJzdG5vbm51bGwgPiBpKQpAQCAtNzMsMTIgKzczLDE1IEBACiAJCQljb250aW51ZTsKIAkJfQogCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7Ci0JCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlW3FdICE9Ci0JCQkJbGF0LT5iYWNrdHJhY2VbcV0pCisJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC0+YmFja3RyYWNlW3FdOworCisJCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlW3FdICE9IHJlY29yZCkgewogCQkJCXNhbWUgPSAwOwotCQkJaWYgKHNhbWUgJiYgbGF0LT5iYWNrdHJhY2VbcV0gPT0gMCkKIAkJCQlicmVhazsKLQkJCWlmIChzYW1lICYmIGxhdC0+YmFja3RyYWNlW3FdID09IFVMT05HX01BWCkKKwkJCX0KKworCQkJLyogMCBhbmQgVUxPTkdfTUFYIGVudHJpZXMgbWVhbiBlbmQgb2YgYmFja3RyYWNlOiAqLworCQkJaWYgKHJlY29yZCA9PSAwIHx8IHJlY29yZCA9PSBVTE9OR19NQVgpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNhbWUpIHsKQEAgLTE0MywxNCArMTQ2LDE4IEBACiAJZm9yIChpID0gMDsgaSA8IExUX1NBVkVDT1VOVCA7IGkrKykgewogCQlzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQgKm15bGF0OwogCQlpbnQgc2FtZSA9IDE7CisKIAkJbXlsYXQgPSAmdHNrLT5sYXRlbmN5X3JlY29yZFtpXTsKIAkJZm9yIChxID0gMCA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSCA7IHErKykgewotCQkJaWYgKG15bGF0LT5iYWNrdHJhY2VbcV0gIT0KLQkJCQlsYXQuYmFja3RyYWNlW3FdKQorCQkJdW5zaWduZWQgbG9uZyByZWNvcmQgPSBsYXQuYmFja3RyYWNlW3FdOworCisJCQlpZiAobXlsYXQtPmJhY2t0cmFjZVtxXSAhPSByZWNvcmQpIHsKIAkJCQlzYW1lID0gMDsKLQkJCWlmIChzYW1lICYmIGxhdC5iYWNrdHJhY2VbcV0gPT0gMCkKIAkJCQlicmVhazsKLQkJCWlmIChzYW1lICYmIGxhdC5iYWNrdHJhY2VbcV0gPT0gVUxPTkdfTUFYKQorCQkJfQorCisJCQkvKiAwIGFuZCBVTE9OR19NQVggZW50cmllcyBtZWFuIGVuZCBvZiBiYWNrdHJhY2U6ICovCisJCQlpZiAocmVjb3JkID09IDAgfHwgcmVjb3JkID09IFVMT05HX01BWCkKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoc2FtZSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMzU3NDM3OS4uODFhNGU0YSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC03NzksNiArNzc5LDEwIEBACiAJICogcGFyYWxsZWwgd2Fsa2luZyBvZiB0aGUgaGFzaC1saXN0IHNhZmU6CiAJICovCiAJbGlzdF9hZGRfdGFpbF9yY3UoJmNsYXNzLT5oYXNoX2VudHJ5LCBoYXNoX2hlYWQpOworCS8qCisJICogQWRkIGl0IHRvIHRoZSBnbG9iYWwgbGlzdCBvZiBjbGFzc2VzOgorCSAqLworCWxpc3RfYWRkX3RhaWxfcmN1KCZjbGFzcy0+bG9ja19lbnRyeSwgJmFsbF9sb2NrX2NsYXNzZXMpOwogCiAJaWYgKHZlcmJvc2UoY2xhc3MpKSB7CiAJCWdyYXBoX3VubG9jaygpOwpAQCAtMjI4MiwxMCArMjI4Niw2IEBACiAJCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAJY2FzZSBMT0NLX1VTRUQ6Ci0JCS8qCi0JCSAqIEFkZCBpdCB0byB0aGUgZ2xvYmFsIGxpc3Qgb2YgY2xhc3NlczoKLQkJICovCi0JCWxpc3RfYWRkX3RhaWxfcmN1KCZ0aGlzLT5jbGFzcy0+bG9ja19lbnRyeSwgJmFsbF9sb2NrX2NsYXNzZXMpOwogCQlkZWJ1Z19hdG9taWNfZGVjKCZucl91bnVzZWRfbG9ja3MpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEva2VybmVsL21hcmtlci5jIGIva2VybmVsL21hcmtlci5jCmluZGV4IGM0YzJjZDguLjAwNWI5NTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tYXJrZXIuYworKysgYi9rZXJuZWwvbWFya2VyLmMKQEAgLTYxLDggKzYxLDggQEAKIAlpbnQgcmVmY291bnQ7CS8qIE51bWJlciBvZiB0aW1lcyBhcm1lZC4gMCBpZiBkaXNhcm1lZC4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCXZvaWQgKm9sZHB0cjsKLQljaGFyIHJjdV9wZW5kaW5nOjE7Ci0JY2hhciBwdHlwZToxOworCXVuc2lnbmVkIGNoYXIgcmN1X3BlbmRpbmc6MTsKKwl1bnNpZ25lZCBjaGFyIHB0eXBlOjE7CiAJY2hhciBuYW1lWzBdOwkvKiBDb250YWlucyBuYW1lJ1wwJ2Zvcm1hdCdcMCcgKi8KIH07CiAKQEAgLTEwNCwxOCArMTA0LDE4IEBACiAJY2hhciBwdHlwZTsKIAogCS8qCi0JICogZGlzYWJsaW5nIHByZWVtcHRpb24gdG8gbWFrZSBzdXJlIHRoZSB0ZWFyZG93biBvZiB0aGUgY2FsbGJhY2tzIGNhbgotCSAqIGJlIGRvbmUgY29ycmVjdGx5IHdoZW4gdGhleSBhcmUgaW4gbW9kdWxlcyBhbmQgdGhleSBpbnN1cmUgUkNVIHJlYWQKLQkgKiBjb2hlcmVuY3kuCisJICogcHJlZW1wdF9kaXNhYmxlIGRvZXMgdHdvIHRoaW5ncyA6IGRpc2FibGluZyBwcmVlbXB0aW9uIHRvIG1ha2Ugc3VyZQorCSAqIHRoZSB0ZWFyZG93biBvZiB0aGUgY2FsbGJhY2tzIGNhbiBiZSBkb25lIGNvcnJlY3RseSB3aGVuIHRoZXkgYXJlIGluCisJICogbW9kdWxlcyBhbmQgdGhleSBpbnN1cmUgUkNVIHJlYWQgY29oZXJlbmN5LgogCSAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwotCXB0eXBlID0gQUNDRVNTX09OQ0UobWRhdGEtPnB0eXBlKTsKKwlwdHlwZSA9IG1kYXRhLT5wdHlwZTsKIAlpZiAobGlrZWx5KCFwdHlwZSkpIHsKIAkJbWFya2VyX3Byb2JlX2Z1bmMgKmZ1bmM7CiAJCS8qIE11c3QgcmVhZCB0aGUgcHR5cGUgYmVmb3JlIHB0ci4gVGhleSBhcmUgbm90IGRhdGEgZGVwZW5kYW50LAogCQkgKiBzbyB3ZSBwdXQgYW4gZXhwbGljaXQgc21wX3JtYigpIGhlcmUuICovCiAJCXNtcF9ybWIoKTsKLQkJZnVuYyA9IEFDQ0VTU19PTkNFKG1kYXRhLT5zaW5nbGUuZnVuYyk7CisJCWZ1bmMgPSBtZGF0YS0+c2luZ2xlLmZ1bmM7CiAJCS8qIE11c3QgcmVhZCB0aGUgcHRyIGJlZm9yZSBwcml2YXRlIGRhdGEuIFRoZXkgYXJlIG5vdCBkYXRhCiAJCSAqIGRlcGVuZGFudCwgc28gd2UgcHV0IGFuIGV4cGxpY2l0IHNtcF9ybWIoKSBoZXJlLiAqLwogCQlzbXBfcm1iKCk7CkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJICogaW4gdGhlIGZhc3QgcGF0aCwgc28gcHV0IHRoZSBleHBsaWNpdCBiYXJyaWVyIGhlcmUuCiAJCSAqLwogCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKLQkJbXVsdGkgPSBBQ0NFU1NfT05DRShtZGF0YS0+bXVsdGkpOworCQltdWx0aSA9IG1kYXRhLT5tdWx0aTsKIAkJZm9yIChpID0gMDsgbXVsdGlbaV0uZnVuYzsgaSsrKSB7CiAJCQl2YV9zdGFydChhcmdzLCBmbXQpOwogCQkJbXVsdGlbaV0uZnVuYyhtdWx0aVtpXS5wcm9iZV9wcml2YXRlLCBjYWxsX3ByaXZhdGUsIGZtdCwKQEAgLTE2MSwxMyArMTYxLDEzIEBACiAJY2hhciBwdHlwZTsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCXB0eXBlID0gQUNDRVNTX09OQ0UobWRhdGEtPnB0eXBlKTsKKwlwdHlwZSA9IG1kYXRhLT5wdHlwZTsKIAlpZiAobGlrZWx5KCFwdHlwZSkpIHsKIAkJbWFya2VyX3Byb2JlX2Z1bmMgKmZ1bmM7CiAJCS8qIE11c3QgcmVhZCB0aGUgcHR5cGUgYmVmb3JlIHB0ci4gVGhleSBhcmUgbm90IGRhdGEgZGVwZW5kYW50LAogCQkgKiBzbyB3ZSBwdXQgYW4gZXhwbGljaXQgc21wX3JtYigpIGhlcmUuICovCiAJCXNtcF9ybWIoKTsKLQkJZnVuYyA9IEFDQ0VTU19PTkNFKG1kYXRhLT5zaW5nbGUuZnVuYyk7CisJCWZ1bmMgPSBtZGF0YS0+c2luZ2xlLmZ1bmM7CiAJCS8qIE11c3QgcmVhZCB0aGUgcHRyIGJlZm9yZSBwcml2YXRlIGRhdGEuIFRoZXkgYXJlIG5vdCBkYXRhCiAJCSAqIGRlcGVuZGFudCwgc28gd2UgcHV0IGFuIGV4cGxpY2l0IHNtcF9ybWIoKSBoZXJlLiAqLwogCQlzbXBfcm1iKCk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAkJICogaW4gdGhlIGZhc3QgcGF0aCwgc28gcHV0IHRoZSBleHBsaWNpdCBiYXJyaWVyIGhlcmUuCiAJCSAqLwogCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKLQkJbXVsdGkgPSBBQ0NFU1NfT05DRShtZGF0YS0+bXVsdGkpOworCQltdWx0aSA9IG1kYXRhLT5tdWx0aTsKIAkJZm9yIChpID0gMDsgbXVsdGlbaV0uZnVuYzsgaSsrKQogCQkJbXVsdGlbaV0uZnVuYyhtdWx0aVtpXS5wcm9iZV9wcml2YXRlLCBjYWxsX3ByaXZhdGUsIGZtdCwKIAkJCQkmYXJncyk7CkBAIC01NTEsOSArNTUxLDkgQEAKIAogLyoKICAqIERpc2FibGUgYSBtYXJrZXIgYW5kIGl0cyBwcm9iZSBjYWxsYmFjay4KLSAqIE5vdGU6IG9ubHkgYWZ0ZXIgYSBzeW5jaHJvbml6ZV9zY2hlZCgpIGlzc3VlZCBhZnRlciBzZXR0aW5nIGVsZW0tPmNhbGwgdG8gdGhlCi0gKiBlbXB0eSBmdW5jdGlvbiBpbnN1cmVzIHRoYXQgdGhlIG9yaWdpbmFsIGNhbGxiYWNrIGlzIG5vdCB1c2VkIGFueW1vcmUuIFRoaXMKLSAqIGluc3VyZWQgYnkgcHJlZW1wdGlvbiBkaXNhYmxpbmcgYXJvdW5kIHRoZSBjYWxsIHNpdGUuCisgKiBOb3RlOiBvbmx5IHdhaXRpbmcgYW4gUkNVIHBlcmlvZCBhZnRlciBzZXR0aW5nIGVsZW0tPmNhbGwgdG8gdGhlIGVtcHR5CisgKiBmdW5jdGlvbiBpbnN1cmVzIHRoYXQgdGhlIG9yaWdpbmFsIGNhbGxiYWNrIGlzIG5vdCB1c2VkIGFueW1vcmUuIFRoaXMgaW5zdXJlZAorICogYnkgcHJlZW1wdF9kaXNhYmxlIGFyb3VuZCB0aGUgY2FsbCBzaXRlLgogICovCiBzdGF0aWMgdm9pZCBkaXNhYmxlX21hcmtlcihzdHJ1Y3QgbWFya2VyICplbGVtKQogewpAQCAtNTY1LDggKzU2NSw4IEBACiAJZWxlbS0+cHR5cGUgPSAwOwkvKiBzaW5nbGUgcHJvYmUgKi8KIAkvKgogCSAqIExlYXZlIHRoZSBwcml2YXRlIGRhdGEgYW5kIGlkIHRoZXJlLCBiZWNhdXNlIHJlbW92YWwgaXMgcmFjeSBhbmQKLQkgKiBzaG91bGQgYmUgZG9uZSBvbmx5IGFmdGVyIGEgc3luY2hyb25pemVfc2NoZWQoKS4gVGhlc2UgYXJlIG5ldmVyIHVzZWQKLQkgKiB1bnRpbCB0aGUgbmV4dCBpbml0aWFsaXphdGlvbiBhbnl3YXkuCisJICogc2hvdWxkIGJlIGRvbmUgb25seSBhZnRlciBhbiBSQ1UgcGVyaW9kLiBUaGVzZSBhcmUgbmV2ZXIgdXNlZCB1bnRpbAorCSAqIHRoZSBuZXh0IGluaXRpYWxpemF0aW9uIGFueXdheS4KIAkgKi8KIH0KIApAQCAtNjAxLDkgKzYwMSw2IEBACiAKIC8qCiAgKiBVcGRhdGUgcHJvYmVzLCByZW1vdmluZyB0aGUgZmF1bHR5IHByb2Jlcy4KLSAqIElzc3VlcyBhIHN5bmNocm9uaXplX3NjaGVkKCkgd2hlbiBubyByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBwYXNzZWQKLSAqIGFzIHBhcmFtZXRlciBpcyBmb3VuZCBpbiB0aGUgcHJvYmVzIHNvIHRoZSBwcm9iZSBtb2R1bGUgY2FuIGJlCi0gKiBzYWZlbHkgdW5sb2FkZWQgZnJvbSBub3cgb24uCiAgKgogICogSW50ZXJuYWwgY2FsbGJhY2sgb25seSBjaGFuZ2VkIGJlZm9yZSB0aGUgZmlyc3QgcHJvYmUgaXMgY29ubmVjdGVkIHRvIGl0LgogICogU2luZ2xlIHByb2JlIHByaXZhdGUgZGF0YSBjYW4gb25seSBiZSBjaGFuZ2VkIG9uIDAgLT4gMSBhbmQgMiAtPiAxCkBAIC02NzQsNiArNjcxLDkgQEAKIAllbnRyeS0+cmN1X3BlbmRpbmcgPSAxOwogCS8qIHdyaXRlIHJjdV9wZW5kaW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBSQ1UgY2FsbGJhY2sgKi8KIAlzbXBfd21iKCk7CisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVCisJc3luY2hyb25pemVfc2NoZWQoKTsJLyogVW50aWwgd2UgaGF2ZSB0aGUgY2FsbF9yY3Vfc2NoZWQoKSAqLworI2VuZGlmCiAJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIGZyZWVfb2xkX2Nsb3N1cmUpOwogZW5kOgogCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7CkBAIC02OTgsMTQgKzY5OCwxMiBAQAogewogCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBtYXJrZXJfcHJvYmVfY2xvc3VyZSAqb2xkOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAtRU5PRU5UOwogCiAJbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7CiAJZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOwotCWlmICghZW50cnkpIHsKLQkJcmV0ID0gLUVOT0VOVDsKKwlpZiAoIWVudHJ5KQogCQlnb3RvIGVuZDsKLQl9CiAJaWYgKGVudHJ5LT5yY3VfcGVuZGluZykKIAkJcmN1X2JhcnJpZXIoKTsKIAlvbGQgPSBtYXJrZXJfZW50cnlfcmVtb3ZlX3Byb2JlKGVudHJ5LCBwcm9iZSwgcHJvYmVfcHJpdmF0ZSk7CkBAIC03MTMsMTIgKzcxMSwxOCBAQAogCW1hcmtlcl91cGRhdGVfcHJvYmVzKCk7CQkvKiBtYXkgdXBkYXRlIGVudHJ5ICovCiAJbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7CiAJZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOworCWlmICghZW50cnkpCisJCWdvdG8gZW5kOwogCWVudHJ5LT5vbGRwdHIgPSBvbGQ7CiAJZW50cnktPnJjdV9wZW5kaW5nID0gMTsKIAkvKiB3cml0ZSByY3VfcGVuZGluZyBiZWZvcmUgY2FsbGluZyB0aGUgUkNVIGNhbGxiYWNrICovCiAJc21wX3dtYigpOworI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQorCXN5bmNocm9uaXplX3NjaGVkKCk7CS8qIFVudGlsIHdlIGhhdmUgdGhlIGNhbGxfcmN1X3NjaGVkKCkgKi8KKyNlbmRpZgogCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBmcmVlX29sZF9jbG9zdXJlKTsKIAlyZW1vdmVfbWFya2VyKG5hbWUpOwkvKiBJZ25vcmUgYnVzeSBlcnJvciBtZXNzYWdlICovCisJcmV0ID0gMDsKIGVuZDoKIAltdXRleF91bmxvY2soJm1hcmtlcnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC03OTQsNiArNzk4LDkgQEAKIAllbnRyeS0+cmN1X3BlbmRpbmcgPSAxOwogCS8qIHdyaXRlIHJjdV9wZW5kaW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBSQ1UgY2FsbGJhY2sgKi8KIAlzbXBfd21iKCk7CisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVCisJc3luY2hyb25pemVfc2NoZWQoKTsJLyogVW50aWwgd2UgaGF2ZSB0aGUgY2FsbF9yY3Vfc2NoZWQoKSAqLworI2VuZGlmCiAJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIGZyZWVfb2xkX2Nsb3N1cmUpOwogCXJlbW92ZV9tYXJrZXIoZW50cnktPm5hbWUpOwkvKiBJZ25vcmUgYnVzeSBlcnJvciBtZXNzYWdlICovCiBlbmQ6CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggOTI1OTViYS4uOGQ2Y2NjYyAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdW53aW5kLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxsaW51eC9saWNlbnNlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CkBAIC02NjQsNyArNjYzLDcgQEAKIAogc3RhdGljIHZvaWQgd2FpdF9mb3JfemVyb19yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JLyogU2luY2Ugd2UgbWlnaHQgc2xlZXAgZm9yIHNvbWUgdGltZSwgZHJvcCB0aGUgc2VtYXBob3JlIGZpcnN0ICovCisJLyogU2luY2Ugd2UgbWlnaHQgc2xlZXAgZm9yIHNvbWUgdGltZSwgcmVsZWFzZSB0aGUgbXV0ZXggZmlyc3QgKi8KIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7CiAJZm9yICg7OykgewogCQlERUJVR1AoIkxvb2tpbmcgYXQgcmVmY291bnQuLi5cbiIpOwpAQCAtOTg3LDEyICs5ODYsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIC8qCiAgKiAvc3lzL21vZHVsZS9mb28vc2VjdGlvbnMgc3R1ZmYKICAqIEouIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CiAgKi8KLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKKyNpZiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykgJiYgZGVmaW5lZChDT05GSUdfU1lTRlMpCiBzdGF0aWMgc3NpemVfdCBtb2R1bGVfc2VjdF9zaG93KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwKIAkJCQlzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1ZikKIHsKQEAgLTExODgsNyArMTE4Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiBpbnQgbW9kdWxlX2FkZF9tb2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKQEAgLTEyMzEsOSArMTIyOSw3IEBACiAJfQogCWtmcmVlKG1vZC0+bW9kaW5mb19hdHRycyk7CiB9Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19TWVNGUwogaW50IG1vZF9zeXNmc19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlpbnQgZXJyOwpAQCAtMTkzNiw4ICsxOTMyLDE1IEBACiAJLyogU2V0IHVwIGxpY2Vuc2UgaW5mbyBiYXNlZCBvbiB0aGUgaW5mbyBzZWN0aW9uICovCiAJc2V0X2xpY2Vuc2UobW9kLCBnZXRfbW9kaW5mbyhzZWNoZHJzLCBpbmZvaW5kZXgsICJsaWNlbnNlIikpOwogCisJLyoKKwkgKiBuZGlzd3JhcHBlciBpcyB1bmRlciBHUEwgYnkgaXRzZWxmLCBidXQgbG9hZHMgcHJvcHJpZXRhcnkgbW9kdWxlcy4KKwkgKiBEb24ndCB1c2UgYWRkX3RhaW50X21vZHVsZSgpLCBhcyBpdCB3b3VsZCBwcmV2ZW50IG5kaXN3cmFwcGVyIGZyb20KKwkgKiB1c2luZyBHUEwtb25seSBzeW1ib2xzIGl0IG5lZWRzLgorCSAqLwogCWlmIChzdHJjbXAobW9kLT5uYW1lLCAibmRpc3dyYXBwZXIiKSA9PSAwKQotCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKKwkJYWRkX3RhaW50KFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSk7CisKKwkvKiBkcml2ZXJsb2FkZXIgd2FzIGNhdWdodCB3cm9uZ2x5IHByZXRlbmRpbmcgdG8gYmUgdW5kZXIgR1BMICovCiAJaWYgKHN0cmNtcChtb2QtPm5hbWUsICJkcml2ZXJsb2FkZXIiKSA9PSAwKQogCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKIApAQCAtMjE3NCwxMCArMjE3NywyMCBAQAogCQl3YWtlX3VwKCZtb2R1bGVfd3EpOwogCQlyZXR1cm4gcmV0OwogCX0KKwlpZiAocmV0ID4gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJyVzJy0+aW5pdCBzdXNwaWNpb3VzbHkgcmV0dXJuZWQgJWQsICIKKwkJCQkgICAgIml0IHNob3VsZCBmb2xsb3cgMC8tRSBjb252ZW50aW9uXG4iCisJCSAgICAgICBLRVJOX1dBUk5JTkcgIiVzOiBsb2FkaW5nIG1vZHVsZSBhbnl3YXkuLi5cbiIsCisJCSAgICAgICBfX2Z1bmNfXywgbW9kLT5uYW1lLCByZXQsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWR1bXBfc3RhY2soKTsKKwl9CiAKLQkvKiBOb3cgaXQncyBhIGZpcnN0IGNsYXNzIGNpdGl6ZW4hICovCi0JbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKKwkvKiBOb3cgaXQncyBhIGZpcnN0IGNsYXNzIGNpdGl6ZW4hICBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIGZvciBpdC4gKi8KIAltb2QtPnN0YXRlID0gTU9EVUxFX1NUQVRFX0xJVkU7CisJd2FrZV91cCgmbW9kdWxlX3dxKTsKKworCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CiAJLyogRHJvcCBpbml0aWFsIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KG1vZCk7CiAJdW53aW5kX3JlbW92ZV90YWJsZShtb2QtPnVud2luZF9pbmZvLCAxKTsKQEAgLTIxODYsNyArMjE5OSw2IEBACiAJbW9kLT5pbml0X3NpemUgPSAwOwogCW1vZC0+aW5pdF90ZXh0X3NpemUgPSAwOwogCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKLQl3YWtlX3VwKCZtb2R1bGVfd3EpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCAyZWFlOTFmLi5hZTVjNmMxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTEwODcsNDUgKzEwODcsNDUgQEAKIAltYXhmaXJlID0gMjA7CiAJcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7Ci0JCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZmlyc3RfZW50cnkodGltZXJzLAorCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnRsID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7Ci0JCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQocHRpbWUsIHQtPmV4cGlyZXMuY3B1KSkgewotCQkJcHJvZl9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CisJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQocHRpbWUsIHRsLT5leHBpcmVzLmNwdSkpIHsKKwkJCXByb2ZfZXhwaXJlcyA9IHRsLT5leHBpcmVzLmNwdTsKIAkJCWJyZWFrOwogCQl9Ci0JCXQtPmZpcmluZyA9IDE7Ci0JCWxpc3RfbW92ZV90YWlsKCZ0LT5lbnRyeSwgZmlyaW5nKTsKKwkJdGwtPmZpcmluZyA9IDE7CisJCWxpc3RfbW92ZV90YWlsKCZ0bC0+ZW50cnksIGZpcmluZyk7CiAJfQogCiAJKyt0aW1lcnM7CiAJbWF4ZmlyZSA9IDIwOwogCXZpcnRfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewotCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKKwkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0bCA9IGxpc3RfZmlyc3RfZW50cnkodGltZXJzLAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwotCQlpZiAoIS0tbWF4ZmlyZSB8fCBjcHV0aW1lX2x0KHV0aW1lLCB0LT5leHBpcmVzLmNwdSkpIHsKLQkJCXZpcnRfZXhwaXJlcyA9IHQtPmV4cGlyZXMuY3B1OworCQlpZiAoIS0tbWF4ZmlyZSB8fCBjcHV0aW1lX2x0KHV0aW1lLCB0bC0+ZXhwaXJlcy5jcHUpKSB7CisJCQl2aXJ0X2V4cGlyZXMgPSB0bC0+ZXhwaXJlcy5jcHU7CiAJCQlicmVhazsKIAkJfQotCQl0LT5maXJpbmcgPSAxOwotCQlsaXN0X21vdmVfdGFpbCgmdC0+ZW50cnksIGZpcmluZyk7CisJCXRsLT5maXJpbmcgPSAxOworCQlsaXN0X21vdmVfdGFpbCgmdGwtPmVudHJ5LCBmaXJpbmcpOwogCX0KIAogCSsrdGltZXJzOwogCW1heGZpcmUgPSAyMDsKIAlzY2hlZF9leHBpcmVzID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewotCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKKwkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0bCA9IGxpc3RfZmlyc3RfZW50cnkodGltZXJzLAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwotCQlpZiAoIS0tbWF4ZmlyZSB8fCBzdW1fc2NoZWRfcnVudGltZSA8IHQtPmV4cGlyZXMuc2NoZWQpIHsKLQkJCXNjaGVkX2V4cGlyZXMgPSB0LT5leHBpcmVzLnNjaGVkOworCQlpZiAoIS0tbWF4ZmlyZSB8fCBzdW1fc2NoZWRfcnVudGltZSA8IHRsLT5leHBpcmVzLnNjaGVkKSB7CisJCQlzY2hlZF9leHBpcmVzID0gdGwtPmV4cGlyZXMuc2NoZWQ7CiAJCQlicmVhazsKIAkJfQotCQl0LT5maXJpbmcgPSAxOwotCQlsaXN0X21vdmVfdGFpbCgmdC0+ZW50cnksIGZpcmluZyk7CisJCXRsLT5maXJpbmcgPSAxOworCQlsaXN0X21vdmVfdGFpbCgmdGwtPmVudHJ5LCBmaXJpbmcpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggYTliMDQyMC4uODQ3Njk1NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDc5ODMzMTcuLjYyMzNmM2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkgIG5vdGlmaWNhdGlvbiBvZiBBUE0gImV2ZW50cyIgKGUuZy4gYmF0dGVyeSBzdGF0dXMgY2hhbmdlKS4KIAogCSAgSW4gb3JkZXIgdG8gdXNlIEFQTSwgeW91IHdpbGwgbmVlZCBzdXBwb3J0aW5nIHNvZnR3YXJlLiBGb3IgbG9jYXRpb24KLQkgIGFuZCBtb3JlIGluZm9ybWF0aW9uLCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vcG0udHh0PiBhbmQgdGhlCisJICBhbmQgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3Bvd2VyL3BtLnR4dD4gYW5kIHRoZQogCSAgQmF0dGVyeSBQb3dlcmVkIExpbnV4IG1pbmktSE9XVE8sIGF2YWlsYWJsZSBmcm9tCiAJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvZGlzay5jIGIva2VybmVsL3Bvd2VyL2Rpc2suYwppbmRleCA4NTlhOGU1Li4xNGE2NTZjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvZGlzay5jCisrKyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCQlnb3RvIENsb3NlOwogCiAJc3VzcGVuZF9jb25zb2xlKCk7Ci0JZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX1NVU1BFTkQpOworCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoUE1TR19ISUJFUk5BVEUpOwogCWlmIChlcnJvcikKIAkJZ290byBSZXN1bWVfY29uc29sZTsKIApAQCAtNDA0LDcgKzQwNCw3IEBACiAJCWdvdG8gRmluaXNoOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisJZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX0hJQkVSTkFURSk7CiAJaWYgKCFlcnJvcikgewogCQloaWJlcm5hdGlvbl9vcHMtPmVudGVyKCk7CiAJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggN2MyMTE4Zi4uZjFkMGIzNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYworKysgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCkBAIC03NSwyMiArNzUsMTUgQEAKIAlfX3NldF9jdXJyZW50X3N0YXRlKHNhdmUpOwogfQogCi1zdGF0aWMgdm9pZCBmYWtlX3NpZ25hbF93YWtlX3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHJlc3VtZSkKK3N0YXRpYyB2b2lkIGZha2Vfc2lnbmFsX3dha2VfdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCXNpZ25hbF93YWtlX3VwKHAsIHJlc3VtZSk7CisJc2lnbmFsX3dha2VfdXAocCwgMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBzZW5kX2Zha2Vfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlpZiAodGFza19pc19zdG9wcGVkKHApKQotCQlmb3JjZV9zaWdfc3BlY2lmaWMoU0lHU1RPUCwgcCk7Ci0JZmFrZV9zaWduYWxfd2FrZV91cChwLCB0YXNrX2lzX3N0b3BwZWQocCkpOwotfQotCiBzdGF0aWMgaW50IGhhc19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJcmV0dXJuIChwLT5tbSAmJiAhKHAtPmZsYWdzICYgUEZfQk9SUk9XRURfTU0pKTsKQEAgLTEyMSw3ICsxMTQsNyBAQAogCWlmIChmcmVlemluZyhwKSkgewogCQlpZiAoaGFzX21tKHApKSB7CiAJCQlpZiAoIXNpZ25hbF9wZW5kaW5nKHApKQotCQkJCWZha2Vfc2lnbmFsX3dha2VfdXAocCwgMCk7CisJCQkJZmFrZV9zaWduYWxfd2FrZV91cChwKTsKIAkJfSBlbHNlIHsKIAkJCWlmICh3aXRoX21tX29ubHkpCiAJCQkJcmV0ID0gMDsKQEAgLTEzNSw3ICsxMjgsNyBAQAogCQl9IGVsc2UgewogCQkJaWYgKGhhc19tbShwKSkgewogCQkJCXNldF9mcmVlemVfZmxhZyhwKTsKLQkJCQlzZW5kX2Zha2Vfc2lnbmFsKHApOworCQkJCWZha2Vfc2lnbmFsX3dha2VfdXAocCk7CiAJCQl9IGVsc2UgewogCQkJCWlmICh3aXRoX21tX29ubHkpIHsKIAkJCQkJcmV0ID0gMDsKQEAgLTE4MiwxNSArMTc1LDE3IEBACiAJCQlpZiAoZnJvemVuKHApIHx8ICFmcmVlemVhYmxlKHApKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAodGFza19pc190cmFjZWQocCkgJiYgZnJvemVuKHAtPnBhcmVudCkpIHsKLQkJCQljYW5jZWxfZnJlZXppbmcocCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KIAkJCWlmICghZnJlZXplX3Rhc2socCwgZnJlZXplX3VzZXJfc3BhY2UpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIWZyZWV6ZXJfc2hvdWxkX3NraXAocCkpCisJCQkvKgorCQkJICogTm93IHRoYXQgd2UndmUgZG9uZSBzZXRfZnJlZXplX2ZsYWcsIGRvbid0CisJCQkgKiBwZXJ0dXJiIGEgdGFzayBpbiBUQVNLX1NUT1BQRUQgb3IgVEFTS19UUkFDRUQuCisJCQkgKiBJdCBpcyAiZnJvemVuIGVub3VnaCIuICBJZiB0aGUgdGFzayBkb2VzIHdha2UKKwkJCSAqIHVwLCBpdCB3aWxsIGltbWVkaWF0ZWx5IGNhbGwgdHJ5X3RvX2ZyZWV6ZS4KKwkJCSAqLworCQkJaWYgKCF0YXNrX2lzX3N0b3BwZWRfb3JfdHJhY2VkKHApICYmCisJCQkgICAgIWZyZWV6ZXJfc2hvdWxkX3NraXAocCkpCiAJCQkJdG9kbysrOwogCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IDk1MjUwZDcuLjVmOTFhMDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC00NDcsNyArNDQ3LDcgQEAKICAqCW9mIEBibS0+Y3VyX3pvbmVfYm0gYXJlIHVwZGF0ZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgbWVtb3J5X2JtX2ZpbmRfYml0KHN0cnVjdCBtZW1vcnlfYml0bWFwICpibSwgdW5zaWduZWQgbG9uZyBwZm4sCitzdGF0aWMgaW50IG1lbW9yeV9ibV9maW5kX2JpdChzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqYm0sIHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCXZvaWQgKiphZGRyLCB1bnNpZ25lZCBpbnQgKmJpdF9ucikKIHsKIAlzdHJ1Y3Qgem9uZV9iaXRtYXAgKnpvbmVfYm07CkBAIC00NjEsNyArNDYxLDggQEAKIAkJd2hpbGUgKHBmbiA8IHpvbmVfYm0tPnN0YXJ0X3BmbiB8fCBwZm4gPj0gem9uZV9ibS0+ZW5kX3BmbikgewogCQkJem9uZV9ibSA9IHpvbmVfYm0tPm5leHQ7CiAKLQkJCUJVR19PTighem9uZV9ibSk7CisJCQlpZiAoIXpvbmVfYm0pCisJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJYm0tPmN1ci56b25lX2JtID0gem9uZV9ibTsKIAl9CkBAIC00NzksMjMgKzQ4MCw0MCBAQAogCXBmbiAtPSBiYi0+c3RhcnRfcGZuOwogCSpiaXRfbnIgPSBwZm4gJSBCTV9CSVRTX1BFUl9DSFVOSzsKIAkqYWRkciA9IGJiLT5kYXRhICsgcGZuIC8gQk1fQklUU19QRVJfQ0hVTks7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbW9yeV9ibV9zZXRfYml0KHN0cnVjdCBtZW1vcnlfYml0bWFwICpibSwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJdm9pZCAqYWRkcjsKIAl1bnNpZ25lZCBpbnQgYml0OworCWludCBlcnJvcjsKIAotCW1lbW9yeV9ibV9maW5kX2JpdChibSwgcGZuLCAmYWRkciwgJmJpdCk7CisJZXJyb3IgPSBtZW1vcnlfYm1fZmluZF9iaXQoYm0sIHBmbiwgJmFkZHIsICZiaXQpOworCUJVR19PTihlcnJvcik7CiAJc2V0X2JpdChiaXQsIGFkZHIpOwogfQogCitzdGF0aWMgaW50IG1lbV9ibV9zZXRfYml0X2NoZWNrKHN0cnVjdCBtZW1vcnlfYml0bWFwICpibSwgdW5zaWduZWQgbG9uZyBwZm4pCit7CisJdm9pZCAqYWRkcjsKKwl1bnNpZ25lZCBpbnQgYml0OworCWludCBlcnJvcjsKKworCWVycm9yID0gbWVtb3J5X2JtX2ZpbmRfYml0KGJtLCBwZm4sICZhZGRyLCAmYml0KTsKKwlpZiAoIWVycm9yKQorCQlzZXRfYml0KGJpdCwgYWRkcik7CisJcmV0dXJuIGVycm9yOworfQorCiBzdGF0aWMgdm9pZCBtZW1vcnlfYm1fY2xlYXJfYml0KHN0cnVjdCBtZW1vcnlfYml0bWFwICpibSwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJdm9pZCAqYWRkcjsKIAl1bnNpZ25lZCBpbnQgYml0OworCWludCBlcnJvcjsKIAotCW1lbW9yeV9ibV9maW5kX2JpdChibSwgcGZuLCAmYWRkciwgJmJpdCk7CisJZXJyb3IgPSBtZW1vcnlfYm1fZmluZF9iaXQoYm0sIHBmbiwgJmFkZHIsICZiaXQpOworCUJVR19PTihlcnJvcik7CiAJY2xlYXJfYml0KGJpdCwgYWRkcik7CiB9CiAKQEAgLTUwMyw4ICs1MjEsMTAgQEAKIHsKIAl2b2lkICphZGRyOwogCXVuc2lnbmVkIGludCBiaXQ7CisJaW50IGVycm9yOwogCi0JbWVtb3J5X2JtX2ZpbmRfYml0KGJtLCBwZm4sICZhZGRyLCAmYml0KTsKKwllcnJvciA9IG1lbW9yeV9ibV9maW5kX2JpdChibSwgcGZuLCAmYWRkciwgJmJpdCk7CisJQlVHX09OKGVycm9yKTsKIAlyZXR1cm4gdGVzdF9iaXQoYml0LCBhZGRyKTsKIH0KIApAQCAtNzA5LDggKzcyOSwxNSBAQAogCQkJCXJlZ2lvbi0+ZW5kX3BmbiA8PCBQQUdFX1NISUZUKTsKIAogCQlmb3IgKHBmbiA9IHJlZ2lvbi0+c3RhcnRfcGZuOyBwZm4gPCByZWdpb24tPmVuZF9wZm47IHBmbisrKQotCQkJaWYgKHBmbl92YWxpZChwZm4pKQotCQkJCW1lbW9yeV9ibV9zZXRfYml0KGJtLCBwZm4pOworCQkJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCQkJLyoKKwkJCQkgKiBJdCBpcyBzYWZlIHRvIGlnbm9yZSB0aGUgcmVzdWx0IG9mCisJCQkJICogbWVtX2JtX3NldF9iaXRfY2hlY2soKSBoZXJlLCBzaW5jZSB3ZSB3b24ndAorCQkJCSAqIHRvdWNoIHRoZSBQRk5zIGZvciB3aGljaCB0aGUgZXJyb3IgaXMKKwkJCQkgKiByZXR1cm5lZCBhbnl3YXkuCisJCQkJICovCisJCQkJbWVtX2JtX3NldF9iaXRfY2hlY2soYm0sIHBmbik7CisJCQl9CiAJfQogfQogCkBAIC04NzUsOCArOTAyLDggQEAKICNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCiAvKioKLSAqCXNhdmVhYmxlIC0gRGV0ZXJtaW5lIHdoZXRoZXIgYSBub24taGlnaG1lbSBwYWdlIHNob3VsZCBiZSBpbmNsdWRlZCBpbgotICoJdGhlIHN1c3BlbmQgaW1hZ2UuCisgKglzYXZlYWJsZV9wYWdlIC0gRGV0ZXJtaW5lIHdoZXRoZXIgYSBub24taGlnaG1lbSBwYWdlIHNob3VsZCBiZSBpbmNsdWRlZAorICoJaW4gdGhlIHN1c3BlbmQgaW1hZ2UuCiAgKgogICoJV2Ugc2hvdWxkIHNhdmUgdGhlIHBhZ2UgaWYgaXQgaXNuJ3QgTm9zYXZlLCBhbmQgaXMgbm90IGluIHRoZSByYW5nZQogICoJb2YgcGFnZXMgc3RhdGljYWxseSBkZWZpbmVkIGFzICd1bnNhdmVhYmxlJywgYW5kIGl0IGlzbid0IGEgcGFydCBvZgpAQCAtODk3LDcgKzkyNCw4IEBACiAJaWYgKHN3c3VzcF9wYWdlX2lzX2ZvcmJpZGRlbihwYWdlKSB8fCBzd3N1c3BfcGFnZV9pc19mcmVlKHBhZ2UpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkgJiYgcGZuX2lzX25vc2F2ZShwZm4pKQorCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkKKwkgICAgJiYgKCFrZXJuZWxfcGFnZV9wcmVzZW50KHBhZ2UpIHx8IHBmbl9pc19ub3NhdmUocGZuKSkpCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIHBhZ2U7CkBAIC05MzgsNiArOTY2LDI1IEBACiAJCSpkc3QrKyA9ICpzcmMrKzsKIH0KIAorCisvKioKKyAqCXNhZmVfY29weV9wYWdlIC0gY2hlY2sgaWYgdGhlIHBhZ2Ugd2UgYXJlIGdvaW5nIHRvIGNvcHkgaXMgbWFya2VkIGFzCisgKgkJcHJlc2VudCBpbiB0aGUga2VybmVsIHBhZ2UgdGFibGVzICh0aGlzIGFsd2F5cyBpcyB0aGUgY2FzZSBpZgorICoJCUNPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldCBhbmQgaW4gdGhhdCBjYXNlCisgKgkJa2VybmVsX3BhZ2VfcHJlc2VudCgpIGFsd2F5cyByZXR1cm5zICd0cnVlJykuCisgKi8KK3N0YXRpYyB2b2lkIHNhZmVfY29weV9wYWdlKHZvaWQgKmRzdCwgc3RydWN0IHBhZ2UgKnNfcGFnZSkKK3sKKwlpZiAoa2VybmVsX3BhZ2VfcHJlc2VudChzX3BhZ2UpKSB7CisJCWRvX2NvcHlfcGFnZShkc3QsIHBhZ2VfYWRkcmVzcyhzX3BhZ2UpKTsKKwl9IGVsc2UgeworCQlrZXJuZWxfbWFwX3BhZ2VzKHNfcGFnZSwgMSwgMSk7CisJCWRvX2NvcHlfcGFnZShkc3QsIHBhZ2VfYWRkcmVzcyhzX3BhZ2UpKTsKKwkJa2VybmVsX21hcF9wYWdlcyhzX3BhZ2UsIDEsIDApOworCX0KK30KKworCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogcGFnZV9pc19zYXZlYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBwZm4pCkBAIC05NDYsOCArOTkzLDcgQEAKIAkJCXNhdmVhYmxlX2hpZ2htZW1fcGFnZShwZm4pIDogc2F2ZWFibGVfcGFnZShwZm4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNvcHlfZGF0YV9wYWdlKHVuc2lnbmVkIGxvbmcgZHN0X3BmbiwgdW5zaWduZWQgbG9uZyBzcmNfcGZuKQorc3RhdGljIHZvaWQgY29weV9kYXRhX3BhZ2UodW5zaWduZWQgbG9uZyBkc3RfcGZuLCB1bnNpZ25lZCBsb25nIHNyY19wZm4pCiB7CiAJc3RydWN0IHBhZ2UgKnNfcGFnZSwgKmRfcGFnZTsKIAl2b2lkICpzcmMsICpkc3Q7CkBAIC05NjEsMjkgKzEwMDcsMjYgQEAKIAkJa3VubWFwX2F0b21pYyhzcmMsIEtNX1VTRVIwKTsKIAkJa3VubWFwX2F0b21pYyhkc3QsIEtNX1VTRVIxKTsKIAl9IGVsc2UgewotCQlzcmMgPSBwYWdlX2FkZHJlc3Moc19wYWdlKTsKIAkJaWYgKFBhZ2VIaWdoTWVtKGRfcGFnZSkpIHsKIAkJCS8qIFBhZ2UgcG9pbnRlZCB0byBieSBzcmMgbWF5IGNvbnRhaW4gc29tZSBrZXJuZWwKIAkJCSAqIGRhdGEgbW9kaWZpZWQgYnkga21hcF9hdG9taWMoKQogCQkJICovCi0JCQlkb19jb3B5X3BhZ2UoYnVmZmVyLCBzcmMpOworCQkJc2FmZV9jb3B5X3BhZ2UoYnVmZmVyLCBzX3BhZ2UpOwogCQkJZHN0ID0ga21hcF9hdG9taWMocGZuX3RvX3BhZ2UoZHN0X3BmbiksIEtNX1VTRVIwKTsKIAkJCW1lbWNweShkc3QsIGJ1ZmZlciwgUEFHRV9TSVpFKTsKIAkJCWt1bm1hcF9hdG9taWMoZHN0LCBLTV9VU0VSMCk7CiAJCX0gZWxzZSB7Ci0JCQlkc3QgPSBwYWdlX2FkZHJlc3MoZF9wYWdlKTsKLQkJCWRvX2NvcHlfcGFnZShkc3QsIHNyYyk7CisJCQlzYWZlX2NvcHlfcGFnZShwYWdlX2FkZHJlc3MoZF9wYWdlKSwgc19wYWdlKTsKIAkJfQogCX0KIH0KICNlbHNlCiAjZGVmaW5lIHBhZ2VfaXNfc2F2ZWFibGUoem9uZSwgcGZuKQlzYXZlYWJsZV9wYWdlKHBmbikKIAotc3RhdGljIGlubGluZSB2b2lkCi1jb3B5X2RhdGFfcGFnZSh1bnNpZ25lZCBsb25nIGRzdF9wZm4sIHVuc2lnbmVkIGxvbmcgc3JjX3BmbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2RhdGFfcGFnZSh1bnNpZ25lZCBsb25nIGRzdF9wZm4sIHVuc2lnbmVkIGxvbmcgc3JjX3BmbikKIHsKLQlkb19jb3B5X3BhZ2UocGFnZV9hZGRyZXNzKHBmbl90b19wYWdlKGRzdF9wZm4pKSwKLQkJCXBhZ2VfYWRkcmVzcyhwZm5fdG9fcGFnZShzcmNfcGZuKSkpOworCXNhZmVfY29weV9wYWdlKHBhZ2VfYWRkcmVzcyhwZm5fdG9fcGFnZShkc3RfcGZuKSksCisJCQkJcGZuX3RvX3BhZ2Uoc3JjX3BmbikpOwogfQogI2VuZGlmIC8qIENPTkZJR19ISUdITUVNICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBiZWUzNjEwLi5iZGQ0ZWE4IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC02MTYsNiArNjE2LDUzIEBACiAvKiBjcHUgY3VycmVudGx5IGhvbGRpbmcgbG9nYnVmX2xvY2sgKi8KIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcHJpbnRrX2NwdSA9IFVJTlRfTUFYOwogCisvKgorICogQ2FuIHdlIGFjdHVhbGx5IHVzZSB0aGUgY29uc29sZSBhdCB0aGlzIHRpbWUgb24gdGhpcyBjcHU/CisgKgorICogQ29uc29sZSBkcml2ZXJzIG1heSBhc3N1bWUgdGhhdCBwZXItY3B1IHJlc291cmNlcyBoYXZlCisgKiBiZWVuIGFsbG9jYXRlZC4gU28gdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBtYXJrZWQgYXMKKyAqIGJlaW5nIGFibGUgdG8gY29wZSAoQ09OX0FOWVRJTUUpIGRvbid0IGNhbGwgdGhlbSB1bnRpbAorICogdGhpcyBDUFUgaXMgb2ZmaWNpYWxseSB1cC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2FuX3VzZV9jb25zb2xlKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIGNwdV9vbmxpbmUoY3B1KSB8fCBoYXZlX2NhbGxhYmxlX2NvbnNvbGUoKTsKK30KKworLyoKKyAqIFRyeSB0byBnZXQgY29uc29sZSBvd25lcnNoaXAgdG8gYWN0dWFsbHkgc2hvdyB0aGUga2VybmVsCisgKiBtZXNzYWdlcyBmcm9tIGEgJ3ByaW50aycuIFJldHVybiB0cnVlIChhbmQgd2l0aCB0aGUKKyAqIGNvbnNvbGVfc2VtYXBob3JlIGhlbGQsIGFuZCAnY29uc29sZV9sb2NrZWQnIHNldCkgaWYgaXQKKyAqIGlzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGlzIGdldHMgY2FsbGVkIHdpdGggdGhlICdsb2didWZfbG9jaycgc3BpbmxvY2sgaGVsZCBhbmQKKyAqIGludGVycnVwdHMgZGlzYWJsZWQuIEl0IHNob3VsZCByZXR1cm4gd2l0aCAnbG9ja2J1Zl9sb2NrJworICogcmVsZWFzZWQgYnV0IGludGVycnVwdHMgc3RpbGwgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgYWNxdWlyZV9jb25zb2xlX3NlbWFwaG9yZV9mb3JfcHJpbnRrKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIXRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpIHsKKwkJcmV0dmFsID0gMTsKKworCQkvKgorCQkgKiBJZiB3ZSBjYW4ndCB1c2UgdGhlIGNvbnNvbGUsIHdlIG5lZWQgdG8gcmVsZWFzZQorCQkgKiB0aGUgY29uc29sZSBzZW1hcGhvcmUgYnkgaGFuZCB0byBhdm9pZCBmbHVzaGluZworCQkgKiB0aGUgYnVmZmVyLiBXZSBuZWVkIHRvIGhvbGQgdGhlIGNvbnNvbGUgc2VtYXBob3JlCisJCSAqIGluIG9yZGVyIHRvIGRvIHRoaXMgdGVzdCBzYWZlbHkuCisJCSAqLworCQlpZiAoIWNhbl91c2VfY29uc29sZShjcHUpKSB7CisJCQljb25zb2xlX2xvY2tlZCA9IDA7CisJCQl1cCgmY29uc29sZV9zZW0pOworCQkJcmV0dmFsID0gMDsKKwkJfQorCX0KKwlwcmludGtfY3B1ID0gVUlOVF9NQVg7CisJc3Bpbl91bmxvY2soJmxvZ2J1Zl9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCiBjb25zdCBjaGFyIHByaW50a19yZWN1cnNpb25fYnVnX21zZyBbXSA9CiAJCQlLRVJOX0NSSVQgIkJVRzogcmVjZW50IHByaW50ayByZWN1cnNpb24hXG4iOwogc3RhdGljIGludCBwcmludGtfcmVjdXJzaW9uX2J1ZzsKQEAgLTY2Niw3ICs3MTMsNyBAQAogCX0KIAkvKiBFbWl0IHRoZSBvdXRwdXQgaW50byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwogCXByaW50ZWRfbGVuICs9IHZzY25wcmludGYocHJpbnRrX2J1ZiArIHByaW50ZWRfbGVuLAotCQkJCSAgc2l6ZW9mKHByaW50a19idWYpLCBmbXQsIGFyZ3MpOworCQkJCSAgc2l6ZW9mKHByaW50a19idWYpIC0gcHJpbnRlZF9sZW4sIGZtdCwgYXJncyk7CiAKIAkvKgogCSAqIENvcHkgdGhlIG91dHB1dCBpbnRvIGxvZ19idWYuICBJZiB0aGUgY2FsbGVyIGRpZG4ndCBwcm92aWRlCkBAIC03MjUsNDMgKzc3MiwyMiBAQAogCQkJbG9nX2xldmVsX3Vua25vd24gPSAxOwogCX0KIAotCWlmICghZG93bl90cnlsb2NrKCZjb25zb2xlX3NlbSkpIHsKLQkJLyoKLQkJICogV2Ugb3duIHRoZSBkcml2ZXJzLiAgV2UgY2FuIGRyb3AgdGhlIHNwaW5sb2NrIGFuZAotCQkgKiBsZXQgcmVsZWFzZV9jb25zb2xlX3NlbSgpIHByaW50IHRoZSB0ZXh0LCBtYXliZSAuLi4KLQkJICovCi0JCWNvbnNvbGVfbG9ja2VkID0gMTsKLQkJcHJpbnRrX2NwdSA9IFVJTlRfTUFYOwotCQlzcGluX3VubG9jaygmbG9nYnVmX2xvY2spOworCS8qCisJICogVHJ5IHRvIGFjcXVpcmUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVsZWFzZSB0aGUKKwkgKiBjb25zb2xlIHNlbWFwaG9yZS4gVGhlIHJlbGVhc2Ugd2lsbCBkbyBhbGwgdGhlCisJICogYWN0dWFsIG1hZ2ljIChwcmludCBvdXQgYnVmZmVycywgd2FrZSB1cCBrbG9nZCwKKwkgKiBldGMpLiAKKwkgKgorCSAqIFRoZSBhY3F1aXJlX2NvbnNvbGVfc2VtYXBob3JlX2Zvcl9wcmludGsoKSBmdW5jdGlvbgorCSAqIHdpbGwgcmVsZWFzZSAnbG9nYnVmX2xvY2snIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdAorCSAqIGFjdHVhbGx5IGdldHMgdGhlIHNlbWFwaG9yZSBvciBub3QuCisJICovCisJaWYgKGFjcXVpcmVfY29uc29sZV9zZW1hcGhvcmVfZm9yX3ByaW50ayh0aGlzX2NwdSkpCisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAotCQkvKgotCQkgKiBDb25zb2xlIGRyaXZlcnMgbWF5IGFzc3VtZSB0aGF0IHBlci1jcHUgcmVzb3VyY2VzIGhhdmUKLQkJICogYmVlbiBhbGxvY2F0ZWQuIFNvIHVubGVzcyB0aGV5J3JlIGV4cGxpY2l0bHkgbWFya2VkIGFzCi0JCSAqIGJlaW5nIGFibGUgdG8gY29wZSAoQ09OX0FOWVRJTUUpIGRvbid0IGNhbGwgdGhlbSB1bnRpbAotCQkgKiB0aGlzIENQVSBpcyBvZmZpY2lhbGx5IHVwLgotCQkgKi8KLQkJaWYgKGNwdV9vbmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSB8fCBoYXZlX2NhbGxhYmxlX2NvbnNvbGUoKSkgewotCQkJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAwOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQl9IGVsc2UgewotCQkJLyogUmVsZWFzZSBieSBoYW5kIHRvIGF2b2lkIGZsdXNoaW5nIHRoZSBidWZmZXIuICovCi0JCQljb25zb2xlX2xvY2tlZCA9IDA7Ci0JCQl1cCgmY29uc29sZV9zZW0pOwotCQl9Ci0JCWxvY2tkZXBfb24oKTsKLQkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBTb21lb25lIGVsc2Ugb3ducyB0aGUgZHJpdmVycy4gIFdlIGRyb3AgdGhlIHNwaW5sb2NrLCB3aGljaAotCQkgKiBhbGxvd3MgdGhlIHNlbWFwaG9yZSBob2xkZXIgdG8gcHJvY2VlZCBhbmQgdG8gY2FsbCB0aGUKLQkJICogY29uc29sZSBkcml2ZXJzIHdpdGggdGhlIG91dHB1dCB3aGljaCB3ZSBqdXN0IHByb2R1Y2VkLgotCQkgKi8KLQkJcHJpbnRrX2NwdSA9IFVJTlRfTUFYOwotCQlzcGluX3VubG9jaygmbG9nYnVmX2xvY2spOwotCQlsb2NrZGVwX29uKCk7CisJbG9ja2RlcF9vbigpOwogb3V0X3Jlc3RvcmVfaXJxczoKLQkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXByZWVtcHRfZW5hYmxlKCk7CiAJcmV0dXJuIHByaW50ZWRfbGVuOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Byb2ZpbGUuYyBiL2tlcm5lbC9wcm9maWxlLmMKaW5kZXggM2I3YTFiMC4uNjA2ZDczOCAxMDA2NDQKLS0tIGEva2VybmVsL3Byb2ZpbGUuYworKysgYi9rZXJuZWwvcHJvZmlsZS5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIApkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IGZkYjM0ZTguLjY3ZTM5MmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTMyMyw5ICszMjMsOCBAQAogCXJldHVybiAoZGF0YSAmIH5QVFJBQ0VfT19NQVNLKSA/IC1FSU5WQUwgOiAwOwogfQogCi1zdGF0aWMgaW50IHB0cmFjZV9nZXRzaWdpbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHNpZ2luZm9fdCBfX3VzZXIgKiBkYXRhKQorc3RhdGljIGludCBwdHJhY2VfZ2V0c2lnaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzaWdpbmZvX3QgKmluZm8pCiB7Ci0Jc2lnaW5mb190IGxhc3RpbmZvOwogCWludCBlcnJvciA9IC1FU1JDSDsKIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC0zMzMsMzEgKzMzMiwyNSBAQAogCQllcnJvciA9IC1FSU5WQUw7CiAJCXNwaW5fbG9ja19pcnEoJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJaWYgKGxpa2VseShjaGlsZC0+bGFzdF9zaWdpbmZvICE9IE5VTEwpKSB7Ci0JCQlsYXN0aW5mbyA9ICpjaGlsZC0+bGFzdF9zaWdpbmZvOworCQkJKmluZm8gPSAqY2hpbGQtPmxhc3Rfc2lnaW5mbzsKIAkJCWVycm9yID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAl9CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCWlmICghZXJyb3IpCi0JCXJldHVybiBjb3B5X3NpZ2luZm9fdG9fdXNlcihkYXRhLCAmbGFzdGluZm8pOwogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBwdHJhY2Vfc2V0c2lnaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzaWdpbmZvX3QgX191c2VyICogZGF0YSkKK3N0YXRpYyBpbnQgcHRyYWNlX3NldHNpZ2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgY29uc3Qgc2lnaW5mb190ICppbmZvKQogewotCXNpZ2luZm9fdCBuZXdpbmZvOwogCWludCBlcnJvciA9IC1FU1JDSDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3aW5mbywgZGF0YSwgc2l6ZW9mIChzaWdpbmZvX3QpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWlmIChsaWtlbHkoY2hpbGQtPnNpZ2hhbmQgIT0gTlVMTCkpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlzcGluX2xvY2tfaXJxKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWlmIChsaWtlbHkoY2hpbGQtPmxhc3Rfc2lnaW5mbyAhPSBOVUxMKSkgewotCQkJKmNoaWxkLT5sYXN0X3NpZ2luZm8gPSBuZXdpbmZvOworCQkJKmNoaWxkLT5sYXN0X3NpZ2luZm8gPSAqaW5mbzsKIAkJCWVycm9yID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTQyNCw2ICs0MTcsNyBAQAogCQkgICBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIAlpbnQgcmV0ID0gLUVJTzsKKwlzaWdpbmZvX3Qgc2lnaW5mbzsKIAogCXN3aXRjaCAocmVxdWVzdCkgewogCWNhc2UgUFRSQUNFX1BFRUtURVhUOgpAQCAtNDQyLDEyICs0MzYsMjIgQEAKIAljYXNlIFBUUkFDRV9HRVRFVkVOVE1TRzoKIAkJcmV0ID0gcHV0X3VzZXIoY2hpbGQtPnB0cmFjZV9tZXNzYWdlLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSk7CiAJCWJyZWFrOworCiAJY2FzZSBQVFJBQ0VfR0VUU0lHSU5GTzoKLQkJcmV0ID0gcHRyYWNlX2dldHNpZ2luZm8oY2hpbGQsIChzaWdpbmZvX3QgX191c2VyICopIGRhdGEpOworCQlyZXQgPSBwdHJhY2VfZ2V0c2lnaW5mbyhjaGlsZCwgJnNpZ2luZm8pOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGNvcHlfc2lnaW5mb190b191c2VyKChzaWdpbmZvX3QgX191c2VyICopIGRhdGEsCisJCQkJCQkgICAmc2lnaW5mbyk7CiAJCWJyZWFrOworCiAJY2FzZSBQVFJBQ0VfU0VUU0lHSU5GTzoKLQkJcmV0ID0gcHRyYWNlX3NldHNpZ2luZm8oY2hpbGQsIChzaWdpbmZvX3QgX191c2VyICopIGRhdGEpOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnNpZ2luZm8sIChzaWdpbmZvX3QgX191c2VyICopIGRhdGEsCisJCQkJICAgc2l6ZW9mIHNpZ2luZm8pKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0ID0gcHRyYWNlX3NldHNpZ2luZm8oY2hpbGQsICZzaWdpbmZvKTsKIAkJYnJlYWs7CisKIAljYXNlIFBUUkFDRV9ERVRBQ0g6CSAvKiBkZXRhY2ggYSBwcm9jZXNzIHRoYXQgd2FzIGF0dGFjaGVkLiAqLwogCQlyZXQgPSBwdHJhY2VfZGV0YWNoKGNoaWxkLCBkYXRhKTsKIAkJYnJlYWs7CkBAIC02MTYsNiArNjIwLDcgQEAKIHsKIAljb21wYXRfdWxvbmdfdCBfX3VzZXIgKmRhdGFwID0gY29tcGF0X3B0cihkYXRhKTsKIAljb21wYXRfdWxvbmdfdCB3b3JkOworCXNpZ2luZm9fdCBzaWdpbmZvOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKQEAgLTYzOCw2ICs2NDMsMjMgQEAKIAkJcmV0ID0gcHV0X3VzZXIoKGNvbXBhdF91bG9uZ190KSBjaGlsZC0+cHRyYWNlX21lc3NhZ2UsIGRhdGFwKTsKIAkJYnJlYWs7CiAKKwljYXNlIFBUUkFDRV9HRVRTSUdJTkZPOgorCQlyZXQgPSBwdHJhY2VfZ2V0c2lnaW5mbyhjaGlsZCwgJnNpZ2luZm8pOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGNvcHlfc2lnaW5mb190b191c2VyMzIoCisJCQkJKHN0cnVjdCBjb21wYXRfc2lnaW5mbyBfX3VzZXIgKikgZGF0YXAsCisJCQkJJnNpZ2luZm8pOworCQlicmVhazsKKworCWNhc2UgUFRSQUNFX1NFVFNJR0lORk86CisJCW1lbXNldCgmc2lnaW5mbywgMCwgc2l6ZW9mIHNpZ2luZm8pOworCQlpZiAoY29weV9zaWdpbmZvX2Zyb21fdXNlcjMyKAorCQkJICAgICZzaWdpbmZvLCAoc3RydWN0IGNvbXBhdF9zaWdpbmZvIF9fdXNlciAqKSBkYXRhcCkpCisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXQgPSBwdHJhY2Vfc2V0c2lnaW5mbyhjaGlsZCwgJnNpZ2luZm8pOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cHJlZW1wdC5jIGIva2VybmVsL3JjdXByZWVtcHQuYwppbmRleCA5ODdjZmI3Li5lMWNkZjE5IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cHJlZW1wdC5jCisrKyBiL2tlcm5lbC9yY3VwcmVlbXB0LmMKQEAgLTIzLDYgKzIzLDEwIEBACiAgKgkJdG8gU3VwYXJuYSBCaGF0dGFjaGFyeWEgZm9yIHB1c2hpbmcgbWUgY29tcGxldGVseSBhd2F5CiAgKgkJZnJvbSBhdG9taWMgaW5zdHJ1Y3Rpb25zIG9uIHRoZSByZWFkIHNpZGUuCiAgKgorICogIC0gQWRkZWQgaGFuZGxpbmcgb2YgRHluYW1pYyBUaWNrcworICogICAgICBDb3B5cmlnaHQgMjAwNyAtIFBhdWwgRS4gTWNrZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4KKyAqICAgICAgICAgICAgICAgICAgICAgLSBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCiAgKiBQYXBlcnM6ICBodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL1JDVQogICoKICAqIERlc2lnbiBEb2N1bWVudDogaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjUzNjUxLwpAQCAtNDA5LDYgKzQxMywyMTIgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfTk9fSFoKKworREVGSU5FX1BFUl9DUFUobG9uZywgZHludGlja3NfcHJvZ3Jlc3NfY291bnRlcikgPSAxOworc3RhdGljIERFRklORV9QRVJfQ1BVKGxvbmcsIHJjdV9keW50aWNrX3NuYXBzaG90KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHJjdV91cGRhdGVfZmxhZyk7CisKKy8qKgorICogcmN1X2lycV9lbnRlciAtIENhbGxlZCBmcm9tIEhhcmQgaXJxIGhhbmRsZXJzIGFuZCBOTUkvU01JLgorICoKKyAqIElmIHRoZSBDUFUgd2FzIGlkbGUgd2l0aCBkeW5hbWljIHRpY2tzIGFjdGl2ZSwgdGhpcyB1cGRhdGVzIHRoZQorICogZHludGlja3NfcHJvZ3Jlc3NfY291bnRlciB0byBsZXQgdGhlIFJDVSBoYW5kbGluZyBrbm93IHRoYXQgdGhlCisgKiBDUFUgaXMgYWN0aXZlLgorICovCit2b2lkIHJjdV9pcnFfZW50ZXIodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHBlcl9jcHUocmN1X3VwZGF0ZV9mbGFnLCBjcHUpKQorCQlwZXJfY3B1KHJjdV91cGRhdGVfZmxhZywgY3B1KSsrOworCisJLyoKKwkgKiBPbmx5IHVwZGF0ZSBpZiB3ZSBhcmUgY29taW5nIGZyb20gYSBzdG9wcGVkIHRpY2tzIG1vZGUKKwkgKiAoZHludGlja3NfcHJvZ3Jlc3NfY291bnRlciBpcyBldmVuKS4KKwkgKi8KKwlpZiAoIWluX2ludGVycnVwdCgpICYmCisJICAgIChwZXJfY3B1KGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIsIGNwdSkgJiAweDEpID09IDApIHsKKwkJLyoKKwkJICogVGhlIGZvbGxvd2luZyBtaWdodCBzZWVtIGxpa2Ugd2UgY291bGQgaGF2ZSBhIHJhY2UKKwkJICogd2l0aCBOTUkvU01Jcy4gQnV0IHRoaXMgcmVhbGx5IGlzbid0IGEgcHJvYmxlbS4KKwkJICogSGVyZSB3ZSBkbyBhIHJlYWQvbW9kaWZ5L3dyaXRlLCBhbmQgdGhlIHJhY2UgaGFwcGVucworCQkgKiB3aGVuIGFuIE5NSS9TTUkgY29tZXMgaW4gYWZ0ZXIgdGhlIHJlYWQgYW5kIGJlZm9yZQorCQkgKiB0aGUgd3JpdGUuIEJ1dCBOTUkvU01JcyB3aWxsIGluY3JlbWVudCB0aGlzIGNvdW50ZXIKKwkJICogdHdpY2UgYmVmb3JlIHJldHVybmluZywgc28gdGhlIHplcm8gYml0IHdpbGwgbm90CisJCSAqIGJlIGNvcnJ1cHRlZCBieSB0aGUgTk1JL1NNSSB3aGljaCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQKKwkJICogcGFydC4KKwkJICoKKwkJICogVGhlIG9ubHkgdGhpbmcgaXMgdGhhdCB3ZSB3b3VsZCBicmluZyBiYWNrIHRoZSBjb3VudGVyCisJCSAqIHRvIGEgcG9zdGlvbiB0aGF0IGl0IHdhcyBpbiBkdXJpbmcgdGhlIE5NSS9TTUkuCisJCSAqIEJ1dCB0aGUgemVybyBiaXQgd291bGQgYmUgc2V0LCBzbyB0aGUgcmVzdCBvZiB0aGUKKwkJICogY291bnRlciB3b3VsZCBhZ2FpbiBiZSBpZ25vcmVkLgorCQkgKgorCQkgKiBPbiByZXR1cm4gZnJvbSB0aGUgSVJRLCB0aGUgY291bnRlciBtYXkgaGF2ZSB0aGUgemVybworCQkgKiBiaXQgYmUgMCBhbmQgdGhlIGNvdW50ZXIgdGhlIHNhbWUgYXMgdGhlIHJldHVybiBmcm9tCisJCSAqIHRoZSBOTUkvU01JLiBJZiB0aGUgc3RhdGUgbWFjaGluZSB3YXMgc28gdW5sdWNreSB0bworCQkgKiBzZWUgdGhhdCwgaXQgc3RpbGwgZG9lc24ndCBtYXR0ZXIsIHNpbmNlIGFsbAorCQkgKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9uIHRoaXMgQ1BVIHdvdWxkCisJCSAqIGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQuCisJCSAqLworCQlwZXJfY3B1KGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIsIGNwdSkrKzsKKwkJLyoKKwkJICogVGhlIGZvbGxvd2luZyBtZW1vcnkgYmFycmllciBlbnN1cmVzIHRoYXQgYW55CisJCSAqIHJjdV9yZWFkX2xvY2soKSBwcmltaXRpdmVzIGluIHRoZSBpcnEgaGFuZGxlcgorCQkgKiBhcmUgc2VlbiBieSBvdGhlciBDUFVzIHRvIGZvbGxvdyB0aGUgYWJvdmUKKwkJICogaW5jcmVtZW50IHRvIGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIuIFRoaXMgaXMKKwkJICogcmVxdWlyZWQgaW4gb3JkZXIgZm9yIG90aGVyIENQVXMgdG8gY29ycmVjdGx5CisJCSAqIGRldGVybWluZSB3aGVuIGl0IGlzIHNhZmUgdG8gYWR2YW5jZSB0aGUgUkNVCisJCSAqIGdyYWNlLXBlcmlvZCBzdGF0ZSBtYWNoaW5lLgorCQkgKi8KKwkJc21wX21iKCk7IC8qIHNlZSBhYm92ZSBibG9jayBjb21tZW50LiAqLworCQkvKgorCQkgKiBTaW5jZSB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIGR5bmFtaWMgdGljayBtb2RlIGZyb20KKwkJICogdGhlIGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIgYWZ0ZXIgdGhpcyByb3V0aW5lLAorCQkgKiB3ZSB1c2UgYSBzZWNvbmQgZmxhZyB0byBhY2tub3dsZWRnZSB0aGF0IHdlIGNhbWUKKwkJICogZnJvbSBhbiBpZGxlIHN0YXRlIHdpdGggdGlja3Mgc3RvcHBlZC4KKwkJICovCisJCXBlcl9jcHUocmN1X3VwZGF0ZV9mbGFnLCBjcHUpKys7CisJCS8qCisJCSAqIElmIHdlIHRha2UgYW4gTk1JL1NNSSBub3csIHRoZXkgd2lsbCBhbHNvIGluY3JlbWVudAorCQkgKiB0aGUgcmN1X3VwZGF0ZV9mbGFnLCBhbmQgd2lsbCBub3QgdXBkYXRlIHRoZQorCQkgKiBkeW50aWNrc19wcm9ncmVzc19jb3VudGVyIG9uIGV4aXQuIFRoYXQgaXMgZm9yCisJCSAqIHRoaXMgSVJRIHRvIGRvLgorCQkgKi8KKwl9Cit9CisKKy8qKgorICogcmN1X2lycV9leGl0IC0gQ2FsbGVkIGZyb20gZXhpdGluZyBIYXJkIGlycSBjb250ZXh0LgorICoKKyAqIElmIHRoZSBDUFUgd2FzIGlkbGUgd2l0aCBkeW5hbWljIHRpY2tzIGFjdGl2ZSwgdXBkYXRlIHRoZQorICogZHludGlja3NfcHJvZ3Jlc3NfY291bnRlciB0byBwdXQgbGV0IHRoZSBSQ1UgaGFuZGxpbmcgYmUKKyAqIGF3YXJlIHRoYXQgdGhlIENQVSBpcyBnb2luZyBiYWNrIHRvIGlkbGUgd2l0aCBubyB0aWNrcy4KKyAqLwordm9pZCByY3VfaXJxX2V4aXQodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiByY3VfdXBkYXRlX2ZsYWcgaXMgc2V0IGlmIHdlIGludGVycnVwdGVkIHRoZSBDUFUKKwkgKiB3aGVuIGl0IHdhcyBpZGxlIHdpdGggdGlja3Mgc3RvcHBlZC4KKwkgKiBPbmNlIHRoaXMgb2NjdXJzLCB3ZSBrZWVwIHRyYWNrIG9mIGludGVycnVwdCBuZXN0aW5nCisJICogYmVjYXVzZSBhIE5NSS9TTUkgY291bGQgYWxzbyBjb21lIGluLCBhbmQgd2Ugc3RpbGwKKwkgKiBvbmx5IHdhbnQgdGhlIElSUSB0aGF0IHN0YXJ0ZWQgdGhlIGluY3JlbWVudCBvZiB0aGUKKwkgKiBkeW50aWNrc19wcm9ncmVzc19jb3VudGVyIHRvIGJlIHRoZSBvbmUgdGhhdCBtb2RpZmllcworCSAqIGl0IG9uIGV4aXQuCisJICovCisJaWYgKHBlcl9jcHUocmN1X3VwZGF0ZV9mbGFnLCBjcHUpKSB7CisJCWlmICgtLXBlcl9jcHUocmN1X3VwZGF0ZV9mbGFnLCBjcHUpKQorCQkJcmV0dXJuOworCisJCS8qIFRoaXMgbXVzdCBtYXRjaCB0aGUgaW50ZXJydXB0IG5lc3RpbmcgKi8KKwkJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CisKKwkJLyoKKwkJICogSWYgYW4gTk1JL1NNSSBoYXBwZW5zIG5vdyB3ZSBhcmUgc3RpbGwKKwkJICogcHJvdGVjdGVkIGJ5IHRoZSBkeW50aWNrc19wcm9ncmVzc19jb3VudGVyIGJlaW5nIG9kZC4KKwkJICovCisKKwkJLyoKKwkJICogVGhlIGZvbGxvd2luZyBtZW1vcnkgYmFycmllciBlbnN1cmVzIHRoYXQgYW55CisJCSAqIHJjdV9yZWFkX3VubG9jaygpIHByaW1pdGl2ZXMgaW4gdGhlIGlycSBoYW5kbGVyCisJCSAqIGFyZSBzZWVuIGJ5IG90aGVyIENQVXMgdG8gcHJlY2VlZCB0aGUgZm9sbG93aW5nCisJCSAqIGluY3JlbWVudCB0byBkeW50aWNrc19wcm9ncmVzc19jb3VudGVyLiBUaGlzCisJCSAqIGlzIHJlcXVpcmVkIGluIG9yZGVyIGZvciBvdGhlciBDUFVzIHRvIGRldGVybWluZQorCQkgKiB3aGVuIGl0IGlzIHNhZmUgdG8gYWR2YW5jZSB0aGUgUkNVIGdyYWNlLXBlcmlvZAorCQkgKiBzdGF0ZSBtYWNoaW5lLgorCQkgKi8KKwkJc21wX21iKCk7IC8qIHNlZSBhYm92ZSBibG9jayBjb21tZW50LiAqLworCQlwZXJfY3B1KGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIsIGNwdSkrKzsKKwkJV0FSTl9PTihwZXJfY3B1KGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIsIGNwdSkgJiAweDEpOworCX0KK30KKworc3RhdGljIHZvaWQgZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIoaW50IGNwdSkKK3sKKwlwZXJfY3B1KHJjdV9keW50aWNrX3NuYXBzaG90LCBjcHUpID0KKwkJcGVyX2NwdShkeW50aWNrc19wcm9ncmVzc19jb3VudGVyLCBjcHUpOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmN1X3RyeV9mbGlwX3dhaXRhY2tfbmVlZGVkKGludCBjcHUpCit7CisJbG9uZyBjdXJyOworCWxvbmcgc25hcDsKKworCWN1cnIgPSBwZXJfY3B1KGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIsIGNwdSk7CisJc25hcCA9IHBlcl9jcHUocmN1X2R5bnRpY2tfc25hcHNob3QsIGNwdSk7CisJc21wX21iKCk7IC8qIGZvcmNlIG9yZGVyaW5nIHdpdGggY3B1IGVudGVyaW5nL2xlYXZpbmcgZHludGlja3MuICovCisKKwkvKgorCSAqIElmIHRoZSBDUFUgcmVtYWluZWQgaW4gZHludGlja3MgbW9kZSBmb3IgdGhlIGVudGlyZSB0aW1lCisJICogYW5kIGRpZG4ndCB0YWtlIGFueSBpbnRlcnJ1cHRzLCBOTUlzLCBTTUlzLCBvciB3aGF0ZXZlciwKKwkgKiB0aGVuIGl0IGNhbm5vdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIHJjdV9yZWFkX2xvY2soKSwgc28KKwkgKiB0aGUgbmV4dCByY3VfcmVhZF9sb2NrKCkgaXQgZXhlY3V0ZXMgbXVzdCB1c2UgdGhlIG5ldyB2YWx1ZQorCSAqIG9mIHRoZSBjb3VudGVyLiAgU28gd2UgY2FuIHNhZmVseSBwcmV0ZW5kIHRoYXQgdGhpcyBDUFUKKwkgKiBhbHJlYWR5IGFja25vd2xlZGdlZCB0aGUgY291bnRlci4KKwkgKi8KKworCWlmICgoY3VyciA9PSBzbmFwKSAmJiAoKGN1cnIgJiAweDEpID09IDApKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIENQVSBwYXNzZWQgdGhyb3VnaCBvciBlbnRlcmVkIGEgZHludGlja3MgaWRsZSBwaGFzZSB3aXRoCisJICogbm8gYWN0aXZlIGlycSBoYW5kbGVycywgdGhlbiwgYXMgYWJvdmUsIHdlIGNhbiBzYWZlbHkgcHJldGVuZAorCSAqIHRoYXQgdGhpcyBDUFUgYWxyZWFkeSBhY2tub3dsZWRnZWQgdGhlIGNvdW50ZXIuCisJICovCisKKwlpZiAoKGN1cnIgLSBzbmFwKSA+IDIgfHwgKHNuYXAgJiAweDEpID09IDApCisJCXJldHVybiAwOworCisJLyogV2UgbmVlZCB0aGlzIENQVSB0byBleHBsaWNpdGx5IGFja25vd2xlZGdlIHRoZSBjb3VudGVyIGZsaXAuICovCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JjdV90cnlfZmxpcF93YWl0bWJfbmVlZGVkKGludCBjcHUpCit7CisJbG9uZyBjdXJyOworCWxvbmcgc25hcDsKKworCWN1cnIgPSBwZXJfY3B1KGR5bnRpY2tzX3Byb2dyZXNzX2NvdW50ZXIsIGNwdSk7CisJc25hcCA9IHBlcl9jcHUocmN1X2R5bnRpY2tfc25hcHNob3QsIGNwdSk7CisJc21wX21iKCk7IC8qIGZvcmNlIG9yZGVyaW5nIHdpdGggY3B1IGVudGVyaW5nL2xlYXZpbmcgZHludGlja3MuICovCisKKwkvKgorCSAqIElmIHRoZSBDUFUgcmVtYWluZWQgaW4gZHludGlja3MgbW9kZSBmb3IgdGhlIGVudGlyZSB0aW1lCisJICogYW5kIGRpZG4ndCB0YWtlIGFueSBpbnRlcnJ1cHRzLCBOTUlzLCBTTUlzLCBvciB3aGF0ZXZlciwKKwkgKiB0aGVuIGl0IGNhbm5vdCBoYXZlIGV4ZWN1dGVkIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgorCSAqIGR1cmluZyB0aGF0IHRpbWUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IHRvIGV4ZWN1dGUgYQorCSAqIG1lbW9yeSBiYXJyaWVyLgorCSAqLworCisJaWYgKChjdXJyID09IHNuYXApICYmICgoY3VyciAmIDB4MSkgPT0gMCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGUgQ1BVIGVpdGhlciBlbnRlcmVkIG9yIGV4aXRlZCBhbiBvdXRlcm1vc3QgaW50ZXJydXB0LAorCSAqIFNNSSwgTk1JLCBvciB3aGF0ZXZlciBoYW5kbGVyLCB0aGVuIHdlIGtub3cgdGhhdCBpdCBleGVjdXRlZAorCSAqIGEgbWVtb3J5IGJhcnJpZXIgd2hlbiBkb2luZyBzby4gIFNvIHdlIGRvbid0IG5lZWQgYW5vdGhlciBvbmUuCisJICovCisJaWYgKGN1cnIgIT0gc25hcCkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBuZWVkIHRoZSBDUFUgdG8gZXhlY3V0ZSBhIG1lbW9yeSBiYXJyaWVyLiAqLworCisJcmV0dXJuIDE7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfTk9fSFogKi8KKworIyBkZWZpbmUgZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIoY3B1KQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfdHJ5X2ZsaXBfd2FpdGFja19uZWVkZWQoY3B1KQkoMSkKKyMgZGVmaW5lIHJjdV90cnlfZmxpcF93YWl0bWJfbmVlZGVkKGNwdSkJKDEpCisKKyNlbmRpZiAvKiBDT05GSUdfTk9fSFogKi8KKwogLyoKICAqIEdldCBoZXJlIHdoZW4gUkNVIGlzIGlkbGUuICBEZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRvCiAgKiBtb3ZlIG91dCBvZiBpZGxlIHN0YXRlLCBhbmQgcmV0dXJuIG5vbi16ZXJvIGlmIHNvLgpAQCAtNDQ3LDggKzY1NywxMCBAQAogCiAJLyogTm93IGFzayBlYWNoIENQVSBmb3IgYWNrbm93bGVkZ2VtZW50IG9mIHRoZSBmbGlwLiAqLwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCByY3VfY3B1X29ubGluZV9tYXApCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCByY3VfY3B1X29ubGluZV9tYXApIHsKIAkJcGVyX2NwdShyY3VfZmxpcF9mbGFnLCBjcHUpID0gcmN1X2ZsaXBwZWQ7CisJCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKGNwdSk7CisJfQogCiAJcmV0dXJuIDE7CiB9CkBAIC00NjQsNyArNjc2LDggQEAKIAogCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2ExKTsKIAlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIHJjdV9jcHVfb25saW5lX21hcCkKLQkJaWYgKHBlcl9jcHUocmN1X2ZsaXBfZmxhZywgY3B1KSAhPSByY3VfZmxpcF9zZWVuKSB7CisJCWlmIChyY3VfdHJ5X2ZsaXBfd2FpdGFja19uZWVkZWQoY3B1KSAmJgorCQkgICAgcGVyX2NwdShyY3VfZmxpcF9mbGFnLCBjcHUpICE9IHJjdV9mbGlwX3NlZW4pIHsKIAkJCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2FlMSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNTA5LDggKzcyMiwxMCBAQAogCXNtcF9tYigpOyAgLyogIF5eXl5eXl5eXl5eXiAqLwogCiAJLyogQ2FsbCBmb3IgYSBtZW1vcnkgYmFycmllciBmcm9tIGVhY2ggQ1BVLiAqLwotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgcmN1X2NwdV9vbmxpbmVfbWFwKQorCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgcmN1X2NwdV9vbmxpbmVfbWFwKSB7CiAJCXBlcl9jcHUocmN1X21iX2ZsYWcsIGNwdSkgPSByY3VfbWJfbmVlZGVkOworCQlkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcihjcHUpOworCX0KIAogCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX3oyKTsKIAlyZXR1cm4gMTsKQEAgLTUyOCw3ICs3NDMsOCBAQAogCiAJUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfbTEpOwogCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgcmN1X2NwdV9vbmxpbmVfbWFwKQotCQlpZiAocGVyX2NwdShyY3VfbWJfZmxhZywgY3B1KSAhPSByY3VfbWJfZG9uZSkgeworCQlpZiAocmN1X3RyeV9mbGlwX3dhaXRtYl9uZWVkZWQoY3B1KSAmJgorCQkgICAgcGVyX2NwdShyY3VfbWJfZmxhZywgY3B1KSAhPSByY3VfbWJfZG9uZSkgewogCQkJUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfbWUxKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC03MDIsOCArOTE4LDkgQEAKIAkgKiBmaXguCiAJICovCiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcmRwID0gUkNVX0RBVEFfTUUoKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmRwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZyZHAtPmxvY2spOwogCSpyZHAtPm5leHR0YWlsID0gbGlzdDsKIAlpZiAobGlzdCkKIAkJcmRwLT5uZXh0dGFpbCA9IHRhaWw7CkBAIC03MzUsOSArOTUyLDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQsICpsaXN0OwotCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gUkNVX0RBVEFfTUUoKTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyZHAtPmxvY2ssIGZsYWdzKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmRwID0gUkNVX0RBVEFfTUUoKTsKKwlzcGluX2xvY2soJnJkcC0+bG9jayk7CiAJbGlzdCA9IHJkcC0+ZG9uZWxpc3Q7CiAJaWYgKGxpc3QgPT0gTlVMTCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHAtPmxvY2ssIGZsYWdzKTsKQEAgLTc4OCwxMCArMTAwNywxMCBAQAogCWlmIChzY2hlZF9nZXRhZmZpbml0eSgwLCAmb2xkbWFzaykgPCAwKQogCQlvbGRtYXNrID0gY3B1X3Bvc3NpYmxlX21hcDsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlzY2hlZF9zZXRhZmZpbml0eSgwLCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKwkJc2NoZWRfc2V0YWZmaW5pdHkoMCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwogCQlzY2hlZHVsZSgpOwogCX0KLQlzY2hlZF9zZXRhZmZpbml0eSgwLCBvbGRtYXNrKTsKKwlzY2hlZF9zZXRhZmZpbml0eSgwLCAmb2xkbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3N5bmNocm9uaXplX3NjaGVkKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggZmQ1OTk4Mi4uNDc4OTRmOSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC03MjMsOSArNzIzLDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3NodWZmbGVfdGFza3Modm9pZCkKIHsKLQljcHVtYXNrX3QgdG1wX21hc2sgPSBDUFVfTUFTS19BTEw7CisJY3B1bWFza190IHRtcF9tYXNrOwogCWludCBpOwogCisJY3B1c19zZXRhbGwodG1wX21hc2spOwogCWdldF9vbmxpbmVfY3B1cygpOwogCiAJLyogTm8gcG9pbnQgaW4gc2h1ZmZsaW5nIGlmIHRoZXJlIGlzIG9ubHkgb25lIG9ubGluZSBDUFUgKGV4OiBVUCkgKi8KQEAgLTczNywyNSArNzM4LDI3IEBACiAJaWYgKHJjdV9pZGxlX2NwdSAhPSAtMSkKIAkJY3B1X2NsZWFyKHJjdV9pZGxlX2NwdSwgdG1wX21hc2spOwogCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCB0bXBfbWFzayk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJnRtcF9tYXNrKTsKIAogCWlmIChyZWFkZXJfdGFza3MpIHsKIAkJZm9yIChpID0gMDsgaSA8IG5yZWFscmVhZGVyczsgaSsrKQogCQkJaWYgKHJlYWRlcl90YXNrc1tpXSkKLQkJCQlzZXRfY3B1c19hbGxvd2VkKHJlYWRlcl90YXNrc1tpXSwgdG1wX21hc2spOworCQkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKHJlYWRlcl90YXNrc1tpXSwKKwkJCQkJCSAgICAgJnRtcF9tYXNrKTsKIAl9CiAKIAlpZiAoZmFrZXdyaXRlcl90YXNrcykgewogCQlmb3IgKGkgPSAwOyBpIDwgbmZha2V3cml0ZXJzOyBpKyspCiAJCQlpZiAoZmFrZXdyaXRlcl90YXNrc1tpXSkKLQkJCQlzZXRfY3B1c19hbGxvd2VkKGZha2V3cml0ZXJfdGFza3NbaV0sIHRtcF9tYXNrKTsKKwkJCQlzZXRfY3B1c19hbGxvd2VkX3B0cihmYWtld3JpdGVyX3Rhc2tzW2ldLAorCQkJCQkJICAgICAmdG1wX21hc2spOwogCX0KIAogCWlmICh3cml0ZXJfdGFzaykKLQkJc2V0X2NwdXNfYWxsb3dlZCh3cml0ZXJfdGFzaywgdG1wX21hc2spOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cih3cml0ZXJfdGFzaywgJnRtcF9tYXNrKTsKIAogCWlmIChzdGF0c190YXNrKQotCQlzZXRfY3B1c19hbGxvd2VkKHN0YXRzX3Rhc2ssIHRtcF9tYXNrKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoc3RhdHNfdGFzaywgJnRtcF9tYXNrKTsKIAogCWlmIChyY3VfaWRsZV9jcHUgPT0gLTEpCiAJCXJjdV9pZGxlX2NwdSA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggZDA4MGI5ZC4uZDYyMDRhNCAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTczNiw3ICs3MzYsNyBAQAogCWtyZWZfZ2V0KCZidWYtPmtyZWYpOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGJ1ZjsKIAotCXJldHVybiAwOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKIH0KIAogLyoqCkBAIC0xMDU2LDYgKzEwNTYsMTAgQEAKIAkuZ2V0ID0gZ2VuZXJpY19waXBlX2J1Zl9nZXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWxheV9wYWdlX3JlbGVhc2Uoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKnNwZCwgdW5zaWduZWQgaW50IGkpCit7Cit9CisKIC8qCiAgKglzdWJidWZfc3BsaWNlX2FjdG9yIC0gc3BsaWNlIHVwIHRvIG9uZSBzdWJidWYncyB3b3J0aCBvZiBkYXRhCiAgKi8KQEAgLTEwNjYsNyArMTA3MCw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJICAgICAgIGludCAqbm9ucGFkX3JldCkKIHsKLQl1bnNpZ25lZCBpbnQgcGlkeCwgcG9mZiwgdG90YWxfbGVuLCBzdWJidWZfcGFnZXMsIHJldDsKKwl1bnNpZ25lZCBpbnQgcGlkeCwgcG9mZiwgdG90YWxfbGVuLCBzdWJidWZfcGFnZXMsIG5yX3BhZ2VzLCByZXQ7CiAJc3RydWN0IHJjaGFuX2J1ZiAqcmJ1ZiA9IGluLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IHN1YmJ1Zl9zaXplID0gcmJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemU7CiAJdWludDY0X3QgcG9zID0gKHVpbnQ2NF90KSAqcHBvczsKQEAgLTEwODMsNiArMTA4Nyw3IEBACiAJCS5wYXJ0aWFsID0gcGFydGlhbCwKIAkJLmZsYWdzID0gZmxhZ3MsCiAJCS5vcHMgPSAmcmVsYXlfcGlwZV9idWZfb3BzLAorCQkuc3BkX3JlbGVhc2UgPSByZWxheV9wYWdlX3JlbGVhc2UsCiAJfTsKIAogCWlmIChyYnVmLT5zdWJidWZzX3Byb2R1Y2VkID09IHJidWYtPnN1YmJ1ZnNfY29uc3VtZWQpCkBAIC0xMDk3LDggKzExMDIsOSBAQAogCXN1YmJ1Zl9wYWdlcyA9IHJidWYtPmNoYW4tPmFsbG9jX3NpemUgPj4gUEFHRV9TSElGVDsKIAlwaWR4ID0gKHJlYWRfc3RhcnQgLyBQQUdFX1NJWkUpICUgc3ViYnVmX3BhZ2VzOwogCXBvZmYgPSByZWFkX3N0YXJ0ICYgflBBR0VfTUFTSzsKKwlucl9wYWdlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgc3ViYnVmX3BhZ2VzLCBQSVBFX0JVRkZFUlMpOwogCi0JZm9yICh0b3RhbF9sZW4gPSAwOyBzcGQubnJfcGFnZXMgPCBzdWJidWZfcGFnZXM7IHNwZC5ucl9wYWdlcysrKSB7CisJZm9yICh0b3RhbF9sZW4gPSAwOyBzcGQubnJfcGFnZXMgPCBucl9wYWdlczsgc3BkLm5yX3BhZ2VzKyspIHsKIAkJdW5zaWduZWQgaW50IHRoaXNfbGVuLCB0aGlzX2VuZCwgcHJpdmF0ZTsKIAkJdW5zaWduZWQgaW50IGN1cl9wb3MgPSByZWFkX3N0YXJ0ICsgdG90YWxfbGVuOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzX2NvdW50ZXIuYyBiL2tlcm5lbC9yZXNfY291bnRlci5jCmluZGV4IDE2Y2JlYzIuLmVmYmZjMGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNfY291bnRlci5jCisrKyBiL2tlcm5lbC9yZXNfY291bnRlci5jCkBAIC0xMTMsNiArMTEzLDcgQEAKIAogCXJldCA9IC1FSU5WQUw7CiAKKwlzdHJzdHJpcChidWYpOwogCWlmICh3cml0ZV9zdHJhdGVneSkgewogCQlpZiAod3JpdGVfc3RyYXRlZ3koYnVmLCAmdG1wKSkgewogCQkJZ290byBvdXRfZnJlZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggODJhZWE4MS4uY2VlMTJjYyAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTQ4Niw2ICs0ODYsMjQgQEAKIAogRVhQT1JUX1NZTUJPTChhZGp1c3RfcmVzb3VyY2UpOwogCisvKioKKyAqIHJlc291cmNlX2FsaWdubWVudCAtIGNhbGN1bGF0ZSByZXNvdXJjZSdzIGFsaWdubWVudAorICogQHJlczogcmVzb3VyY2UgcG9pbnRlcgorICoKKyAqIFJldHVybnMgYWxpZ25tZW50IG9uIHN1Y2Nlc3MsIDAgKGludmFsaWQgYWxpZ25tZW50KSBvbiBmYWlsdXJlLgorICovCityZXNvdXJjZV9zaXplX3QgcmVzb3VyY2VfYWxpZ25tZW50KHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN3aXRjaCAocmVzLT5mbGFncyAmIChJT1JFU09VUkNFX1NJWkVBTElHTiB8IElPUkVTT1VSQ0VfU1RBUlRBTElHTikpIHsKKwljYXNlIElPUkVTT1VSQ0VfU0laRUFMSUdOOgorCQlyZXR1cm4gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwljYXNlIElPUkVTT1VSQ0VfU1RBUlRBTElHTjoKKwkJcmV0dXJuIHJlcy0+c3RhcnQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiAvKgogICogVGhpcyBpcyBjb21wYXRpYmlsaXR5IHN0dWZmIGZvciBJTyByZXNvdXJjZXMuCiAgKgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBmMjhmMTllLi41N2JhN2VhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNjYsNiArNjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CkBAIC0xMTQsNiArMTE4LDExIEBACiAgKi8KICNkZWZpbmUgREVGX1RJTUVTTElDRQkJKDEwMCAqIEhaIC8gMTAwMCkKIAorLyoKKyAqIHNpbmdsZSB2YWx1ZSB0aGF0IGRlbm90ZXMgcnVudGltZSA9PSBwZXJpb2QsIGllIHVubGltaXRlZCB0aW1lLgorICovCisjZGVmaW5lIFJVTlRJTUVfSU5GCSgodTY0KX4wVUxMKQorCiAjaWZkZWYgQ09ORklHX1NNUAogLyoKICAqIERpdmlkZSBhIGxvYWQgYnkgYSBzY2hlZCBncm91cCBjcHVfcG93ZXIgOiAobG9hZCAvIHNnLT5fX2NwdV9wb3dlcikKQEAgLTE1NSw2ICsxNjQsODQgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlW01BWF9SVF9QUklPXTsKIH07CiAKK3N0cnVjdCBydF9iYW5kd2lkdGggeworCS8qIG5lc3RzIGluc2lkZSB0aGUgcnEgbG9jazogKi8KKwlzcGlubG9ja190CQlydF9ydW50aW1lX2xvY2s7CisJa3RpbWVfdAkJCXJ0X3BlcmlvZDsKKwl1NjQJCQlydF9ydW50aW1lOworCXN0cnVjdCBocnRpbWVyCQlydF9wZXJpb2RfdGltZXI7Cit9OworCitzdGF0aWMgc3RydWN0IHJ0X2JhbmR3aWR0aCBkZWZfcnRfYmFuZHdpZHRoOworCitzdGF0aWMgaW50IGRvX3NjaGVkX3J0X3BlcmlvZF90aW1lcihzdHJ1Y3QgcnRfYmFuZHdpZHRoICpydF9iLCBpbnQgb3ZlcnJ1bik7CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBzY2hlZF9ydF9wZXJpb2RfdGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXN0cnVjdCBydF9iYW5kd2lkdGggKnJ0X2IgPQorCQljb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBydF9iYW5kd2lkdGgsIHJ0X3BlcmlvZF90aW1lcik7CisJa3RpbWVfdCBub3c7CisJaW50IG92ZXJydW47CisJaW50IGlkbGUgPSAwOworCisJZm9yICg7OykgeworCQlub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTsKKwkJb3ZlcnJ1biA9IGhydGltZXJfZm9yd2FyZCh0aW1lciwgbm93LCBydF9iLT5ydF9wZXJpb2QpOworCisJCWlmICghb3ZlcnJ1bikKKwkJCWJyZWFrOworCisJCWlkbGUgPSBkb19zY2hlZF9ydF9wZXJpb2RfdGltZXIocnRfYiwgb3ZlcnJ1bik7CisJfQorCisJcmV0dXJuIGlkbGUgPyBIUlRJTUVSX05PUkVTVEFSVCA6IEhSVElNRVJfUkVTVEFSVDsKK30KKworc3RhdGljCit2b2lkIGluaXRfcnRfYmFuZHdpZHRoKHN0cnVjdCBydF9iYW5kd2lkdGggKnJ0X2IsIHU2NCBwZXJpb2QsIHU2NCBydW50aW1lKQoreworCXJ0X2ItPnJ0X3BlcmlvZCA9IG5zX3RvX2t0aW1lKHBlcmlvZCk7CisJcnRfYi0+cnRfcnVudGltZSA9IHJ1bnRpbWU7CisKKwlzcGluX2xvY2tfaW5pdCgmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKKworCWhydGltZXJfaW5pdCgmcnRfYi0+cnRfcGVyaW9kX3RpbWVyLAorCQkJQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlydF9iLT5ydF9wZXJpb2RfdGltZXIuZnVuY3Rpb24gPSBzY2hlZF9ydF9wZXJpb2RfdGltZXI7CisJcnRfYi0+cnRfcGVyaW9kX3RpbWVyLmNiX21vZGUgPSBIUlRJTUVSX0NCX0lSUVNBRkVfTk9fU09GVElSUTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfcnRfYmFuZHdpZHRoKHN0cnVjdCBydF9iYW5kd2lkdGggKnJ0X2IpCit7CisJa3RpbWVfdCBub3c7CisKKwlpZiAocnRfYi0+cnRfcnVudGltZSA9PSBSVU5USU1FX0lORikKKwkJcmV0dXJuOworCisJaWYgKGhydGltZXJfYWN0aXZlKCZydF9iLT5ydF9wZXJpb2RfdGltZXIpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJnJ0X2ItPnJ0X3J1bnRpbWVfbG9jayk7CisJZm9yICg7OykgeworCQlpZiAoaHJ0aW1lcl9hY3RpdmUoJnJ0X2ItPnJ0X3BlcmlvZF90aW1lcikpCisJCQlicmVhazsKKworCQlub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKCZydF9iLT5ydF9wZXJpb2RfdGltZXIpOworCQlocnRpbWVyX2ZvcndhcmQoJnJ0X2ItPnJ0X3BlcmlvZF90aW1lciwgbm93LCBydF9iLT5ydF9wZXJpb2QpOworCQlocnRpbWVyX3N0YXJ0KCZydF9iLT5ydF9wZXJpb2RfdGltZXIsCisJCQkgICAgICBydF9iLT5ydF9wZXJpb2RfdGltZXIuZXhwaXJlcywKKwkJCSAgICAgIEhSVElNRVJfTU9ERV9BQlMpOworCX0KKwlzcGluX3VubG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKK30KKworI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorc3RhdGljIHZvaWQgZGVzdHJveV9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYikKK3sKKwlocnRpbWVyX2NhbmNlbCgmcnRfYi0+cnRfcGVyaW9kX3RpbWVyKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVECiAKICNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KQEAgLTE3NCw0MSArMjYxLDYgQEAKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICoqc2U7CiAJLyogcnVucXVldWUgIm93bmVkIiBieSB0aGlzIGdyb3VwIG9uIGVhY2ggY3B1ICovCiAJc3RydWN0IGNmc19ycSAqKmNmc19ycTsKLQotCS8qCi0JICogc2hhcmVzIGFzc2lnbmVkIHRvIGEgdGFzayBncm91cCBnb3Zlcm5zIGhvdyBtdWNoIG9mIGNwdSBiYW5kd2lkdGgKLQkgKiBpcyBhbGxvY2F0ZWQgdG8gdGhlIGdyb3VwLiBUaGUgbW9yZSBzaGFyZXMgYSBncm91cCBoYXMsIHRoZSBtb3JlIGlzCi0JICogdGhlIGNwdSBiYW5kd2lkdGggYWxsb2NhdGVkIHRvIGl0LgotCSAqCi0JICogRm9yIGV4LCBsZXRzIHNheSB0aGF0IHRoZXJlIGFyZSB0aHJlZSB0YXNrIGdyb3VwcywgQSwgQiBhbmQgQyB3aGljaAotCSAqIGhhdmUgYmVlbiBhc3NpZ25lZCBzaGFyZXMgMTAwMCwgMjAwMCBhbmQgMzAwMCByZXNwZWN0aXZlbHkuIFRoZW4sCi0JICogY3B1IGJhbmR3aWR0aCBhbGxvY2F0ZWQgYnkgdGhlIHNjaGVkdWxlciB0byB0YXNrIGdyb3VwcyBBLCBCIGFuZCBDCi0JICogc2hvdWxkIGJlOgotCSAqCi0JICoJQncoQSkgPSAxMDAwLygxMDAwKzIwMDArMzAwMCkgKiAxMDAgPSAxNi42NiUKLQkgKglCdyhCKSA9IDIwMDAvKDEwMDArMjAwMCszMDAwKSAqIDEwMCA9IDMzLjMzJQotCSAqCUJ3KEMpID0gMzAwMC8oMTAwMCsyMDAwKzMwMDApICogMTAwID0gNTAlCi0JICoKLQkgKiBUaGUgd2VpZ2h0IGFzc2lnbmVkIHRvIGEgdGFzayBncm91cCdzIHNjaGVkdWxhYmxlIGVudGl0aWVzIG9uIGV2ZXJ5Ci0JICogY3B1ICh0YXNrX2dyb3VwLnNlW2FfY3B1XS0+bG9hZC53ZWlnaHQpIGlzIGRlcml2ZWQgZnJvbSB0aGUgdGFzawotCSAqIGdyb3VwJ3Mgc2hhcmVzLiBGb3IgZXg6IGxldHMgc2F5IHRoYXQgdGFzayBncm91cCBBIGhhcyBiZWVuCi0JICogYXNzaWduZWQgc2hhcmVzIG9mIDEwMDAgYW5kIHRoZXJlIGFyZSB0d28gQ1BVcyBpbiBhIHN5c3RlbS4gVGhlbiwKLQkgKgotCSAqICB0Z19BLT5zZVswXS0+bG9hZC53ZWlnaHQgPSB0Z19BLT5zZVsxXS0+bG9hZC53ZWlnaHQgPSAxMDAwOwotCSAqCi0JICogTm90ZTogSXQncyBub3QgbmVjZXNzYXJ5IHRoYXQgZWFjaCBvZiBhIHRhc2sncyBncm91cCBzY2hlZHVsYWJsZQotCSAqCSBlbnRpdHkgaGF2ZSB0aGUgc2FtZSB3ZWlnaHQgb24gYWxsIENQVXMuIElmIHRoZSBncm91cAotCSAqCSBoYXMgMiBvZiBpdHMgdGFza3Mgb24gQ1BVMCBhbmQgMSB0YXNrIG9uIENQVTEsIHRoZW4gYQotCSAqCSBiZXR0ZXIgZGlzdHJpYnV0aW9uIG9mIHdlaWdodCBjb3VsZCBiZToKLQkgKgotCSAqCXRnX0EtPnNlWzBdLT5sb2FkLndlaWdodCA9IDIvMyAqIDIwMDAgPSAxMzMzCi0JICoJdGdfQS0+c2VbMV0tPmxvYWQud2VpZ2h0ID0gMS8yICogMjAwMCA9ICA2NjcKLQkgKgotCSAqIHJlYmFsYW5jZV9zaGFyZXMoKSBpcyByZXNwb25zaWJsZSBmb3IgZGlzdHJpYnV0aW5nIHRoZSBzaGFyZXMgb2YgYQotCSAqIHRhc2sgZ3JvdXBzIGxpa2UgdGhpcyBhbW9uZyB0aGUgZ3JvdXAncyBzY2hlZHVsYWJsZSBlbnRpdGllcyBhY3Jvc3MKLQkgKiBjcHVzLgotCSAqCi0JICovCiAJdW5zaWduZWQgbG9uZyBzaGFyZXM7CiAjZW5kaWYKIApAQCAtMjE2LDI5ICsyNjgsMzkgQEAKIAlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICoqcnRfc2U7CiAJc3RydWN0IHJ0X3JxICoqcnRfcnE7CiAKLQl1NjQgcnRfcnVudGltZTsKKwlzdHJ1Y3QgcnRfYmFuZHdpZHRoIHJ0X2JhbmR3aWR0aDsKICNlbmRpZgogCiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlzdHJ1Y3QgdGFza19ncm91cCAqcGFyZW50OworCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZ3M7CisJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKIH07CiAKKyNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAorCisvKgorICogUm9vdCB0YXNrIGdyb3VwLgorICogCUV2ZXJ5IFVJRCB0YXNrIGdyb3VwIChpbmNsdWRpbmcgaW5pdF90YXNrX2dyb3VwIGFrYSBVSUQtMCkgd2lsbAorICogCWJlIGEgY2hpbGQgdG8gdGhpcyBncm91cC4KKyAqLworc3RydWN0IHRhc2tfZ3JvdXAgcm9vdF90YXNrX2dyb3VwOworCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIC8qIERlZmF1bHQgdGFzayBncm91cCdzIHNjaGVkIGVudGl0eSBvbiBlYWNoIGNwdSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9lbnRpdHksIGluaXRfc2NoZWRfZW50aXR5KTsKIC8qIERlZmF1bHQgdGFzayBncm91cCdzIGNmc19ycSBvbiBlYWNoIGNwdSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjZnNfcnEsIGluaXRfY2ZzX3JxKSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCi1zdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqaW5pdF9zY2hlZF9lbnRpdHlfcFtOUl9DUFVTXTsKLXN0YXRpYyBzdHJ1Y3QgY2ZzX3JxICppbml0X2Nmc19ycV9wW05SX0NQVVNdOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5LCBpbml0X3NjaGVkX3J0X2VudGl0eSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJ0X3JxLCBpbml0X3J0X3JxKSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCi1zdGF0aWMgc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqaW5pdF9zY2hlZF9ydF9lbnRpdHlfcFtOUl9DUFVTXTsKLXN0YXRpYyBzdHJ1Y3QgcnRfcnEgKmluaXRfcnRfcnFfcFtOUl9DUFVTXTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgcm9vdF90YXNrX2dyb3VwIGluaXRfdGFza19ncm91cAogI2VuZGlmCiAKIC8qIHRhc2tfZ3JvdXBfbG9jayBzZXJpYWxpemVzIGFkZC9yZW1vdmUgb2YgdGFzayBncm91cHMgYW5kIGFsc28gY2hhbmdlcyB0bwpAQCAtMjUwLDIxICszMTIsMTMgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoZG9tc19jdXJfbXV0ZXgpOwogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLSNpZmRlZiBDT05GSUdfU01QCi0vKiBrZXJuZWwgdGhyZWFkIHRoYXQgcnVucyByZWJhbGFuY2Vfc2hhcmVzKCkgcGVyaW9kaWNhbGx5ICovCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpsYl9tb25pdG9yX3Rhc2s7Ci1zdGF0aWMgaW50IGxvYWRfYmFsYW5jZV9tb25pdG9yKHZvaWQgKnVudXNlZCk7Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpOwotCiAjaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKICMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQogI2Vsc2UKICMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECU5JQ0VfMF9MT0FECiAjZW5kaWYKIAotI2RlZmluZSBNSU5fR1JPVVBfU0hBUkVTCTIKKyNkZWZpbmUgTUlOX1NIQVJFUwkyCiAKIHN0YXRpYyBpbnQgaW5pdF90YXNrX2dyb3VwX2xvYWQgPSBJTklUX1RBU0tfR1JPVVBfTE9BRDsKICNlbmRpZgpAQCAtMjcyLDE3ICszMjYsNyBAQAogLyogRGVmYXVsdCB0YXNrIGdyb3VwLgogICoJRXZlcnkgdGFzayBpbiBzeXN0ZW0gYmVsb25nIHRvIHRoaXMgZ3JvdXAgYXQgYm9vdHVwLgogICovCi1zdHJ1Y3QgdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXAgPSB7Ci0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQkuc2UJPSBpbml0X3NjaGVkX2VudGl0eV9wLAotCS5jZnNfcnEgPSBpbml0X2Nmc19ycV9wLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQkucnRfc2UJPSBpbml0X3NjaGVkX3J0X2VudGl0eV9wLAotCS5ydF9ycQk9IGluaXRfcnRfcnFfcCwKLSNlbmRpZgotfTsKK3N0cnVjdCB0YXNrX2dyb3VwIGluaXRfdGFza19ncm91cDsKIAogLyogcmV0dXJuIGdyb3VwIHRvIHdoaWNoIGEgdGFzayBiZWxvbmdzICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICp0YXNrX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKQEAgLTM0MiwxMSArMzg2LDE1IEBACiAKIAlzdHJ1Y3QgcmJfcm9vdCB0YXNrc190aW1lbGluZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmJfbGVmdG1vc3Q7Ci0Jc3RydWN0IHJiX25vZGUgKnJiX2xvYWRfYmFsYW5jZV9jdXJyOwotCS8qICdjdXJyJyBwb2ludHMgdG8gY3VycmVudGx5IHJ1bm5pbmcgZW50aXR5IG9uIHRoaXMgY2ZzX3JxLgorCisJc3RydWN0IGxpc3RfaGVhZCB0YXNrczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpiYWxhbmNlX2l0ZXJhdG9yOworCisJLyoKKwkgKiAnY3VycicgcG9pbnRzIHRvIGN1cnJlbnRseSBydW5uaW5nIGVudGl0eSBvbiB0aGlzIGNmc19ycS4KIAkgKiBJdCBpcyBzZXQgdG8gTlVMTCBvdGhlcndpc2UgKGkuZSB3aGVuIG5vbmUgYXJlIGN1cnJlbnRseSBydW5uaW5nKS4KIAkgKi8KLQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpjdXJyOworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmN1cnIsICpuZXh0OwogCiAJdW5zaWduZWQgbG9uZyBucl9zcHJlYWRfb3ZlcjsKIApAQCAtMzYzLDYgKzQxMSw0MyBAQAogCSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGVhZl9jZnNfcnFfbGlzdDsKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CS8qIGdyb3VwIHRoYXQgIm93bnMiIHRoaXMgcnVucXVldWUgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBsb25nIHRhc2tfd2VpZ2h0OworCXVuc2lnbmVkIGxvbmcgc2hhcmVzOworCS8qCisJICogV2UgbmVlZCBzcGFjZSB0byBidWlsZCBhIHNjaGVkX2RvbWFpbiB3aWRlIHZpZXcgb2YgdGhlIGZ1bGwgdGFzaworCSAqIGdyb3VwIHRyZWUsIGluIG9yZGVyIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uCisJICogZHVyaW5nIHRoZSBsb2FkIGJhbGFuY2luZyB3ZSBwbGFjZSB0aGlzIGluIHRoZSBwZXIgY3B1IHRhc2sgZ3JvdXAKKwkgKiBoaWVyYXJjaHkuIFRoaXMgbGltaXRzIHRoZSBsb2FkIGJhbGFuY2luZyB0byBvbmUgaW5zdGFuY2UgcGVyIGNwdSwKKwkgKiBidXQgbW9yZSBzaG91bGQgbm90IGJlIG5lZWRlZCBhbnl3YXkuCisJICovCisJc3RydWN0IGFnZ3JlZ2F0ZV9zdHJ1Y3QgeworCQkvKgorCQkgKiAgIGxvYWQgPSB3ZWlnaHQoY3B1cykgKiBmKHRnKQorCQkgKgorCQkgKiBXaGVyZSBmKHRnKSBpcyB0aGUgcmVjdXJzaXZlIHdlaWdodCBmcmFjdGlvbiBhc3NpZ25lZCB0bworCQkgKiB0aGlzIGdyb3VwLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyBsb2FkOworCisJCS8qCisJCSAqIHBhcnQgb2YgdGhlIGdyb3VwIHdlaWdodCBkaXN0cmlidXRlZCB0byB0aGlzIHNwYW4uCisJCSAqLworCQl1bnNpZ25lZCBsb25nIHNoYXJlczsKKworCQkvKgorCQkgKiBUaGUgc3VtIG9mIGFsbCBydW5xdWV1ZSB3ZWlnaHRzIHdpdGhpbiB0aGlzIHNwYW4uCisJCSAqLworCQl1bnNpZ25lZCBsb25nIHJxX3dlaWdodDsKKworCQkvKgorCQkgKiBXZWlnaHQgY29udHJpYnV0ZWQgYnkgdGFza3M7IHRoaXMgaXMgdGhlIHBhcnQgd2UgY2FuCisJCSAqIGluZmx1ZW5jZSBieSBtb3ZpbmcgdGFza3MgYXJvdW5kLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyB0YXNrX3dlaWdodDsKKwl9IGFnZ3JlZ2F0ZTsKKyNlbmRpZgogI2VuZGlmCiB9OwogCkBAIC0zNzksNiArNDY0LDkgQEAKICNlbmRpZgogCWludCBydF90aHJvdHRsZWQ7CiAJdTY0IHJ0X3RpbWU7CisJdTY0IHJ0X3J1bnRpbWU7CisJLyogTmVzdHMgaW5zaWRlIHRoZSBycSBsb2NrOiAqLworCXNwaW5sb2NrX3QgcnRfcnVudGltZV9sb2NrOwogCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiAJdW5zaWduZWQgbG9uZyBydF9ucl9ib29zdGVkOwpAQCAtNDQxLDYgKzUyOSw3IEBACiAJdW5zaWduZWQgbG9uZyBjcHVfbG9hZFtDUFVfTE9BRF9JRFhfTUFYXTsKIAl1bnNpZ25lZCBjaGFyIGlkbGVfYXRfdGljazsKICNpZmRlZiBDT05GSUdfTk9fSFoKKwl1bnNpZ25lZCBsb25nIGxhc3RfdGlja19zZWVuOwogCXVuc2lnbmVkIGNoYXIgaW5fbm9oel9yZWNlbnRseTsKICNlbmRpZgogCS8qIGNhcHR1cmUgbG9hZCBmcm9tICphbGwqIHRhc2tzIG9uIHRoaXMgY3B1OiAqLwpAQCAtNDUwLDggKzUzOSw2IEBACiAKIAlzdHJ1Y3QgY2ZzX3JxIGNmczsKIAlzdHJ1Y3QgcnRfcnEgcnQ7Ci0JdTY0IHJ0X3BlcmlvZF9leHBpcmU7Ci0JaW50IHJ0X3Rocm90dGxlZDsKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJLyogbGlzdCBvZiBsZWFmIGNmc19ycSBvbiB0aGlzIGNwdTogKi8KQEAgLTU0NCw2ICs2MzEsMzIgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX05PX0haCitzdGF0aWMgaW5saW5lIGJvb2wgbm9oel9vbihpbnQgY3B1KQoreworCXJldHVybiB0aWNrX2dldF90aWNrX3NjaGVkKGNwdSktPm5vaHpfbW9kZSAhPSBOT0haX01PREVfSU5BQ1RJVkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG1heF9za2lwcGVkX3RpY2tzKHN0cnVjdCBycSAqcnEpCit7CisJcmV0dXJuIG5vaHpfb24oY3B1X29mKHJxKSkgPyBqaWZmaWVzIC0gcnEtPmxhc3RfdGlja19zZWVuICsgMiA6IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbGFzdF90aWNrX3NlZW4oc3RydWN0IHJxICpycSkKK3sKKwlycS0+bGFzdF90aWNrX3NlZW4gPSBqaWZmaWVzOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdTY0IG1heF9za2lwcGVkX3RpY2tzKHN0cnVjdCBycSAqcnEpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbGFzdF90aWNrX3NlZW4oc3RydWN0IHJxICpycSkKK3sKK30KKyNlbmRpZgorCiAvKgogICogVXBkYXRlIHRoZSBwZXItcnVucXVldWUgY2xvY2ssIGFzIGZpbmVncmFpbmVkIGFzIHRoZSBwbGF0Zm9ybSBjYW4gZ2l2ZQogICogdXMsIGJ1dCB3aXRob3V0IGFzc3VtaW5nIG1vbm90b25pY2l0eSwgZXRjLjoKQEAgLTU2OCw5ICs2ODEsMTIgQEAKIAkJLyoKIAkJICogQ2F0Y2ggdG9vIGxhcmdlIGZvcndhcmQganVtcHMgdG9vOgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KGNsb2NrICsgZGVsdGEgPiBycS0+dGlja190aW1lc3RhbXAgKyBUSUNLX05TRUMpKSB7Ci0JCQlpZiAoY2xvY2sgPCBycS0+dGlja190aW1lc3RhbXAgKyBUSUNLX05TRUMpCi0JCQkJY2xvY2sgPSBycS0+dGlja190aW1lc3RhbXAgKyBUSUNLX05TRUM7CisJCXU2NCBtYXhfanVtcCA9IG1heF9za2lwcGVkX3RpY2tzKHJxKSAqIFRJQ0tfTlNFQzsKKwkJdTY0IG1heF90aW1lID0gcnEtPnRpY2tfdGltZXN0YW1wICsgbWF4X2p1bXA7CisKKwkJaWYgKHVubGlrZWx5KGNsb2NrICsgZGVsdGEgPiBtYXhfdGltZSkpIHsKKwkJCWlmIChjbG9jayA8IG1heF90aW1lKQorCQkJCWNsb2NrID0gbWF4X3RpbWU7CiAJCQllbHNlCiAJCQkJY2xvY2srKzsKIAkJCXJxLT5jbG9ja19vdmVyZmxvd3MrKzsKQEAgLTYwNiwyMyArNzIyLDYgQEAKICNkZWZpbmUgdGFza19ycShwKQkJY3B1X3JxKHRhc2tfY3B1KHApKQogI2RlZmluZSBjcHVfY3VycihjcHUpCQkoY3B1X3JxKGNwdSktPmN1cnIpCiAKLXVuc2lnbmVkIGxvbmcgcnRfbmVlZHNfY3B1KGludCBjcHUpCi17Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwotCXU2NCBkZWx0YTsKLQotCWlmICghcnEtPnJ0X3Rocm90dGxlZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocnEtPmNsb2NrID4gcnEtPnJ0X3BlcmlvZF9leHBpcmUpCi0JCXJldHVybiAxOwotCi0JZGVsdGEgPSBycS0+cnRfcGVyaW9kX2V4cGlyZSAtIHJxLT5jbG9jazsKLQlkb19kaXYoZGVsdGEsIE5TRUNfUEVSX1NFQyAvIEhaKTsKLQotCXJldHVybiAodW5zaWduZWQgbG9uZylkZWx0YTsKLX0KLQogLyoKICAqIFR1bmFibGVzIHRoYXQgYmVjb21lIGNvbnN0YW50cyB3aGVuIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBvZmY6CiAgKi8KQEAgLTYzNSwyNiArNzM0LDEzNyBAQAogLyoKICAqIERlYnVnZ2luZzogdmFyaW91cyBmZWF0dXJlIGJpdHMKICAqLworCisjZGVmaW5lIFNDSEVEX0ZFQVQobmFtZSwgZW5hYmxlZCkJXAorCV9fU0NIRURfRkVBVF8jI25hbWUgLAorCiBlbnVtIHsKLQlTQ0hFRF9GRUFUX05FV19GQUlSX1NMRUVQRVJTCT0gMSwKLQlTQ0hFRF9GRUFUX1dBS0VVUF9QUkVFTVBUCT0gMiwKLQlTQ0hFRF9GRUFUX1NUQVJUX0RFQklUCQk9IDQsCi0JU0NIRURfRkVBVF9UUkVFX0FWRwkJPSA4LAotCVNDSEVEX0ZFQVRfQVBQUk9YX0FWRwkJPSAxNiwKLQlTQ0hFRF9GRUFUX0hSVElDSwkJPSAzMiwKLQlTQ0hFRF9GRUFUX0RPVUJMRV9USUNLCQk9IDY0LAorI2luY2x1ZGUgInNjaGVkX2ZlYXR1cmVzLmgiCiB9OwogCi1jb25zdF9kZWJ1ZyB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2ZlYXR1cmVzID0KLQkJU0NIRURfRkVBVF9ORVdfRkFJUl9TTEVFUEVSUwkqIDEgfAotCQlTQ0hFRF9GRUFUX1dBS0VVUF9QUkVFTVBUCSogMSB8Ci0JCVNDSEVEX0ZFQVRfU1RBUlRfREVCSVQJCSogMSB8Ci0JCVNDSEVEX0ZFQVRfVFJFRV9BVkcJCSogMCB8Ci0JCVNDSEVEX0ZFQVRfQVBQUk9YX0FWRwkJKiAwIHwKLQkJU0NIRURfRkVBVF9IUlRJQ0sJCSogMSB8Ci0JCVNDSEVEX0ZFQVRfRE9VQkxFX1RJQ0sJCSogMDsKKyN1bmRlZiBTQ0hFRF9GRUFUCiAKLSNkZWZpbmUgc2NoZWRfZmVhdCh4KSAoc3lzY3RsX3NjaGVkX2ZlYXR1cmVzICYgU0NIRURfRkVBVF8jI3gpCisjZGVmaW5lIFNDSEVEX0ZFQVQobmFtZSwgZW5hYmxlZCkJXAorCSgxVUwgPDwgX19TQ0hFRF9GRUFUXyMjbmFtZSkgKiBlbmFibGVkIHwKKworY29uc3RfZGVidWcgdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9mZWF0dXJlcyA9CisjaW5jbHVkZSAic2NoZWRfZmVhdHVyZXMuaCIKKwkwOworCisjdW5kZWYgU0NIRURfRkVBVAorCisjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCisjZGVmaW5lIFNDSEVEX0ZFQVQobmFtZSwgZW5hYmxlZCkJXAorCSNuYW1lICwKKworX19yZWFkX21vc3RseSBjaGFyICpzY2hlZF9mZWF0X25hbWVzW10gPSB7CisjaW5jbHVkZSAic2NoZWRfZmVhdHVyZXMuaCIKKwlOVUxMCit9OworCisjdW5kZWYgU0NIRURfRkVBVAorCitpbnQgc2NoZWRfZmVhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzY2hlZF9mZWF0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQlzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciAqYnVmOworCWludCByID0gMDsKKwlpbnQgbGVuID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHNjaGVkX2ZlYXRfbmFtZXNbaV07IGkrKykgeworCQlsZW4gKz0gc3RybGVuKHNjaGVkX2ZlYXRfbmFtZXNbaV0pOworCQlsZW4gKz0gNDsKKwl9CisKKwlidWYgPSBrbWFsbG9jKGxlbiArIDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IHNjaGVkX2ZlYXRfbmFtZXNbaV07IGkrKykgeworCQlpZiAoc3lzY3RsX3NjaGVkX2ZlYXR1cmVzICYgKDFVTCA8PCBpKSkKKwkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAiJXMgIiwgc2NoZWRfZmVhdF9uYW1lc1tpXSk7CisJCWVsc2UKKwkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAiTk9fJXMgIiwgc2NoZWRfZmVhdF9uYW1lc1tpXSk7CisJfQorCisJciArPSBzcHJpbnRmKGJ1ZiArIHIsICJcbiIpOworCVdBUk5fT04ociA+PSBsZW4gKyAyKTsKKworCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1Ziwgcik7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzY2hlZF9mZWF0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgYnVmWzY0XTsKKwljaGFyICpjbXAgPSBidWY7CisJaW50IG5lZyA9IDA7CisJaW50IGk7CisKKwlpZiAoY250ID4gNjMpCisJCWNudCA9IDYzOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NudF0gPSAwOworCisJaWYgKHN0cm5jbXAoYnVmLCAiTk9fIiwgMykgPT0gMCkgeworCQluZWcgPSAxOworCQljbXAgKz0gMzsKKwl9CisKKwlmb3IgKGkgPSAwOyBzY2hlZF9mZWF0X25hbWVzW2ldOyBpKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbihzY2hlZF9mZWF0X25hbWVzW2ldKTsKKworCQlpZiAoc3RybmNtcChjbXAsIHNjaGVkX2ZlYXRfbmFtZXNbaV0sIGxlbikgPT0gMCkgeworCQkJaWYgKG5lZykKKwkJCQlzeXNjdGxfc2NoZWRfZmVhdHVyZXMgJj0gfigxVUwgPDwgaSk7CisJCQllbHNlCisJCQkJc3lzY3RsX3NjaGVkX2ZlYXR1cmVzIHw9ICgxVUwgPDwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc2NoZWRfZmVhdF9uYW1lc1tpXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWxwLT5mX3BvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2hlZF9mZWF0X2ZvcHMgPSB7CisJLm9wZW4JPSBzY2hlZF9mZWF0X29wZW4sCisJLnJlYWQJPSBzY2hlZF9mZWF0X3JlYWQsCisJLndyaXRlCT0gc2NoZWRfZmVhdF93cml0ZSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZCkKK3sKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzY2hlZF9mZWF0dXJlcyIsIDA2NDQsIE5VTEwsIE5VTEwsCisJCQkmc2NoZWRfZmVhdF9mb3BzKTsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChzY2hlZF9pbml0X2RlYnVnKTsKKworI2VuZGlmCisKKyNkZWZpbmUgc2NoZWRfZmVhdCh4KSAoc3lzY3RsX3NjaGVkX2ZlYXR1cmVzICYgKDFVTCA8PCBfX1NDSEVEX0ZFQVRfIyN4KSkKIAogLyoKICAqIE51bWJlciBvZiB0YXNrcyB0byBpdGVyYXRlIGluIGEgc2luZ2xlIGJhbGFuY2UgcnVuLgpAQCAtNjY4LDE2ICs4NzgsODAgQEAKICAqLwogdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9ydF9wZXJpb2QgPSAxMDAwMDAwOwogCitzdGF0aWMgX19yZWFkX21vc3RseSBpbnQgc2NoZWR1bGVyX3J1bm5pbmc7CisKIC8qCiAgKiBwYXJ0IG9mIHRoZSBwZXJpb2QgdGhhdCB3ZSBhbGxvdyBydCB0YXNrcyB0byBydW4gaW4gdXMuCiAgKiBkZWZhdWx0OiAwLjk1cwogICovCiBpbnQgc3lzY3RsX3NjaGVkX3J0X3J1bnRpbWUgPSA5NTAwMDA7CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGdsb2JhbF9ydF9wZXJpb2Qodm9pZCkKK3sKKwlyZXR1cm4gKHU2NClzeXNjdGxfc2NoZWRfcnRfcGVyaW9kICogTlNFQ19QRVJfVVNFQzsKK30KKworc3RhdGljIGlubGluZSB1NjQgZ2xvYmFsX3J0X3J1bnRpbWUodm9pZCkKK3sKKwlpZiAoc3lzY3RsX3NjaGVkX3J0X3BlcmlvZCA8IDApCisJCXJldHVybiBSVU5USU1FX0lORjsKKworCXJldHVybiAodTY0KXN5c2N0bF9zY2hlZF9ydF9ydW50aW1lICogTlNFQ19QRVJfVVNFQzsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lX3N5bmNfdGhyZXNoID0gMTAwMDAwOworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZyBsb25nLCB0aW1lX29mZnNldCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZyBsb25nLCBwcmV2X2NwdV90aW1lKTsKKwogLyoKLSAqIHNpbmdsZSB2YWx1ZSB0aGF0IGRlbm90ZXMgcnVudGltZSA9PSBwZXJpb2QsIGllIHVubGltaXRlZCB0aW1lLgorICogR2xvYmFsIGxvY2sgd2hpY2ggd2UgdGFrZSBldmVyeSBub3cgYW5kIHRoZW4gdG8gc3luY2hyb25pemUKKyAqIHRoZSBDUFVzIHRpbWUuIFRoaXMgbWV0aG9kIGlzIG5vdCB3YXJwLXNhZmUsIGJ1dCBpdCdzIGdvb2QKKyAqIGVub3VnaCB0byBzeW5jaHJvbml6ZSBzbG93bHkgZGl2ZXJnaW5nIHRpbWUgc291cmNlcyBhbmQgdGh1cworICogaXQncyBnb29kIGVub3VnaCBmb3IgdHJhY2luZzoKICAqLwotI2RlZmluZSBSVU5USU1FX0lORgkoKHU2NCl+MFVMTCkKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZV9zeW5jX2xvY2spOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2X2dsb2JhbF90aW1lOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9fc3luY19jcHVfY2xvY2soY3ljbGVzX3QgdGltZSwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVfc3luY19sb2NrLCBmbGFncyk7CisKKwlpZiAodGltZSA8IHByZXZfZ2xvYmFsX3RpbWUpIHsKKwkJcGVyX2NwdSh0aW1lX29mZnNldCwgY3B1KSArPSBwcmV2X2dsb2JhbF90aW1lIC0gdGltZTsKKwkJdGltZSA9IHByZXZfZ2xvYmFsX3RpbWU7CisJfSBlbHNlIHsKKwkJcHJldl9nbG9iYWxfdGltZSA9IHRpbWU7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZV9zeW5jX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiB0aW1lOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9fY3B1X2Nsb2NrKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIG5vdzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBycSAqcnE7CisKKwkvKgorCSAqIE9ubHkgY2FsbCBzY2hlZF9jbG9jaygpIGlmIHRoZSBzY2hlZHVsZXIgaGFzIGFscmVhZHkgYmVlbgorCSAqIGluaXRpYWxpemVkIChzb21lIGNvZGUgbWlnaHQgY2FsbCBjcHVfY2xvY2soKSB2ZXJ5IGVhcmx5KToKKwkgKi8KKwlpZiAodW5saWtlbHkoIXNjaGVkdWxlcl9ydW5uaW5nKSkKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcnEgPSBjcHVfcnEoY3B1KTsKKwl1cGRhdGVfcnFfY2xvY2socnEpOworCW5vdyA9IHJxLT5jbG9jazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gbm93OworfQogCiAvKgogICogRm9yIGtlcm5lbC1pbnRlcm5hbCB1c2U6IGhpZ2gtc3BlZWQgKGJ1dCBzbGlnaHRseSBpbmNvcnJlY3QpIHBlci1jcHUKQEAgLTY4NSwyMiArOTU5LDE2IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgbG9uZyBjcHVfY2xvY2soaW50IGNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbm93OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJxICpycTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHJldl9jcHVfdGltZSwgdGltZSwgZGVsdGFfdGltZTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlycSA9IGNwdV9ycShjcHUpOwotCS8qCi0JICogT25seSBjYWxsIHNjaGVkX2Nsb2NrKCkgaWYgdGhlIHNjaGVkdWxlciBoYXMgYWxyZWFkeSBiZWVuCi0JICogaW5pdGlhbGl6ZWQgKHNvbWUgY29kZSBtaWdodCBjYWxsIGNwdV9jbG9jaygpIHZlcnkgZWFybHkpOgotCSAqLwotCWlmIChycS0+aWRsZSkKLQkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQlub3cgPSBycS0+Y2xvY2s7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXByZXZfY3B1X3RpbWUgPSBwZXJfY3B1KHByZXZfY3B1X3RpbWUsIGNwdSk7CisJdGltZSA9IF9fY3B1X2Nsb2NrKGNwdSkgKyBwZXJfY3B1KHRpbWVfb2Zmc2V0LCBjcHUpOworCWRlbHRhX3RpbWUgPSB0aW1lLXByZXZfY3B1X3RpbWU7CiAKLQlyZXR1cm4gbm93OworCWlmICh1bmxpa2VseShkZWx0YV90aW1lID4gdGltZV9zeW5jX3RocmVzaCkpCisJCXRpbWUgPSBfX3N5bmNfY3B1X2Nsb2NrKHRpbWUsIGNwdSk7CisKKwlyZXR1cm4gdGltZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdV9jbG9jayk7CiAKQEAgLTEwOTcsNiArMTM2NSw0OSBAQAogCXJlc2NoZWRfdGFzayhjcHVfY3VycihjcHUpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogfQorCisjaWZkZWYgQ09ORklHX05PX0haCisvKgorICogV2hlbiBhZGRfdGltZXJfb24oKSBlbnF1ZXVlcyBhIHRpbWVyIGludG8gdGhlIHRpbWVyIHdoZWVsIG9mIGFuCisgKiBpZGxlIENQVSB0aGVuIHRoaXMgdGltZXIgbWlnaHQgZXhwaXJlIGJlZm9yZSB0aGUgbmV4dCB0aW1lciBldmVudAorICogd2hpY2ggaXMgc2NoZWR1bGVkIHRvIHdha2UgdXAgdGhhdCBDUFUuIEluIGNhc2Ugb2YgYSBjb21wbGV0ZWx5CisgKiBpZGxlIHN5c3RlbSB0aGUgbmV4dCBldmVudCBtaWdodCBldmVuIGJlIGluZmluaXRlIHRpbWUgaW50byB0aGUKKyAqIGZ1dHVyZS4gd2FrZV91cF9pZGxlX2NwdSgpIGVuc3VyZXMgdGhhdCB0aGUgQ1BVIGlzIHdva2VuIHVwIGFuZAorICogbGVhdmVzIHRoZSBpbm5lciBpZGxlIGxvb3Agc28gdGhlIG5ld2x5IGFkZGVkIHRpbWVyIGlzIHRha2VuIGludG8KKyAqIGFjY291bnQgd2hlbiB0aGUgQ1BVIGdvZXMgYmFjayB0byBpZGxlIGFuZCBldmFsdWF0ZXMgdGhlIHRpbWVyCisgKiB3aGVlbCBmb3IgdGhlIG5leHQgdGltZXIgZXZlbnQuCisgKi8KK3ZvaWQgd2FrZV91cF9pZGxlX2NwdShpbnQgY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKworCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRoaXMgaXMgc2FmZSwgYXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgdGltZXIKKwkgKiB3aGVlbCBiYXNlIGxvY2sgb2YgKGNwdSkgaGVsZC4gV2hlbiB0aGUgQ1BVIGlzIG9uIHRoZSB3YXkKKwkgKiB0byBpZGxlIGFuZCBoYXMgbm90IHlldCBzZXQgcnEtPmN1cnIgdG8gaWRsZSB0aGVuIGl0IHdpbGwKKwkgKiBiZSBzZXJpYWxpemVkIG9uIHRoZSB0aW1lciB3aGVlbCBiYXNlIGxvY2sgYW5kIHRha2UgdGhlIG5ldworCSAqIHRpbWVyIGludG8gYWNjb3VudCBhdXRvbWF0aWNhbGx5LgorCSAqLworCWlmIChycS0+Y3VyciAhPSBycS0+aWRsZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXZSBjYW4gc2V0IFRJRl9SRVNDSEVEIG9uIHRoZSBpZGxlIHRhc2sgb2YgdGhlIG90aGVyIENQVQorCSAqIGxvY2tsZXNzLiBUaGUgd29yc3QgY2FzZSBpcyB0aGF0IHRoZSBvdGhlciBDUFUgcnVucyB0aGUKKwkgKiBpZGxlIHRhc2sgdGhyb3VnaCBhbiBhZGRpdGlvbmFsIE5PT1Agc2NoZWR1bGUoKQorCSAqLworCXNldF90c2tfdGhyZWFkX2ZsYWcocnEtPmlkbGUsIFRJRl9ORUVEX1JFU0NIRUQpOworCisJLyogTkVFRF9SRVNDSEVEIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdCBwb2xsaW5nICovCisJc21wX21iKCk7CisJaWYgKCF0c2tfaXNfcG9sbGluZyhycS0+aWRsZSkpCisJCXNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKK30KKyNlbmRpZgorCiAjZWxzZQogc3RhdGljIHZvaWQgX19yZXNjaGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgdGlmX2JpdCkKIHsKQEAgLTExMTgsNiArMTQyOSw5IEBACiAgKi8KICNkZWZpbmUgU1JSKHgsIHkpICgoKHgpICsgKDFVTCA8PCAoKHkpIC0gMSkpKSA+PiAoeSkpCiAKKy8qCisgKiBkZWx0YSAqPSB3ZWlnaHQgLyBsdworICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZwogY2FsY19kZWx0YV9taW5lKHVuc2lnbmVkIGxvbmcgZGVsdGFfZXhlYywgdW5zaWduZWQgbG9uZyB3ZWlnaHQsCiAJCXN0cnVjdCBsb2FkX3dlaWdodCAqbHcpCkBAIC0xMTI1LDcgKzE0MzksNyBAQAogCXU2NCB0bXA7CiAKIAlpZiAodW5saWtlbHkoIWx3LT5pbnZfd2VpZ2h0KSkKLQkJbHctPmludl93ZWlnaHQgPSAoV01VTFRfQ09OU1QgLSBsdy0+d2VpZ2h0LzIpIC8gbHctPndlaWdodCArIDE7CisJCWx3LT5pbnZfd2VpZ2h0ID0gKFdNVUxUX0NPTlNULWx3LT53ZWlnaHQvMikgLyAobHctPndlaWdodCsxKTsKIAogCXRtcCA9ICh1NjQpZGVsdGFfZXhlYyAqIHdlaWdodDsKIAkvKgpAQCAtMTE0MCwyMCArMTQ1NCwxNiBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZyltaW4odG1wLCAodTY0KSh1bnNpZ25lZCBsb25nKUxPTkdfTUFYKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1jYWxjX2RlbHRhX2ZhaXIodW5zaWduZWQgbG9uZyBkZWx0YV9leGVjLCBzdHJ1Y3QgbG9hZF93ZWlnaHQgKmx3KQotewotCXJldHVybiBjYWxjX2RlbHRhX21pbmUoZGVsdGFfZXhlYywgTklDRV8wX0xPQUQsIGx3KTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9sb2FkX2FkZChzdHJ1Y3QgbG9hZF93ZWlnaHQgKmx3LCB1bnNpZ25lZCBsb25nIGluYykKIHsKIAlsdy0+d2VpZ2h0ICs9IGluYzsKKwlsdy0+aW52X3dlaWdodCA9IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbG9hZF9zdWIoc3RydWN0IGxvYWRfd2VpZ2h0ICpsdywgdW5zaWduZWQgbG9uZyBkZWMpCiB7CiAJbHctPndlaWdodCAtPSBkZWM7CisJbHctPmludl93ZWlnaHQgPSAwOwogfQogCiAvKgpAQCAtMTI1Niw2ICsxNTY2LDM3NSBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2xvYWQoaW50IGNwdSwgaW50IHR5cGUpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2F2Z19sb2FkX3Blcl90YXNrKGludCBjcHUpOwogc3RhdGljIGludCB0YXNrX2hvdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBub3csIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKTsKKworI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisKKy8qCisgKiBHcm91cCBsb2FkIGJhbGFuY2luZy4KKyAqCisgKiBXZSBjYWxjdWxhdGUgYSBmZXcgYmFsYW5jZSBkb21haW4gd2lkZSBhZ2dyZWdhdGUgbnVtYmVyczsgbG9hZCBhbmQgd2VpZ2h0LgorICogR2l2ZW4gdGhlIHBpY3R1cmVzIGJlbG93LCBhbmQgYXNzdW1pbmcgZWFjaCBpdGVtIGhhcyBlcXVhbCB3ZWlnaHQ6CisgKgorICogICAgICAgICByb290ICAgICAgICAgIDEgLSB0aHJlYWQKKyAqICAgICAgICAgLyB8IFwgICAgICAgICBBIC0gZ3JvdXAKKyAqICAgICAgICBBICAxICBCCisgKiAgICAgICAvfFwgICAvIFwKKyAqICAgICAgQyAyIEQgMyAgIDQKKyAqICAgICAgfCAgIHwKKyAqICAgICAgNSAgIDYKKyAqCisgKiBsb2FkOgorICogICAgQSBhbmQgQiBnZXQgMS8zLXJkIG9mIHRoZSB0b3RhbCBsb2FkLiBDIGFuZCBEIGdldCAxLzMtcmQgb2YgQSdzIDEvMy1yZCwKKyAqICAgIHdoaWNoIGVxdWFscyAxLzktdGggb2YgdGhlIHRvdGFsIGxvYWQuCisgKgorICogc2hhcmVzOgorICogICAgVGhlIHdlaWdodCBvZiB0aGlzIGdyb3VwIG9uIHRoZSBzZWxlY3RlZCBjcHVzLgorICoKKyAqIHJxX3dlaWdodDoKKyAqICAgIERpcmVjdCBzdW0gb2YgYWxsIHRoZSBjcHUncyB0aGVpciBycSB3ZWlnaHQsIGUuZy4gQSB3b3VsZCBnZXQgMyB3aGlsZQorICogICAgQiB3b3VsZCBnZXQgMi4KKyAqCisgKiB0YXNrX3dlaWdodDoKKyAqICAgIFBhcnQgb2YgdGhlIHJxX3dlaWdodCBjb250cmlidXRlZCBieSB0YXNrczsgYWxsIGdyb3VwcyBleGNlcHQgQiB3b3VsZAorICogICAgZ2V0IDEsIEIgZ2V0cyAyLgorICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFnZ3JlZ2F0ZV9zdHJ1Y3QgKgorYWdncmVnYXRlKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCit7CisJcmV0dXJuICZ0Zy0+Y2ZzX3JxW3NkLT5maXJzdF9jcHVdLT5hZ2dyZWdhdGU7Cit9CisKK3R5cGVkZWYgdm9pZCAoKmFnZ3JlZ2F0ZV9mdW5jKShzdHJ1Y3QgdGFza19ncm91cCAqLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICopOworCisvKgorICogSXRlcmF0ZSB0aGUgZnVsbCB0cmVlLCBjYWxsaW5nIEBkb3duIHdoZW4gZmlyc3QgZW50ZXJpbmcgYSBub2RlIGFuZCBAdXAgd2hlbgorICogbGVhdmluZyBpdCBmb3IgdGhlIGZpbmFsIHRpbWUuCisgKi8KK3N0YXRpYwordm9pZCBhZ2dyZWdhdGVfd2Fsa190cmVlKGFnZ3JlZ2F0ZV9mdW5jIGRvd24sIGFnZ3JlZ2F0ZV9mdW5jIHVwLAorCQkJIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQoreworCXN0cnVjdCB0YXNrX2dyb3VwICpwYXJlbnQsICpjaGlsZDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwYXJlbnQgPSAmcm9vdF90YXNrX2dyb3VwOworZG93bjoKKwkoKmRvd24pKHBhcmVudCwgc2QpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNoaWxkLCAmcGFyZW50LT5jaGlsZHJlbiwgc2libGluZ3MpIHsKKwkJcGFyZW50ID0gY2hpbGQ7CisJCWdvdG8gZG93bjsKKwordXA6CisJCWNvbnRpbnVlOworCX0KKwkoKnVwKShwYXJlbnQsIHNkKTsKKworCWNoaWxkID0gcGFyZW50OworCXBhcmVudCA9IHBhcmVudC0+cGFyZW50OworCWlmIChwYXJlbnQpCisJCWdvdG8gdXA7CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGFnZ3JlZ2F0ZSBydW5xdWV1ZSB3ZWlnaHQuCisgKi8KK3N0YXRpYwordm9pZCBhZ2dyZWdhdGVfZ3JvdXBfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCit7CisJdW5zaWduZWQgbG9uZyBycV93ZWlnaHQgPSAwOworCXVuc2lnbmVkIGxvbmcgdGFza193ZWlnaHQgPSAwOworCWludCBpOworCisJZm9yX2VhY2hfY3B1X21hc2soaSwgc2QtPnNwYW4pIHsKKwkJcnFfd2VpZ2h0ICs9IHRnLT5jZnNfcnFbaV0tPmxvYWQud2VpZ2h0OworCQl0YXNrX3dlaWdodCArPSB0Zy0+Y2ZzX3JxW2ldLT50YXNrX3dlaWdodDsKKwl9CisKKwlhZ2dyZWdhdGUodGcsIHNkKS0+cnFfd2VpZ2h0ID0gcnFfd2VpZ2h0OworCWFnZ3JlZ2F0ZSh0Zywgc2QpLT50YXNrX3dlaWdodCA9IHRhc2tfd2VpZ2h0OworfQorCisvKgorICogUmVkaXN0cmlidXRlIHRnLT5zaGFyZXMgYW1vbmdzdCBhbGwgdGctPmNmc19ycVtdcy4KKyAqLworc3RhdGljIHZvaWQgX19hZ2dyZWdhdGVfcmVkaXN0cmlidXRlX3NoYXJlcyhzdHJ1Y3QgdGFza19ncm91cCAqdGcpCit7CisJaW50IGksIG1heF9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBycV93ZWlnaHQgPSAwOworCXVuc2lnbmVkIGxvbmcgc2hhcmVzLCBtYXhfc2hhcmVzID0gMCwgc2hhcmVzX3JlbSA9IHRnLT5zaGFyZXM7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJcnFfd2VpZ2h0ICs9IHRnLT5jZnNfcnFbaV0tPmxvYWQud2VpZ2h0OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJLyoKKwkJICogZGl2aWRlIHNoYXJlcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHJxX3dlaWdodHMuCisJCSAqLworCQlzaGFyZXMgPSB0Zy0+c2hhcmVzICogdGctPmNmc19ycVtpXS0+bG9hZC53ZWlnaHQ7CisJCXNoYXJlcyAvPSBycV93ZWlnaHQgKyAxOworCisJCXRnLT5jZnNfcnFbaV0tPnNoYXJlcyA9IHNoYXJlczsKKworCQlpZiAoc2hhcmVzID4gbWF4X3NoYXJlcykgeworCQkJbWF4X3NoYXJlcyA9IHNoYXJlczsKKwkJCW1heF9jcHUgPSBpOworCQl9CisJCXNoYXJlc19yZW0gLT0gc2hhcmVzOworCX0KKworCS8qCisJICogRW5zdXJlIGl0IGFsbCBhZGRzIHVwIHRvIHRnLT5zaGFyZXM7IHdlIGNhbiBsb29zZSBhIGZldworCSAqIGR1ZSB0byByb3VuZGluZyBkb3duIHdoZW4gY29tcHV0aW5nIHRoZSBwZXItY3B1IHNoYXJlcy4KKwkgKi8KKwlpZiAoc2hhcmVzX3JlbSkKKwkJdGctPmNmc19ycVttYXhfY3B1XS0+c2hhcmVzICs9IHNoYXJlc19yZW07Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSB3ZWlnaHQgb2YgdGhpcyBncm91cCBvbiB0aGUgZ2l2ZW4gY3B1cy4KKyAqLworc3RhdGljCit2b2lkIGFnZ3JlZ2F0ZV9ncm91cF9zaGFyZXMoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNoYXJlcyA9IDA7CisJaW50IGk7CisKK2FnYWluOgorCWZvcl9lYWNoX2NwdV9tYXNrKGksIHNkLT5zcGFuKQorCQlzaGFyZXMgKz0gdGctPmNmc19ycVtpXS0+c2hhcmVzOworCisJLyoKKwkgKiBXaGVuIHRoZSBzcGFuIGRvZXNuJ3QgaGF2ZSBhbnkgc2hhcmVzIGFzc2lnbmVkLCBidXQgZG9lcyBoYXZlCisJICogdGFza3MgdG8gcnVuIGRvIGEgbWFjaGluZSB3aWRlIHJlYmFsYW5jZSAoc2hvdWxkIGJlIHJhcmUpLgorCSAqLworCWlmICh1bmxpa2VseSghc2hhcmVzICYmIGFnZ3JlZ2F0ZSh0Zywgc2QpLT5ycV93ZWlnaHQpKSB7CisJCV9fYWdncmVnYXRlX3JlZGlzdHJpYnV0ZV9zaGFyZXModGcpOworCQlnb3RvIGFnYWluOworCX0KKworCWFnZ3JlZ2F0ZSh0Zywgc2QpLT5zaGFyZXMgPSBzaGFyZXM7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBsb2FkIGZyYWN0aW9uIGFzc2lnbmVkIHRvIHRoaXMgZ3JvdXAsIHJlbGllcyBvbiB0aGUgYWdncmVnYXRlCisgKiB3ZWlnaHQgYW5kIHRoaXMgZ3JvdXAncyBwYXJlbnQncyBsb2FkLCBpLmUuIHRvcC1kb3duLgorICovCitzdGF0aWMKK3ZvaWQgYWdncmVnYXRlX2dyb3VwX2xvYWQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvYWQ7CisKKwlpZiAoIXRnLT5wYXJlbnQpIHsKKwkJaW50IGk7CisKKwkJbG9hZCA9IDA7CisJCWZvcl9lYWNoX2NwdV9tYXNrKGksIHNkLT5zcGFuKQorCQkJbG9hZCArPSBjcHVfcnEoaSktPmxvYWQud2VpZ2h0OworCisJfSBlbHNlIHsKKwkJbG9hZCA9IGFnZ3JlZ2F0ZSh0Zy0+cGFyZW50LCBzZCktPmxvYWQ7CisKKwkJLyoKKwkJICogc2hhcmVzIGlzIG91ciB3ZWlnaHQgaW4gdGhlIHBhcmVudCdzIHJxIHNvCisJCSAqIHNoYXJlcy9wYXJlbnQtPnJxX3dlaWdodCBnaXZlcyBvdXIgZnJhY3Rpb24gb2YgdGhlIGxvYWQKKwkJICovCisJCWxvYWQgKj0gYWdncmVnYXRlKHRnLCBzZCktPnNoYXJlczsKKwkJbG9hZCAvPSBhZ2dyZWdhdGUodGctPnBhcmVudCwgc2QpLT5ycV93ZWlnaHQgKyAxOworCX0KKworCWFnZ3JlZ2F0ZSh0Zywgc2QpLT5sb2FkID0gbG9hZDsKK30KKworc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcyk7CisKKy8qCisgKiBDYWxjdWxhdGUgYW5kIHNldCB0aGUgY3B1J3MgZ3JvdXAgc2hhcmVzLgorICovCitzdGF0aWMgdm9pZAorX191cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCQkJICBpbnQgdGNwdSkKK3sKKwlpbnQgYm9vc3QgPSAwOworCXVuc2lnbmVkIGxvbmcgc2hhcmVzOworCXVuc2lnbmVkIGxvbmcgcnFfd2VpZ2h0OworCisJaWYgKCF0Zy0+c2VbdGNwdV0pCisJCXJldHVybjsKKworCXJxX3dlaWdodCA9IHRnLT5jZnNfcnFbdGNwdV0tPmxvYWQud2VpZ2h0OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgY3VycmVudGx5IG5vIHRhc2tzIG9uIHRoZSBjcHUgcHJldGVuZCB0aGVyZSBpcyBvbmUgb2YKKwkgKiBhdmVyYWdlIGxvYWQgc28gdGhhdCB3aGVuIGEgbmV3IHRhc2sgZ2V0cyB0byBydW4gaGVyZSBpdCB3aWxsIG5vdAorCSAqIGdldCBkZWxheWVkIGJ5IGdyb3VwIHN0YXJ2YXRpb24uCisJICovCisJaWYgKCFycV93ZWlnaHQpIHsKKwkJYm9vc3QgPSAxOworCQlycV93ZWlnaHQgPSBOSUNFXzBfTE9BRDsKKwl9CisKKwkvKgorCSAqICAgICAgICAgICBcU3VtIHNoYXJlcyAqIHJxX3dlaWdodAorCSAqIHNoYXJlcyA9ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgICAgICAgICAgXFN1bSBycV93ZWlnaHQKKwkgKgorCSAqLworCXNoYXJlcyA9IGFnZ3JlZ2F0ZSh0Zywgc2QpLT5zaGFyZXMgKiBycV93ZWlnaHQ7CisJc2hhcmVzIC89IGFnZ3JlZ2F0ZSh0Zywgc2QpLT5ycV93ZWlnaHQgKyAxOworCisJLyoKKwkgKiByZWNvcmQgdGhlIGFjdHVhbCBudW1iZXIgb2Ygc2hhcmVzLCBub3QgdGhlIGJvb3N0ZWQgYW1vdW50LgorCSAqLworCXRnLT5jZnNfcnFbdGNwdV0tPnNoYXJlcyA9IGJvb3N0ID8gMCA6IHNoYXJlczsKKworCWlmIChzaGFyZXMgPCBNSU5fU0hBUkVTKQorCQlzaGFyZXMgPSBNSU5fU0hBUkVTOworCisJX19zZXRfc2Vfc2hhcmVzKHRnLT5zZVt0Y3B1XSwgc2hhcmVzKTsKK30KKworLyoKKyAqIFJlLWFkanVzdCB0aGUgd2VpZ2h0cyBvbiB0aGUgY3B1IHRoZSB0YXNrIGNhbWUgZnJvbSBhbmQgb24gdGhlIGNwdSB0aGUKKyAqIHRhc2sgd2VudCB0by4KKyAqLworc3RhdGljIHZvaWQKK19fbW92ZV9ncm91cF9zaGFyZXMoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkJICAgIGludCBzY3B1LCBpbnQgZGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHNoYXJlczsKKworCXNoYXJlcyA9IHRnLT5jZnNfcnFbc2NwdV0tPnNoYXJlcyArIHRnLT5jZnNfcnFbZGNwdV0tPnNoYXJlczsKKworCV9fdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUodGcsIHNkLCBzY3B1KTsKKwlfX3VwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBzZCwgZGNwdSk7CisKKwkvKgorCSAqIGVuc3VyZSB3ZSBuZXZlciBsb29zZSBzaGFyZXMgZHVlIHRvIHJvdW5kaW5nIGVycm9ycyBpbiB0aGUKKwkgKiBhYm92ZSByZWRpc3RyaWJ1dGlvbi4KKwkgKi8KKwlzaGFyZXMgLT0gdGctPmNmc19ycVtzY3B1XS0+c2hhcmVzICsgdGctPmNmc19ycVtkY3B1XS0+c2hhcmVzOworCWlmIChzaGFyZXMpCisJCXRnLT5jZnNfcnFbZGNwdV0tPnNoYXJlcyArPSBzaGFyZXM7Cit9CisKKy8qCisgKiBCZWNhdXNlIGNoYW5naW5nIGEgZ3JvdXAncyBzaGFyZXMgY2hhbmdlcyB0aGUgd2VpZ2h0IG9mIHRoZSBzdXBlci1ncm91cAorICogd2UgbmVlZCB0byB3YWxrIHVwIHRoZSB0cmVlIGFuZCBjaGFuZ2UgYWxsIHNoYXJlcyB1bnRpbCB3ZSBoaXQgdGhlIHJvb3QuCisgKi8KK3N0YXRpYyB2b2lkCittb3ZlX2dyb3VwX3NoYXJlcyhzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCQkgIGludCBzY3B1LCBpbnQgZGNwdSkKK3sKKwl3aGlsZSAodGcpIHsKKwkJX19tb3ZlX2dyb3VwX3NoYXJlcyh0Zywgc2QsIHNjcHUsIGRjcHUpOworCQl0ZyA9IHRnLT5wYXJlbnQ7CisJfQorfQorCitzdGF0aWMKK3ZvaWQgYWdncmVnYXRlX2dyb3VwX3NldF9zaGFyZXMoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNoYXJlcyA9IGFnZ3JlZ2F0ZSh0Zywgc2QpLT5zaGFyZXM7CisJaW50IGk7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhpLCBzZC0+c3BhbikgeworCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGkpOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCQlfX3VwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBzZCwgaSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisJfQorCisJYWdncmVnYXRlX2dyb3VwX3NoYXJlcyh0Zywgc2QpOworCisJLyoKKwkgKiBlbnN1cmUgd2UgbmV2ZXIgbG9vc2Ugc2hhcmVzIGR1ZSB0byByb3VuZGluZyBlcnJvcnMgaW4gdGhlCisJICogYWJvdmUgcmVkaXN0cmlidXRpb24uCisJICovCisJc2hhcmVzIC09IGFnZ3JlZ2F0ZSh0Zywgc2QpLT5zaGFyZXM7CisJaWYgKHNoYXJlcykgeworCQl0Zy0+Y2ZzX3JxW3NkLT5maXJzdF9jcHVdLT5zaGFyZXMgKz0gc2hhcmVzOworCQlhZ2dyZWdhdGUodGcsIHNkKS0+c2hhcmVzICs9IHNoYXJlczsKKwl9Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGFjY3VtdWxhdGl2ZSB3ZWlnaHQgYW5kIHJlY3Vyc2l2ZSBsb2FkIG9mIGVhY2ggdGFzayBncm91cAorICogd2hpbGUgd2Fsa2luZyBkb3duIHRoZSB0cmVlLgorICovCitzdGF0aWMKK3ZvaWQgYWdncmVnYXRlX2dldF9kb3duKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCit7CisJYWdncmVnYXRlX2dyb3VwX3dlaWdodCh0Zywgc2QpOworCWFnZ3JlZ2F0ZV9ncm91cF9zaGFyZXModGcsIHNkKTsKKwlhZ2dyZWdhdGVfZ3JvdXBfbG9hZCh0Zywgc2QpOworfQorCisvKgorICogUmViYWxhbmNlIHRoZSBjcHUgc2hhcmVzIHdoaWxlIHdhbGtpbmcgYmFjayB1cCB0aGUgdHJlZS4KKyAqLworc3RhdGljCit2b2lkIGFnZ3JlZ2F0ZV9nZXRfdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKK3sKKwlhZ2dyZWdhdGVfZ3JvdXBfc2V0X3NoYXJlcyh0Zywgc2QpOworfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3BpbmxvY2tfdCwgYWdncmVnYXRlX2xvY2spOworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9hZ2dyZWdhdGUodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQlzcGluX2xvY2tfaW5pdCgmcGVyX2NwdShhZ2dyZWdhdGVfbG9jaywgaSkpOworfQorCitzdGF0aWMgaW50IGdldF9hZ2dyZWdhdGUoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCit7CisJaWYgKCFzcGluX3RyeWxvY2soJnBlcl9jcHUoYWdncmVnYXRlX2xvY2ssIHNkLT5maXJzdF9jcHUpKSkKKwkJcmV0dXJuIDA7CisKKwlhZ2dyZWdhdGVfd2Fsa190cmVlKGFnZ3JlZ2F0ZV9nZXRfZG93biwgYWdncmVnYXRlX2dldF91cCwgc2QpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwdXRfYWdncmVnYXRlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQoreworCXNwaW5fdW5sb2NrKCZwZXJfY3B1KGFnZ3JlZ2F0ZV9sb2NrLCBzZC0+Zmlyc3RfY3B1KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNmc19ycV9zZXRfc2hhcmVzKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpCit7CisJY2ZzX3JxLT5zaGFyZXMgPSBzaGFyZXM7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2FnZ3JlZ2F0ZSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfYWdncmVnYXRlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2FnZ3JlZ2F0ZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKK3sKK30KKyNlbmRpZgorCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKKyNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorc3RhdGljIHZvaWQgY2ZzX3JxX3NldF9zaGFyZXMoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCB1bnNpZ25lZCBsb25nIHNoYXJlcykKK3sKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaW5jbHVkZSAic2NoZWRfc3RhdHMuaCIKQEAgLTE0MzMsNiArMjExMiwxMiBAQAogewogCXM2NCBkZWx0YTsKIAorCS8qCisJICogQnVkZHkgY2FuZGlkYXRlcyBhcmUgY2FjaGUgaG90OgorCSAqLworCWlmIChzY2hlZF9mZWF0KENBQ0hFX0hPVF9CVUREWSkgJiYgKCZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bmV4dCkpCisJCXJldHVybiAxOworCiAJaWYgKHAtPnNjaGVkX2NsYXNzICE9ICZmYWlyX3NjaGVkX2NsYXNzKQogCQlyZXR1cm4gMDsKIApAQCAtMTcyMCwxNyArMjQwNSwxNyBAQAogICogZmluZF9pZGxlc3RfY3B1IC0gZmluZCB0aGUgaWRsZXN0IGNwdSBhbW9uZyB0aGUgY3B1cyBpbiBncm91cC4KICAqLwogc3RhdGljIGludAotZmluZF9pZGxlc3RfY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHRoaXNfY3B1KQorZmluZF9pZGxlc3RfY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHRoaXNfY3B1LAorCQljcHVtYXNrX3QgKnRtcCkKIHsKLQljcHVtYXNrX3QgdG1wOwogCXVuc2lnbmVkIGxvbmcgbG9hZCwgbWluX2xvYWQgPSBVTE9OR19NQVg7CiAJaW50IGlkbGVzdCA9IC0xOwogCWludCBpOwogCiAJLyogVHJhdmVyc2Ugb25seSB0aGUgYWxsb3dlZCBDUFVzICovCi0JY3B1c19hbmQodG1wLCBncm91cC0+Y3B1bWFzaywgcC0+Y3B1c19hbGxvd2VkKTsKKwljcHVzX2FuZCgqdG1wLCBncm91cC0+Y3B1bWFzaywgcC0+Y3B1c19hbGxvd2VkKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIHRtcCkgeworCWZvcl9lYWNoX2NwdV9tYXNrKGksICp0bXApIHsKIAkJbG9hZCA9IHdlaWdodGVkX2NwdWxvYWQoaSk7CiAKIAkJaWYgKGxvYWQgPCBtaW5fbG9hZCB8fCAobG9hZCA9PSBtaW5fbG9hZCAmJiBpID09IHRoaXNfY3B1KSkgewpAQCAtMTc2OSw3ICsyNDU0LDcgQEAKIAl9CiAKIAl3aGlsZSAoc2QpIHsKLQkJY3B1bWFza190IHNwYW47CisJCWNwdW1hc2tfdCBzcGFuLCB0bXBtYXNrOwogCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwogCQlpbnQgbmV3X2NwdSwgd2VpZ2h0OwogCkBAIC0xNzg1LDcgKzI0NzAsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQluZXdfY3B1ID0gZmluZF9pZGxlc3RfY3B1KGdyb3VwLCB0LCBjcHUpOworCQluZXdfY3B1ID0gZmluZF9pZGxlc3RfY3B1KGdyb3VwLCB0LCBjcHUsICZ0bXBtYXNrKTsKIAkJaWYgKG5ld19jcHUgPT0gLTEgfHwgbmV3X2NwdSA9PSBjcHUpIHsKIAkJCS8qIE5vdyB0cnkgYmFsYW5jaW5nIGF0IGEgbG93ZXIgZG9tYWluIGxldmVsIG9mIGNwdSAqLwogCQkJc2QgPSBzZC0+Y2hpbGQ7CkBAIC0xODMxLDYgKzI1MTYsMTAgQEAKIAlsb25nIG9sZF9zdGF0ZTsKIAlzdHJ1Y3QgcnEgKnJxOwogCisJaWYgKCFzY2hlZF9mZWF0KFNZTkNfV0FLRVVQUykpCisJCXN5bmMgPSAwOworCisJc21wX3dtYigpOwogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJb2xkX3N0YXRlID0gcC0+c3RhdGU7CiAJaWYgKCEob2xkX3N0YXRlICYgc3RhdGUpKQpAQCAtMTg5MSwxMCArMjU4MCwxMSBAQAogCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX3dha2V1cHNfcmVtb3RlKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCWFjdGl2YXRlX3Rhc2socnEsIHAsIDEpOwotCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCk7CiAJc3VjY2VzcyA9IDE7CiAKIG91dF9ydW5uaW5nOgorCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCk7CisKIAlwLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXApCkBAIC0xOTI4LDYgKzI2MTgsOCBAQAogCXAtPnNlLmV4ZWNfc3RhcnQJCT0gMDsKIAlwLT5zZS5zdW1fZXhlY19ydW50aW1lCQk9IDA7CiAJcC0+c2UucHJldl9zdW1fZXhlY19ydW50aW1lCT0gMDsKKwlwLT5zZS5sYXN0X3dha2V1cAkJPSAwOworCXAtPnNlLmF2Z19vdmVybGFwCQk9IDA7CiAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXAtPnNlLndhaXRfc3RhcnQJCT0gMDsKQEAgLTE5NDMsNiArMjYzNSw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmcC0+cnQucnVuX2xpc3QpOwogCXAtPnNlLm9uX3JxID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmcC0+c2UuZ3JvdXBfbm9kZSk7CiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKIAlJTklUX0hMSVNUX0hFQUQoJnAtPnByZWVtcHRfbm90aWZpZXJzKTsKQEAgLTI2NjIsNyArMzM1NSw3IEBACiBzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoKIGZpbmRfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAogCQkgICB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICBpbnQgKnNkX2lkbGUsIGNwdW1hc2tfdCAqY3B1cywgaW50ICpiYWxhbmNlKQorCQkgICBpbnQgKnNkX2lkbGUsIGNvbnN0IGNwdW1hc2tfdCAqY3B1cywgaW50ICpiYWxhbmNlKQogewogCXN0cnVjdCBzY2hlZF9ncm91cCAqYnVzaWVzdCA9IE5VTEwsICp0aGlzID0gTlVMTCwgKmdyb3VwID0gc2QtPmdyb3VwczsKIAl1bnNpZ25lZCBsb25nIG1heF9sb2FkLCBhdmdfbG9hZCwgdG90YWxfbG9hZCwgdGhpc19sb2FkLCB0b3RhbF9wd3I7CkBAIC0yOTYzLDcgKzM2NTYsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHJxICoKIGZpbmRfYnVzaWVzdF9xdWV1ZShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UsIGNwdW1hc2tfdCAqY3B1cykKKwkJICAgdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UsIGNvbnN0IGNwdW1hc2tfdCAqY3B1cykKIHsKIAlzdHJ1Y3QgcnEgKmJ1c2llc3QgPSBOVUxMLCAqcnE7CiAJdW5zaWduZWQgbG9uZyBtYXhfbG9hZCA9IDA7CkBAIC0zMDAyLDE0ICszNjk1LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAogCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkJaW50ICpiYWxhbmNlKQorCQkJaW50ICpiYWxhbmNlLCBjcHVtYXNrX3QgKmNwdXMpCiB7CiAJaW50IGxkX21vdmVkLCBhbGxfcGlubmVkID0gMCwgYWN0aXZlX2JhbGFuY2UgPSAwLCBzZF9pZGxlID0gMDsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwogCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOwogCXN0cnVjdCBycSAqYnVzaWVzdDsKLQljcHVtYXNrX3QgY3B1cyA9IENQVV9NQVNLX0FMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB1bmxvY2tfYWdncmVnYXRlOworCisJY3B1c19zZXRhbGwoKmNwdXMpOworCisJdW5sb2NrX2FnZ3JlZ2F0ZSA9IGdldF9hZ2dyZWdhdGUoc2QpOwogCiAJLyoKIAkgKiBXaGVuIHBvd2VyIHNhdmluZ3MgcG9saWN5IGlzIGVuYWJsZWQgZm9yIHRoZSBwYXJlbnQgZG9tYWluLCBpZGxlCkBAIC0zMDI1LDcgKzM3MjIsNyBAQAogCiByZWRvOgogCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgaWRsZSwgJnNkX2lkbGUsCi0JCQkJICAgJmNwdXMsIGJhbGFuY2UpOworCQkJCSAgIGNwdXMsIGJhbGFuY2UpOwogCiAJaWYgKCpiYWxhbmNlID09IDApCiAJCWdvdG8gb3V0X2JhbGFuY2VkOwpAQCAtMzAzNSw3ICszNzMyLDcgQEAKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAJfQogCi0JYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgaWRsZSwgaW1iYWxhbmNlLCAmY3B1cyk7CisJYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgaWRsZSwgaW1iYWxhbmNlLCBjcHVzKTsKIAlpZiAoIWJ1c2llc3QpIHsKIAkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtpZGxlXSk7CiAJCWdvdG8gb3V0X2JhbGFuY2VkOwpAQCAtMzA2OCw4ICszNzY1LDggQEAKIAogCQkvKiBBbGwgdGFza3Mgb24gdGhpcyBydW5xdWV1ZSB3ZXJlIHBpbm5lZCBieSBDUFUgYWZmaW5pdHkgKi8KIAkJaWYgKHVubGlrZWx5KGFsbF9waW5uZWQpKSB7Ci0JCQljcHVfY2xlYXIoY3B1X29mKGJ1c2llc3QpLCBjcHVzKTsKLQkJCWlmICghY3B1c19lbXB0eShjcHVzKSkKKwkJCWNwdV9jbGVhcihjcHVfb2YoYnVzaWVzdCksICpjcHVzKTsKKwkJCWlmICghY3B1c19lbXB0eSgqY3B1cykpCiAJCQkJZ290byByZWRvOwogCQkJZ290byBvdXRfYmFsYW5jZWQ7CiAJCX0KQEAgLTMxMjYsOCArMzgyMyw5IEBACiAKIAlpZiAoIWxkX21vdmVkICYmICFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCiAJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIGxkX21vdmVkOworCQlsZF9tb3ZlZCA9IC0xOworCisJZ290byBvdXQ7CiAKIG91dF9iYWxhbmNlZDoKIAlzY2hlZHN0YXRfaW5jKHNkLCBsYl9iYWxhbmNlZFtpZGxlXSk7CkBAIC0zMTQyLDggKzM4NDAsMTMgQEAKIAogCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgogCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOworCQlsZF9tb3ZlZCA9IC0xOworCWVsc2UKKwkJbGRfbW92ZWQgPSAwOworb3V0OgorCWlmICh1bmxvY2tfYWdncmVnYXRlKQorCQlwdXRfYWdncmVnYXRlKHNkKTsKKwlyZXR1cm4gbGRfbW92ZWQ7CiB9CiAKIC8qCkBAIC0zMTU0LDcgKzM4NTcsOCBAQAogICogdGhpc19ycSBpcyBsb2NrZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWxvYWRfYmFsYW5jZV9uZXdpZGxlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKK2xvYWRfYmFsYW5jZV9uZXdpZGxlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkJCWNwdW1hc2tfdCAqY3B1cykKIHsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwogCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEw7CkBAIC0zMTYyLDcgKzM4NjYsOCBAQAogCWludCBsZF9tb3ZlZCA9IDA7CiAJaW50IHNkX2lkbGUgPSAwOwogCWludCBhbGxfcGlubmVkID0gMDsKLQljcHVtYXNrX3QgY3B1cyA9IENQVV9NQVNLX0FMTDsKKworCWNwdXNfc2V0YWxsKCpjcHVzKTsKIAogCS8qCiAJICogV2hlbiBwb3dlciBzYXZpbmdzIHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgcGFyZW50IGRvbWFpbiwgaWRsZQpAQCAtMzE3NywxNCArMzg4MiwxMyBAQAogCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2NvdW50W0NQVV9ORVdMWV9JRExFXSk7CiByZWRvOgogCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgQ1BVX05FV0xZX0lETEUsCi0JCQkJICAgJnNkX2lkbGUsICZjcHVzLCBOVUxMKTsKKwkJCQkgICAmc2RfaWRsZSwgY3B1cywgTlVMTCk7CiAJaWYgKCFncm91cCkgewogCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lnW0NQVV9ORVdMWV9JRExFXSk7CiAJCWdvdG8gb3V0X2JhbGFuY2VkOwogCX0KIAotCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIENQVV9ORVdMWV9JRExFLCBpbWJhbGFuY2UsCi0JCQkJJmNwdXMpOworCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIENQVV9ORVdMWV9JRExFLCBpbWJhbGFuY2UsIGNwdXMpOwogCWlmICghYnVzaWVzdCkgewogCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW0NQVV9ORVdMWV9JRExFXSk7CiAJCWdvdG8gb3V0X2JhbGFuY2VkOwpAQCAtMzIwNiw4ICszOTEwLDggQEAKIAkJc3Bpbl91bmxvY2soJmJ1c2llc3QtPmxvY2spOwogCiAJCWlmICh1bmxpa2VseShhbGxfcGlubmVkKSkgewotCQkJY3B1X2NsZWFyKGNwdV9vZihidXNpZXN0KSwgY3B1cyk7Ci0JCQlpZiAoIWNwdXNfZW1wdHkoY3B1cykpCisJCQljcHVfY2xlYXIoY3B1X29mKGJ1c2llc3QpLCAqY3B1cyk7CisJCQlpZiAoIWNwdXNfZW1wdHkoKmNwdXMpKQogCQkJCWdvdG8gcmVkbzsKIAkJfQogCX0KQEAgLTMyNDEsNiArMzk0NSw3IEBACiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAJaW50IHB1bGxlZF90YXNrID0gLTE7CiAJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7CisJY3B1bWFza190IHRtcG1hc2s7CiAKIAlmb3JfZWFjaF9kb21haW4odGhpc19jcHUsIHNkKSB7CiAJCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CkBAIC0zMjUwLDggKzM5NTUsOCBAQAogCiAJCWlmIChzZC0+ZmxhZ3MgJiBTRF9CQUxBTkNFX05FV0lETEUpCiAJCQkvKiBJZiB3ZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzdG9wIHNlYXJjaGluZzogKi8KLQkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsCi0JCQkJCQkJCXRoaXNfcnEsIHNkKTsKKwkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsIHRoaXNfcnEsCisJCQkJCQkJICAgc2QsICZ0bXBtYXNrKTsKIAogCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoc2QtPmJhbGFuY2VfaW50ZXJ2YWwpOwogCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpCkBAIC0zNDEwLDYgKzQxMTUsNyBAQAogCS8qIEVhcmxpZXN0IHRpbWUgd2hlbiB3ZSBoYXZlIHRvIGRvIHJlYmFsYW5jZSBhZ2FpbiAqLwogCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIDYwKkhaOwogCWludCB1cGRhdGVfbmV4dF9iYWxhbmNlID0gMDsKKwljcHVtYXNrX3QgdG1wOwogCiAJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKIAkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKQEAgLTM0MzMsNyArNDEzOSw3IEBACiAJCX0KIAogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7Ci0JCQlpZiAobG9hZF9iYWxhbmNlKGNwdSwgcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSkpIHsKKwkJCWlmIChsb2FkX2JhbGFuY2UoY3B1LCBycSwgc2QsIGlkbGUsICZiYWxhbmNlLCAmdG1wKSkgewogCQkJCS8qCiAJCQkJICogV2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc28gZWl0aGVyIHdlJ3JlIG5vCiAJCQkJICogbG9uZ2VyIGlkbGUsIG9yIG9uZSBvZiBvdXIgU01UIHNpYmxpbmdzIGlzCkBAIC0zNTQ5LDcgKzQyNTUsNyBAQAogCQkJICovCiAJCQlpbnQgaWxiID0gZmlyc3RfY3B1KG5vaHouY3B1X21hc2spOwogCi0JCQlpZiAoaWxiICE9IE5SX0NQVVMpCisJCQlpZiAoaWxiIDwgbnJfY3B1X2lkcykKIAkJCQlyZXNjaGVkX2NwdShpbGIpOwogCQl9CiAJfQpAQCAtMzc1Myw5ICs0NDU5LDkgQEAKIAkJcnEtPmNsb2NrX3VuZGVyZmxvd3MrKzsKIAl9CiAJcnEtPnRpY2tfdGltZXN0YW1wID0gcnEtPmNsb2NrOworCXVwZGF0ZV9sYXN0X3RpY2tfc2VlbihycSk7CiAJdXBkYXRlX2NwdV9sb2FkKHJxKTsKIAljdXJyLT5zY2hlZF9jbGFzcy0+dGFza190aWNrKHJxLCBjdXJyLCAwKTsKLQl1cGRhdGVfc2NoZWRfcnRfcGVyaW9kKHJxKTsKIAlzcGluX3VubG9jaygmcnEtPmxvY2spOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMzc2Niw3ICs0NDcyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1BSRUVNUFQpCiAKLXZvaWQgYWRkX3ByZWVtcHRfY291bnQoaW50IHZhbCkKK3ZvaWQgX19rcHJvYmVzIGFkZF9wcmVlbXB0X2NvdW50KGludCB2YWwpCiB7CiAJLyoKIAkgKiBVbmRlcmZsb3c/CkBAIC0zNzgyLDcgKzQ0ODgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChhZGRfcHJlZW1wdF9jb3VudCk7CiAKLXZvaWQgc3ViX3ByZWVtcHRfY291bnQoaW50IHZhbCkKK3ZvaWQgX19rcHJvYmVzIHN1Yl9wcmVlbXB0X2NvdW50KGludCB2YWwpCiB7CiAJLyoKIAkgKiBVbmRlcmZsb3c/CkBAIC0zODg0LDcgKzQ1OTAsNyBAQAogYXNtbGlua2FnZSB2b2lkIF9fc2NoZWQgc2NoZWR1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsICpuZXh0OwotCWxvbmcgKnN3aXRjaF9jb3VudDsKKwl1bnNpZ25lZCBsb25nICpzd2l0Y2hfY291bnQ7CiAJc3RydWN0IHJxICpycTsKIAlpbnQgY3B1OwogCkBAIC0zOTEzLDcgKzQ2MTksNyBAQAogCiAJaWYgKHByZXYtPnN0YXRlICYmICEocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9BQ1RJVkUpKSB7CiAJCWlmICh1bmxpa2VseSgocHJldi0+c3RhdGUgJiBUQVNLX0lOVEVSUlVQVElCTEUpICYmCi0JCQkJdW5saWtlbHkoc2lnbmFsX3BlbmRpbmcocHJldikpKSkgeworCQkJCXNpZ25hbF9wZW5kaW5nKHByZXYpKSkgewogCQkJcHJldi0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJCX0gZWxzZSB7CiAJCQlkZWFjdGl2YXRlX3Rhc2socnEsIHByZXYsIDEpOwpAQCAtNDMwNiwxMSArNTAxMiwxMCBAQAogCW9sZHByaW8gPSBwLT5wcmlvOwogCW9uX3JxID0gcC0+c2Uub25fcnE7CiAJcnVubmluZyA9IHRhc2tfY3VycmVudChycSwgcCk7Ci0JaWYgKG9uX3JxKSB7CisJaWYgKG9uX3JxKQogCQlkZXF1ZXVlX3Rhc2socnEsIHAsIDApOwotCQlpZiAocnVubmluZykKLQkJCXAtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwKTsKLQl9CisJaWYgKHJ1bm5pbmcpCisJCXAtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwKTsKIAogCWlmIChydF9wcmlvKHByaW8pKQogCQlwLT5zY2hlZF9jbGFzcyA9ICZydF9zY2hlZF9jbGFzczsKQEAgLTQzMTksMTAgKzUwMjQsOSBAQAogCiAJcC0+cHJpbyA9IHByaW87CiAKKwlpZiAocnVubmluZykKKwkJcC0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwogCWlmIChvbl9ycSkgewotCQlpZiAocnVubmluZykKLQkJCXAtPnNjaGVkX2NsYXNzLT5zZXRfY3Vycl90YXNrKHJxKTsKLQogCQllbnF1ZXVlX3Rhc2socnEsIHAsIDApOwogCiAJCWNoZWNrX2NsYXNzX2NoYW5nZWQocnEsIHAsIHByZXZfY2xhc3MsIG9sZHByaW8sIHJ1bm5pbmcpOwpAQCAtNDQ1Nyw3ICs1MTYxLDcgQEAKIHsKIAlyZXR1cm4gVEFTS19OSUNFKHApOwogfQotRVhQT1JUX1NZTUJPTF9HUEwodGFza19uaWNlKTsKK0VYUE9SVF9TWU1CT0wodGFza19uaWNlKTsKIAogLyoqCiAgKiBpZGxlX2NwdSAtIGlzIGEgZ2l2ZW4gY3B1IGlkbGUgY3VycmVudGx5PwpAQCAtNDU4OSw3ICs1MjkzLDcgQEAKIAkgKiBEbyBub3QgYWxsb3cgcmVhbHRpbWUgdGFza3MgaW50byBncm91cHMgdGhhdCBoYXZlIG5vIHJ1bnRpbWUKIAkgKiBhc3NpZ25lZC4KIAkgKi8KLQlpZiAocnRfcG9saWN5KHBvbGljeSkgJiYgdGFza19ncm91cChwKS0+cnRfcnVudGltZSA9PSAwKQorCWlmIChydF9wb2xpY3kocG9saWN5KSAmJiB0YXNrX2dyb3VwKHApLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZSA9PSAwKQogCQlyZXR1cm4gLUVQRVJNOwogI2VuZGlmCiAKQEAgLTQ2MTYsMTkgKzUzMjAsMTcgQEAKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCW9uX3JxID0gcC0+c2Uub25fcnE7CiAJcnVubmluZyA9IHRhc2tfY3VycmVudChycSwgcCk7Ci0JaWYgKG9uX3JxKSB7CisJaWYgKG9uX3JxKQogCQlkZWFjdGl2YXRlX3Rhc2socnEsIHAsIDApOwotCQlpZiAocnVubmluZykKLQkJCXAtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwKTsKLQl9CisJaWYgKHJ1bm5pbmcpCisJCXAtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwKTsKIAogCW9sZHByaW8gPSBwLT5wcmlvOwogCV9fc2V0c2NoZWR1bGVyKHJxLCBwLCBwb2xpY3ksIHBhcmFtLT5zY2hlZF9wcmlvcml0eSk7CiAKKwlpZiAocnVubmluZykKKwkJcC0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwogCWlmIChvbl9ycSkgewotCQlpZiAocnVubmluZykKLQkJCXAtPnNjaGVkX2NsYXNzLT5zZXRfY3Vycl90YXNrKHJxKTsKLQogCQlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKIAogCQljaGVja19jbGFzc19jaGFuZ2VkKHJxLCBwLCBwcmV2X2NsYXNzLCBvbGRwcmlvLCBydW5uaW5nKTsKQEAgLTQ3NTMsOSArNTQ1NSwxMCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWxvbmcgc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCBjcHVtYXNrX3QgbmV3X21hc2spCitsb25nIHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgY29uc3QgY3B1bWFza190ICppbl9tYXNrKQogewogCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CisJY3B1bWFza190IG5ld19tYXNrID0gKmluX21hc2s7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWludCByZXR2YWw7CiAKQEAgLTQ3ODYsMTMgKzU0ODksMTMgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQljcHVzX2FsbG93ZWQgPSBjcHVzZXRfY3B1c19hbGxvd2VkKHApOworCWNwdXNldF9jcHVzX2FsbG93ZWQocCwgJmNwdXNfYWxsb3dlZCk7CiAJY3B1c19hbmQobmV3X21hc2ssIG5ld19tYXNrLCBjcHVzX2FsbG93ZWQpOwogIGFnYWluOgotCXJldHZhbCA9IHNldF9jcHVzX2FsbG93ZWQocCwgbmV3X21hc2spOworCXJldHZhbCA9IHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsICZuZXdfbWFzayk7CiAKIAlpZiAoIXJldHZhbCkgewotCQljcHVzX2FsbG93ZWQgPSBjcHVzZXRfY3B1c19hbGxvd2VkKHApOworCQljcHVzZXRfY3B1c19hbGxvd2VkKHAsICZjcHVzX2FsbG93ZWQpOwogCQlpZiAoIWNwdXNfc3Vic2V0KG5ld19tYXNrLCBjcHVzX2FsbG93ZWQpKSB7CiAJCQkvKgogCQkJICogV2UgbXVzdCBoYXZlIHJhY2VkIHdpdGggYSBjb25jdXJyZW50IGNwdXNldApAQCAtNDgzNiw3ICs1NTM5LDcgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNjaGVkX3NldGFmZmluaXR5KHBpZCwgbmV3X21hc2spOworCXJldHVybiBzY2hlZF9zZXRhZmZpbml0eShwaWQsICZuZXdfbWFzayk7CiB9CiAKIC8qCkBAIC01MTM1LDcgKzU4MzgsNyBAQAogCXRpbWVfc2xpY2UgPSAwOwogCWlmIChwLT5wb2xpY3kgPT0gU0NIRURfUlIpIHsKIAkJdGltZV9zbGljZSA9IERFRl9USU1FU0xJQ0U7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHAtPnBvbGljeSAhPSBTQ0hFRF9GSUZPKSB7CiAJCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlzdHJ1Y3QgcnEgKnJxOwpAQCAtNTI5OCw3ICs2MDAxLDYgQEAKIAkJc3lzY3RsX3NjaGVkX2xhdGVuY3kgPSBsaW1pdDsKIAogCXN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkgKj0gZmFjdG9yOwotCXN5c2N0bF9zY2hlZF9iYXRjaF93YWtldXBfZ3JhbnVsYXJpdHkgKj0gZmFjdG9yOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNTMyNyw3ICs2MDI5LDcgQEAKICAqIHRhc2sgbXVzdCBub3QgZXhpdCgpICYgZGVhbGxvY2F0ZSBpdHNlbGYgcHJlbWF0dXJlbHkuIFRoZQogICogY2FsbCBpcyBub3QgYXRvbWljOyBubyBzcGlubG9ja3MgbWF5IGJlIGhlbGQuCiAgKi8KLWludCBzZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1bWFza190IG5ld19tYXNrKQoraW50IHNldF9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3QgY3B1bWFza190ICpuZXdfbWFzaykKIHsKIAlzdHJ1Y3QgbWlncmF0aW9uX3JlcSByZXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUzMzUsMjMgKzYwMzcsMjMgQEAKIAlpbnQgcmV0ID0gMDsKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7Ci0JaWYgKCFjcHVzX2ludGVyc2VjdHMobmV3X21hc2ssIGNwdV9vbmxpbmVfbWFwKSkgeworCWlmICghY3B1c19pbnRlcnNlY3RzKCpuZXdfbWFzaywgY3B1X29ubGluZV9tYXApKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChwLT5zY2hlZF9jbGFzcy0+c2V0X2NwdXNfYWxsb3dlZCkKLQkJcC0+c2NoZWRfY2xhc3MtPnNldF9jcHVzX2FsbG93ZWQocCwgJm5ld19tYXNrKTsKKwkJcC0+c2NoZWRfY2xhc3MtPnNldF9jcHVzX2FsbG93ZWQocCwgbmV3X21hc2spOwogCWVsc2UgewotCQlwLT5jcHVzX2FsbG93ZWQgPSBuZXdfbWFzazsKLQkJcC0+cnQubnJfY3B1c19hbGxvd2VkID0gY3B1c193ZWlnaHQobmV3X21hc2spOworCQlwLT5jcHVzX2FsbG93ZWQgPSAqbmV3X21hc2s7CisJCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IGNwdXNfd2VpZ2h0KCpuZXdfbWFzayk7CiAJfQogCiAJLyogQ2FuIHRoZSB0YXNrIHJ1biBvbiB0aGUgdGFzaydzIGN1cnJlbnQgQ1BVPyBJZiBzbywgd2UncmUgZG9uZSAqLwotCWlmIChjcHVfaXNzZXQodGFza19jcHUocCksIG5ld19tYXNrKSkKKwlpZiAoY3B1X2lzc2V0KHRhc2tfY3B1KHApLCAqbmV3X21hc2spKQogCQlnb3RvIG91dDsKIAotCWlmIChtaWdyYXRlX3Rhc2socCwgYW55X29ubGluZV9jcHUobmV3X21hc2spLCAmcmVxKSkgeworCWlmIChtaWdyYXRlX3Rhc2socCwgYW55X29ubGluZV9jcHUoKm5ld19tYXNrKSwgJnJlcSkpIHsKIAkJLyogTmVlZCBoZWxwIGZyb20gbWlncmF0aW9uIHRocmVhZDogZHJvcCBsb2NrIGFuZCB3YWl0LiAqLwogCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAkJd2FrZV91cF9wcm9jZXNzKHJxLT5taWdyYXRpb25fdGhyZWFkKTsKQEAgLTUzNjQsNyArNjA2Niw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoc2V0X2NwdXNfYWxsb3dlZCk7CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfY3B1c19hbGxvd2VkX3B0cik7CiAKIC8qCiAgKiBNb3ZlIChub3QgY3VycmVudCkgdGFzayBvZmYgdGhpcyBjcHUsIG9udG8gZGVzdCBjcHUuIFdlJ3JlIGRvaW5nCkBAIC01NTAyLDEyICs2MjA0LDE0IEBACiAJCWRlc3RfY3B1ID0gYW55X29ubGluZV9jcHUobWFzayk7CiAKIAkJLyogT24gYW55IGFsbG93ZWQgQ1BVPyAqLwotCQlpZiAoZGVzdF9jcHUgPT0gTlJfQ1BVUykKKwkJaWYgKGRlc3RfY3B1ID49IG5yX2NwdV9pZHMpCiAJCQlkZXN0X2NwdSA9IGFueV9vbmxpbmVfY3B1KHAtPmNwdXNfYWxsb3dlZCk7CiAKIAkJLyogTm8gbW9yZSBNci4gTmljZSBHdXkuICovCi0JCWlmIChkZXN0X2NwdSA9PSBOUl9DUFVTKSB7Ci0JCQljcHVtYXNrX3QgY3B1c19hbGxvd2VkID0gY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQocCk7CisJCWlmIChkZXN0X2NwdSA+PSBucl9jcHVfaWRzKSB7CisJCQljcHVtYXNrX3QgY3B1c19hbGxvd2VkOworCisJCQljcHVzZXRfY3B1c19hbGxvd2VkX2xvY2tlZChwLCAmY3B1c19hbGxvd2VkKTsKIAkJCS8qCiAJCQkgKiBUcnkgdG8gc3RheSBvbiB0aGUgc2FtZSBjcHVzZXQsIHdoZXJlIHRoZQogCQkJICogY3VycmVudCBjcHVzZXQgbWF5IGJlIGEgc3Vic2V0IG9mIGFsbCBjcHVzLgpAQCAtNTU0Myw3ICs2MjQ3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgbWlncmF0ZV9ucl91bmludGVycnVwdGlibGUoc3RydWN0IHJxICpycV9zcmMpCiB7Ci0Jc3RydWN0IHJxICpycV9kZXN0ID0gY3B1X3JxKGFueV9vbmxpbmVfY3B1KENQVV9NQVNLX0FMTCkpOworCXN0cnVjdCBycSAqcnFfZGVzdCA9IGNwdV9ycShhbnlfb25saW5lX2NwdSgqQ1BVX01BU0tfQUxMX1BUUikpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC01OTE2LDcgKzY2MjAsOCBAQAogCQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKIAkJYnJlYWs7CiAKLQljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJY2FzZSBDUFVfRFlJTkc6CisJY2FzZSBDUFVfRFlJTkdfRlJPWkVOOgogCQkvKiBVcGRhdGUgb3VyIHJvb3QtZG9tYWluICovCiAJCXJxID0gY3B1X3JxKGNwdSk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwpAQCAtNTk1NCwyMCArNjY1OSwxNiBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCi0vKiBOdW1iZXIgb2YgcG9zc2libGUgcHJvY2Vzc29yIGlkcyAqLwotaW50IG5yX2NwdV9pZHMgX19yZWFkX21vc3RseSA9IE5SX0NQVVM7Ci1FWFBPUlRfU1lNQk9MKG5yX2NwdV9pZHMpOwotCiAjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCiAKLXN0YXRpYyBpbnQgc2NoZWRfZG9tYWluX2RlYnVnX29uZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSwgaW50IGxldmVsKQorc3RhdGljIGludCBzY2hlZF9kb21haW5fZGVidWdfb25lKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1LCBpbnQgbGV2ZWwsCisJCQkJICBjcHVtYXNrX3QgKmdyb3VwbWFzaykKIHsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwID0gc2QtPmdyb3VwczsKLQljcHVtYXNrX3QgZ3JvdXBtYXNrOwotCWNoYXIgc3RyW05SX0NQVVNdOworCWNoYXIgc3RyWzI1Nl07CiAKLQljcHVtYXNrX3NjbnByaW50ZihzdHIsIE5SX0NQVVMsIHNkLT5zcGFuKTsKLQljcHVzX2NsZWFyKGdyb3VwbWFzayk7CisJY3B1bGlzdF9zY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgc2QtPnNwYW4pOworCWNwdXNfY2xlYXIoKmdyb3VwbWFzayk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJSpzIGRvbWFpbiAlZDogIiwgbGV2ZWwsICIiLCBsZXZlbCk7CiAKQEAgLTYwMTEsMjUgKzY3MTIsMjUgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGNwdXNfaW50ZXJzZWN0cyhncm91cG1hc2ssIGdyb3VwLT5jcHVtYXNrKSkgeworCQlpZiAoY3B1c19pbnRlcnNlY3RzKCpncm91cG1hc2ssIGdyb3VwLT5jcHVtYXNrKSkgewogCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IHJlcGVhdGVkIENQVXNcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAotCQljcHVzX29yKGdyb3VwbWFzaywgZ3JvdXBtYXNrLCBncm91cC0+Y3B1bWFzayk7CisJCWNwdXNfb3IoKmdyb3VwbWFzaywgKmdyb3VwbWFzaywgZ3JvdXAtPmNwdW1hc2spOwogCi0JCWNwdW1hc2tfc2NucHJpbnRmKHN0ciwgTlJfQ1BVUywgZ3JvdXAtPmNwdW1hc2spOworCQljcHVsaXN0X3NjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCBncm91cC0+Y3B1bWFzayk7CiAJCXByaW50ayhLRVJOX0NPTlQgIiAlcyIsIHN0cik7CiAKIAkJZ3JvdXAgPSBncm91cC0+bmV4dDsKIAl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKIAlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCi0JaWYgKCFjcHVzX2VxdWFsKHNkLT5zcGFuLCBncm91cG1hc2spKQorCWlmICghY3B1c19lcXVhbChzZC0+c3BhbiwgKmdyb3VwbWFzaykpCiAJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGdyb3VwcyBkb24ndCBzcGFuIGRvbWFpbi0+c3BhblxuIik7CiAKLQlpZiAoc2QtPnBhcmVudCAmJiAhY3B1c19zdWJzZXQoZ3JvdXBtYXNrLCBzZC0+cGFyZW50LT5zcGFuKSkKKwlpZiAoc2QtPnBhcmVudCAmJiAhY3B1c19zdWJzZXQoKmdyb3VwbWFzaywgc2QtPnBhcmVudC0+c3BhbikpCiAJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IHBhcmVudCBzcGFuIGlzIG5vdCBhIHN1cGVyc2V0ICIKIAkJCSJvZiBkb21haW4tPnNwYW5cbiIpOwogCXJldHVybiAwOwpAQCAtNjAzNyw2ICs2NzM4LDcgQEAKIAogc3RhdGljIHZvaWQgc2NoZWRfZG9tYWluX2RlYnVnKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQogeworCWNwdW1hc2tfdCAqZ3JvdXBtYXNrOwogCWludCBsZXZlbCA9IDA7CiAKIAlpZiAoIXNkKSB7CkBAIC02MDQ2LDE0ICs2NzQ4LDIxIEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiQ1BVJWQgYXR0YWNoaW5nIHNjaGVkLWRvbWFpbjpcbiIsIGNwdSk7CiAKKwlncm91cG1hc2sgPSBrbWFsbG9jKHNpemVvZihjcHVtYXNrX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdyb3VwbWFzaykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2Fubm90IGxvYWQtYmFsYW5jZSAob3V0IG9mIG1lbW9yeSlcbiIpOworCQlyZXR1cm47CisJfQorCiAJZm9yICg7OykgewotCQlpZiAoc2NoZWRfZG9tYWluX2RlYnVnX29uZShzZCwgY3B1LCBsZXZlbCkpCisJCWlmIChzY2hlZF9kb21haW5fZGVidWdfb25lKHNkLCBjcHUsIGxldmVsLCBncm91cG1hc2spKQogCQkJYnJlYWs7CiAJCWxldmVsKys7CiAJCXNkID0gc2QtPnBhcmVudDsKIAkJaWYgKCFzZCkKIAkJCWJyZWFrOwogCX0KKwlrZnJlZShncm91cG1hc2spOwogfQogI2Vsc2UKICMgZGVmaW5lIHNjaGVkX2RvbWFpbl9kZWJ1ZyhzZCwgY3B1KSBkbyB7IH0gd2hpbGUgKDApCkBAIC02MjQxLDMwICs2OTUwLDMzIEBACiAgKiBhbmQgLT5jcHVfcG93ZXIgdG8gMC4KICAqLwogc3RhdGljIHZvaWQKLWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGNwdW1hc2tfdCBzcGFuLCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsCitpbml0X3NjaGVkX2J1aWxkX2dyb3Vwcyhjb25zdCBjcHVtYXNrX3QgKnNwYW4sIGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCwKIAkJCWludCAoKmdyb3VwX2ZuKShpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsCi0JCQkJCXN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKSkKKwkJCQkJc3RydWN0IHNjaGVkX2dyb3VwICoqc2csCisJCQkJCWNwdW1hc2tfdCAqdG1wbWFzayksCisJCQljcHVtYXNrX3QgKmNvdmVyZWQsIGNwdW1hc2tfdCAqdG1wbWFzaykKIHsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmZpcnN0ID0gTlVMTCwgKmxhc3QgPSBOVUxMOwotCWNwdW1hc2tfdCBjb3ZlcmVkID0gQ1BVX01BU0tfTk9ORTsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIHNwYW4pIHsKKwljcHVzX2NsZWFyKCpjb3ZlcmVkKTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGksICpzcGFuKSB7CiAJCXN0cnVjdCBzY2hlZF9ncm91cCAqc2c7Ci0JCWludCBncm91cCA9IGdyb3VwX2ZuKGksIGNwdV9tYXAsICZzZyk7CisJCWludCBncm91cCA9IGdyb3VwX2ZuKGksIGNwdV9tYXAsICZzZywgdG1wbWFzayk7CiAJCWludCBqOwogCi0JCWlmIChjcHVfaXNzZXQoaSwgY292ZXJlZCkpCisJCWlmIChjcHVfaXNzZXQoaSwgKmNvdmVyZWQpKQogCQkJY29udGludWU7CiAKLQkJc2ctPmNwdW1hc2sgPSBDUFVfTUFTS19OT05FOworCQljcHVzX2NsZWFyKHNnLT5jcHVtYXNrKTsKIAkJc2ctPl9fY3B1X3Bvd2VyID0gMDsKIAotCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBzcGFuKSB7Ci0JCQlpZiAoZ3JvdXBfZm4oaiwgY3B1X21hcCwgTlVMTCkgIT0gZ3JvdXApCisJCWZvcl9lYWNoX2NwdV9tYXNrKGosICpzcGFuKSB7CisJCQlpZiAoZ3JvdXBfZm4oaiwgY3B1X21hcCwgTlVMTCwgdG1wbWFzaykgIT0gZ3JvdXApCiAJCQkJY29udGludWU7CiAKLQkJCWNwdV9zZXQoaiwgY292ZXJlZCk7CisJCQljcHVfc2V0KGosICpjb3ZlcmVkKTsKIAkJCWNwdV9zZXQoaiwgc2ctPmNwdW1hc2spOwogCQl9CiAJCWlmICghZmlyc3QpCkBAIC02MjkwLDcgKzcwMDIsNyBAQAogICoKICAqIFNob3VsZCB1c2Ugbm9kZW1hc2tfdC4KICAqLwotc3RhdGljIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCB1bnNpZ25lZCBsb25nICp1c2VkX25vZGVzKQorc3RhdGljIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVzKQogewogCWludCBpLCBuLCB2YWwsIG1pbl92YWwsIGJlc3Rfbm9kZSA9IDA7CiAKQEAgLTYzMDQsNyArNzAxNiw3IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBTa2lwIGFscmVhZHkgdXNlZCBub2RlcyAqLwotCQlpZiAodGVzdF9iaXQobiwgdXNlZF9ub2RlcykpCisJCWlmIChub2RlX2lzc2V0KG4sICp1c2VkX25vZGVzKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIFNpbXBsZSBtaW4gZGlzdGFuY2Ugc2VhcmNoICovCkBAIC02MzE2LDQwICs3MDI4LDM2IEBACiAJCX0KIAl9CiAKLQlzZXRfYml0KGJlc3Rfbm9kZSwgdXNlZF9ub2Rlcyk7CisJbm9kZV9zZXQoYmVzdF9ub2RlLCAqdXNlZF9ub2Rlcyk7CiAJcmV0dXJuIGJlc3Rfbm9kZTsKIH0KIAogLyoqCiAgKiBzY2hlZF9kb21haW5fbm9kZV9zcGFuIC0gZ2V0IGEgY3B1bWFzayBmb3IgYSBub2RlJ3Mgc2NoZWRfZG9tYWluCiAgKiBAbm9kZTogbm9kZSB3aG9zZSBjcHVtYXNrIHdlJ3JlIGNvbnN0cnVjdGluZwotICogQHNpemU6IG51bWJlciBvZiBub2RlcyB0byBpbmNsdWRlIGluIHRoaXMgc3BhbgogICoKICAqIEdpdmVuIGEgbm9kZSwgY29uc3RydWN0IGEgZ29vZCBjcHVtYXNrIGZvciBpdHMgc2NoZWRfZG9tYWluIHRvIHNwYW4uIEl0CiAgKiBzaG91bGQgYmUgb25lIHRoYXQgcHJldmVudHMgdW5uZWNlc3NhcnkgYmFsYW5jaW5nLCBidXQgYWxzbyBzcHJlYWRzIHRhc2tzCiAgKiBvdXQgb3B0aW1hbGx5LgogICovCi1zdGF0aWMgY3B1bWFza190IHNjaGVkX2RvbWFpbl9ub2RlX3NwYW4oaW50IG5vZGUpCitzdGF0aWMgdm9pZCBzY2hlZF9kb21haW5fbm9kZV9zcGFuKGludCBub2RlLCBjcHVtYXNrX3QgKnNwYW4pCiB7Ci0JREVDTEFSRV9CSVRNQVAodXNlZF9ub2RlcywgTUFYX05VTU5PREVTKTsKLQljcHVtYXNrX3Qgc3Bhbiwgbm9kZW1hc2s7CisJbm9kZW1hc2tfdCB1c2VkX25vZGVzOworCW5vZGVfdG9fY3B1bWFza19wdHIobm9kZW1hc2ssIG5vZGUpOwogCWludCBpOwogCi0JY3B1c19jbGVhcihzcGFuKTsKLQliaXRtYXBfemVybyh1c2VkX25vZGVzLCBNQVhfTlVNTk9ERVMpOworCWNwdXNfY2xlYXIoKnNwYW4pOworCW5vZGVzX2NsZWFyKHVzZWRfbm9kZXMpOwogCi0Jbm9kZW1hc2sgPSBub2RlX3RvX2NwdW1hc2sobm9kZSk7Ci0JY3B1c19vcihzcGFuLCBzcGFuLCBub2RlbWFzayk7Ci0Jc2V0X2JpdChub2RlLCB1c2VkX25vZGVzKTsKKwljcHVzX29yKCpzcGFuLCAqc3BhbiwgKm5vZGVtYXNrKTsKKwlub2RlX3NldChub2RlLCB1c2VkX25vZGVzKTsKIAogCWZvciAoaSA9IDE7IGkgPCBTRF9OT0RFU19QRVJfRE9NQUlOOyBpKyspIHsKLQkJaW50IG5leHRfbm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgdXNlZF9ub2Rlcyk7CisJCWludCBuZXh0X25vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsICZ1c2VkX25vZGVzKTsKIAotCQlub2RlbWFzayA9IG5vZGVfdG9fY3B1bWFzayhuZXh0X25vZGUpOwotCQljcHVzX29yKHNwYW4sIHNwYW4sIG5vZGVtYXNrKTsKKwkJbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KG5vZGVtYXNrLCBuZXh0X25vZGUpOworCQljcHVzX29yKCpzcGFuLCAqc3BhbiwgKm5vZGVtYXNrKTsKIAl9Ci0KLQlyZXR1cm4gc3BhbjsKIH0KICNlbmRpZgogCkBAIC02MzYzLDcgKzcwNzEsOCBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfY3B1cyk7CiAKIHN0YXRpYyBpbnQKLWNwdV90b19jcHVfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZykKK2NwdV90b19jcHVfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywKKwkJIGNwdW1hc2tfdCAqdW51c2VkKQogewogCWlmIChzZykKIAkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfY3B1cywgY3B1KTsKQEAgLTYzODEsMTkgKzcwOTAsMjIgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSAmJiBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCiBzdGF0aWMgaW50Ci1jcHVfdG9fY29yZV9ncm91cChpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKQorY3B1X3RvX2NvcmVfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywKKwkJICBjcHVtYXNrX3QgKm1hc2spCiB7CiAJaW50IGdyb3VwOwotCWNwdW1hc2tfdCBtYXNrID0gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7Ci0JY3B1c19hbmQobWFzaywgbWFzaywgKmNwdV9tYXApOwotCWdyb3VwID0gZmlyc3RfY3B1KG1hc2spOworCisJKm1hc2sgPSBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KTsKKwljcHVzX2FuZCgqbWFzaywgKm1hc2ssICpjcHVfbWFwKTsKKwlncm91cCA9IGZpcnN0X2NwdSgqbWFzayk7CiAJaWYgKHNnKQogCQkqc2cgPSAmcGVyX2NwdShzY2hlZF9ncm91cF9jb3JlLCBncm91cCk7CiAJcmV0dXJuIGdyb3VwOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpCiBzdGF0aWMgaW50Ci1jcHVfdG9fY29yZV9ncm91cChpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKQorY3B1X3RvX2NvcmVfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywKKwkJICBjcHVtYXNrX3QgKnVudXNlZCkKIHsKIAlpZiAoc2cpCiAJCSpzZyA9ICZwZXJfY3B1KHNjaGVkX2dyb3VwX2NvcmUsIGNwdSk7CkBAIC02NDA1LDE3ICs3MTE3LDE4IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX2dyb3VwLCBzY2hlZF9ncm91cF9waHlzKTsKIAogc3RhdGljIGludAotY3B1X3RvX3BoeXNfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZykKK2NwdV90b19waHlzX2dyb3VwKGludCBjcHUsIGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCwgc3RydWN0IHNjaGVkX2dyb3VwICoqc2csCisJCSAgY3B1bWFza190ICptYXNrKQogewogCWludCBncm91cDsKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKLQljcHVtYXNrX3QgbWFzayA9IGNwdV9jb3JlZ3JvdXBfbWFwKGNwdSk7Ci0JY3B1c19hbmQobWFzaywgbWFzaywgKmNwdV9tYXApOwotCWdyb3VwID0gZmlyc3RfY3B1KG1hc2spOworCSptYXNrID0gY3B1X2NvcmVncm91cF9tYXAoY3B1KTsKKwljcHVzX2FuZCgqbWFzaywgKm1hc2ssICpjcHVfbWFwKTsKKwlncm91cCA9IGZpcnN0X2NwdSgqbWFzayk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JY3B1bWFza190IG1hc2sgPSBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KTsKLQljcHVzX2FuZChtYXNrLCBtYXNrLCAqY3B1X21hcCk7Ci0JZ3JvdXAgPSBmaXJzdF9jcHUobWFzayk7CisJKm1hc2sgPSBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KTsKKwljcHVzX2FuZCgqbWFzaywgKm1hc2ssICpjcHVfbWFwKTsKKwlncm91cCA9IGZpcnN0X2NwdSgqbWFzayk7CiAjZWxzZQogCWdyb3VwID0gY3B1OwogI2VuZGlmCkBAIC02NDMxLDE5ICs3MTQ0LDE5IEBACiAgKiBnZXRzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KICAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9kb21haW4sIG5vZGVfZG9tYWlucyk7Ci1zdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoqc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHVbTlJfQ1BVU107CitzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoqKnNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX2RvbWFpbiwgYWxsbm9kZXNfZG9tYWlucyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX2dyb3VwLCBzY2hlZF9ncm91cF9hbGxub2Rlcyk7CiAKIHN0YXRpYyBpbnQgY3B1X3RvX2FsbG5vZGVzX2dyb3VwKGludCBjcHUsIGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCwKLQkJCQkgc3RydWN0IHNjaGVkX2dyb3VwICoqc2cpCisJCQkJIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnLCBjcHVtYXNrX3QgKm5vZGVtYXNrKQogewotCWNwdW1hc2tfdCBub2RlbWFzayA9IG5vZGVfdG9fY3B1bWFzayhjcHVfdG9fbm9kZShjcHUpKTsKIAlpbnQgZ3JvdXA7CiAKLQljcHVzX2FuZChub2RlbWFzaywgbm9kZW1hc2ssICpjcHVfbWFwKTsKLQlncm91cCA9IGZpcnN0X2NwdShub2RlbWFzayk7CisJKm5vZGVtYXNrID0gbm9kZV90b19jcHVtYXNrKGNwdV90b19ub2RlKGNwdSkpOworCWNwdXNfYW5kKCpub2RlbWFzaywgKm5vZGVtYXNrLCAqY3B1X21hcCk7CisJZ3JvdXAgPSBmaXJzdF9jcHUoKm5vZGVtYXNrKTsKIAogCWlmIChzZykKIAkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfYWxsbm9kZXMsIGdyb3VwKTsKQEAgLTY0NzksNyArNzE5Miw3IEBACiAKICNpZmRlZiBDT05GSUdfTlVNQQogLyogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB2YXJpb3VzIHNjaGVkX2dyb3VwIHN0cnVjdHVyZXMgKi8KLXN0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZ3JvdXBzKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCkKK3N0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZ3JvdXBzKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCwgY3B1bWFza190ICpub2RlbWFzaykKIHsKIAlpbnQgY3B1LCBpOwogCkBAIC02NDkxLDExICs3MjA0LDExIEBACiAJCQljb250aW51ZTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspIHsKLQkJCWNwdW1hc2tfdCBub2RlbWFzayA9IG5vZGVfdG9fY3B1bWFzayhpKTsKIAkJCXN0cnVjdCBzY2hlZF9ncm91cCAqb2xkc2csICpzZyA9IHNjaGVkX2dyb3VwX25vZGVzW2ldOwogCi0JCQljcHVzX2FuZChub2RlbWFzaywgbm9kZW1hc2ssICpjcHVfbWFwKTsKLQkJCWlmIChjcHVzX2VtcHR5KG5vZGVtYXNrKSkKKwkJCSpub2RlbWFzayA9IG5vZGVfdG9fY3B1bWFzayhpKTsKKwkJCWNwdXNfYW5kKCpub2RlbWFzaywgKm5vZGVtYXNrLCAqY3B1X21hcCk7CisJCQlpZiAoY3B1c19lbXB0eSgqbm9kZW1hc2spKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoc2cgPT0gTlVMTCkKQEAgLTY1MTMsNyArNzIyNiw3IEBACiAJfQogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZ3JvdXBzKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCkKK3N0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZ3JvdXBzKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCwgY3B1bWFza190ICpub2RlbWFzaykKIHsKIH0KICNlbmRpZgpAQCAtNjU3MSwxMyArNzI4NCwxMDYgQEAKIH0KIAogLyoKKyAqIEluaXRpYWxpemVycyBmb3Igc2NoZWR1bGUgZG9tYWlucworICogTm9uLWlubGluZWQgdG8gcmVkdWNlIGFjY3VtdWxhdGVkIHN0YWNrIHByZXNzdXJlIGluIGJ1aWxkX3NjaGVkX2RvbWFpbnMoKQorICovCisKKyNkZWZpbmUJU0RfSU5JVChzZCwgdHlwZSkJc2RfaW5pdF8jI3R5cGUoc2QpCisjZGVmaW5lIFNEX0lOSVRfRlVOQyh0eXBlKQlcCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBzZF9pbml0XyMjdHlwZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkJXAorewkJCQkJCQkJXAorCW1lbXNldChzZCwgMCwgc2l6ZW9mKCpzZCkpOwkJCQlcCisJKnNkID0gU0RfIyN0eXBlIyNfSU5JVDsJCQkJCVwKKwlzZC0+bGV2ZWwgPSBTRF9MVl8jI3R5cGU7CQkJCVwKK30KKworU0RfSU5JVF9GVU5DKENQVSkKKyNpZmRlZiBDT05GSUdfTlVNQQorIFNEX0lOSVRfRlVOQyhBTExOT0RFUykKKyBTRF9JTklUX0ZVTkMoTk9ERSkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKKyBTRF9JTklUX0ZVTkMoU0lCTElORykKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TQ0hFRF9NQworIFNEX0lOSVRfRlVOQyhNQykKKyNlbmRpZgorCisvKgorICogVG8gbWluaW1pemUgc3RhY2sgdXNhZ2Uga21hbGxvYyByb29tIGZvciBjcHVtYXNrcyBhbmQgc2hhcmUgdGhlCisgKiBzcGFjZSBhcyB0aGUgdXNhZ2UgaW4gYnVpbGRfc2NoZWRfZG9tYWlucygpIGRpY3RhdGVzLiAgVXNlZCBvbmx5CisgKiBpZiB0aGUgYW1vdW50IG9mIHNwYWNlIGlzIHNpZ25pZmljYW50LgorICovCitzdHJ1Y3QgYWxsbWFza3MgeworCWNwdW1hc2tfdCB0bXBtYXNrOwkJCS8qIG1ha2UgdGhpcyBvbmUgZmlyc3QgKi8KKwl1bmlvbiB7CisJCWNwdW1hc2tfdCBub2RlbWFzazsKKwkJY3B1bWFza190IHRoaXNfc2libGluZ19tYXA7CisJCWNwdW1hc2tfdCB0aGlzX2NvcmVfbWFwOworCX07CisJY3B1bWFza190IHNlbmRfY292ZXJlZDsKKworI2lmZGVmIENPTkZJR19OVU1BCisJY3B1bWFza190IGRvbWFpbnNwYW47CisJY3B1bWFza190IGNvdmVyZWQ7CisJY3B1bWFza190IG5vdGNvdmVyZWQ7CisjZW5kaWYKK307CisKKyNpZglOUl9DUFVTID4gMTI4CisjZGVmaW5lCVNDSEVEX0NQVU1BU0tfQUxMT0MJCTEKKyNkZWZpbmUJU0NIRURfQ1BVTUFTS19GUkVFKHYpCQlrZnJlZSh2KQorI2RlZmluZQlTQ0hFRF9DUFVNQVNLX0RFQ0xBUkUodikJc3RydWN0IGFsbG1hc2tzICp2CisjZWxzZQorI2RlZmluZQlTQ0hFRF9DUFVNQVNLX0FMTE9DCQkwCisjZGVmaW5lCVNDSEVEX0NQVU1BU0tfRlJFRSh2KQorI2RlZmluZQlTQ0hFRF9DUFVNQVNLX0RFQ0xBUkUodikJc3RydWN0IGFsbG1hc2tzIF92LCAqdiA9ICZfdgorI2VuZGlmCisKKyNkZWZpbmUJU0NIRURfQ1BVTUFTS19WQVIodiwgYSkgCWNwdW1hc2tfdCAqdiA9IChjcHVtYXNrX3QgKikgXAorCQkJKCh1bnNpZ25lZCBsb25nKShhKSArIG9mZnNldG9mKHN0cnVjdCBhbGxtYXNrcywgdikpCisKK3N0YXRpYyBpbnQgZGVmYXVsdF9yZWxheF9kb21haW5fbGV2ZWwgPSAtMTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVsYXhfZG9tYWluX2xldmVsKGNoYXIgKnN0cikKK3sKKwlkZWZhdWx0X3JlbGF4X2RvbWFpbl9sZXZlbCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJyZWxheF9kb21haW5fbGV2ZWw9Iiwgc2V0dXBfcmVsYXhfZG9tYWluX2xldmVsKTsKKworc3RhdGljIHZvaWQgc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQkJIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0cikKK3sKKwlpbnQgcmVxdWVzdDsKKworCWlmICghYXR0ciB8fCBhdHRyLT5yZWxheF9kb21haW5fbGV2ZWwgPCAwKSB7CisJCWlmIChkZWZhdWx0X3JlbGF4X2RvbWFpbl9sZXZlbCA8IDApCisJCQlyZXR1cm47CisJCWVsc2UKKwkJCXJlcXVlc3QgPSBkZWZhdWx0X3JlbGF4X2RvbWFpbl9sZXZlbDsKKwl9IGVsc2UKKwkJcmVxdWVzdCA9IGF0dHItPnJlbGF4X2RvbWFpbl9sZXZlbDsKKwlpZiAocmVxdWVzdCA8IHNkLT5sZXZlbCkgeworCQkvKiB0dXJuIG9mZiBpZGxlIGJhbGFuY2Ugb24gdGhpcyBkb21haW4gKi8KKwkJc2QtPmZsYWdzICY9IH4oU0RfV0FLRV9JRExFfFNEX0JBTEFOQ0VfTkVXSURMRSk7CisJfSBlbHNlIHsKKwkJLyogdHVybiBvbiBpZGxlIGJhbGFuY2Ugb24gdGhpcyBkb21haW4gKi8KKwkJc2QtPmZsYWdzIHw9IChTRF9XQUtFX0lETEVfRkFSfFNEX0JBTEFOQ0VfTkVXSURMRSk7CisJfQorfQorCisvKgogICogQnVpbGQgc2NoZWQgZG9tYWlucyBmb3IgYSBnaXZlbiBzZXQgb2YgY3B1cyBhbmQgYXR0YWNoIHRoZSBzY2hlZCBkb21haW5zCiAgKiB0byB0aGUgaW5kaXZpZHVhbCBjcHVzCiAgKi8KLXN0YXRpYyBpbnQgYnVpbGRfc2NoZWRfZG9tYWlucyhjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXApCitzdGF0aWMgaW50IF9fYnVpbGRfc2NoZWRfZG9tYWlucyhjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsCisJCQkJIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0cikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkOworCVNDSEVEX0NQVU1BU0tfREVDTEFSRShhbGxtYXNrcyk7CisJY3B1bWFza190ICp0bXBtYXNrOwogI2lmZGVmIENPTkZJR19OVU1BCiAJc3RydWN0IHNjaGVkX2dyb3VwICoqc2NoZWRfZ3JvdXBfbm9kZXMgPSBOVUxMOwogCWludCBzZF9hbGxub2RlcyA9IDA7CkBAIC02NTkxLDM5ICs3Mzk3LDY1IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbiBub3QgYWxsb2Mgc2NoZWQgZ3JvdXAgbm9kZSBsaXN0XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1W2ZpcnN0X2NwdSgqY3B1X21hcCldID0gc2NoZWRfZ3JvdXBfbm9kZXM7CiAjZW5kaWYKIAogCXJkID0gYWxsb2Nfcm9vdGRvbWFpbigpOwogCWlmICghcmQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGFsbG9jIHJvb3QgZG9tYWluXG4iKTsKKyNpZmRlZiBDT05GSUdfTlVNQQorCQlrZnJlZShzY2hlZF9ncm91cF9ub2Rlcyk7CisjZW5kaWYKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisjaWYgU0NIRURfQ1BVTUFTS19BTExPQworCS8qIGdldCBzcGFjZSBmb3IgYWxsIHNjcmF0Y2ggY3B1bWFzayB2YXJpYWJsZXMgKi8KKwlhbGxtYXNrcyA9IGttYWxsb2Moc2l6ZW9mKCphbGxtYXNrcyksIEdGUF9LRVJORUwpOworCWlmICghYWxsbWFza3MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGFsbG9jIGNwdW1hc2sgYXJyYXlcbiIpOworCQlrZnJlZShyZCk7CisjaWZkZWYgQ09ORklHX05VTUEKKwkJa2ZyZWUoc2NoZWRfZ3JvdXBfbm9kZXMpOworI2VuZGlmCisJCXJldHVybiAtRU5PTUVNOworCX0KKyNlbmRpZgorCXRtcG1hc2sgPSAoY3B1bWFza190ICopYWxsbWFza3M7CisKKworI2lmZGVmIENPTkZJR19OVU1BCisJc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHVbZmlyc3RfY3B1KCpjcHVfbWFwKV0gPSBzY2hlZF9ncm91cF9ub2RlczsKKyNlbmRpZgorCiAJLyoKIAkgKiBTZXQgdXAgZG9tYWlucyBmb3IgY3B1cyBzcGVjaWZpZWQgYnkgdGhlIGNwdV9tYXAuCiAJICovCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgKmNwdV9tYXApIHsKIAkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBOVUxMLCAqcDsKLQkJY3B1bWFza190IG5vZGVtYXNrID0gbm9kZV90b19jcHVtYXNrKGNwdV90b19ub2RlKGkpKTsKKwkJU0NIRURfQ1BVTUFTS19WQVIobm9kZW1hc2ssIGFsbG1hc2tzKTsKIAotCQljcHVzX2FuZChub2RlbWFzaywgbm9kZW1hc2ssICpjcHVfbWFwKTsKKwkJKm5vZGVtYXNrID0gbm9kZV90b19jcHVtYXNrKGNwdV90b19ub2RlKGkpKTsKKwkJY3B1c19hbmQoKm5vZGVtYXNrLCAqbm9kZW1hc2ssICpjcHVfbWFwKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiAJCWlmIChjcHVzX3dlaWdodCgqY3B1X21hcCkgPgotCQkJCVNEX05PREVTX1BFUl9ET01BSU4qY3B1c193ZWlnaHQobm9kZW1hc2spKSB7CisJCQkJU0RfTk9ERVNfUEVSX0RPTUFJTipjcHVzX3dlaWdodCgqbm9kZW1hc2spKSB7CiAJCQlzZCA9ICZwZXJfY3B1KGFsbG5vZGVzX2RvbWFpbnMsIGkpOwotCQkJKnNkID0gU0RfQUxMTk9ERVNfSU5JVDsKKwkJCVNEX0lOSVQoc2QsIEFMTE5PREVTKTsKKwkJCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKIAkJCXNkLT5zcGFuID0gKmNwdV9tYXA7Ci0JCQljcHVfdG9fYWxsbm9kZXNfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMpOworCQkJc2QtPmZpcnN0X2NwdSA9IGZpcnN0X2NwdShzZC0+c3Bhbik7CisJCQljcHVfdG9fYWxsbm9kZXNfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMsIHRtcG1hc2spOwogCQkJcCA9IHNkOwogCQkJc2RfYWxsbm9kZXMgPSAxOwogCQl9IGVsc2UKIAkJCXAgPSBOVUxMOwogCiAJCXNkID0gJnBlcl9jcHUobm9kZV9kb21haW5zLCBpKTsKLQkJKnNkID0gU0RfTk9ERV9JTklUOwotCQlzZC0+c3BhbiA9IHNjaGVkX2RvbWFpbl9ub2RlX3NwYW4oY3B1X3RvX25vZGUoaSkpOworCQlTRF9JTklUKHNkLCBOT0RFKTsKKwkJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOworCQlzY2hlZF9kb21haW5fbm9kZV9zcGFuKGNwdV90b19ub2RlKGkpLCAmc2QtPnNwYW4pOworCQlzZC0+Zmlyc3RfY3B1ID0gZmlyc3RfY3B1KHNkLT5zcGFuKTsKIAkJc2QtPnBhcmVudCA9IHA7CiAJCWlmIChwKQogCQkJcC0+Y2hpbGQgPSBzZDsKQEAgLTY2MzIsOTQgKzc0NjQsMTIwIEBACiAKIAkJcCA9IHNkOwogCQlzZCA9ICZwZXJfY3B1KHBoeXNfZG9tYWlucywgaSk7Ci0JCSpzZCA9IFNEX0NQVV9JTklUOwotCQlzZC0+c3BhbiA9IG5vZGVtYXNrOworCQlTRF9JTklUKHNkLCBDUFUpOworCQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7CisJCXNkLT5zcGFuID0gKm5vZGVtYXNrOworCQlzZC0+Zmlyc3RfY3B1ID0gZmlyc3RfY3B1KHNkLT5zcGFuKTsKIAkJc2QtPnBhcmVudCA9IHA7CiAJCWlmIChwKQogCQkJcC0+Y2hpbGQgPSBzZDsKLQkJY3B1X3RvX3BoeXNfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMpOworCQljcHVfdG9fcGh5c19ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgdG1wbWFzayk7CiAKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKIAkJcCA9IHNkOwogCQlzZCA9ICZwZXJfY3B1KGNvcmVfZG9tYWlucywgaSk7Ci0JCSpzZCA9IFNEX01DX0lOSVQ7CisJCVNEX0lOSVQoc2QsIE1DKTsKKwkJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOwogCQlzZC0+c3BhbiA9IGNwdV9jb3JlZ3JvdXBfbWFwKGkpOworCQlzZC0+Zmlyc3RfY3B1ID0gZmlyc3RfY3B1KHNkLT5zcGFuKTsKIAkJY3B1c19hbmQoc2QtPnNwYW4sIHNkLT5zcGFuLCAqY3B1X21hcCk7CiAJCXNkLT5wYXJlbnQgPSBwOwogCQlwLT5jaGlsZCA9IHNkOwotCQljcHVfdG9fY29yZV9ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3Vwcyk7CisJCWNwdV90b19jb3JlX2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzLCB0bXBtYXNrKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAogCQlwID0gc2Q7CiAJCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpOwotCQkqc2QgPSBTRF9TSUJMSU5HX0lOSVQ7CisJCVNEX0lOSVQoc2QsIFNJQkxJTkcpOworCQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7CiAJCXNkLT5zcGFuID0gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpOworCQlzZC0+Zmlyc3RfY3B1ID0gZmlyc3RfY3B1KHNkLT5zcGFuKTsKIAkJY3B1c19hbmQoc2QtPnNwYW4sIHNkLT5zcGFuLCAqY3B1X21hcCk7CiAJCXNkLT5wYXJlbnQgPSBwOwogCQlwLT5jaGlsZCA9IHNkOwotCQljcHVfdG9fY3B1X2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzKTsKKwkJY3B1X3RvX2NwdV9ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgdG1wbWFzayk7CiAjZW5kaWYKIAl9CiAKICNpZmRlZiBDT05GSUdfU0NIRURfU01UCiAJLyogU2V0IHVwIENQVSAoc2libGluZykgZ3JvdXBzICovCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgKmNwdV9tYXApIHsKLQkJY3B1bWFza190IHRoaXNfc2libGluZ19tYXAgPSBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSk7Ci0JCWNwdXNfYW5kKHRoaXNfc2libGluZ19tYXAsIHRoaXNfc2libGluZ19tYXAsICpjcHVfbWFwKTsKLQkJaWYgKGkgIT0gZmlyc3RfY3B1KHRoaXNfc2libGluZ19tYXApKQorCQlTQ0hFRF9DUFVNQVNLX1ZBUih0aGlzX3NpYmxpbmdfbWFwLCBhbGxtYXNrcyk7CisJCVNDSEVEX0NQVU1BU0tfVkFSKHNlbmRfY292ZXJlZCwgYWxsbWFza3MpOworCisJCSp0aGlzX3NpYmxpbmdfbWFwID0gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpOworCQljcHVzX2FuZCgqdGhpc19zaWJsaW5nX21hcCwgKnRoaXNfc2libGluZ19tYXAsICpjcHVfbWFwKTsKKwkJaWYgKGkgIT0gZmlyc3RfY3B1KCp0aGlzX3NpYmxpbmdfbWFwKSkKIAkJCWNvbnRpbnVlOwogCiAJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKHRoaXNfc2libGluZ19tYXAsIGNwdV9tYXAsCi0JCQkJCSZjcHVfdG9fY3B1X2dyb3VwKTsKKwkJCQkJJmNwdV90b19jcHVfZ3JvdXAsCisJCQkJCXNlbmRfY292ZXJlZCwgdG1wbWFzayk7CiAJfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKIAkvKiBTZXQgdXAgbXVsdGktY29yZSBncm91cHMgKi8KIAlmb3JfZWFjaF9jcHVfbWFzayhpLCAqY3B1X21hcCkgewotCQljcHVtYXNrX3QgdGhpc19jb3JlX21hcCA9IGNwdV9jb3JlZ3JvdXBfbWFwKGkpOwotCQljcHVzX2FuZCh0aGlzX2NvcmVfbWFwLCB0aGlzX2NvcmVfbWFwLCAqY3B1X21hcCk7Ci0JCWlmIChpICE9IGZpcnN0X2NwdSh0aGlzX2NvcmVfbWFwKSkKKwkJU0NIRURfQ1BVTUFTS19WQVIodGhpc19jb3JlX21hcCwgYWxsbWFza3MpOworCQlTQ0hFRF9DUFVNQVNLX1ZBUihzZW5kX2NvdmVyZWQsIGFsbG1hc2tzKTsKKworCQkqdGhpc19jb3JlX21hcCA9IGNwdV9jb3JlZ3JvdXBfbWFwKGkpOworCQljcHVzX2FuZCgqdGhpc19jb3JlX21hcCwgKnRoaXNfY29yZV9tYXAsICpjcHVfbWFwKTsKKwkJaWYgKGkgIT0gZmlyc3RfY3B1KCp0aGlzX2NvcmVfbWFwKSkKIAkJCWNvbnRpbnVlOworCiAJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKHRoaXNfY29yZV9tYXAsIGNwdV9tYXAsCi0JCQkJCSZjcHVfdG9fY29yZV9ncm91cCk7CisJCQkJCSZjcHVfdG9fY29yZV9ncm91cCwKKwkJCQkJc2VuZF9jb3ZlcmVkLCB0bXBtYXNrKTsKIAl9CiAjZW5kaWYKIAogCS8qIFNldCB1cCBwaHlzaWNhbCBncm91cHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspIHsKLQkJY3B1bWFza190IG5vZGVtYXNrID0gbm9kZV90b19jcHVtYXNrKGkpOworCQlTQ0hFRF9DUFVNQVNLX1ZBUihub2RlbWFzaywgYWxsbWFza3MpOworCQlTQ0hFRF9DUFVNQVNLX1ZBUihzZW5kX2NvdmVyZWQsIGFsbG1hc2tzKTsKIAotCQljcHVzX2FuZChub2RlbWFzaywgbm9kZW1hc2ssICpjcHVfbWFwKTsKLQkJaWYgKGNwdXNfZW1wdHkobm9kZW1hc2spKQorCQkqbm9kZW1hc2sgPSBub2RlX3RvX2NwdW1hc2soaSk7CisJCWNwdXNfYW5kKCpub2RlbWFzaywgKm5vZGVtYXNrLCAqY3B1X21hcCk7CisJCWlmIChjcHVzX2VtcHR5KCpub2RlbWFzaykpCiAJCQljb250aW51ZTsKIAotCQlpbml0X3NjaGVkX2J1aWxkX2dyb3Vwcyhub2RlbWFzaywgY3B1X21hcCwgJmNwdV90b19waHlzX2dyb3VwKTsKKwkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMobm9kZW1hc2ssIGNwdV9tYXAsCisJCQkJCSZjcHVfdG9fcGh5c19ncm91cCwKKwkJCQkJc2VuZF9jb3ZlcmVkLCB0bXBtYXNrKTsKIAl9CiAKICNpZmRlZiBDT05GSUdfTlVNQQogCS8qIFNldCB1cCBub2RlIGdyb3VwcyAqLwotCWlmIChzZF9hbGxub2RlcykKLQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoKmNwdV9tYXAsIGNwdV9tYXAsCi0JCQkJCSZjcHVfdG9fYWxsbm9kZXNfZ3JvdXApOworCWlmIChzZF9hbGxub2RlcykgeworCQlTQ0hFRF9DUFVNQVNLX1ZBUihzZW5kX2NvdmVyZWQsIGFsbG1hc2tzKTsKKworCQlpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyhjcHVfbWFwLCBjcHVfbWFwLAorCQkJCQkmY3B1X3RvX2FsbG5vZGVzX2dyb3VwLAorCQkJCQlzZW5kX2NvdmVyZWQsIHRtcG1hc2spOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykgewogCQkvKiBTZXQgdXAgbm9kZSBncm91cHMgKi8KIAkJc3RydWN0IHNjaGVkX2dyb3VwICpzZywgKnByZXY7Ci0JCWNwdW1hc2tfdCBub2RlbWFzayA9IG5vZGVfdG9fY3B1bWFzayhpKTsKLQkJY3B1bWFza190IGRvbWFpbnNwYW47Ci0JCWNwdW1hc2tfdCBjb3ZlcmVkID0gQ1BVX01BU0tfTk9ORTsKKwkJU0NIRURfQ1BVTUFTS19WQVIobm9kZW1hc2ssIGFsbG1hc2tzKTsKKwkJU0NIRURfQ1BVTUFTS19WQVIoZG9tYWluc3BhbiwgYWxsbWFza3MpOworCQlTQ0hFRF9DUFVNQVNLX1ZBUihjb3ZlcmVkLCBhbGxtYXNrcyk7CiAJCWludCBqOwogCi0JCWNwdXNfYW5kKG5vZGVtYXNrLCBub2RlbWFzaywgKmNwdV9tYXApOwotCQlpZiAoY3B1c19lbXB0eShub2RlbWFzaykpIHsKKwkJKm5vZGVtYXNrID0gbm9kZV90b19jcHVtYXNrKGkpOworCQljcHVzX2NsZWFyKCpjb3ZlcmVkKTsKKworCQljcHVzX2FuZCgqbm9kZW1hc2ssICpub2RlbWFzaywgKmNwdV9tYXApOworCQlpZiAoY3B1c19lbXB0eSgqbm9kZW1hc2spKSB7CiAJCQlzY2hlZF9ncm91cF9ub2Rlc1tpXSA9IE5VTEw7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWRvbWFpbnNwYW4gPSBzY2hlZF9kb21haW5fbm9kZV9zcGFuKGkpOwotCQljcHVzX2FuZChkb21haW5zcGFuLCBkb21haW5zcGFuLCAqY3B1X21hcCk7CisJCXNjaGVkX2RvbWFpbl9ub2RlX3NwYW4oaSwgZG9tYWluc3Bhbik7CisJCWNwdXNfYW5kKCpkb21haW5zcGFuLCAqZG9tYWluc3BhbiwgKmNwdV9tYXApOwogCiAJCXNnID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgc2NoZWRfZ3JvdXApLCBHRlBfS0VSTkVMLCBpKTsKIAkJaWYgKCFzZykgewpAQCAtNjcyOCwzMSArNzU4NiwzMSBAQAogCQkJZ290byBlcnJvcjsKIAkJfQogCQlzY2hlZF9ncm91cF9ub2Rlc1tpXSA9IHNnOwotCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBub2RlbWFzaykgeworCQlmb3JfZWFjaF9jcHVfbWFzayhqLCAqbm9kZW1hc2spIHsKIAkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCiAJCQlzZCA9ICZwZXJfY3B1KG5vZGVfZG9tYWlucywgaik7CiAJCQlzZC0+Z3JvdXBzID0gc2c7CiAJCX0KIAkJc2ctPl9fY3B1X3Bvd2VyID0gMDsKLQkJc2ctPmNwdW1hc2sgPSBub2RlbWFzazsKKwkJc2ctPmNwdW1hc2sgPSAqbm9kZW1hc2s7CiAJCXNnLT5uZXh0ID0gc2c7Ci0JCWNwdXNfb3IoY292ZXJlZCwgY292ZXJlZCwgbm9kZW1hc2spOworCQljcHVzX29yKCpjb3ZlcmVkLCAqY292ZXJlZCwgKm5vZGVtYXNrKTsKIAkJcHJldiA9IHNnOwogCiAJCWZvciAoaiA9IDA7IGogPCBNQVhfTlVNTk9ERVM7IGorKykgewotCQkJY3B1bWFza190IHRtcCwgbm90Y292ZXJlZDsKKwkJCVNDSEVEX0NQVU1BU0tfVkFSKG5vdGNvdmVyZWQsIGFsbG1hc2tzKTsKIAkJCWludCBuID0gKGkgKyBqKSAlIE1BWF9OVU1OT0RFUzsKKwkJCW5vZGVfdG9fY3B1bWFza19wdHIocG5vZGVtYXNrLCBuKTsKIAotCQkJY3B1c19jb21wbGVtZW50KG5vdGNvdmVyZWQsIGNvdmVyZWQpOwotCQkJY3B1c19hbmQodG1wLCBub3Rjb3ZlcmVkLCAqY3B1X21hcCk7Ci0JCQljcHVzX2FuZCh0bXAsIHRtcCwgZG9tYWluc3Bhbik7Ci0JCQlpZiAoY3B1c19lbXB0eSh0bXApKQorCQkJY3B1c19jb21wbGVtZW50KCpub3Rjb3ZlcmVkLCAqY292ZXJlZCk7CisJCQljcHVzX2FuZCgqdG1wbWFzaywgKm5vdGNvdmVyZWQsICpjcHVfbWFwKTsKKwkJCWNwdXNfYW5kKCp0bXBtYXNrLCAqdG1wbWFzaywgKmRvbWFpbnNwYW4pOworCQkJaWYgKGNwdXNfZW1wdHkoKnRtcG1hc2spKQogCQkJCWJyZWFrOwogCi0JCQlub2RlbWFzayA9IG5vZGVfdG9fY3B1bWFzayhuKTsKLQkJCWNwdXNfYW5kKHRtcCwgdG1wLCBub2RlbWFzayk7Ci0JCQlpZiAoY3B1c19lbXB0eSh0bXApKQorCQkJY3B1c19hbmQoKnRtcG1hc2ssICp0bXBtYXNrLCAqcG5vZGVtYXNrKTsKKwkJCWlmIChjcHVzX2VtcHR5KCp0bXBtYXNrKSkKIAkJCQljb250aW51ZTsKIAogCQkJc2cgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBzY2hlZF9ncm91cCksCkBAIC02NzYzLDkgKzc2MjEsOSBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCQlzZy0+X19jcHVfcG93ZXIgPSAwOwotCQkJc2ctPmNwdW1hc2sgPSB0bXA7CisJCQlzZy0+Y3B1bWFzayA9ICp0bXBtYXNrOwogCQkJc2ctPm5leHQgPSBwcmV2LT5uZXh0OwotCQkJY3B1c19vcihjb3ZlcmVkLCBjb3ZlcmVkLCB0bXApOworCQkJY3B1c19vcigqY292ZXJlZCwgKmNvdmVyZWQsICp0bXBtYXNrKTsKIAkJCXByZXYtPm5leHQgPSBzZzsKIAkJCXByZXYgPSBzZzsKIAkJfQpAQCAtNjgwMSw3ICs3NjU5LDggQEAKIAlpZiAoc2RfYWxsbm9kZXMpIHsKIAkJc3RydWN0IHNjaGVkX2dyb3VwICpzZzsKIAotCQljcHVfdG9fYWxsbm9kZXNfZ3JvdXAoZmlyc3RfY3B1KCpjcHVfbWFwKSwgY3B1X21hcCwgJnNnKTsKKwkJY3B1X3RvX2FsbG5vZGVzX2dyb3VwKGZpcnN0X2NwdSgqY3B1X21hcCksIGNwdV9tYXAsICZzZywKKwkJCQkJCQkJdG1wbWFzayk7CiAJCWluaXRfbnVtYV9zY2hlZF9ncm91cHNfcG93ZXIoc2cpOwogCX0KICNlbmRpZgpAQCAtNjgxOSwxNyArNzY3OCwyNiBAQAogCQljcHVfYXR0YWNoX2RvbWFpbihzZCwgcmQsIGkpOwogCX0KIAorCVNDSEVEX0NQVU1BU0tfRlJFRSgodm9pZCAqKWFsbG1hc2tzKTsKIAlyZXR1cm4gMDsKIAogI2lmZGVmIENPTkZJR19OVU1BCiBlcnJvcjoKLQlmcmVlX3NjaGVkX2dyb3VwcyhjcHVfbWFwKTsKKwlmcmVlX3NjaGVkX2dyb3VwcyhjcHVfbWFwLCB0bXBtYXNrKTsKKwlTQ0hFRF9DUFVNQVNLX0ZSRUUoKHZvaWQgKilhbGxtYXNrcyk7CiAJcmV0dXJuIC1FTk9NRU07CiAjZW5kaWYKIH0KIAorc3RhdGljIGludCBidWlsZF9zY2hlZF9kb21haW5zKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCkKK3sKKwlyZXR1cm4gX19idWlsZF9zY2hlZF9kb21haW5zKGNwdV9tYXAsIE5VTEwpOworfQorCiBzdGF0aWMgY3B1bWFza190ICpkb21zX2N1cjsJLyogY3VycmVudCBzY2hlZCBkb21haW5zICovCiBzdGF0aWMgaW50IG5kb21zX2N1cjsJCS8qIG51bWJlciBvZiBzY2hlZCBkb21haW5zIGluICdkb21zX2N1cicgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmRhdHRyX2N1cjsJLyogYXR0cmlidWVzIG9mIGN1c3RvbSBkb21haW5zCisJCQkJCQkgICBpbiAnZG9tc19jdXInICovCiAKIC8qCiAgKiBTcGVjaWFsIGNhc2U6IElmIGEga21hbGxvYyBvZiBhIGRvbXNfY3VyIHBhcnRpdGlvbiAoYXJyYXkgb2YKQEAgLTY4MzgsNiArNzcwNiwxMCBAQAogICovCiBzdGF0aWMgY3B1bWFza190IGZhbGxiYWNrX2RvbXM7CiAKK3ZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKQoreworfQorCiAvKgogICogU2V0IHVwIHNjaGVkdWxlciBkb21haW5zIGFuZCBncm91cHMuIENhbGxlcnMgbXVzdCBob2xkIHRoZSBob3RwbHVnIGxvY2suCiAgKiBGb3Igbm93IHRoaXMganVzdCBleGNsdWRlcyBpc29sYXRlZCBjcHVzLCBidXQgY291bGQgYmUgdXNlZCB0bwpAQCAtNjg0NywyMCArNzcxOSwyMyBAQAogewogCWludCBlcnI7CiAKKwlhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3koKTsKIAluZG9tc19jdXIgPSAxOwogCWRvbXNfY3VyID0ga21hbGxvYyhzaXplb2YoY3B1bWFza190KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkb21zX2N1cikKIAkJZG9tc19jdXIgPSAmZmFsbGJhY2tfZG9tczsKIAljcHVzX2FuZG5vdCgqZG9tc19jdXIsICpjcHVfbWFwLCBjcHVfaXNvbGF0ZWRfbWFwKTsKKwlkYXR0cl9jdXIgPSBOVUxMOwogCWVyciA9IGJ1aWxkX3NjaGVkX2RvbWFpbnMoZG9tc19jdXIpOwogCXJlZ2lzdGVyX3NjaGVkX2RvbWFpbl9zeXNjdGwoKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCkKK3N0YXRpYyB2b2lkIGFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCwKKwkJCQkgICAgICAgY3B1bWFza190ICp0bXBtYXNrKQogewotCWZyZWVfc2NoZWRfZ3JvdXBzKGNwdV9tYXApOworCWZyZWVfc2NoZWRfZ3JvdXBzKGNwdV9tYXAsIHRtcG1hc2spOwogfQogCiAvKgpAQCAtNjg2OSw2ICs3NzQ0LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZGV0YWNoX2Rlc3Ryb3lfZG9tYWlucyhjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXApCiB7CisJY3B1bWFza190IHRtcG1hc2s7CiAJaW50IGk7CiAKIAl1bnJlZ2lzdGVyX3NjaGVkX2RvbWFpbl9zeXNjdGwoKTsKQEAgLTY4NzYsNyArNzc1MiwyMyBAQAogCWZvcl9lYWNoX2NwdV9tYXNrKGksICpjcHVfbWFwKQogCQljcHVfYXR0YWNoX2RvbWFpbihOVUxMLCAmZGVmX3Jvb3RfZG9tYWluLCBpKTsKIAlzeW5jaHJvbml6ZV9zY2hlZCgpOwotCWFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNwdV9tYXApOworCWFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNwdV9tYXAsICZ0bXBtYXNrKTsKK30KKworLyogaGFuZGxlIG51bGwgYXMgImRlZmF1bHQiICovCitzdGF0aWMgaW50IGRhdHRyc19lcXVhbChzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmN1ciwgaW50IGlkeF9jdXIsCisJCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKm5ldywgaW50IGlkeF9uZXcpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyIHRtcDsKKworCS8qIGZhc3QgcGF0aCAqLworCWlmICghbmV3ICYmICFjdXIpCisJCXJldHVybiAxOworCisJdG1wID0gU0RfQVRUUl9JTklUOworCXJldHVybiAhbWVtY21wKGN1ciA/IChjdXIgKyBpZHhfY3VyKSA6ICZ0bXAsCisJCQluZXcgPyAobmV3ICsgaWR4X25ldykgOiAmdG1wLAorCQkJc2l6ZW9mKHN0cnVjdCBzY2hlZF9kb21haW5fYXR0cikpOwogfQogCiAvKgpAQCAtNjkwMCw3ICs3NzkyLDggQEAKICAqCiAgKiBDYWxsIHdpdGggaG90cGx1ZyBsb2NrIGhlbGQKICAqLwotdm9pZCBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucyhpbnQgbmRvbXNfbmV3LCBjcHVtYXNrX3QgKmRvbXNfbmV3KQordm9pZCBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucyhpbnQgbmRvbXNfbmV3LCBjcHVtYXNrX3QgKmRvbXNfbmV3LAorCQkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmRhdHRyX25ldykKIHsKIAlpbnQgaSwgajsKIApAQCAtNjkxMywxMiArNzgwNiwxNCBAQAogCQluZG9tc19uZXcgPSAxOwogCQlkb21zX25ldyA9ICZmYWxsYmFja19kb21zOwogCQljcHVzX2FuZG5vdChkb21zX25ld1swXSwgY3B1X29ubGluZV9tYXAsIGNwdV9pc29sYXRlZF9tYXApOworCQlkYXR0cl9uZXcgPSBOVUxMOwogCX0KIAogCS8qIERlc3Ryb3kgZGVsZXRlZCBkb21haW5zICovCiAJZm9yIChpID0gMDsgaSA8IG5kb21zX2N1cjsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCBuZG9tc19uZXc7IGorKykgewotCQkJaWYgKGNwdXNfZXF1YWwoZG9tc19jdXJbaV0sIGRvbXNfbmV3W2pdKSkKKwkJCWlmIChjcHVzX2VxdWFsKGRvbXNfY3VyW2ldLCBkb21zX25ld1tqXSkKKwkJCSAgICAmJiBkYXR0cnNfZXF1YWwoZGF0dHJfY3VyLCBpLCBkYXR0cl9uZXcsIGopKQogCQkJCWdvdG8gbWF0Y2gxOwogCQl9CiAJCS8qIG5vIG1hdGNoIC0gYSBjdXJyZW50IHNjaGVkIGRvbWFpbiBub3QgaW4gbmV3IGRvbXNfbmV3W10gKi8KQEAgLTY5MzAsMTEgKzc4MjUsMTMgQEAKIAkvKiBCdWlsZCBuZXcgZG9tYWlucyAqLwogCWZvciAoaSA9IDA7IGkgPCBuZG9tc19uZXc7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgbmRvbXNfY3VyOyBqKyspIHsKLQkJCWlmIChjcHVzX2VxdWFsKGRvbXNfbmV3W2ldLCBkb21zX2N1cltqXSkpCisJCQlpZiAoY3B1c19lcXVhbChkb21zX25ld1tpXSwgZG9tc19jdXJbal0pCisJCQkgICAgJiYgZGF0dHJzX2VxdWFsKGRhdHRyX25ldywgaSwgZGF0dHJfY3VyLCBqKSkKIAkJCQlnb3RvIG1hdGNoMjsKIAkJfQogCQkvKiBubyBtYXRjaCAtIGFkZCBhIG5ldyBkb21zX25ldyAqLwotCQlidWlsZF9zY2hlZF9kb21haW5zKGRvbXNfbmV3ICsgaSk7CisJCV9fYnVpbGRfc2NoZWRfZG9tYWlucyhkb21zX25ldyArIGksCisJCQkJCWRhdHRyX25ldyA/IGRhdHRyX25ldyArIGkgOiBOVUxMKTsKIG1hdGNoMjoKIAkJOwogCX0KQEAgLTY5NDIsNyArNzgzOSw5IEBACiAJLyogUmVtZW1iZXIgdGhlIG5ldyBzY2hlZCBkb21haW5zICovCiAJaWYgKGRvbXNfY3VyICE9ICZmYWxsYmFja19kb21zKQogCQlrZnJlZShkb21zX2N1cik7CisJa2ZyZWUoZGF0dHJfY3VyKTsJLyoga2ZyZWUoTlVMTCkgaXMgc2FmZSAqLwogCWRvbXNfY3VyID0gZG9tc19uZXc7CisJZGF0dHJfY3VyID0gZGF0dHJfbmV3OwogCW5kb21zX2N1ciA9IG5kb21zX25ldzsKIAogCXJlZ2lzdGVyX3NjaGVkX2RvbWFpbl9zeXNjdGwoKTsKQEAgLTY5NTEsNyArNzg1MCw3IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotc3RhdGljIGludCBhcmNoX3JlaW5pdF9zY2hlZF9kb21haW5zKHZvaWQpCitpbnQgYXJjaF9yZWluaXRfc2NoZWRfZG9tYWlucyh2b2lkKQogewogCWludCBlcnI7CiAKQEAgLTcwNjksNiArNzk2OCwxMSBAQAogewogCWNwdW1hc2tfdCBub25faXNvbGF0ZWRfY3B1czsKIAorI2lmIGRlZmluZWQoQ09ORklHX05VTUEpCisJc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHUgPSBremFsbG9jKG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKiksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCUJVR19PTihzY2hlZF9ncm91cF9ub2Rlc19ieWNwdSA9PSBOVUxMKTsKKyNlbmRpZgogCWdldF9vbmxpbmVfY3B1cygpOwogCWFyY2hfaW5pdF9zY2hlZF9kb21haW5zKCZjcHVfb25saW5lX21hcCk7CiAJY3B1c19hbmRub3Qobm9uX2lzb2xhdGVkX2NwdXMsIGNwdV9wb3NzaWJsZV9tYXAsIGNwdV9pc29sYXRlZF9tYXApOwpAQCAtNzA3OSwyOCArNzk4MywxOCBAQAogCWhvdGNwdV9ub3RpZmllcih1cGRhdGVfc2NoZWRfZG9tYWlucywgMCk7CiAKIAkvKiBNb3ZlIGluaXQgb3ZlciB0byBhIG5vbi1pc29sYXRlZCBDUFUgKi8KLQlpZiAoc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBub25faXNvbGF0ZWRfY3B1cykgPCAwKQorCWlmIChzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmbm9uX2lzb2xhdGVkX2NwdXMpIDwgMCkKIAkJQlVHKCk7CiAJc2NoZWRfaW5pdF9ncmFudWxhcml0eSgpOwotCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQlpZiAobnJfY3B1X2lkcyA9PSAxKQotCQlyZXR1cm47Ci0KLQlsYl9tb25pdG9yX3Rhc2sgPSBrdGhyZWFkX2NyZWF0ZShsb2FkX2JhbGFuY2VfbW9uaXRvciwgTlVMTCwKLQkJCQkJICJncm91cF9iYWxhbmNlIik7Ci0JaWYgKCFJU19FUlIobGJfbW9uaXRvcl90YXNrKSkgewotCQlsYl9tb25pdG9yX3Rhc2stPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotCQl3YWtlX3VwX3Byb2Nlc3MobGJfbW9uaXRvcl90YXNrKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBjcmVhdGUgbG9hZCBiYWxhbmNlIG1vbml0b3IgdGhyZWFkIgotCQkJIihlcnJvciA9ICVsZCkgXG4iLCBQVFJfRVJSKGxiX21vbml0b3JfdGFzaykpOwotCX0KLSNlbmRpZgogfQogI2Vsc2UKIHZvaWQgX19pbml0IHNjaGVkX2luaXRfc21wKHZvaWQpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkKKwlzY2hlZF9ncm91cF9ub2Rlc19ieWNwdSA9IGt6YWxsb2MobnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJQlVHX09OKHNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1ID09IE5VTEwpOworI2VuZGlmCiAJc2NoZWRfaW5pdF9ncmFudWxhcml0eSgpOwogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KQEAgLTcxMTUsNiArODAwOSw3IEBACiBzdGF0aWMgdm9pZCBpbml0X2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBycSAqcnEpCiB7CiAJY2ZzX3JxLT50YXNrc190aW1lbGluZSA9IFJCX1JPT1Q7CisJSU5JVF9MSVNUX0hFQUQoJmNmc19ycS0+dGFza3MpOwogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJY2ZzX3JxLT5ycSA9IHJxOwogI2VuZGlmCkBAIC03MTQ0LDYgKzgwMzksOCBAQAogCiAJcnRfcnEtPnJ0X3RpbWUgPSAwOwogCXJ0X3JxLT5ydF90aHJvdHRsZWQgPSAwOworCXJ0X3JxLT5ydF9ydW50aW1lID0gMDsKKwlzcGluX2xvY2tfaW5pdCgmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAlydF9ycS0+cnRfbnJfYm9vc3RlZCA9IDA7CkBAIC03MTUyLDEwICs4MDQ5LDExIEBACiB9CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotc3RhdGljIHZvaWQgaW5pdF90Z19jZnNfZW50cnkoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfZ3JvdXAgKnRnLAotCQlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLAotCQlpbnQgY3B1LCBpbnQgYWRkKQorc3RhdGljIHZvaWQgaW5pdF90Z19jZnNfZW50cnkoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsCisJCQkJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBjcHUsIGludCBhZGQsCisJCQkJc3RydWN0IHNjaGVkX2VudGl0eSAqcGFyZW50KQogeworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAl0Zy0+Y2ZzX3JxW2NwdV0gPSBjZnNfcnE7CiAJaW5pdF9jZnNfcnEoY2ZzX3JxLCBycSk7CiAJY2ZzX3JxLT50ZyA9IHRnOwpAQCAtNzE2Myw0NSArODA2MSwxMzIgQEAKIAkJbGlzdF9hZGQoJmNmc19ycS0+bGVhZl9jZnNfcnFfbGlzdCwgJnJxLT5sZWFmX2Nmc19ycV9saXN0KTsKIAogCXRnLT5zZVtjcHVdID0gc2U7Ci0Jc2UtPmNmc19ycSA9ICZycS0+Y2ZzOworCS8qIHNlIGNvdWxkIGJlIE5VTEwgZm9yIGluaXRfdGFza19ncm91cCAqLworCWlmICghc2UpCisJCXJldHVybjsKKworCWlmICghcGFyZW50KQorCQlzZS0+Y2ZzX3JxID0gJnJxLT5jZnM7CisJZWxzZQorCQlzZS0+Y2ZzX3JxID0gcGFyZW50LT5teV9xOworCiAJc2UtPm15X3EgPSBjZnNfcnE7CiAJc2UtPmxvYWQud2VpZ2h0ID0gdGctPnNoYXJlczsKIAlzZS0+bG9hZC5pbnZfd2VpZ2h0ID0gZGl2NjRfNjQoMVVMTDw8MzIsIHNlLT5sb2FkLndlaWdodCk7Ci0Jc2UtPnBhcmVudCA9IE5VTEw7CisJc2UtPnBhcmVudCA9IHBhcmVudDsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi1zdGF0aWMgdm9pZCBpbml0X3RnX3J0X2VudHJ5KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX2dyb3VwICp0ZywKLQkJc3RydWN0IHJ0X3JxICpydF9ycSwgc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsCi0JCWludCBjcHUsIGludCBhZGQpCitzdGF0aWMgdm9pZCBpbml0X3RnX3J0X2VudHJ5KHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgc3RydWN0IHJ0X3JxICpydF9ycSwKKwkJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIGludCBjcHUsIGludCBhZGQsCisJCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnBhcmVudCkKIHsKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisKIAl0Zy0+cnRfcnFbY3B1XSA9IHJ0X3JxOwogCWluaXRfcnRfcnEocnRfcnEsIHJxKTsKIAlydF9ycS0+dGcgPSB0ZzsKIAlydF9ycS0+cnRfc2UgPSBydF9zZTsKKwlydF9ycS0+cnRfcnVudGltZSA9IHRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZTsKIAlpZiAoYWRkKQogCQlsaXN0X2FkZCgmcnRfcnEtPmxlYWZfcnRfcnFfbGlzdCwgJnJxLT5sZWFmX3J0X3JxX2xpc3QpOwogCiAJdGctPnJ0X3NlW2NwdV0gPSBydF9zZTsKKwlpZiAoIXJ0X3NlKQorCQlyZXR1cm47CisKKwlpZiAoIXBhcmVudCkKKwkJcnRfc2UtPnJ0X3JxID0gJnJxLT5ydDsKKwllbHNlCisJCXJ0X3NlLT5ydF9ycSA9IHBhcmVudC0+bXlfcTsKKwogCXJ0X3NlLT5ydF9ycSA9ICZycS0+cnQ7CiAJcnRfc2UtPm15X3EgPSBydF9ycTsKLQlydF9zZS0+cGFyZW50ID0gTlVMTDsKKwlydF9zZS0+cGFyZW50ID0gcGFyZW50OwogCUlOSVRfTElTVF9IRUFEKCZydF9zZS0+cnVuX2xpc3QpOwogfQogI2VuZGlmCiAKIHZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZCkKIHsKLQlpbnQgaGlnaGVzdF9jcHUgPSAwOwogCWludCBpLCBqOworCXVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZSA9IDAsIHB0cjsKKworI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisJYWxsb2Nfc2l6ZSArPSAyICogbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorCWFsbG9jX3NpemUgKz0gMiAqIG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAorCWFsbG9jX3NpemUgKj0gMjsKKyNlbmRpZgorCS8qCisJICogQXMgc2NoZWRfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmUgcGFnZV9hbGxvYyBpcyBzZXR1cCwKKwkgKiB3ZSB1c2UgYWxsb2NfYm9vdG1lbSgpLgorCSAqLworCWlmIChhbGxvY19zaXplKSB7CisJCXB0ciA9ICh1bnNpZ25lZCBsb25nKWFsbG9jX2Jvb3RtZW1fbG93KGFsbG9jX3NpemUpOworCisjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKKwkJaW5pdF90YXNrX2dyb3VwLnNlID0gKHN0cnVjdCBzY2hlZF9lbnRpdHkgKiopcHRyOworCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKKworCQlpbml0X3Rhc2tfZ3JvdXAuY2ZzX3JxID0gKHN0cnVjdCBjZnNfcnEgKiopcHRyOworCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKKworI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECisJCXJvb3RfdGFza19ncm91cC5zZSA9IChzdHJ1Y3Qgc2NoZWRfZW50aXR5ICoqKXB0cjsKKwkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CisKKwkJcm9vdF90YXNrX2dyb3VwLmNmc19ycSA9IChzdHJ1Y3QgY2ZzX3JxICoqKXB0cjsKKwkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorCQlpbml0X3Rhc2tfZ3JvdXAucnRfc2UgPSAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqKilwdHI7CisJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOworCisJCWluaXRfdGFza19ncm91cC5ydF9ycSA9IChzdHJ1Y3QgcnRfcnEgKiopcHRyOworCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKKworI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECisJCXJvb3RfdGFza19ncm91cC5ydF9zZSA9IChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICoqKXB0cjsKKwkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CisKKwkJcm9vdF90YXNrX2dyb3VwLnJ0X3JxID0gKHN0cnVjdCBydF9ycSAqKilwdHI7CisJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOworI2VuZGlmCisjZW5kaWYKKwl9CiAKICNpZmRlZiBDT05GSUdfU01QCisJaW5pdF9hZ2dyZWdhdGUoKTsKIAlpbml0X2RlZnJvb3Rkb21haW4oKTsKICNlbmRpZgogCisJaW5pdF9ydF9iYW5kd2lkdGgoJmRlZl9ydF9iYW5kd2lkdGgsCisJCQlnbG9iYWxfcnRfcGVyaW9kKCksIGdsb2JhbF9ydF9ydW50aW1lKCkpOworCisjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisJaW5pdF9ydF9iYW5kd2lkdGgoJmluaXRfdGFza19ncm91cC5ydF9iYW5kd2lkdGgsCisJCQlnbG9iYWxfcnRfcGVyaW9kKCksIGdsb2JhbF9ydF9ydW50aW1lKCkpOworI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECisJaW5pdF9ydF9iYW5kd2lkdGgoJnJvb3RfdGFza19ncm91cC5ydF9iYW5kd2lkdGgsCisJCQlnbG9iYWxfcnRfcGVyaW9kKCksIFJVTlRJTUVfSU5GKTsKKyNlbmRpZgorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKIAlsaXN0X2FkZCgmaW5pdF90YXNrX2dyb3VwLmxpc3QsICZ0YXNrX2dyb3Vwcyk7CisJSU5JVF9MSVNUX0hFQUQoJmluaXRfdGFza19ncm91cC5jaGlsZHJlbik7CisKKyNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAorCUlOSVRfTElTVF9IRUFEKCZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOworCWluaXRfdGFza19ncm91cC5wYXJlbnQgPSAmcm9vdF90YXNrX2dyb3VwOworCWxpc3RfYWRkKCZpbml0X3Rhc2tfZ3JvdXAuc2libGluZ3MsICZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOworI2VuZGlmCiAjZW5kaWYKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CkBAIC03MjEyLDI2ICs4MTk3LDY4IEBACiAJCWxvY2tkZXBfc2V0X2NsYXNzKCZycS0+bG9jaywgJnJxLT5ycV9sb2NrX2tleSk7CiAJCXJxLT5ucl9ydW5uaW5nID0gMDsKIAkJcnEtPmNsb2NrID0gMTsKKwkJdXBkYXRlX2xhc3RfdGlja19zZWVuKHJxKTsKIAkJaW5pdF9jZnNfcnEoJnJxLT5jZnMsIHJxKTsKIAkJaW5pdF9ydF9ycSgmcnEtPnJ0LCBycSk7CiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAkJaW5pdF90YXNrX2dyb3VwLnNoYXJlcyA9IGluaXRfdGFza19ncm91cF9sb2FkOwogCQlJTklUX0xJU1RfSEVBRCgmcnEtPmxlYWZfY2ZzX3JxX2xpc3QpOwotCQlpbml0X3RnX2Nmc19lbnRyeShycSwgJmluaXRfdGFza19ncm91cCwKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECisJCS8qCisJCSAqIEhvdyBtdWNoIGNwdSBiYW5kd2lkdGggZG9lcyBpbml0X3Rhc2tfZ3JvdXAgZ2V0PworCQkgKgorCQkgKiBJbiBjYXNlIG9mIHRhc2stZ3JvdXBzIGZvcm1lZCB0aHInIHRoZSBjZ3JvdXAgZmlsZXN5c3RlbSwgaXQKKwkJICogZ2V0cyAxMDAlIG9mIHRoZSBjcHUgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0uIFRoaXMgb3ZlcmFsbAorCQkgKiBzeXN0ZW0gY3B1IHJlc291cmNlIGlzIGRpdmlkZWQgYW1vbmcgdGhlIHRhc2tzIG9mCisJCSAqIGluaXRfdGFza19ncm91cCBhbmQgaXRzIGNoaWxkIHRhc2stZ3JvdXBzIGluIGEgZmFpciBtYW5uZXIsCisJCSAqIGJhc2VkIG9uIGVhY2ggZW50aXR5J3MgKHRhc2sgb3IgdGFzay1ncm91cCdzKSB3ZWlnaHQKKwkJICogKHNlLT5sb2FkLndlaWdodCkuCisJCSAqCisJCSAqIEluIG90aGVyIHdvcmRzLCBpZiBpbml0X3Rhc2tfZ3JvdXAgaGFzIDEwIHRhc2tzIG9mIHdlaWdodAorCQkgKiAxMDI0KSBhbmQgdHdvIGNoaWxkIGdyb3VwcyBBMCBhbmQgQTEgKG9mIHdlaWdodCAxMDI0IGVhY2gpLAorCQkgKiB0aGVuIEEwJ3Mgc2hhcmUgb2YgdGhlIGNwdSByZXNvdXJjZSBpczoKKwkJICoKKwkJICogCUEwJ3MgYmFuZHdpZHRoID0gMTAyNCAvICgxMCoxMDI0ICsgMTAyNCArIDEwMjQpID0gOC4zMyUKKwkJICoKKwkJICogV2UgYWNoaWV2ZSB0aGlzIGJ5IGxldHRpbmcgaW5pdF90YXNrX2dyb3VwJ3MgdGFza3Mgc2l0CisJCSAqIGRpcmVjdGx5IGluIHJxLT5jZnMgKGkuZSBpbml0X3Rhc2tfZ3JvdXAtPnNlW10gPSBOVUxMKS4KKwkJICovCisJCWluaXRfdGdfY2ZzX2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsICZycS0+Y2ZzLCBOVUxMLCBpLCAxLCBOVUxMKTsKKyNlbGlmIGRlZmluZWQgQ09ORklHX1VTRVJfU0NIRUQKKwkJcm9vdF90YXNrX2dyb3VwLnNoYXJlcyA9IE5JQ0VfMF9MT0FEOworCQlpbml0X3RnX2Nmc19lbnRyeSgmcm9vdF90YXNrX2dyb3VwLCAmcnEtPmNmcywgTlVMTCwgaSwgMCwgTlVMTCk7CisJCS8qCisJCSAqIEluIGNhc2Ugb2YgdGFzay1ncm91cHMgZm9ybWVkIHRocicgdGhlIHVzZXIgaWQgb2YgdGFza3MsCisJCSAqIGluaXRfdGFza19ncm91cCByZXByZXNlbnRzIHRhc2tzIGJlbG9uZ2luZyB0byByb290IHVzZXIuCisJCSAqIEhlbmNlIGl0IGZvcm1zIGEgc2libGluZyBvZiBhbGwgc3Vic2VxdWVudCBncm91cHMgZm9ybWVkLgorCQkgKiBJbiB0aGlzIGNhc2UsIGluaXRfdGFza19ncm91cCBnZXRzIG9ubHkgYSBmcmFjdGlvbiBvZiBvdmVyYWxsCisJCSAqIHN5c3RlbSBjcHUgcmVzb3VyY2UsIGJhc2VkIG9uIHRoZSB3ZWlnaHQgYXNzaWduZWQgdG8gcm9vdAorCQkgKiB1c2VyJ3MgY3B1IHNoYXJlIChJTklUX1RBU0tfR1JPVVBfTE9BRCkuIFRoaXMgaXMgYWNjb21wbGlzaGVkCisJCSAqIGJ5IGxldHRpbmcgdGFza3Mgb2YgaW5pdF90YXNrX2dyb3VwIHNpdCBpbiBhIHNlcGFyYXRlIGNmc19ycQorCQkgKiAoaW5pdF9jZnNfcnEpIGFuZCBoYXZpbmcgb25lIGVudGl0eSByZXByZXNlbnQgdGhpcyBncm91cCBvZgorCQkgKiB0YXNrcyBpbiBycS0+Y2ZzIChpLmUgaW5pdF90YXNrX2dyb3VwLT5zZVtdICE9IE5VTEwpLgorCQkgKi8KKwkJaW5pdF90Z19jZnNfZW50cnkoJmluaXRfdGFza19ncm91cCwKIAkJCQkmcGVyX2NwdShpbml0X2Nmc19ycSwgaSksCi0JCQkJJnBlcl9jcHUoaW5pdF9zY2hlZF9lbnRpdHksIGkpLCBpLCAxKTsKKwkJCQkmcGVyX2NwdShpbml0X3NjaGVkX2VudGl0eSwgaSksIGksIDEsCisJCQkJcm9vdF90YXNrX2dyb3VwLnNlW2ldKTsKIAogI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KKworCQlycS0+cnQucnRfcnVudGltZSA9IGRlZl9ydF9iYW5kd2lkdGgucnRfcnVudGltZTsKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQkJaW5pdF90YXNrX2dyb3VwLnJ0X3J1bnRpbWUgPQotCQkJc3lzY3RsX3NjaGVkX3J0X3J1bnRpbWUgKiBOU0VDX1BFUl9VU0VDOwogCQlJTklUX0xJU1RfSEVBRCgmcnEtPmxlYWZfcnRfcnFfbGlzdCk7Ci0JCWluaXRfdGdfcnRfZW50cnkocnEsICZpbml0X3Rhc2tfZ3JvdXAsCisjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAorCQlpbml0X3RnX3J0X2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsICZycS0+cnQsIE5VTEwsIGksIDEsIE5VTEwpOworI2VsaWYgZGVmaW5lZCBDT05GSUdfVVNFUl9TQ0hFRAorCQlpbml0X3RnX3J0X2VudHJ5KCZyb290X3Rhc2tfZ3JvdXAsICZycS0+cnQsIE5VTEwsIGksIDAsIE5VTEwpOworCQlpbml0X3RnX3J0X2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsCiAJCQkJJnBlcl9jcHUoaW5pdF9ydF9ycSwgaSksCi0JCQkJJnBlcl9jcHUoaW5pdF9zY2hlZF9ydF9lbnRpdHksIGkpLCBpLCAxKTsKKwkJCQkmcGVyX2NwdShpbml0X3NjaGVkX3J0X2VudGl0eSwgaSksIGksIDEsCisJCQkJcm9vdF90YXNrX2dyb3VwLnJ0X3NlW2ldKTsKICNlbmRpZgotCQlycS0+cnRfcGVyaW9kX2V4cGlyZSA9IDA7Ci0JCXJxLT5ydF90aHJvdHRsZWQgPSAwOworI2VuZGlmCiAKIAkJZm9yIChqID0gMDsgaiA8IENQVV9MT0FEX0lEWF9NQVg7IGorKykKIAkJCXJxLT5jcHVfbG9hZFtqXSA9IDA7CkBAIC03MjQ4LDcgKzgyNzUsNiBAQAogI2VuZGlmCiAJCWluaXRfcnFfaHJ0aWNrKHJxKTsKIAkJYXRvbWljX3NldCgmcnEtPm5yX2lvd2FpdCwgMCk7Ci0JCWhpZ2hlc3RfY3B1ID0gaTsKIAl9CiAKIAlzZXRfbG9hZF93ZWlnaHQoJmluaXRfdGFzayk7CkBAIC03MjU4LDcgKzgyODQsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCi0JbnJfY3B1X2lkcyA9IGhpZ2hlc3RfY3B1ICsgMTsKIAlvcGVuX3NvZnRpcnEoU0NIRURfU09GVElSUSwgcnVuX3JlYmFsYW5jZV9kb21haW5zLCBOVUxMKTsKICNlbmRpZgogCkBAIC03MjgzLDYgKzgzMDgsOCBAQAogCSAqIER1cmluZyBlYXJseSBib290dXAgd2UgcHJldGVuZCB0byBiZSBhIG5vcm1hbCB0YXNrOgogCSAqLwogCWN1cnJlbnQtPnNjaGVkX2NsYXNzID0gJmZhaXJfc2NoZWRfY2xhc3M7CisKKwlzY2hlZHVsZXJfcnVubmluZyA9IDE7CiB9CiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAKQEAgLTc0MTUsMTU5ICs4NDQyLDYgQEAKIAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKLQotI2lmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgJiYgZGVmaW5lZCBDT05GSUdfU01QCi0vKgotICogZGlzdHJpYnV0ZSBzaGFyZXMgb2YgYWxsIHRhc2sgZ3JvdXBzIGFtb25nIHRoZWlyIHNjaGVkdWxhYmxlIGVudGl0aWVzLAotICogdG8gcmVmbGVjdCBsb2FkIGRpc3RyaWJ1dGlvbiBhY3Jvc3MgY3B1cy4KLSAqLwotc3RhdGljIGludCByZWJhbGFuY2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUpCi17Ci0Jc3RydWN0IGNmc19ycSAqY2ZzX3JxOwotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEodGhpc19jcHUpOwotCWNwdW1hc2tfdCBzZHNwYW4gPSBzZC0+c3BhbjsKLQlpbnQgYmFsYW5jZWQgPSAxOwotCi0JLyogV2FsayB0aHInIGFsbCB0aGUgdGFzayBncm91cHMgdGhhdCB3ZSBoYXZlICovCi0JZm9yX2VhY2hfbGVhZl9jZnNfcnEocnEsIGNmc19ycSkgewotCQlpbnQgaTsKLQkJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkID0gMCwgdG90YWxfc2hhcmVzOwotCQlzdHJ1Y3QgdGFza19ncm91cCAqdGcgPSBjZnNfcnEtPnRnOwotCi0JCS8qIEdhdGhlciB0b3RhbCB0YXNrIGxvYWQgb2YgdGhpcyBncm91cCBhY3Jvc3MgY3B1cyAqLwotCQlmb3JfZWFjaF9jcHVfbWFzayhpLCBzZHNwYW4pCi0JCQl0b3RhbF9sb2FkICs9IHRnLT5jZnNfcnFbaV0tPmxvYWQud2VpZ2h0OwotCi0JCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhpcyBncm91cCBoYXMgbm8gbG9hZCAqLwotCQlpZiAoIXRvdGFsX2xvYWQpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiB0Zy0+c2hhcmVzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBjcHUgc2hhcmVzIHRoZSB0YXNrIGdyb3VwCi0JCSAqIGlzIGVsaWdpYmxlIHRvIGhvbGQgb24gYSBzaW5nbGUgY3B1LiBPbiBOIGNwdXMsIGl0IGlzCi0JCSAqIGVsaWdpYmxlIHRvIGhvbGQgKE4gKiB0Zy0+c2hhcmVzKSBudW1iZXIgb2YgY3B1IHNoYXJlcy4KLQkJICovCi0JCXRvdGFsX3NoYXJlcyA9IHRnLT5zaGFyZXMgKiBjcHVzX3dlaWdodChzZHNwYW4pOwotCi0JCS8qCi0JCSAqIHJlZGlzdHJpYnV0ZSB0b3RhbF9zaGFyZXMgYWNyb3NzIGNwdXMgYXMgcGVyIHRoZSB0YXNrIGxvYWQKLQkJICogZGlzdHJpYnV0aW9uLgotCQkgKi8KLQkJZm9yX2VhY2hfY3B1X21hc2soaSwgc2RzcGFuKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGxvY2FsX2xvYWQsIGxvY2FsX3NoYXJlczsKLQotCQkJbG9jYWxfbG9hZCA9IHRnLT5jZnNfcnFbaV0tPmxvYWQud2VpZ2h0OwotCQkJbG9jYWxfc2hhcmVzID0gKGxvY2FsX2xvYWQgKiB0b3RhbF9zaGFyZXMpIC8gdG90YWxfbG9hZDsKLQkJCWlmICghbG9jYWxfc2hhcmVzKQotCQkJCWxvY2FsX3NoYXJlcyA9IE1JTl9HUk9VUF9TSEFSRVM7Ci0JCQlpZiAobG9jYWxfc2hhcmVzID09IHRnLT5zZVtpXS0+bG9hZC53ZWlnaHQpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmNwdV9ycShpKS0+bG9jayk7Ci0JCQlzZXRfc2Vfc2hhcmVzKHRnLT5zZVtpXSwgbG9jYWxfc2hhcmVzKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmY3B1X3JxKGkpLT5sb2NrKTsKLQkJCWJhbGFuY2VkID0gMDsKLQkJfQotCX0KLQotCXJldHVybiBiYWxhbmNlZDsKLX0KLQotLyoKLSAqIEhvdyBmcmVxdWVudGx5IHNob3VsZCB3ZSByZWJhbGFuY2Vfc2hhcmVzKCkgYWNyb3NzIGNwdXM/Ci0gKgotICogVGhlIG1vcmUgZnJlcXVlbnRseSB3ZSByZWJhbGFuY2Ugc2hhcmVzLCB0aGUgbW9yZSBhY2N1cmF0ZSBpcyB0aGUgZmFpcm5lc3MKLSAqIG9mIGNwdSBiYW5kd2lkdGggZGlzdHJpYnV0aW9uIGJldHdlZW4gdGFzayBncm91cHMuIEhvd2V2ZXIgaGlnaGVyIGZyZXF1ZW5jeQotICogYWxzbyBpbXBsaWVzIGluY3JlYXNlZCBzY2hlZHVsaW5nIG92ZXJoZWFkLgotICoKLSAqIHN5c2N0bF9zY2hlZF9taW5fYmFsX2ludF9zaGFyZXMgcmVwcmVzZW50cyB0aGUgbWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuCi0gKiBjb25zZWN1dGl2ZSBjYWxscyB0byByZWJhbGFuY2Vfc2hhcmVzKCkgaW4gdGhlIHNhbWUgc2NoZWQgZG9tYWluLgotICoKLSAqIHN5c2N0bF9zY2hlZF9tYXhfYmFsX2ludF9zaGFyZXMgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBpbnRlcnZhbCBiZXR3ZWVuCi0gKiBjb25zZWN1dGl2ZSBjYWxscyB0byByZWJhbGFuY2Vfc2hhcmVzKCkgaW4gdGhlIHNhbWUgc2NoZWQgZG9tYWluLgotICoKLSAqIFRoZXNlIHNldHRpbmdzIGFsbG93cyBmb3IgdGhlIGFwcHJvcHJpYXRlIHRyYWRlLW9mZiBiZXR3ZWVuIGFjY3VyYWN5IG9mCi0gKiBmYWlybmVzcyBhbmQgdGhlIGFzc29jaWF0ZWQgb3ZlcmhlYWQuCi0gKgotICovCi0KLS8qIGRlZmF1bHQ6IDhtcywgdW5pdHM6IG1pbGxpc2Vjb25kcyAqLwotY29uc3RfZGVidWcgdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9taW5fYmFsX2ludF9zaGFyZXMgPSA4OwotCi0vKiBkZWZhdWx0OiAxMjhtcywgdW5pdHM6IG1pbGxpc2Vjb25kcyAqLwotY29uc3RfZGVidWcgdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9tYXhfYmFsX2ludF9zaGFyZXMgPSAxMjg7Ci0KLS8qIGtlcm5lbCB0aHJlYWQgdGhhdCBydW5zIHJlYmFsYW5jZV9zaGFyZXMoKSBwZXJpb2RpY2FsbHkgKi8KLXN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlX21vbml0b3Iodm9pZCAqdW51c2VkKQotewotCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gc3lzY3RsX3NjaGVkX21pbl9iYWxfaW50X3NoYXJlczsKLQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc2NoZWRwYXJtOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIFdlIGRvbid0IHdhbnQgdGhpcyB0aHJlYWQncyBleGVjdXRpb24gdG8gYmUgbGltaXRlZCBieSB0aGUgc2hhcmVzCi0JICogYXNzaWduZWQgdG8gZGVmYXVsdCBncm91cCAoaW5pdF90YXNrX2dyb3VwKS4gSGVuY2UgbWFrZSBpdCBydW4KLQkgKiBhcyBhIFNDSEVEX1JSIFJUIHRhc2sgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4KLQkgKi8KLQlzY2hlZHBhcm0uc2NoZWRfcHJpb3JpdHkgPSAxOwotCXJldCA9IHNjaGVkX3NldHNjaGVkdWxlcihjdXJyZW50LCBTQ0hFRF9SUiwgJnNjaGVkcGFybSk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBzZXQgU0NIRURfUlIgcG9saWN5IGZvciBsb2FkIGJhbGFuY2UiCi0JCQkJIiBtb25pdG9yIHRocmVhZCAoZXJyb3IgPSAlZCkgXG4iLCByZXQpOwotCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJaW50IGksIGNwdSwgYmFsYW5jZWQgPSAxOwotCi0JCS8qIFByZXZlbnQgY3B1cyBnb2luZyBkb3duIG9yIGNvbWluZyB1cCAqLwotCQlnZXRfb25saW5lX2NwdXMoKTsKLQkJLyogbG9ja291dCBjaGFuZ2VzIHRvIGRvbXNfY3VyW10gYXJyYXkgKi8KLQkJbG9ja19kb21zX2N1cigpOwotCQkvKgotCQkgKiBFbnRlciBhIHJjdSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiB0byBzYWZlbHkgd2FsayBycS0+c2QKLQkJICogY2hhaW4gb24gdmFyaW91cyBjcHVzIGFuZCB0byB3YWxrIHRhc2sgZ3JvdXAgbGlzdAotCQkgKiAocnEtPmxlYWZfY2ZzX3JxX2xpc3QpIGluIHJlYmFsYW5jZV9zaGFyZXMoKS4KLQkJICovCi0JCXJjdV9yZWFkX2xvY2soKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbmRvbXNfY3VyOyBpKyspIHsKLQkJCWNwdW1hc2tfdCBjcHVtYXAgPSBkb21zX2N1cltpXTsKLQkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gTlVMTCwgKnNkX3ByZXYgPSBOVUxMOwotCi0JCQljcHUgPSBmaXJzdF9jcHUoY3B1bWFwKTsKLQotCQkJLyogRmluZCB0aGUgaGlnaGVzdCBkb21haW4gYXQgd2hpY2ggdG8gYmFsYW5jZSBzaGFyZXMgKi8KLQkJCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7Ci0JCQkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKLQkJCQkJY29udGludWU7Ci0JCQkJc2RfcHJldiA9IHNkOwotCQkJfQotCi0JCQlzZCA9IHNkX3ByZXY7Ci0JCQkvKiBzZCA9PSBOVUxMPyBObyBsb2FkIGJhbGFuY2UgcmVxZCBpbiB0aGlzIGRvbWFpbiAqLwotCQkJaWYgKCFzZCkKLQkJCQljb250aW51ZTsKLQotCQkJYmFsYW5jZWQgJj0gcmViYWxhbmNlX3NoYXJlcyhzZCwgY3B1KTsKLQkJfQotCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCXVubG9ja19kb21zX2N1cigpOwotCQlwdXRfb25saW5lX2NwdXMoKTsKLQotCQlpZiAoIWJhbGFuY2VkKQotCQkJdGltZW91dCA9IHN5c2N0bF9zY2hlZF9taW5fYmFsX2ludF9zaGFyZXM7Ci0JCWVsc2UgaWYgKHRpbWVvdXQgPCBzeXNjdGxfc2NoZWRfbWF4X2JhbF9pbnRfc2hhcmVzKQotCQkJdGltZW91dCAqPSAyOwotCi0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHRpbWVvdXQpOwotCX0KLQotCXJldHVybiAwOwotfQotI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KLQogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiBzdGF0aWMgdm9pZCBmcmVlX2ZhaXJfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQogewpAQCAtNzU4NCwxNyArODQ1OCwxOCBAQAogCWtmcmVlKHRnLT5zZSk7CiB9CiAKLXN0YXRpYyBpbnQgYWxsb2NfZmFpcl9zY2hlZF9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCitzdGF0aWMKK2ludCBhbGxvY19mYWlyX3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgc3RydWN0IHRhc2tfZ3JvdXAgKnBhcmVudCkKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7Ci0Jc3RydWN0IHNjaGVkX2VudGl0eSAqc2U7CisJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsICpwYXJlbnRfc2U7CiAJc3RydWN0IHJxICpycTsKIAlpbnQgaTsKIAotCXRnLT5jZnNfcnEgPSBremFsbG9jKHNpemVvZihjZnNfcnEpICogTlJfQ1BVUywgR0ZQX0tFUk5FTCk7CisJdGctPmNmc19ycSA9IGt6YWxsb2Moc2l6ZW9mKGNmc19ycSkgKiBucl9jcHVfaWRzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRnLT5jZnNfcnEpCiAJCWdvdG8gZXJyOwotCXRnLT5zZSA9IGt6YWxsb2Moc2l6ZW9mKHNlKSAqIE5SX0NQVVMsIEdGUF9LRVJORUwpOworCXRnLT5zZSA9IGt6YWxsb2Moc2l6ZW9mKHNlKSAqIG5yX2NwdV9pZHMsIEdGUF9LRVJORUwpOwogCWlmICghdGctPnNlKQogCQlnb3RvIGVycjsKIApAQCAtNzYxMyw3ICs4NDg4LDggQEAKIAkJaWYgKCFzZSkKIAkJCWdvdG8gZXJyOwogCi0JCWluaXRfdGdfY2ZzX2VudHJ5KHJxLCB0ZywgY2ZzX3JxLCBzZSwgaSwgMCk7CisJCXBhcmVudF9zZSA9IHBhcmVudCA/IHBhcmVudC0+c2VbaV0gOiBOVUxMOworCQlpbml0X3RnX2Nmc19lbnRyeSh0ZywgY2ZzX3JxLCBzZSwgaSwgMCwgcGFyZW50X3NlKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTc2MzcsNyArODUxMyw4IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2ZhaXJfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQorc3RhdGljIGlubGluZQoraW50IGFsbG9jX2ZhaXJfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3QgdGFza19ncm91cCAqcGFyZW50KQogewogCXJldHVybiAxOwogfQpAQCAtNzY1Niw2ICs4NTMzLDggQEAKIHsKIAlpbnQgaTsKIAorCWRlc3Ryb3lfcnRfYmFuZHdpZHRoKCZ0Zy0+cnRfYmFuZHdpZHRoKTsKKwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWlmICh0Zy0+cnRfcnEpCiAJCQlrZnJlZSh0Zy0+cnRfcnFbaV0pOwpAQCAtNzY2NywyMSArODU0NiwyMyBAQAogCWtmcmVlKHRnLT5ydF9zZSk7CiB9CiAKLXN0YXRpYyBpbnQgYWxsb2NfcnRfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQorc3RhdGljCitpbnQgYWxsb2NfcnRfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3QgdGFza19ncm91cCAqcGFyZW50KQogewogCXN0cnVjdCBydF9ycSAqcnRfcnE7Ci0Jc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7CisJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsICpwYXJlbnRfc2U7CiAJc3RydWN0IHJxICpycTsKIAlpbnQgaTsKIAotCXRnLT5ydF9ycSA9IGt6YWxsb2Moc2l6ZW9mKHJ0X3JxKSAqIE5SX0NQVVMsIEdGUF9LRVJORUwpOworCXRnLT5ydF9ycSA9IGt6YWxsb2Moc2l6ZW9mKHJ0X3JxKSAqIG5yX2NwdV9pZHMsIEdGUF9LRVJORUwpOwogCWlmICghdGctPnJ0X3JxKQogCQlnb3RvIGVycjsKLQl0Zy0+cnRfc2UgPSBremFsbG9jKHNpemVvZihydF9zZSkgKiBOUl9DUFVTLCBHRlBfS0VSTkVMKTsKKwl0Zy0+cnRfc2UgPSBremFsbG9jKHNpemVvZihydF9zZSkgKiBucl9jcHVfaWRzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRnLT5ydF9zZSkKIAkJZ290byBlcnI7CiAKLQl0Zy0+cnRfcnVudGltZSA9IDA7CisJaW5pdF9ydF9iYW5kd2lkdGgoJnRnLT5ydF9iYW5kd2lkdGgsCisJCQlrdGltZV90b19ucyhkZWZfcnRfYmFuZHdpZHRoLnJ0X3BlcmlvZCksIDApOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcnEgPSBjcHVfcnEoaSk7CkBAIC03Njk2LDcgKzg1NzcsOCBAQAogCQlpZiAoIXJ0X3NlKQogCQkJZ290byBlcnI7CiAKLQkJaW5pdF90Z19ydF9lbnRyeShycSwgdGcsIHJ0X3JxLCBydF9zZSwgaSwgMCk7CisJCXBhcmVudF9zZSA9IHBhcmVudCA/IHBhcmVudC0+cnRfc2VbaV0gOiBOVUxMOworCQlpbml0X3RnX3J0X2VudHJ5KHRnLCBydF9ycSwgcnRfc2UsIGksIDAsIHBhcmVudF9zZSk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC03NzIwLDcgKzg2MDIsOCBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBhbGxvY19ydF9zY2hlZF9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCitzdGF0aWMgaW5saW5lCitpbnQgYWxsb2NfcnRfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3QgdGFza19ncm91cCAqcGFyZW50KQogewogCXJldHVybiAxOwogfQpAQCAtNzczNCw2ICs4NjE3LDcgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVECiBzdGF0aWMgdm9pZCBmcmVlX3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIHsKIAlmcmVlX2ZhaXJfc2NoZWRfZ3JvdXAodGcpOwpAQCAtNzc0Miw3ICs4NjI2LDcgQEAKIH0KIAogLyogYWxsb2NhdGUgcnVucXVldWUgZXRjIGZvciBhIG5ldyB0YXNrIGdyb3VwICovCi1zdHJ1Y3QgdGFza19ncm91cCAqc2NoZWRfY3JlYXRlX2dyb3VwKHZvaWQpCitzdHJ1Y3QgdGFza19ncm91cCAqc2NoZWRfY3JlYXRlX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICpwYXJlbnQpCiB7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NzUyLDEwICs4NjM2LDEwIEBACiAJaWYgKCF0ZykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlpZiAoIWFsbG9jX2ZhaXJfc2NoZWRfZ3JvdXAodGcpKQorCWlmICghYWxsb2NfZmFpcl9zY2hlZF9ncm91cCh0ZywgcGFyZW50KSkKIAkJZ290byBlcnI7CiAKLQlpZiAoIWFsbG9jX3J0X3NjaGVkX2dyb3VwKHRnKSkKKwlpZiAoIWFsbG9jX3J0X3NjaGVkX2dyb3VwKHRnLCBwYXJlbnQpKQogCQlnb3RvIGVycjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrX2dyb3VwX2xvY2ssIGZsYWdzKTsKQEAgLTc3NjQsNiArODY0OCwxMiBAQAogCQlyZWdpc3Rlcl9ydF9zY2hlZF9ncm91cCh0ZywgaSk7CiAJfQogCWxpc3RfYWRkX3JjdSgmdGctPmxpc3QsICZ0YXNrX2dyb3Vwcyk7CisKKwlXQVJOX09OKCFwYXJlbnQpOyAvKiByb290IHNob3VsZCBhbHJlYWR5IGV4aXN0ICovCisKKwl0Zy0+cGFyZW50ID0gcGFyZW50OworCWxpc3RfYWRkX3JjdSgmdGctPnNpYmxpbmdzLCAmcGFyZW50LT5jaGlsZHJlbik7CisJSU5JVF9MSVNUX0hFQUQoJnRnLT5jaGlsZHJlbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFza19ncm91cF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gdGc7CkBAIC03NzkyLDYgKzg2ODIsNyBAQAogCQl1bnJlZ2lzdGVyX3J0X3NjaGVkX2dyb3VwKHRnLCBpKTsKIAl9CiAJbGlzdF9kZWxfcmN1KCZ0Zy0+bGlzdCk7CisJbGlzdF9kZWxfcmN1KCZ0Zy0+c2libGluZ3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tfZ3JvdXBfbG9jaywgZmxhZ3MpOwogCiAJLyogd2FpdCBmb3IgcG9zc2libGUgY29uY3VycmVudCByZWZlcmVuY2VzIHRvIGNmc19ycXMgY29tcGxldGUgKi8KQEAgLTc4MTYsNDcgKzg3MDcsNTMgQEAKIAlydW5uaW5nID0gdGFza19jdXJyZW50KHJxLCB0c2spOwogCW9uX3JxID0gdHNrLT5zZS5vbl9ycTsKIAotCWlmIChvbl9ycSkgeworCWlmIChvbl9ycSkKIAkJZGVxdWV1ZV90YXNrKHJxLCB0c2ssIDApOwotCQlpZiAodW5saWtlbHkocnVubmluZykpCi0JCQl0c2stPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCB0c2spOwotCX0KKwlpZiAodW5saWtlbHkocnVubmluZykpCisJCXRzay0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHRzayk7CiAKIAlzZXRfdGFza19ycSh0c2ssIHRhc2tfY3B1KHRzaykpOwogCi0JaWYgKG9uX3JxKSB7Ci0JCWlmICh1bmxpa2VseShydW5uaW5nKSkKLQkJCXRzay0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOworI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisJaWYgKHRzay0+c2NoZWRfY2xhc3MtPm1vdmVkX2dyb3VwKQorCQl0c2stPnNjaGVkX2NsYXNzLT5tb3ZlZF9ncm91cCh0c2spOworI2VuZGlmCisKKwlpZiAodW5saWtlbHkocnVubmluZykpCisJCXRzay0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOworCWlmIChvbl9ycSkKIAkJZW5xdWV1ZV90YXNrKHJxLCB0c2ssIDApOwotCX0KIAogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotLyogcnEtPmxvY2sgdG8gYmUgbG9ja2VkIGJ5IGNhbGxlciAqLwotc3RhdGljIHZvaWQgc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpCitzdGF0aWMgdm9pZCBfX3NldF9zZV9zaGFyZXMoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHVuc2lnbmVkIGxvbmcgc2hhcmVzKQogewogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHNlLT5jZnNfcnE7Ci0Jc3RydWN0IHJxICpycSA9IGNmc19ycS0+cnE7CiAJaW50IG9uX3JxOwogCi0JaWYgKCFzaGFyZXMpCi0JCXNoYXJlcyA9IE1JTl9HUk9VUF9TSEFSRVM7Ci0KIAlvbl9ycSA9IHNlLT5vbl9ycTsKLQlpZiAob25fcnEpIHsKKwlpZiAob25fcnEpCiAJCWRlcXVldWVfZW50aXR5KGNmc19ycSwgc2UsIDApOwotCQlkZWNfY3B1X2xvYWQocnEsIHNlLT5sb2FkLndlaWdodCk7Ci0JfQogCiAJc2UtPmxvYWQud2VpZ2h0ID0gc2hhcmVzOwogCXNlLT5sb2FkLmludl93ZWlnaHQgPSBkaXY2NF82NCgoMVVMTDw8MzIpLCBzaGFyZXMpOwogCi0JaWYgKG9uX3JxKSB7CisJaWYgKG9uX3JxKQogCQllbnF1ZXVlX2VudGl0eShjZnNfcnEsIHNlLCAwKTsKLQkJaW5jX2NwdV9sb2FkKHJxLCBzZS0+bG9hZC53ZWlnaHQpOwotCX0KK30KKworc3RhdGljIHZvaWQgc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpCit7CisJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gc2UtPmNmc19ycTsKKwlzdHJ1Y3QgcnEgKnJxID0gY2ZzX3JxLT5ycTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJX19zZXRfc2Vfc2hhcmVzKHNlLCBzaGFyZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoc2hhcmVzX211dGV4KTsKQEAgLTc4NjYsMjEgKzg3NjMsMjggQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyoKKwkgKiBXZSBjYW4ndCBjaGFuZ2UgdGhlIHdlaWdodCBvZiB0aGUgcm9vdCBjZ3JvdXAuCisJICovCisJaWYgKCF0Zy0+c2VbMF0pCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBBIHdlaWdodCBvZiAwIG9yIDEgY2FuIGNhdXNlIGFyaXRobWV0aWNzIHByb2JsZW1zLgorCSAqIChUaGUgZGVmYXVsdCB3ZWlnaHQgaXMgMTAyNCAtIHNvIHRoZXJlJ3Mgbm8gcHJhY3RpY2FsCisJICogIGxpbWl0YXRpb24gZnJvbSB0aGlzLikKKwkgKi8KKwlpZiAoc2hhcmVzIDwgTUlOX1NIQVJFUykKKwkJc2hhcmVzID0gTUlOX1NIQVJFUzsKKwogCW11dGV4X2xvY2soJnNoYXJlc19tdXRleCk7CiAJaWYgKHRnLT5zaGFyZXMgPT0gc2hhcmVzKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAoc2hhcmVzIDwgTUlOX0dST1VQX1NIQVJFUykKLQkJc2hhcmVzID0gTUlOX0dST1VQX1NIQVJFUzsKLQotCS8qCi0JICogUHJldmVudCBhbnkgbG9hZCBiYWxhbmNlIGFjdGl2aXR5IChyZWJhbGFuY2Vfc2hhcmVzLAotCSAqIGxvYWRfYmFsYW5jZV9mYWlyKSBmcm9tIHJlZmVycmluZyB0byB0aGlzIGdyb3VwIGZpcnN0LAotCSAqIGJ5IHRha2luZyBpdCBvZmYgdGhlIHJxLT5sZWFmX2Nmc19ycV9saXN0IG9uIGVhY2ggY3B1LgotCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrX2dyb3VwX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJdW5yZWdpc3Rlcl9mYWlyX3NjaGVkX2dyb3VwKHRnLCBpKTsKKwlsaXN0X2RlbF9yY3UoJnRnLT5zaWJsaW5ncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFza19ncm91cF9sb2NrLCBmbGFncyk7CiAKIAkvKiB3YWl0IGZvciBhbnkgb25nb2luZyByZWZlcmVuY2UgdG8gdGhpcyBncm91cCB0byBmaW5pc2ggKi8KQEAgLTc4OTIsOSArODc5NiwxMSBAQAogCSAqLwogCXRnLT5zaGFyZXMgPSBzaGFyZXM7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJc3Bpbl9sb2NrX2lycSgmY3B1X3JxKGkpLT5sb2NrKTsKLQkJc2V0X3NlX3NoYXJlcyh0Zy0+c2VbaV0sIHNoYXJlcyk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3B1X3JxKGkpLT5sb2NrKTsKKwkJLyoKKwkJICogZm9yY2UgYSByZWJhbGFuY2UKKwkJICovCisJCWNmc19ycV9zZXRfc2hhcmVzKHRnLT5jZnNfcnFbaV0sIDApOworCQlzZXRfc2Vfc2hhcmVzKHRnLT5zZVtpXSwgc2hhcmVzL25yX2NwdV9pZHMpOwogCX0KIAogCS8qCkBAIC03OTA0LDYgKzg4MTAsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrX2dyb3VwX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJcmVnaXN0ZXJfZmFpcl9zY2hlZF9ncm91cCh0ZywgaSk7CisJbGlzdF9hZGRfcmN1KCZ0Zy0+c2libGluZ3MsICZ0Zy0+cGFyZW50LT5jaGlsZHJlbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFza19ncm91cF9sb2NrLCBmbGFncyk7CiBkb25lOgogCW11dGV4X3VubG9jaygmc2hhcmVzX211dGV4KTsKQEAgLTc5MjcsNjkgKzg4MzQsMjExIEBACiAJaWYgKHJ1bnRpbWUgPT0gUlVOVElNRV9JTkYpCiAJCXJldHVybiAxVUxMIDw8IDE2OwogCi0JcnVudGltZSAqPSAoMVVMTCA8PCAxNik7Ci0JZGl2NjRfNjQocnVudGltZSwgcGVyaW9kKTsKLQlyZXR1cm4gcnVudGltZTsKKwlyZXR1cm4gZGl2NjRfNjQocnVudGltZSA8PCAxNiwgcGVyaW9kKTsKIH0KIAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKK3N0YXRpYyBpbnQgX19ydF9zY2hlZHVsYWJsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2QsIHU2NCBydW50aW1lKQoreworCXN0cnVjdCB0YXNrX2dyb3VwICp0Z2ksICpwYXJlbnQgPSB0Zy0+cGFyZW50OworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOworCisJaWYgKCFwYXJlbnQpIHsKKwkJaWYgKGdsb2JhbF9ydF9wZXJpb2QoKSA8IHBlcmlvZCkKKwkJCXJldHVybiAwOworCisJCXJldHVybiB0b19yYXRpbyhwZXJpb2QsIHJ1bnRpbWUpIDwKKwkJCXRvX3JhdGlvKGdsb2JhbF9ydF9wZXJpb2QoKSwgZ2xvYmFsX3J0X3J1bnRpbWUoKSk7CisJfQorCisJaWYgKGt0aW1lX3RvX25zKHBhcmVudC0+cnRfYmFuZHdpZHRoLnJ0X3BlcmlvZCkgPCBwZXJpb2QpCisJCXJldHVybiAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRnaSwgJnBhcmVudC0+Y2hpbGRyZW4sIHNpYmxpbmdzKSB7CisJCWlmICh0Z2kgPT0gdGcpCisJCQljb250aW51ZTsKKworCQl0b3RhbCArPSB0b19yYXRpbyhrdGltZV90b19ucyh0Z2ktPnJ0X2JhbmR3aWR0aC5ydF9wZXJpb2QpLAorCQkJCXRnaS0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWUpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiB0b3RhbCArIHRvX3JhdGlvKHBlcmlvZCwgcnVudGltZSkgPAorCQl0b19yYXRpbyhrdGltZV90b19ucyhwYXJlbnQtPnJ0X2JhbmR3aWR0aC5ydF9wZXJpb2QpLAorCQkJCXBhcmVudC0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWUpOworfQorI2VsaWYgZGVmaW5lZCBDT05GSUdfVVNFUl9TQ0hFRAogc3RhdGljIGludCBfX3J0X3NjaGVkdWxhYmxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZCwgdTY0IHJ1bnRpbWUpCiB7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnaTsKIAl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKIAl1bnNpZ25lZCBsb25nIGdsb2JhbF9yYXRpbyA9Ci0JCXRvX3JhdGlvKHN5c2N0bF9zY2hlZF9ydF9wZXJpb2QsCi0JCQkgc3lzY3RsX3NjaGVkX3J0X3J1bnRpbWUgPCAwID8KLQkJCQlSVU5USU1FX0lORiA6IHN5c2N0bF9zY2hlZF9ydF9ydW50aW1lKTsKKwkJdG9fcmF0aW8oZ2xvYmFsX3J0X3BlcmlvZCgpLCBnbG9iYWxfcnRfcnVudGltZSgpKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0Z2ksICZ0YXNrX2dyb3VwcywgbGlzdCkgewogCQlpZiAodGdpID09IHRnKQogCQkJY29udGludWU7CiAKLQkJdG90YWwgKz0gdG9fcmF0aW8ocGVyaW9kLCB0Z2ktPnJ0X3J1bnRpbWUpOworCQl0b3RhbCArPSB0b19yYXRpbyhrdGltZV90b19ucyh0Z2ktPnJ0X2JhbmR3aWR0aC5ydF9wZXJpb2QpLAorCQkJCXRnaS0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWUpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiB0b3RhbCArIHRvX3JhdGlvKHBlcmlvZCwgcnVudGltZSkgPCBnbG9iYWxfcmF0aW87CiB9CisjZW5kaWYKIAotaW50IHNjaGVkX2dyb3VwX3NldF9ydF9ydW50aW1lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgbG9uZyBydF9ydW50aW1lX3VzKQorLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXNrbGlzdF9sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRnX2hhc19ydF90YXNrcyhzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiB7Ci0JdTY0IHJ0X3J1bnRpbWUsIHJ0X3BlcmlvZDsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOworCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKKwkJaWYgKHJ0X3Rhc2socCkgJiYgcnRfcnFfb2Zfc2UoJnAtPnJ0KS0+dGcgPT0gdGcpCisJCQlyZXR1cm4gMTsKKwl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOworCXJldHVybiAwOworfQogCi0JcnRfcGVyaW9kID0gc3lzY3RsX3NjaGVkX3J0X3BlcmlvZCAqIE5TRUNfUEVSX1VTRUM7Ci0JcnRfcnVudGltZSA9ICh1NjQpcnRfcnVudGltZV91cyAqIE5TRUNfUEVSX1VTRUM7Ci0JaWYgKHJ0X3J1bnRpbWVfdXMgPT0gLTEpCi0JCXJ0X3J1bnRpbWUgPSBydF9wZXJpb2Q7CitzdGF0aWMgaW50IHRnX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLAorCQl1NjQgcnRfcGVyaW9kLCB1NjQgcnRfcnVudGltZSkKK3sKKwlpbnQgaSwgZXJyID0gMDsKIAogCW11dGV4X2xvY2soJnJ0X2NvbnN0cmFpbnRzX211dGV4KTsKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWlmIChydF9ydW50aW1lID09IDAgJiYgdGdfaGFzX3J0X3Rhc2tzKHRnKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrOworCX0KIAlpZiAoIV9fcnRfc2NoZWR1bGFibGUodGcsIHJ0X3BlcmlvZCwgcnRfcnVudGltZSkpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQotCWlmIChydF9ydW50aW1lX3VzID09IC0xKQotCQlydF9ydW50aW1lID0gUlVOVElNRV9JTkY7Ci0JdGctPnJ0X3J1bnRpbWUgPSBydF9ydW50aW1lOworCisJc3Bpbl9sb2NrX2lycSgmdGctPnJ0X2JhbmR3aWR0aC5ydF9ydW50aW1lX2xvY2spOworCXRnLT5ydF9iYW5kd2lkdGgucnRfcGVyaW9kID0gbnNfdG9fa3RpbWUocnRfcGVyaW9kKTsKKwl0Zy0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWUgPSBydF9ydW50aW1lOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IHJ0X3JxICpydF9ycSA9IHRnLT5ydF9ycVtpXTsKKworCQlzcGluX2xvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlydF9ycS0+cnRfcnVudGltZSA9IHJ0X3J1bnRpbWU7CisJCXNwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZ0Zy0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWVfbG9jayk7CiAgdW5sb2NrOgorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAltdXRleF91bmxvY2soJnJ0X2NvbnN0cmFpbnRzX211dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CiAKK2ludCBzY2hlZF9ncm91cF9zZXRfcnRfcnVudGltZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGxvbmcgcnRfcnVudGltZV91cykKK3sKKwl1NjQgcnRfcnVudGltZSwgcnRfcGVyaW9kOworCisJcnRfcGVyaW9kID0ga3RpbWVfdG9fbnModGctPnJ0X2JhbmR3aWR0aC5ydF9wZXJpb2QpOworCXJ0X3J1bnRpbWUgPSAodTY0KXJ0X3J1bnRpbWVfdXMgKiBOU0VDX1BFUl9VU0VDOworCWlmIChydF9ydW50aW1lX3VzIDwgMCkKKwkJcnRfcnVudGltZSA9IFJVTlRJTUVfSU5GOworCisJcmV0dXJuIHRnX3NldF9iYW5kd2lkdGgodGcsIHJ0X3BlcmlvZCwgcnRfcnVudGltZSk7Cit9CisKIGxvbmcgc2NoZWRfZ3JvdXBfcnRfcnVudGltZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiB7CiAJdTY0IHJ0X3J1bnRpbWVfdXM7CiAKLQlpZiAodGctPnJ0X3J1bnRpbWUgPT0gUlVOVElNRV9JTkYpCisJaWYgKHRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZSA9PSBSVU5USU1FX0lORikKIAkJcmV0dXJuIC0xOwogCi0JcnRfcnVudGltZV91cyA9IHRnLT5ydF9ydW50aW1lOworCXJ0X3J1bnRpbWVfdXMgPSB0Zy0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWU7CiAJZG9fZGl2KHJ0X3J1bnRpbWVfdXMsIE5TRUNfUEVSX1VTRUMpOwogCXJldHVybiBydF9ydW50aW1lX3VzOwogfQorCitpbnQgc2NoZWRfZ3JvdXBfc2V0X3J0X3BlcmlvZChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGxvbmcgcnRfcGVyaW9kX3VzKQoreworCXU2NCBydF9ydW50aW1lLCBydF9wZXJpb2Q7CisKKwlydF9wZXJpb2QgPSAodTY0KXJ0X3BlcmlvZF91cyAqIE5TRUNfUEVSX1VTRUM7CisJcnRfcnVudGltZSA9IHRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZTsKKworCXJldHVybiB0Z19zZXRfYmFuZHdpZHRoKHRnLCBydF9wZXJpb2QsIHJ0X3J1bnRpbWUpOworfQorCitsb25nIHNjaGVkX2dyb3VwX3J0X3BlcmlvZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCit7CisJdTY0IHJ0X3BlcmlvZF91czsKKworCXJ0X3BlcmlvZF91cyA9IGt0aW1lX3RvX25zKHRnLT5ydF9iYW5kd2lkdGgucnRfcGVyaW9kKTsKKwlkb19kaXYocnRfcGVyaW9kX3VzLCBOU0VDX1BFUl9VU0VDKTsKKwlyZXR1cm4gcnRfcGVyaW9kX3VzOworfQorCitzdGF0aWMgaW50IHNjaGVkX3J0X2dsb2JhbF9jb25zdHJhaW50cyh2b2lkKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcnRfY29uc3RyYWludHNfbXV0ZXgpOworCWlmICghX19ydF9zY2hlZHVsYWJsZShOVUxMLCAxLCAwKSkKKwkJcmV0ID0gLUVJTlZBTDsKKwltdXRleF91bmxvY2soJnJ0X2NvbnN0cmFpbnRzX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisjZWxzZQorc3RhdGljIGludCBzY2hlZF9ydF9nbG9iYWxfY29uc3RyYWludHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlZl9ydF9iYW5kd2lkdGgucnRfcnVudGltZV9sb2NrLCBmbGFncyk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IHJ0X3JxICpydF9ycSA9ICZjcHVfcnEoaSktPnJ0OworCisJCXNwaW5fbG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CisJCXJ0X3JxLT5ydF9ydW50aW1lID0gZ2xvYmFsX3J0X3J1bnRpbWUoKTsKKwkJc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZWZfcnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKLSNlbmRpZgkvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KKworaW50IHNjaGVkX3J0X2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwKKwkJbG9mZl90ICpwcG9zKQoreworCWludCByZXQ7CisJaW50IG9sZF9wZXJpb2QsIG9sZF9ydW50aW1lOworCXN0YXRpYyBERUZJTkVfTVVURVgobXV0ZXgpOworCisJbXV0ZXhfbG9jaygmbXV0ZXgpOworCW9sZF9wZXJpb2QgPSBzeXNjdGxfc2NoZWRfcnRfcGVyaW9kOworCW9sZF9ydW50aW1lID0gc3lzY3RsX3NjaGVkX3J0X3J1bnRpbWU7CisKKwlyZXQgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKworCWlmICghcmV0ICYmIHdyaXRlKSB7CisJCXJldCA9IHNjaGVkX3J0X2dsb2JhbF9jb25zdHJhaW50cygpOworCQlpZiAocmV0KSB7CisJCQlzeXNjdGxfc2NoZWRfcnRfcGVyaW9kID0gb2xkX3BlcmlvZDsKKwkJCXN5c2N0bF9zY2hlZF9ydF9ydW50aW1lID0gb2xkX3J1bnRpbWU7CisJCX0gZWxzZSB7CisJCQlkZWZfcnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWUgPSBnbG9iYWxfcnRfcnVudGltZSgpOworCQkJZGVmX3J0X2JhbmR3aWR0aC5ydF9wZXJpb2QgPQorCQkJCW5zX3RvX2t0aW1lKGdsb2JhbF9ydF9wZXJpb2QoKSk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZtdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCkBAIC04MDAzLDcgKzkwNTIsNyBAQAogc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoKIGNwdV9jZ3JvdXBfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCkKIHsKLQlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CisJc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCAqcGFyZW50OwogCiAJaWYgKCFjZ3JwLT5wYXJlbnQpIHsKIAkJLyogVGhpcyBpcyBlYXJseSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHRvcCBjZ3JvdXAgKi8KQEAgLTgwMTEsMTEgKzkwNjAsOCBAQAogCQlyZXR1cm4gJmluaXRfdGFza19ncm91cC5jc3M7CiAJfQogCi0JLyogd2Ugc3VwcG9ydCBvbmx5IDEtbGV2ZWwgZGVlcCBoaWVyYXJjaGljYWwgc2NoZWR1bGVyIGF0bSAqLwotCWlmIChjZ3JwLT5wYXJlbnQtPnBhcmVudCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQl0ZyA9IHNjaGVkX2NyZWF0ZV9ncm91cCgpOworCXBhcmVudCA9IGNncm91cF90ZyhjZ3JwLT5wYXJlbnQpOworCXRnID0gc2NoZWRfY3JlYXRlX2dyb3VwKHBhcmVudCk7CiAJaWYgKElTX0VSUih0ZykpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC04MDM5LDcgKzkwODUsNyBAQAogewogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCS8qIERvbid0IGFjY2VwdCByZWFsdGltZSB0YXNrcyB3aGVuIHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlbSB0byBydW4gKi8KLQlpZiAocnRfdGFzayh0c2spICYmIGNncm91cF90ZyhjZ3JwKS0+cnRfcnVudGltZSA9PSAwKQorCWlmIChydF90YXNrKHRzaykgJiYgY2dyb3VwX3RnKGNncnApLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCBSVC10YXNrcyBiZWluZyBpbiBzZXBhcmF0ZSBncm91cHMgKi8KQEAgLTgwNzMsNyArOTExOSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotc3RhdGljIGludCBjcHVfcnRfcnVudGltZV93cml0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCitzdGF0aWMgc3NpemVfdCBjcHVfcnRfcnVudGltZV93cml0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCiAJCQkJc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICp1bnVzZWRfcHBvcykKQEAgLTgxMTcsNiArOTE2MywxNyBAQAogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCB0bXAsIGxlbik7CiB9CisKK3N0YXRpYyBpbnQgY3B1X3J0X3BlcmlvZF93cml0ZV91aW50KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZnR5cGUgKmNmdHlwZSwKKwkJdTY0IHJ0X3BlcmlvZF91cykKK3sKKwlyZXR1cm4gc2NoZWRfZ3JvdXBfc2V0X3J0X3BlcmlvZChjZ3JvdXBfdGcoY2dycCksIHJ0X3BlcmlvZF91cyk7Cit9CisKK3N0YXRpYyB1NjQgY3B1X3J0X3BlcmlvZF9yZWFkX3VpbnQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNmdHlwZSAqY2Z0KQoreworCXJldHVybiBzY2hlZF9ncm91cF9ydF9wZXJpb2QoY2dyb3VwX3RnKGNncnApKTsKK30KICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGNmdHlwZSBjcHVfZmlsZXNbXSA9IHsKQEAgLTgxMzMsNiArOTE5MCwxMSBAQAogCQkucmVhZCA9IGNwdV9ydF9ydW50aW1lX3JlYWQsCiAJCS53cml0ZSA9IGNwdV9ydF9ydW50aW1lX3dyaXRlLAogCX0sCisJeworCQkubmFtZSA9ICJydF9wZXJpb2RfdXMiLAorCQkucmVhZF91aW50ID0gY3B1X3J0X3BlcmlvZF9yZWFkX3VpbnQsCisJCS53cml0ZV91aW50ID0gY3B1X3J0X3BlcmlvZF93cml0ZV91aW50LAorCX0sCiAjZW5kaWYKIH07CiAKQEAgLTgxNzMsOSArOTIzNSw5IEBACiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBjcHVhY2N0X3N1YnN5czsKIAogLyogcmV0dXJuIGNwdSBhY2NvdW50aW5nIGdyb3VwIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBjb250YWluZXIgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNwdWFjY3QgKmNncm91cF9jYShzdHJ1Y3QgY2dyb3VwICpjb250KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3B1YWNjdCAqY2dyb3VwX2NhKHN0cnVjdCBjZ3JvdXAgKmNncnApCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjZ3JvdXBfc3Vic3lzX3N0YXRlKGNvbnQsIGNwdWFjY3Rfc3Vic3lzX2lkKSwKKwlyZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJzeXNfc3RhdGUoY2dycCwgY3B1YWNjdF9zdWJzeXNfaWQpLAogCQkJICAgIHN0cnVjdCBjcHVhY2N0LCBjc3MpOwogfQogCkBAIC04MTg4LDcgKzkyNTAsNyBAQAogCiAvKiBjcmVhdGUgYSBuZXcgY3B1IGFjY291bnRpbmcgZ3JvdXAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3B1YWNjdF9jcmVhdGUoCi0Jc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQorCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCkKIHsKIAlzdHJ1Y3QgY3B1YWNjdCAqY2EgPSBremFsbG9jKHNpemVvZigqY2EpLCBHRlBfS0VSTkVMKTsKIApAQCAtODIwNiwxOCArOTI2OCwxOCBAQAogCiAvKiBkZXN0cm95IGFuIGV4aXN0aW5nIGNwdSBhY2NvdW50aW5nIGdyb3VwICovCiBzdGF0aWMgdm9pZAotY3B1YWNjdF9kZXN0cm95KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCkKK2NwdWFjY3RfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnApCiB7Ci0Jc3RydWN0IGNwdWFjY3QgKmNhID0gY2dyb3VwX2NhKGNvbnQpOworCXN0cnVjdCBjcHVhY2N0ICpjYSA9IGNncm91cF9jYShjZ3JwKTsKIAogCWZyZWVfcGVyY3B1KGNhLT5jcHV1c2FnZSk7CiAJa2ZyZWUoY2EpOwogfQogCiAvKiByZXR1cm4gdG90YWwgY3B1IHVzYWdlIChpbiBuYW5vc2Vjb25kcykgb2YgYSBncm91cCAqLwotc3RhdGljIHU2NCBjcHV1c2FnZV9yZWFkKHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCBjZnR5cGUgKmNmdCkKK3N0YXRpYyB1NjQgY3B1dXNhZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCiB7Ci0Jc3RydWN0IGNwdWFjY3QgKmNhID0gY2dyb3VwX2NhKGNvbnQpOworCXN0cnVjdCBjcHVhY2N0ICpjYSA9IGNncm91cF9jYShjZ3JwKTsKIAl1NjQgdG90YWxjcHV1c2FnZSA9IDA7CiAJaW50IGk7CiAKQEAgLTgyMzYsMTYgKzkyOTgsNDAgQEAKIAlyZXR1cm4gdG90YWxjcHV1c2FnZTsKIH0KIAorc3RhdGljIGludCBjcHV1c2FnZV93cml0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsCisJCQkJCQkJCXU2NCByZXNldCkKK3sKKwlzdHJ1Y3QgY3B1YWNjdCAqY2EgPSBjZ3JvdXBfY2EoY2dycCk7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwlpZiAocmVzZXQpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJdTY0ICpjcHV1c2FnZSA9IHBlcmNwdV9wdHIoY2EtPmNwdXVzYWdlLCBpKTsKKworCQlzcGluX2xvY2tfaXJxKCZjcHVfcnEoaSktPmxvY2spOworCQkqY3B1dXNhZ2UgPSAwOworCQlzcGluX3VubG9ja19pcnEoJmNwdV9ycShpKS0+bG9jayk7CisJfQorb3V0OgorCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGZpbGVzW10gPSB7CiAJewogCQkubmFtZSA9ICJ1c2FnZSIsCiAJCS5yZWFkX3VpbnQgPSBjcHV1c2FnZV9yZWFkLAorCQkud3JpdGVfdWludCA9IGNwdXVzYWdlX3dyaXRlLAogCX0sCiB9OwogCi1zdGF0aWMgaW50IGNwdWFjY3RfcG9wdWxhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQorc3RhdGljIGludCBjcHVhY2N0X3BvcHVsYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCkKIHsKLQlyZXR1cm4gY2dyb3VwX2FkZF9maWxlcyhjb250LCBzcywgZmlsZXMsIEFSUkFZX1NJWkUoZmlsZXMpKTsKKwlyZXR1cm4gY2dyb3VwX2FkZF9maWxlcyhjZ3JwLCBzcywgZmlsZXMsIEFSUkFZX1NJWkUoZmlsZXMpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKaW5kZXggNGI1ZTI0Yy4uZjNmNGFmNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKQEAgLTY3LDE0ICs2NywyNCBAQAogCQkobG9uZyBsb25nKShwLT5udmNzdyArIHAtPm5pdmNzdyksCiAJCXAtPnByaW8pOwogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCi0JU0VRX3ByaW50ZihtLCAiJTlMZC4lMDZsZCAlOUxkLiUwNmxkICU5TGQuJTA2bGRcbiIsCisJU0VRX3ByaW50ZihtLCAiJTlMZC4lMDZsZCAlOUxkLiUwNmxkICU5TGQuJTA2bGQiLAogCQlTUExJVF9OUyhwLT5zZS52cnVudGltZSksCiAJCVNQTElUX05TKHAtPnNlLnN1bV9leGVjX3J1bnRpbWUpLAogCQlTUExJVF9OUyhwLT5zZS5zdW1fc2xlZXBfcnVudGltZSkpOwogI2Vsc2UKLQlTRVFfcHJpbnRmKG0sICIlMTVMZCAlMTVMZCAlMTVMZC4lMDZsZCAlMTVMZC4lMDZsZCAlMTVMZC4lMDZsZFxuIiwKKwlTRVFfcHJpbnRmKG0sICIlMTVMZCAlMTVMZCAlMTVMZC4lMDZsZCAlMTVMZC4lMDZsZCAlMTVMZC4lMDZsZCIsCiAJCTBMTCwgMExMLCAwTEwsIDBMLCAwTEwsIDBMLCAwTEwsIDBMKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAorCXsKKwkJY2hhciBwYXRoWzY0XTsKKworCQljZ3JvdXBfcGF0aCh0YXNrX2dyb3VwKHApLT5jc3MuY2dyb3VwLCBwYXRoLCBzaXplb2YocGF0aCkpOworCQlTRVFfcHJpbnRmKG0sICIgJXMiLCBwYXRoKTsKKwl9CisjZW5kaWYKKwlTRVFfcHJpbnRmKG0sICJcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9ycShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBycSAqcnEsIGludCBycV9jcHUpCkBAIC0xMDksNyArMTE5LDIxIEBACiAJc3RydWN0IHNjaGVkX2VudGl0eSAqbGFzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JU0VRX3ByaW50ZihtLCAiXG5jZnNfcnFcbiIpOworI2lmICFkZWZpbmVkKENPTkZJR19DR1JPVVBfU0NIRUQpIHx8ICFkZWZpbmVkKENPTkZJR19VU0VSX1NDSEVEKQorCVNFUV9wcmludGYobSwgIlxuY2ZzX3JxWyVkXTpcbiIsIGNwdSk7CisjZWxzZQorCWNoYXIgcGF0aFsxMjhdID0gIiI7CisJc3RydWN0IGNncm91cCAqY2dyb3VwID0gTlVMTDsKKwlzdHJ1Y3QgdGFza19ncm91cCAqdGcgPSBjZnNfcnEtPnRnOworCisJaWYgKHRnKQorCQljZ3JvdXAgPSB0Zy0+Y3NzLmNncm91cDsKKworCWlmIChjZ3JvdXApCisJCWNncm91cF9wYXRoKGNncm91cCwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKKworCVNFUV9wcmludGYobSwgIlxuY2ZzX3JxWyVkXTolc1xuIiwgY3B1LCBwYXRoKTsKKyNlbmRpZgogCiAJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVMZC4lMDZsZFxuIiwgImV4ZWNfY2xvY2siLAogCQkJU1BMSVRfTlMoY2ZzX3JxLT5leGVjX2Nsb2NrKSk7CkBAIC0xNDMsNiArMTY3LDExIEBACiAjZW5kaWYKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWxkXG4iLCAibnJfc3ByZWFkX292ZXIiLAogCQkJY2ZzX3JxLT5ucl9zcHJlYWRfb3Zlcik7CisjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKKyNpZmRlZiBDT05GSUdfU01QCisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsdVxuIiwgInNoYXJlcyIsIGNmc19ycS0+c2hhcmVzKTsKKyNlbmRpZgorI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2NwdShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUpCkBAIC0yMTQsNyArMjQzLDYgQEAKIAlQTihzeXNjdGxfc2NoZWRfbGF0ZW5jeSk7CiAJUE4oc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSk7CiAJUE4oc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7Ci0JUE4oc3lzY3RsX3NjaGVkX2JhdGNoX3dha2V1cF9ncmFudWxhcml0eSk7CiAJUE4oc3lzY3RsX3NjaGVkX2NoaWxkX3J1bnNfZmlyc3QpOwogCVAoc3lzY3RsX3NjaGVkX2ZlYXR1cmVzKTsKICN1bmRlZiBQTgpAQCAtMjg4LDYgKzMxNiw3IEBACiAJUE4oc2UuZXhlY19zdGFydCk7CiAJUE4oc2UudnJ1bnRpbWUpOwogCVBOKHNlLnN1bV9leGVjX3J1bnRpbWUpOworCVBOKHNlLmF2Z19vdmVybGFwKTsKIAogCW5yX3N3aXRjaGVzID0gcC0+bnZjc3cgKyBwLT5uaXZjc3c7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDZjMDkxZDYuLjg5ZmEzMmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNjIsMTYgKzYyLDYgQEAKIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHN5c2N0bF9zY2hlZF9jb21wYXRfeWllbGQ7CiAKIC8qCi0gKiBTQ0hFRF9CQVRDSCB3YWtlLXVwIGdyYW51bGFyaXR5LgotICogKGRlZmF1bHQ6IDEwIG1zZWMgKiAoMSArIGlsb2cobmNwdXMpKSwgdW5pdHM6IG5hbm9zZWNvbmRzKQotICoKLSAqIFRoaXMgb3B0aW9uIGRlbGF5cyB0aGUgcHJlZW1wdGlvbiBlZmZlY3RzIG9mIGRlY291cGxlZCB3b3JrbG9hZHMKLSAqIGFuZCByZWR1Y2VzIHRoZWlyIG92ZXItc2NoZWR1bGluZy4gU3luY2hyb25vdXMgd29ya2xvYWRzIHdpbGwgc3RpbGwKLSAqIGhhdmUgaW1tZWRpYXRlIHdha2V1cC9zbGVlcCBsYXRlbmNpZXMuCi0gKi8KLXVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfYmF0Y2hfd2FrZXVwX2dyYW51bGFyaXR5ID0gMTAwMDAwMDBVTDsKLQotLyoKICAqIFNDSEVEX09USEVSIHdha2UtdXAgZ3JhbnVsYXJpdHkuCiAgKiAoZGVmYXVsdDogMTAgbXNlYyAqICgxICsgaWxvZyhuY3B1cykpLCB1bml0czogbmFub3NlY29uZHMpCiAgKgpAQCAtODcsNiArNzcsMTEgQEAKICAqIENGUyBvcGVyYXRpb25zIG9uIGdlbmVyaWMgc2NoZWR1bGFibGUgZW50aXRpZXM6CiAgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfb2Yoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZSwgc3RydWN0IHRhc2tfc3RydWN0LCBzZSk7Cit9CisKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCiAvKiBjcHUgcnVucXVldWUgdG8gd2hpY2ggdGhpcyBjZnNfcnEgaXMgYXR0YWNoZWQgKi8KQEAgLTk4LDYgKzkzLDU0IEBACiAvKiBBbiBlbnRpdHkgaXMgYSB0YXNrIGlmIGl0IGRvZXNuJ3QgIm93biIgYSBydW5xdWV1ZSAqLwogI2RlZmluZSBlbnRpdHlfaXNfdGFzayhzZSkJKCFzZS0+bXlfcSkKIAorLyogV2FsayB1cCBzY2hlZHVsaW5nIGVudGl0aWVzIGhpZXJhcmNoeSAqLworI2RlZmluZSBmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIFwKKwkJZm9yICg7IHNlOyBzZSA9IHNlLT5wYXJlbnQpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmc19ycSAqdGFza19jZnNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiBwLT5zZS5jZnNfcnE7Cit9CisKKy8qIHJ1bnF1ZXVlIG9uIHdoaWNoIHRoaXMgZW50aXR5IGlzICh0byBiZSkgcXVldWVkICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnNfcnEgKmNmc19ycV9vZihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwlyZXR1cm4gc2UtPmNmc19ycTsKK30KKworLyogcnVucXVldWUgIm93bmVkIiBieSB0aGlzIGdyb3VwICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnNfcnEgKmdyb3VwX2Nmc19ycShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpncnApCit7CisJcmV0dXJuIGdycC0+bXlfcTsKK30KKworLyogR2l2ZW4gYSBncm91cCdzIGNmc19ycSBvbiBvbmUgY3B1LCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2ZzX3JxIG9uCisgKiBhbm90aGVyIGNwdSAoJ3RoaXNfY3B1JykKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZzX3JxICpjcHVfY2ZzX3JxKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IHRoaXNfY3B1KQoreworCXJldHVybiBjZnNfcnEtPnRnLT5jZnNfcnFbdGhpc19jcHVdOworfQorCisvKiBJdGVyYXRlIHRocicgYWxsIGxlYWYgY2ZzX3JxJ3Mgb24gYSBydW5xdWV1ZSAqLworI2RlZmluZSBmb3JfZWFjaF9sZWFmX2Nmc19ycShycSwgY2ZzX3JxKSBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2ZzX3JxLCAmcnEtPmxlYWZfY2ZzX3JxX2xpc3QsIGxlYWZfY2ZzX3JxX2xpc3QpCisKKy8qIERvIHRoZSB0d28gKGVucXVldWVkKSBlbnRpdGllcyBiZWxvbmcgdG8gdGhlIHNhbWUgZ3JvdXAgPyAqLworc3RhdGljIGlubGluZSBpbnQKK2lzX3NhbWVfZ3JvdXAoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBzZSkKK3sKKwlpZiAoc2UtPmNmc19ycSA9PSBwc2UtPmNmc19ycSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwYXJlbnRfZW50aXR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCXJldHVybiBzZS0+cGFyZW50OworfQorCiAjZWxzZQkvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2Yoc3RydWN0IGNmc19ycSAqY2ZzX3JxKQpAQCAtMTA3LDEzICsxNTAsNDkgQEAKIAogI2RlZmluZSBlbnRpdHlfaXNfdGFzayhzZSkJMQogCi0jZW5kaWYJLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KKyNkZWZpbmUgZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSBcCisJCWZvciAoOyBzZTsgc2UgPSBOVUxMKQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19vZihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmc19ycSAqdGFza19jZnNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJldHVybiBjb250YWluZXJfb2Yoc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UpOworCXJldHVybiAmdGFza19ycShwKS0+Y2ZzOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnNfcnEgKmNmc19ycV9vZihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSB0YXNrX29mKHNlKTsKKwlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKworCXJldHVybiAmcnEtPmNmczsKK30KKworLyogcnVucXVldWUgIm93bmVkIiBieSB0aGlzIGdyb3VwICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnNfcnEgKmdyb3VwX2Nmc19ycShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpncnApCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmc19ycSAqY3B1X2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIGludCB0aGlzX2NwdSkKK3sKKwlyZXR1cm4gJmNwdV9ycSh0aGlzX2NwdSktPmNmczsKK30KKworI2RlZmluZSBmb3JfZWFjaF9sZWFmX2Nmc19ycShycSwgY2ZzX3JxKSBcCisJCWZvciAoY2ZzX3JxID0gJnJxLT5jZnM7IGNmc19ycTsgY2ZzX3JxID0gTlVMTCkKKworc3RhdGljIGlubGluZSBpbnQKK2lzX3NhbWVfZ3JvdXAoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBzZSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwYXJlbnRfZW50aXR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCXJldHVybiBOVUxMOworfQorCisjZW5kaWYJLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNjaGVkdWxpbmcgY2xhc3MgdHJlZSBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gbWV0aG9kczoKQEAgLTE3NSw4ICsyNTQsMTUgQEAKIAkgKiBNYWludGFpbiBhIGNhY2hlIG9mIGxlZnRtb3N0IHRyZWUgZW50cmllcyAoaXQgaXMgZnJlcXVlbnRseQogCSAqIHVzZWQpOgogCSAqLwotCWlmIChsZWZ0bW9zdCkKKwlpZiAobGVmdG1vc3QpIHsKIAkJY2ZzX3JxLT5yYl9sZWZ0bW9zdCA9ICZzZS0+cnVuX25vZGU7CisJCS8qCisJCSAqIG1haW50YWluIGNmc19ycS0+bWluX3ZydW50aW1lIHRvIGJlIGEgbW9ub3RvbmljIGluY3JlYXNpbmcKKwkJICogdmFsdWUgdHJhY2tpbmcgdGhlIGxlZnRtb3N0IHZydW50aW1lIGluIHRoZSB0cmVlLgorCQkgKi8KKwkJY2ZzX3JxLT5taW5fdnJ1bnRpbWUgPQorCQkJbWF4X3ZydW50aW1lKGNmc19ycS0+bWluX3ZydW50aW1lLCBzZS0+dnJ1bnRpbWUpOworCX0KIAogCXJiX2xpbmtfbm9kZSgmc2UtPnJ1bl9ub2RlLCBwYXJlbnQsIGxpbmspOwogCXJiX2luc2VydF9jb2xvcigmc2UtPnJ1bl9ub2RlLCAmY2ZzX3JxLT50YXNrc190aW1lbGluZSk7CkBAIC0xODQsOCArMjcwLDI0IEBACiAKIHN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKLQlpZiAoY2ZzX3JxLT5yYl9sZWZ0bW9zdCA9PSAmc2UtPnJ1bl9ub2RlKQotCQljZnNfcnEtPnJiX2xlZnRtb3N0ID0gcmJfbmV4dCgmc2UtPnJ1bl9ub2RlKTsKKwlpZiAoY2ZzX3JxLT5yYl9sZWZ0bW9zdCA9PSAmc2UtPnJ1bl9ub2RlKSB7CisJCXN0cnVjdCByYl9ub2RlICpuZXh0X25vZGU7CisJCXN0cnVjdCBzY2hlZF9lbnRpdHkgKm5leHQ7CisKKwkJbmV4dF9ub2RlID0gcmJfbmV4dCgmc2UtPnJ1bl9ub2RlKTsKKwkJY2ZzX3JxLT5yYl9sZWZ0bW9zdCA9IG5leHRfbm9kZTsKKworCQlpZiAobmV4dF9ub2RlKSB7CisJCQluZXh0ID0gcmJfZW50cnkobmV4dF9ub2RlLAorCQkJCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5LCBydW5fbm9kZSk7CisJCQljZnNfcnEtPm1pbl92cnVudGltZSA9CisJCQkJbWF4X3ZydW50aW1lKGNmc19ycS0+bWluX3ZydW50aW1lLAorCQkJCQkgICAgIG5leHQtPnZydW50aW1lKTsKKwkJfQorCX0KKworCWlmIChjZnNfcnEtPm5leHQgPT0gc2UpCisJCWNmc19ycS0+bmV4dCA9IE5VTEw7CiAKIAlyYl9lcmFzZSgmc2UtPnJ1bl9ub2RlLCAmY2ZzX3JxLT50YXNrc190aW1lbGluZSk7CiB9CkBAIC0yMDIsMTcgKzMwNCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2hlZF9lbnRpdHkgKl9fcGlja19sYXN0X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipsaW5rID0gJmNmc19ycS0+dGFza3NfdGltZWxpbmUucmJfbm9kZTsKLQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IE5VTEw7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbGFzdCA9IHJiX2xhc3QoJmNmc19ycS0+dGFza3NfdGltZWxpbmUpOwogCi0Jd2hpbGUgKCpsaW5rKSB7Ci0JCXBhcmVudCA9ICpsaW5rOwotCQlzZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHNjaGVkX2VudGl0eSwgcnVuX25vZGUpOwotCQlsaW5rID0gJnBhcmVudC0+cmJfcmlnaHQ7Ci0JfQorCWlmICghbGFzdCkKKwkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gc2U7CisJcmV0dXJuIHJiX2VudHJ5KGxhc3QsIHN0cnVjdCBzY2hlZF9lbnRpdHksIHJ1bl9ub2RlKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMzcsNiArMzM0LDM0IEBACiAjZW5kaWYKIAogLyoKKyAqIGRlbHRhICo9IHcgLyBydworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NhbGNfZGVsdGFfd2VpZ2h0KHVuc2lnbmVkIGxvbmcgZGVsdGEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgeworCQlkZWx0YSA9IGNhbGNfZGVsdGFfbWluZShkZWx0YSwKKwkJCQlzZS0+bG9hZC53ZWlnaHQsICZjZnNfcnFfb2Yoc2UpLT5sb2FkKTsKKwl9CisKKwlyZXR1cm4gZGVsdGE7Cit9CisKKy8qCisgKiBkZWx0YSAqPSBydyAvIHcKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjYWxjX2RlbHRhX2ZhaXIodW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCit7CisJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7CisJCWRlbHRhID0gY2FsY19kZWx0YV9taW5lKGRlbHRhLAorCQkJCWNmc19ycV9vZihzZSktPmxvYWQud2VpZ2h0LCAmc2UtPmxvYWQpOworCX0KKworCXJldHVybiBkZWx0YTsKK30KKworLyoKICAqIFRoZSBpZGVhIGlzIHRvIHNldCBhIHBlcmlvZCBpbiB3aGljaCBlYWNoIHRhc2sgcnVucyBvbmNlLgogICoKICAqIFdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IHRhc2tzIChzeXNjdGxfc2NoZWRfbnJfbGF0ZW5jeSkgd2UgaGF2ZSB0byBzdHJldGNoCkBAIC0yNjUsMzggKzM5MCw1NCBAQAogICovCiBzdGF0aWMgdTY0IHNjaGVkX3NsaWNlKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiB7Ci0JdTY0IHNsaWNlID0gX19zY2hlZF9wZXJpb2QoY2ZzX3JxLT5ucl9ydW5uaW5nKTsKLQotCXNsaWNlICo9IHNlLT5sb2FkLndlaWdodDsKLQlkb19kaXYoc2xpY2UsIGNmc19ycS0+bG9hZC53ZWlnaHQpOwotCi0JcmV0dXJuIHNsaWNlOworCXJldHVybiBjYWxjX2RlbHRhX3dlaWdodChfX3NjaGVkX3BlcmlvZChjZnNfcnEtPm5yX3J1bm5pbmcpLCBzZSk7CiB9CiAKIC8qCi0gKiBXZSBjYWxjdWxhdGUgdGhlIHZydW50aW1lIHNsaWNlLgorICogV2UgY2FsY3VsYXRlIHRoZSB2cnVudGltZSBzbGljZSBvZiBhIHRvIGJlIGluc2VydGVkIHRhc2sKICAqCi0gKiB2cyA9IHMvdyA9IHAvcncKKyAqIHZzID0gcypydy93ID0gcAogICovCi1zdGF0aWMgdTY0IF9fc2NoZWRfdnNsaWNlKHVuc2lnbmVkIGxvbmcgcnFfd2VpZ2h0LCB1bnNpZ25lZCBsb25nIG5yX3J1bm5pbmcpCi17Ci0JdTY0IHZzbGljZSA9IF9fc2NoZWRfcGVyaW9kKG5yX3J1bm5pbmcpOwotCi0JdnNsaWNlICo9IE5JQ0VfMF9MT0FEOwotCWRvX2Rpdih2c2xpY2UsIHJxX3dlaWdodCk7Ci0KLQlyZXR1cm4gdnNsaWNlOwotfQotCi1zdGF0aWMgdTY0IHNjaGVkX3ZzbGljZShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCi17Ci0JcmV0dXJuIF9fc2NoZWRfdnNsaWNlKGNmc19ycS0+bG9hZC53ZWlnaHQsIGNmc19ycS0+bnJfcnVubmluZyk7Ci19Ci0KIHN0YXRpYyB1NjQgc2NoZWRfdnNsaWNlX2FkZChzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCXJldHVybiBfX3NjaGVkX3ZzbGljZShjZnNfcnEtPmxvYWQud2VpZ2h0ICsgc2UtPmxvYWQud2VpZ2h0LAotCQkJY2ZzX3JxLT5ucl9ydW5uaW5nICsgMSk7CisJdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nID0gY2ZzX3JxLT5ucl9ydW5uaW5nOworCisJaWYgKCFzZS0+b25fcnEpCisJCW5yX3J1bm5pbmcrKzsKKworCXJldHVybiBfX3NjaGVkX3BlcmlvZChucl9ydW5uaW5nKTsKK30KKworLyoKKyAqIFRoZSBnb2FsIG9mIGNhbGNfZGVsdGFfYXN5bSgpIGlzIHRvIGJlIGFzeW1tZXRyaWNhbGx5IGFyb3VuZCBOSUNFXzBfTE9BRCwgaW4KKyAqIHRoYXQgaXQgZmF2b3VycyA+PTAgb3ZlciA8MC4KKyAqCisgKiAgIC0yMCAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgfAorICogICAgIDAgLS0tLS0tLS0rLS0tLS0tLQorICogICAgICAgICAgICAgLicKKyAqICAgIDE5ICAgICAuJworICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK2NhbGNfZGVsdGFfYXN5bSh1bnNpZ25lZCBsb25nIGRlbHRhLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwlzdHJ1Y3QgbG9hZF93ZWlnaHQgbHcgPSB7CisJCS53ZWlnaHQgPSBOSUNFXzBfTE9BRCwKKwkJLmludl93ZWlnaHQgPSAxVUwgPDwgKFdNVUxUX1NISUZULU5JQ0VfMF9TSElGVCkKKwl9OworCisJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7CisJCXN0cnVjdCBsb2FkX3dlaWdodCAqc2VfbHcgPSAmc2UtPmxvYWQ7CisKKwkJaWYgKHNlLT5sb2FkLndlaWdodCA8IE5JQ0VfMF9MT0FEKQorCQkJc2VfbHcgPSAmbHc7CisKKwkJZGVsdGEgPSBjYWxjX2RlbHRhX21pbmUoZGVsdGEsCisJCQkJY2ZzX3JxX29mKHNlKS0+bG9hZC53ZWlnaHQsIHNlX2x3KTsKKwl9CisKKwlyZXR1cm4gZGVsdGE7CiB9CiAKIC8qCkBAIC0zMDgsMzEgKzQ0OSwxMyBAQAogCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVsdGFfZXhlYykKIHsKIAl1bnNpZ25lZCBsb25nIGRlbHRhX2V4ZWNfd2VpZ2h0ZWQ7Ci0JdTY0IHZydW50aW1lOwogCiAJc2NoZWRzdGF0X3NldChjdXJyLT5leGVjX21heCwgbWF4KCh1NjQpZGVsdGFfZXhlYywgY3Vyci0+ZXhlY19tYXgpKTsKIAogCWN1cnItPnN1bV9leGVjX3J1bnRpbWUgKz0gZGVsdGFfZXhlYzsKIAlzY2hlZHN0YXRfYWRkKGNmc19ycSwgZXhlY19jbG9jaywgZGVsdGFfZXhlYyk7Ci0JZGVsdGFfZXhlY193ZWlnaHRlZCA9IGRlbHRhX2V4ZWM7Ci0JaWYgKHVubGlrZWx5KGN1cnItPmxvYWQud2VpZ2h0ICE9IE5JQ0VfMF9MT0FEKSkgewotCQlkZWx0YV9leGVjX3dlaWdodGVkID0gY2FsY19kZWx0YV9mYWlyKGRlbHRhX2V4ZWNfd2VpZ2h0ZWQsCi0JCQkJCQkJJmN1cnItPmxvYWQpOwotCX0KKwlkZWx0YV9leGVjX3dlaWdodGVkID0gY2FsY19kZWx0YV9mYWlyKGRlbHRhX2V4ZWMsIGN1cnIpOwogCWN1cnItPnZydW50aW1lICs9IGRlbHRhX2V4ZWNfd2VpZ2h0ZWQ7Ci0KLQkvKgotCSAqIG1haW50YWluIGNmc19ycS0+bWluX3ZydW50aW1lIHRvIGJlIGEgbW9ub3RvbmljIGluY3JlYXNpbmcKLQkgKiB2YWx1ZSB0cmFja2luZyB0aGUgbGVmdG1vc3QgdnJ1bnRpbWUgaW4gdGhlIHRyZWUuCi0JICovCi0JaWYgKGZpcnN0X2ZhaXIoY2ZzX3JxKSkgewotCQl2cnVudGltZSA9IG1pbl92cnVudGltZShjdXJyLT52cnVudGltZSwKLQkJCQlfX3BpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKS0+dnJ1bnRpbWUpOwotCX0gZWxzZQotCQl2cnVudGltZSA9IGN1cnItPnZydW50aW1lOwotCi0JY2ZzX3JxLT5taW5fdnJ1bnRpbWUgPQotCQltYXhfdnJ1bnRpbWUoY2ZzX3JxLT5taW5fdnJ1bnRpbWUsIHZydW50aW1lKTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2N1cnIoc3RydWN0IGNmc19ycSAqY2ZzX3JxKQpAQCAtNDE4LDIwICs1NDEsNDMgQEAKICAqIFNjaGVkdWxpbmcgY2xhc3MgcXVldWVpbmcgbWV0aG9kczoKICAqLwogCisjaWYgZGVmaW5lZCBDT05GSUdfU01QICYmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKK3N0YXRpYyB2b2lkCithZGRfY2ZzX3Rhc2tfd2VpZ2h0KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgdW5zaWduZWQgbG9uZyB3ZWlnaHQpCit7CisJY2ZzX3JxLT50YXNrX3dlaWdodCArPSB3ZWlnaHQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkCithZGRfY2ZzX3Rhc2tfd2VpZ2h0KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgdW5zaWduZWQgbG9uZyB3ZWlnaHQpCit7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQKIGFjY291bnRfZW50aXR5X2VucXVldWUoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKIAl1cGRhdGVfbG9hZF9hZGQoJmNmc19ycS0+bG9hZCwgc2UtPmxvYWQud2VpZ2h0KTsKKwlpZiAoIXBhcmVudF9lbnRpdHkoc2UpKQorCQlpbmNfY3B1X2xvYWQocnFfb2YoY2ZzX3JxKSwgc2UtPmxvYWQud2VpZ2h0KTsKKwlpZiAoZW50aXR5X2lzX3Rhc2soc2UpKQorCQlhZGRfY2ZzX3Rhc2tfd2VpZ2h0KGNmc19ycSwgc2UtPmxvYWQud2VpZ2h0KTsKIAljZnNfcnEtPm5yX3J1bm5pbmcrKzsKIAlzZS0+b25fcnEgPSAxOworCWxpc3RfYWRkKCZzZS0+Z3JvdXBfbm9kZSwgJmNmc19ycS0+dGFza3MpOwogfQogCiBzdGF0aWMgdm9pZAogYWNjb3VudF9lbnRpdHlfZGVxdWV1ZShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewogCXVwZGF0ZV9sb2FkX3N1YigmY2ZzX3JxLT5sb2FkLCBzZS0+bG9hZC53ZWlnaHQpOworCWlmICghcGFyZW50X2VudGl0eShzZSkpCisJCWRlY19jcHVfbG9hZChycV9vZihjZnNfcnEpLCBzZS0+bG9hZC53ZWlnaHQpOworCWlmIChlbnRpdHlfaXNfdGFzayhzZSkpCisJCWFkZF9jZnNfdGFza193ZWlnaHQoY2ZzX3JxLCAtc2UtPmxvYWQud2VpZ2h0KTsKIAljZnNfcnEtPm5yX3J1bm5pbmctLTsKIAlzZS0+b25fcnEgPSAwOworCWxpc3RfZGVsX2luaXQoJnNlLT5ncm91cF9ub2RlKTsKIH0KIAogc3RhdGljIHZvaWQgZW5xdWV1ZV9zbGVlcGVyKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCkBAIC00OTgsMTYgKzY0NCwxMSBAQAogewogCXU2NCB2cnVudGltZTsKIAotCXZydW50aW1lID0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7Ci0KLQlpZiAoc2NoZWRfZmVhdChUUkVFX0FWRykpIHsKLQkJc3RydWN0IHNjaGVkX2VudGl0eSAqbGFzdCA9IF9fcGlja19sYXN0X2VudGl0eShjZnNfcnEpOwotCQlpZiAobGFzdCkgewotCQkJdnJ1bnRpbWUgKz0gbGFzdC0+dnJ1bnRpbWU7Ci0JCQl2cnVudGltZSA+Pj0gMTsKLQkJfQotCX0gZWxzZSBpZiAoc2NoZWRfZmVhdChBUFBST1hfQVZHKSAmJiBjZnNfcnEtPm5yX3J1bm5pbmcpCi0JCXZydW50aW1lICs9IHNjaGVkX3ZzbGljZShjZnNfcnEpLzI7CisJaWYgKGZpcnN0X2ZhaXIoY2ZzX3JxKSkgeworCQl2cnVudGltZSA9IG1pbl92cnVudGltZShjZnNfcnEtPm1pbl92cnVudGltZSwKKwkJCQlfX3BpY2tfbmV4dF9lbnRpdHkoY2ZzX3JxKS0+dnJ1bnRpbWUpOworCX0gZWxzZQorCQl2cnVudGltZSA9IGNmc19ycS0+bWluX3ZydW50aW1lOwogCiAJLyoKIAkgKiBUaGUgJ2N1cnJlbnQnIHBlcmlvZCBpcyBhbHJlYWR5IHByb21pc2VkIHRvIHRoZSBjdXJyZW50IHRhc2tzLApAQCAtNTIwLDggKzY2MSwxMiBAQAogCiAJaWYgKCFpbml0aWFsKSB7CiAJCS8qIHNsZWVwcyB1cHRvIGEgc2luZ2xlIGxhdGVuY3kgZG9uJ3QgY291bnQuICovCi0JCWlmIChzY2hlZF9mZWF0KE5FV19GQUlSX1NMRUVQRVJTKSkKLQkJCXZydW50aW1lIC09IHN5c2N0bF9zY2hlZF9sYXRlbmN5OworCQlpZiAoc2NoZWRfZmVhdChORVdfRkFJUl9TTEVFUEVSUykpIHsKKwkJCWlmIChzY2hlZF9mZWF0KE5PUk1BTElaRURfU0xFRVBFUikpCisJCQkJdnJ1bnRpbWUgLT0gY2FsY19kZWx0YV93ZWlnaHQoc3lzY3RsX3NjaGVkX2xhdGVuY3ksIHNlKTsKKwkJCWVsc2UKKwkJCQl2cnVudGltZSAtPSBzeXNjdGxfc2NoZWRfbGF0ZW5jeTsKKwkJfQogCiAJCS8qIGVuc3VyZSB3ZSBuZXZlciBnYWluIHRpbWUgYnkgYmVpbmcgcGxhY2VkIGJhY2t3YXJkcy4gKi8KIAkJdnJ1bnRpbWUgPSBtYXhfdnJ1bnRpbWUoc2UtPnZydW50aW1lLCB2cnVudGltZSk7CkBAIC01NTAsNiArNjk1LDIxIEBACiAJYWNjb3VudF9lbnRpdHlfZW5xdWV1ZShjZnNfcnEsIHNlKTsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlX2F2Zyh1NjQgKmF2ZywgdTY0IHNhbXBsZSkKK3sKKwlzNjQgZGlmZiA9IHNhbXBsZSAtICphdmc7CisJKmF2ZyArPSBkaWZmID4+IDM7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9hdmdfc3RhdHMoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwlpZiAoIXNlLT5sYXN0X3dha2V1cCkKKwkJcmV0dXJuOworCisJdXBkYXRlX2F2Zygmc2UtPmF2Z19vdmVybGFwLCBzZS0+c3VtX2V4ZWNfcnVudGltZSAtIHNlLT5sYXN0X3dha2V1cCk7CisJc2UtPmxhc3Rfd2FrZXVwID0gMDsKK30KKwogc3RhdGljIHZvaWQKIGRlcXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBzbGVlcCkKIHsKQEAgLTU2MCw2ICs3MjAsNyBAQAogCiAJdXBkYXRlX3N0YXRzX2RlcXVldWUoY2ZzX3JxLCBzZSk7CiAJaWYgKHNsZWVwKSB7CisJCXVwZGF0ZV9hdmdfc3RhdHMoY2ZzX3JxLCBzZSk7CiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAkJaWYgKGVudGl0eV9pc190YXNrKHNlKSkgewogCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSB0YXNrX29mKHNlKTsKQEAgLTYyMSwxMiArNzgyLDI4IEBACiAJc2UtPnByZXZfc3VtX2V4ZWNfcnVudGltZSA9IHNlLT5zdW1fZXhlY19ydW50aW1lOwogfQogCitzdGF0aWMgaW50Cit3YWtldXBfcHJlZW1wdF9lbnRpdHkoc3RydWN0IHNjaGVkX2VudGl0eSAqY3Vyciwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpOworCitzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqCitwaWNrX25leHQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwlpZiAoIWNmc19ycS0+bmV4dCkKKwkJcmV0dXJuIHNlOworCisJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPm5leHQsIHNlKSAhPSAwKQorCQlyZXR1cm4gc2U7CisKKwlyZXR1cm4gY2ZzX3JxLT5uZXh0OworfQorCiBzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqcGlja19uZXh0X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSBOVUxMOwogCiAJaWYgKGZpcnN0X2ZhaXIoY2ZzX3JxKSkgewogCQlzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCQlzZSA9IHBpY2tfbmV4dChjZnNfcnEsIHNlKTsKIAkJc2V0X25leHRfZW50aXR5KGNmc19ycSwgc2UpOwogCX0KIApAQCAtNjgyLDEwMyArODU5LDYgQEAKICAqIENGUyBvcGVyYXRpb25zIG9uIHRhc2tzOgogICovCiAKLSNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotCi0vKiBXYWxrIHVwIHNjaGVkdWxpbmcgZW50aXRpZXMgaGllcmFyY2h5ICovCi0jZGVmaW5lIGZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgXAotCQlmb3IgKDsgc2U7IHNlID0gc2UtPnBhcmVudCkKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZzX3JxICp0YXNrX2Nmc19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuIHAtPnNlLmNmc19ycTsKLX0KLQotLyogcnVucXVldWUgb24gd2hpY2ggdGhpcyBlbnRpdHkgaXMgKHRvIGJlKSBxdWV1ZWQgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNmc19ycSAqY2ZzX3JxX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQotewotCXJldHVybiBzZS0+Y2ZzX3JxOwotfQotCi0vKiBydW5xdWV1ZSAib3duZWQiIGJ5IHRoaXMgZ3JvdXAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNmc19ycSAqZ3JvdXBfY2ZzX3JxKHN0cnVjdCBzY2hlZF9lbnRpdHkgKmdycCkKLXsKLQlyZXR1cm4gZ3JwLT5teV9xOwotfQotCi0vKiBHaXZlbiBhIGdyb3VwJ3MgY2ZzX3JxIG9uIG9uZSBjcHUsIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjZnNfcnEgb24KLSAqIGFub3RoZXIgY3B1ICgndGhpc19jcHUnKQotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjZnNfcnEgKmNwdV9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBpbnQgdGhpc19jcHUpCi17Ci0JcmV0dXJuIGNmc19ycS0+dGctPmNmc19ycVt0aGlzX2NwdV07Ci19Ci0KLS8qIEl0ZXJhdGUgdGhyJyBhbGwgbGVhZiBjZnNfcnEncyBvbiBhIHJ1bnF1ZXVlICovCi0jZGVmaW5lIGZvcl9lYWNoX2xlYWZfY2ZzX3JxKHJxLCBjZnNfcnEpIFwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjZnNfcnEsICZycS0+bGVhZl9jZnNfcnFfbGlzdCwgbGVhZl9jZnNfcnFfbGlzdCkKLQotLyogRG8gdGhlIHR3byAoZW5xdWV1ZWQpIGVudGl0aWVzIGJlbG9uZyB0byB0aGUgc2FtZSBncm91cCA/ICovCi1zdGF0aWMgaW5saW5lIGludAotaXNfc2FtZV9ncm91cChzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgc3RydWN0IHNjaGVkX2VudGl0eSAqcHNlKQotewotCWlmIChzZS0+Y2ZzX3JxID09IHBzZS0+Y2ZzX3JxKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBhcmVudF9lbnRpdHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCi17Ci0JcmV0dXJuIHNlLT5wYXJlbnQ7Ci19Ci0KLSNkZWZpbmUgR1JPVVBfSU1CQUxBTkNFX1BDVAkyMAotCi0jZWxzZQkvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwotCi0jZGVmaW5lIGZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgXAotCQlmb3IgKDsgc2U7IHNlID0gTlVMTCkKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZzX3JxICp0YXNrX2Nmc19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuICZ0YXNrX3JxKHApLT5jZnM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNmc19ycSAqY2ZzX3JxX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHRhc2tfb2Yoc2UpOwotCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwotCi0JcmV0dXJuICZycS0+Y2ZzOwotfQotCi0vKiBydW5xdWV1ZSAib3duZWQiIGJ5IHRoaXMgZ3JvdXAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNmc19ycSAqZ3JvdXBfY2ZzX3JxKHN0cnVjdCBzY2hlZF9lbnRpdHkgKmdycCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZzX3JxICpjcHVfY2ZzX3JxKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IHRoaXNfY3B1KQotewotCXJldHVybiAmY3B1X3JxKHRoaXNfY3B1KS0+Y2ZzOwotfQotCi0jZGVmaW5lIGZvcl9lYWNoX2xlYWZfY2ZzX3JxKHJxLCBjZnNfcnEpIFwKLQkJZm9yIChjZnNfcnEgPSAmcnEtPmNmczsgY2ZzX3JxOyBjZnNfcnEgPSBOVUxMKQotCi1zdGF0aWMgaW5saW5lIGludAotaXNfc2FtZV9ncm91cChzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgc3RydWN0IHNjaGVkX2VudGl0eSAqcHNlKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBhcmVudF9lbnRpdHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNlbmRpZgkvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwotCiAjaWZkZWYgQ09ORklHX1NDSEVEX0hSVElDSwogc3RhdGljIHZvaWQgaHJ0aWNrX3N0YXJ0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtODI0LDI2ICs5MDQsMTUgQEAKIHN0YXRpYyB2b2lkIGVucXVldWVfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7Ci0Jc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2UsCi0JCQkgICAgKnRvcHNlID0gTlVMTDsJLyogSGlnaGVzdCBzY2hlZHVsYWJsZSBlbnRpdHkgKi8KLQlpbnQgaW5jbG9hZCA9IDE7CisJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2U7CiAKIAlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHsKLQkJdG9wc2UgPSBzZTsKLQkJaWYgKHNlLT5vbl9ycSkgewotCQkJaW5jbG9hZCA9IDA7CisJCWlmIChzZS0+b25fcnEpCiAJCQlicmVhazsKLQkJfQogCQljZnNfcnEgPSBjZnNfcnFfb2Yoc2UpOwogCQllbnF1ZXVlX2VudGl0eShjZnNfcnEsIHNlLCB3YWtldXApOwogCQl3YWtldXAgPSAxOwogCX0KLQkvKiBJbmNyZW1lbnQgY3B1IGxvYWQgaWYgd2UganVzdCBlbnF1ZXVlZCB0aGUgZmlyc3QgdGFzayBvZiBhIGdyb3VwIG9uCi0JICogJ3JxLT5jcHUnLiAndG9wc2UnIHJlcHJlc2VudHMgdGhlIGdyb3VwIHRvIHdoaWNoIHRhc2sgJ3AnIGJlbG9uZ3MKLQkgKiBhdCB0aGUgaGlnaGVzdCBncm91cGluZyBsZXZlbC4KLQkgKi8KLQlpZiAoaW5jbG9hZCkKLQkJaW5jX2NwdV9sb2FkKHJxLCB0b3BzZS0+bG9hZC53ZWlnaHQpOwogCiAJaHJ0aWNrX3N0YXJ0X2ZhaXIocnEsIHJxLT5jdXJyKTsKIH0KQEAgLTg1NiwyOCArOTI1LDE2IEBACiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7Ci0Jc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2UsCi0JCQkgICAgKnRvcHNlID0gTlVMTDsgCS8qIEhpZ2hlc3Qgc2NoZWR1bGFibGUgZW50aXR5ICovCi0JaW50IGRlY2xvYWQgPSAxOworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOwogCiAJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7Ci0JCXRvcHNlID0gc2U7CiAJCWNmc19ycSA9IGNmc19ycV9vZihzZSk7CiAJCWRlcXVldWVfZW50aXR5KGNmc19ycSwgc2UsIHNsZWVwKTsKIAkJLyogRG9uJ3QgZGVxdWV1ZSBwYXJlbnQgaWYgaXQgaGFzIG90aGVyIGVudGl0aWVzIGJlc2lkZXMgdXMgKi8KLQkJaWYgKGNmc19ycS0+bG9hZC53ZWlnaHQpIHsKLQkJCWlmIChwYXJlbnRfZW50aXR5KHNlKSkKLQkJCQlkZWNsb2FkID0gMDsKKwkJaWYgKGNmc19ycS0+bG9hZC53ZWlnaHQpCiAJCQlicmVhazsKLQkJfQogCQlzbGVlcCA9IDE7CiAJfQotCS8qIERlY3JlbWVudCBjcHUgbG9hZCBpZiB3ZSBqdXN0IGRlcXVldWVkIHRoZSBsYXN0IHRhc2sgb2YgYSBncm91cCBvbgotCSAqICdycS0+Y3B1Jy4gJ3RvcHNlJyByZXByZXNlbnRzIHRoZSBncm91cCB0byB3aGljaCB0YXNrICdwJyBiZWxvbmdzCi0JICogYXQgdGhlIGhpZ2hlc3QgZ3JvdXBpbmcgbGV2ZWwuCi0JICovCi0JaWYgKGRlY2xvYWQpCi0JCWRlY19jcHVfbG9hZChycSwgdG9wc2UtPmxvYWQud2VpZ2h0KTsKIAogCWhydGlja19zdGFydF9mYWlyKHJxLCBycS0+Y3Vycik7CiB9CkBAIC05MTUsNyArOTcyLDcgQEAKIAkvKgogCSAqIEFscmVhZHkgaW4gdGhlIHJpZ2h0bW9zdCBwb3NpdGlvbj8KIAkgKi8KLQlpZiAodW5saWtlbHkocmlnaHRtb3N0LT52cnVudGltZSA8IHNlLT52cnVudGltZSkpCisJaWYgKHVubGlrZWx5KCFyaWdodG1vc3QgfHwgcmlnaHRtb3N0LT52cnVudGltZSA8IHNlLT52cnVudGltZSkpCiAJCXJldHVybjsKIAogCS8qCkBAIC05NTQsNyArMTAxMSw5IEBACiAJCXJldHVybiBjcHU7CiAKIAlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewotCQlpZiAoc2QtPmZsYWdzICYgU0RfV0FLRV9JRExFKSB7CisJCWlmICgoc2QtPmZsYWdzICYgU0RfV0FLRV9JRExFKQorCQkgICAgfHwgKChzZC0+ZmxhZ3MgJiBTRF9XQUtFX0lETEVfRkFSKQorCQkJJiYgIXRhc2tfaG90KHAsIHRhc2tfcnEocCktPmNsb2NrLCBzZCkpKSB7CiAJCQljcHVzX2FuZCh0bXAsIHNkLT5zcGFuLCBwLT5jcHVzX2FsbG93ZWQpOwogCQkJZm9yX2VhY2hfY3B1X21hc2soaSwgdG1wKSB7CiAJCQkJaWYgKGlkbGVfY3B1KGkpKSB7CkBAIC05NzksMTAwICsxMDM4LDE3NyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgZmFpcl9zY2hlZF9jbGFzczsKKworc3RhdGljIGludAord2FrZV9hZmZpbmUoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqdGhpc19zZCwgc3RydWN0IHJxICp0aGlzX3JxLAorCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcmV2X2NwdSwgaW50IHRoaXNfY3B1LCBpbnQgc3luYywKKwkgICAgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb2FkLCB1bnNpZ25lZCBsb25nIHRoaXNfbG9hZCwKKwkgICAgdW5zaWduZWQgaW50IGltYmFsYW5jZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSB0aGlzX3JxLT5jdXJyOworCXVuc2lnbmVkIGxvbmcgdGwgPSB0aGlzX2xvYWQ7CisJdW5zaWduZWQgbG9uZyB0bF9wZXJfdGFzazsKKworCWlmICghKHRoaXNfc2QtPmZsYWdzICYgU0RfV0FLRV9BRkZJTkUpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgd2lsbCBzbGVlcCB3aXRoaW4KKwkgKiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUgdGhlbiBhdHRyYWN0IHRoaXMgbmV3bHkKKwkgKiB3b2tlbiB0YXNrOgorCSAqLworCWlmIChzeW5jICYmIGN1cnItPnNjaGVkX2NsYXNzID09ICZmYWlyX3NjaGVkX2NsYXNzKSB7CisJCWlmIChjdXJyLT5zZS5hdmdfb3ZlcmxhcCA8IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCAmJgorCQkJCXAtPnNlLmF2Z19vdmVybGFwIDwgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KQorCQkJcmV0dXJuIDE7CisJfQorCisJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl93YWtldXBzX2FmZmluZV9hdHRlbXB0cyk7CisJdGxfcGVyX3Rhc2sgPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOworCisJLyoKKwkgKiBJZiBzeW5jIHdha2V1cCB0aGVuIHN1YnRyYWN0IHRoZSAobWF4aW11bSBwb3NzaWJsZSkKKwkgKiBlZmZlY3Qgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgZnJvbSB0aGUgbG9hZAorCSAqIG9mIHRoZSBjdXJyZW50IENQVToKKwkgKi8KKwlpZiAoc3luYykKKwkJdGwgLT0gY3VycmVudC0+c2UubG9hZC53ZWlnaHQ7CisKKwlpZiAoKHRsIDw9IGxvYWQgJiYgdGwgKyB0YXJnZXRfbG9hZChwcmV2X2NwdSwgaWR4KSA8PSB0bF9wZXJfdGFzaykgfHwKKwkJCTEwMCoodGwgKyBwLT5zZS5sb2FkLndlaWdodCkgPD0gaW1iYWxhbmNlKmxvYWQpIHsKKwkJLyoKKwkJICogVGhpcyBkb21haW4gaGFzIFNEX1dBS0VfQUZGSU5FIGFuZAorCQkgKiBwIGlzIGNhY2hlIGNvbGQgaW4gdGhpcyBkb21haW4sIGFuZAorCQkgKiB0aGVyZSBpcyBubyBiYWQgaW1iYWxhbmNlLgorCQkgKi8KKwkJc2NoZWRzdGF0X2luYyh0aGlzX3NkLCB0dHd1X21vdmVfYWZmaW5lKTsKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl93YWtldXBzX2FmZmluZSk7CisKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNlbGVjdF90YXNrX3JxX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3luYykKIHsKLQlpbnQgY3B1LCB0aGlzX2NwdTsKLQlzdHJ1Y3QgcnEgKnJxOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCAqdGhpc19zZCA9IE5VTEw7Ci0JaW50IG5ld19jcHU7CisJaW50IHByZXZfY3B1LCB0aGlzX2NwdSwgbmV3X2NwdTsKKwl1bnNpZ25lZCBsb25nIGxvYWQsIHRoaXNfbG9hZDsKKwlzdHJ1Y3QgcnEgKnJxLCAqdGhpc19ycTsKKwl1bnNpZ25lZCBpbnQgaW1iYWxhbmNlOworCWludCBpZHg7CiAKLQljcHUgICAgICA9IHRhc2tfY3B1KHApOwotCXJxICAgICAgID0gdGFza19ycShwKTsKLQl0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQluZXdfY3B1ICA9IGNwdTsKKwlwcmV2X2NwdQk9IHRhc2tfY3B1KHApOworCXJxCQk9IHRhc2tfcnEocCk7CisJdGhpc19jcHUJPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdGhpc19ycQkJPSBjcHVfcnEodGhpc19jcHUpOworCW5ld19jcHUJCT0gcHJldl9jcHU7CiAKLQlpZiAoY3B1ID09IHRoaXNfY3B1KQotCQlnb3RvIG91dF9zZXRfY3B1OwotCisJLyoKKwkgKiAndGhpc19zZCcgaXMgdGhlIGZpcnN0IGRvbWFpbiB0aGF0IGJvdGgKKwkgKiB0aGlzX2NwdSBhbmQgcHJldl9jcHUgYXJlIHByZXNlbnQgaW46CisJICovCiAJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewotCQlpZiAoY3B1X2lzc2V0KGNwdSwgc2QtPnNwYW4pKSB7CisJCWlmIChjcHVfaXNzZXQocHJldl9jcHUsIHNkLT5zcGFuKSkgewogCQkJdGhpc19zZCA9IHNkOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlpZiAodW5saWtlbHkoIWNwdV9pc3NldCh0aGlzX2NwdSwgcC0+Y3B1c19hbGxvd2VkKSkpCi0JCWdvdG8gb3V0X3NldF9jcHU7CisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBDaGVjayBmb3IgYWZmaW5lIHdha2V1cCBhbmQgcGFzc2l2ZSBiYWxhbmNpbmcgcG9zc2liaWxpdGllcy4KIAkgKi8KLQlpZiAodGhpc19zZCkgewotCQlpbnQgaWR4ID0gdGhpc19zZC0+d2FrZV9pZHg7Ci0JCXVuc2lnbmVkIGludCBpbWJhbGFuY2U7Ci0JCXVuc2lnbmVkIGxvbmcgbG9hZCwgdGhpc19sb2FkOworCWlmICghdGhpc19zZCkKKwkJZ290byBvdXQ7CiAKLQkJaW1iYWxhbmNlID0gMTAwICsgKHRoaXNfc2QtPmltYmFsYW5jZV9wY3QgLSAxMDApIC8gMjsKKwlpZHggPSB0aGlzX3NkLT53YWtlX2lkeDsKIAotCQlsb2FkID0gc291cmNlX2xvYWQoY3B1LCBpZHgpOwotCQl0aGlzX2xvYWQgPSB0YXJnZXRfbG9hZCh0aGlzX2NwdSwgaWR4KTsKKwlpbWJhbGFuY2UgPSAxMDAgKyAodGhpc19zZC0+aW1iYWxhbmNlX3BjdCAtIDEwMCkgLyAyOwogCi0JCW5ld19jcHUgPSB0aGlzX2NwdTsgLyogV2FrZSB0byB0aGlzIENQVSBpZiB3ZSBjYW4gKi8KKwlsb2FkID0gc291cmNlX2xvYWQocHJldl9jcHUsIGlkeCk7CisJdGhpc19sb2FkID0gdGFyZ2V0X2xvYWQodGhpc19jcHUsIGlkeCk7CiAKLQkJaWYgKHRoaXNfc2QtPmZsYWdzICYgU0RfV0FLRV9BRkZJTkUpIHsKLQkJCXVuc2lnbmVkIGxvbmcgdGwgPSB0aGlzX2xvYWQ7Ci0JCQl1bnNpZ25lZCBsb25nIHRsX3Blcl90YXNrOworCWlmICh3YWtlX2FmZmluZShycSwgdGhpc19zZCwgdGhpc19ycSwgcCwgcHJldl9jcHUsIHRoaXNfY3B1LCBzeW5jLCBpZHgsCisJCQkJICAgICBsb2FkLCB0aGlzX2xvYWQsIGltYmFsYW5jZSkpCisJCXJldHVybiB0aGlzX2NwdTsKIAotCQkJLyoKLQkJCSAqIEF0dHJhY3QgY2FjaGUtY29sZCB0YXNrcyBvbiBzeW5jIHdha2V1cHM6Ci0JCQkgKi8KLQkJCWlmIChzeW5jICYmICF0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHRoaXNfc2QpKQotCQkJCWdvdG8gb3V0X3NldF9jcHU7CisJaWYgKHByZXZfY3B1ID09IHRoaXNfY3B1KQorCQlnb3RvIG91dDsKIAotCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl93YWtldXBzX2FmZmluZV9hdHRlbXB0cyk7Ci0JCQl0bF9wZXJfdGFzayA9IGNwdV9hdmdfbG9hZF9wZXJfdGFzayh0aGlzX2NwdSk7Ci0KLQkJCS8qCi0JCQkgKiBJZiBzeW5jIHdha2V1cCB0aGVuIHN1YnRyYWN0IHRoZSAobWF4aW11bSBwb3NzaWJsZSkKLQkJCSAqIGVmZmVjdCBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzayBmcm9tIHRoZSBsb2FkCi0JCQkgKiBvZiB0aGUgY3VycmVudCBDUFU6Ci0JCQkgKi8KLQkJCWlmIChzeW5jKQotCQkJCXRsIC09IGN1cnJlbnQtPnNlLmxvYWQud2VpZ2h0OwotCi0JCQlpZiAoKHRsIDw9IGxvYWQgJiYKLQkJCQl0bCArIHRhcmdldF9sb2FkKGNwdSwgaWR4KSA8PSB0bF9wZXJfdGFzaykgfHwKLQkJCSAgICAgICAxMDAqKHRsICsgcC0+c2UubG9hZC53ZWlnaHQpIDw9IGltYmFsYW5jZSpsb2FkKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIGRvbWFpbiBoYXMgU0RfV0FLRV9BRkZJTkUgYW5kCi0JCQkJICogcCBpcyBjYWNoZSBjb2xkIGluIHRoaXMgZG9tYWluLCBhbmQKLQkJCQkgKiB0aGVyZSBpcyBubyBiYWQgaW1iYWxhbmNlLgotCQkJCSAqLwotCQkJCXNjaGVkc3RhdF9pbmModGhpc19zZCwgdHR3dV9tb3ZlX2FmZmluZSk7Ci0JCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl93YWtldXBzX2FmZmluZSk7Ci0JCQkJZ290byBvdXRfc2V0X2NwdTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIFN0YXJ0IHBhc3NpdmUgYmFsYW5jaW5nIHdoZW4gaGFsZiB0aGUgaW1iYWxhbmNlX3BjdAotCQkgKiBsaW1pdCBpcyByZWFjaGVkLgotCQkgKi8KLQkJaWYgKHRoaXNfc2QtPmZsYWdzICYgU0RfV0FLRV9CQUxBTkNFKSB7Ci0JCQlpZiAoaW1iYWxhbmNlKnRoaXNfbG9hZCA8PSAxMDAqbG9hZCkgewotCQkJCXNjaGVkc3RhdF9pbmModGhpc19zZCwgdHR3dV9tb3ZlX2JhbGFuY2UpOwotCQkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfd2FrZXVwc19wYXNzaXZlKTsKLQkJCQlnb3RvIG91dF9zZXRfY3B1OwotCQkJfQorCS8qCisJICogU3RhcnQgcGFzc2l2ZSBiYWxhbmNpbmcgd2hlbiBoYWxmIHRoZSBpbWJhbGFuY2VfcGN0CisJICogbGltaXQgaXMgcmVhY2hlZC4KKwkgKi8KKwlpZiAodGhpc19zZC0+ZmxhZ3MgJiBTRF9XQUtFX0JBTEFOQ0UpIHsKKwkJaWYgKGltYmFsYW5jZSp0aGlzX2xvYWQgPD0gMTAwKmxvYWQpIHsKKwkJCXNjaGVkc3RhdF9pbmModGhpc19zZCwgdHR3dV9tb3ZlX2JhbGFuY2UpOworCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl93YWtldXBzX3Bhc3NpdmUpOworCQkJcmV0dXJuIHRoaXNfY3B1OwogCQl9CiAJfQogCi0JbmV3X2NwdSA9IGNwdTsgLyogQ291bGQgbm90IHdha2UgdG8gdGhpc19jcHUuIFdha2UgdG8gY3B1IGluc3RlYWQgKi8KLW91dF9zZXRfY3B1Ogorb3V0OgogCXJldHVybiB3YWtlX2lkbGUobmV3X2NwdSwgcCk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3YWtldXBfZ3JhbihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGdyYW4gPSBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OworCisJLyoKKwkgKiBNb3JlIGVhc2lseSBwcmVlbXB0IC0gbmljZSB0YXNrcywgd2hpbGUgbm90IG1ha2luZyBpdCBoYXJkZXIgZm9yCisJICogKyBuaWNlIHRhc2tzLgorCSAqLworCWdyYW4gPSBjYWxjX2RlbHRhX2FzeW0oc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSwgc2UpOworCisJcmV0dXJuIGdyYW47Cit9CisKKy8qCisgKiBTaG91bGQgJ3NlJyBwcmVlbXB0ICdjdXJyJy4KKyAqCisgKiAgICAgICAgICAgICB8czEKKyAqICAgICAgICB8czIKKyAqICAgfHMzCisgKiAgICAgICAgIGcKKyAqICAgICAgfDwtLS0+fGMKKyAqCisgKiAgdyhjLCBzMSkgPSAtMQorICogIHcoYywgczIpID0gIDAKKyAqICB3KGMsIHMzKSA9ICAxCisgKgorICovCitzdGF0aWMgaW50Cit3YWtldXBfcHJlZW1wdF9lbnRpdHkoc3RydWN0IHNjaGVkX2VudGl0eSAqY3Vyciwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCit7CisJczY0IGdyYW4sIHZkaWZmID0gY3Vyci0+dnJ1bnRpbWUgLSBzZS0+dnJ1bnRpbWU7CisKKwlpZiAodmRpZmYgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlncmFuID0gd2FrZXVwX2dyYW4oY3Vycik7CisJaWYgKHZkaWZmID4gZ3JhbikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogcmV0dXJuIGRlcHRoIGF0IHdoaWNoIGEgc2NoZWQgZW50aXR5IGlzIHByZXNlbnQgaW4gdGhlIGhpZXJhcmNoeSAqLworc3RhdGljIGlubGluZSBpbnQgZGVwdGhfc2Uoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCit7CisJaW50IGRlcHRoID0gMDsKKworCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkKKwkJZGVwdGgrKzsKKworCXJldHVybiBkZXB0aDsKK30KIAogLyoKICAqIFByZWVtcHQgdGhlIGN1cnJlbnQgdGFzayB3aXRoIGEgbmV3bHkgd29rZW4gdGFzayBpZiBuZWVkZWQ6CkBAIC0xMDgyLDcgKzEyMTgsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IHJxLT5jdXJyOwogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKGN1cnIpOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJmN1cnItPnNlLCAqcHNlID0gJnAtPnNlOwotCXVuc2lnbmVkIGxvbmcgZ3JhbjsKKwlpbnQgc2VfZGVwdGgsIHBzZV9kZXB0aDsKIAogCWlmICh1bmxpa2VseShydF9wcmlvKHAtPnByaW8pKSkgewogCQl1cGRhdGVfcnFfY2xvY2socnEpOwpAQCAtMTA5MCw2ICsxMjI2LDEzIEBACiAJCXJlc2NoZWRfdGFzayhjdXJyKTsKIAkJcmV0dXJuOwogCX0KKworCXNlLT5sYXN0X3dha2V1cCA9IHNlLT5zdW1fZXhlY19ydW50aW1lOworCWlmICh1bmxpa2VseShzZSA9PSBwc2UpKQorCQlyZXR1cm47CisKKwljZnNfcnFfb2YocHNlKS0+bmV4dCA9IHBzZTsKKwogCS8qCiAJICogQmF0Y2ggdGFza3MgZG8gbm90IHByZWVtcHQgKHRoZWlyIHByZWVtcHRpb24gaXMgZHJpdmVuIGJ5CiAJICogdGhlIHRpY2spOgpAQCAtMTEwMCwyMCArMTI0MywzMyBAQAogCWlmICghc2NoZWRfZmVhdChXQUtFVVBfUFJFRU1QVCkpCiAJCXJldHVybjsKIAorCS8qCisJICogcHJlZW1wdGlvbiB0ZXN0IGNhbiBiZSBtYWRlIGJldHdlZW4gc2libGluZyBlbnRpdGllcyB3aG8gYXJlIGluIHRoZQorCSAqIHNhbWUgY2ZzX3JxIGkuZSB3aG8gaGF2ZSBhIGNvbW1vbiBwYXJlbnQuIFdhbGsgdXAgdGhlIGhpZXJhcmNoeSBvZgorCSAqIGJvdGggdGFza3MgdW50aWwgd2UgZmluZCB0aGVpciBhbmNlc3RvcnMgd2hvIGFyZSBzaWJsaW5ncyBvZiBjb21tb24KKwkgKiBwYXJlbnQuCisJICovCisKKwkvKiBGaXJzdCB3YWxrIHVwIHVudGlsIGJvdGggZW50aXRpZXMgYXJlIGF0IHNhbWUgZGVwdGggKi8KKwlzZV9kZXB0aCA9IGRlcHRoX3NlKHNlKTsKKwlwc2VfZGVwdGggPSBkZXB0aF9zZShwc2UpOworCisJd2hpbGUgKHNlX2RlcHRoID4gcHNlX2RlcHRoKSB7CisJCXNlX2RlcHRoLS07CisJCXNlID0gcGFyZW50X2VudGl0eShzZSk7CisJfQorCisJd2hpbGUgKHBzZV9kZXB0aCA+IHNlX2RlcHRoKSB7CisJCXBzZV9kZXB0aC0tOworCQlwc2UgPSBwYXJlbnRfZW50aXR5KHBzZSk7CisJfQorCiAJd2hpbGUgKCFpc19zYW1lX2dyb3VwKHNlLCBwc2UpKSB7CiAJCXNlID0gcGFyZW50X2VudGl0eShzZSk7CiAJCXBzZSA9IHBhcmVudF9lbnRpdHkocHNlKTsKIAl9CiAKLQlncmFuID0gc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eTsKLQkvKgotCSAqIE1vcmUgZWFzaWx5IHByZWVtcHQgLSBuaWNlIHRhc2tzLCB3aGlsZSBub3QgbWFraW5nCi0JICogaXQgaGFyZGVyIGZvciArIG5pY2UgdGFza3MuCi0JICovCi0JaWYgKHVubGlrZWx5KHNlLT5sb2FkLndlaWdodCA+IE5JQ0VfMF9MT0FEKSkKLQkJZ3JhbiA9IGNhbGNfZGVsdGFfZmFpcihncmFuLCAmc2UtPmxvYWQpOwotCi0JaWYgKHBzZS0+dnJ1bnRpbWUgKyBncmFuIDwgc2UtPnZydW50aW1lKQorCWlmICh3YWtldXBfcHJlZW1wdF9lbnRpdHkoc2UsIHBzZSkgPT0gMSkKIAkJcmVzY2hlZF90YXNrKGN1cnIpOwogfQogCkBAIC0xMTY0LDE1ICsxMzIwLDI3IEBACiAgKiB0aGUgY3VycmVudCB0YXNrOgogICovCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICoKLV9fbG9hZF9iYWxhbmNlX2l0ZXJhdG9yKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHJiX25vZGUgKmN1cnIpCitfX2xvYWRfYmFsYW5jZV9pdGVyYXRvcihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IE5VTEw7CisJc3RydWN0IHNjaGVkX2VudGl0eSAqc2U7CiAKLQlpZiAoIWN1cnIpCisJaWYgKG5leHQgPT0gJmNmc19ycS0+dGFza3MpCiAJCXJldHVybiBOVUxMOwogCi0JcCA9IHJiX2VudHJ5KGN1cnIsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UucnVuX25vZGUpOwotCWNmc19ycS0+cmJfbG9hZF9iYWxhbmNlX2N1cnIgPSByYl9uZXh0KGN1cnIpOworCS8qIFNraXAgb3ZlciBlbnRpdGllcyB0aGF0IGFyZSBub3QgdGFza3MgKi8KKwlkbyB7CisJCXNlID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3Qgc2NoZWRfZW50aXR5LCBncm91cF9ub2RlKTsKKwkJbmV4dCA9IG5leHQtPm5leHQ7CisJfSB3aGlsZSAobmV4dCAhPSAmY2ZzX3JxLT50YXNrcyAmJiAhZW50aXR5X2lzX3Rhc2soc2UpKTsKKworCWlmIChuZXh0ID09ICZjZnNfcnEtPnRhc2tzKQorCQlyZXR1cm4gTlVMTDsKKworCWNmc19ycS0+YmFsYW5jZV9pdGVyYXRvciA9IG5leHQ7CisKKwlpZiAoZW50aXR5X2lzX3Rhc2soc2UpKQorCQlwID0gdGFza19vZihzZSk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTExODEsMTA1ICsxMzQ5LDEwMCBAQAogewogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGFyZzsKIAotCXJldHVybiBfX2xvYWRfYmFsYW5jZV9pdGVyYXRvcihjZnNfcnEsIGZpcnN0X2ZhaXIoY2ZzX3JxKSk7CisJcmV0dXJuIF9fbG9hZF9iYWxhbmNlX2l0ZXJhdG9yKGNmc19ycSwgY2ZzX3JxLT50YXNrcy5uZXh0KTsKIH0KIAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqbG9hZF9iYWxhbmNlX25leHRfZmFpcih2b2lkICphcmcpCiB7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gYXJnOwogCi0JcmV0dXJuIF9fbG9hZF9iYWxhbmNlX2l0ZXJhdG9yKGNmc19ycSwgY2ZzX3JxLT5yYl9sb2FkX2JhbGFuY2VfY3Vycik7CisJcmV0dXJuIF9fbG9hZF9iYWxhbmNlX2l0ZXJhdG9yKGNmc19ycSwgY2ZzX3JxLT5iYWxhbmNlX2l0ZXJhdG9yKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcKK19fbG9hZF9iYWxhbmNlX2ZhaXIoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKKwkJdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbywKKwkJc3RydWN0IGNmc19ycSAqY2ZzX3JxKQoreworCXN0cnVjdCBycV9pdGVyYXRvciBjZnNfcnFfaXRlcmF0b3I7CisKKwljZnNfcnFfaXRlcmF0b3Iuc3RhcnQgPSBsb2FkX2JhbGFuY2Vfc3RhcnRfZmFpcjsKKwljZnNfcnFfaXRlcmF0b3IubmV4dCA9IGxvYWRfYmFsYW5jZV9uZXh0X2ZhaXI7CisJY2ZzX3JxX2l0ZXJhdG9yLmFyZyA9IGNmc19ycTsKKworCXJldHVybiBiYWxhbmNlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCQkJbWF4X2xvYWRfbW92ZSwgc2QsIGlkbGUsIGFsbF9waW5uZWQsCisJCQl0aGlzX2Jlc3RfcHJpbywgJmNmc19ycV9pdGVyYXRvcik7Cit9CisKKyNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorc3RhdGljIHVuc2lnbmVkIGxvbmcKIGxvYWRfYmFsYW5jZV9mYWlyKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCiAJCSAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAogCQkgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKIAkJICBpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8pCiB7Ci0Jc3RydWN0IGNmc19ycSAqYnVzeV9jZnNfcnE7CiAJbG9uZyByZW1fbG9hZF9tb3ZlID0gbWF4X2xvYWRfbW92ZTsKLQlzdHJ1Y3QgcnFfaXRlcmF0b3IgY2ZzX3JxX2l0ZXJhdG9yOwotCXVuc2lnbmVkIGxvbmcgbG9hZF9tb3ZlZDsKKwlpbnQgYnVzaWVzdF9jcHUgPSBjcHVfb2YoYnVzaWVzdCk7CisJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwogCi0JY2ZzX3JxX2l0ZXJhdG9yLnN0YXJ0ID0gbG9hZF9iYWxhbmNlX3N0YXJ0X2ZhaXI7Ci0JY2ZzX3JxX2l0ZXJhdG9yLm5leHQgPSBsb2FkX2JhbGFuY2VfbmV4dF9mYWlyOwotCi0JZm9yX2VhY2hfbGVhZl9jZnNfcnEoYnVzaWVzdCwgYnVzeV9jZnNfcnEpIHsKLSNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotCQlzdHJ1Y3QgY2ZzX3JxICp0aGlzX2Nmc19ycSA9IGJ1c3lfY2ZzX3JxLT50Zy0+Y2ZzX3JxW3RoaXNfY3B1XTsKLQkJdW5zaWduZWQgbG9uZyBtYXhsb2FkLCB0YXNrX2xvYWQsIGdyb3VwX3dlaWdodDsKLQkJdW5zaWduZWQgbG9uZyB0aGlzbG9hZCwgcGVyX3Rhc2tfbG9hZDsKLQkJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSBidXN5X2Nmc19ycS0+dGctPnNlW2J1c2llc3QtPmNwdV07Ci0KLQkJdGFza19sb2FkID0gYnVzeV9jZnNfcnEtPmxvYWQud2VpZ2h0OwotCQlncm91cF93ZWlnaHQgPSBzZS0+bG9hZC53ZWlnaHQ7CisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGcsICZ0YXNrX2dyb3VwcywgbGlzdCkgeworCQlsb25nIGltYmFsYW5jZTsKKwkJdW5zaWduZWQgbG9uZyB0aGlzX3dlaWdodCwgYnVzaWVzdF93ZWlnaHQ7CisJCWxvbmcgcmVtX2xvYWQsIG1heF9sb2FkLCBtb3ZlZF9sb2FkOwogCiAJCS8qCi0JCSAqICdncm91cF93ZWlnaHQnIGlzIGNvbnRyaWJ1dGVkIGJ5IHRhc2tzIG9mIHRvdGFsIHdlaWdodAotCQkgKiAndGFza19sb2FkJy4gVG8gbW92ZSAncmVtX2xvYWRfbW92ZScgd29ydGggb2Ygd2VpZ2h0IG9ubHksCi0JCSAqIHdlIG5lZWQgdG8gbW92ZSBhIG1heGltdW0gdGFzayBsb2FkIG9mOgotCQkgKgotCQkgKiAJbWF4bG9hZCA9IChyZW1sb2FkIC8gZ3JvdXBfd2VpZ2h0KSAqIHRhc2tfbG9hZDsKKwkJICogZW1wdHkgZ3JvdXAKIAkJICovCi0JCW1heGxvYWQgPSAocmVtX2xvYWRfbW92ZSAqIHRhc2tfbG9hZCkgLyBncm91cF93ZWlnaHQ7Ci0KLQkJaWYgKCFtYXhsb2FkIHx8ICF0YXNrX2xvYWQpCisJCWlmICghYWdncmVnYXRlKHRnLCBzZCktPnRhc2tfd2VpZ2h0KQogCQkJY29udGludWU7CiAKLQkJcGVyX3Rhc2tfbG9hZCA9IHRhc2tfbG9hZCAvIGJ1c3lfY2ZzX3JxLT5ucl9ydW5uaW5nOwotCQkvKgotCQkgKiBiYWxhbmNlX3Rhc2tzIHdpbGwgdHJ5IHRvIGZvcmNpYmx5IG1vdmUgYXRsZWFzdCBvbmUgdGFzayBpZgotCQkgKiBwb3NzaWJsZSAoYmVjYXVzZSBvZiBTQ0hFRF9MT0FEX1NDQUxFX0ZVWlopLiBBdm9pZCB0aGF0IGlmCi0JCSAqIG1heGxvYWQgaXMgbGVzcyB0aGFuIEdST1VQX0lNQkFMQU5DRV9GVVpaJSB0aGUgcGVyX3Rhc2tfbG9hZC4KLQkJICovCi0JCSBpZiAoMTAwICogbWF4bG9hZCA8IEdST1VQX0lNQkFMQU5DRV9QQ1QgKiBwZXJfdGFza19sb2FkKQorCQlyZW1fbG9hZCA9IHJlbV9sb2FkX21vdmUgKiBhZ2dyZWdhdGUodGcsIHNkKS0+cnFfd2VpZ2h0OworCQlyZW1fbG9hZCAvPSBhZ2dyZWdhdGUodGcsIHNkKS0+bG9hZCArIDE7CisKKwkJdGhpc193ZWlnaHQgPSB0Zy0+Y2ZzX3JxW3RoaXNfY3B1XS0+dGFza193ZWlnaHQ7CisJCWJ1c2llc3Rfd2VpZ2h0ID0gdGctPmNmc19ycVtidXNpZXN0X2NwdV0tPnRhc2tfd2VpZ2h0OworCisJCWltYmFsYW5jZSA9IChidXNpZXN0X3dlaWdodCAtIHRoaXNfd2VpZ2h0KSAvIDI7CisKKwkJaWYgKGltYmFsYW5jZSA8IDApCisJCQlpbWJhbGFuY2UgPSBidXNpZXN0X3dlaWdodDsKKworCQltYXhfbG9hZCA9IG1heChyZW1fbG9hZCwgaW1iYWxhbmNlKTsKKwkJbW92ZWRfbG9hZCA9IF9fbG9hZF9iYWxhbmNlX2ZhaXIodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCisJCQkJbWF4X2xvYWQsIHNkLCBpZGxlLCBhbGxfcGlubmVkLCB0aGlzX2Jlc3RfcHJpbywKKwkJCQl0Zy0+Y2ZzX3JxW2J1c2llc3RfY3B1XSk7CisKKwkJaWYgKCFtb3ZlZF9sb2FkKQogCQkJY29udGludWU7CiAKLQkJLyogRGlzYWJsZSBwcmlvcml0eS1iYXNlZCBsb2FkIGJhbGFuY2UgKi8KLQkJKnRoaXNfYmVzdF9wcmlvID0gMDsKLQkJdGhpc2xvYWQgPSB0aGlzX2Nmc19ycS0+bG9hZC53ZWlnaHQ7Ci0jZWxzZQotIyBkZWZpbmUgbWF4bG9hZCByZW1fbG9hZF9tb3ZlCi0jZW5kaWYKLQkJLyoKLQkJICogcGFzcyBidXN5X2Nmc19ycSBhcmd1bWVudCBpbnRvCi0JCSAqIGxvYWRfYmFsYW5jZV9bc3RhcnR8bmV4dF1fZmFpciBpdGVyYXRvcnMKLQkJICovCi0JCWNmc19ycV9pdGVyYXRvci5hcmcgPSBidXN5X2Nmc19ycTsKLQkJbG9hZF9tb3ZlZCA9IGJhbGFuY2VfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQkJCSAgICAgICBtYXhsb2FkLCBzZCwgaWRsZSwgYWxsX3Bpbm5lZCwKLQkJCQkJICAgICAgIHRoaXNfYmVzdF9wcmlvLAotCQkJCQkgICAgICAgJmNmc19ycV9pdGVyYXRvcik7CisJCW1vdmVfZ3JvdXBfc2hhcmVzKHRnLCBzZCwgYnVzaWVzdF9jcHUsIHRoaXNfY3B1KTsKIAotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi0JCS8qCi0JCSAqIGxvYWRfbW92ZWQgaG9sZHMgdGhlIHRhc2sgbG9hZCB0aGF0IHdhcyBtb3ZlZC4gVGhlCi0JCSAqIGVmZmVjdGl2ZSAoZ3JvdXApIHdlaWdodCBtb3ZlZCB3b3VsZCBiZToKLQkJICogCWxvYWRfbW92ZWRfZWZmID0gbG9hZF9tb3ZlZC90YXNrX2xvYWQgKiBncm91cF93ZWlnaHQ7Ci0JCSAqLwotCQlsb2FkX21vdmVkID0gKGdyb3VwX3dlaWdodCAqIGxvYWRfbW92ZWQpIC8gdGFza19sb2FkOworCQltb3ZlZF9sb2FkICo9IGFnZ3JlZ2F0ZSh0Zywgc2QpLT5sb2FkOworCQltb3ZlZF9sb2FkIC89IGFnZ3JlZ2F0ZSh0Zywgc2QpLT5ycV93ZWlnaHQgKyAxOwogCi0JCS8qIEFkanVzdCBzaGFyZXMgb24gYm90aCBjcHVzIHRvIHJlZmxlY3QgbG9hZF9tb3ZlZCAqLwotCQlncm91cF93ZWlnaHQgLT0gbG9hZF9tb3ZlZDsKLQkJc2V0X3NlX3NoYXJlcyhzZSwgZ3JvdXBfd2VpZ2h0KTsKLQotCQlzZSA9IGJ1c3lfY2ZzX3JxLT50Zy0+c2VbdGhpc19jcHVdOwotCQlpZiAoIXRoaXNsb2FkKQotCQkJZ3JvdXBfd2VpZ2h0ID0gbG9hZF9tb3ZlZDsKLQkJZWxzZQotCQkJZ3JvdXBfd2VpZ2h0ID0gc2UtPmxvYWQud2VpZ2h0ICsgbG9hZF9tb3ZlZDsKLQkJc2V0X3NlX3NoYXJlcyhzZSwgZ3JvdXBfd2VpZ2h0KTsKLSNlbmRpZgotCi0JCXJlbV9sb2FkX21vdmUgLT0gbG9hZF9tb3ZlZDsKLQotCQlpZiAocmVtX2xvYWRfbW92ZSA8PSAwKQorCQlyZW1fbG9hZF9tb3ZlIC09IG1vdmVkX2xvYWQ7CisJCWlmIChyZW1fbG9hZF9tb3ZlIDwgMCkKIAkJCWJyZWFrOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBtYXhfbG9hZF9tb3ZlIC0gcmVtX2xvYWRfbW92ZTsKIH0KKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgbG9uZworbG9hZF9iYWxhbmNlX2ZhaXIoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKKwkJICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCisJCSAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkgIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbykKK3sKKwlyZXR1cm4gX19sb2FkX2JhbGFuY2VfZmFpcih0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKKwkJCW1heF9sb2FkX21vdmUsIHNkLCBpZGxlLCBhbGxfcGlubmVkLAorCQkJdGhpc19iZXN0X3ByaW8sICZidXNpZXN0LT5jZnMpOworfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQKIG1vdmVfb25lX3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LApAQCAtMTQwMyw2ICsxNTY2LDE2IEBACiAJCXNldF9uZXh0X2VudGl0eShjZnNfcnFfb2Yoc2UpLCBzZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorc3RhdGljIHZvaWQgbW92ZWRfZ3JvdXBfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gdGFza19jZnNfcnEocCk7CisKKwl1cGRhdGVfY3VycihjZnNfcnEpOworCXBsYWNlX2VudGl0eShjZnNfcnEsICZwLT5zZSwgMSk7Cit9CisjZW5kaWYKKwogLyoKICAqIEFsbCB0aGUgc2NoZWR1bGluZyBjbGFzcyBtZXRob2RzOgogICovCkBAIC0xNDMxLDE5ICsxNjA0LDQ3IEBACiAKIAkucHJpb19jaGFuZ2VkCQk9IHByaW9fY2hhbmdlZF9mYWlyLAogCS5zd2l0Y2hlZF90bwkJPSBzd2l0Y2hlZF90b19mYWlyLAorCisjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKKwkubW92ZWRfZ3JvdXAJCT0gbW92ZWRfZ3JvdXBfZmFpciwKKyNlbmRpZgogfTsKIAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworc3RhdGljIHZvaWQKK3ByaW50X2Nmc19ycV90YXNrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IGRlcHRoKQoreworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlOworCisJaWYgKCFjZnNfcnEpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlLCAmY2ZzX3JxLT50YXNrcywgZ3JvdXBfbm9kZSkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSBkZXB0aDsgaTsgaS0tKQorCQkJc2VxX3B1dHMobSwgIiAgIik7CisKKwkJc2VxX3ByaW50ZihtLCAiJWx1ICVzICVsdVxuIiwKKwkJCQlzZS0+bG9hZC53ZWlnaHQsCisJCQkJZW50aXR5X2lzX3Rhc2soc2UpID8gIlQiIDogIkciLAorCQkJCWNhbGNfZGVsdGFfd2VpZ2h0KFNDSEVEX0xPQURfU0NBTEUsIHNlKQorCQkJCSk7CisJCWlmICghZW50aXR5X2lzX3Rhc2soc2UpKQorCQkJcHJpbnRfY2ZzX3JxX3Rhc2tzKG0sIGdyb3VwX2Nmc19ycShzZSksIGRlcHRoICsgMSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBwcmludF9jZnNfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQogewogCXN0cnVjdCBjZnNfcnEgKmNmc19ycTsKIAotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi0JcHJpbnRfY2ZzX3JxKG0sIGNwdSwgJmNwdV9ycShjcHUpLT5jZnMpOwotI2VuZGlmCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX2xlYWZfY2ZzX3JxKGNwdV9ycShjcHUpLCBjZnNfcnEpCiAJCXByaW50X2Nmc19ycShtLCBjcHUsIGNmc19ycSk7CisKKwlzZXFfcHJpbnRmKG0sICJcbldlaWdodCB0cmVlOlxuIik7CisJcHJpbnRfY2ZzX3JxX3Rhc2tzKG0sICZjcHVfcnEoY3B1KS0+Y2ZzLCAxKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmggYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcyODNjCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKQEAgLTAsMCArMSwxMCBAQAorU0NIRURfRkVBVChORVdfRkFJUl9TTEVFUEVSUywgMSkKK1NDSEVEX0ZFQVQoV0FLRVVQX1BSRUVNUFQsIDEpCitTQ0hFRF9GRUFUKFNUQVJUX0RFQklULCAxKQorU0NIRURfRkVBVChBRkZJTkVfV0FLRVVQUywgMSkKK1NDSEVEX0ZFQVQoQ0FDSEVfSE9UX0JVRERZLCAxKQorU0NIRURfRkVBVChTWU5DX1dBS0VVUFMsIDEpCitTQ0hFRF9GRUFUKEhSVElDSywgMSkKK1NDSEVEX0ZFQVQoRE9VQkxFX1RJQ0ssIDApCitTQ0hFRF9GRUFUKE5PUk1BTElaRURfU0xFRVBFUiwgMSkKK1NDSEVEX0ZFQVQoREVBRExJTkUsIDEpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGY1NDc5MmIuLmMyNzMwYTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC02Miw3ICs2MiwxMiBAQAogCWlmICghcnRfcnEtPnRnKQogCQlyZXR1cm4gUlVOVElNRV9JTkY7CiAKLQlyZXR1cm4gcnRfcnEtPnRnLT5ydF9ydW50aW1lOworCXJldHVybiBydF9ycS0+cnRfcnVudGltZTsKK30KKworc3RhdGljIGlubGluZSB1NjQgc2NoZWRfcnRfcGVyaW9kKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJcmV0dXJuIGt0aW1lX3RvX25zKHJ0X3JxLT50Zy0+cnRfYmFuZHdpZHRoLnJ0X3BlcmlvZCk7CiB9CiAKICNkZWZpbmUgZm9yX2VhY2hfbGVhZl9ydF9ycShydF9ycSwgcnEpIFwKQEAgLTEyNywxNCArMTMyLDM5IEBACiAJcmV0dXJuIHAtPnByaW8gIT0gcC0+bm9ybWFsX3ByaW87CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBzY2hlZF9ydF9wZXJpb2RfbWFzayh2b2lkKQoreworCXJldHVybiBjcHVfcnEoc21wX3Byb2Nlc3Nvcl9pZCgpKS0+cmQtPnNwYW47Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgc2NoZWRfcnRfcGVyaW9kX21hc2sodm9pZCkKK3sKKwlyZXR1cm4gY3B1X29ubGluZV9tYXA7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZQorc3RydWN0IHJ0X3JxICpzY2hlZF9ydF9wZXJpb2RfcnRfcnEoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYiwgaW50IGNwdSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHJ0X2IsIHN0cnVjdCB0YXNrX2dyb3VwLCBydF9iYW5kd2lkdGgpLT5ydF9ycVtjcHVdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9iYW5kd2lkdGggKnNjaGVkX3J0X2JhbmR3aWR0aChzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCXJldHVybiAmcnRfcnEtPnRnLT5ydF9iYW5kd2lkdGg7Cit9CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdTY0IHNjaGVkX3J0X3J1bnRpbWUoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlpZiAoc3lzY3RsX3NjaGVkX3J0X3J1bnRpbWUgPT0gLTEpCi0JCXJldHVybiBSVU5USU1FX0lORjsKKwlyZXR1cm4gcnRfcnEtPnJ0X3J1bnRpbWU7Cit9CiAKLQlyZXR1cm4gKHU2NClzeXNjdGxfc2NoZWRfcnRfcnVudGltZSAqIE5TRUNfUEVSX1VTRUM7CitzdGF0aWMgaW5saW5lIHU2NCBzY2hlZF9ydF9wZXJpb2Qoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlyZXR1cm4ga3RpbWVfdG9fbnMoZGVmX3J0X2JhbmR3aWR0aC5ydF9wZXJpb2QpOwogfQogCiAjZGVmaW5lIGZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIHJxKSBcCkBAIC0xNzMsNiArMjAzLDEwMiBAQAogewogCXJldHVybiBydF9ycS0+cnRfdGhyb3R0bGVkOwogfQorCitzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBzY2hlZF9ydF9wZXJpb2RfbWFzayh2b2lkKQoreworCXJldHVybiBjcHVfb25saW5lX21hcDsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IHJ0X3JxICpzY2hlZF9ydF9wZXJpb2RfcnRfcnEoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYiwgaW50IGNwdSkKK3sKKwlyZXR1cm4gJmNwdV9ycShjcHUpLT5ydDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfYmFuZHdpZHRoICpzY2hlZF9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlyZXR1cm4gJmRlZl9ydF9iYW5kd2lkdGg7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IGRvX3NjaGVkX3J0X3BlcmlvZF90aW1lcihzdHJ1Y3QgcnRfYmFuZHdpZHRoICpydF9iLCBpbnQgb3ZlcnJ1bikKK3sKKwlpbnQgaSwgaWRsZSA9IDE7CisJY3B1bWFza190IHNwYW47CisKKwlpZiAocnRfYi0+cnRfcnVudGltZSA9PSBSVU5USU1FX0lORikKKwkJcmV0dXJuIDE7CisKKwlzcGFuID0gc2NoZWRfcnRfcGVyaW9kX21hc2soKTsKKwlmb3JfZWFjaF9jcHVfbWFzayhpLCBzcGFuKSB7CisJCWludCBlbnF1ZXVlID0gMDsKKwkJc3RydWN0IHJ0X3JxICpydF9ycSA9IHNjaGVkX3J0X3BlcmlvZF9ydF9ycShydF9iLCBpKTsKKwkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKworCQlzcGluX2xvY2soJnJxLT5sb2NrKTsKKwkJaWYgKHJ0X3JxLT5ydF90aW1lKSB7CisJCQl1NjQgcnVudGltZTsKKworCQkJc3Bpbl9sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJCXJ1bnRpbWUgPSBydF9ycS0+cnRfcnVudGltZTsKKwkJCXJ0X3JxLT5ydF90aW1lIC09IG1pbihydF9ycS0+cnRfdGltZSwgb3ZlcnJ1bipydW50aW1lKTsKKwkJCWlmIChydF9ycS0+cnRfdGhyb3R0bGVkICYmIHJ0X3JxLT5ydF90aW1lIDwgcnVudGltZSkgeworCQkJCXJ0X3JxLT5ydF90aHJvdHRsZWQgPSAwOworCQkJCWVucXVldWUgPSAxOworCQkJfQorCQkJaWYgKHJ0X3JxLT5ydF90aW1lIHx8IHJ0X3JxLT5ydF9ucl9ydW5uaW5nKQorCQkJCWlkbGUgPSAwOworCQkJc3Bpbl91bmxvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQl9CisKKwkJaWYgKGVucXVldWUpCisJCQlzY2hlZF9ydF9ycV9lbnF1ZXVlKHJ0X3JxKTsKKwkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwl9CisKKwlyZXR1cm4gaWRsZTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgYmFsYW5jZV9ydW50aW1lKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYiA9IHNjaGVkX3J0X2JhbmR3aWR0aChydF9ycSk7CisJc3RydWN0IHJvb3RfZG9tYWluICpyZCA9IGNwdV9ycShzbXBfcHJvY2Vzc29yX2lkKCkpLT5yZDsKKwlpbnQgaSwgd2VpZ2h0LCBtb3JlID0gMDsKKwl1NjQgcnRfcGVyaW9kOworCisJd2VpZ2h0ID0gY3B1c193ZWlnaHQocmQtPnNwYW4pOworCisJc3Bpbl9sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOworCXJ0X3BlcmlvZCA9IGt0aW1lX3RvX25zKHJ0X2ItPnJ0X3BlcmlvZCk7CisJZm9yX2VhY2hfY3B1X21hc2soaSwgcmQtPnNwYW4pIHsKKwkJc3RydWN0IHJ0X3JxICppdGVyID0gc2NoZWRfcnRfcGVyaW9kX3J0X3JxKHJ0X2IsIGkpOworCQlzNjQgZGlmZjsKKworCQlpZiAoaXRlciA9PSBydF9ycSkKKwkJCWNvbnRpbnVlOworCisJCXNwaW5fbG9jaygmaXRlci0+cnRfcnVudGltZV9sb2NrKTsKKwkJZGlmZiA9IGl0ZXItPnJ0X3J1bnRpbWUgLSBpdGVyLT5ydF90aW1lOworCQlpZiAoZGlmZiA+IDApIHsKKwkJCWRvX2RpdihkaWZmLCB3ZWlnaHQpOworCQkJaWYgKHJ0X3JxLT5ydF9ydW50aW1lICsgZGlmZiA+IHJ0X3BlcmlvZCkKKwkJCQlkaWZmID0gcnRfcGVyaW9kIC0gcnRfcnEtPnJ0X3J1bnRpbWU7CisJCQlpdGVyLT5ydF9ydW50aW1lIC09IGRpZmY7CisJCQlydF9ycS0+cnRfcnVudGltZSArPSBkaWZmOworCQkJbW9yZSA9IDE7CisJCQlpZiAocnRfcnEtPnJ0X3J1bnRpbWUgPT0gcnRfcGVyaW9kKSB7CisJCQkJc3Bpbl91bmxvY2soJml0ZXItPnJ0X3J1bnRpbWVfbG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJml0ZXItPnJ0X3J1bnRpbWVfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOworCisJcmV0dXJuIG1vcmU7Cit9CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgcnRfc2VfcHJpbyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKQEAgLTE5NywxMiArMzIzLDI0IEBACiAJaWYgKHJ0X3JxLT5ydF90aHJvdHRsZWQpCiAJCXJldHVybiBydF9ycV90aHJvdHRsZWQocnRfcnEpOwogCisJaWYgKHNjaGVkX3J0X3J1bnRpbWUocnRfcnEpID49IHNjaGVkX3J0X3BlcmlvZChydF9ycSkpCisJCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX1NNUAogCWlmIChydF9ycS0+cnRfdGltZSA+IHJ1bnRpbWUpIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKwkJaW50IG1vcmU7CiAKLQkJcnEtPnJ0X3Rocm90dGxlZCA9IDE7CisJCXNwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwkJbW9yZSA9IGJhbGFuY2VfcnVudGltZShydF9ycSk7CisJCXNwaW5fbG9jaygmcnRfcnEtPnJ0X3J1bnRpbWVfbG9jayk7CisKKwkJaWYgKG1vcmUpCisJCQlydW50aW1lID0gc2NoZWRfcnRfcnVudGltZShydF9ycSk7CisJfQorI2VuZGlmCisKKwlpZiAocnRfcnEtPnJ0X3RpbWUgPiBydW50aW1lKSB7CiAJCXJ0X3JxLT5ydF90aHJvdHRsZWQgPSAxOwotCiAJCWlmIChydF9ycV90aHJvdHRsZWQocnRfcnEpKSB7CiAJCQlzY2hlZF9ydF9ycV9kZXF1ZXVlKHJ0X3JxKTsKIAkJCXJldHVybiAxOwpAQCAtMjEyLDI5ICszNTAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfc2NoZWRfcnRfcGVyaW9kKHN0cnVjdCBycSAqcnEpCi17Ci0Jc3RydWN0IHJ0X3JxICpydF9ycTsKLQl1NjQgcGVyaW9kOwotCi0Jd2hpbGUgKHJxLT5jbG9jayA+IHJxLT5ydF9wZXJpb2RfZXhwaXJlKSB7Ci0JCXBlcmlvZCA9ICh1NjQpc3lzY3RsX3NjaGVkX3J0X3BlcmlvZCAqIE5TRUNfUEVSX1VTRUM7Ci0JCXJxLT5ydF9wZXJpb2RfZXhwaXJlICs9IHBlcmlvZDsKLQotCQlmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgewotCQkJdTY0IHJ1bnRpbWUgPSBzY2hlZF9ydF9ydW50aW1lKHJ0X3JxKTsKLQotCQkJcnRfcnEtPnJ0X3RpbWUgLT0gbWluKHJ0X3JxLT5ydF90aW1lLCBydW50aW1lKTsKLQkJCWlmIChydF9ycS0+cnRfdGhyb3R0bGVkICYmIHJ0X3JxLT5ydF90aW1lIDwgcnVudGltZSkgewotCQkJCXJ0X3JxLT5ydF90aHJvdHRsZWQgPSAwOwotCQkJCXNjaGVkX3J0X3JxX2VucXVldWUocnRfcnEpOwotCQkJfQotCQl9Ci0KLQkJcnEtPnJ0X3Rocm90dGxlZCA9IDA7Ci0JfQotfQotCiAvKgogICogVXBkYXRlIHRoZSBjdXJyZW50IHRhc2sncyBydW50aW1lIHN0YXRpc3RpY3MuIFNraXAgY3VycmVudCB0YXNrcyB0aGF0CiAgKiBhcmUgbm90IGluIG91ciBzY2hlZHVsaW5nIGNsYXNzLgpAQCAtMjU5LDkgKzM3NCwxNSBAQAogCWN1cnItPnNlLmV4ZWNfc3RhcnQgPSBycS0+Y2xvY2s7CiAJY3B1YWNjdF9jaGFyZ2UoY3VyciwgZGVsdGFfZXhlYyk7CiAKLQlydF9ycS0+cnRfdGltZSArPSBkZWx0YV9leGVjOwotCWlmIChzY2hlZF9ydF9ydW50aW1lX2V4Y2VlZGVkKHJ0X3JxKSkKLQkJcmVzY2hlZF90YXNrKGN1cnIpOworCWZvcl9lYWNoX3NjaGVkX3J0X2VudGl0eShydF9zZSkgeworCQlydF9ycSA9IHJ0X3JxX29mX3NlKHJ0X3NlKTsKKworCQlzcGluX2xvY2soJnJ0X3JxLT5ydF9ydW50aW1lX2xvY2spOworCQlydF9ycS0+cnRfdGltZSArPSBkZWx0YV9leGVjOworCQlpZiAoc2NoZWRfcnRfcnVudGltZV9leGNlZWRlZChydF9ycSkpCisJCQlyZXNjaGVkX3Rhc2soY3Vycik7CisJCXNwaW5fdW5sb2NrKCZydF9ycS0+cnRfcnVudGltZV9sb2NrKTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTI4NCw2ICs0MDUsMTEgQEAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCiAJCXJ0X3JxLT5ydF9ucl9ib29zdGVkKys7CisKKwlpZiAocnRfcnEtPnRnKQorCQlzdGFydF9ydF9iYW5kd2lkdGgoJnJ0X3JxLT50Zy0+cnRfYmFuZHdpZHRoKTsKKyNlbHNlCisJc3RhcnRfcnRfYmFuZHdpZHRoKCZkZWZfcnRfYmFuZHdpZHRoKTsKICNlbmRpZgogfQogCkBAIC0zNTMsMjcgKzQ3OSwyMSBAQAogLyoKICAqIEJlY2F1c2UgdGhlIHByaW8gb2YgYW4gdXBwZXIgZW50cnkgZGVwZW5kcyBvbiB0aGUgbG93ZXIKICAqIGVudHJpZXMsIHdlIG11c3QgcmVtb3ZlIGVudHJpZXMgdG9wIC0gZG93bi4KLSAqCi0gKiBYWFg6IE8oMS8yIGheMikgYmVjYXVzZSB3ZSBjYW4gb25seSB3YWxrIHVwLCBub3QgZG93biB0aGUgY2hhaW4uCi0gKiAgICAgIGRvZXNuJ3QgbWF0dGVyIG11Y2ggZm9yIG5vdywgYXMgaD0yIGZvciBHUk9VUF9TQ0hFRC4KICAqLwogc3RhdGljIHZvaWQgZGVxdWV1ZV9ydF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0Jc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsICp0b3Bfc2U7CisJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsICpiYWNrID0gTlVMTDsKIAotCS8qCi0JICogZGVxdWV1ZSBhbGwsIHRvcCAtIGRvd24uCi0JICovCi0JZG8gewotCQlydF9zZSA9ICZwLT5ydDsKLQkJdG9wX3NlID0gTlVMTDsKLQkJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSB7Ci0JCQlpZiAob25fcnRfcnEocnRfc2UpKQotCQkJCXRvcF9zZSA9IHJ0X3NlOwotCQl9Ci0JCWlmICh0b3Bfc2UpCi0JCQlkZXF1ZXVlX3J0X2VudGl0eSh0b3Bfc2UpOwotCX0gd2hpbGUgKHRvcF9zZSk7CisJcnRfc2UgPSAmcC0+cnQ7CisJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSB7CisJCXJ0X3NlLT5iYWNrID0gYmFjazsKKwkJYmFjayA9IHJ0X3NlOworCX0KKworCWZvciAocnRfc2UgPSBiYWNrOyBydF9zZTsgcnRfc2UgPSBydF9zZS0+YmFjaykgeworCQlpZiAob25fcnRfcnEocnRfc2UpKQorCQkJZGVxdWV1ZV9ydF9lbnRpdHkocnRfc2UpOworCX0KIH0KIAogLyoKQEAgLTEwMDUsNyArMTEyNSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfcnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjcHVtYXNrX3QgKm5ld19tYXNrKQorc3RhdGljIHZvaWQgc2V0X2NwdXNfYWxsb3dlZF9ydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkJY29uc3QgY3B1bWFza190ICpuZXdfbWFzaykKIHsKIAlpbnQgd2VpZ2h0ID0gY3B1c193ZWlnaHQoKm5ld19tYXNrKTsKIApAQCAtMTExMSw5ICsxMjMyLDExIEBACiAJCQlwdWxsX3J0X3Rhc2socnEpOwogCQkvKgogCQkgKiBJZiB0aGVyZSdzIGEgaGlnaGVyIHByaW9yaXR5IHRhc2sgd2FpdGluZyB0byBydW4KLQkJICogdGhlbiByZXNjaGVkdWxlLgorCQkgKiB0aGVuIHJlc2NoZWR1bGUuIE5vdGUsIHRoZSBhYm92ZSBwdWxsX3J0X3Rhc2sKKwkJICogY2FuIHJlbGVhc2UgdGhlIHJxIGxvY2sgYW5kIHAgY291bGQgbWlncmF0ZS4KKwkJICogT25seSByZXNjaGVkdWxlIGlmIHAgaXMgc3RpbGwgb24gdGhlIHNhbWUgcnVucXVldWUuCiAJCSAqLwotCQlpZiAocC0+cHJpbyA+IHJxLT5ydC5oaWdoZXN0X3ByaW8pCisJCWlmIChwLT5wcmlvID4gcnEtPnJ0LmhpZ2hlc3RfcHJpbyAmJiBycS0+Y3VyciA9PSBwKQogCQkJcmVzY2hlZF90YXNrKHApOwogI2Vsc2UKIAkJLyogRm9yIFVQIHNpbXBseSByZXNjaGVkIG9uIGRyb3Agb2YgcHJpbyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCA1YjMyNDMzZS4uNWJhZTJlMCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3N0YXRzLmgKKysrIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKQEAgLTksNiArOSwxMSBAQAogc3RhdGljIGludCBzaG93X3NjaGVkc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlpbnQgY3B1OworCWludCBtYXNrX2xlbiA9IE5SX0NQVVMvMzIgKiA5OworCWNoYXIgKm1hc2tfc3RyID0ga21hbGxvYyhtYXNrX2xlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAobWFza19zdHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzZXFfcHJpbnRmKHNlcSwgInZlcnNpb24gJWRcbiIsIFNDSEVEU1RBVF9WRVJTSU9OKTsKIAlzZXFfcHJpbnRmKHNlcSwgInRpbWVzdGFtcCAlbHVcbiIsIGppZmZpZXMpOwpAQCAtMzYsOSArNDEsOCBAQAogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKIAkJCWVudW0gY3B1X2lkbGVfdHlwZSBpdHlwZTsKLQkJCWNoYXIgbWFza19zdHJbTlJfQ1BVU107CiAKLQkJCWNwdW1hc2tfc2NucHJpbnRmKG1hc2tfc3RyLCBOUl9DUFVTLCBzZC0+c3Bhbik7CisJCQljcHVtYXNrX3NjbnByaW50ZihtYXNrX3N0ciwgbWFza19sZW4sIHNkLT5zcGFuKTsKIAkJCXNlcV9wcmludGYoc2VxLCAiZG9tYWluJWQgJXMiLCBkY291bnQrKywgbWFza19zdHIpOwogCQkJZm9yIChpdHlwZSA9IENQVV9JRExFOyBpdHlwZSA8IENQVV9NQVhfSURMRV9UWVBFUzsKIAkJCQkJaXR5cGUrKykgewpkaWZmIC0tZ2l0IGEva2VybmVsL3NlbWFwaG9yZS5jIGIva2VybmVsL3NlbWFwaG9yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMjk0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvc2VtYXBob3JlLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMgorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNvdW50aW5nIHNlbWFwaG9yZXMuCisgKiBBIGNvdW50aW5nIHNlbWFwaG9yZSBtYXkgYmUgYWNxdWlyZWQgJ24nIHRpbWVzIGJlZm9yZSBzbGVlcGluZy4KKyAqIFNlZSBtdXRleC5jIGZvciBzaW5nbGUtYWNxdWlzaXRpb24gc2xlZXBpbmcgbG9ja3Mgd2hpY2ggZW5mb3JjZQorICogcnVsZXMgd2hpY2ggYWxsb3cgY29kZSB0byBiZSBkZWJ1Z2dlZCBtb3JlIGVhc2lseS4KKyAqLworCisvKgorICogU29tZSBub3RlcyBvbiB0aGUgaW1wbGVtZW50YXRpb246CisgKgorICogVGhlIHNwaW5sb2NrIGNvbnRyb2xzIGFjY2VzcyB0byB0aGUgb3RoZXIgbWVtYmVycyBvZiB0aGUgc2VtYXBob3JlLgorICogZG93bl90cnlsb2NrKCkgYW5kIHVwKCkgY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LCBzbyB3ZQorICogaGF2ZSB0byBkaXNhYmxlIGludGVycnVwdHMgd2hlbiB0YWtpbmcgdGhlIGxvY2suICBJdCB0dXJucyBvdXQgdmFyaW91cworICogcGFydHMgb2YgdGhlIGtlcm5lbCBleHBlY3QgdG8gYmUgYWJsZSB0byB1c2UgZG93bigpIG9uIGEgc2VtYXBob3JlIGluCisgKiBpbnRlcnJ1cHQgY29udGV4dCB3aGVuIHRoZXkga25vdyBpdCB3aWxsIHN1Y2NlZWQsIHNvIHdlIGhhdmUgdG8gdXNlCisgKiBpcnFzYXZlIHZhcmlhbnRzIGZvciBkb3duKCksIGRvd25faW50ZXJydXB0aWJsZSgpIGFuZCBkb3duX2tpbGxhYmxlKCkKKyAqIHRvby4KKyAqCisgKiBUaGUgLT5jb3VudCB2YXJpYWJsZSByZXByZXNlbnRzIGhvdyBtYW55IG1vcmUgdGFza3MgY2FuIGFjcXVpcmUgdGhpcworICogc2VtYXBob3JlLiAgSWYgaXQncyB6ZXJvLCB0aGVyZSBtYXkgYmUgdGFza3Mgd2FpdGluZyBvbiB0aGUgd2FpdF9saXN0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworc3RhdGljIG5vaW5saW5lIHZvaWQgX19kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7CitzdGF0aWMgbm9pbmxpbmUgaW50IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7CitzdGF0aWMgbm9pbmxpbmUgaW50IF9fZG93bl9raWxsYWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pOworc3RhdGljIG5vaW5saW5lIGludCBfX2Rvd25fdGltZW91dChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGxvbmcgamlmZmllcyk7CitzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSk7CisKKy8qKgorICogZG93biAtIGFjcXVpcmUgdGhlIHNlbWFwaG9yZQorICogQHNlbTogdGhlIHNlbWFwaG9yZSB0byBiZSBhY3F1aXJlZAorICoKKyAqIEFjcXVpcmVzIHRoZSBzZW1hcGhvcmUuICBJZiBubyBtb3JlIHRhc2tzIGFyZSBhbGxvd2VkIHRvIGFjcXVpcmUgdGhlCisgKiBzZW1hcGhvcmUsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHB1dCB0aGUgdGFzayB0byBzbGVlcCB1bnRpbCB0aGUKKyAqIHNlbWFwaG9yZSBpcyByZWxlYXNlZC4KKyAqCisgKiBVc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIGRvd25faW50ZXJydXB0aWJsZSgpIG9yCisgKiBkb3duX2tpbGxhYmxlKCkgaW5zdGVhZC4KKyAqLwordm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+bG9jaywgZmxhZ3MpOworCWlmIChsaWtlbHkoc2VtLT5jb3VudCA+IDApKQorCQlzZW0tPmNvdW50LS07CisJZWxzZQorCQlfX2Rvd24oc2VtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZG93bik7CisKKy8qKgorICogZG93bl9pbnRlcnJ1cHRpYmxlIC0gYWNxdWlyZSB0aGUgc2VtYXBob3JlIHVubGVzcyBpbnRlcnJ1cHRlZAorICogQHNlbTogdGhlIHNlbWFwaG9yZSB0byBiZSBhY3F1aXJlZAorICoKKyAqIEF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHNlbWFwaG9yZS4gIElmIG5vIG1vcmUgdGFza3MgYXJlIGFsbG93ZWQgdG8KKyAqIGFjcXVpcmUgdGhlIHNlbWFwaG9yZSwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHV0IHRoZSB0YXNrIHRvIHNsZWVwLgorICogSWYgdGhlIHNsZWVwIGlzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FSU5UUi4KKyAqIElmIHRoZSBzZW1hcGhvcmUgaXMgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMC4KKyAqLworaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlrZWx5KHNlbS0+Y291bnQgPiAwKSkKKwkJc2VtLT5jb3VudC0tOworCWVsc2UKKwkJcmVzdWx0ID0gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKGRvd25faW50ZXJydXB0aWJsZSk7CisKKy8qKgorICogZG93bl9raWxsYWJsZSAtIGFjcXVpcmUgdGhlIHNlbWFwaG9yZSB1bmxlc3Mga2lsbGVkCisgKiBAc2VtOiB0aGUgc2VtYXBob3JlIHRvIGJlIGFjcXVpcmVkCisgKgorICogQXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgc2VtYXBob3JlLiAgSWYgbm8gbW9yZSB0YXNrcyBhcmUgYWxsb3dlZCB0bworICogYWNxdWlyZSB0aGUgc2VtYXBob3JlLCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBwdXQgdGhlIHRhc2sgdG8gc2xlZXAuCisgKiBJZiB0aGUgc2xlZXAgaXMgaW50ZXJydXB0ZWQgYnkgYSBmYXRhbCBzaWduYWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqIC1FSU5UUi4gIElmIHRoZSBzZW1hcGhvcmUgaXMgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIDAuCisgKi8KK2ludCBkb3duX2tpbGxhYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+bG9jaywgZmxhZ3MpOworCWlmIChsaWtlbHkoc2VtLT5jb3VudCA+IDApKQorCQlzZW0tPmNvdW50LS07CisJZWxzZQorCQlyZXN1bHQgPSBfX2Rvd25fa2lsbGFibGUoc2VtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKGRvd25fa2lsbGFibGUpOworCisvKioKKyAqIGRvd25fdHJ5bG9jayAtIHRyeSB0byBhY3F1aXJlIHRoZSBzZW1hcGhvcmUsIHdpdGhvdXQgd2FpdGluZworICogQHNlbTogdGhlIHNlbWFwaG9yZSB0byBiZSBhY3F1aXJlZAorICoKKyAqIFRyeSB0byBhY3F1aXJlIHRoZSBzZW1hcGhvcmUgYXRvbWljYWxseS4gIFJldHVybnMgMCBpZiB0aGUgbXV0ZXggaGFzCisgKiBiZWVuIGFjcXVpcmVkIHN1Y2Nlc3NmdWxseSBvciAxIGlmIGl0IGl0IGNhbm5vdCBiZSBhY3F1aXJlZC4KKyAqCisgKiBOT1RFOiBUaGlzIHJldHVybiB2YWx1ZSBpcyBpbnZlcnRlZCBmcm9tIGJvdGggc3Bpbl90cnlsb2NrIGFuZAorICogbXV0ZXhfdHJ5bG9jayEgIEJlIGNhcmVmdWwgYWJvdXQgdGhpcyB3aGVuIGNvbnZlcnRpbmcgY29kZS4KKyAqCisgKiBVbmxpa2UgbXV0ZXhfdHJ5bG9jaywgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LAorICogYW5kIHRoZSBzZW1hcGhvcmUgY2FuIGJlIHJlbGVhc2VkIGJ5IGFueSB0YXNrIG9yIGludGVycnVwdC4KKyAqLworaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT5sb2NrLCBmbGFncyk7CisJY291bnQgPSBzZW0tPmNvdW50IC0gMTsKKwlpZiAobGlrZWx5KGNvdW50ID49IDApKQorCQlzZW0tPmNvdW50ID0gY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gKGNvdW50IDwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGRvd25fdHJ5bG9jayk7CisKKy8qKgorICogZG93bl90aW1lb3V0IC0gYWNxdWlyZSB0aGUgc2VtYXBob3JlIHdpdGhpbiBhIHNwZWNpZmllZCB0aW1lCisgKiBAc2VtOiB0aGUgc2VtYXBob3JlIHRvIGJlIGFjcXVpcmVkCisgKiBAamlmZmllczogaG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgZmFpbGluZworICoKKyAqIEF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHNlbWFwaG9yZS4gIElmIG5vIG1vcmUgdGFza3MgYXJlIGFsbG93ZWQgdG8KKyAqIGFjcXVpcmUgdGhlIHNlbWFwaG9yZSwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHV0IHRoZSB0YXNrIHRvIHNsZWVwLgorICogSWYgdGhlIHNlbWFwaG9yZSBpcyBub3QgcmVsZWFzZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGppZmZpZXMsCisgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLUVUSU1FLiAgSXQgcmV0dXJucyAwIGlmIHRoZSBzZW1hcGhvcmUgd2FzIGFjcXVpcmVkLgorICovCitpbnQgZG93bl90aW1lb3V0KHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgbG9uZyBqaWZmaWVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT5sb2NrLCBmbGFncyk7CisJaWYgKGxpa2VseShzZW0tPmNvdW50ID4gMCkpCisJCXNlbS0+Y291bnQtLTsKKwllbHNlCisJCXJlc3VsdCA9IF9fZG93bl90aW1lb3V0KHNlbSwgamlmZmllcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChkb3duX3RpbWVvdXQpOworCisvKioKKyAqIHVwIC0gcmVsZWFzZSB0aGUgc2VtYXBob3JlCisgKiBAc2VtOiB0aGUgc2VtYXBob3JlIHRvIHJlbGVhc2UKKyAqCisgKiBSZWxlYXNlIHRoZSBzZW1hcGhvcmUuICBVbmxpa2UgbXV0ZXhlcywgdXAoKSBtYXkgYmUgY2FsbGVkIGZyb20gYW55CisgKiBjb250ZXh0IGFuZCBldmVuIGJ5IHRhc2tzIHdoaWNoIGhhdmUgbmV2ZXIgY2FsbGVkIGRvd24oKS4KKyAqLwordm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlrZWx5KGxpc3RfZW1wdHkoJnNlbS0+d2FpdF9saXN0KSkpCisJCXNlbS0+Y291bnQrKzsKKwllbHNlCisJCV9fdXAoc2VtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wodXApOworCisvKiBGdW5jdGlvbnMgZm9yIHRoZSBjb250ZW5kZWQgY2FzZSAqLworCitzdHJ1Y3Qgc2VtYXBob3JlX3dhaXRlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlpbnQgdXA7Cit9OworCisvKgorICogQmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGlubGluZWQsIHRoZSAnc3RhdGUnIHBhcmFtZXRlciB3aWxsIGJlCisgKiBjb25zdGFudCwgYW5kIHRodXMgb3B0aW1pc2VkIGF3YXkgYnkgdGhlIGNvbXBpbGVyLiAgTGlrZXdpc2UgdGhlCisgKiAndGltZW91dCcgcGFyYW1ldGVyIGZvciB0aGUgY2FzZXMgd2l0aG91dCB0aW1lb3V0cy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19zY2hlZCBfX2Rvd25fY29tbW9uKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgbG9uZyBzdGF0ZSwKKwkJCQkJCQkJbG9uZyB0aW1lb3V0KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7CisJc3RydWN0IHNlbWFwaG9yZV93YWl0ZXIgd2FpdGVyOworCisJbGlzdF9hZGRfdGFpbCgmd2FpdGVyLmxpc3QsICZzZW0tPndhaXRfbGlzdCk7CisJd2FpdGVyLnRhc2sgPSB0YXNrOworCXdhaXRlci51cCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWlmIChzdGF0ZSA9PSBUQVNLX0lOVEVSUlVQVElCTEUgJiYgc2lnbmFsX3BlbmRpbmcodGFzaykpCisJCQlnb3RvIGludGVycnVwdGVkOworCQlpZiAoc3RhdGUgPT0gVEFTS19LSUxMQUJMRSAmJiBmYXRhbF9zaWduYWxfcGVuZGluZyh0YXNrKSkKKwkJCWdvdG8gaW50ZXJydXB0ZWQ7CisJCWlmICh0aW1lb3V0IDw9IDApCisJCQlnb3RvIHRpbWVkX291dDsKKwkJX19zZXRfdGFza19zdGF0ZSh0YXNrLCBzdGF0ZSk7CisJCXNwaW5fdW5sb2NrX2lycSgmc2VtLT5sb2NrKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCXNwaW5fbG9ja19pcnEoJnNlbS0+bG9jayk7CisJCWlmICh3YWl0ZXIudXApCisJCQlyZXR1cm4gMDsKKwl9CisKKyB0aW1lZF9vdXQ6CisJbGlzdF9kZWwoJndhaXRlci5saXN0KTsKKwlyZXR1cm4gLUVUSU1FOworCisgaW50ZXJydXB0ZWQ6CisJbGlzdF9kZWwoJndhaXRlci5saXN0KTsKKwlyZXR1cm4gLUVJTlRSOworfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX3NjaGVkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJX19kb3duX2NvbW1vbihzZW0sIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgX19zY2hlZCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmV0dXJuIF9fZG93bl9jb21tb24oc2VtLCBUQVNLX0lOVEVSUlVQVElCTEUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBfX3NjaGVkIF9fZG93bl9raWxsYWJsZShzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJcmV0dXJuIF9fZG93bl9jb21tb24oc2VtLCBUQVNLX0tJTExBQkxFLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgX19zY2hlZCBfX2Rvd25fdGltZW91dChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGxvbmcgamlmZmllcykKK3sKKwlyZXR1cm4gX19kb3duX2NvbW1vbihzZW0sIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCBqaWZmaWVzKTsKK30KKworc3RhdGljIG5vaW5saW5lIHZvaWQgX19zY2hlZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzdHJ1Y3Qgc2VtYXBob3JlX3dhaXRlciAqd2FpdGVyID0gbGlzdF9maXJzdF9lbnRyeSgmc2VtLT53YWl0X2xpc3QsCisJCQkJCQlzdHJ1Y3Qgc2VtYXBob3JlX3dhaXRlciwgbGlzdCk7CisJbGlzdF9kZWwoJndhaXRlci0+bGlzdCk7CisJd2FpdGVyLT51cCA9IDE7CisJd2FrZV91cF9wcm9jZXNzKHdhaXRlci0+dGFzayk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggODQ5MTdmZS4uNjRhZDBlZCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JY2xlYXJfdHNrX3RocmVhZF9mbGFnKHQsVElGX1NJR1BFTkRJTkcpOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0LCBUSUZfU0lHUEVORElORyk7CiAJZmx1c2hfc2lncXVldWUoJnQtPnBlbmRpbmcpOwogCWZsdXNoX3NpZ3F1ZXVlKCZ0LT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CkBAIC00MjQsNyArNDI0LDcgQEAKIAl9CiAJaWYgKHNpZ25yICYmCiAJICAgICAoKGluZm8tPnNpX2NvZGUgJiBfX1NJX01BU0spID09IF9fU0lfVElNRVIpICYmCi0JICAgICBpbmZvLT5zaV9zeXNfcHJpdmF0ZSl7CisJICAgICBpbmZvLT5zaV9zeXNfcHJpdmF0ZSkgewogCQkvKgogCQkgKiBSZWxlYXNlIHRoZSBzaWdsb2NrIHRvIGVuc3VyZSBwcm9wZXIgbG9ja2luZyBvcmRlcgogCQkgKiBvZiB0aW1lciBsb2NrcyBvdXRzaWRlIG9mIHNpZ2xvY2tzLiAgTm90ZSwgd2UgbGVhdmUKQEAgLTE2MjMsNyArMTYyMyw2IEBACiAJLyogTGV0IHRoZSBkZWJ1Z2dlciBydW4uICAqLwogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19UUkFDRUQpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JdHJ5X3RvX2ZyZWV6ZSgpOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKCF1bmxpa2VseShraWxsZWQpICYmIG1heV9wdHJhY2Vfc3RvcCgpKSB7CiAJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBDTERfVFJBUFBFRCk7CkBAIC0xNjQxLDYgKzE2NDAsMTMgQEAKIAl9CiAKIAkvKgorCSAqIFdoaWxlIGluIFRBU0tfVFJBQ0VELCB3ZSB3ZXJlIGNvbnNpZGVyZWQgImZyb3plbiBlbm91Z2giLgorCSAqIE5vdyB0aGF0IHdlIHdva2UgdXAsIGl0J3MgY3J1Y2lhbCBpZiB3ZSdyZSBzdXBwb3NlZCB0byBiZQorCSAqIGZyb3plbiB0aGF0IHdlIGZyZWV6ZSBub3cgYmVmb3JlIHJ1bm5pbmcgYW55dGhpbmcgc3Vic3RhbnRpYWwuCisJICovCisJdHJ5X3RvX2ZyZWV6ZSgpOworCisJLyoKIAkgKiBXZSBhcmUgYmFjay4gIE5vdyByZWFjcXVpcmUgdGhlIHNpZ2xvY2sgYmVmb3JlIHRvdWNoaW5nCiAJICogbGFzdF9zaWdpbmZvLCBzbyB0aGF0IHdlIGFyZSBzdXJlIHRvIGhhdmUgc3luY2hyb25pemVkIHdpdGgKIAkgKiBhbnkgc2lnbmFsLXNlbmRpbmcgb24gYW5vdGhlciBDUFUgdGhhdCB3YW50cyB0byBleGFtaW5lIGl0LgpAQCAtMTc1MSwxNSArMTc1Nyw2MCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IHB0cmFjZV9zaWduYWwoaW50IHNpZ25yLCBzaWdpbmZvX3QgKmluZm8sCisJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSkKK3sKKwlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKKwkJcmV0dXJuIHNpZ25yOworCisJcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSk7CisKKwkvKiBMZXQgdGhlIGRlYnVnZ2VyIHJ1bi4gICovCisJcHRyYWNlX3N0b3Aoc2lnbnIsIDAsIGluZm8pOworCisJLyogV2UncmUgYmFjay4gIERpZCB0aGUgZGVidWdnZXIgY2FuY2VsIHRoZSBzaWc/ICAqLworCXNpZ25yID0gY3VycmVudC0+ZXhpdF9jb2RlOworCWlmIChzaWduciA9PSAwKQorCQlyZXR1cm4gc2lnbnI7CisKKwljdXJyZW50LT5leGl0X2NvZGUgPSAwOworCisJLyogVXBkYXRlIHRoZSBzaWdpbmZvIHN0cnVjdHVyZSBpZiB0aGUgc2lnbmFsIGhhcworCSAgIGNoYW5nZWQuICBJZiB0aGUgZGVidWdnZXIgd2FudGVkIHNvbWV0aGluZworCSAgIHNwZWNpZmljIGluIHRoZSBzaWdpbmZvIHN0cnVjdHVyZSB0aGVuIGl0IHNob3VsZAorCSAgIGhhdmUgdXBkYXRlZCAqaW5mbyB2aWEgUFRSQUNFX1NFVFNJR0lORk8uICAqLworCWlmIChzaWduciAhPSBpbmZvLT5zaV9zaWdubykgeworCQlpbmZvLT5zaV9zaWdubyA9IHNpZ25yOworCQlpbmZvLT5zaV9lcnJubyA9IDA7CisJCWluZm8tPnNpX2NvZGUgPSBTSV9VU0VSOworCQlpbmZvLT5zaV9waWQgPSB0YXNrX3BpZF92bnIoY3VycmVudC0+cGFyZW50KTsKKwkJaW5mby0+c2lfdWlkID0gY3VycmVudC0+cGFyZW50LT51aWQ7CisJfQorCisJLyogSWYgdGhlIChuZXcpIHNpZ25hbCBpcyBub3cgYmxvY2tlZCwgcmVxdWV1ZSBpdC4gICovCisJaWYgKHNpZ2lzbWVtYmVyKCZjdXJyZW50LT5ibG9ja2VkLCBzaWducikpIHsKKwkJc3BlY2lmaWNfc2VuZF9zaWdfaW5mbyhzaWduciwgaW5mbywgY3VycmVudCk7CisJCXNpZ25yID0gMDsKKwl9CisKKwlyZXR1cm4gc2lnbnI7Cit9CisKIGludCBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoc2lnaW5mb190ICppbmZvLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKnJldHVybl9rYSwKIAkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSkKIHsKIAlzaWdzZXRfdCAqbWFzayA9ICZjdXJyZW50LT5ibG9ja2VkOwogCWludCBzaWduciA9IDA7CiAKK3JlbG9jazoKKwkvKgorCSAqIFdlJ2xsIGp1bXAgYmFjayBoZXJlIGFmdGVyIGFueSB0aW1lIHdlIHdlcmUgc3RvcHBlZCBpbiBUQVNLX1NUT1BQRUQuCisJICogV2hpbGUgaW4gVEFTS19TVE9QUEVELCB3ZSB3ZXJlIGNvbnNpZGVyZWQgImZyb3plbiBlbm91Z2giLgorCSAqIE5vdyB0aGF0IHdlIHdva2UgdXAsIGl0J3MgY3J1Y2lhbCBpZiB3ZSdyZSBzdXBwb3NlZCB0byBiZQorCSAqIGZyb3plbiB0aGF0IHdlIGZyZWV6ZSBub3cgYmVmb3JlIHJ1bm5pbmcgYW55dGhpbmcgc3Vic3RhbnRpYWwuCisJICovCiAJdHJ5X3RvX2ZyZWV6ZSgpOwogCi1yZWxvY2s6CiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJZm9yICg7OykgewogCQlzdHJ1Y3Qga19zaWdhY3Rpb24gKmthOwpAQCAtMTc3MywzNiArMTgyNCwxMCBAQAogCQlpZiAoIXNpZ25yKQogCQkJYnJlYWs7IC8qIHdpbGwgcmV0dXJuIDAgKi8KIAotCQlpZiAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpICYmIHNpZ25yICE9IFNJR0tJTEwpIHsKLQkJCXB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpOwotCi0JCQkvKiBMZXQgdGhlIGRlYnVnZ2VyIHJ1bi4gICovCi0JCQlwdHJhY2Vfc3RvcChzaWduciwgMCwgaW5mbyk7Ci0KLQkJCS8qIFdlJ3JlIGJhY2suICBEaWQgdGhlIGRlYnVnZ2VyIGNhbmNlbCB0aGUgc2lnPyAgKi8KLQkJCXNpZ25yID0gY3VycmVudC0+ZXhpdF9jb2RlOwotCQkJaWYgKHNpZ25yID09IDApCisJCWlmIChzaWduciAhPSBTSUdLSUxMKSB7CisJCQlzaWduciA9IHB0cmFjZV9zaWduYWwoc2lnbnIsIGluZm8sIHJlZ3MsIGNvb2tpZSk7CisJCQlpZiAoIXNpZ25yKQogCQkJCWNvbnRpbnVlOwotCi0JCQljdXJyZW50LT5leGl0X2NvZGUgPSAwOwotCi0JCQkvKiBVcGRhdGUgdGhlIHNpZ2luZm8gc3RydWN0dXJlIGlmIHRoZSBzaWduYWwgaGFzCi0JCQkgICBjaGFuZ2VkLiAgSWYgdGhlIGRlYnVnZ2VyIHdhbnRlZCBzb21ldGhpbmcKLQkJCSAgIHNwZWNpZmljIGluIHRoZSBzaWdpbmZvIHN0cnVjdHVyZSB0aGVuIGl0IHNob3VsZAotCQkJICAgaGF2ZSB1cGRhdGVkICppbmZvIHZpYSBQVFJBQ0VfU0VUU0lHSU5GTy4gICovCi0JCQlpZiAoc2lnbnIgIT0gaW5mby0+c2lfc2lnbm8pIHsKLQkJCQlpbmZvLT5zaV9zaWdubyA9IHNpZ25yOwotCQkJCWluZm8tPnNpX2Vycm5vID0gMDsKLQkJCQlpbmZvLT5zaV9jb2RlID0gU0lfVVNFUjsKLQkJCQlpbmZvLT5zaV9waWQgPSB0YXNrX3BpZF92bnIoY3VycmVudC0+cGFyZW50KTsKLQkJCQlpbmZvLT5zaV91aWQgPSBjdXJyZW50LT5wYXJlbnQtPnVpZDsKLQkJCX0KLQotCQkJLyogSWYgdGhlIChuZXcpIHNpZ25hbCBpcyBub3cgYmxvY2tlZCwgcmVxdWV1ZSBpdC4gICovCi0JCQlpZiAoc2lnaXNtZW1iZXIoJmN1cnJlbnQtPmJsb2NrZWQsIHNpZ25yKSkgewotCQkJCXNwZWNpZmljX3NlbmRfc2lnX2luZm8oc2lnbnIsIGluZm8sIGN1cnJlbnQpOwotCQkJCWNvbnRpbnVlOwotCQkJfQogCQl9CiAKIAkJa2EgPSAmY3VycmVudC0+c2lnaGFuZC0+YWN0aW9uW3NpZ25yLTFdOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggNWIzYWVhNS4uM2M0NDk1NiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC0zMTMsNiArMzEzLDcgQEAKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aW1lciB3aGVlbCB1cGRhdGVzIGFyZSBwcm9wYWdhdGVkICovCiAJaWYgKCFpbl9pbnRlcnJ1cHQoKSAmJiBpZGxlX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpICYmICFuZWVkX3Jlc2NoZWQoKSkKIAkJdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljaygpOworCXJjdV9pcnFfZXhpdCgpOwogI2VuZGlmCiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogfQpAQCAtMzU1LDcgKzM1Niw4IEBACiAvKiBUYXNrbGV0cyAqLwogc3RydWN0IHRhc2tsZXRfaGVhZAogewotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqbGlzdDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKmhlYWQ7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0ICoqdGFpbDsKIH07CiAKIC8qIFNvbWUgY29tcGlsZXJzIGRpc29iZXkgc2VjdGlvbiBhdHRyaWJ1dGUgb24gc3RhdGljcyB3aGVuIG5vdApAQCAtMzY4LDggKzM3MCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0LT5uZXh0ID0gX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykubGlzdDsKLQlfX2dldF9jcHVfdmFyKHRhc2tsZXRfdmVjKS5saXN0ID0gdDsKKwl0LT5uZXh0ID0gTlVMTDsKKwkqX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykudGFpbCA9IHQ7CisJX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykudGFpbCA9ICYodC0+bmV4dCk7CiAJcmFpc2Vfc29mdGlycV9pcnFvZmYoVEFTS0xFVF9TT0ZUSVJRKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0zODEsOCArMzg0LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXQtPm5leHQgPSBfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS5saXN0OwotCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLmxpc3QgPSB0OworCXQtPm5leHQgPSBOVUxMOworCSpfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS50YWlsID0gdDsKKwlfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS50YWlsID0gJih0LT5uZXh0KTsKIAlyYWlzZV9zb2Z0aXJxX2lycW9mZihISV9TT0ZUSVJRKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0zOTQsOCArMzk4LDkgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKmxpc3Q7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWxpc3QgPSBfX2dldF9jcHVfdmFyKHRhc2tsZXRfdmVjKS5saXN0OwotCV9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLmxpc3QgPSBOVUxMOworCWxpc3QgPSBfX2dldF9jcHVfdmFyKHRhc2tsZXRfdmVjKS5oZWFkOworCV9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLmhlYWQgPSBOVUxMOworCV9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLnRhaWwgPSAmX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykuaGVhZDsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAl3aGlsZSAobGlzdCkgewpAQCAtNDE1LDggKzQyMCw5IEBACiAJCX0KIAogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQl0LT5uZXh0ID0gX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykubGlzdDsKLQkJX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykubGlzdCA9IHQ7CisJCXQtPm5leHQgPSBOVUxMOworCQkqX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykudGFpbCA9IHQ7CisJCV9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLnRhaWwgPSAmKHQtPm5leHQpOwogCQlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKFRBU0tMRVRfU09GVElSUSk7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAl9CkBAIC00MjcsOCArNDMzLDkgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKmxpc3Q7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWxpc3QgPSBfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS5saXN0OwotCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLmxpc3QgPSBOVUxMOworCWxpc3QgPSBfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS5oZWFkOworCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLmhlYWQgPSBOVUxMOworCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLnRhaWwgPSAmX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykuaGVhZDsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAl3aGlsZSAobGlzdCkgewpAQCAtNDQ4LDggKzQ1NSw5IEBACiAJCX0KIAogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQl0LT5uZXh0ID0gX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykubGlzdDsKLQkJX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykubGlzdCA9IHQ7CisJCXQtPm5leHQgPSBOVUxMOworCQkqX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykudGFpbCA9IHQ7CisJCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLnRhaWwgPSAmKHQtPm5leHQpOwogCQlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEhJX1NPRlRJUlEpOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQpAQCAtNDg2LDYgKzQ5NCwxNSBAQAogCiB2b2lkIF9faW5pdCBzb2Z0aXJxX2luaXQodm9pZCkKIHsKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLnRhaWwgPQorCQkJJnBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkuaGVhZDsKKwkJcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS50YWlsID0KKwkJCSZwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLmhlYWQ7CisJfQorCiAJb3Blbl9zb2Z0aXJxKFRBU0tMRVRfU09GVElSUSwgdGFza2xldF9hY3Rpb24sIE5VTEwpOwogCW9wZW5fc29mdGlycShISV9TT0ZUSVJRLCB0YXNrbGV0X2hpX2FjdGlvbiwgTlVMTCk7CiB9CkBAIC01NTQsOSArNTcxLDEyIEBACiAJCXJldHVybjsKIAogCS8qIENQVSBpcyBkZWFkLCBzbyBubyBsb2NrIG5lZWRlZC4gKi8KLQlmb3IgKGkgPSAmcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS5saXN0OyAqaTsgaSA9ICYoKmkpLT5uZXh0KSB7CisJZm9yIChpID0gJnBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkuaGVhZDsgKmk7IGkgPSAmKCppKS0+bmV4dCkgewogCQlpZiAoKmkgPT0gdCkgewogCQkJKmkgPSB0LT5uZXh0OworCQkJLyogSWYgdGhpcyB3YXMgdGhlIHRhaWwgZWxlbWVudCwgbW92ZSB0aGUgdGFpbCBwdHIgKi8KKwkJCWlmICgqaSA9PSBOVUxMKQorCQkJCXBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkudGFpbCA9IGk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC01NjUsMjAgKzU4NSwyMCBAQAogCiBzdGF0aWMgdm9pZCB0YWtlb3Zlcl90YXNrbGV0cyh1bnNpZ25lZCBpbnQgY3B1KQogewotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqKmk7Ci0KIAkvKiBDUFUgaXMgZGVhZCwgc28gbm8gbG9jayBuZWVkZWQuICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCS8qIEZpbmQgZW5kLCBhcHBlbmQgbGlzdCBmb3IgdGhhdCBDUFUuICovCi0JZm9yIChpID0gJl9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLmxpc3Q7ICppOyBpID0gJigqaSktPm5leHQpOwotCSppID0gcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS5saXN0OwotCXBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkubGlzdCA9IE5VTEw7CisJKl9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLnRhaWwgPSBwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLmhlYWQ7CisJX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykudGFpbCA9IHBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkudGFpbDsKKwlwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLmhlYWQgPSBOVUxMOworCXBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkudGFpbCA9ICZwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLmhlYWQ7CiAJcmFpc2Vfc29mdGlycV9pcnFvZmYoVEFTS0xFVF9TT0ZUSVJRKTsKIAotCWZvciAoaSA9ICZfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS5saXN0OyAqaTsgaSA9ICYoKmkpLT5uZXh0KTsKLQkqaSA9IHBlcl9jcHUodGFza2xldF9oaV92ZWMsIGNwdSkubGlzdDsKLQlwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLmxpc3QgPSBOVUxMOworCSpfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS50YWlsID0gcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS5oZWFkOworCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLnRhaWwgPSBwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLnRhaWw7CisJcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS5oZWFkID0gTlVMTDsKKwlwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLnRhaWwgPSAmcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS5oZWFkOwogCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKEhJX1NPRlRJUlEpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRsb2NrdXAuYyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKaW5kZXggN2MyZGE4OC4uMDFiNjUyMiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgYi9rZXJuZWwvc29mdGxvY2t1cC5jCkBAIC0yMTYsMjYgKzIxNiwyNyBAQAogCS8qIGluaXRpYWxpemUgdGltZXN0YW1wICovCiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkvKgogCSAqIFJ1biBicmllZmx5IG9uY2UgcGVyIHNlY29uZCB0byByZXNldCB0aGUgc29mdGxvY2t1cCB0aW1lc3RhbXAuCiAJICogSWYgdGhpcyBnZXRzIGRlbGF5ZWQgZm9yIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRoZW4gdGhlCiAJICogZGVidWctcHJpbnRvdXQgdHJpZ2dlcnMgaW4gc29mdGxvY2t1cF90aWNrKCkuCiAJICovCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCQlzY2hlZHVsZSgpOwogCiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlicmVhazsKIAotCQlpZiAodGhpc19jcHUgIT0gY2hlY2tfY3B1KQotCQkJY29udGludWU7CisJCWlmICh0aGlzX2NwdSA9PSBjaGVja19jcHUpIHsKKwkJCWlmIChzeXNjdGxfaHVuZ190YXNrX3RpbWVvdXRfc2VjcykKKwkJCQljaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh0aGlzX2NwdSk7CisJCX0KIAotCQlpZiAoc3lzY3RsX2h1bmdfdGFza190aW1lb3V0X3NlY3MpCi0JCQljaGVja19odW5nX3VuaW50ZXJydXB0aWJsZV90YXNrcyh0aGlzX2NwdSk7Ci0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggNmY0ZTBlMS4uMDEwMWFlZSAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKiBTaW5jZSB3ZSBlZmZlY3QgcHJpb3JpdHkgYW5kIGFmZmluaXR5IChib3RoIG9mIHdoaWNoIGFyZSB2aXNpYmxlCkBAIC0zNSw3ICszNCw3IEBACiAJaW50IGlycXNfZGlzYWJsZWQgPSAwOwogCWludCBwcmVwYXJlZCA9IDA7CiAKLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KChpbnQpKGxvbmcpY3B1KSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KChpbnQpKGxvbmcpY3B1KSk7CiAKIAkvKiBBY2s6IHdlIGFyZSBhbGl2ZSAqLwogCXNtcF9tYigpOyAvKiBUaGVvcmV0aWNhbGx5IHRoZSBhY2sgPSAwIG1pZ2h0IG5vdCBiZSBvbiB0aGlzIENQVSB5ZXQuICovCkBAIC0xMzUsOCArMTM0LDcgQEAKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiB9CiAKLXN0cnVjdCBzdG9wX21hY2hpbmVfZGF0YQoteworc3RydWN0IHN0b3BfbWFjaGluZV9kYXRhIHsKIAlpbnQgKCpmbikodm9pZCAqKTsKIAl2b2lkICpkYXRhOwogCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYTYyNjExNi4uNmEwY2M3MSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtNjcsNiArNjcsMTIgQEAKICNpZm5kZWYgU0VUX0VORElBTgogIyBkZWZpbmUgU0VUX0VORElBTihhLGIpCSgtRUlOVkFMKQogI2VuZGlmCisjaWZuZGVmIEdFVF9UU0NfQ1RMCisjIGRlZmluZSBHRVRfVFNDX0NUTChhKQkJKC1FSU5WQUwpCisjZW5kaWYKKyNpZm5kZWYgU0VUX1RTQ19DVEwKKyMgZGVmaW5lIFNFVF9UU0NfQ1RMKGEpCQkoLUVJTlZBTCkKKyNlbmRpZgogCiAvKgogICogdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtLXdpZGUgb3ZlcmZsb3cgVUlEIGFuZCBHSUQgYXJlIGRlZmluZWQsIGZvcgpAQCAtMTczNyw3ICsxNzQzLDEyIEBACiAjZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKLQorCQljYXNlIFBSX0dFVF9UU0M6CisJCQllcnJvciA9IEdFVF9UU0NfQ1RMKGFyZzIpOworCQkJYnJlYWs7CisJCWNhc2UgUFJfU0VUX1RTQzoKKwkJCWVycm9yID0gU0VUX1RTQ19DVEwoYXJnMik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVycm9yID0gLUVJTlZBTDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDhiN2U5NTQuLmZkMzM2NDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTI3MCwxNyArMjcwLDYgQEAKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZQk9ICJzY2hlZF9iYXRjaF93YWtldXBfZ3JhbnVsYXJpdHlfbnMiLAotCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX2JhdGNoX3dha2V1cF9ncmFudWxhcml0eSwKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKLQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCi0JCS5leHRyYTEJCT0gJm1pbl93YWtldXBfZ3JhbnVsYXJpdHlfbnMsCi0JCS5leHRyYTIJCT0gJm1heF93YWtldXBfZ3JhbnVsYXJpdHlfbnMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAic2NoZWRfY2hpbGRfcnVuc19maXJzdCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfY2hpbGRfcnVuc19maXJzdCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTMxMSwyNCArMzAwLDYgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCi0jaWYgZGVmaW5lZChDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCXsKLQkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCi0JCS5wcm9jbmFtZSAgICAgICA9ICJzY2hlZF9taW5fYmFsX2ludF9zaGFyZXMiLAotCQkuZGF0YSAgICAgICAgICAgPSAmc3lzY3RsX3NjaGVkX21pbl9iYWxfaW50X3NoYXJlcywKLQkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCS5tb2RlICAgICAgICAgICA9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0JewotCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKLQkJLnByb2NuYW1lICAgICAgID0gInNjaGVkX21heF9iYWxfaW50X3NoYXJlcyIsCi0JCS5kYXRhICAgICAgICAgICA9ICZzeXNjdGxfc2NoZWRfbWF4X2JhbF9pbnRfc2hhcmVzLAotCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKLQkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCi0JfSwKLSNlbmRpZgogI2VuZGlmCiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKQEAgLTMzNiw3ICszMDcsNyBAQAogCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX3J0X3BlcmlvZCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gJnNjaGVkX3J0X2hhbmRsZXIsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELApAQCAtMzQ0LDcgKzMxNSw3IEBACiAJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfcnRfcnVudGltZSwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gJnNjaGVkX3J0X2hhbmRsZXIsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggNTQ4YzQzNi4uNzM5NjFmMyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0xNDEsOSArMTQxLDEyIEBACiAJfQogCiAJaWYgKCFsaXN0X2VtcHR5KCZ3YXRjaGRvZ19saXN0KSkgewotCQkvKiBDeWNsZSB0aHJvdWdoIENQVXMgdG8gY2hlY2sgaWYgdGhlIENQVXMgc3RheSBzeW5jaHJvbml6ZWQgdG8KLQkJICogZWFjaCBvdGhlci4gKi8KKwkJLyoKKwkJICogQ3ljbGUgdGhyb3VnaCBDUFVzIHRvIGNoZWNrIGlmIHRoZSBDUFVzIHN0YXkKKwkJICogc3luY2hyb25pemVkIHRvIGVhY2ggb3RoZXIuCisJCSAqLwogCQlpbnQgbmV4dF9jcHUgPSBuZXh0X2NwdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CisKIAkJaWYgKG5leHRfY3B1ID49IE5SX0NQVVMpCiAJCQluZXh0X2NwdSA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CiAJCXdhdGNoZG9nX3RpbWVyLmV4cGlyZXMgKz0gV0FUQ0hET0dfSU5URVJWQUw7CkBAIC0xNjksNyArMTcyLDggQEAKIAkJaWYgKCFzdGFydGVkICYmIHdhdGNoZG9nKSB7CiAJCQl3YXRjaGRvZ19sYXN0ID0gd2F0Y2hkb2ctPnJlYWQoKTsKIAkJCXdhdGNoZG9nX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgV0FUQ0hET0dfSU5URVJWQUw7Ci0JCQlhZGRfdGltZXJfb24oJndhdGNoZG9nX3RpbWVyLCBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKTsKKwkJCWFkZF90aW1lcl9vbigmd2F0Y2hkb2dfdGltZXIsCisJCQkJICAgICBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChjcy0+ZmxhZ3MgJiBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUykKQEAgLTE3OSw3ICsxODMsNyBAQAogCQkJaWYgKHdhdGNoZG9nKQogCQkJCWRlbF90aW1lcigmd2F0Y2hkb2dfdGltZXIpOwogCQkJd2F0Y2hkb2cgPSBjczsKLQkJCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmd2F0Y2hkb2dfdGltZXIpOworCQkJaW5pdF90aW1lcigmd2F0Y2hkb2dfdGltZXIpOwogCQkJd2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSBjbG9ja3NvdXJjZV93YXRjaGRvZzsKIAogCQkJLyogUmVzZXQgd2F0Y2hkb2cgY3ljbGVzICovCkBAIC0xOTEsNyArMTk1LDcgQEAKIAkJCQl3YXRjaGRvZ190aW1lci5leHBpcmVzID0KIAkJCQkJamlmZmllcyArIFdBVENIRE9HX0lOVEVSVkFMOwogCQkJCWFkZF90aW1lcl9vbigmd2F0Y2hkb2dfdGltZXIsCi0JCQkJCQlmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKTsKKwkJCQkJICAgICBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKTsKIAkJCX0KIAkJfQogCX0KQEAgLTIyOCw2ICsyMzIsMTggQEAKIH0KIAogLyoqCisgKiBjbG9ja3NvdXJjZV90b3VjaF93YXRjaGRvZyAtIFVwZGF0ZSB3YXRjaGRvZworICoKKyAqIFVwZGF0ZSB0aGUgd2F0Y2hkb2cgYWZ0ZXIgZXhjZXB0aW9uIGNvbnRleHRzIHN1Y2ggYXMga2dkYiBzbyBhcyBub3QKKyAqIHRvIGluY29ycmVjdGx5IHRyaXAgdGhlIHdhdGNoZG9nLgorICoKKyAqLwordm9pZCBjbG9ja3NvdXJjZV90b3VjaF93YXRjaGRvZyh2b2lkKQoreworCWNsb2Nrc291cmNlX3Jlc3VtZV93YXRjaGRvZygpOworfQorCisvKioKICAqIGNsb2Nrc291cmNlX2dldF9uZXh0IC0gUmV0dXJucyB0aGUgc2VsZWN0ZWQgY2xvY2tzb3VyY2UKICAqCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL250cC5jIGIva2VybmVsL3RpbWUvbnRwLmMKaW5kZXggYzg4YjU5MS4uNWZkOWI5NCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvbnRwLmMKKysrIGIva2VybmVsL3RpbWUvbnRwLmMKQEAgLTQyLDEyICs0MiwxMyBAQAogbG9uZyB0aW1lX2ZyZXE7CQkJCS8qIGZyZXF1ZW5jeSBvZmZzZXQgKHNjYWxlZCBwcG0pKi8KIHN0YXRpYyBsb25nIHRpbWVfcmVmdGltZTsJCS8qIHRpbWUgYXQgbGFzdCBhZGp1c3RtZW50IChzKQkqLwogbG9uZyB0aW1lX2FkanVzdDsKK3N0YXRpYyBsb25nIG50cF90aWNrX2FkajsKIAogc3RhdGljIHZvaWQgbnRwX3VwZGF0ZV9mcmVxdWVuY3kodm9pZCkKIHsKIAl1NjQgc2Vjb25kX2xlbmd0aCA9ICh1NjQpKHRpY2tfdXNlYyAqIE5TRUNfUEVSX1VTRUMgKiBVU0VSX0haKQogCQkJCTw8IFRJQ0tfTEVOR1RIX1NISUZUOwotCXNlY29uZF9sZW5ndGggKz0gKHM2NClDTE9DS19USUNLX0FESlVTVCA8PCBUSUNLX0xFTkdUSF9TSElGVDsKKwlzZWNvbmRfbGVuZ3RoICs9IChzNjQpbnRwX3RpY2tfYWRqIDw8IFRJQ0tfTEVOR1RIX1NISUZUOwogCXNlY29uZF9sZW5ndGggKz0gKHM2NCl0aW1lX2ZyZXEgPDwgKFRJQ0tfTEVOR1RIX1NISUZUIC0gU0hJRlRfTlNFQyk7CiAKIAl0aWNrX2xlbmd0aF9iYXNlID0gc2Vjb25kX2xlbmd0aDsKQEAgLTM0MiwxNCArMzQzLDE2IEBACiAJCSAgICBmcmVxX2FkaiA9IHNoaWZ0X3JpZ2h0KGZyZXFfYWRqLCB0aW1lX2NvbnN0YW50ICogMiArCiAJCQkJCSAgIChTSElGVF9QTEwgKyAyKSAqIDIgLSBTSElGVF9OU0VDKTsKIAkJICAgIGlmIChtdGVtcCA+PSBNSU5TRUMgJiYgKHRpbWVfc3RhdHVzICYgU1RBX0ZMTCB8fCBtdGVtcCA+IE1BWFNFQykpIHsKKwkJCXU2NCB1dGVtcDY0OwogCQkJdGVtcDY0ID0gdGltZV9vZmZzZXQgPDwgKFNISUZUX05TRUMgLSBTSElGVF9GTEwpOwogCQkJaWYgKHRpbWVfb2Zmc2V0IDwgMCkgewotCQkJICAgIHRlbXA2NCA9IC10ZW1wNjQ7Ci0JCQkgICAgZG9fZGl2KHRlbXA2NCwgbXRlbXApOwotCQkJICAgIGZyZXFfYWRqIC09IHRlbXA2NDsKKwkJCSAgICB1dGVtcDY0ID0gLXRlbXA2NDsKKwkJCSAgICBkb19kaXYodXRlbXA2NCwgbXRlbXApOworCQkJICAgIGZyZXFfYWRqIC09IHV0ZW1wNjQ7CiAJCQl9IGVsc2UgewotCQkJICAgIGRvX2Rpdih0ZW1wNjQsIG10ZW1wKTsKLQkJCSAgICBmcmVxX2FkaiArPSB0ZW1wNjQ7CisJCQkgICAgdXRlbXA2NCA9IHRlbXA2NDsKKwkJCSAgICBkb19kaXYodXRlbXA2NCwgbXRlbXApOworCQkJICAgIGZyZXFfYWRqICs9IHV0ZW1wNjQ7CiAJCQl9CiAJCSAgICB9CiAJCSAgICBmcmVxX2FkaiArPSB0aW1lX2ZyZXE7CkBAIC00MDAsMyArNDAzLDExIEBACiAJbm90aWZ5X2Ntb3NfdGltZXIoKTsKIAlyZXR1cm4ocmVzdWx0KTsKIH0KKworc3RhdGljIGludCBfX2luaXQgbnRwX3RpY2tfYWRqX3NldHVwKGNoYXIgKnN0cikKK3sKKwludHBfdGlja19hZGogPSBzaW1wbGVfc3RydG9sKHN0ciwgTlVMTCwgMCk7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm50cF90aWNrX2Fkaj0iLCBudHBfdGlja19hZGpfc2V0dXApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggZTFiZDUwY2IuLjU3YTFmMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKKysrIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTI2Miw3ICsyNjIsNyBAQAogdm9pZCB0aWNrX2Jyb2FkY2FzdF9vbl9vZmYodW5zaWduZWQgbG9uZyByZWFzb24sIGludCAqb25jcHUpCiB7CiAJaWYgKCFjcHVfaXNzZXQoKm9uY3B1LCBjcHVfb25saW5lX21hcCkpCi0JCXByaW50ayhLRVJOX0VSUiAidGljay1icmFvZGNhc3Q6IGlnbm9yaW5nIGJyb2FkY2FzdCBmb3IgIgorCQlwcmludGsoS0VSTl9FUlIgInRpY2stYnJvYWRjYXN0OiBpZ25vcmluZyBicm9hZGNhc3QgZm9yICIKIAkJICAgICAgICJvZmZsaW5lIENQVSAjJWRcbiIsICpvbmNwdSk7CiAJZWxzZQogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKm9uY3B1LCB0aWNrX2RvX2Jyb2FkY2FzdF9vbl9vZmYsCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jIGIva2VybmVsL3RpbWUvdGljay1jb21tb24uYwppbmRleCAxYmVhMzk5Li40ZjM4ODY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKQEAgLTE0LDEyICsxNCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAKKyNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KKwogI2luY2x1ZGUgInRpY2staW50ZXJuYWwuaCIKIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stb25lc2hvdC5jIGIva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMKaW5kZXggMDI1OGQzMS4uNDUwYzA0OSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMKKysrIGIva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggZmE5YmI3My4uZDM1OGQ0ZSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMTU4LDkgKzE1OCw4IEBACiAJfQogfQogCi1zdGF0aWMga3RpbWVfdCB0aWNrX25vaHpfc3RhcnRfaWRsZShpbnQgY3B1KQorc3RhdGljIGt0aW1lX3QgdGlja19ub2h6X3N0YXJ0X2lkbGUoc3RydWN0IHRpY2tfc2NoZWQgKnRzKQogewotCXN0cnVjdCB0aWNrX3NjaGVkICp0cyA9ICZwZXJfY3B1KHRpY2tfY3B1X3NjaGVkLCBjcHUpOwogCWt0aW1lX3Qgbm93LCBkZWx0YTsKIAogCW5vdyA9IGt0aW1lX2dldCgpOwpAQCAtMTkyLDcgKzE5MSw2IEBACiB2b2lkIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2sodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNlcSwgbGFzdF9qaWZmaWVzLCBuZXh0X2ppZmZpZXMsIGRlbHRhX2ppZmZpZXMsIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgcnRfamlmZmllczsKIAlzdHJ1Y3QgdGlja19zY2hlZCAqdHM7CiAJa3RpbWVfdCBsYXN0X3VwZGF0ZSwgZXhwaXJlcywgbm93OwogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiA9IF9fZ2V0X2NwdV92YXIodGlja19jcHVfZGV2aWNlKS5ldnRkZXY7CkBAIC0yMDEsOCArMTk5LDggQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jbm93ID0gdGlja19ub2h6X3N0YXJ0X2lkbGUoY3B1KTsKIAl0cyA9ICZwZXJfY3B1KHRpY2tfY3B1X3NjaGVkLCBjcHUpOworCW5vdyA9IHRpY2tfbm9oel9zdGFydF9pZGxlKHRzKTsKIAogCS8qCiAJICogSWYgdGhpcyBjcHUgaXMgb2ZmbGluZSBhbmQgaXQgaXMgdGhlIG9uZSB3aGljaCB1cGRhdGVzCkBAIC0yMjIsNyArMjIwLDYgQEAKIAlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCWdvdG8gZW5kOwogCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWlmICh1bmxpa2VseShsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkpIHsKIAkJc3RhdGljIGludCByYXRlbGltaXQ7CiAKQEAgLTI0NSwxMCArMjQyLDYgQEAKIAluZXh0X2ppZmZpZXMgPSBnZXRfbmV4dF90aW1lcl9pbnRlcnJ1cHQobGFzdF9qaWZmaWVzKTsKIAlkZWx0YV9qaWZmaWVzID0gbmV4dF9qaWZmaWVzIC0gbGFzdF9qaWZmaWVzOwogCi0JcnRfamlmZmllcyA9IHJ0X25lZWRzX2NwdShjcHUpOwotCWlmIChydF9qaWZmaWVzICYmIHJ0X2ppZmZpZXMgPCBkZWx0YV9qaWZmaWVzKQotCQlkZWx0YV9qaWZmaWVzID0gcnRfamlmZmllczsKLQogCWlmIChyY3VfbmVlZHNfY3B1KGNwdSkpCiAJCWRlbHRhX2ppZmZpZXMgPSAxOwogCS8qCkBAIC0yODIsNiArMjc1LDcgQEAKIAkJCXRzLT5pZGxlX3RpY2sgPSB0cy0+c2NoZWRfdGltZXIuZXhwaXJlczsKIAkJCXRzLT50aWNrX3N0b3BwZWQgPSAxOwogCQkJdHMtPmlkbGVfamlmZmllcyA9IGxhc3RfamlmZmllczsKKwkJCXJjdV9lbnRlcl9ub2h6KCk7CiAJCX0KIAogCQkvKgpAQCAtMzc1LDYgKzM2OSw4IEBACiAJCXJldHVybjsKIAl9CiAKKwlyY3VfZXhpdF9ub2h6KCk7CisKIAkvKiBVcGRhdGUgamlmZmllcyBmaXJzdCAqLwogCXNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoMCk7CiAJbm93ID0ga3RpbWVfZ2V0KCk7CkBAIC02MzcsNyArNjMzLDcgQEAKIAogCWlmICh0cy0+c2NoZWRfdGltZXIuYmFzZSkKIAkJaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7Ci0JdHMtPnRpY2tfc3RvcHBlZCA9IDA7CisKIAl0cy0+bm9oel9tb2RlID0gTk9IWl9NT0RFX0lOQUNUSVZFOwogfQogI2VuZGlmIC8qIEhJR0hfUkVTX1RJTUVSUyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggMWFmOWZiMC4uMmQ2MDg3YyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIAlpZiAoY2xvY2sgPT0gbmV3KQogCQlyZXR1cm47CiAKKwluZXctPmN5Y2xlX2xhc3QgPSAwOwogCW5vdyA9IGNsb2Nrc291cmNlX3JlYWQobmV3KTsKIAluc2VjID0gIF9fZ2V0X25zZWNfb2Zmc2V0KCk7CiAJdGltZXNwZWNfYWRkX25zKCZ4dGltZSwgbnNlYyk7CkBAIC0xODcsMTMgKzE4OCwxNiBAQAogCiAJY2xvY2stPmVycm9yID0gMDsKIAljbG9jay0+eHRpbWVfbnNlYyA9IDA7Ci0JY2xvY2tzb3VyY2VfY2FsY3VsYXRlX2ludGVydmFsKGNsb2NrLAotCQkodW5zaWduZWQgbG9uZykoY3VycmVudF90aWNrX2xlbmd0aCgpPj5USUNLX0xFTkdUSF9TSElGVCkpOworCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywgTlRQX0lOVEVSVkFMX0xFTkdUSCk7CiAKIAl0aWNrX2Nsb2NrX25vdGlmeSgpOwogCisJLyoKKwkgKiBXZSdyZSBob2xkaW5nIHh0aW1lIGxvY2sgYW5kIHdha2luZyB1cCBrbG9nZCB3b3VsZCBkZWFkbG9jaworCSAqIHVzIG9uIGVucXVldWUuICBTbyBubyBwcmludGluZyEKIAlwcmludGsoS0VSTl9JTkZPICJUaW1lOiAlcyBjbG9ja3NvdXJjZSBoYXMgYmVlbiBpbnN0YWxsZWQuXG4iLAogCSAgICAgICBjbG9jay0+bmFtZSk7CisJICovCiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKSB7IH0KQEAgLTI0NSw4ICsyNDksNyBAQAogCW50cF9jbGVhcigpOwogCiAJY2xvY2sgPSBjbG9ja3NvdXJjZV9nZXRfbmV4dCgpOwotCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywKLQkJKHVuc2lnbmVkIGxvbmcpKGN1cnJlbnRfdGlja19sZW5ndGgoKT4+VElDS19MRU5HVEhfU0hJRlQpKTsKKwljbG9ja3NvdXJjZV9jYWxjdWxhdGVfaW50ZXJ2YWwoY2xvY2ssIE5UUF9JTlRFUlZBTF9MRU5HVEgpOwogCWNsb2NrLT5jeWNsZV9sYXN0ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7CiAKIAl4dGltZS50dl9zZWMgPSBzZWM7CkBAIC0yOTMsNiArMjk2LDcgQEAKIAl0aW1lc3BlY19hZGRfbnMoJnh0aW1lLCB0aW1la2VlcGluZ19zdXNwZW5kX25zZWNzKTsKIAl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJLyogcmUtYmFzZSB0aGUgbGFzdCBjeWNsZSB2YWx1ZSAqLworCWNsb2NrLT5jeWNsZV9sYXN0ID0gMDsKIAljbG9jay0+Y3ljbGVfbGFzdCA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOwogCWNsb2NrLT5lcnJvciA9IDA7CiAJdGltZWtlZXBpbmdfc3VzcGVuZGVkID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwppbmRleCBkM2Q5NGMxLi42N2ZlOGZjIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKKysrIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCkBAIC02NSw5ICs2NSw5IEBACiAJU0VRX3ByaW50ZihtLCAiLCAlcy8lZCIsIHRtcCwgdGltZXItPnN0YXJ0X3BpZCk7CiAjZW5kaWYKIAlTRVFfcHJpbnRmKG0sICJcbiIpOwotCVNFUV9wcmludGYobSwgIiAjIGV4cGlyZXMgYXQgJUx1IG5zZWNzIFtpbiAlTHUgbnNlY3NdXG4iLAorCVNFUV9wcmludGYobSwgIiAjIGV4cGlyZXMgYXQgJUx1IG5zZWNzIFtpbiAlTGQgbnNlY3NdXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKHRpbWVyLT5leHBpcmVzKSwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoa3RpbWVfdG9fbnModGltZXItPmV4cGlyZXMpIC0gbm93KSk7CisJCShsb25nIGxvbmcpKGt0aW1lX3RvX25zKHRpbWVyLT5leHBpcmVzKSAtIG5vdykpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA5OWIwMGEyLi5mM2QzNWQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNDUxLDEwICs0NTEsMTggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwogCXRpbWVyX3NldF9iYXNlKHRpbWVyLCBiYXNlKTsKIAlpbnRlcm5hbF9hZGRfdGltZXIoYmFzZSwgdGltZXIpOworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgb3RoZXIgQ1BVIGlzIGlkbGUgYW5kIG5lZWRzIHRvIGJlCisJICogdHJpZ2dlcmVkIHRvIHJlZXZhbHVhdGUgdGhlIHRpbWVyIHdoZWVsIHdoZW4gbm9oeiBpcworCSAqIGFjdGl2ZS4gV2UgYXJlIHByb3RlY3RlZCBhZ2FpbnN0IHRoZSBvdGhlciBDUFUgZmlkZGxpbmcKKwkgKiB3aXRoIHRoZSB0aW1lciBieSBob2xkaW5nIHRoZSB0aW1lciBiYXNlIGxvY2suIFRoaXMgYWxzbworCSAqIG1ha2VzIHN1cmUgdGhhdCBhIENQVSBvbiB0aGUgd2F5IHRvIGlkbGUgY2FuIG5vdCBldmFsdWF0ZQorCSAqIHRoZSB0aW1lciB3aGVlbC4KKwkgKi8KKwl3YWtlX3VwX2lkbGVfY3B1KGNwdSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwogfQogCi0KIC8qKgogICogbW9kX3RpbWVyIC0gbW9kaWZ5IGEgdGltZXIncyB0aW1lb3V0CiAgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBtb2RpZmllZApAQCAtMTIyMCwxMyArMTIyOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBsb2NrZGVwOiB3ZSB3YW50IHRvIHRyYWNrIGVhY2ggcGVyLUNQVSBiYXNlIGFzIGEgc2VwYXJhdGUgbG9jay1jbGFzcywKLSAqIGJ1dCB0aW1lci1iYXNlcyBhcmUga21hbGxvYygpLWVkLCBzbyB3ZSBuZWVkIHRvIGF0dGFjaCBzZXBhcmF0ZQotICoga2V5cyB0byB0aGVtOgotICovCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJhc2VfbG9ja19rZXlzW05SX0NQVVNdOwotCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBpbml0X3RpbWVyc19jcHUoaW50IGNwdSkKIHsKIAlpbnQgajsKQEAgLTEyNjksNyArMTI3MCw2IEBACiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJmJhc2UtPmxvY2spOwotCWxvY2tkZXBfc2V0X2NsYXNzKCZiYXNlLT5sb2NrLCBiYXNlX2xvY2tfa2V5cyArIGNwdSk7CiAKIAlmb3IgKGogPSAwOyBqIDwgVFZOX1NJWkU7IGorKykgewogCQlJTklUX0xJU1RfSEVBRChiYXNlLT50djUudmVjICsgaik7CkBAIC0xMzA4LDggKzEzMDgsOCBAQAogCW5ld19iYXNlID0gZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWRvdWJsZV9zcGluX2xvY2soJm5ld19iYXNlLT5sb2NrLCAmb2xkX2Jhc2UtPmxvY2ssCi0JCQkgc21wX3Byb2Nlc3Nvcl9pZCgpIDwgY3B1KTsKKwlzcGluX2xvY2soJm5ld19iYXNlLT5sb2NrKTsKKwlzcGluX2xvY2tfbmVzdGVkKCZvbGRfYmFzZS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJQlVHX09OKG9sZF9iYXNlLT5ydW5uaW5nX3RpbWVyKTsKIApAQCAtMTMyMiw4ICsxMzIyLDggQEAKIAkJbWlncmF0ZV90aW1lcl9saXN0KG5ld19iYXNlLCBvbGRfYmFzZS0+dHY1LnZlYyArIGkpOwogCX0KIAotCWRvdWJsZV9zcGluX3VubG9jaygmbmV3X2Jhc2UtPmxvY2ssICZvbGRfYmFzZS0+bG9jaywKLQkJCSAgIHNtcF9wcm9jZXNzb3JfaWQoKSA8IGNwdSk7CisJc3Bpbl91bmxvY2soJm9sZF9iYXNlLT5sb2NrKTsKKwlzcGluX3VubG9jaygmbmV3X2Jhc2UtPmxvY2spOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlwdXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC91aWQxNi5jIGIva2VybmVsL3VpZDE2LmMKaW5kZXggZGQzMDhiYS4uM2U0MWMxNiAxMDA2NDQKLS0tIGEva2VybmVsL3VpZDE2LmMKKysrIGIva2VybmVsL3VpZDE2LmMKQEAgLTIxLDcgKzIxLDcgQEAKIHsKIAlsb25nIHJldCA9IHN5c19jaG93bihmaWxlbmFtZSwgbG93MmhpZ2h1aWQodXNlciksIGxvdzJoaWdoZ2lkKGdyb3VwKSk7CiAJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCi0JcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMywgcmV0LCBmaWxlbmFtZSwgdXNlciwgZ3JvdXApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5LDcgKzI5LDcgQEAKIHsKIAlsb25nIHJldCA9IHN5c19sY2hvd24oZmlsZW5hbWUsIGxvdzJoaWdodWlkKHVzZXIpLCBsb3cyaGlnaGdpZChncm91cCkpOwogCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLwotCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJYXNtbGlua2FnZV9wcm90ZWN0KDMsIHJldCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNyw3ICszNyw3IEBACiB7CiAJbG9uZyByZXQgPSBzeXNfZmNob3duKGZkLCBsb3cyaGlnaHVpZCh1c2VyKSwgbG93MmhpZ2hnaWQoZ3JvdXApKTsKIAkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KLQlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCWFzbWxpbmthZ2VfcHJvdGVjdCgzLCByZXQsIGZkLCB1c2VyLCBncm91cCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDUsNyArNDUsNyBAQAogewogCWxvbmcgcmV0ID0gc3lzX3NldHJlZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSk7CiAJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCi0JcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMiwgcmV0LCByZ2lkLCBlZ2lkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01Myw3ICs1Myw3IEBACiB7CiAJbG9uZyByZXQgPSBzeXNfc2V0Z2lkKGxvdzJoaWdoZ2lkKGdpZCkpOwogCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLwotCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJYXNtbGlua2FnZV9wcm90ZWN0KDEsIHJldCwgZ2lkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MSw3ICs2MSw3IEBACiB7CiAJbG9uZyByZXQgPSBzeXNfc2V0cmV1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpKTsKIAkvKiBhdm9pZCBSRUdQQVJNIGJyZWFrYWdlIG9uIHg4NjogKi8KLQlwcmV2ZW50X3RhaWxfY2FsbChyZXQpOworCWFzbWxpbmthZ2VfcHJvdGVjdCgyLCByZXQsIHJ1aWQsIGV1aWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY5LDcgKzY5LDcgQEAKIHsKIAlsb25nIHJldCA9IHN5c19zZXR1aWQobG93MmhpZ2h1aWQodWlkKSk7CiAJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCi0JcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMSwgcmV0LCB1aWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc4LDcgKzc4LDcgQEAKIAlsb25nIHJldCA9IHN5c19zZXRyZXN1aWQobG93MmhpZ2h1aWQocnVpZCksIGxvdzJoaWdodWlkKGV1aWQpLAogCQkJCSBsb3cyaGlnaHVpZChzdWlkKSk7CiAJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCi0JcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMywgcmV0LCBydWlkLCBldWlkLCBzdWlkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05OCw3ICs5OCw3IEBACiAJbG9uZyByZXQgPSBzeXNfc2V0cmVzZ2lkKGxvdzJoaWdoZ2lkKHJnaWQpLCBsb3cyaGlnaGdpZChlZ2lkKSwKIAkJCQkgbG93MmhpZ2hnaWQoc2dpZCkpOwogCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLwotCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJYXNtbGlua2FnZV9wcm90ZWN0KDMsIHJldCwgcmdpZCwgZWdpZCwgc2dpZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAJbG9uZyByZXQgPSBzeXNfc2V0ZnN1aWQobG93MmhpZ2h1aWQodWlkKSk7CiAJLyogYXZvaWQgUkVHUEFSTSBicmVha2FnZSBvbiB4ODY6ICovCi0JcHJldmVudF90YWlsX2NhbGwocmV0KTsKKwlhc21saW5rYWdlX3Byb3RlY3QoMSwgcmV0LCB1aWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogewogCWxvbmcgcmV0ID0gc3lzX3NldGZzZ2lkKGxvdzJoaWdoZ2lkKGdpZCkpOwogCS8qIGF2b2lkIFJFR1BBUk0gYnJlYWthZ2Ugb24geDg2OiAqLwotCXByZXZlbnRfdGFpbF9jYWxsKHJldCk7CisJYXNtbGlua2FnZV9wcm90ZWN0KDEsIHJldCwgZ2lkKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCA3MTMyMDIyLi5kZWJjZTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogewogCWludCByYyA9IDA7CiAKLQl1cC0+dGcgPSBzY2hlZF9jcmVhdGVfZ3JvdXAoKTsKKwl1cC0+dGcgPSBzY2hlZF9jcmVhdGVfZ3JvdXAoJnJvb3RfdGFza19ncm91cCk7CiAJaWYgKElTX0VSUih1cC0+dGcpKQogCQlyYyA9IC1FTk9NRU07CiAKQEAgLTE5Myw2ICsxOTMsMzMgQEAKIAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjcHVfcnRfcnVudGltZV9hdHRyID0KIAlfX0FUVFIoY3B1X3J0X3J1bnRpbWUsIDA2NDQsIGNwdV9ydF9ydW50aW1lX3Nob3csIGNwdV9ydF9ydW50aW1lX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgY3B1X3J0X3BlcmlvZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBzY2hlZF9ncm91cF9ydF9wZXJpb2QodXAtPnRnKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNwdV9ydF9wZXJpb2Rfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7CisJdW5zaWduZWQgbG9uZyBydF9wZXJpb2Q7CisJaW50IHJjOworCisJc3NjYW5mKGJ1ZiwgIiVsdSIsICZydF9wZXJpb2QpOworCisJcmMgPSBzY2hlZF9ncm91cF9zZXRfcnRfcGVyaW9kKHVwLT50ZywgcnRfcGVyaW9kKTsKKworCXJldHVybiAocmMgPyByYyA6IHNpemUpOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNwdV9ydF9wZXJpb2RfYXR0ciA9CisJX19BVFRSKGNwdV9ydF9wZXJpb2QsIDA2NDQsIGNwdV9ydF9wZXJpb2Rfc2hvdywgY3B1X3J0X3BlcmlvZF9zdG9yZSk7CiAjZW5kaWYKIAogLyogZGVmYXVsdCBhdHRyaWJ1dGVzIHBlciB1aWQgZGlyZWN0b3J5ICovCkBAIC0yMDIsNiArMjI5LDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCSZjcHVfcnRfcnVudGltZV9hdHRyLmF0dHIsCisJJmNwdV9ydF9wZXJpb2RfYXR0ci5hdHRyLAogI2VuZGlmCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCBmZjA2NjExLi4wMGZmNGQwIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0yMTksNiArMjE5LDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmZHdvcmstPnRpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9ICZkd29yay0+d29yazsKIAorCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKCZkd29yay0+dGltZXIpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HLCB3b3JrX2RhdGFfYml0cyh3b3JrKSkpIHsKIAkJQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZ3b3JrLT5lbnRyeSkpOwpAQCAtNTgwLDYgKzU4MSw3IEBACiBpbnQgc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGludCBjcHUsCiAJCQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKKwl0aW1lcl9zdGF0c190aW1lcl9zZXRfc3RhcnRfaW5mbygmZHdvcmstPnRpbWVyKTsKIAlyZXR1cm4gcXVldWVfZGVsYXllZF93b3JrX29uKGNwdSwga2V2ZW50ZF93cSwgZHdvcmssIGRlbGF5KTsKIH0KIEVYUE9SVF9TWU1CT0woc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKTsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnIGIvbGliL0tjb25maWcKaW5kZXggYmEzZDEwNC4uMmQ1M2RjMCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTE0MSw0ICsxNDEsNyBAQAogY29uZmlnIENIRUNLX1NJR05BVFVSRQogCWJvb2wKIAorY29uZmlnIEhBVkVfTE1CCisJYm9vbGVhbgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGEzNzBmZTguLjYyM2VmMjQgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC04Miw2ICs4Miw5IEBACiBjb25maWcgREVCVUdfU0VDVElPTl9NSVNNQVRDSAogCWJvb2wgIkVuYWJsZSBmdWxsIFNlY3Rpb24gbWlzbWF0Y2ggYW5hbHlzaXMiCiAJZGVwZW5kcyBvbiBVTkRFRklORUQKKwkjIFRoaXMgb3B0aW9uIGlzIG9uIHB1cnBvc2UgZGlzYWJsZWQgZm9yIG5vdy4KKwkjIEl0IHdpbGwgYmUgZW5hYmxlZCB3aGVuIHdlIGFyZSBkb3duIHRvIGEgcmVzb25hYmxlIG51bWJlcgorCSMgb2Ygc2VjdGlvbiBtaXNtYXRjaCB3YXJuaW5ncyAoPCAxMCBmb3IgYW4gYWxseWVzY29uZmlnIGJ1aWxkKQogCWhlbHAKIAkgIFRoZSBzZWN0aW9uIG1pc21hdGNoIGFuYWx5c2lzIGNoZWNrcyBpZiB0aGVyZSBhcmUgaWxsZWdhbAogCSAgcmVmZXJlbmNlcyBmcm9tIG9uZSBzZWN0aW9uIHRvIGFub3RoZXIgc2VjdGlvbi4KQEAgLTIwOCw3ICsyMTEsNyBAQAogY29uZmlnIFNMVUJfU1RBVFMKIAlkZWZhdWx0IG4KIAlib29sICJFbmFibGUgU0xVQiBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzIgotCWRlcGVuZHMgb24gU0xVQgorCWRlcGVuZHMgb24gU0xVQiAmJiBTTFVCX0RFQlVHICYmIFNZU0ZTCiAJaGVscAogCSAgU0xVQiBzdGF0aXN0aWNzIGFyZSB1c2VmdWwgdG8gZGVidWcgU0xVQnMgYWxsb2NhdGlvbiBiZWhhdmlvciBpbgogCSAgb3JkZXIgZmluZCB3YXlzIHRvIG9wdGltaXplIHRoZSBhbGxvY2F0b3IuIFRoaXMgc2hvdWxkIG5ldmVyIGJlCkBAIC0yNjIsMTYgKzI2NSw2IEBACiAJIFRoaXMgZmVhdHVyZSBhbGxvd3MgbXV0ZXggc2VtYW50aWNzIHZpb2xhdGlvbnMgdG8gYmUgZGV0ZWN0ZWQgYW5kCiAJIHJlcG9ydGVkLgogCi1jb25maWcgREVCVUdfU0VNQVBIT1JFCi0JYm9vbCAiU2VtYXBob3JlIGRlYnVnZ2luZyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWRlcGVuZHMgb24gQUxQSEEgfHwgRlJWCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlbiBzZW1hcGhvcmUgcHJvY2Vzc2luZyB3aWxsIGlzc3VlIGxvdHMgb2YKLQkgIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLiAgSWYgeW91IHN1c3BlY3QgYSBzZW1hcGhvcmUgcHJvYmxlbSBvciBhCi0JICBrZXJuZWwgaGFja2VyIGFza3MgZm9yIHRoaXMgb3B0aW9uIHRoZW4gc2F5IFkuICBPdGhlcndpc2Ugc2F5IE4uCi0KIGNvbmZpZyBERUJVR19MT0NLX0FMTE9DCiAJYm9vbCAiTG9jayBkZWJ1Z2dpbmc6IGRldGVjdCBpbmNvcnJlY3QgZnJlZWluZyBvZiBsaXZlIGxvY2tzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgJiYgU1RBQ0tUUkFDRV9TVVBQT1JUICYmIExPQ0tERVBfU1VQUE9SVApAQCAtNDM0LDYgKzQyNywxNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgREVCVUdfV1JJVEVDT1VOVAorCWJvb2wgIkRlYnVnIGZpbGVzeXN0ZW0gd3JpdGVycyBjb3VudCIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIEVuYWJsZSB0aGlzIHRvIGNhdGNoIHdyb25nIHVzZSBvZiB0aGUgd3JpdGVycyBjb3VudCBpbiBzdHJ1Y3QKKwkgIHZmc21vdW50LiAgVGhpcyB3aWxsIGluY3JlYXNlIHRoZSBzaXplIG9mIGVhY2ggZmlsZSBzdHJ1Y3QgYnkKKwkgIDMyIGJpdHMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBERUJVR19MSVNUCiAJYm9vbCAiRGVidWcgbGlua2VkIGxpc3QgbWFuaXB1bGF0aW9uIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC01MjQsNiArNTI3LDcgQEAKIAl0cmlzdGF0ZSAiTGludXggS2VybmVsIER1bXAgVGVzdCBUb29sIE1vZHVsZSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWRlcGVuZHMgb24gS1BST0JFUworCWRlcGVuZHMgb24gQkxPQ0sKIAlkZWZhdWx0IG4KIAloZWxwCiAJVGhpcyBtb2R1bGUgZW5hYmxlcyB0ZXN0aW5nIG9mIHRoZSBkaWZmZXJlbnQgZHVtcGluZyBtZWNoYW5pc21zIGJ5CkBAIC01ODksNyArNTkzLDcgQEAKIAkgIHRvIGZpbmQgb3V0IHdoaWNoIHVzZXJzcGFjZSBpcyBibG9ja2luZyBvbiB3aGF0IGtlcm5lbCBvcGVyYXRpb25zLgogCiBjb25maWcgUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAotCWJvb2wgIlByb3ZpZGUgY29kZSBmb3IgZW5hYmxpbmcgRE1BIG92ZXIgRmlyZVdpcmUgZWFybHkgb24gYm9vdCIKKwlib29sICJSZW1vdGUgZGVidWdnaW5nIG92ZXIgRmlyZVdpcmUgZWFybHkgb24gYm9vdCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBYODYKIAloZWxwCiAJICBJZiB5b3Ugd2FudCB0byBkZWJ1ZyBwcm9ibGVtcyB3aGljaCBoYW5nIG9yIGNyYXNoIHRoZSBrZXJuZWwgZWFybHkKQEAgLTYxNyw0ICs2MjEsMTcgQEAKIAogCSAgU2VlIERvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBGSVJFV0lSRV9PSENJX1JFTU9URV9ETUEKKwlib29sICJSZW1vdGUgZGVidWdnaW5nIG92ZXIgRmlyZVdpcmUgd2l0aCBmaXJld2lyZS1vaGNpIgorCWRlcGVuZHMgb24gRklSRVdJUkVfT0hDSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGxldHMgeW91IHVzZSB0aGUgRmlyZVdpcmUgYnVzIGZvciByZW1vdGUgZGVidWdnaW5nCisJICB3aXRoIGhlbHAgb2YgdGhlIGZpcmV3aXJlLW9oY2kgZHJpdmVyLiBJdCBlbmFibGVzIHVuZmlsdGVyZWQKKwkgIHJlbW90ZSBETUEgaW4gZmlyZXdpcmUtb2hjaS4KKwkgIFNlZSBEb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBzb3VyY2UgInNhbXBsZXMvS2NvbmZpZyIKKworc291cmNlICJsaWIvS2NvbmZpZy5rZ2RiIgpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcua2dkYiBiL2xpYi9LY29uZmlnLmtnZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlMDFhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9LY29uZmlnLmtnZGIKQEAgLTAsMCArMSw1OCBAQAorCittZW51Y29uZmlnIEtHREIKKwlib29sICJLR0RCOiBrZXJuZWwgZGVidWdnaW5nIHdpdGggcmVtb3RlIGdkYiIKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUgorCWRlcGVuZHMgb24gSEFWRV9BUkNIX0tHREIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byByZW1vdGVseSBkZWJ1ZyB0aGUKKwkgIGtlcm5lbCB1c2luZyBnZGIuICBEb2N1bWVudGF0aW9uIG9mIGtlcm5lbCBkZWJ1Z2dlciBpcyBhdmFpbGFibGUKKwkgIGF0IGh0dHA6Ly9rZ2RiLnNvdXJjZWZvcmdlLm5ldCBhcyB3ZWxsIGFzIGluIERvY0Jvb2sgZm9ybQorCSAgaW4gRG9jdW1lbnRhdGlvbi9Eb2NCb29rLy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBIQVZFX0FSQ0hfS0dEQl9TSEFET1dfSU5GTworCWJvb2wKKworY29uZmlnIEhBVkVfQVJDSF9LR0RCCisJYm9vbAorCitjb25maWcgS0dEQl9TRVJJQUxfQ09OU09MRQorCXRyaXN0YXRlICJLR0RCOiB1c2Uga2dkYiBvdmVyIHRoZSBzZXJpYWwgY29uc29sZSIKKwlkZXBlbmRzIG9uIEtHREIKKwlzZWxlY3QgQ09OU09MRV9QT0xMCisJc2VsZWN0IE1BR0lDX1NZU1JRCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2hhcmUgYSBzZXJpYWwgY29uc29sZSB3aXRoIGtnZGIuIFN5c3JxLWcgbXVzdCBiZSB1c2VkCisJICB0byBicmVhayBpbiBpbml0aWFsbHkuCisKK2NvbmZpZyBLR0RCX1RFU1RTCisJYm9vbCAiS0dEQjogaW50ZXJuYWwgdGVzdCBzdWl0ZSIKKwlkZXBlbmRzIG9uIEtHREIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGlzIGEga2dkYiBJL08gbW9kdWxlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB0ZXN0CisJICBrZ2RiJ3MgaW50ZXJuYWwgZnVuY3Rpb25zLiAgVGhpcyBrZ2RiIEkvTyBtb2R1bGUgaXMKKwkgIGludGVuZGVkIHRvIGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgbmV3IGtnZGIgc3R1YnMKKwkgIGFzIHdlbGwgYXMgcmVncmVzc2lvbiB0ZXN0aW5nIHRoZSBrZ2RiIGludGVybmFscy4KKwkgIFNlZSB0aGUgZHJpdmVycy9taXNjL2tnZGJ0cy5jIGZvciB0aGUgZGV0YWlscyBhYm91dAorCSAgdGhlIHRlc3RzLiAgVGhlIG1vc3QgYmFzaWMgb2YgdGhpcyBJL08gbW9kdWxlIGlzIHRvIGJvb3QKKwkgIGEga2VybmVsIGJvb3QgYXJndW1lbnRzICJrZ2Rid2FpdCBrZ2RidHM9VjFGMTAwIgorCitjb25maWcgS0dEQl9URVNUU19PTl9CT09UCisJYm9vbCAiS0dEQjogUnVuIHRlc3RzIG9uIGJvb3QiCisJZGVwZW5kcyBvbiBLR0RCX1RFU1RTCisJZGVmYXVsdCBuCisJaGVscAorCSAgUnVuIHRoZSBrZ2RiIHRlc3RzIG9uIGJvb3QgdXAgYXV0b21hdGljYWxseSB3aXRob3V0IHRoZSBuZWVkCisJICB0byBwYXNzIGluIGEga2VybmVsIHBhcmFtZXRlcgorCitjb25maWcgS0dEQl9URVNUU19CT09UX1NUUklORworCXN0cmluZyAiS0dEQjogd2hpY2ggaW50ZXJuYWwga2dkYiB0ZXN0cyB0byBydW4iCisJZGVwZW5kcyBvbiBLR0RCX1RFU1RTX09OX0JPT1QKKwlkZWZhdWx0ICJWMUYxMDAiCisJaGVscAorCSAgVGhpcyBpcyB0aGUgY29tbWFuZCBzdHJpbmcgdG8gc2VuZCB0aGUga2dkYiB0ZXN0IHN1aXRlIG9uCisJICBib290LiAgU2VlIHRoZSBkcml2ZXJzL21pc2Mva2dkYnRzLmMgZm9yIGRldGFpbGVkCisJICBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBzdHJpbmdzIHlvdSBjb3VsZCB1c2UgYmV5b25kIHRoZQorCSAgZGVmYXVsdCBvZiBWMUYxMDAuCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMjNkZTI2MS4uYmY4MDAwZiAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtMjksNyArMjksNiBAQAogb2JqLSQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSArPSBzcGlubG9ja19kZWJ1Zy5vCiBsaWItJChDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSykgKz0gcndzZW0tc3BpbmxvY2subwogbGliLSQoQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNKSArPSByd3NlbS5vCi1saWItJChDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTKSArPSBzZW1hcGhvcmUtc2xlZXBlcnMubwogbGliLSQoQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCkgKz0gZmluZF9uZXh0X2JpdC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19IV0VJR0hUKSArPSBod2VpZ2h0Lm8KIG9iai0kKENPTkZJR19MT0NLX0tFUk5FTCkgKz0ga2VybmVsX2xvY2subwpAQCAtNjEsNyArNjAsNiBAQAogb2JqLSQoQ09ORklHX1RFWFRTRUFSQ0hfQk0pICs9IHRzX2JtLm8KIG9iai0kKENPTkZJR19URVhUU0VBUkNIX0ZTTSkgKz0gdHNfZnNtLm8KIG9iai0kKENPTkZJR19TTVApICs9IHBlcmNwdV9jb3VudGVyLm8KLW9iai0kKENPTkZJR19TTVApICs9IHBjb3VudGVyLm8KIG9iai0kKENPTkZJR19BVURJVF9HRU5FUklDKSArPSBhdWRpdC5vCiAKIG9iai0kKENPTkZJR19TV0lPVExCKSArPSBzd2lvdGxiLm8KQEAgLTcwLDYgKzY4LDggQEAKIAogbGliLSQoQ09ORklHX0dFTkVSSUNfQlVHKSArPSBidWcubwogCitvYmotJChDT05GSUdfSEFWRV9MTUIpICs9IGxtYi5vCisKIGhvc3Rwcm9ncy15CTo9IGdlbl9jcmMzMnRhYmxlCiBjbGVhbi1maWxlcwk6PSBjcmMzMnRhYmxlLmgKIApkaWZmIC0tZ2l0IGEvbGliL2JpdG1hcC5jIGIvbGliL2JpdG1hcC5jCmluZGV4IDJjOTI0MmUuLmE2OTM5ZTEgMTAwNjQ0Ci0tLSBhL2xpYi9iaXRtYXAuYworKysgYi9saWIvYml0bWFwLmMKQEAgLTMxNiw2ICszMTYsMjIgQEAKIEVYUE9SVF9TWU1CT0woYml0bWFwX3NjbnByaW50Zik7CiAKIC8qKgorICogYml0bWFwX3NjbnByaW50Zl9sZW4gLSByZXR1cm4gYnVmZmVyIGxlbmd0aCBuZWVkZWQgdG8gY29udmVydAorICogYml0bWFwIHRvIGFuIEFTQ0lJIGhleCBzdHJpbmcuCisgKiBAbGVuOiBudW1iZXIgb2YgYml0cyB0byBiZSBjb252ZXJ0ZWQKKyAqLworaW50IGJpdG1hcF9zY25wcmludGZfbGVuKHVuc2lnbmVkIGludCBsZW4pCit7CisJLyogd2UgbmVlZCA5IGNoYXJzIHBlciB3b3JkIGZvciAzMiBiaXQgd29yZHMgKDggaGV4ZGlnaXRzICsgc2VwL251bGwpICovCisJaW50IGJpdHNsZW4gPSBBTElHTihsZW4sIENIVU5LU1opOworCWludCB3b3JkbGVuID0gQ0hVTktTWiAvIDQ7CisJaW50IGJ1ZmxlbiA9IChiaXRzbGVuIC8gd29yZGxlbikgKiAod29yZGxlbiArIDEpICogc2l6ZW9mKGNoYXIpOworCisJcmV0dXJuIGJ1ZmxlbjsKK30KK0VYUE9SVF9TWU1CT0woYml0bWFwX3NjbnByaW50Zl9sZW4pOworCisvKioKICAqIF9fYml0bWFwX3BhcnNlIC0gY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nIGludG8gYSBiaXRtYXAuCiAgKiBAYnVmOiBwb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIHN0cmluZy4KICAqIEBidWZsZW46IGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAgSWYgc3RyaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGlzCmRpZmYgLS1naXQgYS9saWIvZGV2cmVzLmMgYi9saWIvZGV2cmVzLmMKaW5kZXggYjFkMzM2Yy4uZWRjMjdhNSAxMDA2NDQKLS0tIGEvbGliL2RldnJlcy5jCisrKyBiL2xpYi9kZXZyZXMuYwpAQCAtMjk4LDYgKzI5OCwzMSBAQAogRVhQT1JUX1NZTUJPTChwY2ltX2lvbWFwX3JlZ2lvbnMpOwogCiAvKioKKyAqIHBjaW1faW9tYXBfcmVnaW9uc19yZXF1ZXN0X2FsbCAtIFJlcXVlc3QgYWxsIEJBUnMgYW5kIGlvbWFwIHNwZWNpZmllZCBvbmVzCisgKiBAcGRldjogUENJIGRldmljZSB0byBtYXAgSU8gcmVzb3VyY2VzIGZvcgorICogQG1hc2s6IE1hc2sgb2YgQkFScyB0byBpb21hcAorICogQG5hbWU6IE5hbWUgdXNlZCB3aGVuIHJlcXVlc3RpbmcgcmVnaW9ucworICoKKyAqIFJlcXVlc3QgYWxsIFBDSSBCQVJzIGFuZCBpb21hcCByZWdpb25zIHNwZWNpZmllZCBieSBAbWFzay4KKyAqLworaW50IHBjaW1faW9tYXBfcmVnaW9uc19yZXF1ZXN0X2FsbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG1hc2ssCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgcmVxdWVzdF9tYXNrID0gKCgxIDw8IDYpIC0gMSkgJiB+bWFzazsKKwlpbnQgcmM7CisKKwlyYyA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgcmVxdWVzdF9tYXNrLCBuYW1lKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIG1hc2ssIG5hbWUpOworCWlmIChyYykKKwkJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCByZXF1ZXN0X21hc2spOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0wocGNpbV9pb21hcF9yZWdpb25zX3JlcXVlc3RfYWxsKTsKKworLyoqCiAgKiBwY2ltX2lvdW5tYXBfcmVnaW9ucyAtIFVubWFwIGFuZCByZWxlYXNlIFBDSSBCQVJzCiAgKiBAcGRldjogUENJIGRldmljZSB0byBtYXAgSU8gcmVzb3VyY2VzIGZvcgogICogQG1hc2s6IE1hc2sgb2YgQkFScyB0byB1bm1hcCBhbmQgcmVsZWFzZQpkaWZmIC0tZ2l0IGEvbGliL2lvbWFwLmMgYi9saWIvaW9tYXAuYwppbmRleCBkYjAwNGE5Li5kZDZjYTQ4IDEwMDY0NAotLS0gYS9saWIvaW9tYXAuYworKysgYi9saWIvaW9tYXAuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAgKiAqLwogdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgYmFyKTsKIAl1bnNpZ25lZCBsb25nIGxlbiA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiYXIpOwogCmRpZmYgLS1naXQgYS9saWIvaW9tbXUtaGVscGVyLmMgYi9saWIvaW9tbXUtaGVscGVyLmMKaW5kZXggNDk1NTc1YS4uYTNiOGQ0YyAxMDA2NDQKLS0tIGEvbGliL2lvbW11LWhlbHBlci5jCisrKyBiL2xpYi9pb21tdS1oZWxwZXIuYwpAQCAtNDAsMTAgKzQwLDEyIEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19zcGFuX2JvdW5kYXJ5KHVuc2lnbmVkIGludCBpbmRleCwgdW5zaWduZWQgaW50IG5yLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2hpZnQsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplKQoraW50IGlvbW11X2lzX3NwYW5fYm91bmRhcnkodW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgbnIsCisJCQkgICB1bnNpZ25lZCBsb25nIHNoaWZ0LAorCQkJICAgdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplKQogeworCUJVR19PTighaXNfcG93ZXJfb2ZfMihib3VuZGFyeV9zaXplKSk7CisKIAlzaGlmdCA9IChzaGlmdCArIGluZGV4KSAmIChib3VuZGFyeV9zaXplIC0gMSk7CiAJcmV0dXJuIHNoaWZ0ICsgbnIgPiBib3VuZGFyeV9zaXplOwogfQpAQCAtNTcsNyArNTksNyBAQAogYWdhaW46CiAJaW5kZXggPSBmaW5kX25leHRfemVyb19hcmVhKG1hcCwgc2l6ZSwgc3RhcnQsIG5yLCBhbGlnbl9tYXNrKTsKIAlpZiAoaW5kZXggIT0gLTEpIHsKLQkJaWYgKGlzX3NwYW5fYm91bmRhcnkoaW5kZXgsIG5yLCBzaGlmdCwgYm91bmRhcnlfc2l6ZSkpIHsKKwkJaWYgKGlvbW11X2lzX3NwYW5fYm91bmRhcnkoaW5kZXgsIG5yLCBzaGlmdCwgYm91bmRhcnlfc2l6ZSkpIHsKIAkJCS8qIHdlIGNvdWxkIGRvIG1vcmUgZWZmZWN0aXZlbHkgKi8KIAkJCXN0YXJ0ID0gaW5kZXggKyAxOwogCQkJZ290byBhZ2FpbjsKZGlmZiAtLWdpdCBhL2xpYi9rZXJuZWxfbG9jay5jIGIvbGliL2tlcm5lbF9sb2NrLmMKaW5kZXggODEyZGJmMC4uY2QzZTgyNSAxMDA2NDQKLS0tIGEvbGliL2tlcm5lbF9sb2NrLmMKKysrIGIvbGliL2tlcm5lbF9sb2NrLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAvKgogICogVGhlICdiaWcga2VybmVsIHNlbWFwaG9yZScKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IGQ3ODRkYWUuLjJjNjQ5MDMgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtNTgsMTEgKzU4LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGtvYmplY3QgKnRvX2tvYmooc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IGtvYmplY3QsIGVudHJ5KTsKLX0KLQogc3RhdGljIGludCBnZXRfa29ial9wYXRoX2xlbmd0aChzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlpbnQgbGVuZ3RoID0gMTsKQEAgLTE1Myw2ICsxNDgsMTAgQEAKIAkJcmV0dXJuOwogCWtyZWZfaW5pdCgma29iai0+a3JlZik7CiAJSU5JVF9MSVNUX0hFQUQoJmtvYmotPmVudHJ5KTsKKwlrb2JqLT5zdGF0ZV9pbl9zeXNmcyA9IDA7CisJa29iai0+c3RhdGVfYWRkX3VldmVudF9zZW50ID0gMDsKKwlrb2JqLT5zdGF0ZV9yZW1vdmVfdWV2ZW50X3NlbnQgPSAwOworCWtvYmotPnN0YXRlX2luaXRpYWxpemVkID0gMTsKIH0KIAogCkBAIC0yODksMTMgKzI4OCw4IEBACiAJCWR1bXBfc3RhY2soKTsKIAl9CiAKLQlrcmVmX2luaXQoJmtvYmotPmtyZWYpOwotCUlOSVRfTElTVF9IRUFEKCZrb2JqLT5lbnRyeSk7CisJa29iamVjdF9pbml0X2ludGVybmFsKGtvYmopOwogCWtvYmotPmt0eXBlID0ga3R5cGU7Ci0Ja29iai0+c3RhdGVfaW5fc3lzZnMgPSAwOwotCWtvYmotPnN0YXRlX2FkZF91ZXZlbnRfc2VudCA9IDA7Ci0Ja29iai0+c3RhdGVfcmVtb3ZlX3VldmVudF9zZW50ID0gMDsKLQlrb2JqLT5zdGF0ZV9pbml0aWFsaXplZCA9IDE7CiAJcmV0dXJuOwogCiBlcnJvcjoKQEAgLTU5Myw4ICs1ODcsMTUgQEAKICAqLwogdm9pZCBrb2JqZWN0X3B1dChzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKLQlpZiAoa29iaikKKwlpZiAoa29iaikgeworCQlpZiAoIWtvYmotPnN0YXRlX2luaXRpYWxpemVkKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJrb2JqZWN0OiAnJXMnICglcCk6IGlzIG5vdCAiCisJCQkgICAgICAgImluaXRpYWxpemVkLCB5ZXQga29iamVjdF9wdXQoKSBpcyBiZWluZyAiCisJCQkgICAgICAgImNhbGxlZC5cbiIsIGtvYmplY3RfbmFtZShrb2JqKSwga29iaik7CisJCQlXQVJOX09OKDEpOworCQl9CiAJCWtyZWZfcHV0KCZrb2JqLT5rcmVmLCBrb2JqZWN0X3JlbGVhc2UpOworCX0KIH0KIAogc3RhdGljIHZvaWQgZHluYW1pY19rb2JqX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCkBAIC03NDYsMTIgKzc0NywxMSBAQAogICovCiBzdHJ1Y3Qga29iamVjdCAqa3NldF9maW5kX29iaihzdHJ1Y3Qga3NldCAqa3NldCwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3Qga29iamVjdCAqazsKIAlzdHJ1Y3Qga29iamVjdCAqcmV0ID0gTlVMTDsKIAogCXNwaW5fbG9jaygma3NldC0+bGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAma3NldC0+bGlzdCkgewotCQlzdHJ1Y3Qga29iamVjdCAqayA9IHRvX2tvYmooZW50cnkpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaywgJmtzZXQtPmxpc3QsIGVudHJ5KSB7CiAJCWlmIChrb2JqZWN0X25hbWUoaykgJiYgIXN0cmNtcChrb2JqZWN0X25hbWUoayksIG5hbWUpKSB7CiAJCQlyZXQgPSBrb2JqZWN0X2dldChrKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCA1YTQwMmUyLi45ZmI2Yjg2IDEwMDY0NAotLS0gYS9saWIva29iamVjdF91ZXZlbnQuYworKysgYi9saWIva29iamVjdF91ZXZlbnQuYwpAQCAtMTUsMTEgKzE1LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAKQEAgLTU1LDcgKzU3LDcgQEAKIAllbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbjsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmIChjb3VudCAmJiBidWZbY291bnQtMV0gPT0gJ1xuJykKKwlpZiAoY291bnQgJiYgKGJ1Zltjb3VudC0xXSA9PSAnXG4nIHx8IGJ1Zltjb3VudC0xXSA9PSAnXDAnKSkKIAkJY291bnQtLTsKIAogCWlmICghY291bnQpCmRpZmYgLS1naXQgYS9saWIvbG1iLmMgYi9saWIvbG1iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2ZTI4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sbWIuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIFByb2NlZHVyZXMgZm9yIG1haW50YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGxvZ2ljYWwgbWVtb3J5IGJsb2Nrcy4KKyAqCisgKiBQZXRlciBCZXJnbmVyLCBJQk0gQ29ycC4JSnVuZSAyMDAxLgorICogQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEJlcmduZXIuCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CisKKyNkZWZpbmUgTE1CX0FMTE9DX0FOWVdIRVJFCTAKKworc3RydWN0IGxtYiBsbWI7CisKK3ZvaWQgbG1iX2R1bXBfYWxsKHZvaWQpCit7CisjaWZkZWYgREVCVUcKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlwcl9kZWJ1ZygibG1iX2R1bXBfYWxsOlxuIik7CisJcHJfZGVidWcoIiAgICBtZW1vcnkuY250CQkgID0gMHglbHhcbiIsIGxtYi5tZW1vcnkuY250KTsKKwlwcl9kZWJ1ZygiICAgIG1lbW9yeS5zaXplCQkgID0gMHglbGx4XG4iLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5tZW1vcnkuc2l6ZSk7CisJZm9yIChpPTA7IGkgPCBsbWIubWVtb3J5LmNudCA7aSsrKSB7CisJCXByX2RlYnVnKCIgICAgbWVtb3J5LnJlZ2lvblsweCV4XS5iYXNlICAgICAgID0gMHglbGx4XG4iLAorCQkgICAgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlKTsKKwkJcHJfZGVidWcoIgkJICAgICAgLnNpemUgICAgID0gMHglbGx4XG4iLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplKTsKKwl9CisKKwlwcl9kZWJ1ZygiICAgIHJlc2VydmVkLmNudAkgID0gMHglbHhcbiIsIGxtYi5yZXNlcnZlZC5jbnQpOworCXByX2RlYnVnKCIgICAgcmVzZXJ2ZWQuc2l6ZQkgID0gMHglbHhcbiIsIGxtYi5yZXNlcnZlZC5zaXplKTsKKwlmb3IgKGk9MDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQgO2krKykgeworCQlwcl9kZWJ1ZygiICAgIHJlc2VydmVkLnJlZ2lvblsweCV4XS5iYXNlICAgICAgID0gMHglbGx4XG4iLAorCQkgICAgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UpOworCQlwcl9kZWJ1ZygiCQkgICAgICAuc2l6ZSAgICAgPSAweCVsbHhcbiIsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZSk7CisJfQorI2VuZGlmIC8qIERFQlVHICovCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBsbWJfYWRkcnNfb3ZlcmxhcCh1NjQgYmFzZTEsIHU2NCBzaXplMSwKKwkJdTY0IGJhc2UyLCB1NjQgc2l6ZTIpCit7CisJcmV0dXJuICgoYmFzZTEgPCAoYmFzZTIgKyBzaXplMikpICYmIChiYXNlMiA8IChiYXNlMSArIHNpemUxKSkpOworfQorCitzdGF0aWMgbG9uZyBfX2luaXQgbG1iX2FkZHJzX2FkamFjZW50KHU2NCBiYXNlMSwgdTY0IHNpemUxLAorCQl1NjQgYmFzZTIsIHU2NCBzaXplMikKK3sKKwlpZiAoYmFzZTIgPT0gYmFzZTEgKyBzaXplMSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYmFzZTEgPT0gYmFzZTIgKyBzaXplMikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBsbWJfcmVnaW9uc19hZGphY2VudChzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLAorCQl1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKQoreworCXU2NCBiYXNlMSA9IHJnbi0+cmVnaW9uW3IxXS5iYXNlOworCXU2NCBzaXplMSA9IHJnbi0+cmVnaW9uW3IxXS5zaXplOworCXU2NCBiYXNlMiA9IHJnbi0+cmVnaW9uW3IyXS5iYXNlOworCXU2NCBzaXplMiA9IHJnbi0+cmVnaW9uW3IyXS5zaXplOworCisJcmV0dXJuIGxtYl9hZGRyc19hZGphY2VudChiYXNlMSwgc2l6ZTEsIGJhc2UyLCBzaXplMik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsbWJfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLCB1bnNpZ25lZCBsb25nIHIpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gcjsgaSA8IHJnbi0+Y250IC0gMTsgaSsrKSB7CisJCXJnbi0+cmVnaW9uW2ldLmJhc2UgPSByZ24tPnJlZ2lvbltpICsgMV0uYmFzZTsKKwkJcmduLT5yZWdpb25baV0uc2l6ZSA9IHJnbi0+cmVnaW9uW2kgKyAxXS5zaXplOworCX0KKwlyZ24tPmNudC0tOworfQorCisvKiBBc3N1bXB0aW9uOiBiYXNlIGFkZHIgb2YgcmVnaW9uIDEgPCBiYXNlIGFkZHIgb2YgcmVnaW9uIDIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBsbWJfY29hbGVzY2VfcmVnaW9ucyhzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLAorCQl1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKQoreworCXJnbi0+cmVnaW9uW3IxXS5zaXplICs9IHJnbi0+cmVnaW9uW3IyXS5zaXplOworCWxtYl9yZW1vdmVfcmVnaW9uKHJnbiwgcjIpOworfQorCit2b2lkIF9faW5pdCBsbWJfaW5pdCh2b2lkKQoreworCS8qIENyZWF0ZSBhIGR1bW15IHplcm8gc2l6ZSBMTUIgd2hpY2ggd2lsbCBnZXQgY29hbGVzY2VkIGF3YXkgbGF0ZXIuCisJICogVGhpcyBzaW1wbGlmaWVzIHRoZSBsbWJfYWRkKCkgY29kZSBiZWxvdy4uLgorCSAqLworCWxtYi5tZW1vcnkucmVnaW9uWzBdLmJhc2UgPSAwOworCWxtYi5tZW1vcnkucmVnaW9uWzBdLnNpemUgPSAwOworCWxtYi5tZW1vcnkuY250ID0gMTsKKworCS8qIERpdHRvLiAqLworCWxtYi5yZXNlcnZlZC5yZWdpb25bMF0uYmFzZSA9IDA7CisJbG1iLnJlc2VydmVkLnJlZ2lvblswXS5zaXplID0gMDsKKwlsbWIucmVzZXJ2ZWQuY250ID0gMTsKK30KKwordm9pZCBfX2luaXQgbG1iX2FuYWx5emUodm9pZCkKK3sKKwlpbnQgaTsKKworCWxtYi5tZW1vcnkuc2l6ZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykKKwkJbG1iLm1lbW9yeS5zaXplICs9IGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBsbWJfYWRkX3JlZ2lvbihzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLCB1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBjb2FsZXNjZWQgPSAwOworCWxvbmcgYWRqYWNlbnQsIGk7CisKKwlpZiAoKHJnbi0+Y250ID09IDEpICYmIChyZ24tPnJlZ2lvblswXS5zaXplID09IDApKSB7CisJCXJnbi0+cmVnaW9uWzBdLmJhc2UgPSBiYXNlOworCQlyZ24tPnJlZ2lvblswXS5zaXplID0gc2l6ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRmlyc3QgdHJ5IGFuZCBjb2FsZXNjZSB0aGlzIExNQiB3aXRoIGFub3RoZXIuICovCisJZm9yIChpID0gMDsgaSA8IHJnbi0+Y250OyBpKyspIHsKKwkJdTY0IHJnbmJhc2UgPSByZ24tPnJlZ2lvbltpXS5iYXNlOworCQl1NjQgcmduc2l6ZSA9IHJnbi0+cmVnaW9uW2ldLnNpemU7CisKKwkJaWYgKChyZ25iYXNlID09IGJhc2UpICYmIChyZ25zaXplID09IHNpemUpKQorCQkJLyogQWxyZWFkeSBoYXZlIHRoaXMgcmVnaW9uLCBzbyB3ZSdyZSBkb25lICovCisJCQlyZXR1cm4gMDsKKworCQlhZGphY2VudCA9IGxtYl9hZGRyc19hZGphY2VudChiYXNlLCBzaXplLCByZ25iYXNlLCByZ25zaXplKTsKKwkJaWYgKGFkamFjZW50ID4gMCkgeworCQkJcmduLT5yZWdpb25baV0uYmFzZSAtPSBzaXplOworCQkJcmduLT5yZWdpb25baV0uc2l6ZSArPSBzaXplOworCQkJY29hbGVzY2VkKys7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChhZGphY2VudCA8IDApIHsKKwkJCXJnbi0+cmVnaW9uW2ldLnNpemUgKz0gc2l6ZTsKKwkJCWNvYWxlc2NlZCsrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoKGkgPCByZ24tPmNudCAtIDEpICYmIGxtYl9yZWdpb25zX2FkamFjZW50KHJnbiwgaSwgaSsxKSkgeworCQlsbWJfY29hbGVzY2VfcmVnaW9ucyhyZ24sIGksIGkrMSk7CisJCWNvYWxlc2NlZCsrOworCX0KKworCWlmIChjb2FsZXNjZWQpCisJCXJldHVybiBjb2FsZXNjZWQ7CisJaWYgKHJnbi0+Y250ID49IE1BWF9MTUJfUkVHSU9OUykKKwkJcmV0dXJuIC0xOworCisJLyogQ291bGRuJ3QgY29hbGVzY2UgdGhlIExNQiwgc28gYWRkIGl0IHRvIHRoZSBzb3J0ZWQgdGFibGUuICovCisJZm9yIChpID0gcmduLT5jbnQgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoYmFzZSA8IHJnbi0+cmVnaW9uW2ldLmJhc2UpIHsKKwkJCXJnbi0+cmVnaW9uW2krMV0uYmFzZSA9IHJnbi0+cmVnaW9uW2ldLmJhc2U7CisJCQlyZ24tPnJlZ2lvbltpKzFdLnNpemUgPSByZ24tPnJlZ2lvbltpXS5zaXplOworCQl9IGVsc2UgeworCQkJcmduLT5yZWdpb25baSsxXS5iYXNlID0gYmFzZTsKKwkJCXJnbi0+cmVnaW9uW2krMV0uc2l6ZSA9IHNpemU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChiYXNlIDwgcmduLT5yZWdpb25bMF0uYmFzZSkgeworCQlyZ24tPnJlZ2lvblswXS5iYXNlID0gYmFzZTsKKwkJcmduLT5yZWdpb25bMF0uc2l6ZSA9IHNpemU7CisJfQorCXJnbi0+Y250Kys7CisKKwlyZXR1cm4gMDsKK30KKworbG9uZyBfX2luaXQgbG1iX2FkZCh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJc3RydWN0IGxtYl9yZWdpb24gKl9yZ24gPSAmbG1iLm1lbW9yeTsKKworCS8qIE9uIHBTZXJpZXMgTFBBUiBzeXN0ZW1zLCB0aGUgZmlyc3QgTE1CIGlzIG91ciBSTU8gcmVnaW9uLiAqLworCWlmIChiYXNlID09IDApCisJCWxtYi5ybW9fc2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gbG1iX2FkZF9yZWdpb24oX3JnbiwgYmFzZSwgc2l6ZSk7CisKK30KKworbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodTY0IGJhc2UsIHU2NCBzaXplKQoreworCXN0cnVjdCBsbWJfcmVnaW9uICpfcmduID0gJmxtYi5yZXNlcnZlZDsKKworCUJVR19PTigwID09IHNpemUpOworCisJcmV0dXJuIGxtYl9hZGRfcmVnaW9uKF9yZ24sIGJhc2UsIHNpemUpOworfQorCitsb25nIF9faW5pdCBsbWJfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBsbWJfcmVnaW9uICpyZ24sIHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmduLT5jbnQ7IGkrKykgeworCQl1NjQgcmduYmFzZSA9IHJnbi0+cmVnaW9uW2ldLmJhc2U7CisJCXU2NCByZ25zaXplID0gcmduLT5yZWdpb25baV0uc2l6ZTsKKwkJaWYgKGxtYl9hZGRyc19vdmVybGFwKGJhc2UsIHNpemUsIHJnbmJhc2UsIHJnbnNpemUpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChpIDwgcmduLT5jbnQpID8gaSA6IC0xOworfQorCitzdGF0aWMgdTY0IGxtYl9hbGlnbl9kb3duKHU2NCBhZGRyLCB1NjQgc2l6ZSkKK3sKKwlyZXR1cm4gYWRkciAmIH4oc2l6ZSAtIDEpOworfQorCitzdGF0aWMgdTY0IGxtYl9hbGlnbl91cCh1NjQgYWRkciwgdTY0IHNpemUpCit7CisJcmV0dXJuIChhZGRyICsgKHNpemUgLSAxKSkgJiB+KHNpemUgLSAxKTsKK30KKworc3RhdGljIHU2NCBfX2luaXQgbG1iX2FsbG9jX25pZF91bnJlc2VydmVkKHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCQkJICAgdTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwl1NjQgYmFzZSwgcmVzX2Jhc2U7CisJbG9uZyBqOworCisJYmFzZSA9IGxtYl9hbGlnbl9kb3duKChlbmQgLSBzaXplKSwgYWxpZ24pOworCXdoaWxlIChzdGFydCA8PSBiYXNlKSB7CisJCWogPSBsbWJfb3ZlcmxhcHNfcmVnaW9uKCZsbWIucmVzZXJ2ZWQsIGJhc2UsIHNpemUpOworCQlpZiAoaiA8IDApIHsKKwkJCS8qIHRoaXMgYXJlYSBpc24ndCByZXNlcnZlZCwgdGFrZSBpdCAqLworCQkJaWYgKGxtYl9hZGRfcmVnaW9uKCZsbWIucmVzZXJ2ZWQsIGJhc2UsCisJCQkJCSAgIGxtYl9hbGlnbl91cChzaXplLCBhbGlnbikpIDwgMCkKKwkJCQliYXNlID0gfih1NjQpMDsKKwkJCXJldHVybiBiYXNlOworCQl9CisJCXJlc19iYXNlID0gbG1iLnJlc2VydmVkLnJlZ2lvbltqXS5iYXNlOworCQlpZiAocmVzX2Jhc2UgPCBzaXplKQorCQkJYnJlYWs7CisJCWJhc2UgPSBsbWJfYWxpZ25fZG93bihyZXNfYmFzZSAtIHNpemUsIGFsaWduKTsKKwl9CisKKwlyZXR1cm4gfih1NjQpMDsKK30KKworc3RhdGljIHU2NCBfX2luaXQgbG1iX2FsbG9jX25pZF9yZWdpb24oc3RydWN0IGxtYl9wcm9wZXJ0eSAqbXAsCisJCQkJICAgICAgIHU2NCAoKm5pZF9yYW5nZSkodTY0LCB1NjQsIGludCAqKSwKKwkJCQkgICAgICAgdTY0IHNpemUsIHU2NCBhbGlnbiwgaW50IG5pZCkKK3sKKwl1NjQgc3RhcnQsIGVuZDsKKworCXN0YXJ0ID0gbXAtPmJhc2U7CisJZW5kID0gc3RhcnQgKyBtcC0+c2l6ZTsKKworCXN0YXJ0ID0gbG1iX2FsaWduX3VwKHN0YXJ0LCBhbGlnbik7CisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCXU2NCB0aGlzX2VuZDsKKwkJaW50IHRoaXNfbmlkOworCisJCXRoaXNfZW5kID0gbmlkX3JhbmdlKHN0YXJ0LCBlbmQsICZ0aGlzX25pZCk7CisJCWlmICh0aGlzX25pZCA9PSBuaWQpIHsKKwkJCXU2NCByZXQgPSBsbWJfYWxsb2NfbmlkX3VucmVzZXJ2ZWQoc3RhcnQsIHRoaXNfZW5kLAorCQkJCQkJCSAgIHNpemUsIGFsaWduKTsKKwkJCWlmIChyZXQgIT0gfih1NjQpMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXN0YXJ0ID0gdGhpc19lbmQ7CisJfQorCisJcmV0dXJuIH4odTY0KTA7Cit9CisKK3U2NCBfX2luaXQgbG1iX2FsbG9jX25pZCh1NjQgc2l6ZSwgdTY0IGFsaWduLCBpbnQgbmlkLAorCQkJIHU2NCAoKm5pZF9yYW5nZSkodTY0IHN0YXJ0LCB1NjQgZW5kLCBpbnQgKm5pZCkpCit7CisJc3RydWN0IGxtYl9yZWdpb24gKm1lbSA9ICZsbWIubWVtb3J5OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1lbS0+Y250OyBpKyspIHsKKwkJdTY0IHJldCA9IGxtYl9hbGxvY19uaWRfcmVnaW9uKCZtZW0tPnJlZ2lvbltpXSwKKwkJCQkJICAgICAgIG5pZF9yYW5nZSwKKwkJCQkJICAgICAgIHNpemUsIGFsaWduLCBuaWQpOworCQlpZiAocmV0ICE9IH4odTY0KTApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBsbWJfYWxsb2Moc2l6ZSwgYWxpZ24pOworfQorCit1NjQgX19pbml0IGxtYl9hbGxvYyh1NjQgc2l6ZSwgdTY0IGFsaWduKQoreworCXJldHVybiBsbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgTE1CX0FMTE9DX0FOWVdIRVJFKTsKK30KKwordTY0IF9faW5pdCBsbWJfYWxsb2NfYmFzZSh1NjQgc2l6ZSwgdTY0IGFsaWduLCB1NjQgbWF4X2FkZHIpCit7CisJdTY0IGFsbG9jOworCisJYWxsb2MgPSBfX2xtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBtYXhfYWRkcik7CisKKwlpZiAoYWxsb2MgPT0gMCkKKwkJcGFuaWMoIkVSUk9SOiBGYWlsZWQgdG8gYWxsb2NhdGUgMHglbGx4IGJ5dGVzIGJlbG93IDB4JWxseC5cbiIsCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpIG1heF9hZGRyKTsKKworCXJldHVybiBhbGxvYzsKK30KKwordTY0IF9faW5pdCBfX2xtYl9hbGxvY19iYXNlKHU2NCBzaXplLCB1NjQgYWxpZ24sIHU2NCBtYXhfYWRkcikKK3sKKwlsb25nIGksIGo7CisJdTY0IGJhc2UgPSAwOworCXU2NCByZXNfYmFzZTsKKworCUJVR19PTigwID09IHNpemUpOworCisJLyogT24gc29tZSBwbGF0Zm9ybXMsIG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBsb3dtZW0gKi8KKwkvKiBOb3RlIHRoYXQgTE1CX1JFQUxfTElNSVQgbWF5IGJlIExNQl9BTExPQ19BTllXSEVSRSAqLworCWlmIChtYXhfYWRkciA9PSBMTUJfQUxMT0NfQU5ZV0hFUkUpCisJCW1heF9hZGRyID0gTE1CX1JFQUxfTElNSVQ7CisKKwlmb3IgKGkgPSBsbWIubWVtb3J5LmNudCAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXU2NCBsbWJiYXNlID0gbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZTsKKwkJdTY0IGxtYnNpemUgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplOworCisJCWlmIChsbWJzaXplIDwgc2l6ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWF4X2FkZHIgPT0gTE1CX0FMTE9DX0FOWVdIRVJFKQorCQkJYmFzZSA9IGxtYl9hbGlnbl9kb3duKGxtYmJhc2UgKyBsbWJzaXplIC0gc2l6ZSwgYWxpZ24pOworCQllbHNlIGlmIChsbWJiYXNlIDwgbWF4X2FkZHIpIHsKKwkJCWJhc2UgPSBtaW4obG1iYmFzZSArIGxtYnNpemUsIG1heF9hZGRyKTsKKwkJCWJhc2UgPSBsbWJfYWxpZ25fZG93bihiYXNlIC0gc2l6ZSwgYWxpZ24pOworCQl9IGVsc2UKKwkJCWNvbnRpbnVlOworCisJCXdoaWxlIChiYXNlICYmIGxtYmJhc2UgPD0gYmFzZSkgeworCQkJaiA9IGxtYl9vdmVybGFwc19yZWdpb24oJmxtYi5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7CisJCQlpZiAoaiA8IDApIHsKKwkJCQkvKiB0aGlzIGFyZWEgaXNuJ3QgcmVzZXJ2ZWQsIHRha2UgaXQgKi8KKwkJCQlpZiAobG1iX2FkZF9yZWdpb24oJmxtYi5yZXNlcnZlZCwgYmFzZSwKKwkJCQkJCSAgIHNpemUpIDwgMCkKKwkJCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIGJhc2U7CisJCQl9CisJCQlyZXNfYmFzZSA9IGxtYi5yZXNlcnZlZC5yZWdpb25bal0uYmFzZTsKKwkJCWlmIChyZXNfYmFzZSA8IHNpemUpCisJCQkJYnJlYWs7CisJCQliYXNlID0gbG1iX2FsaWduX2Rvd24ocmVzX2Jhc2UgLSBzaXplLCBhbGlnbik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFlvdSBtdXN0IGNhbGwgbG1iX2FuYWx5emUoKSBiZWZvcmUgdGhpcy4gKi8KK3U2NCBfX2luaXQgbG1iX3BoeXNfbWVtX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbG1iLm1lbW9yeS5zaXplOworfQorCit1NjQgX19pbml0IGxtYl9lbmRfb2ZfRFJBTSh2b2lkKQoreworCWludCBpZHggPSBsbWIubWVtb3J5LmNudCAtIDE7CisKKwlyZXR1cm4gKGxtYi5tZW1vcnkucmVnaW9uW2lkeF0uYmFzZSArIGxtYi5tZW1vcnkucmVnaW9uW2lkeF0uc2l6ZSk7Cit9CisKKy8qIFlvdSBtdXN0IGNhbGwgbG1iX2FuYWx5emUoKSBhZnRlciB0aGlzLiAqLwordm9pZCBfX2luaXQgbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHU2NCBtZW1vcnlfbGltaXQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXU2NCBsaW1pdDsKKwlzdHJ1Y3QgbG1iX3Byb3BlcnR5ICpwOworCisJaWYgKCFtZW1vcnlfbGltaXQpCisJCXJldHVybjsKKworCS8qIFRydW5jYXRlIHRoZSBsbWIgcmVnaW9ucyB0byBzYXRpc2Z5IHRoZSBtZW1vcnkgbGltaXQuICovCisJbGltaXQgPSBtZW1vcnlfbGltaXQ7CisJZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKKwkJaWYgKGxpbWl0ID4gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZSkgeworCQkJbGltaXQgLT0gbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZSA9IGxpbWl0OworCQlsbWIubWVtb3J5LmNudCA9IGkgKyAxOworCQlicmVhazsKKwl9CisKKwlpZiAobG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZSA8IGxtYi5ybW9fc2l6ZSkKKwkJbG1iLnJtb19zaXplID0gbG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZTsKKworCS8qIEFuZCB0cnVuY2F0ZSBhbnkgcmVzZXJ2ZXMgYWJvdmUgdGhlIGxpbWl0IGFsc28uICovCisJZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgeworCQlwID0gJmxtYi5yZXNlcnZlZC5yZWdpb25baV07CisKKwkJaWYgKHAtPmJhc2UgPiBtZW1vcnlfbGltaXQpCisJCQlwLT5zaXplID0gMDsKKwkJZWxzZSBpZiAoKHAtPmJhc2UgKyBwLT5zaXplKSA+IG1lbW9yeV9saW1pdCkKKwkJCXAtPnNpemUgPSBtZW1vcnlfbGltaXQgLSBwLT5iYXNlOworCisJCWlmIChwLT5zaXplID09IDApIHsKKwkJCWxtYl9yZW1vdmVfcmVnaW9uKCZsbWIucmVzZXJ2ZWQsIGkpOworCQkJaS0tOworCQl9CisJfQorfQorCitpbnQgX19pbml0IGxtYl9pc19yZXNlcnZlZCh1NjQgYWRkcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsbWIucmVzZXJ2ZWQuY250OyBpKyspIHsKKwkJdTY0IHVwcGVyID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlICsKKwkJCWxtYi5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZSAtIDE7CisJCWlmICgoYWRkciA+PSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2UpICYmIChhZGRyIDw9IHVwcGVyKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYi9sem8vbHpvMXhfZGVjb21wcmVzcy5jIGIvbGliL2x6by9sem8xeF9kZWNvbXByZXNzLmMKaW5kZXggOWRjNzA1Ni4uNzdmMGY5YiAxMDA2NDQKLS0tIGEvbGliL2x6by9sem8xeF9kZWNvbXByZXNzLmMKKysrIGIvbGliL2x6by9sem8xeF9kZWNvbXByZXNzLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCQkJCQl0ICs9IDcgKyAqaXArKzsKIAkJCQl9CiAJCQkJbV9wb3MgLT0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgKLQkJCQkJKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopaXApID4+IDIpOworCQkJCQkoY29uc3QgdW5zaWduZWQgc2hvcnQgKilpcCkpID4+IDI7CiAJCQkJaXAgKz0gMjsKIAkJCQlpZiAobV9wb3MgPT0gb3ApCiAJCQkJCWdvdG8gZW9mX2ZvdW5kOwpkaWZmIC0tZ2l0IGEvbGliL3Bjb3VudGVyLmMgYi9saWIvcGNvdW50ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1NjgwNy4uMDAwMDAwMAotLS0gYS9saWIvcGNvdW50ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBEZWZpbmUgZGVmYXVsdCBwY291bnRlciBmdW5jdGlvbnMKLSAqIE5vdGUgdGhhdCBvZnRlbiB1c2VkIHBjb3VudGVycyB1c2UgZGVkaWNhdGVkIGZ1bmN0aW9ucyB0byBnZXQgYSBzcGVlZCBpbmNyZWFzZS4KLSAqIChzZWUgREVGSU5FX1BDT1VOVEVSL1JFRl9QQ09VTlRFUl9NRU1CRVIpCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Bjb3VudGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotCi1zdGF0aWMgdm9pZCBwY291bnRlcl9keW5fYWRkKHN0cnVjdCBwY291bnRlciAqc2VsZiwgaW50IGluYykKLXsKLQlwZXJfY3B1X3B0cihzZWxmLT5wZXJfY3B1X3ZhbHVlcywgc21wX3Byb2Nlc3Nvcl9pZCgpKVswXSArPSBpbmM7Ci19Ci0KLXN0YXRpYyBpbnQgcGNvdW50ZXJfZHluX2dldHZhbChjb25zdCBzdHJ1Y3QgcGNvdW50ZXIgKnNlbGYsIGludCBjcHUpCi17Ci0JcmV0dXJuIHBlcl9jcHVfcHRyKHNlbGYtPnBlcl9jcHVfdmFsdWVzLCBjcHUpWzBdOwotfQotCi1pbnQgcGNvdW50ZXJfZ2V0dmFsKGNvbnN0IHN0cnVjdCBwY291bnRlciAqc2VsZikKLXsKLQlpbnQgcmVzID0gMCwgY3B1OwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJcmVzICs9IHNlbGYtPmdldHZhbChzZWxmLCBjcHUpOwotCi0JcmV0dXJuIHJlczsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjb3VudGVyX2dldHZhbCk7Ci0KLWludCBwY291bnRlcl9hbGxvYyhzdHJ1Y3QgcGNvdW50ZXIgKnNlbGYpCi17Ci0JaW50IHJjID0gMDsKLQlpZiAoc2VsZi0+YWRkID09IE5VTEwpIHsKLQkJc2VsZi0+cGVyX2NwdV92YWx1ZXMgPSBhbGxvY19wZXJjcHUoaW50KTsKLQkJaWYgKHNlbGYtPnBlcl9jcHVfdmFsdWVzICE9IE5VTEwpIHsKLQkJCXNlbGYtPmFkZCAgICA9IHBjb3VudGVyX2R5bl9hZGQ7Ci0JCQlzZWxmLT5nZXR2YWwgPSBwY291bnRlcl9keW5fZ2V0dmFsOwotCQl9IGVsc2UKLQkJCXJjID0gMTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocGNvdW50ZXJfYWxsb2MpOwotCi12b2lkIHBjb3VudGVyX2ZyZWUoc3RydWN0IHBjb3VudGVyICpzZWxmKQotewotCWlmIChzZWxmLT5wZXJfY3B1X3ZhbHVlcyAhPSBOVUxMKSB7Ci0JCWZyZWVfcGVyY3B1KHNlbGYtPnBlcl9jcHVfdmFsdWVzKTsKLQkJc2VsZi0+cGVyX2NwdV92YWx1ZXMgPSBOVUxMOwotCQlzZWxmLT5nZXR2YWwgPSBOVUxMOwotCQlzZWxmLT5hZGQgPSBOVUxMOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjb3VudGVyX2ZyZWUpOwotCmRpZmYgLS1naXQgYS9saWIvcmFuZG9tMzIuYyBiL2xpYi9yYW5kb20zMi5jCmluZGV4IGVjN2Y4MWQuLmNhODdkODYgMTAwNjQ0Ci0tLSBhL2xpYi9yYW5kb20zMi5jCisrKyBiL2xpYi9yYW5kb20zMi5jCkBAIC05NywxMyArOTcsMTggQEAKICAqCUBzZWVkOiBzZWVkIHZhbHVlCiAgKgogICoJQWRkIHNvbWUgYWRkaXRpb25hbCBzZWVkaW5nIHRvIHRoZSByYW5kb20zMigpIHBvb2wuCi0gKglOb3RlOiB0aGlzIHBvb2wgaXMgcGVyIGNwdSBzbyBpdCBvbmx5IGFmZmVjdHMgY3VycmVudCBDUFUuCiAgKi8KIHZvaWQgc3JhbmRvbTMyKHUzMiBlbnRyb3B5KQogewotCXN0cnVjdCBybmRfc3RhdGUgKnN0YXRlID0gJmdldF9jcHVfdmFyKG5ldF9yYW5kX3N0YXRlKTsKLQlfX3NldF9yYW5kb20zMihzdGF0ZSwgc3RhdGUtPnMxIF4gZW50cm9weSk7Ci0JcHV0X2NwdV92YXIoc3RhdGUpOworCWludCBpOworCS8qCisJICogTm8gbG9ja2luZyBvbiB0aGUgQ1BVcywgYnV0IHRoZW4gc29tZXdoYXQgcmFuZG9tIHJlc3VsdHMgYXJlLCB3ZWxsLAorCSAqIGV4cGVjdGVkLgorCSAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdSAoaSkgeworCQlzdHJ1Y3Qgcm5kX3N0YXRlICpzdGF0ZSA9ICZwZXJfY3B1KG5ldF9yYW5kX3N0YXRlLCBpKTsKKwkJX19zZXRfcmFuZG9tMzIoc3RhdGUsIHN0YXRlLT5zMSBeIGVudHJvcHkpOworCX0KIH0KIEVYUE9SVF9TWU1CT0woc3JhbmRvbTMyKTsKIApkaWZmIC0tZ2l0IGEvbGliL3JlZWRfc29sb21vbi9yZWVkX3NvbG9tb24uYyBiL2xpYi9yZWVkX3NvbG9tb24vcmVlZF9zb2xvbW9uLmMKaW5kZXggM2VhMmRiOS4uMDZkMDRjZiAxMDA2NDQKLS0tIGEvbGliL3JlZWRfc29sb21vbi9yZWVkX3NvbG9tb24uYworKysgYi9saWIvcmVlZF9zb2xvbW9uL3JlZWRfc29sb21vbi5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvcnNsaWIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKIC8qIFRoaXMgbGlzdCBob2xkcyBhbGwgY3VycmVudGx5IGFsbG9jYXRlZCBycyBjb250cm9sIHN0cnVjdHVyZXMgKi8KIHN0YXRpYyBMSVNUX0hFQUQgKHJzbGlzdCk7CmRpZmYgLS1naXQgYS9saWIvc2NhdHRlcmxpc3QuYyBiL2xpYi9zY2F0dGVybGlzdC5jCmluZGV4IGFjY2E0OTAuLmI4MGMyMTEgMTAwNjQ0Ci0tLSBhL2xpYi9zY2F0dGVybGlzdC5jCisrKyBiL2xpYi9zY2F0dGVybGlzdC5jCkBAIC04LDYgKzgsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKIC8qKgogICogc2dfbmV4dCAtIHJldHVybiB0aGUgbmV4dCBzY2F0dGVybGlzdCBlbnRyeSBpbiBhIGxpc3QKQEAgLTI5MiwzICsyOTMsMTA0IEBACiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc2dfYWxsb2NfdGFibGUpOworCisvKioKKyAqIHNnX2NvcHlfYnVmZmVyIC0gQ29weSBkYXRhIGJldHdlZW4gYSBsaW5lYXIgYnVmZmVyIGFuZCBhbiBTRyBsaXN0CisgKiBAc2dsOgkJIFRoZSBTRyBsaXN0CisgKiBAbmVudHM6CQkgTnVtYmVyIG9mIFNHIGVudHJpZXMKKyAqIEBidWY6CQkgV2hlcmUgdG8gY29weSBmcm9tCisgKiBAYnVmbGVuOgkJIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICogQHRvX2J1ZmZlcjogCQkgdHJhbnNmZXIgZGlyZWN0aW9uIChub24gemVybyA9PSBmcm9tIGFuIHNnIGxpc3QgdG8gYQorICogCQkJIGJ1ZmZlciwgMCA9PSBmcm9tIGEgYnVmZmVyIHRvIGFuIHNnIGxpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqKi8KK3N0YXRpYyBzaXplX3Qgc2dfY29weV9idWZmZXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBuZW50cywKKwkJCSAgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCBpbnQgdG9fYnVmZmVyKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJc2l6ZV90IGJ1Zl9vZmYgPSAwOworCWludCBpOworCisJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKKworCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBpKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQlpbnQgbiA9IDA7CisJCXVuc2lnbmVkIGludCBzZ19vZmYgPSBzZy0+b2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgc2dfY29weSA9IHNnLT5sZW5ndGg7CisKKwkJaWYgKHNnX2NvcHkgPiBidWZsZW4pCisJCQlzZ19jb3B5ID0gYnVmbGVuOworCQlidWZsZW4gLT0gc2dfY29weTsKKworCQl3aGlsZSAoc2dfY29weSA+IDApIHsKKwkJCXVuc2lnbmVkIGludCBwYWdlX2NvcHk7CisJCQl2b2lkICpwOworCisJCQlwYWdlX2NvcHkgPSBQQUdFX1NJWkUgLSBzZ19vZmY7CisJCQlpZiAocGFnZV9jb3B5ID4gc2dfY29weSkKKwkJCQlwYWdlX2NvcHkgPSBzZ19jb3B5OworCisJCQlwYWdlID0gbnRoX3BhZ2Uoc2dfcGFnZShzZyksIG4pOworCQkJcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0JJT19TUkNfSVJRKTsKKworCQkJaWYgKHRvX2J1ZmZlcikKKwkJCQltZW1jcHkoYnVmICsgYnVmX29mZiwgcCArIHNnX29mZiwgcGFnZV9jb3B5KTsKKwkJCWVsc2UgeworCQkJCW1lbWNweShwICsgc2dfb2ZmLCBidWYgKyBidWZfb2ZmLCBwYWdlX2NvcHkpOworCQkJCWZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShwYWdlKTsKKwkJCX0KKworCQkJa3VubWFwX2F0b21pYyhwLCBLTV9CSU9fU1JDX0lSUSk7CisKKwkJCWJ1Zl9vZmYgKz0gcGFnZV9jb3B5OworCQkJc2dfb2ZmICs9IHBhZ2VfY29weTsKKwkJCWlmIChzZ19vZmYgPT0gUEFHRV9TSVpFKSB7CisJCQkJc2dfb2ZmID0gMDsKKwkJCQluKys7CisJCQl9CisJCQlzZ19jb3B5IC09IHBhZ2VfY29weTsKKwkJfQorCisJCWlmICghYnVmbGVuKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGJ1Zl9vZmY7Cit9CisKKy8qKgorICogc2dfY29weV9mcm9tX2J1ZmZlciAtIENvcHkgZnJvbSBhIGxpbmVhciBidWZmZXIgdG8gYW4gU0cgbGlzdAorICogQHNnbDoJCSBUaGUgU0cgbGlzdAorICogQG5lbnRzOgkJIE51bWJlciBvZiBTRyBlbnRyaWVzCisgKiBAYnVmOgkJIFdoZXJlIHRvIGNvcHkgZnJvbQorICogQGJ1ZmxlbjoJCSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICoKKyAqKi8KK3NpemVfdCBzZ19jb3B5X2Zyb21fYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgbmVudHMsCisJCQkgICB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJcmV0dXJuIHNnX2NvcHlfYnVmZmVyKHNnbCwgbmVudHMsIGJ1ZiwgYnVmbGVuLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woc2dfY29weV9mcm9tX2J1ZmZlcik7CisKKy8qKgorICogc2dfY29weV90b19idWZmZXIgLSBDb3B5IGZyb20gYW4gU0cgbGlzdCB0byBhIGxpbmVhciBidWZmZXIKKyAqIEBzZ2w6CQkgVGhlIFNHIGxpc3QKKyAqIEBuZW50czoJCSBOdW1iZXIgb2YgU0cgZW50cmllcworICogQGJ1ZjoJCSBXaGVyZSB0byBjb3B5IHRvCisgKiBAYnVmbGVuOgkJIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCisgKgorICoqLworc2l6ZV90IHNnX2NvcHlfdG9fYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgbmVudHMsCisJCQkgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCXJldHVybiBzZ19jb3B5X2J1ZmZlcihzZ2wsIG5lbnRzLCBidWYsIGJ1ZmxlbiwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHNnX2NvcHlfdG9fYnVmZmVyKTsKZGlmZiAtLWdpdCBhL2xpYi9zZW1hcGhvcmUtc2xlZXBlcnMuYyBiL2xpYi9zZW1hcGhvcmUtc2xlZXBlcnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5ODc4Mi4uMDAwMDAwMAotLS0gYS9saWIvc2VtYXBob3JlLXNsZWVwZXJzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIGkzODYgYW5kIHg4Ni02NCBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCi0gKgotICogKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzCi0gKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IDE5OTkgUmVkIEhhdCwgSW5jLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogcncgc2VtYXBob3JlcyBpbXBsZW1lbnRlZCBOb3ZlbWJlciAxOTk5IGJ5IEJlbmphbWluIExhSGFpc2UgPGJjcmxAa3ZhY2sub3JnPgotICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotCi0vKgotICogU2VtYXBob3JlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0d28td2F5IGNvdW50ZXI6Ci0gKiBUaGUgImNvdW50IiB2YXJpYWJsZSBpcyBkZWNyZW1lbnRlZCBmb3IgZWFjaCBwcm9jZXNzCi0gKiB0aGF0IHRyaWVzIHRvIGFjcXVpcmUgdGhlIHNlbWFwaG9yZSwgd2hpbGUgdGhlICJzbGVlcGluZyIKLSAqIHZhcmlhYmxlIGlzIGEgY291bnQgb2Ygc3VjaCBhY3F1aXJlcy4KLSAqCi0gKiBOb3RhYmx5LCB0aGUgaW5saW5lICJ1cCgpIiBhbmQgImRvd24oKSIgZnVuY3Rpb25zIGNhbgotICogZWZmaWNpZW50bHkgdGVzdCBpZiB0aGV5IG5lZWQgdG8gZG8gYW55IGV4dHJhIHdvcmsgKHVwCi0gKiBuZWVkcyB0byBkbyBzb21ldGhpbmcgb25seSBpZiBjb3VudCB3YXMgbmVnYXRpdmUgYmVmb3JlCi0gKiB0aGUgaW5jcmVtZW50IG9wZXJhdGlvbi4KLSAqCi0gKiAic2xlZXBpbmciIGFuZCB0aGUgY29udGVudGlvbiByb3V0aW5lIG9yZGVyaW5nIGlzIHByb3RlY3RlZAotICogYnkgdGhlIHNwaW5sb2NrIGluIHRoZSBzZW1hcGhvcmUncyB3YWl0cXVldWUgaGVhZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGlzCi0gKiBjb250ZW50aW9uIG9uIHRoZSBsb2NrLCBhbmQgYXMgc3VjaCBhbGwgdGhpcyBpcyB0aGUKLSAqICJub24tY3JpdGljYWwiIHBhcnQgb2YgdGhlIHdob2xlIHNlbWFwaG9yZSBidXNpbmVzcy4gVGhlCi0gKiBjcml0aWNhbCBwYXJ0IGlzIHRoZSBpbmxpbmUgc3R1ZmYgaW4gPGFzbS9zZW1hcGhvcmUuaD4KLSAqIHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgYW55IGV4dHJhIGp1bXBzIGFuZCBjYWxscy4KLSAqLwotCi0vKgotICogTG9naWM6Ci0gKiAgLSBvbmx5IG9uIGEgYm91bmRhcnkgY29uZGl0aW9uIGRvIHdlIG5lZWQgdG8gY2FyZS4gV2hlbiB3ZSBnbwotICogICAgZnJvbSBhIG5lZ2F0aXZlIGNvdW50IHRvIGEgbm9uLW5lZ2F0aXZlLCB3ZSB3YWtlIHBlb3BsZSB1cC4KLSAqICAtIHdoZW4gd2UgZ28gZnJvbSBhIG5vbi1uZWdhdGl2ZSBjb3VudCB0byBhIG5lZ2F0aXZlIGRvIHdlCi0gKiAgICAoYSkgc3luY2hyb25pemUgd2l0aCB0aGUgInNsZWVwZXIiIGNvdW50IGFuZCAoYikgbWFrZSBzdXJlCi0gKiAgICB0aGF0IHdlJ3JlIG9uIHRoZSB3YWtldXAgbGlzdCBiZWZvcmUgd2Ugc3luY2hyb25pemUgc28gdGhhdAotICogICAgd2UgY2Fubm90IGxvc2Ugd2FrZXVwIGV2ZW50cy4KLSAqLwotCi12b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXdha2VfdXAoJnNlbS0+d2FpdCk7Ci19Ci0KLXZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqc2VtKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCB0c2spOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl0c2stPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlX2xvY2tlZCgmc2VtLT53YWl0LCAmd2FpdCk7Ci0KLQlzZW0tPnNsZWVwZXJzKys7Ci0JZm9yICg7OykgewotCQlpbnQgc2xlZXBlcnMgPSBzZW0tPnNsZWVwZXJzOwotCi0JCS8qCi0JCSAqIEFkZCAiZXZlcnlib2R5IGVsc2UiIGludG8gaXQuIFRoZXkgYXJlbid0Ci0JCSAqIHBsYXlpbmcsIGJlY2F1c2Ugd2Ugb3duIHRoZSBzcGlubG9jayBpbgotCQkgKiB0aGUgd2FpdF9xdWV1ZV9oZWFkLgotCQkgKi8KLQkJaWYgKCFhdG9taWNfYWRkX25lZ2F0aXZlKHNsZWVwZXJzIC0gMSwgJnNlbS0+Y291bnQpKSB7Ci0JCQlzZW0tPnNsZWVwZXJzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNlbS0+c2xlZXBlcnMgPSAxOwkvKiB1cyAtIHNlZSAtMSBhYm92ZSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCi0JCXNjaGVkdWxlKCk7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JCXRzay0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWVfbG9ja2VkKCZzZW0tPndhaXQsICZ3YWl0KTsKLQl3YWtlX3VwX2xvY2tlZCgmc2VtLT53YWl0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci19Ci0KLWludCBfX3NjaGVkIF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JdHNrLT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmVfbG9ja2VkKCZzZW0tPndhaXQsICZ3YWl0KTsKLQotCXNlbS0+c2xlZXBlcnMrKzsKLQlmb3IgKDs7KSB7Ci0JCWludCBzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnM7Ci0KLQkJLyoKLQkJICogV2l0aCBzaWduYWxzIHBlbmRpbmcsIHRoaXMgdHVybnMgaW50bwotCQkgKiB0aGUgdHJ5bG9jayBmYWlsdXJlIGNhc2UgLSB3ZSB3b24ndCBiZQotCQkgKiBzbGVlcGluZywgYW5kIHdlKiBjYW4ndCBnZXQgdGhlIGxvY2sgYXMKLQkJICogaXQgaGFzIGNvbnRlbnRpb24uIEp1c3QgY29ycmVjdCB0aGUgY291bnQKLQkJICogYW5kIGV4aXQuCi0JCSAqLwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldHZhbCA9IC1FSU5UUjsKLQkJCXNlbS0+c2xlZXBlcnMgPSAwOwotCQkJYXRvbWljX2FkZChzbGVlcGVycywgJnNlbS0+Y291bnQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBBZGQgImV2ZXJ5Ym9keSBlbHNlIiBpbnRvIGl0LiBUaGV5IGFyZW4ndAotCQkgKiBwbGF5aW5nLCBiZWNhdXNlIHdlIG93biB0aGUgc3BpbmxvY2sgaW4KLQkJICogd2FpdF9xdWV1ZV9oZWFkLiBUaGUgIi0xIiBpcyBiZWNhdXNlIHdlJ3JlCi0JCSAqIHN0aWxsIGhvcGluZyB0byBnZXQgdGhlIHNlbWFwaG9yZS4KLQkJICovCi0JCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZShzbGVlcGVycyAtIDEsICZzZW0tPmNvdW50KSkgewotCQkJc2VtLT5zbGVlcGVycyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlzZW0tPnNsZWVwZXJzID0gMTsJLyogdXMgLSBzZWUgLTEgYWJvdmUgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQotCQlzY2hlZHVsZSgpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXQubG9jaywgZmxhZ3MpOwotCQl0c2stPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCX0KLQlyZW1vdmVfd2FpdF9xdWV1ZV9sb2NrZWQoJnNlbS0+d2FpdCwgJndhaXQpOwotCXdha2VfdXBfbG9ja2VkKCZzZW0tPndhaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0KLQl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qCi0gKiBUcnlsb2NrIGZhaWxlZCAtIG1ha2Ugc3VyZSB3ZSBjb3JyZWN0IGZvcgotICogaGF2aW5nIGRlY3JlbWVudGVkIHRoZSBjb3VudC4KLSAqCi0gKiBXZSBjb3VsZCBoYXZlIGRvbmUgdGhlIHRyeWxvY2sgd2l0aCBhCi0gKiBzaW5nbGUgImNtcHhjaGciIHdpdGhvdXQgZmFpbHVyZSBjYXNlcywKLSAqIGJ1dCB0aGVuIGl0IHdvdWxkbid0IHdvcmsgb24gYSAzODYuCi0gKi8KLWludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHNsZWVwZXJzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0LmxvY2ssIGZsYWdzKTsKLQlzbGVlcGVycyA9IHNlbS0+c2xlZXBlcnMgKyAxOwotCXNlbS0+c2xlZXBlcnMgPSAwOwotCi0JLyoKLQkgKiBBZGQgImV2ZXJ5Ym9keSBlbHNlIiBhbmQgdXMgaW50byBpdC4gVGhleSBhcmVuJ3QKLQkgKiBwbGF5aW5nLCBiZWNhdXNlIHdlIG93biB0aGUgc3BpbmxvY2sgaW4gdGhlCi0JICogd2FpdF9xdWV1ZV9oZWFkLgotCSAqLwotCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZShzbGVlcGVycywgJnNlbS0+Y291bnQpKSB7Ci0JCXdha2VfdXBfbG9ja2VkKCZzZW0tPndhaXQpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9saWIvc3dpb3RsYi5jIGIvbGliL3N3aW90bGIuYwppbmRleCA0YmI1YTExLi4wMjU5MjI4IDEwMDY0NAotLS0gYS9saWIvc3dpb3RsYi5jCisrKyBiL2xpYi9zd2lvdGxiLmMKQEAgLTMxMCw3ICszMTAsOSBAQAogCXN0YXJ0X2RtYV9hZGRyID0gdmlydF90b19idXMoaW9fdGxiX3N0YXJ0KSAmIG1hc2s7CiAKIAlvZmZzZXRfc2xvdHMgPSBBTElHTihzdGFydF9kbWFfYWRkciwgMSA8PCBJT19UTEJfU0hJRlQpID4+IElPX1RMQl9TSElGVDsKLQltYXhfc2xvdHMgPSBBTElHTihtYXNrICsgMSwgMSA8PCBJT19UTEJfU0hJRlQpID4+IElPX1RMQl9TSElGVDsKKwltYXhfc2xvdHMgPSBtYXNrICsgMQorCQkgICAgPyBBTElHTihtYXNrICsgMSwgMSA8PCBJT19UTEJfU0hJRlQpID4+IElPX1RMQl9TSElGVAorCQkgICAgOiAxVUwgPDwgKEJJVFNfUEVSX0xPTkcgLSBJT19UTEJfU0hJRlQpOwogCiAJLyoKIAkgKiBGb3IgbWFwcGluZ3MgZ3JlYXRlciB0aGFuIGEgcGFnZSwgd2UgbGltaXQgdGhlIHN0cmlkZSAoYW5kCkBAIC0zMzMsMTYgKzMzNSwxOCBAQAogCQlpbmRleCA9IEFMSUdOKGlvX3RsYl9pbmRleCwgc3RyaWRlKTsKIAkJaWYgKGluZGV4ID49IGlvX3RsYl9uc2xhYnMpCiAJCQlpbmRleCA9IDA7Ci0KLQkJd2hpbGUgKGlzX3NwYW5fYm91bmRhcnkoaW5kZXgsIG5zbG90cywgb2Zmc2V0X3Nsb3RzLAotCQkJCQltYXhfc2xvdHMpKSB7Ci0JCQlpbmRleCArPSBzdHJpZGU7Ci0JCQlpZiAoaW5kZXggPj0gaW9fdGxiX25zbGFicykKLQkJCQlpbmRleCA9IDA7Ci0JCX0KIAkJd3JhcCA9IGluZGV4OwogCiAJCWRvIHsKKwkJCXdoaWxlIChpc19zcGFuX2JvdW5kYXJ5KGluZGV4LCBuc2xvdHMsIG9mZnNldF9zbG90cywKKwkJCQkJCW1heF9zbG90cykpIHsKKwkJCQlpbmRleCArPSBzdHJpZGU7CisJCQkJaWYgKGluZGV4ID49IGlvX3RsYl9uc2xhYnMpCisJCQkJCWluZGV4ID0gMDsKKwkJCQlpZiAoaW5kZXggPT0gd3JhcCkKKwkJCQkJZ290byBub3RfZm91bmQ7CisJCQl9CisKIAkJCS8qCiAJCQkgKiBJZiB3ZSBmaW5kIGEgc2xvdCB0aGF0IGluZGljYXRlcyB3ZSBoYXZlICduc2xvdHMnCiAJCQkgKiBudW1iZXIgb2YgY29udGlndW91cyBidWZmZXJzLCB3ZSBhbGxvY2F0ZSB0aGUKQEAgLTM2NywxNCArMzcxLDEyIEBACiAKIAkJCQlnb3RvIGZvdW5kOwogCQkJfQotCQkJZG8gewotCQkJCWluZGV4ICs9IHN0cmlkZTsKLQkJCQlpZiAoaW5kZXggPj0gaW9fdGxiX25zbGFicykKLQkJCQkJaW5kZXggPSAwOwotCQkJfSB3aGlsZSAoaXNfc3Bhbl9ib3VuZGFyeShpbmRleCwgbnNsb3RzLCBvZmZzZXRfc2xvdHMsCi0JCQkJCQkgIG1heF9zbG90cykpOworCQkJaW5kZXggKz0gc3RyaWRlOworCQkJaWYgKGluZGV4ID49IGlvX3RsYl9uc2xhYnMpCisJCQkJaW5kZXggPSAwOwogCQl9IHdoaWxlIChpbmRleCAhPSB3cmFwKTsKIAorICBub3RfZm91bmQ6CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3RsYl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggZmQ5ODdiMS4uNjAyMTc1NyAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWludCByZXQ7CQkJCQkJCVwKIAlpZiAoKmNwID09ICctJykgewkJCQkJCVwKIAkJcmV0ID0gc3RyaWN0X3N0cnRvdSMjdHlwZShjcCsxLCBiYXNlLCByZXMpOwkJXAotCQlpZiAocmV0ICE9IDApCQkJCQkJXAorCQlpZiAoIXJldCkJCQkJCQlcCiAJCQkqcmVzID0gLSgqcmVzKTsJCQkJCVwKIAl9IGVsc2UJCQkJCQkJCVwKIAkJcmV0ID0gc3RyaWN0X3N0cnRvdSMjdHlwZShjcCwgYmFzZSwgcmVzKTsJCVwKZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggOWYxMTdiYS4uMThjMTQzYiAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiAJCQkgICB2bWFsbG9jLm8KIAogb2JqLXkJCQk6PSBib290bWVtLm8gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcCi0JCQkgICBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2subyBwZGZsdXNoLm8gXAorCQkJICAgbWFjY2Vzcy5vIHBhZ2VfYWxsb2MubyBwYWdlLXdyaXRlYmFjay5vIHBkZmx1c2gubyBcCiAJCQkgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBcCiAJCQkgICBwcmlvX3RyZWUubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcCiAJCQkgICBwYWdlX2lzb2xhdGlvbi5vICQobW11LXkpCkBAIC0zMiw1ICszMiw1IEBACiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm8KIG9iai0kKENPTkZJR19TTVApICs9IGFsbG9jcGVyY3B1Lm8KIG9iai0kKENPTkZJR19RVUlDS0xJU1QpICs9IHF1aWNrbGlzdC5vCi1vYmotJChDT05GSUdfQ0dST1VQX01FTV9DT05UKSArPSBtZW1jb250cm9sLm8KK29iai0kKENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSKSArPSBtZW1jb250cm9sLm8KIApkaWZmIC0tZ2l0IGEvbW0vYWxsb2NwZXJjcHUuYyBiL21tL2FsbG9jcGVyY3B1LmMKaW5kZXggN2U1ODMyMi4uZjQwMjZiYSAxMDA2NDQKLS0tIGEvbW0vYWxsb2NwZXJjcHUuYworKysgYi9tbS9hbGxvY3BlcmNwdS5jCkBAIC02LDYgKzYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCisjaWZuZGVmIGNhY2hlX2xpbmVfc2l6ZQorI2RlZmluZSBjYWNoZV9saW5lX3NpemUoKQlMMV9DQUNIRV9CWVRFUworI2VuZGlmCisKIC8qKgogICogcGVyY3B1X2RlcG9wdWxhdGUgLSBkZXBvcHVsYXRlIHBlci1jcHUgZGF0YSBmb3IgZ2l2ZW4gY3B1CiAgKiBAX19wZGF0YTogcGVyLWNwdSBkYXRhIHRvIGRlcG9wdWxhdGUKQEAgLTUyLDYgKzU2LDExIEBACiAJc3RydWN0IHBlcmNwdV9kYXRhICpwZGF0YSA9IF9fcGVyY3B1X2Rpc2d1aXNlKF9fcGRhdGEpOwogCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKIAorCS8qCisJICogV2Ugc2hvdWxkIG1ha2Ugc3VyZSBlYWNoIENQVSBnZXRzIHByaXZhdGUgbWVtb3J5LgorCSAqLworCXNpemUgPSByb3VuZHVwKHNpemUsIGNhY2hlX2xpbmVfc2l6ZSgpKTsKKwogCUJVR19PTihwZGF0YS0+cHRyc1tjcHVdKTsKIAlpZiAobm9kZV9vbmxpbmUobm9kZSkpCiAJCXBkYXRhLT5wdHJzW2NwdV0gPSBrbWFsbG9jX25vZGUoc2l6ZSwgZ2ZwfF9fR0ZQX1pFUk8sIG5vZGUpOwpAQCAtNzMsOSArODIsMTAgQEAKIGludCBfX3BlcmNwdV9wb3B1bGF0ZV9tYXNrKHZvaWQgKl9fcGRhdGEsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsCiAJCQkgICBjcHVtYXNrX3QgKm1hc2spCiB7Ci0JY3B1bWFza190IHBvcHVsYXRlZCA9IENQVV9NQVNLX05PTkU7CisJY3B1bWFza190IHBvcHVsYXRlZDsKIAlpbnQgY3B1OwogCisJY3B1c19jbGVhcihwb3B1bGF0ZWQpOwogCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgKm1hc2spCiAJCWlmICh1bmxpa2VseSghcGVyY3B1X3BvcHVsYXRlKF9fcGRhdGEsIHNpemUsIGdmcCwgY3B1KSkpIHsKIAkJCV9fcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCAmcG9wdWxhdGVkKTsKQEAgLTk4LDcgKzEwOCwxMSBAQAogICovCiB2b2lkICpfX3BlcmNwdV9hbGxvY19tYXNrKHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGNwdW1hc2tfdCAqbWFzaykKIHsKLQl2b2lkICpwZGF0YSA9IGt6YWxsb2MobnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICopLCBnZnApOworCS8qCisJICogV2UgYWxsb2NhdGUgd2hvbGUgY2FjaGUgbGluZXMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZworCSAqLworCXNpemVfdCBzeiA9IHJvdW5kdXAobnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICopLCBjYWNoZV9saW5lX3NpemUoKSk7CisJdm9pZCAqcGRhdGEgPSBremFsbG9jKHN6LCBnZnApOwogCXZvaWQgKl9fcGRhdGEgPSBfX3BlcmNwdV9kaXNndWlzZShwZGF0YSk7CiAKIAlpZiAodW5saWtlbHkoIXBkYXRhKSkKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCBmNmZmNDMzLi4yY2NlYTcwIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAlCVUdfT04oIXNpemUpOwogCUJVR19PTihQRk5fRE9XTihhZGRyKSA+PSBiZGF0YS0+bm9kZV9sb3dfcGZuKTsKIAlCVUdfT04oUEZOX1VQKGFkZHIgKyBzaXplKSA+IGJkYXRhLT5ub2RlX2xvd19wZm4pOworCUJVR19PTihhZGRyIDwgYmRhdGEtPm5vZGVfYm9vdF9zdGFydCk7CiAKIAlzaWR4ID0gUEZOX0RPV04oYWRkciAtIGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQpOwogCWVpZHggPSBQRk5fVVAoYWRkciArIHNpemUgLSBiZGF0YS0+bm9kZV9ib290X3N0YXJ0KTsKQEAgLTE1NiwyMSArMTU3LDMxIEBACiAJdW5zaWduZWQgbG9uZyBzaWR4LCBlaWR4OwogCXVuc2lnbmVkIGxvbmcgaTsKIAorCUJVR19PTighc2l6ZSk7CisKKwkvKiBvdXQgcmFuZ2UgKi8KKwlpZiAoYWRkciArIHNpemUgPCBiZGF0YS0+bm9kZV9ib290X3N0YXJ0IHx8CisJCVBGTl9ET1dOKGFkZHIpID4gYmRhdGEtPm5vZGVfbG93X3BmbikKKwkJcmV0dXJuOwogCS8qCiAJICogcm91bmQgZG93biBlbmQgb2YgdXNhYmxlIG1lbSwgcGFydGlhbGx5IGZyZWUgcGFnZXMgYXJlCiAJICogY29uc2lkZXJlZCByZXNlcnZlZC4KIAkgKi8KLQlCVUdfT04oIXNpemUpOwotCUJVR19PTihQRk5fRE9XTihhZGRyICsgc2l6ZSkgPiBiZGF0YS0+bm9kZV9sb3dfcGZuKTsKIAotCWlmIChhZGRyIDwgYmRhdGEtPmxhc3Rfc3VjY2VzcykKKwlpZiAoYWRkciA+PSBiZGF0YS0+bm9kZV9ib290X3N0YXJ0ICYmIGFkZHIgPCBiZGF0YS0+bGFzdF9zdWNjZXNzKQogCQliZGF0YS0+bGFzdF9zdWNjZXNzID0gYWRkcjsKIAogCS8qCi0JICogUm91bmQgdXAgdGhlIGJlZ2lubmluZyBvZiB0aGUgYWRkcmVzcy4KKwkgKiBSb3VuZCB1cCB0byBpbmRleCB0byB0aGUgcmFuZ2UuCiAJICovCi0Jc2lkeCA9IFBGTl9VUChhZGRyKSAtIFBGTl9ET1dOKGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQpOworCWlmIChQRk5fVVAoYWRkcikgPiBQRk5fRE9XTihiZGF0YS0+bm9kZV9ib290X3N0YXJ0KSkKKwkJc2lkeCA9IFBGTl9VUChhZGRyKSAtIFBGTl9ET1dOKGJkYXRhLT5ub2RlX2Jvb3Rfc3RhcnQpOworCWVsc2UKKwkJc2lkeCA9IDA7CisKIAllaWR4ID0gUEZOX0RPV04oYWRkciArIHNpemUgLSBiZGF0YS0+bm9kZV9ib290X3N0YXJ0KTsKKwlpZiAoZWlkeCA+IGJkYXRhLT5ub2RlX2xvd19wZm4gLSBQRk5fRE9XTihiZGF0YS0+bm9kZV9ib290X3N0YXJ0KSkKKwkJZWlkeCA9IGJkYXRhLT5ub2RlX2xvd19wZm4gLSBQRk5fRE9XTihiZGF0YS0+bm9kZV9ib290X3N0YXJ0KTsKIAogCWZvciAoaSA9IHNpZHg7IGkgPCBlaWR4OyBpKyspIHsKIAkJaWYgKHVubGlrZWx5KCF0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgYmRhdGEtPm5vZGVfYm9vdG1lbV9tYXApKSkKQEAgLTQyMSw3ICs0MzIsOSBAQAogCiB2b2lkIF9faW5pdCBmcmVlX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JZnJlZV9ib290bWVtX2NvcmUoTk9ERV9EQVRBKDApLT5iZGF0YSwgYWRkciwgc2l6ZSk7CisJYm9vdG1lbV9kYXRhX3QgKmJkYXRhOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYmRhdGEsICZiZGF0YV9saXN0LCBsaXN0KQorCQlmcmVlX2Jvb3RtZW1fY29yZShiZGF0YSwgYWRkciwgc2l6ZSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfYWxsX2Jvb3RtZW0odm9pZCkKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA1Yzc0YjY4Li4wN2U5ZDkyIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CkBAIC0zNDQsNyArMzQzLDcgQEAKIEVYUE9SVF9TWU1CT0woc3luY19wYWdlX3JhbmdlKTsKIAogLyoqCi0gKiBzeW5jX3BhZ2VfcmFuZ2Vfbm9sb2NrCisgKiBzeW5jX3BhZ2VfcmFuZ2Vfbm9sb2NrIC0gd3JpdGUgJiB3YWl0IG9uIGFsbCBwYWdlcyBpbiB0aGUgcGFzc2VkIHJhbmdlIHdpdGhvdXQgbG9ja2luZwogICogQGlub2RlOgl0YXJnZXQgaW5vZGUKICAqIEBtYXBwaW5nOgl0YXJnZXQgYWRkcmVzc19zcGFjZQogICogQHBvczoJYmVnaW5uaW5nIG9mZnNldCBpbiBwYWdlcyB0byB3cml0ZQpAQCAtNjEyLDcgKzYxMSwxMCBAQAogCQkJCQlzeW5jX3BhZ2Vfa2lsbGFibGUsIFRBU0tfS0lMTEFCTEUpOwogfQogCi0vKgorLyoqCisgKiBfX2xvY2tfcGFnZV9ub3N5bmMgLSBnZXQgYSBsb2NrIG9uIHRoZSBwYWdlLCB3aXRob3V0IGNhbGxpbmcgc3luY19wYWdlKCkKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBsb2NrCisgKgogICogVmFyaWFudCBvZiBsb2NrX3BhZ2UgdGhhdCBkb2VzIG5vdCByZXF1aXJlIHRoZSBjYWxsZXIgdG8gaG9sZCBhIHJlZmVyZW5jZQogICogb24gdGhlIHBhZ2UncyBtYXBwaW5nLgogICovCkBAIC0xNTM5LDkgKzE1NDEsMjAgQEAKIAlyZXR1cm4gcGFnZTsKIH0KIAotLyoKKy8qKgorICogcmVhZF9jYWNoZV9wYWdlX2FzeW5jIC0gcmVhZCBpbnRvIHBhZ2UgY2FjaGUsIGZpbGwgaXQgaWYgbmVlZGVkCisgKiBAbWFwcGluZzoJdGhlIHBhZ2UncyBhZGRyZXNzX3NwYWNlCisgKiBAaW5kZXg6CXRoZSBwYWdlIGluZGV4CisgKiBAZmlsbGVyOglmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSByZWFkCisgKiBAZGF0YToJZGVzdGluYXRpb24gZm9yIHJlYWQgZGF0YQorICoKICAqIFNhbWUgYXMgcmVhZF9jYWNoZV9wYWdlLCBidXQgZG9uJ3Qgd2FpdCBmb3IgcGFnZSB0byBiZWNvbWUgdW5sb2NrZWQKICAqIGFmdGVyIHN1Ym1pdHRpbmcgaXQgdG8gdGhlIGZpbGxlci4KKyAqCisgKiBSZWFkIGludG8gdGhlIHBhZ2UgY2FjaGUuIElmIGEgcGFnZSBhbHJlYWR5IGV4aXN0cywgYW5kIFBhZ2VVcHRvZGF0ZSgpIGlzCisgKiBub3Qgc2V0LCB0cnkgdG8gZmlsbCB0aGUgcGFnZSBidXQgZG9uJ3Qgd2FpdCBmb3IgaXQgdG8gYmVjb21lIHVubG9ja2VkLgorICoKKyAqIElmIHRoZSBwYWdlIGRvZXMgbm90IGdldCBicm91Z2h0IHVwdG9kYXRlLCByZXR1cm4gLUVJTy4KICAqLwogc3RydWN0IHBhZ2UgKnJlYWRfY2FjaGVfcGFnZV9hc3luYyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlwZ29mZl90IGluZGV4LApAQCAtMTc0MywyMSArMTc1NiwyNyBAQAogfQogRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl9jb3B5X2Zyb21fdXNlcik7CiAKLXN0YXRpYyB2b2lkIF9faW92X2l0ZXJfYWR2YW5jZV9pb3Yoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgYnl0ZXMpCit2b2lkIGlvdl9pdGVyX2FkdmFuY2Uoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgYnl0ZXMpCiB7CisJQlVHX09OKGktPmNvdW50IDwgYnl0ZXMpOworCiAJaWYgKGxpa2VseShpLT5ucl9zZWdzID09IDEpKSB7CiAJCWktPmlvdl9vZmZzZXQgKz0gYnl0ZXM7CisJCWktPmNvdW50IC09IGJ5dGVzOwogCX0gZWxzZSB7CiAJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92ID0gaS0+aW92OwogCQlzaXplX3QgYmFzZSA9IGktPmlvdl9vZmZzZXQ7CiAKIAkJLyoKIAkJICogVGhlICFpb3YtPmlvdl9sZW4gY2hlY2sgZW5zdXJlcyB3ZSBza2lwIG92ZXIgdW5saWtlbHkKLQkJICogemVyby1sZW5ndGggc2VnbWVudHMuCisJCSAqIHplcm8tbGVuZ3RoIHNlZ21lbnRzICh3aXRob3V0IG92ZXJydW5pbmcgdGhlIGlvdmVjKS4KIAkJICovCi0JCXdoaWxlIChieXRlcyB8fCAhaW92LT5pb3ZfbGVuKSB7Ci0JCQlpbnQgY29weSA9IG1pbihieXRlcywgaW92LT5pb3ZfbGVuIC0gYmFzZSk7CisJCXdoaWxlIChieXRlcyB8fCB1bmxpa2VseSghaW92LT5pb3ZfbGVuICYmIGktPmNvdW50KSkgeworCQkJaW50IGNvcHk7CiAKKwkJCWNvcHkgPSBtaW4oYnl0ZXMsIGlvdi0+aW92X2xlbiAtIGJhc2UpOworCQkJQlVHX09OKCFpLT5jb3VudCB8fCBpLT5jb3VudCA8IGNvcHkpOworCQkJaS0+Y291bnQgLT0gY29weTsKIAkJCWJ5dGVzIC09IGNvcHk7CiAJCQliYXNlICs9IGNvcHk7CiAJCQlpZiAoaW92LT5pb3ZfbGVuID09IGJhc2UpIHsKQEAgLTE3NjksMTQgKzE3ODgsNiBAQAogCQlpLT5pb3Zfb2Zmc2V0ID0gYmFzZTsKIAl9CiB9Ci0KLXZvaWQgaW92X2l0ZXJfYWR2YW5jZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBieXRlcykKLXsKLQlCVUdfT04oaS0+Y291bnQgPCBieXRlcyk7Ci0KLQlfX2lvdl9pdGVyX2FkdmFuY2VfaW92KGksIGJ5dGVzKTsKLQlpLT5jb3VudCAtPSBieXRlczsKLX0KIEVYUE9SVF9TWU1CT0woaW92X2l0ZXJfYWR2YW5jZSk7CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9mcmVtYXAuYyBiL21tL2ZyZW1hcC5jCmluZGV4IDY5YTM3YzIuLjA3YTljODIgMTAwNjQ0Ci0tLSBhL21tL2ZyZW1hcC5jCisrKyBiL21tL2ZyZW1hcC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKICAqIG1tYXAoKS9tcmVtYXAoKSBpdCBkb2VzIG5vdCBjcmVhdGUgYW55IG5ldyB2bWFzLiBUaGUgbmV3IG1hcHBpbmdzIGFyZQogICogYWxzbyBzYWZlIGFjcm9zcyBzd2Fwb3V0LgogICoKLSAqIE5PVEU6IHRoZSAncHJvdCcgcGFyYW1ldGVyIHJpZ2h0IG5vdyBpcyBpZ25vcmVkIChidXQgbXVzdCBiZSB6ZXJvKSwKKyAqIE5PVEU6IHRoZSBAcHJvdCBwYXJhbWV0ZXIgcmlnaHQgbm93IGlzIGlnbm9yZWQgKGJ1dCBtdXN0IGJlIHplcm8pLAogICogYW5kIHRoZSB2bWEncyBkZWZhdWx0IHByb3RlY3Rpb24gaXMgdXNlZC4gQXJiaXRyYXJ5IHByb3RlY3Rpb25zCiAgKiBtaWdodCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlLgogICovCmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggMzVkNDc3My4uN2RhNGE3YiAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtMTA0LDggKzEwNCw5IEBACiAJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShQS01BUF9BRERSKDApLCBQS01BUF9BRERSKExBU1RfUEtNQVApKTsKIH0KIAotLyogRmx1c2ggYWxsIHVudXNlZCBrbWFwIG1hcHBpbmdzIGluIG9yZGVyIHRvIHJlbW92ZSBzdHJheQotICAgbWFwcGluZ3MuICovCisvKioKKyAqIGttYXBfZmx1c2hfdW51c2VkIC0gZmx1c2ggYWxsIHVudXNlZCBrbWFwIG1hcHBpbmdzIGluIG9yZGVyIHRvIHJlbW92ZSBzdHJheSBtYXBwaW5ncworICovCiB2b2lkIGttYXBfZmx1c2hfdW51c2VkKHZvaWQpCiB7CiAJc3Bpbl9sb2NrKCZrbWFwX2xvY2spOwpAQCAtMTYzLDYgKzE2NCwxNCBAQAogCXJldHVybiB2YWRkcjsKIH0KIAorLyoqCisgKiBrbWFwX2hpZ2ggLSBtYXAgYSBoaWdobWVtIHBhZ2UgaW50byBtZW1vcnkKKyAqIEBwYWdlOiAmc3RydWN0IHBhZ2UgdG8gbWFwCisgKgorICogUmV0dXJucyB0aGUgcGFnZSdzIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MuCisgKgorICogV2UgY2Fubm90IGNhbGwgdGhpcyBmcm9tIGludGVycnVwdHMsIGFzIGl0IG1heSBibG9jay4KKyAqLwogdm9pZCAqa21hcF9oaWdoKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CkBAIC0xNzAsOCArMTc5LDYgQEAKIAkvKgogCSAqIEZvciBoaWdobWVtIHBhZ2VzLCB3ZSBjYW4ndCB0cnVzdCAidmlydHVhbCIgdW50aWwKIAkgKiBhZnRlciB3ZSBoYXZlIHRoZSBsb2NrLgotCSAqCi0JICogV2UgY2Fubm90IGNhbGwgdGhpcyBmcm9tIGludGVycnVwdHMsIGFzIGl0IG1heSBibG9jawogCSAqLwogCXNwaW5fbG9jaygma21hcF9sb2NrKTsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKQEAgLTE4NSw2ICsxOTIsMTAgQEAKIAogRVhQT1JUX1NZTUJPTChrbWFwX2hpZ2gpOwogCisvKioKKyAqIGt1bm1hcF9oaWdoIC0gbWFwIGEgaGlnaG1lbSBwYWdlIGludG8gbWVtb3J5CisgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHVubWFwCisgKi8KIHZvaWQga3VubWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWRkcjsKQEAgLTI1OSw2ICsyNzAsMTIgQEAKIAlyZXR1cm4gJnBhZ2VfYWRkcmVzc19odGFibGVbaGFzaF9wdHIocGFnZSwgUEFfSEFTSF9PUkRFUildOwogfQogCisvKioKKyAqIHBhZ2VfYWRkcmVzcyAtIGdldCB0aGUgbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyBvZiBhIHBhZ2UKKyAqIEBwYWdlOiAmc3RydWN0IHBhZ2UgdG8gZ2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YKKyAqCisgKiBSZXR1cm5zIHRoZSBwYWdlJ3MgdmlydHVhbCBhZGRyZXNzLgorICovCiB2b2lkICpwYWdlX2FkZHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI4OCw2ICszMDUsMTEgQEAKIAogRVhQT1JUX1NZTUJPTChwYWdlX2FkZHJlc3MpOwogCisvKioKKyAqIHNldF9wYWdlX2FkZHJlc3MgLSBzZXQgYSBwYWdlJ3MgdmlydHVhbCBhZGRyZXNzCisgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHNldAorICogQHZpcnR1YWw6IHZpcnR1YWwgYWRkcmVzcyB0byB1c2UKKyAqLwogdm9pZCBzZXRfcGFnZV9hZGRyZXNzKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICp2aXJ0dWFsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggY2IxYjNhNy4uNTFjOWUyYyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtNzEsNyArNzEsMjUgQEAKIAlmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKys7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGVxdWV1ZV9odWdlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCitzdGF0aWMgc3RydWN0IHBhZ2UgKmRlcXVldWVfaHVnZV9wYWdlKHZvaWQpCit7CisJaW50IG5pZDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisKKwlmb3IgKG5pZCA9IDA7IG5pZCA8IE1BWF9OVU1OT0RFUzsgKytuaWQpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZodWdlcGFnZV9mcmVlbGlzdHNbbmlkXSkpIHsKKwkJCXBhZ2UgPSBsaXN0X2VudHJ5KGh1Z2VwYWdlX2ZyZWVsaXN0c1tuaWRdLm5leHQsCisJCQkJCSAgc3RydWN0IHBhZ2UsIGxydSk7CisJCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKwkJCWZyZWVfaHVnZV9wYWdlcy0tOworCQkJZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXS0tOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZGVxdWV1ZV9odWdlX3BhZ2Vfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlpbnQgbmlkOwpAQCAtMTIwLDYgKzEzOCw3IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKIAltYXBwaW5nID0gKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopIHBhZ2VfcHJpdmF0ZShwYWdlKTsKKwlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOwogCUJVR19PTihwYWdlX2NvdW50KHBhZ2UpKTsKIAlJTklUX0xJU1RfSEVBRCgmcGFnZS0+bHJ1KTsKIApAQCAtMTM0LDcgKzE1Myw2IEBACiAJc3Bpbl91bmxvY2soJmh1Z2V0bGJfbG9jayk7CiAJaWYgKG1hcHBpbmcpCiAJCWh1Z2V0bGJfcHV0X3F1b3RhKG1hcHBpbmcsIDEpOwotCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CiB9CiAKIC8qCkBAIC0yNjgsNiArMjg2LDEyIEBACiAKIAlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7CiAJaWYgKHBhZ2UpIHsKKwkJLyoKKwkJICogVGhpcyBwYWdlIGlzIG5vdyBtYW5hZ2VkIGJ5IHRoZSBodWdldGxiIGFsbG9jYXRvciBhbmQgaGFzCisJCSAqIG5vIHVzZXJzIC0tIGRyb3AgdGhlIGJ1ZGR5IGFsbG9jYXRvcidzIHJlZmVyZW5jZS4KKwkJICovCisJCXB1dF9wYWdlX3Rlc3R6ZXJvKHBhZ2UpOworCQlWTV9CVUdfT04ocGFnZV9jb3VudChwYWdlKSk7CiAJCW5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwogCQlzZXRfY29tcG91bmRfcGFnZV9kdG9yKHBhZ2UsIGZyZWVfaHVnZV9wYWdlKTsKIAkJLyoKQEAgLTI5Niw4ICszMjAsMTAgQEAKIAlpbnQgbmVlZGVkLCBhbGxvY2F0ZWQ7CiAKIAluZWVkZWQgPSAocmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC0gZnJlZV9odWdlX3BhZ2VzOwotCWlmIChuZWVkZWQgPD0gMCkKKwlpZiAobmVlZGVkIDw9IDApIHsKKwkJcmVzdl9odWdlX3BhZ2VzICs9IGRlbHRhOwogCQlyZXR1cm4gMDsKKwl9CiAKIAlhbGxvY2F0ZWQgPSAwOwogCUlOSVRfTElTVF9IRUFEKCZzdXJwbHVzX2xpc3QpOwpAQCAtMzM1LDkgKzM2MSwxMiBAQAogCSAqIFRoZSBzdXJwbHVzX2xpc3Qgbm93IGNvbnRhaW5zIF9hdF9sZWFzdF8gdGhlIG51bWJlciBvZiBleHRyYSBwYWdlcwogCSAqIG5lZWRlZCB0byBhY2NvbW9kYXRlIHRoZSByZXNlcnZhdGlvbi4gIEFkZCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyCiAJICogb2YgcGFnZXMgdG8gdGhlIGh1Z2V0bGIgcG9vbCBhbmQgZnJlZSB0aGUgZXh0cmFzIGJhY2sgdG8gdGhlIGJ1ZGR5Ci0JICogYWxsb2NhdG9yLgorCSAqIGFsbG9jYXRvci4gIENvbW1pdCB0aGUgZW50aXJlIHJlc2VydmF0aW9uIGhlcmUgdG8gcHJldmVudCBhbm90aGVyCisJICogcHJvY2VzcyBmcm9tIHN0ZWFsaW5nIHRoZSBwYWdlcyBhcyB0aGV5IGFyZSBhZGRlZCB0byB0aGUgcG9vbCBidXQKKwkgKiBiZWZvcmUgdGhleSBhcmUgcmVzZXJ2ZWQuCiAJICovCiAJbmVlZGVkICs9IGFsbG9jYXRlZDsKKwlyZXN2X2h1Z2VfcGFnZXMgKz0gZGVsdGE7CiAJcmV0ID0gMDsKIGZyZWU6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHRtcCwgJnN1cnBsdXNfbGlzdCwgbHJ1KSB7CkBAIC0zNDYsMTMgKzM3NSwxNCBAQAogCQkJZW5xdWV1ZV9odWdlX3BhZ2UocGFnZSk7CiAJCWVsc2UgewogCQkJLyoKLQkJCSAqIERlY3JlbWVudCB0aGUgcmVmY291bnQgYW5kIGZyZWUgdGhlIHBhZ2UgdXNpbmcgaXRzCi0JCQkgKiBkZXN0cnVjdG9yLiAgVGhpcyBtdXN0IGJlIGRvbmUgd2l0aCBodWdldGxiX2xvY2sKKwkJCSAqIFRoZSBwYWdlIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiB6ZXJvIGFscmVhZHksIHNvCisJCQkgKiBjYWxsIGZyZWVfaHVnZV9wYWdlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcKKwkJCSAqIHB1dF9wYWdlLiAgVGhpcyBtdXN0IGJlIGRvbmUgd2l0aCBodWdldGxiX2xvY2sKIAkJCSAqIHVubG9ja2VkIHdoaWNoIGlzIHNhZmUgYmVjYXVzZSBmcmVlX2h1Z2VfcGFnZSB0YWtlcwogCQkJICogaHVnZXRsYl9sb2NrIGJlZm9yZSBkZWNpZGluZyBob3cgdG8gZnJlZSB0aGUgcGFnZS4KIAkJCSAqLwogCQkJc3Bpbl91bmxvY2soJmh1Z2V0bGJfbG9jayk7Ci0JCQlwdXRfcGFnZShwYWdlKTsKKwkJCWZyZWVfaHVnZV9wYWdlKHBhZ2UpOwogCQkJc3Bpbl9sb2NrKCZodWdldGxiX2xvY2spOwogCQl9CiAJfQpAQCAtMzcxLDkgKzQwMSwyMCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAKKwkvKgorCSAqIFdlIHdhbnQgdG8gcmVsZWFzZSBhcyBtYW55IHN1cnBsdXMgcGFnZXMgYXMgcG9zc2libGUsIHNwcmVhZAorCSAqIGV2ZW5seSBhY3Jvc3MgYWxsIG5vZGVzLiBJdGVyYXRlIGFjcm9zcyBhbGwgbm9kZXMgdW50aWwgd2UKKwkgKiBjYW4gbm8gbG9uZ2VyIGZyZWUgdW5yZXNlcnZlZCBzdXJwbHVzIHBhZ2VzLiBUaGlzIG9jY3VycyB3aGVuCisJICogdGhlIG5vZGVzIHdpdGggc3VycGx1cyBwYWdlcyBoYXZlIG5vIGZyZWUgcGFnZXMuCisJICovCisJdW5zaWduZWQgbG9uZyByZW1haW5pbmdfaXRlcmF0aW9ucyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKKworCS8qIFVuY29tbWl0IHRoZSByZXNlcnZhdGlvbiAqLworCXJlc3ZfaHVnZV9wYWdlcyAtPSB1bnVzZWRfcmVzdl9wYWdlczsKKwogCW5yX3BhZ2VzID0gbWluKHVudXNlZF9yZXN2X3BhZ2VzLCBzdXJwbHVzX2h1Z2VfcGFnZXMpOwogCi0Jd2hpbGUgKG5yX3BhZ2VzKSB7CisJd2hpbGUgKHJlbWFpbmluZ19pdGVyYXRpb25zLS0gJiYgbnJfcGFnZXMpIHsKIAkJbmlkID0gbmV4dF9ub2RlKG5pZCwgbm9kZV9vbmxpbmVfbWFwKTsKIAkJaWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMpCiAJCQluaWQgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CkBAIC0zOTEsNiArNDMyLDcgQEAKIAkJCXN1cnBsdXNfaHVnZV9wYWdlcy0tOwogCQkJc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmlkXS0tOwogCQkJbnJfcGFnZXMtLTsKKwkJCXJlbWFpbmluZ19pdGVyYXRpb25zID0gbnVtX29ubGluZV9ub2RlcygpOwogCQl9CiAJfQogfQpAQCAtNDAyLDcgKzQ0NCw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7Ci0JcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlKHZtYSwgYWRkcik7CisJcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlX3ZtYSh2bWEsIGFkZHIpOwogCXNwaW5fdW5sb2NrKCZodWdldGxiX2xvY2spOwogCXJldHVybiBwYWdlID8gcGFnZSA6IEVSUl9QVFIoLVZNX0ZBVUxUX09PTSk7CiB9CkBAIC00MTcsNyArNDU5LDcgQEAKIAogCXNwaW5fbG9jaygmaHVnZXRsYl9sb2NrKTsKIAlpZiAoZnJlZV9odWdlX3BhZ2VzID4gcmVzdl9odWdlX3BhZ2VzKQotCQlwYWdlID0gZGVxdWV1ZV9odWdlX3BhZ2Uodm1hLCBhZGRyKTsKKwkJcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlX3ZtYSh2bWEsIGFkZHIpOwogCXNwaW5fdW5sb2NrKCZodWdldGxiX2xvY2spOwogCWlmICghcGFnZSkgewogCQlwYWdlID0gYWxsb2NfYnVkZHlfaHVnZV9wYWdlKHZtYSwgYWRkcik7CkBAIC01NzAsNyArNjEyLDcgQEAKIAltaW5fY291bnQgPSBtYXgoY291bnQsIG1pbl9jb3VudCk7CiAJdHJ5X3RvX2ZyZWVfbG93KG1pbl9jb3VudCk7CiAJd2hpbGUgKG1pbl9jb3VudCA8IHBlcnNpc3RlbnRfaHVnZV9wYWdlcykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlKE5VTEwsIDApOworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlKCk7CiAJCWlmICghcGFnZSkKIAkJCWJyZWFrOwogCQl1cGRhdGVfYW5kX2ZyZWVfcGFnZShwYWdlKTsKQEAgLTYzOCw5ICs2ODAsMTEgQEAKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsCiAJCSJOb2RlICVkIEh1Z2VQYWdlc19Ub3RhbDogJTV1XG4iCi0JCSJOb2RlICVkIEh1Z2VQYWdlc19GcmVlOiAgJTV1XG4iLAorCQkiTm9kZSAlZCBIdWdlUGFnZXNfRnJlZTogICU1dVxuIgorCQkiTm9kZSAlZCBIdWdlUGFnZXNfU3VycDogICU1dVxuIiwKIAkJbmlkLCBucl9odWdlX3BhZ2VzX25vZGVbbmlkXSwKLQkJbmlkLCBmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTsKKwkJbmlkLCBmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdLAorCQluaWQsIHN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0pOwogfQogCiAvKiBSZXR1cm4gdGhlIG51bWJlciBwYWdlcyBvZiBtZW1vcnkgd2UgcGh5c2ljYWxseSBoYXZlLCBpbiBQQUdFX1NJWkUgdW5pdHMuICovCkBAIC0xMjA1LDEyICsxMjQ5LDEzIEBACiAJCWlmIChnYXRoZXJfc3VycGx1c19wYWdlcyhkZWx0YSkgPCAwKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKGRlbHRhID4gY3B1c2V0X21lbXNfbnIoZnJlZV9odWdlX3BhZ2VzX25vZGUpKQorCQlpZiAoZGVsdGEgPiBjcHVzZXRfbWVtc19ucihmcmVlX2h1Z2VfcGFnZXNfbm9kZSkpIHsKKwkJCXJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhkZWx0YSk7CiAJCQlnb3RvIG91dDsKKwkJfQogCX0KIAogCXJldCA9IDA7Ci0JcmVzdl9odWdlX3BhZ2VzICs9IGRlbHRhOwogCWlmIChkZWx0YSA8IDApCiAJCXJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcygodW5zaWduZWQgbG9uZykgLWRlbHRhKTsKIApkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggNWE5YTYyMC4uNzg5NzI3MyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAorKysgYi9tbS9pbnRlcm5hbC5oCkBAIC00Nyw0ICs0NywxNyBAQAogCVZNX0JVR19PTighUGFnZUJ1ZGR5KHBhZ2UpKTsKIAlyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpOwogfQorCisvKgorICogRkxBVE1FTSBhbmQgRElTQ09OVElHTUVNIGNvbmZpZ3VyYXRpb25zIHVzZSBhbGxvY19ib290bWVtX25vZGUsCisgKiBzbyBhbGwgZnVuY3Rpb25zIHN0YXJ0aW5nIGF0IHBhZ2luZ19pbml0IHNob3VsZCBiZSBtYXJrZWQgX19pbml0CisgKiBpbiB0aG9zZSBjYXNlcy4gU1BBUlNFTUVNLCBob3dldmVyLCBhbGxvd3MgZm9yIG1lbW9yeSBob3RwbHVnLAorICogYW5kIGFsbG9jX2Jvb3RtZW1fbm9kZSBpcyBub3QgdXNlZC4KKyAqLworI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKyNkZWZpbmUgX19wYWdpbmdpbml0IF9fbWVtaW5pdAorI2Vsc2UKKyNkZWZpbmUgX19wYWdpbmdpbml0IF9faW5pdAorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vbWFjY2Vzcy5jIGIvbW0vbWFjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDA3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9tYWNjZXNzLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIEFjY2VzcyBrZXJuZWwgbWVtb3J5IHdpdGhvdXQgZmF1bHRpbmcuCisgKi8KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyoqCisgKiBwcm9iZV9rZXJuZWxfcmVhZCgpOiBzYWZlbHkgYXR0ZW1wdCB0byByZWFkIGZyb20gYSBsb2NhdGlvbgorICogQGRzdDogcG9pbnRlciB0byB0aGUgYnVmZmVyIHRoYXQgc2hhbGwgdGFrZSB0aGUgZGF0YQorICogQHNyYzogYWRkcmVzcyB0byByZWFkIGZyb20KKyAqIEBzaXplOiBzaXplIG9mIHRoZSBkYXRhIGNodW5rCisgKgorICogU2FmZWx5IHJlYWQgZnJvbSBhZGRyZXNzIEBzcmMgdG8gdGhlIGJ1ZmZlciBhdCBAZHN0LiAgSWYgYSBrZXJuZWwgZmF1bHQKKyAqIGhhcHBlbnMsIGhhbmRsZSB0aGF0IGFuZCByZXR1cm4gLUVGQVVMVC4KKyAqLworbG9uZyBwcm9iZV9rZXJuZWxfcmVhZCh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCit7CisJbG9uZyByZXQ7CisJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwlyZXQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKGRzdCwKKwkJCShfX2ZvcmNlIGNvbnN0IHZvaWQgX191c2VyICopc3JjLCBzaXplKTsKKwlwYWdlZmF1bHRfZW5hYmxlKCk7CisJc2V0X2ZzKG9sZF9mcyk7CisKKwlyZXR1cm4gcmV0ID8gLUVGQVVMVCA6IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwcm9iZV9rZXJuZWxfcmVhZCk7CisKKy8qKgorICogcHJvYmVfa2VybmVsX3dyaXRlKCk6IHNhZmVseSBhdHRlbXB0IHRvIHdyaXRlIHRvIGEgbG9jYXRpb24KKyAqIEBkc3Q6IGFkZHJlc3MgdG8gd3JpdGUgdG8KKyAqIEBzcmM6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdGhhdCBzaGFsbCBiZSB3cml0dGVuCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgZGF0YSBjaHVuaworICoKKyAqIFNhZmVseSB3cml0ZSB0byBhZGRyZXNzIEBkc3QgZnJvbSB0aGUgYnVmZmVyIGF0IEBzcmMuICBJZiBhIGtlcm5lbCBmYXVsdAorICogaGFwcGVucywgaGFuZGxlIHRoYXQgYW5kIHJldHVybiAtRUZBVUxULgorICovCitsb25nIHByb2JlX2tlcm5lbF93cml0ZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCit7CisJbG9uZyByZXQ7CisJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwlyZXQgPSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYygoX19mb3JjZSB2b2lkIF9fdXNlciAqKWRzdCwgc3JjLCBzaXplKTsKKwlwYWdlZmF1bHRfZW5hYmxlKCk7CisJc2V0X2ZzKG9sZF9mcyk7CisKKwlyZXR1cm4gcmV0ID8gLUVGQVVMVCA6IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwcm9iZV9rZXJuZWxfd3JpdGUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDZiZGVkODQuLjJlMGJmYzkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTEzNywxNCArMTM3LDIxIEBACiAJICovCiAJc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCBzdGF0OwogfTsKK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCBpbml0X21lbV9jZ3JvdXA7CiAKIC8qCiAgKiBXZSB1c2UgdGhlIGxvd2VyIGJpdCBvZiB0aGUgcGFnZS0+cGFnZV9jZ3JvdXAgcG9pbnRlciBhcyBhIGJpdCBzcGluCi0gKiBsb2NrLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHBhZ2UtPnBhZ2VfY2dyb3VwIGlzIGF0bGVhc3QgdHdvCi0gKiBieXRlIGFsaWduZWQgKGJhc2VkIG9uIGNvbW1lbnRzIGZyb20gTmljayBQaWdnaW4pCisgKiBsb2NrLiAgV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBwYWdlLT5wYWdlX2Nncm91cCBpcyBhdCBsZWFzdCB0d28KKyAqIGJ5dGUgYWxpZ25lZCAoYmFzZWQgb24gY29tbWVudHMgZnJvbSBOaWNrIFBpZ2dpbikuICBCdXQgc2luY2UKKyAqIGJpdF9zcGluX2xvY2sgZG9lc24ndCBhY3R1YWxseSBzZXQgdGhhdCBsb2NrIGJpdCBpbiBhIG5vbi1kZWJ1ZworICogdW5pcHJvY2Vzc29yIGtlcm5lbCwgd2Ugc2hvdWxkIGF2b2lkIHNldHRpbmcgaXQgaGVyZSB0b28uCiAgKi8KICNkZWZpbmUgUEFHRV9DR1JPVVBfTE9DS19CSVQgCTB4MAotI2RlZmluZSBQQUdFX0NHUk9VUF9MT0NLIAkJKDEgPDwgUEFHRV9DR1JPVVBfTE9DS19CSVQpCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKyNkZWZpbmUgUEFHRV9DR1JPVVBfTE9DSyAJKDEgPDwgUEFHRV9DR1JPVVBfTE9DS19CSVQpCisjZWxzZQorI2RlZmluZSBQQUdFX0NHUk9VUF9MT0NLCTB4MAorI2VuZGlmCiAKIC8qCiAgKiBBIHBhZ2VfY2dyb3VwIHBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IHBhZ2UgZGVzY3JpcHRvci4gVGhlCkBAIC0xNTQsMzcgKzE2MSwyNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJLyogcGVyIGNncm91cCBMUlUgbGlzdCAqLwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwOwotCWF0b21pY190IHJlZl9jbnQ7CQkvKiBIZWxwZnVsIHdoZW4gcGFnZXMgbW92ZSBiL3cgICovCi0JCQkJCS8qIG1hcHBlZCBhbmQgY2FjaGVkIHN0YXRlcyAgICAgKi8KLQlpbnQJIGZsYWdzOworCWludCByZWZfY250OwkJCS8qIGNhY2hlZCwgbWFwcGVkLCBtaWdyYXRpbmcgKi8KKwlpbnQgZmxhZ3M7CiB9OwogI2RlZmluZSBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFCSgweDEpCS8qIGNoYXJnZWQgYXMgY2FjaGUgKi8KICNkZWZpbmUgUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkUgKDB4MikJLyogcGFnZSBpcyBhY3RpdmUgaW4gdGhpcyBjZ3JvdXAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgcGFnZV9jZ3JvdXBfbmlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCitzdGF0aWMgaW50IHBhZ2VfY2dyb3VwX25pZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQogewogCXJldHVybiBwYWdlX3RvX25pZChwYy0+cGFnZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV9jZ3JvdXBfemlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCitzdGF0aWMgZW51bSB6b25lX3R5cGUgcGFnZV9jZ3JvdXBfemlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCiB7CiAJcmV0dXJuIHBhZ2Vfem9uZW51bShwYy0+cGFnZSk7CiB9CiAKLWVudW0gewotCU1FTV9DR1JPVVBfVFlQRV9VTlNQRUMgPSAwLAotCU1FTV9DR1JPVVBfVFlQRV9NQVBQRUQsCi0JTUVNX0NHUk9VUF9UWVBFX0NBQ0hFRCwKLQlNRU1fQ0dST1VQX1RZUEVfQUxMLAotCU1FTV9DR1JPVVBfVFlQRV9NQVgsCi19OwotCiBlbnVtIGNoYXJnZV90eXBlIHsKIAlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFID0gMCwKIAlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCwKIH07CiAKLQogLyoKICAqIEFsd2F5cyBtb2RpZmllZCB1bmRlciBscnUgbG9jay4gVGhlbiwgbm90IG5lY2Vzc2FyeSB0byBwcmVlbXB0X2Rpc2FibGUoKQogICovCkBAIC0xOTMsMjMgKzE5MCwyMSBAQAogewogCWludCB2YWwgPSAoY2hhcmdlKT8gMSA6IC0xOwogCXN0cnVjdCBtZW1fY2dyb3VwX3N0YXQgKnN0YXQgPSAmbWVtLT5zdGF0OwotCVZNX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAorCVZNX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAlpZiAoZmxhZ3MgJiBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFKQotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShzdGF0LAotCQkJCQlNRU1fQ0dST1VQX1NUQVRfQ0FDSEUsIHZhbCk7CisJCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSwgdmFsKTsKIAllbHNlCiAJCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKgorc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICoKIG1lbV9jZ3JvdXBfem9uZWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgaW50IG5pZCwgaW50IHppZCkKIHsKLQlCVUdfT04oIW1lbS0+aW5mby5ub2RlaW5mb1tuaWRdKTsKIAlyZXR1cm4gJm1lbS0+aW5mby5ub2RlaW5mb1tuaWRdLT56b25laW5mb1t6aWRdOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICoKK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqCiBwYWdlX2Nncm91cF96b25laW5mbyhzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBwYy0+bWVtX2Nncm91cDsKQEAgLTIzNCwxOCArMjI5LDE0IEBACiAJcmV0dXJuIHRvdGFsOwogfQogCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgaW5pdF9tZW1fY2dyb3VwOwotCi1zdGF0aWMgaW5saW5lCi1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX2NvbnQoc3RydWN0IGNncm91cCAqY29udCkKK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX2NvbnQoc3RydWN0IGNncm91cCAqY29udCkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJzeXNfc3RhdGUoY29udCwKIAkJCQltZW1fY2dyb3VwX3N1YnN5c19pZCksIHN0cnVjdCBtZW1fY2dyb3VwLAogCQkJCWNzcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHAsIG1lbV9jZ3JvdXBfc3Vic3lzX2lkKSwKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cCwgY3NzKTsKQEAgLTI2Nyw4MyArMjU4LDM1IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfY2dyb3VwX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gYml0X3NwaW5faXNfbG9ja2VkKFBBR0VfQ0dST1VQX0xPQ0tfQklULAotCQkJCQkmcGFnZS0+cGFnZV9jZ3JvdXApOworCXJldHVybiBiaXRfc3Bpbl9pc19sb2NrZWQoUEFHRV9DR1JPVVBfTE9DS19CSVQsICZwYWdlLT5wYWdlX2Nncm91cCk7CiB9CiAKLXZvaWQgcGFnZV9hc3NpZ25fcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCitzdGF0aWMgdm9pZCBwYWdlX2Fzc2lnbl9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKIHsKLQlpbnQgbG9ja2VkOwotCi0JLyoKLQkgKiBXaGlsZSByZXNldHRpbmcgdGhlIHBhZ2VfY2dyb3VwIHdlIG1pZ2h0IG5vdCBob2xkIHRoZQotCSAqIHBhZ2VfY2dyb3VwIGxvY2suIGZyZWVfaG90X2NvbGRfcGFnZSgpIGlzIGFuIGV4YW1wbGUKLQkgKiBvZiBzdWNoIGEgc2NlbmFyaW8KLQkgKi8KLQlpZiAocGMpCi0JCVZNX0JVR19PTighcGFnZV9jZ3JvdXBfbG9ja2VkKHBhZ2UpKTsKLQlsb2NrZWQgPSAocGFnZS0+cGFnZV9jZ3JvdXAgJiBQQUdFX0NHUk9VUF9MT0NLKTsKLQlwYWdlLT5wYWdlX2Nncm91cCA9ICgodW5zaWduZWQgbG9uZylwYyB8IGxvY2tlZCk7CisJVk1fQlVHX09OKCFwYWdlX2Nncm91cF9sb2NrZWQocGFnZSkpOworCXBhZ2UtPnBhZ2VfY2dyb3VwID0gKCh1bnNpZ25lZCBsb25nKXBjIHwgUEFHRV9DR1JPVVBfTE9DSyk7CiB9CiAKIHN0cnVjdCBwYWdlX2Nncm91cCAqcGFnZV9nZXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKikKLQkJKHBhZ2UtPnBhZ2VfY2dyb3VwICYgflBBR0VfQ0dST1VQX0xPQ0spOworCXJldHVybiAoc3RydWN0IHBhZ2VfY2dyb3VwICopIChwYWdlLT5wYWdlX2Nncm91cCAmIH5QQUdFX0NHUk9VUF9MT0NLKTsKIH0KIAotc3RhdGljIHZvaWQgX19hbHdheXNfaW5saW5lIGxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgdm9pZCBsb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWJpdF9zcGluX2xvY2soUEFHRV9DR1JPVVBfTE9DS19CSVQsICZwYWdlLT5wYWdlX2Nncm91cCk7Ci0JVk1fQlVHX09OKCFwYWdlX2Nncm91cF9sb2NrZWQocGFnZSkpOwogfQogCi1zdGF0aWMgdm9pZCBfX2Fsd2F5c19pbmxpbmUgdW5sb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGludCB0cnlfbG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gYml0X3NwaW5fdHJ5bG9jayhQQUdFX0NHUk9VUF9MT0NLX0JJVCwgJnBhZ2UtPnBhZ2VfY2dyb3VwKTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWJpdF9zcGluX3VubG9jayhQQUdFX0NHUk9VUF9MT0NLX0JJVCwgJnBhZ2UtPnBhZ2VfY2dyb3VwKTsKIH0KIAotLyoKLSAqIFRpZSBuZXcgcGFnZV9jZ3JvdXAgdG8gc3RydWN0IHBhZ2UgdW5kZXIgbG9ja19wYWdlX2Nncm91cCgpCi0gKiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBwYWdlIGhhcyBiZWVuIHRpZWQgdG8gYSBwYWdlX2Nncm91cC4KLSAqIElmIHN1Y2Nlc3MsIHJldHVybnMgMC4KLSAqLwotc3RhdGljIGludCBwYWdlX2Nncm91cF9hc3NpZ25fbmV3X3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQkJc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JaWYgKCFwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSkKLQkJcGFnZV9hc3NpZ25fcGFnZV9jZ3JvdXAocGFnZSwgcGMpOwotCWVsc2UgLyogQSBwYWdlIGlzIHRpZWQgdG8gb3RoZXIgcGMuICovCi0JCXJldCA9IDE7Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBDbGVhciBwYWdlLT5wYWdlX2Nncm91cCBtZW1iZXIgdW5kZXIgbG9ja19wYWdlX2Nncm91cCgpLgotICogSWYgZ2l2ZW4gInBjIiB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSBvbmUgcGFnZS0+cGFnZV9jZ3JvdXAsCi0gKiBwYWdlLT5jZ3JvdXAgaXMgbm90IGNsZWFyZWQuCi0gKiBSZXR1cm5zIGEgdmFsdWUgb2YgcGFnZS0+cGFnZV9jZ3JvdXAgYXQgbG9jayB0YWtlbi4KLSAqIEEgY2FuIGNhbiBkZXRlY3QgZmFpbHVyZSBvZiBjbGVhcmluZyBieSBmb2xsb3dpbmcKLSAqICBjbGVhcl9wYWdlX2Nncm91cChwYWdlLCBwYykgPT0gcGMKLSAqLwotCi1zdGF0aWMgc3RydWN0IHBhZ2VfY2dyb3VwICpjbGVhcl9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJCXN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCi17Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpyZXQ7Ci0JLyogbG9jayBhbmQgY2xlYXIgKi8KLQlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCXJldCA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmIChsaWtlbHkocmV0ID09IHBjKSkKLQkJcGFnZV9hc3NpZ25fcGFnZV9jZ3JvdXAocGFnZSwgTlVMTCk7Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfbGlzdChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQogewogCWludCBmcm9tID0gcGMtPmZsYWdzICYgUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7CkBAIC0zOTksNyArMzQyLDcgQEAKIAlpbnQgcmV0OwogCiAJdGFza19sb2NrKHRhc2spOwotCXJldCA9IHRhc2stPm1tICYmIHZtX21hdGNoX2Nncm91cCh0YXNrLT5tbSwgbWVtKTsKKwlyZXQgPSB0YXNrLT5tbSAmJiBtbV9tYXRjaF9jZ3JvdXAodGFzay0+bW0sIG1lbSk7CiAJdGFza191bmxvY2sodGFzayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQwNywxOCArMzUwLDMwIEBACiAvKgogICogVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCB0aGUgYXBwcm9wcmlhdGUgem9uZSdzIGxydSBsb2NrIGlzIGFscmVhZHkgaGVsZAogICovCi12b2lkIG1lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLCBib29sIGFjdGl2ZSkKK3ZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGFjdGl2ZSkKIHsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFwYykKKwkvKgorCSAqIFdlIGNhbm5vdCBsb2NrX3BhZ2VfY2dyb3VwIHdoaWxlIGhvbGRpbmcgem9uZSdzIGxydV9sb2NrLAorCSAqIGJlY2F1c2Ugb3RoZXIgaG9sZGVycyBvZiBsb2NrX3BhZ2VfY2dyb3VwIGNhbiBiZSBpbnRlcnJ1cHRlZAorCSAqIHdpdGggYW4gYXR0ZW1wdCB0byByb3RhdGVfcmVjbGFpbWFibGVfcGFnZS4gIEJ1dCB3ZSBjYW5ub3QKKwkgKiBzYWZlbHkgZ2V0IHRvIHBhZ2VfY2dyb3VwIHdpdGhvdXQgaXQsIHNvIGp1c3QgdHJ5X2xvY2sgaXQ6CisJICogbWVtX2Nncm91cF9pc29sYXRlX3BhZ2VzIGFsbG93cyBmb3IgcGFnZSBsZWZ0IG9uIHdyb25nIGxpc3QuCisJICovCisJaWYgKCF0cnlfbG9ja19wYWdlX2Nncm91cChwYWdlKSkKIAkJcmV0dXJuOwogCi0JbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwotCV9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBjLCBhY3RpdmUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOworCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7CisJaWYgKHBjKSB7CisJCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CisJCV9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBjLCBhY3RpdmUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKKwl9CisJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwogfQogCiAvKgpAQCAtNDM3LDYgKzM5Miw3IEBACiAJcnNzID0gKGxvbmcpbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1JTUyk7CiAJcmV0dXJuIChpbnQpKChyc3MgKiAxMDBMKSAvIHRvdGFsKTsKIH0KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdm1zY2FuLmMuIEluIHBhZ2UgcmVjbGFpbWluZyBsb29wLiBiYWxhbmNlCiAgKiBiZXR3ZWVuIGFjdGl2ZSBhbmQgaW5hY3RpdmUgbGlzdCBpcyBjYWxjdWxhdGVkLiBGb3IgbWVtb3J5IGNvbnRyb2xsZXIKQEAgLTUwMCw3ICs0NTYsNiBAQAogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBuaWQsIHppZCk7CiAKIAlucl9pbmFjdGl2ZSA9IE1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpOwotCiAJcmV0dXJuIChucl9pbmFjdGl2ZSA+PiBwcmlvcml0eSk7CiB9CiAKQEAgLTUzNCw3ICs0ODksNiBAQAogCQlpZiAoc2NhbiA+PSBucl90b19zY2FuKQogCQkJYnJlYWs7CiAJCXBhZ2UgPSBwYy0+cGFnZTsKLQkJVk1fQlVHX09OKCFwYyk7CiAKIAkJaWYgKHVubGlrZWx5KCFQYWdlTFJVKHBhZ2UpKSkKIAkJCWNvbnRpbnVlOwpAQCAtNTc5LDYgKzUzMyw5IEBACiAJdW5zaWduZWQgbG9uZyBucl9yZXRyaWVzID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwogCisJaWYgKG1lbV9jZ3JvdXBfc3Vic3lzLmRpc2FibGVkKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogU2hvdWxkIHBhZ2VfY2dyb3VwJ3MgZ28gdG8gdGhlaXIgb3duIHNsYWI/CiAJICogT25lIGNvdWxkIG9wdGltaXplIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY2hhcmdpbmcgcm91dGluZQpAQCAtNTg3LDI2ICs1NDQsMjEgQEAKIAkgKiB3aXRoIGl0CiAJICovCiByZXRyeToKLQlpZiAocGFnZSkgewotCQlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQlwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQkvKgotCQkgKiBUaGUgcGFnZV9jZ3JvdXAgZXhpc3RzIGFuZAotCQkgKiB0aGUgcGFnZSBoYXMgYWxyZWFkeSBiZWVuIGFjY291bnRlZC4KLQkJICovCi0JCWlmIChwYykgewotCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZwYy0+cmVmX2NudCkpKSB7Ci0JCQkJLyogdGhpcyBwYWdlIGlzIHVuZGVyIGJlaW5nIHVuY2hhcmdlZCA/ICovCi0JCQkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQkJCWNwdV9yZWxheCgpOwotCQkJCWdvdG8gcmV0cnk7Ci0JCQl9IGVsc2UgewotCQkJCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCX0KKwlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOworCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7CisJLyoKKwkgKiBUaGUgcGFnZV9jZ3JvdXAgZXhpc3RzIGFuZAorCSAqIHRoZSBwYWdlIGhhcyBhbHJlYWR5IGJlZW4gYWNjb3VudGVkLgorCSAqLworCWlmIChwYykgeworCQlWTV9CVUdfT04ocGMtPnBhZ2UgIT0gcGFnZSk7CisJCVZNX0JVR19PTihwYy0+cmVmX2NudCA8PSAwKTsKKworCQlwYy0+cmVmX2NudCsrOwogCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CisJCWdvdG8gZG9uZTsKIAl9CisJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwogCiAJcGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApLCBnZnBfbWFzayk7CiAJaWYgKHBjID09IE5VTEwpCkBAIC02MjQsMTYgKzU3NiwxMSBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAltZW0gPSByY3VfZGVyZWZlcmVuY2UobW0tPm1lbV9jZ3JvdXApOwogCS8qCi0JICogRm9yIGV2ZXJ5IGNoYXJnZSBmcm9tIHRoZSBjZ3JvdXAsIGluY3JlbWVudCByZWZlcmVuY2UKLQkgKiBjb3VudAorCSAqIEZvciBldmVyeSBjaGFyZ2UgZnJvbSB0aGUgY2dyb3VwLCBpbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50CiAJICovCiAJY3NzX2dldCgmbWVtLT5jc3MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JLyoKLQkgKiBJZiB3ZSBjcmVhdGVkIHRoZSBwYWdlX2Nncm91cCwgd2Ugc2hvdWxkIGZyZWUgaXQgb24gZXhjZWVkaW5nCi0JICogdGhlIGNncm91cCBsaW1pdC4KLQkgKi8KIAl3aGlsZSAocmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKSkgewogCQlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQogCQkJZ290byBvdXQ7CkBAIC02NDIsMTIgKzU4OSwxMiBAQAogCQkJY29udGludWU7CiAKIAkJLyoKLSAJCSAqIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoKSBtaWdodCBub3QgZ2l2ZSB1cyBhIGZ1bGwKLSAJCSAqIHBpY3R1cmUgb2YgcmVjbGFpbS4gU29tZSBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBtaWdodCBiZQotIAkJICogbW92ZWQgdG8gc3dhcCBjYWNoZSBvciBqdXN0IHVubWFwcGVkIGZyb20gdGhlIGNncm91cC4KLSAJCSAqIENoZWNrIHRoZSBsaW1pdCBhZ2FpbiB0byBzZWUgaWYgdGhlIHJlY2xhaW0gcmVkdWNlZCB0aGUKLSAJCSAqIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGNncm91cCBiZWZvcmUgZ2l2aW5nIHVwCi0gCQkgKi8KKwkJICogdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcygpIG1pZ2h0IG5vdCBnaXZlIHVzIGEgZnVsbAorCQkgKiBwaWN0dXJlIG9mIHJlY2xhaW0uIFNvbWUgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgbWlnaHQgYmUKKwkJICogbW92ZWQgdG8gc3dhcCBjYWNoZSBvciBqdXN0IHVubWFwcGVkIGZyb20gdGhlIGNncm91cC4KKwkJICogQ2hlY2sgdGhlIGxpbWl0IGFnYWluIHRvIHNlZSBpZiB0aGUgcmVjbGFpbSByZWR1Y2VkIHRoZQorCQkgKiBjdXJyZW50IHVzYWdlIG9mIHRoZSBjZ3JvdXAgYmVmb3JlIGdpdmluZyB1cAorCQkgKi8KIAkJaWYgKHJlc19jb3VudGVyX2NoZWNrX3VuZGVyX2xpbWl0KCZtZW0tPnJlcykpCiAJCQljb250aW51ZTsKIApAQCAtNjU4LDE0ICs2MDUsMTYgQEAKIAkJY29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWi8xMCk7CiAJfQogCi0JYXRvbWljX3NldCgmcGMtPnJlZl9jbnQsIDEpOworCXBjLT5yZWZfY250ID0gMTsKIAlwYy0+bWVtX2Nncm91cCA9IG1lbTsKIAlwYy0+cGFnZSA9IHBhZ2U7CiAJcGMtPmZsYWdzID0gUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7CiAJaWYgKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEUpCiAJCXBjLT5mbGFncyB8PSBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFOwogCi0JaWYgKCFwYWdlIHx8IHBhZ2VfY2dyb3VwX2Fzc2lnbl9uZXdfcGFnZV9jZ3JvdXAocGFnZSwgcGMpKSB7CisJbG9ja19wYWdlX2Nncm91cChwYWdlKTsKKwlpZiAocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkpIHsKKwkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwogCQkvKgogCQkgKiBBbm90aGVyIGNoYXJnZSBoYXMgYmVlbiBhZGRlZCB0byB0aGlzIHBhZ2UgYWxyZWFkeS4KIAkJICogV2UgdGFrZSBsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpIGFnYWluIGFuZCByZWFkCkBAIC02NzQsMTcgKzYyMywxNiBAQAogCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCWNzc19wdXQoJm1lbS0+Y3NzKTsKIAkJa2ZyZWUocGMpOwotCQlpZiAoIXBhZ2UpCi0JCQlnb3RvIGRvbmU7CiAJCWdvdG8gcmV0cnk7CiAJfQorCXBhZ2VfYXNzaWduX3BhZ2VfY2dyb3VwKHBhZ2UsIHBjKTsKIAogCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKLQkvKiBVcGRhdGUgc3RhdGlzdGljcyB2ZWN0b3IgKi8KIAlfX21lbV9jZ3JvdXBfYWRkX2xpc3QocGMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCisJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwogZG9uZToKIAlyZXR1cm4gMDsKIG91dDoKQEAgLTY5NCw3MCArNjQyLDY0IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLWludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQlnZnBfdCBnZnBfbWFzaykKK2ludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAotCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQpOworCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVEKTsKIH0KIAotLyoKLSAqIFNlZSBpZiB0aGUgY2FjaGVkIHBhZ2VzIHNob3VsZCBiZSBjaGFyZ2VkIGF0IGFsbD8KLSAqLwogaW50IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQlnZnBfdCBnZnBfbWFzaykKIHsKLQlpbnQgcmV0ID0gMDsKIAlpZiAoIW1tKQogCQltbSA9ICZpbml0X21tOwotCi0JcmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKKwlyZXR1cm4gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKIAkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFKTsKLQlyZXR1cm4gcmV0OwogfQogCiAvKgogICogVW5jaGFyZ2luZyBpcyBhbHdheXMgYSB3ZWxjb21lIG9wZXJhdGlvbiwgd2UgbmV2ZXIgY29tcGxhaW4sIHNpbXBseQotICogdW5jaGFyZ2UuIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIHdpdGggbG9ja19wYWdlX2Nncm91cCBoZWxkCisgKiB1bmNoYXJnZS4KICAqLwotdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwotCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobWVtX2Nncm91cF9zdWJzeXMuZGlzYWJsZWQpCisJCXJldHVybjsKKwogCS8qCiAJICogQ2hlY2sgaWYgb3VyIHBhZ2VfY2dyb3VwIGlzIHZhbGlkCiAJICovCi0JaWYgKCFwYykKLQkJcmV0dXJuOwotCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBjLT5yZWZfY250KSkgewotCQlwYWdlID0gcGMtPnBhZ2U7Ci0JCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOwotCQkvKgotCQkgKiBnZXQgcGFnZS0+Y2dyb3VwIGFuZCBjbGVhciBpdCB1bmRlciBsb2NrLgotCQkgKiBmb3JjZV9lbXB0eSBjYW4gZHJvcCBwYWdlLT5jZ3JvdXAgd2l0aG91dCBjaGVja2luZyByZWZjbnQuCi0JCSAqLwotCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JCWlmIChjbGVhcl9wYWdlX2Nncm91cChwYWdlLCBwYykgPT0gcGMpIHsKLQkJCW1lbSA9IHBjLT5tZW1fY2dyb3VwOwotCQkJY3NzX3B1dCgmbWVtLT5jc3MpOwotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwotCQkJX19tZW1fY2dyb3VwX3JlbW92ZV9saXN0KHBjKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwotCQkJa2ZyZWUocGMpOwotCQl9Ci0JCWxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JfQotfQotCi12b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKIAlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCW1lbV9jZ3JvdXBfdW5jaGFyZ2UocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkpOworCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7CisJaWYgKCFwYykKKwkJZ290byB1bmxvY2s7CisKKwlWTV9CVUdfT04ocGMtPnBhZ2UgIT0gcGFnZSk7CisJVk1fQlVHX09OKHBjLT5yZWZfY250IDw9IDApOworCisJaWYgKC0tKHBjLT5yZWZfY250KSA9PSAwKSB7CisJCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CisJCV9fbWVtX2Nncm91cF9yZW1vdmVfbGlzdChwYyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOworCisJCXBhZ2VfYXNzaWduX3BhZ2VfY2dyb3VwKHBhZ2UsIE5VTEwpOworCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CisKKwkJbWVtID0gcGMtPm1lbV9jZ3JvdXA7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKKwkJY3NzX3B1dCgmbWVtLT5jc3MpOworCisJCWtmcmVlKHBjKTsKKwkJcmV0dXJuOworCX0KKwordW5sb2NrOgogCXVubG9ja19wYWdlX2Nncm91cChwYWdlKTsKIH0KIApAQCAtNzY1LDYzICs3MDcsNjIgQEAKICAqIFJldHVybnMgbm9uLXplcm8gaWYgYSBwYWdlICh1bmRlciBtaWdyYXRpb24pIGhhcyB2YWxpZCBwYWdlX2Nncm91cCBtZW1iZXIuCiAgKiBSZWZjbnQgb2YgcGFnZV9jZ3JvdXAgaXMgaW5jcmVtZW50ZWQuCiAgKi8KLQogaW50IG1lbV9jZ3JvdXBfcHJlcGFyZV9taWdyYXRpb24oc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKLQlpbnQgcmV0ID0gMDsKKworCWlmIChtZW1fY2dyb3VwX3N1YnN5cy5kaXNhYmxlZCkKKwkJcmV0dXJuIDA7CisKIAlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwogCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JaWYgKHBjICYmIGF0b21pY19pbmNfbm90X3plcm8oJnBjLT5yZWZfY250KSkKLQkJcmV0ID0gMTsKKwlpZiAocGMpCisJCXBjLT5yZWZfY250Kys7CiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHBjICE9IE5VTEw7CiB9CiAKIHZvaWQgbWVtX2Nncm91cF9lbmRfbWlncmF0aW9uKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7Ci0KLQlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JbWVtX2Nncm91cF91bmNoYXJnZShwYyk7Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOworCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKIH0KKwogLyoKLSAqIFdlIGtub3cgYm90aCAqcGFnZSogYW5kICpuZXdwYWdlKiBhcmUgbm93IG5vdC1vbi1MUlUgYW5kIFBnX2xvY2tlZC4KKyAqIFdlIGtub3cgYm90aCAqcGFnZSogYW5kICpuZXdwYWdlKiBhcmUgbm93IG5vdC1vbi1MUlUgYW5kIFBHX2xvY2tlZC4KICAqIEFuZCBubyByYWNlIHdpdGggdW5jaGFyZ2UoKSByb3V0aW5lcyBiZWNhdXNlIHBhZ2VfY2dyb3VwIGZvciAqcGFnZSoKICAqIGhhcyBleHRyYSBvbmUgcmVmZXJlbmNlIGJ5IG1lbV9jZ3JvdXBfcHJlcGFyZV9taWdyYXRpb24uCiAgKi8KLQogdm9pZCBtZW1fY2dyb3VwX3BhZ2VfbWlncmF0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZSAqbmV3cGFnZSkKIHsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7Ci1yZXRyeToKLQlwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmICghcGMpCi0JCXJldHVybjsKLQltZW0gPSBwYy0+bWVtX2Nncm91cDsKLQlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKLQlpZiAoY2xlYXJfcGFnZV9jZ3JvdXAocGFnZSwgcGMpICE9IHBjKQotCQlnb3RvIHJldHJ5OwotCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJbG9ja19wYWdlX2Nncm91cChwYWdlKTsKKwlwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOworCWlmICghcGMpIHsKKwkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOworCQlyZXR1cm47CisJfQorCisJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCV9fbWVtX2Nncm91cF9yZW1vdmVfbGlzdChwYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAKKwlwYWdlX2Fzc2lnbl9wYWdlX2Nncm91cChwYWdlLCBOVUxMKTsKKwl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CisKIAlwYy0+cGFnZSA9IG5ld3BhZ2U7CiAJbG9ja19wYWdlX2Nncm91cChuZXdwYWdlKTsKIAlwYWdlX2Fzc2lnbl9wYWdlX2Nncm91cChuZXdwYWdlLCBwYyk7Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKG5ld3BhZ2UpOwogCiAJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCV9fbWVtX2Nncm91cF9hZGRfbGlzdChwYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuOworCisJdW5sb2NrX3BhZ2VfY2dyb3VwKG5ld3BhZ2UpOwogfQogCiAvKgpAQCAtODMwLDE0ICs3NzEsMTMgQEAKICAqICpBbmQqIHRoaXMgcm91dGluZSBkb2Vzbid0IHJlY2xhaW0gcGFnZSBpdHNlbGYsIGp1c3QgcmVtb3ZlcyBwYWdlX2Nncm91cC4KICAqLwogI2RlZmluZSBGT1JDRV9VTkNIQVJHRV9CQVRDSAkoMTI4KQotc3RhdGljIHZvaWQKLW1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorc3RhdGljIHZvaWQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAogCQkJICAgIGludCBhY3RpdmUpCiB7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgY291bnQ7CisJaW50IGNvdW50ID0gRk9SQ0VfVU5DSEFSR0VfQkFUQ0g7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCkBAIC04NDYsNDYgKzc4NiwzOSBAQAogCWVsc2UKIAkJbGlzdCA9ICZtei0+aW5hY3RpdmVfbGlzdDsKIAotCWlmIChsaXN0X2VtcHR5KGxpc3QpKQotCQlyZXR1cm47Ci1yZXRyeToKLQljb3VudCA9IEZPUkNFX1VOQ0hBUkdFX0JBVENIOwogCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKLQotCXdoaWxlICgtLWNvdW50ICYmICFsaXN0X2VtcHR5KGxpc3QpKSB7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CiAJCXBjID0gbGlzdF9lbnRyeShsaXN0LT5wcmV2LCBzdHJ1Y3QgcGFnZV9jZ3JvdXAsIGxydSk7CiAJCXBhZ2UgPSBwYy0+cGFnZTsKLQkJLyogQXZvaWQgcmFjZSB3aXRoIGNoYXJnZSAqLwotCQlhdG9taWNfc2V0KCZwYy0+cmVmX2NudCwgMCk7Ci0JCWlmIChjbGVhcl9wYWdlX2Nncm91cChwYWdlLCBwYykgPT0gcGMpIHsKLQkJCWNzc19wdXQoJm1lbS0+Y3NzKTsKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKLQkJCV9fbWVtX2Nncm91cF9yZW1vdmVfbGlzdChwYyk7Ci0JCQlrZnJlZShwYyk7Ci0JCX0gZWxzZSAJLyogYmVpbmcgdW5jaGFyZ2VkID8gLi4uZG8gcmVsYXggKi8KLQkJCWJyZWFrOworCQlnZXRfcGFnZShwYWdlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKKwkJcHV0X3BhZ2UocGFnZSk7CisJCWlmICgtLWNvdW50IDw9IDApIHsKKwkJCWNvdW50ID0gRk9SQ0VfVU5DSEFSR0VfQkFUQ0g7CisJCQljb25kX3Jlc2NoZWQoKTsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXotPmxydV9sb2NrLCBmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwotCWlmICghbGlzdF9lbXB0eShsaXN0KSkgewotCQljb25kX3Jlc2NoZWQoKTsKLQkJZ290byByZXRyeTsKLQl9Ci0JcmV0dXJuOwogfQogCiAvKgogICogbWFrZSBtZW1fY2dyb3VwJ3MgY2hhcmdlIHRvIGJlIDAgaWYgdGhlcmUgaXMgbm8gdGFzay4KICAqIFRoaXMgZW5hYmxlcyBkZWxldGluZyB0aGlzIG1lbV9jZ3JvdXAuCiAgKi8KLQotaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQogewogCWludCByZXQgPSAtRUJVU1k7CiAJaW50IG5vZGUsIHppZDsKKworCWlmIChtZW1fY2dyb3VwX3N1YnN5cy5kaXNhYmxlZCkKKwkJcmV0dXJuIDA7CisKIAljc3NfZ2V0KCZtZW0tPmNzcyk7CiAJLyoKIAkgKiBwYWdlIHJlY2xhaW0gY29kZSAoa3N3YXBkIGV0Yy4uKSB3aWxsIG1vdmUgcGFnZXMgYmV0d2VlbgotYAkgKiBhY3RpdmVfbGlzdCA8LT4gaW5hY3RpdmVfbGlzdCB3aGlsZSB3ZSBkb24ndCB0YWtlIGEgbG9jay4KKwkgKiBhY3RpdmVfbGlzdCA8LT4gaW5hY3RpdmVfbGlzdCB3aGlsZSB3ZSBkb24ndCB0YWtlIGEgbG9jay4KIAkgKiBTbywgd2UgaGF2ZSB0byBkbyBsb29wIGhlcmUgdW50aWwgYWxsIGxpc3RzIGFyZSBlbXB0eS4KIAkgKi8KIAl3aGlsZSAobWVtLT5yZXMudXNhZ2UgPiAwKSB7CkBAIC05MDcsOSArODQwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLQotaW50IG1lbV9jZ3JvdXBfd3JpdGVfc3RyYXRlZ3koY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxvbmcgKnRtcCkKK3N0YXRpYyBpbnQgbWVtX2Nncm91cF93cml0ZV9zdHJhdGVneShjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdG1wKQogewogCSp0bXAgPSBtZW1wYXJzZShidWYsICZidWYpOwogCWlmICgqYnVmICE9ICdcMCcpCkBAIC05NDYsOCArODc3LDcgQEAKIAkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNvbnQpOwotCWludCByZXQ7Ci0JcmV0ID0gbWVtX2Nncm91cF9mb3JjZV9lbXB0eShtZW0pOworCWludCByZXQgPSBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbSk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IG5ieXRlczsKIAlyZXR1cm4gcmV0OwpAQCAtOTU2LDcgKzg4Niw2IEBACiAvKgogICogTm90ZTogVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBpZiBjZ3JvdXAgc3VwcG9ydHMgd3JpdGUtb25seSBmaWxlLgogICovCi0KIHN0YXRpYyBzc2l6ZV90IG1lbV9mb3JjZV9lbXB0eV9yZWFkKHN0cnVjdCBjZ3JvdXAgKmNvbnQsCiAJCQkJc3RydWN0IGNmdHlwZSAqY2Z0LAogCQkJCXN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKQEAgLTk2NSw3ICs4OTQsNiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2Rlc2MgewogCWNvbnN0IGNoYXIgKm1zZzsKIAl1NjQgdW5pdDsKQEAgLTEwMTgsOCArOTQ2LDYgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWVtX2NvbnRyb2xfc3RhdF9zaG93LCBjb250KTsKIH0KIAotCi0KIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfZmlsZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gInVzYWdlX2luX2J5dGVzIiwKQEAgLTEwNTIsNyArOTc4LDcgQEAKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwotCWludCB6b25lOworCWludCB6b25lLCB0bXAgPSBub2RlOwogCS8qCiAJICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhZ2FpbnN0IHBvc3NpYmxlIG5vZGVzLgogCSAqIEJ1dCBpdCdzIEJVRyB0byBjYWxsIGttYWxsb2MoKSBhZ2FpbnN0IG9mZmxpbmUgbm9kZS4KQEAgLTEwNjEsMTAgKzk4Nyw5IEBACiAJICogICAgICAgbmV2ZXIgYmUgb25saW5lZC4gSXQncyBiZXR0ZXIgdG8gdXNlIG1lbW9yeSBob3RwbHVnIGNhbGxiYWNrCiAJICogICAgICAgZnVuY3Rpb24uCiAJICovCi0JaWYgKG5vZGVfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSkpCi0JCXBuID0ga21hbGxvY19ub2RlKHNpemVvZigqcG4pLCBHRlBfS0VSTkVMLCBub2RlKTsKLQllbHNlCi0JCXBuID0ga21hbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFub2RlX3N0YXRlKG5vZGUsIE5fTk9STUFMX01FTU9SWSkpCisJCXRtcCA9IC0xOworCXBuID0ga21hbGxvY19ub2RlKHNpemVvZigqcG4pLCBHRlBfS0VSTkVMLCB0bXApOwogCWlmICghcG4pCiAJCXJldHVybiAxOwogCkBAIC0xMDg1LDkgKzEwMTAsNiBAQAogCWtmcmVlKG1lbS0+aW5mby5ub2RlaW5mb1tub2RlXSk7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwIGluaXRfbWVtX2Nncm91cDsKLQogc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoKIG1lbV9jZ3JvdXBfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCkKIHsKQEAgLTExMDEsNyArMTAyMyw3IEBACiAJCW1lbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZW1fY2dyb3VwKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAobWVtID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCXJlc19jb3VudGVyX2luaXQoJm1lbS0+cmVzKTsKIApAQCAtMTExNyw3ICsxMDM5LDcgQEAKIAkJZnJlZV9tZW1fY2dyb3VwX3Blcl96b25lX2luZm8obWVtLCBub2RlKTsKIAlpZiAoY29udC0+cGFyZW50ICE9IE5VTEwpCiAJCWtmcmVlKG1lbSk7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcHJlX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLApAQCAtMTE0Miw2ICsxMDY0LDggQEAKIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCQkJc3RydWN0IGNncm91cCAqY29udCkKIHsKKwlpZiAobWVtX2Nncm91cF9zdWJzeXMuZGlzYWJsZWQpCisJCXJldHVybiAwOwogCXJldHVybiBjZ3JvdXBfYWRkX2ZpbGVzKGNvbnQsIHNzLCBtZW1fY2dyb3VwX2ZpbGVzLAogCQkJCQlBUlJBWV9TSVpFKG1lbV9jZ3JvdXBfZmlsZXMpKTsKIH0KQEAgLTExNTQsNiArMTA3OCw5IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgKm9sZF9tZW07CiAKKwlpZiAobWVtX2Nncm91cF9zdWJzeXMuZGlzYWJsZWQpCisJCXJldHVybjsKKwogCW1tID0gZ2V0X3Rhc2tfbW0ocCk7CiAJaWYgKG1tID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTExNjgsNyArMTA5NSw3IEBACiAJICogT25seSB0aHJlYWQgZ3JvdXAgbGVhZGVycyBhcmUgYWxsb3dlZCB0byBtaWdyYXRlLCB0aGUgbW1fc3RydWN0IGlzCiAJICogaW4gZWZmZWN0IG93bmVkIGJ5IHRoZSBsZWFkZXIKIAkgKi8KLQlpZiAocC0+dGdpZCAhPSBwLT5waWQpCisJaWYgKCF0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKQogCQlnb3RvIG91dDsKIAogCWNzc19nZXQoJm1lbS0+Y3NzKTsKQEAgLTExNzcsNyArMTEwNCw2IEBACiAKIG91dDoKIAltbXB1dChtbSk7Ci0JcmV0dXJuOwogfQogCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1fY2dyb3VwX3N1YnN5cyA9IHsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggY2UzYzllNC4uMGQxNGQxZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTE3MTEsNyArMTcxMSw3IEBACiAJfQogCXJldHVybiByZXQ7CiBvb21fZnJlZV9uZXc6Ci0JX19mcmVlX3BhZ2UobmV3X3BhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdfcGFnZSk7CiBvb206CiAJaWYgKG9sZF9wYWdlKQogCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwpAQCAtMjA5MywxMiArMjA5Myw5IEBACiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAKIAlpZiAod3JpdGVfYWNjZXNzKSB7Ci0JCS8qIFhYWDogV2UgY291bGQgT1IgdGhlIGRvX3dwX3BhZ2UgY29kZSB3aXRoIHRoaXMgb25lPyAqLwotCQlpZiAoZG9fd3BfcGFnZShtbSwgdm1hLCBhZGRyZXNzLAotCQkJCXBhZ2VfdGFibGUsIHBtZCwgcHRsLCBwdGUpICYgVk1fRkFVTFRfT09NKSB7Ci0JCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7Ci0JCQlyZXQgPSBWTV9GQVVMVF9PT007Ci0JCX0KKwkJcmV0IHw9IGRvX3dwX3BhZ2UobW0sIHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSwgcG1kLCBwdGwsIHB0ZSk7CisJCWlmIChyZXQgJiBWTV9GQVVMVF9FUlJPUikKKwkJCXJldCAmPSBWTV9GQVVMVF9FUlJPUjsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMTYzLDcgKzIxNjAsNyBAQAogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlnb3RvIHVubG9jazsKIG9vbV9mcmVlX3BhZ2U6Ci0JX19mcmVlX3BhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogb29tOgogCXJldHVybiBWTV9GQVVMVF9PT007CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA3NDY5YzUwLi4wZmIzMzAyIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCS8qCiAJICogVGhpcyBkb2Vzbid0IG5lZWQgYSBsb2NrIHRvIGRvIHBmbl90b19wYWdlKCkuCiAJICogVGhlIHNlY3Rpb24gY2FuJ3QgYmUgcmVtb3ZlZCBoZXJlIGJlY2F1c2Ugb2YgdGhlCi0JICogbWVtb3J5X2Jsb2NrLT5zdGF0ZV9zZW0uCisJICogbWVtb3J5X2Jsb2NrLT5zdGF0ZV9tdXRleC4KIAkgKi8KIAl6b25lID0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpOwogCXBnZGF0X3Jlc2l6ZV9sb2NrKHpvbmUtPnpvbmVfcGdkYXQsICZmbGFncyk7CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDZjN2JhMWEuLjNjMzYwMTEgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xMjk2LDcgKzEyOTYsOSBAQAogCQl1bnNpZ25lZCBuaWQ7CiAKIAkJbmlkID0gaW50ZXJsZWF2ZV9uaWQocG9sLCB2bWEsIGFkZHIsIEhQQUdFX1NISUZUKTsKLQkJX19tcG9sX2ZyZWUocG9sKTsJCS8qIGZpbmlzaGVkIHdpdGggcG9sICovCisJCWlmICh1bmxpa2VseShwb2wgIT0gJmRlZmF1bHRfcG9saWN5ICYmCisJCQkJcG9sICE9IGN1cnJlbnQtPm1lbXBvbGljeSkpCisJCQlfX21wb2xfZnJlZShwb2wpOwkvKiBmaW5pc2hlZCB3aXRoIHBvbCAqLwogCQlyZXR1cm4gTk9ERV9EQVRBKG5pZCktPm5vZGVfem9uZWxpc3RzICsgZ2ZwX3pvbmUoZ2ZwX2ZsYWdzKTsKIAl9CiAKQEAgLTEzNjAsNiArMTM2Miw5IEBACiAJCXVuc2lnbmVkIG5pZDsKIAogCQluaWQgPSBpbnRlcmxlYXZlX25pZChwb2wsIHZtYSwgYWRkciwgUEFHRV9TSElGVCk7CisJCWlmICh1bmxpa2VseShwb2wgIT0gJmRlZmF1bHRfcG9saWN5ICYmCisJCQkJcG9sICE9IGN1cnJlbnQtPm1lbXBvbGljeSkpCisJCQlfX21wb2xfZnJlZShwb2wpOwkvKiBmaW5pc2hlZCB3aXRoIHBvbCAqLwogCQlyZXR1cm4gYWxsb2NfcGFnZV9pbnRlcmxlYXZlKGdmcCwgMCwgbmlkKTsKIAl9CiAJemwgPSB6b25lbGlzdF9wb2xpY3koZ2ZwLCBwb2wpOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGE3MzUwNGYuLjRlMGVjY2MgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTE1MywxMSArMTUzLDYgQEAKICAJCXJldHVybjsKICAJfQogCi0JaWYgKG1lbV9jZ3JvdXBfY2hhcmdlKG5ldywgbW0sIEdGUF9LRVJORUwpKSB7Ci0JCXB0ZV91bm1hcChwdGVwKTsKLQkJcmV0dXJuOwotCX0KLQogIAlwdGwgPSBwdGVfbG9ja3B0cihtbSwgcG1kKTsKICAJc3Bpbl9sb2NrKHB0bCk7CiAJcHRlID0gKnB0ZXA7CkBAIC0xNjksNiArMTY0LDIwIEBACiAJaWYgKCFpc19taWdyYXRpb25fZW50cnkoZW50cnkpIHx8IG1pZ3JhdGlvbl9lbnRyeV90b19wYWdlKGVudHJ5KSAhPSBvbGQpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBZZXMsIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYSBHRlBfQVRPTUlDIG1lbV9jZ3JvdXBfY2hhcmdlLgorCSAqIEZhaWx1cmUgaXMgbm90IGFuIG9wdGlvbiBoZXJlOiB3ZSdyZSBub3cgZXhwZWN0ZWQgdG8gcmVtb3ZlIGV2ZXJ5CisJICogbWlncmF0aW9uIHB0ZSwgYW5kIHdpbGwgY2F1c2UgY3Jhc2hlcyBvdGhlcndpc2UuICBOb3JtYWxseSB0aGlzCisJICogaXMgbm90IGFuIGlzc3VlOiBtZW1fY2dyb3VwX3ByZXBhcmVfbWlncmF0aW9uIGJ1bXBlZCB1cCB0aGUgb2xkCisJICogcGFnZV9jZ3JvdXAgY291bnQgZm9yIHNhZmV0eSwgdGhhdCdzIG5vdyBhdHRhY2hlZCB0byB0aGUgbmV3IHBhZ2UsCisJICogc28gdGhpcyBjaGFyZ2Ugc2hvdWxkIGp1c3QgYmUgYW5vdGhlciBpbmNyZW1lbnRhdGlvbiBvZiB0aGUgY291bnQsCisJICogdG8ga2VlcCBpbiBiYWxhbmNlIHdpdGggcm1hcC5jJ3MgbWVtX2Nncm91cF91bmNoYXJnaW5nLiAgQnV0IGlmCisJICogdGhlcmUncyBiZWVuIGEgZm9yY2VfZW1wdHksIHRob3NlIHJlZmVyZW5jZSBjb3VudHMgbWF5IG5vIGxvbmdlcgorCSAqIGJlIHJlbGlhYmxlLCBhbmQgdGhpcyBjaGFyZ2UgY2FuIGFjdHVhbGx5IGZhaWw6IG9oIHdlbGwsIHdlIGRvbid0CisJICogbWFrZSB0aGUgc2l0dWF0aW9uIGFueSB3b3JzZSBieSBwcm9jZWVkaW5nIGFzIGlmIGl0IGhhZCBzdWNjZWVkZWQuCisJICovCisJbWVtX2Nncm91cF9jaGFyZ2UobmV3LCBtbSwgR0ZQX0FUT01JQyk7CisKIAlnZXRfcGFnZShuZXcpOwogCXB0ZSA9IHB0ZV9ta29sZChta19wdGUobmV3LCB2bWEtPnZtX3BhZ2VfcHJvdCkpOwogCWlmIChpc193cml0ZV9taWdyYXRpb25fZW50cnkoZW50cnkpKQpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNDE5NGI5ZC4uYmViNTkyZiAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC0zNyw2ICszNyw3IEBACiAgKiBiYWRuZXNzIC0gY2FsY3VsYXRlIGEgbnVtZXJpYyB2YWx1ZSBmb3IgaG93IGJhZCB0aGlzIHRhc2sgaGFzIGJlZW4KICAqIEBwOiB0YXNrIHN0cnVjdCBvZiB3aGljaCB0YXNrIHdlIHNob3VsZCBjYWxjdWxhdGUKICAqIEB1cHRpbWU6IGN1cnJlbnQgdXB0aW1lIGluIHNlY29uZHMKKyAqIEBtZW06IHRhcmdldCBtZW1vcnkgY29udHJvbGxlcgogICoKICAqIFRoZSBmb3JtdWxhIHVzZWQgaXMgcmVsYXRpdmVseSBzaW1wbGUgYW5kIGRvY3VtZW50ZWQgaW5saW5lIGluIHRoZQogICogZnVuY3Rpb24uIFRoZSBtYWluIHJhdGlvbmFsZSBpcyB0aGF0IHdlIHdhbnQgdG8gc2VsZWN0IGEgZ29vZCB0YXNrCkBAIC0yNjQsNiArMjY1LDkgQEAKIH0KIAogLyoqCisgKiBkdW1wX3Rhc2tzIC0gZHVtcCBjdXJyZW50IG1lbW9yeSBzdGF0ZSBvZiBhbGwgc3lzdGVtIHRhc2tzCisgKiBAbWVtOiB0YXJnZXQgbWVtb3J5IGNvbnRyb2xsZXIKKyAqCiAgKiBEdW1wcyB0aGUgY3VycmVudCBtZW1vcnkgc3RhdGUgb2YgYWxsIHN5c3RlbSB0YXNrcywgZXhjbHVkaW5nIGtlcm5lbCB0aHJlYWRzLgogICogU3RhdGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGFzaydzIHBpZCwgdWlkLCB0Z2lkLCB2bSBzaXplLCByc3MsIGNwdSwgb29tX2FkagogICogc2NvcmUsIGFuZCBuYW1lLgpAQCAtMjk4LDcgKzMwMiw3IEBACiAJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIH0KIAotLyoqCisvKgogICogU2VuZCBTSUdLSUxMIHRvIHRoZSBzZWxlY3RlZCAgcHJvY2VzcyBpcnJlc3BlY3RpdmUgb2YgIENBUF9TWVNfUkFXX0lPCiAgKiBmbGFnIHRob3VnaCBpdCdzIHVubGlrZWx5IHRoYXQgIHdlIHNlbGVjdCBhIHByb2Nlc3Mgd2l0aCBDQVBfU1lTX1JBV19JTwogICogc2V0LgpAQCAtNDEyLDE0ICs0MTYsMTQgQEAKIAlyZXR1cm4gb29tX2tpbGxfdGFzayhwKTsKIH0KIAotI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX0NPTlQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogdm9pZCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBwb2ludHMgPSAwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCWNncm91cF9sb2NrKCk7Ci0JcmN1X3JlYWRfbG9jaygpOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiByZXRyeToKIAlwID0gc2VsZWN0X2JhZF9wcm9jZXNzKCZwb2ludHMsIG1lbSk7CiAJaWYgKFBUUl9FUlIocCkgPT0gLTFVTCkKQEAgLTQzMiw3ICs0MzYsNyBAQAogCQkJCSJNZW1vcnkgY2dyb3VwIG91dCBvZiBtZW1vcnkiKSkKIAkJZ290byByZXRyeTsKIG91dDoKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJY2dyb3VwX3VubG9jaygpOwogfQogI2VuZGlmCkBAIC01MDQsNiArNTA4LDkgQEAKIAogLyoqCiAgKiBvdXRfb2ZfbWVtb3J5IC0ga2lsbCB0aGUgImJlc3QiIHByb2Nlc3Mgd2hlbiB3ZSBydW4gb3V0IG9mIG1lbW9yeQorICogQHpvbmVsaXN0OiB6b25lbGlzdCBwb2ludGVyCisgKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCisgKiBAb3JkZXI6IGFtb3VudCBvZiBtZW1vcnkgYmVpbmcgcmVxdWVzdGVkIGFzIGEgcG93ZXIgb2YgMgogICoKICAqIElmIHdlIHJ1biBvdXQgb2YgbWVtb3J5LCB3ZSBoYXZlIHRoZSBjaG9pY2UgYmV0d2VlbiBlaXRoZXIKICAqIGtpbGxpbmcgYSByYW5kb20gdGFzayAoYmFkKSwgbGV0dGluZyB0aGUgc3lzdGVtIGNyYXNoICh3b3JzZSkKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA3NWI5NzkzLi4zMmU3OTZhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMjEsMTMgKzIyMiwxOSBAQAogCiBzdGF0aWMgdm9pZCBiYWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiQmFkIHBhZ2Ugc3RhdGUgaW4gcHJvY2VzcyAnJXMnXG4iCi0JCUtFUk5fRU1FUkcgInBhZ2U6JXAgZmxhZ3M6MHglMCpseCBtYXBwaW5nOiVwIG1hcGNvdW50OiVkIGNvdW50OiVkXG4iCi0JCUtFUk5fRU1FUkcgIlRyeWluZyB0byBmaXggaXQgdXAsIGJ1dCBhIHJlYm9vdCBpcyBuZWVkZWRcbiIKLQkJS0VSTl9FTUVSRyAiQmFja3RyYWNlOlxuIiwKKwl2b2lkICpwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOworCisJcHJpbnRrKEtFUk5fRU1FUkcgIkJhZCBwYWdlIHN0YXRlIGluIHByb2Nlc3MgJyVzJ1xuIiBLRVJOX0VNRVJHCisJCSJwYWdlOiVwIGZsYWdzOjB4JTAqbHggbWFwcGluZzolcCBtYXBjb3VudDolZCBjb3VudDolZFxuIiwKIAkJY3VycmVudC0+Y29tbSwgcGFnZSwgKGludCkoMipzaXplb2YodW5zaWduZWQgbG9uZykpLAogCQkodW5zaWduZWQgbG9uZylwYWdlLT5mbGFncywgcGFnZS0+bWFwcGluZywKIAkJcGFnZV9tYXBjb3VudChwYWdlKSwgcGFnZV9jb3VudChwYWdlKSk7CisJaWYgKHBjKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICJjZ3JvdXA6JXBcbiIsIHBjKTsKKwkJcGFnZV9yZXNldF9iYWRfY2dyb3VwKHBhZ2UpOworCX0KKwlwcmludGsoS0VSTl9FTUVSRyAiVHJ5aW5nIHRvIGZpeCBpdCB1cCwgYnV0IGEgcmVib290IGlzIG5lZWRlZFxuIgorCQlLRVJOX0VNRVJHICJCYWNrdHJhY2U6XG4iKTsKIAlkdW1wX3N0YWNrKCk7CiAJcGFnZS0+ZmxhZ3MgJj0gfigxIDw8IFBHX2xydQl8CiAJCQkxIDw8IFBHX3ByaXZhdGUgfApAQCAtNDUzLDYgKzQ2MCw3IEBACiB7CiAJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgfAogCQkocGFnZS0+bWFwcGluZyAhPSBOVUxMKSAgfAorCQkocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkgIT0gTlVMTCkgfAogCQkocGFnZV9jb3VudChwYWdlKSAhPSAwKSAgfAogCQkocGFnZS0+ZmxhZ3MgJiAoCiAJCQkxIDw8IFBHX2xydQl8CkBAIC02MDIsNiArNjEwLDcgQEAKIHsKIAlpZiAodW5saWtlbHkocGFnZV9tYXBjb3VudChwYWdlKSB8CiAJCShwYWdlLT5tYXBwaW5nICE9IE5VTEwpICB8CisJCShwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSAhPSBOVUxMKSB8CiAJCShwYWdlX2NvdW50KHBhZ2UpICE9IDApICB8CiAJCShwYWdlLT5mbGFncyAmICgKIAkJCTEgPDwgUEdfbHJ1CXwKQEAgLTk4OCw3ICs5OTcsNiBAQAogCiAJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKIAkJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQocGFnZV9hZGRyZXNzKHBhZ2UpLCBQQUdFX1NJWkUpOwotCVZNX0JVR19PTihwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSk7CiAJYXJjaF9mcmVlX3BhZ2UocGFnZSwgMCk7CiAJa2VybmVsX21hcF9wYWdlcyhwYWdlLCAxLCAwKTsKIApAQCAtMTI3Niw3ICsxMjg0LDcgQEAKIAlpZiAoIXpsYykKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoamlmZmllcyAtIHpsYy0+bGFzdF9mdWxsX3phcCA+IDEgKiBIWikgeworICAgICAgIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHpsYy0+bGFzdF9mdWxsX3phcCArIEhaKSkgewogCQliaXRtYXBfemVybyh6bGMtPmZ1bGx6b25lcywgTUFYX1pPTkVTX1BFUl9aT05FTElTVCk7CiAJCXpsYy0+bGFzdF9mdWxsX3phcCA9IGppZmZpZXM7CiAJfQpAQCAtMjAyMSw2ICsyMDI5LDcgQEAKIAlpbnQgbiwgdmFsOwogCWludCBtaW5fdmFsID0gSU5UX01BWDsKIAlpbnQgYmVzdF9ub2RlID0gLTE7CisJbm9kZV90b19jcHVtYXNrX3B0cih0bXAsIDApOwogCiAJLyogVXNlIHRoZSBsb2NhbCBub2RlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSAqLwogCWlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spKSB7CkBAIC0yMDI5LDcgKzIwMzgsNiBAQAogCX0KIAogCWZvcl9lYWNoX25vZGVfc3RhdGUobiwgTl9ISUdIX01FTU9SWSkgewotCQljcHVtYXNrX3QgdG1wOwogCiAJCS8qIERvbid0IHdhbnQgYSBub2RlIHRvIGFwcGVhciBtb3JlIHRoYW4gb25jZSAqLwogCQlpZiAobm9kZV9pc3NldChuLCAqdXNlZF9ub2RlX21hc2spKQpAQCAtMjA0Miw4ICsyMDUwLDggQEAKIAkJdmFsICs9IChuIDwgbm9kZSk7CiAKIAkJLyogR2l2ZSBwcmVmZXJlbmNlIHRvIGhlYWRsZXNzIGFuZCB1bnVzZWQgbm9kZXMgKi8KLQkJdG1wID0gbm9kZV90b19jcHVtYXNrKG4pOwotCQlpZiAoIWNwdXNfZW1wdHkodG1wKSkKKwkJbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHRtcCwgbik7CisJCWlmICghY3B1c19lbXB0eSgqdG1wKSkKIAkJCXZhbCArPSBQRU5BTFRZX0ZPUl9OT0RFX1dJVEhfQ1BVUzsKIAogCQkvKiBTbGlnaHQgcHJlZmVyZW5jZSBmb3IgbGVzcyBsb2FkZWQgbm9kZSAqLwpAQCAtMjUyNyw3ICsyNTM1LDYgQEAKIAkJc2V0X3BhZ2VfbGlua3MocGFnZSwgem9uZSwgbmlkLCBwZm4pOwogCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CiAJCXJlc2V0X3BhZ2VfbWFwY291bnQocGFnZSk7Ci0JCXBhZ2VfYXNzaWduX3BhZ2VfY2dyb3VwKHBhZ2UsIE5VTEwpOwogCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7CiAKIAkJLyoKQEAgLTMzMTQsNyArMzMyMSw3IEBACiAgKiAgIC0gbWFyayBhbGwgbWVtb3J5IHF1ZXVlcyBlbXB0eQogICogICAtIGNsZWFyIHRoZSBtZW1vcnkgYml0bWFwcwogICovCi1zdGF0aWMgdm9pZCBfX21lbWluaXQgZnJlZV9hcmVhX2luaXRfY29yZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAorc3RhdGljIHZvaWQgX19wYWdpbmdpbml0IGZyZWVfYXJlYV9pbml0X2NvcmUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAkJdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSwgdW5zaWduZWQgbG9uZyAqemhvbGVzX3NpemUpCiB7CiAJZW51bSB6b25lX3R5cGUgajsKQEAgLTM0MzgsNyArMzQ0NSw3IEBACiAjZW5kaWYgLyogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQICovCiB9CiAKLXZvaWQgX19tZW1pbml0IGZyZWVfYXJlYV9pbml0X25vZGUoaW50IG5pZCwgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKK3ZvaWQgX19wYWdpbmdpbml0IGZyZWVfYXJlYV9pbml0X25vZGUoaW50IG5pZCwgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAkJdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSwgdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X3BmbiwKIAkJdW5zaWduZWQgbG9uZyAqemhvbGVzX3NpemUpCiB7CmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuYwppbmRleCBiNGYyN2QyLi4xY2YxNDE3IDEwMDY0NAotLS0gYS9tbS9wYWdld2Fsay5jCisrKyBiL21tL3BhZ2V3YWxrLmMKQEAgLTc3LDExICs3NywxMSBAQAogCiAvKioKICAqIHdhbGtfcGFnZV9yYW5nZSAtIHdhbGsgYSBtZW1vcnkgbWFwJ3MgcGFnZSB0YWJsZXMgd2l0aCBhIGNhbGxiYWNrCi0gKiBAbW0gLSBtZW1vcnkgbWFwIHRvIHdhbGsKLSAqIEBhZGRyIC0gc3RhcnRpbmcgYWRkcmVzcwotICogQGVuZCAtIGVuZGluZyBhZGRyZXNzCi0gKiBAd2FsayAtIHNldCBvZiBjYWxsYmFja3MgdG8gaW52b2tlIGZvciBlYWNoIGxldmVsIG9mIHRoZSB0cmVlCi0gKiBAcHJpdmF0ZSAtIHByaXZhdGUgZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAbW06IG1lbW9yeSBtYXAgdG8gd2FsaworICogQGFkZHI6IHN0YXJ0aW5nIGFkZHJlc3MKKyAqIEBlbmQ6IGVuZGluZyBhZGRyZXNzCisgKiBAd2Fsazogc2V0IG9mIGNhbGxiYWNrcyB0byBpbnZva2UgZm9yIGVhY2ggbGV2ZWwgb2YgdGhlIHRyZWUKKyAqIEBwcml2YXRlOiBwcml2YXRlIGRhdGEgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICoKICAqIFJlY3Vyc2l2ZWx5IHdhbGsgdGhlIHBhZ2UgdGFibGUgZm9yIHRoZSBtZW1vcnkgYXJlYSBpbiBhIFZNQSwKICAqIGNhbGxpbmcgc3VwcGxpZWQgY2FsbGJhY2tzLiBDYWxsYmFja3MgYXJlIGNhbGxlZCBpbi1vcmRlciAoZmlyc3QKZGlmZiAtLWdpdCBhL21tL3BkZmx1c2guYyBiL21tL3BkZmx1c2guYwppbmRleCA4ZjZlZTA3Li4xYzk2Y2ZjIDEwMDY0NAotLS0gYS9tbS9wZGZsdXNoLmMKKysrIGIvbW0vcGRmbHVzaC5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkvLyBOZWVkZWQgYnkgd3JpdGViYWNrLmgKLSNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4JLy8gUHJvdG90eXBlcyBwZGZsdXNoX29wZXJhdGlvbigpCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIE5lZWRlZCBieSB3cml0ZWJhY2suaAkgICovCisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CS8qIFByb3RvdHlwZXMgcGRmbHVzaF9vcGVyYXRpb24oKSAqLwogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CkBAIC0xODcsOCArMTg3LDggQEAKIAkgKiBUaGlzIGlzIG5lZWRlZCBhcyBwZGZsdXNoJ3MgYXJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgYW5kIGRlc3Ryb3llZC4KIAkgKiBUaGUgYm9vdHRpbWUgcGRmbHVzaCdzIGFyZSBlYXNpbHkgcGxhY2VkIHcvbyB0aGVzZSAyIGxpbmVzLgogCSAqLwotCWNwdXNfYWxsb3dlZCA9IGNwdXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCk7Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVzX2FsbG93ZWQpOworCWNwdXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgJmNwdXNfYWxsb3dlZCk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdXNfYWxsb3dlZCk7CiAKIAlyZXR1cm4gX19wZGZsdXNoKCZteV93b3JrKTsKIH0KZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggYzljNTBjYS4uODc2MmU4OSAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTQ0Myw5ICs0NDMsMTAgQEAKICAqICAgICAgICAgICAgcGFnZWNhY2hlIHBhZ2VzCiAgKgogICogcGFnZV9jYWNoZV9hc3luY19vbmRlbWFuZCgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgdXNlZCB3aGljaAotICogaGFzIHRoZSBQR19yZWFkYWhlYWQgZmxhZzogdGhpcyBpcyBhIG1hcmtlciB0byBzdWdnZXN0IHRoYXQgdGhlIGFwcGxpY2F0aW9uCisgKiBoYXMgdGhlIFBHX3JlYWRhaGVhZCBmbGFnOyB0aGlzIGlzIGEgbWFya2VyIHRvIHN1Z2dlc3QgdGhhdCB0aGUgYXBwbGljYXRpb24KICAqIGhhcyB1c2VkIHVwIGVub3VnaCBvZiB0aGUgcmVhZGFoZWFkIHdpbmRvdyB0aGF0IHdlIHNob3VsZCBzdGFydCBwdWxsaW5nIGluCi0gKiBtb3JlIHBhZ2VzLiAqLworICogbW9yZSBwYWdlcy4KKyAqLwogdm9pZAogcGFnZV9jYWNoZV9hc3luY19yZWFkYWhlYWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEsIHN0cnVjdCBmaWxlICpmaWxwLApkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDhmZDUyN2MuLjk5N2YwNjkgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkgKiBjb3VudGluZyBvbiBiZWhhbGYgb2YgcmVmZXJlbmNlcyBmcm9tIGRpZmZlcmVudAogCQkgKiBjZ3JvdXBzCiAJCSAqLwotCQlpZiAobWVtX2NvbnQgJiYgIXZtX21hdGNoX2Nncm91cCh2bWEtPnZtX21tLCBtZW1fY29udCkpCisJCWlmIChtZW1fY29udCAmJiAhbW1fbWF0Y2hfY2dyb3VwKHZtYS0+dm1fbW0sIG1lbV9jb250KSkKIAkJCWNvbnRpbnVlOwogCQlyZWZlcmVuY2VkICs9IHBhZ2VfcmVmZXJlbmNlZF9vbmUocGFnZSwgdm1hLCAmbWFwY291bnQpOwogCQlpZiAoIW1hcGNvdW50KQpAQCAtMzM1LDYgKzMzNSw3IEBACiAvKioKICAqIHBhZ2VfcmVmZXJlbmNlZF9maWxlIC0gcmVmZXJlbmNlZCBjaGVjayBmb3Igb2JqZWN0LWJhc2VkIHJtYXAKICAqIEBwYWdlOiB0aGUgcGFnZSB3ZSdyZSBjaGVja2luZyByZWZlcmVuY2VzIG9uLgorICogQG1lbV9jb250OiB0YXJnZXQgbWVtb3J5IGNvbnRyb2xsZXIKICAqCiAgKiBGb3IgYW4gb2JqZWN0LWJhc2VkIG1hcHBlZCBwYWdlLCBmaW5kIGFsbCB0aGUgcGxhY2VzIGl0IGlzIG1hcHBlZCBhbmQKICAqIGNoZWNrL2NsZWFyIHRoZSByZWZlcmVuY2VkIGZsYWcuICBUaGlzIGlzIGRvbmUgYnkgZm9sbG93aW5nIHRoZSBwYWdlLT5tYXBwaW5nCkBAIC0zODIsNyArMzgzLDcgQEAKIAkJICogY291bnRpbmcgb24gYmVoYWxmIG9mIHJlZmVyZW5jZXMgZnJvbSBkaWZmZXJlbnQKIAkJICogY2dyb3VwcwogCQkgKi8KLQkJaWYgKG1lbV9jb250ICYmICF2bV9tYXRjaF9jZ3JvdXAodm1hLT52bV9tbSwgbWVtX2NvbnQpKQorCQlpZiAobWVtX2NvbnQgJiYgIW1tX21hdGNoX2Nncm91cCh2bWEtPnZtX21tLCBtZW1fY29udCkpCiAJCQljb250aW51ZTsKIAkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX0xPQ0tFRHxWTV9NQVlTSEFSRSkpCiAJCQkJICA9PSAoVk1fTE9DS0VEfFZNX01BWVNIQVJFKSkgewpAQCAtNDAyLDYgKzQwMyw3IEBACiAgKiBwYWdlX3JlZmVyZW5jZWQgLSB0ZXN0IGlmIHRoZSBwYWdlIHdhcyByZWZlcmVuY2VkCiAgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAogICogQGlzX2xvY2tlZDogY2FsbGVyIGhvbGRzIGxvY2sgb24gdGhlIHBhZ2UKKyAqIEBtZW1fY29udDogdGFyZ2V0IG1lbW9yeSBjb250cm9sbGVyCiAgKgogICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIHRvIGEgcGFnZSwKICAqIHJldHVybnMgdGhlIG51bWJlciBvZiBwdGVzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIHBhZ2UuCkBAIC01MDYsNyArNTA4LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBhZ2VfbWtjbGVhbik7CiAKIC8qKgotICogcGFnZV9zZXRfYW5vbl9ybWFwIC0gc2V0dXAgbmV3IGFub255bW91cyBybWFwCisgKiBfX3BhZ2Vfc2V0X2Fub25fcm1hcCAtIHNldHVwIG5ldyBhbm9ueW1vdXMgcm1hcAogICogQHBhZ2U6CXRoZSBwYWdlIHRvIGFkZCB0aGUgbWFwcGluZyB0bwogICogQHZtYToJdGhlIHZtIGFyZWEgaW4gd2hpY2ggdGhlIG1hcHBpbmcgaXMgYWRkZWQKICAqIEBhZGRyZXNzOgl0aGUgdXNlciB2aXJ0dWFsIGFkZHJlc3MgbWFwcGVkCkBAIC01MzAsNyArNTMyLDcgQEAKIH0KIAogLyoqCi0gKiBwYWdlX3NldF9hbm9uX3JtYXAgLSBzYW5pdHkgY2hlY2sgYW5vbnltb3VzIHJtYXAgYWRkaXRpb24KKyAqIF9fcGFnZV9jaGVja19hbm9uX3JtYXAgLSBzYW5pdHkgY2hlY2sgYW5vbnltb3VzIHJtYXAgYWRkaXRpb24KICAqIEBwYWdlOgl0aGUgcGFnZSB0byBhZGQgdGhlIG1hcHBpbmcgdG8KICAqIEB2bWE6CXRoZSB2bSBhcmVhIGluIHdoaWNoIHRoZSBtYXBwaW5nIGlzIGFkZGVkCiAgKiBAYWRkcmVzczoJdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzIG1hcHBlZApAQCAtNTgzLDcgKzU4NSw3IEBACiAJfQogfQogCi0vKgorLyoqCiAgKiBwYWdlX2FkZF9uZXdfYW5vbl9ybWFwIC0gYWRkIHB0ZSBtYXBwaW5nIHRvIGEgbmV3IGFub255bW91cyBwYWdlCiAgKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCiAgKiBAdm1hOgl0aGUgdm0gYXJlYSBpbiB3aGljaCB0aGUgbWFwcGluZyBpcyBhZGRlZApAQCAtNjIzLDYgKzYyNSw4IEBACiAvKioKICAqIHBhZ2VfZHVwX3JtYXAgLSBkdXBsaWNhdGUgcHRlIG1hcHBpbmcgdG8gYSBwYWdlCiAgKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCisgKiBAdm1hOgl0aGUgdm0gYXJlYSBiZWluZyBkdXBsaWNhdGVkCisgKiBAYWRkcmVzczoJdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzIG1hcHBlZAogICoKICAqIEZvciBjb3B5X3BhZ2VfcmFuZ2Ugb25seTogbWluaW1hbCBleHRyYWN0IGZyb20gcGFnZV9hZGRfZmlsZV9ybWFwIC8KICAqIHBhZ2VfYWRkX2Fub25fcm1hcCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgdGVzdHMgKGFscmVhZHkgY2hlY2tlZCkgc28gaXQncwpAQCAtNjQyLDYgKzY0Niw3IEBACiAvKioKICAqIHBhZ2VfcmVtb3ZlX3JtYXAgLSB0YWtlIGRvd24gcHRlIG1hcHBpbmcgZnJvbSBhIHBhZ2UKICAqIEBwYWdlOiBwYWdlIHRvIHJlbW92ZSBtYXBwaW5nIGZyb20KKyAqIEB2bWE6IHRoZSB2bSBhcmVhIGluIHdoaWNoIHRoZSBtYXBwaW5nIGlzIHJlbW92ZWQKICAqCiAgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIHB0ZSBsb2NrLgogICovCkBAIC04OTAsNiArODk1LDcgQEAKIC8qKgogICogdHJ5X3RvX3VubWFwX2ZpbGUgLSB1bm1hcCBmaWxlIHBhZ2UgdXNpbmcgdGhlIG9iamVjdC1iYXNlZCBybWFwIG1ldGhvZAogICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwCisgKiBAbWlncmF0aW9uOiBtaWdyYXRpb24gZmxhZwogICoKICAqIEZpbmQgYWxsIHRoZSBtYXBwaW5ncyBvZiBhIHBhZ2UgdXNpbmcgdGhlIG1hcHBpbmcgcG9pbnRlciBhbmQgdGhlIHZtYSBjaGFpbnMKICAqIGNvbnRhaW5lZCBpbiB0aGUgYWRkcmVzc19zcGFjZSBzdHJ1Y3QgaXQgcG9pbnRzIHRvLgpAQCAtOTg2LDYgKzk5Miw3IEBACiAvKioKICAqIHRyeV90b191bm1hcCAtIHRyeSB0byByZW1vdmUgYWxsIHBhZ2UgdGFibGUgbWFwcGluZ3MgdG8gYSBwYWdlCiAgKiBAcGFnZTogdGhlIHBhZ2UgdG8gZ2V0IHVubWFwcGVkCisgKiBAbWlncmF0aW9uOiBtaWdyYXRpb24gZmxhZwogICoKICAqIFRyaWVzIHRvIHJlbW92ZSBhbGwgdGhlIHBhZ2UgdGFibGUgZW50cmllcyB3aGljaCBhcmUgbWFwcGluZyB0aGlzCiAgKiBwYWdlLCB1c2VkIGluIHRoZSBwYWdlb3V0IHBhdGguICBDYWxsZXIgbXVzdCBob2xkIHRoZSBwYWdlIGxvY2suCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA5MGI1NzZjLi5mNTE0ZGQzOSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0yNDQsOSArMjQ0LDggQEAKIAl9CiB9CiAKLS8qCisvKioKICAqIHNobWVtX3JlY2FsY19pbm9kZSAtIHJlY2FsY3VsYXRlIHRoZSBzaXplIG9mIGFuIGlub2RlCi0gKgogICogQGlub2RlOiBpbm9kZSB0byByZWNhbGMKICAqCiAgKiBXZSBoYXZlIHRvIGNhbGN1bGF0ZSB0aGUgZnJlZSBibG9ja3Mgc2luY2UgdGhlIG1tIGNhbiBkcm9wCkBAIC0yNzAsOSArMjY5LDggQEAKIAl9CiB9CiAKLS8qCisvKioKICAqIHNobWVtX3N3cF9lbnRyeSAtIGZpbmQgdGhlIHN3YXAgdmVjdG9yIHBvc2l0aW9uIGluIHRoZSBpbmZvIHN0cnVjdHVyZQotICoKICAqIEBpbmZvOiAgaW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBpbm9kZQogICogQGluZGV4OiBpbmRleCBvZiB0aGUgcGFnZSB0byBmaW5kCiAgKiBAcGFnZTogIG9wdGlvbmFsIHBhZ2UgdG8gYWRkIHRvIHRoZSBzdHJ1Y3R1cmUuIEhhcyB0byBiZSBwcmVzZXQgdG8KQEAgLTM3NCwxMyArMzcyLDEzIEBACiAJfQogfQogCi0vKgorLyoqCiAgKiBzaG1lbV9zd3BfYWxsb2MgLSBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzd2FwIGVudHJ5IGZvciB0aGUgcGFnZS4KLSAqICAgICAgICAgICAgICAgICAgIElmIGl0IGRvZXMgbm90IGV4aXN0IGFsbG9jYXRlIHRoZSBlbnRyeS4KLSAqCiAgKiBAaW5mbzoJaW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBpbm9kZQogICogQGluZGV4OglpbmRleCBvZiB0aGUgcGFnZSB0byBmaW5kCiAgKiBAc2dwOgljaGVjayBhbmQgcmVjaGVjayBpX3NpemU/IHNraXAgYWxsb2NhdGlvbj8KKyAqCisgKiBJZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QsIGFsbG9jYXRlIGl0LgogICovCiBzdGF0aWMgc3dwX2VudHJ5X3QgKnNobWVtX3N3cF9hbGxvYyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyBpbmRleCwgZW51bSBzZ3BfdHlwZSBzZ3ApCiB7CkBAIC00NDAsOSArNDM4LDggQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKLS8qCisvKioKICAqIHNobWVtX2ZyZWVfc3dwIC0gZnJlZSBzb21lIHN3YXAgZW50cmllcyBpbiBhIGRpcmVjdG9yeQotICoKICAqIEBkaXI6ICAgICAgICBwb2ludGVyIHRvIHRoZSBkaXJlY3RvcnkKICAqIEBlZGlyOiAgICAgICBwb2ludGVyIGFmdGVyIGxhc3QgZW50cnkgb2YgdGhlIGRpcmVjdG9yeQogICogQHB1bmNoX2xvY2s6IHBvaW50ZXIgdG8gc3BpbmxvY2sgd2hlbiBuZWVkZWQgZm9yIHRoZSBob2xlcHVuY2ggY2FzZQpAQCAtMTM3MCwxNCArMTM2NywxNyBAQAogCQkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKIAkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAkJCXVubG9ja19wYWdlKHN3YXBwYWdlKTsKLQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShzd2FwcGFnZSk7CiAJCQlpZiAoZXJyb3IgPT0gLUVOT01FTSkgewogCQkJCS8qIGFsbG93IHJlY2xhaW0gZnJvbSB0aGlzIG1lbW9yeSBjZ3JvdXAgKi8KLQkJCQllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKE5VTEwsCisJCQkJZXJyb3IgPSBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZShzd2FwcGFnZSwKIAkJCQkJY3VycmVudC0+bW0sIGdmcCAmIH5fX0dGUF9ISUdITUVNKTsKLQkJCQlpZiAoZXJyb3IpCisJCQkJaWYgKGVycm9yKSB7CisJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShzd2FwcGFnZSk7CiAJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2Uoc3dhcHBhZ2UpOwogCQkJfQorCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHN3YXBwYWdlKTsKIAkJCWdvdG8gcmVwZWF0OwogCQl9CiAJfSBlbHNlIGlmIChzZ3AgPT0gU0dQX1JFQUQgJiYgIWZpbGVwYWdlKSB7CkBAIC0yMDE5LDcgKzIwMTksNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKLS8qKgorLyoKICAqIFN1cGVyYmxvY2tzIHdpdGhvdXQgeGF0dHIgaW5vZGUgb3BlcmF0aW9ucyB3aWxsIGdldCBzZWN1cml0eS4qIHhhdHRyCiAgKiBzdXBwb3J0IGZyb20gdGhlIFZGUyAiZm9yIGZyZWUiLiBBcyBzb29uIGFzIHdlIGhhdmUgYW55IG90aGVyIHhhdHRycwogICogbGlrZSBBQ0xzLCB3ZSBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoZSBzZWN1cml0eS4qIGhhbmRsZXJzIGF0CkBAIC0yNTU4LDEyICsyNTU4LDExIEBACiB9CiBtb2R1bGVfaW5pdChpbml0X3RtcGZzKQogCi0vKgorLyoqCiAgKiBzaG1lbV9maWxlX3NldHVwIC0gZ2V0IGFuIHVubGlua2VkIGZpbGUgbGl2aW5nIGluIHRtcGZzCi0gKgogICogQG5hbWU6IG5hbWUgZm9yIGRlbnRyeSAodG8gYmUgc2VlbiBpbiAvcHJvYy88cGlkPi9tYXBzCiAgKiBAc2l6ZTogc2l6ZSB0byBiZSBzZXQgZm9yIHRoZSBmaWxlCi0gKgorICogQGZsYWdzOiB2bV9mbGFncwogICovCiBzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cChjaGFyICpuYW1lLCBsb2ZmX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTI2MTgsOSArMjYxNyw4IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi0vKgorLyoqCiAgKiBzaG1lbV96ZXJvX3NldHVwIC0gc2V0dXAgYSBzaGFyZWQgYW5vbnltb3VzIG1hcHBpbmcKLSAqCiAgKiBAdm1hOiB0aGUgdm1hIHRvIGJlIG1tYXBwZWQgaXMgcHJlcGFyZWQgYnkgZG9fbW1hcF9wZ29mZgogICovCiBpbnQgc2htZW1femVyb19zZXR1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA0NzNlNmMyLi4wMzkyN2NiIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJcmV0dXJuIGk7IFwKIAllbHNlIFwKIAkJaSsrOwotI2luY2x1ZGUgImxpbnV4L2ttYWxsb2Nfc2l6ZXMuaCIKKyNpbmNsdWRlIDxsaW51eC9rbWFsbG9jX3NpemVzLmg+CiAjdW5kZWYgQ0FDSEUKIAkJX19iYWRfc2l6ZSgpOwogCX0gZWxzZQpAQCAtMTE2MCwxNCArMTE2MCwxMyBAQAogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzID0gTlVMTDsKIAlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBub2RlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGVwLCAmY2FjaGVfY2hhaW4sIG5leHQpIHsKIAkJc3RydWN0IGFycmF5X2NhY2hlICpuYzsKIAkJc3RydWN0IGFycmF5X2NhY2hlICpzaGFyZWQ7CiAJCXN0cnVjdCBhcnJheV9jYWNoZSAqKmFsaWVuOwotCQljcHVtYXNrX3QgbWFzazsKIAotCQltYXNrID0gbm9kZV90b19jcHVtYXNrKG5vZGUpOwogCQkvKiBjcHUgaXMgZGVhZDsgbm8gb25lIGNhbiBhbGxvYyBmcm9tIGl0LiAqLwogCQluYyA9IGNhY2hlcC0+YXJyYXlbY3B1XTsKIAkJY2FjaGVwLT5hcnJheVtjcHVdID0gTlVMTDsKQEAgLTExODMsNyArMTE4Miw3IEBACiAJCWlmIChuYykKIAkJCWZyZWVfYmxvY2soY2FjaGVwLCBuYy0+ZW50cnksIG5jLT5hdmFpbCwgbm9kZSk7CiAKLQkJaWYgKCFjcHVzX2VtcHR5KG1hc2spKSB7CisJCWlmICghY3B1c19lbXB0eSgqbWFzaykpIHsKIAkJCXNwaW5fdW5sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7CiAJCQlnb3RvIGZyZWVfYXJyYXlfY2FjaGU7CiAJCX0KQEAgLTE0ODEsNyArMTQ4MCw3IEBACiAJbGlzdF9hZGQoJmNhY2hlX2NhY2hlLm5leHQsICZjYWNoZV9jaGFpbik7CiAJY2FjaGVfY2FjaGUuY29sb3VyX29mZiA9IGNhY2hlX2xpbmVfc2l6ZSgpOwogCWNhY2hlX2NhY2hlLmFycmF5W3NtcF9wcm9jZXNzb3JfaWQoKV0gPSAmaW5pdGFycmF5X2NhY2hlLmNhY2hlOwotCWNhY2hlX2NhY2hlLm5vZGVsaXN0c1tub2RlXSA9ICZpbml0a21lbV9saXN0M1tDQUNIRV9DQUNIRV07CisJY2FjaGVfY2FjaGUubm9kZWxpc3RzW25vZGVdID0gJmluaXRrbWVtX2xpc3QzW0NBQ0hFX0NBQ0hFICsgbm9kZV07CiAKIAkvKgogCSAqIHN0cnVjdCBrbWVtX2NhY2hlIHNpemUgZGVwZW5kcyBvbiBucl9ub2RlX2lkcywgd2hpY2gKQEAgLTE2MDIsNyArMTYwMSw3IEBACiAJCWludCBuaWQ7CiAKIAkJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7Ci0JCQlpbml0X2xpc3QoJmNhY2hlX2NhY2hlLCAmaW5pdGttZW1fbGlzdDNbQ0FDSEVfQ0FDSEVdLCBuaWQpOworCQkJaW5pdF9saXN0KCZjYWNoZV9jYWNoZSwgJmluaXRrbWVtX2xpc3QzW0NBQ0hFX0NBQ0hFICsgbmlkXSwgbmlkKTsKIAogCQkJaW5pdF9saXN0KG1hbGxvY19zaXplc1tJTkRFWF9BQ10uY3NfY2FjaGVwLAogCQkJCSAgJmluaXRrbWVtX2xpc3QzW1NJWkVfQUMgKyBuaWRdLCBuaWQpOwpAQCAtMjk2NCwxMSArMjk2MywxMCBAQAogCXN0cnVjdCBhcnJheV9jYWNoZSAqYWM7CiAJaW50IG5vZGU7CiAKLQlub2RlID0gbnVtYV9ub2RlX2lkKCk7Ci0KLQljaGVja19pcnFfb2ZmKCk7Ci0JYWMgPSBjcHVfY2FjaGVfZ2V0KGNhY2hlcCk7CiByZXRyeToKKwljaGVja19pcnFfb2ZmKCk7CisJbm9kZSA9IG51bWFfbm9kZV9pZCgpOworCWFjID0gY3B1X2NhY2hlX2dldChjYWNoZXApOwogCWJhdGNoY291bnQgPSBhYy0+YmF0Y2hjb3VudDsKIAlpZiAoIWFjLT50b3VjaGVkICYmIGJhdGNoY291bnQgPiBCQVRDSFJFRklMTF9MSU1JVCkgewogCQkvKgpAQCAtMzI4MCw3ICszMjc4LDcgQEAKIAkJaWYgKGxvY2FsX2ZsYWdzICYgX19HRlBfV0FJVCkKIAkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJa21lbV9mbGFnY2hlY2soY2FjaGUsIGZsYWdzKTsKLQkJb2JqID0ga21lbV9nZXRwYWdlcyhjYWNoZSwgZmxhZ3MsIC0xKTsKKwkJb2JqID0ga21lbV9nZXRwYWdlcyhjYWNoZSwgbG9jYWxfZmxhZ3MsIC0xKTsKIAkJaWYgKGxvY2FsX2ZsYWdzICYgX19HRlBfV0FJVCkKIAkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWlmIChvYmopIHsKQEAgLTM2MjUsMTIgKzM2MjMsMTEgQEAKIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7CiAKIC8qKgotICoga21lbV9wdHJfdmFsaWRhdGUgLSBjaGVjayBpZiBhbiB1bnRydXN0ZWQgcG9pbnRlciBtaWdodAotICoJYmUgYSBzbGFiIGVudHJ5LgorICoga21lbV9wdHJfdmFsaWRhdGUgLSBjaGVjayBpZiBhbiB1bnRydXN0ZWQgcG9pbnRlciBtaWdodCBiZSBhIHNsYWIgZW50cnkuCiAgKiBAY2FjaGVwOiB0aGUgY2FjaGUgd2UncmUgY2hlY2tpbmcgYWdhaW5zdAogICogQHB0cjogcG9pbnRlciB0byB2YWxpZGF0ZQogICoKLSAqIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgdW50cnVzdGVkIHBvaW50ZXIgbG9va3Mgc2FuZToKKyAqIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgdW50cnVzdGVkIHBvaW50ZXIgbG9va3Mgc2FuZTsKICAqIGl0IGlzIF9ub3RfIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHBvaW50ZXIgaXMgYWN0dWFsbHkKICAqIHBhcnQgb2YgdGhlIHNsYWIgY2FjaGUgaW4gcXVlc3Rpb24sIGJ1dCBpdCBhdCBsZWFzdAogICogdmFsaWRhdGVzIHRoYXQgdGhlIHBvaW50ZXIgY2FuIGJlIGRlcmVmZXJlbmNlZCBhbmQKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA0YjM4OTVjLi43ZjhhYWEyIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0xNDksMTMgKzE0OSw2IEBACiAvKiBFbmFibGUgdG8gdGVzdCByZWNvdmVyeSBmcm9tIHNsYWIgY29ycnVwdGlvbiBvbiBib290ICovCiAjdW5kZWYgU0xVQl9SRVNJTElFTkNZX1RFU1QKIAotLyoKLSAqIEN1cnJlbnRseSBmYXN0cGF0aCBpcyBub3Qgc3VwcG9ydGVkIGlmIHByZWVtcHRpb24gaXMgZW5hYmxlZC4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0ZBU1RfQ01QWENIR19MT0NBTCkgJiYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFQpCi0jZGVmaW5lIFNMVUJfRkFTVFBBVEgKLSNlbmRpZgotCiAjaWYgUEFHRV9TSElGVCA8PSAxMgogCiAvKgpAQCAtMjk4LDMyICsyOTEsMTYgQEAKICNlbmRpZgogfQogCi0vKgotICogVGhlIGVuZCBwb2ludGVyIGluIGEgc2xhYiBpcyBzcGVjaWFsLiBJdCBwb2ludHMgdG8gdGhlIGZpcnN0IG9iamVjdCBpbiB0aGUKLSAqIHNsYWIgYnV0IGhhcyBiaXQgMCBzZXQgdG8gbWFyayBpdC4KLSAqCi0gKiBOb3RlIHRoYXQgU0xVQiByZWxpZXMgb24gcGFnZV9tYXBwaW5nIHJldHVybmluZyBOVUxMIGZvciBwYWdlcyB3aXRoIGJpdCAwCi0gKiBpbiB0aGUgbWFwcGluZyBzZXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2VuZCh2b2lkICphZGRyKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylhZGRyICYgUEFHRV9NQVBQSU5HX0FOT047Ci19Ci0KLXN0YXRpYyB2b2lkICpzbGFiX2FkZHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIHBhZ2UtPmVuZCAtIFBBR0VfTUFQUElOR19BTk9OOwotfQotCisvKiBWZXJpZnkgdGhhdCBhIHBvaW50ZXIgaGFzIGFuIGFkZHJlc3MgdGhhdCBpcyB2YWxpZCB3aXRoaW4gYSBzbGFiIHBhZ2UgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3ZhbGlkX3BvaW50ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHZvaWQgKm9iamVjdCkKIHsKIAl2b2lkICpiYXNlOwogCi0JaWYgKG9iamVjdCA9PSBwYWdlLT5lbmQpCisJaWYgKCFvYmplY3QpCiAJCXJldHVybiAxOwogCi0JYmFzZSA9IHNsYWJfYWRkcmVzcyhwYWdlKTsKKwliYXNlID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWlmIChvYmplY3QgPCBiYXNlIHx8IG9iamVjdCA+PSBiYXNlICsgcy0+b2JqZWN0cyAqIHMtPnNpemUgfHwKIAkJKG9iamVjdCAtIGJhc2UpICUgcy0+c2l6ZSkgewogCQlyZXR1cm4gMDsKQEAgLTM1Niw4ICszMzMsNyBAQAogCiAvKiBTY2FuIGZyZWVsaXN0ICovCiAjZGVmaW5lIGZvcl9lYWNoX2ZyZWVfb2JqZWN0KF9fcCwgX19zLCBfX2ZyZWUpIFwKLQlmb3IgKF9fcCA9IChfX2ZyZWUpOyAoX19wKSAhPSBwYWdlLT5lbmQ7IF9fcCA9IGdldF9mcmVlcG9pbnRlcigoX19zKSxcCi0JCV9fcCkpCisJZm9yIChfX3AgPSAoX19mcmVlKTsgX19wOyBfX3AgPSBnZXRfZnJlZXBvaW50ZXIoKF9fcyksIF9fcCkpCiAKIC8qIERldGVybWluZSBvYmplY3QgaW5kZXggZnJvbSBhIGdpdmVuIHBvc2l0aW9uICovCiBzdGF0aWMgaW5saW5lIGludCBzbGFiX2luZGV4KHZvaWQgKnAsIHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICphZGRyKQpAQCAtNTA5LDcgKzQ4NSw3IEBACiBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdTggKnApCiB7CiAJdW5zaWduZWQgaW50IG9mZjsJLyogT2Zmc2V0IG9mIGxhc3QgYnl0ZSAqLwotCXU4ICphZGRyID0gc2xhYl9hZGRyZXNzKHBhZ2UpOworCXU4ICphZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCiAJcHJpbnRfdHJhY2tpbmcocywgcCk7CiAKQEAgLTY0NCw3ICs2MjAsNyBAQAogICogCUEuIEZyZWUgcG9pbnRlciAoaWYgd2UgY2Fubm90IG92ZXJ3cml0ZSBvYmplY3Qgb24gZnJlZSkKICAqIAlCLiBUcmFja2luZyBkYXRhIGZvciBTTEFCX1NUT1JFX1VTRVIKICAqIAlDLiBQYWRkaW5nIHRvIHJlYWNoIHJlcXVpcmVkIGFsaWdubWVudCBib3VuZGFyeSBvciBhdCBtaW5pbnVtCi0gKiAJCW9uZSB3b3JkIGlmIGRlYnVnZ2luIGlzIG9uIHRvIGJlIGFibGUgdG8gZGV0ZWN0IHdyaXRlcworICogCQlvbmUgd29yZCBpZiBkZWJ1Z2dpbmcgaXMgb24gdG8gYmUgYWJsZSB0byBkZXRlY3Qgd3JpdGVzCiAgKiAJCWJlZm9yZSB0aGUgd29yZCBib3VuZGFyeS4KICAqCiAgKglQYWRkaW5nIGlzIGRvbmUgdXNpbmcgMHg1YSAoUE9JU09OX0lOVVNFKQpAQCAtNjg3LDcgKzY2Myw3IEBACiAJaWYgKCEocy0+ZmxhZ3MgJiBTTEFCX1BPSVNPTikpCiAJCXJldHVybiAxOwogCi0Jc3RhcnQgPSBzbGFiX2FkZHJlc3MocGFnZSk7CisJc3RhcnQgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJZW5kID0gc3RhcnQgKyAoUEFHRV9TSVpFIDw8IHMtPm9yZGVyKTsKIAlsZW5ndGggPSBzLT5vYmplY3RzICogcy0+c2l6ZTsKIAlyZW1haW5kZXIgPSBlbmQgLSAoc3RhcnQgKyBsZW5ndGgpOwpAQCAtNzU1LDcgKzczMSw3IEBACiAJCSAqIG9mIHRoZSBmcmVlIG9iamVjdHMgaW4gdGhpcyBzbGFiLiBNYXkgY2F1c2UKIAkJICogYW5vdGhlciBlcnJvciBiZWNhdXNlIHRoZSBvYmplY3QgY291bnQgaXMgbm93IHdyb25nLgogCQkgKi8KLQkJc2V0X2ZyZWVwb2ludGVyKHMsIHAsIHBhZ2UtPmVuZCk7CisJCXNldF9mcmVlcG9pbnRlcihzLCBwLCBOVUxMKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtNzg5LDE4ICs3NjUsMTggQEAKIAl2b2lkICpmcCA9IHBhZ2UtPmZyZWVsaXN0OwogCXZvaWQgKm9iamVjdCA9IE5VTEw7CiAKLQl3aGlsZSAoZnAgIT0gcGFnZS0+ZW5kICYmIG5yIDw9IHMtPm9iamVjdHMpIHsKKwl3aGlsZSAoZnAgJiYgbnIgPD0gcy0+b2JqZWN0cykgewogCQlpZiAoZnAgPT0gc2VhcmNoKQogCQkJcmV0dXJuIDE7CiAJCWlmICghY2hlY2tfdmFsaWRfcG9pbnRlcihzLCBwYWdlLCBmcCkpIHsKIAkJCWlmIChvYmplY3QpIHsKIAkJCQlvYmplY3RfZXJyKHMsIHBhZ2UsIG9iamVjdCwKIAkJCQkJIkZyZWVjaGFpbiBjb3JydXB0Iik7Ci0JCQkJc2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCwgcGFnZS0+ZW5kKTsKKwkJCQlzZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0LCBOVUxMKTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJc2xhYl9lcnIocywgcGFnZSwgIkZyZWVwb2ludGVyIGNvcnJ1cHQiKTsKLQkJCQlwYWdlLT5mcmVlbGlzdCA9IHBhZ2UtPmVuZDsKKwkJCQlwYWdlLT5mcmVlbGlzdCA9IE5VTEw7CiAJCQkJcGFnZS0+aW51c2UgPSBzLT5vYmplY3RzOwogCQkJCXNsYWJfZml4KHMsICJGcmVlbGlzdCBjbGVhcmVkIik7CiAJCQkJcmV0dXJuIDA7CkBAIC04NjEsNiArODM3LDM1IEBACiAJc3Bpbl91bmxvY2soJm4tPmxpc3RfbG9jayk7CiB9CiAKKy8qIFRyYWNraW5nIG9mIHRoZSBudW1iZXIgb2Ygc2xhYnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKQoreworCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBnZXRfbm9kZShzLCBub2RlKTsKKworCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZuLT5ucl9zbGFicyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUpCit7CisJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGdldF9ub2RlKHMsIG5vZGUpOworCisJLyoKKwkgKiBNYXkgYmUgY2FsbGVkIGVhcmx5IGluIG9yZGVyIHRvIGFsbG9jYXRlIGEgc2xhYiBmb3IgdGhlCisJICoga21lbV9jYWNoZV9ub2RlIHN0cnVjdHVyZS4gU29sdmUgdGhlIGNoaWNrZW4tZWdnCisJICogZGlsZW1tYSBieSBkZWZlcnJpbmcgdGhlIGluY3JlbWVudCBvZiB0aGUgY291bnQgZHVyaW5nCisJICogYm9vdHN0cmFwIChzZWUgZWFybHlfa21lbV9jYWNoZV9ub2RlX2FsbG9jKS4KKwkgKi8KKwlpZiAoIU5VTUFfQlVJTEQgfHwgbikKKwkJYXRvbWljX2xvbmdfaW5jKCZuLT5ucl9zbGFicyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKQoreworCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBnZXRfbm9kZShzLCBub2RlKTsKKworCWF0b21pY19sb25nX2RlYygmbi0+bnJfc2xhYnMpOworfQorCisvKiBPYmplY3QgZGVidWcgY2hlY2tzIGZvciBhbGxvYy9mcmVlIHBhdGhzICovCiBzdGF0aWMgdm9pZCBzZXR1cF9vYmplY3RfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQkJCQl2b2lkICpvYmplY3QpCiB7CkBAIC04NzcsNyArODgyLDcgQEAKIAlpZiAoIWNoZWNrX3NsYWIocywgcGFnZSkpCiAJCWdvdG8gYmFkOwogCi0JaWYgKG9iamVjdCAmJiAhb25fZnJlZWxpc3QocywgcGFnZSwgb2JqZWN0KSkgeworCWlmICghb25fZnJlZWxpc3QocywgcGFnZSwgb2JqZWN0KSkgewogCQlvYmplY3RfZXJyKHMsIHBhZ2UsIG9iamVjdCwgIk9iamVjdCBhbHJlYWR5IGFsbG9jYXRlZCIpOwogCQlnb3RvIGJhZDsKIAl9CkBAIC04ODcsNyArODkyLDcgQEAKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKG9iamVjdCAmJiAhY2hlY2tfb2JqZWN0KHMsIHBhZ2UsIG9iamVjdCwgMCkpCisJaWYgKCFjaGVja19vYmplY3QocywgcGFnZSwgb2JqZWN0LCAwKSkKIAkJZ290byBiYWQ7CiAKIAkvKiBTdWNjZXNzIHBlcmZvcm0gc3BlY2lhbCBkZWJ1ZyBhY3Rpdml0aWVzIGZvciBhbGxvY3MgKi8KQEAgLTkwNiw3ICs5MTEsNyBAQAogCQkgKi8KIAkJc2xhYl9maXgocywgIk1hcmtpbmcgYWxsIG9iamVjdHMgdXNlZCIpOwogCQlwYWdlLT5pbnVzZSA9IHMtPm9iamVjdHM7Ci0JCXBhZ2UtPmZyZWVsaXN0ID0gcGFnZS0+ZW5kOworCQlwYWdlLT5mcmVlbGlzdCA9IE5VTEw7CiAJfQogCXJldHVybiAwOwogfQpAQCAtOTQ2LDcgKzk1MSw3IEBACiAJfQogCiAJLyogU3BlY2lhbCBkZWJ1ZyBhY3Rpdml0aWVzIGZvciBmcmVlaW5nIG9iamVjdHMgKi8KLQlpZiAoIVNsYWJGcm96ZW4ocGFnZSkgJiYgcGFnZS0+ZnJlZWxpc3QgPT0gcGFnZS0+ZW5kKQorCWlmICghU2xhYkZyb3plbihwYWdlKSAmJiAhcGFnZS0+ZnJlZWxpc3QpCiAJCXJlbW92ZV9mdWxsKHMsIHBhZ2UpOwogCWlmIChzLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikKIAkJc2V0X3RyYWNrKHMsIG9iamVjdCwgVFJBQ0tfRlJFRSwgYWRkcik7CkBAIC0xMDIyLDMwICsxMDI3LDExIEBACiAJdm9pZCAoKmN0b3IpKHN0cnVjdCBrbWVtX2NhY2hlICosIHZvaWQgKikpCiB7CiAJLyoKLQkgKiBUaGUgcGFnZS0+b2Zmc2V0IGZpZWxkIGlzIG9ubHkgMTYgYml0IHdpZGUuIFRoaXMgaXMgYW4gb2Zmc2V0Ci0JICogaW4gdW5pdHMgb2Ygd29yZHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGFuIG9iamVjdC4gSWYgdGhlIHNsYWIKLQkgKiBzaXplIGlzIGJpZ2dlciB0aGVuIHdlIGNhbm5vdCBtb3ZlIHRoZSBmcmVlIHBvaW50ZXIgYmVoaW5kIHRoZQotCSAqIG9iamVjdCBhbnltb3JlLgotCSAqCi0JICogT24gMzIgYml0IHBsYXRmb3JtcyB0aGUgbGltaXQgaXMgMjU2ay4gT24gNjRiaXQgcGxhdGZvcm1zCi0JICogdGhlIGxpbWl0IGlzIDUxMmsuCi0JICoKLQkgKiBEZWJ1Z2dpbmcgb3IgY3RvciBtYXkgY3JlYXRlIGEgbmVlZCB0byBtb3ZlIHRoZSBmcmVlCi0JICogcG9pbnRlci4gRmFpbCBpZiB0aGlzIGhhcHBlbnMuCisJICogRW5hYmxlIGRlYnVnZ2luZyBpZiBzZWxlY3RlZCBvbiB0aGUga2VybmVsIGNvbW1hbmRsaW5lLgogCSAqLwotCWlmIChvYmpzaXplID49IDY1NTM1ICogc2l6ZW9mKHZvaWQgKikpIHsKLQkJQlVHX09OKGZsYWdzICYgKFNMQUJfUkVEX1pPTkUgfCBTTEFCX1BPSVNPTiB8Ci0JCQkJU0xBQl9TVE9SRV9VU0VSIHwgU0xBQl9ERVNUUk9ZX0JZX1JDVSkpOwotCQlCVUdfT04oY3Rvcik7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogRW5hYmxlIGRlYnVnZ2luZyBpZiBzZWxlY3RlZCBvbiB0aGUga2VybmVsIGNvbW1hbmRsaW5lLgotCQkgKi8KLQkJaWYgKHNsdWJfZGVidWcgJiYgKCFzbHViX2RlYnVnX3NsYWJzIHx8Ci0JCSAgICBzdHJuY21wKHNsdWJfZGVidWdfc2xhYnMsIG5hbWUsCi0JCQlzdHJsZW4oc2x1Yl9kZWJ1Z19zbGFicykpID09IDApKQotCQkJCWZsYWdzIHw9IHNsdWJfZGVidWc7Ci0JfQorCWlmIChzbHViX2RlYnVnICYmICghc2x1Yl9kZWJ1Z19zbGFicyB8fAorCSAgICBzdHJuY21wKHNsdWJfZGVidWdfc2xhYnMsIG5hbWUsIHN0cmxlbihzbHViX2RlYnVnX3NsYWJzKSkgPT0gMCkpCisJCQlmbGFncyB8PSBzbHViX2RlYnVnOwogCiAJcmV0dXJuIGZsYWdzOwogfQpAQCAtMTA3MSw2ICsxMDU3LDExIEBACiAJcmV0dXJuIGZsYWdzOwogfQogI2RlZmluZSBzbHViX2RlYnVnIDAKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKQorCQkJCQkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlKSB7fQogI2VuZGlmCiAvKgogICogU2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nCkBAIC0xMTA5LDcgKzExMDAsNiBAQAogc3RhdGljIHN0cnVjdCBwYWdlICpuZXdfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47CiAJdm9pZCAqc3RhcnQ7CiAJdm9pZCAqbGFzdDsKIAl2b2lkICpwOwpAQCAtMTEyMSw5ICsxMTExLDcgQEAKIAlpZiAoIXBhZ2UpCiAJCWdvdG8gb3V0OwogCi0JbiA9IGdldF9ub2RlKHMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKLQlpZiAobikKLQkJYXRvbWljX2xvbmdfaW5jKCZuLT5ucl9zbGFicyk7CisJaW5jX3NsYWJzX25vZGUocywgcGFnZV90b19uaWQocGFnZSkpOwogCXBhZ2UtPnNsYWIgPSBzOwogCXBhZ2UtPmZsYWdzIHw9IDEgPDwgUEdfc2xhYjsKIAlpZiAocy0+ZmxhZ3MgJiAoU0xBQl9ERUJVR19GUkVFIHwgU0xBQl9SRURfWk9ORSB8IFNMQUJfUE9JU09OIHwKQEAgLTExMzEsNyArMTExOSw2IEBACiAJCVNldFNsYWJEZWJ1ZyhwYWdlKTsKIAogCXN0YXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCXBhZ2UtPmVuZCA9IHN0YXJ0ICsgMTsKIAogCWlmICh1bmxpa2VseShzLT5mbGFncyAmIFNMQUJfUE9JU09OKSkKIAkJbWVtc2V0KHN0YXJ0LCBQT0lTT05fSU5VU0UsIFBBR0VfU0laRSA8PCBzLT5vcmRlcik7CkBAIC0xMTQzLDcgKzExMzAsNyBAQAogCQlsYXN0ID0gcDsKIAl9CiAJc2V0dXBfb2JqZWN0KHMsIHBhZ2UsIGxhc3QpOwotCXNldF9mcmVlcG9pbnRlcihzLCBsYXN0LCBwYWdlLT5lbmQpOworCXNldF9mcmVlcG9pbnRlcihzLCBsYXN0LCBOVUxMKTsKIAogCXBhZ2UtPmZyZWVsaXN0ID0gc3RhcnQ7CiAJcGFnZS0+aW51c2UgPSAwOwpAQCAtMTE1OSw3ICsxMTQ2LDcgQEAKIAkJdm9pZCAqcDsKIAogCQlzbGFiX3BhZF9jaGVjayhzLCBwYWdlKTsKLQkJZm9yX2VhY2hfb2JqZWN0KHAsIHMsIHNsYWJfYWRkcmVzcyhwYWdlKSkKKwkJZm9yX2VhY2hfb2JqZWN0KHAsIHMsIHBhZ2VfYWRkcmVzcyhwYWdlKSkKIAkJCWNoZWNrX29iamVjdChzLCBwYWdlLCBwLCAwKTsKIAkJQ2xlYXJTbGFiRGVidWcocGFnZSk7CiAJfQpAQCAtMTE2OSw3ICsxMTU2LDggQEAKIAkJTlJfU0xBQl9SRUNMQUlNQUJMRSA6IE5SX1NMQUJfVU5SRUNMQUlNQUJMRSwKIAkJLXBhZ2VzKTsKIAotCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOworCV9fQ2xlYXJQYWdlU2xhYihwYWdlKTsKKwlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwogCV9fZnJlZV9wYWdlcyhwYWdlLCBzLT5vcmRlcik7CiB9CiAKQEAgLTExOTYsMTEgKzExODQsNyBAQAogCiBzdGF0aWMgdm9pZCBkaXNjYXJkX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBnZXRfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSk7Ci0KLQlhdG9taWNfbG9uZ19kZWMoJm4tPm5yX3NsYWJzKTsKLQlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwotCV9fQ2xlYXJQYWdlU2xhYihwYWdlKTsKKwlkZWNfc2xhYnNfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSk7CiAJZnJlZV9zbGFiKHMsIHBhZ2UpOwogfQogCkBAIC0xMzE0LDcgKzEyOTgsNyBAQAogCSAqIG1heSByZXR1cm4gb2ZmIG5vZGUgb2JqZWN0cyBiZWNhdXNlIHBhcnRpYWwgc2xhYnMgYXJlIG9idGFpbmVkCiAJICogZnJvbSBvdGhlciBub2RlcyBhbmQgZmlsbGVkIHVwLgogCSAqCi0JICogSWYgL3N5cy9zbGFiL3h4L2RlZnJhZ19yYXRpbyBpcyBzZXQgdG8gMTAwICh3aGljaCBtYWtlcworCSAqIElmIC9zeXMva2VybmVsL3NsYWIveHgvZGVmcmFnX3JhdGlvIGlzIHNldCB0byAxMDAgKHdoaWNoIG1ha2VzCiAJICogZGVmcmFnX3JhdGlvID0gMTAwMCkgdGhlbiBldmVyeSAod2VsbCBhbG1vc3QpIGFsbG9jYXRpb24gd2lsbAogCSAqIGZpcnN0IGF0dGVtcHQgdG8gZGVmcmFnIHNsYWIgY2FjaGVzIG9uIG90aGVyIG5vZGVzLiBUaGlzIG1lYW5zCiAJICogc2Nhbm5pbmcgb3ZlciBhbGwgbm9kZXMgdG8gbG9vayBmb3IgcGFydGlhbCBzbGFicyB3aGljaCBtYXkgYmUKQEAgLTEzNzMsNyArMTM1Nyw3IEBACiAJQ2xlYXJTbGFiRnJvemVuKHBhZ2UpOwogCWlmIChwYWdlLT5pbnVzZSkgewogCi0JCWlmIChwYWdlLT5mcmVlbGlzdCAhPSBwYWdlLT5lbmQpIHsKKwkJaWYgKHBhZ2UtPmZyZWVsaXN0KSB7CiAJCQlhZGRfcGFydGlhbChuLCBwYWdlLCB0YWlsKTsKIAkJCXN0YXQoYywgdGFpbCA/IERFQUNUSVZBVEVfVE9fVEFJTCA6IERFQUNUSVZBVEVfVE9fSEVBRCk7CiAJCX0gZWxzZSB7CkBAIC0xMzg5LDkgKzEzNzMsMTEgQEAKIAkJCSAqIEFkZGluZyBhbiBlbXB0eSBzbGFiIHRvIHRoZSBwYXJ0aWFsIHNsYWJzIGluIG9yZGVyCiAJCQkgKiB0byBhdm9pZCBwYWdlIGFsbG9jYXRvciBvdmVyaGVhZC4gVGhpcyBzbGFiIG5lZWRzCiAJCQkgKiB0byBjb21lIGFmdGVyIHRoZSBvdGhlciBzbGFicyB3aXRoIG9iamVjdHMgaW4KLQkJCSAqIG9yZGVyIHRvIGZpbGwgdGhlbSB1cC4gVGhhdCB3YXkgdGhlIHNpemUgb2YgdGhlCi0JCQkgKiBwYXJ0aWFsIGxpc3Qgc3RheXMgc21hbGwuIGttZW1fY2FjaGVfc2hyaW5rIGNhbgotCQkJICogcmVjbGFpbSBlbXB0eSBzbGFicyBmcm9tIHRoZSBwYXJ0aWFsIGxpc3QuCisJCQkgKiBzbyB0aGF0IHRoZSBvdGhlcnMgZ2V0IGZpbGxlZCBmaXJzdC4gVGhhdCB3YXkgdGhlCisJCQkgKiBzaXplIG9mIHRoZSBwYXJ0aWFsIGxpc3Qgc3RheXMgc21hbGwuCisJCQkgKgorCQkJICoga21lbV9jYWNoZV9zaHJpbmsgY2FuIHJlY2xhaW0gYW55IGVtcHR5IHNsYWJzIGZyb20gdGhlCisJCQkgKiBwYXJ0aWFsIGxpc3QuCiAJCQkgKi8KIAkJCWFkZF9wYXJ0aWFsKG4sIHBhZ2UsIDEpOwogCQkJc2xhYl91bmxvY2socGFnZSk7CkBAIC0xNDExLDE4ICsxMzk3LDE0IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBjLT5wYWdlOwogCWludCB0YWlsID0gMTsKIAotCWlmIChjLT5mcmVlbGlzdCkKKwlpZiAocGFnZS0+ZnJlZWxpc3QpCiAJCXN0YXQoYywgREVBQ1RJVkFURV9SRU1PVEVfRlJFRVMpOwogCS8qCi0JICogTWVyZ2UgY3B1IGZyZWVsaXN0IGludG8gZnJlZWxpc3QuIFR5cGljYWxseSB3ZSBnZXQgaGVyZQorCSAqIE1lcmdlIGNwdSBmcmVlbGlzdCBpbnRvIHNsYWIgZnJlZWxpc3QuIFR5cGljYWxseSB3ZSBnZXQgaGVyZQogCSAqIGJlY2F1c2UgYm90aCBmcmVlbGlzdHMgYXJlIGVtcHR5LiBTbyB0aGlzIGlzIHVubGlrZWx5CiAJICogdG8gb2NjdXIuCi0JICoKLQkgKiBXZSBuZWVkIHRvIHVzZSBfaXNfZW5kIGhlcmUgYmVjYXVzZSBkZWFjdGl2YXRlIHNsYWIgbWF5Ci0JICogYmUgY2FsbGVkIGZvciBhIGRlYnVnIHNsYWIuIFRoZW4gYy0+ZnJlZWxpc3QgbWF5IGNvbnRhaW4KLQkgKiBhIGR1bW15IHBvaW50ZXIuCiAJICovCi0Jd2hpbGUgKHVubGlrZWx5KCFpc19lbmQoYy0+ZnJlZWxpc3QpKSkgeworCXdoaWxlICh1bmxpa2VseShjLT5mcmVlbGlzdCkpIHsKIAkJdm9pZCAqKm9iamVjdDsKIAogCQl0YWlsID0gMDsJLyogSG90IG9iamVjdHMuIFB1dCB0aGUgc2xhYiBmaXJzdCAqLwpAQCAtMTQ0OSw2ICsxNDMxLDcgQEAKIAogLyoKICAqIEZsdXNoIGNwdSBzbGFiLgorICoKICAqIENhbGxlZCBmcm9tIElQSSBoYW5kbGVyIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfY3B1X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBjcHUpCkBAIC0xNTA3LDQzICsxNDkwLDQxIEBACiAgKiByZXN0IG9mIHRoZSBmcmVlbGlzdCB0byB0aGUgbG9ja2xlc3MgZnJlZWxpc3QuCiAgKgogICogQW5kIGlmIHdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIG5ldyBzbGFiIGZyb20gdGhlIHBhcnRpYWwgc2xhYiBsaXN0cyB0aGVuCi0gKiB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHNsYWIuIFRoaXMgaXMgc2xvd2VzdCBwYXRoIHNpbmNlIHdlIG1heSBzbGVlcC4KKyAqIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgc2xhYi4gVGhpcyBpcyB0aGUgc2xvd2VzdCBwYXRoIHNpbmNlIGl0IGludm9sdmVzCisgKiBhIGNhbGwgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZCB0aGUgc2V0dXAgb2YgYSBuZXcgc2xhYi4KICAqLwogc3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLCB2b2lkICphZGRyLCBzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMpCiB7CiAJdm9pZCAqKm9iamVjdDsKIAlzdHJ1Y3QgcGFnZSAqbmV3OwotI2lmZGVmIFNMVUJfRkFTVFBBVEgKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotI2VuZGlmCisJLyogV2UgaGFuZGxlIF9fR0ZQX1pFUk8gaW4gdGhlIGNhbGxlciAqLworCWdmcGZsYWdzICY9IH5fX0dGUF9aRVJPOworCiAJaWYgKCFjLT5wYWdlKQogCQlnb3RvIG5ld19zbGFiOwogCiAJc2xhYl9sb2NrKGMtPnBhZ2UpOwogCWlmICh1bmxpa2VseSghbm9kZV9tYXRjaChjLCBub2RlKSkpCiAJCWdvdG8gYW5vdGhlcl9zbGFiOworCiAJc3RhdChjLCBBTExPQ19SRUZJTEwpOworCiBsb2FkX2ZyZWVsaXN0OgogCW9iamVjdCA9IGMtPnBhZ2UtPmZyZWVsaXN0OwotCWlmICh1bmxpa2VseShvYmplY3QgPT0gYy0+cGFnZS0+ZW5kKSkKKwlpZiAodW5saWtlbHkoIW9iamVjdCkpCiAJCWdvdG8gYW5vdGhlcl9zbGFiOwogCWlmICh1bmxpa2VseShTbGFiRGVidWcoYy0+cGFnZSkpKQogCQlnb3RvIGRlYnVnOwogCi0Jb2JqZWN0ID0gYy0+cGFnZS0+ZnJlZWxpc3Q7CiAJYy0+ZnJlZWxpc3QgPSBvYmplY3RbYy0+b2Zmc2V0XTsKIAljLT5wYWdlLT5pbnVzZSA9IHMtPm9iamVjdHM7Ci0JYy0+cGFnZS0+ZnJlZWxpc3QgPSBjLT5wYWdlLT5lbmQ7CisJYy0+cGFnZS0+ZnJlZWxpc3QgPSBOVUxMOwogCWMtPm5vZGUgPSBwYWdlX3RvX25pZChjLT5wYWdlKTsKIHVubG9ja19vdXQ6CiAJc2xhYl91bmxvY2soYy0+cGFnZSk7CiAJc3RhdChjLCBBTExPQ19TTE9XUEFUSCk7Ci0jaWZkZWYgU0xVQl9GQVNUUEFUSAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgogCXJldHVybiBvYmplY3Q7CiAKIGFub3RoZXJfc2xhYjoKQEAgLTE1NzUsOSArMTU1Niw3IEBACiAJCWMtPnBhZ2UgPSBuZXc7CiAJCWdvdG8gbG9hZF9mcmVlbGlzdDsKIAl9Ci0jaWZkZWYgU0xVQl9GQVNUUEFUSAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgorCiAJLyoKIAkgKiBObyBtZW1vcnkgYXZhaWxhYmxlLgogCSAqCkBAIC0xNTg5LDEyICsxNTY4LDE3IEBACiAJICogVGhhdCBpcyBvbmx5IHBvc3NpYmxlIGlmIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0IHRoYXQgYXJlIGJlaW5nCiAJICogY2hlY2tlZCB3aGVuIGEgc2xhYiBpcyBjcmVhdGVkLgogCSAqLwotCWlmICghKGdmcGZsYWdzICYgX19HRlBfTk9SRVRSWSkgJiYgKHMtPmZsYWdzICYgX19QQUdFX0FMTE9DX0ZBTExCQUNLKSkKLQkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uocy0+b2Jqc2l6ZSwgZ2ZwZmxhZ3MpOwotCisJaWYgKCEoZ2ZwZmxhZ3MgJiBfX0dGUF9OT1JFVFJZKSAmJgorCQkJCShzLT5mbGFncyAmIF9fUEFHRV9BTExPQ19GQUxMQkFDSykpIHsKKwkJaWYgKGdmcGZsYWdzICYgX19HRlBfV0FJVCkKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJb2JqZWN0ID0ga21hbGxvY19sYXJnZShzLT5vYmpzaXplLCBnZnBmbGFncyk7CisJCWlmIChnZnBmbGFncyAmIF9fR0ZQX1dBSVQpCisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlyZXR1cm4gb2JqZWN0OworCX0KIAlyZXR1cm4gTlVMTDsKIGRlYnVnOgotCW9iamVjdCA9IGMtPnBhZ2UtPmZyZWVsaXN0OwogCWlmICghYWxsb2NfZGVidWdfcHJvY2Vzc2luZyhzLCBjLT5wYWdlLCBvYmplY3QsIGFkZHIpKQogCQlnb3RvIGFub3RoZXJfc2xhYjsKIApAQCAtMTYxOSwzOSArMTYwMywxMSBAQAogewogCXZvaWQgKipvYmplY3Q7CiAJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjOwotCi0vKgotICogVGhlIFNMVUJfRkFTVFBBVEggcGF0aCBpcyBwcm92aXNpb25hbCBhbmQgaXMgY3VycmVudGx5IGRpc2FibGVkIGlmIHRoZQotICoga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggcHJlZW1wdGlvbiBvciBpZiB0aGUgYXJjaCBkb2VzIG5vdCBzdXBwb3J0Ci0gKiBmYXN0IGNtcHhjaGcgb3BlcmF0aW9ucy4gVGhlcmUgYXJlIGEgY291cGxlIG9mIGNvbWluZyBjaGFuZ2VzIHRoYXQgd2lsbAotICogc2ltcGxpZnkgbWF0dGVycyBhbmQgYWxsb3cgcHJlZW1wdGlvbi4gVWx0aW1hdGVseSB3ZSBtYXkgZW5kIHVwIG1ha2luZwotICogU0xVQl9GQVNUUEFUSCB0aGUgZGVmYXVsdC4KLSAqCi0gKiAxLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBwZXIgY3B1IGFsbG9jYXRvciB3aWxsIGF2b2lkIGFycmF5IGxvb2t1cHMKLSAqICAgIHRocm91Z2ggZ2V0X2NwdV9zbGFiKCkuIEEgc3BlY2lhbCByZWdpc3RlciBjYW4gYmUgdXNlZCBpbnN0ZWFkLgotICoKLSAqIDIuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgcGVyIGNwdSBhdG9taWMgb3BlcmF0aW9ucyAoY3B1X29wcykgbWVhbnMgdGhhdAotICogICAgd2UgY2FuIHJlYWxpemUgdGhlIGxvZ2ljIGhlcmUgZW50aXJlbHkgd2l0aCBwZXIgY3B1IGF0b21pY3MuIFRoZQotICogICAgcGVyIGNwdSBhdG9taWMgb3BzIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBwcmVlbXB0aW9uIGlzc3Vlcy4KLSAqLwotCi0jaWZkZWYgU0xVQl9GQVNUUEFUSAotCWMgPSBnZXRfY3B1X3NsYWIocywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JZG8gewotCQlvYmplY3QgPSBjLT5mcmVlbGlzdDsKLQkJaWYgKHVubGlrZWx5KGlzX2VuZChvYmplY3QpIHx8ICFub2RlX21hdGNoKGMsIG5vZGUpKSkgewotCQkJb2JqZWN0ID0gX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhZGRyLCBjKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXN0YXQoYywgQUxMT0NfRkFTVFBBVEgpOwotCX0gd2hpbGUgKGNtcHhjaGdfbG9jYWwoJmMtPmZyZWVsaXN0LCBvYmplY3QsIG9iamVjdFtjLT5vZmZzZXRdKQotCQkJCQkJCQkhPSBvYmplY3QpOwotI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWMgPSBnZXRfY3B1X3NsYWIocywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAodW5saWtlbHkoaXNfZW5kKGMtPmZyZWVsaXN0KSB8fCAhbm9kZV9tYXRjaChjLCBub2RlKSkpCisJaWYgKHVubGlrZWx5KCFjLT5mcmVlbGlzdCB8fCAhbm9kZV9tYXRjaChjLCBub2RlKSkpCiAKIAkJb2JqZWN0ID0gX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhZGRyLCBjKTsKIApAQCAtMTY2MSw3ICsxNjE3LDYgQEAKIAkJc3RhdChjLCBBTExPQ19GQVNUUEFUSCk7CiAJfQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgogCiAJaWYgKHVubGlrZWx5KChnZnBmbGFncyAmIF9fR0ZQX1pFUk8pICYmIG9iamVjdCkpCiAJCW1lbXNldChvYmplY3QsIDAsIGMtPm9ianNpemUpOwpAQCAtMTY5OCwxNyArMTY1MywxMyBAQAogCXZvaWQgKipvYmplY3QgPSAodm9pZCAqKXg7CiAJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjOwogCi0jaWZkZWYgU0xVQl9GQVNUUEFUSAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0jZW5kaWYKIAljID0gZ2V0X2NwdV9zbGFiKHMsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCXN0YXQoYywgRlJFRV9TTE9XUEFUSCk7CiAJc2xhYl9sb2NrKHBhZ2UpOwogCiAJaWYgKHVubGlrZWx5KFNsYWJEZWJ1ZyhwYWdlKSkpCiAJCWdvdG8gZGVidWc7CisKIGNoZWNrc19vazoKIAlwcmlvciA9IG9iamVjdFtvZmZzZXRdID0gcGFnZS0+ZnJlZWxpc3Q7CiAJcGFnZS0+ZnJlZWxpc3QgPSBvYmplY3Q7CkBAIC0xNzIzLDI0ICsxNjc0LDIwIEBACiAJCWdvdG8gc2xhYl9lbXB0eTsKIAogCS8qCi0JICogT2JqZWN0cyBsZWZ0IGluIHRoZSBzbGFiLiBJZiBpdAotCSAqIHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmUKKwkgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmUKIAkgKiB0aGVuIGFkZCBpdC4KIAkgKi8KLQlpZiAodW5saWtlbHkocHJpb3IgPT0gcGFnZS0+ZW5kKSkgeworCWlmICh1bmxpa2VseSghcHJpb3IpKSB7CiAJCWFkZF9wYXJ0aWFsKGdldF9ub2RlKHMsIHBhZ2VfdG9fbmlkKHBhZ2UpKSwgcGFnZSwgMSk7CiAJCXN0YXQoYywgRlJFRV9BRERfUEFSVElBTCk7CiAJfQogCiBvdXRfdW5sb2NrOgogCXNsYWJfdW5sb2NrKHBhZ2UpOwotI2lmZGVmIFNMVUJfRkFTVFBBVEgKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKIAlyZXR1cm47CiAKIHNsYWJfZW1wdHk6Ci0JaWYgKHByaW9yICE9IHBhZ2UtPmVuZCkgeworCWlmIChwcmlvcikgewogCQkvKgogCQkgKiBTbGFiIHN0aWxsIG9uIHRoZSBwYXJ0aWFsIGxpc3QuCiAJCSAqLwpAQCAtMTc0OSw5ICsxNjk2LDYgQEAKIAl9CiAJc2xhYl91bmxvY2socGFnZSk7CiAJc3RhdChjLCBGUkVFX1NMQUIpOwotI2lmZGVmIFNMVUJfRkFTVFBBVEgKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKIAlkaXNjYXJkX3NsYWIocywgcGFnZSk7CiAJcmV0dXJuOwogCkBAIC0xNzc3LDM5ICsxNzIxLDExIEBACiB7CiAJdm9pZCAqKm9iamVjdCA9ICh2b2lkICopeDsKIAlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmM7Ci0KLSNpZmRlZiBTTFVCX0ZBU1RQQVRICi0Jdm9pZCAqKmZyZWVsaXN0OwotCi0JYyA9IGdldF9jcHVfc2xhYihzLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChvYmplY3QsIHMtPm9ianNpemUpOwotCWRvIHsKLQkJZnJlZWxpc3QgPSBjLT5mcmVlbGlzdDsKLQkJYmFycmllcigpOwotCQkvKgotCQkgKiBJZiB0aGUgY29tcGlsZXIgd291bGQgcmVvcmRlciB0aGUgcmV0cmlldmFsIG9mIGMtPnBhZ2UgdG8KLQkJICogY29tZSBiZWZvcmUgYy0+ZnJlZWxpc3QgdGhlbiBhbiBpbnRlcnJ1cHQgY291bGQKLQkJICogY2hhbmdlIHRoZSBjcHUgc2xhYiBiZWZvcmUgd2UgcmV0cmlldmUgYy0+ZnJlZWxpc3QuIFdlCi0JCSAqIGNvdWxkIGJlIG1hdGNoaW5nIG9uIGEgcGFnZSBubyBsb25nZXIgYWN0aXZlIGFuZCBwdXQgdGhlCi0JCSAqIG9iamVjdCBvbnRvIHRoZSBmcmVlbGlzdCBvZiB0aGUgd3Jvbmcgc2xhYi4KLQkJICoKLQkJICogT24gdGhlIG90aGVyIGhhbmQ6IElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgZnJlZWxpc3QgcG9pbnRlcgotCQkgKiB0aGVuIGFueSBjaGFuZ2Ugb2YgY3B1X3NsYWIgd2lsbCBjYXVzZSB0aGUgY21weGNoZyB0byBmYWlsCi0JCSAqIHNpbmNlIHRoZSBmcmVlbGlzdCBwb2ludGVycyBhcmUgdW5pcXVlIHBlciBzbGFiLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KHBhZ2UgIT0gYy0+cGFnZSB8fCBjLT5ub2RlIDwgMCkpIHsKLQkJCV9fc2xhYl9mcmVlKHMsIHBhZ2UsIHgsIGFkZHIsIGMtPm9mZnNldCk7Ci0JCQlicmVhazsKLQkJfQotCQlvYmplY3RbYy0+b2Zmc2V0XSA9IGZyZWVsaXN0OwotCQlzdGF0KGMsIEZSRUVfRkFTVFBBVEgpOwotCX0gd2hpbGUgKGNtcHhjaGdfbG9jYWwoJmMtPmZyZWVsaXN0LCBmcmVlbGlzdCwgb2JqZWN0KSAhPSBmcmVlbGlzdCk7Ci0jZWxzZQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQob2JqZWN0LCBzLT5vYmpzaXplKTsKIAljID0gZ2V0X2NwdV9zbGFiKHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQob2JqZWN0LCBjLT5vYmpzaXplKTsKIAlpZiAobGlrZWx5KHBhZ2UgPT0gYy0+cGFnZSAmJiBjLT5ub2RlID49IDApKSB7CiAJCW9iamVjdFtjLT5vZmZzZXRdID0gYy0+ZnJlZWxpc3Q7CiAJCWMtPmZyZWVsaXN0ID0gb2JqZWN0OwpAQCAtMTgxOCw3ICsxNzM0LDYgQEAKIAkJX19zbGFiX2ZyZWUocywgcGFnZSwgeCwgYWRkciwgYy0+b2Zmc2V0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgogfQogCiB2b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCkKQEAgLTE5NzMsMjAgKzE4ODgsMjEgQEAKIAkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCS8qCi0JICogSWYgdGhlIHVzZXIgd2FudHMgaGFyZHdhcmUgY2FjaGUgYWxpZ25lZCBvYmplY3RzIHRoZW4KLQkgKiBmb2xsb3cgdGhhdCBzdWdnZXN0aW9uIGlmIHRoZSBvYmplY3QgaXMgc3VmZmljaWVudGx5Ci0JICogbGFyZ2UuCisJICogSWYgdGhlIHVzZXIgd2FudHMgaGFyZHdhcmUgY2FjaGUgYWxpZ25lZCBvYmplY3RzIHRoZW4gZm9sbG93IHRoYXQKKwkgKiBzdWdnZXN0aW9uIGlmIHRoZSBvYmplY3QgaXMgc3VmZmljaWVudGx5IGxhcmdlLgogCSAqCi0JICogVGhlIGhhcmR3YXJlIGNhY2hlIGFsaWdubWVudCBjYW5ub3Qgb3ZlcnJpZGUgdGhlCi0JICogc3BlY2lmaWVkIGFsaWdubWVudCB0aG91Z2guIElmIHRoYXQgaXMgZ3JlYXRlcgotCSAqIHRoZW4gdXNlIGl0LgorCSAqIFRoZSBoYXJkd2FyZSBjYWNoZSBhbGlnbm1lbnQgY2Fubm90IG92ZXJyaWRlIHRoZSBzcGVjaWZpZWQKKwkgKiBhbGlnbm1lbnQgdGhvdWdoLiBJZiB0aGF0IGlzIGdyZWF0ZXIgdGhlbiB1c2UgaXQuCiAJICovCi0JaWYgKChmbGFncyAmIFNMQUJfSFdDQUNIRV9BTElHTikgJiYKLQkJCXNpemUgPiBjYWNoZV9saW5lX3NpemUoKSAvIDIpCi0JCXJldHVybiBtYXhfdCh1bnNpZ25lZCBsb25nLCBhbGlnbiwgY2FjaGVfbGluZV9zaXplKCkpOworCWlmIChmbGFncyAmIFNMQUJfSFdDQUNIRV9BTElHTikgeworCQl1bnNpZ25lZCBsb25nIHJhbGlnbiA9IGNhY2hlX2xpbmVfc2l6ZSgpOworCQl3aGlsZSAoc2l6ZSA8PSByYWxpZ24gLyAyKQorCQkJcmFsaWduIC89IDI7CisJCWFsaWduID0gbWF4KGFsaWduLCByYWxpZ24pOworCX0KIAogCWlmIChhbGlnbiA8IEFSQ0hfU0xBQl9NSU5BTElHTikKLQkJcmV0dXJuIEFSQ0hfU0xBQl9NSU5BTElHTjsKKwkJYWxpZ24gPSBBUkNIX1NMQUJfTUlOQUxJR047CiAKIAlyZXR1cm4gQUxJR04oYWxpZ24sIHNpemVvZih2b2lkICopKTsKIH0KQEAgLTE5OTUsMTkgKzE5MTEsMjIgQEAKIAkJCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYykKIHsKIAljLT5wYWdlID0gTlVMTDsKLQljLT5mcmVlbGlzdCA9ICh2b2lkICopUEFHRV9NQVBQSU5HX0FOT047CisJYy0+ZnJlZWxpc3QgPSBOVUxMOwogCWMtPm5vZGUgPSAwOwogCWMtPm9mZnNldCA9IHMtPm9mZnNldCAvIHNpemVvZih2b2lkICopOwogCWMtPm9ianNpemUgPSBzLT5vYmpzaXplOworI2lmZGVmIENPTkZJR19TTFVCX1NUQVRTCisJbWVtc2V0KGMtPnN0YXQsIDAsIE5SX1NMVUJfU1RBVF9JVEVNUyAqIHNpemVvZih1bnNpZ25lZCkpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCiB7CiAJbi0+bnJfcGFydGlhbCA9IDA7Ci0JYXRvbWljX2xvbmdfc2V0KCZuLT5ucl9zbGFicywgMCk7CiAJc3Bpbl9sb2NrX2luaXQoJm4tPmxpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm4tPnBhcnRpYWwpOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCisJYXRvbWljX2xvbmdfc2V0KCZuLT5ucl9zbGFicywgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJm4tPmZ1bGwpOwogI2VuZGlmCiB9CkBAIC0yMTc2LDcgKzIwOTUsOCBAQAogCWluaXRfdHJhY2tpbmcoa21hbGxvY19jYWNoZXMsIG4pOwogI2VuZGlmCiAJaW5pdF9rbWVtX2NhY2hlX25vZGUobik7Ci0JYXRvbWljX2xvbmdfaW5jKCZuLT5ucl9zbGFicyk7CisJaW5jX3NsYWJzX25vZGUoa21hbGxvY19jYWNoZXMsIG5vZGUpOworCiAJLyoKIAkgKiBsb2NrZGVwIHJlcXVpcmVzIGNvbnNpc3RlbnQgaXJxIHVzYWdlIGZvciBlYWNoIGxvY2sKIAkgKiBzbyBldmVuIHRob3VnaCB0aGVyZSBjYW5ub3QgYmUgYSByYWNlIHRoaXMgZWFybHkgaW4KQEAgLTIyNTgsNiArMjE3OCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSBzLT5hbGlnbjsKIAogCS8qCisJICogUm91bmQgdXAgb2JqZWN0IHNpemUgdG8gdGhlIG5leHQgd29yZCBib3VuZGFyeS4gV2UgY2FuIG9ubHkKKwkgKiBwbGFjZSB0aGUgZnJlZSBwb2ludGVyIGF0IHdvcmQgYm91bmRhcmllcyBhbmQgdGhpcyBkZXRlcm1pbmVzCisJICogdGhlIHBvc3NpYmxlIGxvY2F0aW9uIG9mIHRoZSBmcmVlIHBvaW50ZXIuCisJICovCisJc2l6ZSA9IEFMSUdOKHNpemUsIHNpemVvZih2b2lkICopKTsKKworI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCisJLyoKIAkgKiBEZXRlcm1pbmUgaWYgd2UgY2FuIHBvaXNvbiB0aGUgb2JqZWN0IGl0c2VsZi4gSWYgdGhlIHVzZXIgb2YKIAkgKiB0aGUgc2xhYiBtYXkgdG91Y2ggdGhlIG9iamVjdCBhZnRlciBmcmVlIG9yIGJlZm9yZSBhbGxvY2F0aW9uCiAJICogdGhlbiB3ZSBzaG91bGQgbmV2ZXIgcG9pc29uIHRoZSBvYmplY3QgaXRzZWxmLgpAQCAtMjI2OCwxNCArMjE5Niw3IEBACiAJZWxzZQogCQlzLT5mbGFncyAmPSB+X19PQkpFQ1RfUE9JU09OOwogCi0JLyoKLQkgKiBSb3VuZCB1cCBvYmplY3Qgc2l6ZSB0byB0aGUgbmV4dCB3b3JkIGJvdW5kYXJ5LiBXZSBjYW4gb25seQotCSAqIHBsYWNlIHRoZSBmcmVlIHBvaW50ZXIgYXQgd29yZCBib3VuZGFyaWVzIGFuZCB0aGlzIGRldGVybWluZXMKLQkgKiB0aGUgcG9zc2libGUgbG9jYXRpb24gb2YgdGhlIGZyZWUgcG9pbnRlci4KLQkgKi8KLQlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHZvaWQgKikpOwogCi0jaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKIAkvKgogCSAqIElmIHdlIGFyZSBSZWR6b25pbmcgdGhlbiBjaGVjayBpZiB0aGVyZSBpcyBzb21lIHNwYWNlIGJldHdlZW4gdGhlCiAJICogZW5kIG9mIHRoZSBvYmplY3QgYW5kIHRoZSBmcmVlIHBvaW50ZXIuIElmIG5vdCB0aGVuIGFkZCBhbgpAQCAtMjQyOCw3ICsyMzQ5LDcgQEAKIAkvKgogCSAqIFdlIGNvdWxkIGFsc28gY2hlY2sgaWYgdGhlIG9iamVjdCBpcyBvbiB0aGUgc2xhYnMgZnJlZWxpc3QuCiAJICogQnV0IHRoaXMgd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBhbmQgaXQgc2VlbXMgdGhhdCB0aGUgbWFpbgotCSAqIHB1cnBvc2Ugb2Yga21lbV9wdHJfdmFsaWQgaXMgdG8gY2hlY2sgaWYgdGhlIG9iamVjdCBiZWxvbmdzCisJICogcHVycG9zZSBvZiBrbWVtX3B0cl92YWxpZCgpIGlzIHRvIGNoZWNrIGlmIHRoZSBvYmplY3QgYmVsb25ncwogCSAqIHRvIGEgY2VydGFpbiBzbGFiLgogCSAqLwogCXJldHVybiAxOwpAQCAtMjQ4Nyw3ICsyNDA4LDcgQEAKIAkJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGdldF9ub2RlKHMsIG5vZGUpOwogCiAJCW4tPm5yX3BhcnRpYWwgLT0gZnJlZV9saXN0KHMsIG4sICZuLT5wYXJ0aWFsKTsKLQkJaWYgKGF0b21pY19sb25nX3JlYWQoJm4tPm5yX3NsYWJzKSkKKwkJaWYgKHNsYWJzX25vZGUocywgbm9kZSkpCiAJCQlyZXR1cm4gMTsKIAl9CiAJZnJlZV9rbWVtX2NhY2hlX25vZGVzKHMpOwpAQCAtMjUyMCwxMCArMjQ0MSw2IEBACiBzdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tQQUdFX1NISUZUICsgMV0gX19jYWNoZWxpbmVfYWxpZ25lZDsKIEVYUE9SVF9TWU1CT0woa21hbGxvY19jYWNoZXMpOwogCi0jaWZkZWYgQ09ORklHX1pPTkVfRE1BCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmttYWxsb2NfY2FjaGVzX2RtYVtQQUdFX1NISUZUICsgMV07Ci0jZW5kaWYKLQogc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2x1Yl9taW5fb3JkZXIoY2hhciAqc3RyKQogewogCWdldF9vcHRpb24oJnN0ciwgJnNsdWJfbWluX29yZGVyKTsKQEAgLTI1ODMsNiArMjUwMCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ETUEKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqa21hbGxvY19jYWNoZXNfZG1hW1BBR0VfU0hJRlQgKyAxXTsKIAogc3RhdGljIHZvaWQgc3lzZnNfYWRkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewpAQCAtMjcxNSwxMyArMjYzMywyNCBAQAogfQogRVhQT1JUX1NZTUJPTChfX2ttYWxsb2MpOwogCitzdGF0aWMgdm9pZCAqa21hbGxvY19sYXJnZV9ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGZsYWdzIHwgX19HRlBfQ09NUCwKKwkJCQkJCWdldF9vcmRlcihzaXplKSk7CisKKwlpZiAocGFnZSkKKwkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCiAjaWZkZWYgQ09ORklHX05VTUEKIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKIAlpZiAodW5saWtlbHkoc2l6ZSA+IFBBR0VfU0laRSkpCi0JCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGZsYWdzKTsKKwkJcmV0dXJuIGttYWxsb2NfbGFyZ2Vfbm9kZShzaXplLCBmbGFncywgbm9kZSk7CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZmxhZ3MpOwogCkBAIC0yNzM4LDE5ICsyNjY3LDE3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKLQlCVUdfT04oIW9iamVjdCk7CiAJaWYgKHVubGlrZWx5KG9iamVjdCA9PSBaRVJPX1NJWkVfUFRSKSkKIAkJcmV0dXJuIDA7CiAKIAlwYWdlID0gdmlydF90b19oZWFkX3BhZ2Uob2JqZWN0KTsKLQlCVUdfT04oIXBhZ2UpOwogCiAJaWYgKHVubGlrZWx5KCFQYWdlU2xhYihwYWdlKSkpCiAJCXJldHVybiBQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CiAKIAlzID0gcGFnZS0+c2xhYjsKLQlCVUdfT04oIXMpOwogCisjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKIAkvKgogCSAqIERlYnVnZ2luZyByZXF1aXJlcyB1c2Ugb2YgdGhlIHBhZGRpbmcgYmV0d2VlbiBvYmplY3QKIAkgKiBhbmQgd2hhdGV2ZXIgbWF5IGNvbWUgYWZ0ZXIgaXQuCkBAIC0yNzU4LDYgKzI2ODUsNyBAQAogCWlmIChzLT5mbGFncyAmIChTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04pKQogCQlyZXR1cm4gcy0+b2Jqc2l6ZTsKIAorI2VuZGlmCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIHRoZSBuZWVkIHRvIHN0b3JlIHRoZSBmcmVlbGlzdCBwb2ludGVyCiAJICogYmFjayB0aGVyZSBvciB0cmFjayB1c2VyIGluZm9ybWF0aW9uIHRoZW4gd2UgY2FuCkBAIC0yNzY1LDcgKzI2OTMsNiBAQAogCSAqLwogCWlmIChzLT5mbGFncyAmIChTTEFCX0RFU1RST1lfQllfUkNVIHwgU0xBQl9TVE9SRV9VU0VSKSkKIAkJcmV0dXJuIHMtPmludXNlOwotCiAJLyoKIAkgKiBFbHNlIHdlIGNhbiB1c2UgYWxsIHRoZSBwYWRkaW5nIGV0YyBmb3IgdGhlIGFsbG9jYXRpb24KIAkgKi8KQEAgLTI3OTAsMTkgKzI3MTcsNiBAQAogfQogRVhQT1JUX1NZTUJPTChrZnJlZSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgeCA9IDA7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbi0+bGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCAmbi0+cGFydGlhbCwgbHJ1KQotCQl4ICs9IHBhZ2UtPmludXNlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm4tPmxpc3RfbG9jaywgZmxhZ3MpOwotCXJldHVybiB4OwotfQotCiAvKgogICoga21lbV9jYWNoZV9zaHJpbmsgcmVtb3ZlcyBlbXB0eSBzbGFicyBmcm9tIHRoZSBwYXJ0aWFsIGxpc3RzIGFuZCBzb3J0cwogICogdGhlIHJlbWFpbmluZyBzbGFicyBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHVzZS4gVGhlIHNsYWJzIHdpdGggdGhlCkBAIC0yOTE2LDcgKzI4MzAsNyBAQAogCQkJICogYW5kIG9mZmxpbmVfcGFnZXMoKSBmdW5jdGlvbiBzaG91ZG4ndCBjYWxsIHRoaXMKIAkJCSAqIGNhbGxiYWNrLiBTbywgd2UgbXVzdCBmYWlsLgogCQkJICovCi0JCQlCVUdfT04oYXRvbWljX2xvbmdfcmVhZCgmbi0+bnJfc2xhYnMpKTsKKwkJCUJVR19PTihzbGFic19ub2RlKHMsIG9mZmxpbmVfbm9kZSkpOwogCiAJCQlzLT5ub2RlW29mZmxpbmVfbm9kZV0gPSBOVUxMOwogCQkJa21lbV9jYWNoZV9mcmVlKGttYWxsb2NfY2FjaGVzLCBuKTsKQEAgLTMwNDIsNyArMjk1Niw3IEBACiAJLyoKIAkgKiBQYXRjaCB1cCB0aGUgc2l6ZV9pbmRleCB0YWJsZSBpZiB3ZSBoYXZlIHN0cmFuZ2UgbGFyZ2UgYWxpZ25tZW50CiAJICogcmVxdWlyZW1lbnRzIGZvciB0aGUga21hbGxvYyBhcnJheS4gVGhpcyBpcyBvbmx5IHRoZSBjYXNlIGZvcgotCSAqIG1pcHMgaXQgc2VlbXMuIFRoZSBzdGFuZGFyZCBhcmNoZXMgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGNvZGUgaGVyZS4KKwkgKiBNSVBTIGl0IHNlZW1zLiBUaGUgc3RhbmRhcmQgYXJjaGVzIHdpbGwgbm90IGdlbmVyYXRlIGFueSBjb2RlIGhlcmUuCiAJICoKIAkgKiBMYXJnZXN0IHBlcm1pdHRlZCBhbGlnbm1lbnQgaXMgMjU2IGJ5dGVzIGR1ZSB0byB0aGUgd2F5IHdlCiAJICogaGFuZGxlIHRoZSBpbmRleCBkZXRlcm1pbmF0aW9uIGZvciB0aGUgc21hbGxlciBjYWNoZXMuCkBAIC0zMDcxLDcgKzI5ODUsNiBAQAogCWttZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZSk7CiAjZW5kaWYKIAotCiAJcHJpbnRrKEtFUk5fSU5GTwogCQkiU0xVQjogR2Vuc2xhYnM9JWQsIEhXYWxpZ249JWQsIE9yZGVyPSVkLSVkLCBNaW5PYmplY3RzPSVkLCIKIAkJIiBDUFVzPSVkLCBOb2Rlcz0lZFxuIiwKQEAgLTMxNjgsMTIgKzMwODEsMTUgQEAKIAkJICovCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQkJZ2V0X2NwdV9zbGFiKHMsIGNwdSktPm9ianNpemUgPSBzLT5vYmpzaXplOworCiAJCXMtPmludXNlID0gbWF4X3QoaW50LCBzLT5pbnVzZSwgQUxJR04oc2l6ZSwgc2l6ZW9mKHZvaWQgKikpKTsKIAkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CisKIAkJaWYgKHN5c2ZzX3NsYWJfYWxpYXMocywgbmFtZSkpCiAJCQlnb3RvIGVycjsKIAkJcmV0dXJuIHM7CiAJfQorCiAJcyA9IGttYWxsb2Moa21lbV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAocykgewogCQlpZiAoa21lbV9jYWNoZV9vcGVuKHMsIEdGUF9LRVJORUwsIG5hbWUsCkBAIC0zMjY5LDcgKzMxODUsNyBAQAogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCiAJaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQotCQlyZXR1cm4ga21hbGxvY19sYXJnZShzaXplLCBnZnBmbGFncyk7CisJCXJldHVybiBrbWFsbG9jX2xhcmdlX25vZGUoc2l6ZSwgZ2ZwZmxhZ3MsIG5vZGUpOwogCiAJcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKIApAQCAtMzI3OSwxMiArMzE5NSwyNyBAQAogCXJldHVybiBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBjYWxsZXIpOwogfQogCisjaWYgKGRlZmluZWQoQ09ORklHX1NZU0ZTKSAmJiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKSkgfHwgZGVmaW5lZChDT05GSUdfU0xBQklORk8pCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHggPSAwOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm4tPmxpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJm4tPnBhcnRpYWwsIGxydSkKKwkJeCArPSBwYWdlLT5pbnVzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4geDsKK30KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICYmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpCiBzdGF0aWMgaW50IHZhbGlkYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQkJdW5zaWduZWQgbG9uZyAqbWFwKQogewogCXZvaWQgKnA7Ci0Jdm9pZCAqYWRkciA9IHNsYWJfYWRkcmVzcyhwYWdlKTsKKwl2b2lkICphZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCiAJaWYgKCFjaGVja19zbGFiKHMsIHBhZ2UpIHx8CiAJCQkhb25fZnJlZWxpc3QocywgcGFnZSwgTlVMTCkpCkBAIC0zNTY3LDcgKzM0OTgsNyBAQAogc3RhdGljIHZvaWQgcHJvY2Vzc19zbGFiKHN0cnVjdCBsb2NfdHJhY2sgKnQsIHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0cmFja19pdGVtIGFsbG9jKQogewotCXZvaWQgKmFkZHIgPSBzbGFiX2FkZHJlc3MocGFnZSk7CisJdm9pZCAqYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAlERUNMQVJFX0JJVE1BUChtYXAsIHMtPm9iamVjdHMpOwogCXZvaWQgKnA7CiAKQEAgLTM2NzYsOCArMzYwNyw4IEBACiAjZGVmaW5lIFNPX0NQVQkJKDEgPDwgU0xfQ1BVKQogI2RlZmluZSBTT19PQkpFQ1RTCSgxIDw8IFNMX09CSkVDVFMpCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKLQkJCWNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQkJICAgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKIAlpbnQgY3B1OwpAQCAtMzY4Nyw2ICszNjE4LDggQEAKIAl1bnNpZ25lZCBsb25nICpwZXJfY3B1OwogCiAJbm9kZXMgPSBremFsbG9jKDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykgKiBucl9ub2RlX2lkcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFub2RlcykKKwkJcmV0dXJuIC1FTk9NRU07CiAJcGVyX2NwdSA9IG5vZGVzICsgbnJfbm9kZV9pZHM7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0zODM5LDI1ICszNzcyLDI1IEBACiAKIHN0YXRpYyBzc2l6ZV90IHNsYWJzX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc2xhYl9vYmplY3RzKHMsIGJ1ZiwgU09fRlVMTHxTT19QQVJUSUFMfFNPX0NQVSk7CisJcmV0dXJuIHNob3dfc2xhYl9vYmplY3RzKHMsIGJ1ZiwgU09fRlVMTHxTT19QQVJUSUFMfFNPX0NQVSk7CiB9CiBTTEFCX0FUVFJfUk8oc2xhYnMpOwogCiBzdGF0aWMgc3NpemVfdCBwYXJ0aWFsX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc2xhYl9vYmplY3RzKHMsIGJ1ZiwgU09fUEFSVElBTCk7CisJcmV0dXJuIHNob3dfc2xhYl9vYmplY3RzKHMsIGJ1ZiwgU09fUEFSVElBTCk7CiB9CiBTTEFCX0FUVFJfUk8ocGFydGlhbCk7CiAKIHN0YXRpYyBzc2l6ZV90IGNwdV9zbGFic19zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNsYWJfb2JqZWN0cyhzLCBidWYsIFNPX0NQVSk7CisJcmV0dXJuIHNob3dfc2xhYl9vYmplY3RzKHMsIGJ1ZiwgU09fQ1BVKTsKIH0KIFNMQUJfQVRUUl9STyhjcHVfc2xhYnMpOwogCiBzdGF0aWMgc3NpemVfdCBvYmplY3RzX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc2xhYl9vYmplY3RzKHMsIGJ1ZiwgU09fRlVMTHxTT19QQVJUSUFMfFNPX0NQVXxTT19PQkpFQ1RTKTsKKwlyZXR1cm4gc2hvd19zbGFiX29iamVjdHMocywgYnVmLCBTT19GVUxMfFNPX1BBUlRJQUx8U09fQ1BVfFNPX09CSkVDVFMpOwogfQogU0xBQl9BVFRSX1JPKG9iamVjdHMpOwogCkBAIC00MDU2LDcgKzM5ODksNiBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU0xVQl9TVEFUUwotCiBzdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLCBlbnVtIHN0YXRfaXRlbSBzaSkKIHsKIAl1bnNpZ25lZCBsb25nIHN1bSAgPSAwOwpAQCAtNDA3NiwxMCArNDAwOCwxMiBAQAogCiAJbGVuID0gc3ByaW50ZihidWYsICIlbHUiLCBzdW0pOwogCisjaWZkZWYgQ09ORklHX1NNUAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWlmIChkYXRhW2NwdV0gJiYgbGVuIDwgUEFHRV9TSVpFIC0gMjApCi0JCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgYyVkPSV1IiwgY3B1LCBkYXRhW2NwdV0pOworCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiIEMlZD0ldSIsIGNwdSwgZGF0YVtjcHVdKTsKIAl9CisjZW5kaWYKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gbGVuICsgc3ByaW50ZihidWYgKyBsZW4sICJcbiIpOwogfQpAQCAtNDI0MCw4ICs0MTc0LDggQEAKICNkZWZpbmUgSURfU1RSX0xFTkdUSCA2NAogCiAvKiBDcmVhdGUgYSB1bmlxdWUgc3RyaW5nIGlkIGZvciBhIHNsYWIgY2FjaGU6Ci0gKiBmb3JtYXQKLSAqIDpbZmxhZ3MtXXNpemU6W21lbW9yeSBhZGRyZXNzIG9mIGttZW1jYWNoZV0KKyAqCisgKiBGb3JtYXQJOltmbGFncy1dc2l6ZQogICovCiBzdGF0aWMgY2hhciAqY3JlYXRlX3VuaXF1ZV9pZChzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IGNkNzViMjEuLjk5YzRmMzYgMTAwNjQ0Ci0tLSBhL21tL3NwYXJzZS12bWVtbWFwLmMKKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuYwpAQCAtNzYsNyArNzYsNyBAQAogCQlwdGVfdCBlbnRyeTsKIAkJdm9pZCAqcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2soUEFHRV9TSVpFLCBub2RlKTsKIAkJaWYgKCFwKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTlVMTDsKIAkJZW50cnkgPSBwZm5fcHRlKF9fcGEocCkgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpOwogCQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5KTsKIAl9CkBAIC04OSw3ICs4OSw3IEBACiAJaWYgKHBtZF9ub25lKCpwbWQpKSB7CiAJCXZvaWQgKnAgPSB2bWVtbWFwX2FsbG9jX2Jsb2NrKFBBR0VfU0laRSwgbm9kZSk7CiAJCWlmICghcCkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5VTEw7CiAJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgcCk7CiAJfQogCXJldHVybiBwbWQ7CkBAIC0xMDEsNyArMTAxLDcgQEAKIAlpZiAocHVkX25vbmUoKnB1ZCkpIHsKIAkJdm9pZCAqcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2soUEFHRV9TSVpFLCBub2RlKTsKIAkJaWYgKCFwKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTlVMTDsKIAkJcHVkX3BvcHVsYXRlKCZpbml0X21tLCBwdWQsIHApOwogCX0KIAlyZXR1cm4gcHVkOwpAQCAtMTEzLDcgKzExMyw3IEBACiAJaWYgKHBnZF9ub25lKCpwZ2QpKSB7CiAJCXZvaWQgKnAgPSB2bWVtbWFwX2FsbG9jX2Jsb2NrKFBBR0VfU0laRSwgbm9kZSk7CiAJCWlmICghcCkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5VTEw7CiAJCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBwKTsKIAl9CiAJcmV0dXJuIHBnZDsKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggZjZhNDNjMC4uOThkNmIzOWMgMTAwNjQ0Ci0tLSBhL21tL3NwYXJzZS5jCisrKyBiL21tL3NwYXJzZS5jCkBAIC0xNDksOCArMTQ5LDE4IEBACiAvKiBSZWNvcmQgYSBtZW1vcnkgYXJlYSBhZ2FpbnN0IGEgbm9kZS4gKi8KIHZvaWQgX19pbml0IG1lbW9yeV9wcmVzZW50KGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogeworCXVuc2lnbmVkIGxvbmcgbWF4X2FyY2hfcGZuID0gMVVMIDw8IChNQVhfUEhZU01FTV9CSVRTLVBBR0VfU0hJRlQpOwogCXVuc2lnbmVkIGxvbmcgcGZuOwogCisJLyoKKwkgKiBTYW5pdHkgY2hlY2tzIC0gZG8gbm90IGFsbG93IGFuIGFyY2hpdGVjdHVyZSB0byBwYXNzCisJICogaW4gbGFyZ2VyIHBmbnMgdGhhbiB0aGUgbWF4aW11bSBzY29wZSBvZiBzcGFyc2VtZW06CisJICovCisJaWYgKHN0YXJ0ID49IG1heF9hcmNoX3BmbikKKwkJcmV0dXJuOworCWlmIChlbmQgPj0gbWF4X2FyY2hfcGZuKQorCQllbmQgPSBtYXhfYXJjaF9wZm47CisKIAlzdGFydCAmPSBQQUdFX1NFQ1RJT05fTUFTSzsKIAlmb3IgKHBmbiA9IHN0YXJ0OyBwZm4gPCBlbmQ7IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikgewogCQl1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBwZm5fdG9fc2VjdGlvbl9ucihwZm4pOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDcxMGEyMGIuLmFhMTEzOWMgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTc4LDEyICs3OCwxMSBAQAogRVhQT1JUX1NZTUJPTChwdXRfcGFnZSk7CiAKIC8qKgotICogcHV0X3BhZ2VzX2xpc3QoKTogcmVsZWFzZSBhIGxpc3Qgb2YgcGFnZXMKKyAqIHB1dF9wYWdlc19saXN0KCkgLSByZWxlYXNlIGEgbGlzdCBvZiBwYWdlcworICogQHBhZ2VzOiBsaXN0IG9mIHBhZ2VzIHRocmVhZGVkIG9uIHBhZ2UtPmxydQogICoKICAqIFJlbGVhc2UgYSBsaXN0IG9mIHBhZ2VzIHdoaWNoIGFyZSBzdHJ1bmcgdG9nZXRoZXIgb24gcGFnZS5scnUuICBDdXJyZW50bHkKICAqIHVzZWQgYnkgcmVhZF9jYWNoZV9wYWdlcygpIGFuZCByZWxhdGVkIGVycm9yIHJlY292ZXJ5IGNvZGUuCi0gKgotICogQHBhZ2VzOiBsaXN0IG9mIHBhZ2VzIHRocmVhZGVkIG9uIHBhZ2UtPmxydQogICovCiB2b2lkIHB1dF9wYWdlc19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzKQogewpAQCAtMTc2LDcgKzE3NSw3IEBACiAJCVNldFBhZ2VBY3RpdmUocGFnZSk7CiAJCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwogCQlfX2NvdW50X3ZtX2V2ZW50KFBHQUNUSVZBVEUpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSksIHRydWUpOworCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgdHJ1ZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGVjNDJmMDEuLjUwNzU3ZWUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYworKysgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogLyoqCiAgKiBhZGRfdG9fc3dhcCAtIGFsbG9jYXRlIHN3YXAgc3BhY2UgZm9yIGEgcGFnZQogICogQHBhZ2U6IHBhZ2Ugd2Ugd2FudCB0byBtb3ZlIHRvIHN3YXAKKyAqIEBnZnBfbWFzazogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBBbGxvY2F0ZSBzd2FwIHNwYWNlIGZvciB0aGUgcGFnZSBhbmQgYWRkIHRoZSBwYWdlIHRvIHRoZQogICogc3dhcCBjYWNoZS4gIENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwYWdlIGxvY2suIApAQCAtMzE1LDYgKzMxNiw3IEBACiAvKioKICAqIHN3YXBpbl9yZWFkYWhlYWQgLSBzd2FwIGluIHBhZ2VzIGluIGhvcGUgd2UgbmVlZCB0aGVtIHNvb24KICAqIEBlbnRyeTogc3dhcCBlbnRyeSBvZiB0aGlzIG1lbW9yeQorICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICogQHZtYTogdXNlciB2bWEgdGhpcyBhZGRyZXNzIGJlbG9uZ3MgdG8KICAqIEBhZGRyOiB0YXJnZXQgYWRkcmVzcyBmb3IgbWVtcG9saWN5CiAgKgpkaWZmIC0tZ2l0IGEvbW0vdGlueS1zaG1lbS5jIGIvbW0vdGlueS1zaG1lbS5jCmluZGV4IDcwMjA4MzYuLmFlNTMyZjUgMTAwNjQ0Ci0tLSBhL21tL3Rpbnktc2htZW0uYworKysgYi9tbS90aW55LXNobWVtLmMKQEAgLTM5LDEyICszOSwxMSBAQAogfQogbW9kdWxlX2luaXQoaW5pdF90bXBmcykKIAotLyoKKy8qKgogICogc2htZW1fZmlsZV9zZXR1cCAtIGdldCBhbiB1bmxpbmtlZCBmaWxlIGxpdmluZyBpbiB0bXBmcwotICoKICAqIEBuYW1lOiBuYW1lIGZvciBkZW50cnkgKHRvIGJlIHNlZW4gaW4gL3Byb2MvPHBpZD4vbWFwcwogICogQHNpemU6IHNpemUgdG8gYmUgc2V0IGZvciB0aGUgZmlsZQotICoKKyAqIEBmbGFnczogdm1fZmxhZ3MKICAqLwogc3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0dXAoY2hhciAqbmFtZSwgbG9mZl90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC04OSwxNSArODgsMTYgQEAKIAogY2xvc2VfZmlsZToKIAlwdXRfZmlscChmaWxlKTsKKwlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisKIHB1dF9kZW50cnk6CiAJZHB1dChkZW50cnkpOwogcHV0X21lbW9yeToKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CiAKLS8qCisvKioKICAqIHNobWVtX3plcm9fc2V0dXAgLSBzZXR1cCBhIHNoYXJlZCBhbm9ueW1vdXMgbWFwcGluZwotICoKICAqIEB2bWE6IHRoZSB2bWEgdG8gYmUgbW1hcHBlZCBpcyBwcmVwYXJlZCBieSBkb19tbWFwX3Bnb2ZmCiAgKi8KIGludCBzaG1lbV96ZXJvX3NldHVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggYzM1YzQ5ZS4uN2QyMGNlNCAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0xMzQsOCArMTM0LDcgQEAKIH0KIAogLyoqCi0gKiB0cnVuY2F0ZV9pbm9kZV9wYWdlcyAtIHRydW5jYXRlIHJhbmdlIG9mIHBhZ2VzIHNwZWNpZmllZCBieSBzdGFydCBhbmQKLSAqIGVuZCBieXRlIG9mZnNldHMKKyAqIHRydW5jYXRlX2lub2RlX3BhZ2VzIC0gdHJ1bmNhdGUgcmFuZ2Ugb2YgcGFnZXMgc3BlY2lmaWVkIGJ5IHN0YXJ0ICYgZW5kIGJ5dGUgb2Zmc2V0cwogICogQG1hcHBpbmc6IG1hcHBpbmcgdG8gdHJ1bmNhdGUKICAqIEBsc3RhcnQ6IG9mZnNldCBmcm9tIHdoaWNoIHRvIHRydW5jYXRlCiAgKiBAbGVuZDogb2Zmc2V0IHRvIHdoaWNoIHRvIHRydW5jYXRlCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggOTUwYzBiZS4uZWNmOTFmOCAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtNzU3LDcgKzc1Nyw4IEBACiAgKglAdm1hOgkJdm1hIHRvIGNvdmVyIChtYXAgZnVsbCByYW5nZSBvZiB2bWEpCiAgKglAYWRkcjoJCXZtYWxsb2MgbWVtb3J5CiAgKglAcGdvZmY6CQludW1iZXIgb2YgcGFnZXMgaW50byBhZGRyIGJlZm9yZSBmaXJzdCBwYWdlIHRvIG1hcAotICoJQHJldHVybnM6CTAgZm9yIHN1Y2Nlc3MsIC1FeHh4IG9uIGZhaWx1cmUKKyAqCisgKglSZXR1cm5zOgkwIGZvciBzdWNjZXNzLCAtRXh4eCBvbiBmYWlsdXJlCiAgKgogICoJVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhhdCBhZGRyIGlzIGEgdmFsaWQgdm1hbGxvYydlZCBhcmVhLCBhbmQKICAqCXRoYXQgaXQgaXMgYmlnIGVub3VnaCB0byBjb3ZlciB0aGUgdm1hLiBXaWxsIHJldHVybiBmYWlsdXJlIGlmCkBAIC04MjksNyArODMwLDggQEAKIC8qKgogICoJYWxsb2Nfdm1fYXJlYSAtIGFsbG9jYXRlIGEgcmFuZ2Ugb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UKICAqCUBzaXplOgkJc2l6ZSBvZiB0aGUgYXJlYQotICoJQHJldHVybnM6CU5VTEwgb24gZmFpbHVyZSwgdm1fc3RydWN0IG9uIHN1Y2Nlc3MKKyAqCisgKglSZXR1cm5zOglOVUxMIG9uIGZhaWx1cmUsIHZtX3N0cnVjdCBvbiBzdWNjZXNzCiAgKgogICoJVGhpcyBmdW5jdGlvbiByZXNlcnZlcyBhIHJhbmdlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlLCBhbmQKICAqCWFsbG9jYXRlcyBwYWdldGFibGVzIHRvIG1hcCB0aGF0IHJhbmdlLiAgTm8gYWN0dWFsIG1hcHBpbmdzCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGEyNmRhYmQuLmY4MGE1YjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC03MCwxMyArNzAsNiBAQAogCiAJaW50IG9yZGVyOwogCi0JLyoKLQkgKiBQYWdlcyB0aGF0IGhhdmUgKG9yIHNob3VsZCBoYXZlKSBJTyBwZW5kaW5nLiAgSWYgd2UgcnVuIGludG8KLQkgKiBhIGxvdCBvZiB0aGVzZSwgd2UncmUgYmV0dGVyIG9mZiB3YWl0aW5nIGEgbGl0dGxlIGZvciBJTyB0bwotCSAqIGZpbmlzaCByYXRoZXIgdGhhbiBzY2FubmluZyBtb3JlIHBhZ2VzIGluIHRoZSBWTS4KLQkgKi8KLQlpbnQgbnJfaW9fcGFnZXM7Ci0KIAkvKiBXaGljaCBjZ3JvdXAgZG8gd2UgcmVjbGFpbSBmcm9tICovCiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXA7CiAKQEAgLTEyNiw3ICsxMTksNyBAQAogc3RhdGljIExJU1RfSEVBRChzaHJpbmtlcl9saXN0KTsKIHN0YXRpYyBERUNMQVJFX1JXU0VNKHNocmlua2VyX3J3c2VtKTsKIAotI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX0NPTlQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogI2RlZmluZSBzY2FuX2dsb2JhbF9scnUoc2MpCSghKHNjKS0+bWVtX2Nncm91cCkKICNlbHNlCiAjZGVmaW5lIHNjYW5fZ2xvYmFsX2xydShzYykJKDEpCkBAIC01MTIsMTAgKzUwNSw4IEBACiAJCQkgKi8KIAkJCWlmIChzeW5jX3dyaXRlYmFjayA9PSBQQUdFT1VUX0lPX1NZTkMgJiYgbWF5X2VudGVyX2ZzKQogCQkJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7Ci0JCQllbHNlIHsKLQkJCQlzYy0+bnJfaW9fcGFnZXMrKzsKKwkJCWVsc2UKIAkJCQlnb3RvIGtlZXBfbG9ja2VkOwotCQkJfQogCQl9CiAKIAkJcmVmZXJlbmNlZCA9IHBhZ2VfcmVmZXJlbmNlZChwYWdlLCAxLCBzYy0+bWVtX2Nncm91cCk7CkBAIC01NTQsMTAgKzU0NSw4IEBACiAJCWlmIChQYWdlRGlydHkocGFnZSkpIHsKIAkJCWlmIChzYy0+b3JkZXIgPD0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgJiYgcmVmZXJlbmNlZCkKIAkJCQlnb3RvIGtlZXBfbG9ja2VkOwotCQkJaWYgKCFtYXlfZW50ZXJfZnMpIHsKLQkJCQlzYy0+bnJfaW9fcGFnZXMrKzsKKwkJCWlmICghbWF5X2VudGVyX2ZzKQogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7Ci0JCQl9CiAJCQlpZiAoIXNjLT5tYXlfd3JpdGVwYWdlKQogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAKQEAgLTU2OCwxMCArNTU3LDggQEAKIAkJCWNhc2UgUEFHRV9BQ1RJVkFURToKIAkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKIAkJCWNhc2UgUEFHRV9TVUNDRVNTOgotCQkJCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpIHx8IFBhZ2VEaXJ0eShwYWdlKSkgewotCQkJCQlzYy0+bnJfaW9fcGFnZXMrKzsKKwkJCQlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSB8fCBQYWdlRGlydHkocGFnZSkpCiAJCQkJCWdvdG8ga2VlcDsKLQkJCQl9CiAJCQkJLyoKIAkJCQkgKiBBIHN5bmNocm9ub3VzIHdyaXRlIC0gcHJvYmFibHkgYSByYW1kaXNrLiAgR28KIAkJCQkgKiBhaGVhZCBhbmQgdHJ5IHRvIHJlY2xhaW0gdGhlIHBhZ2UuCkBAIC0xMTI4LDcgKzExMTUsNyBAQAogCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAKIAkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKLQkJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpLCBmYWxzZSk7CisJCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBmYWxzZSk7CiAJCXBnbW92ZWQrKzsKIAkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKIAkJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSwgcGdtb3ZlZCk7CkBAIC0xMTU2LDggKzExNDMsOSBAQAogCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CiAJCVNldFBhZ2VMUlUocGFnZSk7CiAJCVZNX0JVR19PTighUGFnZUFjdGl2ZShwYWdlKSk7CisKIAkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5hY3RpdmVfbGlzdCk7Ci0JCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSwgdHJ1ZSk7CisJCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCB0cnVlKTsKIAkJcGdtb3ZlZCsrOwogCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewogCQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSwgcGdtb3ZlZCk7CkBAIC0xMzQzLDcgKzEzMzEsNiBAQAogCiAJZm9yIChwcmlvcml0eSA9IERFRl9QUklPUklUWTsgcHJpb3JpdHkgPj0gMDsgcHJpb3JpdHktLSkgewogCQlzYy0+bnJfc2Nhbm5lZCA9IDA7Ci0JCXNjLT5ucl9pb19wYWdlcyA9IDA7CiAJCWlmICghcHJpb3JpdHkpCiAJCQlkaXNhYmxlX3N3YXBfdG9rZW4oKTsKIAkJbnJfcmVjbGFpbWVkICs9IHNocmlua196b25lcyhwcmlvcml0eSwgem9uZXMsIHNjKTsKQEAgLTEzNzgsOCArMTM2NSw3IEBACiAJCX0KIAogCQkvKiBUYWtlIGEgbmFwLCB3YWl0IGZvciBzb21lIHdyaXRlYmFjayB0byBjb21wbGV0ZSAqLwotCQlpZiAoc2MtPm5yX3NjYW5uZWQgJiYgcHJpb3JpdHkgPCBERUZfUFJJT1JJVFkgLSAyICYmCi0JCQkJc2MtPm5yX2lvX3BhZ2VzID4gc2MtPnN3YXBfY2x1c3Rlcl9tYXgpCisJCWlmIChzYy0+bnJfc2Nhbm5lZCAmJiBwcmlvcml0eSA8IERFRl9QUklPUklUWSAtIDIpCiAJCQljb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsKIAl9CiAJLyogdG9wIHByaW9yaXR5IHNocmlua19jYWNoZXMgc3RpbGwgaGFkIG1vcmUgdG8gZG8/IGRvbid0IE9PTSwgdGhlbiAqLwpAQCAtMTQyNyw3ICsxNDEzLDcgQEAKIAlyZXR1cm4gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZXMsIGdmcF9tYXNrLCAmc2MpOwogfQogCi0jaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fQ09OVAorI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCiAKIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCiAJCQkJCQlnZnBfdCBnZnBfbWFzaykKQEAgLTE1MTMsNyArMTQ5OSw2IEBACiAJCWlmICghcHJpb3JpdHkpCiAJCQlkaXNhYmxlX3N3YXBfdG9rZW4oKTsKIAotCQlzYy5ucl9pb19wYWdlcyA9IDA7CiAJCWFsbF96b25lc19vayA9IDE7CiAKIAkJLyoKQEAgLTE2MDYsOCArMTU5MSw3IEBACiAJCSAqIE9LLCBrc3dhcGQgaXMgZ2V0dGluZyBpbnRvIHRyb3VibGUuICBUYWtlIGEgbmFwLCB0aGVuIHRha2UKIAkJICogYW5vdGhlciBwYXNzIGFjcm9zcyB0aGUgem9uZXMuCiAJCSAqLwotCQlpZiAodG90YWxfc2Nhbm5lZCAmJiBwcmlvcml0eSA8IERFRl9QUklPUklUWSAtIDIgJiYKLQkJCQkJc2MubnJfaW9fcGFnZXMgPiBzYy5zd2FwX2NsdXN0ZXJfbWF4KQorCQlpZiAodG90YWxfc2Nhbm5lZCAmJiBwcmlvcml0eSA8IERFRl9QUklPUklUWSAtIDIpCiAJCQljb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsKIAogCQkvKgpAQCAtMTY2MywxMSArMTY0NywxMCBAQAogCXN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGUgPSB7CiAJCS5yZWNsYWltZWRfc2xhYiA9IDAsCiAJfTsKLQljcHVtYXNrX3QgY3B1bWFzazsKKwlub2RlX3RvX2NwdW1hc2tfcHRyKGNwdW1hc2ssIHBnZGF0LT5ub2RlX2lkKTsKIAotCWNwdW1hc2sgPSBub2RlX3RvX2NwdW1hc2socGdkYXQtPm5vZGVfaWQpOwotCWlmICghY3B1c19lbXB0eShjcHVtYXNrKSkKLQkJc2V0X2NwdXNfYWxsb3dlZCh0c2ssIGNwdW1hc2spOworCWlmICghY3B1c19lbXB0eSgqY3B1bWFzaykpCisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRzaywgY3B1bWFzayk7CiAJY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwogCiAJLyoKQEAgLTE4OTYsMTcgKzE4NzksMTYgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewotCXBnX2RhdGFfdCAqcGdkYXQ7Ci0JY3B1bWFza190IG1hc2s7CiAJaW50IG5pZDsKIAogCWlmIChhY3Rpb24gPT0gQ1BVX09OTElORSB8fCBhY3Rpb24gPT0gQ1BVX09OTElORV9GUk9aRU4pIHsKIAkJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fSElHSF9NRU1PUlkpIHsKLQkJCXBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7Ci0JCQltYXNrID0gbm9kZV90b19jcHVtYXNrKHBnZGF0LT5ub2RlX2lkKTsKLQkJCWlmIChhbnlfb25saW5lX2NwdShtYXNrKSAhPSBOUl9DUFVTKQorCQkJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOworCQkJbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBwZ2RhdC0+bm9kZV9pZCk7CisKKwkJCWlmIChhbnlfb25saW5lX2NwdSgqbWFzaykgPCBucl9jcHVfaWRzKQogCQkJCS8qIE9uZSBvZiBvdXIgQ1BVcyBvbmxpbmU6IHJlc3RvcmUgbWFzayAqLwotCQkJCXNldF9jcHVzX2FsbG93ZWQocGdkYXQtPmtzd2FwZCwgbWFzayk7CisJCQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIocGdkYXQtPmtzd2FwZCwgbWFzayk7CiAJCX0KIAl9CiAJcmV0dXJuIE5PVElGWV9PSzsKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggNDIyZDk2MC4uN2M3Mjg2ZSAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTM4OCw2ICszODgsNyBAQAogCSJSZWNsYWltYWJsZSIsCiAJIk1vdmFibGUiLAogCSJSZXNlcnZlIiwKKwkiSXNvbGF0ZSIsCiB9OwogCiBzdGF0aWMgdm9pZCAqZnJhZ19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggZGJjODFiOS4uMmE3MzlhZCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSAidmxhbi5oIgpAQCAtNDEsNiArNDIsOCBAQAogCiAvKiBHbG9iYWwgVkxBTiB2YXJpYWJsZXMgKi8KIAoraW50IHZsYW5fbmV0X2lkOworCiAvKiBPdXIgbGlzdGluZyBvZiBWTEFOIGdyb3VwKHMpICovCiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgdmxhbl9ncm91cF9oYXNoW1ZMQU5fR1JQX0hBU0hfU0laRV07CiAKQEAgLTQ5LDkgKzUyLDYgQEAKIHN0YXRpYyBjaGFyIHZsYW5fY29weXJpZ2h0W10gPSAiQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+IjsKIHN0YXRpYyBjaGFyIHZsYW5fYnVnZ3lyaWdodFtdID0gIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iOwogCi0vKiBEZXRlcm1pbmVzIGludGVyZmFjZSBuYW1pbmcgc2NoZW1lLiAqLwotdW5zaWduZWQgc2hvcnQgdmxhbl9uYW1lX3R5cGUgPSBWTEFOX05BTUVfVFlQRV9SQVdfUExVU19WSURfTk9fUEFEOwotCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHZsYW5fcGFja2V0X3R5cGUgPSB7CiAJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSwKIAkuZnVuYyA9IHZsYW5fc2tiX3JlY3YsIC8qIFZMQU4gcmVjZWl2ZSBtZXRob2QgKi8KQEAgLTY1LDE0ICs2NSwxNCBAQAogfQogCiAvKiBNdXN0IGJlIGludm9rZWQgd2l0aCBSQ1UgcmVhZCBsb2NrIChubyBwcmVlbXB0KSAqLwotc3RhdGljIHN0cnVjdCB2bGFuX2dyb3VwICpfX3ZsYW5fZmluZF9ncm91cChpbnQgcmVhbF9kZXZfaWZpbmRleCkKK3N0YXRpYyBzdHJ1Y3Qgdmxhbl9ncm91cCAqX192bGFuX2ZpbmRfZ3JvdXAoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KQogewogCXN0cnVjdCB2bGFuX2dyb3VwICpncnA7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47Ci0JaW50IGhhc2ggPSB2bGFuX2dycF9oYXNoZm4ocmVhbF9kZXZfaWZpbmRleCk7CisJaW50IGhhc2ggPSB2bGFuX2dycF9oYXNoZm4ocmVhbF9kZXYtPmlmaW5kZXgpOwogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdycCwgbiwgJnZsYW5fZ3JvdXBfaGFzaFtoYXNoXSwgaGxpc3QpIHsKLQkJaWYgKGdycC0+cmVhbF9kZXZfaWZpbmRleCA9PSByZWFsX2Rldl9pZmluZGV4KQorCQlpZiAoZ3JwLT5yZWFsX2RldiA9PSByZWFsX2RldikKIAkJCXJldHVybiBncnA7CiAJfQogCkBAIC04Niw3ICs4Niw3IEBACiBzdHJ1Y3QgbmV0X2RldmljZSAqX19maW5kX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiwKIAkJCQkgICB1bnNpZ25lZCBzaG9ydCBWSUQpCiB7Ci0Jc3RydWN0IHZsYW5fZ3JvdXAgKmdycCA9IF9fdmxhbl9maW5kX2dyb3VwKHJlYWxfZGV2LT5pZmluZGV4KTsKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gX192bGFuX2ZpbmRfZ3JvdXAocmVhbF9kZXYpOwogCiAJaWYgKGdycCkKIAkJcmV0dXJuIHZsYW5fZ3JvdXBfZ2V0X2RldmljZShncnAsIFZJRCk7CkBAIC0xMDMsMzIgKzEwMywzOCBAQAogCWtmcmVlKGdycCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbl9ncm91cF9hbGxvYyhpbnQgaWZpbmRleCkKK3N0YXRpYyBzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbl9ncm91cF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYpCiB7CiAJc3RydWN0IHZsYW5fZ3JvdXAgKmdycDsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQl1bnNpZ25lZCBpbnQgaTsKIAogCWdycCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bGFuX2dyb3VwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFncnApCiAJCXJldHVybiBOVUxMOwogCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSAqKSAqIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVkxBTl9HUk9VUF9BUlJBWV9TUExJVF9QQVJUUzsgaSsrKSB7Ci0JCWdycC0+dmxhbl9kZXZpY2VzX2FycmF5c1tpXSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZ3JwLT52bGFuX2RldmljZXNfYXJyYXlzW2ldKQotCQkJZ290byBlcnI7Ci0JfQotCi0JZ3JwLT5yZWFsX2Rldl9pZmluZGV4ID0gaWZpbmRleDsKKwlncnAtPnJlYWxfZGV2ID0gcmVhbF9kZXY7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZncnAtPmhsaXN0LAotCQkJICAgJnZsYW5fZ3JvdXBfaGFzaFt2bGFuX2dycF9oYXNoZm4oaWZpbmRleCldKTsKKwkJCSZ2bGFuX2dyb3VwX2hhc2hbdmxhbl9ncnBfaGFzaGZuKHJlYWxfZGV2LT5pZmluZGV4KV0pOwogCXJldHVybiBncnA7Cit9CiAKLWVycjoKLQl2bGFuX2dyb3VwX2ZyZWUoZ3JwKTsKLQlyZXR1cm4gTlVMTDsKK3N0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLCBpbnQgdmlkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICoqYXJyYXk7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlBU1NFUlRfUlROTCgpOworCisJYXJyYXkgPSB2Zy0+dmxhbl9kZXZpY2VzX2FycmF5c1t2aWQgLyBWTEFOX0dST1VQX0FSUkFZX1BBUlRfTEVOXTsKKwlpZiAoYXJyYXkgIT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlICopICogVkxBTl9HUk9VUF9BUlJBWV9QQVJUX0xFTjsKKwlhcnJheSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFycmF5ID09IE5VTEwpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXZnLT52bGFuX2RldmljZXNfYXJyYXlzW3ZpZCAvIFZMQU5fR1JPVVBfQVJSQVlfUEFSVF9MRU5dID0gYXJyYXk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHZsYW5fcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpCkBAIC0xNDUsMTEgKzE1MSw5IEBACiAKIAlBU1NFUlRfUlROTCgpOwogCi0JZ3JwID0gX192bGFuX2ZpbmRfZ3JvdXAocmVhbF9kZXYtPmlmaW5kZXgpOworCWdycCA9IF9fdmxhbl9maW5kX2dyb3VwKHJlYWxfZGV2KTsKIAlCVUdfT04oIWdycCk7CiAKLQl2bGFuX3Byb2NfcmVtX2RldihkZXYpOwotCiAJLyogVGFrZSBpdCBvdXQgb2Ygb3VyIG93biBzdHJ1Y3R1cmVzLCBidXQgYmUgc3VyZSB0byBpbnRlcmxvY2sgd2l0aAogCSAqIEhXIGFjY2VsZXJhdGluZyBkZXZpY2VzIG9yIFNXIHZsYW4gaW5wdXQgcGFja2V0IHByb2Nlc3NpbmcuCiAJICovCkBAIC0yNDAsMTMgKzI0NCwxNyBAQAogCXN0cnVjdCB2bGFuX2dyb3VwICpncnAsICpuZ3JwID0gTlVMTDsKIAlpbnQgZXJyOwogCi0JZ3JwID0gX192bGFuX2ZpbmRfZ3JvdXAocmVhbF9kZXYtPmlmaW5kZXgpOworCWdycCA9IF9fdmxhbl9maW5kX2dyb3VwKHJlYWxfZGV2KTsKIAlpZiAoIWdycCkgewotCQluZ3JwID0gZ3JwID0gdmxhbl9ncm91cF9hbGxvYyhyZWFsX2Rldi0+aWZpbmRleCk7CisJCW5ncnAgPSBncnAgPSB2bGFuX2dyb3VwX2FsbG9jKHJlYWxfZGV2KTsKIAkJaWYgKCFncnApCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQogCisJZXJyID0gdmxhbl9ncm91cF9wcmVhbGxvY192aWQoZ3JwLCB2bGFuX2lkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZnJlZV9ncm91cDsKKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlX2dyb3VwOwpAQCAtMjY4LDkgKzI3Niw2IEBACiAJaWYgKHJlYWxfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpCiAJCXJlYWxfZGV2LT52bGFuX3J4X2FkZF92aWQocmVhbF9kZXYsIHZsYW5faWQpOwogCi0JaWYgKHZsYW5fcHJvY19hZGRfZGV2KGRldikgPCAwKQotCQlwcl93YXJuaW5nKCI4MDIxcTogZmFpbGVkIHRvIGFkZCBwcm9jIGVudHJ5IGZvciAlc1xuIiwKLQkJCSAgIGRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX2dyb3VwOgpAQCAtMjg2LDYgKzI5MSw4IEBACiAJCQkJdW5zaWduZWQgc2hvcnQgVkxBTl9JRCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV3X2RldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJlYWxfZGV2KTsKKwlzdHJ1Y3Qgdmxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWMobmV0LCB2bGFuX25ldF9pZCk7CiAJY2hhciBuYW1lW0lGTkFNU0laXTsKIAlpbnQgZXJyOwogCkBAIC0yOTcsNyArMzA0LDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIEdvdHRhIHNldCB1cCB0aGUgZmllbGRzIGZvciB0aGUgZGV2aWNlLiAqLwotCXN3aXRjaCAodmxhbl9uYW1lX3R5cGUpIHsKKwlzd2l0Y2ggKHZuLT5uYW1lX3R5cGUpIHsKIAljYXNlIFZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRDoKIAkJLyogbmFtZSB3aWxsIGxvb2sgbGlrZToJIGV0aDEuMDAwNSAqLwogCQlzbnByaW50ZihuYW1lLCBJRk5BTVNJWiwgIiVzLiUuNGkiLCByZWFsX2Rldi0+bmFtZSwgVkxBTl9JRCk7CkBAIC0zMjgsNiArMzM1LDcgQEAKIAlpZiAobmV3X2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKKwlkZXZfbmV0X3NldChuZXdfZGV2LCBuZXQpOwogCS8qIG5lZWQgNCBieXRlcyBmb3IgZXh0cmEgVkxBTiBoZWFkZXIgaW5mbywKIAkgKiBob3BlIHRoZSB1bmRlcmx5aW5nIGRldmljZSBjYW4gaGFuZGxlIGl0LgogCSAqLwpAQCAtMzc0LDE3ICszODIsNDAgQEAKIAltZW1jcHkodmxhbi0+cmVhbF9kZXZfYWRkciwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogfQogCitzdGF0aWMgdm9pZCBfX3ZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTkVUREVWX0NIQU5HRU5BTUU6CisJCXZsYW5fcHJvY19yZW1fZGV2KGRldik7CisJCWlmICh2bGFuX3Byb2NfYWRkX2RldihkZXYpIDwgMCkKKwkJCXByX3dhcm5pbmcoIjgwMjFxOiBmYWlsZWQgdG8gY2hhbmdlIHByb2MgbmFtZSBmb3IgJXNcbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX1JFR0lTVEVSOgorCQlpZiAodmxhbl9wcm9jX2FkZF9kZXYoZGV2KSA8IDApCisJCQlwcl93YXJuaW5nKCI4MDIxcTogZmFpbGVkIHRvIGFkZCBwcm9jIGVudHJ5IGZvciAlc1xuIiwKKwkJCQkJZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKKwkJdmxhbl9wcm9jX3JlbV9kZXYoZGV2KTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LAogCQkJICAgICB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKLQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gX192bGFuX2ZpbmRfZ3JvdXAoZGV2LT5pZmluZGV4KTsKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwOwogCWludCBpLCBmbGdzOwogCXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2OwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCWlmIChpc192bGFuX2RldihkZXYpKSB7CisJCV9fdmxhbl9kZXZpY2VfZXZlbnQoZGV2LCBldmVudCk7CisJCWdvdG8gb3V0OworCX0KIAorCWdycCA9IF9fdmxhbl9maW5kX2dyb3VwKGRldik7CiAJaWYgKCFncnApCiAJCWdvdG8gb3V0OwogCkBAIC01MDQsNyArNTM1LDcgQEAKIAljYXNlIEdFVF9WTEFOX1JFQUxERVZfTkFNRV9DTUQ6CiAJY2FzZSBHRVRfVkxBTl9WSURfQ01EOgogCQllcnIgPSAtRU5PREVWOwotCQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGFyZ3MuZGV2aWNlMSk7CisJCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgYXJncy5kZXZpY2UxKTsKIAkJaWYgKCFkZXYpCiAJCQlnb3RvIG91dDsKIApAQCAtNTQ5LDcgKzU4MCwxMCBAQAogCQkJYnJlYWs7CiAJCWlmICgoYXJncy51Lm5hbWVfdHlwZSA+PSAwKSAmJgogCQkgICAgKGFyZ3MudS5uYW1lX3R5cGUgPCBWTEFOX05BTUVfVFlQRV9ISUdIRVNUKSkgewotCQkJdmxhbl9uYW1lX3R5cGUgPSBhcmdzLnUubmFtZV90eXBlOworCQkJc3RydWN0IHZsYW5fbmV0ICp2bjsKKworCQkJdm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZsYW5fbmV0X2lkKTsKKwkJCXZuLT5uYW1lX3R5cGUgPSBhcmdzLnUubmFtZV90eXBlOwogCQkJZXJyID0gMDsKIAkJfSBlbHNlIHsKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC01OTcsNiArNjMxLDUxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCB2bGFuX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB2bGFuX25ldCAqdm47CisKKwllcnIgPSAtRU5PTUVNOworCXZuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZsYW5fbmV0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZuID09IE5VTEwpCisJCWdvdG8gZXJyX2FsbG9jOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgdmxhbl9uZXRfaWQsIHZuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfYXNzaWduOworCisJdm4tPm5hbWVfdHlwZSA9IFZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF9OT19QQUQ7CisKKwllcnIgPSB2bGFuX3Byb2NfaW5pdChuZXQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9wcm9jOworCisJcmV0dXJuIDA7CisKK2Vycl9wcm9jOgorCS8qIG5vdGhpbmcgKi8KK2Vycl9hc3NpZ246CisJa2ZyZWUodm4pOworZXJyX2FsbG9jOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHZsYW5fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCB2bGFuX25ldCAqdm47CisKKwl2biA9IG5ldF9nZW5lcmljKG5ldCwgdmxhbl9uZXRfaWQpOworCXJ0bmxfa2lsbF9saW5rcyhuZXQsICZ2bGFuX2xpbmtfb3BzKTsKKwl2bGFuX3Byb2NfY2xlYW51cChuZXQpOworCWtmcmVlKHZuKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB2bGFuX25ldF9vcHMgPSB7CisJLmluaXQgPSB2bGFuX2luaXRfbmV0LAorCS5leGl0ID0gdmxhbl9leGl0X25ldCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHZsYW5fcHJvdG9faW5pdCh2b2lkKQogewogCWludCBlcnI7CkBAIC02MDQsOSArNjgzLDkgQEAKIAlwcl9pbmZvKCIlcyB2JXMgJXNcbiIsIHZsYW5fZnVsbG5hbWUsIHZsYW5fdmVyc2lvbiwgdmxhbl9jb3B5cmlnaHQpOwogCXByX2luZm8oIkFsbCBidWdzIGFkZGVkIGJ5ICVzXG4iLCB2bGFuX2J1Z2d5cmlnaHQpOwogCi0JZXJyID0gdmxhbl9wcm9jX2luaXQoKTsKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmdmxhbl9uZXRfaWQsICZ2bGFuX25ldF9vcHMpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyMDsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmdmxhbl9ub3RpZmllcl9ibG9jayk7CiAJaWYgKGVyciA8IDApCkBAIC02MjMsOCArNzAyLDggQEAKIGVycjM6CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnZsYW5fbm90aWZpZXJfYmxvY2spOwogZXJyMjoKLQl2bGFuX3Byb2NfY2xlYW51cCgpOwotZXJyMToKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHZsYW5fbmV0X2lkLCAmdmxhbl9uZXRfb3BzKTsKK2VycjA6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjQzLDcgKzcyMiw3IEBACiAJZm9yIChpID0gMDsgaSA8IFZMQU5fR1JQX0hBU0hfU0laRTsgaSsrKQogCQlCVUdfT04oIWhsaXN0X2VtcHR5KCZ2bGFuX2dyb3VwX2hhc2hbaV0pKTsKIAotCXZsYW5fcHJvY19jbGVhbnVwKCk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSh2bGFuX25ldF9pZCwgJnZsYW5fbmV0X29wcyk7CiAKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIH0KZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oCmluZGV4IDczZWZjYzcuLjUyMjlhNzIgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmgKKysrIGIvbmV0LzgwMjFxL3ZsYW4uaApAQCAtMyw4ICszLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KIAotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHZsYW5fbmFtZV90eXBlOwotCiAjZGVmaW5lIFZMQU5fR1JQX0hBU0hfU0hJRlQJNQogI2RlZmluZSBWTEFOX0dSUF9IQVNIX1NJWkUJKDEgPDwgVkxBTl9HUlBfSEFTSF9TSElGVCkKICNkZWZpbmUgVkxBTl9HUlBfSEFTSF9NQVNLCShWTEFOX0dSUF9IQVNIX1NJWkUgLSAxKQpAQCAtNDUsNCArNDMsMjIgQEAKIAogZXh0ZXJuIHN0cnVjdCBydG5sX2xpbmtfb3BzIHZsYW5fbGlua19vcHM7CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZsYW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTjsKK30KKworZXh0ZXJuIGludCB2bGFuX25ldF9pZDsKKworc3RydWN0IHByb2NfZGlyX2VudHJ5OworCitzdHJ1Y3Qgdmxhbl9uZXQgeworCS8qIC9wcm9jL25ldC92bGFuICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3ZsYW5fZGlyOworCS8qIC9wcm9jL25ldC92bGFuL2NvbmZpZyAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY192bGFuX2NvbmY7CisJLyogRGV0ZXJtaW5lcyBpbnRlcmZhY2UgbmFtaW5nIHNjaGVtZS4gKi8KKwl1bnNpZ25lZCBzaG9ydCBuYW1lX3R5cGU7Cit9OworCiAjZW5kaWYgLyogIShfX0JFTl9WTEFOXzgwMl8xUV9JTkNfXykgKi8KZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKaW5kZXggNzdmMDRlNC4uYzk2MWYwOCAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKQEAgLTE1Myw5ICsxNTMsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAl1bnNpZ25lZCBzaG9ydCB2bGFuX1RDSTsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCi0JCWdvdG8gZXJyX2ZyZWU7Ci0KIAlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC0xNzEsNyArMTY4LDcgQEAKIAlza2ItPmRldiA9IF9fZmluZF92bGFuX2RldihkZXYsIHZpZCk7CiAJaWYgKCFza2ItPmRldikgewogCQlwcl9kZWJ1ZygiJXM6IEVSUk9SOiBObyBuZXRfZGV2aWNlIGZvciBWSUQ6ICV1IG9uIGRldjogJXNcbiIsCi0JCQkgX19GVU5DVElPTl9fLCAodW5zaWduZWQgaW50KXZpZCwgZGV2LT5uYW1lKTsKKwkJCSBfX2Z1bmNfXywgKHVuc2lnbmVkIGludCl2aWQsIGRldi0+bmFtZSk7CiAJCWdvdG8gZXJyX3VubG9jazsKIAl9CiAKQEAgLTE4Nyw3ICsxODQsNyBAQAogCQkJCQkJICBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKSk7CiAKIAlwcl9kZWJ1ZygiJXM6IHByaW9yaXR5OiAldSBmb3IgVENJOiAlaHVcbiIsCi0JCSBfX0ZVTkNUSU9OX18sIHNrYi0+cHJpb3JpdHksIG50b2hzKHZoZHItPmhfdmxhbl9UQ0kpKTsKKwkJIF9fZnVuY19fLCBza2ItPnByaW9yaXR5LCBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKSk7CiAKIAlzd2l0Y2ggKHNrYi0+cGt0X3R5cGUpIHsKIAljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6IC8qIFllYWgsIHN0YXRzIGNvbGxlY3QgdGhlc2UgdG9nZXRoZXIuLiAqLwpAQCAtMjY4LDcgKzI2NSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYgPSBkZXY7CiAKIAlwcl9kZWJ1ZygiJXM6IHNrYjogJXAgdHlwZTogJWh4IGxlbjogJXUgdmxhbl9pZDogJWh4LCBkYWRkcjogJXBcbiIsCi0JCSBfX0ZVTkNUSU9OX18sIHNrYiwgdHlwZSwgbGVuLCB2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5faWQsCisJCSBfX2Z1bmNfXywgc2tiLCB0eXBlLCBsZW4sIHZsYW5fZGV2X2luZm8oZGV2KS0+dmxhbl9pZCwKIAkJIGRhZGRyKTsKIAogCS8qIGJ1aWxkIHZsYW4gaGVhZGVyIG9ubHkgaWYgcmVfb3JkZXJfaGVhZGVyIGZsYWcgaXMgTk9UIHNldC4gIFRoaXMKQEAgLTM0MCw3ICszMzcsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJdmxhbl9kZXZfaW5mbyh2ZGV2KS0+Y250X2luY19oZWFkcm9vbV9vbl90eCsrOwotCQlwcl9kZWJ1ZygiJXM6ICVzOiBoYWQgdG8gZ3JvdyBza2JcbiIsIF9fRlVOQ1RJT05fXywgdmRldi0+bmFtZSk7CisJCXByX2RlYnVnKCIlczogJXM6IGhhZCB0byBncm93IHNrYlxuIiwgX19mdW5jX18sIHZkZXYtPm5hbWUpOwogCX0KIAogCWlmIChidWlsZF92bGFuX2hlYWRlcikgewpAQCAtMzgyLDcgKzM3OSw3IEBACiAJCXZsYW5fZGV2X2luZm8oZGV2KS0+Y250X2VuY2FwX29uX3htaXQrKzsKIAogCQlwcl9kZWJ1ZygiJXM6IHByb3RvIHRvIGVuY2FwOiAweCVoeFxuIiwKLQkJCSBfX0ZVTkNUSU9OX18sIGh0b25zKHZldGgtPmhfdmxhbl9wcm90bykpOworCQkJIF9fZnVuY19fLCBudG9ocyh2ZXRoLT5oX3ZsYW5fcHJvdG8pKTsKIAkJLyogQ29uc3RydWN0IHRoZSBzZWNvbmQgdHdvIGJ5dGVzLiBUaGlzIGZpZWxkIGxvb2tzIHNvbWV0aGluZwogCQkgKiBsaWtlOgogCQkgKiB1c3JfcHJpb3JpdHk6IDMgYml0cwkgKGhpZ2ggYml0cykKQEAgLTQwMyw3ICs0MDAsNyBAQAogCX0KIAogCXByX2RlYnVnKCIlczogYWJvdXQgdG8gc2VuZCBza2I6ICVwIHRvIGRldjogJXNcbiIsCi0JCV9fRlVOQ1RJT05fXywgc2tiLCBza2ItPmRldi0+bmFtZSk7CisJCV9fZnVuY19fLCBza2IsIHNrYi0+ZGV2LT5uYW1lKTsKIAlwcl9kZWJ1ZygiICAiIE1BQ19GTVQgIiAiIE1BQ19GTVQgIiAlNGh4ICU0aHggJTRoeFxuIiwKIAkJIHZldGgtPmhfZGVzdFswXSwgdmV0aC0+aF9kZXN0WzFdLCB2ZXRoLT5oX2Rlc3RbMl0sCiAJCSB2ZXRoLT5oX2Rlc3RbM10sIHZldGgtPmhfZGVzdFs0XSwgdmV0aC0+aF9kZXN0WzVdLApAQCAtNjYwLDcgKzY1Nyw3IEBACiAJaW50IHN1YmNsYXNzID0gMDsKIAogCS8qIElGRl9CUk9BRENBU1R8SUZGX01VTFRJQ0FTVDsgPz8/ICovCi0JZGV2LT5mbGFncyAgPSByZWFsX2Rldi0+ZmxhZ3MgJiB+SUZGX1VQOworCWRldi0+ZmxhZ3MgID0gcmVhbF9kZXYtPmZsYWdzICYgfihJRkZfVVAgfCBJRkZfUFJPTUlTQyB8IElGRl9BTExNVUxUSSk7CiAJZGV2LT5pZmxpbmsgPSByZWFsX2Rldi0+aWZpbmRleDsKIAlkZXYtPnN0YXRlICA9IChyZWFsX2Rldi0+c3RhdGUgJiAoKDE8PF9fTElOS19TVEFURV9OT0NBUlJJRVIpIHwKIAkJCQkJICAoMTw8X19MSU5LX1NUQVRFX0RPUk1BTlQpKSkgfApAQCAtNjkyLDYgKzY4OSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB2bGFuX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgdmxhbl9wcmlvcml0eV90Y2lfbWFwcGluZyAqcG07CisJc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW4gPSB2bGFuX2Rldl9pbmZvKGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bGFuLT5lZ3Jlc3NfcHJpb3JpdHlfbWFwKTsgaSsrKSB7CisJCXdoaWxlICgocG0gPSB2bGFuLT5lZ3Jlc3NfcHJpb3JpdHlfbWFwW2ldKSAhPSBOVUxMKSB7CisJCQl2bGFuLT5lZ3Jlc3NfcHJpb3JpdHlfbWFwW2ldID0gcG0tPm5leHQ7CisJCQlrZnJlZShwbSk7CisJCX0KKwl9Cit9CisKIHZvaWQgdmxhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWV0aGVyX3NldHVwKGRldik7CkBAIC03MDEsNiArNzEyLDcgQEAKIAogCWRldi0+Y2hhbmdlX210dQkJPSB2bGFuX2Rldl9jaGFuZ2VfbXR1OwogCWRldi0+aW5pdAkJPSB2bGFuX2Rldl9pbml0OworCWRldi0+dW5pbml0CQk9IHZsYW5fZGV2X3VuaW5pdDsKIAlkZXYtPm9wZW4JCT0gdmxhbl9kZXZfb3BlbjsKIAlkZXYtPnN0b3AJCT0gdmxhbl9kZXZfc3RvcDsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcwk9IHZsYW5fZGV2X3NldF9tYWNfYWRkcmVzczsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX25ldGxpbmsuYyBiL25ldC84MDIxcS92bGFuX25ldGxpbmsuYwppbmRleCBlMzJlZWIzLi5jOTNlNjllIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCWlmICghdGJbSUZMQV9MSU5LXSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmVhbF9kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBubGFfZ2V0X3UzMih0YltJRkxBX0xJTktdKSk7CisJcmVhbF9kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoZGV2X25ldChkZXYpLCBubGFfZ2V0X3UzMih0YltJRkxBX0xJTktdKSk7CiAJaWYgKCFyZWFsX2RldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFucHJvYy5jIGIvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKaW5kZXggYTBlYzQ3OS4uZGFhZDAwNiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgInZsYW5wcm9jLmgiCiAjaW5jbHVkZSAidmxhbi5oIgogCkBAIC03OSw3ICs4MCw4IEBACiAKIHN0YXRpYyBpbnQgdmxhbl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnZsYW5fc2VxX29wcyk7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJnZsYW5fc2VxX29wcywKKwkJCXNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZsYW5fZm9wcyA9IHsKQEAgLTg3LDcgKzg5LDcgQEAKIAkub3BlbiAgICA9IHZsYW5fc2VxX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogLyoKQEAgLTExMSwxOCArMTEzLDYgQEAKICAqIFByb2MgZmlsZXN5c3RlbSBkZXJlY3RvcnkgZW50cmllcy4KICAqLwogCi0vKgotICoJL3Byb2MvbmV0L3ZsYW4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3ZsYW5fZGlyOwotCi0vKgotICoJL3Byb2MvbmV0L3ZsYW4vY29uZmlnCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY192bGFuX2NvbmY7Ci0KIC8qIFN0cmluZ3MgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp2bGFuX25hbWVfdHlwZV9zdHJbVkxBTl9OQU1FX1RZUEVfSElHSEVTVF0gPSB7CiAgICAgW1ZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF0gICAgICAgID0gIlZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRCIsCkBAIC0xMzgsMTMgKzEyOCwxNSBAQAogICoJQ2xlYW4gdXAgL3Byb2MvbmV0L3ZsYW4gZW50cmllcwogICovCiAKLXZvaWQgdmxhbl9wcm9jX2NsZWFudXAodm9pZCkKK3ZvaWQgdmxhbl9wcm9jX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewotCWlmIChwcm9jX3ZsYW5fY29uZikKLQkJcmVtb3ZlX3Byb2NfZW50cnkobmFtZV9jb25mLCBwcm9jX3ZsYW5fZGlyKTsKKwlzdHJ1Y3Qgdmxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWMobmV0LCB2bGFuX25ldF9pZCk7CiAKLQlpZiAocHJvY192bGFuX2RpcikKLQkJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgbmFtZV9yb290KTsKKwlpZiAodm4tPnByb2Nfdmxhbl9jb25mKQorCQlyZW1vdmVfcHJvY19lbnRyeShuYW1lX2NvbmYsIHZuLT5wcm9jX3ZsYW5fZGlyKTsKKworCWlmICh2bi0+cHJvY192bGFuX2RpcikKKwkJcHJvY19uZXRfcmVtb3ZlKG5ldCwgbmFtZV9yb290KTsKIAogCS8qIER5bmFtaWNhbGx5IGFkZGVkIGVudHJpZXMgc2hvdWxkIGJlIGNsZWFuZWQgdXAgYXMgdGhlaXIgdmxhbl9kZXZpY2UKIAkgKiBpcyByZW1vdmVkLCBzbyB3ZSBzaG91bGQgbm90IGhhdmUgdG8gdGFrZSBjYXJlIG9mIGl0IGhlcmUuLi4KQEAgLTE1NSwyMiArMTQ3LDIzIEBACiAgKglDcmVhdGUgL3Byb2MvbmV0L3ZsYW4gZW50cmllcwogICovCiAKLWludCBfX2luaXQgdmxhbl9wcm9jX2luaXQodm9pZCkKK2ludCB2bGFuX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JcHJvY192bGFuX2RpciA9IHByb2NfbWtkaXIobmFtZV9yb290LCBpbml0X25ldC5wcm9jX25ldCk7Ci0JaWYgKCFwcm9jX3ZsYW5fZGlyKQorCXN0cnVjdCB2bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZsYW5fbmV0X2lkKTsKKworCXZuLT5wcm9jX3ZsYW5fZGlyID0gcHJvY19uZXRfbWtkaXIobmV0LCBuYW1lX3Jvb3QsIG5ldC0+cHJvY19uZXQpOworCWlmICghdm4tPnByb2Nfdmxhbl9kaXIpCiAJCWdvdG8gZXJyOwogCi0JcHJvY192bGFuX2NvbmYgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lX2NvbmYsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLAotCQkJCQkgICBwcm9jX3ZsYW5fZGlyKTsKLQlpZiAoIXByb2Nfdmxhbl9jb25mKQorCXZuLT5wcm9jX3ZsYW5fY29uZiA9IHByb2NfY3JlYXRlKG5hbWVfY29uZiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCisJCQkJICAgICB2bi0+cHJvY192bGFuX2RpciwgJnZsYW5fZm9wcyk7CisJaWYgKCF2bi0+cHJvY192bGFuX2NvbmYpCiAJCWdvdG8gZXJyOwotCXByb2Nfdmxhbl9jb25mLT5wcm9jX2ZvcHMgPSAmdmxhbl9mb3BzOwogCXJldHVybiAwOwogCiBlcnI6Ci0JcHJfZXJyKCIlczogY2FuJ3QgY3JlYXRlIGVudHJ5IGluIHByb2MgZmlsZXN5c3RlbSFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0Jdmxhbl9wcm9jX2NsZWFudXAoKTsKKwlwcl9lcnIoIiVzOiBjYW4ndCBjcmVhdGUgZW50cnkgaW4gcHJvYyBmaWxlc3lzdGVtIVxuIiwgX19mdW5jX18pOworCXZsYW5fcHJvY19jbGVhbnVwKG5ldCk7CiAJcmV0dXJuIC1FTk9CVUZTOwogfQogCkBAIC0xODEsMTQgKzE3NCwxMyBAQAogaW50IHZsYW5fcHJvY19hZGRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2KQogewogCXN0cnVjdCB2bGFuX2Rldl9pbmZvICpkZXZfaW5mbyA9IHZsYW5fZGV2X2luZm8odmxhbmRldik7CisJc3RydWN0IHZsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKGRldl9uZXQodmxhbmRldiksIHZsYW5fbmV0X2lkKTsKIAotCWRldl9pbmZvLT5kZW50ID0gY3JlYXRlX3Byb2NfZW50cnkodmxhbmRldi0+bmFtZSwKLQkJCQkJICAgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCi0JCQkJCSAgIHByb2Nfdmxhbl9kaXIpOworCWRldl9pbmZvLT5kZW50ID0gcHJvY19jcmVhdGUodmxhbmRldi0+bmFtZSwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCisJCQkJICAgICB2bi0+cHJvY192bGFuX2RpciwgJnZsYW5kZXZfZm9wcyk7CiAJaWYgKCFkZXZfaW5mby0+ZGVudCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JZGV2X2luZm8tPmRlbnQtPnByb2NfZm9wcyA9ICZ2bGFuZGV2X2ZvcHM7CiAJZGV2X2luZm8tPmRlbnQtPmRhdGEgPSB2bGFuZGV2OwogCXJldHVybiAwOwogfQpAQCAtMTk4LDEwICsxOTAsMTIgQEAKICAqLwogaW50IHZsYW5fcHJvY19yZW1fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2KQogeworCXN0cnVjdCB2bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhkZXZfbmV0KHZsYW5kZXYpLCB2bGFuX25ldF9pZCk7CisKIAkvKiogTk9URTogIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBkZW50LCBpdCBzZWVtcy4gKi8KIAlpZiAodmxhbl9kZXZfaW5mbyh2bGFuZGV2KS0+ZGVudCkgewogCQlyZW1vdmVfcHJvY19lbnRyeSh2bGFuX2Rldl9pbmZvKHZsYW5kZXYpLT5kZW50LT5uYW1lLAotCQkJCSAgcHJvY192bGFuX2Rpcik7CisJCQkJICB2bi0+cHJvY192bGFuX2Rpcik7CiAJCXZsYW5fZGV2X2luZm8odmxhbmRldiktPmRlbnQgPSBOVUxMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTIxMywxNiArMjA3LDEyIEBACiAgKiBUaGUgZm9sbG93aW5nIGZldyBmdW5jdGlvbnMgYnVpbGQgdGhlIGNvbnRlbnQgb2YgL3Byb2MvbmV0L3ZsYW4vY29uZmlnCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgaXNfdmxhbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOOwotfQotCiAvKiBzdGFydCByZWFkIG9mIC9wcm9jL25ldC92bGFuL2NvbmZpZyAqLwogc3RhdGljIHZvaWQgKnZsYW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKGRldl9iYXNlX2xvY2spCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAlsb2ZmX3QgaSA9IDE7CiAKIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwpAQCAtMjMwLDcgKzIyMCw3IEBACiAJaWYgKCpwb3MgPT0gMCkKIAkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKIAotCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikgeworCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikgewogCQlpZiAoIWlzX3ZsYW5fZGV2KGRldikpCiAJCQljb250aW51ZTsKIApAQCAtMjQ0LDE0ICsyMzQsMTUgQEAKIHN0YXRpYyB2b2lkICp2bGFuX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJKysqcG9zOwogCiAJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopdjsKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCWRldiA9IG5ldF9kZXZpY2VfZW50cnkoJmluaXRfbmV0LmRldl9iYXNlX2hlYWQpOworCQlkZXYgPSBuZXRfZGV2aWNlX2VudHJ5KCZuZXQtPmRldl9iYXNlX2hlYWQpOwogCi0JZm9yX2VhY2hfbmV0ZGV2X2NvbnRpbnVlKCZpbml0X25ldCwgZGV2KSB7CisJZm9yX2VhY2hfbmV0ZGV2X2NvbnRpbnVlKG5ldCwgZGV2KSB7CiAJCWlmICghaXNfdmxhbl9kZXYoZGV2KSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yNjksMTMgKzI2MCwxNiBAQAogCiBzdGF0aWMgaW50IHZsYW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisJc3RydWN0IHZsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKG5ldCwgdmxhbl9uZXRfaWQpOworCiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CiAJCWNvbnN0IGNoYXIgKm5tdHlwZSA9IE5VTEw7CiAKIAkJc2VxX3B1dHMoc2VxLCAiVkxBTiBEZXYgbmFtZQkgfCBWTEFOIElEXG4iKTsKIAotCQlpZiAodmxhbl9uYW1lX3R5cGUgPCBBUlJBWV9TSVpFKHZsYW5fbmFtZV90eXBlX3N0cikpCi0JCSAgICBubXR5cGUgPSAgdmxhbl9uYW1lX3R5cGVfc3RyW3ZsYW5fbmFtZV90eXBlXTsKKwkJaWYgKHZuLT5uYW1lX3R5cGUgPCBBUlJBWV9TSVpFKHZsYW5fbmFtZV90eXBlX3N0cikpCisJCSAgICBubXR5cGUgPSAgdmxhbl9uYW1lX3R5cGVfc3RyW3ZuLT5uYW1lX3R5cGVdOwogCiAJCXNlcV9wcmludGYoc2VxLCAiTmFtZS1UeXBlOiAlc1xuIiwKIAkJCSAgIG5tdHlwZSA/IG5tdHlwZSA6ICAiVU5LTk9XTiIpOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmggYi9uZXQvODAyMXEvdmxhbnByb2MuaAppbmRleCBkYTU0MmNhLi4wNjNmNjBhIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuaAorKysgYi9uZXQvODAyMXEvdmxhbnByb2MuaApAQCAtMiwxNSArMiwxNyBAQAogI2RlZmluZSBfX0JFTl9WTEFOX1BST0NfSU5DX18KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1pbnQgdmxhbl9wcm9jX2luaXQodm9pZCk7CitzdHJ1Y3QgbmV0OworCitpbnQgdmxhbl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKIGludCB2bGFuX3Byb2NfcmVtX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldik7CiBpbnQgdmxhbl9wcm9jX2FkZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYpOwotdm9pZCB2bGFuX3Byb2NfY2xlYW51cCh2b2lkKTsKK3ZvaWQgdmxhbl9wcm9jX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKIAogI2Vsc2UgLyogTm8gQ09ORklHX1BST0NfRlMgKi8KIAotI2RlZmluZSB2bGFuX3Byb2NfaW5pdCgpCSgwKQotI2RlZmluZSB2bGFuX3Byb2NfY2xlYW51cCgpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB2bGFuX3Byb2NfaW5pdChuZXQpCSgwKQorI2RlZmluZSB2bGFuX3Byb2NfY2xlYW51cChuZXQpCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSB2bGFuX3Byb2NfYWRkX2RldihkZXYpCSh7KHZvaWQpKGRldiksIDA7IH0pCiAjZGVmaW5lIHZsYW5fcHJvY19yZW1fZGV2KGRldikJKHsodm9pZCkoZGV2KSwgMDsgfSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0LzlwL2Vycm9yLmMgYi9uZXQvOXAvZXJyb3IuYwppbmRleCBhYjI0NThiLi42NDEwNGI5IDEwMDY0NAotLS0gYS9uZXQvOXAvZXJyb3IuYworKysgYi9uZXQvOXAvZXJyb3IuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJaWYgKGVycm5vID09IDApIHsKIAkJLyogVE9ETzogaWYgZXJyb3IgaXNuJ3QgZm91bmQsIGFkZCBpdCBkeW5hbWljYWxseSAqLwogCQllcnJzdHJbbGVuXSA9IDA7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycnN0ciA6JXM6IG5vdCBmb3VuZFxuIiwgX19GVU5DVElPTl9fLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJzdHIgOiVzOiBub3QgZm91bmRcbiIsIF9fZnVuY19fLAogCQkgICAgICAgZXJyc3RyKTsKIAkJZXJybm8gPSAxOwogCX0KZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19mZC5jIGIvbmV0LzlwL3RyYW5zX2ZkLmMKaW5kZXggMWFhOWQ1MS4uZjYyNGRmZiAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2ZkLmMKKysrIGIvbmV0LzlwL3RyYW5zX2ZkLmMKQEAgLTg2MSw3ICs4NjEsNiBAQAogCiBzdGF0aWMgdm9pZCBwOV9tdXhfZmx1c2hfY2Ioc3RydWN0IHA5X3JlcSAqZnJlcSwgdm9pZCAqYSkKIHsKLQlwOV9jb25uX3JlcV9jYWxsYmFjayBjYjsKIAlpbnQgdGFnOwogCXN0cnVjdCBwOV9jb25uICptOwogCXN0cnVjdCBwOV9yZXEgKnJlcSwgKnJyZXEsICpycHRyOwpAQCAtODcyLDcgKzg3MSw2IEBACiAJCWZyZXEtPnRjYWxsLT5wYXJhbXMudGZsdXNoLm9sZHRhZyk7CiAKIAlzcGluX2xvY2soJm0tPmxvY2spOwotCWNiID0gTlVMTDsKIAl0YWcgPSBmcmVxLT50Y2FsbC0+cGFyYW1zLnRmbHVzaC5vbGR0YWc7CiAJcmVxID0gTlVMTDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJlcSwgcnB0ciwgJm0tPnJlcV9saXN0LCByZXFfbGlzdCkgewpAQCAtMTUyMiw3ICsxNTIwLDcgQEAKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV91bml4X3RyYW5zKTsKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV9mZF90cmFucyk7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogbW9kdWxlX2luaXQocDlfdHJhbnNfZmRfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKaW5kZXggMDExN2I5Zi4uZGU3YTlmNSAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCX0KIAkJZm9yIChjb3VudCA9IG9sZF9tYXg7IGNvdW50IDwgYy0+bWF4X3RhZzsgY291bnQrKykgewogCQkJYy0+cmVxc1tjb3VudF0uc3RhdHVzID0gUkVRX1NUQVRVU19JRExFOwotCQkJYy0+cmVxc1tjb3VudF0ud3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX3QpLAorCQkJYy0+cmVxc1tjb3VudF0ud3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksCiAJCQkJCQkJCUdGUF9BVE9NSUMpOwogCQkJaWYgKCFjLT5yZXFzW2NvdW50XS53cSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOwpAQCAtMTgzLDggKzE4Myw3IEBACiAJCXNnX3NldF9idWYoJnNnW2luZGV4KytdLCBkYXRhLCBzKTsKIAkJY291bnQgLT0gczsKIAkJZGF0YSArPSBzOwotCQlpZiAoaW5kZXggPiBsaW1pdCkKLQkJCUJVRygpOworCQlCVUdfT04oaW5kZXggPiBsaW1pdCk7CiAJfQogCiAJcmV0dXJuIGluZGV4LXN0YXJ0OwpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCA2NjI3YzZhLi5hY2JmN2M2MCAxMDA2NDQKLS0tIGEvbmV0L0tjb25maWcKKysrIGIvbmV0L0tjb25maWcKQEAgLTQ1LDcgKzQ1LDcgQEAKIAktLS1oZWxwLS0tCiAJICBUaGVzZSBhcmUgdGhlIHByb3RvY29scyB1c2VkIG9uIHRoZSBJbnRlcm5ldCBhbmQgb24gbW9zdCBsb2NhbAogCSAgRXRoZXJuZXRzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2F5IFkgaGVyZSAodGhpcyB3aWxsIGVubGFyZ2UKLQkgIHlvdXIga2VybmVsIGJ5IGFib3V0IDE0NCBLQiksIHNpbmNlIHNvbWUgcHJvZ3JhbXMgKGUuZy4gdGhlIFggd2luZG93CisJICB5b3VyIGtlcm5lbCBieSBhYm91dCA0MDAgS0IpLCBzaW5jZSBzb21lIHByb2dyYW1zIChlLmcuIHRoZSBYIHdpbmRvdwogCSAgc3lzdGVtKSB1c2UgVENQL0lQIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55CiAJICBvdGhlciBjb21wdXRlci4gWW91IHdpbGwgZ2V0IHRoZSBzby1jYWxsZWQgbG9vcGJhY2sgZGV2aWNlIHdoaWNoCiAJICBhbGxvd3MgeW91IHRvIHBpbmcgeW91cnNlbGYgKGdyZWF0IGZ1biwgdGhhdCEpLgpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9hYXJwLmMgYi9uZXQvYXBwbGV0YWxrL2FhcnAuYwppbmRleCAxODA1OGJiLi4yNWFhMzdjIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2FhcnAuYworKysgYi9uZXQvYXBwbGV0YWxrL2FhcnAuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAlpbnQgY3Q7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgPT0gTkVUREVWX0RPV04pIHsKQEAgLTcxNiw3ICs3MTYsNyBAQAogCXN0cnVjdCBhdGFsa19hZGRyIHNhLCAqbWEsIGRhOwogCXN0cnVjdCBhdGFsa19pZmFjZSAqaWZhOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJZ290byBvdXQwOwogCiAJLyogV2Ugb25seSBkbyBFdGhlcm5ldCBTTkFQIEFBUlAuICovCkBAIC0xMDMzLDI1ICsxMDMzLDggQEAKIAogc3RhdGljIGludCBhYXJwX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwotCWludCByYyA9IC1FTk9NRU07Ci0Jc3RydWN0IGFhcnBfaXRlcl9zdGF0ZSAqcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXMpCi0JCWdvdG8gb3V0OwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmYWFycF9zZXFfb3BzKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0Jc2VxCSAgICAgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc2VxLT5wcml2YXRlID0gczsKLQltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotb3V0X2tmcmVlOgotCWtmcmVlKHMpOwotCWdvdG8gb3V0OworCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZhYXJwX3NlcV9vcHMsCisJCQlzaXplb2Yoc3RydWN0IGFhcnBfaXRlcl9zdGF0ZSkpOwogfQogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0YWxrX3NlcV9hcnBfZm9wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jIGIvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMKaW5kZXggOGU4ZGNmZC4uMTYyMTk5YSAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMKKysrIGIvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMKQEAgLTI4MywyNSArMjgzLDI0IEBACiAJCWdvdG8gb3V0OwogCWF0YWxrX3Byb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpbnRlcmZhY2UiLCBTX0lSVUdPLCBhdGFsa19wcm9jX2Rpcik7CisJcCA9IHByb2NfY3JlYXRlKCJpbnRlcmZhY2UiLCBTX0lSVUdPLCBhdGFsa19wcm9jX2RpciwKKwkJCSZhdGFsa19zZXFfaW50ZXJmYWNlX2ZvcHMpOwogCWlmICghcCkKIAkJZ290byBvdXRfaW50ZXJmYWNlOwotCXAtPnByb2NfZm9wcyA9ICZhdGFsa19zZXFfaW50ZXJmYWNlX2ZvcHM7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoInJvdXRlIiwgU19JUlVHTywgYXRhbGtfcHJvY19kaXIpOworCXAgPSBwcm9jX2NyZWF0ZSgicm91dGUiLCBTX0lSVUdPLCBhdGFsa19wcm9jX2RpciwKKwkJCSZhdGFsa19zZXFfcm91dGVfZm9wcyk7CiAJaWYgKCFwKQogCQlnb3RvIG91dF9yb3V0ZTsKLQlwLT5wcm9jX2ZvcHMgPSAmYXRhbGtfc2VxX3JvdXRlX2ZvcHM7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoInNvY2tldCIsIFNfSVJVR08sIGF0YWxrX3Byb2NfZGlyKTsKKwlwID0gcHJvY19jcmVhdGUoInNvY2tldCIsIFNfSVJVR08sIGF0YWxrX3Byb2NfZGlyLAorCQkJJmF0YWxrX3NlcV9zb2NrZXRfZm9wcyk7CiAJaWYgKCFwKQogCQlnb3RvIG91dF9zb2NrZXQ7Ci0JcC0+cHJvY19mb3BzID0gJmF0YWxrX3NlcV9zb2NrZXRfZm9wczsKIAotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXJwIiwgU19JUlVHTywgYXRhbGtfcHJvY19kaXIpOworCXAgPSBwcm9jX2NyZWF0ZSgiYXJwIiwgU19JUlVHTywgYXRhbGtfcHJvY19kaXIsICZhdGFsa19zZXFfYXJwX2ZvcHMpOwogCWlmICghcCkKIAkJZ290byBvdXRfYXJwOwotCXAtPnByb2NfZm9wcyA9ICZhdGFsa19zZXFfYXJwX2ZvcHM7CiAKIAlyYyA9IDA7CiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCAzYmU1NWM4Li40NGNkNDJmIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTY0OCw3ICs2NDgsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgPT0gTkVUREVWX0RPV04pCkBAIC0xNDA1LDcgKzE0MDUsNyBAQAogCWludCBvcmlnbGVuOwogCV9fdTE2IGxlbl9ob3BzOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJZ290byBmcmVlaXQ7CiAKIAkvKiBEb24ndCBtYW5nbGUgYnVmZmVyIGlmIHNoYXJlZCAqLwpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIHN0YXRpYyBpbnQgbHRhbGtfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCWdvdG8gZnJlZWl0OwogCiAJLyogRXhwYW5kIGFueSBzaG9ydCBmb3JtIGZyYW1lcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9icjI2ODQuYyBiL25ldC9hdG0vYnIyNjg0LmMKaW5kZXggNTc0ZDlhOS4uMWIyMjgwNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9icjI2ODQuYworKysgYi9uZXQvYXRtL2JyMjY4NC5jCkBAIC03NDIsOSArNzQyLDkgQEAKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKLQlpZiAoKHAgPSBjcmVhdGVfcHJvY19lbnRyeSgiYnIyNjg0IiwgMCwgYXRtX3Byb2Nfcm9vdCkpID09IE5VTEwpCisJcCA9IHByb2NfY3JlYXRlKCJicjI2ODQiLCAwLCBhdG1fcHJvY19yb290LCAmYnIyNjg0X3Byb2Nfb3BzKTsKKwlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlwLT5wcm9jX2ZvcHMgPSAmYnIyNjg0X3Byb2Nfb3BzOwogI2VuZGlmCiAJcmVnaXN0ZXJfYXRtX2lvY3RsKCZicjI2ODRfaW9jdGxfb3BzKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggODZiODg1ZS4uNmY4MjIzZSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKQEAgLTY0OCwxMCArNjQ4LDYgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAKIAlpbl9kZXYgPSAoKHN0cnVjdCBpbl9pZmFkZHIgKilpZmEpLT5pZmFfZGV2OwotCWlmICghaW5fZGV2IHx8ICFpbl9kZXYtPmRldikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX2luZXRfZXZlbnQ6IG5vIGRldmljZVxuIik7Ci0JCXJldHVybiBOT1RJRllfRE9ORTsKLQl9CiAJLyoKIAkgKiBUcmFuc2l0aW9ucyBhcmUgb2YgdGhlIGRvd24tY2hhbmdlLXVwIHR5cGUsIHNvIGl0J3Mgc3VmZmljaWVudCB0bwogCSAqIGhhbmRsZSB0aGUgY2hhbmdlIG9uIHVwLgpAQCAtOTQ3LDYgKzk0Myw4IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGF0bV9jbGlwX2V4aXRfbm9wcm9jKHZvaWQpOworCiBzdGF0aWMgaW50IF9faW5pdCBhdG1fY2xpcF9pbml0KHZvaWQpCiB7CiAJbmVpZ2hfdGFibGVfaW5pdF9ub19uZXRsaW5rKCZjbGlwX3RibCk7CkBAIC05NjIsMjEgKzk2MCwyMyBAQAogCXsKIAkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwogCi0JCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXJwIiwgU19JUlVHTywgYXRtX3Byb2Nfcm9vdCk7Ci0JCWlmIChwKQotCQkJcC0+cHJvY19mb3BzID0gJmFycF9zZXFfZm9wczsKKwkJcCA9IHByb2NfY3JlYXRlKCJhcnAiLCBTX0lSVUdPLCBhdG1fcHJvY19yb290LCAmYXJwX3NlcV9mb3BzKTsKKwkJaWYgKCFwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBpbml0aWFsaXplICIKKwkJCSAgICAgICAiL3Byb2MvbmV0L2F0bS9hcnBcbiIpOworCQkJYXRtX2NsaXBfZXhpdF9ub3Byb2MoKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfQogI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGF0bV9jbGlwX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIGF0bV9jbGlwX2V4aXRfbm9wcm9jKHZvaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKm5leHQ7CiAKLQlyZW1vdmVfcHJvY19lbnRyeSgiYXJwIiwgYXRtX3Byb2Nfcm9vdCk7Ci0KIAl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZjbGlwX2luZXRfbm90aWZpZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjbGlwX2Rldl9ub3RpZmllcik7CiAKQEAgLTEwMDcsNiArMTAwNywxMyBAQAogCWNsaXBfdGJsX2hvb2sgPSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtX2NsaXBfZXhpdCh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KCJhcnAiLCBhdG1fcHJvY19yb290KTsKKworCWF0bV9jbGlwX2V4aXRfbm9wcm9jKCk7Cit9CisKIG1vZHVsZV9pbml0KGF0bV9jbGlwX2luaXQpOwogbW9kdWxlX2V4aXQoYXRtX2NsaXBfZXhpdCk7CiBNT0RVTEVfQVVUSE9SKCJXZXJuZXIgQWxtZXNiZXJnZXIiKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmMgYi9uZXQvYXRtL2xlYy5jCmluZGV4IDFhOGM0YzYuLjY1M2FjYTMgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmMKKysrIGIvbmV0L2F0bS9sZWMuYwpAQCAtMjY2LDcgKzI2Niw2IEBACiAJY2hhciBidWZbMzAwXTsKIAlpbnQgaSA9IDA7CiAjZW5kaWYgLyogRFVNUF9QQUNLRVRTID4wICovCi0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlwcl9kZWJ1ZygibGVjX3N0YXJ0X3htaXQgY2FsbGVkXG4iKTsKIAlpZiAoIXByaXYtPmxlY2QpIHsKQEAgLTM3NCwxNSArMzczLDE5IEBACiAJCWlmIChlbnRyeSAmJiAoZW50cnktPnR4X3dhaXQucWxlbiA8IExFQ19VTlJFU19RVUVfTEVOKSkgewogCQkJcHJfZGVidWcoIiVzOmxlY19zdGFydF94bWl0OiBxdWV1aW5nIHBhY2tldCwgIiwKIAkJCQlkZXYtPm5hbWUpOwotCQkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVzXG4iLAotCQkJCSBwcmludF9tYWMobWFjLCBsZWNfaC0+aF9kZXN0KSk7CisJCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgIiBNQUNfRk1UICJcbiIsCisJCQkJIGxlY19oLT5oX2Rlc3RbMF0sIGxlY19oLT5oX2Rlc3RbMV0sCisJCQkJIGxlY19oLT5oX2Rlc3RbMl0sIGxlY19oLT5oX2Rlc3RbM10sCisJCQkJIGxlY19oLT5oX2Rlc3RbNF0sIGxlY19oLT5oX2Rlc3RbNV0pOwogCQkJc2tiX3F1ZXVlX3RhaWwoJmVudHJ5LT50eF93YWl0LCBza2IpOwogCQl9IGVsc2UgewogCQkJcHJfZGVidWcKIAkJCSAgICAoIiVzOmxlY19zdGFydF94bWl0OiB0eCBxdWV1ZSBmdWxsIG9yIG5vIGFycCBlbnRyeSwgZHJvcHBpbmcsICIsCiAJCQkgICAgIGRldi0+bmFtZSk7Ci0JCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgJXNcbiIsCi0JCQkJIHByaW50X21hYyhtYWMsIGxlY19oLT5oX2Rlc3QpKTsKKwkJCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAiIE1BQ19GTVQgIlxuIiwKKwkJCQkgbGVjX2gtPmhfZGVzdFswXSwgbGVjX2gtPmhfZGVzdFsxXSwKKwkJCQkgbGVjX2gtPmhfZGVzdFsyXSwgbGVjX2gtPmhfZGVzdFszXSwKKwkJCQkgbGVjX2gtPmhfZGVzdFs0XSwgbGVjX2gtPmhfZGVzdFs1XSk7CiAJCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCX0KQEAgLTM5NCw4ICszOTcsMTAgQEAKIAogCXdoaWxlIChlbnRyeSAmJiAoc2tiMiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpKSB7CiAJCXByX2RlYnVnKCJsZWMuYzogZW1wdHlpbmcgdHggcXVldWUsICIpOwotCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgJXNcbiIsCi0JCQkgcHJpbnRfbWFjKG1hYywgbGVjX2gtPmhfZGVzdCkpOworCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgIiBNQUNfRk1UICJcbiIsCisJCQkgbGVjX2gtPmhfZGVzdFswXSwgbGVjX2gtPmhfZGVzdFsxXSwKKwkJCSBsZWNfaC0+aF9kZXN0WzJdLCBsZWNfaC0+aF9kZXN0WzNdLAorCQkJIGxlY19oLT5oX2Rlc3RbNF0sIGxlY19oLT5oX2Rlc3RbNV0pOwogCQlsZWNfc2VuZCh2Y2MsIHNrYjIsIHByaXYpOwogCX0KIApAQCAtNDQ5LDcgKzQ1NCw2IEBACiAJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OwogCWludCBpOwogCWNoYXIgKnRtcDsJCS8qIEZJWE1FICovCi0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJbWVzZyA9IChzdHJ1Y3QgYXRtbGVjX21zZyAqKXNrYi0+ZGF0YTsKQEAgLTUzNiw5ICs1NDAsMTQgQEAKIAkJCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjsKIAogCQkJcHJfZGVidWcKLQkJCSAgICAoIiVzOiBicmlkZ2UgemVwcGVsaW4gYXNrcyBhYm91dCAlc1xuIiwKKwkJCSAgICAoIiVzOiBicmlkZ2UgemVwcGVsaW4gYXNrcyBhYm91dCAiIE1BQ19GTVQgIlxuIiwKIAkJCSAgICAgZGV2LT5uYW1lLAotCQkJICAgICBwcmludF9tYWMobWFjLCBtZXNnLT5jb250ZW50LnByb3h5Lm1hY19hZGRyKSk7CisJCQkgICAgIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbMF0sCisJCQkgICAgIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbMV0sCisJCQkgICAgIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbMl0sCisJCQkgICAgIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbM10sCisJCQkgICAgIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbNF0sCisJCQkgICAgIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbNV0pOwogCiAJCQlpZiAoYnJfZmRiX2dldF9ob29rID09IE5VTEwgfHwgZGV2LT5icl9wb3J0ID09IE5VTEwpCiAJCQkJYnJlYWs7CkBAIC0xMDE0LDcgKzEwMjMsNyBAQAogCiAJaWYgKCFlKQogCQllID0gdGJsLT5maXJzdDsKLQlpZiAoZSA9PSAodm9pZCAqKTEpIHsKKwlpZiAoZSA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJZSA9IHRibC0+Zmlyc3Q7CiAJCS0tKmw7CiAJfQpAQCAtMTExNiw5ICsxMTI1LDkgQEAKIAlzdGF0ZS0+bG9ja2VkID0gTlVMTDsKIAlzdGF0ZS0+YXJwX3RhYmxlID0gMDsKIAlzdGF0ZS0+bWlzY190YWJsZSA9IDA7Ci0Jc3RhdGUtPm5vZGUgPSAodm9pZCAqKTE7CisJc3RhdGUtPm5vZGUgPSBTRVFfU1RBUlRfVE9LRU47CiAKLQlyZXR1cm4gKnBvcyA/IGxlY19nZXRfaWR4KHN0YXRlLCAqcG9zKSA6ICh2b2lkICopMTsKKwlyZXR1cm4gKnBvcyA/IGxlY19nZXRfaWR4KHN0YXRlLCAqcG9zKSA6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIAogc3RhdGljIHZvaWQgbGVjX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTE0Nyw3ICsxMTU2LDcgQEAKIAkgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgRmxhZ3MgIgogCSAgICAiVlBJL1ZDSSBSZWN2IFZQSS9WQ0lcbiI7CiAKLQlpZiAodiA9PSAodm9pZCAqKTEpCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsIGxlY19iYW5uZXIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbGVjX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKQEAgLTExNjksMzIgKzExNzgsNyBAQAogCiBzdGF0aWMgaW50IGxlY19zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgbGVjX3N0YXRlICpzdGF0ZTsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKLQlpbnQgcmMgPSAtRUFHQUlOOwotCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0YXRlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmbGVjX3NlcV9vcHMpOwotCWlmIChyYykKLQkJZ290byBvdXRfa2ZyZWU7Ci0Jc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNlcS0+cHJpdmF0ZSA9IHN0YXRlOwotb3V0OgotCXJldHVybiByYzsKLQotb3V0X2tmcmVlOgotCWtmcmVlKHN0YXRlKTsKLQlnb3RvIG91dDsKLX0KLQotc3RhdGljIGludCBsZWNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOworCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZsZWNfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBsZWNfc3RhdGUpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGVjX3NlcV9mb3BzID0gewpAQCAtMTIwMiw3ICsxMTg2LDcgQEAKIAkub3BlbiA9IGxlY19zZXFfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBsZWNfc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogfTsKICNlbmRpZgogCkBAIC0xMjQ5LDkgKzEyMzMsMTEgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKIAotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgibGVjIiwgU19JUlVHTywgYXRtX3Byb2Nfcm9vdCk7Ci0JaWYgKHApCi0JCXAtPnByb2NfZm9wcyA9ICZsZWNfc2VxX2ZvcHM7CisJcCA9IHByb2NfY3JlYXRlKCJsZWMiLCBTX0lSVUdPLCBhdG1fcHJvY19yb290LCAmbGVjX3NlcV9mb3BzKTsKKwlpZiAoIXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSAvcHJvYy9uZXQvYXRtL2xlY1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KICNlbmRpZgogCiAJcmVnaXN0ZXJfYXRtX2lvY3RsKCZsYW5lX2lvY3RsX29wcyk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCA5YzdmNzEyLi45ZGIzMzJlIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTk2NCw3ICs5NjQsNyBAQAogCiAJZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChkZXYtPm5hbWUgPT0gTlVMTCB8fCBzdHJuY21wKGRldi0+bmFtZSwgImxlYyIsIDMpKQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcG9hX3Byb2MuYyBiL25ldC9hdG0vbXBvYV9wcm9jLmMKaW5kZXggOTFmM2ZmYy4uNDk5MDU0MSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcG9hX3Byb2MuYworKysgYi9uZXQvYXRtL21wb2FfcHJvYy5jCkBAIC0yNzYsMTIgKzI3NiwxMSBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKIAotCXAgPSBjcmVhdGVfcHJvY19lbnRyeShTVEFUX0ZJTEVfTkFNRSwgMCwgYXRtX3Byb2Nfcm9vdCk7CisJcCA9IHByb2NfY3JlYXRlKFNUQVRfRklMRV9OQU1FLCAwLCBhdG1fcHJvY19yb290LCAmbXBjX2ZpbGVfb3BlcmF0aW9ucyk7CiAJaWYgKCFwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvYXRtLyVzXG4iLCBTVEFUX0ZJTEVfTkFNRSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlwLT5wcm9jX2ZvcHMgPSAmbXBjX2ZpbGVfb3BlcmF0aW9uczsKIAlwLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcm9jLmMgYi9uZXQvYXRtL3Byb2MuYwppbmRleCA0OTEyNTExLi41YzlmM2QxIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Byb2MuYworKysgYi9uZXQvYXRtL3Byb2MuYwpAQCAtNzgsNyArNzgsNyBAQAogewogCXN0cnVjdCBzb2NrICpzayA9ICpzb2NrOwogCi0JaWYgKHNrID09ICh2b2lkICopMSkgeworCWlmIChzayA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJZm9yICgqYnVja2V0ID0gMDsgKmJ1Y2tldCA8IFZDQ19IVEFCTEVfU0laRTsgKysqYnVja2V0KSB7CiAJCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFsqYnVja2V0XTsKIApAQCAtOTgsNyArOTgsNyBAQAogCQlzayA9IHNrX2hlYWQoJnZjY19oYXNoWypidWNrZXRdKTsKIAkJZ290byB0cnlfYWdhaW47CiAJfQotCXNrID0gKHZvaWQgKikxOworCXNrID0gU0VRX1NUQVJUX1RPS0VOOwogb3V0OgogCSpzb2NrID0gc2s7CiAJcmV0dXJuIChsIDwgMCk7CkBAIC0xMTQsMzEgKzExNCwxMyBAQAogCWludCBmYW1pbHksIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqb3BzKQogewogCXN0cnVjdCB2Y2Nfc3RhdGUgKnN0YXRlOwotCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwotCWludCByYyA9IC1FTk9NRU07CiAKLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghc3RhdGUpCi0JCWdvdG8gb3V0OwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCBvcHMpOwotCWlmIChyYykKLQkJZ290byBvdXRfa2ZyZWU7CisJc3RhdGUgPSBfX3NlcV9vcGVuX3ByaXZhdGUoZmlsZSwgb3BzLCBzaXplb2YoKnN0YXRlKSk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCiAJc3RhdGUtPmZhbWlseSA9IGZhbWlseTsKLQotCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzZXEtPnByaXZhdGUgPSBzdGF0ZTsKLW91dDoKLQlyZXR1cm4gcmM7Ci1vdXRfa2ZyZWU6Ci0Ja2ZyZWUoc3RhdGUpOwotCWdvdG8gb3V0OwotfQotCi1zdGF0aWMgaW50IHZjY19zZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkICp2Y2Nfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKQEAgLTE0OCw4ICsxMzAsOCBAQAogCWxvZmZfdCBsZWZ0ID0gKnBvczsKIAogCXJlYWRfbG9jaygmdmNjX3NrbGlzdF9sb2NrKTsKLQlzdGF0ZS0+c2sgPSAodm9pZCAqKTE7Ci0JcmV0dXJuIGxlZnQgPyB2Y2Nfd2FsayhzdGF0ZSwgbGVmdCkgOiAodm9pZCAqKTE7CisJc3RhdGUtPnNrID0gU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiBsZWZ0ID8gdmNjX3dhbGsoc3RhdGUsIGxlZnQpIDogU0VRX1NUQVJUX1RPS0VOOwogfQogCiBzdGF0aWMgdm9pZCB2Y2Nfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0yNTMsNyArMjM1LDcgQEAKIAkJIkl0ZiBUeXBlICAgIEVTSS9cIk1BQ1wiYWRkciAiCiAJCSJBQUwoVFgsZXJyLFJYLGVycixkcm9wKSAuLi4gICAgICAgICAgICAgICBbcmVmY250XVxuIjsKIAotCWlmICh2ID09ICh2b2lkICopMSkKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wdXRzKHNlcSwgYXRtX2Rldl9iYW5uZXIpOwogCWVsc2UgewogCQlzdHJ1Y3QgYXRtX2RldiAqZGV2ID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpOwpAQCAtMjg3LDcgKzI2OSw3IEBACiAJc3RhdGljIGNoYXIgYXRtX3B2Y19iYW5uZXJbXSA9CiAJCSJJdGYgVlBJIFZDSSAgIEFBTCBSWChQQ1IsQ2xhc3MpIFRYKFBDUixDbGFzcylcbiI7CiAKLQlpZiAodiA9PSAodm9pZCAqKTEpCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsIGF0bV9wdmNfYmFubmVyKTsKIAllbHNlIHsKIAkJc3RydWN0IHZjY19zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CkBAIC0zMTQsMTIgKzI5NiwxMiBAQAogCS5vcGVuCQk9IHB2Y19zZXFfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHZjY19zZXFfcmVsZWFzZSwKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCiBzdGF0aWMgaW50IHZjY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlpZiAodiA9PSAodm9pZCAqKTEpIHsKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3ByaW50ZihzZXEsIHNpemVvZih2b2lkICopID09IDQgPyAiJS04cyVzIiA6ICIlLTE2cyVzIiwKIAkJCSJBZGRyZXNzICIsICJJdGYgVlBJIFZDSSAgIEZhbSBGbGFncyBSZXBseSAiCiAJCQkiU2VuZCBidWZmZXIgICAgIFJlY3YgYnVmZmVyICAgICAgW3JlZmNudF1cbiIpOwpAQCAtMzQ4LDcgKzMzMCw3IEBACiAJLm9wZW4JCT0gdmNjX3NlcV9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gdmNjX3NlcV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIH07CiAKIHN0YXRpYyBpbnQgc3ZjX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMzU2LDcgKzMzOCw3IEBACiAJc3RhdGljIGNoYXIgYXRtX3N2Y19iYW5uZXJbXSA9CiAJCSJJdGYgVlBJIFZDSSAgICAgICAgICAgU3RhdGUgICAgICBSZW1vdGVcbiI7CiAKLQlpZiAodiA9PSAodm9pZCAqKTEpCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsIGF0bV9zdmNfYmFubmVyKTsKIAllbHNlIHsKIAkJc3RydWN0IHZjY19zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CkBAIC0zODMsNyArMzY1LDcgQEAKIAkub3BlbgkJPSBzdmNfc2VxX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSB2Y2Nfc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogfTsKIAogc3RhdGljIHNzaXplX3QgcHJvY19kZXZfYXRtX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCkBAIC00MzUsMTEgKzQxNywxMSBAQAogCQlnb3RvIGVycl9vdXQ7CiAJc3ByaW50ZihkZXYtPnByb2NfbmFtZSwiJXM6JWQiLGRldi0+dHlwZSwgZGV2LT5udW1iZXIpOwogCi0JZGV2LT5wcm9jX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoZGV2LT5wcm9jX25hbWUsIDAsIGF0bV9wcm9jX3Jvb3QpOworCWRldi0+cHJvY19lbnRyeSA9IHByb2NfY3JlYXRlKGRldi0+cHJvY19uYW1lLCAwLCBhdG1fcHJvY19yb290LAorCQkJCSAgICAgICZwcm9jX2F0bV9kZXZfb3BzKTsKIAlpZiAoIWRldi0+cHJvY19lbnRyeSkKIAkJZ290byBlcnJfZnJlZV9uYW1lOwogCWRldi0+cHJvY19lbnRyeS0+ZGF0YSA9IGRldjsKLQlkZXYtPnByb2NfZW50cnktPnByb2NfZm9wcyA9ICZwcm9jX2F0bV9kZXZfb3BzOwogCWRldi0+cHJvY19lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlyZXR1cm4gMDsKIGVycl9mcmVlX25hbWU6CkBAIC00OTIsMTAgKzQ3NCwxMCBAQAogCWZvciAoZSA9IGF0bV9wcm9jX2VudHM7IGUtPm5hbWU7IGUrKykgewogCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpcmVudDsKIAotCQlkaXJlbnQgPSBjcmVhdGVfcHJvY19lbnRyeShlLT5uYW1lLCBTX0lSVUdPLCBhdG1fcHJvY19yb290KTsKKwkJZGlyZW50ID0gcHJvY19jcmVhdGUoZS0+bmFtZSwgU19JUlVHTywKKwkJCQkgICAgIGF0bV9wcm9jX3Jvb3QsIGUtPnByb2NfZm9wcyk7CiAJCWlmICghZGlyZW50KQogCQkJZ290byBlcnJfb3V0X3JlbW92ZTsKLQkJZGlyZW50LT5wcm9jX2ZvcHMgPSBlLT5wcm9jX2ZvcHM7CiAJCWRpcmVudC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJZS0+ZGlyZW50ID0gZGlyZW50OwogCX0KZGlmZiAtLWdpdCBhL25ldC9hdG0vcmVzb3VyY2VzLmMgYi9uZXQvYXRtL3Jlc291cmNlcy5jCmluZGV4IDFiY2Y2ZGMuLmEzNGJhOTQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcmVzb3VyY2VzLmMKKysrIGIvbmV0L2F0bS9yZXNvdXJjZXMuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiB2b2lkICphdG1fZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJbXV0ZXhfbG9jaygmYXRtX2Rldl9tdXRleCk7Ci0JcmV0dXJuICpwb3MgPyBkZXZfZ2V0X2lkeCgqcG9zKSA6ICh2b2lkICopIDE7CisJcmV0dXJuICpwb3MgPyBkZXZfZ2V0X2lkeCgqcG9zKSA6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIAogdm9pZCBhdG1fZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtNDI2LDcgKzQyNiw4IEBACiB2b2lkICphdG1fZGV2X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAkrKypwb3M7Ci0JdiA9ICh2ID09ICh2b2lkICopMSkgPyBhdG1fZGV2cy5uZXh0IDogKChzdHJ1Y3QgbGlzdF9oZWFkICopdiktPm5leHQ7CisJdiA9ICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJPyBhdG1fZGV2cy5uZXh0IDogKChzdHJ1Y3QgbGlzdF9oZWFkICopdiktPm5leHQ7CiAJcmV0dXJuICh2ID09ICZhdG1fZGV2cykgPyBOVUxMIDogdjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9zdmMuYyBiL25ldC9hdG0vc3ZjLmMKaW5kZXggZGFmOWE0OC4uZGUxZTRmMiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9zdmMuYworKysgYi9uZXQvYXRtL3N2Yy5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAogCWxvY2tfc29jayhzayk7CiAKLQllcnJvciA9IHN2Y19jcmVhdGUoc2stPnNrX25ldCwgbmV3c29jaywwKTsKKwllcnJvciA9IHN2Y19jcmVhdGUoc29ja19uZXQoc2spLCBuZXdzb2NrLDApOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9heDI1L1RPRE8gYi9uZXQvYXgyNS9UT0RPCmluZGV4IDQwODljNDkuLjY5ZmI0ZTMgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L1RPRE8KKysrIGIvbmV0L2F4MjUvVE9ETwpAQCAtOSwxMCArOSw2IEBACiBSb3V0ZXMgdG8gYSBkZXZpY2UgYmVpbmcgdGFrZW4gZG93biBtaWdodCBiZSBkZWxldGVkIGJ5IGF4MjVfcnRfZGV2aWNlX2Rvd24KIGJ1dCBhZGRlZCBieSBzb21lYm9keSBlbHNlIGJlZm9yZSB0aGUgZGV2aWNlIGhhcyBiZWVuIGRlbGV0ZWQgZnVsbHkuCiAKLU1hc3NpdmUgYW1vdW50cyBvZiBsb2NrX2tlcm5lbCAvIHVubG9ja19rZXJuZWwgYXJlIGp1c3QgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8KLWdldCBhcm91bmQgdGhlIHJlbW92YWwgb2YgU09DS09QU19XUkFQLiAgQSBzZXJpb3VzIGxvY2tpbmcgc3RyYXRlZ3kgaGFzIHRvIGJlCi1pbXBsZW1lbnRlZC4KLQogVGhlIGF4MjVfcnRfZmluZF9yb3V0ZSBzeW5vcHN5cyBpcyBwZXJ2ZXJ0IGJ1dCBJIHNvbWVob3cgaGFkIHRvIGRlYWwgd2l0aAogdGhlIHJhY2UgY2F1c2VkIGJ5IHRoZSBzdGF0aWMgdmFyaWFibGUgaW4gaXQncyBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbi4KIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDQ4YmZjYzcuLjI3MTI1NDQgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTExNiw3ICsxMTYsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAkvKiBSZWplY3Qgbm9uIEFYLjI1IGRldmljZXMgKi8KQEAgLTg2OSw3ICs4NjksNyBAQAogCXN0cnVjdCBzb2NrICpzazsKIAlheDI1X2NiICpheDI1LCAqb2F4MjU7CiAKLQlzayA9IHNrX2FsbG9jKG9zay0+c2tfbmV0LCBQRl9BWDI1LCBHRlBfQVRPTUlDLAlvc2stPnNrX3Byb3QpOworCXNrID0gc2tfYWxsb2Moc29ja19uZXQob3NrKSwgUEZfQVgyNSwgR0ZQX0FUT01JQywJb3NrLT5za19wcm90KTsKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfaW4uYyBiL25ldC9heDI1L2F4MjVfaW4uYwppbmRleCBkMWJlMDgwLi4zMzc5MGE4IDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X2luLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9pbi5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAlza2ItPnNrID0gTlVMTDsJCS8qIEluaXRpYWxseSB3ZSBkb24ndCBrbm93IHdobyBpdCdzIGZvciAqLwogCXNrYi0+ZGVzdHJ1Y3RvciA9IE5VTEw7CS8qIFdobyBpbml0aWFsaXplcyB0aGlzLCBkYW1taXQ/ISAqLwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkgeworCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X291dC5jIGIvbmV0L2F4MjUvYXgyNV9vdXQuYwppbmRleCA5MmI1MTdhLi5iZjcwNmY4IDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X291dC5jCisrKyBiL25ldC9heDI1L2F4MjVfb3V0LmMKQEAgLTExNyw2ICsxMTcsMTIgQEAKIAl1bnNpZ25lZCBjaGFyICpwOwogCWludCBmcm9udGxlbiwgbGVuLCBmcmFnbm8sIGthOXFmcmFnLCBmaXJzdCA9IDE7CiAKKwlpZiAocGFjbGVuIDwgMTYpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuOworCX0KKwogCWlmICgoc2tiLT5sZW4gLSAxKSA+IHBhY2xlbikgewogCQlpZiAoKnNrYi0+ZGF0YSA9PSBBWDI1X1BfVEVYVCkgewogCQkJc2tiX3B1bGwoc2tiLCAxKTsgLyogc2tpcCBQSUQgKi8KQEAgLTI1MSw4ICsyNTcsNiBAQAogCWlmIChzdGFydCA9PSBlbmQpCiAJCXJldHVybjsKIAotCWF4MjUtPnZzID0gc3RhcnQ7Ci0KIAkvKgogCSAqIFRyYW5zbWl0IGRhdGEgdW50aWwgZWl0aGVyIHdlJ3JlIG91dCBvZiBkYXRhIHRvIHNlbmQgb3IKIAkgKiB0aGUgd2luZG93IGlzIGZ1bGwuIFNlbmQgYSBwb2xsIG9uIHRoZSBmaW5hbCBJIGZyYW1lIGlmCkBAIC0yNjEsOCArMjY1LDEzIEBACiAKIAkvKgogCSAqIERlcXVldWUgdGhlIGZyYW1lIGFuZCBjb3B5IGl0LgorCSAqIENoZWNrIGZvciByYWNlIHdpdGggYXgyNV9jbGVhcl9xdWV1ZXMoKS4KIAkgKi8KIAlza2IgID0gc2tiX2RlcXVldWUoJmF4MjUtPndyaXRlX3F1ZXVlKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJYXgyNS0+dnMgPSBzdGFydDsKIAogCWRvIHsKIAkJaWYgKChza2JuID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfdWlkLmMgYi9uZXQvYXgyNS9heDI1X3VpZC5jCmluZGV4IDVmNGViNzMuLjU3YWViYTcgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfdWlkLmMKKysrIGIvbmV0L2F4MjUvYXgyNV91aWQuYwpAQCAtMjE4LDkgKzIxOCwxMSBAQAogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCiAJd3JpdGVfbG9jaygmYXgyNV91aWRfbG9jayk7CithZ2FpbjoKIAlheDI1X3VpZF9mb3JfZWFjaChheDI1X3VpZCwgbm9kZSwgJmF4MjVfdWlkX2xpc3QpIHsKIAkJaGxpc3RfZGVsX2luaXQoJmF4MjVfdWlkLT51aWRfbm9kZSk7CiAJCWF4MjVfdWlkX3B1dChheDI1X3VpZCk7CisJCWdvdG8gYWdhaW47CiAJfQogCXdyaXRlX3VubG9jaygmYXgyNV91aWRfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCAxMjIwZDhhLi5kMzY2NDIzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTUzLDYgKzUzLDMwIEBACiAvKiBCbHVldG9vdGggc29ja2V0cyAqLwogI2RlZmluZSBCVF9NQVhfUFJPVE8JOAogc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpidF9wcm90b1tCVF9NQVhfUFJPVE9dOworCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X3Nsb2NrX2tleVtCVF9NQVhfUFJPVE9dOworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidF9sb2NrX2tleVtCVF9NQVhfUFJPVE9dOworc3RhdGljIGNvbnN0IGNoYXIgKmJ0X2tleV9zdHJpbmdzW0JUX01BWF9QUk9UT10gPSB7CisJInNrX2xvY2stQUZfQkxVRVRPT1RILUJUUFJPVE9fTDJDQVAiLAorCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0hDSSIsCisJInNrX2xvY2stQUZfQkxVRVRPT1RILUJUUFJPVE9fU0NPIiwKKwkic2tfbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19SRkNPTU0iLAorCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0JORVAiLAorCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0NNVFAiLAorCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0hJRFAiLAorCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0FWRFRQIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpidF9zbG9ja19rZXlfc3RyaW5nc1tCVF9NQVhfUFJPVE9dID0geworCSJzbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19MMkNBUCIsCisJInNsb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0hDSSIsCisJInNsb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX1NDTyIsCisJInNsb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX1JGQ09NTSIsCisJInNsb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0JORVAiLAorCSJzbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19DTVRQIiwKKwkic2xvY2stQUZfQkxVRVRPT1RILUJUUFJPVE9fSElEUCIsCisJInNsb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0FWRFRQIiwKK307CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhidF9wcm90b19sb2NrKTsKIAogaW50IGJ0X3NvY2tfcmVnaXN0ZXIoaW50IHByb3RvLCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKQpAQCAtOTUsNiArMTE5LDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGJ0X3NvY2tfdW5yZWdpc3Rlcik7CiAKK3N0YXRpYyB2b2lkIGJ0X3JlY2xhc3NpZnlfc29ja19sb2NrKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKworCWlmICghc2spCisJCXJldHVybjsKKwlCVUdfT04oc29ja19vd25lZF9ieV91c2VyKHNrKSk7CisKKwlzb2NrX2xvY2tfaW5pdF9jbGFzc19hbmRfbmFtZShzaywKKwkJCWJ0X3Nsb2NrX2tleV9zdHJpbmdzW3Byb3RvXSwKKwkJCSZidF9zbG9ja19rZXlbcHJvdG9dLAorCQkJYnRfa2V5X3N0cmluZ3NbcHJvdG9dLAorCQkJJmJ0X2xvY2tfa2V5W3Byb3RvXSk7Cit9CisKIHN0YXRpYyBpbnQgYnRfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8pCiB7CiAJaW50IGVycjsKQEAgLTExNyw2ICsxNTYsNyBAQAogCiAJaWYgKGJ0X3Byb3RvW3Byb3RvXSAmJiB0cnlfbW9kdWxlX2dldChidF9wcm90b1twcm90b10tPm93bmVyKSkgewogCQllcnIgPSBidF9wcm90b1twcm90b10tPmNyZWF0ZShuZXQsIHNvY2ssIHByb3RvKTsKKwkJYnRfcmVjbGFzc2lmeV9zb2NrX2xvY2soc29jaywgcHJvdG8pOwogCQltb2R1bGVfcHV0KGJ0X3Byb3RvW3Byb3RvXS0+b3duZXIpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaCBiL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKaW5kZXggYTI5OTIyOC4uZTY5MjQ0ZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaAorKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogdm9pZCBibmVwX25ldF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBibmVwX3NvY2tfaW5pdCh2b2lkKTsKLWludCBibmVwX3NvY2tfY2xlYW51cCh2b2lkKTsKK3ZvaWQgYm5lcF9zb2NrX2NsZWFudXAodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJuZXBfbWNfaGFzaChfX3U4ICphZGRyKQogewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYyBiL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMKaW5kZXggODEwNjVlNS4uMjAxZTViMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jCkBAIC0yNTcsMTIgKzI1NywxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLWludCBfX2V4aXQgYm5lcF9zb2NrX2NsZWFudXAodm9pZCkKK3ZvaWQgX19leGl0IGJuZXBfc29ja19jbGVhbnVwKHZvaWQpCiB7CiAJaWYgKGJ0X3NvY2tfdW5yZWdpc3RlcihCVFBST1RPX0JORVApIDwgMCkKIAkJQlRfRVJSKCJDYW4ndCB1bnJlZ2lzdGVyIEJORVAgc29ja2V0Iik7CiAKIAlwcm90b191bnJlZ2lzdGVyKCZibmVwX3Byb3RvKTsKLQotCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCmluZGV4IDVmYzdiZTIuLmY4ODgwMjYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKQEAgLTI2MCw3ICsyNjAsNiBAQAogCXRhc2tsZXRfZW5hYmxlKCZoZGV2LT50eF90YXNrKTsKIAlza2JfcXVldWVfcHVyZ2UoJmNvbm4tPmRhdGFfcSk7CiAJaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOwotCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggMzcyYjBkMy4uYWVjNjkyOSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMjQsNiArMjQsNyBAQAogCiAvKiBCbHVldG9vdGggSENJIGNvcmUuICovCiAKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogCkBAIC05MDEsOCArOTAyLDYgQEAKIAogCUJUX0RCRygiJXAgbmFtZSAlcyB0eXBlICVkIiwgaGRldiwgaGRldi0+bmFtZSwgaGRldi0+dHlwZSk7CiAKLQloY2lfdW5yZWdpc3Rlcl9zeXNmcyhoZGV2KTsKLQogCXdyaXRlX2xvY2tfYmgoJmhjaV9kZXZfbGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmaGRldi0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZoY2lfZGV2X2xpc3RfbG9jayk7CkBAIC05MTQsNiArOTEzLDggQEAKIAogCWhjaV9ub3RpZnkoaGRldiwgSENJX0RFVl9VTlJFRyk7CiAKKwloY2lfdW5yZWdpc3Rlcl9zeXNmcyhoZGV2KTsKKwogCV9faGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTEzMjEsNyArMTMyMiw3IEBACiAJaWYgKCF0ZXN0X2JpdChIQ0lfUkFXLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCS8qIEFDTCB0eCB0aW1lb3V0IG11c3QgYmUgbG9uZ2VyIHRoYW4gbWF4aW11bQogCQkgKiBsaW5rIHN1cGVydmlzaW9uIHRpbWVvdXQgKDQwLjkgc2Vjb25kcykgKi8KLQkJaWYgKCFoZGV2LT5hY2xfY250ICYmIChqaWZmaWVzIC0gaGRldi0+YWNsX2xhc3RfdHgpID4gKEhaICogNDUpKQorCQlpZiAoIWhkZXYtPmFjbF9jbnQgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBoZGV2LT5hY2xfbGFzdF90eCArIEhaICogNDUpKQogCQkJaGNpX2FjbF90eF90byhoZGV2KTsKIAl9CiAKQEAgLTE1NDMsNyArMTU0NCw3IEBACiAKIAlCVF9EQkcoIiVzIGNtZCAlZCIsIGhkZXYtPm5hbWUsIGF0b21pY19yZWFkKCZoZGV2LT5jbWRfY250KSk7CiAKLQlpZiAoIWF0b21pY19yZWFkKCZoZGV2LT5jbWRfY250KSAmJiAoamlmZmllcyAtIGhkZXYtPmNtZF9sYXN0X3R4KSA+IEhaKSB7CisJaWYgKCFhdG9taWNfcmVhZCgmaGRldi0+Y21kX2NudCkgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBoZGV2LT5jbWRfbGFzdF90eCArIEhaKSkgewogCQlCVF9FUlIoIiVzIGNvbW1hbmQgdHggdGltZW91dCIsIGhkZXYtPm5hbWUpOwogCQlhdG9taWNfc2V0KCZoZGV2LT5jbWRfY250LCAxKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKaW5kZXggMTQ5OTEzMi4uMWQzNmMwOSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwpAQCAtODQsNyArODQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBidF9zb2NrX2xpc3QgaGNpX3NrX2xpc3QgPSB7Ci0JLmxvY2sgPSBSV19MT0NLX1VOTE9DS0VECisJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQoaGNpX3NrX2xpc3QubG9jaykKIH07CiAKIC8qIFNlbmQgZnJhbWUgdG8gUkFXIHNvY2tldCAqLwpAQCAtNzM0LDcgKzczNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IF9fZXhpdCBoY2lfc29ja19jbGVhbnVwKHZvaWQpCit2b2lkIF9fZXhpdCBoY2lfc29ja19jbGVhbnVwKHZvaWQpCiB7CiAJaWYgKGJ0X3NvY2tfdW5yZWdpc3RlcihCVFBST1RPX0hDSSkgPCAwKQogCQlCVF9FUlIoIkhDSSBzb2NrZXQgdW5yZWdpc3RyYXRpb24gZmFpbGVkIik7CkBAIC03NDIsNiArNzQyLDQgQEAKIAloY2lfdW5yZWdpc3Rlcl9ub3RpZmllcigmaGNpX3NvY2tfbmJsb2NrKTsKIAogCXByb3RvX3VucmVnaXN0ZXIoJmhjaV9za19wcm90byk7Ci0KLQlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IGUxM2NmNWUuLjg0MzYwYzEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtMzIwLDI4ICszMjAsMzQgQEAKIAlxdWV1ZV93b3JrKGJ0YWRkY29ubiwgJmNvbm4tPndvcmspOwogfQogCisvKgorICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uCisgKiBpcyBkb3duLCBhbmQgc3lzZnMgZG9lc24ndCBzdXBwb3J0IG1vdmUgem9tYmllIGRldmljZSwKKyAqIHNvIHdlIHNob3VsZCBtb3ZlIHRoZSBkZXZpY2UgYmVmb3JlIGNvbm4gZGV2aWNlIGlzIGRlc3Ryb3llZC4KKyAqLwogc3RhdGljIGludCBfX21hdGNoX3R0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JLyogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uCi0JICogaXMgZG93biwgYW5kIHN5c2ZzIGRvZXNuJ3Qgc3VwcG9ydCBtb3ZlIHpvbWJpZSBkZXZpY2UsCi0JICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLgotCSAqIER1ZSB0byB0aGUgb25seSBjaGlsZCBkZXZpY2Ugb2YgaGNpX2Nvbm4gZGV2IGlzIHJmY29tbQotCSAqIHR0eV9kZXYsIGhlcmUganVzdCByZXR1cm4gMQotCSAqLwotCXJldHVybiAxOworCXJldHVybiAhc3RybmNtcChkZXYtPmJ1c19pZCwgInJmY29tbSIsIDYpOwogfQogCiBzdGF0aWMgdm9pZCBkZWxfY29ubihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaGNpX2Nvbm4sIHdvcmspOworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi0+aGRldjsKIAotCXdoaWxlIChkZXYgPSBkZXZpY2VfZmluZF9jaGlsZCgmY29ubi0+ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSkpIHsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkJZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoJmNvbm4tPmRldiwgTlVMTCwgX19tYXRjaF90dHkpOworCQlpZiAoIWRldikKKwkJCWJyZWFrOwogCQlkZXZpY2VfbW92ZShkZXYsIE5VTEwpOwogCQlwdXRfZGV2aWNlKGRldik7CiAJfQorCiAJZGV2aWNlX2RlbCgmY29ubi0+ZGV2KTsKIAlwdXRfZGV2aWNlKCZjb25uLT5kZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOwogfQogCiB2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggYTg4MTFjMC4uYTQ4NDlmMiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtNjIsNyArNjIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbDJjYXBfc29ja19vcHM7CiAKIHN0YXRpYyBzdHJ1Y3QgYnRfc29ja19saXN0IGwyY2FwX3NrX2xpc3QgPSB7Ci0JLmxvY2sgPSBSV19MT0NLX1VOTE9DS0VECisJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQobDJjYXBfc2tfbGlzdC5sb2NrKQogfTsKIAogc3RhdGljIHZvaWQgX19sMmNhcF9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgaW50IHJlYXNvbik7CkBAIC00MTcsNiArNDE3LDkgQEAKIAkJbDJjYXBfc29ja19raWxsKHNrKTsKIAl9CiAKKwlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKQorCQlkZWxfdGltZXJfc3luYygmY29ubi0+aW5mb190aW1lcik7CisKIAloY29uLT5sMmNhcF9kYXRhID0gTlVMTDsKIAlrZnJlZShjb25uKTsKIH0KQEAgLTE0OTYsNyArMTQ5OSw3IEBACiAJCWdvdG8gcmVzcG9uc2U7CiAJfQogCi0Jc2sgPSBsMmNhcF9zb2NrX2FsbG9jKHBhcmVudC0+c2tfbmV0LCBOVUxMLCBCVFBST1RPX0wyQ0FQLCBHRlBfQVRPTUlDKTsKKwlzayA9IGwyY2FwX3NvY2tfYWxsb2Moc29ja19uZXQocGFyZW50KSwgTlVMTCwgQlRQUk9UT19MMkNBUCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzaykKIAkJZ290byByZXNwb25zZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IDBjMmM5MzcuLmViNjI1NTggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTQyMyw4ICs0MjMsOCBAQAogCiAJCXJmY29tbV9kbGNfbG9jayhkKTsKIAkJZC0+c3RhdGUgPSBCVF9DTE9TRUQ7Ci0JCWQtPnN0YXRlX2NoYW5nZShkLCBlcnIpOwogCQlyZmNvbW1fZGxjX3VubG9jayhkKTsKKwkJZC0+c3RhdGVfY2hhbmdlKGQsIGVycik7CiAKIAkJc2tiX3F1ZXVlX3B1cmdlKCZkLT50eF9xdWV1ZSk7CiAJCXJmY29tbV9kbGNfdW5saW5rKGQpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCmluZGV4IGM0NmQ1MTAuLjUwODNhZGMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJmY29tbV9zb2NrX29wczsKIAogc3RhdGljIHN0cnVjdCBidF9zb2NrX2xpc3QgcmZjb21tX3NrX2xpc3QgPSB7Ci0JLmxvY2sgPSBSV19MT0NLX1VOTE9DS0VECisJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocmZjb21tX3NrX2xpc3QubG9jaykKIH07CiAKIHN0YXRpYyB2b2lkIHJmY29tbV9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzayk7CkBAIC04NjgsNyArODY4LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCXNrID0gcmZjb21tX3NvY2tfYWxsb2MocGFyZW50LT5za19uZXQsIE5VTEwsIEJUUFJPVE9fUkZDT01NLCBHRlBfQVRPTUlDKTsKKwlzayA9IHJmY29tbV9zb2NrX2FsbG9jKHNvY2tfbmV0KHBhcmVudCksIE5VTEwsIEJUUFJPVE9fUkZDT01NLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrKQogCQlnb3RvIGRvbmU7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKaW5kZXggZTRjNzc5Yi4uYzNmNzQ5YSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKQEAgLTU3MCwxMiArNTcwLDcgQEAKIAkJCQkJcmV0dXJuOwogCiAJCQkJcmZjb21tX2Rldl9kZWwoZGV2KTsKLQkJCQkvKiBXZSBoYXZlIHRvIGRyb3AgRExDIGxvY2sgaGVyZSwgb3RoZXJ3aXNlCi0JCQkJICAgcmZjb21tX2Rldl9wdXQoKSB3aWxsIGRlYWQgbG9jayBpZiBpdCdzCi0JCQkJICAgdGhlIGxhc3QgcmVmZXJlbmNlLiAqLwotCQkJCXJmY29tbV9kbGNfdW5sb2NrKGRsYyk7CiAJCQkJcmZjb21tX2Rldl9wdXQoZGV2KTsKLQkJCQlyZmNvbW1fZGxjX2xvY2soZGxjKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQl0dHlfaGFuZ3VwKGRldi0+dHR5KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IGI5MWQzYzguLmIwZDQ4N2UgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtNTgsNyArNTgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc2NvX3NvY2tfb3BzOwogCiBzdGF0aWMgc3RydWN0IGJ0X3NvY2tfbGlzdCBzY29fc2tfbGlzdCA9IHsKLQkubG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQKKwkubG9jayA9IF9fUldfTE9DS19VTkxPQ0tFRChzY29fc2tfbGlzdC5sb2NrKQogfTsKIAogc3RhdGljIHZvaWQgX19zY29fY2hhbl9hZGQoc3RydWN0IHNjb19jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpOwpAQCAtODAzLDcgKzgwMyw3IEBACiAKIAkJYmhfbG9ja19zb2NrKHBhcmVudCk7CiAKLQkJc2sgPSBzY29fc29ja19hbGxvYyhwYXJlbnQtPnNrX25ldCwgTlVMTCwgQlRQUk9UT19TQ08sIEdGUF9BVE9NSUMpOworCQlzayA9IHNjb19zb2NrX2FsbG9jKHNvY2tfbmV0KHBhcmVudCksIE5VTEwsIEJUUFJPVE9fU0NPLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzaykgewogCQkJYmhfdW5sb2NrX3NvY2socGFyZW50KTsKIAkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZmRiLmMgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCmluZGV4IGJjNDAzNzcuLjkzMjZjMzcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCQl0aGlzX3RpbWVyID0gZi0+YWdlaW5nX3RpbWVyICsgZGVsYXk7CiAJCQlpZiAodGltZV9iZWZvcmVfZXEodGhpc190aW1lciwgamlmZmllcykpCiAJCQkJZmRiX2RlbGV0ZShmKTsKLQkJCWVsc2UgaWYgKHRoaXNfdGltZXIgPCBuZXh0X3RpbWVyKQorCQkJZWxzZSBpZiAodGltZV9iZWZvcmUodGhpc190aW1lciwgbmV4dF90aW1lcikpCiAJCQkJbmV4dF90aW1lciA9IHRoaXNfdGltZXI7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCAxYzBlZmQ4Li5iYjkwY2Q3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTExMCw3ICsxMTAsMTAgQEAKICAqIGlwdF9SRUpFQ1QgbmVlZHMgaXQuICBGdXR1cmUgbmV0ZmlsdGVyIG1vZHVsZXMgbWlnaHQKICAqIHJlcXVpcmUgdXMgdG8gZmlsbCBhZGRpdGlvbmFsIGZpZWxkcy4gKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSBfX2Zha2VfbmV0X2RldmljZSA9IHsKLQkuaGFyZF9oZWFkZXJfbGVuCT0gRVRIX0hMRU4KKwkuaGFyZF9oZWFkZXJfbGVuCT0gRVRIX0hMRU4sCisjaWZkZWYgQ09ORklHX05FVF9OUworCS5uZF9uZXQJCQk9ICZpbml0X25ldCwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBydGFibGUgX19mYWtlX3J0YWJsZSA9IHsKQEAgLTIyMyw4ICsyMjYsOCBAQAogCX0KIAluZl9icmlkZ2UtPm1hc2sgXj0gQlJORl9ORl9CUklER0VfUFJFUk9VVElORzsKIAotCXNrYi0+ZHN0ID0gKHN0cnVjdCBkc3RfZW50cnkgKikmX19mYWtlX3J0YWJsZTsKLQlkc3RfaG9sZChza2ItPmRzdCk7CisJc2tiLT5ydGFibGUgPSAmX19mYWtlX3J0YWJsZTsKKwlkc3RfaG9sZCgmX19mYWtlX3J0YWJsZS51LmRzdCk7CiAKIAlza2ItPmRldiA9IG5mX2JyaWRnZS0+cGh5c2luZGV2OwogCW5mX2JyaWRnZV9wdXNoX2VuY2FwX2hlYWRlcihza2IpOwpAQCAtMzg4LDggKzM5MSw4IEBACiAJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJCX0KIAl9IGVsc2UgewotCQlza2ItPmRzdCA9IChzdHJ1Y3QgZHN0X2VudHJ5ICopJl9fZmFrZV9ydGFibGU7Ci0JCWRzdF9ob2xkKHNrYi0+ZHN0KTsKKwkJc2tiLT5ydGFibGUgPSAmX19mYWtlX3J0YWJsZTsKKwkJZHN0X2hvbGQoJl9fZmFrZV9ydGFibGUudS5kc3QpOwogCX0KIAogCXNrYi0+ZGV2ID0gbmZfYnJpZGdlLT5waHlzaW5kZXY7CkBAIC02MDgsOSArNjExLDkgQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotCWlmIChza2ItPmRzdCA9PSAoc3RydWN0IGRzdF9lbnRyeSAqKSZfX2Zha2VfcnRhYmxlKSB7Ci0JCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsKLQkJc2tiLT5kc3QgPSBOVUxMOworCWlmIChza2ItPnJ0YWJsZSA9PSAmX19mYWtlX3J0YWJsZSkgeworCQlkc3RfcmVsZWFzZSgmX19mYWtlX3J0YWJsZS51LmRzdCk7CisJCXNrYi0+cnRhYmxlID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gTkZfQUNDRVBUOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCBmNWQ2OTMzLi5mMTU1ZTZjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYnJfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBpZHg7CiAKQEAgLTE0MCw3ICsxNDAsNyBAQAogICovCiBzdGF0aWMgaW50IGJyX3J0bV9zZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgaWZpbmZvbXNnICppZm07CiAJc3RydWN0IG5sYXR0ciAqcHJvdGluZm87CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMgYi9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCmluZGV4IDA3YWMzYWUuLjAwNjQ0YTUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKKysrIGIvbmV0L2JyaWRnZS9icl9ub3RpZnkuYwpAQCAtMzcsNyArMzcsNyBAQAogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBkZXYtPmJyX3BvcnQ7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJLyogbm90IGEgcG9ydCBvZiBhIGJyaWRnZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jIGIvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jCmluZGV4IDBlZGJkMmEuLjhkZWFiNjQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpidWY7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlnb3RvIGVycjsKIAogCWlmICghcCkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYwppbmRleCA5Y2YwNTM4Li4yN2Q2YTUxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCkBAIC00MTUsMjEgKzQxNSwyMSBAQAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cChicm9iaiwgJmJyaWRnZV9ncm91cCk7CiAJaWYgKGVycikgewogCQlwcl9pbmZvKCIlczogY2FuJ3QgY3JlYXRlIGdyb3VwICVzLyVzXG4iLAotCQkJX19GVU5DVElPTl9fLCBkZXYtPm5hbWUsIGJyaWRnZV9ncm91cC5uYW1lKTsKKwkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGJyaWRnZV9ncm91cC5uYW1lKTsKIAkJZ290byBvdXQxOwogCX0KIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShicm9iaiwgJmJyaWRnZV9mb3J3YXJkKTsKIAlpZiAoZXJyKSB7CiAJCXByX2luZm8oIiVzOiBjYW4ndCBjcmVhdGUgYXR0cmlidXRlIGZpbGUgJXMvJXNcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSwgYnJpZGdlX2ZvcndhcmQuYXR0ci5uYW1lKTsKKwkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGJyaWRnZV9mb3J3YXJkLmF0dHIubmFtZSk7CiAJCWdvdG8gb3V0MjsKIAl9CiAKIAlici0+aWZvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKFNZU0ZTX0JSSURHRV9QT1JUX1NVQkRJUiwgYnJvYmopOwogCWlmICghYnItPmlmb2JqKSB7CiAJCXByX2luZm8oIiVzOiBjYW4ndCBhZGQga29iamVjdCAoZGlyZWN0b3J5KSAlcy8lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lLCBTWVNGU19CUklER0VfUE9SVF9TVUJESVIpOworCQkJX19mdW5jX18sIGRldi0+bmFtZSwgU1lTRlNfQlJJREdFX1BPUlRfU1VCRElSKTsKIAkJZ290byBvdXQzOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnCmluZGV4IDRhM2UyYmYuLjdiZWVlZmEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMjEyLDQgKzIxMiwxOCBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEJSSURHRV9FQlRfTkZMT0cKKwl0cmlzdGF0ZSAiZWJ0OiBuZmxvZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQlJJREdFX05GX0VCVEFCTEVTCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZsb2cgd2F0Y2hlciwgd2hpY2ggYWxsb3dzIHRvIExPRworCSAgbWVzc2FnZXMgdGhyb3VnaCB0aGUgbmV0ZmlsdGVyIGxvZ2dpbmcgQVBJLCB3aGljaCBjYW4gdXNlCisJICBlaXRoZXIgdGhlIG9sZCBMT0cgdGFyZ2V0LCB0aGUgb2xkIFVMT0cgdGFyZ2V0IG9yIG5mbmV0bGlua19sb2cKKwkgIGFzIGJhY2tlbmQuCisKKwkgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIHVsb2cgd2F0Y2hlciwgdGhhdCB5b3UgY2FuIHVzZSBpbiBhbnkgcnVsZQorCSAgaW4gYW55IGVidGFibGVzIHRhYmxlLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZQppbmRleCA5MDUwODdlLi44MzcxNWQ3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMzAsMyArMzAsNCBAQAogIyB3YXRjaGVycwogb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfTE9HKSArPSBlYnRfbG9nLm8KIG9iai0kKENPTkZJR19CUklER0VfRUJUX1VMT0cpICs9IGVidF91bG9nLm8KK29iai0kKENPTkZJR19CUklER0VfRUJUX05GTE9HKSArPSBlYnRfbmZsb2cubwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2RuYXQuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9kbmF0LmMKaW5kZXggZTcwMGNiZi4uY2E2NGMxYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2RuYXQuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfZG5hdC5jCkBAIC0yMCw4ICsyMCw4IEBACiB7CiAJY29uc3Qgc3RydWN0IGVidF9uYXRfaW5mbyAqaW5mbyA9IGRhdGE7CiAKLQlpZiAoc2tiX21ha2Vfd3JpdGFibGUoc2tiLCAwKSkKLQkJcmV0dXJuIE5GX0RST1A7CisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIDApKQorCQlyZXR1cm4gRUJUX0RST1A7CiAKIAltZW1jcHkoZXRoX2hkcihza2IpLT5oX2Rlc3QsIGluZm8tPm1hYywgRVRIX0FMRU4pOwogCXJldHVybiBpbmZvLT50YXJnZXQ7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbmZsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9uZmxvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNzk5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbmZsb2cuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogZWJ0X25mbG9nCisgKgorICoJQXV0aG9yOgorICoJUGV0ZXIgV2FyYXNpbiA8cGV0ZXJAZW5kaWFuLmNvbT4KKyAqCisgKiAgRmVicnVhcnksIDIwMDgKKyAqCisgKiBCYXNlZCBvbjoKKyAqICB4dF9ORkxPRy5jLCAoQykgMjAwNiBieSBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqICBlYnRfdWxvZy5jLCAoQykgMjAwNCBieSBCYXJ0IERlIFNjaHV5bWVyIDxiZHNjaHV5bUBwYW5kb3JhLmJlPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmZsb2cuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorCitzdGF0aWMgdm9pZCBlYnRfbmZsb2coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgdW5zaWduZWQgaW50IGhvb2tuciwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgICBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgZWJ0X25mbG9nX2luZm8gKmluZm8gPSAoc3RydWN0IGVidF9uZmxvZ19pbmZvICopZGF0YTsKKwlzdHJ1Y3QgbmZfbG9naW5mbyBsaTsKKworCWxpLnR5cGUgPSBORl9MT0dfVFlQRV9VTE9HOworCWxpLnUudWxvZy5jb3B5X2xlbiA9IGluZm8tPmxlbjsKKwlsaS51LnVsb2cuZ3JvdXAgPSBpbmZvLT5ncm91cDsKKwlsaS51LnVsb2cucXRocmVzaG9sZCA9IGluZm8tPnRocmVzaG9sZDsKKworCW5mX2xvZ19wYWNrZXQoUEZfQlJJREdFLCBob29rbnIsIHNrYiwgaW4sIG91dCwgJmxpLCAiJXMiLCBpbmZvLT5wcmVmaXgpOworfQorCitzdGF0aWMgaW50IGVidF9uZmxvZ19jaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkgICB1bnNpZ25lZCBpbnQgaG9va21hc2ssCisJCQkgICBjb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5ICplLAorCQkJICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4pCit7CisJc3RydWN0IGVidF9uZmxvZ19pbmZvICppbmZvID0gKHN0cnVjdCBlYnRfbmZsb2dfaW5mbyAqKWRhdGE7CisKKwlpZiAoZGF0YWxlbiAhPSBFQlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfbmZsb2dfaW5mbykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5mby0+ZmxhZ3MgJiB+RUJUX05GTE9HX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCWluZm8tPnByZWZpeFtFQlRfTkZMT0dfUFJFRklYX1NJWkUgLSAxXSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZWJ0X3dhdGNoZXIgbmZsb2cgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZSA9IEVCVF9ORkxPR19XQVRDSEVSLAorCS53YXRjaGVyID0gZWJ0X25mbG9nLAorCS5jaGVjayA9IGVidF9uZmxvZ19jaGVjaywKKwkubWUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVidF9uZmxvZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIGVidF9yZWdpc3Rlcl93YXRjaGVyKCZuZmxvZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlYnRfbmZsb2dfZmluaSh2b2lkKQoreworCWVidF91bnJlZ2lzdGVyX3dhdGNoZXIoJm5mbG9nKTsKK30KKworbW9kdWxlX2luaXQoZWJ0X25mbG9nX2luaXQpOworbW9kdWxlX2V4aXQoZWJ0X25mbG9nX2ZpbmkpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiUGV0ZXIgV2FyYXNpbiA8cGV0ZXJAZW5kaWFuLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiZWJ0YWJsZXMgTkZMT0cgbmV0ZmlsdGVyIGxvZ2dpbmcgbW9kdWxlIik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfcmVkaXJlY3QuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9yZWRpcmVjdC5jCmluZGV4IGJmZGYyZmIuLmI4YWZlODUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9yZWRpcmVjdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9yZWRpcmVjdC5jCkBAIC0yMSw4ICsyMSw4IEBACiB7CiAJY29uc3Qgc3RydWN0IGVidF9yZWRpcmVjdF9pbmZvICppbmZvID0gZGF0YTsKIAotCWlmIChza2JfbWFrZV93cml0YWJsZShza2IsIDApKQotCQlyZXR1cm4gTkZfRFJPUDsKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgMCkpCisJCXJldHVybiBFQlRfRFJPUDsKIAogCWlmIChob29rbnIgIT0gTkZfQlJfQlJPVVRJTkcpCiAJCW1lbWNweShldGhfaGRyKHNrYiktPmhfZGVzdCwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9zbmF0LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc25hdC5jCmluZGV4IGUyNTJkYWIuLjU0MjUzMzMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9zbmF0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3NuYXQuYwpAQCAtMjIsOCArMjIsOCBAQAogewogCWNvbnN0IHN0cnVjdCBlYnRfbmF0X2luZm8gKmluZm8gPSBkYXRhOwogCi0JaWYgKHNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgMCkpCi0JCXJldHVybiBORl9EUk9QOworCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCAwKSkKKwkJcmV0dXJuIEVCVF9EUk9QOwogCiAJbWVtY3B5KGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGluZm8tPm1hYywgRVRIX0FMRU4pOwogCWlmICghKGluZm8tPnRhcmdldCAmIE5BVF9BUlBfQklUKSAmJgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKaW5kZXggYmU2ZjE4Ni4uMjQ2NjI2YiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCkBAIC00Niw3ICs0Niw3IEBACiAJLm5hbWUJCT0gImJyb3V0ZSIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLAogCS52YWxpZF9ob29rcwk9IDEgPDwgTkZfQlJfQlJPVVRJTkcsCi0JLmxvY2sJCT0gUldfTE9DS19VTkxPQ0tFRCwKKwkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoYnJvdXRlX3RhYmxlLmxvY2spLAogCS5jaGVjawkJPSBjaGVjaywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKaW5kZXggZmI4MTA5MC4uNjkwYmMzYSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCkBAIC01NSw3ICs1NSw3IEBACiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBSV19MT0NLX1VOTE9DS0VELAorCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChmcmFtZV9maWx0ZXIubG9jayksCiAJLmNoZWNrCQk9IGNoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCBiYzcxMjczLi41YjQ5NWZlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkubmFtZQkJPSAibmF0IiwKIAkudGFibGUJCT0gJmluaXRpYWxfdGFibGUsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IFJXX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGZyYW1lX25hdC5sb2NrKSwKIAkuY2hlY2sJCT0gY2hlY2ssCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IDM2YjlmMjIuLjI3NTliNzYgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKKysrIGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtNTk5LDcgKzU5OSw3IEBACiAJc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQ7CiAJaW50IG1hdGNoZXM7CiAKLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9DQU4gfHwgZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KSB7CisJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FOIHx8IGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KQEAgLTcxMCw3ICs3MTAsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FOKQpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggYmQ0MjgyZC4uNzRmZDJkMyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYworKysgYi9uZXQvY2FuL2JjbS5jCkBAIC00Myw2ICs0Myw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CkBAIC02Niw3ICs2Nyw3IEBACiAjZGVmaW5lIFJFR01BU0soaWQpICgoaWQgJiBDQU5fUlRSX0ZMQUcpIHwgKChpZCAmIENBTl9FRkZfRkxBRykgPyBcCiAJCQkoQ0FOX0VGRl9NQVNLIHwgQ0FOX0VGRl9GTEFHKSA6IENBTl9TRkZfTUFTSykpCiAKLSNkZWZpbmUgQ0FOX0JDTV9WRVJTSU9OIENBTl9WRVJTSU9OCisjZGVmaW5lIENBTl9CQ01fVkVSU0lPTiAiMjAwODA0MTUiCiBzdGF0aWMgX19pbml0ZGF0YSBjb25zdCBjaGFyIGJhbm5lcltdID0gS0VSTl9JTkZPCiAJImNhbjogYnJvYWRjYXN0IG1hbmFnZXIgcHJvdG9jb2wgKHJldiAiIENBTl9CQ01fVkVSU0lPTiAiKVxuIjsKIApAQCAtODUsMTEgKzg2LDEwIEBACiAJaW50IGlmaW5kZXg7CiAJY2FuaWRfdCBjYW5faWQ7CiAJaW50IGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgal9pdmFsMSwgal9pdmFsMiwgal9sYXN0bXNnOwogCXVuc2lnbmVkIGxvbmcgZnJhbWVzX2FicywgZnJhbWVzX2ZpbHRlcmVkOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyLCB0aHJ0aW1lcjsKIAlzdHJ1Y3QgdGltZXZhbCBpdmFsMSwgaXZhbDI7Ci0Ja3RpbWVfdCByeF9zdGFtcDsKKwlzdHJ1Y3QgaHJ0aW1lciB0aW1lciwgdGhydGltZXI7CisJa3RpbWVfdCByeF9zdGFtcCwga3RfaXZhbDEsIGt0X2l2YWwyLCBrdF9sYXN0bXNnOwogCWludCByeF9pZmluZGV4OwogCWludCBjb3VudDsKIAlpbnQgbmZyYW1lczsKQEAgLTEyNiwzOSArMTI2LDYgQEAKICNkZWZpbmUgTUhTSVogc2l6ZW9mKHN0cnVjdCBiY21fbXNnX2hlYWQpCiAKIC8qCi0gKiByb3VuZGVkX3R2MmppZiAtIGNhbGN1bGF0ZSBqaWZmaWVzIGZyb20gdGltZXZhbCBpbmNsdWRpbmcgb3B0aW9uYWwgdXAKLSAqIEB0djogcG9pbnRlciB0byB0aW1ldmFsCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBVbmxpa2UgdGltZXZhbF90b19qaWZmaWVzKCkgcHJvdmlkZWQgaW4gaW5jbHVkZS9saW51eC9qaWZmaWVzLmgsIHRoaXMKLSAqIGZ1bmN0aW9uIGlzIGludGVudGlvbmFsbHkgbW9yZSByZWxheGVkIG9uIHByZWNpc2UgdGltZXIgdGlja3MgdG8gZ2V0Ci0gKiBleGFjdCBvbmUgamlmZnkgZm9yIHJlcXVlc3RlZCAxMDAwdXMgb24gYSAxMDAwSFogbWFjaGluZS4KLSAqIFRoaXMgY29kZSBpcyB0byBiZSByZW1vdmVkIHdoZW4gdXBncmFkaW5nIHRvIGtlcm5lbCBocnRpbWVyLgotICoKLSAqIFJldHVybjoKLSAqICBjYWxjdWxhdGVkIGppZmZpZXMgKG1heDogVUxPTkdfTUFYKQotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZGVkX3R2MmppZihjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpCi17Ci0JdW5zaWduZWQgbG9uZyBzZWMgID0gdHYtPnR2X3NlYzsKLQl1bnNpZ25lZCBsb25nIHVzZWMgPSB0di0+dHZfdXNlYzsKLQl1bnNpZ25lZCBsb25nIGppZjsKLQotCWlmIChzZWMgPiBVTE9OR19NQVggLyBIWikKLQkJcmV0dXJuIFVMT05HX01BWDsKLQotCS8qIHJvdW5kIHVwIHRvIGdldCBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIHRpbWUgKi8KLQl1c2VjICs9IDEwMDAwMDAgLyBIWiAtIDE7Ci0KLQlqaWYgID0gdXNlYyAvICgxMDAwMDAwIC8gSFopOwotCi0JaWYgKHNlYyAqIEhaID4gVUxPTkdfTUFYIC0gamlmKQotCQlyZXR1cm4gVUxPTkdfTUFYOwotCi0JcmV0dXJuIGppZiArIHNlYyAqIEhaOwotfQotCi0vKgogICogcHJvY2ZzIGZ1bmN0aW9ucwogICovCiBzdGF0aWMgY2hhciAqYmNtX3Byb2NfZ2V0aWZuYW1lKGludCBpZmluZGV4KQpAQCAtMjA4LDEzICsxNzUsMTcgQEAKIAkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlslZF0lYyAiLAogCQkJCW9wLT5uZnJhbWVzLAogCQkJCShvcC0+ZmxhZ3MgJiBSWF9DSEVDS19ETEMpPydkJzonICcpOwotCQlpZiAob3AtPmpfaXZhbDEpCisJCWlmIChvcC0+a3RfaXZhbDEudHY2NCkKIAkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJCSJ0aW1lbz0lbGQgIiwgb3AtPmpfaXZhbDEpOworCQkJCQkidGltZW89JWxsZCAiLAorCQkJCQkobG9uZyBsb25nKQorCQkJCQlrdGltZV90b191cyhvcC0+a3RfaXZhbDEpKTsKIAotCQlpZiAob3AtPmpfaXZhbDIpCisJCWlmIChvcC0+a3RfaXZhbDIudHY2NCkKIAkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJCSJ0aHI9JWxkICIsIG9wLT5qX2l2YWwyKTsKKwkJCQkJInRocj0lbGxkICIsCisJCQkJCShsb25nIGxvbmcpCisJCQkJCWt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMikpOwogCiAJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCiAJCQkJIiMgcmVjdiAlbGQgKCVsZCkgPT4gcmVkdWN0aW9uOiAiLApAQCAtMjM4LDEzICsyMDksMTQgQEAKIAkJCQkidHhfb3A6ICUwM1ggJXMgWyVkXSAiLAogCQkJCW9wLT5jYW5faWQsIGJjbV9wcm9jX2dldGlmbmFtZShvcC0+aWZpbmRleCksCiAJCQkJb3AtPm5mcmFtZXMpOwotCQlpZiAob3AtPmpfaXZhbDEpCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAidDE9JWxkICIsCi0JCQkJCW9wLT5qX2l2YWwxKTsKIAotCQlpZiAob3AtPmpfaXZhbDIpCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAidDI9JWxkICIsCi0JCQkJCW9wLT5qX2l2YWwyKTsKKwkJaWYgKG9wLT5rdF9pdmFsMS50djY0KQorCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgInQxPSVsbGQgIiwKKwkJCQkJKGxvbmcgbG9uZykga3RpbWVfdG9fdXMob3AtPmt0X2l2YWwxKSk7CisKKwkJaWYgKG9wLT5rdF9pdmFsMi50djY0KQorCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgInQyPSVsbGQgIiwKKwkJCQkJKGxvbmcgbG9uZykga3RpbWVfdG9fdXMob3AtPmt0X2l2YWwyKSk7CiAKIAkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiMgc2VudCAlbGRcbiIsCiAJCQkJb3AtPmZyYW1lc19hYnMpOwpAQCAtMzcxLDExICszNDMsMTIgQEAKIC8qCiAgKiBiY21fdHhfdGltZW91dF9oYW5kbGVyIC0gcGVyZm9ybWVzIGN5Y2xpYyBDQU4gZnJhbWUgdHJhbnNtaXNzaW9ucwogICovCi1zdGF0aWMgdm9pZCBiY21fdHhfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBiY21fdHhfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQogewotCXN0cnVjdCBiY21fb3AgKm9wID0gKHN0cnVjdCBiY21fb3AgKilkYXRhOworCXN0cnVjdCBiY21fb3AgKm9wID0gY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBiY21fb3AsIHRpbWVyKTsKKwllbnVtIGhydGltZXJfcmVzdGFydCByZXQgPSBIUlRJTUVSX05PUkVTVEFSVDsKIAotCWlmIChvcC0+al9pdmFsMSAmJiAob3AtPmNvdW50ID4gMCkpIHsKKwlpZiAob3AtPmt0X2l2YWwxLnR2NjQgJiYgKG9wLT5jb3VudCA+IDApKSB7CiAKIAkJb3AtPmNvdW50LS07CiAJCWlmICghb3AtPmNvdW50ICYmIChvcC0+ZmxhZ3MgJiBUWF9DT1VOVEVWVCkpIHsKQEAgLTM5NCwyMiArMzY3LDI0IEBACiAJCX0KIAl9CiAKLQlpZiAob3AtPmpfaXZhbDEgJiYgKG9wLT5jb3VudCA+IDApKSB7CisJaWYgKG9wLT5rdF9pdmFsMS50djY0ICYmIChvcC0+Y291bnQgPiAwKSkgewogCiAJCS8qIHNlbmQgKG5leHQpIGZyYW1lICovCiAJCWJjbV9jYW5fdHgob3ApOwotCQltb2RfdGltZXIoJm9wLT50aW1lciwgamlmZmllcyArIG9wLT5qX2l2YWwxKTsKKwkJaHJ0aW1lcl9mb3J3YXJkKGhydGltZXIsIGt0aW1lX2dldCgpLCBvcC0+a3RfaXZhbDEpOworCQlyZXQgPSBIUlRJTUVSX1JFU1RBUlQ7CiAKIAl9IGVsc2UgewotCQlpZiAob3AtPmpfaXZhbDIpIHsKKwkJaWYgKG9wLT5rdF9pdmFsMi50djY0KSB7CiAKIAkJCS8qIHNlbmQgKG5leHQpIGZyYW1lICovCiAJCQliY21fY2FuX3R4KG9wKTsKLQkJCW1vZF90aW1lcigmb3AtPnRpbWVyLCBqaWZmaWVzICsgb3AtPmpfaXZhbDIpOworCQkJaHJ0aW1lcl9mb3J3YXJkKGhydGltZXIsIGt0aW1lX2dldCgpLCBvcC0+a3RfaXZhbDIpOworCQkJcmV0ID0gSFJUSU1FUl9SRVNUQVJUOwogCQl9CiAJfQogCi0JcmV0dXJuOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC00MTksOCArMzk0LDYgQEAKIHsKIAlzdHJ1Y3QgYmNtX21zZ19oZWFkIGhlYWQ7CiAKLQlvcC0+al9sYXN0bXNnID0gamlmZmllczsKLQogCS8qIHVwZGF0ZSBzdGF0aXN0aWNzICovCiAJb3AtPmZyYW1lc19maWx0ZXJlZCsrOwogCkBAIC00MzksNiArNDEyLDEyIEBACiAJYmNtX3NlbmRfdG9fdXNlcihvcCwgJmhlYWQsIGRhdGEsIDEpOwogfQogCisvKiBUT0RPOiBtb3ZlIHRvIGxpbnV4L2hydGltZXIuaCAqLworc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9jYWxsYmFja19ydW5uaW5nKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKyAgICAgICAgcmV0dXJuIHRpbWVyLT5zdGF0ZSAmIEhSVElNRVJfU1RBVEVfQ0FMTEJBQ0s7Cit9CisKIC8qCiAgKiBiY21fcnhfdXBkYXRlX2FuZF9zZW5kIC0gcHJvY2VzcyBhIGRldGVjdGVkIHJlbGV2YW50IHJlY2VpdmUgY29udGVudCBjaGFuZ2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAxLiB1cGRhdGUgdGhlIGxhc3QgcmVjZWl2ZWQgZGF0YQpAQCAtNDQ4LDMwICs0MjcsNDQgQEAKIAkJCQkgICBzdHJ1Y3QgY2FuX2ZyYW1lICpsYXN0ZGF0YSwKIAkJCQkgICBzdHJ1Y3QgY2FuX2ZyYW1lICpyeGRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXh0dHggPSBvcC0+al9sYXN0bXNnICsgb3AtPmpfaXZhbDI7Ci0KIAltZW1jcHkobGFzdGRhdGEsIHJ4ZGF0YSwgQ0ZTSVopOwogCiAJLyogbWFyayBhcyB1c2VkICovCiAJbGFzdGRhdGEtPmNhbl9kbGMgfD0gUlhfUkVDVjsKIAotCS8qIHRocm90dGxlIGJjbV9yeF9jaGFuZ2VkID8gKi8KLQlpZiAoKG9wLT50aHJ0aW1lci5leHBpcmVzKSB8fAotCSAgICAoKG9wLT5qX2l2YWwyKSAmJiAobmV4dHR4ID4gamlmZmllcykpKSB7Ci0JCS8qIHdlIGFyZSBhbHJlYWR5IHdhaXRpbmcgT1Igd2UgaGF2ZSB0byBzdGFydCB3YWl0aW5nICovCi0KLQkJLyogbWFyayBhcyAndGhyb3R0bGVkJyAqLwotCQlsYXN0ZGF0YS0+Y2FuX2RsYyB8PSBSWF9USFI7Ci0KLQkJaWYgKCEob3AtPnRocnRpbWVyLmV4cGlyZXMpKSB7Ci0JCQkvKiBzdGFydCB0aGUgdGltZXIgb25seSB0aGUgZmlyc3QgdGltZSAqLwotCQkJbW9kX3RpbWVyKCZvcC0+dGhydGltZXIsIG5leHR0eCk7Ci0JCX0KLQotCX0gZWxzZSB7CisJLyogdGhyb3R0ZWxpbmcgbW9kZSBpbmFjdGl2ZSBPUiBkYXRhIHVwZGF0ZSBhbHJlYWR5IG9uIHRoZSBydW4gPyAqLworCWlmICghb3AtPmt0X2l2YWwyLnR2NjQgfHwgaHJ0aW1lcl9jYWxsYmFja19ydW5uaW5nKCZvcC0+dGhydGltZXIpKSB7CiAJCS8qIHNlbmQgUlhfQ0hBTkdFRCB0byB0aGUgdXNlciBpbW1lZGlhdGVseSAqLwogCQliY21fcnhfY2hhbmdlZChvcCwgcnhkYXRhKTsKKwkJcmV0dXJuOwogCX0KKworCWlmIChocnRpbWVyX2FjdGl2ZSgmb3AtPnRocnRpbWVyKSkgeworCQkvKiBtYXJrIGFzICd0aHJvdHRsZWQnICovCisJCWxhc3RkYXRhLT5jYW5fZGxjIHw9IFJYX1RIUjsKKwkJcmV0dXJuOworCX0KKworCWlmICghb3AtPmt0X2xhc3Rtc2cudHY2NCkgeworCQkvKiBzZW5kIGZpcnN0IFJYX0NIQU5HRUQgdG8gdGhlIHVzZXIgaW1tZWRpYXRlbHkgKi8KKwkJYmNtX3J4X2NoYW5nZWQob3AsIHJ4ZGF0YSk7CisJCW9wLT5rdF9sYXN0bXNnID0ga3RpbWVfZ2V0KCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoa3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIG9wLT5rdF9sYXN0bXNnKSA8CisJICAgIGt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMikpIHsKKwkJLyogbWFyayBhcyAndGhyb3R0bGVkJyBhbmQgc3RhcnQgdGltZXIgKi8KKwkJbGFzdGRhdGEtPmNhbl9kbGMgfD0gUlhfVEhSOworCQlocnRpbWVyX3N0YXJ0KCZvcC0+dGhydGltZXIsCisJCQkgICAgICBrdGltZV9hZGQob3AtPmt0X2xhc3Rtc2csIG9wLT5rdF9pdmFsMiksCisJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHRoZSBnYXAgd2FzIHRoYXQgYmlnLCB0aGF0IHRocm90dGxpbmcgd2FzIG5vdCBuZWVkZWQgaGVyZSAqLworCWJjbV9yeF9jaGFuZ2VkKG9wLCByeGRhdGEpOworCW9wLT5rdF9sYXN0bXNnID0ga3RpbWVfZ2V0KCk7CiB9CiAKIC8qCkBAIC01MTksMTYgKzUxMiwxNiBAQAogCWlmIChvcC0+ZmxhZ3MgJiBSWF9OT19BVVRPVElNRVIpCiAJCXJldHVybjsKIAotCWlmIChvcC0+al9pdmFsMSkKLQkJbW9kX3RpbWVyKCZvcC0+dGltZXIsIGppZmZpZXMgKyBvcC0+al9pdmFsMSk7CisJaWYgKG9wLT5rdF9pdmFsMS50djY0KQorCQlocnRpbWVyX3N0YXJ0KCZvcC0+dGltZXIsIG9wLT5rdF9pdmFsMSwgSFJUSU1FUl9NT0RFX1JFTCk7CiB9CiAKIC8qCiAgKiBiY21fcnhfdGltZW91dF9oYW5kbGVyIC0gd2hlbiB0aGUgKGN5Y2xpYykgQ0FOIGZyYW1lIHJlY2VpcHRpb24gdGltZWQgb3V0CiAgKi8KLXN0YXRpYyB2b2lkIGJjbV9yeF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGJjbV9yeF90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpCiB7Ci0Jc3RydWN0IGJjbV9vcCAqb3AgPSAoc3RydWN0IGJjbV9vcCAqKWRhdGE7CisJc3RydWN0IGJjbV9vcCAqb3AgPSBjb250YWluZXJfb2YoaHJ0aW1lciwgc3RydWN0IGJjbV9vcCwgdGltZXIpOwogCXN0cnVjdCBiY21fbXNnX2hlYWQgbXNnX2hlYWQ7CiAKIAltc2dfaGVhZC5vcGNvZGUgID0gUlhfVElNRU9VVDsKQEAgLTU0OCwyNyArNTQxLDI3IEBACiAJCS8qIGNsZWFyIHJlY2VpdmVkIGNhbl9mcmFtZXMgdG8gaW5kaWNhdGUgJ25vdGhpbmcgcmVjZWl2ZWQnICovCiAJCW1lbXNldChvcC0+bGFzdF9mcmFtZXMsIDAsIG9wLT5uZnJhbWVzICogQ0ZTSVopOwogCX0KKworCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAogLyoKLSAqIGJjbV9yeF90aHJfaGFuZGxlciAtIHRoZSB0aW1lIGZvciBibG9ja2VkIGNvbnRlbnQgdXBkYXRlcyBpcyBvdmVyIG5vdzoKLSAqICAgICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciB0aHJvdHRsZWQgZGF0YSBhbmQgc2VuZCBpdCB0byB0aGUgdXNlcnNwYWNlCisgKiBiY21fcnhfdGhyX2ZsdXNoIC0gQ2hlY2sgZm9yIHRocm90dGxlZCBkYXRhIGFuZCBzZW5kIGl0IHRvIHRoZSB1c2Vyc3BhY2UKICAqLwotc3RhdGljIHZvaWQgYmNtX3J4X3Rocl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbnQgYmNtX3J4X3Rocl9mbHVzaChzdHJ1Y3QgYmNtX29wICpvcCkKIHsKLQlzdHJ1Y3QgYmNtX29wICpvcCA9IChzdHJ1Y3QgYmNtX29wICopZGF0YTsKLQlpbnQgaSA9IDA7Ci0KLQkvKiBtYXJrIGRpc2FibGVkIC8gY29uc3VtZWQgdGltZXIgKi8KLQlvcC0+dGhydGltZXIuZXhwaXJlcyA9IDA7CisJaW50IHVwZGF0ZWQgPSAwOwogCiAJaWYgKG9wLT5uZnJhbWVzID4gMSkgeworCQlpbnQgaTsKKwogCQkvKiBmb3IgTVVYIGZpbHRlciB3ZSBzdGFydCBhdCBpbmRleCAxICovCiAJCWZvciAoaSA9IDE7IGkgPCBvcC0+bmZyYW1lczsgaSsrKSB7CiAJCQlpZiAoKG9wLT5sYXN0X2ZyYW1lcykgJiYKIAkJCSAgICAob3AtPmxhc3RfZnJhbWVzW2ldLmNhbl9kbGMgJiBSWF9USFIpKSB7CiAJCQkJb3AtPmxhc3RfZnJhbWVzW2ldLmNhbl9kbGMgJj0gflJYX1RIUjsKIAkJCQliY21fcnhfY2hhbmdlZChvcCwgJm9wLT5sYXN0X2ZyYW1lc1tpXSk7CisJCQkJdXBkYXRlZCsrOwogCQkJfQogCQl9CiAKQEAgLTU3Nyw4ICs1NzAsMjkgQEAKIAkJaWYgKG9wLT5sYXN0X2ZyYW1lcyAmJiAob3AtPmxhc3RfZnJhbWVzWzBdLmNhbl9kbGMgJiBSWF9USFIpKSB7CiAJCQlvcC0+bGFzdF9mcmFtZXNbMF0uY2FuX2RsYyAmPSB+UlhfVEhSOwogCQkJYmNtX3J4X2NoYW5nZWQob3AsICZvcC0+bGFzdF9mcmFtZXNbMF0pOworCQkJdXBkYXRlZCsrOwogCQl9CiAJfQorCisJcmV0dXJuIHVwZGF0ZWQ7Cit9CisKKy8qCisgKiBiY21fcnhfdGhyX2hhbmRsZXIgLSB0aGUgdGltZSBmb3IgYmxvY2tlZCBjb250ZW50IHVwZGF0ZXMgaXMgb3ZlciBub3c6CisgKiAgICAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgdGhyb3R0bGVkIGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIHVzZXJzcGFjZQorICovCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYmNtX3J4X3Rocl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQoreworCXN0cnVjdCBiY21fb3AgKm9wID0gY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBiY21fb3AsIHRocnRpbWVyKTsKKworCWlmIChiY21fcnhfdGhyX2ZsdXNoKG9wKSkgeworCQlocnRpbWVyX2ZvcndhcmQoaHJ0aW1lciwga3RpbWVfZ2V0KCksIG9wLT5rdF9pdmFsMik7CisJCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CisJfSBlbHNlIHsKKwkJLyogcmVhcm0gdGhyb3R0bGUgaGFuZGxpbmcgKi8KKwkJb3AtPmt0X2xhc3Rtc2cgPSBrdGltZV9zZXQoMCwgMCk7CisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKwl9CiB9CiAKIC8qCkBAIC01OTEsNyArNjA1LDcgQEAKIAlpbnQgaTsKIAogCS8qIGRpc2FibGUgdGltZW91dCAqLwotCWRlbF90aW1lcigmb3AtPnRpbWVyKTsKKwlocnRpbWVyX2NhbmNlbCgmb3AtPnRpbWVyKTsKIAogCWlmIChza2ItPmxlbiA9PSBzaXplb2YocnhmcmFtZSkpIHsKIAkJbWVtY3B5KCZyeGZyYW1lLCBza2ItPmRhdGEsIHNpemVvZihyeGZyYW1lKSk7CkBAIC02NjksOCArNjgzLDggQEAKIAogc3RhdGljIHZvaWQgYmNtX3JlbW92ZV9vcChzdHJ1Y3QgYmNtX29wICpvcCkKIHsKLQlkZWxfdGltZXIoJm9wLT50aW1lcik7Ci0JZGVsX3RpbWVyKCZvcC0+dGhydGltZXIpOworCWhydGltZXJfY2FuY2VsKCZvcC0+dGltZXIpOworCWhydGltZXJfY2FuY2VsKCZvcC0+dGhydGltZXIpOwogCiAJaWYgKChvcC0+ZnJhbWVzKSAmJiAob3AtPmZyYW1lcyAhPSAmb3AtPnNmcmFtZSkpCiAJCWtmcmVlKG9wLT5mcmFtZXMpOwpAQCAtODcxLDExICs4ODUsMTEgQEAKIAkJb3AtPmlmaW5kZXggPSBpZmluZGV4OwogCiAJCS8qIGluaXRpYWxpemUgdW5pbml0aWFsaXplZCAoa3phbGxvYykgc3RydWN0dXJlICovCi0JCXNldHVwX3RpbWVyKCZvcC0+dGltZXIsIGJjbV90eF90aW1lb3V0X2hhbmRsZXIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpb3ApOworCQlocnRpbWVyX2luaXQoJm9wLT50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwkJb3AtPnRpbWVyLmZ1bmN0aW9uID0gYmNtX3R4X3RpbWVvdXRfaGFuZGxlcjsKIAogCQkvKiBjdXJyZW50bHkgdW51c2VkIGluIHR4X29wcyAqLwotCQlpbml0X3RpbWVyKCZvcC0+dGhydGltZXIpOworCQlocnRpbWVyX2luaXQoJm9wLT50aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKIAogCQkvKiBhZGQgdGhpcyBiY21fb3AgdG8gdGhlIGxpc3Qgb2YgdGhlIHR4X29wcyAqLwogCQlsaXN0X2FkZCgmb3AtPmxpc3QsICZiby0+dHhfb3BzKTsKQEAgLTkwMiwyNSArOTE2LDI3IEBACiAJCW9wLT5jb3VudCA9IG1zZ19oZWFkLT5jb3VudDsKIAkJb3AtPml2YWwxID0gbXNnX2hlYWQtPml2YWwxOwogCQlvcC0+aXZhbDIgPSBtc2dfaGVhZC0+aXZhbDI7Ci0JCW9wLT5qX2l2YWwxID0gcm91bmRlZF90djJqaWYoJm1zZ19oZWFkLT5pdmFsMSk7Ci0JCW9wLT5qX2l2YWwyID0gcm91bmRlZF90djJqaWYoJm1zZ19oZWFkLT5pdmFsMik7CisJCW9wLT5rdF9pdmFsMSA9IHRpbWV2YWxfdG9fa3RpbWUobXNnX2hlYWQtPml2YWwxKTsKKwkJb3AtPmt0X2l2YWwyID0gdGltZXZhbF90b19rdGltZShtc2dfaGVhZC0+aXZhbDIpOwogCiAJCS8qIGRpc2FibGUgYW4gYWN0aXZlIHRpbWVyIGR1ZSB0byB6ZXJvIHZhbHVlcz8gKi8KLQkJaWYgKCFvcC0+al9pdmFsMSAmJiAhb3AtPmpfaXZhbDIpCi0JCQlkZWxfdGltZXIoJm9wLT50aW1lcik7CisJCWlmICghb3AtPmt0X2l2YWwxLnR2NjQgJiYgIW9wLT5rdF9pdmFsMi50djY0KQorCQkJaHJ0aW1lcl9jYW5jZWwoJm9wLT50aW1lcik7CiAJfQogCiAJaWYgKChvcC0+ZmxhZ3MgJiBTVEFSVFRJTUVSKSAmJgotCSAgICAoKG9wLT5qX2l2YWwxICYmIG9wLT5jb3VudCkgfHwgb3AtPmpfaXZhbDIpKSB7CisJICAgICgob3AtPmt0X2l2YWwxLnR2NjQgJiYgb3AtPmNvdW50KSB8fCBvcC0+a3RfaXZhbDIudHY2NCkpIHsKIAogCQkvKiBzcGVjOiBzZW5kIGNhbl9mcmFtZSB3aGVuIHN0YXJ0aW5nIHRpbWVyICovCiAJCW9wLT5mbGFncyB8PSBUWF9BTk5PVU5DRTsKIAotCQlpZiAob3AtPmpfaXZhbDEgJiYgKG9wLT5jb3VudCA+IDApKSB7CisJCWlmIChvcC0+a3RfaXZhbDEudHY2NCAmJiAob3AtPmNvdW50ID4gMCkpIHsKIAkJCS8qIG9wLT5jb3VudC0tIGlzIGRvbmUgaW4gYmNtX3R4X3RpbWVvdXRfaGFuZGxlciAqLwotCQkJbW9kX3RpbWVyKCZvcC0+dGltZXIsIGppZmZpZXMgKyBvcC0+al9pdmFsMSk7CisJCQlocnRpbWVyX3N0YXJ0KCZvcC0+dGltZXIsIG9wLT5rdF9pdmFsMSwKKwkJCQkgICAgICBIUlRJTUVSX01PREVfUkVMKTsKIAkJfSBlbHNlCi0JCQltb2RfdGltZXIoJm9wLT50aW1lciwgamlmZmllcyArIG9wLT5qX2l2YWwyKTsKKwkJCWhydGltZXJfc3RhcnQoJm9wLT50aW1lciwgb3AtPmt0X2l2YWwyLAorCQkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOwogCX0KIAogCWlmIChvcC0+ZmxhZ3MgJiBUWF9BTk5PVU5DRSkKQEAgLTEwMzIsMTUgKzEwNDgsMTEgQEAKIAkJb3AtPmlmaW5kZXggPSBpZmluZGV4OwogCiAJCS8qIGluaXRpYWxpemUgdW5pbml0aWFsaXplZCAoa3phbGxvYykgc3RydWN0dXJlICovCi0JCXNldHVwX3RpbWVyKCZvcC0+dGltZXIsIGJjbV9yeF90aW1lb3V0X2hhbmRsZXIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpb3ApOworCQlocnRpbWVyX2luaXQoJm9wLT50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwkJb3AtPnRpbWVyLmZ1bmN0aW9uID0gYmNtX3J4X3RpbWVvdXRfaGFuZGxlcjsKIAotCQkvKiBpbml0IHRocm90dGxlIHRpbWVyIGZvciBSWF9DSEFOR0VEICovCi0JCXNldHVwX3RpbWVyKCZvcC0+dGhydGltZXIsIGJjbV9yeF90aHJfaGFuZGxlciwKLQkJCSAgICAodW5zaWduZWQgbG9uZylvcCk7Ci0KLQkJLyogbWFyayBkaXNhYmxlZCB0aW1lciAqLwotCQlvcC0+dGhydGltZXIuZXhwaXJlcyA9IDA7CisJCWhydGltZXJfaW5pdCgmb3AtPnRocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCQlvcC0+dGhydGltZXIuZnVuY3Rpb24gPSBiY21fcnhfdGhyX2hhbmRsZXI7CiAKIAkJLyogYWRkIHRoaXMgYmNtX29wIHRvIHRoZSBsaXN0IG9mIHRoZSByeF9vcHMgKi8KIAkJbGlzdF9hZGQoJm9wLT5saXN0LCAmYm8tPnJ4X29wcyk7CkBAIC0xMDU2LDggKzEwNjgsOCBAQAogCWlmIChvcC0+ZmxhZ3MgJiBSWF9SVFJfRlJBTUUpIHsKIAogCQkvKiBubyB0aW1lcnMgaW4gUlRSLW1vZGUgKi8KLQkJZGVsX3RpbWVyKCZvcC0+dGhydGltZXIpOwotCQlkZWxfdGltZXIoJm9wLT50aW1lcik7CisJCWhydGltZXJfY2FuY2VsKCZvcC0+dGhydGltZXIpOworCQlocnRpbWVyX2NhbmNlbCgmb3AtPnRpbWVyKTsKIAogCQkvKgogCQkgKiBmdW5ueSBmZWF0dXJlIGluIFJYKCEpX1NFVFVQIG9ubHkgZm9yIFJUUi1tb2RlOgpAQCAtMTA3NCwyOCArMTA4NiwyNSBAQAogCQkJLyogc2V0IHRpbWVyIHZhbHVlICovCiAJCQlvcC0+aXZhbDEgPSBtc2dfaGVhZC0+aXZhbDE7CiAJCQlvcC0+aXZhbDIgPSBtc2dfaGVhZC0+aXZhbDI7Ci0JCQlvcC0+al9pdmFsMSA9IHJvdW5kZWRfdHYyamlmKCZtc2dfaGVhZC0+aXZhbDEpOwotCQkJb3AtPmpfaXZhbDIgPSByb3VuZGVkX3R2MmppZigmbXNnX2hlYWQtPml2YWwyKTsKKwkJCW9wLT5rdF9pdmFsMSA9IHRpbWV2YWxfdG9fa3RpbWUobXNnX2hlYWQtPml2YWwxKTsKKwkJCW9wLT5rdF9pdmFsMiA9IHRpbWV2YWxfdG9fa3RpbWUobXNnX2hlYWQtPml2YWwyKTsKIAogCQkJLyogZGlzYWJsZSBhbiBhY3RpdmUgdGltZXIgZHVlIHRvIHplcm8gdmFsdWU/ICovCi0JCQlpZiAoIW9wLT5qX2l2YWwxKQotCQkJCWRlbF90aW1lcigmb3AtPnRpbWVyKTsKLQotCQkJLyogZnJlZSBjdXJyZW50bHkgYmxvY2tlZCBtc2dzID8gKi8KLQkJCWlmIChvcC0+dGhydGltZXIuZXhwaXJlcykgewotCQkJCS8qIHNlbmQgYmxvY2tlZCBtc2dzIGhlcmVhZnRlciAqLwotCQkJCW1vZF90aW1lcigmb3AtPnRocnRpbWVyLCBqaWZmaWVzICsgMik7Ci0JCQl9CisJCQlpZiAoIW9wLT5rdF9pdmFsMS50djY0KQorCQkJCWhydGltZXJfY2FuY2VsKCZvcC0+dGltZXIpOwogCiAJCQkvKgotCQkJICogaWYgKG9wLT5qX2l2YWwyKSBpcyB6ZXJvLCBubyAobmV3KSB0aHJvdHRsaW5nCi0JCQkgKiB3aWxsIGhhcHBlbi4gRm9yIGRldGFpbHMgc2VlIGZ1bmN0aW9ucwotCQkJICogYmNtX3J4X3VwZGF0ZV9hbmRfc2VuZCgpIGFuZCBiY21fcnhfdGhyX2hhbmRsZXIoKQorCQkJICogSW4gYW55IGNhc2UgY2FuY2VsIHRoZSB0aHJvdHRsZSB0aW1lciwgZmx1c2gKKwkJCSAqIHBvdGVudGlhbGx5IGJsb2NrZWQgbXNncyBhbmQgcmVzZXQgdGhyb3R0bGUgaGFuZGxpbmcKIAkJCSAqLworCQkJb3AtPmt0X2xhc3Rtc2cgPSBrdGltZV9zZXQoMCwgMCk7CisJCQlocnRpbWVyX2NhbmNlbCgmb3AtPnRocnRpbWVyKTsKKwkJCWJjbV9yeF90aHJfZmx1c2gob3ApOwogCQl9CiAKLQkJaWYgKChvcC0+ZmxhZ3MgJiBTVEFSVFRJTUVSKSAmJiBvcC0+al9pdmFsMSkKLQkJCW1vZF90aW1lcigmb3AtPnRpbWVyLCBqaWZmaWVzICsgb3AtPmpfaXZhbDEpOworCQlpZiAoKG9wLT5mbGFncyAmIFNUQVJUVElNRVIpICYmIG9wLT5rdF9pdmFsMS50djY0KQorCQkJaHJ0aW1lcl9zdGFydCgmb3AtPnRpbWVyLCBvcC0+a3RfaXZhbDEsCisJCQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTCk7CiAJfQogCiAJLyogbm93IHdlIGNhbiByZWdpc3RlciBmb3IgY2FuX2lkcywgaWYgd2UgYWRkZWQgYSBuZXcgYmNtX29wICovCkBAIC0xMjg1LDcgKzEyOTQsNyBAQAogCXN0cnVjdCBiY21fb3AgKm9wOwogCWludCBub3RpZnlfZW5vZGV2ID0gMDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0NBTikKZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jCmluZGV4IDk0Y2Q3ZjIuLmVhZDUwYzcgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcmF3LmMKKysrIGIvbmV0L2Nhbi9yYXcuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAJc3RydWN0IHJhd19zb2NrICpybyA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHJhd19zb2NrLCBub3RpZmllcik7CiAJc3RydWN0IHNvY2sgKnNrID0gJnJvLT5zazsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0NBTikKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggOTA4ZjA3Yy4uZTFkZjFhYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogLyogRGV2aWNlIGxpc3QgaW5zZXJ0aW9uICovCiBzdGF0aWMgaW50IGxpc3RfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZGV2LT5uZF9uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCiAJQVNTRVJUX1JUTkwoKTsKIApAQCAtODUyLDggKzg1Miw4IEBACiAJc3RydWN0IG5ldCAqbmV0OwogCWludCByZXQ7CiAKLQlCVUdfT04oIWRldi0+bmRfbmV0KTsKLQluZXQgPSBkZXYtPm5kX25ldDsKKwlCVUdfT04oIWRldl9uZXQoZGV2KSk7CisJbmV0ID0gZGV2X25ldChkZXYpOwogCXJldCA9IF9fZGV2X2FsbG9jX25hbWUobmV0LCBuYW1lLCBidWYpOwogCWlmIChyZXQgPj0gMCkKIAkJc3RybGNweShkZXYtPm5hbWUsIGJ1ZiwgSUZOQU1TSVopOwpAQCAtODc3LDkgKzg3Nyw5IEBACiAJc3RydWN0IG5ldCAqbmV0OwogCiAJQVNTRVJUX1JUTkwoKTsKLQlCVUdfT04oIWRldi0+bmRfbmV0KTsKKwlCVUdfT04oIWRldl9uZXQoZGV2KSk7CiAKLQluZXQgPSBkZXYtPm5kX25ldDsKKwluZXQgPSBkZXZfbmV0KGRldik7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTI2MTUsNyArMjYxNSw3IEBACiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wdXRzKHNlcSwgIlR5cGUgRGV2aWNlICAgICAgRnVuY3Rpb25cbiIpOwotCWVsc2UgeworCWVsc2UgaWYgKHB0LT5kZXYgPT0gTlVMTCB8fCBkZXZfbmV0KHB0LT5kZXYpID09IHNlcV9maWxlX25ldChzZXEpKSB7CiAJCWlmIChwdC0+dHlwZSA9PSBodG9ucyhFVEhfUF9BTEwpKQogCQkJc2VxX3B1dHMoc2VxLCAiQUxMICIpOwogCQllbHNlCkBAIC0yNjM5LDcgKzI2MzksOCBAQAogCiBzdGF0aWMgaW50IHB0eXBlX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcHR5cGVfc2VxX29wcyk7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJnB0eXBlX3NlcV9vcHMsCisJCQlzaXplb2Yoc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwdHlwZV9zZXFfZm9wcyA9IHsKQEAgLTI2NDcsNyArMjY0OCw3IEBACiAJLm9wZW4gICAgPSBwdHlwZV9zZXFfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCiAKQEAgLTI5MDAsNyArMjkwMSw3IEBACiAJCX0KIAl9CiAKLQlkYSA9IGttYWxsb2Moc2l6ZW9mKCpkYSksIEdGUF9BVE9NSUMpOworCWRhID0ga3phbGxvYyhzaXplb2YoKmRhKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbWNweShkYS0+ZGFfYWRkciwgYWRkciwgYWxlbik7CkBAIC0zMzI5LDcgKzMzMzAsNyBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJCWNhc2UgU0lPQ0FERE1VTFRJOgotCQkJaWYgKCFkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCB8fAorCQkJaWYgKCghZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgJiYgIWRldi0+c2V0X3J4X21vZGUpIHx8CiAJCQkgICAgaWZyLT5pZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCkBAIC0zMzM4LDcgKzMzMzksNyBAQAogCQkJCQkgIGRldi0+YWRkcl9sZW4sIDEpOwogCiAJCWNhc2UgU0lPQ0RFTE1VTFRJOgotCQkJaWYgKCFkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCB8fAorCQkJaWYgKCghZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgJiYgIWRldi0+c2V0X3J4X21vZGUpIHx8CiAJCQkgICAgaWZyLT5pZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCkBAIC0zNjg4LDggKzM2ODksOCBAQAogCiAJLyogV2hlbiBuZXRfZGV2aWNlJ3MgYXJlIHBlcnNpc3RlbnQsIHRoaXMgd2lsbCBiZSBmYXRhbC4gKi8KIAlCVUdfT04oZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1VOSU5JVElBTElaRUQpOwotCUJVR19PTighZGV2LT5uZF9uZXQpOwotCW5ldCA9IGRldi0+bmRfbmV0OworCUJVR19PTighZGV2X25ldChkZXYpKTsKKwluZXQgPSBkZXZfbmV0KGRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5feG1pdF9sb2NrKTsKQEAgLTM5OTUsMTEgKzM5OTYsMTUgQEAKIAogCUJVR19PTihzdHJsZW4obmFtZSkgPj0gc2l6ZW9mKGRldi0+bmFtZSkpOwogCi0JLyogZW5zdXJlIDMyLWJ5dGUgYWxpZ25tZW50IG9mIGJvdGggdGhlIGRldmljZSBhbmQgcHJpdmF0ZSBhcmVhICovCi0JYWxsb2Nfc2l6ZSA9IChzaXplb2YoKmRldikgKyBORVRERVZfQUxJR05fQ09OU1QgKwotCQkgICAgIChzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3VicXVldWUpICogKHF1ZXVlX2NvdW50IC0gMSkpKSAmCi0JCSAgICAgfk5FVERFVl9BTElHTl9DT05TVDsKLQlhbGxvY19zaXplICs9IHNpemVvZl9wcml2ICsgTkVUREVWX0FMSUdOX0NPTlNUOworCWFsbG9jX3NpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UpICsKKwkJICAgICBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3VicXVldWUpICogKHF1ZXVlX2NvdW50IC0gMSk7CisJaWYgKHNpemVvZl9wcml2KSB7CisJCS8qIGVuc3VyZSAzMi1ieXRlIGFsaWdubWVudCBvZiBwcml2YXRlIGFyZWEgKi8KKwkJYWxsb2Nfc2l6ZSA9IChhbGxvY19zaXplICsgTkVUREVWX0FMSUdOX0NPTlNUKSAmIH5ORVRERVZfQUxJR05fQ09OU1Q7CisJCWFsbG9jX3NpemUgKz0gc2l6ZW9mX3ByaXY7CisJfQorCS8qIGVuc3VyZSAzMi1ieXRlIGFsaWdubWVudCBvZiB3aG9sZSBjb25zdHJ1Y3QgKi8KKwlhbGxvY19zaXplICs9IE5FVERFVl9BTElHTl9DT05TVDsKIAogCXAgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghcCkgewpAQCAtNDAxMCw3ICs0MDE1LDcgQEAKIAlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikKIAkJKCgobG9uZylwICsgTkVUREVWX0FMSUdOX0NPTlNUKSAmIH5ORVRERVZfQUxJR05fQ09OU1QpOwogCWRldi0+cGFkZGVkID0gKGNoYXIgKilkZXYgLSAoY2hhciAqKXA7Ci0JZGV2LT5uZF9uZXQgPSAmaW5pdF9uZXQ7CisJZGV2X25ldF9zZXQoZGV2LCAmaW5pdF9uZXQpOwogCiAJaWYgKHNpemVvZl9wcml2KSB7CiAJCWRldi0+cHJpdiA9ICgoY2hhciAqKWRldiArCkBAIC00MDIxLDYgKzQwMjYsNyBAQAogCX0KIAogCWRldi0+ZWdyZXNzX3N1YnF1ZXVlX2NvdW50ID0gcXVldWVfY291bnQ7CisJZGV2LT5nc29fbWF4X3NpemUgPSBHU09fTUFYX1NJWkU7CiAKIAlkZXYtPmdldF9zdGF0cyA9IGludGVybmFsX3N0YXRzOwogCW5ldHBvbGxfbmV0ZGV2X2luaXQoZGV2KTsKQEAgLTQwNDAsNiArNDA0Niw4IEBACiAgKi8KIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlyZWxlYXNlX25ldChkZXZfbmV0KGRldikpOworCiAJLyogIENvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzICovCiAJaWYgKGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19VTklOSVRJQUxJWkVEKSB7CiAJCWtmcmVlKChjaGFyICopZGV2IC0gZGV2LT5wYWRkZWQpOwpAQCAtNDEzNCw3ICs0MTQyLDcgQEAKIAogCS8qIEdldCBvdXQgaWYgdGhlcmUgaXMgbm90aGluZyB0b2RvICovCiAJZXJyID0gMDsKLQlpZiAoZGV2LT5uZF9uZXQgPT0gbmV0KQorCWlmIChuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKQogCQlnb3RvIG91dDsKIAogCS8qIFBpY2sgdGhlIGRlc3RpbmF0aW9uIGRldmljZSBuYW1lLCBhbmQgZW5zdXJlCkBAIC00MTg1LDcgKzQxOTMsNyBAQAogCWRldl9hZGRyX2Rpc2NhcmQoZGV2KTsKIAogCS8qIEFjdHVhbGx5IHN3aXRjaCB0aGUgbmV0d29yayBuYW1lc3BhY2UgKi8KLQlkZXYtPm5kX25ldCA9IG5ldDsKKwlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAKIAkvKiBBc3NpZ24gdGhlIG5ldyBkZXZpY2UgbmFtZSAqLwogCWlmIChkZXN0bmFtZSAhPSBkZXYtPm5hbWUpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfbWNhc3QuYyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCmluZGV4IGNlYzU4MjUuLmY4YTM0NTUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldl9tY2FzdC5jCisrKyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCkBAIC0xNTYsMzkgKzE1NiwxNCBAQAogRVhQT1JUX1NZTUJPTChkZXZfbWNfdW5zeW5jKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgdm9pZCAqZGV2X21jX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi0JX19hY3F1aXJlcyhkZXZfYmFzZV9sb2NrKQotewotCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JbG9mZl90IG9mZiA9IDA7Ci0KLQlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwotCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikgewotCQlpZiAob2ZmKysgPT0gKnBvcykKLQkJCXJldHVybiBkZXY7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqZGV2X21jX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQkrKypwb3M7Ci0JcmV0dXJuIG5leHRfbmV0X2RldmljZSgoc3RydWN0IG5ldF9kZXZpY2UgKil2KTsKLX0KLQotc3RhdGljIHZvaWQgZGV2X21jX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotCV9fcmVsZWFzZXMoZGV2X2Jhc2VfbG9jaykKLXsKLQlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7Ci19Ci0KLQogc3RhdGljIGludCBkZXZfbWNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IGRldl9hZGRyX2xpc3QgKm07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHY7CiAKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXJldHVybiAwOworCiAJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCWZvciAobSA9IGRldi0+bWNfbGlzdDsgbTsgbSA9IG0tPm5leHQpIHsKIAkJaW50IGk7CkBAIC0yMDYsOSArMTgxLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZXZfbWNfc2VxX29wcyA9IHsKLQkuc3RhcnQgPSBkZXZfbWNfc2VxX3N0YXJ0LAotCS5uZXh0ICA9IGRldl9tY19zZXFfbmV4dCwKLQkuc3RvcCAgPSBkZXZfbWNfc2VxX3N0b3AsCisJLnN0YXJ0ID0gZGV2X3NlcV9zdGFydCwKKwkubmV4dCAgPSBkZXZfc2VxX25leHQsCisJLnN0b3AgID0gZGV2X3NlcV9zdG9wLAogCS5zaG93ICA9IGRldl9tY19zZXFfc2hvdywKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RzdC5jIGIvbmV0L2NvcmUvZHN0LmMKaW5kZXggN2RlZWY0OC4uZmUwMzI2NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHN0LmMKKysrIGIvbmV0L2NvcmUvZHN0LmMKQEAgLTI1OSw2ICsyNTksMTYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAordm9pZCBkc3RfcmVsZWFzZShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJaWYgKGRzdCkgeworCQlXQVJOX09OKGF0b21pY19yZWFkKCZkc3QtPl9fcmVmY250KSA8IDEpOworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCk7CisJCWF0b21pY19kZWMoJmRzdC0+X19yZWZjbnQpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZHN0X3JlbGVhc2UpOworCiAvKiBEaXJ0eSBoYWNrLiBXZSBkaWQgaXQgaW4gMi4yIChpbiBfX2RzdF9mcmVlKSwKICAqIHdlIGhhdmUgX3ZlcnlfIGdvb2QgcmVhc29ucyBub3QgdG8gcmVwZWF0CiAgKiB0aGlzIG1pc3Rha2UgaW4gMi4zLCBidXQgd2UgaGF2ZSBubyBjaG9pY2UKQEAgLTI3OSw3ICsyODksNyBAQAogCWlmICghdW5yZWdpc3RlcikgewogCQlkc3QtPmlucHV0ID0gZHN0LT5vdXRwdXQgPSBkc3RfZGlzY2FyZDsKIAl9IGVsc2UgewotCQlkc3QtPmRldiA9IGRzdC0+ZGV2LT5uZF9uZXQtPmxvb3BiYWNrX2RldjsKKwkJZHN0LT5kZXYgPSBkZXZfbmV0KGRzdC0+ZGV2KS0+bG9vcGJhY2tfZGV2OwogCQlkZXZfaG9sZChkc3QtPmRldik7CiAJCWRldl9wdXQoZGV2KTsKIAkJaWYgKGRzdC0+bmVpZ2hib3VyICYmIGRzdC0+bmVpZ2hib3VyLT5kZXYgPT0gZGV2KSB7CkBAIC0yOTUsOSArMzA1LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCwgKmxhc3QgPSBOVUxMOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CiAJY2FzZSBORVRERVZfRE9XTjoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2V0aHRvb2wuYyBiL25ldC9jb3JlL2V0aHRvb2wuYwppbmRleCAxMTYzZWIyLi5hMjliNDNkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ldGh0b29sLmMKKysrIGIvbmV0L2NvcmUvZXRodG9vbC5jCkBAIC0yODQsOCArMjg0LDEwIEBACiB7CiAJc3RydWN0IGV0aHRvb2xfZWVwcm9tIGVlcHJvbTsKIAljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJdm9pZCBfX3VzZXIgKnVzZXJidWYgPSB1c2VyYWRkciArIHNpemVvZihlZXByb20pOworCXUzMiBieXRlc19yZW1haW5pbmc7CiAJdTggKmRhdGE7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghb3BzLT5nZXRfZWVwcm9tIHx8ICFvcHMtPmdldF9lZXByb21fbGVuKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0zMDEsMjYgKzMwMywyNiBAQAogCWlmIChlZXByb20ub2Zmc2V0ICsgZWVwcm9tLmxlbiA+IG9wcy0+Z2V0X2VlcHJvbV9sZW4oZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkYXRhID0ga21hbGxvYyhlZXByb20ubGVuLCBHRlBfVVNFUik7CisJZGF0YSA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfVVNFUik7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHVzZXJhZGRyICsgc2l6ZW9mKGVlcHJvbSksIGVlcHJvbS5sZW4pKQotCQlnb3RvIG91dDsKKwlieXRlc19yZW1haW5pbmcgPSBlZXByb20ubGVuOworCXdoaWxlIChieXRlc19yZW1haW5pbmcgPiAwKSB7CisJCWVlcHJvbS5sZW4gPSBtaW4oYnl0ZXNfcmVtYWluaW5nLCAodTMyKVBBR0VfU0laRSk7CiAKLQlyZXQgPSBvcHMtPmdldF9lZXByb20oZGV2LCAmZWVwcm9tLCBkYXRhKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJcmV0ID0gb3BzLT5nZXRfZWVwcm9tKGRldiwgJmVlcHJvbSwgZGF0YSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYnVmLCBkYXRhLCBlZXByb20ubGVuKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXVzZXJidWYgKz0gZWVwcm9tLmxlbjsKKwkJZWVwcm9tLm9mZnNldCArPSBlZXByb20ubGVuOworCQlieXRlc19yZW1haW5pbmcgLT0gZWVwcm9tLmxlbjsKKwl9CiAKLQlyZXQgPSAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZlZXByb20sIHNpemVvZihlZXByb20pKSkKLQkJZ290byBvdXQ7Ci0JaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciArIHNpemVvZihlZXByb20pLCBkYXRhLCBlZXByb20ubGVuKSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gMDsKLQotIG91dDoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzI5LDggKzMzMSwxMCBAQAogewogCXN0cnVjdCBldGh0b29sX2VlcHJvbSBlZXByb207CiAJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCXZvaWQgX191c2VyICp1c2VyYnVmID0gdXNlcmFkZHIgKyBzaXplb2YoZWVwcm9tKTsKKwl1MzIgYnl0ZXNfcmVtYWluaW5nOwogCXU4ICpkYXRhOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIW9wcy0+c2V0X2VlcHJvbSB8fCAhb3BzLT5nZXRfZWVwcm9tX2xlbikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMzQ2LDIyICszNTAsMjYgQEAKIAlpZiAoZWVwcm9tLm9mZnNldCArIGVlcHJvbS5sZW4gPiBvcHMtPmdldF9lZXByb21fbGVuKGRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGF0YSA9IGttYWxsb2MoZWVwcm9tLmxlbiwgR0ZQX1VTRVIpOworCWRhdGEgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX1VTRVIpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSAtRUZBVUxUOwotCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCB1c2VyYWRkciArIHNpemVvZihlZXByb20pLCBlZXByb20ubGVuKSkKLQkJZ290byBvdXQ7CisJYnl0ZXNfcmVtYWluaW5nID0gZWVwcm9tLmxlbjsKKwl3aGlsZSAoYnl0ZXNfcmVtYWluaW5nID4gMCkgeworCQllZXByb20ubGVuID0gbWluKGJ5dGVzX3JlbWFpbmluZywgKHUzMilQQUdFX1NJWkUpOwogCi0JcmV0ID0gb3BzLT5zZXRfZWVwcm9tKGRldiwgJmVlcHJvbSwgZGF0YSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCB1c2VyYnVmLCBlZXByb20ubGVuKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IG9wcy0+c2V0X2VlcHJvbShkZXYsICZlZXByb20sIGRhdGEpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXVzZXJidWYgKz0gZWVwcm9tLmxlbjsKKwkJZWVwcm9tLm9mZnNldCArPSBlZXByb20ubGVuOworCQlieXRlc19yZW1haW5pbmcgLT0gZWVwcm9tLmxlbjsKKwl9CiAKLQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyICsgc2l6ZW9mKGVlcHJvbSksIGRhdGEsIGVlcHJvbS5sZW4pKQotCQlyZXQgPSAtRUZBVUxUOwotCi0gb3V0OgogCWtmcmVlKGRhdGEpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDQyY2NhZjUuLmUzZTlhYjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jCisrKyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCkBAIC0yOSw3ICsyOSw3IEBACiAJci0+cHJlZiA9IHByZWY7CiAJci0+dGFibGUgPSB0YWJsZTsKIAlyLT5mbGFncyA9IGZsYWdzOwotCXItPmZyX25ldCA9IG9wcy0+ZnJvX25ldDsKKwlyLT5mcl9uZXQgPSBob2xkX25ldChvcHMtPmZyb19uZXQpOwogCiAJLyogVGhlIGxvY2sgaXMgbm90IHJlcXVpcmVkIGhlcmUsIHRoZSBsaXN0IGluIHVucmVhY2hlYWJsZQogCSAqIGF0IHRoZSBtb21lbnQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KQEAgLTIxNCw3ICsyMTQsNyBAQAogCiBzdGF0aWMgaW50IGZpYl9ubF9uZXdydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzID0gTlVMTDsKIAlzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsICpyLCAqbGFzdCA9IE5VTEw7CkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCXJ1bGUtPmZyX25ldCA9IG5ldDsKKwlydWxlLT5mcl9uZXQgPSBob2xkX25ldChuZXQpOwogCiAJaWYgKHRiW0ZSQV9QUklPUklUWV0pCiAJCXJ1bGUtPnByZWYgPSBubGFfZ2V0X3UzMih0YltGUkFfUFJJT1JJVFldKTsKQEAgLTM0NCw2ICszNDQsNyBAQAogCXJldHVybiAwOwogCiBlcnJvdXRfZnJlZToKKwlyZWxlYXNlX25ldChydWxlLT5mcl9uZXQpOwogCWtmcmVlKHJ1bGUpOwogZXJyb3V0OgogCXJ1bGVzX29wc19wdXQob3BzKTsKQEAgLTM1Miw3ICszNTMsNyBAQAogCiBzdGF0aWMgaW50IGZpYl9ubF9kZWxydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzID0gTlVMTDsKIAlzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsICp0bXA7CkBAIC01MzQsNyArNTM1LDcgQEAKIAogc3RhdGljIGludCBmaWJfbmxfZHVtcHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzOwogCWludCBpZHggPSAwLCBmYW1pbHk7CiAKQEAgLTYxOCw3ICs2MTksNyBAQAogCQkJICAgIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwotCXN0cnVjdCBuZXQgKm5ldCA9IGRldi0+bmRfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzOwogCiAJQVNTRVJUX1JUTkwoKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggZTBhMDY5NC4uZjVmM2NmNjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCisrKyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02NCw2ICs2NSw0MSBAQAogfQogCiAvKioKKyAqCXNrX2ZpbHRlciAtIHJ1biBhIHBhY2tldCB0aHJvdWdoIGEgc29ja2V0IGZpbHRlcgorICoJQHNrOiBzb2NrIGFzc29jaWF0ZWQgd2l0aCAmc2tfYnVmZgorICoJQHNrYjogYnVmZmVyIHRvIGZpbHRlcgorICoJQG5lZWRsb2NrOiBzZXQgdG8gMSBpZiB0aGUgc29jayBpcyBub3QgbG9ja2VkIGJ5IGNhbGxlci4KKyAqCisgKiBSdW4gdGhlIGZpbHRlciBjb2RlIGFuZCB0aGVuIGN1dCBza2ItPmRhdGEgdG8gY29ycmVjdCBzaXplIHJldHVybmVkIGJ5CisgKiBza19ydW5fZmlsdGVyLiBJZiBwa3RfbGVuIGlzIDAgd2UgdG9zcyBwYWNrZXQuIElmIHNrYi0+bGVuIGlzIHNtYWxsZXIKKyAqIHRoYW4gcGt0X2xlbiB3ZSBrZWVwIHdob2xlIHNrYi0+ZGF0YS4gVGhpcyBpcyB0aGUgc29ja2V0IGxldmVsCisgKiB3cmFwcGVyIHRvIHNrX3J1bl9maWx0ZXIuIEl0IHJldHVybnMgMCBpZiB0aGUgcGFja2V0IHNob3VsZAorICogYmUgYWNjZXB0ZWQgb3IgLUVQRVJNIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIHRvc3NlZC4KKyAqCisgKi8KK2ludCBza19maWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBlcnI7CisJc3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyOworCisJZXJyID0gc2VjdXJpdHlfc29ja19yY3Zfc2tiKHNrLCBza2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCWlmIChmaWx0ZXIpIHsKKwkJdW5zaWduZWQgaW50IHBrdF9sZW4gPSBza19ydW5fZmlsdGVyKHNrYiwgZmlsdGVyLT5pbnNucywKKwkJCQlmaWx0ZXItPmxlbik7CisJCWVyciA9IHBrdF9sZW4gPyBwc2tiX3RyaW0oc2tiLCBwa3RfbGVuKSA6IC1FUEVSTTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChza19maWx0ZXIpOworCisvKioKICAqCXNrX3J1bl9maWx0ZXIgLSBydW4gYSBmaWx0ZXIgb24gYSBzb2NrZXQKICAqCUBza2I6IGJ1ZmZlciB0byBydW4gdGhlIGZpbHRlciBvbgogICoJQGZpbHRlcjogZmlsdGVyIHRvIGFwcGx5CkBAIC0yNjgsNiArMzA0LDIyIEBACiAJCWNhc2UgU0tGX0FEX0lGSU5ERVg6CiAJCQlBID0gc2tiLT5kZXYtPmlmaW5kZXg7CiAJCQljb250aW51ZTsKKwkJY2FzZSBTS0ZfQURfTkxBVFRSOiB7CisJCQlzdHJ1Y3QgbmxhdHRyICpubGE7CisKKwkJCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoQSA+IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBubGF0dHIpKQorCQkJCXJldHVybiAwOworCisJCQlubGEgPSBubGFfZmluZCgoc3RydWN0IG5sYXR0ciAqKSZza2ItPmRhdGFbQV0sCisJCQkJICAgICAgIHNrYi0+bGVuIC0gQSwgWCk7CisJCQlpZiAobmxhKQorCQkJCUEgPSAodm9pZCAqKW5sYSAtICh2b2lkICopc2tiLT5kYXRhOworCQkJZWxzZQorCQkJCUEgPSAwOworCQkJY29udGludWU7CisJCX0KIAkJZGVmYXVsdDoKIAkJCXJldHVybiAwOwogCQl9CkBAIC0yNzUsNiArMzI3LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChza19ydW5fZmlsdGVyKTsKIAogLyoqCiAgKglza19jaGtfZmlsdGVyIC0gdmVyaWZ5IHNvY2tldCBmaWx0ZXIgY29kZQpAQCAtMzg1LDYgKzQzOCw3IEBACiAKIAlyZXR1cm4gKEJQRl9DTEFTUyhmaWx0ZXJbZmxlbiAtIDFdLmNvZGUpID09IEJQRl9SRVQpID8gMCA6IC1FSU5WQUw7CiB9CitFWFBPUlRfU1lNQk9MKHNrX2Noa19maWx0ZXIpOwogCiAvKioKICAqIAlza19maWx0ZXJfcmN1X3JlbGVhc2U6IFJlbGVhc2UgYSBzb2NrZXQgZmlsdGVyIGJ5IHJjdV9oZWFkCkBAIC00NjcsNiArNTIxLDMgQEAKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gcmV0OwogfQotCi1FWFBPUlRfU1lNQk9MKHNrX2Noa19maWx0ZXIpOwotRVhQT1JUX1NZTUJPTChza19ydW5fZmlsdGVyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Zsb3cuYyBiL25ldC9jb3JlL2Zsb3cuYwppbmRleCBhNzc1MzFjLi4xOTk5MTE3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9mbG93LmMKKysrIGIvbmV0L2NvcmUvZmxvdy5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvZmxvdy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KIAogc3RydWN0IGZsb3dfY2FjaGVfZW50cnkgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCA3YmI2YTlhLi43NTA3NWMzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMTIzLDYgKzEyMyw3IEBACiB7CiAJcmV0dXJuIChiYXNlID8gKG5ldF9yYW5kb20oKSAlIGJhc2UpICsgKGJhc2UgPj4gMSkgOiAwKTsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfcmFuZF9yZWFjaF90aW1lKTsKIAogCiBzdGF0aWMgaW50IG5laWdoX2ZvcmNlZF9nYyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKQEAgLTI0MSw2ICsyNDIsNyBAQAogCW5laWdoX2ZsdXNoX2Rldih0YmwsIGRldik7CiAJd3JpdGVfdW5sb2NrX2JoKCZ0YmwtPmxvY2spOwogfQorRVhQT1JUX1NZTUJPTChuZWlnaF9jaGFuZ2VhZGRyKTsKIAogaW50IG5laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI1Myw2ICsyNTUsNyBAQAogCXBuZWlnaF9xdWV1ZV9wdXJnZSgmdGJsLT5wcm94eV9xdWV1ZSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5laWdoX2lmZG93bik7CiAKIHN0YXRpYyBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaF9hbGxvYyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKIHsKQEAgLTM1OCwxMSArMzYxLDEyIEBACiB7CiAJc3RydWN0IG5laWdoYm91ciAqbjsKIAlpbnQga2V5X2xlbiA9IHRibC0+a2V5X2xlbjsKLQl1MzIgaGFzaF92YWwgPSB0YmwtPmhhc2gocGtleSwgZGV2KTsKKwl1MzIgaGFzaF92YWw7CiAKIAlORUlHSF9DQUNIRV9TVEFUX0lOQyh0YmwsIGxvb2t1cHMpOwogCiAJcmVhZF9sb2NrX2JoKCZ0YmwtPmxvY2spOworCWhhc2hfdmFsID0gdGJsLT5oYXNoKHBrZXksIGRldik7CiAJZm9yIChuID0gdGJsLT5oYXNoX2J1Y2tldHNbaGFzaF92YWwgJiB0YmwtPmhhc2hfbWFza107IG47IG4gPSBuLT5uZXh0KSB7CiAJCWlmIChkZXYgPT0gbi0+ZGV2ICYmICFtZW1jbXAobi0+cHJpbWFyeV9rZXksIHBrZXksIGtleV9sZW4pKSB7CiAJCQluZWlnaF9ob2xkKG4pOwpAQCAtMzczLDIwICszNzcsMjIgQEAKIAlyZWFkX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKIAlyZXR1cm4gbjsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfbG9va3VwKTsKIAogc3RydWN0IG5laWdoYm91ciAqbmVpZ2hfbG9va3VwX25vZGV2KHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICBjb25zdCB2b2lkICpwa2V5KQogewogCXN0cnVjdCBuZWlnaGJvdXIgKm47CiAJaW50IGtleV9sZW4gPSB0YmwtPmtleV9sZW47Ci0JdTMyIGhhc2hfdmFsID0gdGJsLT5oYXNoKHBrZXksIE5VTEwpOworCXUzMiBoYXNoX3ZhbDsKIAogCU5FSUdIX0NBQ0hFX1NUQVRfSU5DKHRibCwgbG9va3Vwcyk7CiAKIAlyZWFkX2xvY2tfYmgoJnRibC0+bG9jayk7CisJaGFzaF92YWwgPSB0YmwtPmhhc2gocGtleSwgTlVMTCk7CiAJZm9yIChuID0gdGJsLT5oYXNoX2J1Y2tldHNbaGFzaF92YWwgJiB0YmwtPmhhc2hfbWFza107IG47IG4gPSBuLT5uZXh0KSB7CiAJCWlmICghbWVtY21wKG4tPnByaW1hcnlfa2V5LCBwa2V5LCBrZXlfbGVuKSAmJgotCQkgICAgKG5ldCA9PSBuLT5kZXYtPm5kX25ldCkpIHsKKwkJICAgIG5ldF9lcShkZXZfbmV0KG4tPmRldiksIG5ldCkpIHsKIAkJCW5laWdoX2hvbGQobik7CiAJCQlORUlHSF9DQUNIRV9TVEFUX0lOQyh0YmwsIGhpdHMpOwogCQkJYnJlYWs7CkBAIC0zOTUsNiArNDAxLDcgQEAKIAlyZWFkX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKIAlyZXR1cm4gbjsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfbG9va3VwX25vZGV2KTsKIAogc3RydWN0IG5laWdoYm91ciAqbmVpZ2hfY3JlYXRlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBjb25zdCB2b2lkICpwa2V5LAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00NjMsNiArNDcwLDQ0IEBACiAJbmVpZ2hfcmVsZWFzZShuKTsKIAlnb3RvIG91dDsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfY3JlYXRlKTsKKworc3RhdGljIHUzMiBwbmVpZ2hfaGFzaChjb25zdCB2b2lkICpwa2V5LCBpbnQga2V5X2xlbikKK3sKKwl1MzIgaGFzaF92YWwgPSAqKHUzMiAqKShwa2V5ICsga2V5X2xlbiAtIDQpOworCWhhc2hfdmFsIF49IChoYXNoX3ZhbCA+PiAxNik7CisJaGFzaF92YWwgXj0gaGFzaF92YWwgPj4gODsKKwloYXNoX3ZhbCBePSBoYXNoX3ZhbCA+PiA0OworCWhhc2hfdmFsICY9IFBORUlHSF9IQVNITUFTSzsKKwlyZXR1cm4gaGFzaF92YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG5laWdoX2VudHJ5ICpfX3BuZWlnaF9sb29rdXBfMShzdHJ1Y3QgcG5laWdoX2VudHJ5ICpuLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgICAgIGNvbnN0IHZvaWQgKnBrZXksCisJCQkJCSAgICAgIGludCBrZXlfbGVuLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXdoaWxlIChuKSB7CisJCWlmICghbWVtY21wKG4tPmtleSwgcGtleSwga2V5X2xlbikgJiYKKwkJICAgIG5ldF9lcShwbmVpZ2hfbmV0KG4pLCBuZXQpICYmCisJCSAgICAobi0+ZGV2ID09IGRldiB8fCAhbi0+ZGV2KSkKKwkJCXJldHVybiBuOworCQluID0gbi0+bmV4dDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBwbmVpZ2hfZW50cnkgKl9fcG5laWdoX2xvb2t1cChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwKKwkJc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkICpwa2V5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBrZXlfbGVuID0gdGJsLT5rZXlfbGVuOworCXUzMiBoYXNoX3ZhbCA9IHBuZWlnaF9oYXNoKHBrZXksIGtleV9sZW4pOworCisJcmV0dXJuIF9fcG5laWdoX2xvb2t1cF8xKHRibC0+cGhhc2hfYnVja2V0c1toYXNoX3ZhbF0sCisJCQkJIG5ldCwgcGtleSwga2V5X2xlbiwgZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcG5laWdoX2xvb2t1cCk7CiAKIHN0cnVjdCBwbmVpZ2hfZW50cnkgKiBwbmVpZ2hfbG9va3VwKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLAogCQkJCSAgICBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHZvaWQgKnBrZXksCkBAIC00NzAsMjYgKzUxNSwxNCBAQAogewogCXN0cnVjdCBwbmVpZ2hfZW50cnkgKm47CiAJaW50IGtleV9sZW4gPSB0YmwtPmtleV9sZW47Ci0JdTMyIGhhc2hfdmFsID0gKih1MzIgKikocGtleSArIGtleV9sZW4gLSA0KTsKLQotCWhhc2hfdmFsIF49IChoYXNoX3ZhbCA+PiAxNik7Ci0JaGFzaF92YWwgXj0gaGFzaF92YWwgPj4gODsKLQloYXNoX3ZhbCBePSBoYXNoX3ZhbCA+PiA0OwotCWhhc2hfdmFsICY9IFBORUlHSF9IQVNITUFTSzsKKwl1MzIgaGFzaF92YWwgPSBwbmVpZ2hfaGFzaChwa2V5LCBrZXlfbGVuKTsKIAogCXJlYWRfbG9ja19iaCgmdGJsLT5sb2NrKTsKLQotCWZvciAobiA9IHRibC0+cGhhc2hfYnVja2V0c1toYXNoX3ZhbF07IG47IG4gPSBuLT5uZXh0KSB7Ci0JCWlmICghbWVtY21wKG4tPmtleSwgcGtleSwga2V5X2xlbikgJiYKLQkJICAgIChuLT5uZXQgPT0gbmV0KSAmJgotCQkgICAgKG4tPmRldiA9PSBkZXYgfHwgIW4tPmRldikpIHsKLQkJCXJlYWRfdW5sb2NrX2JoKCZ0YmwtPmxvY2spOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJbiA9IF9fcG5laWdoX2xvb2t1cF8xKHRibC0+cGhhc2hfYnVja2V0c1toYXNoX3ZhbF0sCisJCQkgICAgICBuZXQsIHBrZXksIGtleV9sZW4sIGRldik7CiAJcmVhZF91bmxvY2tfYmgoJnRibC0+bG9jayk7Ci0JbiA9IE5VTEw7Ci0JaWYgKCFjcmVhdCkKKworCWlmIChuIHx8ICFjcmVhdCkKIAkJZ290byBvdXQ7CiAKIAlBU1NFUlRfUlROTCgpOwpAQCAtNDk4LDcgKzUzMSw5IEBACiAJaWYgKCFuKQogCQlnb3RvIG91dDsKIAorI2lmZGVmIENPTkZJR19ORVRfTlMKIAluLT5uZXQgPSBob2xkX25ldChuZXQpOworI2VuZGlmCiAJbWVtY3B5KG4tPmtleSwgcGtleSwga2V5X2xlbik7CiAJbi0+ZGV2ID0gZGV2OwogCWlmIChkZXYpCkBAIC01MDcsNiArNTQyLDcgQEAKIAlpZiAodGJsLT5wY29uc3RydWN0b3IgJiYgdGJsLT5wY29uc3RydWN0b3IobikpIHsKIAkJaWYgKGRldikKIAkJCWRldl9wdXQoZGV2KTsKKwkJcmVsZWFzZV9uZXQobmV0KTsKIAkJa2ZyZWUobik7CiAJCW4gPSBOVUxMOwogCQlnb3RvIG91dDsKQEAgLTUxOSw2ICs1NTUsNyBAQAogb3V0OgogCXJldHVybiBuOwogfQorRVhQT1JUX1NZTUJPTChwbmVpZ2hfbG9va3VwKTsKIAogCiBpbnQgcG5laWdoX2RlbGV0ZShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkICpwa2V5LApAQCAtNTI2LDI1ICs1NjMsMjAgQEAKIHsKIAlzdHJ1Y3QgcG5laWdoX2VudHJ5ICpuLCAqKm5wOwogCWludCBrZXlfbGVuID0gdGJsLT5rZXlfbGVuOwotCXUzMiBoYXNoX3ZhbCA9ICoodTMyICopKHBrZXkgKyBrZXlfbGVuIC0gNCk7Ci0KLQloYXNoX3ZhbCBePSAoaGFzaF92YWwgPj4gMTYpOwotCWhhc2hfdmFsIF49IGhhc2hfdmFsID4+IDg7Ci0JaGFzaF92YWwgXj0gaGFzaF92YWwgPj4gNDsKLQloYXNoX3ZhbCAmPSBQTkVJR0hfSEFTSE1BU0s7CisJdTMyIGhhc2hfdmFsID0gcG5laWdoX2hhc2gocGtleSwga2V5X2xlbik7CiAKIAl3cml0ZV9sb2NrX2JoKCZ0YmwtPmxvY2spOwogCWZvciAobnAgPSAmdGJsLT5waGFzaF9idWNrZXRzW2hhc2hfdmFsXTsgKG4gPSAqbnApICE9IE5VTEw7CiAJICAgICBucCA9ICZuLT5uZXh0KSB7CiAJCWlmICghbWVtY21wKG4tPmtleSwgcGtleSwga2V5X2xlbikgJiYgbi0+ZGV2ID09IGRldiAmJgotCQkgICAgKG4tPm5ldCA9PSBuZXQpKSB7CisJCSAgICBuZXRfZXEocG5laWdoX25ldChuKSwgbmV0KSkgewogCQkJKm5wID0gbi0+bmV4dDsKIAkJCXdyaXRlX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKIAkJCWlmICh0YmwtPnBkZXN0cnVjdG9yKQogCQkJCXRibC0+cGRlc3RydWN0b3Iobik7CiAJCQlpZiAobi0+ZGV2KQogCQkJCWRldl9wdXQobi0+ZGV2KTsKLQkJCXJlbGVhc2VfbmV0KG4tPm5ldCk7CisJCQlyZWxlYXNlX25ldChwbmVpZ2hfbmV0KG4pKTsKIAkJCWtmcmVlKG4pOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTU2Nyw3ICs1OTksNyBAQAogCQkJCQl0YmwtPnBkZXN0cnVjdG9yKG4pOwogCQkJCWlmIChuLT5kZXYpCiAJCQkJCWRldl9wdXQobi0+ZGV2KTsKLQkJCQlyZWxlYXNlX25ldChuLT5uZXQpOworCQkJCXJlbGVhc2VfbmV0KHBuZWlnaF9uZXQobikpOwogCQkJCWtmcmVlKG4pOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtNjI2LDYgKzY1OCw3IEBACiAJYXRvbWljX2RlYygmbmVpZ2gtPnRibC0+ZW50cmllcyk7CiAJa21lbV9jYWNoZV9mcmVlKG5laWdoLT50YmwtPmttZW1fY2FjaGVwLCBuZWlnaCk7CiB9CitFWFBPUlRfU1lNQk9MKG5laWdoX2Rlc3Ryb3kpOwogCiAvKiBOZWlnaGJvdXIgc3RhdGUgaXMgc3VzcGljaW91czsKICAgIGRpc2FibGUgZmFzdCBwYXRoLgpAQCAtODM0LDEyICs4NjcsMTggQEAKIAl9CiAJaWYgKG5laWdoLT5udWRfc3RhdGUgJiAoTlVEX0lOQ09NUExFVEUgfCBOVURfUFJPQkUpKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlaygmbmVpZ2gtPmFycF9xdWV1ZSk7Ci0KKwkJLyoga2VlcCBza2IgYWxpdmUgZXZlbiBpZiBhcnBfcXVldWUgb3ZlcmZsb3dzICovCisJCWlmIChza2IpCisJCQlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQl3cml0ZV91bmxvY2soJm5laWdoLT5sb2NrKTsKIAkJbmVpZ2gtPm9wcy0+c29saWNpdChuZWlnaCwgc2tiKTsKIAkJYXRvbWljX2luYygmbmVpZ2gtPnByb2Jlcyk7Ci0JfQorCQlpZiAoc2tiKQorCQkJa2ZyZWVfc2tiKHNrYik7CisJfSBlbHNlIHsKIG91dDoKLQl3cml0ZV91bmxvY2soJm5laWdoLT5sb2NrKTsKKwkJd3JpdGVfdW5sb2NrKCZuZWlnaC0+bG9jayk7CisJfQogCiAJaWYgKG5vdGlmeSkKIAkJbmVpZ2hfdXBkYXRlX25vdGlmeShuZWlnaCk7CkBAIC05MDAsNiArOTM5LDcgQEAKIAl3cml0ZV91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MKF9fbmVpZ2hfZXZlbnRfc2VuZCk7CiAKIHN0YXRpYyB2b2lkIG5laWdoX3VwZGF0ZV9oaHMoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCiB7CkBAIC0xMDcyLDYgKzExMTIsNyBAQAogCiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfdXBkYXRlKTsKIAogc3RydWN0IG5laWdoYm91ciAqbmVpZ2hfZXZlbnRfbnMoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsCiAJCQkJIHU4ICpsbGFkZHIsIHZvaWQgKnNhZGRyLApAQCAtMTA4NCw2ICsxMTI1LDcgQEAKIAkJCSAgICAgTkVJR0hfVVBEQVRFX0ZfT1ZFUlJJREUpOwogCXJldHVybiBuZWlnaDsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfZXZlbnRfbnMpOwogCiBzdGF0aWMgdm9pZCBuZWlnaF9oaF9pbml0KHN0cnVjdCBuZWlnaGJvdXIgKm4sIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCSAgX19iZTE2IHByb3RvY29sKQpAQCAtMTEzOCw2ICsxMTgwLDcgQEAKIAogCXJldHVybiBkZXZfcXVldWVfeG1pdChza2IpOwogfQorRVhQT1JUX1NZTUJPTChuZWlnaF9jb21wYXRfb3V0cHV0KTsKIAogLyogU2xvdyBhbmQgY2FyZWZ1bC4gKi8KIApAQCAtMTE4Myw2ICsxMjI2LDcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfcmVzb2x2ZV9vdXRwdXQpOwogCiAvKiBBcyBmYXN0IGFzIHBvc3NpYmxlIHdpdGhvdXQgaGggY2FjaGUgKi8KIApAQCAtMTIwNyw2ICsxMjUxLDcgQEAKIAl9CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfY29ubmVjdGVkX291dHB1dCk7CiAKIHN0YXRpYyB2b2lkIG5laWdoX3Byb3h5X3Byb2Nlc3ModW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0xMjY4LDYgKzEzMTMsNyBAQAogCW1vZF90aW1lcigmdGJsLT5wcm94eV90aW1lciwgc2NoZWRfbmV4dCk7CiAJc3Bpbl91bmxvY2soJnRibC0+cHJveHlfcXVldWUubG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hfcGFybXMgKmxvb2t1cF9uZWlnaF9wYXJhbXMoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsCiAJCQkJCQkgICAgICBzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4KQpAQCAtMTI3NSw5ICsxMzIxLDcgQEAKIAlzdHJ1Y3QgbmVpZ2hfcGFybXMgKnA7CiAKIAlmb3IgKHAgPSAmdGJsLT5wYXJtczsgcDsgcCA9IHAtPm5leHQpIHsKLQkJaWYgKHAtPm5ldCAhPSBuZXQpCi0JCQljb250aW51ZTsKLQkJaWYgKChwLT5kZXYgJiYgcC0+ZGV2LT5pZmluZGV4ID09IGlmaW5kZXgpIHx8CisJCWlmICgocC0+ZGV2ICYmIHAtPmRldi0+aWZpbmRleCA9PSBpZmluZGV4ICYmIG5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpIHx8CiAJCSAgICAoIXAtPmRldiAmJiAhaWZpbmRleCkpCiAJCQlyZXR1cm4gcDsKIAl9CkBAIC0xMjkxLDcgKzEzMzUsNyBAQAogCXN0cnVjdCBuZWlnaF9wYXJtcyAqcCwgKnJlZjsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKLQluZXQgPSBkZXYtPm5kX25ldDsKKwluZXQgPSBkZXZfbmV0KGRldik7CiAJcmVmID0gbG9va3VwX25laWdoX3BhcmFtcyh0YmwsIG5ldCwgMCk7CiAJaWYgKCFyZWYpCiAJCXJldHVybiBOVUxMOwpAQCAtMTMxMSw3ICsxMzU1LDkgQEAKIAogCQlkZXZfaG9sZChkZXYpOwogCQlwLT5kZXYgPSBkZXY7CisjaWZkZWYgQ09ORklHX05FVF9OUwogCQlwLT5uZXQgPSBob2xkX25ldChuZXQpOworI2VuZGlmCiAJCXAtPnN5c2N0bF90YWJsZSA9IE5VTEw7CiAJCXdyaXRlX2xvY2tfYmgoJnRibC0+bG9jayk7CiAJCXAtPm5leHQJCT0gdGJsLT5wYXJtcy5uZXh0OwpAQCAtMTMyMCw2ICsxMzY2LDcgQEAKIAl9CiAJcmV0dXJuIHA7CiB9CitFWFBPUlRfU1lNQk9MKG5laWdoX3Bhcm1zX2FsbG9jKTsKIAogc3RhdGljIHZvaWQgbmVpZ2hfcmN1X2ZyZWVfcGFybXMoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewpAQCAtMTM1MCwxMCArMTM5NywxMSBAQAogCXdyaXRlX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKIAlORUlHSF9QUklOVEsxKCJuZWlnaF9wYXJtc19yZWxlYXNlOiBub3QgZm91bmRcbiIpOwogfQorRVhQT1JUX1NZTUJPTChuZWlnaF9wYXJtc19yZWxlYXNlKTsKIAogc3RhdGljIHZvaWQgbmVpZ2hfcGFybXNfZGVzdHJveShzdHJ1Y3QgbmVpZ2hfcGFybXMgKnBhcm1zKQogewotCXJlbGVhc2VfbmV0KHBhcm1zLT5uZXQpOworCXJlbGVhc2VfbmV0KG5laWdoX3Bhcm1zX25ldChwYXJtcykpOwogCWtmcmVlKHBhcm1zKTsKIH0KIApAQCAtMTM2NCw3ICsxNDEyLDkgQEAKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJdW5zaWduZWQgbG9uZyBwaHNpemU7CiAKKyNpZmRlZiBDT05GSUdfTkVUX05TCiAJdGJsLT5wYXJtcy5uZXQgPSAmaW5pdF9uZXQ7CisjZW5kaWYKIAlhdG9taWNfc2V0KCZ0YmwtPnBhcm1zLnJlZmNudCwgMSk7CiAJSU5JVF9SQ1VfSEVBRCgmdGJsLT5wYXJtcy5yY3VfaGVhZCk7CiAJdGJsLT5wYXJtcy5yZWFjaGFibGVfdGltZSA9CkBAIC0xMzgwLDEwICsxNDMwLDEwIEBACiAJCXBhbmljKCJjYW5ub3QgY3JlYXRlIG5laWdoYm91ciBjYWNoZSBzdGF0aXN0aWNzIik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXRibC0+cGRlID0gY3JlYXRlX3Byb2NfZW50cnkodGJsLT5pZCwgMCwgaW5pdF9uZXQucHJvY19uZXRfc3RhdCk7CisJdGJsLT5wZGUgPSBwcm9jX2NyZWF0ZSh0YmwtPmlkLCAwLCBpbml0X25ldC5wcm9jX25ldF9zdGF0LAorCQkJICAgICAgICZuZWlnaF9zdGF0X3NlcV9mb3BzKTsKIAlpZiAoIXRibC0+cGRlKQogCQlwYW5pYygiY2Fubm90IGNyZWF0ZSBuZWlnaGJvdXIgcHJvYyBkaXIgZW50cnkiKTsKLQl0YmwtPnBkZS0+cHJvY19mb3BzID0gJm5laWdoX3N0YXRfc2VxX2ZvcHM7CiAJdGJsLT5wZGUtPmRhdGEgPSB0Ymw7CiAjZW5kaWYKIApAQCAtMTQxMCw2ICsxNDYwLDcgQEAKIAl0YmwtPmxhc3RfZmx1c2ggPSBub3c7CiAJdGJsLT5sYXN0X3JhbmQJPSBub3cgKyB0YmwtPnBhcm1zLnJlYWNoYWJsZV90aW1lICogMjA7CiB9CitFWFBPUlRfU1lNQk9MKG5laWdoX3RhYmxlX2luaXRfbm9fbmV0bGluayk7CiAKIHZvaWQgbmVpZ2hfdGFibGVfaW5pdChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKIHsKQEAgLTE0MzEsNiArMTQ4Miw3IEBACiAJCWR1bXBfc3RhY2soKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKG5laWdoX3RhYmxlX2luaXQpOwogCiBpbnQgbmVpZ2hfdGFibGVfY2xlYXIoc3RydWN0IG5laWdoX3RhYmxlICp0YmwpCiB7CkBAIC0xNDY4LDEwICsxNTIwLDExIEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfdGFibGVfY2xlYXIpOwogCiBzdGF0aWMgaW50IG5laWdoX2RlbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmRtc2cgKm5kbTsKIAlzdHJ1Y3QgbmxhdHRyICpkc3RfYXR0cjsKIAlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDsKQEAgLTE1MzcsNyArMTU5MCw3IEBACiAKIHN0YXRpYyBpbnQgbmVpZ2hfYWRkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBuZG1zZyAqbmRtOwogCXN0cnVjdCBubGF0dHIgKnRiW05EQV9NQVgrMV07CiAJc3RydWN0IG5laWdoX3RhYmxlICp0Ymw7CkBAIC0xODA1LDcgKzE4NTgsNyBAQAogCiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDsKIAlzdHJ1Y3QgbmR0bXNnICpuZHRtc2c7CiAJc3RydWN0IG5sYXR0ciAqdGJbTkRUQV9NQVgrMV07CkBAIC0xOTMwLDcgKzE5ODMsNyBAQAogCiBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwOwogCWludCB0Ymxfc2tpcCA9IGNiLT5hcmdzWzBdOwogCWludCBuZWlnaF9za2lwID0gY2ItPmFyZ3NbMV07CkBAIC0xOTUxLDcgKzIwMDQsNyBAQAogCQkJYnJlYWs7CiAKIAkJZm9yIChuaWR4ID0gMCwgcCA9IHRibC0+cGFybXMubmV4dDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJCWlmIChuZXQgIT0gcC0+bmV0KQorCQkJaWYgKCFuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAobmlkeCsrIDwgbmVpZ2hfc2tpcCkKQEAgLTIwMzAsNyArMjA4Myw3IEBACiBzdGF0aWMgaW50IG5laWdoX2R1bXBfdGFibGUoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKiBuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqIG5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBuZWlnaGJvdXIgKm47CiAJaW50IHJjLCBoLCBzX2ggPSBjYi0+YXJnc1sxXTsKIAlpbnQgaWR4LCBzX2lkeCA9IGlkeCA9IGNiLT5hcmdzWzJdOwpAQCAtMjA0Myw3ICsyMDk2LDcgQEAKIAkJCXNfaWR4ID0gMDsKIAkJZm9yIChuID0gdGJsLT5oYXNoX2J1Y2tldHNbaF0sIGlkeCA9IDA7IG47IG4gPSBuLT5uZXh0KSB7CiAJCQlpbnQgbGlkeDsKLQkJCWlmIChuLT5kZXYtPm5kX25ldCAhPSBuZXQpCisJCQlpZiAoZGV2X25ldChuLT5kZXYpICE9IG5ldCkKIAkJCQljb250aW51ZTsKIAkJCWxpZHggPSBpZHgrKzsKIAkJCWlmIChsaWR4IDwgc19pZHgpCkBAIC0yMTM4LDcgKzIxOTEsNyBAQAogc3RhdGljIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3QgbmVpZ2hfc2VxX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzdGF0ZS0+cC5uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSBzdGF0ZS0+dGJsOwogCXN0cnVjdCBuZWlnaGJvdXIgKm4gPSBOVUxMOwogCWludCBidWNrZXQgPSBzdGF0ZS0+YnVja2V0OwpAQCAtMjE0OCw3ICsyMjAxLDcgQEAKIAkJbiA9IHRibC0+aGFzaF9idWNrZXRzW2J1Y2tldF07CiAKIAkJd2hpbGUgKG4pIHsKLQkJCWlmIChuLT5kZXYtPm5kX25ldCAhPSBuZXQpCisJCQlpZiAoIW5ldF9lcShkZXZfbmV0KG4tPmRldiksIG5ldCkpCiAJCQkJZ290byBuZXh0OwogCQkJaWYgKHN0YXRlLT5uZWlnaF9zdWJfaXRlcikgewogCQkJCWxvZmZfdCBmYWtlcCA9IDA7CkBAIC0yMTc5LDcgKzIyMzIsNyBAQAogCQkJCQlsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgbmVpZ2hfc2VxX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzdGF0ZS0+cC5uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSBzdGF0ZS0+dGJsOwogCiAJaWYgKHN0YXRlLT5uZWlnaF9zdWJfaXRlcikgewpAQCAtMjE5MSw3ICsyMjQ0LDcgQEAKIAogCXdoaWxlICgxKSB7CiAJCXdoaWxlIChuKSB7Ci0JCQlpZiAobi0+ZGV2LT5uZF9uZXQgIT0gbmV0KQorCQkJaWYgKCFuZXRfZXEoZGV2X25ldChuLT5kZXYpLCBuZXQpKQogCQkJCWdvdG8gbmV4dDsKIAkJCWlmIChzdGF0ZS0+bmVpZ2hfc3ViX2l0ZXIpIHsKIAkJCQl2b2lkICp2ID0gc3RhdGUtPm5laWdoX3N1Yl9pdGVyKHN0YXRlLCBuLCBwb3MpOwpAQCAtMjIzOSw3ICsyMjkyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcG5laWdoX2VudHJ5ICpwbmVpZ2hfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCBuZWlnaF9zZXFfc3RhdGUgKnN0YXRlID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBuZXQgKiBuZXQgPSBzdGF0ZS0+cC5uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSBzdGF0ZS0+dGJsOwogCXN0cnVjdCBwbmVpZ2hfZW50cnkgKnBuID0gTlVMTDsKIAlpbnQgYnVja2V0ID0gc3RhdGUtPmJ1Y2tldDsKQEAgLTIyNDcsNyArMjMwMCw3IEBACiAJc3RhdGUtPmZsYWdzIHw9IE5FSUdIX1NFUV9JU19QTkVJR0g7CiAJZm9yIChidWNrZXQgPSAwOyBidWNrZXQgPD0gUE5FSUdIX0hBU0hNQVNLOyBidWNrZXQrKykgewogCQlwbiA9IHRibC0+cGhhc2hfYnVja2V0c1tidWNrZXRdOwotCQl3aGlsZSAocG4gJiYgKHBuLT5uZXQgIT0gbmV0KSkKKwkJd2hpbGUgKHBuICYmICFuZXRfZXEocG5laWdoX25ldChwbiksIG5ldCkpCiAJCQlwbiA9IHBuLT5uZXh0OwogCQlpZiAocG4pCiAJCQlicmVhazsKQEAgLTIyNjIsNyArMjMxNSw3IEBACiAJCQkJCSAgICBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgbmVpZ2hfc2VxX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmV0ICogbmV0ID0gc3RhdGUtPnAubmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gc3RhdGUtPnRibDsKIAogCXBuID0gcG4tPm5leHQ7CkBAIC0yMjcwLDcgKzIzMjMsNyBAQAogCQlpZiAoKytzdGF0ZS0+YnVja2V0ID4gUE5FSUdIX0hBU0hNQVNLKQogCQkJYnJlYWs7CiAJCXBuID0gdGJsLT5waGFzaF9idWNrZXRzW3N0YXRlLT5idWNrZXRdOwotCQl3aGlsZSAocG4gJiYgKHBuLT5uZXQgIT0gbmV0KSkKKwkJd2hpbGUgKHBuICYmICFuZXRfZXEocG5laWdoX25ldChwbiksIG5ldCkpCiAJCQlwbiA9IHBuLT5uZXh0OwogCQlpZiAocG4pCiAJCQlicmVhazsKQEAgLTI0NzUsNyArMjUyOCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmVpZ2hfbm90aWZ5KHN0cnVjdCBuZWlnaGJvdXIgKm4sIGludCB0eXBlLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gbi0+ZGV2LT5uZF9uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChuLT5kZXYpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCkBAIC0yNTAxLDYgKzI1NTQsNyBAQAogewogCV9fbmVpZ2hfbm90aWZ5KG4sIFJUTV9HRVRORUlHSCwgTkxNX0ZfUkVRVUVTVCk7CiB9CitFWFBPUlRfU1lNQk9MKG5laWdoX2FwcF9ucyk7CiAjZW5kaWYgLyogQ09ORklHX0FSUEQgKi8KIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTI3MzIsNyArMjc4Niw4IEBACiAJbmVpZ2hfcGF0aFtORUlHSF9DVExfUEFUSF9QUk9UT10ucHJvY25hbWUgPSBwX25hbWU7CiAJbmVpZ2hfcGF0aFtORUlHSF9DVExfUEFUSF9QUk9UT10uY3RsX25hbWUgPSBwX2lkOwogCi0JdC0+c3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhuZWlnaF9wYXRoLCB0LT5uZWlnaF92YXJzKTsKKwl0LT5zeXNjdGxfaGVhZGVyID0KKwkJcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZWlnaF9wYXJtc19uZXQocCksIG5laWdoX3BhdGgsIHQtPm5laWdoX3ZhcnMpOwogCWlmICghdC0+c3lzY3RsX2hlYWRlcikKIAkJZ290byBmcmVlX3Byb2NuYW1lOwogCkBAIC0yNzQ2LDYgKzI4MDEsNyBAQAogZXJyOgogCXJldHVybiAtRU5PQlVGUzsKIH0KK0VYUE9SVF9TWU1CT0wobmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKTsKIAogdm9pZCBuZWlnaF9zeXNjdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmVpZ2hfcGFybXMgKnApCiB7CkBAIC0yNzU3LDYgKzI4MTMsNyBAQAogCQlrZnJlZSh0KTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKG5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKTsKIAogI2VuZGlmCS8qIENPTkZJR19TWVNDVEwgKi8KIApAQCAtMjc3NCwzMSArMjgzMSwzIEBACiAKIHN1YnN5c19pbml0Y2FsbChuZWlnaF9pbml0KTsKIAotRVhQT1JUX1NZTUJPTChfX25laWdoX2V2ZW50X3NlbmQpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9jaGFuZ2VhZGRyKTsKLUVYUE9SVF9TWU1CT0wobmVpZ2hfY29tcGF0X291dHB1dCk7Ci1FWFBPUlRfU1lNQk9MKG5laWdoX2Nvbm5lY3RlZF9vdXRwdXQpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9jcmVhdGUpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9kZXN0cm95KTsKLUVYUE9SVF9TWU1CT0wobmVpZ2hfZXZlbnRfbnMpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9pZmRvd24pOwotRVhQT1JUX1NZTUJPTChuZWlnaF9sb29rdXApOwotRVhQT1JUX1NZTUJPTChuZWlnaF9sb29rdXBfbm9kZXYpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9wYXJtc19hbGxvYyk7Ci1FWFBPUlRfU1lNQk9MKG5laWdoX3Bhcm1zX3JlbGVhc2UpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9yYW5kX3JlYWNoX3RpbWUpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9yZXNvbHZlX291dHB1dCk7Ci1FWFBPUlRfU1lNQk9MKG5laWdoX3RhYmxlX2NsZWFyKTsKLUVYUE9SVF9TWU1CT0wobmVpZ2hfdGFibGVfaW5pdCk7Ci1FWFBPUlRfU1lNQk9MKG5laWdoX3RhYmxlX2luaXRfbm9fbmV0bGluayk7Ci1FWFBPUlRfU1lNQk9MKG5laWdoX3VwZGF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHBuZWlnaF9lbnF1ZXVlKTsKLUVYUE9SVF9TWU1CT0wocG5laWdoX2xvb2t1cCk7Ci0KLSNpZmRlZiBDT05GSUdfQVJQRAotRVhQT1JUX1NZTUJPTChuZWlnaF9hcHBfbnMpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotRVhQT1JUX1NZTUJPTChuZWlnaF9zeXNjdGxfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChuZWlnaF9zeXNjdGxfdW5yZWdpc3Rlcik7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCA3YjY2MDgzLi43MmI0YzE4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC01LDcgKzUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogCiAvKgogICoJT3VyIG5ldHdvcmsgbmFtZXNwYWNlIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IgbGlzdHMKQEAgLTIwLDYgKzIyLDggQEAKIHN0cnVjdCBuZXQgaW5pdF9uZXQ7CiBFWFBPUlRfU1lNQk9MKGluaXRfbmV0KTsKIAorI2RlZmluZSBJTklUSUFMX05FVF9HRU5fUFRSUwkxMyAvKiArMSBmb3IgbGVuICsyIGZvciByY3VfaGVhZCAqLworCiAvKgogICogc2V0dXBfbmV0IHJ1bnMgdGhlIGluaXRpYWxpemVycyBmb3IgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIG9iamVjdC4KICAqLwpAQCAtMjgsOSArMzIsMjIgQEAKIAkvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG5ldF9tdXRleCBoZWxkICovCiAJc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zICpvcHM7CiAJaW50IGVycm9yOworCXN0cnVjdCBuZXRfZ2VuZXJpYyAqbmc7CiAKIAlhdG9taWNfc2V0KCZuZXQtPmNvdW50LCAxKTsKKyNpZmRlZiBORVROU19SRUZDTlRfREVCVUcKIAlhdG9taWNfc2V0KCZuZXQtPnVzZV9jb3VudCwgMCk7CisjZW5kaWYKKworCWVycm9yID0gLUVOT01FTTsKKwluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfZ2VuZXJpYykgKworCQkJSU5JVElBTF9ORVRfR0VOX1BUUlMgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5nID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJbmctPmxlbiA9IElOSVRJQUxfTkVUX0dFTl9QVFJTOworCUlOSVRfUkNVX0hFQUQoJm5nLT5yY3UpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZXQtPmdlbiwgbmcpOwogCiAJZXJyb3IgPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCAmcGVybmV0X2xpc3QsIGxpc3QpIHsKQEAgLTUzLDYgKzcwLDcgQEAKIAl9CiAKIAlyY3VfYmFycmllcigpOworCWtmcmVlKG5nKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtNzAsMTEgKzg4LDEzIEBACiAJaWYgKCFuZXQpCiAJCXJldHVybjsKIAorI2lmZGVmIE5FVE5TX1JFRkNOVF9ERUJVRwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmbmV0LT51c2VfY291bnQpICE9IDApKSB7CiAJCXByaW50ayhLRVJOX0VNRVJHICJuZXR3b3JrIG5hbWVzcGFjZSBub3QgZnJlZSEgVXNhZ2U6ICVkXG4iLAogCQkJYXRvbWljX3JlYWQoJm5ldC0+dXNlX2NvdW50KSk7CiAJCXJldHVybjsKIAl9CisjZW5kaWYKIAogCWttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpOwogfQpAQCAtMjUzLDYgKzI3Myw4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIERFRklORV9JREEobmV0X2dlbmVyaWNfaWRzKTsKKwogLyoqCiAgKiAgICAgIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMgLSByZWdpc3RlciBhIG5ldHdvcmsgbmFtZXNwYWNlIHN1YnN5c3RlbQogICoJQG9wczogIHBlcm5ldCBvcGVyYXRpb25zIHN0cnVjdHVyZSBmb3IgdGhlIHN1YnN5c3RlbQpAQCAtMzMwLDYgKzM1MiwzMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfcGVybmV0X2RldmljZSk7CiAKK2ludCByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShpbnQgKmlkLCBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgKm9wcykKK3sKKwlpbnQgZXJyb3I7CisJbXV0ZXhfbG9jaygmbmV0X211dGV4KTsKK2FnYWluOgorCWVycm9yID0gaWRhX2dldF9uZXdfYWJvdmUoJm5ldF9nZW5lcmljX2lkcywgMSwgaWQpOworCWlmIChlcnJvcikgeworCQlpZiAoZXJyb3IgPT0gLUVBR0FJTikgeworCQkJaWRhX3ByZV9nZXQoJm5ldF9nZW5lcmljX2lkcywgR0ZQX0tFUk5FTCk7CisJCQlnb3RvIGFnYWluOworCQl9CisJCWdvdG8gb3V0OworCX0KKwllcnJvciA9IHJlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKCZwZXJuZXRfbGlzdCwgb3BzKTsKKwlpZiAoZXJyb3IpCisJCWlkYV9yZW1vdmUoJm5ldF9nZW5lcmljX2lkcywgKmlkKTsKKwllbHNlIGlmIChmaXJzdF9kZXZpY2UgPT0gJnBlcm5ldF9saXN0KQorCQlmaXJzdF9kZXZpY2UgPSAmb3BzLT5saXN0Oworb3V0OgorCW11dGV4X3VubG9jaygmbmV0X211dGV4KTsKKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSk7CisKIC8qKgogICogICAgICB1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UgLSB1bnJlZ2lzdGVyIGEgbmV0d29yayBuYW1lc3BhY2UgbmV0ZGV2aWNlCiAgKglAb3BzOiBwZXJuZXQgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgdG8gbWFuaXB1bGF0ZQpAQCAtMzQ4LDMgKzM5NCw2MSBAQAogCW11dGV4X3VubG9jaygmbmV0X211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGVybmV0X2RldmljZSk7CisKK3ZvaWQgdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShpbnQgaWQsIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyAqb3BzKQoreworCW11dGV4X2xvY2soJm5ldF9tdXRleCk7CisJaWYgKCZvcHMtPmxpc3QgPT0gZmlyc3RfZGV2aWNlKQorCQlmaXJzdF9kZXZpY2UgPSBmaXJzdF9kZXZpY2UtPm5leHQ7CisJdW5yZWdpc3Rlcl9wZXJuZXRfb3BlcmF0aW9ucyhvcHMpOworCWlkYV9yZW1vdmUoJm5ldF9nZW5lcmljX2lkcywgaWQpOworCW11dGV4X3VubG9jaygmbmV0X211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UpOworCitzdGF0aWMgdm9pZCBuZXRfZ2VuZXJpY19yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQoreworCXN0cnVjdCBuZXRfZ2VuZXJpYyAqbmc7CisKKwluZyA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBuZXRfZ2VuZXJpYywgcmN1KTsKKwlrZnJlZShuZyk7Cit9CisKK2ludCBuZXRfYXNzaWduX2dlbmVyaWMoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldF9nZW5lcmljICpuZywgKm9sZF9uZzsKKworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZuZXRfbXV0ZXgpKTsKKwlCVUdfT04oaWQgPT0gMCk7CisKKwluZyA9IG9sZF9uZyA9IG5ldC0+Z2VuOworCWlmIChvbGRfbmctPmxlbiA+PSBpZCkKKwkJZ290byBhc3NpZ247CisKKwluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfZ2VuZXJpYykgKworCQkJaWQgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5nID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBTb21lIHN5bmNocm9uaXNhdGlvbiBub3RlczoKKwkgKgorCSAqIFRoZSBuZXRfZ2VuZXJpYyBleHBsb3JlcyB0aGUgbmV0LT5nZW4gYXJyYXkgaW5zaWRlIHJjdQorCSAqIHJlYWQgc2VjdGlvbi4gQmVzaWRlcyBvbmNlIHNldCB0aGUgbmV0LT5nZW4tPnB0clt4XQorCSAqIHBvaW50ZXIgbmV2ZXIgY2hhbmdlcyAoc2VlIHJ1bGVzIGluIG5ldG5zL2dlbmVyaWMuaCkuCisJICoKKwkgKiBUaGF0IHNhaWQsIHdlIHNpbXBseSBkdXBsaWNhdGUgdGhpcyBhcnJheSBhbmQgc2NoZWR1bGUKKwkgKiB0aGUgb2xkIGNvcHkgZm9yIGtmcmVlIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgorCSAqLworCisJbmctPmxlbiA9IGlkOworCUlOSVRfUkNVX0hFQUQoJm5nLT5yY3UpOworCW1lbWNweSgmbmctPnB0ciwgJm9sZF9uZy0+cHRyLCBvbGRfbmctPmxlbik7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIobmV0LT5nZW4sIG5nKTsKKwljYWxsX3JjdSgmb2xkX25nLT5yY3UsIG5ldF9nZW5lcmljX3JlbGVhc2UpOworYXNzaWduOgorCW5nLT5wdHJbaWQgLSAxXSA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRfYXNzaWduX2dlbmVyaWMpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDZmYWExMjguLmIwNGQ2NDMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTM5LDYgKzM5LDggQEAKIHN0YXRpYyBhdG9taWNfdCB0cmFwcGVkOwogCiAjZGVmaW5lIFVTRUNfUEVSX1BPTEwJNTAKKyNkZWZpbmUgTkVUUE9MTF9SWF9FTkFCTEVEICAxCisjZGVmaW5lIE5FVFBPTExfUlhfRFJPUCAgICAgMgogCiAjZGVmaW5lIE1BWF9TS0JfU0laRSBcCiAJCShNQVhfVURQX0NIVU5LICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgXApAQCAtMTI2LDExICsxMjgsMTMgQEAKIAlpZiAoIXRlc3RfYml0KE5BUElfU1RBVEVfU0NIRUQsICZuYXBpLT5zdGF0ZSkpCiAJCXJldHVybiBidWRnZXQ7CiAKKwlucGluZm8tPnJ4X2ZsYWdzIHw9IE5FVFBPTExfUlhfRFJPUDsKIAlhdG9taWNfaW5jKCZ0cmFwcGVkKTsKIAogCXdvcmsgPSBuYXBpLT5wb2xsKG5hcGksIGJ1ZGdldCk7CiAKIAlhdG9taWNfZGVjKCZ0cmFwcGVkKTsKKwlucGluZm8tPnJ4X2ZsYWdzICY9IH5ORVRQT0xMX1JYX0RST1A7CiAKIAlyZXR1cm4gYnVkZ2V0IC0gd29yazsKIH0KQEAgLTIxMSwxMCArMjE1LDEyIEBACiAJCXdoaWxlIChjbGlzdCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY2xpc3Q7CiAJCQljbGlzdCA9IGNsaXN0LT5uZXh0OwotCQkJaWYgKHNrYi0+ZGVzdHJ1Y3RvcikKKwkJCWlmIChza2ItPmRlc3RydWN0b3IpIHsKKwkJCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOyAvKiBwdXQgdGhpcyBvbmUgYmFjayAqLwotCQkJZWxzZQorCQkJfSBlbHNlIHsKIAkJCQlfX2tmcmVlX3NrYihza2IpOworCQkJfQogCQl9CiAJfQogCkBAIC0zODQsOSArMzkwLDcgQEAKIAlpZiAoc2tiLT5kZXYtPmZsYWdzICYgSUZGX05PQVJQKQogCQlyZXR1cm47CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAoc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsKLQkJCQkgKDIgKiBza2ItPmRldi0+YWRkcl9sZW4pICsKLQkJCQkgKDIgKiBzaXplb2YodTMyKSkpKSkKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihza2ItPmRldikpKQogCQlyZXR1cm47CiAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKQEAgLTQxNCw3ICs0MTgsNyBAQAogCSAgICBpcHY0X2lzX2xvb3BiYWNrKHRpcCkgfHwgaXB2NF9pc19tdWx0aWNhc3QodGlwKSkKIAkJcmV0dXJuOwogCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXJwaGRyKSArIDIgKiAoc2tiLT5kZXYtPmFkZHJfbGVuICsgNCk7CisJc2l6ZSA9IGFycF9oZHJfbGVuKHNrYi0+ZGV2KTsKIAlzZW5kX3NrYiA9IGZpbmRfc2tiKG5wLCBzaXplICsgTExfUkVTRVJWRURfU1BBQ0UobnAtPmRldiksCiAJCQkgICAgTExfUkVTRVJWRURfU1BBQ0UobnAtPmRldikpOwogCkBAIC00NzIsNyArNDc2LDcgQEAKIAlpZiAoc2tiLT5kZXYtPnR5cGUgIT0gQVJQSFJEX0VUSEVSKQogCQlnb3RvIG91dDsKIAotCS8qIGlmIHJlY2VpdmUgQVJQIGR1cmluZyBtaWRkbGUgb2YgTkFQSSBwb2xsLCB0aGVuIHF1ZXVlICovCisJLyogY2hlY2sgaWYgbmV0cG9sbCBjbGllbnRzIG5lZWQgQVJQICovCiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSAmJgogCSAgICBhdG9taWNfcmVhZCgmdHJhcHBlZCkpIHsKIAkJc2tiX3F1ZXVlX3RhaWwoJm5waS0+YXJwX3R4LCBza2IpOwpAQCAtNTM0LDkgKzUzOCw2IEBACiAJcmV0dXJuIDE7CiAKIG91dDoKLQkvKiBJZiBwYWNrZXQgcmVjZWl2ZWQgd2hpbGUgYWxyZWFkeSBpbiBwb2xsIHRoZW4ganVzdAotCSAqIHNpbGVudGx5IGRyb3AuCi0JICovCiAJaWYgKGF0b21pY19yZWFkKCZ0cmFwcGVkKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDE7CkBAIC02NzUsNiArNjc2LDcgQEAKIAkJCWdvdG8gcmVsZWFzZTsKIAkJfQogCisJCW5waW5mby0+cnhfZmxhZ3MgPSAwOwogCQlucGluZm8tPnJ4X25wID0gTlVMTDsKIAogCQlzcGluX2xvY2tfaW5pdCgmbnBpbmZvLT5yeF9sb2NrKTsKQEAgLTc1Niw2ICs3NTgsNyBAQAogCiAJaWYgKG5wLT5yeF9ob29rKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKKwkJbnBpbmZvLT5yeF9mbGFncyB8PSBORVRQT0xMX1JYX0VOQUJMRUQ7CiAJCW5waW5mby0+cnhfbnAgPSBucDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CiAJfQpAQCAtNzk3LDYgKzgwMCw3IEBACiAJCQlpZiAobnBpbmZvLT5yeF9ucCA9PSBucCkgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKIAkJCQlucGluZm8tPnJ4X25wID0gTlVMTDsKKwkJCQlucGluZm8tPnJ4X2ZsYWdzICY9IH5ORVRQT0xMX1JYX0VOQUJMRUQ7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggYmZjZGZhZS4uYTgwM2I0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTE4NzQsNyArMTg3NCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCS8qIEl0IGlzIE9LIHRoYXQgd2UgZG8gbm90IGhvbGQgdGhlIGdyb3VwIGxvY2sgcmlnaHQgbm93LApAQCAtMzU3MCwxNCArMzU3MCwxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0MTsKIAotCXBrdF9kZXYtPmVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoaWZuYW1lLCAwNjAwLCBwZ19wcm9jX2Rpcik7CisJcGt0X2Rldi0+ZW50cnkgPSBwcm9jX2NyZWF0ZShpZm5hbWUsIDA2MDAsCisJCQkJICAgICBwZ19wcm9jX2RpciwgJnBrdGdlbl9pZl9mb3BzKTsKIAlpZiAoIXBrdF9kZXYtPmVudHJ5KSB7CiAJCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBjYW5ub3QgY3JlYXRlICVzLyVzIHByb2NmcyBlbnRyeS5cbiIsCiAJCSAgICAgICBQR19QUk9DX0RJUiwgaWZuYW1lKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQyOwogCX0KLQlwa3RfZGV2LT5lbnRyeS0+cHJvY19mb3BzID0gJnBrdGdlbl9pZl9mb3BzOwogCXBrdF9kZXYtPmVudHJ5LT5kYXRhID0gcGt0X2RldjsKICNpZmRlZiBDT05GSUdfWEZSTQogCXBrdF9kZXYtPmlwc21vZGUgPSBYRlJNX01PREVfVFJBTlNQT1JUOwpAQCAtMzYyOCw3ICszNjI4LDcgQEAKIAlrdGhyZWFkX2JpbmQocCwgY3B1KTsKIAl0LT50c2sgPSBwOwogCi0JcGUgPSBjcmVhdGVfcHJvY19lbnRyeSh0LT50c2stPmNvbW0sIDA2MDAsIHBnX3Byb2NfZGlyKTsKKwlwZSA9IHByb2NfY3JlYXRlKHQtPnRzay0+Y29tbSwgMDYwMCwgcGdfcHJvY19kaXIsICZwa3RnZW5fdGhyZWFkX2ZvcHMpOwogCWlmICghcGUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IGNhbm5vdCBjcmVhdGUgJXMvJXMgcHJvY2ZzIGVudHJ5LlxuIiwKIAkJICAgICAgIFBHX1BST0NfRElSLCB0LT50c2stPmNvbW0pOwpAQCAtMzYzOCw3ICszNjM4LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcGUtPnByb2NfZm9wcyA9ICZwa3RnZW5fdGhyZWFkX2ZvcHM7CiAJcGUtPmRhdGEgPSB0OwogCiAJd2FrZV91cF9wcm9jZXNzKHApOwpAQCAtMzcwOSw3ICszNzA4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcGdfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlwZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBHQ1RSTCwgMDYwMCwgcGdfcHJvY19kaXIpOworCXBlID0gcHJvY19jcmVhdGUoUEdDVFJMLCAwNjAwLCBwZ19wcm9jX2RpciwgJnBrdGdlbl9mb3BzKTsKIAlpZiAocGUgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgInBrdGdlbjogRVJST1I6IGNhbm5vdCBjcmVhdGUgJXMgIgogCQkgICAgICAgInByb2NmcyBlbnRyeS5cbiIsIFBHQ1RSTCk7CkBAIC0zNzE3LDcgKzM3MTYsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwZS0+cHJvY19mb3BzID0gJnBrdGdlbl9mb3BzOwogCXBlLT5kYXRhID0gTlVMTDsKIAogCS8qIFJlZ2lzdGVyIHVzIHRvIHJlY2VpdmUgbmV0ZGV2aWNlIGV2ZW50cyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCBlY2IwMmFmLi5iYzM5ZTQxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMjY5LDYgKzI2OSwyNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChydG5sX2xpbmtfcmVnaXN0ZXIpOwogCitzdGF0aWMgdm9pZCBfX3J0bmxfa2lsbF9saW5rcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKK3Jlc3RhcnQ6CisJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CisJCWlmIChkZXYtPnJ0bmxfbGlua19vcHMgPT0gb3BzKSB7CisJCQlvcHMtPmRlbGxpbmsoZGV2KTsKKwkJCWdvdG8gcmVzdGFydDsKKwkJfQorCX0KK30KKwordm9pZCBydG5sX2tpbGxfbGlua3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQoreworCXJ0bmxfbG9jaygpOworCV9fcnRubF9raWxsX2xpbmtzKG5ldCwgb3BzKTsKKwlydG5sX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRubF9raWxsX2xpbmtzKTsKKwogLyoqCiAgKiBfX3J0bmxfbGlua191bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciBydG5sX2xpbmtfb3BzIGZyb20gcnRuZXRsaW5rLgogICogQG9wczogc3RydWN0IHJ0bmxfbGlua19vcHMgKiB0byB1bnJlZ2lzdGVyCkBAIC0yNzcsMTcgKzI5NywxMCBAQAogICovCiB2b2lkIF9fcnRubF9saW5rX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAqbjsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAlmb3JfZWFjaF9uZXQobmV0KSB7Ci1yZXN0YXJ0OgotCQlmb3JfZWFjaF9uZXRkZXZfc2FmZShuZXQsIGRldiwgbikgewotCQkJaWYgKGRldi0+cnRubF9saW5rX29wcyA9PSBvcHMpIHsKLQkJCQlvcHMtPmRlbGxpbmsoZGV2KTsKLQkJCQlnb3RvIHJlc3RhcnQ7Ci0JCQl9Ci0JCX0KKwkJX19ydG5sX2tpbGxfbGlua3MobmV0LCBvcHMpOwogCX0KIAlsaXN0X2RlbCgmb3BzLT5saXN0KTsKIH0KQEAgLTUwNCw3ICs1MTcsNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChydG5sX3B1dF9jYWNoZWluZm8pOwogCi1zdGF0aWMgaW50IHNldF9vcGVyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciB0cmFuc2l0aW9uLCBib29sIHNlbmRfbm90aWZpY2F0aW9uKQorc3RhdGljIHZvaWQgc2V0X29wZXJzdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHRyYW5zaXRpb24pCiB7CiAJdW5zaWduZWQgY2hhciBvcGVyc3RhdGUgPSBkZXYtPm9wZXJzdGF0ZTsKIApAQCAtNTI3LDEyICs1NDAsOCBAQAogCQl3cml0ZV9sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKIAkJZGV2LT5vcGVyc3RhdGUgPSBvcGVyc3RhdGU7CiAJCXdyaXRlX3VubG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7Ci0KLQkJaWYgKHNlbmRfbm90aWZpY2F0aW9uKQotCQkJbmV0ZGV2X3N0YXRlX2NoYW5nZShkZXYpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7CisJCW5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfcnRubF9saW5rX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgKmEsCkBAIC02NjYsNyArNjc1LDcgQEAKIAogc3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IGlkeDsKIAlpbnQgc19pZHggPSBjYi0+YXJnc1swXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtNjkzLDEwICs3MDIsMTIgQEAKIAlbSUZMQV9CUk9BRENBU1RdCT0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSBNQVhfQUREUl9MRU4gfSwKIAlbSUZMQV9NQVBdCQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgcnRubF9saW5rX2lmbWFwKSB9LAogCVtJRkxBX01UVV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbSUZMQV9MSU5LXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtJRkxBX1RYUUxFTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbSUZMQV9XRUlHSFRdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW0lGTEFfT1BFUlNUQVRFXQk9IHsgLnR5cGUgPSBOTEFfVTggfSwKIAlbSUZMQV9MSU5LTU9ERV0JCT0geyAudHlwZSA9IE5MQV9VOCB9LAorCVtJRkxBX0xJTktJTkZPXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogCVtJRkxBX05FVF9OU19QSURdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKQEAgLTcyNCw2ICs3MzUsMjEgQEAKIAlyZXR1cm4gbmV0OwogfQogCitzdGF0aWMgaW50IHZhbGlkYXRlX2xpbmttc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSkKK3sKKwlpZiAoZGV2KSB7CisJCWlmICh0YltJRkxBX0FERFJFU1NdICYmCisJCSAgICBubGFfbGVuKHRiW0lGTEFfQUREUkVTU10pIDwgZGV2LT5hZGRyX2xlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh0YltJRkxBX0JST0FEQ0FTVF0gJiYKKwkJICAgIG5sYV9sZW4odGJbSUZMQV9CUk9BRENBU1RdKSA8IGRldi0+YWRkcl9sZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkb19zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSwKIAkJICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBjaGFyICppZm5hbWUsIGludCBtb2RpZmllZCkKIHsKQEAgLTgyNiw3ICs4NTIsNiBAQAogCWlmICh0YltJRkxBX0JST0FEQ0FTVF0pIHsKIAkJbmxhX21lbWNweShkZXYtPmJyb2FkY2FzdCwgdGJbSUZMQV9CUk9BRENBU1RdLCBkZXYtPmFkZHJfbGVuKTsKIAkJc2VuZF9hZGRyX25vdGlmeSA9IDE7Ci0JCW1vZGlmaWVkID0gMTsKIAl9CiAKIAlpZiAoaWZtLT5pZmlfZmxhZ3MgfHwgaWZtLT5pZmlfY2hhbmdlKSB7CkBAIC04MzksMjMgKzg2NCwxNiBAQAogCQlkZXZfY2hhbmdlX2ZsYWdzKGRldiwgZmxhZ3MpOwogCX0KIAotCWlmICh0YltJRkxBX1RYUUxFTl0pIHsKLQkJaWYgKGRldi0+dHhfcXVldWVfbGVuICE9IG5sYV9nZXRfdTMyKHRiW0lGTEFfVFhRTEVOXSkpIHsKLQkJCWRldi0+dHhfcXVldWVfbGVuID0gbmxhX2dldF91MzIodGJbSUZMQV9UWFFMRU5dKTsKLQkJCW1vZGlmaWVkID0gMTsKLQkJfQotCX0KKwlpZiAodGJbSUZMQV9UWFFMRU5dKQorCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IG5sYV9nZXRfdTMyKHRiW0lGTEFfVFhRTEVOXSk7CiAKIAlpZiAodGJbSUZMQV9PUEVSU1RBVEVdKQotCQltb2RpZmllZCB8PSBzZXRfb3BlcnN0YXRlKGRldiwgbmxhX2dldF91OCh0YltJRkxBX09QRVJTVEFURV0pLCBmYWxzZSk7CisJCXNldF9vcGVyc3RhdGUoZGV2LCBubGFfZ2V0X3U4KHRiW0lGTEFfT1BFUlNUQVRFXSkpOwogCiAJaWYgKHRiW0lGTEFfTElOS01PREVdKSB7Ci0JCWlmIChkZXYtPmxpbmtfbW9kZSAhPSBubGFfZ2V0X3U4KHRiW0lGTEFfTElOS01PREVdKSkgewotCQkJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7Ci0JCQlkZXYtPmxpbmtfbW9kZSA9IG5sYV9nZXRfdTgodGJbSUZMQV9MSU5LTU9ERV0pOwotCQkJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7Ci0JCQltb2RpZmllZCA9IDE7Ci0JCX0KKwkJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7CisJCWRldi0+bGlua19tb2RlID0gbmxhX2dldF91OCh0YltJRkxBX0xJTktNT0RFXSk7CisJCXdyaXRlX3VubG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7CiAJfQogCiAJZXJyID0gMDsKQEAgLTg2OSwxNiArODg3LDEyIEBACiAKIAlpZiAoc2VuZF9hZGRyX25vdGlmeSkKIAkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VBRERSLCBkZXYpOwotCi0JaWYgKG1vZGlmaWVkKQotCQluZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7Ci0KIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHJ0bmxfc2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgaWZpbmZvbXNnICppZm07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgZXJyOwpAQCAtOTA4LDEyICs5MjIsNyBAQAogCQlnb3RvIGVycm91dDsKIAl9CiAKLQlpZiAodGJbSUZMQV9BRERSRVNTXSAmJgotCSAgICBubGFfbGVuKHRiW0lGTEFfQUREUkVTU10pIDwgZGV2LT5hZGRyX2xlbikKLQkJZ290byBlcnJvdXRfZGV2OwotCi0JaWYgKHRiW0lGTEFfQlJPQURDQVNUXSAmJgotCSAgICBubGFfbGVuKHRiW0lGTEFfQlJPQURDQVNUXSkgPCBkZXYtPmFkZHJfbGVuKQorCWlmICgoZXJyID0gdmFsaWRhdGVfbGlua21zZyhkZXYsIHRiKSkgPCAwKQogCQlnb3RvIGVycm91dF9kZXY7CiAKIAllcnIgPSBkb19zZXRsaW5rKGRldiwgaWZtLCB0YiwgaWZuYW1lLCAwKTsKQEAgLTkyNSw3ICs5MzQsNyBAQAogCiBzdGF0aWMgaW50IHJ0bmxfZGVsbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAljb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGlmaW5mb21zZyAqaWZtOwpAQCAtOTc2LDcgKzk4NSw3IEBACiAJCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCWRldi0+bmRfbmV0ID0gbmV0OworCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAlkZXYtPnJ0bmxfbGlua19vcHMgPSBvcHM7CiAKIAlpZiAodGJbSUZMQV9NVFVdKQpAQCAtOTkwLDcgKzk5OSw3IEBACiAJaWYgKHRiW0lGTEFfVFhRTEVOXSkKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSBubGFfZ2V0X3UzMih0YltJRkxBX1RYUUxFTl0pOwogCWlmICh0YltJRkxBX09QRVJTVEFURV0pCi0JCXNldF9vcGVyc3RhdGUoZGV2LCBubGFfZ2V0X3U4KHRiW0lGTEFfT1BFUlNUQVRFXSksIHRydWUpOworCQlzZXRfb3BlcnN0YXRlKGRldiwgbmxhX2dldF91OCh0YltJRkxBX09QRVJTVEFURV0pKTsKIAlpZiAodGJbSUZMQV9MSU5LTU9ERV0pCiAJCWRldi0+bGlua19tb2RlID0gbmxhX2dldF91OCh0YltJRkxBX0xJTktNT0RFXSk7CiAKQEAgLTEwMDQsNyArMTAxMyw3IEBACiAKIHN0YXRpYyBpbnQgcnRubF9uZXdsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWNvbnN0IHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaWZpbmZvbXNnICppZm07CkBAIC0xMDM0LDYgKzEwNDMsOSBAQAogCWVsc2UKIAkJZGV2ID0gTlVMTDsKIAorCWlmICgoZXJyID0gdmFsaWRhdGVfbGlua21zZyhkZXYsIHRiKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJaWYgKHRiW0lGTEFfTElOS0lORk9dKSB7CiAJCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQobGlua2luZm8sIElGTEFfSU5GT19NQVgsCiAJCQkJICAgICAgIHRiW0lGTEFfTElOS0lORk9dLCBpZmxhX2luZm9fcG9saWN5KTsKQEAgLTExMzMsNyArMTE0NSw3IEBACiAKIHN0YXRpYyBpbnQgcnRubF9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX01BWCsxXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKQEAgLTExOTksNyArMTIxMSw3IEBACiAKIHZvaWQgcnRtc2dfaWZpbmZvKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFuZ2UpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZGV2LT5uZF9uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCkBAIC0xMjI4LDcgKzEyNDAsNyBAQAogCiBzdGF0aWMgaW50IHJ0bmV0bGlua19yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlydG5sX2RvaXRfZnVuYyBkb2l0OwogCWludCBzel9pZHgsIGtpbmQ7CiAJaW50IG1pbl9sZW47CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDBkMGZkMjguLjRmZTYwNWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0yNjMsNiArMjYzLDI4IEBACiAJcmV0dXJuIHNrYjsKIH0KIAorLyoqCisgKglkZXZfYWxsb2Nfc2tiIC0gYWxsb2NhdGUgYW4gc2tidWZmIGZvciByZWNlaXZpbmcKKyAqCUBsZW5ndGg6IGxlbmd0aCB0byBhbGxvY2F0ZQorICoKKyAqCUFsbG9jYXRlIGEgbmV3ICZza19idWZmIGFuZCBhc3NpZ24gaXQgYSB1c2FnZSBjb3VudCBvZiBvbmUuIFRoZQorICoJYnVmZmVyIGhhcyB1bnNwZWNpZmllZCBoZWFkcm9vbSBidWlsdCBpbi4gVXNlcnMgc2hvdWxkIGFsbG9jYXRlCisgKgl0aGUgaGVhZHJvb20gdGhleSB0aGluayB0aGV5IG5lZWQgd2l0aG91dCBhY2NvdW50aW5nIGZvciB0aGUKKyAqCWJ1aWx0IGluIHNwYWNlLiBUaGUgYnVpbHQgaW4gc3BhY2UgaXMgdXNlZCBmb3Igb3B0aW1pc2F0aW9ucy4KKyAqCisgKgklTlVMTCBpcyByZXR1cm5lZCBpZiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS4gQWx0aG91Z2ggdGhpcyBmdW5jdGlvbgorICoJYWxsb2NhdGVzIG1lbW9yeSBpdCBjYW4gYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0LgorICovCitzdHJ1Y3Qgc2tfYnVmZiAqZGV2X2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworCS8qCisJICogVGhlcmUgaXMgbW9yZSBjb2RlIGhlcmUgdGhhbiBpdCBzZWVtczoKKwkgKiBfX2Rldl9hbGxvY19za2IgaXMgYW4gaW5saW5lCisJICovCisJcmV0dXJuIF9fZGV2X2FsbG9jX3NrYihsZW5ndGgsIEdGUF9BVE9NSUMpOworfQorRVhQT1JUX1NZTUJPTChkZXZfYWxsb2Nfc2tiKTsKKwogc3RhdGljIHZvaWQgc2tiX2Ryb3BfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqKmxpc3RwKQogewogCXN0cnVjdCBza19idWZmICpsaXN0ID0gKmxpc3RwOwpAQCAtODU3LDYgKzg3OSw3OCBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qKgorICoJc2tiX3B1dCAtIGFkZCBkYXRhIHRvIGEgYnVmZmVyCisgKglAc2tiOiBidWZmZXIgdG8gdXNlCisgKglAbGVuOiBhbW91bnQgb2YgZGF0YSB0byBhZGQKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIHVzZWQgZGF0YSBhcmVhIG9mIHRoZSBidWZmZXIuIElmIHRoaXMgd291bGQKKyAqCWV4Y2VlZCB0aGUgdG90YWwgYnVmZmVyIHNpemUgdGhlIGtlcm5lbCB3aWxsIHBhbmljLiBBIHBvaW50ZXIgdG8gdGhlCisgKglmaXJzdCBieXRlIG9mIHRoZSBleHRyYSBkYXRhIGlzIHJldHVybmVkLgorICovCit1bnNpZ25lZCBjaGFyICpza2JfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciAqdG1wID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOworCVNLQl9MSU5FQVJfQVNTRVJUKHNrYik7CisJc2tiLT50YWlsICs9IGxlbjsKKwlza2ItPmxlbiAgKz0gbGVuOworCWlmICh1bmxpa2VseShza2ItPnRhaWwgPiBza2ItPmVuZCkpCisJCXNrYl9vdmVyX3BhbmljKHNrYiwgbGVuLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXJldHVybiB0bXA7Cit9CitFWFBPUlRfU1lNQk9MKHNrYl9wdXQpOworCisvKioKKyAqCXNrYl9wdXNoIC0gYWRkIGRhdGEgdG8gdGhlIHN0YXJ0IG9mIGEgYnVmZmVyCisgKglAc2tiOiBidWZmZXIgdG8gdXNlCisgKglAbGVuOiBhbW91bnQgb2YgZGF0YSB0byBhZGQKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIHVzZWQgZGF0YSBhcmVhIG9mIHRoZSBidWZmZXIgYXQgdGhlIGJ1ZmZlcgorICoJc3RhcnQuIElmIHRoaXMgd291bGQgZXhjZWVkIHRoZSB0b3RhbCBidWZmZXIgaGVhZHJvb20gdGhlIGtlcm5lbCB3aWxsCisgKglwYW5pYy4gQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBleHRyYSBkYXRhIGlzIHJldHVybmVkLgorICovCit1bnNpZ25lZCBjaGFyICpza2JfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXNrYi0+ZGF0YSAtPSBsZW47CisJc2tiLT5sZW4gICs9IGxlbjsKKwlpZiAodW5saWtlbHkoc2tiLT5kYXRhPHNrYi0+aGVhZCkpCisJCXNrYl91bmRlcl9wYW5pYyhza2IsIGxlbiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlyZXR1cm4gc2tiLT5kYXRhOworfQorRVhQT1JUX1NZTUJPTChza2JfcHVzaCk7CisKKy8qKgorICoJc2tiX3B1bGwgLSByZW1vdmUgZGF0YSBmcm9tIHRoZSBzdGFydCBvZiBhIGJ1ZmZlcgorICoJQHNrYjogYnVmZmVyIHRvIHVzZQorICoJQGxlbjogYW1vdW50IG9mIGRhdGEgdG8gcmVtb3ZlCisgKgorICoJVGhpcyBmdW5jdGlvbiByZW1vdmVzIGRhdGEgZnJvbSB0aGUgc3RhcnQgb2YgYSBidWZmZXIsIHJldHVybmluZworICoJdGhlIG1lbW9yeSB0byB0aGUgaGVhZHJvb20uIEEgcG9pbnRlciB0byB0aGUgbmV4dCBkYXRhIGluIHRoZSBidWZmZXIKKyAqCWlzIHJldHVybmVkLiBPbmNlIHRoZSBkYXRhIGhhcyBiZWVuIHB1bGxlZCBmdXR1cmUgcHVzaGVzIHdpbGwgb3ZlcndyaXRlCisgKgl0aGUgb2xkIGRhdGEuCisgKi8KK3Vuc2lnbmVkIGNoYXIgKnNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIHVubGlrZWx5KGxlbiA+IHNrYi0+bGVuKSA/IE5VTEwgOiBfX3NrYl9wdWxsKHNrYiwgbGVuKTsKK30KK0VYUE9SVF9TWU1CT0woc2tiX3B1bGwpOworCisvKioKKyAqCXNrYl90cmltIC0gcmVtb3ZlIGVuZCBmcm9tIGEgYnVmZmVyCisgKglAc2tiOiBidWZmZXIgdG8gYWx0ZXIKKyAqCUBsZW46IG5ldyBsZW5ndGgKKyAqCisgKglDdXQgdGhlIGxlbmd0aCBvZiBhIGJ1ZmZlciBkb3duIGJ5IHJlbW92aW5nIGRhdGEgZnJvbSB0aGUgdGFpbC4gSWYKKyAqCXRoZSBidWZmZXIgaXMgYWxyZWFkeSB1bmRlciB0aGUgbGVuZ3RoIHNwZWNpZmllZCBpdCBpcyBub3QgbW9kaWZpZWQuCisgKglUaGUgc2tiIG11c3QgYmUgbGluZWFyLgorICovCit2b2lkIHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKHNrYi0+bGVuID4gbGVuKQorCQlfX3NrYl90cmltKHNrYiwgbGVuKTsKK30KK0VYUE9SVF9TWU1CT0woc2tiX3RyaW0pOworCiAvKiBUcmltcyBza2IgdG8gbGVuZ3RoIGxlbi4gSXQgY2FuIGNoYW5nZSBza2IgcG9pbnRlcnMuCiAgKi8KIApAQCAtMTc2Niw3ICsxODYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKLQlfX3NrYl9hcHBlbmQob2xkLCBuZXdzaywgbGlzdCk7CisJX19za2JfcXVldWVfYWZ0ZXIobGlzdCwgb2xkLCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yMTMxLDggKzIyMjUsOCBAQAogICoJQGZlYXR1cmVzOiBmZWF0dXJlcyBmb3IgdGhlIG91dHB1dCBwYXRoIChzZWUgZGV2LT5mZWF0dXJlcykKICAqCiAgKglUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHNlZ21lbnRhdGlvbiBvbiB0aGUgZ2l2ZW4gc2tiLiAgSXQgcmV0dXJucwotICoJdGhlIHNlZ21lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiAgSXQgcmV0dXJucyBOVUxMIGlmIHRoZXJlIGFyZQotICoJbm8gbW9yZSBzZWdtZW50cyB0byBnZW5lcmF0ZSwgb3Igd2hlbiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKyAqCWEgcG9pbnRlciB0byB0aGUgZmlyc3QgaW4gYSBsaXN0IG9mIG5ldyBza2JzIGZvciB0aGUgc2VnbWVudHMuCisgKglJbiBjYXNlIG9mIGVycm9yIGl0IHJldHVybnMgRVJSX1BUUihlcnIpLgogICovCiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZlYXR1cmVzKQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDA5Y2IzYTcuLjVkYmI4MWIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTM3Miw3ICszNzIsNyBAQAogewogCWludCByZXQgPSAtRU5PUFJPVE9PUFQ7CiAjaWZkZWYgQ09ORklHX05FVERFVklDRVMKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAljaGFyIGRldm5hbWVbSUZOQU1TSVpdOwogCWludCBpbmRleDsKIApAQCAtNDUwLDE1ICs0NTAsNiBAQAogCSAqCU9wdGlvbnMgd2l0aG91dCBhcmd1bWVudHMKIAkgKi8KIAotI2lmZGVmIFNPX0RPTlRMSU5HRVIJCS8qIENvbXBhdGliaWxpdHkgaXRlbS4uLiAqLwotCWlmIChvcHRuYW1lID09IFNPX0RPTlRMSU5HRVIpIHsKLQkJbG9ja19zb2NrKHNrKTsKLQkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX0xJTkdFUik7Ci0JCXJlbGVhc2Vfc29jayhzayk7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCiAJaWYgKG9wdG5hbWUgPT0gU09fQklORFRPREVWSUNFKQogCQlyZXR1cm4gc29ja19iaW5kdG9kZXZpY2Uoc2ssIG9wdHZhbCwgb3B0bGVuKTsKIApAQCAtOTQyLDcgKzkzMyw2IEBACiAgKglAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKICAqCUBwcmlvcml0eTogZm9yIGFsbG9jYXRpb24gKCVHRlBfS0VSTkVMLCAlR0ZQX0FUT01JQywgZXRjKQogICoJQHByb3Q6IHN0cnVjdCBwcm90byBhc3NvY2lhdGVkIHdpdGggdGhpcyBuZXcgc29jayBpbnN0YW5jZQotICoJQHplcm9faXQ6IGlmIHdlIHNob3VsZCB6ZXJvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc29jawogICovCiBzdHJ1Y3Qgc29jayAqc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwKIAkJICAgICAgc3RydWN0IHByb3RvICpwcm90KQpAQCAtOTU4LDcgKzk0OCw3IEBACiAJCSAqLwogCQlzay0+c2tfcHJvdCA9IHNrLT5za19wcm90X2NyZWF0b3IgPSBwcm90OwogCQlzb2NrX2xvY2tfaW5pdChzayk7Ci0JCXNrLT5za19uZXQgPSBnZXRfbmV0KG5ldCk7CisJCXNvY2tfbmV0X3NldChzaywgZ2V0X25ldChuZXQpKTsKIAl9CiAKIAlyZXR1cm4gc2s7CkBAIC05ODEsMTIgKzk3MSwzMiBAQAogCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfb21lbV9hbGxvYykpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogb3B0bWVtIGxlYWthZ2UgKCVkIGJ5dGVzKSBkZXRlY3RlZC5cbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGF0b21pY19yZWFkKCZzay0+c2tfb21lbV9hbGxvYykpOworCQkgICAgICAgX19mdW5jX18sIGF0b21pY19yZWFkKCZzay0+c2tfb21lbV9hbGxvYykpOwogCi0JcHV0X25ldChzay0+c2tfbmV0KTsKKwlwdXRfbmV0KHNvY2tfbmV0KHNrKSk7CiAJc2tfcHJvdF9mcmVlKHNrLT5za19wcm90X2NyZWF0b3IsIHNrKTsKIH0KIAorLyoKKyAqIExhc3Qgc29ja19wdXQgc2hvdWxkIGRyb3AgcmVmZXJyZW5jZSB0byBzay0+c2tfbmV0LiBJdCBoYXMgYWxyZWFkeQorICogYmVlbiBkcm9wcGVkIGluIHNrX2NoYW5nZV9uZXQuIFRha2luZyByZWZlcnJlbmNlIHRvIHN0b3BwaW5nIG5hbWVzcGFjZQorICogaXMgbm90IGFuIG9wdGlvbi4KKyAqIFRha2UgcmVmZXJyZW5jZSB0byBhIHNvY2tldCB0byByZW1vdmUgaXQgZnJvbSBoYXNoIF9hbGl2ZV8gYW5kIGFmdGVyIHRoYXQKKyAqIGRlc3Ryb3kgaXQgaW4gdGhlIGNvbnRleHQgb2YgaW5pdF9uZXQuCisgKi8KK3ZvaWQgc2tfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzayA9PSBOVUxMIHx8IHNrLT5za19zb2NrZXQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc29ja19ob2xkKHNrKTsKKwlzb2NrX3JlbGVhc2Uoc2stPnNrX3NvY2tldCk7CisJcmVsZWFzZV9uZXQoc29ja19uZXQoc2spKTsKKwlzb2NrX25ldF9zZXQoc2ssIGdldF9uZXQoJmluaXRfbmV0KSk7CisJc29ja19wdXQoc2spOworfQorRVhQT1JUX1NZTUJPTChza19yZWxlYXNlX2tlcm5lbCk7CisKIHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5KQogewogCXN0cnVjdCBzb2NrICpuZXdzazsKQEAgLTk5OCw3ICsxMDA4LDcgQEAKIAkJc29ja19jb3B5KG5ld3NrLCBzayk7CiAKIAkJLyogU0FOSVRZICovCi0JCWdldF9uZXQobmV3c2stPnNrX25ldCk7CisJCWdldF9uZXQoc29ja19uZXQobmV3c2spKTsKIAkJc2tfbm9kZV9pbml0KCZuZXdzay0+c2tfbm9kZSk7CiAJCXNvY2tfbG9ja19pbml0KG5ld3NrKTsKIAkJYmhfbG9ja19zb2NrKG5ld3NrKTsKQEAgLTEwNzYsMTAgKzEwODYsMTIgQEAKIAlpZiAoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX0dTTykKIAkJc2stPnNrX3JvdXRlX2NhcHMgfD0gTkVUSUZfRl9HU09fU09GVFdBUkU7CiAJaWYgKHNrX2Nhbl9nc28oc2spKSB7Ci0JCWlmIChkc3QtPmhlYWRlcl9sZW4pCisJCWlmIChkc3QtPmhlYWRlcl9sZW4pIHsKIAkJCXNrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX0dTT19NQVNLOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlzay0+c2tfcm91dGVfY2FwcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNOworCQkJc2stPnNrX2dzb19tYXhfc2l6ZSA9IGRzdC0+ZGV2LT5nc29fbWF4X3NpemU7CisJCX0KIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChza19zZXR1cF9jYXBzKTsKQEAgLTE2MjEsNyArMTYzMyw3IEBACiB7CiAJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhzay0+c2tfc2xlZXApOwogCXNrX3dha2VfYXN5bmMoc2ssIFNPQ0tfV0FLRV9XQUlURCwgUE9MTF9JTik7CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KQEAgLTE2MzUsNyArMTY0Nyw3IEBACiAJICovCiAJaWYgKChhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpIDw8IDEpIDw9IHNrLT5za19zbmRidWYpIHsKIAkJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHNrLT5za19zbGVlcCk7CiAKIAkJLyogU2hvdWxkIGFncmVlIHdpdGggcG9sbCwgb3RoZXJ3aXNlIHNvbWUgcHJvZ3JhbXMgYnJlYWsgKi8KIAkJaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkKQEAgLTE3MjUsNyArMTczNyw3IEBACiAJc2stPnNrX3JjdnRpbWVvCQk9CU1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCXNrLT5za19zbmR0aW1lbwkJPQlNQVhfU0NIRURVTEVfVElNRU9VVDsKIAotCXNrLT5za19zdGFtcCA9IGt0aW1lX3NldCgtMUwsIC0xTCk7CisJc2stPnNrX3N0YW1wID0ga3RpbWVfc2V0KC0xTCwgMCk7CiAKIAlhdG9taWNfc2V0KCZzay0+c2tfcmVmY250LCAxKTsKIAlhdG9taWNfc2V0KCZzay0+c2tfZHJvcHMsIDApOwpAQCAtMTkxOSwxNiArMTkzMSwxMTMgQEAKIHN0YXRpYyBERUZJTkVfUldMT0NLKHByb3RvX2xpc3RfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKHByb3RvX2xpc3QpOwogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKyNkZWZpbmUgUFJPVE9fSU5VU0VfTlIJNjQJLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgdGhlIGZpcnN0IHRpbWUgKi8KK3N0cnVjdCBwcm90X2ludXNlIHsKKwlpbnQgdmFsW1BST1RPX0lOVVNFX05SXTsKK307CisKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChwcm90b19pbnVzZV9pZHgsIFBST1RPX0lOVVNFX05SKTsKKworI2lmZGVmIENPTkZJR19ORVRfTlMKK3ZvaWQgc29ja19wcm90X2ludXNlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IHZhbCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXBlcl9jcHVfcHRyKG5ldC0+Y29yZS5pbnVzZSwgY3B1KS0+dmFsW3Byb3QtPmludXNlX2lkeF0gKz0gdmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc29ja19wcm90X2ludXNlX2FkZCk7CisKK2ludCBzb2NrX3Byb3RfaW51c2VfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHByb3RvICpwcm90KQoreworCWludCBjcHUsIGlkeCA9IHByb3QtPmludXNlX2lkeDsKKwlpbnQgcmVzID0gMDsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCXJlcyArPSBwZXJfY3B1X3B0cihuZXQtPmNvcmUuaW51c2UsIGNwdSktPnZhbFtpZHhdOworCisJcmV0dXJuIHJlcyA+PSAwID8gcmVzIDogMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNvY2tfcHJvdF9pbnVzZV9nZXQpOworCitzdGF0aWMgaW50IHNvY2tfaW51c2VfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCW5ldC0+Y29yZS5pbnVzZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgcHJvdF9pbnVzZSk7CisJcmV0dXJuIG5ldC0+Y29yZS5pbnVzZSA/IDAgOiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBzb2NrX2ludXNlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlmcmVlX3BlcmNwdShuZXQtPmNvcmUuaW51c2UpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG5ldF9pbnVzZV9vcHMgPSB7CisJLmluaXQgPSBzb2NrX2ludXNlX2luaXRfbmV0LAorCS5leGl0ID0gc29ja19pbnVzZV9leGl0X25ldCwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IG5ldF9pbnVzZV9pbml0KHZvaWQpCit7CisJaWYgKHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJm5ldF9pbnVzZV9vcHMpKQorCQlwYW5pYygiQ2Fubm90IGluaXRpYWxpemUgbmV0IGludXNlIGNvdW50ZXJzIik7CisKKwlyZXR1cm4gMDsKK30KKworY29yZV9pbml0Y2FsbChuZXRfaW51c2VfaW5pdCk7CisjZWxzZQorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwcm90X2ludXNlLCBwcm90X2ludXNlKTsKKwordm9pZCBzb2NrX3Byb3RfaW51c2VfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHByb3RvICpwcm90LCBpbnQgdmFsKQoreworCV9fZ2V0X2NwdV92YXIocHJvdF9pbnVzZSkudmFsW3Byb3QtPmludXNlX2lkeF0gKz0gdmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc29ja19wcm90X2ludXNlX2FkZCk7CisKK2ludCBzb2NrX3Byb3RfaW51c2VfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHByb3RvICpwcm90KQoreworCWludCBjcHUsIGlkeCA9IHByb3QtPmludXNlX2lkeDsKKwlpbnQgcmVzID0gMDsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCXJlcyArPSBwZXJfY3B1KHByb3RfaW51c2UsIGNwdSkudmFsW2lkeF07CisKKwlyZXR1cm4gcmVzID49IDAgPyByZXMgOiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc29ja19wcm90X2ludXNlX2dldCk7CisjZW5kaWYKKworc3RhdGljIHZvaWQgYXNzaWduX3Byb3RvX2lkeChzdHJ1Y3QgcHJvdG8gKnByb3QpCit7CisJcHJvdC0+aW51c2VfaWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChwcm90b19pbnVzZV9pZHgsIFBST1RPX0lOVVNFX05SKTsKKworCWlmICh1bmxpa2VseShwcm90LT5pbnVzZV9pZHggPT0gUFJPVE9fSU5VU0VfTlIgLSAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBST1RPX0lOVVNFX05SIGV4aGF1c3RlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzZXRfYml0KHByb3QtPmludXNlX2lkeCwgcHJvdG9faW51c2VfaWR4KTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9wcm90b19pZHgoc3RydWN0IHByb3RvICpwcm90KQoreworCWlmIChwcm90LT5pbnVzZV9pZHggIT0gUFJPVE9fSU5VU0VfTlIgLSAxKQorCQljbGVhcl9iaXQocHJvdC0+aW51c2VfaWR4LCBwcm90b19pbnVzZV9pZHgpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NpZ25fcHJvdG9faWR4KHN0cnVjdCBwcm90byAqcHJvdCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfcHJvdG9faWR4KHN0cnVjdCBwcm90byAqcHJvdCkKK3sKK30KKyNlbmRpZgorCiBpbnQgcHJvdG9fcmVnaXN0ZXIoc3RydWN0IHByb3RvICpwcm90LCBpbnQgYWxsb2Nfc2xhYikKIHsKIAljaGFyICpyZXF1ZXN0X3NvY2tfc2xhYl9uYW1lID0gTlVMTDsKIAljaGFyICp0aW1ld2FpdF9zb2NrX3NsYWJfbmFtZTsKIAotCWlmIChzb2NrX3Byb3RfaW51c2VfaW5pdChwcm90KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIiVzOiBDYW4ndCBhbGxvYyBpbnVzZSBjb3VudGVycyFcbiIsIHByb3QtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlpZiAoYWxsb2Nfc2xhYikgewogCQlwcm90LT5zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUocHJvdC0+bmFtZSwgcHJvdC0+b2JqX3NpemUsIDAsCiAJCQkJCSAgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOwpAQCAtMTkzNiw3ICsyMDQ1LDcgQEAKIAkJaWYgKHByb3QtPnNsYWIgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IENhbid0IGNyZWF0ZSBzb2NrIFNMQUIgY2FjaGUhXG4iLAogCQkJICAgICAgIHByb3QtPm5hbWUpOwotCQkJZ290byBvdXRfZnJlZV9pbnVzZTsKKwkJCWdvdG8gb3V0OwogCQl9CiAKIAkJaWYgKHByb3QtPnJza19wcm90ICE9IE5VTEwpIHsKQEAgLTE5NzksNiArMjA4OCw3IEBACiAKIAl3cml0ZV9sb2NrKCZwcm90b19saXN0X2xvY2spOwogCWxpc3RfYWRkKCZwcm90LT5ub2RlLCAmcHJvdG9fbGlzdCk7CisJYXNzaWduX3Byb3RvX2lkeChwcm90KTsKIAl3cml0ZV91bmxvY2soJnByb3RvX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiAKQEAgLTE5OTQsOCArMjEwNCw2IEBACiBvdXRfZnJlZV9zb2NrX3NsYWI6CiAJa21lbV9jYWNoZV9kZXN0cm95KHByb3QtPnNsYWIpOwogCXByb3QtPnNsYWIgPSBOVUxMOwotb3V0X2ZyZWVfaW51c2U6Ci0Jc29ja19wcm90X2ludXNlX2ZyZWUocHJvdCk7CiBvdXQ6CiAJcmV0dXJuIC1FTk9CVUZTOwogfQpAQCAtMjAwNSwxMSArMjExMywxMCBAQAogdm9pZCBwcm90b191bnJlZ2lzdGVyKHN0cnVjdCBwcm90byAqcHJvdCkKIHsKIAl3cml0ZV9sb2NrKCZwcm90b19saXN0X2xvY2spOworCXJlbGVhc2VfcHJvdG9faWR4KHByb3QpOwogCWxpc3RfZGVsKCZwcm90LT5ub2RlKTsKIAl3cml0ZV91bmxvY2soJnByb3RvX2xpc3RfbG9jayk7CiAKLQlzb2NrX3Byb3RfaW51c2VfZnJlZShwcm90KTsKLQogCWlmIChwcm90LT5zbGFiICE9IE5VTEwpIHsKIAkJa21lbV9jYWNoZV9kZXN0cm95KHByb3QtPnNsYWIpOwogCQlwcm90LT5zbGFiID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggMTMwMzM4Zi4uNWZjODAxMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCXsKIAkJLmN0bF9uYW1lCT0gTkVUX0NPUkVfU09NQVhDT05OLAogCQkucHJvY25hbWUJPSAic29tYXhjb25uIiwKLQkJLmRhdGEJCT0gJmluaXRfbmV0LnN5c2N0bF9zb21heGNvbm4sCisJCS5kYXRhCQk9ICZpbml0X25ldC5jb3JlLnN5c2N0bF9zb21heGNvbm4sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwpAQCAtMTYxLDcgKzE2MSw3IEBACiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGJsLCAqdG1wOwogCi0JbmV0LT5zeXNjdGxfc29tYXhjb25uID0gU09NQVhDT05OOworCW5ldC0+Y29yZS5zeXNjdGxfc29tYXhjb25uID0gU09NQVhDT05OOwogCiAJdGJsID0gbmV0X2NvcmVfdGFibGU7CiAJaWYgKG5ldCAhPSAmaW5pdF9uZXQpIHsKQEAgLTE3OCw5ICsxNzgsOSBAQAogCQl9CiAJfQogCi0JbmV0LT5zeXNjdGxfY29yZV9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKG5ldCwKKwluZXQtPmNvcmUuc3lzY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LAogCQkJbmV0X2NvcmVfcGF0aCwgdGJsKTsKLQlpZiAobmV0LT5zeXNjdGxfY29yZV9oZHIgPT0gTlVMTCkKKwlpZiAobmV0LT5jb3JlLnN5c2N0bF9oZHIgPT0gTlVMTCkKIAkJZ290byBlcnJfcmVnOwogCiAJcmV0dXJuIDA7CkBAIC0xOTYsOCArMTk2LDggQEAKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0Ymw7CiAKLQl0YmwgPSBuZXQtPnN5c2N0bF9jb3JlX2hkci0+Y3RsX3RhYmxlX2FyZzsKLQl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LT5zeXNjdGxfY29yZV9oZHIpOworCXRibCA9IG5ldC0+Y29yZS5zeXNjdGxfaGRyLT5jdGxfdGFibGVfYXJnOworCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQtPmNvcmUuc3lzY3RsX2hkcik7CiAJQlVHX09OKHRibCA9PSBuZXRfY29yZV90YWJsZSk7CiAJa2ZyZWUodGJsKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RjY3AuaCBiL25ldC9kY2NwL2RjY3AuaAppbmRleCAyODdhNjJiLi5mNDRkNDkyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9kY2NwLmgKKysrIGIvbmV0L2RjY3AvZGNjcC5oCkBAIC0yMyw5ICsyMyw5IEBACiAgKiAJRENDUCAtIHNwZWNpZmljIHdhcm5pbmcgYW5kIGRlYnVnZ2luZyBtYWNyb3MuCiAgKi8KICNkZWZpbmUgRENDUF9XQVJOKGZtdCwgYS4uLikgTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICIlczogIiBmbXQsICAgICAgIFwKLQkJCQkJCQlfX0ZVTkNUSU9OX18sICMjYSkKKwkJCQkJCQlfX2Z1bmNfXywgIyNhKQogI2RlZmluZSBEQ0NQX0NSSVQoZm10LCBhLi4uKSBwcmludGsoS0VSTl9DUklUIGZtdCAiIGF0ICVzOiVkLyVzKClcbiIsICMjYSwgXAotCQkJCQkgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pCisJCQkJCSBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKQogI2RlZmluZSBEQ0NQX0JVRyhhLi4uKSAgICAgICBkbyB7IERDQ1BfQ1JJVCgiQlVHOiAiIGEpOyBkdW1wX3N0YWNrKCk7IH0gd2hpbGUoMCkKICNkZWZpbmUgRENDUF9CVUdfT04oY29uZCkgICAgZG8geyBpZiAodW5saWtlbHkoKGNvbmQpICE9IDApKQkJICAgXAogCQkJCSAgICAgRENDUF9CVUcoIlwiJXNcIiBob2xkcyAoZXhjZXB0aW9uISkiLCBcCkBAIC0zNiw3ICszNiw3IEBACiAJCQkJCQkJcHJpbnRrKGZtdCwgIyNhcmdzKTsgXAogCQkJCQkJfSB3aGlsZSgwKQogI2RlZmluZSBEQ0NQX1BSX0RFQlVHKGVuYWJsZSwgZm10LCBhLi4uKQlEQ0NQX1BSSU5USyhlbmFibGUsIEtFUk5fREVCVUcgXAotCQkJCQkJICAiJXM6ICIgZm10LCBfX0ZVTkNUSU9OX18sICMjYSkKKwkJCQkJCSAgIiVzOiAiIGZtdCwgX19mdW5jX18sICMjYSkKIAogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCiBleHRlcm4gaW50IGRjY3BfZGVidWc7CkBAIC0yOTYsNyArMjk2LDcgQEAKIGV4dGVybiBpbnQJICAgZGNjcF92NF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKIAkJCQkgICBpbnQgYWRkcl9sZW4pOwogCi1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKmRjY3BfY3RsX21ha2VfcmVzZXQoc3RydWN0IHNvY2tldCAqY3RsLAorZXh0ZXJuIHN0cnVjdCBza19idWZmICpkY2NwX2N0bF9tYWtlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50CSAgIGRjY3Bfc2VuZF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gZGNjcF9yZXNldF9jb2RlcyBjb2RlKTsKIGV4dGVybiB2b2lkCSAgIGRjY3Bfc2VuZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBhY3RpdmUpOwpAQCAtMzI1LDYgKzMyNSwxMiBAQAogICogVGhpcyBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gYXMgd2VsbCBhcyBmb3IgcmVjZXB0aW9uLgogICovCiBzdHJ1Y3QgZGNjcF9za2JfY2IgeworCXVuaW9uIHsKKwkJc3RydWN0IGluZXRfc2tiX3Bhcm0JaDQ7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQorCQlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0JaDY7CisjZW5kaWYKKwl9IGhlYWRlcjsKIAlfX3U4ICBkY2NwZF90eXBlOjQ7CiAJX191OCAgZGNjcGRfY2N2YWw6NDsKIAlfX3U4ICBkY2NwZF9yZXNldF9jb2RlLApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2NC5jIGIvbmV0L2RjY3AvaXB2NC5jCmluZGV4IDQ3NDA3NWEuLmIzNDhkZDcgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjQuYworKysgYi9uZXQvZGNjcC9pcHY0LmMKQEAgLTMyLDExICszMiwxMCBAQAogI2luY2x1ZGUgImZlYXQuaCIKIAogLyoKLSAqIFRoaXMgaXMgdGhlIGdsb2JhbCBzb2NrZXQgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3IgcmVzcG9uZGluZyB0bworICogVGhlIHBlci1uZXQgZGNjcC52NF9jdGxfc2sgc29ja2V0IGlzIHVzZWQgZm9yIHJlc3BvbmRpbmcgdG8KICAqIHRoZSBPdXQtb2YtdGhlLWJsdWUgKE9PVEIpIHBhY2tldHMuIEEgY29udHJvbCBzb2NrIHdpbGwgYmUgY3JlYXRlZAogICogZm9yIHRoaXMgc29ja2V0IGF0IHRoZSBpbml0aWFsaXphdGlvbiB0aW1lLgogICovCi1zdGF0aWMgc3RydWN0IHNvY2tldCAqZGNjcF92NF9jdGxfc29ja2V0OwogCiBpbnQgZGNjcF92NF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQogewpAQCAtMjEyLDggKzIxMSw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlzayA9IGluZXRfbG9va3VwKCZpbml0X25ldCwgJmRjY3BfaGFzaGluZm8sIGlwaC0+ZGFkZHIsIGRoLT5kY2NwaF9kcG9ydCwKLQkJCSBpcGgtPnNhZGRyLCBkaC0+ZGNjcGhfc3BvcnQsIGluZXRfaWlmKHNrYikpOworCXNrID0gaW5ldF9sb29rdXAoZGV2X25ldChza2ItPmRldiksICZkY2NwX2hhc2hpbmZvLAorCQkJaXBoLT5kYWRkciwgZGgtPmRjY3BoX2Rwb3J0LAorCQkJaXBoLT5zYWRkciwgZGgtPmRjY3BoX3Nwb3J0LCBpbmV0X2lpZihza2IpKTsKIAlpZiAoc2sgPT0gTlVMTCkgewogCQlJQ01QX0lOQ19TVEFUU19CSChJQ01QX01JQl9JTkVSUk9SUyk7CiAJCXJldHVybjsKQEAgLTQzMCw3ICs0MzAsNyBAQAogCWlmIChyZXEgIT0gTlVMTCkKIAkJcmV0dXJuIGRjY3BfY2hlY2tfcmVxKHNrLCBza2IsIHJlcSwgcHJldik7CiAKLQluc2sgPSBpbmV0X2xvb2t1cF9lc3RhYmxpc2hlZCgmaW5pdF9uZXQsICZkY2NwX2hhc2hpbmZvLAorCW5zayA9IGluZXRfbG9va3VwX2VzdGFibGlzaGVkKHNvY2tfbmV0KHNrKSwgJmRjY3BfaGFzaGluZm8sCiAJCQkJICAgICAgaXBoLT5zYWRkciwgZGgtPmRjY3BoX3Nwb3J0LAogCQkJCSAgICAgIGlwaC0+ZGFkZHIsIGRoLT5kY2NwaF9kcG9ydCwKIAkJCQkgICAgICBpbmV0X2lpZihza2IpKTsKQEAgLTQ0NiwxMSArNDQ2LDExIEBACiAJcmV0dXJuIHNrOwogfQogCi1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSogZGNjcF92NF9yb3V0ZV9za2Ioc3RydWN0IHNvY2sgKnNrLAorc3RhdGljIHN0cnVjdCBkc3RfZW50cnkqIGRjY3BfdjRfcm91dGVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBydGFibGUgKnJ0OwotCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9ICgoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0KS0+cnRfaWlmLAorCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IHNrYi0+cnRhYmxlLT5ydF9paWYsCiAJCQkgICAgLm5sX3UgPSB7IC5pcDRfdSA9CiAJCQkJICAgICAgeyAuZGFkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHIsCiAJCQkJCS5zYWRkciA9IGlwX2hkcihza2IpLT5kYWRkciwKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCQkJICB9OwogCiAJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCAmZmwpOwotCWlmIChpcF9yb3V0ZV9vdXRwdXRfZmxvdygmaW5pdF9uZXQsICZydCwgJmZsLCBzaywgMCkpIHsKKwlpZiAoaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCAmcnQsICZmbCwgc2ssIDApKSB7CiAJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTQ3MSwxNSArNDcxLDE0IEBACiAJcmV0dXJuICZydC0+dS5kc3Q7CiB9CiAKLXN0YXRpYyBpbnQgZGNjcF92NF9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAotCQkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCitzdGF0aWMgaW50IGRjY3BfdjRfc2VuZF9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKIAlpbnQgZXJyID0gLTE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAKLQkvKiBGaXJzdCwgZ3JhYiBhIHJvdXRlLiAqLwotCi0JaWYgKGRzdCA9PSBOVUxMICYmIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSkpID09IE5VTEwpCisJZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCByZXEpOworCWlmIChkc3QgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlza2IgPSBkY2NwX21ha2VfcmVzcG9uc2Uoc2ssIGRzdCwgcmVxKTsKQEAgLTQ4OSw3ICs0ODgsNiBAQAogCiAJCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY3N1bV9maW5pc2goc2tiLCBpcmVxLT5sb2NfYWRkciwKIAkJCQkJCQkgICAgICBpcmVxLT5ybXRfYWRkcik7Ci0JCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKElQQ0Ioc2tiKS0+b3B0KSk7CiAJCWVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIHNrLCBpcmVxLT5sb2NfYWRkciwKIAkJCQkJICAgIGlyZXEtPnJtdF9hZGRyLAogCQkJCQkgICAgaXJlcS0+b3B0KTsKQEAgLTUwNywxOSArNTA1LDIxIEBACiAJY29uc3Qgc3RydWN0IGlwaGRyICpyeGlwaDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJ4c2tiLT5kc3QtPmRldik7CisJc3RydWN0IHNvY2sgKmN0bF9zayA9IG5ldC0+ZGNjcC52NF9jdGxfc2s7CiAKIAkvKiBOZXZlciBzZW5kIGEgcmVzZXQgaW4gcmVzcG9uc2UgdG8gYSByZXNldC4gKi8KIAlpZiAoZGNjcF9oZHIocnhza2IpLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX1JFU0VUKQogCQlyZXR1cm47CiAKLQlpZiAoKChzdHJ1Y3QgcnRhYmxlICopcnhza2ItPmRzdCktPnJ0X3R5cGUgIT0gUlROX0xPQ0FMKQorCWlmIChyeHNrYi0+cnRhYmxlLT5ydF90eXBlICE9IFJUTl9MT0NBTCkKIAkJcmV0dXJuOwogCi0JZHN0ID0gZGNjcF92NF9yb3V0ZV9za2IoZGNjcF92NF9jdGxfc29ja2V0LT5zaywgcnhza2IpOworCWRzdCA9IGRjY3BfdjRfcm91dGVfc2tiKG5ldCwgY3RsX3NrLCByeHNrYik7CiAJaWYgKGRzdCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlza2IgPSBkY2NwX2N0bF9tYWtlX3Jlc2V0KGRjY3BfdjRfY3RsX3NvY2tldCwgcnhza2IpOworCXNrYiA9IGRjY3BfY3RsX21ha2VfcmVzZXQoY3RsX3NrLCByeHNrYik7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApAQCAtNTI4LDEwICs1MjgsMTAgQEAKIAkJCQkJCQkJIHJ4aXBoLT5kYWRkcik7CiAJc2tiLT5kc3QgPSBkc3RfY2xvbmUoZHN0KTsKIAotCWJoX2xvY2tfc29jayhkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrKTsKLQllcnIgPSBpcF9idWlsZF9hbmRfc2VuZF9wa3Qoc2tiLCBkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrLAorCWJoX2xvY2tfc29jayhjdGxfc2spOworCWVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIGN0bF9zaywKIAkJCQkgICAgcnhpcGgtPmRhZGRyLCByeGlwaC0+c2FkZHIsIE5VTEwpOwotCWJoX3VubG9ja19zb2NrKGRjY3BfdjRfY3RsX3NvY2tldC0+c2spOworCWJoX3VubG9ja19zb2NrKGN0bF9zayk7CiAKIAlpZiAobmV0X3htaXRfZXZhbChlcnIpID09IDApIHsKIAkJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfT1VUU0VHUyk7CkBAIC01NjQsOCArNTY0LDcgQEAKIAlzdHJ1Y3QgZGNjcF9za2JfY2IgKmRjYiA9IERDQ1BfU0tCX0NCKHNrYik7CiAKIAkvKiBOZXZlciBhbnN3ZXIgdG8gRENDUF9QS1RfUkVRVUVTVHMgc2VuZCB0byBicm9hZGNhc3Qgb3IgbXVsdGljYXN0ICovCi0JaWYgKCgoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0KS0+cnRfZmxhZ3MgJgotCSAgICAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpCisJaWYgKHNrYi0+cnRhYmxlLT5ydF9mbGFncyAmIChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSkKIAkJcmV0dXJuIDA7CS8qIGRpc2NhcmQsIGRvbid0IHNlbmQgYSByZXNldCBoZXJlICovCiAKIAlpZiAoZGNjcF9iYWRfc2VydmljZV9jb2RlKHNrLCBzZXJ2aWNlKSkgewpAQCAtNjIwLDcgKzYxOSw3IEBACiAJZHJlcS0+ZHJlcV9pc3MJICAgPSBkY2NwX3Y0X2luaXRfc2VxdWVuY2Uoc2tiKTsKIAlkcmVxLT5kcmVxX3NlcnZpY2UgPSBzZXJ2aWNlOwogCi0JaWYgKGRjY3BfdjRfc2VuZF9yZXNwb25zZShzaywgcmVxLCBOVUxMKSkKKwlpZiAoZGNjcF92NF9zZW5kX3Jlc3BvbnNlKHNrLCByZXEpKQogCQlnb3RvIGRyb3BfYW5kX2ZyZWU7CiAKIAlpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxLCBEQ0NQX1RJTUVPVVRfSU5JVCk7CkBAIC04MTEsNyArODEwLDcgQEAKIAogCS8qIFN0ZXAgMjoKIAkgKglMb29rIHVwIGZsb3cgSUQgaW4gdGFibGUgYW5kIGdldCBjb3JyZXNwb25kaW5nIHNvY2tldCAqLwotCXNrID0gX19pbmV0X2xvb2t1cCgmaW5pdF9uZXQsICZkY2NwX2hhc2hpbmZvLAorCXNrID0gX19pbmV0X2xvb2t1cChkZXZfbmV0KHNrYi0+ZHN0LT5kZXYpLCAmZGNjcF9oYXNoaW5mbywKIAkJCSAgIGlwaC0+c2FkZHIsIGRoLT5kY2NwaF9zcG9ydCwKIAkJCSAgIGlwaC0+ZGFkZHIsIGRoLT5kY2NwaF9kcG9ydCwgaW5ldF9paWYoc2tiKSk7CiAJLyoKQEAgLTkxNyw4ICs5MTYsNiBAQAogCS50d3NrX29ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2spLAogfTsKIAotREVGSU5FX1BST1RPX0lOVVNFKGRjY3BfdjQpCi0KIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gZGNjcF92NF9wcm90ID0gewogCS5uYW1lCQkJPSAiRENDUCIsCiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKQEAgLTk0MywxOCArOTQwLDE4IEBACiAJLm9ial9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZGNjcF9zb2NrKSwKIAkucnNrX3Byb3QJCT0gJmRjY3BfcmVxdWVzdF9zb2NrX29wcywKIAkudHdza19wcm90CQk9ICZkY2NwX3RpbWV3YWl0X3NvY2tfb3BzLAotCS5oYXNoaW5mbwkJPSAmZGNjcF9oYXNoaW5mbywKKwkuaC5oYXNoaW5mbwkJPSAmZGNjcF9oYXNoaW5mbywKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0CT0gY29tcGF0X2RjY3Bfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQJPSBjb21wYXRfZGNjcF9nZXRzb2Nrb3B0LAogI2VuZGlmCi0JUkVGX1BST1RPX0lOVVNFKGRjY3BfdjQpCiB9OwogCiBzdGF0aWMgc3RydWN0IG5ldF9wcm90b2NvbCBkY2NwX3Y0X3Byb3RvY29sID0gewogCS5oYW5kbGVyCT0gZGNjcF92NF9yY3YsCiAJLmVycl9oYW5kbGVyCT0gZGNjcF92NF9lcnIsCiAJLm5vX3BvbGljeQk9IDEsCisJLm5ldG5zX29rCT0gMSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfZGNjcF9vcHMgPSB7CkBAIC05OTQsNiArOTkxLDI1IEBACiAJLmZsYWdzCQk9IElORVRfUFJPVE9TV19JQ1NLLAogfTsKIAorc3RhdGljIGludCBkY2NwX3Y0X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaW5ldF9jdGxfc29ja19jcmVhdGUoJm5ldC0+ZGNjcC52NF9jdGxfc2ssIFBGX0lORVQsCisJCQkJICAgU09DS19EQ0NQLCBJUFBST1RPX0RDQ1AsIG5ldCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZGNjcF92NF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+ZGNjcC52NF9jdGxfc2spOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGRjY3BfdjRfb3BzID0geworCS5pbml0CT0gZGNjcF92NF9pbml0X25ldCwKKwkuZXhpdAk9IGRjY3BfdjRfZXhpdF9uZXQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkY2NwX3Y0X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gcHJvdG9fcmVnaXN0ZXIoJmRjY3BfdjRfcHJvdCwgMSk7CkBAIC0xMDA3LDEzICsxMDIzLDEyIEBACiAKIAlpbmV0X3JlZ2lzdGVyX3Byb3Rvc3coJmRjY3BfdjRfcHJvdG9zdyk7CiAKLQllcnIgPSBpbmV0X2Nza19jdGxfc29ja19jcmVhdGUoJmRjY3BfdjRfY3RsX3NvY2tldCwgUEZfSU5FVCwKLQkJCQkgICAgICAgU09DS19EQ0NQLCBJUFBST1RPX0RDQ1ApOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmRjY3BfdjRfb3BzKTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF91bnJlZ2lzdGVyX3Byb3Rvc3c7CisJCWdvdG8gb3V0X2Rlc3Ryb3lfY3RsX3NvY2s7CiBvdXQ6CiAJcmV0dXJuIGVycjsKLW91dF91bnJlZ2lzdGVyX3Byb3Rvc3c6CitvdXRfZGVzdHJveV9jdGxfc29jazoKIAlpbmV0X3VucmVnaXN0ZXJfcHJvdG9zdygmZGNjcF92NF9wcm90b3N3KTsKIAlpbmV0X2RlbF9wcm90b2NvbCgmZGNjcF92NF9wcm90b2NvbCwgSVBQUk9UT19EQ0NQKTsKIG91dF9wcm90b191bnJlZ2lzdGVyOgpAQCAtMTAyMyw2ICsxMDM4LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGRjY3BfdjRfZXhpdCh2b2lkKQogeworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmZGNjcF92NF9vcHMpOwogCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y0X3Byb3Rvc3cpOwogCWluZXRfZGVsX3Byb3RvY29sKCZkY2NwX3Y0X3Byb3RvY29sLCBJUFBST1RPX0RDQ1ApOwogCXByb3RvX3VucmVnaXN0ZXIoJmRjY3BfdjRfcHJvdCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY2LmMgYi9uZXQvZGNjcC9pcHY2LmMKaW5kZXggNDkwMzMzZC4uOWIxMTI5YiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2Ni5jCisrKyBiL25ldC9kY2NwL2lwdjYuYwpAQCAtMzMsOCArMzMsNyBAQAogI2luY2x1ZGUgImlwdjYuaCIKICNpbmNsdWRlICJmZWF0LmgiCiAKLS8qIFNvY2tldCB1c2VkIGZvciBzZW5kaW5nIFJTVHMgYW5kIEFDS3MgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpkY2NwX3Y2X2N0bF9zb2NrZXQ7CisvKiBUaGUgcGVyLW5ldCBkY2NwLnY2X2N0bF9zayBpcyB1c2VkIGZvciBzZW5kaW5nIFJTVHMgYW5kIEFDS3MgKi8KIAogc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X21hcHBlZDsKIHN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2Nl9hZl9vcHM7CkBAIC05NSw3ICs5NCw4IEBACiAJaW50IGVycjsKIAlfX3U2NCBzZXE7CiAKLQlzayA9IGluZXQ2X2xvb2t1cCgmaW5pdF9uZXQsICZkY2NwX2hhc2hpbmZvLCAmaGRyLT5kYWRkciwgZGgtPmRjY3BoX2Rwb3J0LAorCXNrID0gaW5ldDZfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCAmZGNjcF9oYXNoaW5mbywKKwkJCSZoZHItPmRhZGRyLCBkaC0+ZGNjcGhfZHBvcnQsCiAJCQkmaGRyLT5zYWRkciwgZGgtPmRjY3BoX3Nwb3J0LCBpbmV0Nl9paWYoc2tiKSk7CiAKIAlpZiAoc2sgPT0gTlVMTCkgewpAQCAtMjI0LDggKzIyNCw3IEBACiB9CiAKIAotc3RhdGljIGludCBkY2NwX3Y2X3NlbmRfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkJIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3N0YXRpYyBpbnQgZGNjcF92Nl9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewogCXN0cnVjdCBpbmV0Nl9yZXF1ZXN0X3NvY2sgKmlyZXE2ID0gaW5ldDZfcnNrKHJlcSk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwpAQCAtMjM0LDYgKzIzMyw3IEBACiAJc3RydWN0IGluNl9hZGRyICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CiAJc3RydWN0IGZsb3dpIGZsOwogCWludCBlcnIgPSAtMTsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAKIAltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKIAlmbC5wcm90byA9IElQUFJPVE9fRENDUDsKQEAgLTI0NSwyOSArMjQ1LDI3IEBACiAJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CiAJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCAmZmwpOwogCi0JaWYgKGRzdCA9PSBOVUxMKSB7Ci0JCW9wdCA9IG5wLT5vcHQ7CisJb3B0ID0gbnAtPm9wdDsKIAotCQlpZiAob3B0ICE9IE5VTEwgJiYgb3B0LT5zcmNydCAhPSBOVUxMKSB7Ci0JCQljb25zdCBzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopb3B0LT5zcmNydDsKKwlpZiAob3B0ICE9IE5VTEwgJiYgb3B0LT5zcmNydCAhPSBOVUxMKSB7CisJCWNvbnN0IHN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKilvcHQtPnNyY3J0OwogCi0JCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOwotCQkJZmluYWxfcCA9ICZmaW5hbDsKLQkJfQotCi0JCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOwotCQlpZiAoZXJyKQotCQkJZ290byBkb25lOwotCi0JCWlmIChmaW5hbF9wKQotCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGZpbmFsX3ApOwotCi0JCWVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDApOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZG9uZTsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZpbmFsLCAmZmwuZmw2X2RzdCk7CisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOworCQlmaW5hbF9wID0gJmZpbmFsOwogCX0KIAorCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWlmIChmaW5hbF9wKQorCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CisKKwllcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBkb25lOworCiAJc2tiID0gZGNjcF9tYWtlX3Jlc3BvbnNlKHNrLCBkc3QsIHJlcSk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCXN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwpAQCAtMjk4LDYgKzI5Niw4IEBACiAJc3RydWN0IGlwdjZoZHIgKnJ4aXA2aDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBmbG93aSBmbDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJ4c2tiLT5kc3QtPmRldik7CisJc3RydWN0IHNvY2sgKmN0bF9zayA9IG5ldC0+ZGNjcC52Nl9jdGxfc2s7CiAKIAlpZiAoZGNjcF9oZHIocnhza2IpLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX1JFU0VUKQogCQlyZXR1cm47CkBAIC0zMDUsNyArMzA1LDcgQEAKIAlpZiAoIWlwdjZfdW5pY2FzdF9kZXN0aW5hdGlvbihyeHNrYikpCiAJCXJldHVybjsKIAotCXNrYiA9IGRjY3BfY3RsX21ha2VfcmVzZXQoZGNjcF92Nl9jdGxfc29ja2V0LCByeHNrYik7CisJc2tiID0gZGNjcF9jdGxfbWFrZV9yZXNldChjdGxfc2ssIHJ4c2tiKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybjsKIApAQCAtMzI0LDkgKzMyNCw5IEBACiAJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3cocnhza2IsICZmbCk7CiAKIAkvKiBzayA9IE5VTEwsIGJ1dCBpdCBpcyBzYWZlIGZvciBub3cuIFJTVCBzb2NrZXQgcmVxdWlyZWQuICovCi0JaWYgKCFpcDZfZHN0X2xvb2t1cChOVUxMLCAmc2tiLT5kc3QsICZmbCkpIHsKKwlpZiAoIWlwNl9kc3RfbG9va3VwKGN0bF9zaywgJnNrYi0+ZHN0LCAmZmwpKSB7CiAJCWlmICh4ZnJtX2xvb2t1cCgmc2tiLT5kc3QsICZmbCwgTlVMTCwgMCkgPj0gMCkgewotCQkJaXA2X3htaXQoZGNjcF92Nl9jdGxfc29ja2V0LT5zaywgc2tiLCAmZmwsIE5VTEwsIDApOworCQkJaXA2X3htaXQoY3RsX3NrLCBza2IsICZmbCwgTlVMTCwgMCk7CiAJCQlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9PVVRTRUdTKTsKIAkJCURDQ1BfSU5DX1NUQVRTX0JIKERDQ1BfTUlCX09VVFJTVFMpOwogCQkJcmV0dXJuOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJaWYgKHJlcSAhPSBOVUxMKQogCQlyZXR1cm4gZGNjcF9jaGVja19yZXEoc2ssIHNrYiwgcmVxLCBwcmV2KTsKIAotCW5zayA9IF9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKCZpbml0X25ldCwgJmRjY3BfaGFzaGluZm8sCisJbnNrID0gX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQoc29ja19uZXQoc2spLCAmZGNjcF9oYXNoaW5mbywKIAkJCQkJICZpcGgtPnNhZGRyLCBkaC0+ZGNjcGhfc3BvcnQsCiAJCQkJCSAmaXBoLT5kYWRkciwgbnRvaHMoZGgtPmRjY3BoX2Rwb3J0KSwKIAkJCQkJIGluZXQ2X2lpZihza2IpKTsKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCWRyZXEtPmRyZXFfaXNzCSAgID0gZGNjcF92Nl9pbml0X3NlcXVlbmNlKHNrYik7CiAJZHJlcS0+ZHJlcV9zZXJ2aWNlID0gc2VydmljZTsKIAotCWlmIChkY2NwX3Y2X3NlbmRfcmVzcG9uc2Uoc2ssIHJlcSwgTlVMTCkpCisJaWYgKGRjY3BfdjZfc2VuZF9yZXNwb25zZShzaywgcmVxKSkKIAkJZ290byBkcm9wX2FuZF9mcmVlOwogCiAJaW5ldDZfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHNrLCByZXEsIERDQ1BfVElNRU9VVF9JTklUKTsKQEAgLTYyNSw3ICs2MjUsNyBAQAogCW5ld2luZXQtPmRhZGRyID0gbmV3aW5ldC0+c2FkZHIgPSBuZXdpbmV0LT5yY3Zfc2FkZHIgPSBMT09QQkFDSzRfSVBWNjsKIAogCV9faW5ldDZfaGFzaChuZXdzayk7Ci0JaW5ldF9pbmhlcml0X3BvcnQoc2ssIG5ld3NrKTsKKwlfX2luZXRfaW5oZXJpdF9wb3J0KHNrLCBuZXdzayk7CiAKIAlyZXR1cm4gbmV3c2s7CiAKQEAgLTc5MSw4ICs3OTEsOCBAQAogCiAJLyogU3RlcCAyOgogCSAqCUxvb2sgdXAgZmxvdyBJRCBpbiB0YWJsZSBhbmQgZ2V0IGNvcnJlc3BvbmRpbmcgc29ja2V0ICovCi0Jc2sgPSBfX2luZXQ2X2xvb2t1cCgmaW5pdF9uZXQsICZkY2NwX2hhc2hpbmZvLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsCi0JCQkgICAgZGgtPmRjY3BoX3Nwb3J0LAorCXNrID0gX19pbmV0Nl9sb29rdXAoZGV2X25ldChza2ItPmRzdC0+ZGV2KSwgJmRjY3BfaGFzaGluZm8sCisJCQkgICAgJmlwdjZfaGRyKHNrYiktPnNhZGRyLCBkaC0+ZGNjcGhfc3BvcnQsCiAJCQkgICAgJmlwdjZfaGRyKHNrYiktPmRhZGRyLCBudG9ocyhkaC0+ZGNjcGhfZHBvcnQpLAogCQkJICAgIGluZXQ2X2lpZihza2IpKTsKIAkvKgpAQCAtMTEwMiw4ICsxMTAyLDYgQEAKIAkudHdza19vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZGNjcDZfdGltZXdhaXRfc29jayksCiB9OwogCi1ERUZJTkVfUFJPVE9fSU5VU0UoZGNjcF92NikKLQogc3RhdGljIHN0cnVjdCBwcm90byBkY2NwX3Y2X3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIkRDQ1B2NiIsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLApAQCAtMTEyOCwxMiArMTEyNiwxMSBAQAogCS5vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgZGNjcDZfc29jayksCiAJLnJza19wcm90CSAgID0gJmRjY3A2X3JlcXVlc3Rfc29ja19vcHMsCiAJLnR3c2tfcHJvdAkgICA9ICZkY2NwNl90aW1ld2FpdF9zb2NrX29wcywKLQkuaGFzaGluZm8JICAgPSAmZGNjcF9oYXNoaW5mbywKKwkuaC5oYXNoaW5mbwkgICA9ICZkY2NwX2hhc2hpbmZvLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfZGNjcF9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9kY2NwX2dldHNvY2tvcHQsCiAjZW5kaWYKLQlSRUZfUFJPVE9fSU5VU0UoZGNjcF92NikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgZGNjcF92Nl9wcm90b2NvbCA9IHsKQEAgLTExNzYsNiArMTE3MywyNSBAQAogCS5mbGFncwkJPSBJTkVUX1BST1RPU1dfSUNTSywKIH07CiAKK3N0YXRpYyBpbnQgZGNjcF92Nl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW50IGVycjsKKworCWVyciA9IGluZXRfY3RsX3NvY2tfY3JlYXRlKCZuZXQtPmRjY3AudjZfY3RsX3NrLCBQRl9JTkVUNiwKKwkJCQkgICBTT0NLX0RDQ1AsIElQUFJPVE9fRENDUCwgbmV0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkY2NwX3Y2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbmV0X2N0bF9zb2NrX2Rlc3Ryb3kobmV0LT5kY2NwLnY2X2N0bF9zayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZGNjcF92Nl9vcHMgPSB7CisJLmluaXQgICA9IGRjY3BfdjZfaW5pdF9uZXQsCisJLmV4aXQgICA9IGRjY3BfdjZfZXhpdF9uZXQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkY2NwX3Y2X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gcHJvdG9fcmVnaXN0ZXIoJmRjY3BfdjZfcHJvdCwgMSk7CkBAIC0xMTg5LDEzICsxMjA1LDEzIEBACiAKIAlpbmV0Nl9yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y2X3Byb3Rvc3cpOwogCi0JZXJyID0gaW5ldF9jc2tfY3RsX3NvY2tfY3JlYXRlKCZkY2NwX3Y2X2N0bF9zb2NrZXQsIFBGX0lORVQ2LAotCQkJCSAgICAgICBTT0NLX0RDQ1AsIElQUFJPVE9fRENDUCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmZGNjcF92Nl9vcHMpOwogCWlmIChlcnIgIT0gMCkKLQkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcm90b3N3OworCQlnb3RvIG91dF9kZXN0cm95X2N0bF9zb2NrOwogb3V0OgogCXJldHVybiBlcnI7Ci1vdXRfdW5yZWdpc3Rlcl9wcm90b3N3OgorCitvdXRfZGVzdHJveV9jdGxfc29jazoKIAlpbmV0Nl9kZWxfcHJvdG9jb2woJmRjY3BfdjZfcHJvdG9jb2wsIElQUFJPVE9fRENDUCk7CiAJaW5ldDZfdW5yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y2X3Byb3Rvc3cpOwogb3V0X3VucmVnaXN0ZXJfcHJvdG86CkBAIC0xMjA1LDYgKzEyMjEsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGNjcF92Nl9leGl0KHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZkY2NwX3Y2X29wcyk7CiAJaW5ldDZfZGVsX3Byb3RvY29sKCZkY2NwX3Y2X3Byb3RvY29sLCBJUFBST1RPX0RDQ1ApOwogCWluZXQ2X3VucmVnaXN0ZXJfcHJvdG9zdygmZGNjcF92Nl9wcm90b3N3KTsKIAlwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Y2X3Byb3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCAwMjdkMTgxLi4zM2FkNDgzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCQkgKiBjb3VudGVyIChiYWNrb2ZmLCBtb25pdG9yZWQgYnkgZGNjcF9yZXNwb25zZV90aW1lcikuCiAJCQkgKi8KIAkJCXJlcS0+cmV0cmFucysrOwotCQkJcmVxLT5yc2tfb3BzLT5ydHhfc3luX2FjayhzaywgcmVxLCBOVUxMKTsKKwkJCXJlcS0+cnNrX29wcy0+cnR4X3N5bl9hY2soc2ssIHJlcSk7CiAJCX0KIAkJLyogTmV0d29yayBEdXBsaWNhdGUsIGRpc2NhcmQgcGFja2V0ICovCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCAzYjc2M2RiLi4xZjhhOWI2IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMTI2LDcgKzEyNiw2IEBACiAKIAkJRENDUF9JTkNfU1RBVFMoRENDUF9NSUJfT1VUU0VHUyk7CiAKLQkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKIAkJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAwKTsKIAkJcmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTsKIAl9CkBAIC0zNDgsNyArMzQ3LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfbWFrZV9yZXNwb25zZSk7CiAKIC8qIGFuc3dlciBvZmZlbmRpbmcgcGFja2V0IGluIEByY3Zfc2tiIHdpdGggUmVzZXQgZnJvbSBjb250cm9sIHNvY2tldCBAY3RsICovCi1zdHJ1Y3Qgc2tfYnVmZiAqZGNjcF9jdGxfbWFrZV9yZXNldChzdHJ1Y3Qgc29ja2V0ICpjdGwsIHN0cnVjdCBza19idWZmICpyY3Zfc2tiKQorc3RydWN0IHNrX2J1ZmYgKmRjY3BfY3RsX21ha2VfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqcmN2X3NrYikKIHsKIAlzdHJ1Y3QgZGNjcF9oZHIgKnJ4ZGggPSBkY2NwX2hkcihyY3Zfc2tiKSwgKmRoOwogCXN0cnVjdCBkY2NwX3NrYl9jYiAqZGNiID0gRENDUF9TS0JfQ0IocmN2X3NrYik7CkBAIC0zNTgsMTEgKzM1NywxMSBAQAogCXN0cnVjdCBkY2NwX2hkcl9yZXNldCAqZGhyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlza2IgPSBhbGxvY19za2IoY3RsLT5zay0+c2tfcHJvdC0+bWF4X2hlYWRlciwgR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiKHNrLT5za19wcm90LT5tYXhfaGVhZGVyLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0Jc2tiX3Jlc2VydmUoc2tiLCBjdGwtPnNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKKwlza2JfcmVzZXJ2ZShza2IsIHNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKIAogCS8qIFN3YXAgdGhlIHNlbmQgYW5kIHRoZSByZWNlaXZlLiAqLwogCWRoID0gZGNjcF96ZXJvZWRfaGRyKHNrYiwgZGNjcF9oZHJfcmVzZXRfbGVuKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IGUzZjVkMzcuLjlkZmUyNDcgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAKICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMTAxMCwzMyArMTAwOSwxNCBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3NodXRkb3duKTsKIAotc3RhdGljIGludCBfX2luaXQgZGNjcF9taWJfaW5pdCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgZGNjcF9taWJfaW5pdCh2b2lkKQogewotCWludCByYyA9IC1FTk9NRU07Ci0KLQlkY2NwX3N0YXRpc3RpY3NbMF0gPSBhbGxvY19wZXJjcHUoc3RydWN0IGRjY3BfbWliKTsKLQlpZiAoZGNjcF9zdGF0aXN0aWNzWzBdID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCi0JZGNjcF9zdGF0aXN0aWNzWzFdID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBkY2NwX21pYik7Ci0JaWYgKGRjY3Bfc3RhdGlzdGljc1sxXSA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlX29uZTsKLQotCXJjID0gMDsKLW91dDoKLQlyZXR1cm4gcmM7Ci1vdXRfZnJlZV9vbmU6Ci0JZnJlZV9wZXJjcHUoZGNjcF9zdGF0aXN0aWNzWzBdKTsKLQlkY2NwX3N0YXRpc3RpY3NbMF0gPSBOVUxMOwotCWdvdG8gb3V0OwotCisJcmV0dXJuIHNubXBfbWliX2luaXQoKHZvaWQqKilkY2NwX3N0YXRpc3RpY3MsIHNpemVvZihzdHJ1Y3QgZGNjcF9taWIpKTsKIH0KIAotc3RhdGljIHZvaWQgZGNjcF9taWJfZXhpdCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGRjY3BfbWliX2V4aXQodm9pZCkKIHsKLQlmcmVlX3BlcmNwdShkY2NwX3N0YXRpc3RpY3NbMF0pOwotCWZyZWVfcGVyY3B1KGRjY3Bfc3RhdGlzdGljc1sxXSk7Ci0JZGNjcF9zdGF0aXN0aWNzWzBdID0gZGNjcF9zdGF0aXN0aWNzWzFdID0gTlVMTDsKKwlzbm1wX21pYl9mcmVlKCh2b2lkKiopZGNjcF9zdGF0aXN0aWNzKTsKIH0KIAogc3RhdGljIGludCB0aGFzaF9lbnRyaWVzOwpAQCAtMTA1Nyw2ICsxMDM3LDkgQEAKIAlpbnQgZWhhc2hfb3JkZXIsIGJoYXNoX29yZGVyLCBpOwogCWludCByYyA9IC1FTk9CVUZTOwogCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgZGNjcF9za2JfY2IpID4KKwkJICAgICBGSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIGNiKSk7CisKIAlkY2NwX2hhc2hpbmZvLmJpbmRfYnVja2V0X2NhY2hlcCA9CiAJCWttZW1fY2FjaGVfY3JlYXRlKCJkY2NwX2JpbmRfYnVja2V0IiwKIAkJCQkgIHNpemVvZihzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCksIDAsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCBhY2Q0OGVlLi5mYzJlZmU4IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAKIAljYiA9IEROX1NLQl9DQihza2IpOwogCXNrLT5za19hY2tfYmFja2xvZy0tOwotCW5ld3NrID0gZG5fYWxsb2Nfc29jayhzay0+c2tfbmV0LCBuZXdzb2NrLCBzay0+c2tfYWxsb2NhdGlvbik7CisJbmV3c2sgPSBkbl9hbGxvY19zb2NrKHNvY2tfbmV0KHNrKSwgbmV3c29jaywgc2stPnNrX2FsbG9jYXRpb24pOwogCWlmIChuZXdzayA9PSBOVUxMKSB7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtMjA4OSw3ICsyMDg5LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopcHRyOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoKGV2ZW50KSB7CkBAIC0yMzIwLDI1ICsyMzIwLDggQEAKIAogc3RhdGljIGludCBkbl9zb2NrZXRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHNlcV9maWxlICpzZXE7Ci0JaW50IHJjID0gLUVOT01FTTsKLQlzdHJ1Y3QgZG5faXRlcl9zdGF0ZSAqcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXMpCi0JCWdvdG8gb3V0OwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmZG5fc29ja2V0X3NlcV9vcHMpOwotCWlmIChyYykKLQkJZ290byBvdXRfa2ZyZWU7Ci0KLQlzZXEJCT0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNlcS0+cHJpdmF0ZQk9IHM7Ci0JbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOwotb3V0OgotCXJldHVybiByYzsKLW91dF9rZnJlZToKLQlrZnJlZShzKTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmZG5fc29ja2V0X3NlcV9vcHMsCisJCQlzaXplb2Yoc3RydWN0IGRuX2l0ZXJfc3RhdGUpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG5fc29ja2V0X3NlcV9mb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9kZXYuYyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKaW5kZXggMWJiZmNlNS4uMmYwYWMzYyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9kZXYuYworKysgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCkBAIC02MjUsNyArNjI1LDcgQEAKIAogc3RhdGljIGludCBkbl9ubF9kZWxhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVgrMV07CiAJc3RydWN0IGRuX2RldiAqZG5fZGI7CiAJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwpAQCAtNjYzLDcgKzY2Myw3IEBACiAKIHN0YXRpYyBpbnQgZG5fbmxfbmV3YWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYKzFdOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRuX2RldiAqZG5fZGI7CkBAIC03NzksNyArNzc5LDcgQEAKIAogc3RhdGljIGludCBkbl9ubF9kdW1wX2lmYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWludCBpZHgsIGRuX2lkeCA9IDAsIHNraXBfbmRldnMsIHNraXBfbmFkZHI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZG5fZGV2ICpkbl9kYjsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZmliLmMgYi9uZXQvZGVjbmV0L2RuX2ZpYi5jCmluZGV4IDRhYTlhNDIuLjI3ZWEyZTkgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZmliLmMKKysrIGIvbmV0L2RlY25ldC9kbl9maWIuYwpAQCAtNTA0LDcgKzUwNCw3IEBACiAKIHN0YXRpYyBpbnQgZG5fZmliX3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgZG5fZmliX3RhYmxlICp0YjsKIAlzdHJ1Y3QgcnRhdHRyICoqcnRhID0gYXJnOwogCXN0cnVjdCBydG1zZyAqciA9IE5MTVNHX0RBVEEobmxoKTsKQEAgLTUyNCw3ICs1MjQsNyBAQAogCiBzdGF0aWMgaW50IGRuX2ZpYl9ydG1fbmV3cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IGRuX2ZpYl90YWJsZSAqdGI7CiAJc3RydWN0IHJ0YXR0ciAqKnJ0YSA9IGFyZzsKIAlzdHJ1Y3QgcnRtc2cgKnIgPSBOTE1TR19EQVRBKG5saCk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggOWRjMGFiYi4uMmY2NjVhNSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtNTgwLDcgKzU4MCw3IEBACiAJc3RydWN0IGRuX2RldiAqZG4gPSAoc3RydWN0IGRuX2RldiAqKWRldi0+ZG5fcHRyOwogCXVuc2lnbmVkIGNoYXIgcGFkbGVuID0gMDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCWdvdG8gZHVtcF9pdDsKIAogCWlmIChkbiA9PSBOVUxMKQpAQCAtMTUxMiw3ICsxNTEyLDcgQEAKICAqLwogc3RhdGljIGludCBkbl9jYWNoZV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IGluX3NrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChpbl9za2ItPnNrKTsKIAlzdHJ1Y3QgcnRhdHRyICoqcnRhID0gYXJnOwogCXN0cnVjdCBydG1zZyAqcnRtID0gTkxNU0dfREFUQShubGgpOwogCXN0cnVjdCBkbl9yb3V0ZSAqcnQgPSBOVUxMOwpAQCAtMTYwMSw3ICsxNjAxLDcgQEAKICAqLwogaW50IGRuX2NhY2hlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgZG5fcm91dGUgKnJ0OwogCWludCBoLCBzX2g7CiAJaW50IGlkeCwgc19pZHg7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKaW5kZXggZTA5ZDkxNS4uM2EyODMwYSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl90YWJsZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAKIGludCBkbl9maWJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXVuc2lnbmVkIGludCBoLCBzX2g7CiAJdW5zaWduZWQgaW50IGUgPSAwLCBzX2U7CiAJc3RydWN0IGRuX2ZpYl90YWJsZSAqdGI7CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCBiYzBmNjI1Li42OGQxNTQ0IDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTEwNjQsNyArMTA2NCw3IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBlY19kZXZpY2UgKmVkZXYgPSBkZXYtPmVjX3B0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCWdvdG8gZHJvcDsKIAogCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QpCkBAIC0xMTIxLDcgKzExMjEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCBlY19kZXZpY2UgKmVkZXY7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlzd2l0Y2ggKG1zZykgewpkaWZmIC0tZ2l0IGEvbmV0L2V0aGVybmV0L2V0aC5jIGIvbmV0L2V0aGVybmV0L2V0aC5jCmluZGV4IGE3YjQxNzUuLmE4MDgzOWIgMTAwNjQ0Ci0tLSBhL25ldC9ldGhlcm5ldC9ldGguYworKysgYi9uZXQvZXRoZXJuZXQvZXRoLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogc3RhdGljIGludCBldGhfdmFsaWRhdGVfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9LY29uZmlnIGIvbmV0L2llZWU4MDIxMS9LY29uZmlnCmluZGV4IGJkNTAxMDQuLjk0ZWQ3ZDMgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvS2NvbmZpZworKysgYi9uZXQvaWVlZTgwMjExL0tjb25maWcKQEAgLTcxLDQgKzcxLDMgQEAKIAlUaGlzIGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSBhbmQgaXQgd2lsbCBiZSBjYWxsZWQKIAkiaWVlZTgwMjExX2NyeXB0X3RraXAiLgogCi1zb3VyY2UgIm5ldC9pZWVlODAyMTEvc29mdG1hYy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9NYWtlZmlsZSBiL25ldC9pZWVlODAyMTEvTWFrZWZpbGUKaW5kZXggNzk2YTdjNy4uZjk4ODQxNyAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9NYWtlZmlsZQorKysgYi9uZXQvaWVlZTgwMjExL01ha2VmaWxlCkBAIC0xMCw0ICsxMCwzIEBACiAJaWVlZTgwMjExX3d4Lm8gXAogCWllZWU4MDIxMV9nZW8ubwogCi1vYmotJChDT05GSUdfSUVFRTgwMjExX1NPRlRNQUMpICs9IHNvZnRtYWMvCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwppbmRleCAxZTNmODdjLi4yMDBlZTFlIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTI3MSw3ICsyNzEsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CiAJaW50IHJlcywgaGRybGVuOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWYgKGNyeXB0ID09IE5VTEwgfHwgY3J5cHQtPm9wcy0+ZGVjcnlwdF9tcGR1ID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtMjgzLDggKzI4MiwxMiBAQAogCXJlcyA9IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXBkdShza2IsIGhkcmxlbiwgY3J5cHQtPnByaXYpOwogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJkZWNyeXB0aW9uIGZhaWxlZCAoU0E9JXMiCi0JCQkJICAgICAiKSByZXM9JWRcbiIsIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjIpLCByZXMpOworCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiZGVjcnlwdGlvbiBmYWlsZWQgKFNBPSIgTUFDX0ZNVAorCQkJCSAgICAgIikgcmVzPSVkXG4iLAorCQkJCSAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwKKwkJCQkgICAgIGhkci0+YWRkcjJbMl0sIGhkci0+YWRkcjJbM10sCisJCQkJICAgICBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdLAorCQkJCSAgICAgcmVzKTsKIAkJaWYgKHJlcyA9PSAtMikKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCBJQ1YgIgogCQkJCQkgICAgICJtaXNtYXRjaCAoa2V5ICVkKVxuIiwKQEAgLTMwNCw3ICszMDcsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CiAJaW50IHJlcywgaGRybGVuOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAJaWYgKGNyeXB0ID09IE5VTEwgfHwgY3J5cHQtPm9wcy0+ZGVjcnlwdF9tc2R1ID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtMzE3LDggKzMxOSwxMiBAQAogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTVNEVSBkZWNyeXB0aW9uL01JQyB2ZXJpZmljYXRpb24gZmFpbGVkIgotCQkgICAgICAgIiAoU0E9JXMga2V5aWR4PSVkKVxuIiwKLQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksIGtleWlkeCk7CisJCSAgICAgICAiIChTQT0iIE1BQ19GTVQgIiBrZXlpZHg9JWQpXG4iLAorCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLAorCQkgICAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwKKwkJICAgICAgIGhkci0+YWRkcjJbMl0sIGhkci0+YWRkcjJbM10sCisJCSAgICAgICBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdLAorCQkgICAgICAga2V5aWR4KTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDYyLDggKzQ2OCwxMCBAQAogCQkJICogZnJhbWVzIHNpbGVudGx5IGluc3RlYWQgb2YgZmlsbGluZyBzeXN0ZW0gbG9nIHdpdGgKIAkJCSAqIHRoZXNlIHJlcG9ydHMuICovCiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiRGVjcnlwdGlvbiBmYWlsZWQgKG5vdCBzZXQpIgotCQkJCQkgICAgICIgKFNBPSVzKVxuIiwKLQkJCQkJICAgICBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSk7CisJCQkJCSAgICAgIiAoU0E9IiBNQUNfRk1UICIpXG4iLAorCQkJCQkgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sCisJCQkJCSAgICAgaGRyLT5hZGRyMlsyXSwgaGRyLT5hZGRyMlszXSwKKwkJCQkJICAgICBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdKTsKIAkJCWllZWUtPmllZWVfc3RhdHMucnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZSsrOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CkBAIC00NzQsOCArNDgyLDEwIEBACiAJCSAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCAmJiBpZWVlLT5ob3N0X2RlY3J5cHQgJiYKIAkJICAgIChrZXlpZHggPSBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdChpZWVlLCBza2IsIGNyeXB0KSkgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBkZWNyeXB0IG1nbXQ6OmF1dGggIgotCQkJICAgICAgICJmcm9tICVzXG4iLCBkZXYtPm5hbWUsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMikpOworCQkJICAgICAgICJmcm9tICIgTUFDX0ZNVCAiXG4iLCBkZXYtPm5hbWUsCisJCQkgICAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwKKwkJCSAgICAgICBoZHItPmFkZHIyWzJdLCBoZHItPmFkZHIyWzNdLAorCQkJICAgICAgIGhkci0+YWRkcjJbNF0sIGhkci0+YWRkcjJbNV0pOwogCQkJLyogVE9ETzogY291bGQgaW5mb3JtIGhvc3RhcGQgYWJvdXQgdGhpcyBzbyB0aGF0IGl0CiAJCQkgKiBjb3VsZCBzZW5kIGF1dGggZmFpbHVyZSByZXBvcnQgKi8KIAkJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTY1Myw4ICs2NjMsMTEgQEAKIAkJCSAqIGNvbmZpZ3VyZWQgKi8KIAkJfSBlbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJlbmNyeXB0aW9uIGNvbmZpZ3VyZWQsIGJ1dCBSWCAiCi0JCQkJCSAgICAgImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSVzIgotCQkJCQkgICAgICIpXG4iLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIyKSk7CisJCQkJCSAgICAgImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSIKKwkJCQkJICAgICBNQUNfRk1UICIpXG4iLAorCQkJCQkgICAgIGhkci0+YWRkcjJbMF0sIGhkci0+YWRkcjJbMV0sCisJCQkJCSAgICAgaGRyLT5hZGRyMlsyXSwgaGRyLT5hZGRyMlszXSwKKwkJCQkJICAgICBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCX0KQEAgLTY2Miw5ICs2NzUsMTEgQEAKIAlpZiAoY3J5cHQgJiYgIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYgIWllZWUtPm9wZW5fd2VwICYmCiAJICAgICFpZWVlODAyMTFfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiKSkgewogCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiZHJvcHBlZCB1bmVuY3J5cHRlZCBSWCBkYXRhICIKLQkJCQkgICAgICJmcmFtZSBmcm9tICVzIgorCQkJCSAgICAgImZyYW1lIGZyb20gIiBNQUNfRk1UCiAJCQkJICAgICAiIChkcm9wX3VuZW5jcnlwdGVkPTEpXG4iLAotCQkJCSAgICAgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMikpOworCQkJCSAgICAgaGRyLT5hZGRyMlswXSwgaGRyLT5hZGRyMlsxXSwKKwkJCQkgICAgIGhkci0+YWRkcjJbMl0sIGhkci0+YWRkcjJbM10sCisJCQkJICAgICBoZHItPmFkZHIyWzRdLCBoZHItPmFkZHIyWzVdKTsKIAkJZ290byByeF9kcm9wcGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgxMTY1MS4uMDAwMDAwMAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWNvbmZpZyBJRUVFODAyMTFfU09GVE1BQwotCXRyaXN0YXRlICJTb2Z0d2FyZSBNQUMgYWRkLW9uIHRvIHRoZSBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIgotCWRlcGVuZHMgb24gSUVFRTgwMjExICYmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBXSVJFTEVTU19FWFQKLQlzZWxlY3QgSUVFRTgwMjExX0NSWVBUX1dFUAotCS0tLWhlbHAtLS0KLQlUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBzb2Z0d2FyZSBNQUMgYWRkb24KLQlmb3IgdGhlIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2suCi0KLWNvbmZpZyBJRUVFODAyMTFfU09GVE1BQ19ERUJVRwotCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQiCi0JZGVwZW5kcyBvbiBJRUVFODAyMTFfU09GVE1BQwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL01ha2VmaWxlIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNiMzkxLi4wMDAwMDAwCi0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotb2JqLSQoQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDKSArPSBpZWVlODAyMTFzb2Z0bWFjLm8KLWllZWU4MDIxMXNvZnRtYWMtb2JqcyA6PSBcCi0JCQlpZWVlODAyMTFzb2Z0bWFjX2lvLm8gXAotCQkJaWVlZTgwMjExc29mdG1hY19hdXRoLm8gXAotCQkJaWVlZTgwMjExc29mdG1hY19tb2R1bGUubyBcCi0JCQlpZWVlODAyMTFzb2Z0bWFjX3NjYW4ubyBcCi0JCQlpZWVlODAyMTFzb2Z0bWFjX3d4Lm8gXAotCQkJaWVlZTgwMjExc29mdG1hY19hc3NvYy5vIFwKLQkJCWllZWU4MDIxMXNvZnRtYWNfZXZlbnQubwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZDEyMmQuLjAwMDAwMDAKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzb2Z0bWFjJ3MgYXNzb2NpYXRpb24gbG9naWMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICovCi0KLSNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKLQotLyoKLSAqIE92ZXJ2aWV3Ci0gKgotICogQmVmb3JlIHlvdSBjYW4gYXNzb2NpYXRlLCB5b3UgaGF2ZSB0byBhdXRoZW50aWNhdGUuCi0gKgotICovCi0KLS8qIFNlbmRzIG91dCBhbiBhc3NvY2lhdGlvbiByZXF1ZXN0IHRvIHRoZSBkZXNpcmVkIEFQICovCi1zdGF0aWMgdm9pZAotaWVlZTgwMjExc29mdG1hY19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBjaGFubmVsIGZvciB0aGlzIG5ldHdvcmsgKi8KLQltYWMtPnNldF9jaGFubmVsKG1hYy0+ZGV2LCBuZXQtPmNoYW5uZWwpOwotCi0JLyogU2VuZCBhc3NvY2lhdGlvbiByZXF1ZXN0ICovCi0JaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIG5ldCwgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSwgMCk7Ci0KLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggInNlbnQgYXNzb2NpYXRpb24gcmVxdWVzdCFcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQgPSAwOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZSAqLwotCi0JLyogU2V0IGEgdGltZXIgZm9yIHRpbWVvdXQgKi8KLQkvKiBGSVhNRTogbWFrZSB0aW1lb3V0IGNvbmZpZ3VyYWJsZSAqLwotCWlmIChsaWtlbHkobWFjLT5ydW5uaW5nKSkKLQkJcXVldWVfZGVsYXllZF93b3JrKG1hYy0+d3EsICZtYWMtPmFzc29jaW5mby50aW1lb3V0LCA1ICogSFopOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotfQotCi12b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSwKLQkJCSAgICAgYXNzb2NpbmZvLnRpbWVvdXQud29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbjsKLQotCW11dGV4X2xvY2soJm1hYy0+YXNzb2NpbmZvLm11dGV4KTsKLQkvKiB3ZSBtaWdodCByYWNlIGFnYWluc3QgaWVlZTgwMjExc29mdG1hY19oYW5kbGVfYXNzb2NfcmVzcG9uc2UsCi0JICogc28gbWFrZSBzdXJlIG9ubHkgb25lIG9mIHVzIGRvZXMgc29tZXRoaW5nICovCi0JaWYgKCFtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZykKLQkJZ290byBvdXQ7Ci0JbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOwotCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKLQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMDsKLQotCW4gPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZChtYWMsIG1hYy0+YXNzb2NpbmZvLmJzc2lkKTsKLQotCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiYXNzb2MgcmVxdWVzdCB0aW1lZCBvdXQhXG4iKTsKLQlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfVElNRU9VVCwgbik7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7Ci19Ci0KLXZvaWQKLWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQlpZiAobWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJm1hYy0+YXNzb2NpbmZvLnRpbWVvdXQpOwotCi0JbmV0aWZfY2Fycmllcl9vZmYobWFjLT5kZXYpOwotCi0JbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCA9IDA7Ci0JbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOwotCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKLQlpZWVlODAyMTFzb2Z0bWFjX2luaXRfYnNzKG1hYyk7Ci0JaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotfQotCi0vKiBTZW5kcyBvdXQgYSBkaXNhc3NvY2lhdGlvbiByZXF1ZXN0IHRvIHRoZSBkZXNpcmVkIEFQICovCi12b2lkCi1pZWVlODAyMTFzb2Z0bWFjX3NlbmRfZGlzYXNzb2NfcmVxKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1MTYgcmVhc29uKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKmZvdW5kOwotCi0JaWYgKG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkICYmIG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpIHsKLQkJZm91bmQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKG1hYywgbWFjLT5hc3NvY2luZm8uYnNzaWQpOwotCQlpZiAoZm91bmQpCi0JCQlpZWVlODAyMTFzb2Z0bWFjX3NlbmRfbWd0X2ZyYW1lKG1hYywgZm91bmQsIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQywgcmVhc29uKTsKLQl9Ci0KLQlpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKG1hYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci13ZV9zdXBwb3J0X2FsbF9iYXNpY19yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggKmZyb20sIHU4IGZyb21fbGVuKQotewotCWludCBpZHg7Ci0JdTggcmF0ZTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgKGZyb21fbGVuKTsgaWR4KyspIHsKLQkJcmF0ZSA9IChmcm9tKVtpZHhdOwotCQlpZiAoIShyYXRlICYgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykpCi0JCQljb250aW51ZTsKLQkJcmF0ZSAmPSB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSzsKLQkJaWYgKCFpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mb19yYXRlX3N1cHBvcnRlZCgmbWFjLT5yYXRlc2luZm8sIHJhdGUpKQotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50Ci1uZXR3b3JrX21hdGNoZXNfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXQpCi17Ci0JLyogd2UgY2Fubm90IGFzc29jaWF0ZSB0byBuZXR3b3JrcyB3aG9zZSBuYW1lIHdlIGRvbid0IGtub3cgKi8KLQlpZiAoaWVlZTgwMjExX2lzX2VtcHR5X2Vzc2lkKG5ldC0+c3NpZCwgbmV0LT5zc2lkX2xlbikpCi0JCXJldHVybiAwOwotCS8qIGRvIG5vdCBhc3NvY2lhdGUgdG8gYSBuZXR3b3JrIHdob3NlIEJTU0Jhc2ljUmF0ZVNldCB3ZSBjYW5ub3Qgc3VwcG9ydCAqLwotCWlmICghd2Vfc3VwcG9ydF9hbGxfYmFzaWNfcmF0ZXMobWFjLCBuZXQtPnJhdGVzLCBuZXQtPnJhdGVzX2xlbikpCi0JCXJldHVybiAwOwotCS8qIGRvIHdlIHJlYWxseSBuZWVkIHRvIGNoZWNrIHRoZSBleCByYXRlcz8gKi8KLQlpZiAoIXdlX3N1cHBvcnRfYWxsX2Jhc2ljX3JhdGVzKG1hYywgbmV0LT5yYXRlc19leCwgbmV0LT5yYXRlc19leF9sZW4pKQotCQlyZXR1cm4gMDsKLQotCS8qIGFzc3VtZSB0aGF0IHVzZXJzIGtub3cgd2hhdCB0aGV5J3JlIGRvaW5nIC4uLgotCSAqIChub3RlIHdlIGRvbid0IGxldCB0aGVtIHNlbGVjdCBhIG5ldCB3ZSdyZSBpbmNvbXBhdGlibGUgd2l0aCkgKi8KLQlpZiAobWFjLT5hc3NvY2luZm8uYnNzZml4ZWQpIHsKLQkJcmV0dXJuICFtZW1jbXAobWFjLT5hc3NvY2luZm8uYnNzaWQsIG5ldC0+YnNzaWQsIEVUSF9BTEVOKTsKLQl9Ci0KLQkvKiBpZiAnQU5ZJyBuZXR3b3JrIHJlcXVlc3RlZCwgdGFrZSBhbnkgdGhhdCBkb2Vzbid0IGhhdmUgcHJpdmFjeSBlbmFibGVkICovCi0JaWYgKG1hYy0+YXNzb2NpbmZvLnJlcV9lc3NpZC5sZW4gPT0gMAotCSAgICAmJiAhKG5ldC0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKLQkJcmV0dXJuIDE7Ci0JaWYgKG5ldC0+c3NpZF9sZW4gIT0gbWFjLT5hc3NvY2luZm8ucmVxX2Vzc2lkLmxlbikKLQkJcmV0dXJuIDA7Ci0JaWYgKCFtZW1jbXAobmV0LT5zc2lkLCBtYWMtPmFzc29jaW5mby5yZXFfZXNzaWQuZGF0YSwgbWFjLT5hc3NvY2luZm8ucmVxX2Vzc2lkLmxlbikpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZXZlbnRfdHlwZSwgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKCZtYWMtPmFzc29jaW5mby53b3JrLndvcmspOwotfQotCi1zdGF0aWMgdm9pZAotaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZXZlbnRfdHlwZSwgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKLQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSEVOVElDQVRFRDoKLQkJaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKCZtYWMtPmFzc29jaW5mby53b3JrLndvcmspOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9GQUlMRUQ6Ci0JY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhfVElNRU9VVDoKLQkJaWVlZTgwMjExc29mdG1hY19kaXNhc3NvYyhtYWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGhhbmRsZSB1c2Vyc3BhY2UgcmVxdWVzdHMgKGFzeW5jaHJvbm91c2x5KSAqLwotdm9pZAotaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UsCi0JCQkgICAgIGFzc29jaW5mby53b3JrLndvcmspOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKmZvdW5kID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldCA9IE5VTEwsICpiZXN0ID0gTlVMTDsKLQlpbnQgYnNzdmFsaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCW11dGV4X2xvY2soJm1hYy0+YXNzb2NpbmZvLm11dGV4KTsKLQotCWlmICghbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcpCi0JCWdvdG8gb3V0OwotCi0JLyogaWVlZTgwMjExX2Rpc2Fzc29jIG1pZ2h0IGNsZWFyIHRoaXMgKi8KLQlic3N2YWxpZCA9IG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkOwotCi0JLyogbWVoICovCi0JaWYgKG1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpCi0JCWllZWU4MDIxMXNvZnRtYWNfc2VuZF9kaXNhc3NvY19yZXEobWFjLCBXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQpOwotCi0JLyogdHJ5IHRvIGZpbmQgdGhlIHJlcXVlc3RlZCBuZXR3b3JrIGluIG91ciBsaXN0LCBpZiB3ZSBmb3VuZCBvbmUgYWxyZWFkeSAqLwotCWlmIChic3N2YWxpZCB8fCBtYWMtPmFzc29jaW5mby5ic3NmaXhlZCkKLQkJZm91bmQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKG1hYywgbWFjLT5hc3NvY2luZm8uYnNzaWQpOwotCi0JLyogU2VhcmNoIHRoZSBpZWVlODAyMTEgbmV0d29ya3MgZm9yIHRoaXMgbmV0d29yayBpZiB3ZSBkaWRuJ3QgZmluZCBpdCBieSBic3NpZCwKLQkgKiBidXQgb25seSBpZiB3ZSd2ZSBzY2FubmVkIGF0IGxlYXN0IG9uY2UgKHRvIGdldCBhIGJldHRlciBsaXN0IG9mIG5ldHdvcmtzIHRvCi0JICogc2VsZWN0IGZyb20pLiBJZiB3ZSBoYXZlIG5vdCBzY2FubmVkIGJlZm9yZSwgdGhlICFmb3VuZCBsb2dpYyBiZWxvdyB3aWxsIGJlCi0JICogaW52b2tlZCBhbmQgd2lsbCBzY2FuLiAqLwotCWlmICghZm91bmQgJiYgKG1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnkgPCBJRUVFODAyMTFTT0ZUTUFDX0FTU09DX1NDQU5fUkVUUllfTElNSVQpKQotCXsKLQkJczggcnNzaSA9IC0xMjg7CS8qIGlmIEkgZG9uJ3QgaW5pdGlhbGlzZSwgZ2NjIGVtaXRzIGFuIGludmFsaWQgd2FybmluZwotCQkJCSAgIGJlY2F1c2UgaXQgY2Fubm90IGZvbGxvdyB0aGUgYmVzdCBwb2ludGVyIGxvZ2ljLiAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5pZWVlLT5sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCAmbWFjLT5pZWVlLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLQkJCS8qIHdlJ3JlIHN1cHBvc2VkIHRvIGZpbmQgdGhlIG5ldHdvcmsgd2l0aAotCQkJICogdGhlIGJlc3Qgc2lnbmFsIGhlcmUsIGFzIHdlJ3JlIGFza2VkIHRvIGpvaW4KLQkJCSAqIGFueSBuZXR3b3JrIHdpdGggYSBzcGVjaWZpYyBFU1NJRCwgYW5kIG1hbnkKLQkJCSAqIGRpZmZlcmVudCBvbmVzIGNvdWxkIGhhdmUgdGhhdC4KLQkJCSAqCi0JCQkgKiBJJ2xsIGZvciBub3cganVzdCBnbyB3aXRoIHRoZSByZXBvcnRlZCByc3NpLgotCQkJICoKLQkJCSAqIFdlIGFsc28gc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSByYXRlc2V0Ci0JCQkgKiBoZXJlIHRvIGZpbmQgdGhlIGJlc3QgQlNTSUQgdG8gdHJ5LgotCQkJICovCi0JCQlpZiAobmV0d29ya19tYXRjaGVzX3JlcXVlc3QobWFjLCBuZXQpKSB7Ci0JCQkJaWYgKCFiZXN0KSB7Ci0JCQkJCWJlc3QgPSBuZXQ7Ci0JCQkJCXJzc2kgPSBiZXN0LT5zdGF0cy5yc3NpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJLyogd2UgYWxyZWFkeSBoYWQgYSBtYXRjaGluZyBuZXR3b3JrLCBzbwotCQkJCSAqIGNvbXBhcmUgdGhlaXIgcHJvcGVydGllcyB0byBnZXQgdGhlCi0JCQkJICogYmV0dGVyIG9mIHRoZSB0d28gLi4uIChzZWUgYWJvdmUpCi0JCQkJICovCi0JCQkJaWYgKHJzc2kgPCBuZXQtPnN0YXRzLnJzc2kpIHsKLQkJCQkJYmVzdCA9IG5ldDsKLQkJCQkJcnNzaSA9IGJlc3QtPnN0YXRzLnJzc2k7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8qIGlmIHdlIHVubG9jayBoZXJlLCB3ZSBtaWdodCBnZXQgaW50ZXJydXB0ZWQgYW5kIHRoZSBgYmVzdCcKLQkJICogcG9pbnRlciBjb3VsZCBnbyBzdGFsZSAqLwotCQlpZiAoYmVzdCkgewotCQkJZm91bmQgPSBpZWVlODAyMTFzb2Z0bWFjX2NyZWF0ZV9uZXR3b3JrKG1hYywgYmVzdCk7Ci0JCQkvKiBpZiBmb3VuZCBpcyBzdGlsbCBOVUxMLCB0aGVuIHdlIGdvdCAtRU5PTUVNIHNvbWV3aGVyZSAqLwotCQkJaWYgKGZvdW5kKQotCQkJCWllZWU4MDIxMXNvZnRtYWNfYWRkX25ldHdvcmsobWFjLCBmb3VuZCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5pZWVlLT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQlpZiAobWFjLT5hc3NvY2luZm8uc2Nhbl9yZXRyeSA+IDApIHsKLQkJCW1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnktLTsKLQotCQkJLyogV2Uga25vdyBvZiBubyBzdWNoIG5ldHdvcmsuIExldCdzIHNjYW4uCi0JCQkgKiBOQjogdGhpcyBhbHNvIGhhcHBlbnMgaWYgd2UgaGFkIG5vIG1lbW9yeSB0byBjb3B5IHRoZSBuZXR3b3JrIGluZm8uLi4KLQkJCSAqIE1heWJlIHdlIGNhbiBob3BlIHRvIGhhdmUgbW9yZSBtZW1vcnkgYWZ0ZXIgc2Nhbm5pbmcgZmluaXNoZXMgOykKLQkJCSAqLwotCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJBc3NvY2lhdGU6IFNjYW5uaW5nIGZvciBuZXR3b3JrcyBmaXJzdC5cbiIpOwotCQkJaWVlZTgwMjExc29mdG1hY19ub3RpZnkobWFjLT5kZXYsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfU0NBTl9GSU5JU0hFRCwgaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfc2NhbiwgTlVMTCk7Ci0JCQlpZiAoaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuKG1hYykpIHsKLQkJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFzc29jaWF0ZTogZmFpbGVkIHRvIGluaXRpYXRlIHNjYW4uIElzIGRldmljZSB1cD9cbiIpOwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSB7Ci0JCQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7Ci0JCQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMDsKLQotCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJVbmFibGUgdG8gZmluZCBtYXRjaGluZyBuZXR3b3JrIGFmdGVyIHNjYW4hXG4iKTsKLQkJCS8qIHJlc2V0IHRoZSByZXRyeSBjb3VudGVyIGZvciB0aGUgbmV4dCB1c2VyIHJlcXVlc3Qgc2luY2Ugd2UKLQkJCSAqIGJyZWFrIG91dCBhbmQgZG9uJ3QgcmVzY2hlZHVsZSBvdXJzZWx2ZXMgYWZ0ZXIgdGhpcyBwb2ludC4gKi8KLQkJCW1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnkgPSBJRUVFODAyMTFTT0ZUTUFDX0FTU09DX1NDQU5fUkVUUllfTElNSVQ7Ci0JCQlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfTkVUX05PVF9GT1VORCwgTlVMTCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCS8qIHJlc2V0IHRoZSByZXRyeSBjb3VudGVyIGZvciB0aGUgbmV4dCB1c2VyIHJlcXVlc3Qgc2luY2Ugd2UKLQkgKiBub3cgZm91bmQgYSBuZXQgYW5kIHdpbGwgdHJ5IHRvIGFzc29jaWF0ZSB0byBpdCwgYnV0IG5vdAotCSAqIHNjaGVkdWxlIHRoaXMgZnVuY3Rpb24gYWdhaW4uICovCi0JbWFjLT5hc3NvY2luZm8uc2Nhbl9yZXRyeSA9IElFRUU4MDIxMVNPRlRNQUNfQVNTT0NfU0NBTl9SRVRSWV9MSU1JVDsKLQltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDE7Ci0JbWVtY3B5KG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBmb3VuZC0+YnNzaWQsIEVUSF9BTEVOKTsKLQkvKiBjb3B5IHRoZSBFU1NJRCBmb3IgZGlzcGxheWluZyBpdCAqLwotCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZV9lc3NpZC5sZW4gPSBmb3VuZC0+ZXNzaWQubGVuOwotCW1lbWNweShtYWMtPmFzc29jaW5mby5hc3NvY2lhdGVfZXNzaWQuZGF0YSwgZm91bmQtPmVzc2lkLmRhdGEsIElXX0VTU0lEX01BWF9TSVpFICsgMSk7Ci0KLQkvKiB3ZSBmb3VuZCBhIG5ldHdvcmshIGF1dGhlbnRpY2F0ZSAoaWYgbmVjZXNzYXJ5KSBhbmQgYXNzb2NpYXRlIHRvIGl0LiAqLwotCWlmIChmb3VuZC0+YXV0aGVudGljYXRpbmcpIHsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJBbHJlYWR5IHJlcXVlc3RlZCBhdXRoZW50aWNhdGlvbiwgd2FpdGluZy4uLlxuIik7Ci0JCWlmKCFtYWMtPmFzc29jaW5mby5hc3NvY193YWl0KSB7Ci0JCQltYWMtPmFzc29jaW5mby5hc3NvY193YWl0ID0gMTsKLQkJCWllZWU4MDIxMXNvZnRtYWNfbm90aWZ5X2ludGVybmFsKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BTlksIGZvdW5kLCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeV9hdXRoLCBOVUxMLCBHRlBfS0VSTkVMKTsKLQkJfQotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKCFmb3VuZC0+YXV0aGVudGljYXRlZCAmJiAhZm91bmQtPmF1dGhlbnRpY2F0aW5nKSB7Ci0JCS8qIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgX2F1dGhfcmVxIG9ubHkgcXVldWVzIHRoZSB3b3JrLAotCQkgKiBvdGhlcndpc2UgYWRkaW5nIHRoZSBub3RpZmljYXRpb24gd291bGQgYmUgcmFjeS4gKi8KLQkJaWYgKCFpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcmVxKG1hYywgZm91bmQpKSB7Ci0JCQlpZighbWFjLT5hc3NvY2luZm8uYXNzb2Nfd2FpdCkgewotCQkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiQ2Fubm90IGFzc29jaWF0ZSB3aXRob3V0IGJlaW5nIGF1dGhlbnRpY2F0ZWQsIHJlcXVlc3RlZCBhdXRoZW50aWNhdGlvblxuIik7Ci0JCQkJbWFjLT5hc3NvY2luZm8uYXNzb2Nfd2FpdCA9IDE7Ci0JCQkJaWVlZTgwMjExc29mdG1hY19ub3RpZnlfaW50ZXJuYWwobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FOWSwgZm91bmQsIGllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfbm90aWZ5X2F1dGgsIE5VTEwsIEdGUF9LRVJORUwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJcHJpbnRrbChLRVJOX1dBUk5JTkcgUEZYICJOb3QgYXV0aGVudGljYXRlZCwgYnV0IHJlcXVlc3RpbmcgYXV0aGVudGljYXRpb24gZmFpbGVkLiBHaXZpbmcgdXAgdG8gYXNzb2NpYXRlXG4iKTsKLQkJCW1hYy0+YXNzb2NpbmZvLmFzc29jX3dhaXQgPSAwOwotCQkJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX0ZBSUxFRCwgZm91bmQpOwotCQl9Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBmaW5hbGx5ISBub3cgd2UgY2FuIHN0YXJ0IGFzc29jaWF0aW5nICovCi0JbWFjLT5hc3NvY2luZm8uYXNzb2Nfd2FpdCA9IDA7Ci0JaWVlZTgwMjExc29mdG1hY19hc3NvYyhtYWMsIGZvdW5kKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOwotfQotCi0vKiBjYWxsIHRoaXMgdG8gZG8gd2hhdGV2ZXIgaXMgbmVjZXNzYXJ5IHdoZW4gd2UncmUgYXNzb2NpYXRlZCAqLwotc3RhdGljIHZvaWQKLWllZWU4MDIxMXNvZnRtYWNfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICogcmVzcCwKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpCi17Ci0JdTE2IGNhcCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNhcGFiaWxpdHkpOwotCXU4IGVycF92YWx1ZSA9IG5ldC0+ZXJwX3ZhbHVlOwotCi0JbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOwotCW1hYy0+YnNzaW5mby5zdXBwb3J0ZWRfcmF0ZXMgPSBuZXQtPnN1cHBvcnRlZF9yYXRlczsKLQlpZWVlODAyMTFzb2Z0bWFjX3JlY2FsY190eHJhdGVzKG1hYyk7Ci0KLQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMTsKLQotCW1hYy0+YXNzb2NpbmZvLnNob3J0X3ByZWFtYmxlX2F2YWlsYWJsZSA9Ci0JCShjYXAgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpICE9IDA7Ci0JaWVlZTgwMjExc29mdG1hY19wcm9jZXNzX2VycChtYWMsIGVycF92YWx1ZSk7Ci0KLQlpZiAobWFjLT5zZXRfYnNzaWRfZmlsdGVyKQotCQltYWMtPnNldF9ic3NpZF9maWx0ZXIobWFjLT5kZXYsIG5ldC0+YnNzaWQpOwotCW1lbWNweShtYWMtPmllZWUtPmJzc2lkLCBuZXQtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbmV0aWZfY2Fycmllcl9vbihtYWMtPmRldik7Ci0KLQltYWMtPmFzc29jaWF0aW9uX2lkID0gbGUxNl90b19jcHVwKCZyZXNwLT5haWQpOwotfQotCi0vKiByZWNlaXZlZCBmcmFtZSBoYW5kbGluZyBmdW5jdGlvbnMgKi8KLWludAotaWVlZTgwMjExc29mdG1hY19oYW5kbGVfYXNzb2NfcmVzcG9uc2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBfaWVlZTgwMjExX25ldHdvcmspCi17Ci0JLyogTk9URTogdGhlIG5ldHdvcmsgcGFyYW1ldGVyIGhhcyB0byBiZSBtb3N0bHkgaWdub3JlZCBieQotCSAqICAgICAgIHRoaXMgY29kZSBiZWNhdXNlIGl0IGlzIHRoZSBpZWVlODAyMTEncyBwb2ludGVyCi0JICogICAgICAgdG8gdGhlIHN0cnVjdCwgbm90IG91cnMgKHdlIG1hZGUgYSBjb3B5KQotCSAqLwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1MTYgc3RhdHVzID0gbGUxNl90b19jcHVwKCZyZXNwLT5zdGF0dXMpOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYzIpOwotCi0JaWYgKHVubGlrZWx5KCFtYWMtPnJ1bm5pbmcpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQotCWlmICghbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcpIHsKLQkJLyogd2UgcmFjZSBhZ2FpbnN0IHRoZSB0aW1lb3V0IGZ1bmN0aW9uLCBzbyBtYWtlIHN1cmUKLQkJICogb25seSBvbmUgb2YgdXMgY2FuIGRvIHdvcmsgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQluZXR3b3JrID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZF9sb2NrZWQobWFjLCByZXNwLT5oZWFkZXIuYWRkcjMpOwotCi0JLyogc29tZW9uZSBzZW5kaW5nIHVzIHRoaW5ncyB3aXRob3V0IHVzIGtub3dpbmcgaGltPyBJZ25vcmUuICovCi0JaWYgKCFuZXR3b3JrKSB7Ci0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiUmVjZWl2ZWQgdW5yZXF1ZXN0ZWQgYXNzb2NhdGlvbiByZXNwb25zZSBmcm9tICVzXG4iLAotCQkJcHJpbnRfbWFjKG1hYzIsIHJlc3AtPmhlYWRlci5hZGRyMykpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogbm93IHRoYXQgd2Uga25vdyBpdCB3YXMgZm9yIHVzLCB3ZSBjYW4gY2FuY2VsIHRoZSB0aW1lb3V0ICovCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmbWFjLT5hc3NvY2luZm8udGltZW91dCk7Ci0KLQkvKiBpZiB0aGUgYXNzb2NpYXRpb24gcmVzcG9uc2UgaW5jbHVkZWQgYW4gRVJQIElFLCB1cGRhdGUgb3VyIHNhdmVkCi0JICogY29weSAqLwotCWlmIChfaWVlZTgwMjExX25ldHdvcmstPmZsYWdzICYgTkVUV09SS19IQVNfRVJQX1ZBTFVFKQotCQluZXR3b3JrLT5lcnBfdmFsdWUgPSBfaWVlZTgwMjExX25ldHdvcmstPmVycF92YWx1ZTsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgMDoKLQkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiYXNzb2NpYXRlZCFcbiIpOwotCQkJaWVlZTgwMjExc29mdG1hY19hc3NvY2lhdGVkKG1hYywgcmVzcCwgbmV0d29yayk7Ci0JCQlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFRCwgbmV0d29yayk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX1JFQVNPTl9TVEFfUkVRX0FTU09DX1dJVEhPVVRfQVVUSDoKLQkJCWlmICghbmV0d29yay0+YXV0aF9kZXN5bmNlZF9vbmNlKSB7Ci0JCQkJLyogdGhlcmUgc2VlbSB0byBiZSBhIGZldyByYXJlIGNhc2VzIHdoZXJlIG91ciB2aWV3IG9mCi0JCQkJICogdGhlIHdvcmxkIGlzIG9ic2N1cmVkLCBvciBidWdneSBBUHMgdGhhdCBkb24ndCBERUFVVEgKLQkJCQkgKiB1cyBwcm9wZXJseS4gU28gd2UgaGFuZGxlIHRoYXQsIGJ1dCBhbGxvdyBpdCBvbmx5IG9uY2UuCi0JCQkJICovCi0JCQkJcHJpbnRrbChLRVJOX0lORk8gUEZYICJXZSB3ZXJlIG5vdCBhdXRoZW50aWNhdGVkIGR1cmluZyBhc3NvY2lhdGlvbiwgcmV0cnlpbmcuLi5cbiIpOwotCQkJCW5ldHdvcmstPmF1dGhlbnRpY2F0ZWQgPSAwOwotCQkJCS8qIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhpcyBtb3JlIHRoYW4gb25jZSAuLi4gKi8KLQkJCQluZXR3b3JrLT5hdXRoX2Rlc3luY2VkX29uY2UgPSAxOwotCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhtYWMtPndxLCAmbWFjLT5hc3NvY2luZm8ud29yaywgMCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggImFzc29jaWF0aW5nIGZhaWxlZCAocmVhc29uOiAweCV4KSFcbiIsIHN0YXR1cyk7Ci0JCQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7Ci0JCQltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDA7Ci0JCQltYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkID0gMDsKLQkJCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfRkFJTEVELCBuZXR3b3JrKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotaWVlZTgwMjExc29mdG1hY190cnlfcmVhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsobWFjLT53cSwgJm1hYy0+YXNzb2NpbmZvLndvcmssIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotfQotCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICpkaXNhc3NvYykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlpZiAodW5saWtlbHkoIW1hYy0+cnVubmluZykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKG1lbWNtcChkaXNhc3NvYy0+aGVhZGVyLmFkZHIyLCBtYWMtPmFzc29jaW5mby5ic3NpZCwgRVRIX0FMRU4pKQotCQlyZXR1cm4gMDsKLQotCWlmIChtZW1jbXAoZGlzYXNzb2MtPmhlYWRlci5hZGRyMSwgbWFjLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCi0JCXJldHVybiAwOwotCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICJnb3QgZGlzYXNzb2MgZnJhbWVcbiIpOwotCWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2MobWFjKTsKLQotCWllZWU4MDIxMXNvZnRtYWNfdHJ5X3JlYXNzb2MobWFjKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX3JlYXNzb2NfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqIHJlc3ApCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldHdvcms7Ci0KLQlpZiAodW5saWtlbHkoIW1hYy0+cnVubmluZykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbmV0d29yayA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQobWFjLCByZXNwLT5oZWFkZXIuYWRkcjMpOwotCWlmICghbmV0d29yaykgewotCQlkcHJpbnRrbChLRVJOX0lORk8gUEZYICJyZWFzc29jIHJlcXVlc3QgZnJvbSB1bmtub3duIG5ldHdvcmtcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcXVldWVfZGVsYXllZF93b3JrKG1hYy0+d3EsICZtYWMtPmFzc29jaW5mby53b3JrLCAwKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTk2YzI1Li4wMDAwMDAwCi0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYworKysgL2Rldi9udWxsCkBAIC0xLDQxMyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzb2Z0bWFjJ3MgYXV0aGVudGljYXRpb24gbG9naWMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICovCi0KLSNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKLQotc3RhdGljIHZvaWQgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLS8qIFF1ZXVlcyBhbiBhdXRoIHJlcXVlc3QgdG8gdGhlIGRlc2lyZWQgQVAgKi8KLWludAotaWVlZTgwMjExc29mdG1hY19hdXRoX3JlcShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphdXRoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYzIpOwotCi0JaWYgKG5ldC0+YXV0aGVudGljYXRpbmcgfHwgbmV0LT5hdXRoZW50aWNhdGVkKQotCQlyZXR1cm4gMDsKLQluZXQtPmF1dGhlbnRpY2F0aW5nID0gMTsKLQotCS8qIEFkZCB0aGUgbmV0d29yayBpZiBpdCdzIG5vdCBhbHJlYWR5IGFkZGVkICovCi0JaWVlZTgwMjExc29mdG1hY19hZGRfbmV0d29yayhtYWMsIG5ldCk7Ci0KLQlkcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiUXVldWVpbmcgQXV0aGVudGljYXRpb24gUmVxdWVzdCB0byAlc1xuIiwgcHJpbnRfbWFjKG1hYzIsIG5ldC0+YnNzaWQpKTsKLQkvKiBRdWV1ZSB0aGUgYXV0aCByZXF1ZXN0ICovCi0JYXV0aCA9IChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0gKikKLQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoYXV0aCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWF1dGgtPm5ldCA9IG5ldDsKLQlhdXRoLT5tYWMgPSBtYWM7Ci0JYXV0aC0+cmV0cnkgPSBJRUVFODAyMTFTT0ZUTUFDX0FVVEhfUkVUUllfTElNSVQ7Ci0JYXV0aC0+c3RhdGUgPSBJRUVFODAyMTFTT0ZUTUFDX0FVVEhfT1BFTl9SRVFVRVNUOwotCUlOSVRfREVMQVlFRF9XT1JLKCZhdXRoLT53b3JrLCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWUpOwotCi0JLyogTG9jayAoZm9yIGxpc3QpICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0JLyogYWRkIHRvIGxpc3QgKi8KLQlsaXN0X2FkZF90YWlsKCZhdXRoLT5saXN0LCAmbWFjLT5hdXRoX3F1ZXVlKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsobWFjLT53cSwgJmF1dGgtPndvcmssIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyogU2VuZHMgYW4gYXV0aCByZXF1ZXN0IHRvIHRoZSBkZXNpcmVkIEFQIGFuZCBoYW5kbGVzIHRpbWVvdXRzICovCi1zdGF0aWMgdm9pZAotaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYzsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0gKmF1dGg7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYzIpOwotCi0JYXV0aCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0sCi0JCQkgICAgd29yay53b3JrKTsKLQluZXQgPSBhdXRoLT5uZXQ7Ci0JbWFjID0gYXV0aC0+bWFjOwotCi0JaWYoYXV0aC0+cmV0cnkgPiAwKSB7Ci0JCS8qIFN3aXRjaCB0byBjb3JyZWN0IGNoYW5uZWwgZm9yIHRoaXMgbmV0d29yayAqLwotCQltYWMtPnNldF9jaGFubmVsKG1hYy0+ZGV2LCBuZXQtPmNoYW5uZWwpOwotCi0JCS8qIExvY2sgYW5kIHNldCBmbGFncyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkgewotCQkJLyogUHJldmVudCByZXNjaGVkdWxlIG9uIHdvcmtxdWV1ZSBmbHVzaCAqLwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbmV0LT5hdXRoZW50aWNhdGVkID0gMDsKLQkJLyogYWRkIGEgdGltZW91dCBjYWxsIHNvIHdlIGV2ZW50dWFsbHkgZ2l2ZSB1cCB3YWl0aW5nIGZvciBhbiBhdXRoIHJlcGx5ICovCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhtYWMtPndxLCAmYXV0aC0+d29yaywgSUVFRTgwMjExU09GVE1BQ19BVVRIX1RJTUVPVVQpOwotCQlhdXRoLT5yZXRyeS0tOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGllZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUobWFjLCBhdXRoLT5uZXQsIElFRUU4MDIxMV9TVFlQRV9BVVRILCBhdXRoLT5zdGF0ZSkpCi0JCQlkcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiU2VuZGluZyBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IHRvICVzIGZhaWxlZCAodGhpcyBzaG91bGRuJ3QgaGFwcGVuLCB3YWl0IGZvciB0aGUgdGltZW91dCkuXG4iLAotCQkJCXByaW50X21hYyhtYWMyLCBuZXQtPmJzc2lkKSk7Ci0JCWVsc2UKLQkJCWRwcmludGsoS0VSTl9OT1RJQ0UgUEZYICJTZW50IEF1dGhlbnRpY2F0aW9uIFJlcXVlc3QgdG8gJXMuXG4iLCBwcmludF9tYWMobWFjMiwgbmV0LT5ic3NpZCkpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpbnRrbChLRVJOX1dBUk5JTkcgUEZYICJBdXRoZW50aWNhdGlvbiB0aW1lZCBvdXQgd2l0aCAlc1xuIiwgcHJpbnRfbWFjKG1hYzIsIG5ldC0+YnNzaWQpKTsKLQkvKiBSZW1vdmUgdGhpcyBpdGVtIGZyb20gdGhlIHF1ZXVlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCW5ldC0+YXV0aGVudGljYXRpbmcgPSAwOwotCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIX1RJTUVPVVQsIG5ldCk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmYXV0aC0+d29yayk7IC8qIGp1c3QgdG8gbWFrZSBzdXJlLi4uICovCi0JbGlzdF9kZWwoJmF1dGgtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCS8qIEZyZWUgaXQgKi8KLQlrZnJlZShhdXRoKTsKLX0KLQotLyogU2VuZHMgYSByZXNwb25zZSB0byBhbiBhdXRoIGNoYWxsZW5nZSAoZm9yIHNoYXJlZCBrZXkgYXV0aCkuICovCi1zdGF0aWMgdm9pZAotaWVlZTgwMjExc29mdG1hY19hdXRoX2NoYWxsZW5nZV9yZXNwb25zZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphcSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0sCi0JCQkgICAgIHdvcmsud29yayk7Ci0KLQkvKiBTZW5kIG91ciByZXNwb25zZSAqLwotCWllZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUoYXEtPm1hYywgYXEtPm5ldCwgSUVFRTgwMjExX1NUWVBFX0FVVEgsIGFxLT5zdGF0ZSk7Ci19Ci0KLS8qIEhhbmRsZSB0aGUgYXV0aCByZXNwb25zZSBmcm9tIHRoZSBBUAotICogVGhpcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIGllZWU4MDIxMSBhcyBoYW5kbGVfYXV0aAotICovCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXNwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqYXV0aCkKLXsKLQotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcHRyOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0gKmFxID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTggKiBkYXRhOwotCURFQ0xBUkVfTUFDX0JVRihtYWMyKTsKLQotCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBGaW5kIGNvcnJlY3QgYXV0aCBxdWV1ZSBpdGVtICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2gobGlzdF9wdHIsICZtYWMtPmF1dGhfcXVldWUpIHsKLQkJYXEgPSBsaXN0X2VudHJ5KGxpc3RfcHRyLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0sIGxpc3QpOwotCQluZXQgPSBhcS0+bmV0OwotCQlpZiAoIW1lbWNtcChuZXQtPmJzc2lkLCBhdXRoLT5oZWFkZXIuYWRkcjIsIEVUSF9BTEVOKSkKLQkJCWJyZWFrOwotCQllbHNlCi0JCQlhcSA9IE5VTEw7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0JLyogTWFrZSBzdXJlIHRoYXQgd2UndmUgZ290IGFuIGF1dGggcXVldWUgaXRlbSBmb3IgdGhpcyByZXF1ZXN0ICovCi0JaWYoYXEgPT0gTlVMTCkKLQl7Ci0JCWRwcmludGtsKEtFUk5fREVCVUcgUEZYICJBdXRoZW50aWNhdGlvbiByZXNwb25zZSByZWNlaXZlZCBmcm9tICVzIGJ1dCBubyBxdWV1ZSBpdGVtIGV4aXN0cy5cbiIsIHByaW50X21hYyhtYWMyLCBhdXRoLT5oZWFkZXIuYWRkcjIpKTsKLQkJLyogRXJyb3IgIz8gKi8KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIENoZWNrIGZvciBvdXQgb2Ygb3JkZXIgYXV0aGVudGljYXRpb24gKi8KLQlpZighbmV0LT5hdXRoZW50aWNhdGluZykKLQl7Ci0JCWRwcmludGtsKEtFUk5fREVCVUcgUEZYICJBdXRoZW50aWNhdGlvbiByZXNwb25zZSByZWNlaXZlZCBmcm9tICVzIGJ1dCBkaWQgbm90IHJlcXVlc3QgYXV0aGVudGljYXRpb24uXG4iLHByaW50X21hYyhtYWMyLCBhdXRoLT5oZWFkZXIuYWRkcjIpKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIFBhcnNlIHRoZSBhdXRoIHBhY2tldCAqLwotCXN3aXRjaChsZTE2X3RvX2NwdShhdXRoLT5hbGdvcml0aG0pKSB7Ci0JY2FzZSBXTEFOX0FVVEhfT1BFTjoKLQkJLyogQ2hlY2sgdGhlIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZSAqLwotCi0JCXN3aXRjaChsZTE2X3RvX2NwdShhdXRoLT5zdGF0dXMpKSB7Ci0JCWNhc2UgV0xBTl9TVEFUVVNfU1VDQ0VTUzoKLQkJCS8qIFVwZGF0ZSB0aGUgc3RhdHVzIHRvIEF1dGhlbnRpY2F0ZWQgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkJCW5ldC0+YXV0aGVudGljYXRpbmcgPSAwOwotCQkJbmV0LT5hdXRoZW50aWNhdGVkID0gMTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0JCQkvKiBTZW5kIGV2ZW50ICovCi0JCQlwcmludGtsKEtFUk5fTk9USUNFIFBGWCAiT3BlbiBBdXRoZW50aWNhdGlvbiBjb21wbGV0ZWQgd2l0aCAlc1xuIiwgcHJpbnRfbWFjKG1hYzIsIG5ldC0+YnNzaWQpKTsKLQkJCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhFTlRJQ0FURUQsIG5ldCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIExvY2sgYW5kIHJlc2V0IGZsYWdzICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JCQluZXQtPmF1dGhlbnRpY2F0ZWQgPSAwOwotCQkJbmV0LT5hdXRoZW50aWNhdGluZyA9IDA7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQotCQkJcHJpbnRrbChLRVJOX05PVElDRSBQRlggIk9wZW4gQXV0aGVudGljYXRpb24gd2l0aCAlcyBmYWlsZWQsIGVycm9yIGNvZGU6ICVpXG4iLAotCQkJCXByaW50X21hYyhtYWMyLCBuZXQtPmJzc2lkKSwgbGUxNl90b19jcHVwKCZhdXRoLT5zdGF0dXMpKTsKLQkJCS8qIENvdW50IHRoZSBlcnJvcj8gKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWdvdG8gZnJlZV9hcTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJLyogRmlndXJlIG91dCB3aGVyZSB3ZSBhcmUgaW4gdGhlIHByb2Nlc3MgKi8KLQkJc3dpdGNoKGxlMTZfdG9fY3B1KGF1dGgtPnRyYW5zYWN0aW9uKSkgewotCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfQVVUSF9TSEFSRURfQ0hBTExFTkdFOgotCQkJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjaGFsbGVuZ2UgSUUgKi8KLQkJCWRhdGEgPSAodTggKilhdXRoLT5pbmZvX2VsZW1lbnQ7Ci0JCQlpZiAoKmRhdGErKyAhPSBNRklFX1RZUEVfQ0hBTExFTkdFKSB7Ci0JCQkJcHJpbnRrbChLRVJOX05PVElDRSBQRlggIlNoYXJlZCBLZXkgQXV0aGVudGljYXRpb24gZmFpbGVkIGR1ZSB0byBhIG1pc3NpbmcgY2hhbGxlbmdlLlxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBTYXZlIHRoZSBjaGFsbGVuZ2UgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkJCW5ldC0+Y2hhbGxlbmdlX2xlbiA9ICpkYXRhKys7Ci0JCQlpZiAobmV0LT5jaGFsbGVuZ2VfbGVuID4gV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4pCi0JCQkJbmV0LT5jaGFsbGVuZ2VfbGVuID0gV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU47Ci0JCQlrZnJlZShuZXQtPmNoYWxsZW5nZSk7Ci0JCQluZXQtPmNoYWxsZW5nZSA9IGttZW1kdXAoZGF0YSwgbmV0LT5jaGFsbGVuZ2VfbGVuLAotCQkJCQkJIEdGUF9BVE9NSUMpOwotCQkJaWYgKG5ldC0+Y2hhbGxlbmdlID09IE5VTEwpIHsKLQkJCQlwcmludGtsKEtFUk5fTk9USUNFIFBGWCAiU2hhcmVkIEtleSAiCi0JCQkJCSJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZHVlIHRvICIKLQkJCQkJIm1lbW9yeSBzaG9ydGFnZS5cbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYXEtPnN0YXRlID0gSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9SRVNQT05TRTsKLQotCQkJLyogV2UgcmV1c2UgdGhlIHdvcmsgc3RydWN0IGZyb20gdGhlIGF1dGggcmVxdWVzdCBoZXJlLgotCQkJICogSXQgaXMgc2FmZSB0byBkbyBzbyBhcyBlYWNoIG9uZSBpcyBwZXItcmVxdWVzdCwgYW5kCi0JCQkgKiBhdCB0aGlzIHBvaW50IChkZWFsaW5nIHdpdGggYXV0aGVudGljYXRpb24gcmVzcG9uc2UpCi0JCQkgKiB3ZSBoYXZlIG9idmlvdXNseSBhbHJlYWR5IHNlbnQgdGhlIGluaXRpYWwgYXV0aAotCQkJICogcmVxdWVzdC4gKi8KLQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFxLT53b3JrKTsKLQkJCUlOSVRfREVMQVlFRF9XT1JLKCZhcS0+d29yaywgJmllZWU4MDIxMXNvZnRtYWNfYXV0aF9jaGFsbGVuZ2VfcmVzcG9uc2UpOwotCQkJcXVldWVfZGVsYXllZF93b3JrKG1hYy0+d3EsICZhcS0+d29yaywgMCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAwOwotCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfQVVUSF9TSEFSRURfUEFTUzoKLQkJCWtmcmVlKG5ldC0+Y2hhbGxlbmdlKTsKLQkJCW5ldC0+Y2hhbGxlbmdlID0gTlVMTDsKLQkJCW5ldC0+Y2hhbGxlbmdlX2xlbiA9IDA7Ci0JCQkvKiBDaGVjayB0aGUgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlICovCi0JCQlzd2l0Y2goYXV0aC0+c3RhdHVzKSB7Ci0JCQljYXNlIFdMQU5fU1RBVFVTX1NVQ0NFU1M6Ci0JCQkJLyogVXBkYXRlIHRoZSBzdGF0dXMgdG8gQXV0aGVudGljYXRlZCAqLwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkJCQluZXQtPmF1dGhlbnRpY2F0aW5nID0gMDsKLQkJCQluZXQtPmF1dGhlbnRpY2F0ZWQgPSAxOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCQkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJTaGFyZWQgS2V5IEF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlZCB3aXRoICVzXG4iLAotCQkJCQlwcmludF9tYWMobWFjMiwgbmV0LT5ic3NpZCkpOwotCQkJCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhFTlRJQ0FURUQsIG5ldCk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJTaGFyZWQgS2V5IEF1dGhlbnRpY2F0aW9uIHdpdGggJXMgZmFpbGVkLCBlcnJvciBjb2RlOiAlaVxuIiwKLQkJCQkJcHJpbnRfbWFjKG1hYzIsIG5ldC0+YnNzaWQpLCBsZTE2X3RvX2NwdXAoJmF1dGgtPnN0YXR1cykpOwotCQkJCS8qIExvY2sgYW5kIHJlc2V0IGZsYWdzICovCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCQkJCW5ldC0+YXV0aGVudGljYXRpbmcgPSAwOwotCQkJCW5ldC0+YXV0aGVudGljYXRlZCA9IDA7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JCQkJLyogQ291bnQgdGhlIGVycm9yPyAqLwotCQkJCWJyZWFrOwotCQkJfQotCQkJZ290byBmcmVlX2FxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGtsKEtFUk5fV0FSTklORyBQRlggIlVuaGFuZGxlZCBBdXRoZW50aWNhdGlvbiBTdGVwOiAlaVxuIiwgYXV0aC0+dHJhbnNhY3Rpb24pOwotCQkJYnJlYWs7Ci0JCX0KLQkJZ290byBmcmVlX2FxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBFUlJPUiAqLwotCQlnb3RvIGZyZWVfYXE7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLWZyZWVfYXE6Ci0JLyogQ2FuY2VsIHRoZSB0aW1lb3V0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFxLT53b3JrKTsKLQkvKiBSZW1vdmUgdGhpcyBpdGVtIGZyb20gdGhlIHF1ZXVlICovCi0JbGlzdF9kZWwoJmFxLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQotCS8qIEZyZWUgaXQgKi8KLQlrZnJlZShhcSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBIYW5kbGUgZGVhdXRob3JpemF0aW9uCi0gKi8KLXN0YXRpYyB2b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9mcm9tX25ldChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphcSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wdHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIGRlYXV0aGVudGljYXRpb24gaW1wbGllcyBkaXNhc3NvY2lhdGlvbiAqLwotCWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2MobWFjKTsKLQotCS8qIExvY2sgYW5kIHJlc2V0IHN0YXR1cyBmbGFncyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQluZXQtPmF1dGhlbnRpY2F0aW5nID0gMDsKLQluZXQtPmF1dGhlbnRpY2F0ZWQgPSAwOwotCi0JLyogRmluZCBjb3JyZWN0IGF1dGggcXVldWUgaXRlbSwgaWYgaXQgZXhpc3RzICovCi0JbGlzdF9mb3JfZWFjaChsaXN0X3B0ciwgJm1hYy0+YXV0aF9xdWV1ZSkgewotCQlhcSA9IGxpc3RfZW50cnkobGlzdF9wdHIsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWVfaXRlbSwgbGlzdCk7Ci0JCWlmICghbWVtY21wKG5ldC0+YnNzaWQsIGFxLT5uZXQtPmJzc2lkLCBFVEhfQUxFTikpCi0JCQlicmVhazsKLQkJZWxzZQotCQkJYXEgPSBOVUxMOwotCX0KLQotCS8qIENhbmNlbCBwZW5kaW5nIHdvcmsgKi8KLQlpZihhcSAhPSBOVUxMKQotCQkvKiBOb3QgZW50aXJlbHkgc2FmZT8gIFdoYXQgYWJvdXQgcnVubmluZyB3b3JrPyAqLwotCQljYW5jZWxfZGVsYXllZF93b3JrKCZhcS0+d29yayk7Ci0KLQkvKiBGcmVlIG91ciBuZXR3b3JrIHJlZiAqLwotCWllZWU4MDIxMXNvZnRtYWNfZGVsX25ldHdvcmtfbG9ja2VkKG1hYywgbmV0KTsKLQlpZihuZXQtPmNoYWxsZW5nZSAhPSBOVUxMKQotCQlrZnJlZShuZXQtPmNoYWxsZW5nZSk7Ci0Ja2ZyZWUobmV0KTsKLQotCS8qIGNhbid0IHRyYW5zbWl0IGRhdGEgcmlnaHQgbm93Li4uICovCi0JbmV0aWZfY2Fycmllcl9vZmYobWFjLT5kZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0JaWVlZTgwMjExc29mdG1hY190cnlfcmVhc3NvYyhtYWMpOwotfQotCi0vKgotICogU2VuZHMgYSBkZWF1dGggcmVxdWVzdCB0byB0aGUgZGVzaXJlZCBBUAotICovCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfZGVhdXRoX3JlcShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsIGludCByZWFzb24pCi17Ci0JaW50IHJldDsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBpcyBhdXRoZW50aWNhdGVkICovCi0JaWYgKCFuZXQtPmF1dGhlbnRpY2F0ZWQpCi0JewotCQlkcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiQ2FuJ3Qgc2VuZCBkZWF1dGhlbnRpY2F0aW9uIHBhY2tldCwgbmV0d29yayBpcyBub3QgYXV0aGVudGljYXRlZC5cbiIpOwotCQkvKiBFcnJvciBva2F5PyAqLwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCS8qIFNlbmQgdGhlIGRlLWF1dGggcGFja2V0ICovCi0JaWYoKHJldCA9IGllZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUobWFjLCBuZXQsIElFRUU4MDIxMV9TVFlQRV9ERUFVVEgsIHJlYXNvbikpKQotCQlyZXR1cm4gcmV0OwotCi0JaWVlZTgwMjExc29mdG1hY19kZWF1dGhfZnJvbV9uZXQobWFjLCBuZXQpOwotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIGllZWU4MDIxMSBhcyBoYW5kbGVfZGVhdXRoCi0gKi8KLWludAotaWVlZTgwMjExc29mdG1hY19kZWF1dGhfcmVzcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqZGVhdXRoKQotewotCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0ID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYzIpOwotCi0JaWYgKHVubGlrZWx5KCFtYWMtPnJ1bm5pbmcpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICghZGVhdXRoKSB7Ci0JCWRwcmludGsoImRlYXV0aCB3aXRob3V0IGRlYXV0aCBwYWNrZXQuIGVlayFcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQluZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKG1hYywgZGVhdXRoLT5oZWFkZXIuYWRkcjIpOwotCi0JaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCWRwcmludGtsKEtFUk5fREVCVUcgUEZYICJSZWNlaXZlZCBkZWF1dGhlbnRpY2F0aW9uIHBhY2tldCBmcm9tICVzLCBidXQgdGhhdCBuZXR3b3JrIGlzIHVua25vd24uXG4iLAotCQkJcHJpbnRfbWFjKG1hYzIsIGRlYXV0aC0+aGVhZGVyLmFkZHIyKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBpcyBhdXRoZW50aWNhdGVkICovCi0JaWYoIW5ldC0+YXV0aGVudGljYXRlZCkKLQl7Ci0JCWRwcmludGtsKEtFUk5fREVCVUcgUEZYICJDYW4ndCBwZXJmb3JtIGRlYXV0aGVudGljYXRpb24sIG5ldHdvcmsgaXMgbm90IGF1dGhlbnRpY2F0ZWQuXG4iKTsKLQkJLyogRXJyb3Igb2theT8gKi8KLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9mcm9tX25ldChtYWMsIG5ldCk7Ci0KLQkvKiBsZXQncyB0cnkgdG8gcmUtYXNzb2NpYXRlICovCi0JcXVldWVfZGVsYXllZF93b3JrKG1hYy0+d3EsICZtYWMtPmFzc29jaW5mby53b3JrLCAwKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2VmMDViLi4wMDAwMDAwCi0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIEV2ZW50IHN5c3RlbQotICogQWxzbyBzZWUgY29tbWVudHMgaW4gcHVibGljIGhlYWRlciBmaWxlIGFuZCBsb25nZXIgZXhwbGFuYXRpb24gYmVsb3cuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICovCi0KLSNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKLQotLyoKLSAqIEVhY2ggZXZlbnQgaGFzIGFzc29jaWF0ZWQgdG8gaXQKLSAqICAtIGFuIGV2ZW50IHR5cGUgKHNlZSBjb25zdGFudHMgaW4gcHVibGljIGhlYWRlcikKLSAqICAtIGFuIGV2ZW50IGNvbnRleHQgKHNlZSBiZWxvdykKLSAqICAtIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQKLSAqICAtIGEgY29udGV4dCAoZXh0cmEgcGFyYW1ldGVyIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGgpCi0gKiAgLSBhbmQgdGhlIHNvZnRtYWMgc3RydWN0Ci0gKgotICogVGhlIGV2ZW50IGNvbnRleHQgaXMgcHJpdmF0ZSBhbmQgY2FuIG9ubHkgYmUgdXNlZCBmcm9tCi0gKiB3aXRoaW4gdGhpcyBtb2R1bGUuIEl0cyBtZWFuaW5nIHZhcmllcyB3aXRoIHRoZSBldmVudAotICogdHlwZToKLSAqICBTQ0FOX0ZJTklTSEVELAotICogIERJU0FTU09DSUFURUQ6CU5VTEwKLSAqICBBU1NPQ0lBVEVELAotICogIEFTU09DSUFURV9GQUlMRUQsCi0gKiAgQVNTT0NJQVRFX1RJTUVPVVQsCi0gKiAgQVVUSEVOVElDQVRFRCwKLSAqICBBVVRIX0ZBSUxFRCwKLSAqICBBVVRIX1RJTUVPVVQ6CWEgcG9pbnRlciB0byB0aGUgbmV0d29yayBzdHJ1Y3QKLSAqIC4uLgotICogQ29kZSB3aXRoaW4gdGhpcyBtb2R1bGUgY2FuIHVzZSB0aGUgZXZlbnQgY29udGV4dCB0byBiZSBvbmx5Ci0gKiBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgdHJ1ZSBmb3IgdGhhdCBzcGVjaWZpYyBjb250ZXh0Ci0gKiBhcyBwZXIgYWJvdmUgdGFibGUuCi0gKiBJZiB0aGUgZXZlbnQgY29udGV4dCBpcyBOVUxMLCB0aGVuIHRoZSBub3RpZmljYXRpb24gaXMgYWx3YXlzIGNhbGxlZCwKLSAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGV2ZW50IGNvbnRleHQuIFRoZSBldmVudCBjb250ZXh0IGlzIG5vdCBwYXNzZWQgdG8KLSAqIHRoZSBjYWxsYmFjaywgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBjb250ZXh0IHN1ZmZpY2VzLgotICoKLSAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGV2ZW50IGNvbnRleHQgb25seSBieSBzZXR0aW5nIHRoZSBldmVudCB0eXBlCi0gKiB0byAtMSAocHJpdmF0ZSB1c2Ugb25seSksIGluIHdoaWNoIGNhc2UgeW91J2xsIGJlIG5vdGlmaWVkCi0gKiB3aGVuZXZlciB0aGUgZXZlbnQgY29udGV4dCBtYXRjaGVzLgotICovCi0KLXN0YXRpYyBjaGFyICpldmVudF9kZXNjcmlwdGlvbnNbSUVFRTgwMjExU09GVE1BQ19FVkVOVF9MQVNUKzFdID0gewotCU5VTEwsIC8qIHNjYW4gZmluaXNoZWQgKi8KLQlOVUxMLCAvKiBhc3NvY2lhdGVkICovCi0JImFzc29jaWF0aW5nIGZhaWxlZCIsCi0JImFzc29jaWF0aW5nIHRpbWVkIG91dCIsCi0JImF1dGhlbnRpY2F0ZWQiLAotCSJhdXRoZW50aWNhdGluZyBmYWlsZWQiLAotCSJhdXRoZW50aWNhdGluZyB0aW1lZCBvdXQiLAotCSJhc3NvY2lhdGluZyBmYWlsZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBuZXR3b3JrIHdhcyBmb3VuZCIsCi0JTlVMTCwgLyogZGlzYXNzb2NpYXRlZCAqLwotfTsKLQotCi1zdGF0aWMgdm9pZAotaWVlZTgwMjExc29mdG1hY19ub3RpZnlfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50ICpwZXZlbnQgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXZlbnQsIHdvcmsud29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXZlbnQgZXZlbnQgPSAqcGV2ZW50OwotCWtmcmVlKHBldmVudCk7Ci0KLQlldmVudC5mdW4oZXZlbnQubWFjLT5kZXYsIGV2ZW50LmV2ZW50X3R5cGUsIGV2ZW50LmNvbnRleHQpOwotfQotCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfbm90aWZ5X2ludGVybmFsKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCWludCBldmVudCwgdm9pZCAqZXZlbnRfY29udGV4dCwgbm90aWZ5X2Z1bmN0aW9uX3B0ciBmdW4sIHZvaWQgKmNvbnRleHQsIGdmcF90IGdmcF9tYXNrKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50ICpldmVudHB0cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGV2ZW50IDwgLTEgfHwgZXZlbnQgPiBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0xBU1QpCi0JCXJldHVybiAtRU5PU1lTOwotCi0JaWYgKCFmdW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXZlbnRwdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ldmVudCksIGdmcF9tYXNrKTsKLQlpZiAoIWV2ZW50cHRyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWV2ZW50cHRyLT5ldmVudF90eXBlID0gZXZlbnQ7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmV2ZW50cHRyLT53b3JrLCBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9jYWxsYmFjayk7Ci0JZXZlbnRwdHItPmZ1biA9IGZ1bjsKLQlldmVudHB0ci0+Y29udGV4dCA9IGNvbnRleHQ7Ci0JZXZlbnRwdHItPm1hYyA9IG1hYzsKLQlldmVudHB0ci0+ZXZlbnRfY29udGV4dCA9IGV2ZW50X2NvbnRleHQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoJmV2ZW50cHRyLT5saXN0LCAmbWFjLT5ldmVudHMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludAotaWVlZTgwMjExc29mdG1hY19ub3RpZnlfZ2ZwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JaW50IGV2ZW50LCBub3RpZnlfZnVuY3Rpb25fcHRyIGZ1biwgdm9pZCAqY29udGV4dCwgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCi0JaWYgKGV2ZW50IDwgMCB8fCBldmVudCA+IElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfTEFTVCkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19ub3RpZnlfaW50ZXJuYWwobWFjLCBldmVudCwgTlVMTCwgZnVuLCBjb250ZXh0LCBnZnBfbWFzayk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9nZnApOwotCi0vKiBwcml2YXRlIC0tIGNhbGxpbmcgYWxsIGNhbGxiYWNrcyB0aGF0IHdlcmUgc3BlY2lmaWVkICovCi12b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgaW50IGV2ZW50LCB2b2lkICpldmVudF9jdHgpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXZlbnQgKmV2ZW50cHRyLCAqdG1wOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldHdvcms7Ci0KLQlpZiAoZXZlbnQgPj0gMCkgewotCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JCWludCB3ZV9ldmVudDsKLQkJY2hhciAqbXNnID0gTlVMTDsKLQotCQltZW1zZXQoJndycXUsICdcMCcsIHNpemVvZiAodW5pb24gaXdyZXFfZGF0YSkpOwotCi0JCXN3aXRjaChldmVudCkgewotCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFRDoKLQkJCW5ldHdvcmsgPSAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKWV2ZW50X2N0eDsKLQkJCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJm5ldHdvcmstPmJzc2lkWzBdLCBFVEhfQUxFTik7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0RJU0FTU09DSUFURUQ6Ci0JCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJd2VfZXZlbnQgPSBTSU9DR0lXQVA7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX1NDQU5fRklOSVNIRUQ6Ci0JCQl3ZV9ldmVudCA9IFNJT0NHSVdTQ0FOOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQltc2cgPSBldmVudF9kZXNjcmlwdGlvbnNbZXZlbnRdOwotCQkJaWYgKCFtc2cpCi0JCQkJbXNnID0gIlNPRlRNQUMgRVZFTlQgQlVHIjsKLQkJCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKLQkJCXdlX2V2ZW50ID0gSVdFVkNVU1RPTTsKLQkJCWJyZWFrOwotCQl9Ci0JCXdpcmVsZXNzX3NlbmRfZXZlbnQobWFjLT5kZXYsIHdlX2V2ZW50LCAmd3JxdSwgbXNnKTsKLQl9Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJm1hYy0+ZXZlbnRzKSkKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50cHRyLCB0bXAsICZtYWMtPmV2ZW50cywgbGlzdCkgewotCQkJaWYgKChldmVudHB0ci0+ZXZlbnRfdHlwZSA9PSBldmVudCB8fCBldmVudHB0ci0+ZXZlbnRfdHlwZSA9PSAtMSkKLQkJCQkmJiAoZXZlbnRwdHItPmV2ZW50X2NvbnRleHQgPT0gTlVMTCB8fCBldmVudHB0ci0+ZXZlbnRfY29udGV4dCA9PSBldmVudF9jdHgpKSB7Ci0JCQkJbGlzdF9kZWwoJmV2ZW50cHRyLT5saXN0KTsKLQkJCQkvKiBVc2VyIG1heSBoYXZlIHN1YnNjcmliZWQgdG8gQU5ZIGV2ZW50LCBzbwotCQkJCSAqIHdlIHRlbGwgdGhlbSB3aGljaCBldmVudCB0cmlnZ2VyZWQgaXQuICovCi0JCQkJZXZlbnRwdHItPmV2ZW50X3R5cGUgPSBldmVudDsKLQkJCQlxdWV1ZV9kZWxheWVkX3dvcmsobWFjLT53cSwgJmV2ZW50cHRyLT53b3JrLCAwKTsKLQkJCX0KLQkJfQotfQotCi12b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBpbnQgZXZlbnQsIHZvaWQgKmV2ZW50X2N0eCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgZXZlbnQsIGV2ZW50X2N0eCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLX0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2I0YjEzLi4wMDAwMDAwCi0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODggKzAsMCBAQAotLyoKLSAqIFNvbWUgcGFydHMgYmFzZWQgb24gY29kZSBmcm9tIG5ldDgwMjExCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgQXRzdXNoaSBPbm9lCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBTYW0gTGVmZmxlciwgRXJybm8gQ29uc3VsdGluZwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImllZWU4MDIxMXNvZnRtYWNfcHJpdi5oIgotCi0vKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBpbnNlcnRpbmcgZGF0YSBpbnRvIHRoZSBmcmFtZXMgKi8KLQotLyoKLSAqIEFkZHMgYW4gRVNTSUQgZWxlbWVudCB0byB0aGUgZnJhbWUKLSAqCi0gKi8KLXN0YXRpYyB1OCAqCi1pZWVlODAyMTFzb2Z0bWFjX2FkZF9lc3NpZCh1OCAqZHN0LCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqZXNzaWQpCi17Ci0JaWYgKGVzc2lkKSB7Ci0JCSpkc3QrKyA9IE1GSUVfVFlQRV9TU0lEOwotCQkqZHN0KysgPSBlc3NpZC0+bGVuOwotCQltZW1jcHkoZHN0LCBlc3NpZC0+ZGF0YSwgZXNzaWQtPmxlbik7Ci0JCXJldHVybiBkc3QrZXNzaWQtPmxlbjsKLQl9IGVsc2UgewotCQkqZHN0KysgPSBNRklFX1RZUEVfU1NJRDsKLQkJKmRzdCsrID0gMDsKLQkJcmV0dXJuIGRzdDsKLQl9Ci19Ci0KLS8qIEFkZHMgU3VwcG9ydGVkIFJhdGVzIGFuZCBpZiByZXF1aXJlZCBFeHRlbmRlZCBSYXRlcyBJbmZvcm1hdGlvbiBFbGVtZW50Ci0gKiB0byB0aGUgZnJhbWUsIEFTU1VNRVMgV0UgSEFWRSBBIFNPUlRFRCBMSVNUIE9GIFJBVEVTICovCi1zdGF0aWMgdTggKgotaWVlZTgwMjExc29mdG1hY19mcmFtZV9hZGRfcmF0ZXModTggKmRzdCwgY29uc3Qgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyKQotewotCWludCBjY2tfbGVuLCBvZmRtX2xlbjsKLQkqZHN0KysgPSBNRklFX1RZUEVfUkFURVM7Ci0KLQlmb3IoY2NrX2xlbj0wOyBpZWVlODAyMTFfaXNfY2NrX3JhdGUoci0+cmF0ZXNbY2NrX2xlbl0pICYmIChjY2tfbGVuIDwgci0+Y291bnQpO2Nja19sZW4rKyk7Ci0KLQlpZihjY2tfbGVuID4gSUVFRTgwMjExU09GVE1BQ19NQVhfUkFURVNfTEVOKQotCQljY2tfbGVuID0gSUVFRTgwMjExU09GVE1BQ19NQVhfUkFURVNfTEVOOwotCSpkc3QrKyA9IGNja19sZW47Ci0JbWVtY3B5KGRzdCwgci0+cmF0ZXMsIGNja19sZW4pOwotCWRzdCArPSBjY2tfbGVuOwotCi0JaWYoY2NrX2xlbiA8IHItPmNvdW50KXsKLQkJZm9yIChvZmRtX2xlbj0wOyBpZWVlODAyMTFfaXNfb2ZkbV9yYXRlKHItPnJhdGVzW29mZG1fbGVuICsgY2NrX2xlbl0pICYmIChvZmRtX2xlbiArIGNja19sZW4gPCByLT5jb3VudCk7IG9mZG1fbGVuKyspOwotCQlpZiAob2ZkbV9sZW4gPiAwKSB7Ci0JCQlpZiAob2ZkbV9sZW4gPiBJRUVFODAyMTFTT0ZUTUFDX01BWF9FWF9SQVRFU19MRU4pCi0JCQkJb2ZkbV9sZW4gPSBJRUVFODAyMTFTT0ZUTUFDX01BWF9FWF9SQVRFU19MRU47Ci0JCQkqZHN0KysgPSBNRklFX1RZUEVfUkFURVNfRVg7Ci0JCQkqZHN0KysgPSBvZmRtX2xlbjsKLQkJCW1lbWNweShkc3QsIHItPnJhdGVzICsgY2NrX2xlbiwgb2ZkbV9sZW4pOwotCQkJZHN0ICs9IG9mZG1fbGVuOwotCQl9Ci0JfQotCXJldHVybiBkc3Q7Ci19Ci0KLS8qIEFsbG9jYXRlIGEgbWFuYWdlbWVudCBmcmFtZSAqLwotc3RhdGljIHU4ICoKLWllZWU4MDIxMXNvZnRtYWNfYWxsb2NfbWd0KHUzMiBzaXplKQotewotCXU4ICogZGF0YTsKLQotCS8qIEFkZCB0aGUgaGVhZGVyIGFuZCBGQ1MgdG8gdGhlIHNpemUgKi8KLQlzaXplID0gc2l6ZSArIElFRUU4MDIxMV8zQUREUl9MRU47Ci0JaWYoc2l6ZSA+IElFRUU4MDIxMV9EQVRBX0xFTikKLQkJcmV0dXJuIE5VTEw7Ci0JLyogQWxsb2NhdGUgdGhlIGZyYW1lICovCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLS8qCi0gKiBBZGQgYSAyIEFkZHJlc3MgSGVhZGVyCi0gKi8KLXN0YXRpYyB2b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2hkcl8yYWRkcihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqaGVhZGVyLCB1MzIgdHlwZSwgdTggKmRlc3QpCi17Ci0JLyogRmlsbCBpbiB0aGUgZnJhbWUgY29udHJvbCBmbGFncyAqLwotCWhlYWRlci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYodHlwZSk7Ci0JLyogQ29udHJvbCBwYWNrZXRzIGFsd2F5cyBoYXZlIFdFUCB0dXJuZWQgb2ZmICovCi0JaWYodHlwZSA+IElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSyAmJiB0eXBlIDwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTCkKLQkJaGVhZGVyLT5mcmFtZV9jdGwgfD0gbWFjLT5pZWVlLT5zZWMubGV2ZWwgPyBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpIDogMDsKLQotCS8qIEZpbGwgaW4gdGhlIGR1cmF0aW9uICovCi0JaGVhZGVyLT5kdXJhdGlvbl9pZCA9IDA7Ci0JLyogRklYTUU6IEhvdyBkbyBJIGZpbmQgdGhpcz8KLQkgKiBjYWxjdWxhdGUuIEJ1dCBtb3N0IGRyaXZlcnMganVzdCBmaWxsIGluIDAgKGV4Y2VwdCBpZiBpdCdzIGEgc3RhdGlvbiBpZCBvZiBjb3Vyc2UpICovCi0KLQkvKiBGaWxsIGluIHRoZSBEZXN0aW5hdGlvbiBBZGRyZXNzICovCi0JaWYoZGVzdCA9PSBOVUxMKQotCQltZW1zZXQoaGVhZGVyLT5hZGRyMSwgMHhGRiwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KGhlYWRlci0+YWRkcjEsIGRlc3QsIEVUSF9BTEVOKTsKLQkvKiBGaWxsIGluIHRoZSBTb3VyY2UgQWRkcmVzcyAqLwotCW1lbWNweShoZWFkZXItPmFkZHIyLCBtYWMtPmllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQotfQotCi0KLS8qIEFkZCBhIDMgQWRkcmVzcyBIZWFkZXIgKi8KLXN0YXRpYyB2b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGVhZGVyLCB1MzIgdHlwZSwgdTggKmRlc3QsIHU4ICpic3NpZCkKLXsKLQkvKiBUaGlzIGlzIGNvbW1vbiB3aXRoIDJhZGRyLCBzbyB1c2UgdGhhdCBpbnN0ZWFkICovCi0JaWVlZTgwMjExc29mdG1hY19oZHJfMmFkZHIobWFjLCAoc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgKiloZWFkZXIsIHR5cGUsIGRlc3QpOwotCi0JLyogRmlsbCBpbiB0aGUgQlNTIElEICovCi0JaWYoYnNzaWQgPT0gTlVMTCkKLQkJbWVtc2V0KGhlYWRlci0+YWRkcjMsIDB4RkYsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShoZWFkZXItPmFkZHIzLCBic3NpZCwgRVRIX0FMRU4pOwotCi0JLyogRmlsbCBpbiB0aGUgc2VxdWVuY2UgIyAqLwotCS8qIEZJWE1FOiBJIG5lZWQgdG8gYWRkIHRoaXMgdG8gdGhlIHNvZnRtYWMgc3RydWN0Ci0JICogc2hvdWxkbid0IHRoZSBzZXF1ZW5jZSBudW1iZXIgYmUgaW4gaWVlZTgwMjExPyAqLwotfQotCi1zdGF0aWMgX19sZTE2Ci1pZWVlODAyMTFzb2Z0bWFjX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpCi17Ci0JX19sZTE2IGNhcGFiaWxpdHkgPSAwOwotCi0JLyogRVNTIGFuZCBJQlNTIGJpdHMgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbW9kZSAqLwotCXN3aXRjaCAobWFjLT5pZWVlLT5pd19tb2RlKSB7Ci0JY2FzZSBJV19NT0RFX0lORlJBOgotCQljYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0VTUyk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJY2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0FVVE86Ci0JCWNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihuZXQtPmNhcGFiaWxpdGllcyAmCi0JCQkoV0xBTl9DQVBBQklMSVRZX0VTU3xXTEFOX0NBUEFCSUxJVFlfSUJTUykpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBibGVoLiB3ZSBkb24ndCBldmVyIGdvIHRvIHRoZXNlIG1vZGVzICovCi0JCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgaXdfbW9kZSFcbiIpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBDRiBQb2xsYWJsZSAvIENGIFBvbGwgUmVxdWVzdCAqLwotCS8qIE5lZWRzIHRvIGJlIGltcGxlbWVudGVkLCBmb3Igbm93LCB0aGUgMCdzID09IG5vdCBzdXBwb3J0ZWQgKi8KLQotCS8qIFByaXZhY3kgQml0ICovCi0JY2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNlYy5sZXZlbCA/Ci0JCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSA6IDA7Ci0KLQkvKiBTaG9ydCBQcmVhbWJsZSAqLwotCS8qIEFsd2F5cyBzdXBwb3J0ZWQ6IHdlIHByb2JhYmx5IHdvbid0IGV2ZXIgYmUgcG93ZXJpbmcgZGV2aWNlcyB3aGljaAotCSAqIGRvbnQgc3VwcG9ydCB0aGlzLi4uICovCi0JY2FwYWJpbGl0eSB8PSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpOwotCi0JLyogUEJDQyAqLwotCS8qIE5vdCB3aWRlbHkgdXNlZCAqLwotCi0JLyogQ2hhbm5lbCBBZ2lsaXR5ICovCi0JLyogTm90IHdpZGVseSB1c2VkICovCi0KLQkvKiBTaG9ydCBTbG90ICovCi0JLyogV2lsbCBiZSBpbXBsZW1lbnRlZCBsYXRlciAqLwotCi0JLyogRFNTUy1PRkRNICovCi0JLyogTm90IHdpZGVseSB1c2VkICovCi0KLQlyZXR1cm4gY2FwYWJpbGl0eTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDcmVhdGUgTWFuYWdlbWVudCBwYWNrZXRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIENyZWF0ZXMgYW4gYXNzb2NpYXRpb24gcmVxdWVzdCBwYWNrZXQgKi8KLXN0YXRpYyB1MzIKLWllZWU4MDIxMXNvZnRtYWNfYXNzb2NfcmVxKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCAqKnBrdCwKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQotewotCXU4ICpkYXRhOwotCSgqcGt0KSA9IChzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QgKilpZWVlODAyMTFzb2Z0bWFjX2FsbG9jX21ndCgKLQkJMiArCQkvKiBDYXBhYmlsaXR5IEluZm8gKi8KLQkJMiArCSAJLyogTGlzdGVuIEludGVydmFsICovCi0JCS8qIFNTSUQgSUUgKi8KLQkJMSArIDEgKyBJV19FU1NJRF9NQVhfU0laRSArCi0JCS8qIFJhdGVzIElFICovCi0JCTEgKyAxICsgSUVFRTgwMjExU09GVE1BQ19NQVhfUkFURVNfTEVOICsKLQkJLyogRXh0ZW5kZWQgUmF0ZXMgSUUgKi8KLQkJMSArIDEgKyBJRUVFODAyMTFTT0ZUTUFDX01BWF9FWF9SQVRFU19MRU4gKwotCQkvKiBXUEEgSUUgaWYgcHJlc2VudCAqLwotCQltYWMtPndwYS5JRWxlbgotCQkvKiBPdGhlciBJRSdzPyAgT3B0aW9uYWw/Ci0JCSAqIFllYWgsIHByb2JhYmx5IG5lZWQgYW4gZXh0cmEgSUUgcGFyYW1ldGVyIC0tIGxvdHMgb2YgdmVuZG9ycyBsaWtlIHRvCi0JCSAqIGZpbGwgaW4gdGhlaXIgb3duIElFcyAqLwotCSk7Ci0JaWYgKHVubGlrZWx5KCgqcGt0KSA9PSBOVUxMKSkKLQkJcmV0dXJuIDA7Ci0JaWVlZTgwMjExc29mdG1hY19oZHJfM2FkZHIobWFjLCAmKCgqcGt0KS0+aGVhZGVyKSwgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSwgbmV0LT5ic3NpZCwgbmV0LT5ic3NpZCk7Ci0KLQkvKiBGaWxsIGluIHRoZSBjYXBhYmlsaXRpZXMgKi8KLQkoKnBrdCktPmNhcGFiaWxpdHkgPSBpZWVlODAyMTFzb2Z0bWFjX2NhcGFiaWxpdGllcyhtYWMsIG5ldCk7Ci0KLQkvKiBGaWxsIGluIExpc3RlbiBJbnRlcnZhbCAoPykgKi8KLQkoKnBrdCktPmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KDEwKTsKLQotCWRhdGEgPSAodTggKikoKnBrdCktPmluZm9fZWxlbWVudDsKLQkvKiBBZGQgU1NJRCAqLwotCWRhdGEgPSBpZWVlODAyMTFzb2Z0bWFjX2FkZF9lc3NpZChkYXRhLCAmbmV0LT5lc3NpZCk7Ci0JLyogQWRkIFJhdGVzICovCi0JZGF0YSA9IGllZWU4MDIxMXNvZnRtYWNfZnJhbWVfYWRkX3JhdGVzKGRhdGEsICZtYWMtPnJhdGVzaW5mbyk7Ci0JLyogQWRkIFdQQSBJRSAqLwotCWlmIChtYWMtPndwYS5JRWxlbiAmJiBtYWMtPndwYS5JRSkgewotCQltZW1jcHkoZGF0YSwgbWFjLT53cGEuSUUsIG1hYy0+d3BhLklFbGVuKTsKLQkJZGF0YSArPSBtYWMtPndwYS5JRWxlbjsKLQl9Ci0JLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyAqLwotCXJldHVybiAoZGF0YSAtICh1OCopKCpwa3QpKTsKLX0KLQotLyogQ3JlYXRlIGEgcmVhc3NvY2lhdGlvbiByZXF1ZXN0IHBhY2tldCAqLwotc3RhdGljIHUzMgotaWVlZTgwMjExc29mdG1hY19yZWFzc29jX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKnBrdCwKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQotewotCXU4ICpkYXRhOwotCSgqcGt0KSA9IChzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKWllZWU4MDIxMXNvZnRtYWNfYWxsb2NfbWd0KAotCQkyICsJCS8qIENhcGFiaWxpdHkgSW5mbyAqLwotCQkyICsJIAkvKiBMaXN0ZW4gSW50ZXJ2YWwgKi8KLQkJRVRIX0FMRU4gKwkvKiBBUCBNQUMgKi8KLQkJLyogU1NJRCBJRSAqLwotCQkxICsgMSArIElXX0VTU0lEX01BWF9TSVpFICsKLQkJLyogUmF0ZXMgSUUgKi8KLQkJMSArIDEgKyBJRUVFODAyMTFTT0ZUTUFDX01BWF9SQVRFU19MRU4gKwotCQkvKiBFeHRlbmRlZCBSYXRlcyBJRSAqLwotCQkxICsgMSArIElFRUU4MDIxMVNPRlRNQUNfTUFYX0VYX1JBVEVTX0xFTgotCQkvKiBPdGhlciBJRSdzPyAqLwotCSk7Ci0JaWYgKHVubGlrZWx5KCgqcGt0KSA9PSBOVUxMKSkKLQkJcmV0dXJuIDA7Ci0JaWVlZTgwMjExc29mdG1hY19oZHJfM2FkZHIobWFjLCAmKCgqcGt0KS0+aGVhZGVyKSwgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKLQotCS8qIEZpbGwgaW4gdGhlIGNhcGFiaWxpdGllcyAqLwotCSgqcGt0KS0+Y2FwYWJpbGl0eSA9IGllZWU4MDIxMXNvZnRtYWNfY2FwYWJpbGl0aWVzKG1hYywgbmV0KTsKLQotCS8qIEZpbGwgaW4gTGlzdGVuIEludGVydmFsICg/KSAqLwotCSgqcGt0KS0+bGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYoMTApOwotCS8qIEZpbGwgaW4gdGhlIGN1cnJlbnQgQVAgTUFDICovCi0JbWVtY3B5KCgqcGt0KS0+Y3VycmVudF9hcCwgbWFjLT5pZWVlLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0JZGF0YSA9ICh1OCAqKSgqcGt0KS0+aW5mb19lbGVtZW50OwotCS8qIEFkZCBTU0lEICovCi0JZGF0YSA9IGllZWU4MDIxMXNvZnRtYWNfYWRkX2Vzc2lkKGRhdGEsICZuZXQtPmVzc2lkKTsKLQkvKiBBZGQgUmF0ZXMgKi8KLQlkYXRhID0gaWVlZTgwMjExc29mdG1hY19mcmFtZV9hZGRfcmF0ZXMoZGF0YSwgJm1hYy0+cmF0ZXNpbmZvKTsKLQkvKiBSZXR1cm4gcGFja2V0IHNpemUgKi8KLQlyZXR1cm4gKGRhdGEgLSAodTggKikoKnBrdCkpOwotfQotCi0vKiBDcmVhdGUgYW4gYXV0aGVudGljYXRpb24gcGFja2V0ICovCi1zdGF0aWMgdTMyCi1pZWVlODAyMTFzb2Z0bWFjX2F1dGgoc3RydWN0IGllZWU4MDIxMV9hdXRoICoqcGt0LAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsCi0JdTE2IHRyYW5zYWN0aW9uLCB1MTYgc3RhdHVzLCBpbnQgKmVuY3J5cHRfbXBkdSkKLXsKLQl1OCAqZGF0YTsKLQlpbnQgYXV0aF9tb2RlID0gbWFjLT5pZWVlLT5zZWMuYXV0aF9tb2RlOwotCWludCBpc19zaGFyZWRfcmVzcG9uc2UgPSAoYXV0aF9tb2RlID09IFdMQU5fQVVUSF9TSEFSRURfS0VZCi0JCSYmIHRyYW5zYWN0aW9uID09IElFRUU4MDIxMVNPRlRNQUNfQVVUSF9TSEFSRURfUkVTUE9OU0UpOwotCi0JLyogQWxsb2NhdGUgUGFja2V0ICovCi0JKCpwa3QpID0gKHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqKWllZWU4MDIxMXNvZnRtYWNfYWxsb2NfbWd0KAotCQkyICsJCS8qIEF1dGggQWxnb3JpdGhtICovCi0JCTIgKwkJLyogQXV0aCBUcmFuc2FjdGlvbiBTZXEgKi8KLQkJMiArCQkvKiBTdGF0dXMgQ29kZSAqLwotCQkgLyogQ2hhbGxlbmdlIFRleHQgSUUgKi8KLQkJKGlzX3NoYXJlZF9yZXNwb25zZSA/IDEgKyAxICsgbmV0LT5jaGFsbGVuZ2VfbGVuIDogMCkKLQkpOwotCWlmICh1bmxpa2VseSgoKnBrdCkgPT0gTlVMTCkpCi0JCXJldHVybiAwOwotCWllZWU4MDIxMXNvZnRtYWNfaGRyXzNhZGRyKG1hYywgJigoKnBrdCktPmhlYWRlciksIElFRUU4MDIxMV9TVFlQRV9BVVRILCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKLQotCS8qIEFsZ29yaXRobSAqLwotCSgqcGt0KS0+YWxnb3JpdGhtID0gY3B1X3RvX2xlMTYoYXV0aF9tb2RlKTsKLQkvKiBUcmFuc2FjdGlvbiAqLwotCSgqcGt0KS0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7Ci0JLyogU3RhdHVzICovCi0JKCpwa3QpLT5zdGF0dXMgPSBjcHVfdG9fbGUxNihzdGF0dXMpOwotCi0JZGF0YSA9ICh1OCAqKSgqcGt0KS0+aW5mb19lbGVtZW50OwotCS8qIENoYWxsZW5nZSBUZXh0ICovCi0JaWYgKGlzX3NoYXJlZF9yZXNwb25zZSkgewotCQkqZGF0YSA9IE1GSUVfVFlQRV9DSEFMTEVOR0U7Ci0JCWRhdGErKzsKLQotCQkvKiBDb3B5IHRoZSBjaGFsbGVuZ2UgaW4gKi8KLQkJKmRhdGEgPSBuZXQtPmNoYWxsZW5nZV9sZW47Ci0JCWRhdGErKzsKLQkJbWVtY3B5KGRhdGEsIG5ldC0+Y2hhbGxlbmdlLCBuZXQtPmNoYWxsZW5nZV9sZW4pOwotCQlkYXRhICs9IG5ldC0+Y2hhbGxlbmdlX2xlbjsKLQotCQkvKiBNYWtlIHN1cmUgdGhpcyBmcmFtZSBnZXRzIGVuY3J5cHRlZCB3aXRoIHRoZSBzaGFyZWQga2V5ICovCi0JCSplbmNyeXB0X21wZHUgPSAxOwotCX0gZWxzZQotCQkqZW5jcnlwdF9tcGR1ID0gMDsKLQotCS8qIFJldHVybiB0aGUgcGFja2V0IHNpemUgKi8KLQlyZXR1cm4gKGRhdGEgLSAodTggKikoKnBrdCkpOwotfQotCi0vKiBDcmVhdGUgYSBkaXNhc3NvY2F0aW9uIG9yIGRlYXV0aGVudGljYXRpb24gcGFja2V0ICovCi1zdGF0aWMgdTMyCi1pZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jX2RlYXV0aChzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICoqcGt0LAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsCi0JdTE2IHR5cGUsIHUxNiByZWFzb24pCi17Ci0JLyogQWxsb2NhdGUgUGFja2V0ICovCi0JKCpwa3QpID0gKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKilpZWVlODAyMTFzb2Z0bWFjX2FsbG9jX21ndCgyKTsKLQlpZiAodW5saWtlbHkoKCpwa3QpID09IE5VTEwpKQotCQlyZXR1cm4gMDsKLQlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCB0eXBlLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKLQkvKiBSZWFzb24gKi8KLQkoKnBrdCktPnJlYXNvbiA9IGNwdV90b19sZTE2KHJlYXNvbik7Ci0JLyogUmV0dXJuIHRoZSBwYWNrZXQgc2l6ZSAqLwotCXJldHVybiAoMiArIElFRUU4MDIxMV8zQUREUl9MRU4pOwotfQotCi0vKiBDcmVhdGUgYSBwcm9iZSByZXF1ZXN0IHBhY2tldCAqLwotc3RhdGljIHUzMgotaWVlZTgwMjExc29mdG1hY19wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0ICoqcGt0LAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqZXNzaWQpCi17Ci0JdTggKmRhdGE7Ci0JLyogQWxsb2NhdGUgUGFja2V0ICovCi0JKCpwa3QpID0gKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCAqKWllZWU4MDIxMXNvZnRtYWNfYWxsb2NfbWd0KAotCQkvKiBTU0lEIG9mIHJlcXVlc3RlZCBuZXR3b3JrICovCi0JCTEgKyAxICsgSVdfRVNTSURfTUFYX1NJWkUgKwotCQkvKiBSYXRlcyBJRSAqLwotCQkxICsgMSArIElFRUU4MDIxMVNPRlRNQUNfTUFYX1JBVEVTX0xFTiArCi0JCS8qIEV4dGVuZGVkIFJhdGVzIElFICovCi0JCTEgKyAxICsgSUVFRTgwMjExU09GVE1BQ19NQVhfRVhfUkFURVNfTEVOCi0JKTsKLQlpZiAodW5saWtlbHkoKCpwa3QpID09IE5VTEwpKQotCQlyZXR1cm4gMDsKLQlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRLCBOVUxMLCBOVUxMKTsKLQotCWRhdGEgPSAodTggKikoKnBrdCktPmluZm9fZWxlbWVudDsKLQkvKiBBZGQgRVNTSUQgKGNhbiBiZSBOVUxMKSAqLwotCWRhdGEgPSBpZWVlODAyMTFzb2Z0bWFjX2FkZF9lc3NpZChkYXRhLCBlc3NpZCk7Ci0JLyogQWRkIFJhdGVzICovCi0JZGF0YSA9IGllZWU4MDIxMXNvZnRtYWNfZnJhbWVfYWRkX3JhdGVzKGRhdGEsICZtYWMtPnJhdGVzaW5mbyk7Ci0JLyogUmV0dXJuIHBhY2tldCBzaXplICovCi0JcmV0dXJuIChkYXRhIC0gKHU4ICopKCpwa3QpKTsKLX0KLQotLyogQ3JlYXRlIGEgcHJvYmUgcmVzcG9uc2UgcGFja2V0ICovCi0vKiBGSVhNRTogTm90IGNvbXBsZXRlICovCi1zdGF0aWMgdTMyCi1pZWVlODAyMTFzb2Z0bWFjX3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqKnBrdCwKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQotewotCXU4ICpkYXRhOwotCS8qIEFsbG9jYXRlIFBhY2tldCAqLwotCSgqcGt0KSA9IChzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlICopaWVlZTgwMjExc29mdG1hY19hbGxvY19tZ3QoCi0JCTggKwkJLyogVGltZXN0YW1wICovCi0JCTIgKwkJLyogQmVhY29uIEludGVydmFsICovCi0JCTIgKwkJLyogQ2FwYWJpbGl0eSBJbmZvICovCi0JCQkJLyogU1NJRCBJRSAqLwotCQkxICsgMSArIElXX0VTU0lEX01BWF9TSVpFICsKLQkJNyArIAkJLyogRkggUGFyYW1ldGVyIFNldCAqLwotCQkyICsJCS8qIERTIFBhcmFtZXRlciBTZXQgKi8KLQkJOCArCQkvKiBDRiBQYXJhbWV0ZXIgU2V0ICovCi0JCTQgCQkvKiBJQlNTIFBhcmFtZXRlciBTZXQgKi8KLQkpOwotCWlmICh1bmxpa2VseSgoKnBrdCkgPT0gTlVMTCkpCi0JCXJldHVybiAwOwotCWllZWU4MDIxMXNvZnRtYWNfaGRyXzNhZGRyKG1hYywgJigoKnBrdCktPmhlYWRlciksIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKLQlkYXRhID0gKHU4ICopKCpwa3QpLT5pbmZvX2VsZW1lbnQ7Ci0KLQkvKiBSZXR1cm4gdGhlIHBhY2tldCBzaXplICovCi0JcmV0dXJuIChkYXRhIC0gKHU4ICopKCpwa3QpKTsKLX0KLQotCi0vKiBTZW5kcyBhIG1hbmFuZ2VtZW50IHBhY2tldAotICogRklYTUU6IGRvY3VtZW50IHRoZSB1c2Ugb2YgdGhlIGFyZyBwYXJhbWV0ZXIKLSAqIGZvciBfQVVUSDogKHRyYW5zYWN0aW9uICMpIHwgKHN0YXR1cyA8PCAxNikKLSAqLwotaW50Ci1pZWVlODAyMTFzb2Z0bWFjX3NlbmRfbWd0X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXZvaWQgKnB0cmFyZywgdTMyIHR5cGUsIHUzMiBhcmcpCi17Ci0Jdm9pZCAqcGt0ID0gTlVMTDsKLQl1MzIgcGt0X3NpemUgPSAwOwotCWludCBlbmNyeXB0X21wZHUgPSAwOwotCi0Jc3dpdGNoKHR5cGUpIHsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE6Ci0JCXBrdF9zaXplID0gaWVlZTgwMjExc29mdG1hY19hc3NvY19yZXEoKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCAqKikoJnBrdCksIG1hYywgKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKilwdHJhcmcpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUToKLQkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX3JlYXNzb2NfcmVxKChzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKikoJnBrdCksIG1hYywgKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKilwdHJhcmcpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgotCQlwa3Rfc2l6ZSA9IGllZWU4MDIxMXNvZnRtYWNfYXV0aCgoc3RydWN0IGllZWU4MDIxMV9hdXRoICoqKSgmcGt0KSwgbWFjLCAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKXB0cmFyZywgKHUxNikoYXJnICYgMHhGRkZGKSwgKHUxNikgKGFyZyA+PiAxNiksICZlbmNyeXB0X21wZHUpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCXBrdF9zaXplID0gaWVlZTgwMjExc29mdG1hY19kaXNhc3NvY19kZWF1dGgoKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKiopKCZwa3QpLCBtYWMsIChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICopcHRyYXJnLCB0eXBlLCAodTE2KShhcmcgJiAweEZGRkYpKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQlwa3Rfc2l6ZSA9IGllZWU4MDIxMXNvZnRtYWNfcHJvYmVfcmVxKChzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgKiopKCZwa3QpLCBtYWMsIChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqKXB0cmFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6Ci0JCXBrdF9zaXplID0gaWVlZTgwMjExc29mdG1hY19wcm9iZV9yZXNwKChzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlICoqKSgmcGt0KSwgbWFjLCAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKXB0cmFyZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50a2woS0VSTl9ERUJVRyBQRlggIlVuc3VwcG9ydGVkIE1hbmFnZW1lbnQgRnJhbWUgdHlwZTogJWlcbiIsIHR5cGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9OwotCi0JaWYocGt0X3NpemUgPT0gMCB8fCBwa3QgPT0gTlVMTCkgewotCQlwcmludGtsKEtFUk5fREVCVUcgUEZYICJFcnJvciwgcGFja2V0IGlzIG5vbmV4aXN0YW50IG9yIDAgbGVuZ3RoXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBpZWVlODAyMTEgbGF5ZXIgZm9yIHR4ICovCi0JLyogd2UgZGVmaW5lZCBzb2Z0bWFjLT5tZ210X3htaXQgZm9yIHRoaXMuIFNob3VsZCB3ZSBrZWVwIGl0Ci0JICogYXMgaXQgaXMgKHRoYXQgbWVhbnMgd2UnZCBuZWVkIHRvIHdyYXAgdGhpcyBpbnRvIGEgdHhiKSwKLQkgKiBtb2RpZnkgdGhlIHByb3RvdHlwZSAoc28gaXQgbWF0Y2hlcyB0aGlzIGZ1bmN0aW9uKSwKLQkgKiBvciBnZXQgcmlkIG9mIGl0IGFsbHRvZ2V0aGVyPwotCSAqIERvZXMgdGhpcyB3b3JrIGZvciB5b3Ugbm93PwotCSAqLwotCWllZWU4MDIxMV90eF9mcmFtZShtYWMtPmllZWUsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXBrdCwKLQkJSUVFRTgwMjExXzNBRERSX0xFTiwgcGt0X3NpemUsIGVuY3J5cHRfbXBkdSk7Ci0KLQlrZnJlZShwa3QpOwotCXJldHVybiAwOwotfQotCi0vKiBCZWFjb24gaGFuZGxpbmcgKi8KLWludCBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQlzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiAqYmVhY29uLAotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQkvKiBUaGlzIG1pZ2h0IHJhY2UsIGJ1dCB3ZSBkb24ndCByZWFsbHkgY2FyZSBhbmQgaXQncyBub3Qgd29ydGgKLQkgKiBhZGRpbmcgaGVhdnl3ZWlnaHQgbG9ja2luZyBpbiB0aGlzIGZhc3RwYXRoLgotCSAqLwotCWlmIChtYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkKSB7Ci0JCWlmIChtZW1jbXAobmV0d29yay0+YnNzaWQsIG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKLQkJCWllZWU4MDIxMXNvZnRtYWNfcHJvY2Vzc19lcnAobWFjLCBuZXR3b3JrLT5lcnBfdmFsdWUpOwotCX0KLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzUwNWNhLi4wMDAwMDAwCi0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTY4ICswLDAgQEAKLS8qCi0gKiBDb250YWlucyBzb21lIGJhc2ljIHNvZnRtYWMgZnVuY3Rpb25zIGFsb25nIHdpdGggbW9kdWxlIHJlZ2lzdHJhdGlvbiBjb2RlIGV0Yy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBKb3NlcGggSmV6YWsgPGpvc2VqeEBnZW50b28ub3JnPgotICogICAgICAgICAgICAgICAgICAgICAgICAgIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKi8KLQotI2luY2x1ZGUgImllZWU4MDIxMXNvZnRtYWNfcHJpdi5oIgotI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExc29mdG1hYyhpbnQgc2l6ZW9mX3ByaXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzb2Z0bWFjOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0KLQlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKCpzb2Z0bWFjKSArIHNpemVvZl9wcml2KTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIE5VTEw7Ci0Jc29mdG1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc29mdG1hYy0+d3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInNvZnRtYWMiKTsKLQlpZiAoIXNvZnRtYWMtPndxKSB7Ci0JCWZyZWVfaWVlZTgwMjExKGRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXNvZnRtYWMtPmRldiA9IGRldjsKLQlzb2Z0bWFjLT5pZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaW5pdCgmc29mdG1hYy0+bG9jayk7Ci0KLQlzb2Z0bWFjLT5pZWVlLT5oYW5kbGVfYXV0aCA9IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXNwOwotCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9kZWF1dGggPSBpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9yZXNwOwotCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9hc3NvY19yZXNwb25zZSA9IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlOwotCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QgPSBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9yZWFzc29jX3JlcTsKLQlzb2Z0bWFjLT5pZWVlLT5oYW5kbGVfZGlzYXNzb2MgPSBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9kaXNhc3NvYzsKLQlzb2Z0bWFjLT5pZWVlLT5oYW5kbGVfYmVhY29uID0gaWVlZTgwMjExc29mdG1hY19oYW5kbGVfYmVhY29uOwotCXNvZnRtYWMtPnNjYW5pbmZvID0gTlVMTDsKLQotCXNvZnRtYWMtPmFzc29jaW5mby5zY2FuX3JldHJ5ID0gSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUOwotCi0JLyogVE9ETzogaW5pdGlhbGlzZSBhbGwgdGhlIG90aGVyIGNhbGxiYWNrcyBpbiB0aGUgaWVlZSBzdHJ1Y3QKLQkgKgkgKG9uY2UgdGhleSdyZSB3cml0dGVuKQotCSAqLwotCi0JSU5JVF9MSVNUX0hFQUQoJnNvZnRtYWMtPmF1dGhfcXVldWUpOwotCUlOSVRfTElTVF9IRUFEKCZzb2Z0bWFjLT5uZXR3b3JrX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZzb2Z0bWFjLT5ldmVudHMpOwotCi0JbXV0ZXhfaW5pdCgmc29mdG1hYy0+YXNzb2NpbmZvLm11dGV4KTsKLQlJTklUX0RFTEFZRURfV09SSygmc29mdG1hYy0+YXNzb2NpbmZvLndvcmssIGllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfd29yayk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnNvZnRtYWMtPmFzc29jaW5mby50aW1lb3V0LCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3RpbWVvdXQpOwotCXNvZnRtYWMtPnN0YXJ0X3NjYW4gPSBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X3NjYW5faW1wbGVtZW50YXRpb247Ci0Jc29mdG1hYy0+d2FpdF9mb3Jfc2NhbiA9IGllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2Nhbl9pbXBsZW1lbnRhdGlvbjsKLQlzb2Z0bWFjLT5zdG9wX3NjYW4gPSBpZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2Nhbl9pbXBsZW1lbnRhdGlvbjsKLQotCS8qIHRvIHN0YXJ0IHdpdGgsIHdlIGNhbid0IHNlbmQgYW55dGhpbmcgLi4uICovCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCXJldHVybiBkZXY7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChhbGxvY19pZWVlODAyMTFzb2Z0bWFjKTsKLQotLyogQ2xlYXJzIHRoZSBwZW5kaW5nIHdvcmsgcXVldWUgaXRlbXMsIHN0b3BzIGFsbCBzY2FucywgZXRjLiAqLwotdm9pZAotaWVlZTgwMjExc29mdG1hY19jbGVhcl9wZW5kaW5nX3dvcmsoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50ICpldmVudHB0ciwgKmV2ZW50dG1wOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWVfaXRlbSAqYXV0aHB0ciwgKmF1dGh0bXA7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0cHRyLCAqbmV0dG1wOwotCi0JaWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW4oc20pOwotCWllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2NhbihzbSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKLQlzbS0+cnVubmluZyA9IDA7Ci0KLQkvKiBGcmVlIGFsbCBwZW5kaW5nIGFzc29jIHdvcmsgaXRlbXMgKi8KLQljYW5jZWxfZGVsYXllZF93b3JrKCZzbS0+YXNzb2NpbmZvLndvcmspOwotCi0JLyogRnJlZSBhbGwgcGVuZGluZyBzY2FuIHdvcmsgaXRlbXMgKi8KLQlpZihzbS0+c2NhbmluZm8gIT0gTlVMTCkKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmc20tPnNjYW5pbmZvLT5zb2Z0bWFjX3NjYW4pOwotCi0JLyogRnJlZSBhbGwgcGVuZGluZyBhdXRoIHdvcmsgaXRlbXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF1dGhwdHIsICZzbS0+YXV0aF9xdWV1ZSwgbGlzdCkKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYXV0aHB0ci0+d29yayk7Ci0KLQkvKiBkZWxldGUgYWxsIHBlbmRpbmcgZXZlbnQgY2FsbHMgYW5kIHdvcmsgaXRlbXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnRwdHIsIGV2ZW50dG1wLCAmc20tPmV2ZW50cywgbGlzdCkKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmZXZlbnRwdHItPndvcmspOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKLQlmbHVzaF93b3JrcXVldWUoc20tPndxKTsKLQotCS8qIG5vdyB3ZSBzaG91bGQgYmUgc2F2ZSBhbmQgbm8gbG9uZ2VyIG5lZWQgbG9ja2luZy4uLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwotCS8qIEZyZWUgYWxsIHBlbmRpbmcgYXV0aCB3b3JrIGl0ZW1zICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF1dGhwdHIsIGF1dGh0bXAsICZzbS0+YXV0aF9xdWV1ZSwgbGlzdCkgewotCQlsaXN0X2RlbCgmYXV0aHB0ci0+bGlzdCk7Ci0JCWtmcmVlKGF1dGhwdHIpOwotCX0KLQotCS8qIGRlbGV0ZSBhbGwgcGVuZGluZyBldmVudCBjYWxscyBhbmQgd29yayBpdGVtcyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudHB0ciwgZXZlbnR0bXAsICZzbS0+ZXZlbnRzLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZldmVudHB0ci0+bGlzdCk7Ci0JCWtmcmVlKGV2ZW50cHRyKTsKLQl9Ci0KLQkvKiBGcmVlIGFsbCBuZXR3b3JrcyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZXRwdHIsIG5ldHRtcCwgJnNtLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLQkJaWVlZTgwMjExc29mdG1hY19kZWxfbmV0d29ya19sb2NrZWQoc20sIG5ldHB0cik7Ci0JCWlmKG5ldHB0ci0+Y2hhbGxlbmdlICE9IE5VTEwpCi0JCQlrZnJlZShuZXRwdHItPmNoYWxsZW5nZSk7Ci0JCWtmcmVlKG5ldHB0cik7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfY2xlYXJfcGVuZGluZ193b3JrKTsKLQotdm9pZCBmcmVlX2llZWU4MDIxMXNvZnRtYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlpZWVlODAyMTFzb2Z0bWFjX2NsZWFyX3BlbmRpbmdfd29yayhzbSk7Ci0Ja2ZyZWUoc20tPnNjYW5pbmZvKTsKLQlrZnJlZShzbS0+d3BhLklFKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShzbS0+d3EpOwotCWZyZWVfaWVlZTgwMjExKGRldik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChmcmVlX2llZWU4MDIxMXNvZnRtYWMpOwotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X2NoZWNrX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyAqcmkgPSAmbWFjLT5yYXRlc2luZm87Ci0JLyogSSB0b29rIG91dCB0aGUgc29ydGluZyBjaGVjaywgd2UncmUgc2VwZXJhdGluZyBieSBtb2R1bGF0aW9uIG5vdy4gKi8KLQlpZiAocmktPmNvdW50KQotCQlyZXR1cm47Ci0JLyogb3RoZXJ3aXNlIGFzc3VtZSB3ZSBoYXYnZW0gYWxsISAqLwotCWlmIChtYWMtPmllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04pIHsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0JCXJpLT5yYXRlc1tyaS0+Y291bnQrK10gPSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COwotCQlyaS0+cmF0ZXNbcmktPmNvdW50KytdID0gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COwotCX0KLQlpZiAobWFjLT5pZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgewotCQlyaS0+cmF0ZXNbcmktPmNvdW50KytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7Ci0JCXJpLT5yYXRlc1tyaS0+Y291bnQrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKLQkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKLQl9Ci19Ci0KLWludCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mb19yYXRlX3N1cHBvcnRlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gKnJpLCB1OCByYXRlKQotewotCWludCBzZWFyY2g7Ci0JdTggc2VhcmNoX3JhdGU7Ci0KLQlmb3IgKHNlYXJjaCA9IDA7IHNlYXJjaCA8IHJpLT5jb3VudDsgc2VhcmNoKyspIHsKLQkJc2VhcmNoX3JhdGUgPSByaS0+cmF0ZXNbc2VhcmNoXTsKLQkJc2VhcmNoX3JhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7Ci0JCWlmIChyYXRlID09IHNlYXJjaF9yYXRlKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXU4IGllZWU4MDIxMXNvZnRtYWNfaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gKnJpLCBpbnQgYmFzaWNfb25seSkKLXsKLQl1OCB1c2VyX3JhdGUgPSBtYWMtPnR4cmF0ZXMudXNlcl9yYXRlOwotCWludCBpOwotCi0JaWYgKHJpLT5jb3VudCA9PSAwKQotCQlyZXR1cm4gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKLQotCWZvciAoaSA9IHJpLT5jb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCXU4IHJhdGUgPSByaS0+cmF0ZXNbaV07Ci0JCWlmIChiYXNpY19vbmx5ICYmICEocmF0ZSAmIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spKQotCQkJY29udGludWU7Ci0JCXJhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7Ci0JCWlmIChyYXRlID4gdXNlcl9yYXRlKQotCQkJY29udGludWU7Ci0JCWlmIChpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mb19yYXRlX3N1cHBvcnRlZCgmbWFjLT5yYXRlc2luZm8sIHJhdGUpKQotCQkJcmV0dXJuIHJhdGU7Ci0JfQotCi0JLyogSWYgd2UgaGF2ZW4ndCBmb3VuZCBhIHN1aXRhYmxlIHJhdGUgYnkgbm93LCBqdXN0IHRydXN0IHRoZSB1c2VyICovCi0JcmV0dXJuIHVzZXJfcmF0ZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZSk7Ci0KLXZvaWQgaWVlZTgwMjExc29mdG1hY19wcm9jZXNzX2VycChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQl1OCBlcnBfdmFsdWUpCi17Ci0JaW50IHVzZV9wcm90ZWN0aW9uOwotCWludCBzaG9ydF9wcmVhbWJsZTsKLQl1MzIgY2hhbmdlcyA9IDA7Ci0KLQkvKiBCYXJrZXIgcHJlYW1ibGUgbW9kZSAqLwotCXNob3J0X3ByZWFtYmxlID0gKChlcnBfdmFsdWUgJiBXTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEUpID09IDAKLQkJCSAgJiYgbWFjLT5hc3NvY2luZm8uc2hvcnRfcHJlYW1ibGVfYXZhaWxhYmxlKSA/IDEgOiAwOwotCi0JLyogUHJvdGVjdGlvbiBuZWVkZWQ/ICovCi0JdXNlX3Byb3RlY3Rpb24gPSAoZXJwX3ZhbHVlICYgV0xBTl9FUlBfVVNFX1BST1RFQ1RJT04pICE9IDA7Ci0KLQlpZiAobWFjLT5ic3NpbmZvLnNob3J0X3ByZWFtYmxlICE9IHNob3J0X3ByZWFtYmxlKSB7Ci0JCWNoYW5nZXMgfD0gSUVFRTgwMjExU09GVE1BQ19CU1NJTkZPQ0hHX1NIT1JUX1BSRUFNQkxFOwotCQltYWMtPmJzc2luZm8uc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZTsKLQl9Ci0KLQlpZiAobWFjLT5ic3NpbmZvLnVzZV9wcm90ZWN0aW9uICE9IHVzZV9wcm90ZWN0aW9uKSB7Ci0JCWNoYW5nZXMgfD0gSUVFRTgwMjExU09GVE1BQ19CU1NJTkZPQ0hHX1BST1RFQ1RJT047Ci0JCW1hYy0+YnNzaW5mby51c2VfcHJvdGVjdGlvbiA9IHVzZV9wcm90ZWN0aW9uOwotCX0KLQotCWlmIChtYWMtPmJzc2luZm9fY2hhbmdlICYmIGNoYW5nZXMpCi0JCW1hYy0+YnNzaW5mb19jaGFuZ2UobWFjLT5kZXYsIGNoYW5nZXMpOwotfQotCi12b2lkIGllZWU4MDIxMXNvZnRtYWNfcmVjYWxjX3R4cmF0ZXMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyAqdHhyYXRlcyA9ICZtYWMtPnR4cmF0ZXM7Ci0JdTMyIGNoYW5nZSA9IDA7Ci0KLQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVDsKLQl0eHJhdGVzLT5kZWZhdWx0X3JhdGUgPSBpZWVlODAyMTFzb2Z0bWFjX2hpZ2hlc3Rfc3VwcG9ydGVkX3JhdGUobWFjLCAmbWFjLT5ic3NpbmZvLnN1cHBvcnRlZF9yYXRlcywgMCk7Ci0KLQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSzsKLQl0eHJhdGVzLT5kZWZhdWx0X2ZhbGxiYWNrID0gbG93ZXJfcmF0ZShtYWMsIHR4cmF0ZXMtPmRlZmF1bHRfcmF0ZSk7Ci0KLQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUNBU1Q7Ci0JdHhyYXRlcy0+bWNhc3RfcmF0ZSA9IGllZWU4MDIxMXNvZnRtYWNfaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZShtYWMsICZtYWMtPmJzc2luZm8uc3VwcG9ydGVkX3JhdGVzLCAxKTsKLQotCWlmIChtYWMtPnR4cmF0ZXNfY2hhbmdlKQotCQltYWMtPnR4cmF0ZXNfY2hhbmdlKG1hYy0+ZGV2LCBjaGFuZ2UpOwotCi19Ci0KLXZvaWQgaWVlZTgwMjExc29mdG1hY19pbml0X2JzcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG1hYy0+aWVlZTsKLQl1MzIgY2hhbmdlID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzICp0eHJhdGVzID0gJm1hYy0+dHhyYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ic3NfaW5mbyAqYnNzaW5mbyA9ICZtYWMtPmJzc2luZm87Ci0KLQkvKiBUT0RPOiBXZSBuZWVkIHNvbWUga2luZCBvZiBzdGF0ZSBtYWNoaW5lIHRvIGxvd2VyIHRoZSBkZWZhdWx0IHJhdGVzCi0JICogICAgICAgaWYgd2UgbG9vc2UgdG9vIG1hbnkgcGFja2V0cy4KLQkgKi8KLQkvKiBDaGFuZ2UgdGhlIGRlZmF1bHQgdHhyYXRlIHRvIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHZhbHVlLgotCSAqIFRoZSB0eHJhdGUgbWFjaGluZSB3aWxsIGxvd2VyIGl0LCBpZiBpdCBpcyB0b28gaGlnaC4KLQkgKi8KLQlpZiAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pCi0JCXR4cmF0ZXMtPnVzZXJfcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKLQllbHNlCi0JCXR4cmF0ZXMtPnVzZXJfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COwotCi0JdHhyYXRlcy0+ZGVmYXVsdF9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKLQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVDsKLQotCXR4cmF0ZXMtPmRlZmF1bHRfZmFsbGJhY2sgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUX0ZCQUNLOwotCi0JdHhyYXRlcy0+bWNhc3RfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0JY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01DQVNUOwotCi0JdHhyYXRlcy0+bWd0X21jYXN0X3JhdGUgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19NR1RfTUNBU1Q7Ci0KLQlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKLQkJbWFjLT50eHJhdGVzX2NoYW5nZShtYWMtPmRldiwgY2hhbmdlKTsKLQotCWNoYW5nZSA9IDA7Ci0KLQlic3NpbmZvLT5zdXBwb3J0ZWRfcmF0ZXMuY291bnQgPSAwOwotCW1lbXNldChic3NpbmZvLT5zdXBwb3J0ZWRfcmF0ZXMucmF0ZXMsIDAsCi0JCXNpemVvZihic3NpbmZvLT5zdXBwb3J0ZWRfcmF0ZXMucmF0ZXMpKTsKLQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19CU1NJTkZPQ0hHX1JBVEVTOwotCi0JYnNzaW5mby0+c2hvcnRfcHJlYW1ibGUgPSAwOwotCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfU0hPUlRfUFJFQU1CTEU7Ci0KLQlic3NpbmZvLT51c2VfcHJvdGVjdGlvbiA9IDA7Ci0JY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfQlNTSU5GT0NIR19QUk9URUNUSU9OOwotCi0JaWYgKG1hYy0+YnNzaW5mb19jaGFuZ2UpCi0JCW1hYy0+YnNzaW5mb19jaGFuZ2UobWFjLT5kZXYsIGNoYW5nZSk7Ci0KLQltYWMtPnJ1bm5pbmcgPSAxOwotfQotCi12b2lkIGllZWU4MDIxMXNvZnRtYWNfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X2NoZWNrX3JhdGVzKG1hYyk7Ci0JaWVlZTgwMjExc29mdG1hY19pbml0X2JzcyhtYWMpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY19zdGFydCk7Ci0KLXZvaWQgaWVlZTgwMjExc29mdG1hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCi0JaWVlZTgwMjExc29mdG1hY19jbGVhcl9wZW5kaW5nX3dvcmsobWFjKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc3RvcCk7Ci0KLXZvaWQgaWVlZTgwMjExc29mdG1hY19zZXRfcmF0ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggY291bnQsIHU4ICpyYXRlcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQltZW1jcHkobWFjLT5yYXRlc2luZm8ucmF0ZXMsIHJhdGVzLCBjb3VudCk7Ci0JbWFjLT5yYXRlc2luZm8uY291bnQgPSBjb3VudDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc2V0X3JhdGVzKTsKLQotc3RhdGljIHU4IHJhaXNlX3JhdGUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4IHJhdGUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyaSA9ICZtYWMtPnJhdGVzaW5mbzsKLQotCWZvciAoaT0wOyBpPHJpLT5jb3VudC0xOyBpKyspIHsKLQkJaWYgKHJpLT5yYXRlc1tpXSA9PSByYXRlKQotCQkJcmV0dXJuIHJpLT5yYXRlc1tpKzFdOwotCX0KLQkvKiBJIGd1ZXNzIHdlIGNhbid0IGdvIGFueSBoaWdoZXIuLi4gKi8KLQlyZXR1cm4gcmktPnJhdGVzW3JpLT5jb3VudF07Ci19Ci0KLXU4IGllZWU4MDIxMXNvZnRtYWNfbG93ZXJfcmF0ZV9kZWx0YShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSwgaW50IGRlbHRhKQotewotCWludCBpOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyAqcmkgPSAmbWFjLT5yYXRlc2luZm87Ci0KLQlmb3IgKGk9ZGVsdGE7IGk8cmktPmNvdW50OyBpKyspIHsKLQkJaWYgKHJpLT5yYXRlc1tpXSA9PSByYXRlKQotCQkJcmV0dXJuIHJpLT5yYXRlc1tpLWRlbHRhXTsKLQl9Ci0JLyogSSBndWVzcyB3ZSBjYW4ndCBnbyBhbnkgbG93ZXIuLi4gKi8KLQlyZXR1cm4gcmktPnJhdGVzWzBdOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFzb2Z0bWFjX2FkZF90eHJhdGVzX2JhZG5lc3Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0JCQkJCQkgaW50IGFtb3VudCkKLXsKLQl1OCBkZWZhdWx0X3JhdGUgPSBtYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlOwotCXU4IGRlZmF1bHRfZmFsbGJhY2sgPSBtYWMtPnR4cmF0ZXMuZGVmYXVsdF9mYWxsYmFjazsKLQl1MzIgY2hhbmdlcyA9IDA7Ci0KLQkvL1RPRE86IFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBjb2RlLgotCS8vICAgICAgTWF5YmUgdGhlIGR5bmFtaWMgcmF0ZSBzZWxlY3Rpb24gZG9lcyBub3Qgd29yawotCS8vICAgICAgYW5kIGl0IGhhcyB0byBiZSByZW1vdmVkIGFnYWluLgotCi1wcmludGsoImJhZG5lc3MgJWRcbiIsIG1hYy0+dHhyYXRlX2JhZG5lc3MpOwotCW1hYy0+dHhyYXRlX2JhZG5lc3MgKz0gYW1vdW50OwotCWlmIChtYWMtPnR4cmF0ZV9iYWRuZXNzIDw9IC0xMDAwKSB7Ci0JCS8qIFZlcnkgc21hbGwgYmFkbmVzcy4gVHJ5IGEgZmFzdGVyIGJpdHJhdGUuICovCi0JCWRlZmF1bHRfcmF0ZSA9IHJhaXNlX3JhdGUobWFjLCBkZWZhdWx0X3JhdGUpOwotCQljaGFuZ2VzIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7Ci0JCWRlZmF1bHRfZmFsbGJhY2sgPSBnZXRfZmFsbGJhY2tfcmF0ZShtYWMsIGRlZmF1bHRfcmF0ZSk7Ci0JCWNoYW5nZXMgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSzsKLQkJbWFjLT50eHJhdGVfYmFkbmVzcyA9IDA7Ci1wcmludGsoIkJpdHJhdGUgcmFpc2VkIHRvICV1XG4iLCBkZWZhdWx0X3JhdGUpOwotCX0gZWxzZSBpZiAobWFjLT50eHJhdGVfYmFkbmVzcyA+PSAxMDAwMCkgewotCQkvKiBWZXJ5IGhpZ2ggYmFkbmVzcy4gVHJ5IGEgc2xvd2VyIGJpdHJhdGUuICovCi0JCWRlZmF1bHRfcmF0ZSA9IGxvd2VyX3JhdGUobWFjLCBkZWZhdWx0X3JhdGUpOwotCQljaGFuZ2VzIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7Ci0JCWRlZmF1bHRfZmFsbGJhY2sgPSBnZXRfZmFsbGJhY2tfcmF0ZShtYWMsIGRlZmF1bHRfcmF0ZSk7Ci0JCWNoYW5nZXMgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSzsKLQkJbWFjLT50eHJhdGVfYmFkbmVzcyA9IDA7Ci1wcmludGsoIkJpdHJhdGUgbG93ZXJlZCB0byAldVxuIiwgZGVmYXVsdF9yYXRlKTsKLQl9Ci0KLQltYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlID0gZGVmYXVsdF9yYXRlOwotCW1hYy0+dHhyYXRlcy5kZWZhdWx0X2ZhbGxiYWNrID0gZGVmYXVsdF9mYWxsYmFjazsKLQotCWlmIChjaGFuZ2VzICYmIG1hYy0+dHhyYXRlc19jaGFuZ2UpCi0JCW1hYy0+dHhyYXRlc19jaGFuZ2UobWFjLT5kZXYsIGNoYW5nZXMpOwotfQotCi12b2lkIGllZWU4MDIxMXNvZnRtYWNfZnJhZ21lbnRfbG9zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICB1MTYgd2xfc2VxKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCWllZWU4MDIxMXNvZnRtYWNfYWRkX3R4cmF0ZXNfYmFkbmVzcyhtYWMsIDEwMDApOwotCS8vVE9ETwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX2ZyYWdtZW50X2xvc3QpOwotCi1zdGF0aWMgaW50IHJhdGVfY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykgewotCXU4ICphLCAqYjsKLQlhID0gKHU4KilhXzsKLQliID0gKHU4KiliXzsKLQlyZXR1cm4gKCgqYSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSAtICgqYiAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSk7Ci19Ci0KLS8qIEFsbG9jYXRlIGEgc29mdG1hYyBuZXR3b3JrIHN0cnVjdCBhbmQgZmlsbCBpdCBmcm9tIGEgbmV0d29yayAqLwotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqCi1pZWVlODAyMTFzb2Z0bWFjX2NyZWF0ZV9uZXR3b3JrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0KQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKnNvZnRuZXQ7Ci0Jc29mdG5ldCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmspLCBHRlBfQVRPTUlDKTsKLQlpZihzb2Z0bmV0ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCW1lbWNweShzb2Z0bmV0LT5ic3NpZCwgbmV0LT5ic3NpZCwgRVRIX0FMRU4pOwotCXNvZnRuZXQtPmNoYW5uZWwgPSBuZXQtPmNoYW5uZWw7Ci0Jc29mdG5ldC0+ZXNzaWQubGVuID0gbmV0LT5zc2lkX2xlbjsKLQltZW1jcHkoc29mdG5ldC0+ZXNzaWQuZGF0YSwgbmV0LT5zc2lkLCBzb2Z0bmV0LT5lc3NpZC5sZW4pOwotCi0JLyogY29weSByYXRlcyBvdmVyICovCi0Jc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLmNvdW50ID0gbmV0LT5yYXRlc19sZW47Ci0JbWVtY3B5KCZzb2Z0bmV0LT5zdXBwb3J0ZWRfcmF0ZXMucmF0ZXNbMF0sIG5ldC0+cmF0ZXMsIG5ldC0+cmF0ZXNfbGVuKTsKLQltZW1jcHkoJnNvZnRuZXQtPnN1cHBvcnRlZF9yYXRlcy5yYXRlc1tzb2Z0bmV0LT5zdXBwb3J0ZWRfcmF0ZXMuY291bnRdLCBuZXQtPnJhdGVzX2V4LCBuZXQtPnJhdGVzX2V4X2xlbik7Ci0Jc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLmNvdW50ICs9IG5ldC0+cmF0ZXNfZXhfbGVuOwotCXNvcnQoc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLnJhdGVzLCBzb2Z0bmV0LT5zdXBwb3J0ZWRfcmF0ZXMuY291bnQsIHNpemVvZihzb2Z0bmV0LT5zdXBwb3J0ZWRfcmF0ZXMucmF0ZXNbMF0pLCByYXRlX2NtcCwgTlVMTCk7Ci0KLQkvKiB3ZSBzYXZlIHRoZSBFUlAgdmFsdWUgYmVjYXVzZSBpdCBpcyBuZWVkZWQgYXQgYXNzb2NpYXRpb24gdGltZSwgYW5kCi0JICogbWFueSBBUCdzIGRvIG5vdCBpbmNsdWRlIGFuIEVSUCBJRSBpbiB0aGUgYXNzb2NpYXRpb24gcmVzcG9uc2UuICovCi0Jc29mdG5ldC0+ZXJwX3ZhbHVlID0gbmV0LT5lcnBfdmFsdWU7Ci0KLQlzb2Z0bmV0LT5jYXBhYmlsaXRpZXMgPSBuZXQtPmNhcGFiaWxpdHk7Ci0JcmV0dXJuIHNvZnRuZXQ7Ci19Ci0KLQotLyogQWRkIGEgbmV0d29yayB0byB0aGUgbGlzdCwgd2hpbGUgbG9ja2VkICovCi12b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2FkZF9uZXR3b3JrX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICphZGRfbmV0KQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKnNvZnRtYWNfbmV0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzb2Z0bWFjX25ldCwgJm1hYy0+bmV0d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmKCFtZW1jbXAoc29mdG1hY19uZXQtPmJzc2lkLCBhZGRfbmV0LT5ic3NpZCwgRVRIX0FMRU4pKQotCQkJcmV0dXJuOwotCX0KLQlsaXN0X2FkZCgmKGFkZF9uZXQtPmxpc3QpLCAmbWFjLT5uZXR3b3JrX2xpc3QpOwotfQotCi0vKiBBZGQgYSBuZXR3b3JrIHRvIHRoZSBsaXN0LCB3aXRoIGxvY2tpbmcgKi8KLXZvaWQKLWllZWU4MDIxMXNvZnRtYWNfYWRkX25ldHdvcmsoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqYWRkX25ldCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQlpZWVlODAyMTFzb2Z0bWFjX2FkZF9uZXR3b3JrX2xvY2tlZChtYWMsIGFkZF9uZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotfQotCi0KLS8qIERlbGV0ZSBhIG5ldHdvcmsgZnJvbSB0aGUgbGlzdCwgd2hpbGUgbG9ja2VkKi8KLXZvaWQKLWllZWU4MDIxMXNvZnRtYWNfZGVsX25ldHdvcmtfbG9ja2VkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKmRlbF9uZXQpCi17Ci0JbGlzdF9kZWwoJihkZWxfbmV0LT5saXN0KSk7Ci19Ci0KLS8qIERlbGV0ZSBhIG5ldHdvcmsgZnJvbSB0aGUgbGlzdCB3aXRoIGxvY2tpbmcgKi8KLXZvaWQKLWllZWU4MDIxMXNvZnRtYWNfZGVsX25ldHdvcmsoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqZGVsX25ldCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQlpZWVlODAyMTFzb2Z0bWFjX2RlbF9uZXR3b3JrX2xvY2tlZChtYWMsIGRlbF9uZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotfQotCi0vKiBHZXQgYSBuZXR3b3JrIGZyb20gdGhlIGxpc3QgYnkgTUFDIHdoaWxlIGxvY2tlZCAqLwotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqCi1pZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQl1OCAqYnNzaWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqc29mdG1hY19uZXQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNvZnRtYWNfbmV0LCAmbWFjLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLQkJaWYoIW1lbWNtcChzb2Z0bWFjX25ldC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikpCi0JCQlyZXR1cm4gc29mdG1hY19uZXQ7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0vKiBHZXQgYSBuZXR3b3JrIGZyb20gdGhlIGxpc3QgYnkgQlNTSUQgd2l0aCBsb2NraW5nICovCi1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICoKLWllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0JdTggKmJzc2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqc29mdG1hY19uZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0Jc29mdG1hY19uZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZChtYWMsIGJzc2lkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc29mdG1hY19uZXQ7Ci19Ci0KLS8qIEdldCBhIG5ldHdvcmsgZnJvbSB0aGUgbGlzdCBieSBFU1NJRCB3aGlsZSBsb2NrZWQgKi8KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKgotaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9lc3NpZF9sb2NrZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgKmVzc2lkKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKnNvZnRtYWNfbmV0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzb2Z0bWFjX25ldCwgJm1hYy0+bmV0d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmIChzb2Z0bWFjX25ldC0+ZXNzaWQubGVuID09IGVzc2lkLT5sZW4gJiYKLQkJCSFtZW1jbXAoc29mdG1hY19uZXQtPmVzc2lkLmRhdGEsIGVzc2lkLT5kYXRhLCBlc3NpZC0+bGVuKSkKLQkJCXJldHVybiBzb2Z0bWFjX25ldDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIEdldCBhIG5ldHdvcmsgZnJvbSB0aGUgbGlzdCBieSBFU1NJRCB3aXRoIGxvY2tpbmcgKi8KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKgotaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9lc3NpZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqZXNzaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpzb2Z0bWFjX25ldCA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0Jc29mdG1hY19uZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Vzc2lkX2xvY2tlZChtYWMsIGVzc2lkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc29mdG1hY19uZXQ7Ci19Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkpvaGFubmVzIEJlcmciKTsKLU1PRFVMRV9BVVRIT1IoIkpvc2VwaCBKZXphayIpOwotTU9EVUxFX0FVVEhPUigiTGFycnkgRmluZ2VyIik7Ci1NT0RVTEVfQVVUSE9SKCJEYW5ueSB2YW4gRHlrIik7Ci1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEJ1ZXNjaCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCI4MDIuMTEgc29mdHdhcmUgTUFDIik7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmggYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0M2IxODkuLjAwMDAwMDAKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfcHJpdi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBJbnRlcm5hbCBzb2Z0bWFjIEFQSSBkZWZpbml0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBKb3NlcGggSmV6YWsgPGpvc2VqeEBnZW50b28ub3JnPgotICogICAgICAgICAgICAgICAgICAgICAgICAgIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKi8KLQotI2lmbmRlZiBJRUVFODAyMTFTT0ZUTUFDX1BSSVZfSF8KLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19QUklWX0hfCi0KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExc29mdG1hYy5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFzb2Z0bWFjX3d4Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+Ci0KLQotI2RlZmluZSBQRlgJCQkJIlNvZnRNQUM6ICIKLQotI2lmZGVmIGFzc2VydAotIyB1bmRlZiBhc3NlcnQKLSNlbmRpZgotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRwotI2RlZmluZSBhc3NlcnQoZXhwcikgXAotCWRvIHsJCQkJCQkJCQkJXAotCQlpZiAodW5saWtlbHkoIShleHByKSkpIHsJCQkJCQlcCi0JCXByaW50a2woS0VSTl9FUlIgUEZYICJBU1NFUlRJT04gRkFJTEVEICglcykgYXQ6ICVzOiVkOiVzKClcbiIsICNleHByLAlcCi0JCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQkJCVwKLQkJfQkJCQkJCQkJCVwKLQl9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgYXNzZXJ0KGV4cHIpIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qIHJhdGUgbGltaXRlZCBwcmludGsoKS4gKi8KLSNpZmRlZiBwcmludGtsCi0jIHVuZGVmIHByaW50a2wKLSNlbmRpZgotI2RlZmluZSBwcmludGtsKGYsIHguLi4pICBkbyB7IGlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHByaW50ayhmICwjI3gpOyB9IHdoaWxlICgwKQotLyogcmF0ZSBsaW1pdGVkIHByaW50aygpIGZvciBkZWJ1Z2dpbmcgKi8KLSNpZmRlZiBkcHJpbnRrbAotIyB1bmRlZiBkcHJpbnRrbAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHCi0jIGRlZmluZSBkcHJpbnRrbAkJcHJpbnRrbAotI2Vsc2UKLSMgZGVmaW5lIGRwcmludGtsKGYsIHguLi4pCWRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qIGRlYnVnZ2luZyBwcmludGsoKSAqLwotI2lmZGVmIGRwcmludGsKLSMgdW5kZWYgZHByaW50awotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHCi0jIGRlZmluZSBkcHJpbnRrKGYsIHguLi4pICBkbyB7IHByaW50ayhmICwjI3gpOyB9IHdoaWxlICgwKQotI2Vsc2UKLSMgZGVmaW5lIGRwcmludGsoZiwgeC4uLikgIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qIHByaXZhdGUgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgKi8KLQotLyoqKiBwcm90b3R5cGVzIGZyb20gX3NjYW4uYyAqLwotdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLS8qIGZvciBpbnRlcm5hbCB1c2UgaWYgc2Nhbm5pbmcgaXMgbmVlZGVkICovCi1pbnQgaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKTsKLXZvaWQgaWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW4oc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpOwotdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3dhaXRfZm9yX3NjYW4oc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpOwotCi0vKiBmb3IgdXNlIGJ5IF9tb2R1bGUuYyB0byBhc3NpZ24gdG8gdGhlIGNhbGxiYWNrcyAqLwotaW50IGllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2Nhbl9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXZvaWQgaWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW5faW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIGllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2Nhbl9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyoqKiBOZXR3b3JrIHByb3RvdHlwZXMgZnJvbSBfbW9kdWxlLmMgKi8KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKiBpZWVlODAyMTFzb2Z0bWFjX2NyZWF0ZV9uZXR3b3JrKAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldCk7Ci12b2lkIGllZWU4MDIxMXNvZnRtYWNfYWRkX25ldHdvcmtfbG9ja2VkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCk7Ci12b2lkIGllZWU4MDIxMXNvZnRtYWNfYWRkX25ldHdvcmsoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KTsKLXZvaWQgaWVlZTgwMjExc29mdG1hY19kZWxfbmV0d29ya19sb2NrZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KTsKLXZvaWQgaWVlZTgwMjExc29mdG1hY19kZWxfbmV0d29yayhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpOwotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqIGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWRfbG9ja2VkKAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1OCAqZWEpOwotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqIGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQoCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4ICplYSk7Ci1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICogaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9zc2lkX2xvY2tlZCgKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKiBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X3NzaWQoCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7Ci1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICoKLWllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfZXNzaWRfbG9ja2VkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Vzc2lkICplc3NpZCk7Ci1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICoKLWllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfZXNzaWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgKmVzc2lkKTsKLQotLyogUmF0ZXMgcmVsYXRlZCAqLwotdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3Byb2Nlc3NfZXJwKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXU4IGVycF92YWx1ZSk7Ci1pbnQgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm9fcmF0ZV9zdXBwb3J0ZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyaSwgdTggcmF0ZSk7Ci11OCBpZWVlODAyMTFzb2Z0bWFjX2xvd2VyX3JhdGVfZGVsdGEoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4IHJhdGUsIGludCBkZWx0YSk7Ci12b2lkIGllZWU4MDIxMXNvZnRtYWNfaW5pdF9ic3Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpOwotdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3JlY2FsY190eHJhdGVzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKTsKLXN0YXRpYyBpbmxpbmUgdTggbG93ZXJfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSkgewotCXJldHVybiBpZWVlODAyMTFzb2Z0bWFjX2xvd2VyX3JhdGVfZGVsdGEobWFjLCByYXRlLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB1OCBnZXRfZmFsbGJhY2tfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSkKLXsKLQlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19sb3dlcl9yYXRlX2RlbHRhKG1hYywgcmF0ZSwgMik7Ci19Ci0KLQotLyoqKiBwcm90b3R5cGVzIGZyb20gX2lvLmMgKi8KLWludCBpZWVlODAyMTFzb2Z0bWFjX3NlbmRfbWd0X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAotCXZvaWQqIHB0cmFyZywgdTMyIHR5cGUsIHUzMiBhcmcpOwotaW50IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2JlYWNvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCXN0cnVjdCBpZWVlODAyMTFfYmVhY29uICpiZWFjb24sCi0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKTsKLQotLyoqKiBwcm90b3R5cGVzIGZyb20gX2F1dGguYyAqLwotLyogZG8gdGhlc2UgaGF2ZSB0byBnbyBpbnRvIHRoZSBwdWJsaWMgaGVhZGVyPyAqLwotaW50IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXEoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCk7Ci1pbnQgaWVlZTgwMjExc29mdG1hY19kZWF1dGhfcmVxKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsIGludCByZWFzb24pOwotCi0vKiBmb3IgdXNlIGJ5IF9tb2R1bGUuYyB0byBhc3NpZ24gdG8gdGhlIGNhbGxiYWNrcyAqLwotaW50IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXNwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqYXV0aCk7Ci1pbnQgaWVlZTgwMjExc29mdG1hY19kZWF1dGhfcmVzcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqZGVhdXRoKTsKLQotLyoqKiBwcm90b3R5cGVzIGZyb20gX2Fzc29jLmMgKi8KLXZvaWQgaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1pbnQgaWVlZTgwMjExc29mdG1hY19oYW5kbGVfYXNzb2NfcmVzcG9uc2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAotCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBuZXR3b3JrKTsKLWludCBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKiBkaXNhc3NvYyk7Ci1pbnQgaWVlZTgwMjExc29mdG1hY19oYW5kbGVfcmVhc3NvY19yZXEoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0ICogcmVhc3NvYyk7Ci12b2lkIGllZWU4MDIxMXNvZnRtYWNfYXNzb2NfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NlbmRfZGlzYXNzb2NfcmVxKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1MTYgcmVhc29uKTsKLXZvaWQgaWVlZTgwMjExc29mdG1hY19kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyk7Ci0KLS8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExc29mdG1hY19zY2FuX2hhbmRsZXJzX2NoZWNrX3NlbGYoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSkKLXsKLQlyZXR1cm4gKHNtLT5zdGFydF9zY2FuID09IGllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2Nhbl9pbXBsZW1lbnRhdGlvbikgJiYKLQkJKHNtLT5zdG9wX3NjYW4gPT0gaWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW5faW1wbGVtZW50YXRpb24pICYmCi0JCShzbS0+d2FpdF9mb3Jfc2NhbiA9PSBpZWVlODAyMTFzb2Z0bWFjX3dhaXRfZm9yX3NjYW5faW1wbGVtZW50YXRpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5fc2FuaXR5X2NoZWNrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20pCi17Ci0JcmV0dXJuICgoc20tPnN0YXJ0X3NjYW4gIT0gaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuX2ltcGxlbWVudGF0aW9uKSAmJgotCQkoc20tPnN0b3Bfc2NhbiAhPSBpZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2Nhbl9pbXBsZW1lbnRhdGlvbikgJiYKLQkJKHNtLT53YWl0X2Zvcl9zY2FuICE9IGllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2Nhbl9pbXBsZW1lbnRhdGlvbikKLQkJKSB8fCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5faGFuZGxlcnNfY2hlY2tfc2VsZihzbSk7Ci19Ci0KLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19QUk9CRV9ERUxBWQkJSFovNTAKLSNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19XT1JLUVVFVUVfTkFNRV9MRU4JKDE3ICsgSUZOQU1TSVopCi0KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgewotCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CS8qIExpc3QgKi8KLQkvKiBOZXR3b3JrIGluZm9ybWF0aW9uIGNvcGllZCBmcm9tIGllZWU4MDIxMV9uZXR3b3JrICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IGNoYW5uZWw7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgZXNzaWQ7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gc3VwcG9ydGVkX3JhdGVzOwotCi0JLyogU29mdE1BQyBzcGVjaWZpYyAqLwotCXUxNiBhdXRoZW50aWNhdGluZzoxLAkJCS8qIFN0YXR1cyBGbGFncyAqLwotCSAgICBhdXRoZW50aWNhdGVkOjEsCi0JICAgIGF1dGhfZGVzeW5jZWRfb25jZToxOwotCi0JdTggZXJwX3ZhbHVlOwkJCQkvKiBTYXZlZCBFUlAgdmFsdWUgKi8KLQl1MTYgY2FwYWJpbGl0aWVzOwkJCS8qIENhcGFiaWxpdGllcyBiaXRmaWVsZCAqLwotCXU4IGNoYWxsZW5nZV9sZW47CQkJLyogQXV0aCBDaGFsbGVuZ2UgbGVuZ3RoICovCi0JY2hhciAqY2hhbGxlbmdlOwkJCS8qIENoYWxsZW5nZSBUZXh0ICovCi19OwotCi0vKiBzdHJ1Y3R1cmUgdXNlZCB0byBrZWVwIHRyYWNrIG9mIG5ldHdvcmtzIHdlJ3JlIGF1dGgnaW5nIHRvICovCi1zdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0gewotCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CS8qIExpc3QgaGVhZCAqLwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsJKm5ldDsJLyogTmV0d29yayB0byBhdXRoICovCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlCSptYWM7CS8qIFNvZnRNQUMgZGV2aWNlICovCi0JdTggcmV0cnk7CQkJCS8qIFJldHJ5IGxpbWl0ICovCi0JdTggc3RhdGU7CQkJCS8qIEF1dGggU3RhdGUgKi8KLQlzdHJ1Y3QgZGVsYXllZF93b3JrCQl3b3JrOwkvKiBXb3JrIHF1ZXVlICovCi19OwotCi0vKiBzY2FubmluZyBpbmZvcm1hdGlvbiAqLwotc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfc2NhbmluZm8gewotCXU4IGN1cnJlbnRfY2hhbm5lbF9pZHgsCi0JICAgbnVtYmVyX2NoYW5uZWxzOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHM7Ci0JdTggc3RhcnRlZDoxLAotCSAgIHN0b3A6MTsKLQl1OCBza2lwX2ZsYWdzOwotCXN0cnVjdCBjb21wbGV0aW9uIGZpbmlzaGVkOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgc29mdG1hY19zY2FuOwotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjOwotfTsKLQotLyogcHJpdmF0ZSBldmVudCBzdHJ1Y3QgKi8KLXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JaW50IGV2ZW50X3R5cGU7Ci0Jdm9pZCAqZXZlbnRfY29udGV4dDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7Ci0Jbm90aWZ5X2Z1bmN0aW9uX3B0ciBmdW47Ci0Jdm9pZCAqY29udGV4dDsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYzsKLX07Ci0KLXZvaWQgaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgaW50IGV2ZW50LCB2b2lkICpldmVudF9jb250ZXh0KTsKLXZvaWQgaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIGludCBldmVudCwgdm9pZCAqZXZlbnRfY29udGV4dCk7Ci1pbnQgaWVlZTgwMjExc29mdG1hY19ub3RpZnlfaW50ZXJuYWwoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCi0JaW50IGV2ZW50LCB2b2lkICpldmVudF9jb250ZXh0LCBub3RpZnlfZnVuY3Rpb25fcHRyIGZ1biwgdm9pZCAqY29udGV4dCwgZ2ZwX3QgZ2ZwX21hc2spOwotCi12b2lkIGllZWU4MDIxMXNvZnRtYWNfdHJ5X3JlYXNzb2Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpOwotCi0jZW5kaWYgLyogSUVFRTgwMjExU09GVE1BQ19QUklWX0hfICovCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19zY2FuLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19zY2FuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYWI4ZDcuLjAwMDAwMDAKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qCi0gKiBTY2FubmluZyByb3V0aW5lcy4KLSAqCi0gKiBUaGVzZSBhcmUgbm90IGV4cG9ydGVkIGJlY2F1c2UgdGhleSdyZSBhc3NpZ25lZCB0byB0aGUgZnVuY3Rpb24gcG9pbnRlcnMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExc29mdG1hY19wcml2LmgiCi0KLS8qIGludGVybmFsLCB1c2UgdG8gdHJpZ2dlciBzY2FubmluZyBpZiBuZWVkZWQuCi0gKiBSZXR1cm5zIC1FQlVTWSBpZiBhbHJlYWR5IHNjYW5uaW5nLAotICogcmVzdWx0IG9mIHN0YXJ0X3NjYW4gb3RoZXJ3aXNlICovCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwotCWlmIChzbS0+c2Nhbm5pbmcpCi0JewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVJTlBST0dSRVNTOwotCX0KLQlzbS0+c2Nhbm5pbmcgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXQgPSBzbS0+c3RhcnRfc2NhbihzbS0+ZGV2KTsKLQlpZiAocmV0KSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwotCQlzbS0+c2Nhbm5pbmcgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkCi1pZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2NhbihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKLQotCWlmICghc20tPnNjYW5uaW5nKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCXNtLT5zdG9wX3NjYW4oc20tPmRldik7Ci19Ci0KLXZvaWQKLWllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2NhbihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKLQotCWlmICghc20tPnNjYW5uaW5nKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCXNtLT53YWl0X2Zvcl9zY2FuKHNtLT5kZXYpOwotfQotCi0KLS8qIGludGVybmFsIHNjYW5uaW5nIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgKi8KLXZvaWQgaWVlZTgwMjExc29mdG1hY19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlpbnQgaW52YWxpZF9jaGFubmVsOwotCXU4IGN1cnJlbnRfY2hhbm5lbF9pZHg7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfc2NhbmluZm8gKnNpID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5pbmZvLAotCQkJICAgICBzb2Z0bWFjX3NjYW4ud29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IHNpLT5tYWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdoaWxlICghKHNpLT5zdG9wKSAmJiAoc2ktPmN1cnJlbnRfY2hhbm5lbF9pZHggPCBzaS0+bnVtYmVyX2NoYW5uZWxzKSkgewotCQljdXJyZW50X2NoYW5uZWxfaWR4ID0gc2ktPmN1cnJlbnRfY2hhbm5lbF9pZHg7Ci0JCXNpLT5jdXJyZW50X2NoYW5uZWxfaWR4Kys7IC8qIGdvIHRvIHRoZSBuZXh0IGNoYW5uZWwgKi8KLQotCQlpbnZhbGlkX2NoYW5uZWwgPSAoc2ktPnNraXBfZmxhZ3MgJiBzaS0+Y2hhbm5lbHNbY3VycmVudF9jaGFubmVsX2lkeF0uZmxhZ3MpOwotCi0JCWlmICghaW52YWxpZF9jaGFubmVsKSB7Ci0JCQlzbS0+c2V0X2NoYW5uZWwoc20tPmRldiwgc2ktPmNoYW5uZWxzW2N1cnJlbnRfY2hhbm5lbF9pZHhdLmNoYW5uZWwpOwotCQkJLy8gRklYTUUgbWFrZSB0aGlzIHVzZXIgY29uZmlndXJhYmxlIChhY3RpdmUvcGFzc2l2ZSkKLQkJCWlmKGllZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUoc20sIE5VTEwsIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEsIDApKQotCQkJCXByaW50a2woS0VSTl9ERUJVRyBQRlggIlNlbmRpbmcgUHJvYmUgUmVxdWVzdCBGYWlsZWRcbiIpOwotCi0JCQkvKiBhbHNvIHNlbmQgZGlyZWN0ZWQgbWFuYWdlbWVudCBmcmFtZSBmb3IgdGhlIG5ldHdvcmsgd2UncmUgbG9va2luZyBmb3IgKi8KLQkJCS8vIFRPRE86IGlzIHRoaXMgaWYgY29ycmVjdCwgb3Igc2hvdWxkIHdlIGRvIHRoaXMgb25seSBpZiBzY2FubmluZyBmcm9tIGFzc29jIHJlcXVlc3Q/Ci0JCQlpZiAoc20tPmFzc29jaW5mby5yZXFfZXNzaWQubGVuKQotCQkJCWllZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUoc20sICZzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZCwgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSwgMCk7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKHVubGlrZWx5KCFzbS0+cnVubmluZykpIHsKLQkJCQkvKiBQcmV2ZW50IHJlc2NoZWR1bGUgb24gd29ya3F1ZXVlIGZsdXNoICovCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhzbS0+d3EsICZzaS0+c29mdG1hY19zY2FuLCBJRUVFODAyMTFTT0ZUTUFDX1BST0JFX0RFTEFZKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKFBGWCAiTm90IHByb2JpbmcgQ2hhbm5lbCAlZCAobm90IGFsbG93ZWQgaGVyZSlcbiIsIHNpLT5jaGFubmVsc1tjdXJyZW50X2NoYW5uZWxfaWR4XS5jaGFubmVsKTsKLQkJfQotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnNpLT5zb2Z0bWFjX3NjYW4pOwotCXNpLT5zdGFydGVkID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCi0JZHByaW50ayhQRlggIlNjYW5uaW5nIGZpbmlzaGVkOiBzY2FubmVkICVkIGNoYW5uZWxzIHN0YXJ0aW5nIHdpdGggY2hhbm5lbCAlZFxuIiwKLQkJICAgICBzbS0+c2NhbmluZm8tPm51bWJlcl9jaGFubmVscywgc20tPnNjYW5pbmZvLT5jaGFubmVsc1swXS5jaGFubmVsKTsKLQlpZWVlODAyMTFzb2Z0bWFjX3NjYW5fZmluaXNoZWQoc20pOwotCWNvbXBsZXRlX2FsbCgmc20tPnNjYW5pbmZvLT5maW5pc2hlZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfc2NhbmluZm8gKmFsbG9jYXRlX3NjYW5pbmZvKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKQotewotCS8qIHVnaC4gY2FuIHdlIGNhbGwgdGhpcyB3aXRob3V0IGhhdmluZyB0aGUgc3BpbmxvY2sgaGVsZD8gKi8KLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19zY2FuaW5mbyAqaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5pbmZvKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KCFpbmZvKSkKLQkJcmV0dXJuIE5VTEw7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmluZm8tPnNvZnRtYWNfc2NhbiwgaWVlZTgwMjExc29mdG1hY19zY2FuKTsKLQlpbmZvLT5tYWMgPSBtYWM7Ci0JaW5pdF9jb21wbGV0aW9uKCZpbmZvLT5maW5pc2hlZCk7Ci0JcmV0dXJuIGluZm87Ci19Ci0KLWludCBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X3NjYW5faW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JYXNzZXJ0KGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9oYW5kbGVyc19jaGVja19zZWxmKHNtKSk7Ci0JaWYgKCFpZWVlODAyMTFzb2Z0bWFjX3NjYW5faGFuZGxlcnNfY2hlY2tfc2VsZihzbSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0JLyogaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIGhvbGQgdGhlIGxvY2sgaGVyZQotCSAqIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBhbGxvY2F0ZSB0d28gb2YgdGhlc2UuLi4gKi8KLQlpZiAodW5saWtlbHkoIXNtLT5zY2FuaW5mbykpCi0JCXNtLT5zY2FuaW5mbyA9IGFsbG9jYXRlX3NjYW5pbmZvKHNtKTsKLQlpZiAodW5saWtlbHkoIXNtLT5zY2FuaW5mbykpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc20tPnNjYW5pbmZvLT5za2lwX2ZsYWdzID0gSUVFRTgwMjExX0NIX0lOVkFMSUQ7Ci0JaWYgKDAgLyogbm90IHNjYW5uaW5nIGluIElFRUU4MDIuMTFiICovKS8vVE9ETwotCQlzbS0+c2NhbmluZm8tPnNraXBfZmxhZ3MgfD0gSUVFRTgwMjExX0NIX0JfT05MWTsKLQlpZiAoMCAvKiBJRUVFODAyLjExYSAqLykgey8vVE9ETwotCQlzbS0+c2NhbmluZm8tPmNoYW5uZWxzID0gc20tPmllZWUtPmdlby5hOwotCQlzbS0+c2NhbmluZm8tPm51bWJlcl9jaGFubmVscyA9IHNtLT5pZWVlLT5nZW8uYV9jaGFubmVsczsKLQl9IGVsc2UgewotCQlzbS0+c2NhbmluZm8tPmNoYW5uZWxzID0gc20tPmllZWUtPmdlby5iZzsKLQkJc20tPnNjYW5pbmZvLT5udW1iZXJfY2hhbm5lbHMgPSBzbS0+aWVlZS0+Z2VvLmJnX2NoYW5uZWxzOwotCX0KLQlzbS0+c2NhbmluZm8tPmN1cnJlbnRfY2hhbm5lbF9pZHggPSAwOwotCXNtLT5zY2FuaW5mby0+c3RhcnRlZCA9IDE7Ci0Jc20tPnNjYW5pbmZvLT5zdG9wID0gMDsKLQlJTklUX0NPTVBMRVRJT04oc20tPnNjYW5pbmZvLT5maW5pc2hlZCk7Ci0JcXVldWVfZGVsYXllZF93b3JrKHNtLT53cSwgJnNtLT5zY2FuaW5mby0+c29mdG1hY19zY2FuLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi12b2lkIGllZWU4MDIxMXNvZnRtYWNfc3RvcF9zY2FuX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWFzc2VydChpZWVlODAyMTFzb2Z0bWFjX3NjYW5faGFuZGxlcnNfY2hlY2tfc2VsZihzbSkpOwotCWlmICghaWVlZTgwMjExc29mdG1hY19zY2FuX2hhbmRsZXJzX2NoZWNrX3NlbGYoc20pKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKLQlhc3NlcnQoc20tPnNjYW5pbmZvICE9IE5VTEwpOwotCWlmIChzbS0+c2NhbmluZm8pIHsKLQkJaWYgKHNtLT5zY2FuaW5mby0+c3RhcnRlZCkKLQkJCXNtLT5zY2FuaW5mby0+c3RvcCA9IDE7Ci0JCWVsc2UKLQkJCWNvbXBsZXRlX2FsbCgmc20tPnNjYW5pbmZvLT5maW5pc2hlZCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExc29mdG1hY193YWl0X2Zvcl9zY2FuX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWFzc2VydChpZWVlODAyMTFzb2Z0bWFjX3NjYW5faGFuZGxlcnNfY2hlY2tfc2VsZihzbSkpOwotCWlmICghaWVlZTgwMjExc29mdG1hY19zY2FuX2hhbmRsZXJzX2NoZWNrX3NlbGYoc20pKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXNtLT5zY2FuaW5mby0+c3RhcnRlZCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmc20tPnNjYW5pbmZvLT5maW5pc2hlZCk7Ci19Ci0KLS8qIHRoaXMgaXMgd2hhdCBkcml2ZXJzICh0aGF0IGRvIHNjYW5uaW5nKSBjYWxsIHdoZW4gdGhleSdyZSBkb25lICovCi12b2lkIGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKLQlzbS0+c2Nhbm5pbmcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoc20tPmFzc29jaW5mby5ic3N2YWxpZCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQ7Ci0KLQkJbmV0ID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChzbSwgc20tPmFzc29jaW5mby5ic3NpZCk7Ci0JCWlmIChuZXQpCi0JCQlzbS0+c2V0X2NoYW5uZWwoc20tPmRldiwgbmV0LT5jaGFubmVsKTsKLQl9Ci0JaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50cyhzbSwgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVELCBOVUxMKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZCk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxYjU5YS4uMDAwMDAwMAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTA4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgb3VyIF93eCBoYW5kbGVycy4gTWFrZSBzdXJlIHlvdSBFWFBPUlRfU1lNQk9MX0dQTCB0aGVtCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICovCi0KLSNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKLQotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0vKiBmb3IgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIgYW5kIGlzX3plcm9fZXRoZXJfYWRkciAqLwotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLWludAotaWVlZTgwMjExc29mdG1hY193eF90cmlnZ2VyX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKLQlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuKHNtKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfdHJpZ2dlcl9zY2FuKTsKLQotCi0vKiBpZiB3ZSdyZSBzdGlsbCBzY2FubmluZywgcmV0dXJuIC1FQUdBSU4gc28gdGhhdCB1c2Vyc3BhY2UgdG9vbHMKLSAqIGNhbiBnZXQgdGhlIGNvbXBsZXRlIHNjYW4gcmVzdWx0cywgb3RoZXJ3aXNlIHJldHVybiAwLiAqLwotaW50Ci1pZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9zY2FuX3Jlc3VsdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHNtLT5zY2FubmluZykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9zY2FuKHNtLT5pZWVlLCBpbmZvLCBkYXRhLCBleHRyYSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9zY2FuX3Jlc3VsdHMpOwotCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphdXRocHRyOwotCWludCBsZW5ndGggPSAwOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi1jaGVja19hc3NvY19hZ2FpbjoKLQltdXRleF9sb2NrKCZzbS0+YXNzb2NpbmZvLm11dGV4KTsKLQlpZigoc20tPmFzc29jaW5mby5hc3NvY2lhdGluZyB8fCBzbS0+YXNzb2NpbmZvLmFzc29jaWF0ZWQpICYmCi0JICAgKGRhdGEtPmVzc2lkLmZsYWdzICYmIGRhdGEtPmVzc2lkLmxlbmd0aCkpIHsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJDYW5jZWxpbmcgZXhpc3RpbmcgYXNzb2NpYXRlIHJlcXVlc3QhXG4iKTsKLQkJLyogQ2FuY2VsIGFzc29jIHdvcmsgKi8KLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmc20tPmFzc29jaW5mby53b3JrKTsKLQkJLyogV2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzLCBidXQgaXQncyBhIGxpdHRsZSBjbGVhbmVyICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYXV0aHB0ciwgJnNtLT5hdXRoX3F1ZXVlLCBsaXN0KQotCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYXV0aHB0ci0+d29yayk7Ci0JCXNtLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOwotCQlzbS0+YXNzb2NpbmZvLmJzc2ZpeGVkID0gMDsKLQkJc20tPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7Ci0JCXNtLT5hc3NvY2luZm8uYXNzb2NpYXRlZCA9IDA7Ci0JCS8qIFdlIG11c3QgdW5sb2NrIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIHRoZSBhc3NvYyB3b3JrcXVldWUKLQkJICogb24gdGhlIGFzc29jaW5mby5tdXRleCAqLwotCQltdXRleF91bmxvY2soJnNtLT5hc3NvY2luZm8ubXV0ZXgpOwotCQlmbHVzaF93b3JrcXVldWUoc20tPndxKTsKLQkJLyogQXZvaWQgcmFjZSEgQ2hlY2sgYXNzb2Mgc3RhdHVzIGFnYWluLiBNYXliZSBzb21lb25lIHN0YXJ0ZWQgYW4KLQkJICogYXNzb2NpYXRpb24gd2hpbGUgd2UgZmx1c2hlZC4gKi8KLQkJZ290byBjaGVja19hc3NvY19hZ2FpbjsKLQl9Ci0KLQlzbS0+YXNzb2NpbmZvLnN0YXRpY19lc3NpZCA9IDA7Ci0Jc20tPmFzc29jaW5mby5hc3NvY193YWl0ID0gMDsKLQotCWlmIChkYXRhLT5lc3NpZC5mbGFncyAmJiBkYXRhLT5lc3NpZC5sZW5ndGgpIHsKLQkJbGVuZ3RoID0gbWluKChpbnQpZGF0YS0+ZXNzaWQubGVuZ3RoLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0JCWlmIChsZW5ndGgpIHsKLQkJCW1lbWNweShzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZC5kYXRhLCBleHRyYSwgbGVuZ3RoKTsKLQkJCXNtLT5hc3NvY2luZm8uc3RhdGljX2Vzc2lkID0gMTsKLQkJfQotCX0KLQotCS8qIHNldCBvdXIgcmVxdWVzdGVkIEVTU0lEIGxlbmd0aC4KLQkgKiBJZiBhcHBsaWNhYmxlLCB3ZSBoYXZlIGFscmVhZHkgY29waWVkIHRoZSBkYXRhIGluICovCi0Jc20tPmFzc29jaW5mby5yZXFfZXNzaWQubGVuID0gbGVuZ3RoOwotCi0Jc20tPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDE7Ci0JLyogcXVldWUgbG93ZXIgbGV2ZWwgY29kZSB0byBkbyB3b3JrIChpZiBuZWNlc3NhcnkpICovCi0JcXVldWVfZGVsYXllZF93b3JrKHNtLT53cSwgJnNtLT5hc3NvY2luZm8ud29yaywgMCk7Ci0KLQltdXRleF91bmxvY2soJnNtLT5hc3NvY2luZm8ubXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9lc3NpZCk7Ci0KLWludAotaWVlZTgwMjExc29mdG1hY193eF9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCSAgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKLQotCW11dGV4X2xvY2soJnNtLT5hc3NvY2luZm8ubXV0ZXgpOwotCS8qIElmIGFsbCBmYWlscywgcmV0dXJuIEFOWSAoZW1wdHkpICovCi0JZGF0YS0+ZXNzaWQubGVuZ3RoID0gMDsKLQlkYXRhLT5lc3NpZC5mbGFncyA9IDA7ICAvKiBhY3RpdmUgKi8KLQotCS8qIElmIHdlIGhhdmUgYSBzdGF0aWNhbGx5IGNvbmZpZ3VyZWQgRVNTSUQgdGhlbiByZXR1cm4gaXQgKi8KLQlpZiAoc20tPmFzc29jaW5mby5zdGF0aWNfZXNzaWQpIHsKLQkJZGF0YS0+ZXNzaWQubGVuZ3RoID0gc20tPmFzc29jaW5mby5yZXFfZXNzaWQubGVuOwotCQlkYXRhLT5lc3NpZC5mbGFncyA9IDE7ICAvKiBhY3RpdmUgKi8KLQkJbWVtY3B5KGV4dHJhLCBzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZC5kYXRhLCBzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZC5sZW4pOwotCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkdldHRpbmcgZXNzaWQgZnJvbSByZXFfZXNzaWRcbiIpOwotCX0gZWxzZSBpZiAoc20tPmFzc29jaW5mby5hc3NvY2lhdGVkIHx8IHNtLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcpIHsKLQkvKiBJZiB3ZSdyZSBhc3NvY2lhdGluZy9hc3NvY2lhdGVkLCByZXR1cm4gdGhhdCAqLwotCQlkYXRhLT5lc3NpZC5sZW5ndGggPSBzbS0+YXNzb2NpbmZvLmFzc29jaWF0ZV9lc3NpZC5sZW47Ci0JCWRhdGEtPmVzc2lkLmZsYWdzID0gMTsgIC8qIGFjdGl2ZSAqLwotCQltZW1jcHkoZXh0cmEsIHNtLT5hc3NvY2luZm8uYXNzb2NpYXRlX2Vzc2lkLmRhdGEsIHNtLT5hc3NvY2luZm8uYXNzb2NpYXRlX2Vzc2lkLmxlbik7Ci0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiR2V0dGluZyBlc3NpZCBmcm9tIGFzc29jaWF0ZV9lc3NpZFxuIik7Ci0JfQotCW11dGV4X3VubG9jaygmc20tPmFzc29jaW5mby5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X2Vzc2lkKTsKLQotaW50Ci1pZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbWFjLT5pZWVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JczMyIGluX3JhdGUgPSBkYXRhLT5iaXRyYXRlLnZhbHVlOwotCXU4IHJhdGU7Ci0JaW50IGlzX29mZG0gPSAwOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JaWYgKGluX3JhdGUgPT0gLTEpIHsKLQkJaWYgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKQotCQkJaW5fcmF0ZSA9IDI0MDAwMDAwOwotCQllbHNlCi0JCQlpbl9yYXRlID0gMTEwMDAwMDA7Ci0JfQotCi0Jc3dpdGNoIChpbl9yYXRlKSB7Ci0JY2FzZSAxMDAwMDAwOgotCQlyYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKLQkJYnJlYWs7Ci0JY2FzZSAyMDAwMDAwOgotCQlyYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzJNQjsKLQkJYnJlYWs7Ci0JY2FzZSA1NTAwMDAwOgotCQlyYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAwMDAwMDoKLQkJcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COwotCQlicmVhazsKLQljYXNlIDYwMDAwMDA6Ci0JCXJhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjsKLQkJaXNfb2ZkbSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgOTAwMDAwMDoKLQkJcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COwotCQlpc19vZmRtID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSAxMjAwMDAwMDoKLQkJcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKLQkJaXNfb2ZkbSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgMTgwMDAwMDA6Ci0JCXJhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI7Ci0JCWlzX29mZG0gPSAxOwotCQlicmVhazsKLQljYXNlIDI0MDAwMDAwOgotCQlyYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1COwotCQlpc19vZmRtID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSAzNjAwMDAwMDoKLQkJcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKLQkJaXNfb2ZkbSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgNDgwMDAwMDA6Ci0JCXJhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI7Ci0JCWlzX29mZG0gPSAxOwotCQlicmVhazsKLQljYXNlIDU0MDAwMDAwOgotCQlyYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1COwotCQlpc19vZmRtID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0JLyogQ2hlY2sgaWYgY29ycmVjdCBtb2R1bGF0aW9uIGZvciB0aGlzIFBIWS4gKi8KLQlpZiAoaXNfb2ZkbSAmJiAhKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JbWFjLT50eHJhdGVzLnVzZXJfcmF0ZSA9IHJhdGU7Ci0JaWVlZTgwMjExc29mdG1hY19yZWNhbGNfdHhyYXRlcyhtYWMpOwotCWVyciA9IDA7Ci0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X3JhdGUpOwotCi1pbnQKLWllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCi0JCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh1bmxpa2VseSghbWFjLT5ydW5uaW5nKSkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Jc3dpdGNoIChtYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlKSB7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gMTAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gMjAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gNTUwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjoKLQkJZGF0YS0+Yml0cmF0ZS52YWx1ZSA9IDExMDAwMDAwOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gNjAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjoKLQkJZGF0YS0+Yml0cmF0ZS52YWx1ZSA9IDkwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gMTIwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gMTgwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gMjQwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gMzYwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gNDgwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1COgotCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gNTQwMDAwMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFzc2VydCgwKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQllcnIgPSAwOwotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9yYXRlKTsKLQotaW50Ci1pZWVlODAyMTFzb2Z0bWFjX3d4X2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAotCQkJICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7Ci0JaW50IGVyciA9IDA7Ci0KLQltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7Ci0JaWYgKG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkKQotCQltZW1jcHkoZGF0YS0+YXBfYWRkci5zYV9kYXRhLCBtYWMtPmFzc29jaW5mby5ic3NpZCwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtc2V0KGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgMHhmZiwgRVRIX0FMRU4pOwotCWRhdGEtPmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCW11dGV4X3VubG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3dhcCk7Ci0KLWludAotaWVlZTgwMjExc29mdG1hY193eF9zZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKLQkJCSAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOwotCi0JLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKGRhdGEtPmFwX2FkZHIuc2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7Ci0JaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGRhdGEtPmFwX2FkZHIuc2FfZGF0YSkpIHsKLQkJLyogdGhlIGJzc2lkIHdlIGhhdmUgaXMgbm90IHRvIGJlIGZpeGVkIGFueSBsb25nZXIsCi0JCSAqIGFuZCB3ZSBzaG91bGQgcmVhc3NvY2lhdGUgdG8gdGhlIGJlc3QgQVAuICovCi0JCW1hYy0+YXNzb2NpbmZvLmJzc2ZpeGVkID0gMDsKLQkJLyogZm9yY2UgcmVhc3NvY2lhdGlvbiAqLwotCQltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDA7Ci0JCWlmIChtYWMtPmFzc29jaW5mby5hc3NvY2lhdGVkKQotCQkJcXVldWVfZGVsYXllZF93b3JrKG1hYy0+d3EsICZtYWMtPmFzc29jaW5mby53b3JrLCAwKTsKLQl9IGVsc2UgaWYgKGlzX3plcm9fZXRoZXJfYWRkcihkYXRhLT5hcF9hZGRyLnNhX2RhdGEpKSB7Ci0JCS8qIHRoZSBic3NpZCB3ZSBoYXZlIGlzIG5vIGxvbmdlciBmaXhlZCAqLwotCQltYWMtPmFzc29jaW5mby5ic3NmaXhlZCA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKCFtZW1jbXAobWFjLT5hc3NvY2luZm8uYnNzaWQsIGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pKSB7Ci0JCQlpZiAobWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgfHwgbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCkgewotCQkJLyogYnNzaWQgdW5jaGFuZ2VkIGFuZCBhc3NvY2lhdGVkIG9yIGFzc29jaWF0aW5nIC0ganVzdCByZXR1cm4gKi8KLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGNvcHkgbmV3IHZhbHVlIGluIGRhdGEtPmFwX2FkZHIuc2FfZGF0YSB0byBic3NpZCAqLwotCQkJbWVtY3B5KG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBkYXRhLT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKTsKLQkJfQotCQkvKiB0ZWxsIHRoZSBvdGhlciBjb2RlIHRoYXQgdGhpcyBic3NpZCBzaG91bGQgYmUgdXNlZCBubyBtYXR0ZXIgd2hhdCAqLwotCQltYWMtPmFzc29jaW5mby5ic3NmaXhlZCA9IDE7Ci0JCS8qIHF1ZXVlIGFzc29jaWF0ZSBpZiBuZXcgYnNzaWQgb3IgKG9sZCBvbmUgYWdhaW4gYW5kIG5vdCBhc3NvY2lhdGVkKSAqLwotCQlxdWV1ZV9kZWxheWVkX3dvcmsobWFjLT53cSwgJm1hYy0+YXNzb2NpbmZvLndvcmssIDApOwotCX0KLQotIG91dDoKLQltdXRleF91bmxvY2soJm1hYy0+YXNzb2NpbmZvLm11dGV4KTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9zZXRfd2FwKTsKLQotaW50Ci1pZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCi0JCQkgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gMDsKLQljaGFyICpidWY7Ci0JaW50IGk7Ci0KLQltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCS8qIGJsZWguIHNob3VsZG4ndCBiZSBsb2NrZWQgZm9yIHRoYXQga21hbGxvYy4uLiAqLwotCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7Ci0JCWlmICgod3JxdS0+ZGF0YS5sZW5ndGggPCAyKSB8fCAoZXh0cmFbMV0rMiAhPSB3cnF1LT5kYXRhLmxlbmd0aCkpIHsKLQkJCS8qIHRoaXMgaXMgYW4gSUUsIHNvIHRoZSBsZW5ndGggbXVzdCBiZQotCQkJICogY29ycmVjdC4gSXMgaXQgcG9zc2libGUgdGhvdWdoIHRoYXQKLQkJCSAqIG1vcmUgdGhhbiBvbmUgSUUgaXMgcGFzc2VkIGluPwotCQkJICovCi0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKG1hYy0+d3BhLklFYnVmbGVuIDw9IHdycXUtPmRhdGEubGVuZ3RoKSB7Ci0JCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfQVRPTUlDKTsKLQkJCWlmICghYnVmKSB7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWtmcmVlKG1hYy0+d3BhLklFKTsKLQkJCW1hYy0+d3BhLklFID0gYnVmOwotCQkJbWFjLT53cGEuSUVidWZsZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKLQkJfQotCQltZW1jcHkobWFjLT53cGEuSUUsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7Ci0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiZ2VuZXJpYyBJRSBzZXQgdG8gIik7Ci0JCWZvciAoaT0wO2k8d3JxdS0+ZGF0YS5sZW5ndGg7aSsrKQotCQkJZHByaW50aygiJS4yeCIsICh1OCltYWMtPndwYS5JRVtpXSk7Ci0JCWRwcmludGsoIlxuIik7Ci0JCW1hYy0+d3BhLklFbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUobWFjLT53cGEuSUUpOwotCQltYWMtPndwYS5JRSA9IE5VTEw7Ci0JCW1hYy0+d3BhLklFbGVuID0gMDsKLQkJbWFjLT53cGEuSUVidWZsZW4gPSAwOwotCX0KLQotIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJm1hYy0+YXNzb2NpbmZvLm11dGV4KTsKLQotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9nZW5pZSk7Ci0KLWludAotaWVlZTgwMjExc29mdG1hY193eF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IDA7Ci0JaW50IHNwYWNlID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0KLQltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCi0Jd3JxdS0+ZGF0YS5sZW5ndGggPSAwOwotCi0JaWYgKG1hYy0+d3BhLklFICYmIG1hYy0+d3BhLklFbGVuKSB7Ci0JCXdycXUtPmRhdGEubGVuZ3RoID0gbWFjLT53cGEuSUVsZW47Ci0JCWlmIChtYWMtPndwYS5JRWxlbiA8PSBzcGFjZSkKLQkJCW1lbWNweShleHRyYSwgbWFjLT53cGEuSUUsIG1hYy0+d3BhLklFbGVuKTsKLQkJZWxzZQotCQkJZXJyID0gLUUyQklHOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJm1hYy0+YXNzb2NpbmZvLm11dGV4KTsKLQotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9nZW5pZSk7Ci0KLWludAotaWVlZTgwMjExc29mdG1hY193eF9zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKLQl1MTYgcmVhc29uID0gbWxtZS0+cmVhc29uX2NvZGU7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0OwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmbWFjLT5hc3NvY2luZm8ubXV0ZXgpOwotCi0JaWYgKG1lbWNtcChtYWMtPmFzc29jaW5mby5ic3NpZCwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ3eF9zZXRfbWxtZTogcmVxdWVzdGVkIG9wZXJhdGlvbiBvbiBuZXQgd2UgZG9uJ3QgdXNlXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3dpdGNoIChtbG1lLT5jbWQpIHsKLQljYXNlIElXX01MTUVfREVBVVRIOgotCQluZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZChtYWMsIG1sbWUtPmFkZHIuc2FfZGF0YSk7Ci0JCWlmICghbmV0KSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInd4X3NldF9tbG1lOiB3ZSBzaG91bGQga25vdyB0aGUgbmV0IGhlcmUuLi5cbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZXJyID0gIGllZWU4MDIxMXNvZnRtYWNfZGVhdXRoX3JlcShtYWMsIG5ldCwgcmVhc29uKTsKLQkJZ290byBvdXQ7Ci0JY2FzZSBJV19NTE1FX0RJU0FTU09DOgotCQlpZWVlODAyMTFzb2Z0bWFjX3NlbmRfZGlzYXNzb2NfcmVxKG1hYywgcmVhc29uKTsKLQkJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRlZCA9IDA7Ci0JCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKLQkJZXJyID0gMDsKLQkJZ290byBvdXQ7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9zZXRfbWxtZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCAxOTg4MGIwLi40NjcwNjgzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLiBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gdXNlIERIQ1AsIGEgREhDUCBzZXJ2ZXIKIAkgIG11c3QgYmUgb3BlcmF0aW5nIG9uIHlvdXIgbmV0d29yay4gIFJlYWQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmZzcm9vdC50eHQ+IGZvciBkZXRhaWxzLgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCiAKIGNvbmZpZyBJUF9QTlBfQk9PVFAKIAlib29sICJJUDogQk9PVFAgc3VwcG9ydCIKQEAgLTE3NSw3ICsxNzUsNyBAQAogCSAgZG9lcyBCT09UUCBpdHNlbGYsIHByb3ZpZGluZyBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIG9uIHRoZSBrZXJuZWwKIAkgIGNvbW1hbmQgbGluZSwgeW91IGNhbiBzYXkgTiBoZXJlLiBJZiB1bnN1cmUsIHNheSBZLiBOb3RlIHRoYXQgaWYgeW91CiAJICB3YW50IHRvIHVzZSBCT09UUCwgYSBCT09UUCBzZXJ2ZXIgbXVzdCBiZSBvcGVyYXRpbmcgb24geW91ciBuZXR3b3JrLgotCSAgUmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL25mc3Jvb3QudHh0PiBmb3IgZGV0YWlscy4KKwkgIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCiAKIGNvbmZpZyBJUF9QTlBfUkFSUAogCWJvb2wgIklQOiBSQVJQIHN1cHBvcnQiCkBAIC0xODcsOCArMTg3LDggQEAKIAkgIGRpc2NvdmVyZWQgYXV0b21hdGljYWxseSBhdCBib290IHRpbWUgdXNpbmcgdGhlIFJBUlAgcHJvdG9jb2wgKGFuCiAJICBvbGRlciBwcm90b2NvbCB3aGljaCBpcyBiZWluZyBvYnNvbGV0ZWQgYnkgQk9PVFAgYW5kIERIQ1ApLCBzYXkgWQogCSAgaGVyZS4gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHVzZSBSQVJQLCBhIFJBUlAgc2VydmVyIG11c3QgYmUKLQkgIG9wZXJhdGluZyBvbiB5b3VyIG5ldHdvcmsuIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dD4gZm9yCi0JICBkZXRhaWxzLgorCSAgb3BlcmF0aW5nIG9uIHlvdXIgbmV0d29yay4gUmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCiAKICMgbm90IHlldCByZWFkeS4uCiAjICAgYm9vbCAnICAgIElQOiBBUlAgc3VwcG9ydCcgQ09ORklHX0lQX1BOUF9BUlAJCQpAQCAtMzQzLDcgKzM0Myw3IEBACiAJdHJpc3RhdGUgIklQOiBFU1AgdHJhbnNmb3JtYXRpb24iCiAJc2VsZWN0IFhGUk0KIAlzZWxlY3QgQ1JZUFRPCi0Jc2VsZWN0IENSWVBUT19BRUFECisJc2VsZWN0IENSWVBUT19BVVRIRU5DCiAJc2VsZWN0IENSWVBUT19ITUFDCiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0NCQwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDA5Y2E1MjkuLmYyYjUyNzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTI0Myw2ICsyNDMsMjMgQEAKIH0KIEVYUE9SVF9TWU1CT0woYnVpbGRfZWhhc2hfc2VjcmV0KTsKIAorc3RhdGljIGlubGluZSBpbnQgaW5ldF9uZXRuc19vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwcm90b2NvbCkKK3sKKwlpbnQgaGFzaDsKKwlzdHJ1Y3QgbmV0X3Byb3RvY29sICppcHByb3Q7CisKKwlpZiAobmV0ID09ICZpbml0X25ldCkKKwkJcmV0dXJuIDE7CisKKwloYXNoID0gcHJvdG9jb2wgJiAoTUFYX0lORVRfUFJPVE9TIC0gMSk7CisJaXBwcm90ID0gcmN1X2RlcmVmZXJlbmNlKGluZXRfcHJvdG9zW2hhc2hdKTsKKworCWlmIChpcHByb3QgPT0gTlVMTCkKKwkJLyogcmF3IElQIGlzIE9LICovCisJCXJldHVybiAxOworCXJldHVybiBpcHByb3QtPm5ldG5zX29rOworfQorCiAvKgogICoJQ3JlYXRlIGFuIGluZXQgc29ja2V0LgogICovCkBAIC0yNTksOSArMjc2LDYgQEAKIAlpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDsKIAlpbnQgZXJyOwogCi0JaWYgKG5ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCiAJaWYgKHNvY2stPnR5cGUgIT0gU09DS19SQVcgJiYKIAkgICAgc29jay0+dHlwZSAhPSBTT0NLX0RHUkFNICYmCiAJICAgICFpbmV0X2VoYXNoX3NlY3JldCkKQEAgLTMyMCw2ICszMzQsMTAgQEAKIAlpZiAoYW5zd2VyLT5jYXBhYmlsaXR5ID4gMCAmJiAhY2FwYWJsZShhbnN3ZXItPmNhcGFiaWxpdHkpKQogCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCisJZXJyID0gLUVBRk5PU1VQUE9SVDsKKwlpZiAoIWluZXRfbmV0bnNfb2sobmV0LCBwcm90b2NvbCkpCisJCWdvdG8gb3V0X3JjdV91bmxvY2s7CisKIAlzb2NrLT5vcHMgPSBhbnN3ZXItPm9wczsKIAlhbnN3ZXJfcHJvdCA9IGFuc3dlci0+cHJvdDsKIAlhbnN3ZXJfbm9fY2hlY2sgPSBhbnN3ZXItPm5vX2NoZWNrOwpAQCAtNDQ2LDcgKzQ2NCw3IEBACiAJaWYgKGFkZHJfbGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpCiAJCWdvdG8gb3V0OwogCi0JY2hrX2FkZHJfcmV0ID0gaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCBhZGRyLT5zaW5fYWRkci5zX2FkZHIpOworCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKHNvY2tfbmV0KHNrKSwgYWRkci0+c2luX2FkZHIuc19hZGRyKTsKIAogCS8qIE5vdCBzcGVjaWZpZWQgYnkgYW55IHN0YW5kYXJkIHBlci1zZSwgaG93ZXZlciBpdCBicmVha3MgdG9vCiAJICogbWFueSBhcHBsaWNhdGlvbnMgd2hlbiByZW1vdmVkLiAgSXQgaXMgdW5mb3J0dW5hdGUgc2luY2UKQEAgLTQ1OCw3ICs0NzYsNyBAQAogCWVyciA9IC1FQUREUk5PVEFWQUlMOwogCWlmICghc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQgJiYKIAkgICAgIWluZXQtPmZyZWViaW5kICYmCi0JICAgIGFkZHItPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZICYmCisJICAgIGFkZHItPnNpbl9hZGRyLnNfYWRkciAhPSBodG9ubChJTkFERFJfQU5ZKSAmJgogCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0xPQ0FMICYmCiAJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fTVVMVElDQVNUICYmCiAJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fQlJPQURDQVNUKQpAQCAtNzg0LDYgKzgwMiw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJaW50IGVyciA9IDA7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBTSU9DR1NUQU1QOgpAQCAtNzk1LDEyICs4MTQsMTIgQEAKIAkJY2FzZSBTSU9DQUREUlQ6CiAJCWNhc2UgU0lPQ0RFTFJUOgogCQljYXNlIFNJT0NSVE1TRzoKLQkJCWVyciA9IGlwX3J0X2lvY3RsKHNrLT5za19uZXQsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJCWVyciA9IGlwX3J0X2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0lPQ0RBUlA6CiAJCWNhc2UgU0lPQ0dBUlA6CiAJCWNhc2UgU0lPQ1NBUlA6Ci0JCQllcnIgPSBhcnBfaW9jdGwoc2stPnNrX25ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQkJZXJyID0gYXJwX2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0lPQ0dJRkFERFI6CiAJCWNhc2UgU0lPQ1NJRkFERFI6CkBAIC04MTMsNyArODMyLDcgQEAKIAkJY2FzZSBTSU9DU0lGUEZMQUdTOgogCQljYXNlIFNJT0NHSUZQRkxBR1M6CiAJCWNhc2UgU0lPQ1NJRkZMQUdTOgotCQkJZXJyID0gZGV2aW5ldF9pb2N0bChjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCQllcnIgPSBkZXZpbmV0X2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoc2stPnNrX3Byb3QtPmlvY3RsKQpAQCAtMTA1OCw4ICsxMDc3LDggQEAKIAogCWlmIChzeXNjdGxfaXBfZHluYWRkciA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogc2hpZnRpbmcgaW5ldC0+IgotCQkJCSAic2FkZHIgZnJvbSAlZC4lZC4lZC4lZCB0byAlZC4lZC4lZC4lZFxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywKKwkJCQkgInNhZGRyIGZyb20gIiBOSVBRVUFEX0ZNVCAiIHRvICIgTklQUVVBRF9GTVQgIlxuIiwKKwkJICAgICAgIF9fZnVuY19fLAogCQkgICAgICAgTklQUVVBRChvbGRfc2FkZHIpLAogCQkgICAgICAgTklQUVVBRChuZXdfc2FkZHIpKTsKIAl9CkBAIC0xMTEzLDcgKzExMzIsNyBAQAogCX07CiAKIAlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCAmZmwpOwotCWVyciA9IGlwX3JvdXRlX291dHB1dF9mbG93KCZpbml0X25ldCwgJnJ0LCAmZmwsIHNrLCAwKTsKKwllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksICZydCwgJmZsLCBzaywgMCk7CiB9CiAJaWYgKCFlcnIpCiAJCXNrX3NldHVwX2NhcHMoc2ssICZydC0+dS5kc3QpOwpAQCAtMTIzMSw2ICsxMjUwLDI5IEBACiAJcmV0dXJuIHNlZ3M7CiB9CiAKK2ludCBpbmV0X2N0bF9zb2NrX2NyZWF0ZShzdHJ1Y3Qgc29jayAqKnNrLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCisJCQkgdW5zaWduZWQgc2hvcnQgdHlwZSwgdW5zaWduZWQgY2hhciBwcm90b2NvbCwKKwkJCSBzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlpbnQgcmMgPSBzb2NrX2NyZWF0ZV9rZXJuKGZhbWlseSwgdHlwZSwgcHJvdG9jb2wsICZzb2NrKTsKKworCWlmIChyYyA9PSAwKSB7CisJCSpzayA9IHNvY2stPnNrOworCQkoKnNrKS0+c2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7CisJCS8qCisJCSAqIFVuaGFzaCBpdCBzbyB0aGF0IElQIGlucHV0IHByb2Nlc3NpbmcgZG9lcyBub3QgZXZlbiBzZWUgaXQsCisJCSAqIHdlIGRvIG5vdCB3aXNoIHRoaXMgc29ja2V0IHRvIHNlZSBpbmNvbWluZyBwYWNrZXRzLgorCQkgKi8KKwkJKCpzayktPnNrX3Byb3QtPnVuaGFzaCgqc2spOworCisJCXNrX2NoYW5nZV9uZXQoKnNrLCBuZXQpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3RsX3NvY2tfY3JlYXRlKTsKKwogdW5zaWduZWQgbG9uZyBzbm1wX2ZvbGRfZmllbGQodm9pZCAqbWliW10sIGludCBvZmZ0KQogewogCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKQEAgLTEyODMsMTcgKzEzMjUsMjAgQEAKIAkuZ3NvX3NlbmRfY2hlY2sgPSB0Y3BfdjRfZ3NvX3NlbmRfY2hlY2ssCiAJLmdzb19zZWdtZW50ID0JdGNwX3Rzb19zZWdtZW50LAogCS5ub19wb2xpY3kgPQkxLAorCS5uZXRuc19vayA9CTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5ldF9wcm90b2NvbCB1ZHBfcHJvdG9jb2wgPSB7CiAJLmhhbmRsZXIgPQl1ZHBfcmN2LAogCS5lcnJfaGFuZGxlciA9CXVkcF9lcnIsCiAJLm5vX3BvbGljeSA9CTEsCisJLm5ldG5zX29rID0JMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X3Byb3RvY29sIGljbXBfcHJvdG9jb2wgPSB7CiAJLmhhbmRsZXIgPQlpY21wX3JjdiwKIAkubm9fcG9saWN5ID0JMSwKKwkubmV0bnNfb2sgPQkxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9pcHY0X21pYnModm9pZCkKQEAgLTE0MTQsNyArMTQ1OSw3IEBACiAKIAlpcF9pbml0KCk7CiAKLQl0Y3BfdjRfaW5pdCgmaW5ldF9mYW1pbHlfb3BzKTsKKwl0Y3BfdjRfaW5pdCgpOwogCiAJLyogU2V0dXAgVENQIHNsYWIgY2FjaGUgZm9yIG9wZW4gcmVxdWVzdHMuICovCiAJdGNwX2luaXQoKTsKQEAgLTE0MjksNyArMTQ3NCw4IEBACiAJICoJU2V0IHRoZSBJQ01QIGxheWVyIHVwCiAJICovCiAKLQlpY21wX2luaXQoJmluZXRfZmFtaWx5X29wcyk7CisJaWYgKGljbXBfaW5pdCgpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUgdGhlIElDTVAgY29udHJvbCBzb2NrZXQuXG4iKTsKIAogCS8qCiAJICoJSW5pdGlhbGlzZSB0aGUgbXVsdGljYXN0IHJvdXRlcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCBjNjYzZmE1Li42OGI3MmE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW5laWdoLT50eXBlID0gaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCBhZGRyKTsKKwluZWlnaC0+dHlwZSA9IGluZXRfYWRkcl90eXBlKGRldl9uZXQoZGV2KSwgYWRkcik7CiAKIAlwYXJtcyA9IGluX2Rldi0+YXJwX3Bhcm1zOwogCV9fbmVpZ2hfcGFybXNfcHV0KG5laWdoLT5wYXJtcyk7CkBAIC0zNDEsMTQgKzM0MSwxNCBAQAogCXN3aXRjaCAoSU5fREVWX0FSUF9BTk5PVU5DRShpbl9kZXYpKSB7CiAJZGVmYXVsdDoKIAljYXNlIDA6CQkvKiBCeSBkZWZhdWx0IGFubm91bmNlIGFueSBsb2NhbCBJUCAqLwotCQlpZiAoc2tiICYmIGluZXRfYWRkcl90eXBlKCZpbml0X25ldCwgaXBfaGRyKHNrYiktPnNhZGRyKSA9PSBSVE5fTE9DQUwpCisJCWlmIChza2IgJiYgaW5ldF9hZGRyX3R5cGUoZGV2X25ldChkZXYpLCBpcF9oZHIoc2tiKS0+c2FkZHIpID09IFJUTl9MT0NBTCkKIAkJCXNhZGRyID0gaXBfaGRyKHNrYiktPnNhZGRyOwogCQlicmVhazsKIAljYXNlIDE6CQkvKiBSZXN0cmljdCBhbm5vdW5jZW1lbnRzIG9mIHNhZGRyIGluIHNhbWUgc3VibmV0ICovCiAJCWlmICghc2tiKQogCQkJYnJlYWs7CiAJCXNhZGRyID0gaXBfaGRyKHNrYiktPnNhZGRyOwotCQlpZiAoaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCBzYWRkcikgPT0gUlROX0xPQ0FMKSB7CisJCWlmIChpbmV0X2FkZHJfdHlwZShkZXZfbmV0KGRldiksIHNhZGRyKSA9PSBSVE5fTE9DQUwpIHsKIAkJCS8qIHNhZGRyIHNob3VsZCBiZSBrbm93biB0byB0YXJnZXQgKi8KIAkJCWlmIChpbmV0X2FkZHJfb25saW5rKGluX2RldiwgdGFyZ2V0LCBzYWRkcikpCiAJCQkJYnJlYWs7CkBAIC0zNjgsNiArMzY4LDcgQEAKIAkJaWYgKCEobmVpZ2gtPm51ZF9zdGF0ZSZOVURfVkFMSUQpKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgInRyeWluZyB0byB1Y2FzdCBwcm9iZSBpbiBOVURfSU5WQUxJRFxuIik7CiAJCWRzdF9oYSA9IG5laWdoLT5oYTsKKwkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7CiAJfSBlbHNlIGlmICgocHJvYmVzIC09IG5laWdoLT5wYXJtcy0+YXBwX3Byb2JlcykgPCAwKSB7CiAjaWZkZWYgQ09ORklHX0FSUEQKIAkJbmVpZ2hfYXBwX25zKG5laWdoKTsKQEAgLTM3Nyw2ICszNzgsOCBAQAogCiAJYXJwX3NlbmQoQVJQT1BfUkVRVUVTVCwgRVRIX1BfQVJQLCB0YXJnZXQsIGRldiwgc2FkZHIsCiAJCSBkc3RfaGEsIGRldi0+ZGV2X2FkZHIsIE5VTEwpOworCWlmIChkc3RfaGEpCisJCXJlYWRfdW5sb2NrX2JoKCZuZWlnaC0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgYXJwX2lnbm9yZShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBzaXAsIF9fYmUzMiB0aXApCkBAIC00MjEsNyArNDI0LDcgQEAKIAlpbnQgZmxhZyA9IDA7CiAJLyp1bnNpZ25lZCBsb25nIG5vdzsgKi8KIAotCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpIDwgMCkKKwlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSA8IDApCiAJCXJldHVybiAxOwogCWlmIChydC0+dS5kc3QuZGV2ICE9IGRldikgewogCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9BUlBGSUxURVIpOwpAQCAtNDcyLDkgKzQ3NSw5IEBACiAJCXJldHVybiAxOwogCX0KIAotCXBhZGRyID0gKChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdCktPnJ0X2dhdGV3YXk7CisJcGFkZHIgPSBza2ItPnJ0YWJsZS0+cnRfZ2F0ZXdheTsKIAotCWlmIChhcnBfc2V0X3ByZWRlZmluZWQoaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCBwYWRkciksIGhhZGRyLCBwYWRkciwgZGV2KSkKKwlpZiAoYXJwX3NldF9wcmVkZWZpbmVkKGluZXRfYWRkcl90eXBlKGRldl9uZXQoZGV2KSwgcGFkZHIpLCBoYWRkciwgcGFkZHIsIGRldikpCiAJCXJldHVybiAwOwogCiAJbiA9IF9fbmVpZ2hfbG9va3VwKCZhcnBfdGJsLCAmcGFkZHIsIGRldiwgMSk7CkBAIC01NjcsMTQgKzU3MCwxMyBAQAogCSAqCUFsbG9jYXRlIGEgYnVmZmVyCiAJICovCiAKLQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhcnBoZHIpKyAyKihkZXYtPmFkZHJfbGVuKzQpCi0JCQkJKyBMTF9SRVNFUlZFRF9TUEFDRShkZXYpLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBhbGxvY19za2IoYXJwX2hkcl9sZW4oZGV2KSArIExMX1JFU0VSVkVEX1NQQUNFKGRldiksIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlza2JfcmVzZXJ2ZShza2IsIExMX1JFU0VSVkVEX1NQQUNFKGRldikpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCWFycCA9IChzdHJ1Y3QgYXJwaGRyICopIHNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgYXJwaGRyKSArIDIqKGRldi0+YWRkcl9sZW4rNCkpOworCWFycCA9IChzdHJ1Y3QgYXJwaGRyICopIHNrYl9wdXQoc2tiLCBhcnBfaGRyX2xlbihkZXYpKTsKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQVJQKTsKIAlpZiAoc3JjX2h3ID09IE5VTEwpCkBAIC03MDcsNiArNzA5LDcgQEAKIAl1MTYgZGV2X3R5cGUgPSBkZXYtPnR5cGU7CiAJaW50IGFkZHJfdHlwZTsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAogCS8qIGFycF9yY3YgYmVsb3cgdmVyaWZpZXMgdGhlIEFSUCBoZWFkZXIgYW5kIHZlcmlmaWVzIHRoZSBkZXZpY2UKIAkgKiBpcyBBUlAnYWJsZS4KQEAgLTgwMiw3ICs4MDUsNyBAQAogCS8qIFNwZWNpYWwgY2FzZTogSVB2NCBkdXBsaWNhdGUgYWRkcmVzcyBkZXRlY3Rpb24gcGFja2V0IChSRkMyMTMxKSAqLwogCWlmIChzaXAgPT0gMCkgewogCQlpZiAoYXJwLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSAmJgotCQkgICAgaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCB0aXApID09IFJUTl9MT0NBTCAmJgorCQkgICAgaW5ldF9hZGRyX3R5cGUobmV0LCB0aXApID09IFJUTl9MT0NBTCAmJgogCQkgICAgIWFycF9pZ25vcmUoaW5fZGV2LCBzaXAsIHRpcCkpCiAJCQlhcnBfc2VuZChBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLCBzaXAsIGRldiwgdGlwLCBzaGEsCiAJCQkJIGRldi0+ZGV2X2FkZHIsIHNoYSk7CkBAIC04MTIsNyArODE1LDcgQEAKIAlpZiAoYXJwLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSAmJgogCSAgICBpcF9yb3V0ZV9pbnB1dChza2IsIHRpcCwgc2lwLCAwLCBkZXYpID09IDApIHsKIAotCQlydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwkJcnQgPSBza2ItPnJ0YWJsZTsKIAkJYWRkcl90eXBlID0gcnQtPnJ0X3R5cGU7CiAKIAkJaWYgKGFkZHJfdHlwZSA9PSBSVE5fTE9DQUwpIHsKQEAgLTgzMiw3ICs4MzUsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAoSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkgewogCQkJICAgIGlmIChhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QgICYmIHJ0LT51LmRzdC5kZXYgIT0gZGV2ICYmCi0JCQkgICAgIChhcnBfZndkX3Byb3h5KGluX2RldiwgcnQpIHx8IHBuZWlnaF9sb29rdXAoJmFycF90YmwsICZpbml0X25ldCwgJnRpcCwgZGV2LCAwKSkpIHsKKwkJCSAgICAgKGFycF9md2RfcHJveHkoaW5fZGV2LCBydCkgfHwgcG5laWdoX2xvb2t1cCgmYXJwX3RibCwgbmV0LCAmdGlwLCBkZXYsIDApKSkgewogCQkJCW4gPSBuZWlnaF9ldmVudF9ucygmYXJwX3RibCwgc2hhLCAmc2lwLCBkZXYpOwogCQkJCWlmIChuKQogCQkJCQluZWlnaF9yZWxlYXNlKG4pOwpAQCAtODU1LDE0ICs4NTgsMTQgQEAKIAogCW4gPSBfX25laWdoX2xvb2t1cCgmYXJwX3RibCwgJnNpcCwgZGV2LCAwKTsKIAotCWlmIChJUFY0X0RFVkNPTkZfQUxMKGRldi0+bmRfbmV0LCBBUlBfQUNDRVBUKSkgeworCWlmIChJUFY0X0RFVkNPTkZfQUxMKGRldl9uZXQoZGV2KSwgQVJQX0FDQ0VQVCkpIHsKIAkJLyogVW5zb2xpY2l0ZWQgQVJQIGlzIG5vdCBhY2NlcHRlZCBieSBkZWZhdWx0LgogCQkgICBJdCBpcyBwb3NzaWJsZSwgdGhhdCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBmb3Igc29tZQogCQkgICBkZXZpY2VzIChzdHJpcCBpcyBjYW5kaWRhdGUpCiAJCSAqLwogCQlpZiAobiA9PSBOVUxMICYmCiAJCSAgICBhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUExZKSAmJgotCQkgICAgaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCBzaXApID09IFJUTl9VTklDQVNUKQorCQkgICAgaW5ldF9hZGRyX3R5cGUobmV0LCBzaXApID09IFJUTl9VTklDQVNUKQogCQkJbiA9IF9fbmVpZ2hfbG9va3VwKCZhcnBfdGJsLCAmc2lwLCBkZXYsIDEpOwogCX0KIApAQCAtOTA5LDEzICs5MTIsOCBAQAogewogCXN0cnVjdCBhcnBoZHIgKmFycDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCi0JCWdvdG8gZnJlZXNrYjsKLQogCS8qIEFSUCBoZWFkZXIsIHBsdXMgMiBkZXZpY2UgYWRkcmVzc2VzLCBwbHVzIDIgSVAgYWRkcmVzc2VzLiAgKi8KLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAoc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsKLQkJCQkgKDIgKiBkZXYtPmFkZHJfbGVuKSArCi0JCQkJICgyICogc2l6ZW9mKHUzMikpKSkpCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4oZGV2KSkpCiAJCWdvdG8gZnJlZXNrYjsKIAogCWFycCA9IGFycF9oZHIoc2tiKTsKQEAgLTExOTgsOSArMTE5Niw2IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCQluZWlnaF9jaGFuZ2VhZGRyKCZhcnBfdGJsLCBkZXYpOwpAQCAtMTMxNSw3ICsxMzEwLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19BWDI1KSB8fCBkZWZpbmVkKENPTkZJR19BWDI1X01PRFVMRSkKIAl9CiAjZW5kaWYKLQlzcHJpbnRmKHRidWYsICIldS4ldS4ldS4ldSIsIE5JUFFVQUQoKih1MzIqKW4tPnByaW1hcnlfa2V5KSk7CisJc3ByaW50Zih0YnVmLCBOSVBRVUFEX0ZNVCwgTklQUVVBRCgqKHUzMiopbi0+cHJpbWFyeV9rZXkpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiUtMTZzIDB4JS0xMHgweCUtMTB4JXMgICAgICogICAgICAgICVzXG4iLAogCQkgICB0YnVmLCBoYXR5cGUsIGFycF9zdGF0ZV90b19mbGFncyhuKSwgaGJ1ZmZlciwgZGV2LT5uYW1lKTsKIAlyZWFkX3VubG9jaygmbi0+bG9jayk7CkBAIC0xMzI4LDcgKzEzMjMsNyBAQAogCWludCBoYXR5cGUgPSBkZXYgPyBkZXYtPnR5cGUgOiAwOwogCWNoYXIgdGJ1ZlsxNl07CiAKLQlzcHJpbnRmKHRidWYsICIldS4ldS4ldS4ldSIsIE5JUFFVQUQoKih1MzIqKW4tPmtleSkpOworCXNwcmludGYodGJ1ZiwgTklQUVVBRF9GTVQsIE5JUFFVQUQoKih1MzIqKW4tPmtleSkpOwogCXNlcV9wcmludGYoc2VxLCAiJS0xNnMgMHglLTEweDB4JS0xMHglcyAgICAgKiAgICAgICAgJXNcbiIsCiAJCSAgIHRidWYsIGhhdHlwZSwgQVRGX1BVQkwgfCBBVEZfUEVSTSwgIjAwOjAwOjAwOjAwOjAwOjAwIiwKIAkJICAgZGV2ID8gZGV2LT5uYW1lIDogIioiKTsKQEAgLTEzODIsMTMgKzEzNzcsMjkgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFycF9wcm9jX2luaXQodm9pZCkKKworc3RhdGljIGludCBfX25ldF9pbml0IGFycF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJhcnAiLCBTX0lSVUdPLCAmYXJwX3NlcV9mb3BzKSkKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImFycCIsIFNfSVJVR08sICZhcnBfc2VxX2ZvcHMpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBhcnBfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXByb2NfbmV0X3JlbW92ZShuZXQsICJhcnAiKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBhcnBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IGFycF9uZXRfaW5pdCwKKwkuZXhpdCA9IGFycF9uZXRfZXhpdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFycF9wcm9jX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYXJwX25ldF9vcHMpOworfQorCiAjZWxzZSAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBhcnBfcHJvY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKaW5kZXggOGNkMzU3Zi4uNDYzN2RlZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvY2lwc29faXB2NC5jCisrKyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwpAQCAtMTgwMCw3ICsxODAwLDYgQEAKIAl9CiAJbWVtY3B5KG9wdC0+X19kYXRhLCBidWYsIGJ1Zl9sZW4pOwogCW9wdC0+b3B0bGVuID0gb3B0X2xlbjsKLQlvcHQtPmlzX2RhdGEgPSAxOwogCW9wdC0+Y2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlrZnJlZShidWYpOwogCWJ1ZiA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggZjI4MmIyNi4uNjg0OGU0NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJaWYgKCFpbl9kZXYpCiAJCWdvdG8gb3V0OwogCUlOSVRfUkNVX0hFQUQoJmluX2Rldi0+cmN1X2hlYWQpOwotCW1lbWNweSgmaW5fZGV2LT5jbmYsIGRldi0+bmRfbmV0LT5pcHY0LmRldmNvbmZfZGZsdCwKKwltZW1jcHkoJmluX2Rldi0+Y25mLCBkZXZfbmV0KGRldiktPmlwdjQuZGV2Y29uZl9kZmx0LAogCQkJc2l6ZW9mKGluX2Rldi0+Y25mKSk7CiAJaW5fZGV2LT5jbmYuc3lzY3RsID0gTlVMTDsKIAlpbl9kZXYtPmRldiA9IGRldjsKQEAgLTQzNyw3ICs0MzcsNyBAQAogCiBzdGF0aWMgaW50IGluZXRfcnRtX2RlbGFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IG5sYXR0ciAqdGJbSUZBX01BWCsxXTsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwpAQCAtNDQ2LDkgKzQ0Niw2IEBACiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKG5ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLCBpZmFfaXB2NF9wb2xpY3kpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm91dDsKQEAgLTU1NSwxNCArNTUyLDExIEBACiAKIHN0YXRpYyBpbnQgaW5ldF9ydG1fbmV3YWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgaW5faWZhZGRyICppZmE7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKG5ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWZhID0gcnRtX3RvX2lmYWRkcihuZXQsIG5saCk7CiAJaWYgKElTX0VSUihpZmEpKQogCQlyZXR1cm4gUFRSX0VSUihpZmEpOwpAQCAtNTk1LDcgKzU4OSw3IEBACiB9CiAKIAotaW50IGRldmluZXRfaW9jdGwodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK2ludCBkZXZpbmV0X2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgaWZyZXEgaWZyOwogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fb3JpZzsKQEAgLTYyNCw3ICs2MTgsNyBAQAogCQkqY29sb24gPSAwOwogCiAjaWZkZWYgQ09ORklHX0tNT0QKLQlkZXZfbG9hZCgmaW5pdF9uZXQsIGlmci5pZnJfbmFtZSk7CisJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOwogI2VuZGlmCiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtNjY1LDcgKzY1OSw3IEBACiAJcnRubF9sb2NrKCk7CiAKIAlyZXQgPSAtRU5PREVWOwotCWlmICgoZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBpZnIuaWZyX25hbWUpKSA9PSBOVUxMKQorCWlmICgoZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBpZnIuaWZyX25hbWUpKSA9PSBOVUxMKQogCQlnb3RvIGRvbmU7CiAKIAlpZiAoY29sb24pCkBAIC03NTIsNiArNzQ2LDcgQEAKIAkJCWluZXRfZGVsX2lmYShpbl9kZXYsIGlmYXAsIDApOwogCQkJaWZhLT5pZmFfYnJvYWRjYXN0ID0gMDsKIAkJCWlmYS0+aWZhX2FueWNhc3QgPSAwOworCQkJaWZhLT5pZmFfc2NvcGUgPSAwOwogCQl9CiAKIAkJaWZhLT5pZmFfYWRkcmVzcyA9IGlmYS0+aWZhX2xvY2FsID0gc2luLT5zaW5fYWRkci5zX2FkZHI7CkBAIC04NzcsNiArODcyLDcgQEAKIHsKIAlfX2JlMzIgYWRkciA9IDA7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CkBAIC05MDUsNyArOTAxLDcgQEAKIAkgKi8KIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBkZXYpIHsKKwlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHsKIAkJaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldikpID09IE5VTEwpCiAJCQljb250aW51ZTsKIApAQCAtOTc4LDcgKzk3NCw3IEBACiAJaWYgKHNjb3BlICE9IFJUX1NDT1BFX0xJTkspCiAJCXJldHVybiBjb25maXJtX2FkZHJfaW5kZXYoaW5fZGV2LCBkc3QsIGxvY2FsLCBzY29wZSk7CiAKLQluZXQgPSBpbl9kZXYtPmRldi0+bmRfbmV0OworCW5ldCA9IGRldl9uZXQoaW5fZGV2LT5kZXYpOwogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikgewpAQCAtMTA0NCw5ICsxMDQwLDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldik7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KIAlBU1NFUlRfUlROTCgpOwogCiAJaWYgKCFpbl9kZXYpIHsKQEAgLTExNjUsMTYgKzExNTgsMTMgQEAKIAogc3RhdGljIGludCBpbmV0X2R1bXBfaWZhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IGlkeCwgaXBfaWR4OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKIAlpbnQgc19pcF9pZHgsIHNfaWR4ID0gY2ItPmFyZ3NbMF07CiAKLQlpZiAobmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIDA7Ci0KIAlzX2lwX2lkeCA9IGlwX2lkeCA9IGNiLT5hcmdzWzFdOwogCWlkeCA9IDA7CiAJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CkBAIC0xMjEzLDcgKzEyMDMsNyBAQAogCWludCBlcnIgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKLQluZXQgPSBpZmEtPmlmYV9kZXYtPmRldi0+bmRfbmV0OworCW5ldCA9IGRldl9uZXQoaWZhLT5pZmFfZGV2LT5kZXYpOwogCXNrYiA9IG5sbXNnX25ldyhpbmV0X25sbXNnX3NpemUoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIGVycm91dDsKQEAgLTE1MjcsNyArMTUxNyw3IEBACiB7CiAJbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKGlkZXYtPmRldiwgaWRldi0+YXJwX3Bhcm1zLCBORVRfSVBWNCwKIAkJCU5FVF9JUFY0X05FSUdILCAiaXB2NCIsIE5VTEwsIE5VTEwpOwotCV9fZGV2aW5ldF9zeXNjdGxfcmVnaXN0ZXIoaWRldi0+ZGV2LT5uZF9uZXQsIGlkZXYtPmRldi0+bmFtZSwKKwlfX2RldmluZXRfc3lzY3RsX3JlZ2lzdGVyKGRldl9uZXQoaWRldi0+ZGV2KSwgaWRldi0+ZGV2LT5uYW1lLAogCQkJaWRldi0+ZGV2LT5pZmluZGV4LCAmaWRldi0+Y25mKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNC5jIGIvbmV0L2lwdjQvZXNwNC5jCmluZGV4IDA5MWU2NzAuLjRlNzNlNTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2VzcDQuYworKysgYi9uZXQvaXB2NC9lc3A0LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQlzdHJ1Y3QgeGZybV9lbmNhcF90bXBsICplbmNhcCA9IHgtPmVuY2FwOwogCQlzdHJ1Y3QgdWRwaGRyICp1aDsKIAkJX19iZTMyICp1ZHBkYXRhMzI7Ci0JCXVuc2lnbmVkIGludCBzcG9ydCwgZHBvcnQ7CisJCV9fYmUxNiBzcG9ydCwgZHBvcnQ7CiAJCWludCBlbmNhcF90eXBlOwogCiAJCXNwaW5fbG9ja19iaCgmeC0+bG9jayk7CkBAIC0zMzYsNyArMzM2LDcgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmFzZzsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqZXNwaCkpKQorCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqZXNwaCkgKyBjcnlwdG9fYWVhZF9pdnNpemUoYWVhZCkpKQogCQlnb3RvIG91dDsKIAogCWlmIChlbGVuIDw9IDApCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDg2ZmYyNzEuLjBmMTU1N2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0yNTcsNyArMjU3LDcgQEAKIAlpZiAoaW5fZGV2ID09IE5VTEwpCiAJCWdvdG8gZV9pbnZhbDsKIAotCW5ldCA9IGRldi0+bmRfbmV0OworCW5ldCA9IGRldl9uZXQoZGV2KTsKIAlpZiAoZmliX2xvb2t1cChuZXQsICZmbCwgJnJlcykpCiAJCWdvdG8gbGFzdF9yZXNvcnQ7CiAJaWYgKHJlcy50eXBlICE9IFJUTl9VTklDQVNUKQpAQCAtNTgzLDcgKzU4Myw3IEBACiAKIHN0YXRpYyBpbnQgaW5ldF9ydG1fZGVscm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyKiBubGgsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IGZpYl9jb25maWcgY2ZnOwogCXN0cnVjdCBmaWJfdGFibGUgKnRiOwogCWludCBlcnI7CkBAIC02MDUsNyArNjA1LDcgQEAKIAogc3RhdGljIGludCBpbmV0X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIqIG5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgZmliX2NvbmZpZyBjZmc7CiAJc3RydWN0IGZpYl90YWJsZSAqdGI7CiAJaW50IGVycjsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCiBzdGF0aWMgaW50IGluZXRfZHVtcF9maWIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAl1bnNpZ25lZCBpbnQgaCwgc19oOwogCXVuc2lnbmVkIGludCBlID0gMCwgc19lOwogCXN0cnVjdCBmaWJfdGFibGUgKnRiOwpAQCAtNjc0LDcgKzY3NCw3IEBACiAKIHN0YXRpYyB2b2lkIGZpYl9tYWdpYyhpbnQgY21kLCBpbnQgdHlwZSwgX19iZTMyIGRzdCwgaW50IGRzdF9sZW4sIHN0cnVjdCBpbl9pZmFkZHIgKmlmYSkKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBpZmEtPmlmYV9kZXYtPmRldi0+bmRfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWZhLT5pZmFfZGV2LT5kZXYpOwogCXN0cnVjdCBmaWJfdGFibGUgKnRiOwogCXN0cnVjdCBmaWJfY29uZmlnIGNmZyA9IHsKIAkJLmZjX3Byb3RvY29sID0gUlRQUk9UX0tFUk5FTCwKQEAgLTgwMSwxNSArODAxLDE1IEBACiAJCWZpYl9tYWdpYyhSVE1fREVMUk9VVEUsIFJUTl9MT0NBTCwgaWZhLT5pZmFfbG9jYWwsIDMyLCBwcmltKTsKIAogCQkvKiBDaGVjaywgdGhhdCB0aGlzIGxvY2FsIGFkZHJlc3MgZmluYWxseSBkaXNhcHBlYXJlZC4gKi8KLQkJaWYgKGluZXRfYWRkcl90eXBlKGRldi0+bmRfbmV0LCBpZmEtPmlmYV9sb2NhbCkgIT0gUlROX0xPQ0FMKSB7CisJCWlmIChpbmV0X2FkZHJfdHlwZShkZXZfbmV0KGRldiksIGlmYS0+aWZhX2xvY2FsKSAhPSBSVE5fTE9DQUwpIHsKIAkJCS8qIEFuZCB0aGUgbGFzdCwgYnV0IG5vdCB0aGUgbGVhc3QgdGhpbmcuCiAJCQkgICBXZSBtdXN0IGZsdXNoIHN0cmF5IEZJQiBlbnRyaWVzLgogCiAJCQkgICBGaXJzdCBvZiBhbGwsIHdlIHNjYW4gZmliX2luZm8gbGlzdCBzZWFyY2hpbmcKIAkJCSAgIGZvciBzdHJheSBuZXh0aG9wIGVudHJpZXMsIHRoZW4gaWduaXRlIGZpYl9mbHVzaC4KIAkJCSovCi0JCQlpZiAoZmliX3N5bmNfZG93bl9hZGRyKGRldi0+bmRfbmV0LCBpZmEtPmlmYV9sb2NhbCkpCi0JCQkJZmliX2ZsdXNoKGRldi0+bmRfbmV0KTsKKwkJCWlmIChmaWJfc3luY19kb3duX2FkZHIoZGV2X25ldChkZXYpLCBpZmEtPmlmYV9sb2NhbCkpCisJCQkJZmliX2ZsdXNoKGRldl9uZXQoZGV2KSk7CiAJCX0KIAl9CiAjdW5kZWYgTE9DQUxfT0sKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCXN0cnVjdCBmaWJfdGFibGUgKnRiOwogCXUzMiBwaWQ7CiAKLQluZXQgPSBza2ItPnNrLT5za19uZXQ7CisJbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJbmxoID0gbmxtc2dfaGRyKHNrYik7CiAJaWYgKHNrYi0+bGVuIDwgTkxNU0dfU1BBQ0UoMCkgfHwgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbiB8fAogCSAgICBubGgtPm5sbXNnX2xlbiA8IE5MTVNHX0xFTkdUSChzaXplb2YoKmZybikpKQpAQCAtODk5LDcgKzg5OSw3IEBACiBzdGF0aWMgdm9pZCBmaWJfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2UpCiB7CiAJaWYgKGZpYl9zeW5jX2Rvd25fZGV2KGRldiwgZm9yY2UpKQotCQlmaWJfZmx1c2goZGV2LT5uZF9uZXQpOworCQlmaWJfZmx1c2goZGV2X25ldChkZXYpKTsKIAlydF9jYWNoZV9mbHVzaCgwKTsKIAlhcnBfaWZkb3duKGRldik7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfaGFzaC5jIGIvbmV0L2lwdjQvZmliX2hhc2guYwppbmRleCA3NmI5YzY4Li4wMjA4OGRlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfaGFzaC5jCisrKyBiL25ldC9pcHY0L2ZpYl9oYXNoLmMKQEAgLTM3Miw3ICszNzIsOCBAQAogc3RhdGljIGludCBmbl9oYXNoX2luc2VydChzdHJ1Y3QgZmliX3RhYmxlICp0Yiwgc3RydWN0IGZpYl9jb25maWcgKmNmZykKIHsKIAlzdHJ1Y3QgZm5faGFzaCAqdGFibGUgPSAoc3RydWN0IGZuX2hhc2ggKikgdGItPnRiX2RhdGE7Ci0Jc3RydWN0IGZpYl9ub2RlICpuZXdfZiwgKmY7CisJc3RydWN0IGZpYl9ub2RlICpuZXdfZiA9IE5VTEw7CisJc3RydWN0IGZpYl9ub2RlICpmOwogCXN0cnVjdCBmaWJfYWxpYXMgKmZhLCAqbmV3X2ZhOwogCXN0cnVjdCBmbl96b25lICpmejsKIAlzdHJ1Y3QgZmliX2luZm8gKmZpOwpAQCAtNDk2LDcgKzQ5Nyw2IEBACiAKIAllcnIgPSAtRU5PQlVGUzsKIAotCW5ld19mID0gTlVMTDsKIAlpZiAoIWYpIHsKIAkJbmV3X2YgPSBrbWVtX2NhY2hlX3phbGxvYyhmbl9oYXNoX2ttZW0sIEdGUF9LRVJORUwpOwogCQlpZiAobmV3X2YgPT0gTlVMTCkKQEAgLTUxMiw3ICs1MTIsNyBAQAogCWlmIChuZXdfZmEtPmZhX2luZm8gIT0gTlVMTCkgewogCQluZXdfZmEgPSBrbWVtX2NhY2hlX2FsbG9jKGZuX2FsaWFzX2ttZW0sIEdGUF9LRVJORUwpOwogCQlpZiAobmV3X2ZhID09IE5VTEwpCi0JCQlnb3RvIG91dF9mcmVlX25ld19mOworCQkJZ290byBvdXQ7CiAJfQogCW5ld19mYS0+ZmFfaW5mbyA9IGZpOwogCW5ld19mYS0+ZmFfdG9zID0gdG9zOwpAQCAtNTQwLDkgKzU0MCw5IEBACiAJCSAgJmNmZy0+ZmNfbmxpbmZvLCAwKTsKIAlyZXR1cm4gMDsKIAotb3V0X2ZyZWVfbmV3X2Y6Ci0Ja21lbV9jYWNoZV9mcmVlKGZuX2hhc2hfa21lbSwgbmV3X2YpOwogb3V0OgorCWlmIChuZXdfZikKKwkJa21lbV9jYWNoZV9mcmVlKGZuX2hhc2hfa21lbSwgbmV3X2YpOwogCWZpYl9yZWxlYXNlX2luZm8oZmkpOwogCXJldHVybiBlcnI7CiB9CkBAIC04MjEsNyArODIxLDcgQEAKIAlzdHJ1Y3QgZmliX3RhYmxlICptYWluX3RhYmxlOwogCXN0cnVjdCBmbl9oYXNoICp0YWJsZTsKIAotCW1haW5fdGFibGUgPSBmaWJfZ2V0X3RhYmxlKGl0ZXItPnAubmV0LCBSVF9UQUJMRV9NQUlOKTsKKwltYWluX3RhYmxlID0gZmliX2dldF90YWJsZShzZXFfZmlsZV9uZXQoc2VxKSwgUlRfVEFCTEVfTUFJTik7CiAJdGFibGUgPSAoc3RydWN0IGZuX2hhc2ggKiltYWluX3RhYmxlLT50Yl9kYXRhOwogCiAJaXRlci0+YnVja2V0ICAgID0gMDsKQEAgLTk1OSwxMSArOTU5LDEwIEBACiBzdGF0aWMgdm9pZCAqZmliX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyhmaWJfaGFzaF9sb2NrKQogewotCXN0cnVjdCBmaWJfaXRlcl9zdGF0ZSAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKIAl2b2lkICp2ID0gTlVMTDsKIAogCXJlYWRfbG9jaygmZmliX2hhc2hfbG9jayk7Ci0JaWYgKGZpYl9nZXRfdGFibGUoaXRlci0+cC5uZXQsIFJUX1RBQkxFX01BSU4pKQorCWlmIChmaWJfZ2V0X3RhYmxlKHNlcV9maWxlX25ldChzZXEpLCBSVF9UQUJMRV9NQUlOKSkKIAkJdiA9ICpwb3MgPyBmaWJfZ2V0X2lkeChzZXEsICpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKIAlyZXR1cm4gdjsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9ydWxlcy5jIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKaW5kZXggMTkyNzRkMC4uMWZiNTY4NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3J1bGVzLmMKKysrIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQkJICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsCiAJCQkgICAgICAgc3RydWN0IG5sYXR0ciAqKnRiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAlzdHJ1Y3QgZmliNF9ydWxlICpydWxlNCA9IChzdHJ1Y3QgZmliNF9ydWxlICopIHJ1bGU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCBhMTNjODQ3Li4zYjgzYzM0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCkBAIC0xNTIsNiArMTUyLDcgQEAKIAkJbmgtPm5oX2RldiA9IE5VTEw7CiAJfSBlbmRmb3JfbmV4dGhvcHMoZmkpOwogCWZpYl9pbmZvX2NudC0tOworCXJlbGVhc2VfbmV0KGZpLT5maWJfbmV0KTsKIAlrZnJlZShmaSk7CiB9CiAKQEAgLTczMCw3ICs3MzEsNyBAQAogCQlnb3RvIGZhaWx1cmU7CiAJZmliX2luZm9fY250Kys7CiAKLQlmaS0+ZmliX25ldCA9IG5ldDsKKwlmaS0+ZmliX25ldCA9IGhvbGRfbmV0KG5ldCk7CiAJZmktPmZpYl9wcm90b2NvbCA9IGNmZy0+ZmNfcHJvdG9jb2w7CiAJZmktPmZpYl9mbGFncyA9IGNmZy0+ZmNfZmxhZ3M7CiAJZmktPmZpYl9wcmlvcml0eSA9IGNmZy0+ZmNfcHJpb3JpdHk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCAxZmY0NDZkLi5lYTI5NGZmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTEyMiw3ICsxMjIsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIGJpdHM7CQkvKiAybG9nKEtFWUxFTkdUSCkgYml0cyBuZWVkZWQgKi8KIAl1bnNpZ25lZCBpbnQgZnVsbF9jaGlsZHJlbjsJLyogS0VZTEVOR1RIIGJpdHMgbmVlZGVkICovCiAJdW5zaWduZWQgaW50IGVtcHR5X2NoaWxkcmVuOwkvKiBLRVlMRU5HVEggYml0cyBuZWVkZWQgKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXVuaW9uIHsKKwkJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJfTsKIAlzdHJ1Y3Qgbm9kZSAqY2hpbGRbMF07CiB9OwogCkBAIC0xNjAsNyArMTYzLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgbm9kZSAqcmVzaXplKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKnRuKTsKIHN0YXRpYyBzdHJ1Y3QgdG5vZGUgKmluZmxhdGUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pOwogc3RhdGljIHN0cnVjdCB0bm9kZSAqaGFsdmUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pOwotc3RhdGljIHZvaWQgdG5vZGVfZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKTsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmbl9hbGlhc19rbWVtIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRyaWVfbGVhZl9rbWVtIF9fcmVhZF9tb3N0bHk7CkBAIC0xNzcsMTAgKzE3OSwxMyBAQAogCXJldHVybiByY3VfZGVyZWZlcmVuY2UocmV0KTsKIH0KIAorLyogU2FtZSBhcyByY3VfYXNzaWduX3BvaW50ZXIKKyAqIGJ1dCB0aGF0IG1hY3JvKCkgYXNzdW1lcyB0aGF0IHZhbHVlIGlzIGEgcG9pbnRlci4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIG5vZGVfc2V0X3BhcmVudChzdHJ1Y3Qgbm9kZSAqbm9kZSwgc3RydWN0IHRub2RlICpwdHIpCiB7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKG5vZGUtPnBhcmVudCwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXB0ciB8IE5PREVfVFlQRShub2RlKSk7CisJc21wX3dtYigpOworCW5vZGUtPnBhcmVudCA9ICh1bnNpZ25lZCBsb25nKXB0ciB8IE5PREVfVFlQRShub2RlKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgbm9kZSAqdG5vZGVfZ2V0X2NoaWxkKHN0cnVjdCB0bm9kZSAqdG4sIHVuc2lnbmVkIGludCBpKQpAQCAtMzMxLDYgKzMzNiwxMSBAQAogCWttZW1fY2FjaGVfZnJlZSh0cmllX2xlYWZfa21lbSwgbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2xlYWYoc3RydWN0IGxlYWYgKmwpCit7CisJY2FsbF9yY3VfYmgoJmwtPnJjdSwgX19sZWFmX2ZyZWVfcmN1KTsKK30KKwogc3RhdGljIHZvaWQgX19sZWFmX2luZm9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewogCWtmcmVlKGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbGVhZl9pbmZvLCByY3UpKTsKQEAgLTM0MywxNiArMzUzLDE2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdG5vZGUgKnRub2RlX2FsbG9jKHNpemVfdCBzaXplKQogewotCXN0cnVjdCBwYWdlICpwYWdlczsKLQogCWlmIChzaXplIDw9IFBBR0VfU0laRSkKIAkJcmV0dXJuIGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlyZXR1cm4gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCk7Cit9CiAKLQlwYWdlcyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfWkVSTywgZ2V0X29yZGVyKHNpemUpKTsKLQlpZiAoIXBhZ2VzKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZXMpOworc3RhdGljIHZvaWQgX190bm9kZV92ZnJlZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmFyZykKK3sKKwlzdHJ1Y3QgdG5vZGUgKnRuID0gY29udGFpbmVyX29mKGFyZywgc3RydWN0IHRub2RlLCB3b3JrKTsKKwl2ZnJlZSh0bik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fdG5vZGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQpAQCAtMzYzLDE2ICszNzMsMTcgQEAKIAogCWlmIChzaXplIDw9IFBBR0VfU0laRSkKIAkJa2ZyZWUodG4pOwotCWVsc2UKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl0biwgZ2V0X29yZGVyKHNpemUpKTsKKwllbHNlIHsKKwkJSU5JVF9XT1JLKCZ0bi0+d29yaywgX190bm9kZV92ZnJlZSk7CisJCXNjaGVkdWxlX3dvcmsoJnRuLT53b3JrKTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bm9kZV9mcmVlKHN0cnVjdCB0bm9kZSAqdG4pCiB7Ci0JaWYgKElTX0xFQUYodG4pKSB7Ci0JCXN0cnVjdCBsZWFmICpsID0gKHN0cnVjdCBsZWFmICopIHRuOwotCQljYWxsX3JjdV9iaCgmbC0+cmN1LCBfX2xlYWZfZnJlZV9yY3UpOwotCX0gZWxzZQorCWlmIChJU19MRUFGKHRuKSkKKwkJZnJlZV9sZWFmKChzdHJ1Y3QgbGVhZiAqKSB0bik7CisJZWxzZQogCQljYWxsX3JjdSgmdG4tPnJjdSwgX190bm9kZV9mcmVlX3JjdSk7CiB9CiAKQEAgLTEwODMsNyArMTA5NCw3IEBACiAJbGkgPSBsZWFmX2luZm9fbmV3KHBsZW4pOwogCiAJaWYgKCFsaSkgewotCQl0bm9kZV9mcmVlKChzdHJ1Y3QgdG5vZGUgKikgbCk7CisJCWZyZWVfbGVhZihsKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMTE5LDcgKzExMzAsNyBAQAogCiAJCWlmICghdG4pIHsKIAkJCWZyZWVfbGVhZl9pbmZvKGxpKTsKLQkJCXRub2RlX2ZyZWUoKHN0cnVjdCB0bm9kZSAqKSBsKTsKKwkJCWZyZWVfbGVhZihsKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTE1NzUsNyArMTU4Niw3IEBACiAJfSBlbHNlCiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0LT50cmllLCBOVUxMKTsKIAotCXRub2RlX2ZyZWUoKHN0cnVjdCB0bm9kZSAqKSBsKTsKKwlmcmVlX2xlYWYobCk7CiB9CiAKIC8qCkBAIC0xNjYyLDcgKzE2NzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRyaWVfZmx1c2hfbGlzdChzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3N0YXRpYyBpbnQgdHJpZV9mbHVzaF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IGZpYl9hbGlhcyAqZmEsICpmYV9ub2RlOwogCWludCBmb3VuZCA9IDA7CkBAIC0xNjgwLDcgKzE2OTEsNyBAQAogCXJldHVybiBmb3VuZDsKIH0KIAotc3RhdGljIGludCB0cmllX2ZsdXNoX2xlYWYoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBsZWFmICpsKQorc3RhdGljIGludCB0cmllX2ZsdXNoX2xlYWYoc3RydWN0IGxlYWYgKmwpCiB7CiAJaW50IGZvdW5kID0gMDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGloID0gJmwtPmxpc3Q7CkBAIC0xNjg4LDcgKzE2OTksNyBAQAogCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gTlVMTDsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGksIG5vZGUsIHRtcCwgbGloLCBobGlzdCkgewotCQlmb3VuZCArPSB0cmllX2ZsdXNoX2xpc3QodCwgJmxpLT5mYWxoKTsKKwkJZm91bmQgKz0gdHJpZV9mbHVzaF9saXN0KCZsaS0+ZmFsaCk7CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmxpLT5mYWxoKSkgewogCQkJaGxpc3RfZGVsX3JjdSgmbGktPmhsaXN0KTsKQEAgLTE3NzksNyArMTc5MCw3IEBACiAJaW50IGZvdW5kID0gMDsKIAogCWZvciAobCA9IHRyaWVfZmlyc3RsZWFmKHQpOyBsOyBsID0gdHJpZV9uZXh0bGVhZihsKSkgewotCQlmb3VuZCArPSB0cmllX2ZsdXNoX2xlYWYodCwgbCk7CisJCWZvdW5kICs9IHRyaWVfZmx1c2hfbGVhZihsKTsKIAogCQlpZiAobGwgJiYgaGxpc3RfZW1wdHkoJmxsLT5saXN0KSkKIAkJCXRyaWVfbGVhZl9yZW1vdmUodCwgbGwpOwpAQCAtMjAyNiw5ICsyMDM3LDggQEAKIC8qIERlcHRoIGZpcnN0IFRyaWUgd2FsayBpdGVyYXRvciAqLwogc3RydWN0IGZpYl90cmllX2l0ZXIgewogCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKLQlzdHJ1Y3QgdHJpZSAqdHJpZV9sb2NhbCwgKnRyaWVfbWFpbjsKKwlzdHJ1Y3QgZmliX3RhYmxlICp0YjsKIAlzdHJ1Y3QgdG5vZGUgKnRub2RlOwotCXN0cnVjdCB0cmllICp0cmllOwogCXVuc2lnbmVkIGluZGV4OwogCXVuc2lnbmVkIGRlcHRoOwogfTsKQEAgLTIwODEsMzEgKzIwOTEsMjYgQEAKIHN0YXRpYyBzdHJ1Y3Qgbm9kZSAqZmliX3RyaWVfZ2V0X2ZpcnN0KHN0cnVjdCBmaWJfdHJpZV9pdGVyICppdGVyLAogCQkJCSAgICAgICBzdHJ1Y3QgdHJpZSAqdCkKIHsKLQlzdHJ1Y3Qgbm9kZSAqbiA7CisJc3RydWN0IG5vZGUgKm47CiAKIAlpZiAoIXQpCiAJCXJldHVybiBOVUxMOwogCiAJbiA9IHJjdV9kZXJlZmVyZW5jZSh0LT50cmllKTsKLQotCWlmICghaXRlcikKKwlpZiAoIW4pCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKG4pIHsKLQkJaWYgKElTX1ROT0RFKG4pKSB7Ci0JCQlpdGVyLT50bm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKLQkJCWl0ZXItPnRyaWUgPSB0OwotCQkJaXRlci0+aW5kZXggPSAwOwotCQkJaXRlci0+ZGVwdGggPSAxOwotCQl9IGVsc2UgewotCQkJaXRlci0+dG5vZGUgPSBOVUxMOwotCQkJaXRlci0+dHJpZSAgPSB0OwotCQkJaXRlci0+aW5kZXggPSAwOwotCQkJaXRlci0+ZGVwdGggPSAwOwotCQl9Ci0JCXJldHVybiBuOworCWlmIChJU19UTk9ERShuKSkgeworCQlpdGVyLT50bm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKKwkJaXRlci0+aW5kZXggPSAwOworCQlpdGVyLT5kZXB0aCA9IDE7CisJfSBlbHNlIHsKKwkJaXRlci0+dG5vZGUgPSBOVUxMOworCQlpdGVyLT5pbmRleCA9IDA7CisJCWl0ZXItPmRlcHRoID0gMDsKIAl9Ci0JcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbjsKIH0KIAogc3RhdGljIHZvaWQgdHJpZV9jb2xsZWN0X3N0YXRzKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdHJpZV9zdGF0ICpzKQpAQCAtMjExNiw4ICsyMTIxLDcgQEAKIAltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yIChuID0gZmliX3RyaWVfZ2V0X2ZpcnN0KCZpdGVyLCB0KTsgbjsKLQkgICAgIG4gPSBmaWJfdHJpZV9nZXRfbmV4dCgmaXRlcikpIHsKKwlmb3IgKG4gPSBmaWJfdHJpZV9nZXRfZmlyc3QoJml0ZXIsIHQpOyBuOyBuID0gZmliX3RyaWVfZ2V0X25leHQoJml0ZXIpKSB7CiAJCWlmIChJU19MRUFGKG4pKSB7CiAJCQlzdHJ1Y3QgbGVhZiAqbCA9IChzdHJ1Y3QgbGVhZiAqKW47CiAJCQlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKQEAgLTIyMDYsMzYgKzIyMTAsNDggQEAKIH0KICNlbmRpZiAvKiAgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTICovCiAKLXN0YXRpYyB2b2lkIGZpYl90cmllX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgIHN0cnVjdCB0cmllICp0cmllKQorc3RhdGljIHZvaWQgZmliX3RhYmxlX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZmliX3RhYmxlICp0YikKIHsKLQlzdHJ1Y3QgdHJpZV9zdGF0IHN0YXQ7Ci0KLQl0cmllX2NvbGxlY3Rfc3RhdHModHJpZSwgJnN0YXQpOwotCXNlcV9wcmludGYoc2VxLCAiJXM6XG4iLCBuYW1lKTsKLQl0cmllX3Nob3dfc3RhdHMoc2VxLCAmc3RhdCk7Ci0jaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCi0JdHJpZV9zaG93X3VzYWdlKHNlcSwgJnRyaWUtPnN0YXRzKTsKLSNlbmRpZgorCWlmICh0Yi0+dGJfaWQgPT0gUlRfVEFCTEVfTE9DQUwpCisJCXNlcV9wdXRzKHNlcSwgIkxvY2FsOlxuIik7CisJZWxzZSBpZiAodGItPnRiX2lkID09IFJUX1RBQkxFX01BSU4pCisJCXNlcV9wdXRzKHNlcSwgIk1haW46XG4iKTsKKwllbHNlCisJCXNlcV9wcmludGYoc2VxLCAiSWQgJWQ6XG4iLCB0Yi0+dGJfaWQpOwogfQogCisKIHN0YXRpYyBpbnQgZmliX3RyaWVzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IChzdHJ1Y3QgbmV0ICopc2VxLT5wcml2YXRlOwotCXN0cnVjdCBmaWJfdGFibGUgKnRiOworCXVuc2lnbmVkIGludCBoOwogCiAJc2VxX3ByaW50ZihzZXEsCiAJCSAgICJCYXNpYyBpbmZvOiBzaXplIG9mIGxlYWY6IgogCQkgICAiICVaZCBieXRlcywgc2l6ZSBvZiB0bm9kZTogJVpkIGJ5dGVzLlxuIiwKIAkJICAgc2l6ZW9mKHN0cnVjdCBsZWFmKSwgc2l6ZW9mKHN0cnVjdCB0bm9kZSkpOwogCi0JdGIgPSBmaWJfZ2V0X3RhYmxlKG5ldCwgUlRfVEFCTEVfTE9DQUwpOwotCWlmICh0YikKLQkJZmliX3RyaWVfc2hvdyhzZXEsICJMb2NhbCIsIChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YSk7CisJZm9yIChoID0gMDsgaCA8IEZJQl9UQUJMRV9IQVNIU1o7IGgrKykgeworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZuZXQtPmlwdjQuZmliX3RhYmxlX2hhc2hbaF07CisJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCQlzdHJ1Y3QgZmliX3RhYmxlICp0YjsKIAotCXRiID0gZmliX2dldF90YWJsZShuZXQsIFJUX1RBQkxFX01BSU4pOwotCWlmICh0YikKLQkJZmliX3RyaWVfc2hvdyhzZXEsICJNYWluIiwgKHN0cnVjdCB0cmllICopIHRiLT50Yl9kYXRhKTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRiLCBub2RlLCBoZWFkLCB0Yl9obGlzdCkgeworCQkJc3RydWN0IHRyaWUgKnQgPSAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGE7CisJCQlzdHJ1Y3QgdHJpZV9zdGF0IHN0YXQ7CisKKwkJCWlmICghdCkKKwkJCQljb250aW51ZTsKKworCQkJZmliX3RhYmxlX3ByaW50KHNlcSwgdGIpOworCisJCQl0cmllX2NvbGxlY3Rfc3RhdHModCwgJnN0YXQpOworCQkJdHJpZV9zaG93X3N0YXRzKHNlcSwgJnN0YXQpOworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCQkJdHJpZV9zaG93X3VzYWdlKHNlcSwgJnQtPnN0YXRzKTsKKyNlbmRpZgorCQl9CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjcxLDY3ICsyMjg3LDc5IEBACiAJLnJlbGVhc2UgPSBmaWJfdHJpZXN0YXRfc2VxX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5vZGUgKmZpYl90cmllX2dldF9pZHgoc3RydWN0IGZpYl90cmllX2l0ZXIgKml0ZXIsCi0JCQkJICAgICAgbG9mZl90IHBvcykKK3N0YXRpYyBzdHJ1Y3Qgbm9kZSAqZmliX3RyaWVfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKIHsKKwlzdHJ1Y3QgZmliX3RyaWVfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAlsb2ZmX3QgaWR4ID0gMDsKLQlzdHJ1Y3Qgbm9kZSAqbjsKKwl1bnNpZ25lZCBpbnQgaDsKIAotCWZvciAobiA9IGZpYl90cmllX2dldF9maXJzdChpdGVyLCBpdGVyLT50cmllX2xvY2FsKTsKLQkgICAgIG47ICsraWR4LCBuID0gZmliX3RyaWVfZ2V0X25leHQoaXRlcikpIHsKLQkJaWYgKHBvcyA9PSBpZHgpCi0JCQlyZXR1cm4gbjsKKwlmb3IgKGggPSAwOyBoIDwgRklCX1RBQkxFX0hBU0hTWjsgaCsrKSB7CisJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJm5ldC0+aXB2NC5maWJfdGFibGVfaGFzaFtoXTsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJCXN0cnVjdCBmaWJfdGFibGUgKnRiOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0Yiwgbm9kZSwgaGVhZCwgdGJfaGxpc3QpIHsKKwkJCXN0cnVjdCBub2RlICpuOworCisJCQlmb3IgKG4gPSBmaWJfdHJpZV9nZXRfZmlyc3QoaXRlciwKKwkJCQkJCSAgICAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGEpOworCQkJICAgICBuOyBuID0gZmliX3RyaWVfZ2V0X25leHQoaXRlcikpCisJCQkJaWYgKHBvcyA9PSBpZHgrKykgeworCQkJCQlpdGVyLT50YiA9IHRiOworCQkJCQlyZXR1cm4gbjsKKwkJCQl9CisJCX0KIAl9CiAKLQlmb3IgKG4gPSBmaWJfdHJpZV9nZXRfZmlyc3QoaXRlciwgaXRlci0+dHJpZV9tYWluKTsKLQkgICAgIG47ICsraWR4LCBuID0gZmliX3RyaWVfZ2V0X25leHQoaXRlcikpIHsKLQkJaWYgKHBvcyA9PSBpZHgpCi0JCQlyZXR1cm4gbjsKLQl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICpmaWJfdHJpZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoUkNVKQogewotCXN0cnVjdCBmaWJfdHJpZV9pdGVyICppdGVyID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBmaWJfdGFibGUgKnRiOwotCi0JaWYgKCFpdGVyLT50cmllX2xvY2FsKSB7Ci0JCXRiID0gZmliX2dldF90YWJsZShpdGVyLT5wLm5ldCwgUlRfVEFCTEVfTE9DQUwpOwotCQlpZiAodGIpCi0JCQlpdGVyLT50cmllX2xvY2FsID0gKHN0cnVjdCB0cmllICopIHRiLT50Yl9kYXRhOwotCX0KLQlpZiAoIWl0ZXItPnRyaWVfbWFpbikgewotCQl0YiA9IGZpYl9nZXRfdGFibGUoaXRlci0+cC5uZXQsIFJUX1RBQkxFX01BSU4pOwotCQlpZiAodGIpCi0JCQlpdGVyLT50cmllX21haW4gPSAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGE7Ci0JfQogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoKnBvcyA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCXJldHVybiBmaWJfdHJpZV9nZXRfaWR4KGl0ZXIsICpwb3MgLSAxKTsKKwlyZXR1cm4gZmliX3RyaWVfZ2V0X2lkeChzZXEsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqZmliX3RyaWVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBmaWJfdHJpZV9pdGVyICppdGVyID0gc2VxLT5wcml2YXRlOwotCXZvaWQgKmwgPSB2OworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCXN0cnVjdCBmaWJfdGFibGUgKnRiID0gaXRlci0+dGI7CisJc3RydWN0IGhsaXN0X25vZGUgKnRiX25vZGU7CisJdW5zaWduZWQgaW50IGg7CisJc3RydWN0IG5vZGUgKm47CiAKIAkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gZmliX3RyaWVfZ2V0X2lkeChpdGVyLCAwKTsKKwkvKiBuZXh0IG5vZGUgaW4gc2FtZSB0YWJsZSAqLworCW4gPSBmaWJfdHJpZV9nZXRfbmV4dChpdGVyKTsKKwlpZiAobikKKwkJcmV0dXJuIG47CiAKLQl2ID0gZmliX3RyaWVfZ2V0X25leHQoaXRlcik7Ci0JQlVHX09OKHYgPT0gbCk7Ci0JaWYgKHYpCi0JCXJldHVybiB2OworCS8qIHdhbGsgcmVzdCBvZiB0aGlzIGhhc2ggY2hhaW4gKi8KKwloID0gdGItPnRiX2lkICYgKEZJQl9UQUJMRV9IQVNIU1ogLSAxKTsKKwl3aGlsZSAoICh0Yl9ub2RlID0gcmN1X2RlcmVmZXJlbmNlKHRiLT50Yl9obGlzdC5uZXh0KSkgKSB7CisJCXRiID0gaGxpc3RfZW50cnkodGJfbm9kZSwgc3RydWN0IGZpYl90YWJsZSwgdGJfaGxpc3QpOworCQluID0gZmliX3RyaWVfZ2V0X2ZpcnN0KGl0ZXIsIChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YSk7CisJCWlmIChuKQorCQkJZ290byBmb3VuZDsKKwl9CiAKLQkvKiBjb250aW51ZSBzY2FuIGluIG5leHQgdHJpZSAqLwotCWlmIChpdGVyLT50cmllID09IGl0ZXItPnRyaWVfbG9jYWwpCi0JCXJldHVybiBmaWJfdHJpZV9nZXRfZmlyc3QoaXRlciwgaXRlci0+dHJpZV9tYWluKTsKLQorCS8qIG5ldyBoYXNoIGNoYWluICovCisJd2hpbGUgKCsraCA8IEZJQl9UQUJMRV9IQVNIU1opIHsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmbmV0LT5pcHY0LmZpYl90YWJsZV9oYXNoW2hdOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGIsIHRiX25vZGUsIGhlYWQsIHRiX2hsaXN0KSB7CisJCQluID0gZmliX3RyaWVfZ2V0X2ZpcnN0KGl0ZXIsIChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YSk7CisJCQlpZiAobikKKwkJCQlnb3RvIGZvdW5kOworCQl9CisJfQogCXJldHVybiBOVUxMOworCitmb3VuZDoKKwlpdGVyLT50YiA9IHRiOworCXJldHVybiBuOwogfQogCiBzdGF0aWMgdm9pZCBmaWJfdHJpZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTIzODgsMjIgKzI0MTYsMTUgQEAKIAljb25zdCBzdHJ1Y3QgZmliX3RyaWVfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgbm9kZSAqbiA9IHY7CiAKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXJldHVybiAwOwotCi0JaWYgKCFub2RlX3BhcmVudF9yY3UobikpIHsKLQkJaWYgKGl0ZXItPnRyaWUgPT0gaXRlci0+dHJpZV9sb2NhbCkKLQkJCXNlcV9wdXRzKHNlcSwgIjxsb2NhbD46XG4iKTsKLQkJZWxzZQotCQkJc2VxX3B1dHMoc2VxLCAiPG1haW4+OlxuIik7Ci0JfQorCWlmICghbm9kZV9wYXJlbnRfcmN1KG4pKQorCQlmaWJfdGFibGVfcHJpbnQoc2VxLCBpdGVyLT50Yik7CiAKIAlpZiAoSVNfVE5PREUobikpIHsKIAkJc3RydWN0IHRub2RlICp0biA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKIAkJX19iZTMyIHByZiA9IGh0b25sKG1hc2tfcGZ4KHRuLT5rZXksIHRuLT5wb3MpKTsKIAogCQlzZXFfaW5kZW50KHNlcSwgaXRlci0+ZGVwdGgtMSk7Ci0JCXNlcV9wcmludGYoc2VxLCAiICArLS0gJWQuJWQuJWQuJWQvJWQgJWQgJWQgJWRcbiIsCisJCXNlcV9wcmludGYoc2VxLCAiICArLS0gIiBOSVBRVUFEX0ZNVCAiLyVkICVkICVkICVkXG4iLAogCQkJICAgTklQUVVBRChwcmYpLCB0bi0+cG9zLCB0bi0+Yml0cywgdG4tPmZ1bGxfY2hpbGRyZW4sCiAJCQkgICB0bi0+ZW1wdHlfY2hpbGRyZW4pOwogCkBAIC0yNDE0LDcgKzI0MzUsNyBAQAogCQlfX2JlMzIgdmFsID0gaHRvbmwobC0+a2V5KTsKIAogCQlzZXFfaW5kZW50KHNlcSwgaXRlci0+ZGVwdGgpOwotCQlzZXFfcHJpbnRmKHNlcSwgIiAgfC0tICVkLiVkLiVkLiVkXG4iLCBOSVBRVUFEKHZhbCkpOworCQlzZXFfcHJpbnRmKHNlcSwgIiAgfC0tICIgTklQUVVBRF9GTVQgIlxuIiwgTklQUVVBRCh2YWwpKTsKIAogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGksIG5vZGUsICZsLT5saXN0LCBobGlzdCkgewogCQkJc3RydWN0IGZpYl9hbGlhcyAqZmE7CkBAIC0yNDk5LDcgKzI1MjAsNyBAQAogCXN0cnVjdCBmaWJfdGFibGUgKnRiOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXRiID0gZmliX2dldF90YWJsZShpdGVyLT5wLm5ldCwgUlRfVEFCTEVfTUFJTik7CisJdGIgPSBmaWJfZ2V0X3RhYmxlKHNlcV9maWxlX25ldChzZXEpLCBSVF9UQUJMRV9NQUlOKTsKIAlpZiAoIXRiKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IGExM2MwNzQuLmYwNjQwMzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTkzLDYgKzkzLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CisjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CiAKIC8qCiAgKglCdWlsZCB4bWl0IGFzc2VtYmx5IGJsb2NrcwpAQCAtMTg4LDI5ICsxODksNiBAQAogCX0sCiB9OwogCi0vKiBDb250cm9sIHBhcmFtZXRlcnMgZm9yIEVDSE8gcmVwbGllcy4gKi8KLWludCBzeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9hbGwgX19yZWFkX21vc3RseTsKLWludCBzeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzIF9fcmVhZF9tb3N0bHkgPSAxOwotCi0vKiBDb250cm9sIHBhcmFtZXRlciAtIGlnbm9yZSBib2d1cyBicm9hZGNhc3QgcmVzcG9uc2VzPyAqLwotaW50IHN5c2N0bF9pY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXMgX19yZWFkX21vc3RseSA9IDE7Ci0KLS8qCi0gKiAJQ29uZmlndXJhYmxlIGdsb2JhbCByYXRlIGxpbWl0LgotICoKLSAqCXJhdGVsaW1pdCBkZWZpbmVzIHRva2Vucy9wYWNrZXQgY29uc3VtZWQgZm9yIGRzdC0+cmF0ZV90b2tlbiBidWNrZXQKLSAqCXJhdGVtYXNrIGRlZmluZXMgd2hpY2ggaWNtcCB0eXBlcyBhcmUgcmF0ZWxpbWl0ZWQgYnkgc2V0dGluZwotICogCWl0J3MgYml0IHBvc2l0aW9uLgotICoKLSAqCWRlZmF1bHQ6Ci0gKglkZXN0IHVucmVhY2hhYmxlICgzKSwgc291cmNlIHF1ZW5jaCAoNCksCi0gKgl0aW1lIGV4Y2VlZGVkICgxMSksIHBhcmFtZXRlciBwcm9ibGVtICgxMikKLSAqLwotCi1pbnQgc3lzY3RsX2ljbXBfcmF0ZWxpbWl0IF9fcmVhZF9tb3N0bHkgPSAxICogSFo7Ci1pbnQgc3lzY3RsX2ljbXBfcmF0ZW1hc2sgX19yZWFkX21vc3RseSA9IDB4MTgxODsKLWludCBzeXNjdGxfaWNtcF9lcnJvcnNfdXNlX2luYm91bmRfaWZhZGRyIF9fcmVhZF9tb3N0bHk7Ci0KIC8qCiAgKglJQ01QIGNvbnRyb2wgYXJyYXkuIFRoaXMgc3BlY2lmaWVzIHdoYXQgdG8gZG8gd2l0aCBlYWNoIElDTVAuCiAgKi8KQEAgLTIyOSwxNCArMjA3LDE2IEBACiAgKgogICoJT24gU01QIHdlIGhhdmUgb25lIElDTVAgc29ja2V0IHBlci1jcHUuCiAgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29ja2V0ICosIF9faWNtcF9zb2NrZXQpID0gTlVMTDsKLSNkZWZpbmUgaWNtcF9zb2NrZXQJX19nZXRfY3B1X3ZhcihfX2ljbXBfc29ja2V0KQorc3RhdGljIHN0cnVjdCBzb2NrICppY21wX3NrKHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlyZXR1cm4gbmV0LT5pcHY0LmljbXBfc2tbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKK30KIAotc3RhdGljIGlubGluZSBpbnQgaWNtcF94bWl0X2xvY2sodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IGljbXBfeG1pdF9sb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAKLQlpZiAodW5saWtlbHkoIXNwaW5fdHJ5bG9jaygmaWNtcF9zb2NrZXQtPnNrLT5za19sb2NrLnNsb2NrKSkpIHsKKwlpZiAodW5saWtlbHkoIXNwaW5fdHJ5bG9jaygmc2stPnNrX2xvY2suc2xvY2spKSkgewogCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIG91dHB1dCBwYXRoIHNpZ25hbHMgYQogCQkgKiBkc3RfbGlua19mYWlsdXJlKCkgZm9yIGFuIG91dGdvaW5nIElDTVAgcGFja2V0LgogCQkgKi8KQEAgLTI0Niw5ICsyMjYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWNtcF94bWl0X3VubG9jayh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGljbXBfeG1pdF91bmxvY2soc3RydWN0IHNvY2sgKnNrKQogewotCXNwaW5fdW5sb2NrX2JoKCZpY21wX3NvY2tldC0+c2stPnNrX2xvY2suc2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZzay0+c2tfbG9jay5zbG9jayk7CiB9CiAKIC8qCkBAIC0yOTEsNyArMjcxLDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgcnRhYmxlICpydCwgaW50IHR5cGUsIGludCBjb2RlKQorc3RhdGljIGlubGluZSBpbnQgaWNtcHY0X3hybGltX2FsbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0YWJsZSAqcnQsCisJCWludCB0eXBlLCBpbnQgY29kZSkKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSAmcnQtPnUuZHN0OwogCWludCByYyA9IDE7CkBAIC0zMDgsOCArMjg5LDggQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBMaW1pdCBpZiBpY21wIHR5cGUgaXMgZW5hYmxlZCBpbiByYXRlbWFzay4gKi8KLQlpZiAoKDEgPDwgdHlwZSkgJiBzeXNjdGxfaWNtcF9yYXRlbWFzaykKLQkJcmMgPSB4cmxpbV9hbGxvdyhkc3QsIHN5c2N0bF9pY21wX3JhdGVsaW1pdCk7CisJaWYgKCgxIDw8IHR5cGUpICYgbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVtYXNrKQorCQlyYyA9IHhybGltX2FsbG93KGRzdCwgbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVsaW1pdCk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMzQ2LDE5ICszMjcsMjEgQEAKIHN0YXRpYyB2b2lkIGljbXBfcHVzaF9yZXBseShzdHJ1Y3QgaWNtcF9ieG0gKmljbXBfcGFyYW0sCiAJCQkgICAgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKnJ0KQogeworCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JaWYgKGlwX2FwcGVuZF9kYXRhKGljbXBfc29ja2V0LT5zaywgaWNtcF9nbHVlX2JpdHMsIGljbXBfcGFyYW0sCisJc2sgPSBpY21wX3NrKGRldl9uZXQocnQtPnUuZHN0LmRldikpOworCWlmIChpcF9hcHBlbmRfZGF0YShzaywgaWNtcF9nbHVlX2JpdHMsIGljbXBfcGFyYW0sCiAJCQkgICBpY21wX3BhcmFtLT5kYXRhX2xlbitpY21wX3BhcmFtLT5oZWFkX2xlbiwKIAkJCSAgIGljbXBfcGFyYW0tPmhlYWRfbGVuLAogCQkJICAgaXBjLCBydCwgTVNHX0RPTlRXQUlUKSA8IDApCi0JCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKGljbXBfc29ja2V0LT5zayk7Ci0JZWxzZSBpZiAoKHNrYiA9IHNrYl9wZWVrKCZpY21wX3NvY2tldC0+c2stPnNrX3dyaXRlX3F1ZXVlKSkgIT0gTlVMTCkgeworCQlpcF9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CisJZWxzZSBpZiAoKHNrYiA9IHNrYl9wZWVrKCZzay0+c2tfd3JpdGVfcXVldWUpKSAhPSBOVUxMKSB7CiAJCXN0cnVjdCBpY21waGRyICppY21waCA9IGljbXBfaGRyKHNrYik7CiAJCV9fd3N1bSBjc3VtID0gMDsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CiAKLQkJc2tiX3F1ZXVlX3dhbGsoJmljbXBfc29ja2V0LT5zay0+c2tfd3JpdGVfcXVldWUsIHNrYjEpIHsKKwkJc2tiX3F1ZXVlX3dhbGsoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiMSkgewogCQkJY3N1bSA9IGNzdW1fYWRkKGNzdW0sIHNrYjEtPmNzdW0pOwogCQl9CiAJCWNzdW0gPSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKCh2b2lkICopJmljbXBfcGFyYW0tPmRhdGEsCkBAIC0zNjYsNyArMzQ5LDcgQEAKIAkJCQkJCSBpY21wX3BhcmFtLT5oZWFkX2xlbiwgY3N1bSk7CiAJCWljbXBoLT5jaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQlpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKGljbXBfc29ja2V0LT5zayk7CisJCWlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogCX0KIH0KIApAQCAtMzc2LDE2ICszNTksMTcgQEAKIAogc3RhdGljIHZvaWQgaWNtcF9yZXBseShzdHJ1Y3QgaWNtcF9ieG0gKmljbXBfcGFyYW0sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gaWNtcF9zb2NrZXQtPnNrOwotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgaXBjbV9jb29raWUgaXBjOwotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQocnQtPnUuZHN0LmRldik7CisJc3RydWN0IHNvY2sgKnNrID0gaWNtcF9zayhuZXQpOworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlfX2JlMzIgZGFkZHI7CiAKIAlpZiAoaXBfb3B0aW9uc19lY2hvKCZpY21wX3BhcmFtLT5yZXBseW9wdHMsIHNrYikpCiAJCXJldHVybjsKIAotCWlmIChpY21wX3htaXRfbG9jaygpKQorCWlmIChpY21wX3htaXRfbG9jayhzaykpCiAJCXJldHVybjsKIAogCWljbXBfcGFyYW0tPmRhdGEuaWNtcGguY2hlY2tzdW0gPSAwOwpAQCAtNDA1LDE1ICszODksMTUgQEAKIAkJCQkJCS50b3MgPSBSVF9UT1MoaXBfaGRyKHNrYiktPnRvcykgfSB9LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lDTVAgfTsKIAkJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCAmZmwpOwotCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShydC0+dS5kc3QuZGV2LT5uZF9uZXQsICZydCwgJmZsKSkKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCWlmIChpY21wdjRfeHJsaW1fYWxsb3cocnQsIGljbXBfcGFyYW0tPmRhdGEuaWNtcGgudHlwZSwKKwlpZiAoaWNtcHY0X3hybGltX2FsbG93KG5ldCwgcnQsIGljbXBfcGFyYW0tPmRhdGEuaWNtcGgudHlwZSwKIAkJCSAgICAgICBpY21wX3BhcmFtLT5kYXRhLmljbXBoLmNvZGUpKQogCQlpY21wX3B1c2hfcmVwbHkoaWNtcF9wYXJhbSwgJmlwYywgcnQpOwogCWlwX3J0X3B1dChydCk7CiBvdXRfdW5sb2NrOgotCWljbXBfeG1pdF91bmxvY2soKTsKKwlpY21wX3htaXRfdW5sb2NrKHNrKTsKIH0KIAogCkBAIC00MzMsMTUgKzQxNywxNyBAQAogCXN0cnVjdCBpcGhkciAqaXBoOwogCWludCByb29tOwogCXN0cnVjdCBpY21wX2J4bSBpY21wX3BhcmFtOwotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilza2JfaW4tPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9pbi0+cnRhYmxlOwogCXN0cnVjdCBpcGNtX2Nvb2tpZSBpcGM7CiAJX19iZTMyIHNhZGRyOwogCXU4ICB0b3M7CiAJc3RydWN0IG5ldCAqbmV0OworCXN0cnVjdCBzb2NrICpzazsKIAogCWlmICghcnQpCiAJCWdvdG8gb3V0OwotCW5ldCA9IHJ0LT51LmRzdC5kZXYtPm5kX25ldDsKKwluZXQgPSBkZXZfbmV0KHJ0LT51LmRzdC5kZXYpOworCXNrID0gaWNtcF9zayhuZXQpOwogCiAJLyoKIAkgKglGaW5kIHRoZSBvcmlnaW5hbCBoZWFkZXIuIEl0IGlzIGV4cGVjdGVkIHRvIGJlIHZhbGlkLCBvZiBjb3Vyc2UuCkBAIC01MDUsNyArNDkxLDcgQEAKIAkJfQogCX0KIAotCWlmIChpY21wX3htaXRfbG9jaygpKQorCWlmIChpY21wX3htaXRfbG9jayhzaykpCiAJCXJldHVybjsKIAogCS8qCkBAIC01MTYsNyArNTAyLDggQEAKIAlpZiAoIShydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAotCQlpZiAocnQtPmZsLmlpZiAmJiBzeXNjdGxfaWNtcF9lcnJvcnNfdXNlX2luYm91bmRfaWZhZGRyKQorCQlpZiAocnQtPmZsLmlpZiAmJgorCQkJbmV0LT5pcHY0LnN5c2N0bF9pY21wX2Vycm9yc191c2VfaW5ib3VuZF9pZmFkZHIpCiAJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgcnQtPmZsLmlpZik7CiAKIAkJaWYgKGRldikgewpAQCAtNTQ0LDcgKzUzMSw3IEBACiAJaWNtcF9wYXJhbS5kYXRhLmljbXBoLmNoZWNrc3VtCSA9IDA7CiAJaWNtcF9wYXJhbS5za2IJICA9IHNrYl9pbjsKIAlpY21wX3BhcmFtLm9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2JfaW4pOwotCWluZXRfc2soaWNtcF9zb2NrZXQtPnNrKS0+dG9zID0gdG9zOworCWluZXRfc2soc2spLT50b3MgPSB0b3M7CiAJaXBjLmFkZHIgPSBpcGgtPnNhZGRyOwogCWlwYy5vcHQgPSAmaWNtcF9wYXJhbS5yZXBseW9wdHM7CiAKQEAgLTU5MSw3ICs1NzgsNyBAQAogCQl9CiAKIAkJaWYgKHhmcm1fZGVjb2RlX3Nlc3Npb25fcmV2ZXJzZShza2JfaW4sICZmbCwgQUZfSU5FVCkpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIHJlbG9va3VwX2ZhaWxlZDsKIAogCQlpZiAoaW5ldF9hZGRyX3R5cGUobmV0LCBmbC5mbDRfc3JjKSA9PSBSVE5fTE9DQUwpCiAJCQllcnIgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQyLCAmZmwpOwpAQCAtNjAxLDcgKzU4OCw3IEBACiAKIAkJCWZsMi5mbDRfZHN0ID0gZmwuZmw0X3NyYzsKIAkJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0MiwgJmZsMikpCi0JCQkJZ290byBvdXRfdW5sb2NrOworCQkJCWdvdG8gcmVsb29rdXBfZmFpbGVkOwogCiAJCQkvKiBVZ2ghICovCiAJCQlvZHN0ID0gc2tiX2luLT5kc3Q7CkBAIC02MDksMzAgKzU5NiwzMiBAQAogCQkJCQkgICAgIFJUX1RPUyh0b3MpLCBydDItPnUuZHN0LmRldik7CiAKIAkJCWRzdF9yZWxlYXNlKCZydDItPnUuZHN0KTsKLQkJCXJ0MiA9IChzdHJ1Y3QgcnRhYmxlICopc2tiX2luLT5kc3Q7CisJCQlydDIgPSBza2JfaW4tPnJ0YWJsZTsKIAkJCXNrYl9pbi0+ZHN0ID0gb2RzdDsKIAkJfQogCiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIHJlbG9va3VwX2ZhaWxlZDsKIAogCQllcnIgPSB4ZnJtX2xvb2t1cCgoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQyLCAmZmwsIE5VTEwsCiAJCQkJICBYRlJNX0xPT0tVUF9JQ01QKTsKLQkJaWYgKGVyciA9PSAtRU5PRU5UKSB7CisJCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgMDoKKwkJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCQkJcnQgPSBydDI7CisJCQlicmVhazsKKwkJY2FzZSAtRVBFUk06CisJCQlnb3RvIGVuZGU7CisJCWRlZmF1bHQ6CityZWxvb2t1cF9mYWlsZWQ6CiAJCQlpZiAoIXJ0KQogCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCWdvdG8gcm91dGVfZG9uZTsKKwkJCWJyZWFrOwogCQl9Ci0KLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Ci0JCXJ0ID0gcnQyOwotCi0JCWlmIChlcnIpCi0JCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiByb3V0ZV9kb25lOgotCWlmICghaWNtcHY0X3hybGltX2FsbG93KHJ0LCB0eXBlLCBjb2RlKSkKKwlpZiAoIWljbXB2NF94cmxpbV9hbGxvdyhuZXQsIHJ0LCB0eXBlLCBjb2RlKSkKIAkJZ290byBlbmRlOwogCiAJLyogUkZDIHNheXMgcmV0dXJuIGFzIG11Y2ggYXMgd2UgY2FuIHdpdGhvdXQgZXhjZWVkaW5nIDU3NiBieXRlcy4gKi8KQEAgLTY1Miw3ICs2NDEsNyBAQAogZW5kZToKIAlpcF9ydF9wdXQocnQpOwogb3V0X3VubG9jazoKLQlpY21wX3htaXRfdW5sb2NrKCk7CisJaWNtcF94bWl0X3VubG9jayhzayk7CiBvdXQ6OwogfQogCkBAIC02NzAsNyArNjU5LDcgQEAKIAl1MzIgaW5mbyA9IDA7CiAJc3RydWN0IG5ldCAqbmV0OwogCi0JbmV0ID0gc2tiLT5kc3QtPmRldi0+bmRfbmV0OworCW5ldCA9IGRldl9uZXQoc2tiLT5kc3QtPmRldik7CiAKIAkvKgogCSAqCUluY29tcGxldGUgaGVhZGVyID8KQEAgLTY5Niw3ICs2ODUsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSUNNUF9GUkFHX05FRURFRDoKIAkJCWlmIChpcHY0X2NvbmZpZy5ub19wbXR1X2Rpc2MpIHsKLQkJCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIklDTVA6ICV1LiV1LiV1LiV1OiAiCisJCQkJTElNSVRfTkVUREVCVUcoS0VSTl9JTkZPICJJQ01QOiAiIE5JUFFVQURfRk1UICI6ICIKIAkJCQkJCQkgImZyYWdtZW50YXRpb24gbmVlZGVkICIKIAkJCQkJCQkgImFuZCBERiBzZXQuXG4iLAogCQkJCQkgICAgICAgTklQUVVBRChpcGgtPmRhZGRyKSk7CkBAIC03MDgsNyArNjk3LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIElDTVBfU1JfRkFJTEVEOgotCQkJTElNSVRfTkVUREVCVUcoS0VSTl9JTkZPICJJQ01QOiAldS4ldS4ldS4ldTogU291cmNlICIKKwkJCUxJTUlUX05FVERFQlVHKEtFUk5fSU5GTyAiSUNNUDogIiBOSVBRVUFEX0ZNVCAiOiBTb3VyY2UgIgogCQkJCQkJICJSb3V0ZSBGYWlsZWQuXG4iLAogCQkJCSAgICAgICBOSVBRVUFEKGlwaC0+ZGFkZHIpKTsKIAkJCWJyZWFrOwpAQCAtNzM4LDEyICs3MjcsMTIgQEAKIAkgKglnZXQgdGhlIG90aGVyIHZlbmRvciB0byBmaXggdGhlaXIga2l0LgogCSAqLwogCi0JaWYgKCFzeXNjdGxfaWNtcF9pZ25vcmVfYm9ndXNfZXJyb3JfcmVzcG9uc2VzICYmCisJaWYgKCFuZXQtPmlwdjQuc3lzY3RsX2ljbXBfaWdub3JlX2JvZ3VzX2Vycm9yX3Jlc3BvbnNlcyAmJgogCSAgICBpbmV0X2FkZHJfdHlwZShuZXQsIGlwaC0+ZGFkZHIpID09IFJUTl9CUk9BRENBU1QpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiV1LiV1LiV1LiV1IHNlbnQgYW4gaW52YWxpZCBJQ01QICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgTklQUVVBRF9GTVQgIiBzZW50IGFuIGludmFsaWQgSUNNUCAiCiAJCQkJCSAgICAidHlwZSAldSwgY29kZSAldSAiCi0JCQkJCSAgICAiZXJyb3IgdG8gYSBicm9hZGNhc3Q6ICV1LiV1LiV1LiV1IG9uICVzXG4iLAorCQkJCQkgICAgImVycm9yIHRvIGEgYnJvYWRjYXN0OiAiIE5JUFFVQURfRk1UICIgb24gJXNcbiIsCiAJCQkgICAgICAgTklQUVVBRChpcF9oZHIoc2tiKS0+c2FkZHIpLAogCQkJICAgICAgIGljbXBoLT50eXBlLCBpY21waC0+Y29kZSwKIAkJCSAgICAgICBOSVBRVUFEKGlwaC0+ZGFkZHIpLApAQCAtODMzLDcgKzgyMiwxMCBAQAogCiBzdGF0aWMgdm9pZCBpY21wX2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoIXN5c2N0bF9pY21wX2VjaG9faWdub3JlX2FsbCkgeworCXN0cnVjdCBuZXQgKm5ldDsKKworCW5ldCA9IGRldl9uZXQoc2tiLT5kc3QtPmRldik7CisJaWYgKCFuZXQtPmlwdjQuc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYWxsKSB7CiAJCXN0cnVjdCBpY21wX2J4bSBpY21wX3BhcmFtOwogCiAJCWljbXBfcGFyYW0uZGF0YS5pY21waAkgICA9ICppY21wX2hkcihza2IpOwpAQCAtOTM2LDcgKzkyOCw3IEBACiAKIHN0YXRpYyB2b2lkIGljbXBfYWRkcmVzc19yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJc3RydWN0IGluX2lmYWRkciAqaWZhOwpAQCAtOTYxLDggKzk1Myw4IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFpZmEgJiYgbmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJXcm9uZyBhZGRyZXNzIG1hc2sgJXUuJXUuJXUuJXUgZnJvbSAiCi0JCQkJCSAiJXMvJXUuJXUuJXUuJXVcbiIsCisJCQlwcmludGsoS0VSTl9JTkZPICJXcm9uZyBhZGRyZXNzIG1hc2sgIiBOSVBRVUFEX0ZNVCAiIGZyb20gIgorCQkJCQkgIiVzLyIgTklQUVVBRF9GTVQgIlxuIiwKIAkJCSAgICAgICBOSVBRVUFEKCptcCksIGRldi0+bmFtZSwgTklQUVVBRChydC0+cnRfc3JjKSk7CiAJCX0KIAl9CkBAIC05ODEsNyArOTczLDcgQEAKIGludCBpY21wX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpY21waGRyICppY21waDsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3Q7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKIAogCWlmICgheGZybTRfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7CiAJCWludCBuaDsKQEAgLTEwMzYsNiArMTAyOCw5IEBACiAJICovCiAKIAlpZiAocnQtPnJ0X2ZsYWdzICYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKSB7CisJCXN0cnVjdCBuZXQgKm5ldDsKKworCQluZXQgPSBkZXZfbmV0KHJ0LT51LmRzdC5kZXYpOwogCQkvKgogCQkgKglSRkMgMTEyMjogMy4yLjIuNiBBbiBJQ01QX0VDSE8gdG8gYnJvYWRjYXN0IE1BWSBiZQogCQkgKgkgIHNpbGVudGx5IGlnbm9yZWQgKHdlIGxldCB1c2VyIGRlY2lkZSB3aXRoIGEgc3lzY3RsKS4KQEAgLTEwNDQsNyArMTAzOSw3IEBACiAJCSAqLwogCQlpZiAoKGljbXBoLT50eXBlID09IElDTVBfRUNITyB8fAogCQkgICAgIGljbXBoLT50eXBlID09IElDTVBfVElNRVNUQU1QKSAmJgotCQkgICAgc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cykgeworCQkgICAgbmV0LT5pcHY0LnN5c2N0bF9pY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMpIHsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJaWYgKGljbXBoLT50eXBlICE9IElDTVBfRUNITyAmJgpAQCAtMTEzOSwzOCArMTEzNCw4NCBAQAogCX0sCiB9OwogCi12b2lkIF9faW5pdCBpY21wX2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcykKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaWNtcF9za19leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCWludCBpOwogCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjQuaWNtcF9za1tpXSk7CisJa2ZyZWUobmV0LT5pcHY0LmljbXBfc2spOworCW5ldC0+aXB2NC5pY21wX3NrID0gTlVMTDsKK30KKworaW50IF9fbmV0X2luaXQgaWNtcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgaSwgZXJyOworCisJbmV0LT5pcHY0LmljbXBfc2sgPQorCQlremFsbG9jKG5yX2NwdV9pZHMgKiBzaXplb2Yoc3RydWN0IHNvY2sgKiksIEdGUF9LRVJORUwpOworCWlmIChuZXQtPmlwdjQuaWNtcF9zayA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWludCBlcnI7CisJCXN0cnVjdCBzb2NrICpzazsKIAotCQllcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVAsCi0JCQkJICAgICAgICZwZXJfY3B1KF9faWNtcF9zb2NrZXQsIGkpKTsKLQorCQllcnIgPSBpbmV0X2N0bF9zb2NrX2NyZWF0ZSgmc2ssIFBGX0lORVQsCisJCQkJCSAgIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVAsIG5ldCk7CiAJCWlmIChlcnIgPCAwKQotCQkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUgdGhlIElDTVAgY29udHJvbCBzb2NrZXQuXG4iKTsKKwkJCWdvdG8gZmFpbDsKIAotCQlwZXJfY3B1KF9faWNtcF9zb2NrZXQsIGkpLT5zay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7CisJCW5ldC0+aXB2NC5pY21wX3NrW2ldID0gc2s7CiAKIAkJLyogRW5vdWdoIHNwYWNlIGZvciAyIDY0SyBJQ01QIHBhY2tldHMsIGluY2x1ZGluZwogCQkgKiBza19idWZmIHN0cnVjdCBvdmVyaGVhZC4KIAkJICovCi0JCXBlcl9jcHUoX19pY21wX3NvY2tldCwgaSktPnNrLT5za19zbmRidWYgPQorCQlzay0+c2tfc25kYnVmID0KIAkJCSgyICogKCg2NCAqIDEwMjQpICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKSkpOwogCi0JCWluZXQgPSBpbmV0X3NrKHBlcl9jcHUoX19pY21wX3NvY2tldCwgaSktPnNrKTsKLQkJaW5ldC0+dWNfdHRsID0gLTE7Ci0JCWluZXQtPnBtdHVkaXNjID0gSVBfUE1UVURJU0NfRE9OVDsKLQotCQkvKiBVbmhhc2ggaXQgc28gdGhhdCBJUCBpbnB1dCBwcm9jZXNzaW5nIGRvZXMgbm90IGV2ZW4KLQkJICogc2VlIGl0LCB3ZSBkbyBub3Qgd2lzaCB0aGlzIHNvY2tldCB0byBzZWUgaW5jb21pbmcKLQkJICogcGFja2V0cy4KLQkJICovCi0JCXBlcl9jcHUoX19pY21wX3NvY2tldCwgaSktPnNrLT5za19wcm90LT51bmhhc2gocGVyX2NwdShfX2ljbXBfc29ja2V0LCBpKS0+c2spOworCQlpbmV0X3NrKHNrKS0+cG10dWRpc2MgPSBJUF9QTVRVRElTQ19ET05UOwogCX0KKworCS8qIENvbnRyb2wgcGFyYW1ldGVycyBmb3IgRUNITyByZXBsaWVzLiAqLworCW5ldC0+aXB2NC5zeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9hbGwgPSAwOworCW5ldC0+aXB2NC5zeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzID0gMTsKKworCS8qIENvbnRyb2wgcGFyYW1ldGVyIC0gaWdub3JlIGJvZ3VzIGJyb2FkY2FzdCByZXNwb25zZXM/ICovCisJbmV0LT5pcHY0LnN5c2N0bF9pY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXMgPSAxOworCisJLyoKKwkgKiAJQ29uZmlndXJhYmxlIGdsb2JhbCByYXRlIGxpbWl0LgorCSAqCisJICoJcmF0ZWxpbWl0IGRlZmluZXMgdG9rZW5zL3BhY2tldCBjb25zdW1lZCBmb3IgZHN0LT5yYXRlX3Rva2VuCisJICoJYnVja2V0IHJhdGVtYXNrIGRlZmluZXMgd2hpY2ggaWNtcCB0eXBlcyBhcmUgcmF0ZWxpbWl0ZWQgYnkKKwkgKglzZXR0aW5nCWl0J3MgYml0IHBvc2l0aW9uLgorCSAqCisJICoJZGVmYXVsdDoKKwkgKglkZXN0IHVucmVhY2hhYmxlICgzKSwgc291cmNlIHF1ZW5jaCAoNCksCisJICoJdGltZSBleGNlZWRlZCAoMTEpLCBwYXJhbWV0ZXIgcHJvYmxlbSAoMTIpCisJICovCisKKwluZXQtPmlwdjQuc3lzY3RsX2ljbXBfcmF0ZWxpbWl0ID0gMSAqIEhaOworCW5ldC0+aXB2NC5zeXNjdGxfaWNtcF9yYXRlbWFzayA9IDB4MTgxODsKKwluZXQtPmlwdjQuc3lzY3RsX2ljbXBfZXJyb3JzX3VzZV9pbmJvdW5kX2lmYWRkciA9IDA7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+aXB2NC5pY21wX3NrW2ldKTsKKwlrZnJlZShuZXQtPmlwdjQuaWNtcF9zayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBfX25ldF9pbml0ZGF0YSBpY21wX3NrX29wcyA9IHsKKyAgICAgICAuaW5pdCA9IGljbXBfc2tfaW5pdCwKKyAgICAgICAuZXhpdCA9IGljbXBfc2tfZXhpdCwKK307CisKK2ludCBfX2luaXQgaWNtcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmljbXBfc2tfb3BzKTsKIH0KIAogRVhQT1JUX1NZTUJPTChpY21wX2Vycl9jb252ZXJ0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA3MzJjZDA3Li42MjUwZjQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xMzAsMTIgKzEzMCwxMiBAQAogICovCiAKICNkZWZpbmUgSUdNUF9WMV9TRUVOKGluX2RldikgXAotCShJUFY0X0RFVkNPTkZfQUxMKGluX2Rldi0+ZGV2LT5uZF9uZXQsIEZPUkNFX0lHTVBfVkVSU0lPTikgPT0gMSB8fCBcCisJKElQVjRfREVWQ09ORl9BTEwoZGV2X25ldChpbl9kZXYtPmRldiksIEZPUkNFX0lHTVBfVkVSU0lPTikgPT0gMSB8fCBcCiAJIElOX0RFVl9DT05GX0dFVCgoaW5fZGV2KSwgRk9SQ0VfSUdNUF9WRVJTSU9OKSA9PSAxIHx8IFwKIAkgKChpbl9kZXYpLT5tcl92MV9zZWVuICYmIFwKIAkgIHRpbWVfYmVmb3JlKGppZmZpZXMsIChpbl9kZXYpLT5tcl92MV9zZWVuKSkpCiAjZGVmaW5lIElHTVBfVjJfU0VFTihpbl9kZXYpIFwKLQkoSVBWNF9ERVZDT05GX0FMTChpbl9kZXYtPmRldi0+bmRfbmV0LCBGT1JDRV9JR01QX1ZFUlNJT04pID09IDIgfHwgXAorCShJUFY0X0RFVkNPTkZfQUxMKGRldl9uZXQoaW5fZGV2LT5kZXYpLCBGT1JDRV9JR01QX1ZFUlNJT04pID09IDIgfHwgXAogCSBJTl9ERVZfQ09ORl9HRVQoKGluX2RldiksIEZPUkNFX0lHTVBfVkVSU0lPTikgPT0gMiB8fCBcCiAJICgoaW5fZGV2KS0+bXJfdjJfc2VlbiAmJiBcCiAJICB0aW1lX2JlZm9yZShqaWZmaWVzLCAoaW5fZGV2KS0+bXJfdjJfc2VlbikpKQpAQCAtOTQ4LDcgKzk0OCw3IEBACiAJY2FzZSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKIAljYXNlIElHTVBWM19IT1NUX01FTUJFUlNISVBfUkVQT1JUOgogCQkvKiBJcyBpdCBvdXIgcmVwb3J0IGxvb3BlZCBiYWNrPyAqLwotCQlpZiAoKChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdCktPmZsLmlpZiA9PSAwKQorCQlpZiAoc2tiLT5ydGFibGUtPmZsLmlpZiA9PSAwKQogCQkJYnJlYWs7CiAJCS8qIGRvbid0IHJlbHkgb24gTUMgcm91dGVyIGhlYXJpbmcgdW5pY2FzdCByZXBvcnRzICovCiAJCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QgfHwKQEAgLTExOTgsNiArMTE5OCw5IEBACiAKIAlBU1NFUlRfUlROTCgpOwogCisJaWYgKGRldl9uZXQoaW5fZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwkJcmV0dXJuOworCiAJZm9yIChpbT1pbl9kZXYtPm1jX2xpc3Q7IGltOyBpbT1pbS0+bmV4dCkgewogCQlpZiAoaW0tPm11bHRpYWRkciA9PSBhZGRyKSB7CiAJCQlpbS0+dXNlcnMrKzsKQEAgLTEyNzcsNiArMTI4MCw5IEBACiAKIAlBU1NFUlRfUlROTCgpOwogCisJaWYgKGRldl9uZXQoaW5fZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwkJcmV0dXJuOworCiAJZm9yIChpcD0maW5fZGV2LT5tY19saXN0OyAoaT0qaXApIT1OVUxMOyBpcD0maS0+bmV4dCkgewogCQlpZiAoaS0+bXVsdGlhZGRyPT1hZGRyKSB7CiAJCQlpZiAoLS1pLT51c2VycyA9PSAwKSB7CkBAIC0xMzA0LDYgKzEzMTAsOSBAQAogCiAJQVNTRVJUX1JUTkwoKTsKIAorCWlmIChkZXZfbmV0KGluX2Rldi0+ZGV2KSAhPSAmaW5pdF9uZXQpCisJCXJldHVybjsKKwogCWZvciAoaT1pbl9kZXYtPm1jX2xpc3Q7IGk7IGk9aS0+bmV4dCkKIAkJaWdtcF9ncm91cF9kcm9wcGVkKGkpOwogCkBAIC0xMzI0LDYgKzEzMzMsOSBAQAogewogCUFTU0VSVF9SVE5MKCk7CiAKKwlpZiAoZGV2X25ldChpbl9kZXYtPmRldikgIT0gJmluaXRfbmV0KQorCQlyZXR1cm47CisKIAlpbl9kZXYtPm1jX3RvbWIgPSBOVUxMOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpbl9kZXYtPm1yX2dxX3J1bm5pbmcgPSAwOwpAQCAtMTM0Nyw2ICsxMzU5LDkgQEAKIAogCUFTU0VSVF9SVE5MKCk7CiAKKwlpZiAoZGV2X25ldChpbl9kZXYtPmRldikgIT0gJmluaXRfbmV0KQorCQlyZXR1cm47CisKIAlpcF9tY19pbmNfZ3JvdXAoaW5fZGV2LCBJR01QX0FMTF9IT1NUUyk7CiAKIAlmb3IgKGk9aW5fZGV2LT5tY19saXN0OyBpOyBpPWktPm5leHQpCkBAIC0xMzYzLDYgKzEzNzgsOSBAQAogCiAJQVNTRVJUX1JUTkwoKTsKIAorCWlmIChkZXZfbmV0KGluX2Rldi0+ZGV2KSAhPSAmaW5pdF9uZXQpCisJCXJldHVybjsKKwogCS8qIERlYWN0aXZhdGUgdGltZXJzICovCiAJaXBfbWNfZG93bihpbl9kZXYpOwogCkBAIC0xNzQ0LDYgKzE3NjIsOSBAQAogCWlmICghaXB2NF9pc19tdWx0aWNhc3QoYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKHNvY2tfbmV0KHNrKSAhPSAmaW5pdF9uZXQpCisJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworCiAJcnRubF9sb2NrKCk7CiAKIAlpbl9kZXYgPSBpcF9tY19maW5kX2RldihpbXIpOwpAQCAtMTgxMiw2ICsxODMzLDkgQEAKIAl1MzIgaWZpbmRleDsKIAlpbnQgcmV0ID0gLUVBRERSTk9UQVZBSUw7CiAKKwlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CisKIAlydG5sX2xvY2soKTsKIAlpbl9kZXYgPSBpcF9tY19maW5kX2RldihpbXIpOwogCWlmaW5kZXggPSBpbXItPmltcl9pZmluZGV4OwpAQCAtMTg1Nyw2ICsxODgxLDkgQEAKIAlpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChzb2NrX25ldChzaykgIT0gJmluaXRfbmV0KQorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwogCXJ0bmxfbG9jaygpOwogCiAJaW1yLmltcl9tdWx0aWFkZHIuc19hZGRyID0gbXJlcXMtPmltcl9tdWx0aWFkZHI7CkBAIC0xOTkwLDYgKzIwMTcsOSBAQAogCSAgICBtc2YtPmltc2ZfZm1vZGUgIT0gTUNBU1RfRVhDTFVERSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CisKIAlydG5sX2xvY2soKTsKIAogCWltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1zZi0+aW1zZl9tdWx0aWFkZHI7CkBAIC0yMDcwLDYgKzIxMDAsOSBAQAogCWlmICghaXB2NF9pc19tdWx0aWNhc3QoYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKHNvY2tfbmV0KHNrKSAhPSAmaW5pdF9uZXQpCisJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworCiAJcnRubF9sb2NrKCk7CiAKIAlpbXIuaW1yX211bHRpYWRkci5zX2FkZHIgPSBtc2YtPmltc2ZfbXVsdGlhZGRyOwpAQCAtMjEzMiw2ICsyMTY1LDkgQEAKIAlpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChzb2NrX25ldChzaykgIT0gJmluaXRfbmV0KQorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwogCXJ0bmxfbG9jaygpOwogCiAJZXJyID0gLUVBRERSTk9UQVZBSUw7CkBAIC0yMjE2LDYgKzIyNTIsOSBAQAogCWlmIChpbmV0LT5tY19saXN0ID09IE5VTEwpCiAJCXJldHVybjsKIAorCWlmIChzb2NrX25ldChzaykgIT0gJmluaXRfbmV0KQorCQlyZXR1cm47CisKIAlydG5sX2xvY2soKTsKIAl3aGlsZSAoKGltbCA9IGluZXQtPm1jX2xpc3QpICE9IE5VTEwpIHsKIAkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggYjE4OTI3OC4uODI4ZWEyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC01NSw2ICs1NSwxMyBAQAogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCWludCByZXVzZSA9IHNrLT5za19yZXVzZTsKIAorCS8qCisJICogVW5saWtlIG90aGVyIHNrIGxvb2t1cCBwbGFjZXMgd2UgZG8gbm90IGNoZWNrCisJICogZm9yIHNrX25ldCBoZXJlLCBzaW5jZSBfYWxsXyB0aGUgc29ja3MgbGlzdGVkCisJICogaW4gdGItPm93bmVycyBsaXN0IGJlbG9uZyB0byB0aGUgc2FtZSBuZXQgLSB0aGUKKwkgKiBvbmUgdGhpcyBidWNrZXQgYmVsb25ncyB0by4KKwkgKi8KKwogCXNrX2Zvcl9lYWNoX2JvdW5kKHNrMiwgbm9kZSwgJnRiLT5vd25lcnMpIHsKIAkJaWYgKHNrICE9IHNrMiAmJgogCQkgICAgIWluZXRfdjZfaXB2Nm9ubHkoc2syKSAmJgpAQCAtODAsMTIgKzg3LDEyIEBACiAgKi8KIGludCBpbmV0X2Nza19nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCiB7Ci0Jc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvID0gc2stPnNrX3Byb3QtPmhhc2hpbmZvOworCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oLmhhc2hpbmZvOwogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7CiAJaW50IHJldDsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpZiAoIXNudW0pIHsKQEAgLTEzMyw4ICsxNDAsNiBAQAogCWdvdG8gdGJfbm90X2ZvdW5kOwogdGJfZm91bmQ6CiAJaWYgKCFobGlzdF9lbXB0eSgmdGItPm93bmVycykpIHsKLQkJaWYgKHNrLT5za19yZXVzZSA+IDEpCi0JCQlnb3RvIHN1Y2Nlc3M7CiAJCWlmICh0Yi0+ZmFzdHJldXNlID4gMCAmJgogCQkgICAgc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOKSB7CiAJCQlnb3RvIHN1Y2Nlc3M7CkBAIC0zMzMsNyArMzM4LDcgQEAKIAkJCQkJIC5kcG9ydCA9IGlyZXEtPnJtdF9wb3J0IH0gfSB9OwogCiAJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCAmZmwpOwotCWlmIChpcF9yb3V0ZV9vdXRwdXRfZmxvdygmaW5pdF9uZXQsICZydCwgJmZsLCBzaywgMCkpIHsKKwlpZiAoaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCAmcnQsICZmbCwgc2ssIDApKSB7CiAJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTQxNCw4ICs0MTksNyBAQAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHBhcmVudCk7CiAJc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSAmaWNzay0+aWNza19hY2NlcHRfcXVldWU7CiAJc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0ID0gcXVldWUtPmxpc3Rlbl9vcHQ7Ci0JaW50IG1heF9yZXRyaWVzID0gaWNzay0+aWNza19zeW5fcmV0cmllcyA/IDogc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllczsKLQlpbnQgdGhyZXNoID0gbWF4X3JldHJpZXM7CisJaW50IHRocmVzaCA9IGljc2stPmljc2tfc3luX3JldHJpZXMgPyA6IHN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXM7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCXN0cnVjdCByZXF1ZXN0X3NvY2sgKipyZXFwLCAqcmVxOwogCWludCBpLCBidWRnZXQ7CkBAIC00NTEsOSArNDU1LDYgQEAKIAkJfQogCX0KIAotCWlmIChxdWV1ZS0+cnNrcV9kZWZlcl9hY2NlcHQpCi0JCW1heF9yZXRyaWVzID0gcXVldWUtPnJza3FfZGVmZXJfYWNjZXB0OwotCiAJYnVkZ2V0ID0gMiAqIChsb3B0LT5ucl90YWJsZV9lbnRyaWVzIC8gKHRpbWVvdXQgLyBpbnRlcnZhbCkpOwogCWkgPSBsb3B0LT5jbG9ja19oYW5kOwogCkBAIC00NjEsOSArNDYyLDggQEAKIAkJcmVxcD0mbG9wdC0+c3luX3RhYmxlW2ldOwogCQl3aGlsZSAoKHJlcSA9ICpyZXFwKSAhPSBOVUxMKSB7CiAJCQlpZiAodGltZV9hZnRlcl9lcShub3csIHJlcS0+ZXhwaXJlcykpIHsKLQkJCQlpZiAoKHJlcS0+cmV0cmFucyA8IHRocmVzaCB8fAotCQkJCSAgICAgKGluZXRfcnNrKHJlcSktPmFja2VkICYmIHJlcS0+cmV0cmFucyA8IG1heF9yZXRyaWVzKSkKLQkJCQkgICAgJiYgIXJlcS0+cnNrX29wcy0+cnR4X3N5bl9hY2socGFyZW50LCByZXEsIE5VTEwpKSB7CisJCQkJaWYgKHJlcS0+cmV0cmFucyA8IHRocmVzaCAmJgorCQkJCSAgICAhcmVxLT5yc2tfb3BzLT5ydHhfc3luX2FjayhwYXJlbnQsIHJlcSkpIHsKIAkJCQkJdW5zaWduZWQgbG9uZyB0aW1lbzsKIAogCQkJCQlpZiAocmVxLT5yZXRyYW5zKysgPT0gMCkKQEAgLTY1NiwyNSArNjU2LDYgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfYWRkcjJzb2NrYWRkcik7CiAKLWludCBpbmV0X2Nza19jdGxfc29ja19jcmVhdGUoc3RydWN0IHNvY2tldCAqKnNvY2ssIHVuc2lnbmVkIHNob3J0IGZhbWlseSwKLQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgdW5zaWduZWQgY2hhciBwcm90b2NvbCkKLXsKLQlpbnQgcmMgPSBzb2NrX2NyZWF0ZV9rZXJuKGZhbWlseSwgdHlwZSwgcHJvdG9jb2wsIHNvY2spOwotCi0JaWYgKHJjID09IDApIHsKLQkJKCpzb2NrKS0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwotCQlpbmV0X3NrKCgqc29jayktPnNrKS0+dWNfdHRsID0gLTE7Ci0JCS8qCi0JCSAqIFVuaGFzaCBpdCBzbyB0aGF0IElQIGlucHV0IHByb2Nlc3NpbmcgZG9lcyBub3QgZXZlbiBzZWUgaXQsCi0JCSAqIHdlIGRvIG5vdCB3aXNoIHRoaXMgc29ja2V0IHRvIHNlZSBpbmNvbWluZyBwYWNrZXRzLgotCQkgKi8KLQkJKCpzb2NrKS0+c2stPnNrX3Byb3QtPnVuaGFzaCgoKnNvY2spLT5zayk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfY3RsX3NvY2tfY3JlYXRlKTsKLQogI2lmZGVmIENPTkZJR19DT01QQVQKIGludCBpbmV0X2Nza19jb21wYXRfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCmluZGV4IDcyNGQ2OWEuLjRlZDQyOWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKQEAgLTg2LDcgKzg2LDEwIEBACiB2b2lkIGluZXRfZnJhZ3NfZXhpdF9uZXQoc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwgc3RydWN0IGluZXRfZnJhZ3MgKmYpCiB7CiAJbmYtPmxvd190aHJlc2ggPSAwOworCisJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWluZXRfZnJhZ19ldmljdG9yKG5mLCBmKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIEVYUE9SVF9TWU1CT0woaW5ldF9mcmFnc19leGl0X25ldCk7CiAKQEAgLTEwNCwxMCArMTA3LDEwIEBACiAJaWYgKGRlbF90aW1lcigmZnEtPnRpbWVyKSkKIAkJYXRvbWljX2RlYygmZnEtPnJlZmNudCk7CiAKLQlpZiAoIShmcS0+bGFzdF9pbiAmIENPTVBMRVRFKSkgeworCWlmICghKGZxLT5sYXN0X2luICYgSU5FVF9GUkFHX0NPTVBMRVRFKSkgewogCQlmcV91bmxpbmsoZnEsIGYpOwogCQlhdG9taWNfZGVjKCZmcS0+cmVmY250KTsKLQkJZnEtPmxhc3RfaW4gfD0gQ09NUExFVEU7CisJCWZxLT5sYXN0X2luIHw9IElORVRfRlJBR19DT01QTEVURTsKIAl9CiB9CiAKQEAgLTEzMSw3ICsxMzQsNyBAQAogCXN0cnVjdCBza19idWZmICpmcDsKIAlzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mOwogCi0JQlVHX1RSQVAocS0+bGFzdF9pbiAmIENPTVBMRVRFKTsKKwlCVUdfVFJBUChxLT5sYXN0X2luICYgSU5FVF9GUkFHX0NPTVBMRVRFKTsKIAlCVUdfVFJBUChkZWxfdGltZXIoJnEtPnRpbWVyKSA9PSAwKTsKIAogCS8qIFJlbGVhc2UgYWxsIGZyYWdtZW50IGRhdGEuICovCkBAIC0xNzQsNyArMTc3LDcgQEAKIAkJcmVhZF91bmxvY2soJmYtPmxvY2spOwogCiAJCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0JCWlmICghKHEtPmxhc3RfaW4gJiBDT01QTEVURSkpCisJCWlmICghKHEtPmxhc3RfaW4gJiBJTkVUX0ZSQUdfQ09NUExFVEUpKQogCQkJaW5ldF9mcmFnX2tpbGwocSwgZik7CiAJCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKIApAQCAtMjA2LDcgKzIwOSw3IEBACiAJCWlmIChxcC0+bmV0ID09IG5mICYmIGYtPm1hdGNoKHFwLCBhcmcpKSB7CiAJCQlhdG9taWNfaW5jKCZxcC0+cmVmY250KTsKIAkJCXdyaXRlX3VubG9jaygmZi0+bG9jayk7Ci0JCQlxcF9pbi0+bGFzdF9pbiB8PSBDT01QTEVURTsKKwkJCXFwX2luLT5sYXN0X2luIHw9IElORVRfRlJBR19DT01QTEVURTsKIAkJCWluZXRfZnJhZ19wdXQocXBfaW4sIGYpOwogCQkJcmV0dXJuIHFwOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IDFhYmE2MDYuLjIwMjNkMzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC0zNSw3ICszNSw3IEBACiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZXAsIEdGUF9BVE9NSUMpOwogCiAJaWYgKHRiICE9IE5VTEwpIHsKLQkJdGItPmliX25ldCAgICAgICA9IG5ldDsKKwkJdGItPmliX25ldCAgICAgICA9IGhvbGRfbmV0KG5ldCk7CiAJCXRiLT5wb3J0ICAgICAgPSBzbnVtOwogCQl0Yi0+ZmFzdHJldXNlID0gMDsKIAkJSU5JVF9ITElTVF9IRUFEKCZ0Yi0+b3duZXJzKTsKQEAgLTUxLDYgKzUxLDcgQEAKIHsKIAlpZiAoaGxpc3RfZW1wdHkoJnRiLT5vd25lcnMpKSB7CiAJCV9faGxpc3RfZGVsKCZ0Yi0+bm9kZSk7CisJCXJlbGVhc2VfbmV0KHRiLT5pYl9uZXQpOwogCQlrbWVtX2NhY2hlX2ZyZWUoY2FjaGVwLCB0Yik7CiAJfQogfQpAQCAtNjgsNyArNjksNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luZXRfcHV0X3BvcnQoc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oYXNoaW5mbzsKKwlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8gPSBzay0+c2tfcHJvdC0+aC5oYXNoaW5mbzsKIAljb25zdCBpbnQgYmhhc2ggPSBpbmV0X2JoYXNoZm4oaW5ldF9zayhzayktPm51bSwgaGFzaGluZm8tPmJoYXNoX3NpemUpOwogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbYmhhc2hdOwogCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKQEAgLTkxLDYgKzkyLDIyIEBACiAKIEVYUE9SVF9TWU1CT0woaW5ldF9wdXRfcG9ydCk7CiAKK3ZvaWQgX19pbmV0X2luaGVyaXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpjaGlsZCkKK3sKKwlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqdGFibGUgPSBzay0+c2tfcHJvdC0+aC5oYXNoaW5mbzsKKwljb25zdCBpbnQgYmhhc2ggPSBpbmV0X2JoYXNoZm4oaW5ldF9zayhjaGlsZCktPm51bSwgdGFibGUtPmJoYXNoX3NpemUpOworCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZCA9ICZ0YWJsZS0+Ymhhc2hbYmhhc2hdOworCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YjsKKworCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CisJdGIgPSBpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoOworCXNrX2FkZF9iaW5kX25vZGUoY2hpbGQsICZ0Yi0+b3duZXJzKTsKKwlpbmV0X2NzayhjaGlsZCktPmljc2tfYmluZF9oYXNoID0gdGI7CisJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChfX2luZXRfaW5oZXJpdF9wb3J0KTsKKwogLyoKICAqIFRoaXMgbG9jayB3aXRob3V0IFdRX0ZMQUdfRVhDTFVTSVZFIGlzIGdvb2Qgb24gVVAgYW5kIGl0IGNhbiBiZSB2ZXJ5IGJhZCBvbiBTTVAuCiAgKiBMb29rLCB3aGVuIHNldmVyYWwgd3JpdGVycyBzbGVlcCBhbmQgcmVhZGVyIHdha2VzIHRoZW0gdXAsIGFsbCBidXQgb25lCkBAIC0xMzksNyArMTU2LDcgQEAKIAlza19mb3JfZWFjaChzaywgbm9kZSwgaGVhZCkgewogCQljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAKLQkJaWYgKHNrLT5za19uZXQgPT0gbmV0ICYmIGluZXQtPm51bSA9PSBobnVtICYmCisJCWlmIChuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpICYmIGluZXQtPm51bSA9PSBobnVtICYmCiAJCQkJIWlwdjZfb25seV9zb2NrKHNrKSkgewogCQkJY29uc3QgX19iZTMyIHJjdl9zYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKIAkJCWludCBzY29yZSA9IHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVCA/IDEgOiAwOwpAQCAtMTgyLDcgKzE5OSw3IEBACiAJCWlmIChpbmV0LT5udW0gPT0gaG51bSAmJiAhc2stPnNrX25vZGUubmV4dCAmJgogCQkgICAgKCFpbmV0LT5yY3Zfc2FkZHIgfHwgaW5ldC0+cmN2X3NhZGRyID09IGRhZGRyKSAmJgogCQkgICAgKHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVCB8fCAhaXB2Nl9vbmx5X3NvY2soc2spKSAmJgotCQkgICAgIXNrLT5za19ib3VuZF9kZXZfaWYgJiYgc2stPnNrX25ldCA9PSBuZXQpCisJCSAgICAhc2stPnNrX2JvdW5kX2Rldl9pZiAmJiBuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKQogCQkJZ290byBzaGVycnlfY2FjaGU7CiAJCXNrID0gaW5ldF9sb29rdXBfbGlzdGVuZXJfc2xvdyhuZXQsIGhlYWQsIGRhZGRyLCBobnVtLCBkaWYpOwogCX0KQEAgLTI1NCw3ICsyNzEsNyBAQAogCXN0cnVjdCBzb2NrICpzazI7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CiAJd3JpdGVfbG9jayhsb2NrKTsKQEAgLTI4OCw3ICszMDUsNyBAQAogCXNrLT5za19oYXNoID0gaGFzaDsKIAlCVUdfVFJBUChza191bmhhc2hlZChzaykpOwogCV9fc2tfYWRkX25vZGUoc2ssICZoZWFkLT5jaGFpbik7Ci0Jc29ja19wcm90X2ludXNlX2FkZChzay0+c2tfcHJvdCwgMSk7CisJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAxKTsKIAl3cml0ZV91bmxvY2sobG9jayk7CiAKIAlpZiAodHdwKSB7CkBAIC0zMTgsNyArMzM1LDcgQEAKIAogdm9pZCBfX2luZXRfaGFzaF9ub2xpc3RlbihzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvID0gc2stPnNrX3Byb3QtPmhhc2hpbmZvOworCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oLmhhc2hpbmZvOwogCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OwogCXJ3bG9ja190ICpsb2NrOwogCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZDsKQEAgLTMzMiwxNCArMzQ5LDE0IEBACiAKIAl3cml0ZV9sb2NrKGxvY2spOwogCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOwotCXNvY2tfcHJvdF9pbnVzZV9hZGQoc2stPnNrX3Byb3QsIDEpOworCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0+c2tfcHJvdCwgMSk7CiAJd3JpdGVfdW5sb2NrKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19pbmV0X2hhc2hfbm9saXN0ZW4pOwogCiBzdGF0aWMgdm9pZCBfX2luZXRfaGFzaChzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvID0gc2stPnNrX3Byb3QtPmhhc2hpbmZvOworCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oLmhhc2hpbmZvOwogCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OwogCXJ3bG9ja190ICpsb2NrOwogCkBAIC0zNTQsNyArMzcxLDcgQEAKIAogCWluZXRfbGlzdGVuX3dsb2NrKGhhc2hpbmZvKTsKIAlfX3NrX2FkZF9ub2RlKHNrLCBsaXN0KTsKLQlzb2NrX3Byb3RfaW51c2VfYWRkKHNrLT5za19wcm90LCAxKTsKKwlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIDEpOwogCXdyaXRlX3VubG9jayhsb2NrKTsKIAl3YWtlX3VwKCZoYXNoaW5mby0+bGhhc2hfd2FpdCk7CiB9CkBAIC0zNzIsNyArMzg5LDcgQEAKIHZvaWQgaW5ldF91bmhhc2goc3RydWN0IHNvY2sgKnNrKQogewogCXJ3bG9ja190ICpsb2NrOwotCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oYXNoaW5mbzsKKwlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8gPSBzay0+c2tfcHJvdC0+aC5oYXNoaW5mbzsKIAogCWlmIChza191bmhhc2hlZChzaykpCiAJCWdvdG8gb3V0OwpAQCAtMzg3LDcgKzQwNCw3IEBACiAJfQogCiAJaWYgKF9fc2tfZGVsX25vZGVfaW5pdChzaykpCi0JCXNvY2tfcHJvdF9pbnVzZV9hZGQoc2stPnNrX3Byb3QsIC0xKTsKKwkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAtMSk7CiAJd3JpdGVfdW5sb2NrX2JoKGxvY2spOwogb3V0OgogCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikKQEAgLTQwNiw3ICs0MjMsNyBAQAogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZDsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7CiAJaW50IHJldDsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCWlmICghc251bSkgewogCQlpbnQgaSwgcmVtYWluaW5nLCBsb3csIGhpZ2gsIHBvcnQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCmluZGV4IDg3NjE2OWYuLmNlMTZlOWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCkBAIC01Nyw2ICs1Nyw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyB0aW1ld2FpdF9zb2NrICVwIHJlbGVhc2VkXG4iLAogCQkgICAgICAgdHctPnR3X3Byb3QtPm5hbWUsIHR3KTsKICNlbmRpZgorCQlyZWxlYXNlX25ldCh0d3NrX25ldCh0dykpOwogCQlrbWVtX2NhY2hlX2ZyZWUodHctPnR3X3Byb3QtPnR3c2tfcHJvdC0+dHdza19zbGFiLCB0dyk7CiAJCW1vZHVsZV9wdXQob3duZXIpOwogCX0KQEAgLTkxLDcgKzkyLDcgQEAKIAogCS8qIFN0ZXAgMjogUmVtb3ZlIFNLIGZyb20gZXN0YWJsaXNoZWQgaGFzaC4gKi8KIAlpZiAoX19za19kZWxfbm9kZV9pbml0KHNrKSkKLQkJc29ja19wcm90X2ludXNlX2FkZChzay0+c2tfcHJvdCwgLTEpOworCQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIC0xKTsKIAogCS8qIFN0ZXAgMzogSGFzaCBUVyBpbnRvIFRJTUVXQUlUIGNoYWluLiAqLwogCWluZXRfdHdza19hZGRfbm9kZSh0dywgJmVoZWFkLT50d2NoYWluKTsKQEAgLTEyNCw2ICsxMjUsNyBAQAogCQl0dy0+dHdfaGFzaAkgICAgPSBzay0+c2tfaGFzaDsKIAkJdHctPnR3X2lwdjZvbmx5CSAgICA9IDA7CiAJCXR3LT50d19wcm90CSAgICA9IHNrLT5za19wcm90X2NyZWF0b3I7CisJCXR3c2tfbmV0X3NldCh0dywgaG9sZF9uZXQoc29ja19uZXQoc2spKSk7CiAJCWF0b21pY19zZXQoJnR3LT50d19yZWZjbnQsIDEpOwogCQlpbmV0X3R3c2tfZGVhZF9ub2RlX2luaXQodHcpOwogCQlfX21vZHVsZV9nZXQodHctPnR3X3Byb3QtPm93bmVyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwppbmRleCAwYjNiMzI4Li40ODEzYzM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKKysrIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCkBAIC04MCwxMiArODAsMTIgQEAKIAlpZiAoIXhmcm00X3JvdXRlX2ZvcndhcmQoc2tiKSkKIAkJZ290byBkcm9wOwogCi0JcnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CisJcnQgPSBza2ItPnJ0YWJsZTsKIAogCWlmIChvcHQtPmlzX3N0cmljdHJvdXRlICYmIHJ0LT5ydF9kc3QgIT0gcnQtPnJ0X2dhdGV3YXkpCiAJCWdvdG8gc3JfZmFpbGVkOwogCi0JaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gZHN0X210dSgmcnQtPnUuZHN0KSAmJgorCWlmICh1bmxpa2VseShza2ItPmxlbiA+IGRzdF9tdHUoJnJ0LT51LmRzdCkgJiYgIXNrYl9pc19nc28oc2tiKSAmJgogCQkgICAgIChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpKSAmJiAhc2tiLT5sb2NhbF9kZikgewogCQlJUF9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwppbmRleCBhMmU5MmY5Li5jZDZjZTZhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCiAJc3Bpbl9sb2NrKCZxcC0+cS5sb2NrKTsKIAotCWlmIChxcC0+cS5sYXN0X2luICYgQ09NUExFVEUpCisJaWYgKHFwLT5xLmxhc3RfaW4gJiBJTkVUX0ZSQUdfQ09NUExFVEUpCiAJCWdvdG8gb3V0OwogCiAJaXBxX2tpbGwocXApOwpAQCAtMjAyLDEwICsyMDIsMTMgQEAKIAlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01USU1FT1VUKTsKIAlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAKLQlpZiAoKHFwLT5xLmxhc3RfaW4mRklSU1RfSU4pICYmIHFwLT5xLmZyYWdtZW50cyAhPSBOVUxMKSB7CisJaWYgKChxcC0+cS5sYXN0X2luICYgSU5FVF9GUkFHX0ZJUlNUX0lOKSAmJiBxcC0+cS5mcmFnbWVudHMgIT0gTlVMTCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqaGVhZCA9IHFwLT5xLmZyYWdtZW50czsKKwkJc3RydWN0IG5ldCAqbmV0OworCisJCW5ldCA9IGNvbnRhaW5lcl9vZihxcC0+cS5uZXQsIHN0cnVjdCBuZXQsIGlwdjQuZnJhZ3MpOwogCQkvKiBTZW5kIGFuIElDTVAgIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZS4gKi8KLQkJaWYgKChoZWFkLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgcXAtPmlpZikpICE9IE5VTEwpIHsKKwkJaWYgKChoZWFkLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgcXAtPmlpZikpICE9IE5VTEwpIHsKIAkJCWljbXBfc2VuZChoZWFkLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX0ZSQUdUSU1FLCAwKTsKIAkJCWRldl9wdXQoaGVhZC0+ZGV2KTsKIAkJfQpAQCAtMjk4LDcgKzMwMSw3IEBACiAJaW50IGlobCwgZW5kOwogCWludCBlcnIgPSAtRU5PRU5UOwogCi0JaWYgKHFwLT5xLmxhc3RfaW4gJiBDT01QTEVURSkKKwlpZiAocXAtPnEubGFzdF9pbiAmIElORVRfRlJBR19DT01QTEVURSkKIAkJZ290byBlcnI7CiAKIAlpZiAoIShJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfRlJBR19DT01QTEVURSkgJiYKQEAgLTMyNCw5ICszMjcsOSBAQAogCQkgKiBvciBoYXZlIGRpZmZlcmVudCBlbmQsIHRoZSBzZWdtZW50IGlzIGNvcnJydXB0ZWQuCiAJCSAqLwogCQlpZiAoZW5kIDwgcXAtPnEubGVuIHx8Ci0JCSAgICAoKHFwLT5xLmxhc3RfaW4gJiBMQVNUX0lOKSAmJiBlbmQgIT0gcXAtPnEubGVuKSkKKwkJICAgICgocXAtPnEubGFzdF9pbiAmIElORVRfRlJBR19MQVNUX0lOKSAmJiBlbmQgIT0gcXAtPnEubGVuKSkKIAkJCWdvdG8gZXJyOwotCQlxcC0+cS5sYXN0X2luIHw9IExBU1RfSU47CisJCXFwLT5xLmxhc3RfaW4gfD0gSU5FVF9GUkFHX0xBU1RfSU47CiAJCXFwLT5xLmxlbiA9IGVuZDsKIAl9IGVsc2UgewogCQlpZiAoZW5kJjcpIHsKQEAgLTMzNiw3ICszMzksNyBAQAogCQl9CiAJCWlmIChlbmQgPiBxcC0+cS5sZW4pIHsKIAkJCS8qIFNvbWUgYml0cyBiZXlvbmQgZW5kIC0+IGNvcnJ1cHRpb24uICovCi0JCQlpZiAocXAtPnEubGFzdF9pbiAmIExBU1RfSU4pCisJCQlpZiAocXAtPnEubGFzdF9pbiAmIElORVRfRlJBR19MQVNUX0lOKQogCQkJCWdvdG8gZXJyOwogCQkJcXAtPnEubGVuID0gZW5kOwogCQl9CkBAIC00MzUsOSArNDM4LDEwIEBACiAJcXAtPnEubWVhdCArPSBza2ItPmxlbjsKIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZxcC0+cS5uZXQtPm1lbSk7CiAJaWYgKG9mZnNldCA9PSAwKQotCQlxcC0+cS5sYXN0X2luIHw9IEZJUlNUX0lOOworCQlxcC0+cS5sYXN0X2luIHw9IElORVRfRlJBR19GSVJTVF9JTjsKIAotCWlmIChxcC0+cS5sYXN0X2luID09IChGSVJTVF9JTiB8IExBU1RfSU4pICYmIHFwLT5xLm1lYXQgPT0gcXAtPnEubGVuKQorCWlmIChxcC0+cS5sYXN0X2luID09IChJTkVUX0ZSQUdfRklSU1RfSU4gfCBJTkVUX0ZSQUdfTEFTVF9JTikgJiYKKwkgICAgcXAtPnEubWVhdCA9PSBxcC0+cS5sZW4pCiAJCXJldHVybiBpcF9mcmFnX3JlYXNtKHFwLCBwcmV2LCBkZXYpOwogCiAJd3JpdGVfbG9jaygmaXA0X2ZyYWdzLmxvY2spOwpAQCAtNTUzLDcgKzU1Nyw3IEBACiBvdXRfb3ZlcnNpemU6CiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIk92ZXJzaXplZCBJUCBwYWNrZXQgZnJvbSAlZC4lZC4lZC4lZC5cbiIsCisJCQkiT3ZlcnNpemVkIElQIHBhY2tldCBmcm9tICIgTklQUVVBRF9GTVQgIi5cbiIsCiAJCQlOSVBRVUFEKHFwLT5zYWRkcikpOwogb3V0X2ZhaWw6CiAJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOwpAQCAtNTY4LDcgKzU3Miw3IEBACiAKIAlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01SRVFEUyk7CiAKLQluZXQgPSBza2ItPmRldi0+bmRfbmV0OworCW5ldCA9IHNrYi0+ZGV2ID8gZGV2X25ldChza2ItPmRldikgOiBkZXZfbmV0KHNrYi0+ZHN0LT5kZXYpOwogCS8qIFN0YXJ0IGJ5IGNsZWFuaW5nIHVwIHRoZSBtZW1vcnkuICovCiAJaWYgKGF0b21pY19yZWFkKCZuZXQtPmlwdjQuZnJhZ3MubWVtKSA+IG5ldC0+aXB2NC5mcmFncy5oaWdoX3RocmVzaCkKIAkJaXBfZXZpY3RvcihuZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCA2M2Y2OTE3Li4yYWRhMDMzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPG5ldC9kc2ZpZWxkLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAKICNpZmRlZiBDT05GSUdfSVBWNgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CkBAIC0xMjIsNyArMTI0LDE0IEBACiAKIHN0YXRpYyBpbnQgaXBncmVfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBncmVfZmJfdHVubmVsX2RldjsKKyNkZWZpbmUgSEFTSF9TSVpFICAxNgorCitzdGF0aWMgaW50IGlwZ3JlX25ldF9pZDsKK3N0cnVjdCBpcGdyZV9uZXQgeworCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbHNbNF1bSEFTSF9TSVpFXTsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpmYl90dW5uZWxfZGV2OworfTsKIAogLyogVHVubmVsIGhhc2ggdGFibGUgKi8KIApAQCAtMTQyLDM5ICsxNTEsMzggQEAKICAgIHdpbGwgbWF0Y2ggZmFsbGJhY2sgdHVubmVsLgogICovCiAKLSNkZWZpbmUgSEFTSF9TSVpFICAxNgogI2RlZmluZSBIQVNIKGFkZHIpICgoKF9fZm9yY2UgdTMyKWFkZHJeKChfX2ZvcmNlIHUzMilhZGRyPj40KSkmMHhGKQogCi1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc1s0XVtIQVNIX1NJWkVdOwotCi0jZGVmaW5lIHR1bm5lbHNfcl9sCSh0dW5uZWxzWzNdKQotI2RlZmluZSB0dW5uZWxzX3IJKHR1bm5lbHNbMl0pCi0jZGVmaW5lIHR1bm5lbHNfbAkodHVubmVsc1sxXSkKLSNkZWZpbmUgdHVubmVsc193YwkodHVubmVsc1swXSkKKyNkZWZpbmUgdHVubmVsc19yX2wJdHVubmVsc1szXQorI2RlZmluZSB0dW5uZWxzX3IJdHVubmVsc1syXQorI2RlZmluZSB0dW5uZWxzX2wJdHVubmVsc1sxXQorI2RlZmluZSB0dW5uZWxzX3djCXR1bm5lbHNbMF0KIAogc3RhdGljIERFRklORV9SV0xPQ0soaXBncmVfbG9jayk7CiAKIC8qIEdpdmVuIHNyYywgZHN0IGFuZCBrZXksIGZpbmQgYXBwcm9wcmlhdGUgZm9yIGlucHV0IHR1bm5lbC4gKi8KIAotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGdyZV90dW5uZWxfbG9va3VwKF9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCwgX19iZTMyIGtleSkKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBncmVfdHVubmVsX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCisJCV9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCwgX19iZTMyIGtleSkKIHsKIAl1bnNpZ25lZCBoMCA9IEhBU0gocmVtb3RlKTsKIAl1bnNpZ25lZCBoMSA9IEhBU0goa2V5KTsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0OworCXN0cnVjdCBpcGdyZV9uZXQgKmlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKIAotCWZvciAodCA9IHR1bm5lbHNfcl9sW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKKwlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfcl9sW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKIAkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJiByZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyKSB7CiAJCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmICh0LT5kZXYtPmZsYWdzJklGRl9VUCkpCiAJCQkJcmV0dXJuIHQ7CiAJCX0KIAl9Ci0JZm9yICh0ID0gdHVubmVsc19yW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKKwlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfcltoMF5oMV07IHQ7IHQgPSB0LT5uZXh0KSB7CiAJCWlmIChyZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyKSB7CiAJCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmICh0LT5kZXYtPmZsYWdzJklGRl9VUCkpCiAJCQkJcmV0dXJuIHQ7CiAJCX0KIAl9Ci0JZm9yICh0ID0gdHVubmVsc19sW2gxXTsgdDsgdCA9IHQtPm5leHQpIHsKKwlmb3IgKHQgPSBpZ24tPnR1bm5lbHNfbFtoMV07IHQ7IHQgPSB0LT5uZXh0KSB7CiAJCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgfHwKIAkJICAgICAobG9jYWwgPT0gdC0+cGFybXMuaXBoLmRhZGRyICYmCiAJCSAgICAgIGlwdjRfaXNfbXVsdGljYXN0KGxvY2FsKSkpIHsKQEAgLTE4MiwxNyArMTkwLDE4IEBACiAJCQkJcmV0dXJuIHQ7CiAJCX0KIAl9Ci0JZm9yICh0ID0gdHVubmVsc193Y1toMV07IHQ7IHQgPSB0LT5uZXh0KSB7CisJZm9yICh0ID0gaWduLT50dW5uZWxzX3djW2gxXTsgdDsgdCA9IHQtPm5leHQpIHsKIAkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiAodC0+ZGV2LT5mbGFncyZJRkZfVVApKQogCQkJcmV0dXJuIHQ7CiAJfQogCi0JaWYgKGlwZ3JlX2ZiX3R1bm5lbF9kZXYtPmZsYWdzJklGRl9VUCkKLQkJcmV0dXJuIG5ldGRldl9wcml2KGlwZ3JlX2ZiX3R1bm5lbF9kZXYpOworCWlmIChpZ24tPmZiX3R1bm5lbF9kZXYtPmZsYWdzJklGRl9VUCkKKwkJcmV0dXJuIG5ldGRldl9wcml2KGlnbi0+ZmJfdHVubmVsX2Rldik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICoqX19pcGdyZV9idWNrZXQoc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcykKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICoqX19pcGdyZV9idWNrZXQoc3RydWN0IGlwZ3JlX25ldCAqaWduLAorCQlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0gKnBhcm1zKQogewogCV9fYmUzMiByZW1vdGUgPSBwYXJtcy0+aXBoLmRhZGRyOwogCV9fYmUzMiBsb2NhbCA9IHBhcm1zLT5pcGguc2FkZHI7CkBAIC0yMDcsMTcgKzIxNiwxOCBAQAogCQloIF49IEhBU0gocmVtb3RlKTsKIAl9CiAKLQlyZXR1cm4gJnR1bm5lbHNbcHJpb11baF07CisJcmV0dXJuICZpZ24tPnR1bm5lbHNbcHJpb11baF07CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3R1bm5lbCAqKmlwZ3JlX2J1Y2tldChzdHJ1Y3QgaXBfdHVubmVsICp0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdHVubmVsICoqaXBncmVfYnVja2V0KHN0cnVjdCBpcGdyZV9uZXQgKmlnbiwKKwkJc3RydWN0IGlwX3R1bm5lbCAqdCkKIHsKLQlyZXR1cm4gX19pcGdyZV9idWNrZXQoJnQtPnBhcm1zKTsKKwlyZXR1cm4gX19pcGdyZV9idWNrZXQoaWduLCAmdC0+cGFybXMpOwogfQogCi1zdGF0aWMgdm9pZCBpcGdyZV90dW5uZWxfbGluayhzdHJ1Y3QgaXBfdHVubmVsICp0KQorc3RhdGljIHZvaWQgaXBncmVfdHVubmVsX2xpbmsoc3RydWN0IGlwZ3JlX25ldCAqaWduLCBzdHJ1Y3QgaXBfdHVubmVsICp0KQogewotCXN0cnVjdCBpcF90dW5uZWwgKip0cCA9IGlwZ3JlX2J1Y2tldCh0KTsKKwlzdHJ1Y3QgaXBfdHVubmVsICoqdHAgPSBpcGdyZV9idWNrZXQoaWduLCB0KTsKIAogCXQtPm5leHQgPSAqdHA7CiAJd3JpdGVfbG9ja19iaCgmaXBncmVfbG9jayk7CkBAIC0yMjUsMTEgKzIzNSwxMSBAQAogCXdyaXRlX3VubG9ja19iaCgmaXBncmVfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwZ3JlX3R1bm5lbF91bmxpbmsoc3RydWN0IGlwX3R1bm5lbCAqdCkKK3N0YXRpYyB2b2lkIGlwZ3JlX3R1bm5lbF91bmxpbmsoc3RydWN0IGlwZ3JlX25ldCAqaWduLCBzdHJ1Y3QgaXBfdHVubmVsICp0KQogewogCXN0cnVjdCBpcF90dW5uZWwgKip0cDsKIAotCWZvciAodHAgPSBpcGdyZV9idWNrZXQodCk7ICp0cDsgdHAgPSAmKCp0cCktPm5leHQpIHsKKwlmb3IgKHRwID0gaXBncmVfYnVja2V0KGlnbiwgdCk7ICp0cDsgdHAgPSAmKCp0cCktPm5leHQpIHsKIAkJaWYgKHQgPT0gKnRwKSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZpcGdyZV9sb2NrKTsKIAkJCSp0cCA9IHQtPm5leHQ7CkBAIC0yMzksNyArMjQ5LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBncmVfdHVubmVsX2xvY2F0ZShzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0gKnBhcm1zLCBpbnQgY3JlYXRlKQorc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGdyZV90dW5uZWxfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCwKKwkJc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcywgaW50IGNyZWF0ZSkKIHsKIAlfX2JlMzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKIAlfX2JlMzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOwpAQCAtMjQ3LDggKzI1OCw5IEBACiAJc3RydWN0IGlwX3R1bm5lbCAqdCwgKip0cCwgKm50OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJY2hhciBuYW1lW0lGTkFNU0laXTsKKwlzdHJ1Y3QgaXBncmVfbmV0ICppZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwZ3JlX25ldF9pZCk7CiAKLQlmb3IgKHRwID0gX19pcGdyZV9idWNrZXQocGFybXMpOyAodCA9ICp0cCkgIT0gTlVMTDsgdHAgPSAmdC0+bmV4dCkgeworCWZvciAodHAgPSBfX2lwZ3JlX2J1Y2tldChpZ24sIHBhcm1zKTsgKHQgPSAqdHApICE9IE5VTEw7IHRwID0gJnQtPm5leHQpIHsKIAkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJiByZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyKSB7CiAJCQlpZiAoa2V5ID09IHQtPnBhcm1zLmlfa2V5KQogCQkJCXJldHVybiB0OwpAQCAtMjU5LDQxICsyNzEsNDIgQEAKIAogCWlmIChwYXJtcy0+bmFtZVswXSkKIAkJc3RybGNweShuYW1lLCBwYXJtcy0+bmFtZSwgSUZOQU1TSVopOwotCWVsc2UgewotCQlpbnQgaTsKLQkJZm9yIChpPTE7IGk8MTAwOyBpKyspIHsKLQkJCXNwcmludGYobmFtZSwgImdyZSVkIiwgaSk7Ci0JCQlpZiAoX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBuYW1lKSA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpPT0xMDApCi0JCQlnb3RvIGZhaWxlZDsKLQl9CisJZWxzZQorCQlzcHJpbnRmKG5hbWUsICJncmUlJWQiKTsKIAogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBpcGdyZV90dW5uZWxfc2V0dXApOwogCWlmICghZGV2KQogCSAgcmV0dXJuIE5VTEw7CiAKKwlkZXZfbmV0X3NldChkZXYsIG5ldCk7CisKKwlpZiAoc3RyY2hyKG5hbWUsICclJykpIHsKKwkJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgbmFtZSkgPCAwKQorCQkJZ290byBmYWlsZWRfZnJlZTsKKwl9CisKIAlkZXYtPmluaXQgPSBpcGdyZV90dW5uZWxfaW5pdDsKIAludCA9IG5ldGRldl9wcml2KGRldik7CiAJbnQtPnBhcm1zID0gKnBhcm1zOwogCi0JaWYgKHJlZ2lzdGVyX25ldGRldmljZShkZXYpIDwgMCkgewotCQlmcmVlX25ldGRldihkZXYpOwotCQlnb3RvIGZhaWxlZDsKLQl9CisJaWYgKHJlZ2lzdGVyX25ldGRldmljZShkZXYpIDwgMCkKKwkJZ290byBmYWlsZWRfZnJlZTsKIAogCWRldl9ob2xkKGRldik7Ci0JaXBncmVfdHVubmVsX2xpbmsobnQpOworCWlwZ3JlX3R1bm5lbF9saW5rKGlnbiwgbnQpOwogCXJldHVybiBudDsKIAotZmFpbGVkOgorZmFpbGVkX2ZyZWU6CisJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgaXBncmVfdHVubmVsX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWlwZ3JlX3R1bm5lbF91bmxpbmsobmV0ZGV2X3ByaXYoZGV2KSk7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBpcGdyZV9uZXQgKmlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKKworCWlwZ3JlX3R1bm5lbF91bmxpbmsoaWduLCBuZXRkZXZfcHJpdihkZXYpKTsKIAlkZXZfcHV0KGRldik7CiB9CiAKQEAgLTM2Nyw3ICszODAsOSBAQAogCX0KIAogCXJlYWRfbG9jaygmaXBncmVfbG9jayk7Ci0JdCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoaXBoLT5kYWRkciwgaXBoLT5zYWRkciwgKGZsYWdzJkdSRV9LRVkpID8gKigoKF9fYmUzMiopcCkgKyAoZ3JlaGxlbj4+MikgLSAxKSA6IDApOworCXQgPSBpcGdyZV90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAorCQkJKGZsYWdzJkdSRV9LRVkpID8KKwkJCSooKChfX2JlMzIqKXApICsgKGdyZWhsZW4+PjIpIC0gMSkgOiAwKTsKIAlpZiAodCA9PSBOVUxMIHx8IHQtPnBhcm1zLmlwaC5kYWRkciA9PSAwIHx8CiAJICAgIGlwdjRfaXNfbXVsdGljYXN0KHQtPnBhcm1zLmlwaC5kYWRkcikpCiAJCWdvdG8gb3V0OwpAQCAtNDgwLDcgKzQ5NSw3IEBACiAJZmwuZmw0X2RzdCA9IGVpcGgtPnNhZGRyOwogCWZsLmZsNF90b3MgPSBSVF9UT1MoZWlwaC0+dG9zKTsKIAlmbC5wcm90byA9IElQUFJPVE9fR1JFOwotCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7CisJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChza2ItPmRldiksICZydCwgJmZsKSkgewogCQlrZnJlZV9za2Ioc2tiMik7CiAJCXJldHVybjsKIAl9CkBAIC00OTMsNyArNTA4LDcgQEAKIAkJZmwuZmw0X2RzdCA9IGVpcGgtPmRhZGRyOwogCQlmbC5mbDRfc3JjID0gZWlwaC0+c2FkZHI7CiAJCWZsLmZsNF90b3MgPSBlaXBoLT50b3M7Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpIHx8CisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoc2tiLT5kZXYpLCAmcnQsICZmbCkgfHwKIAkJICAgIHJ0LT51LmRzdC5kZXYtPnR5cGUgIT0gQVJQSFJEX0lQR1JFKSB7CiAJCQlpcF9ydF9wdXQocnQpOwogCQkJa2ZyZWVfc2tiKHNrYjIpOwpAQCAtNjAwLDcgKzYxNSw4IEBACiAJfQogCiAJcmVhZF9sb2NrKCZpcGdyZV9sb2NrKTsKLQlpZiAoKHR1bm5lbCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwga2V5KSkgIT0gTlVMTCkgeworCWlmICgodHVubmVsID0gaXBncmVfdHVubmVsX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwKKwkJCQkJaXBoLT5zYWRkciwgaXBoLT5kYWRkciwga2V5KSkgIT0gTlVMTCkgewogCQlzZWNwYXRoX3Jlc2V0KHNrYik7CiAKIAkJc2tiLT5wcm90b2NvbCA9ICooX19iZTE2KikoaCArIDIpOwpAQCAtNjIzLDcgKzYzOSw3IEBACiAjaWZkZWYgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1QKIAkJaWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwaC0+ZGFkZHIpKSB7CiAJCQkvKiBMb29wZWQgYmFjayBwYWNrZXQsIGRyb3AgaXQhICovCi0JCQlpZiAoKChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdCktPmZsLmlpZiA9PSAwKQorCQkJaWYgKHNrYi0+cnRhYmxlLT5mbC5paWYgPT0gMCkKIAkJCQlnb3RvIGRyb3A7CiAJCQl0dW5uZWwtPnN0YXQubXVsdGljYXN0Kys7CiAJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0JST0FEQ0FTVDsKQEAgLTcwMyw3ICs3MTksNyBAQAogCQl9CiAKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCQlydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwkJCXJ0ID0gc2tiLT5ydGFibGU7CiAJCQlpZiAoKGRzdCA9IHJ0LT5ydF9nYXRld2F5KSA9PSAwKQogCQkJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAkJfQpAQCAtNzQ4LDcgKzc2NCw3IEBACiAJCQkJCQkuc2FkZHIgPSB0aXBoLT5zYWRkciwKIAkJCQkJCS50b3MgPSBSVF9UT1ModG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fR1JFIH07Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7CisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgJnJ0LCAmZmwpKSB7CiAJCQl0dW5uZWwtPnN0YXQudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWdvdG8gdHhfZXJyb3I7CiAJCX0KQEAgLTkyMSw3ICs5MzcsNyBAQAogCQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykgfSB9LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0dSRSB9OwogCQlzdHJ1Y3QgcnRhYmxlICpydDsKLQkJaWYgKCFpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7CisJCWlmICghaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkgewogCQkJdGRldiA9IHJ0LT51LmRzdC5kZXY7CiAJCQlpcF9ydF9wdXQocnQpOwogCQl9CkBAIC05MjksNyArOTQ1LDcgQEAKIAl9CiAKIAlpZiAoIXRkZXYgJiYgdHVubmVsLT5wYXJtcy5saW5rKQotCQl0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgdHVubmVsLT5wYXJtcy5saW5rKTsKKwkJdGRldiA9IF9fZGV2X2dldF9ieV9pbmRleChkZXZfbmV0KGRldiksIHR1bm5lbC0+cGFybXMubGluayk7CiAKIAlpZiAodGRldikgewogCQlobGVuID0gdGRldi0+aGFyZF9oZWFkZXJfbGVuOwpAQCAtOTU4LDE2ICs5NzQsMTggQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0gcDsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgaXBncmVfbmV0ICppZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwZ3JlX25ldF9pZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dFVFRVTk5FTDoKIAkJdCA9IE5VTEw7Ci0JCWlmIChkZXYgPT0gaXBncmVfZmJfdHVubmVsX2RldikgeworCQlpZiAoZGV2ID09IGlnbi0+ZmJfdHVubmVsX2RldikgewogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mKHApKSkgewogCQkJCWVyciA9IC1FRkFVTFQ7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl0ID0gaXBncmVfdHVubmVsX2xvY2F0ZSgmcCwgMCk7CisJCQl0ID0gaXBncmVfdHVubmVsX2xvY2F0ZShuZXQsICZwLCAwKTsKIAkJfQogCQlpZiAodCA9PSBOVUxMKQogCQkJdCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05OTksOSArMTAxNyw5IEBACiAJCWlmICghKHAub19mbGFncyZHUkVfS0VZKSkKIAkJCXAub19rZXkgPSAwOwogCi0JCXQgPSBpcGdyZV90dW5uZWxfbG9jYXRlKCZwLCBjbWQgPT0gU0lPQ0FERFRVTk5FTCk7CisJCXQgPSBpcGdyZV90dW5uZWxfbG9jYXRlKG5ldCwgJnAsIGNtZCA9PSBTSU9DQUREVFVOTkVMKTsKIAotCQlpZiAoZGV2ICE9IGlwZ3JlX2ZiX3R1bm5lbF9kZXYgJiYgY21kID09IFNJT0NDSEdUVU5ORUwpIHsKKwkJaWYgKGRldiAhPSBpZ24tPmZiX3R1bm5lbF9kZXYgJiYgY21kID09IFNJT0NDSEdUVU5ORUwpIHsKIAkJCWlmICh0ICE9IE5VTEwpIHsKIAkJCQlpZiAodC0+ZGV2ICE9IGRldikgewogCQkJCQllcnIgPSAtRUVYSVNUOwpAQCAtMTAyMSwxNCArMTAzOSwxNCBAQAogCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJaXBncmVfdHVubmVsX3VubGluayh0KTsKKwkJCQlpcGdyZV90dW5uZWxfdW5saW5rKGlnbiwgdCk7CiAJCQkJdC0+cGFybXMuaXBoLnNhZGRyID0gcC5pcGguc2FkZHI7CiAJCQkJdC0+cGFybXMuaXBoLmRhZGRyID0gcC5pcGguZGFkZHI7CiAJCQkJdC0+cGFybXMuaV9rZXkgPSBwLmlfa2V5OwogCQkJCXQtPnBhcm1zLm9fa2V5ID0gcC5vX2tleTsKIAkJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgJnAuaXBoLnNhZGRyLCA0KTsKIAkJCQltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZwLmlwaC5kYWRkciwgNCk7Ci0JCQkJaXBncmVfdHVubmVsX2xpbmsodCk7CisJCQkJaXBncmVfdHVubmVsX2xpbmsoaWduLCB0KTsKIAkJCQluZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7CiAJCQl9CiAJCX0KQEAgLTEwNTYsMTUgKzEwNzQsMTUgQEAKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJZ290byBkb25lOwogCi0JCWlmIChkZXYgPT0gaXBncmVfZmJfdHVubmVsX2RldikgeworCQlpZiAoZGV2ID09IGlnbi0+ZmJfdHVubmVsX2RldikgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsIHNpemVvZihwKSkpCiAJCQkJZ290byBkb25lOwogCQkJZXJyID0gLUVOT0VOVDsKLQkJCWlmICgodCA9IGlwZ3JlX3R1bm5lbF9sb2NhdGUoJnAsIDApKSA9PSBOVUxMKQorCQkJaWYgKCh0ID0gaXBncmVfdHVubmVsX2xvY2F0ZShuZXQsICZwLCAwKSkgPT0gTlVMTCkKIAkJCQlnb3RvIGRvbmU7CiAJCQllcnIgPSAtRVBFUk07Ci0JCQlpZiAodCA9PSBuZXRkZXZfcHJpdihpcGdyZV9mYl90dW5uZWxfZGV2KSkKKwkJCWlmICh0ID09IG5ldGRldl9wcml2KGlnbi0+ZmJfdHVubmVsX2RldikpCiAJCQkJZ290byBkb25lOwogCQkJZGV2ID0gdC0+ZGV2OwogCQl9CkBAIC0xMTc3LDcgKzExOTUsNyBAQAogCQkJCQkJLnRvcyA9IFJUX1RPUyh0LT5wYXJtcy5pcGgudG9zKSB9IH0sCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fR1JFIH07CiAJCXN0cnVjdCBydGFibGUgKnJ0OwotCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJCWRldiA9IHJ0LT51LmRzdC5kZXY7CiAJCWlwX3J0X3B1dChydCk7CkBAIC0xMTk0LDcgKzEyMTIsNyBAQAogCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmIChpcHY0X2lzX211bHRpY2FzdCh0LT5wYXJtcy5pcGguZGFkZHIpICYmIHQtPm1saW5rKSB7CiAJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQkJaW5fZGV2ID0gaW5ldGRldl9ieV9pbmRleChkZXYtPm5kX25ldCwgdC0+bWxpbmspOworCQlpbl9kZXYgPSBpbmV0ZGV2X2J5X2luZGV4KGRldl9uZXQoZGV2KSwgdC0+bWxpbmspOwogCQlpZiAoaW5fZGV2KSB7CiAJCQlpcF9tY19kZWNfZ3JvdXAoaW5fZGV2LCB0LT5wYXJtcy5pcGguZGFkZHIpOwogCQkJaW5fZGV2X3B1dChpbl9kZXYpOwpAQCAtMTIyMCw2ICsxMjM4LDcgQEAKIAlkZXYtPmZsYWdzCQk9IElGRl9OT0FSUDsKIAlkZXYtPmlmbGluawkJPSAwOwogCWRldi0+YWRkcl9sZW4JCT0gNDsKKwlkZXYtPmZlYXR1cmVzCQl8PSBORVRJRl9GX05FVE5TX0xPQ0FMOwogfQogCiBzdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMjU1LDEwICsxMjc0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlwZ3JlX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlwZ3JlX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKKwlzdHJ1Y3QgaXBncmVfbmV0ICppZ24gPSBuZXRfZ2VuZXJpYyhkZXZfbmV0KGRldiksIGlwZ3JlX25ldF9pZCk7CiAKIAl0dW5uZWwtPmRldiA9IGRldjsKIAlzdHJjcHkodHVubmVsLT5wYXJtcy5uYW1lLCBkZXYtPm5hbWUpOwpAQCAtMTI2OSw3ICsxMjg5LDcgQEAKIAl0dW5uZWwtPmhsZW4JCT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyA0OwogCiAJZGV2X2hvbGQoZGV2KTsKLQl0dW5uZWxzX3djWzBdCQk9IHR1bm5lbDsKKwlpZ24tPnR1bm5lbHNfd2NbMF0JPSB0dW5uZWw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNzcsOCArMTI5Nyw3NyBAQAogc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9jb2wgaXBncmVfcHJvdG9jb2wgPSB7CiAJLmhhbmRsZXIJPQlpcGdyZV9yY3YsCiAJLmVycl9oYW5kbGVyCT0JaXBncmVfZXJyLAorCS5uZXRuc19vawk9CTEsCiB9OwogCitzdGF0aWMgdm9pZCBpcGdyZV9kZXN0cm95X3R1bm5lbHMoc3RydWN0IGlwZ3JlX25ldCAqaWduKQoreworCWludCBwcmlvOworCisJZm9yIChwcmlvID0gMDsgcHJpbyA8IDQ7IHByaW8rKykgeworCQlpbnQgaDsKKwkJZm9yIChoID0gMDsgaCA8IEhBU0hfU0laRTsgaCsrKSB7CisJCQlzdHJ1Y3QgaXBfdHVubmVsICp0OworCQkJd2hpbGUgKCh0ID0gaWduLT50dW5uZWxzW3ByaW9dW2hdKSAhPSBOVUxMKQorCQkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHQtPmRldik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgaXBncmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCWludCBlcnI7CisJc3RydWN0IGlwZ3JlX25ldCAqaWduOworCisJZXJyID0gLUVOT01FTTsKKwlpZ24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBncmVfbmV0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGlnbiA9PSBOVUxMKQorCQlnb3RvIGVycl9hbGxvYzsKKworCWVyciA9IG5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIGlwZ3JlX25ldF9pZCwgaWduKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfYXNzaWduOworCisJaWduLT5mYl90dW5uZWxfZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsKSwgImdyZTAiLAorCQkJCQkgICBpcGdyZV90dW5uZWxfc2V0dXApOworCWlmICghaWduLT5mYl90dW5uZWxfZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2RldjsKKwl9CisKKwlpZ24tPmZiX3R1bm5lbF9kZXYtPmluaXQgPSBpcGdyZV9mYl90dW5uZWxfaW5pdDsKKwlkZXZfbmV0X3NldChpZ24tPmZiX3R1bm5lbF9kZXYsIG5ldCk7CisKKwlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihpZ24tPmZiX3R1bm5lbF9kZXYpKSkKKwkJZ290byBlcnJfcmVnX2RldjsKKworCXJldHVybiAwOworCitlcnJfcmVnX2RldjoKKwlmcmVlX25ldGRldihpZ24tPmZiX3R1bm5lbF9kZXYpOworZXJyX2FsbG9jX2RldjoKKwkvKiBub3RoaW5nICovCitlcnJfYXNzaWduOgorCWtmcmVlKGlnbik7CitlcnJfYWxsb2M6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaXBncmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBpcGdyZV9uZXQgKmlnbjsKKworCWlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKKwlydG5sX2xvY2soKTsKKwlpcGdyZV9kZXN0cm95X3R1bm5lbHMoaWduKTsKKwlydG5sX3VubG9jaygpOworCWtmcmVlKGlnbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBncmVfbmV0X29wcyA9IHsKKwkuaW5pdCA9IGlwZ3JlX2luaXRfbmV0LAorCS5leGl0ID0gaXBncmVfZXhpdF9uZXQsCit9OwogCiAvKgogICoJQW5kIG5vdyB0aGUgbW9kdWxlcyBjb2RlIGFuZCBrZXJuZWwgaW50ZXJmYWNlLgpAQCAtMTI5NSwzOCArMTM4NCwxMSBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQlpcGdyZV9mYl90dW5uZWxfZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaXBfdHVubmVsKSwgImdyZTAiLAotCQkJCQkgICBpcGdyZV90dW5uZWxfc2V0dXApOwotCWlmICghaXBncmVfZmJfdHVubmVsX2RldikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycjE7Ci0JfQorCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZpcGdyZV9uZXRfaWQsICZpcGdyZV9uZXRfb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJaW5ldF9kZWxfcHJvdG9jb2woJmlwZ3JlX3Byb3RvY29sLCBJUFBST1RPX0dSRSk7CiAKLQlpcGdyZV9mYl90dW5uZWxfZGV2LT5pbml0ID0gaXBncmVfZmJfdHVubmVsX2luaXQ7Ci0KLQlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihpcGdyZV9mYl90dW5uZWxfZGV2KSkpCi0JCWdvdG8gZXJyMjsKLW91dDoKIAlyZXR1cm4gZXJyOwotZXJyMjoKLQlmcmVlX25ldGRldihpcGdyZV9mYl90dW5uZWxfZGV2KTsKLWVycjE6Ci0JaW5ldF9kZWxfcHJvdG9jb2woJmlwZ3JlX3Byb3RvY29sLCBJUFBST1RPX0dSRSk7Ci0JZ290byBvdXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcGdyZV9kZXN0cm95X3R1bm5lbHModm9pZCkKLXsKLQlpbnQgcHJpbzsKLQotCWZvciAocHJpbyA9IDA7IHByaW8gPCA0OyBwcmlvKyspIHsKLQkJaW50IGg7Ci0JCWZvciAoaCA9IDA7IGggPCBIQVNIX1NJWkU7IGgrKykgewotCQkJc3RydWN0IGlwX3R1bm5lbCAqdDsKLQkJCXdoaWxlICgodCA9IHR1bm5lbHNbcHJpb11baF0pICE9IE5VTEwpCi0JCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodC0+ZGV2KTsKLQkJfQotCX0KIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlwZ3JlX2Zpbmkodm9pZCkKQEAgLTEzMzQsOSArMTM5Niw3IEBACiAJaWYgKGluZXRfZGVsX3Byb3RvY29sKCZpcGdyZV9wcm90b2NvbCwgSVBQUk9UT19HUkUpIDwgMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaXBncmUgY2xvc2U6IGNhbid0IHJlbW92ZSBwcm90b2NvbFxuIik7CiAKLQlydG5sX2xvY2soKTsKLQlpcGdyZV9kZXN0cm95X3R1bm5lbHMoKTsKLQlydG5sX3VubG9jaygpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoaXBncmVfbmV0X2lkLCAmaXBncmVfbmV0X29wcyk7CiB9CiAKIG1vZHVsZV9pbml0KGlwZ3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfaW5wdXQuYyBiL25ldC9pcHY0L2lwX2lucHV0LmMKaW5kZXggNjU2MzEzOS4uN2I0YmFkNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfaW5wdXQuYworKysgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCkBAIC0xNjAsNiArMTYwLDcgQEAKIAlzdHJ1Y3QgaXBfcmFfY2hhaW4gKnJhOwogCXU4IHByb3RvY29sID0gaXBfaGRyKHNrYiktPnByb3RvY29sOwogCXN0cnVjdCBzb2NrICpsYXN0ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAKIAlyZWFkX2xvY2soJmlwX3JhX2xvY2spOwogCWZvciAocmEgPSBpcF9yYV9jaGFpbjsgcmE7IHJhID0gcmEtPm5leHQpIHsKQEAgLTE3MCw3ICsxNzEsOCBAQAogCQkgKi8KIAkJaWYgKHNrICYmIGluZXRfc2soc2spLT5udW0gPT0gcHJvdG9jb2wgJiYKIAkJICAgICghc2stPnNrX2JvdW5kX2Rldl9pZiB8fAotCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2tiLT5kZXYtPmlmaW5kZXgpKSB7CisJCSAgICAgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkZXYtPmlmaW5kZXgpICYmCisJCSAgICBzb2NrX25ldChzaykgPT0gZGV2X25ldChkZXYpKSB7CiAJCQlpZiAoaXBfaGRyKHNrYiktPmZyYWdfb2ZmICYgaHRvbnMoSVBfTUYgfCBJUF9PRkZTRVQpKSB7CiAJCQkJaWYgKGlwX2RlZnJhZyhza2IsIElQX0RFRlJBR19DQUxMX1JBX0NIQUlOKSkgewogCQkJCQlyZWFkX3VubG9jaygmaXBfcmFfbG9jayk7CkBAIC0xOTcsNiArMTk5LDggQEAKIAogc3RhdGljIGludCBpcF9sb2NhbF9kZWxpdmVyX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOworCiAJX19za2JfcHVsbChza2IsIGlwX2hkcmxlbihza2IpKTsKIAogCS8qIFBvaW50IGludG8gdGhlIElQIGRhdGFncmFtLCBqdXN0IHBhc3QgdGhlIGhlYWRlci4gKi8KQEAgLTIxMiw3ICsyMTYsOCBAQAogCQlyYXcgPSByYXdfbG9jYWxfZGVsaXZlcihza2IsIHByb3RvY29sKTsKIAogCQloYXNoID0gcHJvdG9jb2wgJiAoTUFYX0lORVRfUFJPVE9TIC0gMSk7Ci0JCWlmICgoaXBwcm90ID0gcmN1X2RlcmVmZXJlbmNlKGluZXRfcHJvdG9zW2hhc2hdKSkgIT0gTlVMTCkgeworCQlpcHByb3QgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9wcm90b3NbaGFzaF0pOworCQlpZiAoaXBwcm90ICE9IE5VTEwgJiYgKG5ldCA9PSAmaW5pdF9uZXQgfHwgaXBwcm90LT5uZXRuc19vaykpIHsKIAkJCWludCByZXQ7CiAKIAkJCWlmICghaXBwcm90LT5ub19wb2xpY3kpIHsKQEAgLTI4MywxMyArMjg4LDE0IEBACiAJfQogCiAJaXBoID0gaXBfaGRyKHNrYik7CisJb3B0ID0gJihJUENCKHNrYiktPm9wdCk7CisJb3B0LT5vcHRsZW4gPSBpcGgtPmlobCo0IC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiAKLQlpZiAoaXBfb3B0aW9uc19jb21waWxlKE5VTEwsIHNrYikpIHsKKwlpZiAoaXBfb3B0aW9uc19jb21waWxlKGRldl9uZXQoZGV2KSwgb3B0LCBza2IpKSB7CiAJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlvcHQgPSAmKElQQ0Ioc2tiKS0+b3B0KTsKIAlpZiAodW5saWtlbHkob3B0LT5zcnIpKSB7CiAJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoZGV2KTsKIAkJaWYgKGluX2RldikgewpAQCAtMjk3LDcgKzMwMyw3IEBACiAJCQkJaWYgKElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KSAmJgogCQkJCSAgICBuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCXByaW50ayhLRVJOX0lORk8gInNvdXJjZSByb3V0ZSBvcHRpb24gIgotCQkJCQkgICAgICAgIiV1LiV1LiV1LiV1IC0+ICV1LiV1LiV1LiV1XG4iLAorCQkJCQkgICAgICAgTklQUVVBRF9GTVQgIiAtPiAiIE5JUFFVQURfRk1UICJcbiIsCiAJCQkJCSAgICAgICBOSVBRVUFEKGlwaC0+c2FkZHIpLAogCQkJCQkgICAgICAgTklQUVVBRChpcGgtPmRhZGRyKSk7CiAJCQkJaW5fZGV2X3B1dChpbl9kZXYpOwpAQCAtMzUxLDcgKzM1Nyw3IEBACiAJaWYgKGlwaC0+aWhsID4gNSAmJiBpcF9yY3Zfb3B0aW9ucyhza2IpKQogCQlnb3RvIGRyb3A7CiAKLQlydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwlydCA9IHNrYi0+cnRhYmxlOwogCWlmIChydC0+cnRfdHlwZSA9PSBSVE5fTVVMVElDQVNUKQogCQlJUF9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5NQ0FTVFBLVFMpOwogCWVsc2UgaWYgKHJ0LT5ydF90eXBlID09IFJUTl9CUk9BRENBU1QpCkBAIC0zNzIsOSArMzc4LDYgQEAKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAl1MzIgbGVuOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKLQkJZ290byBkcm9wOwotCiAJLyogV2hlbiB0aGUgaW50ZXJmYWNlIGlzIGluIHByb21pc2MuIG1vZGUsIGRyb3AgYWxsIHRoZSBjcmFwCiAJICogdGhhdCBpdCByZWNlaXZlcywgZG8gbm90IHRyeSB0byBhbmFseXNlIGl0LgogCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jIGIvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCmluZGV4IDRkMzE1MTUuLmQxMDc1NDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX29wdGlvbnMuYworKysgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAltZW1jcHkoJihJUENCKHNrYiktPm9wdCksIG9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSk7CiAJbWVtY3B5KGlwaCtzaXplb2Yoc3RydWN0IGlwaGRyKSwgb3B0LT5fX2RhdGEsIG9wdC0+b3B0bGVuKTsKIAlvcHQgPSAmKElQQ0Ioc2tiKS0+b3B0KTsKLQlvcHQtPmlzX2RhdGEgPSAwOwogCiAJaWYgKG9wdC0+c3JyKQogCQltZW1jcHkoaXBoK29wdC0+c3JyK2lwaFtvcHQtPnNycisxXS00LCAmZGFkZHIsIDQpOwpAQCAtOTUsOCArOTQsNiBAQAogCiAJbWVtc2V0KGRvcHQsIDAsIHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykpOwogCi0JZG9wdC0+aXNfZGF0YSA9IDE7Ci0KIAlzb3B0ID0gJihJUENCKHNrYiktPm9wdCk7CiAKIAlpZiAoc29wdC0+b3B0bGVuID09IDApIHsKQEAgLTEwNywxMCArMTA0LDcgQEAKIAlzcHRyID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CiAJZHB0ciA9IGRvcHQtPl9fZGF0YTsKIAotCWlmIChza2ItPmRzdCkKLQkJZGFkZHIgPSAoKHN0cnVjdCBydGFibGUqKXNrYi0+ZHN0KS0+cnRfc3BlY19kc3Q7Ci0JZWxzZQotCQlkYWRkciA9IGlwX2hkcihza2IpLT5kYWRkcjsKKwlkYWRkciA9IHNrYi0+cnRhYmxlLT5ydF9zcGVjX2RzdDsKIAogCWlmIChzb3B0LT5ycikgewogCQlvcHRsZW4gID0gc3B0cltzb3B0LT5ycisxXTsKQEAgLTE1MSw3ICsxNDUsNyBAQAogCQkJCQkJX19iZTMyIGFkZHI7CiAKIAkJCQkJCW1lbWNweSgmYWRkciwgc3B0citzb2Zmc2V0LTEsIDQpOwotCQkJCQkJaWYgKGluZXRfYWRkcl90eXBlKCZpbml0X25ldCwgYWRkcikgIT0gUlROX0xPQ0FMKSB7CisJCQkJCQlpZiAoaW5ldF9hZGRyX3R5cGUoZGV2X25ldChza2ItPmRzdC0+ZGV2KSwgYWRkcikgIT0gUlROX0xPQ0FMKSB7CiAJCQkJCQkJZG9wdC0+dHNfbmVlZHRpbWUgPSAxOwogCQkJCQkJCXNvZmZzZXQgKz0gODsKIAkJCQkJCX0KQEAgLTI1NCwyNiArMjQ4LDIyIEBACiAgKiBJZiBvcHQgPT0gTlVMTCwgdGhlbiBza2ItPmRhdGEgc2hvdWxkIHBvaW50IHRvIElQIGhlYWRlci4KICAqLwogCi1pbnQgaXBfb3B0aW9uc19jb21waWxlKHN0cnVjdCBpcF9vcHRpb25zICogb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikKK2ludCBpcF9vcHRpb25zX2NvbXBpbGUoc3RydWN0IG5ldCAqbmV0LAorCQkgICAgICAgc3RydWN0IGlwX29wdGlvbnMgKiBvcHQsIHN0cnVjdCBza19idWZmICogc2tiKQogewogCWludCBsOwogCXVuc2lnbmVkIGNoYXIgKiBpcGg7CiAJdW5zaWduZWQgY2hhciAqIG9wdHB0cjsKIAlpbnQgb3B0bGVuOwogCXVuc2lnbmVkIGNoYXIgKiBwcF9wdHIgPSBOVUxMOwotCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiID8gKHN0cnVjdCBydGFibGUqKXNrYi0+ZHN0IDogTlVMTDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7CiAKLQlpZiAoIW9wdCkgewotCQlvcHQgPSAmKElQQ0Ioc2tiKS0+b3B0KTsKLQkJaXBoID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7Ci0JCW9wdC0+b3B0bGVuID0gKChzdHJ1Y3QgaXBoZHIgKilpcGgpLT5paGwqNCAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwotCQlvcHRwdHIgPSBpcGggKyBzaXplb2Yoc3RydWN0IGlwaGRyKTsKLQkJb3B0LT5pc19kYXRhID0gMDsKLQl9IGVsc2UgewotCQlvcHRwdHIgPSBvcHQtPmlzX2RhdGEgPyBvcHQtPl9fZGF0YSA6Ci0JCQkJCSh1bnNpZ25lZCBjaGFyICopJihpcF9oZHIoc2tiKVsxXSk7Ci0JCWlwaCA9IG9wdHB0ciAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwotCX0KKwlpZiAoc2tiICE9IE5VTEwpIHsKKwkJcnQgPSBza2ItPnJ0YWJsZTsKKwkJb3B0cHRyID0gKHVuc2lnbmVkIGNoYXIgKikmKGlwX2hkcihza2IpWzFdKTsKKwl9IGVsc2UKKwkJb3B0cHRyID0gb3B0LT5fX2RhdGE7CisJaXBoID0gb3B0cHRyIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiAKIAlmb3IgKGwgPSBvcHQtPm9wdGxlbjsgbCA+IDA7ICkgewogCQlzd2l0Y2ggKCpvcHRwdHIpIHsKQEAgLTQwMCw3ICszOTAsNyBAQAogCQkJCQl7CiAJCQkJCQlfX2JlMzIgYWRkcjsKIAkJCQkJCW1lbWNweSgmYWRkciwgJm9wdHB0cltvcHRwdHJbMl0tMV0sIDQpOwotCQkJCQkJaWYgKGluZXRfYWRkcl90eXBlKCZpbml0X25ldCwgYWRkcikgPT0gUlROX1VOSUNBU1QpCisJCQkJCQlpZiAoaW5ldF9hZGRyX3R5cGUobmV0LCBhZGRyKSA9PSBSVE5fVU5JQ0FTVCkKIAkJCQkJCQlicmVhazsKIAkJCQkJCWlmIChza2IpCiAJCQkJCQkJdGltZXB0ciA9IChfX2JlMzIqKSZvcHRwdHJbb3B0cHRyWzJdKzNdOwpAQCAtNTE3LDE0ICs1MDcsMTMgQEAKIAkJICAgICAgIEdGUF9LRVJORUwpOwogfQogCi1zdGF0aWMgaW50IGlwX29wdGlvbnNfZ2V0X2ZpbmlzaChzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdHAsCitzdGF0aWMgaW50IGlwX29wdGlvbnNfZ2V0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKIAkJCQkgc3RydWN0IGlwX29wdGlvbnMgKm9wdCwgaW50IG9wdGxlbikKIHsKIAl3aGlsZSAob3B0bGVuICYgMykKIAkJb3B0LT5fX2RhdGFbb3B0bGVuKytdID0gSVBPUFRfRU5EOwogCW9wdC0+b3B0bGVuID0gb3B0bGVuOwotCW9wdC0+aXNfZGF0YSA9IDE7Ci0JaWYgKG9wdGxlbiAmJiBpcF9vcHRpb25zX2NvbXBpbGUob3B0LCBOVUxMKSkgeworCWlmIChvcHRsZW4gJiYgaXBfb3B0aW9uc19jb21waWxlKG5ldCwgb3B0LCBOVUxMKSkgewogCQlrZnJlZShvcHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MzMsNyArNTIyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdHAsIHVuc2lnbmVkIGNoYXIgX191c2VyICpkYXRhLCBpbnQgb3B0bGVuKQoraW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKKwkJCSAgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRhdGEsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IGlwX29wdGlvbnNfZ2V0X2FsbG9jKG9wdGxlbik7CiAKQEAgLTU0MywxMCArNTMzLDExIEBACiAJCWtmcmVlKG9wdCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlyZXR1cm4gaXBfb3B0aW9uc19nZXRfZmluaXNoKG9wdHAsIG9wdCwgb3B0bGVuKTsKKwlyZXR1cm4gaXBfb3B0aW9uc19nZXRfZmluaXNoKG5ldCwgb3B0cCwgb3B0LCBvcHRsZW4pOwogfQogCi1pbnQgaXBfb3B0aW9uc19nZXQoc3RydWN0IGlwX29wdGlvbnMgKipvcHRwLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgb3B0bGVuKQoraW50IGlwX29wdGlvbnNfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX29wdGlvbnMgKipvcHRwLAorCQkgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBpcF9vcHRpb25zX2dldF9hbGxvYyhvcHRsZW4pOwogCkBAIC01NTQsMTQgKzU0NSwxNCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAob3B0bGVuKQogCQltZW1jcHkob3B0LT5fX2RhdGEsIGRhdGEsIG9wdGxlbik7Ci0JcmV0dXJuIGlwX29wdGlvbnNfZ2V0X2ZpbmlzaChvcHRwLCBvcHQsIG9wdGxlbik7CisJcmV0dXJuIGlwX29wdGlvbnNfZ2V0X2ZpbmlzaChuZXQsIG9wdHAsIG9wdCwgb3B0bGVuKTsKIH0KIAogdm9pZCBpcF9mb3J3YXJkX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgICBpcF9vcHRpb25zICogb3B0CT0gJihJUENCKHNrYiktPm9wdCk7CiAJdW5zaWduZWQgY2hhciAqIG9wdHB0cjsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCXVuc2lnbmVkIGNoYXIgKnJhdyA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwogCiAJaWYgKG9wdC0+cnJfbmVlZGFkZHIpIHsKQEAgLTYwOSw3ICs2MDAsNyBAQAogCV9fYmUzMiBuZXh0aG9wOwogCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJdW5zaWduZWQgY2hhciAqb3B0cHRyID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvcHQtPnNycjsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCXN0cnVjdCBydGFibGUgKnJ0MjsKIAlpbnQgZXJyOwogCkBAIC02MzQsMTMgKzYyNSwxMyBAQAogCQl9CiAJCW1lbWNweSgmbmV4dGhvcCwgJm9wdHB0cltzcnJwdHItMV0sIDQpOwogCi0JCXJ0ID0gKHN0cnVjdCBydGFibGUqKXNrYi0+ZHN0OwotCQlza2ItPmRzdCA9IE5VTEw7CisJCXJ0ID0gc2tiLT5ydGFibGU7CisJCXNrYi0+cnRhYmxlID0gTlVMTDsKIAkJZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiLCBuZXh0aG9wLCBpcGgtPnNhZGRyLCBpcGgtPnRvcywgc2tiLT5kZXYpOwotCQlydDIgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CisJCXJ0MiA9IHNrYi0+cnRhYmxlOwogCQlpZiAoZXJyIHx8IChydDItPnJ0X3R5cGUgIT0gUlROX1VOSUNBU1QgJiYgcnQyLT5ydF90eXBlICE9IFJUTl9MT0NBTCkpIHsKIAkJCWlwX3J0X3B1dChydDIpOwotCQkJc2tiLT5kc3QgPSAmcnQtPnUuZHN0OworCQkJc2tiLT5ydGFibGUgPSBydDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlwX3J0X3B1dChydCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDM0MTc3OWU2OC4uMDgzNDkyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQkJICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgc3RydWN0IGlwX29wdGlvbnMgKm9wdCkKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0OworCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CiAJc3RydWN0IGlwaGRyICppcGg7CiAKIAkvKiBCdWlsZCB0aGUgSVAgaGVhZGVyLiAqLwpAQCAtMjQwLDcgKzI0MCw3IEBACiBpbnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBydC0+dS5kc3QuZGV2OwogCiAJLyoKQEAgLTMyMSw3ICszMjEsNyBAQAogCS8qIFNraXAgYWxsIG9mIHRoaXMgaWYgdGhlIHBhY2tldCBpcyBhbHJlYWR5IHJvdXRlZCwKIAkgKiBmLmUuIGJ5IHNvbWV0aGluZyBsaWtlIFNDVFAuCiAJICovCi0JcnQgPSAoc3RydWN0IHJ0YWJsZSAqKSBza2ItPmRzdDsKKwlydCA9IHNrYi0+cnRhYmxlOwogCWlmIChydCAhPSBOVUxMKQogCQlnb3RvIHBhY2tldF9yb3V0ZWQ7CiAKQEAgLTM1MSw3ICszNTEsNyBAQAogCQkJICogaXRzZWxmIG91dC4KIAkJCSAqLwogCQkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKLQkJCWlmIChpcF9yb3V0ZV9vdXRwdXRfZmxvdygmaW5pdF9uZXQsICZydCwgJmZsLCBzaywgMCkpCisJCQlpZiAoaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCAmcnQsICZmbCwgc2ssIDApKQogCQkJCWdvdG8gbm9fcm91dGU7CiAJCX0KIAkJc2tfc2V0dXBfY2FwcyhzaywgJnJ0LT51LmRzdCk7CkBAIC00NDEsNyArNDQxLDcgQEAKIAl1bnNpZ25lZCBpbnQgbXR1LCBobGVuLCBsZWZ0LCBsZW4sIGxsX3JzLCBwYWQ7CiAJaW50IG9mZnNldDsKIAlfX2JlMTYgbm90X2xhc3RfZnJhZzsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCWludCBlcnIgPSAwOwogCiAJZGV2ID0gcnQtPnUuZHN0LmRldjsKQEAgLTgyNSw3ICs4MjUsNyBAQAogCQlpbmV0LT5jb3JrLmZyYWdzaXplID0gbXR1ID0gaW5ldC0+cG10dWRpc2MgPT0gSVBfUE1UVURJU0NfUFJPQkUgPwogCQkJCQkgICAgcnQtPnUuZHN0LmRldi0+bXR1IDoKIAkJCQkJICAgIGRzdF9tdHUocnQtPnUuZHN0LnBhdGgpOwotCQlpbmV0LT5jb3JrLnJ0ID0gcnQ7CisJCWluZXQtPmNvcmsuZHN0ID0gJnJ0LT51LmRzdDsKIAkJaW5ldC0+Y29yay5sZW5ndGggPSAwOwogCQlzay0+c2tfc25kbXNnX3BhZ2UgPSBOVUxMOwogCQlzay0+c2tfc25kbXNnX29mZiA9IDA7CkBAIC04MzQsNyArODM0LDcgQEAKIAkJCXRyYW5zaGRybGVuICs9IGV4dGhkcmxlbjsKIAkJfQogCX0gZWxzZSB7Ci0JCXJ0ID0gaW5ldC0+Y29yay5ydDsKKwkJcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWluZXQtPmNvcmsuZHN0OwogCQlpZiAoaW5ldC0+Y29yay5mbGFncyAmIElQQ09SS19PUFQpCiAJCQlvcHQgPSBpbmV0LT5jb3JrLm9wdDsKIApAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfd3JpdGVfcXVldWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ0ID0gaW5ldC0+Y29yay5ydDsKKwlydCA9IChzdHJ1Y3QgcnRhYmxlICopaW5ldC0+Y29yay5kc3Q7CiAJaWYgKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfT1BUKQogCQlvcHQgPSBpbmV0LT5jb3JrLm9wdDsKIApAQCAtMTIwOCwxMCArMTIwOCw4IEBACiAJaW5ldC0+Y29yay5mbGFncyAmPSB+SVBDT1JLX09QVDsKIAlrZnJlZShpbmV0LT5jb3JrLm9wdCk7CiAJaW5ldC0+Y29yay5vcHQgPSBOVUxMOwotCWlmIChpbmV0LT5jb3JrLnJ0KSB7Ci0JCWlwX3J0X3B1dChpbmV0LT5jb3JrLnJ0KTsKLQkJaW5ldC0+Y29yay5ydCA9IE5VTEw7Ci0JfQorCWRzdF9yZWxlYXNlKGluZXQtPmNvcmsuZHN0KTsKKwlpbmV0LT5jb3JrLmRzdCA9IE5VTEw7CiB9CiAKIC8qCkBAIC0xMjI0LDcgKzEyMjIsNyBAQAogCXN0cnVjdCBza19idWZmICoqdGFpbF9za2I7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOwotCXN0cnVjdCBydGFibGUgKnJ0ID0gaW5ldC0+Y29yay5ydDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopaW5ldC0+Y29yay5kc3Q7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJX19iZTE2IGRmID0gMDsKIAlfX3U4IHR0bDsKQEAgLTEzNTcsNyArMTM1NSw3IEBACiAJfSByZXBseW9wdHM7CiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKIAlfX2JlMzIgZGFkZHI7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKIAogCWlmIChpcF9vcHRpb25zX2VjaG8oJnJlcGx5b3B0cy5vcHQsIHNrYikpCiAJCXJldHVybjsKQEAgLTEzODQsNyArMTM4Miw3IEBACiAJCQkJCQkgLmRwb3J0ID0gdGNwX2hkcihza2IpLT5zb3VyY2UgfSB9LAogCQkJCSAgICAucHJvdG8gPSBzay0+c2tfcHJvdG9jb2wgfTsKIAkJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCAmZmwpOwotCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShzay0+c2tfbmV0LCAmcnQsICZmbCkpCisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KHNvY2tfbmV0KHNrKSwgJnJ0LCAmZmwpKQogCQkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggZGUwNTcyYy4uZDhhZGZkNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC01Nyw3ICs1Nyw3IEBACiBzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfcGt0aW5mbyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGluX3BrdGluZm8gaW5mbzsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3Q7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKIAogCWluZm8uaXBpX2FkZHIuc19hZGRyID0gaXBfaGRyKHNrYiktPmRhZGRyOwogCWlmIChydCkgewpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCWlwX2Ntc2dfcmVjdl9zZWN1cml0eShtc2csIHNrYik7CiB9CiAKLWludCBpcF9jbXNnX3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYykKK2ludCBpcF9jbXNnX3NlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjKQogewogCWludCBlcnI7CiAJc3RydWN0IGNtc2doZHIgKmNtc2c7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJc3dpdGNoIChjbXNnLT5jbXNnX3R5cGUpIHsKIAkJY2FzZSBJUF9SRVRPUFRTOgogCQkJZXJyID0gY21zZy0+Y21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpOwotCQkJZXJyID0gaXBfb3B0aW9uc19nZXQoJmlwYy0+b3B0LCBDTVNHX0RBVEEoY21zZyksIGVyciA8IDQwID8gZXJyIDogNDApOworCQkJZXJyID0gaXBfb3B0aW9uc19nZXQobmV0LCAmaXBjLT5vcHQsIENNU0dfREFUQShjbXNnKSwgZXJyIDwgNDAgPyBlcnIgOiA0MCk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCQlicmVhazsKQEAgLTQ0OSw3ICs0NDksOCBAQAogCQlzdHJ1Y3QgaXBfb3B0aW9ucyAqIG9wdCA9IE5VTEw7CiAJCWlmIChvcHRsZW4gPiA0MCB8fCBvcHRsZW4gPCAwKQogCQkJZ290byBlX2ludmFsOwotCQllcnIgPSBpcF9vcHRpb25zX2dldF9mcm9tX3VzZXIoJm9wdCwgb3B0dmFsLCBvcHRsZW4pOworCQllcnIgPSBpcF9vcHRpb25zX2dldF9mcm9tX3VzZXIoc29ja19uZXQoc2spLCAmb3B0LAorCQkJCQkgICAgICAgb3B0dmFsLCBvcHRsZW4pOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJCWlmIChpbmV0LT5pc19pY3NrKSB7CkBAIC01ODMsMTkgKzU4NCwxOSBAQAogCQl9CiAKIAkJaWYgKCFtcmVxLmltcl9pZmluZGV4KSB7Ci0JCQlpZiAobXJlcS5pbXJfYWRkcmVzcy5zX2FkZHIgPT0gSU5BRERSX0FOWSkgeworCQkJaWYgKG1yZXEuaW1yX2FkZHJlc3Muc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpKSB7CiAJCQkJaW5ldC0+bWNfaW5kZXggPSAwOwogCQkJCWluZXQtPm1jX2FkZHIgID0gMDsKIAkJCQllcnIgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotCQkJZGV2ID0gaXBfZGV2X2ZpbmQoJmluaXRfbmV0LCBtcmVxLmltcl9hZGRyZXNzLnNfYWRkcik7CisJCQlkZXYgPSBpcF9kZXZfZmluZChzb2NrX25ldChzayksIG1yZXEuaW1yX2FkZHJlc3Muc19hZGRyKTsKIAkJCWlmIChkZXYpIHsKIAkJCQltcmVxLmltcl9pZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCQkJCWRldl9wdXQoZGV2KTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBtcmVxLmltcl9pZmluZGV4KTsKKwkJCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIG1yZXEuaW1yX2lmaW5kZXgpOwogCiAKIAkJZXJyID0gLUVBRERSTk9UQVZBSUw7CkBAIC0xMTMyLDcgKzExMzMsNyBAQAogCX0KIAlyZWxlYXNlX3NvY2soc2spOwogCi0JaWYgKGxlbiA8IHNpemVvZihpbnQpICYmIGxlbiA+IDAgJiYgdmFsPj0wICYmIHZhbDwyNTUpIHsKKwlpZiAobGVuIDwgc2l6ZW9mKGludCkgJiYgbGVuID4gMCAmJiB2YWw+PTAgJiYgdmFsPD0yNTUpIHsKIAkJdW5zaWduZWQgY2hhciB1Y3ZhbCA9ICh1bnNpZ25lZCBjaGFyKXZhbDsKIAkJbGVuID0gMTsKIAkJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29tcC5jIGIvbmV0L2lwdjQvaXBjb21wLmMKaW5kZXggYWUxZjQ1Zi4uYTc1ODA3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb21wLmMKKysrIGIvbmV0L2lwdjQvaXBjb21wLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqICAgLSBBZGFwdGl2ZSBjb21wcmVzc2lvbi4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wZmtleXYyLmg+CkBAIC0xMDgsOCArMTA3LDExIEBACiAJY29uc3QgaW50IGNwdSA9IGdldF9jcHUoKTsKIAl1OCAqc2NyYXRjaCA9ICpwZXJfY3B1X3B0cihpcGNvbXBfc2NyYXRjaGVzLCBjcHUpOwogCXN0cnVjdCBjcnlwdG9fY29tcCAqdGZtID0gKnBlcl9jcHVfcHRyKGlwY2QtPnRmbXMsIGNwdSk7Ci0JaW50IGVyciA9IGNyeXB0b19jb21wX2NvbXByZXNzKHRmbSwgc3RhcnQsIHBsZW4sIHNjcmF0Y2gsICZkbGVuKTsKKwlpbnQgZXJyOwogCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWVyciA9IGNyeXB0b19jb21wX2NvbXByZXNzKHRmbSwgc3RhcnQsIHBsZW4sIHNjcmF0Y2gsICZkbGVuKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMTc2LDcgKzE3OCw3IEBACiAJCQkgICAgICBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVCk7CiAJaWYgKCF4KQogCQlyZXR1cm47Ci0JTkVUREVCVUcoS0VSTl9ERUJVRyAicG10dSBkaXNjb3Zlcnkgb24gU0EgSVBDT01QLyUwOHgvJXUuJXUuJXUuJXVcbiIsCisJTkVUREVCVUcoS0VSTl9ERUJVRyAicG10dSBkaXNjb3Zlcnkgb24gU0EgSVBDT01QLyUwOHgvIiBOSVBRVUFEX0ZNVCAiXG4iLAogCQkgc3BpLCBOSVBRVUFEKGlwaC0+ZGFkZHIpKTsKIAl4ZnJtX3N0YXRlX3B1dCh4KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29uZmlnLmMgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCmluZGV4IGE1MmI1ODUuLjBmNDJkMWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29uZmlnLmMKKysrIGIvbmV0L2lwdjQvaXBjb25maWcuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiAJCQkJCSAgIC0gJzMnIGZyb20gcmVzb2x2LmggKi8KIAogI2RlZmluZSBOT05FIF9fY29uc3RhbnRfaHRvbmwoSU5BRERSX05PTkUpCisjZGVmaW5lIEFOWSBfX2NvbnN0YW50X2h0b25sKElOQUREUl9BTlkpCiAKIC8qCiAgKiBQdWJsaWMgSVAgY29uZmlndXJhdGlvbgpAQCAtMjkxLDcgKzI5Miw3IEBACiAKIAltbV9zZWdtZW50X3Qgb2xkZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoZ2V0X2RzKCkpOwotCXJlcyA9IGRldmluZXRfaW9jdGwoY21kLCAoc3RydWN0IGlmcmVxIF9fdXNlciAqKSBhcmcpOworCXJlcyA9IGRldmluZXRfaW9jdGwoJmluaXRfbmV0LCBjbWQsIChzdHJ1Y3QgaWZyZXEgX191c2VyICopIGFyZyk7CiAJc2V0X2ZzKG9sZGZzKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMzc1LDcgKzM3Niw3IEBACiAJICovCiAKIAlpZiAoIWljX2hvc3RfbmFtZV9zZXQpCi0JCXNwcmludGYoaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLCAiJXUuJXUuJXUuJXUiLCBOSVBRVUFEKGljX215YWRkcikpOworCQlzcHJpbnRmKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwgTklQUVVBRF9GTVQsIE5JUFFVQUQoaWNfbXlhZGRyKSk7CiAKIAlpZiAocm9vdF9zZXJ2ZXJfYWRkciA9PSBOT05FKQogCQlyb290X3NlcnZlcl9hZGRyID0gaWNfc2VydmFkZHI7CkBAIC0zODgsMTEgKzM4OSwxMSBAQAogCQllbHNlIGlmIChJTl9DTEFTU0MobnRvaGwoaWNfbXlhZGRyKSkpCiAJCQlpY19uZXRtYXNrID0gaHRvbmwoSU5fQ0xBU1NDX05FVCk7CiAJCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJJUC1Db25maWc6IFVuYWJsZSB0byBndWVzcyBuZXRtYXNrIGZvciBhZGRyZXNzICV1LiV1LiV1LiV1XG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJJUC1Db25maWc6IFVuYWJsZSB0byBndWVzcyBuZXRtYXNrIGZvciBhZGRyZXNzICIgTklQUVVBRF9GTVQgIlxuIiwKIAkJCQlOSVBRVUFEKGljX215YWRkcikpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCXByaW50aygiSVAtQ29uZmlnOiBHdWVzc2luZyBuZXRtYXNrICV1LiV1LiV1LiV1XG4iLCBOSVBRVUFEKGljX25ldG1hc2spKTsKKwkJcHJpbnRrKCJJUC1Db25maWc6IEd1ZXNzaW5nIG5ldG1hc2sgIiBOSVBRVUFEX0ZNVCAiXG4iLCBOSVBRVUFEKGljX25ldG1hc2spKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQzMyw3ICs0MzQsNyBAQAogCXVuc2lnbmVkIGNoYXIgKnNoYSwgKnRoYTsJCS8qIHMgZm9yICJzb3VyY2UiLCB0IGZvciAidGFyZ2V0IiAqLwogCXN0cnVjdCBpY19kZXZpY2UgKmQ7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlnb3RvIGRyb3A7CiAKIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQpAQCAtNDU5LDEwICs0NjAsNyBAQAogCWlmIChyYXJwLT5hcl9wcm8gIT0gaHRvbnMoRVRIX1BfSVApKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLAotCQkJICAgc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsKLQkJCSAgICgyICogZGV2LT5hZGRyX2xlbikgKwotCQkJICAgKDIgKiA0KSkpCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4oZGV2KSkpCiAJCWdvdG8gZHJvcDsKIAogCS8qIE9LLCBpdCBpcyBhbGwgdGhlcmUgYW5kIGxvb2tzIHZhbGlkLCBwcm9jZXNzLi4uICovCkBAIC03NTMsOSArNzUxLDkgQEAKIAkJcHJpbnRrKCJVbmtub3duIEFSUCB0eXBlIDB4JTA0eCBmb3IgZGV2aWNlICVzXG4iLCBkZXYtPnR5cGUsIGRldi0+bmFtZSk7CiAJCWItPmh0eXBlID0gZGV2LT50eXBlOyAvKiBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yICovCiAJfQorCisJLyogc2VydmVyX2lwIGFuZCB5b3VyX2lwIGFkZHJlc3MgYXJlIGJvdGggYWxyZWFkeSB6ZXJvIHBlciBSRkMyMTMxICovCiAJYi0+aGxlbiA9IGRldi0+YWRkcl9sZW47Ci0JYi0+eW91cl9pcCA9IE5PTkU7Ci0JYi0+c2VydmVyX2lwID0gTk9ORTsKIAltZW1jcHkoYi0+aHdfYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAJYi0+c2VjcyA9IGh0b25zKGppZmZpZXNfZGlmZiAvIEhaKTsKIAliLT54aWQgPSBkLT54aWQ7CkBAIC04NTYsNyArODU0LDcgQEAKIAlzdHJ1Y3QgaWNfZGV2aWNlICpkOwogCWludCBsZW4sIGV4dF9sZW47CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlnb3RvIGRyb3A7CiAKIAkvKiBQZXJmb3JtIHZlcmlmaWNhdGlvbnMgYmVmb3JlIHRha2luZyB0aGUgbG9jay4gICovCkBAIC05ODMsOSArOTgxLDkgQEAKIAkJCQlpY19teWFkZHIgPSBiLT55b3VyX2lwOwogCQkJCWljX3NlcnZhZGRyID0gc2VydmVyX2lkOwogI2lmZGVmIElQQ09ORklHX0RFQlVHCi0JCQkJcHJpbnRrKCJESENQOiBPZmZlcmVkIGFkZHJlc3MgJXUuJXUuJXUuJXUiLAorCQkJCXByaW50aygiREhDUDogT2ZmZXJlZCBhZGRyZXNzICIgTklQUVVBRF9GTVQsCiAJCQkJICAgICAgIE5JUFFVQUQoaWNfbXlhZGRyKSk7Ci0JCQkJcHJpbnRrKCIgYnkgc2VydmVyICV1LiV1LiV1LiV1XG4iLAorCQkJCXByaW50aygiIGJ5IHNlcnZlciAiIE5JUFFVQURfRk1UICJcbiIsCiAJCQkJICAgICAgIE5JUFFVQUQoaWNfc2VydmFkZHIpKTsKICNlbmRpZgogCQkJCS8qIFRoZSBESENQIGluZGljYXRlZCBzZXJ2ZXIgYWRkcmVzcyB0YWtlcwpAQCAtMTE4MSwxMSArMTE3OSwxMSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JcHJpbnRrKCJJUC1Db25maWc6IEdvdCAlcyBhbnN3ZXIgZnJvbSAldS4ldS4ldS4ldSwgIiwKKwlwcmludGsoIklQLUNvbmZpZzogR290ICVzIGFuc3dlciBmcm9tICIgTklQUVVBRF9GTVQgIiwgIiwKIAkJKChpY19nb3RfcmVwbHkgJiBJQ19SQVJQKSA/ICJSQVJQIgogCQkgOiAoaWNfcHJvdG9fZW5hYmxlZCAmIElDX1VTRV9ESENQKSA/ICJESENQIiA6ICJCT09UUCIpLAogCQlOSVBRVUFEKGljX3NlcnZhZGRyKSk7Ci0JcHJpbnRrKCJteSBhZGRyZXNzIGlzICV1LiV1LiV1LiV1XG4iLCBOSVBRVUFEKGljX215YWRkcikpOworCXByaW50aygibXkgYWRkcmVzcyBpcyAiIE5JUFFVQURfRk1UICJcbiIsIE5JUFFVQUQoaWNfbXlhZGRyKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMTEsMTIgKzEyMDksMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQ09ORl9OQU1FU0VSVkVSU19NQVg7IGkrKykgewogCQlpZiAoaWNfbmFtZXNlcnZlcnNbaV0gIT0gTk9ORSkKIAkJCXNlcV9wcmludGYoc2VxLAotCQkJCSAgICJuYW1lc2VydmVyICV1LiV1LiV1LiV1XG4iLAorCQkJCSAgICJuYW1lc2VydmVyICIgTklQUVVBRF9GTVQgIlxuIiwKIAkJCQkgICBOSVBRVUFEKGljX25hbWVzZXJ2ZXJzW2ldKSk7CiAJfQogCWlmIChpY19zZXJ2YWRkciAhPSBOT05FKQogCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICJib290c2VydmVyICV1LiV1LiV1LiV1XG4iLAorCQkJICAgImJvb3RzZXJ2ZXIgIiBOSVBRVUFEX0ZNVCAiXG4iLAogCQkJICAgTklQUVVBRChpY19zZXJ2YWRkcikpOwogCXJldHVybiAwOwogfQpAQCAtMTM5MCwxNCArMTM4OCwxNCBAQAogCSAqIENsdWUgaW4gdGhlIG9wZXJhdG9yLgogCSAqLwogCXByaW50aygiSVAtQ29uZmlnOiBDb21wbGV0ZToiKTsKLQlwcmludGsoIlxuICAgICAgZGV2aWNlPSVzIiwgaWNfZGV2LT5uYW1lKTsKLQlwcmludGsoIiwgYWRkcj0ldS4ldS4ldS4ldSIsIE5JUFFVQUQoaWNfbXlhZGRyKSk7Ci0JcHJpbnRrKCIsIG1hc2s9JXUuJXUuJXUuJXUiLCBOSVBRVUFEKGljX25ldG1hc2spKTsKLQlwcmludGsoIiwgZ3c9JXUuJXUuJXUuJXUiLCBOSVBRVUFEKGljX2dhdGV3YXkpKTsKKwlwcmludGsoIlxuICAgICBkZXZpY2U9JXMiLCBpY19kZXYtPm5hbWUpOworCXByaW50aygiLCBhZGRyPSIgTklQUVVBRF9GTVQsIE5JUFFVQUQoaWNfbXlhZGRyKSk7CisJcHJpbnRrKCIsIG1hc2s9IiBOSVBRVUFEX0ZNVCwgTklQUVVBRChpY19uZXRtYXNrKSk7CisJcHJpbnRrKCIsIGd3PSIgTklQUVVBRF9GTVQsIE5JUFFVQUQoaWNfZ2F0ZXdheSkpOwogCXByaW50aygiLFxuICAgICBob3N0PSVzLCBkb21haW49JXMsIG5pcy1kb21haW49JXMiLAogCSAgICAgICB1dHNuYW1lKCktPm5vZGVuYW1lLCBpY19kb21haW4sIHV0c25hbWUoKS0+ZG9tYWlubmFtZSk7Ci0JcHJpbnRrKCIsXG4gICAgIGJvb3RzZXJ2ZXI9JXUuJXUuJXUuJXUiLCBOSVBRVUFEKGljX3NlcnZhZGRyKSk7Ci0JcHJpbnRrKCIsIHJvb3RzZXJ2ZXI9JXUuJXUuJXUuJXUiLCBOSVBRVUFEKHJvb3Rfc2VydmVyX2FkZHIpKTsKKwlwcmludGsoIixcbiAgICAgYm9vdHNlcnZlcj0iIE5JUFFVQURfRk1ULCBOSVBRVUFEKGljX3NlcnZhZGRyKSk7CisJcHJpbnRrKCIsIHJvb3RzZXJ2ZXI9IiBOSVBRVUFEX0ZNVCwgTklQUVVBRChyb290X3NlcnZlcl9hZGRyKSk7CiAJcHJpbnRrKCIsIHJvb3RwYXRoPSVzIiwgcm9vdF9zZXJ2ZXJfcGF0aCk7CiAJcHJpbnRrKCJcbiIpOwogI2VuZGlmIC8qICFTSUxFTlQgKi8KQEAgLTE0MTAsNyArMTQwOCw3IEBACiAKIC8qCiAgKiAgRGVjb2RlIGFueSBJUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlICJpcD0iIG9yICJuZnNhZGRycz0iIGtlcm5lbAotICogIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIuICBTZWUgRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dC4KKyAqICBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLiAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGljX3Byb3RvX25hbWUoY2hhciAqbmFtZSkKIHsKQEAgLTE0NzksMTkgKzE0NzcsMTkgQEAKIAkJCURCRygoIklQLUNvbmZpZzogUGFyYW1ldGVyICMlZDogYCVzJ1xuIiwgbnVtLCBpcCkpOwogCQkJc3dpdGNoIChudW0pIHsKIAkJCWNhc2UgMDoKLQkJCQlpZiAoKGljX215YWRkciA9IGluX2F0b24oaXApKSA9PSBJTkFERFJfQU5ZKQorCQkJCWlmICgoaWNfbXlhZGRyID0gaW5fYXRvbihpcCkpID09IEFOWSkKIAkJCQkJaWNfbXlhZGRyID0gTk9ORTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMToKLQkJCQlpZiAoKGljX3NlcnZhZGRyID0gaW5fYXRvbihpcCkpID09IElOQUREUl9BTlkpCisJCQkJaWYgKChpY19zZXJ2YWRkciA9IGluX2F0b24oaXApKSA9PSBBTlkpCiAJCQkJCWljX3NlcnZhZGRyID0gTk9ORTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMjoKLQkJCQlpZiAoKGljX2dhdGV3YXkgPSBpbl9hdG9uKGlwKSkgPT0gSU5BRERSX0FOWSkKKwkJCQlpZiAoKGljX2dhdGV3YXkgPSBpbl9hdG9uKGlwKSkgPT0gQU5ZKQogCQkJCQlpY19nYXRld2F5ID0gTk9ORTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMzoKLQkJCQlpZiAoKGljX25ldG1hc2sgPSBpbl9hdG9uKGlwKSkgPT0gSU5BRERSX0FOWSkKKwkJCQlpZiAoKGljX25ldG1hc2sgPSBpbl9hdG9uKGlwKSkgPT0gQU5ZKQogCQkJCQlpY19uZXRtYXNrID0gTk9ORTsKIAkJCQlicmVhazsKIAkJCWNhc2UgNDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBkYTI4MTU4Li4xNDkxMTFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0xMTUsNDkgKzExNSw1NyBAQAogI2luY2x1ZGUgPG5ldC9pcGlwLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAKICNkZWZpbmUgSEFTSF9TSVpFICAxNgogI2RlZmluZSBIQVNIKGFkZHIpICgoKF9fZm9yY2UgdTMyKWFkZHJeKChfX2ZvcmNlIHUzMilhZGRyPj40KSkmMHhGKQogCitzdGF0aWMgaW50IGlwaXBfbmV0X2lkOworc3RydWN0IGlwaXBfbmV0IHsKKwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWxzX3JfbFtIQVNIX1NJWkVdOworCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbHNfcltIQVNIX1NJWkVdOworCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbHNfbFtIQVNIX1NJWkVdOworCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbHNfd2NbMV07CisJc3RydWN0IGlwX3R1bm5lbCAqKnR1bm5lbHNbNF07CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZmJfdHVubmVsX2RldjsKK307CisKIHN0YXRpYyBpbnQgaXBpcF9mYl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaXBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGlwaXBfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwaXBfZmJfdHVubmVsX2RldjsKLQotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbHNfcl9sW0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc19yW0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc19sW0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc193Y1sxXTsKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICoqdHVubmVsc1s0XSA9IHsgdHVubmVsc193YywgdHVubmVsc19sLCB0dW5uZWxzX3IsIHR1bm5lbHNfcl9sIH07Ci0KIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwaXBfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBpcF90dW5uZWxfbG9va3VwKF9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCkKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBpcF90dW5uZWxfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKKwkJX19iZTMyIHJlbW90ZSwgX19iZTMyIGxvY2FsKQogewogCXVuc2lnbmVkIGgwID0gSEFTSChyZW1vdGUpOwogCXVuc2lnbmVkIGgxID0gSEFTSChsb2NhbCk7CiAJc3RydWN0IGlwX3R1bm5lbCAqdDsKKwlzdHJ1Y3QgaXBpcF9uZXQgKmlwbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBpcF9uZXRfaWQpOwogCi0JZm9yICh0ID0gdHVubmVsc19yX2xbaDBeaDFdOyB0OyB0ID0gdC0+bmV4dCkgeworCWZvciAodCA9IGlwbi0+dHVubmVsc19yX2xbaDBeaDFdOyB0OyB0ID0gdC0+bmV4dCkgewogCQlpZiAobG9jYWwgPT0gdC0+cGFybXMuaXBoLnNhZGRyICYmCiAJCSAgICByZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyICYmICh0LT5kZXYtPmZsYWdzJklGRl9VUCkpCiAJCQlyZXR1cm4gdDsKIAl9Ci0JZm9yICh0ID0gdHVubmVsc19yW2gwXTsgdDsgdCA9IHQtPm5leHQpIHsKKwlmb3IgKHQgPSBpcG4tPnR1bm5lbHNfcltoMF07IHQ7IHQgPSB0LT5uZXh0KSB7CiAJCWlmIChyZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyICYmICh0LT5kZXYtPmZsYWdzJklGRl9VUCkpCiAJCQlyZXR1cm4gdDsKIAl9Ci0JZm9yICh0ID0gdHVubmVsc19sW2gxXTsgdDsgdCA9IHQtPm5leHQpIHsKKwlmb3IgKHQgPSBpcG4tPnR1bm5lbHNfbFtoMV07IHQ7IHQgPSB0LT5uZXh0KSB7CiAJCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgJiYgKHQtPmRldi0+ZmxhZ3MmSUZGX1VQKSkKIAkJCXJldHVybiB0OwogCX0KLQlpZiAoKHQgPSB0dW5uZWxzX3djWzBdKSAhPSBOVUxMICYmICh0LT5kZXYtPmZsYWdzJklGRl9VUCkpCisJaWYgKCh0ID0gaXBuLT50dW5uZWxzX3djWzBdKSAhPSBOVUxMICYmICh0LT5kZXYtPmZsYWdzJklGRl9VUCkpCiAJCXJldHVybiB0OwogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqKl9faXBpcF9idWNrZXQoc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcykKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICoqX19pcGlwX2J1Y2tldChzdHJ1Y3QgaXBpcF9uZXQgKmlwbiwKKwkJc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcykKIHsKIAlfX2JlMzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKIAlfX2JlMzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOwpAQCAtMTcyLDE5ICsxODAsMjAgQEAKIAkJcHJpbyB8PSAxOwogCQloIF49IEhBU0gobG9jYWwpOwogCX0KLQlyZXR1cm4gJnR1bm5lbHNbcHJpb11baF07CisJcmV0dXJuICZpcG4tPnR1bm5lbHNbcHJpb11baF07CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3R1bm5lbCAqKmlwaXBfYnVja2V0KHN0cnVjdCBpcF90dW5uZWwgKnQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF90dW5uZWwgKippcGlwX2J1Y2tldChzdHJ1Y3QgaXBpcF9uZXQgKmlwbiwKKwkJc3RydWN0IGlwX3R1bm5lbCAqdCkKIHsKLQlyZXR1cm4gX19pcGlwX2J1Y2tldCgmdC0+cGFybXMpOworCXJldHVybiBfX2lwaXBfYnVja2V0KGlwbiwgJnQtPnBhcm1zKTsKIH0KIAotc3RhdGljIHZvaWQgaXBpcF90dW5uZWxfdW5saW5rKHN0cnVjdCBpcF90dW5uZWwgKnQpCitzdGF0aWMgdm9pZCBpcGlwX3R1bm5lbF91bmxpbmsoc3RydWN0IGlwaXBfbmV0ICppcG4sIHN0cnVjdCBpcF90dW5uZWwgKnQpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqKnRwOwogCi0JZm9yICh0cCA9IGlwaXBfYnVja2V0KHQpOyAqdHA7IHRwID0gJigqdHApLT5uZXh0KSB7CisJZm9yICh0cCA9IGlwaXBfYnVja2V0KGlwbiwgdCk7ICp0cDsgdHAgPSAmKCp0cCktPm5leHQpIHsKIAkJaWYgKHQgPT0gKnRwKSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZpcGlwX2xvY2spOwogCQkJKnRwID0gdC0+bmV4dDsKQEAgLTE5NCw5ICsyMDMsOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXBpcF90dW5uZWxfbGluayhzdHJ1Y3QgaXBfdHVubmVsICp0KQorc3RhdGljIHZvaWQgaXBpcF90dW5uZWxfbGluayhzdHJ1Y3QgaXBpcF9uZXQgKmlwbiwgc3RydWN0IGlwX3R1bm5lbCAqdCkKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICoqdHAgPSBpcGlwX2J1Y2tldCh0KTsKKwlzdHJ1Y3QgaXBfdHVubmVsICoqdHAgPSBpcGlwX2J1Y2tldChpcG4sIHQpOwogCiAJdC0+bmV4dCA9ICp0cDsKIAl3cml0ZV9sb2NrX2JoKCZpcGlwX2xvY2spOwpAQCAtMjA0LDE1ICsyMTMsMTcgQEAKIAl3cml0ZV91bmxvY2tfYmgoJmlwaXBfbG9jayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBpcF90dW5uZWxfbG9jYXRlKHN0cnVjdCBpcF90dW5uZWxfcGFybSAqcGFybXMsIGludCBjcmVhdGUpCitzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwaXBfdHVubmVsX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsCisJCXN0cnVjdCBpcF90dW5uZWxfcGFybSAqcGFybXMsIGludCBjcmVhdGUpCiB7CiAJX19iZTMyIHJlbW90ZSA9IHBhcm1zLT5pcGguZGFkZHI7CiAJX19iZTMyIGxvY2FsID0gcGFybXMtPmlwaC5zYWRkcjsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0LCAqKnRwLCAqbnQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAljaGFyIG5hbWVbSUZOQU1TSVpdOworCXN0cnVjdCBpcGlwX25ldCAqaXBuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7CiAKLQlmb3IgKHRwID0gX19pcGlwX2J1Y2tldChwYXJtcyk7ICh0ID0gKnRwKSAhPSBOVUxMOyB0cCA9ICZ0LT5uZXh0KSB7CisJZm9yICh0cCA9IF9faXBpcF9idWNrZXQoaXBuLCBwYXJtcyk7ICh0ID0gKnRwKSAhPSBOVUxMOyB0cCA9ICZ0LT5uZXh0KSB7CiAJCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgJiYgcmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkcikKIAkJCXJldHVybiB0OwogCX0KQEAgLTIyMSw0NiArMjMyLDQ3IEBACiAKIAlpZiAocGFybXMtPm5hbWVbMF0pCiAJCXN0cmxjcHkobmFtZSwgcGFybXMtPm5hbWUsIElGTkFNU0laKTsKLQllbHNlIHsKLQkJaW50IGk7Ci0JCWZvciAoaT0xOyBpPDEwMDsgaSsrKSB7Ci0JCQlzcHJpbnRmKG5hbWUsICJ0dW5sJWQiLCBpKTsKLQkJCWlmIChfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIG5hbWUpID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGk9PTEwMCkKLQkJCWdvdG8gZmFpbGVkOwotCX0KKwllbHNlCisJCXNwcmludGYobmFtZSwgInR1bmwlJWQiKTsKIAogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBpcGlwX3R1bm5lbF9zZXR1cCk7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAorCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKKworCWlmIChzdHJjaHIobmFtZSwgJyUnKSkgeworCQlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBuYW1lKSA8IDApCisJCQlnb3RvIGZhaWxlZF9mcmVlOworCX0KKwogCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkZXYtPmluaXQgPSBpcGlwX3R1bm5lbF9pbml0OwogCW50LT5wYXJtcyA9ICpwYXJtczsKIAotCWlmIChyZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KSA8IDApIHsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJZ290byBmYWlsZWQ7Ci0JfQorCWlmIChyZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KSA8IDApCisJCWdvdG8gZmFpbGVkX2ZyZWU7CiAKIAlkZXZfaG9sZChkZXYpOwotCWlwaXBfdHVubmVsX2xpbmsobnQpOworCWlwaXBfdHVubmVsX2xpbmsoaXBuLCBudCk7CiAJcmV0dXJuIG50OwogCi1mYWlsZWQ6CitmYWlsZWRfZnJlZToKKwlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpcGlwX3R1bm5lbF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2ID09IGlwaXBfZmJfdHVubmVsX2RldikgeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgaXBpcF9uZXQgKmlwbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBpcF9uZXRfaWQpOworCisJaWYgKGRldiA9PSBpcG4tPmZiX3R1bm5lbF9kZXYpIHsKIAkJd3JpdGVfbG9ja19iaCgmaXBpcF9sb2NrKTsKLQkJdHVubmVsc193Y1swXSA9IE5VTEw7CisJCWlwbi0+dHVubmVsc193Y1swXSA9IE5VTEw7CiAJCXdyaXRlX3VubG9ja19iaCgmaXBpcF9sb2NrKTsKIAl9IGVsc2UKLQkJaXBpcF90dW5uZWxfdW5saW5rKG5ldGRldl9wcml2KGRldikpOworCQlpcGlwX3R1bm5lbF91bmxpbmsoaXBuLCBuZXRkZXZfcHJpdihkZXYpKTsKIAlkZXZfcHV0KGRldik7CiB9CiAKQEAgLTMwOSw3ICszMjEsNyBAQAogCWVyciA9IC1FTk9FTlQ7CiAKIAlyZWFkX2xvY2soJmlwaXBfbG9jayk7Ci0JdCA9IGlwaXBfdHVubmVsX2xvb2t1cChpcGgtPmRhZGRyLCBpcGgtPnNhZGRyKTsKKwl0ID0gaXBpcF90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyKTsKIAlpZiAodCA9PSBOVUxMIHx8IHQtPnBhcm1zLmlwaC5kYWRkciA9PSAwKQogCQlnb3RvIG91dDsKIApAQCAtNDA1LDcgKzQxNyw3IEBACiAJZmwuZmw0X2RhZGRyID0gZWlwaC0+c2FkZHI7CiAJZmwuZmw0X3RvcyA9IFJUX1RPUyhlaXBoLT50b3MpOwogCWZsLnByb3RvID0gSVBQUk9UT19JUElQOwotCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAma2V5KSkgeworCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoc2tiLT5kZXYpLCAmcnQsICZrZXkpKSB7CiAJCWtmcmVlX3NrYihza2IyKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDE4LDcgKzQzMCw3IEBACiAJCWZsLmZsNF9kYWRkciA9IGVpcGgtPmRhZGRyOwogCQlmbC5mbDRfc3JjID0gZWlwaC0+c2FkZHI7CiAJCWZsLmZsNF90b3MgPSBlaXBoLT50b3M7Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpIHx8CisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoc2tiLT5kZXYpLCAmcnQsICZmbCkgfHwKIAkJICAgIHJ0LT51LmRzdC5kZXYtPnR5cGUgIT0gQVJQSFJEX1RVTk5FTCkgewogCQkJaXBfcnRfcHV0KHJ0KTsKIAkJCWtmcmVlX3NrYihza2IyKTsKQEAgLTQ2OSw3ICs0ODEsOCBAQAogCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAKIAlyZWFkX2xvY2soJmlwaXBfbG9jayk7Ci0JaWYgKCh0dW5uZWwgPSBpcGlwX3R1bm5lbF9sb29rdXAoaXBoLT5zYWRkciwgaXBoLT5kYWRkcikpICE9IE5VTEwpIHsKKwlpZiAoKHR1bm5lbCA9IGlwaXBfdHVubmVsX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwKKwkJCQkJaXBoLT5zYWRkciwgaXBoLT5kYWRkcikpICE9IE5VTEwpIHsKIAkJaWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHsKIAkJCXJlYWRfdW5sb2NrKCZpcGlwX2xvY2spOwogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC01MzIsNyArNTQ1LDcgQEAKIAogCWlmICghZHN0KSB7CiAJCS8qIE5CTUEgdHVubmVsICovCi0JCWlmICgocnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3QpID09IE5VTEwpIHsKKwkJaWYgKChydCA9IHNrYi0+cnRhYmxlKSA9PSBOVUxMKSB7CiAJCQl0dW5uZWwtPnN0YXQudHhfZmlmb19lcnJvcnMrKzsKIAkJCWdvdG8gdHhfZXJyb3I7CiAJCX0KQEAgLTU0Nyw3ICs1NjAsNyBAQAogCQkJCQkJLnNhZGRyID0gdGlwaC0+c2FkZHIsCiAJCQkJCQkudG9zID0gUlRfVE9TKHRvcykgfSB9LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQSVAgfTsKLQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpIHsKIAkJCXR1bm5lbC0+c3RhdC50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJZ290byB0eF9lcnJvcl9pY21wOwogCQl9CkBAIC02NjgsNyArNjgxLDcgQEAKIAkJCQkJCS50b3MgPSBSVF9UT1MoaXBoLT50b3MpIH0gfSwKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19JUElQIH07CiAJCXN0cnVjdCBydGFibGUgKnJ0OwotCQlpZiAoIWlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKKwkJaWYgKCFpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgJnJ0LCAmZmwpKSB7CiAJCQl0ZGV2ID0gcnQtPnUuZHN0LmRldjsKIAkJCWlwX3J0X3B1dChydCk7CiAJCX0KQEAgLTY3Niw3ICs2ODksNyBAQAogCX0KIAogCWlmICghdGRldiAmJiB0dW5uZWwtPnBhcm1zLmxpbmspCi0JCXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCB0dW5uZWwtPnBhcm1zLmxpbmspOworCQl0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGRldl9uZXQoZGV2KSwgdHVubmVsLT5wYXJtcy5saW5rKTsKIAogCWlmICh0ZGV2KSB7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gdGRldi0+aGFyZF9oZWFkZXJfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7CkBAIC02OTEsMTYgKzcwNCwxOCBAQAogCWludCBlcnIgPSAwOwogCXN0cnVjdCBpcF90dW5uZWxfcGFybSBwOwogCXN0cnVjdCBpcF90dW5uZWwgKnQ7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBpcGlwX25ldCAqaXBuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dFVFRVTk5FTDoKIAkJdCA9IE5VTEw7Ci0JCWlmIChkZXYgPT0gaXBpcF9mYl90dW5uZWxfZGV2KSB7CisJCWlmIChkZXYgPT0gaXBuLT5mYl90dW5uZWxfZGV2KSB7CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCBzaXplb2YocCkpKSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXQgPSBpcGlwX3R1bm5lbF9sb2NhdGUoJnAsIDApOworCQkJdCA9IGlwaXBfdHVubmVsX2xvY2F0ZShuZXQsICZwLCAwKTsKIAkJfQogCQlpZiAodCA9PSBOVUxMKQogCQkJdCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MjYsOSArNzQxLDkgQEAKIAkJaWYgKHAuaXBoLnR0bCkKIAkJCXAuaXBoLmZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTsKIAotCQl0ID0gaXBpcF90dW5uZWxfbG9jYXRlKCZwLCBjbWQgPT0gU0lPQ0FERFRVTk5FTCk7CisJCXQgPSBpcGlwX3R1bm5lbF9sb2NhdGUobmV0LCAmcCwgY21kID09IFNJT0NBRERUVU5ORUwpOwogCi0JCWlmIChkZXYgIT0gaXBpcF9mYl90dW5uZWxfZGV2ICYmIGNtZCA9PSBTSU9DQ0hHVFVOTkVMKSB7CisJCWlmIChkZXYgIT0gaXBuLT5mYl90dW5uZWxfZGV2ICYmIGNtZCA9PSBTSU9DQ0hHVFVOTkVMKSB7CiAJCQlpZiAodCAhPSBOVUxMKSB7CiAJCQkJaWYgKHQtPmRldiAhPSBkZXYpIHsKIAkJCQkJZXJyID0gLUVFWElTVDsKQEAgLTc0MSwxMiArNzU2LDEyIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCQlpcGlwX3R1bm5lbF91bmxpbmsodCk7CisJCQkJaXBpcF90dW5uZWxfdW5saW5rKGlwbiwgdCk7CiAJCQkJdC0+cGFybXMuaXBoLnNhZGRyID0gcC5pcGguc2FkZHI7CiAJCQkJdC0+cGFybXMuaXBoLmRhZGRyID0gcC5pcGguZGFkZHI7CiAJCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwLmlwaC5zYWRkciwgNCk7CiAJCQkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmcC5pcGguZGFkZHIsIDQpOwotCQkJCWlwaXBfdHVubmVsX2xpbmsodCk7CisJCQkJaXBpcF90dW5uZWxfbGluayhpcG4sIHQpOwogCQkJCW5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTsKIAkJCX0KIAkJfQpAQCAtNzc0LDE1ICs3ODksMTUgQEAKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJZ290byBkb25lOwogCi0JCWlmIChkZXYgPT0gaXBpcF9mYl90dW5uZWxfZGV2KSB7CisJCWlmIChkZXYgPT0gaXBuLT5mYl90dW5uZWxfZGV2KSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mKHApKSkKIAkJCQlnb3RvIGRvbmU7CiAJCQllcnIgPSAtRU5PRU5UOwotCQkJaWYgKCh0ID0gaXBpcF90dW5uZWxfbG9jYXRlKCZwLCAwKSkgPT0gTlVMTCkKKwkJCWlmICgodCA9IGlwaXBfdHVubmVsX2xvY2F0ZShuZXQsICZwLCAwKSkgPT0gTlVMTCkKIAkJCQlnb3RvIGRvbmU7CiAJCQllcnIgPSAtRVBFUk07Ci0JCQlpZiAodC0+ZGV2ID09IGlwaXBfZmJfdHVubmVsX2RldikKKwkJCWlmICh0LT5kZXYgPT0gaXBuLT5mYl90dW5uZWxfZGV2KQogCQkJCWdvdG8gZG9uZTsKIAkJCWRldiA9IHQtPmRldjsKIAkJfQpAQCAtODI2LDYgKzg0MSw3IEBACiAJZGV2LT5mbGFncwkJPSBJRkZfTk9BUlA7CiAJZGV2LT5pZmxpbmsJCT0gMDsKIAlkZXYtPmFkZHJfbGVuCQk9IDQ7CisJZGV2LT5mZWF0dXJlcwkJfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIH0KIAogc3RhdGljIGludCBpcGlwX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC04NDUsMTAgKzg2MSwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpcGlwX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlwaXBfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcGhkciAqaXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOworCXN0cnVjdCBpcGlwX25ldCAqaXBuID0gbmV0X2dlbmVyaWMoZGV2X25ldChkZXYpLCBpcGlwX25ldF9pZCk7CiAKIAl0dW5uZWwtPmRldiA9IGRldjsKIAlzdHJjcHkodHVubmVsLT5wYXJtcy5uYW1lLCBkZXYtPm5hbWUpOwpAQCAtODU4LDcgKzg3NSw3IEBACiAJaXBoLT5paGwJCT0gNTsKIAogCWRldl9ob2xkKGRldik7Ci0JdHVubmVsc193Y1swXQkJPSB0dW5uZWw7CisJaXBuLT50dW5uZWxzX3djWzBdCT0gdHVubmVsOwogCXJldHVybiAwOwogfQogCkBAIC04NzEsNiArODg4LDgyIEBACiBzdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KIAlLRVJOX0lORk8gIklQdjQgb3ZlciBJUHY0IHR1bm5lbGluZyBkcml2ZXJcbiI7CiAKK3N0YXRpYyB2b2lkIGlwaXBfZGVzdHJveV90dW5uZWxzKHN0cnVjdCBpcGlwX25ldCAqaXBuKQoreworCWludCBwcmlvOworCisJZm9yIChwcmlvID0gMTsgcHJpbyA8IDQ7IHByaW8rKykgeworCQlpbnQgaDsKKwkJZm9yIChoID0gMDsgaCA8IEhBU0hfU0laRTsgaCsrKSB7CisJCQlzdHJ1Y3QgaXBfdHVubmVsICp0OworCQkJd2hpbGUgKCh0ID0gaXBuLT50dW5uZWxzW3ByaW9dW2hdKSAhPSBOVUxMKQorCQkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHQtPmRldik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgaXBpcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaXBpcF9uZXQgKmlwbjsKKworCWVyciA9IC1FTk9NRU07CisJaXBuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwaXBfbmV0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGlwbiA9PSBOVUxMKQorCQlnb3RvIGVycl9hbGxvYzsKKworCWVyciA9IG5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkLCBpcG4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9hc3NpZ247CisKKwlpcG4tPnR1bm5lbHNbMF0gPSBpcG4tPnR1bm5lbHNfd2M7CisJaXBuLT50dW5uZWxzWzFdID0gaXBuLT50dW5uZWxzX2w7CisJaXBuLT50dW5uZWxzWzJdID0gaXBuLT50dW5uZWxzX3I7CisJaXBuLT50dW5uZWxzWzNdID0gaXBuLT50dW5uZWxzX3JfbDsKKworCWlwbi0+ZmJfdHVubmVsX2RldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGlwX3R1bm5lbCksCisJCQkJCSAgICJ0dW5sMCIsCisJCQkJCSAgIGlwaXBfdHVubmVsX3NldHVwKTsKKwlpZiAoIWlwbi0+ZmJfdHVubmVsX2RldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvY19kZXY7CisJfQorCisJaXBuLT5mYl90dW5uZWxfZGV2LT5pbml0ID0gaXBpcF9mYl90dW5uZWxfaW5pdDsKKwlkZXZfbmV0X3NldChpcG4tPmZiX3R1bm5lbF9kZXYsIG5ldCk7CisKKwlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihpcG4tPmZiX3R1bm5lbF9kZXYpKSkKKwkJZ290byBlcnJfcmVnX2RldjsKKworCXJldHVybiAwOworCitlcnJfcmVnX2RldjoKKwlmcmVlX25ldGRldihpcG4tPmZiX3R1bm5lbF9kZXYpOworZXJyX2FsbG9jX2RldjoKKwkvKiBub3RoaW5nICovCitlcnJfYXNzaWduOgorCWtmcmVlKGlwbik7CitlcnJfYWxsb2M6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaXBpcF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGlwaXBfbmV0ICppcG47CisKKwlpcG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwaXBfbmV0X2lkKTsKKwlydG5sX2xvY2soKTsKKwlpcGlwX2Rlc3Ryb3lfdHVubmVscyhpcG4pOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGlwbi0+ZmJfdHVubmVsX2Rldik7CisJcnRubF91bmxvY2soKTsKKwlrZnJlZShpcG4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwaXBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IGlwaXBfaW5pdF9uZXQsCisJLmV4aXQgPSBpcGlwX2V4aXRfbmV0LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaXBpcF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTg4MiwzOSArOTc1LDExIEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlwaXBfZmJfdHVubmVsX2RldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGlwX3R1bm5lbCksCi0JCQkJCSAgICJ0dW5sMCIsCi0JCQkJCSAgIGlwaXBfdHVubmVsX3NldHVwKTsKLQlpZiAoIWlwaXBfZmJfdHVubmVsX2RldikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycjE7Ci0JfQorCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZpcGlwX25ldF9pZCwgJmlwaXBfbmV0X29wcyk7CisJaWYgKGVycikKKwkJeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoJmlwaXBfaGFuZGxlciwgQUZfSU5FVCk7CiAKLQlpcGlwX2ZiX3R1bm5lbF9kZXYtPmluaXQgPSBpcGlwX2ZiX3R1bm5lbF9pbml0OwotCi0JaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYoaXBpcF9mYl90dW5uZWxfZGV2KSkpCi0JCWdvdG8gZXJyMjsKLSBvdXQ6CiAJcmV0dXJuIGVycjsKLSBlcnIyOgotCWZyZWVfbmV0ZGV2KGlwaXBfZmJfdHVubmVsX2Rldik7Ci0gZXJyMToKLQl4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcigmaXBpcF9oYW5kbGVyLCBBRl9JTkVUKTsKLQlnb3RvIG91dDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlwaXBfZGVzdHJveV90dW5uZWxzKHZvaWQpCi17Ci0JaW50IHByaW87Ci0KLQlmb3IgKHByaW8gPSAxOyBwcmlvIDwgNDsgcHJpbysrKSB7Ci0JCWludCBoOwotCQlmb3IgKGggPSAwOyBoIDwgSEFTSF9TSVpFOyBoKyspIHsKLQkJCXN0cnVjdCBpcF90dW5uZWwgKnQ7Ci0JCQl3aGlsZSAoKHQgPSB0dW5uZWxzW3ByaW9dW2hdKSAhPSBOVUxMKQotCQkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHQtPmRldik7Ci0JCX0KLQl9CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcGlwX2Zpbmkodm9pZCkKQEAgLTkyMiwxMCArOTg3LDcgQEAKIAlpZiAoeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoJmlwaXBfaGFuZGxlciwgQUZfSU5FVCkpCiAJCXByaW50ayhLRVJOX0lORk8gImlwaXAgY2xvc2U6IGNhbid0IGRlcmVnaXN0ZXIgdHVubmVsXG4iKTsKIAotCXJ0bmxfbG9jaygpOwotCWlwaXBfZGVzdHJveV90dW5uZWxzKCk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UoaXBpcF9mYl90dW5uZWxfZGV2KTsKLQlydG5sX3VubG9jaygpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoaXBpcF9uZXRfaWQsICZpcGlwX25ldF9vcHMpOwogfQogCiBtb2R1bGVfaW5pdChpcGlwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGE5NGY1MmMuLjExNzAwYTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTg0OSw3ICs4NDksNyBAQAogewogCXJ0bmxfbG9jaygpOwogCWlmIChzayA9PSBtcm91dGVfc29ja2V0KSB7Ci0JCUlQVjRfREVWQ09ORl9BTEwoc2stPnNrX25ldCwgTUNfRk9SV0FSRElORyktLTsKKwkJSVBWNF9ERVZDT05GX0FMTChzb2NrX25ldChzayksIE1DX0ZPUldBUkRJTkcpLS07CiAKIAkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwogCQltcm91dGVfc29ja2V0PU5VTEw7CkBAIC04OTgsNyArODk4LDcgQEAKIAkJCW1yb3V0ZV9zb2NrZXQ9c2s7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQkJSVBWNF9ERVZDT05GX0FMTChzay0+c2tfbmV0LCBNQ19GT1JXQVJESU5HKSsrOworCQkJSVBWNF9ERVZDT05GX0FMTChzb2NrX25ldChzayksIE1DX0ZPUldBUkRJTkcpKys7CiAJCX0KIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKQEAgLTEwODksNyArMTA4OSw3IEBACiAJc3RydWN0IHZpZl9kZXZpY2UgKnY7CiAJaW50IGN0OwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGV2ZW50ICE9IE5FVERFVl9VTlJFR0lTVEVSKQpAQCAtMTI4Myw3ICsxMjgzLDcgQEAKIAlpZiAodmlmX3RhYmxlW3ZpZl0uZGV2ICE9IHNrYi0+ZGV2KSB7CiAJCWludCB0cnVlX3ZpZmk7CiAKLQkJaWYgKCgoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3QpLT5mbC5paWYgPT0gMCkgeworCQlpZiAoc2tiLT5ydGFibGUtPmZsLmlpZiA9PSAwKSB7CiAJCQkvKiBJdCBpcyBvdXIgb3duIHBhY2tldCwgbG9vcGVkIGJhY2suCiAJCQkgICBWZXJ5IGNvbXBsaWNhdGVkIHNpdHVhdGlvbi4uLgogCkBAIC0xMzU3LDcgKzEzNTcsNyBAQAogaW50IGlwX21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqY2FjaGU7Ci0JaW50IGxvY2FsID0gKChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdCktPnJ0X2ZsYWdzJlJUQ0ZfTE9DQUw7CisJaW50IGxvY2FsID0gc2tiLT5ydGFibGUtPnJ0X2ZsYWdzJlJUQ0ZfTE9DQUw7CiAKIAkvKiBQYWNrZXQgaXMgbG9vcGVkIGJhY2sgYWZ0ZXIgZm9yd2FyZCwgaXQgc2hvdWxkIG5vdCBiZQogCSAgIGZvcndhcmRlZCBzZWNvbmQgdGltZSwgYnV0IHN0aWxsIGNhbiBiZSBkZWxpdmVyZWQgbG9jYWxseS4KQEAgLTE1OTQsNyArMTU5NCw3IEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZTsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7CiAJY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQocnQtPnJ0X3NyYywgcnQtPnJ0X2RzdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCAxMmRjMGQ2Li42MjBlNDBmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCiAJCQlJUF9WU19EQkcoOSwgIiVzOiBCaW5kaW5nIGNvbm4gJXUuJXUuJXUuJXU6JXUtPiIKIAkJCQkgICIldS4ldS4ldS4ldToldSB0byBhcHAgJXMgb24gcG9ydCAldVxuIiwKLQkJCQkgIF9fRlVOQ1RJT05fXywKKwkJCQkgIF9fZnVuY19fLAogCQkJCSAgTklQUVVBRChjcC0+Y2FkZHIpLCBudG9ocyhjcC0+Y3BvcnQpLAogCQkJCSAgTklQUVVBRChjcC0+dmFkZHIpLCBudG9ocyhjcC0+dnBvcnQpLAogCQkJCSAgaW5jLT5uYW1lLCBudG9ocyhpbmMtPnBvcnQpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCmluZGV4IDFmYTdiMzMuLjFjYWEyOTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAKIAkJCUlQX1ZTX0RCRyg5LCAiJXM6IEJpbmRpbmcgY29ubiAldS4ldS4ldS4ldToldS0+IgogCQkJCSAgIiV1LiV1LiV1LiV1OiV1IHRvIGFwcCAlcyBvbiBwb3J0ICV1XG4iLAotCQkJCSAgX19GVU5DVElPTl9fLAorCQkJCSAgX19mdW5jX18sCiAJCQkJICBOSVBRVUFEKGNwLT5jYWRkciksIG50b2hzKGNwLT5jcG9ydCksCiAJCQkJICBOSVBRVUFEKGNwLT52YWRkciksIG50b2hzKGNwLT52cG9ydCksCiAJCQkJICBpbmMtPm5hbWUsIG50b2hzKGluYy0+cG9ydCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCA5NDgzNzhkLi42OWM1NjY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtOTE2LDcgKzkxNiw3IEBACiAJaWYgKCF0aW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlJUF9WU19EQkcoNywgIiVzOiBwaWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgdGFza19waWRfbnIoY3VycmVudCkpOworCUlQX1ZTX0RCRyg3LCAiJXM6IHBpZCAlZFxuIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAlJUF9WU19EQkcoNywgIkVhY2ggaXBfdnNfc3luY19jb25uIGVudHJ5IG5lZWQgJVpkIGJ5dGVzXG4iLAogCQkgIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uKSk7CiAKQEAgLTk1Niw3ICs5NTYsNyBAQAogCSAgICAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfQkFDS1VQICYmICFzeW5jX2JhY2t1cF9waWQpKQogCQlyZXR1cm4gLUVTUkNIOwogCi0JSVBfVlNfREJHKDcsICIlczogcGlkICVkXG4iLCBfX0ZVTkNUSU9OX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKKwlJUF9WU19EQkcoNywgIiVzOiBwaWQgJWRcbiIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJSVBfVlNfSU5GTygic3RvcHBpbmcgc3luYyB0aHJlYWQgJWQgLi4uXG4iLAogCQkgICAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfTUFTVEVSKSA/CiAJCSAgIHN5bmNfbWFzdGVyX3BpZCA6IHN5bmNfYmFja3VwX3BpZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci5jCmluZGV4IDlhOTA0YzYuLmY4ZWRhY2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci5jCkBAIC0xODIsMjEgKzE4Miw0NCBAQAogCX0KIAlyZXR1cm4gY3N1bTsKIH0KLQogRVhQT1JUX1NZTUJPTChuZl9pcF9jaGVja3N1bSk7CiAKK3N0YXRpYyBfX3N1bTE2IG5mX2lwX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCisJCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgdV9pbnQ4X3QgcHJvdG9jb2wpCit7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKKwlfX3N1bTE2IGNzdW0gPSAwOworCisJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgeworCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6CisJCWlmIChsZW4gPT0gc2tiLT5sZW4gLSBkYXRhb2ZmKQorCQkJcmV0dXJuIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENIRUNLU1VNX05PTkU6CisJCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCBwcm90b2NvbCwKKwkJCQkJICAgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwgMCk7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJY3N1bSA9IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlX2hlYWQoc2tiLCBkYXRhb2ZmICsgbGVuKTsKKwkJaWYgKCFjc3VtKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKIHN0YXRpYyBpbnQgbmZfaXBfcm91dGUoc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKIHsKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsIChzdHJ1Y3QgcnRhYmxlICoqKWRzdCwgZmwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2FmaW5mbyBuZl9pcF9hZmluZm8gPSB7Ci0JLmZhbWlseQkJPSBBRl9JTkVULAotCS5jaGVja3N1bQk9IG5mX2lwX2NoZWNrc3VtLAotCS5yb3V0ZQkJPSBuZl9pcF9yb3V0ZSwKLQkuc2F2ZXJvdXRlCT0gbmZfaXBfc2F2ZXJvdXRlLAotCS5yZXJvdXRlCT0gbmZfaXBfcmVyb3V0ZSwKLQkucm91dGVfa2V5X3NpemUJPSBzaXplb2Yoc3RydWN0IGlwX3J0X2luZm8pLAorCS5mYW1pbHkJCQk9IEFGX0lORVQsCisJLmNoZWNrc3VtCQk9IG5mX2lwX2NoZWNrc3VtLAorCS5jaGVja3N1bV9wYXJ0aWFsCT0gbmZfaXBfY2hlY2tzdW1fcGFydGlhbCwKKwkucm91dGUJCQk9IG5mX2lwX3JvdXRlLAorCS5zYXZlcm91dGUJCT0gbmZfaXBfc2F2ZXJvdXRlLAorCS5yZXJvdXRlCQk9IG5mX2lwX3Jlcm91dGUsCisJLnJvdXRlX2tleV9zaXplCQk9IHNpemVvZihzdHJ1Y3QgaXBfcnRfaW5mbyksCiB9OwogCiBzdGF0aWMgaW50IGlwdjRfbmV0ZmlsdGVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggOWEwNzdjYi4uMjc2Nzg0MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTI0MSwxMCArMjQxLDI2IEBACiAjICAgICAgICAgICA8ZXhwcj4gJyYmJyA8ZXhwcj4gICAgICAgICAgICAgICAgICAgKDYpCiAjCiAjICg2KSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgbWluKC9leHByLywgL2V4cHIvKS4KK2NvbmZpZyBORl9OQVRfUFJPVE9fRENDUAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBORl9OQVQgJiYgTkZfQ1RfUFJPVE9fRENDUAorCWRlZmF1bHQgTkZfTkFUICYmIE5GX0NUX1BST1RPX0RDQ1AKKwogY29uZmlnIE5GX05BVF9QUk9UT19HUkUKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gTkZfTkFUICYmIE5GX0NUX1BST1RPX0dSRQogCitjb25maWcgTkZfTkFUX1BST1RPX1VEUExJVEUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gTkZfTkFUICYmIE5GX0NUX1BST1RPX1VEUExJVEUKKwlkZWZhdWx0IE5GX05BVCAmJiBORl9DVF9QUk9UT19VRFBMSVRFCisKK2NvbmZpZyBORl9OQVRfUFJPVE9fU0NUUAorCXRyaXN0YXRlCisJZGVmYXVsdCBORl9OQVQgJiYgTkZfQ1RfUFJPVE9fU0NUUAorCWRlcGVuZHMgb24gTkZfTkFUICYmIE5GX0NUX1BST1RPX1NDVFAKKwlzZWxlY3QgTElCQ1JDMzJDCisKIGNvbmZpZyBORl9OQVRfRlRQCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIE5GX0NPTk5UUkFDSyAmJiBORl9OQVQKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCAwYzdkYzc4Li5kOWI5MmZiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw3IEBACiBlbmRpZgogZW5kaWYKIAotbmZfbmF0LW9ianMJCTo9IG5mX25hdF9jb3JlLm8gbmZfbmF0X2hlbHBlci5vIG5mX25hdF9wcm90b191bmtub3duLm8gbmZfbmF0X3Byb3RvX3RjcC5vIG5mX25hdF9wcm90b191ZHAubyBuZl9uYXRfcHJvdG9faWNtcC5vCituZl9uYXQtb2JqcwkJOj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfaGVscGVyLm8gbmZfbmF0X3Byb3RvX3Vua25vd24ubyBuZl9uYXRfcHJvdG9fY29tbW9uLm8gbmZfbmF0X3Byb3RvX3RjcC5vIG5mX25hdF9wcm90b191ZHAubyBuZl9uYXRfcHJvdG9faWNtcC5vCiBpcHRhYmxlX25hdC1vYmpzCTo9IG5mX25hdF9ydWxlLm8gbmZfbmF0X3N0YW5kYWxvbmUubwogCiAjIGNvbm5lY3Rpb24gdHJhY2tpbmcKQEAgLTI5LDcgKzI5LDEwIEBACiBvYmotJChDT05GSUdfTkZfTkFUX1RGVFApICs9IG5mX25hdF90ZnRwLm8KIAogIyBOQVQgcHJvdG9jb2xzIChuZl9uYXQpCitvYmotJChDT05GSUdfTkZfTkFUX1BST1RPX0RDQ1ApICs9IG5mX25hdF9wcm90b19kY2NwLm8KIG9iai0kKENPTkZJR19ORl9OQVRfUFJPVE9fR1JFKSArPSBuZl9uYXRfcHJvdG9fZ3JlLm8KK29iai0kKENPTkZJR19ORl9OQVRfUFJPVE9fVURQTElURSkgKz0gbmZfbmF0X3Byb3RvX3VkcGxpdGUubworb2JqLSQoQ09ORklHX05GX05BVF9QUk9UT19TQ1RQKSArPSBuZl9uYXRfcHJvdG9fc2N0cC5vCiAKICMgZ2VuZXJpYyBJUCB0YWJsZXMgCiBvYmotJChDT05GSUdfSVBfTkZfSVBUQUJMRVMpICs9IGlwX3RhYmxlcy5vCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCBhNzU5MWNlLi4wM2U4M2E2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTUyLDE0ICs1MiwxNCBAQAogZG8gewkJCQkJCQkJXAogCWlmICghKHgpKQkJCQkJCVwKIAkJcHJpbnRrKCJBUlBfTkZfQVNTRVJUOiAlczolczoldVxuIiwJCVwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsJXAorCQkgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CVwKIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIEFSUF9ORl9BU1NFUlQoeCkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhcnBfZGV2YWRkcl9jb21wYXJlKGNvbnN0IHN0cnVjdCBhcnB0X2RldmFkZHJfaW5mbyAqYXAsCi0JCQkJICAgICAgY2hhciAqaGRyX2FkZHIsIGludCBsZW4pCisJCQkJICAgICAgY29uc3QgY2hhciAqaGRyX2FkZHIsIGludCBsZW4pCiB7CiAJaW50IGksIHJldDsKIApAQCAtODAsOCArODAsOCBAQAogCQkJCSAgIGNvbnN0IGNoYXIgKm91dGRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYXJwdF9hcnAgKmFycGluZm8pCiB7Ci0JY2hhciAqYXJwcHRyID0gKGNoYXIgKikoYXJwaGRyICsgMSk7Ci0JY2hhciAqc3JjX2RldmFkZHIsICp0Z3RfZGV2YWRkcjsKKwljb25zdCBjaGFyICphcnBwdHIgPSAoY2hhciAqKShhcnBoZHIgKyAxKTsKKwljb25zdCBjaGFyICpzcmNfZGV2YWRkciwgKnRndF9kZXZhZGRyOwogCV9fYmUzMiBzcmNfaXBhZGRyLCB0Z3RfaXBhZGRyOwogCWludCBpLCByZXQ7CiAKQEAgLTIyMiwyMSArMjIyLDE4IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCQkgICBzdHJ1Y3QgYXJwdF90YWJsZSAqdGFibGUpCisJCQkgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXTsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7Ci0Jc3RydWN0IGFycGhkciAqYXJwOworCWNvbnN0IHN0cnVjdCBhcnBoZHIgKmFycDsKIAlib29sIGhvdGRyb3AgPSBmYWxzZTsKIAlzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwgKmJhY2s7CiAJY29uc3QgY2hhciAqaW5kZXYsICpvdXRkZXY7CiAJdm9pZCAqdGFibGVfYmFzZTsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAotCS8qIEFSUCBoZWFkZXIsIHBsdXMgMiBkZXZpY2UgYWRkcmVzc2VzLCBwbHVzIDIgSVAgYWRkcmVzc2VzLiAgKi8KLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAoc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsKLQkJCQkgKDIgKiBza2ItPmRldi0+YWRkcl9sZW4pICsKLQkJCQkgKDIgKiBzaXplb2YodTMyKSkpKSkKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihza2ItPmRldikpKQogCQlyZXR1cm4gTkZfRFJPUDsKIAogCWluZGV2ID0gaW4gPyBpbi0+bmFtZSA6IG51bGxkZXZuYW1lOwpAQCAtMzU1LDcgKzM1Miw3IEBACiAJCWUtPmNvdW50ZXJzLnBjbnQgPSBwb3M7CiAKIAkJZm9yICg7OykgewotCQkJc3RydWN0IGFycHRfc3RhbmRhcmRfdGFyZ2V0ICp0CisJCQljb25zdCBzdHJ1Y3QgYXJwdF9zdGFuZGFyZF90YXJnZXQgKnQKIAkJCQk9ICh2b2lkICopYXJwdF9nZXRfdGFyZ2V0KGUpOwogCQkJaW50IHZpc2l0ZWQgPSBlLT5jb21lZnJvbSAmICgxIDw8IGhvb2spOwogCkBAIC00NDAsNyArNDM3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OworCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAogCWlmICghYXJwX2NoZWNrZW50cnkoJmUtPmFycCkpIHsKIAkJZHVwcmludGYoImFycF90YWJsZXM6IGFycCBjaGVjayBmYWlsZWQgJXAgJXMuXG4iLCBlLCBuYW1lKTsKQEAgLTQ2MCw3ICs0NTcsNyBAQAogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfdGFyZ2V0KHN0cnVjdCBhcnB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKLQlzdHJ1Y3QgYXJwdF90YXJnZXQgKnRhcmdldDsKKwlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJaW50IHJldDsKIAogCXQgPSBhcnB0X2dldF90YXJnZXQoZSk7CkBAIC00ODMsNyArNDgwLDcgQEAKIAkJIHVuc2lnbmVkIGludCAqaSkKIHsKIAlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7Ci0Jc3RydWN0IGFycHRfdGFyZ2V0ICp0YXJnZXQ7CisJc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogCWludCByZXQ7CiAKIAlyZXQgPSBjaGVja19lbnRyeShlLCBuYW1lKTsKQEAgLTcwOSwxMSArNzA2LDExIEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IGFycHRfdGFibGUgKnRhYmxlKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgKiAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtNzM0LDcgKzczMSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsX3NpemUsCi0JCQkJc3RydWN0IGFycHRfdGFibGUgKnRhYmxlLAorCQkJCXN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJdm9pZCBfX3VzZXIgKnVzZXJwdHIpCiB7CiAJdW5zaWduZWQgaW50IG9mZiwgbnVtOwpAQCAtODU0LDcgKzg1MSw3IEBACiBzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuLCBpbnQgY29tcGF0KQogewogCWNoYXIgbmFtZVtBUlBUX1RBQkxFX01BWE5BTUVMRU5dOwotCXN0cnVjdCBhcnB0X3RhYmxlICp0OworCXN0cnVjdCB4dF90YWJsZSAqdDsKIAlpbnQgcmV0OwogCiAJaWYgKCpsZW4gIT0gc2l6ZW9mKHN0cnVjdCBhcnB0X2dldGluZm8pKSB7CkBAIC04NzUsNyArODcyLDcgQEAKIAkJCQkgICAgImFycHRhYmxlXyVzIiwgbmFtZSk7CiAJaWYgKHQgJiYgIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgYXJwdF9nZXRpbmZvIGluZm87Ci0JCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKKwkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCQlpZiAoY29tcGF0KSB7CkBAIC05MTQsNyArOTExLDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBhcnB0X2dldF9lbnRyaWVzIGdldDsKLQlzdHJ1Y3QgYXJwdF90YWJsZSAqdDsKKwlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAKIAlpZiAoKmxlbiA8IHNpemVvZihnZXQpKSB7CiAJCWR1cHJpbnRmKCJnZXRfZW50cmllczogJXUgPCAlWnVcbiIsICpsZW4sIHNpemVvZihnZXQpKTsKQEAgLTkzMCw3ICs5MjcsOCBAQAogCiAJdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIE5GX0FSUCwgZ2V0Lm5hbWUpOwogCWlmICh0ICYmICFJU19FUlIodCkpIHsKLQkJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOworCQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtPnByaXZhdGU7CisKIAkJZHVwcmludGYoInQtPnByaXZhdGUtPm51bWJlciA9ICV1XG4iLAogCQkJIHByaXZhdGUtPm51bWJlcik7CiAJCWlmIChnZXQuc2l6ZSA9PSBwcml2YXRlLT5zaXplKQpAQCAtOTM5LDcgKzkzNyw3IEBACiAJCWVsc2UgewogCQkJZHVwcmludGYoImdldF9lbnRyaWVzOiBJJ3ZlIGdvdCAldSBub3QgJXUhXG4iLAogCQkJCSBwcml2YXRlLT5zaXplLCBnZXQuc2l6ZSk7Ci0JCQlyZXQgPSAtRUlOVkFMOworCQkJcmV0ID0gLUVBR0FJTjsKIAkJfQogCQltb2R1bGVfcHV0KHQtPm1lKTsKIAkJeHRfdGFibGVfdW5sb2NrKHQpOwpAQCAtOTU2LDcgKzk1NCw3IEBACiAJCQl2b2lkIF9fdXNlciAqY291bnRlcnNfcHRyKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGFycHRfdGFibGUgKnQ7CisJc3RydWN0IHh0X3RhYmxlICp0OwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJdm9pZCAqbG9jX2NwdV9vbGRfZW50cnk7CkBAIC0xMDkwLDExICsxMDg4LDExIEBACiAJc3RydWN0IHh0X2NvdW50ZXJzX2luZm8gdG1wOwogCXN0cnVjdCB4dF9jb3VudGVycyAqcGFkZGM7CiAJdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHNpemU7CiAJdm9pZCAqcHRtcDsKLQlzdHJ1Y3QgYXJwdF90YWJsZSAqdDsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGUgKnQ7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJaW50IHJldCA9IDA7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xNDk5LDExICsxNDk3LDExIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQVJQVF9TT19TRVRfUkVQTEFDRToKLQkJcmV0ID0gY29tcGF0X2RvX3JlcGxhY2Uoc2stPnNrX25ldCwgdXNlciwgbGVuKTsKKwkJcmV0ID0gY29tcGF0X2RvX3JlcGxhY2Uoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwogCQlicmVhazsKIAogCWNhc2UgQVJQVF9TT19TRVRfQUREX0NPVU5URVJTOgotCQlyZXQgPSBkb19hZGRfY291bnRlcnMoc2stPnNrX25ldCwgdXNlciwgbGVuLCAxKTsKKwkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAxKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTU1NywxMSArMTU1NSwxMSBAQAogfQogCiBzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKLQkJCQkgICAgICAgc3RydWN0IGFycHRfdGFibGUgKnRhYmxlLAorCQkJCSAgICAgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCSAgICAgICB2b2lkIF9fdXNlciAqdXNlcnB0cikKIHsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAl2b2lkIF9fdXNlciAqcG9zOwogCXVuc2lnbmVkIGludCBzaXplOwogCWludCByZXQgPSAwOwpAQCAtMTU5NSw3ICsxNTkzLDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBjb21wYXRfYXJwdF9nZXRfZW50cmllcyBnZXQ7Ci0Jc3RydWN0IGFycHRfdGFibGUgKnQ7CisJc3RydWN0IHh0X3RhYmxlICp0OwogCiAJaWYgKCpsZW4gPCBzaXplb2YoZ2V0KSkgewogCQlkdXByaW50ZigiY29tcGF0X2dldF9lbnRyaWVzOiAldSA8ICV6dVxuIiwgKmxlbiwgc2l6ZW9mKGdldCkpOwpAQCAtMTYxMiw3ICsxNjEwLDcgQEAKIAl4dF9jb21wYXRfbG9jayhORl9BUlApOwogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBORl9BUlAsIGdldC5uYW1lKTsKIAlpZiAodCAmJiAhSVNfRVJSKHQpKSB7Ci0JCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKKwkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwogCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyBpbmZvOwogCiAJCWR1cHJpbnRmKCJ0LT5wcml2YXRlLT5udW1iZXIgPSAldVxuIiwgcHJpdmF0ZS0+bnVtYmVyKTsKQEAgLTE2MjMsNyArMTYyMSw3IEBACiAJCX0gZWxzZSBpZiAoIXJldCkgewogCQkJZHVwcmludGYoImNvbXBhdF9nZXRfZW50cmllczogSSd2ZSBnb3QgJXUgbm90ICV1IVxuIiwKIAkJCQkgcHJpdmF0ZS0+c2l6ZSwgZ2V0LnNpemUpOwotCQkJcmV0ID0gLUVJTlZBTDsKKwkJCXJldCA9IC1FQUdBSU47CiAJCX0KIAkJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoTkZfQVJQKTsKIAkJbW9kdWxlX3B1dCh0LT5tZSk7CkBAIC0xNjQ3LDEwICsxNjQ1LDEwIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQVJQVF9TT19HRVRfSU5GTzoKLQkJcmV0ID0gZ2V0X2luZm8oc2stPnNrX25ldCwgdXNlciwgbGVuLCAxKTsKKwkJcmV0ID0gZ2V0X2luZm8oc29ja19uZXQoc2spLCB1c2VyLCBsZW4sIDEpOwogCQlicmVhazsKIAljYXNlIEFSUFRfU09fR0VUX0VOVFJJRVM6Ci0JCXJldCA9IGNvbXBhdF9nZXRfZW50cmllcyhzay0+c2tfbmV0LCB1c2VyLCBsZW4pOworCQlyZXQgPSBjb21wYXRfZ2V0X2VudHJpZXMoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSBkb19hcnB0X2dldF9jdGwoc2ssIGNtZCwgdXNlciwgbGVuKTsKQEAgLTE2NjgsMTEgKzE2NjYsMTEgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBBUlBUX1NPX1NFVF9SRVBMQUNFOgotCQlyZXQgPSBkb19yZXBsYWNlKHNrLT5za19uZXQsIHVzZXIsIGxlbik7CisJCXJldCA9IGRvX3JlcGxhY2Uoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwogCQlicmVhazsKIAogCWNhc2UgQVJQVF9TT19TRVRfQUREX0NPVU5URVJTOgotCQlyZXQgPSBkb19hZGRfY291bnRlcnMoc2stPnNrX25ldCwgdXNlciwgbGVuLCAwKTsKKwkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAwKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTY5MiwxMSArMTY5MCwxMSBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEFSUFRfU09fR0VUX0lORk86Ci0JCXJldCA9IGdldF9pbmZvKHNrLT5za19uZXQsIHVzZXIsIGxlbiwgMCk7CisJCXJldCA9IGdldF9pbmZvKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFSUFRfU09fR0VUX0VOVFJJRVM6Ci0JCXJldCA9IGdldF9lbnRyaWVzKHNrLT5za19uZXQsIHVzZXIsIGxlbik7CisJCXJldCA9IGdldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFSUFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVDogewpAQCAtMTcyNSw5ICsxNzIzLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3QgYXJwdF90YWJsZSAqYXJwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJICAgICAgIHN0cnVjdCBhcnB0X3RhYmxlICp0YWJsZSwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGFycHRfcmVwbGFjZSAqcmVwbCkKK3N0cnVjdCB4dF90YWJsZSAqYXJwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXJwdF9yZXBsYWNlICpyZXBsKQogewogCWludCByZXQ7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm87CkBAIC0xNzY5LDcgKzE3NjYsNyBAQAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXZvaWQgYXJwdF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBhcnB0X3RhYmxlICp0YWJsZSkKK3ZvaWQgYXJwdF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKQEAgLTE3ODcsNyArMTc4NCw3IEBACiB9CiAKIC8qIFRoZSBidWlsdC1pbiB0YXJnZXRzOiBzdGFuZGFyZCAoTlVMTCkgYW5kIGVycm9yLiAqLwotc3RhdGljIHN0cnVjdCBhcnB0X3RhcmdldCBhcnB0X3N0YW5kYXJkX3RhcmdldCBfX3JlYWRfbW9zdGx5ID0geworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgYXJwdF9zdGFuZGFyZF90YXJnZXQgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSBBUlBUX1NUQU5EQVJEX1RBUkdFVCwKIAkudGFyZ2V0c2l6ZQk9IHNpemVvZihpbnQpLAogCS5mYW1pbHkJCT0gTkZfQVJQLApAQCAtMTc5OCw3ICsxNzk1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBhcnB0X3RhcmdldCBhcnB0X2Vycm9yX3RhcmdldCBfX3JlYWRfbW9zdGx5ID0geworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgYXJwdF9lcnJvcl90YXJnZXQgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSBBUlBUX0VSUk9SX1RBUkdFVCwKIAkudGFyZ2V0CQk9IGFycHRfZXJyb3IsCiAJLnRhcmdldHNpemUJPSBBUlBUX0ZVTkNUSU9OX01BWE5BTUVMRU4sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCmluZGV4IDQ1ZmE0ZTIuLmEzODU5NTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbykKIHsKIAljb25zdCBzdHJ1Y3QgYXJwdF9tYW5nbGUgKm1hbmdsZSA9IHRhcmdpbmZvOwotCXN0cnVjdCBhcnBoZHIgKmFycDsKKwljb25zdCBzdHJ1Y3QgYXJwaGRyICphcnA7CiAJdW5zaWduZWQgY2hhciAqYXJwcHRyOwogCWludCBwbG4sIGhsbjsKIAotCWlmIChza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLT5sZW4pKQogCQlyZXR1cm4gTkZfRFJPUDsKIAogCWFycCA9IGFycF9oZHIoc2tiKTsKQEAgLTczLDggKzczLDkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBhcnB0X3RhcmdldCBhcnB0X21hbmdsZV9yZWcgX19yZWFkX21vc3RseSA9IHsKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGFycHRfbWFuZ2xlX3JlZyBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAorCS5mYW1pbHkJCT0gTkZfQVJQLAogCS50YXJnZXQJCT0gdGFyZ2V0LAogCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBhcnB0X21hbmdsZSksCiAJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LApAQCAtODMsMTUgKzg0LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFycHRfbWFuZ2xlX2luaXQodm9pZCkKIHsKLQlpZiAoYXJwdF9yZWdpc3Rlcl90YXJnZXQoJmFycHRfbWFuZ2xlX3JlZykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmYXJwdF9tYW5nbGVfcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFycHRfbWFuZ2xlX2Zpbmkodm9pZCkKIHsKLQlhcnB0X3VucmVnaXN0ZXJfdGFyZ2V0KCZhcnB0X21hbmdsZV9yZWcpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZhcnB0X21hbmdsZV9yZWcpOwogfQogCiBtb2R1bGVfaW5pdChhcnB0X21hbmdsZV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwppbmRleCA0ZTljNDk2Li4zYmU0ZDA3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCkBAIC00NSwxMCArNDUsMTAgQEAKIAkudGVybSA9IEFSUFRfRVJST1JfSU5JVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXJwdF90YWJsZSBwYWNrZXRfZmlsdGVyID0geworc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBSV19MT0NLX1VOTE9DS0VELAorCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5wcml2YXRlCT0gTlVMTCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GX0FSUCwKQEAgLTcwLDE4ICs3MCwyMSBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBORl9BUlAsCiAJCS5ob29rbnVtCT0gTkZfQVJQX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfRklMVEVSLAogCX0sCiAJewogCQkuaG9vawkJPSBhcnB0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IE5GX0FSUCwKIAkJLmhvb2tudW0JPSBORl9BUlBfT1VULAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfRklMVEVSLAogCX0sCiAJewogCQkuaG9vawkJPSBhcnB0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IE5GX0FSUCwKIAkJLmhvb2tudW0JPSBORl9BUlBfRk9SV0FSRCwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCA2YmRhMTEwLi43MTliZTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtMjgzLDggKzI4Myw4IEBACiBpcHFfbWFuZ2xlX2lwdjQoaXBxX3ZlcmRpY3RfbXNnX3QgKnYsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSkKIHsKIAlpbnQgZGlmZjsKLQlpbnQgZXJyOwogCXN0cnVjdCBpcGhkciAqdXNlcl9pcGggPSAoc3RydWN0IGlwaGRyICopdi0+cGF5bG9hZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAogCWlmICh2LT5kYXRhX2xlbiA8IHNpemVvZigqdXNlcl9pcGgpKQogCQlyZXR1cm4gMDsKQEAgLTI5NiwxNCArMjk2LDE2IEBACiAJCWlmICh2LT5kYXRhX2xlbiA+IDB4RkZGRikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZGlmZiA+IHNrYl90YWlscm9vbShlLT5za2IpKSB7Ci0JCQllcnIgPSBwc2tiX2V4cGFuZF9oZWFkKGUtPnNrYiwgMCwKKwkJCW5za2IgPSBza2JfY29weV9leHBhbmQoZS0+c2tiLCAwLAogCQkJCQkgICAgICAgZGlmZiAtIHNrYl90YWlscm9vbShlLT5za2IpLAogCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoZXJyKSB7CisJCQlpZiAoIW5za2IpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcF9xdWV1ZTogZXJyb3IgIgotCQkJCSAgICAgICJpbiBtYW5nbGUsIGRyb3BwaW5nIHBhY2tldDogJWRcbiIsIC1lcnIpOwotCQkJCXJldHVybiBlcnI7CisJCQkJICAgICAgImluIG1hbmdsZSwgZHJvcHBpbmcgcGFja2V0XG4iKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KKwkJCWtmcmVlX3NrYihlLT5za2IpOworCQkJZS0+c2tiID0gbnNrYjsKIAkJfQogCQlza2JfcHV0KGUtPnNrYiwgZGlmZik7CiAJfQpAQCAtNDc5LDcgKzQ4MSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCS8qIERyb3AgYW55IHBhY2tldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3duZWQgZGV2aWNlICovCkBAIC01ODYsMTEgKzU4OCw5IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoSVBRX1BST0NfRlNfTkFNRSwgMCwgaW5pdF9uZXQucHJvY19uZXQpOwotCWlmIChwcm9jKSB7Ci0JCXByb2MtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCXByb2MtPnByb2NfZm9wcyA9ICZpcF9xdWV1ZV9wcm9jX2ZvcHM7Ci0JfSBlbHNlIHsKKwlwcm9jID0gcHJvY19jcmVhdGUoSVBRX1BST0NfRlNfTkFNRSwgMCwgaW5pdF9uZXQucHJvY19uZXQsCisJCQkgICAmaXBfcXVldWVfcHJvY19mb3BzKTsKKwlpZiAoIXByb2MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpcF9xdWV1ZTogZmFpbGVkIHRvIGNyZWF0ZSBwcm9jIGVudHJ5XG4iKTsKIAkJZ290byBjbGVhbnVwX2lwcW5sOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCA2MDA3MzdmLi40ZTdjNzE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC01Myw3ICs1Myw3IEBACiBkbyB7CQkJCQkJCQlcCiAJaWYgKCEoeCkpCQkJCQkJXAogCQlwcmludGsoIklQX05GX0FTU0VSVDogJXM6JXM6JXVcbiIsCQlcCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CVwKKwkJICAgICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOwlcCiB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBJUF9ORl9BU1NFUlQoeCkKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkJIHN0cnVjdCBpcHRfZW50cnkgKmUpCiB7CiAJdm9pZCAqdGFibGVfYmFzZTsKLQlzdHJ1Y3QgaXB0X2VudHJ5ICpyb290OworCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKnJvb3Q7CiAJY2hhciAqaG9va25hbWUsICpjaGFpbm5hbWUsICpjb21tZW50OwogCXVuc2lnbmVkIGludCBydWxlbnVtID0gMDsKIApAQCAtMzI3LDcgKzMyNyw3IEBACiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGxvbmcpKSkpOwogCXVfaW50MTZfdCBvZmZzZXQ7Ci0Jc3RydWN0IGlwaGRyICppcDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwOwogCXVfaW50MTZfdCBkYXRhbGVuOwogCWJvb2wgaG90ZHJvcCA9IGZhbHNlOwogCS8qIEluaXRpYWxpemluZyB2ZXJkaWN0IHRvIE5GX0RST1Aga2VlcHMgZ2NjIGhhcHB5LiAqLwpAQCAtOTI2LDcgKzkyNiw3IEBACiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtOTUzLDkgKzk1Myw5IEBACiAJdW5zaWduZWQgaW50IG9mZiwgbnVtOwogCXN0cnVjdCBpcHRfZW50cnkgKmU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJaW50IHJldCA9IDA7Ci0Jdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5OwogCiAJY291bnRlcnMgPSBhbGxvY19jb3VudGVycyh0YWJsZSk7CiAJaWYgKElTX0VSUihjb3VudGVycykpCkBAIC05NzUsOCArOTc1LDggQEAKIAkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCiAJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgPCB0b3RhbF9zaXplOyBvZmYgKz0gZS0+bmV4dF9vZmZzZXQsIG51bSsrKXsKIAkJdW5zaWduZWQgaW50IGk7Ci0JCXN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm07Ci0JCXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0ICp0OworCQljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptOworCQljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKIAogCQllID0gKHN0cnVjdCBpcHRfZW50cnkgKikobG9jX2NwdV9lbnRyeSArIG9mZik7CiAJCWlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZgpAQCAtMTExNiw3ICsxMTE2LDcgQEAKIAkJCQkgICAgImlwdGFibGVfJXMiLCBuYW1lKTsKIAlpZiAodCAmJiAhSVNfRVJSKHQpKSB7CiAJCXN0cnVjdCBpcHRfZ2V0aW5mbyBpbmZvOwotCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtPnByaXZhdGU7CisJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkJaWYgKGNvbXBhdCkgewpAQCAtMTE3Miw3ICsxMTcyLDcgQEAKIAogCXQgPSB4dF9maW5kX3RhYmxlX2xvY2sobmV0LCBBRl9JTkVULCBnZXQubmFtZSk7CiAJaWYgKHQgJiYgIUlTX0VSUih0KSkgewotCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtPnByaXZhdGU7CisJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAkJZHVwcmludGYoInQtPnByaXZhdGUtPm51bWJlciA9ICV1XG4iLCBwcml2YXRlLT5udW1iZXIpOwogCQlpZiAoZ2V0LnNpemUgPT0gcHJpdmF0ZS0+c2l6ZSkKIAkJCXJldCA9IGNvcHlfZW50cmllc190b191c2VyKHByaXZhdGUtPnNpemUsCkBAIC0xMTgwLDcgKzExODAsNyBAQAogCQllbHNlIHsKIAkJCWR1cHJpbnRmKCJnZXRfZW50cmllczogSSd2ZSBnb3QgJXUgbm90ICV1IVxuIiwKIAkJCQkgcHJpdmF0ZS0+c2l6ZSwgZ2V0LnNpemUpOwotCQkJcmV0ID0gLUVJTlZBTDsKKwkJCXJldCA9IC1FQUdBSU47CiAJCX0KIAkJbW9kdWxlX3B1dCh0LT5tZSk7CiAJCXh0X3RhYmxlX3VubG9jayh0KTsKQEAgLTEzMzcsMTEgKzEzMzcsMTEgQEAKIAlzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbyB0bXA7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpwYWRkYzsKIAl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOwotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgc2l6ZTsKIAl2b2lkICpwdG1wOwogCXN0cnVjdCB4dF90YWJsZSAqdDsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTE4NTIsMTEgKzE4NTIsMTEgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJUFRfU09fU0VUX1JFUExBQ0U6Ci0JCXJldCA9IGNvbXBhdF9kb19yZXBsYWNlKHNrLT5za19uZXQsIHVzZXIsIGxlbik7CisJCXJldCA9IGNvbXBhdF9kb19yZXBsYWNlKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTsKIAkJYnJlYWs7CiAKIAljYXNlIElQVF9TT19TRVRfQUREX0NPVU5URVJTOgotCQlyZXQgPSBkb19hZGRfY291bnRlcnMoc2stPnNrX25ldCwgdXNlciwgbGVuLCAxKTsKKwkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAxKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTg3OCwxMSArMTg3OCwxMSBAQAogCQkJICAgIHZvaWQgX191c2VyICp1c2VycHRyKQogewogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCXZvaWQgX191c2VyICpwb3M7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJaW50IHJldCA9IDA7Ci0Jdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5OwogCXVuc2lnbmVkIGludCBpID0gMDsKIAogCWNvdW50ZXJzID0gYWxsb2NfY291bnRlcnModGFibGUpOwpAQCAtMTkyOSw3ICsxOTI5LDcgQEAKIAl4dF9jb21wYXRfbG9jayhBRl9JTkVUKTsKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKG5ldCwgQUZfSU5FVCwgZ2V0Lm5hbWUpOwogCWlmICh0ICYmICFJU19FUlIodCkpIHsKLQkJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOworCQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtPnByaXZhdGU7CiAJCXN0cnVjdCB4dF90YWJsZV9pbmZvIGluZm87CiAJCWR1cHJpbnRmKCJ0LT5wcml2YXRlLT5udW1iZXIgPSAldVxuIiwgcHJpdmF0ZS0+bnVtYmVyKTsKIAkJcmV0ID0gY29tcGF0X3RhYmxlX2luZm8ocHJpdmF0ZSwgJmluZm8pOwpAQCAtMTkzOSw3ICsxOTM5LDcgQEAKIAkJfSBlbHNlIGlmICghcmV0KSB7CiAJCQlkdXByaW50ZigiY29tcGF0X2dldF9lbnRyaWVzOiBJJ3ZlIGdvdCAldSBub3QgJXUhXG4iLAogCQkJCSBwcml2YXRlLT5zaXplLCBnZXQuc2l6ZSk7Ci0JCQlyZXQgPSAtRUlOVkFMOworCQkJcmV0ID0gLUVBR0FJTjsKIAkJfQogCQl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUKTsKIAkJbW9kdWxlX3B1dCh0LT5tZSk7CkBAIC0xOTYzLDEwICsxOTYzLDEwIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSVBUX1NPX0dFVF9JTkZPOgotCQlyZXQgPSBnZXRfaW5mbyhzay0+c2tfbmV0LCB1c2VyLCBsZW4sIDEpOworCQlyZXQgPSBnZXRfaW5mbyhzb2NrX25ldChzayksIHVzZXIsIGxlbiwgMSk7CiAJCWJyZWFrOwogCWNhc2UgSVBUX1NPX0dFVF9FTlRSSUVTOgotCQlyZXQgPSBjb21wYXRfZ2V0X2VudHJpZXMoc2stPnNrX25ldCwgdXNlciwgbGVuKTsKKwkJcmV0ID0gY29tcGF0X2dldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gZG9faXB0X2dldF9jdGwoc2ssIGNtZCwgdXNlciwgbGVuKTsKQEAgLTE5ODUsMTEgKzE5ODUsMTEgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJUFRfU09fU0VUX1JFUExBQ0U6Ci0JCXJldCA9IGRvX3JlcGxhY2Uoc2stPnNrX25ldCwgdXNlciwgbGVuKTsKKwkJcmV0ID0gZG9fcmVwbGFjZShzb2NrX25ldChzayksIHVzZXIsIGxlbik7CiAJCWJyZWFrOwogCiAJY2FzZSBJUFRfU09fU0VUX0FERF9DT1VOVEVSUzoKLQkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHNrLT5za19uZXQsIHVzZXIsIGxlbiwgMCk7CisJCXJldCA9IGRvX2FkZF9jb3VudGVycyhzb2NrX25ldChzayksIHVzZXIsIGxlbiwgMCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTIwMTAsMTEgKzIwMTAsMTEgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJUFRfU09fR0VUX0lORk86Ci0JCXJldCA9IGdldF9pbmZvKHNrLT5za19uZXQsIHVzZXIsIGxlbiwgMCk7CisJCXJldCA9IGdldF9pbmZvKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIElQVF9TT19HRVRfRU5UUklFUzoKLQkJcmV0ID0gZ2V0X2VudHJpZXMoc2stPnNrX25ldCwgdXNlciwgbGVuKTsKKwkJcmV0ID0gZ2V0X2VudHJpZXMoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwogCQlicmVhazsKIAogCWNhc2UgSVBUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSDoKQEAgLTIxMzAsNyArMjEzMCw4IEBACiAJICAgdW5zaWduZWQgaW50IHByb3RvZmYsCiAJICAgYm9vbCAqaG90ZHJvcCkKIHsKLQlzdHJ1Y3QgaWNtcGhkciBfaWNtcGgsICppYzsKKwljb25zdCBzdHJ1Y3QgaWNtcGhkciAqaWM7CisJc3RydWN0IGljbXBoZHIgX2ljbXBoOwogCWNvbnN0IHN0cnVjdCBpcHRfaWNtcCAqaWNtcGluZm8gPSBtYXRjaGluZm87CiAKIAkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggYzZjZjg0Yy4uMjJkOGU3YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC04Miw4ICs4Miw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIGNsdXN0ZXJpcF9jb25maWdfZW50cnlfcHV0KHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjKQogeworCXdyaXRlX2xvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYy0+ZW50cmllcykpIHsKLQkJd3JpdGVfbG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCQlsaXN0X2RlbCgmYy0+bGlzdCk7CiAJCXdyaXRlX3VubG9ja19iaCgmY2x1c3RlcmlwX2xvY2spOwogCkBAIC05Niw3ICs5Niw5IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAkJcmVtb3ZlX3Byb2NfZW50cnkoYy0+cGRlLT5uYW1lLCBjLT5wZGUtPnBhcmVudCk7CiAjZW5kaWYKKwkJcmV0dXJuOwogCX0KKwl3cml0ZV91bmxvY2tfYmgoJmNsdXN0ZXJpcF9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICoKQEAgLTE0Miw3ICsxNDQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKgotY2x1c3RlcmlwX2NvbmZpZ19pbml0KHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvICppLCBfX2JlMzIgaXAsCitjbHVzdGVyaXBfY29uZmlnX2luaXQoY29uc3Qgc3RydWN0IGlwdF9jbHVzdGVyaXBfdGd0X2luZm8gKmksIF9fYmUzMiBpcCwKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmM7CkBAIC0xNjcsMTQgKzE2OSwxMyBAQAogCiAJCS8qIGNyZWF0ZSBwcm9jIGRpciBlbnRyeSAqLwogCQlzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1IiwgTklQUVVBRChpcCkpOwotCQljLT5wZGUgPSBjcmVhdGVfcHJvY19lbnRyeShidWZmZXIsIFNfSVdVU1J8U19JUlVTUiwKLQkJCQkJICAgY2x1c3RlcmlwX3Byb2NkaXIpOworCQljLT5wZGUgPSBwcm9jX2NyZWF0ZShidWZmZXIsIFNfSVdVU1J8U19JUlVTUiwKKwkJCQkgICAgIGNsdXN0ZXJpcF9wcm9jZGlyLCAmY2x1c3RlcmlwX3Byb2NfZm9wcyk7CiAJCWlmICghYy0+cGRlKSB7CiAJCQlrZnJlZShjKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJfQotCWMtPnBkZS0+cHJvY19mb3BzID0gJmNsdXN0ZXJpcF9wcm9jX2ZvcHM7CiAJYy0+cGRlLT5kYXRhID0gYzsKICNlbmRpZgogCkBAIC0zMzIsNyArMzMzLDcgQEAKIAl9CiAKICNpZmRlZiBERUJVRwotCURVTVBfVFVQTEUoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJbmZfY3RfZHVtcF90dXBsZV9pcCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKICNlbmRpZgogCXByX2RlYnVnKCJoYXNoPSV1IGN0X2hhc2g9JXUgIiwgaGFzaCwgY3QtPm1hcmspOwogCWlmICghY2x1c3RlcmlwX3Jlc3BvbnNpYmxlKGNpcGluZm8tPmNvbmZpZywgaGFzaCkpIHsKQEAgLTQxNyw3ICs0MTgsNyBAQAogLyogZHJvcCByZWZlcmVuY2UgY291bnQgb2YgY2x1c3RlciBjb25maWcgd2hlbiBydWxlIGlzIGRlbGV0ZWQgKi8KIHN0YXRpYyB2b2lkIGNsdXN0ZXJpcF90Z19kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdm9pZCAqdGFyZ2luZm8pCiB7Ci0Jc3RydWN0IGlwdF9jbHVzdGVyaXBfdGd0X2luZm8gKmNpcGluZm8gPSB0YXJnaW5mbzsKKwljb25zdCBzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyAqY2lwaW5mbyA9IHRhcmdpbmZvOwogCiAJLyogaWYgbm8gbW9yZSBlbnRyaWVzIGFyZSByZWZlcmVuY2luZyB0aGUgY29uZmlnLCByZW1vdmUgaXQKIAkgKiBmcm9tIHRoZSBsaXN0IGFuZCBkZXN0cm95IHRoZSBwcm9jIGVudHJ5ICovCkBAIC01NjYsNyArNTY3LDcgQEAKIAogc3RhdGljIHZvaWQgKmNsdXN0ZXJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOwogCXVuc2lnbmVkIGludCB3ZWlnaHQ7CiAJdV9pbnQzMl90IGxvY2FsX25vZGVzOwpAQCAtNTkzLDcgKzU5NCw3IEBACiAKIHN0YXRpYyB2b2lkICpjbHVzdGVyaXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgY2x1c3RlcmlwX3NlcV9wb3NpdGlvbiAqaWR4ID0gKHN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICopdjsKKwlzdHJ1Y3QgY2x1c3RlcmlwX3NlcV9wb3NpdGlvbiAqaWR4ID0gdjsKIAogCSpwb3MgPSArK2lkeC0+cG9zOwogCWlmICgqcG9zID49IGlkeC0+d2VpZ2h0KSB7CkBAIC02MTIsNyArNjEzLDcgQEAKIAogc3RhdGljIGludCBjbHVzdGVyaXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQogewotCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHggPSAoc3RydWN0IGNsdXN0ZXJpcF9zZXFfcG9zaXRpb24gKil2OworCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHggPSB2OwogCiAJaWYgKGlkeC0+cG9zICE9IDApCiAJCXNlcV9wdXRjKHMsICcsJyk7CkBAIC02NjgsNyArNjY5LDcgQEAKIHsKICNkZWZpbmUgUFJPQ19XUklURUxFTgkxMAogCWNoYXIgYnVmZmVyW1BST0NfV1JJVEVMRU4rMV07Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJY29uc3Qgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBwZGUtPmRhdGE7CiAJdW5zaWduZWQgbG9uZyBub2RlbnVtOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0VDTi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9FQ04uYwppbmRleCAyMTM5NWJjLi5kNjAxMzljIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0VDTi5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRUNOLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdm9pZCAqdGFyZ2luZm8sCiAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLQljb25zdCBzdHJ1Y3QgaXB0X0VDTl9pbmZvICplaW5mbyA9IChzdHJ1Y3QgaXB0X0VDTl9pbmZvICopdGFyZ2luZm87CisJY29uc3Qgc3RydWN0IGlwdF9FQ05faW5mbyAqZWluZm8gPSB0YXJnaW5mbzsKIAljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplID0gZV92b2lkOwogCiAJaWYgKGVpbmZvLT5vcGVyYXRpb24gJiBJUFRfRUNOX09QX01BU0spIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCmluZGV4IGIzOGQ3ODUuLjBhZjE0MTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYwpAQCAtNzYsNyArNzYsOCBAQAogCiAJaWYgKChsb2dmbGFncyAmIElQVF9MT0dfSVBPUFQpCiAJICAgICYmIGloLT5paGwgKiA0ID4gc2l6ZW9mKHN0cnVjdCBpcGhkcikpIHsKLQkJdW5zaWduZWQgY2hhciBfb3B0WzQgKiAxNSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpXSwgKm9wOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpvcDsKKwkJdW5zaWduZWQgY2hhciBfb3B0WzQgKiAxNSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpXTsKIAkJdW5zaWduZWQgaW50IGksIG9wdHNpemU7CiAKIAkJb3B0c2l6ZSA9IGloLT5paGwgKiA0IC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CkBAIC0zMzgsMTIgKzMzOSwxNiBAQAogCWlmICgobG9nZmxhZ3MgJiBJUFRfTE9HX1VJRCkgJiYgIWlwaG9mZiAmJiBza2ItPnNrKSB7CiAJCXJlYWRfbG9ja19iaCgmc2tiLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJCWlmIChza2ItPnNrLT5za19zb2NrZXQgJiYgc2tiLT5zay0+c2tfc29ja2V0LT5maWxlKQotCQkJcHJpbnRrKCJVSUQ9JXUgR0lEPSV1IiwKKwkJCXByaW50aygiVUlEPSV1IEdJRD0ldSAiLAogCQkJCXNrYi0+c2stPnNrX3NvY2tldC0+ZmlsZS0+Zl91aWQsCiAJCQkJc2tiLT5zay0+c2tfc29ja2V0LT5maWxlLT5mX2dpZCk7CiAJCXJlYWRfdW5sb2NrX2JoKCZza2ItPnNrLT5za19jYWxsYmFja19sb2NrKTsKIAl9CiAKKwkvKiBNYXggbGVuZ3RoOiAxNiAiTUFSSz0weEZGRkZGRkZGICIgKi8KKwlpZiAoIWlwaG9mZiAmJiBza2ItPm1hcmspCisJCXByaW50aygiTUFSSz0weCV4ICIsIHNrYi0+bWFyayk7CisKIAkvKiBQcm90byAgICBNYXggbG9nIHN0cmluZyBsZW5ndGggKi8KIAkvKiBJUDogICAgICA0MCs0Nis2KzExKzEyNyA9IDIzMCAqLwogCS8qIFRDUDogICAgIDEwK21heCgyNSwyMCszMCsxMys5KzMyKzExKzEyNykgPSAyNTIgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKaW5kZXggZDgwZmVlOC4uODRjMjZkZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCW1yID0gdGFyZ2luZm87Ci0JcnQgPSAoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0OworCXJ0ID0gc2tiLT5ydGFibGU7CiAJbmV3c3JjID0gaW5ldF9zZWxlY3RfYWRkcihvdXQsIHJ0LT5ydF9nYXRld2F5LCBSVF9TQ09QRV9VTklWRVJTRSk7CiAJaWYgKCFuZXdzcmMpIHsKIAkJcHJpbnRrKCJNQVNRVUVSQURFOiAlcyBhdGUgbXkgSVAgYWRkcmVzc1xuIiwgb3V0LT5uYW1lKTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgPT0gTkVUREVWX0RPV04pIHsKQEAgLTEzOSwxOCArMTM5LDggQEAKIAkJCSAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsCiAJCQkgICB2b2lkICpwdHIpCiB7Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9ICgoc3RydWN0IGluX2lmYWRkciAqKXB0ciktPmlmYV9kZXYtPmRldjsKLQotCWlmIChldmVudCA9PSBORVRERVZfRE9XTikgewotCQkvKiBJUCBhZGRyZXNzIHdhcyBkZWxldGVkLiAgU2VhcmNoIGVudGlyZSB0YWJsZSBmb3IKLQkJICAgY29ubnRyYWNrcyB3aGljaCB3ZXJlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGRldmljZSwKLQkJICAgYW5kIGZvcmdldCB0aGVtLiAqLwotCQlORl9DVF9BU1NFUlQoZGV2LT5pZmluZGV4ICE9IDApOwotCi0JCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChkZXZpY2VfY21wLCAodm9pZCAqKShsb25nKWRldi0+aWZpbmRleCk7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9ET05FOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoKHN0cnVjdCBpbl9pZmFkZHIgKilwdHIpLT5pZmFfZGV2LT5kZXY7CisJcmV0dXJuIG1hc3FfZGV2aWNlX2V2ZW50KHRoaXMsIGV2ZW50LCBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1hc3FfZGV2X25vdGlmaWVyID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKaW5kZXggMjI2MDZlMi4uMjYzOTg3MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCkBAIC0zNSw4ICszNSwxMCBAQAogc3RhdGljIHZvaWQgc2VuZF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLCBpbnQgaG9vaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQlzdHJ1Y3QgaXBoZHIgKm9pcGgsICpuaXBoOwotCXN0cnVjdCB0Y3BoZHIgX290Y3BoLCAqb3RoLCAqdGNwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKm9pcGg7CisJc3RydWN0IGlwaGRyICpuaXBoOworCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKm90aDsKKwlzdHJ1Y3QgdGNwaGRyIF9vdGNwaCwgKnRjcGg7CiAJdW5zaWduZWQgaW50IGFkZHJfdHlwZTsKIAogCS8qIElQIGhlYWRlciBjaGVja3M6IGZyYWdtZW50LiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKaW5kZXggNjhjYmUzYy4uMjFjYjA1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCkBAIC0yNTIsNiArMjUyLDggQEAKIAlpZiAoKGluZm8tPmNoZWNrX3NldCAmIChJUFRfUkVDRU5UX1NFVCB8IElQVF9SRUNFTlRfUkVNT1ZFKSkgJiYKIAkgICAgKGluZm8tPnNlY29uZHMgfHwgaW5mby0+aGl0X2NvdW50KSkKIAkJcmV0dXJuIGZhbHNlOworCWlmIChpbmZvLT5oaXRfY291bnQgPiBpcF9wa3RfbGlzdF90b3QpCisJCXJldHVybiBmYWxzZTsKIAlpZiAoaW5mby0+bmFtZVswXSA9PSAnXDAnIHx8CiAJICAgIHN0cm5sZW4oaW5mby0+bmFtZSwgSVBUX1JFQ0VOVF9OQU1FX0xFTikgPT0gSVBUX1JFQ0VOVF9OQU1FX0xFTikKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjc0LDEyICsyNzYsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaXBfbGlzdF9oYXNoX3NpemU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJnQtPmlwaGFzaFtpXSk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQl0LT5wcm9jID0gY3JlYXRlX3Byb2NfZW50cnkodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcHJvY19kaXIpOworCXQtPnByb2MgPSBwcm9jX2NyZWF0ZSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCBwcm9jX2RpciwgJnJlY2VudF9mb3BzKTsKIAlpZiAodC0+cHJvYyA9PSBOVUxMKSB7CiAJCWtmcmVlKHQpOwogCQlnb3RvIG91dDsKIAl9Ci0JdC0+cHJvYy0+cHJvY19mb3BzID0gJnJlY2VudF9mb3BzOwogCXQtPnByb2MtPnVpZCAgICAgICA9IGlwX2xpc3RfdWlkOwogCXQtPnByb2MtPmdpZCAgICAgICA9IGlwX2xpc3RfZ2lkOwogCXQtPnByb2MtPmRhdGEgICAgICA9IHQ7CkBAIC0zMzksNyArMzQwLDcgQEAKIHN0YXRpYyB2b2lkICpyZWNlbnRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCByZWNlbnRfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHJlY2VudF90YWJsZSAqdCA9IHN0LT50YWJsZTsKKwljb25zdCBzdHJ1Y3QgcmVjZW50X3RhYmxlICp0ID0gc3QtPnRhYmxlOwogCXN0cnVjdCByZWNlbnRfZW50cnkgKmUgPSB2OwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBlLT5saXN0Lm5leHQ7CiAKQEAgLTM2MCw3ICszNjEsNyBAQAogCiBzdGF0aWMgaW50IHJlY2VudF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplID0gdjsKKwljb25zdCBzdHJ1Y3QgcmVjZW50X2VudHJ5ICplID0gdjsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWkgPSAoZS0+aW5kZXggLSAxKSAlIGlwX3BrdF9saXN0X3RvdDsKQEAgLTM5NSw3ICszOTYsNyBAQAogc3RhdGljIHNzaXplX3QgcmVjZW50X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICppbnB1dCwKIAkJCQkgc2l6ZV90IHNpemUsIGxvZmZfdCAqbG9mZikKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwljb25zdCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgcmVjZW50X3RhYmxlICp0ID0gcGRlLT5kYXRhOwogCXN0cnVjdCByZWNlbnRfZW50cnkgKmU7CiAJY2hhciBidWZbc2l6ZW9mKCIrMjU1LjI1NS4yNTUuMjU1IildLCAqYyA9IGJ1ZjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKaW5kZXggNjlmM2Q3ZS4uMWVhNjc3ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKQEAgLTU2LDIwICs1NiwzMiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBSV19MT0NLX1VOTE9DS0VELAorCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CiAKIC8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKK2lwdF9sb2NhbF9pbl9ob29rKHVuc2lnbmVkIGludCBob29rLAorCQkgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJCQkgICAgbmZfbG9jYWxfaW5fbmV0KGluLCBvdXQpLT5pcHY0LmlwdGFibGVfZmlsdGVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAogaXB0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCiAJIHN0cnVjdCBza19idWZmICpza2IsCiAJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsIGluaXRfbmV0LmlwdjQuaXB0YWJsZV9maWx0ZXIpOworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIG5mX2ZvcndhcmRfbmV0KGluLCBvdXQpLT5pcHY0LmlwdGFibGVfZmlsdGVyKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtODgsMTIgKzEwMCwxMyBAQAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LCBpbml0X25ldC5pcHY0LmlwdGFibGVfZmlsdGVyKTsKKwlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgICBuZl9sb2NhbF9vdXRfbmV0KGluLCBvdXQpLT5pcHY0LmlwdGFibGVfZmlsdGVyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKIAl7Ci0JCS5ob29rCQk9IGlwdF9ob29rLAorCQkuaG9vawkJPSBpcHRfbG9jYWxfaW5faG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCBjNTVhMjEwLi5kYTU5MTgyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtNjcsMjAgKzY3LDU0IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBSV19MT0NLX1VOTE9DS0VELAorCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfbWFuZ2xlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfcm91dGVfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKK2lwdF9wcmVfcm91dGluZ19ob29rKHVuc2lnbmVkIGludCBob29rLAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJCQkgICAgbmZfcHJlX3JvdXRpbmdfbmV0KGluLCBvdXQpLT5pcHY0LmlwdGFibGVfbWFuZ2xlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraXB0X3Bvc3Rfcm91dGluZ19ob29rKHVuc2lnbmVkIGludCBob29rLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIG5mX3Bvc3Rfcm91dGluZ19uZXQoaW4sIG91dCktPmlwdjQuaXB0YWJsZV9tYW5nbGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitpcHRfbG9jYWxfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKKwkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIG5mX2xvY2FsX2luX25ldChpbiwgb3V0KS0+aXB2NC5pcHRhYmxlX21hbmdsZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2lwdF9mb3J3YXJkX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCiAJIHN0cnVjdCBza19idWZmICpza2IsCiAJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsIGluaXRfbmV0LmlwdjQuaXB0YWJsZV9tYW5nbGUpOworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIG5mX2ZvcndhcmRfbmV0KGluLCBvdXQpLT5pcHY0LmlwdGFibGVfbWFuZ2xlKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtMTEyLDcgKzE0Niw4IEBACiAJZGFkZHIgPSBpcGgtPmRhZGRyOwogCXRvcyA9IGlwaC0+dG9zOwogCi0JcmV0ID0gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgaW5pdF9uZXQuaXB2NC5pcHRhYmxlX21hbmdsZSk7CisJcmV0ID0gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgIG5mX2xvY2FsX291dF9uZXQoaW4sIG91dCktPmlwdjQuaXB0YWJsZV9tYW5nbGUpOwogCS8qIFJlcm91dGUgZm9yIEFOWSBjaGFuZ2UuICovCiAJaWYgKHJldCAhPSBORl9EUk9QICYmIHJldCAhPSBORl9TVE9MRU4gJiYgcmV0ICE9IE5GX1FVRVVFKSB7CiAJCWlwaCA9IGlwX2hkcihza2IpOwpAQCAtMTMwLDIxICsxNjUsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKIAl7Ci0JCS5ob29rCQk9IGlwdF9yb3V0ZV9ob29rLAorCQkuaG9vawkJPSBpcHRfcHJlX3JvdXRpbmdfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTUFOR0xFLAogCX0sCiAJewotCQkuaG9vawkJPSBpcHRfcm91dGVfaG9vaywKKwkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKIAl9LAogCXsKLQkJLmhvb2sJCT0gaXB0X3JvdXRlX2hvb2ssCisJCS5ob29rCQk9IGlwdF9mb3J3YXJkX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELApAQCAtMTU4LDcgKzE5Myw3IEBACiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9NQU5HTEUsCiAJfSwKIAl7Ci0JCS5ob29rCQk9IGlwdF9yb3V0ZV9ob29rLAorCQkuaG9vawkJPSBpcHRfcG9zdF9yb3V0aW5nX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IGU0MWZlOGMuLmZkZGNlNzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSAgUkFXX1ZBTElEX0hPT0tTLAotCS5sb2NrID0gUldfTE9DS19VTkxPQ0tFRCwKKwkubG9jayA9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfcmF3LmxvY2spLAogCS5tZSA9IFRISVNfTU9EVUxFLAogCS5hZiA9IEFGX0lORVQsCiB9OwpAQCAtNTIsNyArNTIsOCBAQAogCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgaW5pdF9uZXQuaXB2NC5pcHRhYmxlX3Jhdyk7CisJcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJCQkgICAgbmZfcHJlX3JvdXRpbmdfbmV0KGluLCBvdXQpLT5pcHY0LmlwdGFibGVfcmF3KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtNzAsNyArNzEsOCBAQAogCQkJICAgICAgICJwYWNrZXQuXG4iKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsIGluaXRfbmV0LmlwdjQuaXB0YWJsZV9yYXcpOworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIG5mX2xvY2FsX291dF9uZXQoaW4sIG91dCktPmlwdjQuaXB0YWJsZV9yYXcpOwogfQogCiAvKiAncmF3JyBpcyB0aGUgdmVyeSBmaXJzdCB0YWJsZS4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IGE2NWI4NDUuLmNhY2I5Y2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMjMsMzAgKzIzLDM2IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaD4KIAotc3RhdGljIGludCBpcHY0X3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCi0JCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoraW50ICgqbmZfbmF0X3NlcV9hZGp1c3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9zZXFfYWRqdXN0X2hvb2spOworCitzdGF0aWMgYm9vbCBpcHY0X3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCisJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAljb25zdCBfX2JlMzIgKmFwOwogCV9fYmUzMiBfYWRkcnNbMl07CiAJYXAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBuaG9mZiArIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpLAogCQkJCXNpemVvZih1X2ludDMyX3QpICogMiwgX2FkZHJzKTsKIAlpZiAoYXAgPT0gTlVMTCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCXR1cGxlLT5zcmMudTMuaXAgPSBhcFswXTsKIAl0dXBsZS0+ZHN0LnUzLmlwID0gYXBbMV07CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBpcHY0X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCitzdGF0aWMgYm9vbCBpcHY0X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7CiAJdHVwbGUtPnNyYy51My5pcCA9IG9yaWctPmRzdC51My5pcDsKIAl0dXBsZS0+ZHN0LnUzLmlwID0gb3JpZy0+c3JjLnUzLmlwOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgaXB2NF9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCkBAIC0xMDEsMzUgKzEwNyw0MSBAQAogCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKLQkvKiBXZSd2ZSBzZWVuIGl0IGNvbWluZyBvdXQgdGhlIG90aGVyIHNpZGU6IGNvbmZpcm0gaXQgKi8KLQlyZXR1cm4gbmZfY29ubnRyYWNrX2NvbmZpcm0oc2tiKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2Nvbm50cmFja19oZWxwKHVuc2lnbmVkIGludCBob29rbnVtLAotCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCQkJICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCWNvbnN0IHN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKKwl1bnNpZ25lZCBpbnQgcmV0OwogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAlpZiAoIWN0IHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpCi0JCXJldHVybiBORl9BQ0NFUFQ7CisJCWdvdG8gb3V0OwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CiAJaWYgKCFoZWxwKQotCQlyZXR1cm4gTkZfQUNDRVBUOworCQlnb3RvIG91dDsKKwogCS8qIHJjdV9yZWFkX2xvY2soKWVkIGJ5IG5mX2hvb2tfc2xvdyAqLwogCWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLT5oZWxwZXIpOwogCWlmICghaGVscGVyKQotCQlyZXR1cm4gTkZfQUNDRVBUOwotCXJldHVybiBoZWxwZXItPmhlbHAoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArIGlwX2hkcmxlbihza2IpLAotCQkJICAgIGN0LCBjdGluZm8pOworCQlnb3RvIG91dDsKKworCXJldCA9IGhlbHBlci0+aGVscChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICsgaXBfaGRybGVuKHNrYiksCisJCQkgICBjdCwgY3RpbmZvKTsKKwlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0ZXN0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKSkgeworCQl0eXBlb2YobmZfbmF0X3NlcV9hZGp1c3RfaG9vaykgc2VxX2FkanVzdDsKKworCQlzZXFfYWRqdXN0ID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZXFfYWRqdXN0X2hvb2spOworCQlpZiAoIXNlcV9hZGp1c3QgfHwgIXNlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkKKwkJCXJldHVybiBORl9EUk9QOworCX0KK291dDoKKwkvKiBXZSd2ZSBzZWVuIGl0IGNvbWluZyBvdXQgdGhlIG90aGVyIHNpZGU6IGNvbmZpcm0gaXQgKi8KKwlyZXR1cm4gbmZfY29ubnRyYWNrX2NvbmZpcm0oc2tiKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2Nvbm50cmFja19kZWZyYWcodW5zaWduZWQgaW50IGhvb2tudW0sCkBAIC0yMTEsMjAgKzIyMyw2IEBACiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCiAJfSwKIAl7Ci0JCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2hlbHAsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAotCX0sCi0JewotCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19oZWxwLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSLAotCX0sCi0JewogCQkuaG9vawkJPSBpcHY0X2NvbmZpcm0sCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCmluZGV4IDA4OTI1MmUuLjQwYTQ2ZDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCkBAIC0xMDYsMjEgKzEwNiwxNiBAQAogCS8qIHdlIG9ubHkgd2FudCB0byBwcmludCBESVJfT1JJR0lOQUwgKi8KIAlpZiAoTkZfQ1RfRElSRUNUSU9OKGhhc2gpKQogCQlyZXR1cm4gMDsKLQlpZiAoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSAhPSBBRl9JTkVUKQorCWlmIChuZl9jdF9sM251bShjdCkgIT0gQUZfSU5FVCkKIAkJcmV0dXJuIDA7CiAKLQlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCi0JCQkJICAgICAgIC50dXBsZS5zcmMubDNudW0pOworCWwzcHJvdG8gPSBfX25mX2N0X2wzcHJvdG9fZmluZChuZl9jdF9sM251bShjdCkpOwogCU5GX0NUX0FTU0VSVChsM3Byb3RvKTsKLQlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCi0JCQkJICAgICAgIC50dXBsZS5zcmMubDNudW0sCi0JCQkJICAgICAgIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQotCQkJCSAgICAgICAudHVwbGUuZHN0LnByb3RvbnVtKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCU5GX0NUX0FTU0VSVChsNHByb3RvKTsKIAogCWlmIChzZXFfcHJpbnRmKHMsICIlLThzICV1ICVsZCAiLAotCQkgICAgICBsNHByb3RvLT5uYW1lLAotCQkgICAgICBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtLAorCQkgICAgICBsNHByb3RvLT5uYW1lLCBuZl9jdF9wcm90b251bShjdCksCiAJCSAgICAgIHRpbWVyX3BlbmRpbmcoJmN0LT50aW1lb3V0KQogCQkgICAgICA/IChsb25nKShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwKSAhPSAwKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTM3OSw3ICszNzQsNyBAQAogCS5vcGVuICAgID0gY3RfY3B1X3NlcV9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9OwogCiBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcHY0X2NvbXBhdF9pbml0KHZvaWQpCkBAIC0zOTUsMTMgKzM5MCwxMCBAQAogCWlmICghcHJvY19leHApCiAJCWdvdG8gZXJyMjsKIAotCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpcF9jb25udHJhY2siLCBTX0lSVUdPLCBpbml0X25ldC5wcm9jX25ldF9zdGF0KTsKKwlwcm9jX3N0YXQgPSBwcm9jX2NyZWF0ZSgiaXBfY29ubnRyYWNrIiwgU19JUlVHTywKKwkJCQlpbml0X25ldC5wcm9jX25ldF9zdGF0LCAmY3RfY3B1X3NlcV9mb3BzKTsKIAlpZiAoIXByb2Nfc3RhdCkKIAkJZ290byBlcnIzOwotCi0JcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOwotCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCXJldHVybiAwOwogCiBlcnIzOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCA2ODczZmRkLi43OGFiMTlhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjIsMjIgKzIyLDIxIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5mX2N0X2ljbXBfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAqSFo7CiAKLXN0YXRpYyBpbnQgaWNtcF9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorc3RhdGljIGJvb2wgaWNtcF9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAljb25zdCBzdHJ1Y3QgaWNtcGhkciAqaHA7CiAJc3RydWN0IGljbXBoZHIgX2hkcjsKIAogCWhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7CiAJaWYgKGhwID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAl0dXBsZS0+ZHN0LnUuaWNtcC50eXBlID0gaHAtPnR5cGU7CiAJdHVwbGUtPnNyYy51LmljbXAuaWQgPSBocC0+dW4uZWNoby5pZDsKIAl0dXBsZS0+ZHN0LnUuaWNtcC5jb2RlID0gaHAtPmNvZGU7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogQWRkIDE7IHNwYWNlcyBmaWxsZWQgd2l0aCAwLiAqLwpAQCAtNTIsMTcgKzUxLDE3IEBACiAJW0lDTVBfQUREUkVTU1JFUExZXSA9IElDTVBfQUREUkVTUyArIDEKIH07CiAKLXN0YXRpYyBpbnQgaWNtcF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCitzdGF0aWMgYm9vbCBpY21wX2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7CiAJaWYgKG9yaWctPmRzdC51LmljbXAudHlwZSA+PSBzaXplb2YoaW52bWFwKQogCSAgICB8fCAhaW52bWFwW29yaWctPmRzdC51LmljbXAudHlwZV0pCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAl0dXBsZS0+c3JjLnUuaWNtcC5pZCA9IG9yaWctPnNyYy51LmljbXAuaWQ7CiAJdHVwbGUtPmRzdC51LmljbXAudHlwZSA9IGludm1hcFtvcmlnLT5kc3QudS5pY21wLnR5cGVdIC0gMTsKIAl0dXBsZS0+ZHN0LnUuaWNtcC5jb2RlID0gb3JpZy0+ZHN0LnUuaWNtcC5jb2RlOwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KQEAgLTEwMSw4ICsxMDAsOCBAQAogfQogCiAvKiBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGlzIHByb3RvY29sIGZvdW5kLiAqLwotc3RhdGljIGludCBpY21wX25ldyhzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCSAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKK3N0YXRpYyBib29sIGljbXBfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKIHsKIAlzdGF0aWMgY29uc3QgdV9pbnQ4X3QgdmFsaWRfbmV3W10gPSB7CiAJCVtJQ01QX0VDSE9dID0gMSwKQEAgLTExNiwxMSArMTE1LDExIEBACiAJCS8qIENhbid0IGNyZWF0ZSBhIG5ldyBJQ01QIGBjb25uJyB3aXRoIHRoaXMuICovCiAJCXByX2RlYnVnKCJpY21wOiBjYW4ndCBjcmVhdGUgbmV3IGNvbm4gd2l0aCB0eXBlICV1XG4iLAogCQkJIGN0LT50dXBsZWhhc2hbMF0udHVwbGUuZHN0LnUuaWNtcC50eXBlKTsKLQkJTkZfQ1RfRFVNUF9UVVBMRSgmY3QtPnR1cGxlaGFzaFswXS50dXBsZSk7Ci0JCXJldHVybiAwOworCQluZl9jdF9kdW1wX3R1cGxlX2lwKCZjdC0+dHVwbGVoYXNoWzBdLnR1cGxlKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAlhdG9taWNfc2V0KCZjdC0+cHJvdG8uaWNtcC5jb3VudCwgMCk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qIFJldHVybnMgY29ubnRyYWNrIGlmIGl0IGRlYWx0IHdpdGggSUNNUCwgYW5kIGZpbGxlZCBpbiBza2IgZmllbGRzICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDBkNWZhM2EuLjA0NTc4NTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC0xNTAsOSArMTUwLDkgQEAKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKIHsKIAl1bnNpZ25lZCBpbnQgaCA9IGhhc2hfYnlfc3JjKHR1cGxlKTsKLQlzdHJ1Y3QgbmZfY29ubl9uYXQgKm5hdDsKLQlzdHJ1Y3QgbmZfY29ubiAqY3Q7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJY29uc3Qgc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQ7CisJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OworCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpuOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShuYXQsIG4sICZieXNvdXJjZVtoXSwgYnlzb3VyY2UpIHsKQEAgLTM0OSw3ICszNDksNyBAQAogRVhQT1JUX1NZTUJPTChuZl9uYXRfc2V0dXBfaW5mbyk7CiAKIC8qIFJldHVybnMgdHJ1ZSBpZiBzdWNjZWVkZWQuICovCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogbWFuaXBfcGt0KHVfaW50MTZfdCBwcm90bywKIAkgIHN0cnVjdCBza19idWZmICpza2IsCiAJICB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCkBAIC0zNjAsNyArMzYwLDcgQEAKIAljb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpwOwogCiAJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIGlwaGRyb2ZmICsgc2l6ZW9mKCppcGgpKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlwaCA9ICh2b2lkICopc2tiLT5kYXRhICsgaXBoZHJvZmY7CiAKQEAgLTM2OSw3ICszNjksNyBAQAogCS8qIHJjdV9yZWFkX2xvY2soKWVkIGJ5IG5mX2hvb2tfc2xvdyAqLwogCXAgPSBfX25mX25hdF9wcm90b19maW5kKHByb3RvKTsKIAlpZiAoIXAtPm1hbmlwX3BrdChza2IsIGlwaGRyb2ZmLCB0YXJnZXQsIG1hbmlwdHlwZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpcGggPSAodm9pZCAqKXNrYi0+ZGF0YSArIGlwaGRyb2ZmOwogCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJY3N1bV9yZXBsYWNlNCgmaXBoLT5jaGVjaywgaXBoLT5kYWRkciwgdGFyZ2V0LT5kc3QudTMuaXApOwogCQlpcGgtPmRhZGRyID0gdGFyZ2V0LT5kc3QudTMuaXA7CiAJfQotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKiBEbyBwYWNrZXQgbWFuaXB1bGF0aW9ucyBhY2NvcmRpbmcgdG8gbmZfbmF0X3NldHVwX2luZm8uICovCkBAIC00MjYsNyArNDI2LDcgQEAKIAkJc3RydWN0IGljbXBoZHIgaWNtcDsKIAkJc3RydWN0IGlwaGRyIGlwOwogCX0gKmluc2lkZTsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CisJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgaW5uZXIsIHRhcmdldDsKIAlpbnQgaGRybGVuID0gaXBfaGRybGVuKHNrYik7CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKQEAgLTU0NCw0NiArNTQ0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZfbmF0X3Byb3RvY29sX3VucmVnaXN0ZXIpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCi1pbnQKLW5mX25hdF9wb3J0X3JhbmdlX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQotewotCU5MQV9QVVRfQkUxNihza2IsIENUQV9QUk9UT05BVF9QT1JUX01JTiwgcmFuZ2UtPm1pbi50Y3AucG9ydCk7Ci0JTkxBX1BVVF9CRTE2KHNrYiwgQ1RBX1BST1RPTkFUX1BPUlRfTUFYLCByYW5nZS0+bWF4LnRjcC5wb3J0KTsKLQotCXJldHVybiAwOwotCi1ubGFfcHV0X2ZhaWx1cmU6Ci0JcmV0dXJuIC0xOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BvcnRfbmxhdHRyX3RvX3JhbmdlKTsKLQotaW50Ci1uZl9uYXRfcG9ydF9ubGF0dHJfdG9fcmFuZ2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiB3ZSBoYXZlIHRvIHJldHVybiB3aGV0aGVyIHdlIGFjdHVhbGx5IHBhcnNlZCBzb21ldGhpbmcgb3Igbm90ICovCi0KLQlpZiAodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUlOXSkgewotCQlyZXQgPSAxOwotCQlyYW5nZS0+bWluLnRjcC5wb3J0ID0gbmxhX2dldF9iZTE2KHRiW0NUQV9QUk9UT05BVF9QT1JUX01JTl0pOwotCX0KLQotCWlmICghdGJbQ1RBX1BST1RPTkFUX1BPUlRfTUFYXSkgewotCQlpZiAocmV0KQotCQkJcmFuZ2UtPm1heC50Y3AucG9ydCA9IHJhbmdlLT5taW4udGNwLnBvcnQ7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gMTsKLQkJcmFuZ2UtPm1heC50Y3AucG9ydCA9IG5sYV9nZXRfYmUxNih0YltDVEFfUFJPVE9OQVRfUE9SVF9NQVhdKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmxhdHRyKTsKLSNlbmRpZgotCiAvKiBOb29uZSB1c2luZyBjb25udHJhY2sgYnkgdGhlIHRpbWUgdGhpcyBjYWxsZWQuICovCiBzdGF0aWMgdm9pZCBuZl9uYXRfY2xlYW51cF9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0KQogewpAQCAtNjI5LDYgKzU4OSw4IEBACiAJc2l6ZV90IGk7CiAJaW50IHJldDsKIAorCW5lZWRfaXB2NF9jb25udHJhY2soKTsKKwogCXJldCA9IG5mX2N0X2V4dGVuZF9yZWdpc3RlcigmbmF0X2V4dGVuZCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJuZl9uYXRfY29yZTogVW5hYmxlIHRvIHJlZ2lzdGVyIGV4dGVuc2lvblxuIik7CkBAIC02NTgsNiArNjIwLDkgQEAKIAluZl9jb25udHJhY2tfdW50cmFja2VkLnN0YXR1cyB8PSBJUFNfTkFUX0RPTkVfTUFTSzsKIAogCWwzcHJvdG8gPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KCh1X2ludDE2X3QpQUZfSU5FVCk7CisKKwlCVUdfT04obmZfbmF0X3NlcV9hZGp1c3RfaG9vayAhPSBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NlcV9hZGp1c3RfaG9vaywgbmZfbmF0X3NlcV9hZGp1c3QpOwogCXJldHVybiAwOwogCiAgY2xlYW51cF9leHRlbmQ6CkBAIC02ODQsNiArNjQ5LDggQEAKIAluZl9jdF9mcmVlX2hhc2h0YWJsZShieXNvdXJjZSwgbmZfbmF0X3ZtYWxsb2NlZCwgbmZfbmF0X2h0YWJsZV9zaXplKTsKIAluZl9jdF9sM3Byb3RvX3B1dChsM3Byb3RvKTsKIAluZl9jdF9leHRlbmRfdW5yZWdpc3RlcigmbmF0X2V4dGVuZCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZXFfYWRqdXN0X2hvb2ssIE5VTEwpOworCXN5bmNocm9uaXplX25ldCgpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwppbmRleCBjYTU3ZjQ3Li4xMTk3NmVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJIGNvbnN0IGNoYXIgKnJlcF9idWZmZXIsCiAJCQkgdW5zaWduZWQgaW50IHJlcF9sZW4pCiB7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0OworCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IHRjcGhkciAqdGNwaDsKIAlpbnQgb2xkbGVuLCBkYXRhbGVuOwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJCQkgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKIAkJCSB1bnNpZ25lZCBpbnQgcmVwX2xlbikKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3Q7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlzdHJ1Y3QgdWRwaGRyICp1ZHBoOwogCWludCBkYXRhbGVuLCBvbGRsZW47CkBAIC00MTYsNyArNDE2LDYgQEAKIAogCXJldHVybiAxOwogfQotRVhQT1JUX1NZTUJPTChuZl9uYXRfc2VxX2FkanVzdCk7CiAKIC8qIFNldHVwIE5BVCBvbiB0aGlzIGV4cGVjdGVkIGNvbm50cmFjayBzbyBpdCBmb2xsb3dzIG1hc3Rlci4gKi8KIC8qIElmIHdlIGZhaWwgdG8gZ2V0IGEgZnJlZSBOQVQgc2xvdCwgd2UnbGwgZ2V0IGRyb3BwZWQgb24gY29uZmlybSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYwppbmRleCAzYTFlNmQ2Li5kYTNkOTFhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYwpAQCAtNzIsNyArNzIsNyBAQAogCX0KIAogCXByX2RlYnVnKCJ0cnlpbmcgdG8gdW5leHBlY3Qgb3RoZXIgZGlyOiAiKTsKLQlORl9DVF9EVU1QX1RVUExFKCZ0KTsKKwluZl9jdF9kdW1wX3R1cGxlX2lwKCZ0KTsKIAlvdGhlcl9leHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQoJnQpOwogCWlmIChvdGhlcl9leHApIHsKIAkJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChvdGhlcl9leHApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19jb21tb24uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1MzdmMQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fY29tbW9uLmMKQEAgLTAsMCArMSwxMjAgQEAKKy8qIChDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqIChDKSAyMDAyLTIwMDYgTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4KKyAqIChDKSAyMDA4IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oPgorCitib29sIG5mX25hdF9wcm90b19pbl9yYW5nZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkJICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAorCQkJICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWF4KQoreworCV9fYmUxNiBwb3J0OworCisJaWYgKG1hbmlwdHlwZSA9PSBJUF9OQVRfTUFOSVBfU1JDKQorCQlwb3J0ID0gdHVwbGUtPnNyYy51LmFsbDsKKwllbHNlCisJCXBvcnQgPSB0dXBsZS0+ZHN0LnUuYWxsOworCisJcmV0dXJuIG50b2hzKHBvcnQpID49IG50b2hzKG1pbi0+YWxsKSAmJgorCSAgICAgICBudG9ocyhwb3J0KSA8PSBudG9ocyhtYXgtPmFsbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHJvdG9faW5fcmFuZ2UpOworCitib29sIG5mX25hdF9wcm90b191bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCisJCQkgICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICAgIHVfaW50MTZfdCAqcm92ZXIpCit7CisJdW5zaWduZWQgaW50IHJhbmdlX3NpemUsIG1pbiwgaTsKKwlfX2JlMTYgKnBvcnRwdHI7CisJdV9pbnQxNl90IG9mZjsKKworCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKKwkJcG9ydHB0ciA9ICZ0dXBsZS0+c3JjLnUuYWxsOworCWVsc2UKKwkJcG9ydHB0ciA9ICZ0dXBsZS0+ZHN0LnUuYWxsOworCisJLyogSWYgbm8gcmFuZ2Ugc3BlY2lmaWVkLi4uICovCisJaWYgKCEocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCkpIHsKKwkJLyogSWYgaXQncyBkc3QgcmV3cml0ZSwgY2FuJ3QgY2hhbmdlIHBvcnQgKi8KKwkJaWYgKG1hbmlwdHlwZSA9PSBJUF9OQVRfTUFOSVBfRFNUKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChudG9ocygqcG9ydHB0cikgPCAxMDI0KSB7CisJCQkvKiBMb29zZSBjb252ZW50aW9uOiA+PiA1MTIgaXMgY3JlZGVudGlhbCBwYXNzaW5nICovCisJCQlpZiAobnRvaHMoKnBvcnRwdHIpIDwgNTEyKSB7CisJCQkJbWluID0gMTsKKwkJCQlyYW5nZV9zaXplID0gNTExIC0gbWluICsgMTsKKwkJCX0gZWxzZSB7CisJCQkJbWluID0gNjAwOworCQkJCXJhbmdlX3NpemUgPSAxMDIzIC0gbWluICsgMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1pbiA9IDEwMjQ7CisJCQlyYW5nZV9zaXplID0gNjU1MzUgLSAxMDI0ICsgMTsKKwkJfQorCX0gZWxzZSB7CisJCW1pbiA9IG50b2hzKHJhbmdlLT5taW4uYWxsKTsKKwkJcmFuZ2Vfc2l6ZSA9IG50b2hzKHJhbmdlLT5tYXguYWxsKSAtIG1pbiArIDE7CisJfQorCisJb2ZmID0gKnJvdmVyOworCWlmIChyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fUkFORE9NKQorCQlvZmYgPSBuZXRfcmFuZG9tKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2Vfc2l6ZTsgaSsrLCBvZmYrKykgeworCQkqcG9ydHB0ciA9IGh0b25zKG1pbiArIG9mZiAlIHJhbmdlX3NpemUpOworCQlpZiAobmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fUkFORE9NKSkKKwkJCSpyb3ZlciA9IG9mZjsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9wcm90b191bmlxdWVfdHVwbGUpOworCisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCitpbnQgbmZfbmF0X3Byb3RvX3JhbmdlX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKK3sKKwlOTEFfUFVUX0JFMTYoc2tiLCBDVEFfUFJPVE9OQVRfUE9SVF9NSU4sIHJhbmdlLT5taW4uYWxsKTsKKwlOTEFfUFVUX0JFMTYoc2tiLCBDVEFfUFJPVE9OQVRfUE9SVF9NQVgsIHJhbmdlLT5tYXguYWxsKTsKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiAtMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9wcm90b19ubGF0dHJfdG9fcmFuZ2UpOworCitpbnQgbmZfbmF0X3Byb3RvX25sYXR0cl90b19yYW5nZShzdHJ1Y3QgbmxhdHRyICp0YltdLAorCQkJCSBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKK3sKKwlpZiAodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUlOXSkgeworCQlyYW5nZS0+bWluLmFsbCA9IG5sYV9nZXRfYmUxNih0YltDVEFfUFJPVE9OQVRfUE9SVF9NSU5dKTsKKwkJcmFuZ2UtPm1heC5hbGwgPSByYW5nZS0+bWluLnRjcC5wb3J0OworCQlyYW5nZS0+ZmxhZ3MgfD0gSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRDsKKwl9CisJaWYgKHRiW0NUQV9QUk9UT05BVF9QT1JUX01BWF0pIHsKKwkJcmFuZ2UtPm1heC5hbGwgPSBubGFfZ2V0X2JlMTYodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUFYXSk7CisJCXJhbmdlLT5mbGFncyB8PSBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9wcm90b19yYW5nZV90b19ubGF0dHIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2RjY3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fZGNjcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNDg1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2RjY3AuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIERDQ1AgTkFUIHByb3RvY29sIGhlbHBlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNi4gMjAwOCBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvZGNjcC5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CisKK3N0YXRpYyB1X2ludDE2X3QgZGNjcF9wb3J0X3JvdmVyOworCitzdGF0aWMgYm9vbAorZGNjcF91bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCSAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCisJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCSAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiBuZl9uYXRfcHJvdG9fdW5pcXVlX3R1cGxlKHR1cGxlLCByYW5nZSwgbWFuaXB0eXBlLCBjdCwKKwkJCQkJICZkY2NwX3BvcnRfcm92ZXIpOworfQorCitzdGF0aWMgYm9vbAorZGNjcF9tYW5pcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkgICAgICAgdW5zaWduZWQgaW50IGlwaGRyb2ZmLAorCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkgICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCit7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgdm9pZCAqKShza2ItPmRhdGEgKyBpcGhkcm9mZik7CisJc3RydWN0IGRjY3BfaGRyICpoZHI7CisJdW5zaWduZWQgaW50IGhkcm9mZiA9IGlwaGRyb2ZmICsgaXBoLT5paGwgKiA0OworCV9fYmUzMiBvbGRpcCwgbmV3aXA7CisJX19iZTE2ICpwb3J0cHRyLCBvbGRwb3J0LCBuZXdwb3J0OworCWludCBoZHJzaXplID0gODsgLyogRENDUCBjb25uZWN0aW9uIHRyYWNraW5nIGd1YXJhbnRlZXMgdGhpcyBtdWNoICovCisKKwlpZiAoc2tiLT5sZW4gPj0gaGRyb2ZmICsgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikpCisJCWhkcnNpemUgPSBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKTsKKworCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBoZHJvZmYgKyBoZHJzaXplKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItPmRhdGEgKyBpcGhkcm9mZik7CisJaGRyID0gKHN0cnVjdCBkY2NwX2hkciAqKShza2ItPmRhdGEgKyBoZHJvZmYpOworCisJaWYgKG1hbmlwdHlwZSA9PSBJUF9OQVRfTUFOSVBfU1JDKSB7CisJCW9sZGlwID0gaXBoLT5zYWRkcjsKKwkJbmV3aXAgPSB0dXBsZS0+c3JjLnUzLmlwOworCQluZXdwb3J0ID0gdHVwbGUtPnNyYy51LmRjY3AucG9ydDsKKwkJcG9ydHB0ciA9ICZoZHItPmRjY3BoX3Nwb3J0OworCX0gZWxzZSB7CisJCW9sZGlwID0gaXBoLT5kYWRkcjsKKwkJbmV3aXAgPSB0dXBsZS0+ZHN0LnUzLmlwOworCQluZXdwb3J0ID0gdHVwbGUtPmRzdC51LmRjY3AucG9ydDsKKwkJcG9ydHB0ciA9ICZoZHItPmRjY3BoX2Rwb3J0OworCX0KKworCW9sZHBvcnQgPSAqcG9ydHB0cjsKKwkqcG9ydHB0ciA9IG5ld3BvcnQ7CisKKwlpZiAoaGRyc2l6ZSA8IHNpemVvZigqaGRyKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTQoJmhkci0+ZGNjcGhfY2hlY2tzdW0sIHNrYiwgb2xkaXAsIG5ld2lwLCAxKTsKKwlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoJmhkci0+ZGNjcGhfY2hlY2tzdW0sIHNrYiwgb2xkcG9ydCwgbmV3cG9ydCwKKwkJCQkgMCk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF9wcm90b2NvbF9kY2NwID0geworCS5wcm90b251bQkJPSBJUFBST1RPX0RDQ1AsCisJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkubWFuaXBfcGt0CQk9IGRjY3BfbWFuaXBfcGt0LAorCS5pbl9yYW5nZQkJPSBuZl9uYXRfcHJvdG9faW5fcmFuZ2UsCisJLnVuaXF1ZV90dXBsZQkJPSBkY2NwX3VuaXF1ZV90dXBsZSwKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKKwkucmFuZ2VfdG9fbmxhdHRyCT0gbmZfbmF0X3Byb3RvX3JhbmdlX3RvX25sYXR0ciwKKwkubmxhdHRyX3RvX3JhbmdlCT0gbmZfbmF0X3Byb3RvX25sYXR0cl90b19yYW5nZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3Byb3RvX2RjY3BfaW5pdCh2b2lkKQoreworCXJldHVybiBuZl9uYXRfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX25hdF9wcm90b2NvbF9kY2NwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9wcm90b19kY2NwX2Zpbmkodm9pZCkKK3sKKwluZl9uYXRfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfbmF0X3Byb3RvY29sX2RjY3ApOworfQorCittb2R1bGVfaW5pdChuZl9uYXRfcHJvdG9fZGNjcF9pbml0KTsKK21vZHVsZV9leGl0KG5mX25hdF9wcm90b19kY2NwX2ZpbmkpOworCitNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRENDUCBOQVQgcHJvdG9jb2wgaGVscGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2dyZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19ncmUuYwppbmRleCBhMWU0ZGExLi5kN2U4OTIwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2dyZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fZ3JlLmMKQEAgLTM2LDI2ICszNiw4IEBACiBNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRmaWx0ZXIgTkFUIHByb3RvY29sIGhlbHBlciBtb2R1bGUgZm9yIEdSRSIpOwogCi0vKiBpcyBrZXkgaW4gZ2l2ZW4gcmFuZ2UgYmV0d2VlbiBtaW4gYW5kIG1heCAqLwotc3RhdGljIGludAotZ3JlX2luX3JhbmdlKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAotCSAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCi0JICAgICBjb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptaW4sCi0JICAgICBjb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptYXgpCi17Ci0JX19iZTE2IGtleTsKLQotCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKLQkJa2V5ID0gdHVwbGUtPnNyYy51LmdyZS5rZXk7Ci0JZWxzZQotCQlrZXkgPSB0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKLQotCXJldHVybiBudG9ocyhrZXkpID49IG50b2hzKG1pbi0+Z3JlLmtleSkgJiYKLQkgICAgICAgbnRvaHMoa2V5KSA8PSBudG9ocyhtYXgtPmdyZS5rZXkpOwotfQotCiAvKiBnZW5lcmF0ZSB1bmlxdWUgdHVwbGUgLi4uICovCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogZ3JlX3VuaXF1ZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKIAkJIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCkBAIC02OCw3ICs1MCw3IEBACiAJLyogSWYgdGhlcmUgaXMgbm8gbWFzdGVyIGNvbm50cmFjayB3ZSBhcmUgbm90IFBQVFAsCiAJICAgZG8gbm90IGNoYW5nZSB0dXBsZXMgKi8KIAlpZiAoIWN0LT5tYXN0ZXIpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCiAJCWtleXB0ciA9ICZ0dXBsZS0+c3JjLnUuZ3JlLmtleTsKQEAgLTg5LDIwICs3MSwyMCBAQAogCWZvciAoaSA9IDA7IGkgPCByYW5nZV9zaXplOyBpKyssIGtleSsrKSB7CiAJCSprZXlwdHIgPSBodG9ucyhtaW4gKyBrZXkgJSByYW5nZV9zaXplKTsKIAkJaWYgKCFuZl9uYXRfdXNlZF90dXBsZSh0dXBsZSwgY3QpKQotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAlwcl9kZWJ1ZygiJXA6IG5vIE5BVCBtYXBwaW5nXG4iLCBjdCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKiBtYW5pcHVsYXRlIGEgR1JFIHBhY2tldCBhY2NvcmRpbmcgdG8gbWFuaXB0eXBlICovCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogZ3JlX21hbmlwX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCiAJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCiB7Ci0Jc3RydWN0IGdyZV9oZHIgKmdyZWg7CisJY29uc3Qgc3RydWN0IGdyZV9oZHIgKmdyZWg7CiAJc3RydWN0IGdyZV9oZHJfcHB0cCAqcGdyZWg7CiAJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi0+ZGF0YSArIGlwaGRyb2ZmKTsKIAl1bnNpZ25lZCBpbnQgaGRyb2ZmID0gaXBoZHJvZmYgKyBpcGgtPmlobCAqIDQ7CkBAIC0xMTAsNyArOTIsNyBAQAogCS8qIHBncmVoIGluY2x1ZGVzIHR3byBvcHRpb25hbCAzMmJpdCBmaWVsZHMgd2hpY2ggYXJlIG5vdCByZXF1aXJlZAogCSAqIHRvIGJlIHRoZXJlLiAgVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyAnOCcgY29tZXMgZnJvbSAqLwogCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBoZHJvZmYgKyBzaXplb2YoKnBncmVoKSAtIDgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJZ3JlaCA9ICh2b2lkICopc2tiLT5kYXRhICsgaGRyb2ZmOwogCXBncmVoID0gKHN0cnVjdCBncmVfaGRyX3BwdHAgKilncmVoOwpAQCAtMTE4LDcgKzEwMCw3IEBACiAJLyogd2Ugb25seSBoYXZlIGRlc3RpbmF0aW9uIG1hbmlwIG9mIGEgcGFja2V0LCBzaW5jZSAnc291cmNlIGtleScKIAkgKiBpcyBub3QgcHJlc2VudCBpbiB0aGUgcGFja2V0IGl0c2VsZiAqLwogCWlmIChtYW5pcHR5cGUgIT0gSVBfTkFUX01BTklQX0RTVCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCXN3aXRjaCAoZ3JlaC0+dmVyc2lvbikgewogCWNhc2UgR1JFX1ZFUlNJT05fMTcwMToKIAkJLyogV2UgZG8gbm90IGN1cnJlbnRseSBOQVQgYW55IEdSRXYwIHBhY2tldHMuCkBAIC0xMzAsMjEgKzExMiwyMCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9kZWJ1ZygiY2FuJ3QgbmF0IHVua25vd24gR1JFIHZlcnNpb25cbiIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCX0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgZ3JlID0gewotCS5uYW1lCQkJPSAiR1JFIiwKIAkucHJvdG9udW0JCT0gSVBQUk9UT19HUkUsCiAJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkubWFuaXBfcGt0CQk9IGdyZV9tYW5pcF9wa3QsCi0JLmluX3JhbmdlCQk9IGdyZV9pbl9yYW5nZSwKKwkuaW5fcmFuZ2UJCT0gbmZfbmF0X3Byb3RvX2luX3JhbmdlLAogCS51bmlxdWVfdHVwbGUJCT0gZ3JlX3VuaXF1ZV90dXBsZSwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKLQkucmFuZ2VfdG9fbmxhdHRyCT0gbmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmxhdHRyLAotCS5ubGF0dHJfdG9fcmFuZ2UJPSBuZl9uYXRfcG9ydF9ubGF0dHJfdG9fcmFuZ2UsCisJLnJhbmdlX3RvX25sYXR0cgk9IG5mX25hdF9wcm90b19yYW5nZV90b19ubGF0dHIsCisJLm5sYXR0cl90b19yYW5nZQk9IG5mX25hdF9wcm90b19ubGF0dHJfdG9fcmFuZ2UsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMKaW5kZXggMDNhMDI5Ni4uMTlhOGIwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9jb2wuaD4KIAotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGljbXBfaW5fcmFuZ2UoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCiAJICAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLApAQCAtMjcsNyArMjcsNyBAQAogCSAgICAgICBudG9ocyh0dXBsZS0+c3JjLnUuaWNtcC5pZCkgPD0gbnRvaHMobWF4LT5pY21wLmlkKTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGljbXBfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLApAQCAtNDYsMTIgKzQ2LDEyIEBACiAJCXR1cGxlLT5zcmMudS5pY21wLmlkID0gaHRvbnMobnRvaHMocmFuZ2UtPm1pbi5pY21wLmlkKSArCiAJCQkJCSAgICAgKGlkICUgcmFuZ2Vfc2l6ZSkpOwogCQlpZiAoIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCi0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiB0cnVlOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBpY21wX21hbmlwX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgICB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCiAJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLApAQCAtNjIsMjQgKzYyLDIzIEBACiAJdW5zaWduZWQgaW50IGhkcm9mZiA9IGlwaGRyb2ZmICsgaXBoLT5paGwqNDsKIAogCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBoZHJvZmYgKyBzaXplb2YoKmhkcikpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJaGRyID0gKHN0cnVjdCBpY21waGRyICopKHNrYi0+ZGF0YSArIGhkcm9mZik7CiAJaW5ldF9wcm90b19jc3VtX3JlcGxhY2UyKCZoZHItPmNoZWNrc3VtLCBza2IsCiAJCQkJIGhkci0+dW4uZWNoby5pZCwgdHVwbGUtPnNyYy51LmljbXAuaWQsIDApOwogCWhkci0+dW4uZWNoby5pZCA9IHR1cGxlLT5zcmMudS5pY21wLmlkOwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiBjb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF9wcm90b2NvbF9pY21wID0gewotCS5uYW1lCQkJPSAiSUNNUCIsCiAJLnByb3RvbnVtCQk9IElQUFJPVE9fSUNNUCwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS5tYW5pcF9wa3QJCT0gaWNtcF9tYW5pcF9wa3QsCiAJLmluX3JhbmdlCQk9IGljbXBfaW5fcmFuZ2UsCiAJLnVuaXF1ZV90dXBsZQkJPSBpY21wX3VuaXF1ZV90dXBsZSwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKLQkucmFuZ2VfdG9fbmxhdHRyCT0gbmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmxhdHRyLAotCS5ubGF0dHJfdG9fcmFuZ2UJPSBuZl9uYXRfcG9ydF9ubGF0dHJfdG9fcmFuZ2UsCisJLnJhbmdlX3RvX25sYXR0cgk9IG5mX25hdF9wcm90b19yYW5nZV90b19ubGF0dHIsCisJLm5sYXR0cl90b19yYW5nZQk9IG5mX25hdF9wcm90b19ubGF0dHJfdG9fcmFuZ2UsCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3NjdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fc2N0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTRjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3NjdHAuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvc2N0cC5oPgorI2luY2x1ZGUgPG5ldC9zY3RwL2NoZWNrc3VtLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oPgorCitzdGF0aWMgdV9pbnQxNl90IG5mX3NjdHBfcG9ydF9yb3ZlcjsKKworc3RhdGljIGJvb2wKK3NjdHBfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCisJCQkJCSAmbmZfc2N0cF9wb3J0X3JvdmVyKTsKK30KKworc3RhdGljIGJvb2wKK3NjdHBfbWFuaXBfcGt0KHN0cnVjdCBza19idWZmICpza2IsCisJICAgICAgIHVuc2lnbmVkIGludCBpcGhkcm9mZiwKKwkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlKQoreworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItPmRhdGEgKyBpcGhkcm9mZik7CisJc2N0cF9zY3RwaGRyX3QgKmhkcjsKKwl1bnNpZ25lZCBpbnQgaGRyb2ZmID0gaXBoZHJvZmYgKyBpcGgtPmlobCo0OworCV9fYmUzMiBvbGRpcCwgbmV3aXA7CisJdTMyIGNyYzMyOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIGhkcm9mZiArIHNpemVvZigqaGRyKSkpCisJCXJldHVybiBmYWxzZTsKKworCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiLT5kYXRhICsgaXBoZHJvZmYpOworCWhkciA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItPmRhdGEgKyBoZHJvZmYpOworCisJaWYgKG1hbmlwdHlwZSA9PSBJUF9OQVRfTUFOSVBfU1JDKSB7CisJCS8qIEdldCByaWQgb2Ygc3JjIGlwIGFuZCBzcmMgcHQgKi8KKwkJb2xkaXAgPSBpcGgtPnNhZGRyOworCQluZXdpcCA9IHR1cGxlLT5zcmMudTMuaXA7CisJCWhkci0+c291cmNlID0gdHVwbGUtPnNyYy51LnNjdHAucG9ydDsKKwl9IGVsc2UgeworCQkvKiBHZXQgcmlkIG9mIGRzdCBpcCBhbmQgZHN0IHB0ICovCisJCW9sZGlwID0gaXBoLT5kYWRkcjsKKwkJbmV3aXAgPSB0dXBsZS0+ZHN0LnUzLmlwOworCQloZHItPmRlc3QgPSB0dXBsZS0+ZHN0LnUuc2N0cC5wb3J0OworCX0KKworCWNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgodTggKiloZHIsIHNrYl9oZWFkbGVuKHNrYikgLSBoZHJvZmYpOworCWZvciAoc2tiID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7IHNrYjsgc2tiID0gc2tiLT5uZXh0KQorCQljcmMzMiA9IHNjdHBfdXBkYXRlX2Nrc3VtKCh1OCAqKXNrYi0+ZGF0YSwgc2tiX2hlYWRsZW4oc2tiKSwKKwkJCQkJICBjcmMzMik7CisJY3JjMzIgPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CisJaGRyLT5jaGVja3N1bSA9IGh0b25sKGNyYzMyKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5mX25hdF9wcm90b2NvbCBuZl9uYXRfcHJvdG9jb2xfc2N0cCA9IHsKKwkucHJvdG9udW0JCT0gSVBQUk9UT19TQ1RQLAorCS5tZQkJCT0gVEhJU19NT0RVTEUsCisJLm1hbmlwX3BrdAkJPSBzY3RwX21hbmlwX3BrdCwKKwkuaW5fcmFuZ2UJCT0gbmZfbmF0X3Byb3RvX2luX3JhbmdlLAorCS51bmlxdWVfdHVwbGUJCT0gc2N0cF91bmlxdWVfdHVwbGUsCisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCisJLnJhbmdlX3RvX25sYXR0cgk9IG5mX25hdF9wcm90b19yYW5nZV90b19ubGF0dHIsCisJLm5sYXR0cl90b19yYW5nZQk9IG5mX25hdF9wcm90b19ubGF0dHJfdG9fcmFuZ2UsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX25hdF9wcm90b19zY3RwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gbmZfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9uYXRfcHJvdG9jb2xfc2N0cCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9uYXRfcHJvdG9fc2N0cF9leGl0KHZvaWQpCit7CisJbmZfbmF0X3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX25hdF9wcm90b2NvbF9zY3RwKTsKK30KKworbW9kdWxlX2luaXQobmZfbmF0X3Byb3RvX3NjdHBfaW5pdCk7Cittb2R1bGVfZXhpdChuZl9uYXRfcHJvdG9fc2N0cF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1RQIE5BVCBwcm90b2NvbCBoZWxwZXIiKTsKK01PRFVMRV9BVVRIT1IoIlBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fdGNwLmMKaW5kZXggZmZkNWQxNS4uMzk5ZTJjZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3RjcC5jCkBAIC04LDcgKzgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KIApAQCAtMTksNzUgKzE4LDE5IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmg+CiAKLXN0YXRpYyBpbnQKLXRjcF9pbl9yYW5nZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAotCSAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAotCSAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWF4KQotewotCV9fYmUxNiBwb3J0Oworc3RhdGljIHVfaW50MTZfdCB0Y3BfcG9ydF9yb3ZlcjsKIAotCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKLQkJcG9ydCA9IHR1cGxlLT5zcmMudS50Y3AucG9ydDsKLQllbHNlCi0JCXBvcnQgPSB0dXBsZS0+ZHN0LnUudGNwLnBvcnQ7Ci0KLQlyZXR1cm4gbnRvaHMocG9ydCkgPj0gbnRvaHMobWluLT50Y3AucG9ydCkgJiYKLQkgICAgICAgbnRvaHMocG9ydCkgPD0gbnRvaHMobWF4LT50Y3AucG9ydCk7Ci19Ci0KLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiB0Y3BfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCiAJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKIAkJIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlzdGF0aWMgdV9pbnQxNl90IHBvcnQ7Ci0JX19iZTE2ICpwb3J0cHRyOwotCXVuc2lnbmVkIGludCByYW5nZV9zaXplLCBtaW4sIGk7Ci0KLQlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCi0JCXBvcnRwdHIgPSAmdHVwbGUtPnNyYy51LnRjcC5wb3J0OwotCWVsc2UKLQkJcG9ydHB0ciA9ICZ0dXBsZS0+ZHN0LnUudGNwLnBvcnQ7Ci0KLQkvKiBJZiBubyByYW5nZSBzcGVjaWZpZWQuLi4gKi8KLQlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKSkgewotCQkvKiBJZiBpdCdzIGRzdCByZXdyaXRlLCBjYW4ndCBjaGFuZ2UgcG9ydCAqLwotCQlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9EU1QpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBNYXAgcHJpdmlsZWdlZCBvbnRvIHByaXZpbGVnZWQuICovCi0JCWlmIChudG9ocygqcG9ydHB0cikgPCAxMDI0KSB7Ci0JCQkvKiBMb29zZSBjb252ZW50aW9uOiA+PiA1MTIgaXMgY3JlZGVudGlhbCBwYXNzaW5nICovCi0JCQlpZiAobnRvaHMoKnBvcnRwdHIpPDUxMikgewotCQkJCW1pbiA9IDE7Ci0JCQkJcmFuZ2Vfc2l6ZSA9IDUxMSAtIG1pbiArIDE7Ci0JCQl9IGVsc2UgewotCQkJCW1pbiA9IDYwMDsKLQkJCQlyYW5nZV9zaXplID0gMTAyMyAtIG1pbiArIDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQltaW4gPSAxMDI0OwotCQkJcmFuZ2Vfc2l6ZSA9IDY1NTM1IC0gMTAyNCArIDE7Ci0JCX0KLQl9IGVsc2UgewotCQltaW4gPSBudG9ocyhyYW5nZS0+bWluLnRjcC5wb3J0KTsKLQkJcmFuZ2Vfc2l6ZSA9IG50b2hzKHJhbmdlLT5tYXgudGNwLnBvcnQpIC0gbWluICsgMTsKLQl9Ci0KLQlpZiAocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX1BST1RPX1JBTkRPTSkKLQkJcG9ydCA9ICBuZXRfcmFuZG9tKCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmFuZ2Vfc2l6ZTsgaSsrLCBwb3J0KyspIHsKLQkJKnBvcnRwdHIgPSBodG9ucyhtaW4gKyBwb3J0ICUgcmFuZ2Vfc2l6ZSk7Ci0JCWlmICghbmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCisJCQkJCSAmdGNwX3BvcnRfcm92ZXIpOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogdGNwX21hbmlwX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgIHVuc2lnbmVkIGludCBpcGhkcm9mZiwKIAkgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKQEAgLTEwNyw3ICs1MCw3IEBACiAJCWhkcnNpemUgPSBzaXplb2Yoc3RydWN0IHRjcGhkcik7CiAKIAlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgaGRyb2ZmICsgaGRyc2l6ZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi0+ZGF0YSArIGlwaGRyb2ZmKTsKIAloZHIgPSAoc3RydWN0IHRjcGhkciAqKShza2ItPmRhdGEgKyBoZHJvZmYpOwpAQCAtMTMwLDIyICs3MywyMSBAQAogCSpwb3J0cHRyID0gbmV3cG9ydDsKIAogCWlmIChoZHJzaXplIDwgc2l6ZW9mKCpoZHIpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTQoJmhkci0+Y2hlY2ssIHNrYiwgb2xkaXAsIG5ld2lwLCAxKTsKIAlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoJmhkci0+Y2hlY2ssIHNrYiwgb2xkcG9ydCwgbmV3cG9ydCwgMCk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIGNvbnN0IHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgbmZfbmF0X3Byb3RvY29sX3RjcCA9IHsKLQkubmFtZQkJCT0gIlRDUCIsCiAJLnByb3RvbnVtCQk9IElQUFJPVE9fVENQLAogCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJLm1hbmlwX3BrdAkJPSB0Y3BfbWFuaXBfcGt0LAotCS5pbl9yYW5nZQkJPSB0Y3BfaW5fcmFuZ2UsCisJLmluX3JhbmdlCQk9IG5mX25hdF9wcm90b19pbl9yYW5nZSwKIAkudW5pcXVlX3R1cGxlCQk9IHRjcF91bmlxdWVfdHVwbGUsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCi0JLnJhbmdlX3RvX25sYXR0cgk9IG5mX25hdF9wb3J0X3JhbmdlX3RvX25sYXR0ciwKLQkubmxhdHRyX3RvX3JhbmdlCT0gbmZfbmF0X3BvcnRfbmxhdHRyX3RvX3JhbmdlLAorCS5yYW5nZV90b19ubGF0dHIJPSBuZl9uYXRfcHJvdG9fcmFuZ2VfdG9fbmxhdHRyLAorCS5ubGF0dHJfdG9fcmFuZ2UJPSBuZl9uYXRfcHJvdG9fbmxhdHRyX3RvX3JhbmdlLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191ZHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fdWRwLmMKaW5kZXggNGI4ZjQ5OS4uOWU2MWM3OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191ZHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcC5jCkBAIC04LDcgKzgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KIApAQCAtMTgsNzQgKzE3LDE5IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CiAKLXN0YXRpYyBpbnQKLXVkcF9pbl9yYW5nZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAotCSAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAotCSAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWF4KQotewotCV9fYmUxNiBwb3J0Oworc3RhdGljIHVfaW50MTZfdCB1ZHBfcG9ydF9yb3ZlcjsKIAotCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKLQkJcG9ydCA9IHR1cGxlLT5zcmMudS51ZHAucG9ydDsKLQllbHNlCi0JCXBvcnQgPSB0dXBsZS0+ZHN0LnUudWRwLnBvcnQ7Ci0KLQlyZXR1cm4gbnRvaHMocG9ydCkgPj0gbnRvaHMobWluLT51ZHAucG9ydCkgJiYKLQkgICAgICAgbnRvaHMocG9ydCkgPD0gbnRvaHMobWF4LT51ZHAucG9ydCk7Ci19Ci0KLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiB1ZHBfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCiAJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKIAkJIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlzdGF0aWMgdV9pbnQxNl90IHBvcnQ7Ci0JX19iZTE2ICpwb3J0cHRyOwotCXVuc2lnbmVkIGludCByYW5nZV9zaXplLCBtaW4sIGk7Ci0KLQlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCi0JCXBvcnRwdHIgPSAmdHVwbGUtPnNyYy51LnVkcC5wb3J0OwotCWVsc2UKLQkJcG9ydHB0ciA9ICZ0dXBsZS0+ZHN0LnUudWRwLnBvcnQ7Ci0KLQkvKiBJZiBubyByYW5nZSBzcGVjaWZpZWQuLi4gKi8KLQlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKSkgewotCQkvKiBJZiBpdCdzIGRzdCByZXdyaXRlLCBjYW4ndCBjaGFuZ2UgcG9ydCAqLwotCQlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9EU1QpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAobnRvaHMoKnBvcnRwdHIpIDwgMTAyNCkgewotCQkJLyogTG9vc2UgY29udmVudGlvbjogPj4gNTEyIGlzIGNyZWRlbnRpYWwgcGFzc2luZyAqLwotCQkJaWYgKG50b2hzKCpwb3J0cHRyKTw1MTIpIHsKLQkJCQltaW4gPSAxOwotCQkJCXJhbmdlX3NpemUgPSA1MTEgLSBtaW4gKyAxOwotCQkJfSBlbHNlIHsKLQkJCQltaW4gPSA2MDA7Ci0JCQkJcmFuZ2Vfc2l6ZSA9IDEwMjMgLSBtaW4gKyAxOwotCQkJfQotCQl9IGVsc2UgewotCQkJbWluID0gMTAyNDsKLQkJCXJhbmdlX3NpemUgPSA2NTUzNSAtIDEwMjQgKyAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJbWluID0gbnRvaHMocmFuZ2UtPm1pbi51ZHAucG9ydCk7Ci0JCXJhbmdlX3NpemUgPSBudG9ocyhyYW5nZS0+bWF4LnVkcC5wb3J0KSAtIG1pbiArIDE7Ci0JfQotCi0JaWYgKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19SQU5ET00pCi0JCXBvcnQgPSBuZXRfcmFuZG9tKCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmFuZ2Vfc2l6ZTsgaSsrLCBwb3J0KyspIHsKLQkJKnBvcnRwdHIgPSBodG9ucyhtaW4gKyBwb3J0ICUgcmFuZ2Vfc2l6ZSk7Ci0JCWlmICghbmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCisJCQkJCSAmdWRwX3BvcnRfcm92ZXIpOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogdWRwX21hbmlwX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgIHVuc2lnbmVkIGludCBpcGhkcm9mZiwKIAkgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKQEAgLTk4LDcgKzQyLDcgQEAKIAlfX2JlMTYgKnBvcnRwdHIsIG5ld3BvcnQ7CiAKIAlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgaGRyb2ZmICsgc2l6ZW9mKCpoZHIpKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiLT5kYXRhICsgaXBoZHJvZmYpOwogCWhkciA9IChzdHJ1Y3QgdWRwaGRyICopKHNrYi0+ZGF0YSArIGhkcm9mZik7CkBAIC0xMjQsMTggKzY4LDE3IEBACiAJCQloZHItPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CiAJfQogCSpwb3J0cHRyID0gbmV3cG9ydDsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogY29uc3Qgc3RydWN0IG5mX25hdF9wcm90b2NvbCBuZl9uYXRfcHJvdG9jb2xfdWRwID0gewotCS5uYW1lCQkJPSAiVURQIiwKIAkucHJvdG9udW0JCT0gSVBQUk9UT19VRFAsCiAJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkubWFuaXBfcGt0CQk9IHVkcF9tYW5pcF9wa3QsCi0JLmluX3JhbmdlCQk9IHVkcF9pbl9yYW5nZSwKKwkuaW5fcmFuZ2UJCT0gbmZfbmF0X3Byb3RvX2luX3JhbmdlLAogCS51bmlxdWVfdHVwbGUJCT0gdWRwX3VuaXF1ZV90dXBsZSwKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKLQkucmFuZ2VfdG9fbmxhdHRyCT0gbmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmxhdHRyLAotCS5ubGF0dHJfdG9fcmFuZ2UJPSBuZl9uYXRfcG9ydF9ubGF0dHJfdG9fcmFuZ2UsCisJLnJhbmdlX3RvX25sYXR0cgk9IG5mX25hdF9wcm90b19yYW5nZV90b19ubGF0dHIsCisJLm5sYXR0cl90b19yYW5nZQk9IG5mX25hdF9wcm90b19ubGF0dHJfdG9fcmFuZ2UsCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcGxpdGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fdWRwbGl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MGEyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcGxpdGUuYwpAQCAtMCwwICsxLDk5IEBACisvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCisgKiAoQykgMjAwMi0yMDA2IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKiAoQykgMjAwOCBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oPgorCitzdGF0aWMgdV9pbnQxNl90IHVkcGxpdGVfcG9ydF9yb3ZlcjsKKworc3RhdGljIGJvb2wKK3VkcGxpdGVfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gbmZfbmF0X3Byb3RvX3VuaXF1ZV90dXBsZSh0dXBsZSwgcmFuZ2UsIG1hbmlwdHlwZSwgY3QsCisJCQkJCSAmdWRwbGl0ZV9wb3J0X3JvdmVyKTsKK30KKworc3RhdGljIGJvb2wKK3VkcGxpdGVfbWFuaXBfcGt0KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgdW5zaWduZWQgaW50IGlwaGRyb2ZmLAorCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlKQoreworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItPmRhdGEgKyBpcGhkcm9mZik7CisJc3RydWN0IHVkcGhkciAqaGRyOworCXVuc2lnbmVkIGludCBoZHJvZmYgPSBpcGhkcm9mZiArIGlwaC0+aWhsKjQ7CisJX19iZTMyIG9sZGlwLCBuZXdpcDsKKwlfX2JlMTYgKnBvcnRwdHIsIG5ld3BvcnQ7CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgaGRyb2ZmICsgc2l6ZW9mKCpoZHIpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItPmRhdGEgKyBpcGhkcm9mZik7CisJaGRyID0gKHN0cnVjdCB1ZHBoZHIgKikoc2tiLT5kYXRhICsgaGRyb2ZmKTsKKworCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykgeworCQkvKiBHZXQgcmlkIG9mIHNyYyBpcCBhbmQgc3JjIHB0ICovCisJCW9sZGlwID0gaXBoLT5zYWRkcjsKKwkJbmV3aXAgPSB0dXBsZS0+c3JjLnUzLmlwOworCQluZXdwb3J0ID0gdHVwbGUtPnNyYy51LnVkcC5wb3J0OworCQlwb3J0cHRyID0gJmhkci0+c291cmNlOworCX0gZWxzZSB7CisJCS8qIEdldCByaWQgb2YgZHN0IGlwIGFuZCBkc3QgcHQgKi8KKwkJb2xkaXAgPSBpcGgtPmRhZGRyOworCQluZXdpcCA9IHR1cGxlLT5kc3QudTMuaXA7CisJCW5ld3BvcnQgPSB0dXBsZS0+ZHN0LnUudWRwLnBvcnQ7CisJCXBvcnRwdHIgPSAmaGRyLT5kZXN0OworCX0KKworCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlNCgmaGRyLT5jaGVjaywgc2tiLCBvbGRpcCwgbmV3aXAsIDEpOworCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlMigmaGRyLT5jaGVjaywgc2tiLCAqcG9ydHB0ciwgbmV3cG9ydCwgMCk7CisJaWYgKCFoZHItPmNoZWNrKQorCQloZHItPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CisKKwkqcG9ydHB0ciA9IG5ld3BvcnQ7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF9wcm90b2NvbF91ZHBsaXRlID0geworCS5wcm90b251bQkJPSBJUFBST1RPX1VEUExJVEUsCisJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkubWFuaXBfcGt0CQk9IHVkcGxpdGVfbWFuaXBfcGt0LAorCS5pbl9yYW5nZQkJPSBuZl9uYXRfcHJvdG9faW5fcmFuZ2UsCisJLnVuaXF1ZV90dXBsZQkJPSB1ZHBsaXRlX3VuaXF1ZV90dXBsZSwKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKKwkucmFuZ2VfdG9fbmxhdHRyCT0gbmZfbmF0X3Byb3RvX3JhbmdlX3RvX25sYXR0ciwKKwkubmxhdHRyX3RvX3JhbmdlCT0gbmZfbmF0X3Byb3RvX25sYXR0cl90b19yYW5nZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3Byb3RvX3VkcGxpdGVfaW5pdCh2b2lkKQoreworCXJldHVybiBuZl9uYXRfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX25hdF9wcm90b2NvbF91ZHBsaXRlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9wcm90b191ZHBsaXRlX2Zpbmkodm9pZCkKK3sKKwluZl9uYXRfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfbmF0X3Byb3RvY29sX3VkcGxpdGUpOworfQorCittb2R1bGVfaW5pdChuZl9uYXRfcHJvdG9fdWRwbGl0ZV9pbml0KTsKK21vZHVsZV9leGl0KG5mX25hdF9wcm90b191ZHBsaXRlX2ZpbmkpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlVEUC1MaXRlIE5BVCBwcm90b2NvbCBoZWxwZXIiKTsKK01PRFVMRV9BVVRIT1IoIlBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191bmtub3duLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYwppbmRleCBhMjZlZmViLi4xNDM4MWM2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYwpAQCAtMTgsMzUgKzE4LDM0IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CiAKLXN0YXRpYyBpbnQgdW5rbm93bl9pbl9yYW5nZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkJCSAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwX3R5cGUsCi0JCQkgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAotCQkJICAgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1heCkKK3N0YXRpYyBib29sIHVua25vd25faW5fcmFuZ2UoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXBfdHlwZSwKKwkJCSAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAorCQkJICAgICBjb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptYXgpCiB7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgdW5rbm93bl91bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkJY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCi0JCQkJZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCi0JCQkJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQorc3RhdGljIGJvb2wgdW5rbm93bl91bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkJIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKKwkJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCS8qIFNvcnJ5OiB3ZSBjYW4ndCBoZWxwIHlvdTsgaWYgaXQncyBub3QgdW5pcXVlLCB3ZSBjYW4ndCBmcm9iCiAJICAgYW55dGhpbmcuICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogdW5rbm93bl9tYW5pcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCiAJCSAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCiB7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIGNvbnN0IHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgbmZfbmF0X3Vua25vd25fcHJvdG9jb2wgPSB7Ci0JLm5hbWUJCQk9ICJ1bmtub3duIiwKIAkvKiAubWUgaXNuJ3Qgc2V0OiBnZXR0aW5nIGEgcmVmIHRvIHRoaXMgY2Fubm90IGZhaWwuICovCiAJLm1hbmlwX3BrdAkJPSB1bmtub3duX21hbmlwX3BrdCwKIAkuaW5fcmFuZ2UJCT0gdW5rbm93bl9pbl9yYW5nZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKaW5kZXggZjhmZGE1Ny4uZThiNGQwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKQEAgLTYxLDcgKzYxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgX19uYXRfdGFibGUgPSB7CiAJLm5hbWUJCT0gIm5hdCIsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IFJXX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKF9fbmF0X3RhYmxlLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJCQl2b2lkICp0YXJnaW5mbywKIAkJCQl1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCXN0cnVjdCBuZl9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHRhcmdpbmZvOworCWNvbnN0IHN0cnVjdCBuZl9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHRhcmdpbmZvOwogCiAJLyogTXVzdCBiZSBhIHZhbGlkIHJhbmdlICovCiAJaWYgKG1yLT5yYW5nZXNpemUgIT0gMSkgewpAQCAtMTU5LDcgKzE1OSw3IEBACiAJCQkJdm9pZCAqdGFyZ2luZm8sCiAJCQkJdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLQlzdHJ1Y3QgbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSB0YXJnaW5mbzsKKwljb25zdCBzdHJ1Y3QgbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSB0YXJnaW5mbzsKIAogCS8qIE11c3QgYmUgYSB2YWxpZCByYW5nZSAqLwogCWlmIChtci0+cmFuZ2VzaXplICE9IDEpIHsKQEAgLTE4OCwyNSArMTg4LDYgQEAKIAlyZXR1cm4gbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgSE9PSzJNQU5JUChob29rbnVtKSk7CiB9CiAKLXVuc2lnbmVkIGludAotYWxsb2NfbnVsbF9iaW5kaW5nX2NvbmZpcm1lZChzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGludCBob29rbnVtKQotewotCV9fYmUzMiBpcAotCQk9IChIT09LMk1BTklQKGhvb2tudW0pID09IElQX05BVF9NQU5JUF9TUkMKLQkJICAgPyBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnUzLmlwCi0JCSAgIDogY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy51My5pcCk7Ci0JX19iZTE2IGFsbAotCQk9IChIT09LMk1BTklQKGhvb2tudW0pID09IElQX05BVF9NQU5JUF9TUkMKLQkJICAgPyBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnUuYWxsCi0JCSAgIDogY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy51LmFsbCk7Ci0Jc3RydWN0IG5mX25hdF9yYW5nZSByYW5nZQotCQk9IHsgSVBfTkFUX1JBTkdFX01BUF9JUFMsIGlwLCBpcCwgeyBhbGwgfSwgeyBhbGwgfSB9OwotCi0JcHJfZGVidWcoIkFsbG9jYXRpbmcgTlVMTCBiaW5kaW5nIGZvciBjb25maXJtZWQgJXAgKCV1LiV1LiV1LiV1KVxuIiwKLQkJIGN0LCBOSVBRVUFEKGlwKSk7Ci0JcmV0dXJuIG5mX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIEhPT0syTUFOSVAoaG9va251bSkpOwotfQotCiBpbnQgbmZfbmF0X3J1bGVfZmluZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAogCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc2lwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCmluZGV4IGI0YzhkNDkuLjQzMzRkNWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc2lwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYwpAQCAtMiw2ICsyLDggQEAKICAqCiAgKiAoQykgMjAwNSBieSBDaHJpc3RpYW4gSGVudHNjaGVsIDxjaGVudHNjaGVsQGFybmV0LmNvbS5hcj4KICAqIGJhc2VkIG9uIFJSJ3MgaXBfbmF0X2Z0cC5jIGFuZCBvdGhlciBtb2R1bGVzLgorICogKEMpIDIwMDcgVW5pdGVkIFNlY3VyaXR5IFByb3ZpZGVycworICogKEMpIDIwMDcsIDIwMDggUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yNiwyNDcgKzI4LDI0NyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSVAgTkFUIGhlbHBlciIpOwogTU9EVUxFX0FMSUFTKCJpcF9uYXRfc2lwIik7CiAKLXN0cnVjdCBhZGRyX21hcCB7Ci0Jc3RydWN0IHsKLQkJY2hhcgkJc3JjW3NpemVvZigibm5uLm5ubi5ubm4ubm5uOm5ubm5uIildOwotCQljaGFyCQlkc3Rbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm46bm5ubm4iKV07Ci0JCXVuc2lnbmVkIGludAlzcmNsZW4sIHNyY2lwbGVuOwotCQl1bnNpZ25lZCBpbnQJZHN0bGVuLCBkc3RpcGxlbjsKLQl9IGFkZHJbSVBfQ1RfRElSX01BWF07Ci19OwogCi1zdGF0aWMgdm9pZCBhZGRyX21hcF9pbml0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IGFkZHJfbWFwICptYXApCitzdGF0aWMgdW5zaWduZWQgaW50IG1hbmdsZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbikKIHsKLQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0OwotCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7Ci0JdW5zaWduZWQgaW50IG47CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CiAKLQlmb3IgKGRpciA9IDA7IGRpciA8IElQX0NUX0RJUl9NQVg7IGRpcisrKSB7Ci0JCXQgPSAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlOworCWlmICghbmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkJCSAgICAgIGJ1ZmZlciwgYnVmbGVuKSkKKwkJcmV0dXJuIDA7CiAKLQkJbiA9IHNwcmludGYobWFwLT5hZGRyW2Rpcl0uc3JjLCAiJXUuJXUuJXUuJXUiLAotCQkJICAgIE5JUFFVQUQodC0+c3JjLnUzLmlwKSk7Ci0JCW1hcC0+YWRkcltkaXJdLnNyY2lwbGVuID0gbjsKLQkJbiArPSBzcHJpbnRmKG1hcC0+YWRkcltkaXJdLnNyYyArIG4sICI6JXUiLAotCQkJICAgICBudG9ocyh0LT5zcmMudS51ZHAucG9ydCkpOwotCQltYXAtPmFkZHJbZGlyXS5zcmNsZW4gPSBuOwotCi0JCW4gPSBzcHJpbnRmKG1hcC0+YWRkcltkaXJdLmRzdCwgIiV1LiV1LiV1LiV1IiwKLQkJCSAgICBOSVBRVUFEKHQtPmRzdC51My5pcCkpOwotCQltYXAtPmFkZHJbZGlyXS5kc3RpcGxlbiA9IG47Ci0JCW4gKz0gc3ByaW50ZihtYXAtPmFkZHJbZGlyXS5kc3QgKyBuLCAiOiV1IiwKLQkJCSAgICAgbnRvaHModC0+ZHN0LnUudWRwLnBvcnQpKTsKLQkJbWFwLT5hZGRyW2Rpcl0uZHN0bGVuID0gbjsKLQl9CisJLyogUmVsb2FkIGRhdGEgcG9pbnRlciBhbmQgYWRqdXN0IGRhdGFsZW4gdmFsdWUgKi8KKwkqZHB0ciA9IHNrYi0+ZGF0YSArIGlwX2hkcmxlbihza2IpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCSpkYXRhbGVuICs9IGJ1ZmxlbiAtIG1hdGNobGVuOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1hcF9zaXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCXN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqKmRwdHIsIHNpemVfdCBkbGVuLAotCQkJZW51bSBzaXBfaGVhZGVyX3BvcyBwb3MsIHN0cnVjdCBhZGRyX21hcCAqbWFwKQorc3RhdGljIGludCBtYXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwgdW5zaWduZWQgaW50IG1hdGNobGVuLAorCQkgICAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLCBfX2JlMTYgcG9ydCkKIHsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwotCXVuc2lnbmVkIGludCBtYXRjaGxlbiwgbWF0Y2hvZmYsIGFkZHJsZW47Ci0JY2hhciAqYWRkcjsKKwljaGFyIGJ1ZmZlcltzaXplb2YoIm5ubi5ubm4ubm5uLm5ubjpubm5ubiIpXTsKKwl1bnNpZ25lZCBpbnQgYnVmbGVuOworCV9fYmUzMiBuZXdhZGRyOworCV9fYmUxNiBuZXdwb3J0OwogCi0JaWYgKGN0X3NpcF9nZXRfaW5mbyhjdCwgKmRwdHIsIGRsZW4sICZtYXRjaG9mZiwgJm1hdGNobGVuLCBwb3MpIDw9IDApCi0JCXJldHVybiAxOwotCi0JaWYgKChtYXRjaGxlbiA9PSBtYXAtPmFkZHJbZGlyXS5zcmNpcGxlbiB8fAotCSAgICAgbWF0Y2hsZW4gPT0gbWFwLT5hZGRyW2Rpcl0uc3JjbGVuKSAmJgotCSAgICBtZW1jbXAoKmRwdHIgKyBtYXRjaG9mZiwgbWFwLT5hZGRyW2Rpcl0uc3JjLCBtYXRjaGxlbikgPT0gMCkgewotCQlhZGRyICAgID0gbWFwLT5hZGRyWyFkaXJdLmRzdDsKLQkJYWRkcmxlbiA9IG1hcC0+YWRkclshZGlyXS5kc3RsZW47Ci0JfSBlbHNlIGlmICgobWF0Y2hsZW4gPT0gbWFwLT5hZGRyW2Rpcl0uZHN0aXBsZW4gfHwKLQkJICAgIG1hdGNobGVuID09IG1hcC0+YWRkcltkaXJdLmRzdGxlbikgJiYKLQkJICAgbWVtY21wKCpkcHRyICsgbWF0Y2hvZmYsIG1hcC0+YWRkcltkaXJdLmRzdCwgbWF0Y2hsZW4pID09IDApIHsKLQkJYWRkciAgICA9IG1hcC0+YWRkclshZGlyXS5zcmM7Ci0JCWFkZHJsZW4gPSBtYXAtPmFkZHJbIWRpcl0uc3JjbGVuOworCWlmIChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwID09IGFkZHItPmlwICYmCisJICAgIGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudS51ZHAucG9ydCA9PSBwb3J0KSB7CisJCW5ld2FkZHIgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcDsKKwkJbmV3cG9ydCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUudWRwLnBvcnQ7CisJfSBlbHNlIGlmIChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuZHN0LnUzLmlwID09IGFkZHItPmlwICYmCisJCSAgIGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudS51ZHAucG9ydCA9PSBwb3J0KSB7CisJCW5ld2FkZHIgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51My5pcDsKKwkJbmV3cG9ydCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUudWRwLnBvcnQ7CiAJfSBlbHNlCiAJCXJldHVybiAxOwogCi0JaWYgKCFuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQoc2tiLCBjdCwgY3RpbmZvLAotCQkJCSAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgYWRkciwgYWRkcmxlbikpCi0JCXJldHVybiAwOwotCSpkcHRyID0gc2tiLT5kYXRhICsgaXBfaGRybGVuKHNrYikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JcmV0dXJuIDE7CisJaWYgKG5ld2FkZHIgPT0gYWRkci0+aXAgJiYgbmV3cG9ydCA9PSBwb3J0KQorCQlyZXR1cm4gMTsKIAorCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUuJXUuJXUuJXU6JXUiLAorCQkJIE5JUFFVQUQobmV3YWRkciksIG50b2hzKG5ld3BvcnQpKTsKKworCXJldHVybiBtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkJICAgICBidWZmZXIsIGJ1Zmxlbik7Cit9CisKK3N0YXRpYyBpbnQgbWFwX3NpcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQljb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJZW51bSBzaXBfaGVhZGVyX3R5cGVzIHR5cGUpCit7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJdW5zaWduZWQgaW50IG1hdGNobGVuLCBtYXRjaG9mZjsKKwl1bmlvbiBuZl9pbmV0X2FkZHIgYWRkcjsKKwlfX2JlMTYgcG9ydDsKKworCWlmIChjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjdCwgKmRwdHIsIE5VTEwsICpkYXRhbGVuLCB0eXBlLCBOVUxMLAorCQkJCSAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbiwgJmFkZHIsICZwb3J0KSA8PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gbWFwX2FkZHIoc2tiLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sICZhZGRyLCBwb3J0KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2lwKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkgICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyKQorCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pCiB7Ci0JZW51bSBzaXBfaGVhZGVyX3BvcyBwb3M7Ci0Jc3RydWN0IGFkZHJfbWFwIG1hcDsKLQlpbnQgZGF0YW9mZiwgZGF0YWxlbjsKLQotCWRhdGFvZmYgPSBpcF9oZHJsZW4oc2tiKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQlkYXRhbGVuID0gc2tiLT5sZW4gLSBkYXRhb2ZmOwotCWlmIChkYXRhbGVuIDwgc2l6ZW9mKCJTSVAvMi4wIikgLSAxKQotCQlyZXR1cm4gTkZfQUNDRVBUOwotCi0JYWRkcl9tYXBfaW5pdChjdCwgJm1hcCk7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgbWF0Y2hvZmYsIG1hdGNobGVuOworCXVuaW9uIG5mX2luZXRfYWRkciBhZGRyOworCV9fYmUxNiBwb3J0OworCWludCByZXF1ZXN0LCBpbl9oZWFkZXI7CiAKIAkvKiBCYXNpYyBydWxlczogcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4gKi8KLQlpZiAoc3RybmNtcCgqZHB0ciwgIlNJUC8yLjAiLCBzaXplb2YoIlNJUC8yLjAiKSAtIDEpICE9IDApIHsKLQkJLyogMTAuMjogQ29uc3RydWN0aW5nIHRoZSBSRUdJU1RFUiBSZXF1ZXN0OgotCQkgKgotCQkgKiBUaGUgInVzZXJpbmZvIiBhbmQgIkAiIGNvbXBvbmVudHMgb2YgdGhlIFNJUCBVUkkgTVVTVCBOT1QKLQkJICogYmUgcHJlc2VudC4KLQkJICovCi0JCWlmIChkYXRhbGVuID49IHNpemVvZigiUkVHSVNURVIiKSAtIDEgJiYKLQkJICAgIHN0cm5jbXAoKmRwdHIsICJSRUdJU1RFUiIsIHNpemVvZigiUkVHSVNURVIiKSAtIDEpID09IDApCi0JCQlwb3MgPSBQT1NfUkVHX1JFUV9VUkk7Ci0JCWVsc2UKLQkJCXBvcyA9IFBPU19SRVFfVVJJOworCWlmIChzdHJuaWNtcCgqZHB0ciwgIlNJUC8yLjAiLCBzdHJsZW4oIlNJUC8yLjAiKSkgIT0gMCkgeworCQlpZiAoY3Rfc2lwX3BhcnNlX3JlcXVlc3QoY3QsICpkcHRyLCAqZGF0YWxlbiwKKwkJCQkJICZtYXRjaG9mZiwgJm1hdGNobGVuLAorCQkJCQkgJmFkZHIsICZwb3J0KSA+IDAgJiYKKwkJICAgICFtYXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJCSAgICAgICZhZGRyLCBwb3J0KSkKKwkJCXJldHVybiBORl9EUk9QOworCQlyZXF1ZXN0ID0gMTsKKwl9IGVsc2UKKwkJcmVxdWVzdCA9IDA7CiAKLQkJaWYgKCFtYXBfc2lwX2FkZHIoc2tiLCBjdGluZm8sIGN0LCBkcHRyLCBkYXRhbGVuLCBwb3MsICZtYXApKQorCS8qIFRyYW5zbGF0ZSB0b3Btb3N0IFZpYSBoZWFkZXIgYW5kIHBhcmFtZXRlcnMgKi8KKwlpZiAoY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY3QsICpkcHRyLCBOVUxMLCAqZGF0YWxlbiwKKwkJCQkgICAgU0lQX0hEUl9WSUEsIE5VTEwsICZtYXRjaG9mZiwgJm1hdGNobGVuLAorCQkJCSAgICAmYWRkciwgJnBvcnQpID4gMCkgeworCQl1bnNpZ25lZCBpbnQgbWF0Y2hlbmQsIHBvZmYsIHBsZW4sIGJ1ZmxlbiwgbjsKKwkJY2hhciBidWZmZXJbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm46bm5ubm4iKV07CisKKwkJLyogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIGhlYWRlcnMgcmVsYXRlZCB0byB0aGlzCisJCSAqIGNvbm5lY3Rpb24gKi8KKwkJaWYgKHJlcXVlc3QpIHsKKwkJCWlmIChhZGRyLmlwICE9IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMuaXAgfHwKKwkJCSAgICBwb3J0ICE9IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudS51ZHAucG9ydCkKKwkJCQlnb3RvIG5leHQ7CisJCX0gZWxzZSB7CisJCQlpZiAoYWRkci5pcCAhPSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuZHN0LnUzLmlwIHx8CisJCQkgICAgcG9ydCAhPSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuZHN0LnUudWRwLnBvcnQpCisJCQkJZ290byBuZXh0OworCQl9CisKKwkJaWYgKCFtYXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJCSAgICAgICZhZGRyLCBwb3J0KSkKKwkJCXJldHVybiBORl9EUk9QOworCisJCW1hdGNoZW5kID0gbWF0Y2hvZmYgKyBtYXRjaGxlbjsKKworCQkvKiBUaGUgbWFkZHI9IHBhcmFtZXRlciAoUkZDIDIzNjEpIHNwZWNpZmllcyB3aGVyZSB0byBzZW5kCisJCSAqIHRoZSByZXBseS4gKi8KKwkJaWYgKGN0X3NpcF9wYXJzZV9hZGRyZXNzX3BhcmFtKGN0LCAqZHB0ciwgbWF0Y2hlbmQsICpkYXRhbGVuLAorCQkJCQkgICAgICAgIm1hZGRyPSIsICZwb2ZmLCAmcGxlbiwKKwkJCQkJICAgICAgICZhZGRyKSA+IDAgJiYKKwkJICAgIGFkZHIuaXAgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51My5pcCAmJgorCQkgICAgYWRkci5pcCAhPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcCkgeworCQkJX19iZTMyIGlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMuaXA7CisJCQlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1IiwgTklQUVVBRChpcCkpOworCQkJaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgcG9mZiwgcGxlbiwKKwkJCQkJICAgYnVmZmVyLCBidWZsZW4pKQorCQkJCXJldHVybiBORl9EUk9QOworCQl9CisKKwkJLyogVGhlIHJlY2VpdmVkPSBwYXJhbWV0ZXIgKFJGQyAyMzYxKSBjb250YWlucyB0aGUgYWRkcmVzcworCQkgKiBmcm9tIHdoaWNoIHRoZSBzZXJ2ZXIgcmVjZWl2ZWQgdGhlIHJlcXVlc3QuICovCisJCWlmIChjdF9zaXBfcGFyc2VfYWRkcmVzc19wYXJhbShjdCwgKmRwdHIsIG1hdGNoZW5kLCAqZGF0YWxlbiwKKwkJCQkJICAgICAgICJyZWNlaXZlZD0iLCAmcG9mZiwgJnBsZW4sCisJCQkJCSAgICAgICAmYWRkcikgPiAwICYmCisJCSAgICBhZGRyLmlwID09IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudTMuaXAgJiYKKwkJICAgIGFkZHIuaXAgIT0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMuaXApIHsKKwkJCV9fYmUzMiBpcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLmlwOworCQkJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIldS4ldS4ldS4ldSIsIE5JUFFVQUQoaXApKTsKKwkJCWlmICghbWFuZ2xlX3BhY2tldChza2IsIGRwdHIsIGRhdGFsZW4sIHBvZmYsIHBsZW4sCisJCQkJCSAgIGJ1ZmZlciwgYnVmbGVuKSkKKwkJCQlyZXR1cm4gTkZfRFJPUDsKKwkJfQorCisJCS8qIFRoZSBycG9ydD0gcGFyYW1ldGVyIChSRkMgMzU4MSkgY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyCisJCSAqIGZyb20gd2hpY2ggdGhlIHNlcnZlciByZWNlaXZlZCB0aGUgcmVxdWVzdC4gKi8KKwkJaWYgKGN0X3NpcF9wYXJzZV9udW1lcmljYWxfcGFyYW0oY3QsICpkcHRyLCBtYXRjaGVuZCwgKmRhdGFsZW4sCisJCQkJCQkgInJwb3J0PSIsICZwb2ZmLCAmcGxlbiwKKwkJCQkJCSAmbikgPiAwICYmCisJCSAgICBodG9ucyhuKSA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuZHN0LnUudWRwLnBvcnQgJiYKKwkJICAgIGh0b25zKG4pICE9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUudWRwLnBvcnQpIHsKKwkJCV9fYmUxNiBwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudS51ZHAucG9ydDsKKwkJCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUiLCBudG9ocyhwKSk7CisJCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBwb2ZmLCBwbGVuLAorCQkJCQkgICBidWZmZXIsIGJ1ZmxlbikpCisJCQkJcmV0dXJuIE5GX0RST1A7CisJCX0KKwl9CisKK25leHQ6CisJLyogVHJhbnNsYXRlIENvbnRhY3QgaGVhZGVycyAqLworCWRhdGFvZmYgPSAwOworCWluX2hlYWRlciA9IDA7CisJd2hpbGUgKGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKGN0LCAqZHB0ciwgJmRhdGFvZmYsICpkYXRhbGVuLAorCQkJCSAgICAgICBTSVBfSERSX0NPTlRBQ1QsICZpbl9oZWFkZXIsCisJCQkJICAgICAgICZtYXRjaG9mZiwgJm1hdGNobGVuLAorCQkJCSAgICAgICAmYWRkciwgJnBvcnQpID4gMCkgeworCQlpZiAoIW1hcF9hZGRyKHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkJICAgICAgJmFkZHIsIHBvcnQpKQogCQkJcmV0dXJuIE5GX0RST1A7CiAJfQogCi0JaWYgKCFtYXBfc2lwX2FkZHIoc2tiLCBjdGluZm8sIGN0LCBkcHRyLCBkYXRhbGVuLCBQT1NfRlJPTSwgJm1hcCkgfHwKLQkgICAgIW1hcF9zaXBfYWRkcihza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19UTywgJm1hcCkgfHwKLQkgICAgIW1hcF9zaXBfYWRkcihza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19WSUEsICZtYXApIHx8Ci0JICAgICFtYXBfc2lwX2FkZHIoc2tiLCBjdGluZm8sIGN0LCBkcHRyLCBkYXRhbGVuLCBQT1NfQ09OVEFDVCwgJm1hcCkpCisJaWYgKCFtYXBfc2lwX2FkZHIoc2tiLCBkcHRyLCBkYXRhbGVuLCBTSVBfSERSX0ZST00pIHx8CisJICAgICFtYXBfc2lwX2FkZHIoc2tiLCBkcHRyLCBkYXRhbGVuLCBTSVBfSERSX1RPKSkKIAkJcmV0dXJuIE5GX0RST1A7CiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfc2lwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCQkgICAgICBjb25zdCBjaGFyICoqZHB0ciwgc2l6ZV90IGRsZW4sCi0JCQkJICAgICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmxlbiwKLQkJCQkgICAgICBlbnVtIHNpcF9oZWFkZXJfcG9zIHBvcykKLXsKLQl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sIG1hdGNob2ZmOwotCi0JaWYgKGN0X3NpcF9nZXRfaW5mbyhjdCwgKmRwdHIsIGRsZW4sICZtYXRjaG9mZiwgJm1hdGNobGVuLCBwb3MpIDw9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKCFuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQoc2tiLCBjdCwgY3RpbmZvLAotCQkJCSAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgYnVmZmVyLCBidWZmbGVuKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBXZSBuZWVkIHRvIHJlbG9hZCB0aGlzLiBUaGFua3MgUGF0cmljay4gKi8KLQkqZHB0ciA9IHNrYi0+ZGF0YSArIGlwX2hkcmxlbihza2IpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IG1hbmdsZV9jb250ZW50X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkgICAgICBjb25zdCBjaGFyICpkcHRyKQotewotCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBtYXRjaG9mZiwgbWF0Y2hsZW47Ci0JY2hhciBidWZmZXJbc2l6ZW9mKCI2NTUzNiIpXTsKLQlpbnQgYnVmZmxlbjsKLQotCWRhdGFvZmYgPSBpcF9oZHJsZW4oc2tiKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQotCS8qIEdldCBhY3R1YWwgU0RQIGxlbmd0aCAqLwotCWlmIChjdF9zaXBfZ2V0X2luZm8oY3QsIGRwdHIsIHNrYi0+bGVuIC0gZGF0YW9mZiwgJm1hdGNob2ZmLAotCQkJICAgICZtYXRjaGxlbiwgUE9TX1NEUF9IRUFERVIpID4gMCkgewotCi0JCS8qIHNpbmNlIGN0X3NpcF9nZXRfaW5mbygpIGdpdmUgdXMgYSBwb2ludGVyIHBhc3NpbmcgJ3Y9JwotCQkgICB3ZSBuZWVkIHRvIGFkZCAyIGJ5dGVzIGluIHRoaXMgY291bnQuICovCi0JCWludCBjX2xlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZiAtIG1hdGNob2ZmICsgMjsKLQotCQkvKiBOb3csIHVwZGF0ZSBTRFAgbGVuZ3RoICovCi0JCWlmIChjdF9zaXBfZ2V0X2luZm8oY3QsIGRwdHIsIHNrYi0+bGVuIC0gZGF0YW9mZiwgJm1hdGNob2ZmLAotCQkJCSAgICAmbWF0Y2hsZW4sIFBPU19DT05URU5UKSA+IDApIHsKLQotCQkJYnVmZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUiLCBjX2xlbik7Ci0JCQlyZXR1cm4gbmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywKLQkJCQkJCQltYXRjaG9mZiwgbWF0Y2hsZW4sCi0JCQkJCQkJYnVmZmVyLCBidWZmbGVuKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfc2RwKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkgICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJICAgICAgIF9fYmUzMiBuZXdpcCwgdV9pbnQxNl90IHBvcnQsCi0JCQkgICAgICAgY29uc3QgY2hhciAqZHB0cikKLXsKLQljaGFyIGJ1ZmZlcltzaXplb2YoIm5ubi5ubm4ubm5uLm5ubiIpXTsKLQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgYnVmZmxlbjsKLQotCWRhdGFvZmYgPSBpcF9oZHJsZW4oc2tiKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQotCS8qIE1hbmdsZSBvd25lciBhbmQgY29udGFjdCBpbmZvLiAqLwotCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1IiwgTklQUVVBRChuZXdpcCkpOwotCWlmICghbWFuZ2xlX3NpcF9wYWNrZXQoc2tiLCBjdGluZm8sIGN0LCAmZHB0ciwgc2tiLT5sZW4gLSBkYXRhb2ZmLAotCQkJICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgUE9TX09XTkVSX0lQNCkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFtYW5nbGVfc2lwX3BhY2tldChza2IsIGN0aW5mbywgY3QsICZkcHRyLCBza2ItPmxlbiAtIGRhdGFvZmYsCi0JCQkgICAgICAgYnVmZmVyLCBidWZmbGVuLCBQT1NfQ09OTkVDVElPTl9JUDQpKQotCQlyZXR1cm4gMDsKLQotCS8qIE1hbmdsZSBtZWRpYSBwb3J0LiAqLwotCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgcG9ydCk7Ci0JaWYgKCFtYW5nbGVfc2lwX3BhY2tldChza2IsIGN0aW5mbywgY3QsICZkcHRyLCBza2ItPmxlbiAtIGRhdGFvZmYsCi0JCQkgICAgICAgYnVmZmVyLCBidWZmbGVuLCBQT1NfTUVESUEpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4oc2tiLCBjdGluZm8sIGN0LCBkcHRyKTsKLX0KLQotc3RhdGljIHZvaWQgaXBfbmF0X3NkcF9leHBlY3Qoc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKKy8qIEhhbmRsZXMgZXhwZWN0ZWQgc2lnbmFsbGluZyBjb25uZWN0aW9ucyBhbmQgbWVkaWEgc3RyZWFtcyAqLworc3RhdGljIHZvaWQgaXBfbmF0X3NpcF9leHBlY3RlZChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKIAlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOwogCiAJLyogVGhpcyBtdXN0IGJlIGEgZnJlc2ggb25lLiAqLwogCUJVR19PTihjdC0+c3RhdHVzICYgSVBTX05BVF9ET05FX01BU0spOwogCi0JLyogQ2hhbmdlIHNyYyB0byB3aGVyZSBtYXN0ZXIgc2VuZHMgdG8gKi8KLQlyYW5nZS5mbGFncyA9IElQX05BVF9SQU5HRV9NQVBfSVBTOwotCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcAotCQk9IGN0LT5tYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLmRzdC51My5pcDsKLQluZl9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBJUF9OQVRfTUFOSVBfU1JDKTsKLQogCS8qIEZvciBEU1QgbWFuaXAsIG1hcCBwb3J0IGhlcmUgdG8gd2hlcmUgaXQncyBleHBlY3RlZC4gKi8KIAlyYW5nZS5mbGFncyA9IChJUF9OQVRfUkFOR0VfTUFQX0lQUyB8IElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpOwogCXJhbmdlLm1pbiA9IHJhbmdlLm1heCA9IGV4cC0+c2F2ZWRfcHJvdG87CiAJcmFuZ2UubWluX2lwID0gcmFuZ2UubWF4X2lwID0gZXhwLT5zYXZlZF9pcDsKIAluZl9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBJUF9OQVRfTUFOSVBfRFNUKTsKKworCS8qIENoYW5nZSBzcmMgdG8gd2hlcmUgbWFzdGVyIHNlbmRzIHRvLCBidXQgb25seSBpZiB0aGUgY29ubmVjdGlvbgorCSAqIGFjdHVhbGx5IGNhbWUgZnJvbSB0aGUgc2FtZSBzb3VyY2UuICovCisJaWYgKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXAgPT0KKwkgICAgY3QtPm1hc3Rlci0+dHVwbGVoYXNoW2V4cC0+ZGlyXS50dXBsZS5zcmMudTMuaXApIHsKKwkJcmFuZ2UuZmxhZ3MgPSBJUF9OQVRfUkFOR0VfTUFQX0lQUzsKKwkJcmFuZ2UubWluX2lwID0gcmFuZ2UubWF4X2lwCisJCQk9IGN0LT5tYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLmRzdC51My5pcDsKKwkJbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgSVBfTkFUX01BTklQX1NSQyk7CisJfQogfQogCi0vKiBTbywgdGhpcyBwYWNrZXQgaGFzIGhpdCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtYXRjaGluZyBjb2RlLgotICAgTWFuZ2xlIGl0LCBhbmQgY2hhbmdlIHRoZSBleHBlY3RhdGlvbiB0byBtYXRjaCB0aGUgbmV3IHZlcnNpb24uICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmRwdHIpCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zaXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4pCiB7Ci0Jc3RydWN0IG5mX2Nvbm4gKmN0ID0gZXhwLT5tYXN0ZXI7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlfX2JlMzIgbmV3aXA7CiAJdV9pbnQxNl90IHBvcnQ7CisJY2hhciBidWZmZXJbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm46bm5ubm4iKV07CisJdW5zaWduZWQgYnVmbGVuOwogCiAJLyogQ29ubmVjdGlvbiB3aWxsIGNvbWUgZnJvbSByZXBseSAqLwotCWlmIChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwID09Ci0JICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLmlwKQorCWlmIChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwID09IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLmlwKQogCQluZXdpcCA9IGV4cC0+dHVwbGUuZHN0LnUzLmlwOwogCWVsc2UKIAkJbmV3aXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcDsKIAorCS8qIElmIHRoZSBzaWduYWxsaW5nIHBvcnQgbWF0Y2hlcyB0aGUgY29ubmVjdGlvbidzIHNvdXJjZSBwb3J0IGluIHRoZQorCSAqIG9yaWdpbmFsIGRpcmVjdGlvbiwgdHJ5IHRvIHVzZSB0aGUgZGVzdGluYXRpb24gcG9ydCBpbiB0aGUgb3Bwb3NpdGUKKwkgKiBkaXJlY3Rpb24uICovCisJaWYgKGV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPT0KKwkgICAgY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51LnVkcC5wb3J0KQorCQlwb3J0ID0gbnRvaHMoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudS51ZHAucG9ydCk7CisJZWxzZQorCQlwb3J0ID0gbnRvaHMoZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCk7CisKIAlleHAtPnNhdmVkX2lwID0gZXhwLT50dXBsZS5kc3QudTMuaXA7CiAJZXhwLT50dXBsZS5kc3QudTMuaXAgPSBuZXdpcDsKIAlleHAtPnNhdmVkX3Byb3RvLnVkcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydDsKIAlleHAtPmRpciA9ICFkaXI7CisJZXhwLT5leHBlY3RmbiA9IGlwX25hdF9zaXBfZXhwZWN0ZWQ7CiAKLQkvKiBXaGVuIHlvdSBzZWUgdGhlIHBhY2tldCwgd2UgbmVlZCB0byBOQVQgaXQgdGhlIHNhbWUgYXMgdGhlCi0JICAgdGhpcyBvbmUuICovCi0JZXhwLT5leHBlY3RmbiA9IGlwX25hdF9zZHBfZXhwZWN0OwotCi0JLyogVHJ5IHRvIGdldCBzYW1lIHBvcnQ6IGlmIG5vdCwgdHJ5IHRvIGNoYW5nZSBpdC4gKi8KLQlmb3IgKHBvcnQgPSBudG9ocyhleHAtPnNhdmVkX3Byb3RvLnVkcC5wb3J0KTsgcG9ydCAhPSAwOyBwb3J0KyspIHsKKwlmb3IgKDsgcG9ydCAhPSAwOyBwb3J0KyspIHsKIAkJZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHBvcnQpOwogCQlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKQogCQkJYnJlYWs7CkBAIC0yNzUsMjYgKzI3NywyMTIgQEAKIAlpZiAocG9ydCA9PSAwKQogCQlyZXR1cm4gTkZfRFJPUDsKIAotCWlmICghbWFuZ2xlX3NkcChza2IsIGN0aW5mbywgY3QsIG5ld2lwLCBwb3J0LCBkcHRyKSkgewotCQluZl9jdF91bmV4cGVjdF9yZWxhdGVkKGV4cCk7Ci0JCXJldHVybiBORl9EUk9QOworCWlmIChleHAtPnR1cGxlLmRzdC51My5pcCAhPSBleHAtPnNhdmVkX2lwIHx8CisJICAgIGV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgIT0gZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCkgeworCQlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1OiV1IiwKKwkJCQkgTklQUVVBRChuZXdpcCksIHBvcnQpOworCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCisJCQkJICAgYnVmZmVyLCBidWZsZW4pKQorCQkJZ290byBlcnI7CiAJfQogCXJldHVybiBORl9BQ0NFUFQ7CisKK2VycjoKKwluZl9jdF91bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJcmV0dXJuIE5GX0RST1A7Cit9CisKK3N0YXRpYyBpbnQgbWFuZ2xlX2NvbnRlbnRfbGVuKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuKQoreworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW47CisJY2hhciBidWZmZXJbc2l6ZW9mKCI2NTUzNiIpXTsKKwlpbnQgYnVmbGVuLCBjX2xlbjsKKworCS8qIEdldCBhY3R1YWwgU0RQIGxlbmd0aCAqLworCWlmIChjdF9zaXBfZ2V0X3NkcF9oZWFkZXIoY3QsICpkcHRyLCAwLCAqZGF0YWxlbiwKKwkJCQkgIFNEUF9IRFJfVkVSU0lPTiwgU0RQX0hEUl9VTlNQRUMsCisJCQkJICAmbWF0Y2hvZmYsICZtYXRjaGxlbikgPD0gMCkKKwkJcmV0dXJuIDA7CisJY19sZW4gPSAqZGF0YWxlbiAtIG1hdGNob2ZmICsgc3RybGVuKCJ2PSIpOworCisJLyogTm93LCB1cGRhdGUgU0RQIGxlbmd0aCAqLworCWlmIChjdF9zaXBfZ2V0X2hlYWRlcihjdCwgKmRwdHIsIDAsICpkYXRhbGVuLCBTSVBfSERSX0NPTlRFTlRfTEVOR1RILAorCQkJICAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pIDw9IDApCisJCXJldHVybiAwOworCisJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIldSIsIGNfbGVuKTsKKwlyZXR1cm4gbWFuZ2xlX3BhY2tldChza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJCSAgICAgYnVmZmVyLCBidWZsZW4pOworfQorCitzdGF0aWMgdW5zaWduZWQgbWFuZ2xlX3NkcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHR5cGUsCisJCQkJICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdGVybSwKKwkJCQkgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sIG1hdGNob2ZmOworCisJaWYgKGN0X3NpcF9nZXRfc2RwX2hlYWRlcihjdCwgKmRwdHIsIGRhdGFvZmYsICpkYXRhbGVuLCB0eXBlLCB0ZXJtLAorCQkJCSAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pIDw9IDApCisJCXJldHVybiAwOworCXJldHVybiBtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkJICAgICBidWZmZXIsIGJ1Zmxlbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGNoYXIgKipkcHRyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdHlwZSwKKwkJCQkgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sCisJCQkJICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcikKK3sKKwljaGFyIGJ1ZmZlcltzaXplb2YoIm5ubi5ubm4ubm5uLm5ubiIpXTsKKwl1bnNpZ25lZCBpbnQgYnVmbGVuOworCisJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsIE5JUFFVQURfRk1ULCBOSVBRVUFEKGFkZHItPmlwKSk7CisJaWYgKCFtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sIHR5cGUsIHRlcm0sCisJCQkgICAgICAgYnVmZmVyLCBidWZsZW4pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4oc2tiLCBkcHRyLCBkYXRhbGVuKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwX3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCisJCQkJICAgIHVfaW50MTZfdCBwb3J0KQoreworCWNoYXIgYnVmZmVyW3NpemVvZigibm5ubm4iKV07CisJdW5zaWduZWQgaW50IGJ1ZmxlbjsKKworCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUiLCBwb3J0KTsKKwlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCisJCQkgICBidWZmZXIsIGJ1ZmxlbikpCisJCXJldHVybiAwOworCisJcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRwdHIsIGRhdGFsZW4pOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHBfc2Vzc2lvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBjaGFyICoqZHB0ciwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKQoreworCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLm5ubi5ubm4ubm5uIildOworCXVuc2lnbmVkIGludCBidWZsZW47CisKKwkvKiBNYW5nbGUgc2Vzc2lvbiBkZXNjcmlwdGlvbiBvd25lciBhbmQgY29udGFjdCBhZGRyZXNzZXMgKi8KKwlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1IiwgTklQUVVBRChhZGRyLT5pcCkpOworCWlmICghbWFuZ2xlX3NkcF9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhb2ZmLCBkYXRhbGVuLAorCQkJICAgICAgIFNEUF9IRFJfT1dORVJfSVA0LCBTRFBfSERSX01FRElBLAorCQkJICAgICAgIGJ1ZmZlciwgYnVmbGVuKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1hbmdsZV9zZHBfcGFja2V0KHNrYiwgZHB0ciwgZGF0YW9mZiwgZGF0YWxlbiwKKwkJCSAgICAgICBTRFBfSERSX0NPTk5FQ1RJT05fSVA0LCBTRFBfSERSX01FRElBLAorCQkJICAgICAgIGJ1ZmZlciwgYnVmbGVuKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWFuZ2xlX2NvbnRlbnRfbGVuKHNrYiwgZHB0ciwgZGF0YWxlbik7Cit9CisKKy8qIFNvLCB0aGlzIHBhY2tldCBoYXMgaGl0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1hdGNoaW5nIGNvZGUuCisgICBNYW5nbGUgaXQsIGFuZCBjaGFuZ2UgdGhlIGV4cGVjdGF0aW9uIHRvIG1hdGNoIHRoZSBuZXcgdmVyc2lvbi4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcF9tZWRpYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cCwKKwkJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBtZWRpYW9mZiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBtZWRpYWxlbiwKKwkJCQkgICAgIHVuaW9uIG5mX2luZXRfYWRkciAqcnRwX2FkZHIpCit7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwl1X2ludDE2X3QgcG9ydDsKKworCS8qIENvbm5lY3Rpb24gd2lsbCBjb21lIGZyb20gcmVwbHkgKi8KKwlpZiAoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51My5pcCA9PQorCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcCkKKwkJcnRwX2FkZHItPmlwID0gcnRwX2V4cC0+dHVwbGUuZHN0LnUzLmlwOworCWVsc2UKKwkJcnRwX2FkZHItPmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMuaXA7CisKKwlydHBfZXhwLT5zYXZlZF9pcCA9IHJ0cF9leHAtPnR1cGxlLmRzdC51My5pcDsKKwlydHBfZXhwLT50dXBsZS5kc3QudTMuaXAgPSBydHBfYWRkci0+aXA7CisJcnRwX2V4cC0+c2F2ZWRfcHJvdG8udWRwLnBvcnQgPSBydHBfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydDsKKwlydHBfZXhwLT5kaXIgPSAhZGlyOworCXJ0cF9leHAtPmV4cGVjdGZuID0gaXBfbmF0X3NpcF9leHBlY3RlZDsKKworCXJ0Y3BfZXhwLT5zYXZlZF9pcCA9IHJ0Y3BfZXhwLT50dXBsZS5kc3QudTMuaXA7CisJcnRjcF9leHAtPnR1cGxlLmRzdC51My5pcCA9IHJ0cF9hZGRyLT5pcDsKKwlydGNwX2V4cC0+c2F2ZWRfcHJvdG8udWRwLnBvcnQgPSBydGNwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQ7CisJcnRjcF9leHAtPmRpciA9ICFkaXI7CisJcnRjcF9leHAtPmV4cGVjdGZuID0gaXBfbmF0X3NpcF9leHBlY3RlZDsKKworCS8qIFRyeSB0byBnZXQgc2FtZSBwYWlyIG9mIHBvcnRzOiBpZiBub3QsIHRyeSB0byBjaGFuZ2UgdGhlbS4gKi8KKwlmb3IgKHBvcnQgPSBudG9ocyhydHBfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCk7CisJICAgICBwb3J0ICE9IDA7IHBvcnQgKz0gMikgeworCQlydHBfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHBvcnQpOworCQlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCkgIT0gMCkKKwkJCWNvbnRpbnVlOworCQlydGNwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0ICsgMSk7CisJCWlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChydGNwX2V4cCkgPT0gMCkKKwkJCWJyZWFrOworCQluZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApOworCX0KKworCWlmIChwb3J0ID09IDApCisJCWdvdG8gZXJyMTsKKworCS8qIFVwZGF0ZSBtZWRpYSBwb3J0LiAqLworCWlmIChydHBfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCAhPSBydHBfZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCAmJgorCSAgICAhaXBfbmF0X3NkcF9wb3J0KHNrYiwgZHB0ciwgZGF0YWxlbiwgbWVkaWFvZmYsIG1lZGlhbGVuLCBwb3J0KSkKKwkJZ290byBlcnIyOworCisJcmV0dXJuIE5GX0FDQ0VQVDsKKworZXJyMjoKKwluZl9jdF91bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApOworCW5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRjcF9leHApOworZXJyMToKKwlyZXR1cm4gTkZfRFJPUDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9zaXBfZmluaSh2b2lkKQogewogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX2hvb2ssIE5VTEwpOwotCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2RwX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX2V4cGVjdF9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NkcF9hZGRyX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2RwX3BvcnRfaG9vaywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZHBfc2Vzc2lvbl9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NkcF9tZWRpYV9ob29rLCBOVUxMKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3NpcF9pbml0KHZvaWQpCiB7CiAJQlVHX09OKG5mX25hdF9zaXBfaG9vayAhPSBOVUxMKTsKLQlCVUdfT04obmZfbmF0X3NkcF9ob29rICE9IE5VTEwpOworCUJVR19PTihuZl9uYXRfc2lwX2V4cGVjdF9ob29rICE9IE5VTEwpOworCUJVR19PTihuZl9uYXRfc2RwX2FkZHJfaG9vayAhPSBOVUxMKTsKKwlCVUdfT04obmZfbmF0X3NkcF9wb3J0X2hvb2sgIT0gTlVMTCk7CisJQlVHX09OKG5mX25hdF9zZHBfc2Vzc2lvbl9ob29rICE9IE5VTEwpOworCUJVR19PTihuZl9uYXRfc2RwX21lZGlhX2hvb2sgIT0gTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zaXBfaG9vaywgaXBfbmF0X3NpcCk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZHBfaG9vaywgaXBfbmF0X3NkcCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zaXBfZXhwZWN0X2hvb2ssIGlwX25hdF9zaXBfZXhwZWN0KTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NkcF9hZGRyX2hvb2ssIGlwX25hdF9zZHBfYWRkcik7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZHBfcG9ydF9ob29rLCBpcF9uYXRfc2RwX3BvcnQpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2RwX3Nlc3Npb25faG9vaywgaXBfbmF0X3NkcF9zZXNzaW9uKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NkcF9tZWRpYV9ob29rLCBpcF9uYXRfc2RwX21lZGlhKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwppbmRleCA1NDBjZTZhLi41ZGFlZmFkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPG5ldC91ZHAuaD4KIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CiAKQEAgLTIxOSw3ICsyMjAsNyBAQAogCQlpZiAoY2ggPCAweDgwKQogCQkJKmxlbiA9IGNoOwogCQllbHNlIHsKLQkJCWNudCA9ICh1bnNpZ25lZCBjaGFyKSAoY2ggJiAweDdGKTsKKwkJCWNudCA9IGNoICYgMHg3RjsKIAkJCSpsZW4gPSAwOwogCiAJCQl3aGlsZSAoY250ID4gMCkgewpAQCAtNjE3LDggKzYxOCw3IEBACiAJaW50IHN5bnRheDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25tcF9jbnYgc25tcF9jb252IFtdID0KLXsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9jbnYgc25tcF9jb252W10gPSB7CiAJe0FTTjFfVU5JLCBBU04xX05VTCwgU05NUF9OVUxMfSwKIAl7QVNOMV9VTkksIEFTTjFfSU5ULCBTTk1QX0lOVEVHRVJ9LAogCXtBU04xX1VOSSwgQVNOMV9PVFMsIFNOTVBfT0NURVRTVFJ9LApAQCAtNjQzLDcgKzY0Myw3IEBACiAJCQkJCSB1bnNpZ25lZCBpbnQgY2xzLAogCQkJCQkgdW5zaWduZWQgc2hvcnQgKnN5bnRheCkKIHsKLQlzdHJ1Y3Qgc25tcF9jbnYgKmNudjsKKwljb25zdCBzdHJ1Y3Qgc25tcF9jbnYgKmNudjsKIAogCWNudiA9IHNubXBfY29udjsKIApAQCAtOTAzLDcgKzkwMyw3IEBACiAJCXVfaW50MzJfdCBvbGQ7CiAKIAkJaWYgKGRlYnVnKQotCQkJbWVtY3B5KCZvbGQsICh1bnNpZ25lZCBjaGFyICopYWRkciwgc2l6ZW9mKG9sZCkpOworCQkJbWVtY3B5KCZvbGQsIGFkZHIsIHNpemVvZihvbGQpKTsKIAogCQkqYWRkciA9IG1hcC0+dG87CiAKQEAgLTk5OCw3ICs5OTgsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgaGV4X2R1bXAodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQorc3RhdGljIHZvaWQgaGV4X2R1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXNpemVfdCBpOwogCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCWlmIChjbHMgIT0gQVNOMV9DVFggfHwgY29uICE9IEFTTjFfQ09OKQogCQlyZXR1cm4gMDsKIAlpZiAoZGVidWcgPiAxKSB7Ci0JCXVuc2lnbmVkIGNoYXIgKnBkdXNbXSA9IHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IHBkdXNbXSA9IHsKIAkJCVtTTk1QX1BEVV9HRVRdID0gImdldCIsCiAJCQlbU05NUF9QRFVfTkVYVF0gPSAiZ2V0LW5leHQiLAogCQkJW1NOTVBfUERVX1JFU1BPTlNFXSA9ICJyZXNwb25zZSIsCkBAIC0xMjMxLDggKzEyMzEsOCBAQAogewogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJdW5zaWduZWQgaW50IHJldDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCXN0cnVjdCB1ZHBoZHIgKnVkcGggPSAoc3RydWN0IHVkcGhkciAqKSgodV9pbnQzMl90ICopaXBoICsgaXBoLT5paGwpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IHVkcGhkciAqdWRwaCA9IChzdHJ1Y3QgdWRwaGRyICopKChfX2JlMzIgKilpcGggKyBpcGgtPmlobCk7CiAKIAkvKiBTTk1QIHJlcGxpZXMgYW5kIG9yaWdpbmF0aW5nIFNOTVAgdHJhcHMgZ2V0IG1hbmdsZWQgKi8KIAlpZiAodWRwaC0+c291cmNlID09IGh0b25zKFNOTVBfUE9SVCkgJiYgZGlyICE9IElQX0NUX0RJUl9SRVBMWSkKQEAgLTEyNjcsMTEgKzEyNjcsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNubXBfZXhwX3BvbGljeSA9IHsKKwkubWF4X2V4cGVjdGVkCT0gMCwKKwkudGltZW91dAk9IDE4MCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzbm1wX2hlbHBlciBfX3JlYWRfbW9zdGx5ID0gewotCS5tYXhfZXhwZWN0ZWQJCT0gMCwKLQkudGltZW91dAkJPSAxODAsCiAJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkuaGVscAkJCT0gaGVscCwKKwkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcCIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCiAJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1BPUlQpLApAQCAtMTI3OSwxMCArMTI4Myw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc25tcF90cmFwX2hlbHBlciBfX3JlYWRfbW9zdGx5ID0gewotCS5tYXhfZXhwZWN0ZWQJCT0gMCwKLQkudGltZW91dAkJPSAxODAsCiAJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkuaGVscAkJCT0gaGVscCwKKwkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcF90cmFwIiwKIAkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKIAkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFNOTVBfVFJBUF9QT1JUKSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKaW5kZXggOTliMmM3OC4uYjdkZDY5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKQEAgLTMwLDggKzMwLDggQEAKICNpZmRlZiBDT05GSUdfWEZSTQogc3RhdGljIHZvaWQgbmF0X2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwpCiB7Ci0Jc3RydWN0IG5mX2Nvbm4gKmN0OwotCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQ7CisJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OworCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQ7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKIAl1bnNpZ25lZCBsb25nIHN0YXR1c2JpdDsKQEAgLTUwLDcgKzUwLDEwIEBACiAJaWYgKGN0LT5zdGF0dXMgJiBzdGF0dXNiaXQpIHsKIAkJZmwtPmZsNF9kc3QgPSB0LT5kc3QudTMuaXA7CiAJCWlmICh0LT5kc3QucHJvdG9udW0gPT0gSVBQUk9UT19UQ1AgfHwKLQkJICAgIHQtPmRzdC5wcm90b251bSA9PSBJUFBST1RPX1VEUCkKKwkJICAgIHQtPmRzdC5wcm90b251bSA9PSBJUFBST1RPX1VEUCB8fAorCQkgICAgdC0+ZHN0LnByb3RvbnVtID09IElQUFJPVE9fVURQTElURSB8fAorCQkgICAgdC0+ZHN0LnByb3RvbnVtID09IElQUFJPVE9fRENDUCB8fAorCQkgICAgdC0+ZHN0LnByb3RvbnVtID09IElQUFJPVE9fU0NUUCkKIAkJCWZsLT5mbF9pcF9kcG9ydCA9IHQtPmRzdC51LnRjcC5wb3J0OwogCX0KIApAQCAtNTksNyArNjIsMTAgQEAKIAlpZiAoY3QtPnN0YXR1cyAmIHN0YXR1c2JpdCkgewogCQlmbC0+Zmw0X3NyYyA9IHQtPnNyYy51My5pcDsKIAkJaWYgKHQtPmRzdC5wcm90b251bSA9PSBJUFBST1RPX1RDUCB8fAotCQkgICAgdC0+ZHN0LnByb3RvbnVtID09IElQUFJPVE9fVURQKQorCQkgICAgdC0+ZHN0LnByb3RvbnVtID09IElQUFJPVE9fVURQIHx8CisJCSAgICB0LT5kc3QucHJvdG9udW0gPT0gSVBQUk9UT19VRFBMSVRFIHx8CisJCSAgICB0LT5kc3QucHJvdG9udW0gPT0gSVBQUk9UT19EQ0NQIHx8CisJCSAgICB0LT5kc3QucHJvdG9udW0gPT0gSVBQUk9UT19TQ1RQKQogCQkJZmwtPmZsX2lwX3Nwb3J0ID0gdC0+c3JjLnUudGNwLnBvcnQ7CiAJfQogfQpAQCAtODcsMjEgKzkzLDggQEAKIAkgICBoYXZlIGRyb3BwZWQgaXQuICBIZW5jZSBpdCdzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWx0eSB0bwogCSAgIHBhY2tldCBmaWx0ZXIgaXQgb3V0LCBvciBpbXBsZW1lbnQgY29ubnRyYWNrL05BVCBmb3IgdGhhdAogCSAgIHByb3RvY29sLiA4KSAtLVJSICovCi0JaWYgKCFjdCkgewotCQkvKiBFeGNlcHRpb246IElDTVAgcmVkaXJlY3QgdG8gbmV3IGNvbm5lY3Rpb24gKG5vdCBpbgotCQkgICBoYXNoIHRhYmxlIHlldCkuICBXZSBtdXN0IG5vdCBsZXQgdGhpcyB0aHJvdWdoLCBpbgotCQkgICBjYXNlIHdlJ3JlIGRvaW5nIE5BVCB0byB0aGUgc2FtZSBuZXR3b3JrLiAqLwotCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fSUNNUCkgewotCQkJc3RydWN0IGljbXBoZHIgX2hkciwgKmhwOwotCi0JCQlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwX2hkcmxlbihza2IpLAotCQkJCQkJc2l6ZW9mKF9oZHIpLCAmX2hkcik7Ci0JCQlpZiAoaHAgIT0gTlVMTCAmJgotCQkJICAgIGhwLT50eXBlID09IElDTVBfUkVESVJFQ1QpCi0JCQkJcmV0dXJuIE5GX0RST1A7Ci0JCX0KKwlpZiAoIWN0KQogCQlyZXR1cm4gTkZfQUNDRVBUOwotCX0KIAogCS8qIERvbid0IHRyeSB0byBOQVQgaWYgdGhpcyBwYWNrZXQgaXMgbm90IGNvbm50cmFja2VkICovCiAJaWYgKGN0ID09ICZuZl9jb25udHJhY2tfdW50cmFja2VkKQpAQCAtMTA5LDYgKzEwMiw5IEBACiAKIAluYXQgPSBuZmN0X25hdChjdCk7CiAJaWYgKCFuYXQpIHsKKwkJLyogTkFUIG1vZHVsZSB3YXMgbG9hZGVkIGxhdGUuICovCisJCWlmIChuZl9jdF9pc19jb25maXJtZWQoY3QpKQorCQkJcmV0dXJuIE5GX0FDQ0VQVDsKIAkJbmF0ID0gbmZfY3RfZXh0X2FkZChjdCwgTkZfQ1RfRVhUX05BVCwgR0ZQX0FUT01JQyk7CiAJCWlmIChuYXQgPT0gTlVMTCkgewogCQkJcHJfZGVidWcoImZhaWxlZCB0byBhZGQgTkFUIGV4dGVuc2lvblxuIik7CkBAIC0xMzQsMTAgKzEzMCw3IEBACiAJCWlmICghbmZfbmF0X2luaXRpYWxpemVkKGN0LCBtYW5pcHR5cGUpKSB7CiAJCQl1bnNpZ25lZCBpbnQgcmV0OwogCi0JCQlpZiAodW5saWtlbHkobmZfY3RfaXNfY29uZmlybWVkKGN0KSkpCi0JCQkJLyogTkFUIG1vZHVsZSB3YXMgbG9hZGVkIGxhdGUgKi8KLQkJCQlyZXQgPSBhbGxvY19udWxsX2JpbmRpbmdfY29uZmlybWVkKGN0LCBob29rbnVtKTsKLQkJCWVsc2UgaWYgKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikKKwkJCWlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pCiAJCQkJLyogTE9DQUxfSU4gaG9vayBkb2Vzbid0IGhhdmUgYSBjaGFpbiEgICovCiAJCQkJcmV0ID0gYWxsb2NfbnVsbF9iaW5kaW5nKGN0LCBob29rbnVtKTsKIAkJCWVsc2UKQEAgLTE4OSw3ICsxODIsNyBAQAogCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogI2lmZGVmIENPTkZJR19YRlJNCi0Jc3RydWN0IG5mX2Nvbm4gKmN0OworCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKICNlbmRpZgogCXVuc2lnbmVkIGludCByZXQ7CkBAIC0yMjMsNyArMjE2LDcgQEAKIAkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0Jc3RydWN0IG5mX2Nvbm4gKmN0OworCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCkBAIC0yNTIsMjUgKzI0NSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAotbmZfbmF0X2FkanVzdCh1bnNpZ25lZCBpbnQgaG9va251bSwKLQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCXN0cnVjdCBuZl9jb25uICpjdDsKLQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKLQotCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0JaWYgKGN0ICYmIHRlc3RfYml0KElQU19TRVFfQURKVVNUX0JJVCwgJmN0LT5zdGF0dXMpKSB7Ci0JCXByX2RlYnVnKCJuZl9uYXRfc3RhbmRhbG9uZTogYWRqdXN0aW5nIHNlcXVlbmNlIG51bWJlclxuIik7Ci0JCWlmICghbmZfbmF0X3NlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkKLQkJCXJldHVybiBORl9EUk9QOwotCX0KLQlyZXR1cm4gTkZfQUNDRVBUOwotfQotCiAvKiBXZSBtdXN0IGJlIGFmdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLiAqLwogCiBzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIG5mX25hdF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMjkwLDE0ICsyNjQsNiBAQAogCQkuaG9va251bQk9IE5GX0lORVRfUE9TVF9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKIAl9LAotCS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLwotCXsKLQkJLmhvb2sJCT0gbmZfbmF0X2FkanVzdCwKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX1BPU1RfUk9VVElORywKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAotCX0sCiAJLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwogCXsKIAkJLmhvb2sJCT0gbmZfbmF0X2xvY2FsX2ZuLApAQCAtMzE0LDE0ICsyODAsNiBAQAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU1JDLAogCX0sCi0JLyogQWZ0ZXIgY29ubnRyYWNrLCBhZGp1c3Qgc2VxdWVuY2UgbnVtYmVyICovCi0JewotCQkuaG9vawkJPSBuZl9uYXRfYWRqdXN0LAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKLQl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3N0YW5kYWxvbmVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvYy5jIGIvbmV0L2lwdjQvcHJvYy5jCmluZGV4IGQ2MzQ3NGMuLjU1MjE2OWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Byb2MuYworKysgYi9uZXQvaXB2NC9wcm9jLmMKQEAgLTUxLDI0ICs1MSw1NCBAQAogICovCiBzdGF0aWMgaW50IHNvY2tzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcS0+cHJpdmF0ZTsKKwogCXNvY2tldF9zZXFfc2hvdyhzZXEpOwogCXNlcV9wcmludGYoc2VxLCAiVENQOiBpbnVzZSAlZCBvcnBoYW4gJWQgdHcgJWQgYWxsb2MgJWQgbWVtICVkXG4iLAotCQkgICBzb2NrX3Byb3RfaW51c2VfZ2V0KCZ0Y3BfcHJvdCksCisJCSAgIHNvY2tfcHJvdF9pbnVzZV9nZXQobmV0LCAmdGNwX3Byb3QpLAogCQkgICBhdG9taWNfcmVhZCgmdGNwX29ycGhhbl9jb3VudCksCiAJCSAgIHRjcF9kZWF0aF9yb3cudHdfY291bnQsIGF0b21pY19yZWFkKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpLAogCQkgICBhdG9taWNfcmVhZCgmdGNwX21lbW9yeV9hbGxvY2F0ZWQpKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlVEUDogaW51c2UgJWQgbWVtICVkXG4iLCBzb2NrX3Byb3RfaW51c2VfZ2V0KCZ1ZHBfcHJvdCksCisJc2VxX3ByaW50ZihzZXEsICJVRFA6IGludXNlICVkIG1lbSAlZFxuIiwKKwkJICAgc29ja19wcm90X2ludXNlX2dldChuZXQsICZ1ZHBfcHJvdCksCiAJCSAgIGF0b21pY19yZWFkKCZ1ZHBfbWVtb3J5X2FsbG9jYXRlZCkpOwotCXNlcV9wcmludGYoc2VxLCAiVURQTElURTogaW51c2UgJWRcbiIsIHNvY2tfcHJvdF9pbnVzZV9nZXQoJnVkcGxpdGVfcHJvdCkpOwotCXNlcV9wcmludGYoc2VxLCAiUkFXOiBpbnVzZSAlZFxuIiwgc29ja19wcm90X2ludXNlX2dldCgmcmF3X3Byb3QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlVEUExJVEU6IGludXNlICVkXG4iLAorCQkgICBzb2NrX3Byb3RfaW51c2VfZ2V0KG5ldCwgJnVkcGxpdGVfcHJvdCkpOworCXNlcV9wcmludGYoc2VxLCAiUkFXOiBpbnVzZSAlZFxuIiwKKwkJICAgc29ja19wcm90X2ludXNlX2dldChuZXQsICZyYXdfcHJvdCkpOwogCXNlcV9wcmludGYoc2VxLCAgIkZSQUc6IGludXNlICVkIG1lbW9yeSAlZFxuIiwKLQkJCWlwX2ZyYWdfbnF1ZXVlcygmaW5pdF9uZXQpLCBpcF9mcmFnX21lbSgmaW5pdF9uZXQpKTsKKwkJCWlwX2ZyYWdfbnF1ZXVlcyhuZXQpLCBpcF9mcmFnX21lbShuZXQpKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzb2Nrc3RhdF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc29ja3N0YXRfc2VxX3Nob3csIE5VTEwpOworCWludCBlcnI7CisJc3RydWN0IG5ldCAqbmV0OworCisJZXJyID0gLUVOWElPOworCW5ldCA9IGdldF9wcm9jX25ldChpbm9kZSk7CisJaWYgKG5ldCA9PSBOVUxMKQorCQlnb3RvIGVycl9uZXQ7CisKKwllcnIgPSBzaW5nbGVfb3BlbihmaWxlLCBzb2Nrc3RhdF9zZXFfc2hvdywgbmV0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3BlbjsKKworCXJldHVybiAwOworCitlcnJfb3BlbjoKKwlwdXRfbmV0KG5ldCk7CitlcnJfbmV0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc29ja3N0YXRfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG5ldCAqbmV0ID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlOworCisJcHV0X25ldChuZXQpOworCXJldHVybiBzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNvY2tzdGF0X3NlcV9mb3BzID0gewpAQCAtNzYsNyArMTA2LDcgQEAKIAkub3BlbgkgPSBzb2Nrc3RhdF9zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKIAkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc29ja3N0YXRfc2VxX3JlbGVhc2UsCiB9OwogCiAvKiBzbm1wIGl0ZW1zICovCkBAIC00MjMsMjUgKzQ1Myw0MiBAQAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgX19uZXRfaW5pdCBpbnQgaXBfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJzb2Nrc3RhdCIsIFNfSVJVR08sICZzb2Nrc3RhdF9zZXFfZm9wcykpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIGlwX3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXByb2NfbmV0X3JlbW92ZShuZXQsICJzb2Nrc3RhdCIpOworfQorCitzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwX3Byb2Nfb3BzID0geworCS5pbml0ID0gaXBfcHJvY19pbml0X25ldCwKKwkuZXhpdCA9IGlwX3Byb2NfZXhpdF9uZXQsCit9OworCiBpbnQgX19pbml0IGlwX21pc2NfcHJvY19pbml0KHZvaWQpCiB7CiAJaW50IHJjID0gMDsKIAorCWlmIChyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF9wcm9jX29wcykpCisJCWdvdG8gb3V0X3Blcm5ldDsKKwogCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAibmV0c3RhdCIsIFNfSVJVR08sICZuZXRzdGF0X3NlcV9mb3BzKSkKIAkJZ290byBvdXRfbmV0c3RhdDsKIAogCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAic25tcCIsIFNfSVJVR08sICZzbm1wX3NlcV9mb3BzKSkKIAkJZ290byBvdXRfc25tcDsKLQotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAic29ja3N0YXQiLCBTX0lSVUdPLCAmc29ja3N0YXRfc2VxX2ZvcHMpKQotCQlnb3RvIG91dF9zb2Nrc3RhdDsKIG91dDoKIAlyZXR1cm4gcmM7Ci1vdXRfc29ja3N0YXQ6Ci0JcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgInNubXAiKTsKIG91dF9zbm1wOgogCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJuZXRzdGF0Iik7CiBvdXRfbmV0c3RhdDoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3Byb2Nfb3BzKTsKK291dF9wZXJuZXQ6CiAJcmMgPSAtRU5PTUVNOwogCWdvdG8gb3V0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCBhMzAwMmZlLi4xMWQ3Zjc1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtODEsNDEgKzgxLDM0IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KIAogc3RhdGljIHN0cnVjdCByYXdfaGFzaGluZm8gcmF3X3Y0X2hhc2hpbmZvID0gewotCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKCksCisJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocmF3X3Y0X2hhc2hpbmZvLmxvY2spLAogfTsKIAotdm9pZCByYXdfaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByYXdfaGFzaGluZm8gKmgpCit2b2lkIHJhd19oYXNoX3NrKHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgcmF3X2hhc2hpbmZvICpoID0gc2stPnNrX3Byb3QtPmgucmF3X2hhc2g7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAKIAloZWFkID0gJmgtPmh0W2luZXRfc2soc2spLT5udW0gJiAoUkFXX0hUQUJMRV9TSVpFIC0gMSldOwogCiAJd3JpdGVfbG9ja19iaCgmaC0+bG9jayk7CiAJc2tfYWRkX25vZGUoc2ssIGhlYWQpOwotCXNvY2tfcHJvdF9pbnVzZV9hZGQoc2stPnNrX3Byb3QsIDEpOworCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0+c2tfcHJvdCwgMSk7CiAJd3JpdGVfdW5sb2NrX2JoKCZoLT5sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJhd19oYXNoX3NrKTsKIAotdm9pZCByYXdfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJhd19oYXNoaW5mbyAqaCkKK3ZvaWQgcmF3X3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spCiB7CisJc3RydWN0IHJhd19oYXNoaW5mbyAqaCA9IHNrLT5za19wcm90LT5oLnJhd19oYXNoOworCiAJd3JpdGVfbG9ja19iaCgmaC0+bG9jayk7CiAJaWYgKHNrX2RlbF9ub2RlX2luaXQoc2spKQotCQlzb2NrX3Byb3RfaW51c2VfYWRkKHNrLT5za19wcm90LCAtMSk7CisJCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0+c2tfcHJvdCwgLTEpOwogCXdyaXRlX3VubG9ja19iaCgmaC0+bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyYXdfdW5oYXNoX3NrKTsKIAotc3RhdGljIHZvaWQgcmF3X3Y0X2hhc2goc3RydWN0IHNvY2sgKnNrKQotewotCXJhd19oYXNoX3NrKHNrLCAmcmF3X3Y0X2hhc2hpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgcmF3X3Y0X3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JcmF3X3VuaGFzaF9zayhzaywgJnJhd192NF9oYXNoaW5mbyk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX19yYXdfdjRfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLAogCQl1bnNpZ25lZCBzaG9ydCBudW0sIF9fYmUzMiByYWRkciwgX19iZTMyIGxhZGRyLCBpbnQgZGlmKQogewpAQCAtMTI0LDcgKzExNyw3IEBACiAJc2tfZm9yX2VhY2hfZnJvbShzaywgbm9kZSkgewogCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAKLQkJaWYgKHNrLT5za19uZXQgPT0gbmV0ICYmIGluZXQtPm51bSA9PSBudW0gCQkmJgorCQlpZiAobmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSAmJiBpbmV0LT5udW0gPT0gbnVtCSYmCiAJCSAgICAhKGluZXQtPmRhZGRyICYmIGluZXQtPmRhZGRyICE9IHJhZGRyKSAJCSYmCiAJCSAgICAhKGluZXQtPnJjdl9zYWRkciAmJiBpbmV0LT5yY3Zfc2FkZHIgIT0gbGFkZHIpCSYmCiAJCSAgICAhKHNrLT5za19ib3VuZF9kZXZfaWYgJiYgc2stPnNrX2JvdW5kX2Rldl9pZiAhPSBkaWYpKQpAQCAtMTc1LDcgKzE2OCw3IEBACiAJaWYgKGhsaXN0X2VtcHR5KGhlYWQpKQogCQlnb3RvIG91dDsKIAotCW5ldCA9IHNrYi0+ZGV2LT5uZF9uZXQ7CisJbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJc2sgPSBfX3Jhd192NF9sb29rdXAobmV0LCBfX3NrX2hlYWQoaGVhZCksIGlwaC0+cHJvdG9jb2wsCiAJCQkgICAgIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCiAJCQkgICAgIHNrYi0+ZGV2LT5pZmluZGV4KTsKQEAgLTI4Myw3ICsyNzYsNyBAQAogCXJhd19zayA9IHNrX2hlYWQoJnJhd192NF9oYXNoaW5mby5odFtoYXNoXSk7CiAJaWYgKHJhd19zayAhPSBOVUxMKSB7CiAJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7Ci0JCW5ldCA9IHNrYi0+ZGV2LT5uZF9uZXQ7CisJCW5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJCXdoaWxlICgocmF3X3NrID0gX19yYXdfdjRfbG9va3VwKG5ldCwgcmF3X3NrLCBwcm90b2NvbCwKIAkJCQkJCWlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCkBAIC01MDYsNyArNDk5LDcgQEAKIAlpcGMub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAogCWlmIChtc2ctPm1zZ19jb250cm9sbGVuKSB7Ci0JCWVyciA9IGlwX2Ntc2dfc2VuZChtc2csICZpcGMpOworCQllcnIgPSBpcF9jbXNnX3NlbmQoc29ja19uZXQoc2spLCBtc2csICZpcGMpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJCWlmIChpcGMub3B0KQpAQCAtNTYwLDcgKzU1Myw3IEBACiAJCX0KIAogCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCAmZmwpOwotCQllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdygmaW5pdF9uZXQsICZydCwgJmZsLCBzaywgMSk7CisJCWVyciA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgJnJ0LCAmZmwsIHNrLCAxKTsKIAl9CiAJaWYgKGVycikKIAkJZ290byBkb25lOwpAQCAtNjI3LDcgKzYyMCw3IEBACiAKIAlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fCBhZGRyX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKQogCQlnb3RvIG91dDsKLQljaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZShzay0+c2tfbmV0LCBhZGRyLT5zaW5fYWRkci5zX2FkZHIpOworCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKHNvY2tfbmV0KHNrKSwgYWRkci0+c2luX2FkZHIuc19hZGRyKTsKIAlyZXQgPSAtRUFERFJOT1RBVkFJTDsKIAlpZiAoYWRkci0+c2luX2FkZHIuc19hZGRyICYmIGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgJiYKIAkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9NVUxUSUNBU1QgJiYgY2hrX2FkZHJfcmV0ICE9IFJUTl9CUk9BRENBU1QpCkBAIC04MjUsOCArODE4LDYgQEAKIAl9CiB9CiAKLURFRklORV9QUk9UT19JTlVTRShyYXcpCi0KIHN0cnVjdCBwcm90byByYXdfcHJvdCA9IHsKIAkubmFtZQkJICAgPSAiUkFXIiwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC04NDEsMTQgKzgzMiwxNCBAQAogCS5yZWN2bXNnCSAgID0gcmF3X3JlY3Ztc2csCiAJLmJpbmQJCSAgID0gcmF3X2JpbmQsCiAJLmJhY2tsb2dfcmN2CSAgID0gcmF3X3Jjdl9za2IsCi0JLmhhc2gJCSAgID0gcmF3X3Y0X2hhc2gsCi0JLnVuaGFzaAkJICAgPSByYXdfdjRfdW5oYXNoLAorCS5oYXNoCQkgICA9IHJhd19oYXNoX3NrLAorCS51bmhhc2gJCSAgID0gcmF3X3VuaGFzaF9zaywKIAkub2JqX3NpemUJICAgPSBzaXplb2Yoc3RydWN0IHJhd19zb2NrKSwKKwkuaC5yYXdfaGFzaAkgICA9ICZyYXdfdjRfaGFzaGluZm8sCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9yYXdfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfcmF3X2dldHNvY2tvcHQsCiAjZW5kaWYKLQlSRUZfUFJPVE9fSU5VU0UocmF3KQogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC04NjIsNyArODUzLDcgQEAKIAkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKIAkJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzdGF0ZS0+aC0+aHRbc3RhdGUtPmJ1Y2tldF0pCi0JCQlpZiAoc2stPnNrX25ldCA9PSBzdGF0ZS0+cC5uZXQpCisJCQlpZiAoc29ja19uZXQoc2spID09IHNlcV9maWxlX25ldChzZXEpKQogCQkJCWdvdG8gZm91bmQ7CiAJfQogCXNrID0gTlVMTDsKQEAgLTg3OCw3ICs4NjksNyBAQAogCQlzayA9IHNrX25leHQoc2spOwogdHJ5X2FnYWluOgogCQk7Ci0JfSB3aGlsZSAoc2sgJiYgc2stPnNrX25ldCAhPSBzdGF0ZS0+cC5uZXQpOworCX0gd2hpbGUgKHNrICYmIHNvY2tfbmV0KHNrKSAhPSBzZXFfZmlsZV9uZXQoc2VxKSk7CiAKIAlpZiAoIXNrICYmICsrc3RhdGUtPmJ1Y2tldCA8IFJBV19IVEFCTEVfU0laRSkgewogCQlzayA9IHNrX2hlYWQoJnN0YXRlLT5oLT5odFtzdGF0ZS0+YnVja2V0XSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCA1MjU3ODdiLi43ODBlOTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTExOCwyMSArMTE4LDE5IEBACiAjZGVmaW5lIFJUX0dDX1RJTUVPVVQgKDMwMCpIWikKIAogc3RhdGljIGludCBpcF9ydF9tYXhfc2l6ZTsKLXN0YXRpYyBpbnQgaXBfcnRfZ2NfdGltZW91dAkJPSBSVF9HQ19USU1FT1VUOwotc3RhdGljIGludCBpcF9ydF9nY19pbnRlcnZhbAkJPSA2MCAqIEhaOwotc3RhdGljIGludCBpcF9ydF9nY19taW5faW50ZXJ2YWwJPSBIWiAvIDI7Ci1zdGF0aWMgaW50IGlwX3J0X3JlZGlyZWN0X251bWJlcgk9IDk7Ci1zdGF0aWMgaW50IGlwX3J0X3JlZGlyZWN0X2xvYWQJCT0gSFogLyA1MDsKLXN0YXRpYyBpbnQgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZQk9ICgoSFogLyA1MCkgPDwgKDkgKyAxKSk7Ci1zdGF0aWMgaW50IGlwX3J0X2Vycm9yX2Nvc3QJCT0gSFo7Ci1zdGF0aWMgaW50IGlwX3J0X2Vycm9yX2J1cnN0CQk9IDUgKiBIWjsKLXN0YXRpYyBpbnQgaXBfcnRfZ2NfZWxhc3RpY2l0eQkJPSA4Owotc3RhdGljIGludCBpcF9ydF9tdHVfZXhwaXJlcwkJPSAxMCAqIDYwICogSFo7Ci1zdGF0aWMgaW50IGlwX3J0X21pbl9wbXR1CQk9IDUxMiArIDIwICsgMjA7Ci1zdGF0aWMgaW50IGlwX3J0X21pbl9hZHZtc3MJCT0gMjU2Owotc3RhdGljIGludCBpcF9ydF9zZWNyZXRfaW50ZXJ2YWwJPSAxMCAqIDYwICogSFo7Ci0KLSNkZWZpbmUgUlRwcmludChhLi4uKQlwcmludGsoS0VSTl9ERUJVRyBhKQorc3RhdGljIGludCBpcF9ydF9nY190aW1lb3V0IF9fcmVhZF9tb3N0bHkJPSBSVF9HQ19USU1FT1VUOworc3RhdGljIGludCBpcF9ydF9nY19pbnRlcnZhbCBfX3JlYWRfbW9zdGx5CT0gNjAgKiBIWjsKK3N0YXRpYyBpbnQgaXBfcnRfZ2NfbWluX2ludGVydmFsIF9fcmVhZF9tb3N0bHkJPSBIWiAvIDI7CitzdGF0aWMgaW50IGlwX3J0X3JlZGlyZWN0X251bWJlciBfX3JlYWRfbW9zdGx5CT0gOTsKK3N0YXRpYyBpbnQgaXBfcnRfcmVkaXJlY3RfbG9hZCBfX3JlYWRfbW9zdGx5CT0gSFogLyA1MDsKK3N0YXRpYyBpbnQgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZSBfX3JlYWRfbW9zdGx5CT0gKChIWiAvIDUwKSA8PCAoOSArIDEpKTsKK3N0YXRpYyBpbnQgaXBfcnRfZXJyb3JfY29zdCBfX3JlYWRfbW9zdGx5CT0gSFo7CitzdGF0aWMgaW50IGlwX3J0X2Vycm9yX2J1cnN0IF9fcmVhZF9tb3N0bHkJPSA1ICogSFo7CitzdGF0aWMgaW50IGlwX3J0X2djX2VsYXN0aWNpdHkgX19yZWFkX21vc3RseQk9IDg7CitzdGF0aWMgaW50IGlwX3J0X210dV9leHBpcmVzIF9fcmVhZF9tb3N0bHkJPSAxMCAqIDYwICogSFo7CitzdGF0aWMgaW50IGlwX3J0X21pbl9wbXR1IF9fcmVhZF9tb3N0bHkJCT0gNTEyICsgMjAgKyAyMDsKK3N0YXRpYyBpbnQgaXBfcnRfbWluX2Fkdm1zcyBfX3JlYWRfbW9zdGx5CT0gMjU2Oworc3RhdGljIGludCBpcF9ydF9zZWNyZXRfaW50ZXJ2YWwgX19yZWFkX21vc3RseQk9IDEwICogNjAgKiBIWjsKIAogc3RhdGljIHZvaWQgcnRfd29ya2VyX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhleHBpcmVzX3dvcmssIHJ0X3dvcmtlcl9mdW5jKTsKQEAgLTI1Miw0MCArMjUwLDQxIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBydF9oYXNoX2J1Y2tldCAJKnJ0X2hhc2hfdGFibGU7Ci1zdGF0aWMgdW5zaWduZWQJCQlydF9oYXNoX21hc2s7Ci1zdGF0aWMgdW5zaWduZWQgaW50CQlydF9oYXNoX2xvZzsKLXN0YXRpYyBhdG9taWNfdAkJCXJ0X2dlbmlkOworc3RhdGljIHN0cnVjdCBydF9oYXNoX2J1Y2tldCAJKnJ0X2hhc2hfdGFibGUgX19yZWFkX21vc3RseTsKK3N0YXRpYyB1bnNpZ25lZAkJCXJ0X2hhc2hfbWFzayBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHVuc2lnbmVkIGludAkJcnRfaGFzaF9sb2cgIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgYXRvbWljX3QJCQlydF9nZW5pZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJ0X2NhY2hlX3N0YXQsIHJ0X2NhY2hlX3N0YXQpOwogI2RlZmluZSBSVF9DQUNIRV9TVEFUX0lOQyhmaWVsZCkgXAogCShfX3Jhd19nZXRfY3B1X3ZhcihydF9jYWNoZV9zdGF0KS5maWVsZCsrKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ0X2hhc2hfY29kZSh1MzIgZGFkZHIsIHUzMiBzYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJ0X2hhc2goX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsIGludCBpZHgpCiB7Ci0JcmV0dXJuIGpoYXNoXzJ3b3JkcyhkYWRkciwgc2FkZHIsIGF0b21pY19yZWFkKCZydF9nZW5pZCkpCisJcmV0dXJuIGpoYXNoXzN3b3JkcygoX19mb3JjZSB1MzIpKF9fYmUzMikoZGFkZHIpLAorCQkJICAgIChfX2ZvcmNlIHUzMikoX19iZTMyKShzYWRkciksCisJCQkgICAgaWR4LCBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpKQogCQkmIHJ0X2hhc2hfbWFzazsKIH0KIAotI2RlZmluZSBydF9oYXNoKGRhZGRyLCBzYWRkciwgaWR4KSBcCi0JcnRfaGFzaF9jb2RlKChfX2ZvcmNlIHUzMikoX19iZTMyKShkYWRkciksXAotCQkgICAgIChfX2ZvcmNlIHUzMikoX19iZTMyKShzYWRkcikgXiAoKGlkeCkgPDwgNSkpCi0KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RydWN0IHJ0X2NhY2hlX2l0ZXJfc3RhdGUgeworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKIAlpbnQgYnVja2V0OwogCWludCBnZW5pZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9jYWNoZV9nZXRfZmlyc3Qoc3RydWN0IHJ0X2NhY2hlX2l0ZXJfc3RhdGUgKnN0KQorc3RhdGljIHN0cnVjdCBydGFibGUgKnJ0X2NhY2hlX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKKwlzdHJ1Y3QgcnRfY2FjaGVfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CiAJc3RydWN0IHJ0YWJsZSAqciA9IE5VTEw7CiAKIAlmb3IgKHN0LT5idWNrZXQgPSBydF9oYXNoX21hc2s7IHN0LT5idWNrZXQgPj0gMDsgLS1zdC0+YnVja2V0KSB7CiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJciA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW3N0LT5idWNrZXRdLmNoYWluKTsKIAkJd2hpbGUgKHIpIHsKLQkJCWlmIChyLT5ydF9nZW5pZCA9PSBzdC0+Z2VuaWQpCisJCQlpZiAoZGV2X25ldChyLT51LmRzdC5kZXYpID09IHNlcV9maWxlX25ldChzZXEpICYmCisJCQkgICAgci0+cnRfZ2VuaWQgPT0gc3QtPmdlbmlkKQogCQkJCXJldHVybiByOwogCQkJciA9IHJjdV9kZXJlZmVyZW5jZShyLT51LmRzdC5ydF9uZXh0KTsKIAkJfQpAQCAtMjk0LDggKzI5MywxMCBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqcnRfY2FjaGVfZ2V0X25leHQoc3RydWN0IHJ0X2NhY2hlX2l0ZXJfc3RhdGUgKnN0LCBzdHJ1Y3QgcnRhYmxlICpyKQorc3RhdGljIHN0cnVjdCBydGFibGUgKl9fcnRfY2FjaGVfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkJCSAgc3RydWN0IHJ0YWJsZSAqcikKIHsKKwlzdHJ1Y3QgcnRfY2FjaGVfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CiAJciA9IHItPnUuZHN0LnJ0X25leHQ7CiAJd2hpbGUgKCFyKSB7CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwpAQCAtMzA3LDI1ICszMDgsMzQgQEAKIAlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHIpOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqcnRfY2FjaGVfZ2V0X2lkeChzdHJ1Y3QgcnRfY2FjaGVfaXRlcl9zdGF0ZSAqc3QsIGxvZmZfdCBwb3MpCitzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcnRfY2FjaGVfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkJCXN0cnVjdCBydGFibGUgKnIpCiB7Ci0Jc3RydWN0IHJ0YWJsZSAqciA9IHJ0X2NhY2hlX2dldF9maXJzdChzdCk7CisJc3RydWN0IHJ0X2NhY2hlX2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOworCXdoaWxlICgociA9IF9fcnRfY2FjaGVfZ2V0X25leHQoc2VxLCByKSkgIT0gTlVMTCkgeworCQlpZiAoZGV2X25ldChyLT51LmRzdC5kZXYpICE9IHNlcV9maWxlX25ldChzZXEpKQorCQkJY29udGludWU7CisJCWlmIChyLT5ydF9nZW5pZCA9PSBzdC0+Z2VuaWQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9jYWNoZV9nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBydGFibGUgKnIgPSBydF9jYWNoZV9nZXRfZmlyc3Qoc2VxKTsKIAogCWlmIChyKQotCQl3aGlsZSAocG9zICYmIChyID0gcnRfY2FjaGVfZ2V0X25leHQoc3QsIHIpKSkgewotCQkJaWYgKHItPnJ0X2dlbmlkICE9IHN0LT5nZW5pZCkKLQkJCQljb250aW51ZTsKKwkJd2hpbGUgKHBvcyAmJiAociA9IHJ0X2NhY2hlX2dldF9uZXh0KHNlcSwgcikpKQogCQkJLS1wb3M7Ci0JCX0KIAlyZXR1cm4gcG9zID8gTlVMTCA6IHI7CiB9CiAKIHN0YXRpYyB2b2lkICpydF9jYWNoZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBydF9jYWNoZV9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKLQogCWlmICgqcG9zKQotCQlyZXR1cm4gcnRfY2FjaGVfZ2V0X2lkeChzdCwgKnBvcyAtIDEpOworCQlyZXR1cm4gcnRfY2FjaGVfZ2V0X2lkeChzZXEsICpwb3MgLSAxKTsKIAlzdC0+Z2VuaWQgPSBhdG9taWNfcmVhZCgmcnRfZ2VuaWQpOwogCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CiB9CkBAIC0zMzMsMTIgKzM0MywxMSBAQAogc3RhdGljIHZvaWQgKnJ0X2NhY2hlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgcnRhYmxlICpyOwotCXN0cnVjdCBydF9jYWNoZV9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJciA9IHJ0X2NhY2hlX2dldF9maXJzdChzdCk7CisJCXIgPSBydF9jYWNoZV9nZXRfZmlyc3Qoc2VxKTsKIAllbHNlCi0JCXIgPSBydF9jYWNoZV9nZXRfbmV4dChzdCwgdik7CisJCXIgPSBydF9jYWNoZV9nZXRfbmV4dChzZXEsIHYpOwogCSsrKnBvczsKIAlyZXR1cm4gcjsKIH0KQEAgLTM5MCw3ICszOTksNyBAQAogCiBzdGF0aWMgaW50IHJ0X2NhY2hlX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZydF9jYWNoZV9zZXFfb3BzLAorCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZydF9jYWNoZV9zZXFfb3BzLAogCQkJc2l6ZW9mKHN0cnVjdCBydF9jYWNoZV9pdGVyX3N0YXRlKSk7CiB9CiAKQEAgLTM5OSw3ICs0MDgsNyBAQAogCS5vcGVuCSA9IHJ0X2NhY2hlX3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLAogCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKIApAQCAtNTMzLDcgKzU0Miw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIF9faW5pdCBpbnQgaXBfcnRfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcF9ydF9kb19wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwogCkBAIC01NDIsMTIgKzU1MSwxMSBAQAogCWlmICghcGRlKQogCQlnb3RvIGVycjE7CiAKLQlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeSgicnRfY2FjaGUiLCBTX0lSVUdPLCBuZXQtPnByb2NfbmV0X3N0YXQpOworCXBkZSA9IHByb2NfY3JlYXRlKCJydF9jYWNoZSIsIFNfSVJVR08sCisJCQkgIG5ldC0+cHJvY19uZXRfc3RhdCwgJnJ0X2NwdV9zZXFfZm9wcyk7CiAJaWYgKCFwZGUpCiAJCWdvdG8gZXJyMjsKIAotCXBkZS0+cHJvY19mb3BzID0gJnJ0X2NwdV9zZXFfZm9wczsKLQogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJcGRlID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgicnRfYWNjdCIsIDAsIG5ldC0+cHJvY19uZXQsCiAJCQlpcF9ydF9hY2N0X3JlYWQsIE5VTEwpOwpAQCAtNTY1LDI1ICs1NzMsNDMgQEAKIGVycjE6CiAJcmV0dXJuIC1FTk9NRU07CiB9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXBfcnRfZG9fcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeSgicnRfY2FjaGUiLCBuZXQtPnByb2NfbmV0X3N0YXQpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJydF9jYWNoZSIsIG5ldC0+cHJvY19uZXQpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJydF9hY2N0IiwgbmV0LT5wcm9jX25ldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfcnRfcHJvY19vcHMgX19uZXRfaW5pdGRhdGEgPSAgeworCS5pbml0ID0gaXBfcnRfZG9fcHJvY19pbml0LAorCS5leGl0ID0gaXBfcnRfZG9fcHJvY19leGl0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXBfcnRfcHJvY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3J0X3Byb2Nfb3BzKTsKK30KKwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGlwX3J0X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW5saW5lIGludCBpcF9ydF9wcm9jX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJ0X2ZyZWUoc3RydWN0IHJ0YWJsZSAqcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgcnRfZnJlZShzdHJ1Y3QgcnRhYmxlICpydCkKIHsKIAljYWxsX3JjdV9iaCgmcnQtPnUuZHN0LnJjdV9oZWFkLCBkc3RfcmN1X2ZyZWUpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJ0X2Ryb3Aoc3RydWN0IHJ0YWJsZSAqcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgcnRfZHJvcChzdHJ1Y3QgcnRhYmxlICpydCkKIHsKIAlpcF9ydF9wdXQocnQpOwogCWNhbGxfcmN1X2JoKCZydC0+dS5kc3QucmN1X2hlYWQsIGRzdF9yY3VfZnJlZSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBydF9mYXN0X2NsZWFuKHN0cnVjdCBydGFibGUgKnJ0aCkKK3N0YXRpYyBpbmxpbmUgaW50IHJ0X2Zhc3RfY2xlYW4oc3RydWN0IHJ0YWJsZSAqcnRoKQogewogCS8qIEtpbGwgYnJvYWRjYXN0L211bHRpY2FzdCBlbnRyaWVzIHZlcnkgYWdncmVzaXZlbHksIGlmIHRoZXkKIAkgICBjb2xsaWRlIGluIGhhc2ggdGFibGUgd2l0aCBtb3JlIHVzZWZ1bCBlbnRyaWVzICovCkBAIC01OTEsNyArNjE3LDcgQEAKIAkJcnRoLT5mbC5paWYgJiYgcnRoLT51LmRzdC5ydF9uZXh0OwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcnRfdmFsdWFibGUoc3RydWN0IHJ0YWJsZSAqcnRoKQorc3RhdGljIGlubGluZSBpbnQgcnRfdmFsdWFibGUoc3RydWN0IHJ0YWJsZSAqcnRoKQogewogCXJldHVybiAocnRoLT5ydF9mbGFncyAmIChSVENGX1JFRElSRUNURUQgfCBSVENGX05PVElGWSkpIHx8CiAJCXJ0aC0+dS5kc3QuZXhwaXJlczsKQEAgLTY1Myw3ICs2NzksNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBjb21wYXJlX25ldG5zKHN0cnVjdCBydGFibGUgKnJ0MSwgc3RydWN0IHJ0YWJsZSAqcnQyKQogewotCXJldHVybiBydDEtPnUuZHN0LmRldi0+bmRfbmV0ID09IHJ0Mi0+dS5kc3QuZGV2LT5uZF9uZXQ7CisJcmV0dXJuIGRldl9uZXQocnQxLT51LmRzdC5kZXYpID09IGRldl9uZXQocnQyLT51LmRzdC5kZXYpOwogfQogCiAvKgpAQCAtMTAzMywxMCArMTA1OSwxMCBAQAogI2lmIFJUX0NBQ0hFX0RFQlVHID49IDIKIAlpZiAocnQtPnUuZHN0LnJ0X25leHQpIHsKIAkJc3RydWN0IHJ0YWJsZSAqdHJ0OwotCQlwcmludGsoS0VSTl9ERUJVRyAicnRfY2FjaGUgQCUwMng6ICV1LiV1LiV1LiV1IiwgaGFzaCwKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJ0X2NhY2hlIEAlMDJ4OiAiIE5JUFFVQURfRk1ULCBoYXNoLAogCQkgICAgICAgTklQUVVBRChydC0+cnRfZHN0KSk7CiAJCWZvciAodHJ0ID0gcnQtPnUuZHN0LnJ0X25leHQ7IHRydDsgdHJ0ID0gdHJ0LT51LmRzdC5ydF9uZXh0KQotCQkJcHJpbnRrKCIgLiAldS4ldS4ldS4ldSIsIE5JUFFVQUQodHJ0LT5ydF9kc3QpKTsKKwkJCXByaW50aygiIC4gIiBOSVBRVUFEX0ZNVCwgTklQUVVBRCh0cnQtPnJ0X2RzdCkpOwogCQlwcmludGsoIlxuIik7CiAJfQogI2VuZGlmCkBAIC0xMTMyLDEwICsxMTU4LDEyIEBACiAJX19iZTMyICBza2V5c1syXSA9IHsgc2FkZHIsIDAgfTsKIAlpbnQgIGlrZXlzWzJdID0geyBkZXYtPmlmaW5kZXgsIDAgfTsKIAlzdHJ1Y3QgbmV0ZXZlbnRfcmVkaXJlY3QgbmV0ZXZlbnQ7CisJc3RydWN0IG5ldCAqbmV0OwogCiAJaWYgKCFpbl9kZXYpCiAJCXJldHVybjsKIAorCW5ldCA9IGRldl9uZXQoZGV2KTsKIAlpZiAobmV3X2d3ID09IG9sZF9ndyB8fCAhSU5fREVWX1JYX1JFRElSRUNUUyhpbl9kZXYpCiAJICAgIHx8IGlwdjRfaXNfbXVsdGljYXN0KG5ld19ndykgfHwgaXB2NF9pc19sYmNhc3QobmV3X2d3KQogCSAgICB8fCBpcHY0X2lzX3plcm9uZXQobmV3X2d3KSkKQEAgLTExNDcsNyArMTE3NSw3IEBACiAJCWlmIChJTl9ERVZfU0VDX1JFRElSRUNUUyhpbl9kZXYpICYmIGlwX2ZpYl9jaGVja19kZWZhdWx0KG5ld19ndywgZGV2KSkKIAkJCWdvdG8gcmVqZWN0X3JlZGlyZWN0OwogCX0gZWxzZSB7Ci0JCWlmIChpbmV0X2FkZHJfdHlwZSgmaW5pdF9uZXQsIG5ld19ndykgIT0gUlROX1VOSUNBU1QpCisJCWlmIChpbmV0X2FkZHJfdHlwZShuZXQsIG5ld19ndykgIT0gUlROX1VOSUNBU1QpCiAJCQlnb3RvIHJlamVjdF9yZWRpcmVjdDsKIAl9CiAKQEAgLTExNjUsNyArMTE5Myw4IEBACiAJCQkJICAgIHJ0aC0+ZmwuZmw0X3NyYyAhPSBza2V5c1tpXSB8fAogCQkJCSAgICBydGgtPmZsLm9pZiAhPSBpa2V5c1trXSB8fAogCQkJCSAgICBydGgtPmZsLmlpZiAhPSAwIHx8Ci0JCQkJICAgIHJ0aC0+cnRfZ2VuaWQgIT0gYXRvbWljX3JlYWQoJnJ0X2dlbmlkKSkgeworCQkJCSAgICBydGgtPnJ0X2dlbmlkICE9IGF0b21pY19yZWFkKCZydF9nZW5pZCkgfHwKKwkJCQkgICAgIW5ldF9lcShkZXZfbmV0KHJ0aC0+dS5kc3QuZGV2KSwgbmV0KSkgewogCQkJCQlydGhwID0gJnJ0aC0+dS5kc3QucnRfbmV4dDsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtMTI0Niw5ICsxMjc1LDkgQEAKIHJlamVjdF9yZWRpcmVjdDoKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRQogCWlmIChJTl9ERVZfTE9HX01BUlRJQU5TKGluX2RldikgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPICJSZWRpcmVjdCBmcm9tICV1LiV1LiV1LiV1IG9uICVzIGFib3V0ICIKLQkJCSIldS4ldS4ldS4ldSBpZ25vcmVkLlxuIgotCQkJIiAgQWR2aXNlZCBwYXRoID0gJXUuJXUuJXUuJXUgLT4gJXUuJXUuJXUuJXVcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIlJlZGlyZWN0IGZyb20gIiBOSVBRVUFEX0ZNVCAiIG9uICVzIGFib3V0ICIKKwkJCU5JUFFVQURfRk1UICIgaWdub3JlZC5cbiIKKwkJCSIgIEFkdmlzZWQgcGF0aCA9ICIgTklQUVVBRF9GTVQgIiAtPiAiIE5JUFFVQURfRk1UICJcbiIsCiAJCSAgICAgICBOSVBRVUFEKG9sZF9ndyksIGRldi0+bmFtZSwgTklQUVVBRChuZXdfZ3cpLAogCQkgICAgICAgTklQUVVBRChzYWRkciksIE5JUFFVQUQoZGFkZHIpKTsKICNlbmRpZgpAQCAtMTI1Nyw3ICsxMjg2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfbmVnYXRpdmVfYWR2aWNlKHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilkc3Q7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWRzdDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpyZXQgPSBkc3Q7CiAKIAlpZiAocnQpIHsKQEAgLTEyNzAsNyArMTI5OSw3IEBACiAJCQkJCQlydC0+Zmwub2lmKTsKICNpZiBSVF9DQUNIRV9ERUJVRyA+PSAxCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiaXB2NF9uZWdhdGl2ZV9hZHZpY2U6IHJlZGlyZWN0IHRvICIKLQkJCQkJICAiJXUuJXUuJXUuJXUvJTAyeCBkcm9wcGVkXG4iLAorCQkJCQkgIE5JUFFVQURfRk1UICIvJTAyeCBkcm9wcGVkXG4iLAogCQkJCU5JUFFVQUQocnQtPnJ0X2RzdCksIHJ0LT5mbC5mbDRfdG9zKTsKICNlbmRpZgogCQkJcnRfZGVsKGhhc2gsIHJ0KTsKQEAgLTEyOTgsNyArMTMyNyw3IEBACiAKIHZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUqKXNrYi0+ZHN0OworCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChydC0+dS5kc3QuZGV2KTsKIAogCWlmICghaW5fZGV2KQpAQCAtMTMzNSw4ICsxMzY0LDggQEAKIAkJaWYgKElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KSAmJgogCQkgICAgcnQtPnUuZHN0LnJhdGVfdG9rZW5zID09IGlwX3J0X3JlZGlyZWN0X251bWJlciAmJgogCQkgICAgbmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaG9zdCAldS4ldS4ldS4ldS9pZiVkIGlnbm9yZXMgIgotCQkJCSJyZWRpcmVjdHMgZm9yICV1LiV1LiV1LiV1IHRvICV1LiV1LiV1LiV1LlxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhvc3QgIiBOSVBRVUFEX0ZNVCAiL2lmJWQgaWdub3JlcyAiCisJCQkJInJlZGlyZWN0cyBmb3IgIiBOSVBRVUFEX0ZNVCAiIHRvICIgTklQUVVBRF9GTVQgIi5cbiIsCiAJCQkJTklQUVVBRChydC0+cnRfc3JjKSwgcnQtPnJ0X2lpZiwKIAkJCQlOSVBRVUFEKHJ0LT5ydF9kc3QpLCBOSVBRVUFEKHJ0LT5ydF9nYXRld2F5KSk7CiAjZW5kaWYKQEAgLTEzNDcsNyArMTM3Niw3IEBACiAKIHN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCXVuc2lnbmVkIGxvbmcgbm93OwogCWludCBjb2RlOwogCkBAIC0xMzg5LDcgKzE0MTgsNyBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG10dV9wbGF0ZWF1W10gPQogezMyMDAwLCAxNzkxNCwgODE2NiwgNDM1MiwgMjAwMiwgMTQ5MiwgNTc2LCAyOTYsIDIxNiwgMTI4IH07CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGd1ZXNzX210dSh1bnNpZ25lZCBzaG9ydCBvbGRfbXR1KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBndWVzc19tdHUodW5zaWduZWQgc2hvcnQgb2xkX210dSkKIHsKIAlpbnQgaTsKIApAQCAtMTQyNCw3ICsxNDUzLDcgQEAKIAkJCSAgICBydGgtPnJ0X3NyYyAgPT0gaXBoLT5zYWRkciAmJgogCQkJICAgIHJ0aC0+ZmwuaWlmID09IDAgJiYKIAkJCSAgICAhKGRzdF9tZXRyaWNfbG9ja2VkKCZydGgtPnUuZHN0LCBSVEFYX01UVSkpICYmCi0JCQkgICAgcnRoLT51LmRzdC5kZXYtPm5kX25ldCA9PSBuZXQgJiYKKwkJCSAgICBuZXRfZXEoZGV2X25ldChydGgtPnUuZHN0LmRldiksIG5ldCkgJiYKIAkJCSAgICBydGgtPnJ0X2dlbmlkID09IGF0b21pY19yZWFkKCZydF9nZW5pZCkpIHsKIAkJCQl1bnNpZ25lZCBzaG9ydCBtdHUgPSBuZXdfbXR1OwogCkBAIC0xNTAwLDkgKzE1MjksOSBAQAogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikgZHN0OwogCXN0cnVjdCBpbl9kZXZpY2UgKmlkZXYgPSBydC0+aWRldjsKLQlpZiAoZGV2ICE9IGRldi0+bmRfbmV0LT5sb29wYmFja19kZXYgJiYgaWRldiAmJiBpZGV2LT5kZXYgPT0gZGV2KSB7CisJaWYgKGRldiAhPSBkZXZfbmV0KGRldiktPmxvb3BiYWNrX2RldiAmJiBpZGV2ICYmIGlkZXYtPmRldiA9PSBkZXYpIHsKIAkJc3RydWN0IGluX2RldmljZSAqbG9vcGJhY2tfaWRldiA9Ci0JCQlpbl9kZXZfZ2V0KGRldi0+bmRfbmV0LT5sb29wYmFja19kZXYpOworCQkJaW5fZGV2X2dldChkZXZfbmV0KGRldiktPmxvb3BiYWNrX2Rldik7CiAJCWlmIChsb29wYmFja19pZGV2KSB7CiAJCQlydC0+aWRldiA9IGxvb3BiYWNrX2lkZXY7CiAJCQlpbl9kZXZfcHV0KGlkZXYpOwpAQCAtMTUxNiwxNCArMTU0NSwxNCBAQAogCiAJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfSE9TVF9VTlJFQUNILCAwKTsKIAotCXJ0ID0gKHN0cnVjdCBydGFibGUgKikgc2tiLT5kc3Q7CisJcnQgPSBza2ItPnJ0YWJsZTsKIAlpZiAocnQpCiAJCWRzdF9zZXRfZXhwaXJlcygmcnQtPnUuZHN0LCAwKTsKIH0KIAogc3RhdGljIGludCBpcF9ydF9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlwcmludGsoS0VSTl9ERUJVRyAiaXBfcnRfYnVnOiAldS4ldS4ldS4ldSAtPiAldS4ldS4ldS4ldSwgJXNcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgImlwX3J0X2J1ZzogIiBOSVBRVUFEX0ZNVCAiIC0+ICIgTklQUVVBRF9GTVQgIiwgJXNcbiIsCiAJCU5JUFFVQUQoaXBfaGRyKHNrYiktPnNhZGRyKSwgTklQUVVBRChpcF9oZHIoc2tiKS0+ZGFkZHIpLAogCQlza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIj8iKTsKIAlrZnJlZV9za2Ioc2tiKTsKQEAgLTE1NDYsNyArMTU3NSw3IEBACiAKIAlpZiAocnQtPmZsLmlpZiA9PSAwKQogCQlzcmMgPSBydC0+cnRfc3JjOwotCWVsc2UgaWYgKGZpYl9sb29rdXAocnQtPnUuZHN0LmRldi0+bmRfbmV0LCAmcnQtPmZsLCAmcmVzKSA9PSAwKSB7CisJZWxzZSBpZiAoZmliX2xvb2t1cChkZXZfbmV0KHJ0LT51LmRzdC5kZXYpLCAmcnQtPmZsLCAmcmVzKSA9PSAwKSB7CiAJCXNyYyA9IEZJQl9SRVNfUFJFRlNSQyhyZXMpOwogCQlmaWJfcmVzX3B1dCgmcmVzKTsKIAl9IGVsc2UKQEAgLTE2NzYsNyArMTcwNSw3IEBACiAKIAlpbl9kZXZfcHV0KGluX2Rldik7CiAJaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNhZGRyLCBkZXYtPmlmaW5kZXgpOwotCXJldHVybiBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIChzdHJ1Y3QgcnRhYmxlKiopICZza2ItPmRzdCk7CisJcmV0dXJuIHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgJnNrYi0+cnRhYmxlKTsKIAogZV9ub2J1ZnM6CiAJaW5fZGV2X3B1dChpbl9kZXYpOwpAQCAtMTcwMSw4ICsxNzMwLDggQEAKIAkJICoJUkZDMTgxMiByZWNvbW1lbmRhdGlvbiwgaWYgc291cmNlIGlzIG1hcnRpYW4sCiAJCSAqCXRoZSBvbmx5IGhpbnQgaXMgTUFDIGhlYWRlci4KIAkJICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1hcnRpYW4gc291cmNlICV1LiV1LiV1LiV1IGZyb20gIgotCQkJIiV1LiV1LiV1LiV1LCBvbiBkZXYgJXNcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1hcnRpYW4gc291cmNlICIgTklQUVVBRF9GTVQgIiBmcm9tICIKKwkJCU5JUFFVQURfRk1UIiwgb24gZGV2ICVzXG4iLAogCQkJTklQUVVBRChkYWRkciksIE5JUFFVQUQoc2FkZHIpLCBkZXYtPm5hbWUpOwogCQlpZiAoZGV2LT5oYXJkX2hlYWRlcl9sZW4gJiYgc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKSB7CiAJCQlpbnQgaTsKQEAgLTE3MTksMTEgKzE3NDgsMTEgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX21rcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBmaWJfcmVzdWx0KiByZXMsCi0JCQkJICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsCi0JCQkJICBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwgdTMyIHRvcywKLQkJCQkgIHN0cnVjdCBydGFibGUgKipyZXN1bHQpCitzdGF0aWMgaW50IF9fbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcywKKwkJCSAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwKKwkJCSAgIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLCB1MzIgdG9zLAorCQkJICAgc3RydWN0IHJ0YWJsZSAqKnJlc3VsdCkKIHsKIAogCXN0cnVjdCBydGFibGUgKnJ0aDsKQEAgLTE4MTUsMTEgKzE4NDQsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpcF9ta3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgc3RydWN0IGZpYl9yZXN1bHQqIHJlcywKLQkJCQkgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLAotCQkJCSAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwKLQkJCQkgICBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwgdTMyIHRvcykKK3N0YXRpYyBpbnQgaXBfbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsCisJCQkgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKKwkJCSAgICBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsCisJCQkgICAgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsIHUzMiB0b3MpCiB7CiAJc3RydWN0IHJ0YWJsZSogcnRoID0gTlVMTDsKIAlpbnQgZXJyOwpAQCAtMTgzNyw3ICsxODY2LDcgQEAKIAogCS8qIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSAqLwogCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZmwtPmlpZik7Ci0JcmV0dXJuIHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgKHN0cnVjdCBydGFibGUqKikmc2tiLT5kc3QpOworCXJldHVybiBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsICZza2ItPnJ0YWJsZSk7CiB9CiAKIC8qCkBAIC0xODcwLDcgKzE4OTksNyBAQAogCV9fYmUzMgkJc3BlY19kc3Q7CiAJaW50CQllcnIgPSAtRUlOVkFMOwogCWludAkJZnJlZV9yZXMgPSAwOwotCXN0cnVjdCBuZXQgICAgKiBuZXQgPSBkZXYtPm5kX25ldDsKKwlzdHJ1Y3QgbmV0ICAgICogbmV0ID0gZGV2X25ldChkZXYpOwogCiAJLyogSVAgb24gdGhpcyBkZXZpY2UgaXMgZGlzYWJsZWQuICovCiAKQEAgLTE5OTMsNyArMjAyMiw3IEBACiAJfQogCXJ0aC0+cnRfdHlwZQk9IHJlcy50eXBlOwogCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZmwuaWlmKTsKLQllcnIgPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIChzdHJ1Y3QgcnRhYmxlKiopJnNrYi0+ZHN0KTsKKwllcnIgPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsICZza2ItPnJ0YWJsZSk7CiAJZ290byBkb25lOwogCiBub19yb3V0ZToKQEAgLTIwMTEsOCArMjA0MCw4IEBACiAJUlRfQ0FDSEVfU1RBVF9JTkMoaW5fbWFydGlhbl9kc3QpOwogI2lmZGVmIENPTkZJR19JUF9ST1VURV9WRVJCT1NFCiAJaWYgKElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KSAmJiBuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1hcnRpYW4gZGVzdGluYXRpb24gJXUuJXUuJXUuJXUgZnJvbSAiCi0JCQkiJXUuJXUuJXUuJXUsIGRldiAlc1xuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibWFydGlhbiBkZXN0aW5hdGlvbiAiIE5JUFFVQURfRk1UICIgZnJvbSAiCisJCQlOSVBRVUFEX0ZNVCAiLCBkZXYgJXNcbiIsCiAJCQlOSVBRVUFEKGRhZGRyKSwgTklQUVVBRChzYWRkciksIGRldi0+bmFtZSk7CiAjZW5kaWYKIApAQCAtMjA0MSwyNSArMjA3MCwyNSBAQAogCWludCBpaWYgPSBkZXYtPmlmaW5kZXg7CiAJc3RydWN0IG5ldCAqbmV0OwogCi0JbmV0ID0gZGV2LT5uZF9uZXQ7CisJbmV0ID0gZGV2X25ldChkZXYpOwogCXRvcyAmPSBJUFRPU19SVF9NQVNLOwogCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgaWlmKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnRoOwogCSAgICAgcnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0aC0+dS5kc3QucnRfbmV4dCkpIHsKLQkJaWYgKHJ0aC0+ZmwuZmw0X2RzdCA9PSBkYWRkciAmJgotCQkgICAgcnRoLT5mbC5mbDRfc3JjID09IHNhZGRyICYmCi0JCSAgICBydGgtPmZsLmlpZiA9PSBpaWYgJiYKLQkJICAgIHJ0aC0+Zmwub2lmID09IDAgJiYKKwkJaWYgKCgocnRoLT5mbC5mbDRfZHN0IF4gZGFkZHIpIHwKKwkJICAgICAocnRoLT5mbC5mbDRfc3JjIF4gc2FkZHIpIHwKKwkJICAgICAocnRoLT5mbC5paWYgXiBpaWYpIHwKKwkJICAgICBydGgtPmZsLm9pZiB8CisJCSAgICAgKHJ0aC0+ZmwuZmw0X3RvcyBeIHRvcykpID09IDAgJiYKIAkJICAgIHJ0aC0+ZmwubWFyayA9PSBza2ItPm1hcmsgJiYKLQkJICAgIHJ0aC0+ZmwuZmw0X3RvcyA9PSB0b3MgJiYKLQkJICAgIHJ0aC0+dS5kc3QuZGV2LT5uZF9uZXQgPT0gbmV0ICYmCisJCSAgICBuZXRfZXEoZGV2X25ldChydGgtPnUuZHN0LmRldiksIG5ldCkgJiYKIAkJICAgIHJ0aC0+cnRfZ2VuaWQgPT0gYXRvbWljX3JlYWQoJnJ0X2dlbmlkKSkgewogCQkJZHN0X3VzZSgmcnRoLT51LmRzdCwgamlmZmllcyk7CiAJCQlSVF9DQUNIRV9TVEFUX0lOQyhpbl9oaXQpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlza2ItPmRzdCA9IChzdHJ1Y3QgZHN0X2VudHJ5KilydGg7CisJCQlza2ItPnJ0YWJsZSA9IHJ0aDsKIAkJCXJldHVybiAwOwogCQl9CiAJCVJUX0NBQ0hFX1NUQVRfSU5DKGluX2hsaXN0X3NlYXJjaCk7CkBAIC0yMTAxLDEyICsyMTMwLDEyIEBACiAJcmV0dXJuIGlwX3JvdXRlX2lucHV0X3Nsb3coc2tiLCBkYWRkciwgc2FkZHIsIHRvcywgZGV2KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19ta3JvdXRlX291dHB1dChzdHJ1Y3QgcnRhYmxlICoqcmVzdWx0LAotCQkJCSAgIHN0cnVjdCBmaWJfcmVzdWx0KiByZXMsCi0JCQkJICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKm9sZGZscCwKLQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X291dCwKLQkJCQkgICB1bnNpZ25lZCBmbGFncykKK3N0YXRpYyBpbnQgX19ta3JvdXRlX291dHB1dChzdHJ1Y3QgcnRhYmxlICoqcmVzdWx0LAorCQkJICAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsCisJCQkgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKm9sZGZscCwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X291dCwKKwkJCSAgICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwpAQCAtMjIyMSwxMiArMjI1MCwxMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlwX21rcm91dGVfb3V0cHV0KHN0cnVjdCBydGFibGUgKipycCwKLQkJCQkgICAgc3RydWN0IGZpYl9yZXN1bHQqIHJlcywKLQkJCQkgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGZsb3dpICpvbGRmbHAsCi0JCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfb3V0LAotCQkJCSAgICB1bnNpZ25lZCBmbGFncykKK3N0YXRpYyBpbnQgaXBfbWtyb3V0ZV9vdXRwdXQoc3RydWN0IHJ0YWJsZSAqKnJwLAorCQkJICAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKm9sZGZscCwKKwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldl9vdXQsCisJCQkgICAgIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBydGFibGUgKnJ0aCA9IE5VTEw7CiAJaW50IGVyciA9IF9fbWtyb3V0ZV9vdXRwdXQoJnJ0aCwgcmVzLCBmbCwgb2xkZmxwLCBkZXZfb3V0LCBmbGFncyk7CkBAIC0yNDU2LDcgKzI0ODUsNyBAQAogCQkgICAgcnRoLT5mbC5tYXJrID09IGZscC0+bWFyayAmJgogCQkgICAgISgocnRoLT5mbC5mbDRfdG9zIF4gZmxwLT5mbDRfdG9zKSAmCiAJCQkgICAgKElQVE9TX1JUX01BU0sgfCBSVE9fT05MSU5LKSkgJiYKLQkJICAgIHJ0aC0+dS5kc3QuZGV2LT5uZF9uZXQgPT0gbmV0ICYmCisJCSAgICBuZXRfZXEoZGV2X25ldChydGgtPnUuZHN0LmRldiksIG5ldCkgJiYKIAkJICAgIHJ0aC0+cnRfZ2VuaWQgPT0gYXRvbWljX3JlYWQoJnJ0X2dlbmlkKSkgewogCQkJZHN0X3VzZSgmcnRoLT51LmRzdCwgamlmZmllcyk7CiAJCQlSVF9DQUNIRV9TVEFUX0lOQyhvdXRfaGl0KTsKQEAgLTI0ODgsNyArMjUxNyw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgaXB2NF9kc3RfYmxhY2tob2xlKHN0cnVjdCBydGFibGUgKipycCwgc3RydWN0IGZsb3dpICpmbHAsIHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbnQgaXB2NF9kc3RfYmxhY2tob2xlKHN0cnVjdCBydGFibGUgKipycCwgc3RydWN0IGZsb3dpICpmbHApCiB7CiAJc3RydWN0IHJ0YWJsZSAqb3J0ID0gKnJwOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikKQEAgLTI1NDgsNyArMjU3Nyw3IEBACiAJCWVyciA9IF9feGZybV9sb29rdXAoKHN0cnVjdCBkc3RfZW50cnkgKiopcnAsIGZscCwgc2ssCiAJCQkJICAgIGZsYWdzID8gWEZSTV9MT09LVVBfV0FJVCA6IDApOwogCQlpZiAoZXJyID09IC1FUkVNT1RFKQotCQkJZXJyID0gaXB2NF9kc3RfYmxhY2tob2xlKHJwLCBmbHAsIHNrKTsKKwkJCWVyciA9IGlwdjRfZHN0X2JsYWNraG9sZShycCwgZmxwKTsKIAogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTI1NjYsNyArMjU5NSw3IEBACiBzdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCiAJCQlpbnQgbm93YWl0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKIAlzdHJ1Y3QgcnRtc2cgKnI7CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CiAJbG9uZyBleHBpcmVzOwpAQCAtMjY1OSw3ICsyNjg4LDcgQEAKIAogc3RhdGljIGludCBpbmV0X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIqIG5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IGluX3NrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChpbl9za2ItPnNrKTsKIAlzdHJ1Y3QgcnRtc2cgKnJ0bTsKIAlzdHJ1Y3QgbmxhdHRyICp0YltSVEFfTUFYKzFdOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKQEAgLTI2NjksOSArMjY5OCw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JaWYgKG5ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKnJ0bSksIHRiLCBSVEFfTUFYLCBydG1faXB2NF9wb2xpY3kpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm91dDsKQEAgLTI3MDEsNyArMjcyNyw3IEBACiAJaWYgKGlpZikgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlpZik7CisJCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGlpZik7CiAJCWlmIChkZXYgPT0gTlVMTCkgewogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyb3V0X2ZyZWU7CkBAIC0yNzEzLDcgKzI3MzksNyBAQAogCQllcnIgPSBpcF9yb3V0ZV9pbnB1dChza2IsIGRzdCwgc3JjLCBydG0tPnJ0bV90b3MsIGRldik7CiAJCWxvY2FsX2JoX2VuYWJsZSgpOwogCi0JCXJ0ID0gKHN0cnVjdCBydGFibGUqKSBza2ItPmRzdDsKKwkJcnQgPSBza2ItPnJ0YWJsZTsKIAkJaWYgKGVyciA9PSAwICYmIHJ0LT51LmRzdC5lcnJvcikKIAkJCWVyciA9IC1ydC0+dS5kc3QuZXJyb3I7CiAJfSBlbHNlIHsKQEAgLTI3MjcsMjIgKzI3NTMsMjIgQEAKIAkJCX0sCiAJCQkub2lmID0gdGJbUlRBX09JRl0gPyBubGFfZ2V0X3UzMih0YltSVEFfT0lGXSkgOiAwLAogCQl9OwotCQllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpOworCQllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpOwogCX0KIAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3V0X2ZyZWU7CiAKLQlza2ItPmRzdCA9ICZydC0+dS5kc3Q7CisJc2tiLT5ydGFibGUgPSBydDsKIAlpZiAocnRtLT5ydG1fZmxhZ3MgJiBSVE1fRl9OT1RJRlkpCiAJCXJ0LT5ydF9mbGFncyB8PSBSVENGX05PVElGWTsKIAogCWVyciA9IHJ0X2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQsIG5saC0+bmxtc2dfc2VxLAotCQkJCVJUTV9ORVdST1VURSwgMCwgMCk7CisJCQkgICBSVE1fTkVXUk9VVEUsIDAsIDApOwogCWlmIChlcnIgPD0gMCkKIAkJZ290byBlcnJvdXRfZnJlZTsKIAotCWVyciA9IHJ0bmxfdW5pY2FzdChza2IsICZpbml0X25ldCwgTkVUTElOS19DQihpbl9za2IpLnBpZCk7CisJZXJyID0gcnRubF91bmljYXN0KHNrYiwgbmV0LCBORVRMSU5LX0NCKGluX3NrYikucGlkKTsKIGVycm91dDoKIAlyZXR1cm4gZXJyOwogCkBAIC0yNzU2LDYgKzI3ODIsOSBAQAogCXN0cnVjdCBydGFibGUgKnJ0OwogCWludCBoLCBzX2g7CiAJaW50IGlkeCwgc19pZHg7CisJc3RydWN0IG5ldCAqbmV0OworCisJbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAKIAlzX2ggPSBjYi0+YXJnc1swXTsKIAlpZiAoc19oIDwgMCkKQEAgLTI3NjUsNyArMjc5NCw3IEBACiAJCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAkJZm9yIChydCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsgcnQ7CiAJCSAgICAgcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUuZHN0LnJ0X25leHQpLCBpZHgrKykgewotCQkJaWYgKGlkeCA8IHNfaWR4KQorCQkJaWYgKCFuZXRfZXEoZGV2X25ldChydC0+dS5kc3QuZGV2KSwgbmV0KSB8fCBpZHggPCBzX2lkeCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChydC0+cnRfZ2VuaWQgIT0gYXRvbWljX3JlYWQoJnJ0X2dlbmlkKSkKIAkJCQljb250aW51ZTsKQEAgLTMwMjksNyArMzA1OCw5IEBACiAJZGV2aW5ldF9pbml0KCk7CiAJaXBfZmliX2luaXQoKTsKIAotCXNldHVwX3RpbWVyKCZydF9zZWNyZXRfdGltZXIsIHJ0X3NlY3JldF9yZWJ1aWxkLCAwKTsKKwlydF9zZWNyZXRfdGltZXIuZnVuY3Rpb24gPSBydF9zZWNyZXRfcmVidWlsZDsKKwlydF9zZWNyZXRfdGltZXIuZGF0YSA9IDA7CisJaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZydF9zZWNyZXRfdGltZXIpOwogCiAJLyogQWxsIHRoZSB0aW1lcnMsIHN0YXJ0ZWQgYXQgc3lzdGVtIHN0YXJ0dXAgdGVuZAogCSAgIHRvIHN5bmNocm9uaXplLiBQZXJ0dXJiIGl0IGEgYml0LgpAQCAtMzA0MSw3ICszMDcyLDcgQEAKIAkJaXBfcnRfc2VjcmV0X2ludGVydmFsOwogCWFkZF90aW1lcigmcnRfc2VjcmV0X3RpbWVyKTsKIAotCWlmIChpcF9ydF9wcm9jX2luaXQoJmluaXRfbmV0KSkKKwlpZiAoaXBfcnRfcHJvY19pbml0KCkpCiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSByb3V0ZSBwcm9jIGZpbGVzXG4iKTsKICNpZmRlZiBDT05GSUdfWEZSTQogCXhmcm1faW5pdCgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3luY29va2llcy5jIGIvbmV0L2lwdjQvc3luY29va2llcy5jCmluZGV4IGY0NzBmZTQuLjczYmE5ODkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYworKysgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKQEAgLTEwLDggKzEwLDYgQEAKICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiAgJElkOiBzeW5jb29raWVzLmMsdiAxLjE4IDIwMDIvMDIvMDEgMjI6MDE6MDQgZGF2ZW0gRXhwICQKLSAqCi0gKiAgTWlzc2luZzogSVB2NiBzdXBwb3J0LgogICovCiAKICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KQEAgLTIxLDI2ICsxOSwzMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIAorLyogVGltZXN0YW1wczogbG93ZXN0IDkgYml0cyBzdG9yZSBUQ1Agb3B0aW9ucyAqLworI2RlZmluZSBUU0JJVFMgOQorI2RlZmluZSBUU01BU0sgKCgoX191MzIpMSA8PCBUU0JJVFMpIC0gMSkKKwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX3N5bmNvb2tpZXM7CiAKLXN0YXRpYyBfX3UzMiBzeW5jb29raWVfc2VjcmV0WzJdWzE2LTMrU0hBX0RJR0VTVF9XT1JEU107CitfX3UzMiBzeW5jb29raWVfc2VjcmV0WzJdWzE2LTQrU0hBX0RJR0VTVF9XT1JEU107CitFWFBPUlRfU1lNQk9MKHN5bmNvb2tpZV9zZWNyZXQpOwogCiBzdGF0aWMgX19pbml0IGludCBpbml0X3N5bmNvb2tpZXModm9pZCkKIHsKIAlnZXRfcmFuZG9tX2J5dGVzKHN5bmNvb2tpZV9zZWNyZXQsIHNpemVvZihzeW5jb29raWVfc2VjcmV0KSk7CiAJcmV0dXJuIDA7CiB9Ci1tb2R1bGVfaW5pdChpbml0X3N5bmNvb2tpZXMpOworX19pbml0Y2FsbChpbml0X3N5bmNvb2tpZXMpOwogCiAjZGVmaW5lIENPT0tJRUJJVFMgMjQJLyogVXBwZXIgYml0cyBzdG9yZSBjb3VudCAqLwogI2RlZmluZSBDT09LSUVNQVNLICgoKF9fdTMyKTEgPDwgQ09PS0lFQklUUykgLSAxKQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoX191MzIsIGNvb2tpZV9zY3JhdGNoKVsxNiArIDUgKyBTSEFfV09SS1NQQUNFX1dPUkRTXTsKKwogc3RhdGljIHUzMiBjb29raWVfaGFzaChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsCiAJCSAgICAgICB1MzIgY291bnQsIGludCBjKQogewotCV9fdTMyIHRtcFsxNiArIDUgKyBTSEFfV09SS1NQQUNFX1dPUkRTXTsKKwlfX3UzMiAqdG1wID0gX19nZXRfY3B1X3Zhcihjb29raWVfc2NyYXRjaCk7CiAKLQltZW1jcHkodG1wICsgMywgc3luY29va2llX3NlY3JldFtjXSwgc2l6ZW9mKHN5bmNvb2tpZV9zZWNyZXRbY10pKTsKKwltZW1jcHkodG1wICsgNCwgc3luY29va2llX3NlY3JldFtjXSwgc2l6ZW9mKHN5bmNvb2tpZV9zZWNyZXRbY10pKTsKIAl0bXBbMF0gPSAoX19mb3JjZSB1MzIpc2FkZHI7CiAJdG1wWzFdID0gKF9fZm9yY2UgdTMyKWRhZGRyOwogCXRtcFsyXSA9ICgoX19mb3JjZSB1MzIpc3BvcnQgPDwgMTYpICsgKF9fZm9yY2UgdTMyKWRwb3J0OwpAQCAtNTAsNiArNTUsMzkgQEAKIAlyZXR1cm4gdG1wWzE3XTsKIH0KIAorCisvKgorICogd2hlbiBzeW5jb29raWVzIGFyZSBpbiBlZmZlY3QgYW5kIHRjcCB0aW1lc3RhbXBzIGFyZSBlbmFibGVkIHdlIGVuY29kZQorICogdGNwIG9wdGlvbnMgaW4gdGhlIGxvd2VzdCA5IGJpdHMgb2YgdGhlIHRpbWVzdGFtcCB2YWx1ZSB0aGF0IHdpbGwgYmUKKyAqIHNlbnQgaW4gdGhlIHN5bi1hY2suCisgKiBTaW5jZSBzdWJzZXF1ZW50IHRpbWVzdGFtcHMgdXNlIHRoZSBub3JtYWwgdGNwX3RpbWVfc3RhbXAgdmFsdWUsIHdlCisgKiBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXN1bHRpbmcgaW5pdGlhbCB0aW1lc3RhbXAgaXMgPD0gdGNwX3RpbWVfc3RhbXAuCisgKi8KK19fdTMyIGNvb2tpZV9pbml0X3RpbWVzdGFtcChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCit7CisJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOworCXUzMiB0cywgdHNfbm93ID0gdGNwX3RpbWVfc3RhbXA7CisJdTMyIG9wdGlvbnMgPSAwOworCisJaXJlcSA9IGluZXRfcnNrKHJlcSk7CisJaWYgKGlyZXEtPndzY2FsZV9vaykgeworCQlvcHRpb25zID0gaXJlcS0+c25kX3dzY2FsZTsKKwkJb3B0aW9ucyB8PSBpcmVxLT5yY3Zfd3NjYWxlIDw8IDQ7CisJfQorCW9wdGlvbnMgfD0gaXJlcS0+c2Fja19vayA8PCA4OworCisJdHMgPSB0c19ub3cgJiB+VFNNQVNLOworCXRzIHw9IG9wdGlvbnM7CisJaWYgKHRzID4gdHNfbm93KSB7CisJCXRzID4+PSBUU0JJVFM7CisJCXRzLS07CisJCXRzIDw8PSBUU0JJVFM7CisJCXRzIHw9IG9wdGlvbnM7CisJfQorCXJldHVybiB0czsKK30KKworCiBzdGF0aWMgX191MzIgc2VjdXJlX3RjcF9zeW5fY29va2llKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBfX2JlMTYgc3BvcnQsCiAJCQkJICAgX19iZTE2IGRwb3J0LCBfX3UzMiBzc2VxLCBfX3UzMiBjb3VudCwKIAkJCQkgICBfX3UzMiBkYXRhKQpAQCAtMTg0LDYgKzIyMiwzNSBAQAogCXJldHVybiBjaGlsZDsKIH0KIAorCisvKgorICogd2hlbiBzeW5jb29raWVzIGFyZSBpbiBlZmZlY3QgYW5kIHRjcCB0aW1lc3RhbXBzIGFyZSBlbmFibGVkIHdlIHN0b3JlZAorICogYWRkaXRpb25hbCB0Y3Agb3B0aW9ucyBpbiB0aGUgdGltZXN0YW1wLgorICogVGhpcyBleHRyYWN0cyB0aGVzZSBvcHRpb25zIGZyb20gdGhlIHRpbWVzdGFtcCBlY2hvLgorICoKKyAqIFRoZSBsb3dlc3QgNCBiaXRzIGFyZSBmb3Igc25kX3dzY2FsZQorICogVGhlIG5leHQgNCBsc2IgYXJlIGZvciByY3Zfd3NjYWxlCisgKiBUaGUgbmV4dCBsc2IgaXMgZm9yIHNhY2tfb2sKKyAqLwordm9pZCBjb29raWVfY2hlY2tfdGltZXN0YW1wKHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqdGNwX29wdCkKK3sKKwkvKiBlY2hvZWQgdGltZXN0YW1wLCA5IGxvd2VzdCBiaXRzIGNvbnRhaW4gb3B0aW9ucyAqLworCXUzMiBvcHRpb25zID0gdGNwX29wdC0+cmN2X3RzZWNyICYgVFNNQVNLOworCisJdGNwX29wdC0+c25kX3dzY2FsZSA9IG9wdGlvbnMgJiAweGY7CisJb3B0aW9ucyA+Pj0gNDsKKwl0Y3Bfb3B0LT5yY3Zfd3NjYWxlID0gb3B0aW9ucyAmIDB4ZjsKKworCXRjcF9vcHQtPnNhY2tfb2sgPSAob3B0aW9ucyA+PiA0KSAmIDB4MTsKKworCWlmICh0Y3Bfb3B0LT5zYWNrX29rKQorCQl0Y3Bfc2Fja19yZXNldCh0Y3Bfb3B0KTsKKworCWlmICh0Y3Bfb3B0LT5zbmRfd3NjYWxlIHx8IHRjcF9vcHQtPnJjdl93c2NhbGUpCisJCXRjcF9vcHQtPndzY2FsZV9vayA9IDE7Cit9CitFWFBPUlRfU1lNQk9MKGNvb2tpZV9jaGVja190aW1lc3RhbXApOworCiBzdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgc3RydWN0IGlwX29wdGlvbnMgKm9wdCkKIHsKQEAgLTE5Nyw2ICsyNjQsNyBAQAogCWludCBtc3M7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJX191OCByY3Zfd3NjYWxlOworCXN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCB0Y3Bfb3B0OwogCiAJaWYgKCFzeXNjdGxfdGNwX3N5bmNvb2tpZXMgfHwgIXRoLT5hY2spCiAJCWdvdG8gb3V0OwpAQCAtMjA5LDYgKzI3NywxMyBAQAogCiAJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfU1lOQ09PS0lFU1JFQ1YpOwogCisJLyogY2hlY2sgZm9yIHRpbWVzdGFtcCBjb29raWUgc3VwcG9ydCAqLworCW1lbXNldCgmdGNwX29wdCwgMCwgc2l6ZW9mKHRjcF9vcHQpKTsKKwl0Y3BfcGFyc2Vfb3B0aW9ucyhza2IsICZ0Y3Bfb3B0LCAwKTsKKworCWlmICh0Y3Bfb3B0LnNhd190c3RhbXApCisJCWNvb2tpZV9jaGVja190aW1lc3RhbXAoJnRjcF9vcHQpOworCiAJcmV0ID0gTlVMTDsKIAlyZXEgPSByZXFza19hbGxvYygmdGNwX3JlcXVlc3Rfc29ja19vcHMpOyAvKiBmb3Igc2FmZXR5ICovCiAJaWYgKCFyZXEpCkBAIC0yMjcsNiArMzAyLDEyIEBACiAJaXJlcS0+bG9jX2FkZHIJCT0gaXBfaGRyKHNrYiktPmRhZGRyOwogCWlyZXEtPnJtdF9hZGRyCQk9IGlwX2hkcihza2IpLT5zYWRkcjsKIAlpcmVxLT5vcHQJCT0gTlVMTDsKKwlpcmVxLT5zbmRfd3NjYWxlCT0gdGNwX29wdC5zbmRfd3NjYWxlOworCWlyZXEtPnJjdl93c2NhbGUJPSB0Y3Bfb3B0LnJjdl93c2NhbGU7CisJaXJlcS0+c2Fja19vawkJPSB0Y3Bfb3B0LnNhY2tfb2s7CisJaXJlcS0+d3NjYWxlX29rCQk9IHRjcF9vcHQud3NjYWxlX29rOworCWlyZXEtPnRzdGFtcF9vawkJPSB0Y3Bfb3B0LnNhd190c3RhbXA7CisJcmVxLT50c19yZWNlbnQJCT0gdGNwX29wdC5zYXdfdHN0YW1wID8gdGNwX29wdC5yY3ZfdHN2YWwgOiAwOwogCiAJLyogV2UgdGhyb3dlZCB0aGUgb3B0aW9ucyBvZiB0aGUgaW5pdGlhbCBTWU4gYXdheSwgc28gd2UgaG9wZQogCSAqIHRoZSBBQ0sgY2FycmllcyB0aGUgc2FtZSBvcHRpb25zIGFnYWluIChzZWUgUkZDMTEyMiA0LjIuMy44KQpAQCAtMjQxLDggKzMyMiw2IEBACiAJCX0KIAl9CiAKLQlpcmVxLT5zbmRfd3NjYWxlID0gaXJlcS0+cmN2X3dzY2FsZSA9IGlyZXEtPnRzdGFtcF9vayA9IDA7Ci0JaXJlcS0+d3NjYWxlX29rCSA9IGlyZXEtPnNhY2tfb2sgPSAwOwogCXJlcS0+ZXhwaXJlcwk9IDBVTDsKIAlyZXEtPnJldHJhbnMJPSAwOwogCkBAIC0yNzEsMTEgKzM1MCwxMiBAQAogCX0KIAogCS8qIFRyeSB0byByZWRvIHdoYXQgdGNwX3Y0X3NlbmRfc3luYWNrIGRpZC4gKi8KLQlyZXEtPndpbmRvd19jbGFtcCA9IGRzdF9tZXRyaWMoJnJ0LT51LmRzdCwgUlRBWF9XSU5ET1cpOworCXJlcS0+d2luZG93X2NsYW1wID0gdHAtPndpbmRvd19jbGFtcCA/IDpkc3RfbWV0cmljKCZydC0+dS5kc3QsIFJUQVhfV0lORE9XKTsKKwogCXRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3codGNwX2Z1bGxfc3BhY2Uoc2spLCByZXEtPm1zcywKIAkJCQkgICZyZXEtPnJjdl93bmQsICZyZXEtPndpbmRvd19jbGFtcCwKLQkJCQkgIDAsICZyY3Zfd3NjYWxlKTsKLQkvKiBCVFcgd2luIHNjYWxlIHdpdGggc3luY29va2llcyBpcyAwIGJ5IGRlZmluaXRpb24gKi8KKwkJCQkgIGlyZXEtPndzY2FsZV9vaywgJnJjdl93c2NhbGUpOworCiAJaXJlcS0+cmN2X3dzY2FsZSAgPSByY3Zfd3NjYWxlOwogCiAJcmV0ID0gZ2V0X2Nvb2tpZV9zb2NrKHNrLCBza2IsIHJlcSwgJnJ0LT51LmRzdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IDg4Mjg2ZjMuLmM0MzdmODA0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtNDA0LDM4ICs0MDQsNiBAQAogCQkuc3RyYXRlZ3kJPSAmaXB2NF9zeXNjdGxfbG9jYWxfcG9ydF9yYW5nZSwKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfSUNNUF9FQ0hPX0lHTk9SRV9BTEwsCi0JCS5wcm9jbmFtZQk9ICJpY21wX2VjaG9faWdub3JlX2FsbCIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9hbGwsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwotCX0sCi0JewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0JST0FEQ0FTVFMsCi0JCS5wcm9jbmFtZQk9ICJpY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMiLAotCQkuZGF0YQkJPSAmc3lzY3RsX2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X0lDTVBfSUdOT1JFX0JPR1VTX0VSUk9SX1JFU1BPTlNFUywKLQkJLnByb2NuYW1lCT0gImljbXBfaWdub3JlX2JvZ3VzX2Vycm9yX3Jlc3BvbnNlcyIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfaWNtcF9pZ25vcmVfYm9ndXNfZXJyb3JfcmVzcG9uc2VzLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfSUNNUF9FUlJPUlNfVVNFX0lOQk9VTkRfSUZBRERSLAotCQkucHJvY25hbWUJPSAiaWNtcF9lcnJvcnNfdXNlX2luYm91bmRfaWZhZGRyIiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9pY21wX2Vycm9yc191c2VfaW5ib3VuZF9pZmFkZHIsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwotCX0sCi0JewogCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ST1VURSwKIAkJLnByb2NuYW1lCT0gInJvdXRlIiwKIAkJLm1heGxlbgkJPSAwLApAQCAtNTg2LDIyICs1NTQsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfSUNNUF9SQVRFTElNSVQsCi0JCS5wcm9jbmFtZQk9ICJpY21wX3JhdGVsaW1pdCIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfaWNtcF9yYXRlbGltaXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwotCX0sCi0JewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9JQ01QX1JBVEVNQVNLLAotCQkucHJvY25hbWUJPSAiaWNtcF9yYXRlbWFzayIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfaWNtcF9yYXRlbWFzaywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCi0JfSwKLQl7CiAJCS5jdGxfbmFtZQk9IE5FVF9UQ1BfVFdfUkVVU0UsCiAJCS5wcm9jbmFtZQk9ICJ0Y3BfdHdfcmV1c2UiLAogCQkuZGF0YQkJPSAmc3lzY3RsX3RjcF90d19yZXVzZSwKQEAgLTgwNCw2ICs3NTYsNTggQEAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X0lDTVBfRUNIT19JR05PUkVfQUxMLAorCQkucHJvY25hbWUJPSAiaWNtcF9lY2hvX2lnbm9yZV9hbGwiLAorCQkuZGF0YQkJPSAmaW5pdF9uZXQuaXB2NC5zeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9hbGwsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0JST0FEQ0FTVFMsCisJCS5wcm9jbmFtZQk9ICJpY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMiLAorCQkuZGF0YQkJPSAmaW5pdF9uZXQuaXB2NC5zeXNjdGxfaWNtcF9lY2hvX2lnbm9yZV9icm9hZGNhc3RzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfSUNNUF9JR05PUkVfQk9HVVNfRVJST1JfUkVTUE9OU0VTLAorCQkucHJvY25hbWUJPSAiaWNtcF9pZ25vcmVfYm9ndXNfZXJyb3JfcmVzcG9uc2VzIiwKKwkJLmRhdGEJCT0gJmluaXRfbmV0LmlwdjQuc3lzY3RsX2ljbXBfaWdub3JlX2JvZ3VzX2Vycm9yX3Jlc3BvbnNlcywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X0lDTVBfRVJST1JTX1VTRV9JTkJPVU5EX0lGQUREUiwKKwkJLnByb2NuYW1lCT0gImljbXBfZXJyb3JzX3VzZV9pbmJvdW5kX2lmYWRkciIsCisJCS5kYXRhCQk9ICZpbml0X25ldC5pcHY0LnN5c2N0bF9pY21wX2Vycm9yc191c2VfaW5ib3VuZF9pZmFkZHIsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9JQ01QX1JBVEVMSU1JVCwKKwkJLnByb2NuYW1lCT0gImljbXBfcmF0ZWxpbWl0IiwKKwkJLmRhdGEJCT0gJmluaXRfbmV0LmlwdjQuc3lzY3RsX2ljbXBfcmF0ZWxpbWl0LAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfSUNNUF9SQVRFTUFTSywKKwkJLnByb2NuYW1lCT0gImljbXBfcmF0ZW1hc2siLAorCQkuZGF0YQkJPSAmaW5pdF9uZXQuaXB2NC5zeXNjdGxfaWNtcF9yYXRlbWFzaywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCisJfSwKKwl7IH0KK307CisKIHN0cnVjdCBjdGxfcGF0aCBuZXRfaXB2NF9jdGxfcGF0aFtdID0gewogCXsgLnByb2NuYW1lID0gIm5ldCIsIC5jdGxfbmFtZSA9IENUTF9ORVQsIH0sCiAJeyAucHJvY25hbWUgPSAiaXB2NCIsIC5jdGxfbmFtZSA9IE5FVF9JUFY0LCB9LApAQCAtODExLDEyICs4MTUsNzIgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChuZXRfaXB2NF9jdGxfcGF0aCk7CiAKK3N0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CisKKwl0YWJsZSA9IGlwdjRfbmV0X3RhYmxlOworCWlmIChuZXQgIT0gJmluaXRfbmV0KSB7CisJCXRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGlwdjRfbmV0X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICh0YWJsZSA9PSBOVUxMKQorCQkJZ290byBlcnJfYWxsb2M7CisKKwkJdGFibGVbMF0uZGF0YSA9CisJCQkmbmV0LT5pcHY0LnN5c2N0bF9pY21wX2VjaG9faWdub3JlX2FsbDsKKwkJdGFibGVbMV0uZGF0YSA9CisJCQkmbmV0LT5pcHY0LnN5c2N0bF9pY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHM7CisJCXRhYmxlWzJdLmRhdGEgPQorCQkJJm5ldC0+aXB2NC5zeXNjdGxfaWNtcF9pZ25vcmVfYm9ndXNfZXJyb3JfcmVzcG9uc2VzOworCQl0YWJsZVszXS5kYXRhID0KKwkJCSZuZXQtPmlwdjQuc3lzY3RsX2ljbXBfZXJyb3JzX3VzZV9pbmJvdW5kX2lmYWRkcjsKKwkJdGFibGVbNF0uZGF0YSA9CisJCQkmbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVsaW1pdDsKKwkJdGFibGVbNV0uZGF0YSA9CisJCQkmbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVtYXNrOworCX0KKworCW5ldC0+aXB2NC5pcHY0X2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LAorCQkJbmV0X2lwdjRfY3RsX3BhdGgsIHRhYmxlKTsKKwlpZiAobmV0LT5pcHY0LmlwdjRfaGRyID09IE5VTEwpCisJCWdvdG8gZXJyX3JlZzsKKworCXJldHVybiAwOworCitlcnJfcmVnOgorCWlmIChuZXQgIT0gJmluaXRfbmV0KQorCQlrZnJlZSh0YWJsZSk7CitlcnJfYWxsb2M6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgaXB2NF9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOworCisJdGFibGUgPSBuZXQtPmlwdjQuaXB2NF9oZHItPmN0bF90YWJsZV9hcmc7CisJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKG5ldC0+aXB2NC5pcHY0X2hkcik7CisJa2ZyZWUodGFibGUpOworfQorCitzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdjRfc3lzY3RsX29wcyA9IHsKKwkuaW5pdCA9IGlwdjRfc3lzY3RsX2luaXRfbmV0LAorCS5leGl0ID0gaXB2NF9zeXNjdGxfZXhpdF9uZXQsCit9OworCiBzdGF0aWMgX19pbml0IGludCBzeXNjdGxfaXB2NF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhkcjsKIAogCWhkciA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhuZXRfaXB2NF9jdGxfcGF0aCwgaXB2NF90YWJsZSk7Ci0JcmV0dXJuIGhkciA9PSBOVUxMID8gLUVOT01FTSA6IDA7CisJaWYgKGhkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHY0X3N5c2N0bF9vcHMpKSB7CisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGhkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOwogfQogCiBfX2luaXRjYWxsKHN5c2N0bF9pcHY0X2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAwNzFlODNhLi41OGFjODM4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtNzM1LDcgKzczNSw3IEBACiAJCWlmICghKHBzaXplIC09IGNvcHkpKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKHNrYi0+bGVuIDwgbXNzX25vdyB8fCAoZmxhZ3MgJiBNU0dfT09CKSkKKwkJaWYgKHNrYi0+bGVuIDwgc2l6ZV9nb2FsIHx8IChmbGFncyAmIE1TR19PT0IpKQogCQkJY29udGludWU7CiAKIAkJaWYgKGZvcmNlZF9wdXNoKHRwKSkgewpAQCAtOTgxLDcgKzk4MSw3IEBACiAJCQlpZiAoKHNlZ2xlbiAtPSBjb3B5KSA9PSAwICYmIGlvdmxlbiA9PSAwKQogCQkJCWdvdG8gb3V0OwogCi0JCQlpZiAoc2tiLT5sZW4gPCBtc3Nfbm93IHx8IChmbGFncyAmIE1TR19PT0IpKQorCQkJaWYgKHNrYi0+bGVuIDwgc2l6ZV9nb2FsIHx8IChmbGFncyAmIE1TR19PT0IpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoZm9yY2VkX3B1c2godHApKSB7CkBAIC0yMTA1LDE1ICsyMTA1LDEyIEBACiAJCWJyZWFrOwogCiAJY2FzZSBUQ1BfREVGRVJfQUNDRVBUOgotCQlpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCA9IDA7Ci0JCWlmICh2YWwgPiAwKSB7Ci0JCQkvKiBUcmFuc2xhdGUgdmFsdWUgaW4gc2Vjb25kcyB0byBudW1iZXIgb2YKLQkJCSAqIHJldHJhbnNtaXRzICovCi0JCQl3aGlsZSAoaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgPCAzMiAmJgotCQkJICAgICAgIHZhbCA+ICgoVENQX1RJTUVPVVRfSU5JVCAvIEhaKSA8PAotCQkJCSAgICAgICBpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCkpCi0JCQkJaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQrKzsKLQkJCWljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0Kys7CisJCWlmICh2YWwgPCAwKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJaWYgKHZhbCA+IE1BWF9UQ1BfQUNDRVBUX0RFRkVSUkVEKQorCQkJCXZhbCA9IE1BWF9UQ1BfQUNDRVBUX0RFRkVSUkVEOworCQkJaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgPSB2YWw7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTIyOTUsOCArMjI5Miw3IEBACiAJCQl2YWwgPSAodmFsID8gOiBzeXNjdGxfdGNwX2Zpbl90aW1lb3V0KSAvIEhaOwogCQlicmVhazsKIAljYXNlIFRDUF9ERUZFUl9BQ0NFUFQ6Ci0JCXZhbCA9ICFpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCA/IDAgOgotCQkJKChUQ1BfVElNRU9VVF9JTklUIC8gSFopIDw8IChpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCAtIDEpKTsKKwkJdmFsID0gaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQ7CiAJCWJyZWFrOwogCWNhc2UgVENQX1dJTkRPV19DTEFNUDoKIAkJdmFsID0gdHAtPndpbmRvd19jbGFtcDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iaWMuYyBiL25ldC9pcHY0L3RjcF9iaWMuYwppbmRleCA1MjEyZWQ5Li43ZWI3NjM2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2JpYy5jCkBAIC0xLDEyICsxLDEzIEBACiAvKgogICogQmluYXJ5IEluY3JlYXNlIENvbmdlc3Rpb24gY29udHJvbCBmb3IgVENQCi0gKgorICogSG9tZSBwYWdlOgorICogICAgICBodHRwOi8vbmV0c3J2LmNzYy5uY3N1LmVkdS90d2lraS9iaW4vdmlldy9NYWluL0JJQwogICogVGhpcyBpcyBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBCSUNUQ1AgaW4KICAqIExpc29uLVh1LCBLYWhhbGVkIEhhcmZvdXNoLCBhbmQgSW5qb25nIFJoZWUuCiAgKiAgIkJpbmFyeSBJbmNyZWFzZSBDb25nZXN0aW9uIENvbnRyb2wgZm9yIEZhc3QsIExvbmcgRGlzdGFuY2UKICAqICBOZXR3b3JrcyIgaW4gSW5mb0NvbW0gMjAwNAogICogQXZhaWxhYmxlIGZyb206Ci0gKiAgaHR0cDovL3d3dy5jc2MubmNzdS5lZHUvZmFjdWx0eS9yaGVlL2V4cG9ydC9iaXRjcC5wZGYKKyAqICBodHRwOi8vbmV0c3J2LmNzYy5uY3N1LmVkdS9leHBvcnQvYml0Y3AucGRmCiAgKgogICogVW5sZXNzIEJJQyBpcyBlbmFibGVkIGFuZCBjb25nZXN0aW9uIHdpbmRvdyBpcyBsYXJnZQogICogdGhpcyBiZWhhdmVzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBSZW5vLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2N1YmljLmMgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwppbmRleCAzYWEwYjIzLi5lYjViOTg1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY3ViaWMuYworKysgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwpAQCAtMSwxMiArMSwxMyBAQAogLyoKLSAqIFRDUCBDVUJJQzogQmluYXJ5IEluY3JlYXNlIENvbmdlc3Rpb24gY29udHJvbCBmb3IgVENQIHYyLjEKLSAqCisgKiBUQ1AgQ1VCSUM6IEJpbmFyeSBJbmNyZWFzZSBDb25nZXN0aW9uIGNvbnRyb2wgZm9yIFRDUCB2Mi4yCisgKiBIb21lIHBhZ2U6CisgKiAgICAgIGh0dHA6Ly9uZXRzcnYuY3NjLm5jc3UuZWR1L3R3aWtpL2Jpbi92aWV3L01haW4vQklDCiAgKiBUaGlzIGlzIGZyb20gdGhlIGltcGxlbWVudGF0aW9uIG9mIENVQklDIFRDUCBpbgogICogSW5qb25nIFJoZWUsIExpc29uZyBYdS4KICAqICAiQ1VCSUM6IEEgTmV3IFRDUC1GcmllbmRseSBIaWdoLVNwZWVkIFRDUCBWYXJpYW50CiAgKiAgaW4gUEZMRG5ldCAyMDA1CiAgKiBBdmFpbGFibGUgZnJvbToKLSAqICBodHRwOi8vd3d3LmNzYy5uY3N1LmVkdS9mYWN1bHR5L3JoZWUvZXhwb3J0L2JpdGNwL2N1YmljLXBhcGVyLnBkZgorICogIGh0dHA6Ly9uZXRzcnYuY3NjLm5jc3UuZWR1L2V4cG9ydC9jdWJpYy1wYXBlci5wZGYKICAqCiAgKiBVbmxlc3MgQ1VCSUMgaXMgZW5hYmxlZCBhbmQgY29uZ2VzdGlvbiB3aW5kb3cgaXMgbGFyZ2UKICAqIHRoaXMgYmVoYXZlcyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgUmVuby4KQEAgLTIwLDE1ICsyMSwxMCBAQAogI2RlZmluZSBCSUNUQ1BfQkVUQV9TQ0FMRSAgICAxMDI0CS8qIFNjYWxlIGZhY3RvciBiZXRhIGNhbGN1bGF0aW9uCiAJCQkJCSAqIG1heF9jd25kID0gc25kX2N3bmQgKiBiZXRhCiAJCQkJCSAqLwotI2RlZmluZSBCSUNUQ1BfQgkJNAkgLyoKLQkJCQkJICAqIEluIGJpbmFyeSBzZWFyY2gsCi0JCQkJCSAgKiBnbyB0byBwb2ludCAobWF4K21pbikvTgotCQkJCQkgICovCiAjZGVmaW5lCUJJQ1RDUF9IWgkJMTAJLyogQklDIEhaIDJeMTAgPSAxMDI0ICovCiAKIHN0YXRpYyBpbnQgZmFzdF9jb252ZXJnZW5jZSBfX3JlYWRfbW9zdGx5ID0gMTsKLXN0YXRpYyBpbnQgbWF4X2luY3JlbWVudCBfX3JlYWRfbW9zdGx5ID0gMTY7Ci1zdGF0aWMgaW50IGJldGEgX19yZWFkX21vc3RseSA9IDgxOTsJLyogPSA4MTkvMTAyNCAoQklDVENQX0JFVEFfU0NBTEUpICovCitzdGF0aWMgaW50IGJldGEgX19yZWFkX21vc3RseSA9IDcxNzsJLyogPSA3MTcvMTAyNCAoQklDVENQX0JFVEFfU0NBTEUpICovCiBzdGF0aWMgaW50IGluaXRpYWxfc3N0aHJlc2ggX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQgYmljX3NjYWxlIF9fcmVhZF9tb3N0bHkgPSA0MTsKIHN0YXRpYyBpbnQgdGNwX2ZyaWVuZGxpbmVzcyBfX3JlYWRfbW9zdGx5ID0gMTsKQEAgLTQwLDkgKzM2LDcgQEAKIC8qIE5vdGUgcGFyYW1ldGVycyB0aGF0IGFyZSB1c2VkIGZvciBwcmVjb21wdXRpbmcgc2NhbGUgZmFjdG9ycyBhcmUgcmVhZC1vbmx5ICovCiBtb2R1bGVfcGFyYW0oZmFzdF9jb252ZXJnZW5jZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZmFzdF9jb252ZXJnZW5jZSwgInR1cm4gb24vb2ZmIGZhc3QgY29udmVyZ2VuY2UiKTsKLW1vZHVsZV9wYXJhbShtYXhfaW5jcmVtZW50LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfaW5jcmVtZW50LCAiTGltaXQgb24gaW5jcmVtZW50IGFsbG93ZWQgZHVyaW5nIGJpbmFyeSBzZWFyY2giKTsKLW1vZHVsZV9wYXJhbShiZXRhLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGJldGEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJldGEsICJiZXRhIGZvciBtdWx0aXBsaWNhdGl2ZSBpbmNyZWFzZSIpOwogbW9kdWxlX3BhcmFtKGluaXRpYWxfc3N0aHJlc2gsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluaXRpYWxfc3N0aHJlc2gsICJpbml0aWFsIHZhbHVlIG9mIHNsb3cgc3RhcnQgdGhyZXNob2xkIik7CkBAIC0xNDUsNyArMTM5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiaWN0Y3BfdXBkYXRlKHN0cnVjdCBiaWN0Y3AgKmNhLCB1MzIgY3duZCkKIHsKIAl1NjQgb2ZmczsKLQl1MzIgZGVsdGEsIHQsIGJpY190YXJnZXQsIG1pbl9jbnQsIG1heF9jbnQ7CisJdTMyIGRlbHRhLCB0LCBiaWNfdGFyZ2V0LCBtYXhfY250OwogCiAJY2EtPmFja19jbnQrKzsJLyogY291bnQgdGhlIG51bWJlciBvZiBBQ0tzICovCiAKQEAgLTIxMSwxOSArMjA1LDYgQEAKIAkJY2EtPmNudCA9IDEwMCAqIGN3bmQ7ICAgICAgICAgICAgICAvKiB2ZXJ5IHNtYWxsIGluY3JlbWVudCovCiAJfQogCi0JaWYgKGNhLT5kZWxheV9taW4gPiAwKSB7Ci0JCS8qIG1heCBpbmNyZW1lbnQgPSBTbWF4ICogcnR0IC8gMC4xICAqLwotCQltaW5fY250ID0gKGN3bmQgKiBIWiAqIDgpLygxMCAqIG1heF9pbmNyZW1lbnQgKiBjYS0+ZGVsYXlfbWluKTsKLQotCQkvKiB1c2UgY29uY2F2ZSBncm93dGggd2hlbiB0aGUgdGFyZ2V0IGlzIGFib3ZlIHRoZSBvcmlnaW4gKi8KLQkJaWYgKGNhLT5jbnQgPCBtaW5fY250ICYmIHQgPj0gY2EtPmJpY19LKQotCQkJY2EtPmNudCA9IG1pbl9jbnQ7Ci0JfQotCi0JLyogc2xvdyBzdGFydCBhbmQgbG93IHV0aWxpemF0aW9uICAqLwotCWlmIChjYS0+bG9zc19jd25kID09IDApCQkvKiBjb3VsZCBiZSBhZ2dyZXNzaXZlIGluIHNsb3cgc3RhcnQgKi8KLQkJY2EtPmNudCA9IDUwOwotCiAJLyogVENQIEZyaWVuZGx5ICovCiAJaWYgKHRjcF9mcmllbmRsaW5lc3MpIHsKIAkJdTMyIHNjYWxlID0gYmV0YV9zY2FsZTsKQEAgLTM5MSw0ICszNzIsNCBAQAogTU9EVUxFX0FVVEhPUigiU2FuZ3RhZSBIYSwgU3RlcGhlbiBIZW1taW5nZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ1VCSUMgVENQIik7Ci1NT0RVTEVfVkVSU0lPTigiMi4xIik7CitNT0RVTEVfVkVSU0lPTigiMi4yIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDE5YzQ0OWYuLmNkYzA1MWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogICogYSBub3JtYWwgd2F5CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX3NhY2t0YWdfc2tpcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCXUzMiBza2lwX3RvX3NlcSkKKwkJCQkJdTMyIHNraXBfdG9fc2VxLCBpbnQgKmZhY2tfY291bnQpCiB7CiAJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKIAkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKQEAgLTEzNzUsNiArMTM3NSw4IEBACiAKIAkJaWYgKCFiZWZvcmUoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCBza2lwX3RvX3NlcSkpCiAJCQlicmVhazsKKworCQkqZmFja19jb3VudCArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCX0KIAlyZXR1cm4gc2tiOwogfQpAQCAtMTM5MCw3ICsxMzkyLDcgQEAKIAkJcmV0dXJuIHNrYjsKIAogCWlmIChiZWZvcmUobmV4dF9kdXAtPnN0YXJ0X3NlcSwgc2tpcF90b19zZXEpKSB7Ci0JCXNrYiA9IHRjcF9zYWNrdGFnX3NraXAoc2tiLCBzaywgbmV4dF9kdXAtPnN0YXJ0X3NlcSk7CisJCXNrYiA9IHRjcF9zYWNrdGFnX3NraXAoc2tiLCBzaywgbmV4dF9kdXAtPnN0YXJ0X3NlcSwgZmFja19jb3VudCk7CiAJCXRjcF9zYWNrdGFnX3dhbGsoc2tiLCBzaywgTlVMTCwKIAkJCQkgbmV4dF9kdXAtPnN0YXJ0X3NlcSwgbmV4dF9kdXAtPmVuZF9zZXEsCiAJCQkJIDEsIGZhY2tfY291bnQsIHJlb3JkLCBmbGFnKTsKQEAgLTE1MzcsNyArMTUzOSw4IEBACiAKIAkJCS8qIEhlYWQgdG9kbz8gKi8KIAkJCWlmIChiZWZvcmUoc3RhcnRfc2VxLCBjYWNoZS0+c3RhcnRfc2VxKSkgewotCQkJCXNrYiA9IHRjcF9zYWNrdGFnX3NraXAoc2tiLCBzaywgc3RhcnRfc2VxKTsKKwkJCQlza2IgPSB0Y3Bfc2Fja3RhZ19za2lwKHNrYiwgc2ssIHN0YXJ0X3NlcSwKKwkJCQkJCSAgICAgICAmZmFja19jb3VudCk7CiAJCQkJc2tiID0gdGNwX3NhY2t0YWdfd2Fsayhza2IsIHNrLCBuZXh0X2R1cCwKIAkJCQkJCSAgICAgICBzdGFydF9zZXEsCiAJCQkJCQkgICAgICAgY2FjaGUtPnN0YXJ0X3NlcSwKQEAgLTE1NjUsNyArMTU2OCw4IEBACiAJCQkJZ290byB3YWxrOwogCQkJfQogCi0JCQlza2IgPSB0Y3Bfc2Fja3RhZ19za2lwKHNrYiwgc2ssIGNhY2hlLT5lbmRfc2VxKTsKKwkJCXNrYiA9IHRjcF9zYWNrdGFnX3NraXAoc2tiLCBzaywgY2FjaGUtPmVuZF9zZXEsCisJCQkJCSAgICAgICAmZmFja19jb3VudCk7CiAJCQkvKiBDaGVjayBvdmVybGFwIGFnYWluc3QgbmV4dCBjYWNoZWQgdG9vIChwYXN0IHRoaXMgb25lIGFscmVhZHkpICovCiAJCQljYWNoZSsrOwogCQkJY29udGludWU7CkBAIC0xNTc3LDcgKzE1ODEsNyBAQAogCQkJCWJyZWFrOwogCQkJZmFja19jb3VudCA9IHRwLT5mYWNrZXRzX291dDsKIAkJfQotCQlza2IgPSB0Y3Bfc2Fja3RhZ19za2lwKHNrYiwgc2ssIHN0YXJ0X3NlcSk7CisJCXNrYiA9IHRjcF9zYWNrdGFnX3NraXAoc2tiLCBzaywgc3RhcnRfc2VxLCAmZmFja19jb3VudCk7CiAKIHdhbGs6CiAJCXNrYiA9IHRjcF9zYWNrdGFnX3dhbGsoc2tiLCBzaywgbmV4dF9kdXAsIHN0YXJ0X3NlcSwgZW5kX3NlcSwKQEAgLTE2MjEsMTMgKzE2MjUsMTEgQEAKIAlyZXR1cm4gZmxhZzsKIH0KIAotLyogSWYgd2UgcmVjZWl2ZSBtb3JlIGR1cGFja3MgdGhhbiB3ZSBleHBlY3RlZCBjb3VudGluZyBzZWdtZW50cwotICogaW4gYXNzdW1wdGlvbiBvZiBhYnNlbnQgcmVvcmRlcmluZywgaW50ZXJwcmV0IHRoaXMgYXMgcmVvcmRlcmluZy4KLSAqIFRoZSBvbmx5IGFub3RoZXIgcmVhc29uIGNvdWxkIGJlIGJ1ZyBpbiByZWNlaXZlciBUQ1AuCisvKiBMaW1pdHMgc2Fja2VkX291dCBzbyB0aGF0IHN1bSB3aXRoIGxvc3Rfb3V0IGlzbid0IGV2ZXIgbGFyZ2VyIHRoYW4KKyAqIHBhY2tldHNfb3V0LiBSZXR1cm5zIHplcm8gaWYgc2Fja2VkX291dCBhZGp1c3RlbWVudCB3YXNuJ3QgbmVjZXNzYXJ5LgogICovCi1zdGF0aWMgdm9pZCB0Y3BfY2hlY2tfcmVub19yZW9yZGVyaW5nKHN0cnVjdCBzb2NrICpzaywgY29uc3QgaW50IGFkZGVuZCkKK2ludCB0Y3BfbGltaXRfcmVub19zYWNrZWQoc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAl1MzIgaG9sZXM7CiAKIAlob2xlcyA9IG1heCh0cC0+bG9zdF9vdXQsIDFVKTsKQEAgLTE2MzUsOCArMTYzNywyMCBAQAogCiAJaWYgKCh0cC0+c2Fja2VkX291dCArIGhvbGVzKSA+IHRwLT5wYWNrZXRzX291dCkgewogCQl0cC0+c2Fja2VkX291dCA9IHRwLT5wYWNrZXRzX291dCAtIGhvbGVzOwotCQl0Y3BfdXBkYXRlX3Jlb3JkZXJpbmcoc2ssIHRwLT5wYWNrZXRzX291dCArIGFkZGVuZCwgMCk7CisJCXJldHVybiAxOwogCX0KKwlyZXR1cm4gMDsKK30KKworLyogSWYgd2UgcmVjZWl2ZSBtb3JlIGR1cGFja3MgdGhhbiB3ZSBleHBlY3RlZCBjb3VudGluZyBzZWdtZW50cworICogaW4gYXNzdW1wdGlvbiBvZiBhYnNlbnQgcmVvcmRlcmluZywgaW50ZXJwcmV0IHRoaXMgYXMgcmVvcmRlcmluZy4KKyAqIFRoZSBvbmx5IGFub3RoZXIgcmVhc29uIGNvdWxkIGJlIGJ1ZyBpbiByZWNlaXZlciBUQ1AuCisgKi8KK3N0YXRpYyB2b2lkIHRjcF9jaGVja19yZW5vX3Jlb3JkZXJpbmcoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgYWRkZW5kKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWlmICh0Y3BfbGltaXRfcmVub19zYWNrZWQodHApKQorCQl0Y3BfdXBkYXRlX3Jlb3JkZXJpbmcoc2ssIHRwLT5wYWNrZXRzX291dCArIGFkZGVuZCwgMCk7CiB9CiAKIC8qIEVtdWxhdGUgU0FDS3MgZm9yIFNBQ0tsZXNzIGNvbm5lY3Rpb246IGFjY291bnQgZm9yIGEgbmV3IGR1cGFjay4gKi8KQEAgLTE2NzcsMTEgKzE2OTEsMTYgQEAKIGludCB0Y3BfdXNlX2ZydG8oc3RydWN0IHNvY2sgKnNrKQogewogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJaWYgKCFzeXNjdGxfdGNwX2ZydG8pCiAJCXJldHVybiAwOwogCisJLyogTVRVIHByb2JlIGFuZCBGLVJUTyB3b24ndCByZWFsbHkgcGxheSBuaWNlbHkgYWxvbmcgY3VycmVudGx5ICovCisJaWYgKGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplKQorCQlyZXR1cm4gMDsKKwogCWlmIChJc1NhY2tGcnRvKCkpCiAJCXJldHVybiAxOwogCkBAIC0yMTMwLDExICsyMTQ5LDEzIEBACiAvKiBNYXJrIGhlYWQgb2YgcXVldWUgdXAgYXMgbG9zdC4gV2l0aCBSRkMzNTE3IFNBQ0ssIHRoZSBwYWNrZXRzIGlzCiAgKiBpcyBhZ2FpbnN0IHNhY2tlZCAiY250Iiwgb3RoZXJ3aXNlIGl0J3MgYWdhaW5zdCBmYWNrZWQgImNudCIKICAqLwotc3RhdGljIHZvaWQgdGNwX21hcmtfaGVhZF9sb3N0KHN0cnVjdCBzb2NrICpzaywgaW50IHBhY2tldHMsIGludCBmYXN0X3JleG1pdCkKK3N0YXRpYyB2b2lkIHRjcF9tYXJrX2hlYWRfbG9zdChzdHJ1Y3Qgc29jayAqc2ssIGludCBwYWNrZXRzKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGNudDsKKwlpbnQgY250LCBvbGRjbnQ7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgbXNzOwogCiAJQlVHX1RSQVAocGFja2V0cyA8PSB0cC0+cGFja2V0c19vdXQpOwogCWlmICh0cC0+bG9zdF9za2JfaGludCkgewpAQCAtMjE1MywxMyArMjE3NCwyNSBAQAogCQl0cC0+bG9zdF9za2JfaGludCA9IHNrYjsKIAkJdHAtPmxvc3RfY250X2hpbnQgPSBjbnQ7CiAKKwkJaWYgKGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgdHAtPmhpZ2hfc2VxKSkKKwkJCWJyZWFrOworCisJCW9sZGNudCA9IGNudDsKIAkJaWYgKHRjcF9pc19mYWNrKHRwKSB8fCB0Y3BfaXNfcmVubyh0cCkgfHwKIAkJICAgIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX1NBQ0tFRF9BQ0tFRCkpCiAJCQljbnQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAotCQlpZiAoKCghZmFzdF9yZXhtaXQgfHwgKHRwLT5sb3N0X291dCA+IDApKSAmJiAoY250ID4gcGFja2V0cykpIHx8Ci0JCSAgICBhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEsIHRwLT5oaWdoX3NlcSkpCi0JCQlicmVhazsKKwkJaWYgKGNudCA+IHBhY2tldHMpIHsKKwkJCWlmICh0Y3BfaXNfc2Fjayh0cCkgfHwgKG9sZGNudCA+PSBwYWNrZXRzKSkKKwkJCQlicmVhazsKKworCQkJbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwkJCWVyciA9IHRjcF9mcmFnbWVudChzaywgc2tiLCAocGFja2V0cyAtIG9sZGNudCkgKiBtc3MsIG1zcyk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlicmVhazsKKwkJCWNudCA9IHBhY2tldHM7CisJCX0KKwogCQlpZiAoIShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIChUQ1BDQl9TQUNLRURfQUNLRUR8VENQQ0JfTE9TVCkpKSB7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9MT1NUOwogCQkJdHAtPmxvc3Rfb3V0ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CkBAIC0yMTc2LDE3ICsyMjA5LDE3IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKIAlpZiAodGNwX2lzX3Jlbm8odHApKSB7Ci0JCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgMSwgZmFzdF9yZXhtaXQpOworCQl0Y3BfbWFya19oZWFkX2xvc3Qoc2ssIDEpOwogCX0gZWxzZSBpZiAodGNwX2lzX2ZhY2sodHApKSB7CiAJCWludCBsb3N0ID0gdHAtPmZhY2tldHNfb3V0IC0gdHAtPnJlb3JkZXJpbmc7CiAJCWlmIChsb3N0IDw9IDApCiAJCQlsb3N0ID0gMTsKLQkJdGNwX21hcmtfaGVhZF9sb3N0KHNrLCBsb3N0LCBmYXN0X3JleG1pdCk7CisJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgbG9zdCk7CiAJfSBlbHNlIHsKIAkJaW50IHNhY2tlZF91cHRvID0gdHAtPnNhY2tlZF9vdXQgLSB0cC0+cmVvcmRlcmluZzsKLQkJaWYgKHNhY2tlZF91cHRvIDwgMCkKLQkJCXNhY2tlZF91cHRvID0gMDsKLQkJdGNwX21hcmtfaGVhZF9sb3N0KHNrLCBzYWNrZWRfdXB0bywgZmFzdF9yZXhtaXQpOworCQlpZiAoc2Fja2VkX3VwdG8gPCBmYXN0X3JleG1pdCkKKwkJCXNhY2tlZF91cHRvID0gZmFzdF9yZXhtaXQ7CisJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgc2Fja2VkX3VwdG8pOwogCX0KIAogCS8qIE5ldyBoZXVyaXN0aWNzOiBpdCBpcyBwb3NzaWJsZSBvbmx5IGFmdGVyIHdlIHN3aXRjaGVkCkBAIC0yMjc2LDEyICsyMzA5LDI1IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIlVuZG8gJXMgJXUuJXUuJXUuJXUvJXUgYyV1IGwldSBzcyV1LyV1IHAldVxuIiwKLQkgICAgICAgbXNnLAotCSAgICAgICBOSVBRVUFEKGluZXQtPmRhZGRyKSwgbnRvaHMoaW5ldC0+ZHBvcnQpLAotCSAgICAgICB0cC0+c25kX2N3bmQsIHRjcF9sZWZ0X291dCh0cCksCi0JICAgICAgIHRwLT5zbmRfc3N0aHJlc2gsIHRwLT5wcmlvcl9zc3RocmVzaCwKLQkgICAgICAgdHAtPnBhY2tldHNfb3V0KTsKKwlpZiAoc2stPnNrX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJVbmRvICVzICIgTklQUVVBRF9GTVQgIi8ldSBjJXUgbCV1IHNzJXUvJXUgcCV1XG4iLAorCQkgICAgICAgbXNnLAorCQkgICAgICAgTklQUVVBRChpbmV0LT5kYWRkciksIG50b2hzKGluZXQtPmRwb3J0KSwKKwkJICAgICAgIHRwLT5zbmRfY3duZCwgdGNwX2xlZnRfb3V0KHRwKSwKKwkJICAgICAgIHRwLT5zbmRfc3N0aHJlc2gsIHRwLT5wcmlvcl9zc3RocmVzaCwKKwkJICAgICAgIHRwLT5wYWNrZXRzX291dCk7CisJfQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWVsc2UgaWYgKHNrLT5za19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCQlwcmludGsoS0VSTl9ERUJVRyAiVW5kbyAlcyAiIE5JUDZfRk1UICIvJXUgYyV1IGwldSBzcyV1LyV1IHAldVxuIiwKKwkJICAgICAgIG1zZywKKwkJICAgICAgIE5JUDYobnAtPmRhZGRyKSwgbnRvaHMoaW5ldC0+ZHBvcnQpLAorCQkgICAgICAgdHAtPnNuZF9jd25kLCB0Y3BfbGVmdF9vdXQodHApLAorCQkgICAgICAgdHAtPnNuZF9zc3RocmVzaCwgdHAtPnByaW9yX3NzdGhyZXNoLAorCQkgICAgICAgdHAtPnBhY2tldHNfb3V0KTsKKwl9CisjZW5kaWYKIH0KICNlbHNlCiAjZGVmaW5lIERCR1VORE8oeC4uLikgZG8geyB9IHdoaWxlICgwKQpAQCAtMjUyMCw3ICsyNTY2LDcgQEAKIAkgICAgYmVmb3JlKHRwLT5zbmRfdW5hLCB0cC0+aGlnaF9zZXEpICYmCiAJICAgIGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gJiYKIAkgICAgdHAtPmZhY2tldHNfb3V0ID4gdHAtPnJlb3JkZXJpbmcpIHsKLQkJdGNwX21hcmtfaGVhZF9sb3N0KHNrLCB0cC0+ZmFja2V0c19vdXQgLSB0cC0+cmVvcmRlcmluZywgMCk7CisJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgdHAtPmZhY2tldHNfb3V0IC0gdHAtPnJlb3JkZXJpbmcpOwogCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BMT1NTKTsKIAl9CiAKQEAgLTI1ODIsNiArMjYyOCw4IEBACiAJY2FzZSBUQ1BfQ0FfTG9zczoKIAkJaWYgKGZsYWcgJiBGTEFHX0RBVEFfQUNLRUQpCiAJCQlpY3NrLT5pY3NrX3JldHJhbnNtaXRzID0gMDsKKwkJaWYgKHRjcF9pc19yZW5vKHRwKSAmJiBmbGFnICYgRkxBR19TTkRfVU5BX0FEVkFOQ0VEKQorCQkJdGNwX3Jlc2V0X3Jlbm9fc2Fjayh0cCk7CiAJCWlmICghdGNwX3RyeV91bmRvX2xvc3Moc2spKSB7CiAJCQl0Y3BfbW9kZXJhdGVfY3duZCh0cCk7CiAJCQl0Y3BfeG1pdF9yZXRyYW5zbWl0X3F1ZXVlKHNrKTsKQEAgLTM1NTcsNyArMzYwNSw3IEBACiAJCSAqIGNhc2VzIHdlIHNob3VsZCBuZXZlciByZWFjaCB0aGlzIHBpZWNlIG9mIGNvZGUuCiAJCSAqLwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbXBvc3NpYmxlLCBzay0+c2tfc3RhdGU9JWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHNrLT5za19zdGF0ZSk7CisJCSAgICAgICBfX2Z1bmNfXywgc2stPnNrX3N0YXRlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zODA2LDggKzM4NTQsMjggQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2spOwogc3RhdGljIGludCB0Y3BfcHJ1bmVfcXVldWUoc3RydWN0IHNvY2sgKnNrKTsKIAorc3RhdGljIGlubGluZSBpbnQgdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHNpemUpCit7CisJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPiBzay0+c2tfcmN2YnVmIHx8CisJICAgICFza19ybWVtX3NjaGVkdWxlKHNrLCBzaXplKSkgeworCisJCWlmICh0Y3BfcHJ1bmVfcXVldWUoc2spIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQlpZiAoIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNpemUpKSB7CisJCQlpZiAoIXRjcF9wcnVuZV9vZm9fcXVldWUoc2spKQorCQkJCXJldHVybiAtMTsKKworCQkJaWYgKCFza19ybWVtX3NjaGVkdWxlKHNrLCBzaXplKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHRjcF9kYXRhX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKQEAgLTM4NTcsMTIgKzM5MjUsOSBAQAogCQlpZiAoZWF0ZW4gPD0gMCkgewogcXVldWVfYW5kX291dDoKIAkJCWlmIChlYXRlbiA8IDAgJiYKLQkJCSAgICAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA+IHNrLT5za19yY3ZidWYgfHwKLQkJCSAgICAgIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYi0+dHJ1ZXNpemUpKSkgewotCQkJCWlmICh0Y3BfcHJ1bmVfcXVldWUoc2spIDwgMCB8fAotCQkJCSAgICAhc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLT50cnVlc2l6ZSkpCi0JCQkJCWdvdG8gZHJvcDsKLQkJCX0KKwkJCSAgICB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYi0+dHJ1ZXNpemUpKQorCQkJCWdvdG8gZHJvcDsKKwogCQkJc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwogCQkJX19za2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCX0KQEAgLTM5MzEsMTIgKzM5OTYsOCBAQAogCiAJVENQX0VDTl9jaGVja19jZSh0cCwgc2tiKTsKIAotCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpID4gc2stPnNrX3JjdmJ1ZiB8fAotCSAgICAhc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLT50cnVlc2l6ZSkpIHsKLQkJaWYgKHRjcF9wcnVuZV9xdWV1ZShzaykgPCAwIHx8Ci0JCSAgICAhc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLT50cnVlc2l6ZSkpCi0JCQlnb3RvIGRyb3A7Ci0JfQorCWlmICh0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYi0+dHJ1ZXNpemUpKQorCQlnb3RvIGRyb3A7CiAKIAkvKiBEaXNhYmxlIGhlYWRlciBwcmVkaWN0aW9uLiAqLwogCXRwLT5wcmVkX2ZsYWdzID0gMDsKQEAgLTM5NjQsNyArNDAyNSw3IEBACiAJCXUzMiBlbmRfc2VxID0gVENQX1NLQl9DQihza2IpLT5lbmRfc2VxOwogCiAJCWlmIChzZXEgPT0gVENQX1NLQl9DQihza2IxKS0+ZW5kX3NlcSkgewotCQkJX19za2JfYXBwZW5kKHNrYjEsIHNrYiwgJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpOworCQkJX19za2JfcXVldWVfYWZ0ZXIoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUsIHNrYjEsIHNrYik7CiAKIAkJCWlmICghdHAtPnJ4X29wdC5udW1fc2Fja3MgfHwKIAkJCSAgICB0cC0+c2VsZWN0aXZlX2Fja3NbMF0uZW5kX3NlcSAhPSBzZXEpCkBAIC00MTYzLDYgKzQyMjQsMzIgQEAKIAl9CiB9CiAKKy8qCisgKiBQdXJnZSB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlLgorICogUmV0dXJuIHRydWUgaWYgcXVldWUgd2FzIHBydW5lZC4KKyAqLworc3RhdGljIGludCB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlpbnQgcmVzID0gMDsKKworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSkgeworCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9PRk9QUlVORUQpOworCQlfX3NrYl9xdWV1ZV9wdXJnZSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSk7CisKKwkJLyogUmVzZXQgU0FDSyBzdGF0ZS4gIEEgY29uZm9ybWluZyBTQUNLIGltcGxlbWVudGF0aW9uIHdpbGwKKwkJICogZG8gdGhlIHNhbWUgYXQgYSB0aW1lb3V0IGJhc2VkIHJldHJhbnNtaXQuICBXaGVuIGEgY29ubmVjdGlvbgorCQkgKiBpcyBpbiBhIHNhZCBzdGF0ZSBsaWtlIHRoaXMsIHdlIGNhcmUgb25seSBhYm91dCBpbnRlZ3JpdHkKKwkJICogb2YgdGhlIGNvbm5lY3Rpb24gbm90IHBlcmZvcm1hbmNlLgorCQkgKi8KKwkJaWYgKHRwLT5yeF9vcHQuc2Fja19vaykKKwkJCXRjcF9zYWNrX3Jlc2V0KCZ0cC0+cnhfb3B0KTsKKwkJc2tfbWVtX3JlY2xhaW0oc2spOworCQlyZXMgPSAxOworCX0KKwlyZXR1cm4gcmVzOworfQorCiAvKiBSZWR1Y2UgYWxsb2NhdGVkIG1lbW9yeSBpZiB3ZSBjYW4sIHRyeWluZyB0byBnZXQKICAqIHRoZSBzb2NrZXQgd2l0aGluIGl0cyBtZW1vcnkgbGltaXRzIGFnYWluLgogICoKQEAgLTQxOTYsMjAgKzQyODMsNyBAQAogCS8qIENvbGxhcHNpbmcgZGlkIG5vdCBoZWxwLCBkZXN0cnVjdGl2ZSBhY3Rpb25zIGZvbGxvdy4KIAkgKiBUaGlzIG11c3Qgbm90IGV2ZXIgb2NjdXIuICovCiAKLQkvKiBGaXJzdCwgcHVyZ2UgdGhlIG91dF9vZl9vcmRlciBxdWV1ZS4gKi8KLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkpIHsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfT0ZPUFJVTkVEKTsKLQkJX19za2JfcXVldWVfcHVyZ2UoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpOwotCi0JCS8qIFJlc2V0IFNBQ0sgc3RhdGUuICBBIGNvbmZvcm1pbmcgU0FDSyBpbXBsZW1lbnRhdGlvbiB3aWxsCi0JCSAqIGRvIHRoZSBzYW1lIGF0IGEgdGltZW91dCBiYXNlZCByZXRyYW5zbWl0LiAgV2hlbiBhIGNvbm5lY3Rpb24KLQkJICogaXMgaW4gYSBzYWQgc3RhdGUgbGlrZSB0aGlzLCB3ZSBjYXJlIG9ubHkgYWJvdXQgaW50ZWdyaXR5Ci0JCSAqIG9mIHRoZSBjb25uZWN0aW9uIG5vdCBwZXJmb3JtYW5jZS4KLQkJICovCi0JCWlmICh0Y3BfaXNfc2Fjayh0cCkpCi0JCQl0Y3Bfc2Fja19yZXNldCgmdHAtPnJ4X29wdCk7Ci0JCXNrX21lbV9yZWNsYWltKHNrKTsKLQl9CisJdGNwX3BydW5lX29mb19xdWV1ZShzayk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA8PSBzay0+c2tfcmN2YnVmKQogCQlyZXR1cm4gMDsKQEAgLTQ0NDcsNiArNDUyMSw0OSBAQAogCX0KIH0KIAorc3RhdGljIGludCB0Y3BfZGVmZXJfYWNjZXB0X2NoZWNrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKworCWlmICh0cC0+ZGVmZXJfdGNwX2FjY2VwdC5yZXF1ZXN0KSB7CisJCWludCBxdWV1ZWRfZGF0YSA9ICB0cC0+cmN2X254dCAtIHRwLT5jb3BpZWRfc2VxOworCQlpbnQgaGFzZmluID0gICFza2JfcXVldWVfZW1wdHkoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSA/CisJCQl0Y3BfaGRyKChzdHJ1Y3Qgc2tfYnVmZiAqKQorCQkJCXNrLT5za19yZWNlaXZlX3F1ZXVlLnByZXYpLT5maW4gOiAwOworCisJCWlmIChxdWV1ZWRfZGF0YSAmJiBoYXNmaW4pCisJCQlxdWV1ZWRfZGF0YS0tOworCisJCWlmIChxdWV1ZWRfZGF0YSAmJgorCQkgICAgdHAtPmRlZmVyX3RjcF9hY2NlcHQubGlzdGVuX3NrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7CisJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0tFRVBPUEVOKSkgeworCQkJCWluZXRfY3NrX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcihzaywKKwkJCQkJCQkgICAgICAga2VlcGFsaXZlX3RpbWVfd2hlbih0cCkpOworCQkJfSBlbHNlIHsKKwkJCQlpbmV0X2Nza19kZWxldGVfa2VlcGFsaXZlX3RpbWVyKHNrKTsKKwkJCX0KKworCQkJaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKAorCQkJCXRwLT5kZWZlcl90Y3BfYWNjZXB0Lmxpc3Rlbl9zaywKKwkJCQl0cC0+ZGVmZXJfdGNwX2FjY2VwdC5yZXF1ZXN0LAorCQkJCXNrKTsKKworCQkJdHAtPmRlZmVyX3RjcF9hY2NlcHQubGlzdGVuX3NrLT5za19kYXRhX3JlYWR5KAorCQkJCXRwLT5kZWZlcl90Y3BfYWNjZXB0Lmxpc3Rlbl9zaywgMCk7CisKKwkJCXNvY2tfcHV0KHRwLT5kZWZlcl90Y3BfYWNjZXB0Lmxpc3Rlbl9zayk7CisJCQlzb2NrX3B1dChzayk7CisJCQl0cC0+ZGVmZXJfdGNwX2FjY2VwdC5saXN0ZW5fc2sgPSBOVUxMOworCQkJdHAtPmRlZmVyX3RjcF9hY2NlcHQucmVxdWVzdCA9IE5VTEw7CisJCX0gZWxzZSBpZiAoaGFzZmluIHx8CisJCQkgICB0cC0+ZGVmZXJfdGNwX2FjY2VwdC5saXN0ZW5fc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4pIHsKKwkJCXRjcF9yZXNldChzayk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdGNwX2NvcHlfdG9faW92ZWMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGxlbikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTQ4MDcsNiArNDkyNCw5IEBACiAKIAl0Y3BfZGF0YV9zbmRfY2hlY2soc2spOwogCXRjcF9hY2tfc25kX2NoZWNrKHNrKTsKKworCWlmICh0Y3BfZGVmZXJfYWNjZXB0X2NoZWNrKHNrKSkKKwkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogCiBjc3VtX2Vycm9yOgpAQCAtNTMyNiw2ICs1NDQ2LDcgQEAKIAogRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2Vjbik7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfcmVvcmRlcmluZyk7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfYWR2X3dpbl9zY2FsZSk7CiBFWFBPUlRfU1lNQk9MKHRjcF9wYXJzZV9vcHRpb25zKTsKIEVYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA2MzQxNGVhLi43NzY2MTUxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTg4LDkgKzg4LDYgQEAKIC8qIENoZWNrIFRDUCBzZXF1ZW5jZSBudW1iZXJzIGluIElDTVAgcGFja2V0cy4gKi8KICNkZWZpbmUgSUNNUF9NSU5fTEVOR1RIIDgKIAotLyogU29ja2V0IHVzZWQgZm9yIHNlbmRpbmcgUlNUcyAqLwotc3RhdGljIHN0cnVjdCBzb2NrZXQgKnRjcF9zb2NrZXQgX19yZWFkX21vc3RseTsKLQogdm9pZCB0Y3BfdjRfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sIHN0cnVjdCBza19idWZmICpza2IpOwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKQEAgLTM1Myw3ICszNTAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0Jc2sgPSBpbmV0X2xvb2t1cChza2ItPmRldi0+bmRfbmV0LCAmdGNwX2hhc2hpbmZvLCBpcGgtPmRhZGRyLCB0aC0+ZGVzdCwKKwlzayA9IGluZXRfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCAmdGNwX2hhc2hpbmZvLCBpcGgtPmRhZGRyLCB0aC0+ZGVzdCwKIAkJCWlwaC0+c2FkZHIsIHRoLT5zb3VyY2UsIGluZXRfaWlmKHNrYikpOwogCWlmICghc2spIHsKIAkJSUNNUF9JTkNfU1RBVFNfQkgoSUNNUF9NSUJfSU5FUlJPUlMpOwpAQCAtNTUyLDcgKzU0OSw3IEBACiAJaWYgKHRoLT5yc3QpCiAJCXJldHVybjsKIAotCWlmICgoKHN0cnVjdCBydGFibGUgKilza2ItPmRzdCktPnJ0X3R5cGUgIT0gUlROX0xPQ0FMKQorCWlmIChza2ItPnJ0YWJsZS0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCiAJCXJldHVybjsKIAogCS8qIFN3YXAgdGhlIHNlbmQgYW5kIHRoZSByZWNlaXZlLiAqLwpAQCAtNTk4LDcgKzU5NSw4IEBACiAJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLCBJUFBST1RPX1RDUCwgMCk7CiAJYXJnLmNzdW1vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgLyAyOwogCi0JaXBfc2VuZF9yZXBseSh0Y3Bfc29ja2V0LT5zaywgc2tiLCAmYXJnLCBhcmcuaW92WzBdLmlvdl9sZW4pOworCWlwX3NlbmRfcmVwbHkoZGV2X25ldChza2ItPmRzdC0+ZGV2KS0+aXB2NC50Y3Bfc29jaywgc2tiLAorCQkgICAgICAmYXJnLCBhcmcuaW92WzBdLmlvdl9sZW4pOwogCiAJVENQX0lOQ19TVEFUU19CSChUQ1BfTUlCX09VVFNFR1MpOwogCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9PVVRSU1RTKTsKQEAgLTY5Myw3ICs2OTEsOCBAQAogCWlmICh0d3NrKQogCQlhcmcuYm91bmRfZGV2X2lmID0gdHdzay0+dHdfc2sudHdfYm91bmRfZGV2X2lmOwogCi0JaXBfc2VuZF9yZXBseSh0Y3Bfc29ja2V0LT5zaywgc2tiLCAmYXJnLCBhcmcuaW92WzBdLmlvdl9sZW4pOworCWlwX3NlbmRfcmVwbHkoZGV2X25ldChza2ItPmRldiktPmlwdjQudGNwX3NvY2ssIHNrYiwKKwkJICAgICAgJmFyZywgYXJnLmlvdlswXS5pb3ZfbGVuKTsKIAogCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9PVVRTRUdTKTsKIH0KQEAgLTcxOSwxMiArNzE4LDEyIEBACiB9CiAKIC8qCi0gKglTZW5kIGEgU1lOLUFDSyBhZnRlciBoYXZpbmcgcmVjZWl2ZWQgYW4gQUNLLgorICoJU2VuZCBhIFNZTi1BQ0sgYWZ0ZXIgaGF2aW5nIHJlY2VpdmVkIGEgU1lOLgogICoJVGhpcyBzdGlsbCBvcGVyYXRlcyBvbiBhIHJlcXVlc3Rfc29jayBvbmx5LCBub3Qgb24gYSBiaWcKICAqCXNvY2tldC4KICAqLwotc3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCitzdGF0aWMgaW50IF9fdGNwX3Y0X3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKIAljb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpOwogCWludCBlcnIgPSAtMTsKQEAgLTczMiw3ICs3MzEsNyBAQAogCiAJLyogRmlyc3QsIGdyYWIgYSByb3V0ZS4gKi8KIAlpZiAoIWRzdCAmJiAoZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCByZXEpKSA9PSBOVUxMKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC0xOwogCiAJc2tiID0gdGNwX21ha2Vfc3luYWNrKHNrLCBkc3QsIHJlcSk7CiAKQEAgLTc1MSwxMSArNzUwLDE1IEBACiAJCWVyciA9IG5ldF94bWl0X2V2YWwoZXJyKTsKIAl9CiAKLW91dDoKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgdGNwX3Y0X3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCXJldHVybiBfX3RjcF92NF9zZW5kX3N5bmFjayhzaywgcmVxLCBOVUxMKTsKK30KKwogLyoKICAqCUlQdjQgcmVxdWVzdF9zb2NrIGRlc3RydWN0b3IuCiAgKi8KQEAgLTEyNTgsOCArMTI2MSw3IEBACiAjZW5kaWYKIAogCS8qIE5ldmVyIGFuc3dlciB0byBTWU5zIHNlbmQgdG8gYnJvYWRjYXN0IG9yIG11bHRpY2FzdCAqLwotCWlmICgoKHN0cnVjdCBydGFibGUgKilza2ItPmRzdCktPnJ0X2ZsYWdzICYKLQkgICAgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKQorCWlmIChza2ItPnJ0YWJsZS0+cnRfZmxhZ3MgJiAoUlRDRl9CUk9BRENBU1QgfCBSVENGX01VTFRJQ0FTVCkpCiAJCWdvdG8gZHJvcDsKIAogCS8qIFRXIGJ1Y2tldHMgYXJlIGNvbnZlcnRlZCB0byBvcGVuIHJlcXVlc3RzIHdpdGhvdXQKQEAgLTEyOTcsMTAgKzEyOTksOCBAQAogCiAJdGNwX3BhcnNlX29wdGlvbnMoc2tiLCAmdG1wX29wdCwgMCk7CiAKLQlpZiAod2FudF9jb29raWUpIHsKKwlpZiAod2FudF9jb29raWUgJiYgIXRtcF9vcHQuc2F3X3RzdGFtcCkKIAkJdGNwX2NsZWFyX29wdGlvbnMoJnRtcF9vcHQpOwotCQl0bXBfb3B0LnNhd190c3RhbXAgPSAwOwotCX0KIAogCWlmICh0bXBfb3B0LnNhd190c3RhbXAgJiYgIXRtcF9vcHQucmN2X3RzdmFsKSB7CiAJCS8qIFNvbWUgT1NlcyAodW5rbm93biBvbmVzLCBidXQgSSBzZWUgdGhlbSBvbiB3ZWIgc2VydmVyLCB3aGljaApAQCAtMTMyOCw2ICsxMzI4LDcgQEAKIAlpZiAod2FudF9jb29raWUpIHsKICNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVMKIAkJc3luX2Zsb29kX3dhcm5pbmcoc2tiKTsKKwkJcmVxLT5jb29raWVfdHMgPSB0bXBfb3B0LnRzdGFtcF9vazsKICNlbmRpZgogCQlpc24gPSBjb29raWVfdjRfaW5pdF9zZXF1ZW5jZShzaywgc2tiLCAmcmVxLT5tc3MpOwogCX0gZWxzZSBpZiAoIWlzbikgewpAQCAtMTM1MSw4ICsxMzUyLDcgQEAKIAkJCSAgICAoczMyKShwZWVyLT50Y3BfdHMgLSByZXEtPnRzX3JlY2VudCkgPgogCQkJCQkJCVRDUF9QQVdTX1dJTkRPVykgewogCQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1BBV1NQQVNTSVZFUkVKRUNURUQpOwotCQkJCWRzdF9yZWxlYXNlKGRzdCk7Ci0JCQkJZ290byBkcm9wX2FuZF9mcmVlOworCQkJCWdvdG8gZHJvcF9hbmRfcmVsZWFzZTsKIAkJCX0KIAkJfQogCQkvKiBLaWxsIHRoZSBmb2xsb3dpbmcgY2xhdXNlLCBpZiB5b3UgZGlzbGlrZSB0aGlzIHdheS4gKi8KQEAgLTEzNjksMjcgKzEzNjksMjQgQEAKIAkJCSAqIHRvIHRoZSBtb21lbnQgb2Ygc3luZmxvb2QuCiAJCQkgKi8KIAkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIlRDUDogZHJvcCBvcGVuICIKLQkJCQkgICAgICAgInJlcXVlc3QgZnJvbSAldS4ldS4ldS4ldS8ldVxuIiwKKwkJCQkgICAgICAgInJlcXVlc3QgZnJvbSAiIE5JUFFVQURfRk1UICIvJXVcbiIsCiAJCQkJICAgICAgIE5JUFFVQUQoc2FkZHIpLAogCQkJCSAgICAgICBudG9ocyh0Y3BfaGRyKHNrYiktPnNvdXJjZSkpOwotCQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJCWdvdG8gZHJvcF9hbmRfZnJlZTsKKwkJCWdvdG8gZHJvcF9hbmRfcmVsZWFzZTsKIAkJfQogCiAJCWlzbiA9IHRjcF92NF9pbml0X3NlcXVlbmNlKHNrYik7CiAJfQogCXRjcF9yc2socmVxKS0+c250X2lzbiA9IGlzbjsKIAotCWlmICh0Y3BfdjRfc2VuZF9zeW5hY2soc2ssIHJlcSwgZHN0KSkKKwlpZiAoX190Y3BfdjRfc2VuZF9zeW5hY2soc2ssIHJlcSwgZHN0KSB8fCB3YW50X2Nvb2tpZSkKIAkJZ290byBkcm9wX2FuZF9mcmVlOwogCi0JaWYgKHdhbnRfY29va2llKSB7Ci0JCXJlcXNrX2ZyZWUocmVxKTsKLQl9IGVsc2UgewotCQlpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxLCBUQ1BfVElNRU9VVF9JTklUKTsKLQl9CisJaW5ldF9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc2ssIHJlcSwgVENQX1RJTUVPVVRfSU5JVCk7CiAJcmV0dXJuIDA7CiAKK2Ryb3BfYW5kX3JlbGVhc2U6CisJZHN0X3JlbGVhc2UoZHN0KTsKIGRyb3BfYW5kX2ZyZWU6CiAJcmVxc2tfZnJlZShyZXEpOwogZHJvcDoKQEAgLTE0ODcsNyArMTQ4NCw3IEBACiAJaWYgKHJlcSkKIAkJcmV0dXJuIHRjcF9jaGVja19yZXEoc2ssIHNrYiwgcmVxLCBwcmV2KTsKIAotCW5zayA9IGluZXRfbG9va3VwX2VzdGFibGlzaGVkKHNrLT5za19uZXQsICZ0Y3BfaGFzaGluZm8sIGlwaC0+c2FkZHIsCisJbnNrID0gaW5ldF9sb29rdXBfZXN0YWJsaXNoZWQoc29ja19uZXQoc2spLCAmdGNwX2hhc2hpbmZvLCBpcGgtPnNhZGRyLAogCQkJdGgtPnNvdXJjZSwgaXBoLT5kYWRkciwgdGgtPmRlc3QsIGluZXRfaWlmKHNrYikpOwogCiAJaWYgKG5zaykgewpAQCAtMTY0NSw3ICsxNjQyLDcgQEAKIAlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzCSA9IGlwaC0+dG9zOwogCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkCSA9IDA7CiAKLQlzayA9IF9faW5ldF9sb29rdXAoc2tiLT5kZXYtPm5kX25ldCwgJnRjcF9oYXNoaW5mbywgaXBoLT5zYWRkciwKKwlzayA9IF9faW5ldF9sb29rdXAoZGV2X25ldChza2ItPmRldiksICZ0Y3BfaGFzaGluZm8sIGlwaC0+c2FkZHIsCiAJCQl0aC0+c291cmNlLCBpcGgtPmRhZGRyLCB0aC0+ZGVzdCwgaW5ldF9paWYoc2tiKSk7CiAJaWYgKCFzaykKIAkJZ290byBub190Y3Bfc29ja2V0OwpAQCAtMTcxOSw3ICsxNzE2LDcgQEAKIAl9CiAJc3dpdGNoICh0Y3BfdGltZXdhaXRfc3RhdGVfcHJvY2VzcyhpbmV0X3R3c2soc2spLCBza2IsIHRoKSkgewogCWNhc2UgVENQX1RXX1NZTjogewotCQlzdHJ1Y3Qgc29jayAqc2syID0gaW5ldF9sb29rdXBfbGlzdGVuZXIoc2tiLT5kZXYtPm5kX25ldCwKKwkJc3RydWN0IHNvY2sgKnNrMiA9IGluZXRfbG9va3VwX2xpc3RlbmVyKGRldl9uZXQoc2tiLT5kZXYpLAogCQkJCQkJCSZ0Y3BfaGFzaGluZm8sCiAJCQkJCQkJaXBoLT5kYWRkciwgdGgtPmRlc3QsCiAJCQkJCQkJaW5ldF9paWYoc2tiKSk7CkBAIC0xOTIxLDYgKzE5MTgsMTQgQEAKIAkJc2stPnNrX3NuZG1zZ19wYWdlID0gTlVMTDsKIAl9CiAKKwlpZiAodHAtPmRlZmVyX3RjcF9hY2NlcHQucmVxdWVzdCkgeworCQlyZXFza19mcmVlKHRwLT5kZWZlcl90Y3BfYWNjZXB0LnJlcXVlc3QpOworCQlzb2NrX3B1dCh0cC0+ZGVmZXJfdGNwX2FjY2VwdC5saXN0ZW5fc2spOworCQlzb2NrX3B1dChzayk7CisJCXRwLT5kZWZlcl90Y3BfYWNjZXB0Lmxpc3Rlbl9zayA9IE5VTEw7CisJCXRwLT5kZWZlcl90Y3BfYWNjZXB0LnJlcXVlc3QgPSBOVUxMOworCX0KKwogCWF0b21pY19kZWMoJnRjcF9zb2NrZXRzX2FsbG9jYXRlZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE5NDksNiArMTk1NCw3IEBACiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IHNvY2sgKnNrID0gY3VyOwogCXN0cnVjdCB0Y3BfaXRlcl9zdGF0ZSogc3QgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAlpZiAoIXNrKSB7CiAJCXN0LT5idWNrZXQgPSAwOwpAQCAtMTk2NSw3ICsxOTcxLDggQEAKIAkJcmVxID0gcmVxLT5kbF9uZXh0OwogCQl3aGlsZSAoMSkgewogCQkJd2hpbGUgKHJlcSkgewotCQkJCWlmIChyZXEtPnJza19vcHMtPmZhbWlseSA9PSBzdC0+ZmFtaWx5KSB7CisJCQkJaWYgKHJlcS0+cnNrX29wcy0+ZmFtaWx5ID09IHN0LT5mYW1pbHkgJiYKKwkJCQkgICAgbmV0X2VxKHNvY2tfbmV0KHJlcS0+c2spLCBuZXQpKSB7CiAJCQkJCWN1ciA9IHJlcTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQpAQCAtMTk4OSw3ICsxOTk2LDcgQEAKIAl9CiBnZXRfc2s6CiAJc2tfZm9yX2VhY2hfZnJvbShzaywgbm9kZSkgewotCQlpZiAoc2stPnNrX2ZhbWlseSA9PSBzdC0+ZmFtaWx5KSB7CisJCWlmIChzay0+c2tfZmFtaWx5ID09IHN0LT5mYW1pbHkgJiYgbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkgewogCQkJY3VyID0gc2s7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjAyOCw2ICsyMDM1LDcgQEAKIHN0YXRpYyB2b2lkICplc3RhYmxpc2hlZF9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CiAJc3RydWN0IHRjcF9pdGVyX3N0YXRlKiBzdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAl2b2lkICpyYyA9IE5VTEw7CiAKIAlmb3IgKHN0LT5idWNrZXQgPSAwOyBzdC0+YnVja2V0IDwgdGNwX2hhc2hpbmZvLmVoYXNoX3NpemU7ICsrc3QtPmJ1Y2tldCkgewpAQCAtMjAzOCw3ICsyMDQ2LDggQEAKIAogCQlyZWFkX2xvY2tfYmgobG9jayk7CiAJCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdGNwX2hhc2hpbmZvLmVoYXNoW3N0LT5idWNrZXRdLmNoYWluKSB7Ci0JCQlpZiAoc2stPnNrX2ZhbWlseSAhPSBzdC0+ZmFtaWx5KSB7CisJCQlpZiAoc2stPnNrX2ZhbWlseSAhPSBzdC0+ZmFtaWx5IHx8CisJCQkgICAgIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpIHsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCXJjID0gc2s7CkBAIC0yMDQ3LDcgKzIwNTYsOCBAQAogCQlzdC0+c3RhdGUgPSBUQ1BfU0VRX1NUQVRFX1RJTUVfV0FJVDsKIAkJaW5ldF90d3NrX2Zvcl9lYWNoKHR3LCBub2RlLAogCQkJCSAgICZ0Y3BfaGFzaGluZm8uZWhhc2hbc3QtPmJ1Y2tldF0udHdjaGFpbikgewotCQkJaWYgKHR3LT50d19mYW1pbHkgIT0gc3QtPmZhbWlseSkgeworCQkJaWYgKHR3LT50d19mYW1pbHkgIT0gc3QtPmZhbWlseSB8fAorCQkJICAgICFuZXRfZXEodHdza19uZXQodHcpLCBuZXQpKSB7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlyYyA9IHR3OwpAQCAtMjA2Niw2ICsyMDc2LDcgQEAKIAlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dzsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgdGNwX2l0ZXJfc3RhdGUqIHN0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJKytzdC0+bnVtOwogCkBAIC0yMDczLDcgKzIwODQsNyBAQAogCQl0dyA9IGN1cjsKIAkJdHcgPSB0d19uZXh0KHR3KTsKIGdldF90dzoKLQkJd2hpbGUgKHR3ICYmIHR3LT50d19mYW1pbHkgIT0gc3QtPmZhbWlseSkgeworCQl3aGlsZSAodHcgJiYgKHR3LT50d19mYW1pbHkgIT0gc3QtPmZhbWlseSB8fCAhbmV0X2VxKHR3c2tfbmV0KHR3KSwgbmV0KSkpIHsKIAkJCXR3ID0gdHdfbmV4dCh0dyk7CiAJCX0KIAkJaWYgKHR3KSB7CkBAIC0yMDk0LDcgKzIxMDUsNyBAQAogCQlzayA9IHNrX25leHQoc2spOwogCiAJc2tfZm9yX2VhY2hfZnJvbShzaywgbm9kZSkgewotCQlpZiAoc2stPnNrX2ZhbWlseSA9PSBzdC0+ZmFtaWx5KQorCQlpZiAoc2stPnNrX2ZhbWlseSA9PSBzdC0+ZmFtaWx5ICYmIG5ldF9lcShzb2NrX25ldChzayksIG5ldCkpCiAJCQlnb3RvIGZvdW5kOwogCX0KIApAQCAtMjIwMCw0OCArMjIxMSwzNyBAQAogc3RhdGljIGludCB0Y3Bfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHRjcF9zZXFfYWZpbmZvICphZmluZm8gPSBQREUoaW5vZGUpLT5kYXRhOwotCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwogCXN0cnVjdCB0Y3BfaXRlcl9zdGF0ZSAqczsKLQlpbnQgcmM7CisJaW50IGVycjsKIAogCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzLT5mYW1pbHkJCT0gYWZpbmZvLT5mYW1pbHk7Ci0Jcy0+c2VxX29wcy5zdGFydAk9IHRjcF9zZXFfc3RhcnQ7Ci0Jcy0+c2VxX29wcy5uZXh0CQk9IHRjcF9zZXFfbmV4dDsKLQlzLT5zZXFfb3BzLnNob3cJCT0gYWZpbmZvLT5zZXFfc2hvdzsKLQlzLT5zZXFfb3BzLnN0b3AJCT0gdGNwX3NlcV9zdG9wOworCWVyciA9IHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJmFmaW5mby0+c2VxX29wcywKKwkJCSAgc2l6ZW9mKHN0cnVjdCB0Y3BfaXRlcl9zdGF0ZSkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmcy0+c2VxX29wcyk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9rZnJlZTsKLQlzZXEJICAgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzZXEtPnByaXZhdGUgPSBzOwotb3V0OgotCXJldHVybiByYzsKLW91dF9rZnJlZToKLQlrZnJlZShzKTsKLQlnb3RvIG91dDsKKwlzID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlOworCXMtPmZhbWlseQkJPSBhZmluZm8tPmZhbWlseTsKKwlyZXR1cm4gMDsKIH0KIAotaW50IHRjcF9wcm9jX3JlZ2lzdGVyKHN0cnVjdCB0Y3Bfc2VxX2FmaW5mbyAqYWZpbmZvKQoraW50IHRjcF9wcm9jX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjcF9zZXFfYWZpbmZvICphZmluZm8pCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAKLQlpZiAoIWFmaW5mbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYWZpbmZvLT5zZXFfZm9wcy0+b3duZXIJCT0gYWZpbmZvLT5vd25lcjsKLQlhZmluZm8tPnNlcV9mb3BzLT5vcGVuCQk9IHRjcF9zZXFfb3BlbjsKLQlhZmluZm8tPnNlcV9mb3BzLT5yZWFkCQk9IHNlcV9yZWFkOwotCWFmaW5mby0+c2VxX2ZvcHMtPmxsc2Vlawk9IHNlcV9sc2VlazsKLQlhZmluZm8tPnNlcV9mb3BzLT5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfcHJpdmF0ZTsKKwlhZmluZm8tPnNlcV9mb3BzLm9wZW4JCT0gdGNwX3NlcV9vcGVuOworCWFmaW5mby0+c2VxX2ZvcHMucmVhZAkJPSBzZXFfcmVhZDsKKwlhZmluZm8tPnNlcV9mb3BzLmxsc2VlawkJPSBzZXFfbHNlZWs7CisJYWZpbmZvLT5zZXFfZm9wcy5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfbmV0OwogCi0JcCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgYWZpbmZvLT5uYW1lLCBTX0lSVUdPLCBhZmluZm8tPnNlcV9mb3BzKTsKKwlhZmluZm8tPnNlcV9vcHMuc3RhcnQJCT0gdGNwX3NlcV9zdGFydDsKKwlhZmluZm8tPnNlcV9vcHMubmV4dAkJPSB0Y3Bfc2VxX25leHQ7CisJYWZpbmZvLT5zZXFfb3BzLnN0b3AJCT0gdGNwX3NlcV9zdG9wOworCisJcCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgYWZpbmZvLT5uYW1lLCBTX0lSVUdPLCAmYWZpbmZvLT5zZXFfZm9wcyk7CiAJaWYgKHApCiAJCXAtPmRhdGEgPSBhZmluZm87CiAJZWxzZQpAQCAtMjI0OSwxMiArMjI0OSw5IEBACiAJcmV0dXJuIHJjOwogfQogCi12b2lkIHRjcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IHRjcF9zZXFfYWZpbmZvICphZmluZm8pCit2b2lkIHRjcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNwX3NlcV9hZmluZm8gKmFmaW5mbykKIHsKLQlpZiAoIWFmaW5mbykKLQkJcmV0dXJuOwotCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsIGFmaW5mby0+bmFtZSk7Ci0JbWVtc2V0KGFmaW5mby0+c2VxX2ZvcHMsIDAsIHNpemVvZigqYWZpbmZvLT5zZXFfZm9wcykpOworCXByb2NfbmV0X3JlbW92ZShuZXQsIGFmaW5mby0+bmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldF9vcGVucmVxNChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKQEAgLTIzODMsMjggKzIzODAsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGNwNF9zZXFfZm9wczsKIHN0YXRpYyBzdHJ1Y3QgdGNwX3NlcV9hZmluZm8gdGNwNF9zZXFfYWZpbmZvID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidGNwIiwKIAkuZmFtaWx5CQk9IEFGX0lORVQsCi0JLnNlcV9zaG93CT0gdGNwNF9zZXFfc2hvdywKLQkuc2VxX2ZvcHMJPSAmdGNwNF9zZXFfZm9wcywKKwkuc2VxX2ZvcHMJPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zZXFfb3BzCT0geworCQkuc2hvdwkJPSB0Y3A0X3NlcV9zaG93LAorCX0sCit9OworCitzdGF0aWMgaW50IHRjcDRfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIHRjcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnRjcDRfc2VxX2FmaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIHRjcDRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJdGNwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ0Y3A0X3NlcV9hZmluZm8pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHRjcDRfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHRjcDRfcHJvY19pbml0X25ldCwKKwkuZXhpdCA9IHRjcDRfcHJvY19leGl0X25ldCwKIH07CiAKIGludCBfX2luaXQgdGNwNF9wcm9jX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gdGNwX3Byb2NfcmVnaXN0ZXIoJnRjcDRfc2VxX2FmaW5mbyk7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnRjcDRfbmV0X29wcyk7CiB9CiAKIHZvaWQgdGNwNF9wcm9jX2V4aXQodm9pZCkKIHsKLQl0Y3BfcHJvY191bnJlZ2lzdGVyKCZ0Y3A0X3NlcV9hZmluZm8pOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdGNwNF9uZXRfb3BzKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCi1ERUZJTkVfUFJPVE9fSU5VU0UodGNwKQotCiBzdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7CiAJLm5hbWUJCQk9ICJUQ1AiLAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCkBAIC0yNDM1LDE4ICsyNDQ3LDMzIEBACiAJLm9ial9zaXplCQk9IHNpemVvZihzdHJ1Y3QgdGNwX3NvY2spLAogCS50d3NrX3Byb3QJCT0gJnRjcF90aW1ld2FpdF9zb2NrX29wcywKIAkucnNrX3Byb3QJCT0gJnRjcF9yZXF1ZXN0X3NvY2tfb3BzLAotCS5oYXNoaW5mbwkJPSAmdGNwX2hhc2hpbmZvLAorCS5oLmhhc2hpbmZvCQk9ICZ0Y3BfaGFzaGluZm8sCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdAk9IGNvbXBhdF90Y3Bfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQJPSBjb21wYXRfdGNwX2dldHNvY2tvcHQsCiAjZW5kaWYKLQlSRUZfUFJPVE9fSU5VU0UodGNwKQogfTsKIAotdm9pZCBfX2luaXQgdGNwX3Y0X2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcykKKworc3RhdGljIGludCBfX25ldF9pbml0IHRjcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpZiAoaW5ldF9jc2tfY3RsX3NvY2tfY3JlYXRlKCZ0Y3Bfc29ja2V0LCBQRl9JTkVULCBTT0NLX1JBVywKLQkJCQkgICAgIElQUFJPVE9fVENQKSA8IDApCisJcmV0dXJuIGluZXRfY3RsX3NvY2tfY3JlYXRlKCZuZXQtPmlwdjQudGNwX3NvY2ssCisJCQkJICAgIFBGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX1RDUCwgbmV0KTsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCB0Y3Bfc2tfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+aXB2NC50Y3Bfc29jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgdGNwX3NrX29wcyA9IHsKKyAgICAgICAuaW5pdCA9IHRjcF9za19pbml0LAorICAgICAgIC5leGl0ID0gdGNwX3NrX2V4aXQsCit9OworCit2b2lkIF9faW5pdCB0Y3BfdjRfaW5pdCh2b2lkKQoreworCWlmIChyZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZ0Y3Bfc2tfb3BzKSkKIAkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUgdGhlIFRDUCBjb250cm9sIHNvY2tldC5cbiIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggYjYxYjc2OC4uMDE5YzhjMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMzUsNiArMzUsOCBAQAogI2VuZGlmCiAKIGludCBzeXNjdGxfdGNwX3N5bmNvb2tpZXMgX19yZWFkX21vc3RseSA9IFNZTkNfSU5JVDsKK0VYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9zeW5jb29raWVzKTsKKwogaW50IHN5c2N0bF90Y3BfYWJvcnRfb25fb3ZlcmZsb3cgX19yZWFkX21vc3RseTsKIAogc3RydWN0IGluZXRfdGltZXdhaXRfZGVhdGhfcm93IHRjcF9kZWF0aF9yb3cgPSB7CkBAIC01MzYsNyArNTM4LDcgQEAKIAkJICogRW5mb3JjZSAiU1lOLUFDSyIgYWNjb3JkaW5nIHRvIGZpZ3VyZSA4LCBmaWd1cmUgNgogCQkgKiBvZiBSRkM3OTMsIGZpeGVkIGJ5IFJGQzExMjIuCiAJCSAqLwotCQlyZXEtPnJza19vcHMtPnJ0eF9zeW5fYWNrKHNrLCByZXEsIE5VTEwpOworCQlyZXEtPnJza19vcHMtPnJ0eF9zeW5fYWNrKHNrLCByZXEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTU2OSwxMCArNTcxLDggQEAKIAkgICBkb2VzIHNlcXVlbmNlIHRlc3QsIFNZTiBpcyB0cnVuY2F0ZWQsIGFuZCB0aHVzIHdlIGNvbnNpZGVyCiAJICAgaXQgYSBiYXJlIEFDSy4KIAotCSAgIElmIGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0LCB3ZSBzaWxlbnRseSBkcm9wIHRoaXMKLQkgICBiYXJlIEFDSy4gIE90aGVyd2lzZSwgd2UgY3JlYXRlIGFuIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uICBCb3RoCi0JICAgZW5kcyAobGlzdGVuaW5nIHNvY2tldHMpIGFjY2VwdCB0aGUgbmV3IGluY29taW5nIGNvbm5lY3Rpb24gYW5kIHRyeQotCSAgIHRvIHRhbGsgdG8gZWFjaCBvdGhlci4gOC0pCisJICAgQm90aCBlbmRzIChsaXN0ZW5pbmcgc29ja2V0cykgYWNjZXB0IHRoZSBuZXcgaW5jb21pbmcKKwkgICBjb25uZWN0aW9uIGFuZCB0cnkgdG8gdGFsayB0byBlYWNoIG90aGVyLiA4LSkKIAogCSAgIE5vdGU6IFRoaXMgY2FzZSBpcyBib3RoIGhhcm1sZXNzLCBhbmQgcmFyZS4gIFBvc3NpYmlsaXR5IGlzIGFib3V0IHRoZQogCSAgIHNhbWUgYXMgdXMgZGlzY292ZXJpbmcgaW50ZWxsaWdlbnQgbGlmZSBvbiBhbm90aGVyIHBsYW50IHRvbW9ycm93LgpAQCAtNjQwLDEzICs2NDAsNiBAQAogCQlpZiAoIShmbGcgJiBUQ1BfRkxBR19BQ0spKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJLyogSWYgVENQX0RFRkVSX0FDQ0VQVCBpcyBzZXQsIGRyb3AgYmFyZSBBQ0suICovCi0JCWlmIChpbmV0X2NzayhzayktPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0ICYmCi0JCSAgICBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPT0gdGNwX3JzayhyZXEpLT5yY3ZfaXNuICsgMSkgewotCQkJaW5ldF9yc2socmVxKS0+YWNrZWQgPSAxOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQogCQkvKiBPSywgQUNLIGlzIHZhbGlkLCBjcmVhdGUgYmlnIHNvY2tldCBhbmQKIAkJICogZmVlZCB0aGlzIHNlZ21lbnQgdG8gaXQuIEl0IHdpbGwgcmVwZWF0IGFsbAogCQkgKiB0aGUgdGVzdHMuIFRISVMgU0VHTUVOVCBNVVNUIE1PVkUgU09DS0VUIFRPCkBAIC02ODUsNyArNjc4LDI0IEBACiAJCWluZXRfY3NrX3JlcXNrX3F1ZXVlX3VubGluayhzaywgcmVxLCBwcmV2KTsKIAkJaW5ldF9jc2tfcmVxc2tfcXVldWVfcmVtb3ZlZChzaywgcmVxKTsKIAotCQlpbmV0X2Nza19yZXFza19xdWV1ZV9hZGQoc2ssIHJlcSwgY2hpbGQpOworCQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCAmJgorCQkgICAgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxID09IHRjcF9yc2socmVxKS0+cmN2X2lzbiArIDEpIHsKKworCQkJLyogdGhlIGFjY2VwdCBxdWV1ZSBoYW5kbGluZyBpcyBkb25lIGlzIGVzdCByZWN2IHNsb3cKKwkJCSAqIHBhdGggc28gbGV0cyBtYWtlIHN1cmUgdG8gc3RhcnQgdGhlcmUKKwkJCSAqLworCQkJdGNwX3NrKGNoaWxkKS0+cHJlZF9mbGFncyA9IDA7CisJCQlzb2NrX2hvbGQoc2spOworCQkJc29ja19ob2xkKGNoaWxkKTsKKwkJCXRjcF9zayhjaGlsZCktPmRlZmVyX3RjcF9hY2NlcHQubGlzdGVuX3NrID0gc2s7CisJCQl0Y3Bfc2soY2hpbGQpLT5kZWZlcl90Y3BfYWNjZXB0LnJlcXVlc3QgPSByZXE7CisKKwkJCWluZXRfY3NrX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcihjaGlsZCwKKwkJCQkJCSAgICAgICBpbmV0X2NzayhzayktPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0ICogSFopOworCQl9IGVsc2UgeworCQkJaW5ldF9jc2tfcmVxc2tfcXVldWVfYWRkKHNrLCByZXEsIGNoaWxkKTsKKwkJfQorCiAJCXJldHVybiBjaGlsZDsKIAogCWxpc3Rlbl9vdmVyZmxvdzoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBlZDc1MGY5Li5kZWJmMjM1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAkJICoKIAkJICogUmVsYXggV2lsbCBSb2JpbnNvbi4KIAkJICovCi0JCW5ld193aW4gPSBjdXJfd2luOworCQluZXdfd2luID0gQUxJR04oY3VyX3dpbiwgMSA8PCB0cC0+cnhfb3B0LnJjdl93c2NhbGUpOwogCX0KIAl0cC0+cmN2X3duZCA9IG5ld193aW47CiAJdHAtPnJjdl93dXAgPSB0cC0+cmN2X254dDsKQEAgLTk5OCw3ICs5OTgsNyBAQAogCXhtaXRfc2l6ZV9nb2FsID0gbXNzX25vdzsKIAogCWlmIChkb2luZ190c28pIHsKLQkJeG1pdF9zaXplX2dvYWwgPSAoNjU1MzUgLQorCQl4bWl0X3NpemVfZ29hbCA9ICgoc2stPnNrX2dzb19tYXhfc2l6ZSAtIDEpIC0KIAkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0KIAkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiAtCiAJCQkJICB0cC0+dGNwX2hlYWRlcl9sZW4pOwpAQCAtMTAzNSw2ICsxMDM1LDEzIEBACiAgKiBpbnRyb2R1Y2luZyBNU1Mgb2RkaXRpZXMgdG8gc2VnbWVudCBib3VuZGFyaWVzLiBJbiByYXJlIGNhc2VzIHdoZXJlCiAgKiBtc3Nfbm93ICE9IG1zc19jYWNoZSwgd2Ugd2lsbCByZXF1ZXN0IGNhbGxlciB0byBjcmVhdGUgYSBzbWFsbCBza2IKICAqIHBlciBpbnB1dCBza2Igd2hpY2ggY291bGQgYmUgbW9zdGx5IGF2b2lkZWQgaGVyZSAoaWYgZGVzaXJlZCkuCisgKgorICogV2UgZXhwbGljaXRseSB3YW50IHRvIGNyZWF0ZSBhIHJlcXVlc3QgZm9yIHNwbGl0dGluZyB3cml0ZSBxdWV1ZSB0YWlsCisgKiB0byBhIHNtYWxsIHNrYiBmb3IgTmFnbGUgcHVycG9zZXMgd2hpbGUgYXZvaWRpbmcgdW5uZWNlc3NhcnkgbW9kdWxvcywKKyAqIHRodXMgYWxsIHRoZSBjb21wbGV4aXR5IChjd25kX2xlbiBpcyBhbHdheXMgTVNTIG11bHRpcGxlIHdoaWNoIHdlCisgKiByZXR1cm4gd2hlbmV2ZXIgYWxsb3dlZCBieSB0aGUgb3RoZXIgZmFjdG9ycykuIEJhc2ljYWxseSB3ZSBuZWVkIHRoZQorICogbW9kdWxvIG9ubHkgd2hlbiB0aGUgcmVjZWl2ZXIgd2luZG93IGFsb25lIGlzIHRoZSBsaW1pdGluZyBmYWN0b3Igb3IKKyAqIHdoZW4gd2Ugd291bGQgYmUgYWxsb3dlZCB0byBzZW5kIHRoZSBzcGxpdC1kdWUtdG8tTmFnbGUgc2tiIGZ1bGx5LgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9tc3Nfc3BsaXRfcG9pbnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQl1bnNpZ25lZCBpbnQgbXNzX25vdywgdW5zaWduZWQgaW50IGN3bmQpCkBAIC0xMDQ4LDEwICsxMDU1LDExIEBACiAJaWYgKGxpa2VseShjd25kX2xlbiA8PSB3aW5kb3cgJiYgc2tiICE9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKSkpCiAJCXJldHVybiBjd25kX2xlbjsKIAotCWlmIChza2IgPT0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spICYmIGN3bmRfbGVuIDw9IHNrYi0+bGVuKQorCW5lZWRlZCA9IG1pbihza2ItPmxlbiwgd2luZG93KTsKKworCWlmIChjd25kX2xlbiA8PSBuZWVkZWQpCiAJCXJldHVybiBjd25kX2xlbjsKIAotCW5lZWRlZCA9IG1pbihza2ItPmxlbiwgd2luZG93KTsKIAlyZXR1cm4gbmVlZGVkIC0gbmVlZGVkICUgbXNzX25vdzsKIH0KIApAQCAtMTI3NCw3ICsxMjgyLDcgQEAKIAlsaW1pdCA9IG1pbihzZW5kX3dpbiwgY29uZ193aW4pOwogCiAJLyogSWYgYSBmdWxsLXNpemVkIFRTTyBza2IgY2FuIGJlIHNlbnQsIGRvIGl0LiAqLwotCWlmIChsaW1pdCA+PSA2NTUzNikKKwlpZiAobGltaXQgPj0gc2stPnNrX2dzb19tYXhfc2l6ZSkKIAkJZ290byBzZW5kX25vdzsKIAogCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikgewpAQCAtMTgwMCw2ICsxODA4LDkgQEAKIAlpZiAoIWxvc3QpCiAJCXJldHVybjsKIAorCWlmICh0Y3BfaXNfcmVubyh0cCkpCisJCXRjcF9saW1pdF9yZW5vX3NhY2tlZCh0cCk7CisKIAl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKIAogCS8qIERvbid0IG11Y2sgd2l0aCB0aGUgY29uZ2VzdGlvbiB3aW5kb3cgaGVyZS4KQEAgLTIyMjUsNyArMjIzNiwxMSBAQAogCiAJLyogUkZDMTMyMzogVGhlIHdpbmRvdyBpbiBTWU4gJiBTWU4vQUNLIHNlZ21lbnRzIGlzIG5ldmVyIHNjYWxlZC4gKi8KIAl0aC0+d2luZG93ID0gaHRvbnMobWluKHJlcS0+cmN2X3duZCwgNjU1MzVVKSk7Ci0KKyNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVMKKwlpZiAodW5saWtlbHkocmVxLT5jb29raWVfdHMpKQorCQlUQ1BfU0tCX0NCKHNrYiktPndoZW4gPSBjb29raWVfaW5pdF90aW1lc3RhbXAocmVxKTsKKwllbHNlCisjZW5kaWYKIAlUQ1BfU0tCX0NCKHNrYiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKIAl0Y3Bfc3luX2J1aWxkX29wdGlvbnMoKF9fYmUzMiAqKSh0aCArIDEpLCBkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpLCBpcmVxLT50c3RhbXBfb2ssCiAJCQkgICAgICBpcmVxLT5zYWNrX29rLCBpcmVxLT53c2NhbGVfb2ssIGlyZXEtPnJjdl93c2NhbGUsCkBAIC0yNTYwLDYgKzI1NzUsNyBAQAogCX0KIH0KIAorRVhQT1JUX1NZTUJPTCh0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KTsKIEVYUE9SVF9TWU1CT0wodGNwX2Nvbm5lY3QpOwogRVhQT1JUX1NZTUJPTCh0Y3BfbWFrZV9zeW5hY2spOwogRVhQT1JUX1NZTUJPTCh0Y3Bfc2ltcGxlX3JldHJhbnNtaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwppbmRleCA4N2RkNWJmLi4xYzUwOTU5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfcHJvYmUuYworKysgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJCT0ga3RpbWVfdG9fdGltZXNwZWMoa3RpbWVfc3ViKHAtPnRzdGFtcCwgdGNwX3Byb2JlLnN0YXJ0KSk7CiAKIAlyZXR1cm4gc25wcmludGYodGJ1ZiwgbiwKLQkJCSIlbHUuJTA5bHUgJWQuJWQuJWQuJWQ6JXUgJWQuJWQuJWQuJWQ6JXUiCisJCQkiJWx1LiUwOWx1ICIgTklQUVVBRF9GTVQgIjoldSAiIE5JUFFVQURfRk1UICI6JXUiCiAJCQkiICVkICUjeCAlI3ggJXUgJXUgJXUgJXVcbiIsCiAJCQkodW5zaWduZWQgbG9uZykgdHYudHZfc2VjLAogCQkJKHVuc2lnbmVkIGxvbmcpIHR2LnR2X25zZWMsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDgwM2Q3NTguLjRkZTY4Y2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0yOTksMTIgKzI5OSwyMCBAQAogCQkgKiB3ZSBjYW5ub3QgYWxsb3cgc3VjaCBiZWFzdHMgdG8gaGFuZyBpbmZpbml0ZWx5LgogCQkgKi8KICNpZmRlZiBUQ1BfREVCVUcKLQkJaWYgKDEpIHsKLQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIlRDUDogVHJlYXNvbiB1bmNsb2FrZWQhIFBlZXIgJXUuJXUuJXUuJXU6JXUvJXUgc2hyaW5rcyB3aW5kb3cgJXU6JXUuIFJlcGFpcmVkLlxuIiwKKwkJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCQlpZiAoc2stPnNrX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJUQ1A6IFRyZWFzb24gdW5jbG9ha2VkISBQZWVyICIgTklQUVVBRF9GTVQgIjoldS8ldSBzaHJpbmtzIHdpbmRvdyAldToldS4gUmVwYWlyZWQuXG4iLAogCQkJICAgICAgIE5JUFFVQUQoaW5ldC0+ZGFkZHIpLCBudG9ocyhpbmV0LT5kcG9ydCksCiAJCQkgICAgICAgaW5ldC0+bnVtLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOwogCQl9CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJCWVsc2UgaWYgKHNrLT5za19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIlRDUDogVHJlYXNvbiB1bmNsb2FrZWQhIFBlZXIgIiBOSVA2X0ZNVCAiOiV1LyV1IHNocmlua3Mgd2luZG93ICV1OiV1LiBSZXBhaXJlZC5cbiIsCisJCQkgICAgICAgTklQNihucC0+ZGFkZHIpLCBudG9ocyhpbmV0LT5kcG9ydCksCisJCQkgICAgICAgaW5ldC0+bnVtLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOworCQl9CisjZW5kaWYKICNlbmRpZgogCQlpZiAodGNwX3RpbWVfc3RhbXAgLSB0cC0+cmN2X3RzdGFtcCA+IFRDUF9SVE9fTUFYKSB7CiAJCQl0Y3Bfd3JpdGVfZXJyKHNrKTsKQEAgLTQ4MSw2ICs0ODksMTEgQEAKIAkJZ290byBkZWF0aDsKIAl9CiAKKwlpZiAodHAtPmRlZmVyX3RjcF9hY2NlcHQucmVxdWVzdCAmJiBzay0+c2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKSB7CisJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyk7CisJCWdvdG8gZGVhdGg7CisJfQorCiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfS0VFUE9QRU4pIHx8IHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0UpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90dW5uZWw0LmMgYi9uZXQvaXB2NC90dW5uZWw0LmMKaW5kZXggOTc4YjNmZC4uZDNiNzA5YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdHVubmVsNC5jCisrKyBiL25ldC9pcHY0L3R1bm5lbDQuYwpAQCAtMTM2LDYgKzEzNiw3IEBACiAJLmhhbmRsZXIJPQl0dW5uZWw0X3JjdiwKIAkuZXJyX2hhbmRsZXIJPQl0dW5uZWw0X2VyciwKIAkubm9fcG9saWN5CT0JMSwKKwkubmV0bnNfb2sJPQkxLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQpAQCAtMTQzLDYgKzE0NCw3IEBACiAJLmhhbmRsZXIJPQl0dW5uZWw2NF9yY3YsCiAJLmVycl9oYW5kbGVyCT0JdHVubmVsNjRfZXJyLAogCS5ub19wb2xpY3kJPQkxLAorCS5uZXRuc19vawk9CTEsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggN2VhMWI2Ny4uYjA1M2FjNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTEzNywyOSArMTM3LDI4IEBACiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKIAlza19mb3JfZWFjaChzaywgbm9kZSwgJnVkcHRhYmxlW251bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pCi0JCWlmIChzay0+c2tfbmV0ID09IG5ldCAmJiBzay0+c2tfaGFzaCA9PSBudW0pCisJCWlmIChuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpICYmIHNrLT5za19oYXNoID09IG51bSkKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCiAvKioKLSAqICBfX3VkcF9saWJfZ2V0X3BvcnQgIC0gIFVEUC8tTGl0ZSBwb3J0IGxvb2t1cCBmb3IgSVB2NCBhbmQgSVB2NgorICogIHVkcF9saWJfZ2V0X3BvcnQgIC0gIFVEUC8tTGl0ZSBwb3J0IGxvb2t1cCBmb3IgSVB2NCBhbmQgSVB2NgogICoKICAqICBAc2s6ICAgICAgICAgIHNvY2tldCBzdHJ1Y3QgaW4gcXVlc3Rpb24KICAqICBAc251bTogICAgICAgIHBvcnQgbnVtYmVyIHRvIGxvb2sgdXAKLSAqICBAdWRwdGFibGU6ICAgIGhhc2ggbGlzdCB0YWJsZSwgbXVzdCBiZSBvZiBVRFBfSFRBQkxFX1NJWkUKICAqICBAc2FkZHJfY29tcDogIEFGLWRlcGVuZGVudCBjb21wYXJpc29uIG9mIGJvdW5kIGxvY2FsIElQIGFkZHJlc3NlcwogICovCi1pbnQgX191ZHBfbGliX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKLQkJICAgICAgIHN0cnVjdCBobGlzdF9oZWFkIHVkcHRhYmxlW10sCitpbnQgdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCiAJCSAgICAgICBpbnQgKCpzYWRkcl9jb21wKShjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLAogCQkJCQkgY29uc3Qgc3RydWN0IHNvY2sgKnNrMiApICAgICkKIHsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqdWRwdGFibGUgPSBzay0+c2tfcHJvdC0+aC51ZHBfaGFzaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3Qgc29jayAqc2syOwogCWludCAgICBlcnJvciA9IDE7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAl3cml0ZV9sb2NrX2JoKCZ1ZHBfaGFzaF9sb2NrKTsKIApAQCAtMjE5LDcgKzIxOCw3IEBACiAJCXNrX2Zvcl9lYWNoKHNrMiwgbm9kZSwgaGVhZCkKIAkJCWlmIChzazItPnNrX2hhc2ggPT0gc251bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKIAkJCSAgICBzazIgIT0gc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLQkJCSAgICBzazItPnNrX25ldCA9PSBuZXQJCQkJICAgICAmJgorCQkJICAgIG5ldF9lcShzb2NrX25ldChzazIpLCBuZXQpCQkJICAgICAmJgogCQkJICAgICghc2syLT5za19yZXVzZSAgICAgICAgfHwgIXNrLT5za19yZXVzZSkgICAgICAgICAmJgogCQkJICAgICghc2syLT5za19ib3VuZF9kZXZfaWYgfHwgIXNrLT5za19ib3VuZF9kZXZfaWYKIAkJCSAgICAgfHwgc2syLT5za19ib3VuZF9kZXZfaWYgPT0gc2stPnNrX2JvdW5kX2Rldl9pZikgJiYKQEAgLTIzMiw3ICsyMzEsNyBAQAogCWlmIChza191bmhhc2hlZChzaykpIHsKIAkJaGVhZCA9ICZ1ZHB0YWJsZVtzbnVtICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXTsKIAkJc2tfYWRkX25vZGUoc2ssIGhlYWQpOwotCQlzb2NrX3Byb3RfaW51c2VfYWRkKHNrLT5za19wcm90LCAxKTsKKwkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAxKTsKIAl9CiAJZXJyb3IgPSAwOwogZmFpbDoKQEAgLTI0MCwxMyArMjM5LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCB1ZHBfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAotCQkJaW50ICgqc2NtcCkoY29uc3Qgc3RydWN0IHNvY2sgKiwgY29uc3Qgc3RydWN0IHNvY2sgKikpCi17Ci0JcmV0dXJuICBfX3VkcF9saWJfZ2V0X3BvcnQoc2ssIHNudW0sIHVkcF9oYXNoLCBzY21wKTsKLX0KLQotaW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCitzdGF0aWMgaW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDEgPSBpbmV0X3NrKHNrMSksICppbmV0MiA9IGluZXRfc2soc2syKTsKIApAQCAtMjU1LDkgKzI0OCw5IEBACiAJCSAgIGluZXQxLT5yY3Zfc2FkZHIgPT0gaW5ldDItPnJjdl9zYWRkciAgICAgICkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB1ZHBfdjRfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQoraW50IHVkcF92NF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCiB7Ci0JcmV0dXJuIHVkcF9nZXRfcG9ydChzaywgc251bSwgaXB2NF9yY3Zfc2FkZHJfZXF1YWwpOworCXJldHVybiB1ZHBfbGliX2dldF9wb3J0KHNrLCBzbnVtLCBpcHY0X3Jjdl9zYWRkcl9lcXVhbCk7CiB9CiAKIC8qIFVEUCBpcyBuZWFybHkgYWx3YXlzIHdpbGRjYXJkcyBvdXQgdGhlIHdhem9vLCBpdCBtYWtlcyBubyBzZW5zZSB0byB0cnkKQEAgLTI3Niw3ICsyNjksNyBAQAogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdWRwdGFibGVbaG51bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pIHsKIAkJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCi0JCWlmIChzay0+c2tfbmV0ID09IG5ldCAmJiBzay0+c2tfaGFzaCA9PSBobnVtICYmCisJCWlmIChuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpICYmIHNrLT5za19oYXNoID09IGhudW0gJiYKIAkJCQkhaXB2Nl9vbmx5X3NvY2soc2spKSB7CiAJCQlpbnQgc2NvcmUgPSAoc2stPnNrX2ZhbWlseSA9PSBQRl9JTkVUID8gMSA6IDApOwogCQkJaWYgKGluZXQtPnJjdl9zYWRkcikgewpAQCAtMzY0LDcgKzM1Nyw3IEBACiAJaW50IGhhcmRlcnI7CiAJaW50IGVycjsKIAotCXNrID0gX191ZHA0X2xpYl9sb29rdXAoc2tiLT5kZXYtPm5kX25ldCwgaXBoLT5kYWRkciwgdWgtPmRlc3QsCisJc2sgPSBfX3VkcDRfbGliX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgaXBoLT5kYWRkciwgdWgtPmRlc3QsCiAJCQlpcGgtPnNhZGRyLCB1aC0+c291cmNlLCBza2ItPmRldi0+aWZpbmRleCwgdWRwdGFibGUpOwogCWlmIChzayA9PSBOVUxMKSB7CiAJCUlDTVBfSU5DX1NUQVRTX0JIKElDTVBfTUlCX0lORVJST1JTKTsKQEAgLTYxNCw3ICs2MDcsNyBAQAogCiAJaXBjLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAJaWYgKG1zZy0+bXNnX2NvbnRyb2xsZW4pIHsKLQkJZXJyID0gaXBfY21zZ19zZW5kKG1zZywgJmlwYyk7CisJCWVyciA9IGlwX2Ntc2dfc2VuZChzb2NrX25ldChzayksIG1zZywgJmlwYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlpZiAoaXBjLm9wdCkKQEAgLTY2Myw3ICs2NTYsNyBAQAogCQkJCQkgICAgICAgeyAuc3BvcnQgPSBpbmV0LT5zcG9ydCwKIAkJCQkJCSAuZHBvcnQgPSBkcG9ydCB9IH0gfTsKIAkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKLQkJZXJyID0gaXBfcm91dGVfb3V0cHV0X2Zsb3coJmluaXRfbmV0LCAmcnQsICZmbCwgc2ssIDEpOworCQllcnIgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksICZydCwgJmZsLCBzaywgMSk7CiAJCWlmIChlcnIpIHsKIAkJCWlmIChlcnIgPT0gLUVORVRVTlJFQUNIKQogCQkJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CkBAIC0xMTg4LDcgKzExODEsNyBAQAogCWlmIChydC0+cnRfZmxhZ3MgJiAoUlRDRl9CUk9BRENBU1R8UlRDRl9NVUxUSUNBU1QpKQogCQlyZXR1cm4gX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHNrYiwgdWgsIHNhZGRyLCBkYWRkciwgdWRwdGFibGUpOwogCi0Jc2sgPSBfX3VkcDRfbGliX2xvb2t1cChza2ItPmRldi0+bmRfbmV0LCBzYWRkciwgdWgtPnNvdXJjZSwgZGFkZHIsCisJc2sgPSBfX3VkcDRfbGliX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgc2FkZHIsIHVoLT5zb3VyY2UsIGRhZGRyLAogCQkJdWgtPmRlc3QsIGluZXRfaWlmKHNrYiksIHVkcHRhYmxlKTsKIAogCWlmIChzayAhPSBOVUxMKSB7CkBAIC0xMjI4LDcgKzEyMjEsNyBAQAogCXJldHVybiAwOwogCiBzaG9ydF9wYWNrZXQ6Ci0JTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiVURQJXM6IHNob3J0IHBhY2tldDogRnJvbSAldS4ldS4ldS4ldToldSAlZC8lZCB0byAldS4ldS4ldS4ldToldVxuIiwKKwlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJVRFAlczogc2hvcnQgcGFja2V0OiBGcm9tICIgTklQUVVBRF9GTVQgIjoldSAlZC8lZCB0byAiIE5JUFFVQURfRk1UICI6JXVcbiIsCiAJCSAgICAgICBwcm90byA9PSBJUFBST1RPX1VEUExJVEUgPyAiLUxpdGUiIDogIiIsCiAJCSAgICAgICBOSVBRVUFEKHNhZGRyKSwKIAkJICAgICAgIG50b2hzKHVoLT5zb3VyY2UpLApAQCAtMTI0Myw3ICsxMjM2LDcgQEAKIAkgKiBSRkMxMTIyOiBPSy4gIERpc2NhcmRzIHRoZSBiYWQgcGFja2V0IHNpbGVudGx5IChhcyBmYXIgYXMKIAkgKiB0aGUgbmV0d29yayBpcyBjb25jZXJuZWQsIGFueXdheSkgYXMgcGVyIDQuMS4zLjQgKE1VU1QpLgogCSAqLwotCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIlVEUCVzOiBiYWQgY2hlY2tzdW0uIEZyb20gJWQuJWQuJWQuJWQ6JWQgdG8gJWQuJWQuJWQuJWQ6JWQgdWxlbiAlZFxuIiwKKwlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJVRFAlczogYmFkIGNoZWNrc3VtLiBGcm9tICIgTklQUVVBRF9GTVQgIjoldSB0byAiIE5JUFFVQURfRk1UICI6JXUgdWxlbiAlZFxuIiwKIAkJICAgICAgIHByb3RvID09IElQUFJPVE9fVURQTElURSA/ICItTGl0ZSIgOiAiIiwKIAkJICAgICAgIE5JUFFVQUQoc2FkZHIpLAogCQkgICAgICAgbnRvaHModWgtPnNvdXJjZSksCkBAIC0xNDc0LDggKzE0NjcsNiBAQAogCiB9CiAKLURFRklORV9QUk9UT19JTlVTRSh1ZHApCi0KIHN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHsKIAkubmFtZQkJICAgPSAiVURQIiwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC0xNDk4LDExICsxNDg5LDExIEBACiAJLnN5c2N0bF93bWVtCSAgID0gJnN5c2N0bF91ZHBfd21lbV9taW4sCiAJLnN5c2N0bF9ybWVtCSAgID0gJnN5c2N0bF91ZHBfcm1lbV9taW4sCiAJLm9ial9zaXplCSAgID0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksCisJLmgudWRwX2hhc2gJICAgPSB1ZHBfaGFzaCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3VkcF9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF91ZHBfZ2V0c29ja29wdCwKICNlbmRpZgotCVJFRl9QUk9UT19JTlVTRSh1ZHApCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE1MTIsMTAgKzE1MDMsMTMgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHVkcF9pdGVyX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCWZvciAoc3RhdGUtPmJ1Y2tldCA9IDA7IHN0YXRlLT5idWNrZXQgPCBVRFBfSFRBQkxFX1NJWkU7ICsrc3RhdGUtPmJ1Y2tldCkgewogCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAkJc2tfZm9yX2VhY2goc2ssIG5vZGUsIHN0YXRlLT5oYXNodGFibGUgKyBzdGF0ZS0+YnVja2V0KSB7CisJCQlpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpCisJCQkJY29udGludWU7CiAJCQlpZiAoc2stPnNrX2ZhbWlseSA9PSBzdGF0ZS0+ZmFtaWx5KQogCQkJCWdvdG8gZm91bmQ7CiAJCX0KQEAgLTE1MjgsMTIgKzE1MjIsMTMgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdWRwX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHVkcF9pdGVyX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCWRvIHsKIAkJc2sgPSBza19uZXh0KHNrKTsKIHRyeV9hZ2FpbjoKIAkJOwotCX0gd2hpbGUgKHNrICYmIHNrLT5za19mYW1pbHkgIT0gc3RhdGUtPmZhbWlseSk7CisJfSB3aGlsZSAoc2sgJiYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpIHx8IHNrLT5za19mYW1pbHkgIT0gc3RhdGUtPmZhbWlseSkpOwogCiAJaWYgKCFzayAmJiArK3N0YXRlLT5idWNrZXQgPCBVRFBfSFRBQkxFX1NJWkUpIHsKIAkJc2sgPSBza19oZWFkKHN0YXRlLT5oYXNodGFibGUgKyBzdGF0ZS0+YnVja2V0KTsKQEAgLTE1NTYsMTQgKzE1NTEsMTQgQEAKIAlfX2FjcXVpcmVzKHVkcF9oYXNoX2xvY2spCiB7CiAJcmVhZF9sb2NrKCZ1ZHBfaGFzaF9sb2NrKTsKLQlyZXR1cm4gKnBvcyA/IHVkcF9nZXRfaWR4KHNlcSwgKnBvcy0xKSA6ICh2b2lkICopMTsKKwlyZXR1cm4gKnBvcyA/IHVkcF9nZXRfaWR4KHNlcSwgKnBvcy0xKSA6IFNFUV9TVEFSVF9UT0tFTjsKIH0KIAogc3RhdGljIHZvaWQgKnVkcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCi0JaWYgKHYgPT0gKHZvaWQgKikxKQorCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2sgPSB1ZHBfZ2V0X2lkeChzZXEsIDApOwogCWVsc2UKIAkJc2sgPSB1ZHBfZ2V0X25leHQoc2VxLCB2KTsKQEAgLTE1ODEsNDcgKzE1NzYsMzYgQEAKIHN0YXRpYyBpbnQgdWRwX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB1ZHBfc2VxX2FmaW5mbyAqYWZpbmZvID0gUERFKGlub2RlKS0+ZGF0YTsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKLQlpbnQgcmMgPSAtRU5PTUVNOwotCXN0cnVjdCB1ZHBfaXRlcl9zdGF0ZSAqcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHVkcF9pdGVyX3N0YXRlICpzOworCWludCBlcnI7CiAKLQlpZiAoIXMpCi0JCWdvdG8gb3V0OworCWVyciA9IHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJmFmaW5mby0+c2VxX29wcywKKwkJCSAgIHNpemVvZihzdHJ1Y3QgdWRwX2l0ZXJfc3RhdGUpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXMgPSAoKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGU7CiAJcy0+ZmFtaWx5CQk9IGFmaW5mby0+ZmFtaWx5OwogCXMtPmhhc2h0YWJsZQkJPSBhZmluZm8tPmhhc2h0YWJsZTsKLQlzLT5zZXFfb3BzLnN0YXJ0CT0gdWRwX3NlcV9zdGFydDsKLQlzLT5zZXFfb3BzLm5leHQJCT0gdWRwX3NlcV9uZXh0OwotCXMtPnNlcV9vcHMuc2hvdwkJPSBhZmluZm8tPnNlcV9zaG93OwotCXMtPnNlcV9vcHMuc3RvcAkJPSB1ZHBfc2VxX3N0b3A7Ci0KLQlyYyA9IHNlcV9vcGVuKGZpbGUsICZzLT5zZXFfb3BzKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2tmcmVlOwotCi0Jc2VxCSAgICAgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc2VxLT5wcml2YXRlID0gczsKLW91dDoKLQlyZXR1cm4gcmM7Ci1vdXRfa2ZyZWU6Ci0Ja2ZyZWUocyk7Ci0JZ290byBvdXQ7CisJcmV0dXJuIGVycjsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgdWRwX3Byb2NfcmVnaXN0ZXIoc3RydWN0IHVkcF9zZXFfYWZpbmZvICphZmluZm8pCitpbnQgdWRwX3Byb2NfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gKmFmaW5mbykKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAJaW50IHJjID0gMDsKIAotCWlmICghYWZpbmZvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlhZmluZm8tPnNlcV9mb3BzLT5vd25lcgkJPSBhZmluZm8tPm93bmVyOwotCWFmaW5mby0+c2VxX2ZvcHMtPm9wZW4JCT0gdWRwX3NlcV9vcGVuOwotCWFmaW5mby0+c2VxX2ZvcHMtPnJlYWQJCT0gc2VxX3JlYWQ7Ci0JYWZpbmZvLT5zZXFfZm9wcy0+bGxzZWVrCT0gc2VxX2xzZWVrOwotCWFmaW5mby0+c2VxX2ZvcHMtPnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9wcml2YXRlOworCWFmaW5mby0+c2VxX2ZvcHMub3BlbgkJPSB1ZHBfc2VxX29wZW47CisJYWZpbmZvLT5zZXFfZm9wcy5yZWFkCQk9IHNlcV9yZWFkOworCWFmaW5mby0+c2VxX2ZvcHMubGxzZWVrCQk9IHNlcV9sc2VlazsKKwlhZmluZm8tPnNlcV9mb3BzLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQ7CiAKLQlwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCBhZmluZm8tPm5hbWUsIFNfSVJVR08sIGFmaW5mby0+c2VxX2ZvcHMpOworCWFmaW5mby0+c2VxX29wcy5zdGFydAkJPSB1ZHBfc2VxX3N0YXJ0OworCWFmaW5mby0+c2VxX29wcy5uZXh0CQk9IHVkcF9zZXFfbmV4dDsKKwlhZmluZm8tPnNlcV9vcHMuc3RvcAkJPSB1ZHBfc2VxX3N0b3A7CisKKwlwID0gcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCBhZmluZm8tPm5hbWUsIFNfSVJVR08sICZhZmluZm8tPnNlcV9mb3BzKTsKIAlpZiAocCkKIAkJcC0+ZGF0YSA9IGFmaW5mbzsKIAllbHNlCkBAIC0xNjI5LDEyICsxNjEzLDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgdWRwX3Byb2NfdW5yZWdpc3RlcihzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gKmFmaW5mbykKK3ZvaWQgdWRwX3Byb2NfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1ZHBfc2VxX2FmaW5mbyAqYWZpbmZvKQogewotCWlmICghYWZpbmZvKQotCQlyZXR1cm47Ci0JcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgYWZpbmZvLT5uYW1lKTsKLQltZW1zZXQoYWZpbmZvLT5zZXFfZm9wcywgMCwgc2l6ZW9mKCphZmluZm8tPnNlcV9mb3BzKSk7CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgYWZpbmZvLT5uYW1lKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNjczLDI0ICsxNjU0LDQxIEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRwNF9zZXFfZm9wczsKIHN0YXRpYyBzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gdWRwNF9zZXFfYWZpbmZvID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidWRwIiwKIAkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLmhhc2h0YWJsZQk9IHVkcF9oYXNoLAotCS5zZXFfc2hvdwk9IHVkcDRfc2VxX3Nob3csCi0JLnNlcV9mb3BzCT0gJnVkcDRfc2VxX2ZvcHMsCisJLnNlcV9mb3BzCT0geworCQkub3duZXIJPQlUSElTX01PRFVMRSwKKwl9LAorCS5zZXFfb3BzCT0geworCQkuc2hvdwkJPSB1ZHA0X3NlcV9zaG93LAorCX0sCit9OworCitzdGF0aWMgaW50IHVkcDRfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIHVkcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnVkcDRfc2VxX2FmaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIHVkcDRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJdWRwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ1ZHA0X3NlcV9hZmluZm8pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVkcDRfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHVkcDRfcHJvY19pbml0X25ldCwKKwkuZXhpdCA9IHVkcDRfcHJvY19leGl0X25ldCwKIH07CiAKIGludCBfX2luaXQgdWRwNF9wcm9jX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gdWRwX3Byb2NfcmVnaXN0ZXIoJnVkcDRfc2VxX2FmaW5mbyk7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnVkcDRfbmV0X29wcyk7CiB9CiAKIHZvaWQgdWRwNF9wcm9jX2V4aXQodm9pZCkKIHsKLQl1ZHBfcHJvY191bnJlZ2lzdGVyKCZ1ZHA0X3NlcV9hZmluZm8pOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdWRwNF9uZXRfb3BzKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCkBAIC0xNzE3LDEyICsxNzE1LDEyIEBACiBFWFBPUlRfU1lNQk9MKHVkcF9oYXNoKTsKIEVYUE9SVF9TWU1CT0wodWRwX2hhc2hfbG9jayk7CiBFWFBPUlRfU1lNQk9MKHVkcF9pb2N0bCk7Ci1FWFBPUlRfU1lNQk9MKHVkcF9nZXRfcG9ydCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9wcm90KTsKIEVYUE9SVF9TWU1CT0wodWRwX3NlbmRtc2cpOwogRVhQT1JUX1NZTUJPTCh1ZHBfbGliX2dldHNvY2tvcHQpOwogRVhQT1JUX1NZTUJPTCh1ZHBfbGliX3NldHNvY2tvcHQpOwogRVhQT1JUX1NZTUJPTCh1ZHBfcG9sbCk7CitFWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0X3BvcnQpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIEVYUE9SVF9TWU1CT0wodWRwX3Byb2NfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwX2ltcGwuaCBiL25ldC9pcHY0L3VkcF9pbXBsLmgKaW5kZXggNmM1NTgyOGUuLjcyODhiZjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcF9pbXBsLmgKKysrIGIvbmV0L2lwdjQvdWRwX2ltcGwuaApAQCAtOCwxMSArOCw3IEBACiBleHRlcm4gaW50ICAJX191ZHA0X2xpYl9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IGhsaXN0X2hlYWQgW10sIGludCApOwogZXh0ZXJuIHZvaWQgCV9fdWRwNF9saWJfZXJyKHN0cnVjdCBza19idWZmICosIHUzMiwgc3RydWN0IGhsaXN0X2hlYWQgW10pOwogCi1leHRlcm4gaW50CV9fdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCi0JCQkJICAgc3RydWN0IGhsaXN0X2hlYWQgdWRwdGFibGVbXSwKLQkJCQkgICBpbnQgKCopKGNvbnN0IHN0cnVjdCBzb2NrKixjb25zdCBzdHJ1Y3Qgc29jayopKTsKLWV4dGVybiBpbnQJaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKiwgY29uc3Qgc3RydWN0IHNvY2sgKik7Ci0KK2V4dGVybiBpbnQJdWRwX3Y0X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSk7CiAKIGV4dGVybiBpbnQJdWRwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwbGl0ZS5jIGIvbmV0L2lwdjQvdWRwbGl0ZS5jCmluZGV4IDAwMWI4ODEuLjcyY2UyNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcGxpdGUuYworKysgYi9uZXQvaXB2NC91ZHBsaXRlLmMKQEAgLTE3LDE3ICsxNyw2IEBACiAKIHN0cnVjdCBobGlzdF9oZWFkIAl1ZHBsaXRlX2hhc2hbVURQX0hUQUJMRV9TSVpFXTsKIAotaW50IHVkcGxpdGVfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBwLAotCQkgICAgIGludCAoKmMpKGNvbnN0IHN0cnVjdCBzb2NrICosIGNvbnN0IHN0cnVjdCBzb2NrICopKQotewotCXJldHVybiAgX191ZHBfbGliX2dldF9wb3J0KHNrLCBwLCB1ZHBsaXRlX2hhc2gsIGMpOwotfQotCi1zdGF0aWMgaW50IHVkcGxpdGVfdjRfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQotewotCXJldHVybiB1ZHBsaXRlX2dldF9wb3J0KHNrLCBzbnVtLCBpcHY0X3Jjdl9zYWRkcl9lcXVhbCk7Ci19Ci0KIHN0YXRpYyBpbnQgdWRwbGl0ZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gX191ZHA0X2xpYl9yY3Yoc2tiLCB1ZHBsaXRlX2hhc2gsIElQUFJPVE9fVURQTElURSk7CkBAIC00MiwxMCArMzEsOSBAQAogCS5oYW5kbGVyCT0gdWRwbGl0ZV9yY3YsCiAJLmVycl9oYW5kbGVyCT0gdWRwbGl0ZV9lcnIsCiAJLm5vX3BvbGljeQk9IDEsCisJLm5ldG5zX29rCT0gMSwKIH07CiAKLURFRklORV9QUk9UT19JTlVTRSh1ZHBsaXRlKQotCiBzdHJ1Y3QgcHJvdG8gCXVkcGxpdGVfcHJvdCA9IHsKIAkubmFtZQkJICAgPSAiVURQLUxpdGUiLAogCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKQEAgLTYzLDEzICs1MSwxMyBAQAogCS5iYWNrbG9nX3JjdgkgICA9IHVkcF9xdWV1ZV9yY3Zfc2tiLAogCS5oYXNoCQkgICA9IHVkcF9saWJfaGFzaCwKIAkudW5oYXNoCQkgICA9IHVkcF9saWJfdW5oYXNoLAotCS5nZXRfcG9ydAkgICA9IHVkcGxpdGVfdjRfZ2V0X3BvcnQsCisJLmdldF9wb3J0CSAgID0gdWRwX3Y0X2dldF9wb3J0LAogCS5vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLAorCS5oLnVkcF9oYXNoCSAgID0gdWRwbGl0ZV9oYXNoLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfdWRwX3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3VkcF9nZXRzb2Nrb3B0LAogI2VuZGlmCi0JUkVGX1BST1RPX0lOVVNFKHVkcGxpdGUpCiB9OwogCiBzdGF0aWMgc3RydWN0IGluZXRfcHJvdG9zdyB1ZHBsaXRlNF9wcm90b3N3ID0gewpAQCAtODMsMTUgKzcxLDQyIEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkcGxpdGU0X3NlcV9mb3BzOwogc3RhdGljIHN0cnVjdCB1ZHBfc2VxX2FmaW5mbyB1ZHBsaXRlNF9zZXFfYWZpbmZvID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidWRwbGl0ZSIsCiAJLmZhbWlseQkJPSBBRl9JTkVULAogCS5oYXNodGFibGUJPSB1ZHBsaXRlX2hhc2gsCi0JLnNlcV9zaG93CT0gdWRwNF9zZXFfc2hvdywKLQkuc2VxX2ZvcHMJPSAmdWRwbGl0ZTRfc2VxX2ZvcHMsCisJLnNlcV9mb3BzCT0geworCQkub3duZXIJPQlUSElTX01PRFVMRSwKKwl9LAorCS5zZXFfb3BzCT0geworCQkuc2hvdwkJPSB1ZHA0X3NlcV9zaG93LAorCX0sCiB9OworCitzdGF0aWMgaW50IHVkcGxpdGU0X3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiB1ZHBfcHJvY19yZWdpc3RlcihuZXQsICZ1ZHBsaXRlNF9zZXFfYWZpbmZvKTsKK30KKworc3RhdGljIHZvaWQgdWRwbGl0ZTRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJdWRwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ1ZHBsaXRlNF9zZXFfYWZpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1ZHBsaXRlNF9uZXRfb3BzID0geworCS5pbml0ID0gdWRwbGl0ZTRfcHJvY19pbml0X25ldCwKKwkuZXhpdCA9IHVkcGxpdGU0X3Byb2NfZXhpdF9uZXQsCit9OworCitzdGF0aWMgX19pbml0IGludCB1ZHBsaXRlNF9wcm9jX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdWRwbGl0ZTRfbmV0X29wcyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdWRwbGl0ZTRfcHJvY19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogdm9pZCBfX2luaXQgdWRwbGl0ZTRfcmVnaXN0ZXIodm9pZCkKQEAgLTEwNCwxOCArMTE5LDE1IEBACiAKIAlpbmV0X3JlZ2lzdGVyX3Byb3Rvc3coJnVkcGxpdGU0X3Byb3Rvc3cpOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlpZiAodWRwX3Byb2NfcmVnaXN0ZXIoJnVkcGxpdGU0X3NlcV9hZmluZm8pKSAvKiB1ZHBsaXRlNF9wcm9jX2luaXQoKSAqLwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgL3Byb2MhXG4iLCBfX0ZVTkNUSU9OX18pOwotI2VuZGlmCisJaWYgKHVkcGxpdGU0X3Byb2NfaW5pdCgpKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgL3Byb2MhXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogCiBvdXRfdW5yZWdpc3Rlcl9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZ1ZHBsaXRlX3Byb3QpOwogb3V0X3JlZ2lzdGVyX2VycjoKLQlwcmludGsoS0VSTl9DUklUICIlczogQ2Fubm90IGFkZCBVRFAtTGl0ZSBwcm90b2NvbC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IENhbm5vdCBhZGQgVURQLUxpdGUgcHJvdG9jb2wuXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIEVYUE9SVF9TWU1CT0wodWRwbGl0ZV9oYXNoKTsKIEVYUE9SVF9TWU1CT0wodWRwbGl0ZV9wcm90KTsKLUVYUE9SVF9TWU1CT0wodWRwbGl0ZV9nZXRfcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9tb2RlX2JlZXQuYyBiL25ldC9pcHY0L3hmcm00X21vZGVfYmVldC5jCmluZGV4IGI0NzAzMGIuLjljNzk4YWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X21vZGVfYmVldC5jCisrKyBiL25ldC9pcHY0L3hmcm00X21vZGVfYmVldC5jCkBAIC0zOSwxMyArMzksMTEgQEAKIHN0YXRpYyBpbnQgeGZybTRfYmVldF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwX2JlZXRfcGhkciAqcGg7Ci0Jc3RydWN0IGlwaGRyICppcGgsICp0b3BfaXBoOworCXN0cnVjdCBpcGhkciAqdG9wX2lwaDsKIAlpbnQgaGRybGVuLCBvcHRsZW47CiAKLQlpcGggPSBpcF9oZHIoc2tiKTsKLQogCWhkcmxlbiA9IDA7Ci0Jb3B0bGVuID0gaXBoLT5paGwgKiA0IC0gc2l6ZW9mKCppcGgpOworCW9wdGxlbiA9IFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+b3B0bGVuOwogCWlmICh1bmxpa2VseShvcHRsZW4pKQogCQloZHJsZW4gKz0gSVBWNF9CRUVUX1BITUFYTEVOIC0gKG9wdGxlbiAmIDQpOwogCkBAIC01MywxMSArNTEsMTIgQEAKIAkJCQkgICAgaGRybGVuKTsKIAlza2ItPm1hY19oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyICsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLT50cmFuc3BvcnRfaGVhZGVyID0gc2tiLT5uZXR3b3JrX2hlYWRlciArIHNpemVvZigqaXBoKTsKKwlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKCp0b3BfaXBoKTsKIAogCXhmcm00X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTsKIAotCXBoID0gKHN0cnVjdCBpcF9iZWV0X3BoZHIgKilfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpIC0gaGRybGVuKTsKKwlwaCA9IChzdHJ1Y3QgaXBfYmVldF9waGRyICopCisJCV9fc2tiX3B1bGwoc2tiLCBYRlJNX01PREVfU0tCX0NCKHNrYiktPmlobCAtIGhkcmxlbik7CiAKIAl0b3BfaXBoID0gaXBfaGRyKHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMgYi9uZXQvaXB2NC94ZnJtNF9tb2RlX3R1bm5lbC5jCmluZGV4IDhkZWU2MTcuLjU4NGU2ZDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKKysrIGIvbmV0L2lwdjQveGZybTRfbW9kZV90dW5uZWwuYwpAQCAtNDEsNyArNDEsNyBAQAogCXRvcF9pcGgtPmlobCA9IDU7CiAJdG9wX2lwaC0+dmVyc2lvbiA9IDQ7CiAKLQl0b3BfaXBoLT5wcm90b2NvbCA9IHgtPmlubmVyX21vZGUtPmFmaW5mby0+cHJvdG87CisJdG9wX2lwaC0+cHJvdG9jb2wgPSB4ZnJtX2FmMnByb3RvKHNrYi0+ZHN0LT5vcHMtPmZhbWlseSk7CiAKIAkvKiBEUyBkaXNjbG9zZWQgKi8KIAl0b3BfaXBoLT50b3MgPSBJTkVUX0VDTl9lbmNhcHN1bGF0ZShYRlJNX01PREVfU0tCX0NCKHNrYiktPnRvcywKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X291dHB1dC5jIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKaW5kZXggZDVhNThhOC4uOGMzMTgwYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKQEAgLTU2LDcgKzU2LDcgQEAKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0geC0+aW5uZXJfbW9kZS0+YWZpbmZvLT5leHRyYWN0X291dHB1dCh4LCBza2IpOworCWVyciA9IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoeCwgc2tiKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDEwZWQ3MDQuLmM2M2RlMGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAl4ZHN0ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDsKIAlpZiAoeGRzdC0+dS5ydC5pZGV2LT5kZXYgPT0gZGV2KSB7CiAJCXN0cnVjdCBpbl9kZXZpY2UgKmxvb3BiYWNrX2lkZXYgPQotCQkJaW5fZGV2X2dldChkZXYtPm5kX25ldC0+bG9vcGJhY2tfZGV2KTsKKwkJCWluX2Rldl9nZXQoZGV2X25ldChkZXYpLT5sb29wYmFja19kZXYpOwogCQlCVUdfT04oIWxvb3BiYWNrX2lkZXYpOwogCiAJCWRvIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCmluZGV4IGZkZWViZTYuLjA3NzM1ZWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKKysrIGIvbmV0L2lwdjQveGZybTRfc3RhdGUuYwpAQCAtNTIsMTAgKzUyLDEyIEBACiB7CiAJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAorCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+aWhsID0gc2l6ZW9mKCppcGgpOwogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+aWQgPSBpcGgtPmlkOwogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+ZnJhZ19vZmYgPSBpcGgtPmZyYWdfb2ZmOwogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+dG9zID0gaXBoLT50b3M7CiAJWEZSTV9NT0RFX1NLQl9DQihza2IpLT50dGwgPSBpcGgtPnR0bDsKKwlYRlJNX01PREVfU0tCX0NCKHNrYiktPm9wdGxlbiA9IGlwaC0+aWhsICogNCAtIHNpemVvZigqaXBoKTsKIAltZW1zZXQoWEZSTV9NT0RFX1NLQl9DQihza2IpLT5mbG93X2xibCwgMCwKIAkgICAgICAgc2l6ZW9mKFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+Zmxvd19sYmwpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvS2NvbmZpZyBiL25ldC9pcHY2L0tjb25maWcKaW5kZXggM2ZmYjAzMi4uNDI4MTRhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjICAgSVB2NiBhcyBtb2R1bGUgd2lsbCBjYXVzZSBhIENSQVNIIGlmIHlvdSB0cnkgdG8gdW5sb2FkIGl0Ci1jb25maWcgSVBWNgorbWVudWNvbmZpZyBJUFY2CiAJdHJpc3RhdGUgIlRoZSBJUHY2IHByb3RvY29sIgogCWRlZmF1bHQgbQogCS0tLWhlbHAtLS0KQEAgLTE5LDkgKzE5LDEwIEBACiAJICBUbyBjb21waWxlIHRoaXMgcHJvdG9jb2wgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlwdjYuCiAKK2lmIElQVjYKKwogY29uZmlnIElQVjZfUFJJVkFDWQogCWJvb2wgIklQdjY6IFByaXZhY3kgRXh0ZW5zaW9ucyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVBWNgogCS0tLWhlbHAtLS0KIAkgIFByaXZhY3kgRXh0ZW5zaW9ucyBmb3IgU3RhdGVsZXNzIEFkZHJlc3MgQXV0b2NvbmZpZ3VyYXRpb24gaW4gSVB2NgogCSAgc3VwcG9ydC4gIFdpdGggdGhpcyBvcHRpb24sIGFkZGl0aW9uYWwgcGVyaW9kaWNhbGx5LWFsdGVyIApAQCAtNDAsNyArNDEsNiBAQAogCiBjb25maWcgSVBWNl9ST1VURVJfUFJFRgogCWJvb2wgIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElQVjYKIAktLS1oZWxwLS0tCiAJICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlcgogCSAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgb2YgaG9zdHMKQEAgLTU5LDcgKzU5LDcgQEAKIAogY29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQUQKIAlib29sICJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQUQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBJUFY2ICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBleHBlcmltZW50YWwgc3VwcG9ydCBmb3Igb3B0aW1pc3RpYyBEdXBsaWNhdGUKIAkgIEFkZHJlc3MgRGV0ZWN0aW9uLiAgSXQgYWxsb3dzIGZvciBhdXRvY29uZmlndXJlZCBhZGRyZXNzZXMKQEAgLTY5LDcgKzY5LDYgQEAKIAogY29uZmlnIElORVQ2X0FICiAJdHJpc3RhdGUgIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uIgotCWRlcGVuZHMgb24gSVBWNgogCXNlbGVjdCBYRlJNCiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fSE1BQwpAQCAtODIsMTAgKzgxLDkgQEAKIAogY29uZmlnIElORVQ2X0VTUAogCXRyaXN0YXRlICJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24iCi0JZGVwZW5kcyBvbiBJUFY2CiAJc2VsZWN0IFhGUk0KIAlzZWxlY3QgQ1JZUFRPCi0Jc2VsZWN0IENSWVBUT19BRUFECisJc2VsZWN0IENSWVBUT19BVVRIRU5DCiAJc2VsZWN0IENSWVBUT19ITUFDCiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0NCQwpAQCAtOTgsNyArOTYsNiBAQAogCiBjb25maWcgSU5FVDZfSVBDT01QCiAJdHJpc3RhdGUgIklQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvbiIKLQlkZXBlbmRzIG9uIElQVjYKIAlzZWxlY3QgWEZSTQogCXNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTAogCXNlbGVjdCBDUllQVE8KQEAgLTExMSw3ICsxMDgsNyBAQAogCiBjb25maWcgSVBWNl9NSVA2CiAJdHJpc3RhdGUgIklQdjY6IE1vYmlsaXR5IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gSVBWNiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBYRlJNCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgSVB2NiBNb2JpbGl0eSBkZXNjcmliZWQgaW4gUkZDIDM3NzUuCkBAIC0xMjksNyArMTI2LDYgQEAKIAogY29uZmlnIElORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQKIAl0cmlzdGF0ZSAiSVB2NjogSVBzZWMgdHJhbnNwb3J0IG1vZGUiCi0JZGVwZW5kcyBvbiBJUFY2CiAJZGVmYXVsdCBJUFY2CiAJc2VsZWN0IFhGUk0KIAktLS1oZWxwLS0tCkBAIC0xMzksNyArMTM1LDYgQEAKIAogY29uZmlnIElORVQ2X1hGUk1fTU9ERV9UVU5ORUwKIAl0cmlzdGF0ZSAiSVB2NjogSVBzZWMgdHVubmVsIG1vZGUiCi0JZGVwZW5kcyBvbiBJUFY2CiAJZGVmYXVsdCBJUFY2CiAJc2VsZWN0IFhGUk0KIAktLS1oZWxwLS0tCkBAIC0xNDksNyArMTQ0LDYgQEAKIAogY29uZmlnIElORVQ2X1hGUk1fTU9ERV9CRUVUCiAJdHJpc3RhdGUgIklQdjY6IElQc2VjIEJFRVQgbW9kZSIKLQlkZXBlbmRzIG9uIElQVjYKIAlkZWZhdWx0IElQVjYKIAlzZWxlY3QgWEZSTQogCS0tLWhlbHAtLS0KQEAgLTE1OSwxNSArMTUzLDE1IEBACiAKIGNvbmZpZyBJTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04KIAl0cmlzdGF0ZSAiSVB2NjogTUlQdjYgcm91dGUgb3B0aW1pemF0aW9uIG1vZGUgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBJUFY2ICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFhGUk0KIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBNSVB2NiByb3V0ZSBvcHRpbWl6YXRpb24gbW9kZS4KIAogY29uZmlnIElQVjZfU0lUCiAJdHJpc3RhdGUgIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpIgotCWRlcGVuZHMgb24gSVBWNgogCXNlbGVjdCBJTkVUX1RVTk5FTAorCXNlbGVjdCBJUFY2X05ESVNDX05PREVUWVBFCiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW4KQEAgLTE3OCwxOCArMTcyLDIxIEBACiAKIAkgIFNheWluZyBNIGhlcmUgd2lsbCBwcm9kdWNlIGEgbW9kdWxlIGNhbGxlZCBzaXQua28uIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFCisJYm9vbAorCiBjb25maWcgSVBWNl9UVU5ORUwKLQl0cmlzdGF0ZSAiSVB2NjogSVB2Ni1pbi1JUHY2IHR1bm5lbCIKKwl0cmlzdGF0ZSAiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpIgogCXNlbGVjdCBJTkVUNl9UVU5ORUwKLQlkZXBlbmRzIG9uIElQVjYKIAktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciBJUHY2LWluLUlQdjYgdHVubmVscyBkZXNjcmliZWQgaW4gUkZDIDI0NzMuCisJICBTdXBwb3J0IGZvciBJUHY2LWluLUlQdjYgYW5kIElQdjQtaW4tSVB2NiB0dW5uZWxzIGRlc2NyaWJlZCBpbgorCSAgUkZDIDI0NzMuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFUwogCWJvb2wgIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzIgotCWRlcGVuZHMgb24gSVBWNiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBGSUJfUlVMRVMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IG11bHRpcGxlIHJvdXRpbmcgdGFibGVzLgpAQCAtMjA4LDMgKzIwNSwxOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgSVBWNl9NUk9VVEUKKwlib29sICJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElQVjYgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgRXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcuCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSVBWNl9QSU1TTV9WMgorCWJvb2wgIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElQVjZfTVJPVVRFCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgSVB2NiBQSU0gbXVsdGljYXN0IHJvdXRpbmcgcHJvdG9jb2wgUElNLVNNdjIuCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitlbmRpZiAjIElQVjYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGUKaW5kZXggMjRmM2FhMC4uNjg2OTM0YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjYvTWFrZWZpbGUKQEAgLTExLDExICsxMSwxNCBAQAogCQlleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8KIAogaXB2Ni0kKENPTkZJR19TWVNDVEwpID0gc3lzY3RsX25ldF9pcHY2Lm8KK2lwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICs9IGlwNm1yLm8KKwogaXB2Ni0kKENPTkZJR19YRlJNKSArPSB4ZnJtNl9wb2xpY3kubyB4ZnJtNl9zdGF0ZS5vIHhmcm02X2lucHV0Lm8gXAogCXhmcm02X291dHB1dC5vCiBpcHY2LSQoQ09ORklHX05FVEZJTFRFUikgKz0gbmV0ZmlsdGVyLm8KIGlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYjZfcnVsZXMubwogaXB2Ni0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KK2lwdjYtJChDT05GSUdfU1lOX0NPT0tJRVMpICs9IHN5bmNvb2tpZXMubwogCiBpcHY2LW9ianMgKz0gJChpcHY2LXkpCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGU0MDIxM2QuLjhhMGZkNDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjIyLDYgKzIyMiw4IEBACiAvKiBJUHY2IFdpbGRjYXJkIEFkZHJlc3MgYW5kIExvb3BiYWNrIEFkZHJlc3MgZGVmaW5lZCBieSBSRkMyNTUzICovCiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnkgPSBJTjZBRERSX0FOWV9JTklUOwogY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9vcGJhY2sgPSBJTjZBRERSX0xPT1BCQUNLX0lOSVQ7Citjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9saW5rbG9jYWxfYWxsbm9kZXMgPSBJTjZBRERSX0xJTktMT0NBTF9BTExOT0RFU19JTklUOworY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbGlua2xvY2FsX2FsbHJvdXRlcnMgPSBJTjZBRERSX0xJTktMT0NBTF9BTExST1VURVJTX0lOSVQ7CiAKIC8qIENoZWNrIGlmIGEgdmFsaWQgcWRpc2MgaXMgYXZhaWxhYmxlICovCiBzdGF0aWMgaW5saW5lIGludCBhZGRyY29uZl9xZGlzY19vayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzIxLDcgKzMyMyw2IEBACiBzdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqIGlwdjZfYWRkX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpbmV0Nl9kZXYgKm5kZXY7Ci0Jc3RydWN0IGluNl9hZGRyIG1hZGRyOwogCiAJQVNTRVJUX1JUTkwoKTsKIApAQCAtMzM1LDcgKzMzNiw3IEBACiAKIAlyd2xvY2tfaW5pdCgmbmRldi0+bG9jayk7CiAJbmRldi0+ZGV2ID0gZGV2OwotCW1lbWNweSgmbmRldi0+Y25mLCBkZXYtPm5kX25ldC0+aXB2Ni5kZXZjb25mX2RmbHQsIHNpemVvZihuZGV2LT5jbmYpKTsKKwltZW1jcHkoJm5kZXYtPmNuZiwgZGV2X25ldChkZXYpLT5pcHY2LmRldmNvbmZfZGZsdCwgc2l6ZW9mKG5kZXYtPmNuZikpOwogCW5kZXYtPmNuZi5tdHU2ID0gZGV2LT5tdHU7CiAJbmRldi0+Y25mLnN5c2N0bCA9IE5VTEw7CiAJbmRldi0+bmRfcGFybXMgPSBuZWlnaF9wYXJtc19hbGxvYyhkZXYsICZuZF90YmwpOwpAQCAtMzQ5LDcgKzM1MCw3IEBACiAJaWYgKHNubXA2X2FsbG9jX2RldihuZGV2KSA8IDApIHsKIAkJQURCRygoS0VSTl9XQVJOSU5HCiAJCQkiJXMoKTogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3RhdGlzdGljczsgZGV2PSVzLlxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKSk7CisJCQlfX2Z1bmNfXywgZGV2LT5uYW1lKSk7CiAJCW5laWdoX3Bhcm1zX3JlbGVhc2UoJm5kX3RibCwgbmRldi0+bmRfcGFybXMpOwogCQluZGV2LT5kZWFkID0gMTsKIAkJaW42X2Rldl9maW5pc2hfZGVzdHJveShuZGV2KTsKQEAgLTM1OSw3ICszNjAsNyBAQAogCWlmIChzbm1wNl9yZWdpc3Rlcl9kZXYobmRldikgPCAwKSB7CiAJCUFEQkcoKEtFUk5fV0FSTklORwogCQkJIiVzKCk6IGNhbm5vdCBjcmVhdGUgL3Byb2MvbmV0L2Rldl9zbm1wNi8lc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKSk7CisJCQlfX2Z1bmNfXywgZGV2LT5uYW1lKSk7CiAJCW5laWdoX3Bhcm1zX3JlbGVhc2UoJm5kX3RibCwgbmRldi0+bmRfcGFybXMpOwogCQluZGV2LT5kZWFkID0gMTsKIAkJaW42X2Rldl9maW5pc2hfZGVzdHJveShuZGV2KTsKQEAgLTM3MSwyNSArMzcyLDI2IEBACiAJICovCiAJaW42X2Rldl9ob2xkKG5kZXYpOwogCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9TSVQpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfU0lUX01PRFVMRSkKKwlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9TSVQgJiYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9JU0FUQVApKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIlczogRGlzYWJsZWQgTXVsdGljYXN0IFJTXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmRldi0+Y25mLnJ0cl9zb2xpY2l0cyA9IDA7CisJfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCiAJc2V0dXBfdGltZXIoJm5kZXYtPnJlZ2VuX3RpbWVyLCBpcHY2X3JlZ2VuX3JuZGlkLCAodW5zaWduZWQgbG9uZyluZGV2KTsKIAlpZiAoKGRldi0+ZmxhZ3MmSUZGX0xPT1BCQUNLKSB8fAogCSAgICBkZXYtPnR5cGUgPT0gQVJQSFJEX1RVTk5FTCB8fAotI2lmIGRlZmluZWQoQ09ORklHX0lQVjZfU0lUKSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X1NJVF9NT0RVTEUpCisJICAgIGRldi0+dHlwZSA9PSBBUlBIUkRfVFVOTkVMNiB8fAogCSAgICBkZXYtPnR5cGUgPT0gQVJQSFJEX1NJVCB8fAotI2VuZGlmCiAJICAgIGRldi0+dHlwZSA9PSBBUlBIUkRfTk9ORSkgewogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAiJXM6IERpc2FibGVkIFByaXZhY3kgRXh0ZW5zaW9uc1xuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7CiAJCW5kZXYtPmNuZi51c2VfdGVtcGFkZHIgPSAtMTsKLQotCQlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9TSVQgJiYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9JU0FUQVApKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIiVzOiBEaXNhYmxlZCBNdWx0aWNhc3QgUlNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCW5kZXYtPmNuZi5ydHJfc29saWNpdHMgPSAwOwotCQl9CiAJfSBlbHNlIHsKIAkJaW42X2Rldl9ob2xkKG5kZXYpOwogCQlpcHY2X3JlZ2VuX3JuZGlkKCh1bnNpZ25lZCBsb25nKSBuZGV2KTsKQEAgLTQwNiw4ICs0MDgsNyBAQAogCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmlwNl9wdHIsIG5kZXYpOwogCiAJLyogSm9pbiBhbGwtbm9kZSBtdWx0aWNhc3QgZ3JvdXAgKi8KLQlpcHY2X2FkZHJfYWxsX25vZGVzKCZtYWRkcik7Ci0JaXB2Nl9kZXZfbWNfaW5jKGRldiwgJm1hZGRyKTsKKwlpcHY2X2Rldl9tY19pbmMoZGV2LCAmaW42YWRkcl9saW5rbG9jYWxfYWxsbm9kZXMpOwogCiAJcmV0dXJuIG5kZXY7CiB9CkBAIC00MzMsMTggKzQzNCwxNSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhOwotCXN0cnVjdCBpbjZfYWRkciBhZGRyOwogCiAJaWYgKCFpZGV2KQogCQlyZXR1cm47CiAJZGV2ID0gaWRldi0+ZGV2OwogCWlmIChkZXYgJiYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSkgewotCQlpcHY2X2FkZHJfYWxsX3JvdXRlcnMoJmFkZHIpOwotCiAJCWlmIChpZGV2LT5jbmYuZm9yd2FyZGluZykKLQkJCWlwdjZfZGV2X21jX2luYyhkZXYsICZhZGRyKTsKKwkJCWlwdjZfZGV2X21jX2luYyhkZXYsICZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTsKIAkJZWxzZQotCQkJaXB2Nl9kZXZfbWNfZGVjKGRldiwgJmFkZHIpOworCQkJaXB2Nl9kZXZfbWNfZGVjKGRldiwgJmluNmFkZHJfbGlua2xvY2FsX2FsbHJvdXRlcnMpOwogCX0KIAlmb3IgKGlmYT1pZGV2LT5hZGRyX2xpc3Q7IGlmYTsgaWZhPWlmYS0+aWZfbmV4dCkgewogCQlpZiAoaWZhLT5mbGFncyZJRkFfRl9URU5UQVRJVkUpCkBAIC00OTMsNyArNDkxLDcgQEAKIAkJZGV2X2ZvcndhcmRfY2hhbmdlKChzdHJ1Y3QgaW5ldDZfZGV2ICopdGFibGUtPmV4dHJhMSk7CiAKIAlpZiAoKnApCi0JCXJ0Nl9wdXJnZV9kZmx0X3JvdXRlcnMoKTsKKwkJcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhuZXQpOwogfQogI2VuZGlmCiAKQEAgLTU0MSw2ICs1MzksMjUgQEAKIAkqaWZhcCA9IGlmcDsKIH0KIAorLyoKKyAqCUhhc2ggZnVuY3Rpb24gdGFrZW4gZnJvbSBuZXRfYWxpYXMuYworICovCitzdGF0aWMgdTggaXB2Nl9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCV9fdTMyIHdvcmQ7CisKKwkvKgorCSAqIFdlIHBlcmZvcm0gdGhlIGhhc2ggZnVuY3Rpb24gb3ZlciB0aGUgbGFzdCA2NCBiaXRzIG9mIHRoZSBhZGRyZXNzCisJICogVGhpcyB3aWxsIGluY2x1ZGUgdGhlIElFRUUgYWRkcmVzcyB0b2tlbiBvbiBsaW5rcyB0aGF0IHN1cHBvcnQgaXQuCisJICovCisKKwl3b3JkID0gKF9fZm9yY2UgdTMyKShhZGRyLT5zNl9hZGRyMzJbMl0gXiBhZGRyLT5zNl9hZGRyMzJbM10pOworCXdvcmQgXj0gKHdvcmQgPj4gMTYpOworCXdvcmQgXj0gKHdvcmQgPj4gOCk7CisKKwlyZXR1cm4gKCh3b3JkIF4gKHdvcmQgPj4gNCkpICYgMHgwZik7Cit9CisKIC8qIE9uIHN1Y2Nlc3MgaXQgcmV0dXJucyBpZnAgd2l0aCBpbmNyZWFzZWQgcmVmZXJlbmNlIGNvdW50ICovCiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfaWZhZGRyICoKQEAgLTU2MSw3ICs1NzgsNyBAQAogCXdyaXRlX2xvY2soJmFkZHJjb25mX2hhc2hfbG9jayk7CiAKIAkvKiBJZ25vcmUgYWRkaW5nIGR1cGxpY2F0ZSBhZGRyZXNzZXMgb24gYW4gaW50ZXJmYWNlICovCi0JaWYgKGlwdjZfY2hrX3NhbWVfYWRkcigmaW5pdF9uZXQsIGFkZHIsIGlkZXYtPmRldikpIHsKKwlpZiAoaXB2Nl9jaGtfc2FtZV9hZGRyKGRldl9uZXQoaWRldi0+ZGV2KSwgYWRkciwgaWRldi0+ZGV2KSkgewogCQlBREJHKCgiaXB2Nl9hZGRfYWRkcjogYWxyZWFkeSBhc3NpZ25lZFxuIikpOwogCQllcnIgPSAtRUVYSVNUOwogCQlnb3RvIG91dDsKQEAgLTc1MSw5ICs3NjgsOSBAQAogCWlmICgoaWZwLT5mbGFncyAmIElGQV9GX1BFUk1BTkVOVCkgJiYgb25saW5rIDwgMSkgewogCQlzdHJ1Y3QgaW42X2FkZHIgcHJlZml4OwogCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwotCisJCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWZwLT5pZGV2LT5kZXYpOwogCQlpcHY2X2FkZHJfcHJlZml4KCZwcmVmaXgsICZpZnAtPmFkZHIsIGlmcC0+cHJlZml4X2xlbik7Ci0JCXJ0ID0gcnQ2X2xvb2t1cCgmcHJlZml4LCBOVUxMLCBpZnAtPmlkZXYtPmRldi0+aWZpbmRleCwgMSk7CisJCXJ0ID0gcnQ2X2xvb2t1cChuZXQsICZwcmVmaXgsIE5VTEwsIGlmcC0+aWRldi0+ZGV2LT5pZmluZGV4LCAxKTsKIAogCQlpZiAocnQgJiYgKChydC0+cnQ2aV9mbGFncyAmIChSVEZfR0FURVdBWSB8IFJURl9ERUZBVUxUKSkgPT0gMCkpIHsKIAkJCWlmIChvbmxpbmsgPT0gMCkgewpAQCAtNzc2LDYgKzc5Myw3IEBACiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGlmcC0+aWRldjsKIAlzdHJ1Y3QgaW42X2FkZHIgYWRkciwgKnRtcGFkZHI7CiAJdW5zaWduZWQgbG9uZyB0bXBfcHJlZmVyZWRfbGZ0LCB0bXBfdmFsaWRfbGZ0LCB0bXBfY3N0YW1wLCB0bXBfdHN0YW1wOworCXVuc2lnbmVkIGxvbmcgcmVnZW5fYWR2YW5jZTsKIAlpbnQgdG1wX3BsZW47CiAJaW50IHJldCA9IDA7CiAJaW50IG1heF9hZGRyZXNzZXM7CkBAIC04MzYsOCArODU0LDIzIEBACiAJdG1wX3RzdGFtcCA9IGlmcC0+dHN0YW1wOwogCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwogCisJcmVnZW5fYWR2YW5jZSA9IGlkZXYtPmNuZi5yZWdlbl9tYXhfcmV0cnkgKgorCSAgICAgICAgICAgICAgICBpZGV2LT5jbmYuZGFkX3RyYW5zbWl0cyAqCisJICAgICAgICAgICAgICAgIGlkZXYtPm5kX3Bhcm1zLT5yZXRyYW5zX3RpbWUgLyBIWjsKIAl3cml0ZV91bmxvY2soJmlkZXYtPmxvY2spOwogCisJLyogQSB0ZW1wb3JhcnkgYWRkcmVzcyBpcyBjcmVhdGVkIG9ubHkgaWYgdGhpcyBjYWxjdWxhdGVkIFByZWZlcnJlZAorCSAqIExpZmV0aW1lIGlzIGdyZWF0ZXIgdGhhbiBSRUdFTl9BRFZBTkNFIHRpbWUgdW5pdHMuICBJbiBwYXJ0aWN1bGFyLAorCSAqIGFuIGltcGxlbWVudGF0aW9uIG11c3Qgbm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBhZGRyZXNzIHdpdGggYSB6ZXJvCisJICogUHJlZmVycmVkIExpZmV0aW1lLgorCSAqLworCWlmICh0bXBfcHJlZmVyZWRfbGZ0IDw9IHJlZ2VuX2FkdmFuY2UpIHsKKwkJaW42X2lmYV9wdXQoaWZwKTsKKwkJaW42X2Rldl9wdXQoaWRldik7CisJCXJldCA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKIAlhZGRyX2ZsYWdzID0gSUZBX0ZfVEVNUE9SQVJZOwogCS8qIHNldCBpbiBhZGRyY29uZl9wcmVmaXhfcmN2KCkgKi8KIAlpZiAoaWZwLT5mbGFncyAmIElGQV9GX09QVElNSVNUSUMpCkBAIC04NzcsMjAgKzkxMCw0MCBAQAogLyoKICAqCUNob29zZSBhbiBhcHByb3ByaWF0ZSBzb3VyY2UgYWRkcmVzcyAoUkZDMzQ4NCkKICAqLwotc3RydWN0IGlwdjZfc2FkZHJfc2NvcmUgewotCWludAkJYWRkcl90eXBlOwotCXVuc2lnbmVkIGludAlhdHRyczsKLQlpbnQJCW1hdGNobGVuOwotCWludAkJc2NvcGU7Ci0JdW5zaWduZWQgaW50CXJ1bGU7CitlbnVtIHsKKwlJUFY2X1NBRERSX1JVTEVfSU5JVCA9IDAsCisJSVBWNl9TQUREUl9SVUxFX0xPQ0FMLAorCUlQVjZfU0FERFJfUlVMRV9TQ09QRSwKKwlJUFY2X1NBRERSX1JVTEVfUFJFRkVSUkVELAorI2lmZGVmIENPTkZJR19JUFY2X01JUDYKKwlJUFY2X1NBRERSX1JVTEVfSE9BLAorI2VuZGlmCisJSVBWNl9TQUREUl9SVUxFX09JRiwKKwlJUFY2X1NBRERSX1JVTEVfTEFCRUwsCisjaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQorCUlQVjZfU0FERFJfUlVMRV9QUklWQUNZLAorI2VuZGlmCisJSVBWNl9TQUREUl9SVUxFX09SQ0hJRCwKKwlJUFY2X1NBRERSX1JVTEVfUFJFRklYLAorCUlQVjZfU0FERFJfUlVMRV9NQVgKIH07CiAKLSNkZWZpbmUgSVBWNl9TQUREUl9TQ09SRV9MT0NBTAkJMHgwMDAxCi0jZGVmaW5lIElQVjZfU0FERFJfU0NPUkVfUFJFRkVSUkVECTB4MDAwNAotI2RlZmluZSBJUFY2X1NBRERSX1NDT1JFX0hPQQkJMHgwMDA4Ci0jZGVmaW5lIElQVjZfU0FERFJfU0NPUkVfT0lGCQkweDAwMTAKLSNkZWZpbmUgSVBWNl9TQUREUl9TQ09SRV9MQUJFTAkJMHgwMDIwCi0jZGVmaW5lIElQVjZfU0FERFJfU0NPUkVfUFJJVkFDWQkweDAwNDAKK3N0cnVjdCBpcHY2X3NhZGRyX3Njb3JlIHsKKwlpbnQJCQlydWxlOworCWludAkJCWFkZHJfdHlwZTsKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyCSppZmE7CisJREVDTEFSRV9CSVRNQVAoc2NvcmViaXRzLCBJUFY2X1NBRERSX1JVTEVfTUFYKTsKKwlpbnQJCQlzY29wZWRpc3Q7CisJaW50CQkJbWF0Y2hsZW47Cit9OworCitzdHJ1Y3QgaXB2Nl9zYWRkcl9kc3QgeworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjsKKwlpbnQgaWZpbmRleDsKKwlpbnQgc2NvcGU7CisJaW50IGxhYmVsOworCXVuc2lnbmVkIGludCBwcmVmczsKK307CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlwdjZfc2FkZHJfcHJlZmVycmVkKGludCB0eXBlKQogewpAQCAtOTAwLDI3ICs5NTMsMTUyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRhZGRyX2RldiwKLQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCitzdGF0aWMgaW50IGlwdjZfZ2V0X3NhZGRyX2V2YWwoc3RydWN0IGlwdjZfc2FkZHJfc2NvcmUgKnNjb3JlLAorCQkJICAgICAgIHN0cnVjdCBpcHY2X3NhZGRyX2RzdCAqZHN0LAorCQkJICAgICAgIGludCBpKQogewotCXN0cnVjdCBpcHY2X3NhZGRyX3Njb3JlIGhpc2NvcmU7Ci0Jc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhX3Jlc3VsdCA9IE5VTEw7Ci0JaW50IGRhZGRyX3R5cGUgPSBfX2lwdjZfYWRkcl90eXBlKGRhZGRyKTsKLQlpbnQgZGFkZHJfc2NvcGUgPSBfX2lwdjZfYWRkcl9zcmNfc2NvcGUoZGFkZHJfdHlwZSk7Ci0JaW50IGRhZGRyX2lmaW5kZXggPSBkYWRkcl9kZXYgPyBkYWRkcl9kZXYtPmlmaW5kZXggOiAwOwotCXUzMiBkYWRkcl9sYWJlbCA9IGlwdjZfYWRkcl9sYWJlbChkYWRkciwgZGFkZHJfdHlwZSwgZGFkZHJfaWZpbmRleCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KCZoaXNjb3JlLCAwLCBzaXplb2YoaGlzY29yZSkpOworCWlmIChpIDw9IHNjb3JlLT5ydWxlKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIElQVjZfU0FERFJfUlVMRV9TQ09QRToKKwkJCXJldCA9IHNjb3JlLT5zY29wZWRpc3Q7CisJCQlicmVhazsKKwkJY2FzZSBJUFY2X1NBRERSX1JVTEVfUFJFRklYOgorCQkJcmV0ID0gc2NvcmUtPm1hdGNobGVuOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAhIXRlc3RfYml0KGksIHNjb3JlLT5zY29yZWJpdHMpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoaSkgeworCWNhc2UgSVBWNl9TQUREUl9SVUxFX0lOSVQ6CisJCS8qIFJ1bGUgMDogcmVtZW1iZXIgaWYgaGlzY29yZSBpcyBub3QgcmVhZHkgeWV0ICovCisJCXJldCA9ICEhc2NvcmUtPmlmYTsKKwkJYnJlYWs7CisJY2FzZSBJUFY2X1NBRERSX1JVTEVfTE9DQUw6CisJCS8qIFJ1bGUgMTogUHJlZmVyIHNhbWUgYWRkcmVzcyAqLworCQlyZXQgPSBpcHY2X2FkZHJfZXF1YWwoJnNjb3JlLT5pZmEtPmFkZHIsIGRzdC0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgSVBWNl9TQUREUl9SVUxFX1NDT1BFOgorCQkvKiBSdWxlIDI6IFByZWZlciBhcHByb3ByaWF0ZSBzY29wZQorCQkgKgorCQkgKiAgICAgIHJldAorCQkgKiAgICAgICBeCisJCSAqICAgIC0xIHwgIGQgMTUKKwkJICogICAgLS0tKy0tKy0rLS0tPiBzY29wZQorCQkgKiAgICAgICB8CisJCSAqICAgICAgIHwgICAgICAgICAgICAgZCBpcyBzY29wZSBvZiB0aGUgZGVzdGluYXRpb24uCisJCSAqICBCLWQgIHwgIFwKKwkJICogICAgICAgfCAgIFwgICAgICA8LSBzbWFsbGVyIHNjb3BlIGlzIGJldHRlciBpZgorCQkgKiAgQi0xNSB8ICAgIFwgICAgICAgIGlmIHNjb3BlIGlzIGVub3VnaCBmb3IgZGVzdGluYWlvbi4KKwkJICogICAgICAgfCAgICAgICAgICAgICByZXQgPSBCIC0gc2NvcGUgKC0xIDw9IHNjb3BlID49IGQgPD0gMTUpLgorCQkgKiBkLUMtMSB8IC8KKwkJICogICAgICAgfC8gICAgICAgICA8LSBncmVhdGVyIGlzIGJldHRlcgorCQkgKiAgIC1DICAvICAgICAgICAgICAgIGlmIHNjb3BlIGlzIG5vdCBlbm91Z2ggZm9yIGRlc3RpbmF0aW9uLgorCQkgKiAgICAgIC98ICAgICAgICAgICAgIHJldCA9IHNjb3BlIC0gQyAoLTEgPD0gZCA8IHNjb3BlIDw9IDE1KS4KKwkJICoKKwkJICogZCAtIEMgLSAxIDwgQiAtMTUgKGZvciBhbGwgLTEgPD0gZCA8PSAxNSkuCisJCSAqIEMgPiBkICsgMTQgLSBCID49IDE1ICsgMTQgLSBCID0gMjkgLSBCLgorCQkgKiBBc3N1bWUgQiA9IDAgYW5kIHdlIGdldCBDID4gMjkuCisJCSAqLworCQlyZXQgPSBfX2lwdjZfYWRkcl9zcmNfc2NvcGUoc2NvcmUtPmFkZHJfdHlwZSk7CisJCWlmIChyZXQgPj0gZHN0LT5zY29wZSkKKwkJCXJldCA9IC1yZXQ7CisJCWVsc2UKKwkJCXJldCAtPSAxMjg7CS8qIDMwIGlzIGVub3VnaCAqLworCQlzY29yZS0+c2NvcGVkaXN0ID0gcmV0OworCQlicmVhazsKKwljYXNlIElQVjZfU0FERFJfUlVMRV9QUkVGRVJSRUQ6CisJCS8qIFJ1bGUgMzogQXZvaWQgZGVwcmVjYXRlZCBhbmQgb3B0aW1pc3RpYyBhZGRyZXNzZXMgKi8KKwkJcmV0ID0gaXB2Nl9zYWRkcl9wcmVmZXJyZWQoc2NvcmUtPmFkZHJfdHlwZSkgfHwKKwkJICAgICAgIShzY29yZS0+aWZhLT5mbGFncyAmIChJRkFfRl9ERVBSRUNBVEVEfElGQV9GX09QVElNSVNUSUMpKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0lQVjZfTUlQNgorCWNhc2UgSVBWNl9TQUREUl9SVUxFX0hPQToKKwkgICAgeworCQkvKiBSdWxlIDQ6IFByZWZlciBob21lIGFkZHJlc3MgKi8KKwkJaW50IHByZWZob21lID0gIShkc3QtPnByZWZzICYgSVBWNl9QUkVGRVJfU1JDX0NPQSk7CisJCXJldCA9ICEoc2NvcmUtPmlmYS0+ZmxhZ3MgJiBJRkFfRl9IT01FQUREUkVTUykgXiBwcmVmaG9tZTsKKwkJYnJlYWs7CisJICAgIH0KKyNlbmRpZgorCWNhc2UgSVBWNl9TQUREUl9SVUxFX09JRjoKKwkJLyogUnVsZSA1OiBQcmVmZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovCisJCXJldCA9ICghZHN0LT5pZmluZGV4IHx8CisJCSAgICAgICBkc3QtPmlmaW5kZXggPT0gc2NvcmUtPmlmYS0+aWRldi0+ZGV2LT5pZmluZGV4KTsKKwkJYnJlYWs7CisJY2FzZSBJUFY2X1NBRERSX1JVTEVfTEFCRUw6CisJCS8qIFJ1bGUgNjogUHJlZmVyIG1hdGNoaW5nIGxhYmVsICovCisJCXJldCA9IGlwdjZfYWRkcl9sYWJlbCgmc2NvcmUtPmlmYS0+YWRkciwgc2NvcmUtPmFkZHJfdHlwZSwKKwkJCQkgICAgICBzY29yZS0+aWZhLT5pZGV2LT5kZXYtPmlmaW5kZXgpID09IGRzdC0+bGFiZWw7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19JUFY2X1BSSVZBQ1kKKwljYXNlIElQVjZfU0FERFJfUlVMRV9QUklWQUNZOgorCSAgICB7CisJCS8qIFJ1bGUgNzogUHJlZmVyIHB1YmxpYyBhZGRyZXNzCisJCSAqIE5vdGU6IHByZWZlciB0ZW1wcmFyeSBhZGRyZXNzIGlmIHVzZV90ZW1wYWRkciA+PSAyCisJCSAqLworCQlpbnQgcHJlZnRtcCA9IGRzdC0+cHJlZnMgJiAoSVBWNl9QUkVGRVJfU1JDX1BVQkxJQ3xJUFY2X1BSRUZFUl9TUkNfVE1QKSA/CisJCQkJISEoZHN0LT5wcmVmcyAmIElQVjZfUFJFRkVSX1NSQ19UTVApIDoKKwkJCQlzY29yZS0+aWZhLT5pZGV2LT5jbmYudXNlX3RlbXBhZGRyID49IDI7CisJCXJldCA9ICghKHNjb3JlLT5pZmEtPmZsYWdzICYgSUZBX0ZfVEVNUE9SQVJZKSkgXiBwcmVmdG1wOworCQlicmVhazsKKwkgICAgfQorI2VuZGlmCisJY2FzZSBJUFY2X1NBRERSX1JVTEVfT1JDSElEOgorCQkvKiBSdWxlIDgtOiBQcmVmZXIgT1JDSElEIHZzIE9SQ0hJRCBvcgorCQkgKgkgICAgbm9uLU9SQ0hJRCB2cyBub24tT1JDSElECisJCSAqLworCQlyZXQgPSAhKGlwdjZfYWRkcl9vcmNoaWQoJnNjb3JlLT5pZmEtPmFkZHIpIF4KKwkJCWlwdjZfYWRkcl9vcmNoaWQoZHN0LT5hZGRyKSk7CisJCWJyZWFrOworCWNhc2UgSVBWNl9TQUREUl9SVUxFX1BSRUZJWDoKKwkJLyogUnVsZSA4OiBVc2UgbG9uZ2VzdCBtYXRjaGluZyBwcmVmaXggKi8KKwkJc2NvcmUtPm1hdGNobGVuID0gcmV0ID0gaXB2Nl9hZGRyX2RpZmYoJnNjb3JlLT5pZmEtPmFkZHIsCisJCQkJCQkgICAgICAgZHN0LT5hZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gMDsKKwl9CisKKwlpZiAocmV0KQorCQlfX3NldF9iaXQoaSwgc2NvcmUtPnNjb3JlYml0cyk7CisJc2NvcmUtPnJ1bGUgPSBpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRzdF9kZXYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCB1bnNpZ25lZCBpbnQgcHJlZnMsCisJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQoreworCXN0cnVjdCBpcHY2X3NhZGRyX3Njb3JlIHNjb3Jlc1syXSwKKwkJCQkqc2NvcmUgPSAmc2NvcmVzWzBdLCAqaGlzY29yZSA9ICZzY29yZXNbMV07CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkc3RfZGV2KTsKKwlzdHJ1Y3QgaXB2Nl9zYWRkcl9kc3QgZHN0OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGRzdF90eXBlOworCisJZHN0X3R5cGUgPSBfX2lwdjZfYWRkcl90eXBlKGRhZGRyKTsKKwlkc3QuYWRkciA9IGRhZGRyOworCWRzdC5pZmluZGV4ID0gZHN0X2RldiA/IGRzdF9kZXYtPmlmaW5kZXggOiAwOworCWRzdC5zY29wZSA9IF9faXB2Nl9hZGRyX3NyY19zY29wZShkc3RfdHlwZSk7CisJZHN0LmxhYmVsID0gaXB2Nl9hZGRyX2xhYmVsKGRhZGRyLCBkc3RfdHlwZSwgZHN0LmlmaW5kZXgpOworCWRzdC5wcmVmcyA9IHByZWZzOworCisJaGlzY29yZS0+cnVsZSA9IC0xOworCWhpc2NvcmUtPmlmYSA9IE5VTEw7CiAKIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwogCXJjdV9yZWFkX2xvY2soKTsKIAotCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikgeworCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikgewogCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwotCQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7CiAKLQkJLyogUnVsZSAwOiBDYW5kaWRhdGUgU291cmNlIEFkZHJlc3MgKHNlY3Rpb24gNCkKKwkJLyogQ2FuZGlkYXRlIFNvdXJjZSBBZGRyZXNzIChzZWN0aW9uIDQpCiAJCSAqICAtIG11bHRpY2FzdCBhbmQgbGluay1sb2NhbCBkZXN0aW5hdGlvbiBhZGRyZXNzLAogCQkgKiAgICB0aGUgc2V0IG9mIGNhbmRpZGF0ZSBzb3VyY2UgYWRkcmVzcyBNVVNUIG9ubHkKIAkJICogICAgaW5jbHVkZSBhZGRyZXNzZXMgYXNzaWduZWQgdG8gaW50ZXJmYWNlcwpAQCAtOTMyLDkgKzExMTAsOSBAQAogCQkgKiAgICBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgc2l0ZSBhcyB0aGUgb3V0Z29pbmcKIAkJICogICAgaW50ZXJmYWNlLikKIAkJICovCi0JCWlmICgoZGFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QgfHwKLQkJICAgICBkYWRkcl9zY29wZSA8PSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMKSAmJgotCQkgICAgZGFkZHJfZGV2ICYmIGRldiAhPSBkYWRkcl9kZXYpCisJCWlmICgoKGRzdF90eXBlICYgSVBWNl9BRERSX01VTFRJQ0FTVCkgfHwKKwkJICAgICBkc3Quc2NvcGUgPD0gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCkgJiYKKwkJICAgIGRzdC5pZmluZGV4ICYmIGRldi0+aWZpbmRleCAhPSBkc3QuaWZpbmRleCkKIAkJCWNvbnRpbnVlOwogCiAJCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CkBAIC05NDIsMTIgKzExMjAsMTAgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXJlYWRfbG9ja19iaCgmaWRldi0+bG9jayk7Ci0JCWZvciAoaWZhID0gaWRldi0+YWRkcl9saXN0OyBpZmE7IGlmYSA9IGlmYS0+aWZfbmV4dCkgewotCQkJc3RydWN0IGlwdjZfc2FkZHJfc2NvcmUgc2NvcmU7CisJCWZvciAoc2NvcmUtPmlmYSA9IGlkZXYtPmFkZHJfbGlzdDsgc2NvcmUtPmlmYTsgc2NvcmUtPmlmYSA9IHNjb3JlLT5pZmEtPmlmX25leHQpIHsKKwkJCWludCBpOwogCi0JCQlzY29yZS5hZGRyX3R5cGUgPSBfX2lwdjZfYWRkcl90eXBlKCZpZmEtPmFkZHIpOwotCi0JCQkvKiBSdWxlIDA6CisJCQkvKgogCQkJICogLSBUZW50YXRpdmUgQWRkcmVzcyAoUkZDMjQ2MiBzZWN0aW9uIDUuNCkKIAkJCSAqICAtIEEgdGVudGF0aXZlIGFkZHJlc3MgaXMgbm90IGNvbnNpZGVyZWQKIAkJCSAqICAgICJhc3NpZ25lZCB0byBhbiBpbnRlcmZhY2UiIGluIHRoZSB0cmFkaXRpb25hbApAQCAtOTU3LDExICsxMTMzLDE0IEBACiAJCQkgKiAgICBhZGRyZXNzZXMsIGFuZCB0aGUgdW5zcGVjaWZpZWQgYWRkcmVzcyBNVVNUCiAJCQkgKiAgICBOT1QgYmUgaW5jbHVkZWQgaW4gYSBjYW5kaWRhdGUgc2V0LgogCQkJICovCi0JCQlpZiAoKGlmYS0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpICYmCi0JCQkgICAgKCEoaWZhLT5mbGFncyAmIElGQV9GX09QVElNSVNUSUMpKSkKKwkJCWlmICgoc2NvcmUtPmlmYS0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpICYmCisJCQkgICAgKCEoc2NvcmUtPmlmYS0+ZmxhZ3MgJiBJRkFfRl9PUFRJTUlTVElDKSkpCiAJCQkJY29udGludWU7Ci0JCQlpZiAodW5saWtlbHkoc2NvcmUuYWRkcl90eXBlID09IElQVjZfQUREUl9BTlkgfHwKLQkJCQkgICAgIHNjb3JlLmFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QpKSB7CisKKwkJCXNjb3JlLT5hZGRyX3R5cGUgPSBfX2lwdjZfYWRkcl90eXBlKCZzY29yZS0+aWZhLT5hZGRyKTsKKworCQkJaWYgKHVubGlrZWx5KHNjb3JlLT5hZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSB8fAorCQkJCSAgICAgc2NvcmUtPmFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QpKSB7CiAJCQkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRwogCQkJCQkgICAgICAgIkFERFJDT05GOiB1bnNwZWNpZmllZCAvIG11bHRpY2FzdCBhZGRyZXNzICIKIAkJCQkJICAgICAgICJhc3NpZ25lZCBhcyB1bmljYXN0IGFkZHJlc3Mgb24gJXMiLApAQCAtOTY5LDIwNyArMTE0OCw2MyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlzY29yZS5hdHRycyA9IDA7Ci0JCQlzY29yZS5tYXRjaGxlbiA9IDA7Ci0JCQlzY29yZS5zY29wZSA9IDA7Ci0JCQlzY29yZS5ydWxlID0gMDsKKwkJCXNjb3JlLT5ydWxlID0gLTE7CisJCQliaXRtYXBfemVybyhzY29yZS0+c2NvcmViaXRzLCBJUFY2X1NBRERSX1JVTEVfTUFYKTsKIAotCQkJaWYgKGlmYV9yZXN1bHQgPT0gTlVMTCkgewotCQkJCS8qIHJlY29yZCBpdCBpZiB0aGUgZmlyc3QgYXZhaWxhYmxlIGVudHJ5ICovCi0JCQkJZ290byByZWNvcmRfaXQ7Ci0JCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgSVBWNl9TQUREUl9SVUxFX01BWDsgaSsrKSB7CisJCQkJaW50IG1pbmloaXNjb3JlLCBtaW5pc2NvcmU7CiAKLQkJCS8qIFJ1bGUgMTogUHJlZmVyIHNhbWUgYWRkcmVzcyAqLwotCQkJaWYgKGhpc2NvcmUucnVsZSA8IDEpIHsKLQkJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZpZmFfcmVzdWx0LT5hZGRyLCBkYWRkcikpCi0JCQkJCWhpc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9MT0NBTDsKLQkJCQloaXNjb3JlLnJ1bGUrKzsKLQkJCX0KLQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmlmYS0+YWRkciwgZGFkZHIpKSB7Ci0JCQkJc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9MT0NBTDsKLQkJCQlpZiAoIShoaXNjb3JlLmF0dHJzICYgSVBWNl9TQUREUl9TQ09SRV9MT0NBTCkpIHsKLQkJCQkJc2NvcmUucnVsZSA9IDE7Ci0JCQkJCWdvdG8gcmVjb3JkX2l0OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGhpc2NvcmUuYXR0cnMgJiBJUFY2X1NBRERSX1NDT1JFX0xPQ0FMKQotCQkJCQljb250aW51ZTsKLQkJCX0KKwkJCQltaW5paGlzY29yZSA9IGlwdjZfZ2V0X3NhZGRyX2V2YWwoaGlzY29yZSwgJmRzdCwgaSk7CisJCQkJbWluaXNjb3JlID0gaXB2Nl9nZXRfc2FkZHJfZXZhbChzY29yZSwgJmRzdCwgaSk7CiAKLQkJCS8qIFJ1bGUgMjogUHJlZmVyIGFwcHJvcHJpYXRlIHNjb3BlICovCi0JCQlpZiAoaGlzY29yZS5ydWxlIDwgMikgewotCQkJCWhpc2NvcmUuc2NvcGUgPSBfX2lwdjZfYWRkcl9zcmNfc2NvcGUoaGlzY29yZS5hZGRyX3R5cGUpOwotCQkJCWhpc2NvcmUucnVsZSsrOwotCQkJfQotCQkJc2NvcmUuc2NvcGUgPSBfX2lwdjZfYWRkcl9zcmNfc2NvcGUoc2NvcmUuYWRkcl90eXBlKTsKLQkJCWlmIChoaXNjb3JlLnNjb3BlIDwgc2NvcmUuc2NvcGUpIHsKLQkJCQlpZiAoaGlzY29yZS5zY29wZSA8IGRhZGRyX3Njb3BlKSB7Ci0JCQkJCXNjb3JlLnJ1bGUgPSAyOwotCQkJCQlnb3RvIHJlY29yZF9pdDsKLQkJCQl9IGVsc2UKLQkJCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKHNjb3JlLnNjb3BlIDwgaGlzY29yZS5zY29wZSkgewotCQkJCWlmIChzY29yZS5zY29wZSA8IGRhZGRyX3Njb3BlKQotCQkJCQlicmVhazsgLyogYWRkcmVzc2VzIHNvcnRlZCBieSBzY29wZSAqLwotCQkJCWVsc2UgewotCQkJCQlzY29yZS5ydWxlID0gMjsKLQkJCQkJZ290byByZWNvcmRfaXQ7CisJCQkJaWYgKG1pbmloaXNjb3JlID4gbWluaXNjb3JlKSB7CisJCQkJCWlmIChpID09IElQVjZfU0FERFJfUlVMRV9TQ09QRSAmJgorCQkJCQkgICAgc2NvcmUtPnNjb3BlZGlzdCA+IDApIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBzcGVjaWFsIGNhc2U6CisJCQkJCQkgKiBlYWNoIHJlbWFpbmluZyBlbnRyeQorCQkJCQkJICogaGFzIHRvbyBzbWFsbCAobm90IGVub3VnaCkKKwkJCQkJCSAqIHNjb3BlLCBiZWNhdXNlIGlmYSBlbnRyaWVzCisJCQkJCQkgKiBhcmUgc29ydGVkIGJ5IHRoZWlyIHNjb3BlCisJCQkJCQkgKiB2YWx1ZXMuCisJCQkJCQkgKi8KKwkJCQkJCWdvdG8gdHJ5X25leHRkZXY7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIGlmIChtaW5paGlzY29yZSA8IG1pbmlzY29yZSkgeworCQkJCQlzdHJ1Y3QgaXB2Nl9zYWRkcl9zY29yZSAqdG1wOworCisJCQkJCWlmIChoaXNjb3JlLT5pZmEpCisJCQkJCQlpbjZfaWZhX3B1dChoaXNjb3JlLT5pZmEpOworCisJCQkJCWluNl9pZmFfaG9sZChzY29yZS0+aWZhKTsKKworCQkJCQl0bXAgPSBoaXNjb3JlOworCQkJCQloaXNjb3JlID0gc2NvcmU7CisJCQkJCXNjb3JlID0gdG1wOworCisJCQkJCS8qIHJlc3RvcmUgb3VyIGl0ZXJhdG9yICovCisJCQkJCXNjb3JlLT5pZmEgPSBoaXNjb3JlLT5pZmE7CisKKwkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQotCi0JCQkvKiBSdWxlIDM6IEF2b2lkIGRlcHJlY2F0ZWQgYW5kIG9wdGltaXN0aWMgYWRkcmVzc2VzICovCi0JCQlpZiAoaGlzY29yZS5ydWxlIDwgMykgewotCQkJCWlmIChpcHY2X3NhZGRyX3ByZWZlcnJlZChoaXNjb3JlLmFkZHJfdHlwZSkgfHwKLQkJCQkgICAoKChpZmFfcmVzdWx0LT5mbGFncyAmCi0JCQkJICAgIChJRkFfRl9ERVBSRUNBVEVEfElGQV9GX09QVElNSVNUSUMpKSA9PSAwKSkpCi0JCQkJCWhpc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9QUkVGRVJSRUQ7Ci0JCQkJaGlzY29yZS5ydWxlKys7Ci0JCQl9Ci0JCQlpZiAoaXB2Nl9zYWRkcl9wcmVmZXJyZWQoc2NvcmUuYWRkcl90eXBlKSB8fAotCQkJICAgKCgoaWZhLT5mbGFncyAmCi0JCQkgICAgKElGQV9GX0RFUFJFQ0FURUR8SUZBX0ZfT1BUSU1JU1RJQykpID09IDApKSkgewotCQkJCXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfUFJFRkVSUkVEOwotCQkJCWlmICghKGhpc2NvcmUuYXR0cnMgJiBJUFY2X1NBRERSX1NDT1JFX1BSRUZFUlJFRCkpIHsKLQkJCQkJc2NvcmUucnVsZSA9IDM7Ci0JCQkJCWdvdG8gcmVjb3JkX2l0OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGhpc2NvcmUuYXR0cnMgJiBJUFY2X1NBRERSX1NDT1JFX1BSRUZFUlJFRCkKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIFJ1bGUgNDogUHJlZmVyIGhvbWUgYWRkcmVzcyAqLwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjZfTUlQNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NSVA2X01PRFVMRSkKLQkJCWlmIChoaXNjb3JlLnJ1bGUgPCA0KSB7Ci0JCQkJaWYgKGlmYV9yZXN1bHQtPmZsYWdzICYgSUZBX0ZfSE9NRUFERFJFU1MpCi0JCQkJCWhpc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9IT0E7Ci0JCQkJaGlzY29yZS5ydWxlKys7Ci0JCQl9Ci0JCQlpZiAoaWZhLT5mbGFncyAmIElGQV9GX0hPTUVBRERSRVNTKSB7Ci0JCQkJc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9IT0E7Ci0JCQkJaWYgKCEoaWZhX3Jlc3VsdC0+ZmxhZ3MgJiBJRkFfRl9IT01FQUREUkVTUykpIHsKLQkJCQkJc2NvcmUucnVsZSA9IDQ7Ci0JCQkJCWdvdG8gcmVjb3JkX2l0OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGhpc2NvcmUuYXR0cnMgJiBJUFY2X1NBRERSX1NDT1JFX0hPQSkKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0jZWxzZQotCQkJaWYgKGhpc2NvcmUucnVsZSA8IDQpCi0JCQkJaGlzY29yZS5ydWxlKys7Ci0jZW5kaWYKLQotCQkJLyogUnVsZSA1OiBQcmVmZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovCi0JCQlpZiAoaGlzY29yZS5ydWxlIDwgNSkgewotCQkJCWlmIChkYWRkcl9kZXYgPT0gTlVMTCB8fAotCQkJCSAgICBkYWRkcl9kZXYgPT0gaWZhX3Jlc3VsdC0+aWRldi0+ZGV2KQotCQkJCQloaXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfT0lGOwotCQkJCWhpc2NvcmUucnVsZSsrOwotCQkJfQotCQkJaWYgKGRhZGRyX2RldiA9PSBOVUxMIHx8Ci0JCQkgICAgZGFkZHJfZGV2ID09IGlmYS0+aWRldi0+ZGV2KSB7Ci0JCQkJc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9PSUY7Ci0JCQkJaWYgKCEoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfT0lGKSkgewotCQkJCQlzY29yZS5ydWxlID0gNTsKLQkJCQkJZ290byByZWNvcmRfaXQ7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfT0lGKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogUnVsZSA2OiBQcmVmZXIgbWF0Y2hpbmcgbGFiZWwgKi8KLQkJCWlmIChoaXNjb3JlLnJ1bGUgPCA2KSB7Ci0JCQkJaWYgKGlwdjZfYWRkcl9sYWJlbCgmaWZhX3Jlc3VsdC0+YWRkciwKLQkJCQkJCSAgICBoaXNjb3JlLmFkZHJfdHlwZSwKLQkJCQkJCSAgICBpZmFfcmVzdWx0LT5pZGV2LT5kZXYtPmlmaW5kZXgpID09IGRhZGRyX2xhYmVsKQotCQkJCQloaXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfTEFCRUw7Ci0JCQkJaGlzY29yZS5ydWxlKys7Ci0JCQl9Ci0JCQlpZiAoaXB2Nl9hZGRyX2xhYmVsKCZpZmEtPmFkZHIsCi0JCQkJCSAgICBzY29yZS5hZGRyX3R5cGUsCi0JCQkJCSAgICBpZmEtPmlkZXYtPmRldi0+aWZpbmRleCkgPT0gZGFkZHJfbGFiZWwpIHsKLQkJCQlzY29yZS5hdHRycyB8PSBJUFY2X1NBRERSX1NDT1JFX0xBQkVMOwotCQkJCWlmICghKGhpc2NvcmUuYXR0cnMgJiBJUFY2X1NBRERSX1NDT1JFX0xBQkVMKSkgewotCQkJCQlzY29yZS5ydWxlID0gNjsKLQkJCQkJZ290byByZWNvcmRfaXQ7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfTEFCRUwpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCi0jaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQotCQkJLyogUnVsZSA3OiBQcmVmZXIgcHVibGljIGFkZHJlc3MKLQkJCSAqIE5vdGU6IHByZWZlciB0ZW1wcmFyeSBhZGRyZXNzIGlmIHVzZV90ZW1wYWRkciA+PSAyCi0JCQkgKi8KLQkJCWlmIChoaXNjb3JlLnJ1bGUgPCA3KSB7Ci0JCQkJaWYgKCghKGlmYV9yZXN1bHQtPmZsYWdzICYgSUZBX0ZfVEVNUE9SQVJZKSkgXgotCQkJCSAgICAoaWZhX3Jlc3VsdC0+aWRldi0+Y25mLnVzZV90ZW1wYWRkciA+PSAyKSkKLQkJCQkJaGlzY29yZS5hdHRycyB8PSBJUFY2X1NBRERSX1NDT1JFX1BSSVZBQ1k7Ci0JCQkJaGlzY29yZS5ydWxlKys7Ci0JCQl9Ci0JCQlpZiAoKCEoaWZhLT5mbGFncyAmIElGQV9GX1RFTVBPUkFSWSkpIF4KLQkJCSAgICAoaWZhLT5pZGV2LT5jbmYudXNlX3RlbXBhZGRyID49IDIpKSB7Ci0JCQkJc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9QUklWQUNZOwotCQkJCWlmICghKGhpc2NvcmUuYXR0cnMgJiBJUFY2X1NBRERSX1NDT1JFX1BSSVZBQ1kpKSB7Ci0JCQkJCXNjb3JlLnJ1bGUgPSA3OwotCQkJCQlnb3RvIHJlY29yZF9pdDsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChoaXNjb3JlLmF0dHJzICYgSVBWNl9TQUREUl9TQ09SRV9QUklWQUNZKQotCQkJCQljb250aW51ZTsKLQkJCX0KLSNlbHNlCi0JCQlpZiAoaGlzY29yZS5ydWxlIDwgNykKLQkJCQloaXNjb3JlLnJ1bGUrKzsKLSNlbmRpZgotCQkJLyogUnVsZSA4OiBVc2UgbG9uZ2VzdCBtYXRjaGluZyBwcmVmaXggKi8KLQkJCWlmIChoaXNjb3JlLnJ1bGUgPCA4KSB7Ci0JCQkJaGlzY29yZS5tYXRjaGxlbiA9IGlwdjZfYWRkcl9kaWZmKCZpZmFfcmVzdWx0LT5hZGRyLCBkYWRkcik7Ci0JCQkJaGlzY29yZS5ydWxlKys7Ci0JCQl9Ci0JCQlzY29yZS5tYXRjaGxlbiA9IGlwdjZfYWRkcl9kaWZmKCZpZmEtPmFkZHIsIGRhZGRyKTsKLQkJCWlmIChzY29yZS5tYXRjaGxlbiA+IGhpc2NvcmUubWF0Y2hsZW4pIHsKLQkJCQlzY29yZS5ydWxlID0gODsKLQkJCQlnb3RvIHJlY29yZF9pdDsKLQkJCX0KLSNpZiAwCi0JCQllbHNlIGlmIChzY29yZS5tYXRjaGxlbiA8IGhpc2NvcmUubWF0Y2hsZW4pCi0JCQkJY29udGludWU7Ci0jZW5kaWYKLQotCQkJLyogRmluYWwgUnVsZTogY2hvb3NlIGZpcnN0IGF2YWlsYWJsZSBvbmUgKi8KLQkJCWNvbnRpbnVlOwotcmVjb3JkX2l0OgotCQkJaWYgKGlmYV9yZXN1bHQpCi0JCQkJaW42X2lmYV9wdXQoaWZhX3Jlc3VsdCk7Ci0JCQlpbjZfaWZhX2hvbGQoaWZhKTsKLQkJCWlmYV9yZXN1bHQgPSBpZmE7Ci0JCQloaXNjb3JlID0gc2NvcmU7CiAJCX0KK3RyeV9uZXh0ZGV2OgogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAotCWlmICghaWZhX3Jlc3VsdCkKKwlpZiAoIWhpc2NvcmUtPmlmYSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JaXB2Nl9hZGRyX2NvcHkoc2FkZHIsICZpZmFfcmVzdWx0LT5hZGRyKTsKLQlpbjZfaWZhX3B1dChpZmFfcmVzdWx0KTsKKwlpcHY2X2FkZHJfY29weShzYWRkciwgJmhpc2NvcmUtPmlmYS0+YWRkcik7CisJaW42X2lmYV9wdXQoaGlzY29yZS0+aWZhKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1pbnQgaXB2Nl9nZXRfc2FkZHIoc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQotewotCXJldHVybiBpcHY2X2Rldl9nZXRfc2FkZHIoZHN0ID8gaXA2X2RzdF9pZGV2KGRzdCktPmRldiA6IE5VTEwsIGRhZGRyLCBzYWRkcik7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaXB2Nl9nZXRfc2FkZHIpOworRVhQT1JUX1NZTUJPTChpcHY2X2Rldl9nZXRfc2FkZHIpOwogCiBpbnQgaXB2Nl9nZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJICAgIHVuc2lnbmVkIGNoYXIgYmFubmVkX2ZsYWdzKQpAQCAtMTIxNSw3ICsxMjUwLDcgQEAKIAogCXJlYWRfbG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKIAlmb3IoaWZwID0gaW5ldDZfYWRkcl9sc3RbaGFzaF07IGlmcDsgaWZwPWlmcC0+bHN0X25leHQpIHsKLQkJaWYgKGlmcC0+aWRldi0+ZGV2LT5uZF9uZXQgIT0gbmV0KQorCQlpZiAoIW5ldF9lcShkZXZfbmV0KGlmcC0+aWRldi0+ZGV2KSwgbmV0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsIGFkZHIpICYmCiAJCSAgICAhKGlmcC0+ZmxhZ3MmSUZBX0ZfVEVOVEFUSVZFKSkgewpAQCAtMTIzNyw3ICsxMjcyLDcgQEAKIAl1OCBoYXNoID0gaXB2Nl9hZGRyX2hhc2goYWRkcik7CiAKIAlmb3IoaWZwID0gaW5ldDZfYWRkcl9sc3RbaGFzaF07IGlmcDsgaWZwPWlmcC0+bHN0X25leHQpIHsKLQkJaWYgKGlmcC0+aWRldi0+ZGV2LT5uZF9uZXQgIT0gbmV0KQorCQlpZiAoIW5ldF9lcShkZXZfbmV0KGlmcC0+aWRldi0+ZGV2KSwgbmV0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsIGFkZHIpKSB7CiAJCQlpZiAoZGV2ID09IE5VTEwgfHwgaWZwLT5pZGV2LT5kZXYgPT0gZGV2KQpAQCAtMTI0Nyw3ICsxMjgyLDMyIEBACiAJcmV0dXJuIGlmcCAhPSBOVUxMOwogfQogCi1zdHJ1Y3QgaW5ldDZfaWZhZGRyICppcHY2X2dldF9pZmFkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCitpbnQgaXB2Nl9jaGtfcHJlZml4KHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OworCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKKwlpbnQJb25saW5rOworCisJb25saW5rID0gMDsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKKwlpZiAoaWRldikgeworCQlyZWFkX2xvY2tfYmgoJmlkZXYtPmxvY2spOworCQlmb3IgKGlmYSA9IGlkZXYtPmFkZHJfbGlzdDsgaWZhOyBpZmEgPSBpZmEtPmlmX25leHQpIHsKKwkJCW9ubGluayA9IGlwdjZfcHJlZml4X2VxdWFsKGFkZHIsICZpZmEtPmFkZHIsCisJCQkJCQkgICBpZmEtPnByZWZpeF9sZW4pOworCQkJaWYgKG9ubGluaykKKwkJCQlicmVhazsKKwkJfQorCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBvbmxpbms7Cit9CisKK0VYUE9SVF9TWU1CT0woaXB2Nl9jaGtfcHJlZml4KTsKKworc3RydWN0IGluZXQ2X2lmYWRkciAqaXB2Nl9nZXRfaWZhZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0cmljdCkKIHsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICogaWZwOwpAQCAtMTI1NSw3ICsxMzE1LDcgQEAKIAogCXJlYWRfbG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKIAlmb3IoaWZwID0gaW5ldDZfYWRkcl9sc3RbaGFzaF07IGlmcDsgaWZwPWlmcC0+bHN0X25leHQpIHsKLQkJaWYgKGlmcC0+aWRldi0+ZGV2LT5uZF9uZXQgIT0gbmV0KQorCQlpZiAoIW5ldF9lcShkZXZfbmV0KGlmcC0+aWRldi0+ZGV2KSwgbmV0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsIGFkZHIpKSB7CiAJCQlpZiAoZGV2ID09IE5VTEwgfHwgaWZwLT5pZGV2LT5kZXYgPT0gZGV2IHx8CkBAIC0xNDMyLDYgKzE0OTIsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IF9faXB2Nl9pc2F0YXBfaWZpZCh1OCAqZXVpLCBfX2JlMzIgYWRkcikKK3sKKwlldWlbMF0gPSAoaXB2NF9pc196ZXJvbmV0KGFkZHIpIHx8IGlwdjRfaXNfcHJpdmF0ZV8xMChhZGRyKSB8fAorCQkgIGlwdjRfaXNfbG9vcGJhY2soYWRkcikgfHwgaXB2NF9pc19saW5rbG9jYWxfMTY5KGFkZHIpIHx8CisJCSAgaXB2NF9pc19wcml2YXRlXzE3MihhZGRyKSB8fCBpcHY0X2lzX3Rlc3RfMTkyKGFkZHIpIHx8CisJCSAgaXB2NF9pc19hbnljYXN0XzZ0bzQoYWRkcikgfHwgaXB2NF9pc19wcml2YXRlXzE5MihhZGRyKSB8fAorCQkgIGlwdjRfaXNfdGVzdF8xOTgoYWRkcikgfHwgaXB2NF9pc19tdWx0aWNhc3QoYWRkcikgfHwKKwkJICBpcHY0X2lzX2xiY2FzdChhZGRyKSkgPyAweDAwIDogMHgwMjsKKwlldWlbMV0gPSAwOworCWV1aVsyXSA9IDB4NUU7CisJZXVpWzNdID0gMHhGRTsKKwltZW1jcHkoZXVpICsgNCwgJmFkZHIsIDQpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChfX2lwdjZfaXNhdGFwX2lmaWQpOworCitzdGF0aWMgaW50IGFkZHJjb25mX2lmaWRfc2l0KHU4ICpldWksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9JU0FUQVApCisJCXJldHVybiBfX2lwdjZfaXNhdGFwX2lmaWQoZXVpLCAqKF9fYmUzMiAqKWRldi0+ZGV2X2FkZHIpOworCXJldHVybiAtMTsKK30KKwogc3RhdGljIGludCBpcHY2X2dlbmVyYXRlX2V1aTY0KHU4ICpldWksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3dpdGNoIChkZXYtPnR5cGUpIHsKQEAgLTE0NDQsOCArMTUyNyw3IEBACiAJY2FzZSBBUlBIUkRfSU5GSU5JQkFORDoKIAkJcmV0dXJuIGFkZHJjb25mX2lmaWRfaW5maW5pYmFuZChldWksIGRldik7CiAJY2FzZSBBUlBIUkRfU0lUOgotCQlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0lTQVRBUCkKLQkJCXJldHVybiBpcHY2X2lzYXRhcF9ldWk2NChldWksICooX19iZTMyICopZGV2LT5kZXZfYWRkcik7CisJCXJldHVybiBhZGRyY29uZl9pZmlkX3NpdChldWksIGRldik7CiAJfQogCXJldHVybiAtMTsKIH0KQEAgLTE1NTcsNiArMTYzOSw3IEBACiAJCS5mY19leHBpcmVzID0gZXhwaXJlcywKIAkJLmZjX2RzdF9sZW4gPSBwbGVuLAogCQkuZmNfZmxhZ3MgPSBSVEZfVVAgfCBmbGFncywKKwkJLmZjX25saW5mby5ubF9uZXQgPSBkZXZfbmV0KGRldiksCiAJfTsKIAogCWlwdjZfYWRkcl9jb3B5KCZjZmcuZmNfZHN0LCBwZngpOwpAQCAtMTU4Myw2ICsxNjY2LDcgQEAKIAkJLmZjX2lmaW5kZXggPSBkZXYtPmlmaW5kZXgsCiAJCS5mY19kc3RfbGVuID0gOCwKIAkJLmZjX2ZsYWdzID0gUlRGX1VQLAorCQkuZmNfbmxpbmZvLm5sX25ldCA9IGRldl9uZXQoZGV2KSwKIAl9OwogCiAJaXB2Nl9hZGRyX3NldCgmY2ZnLmZjX2RzdCwgaHRvbmwoMHhGRjAwMDAwMCksIDAsIDAsIDApOwpAQCAtMTU5OSw2ICsxNjgzLDcgQEAKIAkJLmZjX2lmaW5kZXggPSBkZXYtPmlmaW5kZXgsCiAJCS5mY19kc3RfbGVuID0gOTYsCiAJCS5mY19mbGFncyA9IFJURl9VUCB8IFJURl9OT05FWFRIT1AsCisJCS5mY19ubGluZm8ubmxfbmV0ID0gZGV2X25ldChkZXYpLAogCX07CiAKIAkvKiBwcmVmaXggbGVuZ3RoIC0gOTYgYml0cyAiOjpkLmQuZC5kIiAqLwpAQCAtMTY5OSw3ICsxNzg0LDggQEAKIAogCWlmIChwaW5mby0+b25saW5rKSB7CiAJCXN0cnVjdCBydDZfaW5mbyAqcnQ7Ci0JCXJ0ID0gcnQ2X2xvb2t1cCgmcGluZm8tPnByZWZpeCwgTlVMTCwgZGV2LT5pZmluZGV4LCAxKTsKKwkJcnQgPSBydDZfbG9va3VwKGRldl9uZXQoZGV2KSwgJnBpbmZvLT5wcmVmaXgsIE5VTEwsCisJCQkJZGV2LT5pZmluZGV4LCAxKTsKIAogCQlpZiAocnQgJiYgKChydC0+cnQ2aV9mbGFncyAmIChSVEZfR0FURVdBWSB8IFJURl9ERUZBVUxUKSkgPT0gMCkpIHsKIAkJCWlmIChydC0+cnQ2aV9mbGFncyZSVEZfRVhQSVJFUykgewpAQCAtMTc0Miw3ICsxODI4LDcgQEAKIAogb2s6CiAKLQkJaWZwID0gaXB2Nl9nZXRfaWZhZGRyKCZpbml0X25ldCwgJmFkZHIsIGRldiwgMSk7CisJCWlmcCA9IGlwdjZfZ2V0X2lmYWRkcihkZXZfbmV0KGRldiksICZhZGRyLCBkZXYsIDEpOwogCiAJCWlmIChpZnAgPT0gTlVMTCAmJiB2YWxpZF9sZnQpIHsKIAkJCWludCBtYXhfYWRkcmVzc2VzID0gaW42X2Rldi0+Y25mLm1heF9hZGRyZXNzZXM7CkBAIC0xODI4LDYgKzE5MTQsOSBAQAogCQkJCSAqIGxpZmV0aW1lcyBvZiBhbiBleGlzdGluZyB0ZW1wb3JhcnkgYWRkcmVzcwogCQkJCSAqIHdoZW4gcHJvY2Vzc2luZyBhIFByZWZpeCBJbmZvcm1hdGlvbiBPcHRpb24uCiAJCQkJICovCisJCQkJaWYgKGlmcCAhPSBpZnQtPmlmcHViKQorCQkJCQljb250aW51ZTsKKwogCQkJCXNwaW5fbG9jaygmaWZ0LT5sb2NrKTsKIAkJCQlmbGFncyA9IGlmdC0+ZmxhZ3M7CiAJCQkJaWYgKGlmdC0+dmFsaWRfbGZ0ID4gdmFsaWRfbGZ0ICYmCkBAIC0xODY1LDcgKzE5NTQsNyBAQAogICoJU3BlY2lhbCBjYXNlIGZvciBTSVQgaW50ZXJmYWNlcyB3aGVyZSB3ZSBjcmVhdGUgYSBuZXcgInZpcnR1YWwiCiAgKglkZXZpY2UuCiAgKi8KLWludCBhZGRyY29uZl9zZXRfZHN0YWRkcih2b2lkIF9fdXNlciAqYXJnKQoraW50IGFkZHJjb25mX3NldF9kc3RhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgaW42X2lmcmVxIGlyZXE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE4NzcsNyArMTk2Niw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZpcmVxLCBhcmcsIHNpemVvZihzdHJ1Y3QgaW42X2lmcmVxKSkpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKLQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpcmVxLmlmcjZfaWZpbmRleCk7CisJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgaXJlcS5pZnI2X2lmaW5kZXgpOwogCiAJZXJyID0gLUVOT0RFVjsKIAlpZiAoZGV2ID09IE5VTEwpCkBAIC0xOTA4LDcgKzE5OTcsOCBAQAogCiAJCWlmIChlcnIgPT0gMCkgewogCQkJZXJyID0gLUVOT0JVRlM7Ci0JCQlpZiAoKGRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgcC5uYW1lKSkgPT0gTlVMTCkKKwkJCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgcC5uYW1lKTsKKwkJCWlmICghZGV2KQogCQkJCWdvdG8gZXJyX2V4aXQ7CiAJCQllcnIgPSBkZXZfb3BlbihkZXYpOwogCQl9CkBAIC0xOTIzLDggKzIwMTMsOSBAQAogLyoKICAqCU1hbnVhbCBjb25maWd1cmF0aW9uIG9mIGFkZHJlc3Mgb24gYW4gaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyBpbnQgaW5ldDZfYWRkcl9hZGQoaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqcGZ4LCBpbnQgcGxlbiwKLQkJCSAgX191OCBpZmFfZmxhZ3MsIF9fdTMyIHByZWZlcmVkX2xmdCwgX191MzIgdmFsaWRfbGZ0KQorc3RhdGljIGludCBpbmV0Nl9hZGRyX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCBzdHJ1Y3QgaW42X2FkZHIgKnBmeCwKKwkJCSAgaW50IHBsZW4sIF9fdTggaWZhX2ZsYWdzLCBfX3UzMiBwcmVmZXJlZF9sZnQsCisJCQkgIF9fdTMyIHZhbGlkX2xmdCkKIHsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKQEAgLTE5MzgsNyArMjAyOSw4IEBACiAJaWYgKCF2YWxpZF9sZnQgfHwgcHJlZmVyZWRfbGZ0ID4gdmFsaWRfbGZ0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgoZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCkpID09IE5VTEwpCisJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZpbmRleCk7CisJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKChpZGV2ID0gYWRkcmNvbmZfYWRkX2RldihkZXYpKSA9PSBOVUxMKQpAQCAtMTk4MywxMyArMjA3NSwxNSBAQAogCXJldHVybiBQVFJfRVJSKGlmcCk7CiB9CiAKLXN0YXRpYyBpbnQgaW5ldDZfYWRkcl9kZWwoaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqcGZ4LCBpbnQgcGxlbikKK3N0YXRpYyBpbnQgaW5ldDZfYWRkcl9kZWwoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleCwgc3RydWN0IGluNl9hZGRyICpwZngsCisJCQkgIGludCBwbGVuKQogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlpZiAoKGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpKSA9PSBOVUxMKQorCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgoaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KSkgPT0gTlVMTCkKQEAgLTIwMTcsNyArMjExMSw3IEBACiB9CiAKIAotaW50IGFkZHJjb25mX2FkZF9pZmFkZHIodm9pZCBfX3VzZXIgKmFyZykKK2ludCBhZGRyY29uZl9hZGRfaWZhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgaW42X2lmcmVxIGlyZXE7CiAJaW50IGVycjsKQEAgLTIwMjksMTMgKzIxMjMsMTQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlydG5sX2xvY2soKTsKLQllcnIgPSBpbmV0Nl9hZGRyX2FkZChpcmVxLmlmcjZfaWZpbmRleCwgJmlyZXEuaWZyNl9hZGRyLCBpcmVxLmlmcjZfcHJlZml4bGVuLAotCQkJICAgICBJRkFfRl9QRVJNQU5FTlQsIElORklOSVRZX0xJRkVfVElNRSwgSU5GSU5JVFlfTElGRV9USU1FKTsKKwllcnIgPSBpbmV0Nl9hZGRyX2FkZChuZXQsIGlyZXEuaWZyNl9pZmluZGV4LCAmaXJlcS5pZnI2X2FkZHIsCisJCQkgICAgIGlyZXEuaWZyNl9wcmVmaXhsZW4sIElGQV9GX1BFUk1BTkVOVCwKKwkJCSAgICAgSU5GSU5JVFlfTElGRV9USU1FLCBJTkZJTklUWV9MSUZFX1RJTUUpOwogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGFkZHJjb25mX2RlbF9pZmFkZHIodm9pZCBfX3VzZXIgKmFyZykKK2ludCBhZGRyY29uZl9kZWxfaWZhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgaW42X2lmcmVxIGlyZXE7CiAJaW50IGVycjsKQEAgLTIwNDcsNyArMjE0Miw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcnRubF9sb2NrKCk7Ci0JZXJyID0gaW5ldDZfYWRkcl9kZWwoaXJlcS5pZnI2X2lmaW5kZXgsICZpcmVxLmlmcjZfYWRkciwgaXJlcS5pZnI2X3ByZWZpeGxlbik7CisJZXJyID0gaW5ldDZfYWRkcl9kZWwobmV0LCBpcmVxLmlmcjZfaWZpbmRleCwgJmlyZXEuaWZyNl9hZGRyLAorCQkJICAgICBpcmVxLmlmcjZfcHJlZml4bGVuKTsKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMDU4LDYgKzIxNTQsNyBAQAogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKiBpZnA7CiAJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CiAJaW50IHNjb3BlOwogCiAJQVNTRVJUX1JUTkwoKTsKQEAgLTIwODQsNyArMjE4MSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBkZXYpIHsKKwlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHsKIAkJc3RydWN0IGluX2RldmljZSAqIGluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldik7CiAJCWlmIChpbl9kZXYgJiYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CiAJCQlzdHJ1Y3QgaW5faWZhZGRyICogaWZhOwpAQCAtMjI0NywxNSArMjM0NCwxNiBAQAogc3RhdGljIHZvaWQgaXA2X3RubF9hZGRfbGlua2xvY2FsKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmxpbmtfZGV2OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKIAogCS8qIGZpcnN0IHRyeSB0byBpbmhlcml0IHRoZSBsaW5rLWxvY2FsIGFkZHJlc3MgZnJvbSB0aGUgbGluayBkZXZpY2UgKi8KIAlpZiAoaWRldi0+ZGV2LT5pZmxpbmsgJiYKLQkgICAgKGxpbmtfZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWRldi0+ZGV2LT5pZmxpbmspKSkgeworCSAgICAobGlua19kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBpZGV2LT5kZXYtPmlmbGluaykpKSB7CiAJCWlmICghaXB2Nl9pbmhlcml0X2xpbmtsb2NhbChpZGV2LCBsaW5rX2RldikpCiAJCQlyZXR1cm47CiAJfQogCS8qIHRoZW4gdHJ5IHRvIGluaGVyaXQgaXQgZnJvbSBhbnkgZGV2aWNlICovCi0JZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgbGlua19kZXYpIHsKKwlmb3JfZWFjaF9uZXRkZXYobmV0LCBsaW5rX2RldikgewogCQlpZiAoIWlwdjZfaW5oZXJpdF9saW5rbG9jYWwoaWRldiwgbGlua19kZXYpKQogCQkJcmV0dXJuOwogCX0KQEAgLTIyODgsOSArMjM4Niw2IEBACiAJaW50IHJ1bl9wZW5kaW5nID0gMDsKIAlpbnQgZXJyOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCiAJc3dpdGNoKGV2ZW50KSB7CiAJY2FzZSBORVRERVZfUkVHSVNURVI6CiAJCWlmICghaWRldiAmJiBkZXYtPm10dSA+PSBJUFY2X01JTl9NVFUpIHsKQEAgLTI0MzAsMTQgKzI1MjUsMTUgQEAKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSwgKipiaWZhOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlpbnQgaTsKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQlpZiAoZGV2ID09IGluaXRfbmV0Lmxvb3BiYWNrX2RldiAmJiBob3cgPT0gMSkKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICYmIGhvdyA9PSAxKQogCQlob3cgPSAwOwogCi0JcnQ2X2lmZG93bihkZXYpOworCXJ0Nl9pZmRvd24obmV0LCBkZXYpOwogCW5laWdoX2lmZG93bigmbmRfdGJsLCBkZXYpOwogCiAJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKQEAgLTI0NDcsNyArMjU0Myw3IEBACiAJLyogU3RlcCAxOiByZW1vdmUgcmVmZXJlbmNlIHRvIGlwdjYgZGV2aWNlIGZyb20gcGFyZW50IGRldmljZS4KIAkJICAgRG8gbm90IGRldl9wdXQhCiAJICovCi0JaWYgKGhvdyA9PSAxKSB7CisJaWYgKGhvdykgewogCQlpZGV2LT5kZWFkID0gMTsKIAogCQkvKiBwcm90ZWN0ZWQgYnkgcnRubF9sb2NrICovCkBAIC0yNDc5LDEyICsyNTc1LDEyIEBACiAJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CiAKIAkvKiBTdGVwIDM6IGNsZWFyIGZsYWdzIGZvciBzdGF0ZWxlc3MgYWRkcmNvbmYgKi8KLQlpZiAoaG93ICE9IDEpCisJaWYgKCFob3cpCiAJCWlkZXYtPmlmX2ZsYWdzICY9IH4oSUZfUlNfU0VOVHxJRl9SQV9SQ1ZEfElGX1JFQURZKTsKIAogCS8qIFN0ZXAgNDogY2xlYXIgYWRkcmVzcyBsaXN0ICovCiAjaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQotCWlmIChob3cgPT0gMSAmJiBkZWxfdGltZXIoJmlkZXYtPnJlZ2VuX3RpbWVyKSkKKwlpZiAoaG93ICYmIGRlbF90aW1lcigmaWRldi0+cmVnZW5fdGltZXIpKQogCQlpbjZfZGV2X3B1dChpZGV2KTsKIAogCS8qIGNsZWFyIHRlbXBhZGRyIGxpc3QgKi8KQEAgLTI1MjEsNyArMjYxNyw3IEBACiAKIAkvKiBTdGVwIDU6IERpc2NhcmQgbXVsdGljYXN0IGxpc3QgKi8KIAotCWlmIChob3cgPT0gMSkKKwlpZiAoaG93KQogCQlpcHY2X21jX2Rlc3Ryb3lfZGV2KGlkZXYpOwogCWVsc2UKIAkJaXB2Nl9tY19kb3duKGlkZXYpOwpAQCAtMjUzMCw3ICsyNjI2LDcgQEAKIAogCS8qIFNob3QgdGhlIGRldmljZSAoaWYgdW5yZWdpc3RlcmVkKSAqLwogCi0JaWYgKGhvdyA9PSAxKSB7CisJaWYgKGhvdykgewogCQlhZGRyY29uZl9zeXNjdGxfdW5yZWdpc3RlcihpZGV2KTsKIAkJbmVpZ2hfcGFybXNfcmVsZWFzZSgmbmRfdGJsLCBpZGV2LT5uZF9wYXJtcyk7CiAJCW5laWdoX2lmZG93bigmbmRfdGJsLCBkZXYpOwpAQCAtMjU1Niw4ICsyNjUyLDYgQEAKIAogCXNwaW5fbG9jaygmaWZwLT5sb2NrKTsKIAlpZiAoaWZwLT5wcm9iZXMrKyA8IGlmcC0+aWRldi0+Y25mLnJ0cl9zb2xpY2l0cykgewotCQlzdHJ1Y3QgaW42X2FkZHIgYWxsX3JvdXRlcnM7Ci0KIAkJLyogVGhlIHdhaXQgYWZ0ZXIgdGhlIGxhc3QgcHJvYmUgY2FuIGJlIHNob3J0ZXIgKi8KIAkJYWRkcmNvbmZfbW9kX3RpbWVyKGlmcCwgQUNfUlMsCiAJCQkJICAgKGlmcC0+cHJvYmVzID09IGlmcC0+aWRldi0+Y25mLnJ0cl9zb2xpY2l0cykgPwpAQCAtMjU2NSw5ICsyNjU5LDcgQEAKIAkJCQkgICBpZnAtPmlkZXYtPmNuZi5ydHJfc29saWNpdF9pbnRlcnZhbCk7CiAJCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogCi0JCWlwdjZfYWRkcl9hbGxfcm91dGVycygmYWxsX3JvdXRlcnMpOwotCi0JCW5kaXNjX3NlbmRfcnMoaWZwLT5pZGV2LT5kZXYsICZpZnAtPmFkZHIsICZhbGxfcm91dGVycyk7CisJCW5kaXNjX3NlbmRfcnMoaWZwLT5pZGV2LT5kZXYsICZpZnAtPmFkZHIsICZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9jaygmaWZwLT5sb2NrKTsKIAkJLyoKQEAgLTI2NTQsNyArMjc0Niw2IEBACiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwID0gKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKikgZGF0YTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaWZwLT5pZGV2OwotCXN0cnVjdCBpbjZfYWRkciB1bnNwZWM7CiAJc3RydWN0IGluNl9hZGRyIG1jYWRkcjsKIAogCXJlYWRfbG9ja19iaCgmaWRldi0+bG9jayk7CkBAIC0yNjgzLDkgKzI3NzQsOCBAQAogCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAogCS8qIHNlbmQgYSBuZWlnaGJvdXIgc29saWNpdGF0aW9uIGZvciBvdXIgYWRkciAqLwotCW1lbXNldCgmdW5zcGVjLCAwLCBzaXplb2YodW5zcGVjKSk7CiAJYWRkcmNvbmZfYWRkcl9zb2xpY3RfbXVsdCgmaWZwLT5hZGRyLCAmbWNhZGRyKTsKLQluZGlzY19zZW5kX25zKGlmcC0+aWRldi0+ZGV2LCBOVUxMLCAmaWZwLT5hZGRyLCAmbWNhZGRyLCAmdW5zcGVjKTsKKwluZGlzY19zZW5kX25zKGlmcC0+aWRldi0+ZGV2LCBOVUxMLCAmaWZwLT5hZGRyLCAmbWNhZGRyLCAmaW42YWRkcl9hbnkpOwogb3V0OgogCWluNl9pZmFfcHV0KGlmcCk7CiB9CkBAIC0yNzA4LDE2ICsyNzk4LDEyIEBACiAJICAgIGlmcC0+aWRldi0+Y25mLnJ0cl9zb2xpY2l0cyA+IDAgJiYKIAkgICAgKGRldi0+ZmxhZ3MmSUZGX0xPT1BCQUNLKSA9PSAwICYmCiAJICAgIChpcHY2X2FkZHJfdHlwZSgmaWZwLT5hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpKSB7Ci0JCXN0cnVjdCBpbjZfYWRkciBhbGxfcm91dGVyczsKLQotCQlpcHY2X2FkZHJfYWxsX3JvdXRlcnMoJmFsbF9yb3V0ZXJzKTsKLQogCQkvKgogCQkgKglJZiBhIGhvc3QgYXMgYWxyZWFkeSBwZXJmb3JtZWQgYSByYW5kb20gZGVsYXkKIAkJICoJWy4uLl0gYXMgcGFydCBvZiBEQUQgWy4uLl0gdGhlcmUgaXMgbm8gbmVlZAogCQkgKgl0byBkZWxheSBhZ2FpbiBiZWZvcmUgc2VuZGluZyB0aGUgZmlyc3QgUlMKIAkJICovCi0JCW5kaXNjX3NlbmRfcnMoaWZwLT5pZGV2LT5kZXYsICZpZnAtPmFkZHIsICZhbGxfcm91dGVycyk7CisJCW5kaXNjX3NlbmRfcnMoaWZwLT5pZGV2LT5kZXYsICZpZnAtPmFkZHIsICZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTsKIAogCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CiAJCWlmcC0+cHJvYmVzID0gMTsKQEAgLTI3NTMsMTIgKzI4MzksMTIgQEAKIHsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmEgPSBOVUxMOwogCXN0cnVjdCBpZjZfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc3RhdGUtPnAubmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJZm9yIChzdGF0ZS0+YnVja2V0ID0gMDsgc3RhdGUtPmJ1Y2tldCA8IElONl9BRERSX0hTSVpFOyArK3N0YXRlLT5idWNrZXQpIHsKIAkJaWZhID0gaW5ldDZfYWRkcl9sc3Rbc3RhdGUtPmJ1Y2tldF07CiAKLQkJd2hpbGUgKGlmYSAmJiBpZmEtPmlkZXYtPmRldi0+bmRfbmV0ICE9IG5ldCkKKwkJd2hpbGUgKGlmYSAmJiAhbmV0X2VxKGRldl9uZXQoaWZhLT5pZGV2LT5kZXYpLCBuZXQpKQogCQkJaWZhID0gaWZhLT5sc3RfbmV4dDsKIAkJaWYgKGlmYSkKIAkJCWJyZWFrOwpAQCAtMjc2OSwxMiArMjg1NSwxMiBAQAogc3RhdGljIHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmNl9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhKQogewogCXN0cnVjdCBpZjZfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc3RhdGUtPnAubmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJaWZhID0gaWZhLT5sc3RfbmV4dDsKIHRyeV9hZ2FpbjoKIAlpZiAoaWZhKSB7Ci0JCWlmIChpZmEtPmlkZXYtPmRldi0+bmRfbmV0ICE9IG5ldCkgeworCQlpZiAoIW5ldF9lcShkZXZfbmV0KGlmYS0+aWRldi0+ZGV2KSwgbmV0KSkgewogCQkJaWZhID0gaWZhLT5sc3RfbmV4dDsKIAkJCWdvdG8gdHJ5X2FnYWluOwogCQl9CkBAIC0yODkyLDkgKzI5NzgsOSBAQAogCXU4IGhhc2ggPSBpcHY2X2FkZHJfaGFzaChhZGRyKTsKIAlyZWFkX2xvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7CiAJZm9yIChpZnAgPSBpbmV0Nl9hZGRyX2xzdFtoYXNoXTsgaWZwOyBpZnAgPSBpZnAtPmxzdF9uZXh0KSB7Ci0JCWlmIChpZnAtPmlkZXYtPmRldi0+bmRfbmV0ICE9IG5ldCkKKwkJaWYgKCFuZXRfZXEoZGV2X25ldChpZnAtPmlkZXYtPmRldiksIG5ldCkpCiAJCQljb250aW51ZTsKLQkJaWYgKGlwdjZfYWRkcl9jbXAoJmlmcC0+YWRkciwgYWRkcikgPT0gMCAmJgorCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsIGFkZHIpICYmCiAJCSAgICAoaWZwLT5mbGFncyAmIElGQV9GX0hPTUVBRERSRVNTKSkgewogCQkJcmV0ID0gMTsKIAkJCWJyZWFrOwpAQCAtMzA0MSwxNSArMzEyNywxMiBAQAogc3RhdGljIGludAogaW5ldDZfcnRtX2RlbGFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwogCXN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVgrMV07CiAJc3RydWN0IGluNl9hZGRyICpwZng7CiAJaW50IGVycjsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZBX01BWCwgaWZhX2lwdjZfcG9saWN5KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTMwNTksNyArMzE0Miw3IEBACiAJaWYgKHBmeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBpbmV0Nl9hZGRyX2RlbChpZm0tPmlmYV9pbmRleCwgcGZ4LCBpZm0tPmlmYV9wcmVmaXhsZW4pOworCXJldHVybiBpbmV0Nl9hZGRyX2RlbChuZXQsIGlmbS0+aWZhX2luZGV4LCBwZngsIGlmbS0+aWZhX3ByZWZpeGxlbik7CiB9CiAKIHN0YXRpYyBpbnQgaW5ldDZfYWRkcl9tb2RpZnkoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwLCB1OCBpZmFfZmxhZ3MsCkBAIC0zMTAyLDcgKzMxODUsNyBAQAogc3RhdGljIGludAogaW5ldDZfcnRtX25ld2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwogCXN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVgrMV07CiAJc3RydWN0IGluNl9hZGRyICpwZng7CkBAIC0zMTEyLDkgKzMxOTUsNiBAQAogCXU4IGlmYV9mbGFnczsKIAlpbnQgZXJyOwogCi0JaWYgKG5ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkFfTUFYLCBpZmFfaXB2Nl9wb2xpY3kpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMzEzNSw3ICszMjE1LDcgQEAKIAkJdmFsaWRfbGZ0ID0gSU5GSU5JVFlfTElGRV9USU1FOwogCX0KIAotCWRldiA9ICBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZm0tPmlmYV9pbmRleCk7CisJZGV2ID0gIF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGlmbS0+aWZhX2luZGV4KTsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0zMTQ4LDggKzMyMjgsOSBAQAogCQkgKiBJdCB3b3VsZCBiZSBiZXN0IHRvIGNoZWNrIGZvciAhTkxNX0ZfQ1JFQVRFIGhlcmUgYnV0CiAJCSAqIHVzZXJzcGFjZSBhbHJlYXkgcmVsaWVzIG9uIG5vdCBoYXZpbmcgdG8gcHJvdmlkZSB0aGlzLgogCQkgKi8KLQkJcmV0dXJuIGluZXQ2X2FkZHJfYWRkKGlmbS0+aWZhX2luZGV4LCBwZngsIGlmbS0+aWZhX3ByZWZpeGxlbiwKLQkJCQkgICAgICBpZmFfZmxhZ3MsIHByZWZlcnJlZF9sZnQsIHZhbGlkX2xmdCk7CisJCXJldHVybiBpbmV0Nl9hZGRyX2FkZChuZXQsIGlmbS0+aWZhX2luZGV4LCBwZngsCisJCQkJICAgICAgaWZtLT5pZmFfcHJlZml4bGVuLCBpZmFfZmxhZ3MsCisJCQkJICAgICAgcHJlZmVycmVkX2xmdCwgdmFsaWRfbGZ0KTsKIAl9CiAKIAlpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0VYQ0wgfHwKQEAgLTMzMTQsMTIgKzMzOTUsMTMgQEAKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7CiAJc3RydWN0IGlmbWNhZGRyNiAqaWZtY2E7CiAJc3RydWN0IGlmYWNhZGRyNiAqaWZhY2E7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAKIAlzX2lkeCA9IGNiLT5hcmdzWzBdOwogCXNfaXBfaWR4ID0gaXBfaWR4ID0gY2ItPmFyZ3NbMV07CiAKIAlpZHggPSAwOwotCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikgeworCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikgewogCQlpZiAoaWR4IDwgc19pZHgpCiAJCQlnb3RvIGNvbnQ7CiAJCWlmIChpZHggPiBzX2lkeCkKQEAgLTMzODYsNDIgKzM0NjgsMzAgQEAKIAogc3RhdGljIGludCBpbmV0Nl9kdW1wX2lmYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OwogCWVudW0gYWRkcl90eXBlX3QgdHlwZSA9IFVOSUNBU1RfQUREUjsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gMDsKLQogCXJldHVybiBpbmV0Nl9kdW1wX2FkZHIoc2tiLCBjYiwgdHlwZSk7CiB9CiAKIHN0YXRpYyBpbnQgaW5ldDZfZHVtcF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OwogCWVudW0gYWRkcl90eXBlX3QgdHlwZSA9IE1VTFRJQ0FTVF9BRERSOwogCi0JaWYgKG5ldCAhPSAmaW5pdF9uZXQpCi0JCXJldHVybiAwOwotCiAJcmV0dXJuIGluZXQ2X2R1bXBfYWRkcihza2IsIGNiLCB0eXBlKTsKIH0KIAogCiBzdGF0aWMgaW50IGluZXQ2X2R1bXBfaWZhY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKIAllbnVtIGFkZHJfdHlwZV90IHR5cGUgPSBBTllDQVNUX0FERFI7CiAKLQlpZiAobmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gaW5ldDZfZHVtcF9hZGRyKHNrYiwgY2IsIHR5cGUpOwogfQogCiBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRhZGRyKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLAogCQkJICAgICB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gaW5fc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGluX3NrYi0+c2spOwogCXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYKzFdOwogCXN0cnVjdCBpbjZfYWRkciAqYWRkciA9IE5VTEw7CkBAIC0zNDMwLDkgKzM1MDAsNiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVycjsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZBX01BWCwgaWZhX2lwdjZfcG9saWN5KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvdXQ7CkBAIC0zNDQ1LDcgKzM1MTIsNyBAQAogCiAJaWZtID0gbmxtc2dfZGF0YShubGgpOwogCWlmIChpZm0tPmlmYV9pbmRleCkKLQkJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZtLT5pZmFfaW5kZXgpOworCQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBpZm0tPmlmYV9pbmRleCk7CiAKIAlpZiAoKGlmYSA9IGlwdjZfZ2V0X2lmYWRkcihuZXQsIGFkZHIsIGRldiwgMSkpID09IE5VTEwpIHsKIAkJZXJyID0gLUVBRERSTk9UQVZBSUw7CkBAIC0zNDY1LDcgKzM1MzIsNyBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXRfaWZhOwogCX0KLQllcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCAmaW5pdF9uZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQpOworCWVyciA9IHJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihpbl9za2IpLnBpZCk7CiBlcnJvdXRfaWZhOgogCWluNl9pZmFfcHV0KGlmYSk7CiBlcnJvdXQ6CkBAIC0zNDc1LDYgKzM1NDIsNyBAQAogc3RhdGljIHZvaWQgaW5ldDZfaWZhX25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWZhLT5pZGV2LT5kZXYpOwogCWludCBlcnIgPSAtRU5PQlVGUzsKIAogCXNrYiA9IG5sbXNnX25ldyhpbmV0Nl9pZmFkZHJfbXNnc2l6ZSgpLCBHRlBfQVRPTUlDKTsKQEAgLTM0ODgsMTAgKzM1NTYsMTAgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQotCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0lQVjZfSUZBRERSLCBlcnIpOworCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfSUZBRERSLCBlcnIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZiwKQEAgLTM1MzMsNiArMzYwMSw5IEBACiAjaWZkZWYgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQKIAlhcnJheVtERVZDT05GX09QVElNSVNUSUNfREFEXSA9IGNuZi0+b3B0aW1pc3RpY19kYWQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEUKKwlhcnJheVtERVZDT05GX01DX0ZPUldBUkRJTkddID0gY25mLT5tY19mb3J3YXJkaW5nOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXQ2X2lmX25sbXNnX3NpemUodm9pZCkKQEAgLTM2NTAsMTggKzM3MjEsMTUgQEAKIAogc3RhdGljIGludCBpbmV0Nl9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWludCBpZHgsIGVycjsKIAlpbnQgc19pZHggPSBjYi0+YXJnc1swXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAKLQlpZiAobmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIDA7Ci0KIAlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwogCWlkeCA9IDA7Ci0JZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KSB7CisJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CiAJCWlmIChpZHggPCBzX2lkeCkKIAkJCWdvdG8gY29udDsKIAkJaWYgKChpZGV2ID0gaW42X2Rldl9nZXQoZGV2KSkgPT0gTlVMTCkKQEAgLTM2ODMsNiArMzc1MSw3IEBACiB2b2lkIGluZXQ2X2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpZGV2LT5kZXYpOwogCWludCBlcnIgPSAtRU5PQlVGUzsKIAogCXNrYiA9IG5sbXNnX25ldyhpbmV0Nl9pZl9ubG1zZ19zaXplKCksIEdGUF9BVE9NSUMpOwpAQCAtMzY5NiwxMCArMzc2NSwxMCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCi0JCXJ0bmxfc2V0X3NrX2VycigmaW5pdF9uZXQsIFJUTkxHUlBfSVBWNl9JRkFERFIsIGVycik7CisJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9JRkFERFIsIGVycik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXQ2X3ByZWZpeF9ubG1zZ19zaXplKHZvaWQpCkBAIC0zNzUyLDYgKzM4MjEsNyBAQAogCQkJIHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCiAJc2tiID0gbmxtc2dfbmV3KGluZXQ2X3ByZWZpeF9ubG1zZ19zaXplKCksIEdGUF9BVE9NSUMpOwpAQCAtMzc2NSwxMCArMzgzNSwxMCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X1BSRUZJWCwgTlVMTCwgR0ZQX0FUT01JQyk7CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCi0JCXJ0bmxfc2V0X3NrX2VycigmaW5pdF9uZXQsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIGVycik7CisJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIGVycik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faXB2Nl9pZmFfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwKQpAQCAtMzg2NCw3ICszOTM0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYWRkcmNvbmZfc3lzY3RsX3RhYmxlCiB7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7Ci0JY3RsX3RhYmxlIGFkZHJjb25mX3ZhcnNbX19ORVRfSVBWNl9NQVhdOworCWN0bF90YWJsZSBhZGRyY29uZl92YXJzW0RFVkNPTkZfTUFYKzFdOwogCWNoYXIgKmRldl9uYW1lOwogfSBhZGRyY29uZl9zeXNjdGwgX19yZWFkX21vc3RseSA9IHsKIAkuc3lzY3RsX2hlYWRlciA9IE5VTEwsCkBAIC00MDgyLDYgKzQxNTIsMTYgQEAKIAogCQl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFCisJCXsKKwkJCS5jdGxfbmFtZQk9CUNUTF9VTk5VTUJFUkVELAorCQkJLnByb2NuYW1lCT0JIm1jX2ZvcndhcmRpbmciLAorCQkJLmRhdGEJCT0JJmlwdjZfZGV2Y29uZi5tY19mb3J3YXJkaW5nLAorCQkJLm1heGxlbgkJPQlzaXplb2YoaW50KSwKKwkJCS5tb2RlCQk9CTA2NDQsCisJCQkucHJvY19oYW5kbGVyCT0JJnByb2NfZG9pbnR2ZWMsCisJCX0sCisjZW5kaWYKIAkJewogCQkJLmN0bF9uYW1lCT0JMCwJLyogc2VudGluZWwgKi8KIAkJfQpAQCAtNDE2Myw3ICs0MjQzLDcgQEAKIAkJCSAgICAgIE5FVF9JUFY2X05FSUdILCAiaXB2NiIsCiAJCQkgICAgICAmbmRpc2NfaWZpbmZvX3N5c2N0bF9jaGFuZ2UsCiAJCQkgICAgICBOVUxMKTsKLQlfX2FkZHJjb25mX3N5c2N0bF9yZWdpc3RlcihpZGV2LT5kZXYtPm5kX25ldCwgaWRldi0+ZGV2LT5uYW1lLAorCV9fYWRkcmNvbmZfc3lzY3RsX3JlZ2lzdGVyKGRldl9uZXQoaWRldi0+ZGV2KSwgaWRldi0+ZGV2LT5uYW1lLAogCQkJaWRldi0+ZGV2LT5pZmluZGV4LCBpZGV2LCAmaWRldi0+Y25mKTsKIH0KIApAQCAtNDI1OCw2ICs0MzM4LDMyIEBACiAKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9pbmV0NmFkZHJfbm90aWZpZXIpOwogCisKK3N0YXRpYyBpbnQgYWRkcmNvbmZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRyY29uZl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKworCXJ0bmxfbG9jaygpOworCS8qIGNsZWFuIGRldiBsaXN0ICovCisJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CisJCWlmIChfX2luNl9kZXZfZ2V0KGRldikgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlhZGRyY29uZl9pZmRvd24oZGV2LCAxKTsKKwl9CisJYWRkcmNvbmZfaWZkb3duKG5ldC0+bG9vcGJhY2tfZGV2LCAyKTsKKwlydG5sX3VubG9jaygpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGFkZHJjb25mX25ldF9vcHMgPSB7CisJLmluaXQgPSBhZGRyY29uZl9uZXRfaW5pdCwKKwkuZXhpdCA9IGFkZHJjb25mX25ldF9leGl0LAorfTsKKwogLyoKICAqCUluaXQgLyBjbGVhbnVwIGNvZGUKICAqLwpAQCAtNDI5OSwxNCArNDQwNSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJsbzsKIAotCWlwNl9udWxsX2VudHJ5LnUuZHN0LmRldiA9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKLQlpcDZfbnVsbF9lbnRyeS5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChpbml0X25ldC5sb29wYmFja19kZXYpOwotI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwotCWlwNl9wcm9oaWJpdF9lbnRyeS51LmRzdC5kZXYgPSBpbml0X25ldC5sb29wYmFja19kZXY7Ci0JaXA2X3Byb2hpYml0X2VudHJ5LnJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGluaXRfbmV0Lmxvb3BiYWNrX2Rldik7Ci0JaXA2X2Jsa19ob2xlX2VudHJ5LnUuZHN0LmRldiA9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKLQlpcDZfYmxrX2hvbGVfZW50cnkucnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoaW5pdF9uZXQubG9vcGJhY2tfZGV2KTsKLSNlbmRpZgorCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmFkZHJjb25mX25ldF9vcHMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwdjZfZGV2X25vdGYpOwogCkBAIC00MzM2LDMxICs0NDM3LDE5IEBACiAKIHZvaWQgYWRkcmNvbmZfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhOwogCWludCBpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwdjZfZGV2X25vdGYpOworCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmYWRkcmNvbmZfbmV0X29wcyk7CiAKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFkZHJjb25mX29wcyk7CiAKIAlydG5sX2xvY2soKTsKIAogCS8qCi0JICoJY2xlYW4gZGV2IGxpc3QuCi0JICovCi0KLQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBkZXYpIHsKLQkJaWYgKF9faW42X2Rldl9nZXQoZGV2KSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWFkZHJjb25mX2lmZG93bihkZXYsIDEpOwotCX0KLQlhZGRyY29uZl9pZmRvd24oaW5pdF9uZXQubG9vcGJhY2tfZGV2LCAyKTsKLQotCS8qCiAJICoJQ2hlY2sgaGFzaCB0YWJsZS4KIAkgKi8KLQogCXdyaXRlX2xvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7CiAJZm9yIChpPTA7IGkgPCBJTjZfQUREUl9IU0laRTsgaSsrKSB7CiAJCWZvciAoaWZhPWluZXQ2X2FkZHJfbHN0W2ldOyBpZmE7ICkgewpAQCAtNDM3Nyw2ICs0NDY2LDcgQEAKIAl3cml0ZV91bmxvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7CiAKIAlkZWxfdGltZXIoJmFkZHJfY2hrX3RpbWVyKTsKLQogCXJ0bmxfdW5sb2NrKCk7CisKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFkZHJjb25mX25ldF9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmxhYmVsLmMgYi9uZXQvaXB2Ni9hZGRybGFiZWwuYwppbmRleCBhM2M1YTcyLi45YmZhODg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRybGFiZWwuYworKysgYi9uZXQvaXB2Ni9hZGRybGFiZWwuYwpAQCAtNTgsNiArNTgsNyBAQAogICogOjpmZmZmOjA6MC85NglWNE1BUFBFRAk0CiAgKiBmYzAwOjovNwkJTi9BCQk1CQlVTEEgKFJGQyA0MTkzKQogICogMjAwMTo6LzMyCQlOL0EJCTYJCVRlcmVkbyAoUkZDIDQzODApCisgKiAyMDAxOjEwOjovMjgJCU4vQQkJNwkJT1JDSElEIChSRkMgNDg0MykKICAqCiAgKiBOb3RlOiAweGZmZmZmZmZmIGlzIHVzZWQgaWYgd2UgZG8gbm90IGhhdmUgYW55IHBvbGljaWVzLgogICovCkBAIC04NSw2ICs4NiwxMCBAQAogCQkucHJlZml4ID0gJihzdHJ1Y3QgaW42X2FkZHIpe3t7IDB4MjAsIDB4MDEgfX19LAogCQkucHJlZml4bGVuID0gMzIsCiAJCS5sYWJlbCA9IDYsCisJfSx7CS8qIDIwMDE6MTA6Oi8yOCAqLworCQkucHJlZml4ID0gJihzdHJ1Y3QgaW42X2FkZHIpe3t7IDB4MjAsIDB4MDEsIDB4MDAsIDB4MTAgfX19LAorCQkucHJlZml4bGVuID0gMjgsCisJCS5sYWJlbCA9IDcsCiAJfSx7CS8qIDo6ZmZmZjowOjAgKi8KIAkJLnByZWZpeCA9ICYoc3RydWN0IGluNl9hZGRyKXt7eyBbMTBdID0gMHhmZiwgWzExXSA9IDB4ZmYgfX19LAogCQkucHJlZml4bGVuID0gOTYsCkBAIC0xNjEsNyArMTY2LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCUFERFJMQUJFTChLRVJOX0RFQlVHICIlcyhhZGRyPSIgTklQNl9GTVQgIiwgdHlwZT0lZCwgaWZpbmRleD0lZCkgPT4gJTA4eFxuIiwKLQkJCV9fRlVOQ1RJT05fXywKKwkJCV9fZnVuY19fLAogCQkJTklQNigqYWRkciksIHR5cGUsIGlmaW5kZXgsCiAJCQlsYWJlbCk7CiAKQEAgLTE3Nyw3ICsxODIsNyBAQAogCWludCBhZGRydHlwZTsKIAogCUFERFJMQUJFTChLRVJOX0RFQlVHICIlcyhwcmVmaXg9IiBOSVA2X0ZNVCAiLCBwcmVmaXhsZW49JWQsIGlmaW5kZXg9JWQsIGxhYmVsPSV1KVxuIiwKLQkJCV9fRlVOQ1RJT05fXywKKwkJCV9fZnVuY19fLAogCQkJTklQNigqcHJlZml4KSwgcHJlZml4bGVuLAogCQkJaWZpbmRleCwKIAkJCSh1bnNpZ25lZCBpbnQpbGFiZWwpOwpAQCAtMjIxLDcgKzIyNiw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlBRERSTEFCRUwoS0VSTl9ERUJVRyAiJXMobmV3cD0lcCwgcmVwbGFjZT0lZClcbiIsCi0JCQlfX0ZVTkNUSU9OX18sCisJCQlfX2Z1bmNfXywKIAkJCW5ld3AsIHJlcGxhY2UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZpcDZhZGRybGJsX3RhYmxlLmhlYWQpKSB7CkBAIC0yNjMsNyArMjY4LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCUFERFJMQUJFTChLRVJOX0RFQlVHICIlcyhwcmVmaXg9IiBOSVA2X0ZNVCAiLCBwcmVmaXhsZW49JWQsIGlmaW5kZXg9JWQsIGxhYmVsPSV1LCByZXBsYWNlPSVkKVxuIiwKLQkJCV9fRlVOQ1RJT05fXywKKwkJCV9fZnVuY19fLAogCQkJTklQNigqcHJlZml4KSwgcHJlZml4bGVuLAogCQkJaWZpbmRleCwKIAkJCSh1bnNpZ25lZCBpbnQpbGFiZWwsCkBAIC0yODksNyArMjk0LDcgQEAKIAlpbnQgcmV0ID0gLUVTUkNIOwogCiAJQUREUkxBQkVMKEtFUk5fREVCVUcgIiVzKHByZWZpeD0iIE5JUDZfRk1UICIsIHByZWZpeGxlbj0lZCwgaWZpbmRleD0lZClcbiIsCi0JCQlfX0ZVTkNUSU9OX18sCisJCQlfX2Z1bmNfXywKIAkJCU5JUDYoKnByZWZpeCksIHByZWZpeGxlbiwKIAkJCWlmaW5kZXgpOwogCkBAIC0zMTMsNyArMzE4LDcgQEAKIAlpbnQgcmV0OwogCiAJQUREUkxBQkVMKEtFUk5fREVCVUcgIiVzKHByZWZpeD0iIE5JUDZfRk1UICIsIHByZWZpeGxlbj0lZCwgaWZpbmRleD0lZClcbiIsCi0JCQlfX0ZVTkNUSU9OX18sCisJCQlfX2Z1bmNfXywKIAkJCU5JUDYoKnByZWZpeCksIHByZWZpeGxlbiwKIAkJCWlmaW5kZXgpOwogCkBAIC0zMzAsNyArMzM1LDcgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCUFERFJMQUJFTChLRVJOX0RFQlVHICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUFERFJMQUJFTChLRVJOX0RFQlVHICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcDZhZGRybGJsX2luaXRfdGFibGUpOyBpKyspIHsKIAkJaW50IHJldCA9IGlwNmFkZHJsYmxfYWRkKGlwNmFkZHJsYmxfaW5pdF90YWJsZVtpXS5wcmVmaXgsCkBAIC0zNTksNyArMzY0LDcgQEAKIHN0YXRpYyBpbnQgaXA2YWRkcmxibF9uZXdkZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkgICAgIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IGlmYWRkcmxibG1zZyAqaWZhbDsKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkFMX01BWCsxXTsKIAlzdHJ1Y3QgaW42X2FkZHIgKnBmeDsKQEAgLTQ0Nyw3ICs0NTIsNyBAQAogCiBzdGF0aWMgaW50IGlwNmFkZHJsYmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBpcDZhZGRybGJsX2VudHJ5ICpwOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAJaW50IGlkeCA9IDAsIHNfaWR4ID0gY2ItPmFyZ3NbMF07CkBAIC00ODUsNyArNDkwLDcgQEAKIHN0YXRpYyBpbnQgaXA2YWRkcmxibF9nZXQoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyKiBubGgsCiAJCQkgIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBpbl9za2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoaW5fc2tiLT5zayk7CiAJc3RydWN0IGlmYWRkcmxibG1zZyAqaWZhbDsKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkFMX01BWCsxXTsKIAlzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBiZGRhYzBlLi4zYzZhYWZiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTYxLDYgKzYxLDkgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorI2luY2x1ZGUgPGxpbnV4L21yb3V0ZTYuaD4KKyNlbmRpZgogCiBNT0RVTEVfQVVUSE9SKCJDYXN0IG9mIGRvemVucyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IHByb3RvY29sIHN0YWNrIGZvciBMaW51eCIpOwpAQCAtOTIsOSArOTUsNiBAQAogCWludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwOwogCWludCBlcnI7CiAKLQlpZiAobmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7Ci0KIAlpZiAoc29jay0+dHlwZSAhPSBTT0NLX1JBVyAmJgogCSAgICBzb2NrLT50eXBlICE9IFNPQ0tfREdSQU0gJiYKIAkgICAgIWluZXRfZWhhc2hfc2VjcmV0KQpAQCAtMjQ4LDYgKzI0OCw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJX19iZTMyIHY0YWRkciA9IDA7CiAJdW5zaWduZWQgc2hvcnQgc251bTsKIAlpbnQgYWRkcl90eXBlID0gMDsKQEAgLTI3OCw3ICsyNzksNyBAQAogCS8qIENoZWNrIGlmIHRoZSBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIGhvc3QuICovCiAJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEKSB7CiAJCXY0YWRkciA9IGFkZHItPnNpbjZfYWRkci5zNl9hZGRyMzJbM107Ci0JCWlmIChpbmV0X2FkZHJfdHlwZSgmaW5pdF9uZXQsIHY0YWRkcikgIT0gUlROX0xPQ0FMKSB7CisJCWlmIChpbmV0X2FkZHJfdHlwZShuZXQsIHY0YWRkcikgIT0gUlROX0xPQ0FMKSB7CiAJCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zMDAsNyArMzAxLDcgQEAKIAkJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBzay0+c2tfYm91bmRfZGV2X2lmKTsKKwkJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CiAJCQkJaWYgKCFkZXYpIHsKIAkJCQkJZXJyID0gLUVOT0RFVjsKIAkJCQkJZ290byBvdXQ7CkBAIC0zMTIsNyArMzEzLDcgQEAKIAkJCSAqLwogCQkJdjRhZGRyID0gTE9PUEJBQ0s0X0lQVjY7CiAJCQlpZiAoIShhZGRyX3R5cGUgJiBJUFY2X0FERFJfTVVMVElDQVNUKSkJewotCQkJCWlmICghaXB2Nl9jaGtfYWRkcigmaW5pdF9uZXQsICZhZGRyLT5zaW42X2FkZHIsCisJCQkJaWYgKCFpcHY2X2Noa19hZGRyKG5ldCwgJmFkZHItPnNpbjZfYWRkciwKIAkJCQkJCSAgIGRldiwgMCkpIHsKIAkJCQkJaWYgKGRldikKIAkJCQkJCWRldl9wdXQoZGV2KTsKQEAgLTQ0MCw2ICs0NDEsNyBAQAogaW50IGluZXQ2X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXN3aXRjaChjbWQpCiAJewpAQCAtNDUyLDE0ICs0NTQsMTQgQEAKIAljYXNlIFNJT0NBRERSVDoKIAljYXNlIFNJT0NERUxSVDoKIAotCQlyZXR1cm4oaXB2Nl9yb3V0ZV9pb2N0bChjbWQsKHZvaWQgX191c2VyICopYXJnKSk7CisJCXJldHVybihpcHY2X3JvdXRlX2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpKTsKIAogCWNhc2UgU0lPQ1NJRkFERFI6Ci0JCXJldHVybiBhZGRyY29uZl9hZGRfaWZhZGRyKCh2b2lkIF9fdXNlciAqKSBhcmcpOworCQlyZXR1cm4gYWRkcmNvbmZfYWRkX2lmYWRkcihuZXQsICh2b2lkIF9fdXNlciAqKSBhcmcpOwogCWNhc2UgU0lPQ0RJRkFERFI6Ci0JCXJldHVybiBhZGRyY29uZl9kZWxfaWZhZGRyKCh2b2lkIF9fdXNlciAqKSBhcmcpOworCQlyZXR1cm4gYWRkcmNvbmZfZGVsX2lmYWRkcihuZXQsICh2b2lkIF9fdXNlciAqKSBhcmcpOwogCWNhc2UgU0lPQ1NJRkRTVEFERFI6Ci0JCXJldHVybiBhZGRyY29uZl9zZXRfZHN0YWRkcigodm9pZCBfX3VzZXIgKikgYXJnKTsKKwkJcmV0dXJuIGFkZHJjb25mX3NldF9kc3RhZGRyKG5ldCwgKHZvaWQgX191c2VyICopIGFyZyk7CiAJZGVmYXVsdDoKIAkJaWYgKCFzay0+c2tfcHJvdC0+aW9jdGwpCiAJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpAQCAtNjc4LDYgKzY4MCwxMjkgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoaXB2Nl9vcHRfYWNjZXB0ZWQpOwogCitzdGF0aWMgc3RydWN0IGluZXQ2X3Byb3RvY29sICppcHY2X2dzb19wdWxsX2V4dGhkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICBpbnQgcHJvdG8pCit7CisJc3RydWN0IGluZXQ2X3Byb3RvY29sICpvcHMgPSBOVUxMOworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpvcHRoOworCQlpbnQgbGVuOworCisJCWlmIChwcm90byAhPSBORVhUSERSX0hPUCkgeworCQkJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X3Byb3Rvc1twcm90b10pOworCisJCQlpZiAodW5saWtlbHkoIW9wcykpCisJCQkJYnJlYWs7CisKKwkJCWlmICghKG9wcy0+ZmxhZ3MgJiBJTkVUNl9QUk9UT19HU09fRVhUSERSKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIDgpKSkKKwkJCWJyZWFrOworCisJCW9wdGggPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJbGVuID0gaXB2Nl9vcHRsZW4ob3B0aCk7CisKKwkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkpCisJCQlicmVhazsKKworCQlwcm90byA9IG9wdGgtPm5leHRoZHI7CisJCV9fc2tiX3B1bGwoc2tiLCBsZW4pOworCX0KKworCXJldHVybiBvcHM7Cit9CisKK3N0YXRpYyBpbnQgaXB2Nl9nc29fc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpcHY2aGRyICppcHY2aDsKKwlzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKm9wczsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXB2NmgpKSkpCisJCWdvdG8gb3V0OworCisJaXB2NmggPSBpcHY2X2hkcihza2IpOworCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwdjZoKSk7CisJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlvcHMgPSBpcHY2X2dzb19wdWxsX2V4dGhkcnMoc2tiLCBpcHY2aC0+bmV4dGhkcik7CisJaWYgKGxpa2VseShvcHMgJiYgb3BzLT5nc29fc2VuZF9jaGVjaykpIHsKKwkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwkJZXJyID0gb3BzLT5nc29fc2VuZF9jaGVjayhza2IpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOworCXN0cnVjdCBpcHY2aGRyICppcHY2aDsKKwlzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKm9wczsKKworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9WNl9DU1VNKSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfU0c7CisKKwlpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmCisJCSAgICAgfihTS0JfR1NPX1VEUCB8CisJCSAgICAgICBTS0JfR1NPX0RPREdZIHwKKwkJICAgICAgIFNLQl9HU09fVENQX0VDTiB8CisJCSAgICAgICBTS0JfR1NPX1RDUFY2IHwKKwkJICAgICAgIDApKSkKKwkJZ290byBvdXQ7CisKKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwdjZoKSkpKQorCQlnb3RvIG91dDsKKworCWlwdjZoID0gaXB2Nl9oZHIoc2tiKTsKKwlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCppcHY2aCkpOworCXNlZ3MgPSBFUlJfUFRSKC1FUFJPVE9OT1NVUFBPUlQpOworCisJcmN1X3JlYWRfbG9jaygpOworCW9wcyA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwdjZoLT5uZXh0aGRyKTsKKwlpZiAobGlrZWx5KG9wcyAmJiBvcHMtPmdzb19zZWdtZW50KSkgeworCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOworCQlzZWdzID0gb3BzLT5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkKKwkJZ290byBvdXQ7CisKKwlmb3IgKHNrYiA9IHNlZ3M7IHNrYjsgc2tiID0gc2tiLT5uZXh0KSB7CisJCWlwdjZoID0gaXB2Nl9oZHIoc2tiKTsKKwkJaXB2NmgtPnBheWxvYWRfbGVuID0gaHRvbnMoc2tiLT5sZW4gLSBza2ItPm1hY19sZW4gLQorCQkJCQkgICBzaXplb2YoKmlwdjZoKSk7CisJfQorCitvdXQ6CisJcmV0dXJuIHNlZ3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB2Nl9wYWNrZXRfdHlwZSA9IHsKKwkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNiksCisJLmZ1bmMgPSBpcHY2X3JjdiwKKwkuZ3NvX3NlbmRfY2hlY2sgPSBpcHY2X2dzb19zZW5kX2NoZWNrLAorCS5nc29fc2VnbWVudCA9IGlwdjZfZ3NvX3NlZ21lbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpcHY2X3BhY2tldF9pbml0KHZvaWQpCit7CisJZGV2X2FkZF9wYWNrKCZpcHY2X3BhY2tldF90eXBlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXB2Nl9wYWNrZXRfY2xlYW51cCh2b2lkKQoreworCWRldl9yZW1vdmVfcGFjaygmaXB2Nl9wYWNrZXRfdHlwZSk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfaXB2Nl9taWJzKHZvaWQpCiB7CiAJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopaXB2Nl9zdGF0aXN0aWNzLApAQCAtNzIwLDYgKzg0NSw4IEBACiAKIHN0YXRpYyBpbnQgaW5ldDZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogeworCWludCBlcnIgPSAwOworCiAJbmV0LT5pcHY2LnN5c2N0bC5iaW5kdjZvbmx5ID0gMDsKIAluZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5ID0gMDsKIAluZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZSA9IDQwOTY7CkBAIC03MzEsMTIgKzg1OCwzNiBAQAogCW5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X21pbl9hZHZtc3MgPSBJUFY2X01JTl9NVFUgLSAyMCAtIDQwOwogCW5ldC0+aXB2Ni5zeXNjdGwuaWNtcHY2X3RpbWUgPSAxKkhaOwogCi0JcmV0dXJuIDA7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwllcnIgPSB1ZHA2X3Byb2NfaW5pdChuZXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWVyciA9IHRjcDZfcHJvY19pbml0KG5ldCk7CisJaWYgKGVycikKKwkJZ290byBwcm9jX3RjcDZfZmFpbDsKKwllcnIgPSBhYzZfcHJvY19pbml0KG5ldCk7CisJaWYgKGVycikKKwkJZ290byBwcm9jX2FjNl9mYWlsOworb3V0OgorI2VuZGlmCisJcmV0dXJuIGVycjsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitwcm9jX2FjNl9mYWlsOgorCXRjcDZfcHJvY19leGl0KG5ldCk7Citwcm9jX3RjcDZfZmFpbDoKKwl1ZHA2X3Byb2NfZXhpdChuZXQpOworCWdvdG8gb3V0OworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGluZXQ2X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlyZXR1cm47CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwl1ZHA2X3Byb2NfZXhpdChuZXQpOworCXRjcDZfcHJvY19leGl0KG5ldCk7CisJYWM2X3Byb2NfZXhpdChuZXQpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaW5ldDZfbmV0X29wcyA9IHsKQEAgLTc1MiwxNCArOTAzLDYgQEAKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSA+IHNpemVvZihkdW1teV9za2ItPmNiKSk7CiAKLSNpZmRlZiBNT0RVTEUKLSNpZiAwIC8qIEZJWE1FIC0tUlIgKi8KLQlpZiAoIW1vZF9tZW1iZXJfcHJlc2VudCgmX190aGlzX21vZHVsZSwgY2FuX3VubG9hZCkpCi0JICByZXR1cm4gLUVJTlZBTDsKLQotCV9fdGhpc19tb2R1bGUuY2FuX3VubG9hZCA9ICZpcHY2X3VubG9hZDsKLSNlbmRpZgotI2VuZGlmCiAJZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnRjcHY2X3Byb3QsIDEpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtODEwLDE5ICs5NTMsMTYgQEAKIAllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpbmV0Nl9uZXRfb3BzKTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlZ2lzdGVyX3Blcm5ldF9mYWlsOwotCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCWVyciA9IGlwdjZfc3lzY3RsX3JlZ2lzdGVyKCk7Ci0JaWYgKGVycikKLQkJZ290byBzeXNjdGxfZmFpbDsKLSNlbmRpZgotCWVyciA9IGljbXB2Nl9pbml0KCZpbmV0Nl9mYW1pbHlfb3BzKTsKKwllcnIgPSBpY21wdjZfaW5pdCgpOwogCWlmIChlcnIpCiAJCWdvdG8gaWNtcF9mYWlsOwotCWVyciA9IG5kaXNjX2luaXQoJmluZXQ2X2ZhbWlseV9vcHMpOworI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorCWlwNl9tcl9pbml0KCk7CisjZW5kaWYKKwllcnIgPSBuZGlzY19pbml0KCk7CiAJaWYgKGVycikKIAkJZ290byBuZGlzY19mYWlsOwotCWVyciA9IGlnbXA2X2luaXQoJmluZXQ2X2ZhbWlseV9vcHMpOworCWVyciA9IGlnbXA2X2luaXQoKTsKIAlpZiAoZXJyKQogCQlnb3RvIGlnbXBfZmFpbDsKIAllcnIgPSBpcHY2X25ldGZpbHRlcl9pbml0KCk7CkBAIC04MzMsMTcgKzk3MywxMCBAQAogCWVyciA9IC1FTk9NRU07CiAJaWYgKHJhdzZfcHJvY19pbml0KCkpCiAJCWdvdG8gcHJvY19yYXc2X2ZhaWw7Ci0JaWYgKHRjcDZfcHJvY19pbml0KCkpCi0JCWdvdG8gcHJvY190Y3A2X2ZhaWw7Ci0JaWYgKHVkcDZfcHJvY19pbml0KCkpCi0JCWdvdG8gcHJvY191ZHA2X2ZhaWw7CiAJaWYgKHVkcGxpdGU2X3Byb2NfaW5pdCgpKQogCQlnb3RvIHByb2NfdWRwbGl0ZTZfZmFpbDsKIAlpZiAoaXB2Nl9taXNjX3Byb2NfaW5pdCgpKQogCQlnb3RvIHByb2NfbWlzYzZfZmFpbDsKLQotCWlmIChhYzZfcHJvY19pbml0KCkpCi0JCWdvdG8gcHJvY19hbnljYXN0Nl9mYWlsOwogCWlmIChpZjZfcHJvY19pbml0KCkpCiAJCWdvdG8gcHJvY19pZjZfZmFpbDsKICNlbmRpZgpAQCAtODgyLDkgKzEwMTUsMTkgQEAKIAllcnIgPSBpcHY2X3BhY2tldF9pbml0KCk7CiAJaWYgKGVycikKIAkJZ290byBpcHY2X3BhY2tldF9mYWlsOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCWVyciA9IGlwdjZfc3lzY3RsX3JlZ2lzdGVyKCk7CisJaWYgKGVycikKKwkJZ290byBzeXNjdGxfZmFpbDsKKyNlbmRpZgogb3V0OgogCXJldHVybiBlcnI7CiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzeXNjdGxfZmFpbDoKKwlpcHY2X3BhY2tldF9jbGVhbnVwKCk7CisjZW5kaWYKIGlwdjZfcGFja2V0X2ZhaWw6CiAJdGNwdjZfZXhpdCgpOwogdGNwdjZfZmFpbDoKQEAgLTkwNSwxNiArMTA0OCwxMCBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWY2X3Byb2NfZXhpdCgpOwogcHJvY19pZjZfZmFpbDoKLQlhYzZfcHJvY19leGl0KCk7Ci1wcm9jX2FueWNhc3Q2X2ZhaWw6CiAJaXB2Nl9taXNjX3Byb2NfZXhpdCgpOwogcHJvY19taXNjNl9mYWlsOgogCXVkcGxpdGU2X3Byb2NfZXhpdCgpOwogcHJvY191ZHBsaXRlNl9mYWlsOgotCXVkcDZfcHJvY19leGl0KCk7Ci1wcm9jX3VkcDZfZmFpbDoKLQl0Y3A2X3Byb2NfZXhpdCgpOwotcHJvY190Y3A2X2ZhaWw6CiAJcmF3Nl9wcm9jX2V4aXQoKTsKIHByb2NfcmF3Nl9mYWlsOgogI2VuZGlmCkBAIC05MjYsMTAgKzEwNjMsNiBAQAogbmRpc2NfZmFpbDoKIAlpY21wdjZfY2xlYW51cCgpOwogaWNtcF9mYWlsOgotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpcHY2X3N5c2N0bF91bnJlZ2lzdGVyKCk7Ci1zeXNjdGxfZmFpbDoKLSNlbmRpZgogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaW5ldDZfbmV0X29wcyk7CiByZWdpc3Rlcl9wZXJuZXRfZmFpbDoKIAljbGVhbnVwX2lwdjZfbWlicygpOwpAQCAtOTU3LDYgKzEwOTAsOSBAQAogCS8qIERpc2FsbG93IGFueSBmdXJ0aGVyIG5ldGxpbmsgbWVzc2FnZXMgKi8KIAlydG5sX3VucmVnaXN0ZXJfYWxsKFBGX0lORVQ2KTsKIAorI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpcHY2X3N5c2N0bF91bnJlZ2lzdGVyKCk7CisjZW5kaWYKIAl1ZHB2Nl9leGl0KCk7CiAJdWRwbGl0ZXY2X2V4aXQoKTsKIAl0Y3B2Nl9leGl0KCk7CkBAIC05NzIsMTEgKzExMDgsOCBAQAogCiAJLyogQ2xlYW51cCBjb2RlIHBhcnRzLiAqLwogCWlmNl9wcm9jX2V4aXQoKTsKLQlhYzZfcHJvY19leGl0KCk7CiAJaXB2Nl9taXNjX3Byb2NfZXhpdCgpOwogCXVkcGxpdGU2X3Byb2NfZXhpdCgpOwotCXVkcDZfcHJvY19leGl0KCk7Ci0JdGNwNl9wcm9jX2V4aXQoKTsKIAlyYXc2X3Byb2NfZXhpdCgpOwogI2VuZGlmCiAJaXB2Nl9uZXRmaWx0ZXJfZmluaSgpOwpAQCAtOTg0LDkgKzExMTcsNyBAQAogCW5kaXNjX2NsZWFudXAoKTsKIAlpY21wdjZfY2xlYW51cCgpOwogCXJhd3Y2X2V4aXQoKTsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JaXB2Nl9zeXNjdGxfdW5yZWdpc3RlcigpOwotI2VuZGlmCisKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmluZXQ2X25ldF9vcHMpOwogCWNsZWFudXBfaXB2Nl9taWJzKCk7CiAJcHJvdG9fdW5yZWdpc3RlcigmcmF3djZfcHJvdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hbnljYXN0LmMgYi9uZXQvaXB2Ni9hbnljYXN0LmMKaW5kZXggOWM3ZjgzZi4uNGUxYjI5ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYW55Y2FzdC5jCisrKyBiL25ldC9pcHY2L2FueWNhc3QuYwpAQCAtNDgsMjkgKzQ4LDYgQEAKIC8qIEJpZyBhYyBsaXN0IGxvY2sgZm9yIGFsbCB0aGUgc29ja2V0cyAqLwogc3RhdGljIERFRklORV9SV0xPQ0soaXB2Nl9za19hY19sb2NrKTsKIAotc3RhdGljIGludAotaXA2X29ubGluayhzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGluZXQ2X2RldgkqaWRldjsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyCSppZmE7Ci0JaW50CW9ubGluazsKLQotCW9ubGluayA9IDA7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7Ci0JaWYgKGlkZXYpIHsKLQkJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJZm9yIChpZmE9aWRldi0+YWRkcl9saXN0OyBpZmE7IGlmYT1pZmEtPmlmX25leHQpIHsKLQkJCW9ubGluayA9IGlwdjZfcHJlZml4X2VxdWFsKGFkZHIsICZpZmEtPmFkZHIsCi0JCQkJCQkgICBpZmEtPnByZWZpeF9sZW4pOwotCQkJaWYgKG9ubGluaykKLQkJCQlicmVhazsKLQkJfQotCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBvbmxpbms7Ci19CiAKIC8qCiAgKglzb2NrZXQgam9pbiBhbiBhbnljYXN0IGdyb3VwCkBAIC04Miw2ICs1OSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdCAqcGFjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlpbnQJaXNob3N0ID0gIWlwdjZfZGV2Y29uZi5mb3J3YXJkaW5nOwogCWludAllcnIgPSAwOwogCkBAIC04OSw3ICs2Nyw3IEBACiAJCXJldHVybiAtRVBFUk07CiAJaWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChpcHY2X2Noa19hZGRyKCZpbml0X25ldCwgYWRkciwgTlVMTCwgMCkpCisJaWYgKGlwdjZfY2hrX2FkZHIobmV0LCBhZGRyLCBOVUxMLCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwYWMgPSBzb2NrX2ttYWxsb2Moc2ssIHNpemVvZihzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdCksIEdGUF9LRVJORUwpOwpAQCAtMTAxLDcgKzc5LDcgQEAKIAlpZiAoaWZpbmRleCA9PSAwKSB7CiAJCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAKLQkJcnQgPSBydDZfbG9va3VwKGFkZHIsIE5VTEwsIDAsIDApOworCQlydCA9IHJ0Nl9sb29rdXAobmV0LCBhZGRyLCBOVUxMLCAwLCAwKTsKIAkJaWYgKHJ0KSB7CiAJCQlkZXYgPSBydC0+cnQ2aV9kZXY7CiAJCQlkZXZfaG9sZChkZXYpOwpAQCAtMTEyLDEwICs5MCwxMCBAQAogCQl9IGVsc2UgewogCQkJLyogcm91dGVyLCBubyBtYXRjaGluZyBpbnRlcmZhY2U6IGp1c3QgcGljayBvbmUgKi8KIAotCQkJZGV2ID0gZGV2X2dldF9ieV9mbGFncygmaW5pdF9uZXQsIElGRl9VUCwgSUZGX1VQfElGRl9MT09QQkFDSyk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2ZsYWdzKG5ldCwgSUZGX1VQLCBJRkZfVVB8SUZGX0xPT1BCQUNLKTsKIAkJfQogCX0gZWxzZQotCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CisJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmluZGV4KTsKIAogCWlmIChkZXYgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PREVWOwpAQCAtMTQxLDcgKzExOSw3IEBACiAJICogVGhpcyBvYnZpYXRlcyB0aGUgbmVlZCBmb3IgcHJvcGFnYXRpbmcgYW55Y2FzdCByb3V0ZXMgd2hpbGUKIAkgKiBzdGlsbCBhbGxvd2luZyBzb21lIG5vbi1yb3V0ZXIgYW55Y2FzdCBwYXJ0aWNpcGF0aW9uLgogCSAqLwotCWlmICghaXA2X29ubGluayhhZGRyLCBkZXYpKSB7CisJaWYgKCFpcHY2X2Noa19wcmVmaXgoYWRkciwgZGV2KSkgewogCQlpZiAoaXNob3N0KQogCQkJZXJyID0gLUVBRERSTk9UQVZBSUw7CiAJCWlmIChlcnIpCkBAIC0xNzYsNiArMTU0LDcgQEAKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdCAqcGFjLCAqcHJldl9wYWM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJd3JpdGVfbG9ja19iaCgmaXB2Nl9za19hY19sb2NrKTsKIAlwcmV2X3BhYyA9IE5VTEw7CkBAIC0xOTYsNyArMTc1LDcgQEAKIAogCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19hY19sb2NrKTsKIAotCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBwYWMtPmFjbF9pZmluZGV4KTsKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgcGFjLT5hY2xfaWZpbmRleCk7CiAJaWYgKGRldikgewogCQlpcHY2X2Rldl9hY19kZWMoZGV2LCAmcGFjLT5hY2xfYWRkcik7CiAJCWRldl9wdXQoZGV2KTsKQEAgLTIxMCw2ICsxODksNyBAQAogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdCAqcGFjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlpbnQJcHJldl9pbmRleDsKIAogCXdyaXRlX2xvY2tfYmgoJmlwdjZfc2tfYWNfbG9jayk7CkBAIC0yMjQsNyArMjA0LDcgQEAKIAkJaWYgKHBhYy0+YWNsX2lmaW5kZXggIT0gcHJldl9pbmRleCkgewogCQkJaWYgKGRldikKIAkJCQlkZXZfcHV0KGRldik7Ci0JCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgcGFjLT5hY2xfaWZpbmRleCk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgcGFjLT5hY2xfaWZpbmRleCk7CiAJCQlwcmV2X2luZGV4ID0gcGFjLT5hY2xfaWZpbmRleDsKIAkJfQogCQlpZiAoZGV2KQpAQCAtMzM0LDkgKzMxNCw3IEBACiAJaWRldi0+YWNfbGlzdCA9IGFjYTsKIAl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCi0JZHN0X2hvbGQoJnJ0LT51LmRzdCk7Ci0JaWYgKGlwNl9pbnNfcnQocnQpKQotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwlpcDZfaW5zX3J0KHJ0KTsKIAogCWFkZHJjb25mX2pvaW5fc29saWN0KGRldiwgJmFjYS0+YWNhX2FkZHIpOwogCkBAIC0zNzgsMTAgKzM1Niw3IEBACiAJYWRkcmNvbmZfbGVhdmVfc29saWN0KGlkZXYsICZhY2EtPmFjYV9hZGRyKTsKIAogCWRzdF9ob2xkKCZhY2EtPmFjYV9ydC0+dS5kc3QpOwotCWlmIChpcDZfZGVsX3J0KGFjYS0+YWNhX3J0KSkKLQkJZHN0X2ZyZWUoJmFjYS0+YWNhX3J0LT51LmRzdCk7Ci0JZWxzZQotCQlkc3RfcmVsZWFzZSgmYWNhLT5hY2FfcnQtPnUuZHN0KTsKKwlpcDZfZGVsX3J0KGFjYS0+YWNhX3J0KTsKIAogCWFjYV9wdXQoYWNhKTsKIAlyZXR1cm4gMDsKQEAgLTQyMiwxNCArMzk3LDE1IEBACiAvKgogICoJY2hlY2sgaWYgZ2l2ZW4gaW50ZXJmYWNlIChvciBhbnksIGlmIGRldj09MCkgaGFzIHRoaXMgYW55Y2FzdCBhZGRyZXNzCiAgKi8KLWludCBpcHY2X2Noa19hY2FzdF9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK2ludCBpcHY2X2Noa19hY2FzdF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlpbnQgZm91bmQgPSAwOwogCiAJaWYgKGRldikKIAkJcmV0dXJuIGlwdjZfY2hrX2FjYXN0X2RldihkZXYsIGFkZHIpOwogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KQorCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikKIAkJaWYgKGlwdjZfY2hrX2FjYXN0X2RldihkZXYsIGFkZHIpKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKQEAgLTQ0MSw2ICs0MTcsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0cnVjdCBhYzZfaXRlcl9zdGF0ZSB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIH07CkBAIC00NTEsOSArNDI4LDEwIEBACiB7CiAJc3RydWN0IGlmYWNhZGRyNiAqaW0gPSBOVUxMOwogCXN0cnVjdCBhYzZfaXRlcl9zdGF0ZSAqc3RhdGUgPSBhYzZfc2VxX3ByaXZhdGUoc2VxKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCXN0YXRlLT5pZGV2ID0gTlVMTDsKLQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBzdGF0ZS0+ZGV2KSB7CisJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgc3RhdGUtPmRldikgewogCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCQlpZGV2ID0gaW42X2Rldl9nZXQoc3RhdGUtPmRldik7CiAJCWlmICghaWRldikKQEAgLTU1MSw4ICs1MjksOCBAQAogCiBzdGF0aWMgaW50IGFjNl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmYWM2X3NlcV9vcHMsCi0JCQlzaXplb2Yoc3RydWN0IGFjNl9pdGVyX3N0YXRlKSk7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJmFjNl9zZXFfb3BzLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgYWM2X2l0ZXJfc3RhdGUpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWM2X3NlcV9mb3BzID0gewpAQCAtNTYwLDIwICs1MzgsMjAgQEAKIAkub3BlbgkJPQlhYzZfc2VxX29wZW4sCiAJLnJlYWQJCT0Jc2VxX3JlYWQsCiAJLmxsc2VlawkJPQlzZXFfbHNlZWssCi0JLnJlbGVhc2UJPQlzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlCT0Jc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotaW50IF9faW5pdCBhYzZfcHJvY19pbml0KHZvaWQpCitpbnQgYWM2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJhbnljYXN0NiIsIFNfSVJVR08sICZhYzZfc2VxX2ZvcHMpKQorCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiYW55Y2FzdDYiLCBTX0lSVUdPLCAmYWM2X3NlcV9mb3BzKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBhYzZfcHJvY19leGl0KHZvaWQpCit2b2lkIGFjNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJhbnljYXN0NiIpOworCXByb2NfbmV0X3JlbW92ZShuZXQsICJhbnljYXN0NiIpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCAwZWMxNDAyLi5jNmJiNGM2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0yODIsNyArMjgyLDcgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqYXNnOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCplc3BoKSkpIHsKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmVzcGgpICsgY3J5cHRvX2FlYWRfaXZzaXplKGFlYWQpKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9maWI2X3J1bGVzLmMgYi9uZXQvaXB2Ni9maWI2X3J1bGVzLmMKaW5kZXggNjk1YzBjYS4uOGQwNTUyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZmliNl9ydWxlcy5jCisrKyBiL25ldC9pcHY2L2ZpYjZfcnVsZXMuYwpAQCAtMjksMjQgKzI5LDIyIEBACiAJdTgJCQl0Y2xhc3M7CiB9OwogCi1zdGF0aWMgc3RydWN0IGZpYl9ydWxlc19vcHMgZmliNl9ydWxlc19vcHM7Ci0KLXN0cnVjdCBkc3RfZW50cnkgKmZpYjZfcnVsZV9sb29rdXAoc3RydWN0IGZsb3dpICpmbCwgaW50IGZsYWdzLAotCQkJCSAgIHBvbF9sb29rdXBfdCBsb29rdXApCitzdHJ1Y3QgZHN0X2VudHJ5ICpmaWI2X3J1bGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpICpmbCwKKwkJCQkgICBpbnQgZmxhZ3MsIHBvbF9sb29rdXBfdCBsb29rdXApCiB7CiAJc3RydWN0IGZpYl9sb29rdXBfYXJnIGFyZyA9IHsKIAkJLmxvb2t1cF9wdHIgPSBsb29rdXAsCiAJfTsKIAotCWZpYl9ydWxlc19sb29rdXAoJmZpYjZfcnVsZXNfb3BzLCBmbCwgZmxhZ3MsICZhcmcpOworCWZpYl9ydWxlc19sb29rdXAobmV0LT5pcHY2LmZpYjZfcnVsZXNfb3BzLCBmbCwgZmxhZ3MsICZhcmcpOwogCWlmIChhcmcucnVsZSkKIAkJZmliX3J1bGVfcHV0KGFyZy5ydWxlKTsKIAogCWlmIChhcmcucmVzdWx0KQogCQlyZXR1cm4gYXJnLnJlc3VsdDsKIAotCWRzdF9ob2xkKCZpcDZfbnVsbF9lbnRyeS51LmRzdCk7Ci0JcmV0dXJuICZpcDZfbnVsbF9lbnRyeS51LmRzdDsKKwlkc3RfaG9sZCgmbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT51LmRzdCk7CisJcmV0dXJuICZuZXQtPmlwdjYuaXA2X251bGxfZW50cnktPnUuZHN0OwogfQogCiBzdGF0aWMgaW50IGZpYjZfcnVsZV9hY3Rpb24oc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmxvd2kgKmZscCwKQEAgLTU0LDI4ICs1MiwyOSBAQAogewogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBOVUxMOwogCXN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBydWxlLT5mcl9uZXQ7CiAJcG9sX2xvb2t1cF90IGxvb2t1cCA9IGFyZy0+bG9va3VwX3B0cjsKIAogCXN3aXRjaCAocnVsZS0+YWN0aW9uKSB7CiAJY2FzZSBGUl9BQ1RfVE9fVEJMOgogCQlicmVhazsKIAljYXNlIEZSX0FDVF9VTlJFQUNIQUJMRToKLQkJcnQgPSAmaXA2X251bGxfZW50cnk7CisJCXJ0ID0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwogCQlnb3RvIGRpc2NhcmRfcGt0OwogCWRlZmF1bHQ6CiAJY2FzZSBGUl9BQ1RfQkxBQ0tIT0xFOgotCQlydCA9ICZpcDZfYmxrX2hvbGVfZW50cnk7CisJCXJ0ID0gbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeTsKIAkJZ290byBkaXNjYXJkX3BrdDsKIAljYXNlIEZSX0FDVF9QUk9ISUJJVDoKLQkJcnQgPSAmaXA2X3Byb2hpYml0X2VudHJ5OworCQlydCA9IG5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnk7CiAJCWdvdG8gZGlzY2FyZF9wa3Q7CiAJfQogCi0JdGFibGUgPSBmaWI2X2dldF90YWJsZShydWxlLT50YWJsZSk7CisJdGFibGUgPSBmaWI2X2dldF90YWJsZShuZXQsIHJ1bGUtPnRhYmxlKTsKIAlpZiAodGFibGUpCi0JCXJ0ID0gbG9va3VwKHRhYmxlLCBmbHAsIGZsYWdzKTsKKwkJcnQgPSBsb29rdXAobmV0LCB0YWJsZSwgZmxwLCBmbGFncyk7CiAKLQlpZiAocnQgIT0gJmlwNl9udWxsX2VudHJ5KSB7CisJaWYgKHJ0ICE9IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSkgewogCQlzdHJ1Y3QgZmliNl9ydWxlICpyID0gKHN0cnVjdCBmaWI2X3J1bGUgKilydWxlOwogCiAJCS8qCkBAIC04NSw4ICs4NCwxOCBAQAogCQlpZiAoKHJ1bGUtPmZsYWdzICYgRklCX1JVTEVfRklORF9TQUREUikgJiYKIAkJICAgIHItPnNyYy5wbGVuICYmICEoZmxhZ3MgJiBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSKSkgewogCQkJc3RydWN0IGluNl9hZGRyIHNhZGRyOwotCQkJaWYgKGlwdjZfZ2V0X3NhZGRyKCZydC0+dS5kc3QsICZmbHAtPmZsNl9kc3QsCi0JCQkJCSAgICZzYWRkcikpCisJCQl1bnNpZ25lZCBpbnQgc3JjcHJlZnMgPSAwOworCisJCQlpZiAoZmxhZ3MgJiBSVDZfTE9PS1VQX0ZfU1JDUFJFRl9UTVApCisJCQkJc3JjcHJlZnMgfD0gSVBWNl9QUkVGRVJfU1JDX1RNUDsKKwkJCWlmIChmbGFncyAmIFJUNl9MT09LVVBfRl9TUkNQUkVGX1BVQkxJQykKKwkJCQlzcmNwcmVmcyB8PSBJUFY2X1BSRUZFUl9TUkNfUFVCTElDOworCQkJaWYgKGZsYWdzICYgUlQ2X0xPT0tVUF9GX1NSQ1BSRUZfQ09BKQorCQkJCXNyY3ByZWZzIHw9IElQVjZfUFJFRkVSX1NSQ19DT0E7CisKKwkJCWlmIChpcHY2X2Rldl9nZXRfc2FkZHIoaXA2X2RzdF9pZGV2KCZydC0+dS5kc3QpLT5kZXYsCisJCQkJCSAgICAgICAmZmxwLT5mbDZfZHN0LCBzcmNwcmVmcywKKwkJCQkJICAgICAgICZzYWRkcikpCiAJCQkJZ290byBhZ2FpbjsKIAkJCWlmICghaXB2Nl9wcmVmaXhfZXF1YWwoJnNhZGRyLCAmci0+c3JjLmFkZHIsCiAJCQkJCSAgICAgICByLT5zcmMucGxlbikpCkBAIC0xNDUsMTMgKzE1NCwxNCBAQAogCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKip0YikKIHsKIAlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgZmliNl9ydWxlICpydWxlNiA9IChzdHJ1Y3QgZmliNl9ydWxlICopIHJ1bGU7CiAKIAlpZiAocnVsZS0+YWN0aW9uID09IEZSX0FDVF9UT19UQkwpIHsKIAkJaWYgKHJ1bGUtPnRhYmxlID09IFJUNl9UQUJMRV9VTlNQRUMpCiAJCQlnb3RvIGVycm91dDsKIAotCQlpZiAoZmliNl9uZXdfdGFibGUocnVsZS0+dGFibGUpID09IE5VTEwpIHsKKwkJaWYgKGZpYjZfbmV3X3RhYmxlKG5ldCwgcnVsZS0+dGFibGUpID09IE5VTEwpIHsKIAkJCWVyciA9IC1FTk9CVUZTOwogCQkJZ290byBlcnJvdXQ7CiAJCX0KQEAgLTIzNCw3ICsyNDQsNyBAQAogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDE2KTsgLyogc3JjICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmliX3J1bGVzX29wcyBmaWI2X3J1bGVzX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmliX3J1bGVzX29wcyBmaWI2X3J1bGVzX29wc190ZW1wbGF0ZSA9IHsKIAkuZmFtaWx5CQkJPSBBRl9JTkVUNiwKIAkucnVsZV9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZmliNl9ydWxlKSwKIAkuYWRkcl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLApAQCAtMjQ3LDQ1ICsyNTcsNjQgQEAKIAkubmxtc2dfcGF5bG9hZAkJPSBmaWI2X3J1bGVfbmxtc2dfcGF5bG9hZCwKIAkubmxncm91cAkJPSBSVE5MR1JQX0lQVjZfUlVMRSwKIAkucG9saWN5CQkJPSBmaWI2X3J1bGVfcG9saWN5LAotCS5ydWxlc19saXN0CQk9IExJU1RfSEVBRF9JTklUKGZpYjZfcnVsZXNfb3BzLnJ1bGVzX2xpc3QpLAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmZyb19uZXQJCT0gJmluaXRfbmV0LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgZmliNl9kZWZhdWx0X3J1bGVzX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgZmliNl9ydWxlc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAotCWVyciA9IGZpYl9kZWZhdWx0X3J1bGVfYWRkKCZmaWI2X3J1bGVzX29wcywgMCwKLQkJCQkgICBSVDZfVEFCTEVfTE9DQUwsIEZJQl9SVUxFX1BFUk1BTkVOVCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gZmliX2RlZmF1bHRfcnVsZV9hZGQoJmZpYjZfcnVsZXNfb3BzLCAweDdGRkUsIFJUNl9UQUJMRV9NQUlOLCAwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKLX0KLQotaW50IF9faW5pdCBmaWI2X3J1bGVzX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZmliNl9kZWZhdWx0X3J1bGVzX2luaXQoKTsKLQlpZiAocmV0KQorCW5ldC0+aXB2Ni5maWI2X3J1bGVzX29wcyA9IGttZW1kdXAoJmZpYjZfcnVsZXNfb3BzX3RlbXBsYXRlLAorCQkJCQkgICBzaXplb2YoKm5ldC0+aXB2Ni5maWI2X3J1bGVzX29wcyksCisJCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY2LmZpYjZfcnVsZXNfb3BzKQogCQlnb3RvIG91dDsKIAotCXJldCA9IGZpYl9ydWxlc19yZWdpc3RlcigmZmliNl9ydWxlc19vcHMpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2RlZmF1bHRfcnVsZXNfaW5pdDsKLW91dDoKLQlyZXR1cm4gcmV0OworCW5ldC0+aXB2Ni5maWI2X3J1bGVzX29wcy0+ZnJvX25ldCA9IG5ldDsKKwlJTklUX0xJU1RfSEVBRCgmbmV0LT5pcHY2LmZpYjZfcnVsZXNfb3BzLT5ydWxlc19saXN0KTsKIAotb3V0X2RlZmF1bHRfcnVsZXNfaW5pdDoKLQlmaWJfcnVsZXNfY2xlYW51cF9vcHMoJmZpYjZfcnVsZXNfb3BzKTsKKwllcnIgPSBmaWJfZGVmYXVsdF9ydWxlX2FkZChuZXQtPmlwdjYuZmliNl9ydWxlc19vcHMsIDAsCisJCQkJICAgUlQ2X1RBQkxFX0xPQ0FMLCBGSUJfUlVMRV9QRVJNQU5FTlQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZpYjZfcnVsZXNfb3BzOworCisJZXJyID0gZmliX2RlZmF1bHRfcnVsZV9hZGQobmV0LT5pcHY2LmZpYjZfcnVsZXNfb3BzLAorCQkJCSAgIDB4N0ZGRSwgUlQ2X1RBQkxFX01BSU4sIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZpYjZfZGVmYXVsdF9ydWxlX2FkZDsKKworCWVyciA9IGZpYl9ydWxlc19yZWdpc3RlcihuZXQtPmlwdjYuZmliNl9ydWxlc19vcHMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZpYjZfZGVmYXVsdF9ydWxlX2FkZDsKK291dDoKKwlyZXR1cm4gZXJyOworCitvdXRfZmliNl9kZWZhdWx0X3J1bGVfYWRkOgorCWZpYl9ydWxlc19jbGVhbnVwX29wcyhuZXQtPmlwdjYuZmliNl9ydWxlc19vcHMpOworb3V0X2ZpYjZfcnVsZXNfb3BzOgorCWtmcmVlKG5ldC0+aXB2Ni5maWI2X3J1bGVzX29wcyk7CiAJZ290byBvdXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGZpYjZfcnVsZXNfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCWZpYl9ydWxlc191bnJlZ2lzdGVyKG5ldC0+aXB2Ni5maWI2X3J1bGVzX29wcyk7CisJa2ZyZWUobmV0LT5pcHY2LmZpYjZfcnVsZXNfb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBmaWI2X3J1bGVzX25ldF9vcHMgPSB7CisJLmluaXQgPSBmaWI2X3J1bGVzX25ldF9pbml0LAorCS5leGl0ID0gZmliNl9ydWxlc19uZXRfZXhpdCwKK307CisKK2ludCBfX2luaXQgZmliNl9ydWxlc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmZpYjZfcnVsZXNfbmV0X29wcyk7Cit9CisKKwogdm9pZCBmaWI2X3J1bGVzX2NsZWFudXAodm9pZCkKIHsKLQlmaWJfcnVsZXNfdW5yZWdpc3RlcigmZmliNl9ydWxlc19vcHMpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmZmliNl9ydWxlc19uZXRfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCAxMjFkNTE3Li5kNDJkZDE2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC04MCw4ICs4MSwxMCBAQAogICoKICAqCU9uIFNNUCB3ZSBoYXZlIG9uZSBJQ01QIHNvY2tldCBwZXItY3B1LgogICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNvY2tldCAqLCBfX2ljbXB2Nl9zb2NrZXQpID0gTlVMTDsKLSNkZWZpbmUgaWNtcHY2X3NvY2tldAlfX2dldF9jcHVfdmFyKF9faWNtcHY2X3NvY2tldCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmljbXB2Nl9zayhzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIG5ldC0+aXB2Ni5pY21wX3NrW3NtcF9wcm9jZXNzb3JfaWQoKV07Cit9CiAKIHN0YXRpYyBpbnQgaWNtcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIApAQCAtOTAsMTEgKzkzLDExIEBACiAJLmZsYWdzCQk9CUlORVQ2X1BST1RPX05PUE9MSUNZfElORVQ2X1BST1RPX0ZJTkFMLAogfTsKIAotc3RhdGljIF9faW5saW5lX18gaW50IGljbXB2Nl94bWl0X2xvY2sodm9pZCkKK3N0YXRpYyBfX2lubGluZV9fIGludCBpY21wdjZfeG1pdF9sb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAKLQlpZiAodW5saWtlbHkoIXNwaW5fdHJ5bG9jaygmaWNtcHY2X3NvY2tldC0+c2stPnNrX2xvY2suc2xvY2spKSkgeworCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrKCZzay0+c2tfbG9jay5zbG9jaykpKSB7CiAJCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgb3V0cHV0IHBhdGggKGYuZS4gU0lUIG9yCiAJCSAqIGlwNmlwNiB0dW5uZWwpIHNpZ25hbHMgZHN0X2xpbmtfZmFpbHVyZSgpIGZvciBhbgogCQkgKiBvdXRnb2luZyBJQ01QNiBwYWNrZXQuCkBAIC0xMDUsOSArMTA4LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBpY21wdjZfeG1pdF91bmxvY2sodm9pZCkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaWNtcHY2X3htaXRfdW5sb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzcGluX3VubG9ja19iaCgmaWNtcHY2X3NvY2tldC0+c2stPnNrX2xvY2suc2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZzay0+c2tfbG9jay5zbG9jayk7CiB9CiAKIC8qCkBAIC0xNjEsNiArMTY0LDcgQEAKIAkJCQkgICAgIHN0cnVjdCBmbG93aSAqZmwpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlpbnQgcmVzID0gMDsKIAogCS8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZXMgYXJlIG5vdCBsaW1pdGVkLiAqLwpAQCAtMTc2LDcgKzE4MCw3IEBACiAJICogWFhYOiBwZXJoYXBzIHRoZSBleHBpcmUgZm9yIHJvdXRpbmcgZW50cmllcyBjbG9uZWQgYnkKIAkgKiB0aGlzIGxvb2t1cCBzaG91bGQgYmUgbW9yZSBhZ2dyZXNzaXZlIChub3QgbG9uZ2VyIHRoYW4gdGltZW91dCkuCiAJICovCi0JZHN0ID0gaXA2X3JvdXRlX291dHB1dChzaywgZmwpOworCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgZmwpOwogCWlmIChkc3QtPmVycm9yKSB7CiAJCUlQNl9JTkNfU1RBVFMoaXA2X2RzdF9pZGV2KGRzdCksCiAJCQkgICAgICBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CkBAIC0xODQsNyArMTg4LDcgQEAKIAkJcmVzID0gMTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWRzdDsKLQkJaW50IHRtbyA9IGluaXRfbmV0LmlwdjYuc3lzY3RsLmljbXB2Nl90aW1lOworCQlpbnQgdG1vID0gbmV0LT5pcHY2LnN5c2N0bC5pY21wdjZfdGltZTsKIAogCQkvKiBHaXZlIG1vcmUgYmFuZHdpZHRoIHRvIHdpZGVyIHByZWZpeGVzLiAqLwogCQlpZiAocnQtPnJ0NmlfZHN0LnBsZW4gPCAxMjgpCkBAIC0zMDMsNiArMzA3LDcgQEAKIHZvaWQgaWNtcHY2X3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHR5cGUsIGludCBjb2RlLCBfX3UzMiBpbmZvLAogCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC0zMzIsNyArMzM3LDcgQEAKIAkgKi8KIAlhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZSgmaGRyLT5kYWRkcik7CiAKLQlpZiAoaXB2Nl9jaGtfYWRkcigmaW5pdF9uZXQsICZoZHItPmRhZGRyLCBza2ItPmRldiwgMCkpCisJaWYgKGlwdjZfY2hrX2FkZHIobmV0LCAmaGRyLT5kYWRkciwgc2tiLT5kZXYsIDApKQogCQlzYWRkciA9ICZoZHItPmRhZGRyOwogCiAJLyoKQEAgLTM4OSwxMiArMzk0LDEyIEBACiAJZmwuZmxfaWNtcF9jb2RlID0gY29kZTsKIAlzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsICZmbCk7CiAKLQlpZiAoaWNtcHY2X3htaXRfbG9jaygpKQotCQlyZXR1cm47Ci0KLQlzayA9IGljbXB2Nl9zb2NrZXQtPnNrOworCXNrID0gaWNtcHY2X3NrKG5ldCk7CiAJbnAgPSBpbmV0Nl9zayhzayk7CiAKKwlpZiAoaWNtcHY2X3htaXRfbG9jayhzaykpCisJCXJldHVybjsKKwogCWlmICghaWNtcHY2X3hybGltX2FsbG93KHNrLCB0eXBlLCAmZmwpKQogCQlnb3RvIG91dDsKIApAQCAtNDM2LDMzICs0NDEsMzMgQEAKIAl9CiAKIAlpZiAoeGZybV9kZWNvZGVfc2Vzc2lvbl9yZXZlcnNlKHNrYiwgJmZsMiwgQUZfSU5FVDYpKQotCQlnb3RvIG91dDsKKwkJZ290byByZWxvb2t1cF9mYWlsZWQ7CiAKIAlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QyLCAmZmwpKQotCQlnb3RvIG91dDsKKwkJZ290byByZWxvb2t1cF9mYWlsZWQ7CiAKIAllcnIgPSB4ZnJtX2xvb2t1cCgmZHN0MiwgJmZsLCBzaywgWEZSTV9MT09LVVBfSUNNUCk7Ci0JaWYgKGVyciA9PSAtRU5PRU5UKSB7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIDA6CisJCWRzdF9yZWxlYXNlKGRzdCk7CisJCWRzdCA9IGRzdDI7CisJCWJyZWFrOworCWNhc2UgLUVQRVJNOgorCQlnb3RvIG91dF9kc3RfcmVsZWFzZTsKKwlkZWZhdWx0OgorcmVsb29rdXBfZmFpbGVkOgogCQlpZiAoIWRzdCkKIAkJCWdvdG8gb3V0OwotCQlnb3RvIHJvdXRlX2RvbmU7CisJCWJyZWFrOwogCX0KIAotCWRzdF9yZWxlYXNlKGRzdCk7Ci0JZHN0ID0gZHN0MjsKLQotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCiByb3V0ZV9kb25lOgogCWlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZmbC5mbDZfZHN0KSkKIAkJaGxpbWl0ID0gbnAtPm1jYXN0X2hvcHM7CiAJZWxzZQogCQlobGltaXQgPSBucC0+aG9wX2xpbWl0OwogCWlmIChobGltaXQgPCAwKQotCQlobGltaXQgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9IT1BMSU1JVCk7Ci0JaWYgKGhsaW1pdCA8IDApCi0JCWhsaW1pdCA9IGlwdjZfZ2V0X2hvcGxpbWl0KGRzdC0+ZGV2KTsKKwkJaGxpbWl0ID0gaXA2X2RzdF9ob3BsaW1pdChkc3QpOwogCiAJdGNsYXNzID0gbnAtPnRjbGFzczsKIAlpZiAodGNsYXNzIDwgMCkKQEAgLTQ5OCwxMyArNTAzLDE0IEBACiBvdXRfZHN0X3JlbGVhc2U6CiAJZHN0X3JlbGVhc2UoZHN0KTsKIG91dDoKLQlpY21wdjZfeG1pdF91bmxvY2soKTsKKwlpY21wdjZfeG1pdF91bmxvY2soc2spOwogfQogCiBFWFBPUlRfU1lNQk9MKGljbXB2Nl9zZW5kKTsKIAogc3RhdGljIHZvaWQgaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7CkBAIC01MzUsMTIgKzU0MSwxMiBAQAogCWZsLmZsX2ljbXBfdHlwZSA9IElDTVBWNl9FQ0hPX1JFUExZOwogCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYiwgJmZsKTsKIAotCWlmIChpY21wdjZfeG1pdF9sb2NrKCkpCi0JCXJldHVybjsKLQotCXNrID0gaWNtcHY2X3NvY2tldC0+c2s7CisJc2sgPSBpY21wdjZfc2sobmV0KTsKIAlucCA9IGluZXQ2X3NrKHNrKTsKIAorCWlmIChpY21wdjZfeG1pdF9sb2NrKHNrKSkKKwkJcmV0dXJuOworCiAJaWYgKCFmbC5vaWYgJiYgaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmZmwuZmw2X2RzdCkpCiAJCWZsLm9pZiA9IG5wLT5tY2FzdF9vaWY7CiAKQEAgLTU1NSw5ICs1NjEsNyBAQAogCWVsc2UKIAkJaGxpbWl0ID0gbnAtPmhvcF9saW1pdDsKIAlpZiAoaGxpbWl0IDwgMCkKLQkJaGxpbWl0ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfSE9QTElNSVQpOwotCWlmIChobGltaXQgPCAwKQotCQlobGltaXQgPSBpcHY2X2dldF9ob3BsaW1pdChkc3QtPmRldik7CisJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAogCXRjbGFzcyA9IG5wLT50Y2xhc3M7CiAJaWYgKHRjbGFzcyA8IDApCkBAIC01ODQsNyArNTg4LDcgQEAKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJZHN0X3JlbGVhc2UoZHN0KTsKIG91dDoKLQlpY21wdjZfeG1pdF91bmxvY2soKTsKKwlpY21wdjZfeG1pdF91bmxvY2soc2spOwogfQogCiBzdGF0aWMgdm9pZCBpY21wdjZfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLCBpbnQgY29kZSwgX19iZTMyIGluZm8pCkBAIC03NzUsMTkgKzc3OSw0MCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIGljbXB2Nl9mbG93X2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkgICAgICB1OCB0eXBlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkgICAgICBpbnQgb2lmKQoreworCW1lbXNldChmbCwgMCwgc2l6ZW9mKCpmbCkpOworCWlwdjZfYWRkcl9jb3B5KCZmbC0+Zmw2X3NyYywgc2FkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZmbC0+Zmw2X2RzdCwgZGFkZHIpOworCWZsLT5wcm90bwkgCT0gSVBQUk9UT19JQ01QVjY7CisJZmwtPmZsX2ljbXBfdHlwZQk9IHR5cGU7CisJZmwtPmZsX2ljbXBfY29kZQk9IDA7CisJZmwtPm9pZgkJCT0gb2lmOworCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsKTsKK30KKwogLyoKLSAqIFNwZWNpYWwgbG9jay1jbGFzcyBmb3IgX19pY21wdjZfc29ja2V0OgorICogU3BlY2lhbCBsb2NrLWNsYXNzIGZvciBfX2ljbXB2Nl9zazoKICAqLwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpY21wdjZfc29ja2V0X3NrX2RzdF9sb2NrX2tleTsKIAotaW50IF9faW5pdCBpY21wdjZfaW5pdChzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKQorc3RhdGljIGludCBfX25ldF9pbml0IGljbXB2Nl9za19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGVyciwgaSwgajsKIAorCW5ldC0+aXB2Ni5pY21wX3NrID0KKwkJa3phbGxvYyhucl9jcHVfaWRzICogc2l6ZW9mKHN0cnVjdCBzb2NrICopLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV0LT5pcHY2LmljbXBfc2sgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQllcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19JQ01QVjYsCi0JCQkJICAgICAgICZwZXJfY3B1KF9faWNtcHY2X3NvY2tldCwgaSkpOworCQllcnIgPSBpbmV0X2N0bF9zb2NrX2NyZWF0ZSgmc2ssIFBGX0lORVQ2LAorCQkJCQkgICBTT0NLX1JBVywgSVBQUk9UT19JQ01QVjYsIG5ldCk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIElDTVA2IGNvbnRyb2wgc29ja2V0ICIKQEAgLTc5NiwxMiArODIxLDEyIEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAotCQlzayA9IHBlcl9jcHUoX19pY21wdjZfc29ja2V0LCBpKS0+c2s7Ci0JCXNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKKwkJbmV0LT5pcHY2LmljbXBfc2tbaV0gPSBzazsKKwogCQkvKgogCQkgKiBTcGxpdCBvZmYgdGhlaXIgbG9jay1jbGFzcywgYmVjYXVzZSBzay0+c2tfZHN0X2xvY2sKIAkJICogZ2V0cyB1c2VkIGZyb20gc29mdGlycXMsIHdoaWNoIGlzIHNhZmUgZm9yCi0JCSAqIF9faWNtcHY2X3NvY2tldCAoYmVjYXVzZSB0aG9zZSBuZXZlciBnZXQgZGlyZWN0bHkgdXNlZAorCQkgKiBfX2ljbXB2Nl9zayAoYmVjYXVzZSB0aG9zZSBuZXZlciBnZXQgZGlyZWN0bHkgdXNlZAogCQkgKiB2aWEgdXNlcnNwYWNlIHN5c2NhbGxzKSwgYnV0IHVuc2FmZSBmb3Igbm9ybWFsIHNvY2tldHMuCiAJCSAqLwogCQlsb2NrZGVwX3NldF9jbGFzcygmc2stPnNrX2RzdF9sb2NrLApAQCAtODEyLDM5ICs4MzcsNTcgQEAKIAkJICovCiAJCXNrLT5za19zbmRidWYgPQogCQkJKDIgKiAoKDY0ICogMTAyNCkgKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKSk7Ci0KLQkJc2stPnNrX3Byb3QtPnVuaGFzaChzayk7CiAJfQotCi0KLQlpZiAoaW5ldDZfYWRkX3Byb3RvY29sKCZpY21wdjZfcHJvdG9jb2wsIElQUFJPVE9fSUNNUFY2KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgSUNNUDYgcHJvdG9jb2xcbiIpOwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIGZhaWw7Ci0JfQotCiAJcmV0dXJuIDA7CiAKICBmYWlsOgotCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLQkJaWYgKCFjcHVfcG9zc2libGUoaikpCi0JCQljb250aW51ZTsKLQkJc29ja19yZWxlYXNlKHBlcl9jcHUoX19pY21wdjZfc29ja2V0LCBqKSk7Ci0JfQorCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjYuaWNtcF9za1tqXSk7CisJa2ZyZWUobmV0LT5pcHY2LmljbXBfc2spOworCXJldHVybiBlcnI7Cit9CiAKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaWNtcHY2X3NrX2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+aXB2Ni5pY21wX3NrW2ldKTsKKwl9CisJa2ZyZWUobmV0LT5pcHY2LmljbXBfc2spOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGljbXB2Nl9za19vcHMgPSB7CisgICAgICAgLmluaXQgPSBpY21wdjZfc2tfaW5pdCwKKyAgICAgICAuZXhpdCA9IGljbXB2Nl9za19leGl0LAorfTsKKworaW50IF9faW5pdCBpY21wdjZfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpY21wdjZfc2tfb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IC1FQUdBSU47CisJaWYgKGluZXQ2X2FkZF9wcm90b2NvbCgmaWNtcHY2X3Byb3RvY29sLCBJUFBST1RPX0lDTVBWNikgPCAwKQorCQlnb3RvIGZhaWw7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgSUNNUDYgcHJvdG9jb2xcbiIpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaWNtcHY2X3NrX29wcyk7CiAJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBpY21wdjZfY2xlYW51cCh2b2lkKQogewotCWludCBpOwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJc29ja19yZWxlYXNlKHBlcl9jcHUoX19pY21wdjZfc29ja2V0LCBpKSk7Ci0JfQorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaWNtcHY2X3NrX29wcyk7CiAJaW5ldDZfZGVsX3Byb3RvY29sKCZpY21wdjZfcHJvdG9jb2wsIElQUFJPVE9fSUNNUFY2KTsKIH0KIAorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGljbXA2X2VyciB7CiAJaW50IGVycjsKIAlpbnQgZmF0YWw7CkBAIC05MjUsNiArOTY4LDEwIEBACiAJdGFibGUgPSBrbWVtZHVwKGlwdjZfaWNtcF90YWJsZV90ZW1wbGF0ZSwKIAkJCXNpemVvZihpcHY2X2ljbXBfdGFibGVfdGVtcGxhdGUpLAogCQkJR0ZQX0tFUk5FTCk7CisKKwlpZiAodGFibGUpCisJCXRhYmxlWzBdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pY21wdjZfdGltZTsKKwogCXJldHVybiB0YWJsZTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwppbmRleCA3OGRlNDJhLi44NzgwMWNjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwpAQCAtMzMsNiArMzMsMTAgQEAKIAljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAogCS8qIFdlIG11c3Qgd2FsayB0aGUgd2hvbGUgcG9ydCBvd25lciBsaXN0IGluIHRoaXMgY2FzZS4gLURhdmVNICovCisJLyoKKwkgKiBTZWUgY29tbWVudCBpbiBpbmV0X2Nza19iaW5kX2NvbmZsaWN0IGFib3V0IHNvY2sgbG9va3VwCisJICogdnMgbmV0IG5hbWVzcGFjZXMgaXNzdWVzLgorCSAqLwogCXNrX2Zvcl9lYWNoX2JvdW5kKHNrMiwgbm9kZSwgJnRiLT5vd25lcnMpIHsKIAkJaWYgKHNrICE9IHNrMiAmJgogCQkgICAgKCFzay0+c2tfYm91bmRfZGV2X2lmIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKaW5kZXggOTlmZDI1Zi4uNTgwMDE0YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwpAQCAtMjQsNyArMjQsNyBAQAogCiB2b2lkIF9faW5ldDZfaGFzaChzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvID0gc2stPnNrX3Byb3QtPmhhc2hpbmZvOworCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbyA9IHNrLT5za19wcm90LT5oLmhhc2hpbmZvOwogCXN0cnVjdCBobGlzdF9oZWFkICpsaXN0OwogCXJ3bG9ja190ICpsb2NrOwogCkBAIC00Myw3ICs0Myw3IEBACiAJfQogCiAJX19za19hZGRfbm9kZShzaywgbGlzdCk7Ci0Jc29ja19wcm90X2ludXNlX2FkZChzay0+c2tfcHJvdCwgMSk7CisJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAxKTsKIAl3cml0ZV91bmxvY2sobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9faW5ldDZfaGFzaCk7CkBAIC0xMDUsNyArMTA1LDcgQEAKIAogCXJlYWRfbG9jaygmaGFzaGluZm8tPmxoYXNoX2xvY2spOwogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGFzaGluZm8tPmxpc3RlbmluZ19oYXNoW2luZXRfbGhhc2hmbihobnVtKV0pIHsKLQkJaWYgKHNrLT5za19uZXQgPT0gbmV0ICYmIGluZXRfc2soc2spLT5udW0gPT0gaG51bSAmJgorCQlpZiAobmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSAmJiBpbmV0X3NrKHNrKS0+bnVtID09IGhudW0gJiYKIAkJCQlzay0+c2tfZmFtaWx5ID09IFBGX0lORVQ2KSB7CiAJCQljb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXN0cnVjdCBzb2NrICpzazI7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHc7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlwcmVmZXRjaChoZWFkLT5jaGFpbi5maXJzdCk7CiAJd3JpdGVfbG9jayhsb2NrKTsKQEAgLTIwNCw3ICsyMDQsNyBAQAogCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7CiAJX19za19hZGRfbm9kZShzaywgJmhlYWQtPmNoYWluKTsKIAlzay0+c2tfaGFzaCA9IGhhc2g7Ci0Jc29ja19wcm90X2ludXNlX2FkZChzay0+c2tfcHJvdCwgMSk7CisJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAxKTsKIAl3cml0ZV91bmxvY2sobG9jayk7CiAKIAlpZiAodHdwICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCBmOTM0MDdjLi41MGYzZjhmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC00OCw4ICs0OCw2IEBACiAjZGVmaW5lIFJUNl9UUkFDRSh4Li4uKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi1zdHJ1Y3QgcnQ2X3N0YXRpc3RpY3MJcnQ2X3N0YXRzOwotCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKiBmaWI2X25vZGVfa21lbSBfX3JlYWRfbW9zdGx5OwogCiBlbnVtIGZpYl93YWxrX3N0YXRlX3QKQEAgLTY2LDYgKzY0LDcgQEAKIHN0cnVjdCBmaWI2X2NsZWFuZXJfdAogewogCXN0cnVjdCBmaWI2X3dhbGtlcl90IHc7CisJc3RydWN0IG5ldCAqbmV0OwogCWludCAoKmZ1bmMpKHN0cnVjdCBydDZfaW5mbyAqLCB2b2lkICphcmcpOwogCXZvaWQgKmFyZzsKIH07CkBAIC03OCw5ICs3NywxMCBAQAogI2RlZmluZSBGV1NfSU5JVCBGV1NfTAogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGZpYjZfcHJ1bmVfY2xvbmVzKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0KTsKLXN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKiBmaWI2X2ZpbmRfcHJlZml4KHN0cnVjdCBmaWI2X25vZGUgKmZuKTsKLXN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICogZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgZmliNl9ub2RlICpmbik7CitzdGF0aWMgdm9pZCBmaWI2X3BydW5lX2Nsb25lcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X25vZGUgKmZuLAorCQkJICAgICAgc3RydWN0IHJ0Nl9pbmZvICpydCk7CitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpmaWI2X2ZpbmRfcHJlZml4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfbm9kZSAqZm4pOworc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9ub2RlICpmbik7CiBzdGF0aWMgaW50IGZpYjZfd2FsayhzdHJ1Y3QgZmliNl93YWxrZXJfdCAqdyk7CiBzdGF0aWMgaW50IGZpYjZfd2Fsa19jb250aW51ZShzdHJ1Y3QgZmliNl93YWxrZXJfdCAqdyk7CiAKQEAgLTkzLDcgKzkzLDcgQEAKIAogc3RhdGljIF9fdTMyIHJ0X3Nlcm51bTsKIAotc3RhdGljIERFRklORV9USU1FUihpcDZfZmliX3RpbWVyLCBmaWI2X3J1bl9nYywgMCwgMCk7CitzdGF0aWMgdm9pZCBmaWI2X2djX3RpbWVyX2NiKHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogc3RhdGljIHN0cnVjdCBmaWI2X3dhbGtlcl90IGZpYjZfd2Fsa2VyX2xpc3QgPSB7CiAJLnByZXYJPSAmZmliNl93YWxrZXJfbGlzdCwKQEAgLTE2NiwyMiArMTY2LDEzIEBACiAJCWRzdF9mcmVlKCZydC0+dS5kc3QpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgZmliNl9tYWluX3RibCA9IHsKLQkudGI2X2lkCQk9IFJUNl9UQUJMRV9NQUlOLAotCS50YjZfcm9vdAk9IHsKLQkJLmxlYWYJCT0gJmlwNl9udWxsX2VudHJ5LAotCQkuZm5fZmxhZ3MJPSBSVE5fUk9PVCB8IFJUTl9UTF9ST09UIHwgUlROX1JUSU5GTywKLQl9LAotfTsKLQogI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwogI2RlZmluZSBGSUJfVEFCTEVfSEFTSFNaIDI1NgogI2Vsc2UKICNkZWZpbmUgRklCX1RBQkxFX0hBU0hTWiAxCiAjZW5kaWYKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBmaWJfdGFibGVfaGFzaFtGSUJfVEFCTEVfSEFTSFNaXTsKIAotc3RhdGljIHZvaWQgZmliNl9saW5rX3RhYmxlKHN0cnVjdCBmaWI2X3RhYmxlICp0YikKK3N0YXRpYyB2b2lkIGZpYjZfbGlua190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3RhYmxlICp0YikKIHsKIAl1bnNpZ25lZCBpbnQgaDsKIApAQCAtMTk3LDUyICsxODgsNDYgQEAKIAkgKiBObyBwcm90ZWN0aW9uIG5lY2Vzc2FyeSwgdGhpcyBpcyB0aGUgb25seSBsaXN0IG11dGF0YXRpb24KIAkgKiBvcGVyYXRpb24sIHRhYmxlcyBuZXZlciBkaXNhcHBlYXIgb25jZSB0aGV5IGV4aXN0LgogCSAqLwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmdGItPnRiNl9obGlzdCwgJmZpYl90YWJsZV9oYXNoW2hdKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnRiLT50YjZfaGxpc3QsICZuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2hbaF0pOwogfQogCiAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCi1zdGF0aWMgc3RydWN0IGZpYjZfdGFibGUgZmliNl9sb2NhbF90YmwgPSB7Ci0JLnRiNl9pZAkJPSBSVDZfVEFCTEVfTE9DQUwsCi0JLnRiNl9yb290IAk9IHsKLQkJLmxlYWYJCT0gJmlwNl9udWxsX2VudHJ5LAotCQkuZm5fZmxhZ3MJPSBSVE5fUk9PVCB8IFJUTl9UTF9ST09UIHwgUlROX1JUSU5GTywKLQl9LAotfTsKIAotc3RhdGljIHN0cnVjdCBmaWI2X3RhYmxlICpmaWI2X2FsbG9jX3RhYmxlKHUzMiBpZCkKK3N0YXRpYyBzdHJ1Y3QgZmliNl90YWJsZSAqZmliNl9hbGxvY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCkKIHsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CiAKIAl0YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKCp0YWJsZSksIEdGUF9BVE9NSUMpOwogCWlmICh0YWJsZSAhPSBOVUxMKSB7CiAJCXRhYmxlLT50YjZfaWQgPSBpZDsKLQkJdGFibGUtPnRiNl9yb290LmxlYWYgPSAmaXA2X251bGxfZW50cnk7CisJCXRhYmxlLT50YjZfcm9vdC5sZWFmID0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwogCQl0YWJsZS0+dGI2X3Jvb3QuZm5fZmxhZ3MgPSBSVE5fUk9PVCB8IFJUTl9UTF9ST09UIHwgUlROX1JUSU5GTzsKIAl9CiAKIAlyZXR1cm4gdGFibGU7CiB9CiAKLXN0cnVjdCBmaWI2X3RhYmxlICpmaWI2X25ld190YWJsZSh1MzIgaWQpCitzdHJ1Y3QgZmliNl90YWJsZSAqZmliNl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiB7CiAJc3RydWN0IGZpYjZfdGFibGUgKnRiOwogCiAJaWYgKGlkID09IDApCiAJCWlkID0gUlQ2X1RBQkxFX01BSU47Ci0JdGIgPSBmaWI2X2dldF90YWJsZShpZCk7CisJdGIgPSBmaWI2X2dldF90YWJsZShuZXQsIGlkKTsKIAlpZiAodGIpCiAJCXJldHVybiB0YjsKIAotCXRiID0gZmliNl9hbGxvY190YWJsZShpZCk7CisJdGIgPSBmaWI2X2FsbG9jX3RhYmxlKG5ldCwgaWQpOwogCWlmICh0YiAhPSBOVUxMKQotCQlmaWI2X2xpbmtfdGFibGUodGIpOworCQlmaWI2X2xpbmtfdGFibGUobmV0LCB0Yik7CiAKIAlyZXR1cm4gdGI7CiB9CiAKLXN0cnVjdCBmaWI2X3RhYmxlICpmaWI2X2dldF90YWJsZSh1MzIgaWQpCitzdHJ1Y3QgZmliNl90YWJsZSAqZmliNl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiB7CiAJc3RydWN0IGZpYjZfdGFibGUgKnRiOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXVuc2lnbmVkIGludCBoOwogCkBAIC0yNTAsNyArMjM1LDggQEAKIAkJaWQgPSBSVDZfVEFCTEVfTUFJTjsKIAloID0gaWQgJiAoRklCX1RBQkxFX0hBU0hTWiAtIDEpOwogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGIsIG5vZGUsICZmaWJfdGFibGVfaGFzaFtoXSwgdGI2X2hsaXN0KSB7CisJaGVhZCA9ICZuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2hbaF07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRiLCBub2RlLCBoZWFkLCB0YjZfaGxpc3QpIHsKIAkJaWYgKHRiLT50YjZfaWQgPT0gaWQpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIHRiOwpAQCAtMjYxLDMzICsyNDcsMzIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGZpYjZfdGFibGVzX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGZpYjZfdGFibGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCWZpYjZfbGlua190YWJsZSgmZmliNl9tYWluX3RibCk7Ci0JZmliNl9saW5rX3RhYmxlKCZmaWI2X2xvY2FsX3RibCk7CisJZmliNl9saW5rX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmZpYjZfbWFpbl90YmwpOworCWZpYjZfbGlua190YWJsZShuZXQsIG5ldC0+aXB2Ni5maWI2X2xvY2FsX3RibCk7CiB9Ci0KICNlbHNlCiAKLXN0cnVjdCBmaWI2X3RhYmxlICpmaWI2X25ld190YWJsZSh1MzIgaWQpCitzdHJ1Y3QgZmliNl90YWJsZSAqZmliNl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiB7Ci0JcmV0dXJuIGZpYjZfZ2V0X3RhYmxlKGlkKTsKKwlyZXR1cm4gZmliNl9nZXRfdGFibGUobmV0LCBpZCk7CiB9CiAKLXN0cnVjdCBmaWI2X3RhYmxlICpmaWI2X2dldF90YWJsZSh1MzIgaWQpCitzdHJ1Y3QgZmliNl90YWJsZSAqZmliNl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiB7Ci0JcmV0dXJuICZmaWI2X21haW5fdGJsOworCSAgcmV0dXJuIG5ldC0+aXB2Ni5maWI2X21haW5fdGJsOwogfQogCi1zdHJ1Y3QgZHN0X2VudHJ5ICpmaWI2X3J1bGVfbG9va3VwKHN0cnVjdCBmbG93aSAqZmwsIGludCBmbGFncywKLQkJCQkgICBwb2xfbG9va3VwX3QgbG9va3VwKQorc3RydWN0IGRzdF9lbnRyeSAqZmliNl9ydWxlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aSAqZmwsCisJCQkJICAgaW50IGZsYWdzLCBwb2xfbG9va3VwX3QgbG9va3VwKQogewotCXJldHVybiAoc3RydWN0IGRzdF9lbnRyeSAqKSBsb29rdXAoJmZpYjZfbWFpbl90YmwsIGZsLCBmbGFncyk7CisJcmV0dXJuIChzdHJ1Y3QgZHN0X2VudHJ5ICopIGxvb2t1cChuZXQsIG5ldC0+aXB2Ni5maWI2X21haW5fdGJsLCBmbCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZmliNl90YWJsZXNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgZmliNl90YWJsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JZmliNl9saW5rX3RhYmxlKCZmaWI2X21haW5fdGJsKTsKKwlmaWI2X2xpbmtfdGFibGUobmV0LCBuZXQtPmlwdjYuZmliNl9tYWluX3RibCk7CiB9CiAKICNlbmRpZgpAQCAtMzYxLDE4ICszNDYsMTYgQEAKIAogc3RhdGljIGludCBpbmV0Nl9kdW1wX2ZpYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXVuc2lnbmVkIGludCBoLCBzX2g7CiAJdW5zaWduZWQgaW50IGUgPSAwLCBzX2U7CiAJc3RydWN0IHJ0Nl9ydG5sX2R1bXBfYXJnIGFyZzsKIAlzdHJ1Y3QgZmliNl93YWxrZXJfdCAqdzsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGI7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJaW50IHJlcyA9IDA7CiAKLQlpZiAobmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIDA7Ci0KIAlzX2ggPSBjYi0+YXJnc1swXTsKIAlzX2UgPSBjYi0+YXJnc1sxXTsKIApAQCAtNDAxLDcgKzM4NCw4IEBACiAKIAlmb3IgKGggPSBzX2g7IGggPCBGSUJfVEFCTEVfSEFTSFNaOyBoKyssIHNfZSA9IDApIHsKIAkJZSA9IDA7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiLCBub2RlLCAmZmliX3RhYmxlX2hhc2hbaF0sIHRiNl9obGlzdCkgeworCQloZWFkID0gJm5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaFtoXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkodGIsIG5vZGUsIGhlYWQsIHRiNl9obGlzdCkgewogCQkJaWYgKGUgPCBzX2UpCiAJCQkJZ290byBuZXh0OwogCQkJcmVzID0gZmliNl9kdW1wX3RhYmxlKHRiLCBza2IsIGNiKTsKQEAgLTY2NywyOSArNjUxLDI5IEBACiAJcnQtPnJ0Nmlfbm9kZSA9IGZuOwogCWF0b21pY19pbmMoJnJ0LT5ydDZpX3JlZik7CiAJaW5ldDZfcnRfbm90aWZ5KFJUTV9ORVdST1VURSwgcnQsIGluZm8pOwotCXJ0Nl9zdGF0cy5maWJfcnRfZW50cmllcysrOworCWluZm8tPm5sX25ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9ydF9lbnRyaWVzKys7CiAKIAlpZiAoKGZuLT5mbl9mbGFncyAmIFJUTl9SVElORk8pID09IDApIHsKLQkJcnQ2X3N0YXRzLmZpYl9yb3V0ZV9ub2RlcysrOworCQlpbmZvLT5ubF9uZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfcm91dGVfbm9kZXMrKzsKIAkJZm4tPmZuX2ZsYWdzIHw9IFJUTl9SVElORk87CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZmliNl9zdGFydF9nYyhzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBmaWI2X3N0YXJ0X2djKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJ0Nl9pbmZvICpydCkKIHsKLQlpZiAoaXA2X2ZpYl90aW1lci5leHBpcmVzID09IDAgJiYKKwlpZiAobmV0LT5pcHY2LmlwNl9maWJfdGltZXItPmV4cGlyZXMgPT0gMCAmJgogCSAgICAocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0VYUElSRVN8UlRGX0NBQ0hFKSkpCi0JCW1vZF90aW1lcigmaXA2X2ZpYl90aW1lciwgamlmZmllcyArCi0JCQkgIGluaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9nY19pbnRlcnZhbCk7CisJCW1vZF90aW1lcihuZXQtPmlwdjYuaXA2X2ZpYl90aW1lciwgamlmZmllcyArCisJCQkgIG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKTsKIH0KIAotdm9pZCBmaWI2X2ZvcmNlX3N0YXJ0X2djKHZvaWQpCit2b2lkIGZpYjZfZm9yY2Vfc3RhcnRfZ2Moc3RydWN0IG5ldCAqbmV0KQogewotCWlmIChpcDZfZmliX3RpbWVyLmV4cGlyZXMgPT0gMCkKLQkJbW9kX3RpbWVyKCZpcDZfZmliX3RpbWVyLCBqaWZmaWVzICsKLQkJCSAgaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKTsKKwlpZiAobmV0LT5pcHY2LmlwNl9maWJfdGltZXItPmV4cGlyZXMgPT0gMCkKKwkJbW9kX3RpbWVyKG5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWwpOwogfQogCiAvKgpAQCAtNzMzLDggKzcxNyw4IEBACiAJCQlpZiAoc2ZuID09IE5VTEwpCiAJCQkJZ290byBzdF9mYWlsdXJlOwogCi0JCQlzZm4tPmxlYWYgPSAmaXA2X251bGxfZW50cnk7Ci0JCQlhdG9taWNfaW5jKCZpcDZfbnVsbF9lbnRyeS5ydDZpX3JlZik7CisJCQlzZm4tPmxlYWYgPSBpbmZvLT5ubF9uZXQtPmlwdjYuaXA2X251bGxfZW50cnk7CisJCQlhdG9taWNfaW5jKCZpbmZvLT5ubF9uZXQtPmlwdjYuaXA2X251bGxfZW50cnktPnJ0NmlfcmVmKTsKIAkJCXNmbi0+Zm5fZmxhZ3MgPSBSVE5fUk9PVDsKIAkJCXNmbi0+Zm5fc2VybnVtID0gZmliNl9uZXdfc2VybnVtKCk7CiAKQEAgLTc3Niw5ICs3NjAsOSBAQAogCWVyciA9IGZpYjZfYWRkX3J0Mm5vZGUoZm4sIHJ0LCBpbmZvKTsKIAogCWlmIChlcnIgPT0gMCkgewotCQlmaWI2X3N0YXJ0X2djKHJ0KTsKKwkJZmliNl9zdGFydF9nYyhpbmZvLT5ubF9uZXQsIHJ0KTsKIAkJaWYgKCEocnQtPnJ0NmlfZmxhZ3MmUlRGX0NBQ0hFKSkKLQkJCWZpYjZfcHJ1bmVfY2xvbmVzKHBuLCBydCk7CisJCQlmaWI2X3BydW5lX2Nsb25lcyhpbmZvLT5ubF9uZXQsIHBuLCBydCk7CiAJfQogCiBvdXQ6CkBAIC03ODgsMTIgKzc3MiwxNiBAQAogCQkgKiBJZiBmaWI2X2FkZF8xIGhhcyBjbGVhcmVkIHRoZSBvbGQgbGVhZiBwb2ludGVyIGluIHRoZQogCQkgKiBzdXBlci10cmVlIGxlYWYgbm9kZSB3ZSBoYXZlIHRvIGZpbmQgYSBuZXcgb25lIGZvciBpdC4KIAkJICovCisJCWlmIChwbiAhPSBmbiAmJiBwbi0+bGVhZiA9PSBydCkgeworCQkJcG4tPmxlYWYgPSBOVUxMOworCQkJYXRvbWljX2RlYygmcnQtPnJ0NmlfcmVmKTsKKwkJfQogCQlpZiAocG4gIT0gZm4gJiYgIXBuLT5sZWFmICYmICEocG4tPmZuX2ZsYWdzICYgUlROX1JUSU5GTykpIHsKLQkJCXBuLT5sZWFmID0gZmliNl9maW5kX3ByZWZpeChwbik7CisJCQlwbi0+bGVhZiA9IGZpYjZfZmluZF9wcmVmaXgoaW5mby0+bmxfbmV0LCBwbik7CiAjaWYgUlQ2X0RFQlVHID49IDIKIAkJCWlmICghcG4tPmxlYWYpIHsKIAkJCQlCVUdfVFJBUChwbi0+bGVhZiAhPSBOVUxMKTsKLQkJCQlwbi0+bGVhZiA9ICZpcDZfbnVsbF9lbnRyeTsKKwkJCQlwbi0+bGVhZiA9IGluZm8tPm5sX25ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKIAkJCX0KICNlbmRpZgogCQkJYXRvbWljX2luYygmcG4tPmxlYWYtPnJ0NmlfcmVmKTsKQEAgLTgwOSw3ICs3OTcsNyBAQAogCSAqLwogc3RfZmFpbHVyZToKIAlpZiAoZm4gJiYgIShmbi0+Zm5fZmxhZ3MgJiAoUlROX1JUSU5GT3xSVE5fUk9PVCkpKQotCQlmaWI2X3JlcGFpcl90cmVlKGZuKTsKKwkJZmliNl9yZXBhaXJfdHJlZShpbmZvLT5ubF9uZXQsIGZuKTsKIAlkc3RfZnJlZSgmcnQtPnUuZHN0KTsKIAlyZXR1cm4gZXJyOwogI2VuZGlmCkBAIC05NzUsMTAgKzk2MywxMCBAQAogICoKICAqLwogCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICogZmliNl9maW5kX3ByZWZpeChzdHJ1Y3QgZmliNl9ub2RlICpmbikKK3N0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKmZpYjZfZmluZF9wcmVmaXgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9ub2RlICpmbikKIHsKIAlpZiAoZm4tPmZuX2ZsYWdzJlJUTl9ST09UKQotCQlyZXR1cm4gJmlwNl9udWxsX2VudHJ5OworCQlyZXR1cm4gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwogCiAJd2hpbGUoZm4pIHsKIAkJaWYoZm4tPmxlZnQpCkBAIC05OTcsNyArOTg1LDggQEAKICAqCWlzIHRoZSBub2RlIHdlIHdhbnQgdG8gdHJ5IGFuZCByZW1vdmUuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKiBmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBmaWI2X25vZGUgKmZuKQorc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKmZpYjZfcmVwYWlyX3RyZWUoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgICBzdHJ1Y3QgZmliNl9ub2RlICpmbikKIHsKIAlpbnQgY2hpbGRyZW47CiAJaW50IG5zdGF0ZTsKQEAgLTEwMjQsMTEgKzEwMTMsMTEgQEAKIAkJICAgIHx8IChjaGlsZHJlbiAmJiBmbi0+Zm5fZmxhZ3MmUlROX1JPT1QpCiAjZW5kaWYKIAkJICAgICkgewotCQkJZm4tPmxlYWYgPSBmaWI2X2ZpbmRfcHJlZml4KGZuKTsKKwkJCWZuLT5sZWFmID0gZmliNl9maW5kX3ByZWZpeChuZXQsIGZuKTsKICNpZiBSVDZfREVCVUcgPj0gMgogCQkJaWYgKGZuLT5sZWFmPT1OVUxMKSB7CiAJCQkJQlVHX1RSQVAoZm4tPmxlYWYpOwotCQkJCWZuLT5sZWFmID0gJmlwNl9udWxsX2VudHJ5OworCQkJCWZuLT5sZWFmID0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwogCQkJfQogI2VuZGlmCiAJCQlhdG9taWNfaW5jKCZmbi0+bGVhZi0+cnQ2aV9yZWYpOwpAQCAtMTEwMSwxNCArMTA5MCwxNSBAQAogewogCXN0cnVjdCBmaWI2X3dhbGtlcl90ICp3OwogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAqcnRwOworCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tPm5sX25ldDsKIAogCVJUNl9UUkFDRSgiZmliNl9kZWxfcm91dGVcbiIpOwogCiAJLyogVW5saW5rIGl0ICovCiAJKnJ0cCA9IHJ0LT51LmRzdC5ydDZfbmV4dDsKIAlydC0+cnQ2aV9ub2RlID0gTlVMTDsKLQlydDZfc3RhdHMuZmliX3J0X2VudHJpZXMtLTsKLQlydDZfc3RhdHMuZmliX2Rpc2NhcmRlZF9yb3V0ZXMrKzsKKwluZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfcnRfZW50cmllcy0tOworCW5ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9kaXNjYXJkZWRfcm91dGVzKys7CiAKIAkvKiBSZXNldCByb3VuZC1yb2JpbiBzdGF0ZSwgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKGZuLT5ycl9wdHIgPT0gcnQpCkBAIC0xMTMxLDggKzExMjEsOCBAQAogCS8qIElmIGl0IHdhcyBsYXN0IHJvdXRlLCBleHB1bmdlIGl0cyByYWRpeCB0cmVlIG5vZGUgKi8KIAlpZiAoZm4tPmxlYWYgPT0gTlVMTCkgewogCQlmbi0+Zm5fZmxhZ3MgJj0gflJUTl9SVElORk87Ci0JCXJ0Nl9zdGF0cy5maWJfcm91dGVfbm9kZXMtLTsKLQkJZm4gPSBmaWI2X3JlcGFpcl90cmVlKGZuKTsKKwkJbmV0LT5pcHY2LnJ0Nl9zdGF0cy0+ZmliX3JvdXRlX25vZGVzLS07CisJCWZuID0gZmliNl9yZXBhaXJfdHJlZShuZXQsIGZuKTsKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJnJ0LT5ydDZpX3JlZikgIT0gMSkgewpAQCAtMTE0NCwxNCArMTEzNCwxNCBAQAogCQkgKi8KIAkJd2hpbGUgKGZuKSB7CiAJCQlpZiAoIShmbi0+Zm5fZmxhZ3MmUlROX1JUSU5GTykgJiYgZm4tPmxlYWYgPT0gcnQpIHsKLQkJCQlmbi0+bGVhZiA9IGZpYjZfZmluZF9wcmVmaXgoZm4pOworCQkJCWZuLT5sZWFmID0gZmliNl9maW5kX3ByZWZpeChuZXQsIGZuKTsKIAkJCQlhdG9taWNfaW5jKCZmbi0+bGVhZi0+cnQ2aV9yZWYpOwogCQkJCXJ0Nl9yZWxlYXNlKHJ0KTsKIAkJCX0KIAkJCWZuID0gZm4tPnBhcmVudDsKIAkJfQogCQkvKiBObyBtb3JlIHJlZmVyZW5jZXMgYXJlIHBvc3NpYmxlIGF0IHRoaXMgcG9pbnQuICovCi0JCWlmIChhdG9taWNfcmVhZCgmcnQtPnJ0NmlfcmVmKSAhPSAxKSBCVUcoKTsKKwkJQlVHX09OKGF0b21pY19yZWFkKCZydC0+cnQ2aV9yZWYpICE9IDEpOwogCX0KIAogCWluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvKTsKQEAgLTExNjAsNiArMTE1MCw3IEBACiAKIGludCBmaWI2X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLT5ubF9uZXQ7CiAJc3RydWN0IGZpYjZfbm9kZSAqZm4gPSBydC0+cnQ2aV9ub2RlOwogCXN0cnVjdCBydDZfaW5mbyAqKnJ0cDsKIApAQCAtMTE2OSw3ICsxMTYwLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogI2VuZGlmCi0JaWYgKGZuID09IE5VTEwgfHwgcnQgPT0gJmlwNl9udWxsX2VudHJ5KQorCWlmIChmbiA9PSBOVUxMIHx8IHJ0ID09IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlCVUdfVFJBUChmbi0+Zm5fZmxhZ3MmUlROX1JUSU5GTyk7CkBAIC0xMTg0LDcgKzExNzUsNyBAQAogCQkJcG4gPSBwbi0+cGFyZW50OwogCQl9CiAjZW5kaWYKLQkJZmliNl9wcnVuZV9jbG9uZXMocG4sIHJ0KTsKKwkJZmliNl9wcnVuZV9jbG9uZXMoaW5mby0+bmxfbmV0LCBwbiwgcnQpOwogCX0KIAogCS8qCkBAIC0xMzE0LDEyICsxMzA1LDEyIEBACiAKIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlcl90ICp3KQogewotCXN0cnVjdCBubF9pbmZvIGluZm8gPSB7Ci0JCS5ubF9uZXQgPSAmaW5pdF9uZXQsCi0JfTsKIAlpbnQgcmVzOwogCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAJc3RydWN0IGZpYjZfY2xlYW5lcl90ICpjID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBmaWI2X2NsZWFuZXJfdCwgdyk7CisJc3RydWN0IG5sX2luZm8gaW5mbyA9IHsKKwkJLm5sX25ldCA9IGMtPm5ldCwKKwl9OwogCiAJZm9yIChydCA9IHctPmxlYWY7IHJ0OyBydCA9IHJ0LT51LmRzdC5ydDZfbmV4dCkgewogCQlyZXMgPSBjLT5mdW5jKHJ0LCBjLT5hcmcpOwpAQCAtMTM1MSw3ICsxMzQyLDcgQEAKICAqCWlnbm9yaW5nIHB1cmUgc3BsaXQgbm9kZXMpIHdpbGwgYmUgc2Nhbm5lZC4KICAqLwogCi1zdGF0aWMgdm9pZCBmaWI2X2NsZWFuX3RyZWUoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKK3N0YXRpYyB2b2lkIGZpYjZfY2xlYW5fdHJlZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsCiAJCQkgICAgaW50ICgqZnVuYykoc3RydWN0IHJ0Nl9pbmZvICosIHZvaWQgKmFyZyksCiAJCQkgICAgaW50IHBydW5lLCB2b2lkICphcmcpCiB7CkBAIC0xMzYyLDIzICsxMzUzLDI2IEBACiAJYy53LnBydW5lID0gcHJ1bmU7CiAJYy5mdW5jID0gZnVuYzsKIAljLmFyZyA9IGFyZzsKKwljLm5ldCA9IG5ldDsKIAogCWZpYjZfd2FsaygmYy53KTsKIH0KIAotdm9pZCBmaWI2X2NsZWFuX2FsbChpbnQgKCpmdW5jKShzdHJ1Y3QgcnQ2X2luZm8gKiwgdm9pZCAqYXJnKSwKK3ZvaWQgZmliNl9jbGVhbl9hbGwoc3RydWN0IG5ldCAqbmV0LCBpbnQgKCpmdW5jKShzdHJ1Y3QgcnQ2X2luZm8gKiwgdm9pZCAqYXJnKSwKIAkJICAgIGludCBwcnVuZSwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAl1bnNpZ25lZCBpbnQgaDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGggPSAwOyBoIDwgRklCX1RBQkxFX0hBU0hTWjsgaCsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YWJsZSwgbm9kZSwgJmZpYl90YWJsZV9oYXNoW2hdLAotCQkJCQkgdGI2X2hsaXN0KSB7CisJCWhlYWQgPSAmbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoW2hdOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGFibGUsIG5vZGUsIGhlYWQsIHRiNl9obGlzdCkgewogCQkJd3JpdGVfbG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKLQkJCWZpYjZfY2xlYW5fdHJlZSgmdGFibGUtPnRiNl9yb290LCBmdW5jLCBwcnVuZSwgYXJnKTsKKwkJCWZpYjZfY2xlYW5fdHJlZShuZXQsICZ0YWJsZS0+dGI2X3Jvb3QsCisJCQkJCWZ1bmMsIHBydW5lLCBhcmcpOwogCQkJd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCQl9CiAJfQpAQCAtMTM5NSw5ICsxMzg5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZpYjZfcHJ1bmVfY2xvbmVzKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQorc3RhdGljIHZvaWQgZmliNl9wcnVuZV9jbG9uZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKKwkJCSAgICAgIHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0JZmliNl9jbGVhbl90cmVlKGZuLCBmaWI2X3BydW5lX2Nsb25lLCAxLCBydCk7CisJZmliNl9jbGVhbl90cmVlKG5ldCwgZm4sIGZpYjZfcHJ1bmVfY2xvbmUsIDEsIHJ0KTsKIH0KIAogLyoKQEAgLTE0NDcsNTQgKzE0NDIsMTQ1IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmliNl9nY19sb2NrKTsKIAotdm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGR1bW15KQordm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpZiAoZHVtbXkgIT0gfjBVTCkgeworCWlmIChleHBpcmVzICE9IH4wVUwpIHsKIAkJc3Bpbl9sb2NrX2JoKCZmaWI2X2djX2xvY2spOwotCQlnY19hcmdzLnRpbWVvdXQgPSBkdW1teSA/IChpbnQpZHVtbXkgOgotCQkJaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsOworCQlnY19hcmdzLnRpbWVvdXQgPSBleHBpcmVzID8gKGludClleHBpcmVzIDoKKwkJCW5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsOwogCX0gZWxzZSB7CiAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAkJaWYgKCFzcGluX3RyeWxvY2soJmZpYjZfZ2NfbG9jaykpIHsKLQkJCW1vZF90aW1lcigmaXA2X2ZpYl90aW1lciwgamlmZmllcyArIEhaKTsKKwkJCW1vZF90aW1lcihuZXQtPmlwdjYuaXA2X2ZpYl90aW1lciwgamlmZmllcyArIEhaKTsKIAkJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWdjX2FyZ3MudGltZW91dCA9IGluaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9nY19pbnRlcnZhbDsKKwkJZ2NfYXJncy50aW1lb3V0ID0gbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWw7CiAJfQogCWdjX2FyZ3MubW9yZSA9IDA7CiAKLQluZGlzY19kc3RfZ2MoJmdjX2FyZ3MubW9yZSk7Ci0JZmliNl9jbGVhbl9hbGwoZmliNl9hZ2UsIDAsIE5VTEwpOworCWljbXA2X2RzdF9nYygmZ2NfYXJncy5tb3JlKTsKKworCWZpYjZfY2xlYW5fYWxsKG5ldCwgZmliNl9hZ2UsIDAsIE5VTEwpOwogCiAJaWYgKGdjX2FyZ3MubW9yZSkKLQkJbW9kX3RpbWVyKCZpcDZfZmliX3RpbWVyLCBqaWZmaWVzICsKLQkJCSAgaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X2djX2ludGVydmFsKTsKKwkJbW9kX3RpbWVyKG5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWwpOwogCWVsc2UgewotCQlkZWxfdGltZXIoJmlwNl9maWJfdGltZXIpOwotCQlpcDZfZmliX3RpbWVyLmV4cGlyZXMgPSAwOworCQlkZWxfdGltZXIobmV0LT5pcHY2LmlwNl9maWJfdGltZXIpOworCQluZXQtPmlwdjYuaXA2X2ZpYl90aW1lci0+ZXhwaXJlcyA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZmaWI2X2djX2xvY2spOwogfQogCi1pbnQgX19pbml0IGZpYjZfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlmaWI2X3J1bl9nYygwLCAoc3RydWN0IG5ldCAqKWFyZyk7Cit9CisKK3N0YXRpYyBpbnQgZmliNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXI7CisKKwlyZXQgPSAtRU5PTUVNOworCXRpbWVyID0ga3phbGxvYyhzaXplb2YoKnRpbWVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0aW1lcikKKwkJZ290byBvdXQ7CisKKwlzZXR1cF90aW1lcih0aW1lciwgZmliNl9nY190aW1lcl9jYiwgKHVuc2lnbmVkIGxvbmcpbmV0KTsKKwluZXQtPmlwdjYuaXA2X2ZpYl90aW1lciA9IHRpbWVyOworCisJbmV0LT5pcHY2LnJ0Nl9zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXQtPmlwdjYucnQ2X3N0YXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXQtPmlwdjYucnQ2X3N0YXRzKQorCQlnb3RvIG91dF90aW1lcjsKKworCW5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCA9CisJCWt6YWxsb2Moc2l6ZW9mKCpuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2gpKkZJQl9UQUJMRV9IQVNIU1osCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCkKKwkJZ290byBvdXRfcnQ2X3N0YXRzOworCisJbmV0LT5pcHY2LmZpYjZfbWFpbl90YmwgPSBremFsbG9jKHNpemVvZigqbmV0LT5pcHY2LmZpYjZfbWFpbl90YmwpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY2LmZpYjZfbWFpbl90YmwpCisJCWdvdG8gb3V0X2ZpYl90YWJsZV9oYXNoOworCisJbmV0LT5pcHY2LmZpYjZfbWFpbl90YmwtPnRiNl9pZCA9IFJUNl9UQUJMRV9NQUlOOworCW5ldC0+aXB2Ni5maWI2X21haW5fdGJsLT50YjZfcm9vdC5sZWFmID0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OworCW5ldC0+aXB2Ni5maWI2X21haW5fdGJsLT50YjZfcm9vdC5mbl9mbGFncyA9CisJCVJUTl9ST09UIHwgUlROX1RMX1JPT1QgfCBSVE5fUlRJTkZPOworCisjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisJbmV0LT5pcHY2LmZpYjZfbG9jYWxfdGJsID0ga3phbGxvYyhzaXplb2YoKm5ldC0+aXB2Ni5maWI2X2xvY2FsX3RibCksCisJCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY2LmZpYjZfbG9jYWxfdGJsKQorCQlnb3RvIG91dF9maWI2X21haW5fdGJsOworCW5ldC0+aXB2Ni5maWI2X2xvY2FsX3RibC0+dGI2X2lkID0gUlQ2X1RBQkxFX0xPQ0FMOworCW5ldC0+aXB2Ni5maWI2X2xvY2FsX3RibC0+dGI2X3Jvb3QubGVhZiA9IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKKwluZXQtPmlwdjYuZmliNl9sb2NhbF90YmwtPnRiNl9yb290LmZuX2ZsYWdzID0KKwkJUlROX1JPT1QgfCBSVE5fVExfUk9PVCB8IFJUTl9SVElORk87CisjZW5kaWYKKwlmaWI2X3RhYmxlc19pbml0KG5ldCk7CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7CisKKyNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKK291dF9maWI2X21haW5fdGJsOgorCWtmcmVlKG5ldC0+aXB2Ni5maWI2X21haW5fdGJsKTsKKyNlbmRpZgorb3V0X2ZpYl90YWJsZV9oYXNoOgorCWtmcmVlKG5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCk7CitvdXRfcnQ2X3N0YXRzOgorCWtmcmVlKG5ldC0+aXB2Ni5ydDZfc3RhdHMpOworb3V0X3RpbWVyOgorCWtmcmVlKHRpbWVyKTsKKwlnb3RvIG91dDsKKyB9CisKK3N0YXRpYyB2b2lkIGZpYjZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJ0Nl9pZmRvd24obmV0LCBOVUxMKTsKKwlkZWxfdGltZXIobmV0LT5pcHY2LmlwNl9maWJfdGltZXIpOworCWtmcmVlKG5ldC0+aXB2Ni5pcDZfZmliX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKKwlrZnJlZShuZXQtPmlwdjYuZmliNl9sb2NhbF90YmwpOworI2VuZGlmCisJa2ZyZWUobmV0LT5pcHY2LmZpYjZfbWFpbl90YmwpOworCWtmcmVlKG5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCk7CisJa2ZyZWUobmV0LT5pcHY2LnJ0Nl9zdGF0cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZmliNl9uZXRfb3BzID0geworCS5pbml0ID0gZmliNl9uZXRfaW5pdCwKKwkuZXhpdCA9IGZpYjZfbmV0X2V4aXQsCit9OworCitpbnQgX19pbml0IGZpYjZfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAtRU5PTUVNOworCiAJZmliNl9ub2RlX2ttZW0gPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZmliNl9ub2RlcyIsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3QgZmliNl9ub2RlKSwKIAkJCQkJICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAogCQkJCQkgICBOVUxMKTsKIAlpZiAoIWZpYjZfbm9kZV9rbWVtKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAKLQlmaWI2X3RhYmxlc19pbml0KCk7CisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmZmliNl9uZXRfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9rbWVtX2NhY2hlX2NyZWF0ZTsKIAogCXJldCA9IF9fcnRubF9yZWdpc3RlcihQRl9JTkVUNiwgUlRNX0dFVFJPVVRFLCBOVUxMLCBpbmV0Nl9kdW1wX2ZpYik7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfa21lbV9jYWNoZV9jcmVhdGU7CisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfc3Vic3lzOwogb3V0OgogCXJldHVybiByZXQ7CiAKK291dF91bnJlZ2lzdGVyX3N1YnN5czoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmZpYjZfbmV0X29wcyk7CiBvdXRfa21lbV9jYWNoZV9jcmVhdGU6CiAJa21lbV9jYWNoZV9kZXN0cm95KGZpYjZfbm9kZV9rbWVtKTsKIAlnb3RvIG91dDsKQEAgLTE1MDIsNiArMTU4OCw2IEBACiAKIHZvaWQgZmliNl9nY19jbGVhbnVwKHZvaWQpCiB7Ci0JZGVsX3RpbWVyKCZpcDZfZmliX3RpbWVyKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmZpYjZfbmV0X29wcyk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGZpYjZfbm9kZV9rbWVtKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwppbmRleCAyYjdkOWVlLi5lYjdhOTQwMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCisrKyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwpAQCAtNjIsMjMgKzYyLDIzIEBACiBzdGF0aWMgREVGSU5FX1JXTE9DSyhpcDZfc2tfZmxfbG9jayk7CiAKIAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlwNl9mbG93bGFiZWwgKiBfX2ZsX2xvb2t1cChfX2JlMzIgbGFiZWwpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcDZfZmxvd2xhYmVsICpfX2ZsX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBsYWJlbCkKIHsKIAlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmw7CiAKIAlmb3IgKGZsPWZsX2h0W0ZMX0hBU0gobGFiZWwpXTsgZmw7IGZsID0gZmwtPm5leHQpIHsKLQkJaWYgKGZsLT5sYWJlbCA9PSBsYWJlbCkKKwkJaWYgKGZsLT5sYWJlbCA9PSBsYWJlbCAmJiBmbC0+ZmxfbmV0ID09IG5ldCkKIAkJCXJldHVybiBmbDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqIGZsX2xvb2t1cChfX2JlMzIgbGFiZWwpCitzdGF0aWMgc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBsYWJlbCkKIHsKIAlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmw7CiAKIAlyZWFkX2xvY2tfYmgoJmlwNl9mbF9sb2NrKTsKLQlmbCA9IF9fZmxfbG9va3VwKGxhYmVsKTsKKwlmbCA9IF9fZmxfbG9va3VwKG5ldCwgbGFiZWwpOwogCWlmIChmbCkKIAkJYXRvbWljX2luYygmZmwtPnVzZXJzKTsKIAlyZWFkX3VubG9ja19iaCgmaXA2X2ZsX2xvY2spOwpAQCAtODgsOCArODgsMTAgQEAKIAogc3RhdGljIHZvaWQgZmxfZnJlZShzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmwpCiB7Ci0JaWYgKGZsKQorCWlmIChmbCkgeworCQlyZWxlYXNlX25ldChmbC0+ZmxfbmV0KTsKIAkJa2ZyZWUoZmwtPm9wdCk7CisJfQogCWtmcmVlKGZsKTsKIH0KIApAQCAtMTEyLDcgKzExNCw2IEBACiAJCSAgICB0aW1lX2FmdGVyKGlwNl9mbF9nY190aW1lci5leHBpcmVzLCB0dGQpKQogCQkJbW9kX3RpbWVyKCZpcDZfZmxfZ2NfdGltZXIsIHR0ZCk7CiAJfQotCiAJd3JpdGVfdW5sb2NrX2JoKCZpcDZfZmxfbG9jayk7CiB9CiAKQEAgLTE0OCwxMyArMTQ5LDM0IEBACiAJaWYgKCFzY2hlZCAmJiBhdG9taWNfcmVhZCgmZmxfc2l6ZSkpCiAJCXNjaGVkID0gbm93ICsgRkxfTUFYX0xJTkdFUjsKIAlpZiAoc2NoZWQpIHsKLQkJaXA2X2ZsX2djX3RpbWVyLmV4cGlyZXMgPSBzY2hlZDsKLQkJYWRkX3RpbWVyKCZpcDZfZmxfZ2NfdGltZXIpOworCQltb2RfdGltZXIoJmlwNl9mbF9nY190aW1lciwgc2NoZWQpOwogCX0KIAl3cml0ZV91bmxvY2soJmlwNl9mbF9sb2NrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcDZfZmxvd2xhYmVsICpmbF9pbnRlcm4oc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsLCBfX2JlMzIgbGFiZWwpCitzdGF0aWMgdm9pZCBpcDZfZmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0KQoreworCWludCBpOworCisJd3JpdGVfbG9jaygmaXA2X2ZsX2xvY2spOworCWZvciAoaSA9IDA7IGkgPD0gRkxfSEFTSF9NQVNLOyBpKyspIHsKKwkJc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsLCAqKmZscDsKKwkJZmxwID0gJmZsX2h0W2ldOworCQl3aGlsZSAoKGZsID0gKmZscCkgIT0gTlVMTCkgeworCQkJaWYgKGZsLT5mbF9uZXQgPT0gbmV0ICYmIGF0b21pY19yZWFkKCZmbC0+dXNlcnMpID09IDApIHsKKwkJCQkqZmxwID0gZmwtPm5leHQ7CisJCQkJZmxfZnJlZShmbCk7CisJCQkJYXRvbWljX2RlYygmZmxfc2l6ZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmbHAgPSAmZmwtPm5leHQ7CisJCX0KKwl9CisJd3JpdGVfdW5sb2NrKCZpcDZfZmxfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmxfaW50ZXJuKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkgICAgICAgc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsLCBfX2JlMzIgbGFiZWwpCiB7CiAJc3RydWN0IGlwNl9mbG93bGFiZWwgKmxmbDsKIApAQCAtMTY1LDcgKzE4Nyw3IEBACiAJCWZvciAoOzspIHsKIAkJCWZsLT5sYWJlbCA9IGh0b25sKG5ldF9yYW5kb20oKSkmSVBWNl9GTE9XTEFCRUxfTUFTSzsKIAkJCWlmIChmbC0+bGFiZWwpIHsKLQkJCQlsZmwgPSBfX2ZsX2xvb2t1cChmbC0+bGFiZWwpOworCQkJCWxmbCA9IF9fZmxfbG9va3VwKG5ldCwgZmwtPmxhYmVsKTsKIAkJCQlpZiAobGZsID09IE5VTEwpCiAJCQkJCWJyZWFrOwogCQkJfQpAQCAtMTc5LDcgKzIwMSw3IEBACiAJCSAqIGRvbmUgaW4gaXB2Nl9mbG93bGFiZWxfb3B0IC0gc29jayBpcyBsb2NrZWQsIHNvIG5ldyBlbnRyeQogCQkgKiB3aXRoIHRoZSBzYW1lIGxhYmVsIGNhbiBvbmx5IGFwcGVhciBvbiBhbm90aGVyIHNvY2sKIAkJICovCi0JCWxmbCA9IF9fZmxfbG9va3VwKGZsLT5sYWJlbCk7CisJCWxmbCA9IF9fZmxfbG9va3VwKG5ldCwgZmwtPmxhYmVsKTsKIAkJaWYgKGxmbCAhPSBOVUxMKSB7CiAJCQlhdG9taWNfaW5jKCZsZmwtPnVzZXJzKTsKIAkJCXdyaXRlX3VubG9ja19iaCgmaXA2X2ZsX2xvY2spOwpAQCAtMjk4LDcgKzMyMCw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqCi1mbF9jcmVhdGUoc3RydWN0IGluNl9mbG93bGFiZWxfcmVxICpmcmVxLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuLCBpbnQgKmVycl9wKQorZmxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGluNl9mbG93bGFiZWxfcmVxICpmcmVxLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCSAgaW50IG9wdGxlbiwgaW50ICplcnJfcCkKIHsKIAlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmw7CiAJaW50IG9sZW47CkBAIC0zNDMsNiArMzY2LDcgQEAKIAkJfQogCX0KIAorCWZsLT5mbF9uZXQgPSBob2xkX25ldChuZXQpOwogCWZsLT5leHBpcmVzID0gamlmZmllczsKIAllcnIgPSBmbDZfcmVuZXcoZmwsIGZyZXEtPmZscl9saW5nZXIsIGZyZXEtPmZscl9leHBpcmVzKTsKIAlpZiAoZXJyKQpAQCAtNDQxLDYgKzQ2NSw3IEBACiBpbnQgaXB2Nl9mbG93bGFiZWxfb3B0KHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlpbnQgZXJyOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIGZyZXE7CiAJc3RydWN0IGlwdjZfZmxfc29ja2xpc3QgKnNmbDE9TlVMTDsKQEAgLTQ4Myw3ICs1MDgsNyBAQAogCQlyZWFkX3VubG9ja19iaCgmaXA2X3NrX2ZsX2xvY2spOwogCiAJCWlmIChmcmVxLmZscl9zaGFyZSA9PSBJUFY2X0ZMX1NfTk9ORSAmJiBjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQlmbCA9IGZsX2xvb2t1cChmcmVxLmZscl9sYWJlbCk7CisJCQlmbCA9IGZsX2xvb2t1cChuZXQsIGZyZXEuZmxyX2xhYmVsKTsKIAkJCWlmIChmbCkgewogCQkJCWVyciA9IGZsNl9yZW5ldyhmbCwgZnJlcS5mbHJfbGluZ2VyLCBmcmVxLmZscl9leHBpcmVzKTsKIAkJCQlmbF9yZWxlYXNlKGZsKTsKQEAgLTQ5Niw3ICs1MjEsNyBAQAogCQlpZiAoZnJlcS5mbHJfbGFiZWwgJiB+SVBWNl9GTE9XTEFCRUxfTUFTSykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWZsID0gZmxfY3JlYXRlKCZmcmVxLCBvcHR2YWwsIG9wdGxlbiwgJmVycik7CisJCWZsID0gZmxfY3JlYXRlKG5ldCwgJmZyZXEsIG9wdHZhbCwgb3B0bGVuLCAmZXJyKTsKIAkJaWYgKGZsID09IE5VTEwpCiAJCQlyZXR1cm4gZXJyOwogCQlzZmwxID0ga21hbGxvYyhzaXplb2YoKnNmbDEpLCBHRlBfS0VSTkVMKTsKQEAgLTUxOCw3ICs1NDMsNyBAQAogCQkJcmVhZF91bmxvY2tfYmgoJmlwNl9za19mbF9sb2NrKTsKIAogCQkJaWYgKGZsMSA9PSBOVUxMKQotCQkJCWZsMSA9IGZsX2xvb2t1cChmcmVxLmZscl9sYWJlbCk7CisJCQkJZmwxID0gZmxfbG9va3VwKG5ldCwgZnJlcS5mbHJfbGFiZWwpOwogCQkJaWYgKGZsMSkgewogcmVjaGVjazoKIAkJCQllcnIgPSAtRUVYSVNUOwpAQCAtNTU5LDcgKzU4NCw3IEBACiAJCWlmIChzZmwxID09IE5VTEwgfHwgKGVyciA9IG1lbV9jaGVjayhzaykpICE9IDApCiAJCQlnb3RvIGRvbmU7CiAKLQkJZmwxID0gZmxfaW50ZXJuKGZsLCBmcmVxLmZscl9sYWJlbCk7CisJCWZsMSA9IGZsX2ludGVybihuZXQsIGZsLCBmcmVxLmZscl9sYWJlbCk7CiAJCWlmIChmbDEgIT0gTlVMTCkKIAkJCWdvdG8gcmVjaGVjazsKIApAQCAtNTg2LDYgKzYxMSw3IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RydWN0IGlwNmZsX2l0ZXJfc3RhdGUgeworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKIAlpbnQgYnVja2V0OwogfTsKIApAQCAtNTk1LDEyICs2MjEsMTUgQEAKIHsKIAlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmwgPSBOVUxMOwogCXN0cnVjdCBpcDZmbF9pdGVyX3N0YXRlICpzdGF0ZSA9IGlwNmZsX3NlcV9wcml2YXRlKHNlcSk7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAlmb3IgKHN0YXRlLT5idWNrZXQgPSAwOyBzdGF0ZS0+YnVja2V0IDw9IEZMX0hBU0hfTUFTSzsgKytzdGF0ZS0+YnVja2V0KSB7Ci0JCWlmIChmbF9odFtzdGF0ZS0+YnVja2V0XSkgewotCQkJZmwgPSBmbF9odFtzdGF0ZS0+YnVja2V0XTsKKwkJZmwgPSBmbF9odFtzdGF0ZS0+YnVja2V0XTsKKworCQl3aGlsZSAoZmwgJiYgZmwtPmZsX25ldCAhPSBuZXQpCisJCQlmbCA9IGZsLT5uZXh0OworCQlpZiAoZmwpCiAJCQlicmVhazsKLQkJfQogCX0KIAlyZXR1cm4gZmw7CiB9CkBAIC02MDgsMTIgKzYzNywxOCBAQAogc3RhdGljIHN0cnVjdCBpcDZfZmxvd2xhYmVsICppcDZmbF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsKQogewogCXN0cnVjdCBpcDZmbF9pdGVyX3N0YXRlICpzdGF0ZSA9IGlwNmZsX3NlcV9wcml2YXRlKHNlcSk7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAlmbCA9IGZsLT5uZXh0OwordHJ5X2FnYWluOgorCXdoaWxlIChmbCAmJiBmbC0+ZmxfbmV0ICE9IG5ldCkKKwkJZmwgPSBmbC0+bmV4dDsKKwogCXdoaWxlICghZmwpIHsKLQkJaWYgKCsrc3RhdGUtPmJ1Y2tldCA8PSBGTF9IQVNIX01BU0spCisJCWlmICgrK3N0YXRlLT5idWNrZXQgPD0gRkxfSEFTSF9NQVNLKSB7CiAJCQlmbCA9IGZsX2h0W3N0YXRlLT5idWNrZXRdOwotCQllbHNlCisJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJfSBlbHNlCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIGZsOwpAQCAtNjgzLDggKzcxOCw4IEBACiAKIHN0YXRpYyBpbnQgaXA2Zmxfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmlwNmZsX3NlcV9vcHMsCi0JCQlzaXplb2Yoc3RydWN0IGlwNmZsX2l0ZXJfc3RhdGUpKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmaXA2Zmxfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGlwNmZsX2l0ZXJfc3RhdGUpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXA2Zmxfc2VxX2ZvcHMgPSB7CkBAIC02OTIsMTIgKzcyNywxMyBAQAogCS5vcGVuCQk9CWlwNmZsX3NlcV9vcGVuLAogCS5yZWFkCQk9CXNlcV9yZWFkLAogCS5sbHNlZWsJCT0Jc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0Jc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZQk9CXNlcV9yZWxlYXNlX25ldCwKIH07CiAKIHN0YXRpYyBpbnQgaXA2X2Zsb3dsYWJlbF9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaXA2X2Zsb3dsYWJlbCIsIFNfSVJVR08sICZpcDZmbF9zZXFfZm9wcykpCisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcDZfZmxvd2xhYmVsIiwKKwkJCQkgIFNfSVJVR08sICZpcDZmbF9zZXFfZm9wcykpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwogfQpAQCAtNzE3LDEzICs3NTMsMjQgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHZvaWQgaXA2X2Zsb3dsYWJlbF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaXA2X2ZsX3B1cmdlKG5ldCk7CisJaXA2X2Zsb3dsYWJlbF9wcm9jX2ZpbmkobmV0KTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZfZmxvd2xhYmVsX25ldF9vcHMgPSB7CisJLmluaXQgPSBpcDZfZmxvd2xhYmVsX3Byb2NfaW5pdCwKKwkuZXhpdCA9IGlwNl9mbG93bGFiZWxfbmV0X2V4aXQsCit9OworCiBpbnQgaXA2X2Zsb3dsYWJlbF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlwNl9mbG93bGFiZWxfcHJvY19pbml0KCZpbml0X25ldCk7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNl9mbG93bGFiZWxfbmV0X29wcyk7CiB9CiAKIHZvaWQgaXA2X2Zsb3dsYWJlbF9jbGVhbnVwKHZvaWQpCiB7CiAJZGVsX3RpbWVyKCZpcDZfZmxfZ2NfdGltZXIpOwotCWlwNl9mbG93bGFiZWxfcHJvY19maW5pKCZpbml0X25ldCk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcDZfZmxvd2xhYmVsX25ldF9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2lucHV0LmMgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwppbmRleCAxNzhhZWJjLi40ZTVjODYxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L21yb3V0ZTYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CkBAIC02MSwxMSArNjIsNiBAQAogCXUzMiAJCXBrdF9sZW47CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwpAQCAtMjM5LDQxICsyMzUsODYgQEAKIAlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0lOTUNBU1RQS1RTKTsKIAogCWhkciA9IGlwdjZfaGRyKHNrYik7Ci0JZGVsaXZlciA9IHVubGlrZWx5KHNrYi0+ZGV2LT5mbGFncyAmIChJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSB8fAotCSAgICBpcHY2X2Noa19tY2FzdF9hZGRyKHNrYi0+ZGV2LCAmaGRyLT5kYWRkciwgTlVMTCk7CisJZGVsaXZlciA9IGlwdjZfY2hrX21jYXN0X2FkZHIoc2tiLT5kZXYsICZoZHItPmRhZGRyLCBOVUxMKTsKIAorI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQogCS8qCi0JICoJSVB2NiBtdWx0aWNhc3Qgcm91dGVyIG1vZGUgaXNudCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqICAgICAgSVB2NiBtdWx0aWNhc3Qgcm91dGVyIG1vZGUgaXMgbm93IHN1cHBvcnRlZCA7KQogCSAqLwotI2lmIDAKLQlpZiAoaXB2Nl9jb25maWcubXVsdGljYXN0X3JvdXRlKSB7Ci0JCWludCBhZGRyX3R5cGU7CisJaWYgKGlwdjZfZGV2Y29uZi5tY19mb3J3YXJkaW5nICYmCisJICAgIGxpa2VseSghKElQNkNCKHNrYiktPmZsYWdzICYgSVA2U0tCX0ZPUldBUkRFRCkpKSB7CisJCS8qCisJCSAqIE9rYXksIHdlIHRyeSB0byBmb3J3YXJkIC0gc3BsaXQgYW5kIGR1cGxpY2F0ZQorCQkgKiBwYWNrZXRzLgorCQkgKi8KKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CisJCXN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTsKIAotCQlhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZSgmaGRyLT5kYWRkcik7CisJCS8qIENoZWNrIGZvciBNTEQgKi8KKwkJaWYgKHVubGlrZWx5KG9wdC0+cmEpKSB7CisJCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEgbWxkIG1lc3NhZ2UgKi8KKwkJCXU4ICpwdHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9wdC0+cmE7CisJCQlzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2OworCQkJdTggbmV4dGhkciA9IGhkci0+bmV4dGhkcjsKKwkJCWludCBvZmZzZXQ7CiAKLQkJaWYgKCEoYWRkcl90eXBlICYgKElQVjZfQUREUl9MT09QQkFDSyB8IElQVjZfQUREUl9MSU5LTE9DQUwpKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7Ci0JCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CisJCQkvKiBDaGVjayBpZiB0aGUgdmFsdWUgb2YgUm91dGVyIEFsZXJ0CisJCQkgKiBpcyBmb3IgTUxEICgweDAwMDApLgorCQkJICovCisJCQlpZiAoKHB0clsyXSB8IHB0clszXSkgPT0gMCkgeworCQkJCWRlbGl2ZXIgPSAwOwogCi0JCQlkc3QgPSBza2ItPmRzdDsKKwkJCQlpZiAoIWlwdjZfZXh0X2hkcihuZXh0aGRyKSkgeworCQkJCQkvKiBCVUcgKi8KKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCW9mZnNldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCBzaXplb2YoKmhkciksCisJCQkJCQkJICAmbmV4dGhkcik7CisJCQkJaWYgKG9mZnNldCA8IDApCisJCQkJCWdvdG8gb3V0OwogCi0JCQlpZiAoZGVsaXZlcikgewotCQkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKLQkJCQlkc3Rfb3V0cHV0KHNrYjIpOwotCQkJfSBlbHNlIHsKLQkJCQlkc3Rfb3V0cHV0KHNrYik7Ci0JCQkJcmV0dXJuIDA7CisJCQkJaWYgKG5leHRoZHIgIT0gSVBQUk9UT19JQ01QVjYpCisJCQkJCWdvdG8gb3V0OworCisJCQkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsKKwkJCQkJCSAgIG9mZnNldCArIDEgLSBza2ItPmRhdGEpKSkKKwkJCQkJZ290byBvdXQ7CisKKwkJCQlpY21wNiA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpOworCisJCQkJc3dpdGNoIChpY21wNi0+aWNtcDZfdHlwZSkgeworCQkJCWNhc2UgSUNNUFY2X01HTV9RVUVSWToKKwkJCQljYXNlIElDTVBWNl9NR01fUkVQT1JUOgorCQkJCWNhc2UgSUNNUFY2X01HTV9SRURVQ1RJT046CisJCQkJY2FzZSBJQ01QVjZfTUxEMl9SRVBPUlQ6CisJCQkJCWRlbGl2ZXIgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZ290byBvdXQ7CiAJCQl9CisJCQkvKiB1bmtub3duIFJBIC0gcHJvY2VzcyBpdCBub3JtYWxseSAqLworCQl9CisKKwkJaWYgKGRlbGl2ZXIpCisJCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCWVsc2UgeworCQkJc2tiMiA9IHNrYjsKKwkJCXNrYiA9IE5VTEw7CisJCX0KKworCQlpZiAoc2tiMikgeworCQkJc2tiMi0+ZGV2ID0gc2tiMi0+ZHN0LT5kZXY7CisJCQlpcDZfbXJfaW5wdXQoc2tiMik7CiAJCX0KIAl9CitvdXQ6CiAjZW5kaWYKLQotCWlmIChsaWtlbHkoZGVsaXZlcikpIHsKKwlpZiAobGlrZWx5KGRlbGl2ZXIpKQogCQlpcDZfaW5wdXQoc2tiKTsKLQkJcmV0dXJuIDA7CisJZWxzZSB7CisJCS8qIGRpc2NhcmQgKi8KKwkJa2ZyZWVfc2tiKHNrYik7CiAJfQotCS8qIGRpc2NhcmQgKi8KLQlrZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDhiNjdjYTAuLjBhZjJlMDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvbXJvdXRlNi5oPgogCiBzdGF0aWMgaW50IGlwNl9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICopKTsKIApAQCAtMTM3LDggKzEzOCw5IEBACiAJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoc2tiLT5kc3QpOwogCiAJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICYmICghbnAgfHwgbnAtPm1jX2xvb3ApICYmCi0JCSAgICBpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCQkmaXB2Nl9oZHIoc2tiKS0+c2FkZHIpKSB7CisJCSAgICAoKG1yb3V0ZTZfc29ja2V0ICYmICEoSVA2Q0Ioc2tiKS0+ZmxhZ3MgJiBJUDZTS0JfRk9SV0FSREVEKSkgfHwKKwkJICAgICBpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAorCQkJCQkgJmlwdjZfaGRyKHNrYiktPnNhZGRyKSkpIHsKIAkJCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAogCQkJLyogRG8gbm90IGNoZWNrIGZvciBJRkZfQUxMTVVMVEk7IG11bHRpY2FzdCByb3V0aW5nCkBAIC0yMzcsOSArMjM5LDcgQEAKIAlpZiAobnApCiAJCWhsaW1pdCA9IG5wLT5ob3BfbGltaXQ7CiAJaWYgKGhsaW1pdCA8IDApCi0JCWhsaW1pdCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0hPUExJTUlUKTsKLQlpZiAoaGxpbWl0IDwgMCkKLQkJaGxpbWl0ID0gaXB2Nl9nZXRfaG9wbGltaXQoZHN0LT5kZXYpOworCQlobGltaXQgPSBpcDZfZHN0X2hvcGxpbWl0KGRzdCk7CiAKIAl0Y2xhc3MgPSAtMTsKIAlpZiAobnApCkBAIC0yODYsNyArMjg2LDcgQEAKICAqLwogCiBpbnQgaXA2X25kX2hkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JICAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJICAgICAgIGludCBwcm90bywgaW50IGxlbikKIHsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CkBAIC00MDQsNiArNDA0LDcgQEAKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2ItPmRzdDsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkc3QtPmRldik7CiAKIAlpZiAoaXB2Nl9kZXZjb25mLmZvcndhcmRpbmcgPT0gMCkKIAkJZ290byBlcnJvcjsKQEAgLTQ1MCw3ICs0NTEsNyBAQAogCiAJLyogWFhYOiBpZGV2LT5jbmYucHJveHlfbmRwPyAqLwogCWlmIChpcHY2X2RldmNvbmYucHJveHlfbmRwICYmCi0JICAgIHBuZWlnaF9sb29rdXAoJm5kX3RibCwgJmluaXRfbmV0LCAmaGRyLT5kYWRkciwgc2tiLT5kZXYsIDApKSB7CisJICAgIHBuZWlnaF9sb29rdXAoJm5kX3RibCwgbmV0LCAmaGRyLT5kYWRkciwgc2tiLT5kZXYsIDApKSB7CiAJCWludCBwcm94aWVkID0gaXA2X2ZvcndhcmRfcHJveHlfY2hlY2soc2tiKTsKIAkJaWYgKHByb3hpZWQgPiAwKQogCQkJcmV0dXJuIGlwNl9pbnB1dChza2IpOwpAQCAtNTk2LDcgKzU5Nyw2IEBACiAKIAlyZXR1cm4gb2Zmc2V0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXA2X2ZpbmRfMXN0ZnJhZ29wdCk7CiAKIHN0YXRpYyBpbnQgaXA2X2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKikpCiB7CkBAIC05MTIsMTUgKzkxMiwxOSBAQAogCQkJICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpCiB7CiAJaW50IGVycjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlpZiAoKmRzdCA9PSBOVUxMKQotCQkqZHN0ID0gaXA2X3JvdXRlX291dHB1dChzaywgZmwpOworCQkqZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBmbCk7CiAKIAlpZiAoKGVyciA9ICgqZHN0KS0+ZXJyb3IpKQogCQlnb3RvIG91dF9lcnJfcmVsZWFzZTsKIAogCWlmIChpcHY2X2FkZHJfYW55KCZmbC0+Zmw2X3NyYykpIHsKLQkJZXJyID0gaXB2Nl9nZXRfc2FkZHIoKmRzdCwgJmZsLT5mbDZfZHN0LCAmZmwtPmZsNl9zcmMpOworCQllcnIgPSBpcHY2X2Rldl9nZXRfc2FkZHIoaXA2X2RzdF9pZGV2KCpkc3QpLT5kZXYsCisJCQkJCSAmZmwtPmZsNl9kc3QsCisJCQkJCSBzayA/IGluZXQ2X3NrKHNrKS0+c3JjcHJlZnMgOiAwLAorCQkJCQkgJmZsLT5mbDZfc3JjKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2Vycl9yZWxlYXNlOwogCX0KQEAgLTkzOSw3ICs5NDMsNyBAQAogCQkJc3RydWN0IGZsb3dpIGZsX2d3OwogCQkJaW50IHJlZGlyZWN0OwogCi0JCQlpZnAgPSBpcHY2X2dldF9pZmFkZHIoJmluaXRfbmV0LCAmZmwtPmZsNl9zcmMsCisJCQlpZnAgPSBpcHY2X2dldF9pZmFkZHIobmV0LCAmZmwtPmZsNl9zcmMsCiAJCQkJCSAgICAgICgqZHN0KS0+ZGV2LCAxKTsKIAogCQkJcmVkaXJlY3QgPSAoaWZwICYmIGlmcC0+ZmxhZ3MgJiBJRkFfRl9PUFRJTUlTVElDKTsKQEAgLTk1NCw3ICs5NTgsNyBAQAogCQkJCWRzdF9yZWxlYXNlKCpkc3QpOwogCQkJCW1lbWNweSgmZmxfZ3csIGZsLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7CiAJCQkJbWVtc2V0KCZmbF9ndy5mbDZfZHN0LCAwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQkJKmRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoc2ssICZmbF9ndyk7CisJCQkJKmRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgJmZsX2d3KTsKIAkJCQlpZiAoKGVyciA9ICgqZHN0KS0+ZXJyb3IpKQogCQkJCQlnb3RvIG91dF9lcnJfcmVsZWFzZTsKIAkJCX0KQEAgLTExMTMsNyArMTExNyw3IEBACiAJCQkvKiBuZWVkIHNvdXJjZSBhZGRyZXNzIGFib3ZlIG1peWF6YXdhKi8KIAkJfQogCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKLQkJbnAtPmNvcmsucnQgPSBydDsKKwkJaW5ldC0+Y29yay5kc3QgPSAmcnQtPnUuZHN0OwogCQlpbmV0LT5jb3JrLmZsID0gKmZsOwogCQlucC0+Y29yay5ob3BfbGltaXQgPSBobGltaXQ7CiAJCW5wLT5jb3JrLnRjbGFzcyA9IHRjbGFzczsKQEAgLTExMzQsNyArMTEzOCw3IEBACiAJCWxlbmd0aCArPSBleHRoZHJsZW47CiAJCXRyYW5zaGRybGVuICs9IGV4dGhkcmxlbjsKIAl9IGVsc2UgewotCQlydCA9IG5wLT5jb3JrLnJ0OworCQlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilpbmV0LT5jb3JrLmRzdDsKIAkJZmwgPSAmaW5ldC0+Y29yay5mbDsKIAkJaWYgKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfT1BUKQogCQkJb3B0ID0gbnAtPmNvcmsub3B0OwpAQCAtMTM3OSw5ICsxMzgzLDkgQEAKIAlpbmV0LT5jb3JrLmZsYWdzICY9IH5JUENPUktfT1BUOwogCWtmcmVlKG5wLT5jb3JrLm9wdCk7CiAJbnAtPmNvcmsub3B0ID0gTlVMTDsKLQlpZiAobnAtPmNvcmsucnQpIHsKLQkJZHN0X3JlbGVhc2UoJm5wLT5jb3JrLnJ0LT51LmRzdCk7Ci0JCW5wLT5jb3JrLnJ0ID0gTlVMTDsKKwlpZiAoaW5ldC0+Y29yay5kc3QpIHsKKwkJZHN0X3JlbGVhc2UoaW5ldC0+Y29yay5kc3QpOworCQlpbmV0LT5jb3JrLmRzdCA9IE5VTEw7CiAJCWluZXQtPmNvcmsuZmxhZ3MgJj0gfklQQ09SS19BTExGUkFHOwogCX0KIAltZW1zZXQoJmluZXQtPmNvcmsuZmwsIDAsIHNpemVvZihpbmV0LT5jb3JrLmZsKSk7CkBAIC0xMzk2LDcgKzE0MDAsNyBAQAogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0ID0gbnAtPmNvcmsub3B0OwotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBucC0+Y29yay5ydDsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWluZXQtPmNvcmsuZHN0OwogCXN0cnVjdCBmbG93aSAqZmwgPSAmaW5ldC0+Y29yay5mbDsKIAl1bnNpZ25lZCBjaGFyIHByb3RvID0gZmwtPnByb3RvOwogCWludCBlcnIgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IDkwMzFlNTIuLjJiZGEzYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYworKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTUyLDYgKzUyLDggQEAKICNpbmNsdWRlIDxuZXQveGZybS5oPgogI2luY2x1ZGUgPG5ldC9kc2ZpZWxkLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogCiBNT0RVTEVfQVVUSE9SKCJWaWxsZSBOdW9ydmFsYSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IHR1bm5lbGluZyBkZXZpY2UiKTsKQEAgLTYwLDcgKzYyLDcgQEAKICNkZWZpbmUgSVBWNl9UTFZfVEVMX0RTVF9TSVpFIDgKIAogI2lmZGVmIElQNl9UTkxfREVCVUcKLSNkZWZpbmUgSVA2X1ROTF9UUkFDRSh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6IiB4ICJcbiIsIF9fRlVOQ1RJT05fXykKKyNkZWZpbmUgSVA2X1ROTF9UUkFDRSh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6IiB4ICJcbiIsIF9fZnVuY19fKQogI2Vsc2UKICNkZWZpbmUgSVA2X1ROTF9UUkFDRSh4Li4uKSBkbyB7O30gd2hpbGUoMCkKICNlbmRpZgpAQCAtNzgsMTQgKzgwLDE1IEBACiBzdGF0aWMgaW50IGlwNl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpcDZfdG5sX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotLyogdGhlIElQdjYgdHVubmVsIGZhbGxiYWNrIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcDZfZmJfdG5sX2RldjsKLQotCi0vKiBsaXN0cyBmb3Igc3RvcmluZyB0dW5uZWxzIGluIHVzZSAqLwotc3RhdGljIHN0cnVjdCBpcDZfdG5sICp0bmxzX3JfbFtIQVNIX1NJWkVdOwotc3RhdGljIHN0cnVjdCBpcDZfdG5sICp0bmxzX3djWzFdOwotc3RhdGljIHN0cnVjdCBpcDZfdG5sICoqdG5sc1syXSA9IHsgdG5sc193YywgdG5sc19yX2wgfTsKK3N0YXRpYyBpbnQgaXA2X3RubF9uZXRfaWQ7CitzdHJ1Y3QgaXA2X3RubF9uZXQgeworCS8qIHRoZSBJUHY2IHR1bm5lbCBmYWxsYmFjayBkZXZpY2UgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZmJfdG5sX2RldjsKKwkvKiBsaXN0cyBmb3Igc3RvcmluZyB0dW5uZWxzIGluIHVzZSAqLworCXN0cnVjdCBpcDZfdG5sICp0bmxzX3JfbFtIQVNIX1NJWkVdOworCXN0cnVjdCBpcDZfdG5sICp0bmxzX3djWzFdOworCXN0cnVjdCBpcDZfdG5sICoqdG5sc1syXTsKK307CiAKIC8qIGxvY2sgZm9yIHRoZSB0dW5uZWwgbGlzdHMgKi8KIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwNl90bmxfbG9jayk7CkBAIC0xMzAsMTkgKzEzMywyMCBAQAogICoqLwogCiBzdGF0aWMgc3RydWN0IGlwNl90bmwgKgotaXA2X3RubF9sb29rdXAoc3RydWN0IGluNl9hZGRyICpyZW1vdGUsIHN0cnVjdCBpbjZfYWRkciAqbG9jYWwpCitpcDZfdG5sX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpbjZfYWRkciAqcmVtb3RlLCBzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsKQogewogCXVuc2lnbmVkIGgwID0gSEFTSChyZW1vdGUpOwogCXVuc2lnbmVkIGgxID0gSEFTSChsb2NhbCk7CiAJc3RydWN0IGlwNl90bmwgKnQ7CisJc3RydWN0IGlwNl90bmxfbmV0ICppcDZuID0gbmV0X2dlbmVyaWMobmV0LCBpcDZfdG5sX25ldF9pZCk7CiAKLQlmb3IgKHQgPSB0bmxzX3JfbFtoMCBeIGgxXTsgdDsgdCA9IHQtPm5leHQpIHsKKwlmb3IgKHQgPSBpcDZuLT50bmxzX3JfbFtoMCBeIGgxXTsgdDsgdCA9IHQtPm5leHQpIHsKIAkJaWYgKGlwdjZfYWRkcl9lcXVhbChsb2NhbCwgJnQtPnBhcm1zLmxhZGRyKSAmJgogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKHJlbW90ZSwgJnQtPnBhcm1zLnJhZGRyKSAmJgogCQkgICAgKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQogCQkJcmV0dXJuIHQ7CiAJfQotCWlmICgodCA9IHRubHNfd2NbMF0pICE9IE5VTEwgJiYgKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCWlmICgodCA9IGlwNm4tPnRubHNfd2NbMF0pICE9IE5VTEwgJiYgKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQogCQlyZXR1cm4gdDsKIAogCXJldHVybiBOVUxMOwpAQCAtMTYwLDcgKzE2NCw3IEBACiAgKiovCiAKIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqKgotaXA2X3RubF9idWNrZXQoc3RydWN0IGlwNl90bmxfcGFybSAqcCkKK2lwNl90bmxfYnVja2V0KHN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biwgc3RydWN0IGlwNl90bmxfcGFybSAqcCkKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgKnJlbW90ZSA9ICZwLT5yYWRkcjsKIAlzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsID0gJnAtPmxhZGRyOwpAQCAtMTcxLDcgKzE3NSw3IEBACiAJCXByaW8gPSAxOwogCQloID0gSEFTSChyZW1vdGUpIF4gSEFTSChsb2NhbCk7CiAJfQotCXJldHVybiAmdG5sc1twcmlvXVtoXTsKKwlyZXR1cm4gJmlwNm4tPnRubHNbcHJpb11baF07CiB9CiAKIC8qKgpAQCAtMTgwLDkgKzE4NCw5IEBACiAgKiovCiAKIHN0YXRpYyB2b2lkCi1pcDZfdG5sX2xpbmsoc3RydWN0IGlwNl90bmwgKnQpCitpcDZfdG5sX2xpbmsoc3RydWN0IGlwNl90bmxfbmV0ICppcDZuLCBzdHJ1Y3QgaXA2X3RubCAqdCkKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqKnRwID0gaXA2X3RubF9idWNrZXQoJnQtPnBhcm1zKTsKKwlzdHJ1Y3QgaXA2X3RubCAqKnRwID0gaXA2X3RubF9idWNrZXQoaXA2biwgJnQtPnBhcm1zKTsKIAogCXQtPm5leHQgPSAqdHA7CiAJd3JpdGVfbG9ja19iaCgmaXA2X3RubF9sb2NrKTsKQEAgLTE5NiwxMSArMjAwLDExIEBACiAgKiovCiAKIHN0YXRpYyB2b2lkCi1pcDZfdG5sX3VubGluayhzdHJ1Y3QgaXA2X3RubCAqdCkKK2lwNl90bmxfdW5saW5rKHN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biwgc3RydWN0IGlwNl90bmwgKnQpCiB7CiAJc3RydWN0IGlwNl90bmwgKip0cDsKIAotCWZvciAodHAgPSBpcDZfdG5sX2J1Y2tldCgmdC0+cGFybXMpOyAqdHA7IHRwID0gJigqdHApLT5uZXh0KSB7CisJZm9yICh0cCA9IGlwNl90bmxfYnVja2V0KGlwNm4sICZ0LT5wYXJtcyk7ICp0cDsgdHAgPSAmKCp0cCktPm5leHQpIHsKIAkJaWYgKHQgPT0gKnRwKSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZpcDZfdG5sX2xvY2spOwogCQkJKnRwID0gdC0+bmV4dDsKQEAgLTIyMiw0MCArMjI2LDQzIEBACiAgKiAgIGNyZWF0ZWQgdHVubmVsIG9yIE5VTEwKICAqKi8KIAotc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgaXA2X3RubF9wYXJtICpwKQorc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcDZfdG5sX3Bhcm0gKnApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaXA2X3RubCAqdDsKIAljaGFyIG5hbWVbSUZOQU1TSVpdOwogCWludCBlcnI7CisJc3RydWN0IGlwNl90bmxfbmV0ICppcDZuID0gbmV0X2dlbmVyaWMobmV0LCBpcDZfdG5sX25ldF9pZCk7CiAKLQlpZiAocC0+bmFtZVswXSkgeworCWlmIChwLT5uYW1lWzBdKQogCQlzdHJsY3B5KG5hbWUsIHAtPm5hbWUsIElGTkFNU0laKTsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMTsgaSA8IElQNl9UTkxfTUFYOyBpKyspIHsKLQkJCXNwcmludGYobmFtZSwgImlwNnRubCVkIiwgaSk7Ci0JCQlpZiAoX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBuYW1lKSA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpID09IElQNl9UTkxfTUFYKQotCQkJZ290byBmYWlsZWQ7Ci0JfQorCWVsc2UKKwkJc3ByaW50ZihuYW1lLCAiaXA2dG5sJSVkIik7CisKIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mICgqdCksIG5hbWUsIGlwNl90bmxfZGV2X3NldHVwKTsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCWdvdG8gZmFpbGVkOwogCisJZGV2X25ldF9zZXQoZGV2LCBuZXQpOworCisJaWYgKHN0cmNocihuYW1lLCAnJScpKSB7CisJCWlmIChkZXZfYWxsb2NfbmFtZShkZXYsIG5hbWUpIDwgMCkKKwkJCWdvdG8gZmFpbGVkX2ZyZWU7CisJfQorCiAJdCA9IG5ldGRldl9wcml2KGRldik7CiAJZGV2LT5pbml0ID0gaXA2X3RubF9kZXZfaW5pdDsKIAl0LT5wYXJtcyA9ICpwOwogCi0JaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KSkgPCAwKSB7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCWdvdG8gZmFpbGVkOwotCX0KKwlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpKSA8IDApCisJCWdvdG8gZmFpbGVkX2ZyZWU7CisKIAlkZXZfaG9sZChkZXYpOwotCWlwNl90bmxfbGluayh0KTsKKwlpcDZfdG5sX2xpbmsoaXA2biwgdCk7CiAJcmV0dXJuIHQ7CisKK2ZhaWxlZF9mcmVlOgorCWZyZWVfbmV0ZGV2KGRldik7CiBmYWlsZWQ6CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yNzQsMjAgKzI4MSwyMiBAQAogICogICBtYXRjaGluZyB0dW5uZWwgb3IgTlVMTAogICoqLwogCi1zdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfbG9jYXRlKHN0cnVjdCBpcDZfdG5sX3Bhcm0gKnAsIGludCBjcmVhdGUpCitzdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCwKKwkJc3RydWN0IGlwNl90bmxfcGFybSAqcCwgaW50IGNyZWF0ZSkKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgKnJlbW90ZSA9ICZwLT5yYWRkcjsKIAlzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsID0gJnAtPmxhZGRyOwogCXN0cnVjdCBpcDZfdG5sICp0OworCXN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biA9IG5ldF9nZW5lcmljKG5ldCwgaXA2X3RubF9uZXRfaWQpOwogCi0JZm9yICh0ID0gKmlwNl90bmxfYnVja2V0KHApOyB0OyB0ID0gdC0+bmV4dCkgeworCWZvciAodCA9ICppcDZfdG5sX2J1Y2tldChpcDZuLCBwKTsgdDsgdCA9IHQtPm5leHQpIHsKIAkJaWYgKGlwdjZfYWRkcl9lcXVhbChsb2NhbCwgJnQtPnBhcm1zLmxhZGRyKSAmJgogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKHJlbW90ZSwgJnQtPnBhcm1zLnJhZGRyKSkKIAkJCXJldHVybiB0OwogCX0KIAlpZiAoIWNyZWF0ZSkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGlwNl90bmxfY3JlYXRlKHApOworCXJldHVybiBpcDZfdG5sX2NyZWF0ZShuZXQsIHApOwogfQogCiAvKioKQEAgLTMwMiwxMyArMzExLDE1IEBACiBpcDZfdG5sX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biA9IG5ldF9nZW5lcmljKG5ldCwgaXA2X3RubF9uZXRfaWQpOwogCi0JaWYgKGRldiA9PSBpcDZfZmJfdG5sX2RldikgeworCWlmIChkZXYgPT0gaXA2bi0+ZmJfdG5sX2RldikgewogCQl3cml0ZV9sb2NrX2JoKCZpcDZfdG5sX2xvY2spOwotCQl0bmxzX3djWzBdID0gTlVMTDsKKwkJaXA2bi0+dG5sc193Y1swXSA9IE5VTEw7CiAJCXdyaXRlX3VubG9ja19iaCgmaXA2X3RubF9sb2NrKTsKIAl9IGVsc2UgewotCQlpcDZfdG5sX3VubGluayh0KTsKKwkJaXA2X3RubF91bmxpbmsoaXA2biwgdCk7CiAJfQogCWlwNl90bmxfZHN0X3Jlc2V0KHQpOwogCWRldl9wdXQoZGV2KTsKQEAgLTQwMSw3ICs0MTIsOCBAQAogCSAgIHByb2Nlc3Npbmcgb2YgdGhlIGVycm9yLiAqLwogCiAJcmVhZF9sb2NrKCZpcDZfdG5sX2xvY2spOwotCWlmICgodCA9IGlwNl90bmxfbG9va3VwKCZpcHY2aC0+ZGFkZHIsICZpcHY2aC0+c2FkZHIpKSA9PSBOVUxMKQorCWlmICgodCA9IGlwNl90bmxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCAmaXB2NmgtPmRhZGRyLAorCQkJCQkmaXB2NmgtPnNhZGRyKSkgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlpZiAodC0+cGFybXMucHJvdG8gIT0gaXBwcm90byAmJiB0LT5wYXJtcy5wcm90byAhPSAwKQpAQCAtNTMzLDcgKzU0NSw3IEBACiAJZmwuZmw0X2RzdCA9IGVpcGgtPnNhZGRyOwogCWZsLmZsNF90b3MgPSBSVF9UT1MoZWlwaC0+dG9zKTsKIAlmbC5wcm90byA9IElQUFJPVE9fSVBJUDsKLQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkKKwlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KHNrYi0+ZGV2KSwgJnJ0LCAmZmwpKQogCQlnb3RvIG91dDsKIAogCXNrYjItPmRldiA9IHJ0LT51LmRzdC5kZXY7CkBAIC01NDUsMTEgKzU1NywxMiBAQAogCQlmbC5mbDRfZHN0ID0gZWlwaC0+ZGFkZHI7CiAJCWZsLmZsNF9zcmMgPSBlaXBoLT5zYWRkcjsKIAkJZmwuZmw0X3RvcyA9IGVpcGgtPnRvczsKLQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkgfHwKKwkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChza2ItPmRldiksICZydCwgJmZsKSB8fAogCQkgICAgcnQtPnUuZHN0LmRldi0+dHlwZSAhPSBBUlBIUkRfVFVOTkVMKSB7CiAJCQlpcF9ydF9wdXQocnQpOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJc2tiMi0+ZHN0ID0gKHN0cnVjdCBkc3RfZW50cnkgKilydDsKIAl9IGVsc2UgewogCQlpcF9ydF9wdXQocnQpOwogCQlpZiAoaXBfcm91dGVfaW5wdXQoc2tiMiwgZWlwaC0+ZGFkZHIsIGVpcGgtPnNhZGRyLCBlaXBoLT50b3MsCkBAIC02MDEsNyArNjE0LDggQEAKIAkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjIpOwogCiAJCS8qIFRyeSB0byBndWVzcyBpbmNvbWluZyBpbnRlcmZhY2UgKi8KLQkJcnQgPSBydDZfbG9va3VwKCZpcHY2X2hkcihza2IyKS0+c2FkZHIsIE5VTEwsIDAsIDApOworCQlydCA9IHJ0Nl9sb29rdXAoZGV2X25ldChza2ItPmRldiksICZpcHY2X2hkcihza2IyKS0+c2FkZHIsCisJCQkJTlVMTCwgMCwgMCk7CiAKIAkJaWYgKHJ0ICYmIHJ0LT5ydDZpX2RldikKIAkJCXNrYjItPmRldiA9IHJ0LT5ydDZpX2RldjsKQEAgLTY0NSwxNiArNjU5LDE3IEBACiB7CiAJc3RydWN0IGlwNl90bmxfcGFybSAqcCA9ICZ0LT5wYXJtczsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHQtPmRldik7CiAKIAlpZiAocC0+ZmxhZ3MgJiBJUDZfVE5MX0ZfQ0FQX1JDVikgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbGRldiA9IE5VTEw7CiAKIAkJaWYgKHAtPmxpbmspCi0JCQlsZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHAtPmxpbmspOworCQkJbGRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBwLT5saW5rKTsKIAogCQlpZiAoKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoJnAtPmxhZGRyKSB8fAotCQkgICAgIGxpa2VseShpcHY2X2Noa19hZGRyKCZpbml0X25ldCwgJnAtPmxhZGRyLCBsZGV2LCAwKSkpICYmCi0JCSAgICBsaWtlbHkoIWlwdjZfY2hrX2FkZHIoJmluaXRfbmV0LCAmcC0+cmFkZHIsIE5VTEwsIDApKSkKKwkJICAgICBsaWtlbHkoaXB2Nl9jaGtfYWRkcihuZXQsICZwLT5sYWRkciwgbGRldiwgMCkpKSAmJgorCQkgICAgbGlrZWx5KCFpcHY2X2Noa19hZGRyKG5ldCwgJnAtPnJhZGRyLCBOVUxMLCAwKSkpCiAJCQlyZXQgPSAxOwogCiAJCWlmIChsZGV2KQpAQCAtNjgzLDcgKzY5OCw4IEBACiAKIAlyZWFkX2xvY2soJmlwNl90bmxfbG9jayk7CiAKLQlpZiAoKHQgPSBpcDZfdG5sX2xvb2t1cCgmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyKSkgIT0gTlVMTCkgeworCWlmICgodCA9IGlwNl90bmxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCAmaXB2NmgtPnNhZGRyLAorCQkJCQkmaXB2NmgtPmRhZGRyKSkgIT0gTlVMTCkgewogCQlpZiAodC0+cGFybXMucHJvdG8gIT0gaXBwcm90byAmJiB0LT5wYXJtcy5wcm90byAhPSAwKSB7CiAJCQlyZWFkX3VubG9jaygmaXA2X3RubF9sb2NrKTsKIAkJCWdvdG8gZGlzY2FyZDsKQEAgLTc4MSwxOSArNzk3LDIwIEBACiB7CiAJc3RydWN0IGlwNl90bmxfcGFybSAqcCA9ICZ0LT5wYXJtczsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHQtPmRldik7CiAKIAlpZiAocC0+ZmxhZ3MgJiBJUDZfVE5MX0ZfQ0FQX1hNSVQpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYgPSBOVUxMOwogCiAJCWlmIChwLT5saW5rKQotCQkJbGRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBwLT5saW5rKTsKKwkJCWxkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgcC0+bGluayk7CiAKLQkJaWYgKHVubGlrZWx5KCFpcHY2X2Noa19hZGRyKCZpbml0X25ldCwgJnAtPmxhZGRyLCBsZGV2LCAwKSkpCisJCWlmICh1bmxpa2VseSghaXB2Nl9jaGtfYWRkcihuZXQsICZwLT5sYWRkciwgbGRldiwgMCkpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICIlcyB4bWl0OiBMb2NhbCBhZGRyZXNzIG5vdCB5ZXQgY29uZmlndXJlZCFcbiIsCiAJCQkgICAgICAgcC0+bmFtZSk7CiAJCWVsc2UgaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZwLT5yYWRkcikgJiYKLQkJCSB1bmxpa2VseShpcHY2X2Noa19hZGRyKCZpbml0X25ldCwgJnAtPnJhZGRyLCBOVUxMLCAwKSkpCisJCQkgdW5saWtlbHkoaXB2Nl9jaGtfYWRkcihuZXQsICZwLT5yYWRkciwgTlVMTCwgMCkpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICIlcyB4bWl0OiBSb3V0aW5nIGxvb3AhICIKIAkJCSAgICAgICAiUmVtb3RlIGFkZHJlc3MgZm91bmQgb24gdGhpcyBub2RlIVxuIiwKQEAgLTg0Niw3ICs4NjMsNyBAQAogCWlmICgoZHN0ID0gaXA2X3RubF9kc3RfY2hlY2sodCkpICE9IE5VTEwpCiAJCWRzdF9ob2xkKGRzdCk7CiAJZWxzZSB7Ci0JCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoTlVMTCwgZmwpOworCQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoZGV2KSwgTlVMTCwgZmwpOwogCiAJCWlmIChkc3QtPmVycm9yIHx8IHhmcm1fbG9va3VwKCZkc3QsIGZsLCBOVUxMLCAwKSA8IDApCiAJCQlnb3RvIHR4X2Vycl9saW5rX2ZhaWx1cmU7CkBAIC0xMTExLDcgKzExMjgsOCBAQAogCQlpbnQgc3RyaWN0ID0gKGlwdjZfYWRkcl90eXBlKCZwLT5yYWRkcikgJgogCQkJICAgICAgKElQVjZfQUREUl9NVUxUSUNBU1R8SVBWNl9BRERSX0xJTktMT0NBTCkpOwogCi0JCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBydDZfbG9va3VwKCZwLT5yYWRkciwgJnAtPmxhZGRyLAorCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gcnQ2X2xvb2t1cChkZXZfbmV0KGRldiksCisJCQkJCQkgJnAtPnJhZGRyLCAmcC0+bGFkZHIsCiAJCQkJCQkgcC0+bGluaywgc3RyaWN0KTsKIAogCQlpZiAocnQgPT0gTlVMTCkKQEAgLTExOTAsMTUgKzEyMDgsMTcgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaXA2X3RubF9wYXJtIHA7CiAJc3RydWN0IGlwNl90bmwgKnQgPSBOVUxMOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwNl90bmxfbmV0X2lkKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0VUVFVOTkVMOgotCQlpZiAoZGV2ID09IGlwNl9mYl90bmxfZGV2KSB7CisJCWlmIChkZXYgPT0gaXA2bi0+ZmJfdG5sX2RldikgewogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mIChwKSkpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdCA9IGlwNl90bmxfbG9jYXRlKCZwLCAwKTsKKwkJCXQgPSBpcDZfdG5sX2xvY2F0ZShuZXQsICZwLCAwKTsKIAkJfQogCQlpZiAodCA9PSBOVUxMKQogCQkJdCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMjE5LDggKzEyMzksOCBAQAogCQlpZiAocC5wcm90byAhPSBJUFBST1RPX0lQVjYgJiYgcC5wcm90byAhPSBJUFBST1RPX0lQSVAgJiYKIAkJICAgIHAucHJvdG8gIT0gMCkKIAkJCWJyZWFrOwotCQl0ID0gaXA2X3RubF9sb2NhdGUoJnAsIGNtZCA9PSBTSU9DQUREVFVOTkVMKTsKLQkJaWYgKGRldiAhPSBpcDZfZmJfdG5sX2RldiAmJiBjbWQgPT0gU0lPQ0NIR1RVTk5FTCkgeworCQl0ID0gaXA2X3RubF9sb2NhdGUobmV0LCAmcCwgY21kID09IFNJT0NBRERUVU5ORUwpOworCQlpZiAoZGV2ICE9IGlwNm4tPmZiX3RubF9kZXYgJiYgY21kID09IFNJT0NDSEdUVU5ORUwpIHsKIAkJCWlmICh0ICE9IE5VTEwpIHsKIAkJCQlpZiAodC0+ZGV2ICE9IGRldikgewogCQkJCQllcnIgPSAtRUVYSVNUOwpAQCAtMTIyOSw5ICsxMjQ5LDkgQEAKIAkJCX0gZWxzZQogCQkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JCQlpcDZfdG5sX3VubGluayh0KTsKKwkJCWlwNl90bmxfdW5saW5rKGlwNm4sIHQpOwogCQkJZXJyID0gaXA2X3RubF9jaGFuZ2UodCwgJnApOwotCQkJaXA2X3RubF9saW5rKHQpOworCQkJaXA2X3RubF9saW5rKGlwNm4sIHQpOwogCQkJbmV0ZGV2X3N0YXRlX2NoYW5nZShkZXYpOwogCQl9CiAJCWlmICh0KSB7CkBAIC0xMjQ3LDE1ICsxMjY3LDE1IEBACiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCWJyZWFrOwogCi0JCWlmIChkZXYgPT0gaXA2X2ZiX3RubF9kZXYpIHsKKwkJaWYgKGRldiA9PSBpcDZuLT5mYl90bmxfZGV2KSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mIChwKSkpCiAJCQkJYnJlYWs7CiAJCQllcnIgPSAtRU5PRU5UOwotCQkJaWYgKCh0ID0gaXA2X3RubF9sb2NhdGUoJnAsIDApKSA9PSBOVUxMKQorCQkJaWYgKCh0ID0gaXA2X3RubF9sb2NhdGUobmV0LCAmcCwgMCkpID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCQllcnIgPSAtRVBFUk07Ci0JCQlpZiAodC0+ZGV2ID09IGlwNl9mYl90bmxfZGV2KQorCQkJaWYgKHQtPmRldiA9PSBpcDZuLT5mYl90bmxfZGV2KQogCQkJCWJyZWFrOwogCQkJZGV2ID0gdC0+ZGV2OwogCQl9CkBAIC0xMzIzLDYgKzEzNDMsNyBAQAogCWRldi0+bXR1ID0gRVRIX0RBVEFfTEVOIC0gc2l6ZW9mIChzdHJ1Y3QgaXB2Nmhkcik7CiAJZGV2LT5mbGFncyB8PSBJRkZfTk9BUlA7CiAJZGV2LT5hZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIH0KIAogCkBAIC0xMzY0LDEwICsxMzg1LDEzIEBACiBpcDZfZmJfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwNl90bmxfbmV0X2lkKTsKKwogCWlwNl90bmxfZGV2X2luaXRfZ2VuKGRldik7CiAJdC0+cGFybXMucHJvdG8gPSBJUFBST1RPX0lQVjY7CiAJZGV2X2hvbGQoZGV2KTsKLQl0bmxzX3djWzBdID0gdDsKKwlpcDZuLT50bmxzX3djWzBdID0gdDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4Myw2ICsxNDA3LDc4IEBACiAJLnByaW9yaXR5CT0JMSwKIH07CiAKK3N0YXRpYyB2b2lkIGlwNl90bmxfZGVzdHJveV90dW5uZWxzKHN0cnVjdCBpcDZfdG5sX25ldCAqaXA2bikKK3sKKwlpbnQgaDsKKwlzdHJ1Y3QgaXA2X3RubCAqdDsKKworCWZvciAoaCA9IDA7IGggPCBIQVNIX1NJWkU7IGgrKykgeworCQl3aGlsZSAoKHQgPSBpcDZuLT50bmxzX3JfbFtoXSkgIT0gTlVMTCkKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHQtPmRldik7CisJfQorCisJdCA9IGlwNm4tPnRubHNfd2NbMF07CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodC0+ZGV2KTsKK30KKworc3RhdGljIGludCBpcDZfdG5sX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpcDZfdG5sX25ldCAqaXA2bjsKKworCWVyciA9IC1FTk9NRU07CisJaXA2biA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcDZfdG5sX25ldCksIEdGUF9LRVJORUwpOworCWlmIChpcDZuID09IE5VTEwpCisJCWdvdG8gZXJyX2FsbG9jOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgaXA2X3RubF9uZXRfaWQsIGlwNm4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9hc3NpZ247CisKKwlpcDZuLT50bmxzWzBdID0gaXA2bi0+dG5sc193YzsKKwlpcDZuLT50bmxzWzFdID0gaXA2bi0+dG5sc19yX2w7CisKKwllcnIgPSAtRU5PTUVNOworCWlwNm4tPmZiX3RubF9kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBpcDZfdG5sKSwgImlwNnRubDAiLAorCQkJCSAgICAgIGlwNl90bmxfZGV2X3NldHVwKTsKKworCWlmICghaXA2bi0+ZmJfdG5sX2RldikKKwkJZ290byBlcnJfYWxsb2NfZGV2OworCisJaXA2bi0+ZmJfdG5sX2Rldi0+aW5pdCA9IGlwNl9mYl90bmxfZGV2X2luaXQ7CisJZGV2X25ldF9zZXQoaXA2bi0+ZmJfdG5sX2RldiwgbmV0KTsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihpcDZuLT5mYl90bmxfZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3RlcjoKKwlmcmVlX25ldGRldihpcDZuLT5mYl90bmxfZGV2KTsKK2Vycl9hbGxvY19kZXY6CisJLyogbm90aGluZyAqLworZXJyX2Fzc2lnbjoKKwlrZnJlZShpcDZuKTsKK2Vycl9hbGxvYzoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpcDZfdG5sX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm47CisKKwlpcDZuID0gbmV0X2dlbmVyaWMobmV0LCBpcDZfdG5sX25ldF9pZCk7CisJcnRubF9sb2NrKCk7CisJaXA2X3RubF9kZXN0cm95X3R1bm5lbHMoaXA2bik7CisJcnRubF91bmxvY2soKTsKKwlrZnJlZShpcDZuKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZfdG5sX25ldF9vcHMgPSB7CisJLmluaXQgPSBpcDZfdG5sX2luaXRfbmV0LAorCS5leGl0ID0gaXA2X3RubF9leGl0X25ldCwKK307CisKIC8qKgogICogaXA2X3R1bm5lbF9pbml0IC0gcmVnaXN0ZXIgcHJvdG9jb2wgYW5kIHJlc2VydmUgbmVlZGVkIHJlc291cmNlcwogICoKQEAgLTE0MDQsMjEgKzE1MDAsMTIgQEAKIAkJZXJyID0gLUVBR0FJTjsKIAkJZ290byB1bnJlZ19pcDRpcDY7CiAJfQotCWlwNl9mYl90bmxfZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaXA2X3RubCksICJpcDZ0bmwwIiwKLQkJCQkgICAgICBpcDZfdG5sX2Rldl9zZXR1cCk7CiAKLQlpZiAoIWlwNl9mYl90bmxfZGV2KSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JaXA2X2ZiX3RubF9kZXYtPmluaXQgPSBpcDZfZmJfdG5sX2Rldl9pbml0OwotCi0JaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYoaXA2X2ZiX3RubF9kZXYpKSkgewotCQlmcmVlX25ldGRldihpcDZfZmJfdG5sX2Rldik7Ci0JCWdvdG8gZmFpbDsKLQl9CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJmlwNl90bmxfbmV0X2lkLCAmaXA2X3RubF9uZXRfb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcGVybmV0OwogCXJldHVybiAwOwotZmFpbDoKK2Vycl9wZXJuZXQ6CiAJeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoJmlwNmlwNl9oYW5kbGVyLCBBRl9JTkVUNik7CiB1bnJlZ19pcDRpcDY6CiAJeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoJmlwNGlwNl9oYW5kbGVyLCBBRl9JTkVUKTsKQEAgLTE0MjYsMjAgKzE1MTMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBpcDZfdG5sX2Rlc3Ryb3lfdHVubmVscyh2b2lkKQotewotCWludCBoOwotCXN0cnVjdCBpcDZfdG5sICp0OwotCi0JZm9yIChoID0gMDsgaCA8IEhBU0hfU0laRTsgaCsrKSB7Ci0JCXdoaWxlICgodCA9IHRubHNfcl9sW2hdKSAhPSBOVUxMKQotCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UodC0+ZGV2KTsKLQl9Ci0KLQl0ID0gdG5sc193Y1swXTsKLQl1bnJlZ2lzdGVyX25ldGRldmljZSh0LT5kZXYpOwotfQotCiAvKioKICAqIGlwNl90dW5uZWxfY2xlYW51cCAtIGZyZWUgcmVzb3VyY2VzIGFuZCB1bnJlZ2lzdGVyIHByb3RvY29sCiAgKiovCkBAIC0xNDUyLDkgKzE1MjUsNyBAQAogCWlmICh4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmaXA2aXA2X2hhbmRsZXIsIEFGX0lORVQ2KSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaXA2X3R1bm5lbCBjbG9zZTogY2FuJ3QgZGVyZWdpc3RlciBpcDZpcDZcbiIpOwogCi0JcnRubF9sb2NrKCk7Ci0JaXA2X3RubF9kZXN0cm95X3R1bm5lbHMoKTsKLQlydG5sX3VubG9jaygpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoaXA2X3RubF9uZXRfaWQsICZpcDZfdG5sX25ldF9vcHMpOwogfQogCiBtb2R1bGVfaW5pdChpcDZfdHVubmVsX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjNmUzMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTAsMCArMSwxNjQzIEBACisvKgorICoJTGludXggSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBzdXBwb3J0IGZvciBCU0QgcGltNnNkCisgKglCYXNlZCBvbiBuZXQvaXB2NC9pcG1yLmMuCisgKgorICoJKGMpIDIwMDQgTWlja2FlbCBIb2VyZHQsIDxob2VyZHRAY2xhcmluZXQudS1zdHJhc2JnLmZyPgorICoJCUxTSUlUIExhYm9yYXRvcnksIFN0cmFzYm91cmcsIEZyYW5jZQorICoJKGMpIDIwMDQgSmVhbi1QaGlsaXBwZSBBbmRyaW90LCA8amVhbi1waGlsaXBwZS5hbmRyaW90QDZXSU5ELmNvbT4KKyAqCQk2V0lORCwgUGFyaXMsIEZyYW5jZQorICoJQ29weXJpZ2h0IChDKTIwMDcsMjAwOCBVU0FHSS9XSURFIFByb2plY3QKKyAqCQlZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9yYXcuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisKKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pcDZfcm91dGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tcm91dGU2Lmg+CisjaW5jbHVkZSA8bGludXgvcGltLmg+CisjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KKworc3RydWN0IHNvY2sgKm1yb3V0ZTZfc29ja2V0OworCisKKy8qIEJpZyBsb2NrLCBwcm90ZWN0aW5nIHZpZiB0YWJsZSwgbXJ0IGNhY2hlIGFuZCBtcm91dGUgc29ja2V0IHN0YXRlLgorICAgTm90ZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzZW1hcGhvcmVkIHZpYSBydG5sX2xvY2suCisgKi8KKworc3RhdGljIERFRklORV9SV0xPQ0sobXJ0X2xvY2spOworCisvKgorICoJTXVsdGljYXN0IHJvdXRlciBjb250cm9sIHZhcmlhYmxlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgbWlmX2RldmljZSB2aWY2X3RhYmxlW01BWE1JRlNdOwkJLyogRGV2aWNlcyAJCSovCitzdGF0aWMgaW50IG1heHZpZjsKKworI2RlZmluZSBNSUZfRVhJU1RTKGlkeCkgKHZpZjZfdGFibGVbaWR4XS5kZXYgIT0gTlVMTCkKKworc3RhdGljIGludCBtcm91dGVfZG9fYXNzZXJ0OwkJCQkvKiBTZXQgaW4gUElNIGFzc2VydAkqLworI2lmZGVmIENPTkZJR19JUFY2X1BJTVNNX1YyCitzdGF0aWMgaW50IG1yb3V0ZV9kb19waW07CisjZWxzZQorI2RlZmluZSBtcm91dGVfZG9fcGltIDAKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKm1mYzZfY2FjaGVfYXJyYXlbTUZDNl9MSU5FU107CS8qIEZvcndhcmRpbmcgY2FjaGUJKi8KKworc3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICptZmNfdW5yZXNfcXVldWU7CQkvKiBRdWV1ZSBvZiB1bnJlc29sdmVkIGVudHJpZXMgKi8KK3N0YXRpYyBhdG9taWNfdCBjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbjsJCS8qIFNpemUgb2YgdW5yZXNvbHZlZAkqLworCisvKiBTcGVjaWFsIHNwaW5sb2NrIGZvciBxdWV1ZSBvZiB1bnJlc29sdmVkIGVudHJpZXMgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZjX3VucmVzX2xvY2spOworCisvKiBXZSByZXR1cm4gdG8gb3JpZ2luYWwgQWxhbidzIHNjaGVtZS4gSGFzaCB0YWJsZSBvZiByZXNvbHZlZAorICAgZW50cmllcyBpcyBjaGFuZ2VkIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0IGFuZCBwcm90ZWN0ZWQKKyAgIHdpdGggd2VhayBsb2NrIG1ydF9sb2NrLiBRdWV1ZSBvZiB1bnJlc29sdmVkIGVudHJpZXMgaXMgcHJvdGVjdGVkCisgICB3aXRoIHN0cm9uZyBzcGlubG9jayBtZmNfdW5yZXNfbG9jay4KKworICAgSW4gdGhpcyBjYXNlIGRhdGEgcGF0aCBpcyBmcmVlIG9mIGV4Y2x1c2l2ZSBsb2NrcyBhdCBhbGwuCisgKi8KKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBpbnQgaXA2X21yX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mYzZfY2FjaGUgKmNhY2hlKTsKK3N0YXRpYyBpbnQgaXA2bXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBza19idWZmICpwa3QsIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KTsKK3N0YXRpYyBpbnQgaXA2bXJfZmlsbF9tcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mYzZfY2FjaGUgKmMsIHN0cnVjdCBydG1zZyAqcnRtKTsKKworI2lmZGVmIENPTkZJR19JUFY2X1BJTVNNX1YyCitzdGF0aWMgc3RydWN0IGluZXQ2X3Byb3RvY29sIHBpbTZfcHJvdG9jb2w7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGlwbXJfZXhwaXJlX3RpbWVyOworCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCitzdHJ1Y3QgaXBtcl9tZmNfaXRlciB7CisJc3RydWN0IG1mYzZfY2FjaGUgKipjYWNoZTsKKwlpbnQgY3Q7Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXBtcl9tZmNfc2VxX2lkeChzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IG1mYzZfY2FjaGUgKm1mYzsKKworCWl0LT5jYWNoZSA9IG1mYzZfY2FjaGVfYXJyYXk7CisJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJZm9yIChpdC0+Y3QgPSAwOyBpdC0+Y3QgPCBBUlJBWV9TSVpFKG1mYzZfY2FjaGVfYXJyYXkpOyBpdC0+Y3QrKykKKwkJZm9yIChtZmMgPSBtZmM2X2NhY2hlX2FycmF5W2l0LT5jdF07IG1mYzsgbWZjID0gbWZjLT5uZXh0KQorCQkJaWYgKHBvcy0tID09IDApCisJCQkJcmV0dXJuIG1mYzsKKwlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJaXQtPmNhY2hlID0gJm1mY191bnJlc19xdWV1ZTsKKwlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwlmb3IgKG1mYyA9IG1mY191bnJlc19xdWV1ZTsgbWZjOyBtZmMgPSBtZmMtPm5leHQpCisJCWlmIChwb3MtLSA9PSAwKQorCQkJcmV0dXJuIG1mYzsKKwlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOworCisJaXQtPmNhY2hlID0gTlVMTDsKKwlyZXR1cm4gTlVMTDsKK30KKworCisKKworLyoKKyAqCVRoZSAvcHJvYyBpbnRlcmZhY2VzIHRvIG11bHRpY2FzdCByb3V0aW5nIC9wcm9jL2lwNl9tcl9jYWNoZSAvcHJvYy9pcDZfbXJfdmlmCisgKi8KKworc3RydWN0IGlwbXJfdmlmX2l0ZXIgeworCWludCBjdDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlmX2RldmljZSAqaXA2bXJfdmlmX3NlcV9pZHgoc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIsCisJCQkJCSAgICBsb2ZmX3QgcG9zKQoreworCWZvciAoaXRlci0+Y3QgPSAwOyBpdGVyLT5jdCA8IG1heHZpZjsgKytpdGVyLT5jdCkgeworCQlpZiAoIU1JRl9FWElTVFMoaXRlci0+Y3QpKQorCQkJY29udGludWU7CisJCWlmIChwb3MtLSA9PSAwKQorCQkJcmV0dXJuICZ2aWY2X3RhYmxlW2l0ZXItPmN0XTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICppcDZtcl92aWZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKG1ydF9sb2NrKQoreworCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCXJldHVybiAoKnBvcyA/IGlwNm1yX3ZpZl9zZXFfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCisJCTogU0VRX1NUQVJUX1RPS0VOKTsKK30KKworc3RhdGljIHZvaWQgKmlwNm1yX3ZpZl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIgPSBzZXEtPnByaXZhdGU7CisKKwkrKypwb3M7CisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlyZXR1cm4gaXA2bXJfdmlmX3NlcV9pZHgoaXRlciwgMCk7CisKKwl3aGlsZSAoKytpdGVyLT5jdCA8IG1heHZpZikgeworCQlpZiAoIU1JRl9FWElTVFMoaXRlci0+Y3QpKQorCQkJY29udGludWU7CisJCXJldHVybiAmdmlmNl90YWJsZVtpdGVyLT5jdF07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpcDZtcl92aWZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcyhtcnRfbG9jaykKK3sKKwlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworfQorCitzdGF0aWMgaW50IGlwNm1yX3ZpZl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKKwkJc2VxX3B1dHMoc2VxLAorCQkJICJJbnRlcmZhY2UgICAgICBCeXRlc0luICBQa3RzSW4gIEJ5dGVzT3V0IFBrdHNPdXQgRmxhZ3NcbiIpOworCX0gZWxzZSB7CisJCWNvbnN0IHN0cnVjdCBtaWZfZGV2aWNlICp2aWYgPSB2OworCQljb25zdCBjaGFyICpuYW1lID0gdmlmLT5kZXYgPyB2aWYtPmRldi0+bmFtZSA6ICJub25lIjsKKworCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICIlMlpkICUtMTBzICU4bGQgJTdsZCAgJThsZCAlN2xkICUwNVhcbiIsCisJCQkgICB2aWYgLSB2aWY2X3RhYmxlLAorCQkJICAgbmFtZSwgdmlmLT5ieXRlc19pbiwgdmlmLT5wa3RfaW4sCisJCQkgICB2aWYtPmJ5dGVzX291dCwgdmlmLT5wa3Rfb3V0LAorCQkJICAgdmlmLT5mbGFncyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwNm1yX3ZpZl9zZXFfb3BzID0geworCS5zdGFydCA9IGlwNm1yX3ZpZl9zZXFfc3RhcnQsCisJLm5leHQgID0gaXA2bXJfdmlmX3NlcV9uZXh0LAorCS5zdG9wICA9IGlwNm1yX3ZpZl9zZXFfc3RvcCwKKwkuc2hvdyAgPSBpcDZtcl92aWZfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IGlwNm1yX3ZpZl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZpcDZtcl92aWZfc2VxX29wcywKKwkJCQlzaXplb2Yoc3RydWN0IGlwbXJfdmlmX2l0ZXIpKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXA2bXJfdmlmX2ZvcHMgPSB7CisJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gaXA2bXJfdmlmX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgKmlwbXJfbWZjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuICgqcG9zID8gaXBtcl9tZmNfc2VxX2lkeChzZXEtPnByaXZhdGUsICpwb3MgLSAxKQorCQk6IFNFUV9TVEFSVF9UT0tFTik7Cit9CisKK3N0YXRpYyB2b2lkICppcG1yX21mY19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IG1mYzZfY2FjaGUgKm1mYyA9IHY7CisJc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0ID0gc2VxLT5wcml2YXRlOworCisJKysqcG9zOworCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlyZXR1cm4gaXBtcl9tZmNfc2VxX2lkeChzZXEtPnByaXZhdGUsIDApOworCisJaWYgKG1mYy0+bmV4dCkKKwkJcmV0dXJuIG1mYy0+bmV4dDsKKworCWlmIChpdC0+Y2FjaGUgPT0gJm1mY191bnJlc19xdWV1ZSkKKwkJZ290byBlbmRfb2ZfbGlzdDsKKworCUJVR19PTihpdC0+Y2FjaGUgIT0gbWZjNl9jYWNoZV9hcnJheSk7CisKKwl3aGlsZSAoKytpdC0+Y3QgPCBBUlJBWV9TSVpFKG1mYzZfY2FjaGVfYXJyYXkpKSB7CisJCW1mYyA9IG1mYzZfY2FjaGVfYXJyYXlbaXQtPmN0XTsKKwkJaWYgKG1mYykKKwkJCXJldHVybiBtZmM7CisJfQorCisJLyogZXhoYXVzdGVkIGNhY2hlX2FycmF5LCBzaG93IHVucmVzb2x2ZWQgKi8KKwlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCWl0LT5jYWNoZSA9ICZtZmNfdW5yZXNfcXVldWU7CisJaXQtPmN0ID0gMDsKKworCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOworCW1mYyA9IG1mY191bnJlc19xdWV1ZTsKKwlpZiAobWZjKQorCQlyZXR1cm4gbWZjOworCisgZW5kX29mX2xpc3Q6CisJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwlpdC0+Y2FjaGUgPSBOVUxMOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGlwbXJfbWZjX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBpcG1yX21mY19pdGVyICppdCA9IHNlcS0+cHJpdmF0ZTsKKworCWlmIChpdC0+Y2FjaGUgPT0gJm1mY191bnJlc19xdWV1ZSkKKwkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwllbHNlIGlmIChpdC0+Y2FjaGUgPT0gbWZjNl9jYWNoZV9hcnJheSkKKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKK30KKworc3RhdGljIGludCBpcG1yX21mY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlpbnQgbjsKKworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgeworCQlzZXFfcHV0cyhzZXEsCisJCQkgIkdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKwkJCSAiT3JpZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCQkJICJJaWYgICAgICBQa3RzICBCeXRlcyAgICAgV3JvbmcgIE9pZnNcbiIpOworCX0gZWxzZSB7CisJCWNvbnN0IHN0cnVjdCBtZmM2X2NhY2hlICptZmMgPSB2OworCQljb25zdCBzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQgPSBzZXEtPnByaXZhdGU7CisKKwkJc2VxX3ByaW50ZihzZXEsCisJCQkgICBOSVA2X0ZNVCAiICIgTklQNl9GTVQgIiAlLTNkICU4bGQgJThsZCAlOGxkIiwKKwkJCSAgIE5JUDYobWZjLT5tZjZjX21jYXN0Z3JwKSwgTklQNihtZmMtPm1mNmNfb3JpZ2luKSwKKwkJCSAgIG1mYy0+bWY2Y19wYXJlbnQsCisJCQkgICBtZmMtPm1mY191bi5yZXMucGt0LAorCQkJICAgbWZjLT5tZmNfdW4ucmVzLmJ5dGVzLAorCQkJICAgbWZjLT5tZmNfdW4ucmVzLndyb25nX2lmKTsKKworCQlpZiAoaXQtPmNhY2hlICE9ICZtZmNfdW5yZXNfcXVldWUpIHsKKwkJCWZvciAobiA9IG1mYy0+bWZjX3VuLnJlcy5taW52aWY7CisJCQkgICAgIG4gPCBtZmMtPm1mY191bi5yZXMubWF4dmlmOyBuKyspIHsKKwkJCQlpZiAoTUlGX0VYSVNUUyhuKSAmJgorCQkJCSAgICBtZmMtPm1mY191bi5yZXMudHRsc1tuXSA8IDI1NSkKKwkJCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJCQkgICAiICUyZDolLTNkIiwKKwkJCQkJCSAgIG4sIG1mYy0+bWZjX3VuLnJlcy50dGxzW25dKTsKKwkJCX0KKwkJfQorCQlzZXFfcHV0YyhzZXEsICdcbicpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpcG1yX21mY19zZXFfb3BzID0geworCS5zdGFydCA9IGlwbXJfbWZjX3NlcV9zdGFydCwKKwkubmV4dCAgPSBpcG1yX21mY19zZXFfbmV4dCwKKwkuc3RvcCAgPSBpcG1yX21mY19zZXFfc3RvcCwKKwkuc2hvdyAgPSBpcG1yX21mY19zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgaXBtcl9tZmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmaXBtcl9tZmNfc2VxX29wcywKKwkJCQlzaXplb2Yoc3RydWN0IGlwbXJfbWZjX2l0ZXIpKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXA2bXJfbWZjX2ZvcHMgPSB7CisJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gaXBtcl9tZmNfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVBWNl9QSU1TTV9WMgorc3RhdGljIGludCByZWdfdmlmX251bSA9IC0xOworCitzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHBpbXJlZ2hkciAqcGltOworCXN0cnVjdCBpcHY2aGRyICAgKmVuY2FwOworCXN0cnVjdCBuZXRfZGV2aWNlICAqcmVnX2RldiA9IE5VTEw7CisKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnBpbSkgKyBzaXplb2YoKmVuY2FwKSkpCisJCWdvdG8gZHJvcDsKKworCXBpbSA9IChzdHJ1Y3QgcGltcmVnaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwlpZiAocGltLT50eXBlICE9ICgoUElNX1ZFUlNJT04gPDwgNCkgfCBQSU1fUkVHSVNURVIpIHx8CisJICAgIChwaW0tPmZsYWdzICYgUElNX05VTExfUkVHSVNURVIpIHx8CisJICAgIChpcF9jb21wdXRlX2NzdW0oKHZvaWQgKilwaW0sIHNpemVvZigqcGltKSkgIT0gMCAmJgorCSAgICAgKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkpCisJCWdvdG8gZHJvcDsKKworCS8qIGNoZWNrIGlmIHRoZSBpbm5lciBwYWNrZXQgaXMgZGVzdGluZWQgdG8gbWNhc3QgZ3JvdXAgKi8KKwllbmNhcCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsKKwkJCQkgICBzaXplb2YoKnBpbSkpOworCisJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZlbmNhcC0+ZGFkZHIpIHx8CisJICAgIGVuY2FwLT5wYXlsb2FkX2xlbiA9PSAwIHx8CisJICAgIG50b2hzKGVuY2FwLT5wYXlsb2FkX2xlbikgKyBzaXplb2YoKnBpbSkgPiBza2ItPmxlbikKKwkJZ290byBkcm9wOworCisJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJaWYgKHJlZ192aWZfbnVtID49IDApCisJCXJlZ19kZXYgPSB2aWY2X3RhYmxlW3JlZ192aWZfbnVtXS5kZXY7CisJaWYgKHJlZ19kZXYpCisJCWRldl9ob2xkKHJlZ19kZXYpOworCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwlpZiAocmVnX2RldiA9PSBOVUxMKQorCQlnb3RvIGRyb3A7CisKKwlza2ItPm1hY19oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyOworCXNrYl9wdWxsKHNrYiwgKHU4ICopZW5jYXAgLSBza2ItPmRhdGEpOworCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCXNrYi0+ZGV2ID0gcmVnX2RldjsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCXNrYi0+aXBfc3VtbWVkID0gMDsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJZHN0X3JlbGVhc2Uoc2tiLT5kc3QpOworCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiluZXRkZXZfcHJpdihyZWdfZGV2KSktPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiluZXRkZXZfcHJpdihyZWdfZGV2KSktPnJ4X3BhY2tldHMrKzsKKwlza2ItPmRzdCA9IE5VTEw7CisJbmZfcmVzZXQoc2tiKTsKKwluZXRpZl9yeChza2IpOworCWRldl9wdXQocmVnX2Rldik7CisJcmV0dXJuIDA7CisgZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBwaW02X3Byb3RvY29sID0geworCS5oYW5kbGVyCT0JcGltNl9yY3YsCit9OworCisvKiBTZXJ2aWNlIHJvdXRpbmVzIGNyZWF0aW5nIHZpcnR1YWwgaW50ZXJmYWNlczogUElNUkVHICovCisKK3N0YXRpYyBpbnQgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJKChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKW5ldGRldl9wcml2KGRldikpLT50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopbmV0ZGV2X3ByaXYoZGV2KSktPnR4X3BhY2tldHMrKzsKKwlpcDZtcl9jYWNoZV9yZXBvcnQoc2tiLCByZWdfdmlmX251bSwgTVJUNk1TR19XSE9MRVBLVCk7CisJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpyZWdfdmlmX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiluZXRkZXZfcHJpdihkZXYpOworfQorCitzdGF0aWMgdm9pZCByZWdfdmlmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT50eXBlCQk9IEFSUEhSRF9QSU1SRUc7CisJZGV2LT5tdHUJCT0gMTUwMCAtIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgLSA4OworCWRldi0+ZmxhZ3MJCT0gSUZGX05PQVJQOworCWRldi0+aGFyZF9zdGFydF94bWl0CT0gcmVnX3ZpZl94bWl0OworCWRldi0+Z2V0X3N0YXRzCQk9IHJlZ192aWZfZ2V0X3N0YXRzOworCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcDZtcl9yZWdfdmlmKHZvaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKworCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpLCAicGltNnJlZyIsCisJCQkgICByZWdfdmlmX3NldHVwKTsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKGRldikpIHsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRldi0+aWZsaW5rID0gMDsKKworCWlmIChkZXZfb3BlbihkZXYpKQorCQlnb3RvIGZhaWx1cmU7CisKKwlyZXR1cm4gZGV2OworCitmYWlsdXJlOgorCS8qIGFsbG93IHRoZSByZWdpc3RlciB0byBiZSBjb21wbGV0ZWQgYmVmb3JlIHVucmVnaXN0ZXJpbmcuICovCisJcnRubF91bmxvY2soKTsKKwlydG5sX2xvY2soKTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworLyoKKyAqCURlbGV0ZSBhIFZJRiBlbnRyeQorICovCisKK3N0YXRpYyBpbnQgbWlmNl9kZWxldGUoaW50IHZpZmkpCit7CisJc3RydWN0IG1pZl9kZXZpY2UgKnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBtYXh2aWYpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCXYgPSAmdmlmNl90YWJsZVt2aWZpXTsKKworCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKKwlkZXYgPSB2LT5kZXY7CisJdi0+ZGV2ID0gTlVMTDsKKworCWlmICghZGV2KSB7CisJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJfQorCisjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjIKKwlpZiAodmlmaSA9PSByZWdfdmlmX251bSkKKwkJcmVnX3ZpZl9udW0gPSAtMTsKKyNlbmRpZgorCisJaWYgKHZpZmkgKyAxID09IG1heHZpZikgeworCQlpbnQgdG1wOworCQlmb3IgKHRtcCA9IHZpZmkgLSAxOyB0bXAgPj0gMDsgdG1wLS0pIHsKKwkJCWlmIChNSUZfRVhJU1RTKHRtcCkpCisJCQkJYnJlYWs7CisJCX0KKwkJbWF4dmlmID0gdG1wICsgMTsKKwl9CisKKwl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKKworCWRldl9zZXRfYWxsbXVsdGkoZGV2LCAtMSk7CisKKwlpZiAodi0+ZmxhZ3MgJiBNSUZGX1JFR0lTVEVSKQorCQl1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCisJZGV2X3B1dChkZXYpOworCXJldHVybiAwOworfQorCisvKiBEZXN0cm95IGFuIHVucmVzb2x2ZWQgY2FjaGUgZW50cnksIGtpbGxpbmcgcXVldWVkIHNrYnMKKyAgIGFuZCByZXBvcnRpbmcgZXJyb3IgdG8gbmV0bGluayByZWFkZXJzLgorICovCisKK3N0YXRpYyB2b2lkIGlwNm1yX2Rlc3Ryb3lfdW5yZXMoc3RydWN0IG1mYzZfY2FjaGUgKmMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWF0b21pY19kZWMoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKKworCXdoaWxlKChza2IgPSBza2JfZGVxdWV1ZSgmYy0+bWZjX3VuLnVucmVzLnVucmVzb2x2ZWQpKSAhPSBOVUxMKSB7CisJCWlmIChpcHY2X2hkcihza2IpLT52ZXJzaW9uID09IDApIHsKKwkJCXN0cnVjdCBubG1zZ2hkciAqbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CisJCQlubGgtPm5sbXNnX3R5cGUgPSBOTE1TR19FUlJPUjsKKwkJCW5saC0+bmxtc2dfbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3Qgbmxtc2dlcnIpKTsKKwkJCXNrYl90cmltKHNrYiwgbmxoLT5ubG1zZ19sZW4pOworCQkJKChzdHJ1Y3Qgbmxtc2dlcnIgKilOTE1TR19EQVRBKG5saCkpLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCQlydG5sX3VuaWNhc3Qoc2tiLCAmaW5pdF9uZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOworCQl9IGVsc2UKKwkJCWtmcmVlX3NrYihza2IpOworCX0KKworCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKK30KKworCisvKiBTaW5nbGUgdGltZXIgcHJvY2VzcyBmb3IgYWxsIHRoZSB1bnJlc29sdmVkIHF1ZXVlLiAqLworCitzdGF0aWMgdm9pZCBpcG1yX2RvX2V4cGlyZV9wcm9jZXNzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IDEwICogSFo7CisJc3RydWN0IG1mYzZfY2FjaGUgKmMsICoqY3A7CisKKwljcCA9ICZtZmNfdW5yZXNfcXVldWU7CisKKwl3aGlsZSAoKGMgPSAqY3ApICE9IE5VTEwpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoYy0+bWZjX3VuLnVucmVzLmV4cGlyZXMsIG5vdykpIHsKKwkJCS8qIG5vdCB5ZXQuLi4gKi8KKwkJCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSBjLT5tZmNfdW4udW5yZXMuZXhwaXJlcyAtIG5vdzsKKwkJCWlmIChpbnRlcnZhbCA8IGV4cGlyZXMpCisJCQkJZXhwaXJlcyA9IGludGVydmFsOworCQkJY3AgPSAmYy0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJKmNwID0gYy0+bmV4dDsKKwkJaXA2bXJfZGVzdHJveV91bnJlcyhjKTsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSkKKwkJbW9kX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lciwgamlmZmllcyArIGV4cGlyZXMpOworfQorCitzdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJaWYgKCFzcGluX3RyeWxvY2soJm1mY191bnJlc19sb2NrKSkgeworCQltb2RfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSkKKwkJaXBtcl9kb19leHBpcmVfcHJvY2VzcyhkdW1teSk7CisKKwlzcGluX3VubG9jaygmbWZjX3VucmVzX2xvY2spOworfQorCisvKiBGaWxsIG9pZnMgbGlzdC4gSXQgaXMgY2FsbGVkIHVuZGVyIHdyaXRlIGxvY2tlZCBtcnRfbG9jay4gKi8KKworc3RhdGljIHZvaWQgaXA2bXJfdXBkYXRlX3RocmVzaG9sZHMoc3RydWN0IG1mYzZfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBjaGFyICp0dGxzKQoreworCWludCB2aWZpOworCisJY2FjaGUtPm1mY191bi5yZXMubWludmlmID0gTUFYTUlGUzsKKwljYWNoZS0+bWZjX3VuLnJlcy5tYXh2aWYgPSAwOworCW1lbXNldChjYWNoZS0+bWZjX3VuLnJlcy50dGxzLCAyNTUsIE1BWE1JRlMpOworCisJZm9yICh2aWZpID0gMDsgdmlmaSA8IG1heHZpZjsgdmlmaSsrKSB7CisJCWlmIChNSUZfRVhJU1RTKHZpZmkpICYmIHR0bHNbdmlmaV0gJiYgdHRsc1t2aWZpXSA8IDI1NSkgeworCQkJY2FjaGUtPm1mY191bi5yZXMudHRsc1t2aWZpXSA9IHR0bHNbdmlmaV07CisJCQlpZiAoY2FjaGUtPm1mY191bi5yZXMubWludmlmID4gdmlmaSkKKwkJCQljYWNoZS0+bWZjX3VuLnJlcy5taW52aWYgPSB2aWZpOworCQkJaWYgKGNhY2hlLT5tZmNfdW4ucmVzLm1heHZpZiA8PSB2aWZpKQorCQkJCWNhY2hlLT5tZmNfdW4ucmVzLm1heHZpZiA9IHZpZmkgKyAxOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG1pZjZfYWRkKHN0cnVjdCBtaWY2Y3RsICp2aWZjLCBpbnQgbXJ0c29jaykKK3sKKwlpbnQgdmlmaSA9IHZpZmMtPm1pZjZjX21pZmk7CisJc3RydWN0IG1pZl9kZXZpY2UgKnYgPSAmdmlmNl90YWJsZVt2aWZpXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJLyogSXMgdmlmIGJ1c3kgPyAqLworCWlmIChNSUZfRVhJU1RTKHZpZmkpKQorCQlyZXR1cm4gLUVBRERSSU5VU0U7CisKKwlzd2l0Y2ggKHZpZmMtPm1pZjZjX2ZsYWdzKSB7CisjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjIKKwljYXNlIE1JRkZfUkVHSVNURVI6CisJCS8qCisJCSAqIFNwZWNpYWwgUHVycG9zZSBWSUYgaW4gUElNCisJCSAqIEFsbCB0aGUgcGFja2V0cyB3aWxsIGJlIHNlbnQgdG8gdGhlIGRhZW1vbgorCQkgKi8KKwkJaWYgKHJlZ192aWZfbnVtID49IDApCisJCQlyZXR1cm4gLUVBRERSSU5VU0U7CisJCWRldiA9IGlwNm1yX3JlZ192aWYoKTsKKwkJaWYgKCFkZXYpCisJCQlyZXR1cm4gLUVOT0JVRlM7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSAwOgorCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgdmlmYy0+bWlmNmNfcGlmaSk7CisJCWlmICghZGV2KQorCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCQlkZXZfcHV0KGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKKworCS8qCisJICoJRmlsbCBpbiB0aGUgVklGIHN0cnVjdHVyZXMKKwkgKi8KKwl2LT5yYXRlX2xpbWl0ID0gdmlmYy0+dmlmY19yYXRlX2xpbWl0OworCXYtPmZsYWdzID0gdmlmYy0+bWlmNmNfZmxhZ3M7CisJaWYgKCFtcnRzb2NrKQorCQl2LT5mbGFncyB8PSBWSUZGX1NUQVRJQzsKKwl2LT50aHJlc2hvbGQgPSB2aWZjLT52aWZjX3RocmVzaG9sZDsKKwl2LT5ieXRlc19pbiA9IDA7CisJdi0+Ynl0ZXNfb3V0ID0gMDsKKwl2LT5wa3RfaW4gPSAwOworCXYtPnBrdF9vdXQgPSAwOworCXYtPmxpbmsgPSBkZXYtPmlmaW5kZXg7CisJaWYgKHYtPmZsYWdzICYgTUlGRl9SRUdJU1RFUikKKwkJdi0+bGluayA9IGRldi0+aWZsaW5rOworCisJLyogQW5kIGZpbmlzaCB1cGRhdGUgd3JpdGluZyBjcml0aWNhbCBkYXRhICovCisJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOworCWRldl9ob2xkKGRldik7CisJdi0+ZGV2ID0gZGV2OworI2lmZGVmIENPTkZJR19JUFY2X1BJTVNNX1YyCisJaWYgKHYtPmZsYWdzICYgTUlGRl9SRUdJU1RFUikKKwkJcmVnX3ZpZl9udW0gPSB2aWZpOworI2VuZGlmCisJaWYgKHZpZmkgKyAxID4gbWF4dmlmKQorCQltYXh2aWYgPSB2aWZpICsgMTsKKwl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9maW5kKHN0cnVjdCBpbjZfYWRkciAqb3JpZ2luLCBzdHJ1Y3QgaW42X2FkZHIgKm1jYXN0Z3JwKQoreworCWludCBsaW5lID0gTUZDNl9IQVNIKG1jYXN0Z3JwLCBvcmlnaW4pOworCXN0cnVjdCBtZmM2X2NhY2hlICpjOworCisJZm9yIChjID0gbWZjNl9jYWNoZV9hcnJheVtsaW5lXTsgYzsgYyA9IGMtPm5leHQpIHsKKwkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmYy0+bWY2Y19vcmlnaW4sIG9yaWdpbikgJiYKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmYy0+bWY2Y19tY2FzdGdycCwgbWNhc3RncnApKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBjOworfQorCisvKgorICoJQWxsb2NhdGUgYSBtdWx0aWNhc3QgY2FjaGUgZW50cnkKKyAqLworc3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV9hbGxvYyhtcnRfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJYy0+bWZjX3VuLnJlcy5taW52aWYgPSBNQVhNSUZTOworCXJldHVybiBjOworfQorCitzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpCit7CisJc3RydWN0IG1mYzZfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX2FsbG9jKG1ydF9jYWNoZXAsIEdGUF9BVE9NSUMpOworCWlmIChjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZjLT5tZmNfdW4udW5yZXMudW5yZXNvbHZlZCk7CisJYy0+bWZjX3VuLnVucmVzLmV4cGlyZXMgPSBqaWZmaWVzICsgMTAgKiBIWjsKKwlyZXR1cm4gYzsKK30KKworLyoKKyAqCUEgY2FjaGUgZW50cnkgaGFzIGdvbmUgaW50byBhIHJlc29sdmVkIHN0YXRlIGZyb20gcXVldWVkCisgKi8KKworc3RhdGljIHZvaWQgaXA2bXJfY2FjaGVfcmVzb2x2ZShzdHJ1Y3QgbWZjNl9jYWNoZSAqdWMsIHN0cnVjdCBtZmM2X2NhY2hlICpjKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKgorCSAqCVBsYXkgdGhlIHBlbmRpbmcgZW50cmllcyB0aHJvdWdoIG91ciByb3V0ZXIKKwkgKi8KKworCXdoaWxlKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZ1Yy0+bWZjX3VuLnVucmVzLnVucmVzb2x2ZWQpKSkgeworCQlpZiAoaXB2Nl9oZHIoc2tiKS0+dmVyc2lvbiA9PSAwKSB7CisJCQlpbnQgZXJyOworCQkJc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKKworCQkJaWYgKGlwNm1yX2ZpbGxfbXJvdXRlKHNrYiwgYywgTkxNU0dfREFUQShubGgpKSA+IDApIHsKKwkJCQlubGgtPm5sbXNnX2xlbiA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1OCAqKW5saDsKKwkJCX0gZWxzZSB7CisJCQkJbmxoLT5ubG1zZ190eXBlID0gTkxNU0dfRVJST1I7CisJCQkJbmxoLT5ubG1zZ19sZW4gPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBubG1zZ2VycikpOworCQkJCXNrYl90cmltKHNrYiwgbmxoLT5ubG1zZ19sZW4pOworCQkJCSgoc3RydWN0IG5sbXNnZXJyICopTkxNU0dfREFUQShubGgpKS0+ZXJyb3IgPSAtRU1TR1NJWkU7CisJCQl9CisJCQllcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCAmaW5pdF9uZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOworCQl9IGVsc2UKKwkJCWlwNl9tcl9mb3J3YXJkKHNrYiwgYyk7CisJfQorfQorCisvKgorICoJQm91bmNlIGEgY2FjaGUgcXVlcnkgdXAgdG8gcGltNnNkLiBXZSBjb3VsZCB1c2UgbmV0bGluayBmb3IgdGhpcyBidXQgcGltNnNkCisgKglleHBlY3RzIHRoZSBmb2xsb3dpbmcgYml6YXJyZSBzY2hlbWUuCisgKgorICoJQ2FsbGVkIHVuZGVyIG1ydF9sb2NrLgorICovCisKK3N0YXRpYyBpbnQgaXA2bXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBza19idWZmICpwa3QsIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG1ydDZtc2cgKm1zZzsKKwlpbnQgcmV0OworCisjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjIKKwlpZiAoYXNzZXJ0ID09IE1SVDZNU0dfV0hPTEVQS1QpCisJCXNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHBrdCwgLXNrYl9uZXR3b3JrX29mZnNldChwa3QpCisJCQkJCQkrc2l6ZW9mKCptc2cpKTsKKwllbHNlCisjZW5kaWYKKwkJc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBzaXplb2YoKm1zZyksIEdGUF9BVE9NSUMpOworCisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PQlVGUzsKKworCS8qIEkgc3VwcG9zZSB0aGF0IGludGVybmFsIG1lc3NhZ2VzCisJICogZG8gbm90IHJlcXVpcmUgY2hlY2tzdW1zICovCisKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCisjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjIKKwlpZiAoYXNzZXJ0ID09IE1SVDZNU0dfV0hPTEVQS1QpIHsKKwkJLyogVWdseSwgYnV0IHdlIGhhdmUgbm8gY2hvaWNlIHdpdGggdGhpcyBpbnRlcmZhY2UuCisJCSAgIER1cGxpY2F0ZSBvbGQgaGVhZGVyLCBmaXggbGVuZ3RoIGV0Yy4KKwkJICAgQW5kIGFsbCB0aGlzIG9ubHkgdG8gbWFuZ2xlIG1zZy0+aW02X21zZ3R5cGUgYW5kCisJCSAgIHRvIHNldCBtc2ctPmltNl9tYnogdG8gIm1ieiIgOi0pCisJCSAqLworCQlza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQocGt0KSk7CisKKwkJc2tiX3B1c2goc2tiLCBzaXplb2YoKm1zZykpOworCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOworCQltc2cgPSAoc3RydWN0IG1ydDZtc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOworCQltc2ctPmltNl9tYnogPSAwOworCQltc2ctPmltNl9tc2d0eXBlID0gTVJUNk1TR19XSE9MRVBLVDsKKwkJbXNnLT5pbTZfbWlmID0gcmVnX3ZpZl9udW07CisJCW1zZy0+aW02X3BhZCA9IDA7CisJCWlwdjZfYWRkcl9jb3B5KCZtc2ctPmltNl9zcmMsICZpcHY2X2hkcihwa3QpLT5zYWRkcik7CisJCWlwdjZfYWRkcl9jb3B5KCZtc2ctPmltNl9kc3QsICZpcHY2X2hkcihwa3QpLT5kYWRkcik7CisKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkvKgorCSAqCUNvcHkgdGhlIElQIGhlYWRlcgorCSAqLworCisJc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOworCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgaXB2Nl9oZHIocGt0KSwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CisKKwkvKgorCSAqCUFkZCBvdXIgaGVhZGVyCisJICovCisJc2tiX3B1dChza2IsIHNpemVvZigqbXNnKSk7CisJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwltc2cgPSAoc3RydWN0IG1ydDZtc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOworCisJbXNnLT5pbTZfbWJ6ID0gMDsKKwltc2ctPmltNl9tc2d0eXBlID0gYXNzZXJ0OworCW1zZy0+aW02X21pZiA9IG1pZmk7CisJbXNnLT5pbTZfcGFkID0gMDsKKwlpcHY2X2FkZHJfY29weSgmbXNnLT5pbTZfc3JjLCAmaXB2Nl9oZHIocGt0KS0+c2FkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZtc2ctPmltNl9kc3QsICZpcHY2X2hkcihwa3QpLT5kYWRkcik7CisKKwlza2ItPmRzdCA9IGRzdF9jbG9uZShwa3QtPmRzdCk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CisJfQorCisJaWYgKG1yb3V0ZTZfc29ja2V0ID09IE5VTEwpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICoJRGVsaXZlciB0byB1c2VyIHNwYWNlIG11bHRpY2FzdCByb3V0aW5nIGFsZ29yaXRobXMKKwkgKi8KKwlpZiAoKHJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihtcm91dGU2X3NvY2tldCwgc2tiKSkgPCAwKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcm91dGU2OiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXMuXG4iKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqCVF1ZXVlIGEgcGFja2V0IGZvciByZXNvbHV0aW9uLiBJdCBnZXRzIGxvY2tlZCBjYWNoZSBlbnRyeSEKKyAqLworCitzdGF0aWMgaW50CitpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1pZmlfdCBtaWZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBlcnI7CisJc3RydWN0IG1mYzZfY2FjaGUgKmM7CisKKwlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwlmb3IgKGMgPSBtZmNfdW5yZXNfcXVldWU7IGM7IGMgPSBjLT5uZXh0KSB7CisJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmMtPm1mNmNfbWNhc3RncnAsICZpcHY2X2hkcihza2IpLT5kYWRkcikgJiYKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmYy0+bWY2Y19vcmlnaW4sICZpcHY2X2hkcihza2IpLT5zYWRkcikpCisJCQlicmVhazsKKwl9CisKKwlpZiAoYyA9PSBOVUxMKSB7CisJCS8qCisJCSAqCUNyZWF0ZSBhIG5ldyBlbnRyeSBpZiBhbGxvd2FibGUKKwkJICovCisKKwkJaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgPj0gMTAgfHwKKwkJICAgIChjID0gaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXMoKSkgPT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm4gLUVOT0JVRlM7CisJCX0KKworCQkvKgorCQkgKglGaWxsIGluIHRoZSBuZXcgY2FjaGUgZW50cnkKKwkJICovCisJCWMtPm1mNmNfcGFyZW50ID0gLTE7CisJCWMtPm1mNmNfb3JpZ2luID0gaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CisJCWMtPm1mNmNfbWNhc3RncnAgPSBpcHY2X2hkcihza2IpLT5kYWRkcjsKKworCQkvKgorCQkgKglSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IHBpbTZzZAorCQkgKi8KKwkJaWYgKChlcnIgPSBpcDZtcl9jYWNoZV9yZXBvcnQoc2tiLCBtaWZpLCBNUlQ2TVNHX05PQ0FDSEUpKSA8IDApIHsKKwkJCS8qIElmIHRoZSByZXBvcnQgZmFpbGVkIHRocm93IHRoZSBjYWNoZSBlbnRyeQorCQkJICAgb3V0IC0gQnJhZCBQYXJrZXIKKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKworCQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJYXRvbWljX2luYygmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOworCQljLT5uZXh0ID0gbWZjX3VucmVzX3F1ZXVlOworCQltZmNfdW5yZXNfcXVldWUgPSBjOworCisJCWlwbXJfZG9fZXhwaXJlX3Byb2Nlc3MoMSk7CisJfQorCisJLyoKKwkgKglTZWUgaWYgd2UgY2FuIGFwcGVuZCB0aGUgcGFja2V0CisJICovCisJaWYgKGMtPm1mY191bi51bnJlcy51bnJlc29sdmVkLnFsZW4gPiAzKSB7CisJCWtmcmVlX3NrYihza2IpOworCQllcnIgPSAtRU5PQlVGUzsKKwl9IGVsc2UgeworCQlza2JfcXVldWVfdGFpbCgmYy0+bWZjX3VuLnVucmVzLnVucmVzb2x2ZWQsIHNrYik7CisJCWVyciA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICoJTUZDNiBjYWNoZSBtYW5pcHVsYXRpb24gYnkgdXNlciBzcGFjZQorICovCisKK3N0YXRpYyBpbnQgaXA2bXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbWY2Y2N0bCAqbWZjKQoreworCWludCBsaW5lOworCXN0cnVjdCBtZmM2X2NhY2hlICpjLCAqKmNwOworCisJbGluZSA9IE1GQzZfSEFTSCgmbWZjLT5tZjZjY19tY2FzdGdycC5zaW42X2FkZHIsICZtZmMtPm1mNmNjX29yaWdpbi5zaW42X2FkZHIpOworCisJZm9yIChjcCA9ICZtZmM2X2NhY2hlX2FycmF5W2xpbmVdOyAoYyA9ICpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgeworCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZjLT5tZjZjX29yaWdpbiwgJm1mYy0+bWY2Y2Nfb3JpZ2luLnNpbjZfYWRkcikgJiYKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmYy0+bWY2Y19tY2FzdGdycCwgJm1mYy0+bWY2Y2NfbWNhc3RncnAuc2luNl9hZGRyKSkgeworCQkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOworCQkJKmNwID0gYy0+bmV4dDsKKwkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOworCisJCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBpcDZtcl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CisJc3RydWN0IG1pZl9kZXZpY2UgKnY7CisJaW50IGN0OworCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWlmIChldmVudCAhPSBORVRERVZfVU5SRUdJU1RFUikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJdiA9ICZ2aWY2X3RhYmxlWzBdOworCWZvciAoY3QgPSAwOyBjdCA8IG1heHZpZjsgY3QrKywgdisrKSB7CisJCWlmICh2LT5kZXYgPT0gZGV2KQorCQkJbWlmNl9kZWxldGUoY3QpOworCX0KKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXA2X21yX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gaXA2bXJfZGV2aWNlX2V2ZW50Cit9OworCisvKgorICoJU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nCisgKi8KKwordm9pZCBfX2luaXQgaXA2X21yX2luaXQodm9pZCkKK3sKKwltcnRfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlwNl9tcnRfY2FjaGUiLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1mYzZfY2FjaGUpLAorCQkJCSAgICAgICAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJICAgICAgIE5VTEwpOworCWlmICghbXJ0X2NhY2hlcCkKKwkJcGFuaWMoImNhbm5vdCBhbGxvY2F0ZSBpcDZfbXJ0X2NhY2hlIik7CisKKwlzZXR1cF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIsIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIDApOworCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXA2X21yX25vdGlmaWVyKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwNl9tcl92aWYiLCAwLCAmaXA2bXJfdmlmX2ZvcHMpOworCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwNl9tcl9jYWNoZSIsIDAsICZpcDZtcl9tZmNfZm9wcyk7CisjZW5kaWYKK30KKworCitzdGF0aWMgaW50IGlwNm1yX21mY19hZGQoc3RydWN0IG1mNmNjdGwgKm1mYywgaW50IG1ydHNvY2spCit7CisJaW50IGxpbmU7CisJc3RydWN0IG1mYzZfY2FjaGUgKnVjLCAqYywgKipjcDsKKwl1bnNpZ25lZCBjaGFyIHR0bHNbTUFYTUlGU107CisJaW50IGk7CisKKwltZW1zZXQodHRscywgMjU1LCBNQVhNSUZTKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYTUlGUzsgaSsrKSB7CisJCWlmIChJRl9JU1NFVChpLCAmbWZjLT5tZjZjY19pZnNldCkpCisJCQl0dGxzW2ldID0gMTsKKworCX0KKworCWxpbmUgPSBNRkM2X0hBU0goJm1mYy0+bWY2Y2NfbWNhc3RncnAuc2luNl9hZGRyLCAmbWZjLT5tZjZjY19vcmlnaW4uc2luNl9hZGRyKTsKKworCWZvciAoY3AgPSAmbWZjNl9jYWNoZV9hcnJheVtsaW5lXTsgKGMgPSAqY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKKwkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmYy0+bWY2Y19vcmlnaW4sICZtZmMtPm1mNmNjX29yaWdpbi5zaW42X2FkZHIpICYmCisJCSAgICBpcHY2X2FkZHJfZXF1YWwoJmMtPm1mNmNfbWNhc3RncnAsICZtZmMtPm1mNmNjX21jYXN0Z3JwLnNpbjZfYWRkcikpCisJCQlicmVhazsKKwl9CisKKwlpZiAoYyAhPSBOVUxMKSB7CisJCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKKwkJYy0+bWY2Y19wYXJlbnQgPSBtZmMtPm1mNmNjX3BhcmVudDsKKwkJaXA2bXJfdXBkYXRlX3RocmVzaG9sZHMoYywgdHRscyk7CisJCWlmICghbXJ0c29jaykKKwkJCWMtPm1mY19mbGFncyB8PSBNRkNfU1RBVElDOworCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZtZmMtPm1mNmNjX21jYXN0Z3JwLnNpbjZfYWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJYyA9IGlwNm1yX2NhY2hlX2FsbG9jKCk7CisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljLT5tZjZjX29yaWdpbiA9IG1mYy0+bWY2Y2Nfb3JpZ2luLnNpbjZfYWRkcjsKKwljLT5tZjZjX21jYXN0Z3JwID0gbWZjLT5tZjZjY19tY2FzdGdycC5zaW42X2FkZHI7CisJYy0+bWY2Y19wYXJlbnQgPSBtZmMtPm1mNmNjX3BhcmVudDsKKwlpcDZtcl91cGRhdGVfdGhyZXNob2xkcyhjLCB0dGxzKTsKKwlpZiAoIW1ydHNvY2spCisJCWMtPm1mY19mbGFncyB8PSBNRkNfU1RBVElDOworCisJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOworCWMtPm5leHQgPSBtZmM2X2NhY2hlX2FycmF5W2xpbmVdOworCW1mYzZfY2FjaGVfYXJyYXlbbGluZV0gPSBjOworCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOworCisJLyoKKwkgKglDaGVjayB0byBzZWUgaWYgd2UgcmVzb2x2ZWQgYSBxdWV1ZWQgbGlzdC4gSWYgc28gd2UKKwkgKgluZWVkIHRvIHNlbmQgb24gdGhlIGZyYW1lcyBhbmQgdGlkeSB1cC4KKwkgKi8KKwlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwlmb3IgKGNwID0gJm1mY191bnJlc19xdWV1ZTsgKHVjID0gKmNwKSAhPSBOVUxMOworCSAgICAgY3AgPSAmdWMtPm5leHQpIHsKKwkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmdWMtPm1mNmNfb3JpZ2luLCAmYy0+bWY2Y19vcmlnaW4pICYmCisJCSAgICBpcHY2X2FkZHJfZXF1YWwoJnVjLT5tZjZjX21jYXN0Z3JwLCAmYy0+bWY2Y19tY2FzdGdycCkpIHsKKwkJCSpjcCA9IHVjLT5uZXh0OworCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSkKKwkJCQlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CisKKwlpZiAodWMpIHsKKwkJaXA2bXJfY2FjaGVfcmVzb2x2ZSh1YywgYyk7CisJCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCB1Yyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICoJQ2xvc2UgdGhlIG11bHRpY2FzdCBzb2NrZXQsIGFuZCBjbGVhciB0aGUgdmlmIHRhYmxlcyBldGMKKyAqLworCitzdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbnQgaTsKKworCS8qCisJICoJU2h1dCBkb3duIGFsbCBhY3RpdmUgdmlmIGVudHJpZXMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4dmlmOyBpKyspIHsKKwkJaWYgKCEodmlmNl90YWJsZVtpXS5mbGFncyAmIFZJRkZfU1RBVElDKSkKKwkJCW1pZjZfZGVsZXRlKGkpOworCX0KKworCS8qCisJICoJV2lwZSB0aGUgY2FjaGUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZmM2X2NhY2hlX2FycmF5KTsgaSsrKSB7CisJCXN0cnVjdCBtZmM2X2NhY2hlICpjLCAqKmNwOworCisJCWNwID0gJm1mYzZfY2FjaGVfYXJyYXlbaV07CisJCXdoaWxlICgoYyA9ICpjcCkgIT0gTlVMTCkgeworCQkJaWYgKGMtPm1mY19mbGFncyAmIE1GQ19TVEFUSUMpIHsKKwkJCQljcCA9ICZjLT5uZXh0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOworCQkJKmNwID0gYy0+bmV4dDsKKwkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOworCisJCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCX0KKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSAhPSAwKSB7CisJCXN0cnVjdCBtZmM2X2NhY2hlICpjOworCisJCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOworCQl3aGlsZSAobWZjX3VucmVzX3F1ZXVlICE9IE5VTEwpIHsKKwkJCWMgPSBtZmNfdW5yZXNfcXVldWU7CisJCQltZmNfdW5yZXNfcXVldWUgPSBjLT5uZXh0OworCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKworCQkJaXA2bXJfZGVzdHJveV91bnJlcyhjKTsKKworCQkJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXA2bXJfc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2spCit7CisJaW50IGVyciA9IDA7CisKKwlydG5sX2xvY2soKTsKKwl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7CisJaWYgKGxpa2VseShtcm91dGU2X3NvY2tldCA9PSBOVUxMKSkKKwkJbXJvdXRlNl9zb2NrZXQgPSBzazsKKwllbHNlCisJCWVyciA9IC1FQUREUklOVVNFOworCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOworCisJcnRubF91bmxvY2soKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbnQgZXJyID0gMDsKKworCXJ0bmxfbG9jaygpOworCWlmIChzayA9PSBtcm91dGU2X3NvY2tldCkgeworCQl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7CisJCW1yb3V0ZTZfc29ja2V0ID0gTlVMTDsKKwkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CisKKwkJbXJvdXRlX2NsZWFuX3RhYmxlcyhzayk7CisJfSBlbHNlCisJCWVyciA9IC1FQUNDRVM7CisJcnRubF91bmxvY2soKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKglTb2NrZXQgb3B0aW9ucyBhbmQgdmlydHVhbCBpbnRlcmZhY2UgbWFuaXB1bGF0aW9uLiBUaGUgd2hvbGUKKyAqCXZpcnR1YWwgaW50ZXJmYWNlIHN5c3RlbSBpcyBhIGNvbXBsZXRlIGhlYXAsIGJ1dCB1bmZvcnR1bmF0ZWx5CisgKgl0aGF0J3MgaG93IEJTRCBtcm91dGVkIGhhcHBlbnMgdG8gdGhpbmsuIE1heWJlIG9uZSBkYXkgd2l0aCBhIHByb3BlcgorICoJTU9TUEYvUElNIHJvdXRlciBzZXQgdXAgd2UgY2FuIGNsZWFuIHRoaXMgdXAuCisgKi8KKworaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCWludCByZXQ7CisJc3RydWN0IG1pZjZjdGwgdmlmOworCXN0cnVjdCBtZjZjY3RsIG1mYzsKKwltaWZpX3QgbWlmaTsKKworCWlmIChvcHRuYW1lICE9IE1SVDZfSU5JVCkgeworCQlpZiAoc2sgIT0gbXJvdXRlNl9zb2NrZXQgJiYgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIE1SVDZfSU5JVDoKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfUkFXIHx8CisJCSAgICBpbmV0X3NrKHNrKS0+bnVtICE9IElQUFJPVE9fSUNNUFY2KQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gaXA2bXJfc2tfaW5pdChzayk7CisKKwljYXNlIE1SVDZfRE9ORToKKwkJcmV0dXJuIGlwNm1yX3NrX2RvbmUoc2spOworCisJY2FzZSBNUlQ2X0FERF9NSUY6CisJCWlmIChvcHRsZW4gPCBzaXplb2YodmlmKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZpZiwgb3B0dmFsLCBzaXplb2YodmlmKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHZpZi5taWY2Y19taWZpID49IE1BWE1JRlMpCisJCQlyZXR1cm4gLUVORklMRTsKKwkJcnRubF9sb2NrKCk7CisJCXJldCA9IG1pZjZfYWRkKCZ2aWYsIHNrID09IG1yb3V0ZTZfc29ja2V0KTsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIHJldDsKKworCWNhc2UgTVJUNl9ERUxfTUlGOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKG1pZmlfdCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtaWZpLCBvcHR2YWwsIHNpemVvZihtaWZpX3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gbWlmNl9kZWxldGUobWlmaSk7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqCU1hbmlwdWxhdGUgdGhlIGZvcndhcmRpbmcgY2FjaGVzLiBUaGVzZSBsaXZlCisJICoJaW4gYSBzb3J0IG9mIGtlcm5lbC91c2VyIHN5bWJpb3Npcy4KKwkgKi8KKwljYXNlIE1SVDZfQUREX01GQzoKKwljYXNlIE1SVDZfREVMX01GQzoKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihtZmMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbWZjLCBvcHR2YWwsIHNpemVvZihtZmMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlydG5sX2xvY2soKTsKKwkJaWYgKG9wdG5hbWUgPT0gTVJUNl9ERUxfTUZDKQorCQkJcmV0ID0gaXA2bXJfbWZjX2RlbGV0ZSgmbWZjKTsKKwkJZWxzZQorCQkJcmV0ID0gaXA2bXJfbWZjX2FkZCgmbWZjLCBzayA9PSBtcm91dGU2X3NvY2tldCk7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqCUNvbnRyb2wgUElNIGFzc2VydCAodG8gYWN0aXZhdGUgcGltIHdpbGwgYWN0aXZhdGUgYXNzZXJ0KQorCSAqLworCWNhc2UgTVJUNl9BU1NFUlQ6CisJeworCQlpbnQgdjsKKwkJaWYgKGdldF91c2VyKHYsIChpbnQgX191c2VyICopb3B0dmFsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQltcm91dGVfZG9fYXNzZXJ0ID0gISF2OworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBDT05GSUdfSVBWNl9QSU1TTV9WMgorCWNhc2UgTVJUNl9QSU06CisJeworCQlpbnQgdjsKKwkJaWYgKGdldF91c2VyKHYsIChpbnQgX191c2VyICopb3B0dmFsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl2ID0gISF2OworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gMDsKKwkJaWYgKHYgIT0gbXJvdXRlX2RvX3BpbSkgeworCQkJbXJvdXRlX2RvX3BpbSA9IHY7CisJCQltcm91dGVfZG9fYXNzZXJ0ID0gdjsKKwkJCWlmIChtcm91dGVfZG9fcGltKQorCQkJCXJldCA9IGluZXQ2X2FkZF9wcm90b2NvbCgmcGltNl9wcm90b2NvbCwKKwkJCQkJCQkgSVBQUk9UT19QSU0pOworCQkJZWxzZQorCQkJCXJldCA9IGluZXQ2X2RlbF9wcm90b2NvbCgmcGltNl9wcm90b2NvbCwKKwkJCQkJCQkgSVBQUk9UT19QSU0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJfQorCQlydG5sX3VubG9jaygpOworCQlyZXR1cm4gcmV0OworCX0KKworI2VuZGlmCisJLyoKKwkgKglTcHVyaW91cyBjb21tYW5kLCBvciBNUlRfVkVSU0lPTiB3aGljaCB5b3UgY2Fubm90CisJICoJc2V0LgorCSAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJfQorfQorCisvKgorICoJR2V0c29jayBvcHQgc3VwcG9ydCBmb3IgdGhlIG11bHRpY2FzdCByb3V0aW5nIHN5c3RlbS4KKyAqLworCitpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkgIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpbnQgb2xyOworCWludCB2YWw7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIE1SVDZfVkVSU0lPTjoKKwkJdmFsID0gMHgwMzA1OworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSVBWNl9QSU1TTV9WMgorCWNhc2UgTVJUNl9QSU06CisJCXZhbCA9IG1yb3V0ZV9kb19waW07CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBNUlQ2X0FTU0VSVDoKKwkJdmFsID0gbXJvdXRlX2RvX2Fzc2VydDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwl9CisKKwlpZiAoZ2V0X3VzZXIob2xyLCBvcHRsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW9sciA9IG1pbl90KGludCwgb2xyLCBzaXplb2YoaW50KSk7CisJaWYgKG9sciA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB1dF91c2VyKG9sciwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZ2YWwsIG9scikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCisvKgorICoJVGhlIElQIG11bHRpY2FzdCBpb2N0bCBzdXBwb3J0IHJvdXRpbmVzLgorICovCisKK2ludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHNpb2Nfc2dfcmVxNiBzcjsKKwlzdHJ1Y3Qgc2lvY19taWZfcmVxNiB2cjsKKwlzdHJ1Y3QgbWlmX2RldmljZSAqdmlmOworCXN0cnVjdCBtZmM2X2NhY2hlICpjOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHRVRNSUZDTlRfSU42OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnZyLCBhcmcsIHNpemVvZih2cikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2ci5taWZpID49IG1heHZpZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJdmlmID0gJnZpZjZfdGFibGVbdnIubWlmaV07CisJCWlmIChNSUZfRVhJU1RTKHZyLm1pZmkpKSB7CisJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKKwkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKKwkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CisJCQl2ci5vYnl0ZXMgPSB2aWYtPmJ5dGVzX291dDsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdnIsIHNpemVvZih2cikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWNhc2UgU0lPQ0dFVFNHQ05UX0lONjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzciwgYXJnLCBzaXplb2Yoc3IpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCQljID0gaXA2bXJfY2FjaGVfZmluZCgmc3Iuc3JjLnNpbjZfYWRkciwgJnNyLmdycC5zaW42X2FkZHIpOworCQlpZiAoYykgeworCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CisJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKKwkJCXNyLndyb25nX2lmID0gYy0+bWZjX3VuLnJlcy53cm9uZ19pZjsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3IsIHNpemVvZihzcikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IGlwNm1yX2ZvcndhcmQyX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwgSVBTVEFUU19NSUJfT1VURk9SV0RBVEFHUkFNUyk7CisJcmV0dXJuIGRzdF9vdXRwdXQoc2tiKTsKK30KKworLyoKKyAqCVByb2Nlc3NpbmcgaGFuZGxlcnMgZm9yIGlwNm1yX2ZvcndhcmQKKyAqLworCitzdGF0aWMgaW50IGlwNm1yX2ZvcndhcmQyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmM2X2NhY2hlICpjLCBpbnQgdmlmaSkKK3sKKwlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CisJc3RydWN0IG1pZl9kZXZpY2UgKnZpZiA9ICZ2aWY2X3RhYmxlW3ZpZmldOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCXN0cnVjdCBmbG93aSBmbDsKKworCWlmICh2aWYtPmRldiA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlOworCisjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjIKKwlpZiAodmlmLT5mbGFncyAmIE1JRkZfUkVHSVNURVIpIHsKKwkJdmlmLT5wa3Rfb3V0Kys7CisJCXZpZi0+Ynl0ZXNfb3V0ICs9IHNrYi0+bGVuOworCQkoKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopbmV0ZGV2X3ByaXYodmlmLT5kZXYpKS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCSgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiluZXRkZXZfcHJpdih2aWYtPmRldikpLT50eF9wYWNrZXRzKys7CisJCWlwNm1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIE1SVDZNU0dfV0hPTEVQS1QpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKKwlpcHY2aCA9IGlwdjZfaGRyKHNrYik7CisKKwlmbCA9IChzdHJ1Y3QgZmxvd2kpIHsKKwkJLm9pZiA9IHZpZi0+bGluaywKKwkJLm5sX3UgPSB7IC5pcDZfdSA9CisJCQkJeyAuZGFkZHIgPSBpcHY2aC0+ZGFkZHIsIH0KKwkJfQorCX07CisKKwlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgTlVMTCwgJmZsKTsKKwlpZiAoIWRzdCkKKwkJZ290byBvdXRfZnJlZTsKKworCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsKKwlza2ItPmRzdCA9IGRzdDsKKworCS8qCisJICogUkZDMTU4NCB0ZWFjaGVzLCB0aGF0IERWTVJQL1BJTSByb3V0ZXIgbXVzdCBkZWxpdmVyIHBhY2tldHMgbG9jYWxseQorCSAqIG5vdCBvbmx5IGJlZm9yZSBmb3J3YXJkaW5nLCBidXQgYWZ0ZXIgZm9yd2FyZGluZyBvbiBhbGwgb3V0cHV0CisJICogaW50ZXJmYWNlcy4gSXQgaXMgY2xlYXIsIGlmIG1yb3V0ZXIgcnVucyBhIG11bHRpY2FzdGluZworCSAqIHByb2dyYW0sIGl0IHNob3VsZCByZWNlaXZlIHBhY2tldHMgbm90IGRlcGVuZGluZyB0byB3aGF0IGludGVyZmFjZQorCSAqIHByb2dyYW0gaXMgam9pbmVkLgorCSAqIElmIHdlIHdpbGwgbm90IG1ha2UgaXQsIHRoZSBwcm9ncmFtIHdpbGwgaGF2ZSB0byBqb2luIG9uIGFsbAorCSAqIGludGVyZmFjZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBtdWx0aWhvbWluZyBob3N0IChvciByb3V0ZXIsIGJ1dAorCSAqIG5vdCBtcm91dGVyKSBjYW5ub3Qgam9pbiB0byBtb3JlIHRoYW4gb25lIGludGVyZmFjZSAtIGl0IHdpbGwKKwkgKiByZXN1bHQgaW4gcmVjZWl2aW5nIG11bHRpcGxlIHBhY2tldHMuCisJICovCisJZGV2ID0gdmlmLT5kZXY7CisJc2tiLT5kZXYgPSBkZXY7CisJdmlmLT5wa3Rfb3V0Kys7CisJdmlmLT5ieXRlc19vdXQgKz0gc2tiLT5sZW47CisKKwkvKiBXZSBhcmUgYWJvdXQgdG8gd3JpdGUgKi8KKwkvKiBYWFg6IGV4dGVuc2lvbiBoZWFkZXJzPyAqLworCWlmIChza2JfY293KHNrYiwgc2l6ZW9mKCppcHY2aCkgKyBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlwdjZoID0gaXB2Nl9oZHIoc2tiKTsKKwlpcHY2aC0+aG9wX2xpbWl0LS07CisKKwlJUDZDQihza2IpLT5mbGFncyB8PSBJUDZTS0JfRk9SV0FSREVEOworCisJcmV0dXJuIE5GX0hPT0soUEZfSU5FVDYsIE5GX0lORVRfRk9SV0FSRCwgc2tiLCBza2ItPmRldiwgZGV2LAorCQkgICAgICAgaXA2bXJfZm9yd2FyZDJfZmluaXNoKTsKKworb3V0X2ZyZWU6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXA2bXJfZmluZF92aWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgY3Q7CisJZm9yIChjdCA9IG1heHZpZiAtIDE7IGN0ID49IDA7IGN0LS0pIHsKKwkJaWYgKHZpZjZfdGFibGVbY3RdLmRldiA9PSBkZXYpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGN0OworfQorCitzdGF0aWMgaW50IGlwNl9tcl9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmM2X2NhY2hlICpjYWNoZSkKK3sKKwlpbnQgcHNlbmQgPSAtMTsKKwlpbnQgdmlmLCBjdDsKKworCXZpZiA9IGNhY2hlLT5tZjZjX3BhcmVudDsKKwljYWNoZS0+bWZjX3VuLnJlcy5wa3QrKzsKKwljYWNoZS0+bWZjX3VuLnJlcy5ieXRlcyArPSBza2ItPmxlbjsKKworCS8qCisJICogV3JvbmcgaW50ZXJmYWNlOiBkcm9wIHBhY2tldCBhbmQgKG1heWJlKSBzZW5kIFBJTSBhc3NlcnQuCisJICovCisJaWYgKHZpZjZfdGFibGVbdmlmXS5kZXYgIT0gc2tiLT5kZXYpIHsKKwkJaW50IHRydWVfdmlmaTsKKworCQljYWNoZS0+bWZjX3VuLnJlcy53cm9uZ19pZisrOworCQl0cnVlX3ZpZmkgPSBpcDZtcl9maW5kX3ZpZihza2ItPmRldik7CisKKwkJaWYgKHRydWVfdmlmaSA+PSAwICYmIG1yb3V0ZV9kb19hc3NlcnQgJiYKKwkJICAgIC8qIHBpbXNtIHVzZXMgYXNzZXJ0cywgd2hlbiBzd2l0Y2hpbmcgZnJvbSBSUFQgdG8gU1BULAorCQkgICAgICAgc28gdGhhdCB3ZSBjYW5ub3QgY2hlY2sgdGhhdCBwYWNrZXQgYXJyaXZlZCBvbiBhbiBvaWYuCisJCSAgICAgICBJdCBpcyBiYWQsIGJ1dCBvdGhlcndpc2Ugd2Ugd291bGQgbmVlZCB0byBtb3ZlIHByZXR0eQorCQkgICAgICAgbGFyZ2UgY2h1bmsgb2YgcGltZCB0byBrZXJuZWwuIE91Z2guLi4gLS1BTksKKwkJICAgICAqLworCQkgICAgKG1yb3V0ZV9kb19waW0gfHwgY2FjaGUtPm1mY191bi5yZXMudHRsc1t0cnVlX3ZpZmldIDwgMjU1KSAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLAorCQkJICAgICAgIGNhY2hlLT5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ICsgTUZDX0FTU0VSVF9USFJFU0gpKSB7CisJCQljYWNoZS0+bWZjX3VuLnJlcy5sYXN0X2Fzc2VydCA9IGppZmZpZXM7CisJCQlpcDZtcl9jYWNoZV9yZXBvcnQoc2tiLCB0cnVlX3ZpZmksIE1SVDZNU0dfV1JPTkdNSUYpOworCQl9CisJCWdvdG8gZG9udF9mb3J3YXJkOworCX0KKworCXZpZjZfdGFibGVbdmlmXS5wa3RfaW4rKzsKKwl2aWY2X3RhYmxlW3ZpZl0uYnl0ZXNfaW4gKz0gc2tiLT5sZW47CisKKwkvKgorCSAqCUZvcndhcmQgdGhlIGZyYW1lCisJICovCisJZm9yIChjdCA9IGNhY2hlLT5tZmNfdW4ucmVzLm1heHZpZiAtIDE7IGN0ID49IGNhY2hlLT5tZmNfdW4ucmVzLm1pbnZpZjsgY3QtLSkgeworCQlpZiAoaXB2Nl9oZHIoc2tiKS0+aG9wX2xpbWl0ID4gY2FjaGUtPm1mY191bi5yZXMudHRsc1tjdF0pIHsKKwkJCWlmIChwc2VuZCAhPSAtMSkgeworCQkJCXN0cnVjdCBza19idWZmICpza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKHNrYjIpCisJCQkJCWlwNm1yX2ZvcndhcmQyKHNrYjIsIGNhY2hlLCBwc2VuZCk7CisJCQl9CisJCQlwc2VuZCA9IGN0OworCQl9CisJfQorCWlmIChwc2VuZCAhPSAtMSkgeworCQlpcDZtcl9mb3J3YXJkMihza2IsIGNhY2hlLCBwc2VuZCk7CisJCXJldHVybiAwOworCX0KKworZG9udF9mb3J3YXJkOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAwOworfQorCisKKy8qCisgKglNdWx0aWNhc3QgcGFja2V0cyBmb3IgZm9yd2FyZGluZyBhcnJpdmUgaGVyZQorICovCisKK2ludCBpcDZfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbWZjNl9jYWNoZSAqY2FjaGU7CisKKwlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwljYWNoZSA9IGlwNm1yX2NhY2hlX2ZpbmQoJmlwdjZfaGRyKHNrYiktPnNhZGRyLCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpOworCisJLyoKKwkgKglObyB1c2FibGUgY2FjaGUgZW50cnkKKwkgKi8KKwlpZiAoY2FjaGUgPT0gTlVMTCkgeworCQlpbnQgdmlmOworCisJCXZpZiA9IGlwNm1yX2ZpbmRfdmlmKHNrYi0+ZGV2KTsKKwkJaWYgKHZpZiA+PSAwKSB7CisJCQlpbnQgZXJyID0gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZCh2aWYsIHNrYik7CisJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCQlyZXR1cm4gZXJyOworCQl9CisJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpcDZfbXJfZm9yd2FyZChza2IsIGNhY2hlKTsKKworCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitpcDZtcl9maWxsX21yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWZjNl9jYWNoZSAqYywgc3RydWN0IHJ0bXNnICpydG0pCit7CisJaW50IGN0OworCXN0cnVjdCBydG5leHRob3AgKm5ocDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmlmNl90YWJsZVtjLT5tZjZjX3BhcmVudF0uZGV2OworCXU4ICpiID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOworCXN0cnVjdCBydGF0dHIgKm1wX2hlYWQ7CisKKwlpZiAoZGV2KQorCQlSVEFfUFVUKHNrYiwgUlRBX0lJRiwgNCwgJmRldi0+aWZpbmRleCk7CisKKwltcF9oZWFkID0gKHN0cnVjdCBydGF0dHIgKilza2JfcHV0KHNrYiwgUlRBX0xFTkdUSCgwKSk7CisKKwlmb3IgKGN0ID0gYy0+bWZjX3VuLnJlcy5taW52aWY7IGN0IDwgYy0+bWZjX3VuLnJlcy5tYXh2aWY7IGN0KyspIHsKKwkJaWYgKGMtPm1mY191bi5yZXMudHRsc1tjdF0gPCAyNTUpIHsKKwkJCWlmIChza2JfdGFpbHJvb20oc2tiKSA8IFJUQV9BTElHTihSVEFfQUxJR04oc2l6ZW9mKCpuaHApKSArIDQpKQorCQkJCWdvdG8gcnRhdHRyX2ZhaWx1cmU7CisJCQluaHAgPSAoc3RydWN0IHJ0bmV4dGhvcCAqKXNrYl9wdXQoc2tiLCBSVEFfQUxJR04oc2l6ZW9mKCpuaHApKSk7CisJCQluaHAtPnJ0bmhfZmxhZ3MgPSAwOworCQkJbmhwLT5ydG5oX2hvcHMgPSBjLT5tZmNfdW4ucmVzLnR0bHNbY3RdOworCQkJbmhwLT5ydG5oX2lmaW5kZXggPSB2aWY2X3RhYmxlW2N0XS5kZXYtPmlmaW5kZXg7CisJCQluaHAtPnJ0bmhfbGVuID0gc2l6ZW9mKCpuaHApOworCQl9CisJfQorCW1wX2hlYWQtPnJ0YV90eXBlID0gUlRBX01VTFRJUEFUSDsKKwltcF9oZWFkLT5ydGFfbGVuID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKHU4ICopbXBfaGVhZDsKKwlydG0tPnJ0bV90eXBlID0gUlROX01VTFRJQ0FTVDsKKwlyZXR1cm4gMTsKKworcnRhdHRyX2ZhaWx1cmU6CisJbmxtc2dfdHJpbShza2IsIGIpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK2ludCBpcDZtcl9nZXRfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbWZjNl9jYWNoZSAqY2FjaGU7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilza2ItPmRzdDsKKworCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCWNhY2hlID0gaXA2bXJfY2FjaGVfZmluZCgmcnQtPnJ0Nmlfc3JjLmFkZHIsICZydC0+cnQ2aV9kc3QuYWRkcik7CisKKwlpZiAoIWNhY2hlKSB7CisJCXN0cnVjdCBza19idWZmICpza2IyOworCQlzdHJ1Y3QgaXB2NmhkciAqaXBoOworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCQlpbnQgdmlmOworCisJCWlmIChub3dhaXQpIHsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCWRldiA9IHNrYi0+ZGV2OworCQlpZiAoZGV2ID09IE5VTEwgfHwgKHZpZiA9IGlwNm1yX2ZpbmRfdmlmKGRldikpIDwgMCkgeworCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogcmVhbGx5IGNvcnJlY3Q/ICovCisJCXNrYjIgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiMikgeworCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiMik7CisKKwkJc2tiX3B1dChza2IyLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKKwkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjIpOworCisJCWlwaCA9IGlwdjZfaGRyKHNrYjIpOworCQlpcGgtPnZlcnNpb24gPSAwOworCQlpcGgtPnByaW9yaXR5ID0gMDsKKwkJaXBoLT5mbG93X2xibFswXSA9IDA7CisJCWlwaC0+Zmxvd19sYmxbMV0gPSAwOworCQlpcGgtPmZsb3dfbGJsWzJdID0gMDsKKwkJaXBoLT5wYXlsb2FkX2xlbiA9IDA7CisJCWlwaC0+bmV4dGhkciA9IElQUFJPVE9fTk9ORTsKKwkJaXBoLT5ob3BfbGltaXQgPSAwOworCQlpcHY2X2FkZHJfY29weSgmaXBoLT5zYWRkciwgJnJ0LT5ydDZpX3NyYy5hZGRyKTsKKwkJaXB2Nl9hZGRyX2NvcHkoJmlwaC0+ZGFkZHIsICZydC0+cnQ2aV9kc3QuYWRkcik7CisKKwkJZXJyID0gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZCh2aWYsIHNrYjIpOworCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFub3dhaXQgJiYgKHJ0bS0+cnRtX2ZsYWdzJlJUTV9GX05PVElGWSkpCisJCWNhY2hlLT5tZmNfZmxhZ3MgfD0gTUZDX05PVElGWTsKKworCWVyciA9IGlwNm1yX2ZpbGxfbXJvdXRlKHNrYiwgY2FjaGUsIHJ0bSk7CisJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggYjkwMDM5NS4uZWU2ZGU0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwY29tcC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wZmtleXYyLmg+CkBAIC0xNDYsNyArMTQ1LDkgQEAKIAlzY3JhdGNoID0gKnBlcl9jcHVfcHRyKGlwY29tcDZfc2NyYXRjaGVzLCBjcHUpOwogCXRmbSA9ICpwZXJfY3B1X3B0cihpcGNkLT50Zm1zLCBjcHUpOwogCisJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWVyciA9IGNyeXB0b19jb21wX2NvbXByZXNzKHRmbSwgc3RhcnQsIHBsZW4sIHNjcmF0Y2gsICZkbGVuKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKIAlpZiAoZXJyIHx8IChkbGVuICsgc2l6ZW9mKCppcGNoKSkgPj0gcGxlbikgewogCQlwdXRfY3B1KCk7CiAJCWdvdG8gb3V0X29rOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IGJmMmE2ODYuLjA2ZGU5ZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqCiAgKglGSVhNRTogTWFrZSB0aGUgc2V0c29ja29wdCBjb2RlIFBPU0lYIGNvbXBsaWFudDogVGhhdCBpcwogICoKLSAqCW8JUmV0dXJuIC1FSU5WQUwgZm9yIHNldHNvY2tvcHQgb2Ygc2hvcnQgbGVuZ3RocwogICoJbwlUcnVuY2F0ZSBnZXRzb2Nrb3B0IHJldHVybnMKICAqCW8JUmV0dXJuIGFuIG9wdGxlbiBvZiB0aGUgdHJ1bmNhdGVkIGxlbmd0aCBpZiBuZWVkIGJlCiAgKgpAQCAtMzMsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9tcm91dGU2Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTcsMTE4ICs1Nyw2IEBACiAKIERFRklORV9TTk1QX1NUQVQoc3RydWN0IGlwc3RhdHNfbWliLCBpcHY2X3N0YXRpc3RpY3MpIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmlwdjZfZ3NvX3B1bGxfZXh0aGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJICAgIGludCBwcm90bykKLXsKLQlzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKm9wcyA9IE5VTEw7Ci0KLQlmb3IgKDs7KSB7Ci0JCXN0cnVjdCBpcHY2X29wdF9oZHIgKm9wdGg7Ci0JCWludCBsZW47Ci0KLQkJaWYgKHByb3RvICE9IE5FWFRIRFJfSE9QKSB7Ci0JCQlvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfcHJvdG9zW3Byb3RvXSk7Ci0KLQkJCWlmICh1bmxpa2VseSghb3BzKSkKLQkJCQlicmVhazsKLQotCQkJaWYgKCEob3BzLT5mbGFncyAmIElORVQ2X1BST1RPX0dTT19FWFRIRFIpKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgOCkpKQotCQkJYnJlYWs7Ci0KLQkJb3B0aCA9ICh2b2lkICopc2tiLT5kYXRhOwotCQlsZW4gPSBvcHRoLT5oZHJsZW4gKiA4ICsgODsKLQotCQlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBsZW4pKSkKLQkJCWJyZWFrOwotCi0JCXByb3RvID0gb3B0aC0+bmV4dGhkcjsKLQkJX19za2JfcHVsbChza2IsIGxlbik7Ci0JfQotCi0JcmV0dXJuIG9wczsKLX0KLQotc3RhdGljIGludCBpcHY2X2dzb19zZW5kX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGlwdjZoZHIgKmlwdjZoOwotCXN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqb3BzOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcHY2aCkpKSkKLQkJZ290byBvdXQ7Ci0KLQlpcHY2aCA9IGlwdjZfaGRyKHNrYik7Ci0JX19za2JfcHVsbChza2IsIHNpemVvZigqaXB2NmgpKTsKLQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCW9wcyA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwdjZoLT5uZXh0aGRyKTsKLQlpZiAobGlrZWx5KG9wcyAmJiBvcHMtPmdzb19zZW5kX2NoZWNrKSkgewotCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwotCQllcnIgPSBvcHMtPmdzb19zZW5kX2NoZWNrKHNrYik7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICppcHY2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcykKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwdjZoOwotCXN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqb3BzOwotCi0JaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1Y2X0NTVU0pKQotCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKLQotCWlmICh1bmxpa2VseShza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYKLQkJICAgICB+KFNLQl9HU09fVURQIHwKLQkJICAgICAgIFNLQl9HU09fRE9ER1kgfAotCQkgICAgICAgU0tCX0dTT19UQ1BfRUNOIHwKLQkJICAgICAgIFNLQl9HU09fVENQVjYgfAotCQkgICAgICAgMCkpKQotCQlnb3RvIG91dDsKLQotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXB2NmgpKSkpCi0JCWdvdG8gb3V0OwotCi0JaXB2NmggPSBpcHY2X2hkcihza2IpOwotCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwdjZoKSk7Ci0Jc2VncyA9IEVSUl9QVFIoLUVQUk9UT05PU1VQUE9SVCk7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jb3BzID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgaXB2NmgtPm5leHRoZHIpOwotCWlmIChsaWtlbHkob3BzICYmIG9wcy0+Z3NvX3NlZ21lbnQpKSB7Ci0JCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7Ci0JCXNlZ3MgPSBvcHMtPmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWlmICh1bmxpa2VseShJU19FUlIoc2VncykpKQotCQlnb3RvIG91dDsKLQotCWZvciAoc2tiID0gc2Vnczsgc2tiOyBza2IgPSBza2ItPm5leHQpIHsKLQkJaXB2NmggPSBpcHY2X2hkcihza2IpOwotCQlpcHY2aC0+cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItPmxlbiAtIHNrYi0+bWFjX2xlbiAtCi0JCQkJCSAgIHNpemVvZigqaXB2NmgpKTsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gc2VnczsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKLQkuZnVuYyA9IGlwdjZfcmN2LAotCS5nc29fc2VuZF9jaGVjayA9IGlwdjZfZ3NvX3NlbmRfY2hlY2ssCi0JLmdzb19zZWdtZW50ID0gaXB2Nl9nc29fc2VnbWVudCwKLX07Ci0KIHN0cnVjdCBpcDZfcmFfY2hhaW4gKmlwNl9yYV9jaGFpbjsKIERFRklORV9SV0xPQ0soaXA2X3JhX2xvY2spOwogCkBAIC0yMTUsMjUgKzEwMyw1OSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMKK3N0cnVjdCBpcHY2X3R4b3B0aW9ucyAqaXB2Nl91cGRhdGVfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KQoreworCWlmIChpbmV0X3NrKHNrKS0+aXNfaWNzaykgeworCQlpZiAob3B0ICYmCisJCSAgICAhKCgxIDw8IHNrLT5za19zdGF0ZSkgJiAoVENQRl9MSVNURU4gfCBUQ1BGX0NMT1NFKSkgJiYKKwkJICAgIGluZXRfc2soc2spLT5kYWRkciAhPSBMT09QQkFDSzRfSVBWNikgeworCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOworCQkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IG9wdC0+b3B0X2ZsZW4gKyBvcHQtPm9wdF9uZmxlbjsKKwkJCWljc2stPmljc2tfc3luY19tc3Moc2ssIGljc2stPmljc2tfcG10dV9jb29raWUpOworCQl9CisJCW9wdCA9IHhjaGcoJmluZXQ2X3NrKHNrKS0+b3B0LCBvcHQpOworCX0gZWxzZSB7CisJCXdyaXRlX2xvY2soJnNrLT5za19kc3RfbG9jayk7CisJCW9wdCA9IHhjaGcoJmluZXQ2X3NrKHNrKS0+b3B0LCBvcHQpOworCQl3cml0ZV91bmxvY2soJnNrLT5za19kc3RfbG9jayk7CisJfQorCXNrX2RzdF9yZXNldChzayk7CisKKwlyZXR1cm4gb3B0OworfQorCiBzdGF0aWMgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJaW50IHZhbCwgdmFsYm9vbDsKIAlpbnQgcmV0diA9IC1FTk9QUk9UT09QVDsKIAogCWlmIChvcHR2YWwgPT0gTlVMTCkKIAkJdmFsPTA7Ci0JZWxzZSBpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwllbHNlIHsKKwkJaWYgKG9wdGxlbiA+PSBzaXplb2YoaW50KSkgeworCQkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgb3B0dmFsKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfSBlbHNlCisJCQl2YWwgPSAwOworCX0KIAogCXZhbGJvb2wgPSAodmFsIT0wKTsKIAorCWlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSkKKwkJcmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCiAJbG9ja19zb2NrKHNrKTsKIAogCXN3aXRjaCAob3B0bmFtZSkgewogCiAJY2FzZSBJUFY2X0FERFJGT1JNOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCWlmICh2YWwgPT0gUEZfSU5FVCkgewogCQkJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqcGt0b3B0OwpAQCAtMjY2LDEwICsxODgsOSBAQAogCiAJCQlpZiAoc2stPnNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7CiAJCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCiAJCQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQkJCXNvY2tfcHJvdF9pbnVzZV9hZGQoc2stPnNrX3Byb3QsIC0xKTsKLQkJCQlzb2NrX3Byb3RfaW51c2VfYWRkKCZ0Y3BfcHJvdCwgMSk7CisJCQkJc29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLT5za19wcm90LCAtMSk7CisJCQkJc29ja19wcm90X2ludXNlX2FkZChuZXQsICZ0Y3BfcHJvdCwgMSk7CiAJCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCQkJc2stPnNrX3Byb3QgPSAmdGNwX3Byb3Q7CiAJCQkJaWNzay0+aWNza19hZl9vcHMgPSAmaXB2NF9zcGVjaWZpYzsKQEAgLTI4Miw4ICsyMDMsOCBAQAogCQkJCWlmIChzay0+c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFBMSVRFKQogCQkJCQlwcm90ID0gJnVkcGxpdGVfcHJvdDsKIAkJCQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JCQkJc29ja19wcm90X2ludXNlX2FkZChzay0+c2tfcHJvdCwgLTEpOwotCQkJCXNvY2tfcHJvdF9pbnVzZV9hZGQocHJvdCwgMSk7CisJCQkJc29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLT5za19wcm90LCAtMSk7CisJCQkJc29ja19wcm90X2ludXNlX2FkZChuZXQsIHByb3QsIDEpOwogCQkJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQkJCXNrLT5za19wcm90ID0gcHJvdDsKIAkJCQlzay0+c2tfc29ja2V0LT5vcHMgPSAmaW5ldF9kZ3JhbV9vcHM7CkBAIC0zMDksNjMgKzIzMCw4NiBAQAogCQlnb3RvIGVfaW52YWw7CiAKIAljYXNlIElQVjZfVjZPTkxZOgotCQlpZiAoaW5ldF9zayhzayktPm51bSkKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpIHx8CisJCSAgICBpbmV0X3NrKHNrKS0+bnVtKQogCQkJZ290byBlX2ludmFsOwogCQlucC0+aXB2Nm9ubHkgPSB2YWxib29sOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIElQVjZfUkVDVlBLVElORk86CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAkJbnAtPnJ4b3B0LmJpdHMucnhpbmZvID0gdmFsYm9vbDsKIAkJcmV0diA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBJUFY2XzIyOTJQS1RJTkZPOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5yeG9wdC5iaXRzLnJ4b2luZm8gPSB2YWxib29sOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIElQVjZfUkVDVkhPUExJTUlUOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5yeG9wdC5iaXRzLnJ4aGxpbSA9IHZhbGJvb2w7CiAJCXJldHYgPSAwOwogCQlicmVhazsKIAogCWNhc2UgSVBWNl8yMjkySE9QTElNSVQ6CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAkJbnAtPnJ4b3B0LmJpdHMucnhvaGxpbSA9IHZhbGJvb2w7CiAJCXJldHYgPSAwOwogCQlicmVhazsKIAogCWNhc2UgSVBWNl9SRUNWUlRIRFI6CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAkJbnAtPnJ4b3B0LmJpdHMuc3JjcnQgPSB2YWxib29sOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIElQVjZfMjI5MlJUSERSOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5yeG9wdC5iaXRzLm9zcmNydCA9IHZhbGJvb2w7CiAJCXJldHYgPSAwOwogCQlicmVhazsKIAogCWNhc2UgSVBWNl9SRUNWSE9QT1BUUzoKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQkJZ290byBlX2ludmFsOwogCQlucC0+cnhvcHQuYml0cy5ob3BvcHRzID0gdmFsYm9vbDsKIAkJcmV0diA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBJUFY2XzIyOTJIT1BPUFRTOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5yeG9wdC5iaXRzLm9ob3BvcHRzID0gdmFsYm9vbDsKIAkJcmV0diA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBJUFY2X1JFQ1ZEU1RPUFRTOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5yeG9wdC5iaXRzLmRzdG9wdHMgPSB2YWxib29sOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIElQVjZfMjI5MkRTVE9QVFM6CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAkJbnAtPnJ4b3B0LmJpdHMub2RzdG9wdHMgPSB2YWxib29sOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIElQVjZfVENMQVNTOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCWlmICh2YWwgPCAtMSB8fCB2YWwgPiAweGZmKQogCQkJZ290byBlX2ludmFsOwogCQlucC0+dGNsYXNzID0gdmFsOwpAQCAtMzczLDExICszMTcsMTUgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElQVjZfUkVDVlRDTEFTUzoKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQkJZ290byBlX2ludmFsOwogCQlucC0+cnhvcHQuYml0cy5yeHRjbGFzcyA9IHZhbGJvb2w7CiAJCXJldHYgPSAwOwogCQlicmVhazsKIAogCWNhc2UgSVBWNl9GTE9XSU5GTzoKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQkJZ290byBlX2ludmFsOwogCQlucC0+cnhvcHQuYml0cy5yeGZsb3cgPSB2YWxib29sOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CkBAIC0zOTYsOSArMzQ0LDkgQEAKIAkJaWYgKG9wdG5hbWUgIT0gSVBWNl9SVEhEUiAmJiAhY2FwYWJsZShDQVBfTkVUX1JBVykpCiAJCQlicmVhazsKIAotCQlyZXR2ID0gLUVJTlZBTDsKLQkJaWYgKG9wdGxlbiAmIDB4NyB8fCBvcHRsZW4gPiA4ICogMjU1KQotCQkJYnJlYWs7CisJCWlmIChvcHRsZW4gPCBzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikgfHwKKwkJICAgIG9wdGxlbiAmIDB4NyB8fCBvcHRsZW4gPiA4ICogMjU1KQorCQkJZ290byBlX2ludmFsOwogCiAJCW9wdCA9IGlwdjZfcmVuZXdfb3B0aW9ucyhzaywgbnAtPm9wdCwgb3B0bmFtZSwKIAkJCQkJIChzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9fdXNlciAqKW9wdHZhbCwKQEAgLTQyNiwyNSArMzc0LDcgQEAKIAkJfQogCiAJCXJldHYgPSAwOwotCQlpZiAoaW5ldF9zayhzayktPmlzX2ljc2spIHsKLQkJCWlmIChvcHQpIHsKLQkJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0JCQkJaWYgKCEoKDEgPDwgc2stPnNrX3N0YXRlKSAmCi0JCQkJICAgICAgKFRDUEZfTElTVEVOIHwgVENQRl9DTE9TRSkpCi0JCQkJICAgICYmIGluZXRfc2soc2spLT5kYWRkciAhPSBMT09QQkFDSzRfSVBWNikgewotCQkJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0KLQkJCQkJCW9wdC0+b3B0X2ZsZW4gKyBvcHQtPm9wdF9uZmxlbjsKLQkJCQkJaWNzay0+aWNza19zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7Ci0JCQkJfQotCQkJfQotCQkJb3B0ID0geGNoZygmbnAtPm9wdCwgb3B0KTsKLQkJCXNrX2RzdF9yZXNldChzayk7Ci0JCX0gZWxzZSB7Ci0JCQl3cml0ZV9sb2NrKCZzay0+c2tfZHN0X2xvY2spOwotCQkJb3B0ID0geGNoZygmbnAtPm9wdCwgb3B0KTsKLQkJCXdyaXRlX3VubG9jaygmc2stPnNrX2RzdF9sb2NrKTsKLQkJCXNrX2RzdF9yZXNldChzayk7Ci0JCX0KKwkJb3B0ID0gaXB2Nl91cGRhdGVfb3B0aW9ucyhzaywgb3B0KTsKIHN0aWNreV9kb25lOgogCQlpZiAob3B0KQogCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CkBAIC00OTAsMzIgKzQyMCwxNSBAQAogCQkJZ290byBkb25lOwogdXBkYXRlOgogCQlyZXR2ID0gMDsKLQkJaWYgKGluZXRfc2soc2spLT5pc19pY3NrKSB7Ci0JCQlpZiAob3B0KSB7Ci0JCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCQkJCWlmICghKCgxIDw8IHNrLT5za19zdGF0ZSkgJgotCQkJCSAgICAgIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKQotCQkJCSAgICAmJiBpbmV0X3NrKHNrKS0+ZGFkZHIgIT0gTE9PUEJBQ0s0X0lQVjYpIHsKLQkJCQkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9Ci0JCQkJCQlvcHQtPm9wdF9mbGVuICsgb3B0LT5vcHRfbmZsZW47Ci0JCQkJCWljc2stPmljc2tfc3luY19tc3Moc2ssIGljc2stPmljc2tfcG10dV9jb29raWUpOwotCQkJCX0KLQkJCX0KLQkJCW9wdCA9IHhjaGcoJm5wLT5vcHQsIG9wdCk7Ci0JCQlza19kc3RfcmVzZXQoc2spOwotCQl9IGVsc2UgewotCQkJd3JpdGVfbG9jaygmc2stPnNrX2RzdF9sb2NrKTsKLQkJCW9wdCA9IHhjaGcoJm5wLT5vcHQsIG9wdCk7Ci0JCQl3cml0ZV91bmxvY2soJnNrLT5za19kc3RfbG9jayk7Ci0JCQlza19kc3RfcmVzZXQoc2spOwotCQl9Ci0KKwkJb3B0ID0gaXB2Nl91cGRhdGVfb3B0aW9ucyhzaywgb3B0KTsKIGRvbmU6CiAJCWlmIChvcHQpCiAJCQlzb2NrX2tmcmVlX3Moc2ssIG9wdCwgb3B0LT50b3RfbGVuKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgSVBWNl9VTklDQVNUX0hPUFM6CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAkJaWYgKHZhbCA+IDI1NSB8fCB2YWwgPCAtMSkKIAkJCWdvdG8gZV9pbnZhbDsKIAkJbnAtPmhvcF9saW1pdCA9IHZhbDsKQEAgLTUyNSw2ICs0MzgsOCBAQAogCWNhc2UgSVBWNl9NVUxUSUNBU1RfSE9QUzoKIAkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKQogCQkJZ290byBlX2ludmFsOworCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCWlmICh2YWwgPiAyNTUgfHwgdmFsIDwgLTEpCiAJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5tY2FzdF9ob3BzID0gdmFsOwpAQCAtNTMyLDYgKzQ0Nyw4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJUFY2X01VTFRJQ0FTVF9MT09QOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5tY19sb29wID0gdmFsYm9vbDsKIAkJcmV0diA9IDA7CiAJCWJyZWFrOwpAQCAtNTM5LDEyICs0NTYsMTQgQEAKIAljYXNlIElQVjZfTVVMVElDQVNUX0lGOgogCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0pCiAJCQlnb3RvIGVfaW52YWw7CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAogCQlpZiAodmFsKSB7CiAJCQlpZiAoc2stPnNrX2JvdW5kX2Rldl9pZiAmJiBzay0+c2tfYm91bmRfZGV2X2lmICE9IHZhbCkKIAkJCQlnb3RvIGVfaW52YWw7CiAKLQkJCWlmIChfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCB2YWwpID09IE5VTEwpIHsKKwkJCWlmIChfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCB2YWwpID09IE5VTEwpIHsKIAkJCQlyZXR2ID0gLUVOT0RFVjsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTU1Nyw2ICs0NzYsOSBAQAogCXsKIAkJc3RydWN0IGlwdjZfbXJlcSBtcmVxOwogCisJCWlmIChvcHRsZW4gPCBzaXplb2Yoc3RydWN0IGlwdjZfbXJlcSkpCisJCQlnb3RvIGVfaW52YWw7CisKIAkJcmV0diA9IC1FUFJPVE87CiAJCWlmIChpbmV0X3NrKHNrKS0+aXNfaWNzaykKIAkJCWJyZWFrOwpAQCAtNTc2LDcgKzQ5OCw3IEBACiAJewogCQlzdHJ1Y3QgaXB2Nl9tcmVxIG1yZXE7CiAKLQkJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IGlwdjZfbXJlcSkpCisJCWlmIChvcHRsZW4gPCBzaXplb2Yoc3RydWN0IGlwdjZfbXJlcSkpCiAJCQlnb3RvIGVfaW52YWw7CiAKIAkJcmV0diA9IC1FRkFVTFQ7CkBAIC01OTUsNiArNTE3LDkgQEAKIAkJc3RydWN0IGdyb3VwX3JlcSBncmVxOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpwc2luNjsKIAorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKHN0cnVjdCBncm91cF9yZXEpKQorCQkJZ290byBlX2ludmFsOworCiAJCXJldHYgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmdyZXEsIG9wdHZhbCwgc2l6ZW9mKHN0cnVjdCBncm91cF9yZXEpKSkKIAkJCWJyZWFrOwpAQCAtNjE5LDcgKzU0NCw3IEBACiAJCXN0cnVjdCBncm91cF9zb3VyY2VfcmVxIGdyZXFzOwogCQlpbnQgb21vZGUsIGFkZDsKIAotCQlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgZ3JvdXBfc291cmNlX3JlcSkpCisJCWlmIChvcHRsZW4gPCBzaXplb2Yoc3RydWN0IGdyb3VwX3NvdXJjZV9yZXEpKQogCQkJZ290byBlX2ludmFsOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmdyZXFzLCBvcHR2YWwsIHNpemVvZihncmVxcykpKSB7CiAJCQlyZXR2ID0gLUVGQVVMVDsKQEAgLTY5MywyNyArNjE4LDM3IEBACiAJCWJyZWFrOwogCX0KIAljYXNlIElQVjZfUk9VVEVSX0FMRVJUOgorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CiAJCXJldHYgPSBpcDZfcmFfY29udHJvbChzaywgdmFsLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBJUFY2X01UVV9ESVNDT1ZFUjoKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQkJZ290byBlX2ludmFsOwogCQlpZiAodmFsPDAgfHwgdmFsPjMpCiAJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5wbXR1ZGlzYyA9IHZhbDsKIAkJcmV0diA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSVBWNl9NVFU6CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAkJaWYgKHZhbCAmJiB2YWwgPCBJUFY2X01JTl9NVFUpCiAJCQlnb3RvIGVfaW52YWw7CiAJCW5wLT5mcmFnX3NpemUgPSB2YWw7CiAJCXJldHYgPSAwOwogCQlicmVhazsKIAljYXNlIElQVjZfUkVDVkVSUjoKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQkJZ290byBlX2ludmFsOwogCQlucC0+cmVjdmVyciA9IHZhbGJvb2w7CiAJCWlmICghdmFsKQogCQkJc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfZXJyb3JfcXVldWUpOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJUFY2X0ZMT1dJTkZPX1NFTkQ6CisJCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKKwkJCWdvdG8gZV9pbnZhbDsKIAkJbnAtPnNuZGZsb3cgPSB2YWxib29sOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CkBAIC03MjgsNyArNjYzLDcwIEBACiAJCXJldHYgPSB4ZnJtX3VzZXJfcG9saWN5KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwogCisJY2FzZSBJUFY2X0FERFJfUFJFRkVSRU5DRVM6CisJICAgIHsKKwkJdW5zaWduZWQgaW50IHByZWYgPSAwOworCQl1bnNpZ25lZCBpbnQgcHJlZm1hc2sgPSB+MDsKKworCQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCQlnb3RvIGVfaW52YWw7CisKKwkJcmV0diA9IC1FSU5WQUw7CisKKwkJLyogY2hlY2sgUFVCTElDL1RNUC9QVUJUTVBfREVGQVVMVCBjb25mbGljdHMgKi8KKwkJc3dpdGNoICh2YWwgJiAoSVBWNl9QUkVGRVJfU1JDX1BVQkxJQ3wKKwkJCSAgICAgICBJUFY2X1BSRUZFUl9TUkNfVE1QfAorCQkJICAgICAgIElQVjZfUFJFRkVSX1NSQ19QVUJUTVBfREVGQVVMVCkpIHsKKwkJY2FzZSBJUFY2X1BSRUZFUl9TUkNfUFVCTElDOgorCQkJcHJlZiB8PSBJUFY2X1BSRUZFUl9TUkNfUFVCTElDOworCQkJYnJlYWs7CisJCWNhc2UgSVBWNl9QUkVGRVJfU1JDX1RNUDoKKwkJCXByZWYgfD0gSVBWNl9QUkVGRVJfU1JDX1RNUDsKKwkJCWJyZWFrOworCQljYXNlIElQVjZfUFJFRkVSX1NSQ19QVUJUTVBfREVGQVVMVDoKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlnb3RvIHByZWZfc2tpcF9wdWJ0bXA7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVfaW52YWw7CisJCX0KKworCQlwcmVmbWFzayAmPSB+KElQVjZfUFJFRkVSX1NSQ19QVUJMSUN8CisJCQkgICAgICBJUFY2X1BSRUZFUl9TUkNfVE1QKTsKK3ByZWZfc2tpcF9wdWJ0bXA6CisKKwkJLyogY2hlY2sgSE9NRS9DT0EgY29uZmxpY3RzICovCisJCXN3aXRjaCAodmFsICYgKElQVjZfUFJFRkVSX1NSQ19IT01FfElQVjZfUFJFRkVSX1NSQ19DT0EpKSB7CisJCWNhc2UgSVBWNl9QUkVGRVJfU1JDX0hPTUU6CisJCQlicmVhazsKKwkJY2FzZSBJUFY2X1BSRUZFUl9TUkNfQ09BOgorCQkJcHJlZiB8PSBJUFY2X1BSRUZFUl9TUkNfQ09BOworCQljYXNlIDA6CisJCQlnb3RvIHByZWZfc2tpcF9jb2E7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVfaW52YWw7CisJCX0KKworCQlwcmVmbWFzayAmPSB+SVBWNl9QUkVGRVJfU1JDX0NPQTsKK3ByZWZfc2tpcF9jb2E6CisKKwkJLyogY2hlY2sgQ0dBL05PTkNHQSBjb25mbGljdHMgKi8KKwkJc3dpdGNoICh2YWwgJiAoSVBWNl9QUkVGRVJfU1JDX0NHQXxJUFY2X1BSRUZFUl9TUkNfTk9OQ0dBKSkgeworCQljYXNlIElQVjZfUFJFRkVSX1NSQ19DR0E6CisJCWNhc2UgSVBWNl9QUkVGRVJfU1JDX05PTkNHQToKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVfaW52YWw7CisJCX0KKworCQlucC0+c3JjcHJlZnMgPSAobnAtPnNyY3ByZWZzICYgcHJlZm1hc2spIHwgcHJlZjsKKwkJcmV0diA9IDA7CisKKwkJYnJlYWs7CisJICAgIH0KIAl9CisKIAlyZWxlYXNlX3NvY2soc2spOwogCiAJcmV0dXJuIHJldHY7CkBAIC04MzksNiArODM3LDkgQEAKIAlpbnQgbGVuOwogCWludCB2YWw7CiAKKwlpZiAoaXA2X21yb3V0ZV9vcHQob3B0bmFtZSkpCisJCXJldHVybiBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwogCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCXN3aXRjaCAob3B0bmFtZSkgewpAQCAtMTAxNSw5ICsxMDE2LDcgQEAKIAkJZHN0ID0gc2tfZHN0X2dldChzayk7CiAJCWlmIChkc3QpIHsKIAkJCWlmICh2YWwgPCAwKQotCQkJCXZhbCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0hPUExJTUlUKTsKLQkJCWlmICh2YWwgPCAwKQotCQkJCXZhbCA9IGlwdjZfZ2V0X2hvcGxpbWl0KGRzdC0+ZGV2KTsKKwkJCQl2YWwgPSBpcDZfZHN0X2hvcGxpbWl0KGRzdCk7CiAJCQlkc3RfcmVsZWFzZShkc3QpOwogCQl9CiAJCWlmICh2YWwgPCAwKQpAQCAtMTA0NSw2ICsxMDQ0LDI0IEBACiAJCXZhbCA9IG5wLT5zbmRmbG93OwogCQlicmVhazsKIAorCWNhc2UgSVBWNl9BRERSX1BSRUZFUkVOQ0VTOgorCQl2YWwgPSAwOworCisJCWlmIChucC0+c3JjcHJlZnMgJiBJUFY2X1BSRUZFUl9TUkNfVE1QKQorCQkJdmFsIHw9IElQVjZfUFJFRkVSX1NSQ19UTVA7CisJCWVsc2UgaWYgKG5wLT5zcmNwcmVmcyAmIElQVjZfUFJFRkVSX1NSQ19QVUJMSUMpCisJCQl2YWwgfD0gSVBWNl9QUkVGRVJfU1JDX1BVQkxJQzsKKwkJZWxzZSB7CisJCQkvKiBYWFg6IHNob3VsZCB3ZSByZXR1cm4gc3lzdGVtIGRlZmF1bHQ/ICovCisJCQl2YWwgfD0gSVBWNl9QUkVGRVJfU1JDX1BVQlRNUF9ERUZBVUxUOworCQl9CisKKwkJaWYgKG5wLT5zcmNwcmVmcyAmIElQVjZfUFJFRkVSX1NSQ19DT0EpCisJCQl2YWwgfD0gSVBWNl9QUkVGRVJfU1JDX0NPQTsKKwkJZWxzZQorCQkJdmFsIHw9IElQVjZfUFJFRkVSX1NSQ19IT01FOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQpAQCAtMTEyOCwxMyArMTE0NSwzIEBACiBFWFBPUlRfU1lNQk9MKGNvbXBhdF9pcHY2X2dldHNvY2tvcHQpOwogI2VuZGlmCiAKLWludCBfX2luaXQgaXB2Nl9wYWNrZXRfaW5pdCh2b2lkKQotewotCWRldl9hZGRfcGFjaygmaXB2Nl9wYWNrZXRfdHlwZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaXB2Nl9wYWNrZXRfY2xlYW51cCh2b2lkKQotewotCWRldl9yZW1vdmVfcGFjaygmaXB2Nl9wYWNrZXRfdHlwZSk7Ci19CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCBhYjIyOGQxLi41NGY5MWVmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxuZXQvbmRpc2MuaD4KICNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KICNpbmNsdWRlIDxuZXQvaXA2X3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CiAKICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAKQEAgLTEyNiwxMCArMTI3LDYgQEAKIC8qIEJpZyBtYyBsaXN0IGxvY2sgZm9yIGFsbCB0aGUgc29ja2V0cyAqLwogc3RhdGljIERFRklORV9SV0xPQ0soaXB2Nl9za19tY19sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBzb2NrZXQgKmlnbXA2X3NvY2tldDsKLQotaW50IF9faXB2Nl9kZXZfbWNfZGVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7Ci0KIHN0YXRpYyB2b2lkIGlnbXA2X2pvaW5fZ3JvdXAoc3RydWN0IGlmbWNhZGRyNiAqbWEpOwogc3RhdGljIHZvaWQgaWdtcDZfbGVhdmVfZ3JvdXAoc3RydWN0IGlmbWNhZGRyNiAqbWEpOwogc3RhdGljIHZvaWQgaWdtcDZfdGltZXJfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpOwpAQCAtMTc4LDExICsxNzUsMTIgQEAKICAqCXNvY2tldCBqb2luIG9uIG11bHRpY2FzdCBncm91cAogICovCiAKLWludCBpcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCitpbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCXN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3Q7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlpbnQgZXJyOwogCiAJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGFkZHIpKQpAQCAtMjA4LDE0ICsyMDYsMTQgQEAKIAogCWlmIChpZmluZGV4ID09IDApIHsKIAkJc3RydWN0IHJ0Nl9pbmZvICpydDsKLQkJcnQgPSBydDZfbG9va3VwKGFkZHIsIE5VTEwsIDAsIDApOworCQlydCA9IHJ0Nl9sb29rdXAobmV0LCBhZGRyLCBOVUxMLCAwLCAwKTsKIAkJaWYgKHJ0KSB7CiAJCQlkZXYgPSBydC0+cnQ2aV9kZXY7CiAJCQlkZXZfaG9sZChkZXYpOwogCQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CiAJCX0KIAl9IGVsc2UKLQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOworCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZpbmRleCk7CiAKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJc29ja19rZnJlZV9zKHNrLCBtY19sc3QsIHNpemVvZigqbWNfbHN0KSk7CkBAIC0yNTIsMTAgKzI1MCwxMSBAQAogLyoKICAqCXNvY2tldCBsZWF2ZSBvbiBtdWx0aWNhc3QgZ3JvdXAKICAqLwotaW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK2ludCBpcHY2X3NvY2tfbWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3QsICoqbG5rOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXdyaXRlX2xvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CiAJZm9yIChsbmsgPSAmbnAtPmlwdjZfbWNfbGlzdDsgKG1jX2xzdCA9ICpsbmspICE9TlVMTCA7IGxuayA9ICZtY19sc3QtPm5leHQpIHsKQEAgLTI2Niw3ICsyNjUsOCBAQAogCQkJKmxuayA9IG1jX2xzdC0+bmV4dDsKIAkJCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKIAotCQkJaWYgKChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgbWNfbHN0LT5pZmluZGV4KSkgIT0gTlVMTCkgeworCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIG1jX2xzdC0+aWZpbmRleCk7CisJCQlpZiAoZGV2ICE9IE5VTEwpIHsKIAkJCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKIAogCQkJCSh2b2lkKSBpcDZfbWNfbGVhdmVfc3JjKHNrLCBtY19sc3QsIGlkZXYpOwpAQCAtMjg2LDcgKzI4Niw5IEBACiAJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogfQogCi1zdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXA2X21jX2ZpbmRfZGV2KHN0cnVjdCBpbjZfYWRkciAqZ3JvdXAsIGludCBpZmluZGV4KQorc3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwNl9tY19maW5kX2RldihzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwLAorCQkJCQkgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IE5VTEw7CkBAIC0yOTQsMTQgKzI5NiwxNCBAQAogCWlmIChpZmluZGV4ID09IDApIHsKIAkJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAotCQlydCA9IHJ0Nl9sb29rdXAoZ3JvdXAsIE5VTEwsIDAsIDApOworCQlydCA9IHJ0Nl9sb29rdXAobmV0LCBncm91cCwgTlVMTCwgMCwgMCk7CiAJCWlmIChydCkgewogCQkJZGV2ID0gcnQtPnJ0NmlfZGV2OwogCQkJZGV2X2hvbGQoZGV2KTsKIAkJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCQl9CiAJfSBlbHNlCi0JCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKKwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpOwogCiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwpAQCAtMzI0LDYgKzMyNiw3IEBACiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3Q7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJd3JpdGVfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKIAl3aGlsZSAoKG1jX2xzdCA9IG5wLT5pcHY2X21jX2xpc3QpICE9IE5VTEwpIHsKQEAgLTMzMiw3ICszMzUsNyBAQAogCQlucC0+aXB2Nl9tY19saXN0ID0gbWNfbHN0LT5uZXh0OwogCQl3cml0ZV91bmxvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CiAKLQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIG1jX2xzdC0+aWZpbmRleCk7CisJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBtY19sc3QtPmlmaW5kZXgpOwogCQlpZiAoZGV2KSB7CiAJCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKIApAQCAtMzYxLDYgKzM2NCw3IEBACiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqaW5ldDYgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGlwNl9zZl9zb2NrbGlzdCAqcHNsOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlpbnQgaSwgaiwgcnY7CiAJaW50IGxlYXZlZ3JvdXAgPSAwOwogCWludCBwbWNsb2NrZWQgPSAwOwpAQCAtMzc2LDcgKzM4MCw3IEBACiAJaWYgKCFpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGdyb3VwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZGV2ID0gaXA2X21jX2ZpbmRfZGV2KGdyb3VwLCBwZ3NyLT5nc3JfaW50ZXJmYWNlKTsKKwlpZGV2ID0gaXA2X21jX2ZpbmRfZGV2KG5ldCwgZ3JvdXAsIHBnc3ItPmdzcl9pbnRlcmZhY2UpOwogCWlmICghaWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZGV2ID0gaWRldi0+ZGV2OwpAQCAtNTAwLDYgKzUwNCw3IEBACiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqaW5ldDYgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGlwNl9zZl9zb2NrbGlzdCAqbmV3cHNsLCAqcHNsOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlpbnQgbGVhdmVncm91cCA9IDA7CiAJaW50IGksIGVycjsKIApAQCAtNTExLDcgKzUxNiw3IEBACiAJICAgIGdzZi0+Z2ZfZm1vZGUgIT0gTUNBU1RfRVhDTFVERSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZGV2ID0gaXA2X21jX2ZpbmRfZGV2KGdyb3VwLCBnc2YtPmdmX2ludGVyZmFjZSk7CisJaWRldiA9IGlwNl9tY19maW5kX2RldihuZXQsIGdyb3VwLCBnc2YtPmdmX2ludGVyZmFjZSk7CiAKIAlpZiAoIWlkZXYpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTkyLDEzICs1OTcsMTQgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpcHY2X3BpbmZvICppbmV0NiA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgaXA2X3NmX3NvY2tsaXN0ICpwc2w7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJZ3JvdXAgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmdzZi0+Z2ZfZ3JvdXApLT5zaW42X2FkZHI7CiAKIAlpZiAoIWlwdjZfYWRkcl9pc19tdWx0aWNhc3QoZ3JvdXApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlkZXYgPSBpcDZfbWNfZmluZF9kZXYoZ3JvdXAsIGdzZi0+Z2ZfaW50ZXJmYWNlKTsKKwlpZGV2ID0gaXA2X21jX2ZpbmRfZGV2KG5ldCwgZ3JvdXAsIGdzZi0+Z2ZfaW50ZXJmYWNlKTsKIAogCWlmICghaWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02NTYsOCArNjYyLDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgaW5ldDZfbWNfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKm1jX2FkZHIsCi0Jc3RydWN0IGluNl9hZGRyICpzcmNfYWRkcikKK2ludCBpbmV0Nl9tY19jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWNfYWRkciwKKwkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmNfYWRkcikKIHsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgKm1jOwpAQCAtODYzLDcgKzg2OSw3IEBACiAvKgogICoJZGV2aWNlIG11bHRpY2FzdCBncm91cCBpbmMgKGFkZCBpZiBub3QgZm91bmQpCiAgKi8KLWludCBpcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQoraW50IGlwdjZfZGV2X21jX2luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGlmbWNhZGRyNiAqbWM7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKQEAgLTkzNCw3ICs5NDAsNyBAQAogLyoKICAqCWRldmljZSBtdWx0aWNhc3QgZ3JvdXAgZGVsCiAgKi8KLWludCBfX2lwdjZfZGV2X21jX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCitpbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpZm1jYWRkcjYgKm1hLCAqKm1hcDsKIApAQCAtOTU5LDcgKzk2NSw3IEBACiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKLWludCBpcHY2X2Rldl9tY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQoraW50IGlwdjZfZGV2X21jX2RlYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CiAJaW50IGVycjsKQEAgLTEwMDQsOCArMTAxMCw4IEBACiAvKgogICoJY2hlY2sgaWYgdGhlIGludGVyZmFjZS9hZGRyZXNzIHBhaXIgaXMgdmFsaWQKICAqLwotaW50IGlwdjZfY2hrX21jYXN0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICpncm91cCwKLQlzdHJ1Y3QgaW42X2FkZHIgKnNyY19hZGRyKQoraW50IGlwdjZfY2hrX21jYXN0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cCwKKwkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjX2FkZHIpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICptYzsKQEAgLTEzOTMsMTAgKzEzOTksMTIgQEAKIAogc3RhdGljIHN0cnVjdCBza19idWZmICptbGRfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2l6ZSkKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBpZ21wNl9zb2NrZXQtPnNrOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBuZXQtPmlwdjYuaWdtcF9zazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBtbGQyX3JlcG9ydCAqcG1yOwogCXN0cnVjdCBpbjZfYWRkciBhZGRyX2J1ZjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyOwogCWludCBlcnI7CiAJdTggcmFbOF0gPSB7IElQUFJPVE9fSUNNUFY2LCAwLAogCQkgICAgIElQVjZfVExWX1JPVVRFUkFMRVJULCAyLCAwLCAwLApAQCAtMTQxNSwxMCArMTQyMywxMSBAQAogCQkgKiB1c2UgdW5zcGVjaWZpZWQgYWRkcmVzcyBhcyB0aGUgc291cmNlIGFkZHJlc3MKIAkJICogd2hlbiBhIHZhbGlkIGxpbmstbG9jYWwgYWRkcmVzcyBpcyBub3QgYXZhaWxhYmxlLgogCQkgKi8KLQkJbWVtc2V0KCZhZGRyX2J1ZiwgMCwgc2l6ZW9mKGFkZHJfYnVmKSk7Ci0JfQorCQlzYWRkciA9ICZpbjZhZGRyX2FueTsKKwl9IGVsc2UKKwkJc2FkZHIgPSAmYWRkcl9idWY7CiAKLQlpcDZfbmRfaGRyKHNrLCBza2IsIGRldiwgJmFkZHJfYnVmLCAmbWxkMl9hbGxfbWNyLCBORVhUSERSX0hPUCwgMCk7CisJaXA2X25kX2hkcihzaywgc2tiLCBkZXYsIHNhZGRyLCAmbWxkMl9hbGxfbWNyLCBORVhUSERSX0hPUCwgMCk7CiAKIAltZW1jcHkoc2tiX3B1dChza2IsIHNpemVvZihyYSkpLCByYSwgc2l6ZW9mKHJhKSk7CiAKQEAgLTE0MzMsMjUgKzE0NDIsNiBAQAogCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG1sZF9kZXZfcXVldWVfeG1pdDIoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JdW5zaWduZWQgY2hhciBoYVtNQVhfQUREUl9MRU5dOwotCi0JbmRpc2NfbWNfbWFwKCZpcHY2X2hkcihza2IpLT5kYWRkciwgaGEsIGRldiwgMSk7Ci0JaWYgKGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfSVBWNiwgaGEsIE5VTEwsIHNrYi0+bGVuKSA8IDApIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWxkX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuIE5GX0hPT0soUEZfSU5FVDYsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBza2IsIE5VTEwsIHNrYi0+ZGV2LAotCQkgICAgICAgbWxkX2Rldl9xdWV1ZV94bWl0Mik7Ci19Ci0KIHN0YXRpYyB2b2lkIG1sZF9zZW5kcGFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcHY2aGRyICpwaXA2ID0gaXB2Nl9oZHIoc2tiKTsKQEAgLTE0NTksNyArMTQ0OSw5IEBACiAJCQkgICAgICAoc3RydWN0IG1sZDJfcmVwb3J0ICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAlpbnQgcGF5bG9hZF9sZW4sIG1sZGxlbjsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoc2tiLT5kZXYpOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCWludCBlcnI7CisJc3RydWN0IGZsb3dpIGZsOwogCiAJSVA2X0lOQ19TVEFUUyhpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CiAJcGF5bG9hZF9sZW4gPSAoc2tiLT50YWlsIC0gc2tiLT5uZXR3b3JrX2hlYWRlcikgLSBzaXplb2YoKnBpcDYpOwpAQCAtMTQ2OSw4ICsxNDYxLDI1IEBACiAJcG1yLT5jc3VtID0gY3N1bV9pcHY2X21hZ2ljKCZwaXA2LT5zYWRkciwgJnBpcDYtPmRhZGRyLCBtbGRsZW4sCiAJCUlQUFJPVE9fSUNNUFY2LCBjc3VtX3BhcnRpYWwoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwKIAkJCQkJICAgICBtbGRsZW4sIDApKTsKKworCXNrYi0+ZHN0ID0gaWNtcDZfZHN0X2FsbG9jKHNrYi0+ZGV2LCBOVUxMLCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpOworCisJaWYgKCFza2ItPmRzdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWNtcHY2X2Zsb3dfaW5pdChuZXQtPmlwdjYuaWdtcF9zaywgJmZsLCBJQ01QVjZfTUxEMl9SRVBPUlQsCisJCQkgJmlwdjZfaGRyKHNrYiktPnNhZGRyLCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCisJCQkgc2tiLT5kZXYtPmlmaW5kZXgpOworCisJZXJyID0geGZybV9sb29rdXAoJnNrYi0+ZHN0LCAmZmwsIE5VTEwsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKwogCWVyciA9IE5GX0hPT0soUEZfSU5FVDYsIE5GX0lORVRfTE9DQUxfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LAotCQltbGRfZGV2X3F1ZXVlX3htaXQpOworCQkgICAgICBkc3Rfb3V0cHV0KTsKK291dDoKIAlpZiAoIWVycikgewogCQlJQ01QNk1TR09VVF9JTkNfU1RBVFNfQkgoaWRldiwgSUNNUFY2X01MRDJfUkVQT1JUKTsKIAkJSUNNUDZfSU5DX1NUQVRTX0JIKGlkZXYsIElDTVA2X01JQl9PVVRNU0dTKTsKQEAgLTE0ODAsNiArMTQ4OSwxMSBAQAogCiAJaWYgKGxpa2VseShpZGV2ICE9IE5VTEwpKQogCQlpbjZfZGV2X3B1dChpZGV2KTsKKwlyZXR1cm47CisKK2Vycl9vdXQ6CisJa2ZyZWVfc2tiKHNrYik7CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyBpbnQgZ3JlY19zaXplKHN0cnVjdCBpZm1jYWRkcjYgKnBtYywgaW50IHR5cGUsIGludCBnZGVsLCBpbnQgc2RlbCkKQEAgLTE3NDksMjggKzE3NjMsMjggQEAKIAogc3RhdGljIHZvaWQgaWdtcDZfc2VuZChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0eXBlKQogewotCXN0cnVjdCBzb2NrICpzayA9IGlnbXA2X3NvY2tldC0+c2s7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBzb2NrICpzayA9IG5ldC0+aXB2Ni5pZ21wX3NrOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWNtcDZoZHIgKmhkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNuZF9hZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc25kX2FkZHIsICpzYWRkcjsKIAlzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwOwogCXN0cnVjdCBpbjZfYWRkciBhZGRyX2J1ZjsKLQlzdHJ1Y3QgaW42X2FkZHIgYWxsX3JvdXRlcnM7CiAJaW50IGVyciwgbGVuLCBwYXlsb2FkX2xlbiwgZnVsbF9sZW47CiAJdTggcmFbOF0gPSB7IElQUFJPVE9fSUNNUFY2LCAwLAogCQkgICAgIElQVjZfVExWX1JPVVRFUkFMRVJULCAyLCAwLCAwLAogCQkgICAgIElQVjZfVExWX1BBRE4sIDAgfTsKKwlzdHJ1Y3QgZmxvd2kgZmw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJSVA2X0lOQ19TVEFUUyhfX2luNl9kZXZfZ2V0KGRldiksCiAJCSAgICAgIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlzbmRfYWRkciA9IGFkZHI7Ci0JaWYgKHR5cGUgPT0gSUNNUFY2X01HTV9SRURVQ1RJT04pIHsKLQkJc25kX2FkZHIgPSAmYWxsX3JvdXRlcnM7Ci0JCWlwdjZfYWRkcl9hbGxfcm91dGVycygmYWxsX3JvdXRlcnMpOwotCX0KKwlpZiAodHlwZSA9PSBJQ01QVjZfTUdNX1JFRFVDVElPTikKKwkJc25kX2FkZHIgPSAmaW42YWRkcl9saW5rbG9jYWxfYWxscm91dGVyczsKKwllbHNlCisJCXNuZF9hZGRyID0gYWRkcjsKIAogCWxlbiA9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAJcGF5bG9hZF9sZW4gPSBsZW4gKyBzaXplb2YocmEpOwpAQCAtMTc5MywxMCArMTgwNywxMSBAQAogCQkgKiB1c2UgdW5zcGVjaWZpZWQgYWRkcmVzcyBhcyB0aGUgc291cmNlIGFkZHJlc3MKIAkJICogd2hlbiBhIHZhbGlkIGxpbmstbG9jYWwgYWRkcmVzcyBpcyBub3QgYXZhaWxhYmxlLgogCQkgKi8KLQkJbWVtc2V0KCZhZGRyX2J1ZiwgMCwgc2l6ZW9mKGFkZHJfYnVmKSk7Ci0JfQorCQlzYWRkciA9ICZpbjZhZGRyX2FueTsKKwl9IGVsc2UKKwkJc2FkZHIgPSAmYWRkcl9idWY7CiAKLQlpcDZfbmRfaGRyKHNrLCBza2IsIGRldiwgJmFkZHJfYnVmLCBzbmRfYWRkciwgTkVYVEhEUl9IT1AsIHBheWxvYWRfbGVuKTsKKwlpcDZfbmRfaGRyKHNrLCBza2IsIGRldiwgc2FkZHIsIHNuZF9hZGRyLCBORVhUSERSX0hPUCwgcGF5bG9hZF9sZW4pOwogCiAJbWVtY3B5KHNrYl9wdXQoc2tiLCBzaXplb2YocmEpKSwgcmEsIHNpemVvZihyYSkpOwogCkBAIC0xODA3LDE0ICsxODIyLDI5IEBACiAJYWRkcnAgPSAoc3RydWN0IGluNl9hZGRyICopIHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiAJaXB2Nl9hZGRyX2NvcHkoYWRkcnAsIGFkZHIpOwogCi0JaGRyLT5pY21wNl9ja3N1bSA9IGNzdW1faXB2Nl9tYWdpYygmYWRkcl9idWYsIHNuZF9hZGRyLCBsZW4sCisJaGRyLT5pY21wNl9ja3N1bSA9IGNzdW1faXB2Nl9tYWdpYyhzYWRkciwgc25kX2FkZHIsIGxlbiwKIAkJCQkJICAgSVBQUk9UT19JQ01QVjYsCiAJCQkJCSAgIGNzdW1fcGFydGlhbCgoX191OCAqKSBoZHIsIGxlbiwgMCkpOwogCiAJaWRldiA9IGluNl9kZXZfZ2V0KHNrYi0+ZGV2KTsKIAorCXNrYi0+ZHN0ID0gaWNtcDZfZHN0X2FsbG9jKHNrYi0+ZGV2LCBOVUxMLCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpOworCWlmICghc2tiLT5kc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWljbXB2Nl9mbG93X2luaXQoc2ssICZmbCwgdHlwZSwKKwkJCSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkciwKKwkJCSBza2ItPmRldi0+aWZpbmRleCk7CisKKwllcnIgPSB4ZnJtX2xvb2t1cCgmc2tiLT5kc3QsICZmbCwgTlVMTCwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCiAJZXJyID0gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSU5FVF9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsCi0JCW1sZF9kZXZfcXVldWVfeG1pdCk7CisJCSAgICAgIGRzdF9vdXRwdXQpOworb3V0OgogCWlmICghZXJyKSB7CiAJCUlDTVA2TVNHT1VUX0lOQ19TVEFUUyhpZGV2LCB0eXBlKTsKIAkJSUNNUDZfSU5DX1NUQVRTKGlkZXYsIElDTVA2X01JQl9PVVRNU0dTKTsKQEAgLTE4MjUsNiArMTg1NSwxMCBAQAogCWlmIChsaWtlbHkoaWRldiAhPSBOVUxMKSkKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJcmV0dXJuOworCitlcnJfb3V0OgorCWtmcmVlX3NrYihza2IpOworCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgaW50IGlwNl9tY19kZWwxX3NyYyhzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsIGludCBzZm1vZGUsCkBAIC0yMjc2LDI0ICsyMzEwLDE5IEBACiB2b2lkIGlwdjZfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICppOwotCXN0cnVjdCBpbjZfYWRkciBtYWRkcjsKIAogCS8qIERlYWN0aXZhdGUgdGltZXJzICovCiAJaXB2Nl9tY19kb3duKGlkZXYpOwogCiAJLyogRGVsZXRlIGFsbC1ub2RlcyBhZGRyZXNzLiAqLwotCWlwdjZfYWRkcl9hbGxfbm9kZXMoJm1hZGRyKTsKLQogCS8qIFdlIGNhbm5vdCBjYWxsIGlwdjZfZGV2X21jX2RlYygpIGRpcmVjdGx5LCBvdXIgY2FsbGVyIGluCiAJICogYWRkcmNvbmYuYyBoYXMgTlVMTCdkIG91dCBkZXYtPmlwNl9wdHIgc28gaW42X2Rldl9nZXQoKSB3aWxsCiAJICogZmFpbC4KIAkgKi8KLQlfX2lwdjZfZGV2X21jX2RlYyhpZGV2LCAmbWFkZHIpOworCV9faXB2Nl9kZXZfbWNfZGVjKGlkZXYsICZpbjZhZGRyX2xpbmtsb2NhbF9hbGxub2Rlcyk7CiAKLQlpZiAoaWRldi0+Y25mLmZvcndhcmRpbmcpIHsKLQkJaXB2Nl9hZGRyX2FsbF9yb3V0ZXJzKCZtYWRkcik7Ci0JCV9faXB2Nl9kZXZfbWNfZGVjKGlkZXYsICZtYWRkcik7Ci0JfQorCWlmIChpZGV2LT5jbmYuZm9yd2FyZGluZykKKwkJX19pcHY2X2Rldl9tY19kZWMoaWRldiwgJmluNmFkZHJfbGlua2xvY2FsX2FsbHJvdXRlcnMpOwogCiAJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CiAJd2hpbGUgKChpID0gaWRldi0+bWNfbGlzdCkgIT0gTlVMTCkgewpAQCAtMjMxMCw2ICsyMzM5LDcgQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3QgaWdtcDZfbWNfaXRlcl9zdGF0ZSB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIH07CkBAIC0yMzIwLDkgKzIzNTAsMTAgQEAKIHsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICppbSA9IE5VTEw7CiAJc3RydWN0IGlnbXA2X21jX2l0ZXJfc3RhdGUgKnN0YXRlID0gaWdtcDZfbWNfc2VxX3ByaXZhdGUoc2VxKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCXN0YXRlLT5pZGV2ID0gTlVMTDsKLQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBzdGF0ZS0+ZGV2KSB7CisJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgc3RhdGUtPmRldikgewogCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCQlpZGV2ID0gaW42X2Rldl9nZXQoc3RhdGUtPmRldik7CiAJCWlmICghaWRldikKQEAgLTI0MjQsOCArMjQ1NSw4IEBACiAKIHN0YXRpYyBpbnQgaWdtcDZfbWNfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmlnbXA2X21jX3NlcV9vcHMsCi0JCQlzaXplb2Yoc3RydWN0IGlnbXA2X21jX2l0ZXJfc3RhdGUpKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmaWdtcDZfbWNfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGlnbXA2X21jX2l0ZXJfc3RhdGUpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWdtcDZfbWNfc2VxX2ZvcHMgPSB7CkBAIC0yNDMzLDEwICsyNDY0LDExIEBACiAJLm9wZW4JCT0JaWdtcDZfbWNfc2VxX29wZW4sCiAJLnJlYWQJCT0Jc2VxX3JlYWQsCiAJLmxsc2VlawkJPQlzZXFfbHNlZWssCi0JLnJlbGVhc2UJPQlzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlCT0Jc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogc3RydWN0IGlnbXA2X21jZl9pdGVyX3N0YXRlIHsKKwlzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpZm1jYWRkcjYgKmltOwpAQCAtMjQ0OSwxMCArMjQ4MSwxMSBAQAogCXN0cnVjdCBpcDZfc2ZfbGlzdCAqcHNmID0gTlVMTDsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICppbSA9IE5VTEw7CiAJc3RydWN0IGlnbXA2X21jZl9pdGVyX3N0YXRlICpzdGF0ZSA9IGlnbXA2X21jZl9zZXFfcHJpdmF0ZShzZXEpOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJc3RhdGUtPmlkZXYgPSBOVUxMOwogCXN0YXRlLT5pbSA9IE5VTEw7Ci0JZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgc3RhdGUtPmRldikgeworCWZvcl9lYWNoX25ldGRldihuZXQsIHN0YXRlLT5kZXYpIHsKIAkJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAkJaWRldiA9IGluNl9kZXZfZ2V0KHN0YXRlLT5kZXYpOwogCQlpZiAodW5saWtlbHkoaWRldiA9PSBOVUxMKSkKQEAgLTI1ODQsOCArMjYxNyw4IEBACiAKIHN0YXRpYyBpbnQgaWdtcDZfbWNmX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZpZ21wNl9tY2Zfc2VxX29wcywKLQkJCXNpemVvZihzdHJ1Y3QgaWdtcDZfbWNmX2l0ZXJfc3RhdGUpKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmaWdtcDZfbWNmX3NlcV9vcHMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpZ21wNl9tY2ZfaXRlcl9zdGF0ZSkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZ21wNl9tY2Zfc2VxX2ZvcHMgPSB7CkBAIC0yNTkzLDQ3ICsyNjI2LDg4IEBACiAJLm9wZW4JCT0JaWdtcDZfbWNmX3NlcV9vcGVuLAogCS5yZWFkCQk9CXNlcV9yZWFkLAogCS5sbHNlZWsJCT0Jc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0Jc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZQk9CXNlcV9yZWxlYXNlX25ldCwKIH07Ci0jZW5kaWYKIAotaW50IF9faW5pdCBpZ21wNl9pbml0KHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpCitzdGF0aWMgaW50IGlnbXA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0Jc3RydWN0IGlwdjZfcGluZm8gKm5wOwotCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZXJyOwogCi0JZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fSUNNUFY2LCAmaWdtcDZfc29ja2V0KTsKKwllcnIgPSAtRU5PTUVNOworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaWdtcDYiLCBTX0lSVUdPLCAmaWdtcDZfbWNfc2VxX2ZvcHMpKQorCQlnb3RvIG91dDsKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgIm1jZmlsdGVyNiIsIFNfSVJVR08sCisJCQkJICAmaWdtcDZfbWNmX3NlcV9mb3BzKSkKKwkJZ290byBvdXRfcHJvY19uZXRfaWdtcDY7CisKKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7CisKK291dF9wcm9jX25ldF9pZ21wNjoKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaWdtcDYiKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgaWdtcDZfcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAibWNmaWx0ZXI2Iik7CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlnbXA2Iik7Cit9CisjZWxzZQorc3RhdGljIGludCBpZ21wNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgaWdtcDZfcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBpZ21wNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW50IGVycjsKKworCWVyciA9IGluZXRfY3RsX3NvY2tfY3JlYXRlKCZuZXQtPmlwdjYuaWdtcF9zaywgUEZfSU5FVDYsCisJCQkJICAgU09DS19SQVcsIElQUFJPVE9fSUNNUFY2LCBuZXQpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBJR01QNiBjb250cm9sIHNvY2tldCAoZXJyICVkKS5cbiIsCiAJCSAgICAgICBlcnIpOwotCQlpZ21wNl9zb2NrZXQgPSBOVUxMOyAvKiBGb3Igc2FmZXR5LiAqLwotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAl9CiAKLQlzayA9IGlnbXA2X3NvY2tldC0+c2s7Ci0Jc2stPnNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwotCXNrLT5za19wcm90LT51bmhhc2goc2spOworCWluZXQ2X3NrKG5ldC0+aXB2Ni5pZ21wX3NrKS0+aG9wX2xpbWl0ID0gMTsKIAotCW5wID0gaW5ldDZfc2soc2spOwotCW5wLT5ob3BfbGltaXQgPSAxOworCWVyciA9IGlnbXA2X3Byb2NfaW5pdChuZXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3NvY2tfY3JlYXRlOworb3V0OgorCXJldHVybiBlcnI7CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlnbXA2IiwgU19JUlVHTywgJmlnbXA2X21jX3NlcV9mb3BzKTsKLQlwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJtY2ZpbHRlcjYiLCBTX0lSVUdPLCAmaWdtcDZfbWNmX3NlcV9mb3BzKTsKLSNlbmRpZgorb3V0X3NvY2tfY3JlYXRlOgorCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjYuaWdtcF9zayk7CisJZ290byBvdXQ7Cit9CiAKLQlyZXR1cm4gMDsKK3N0YXRpYyB2b2lkIGlnbXA2X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbmV0X2N0bF9zb2NrX2Rlc3Ryb3kobmV0LT5pcHY2LmlnbXBfc2spOworCWlnbXA2X3Byb2NfZXhpdChuZXQpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlnbXA2X25ldF9vcHMgPSB7CisJLmluaXQgPSBpZ21wNl9uZXRfaW5pdCwKKwkuZXhpdCA9IGlnbXA2X25ldF9leGl0LAorfTsKKworaW50IF9faW5pdCBpZ21wNl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlnbXA2X25ldF9vcHMpOwogfQogCiB2b2lkIGlnbXA2X2NsZWFudXAodm9pZCkKIHsKLQlzb2NrX3JlbGVhc2UoaWdtcDZfc29ja2V0KTsKLQlpZ21wNl9zb2NrZXQgPSBOVUxMOyAvKiBmb3Igc2FmZXR5ICovCi0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJtY2ZpbHRlcjYiKTsKLQlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAiaWdtcDYiKTsKLSNlbmRpZgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaWdtcDZfbmV0X29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9taXA2LmMgYi9uZXQvaXB2Ni9taXA2LmMKaW5kZXggY2Q4YTViZC4uYWQxY2M1YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWlwNi5jCisrKyBiL25ldC9pcHY2L21pcDYuYwpAQCAtNDQsOSArNDQsOSBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHBhZGxlbiA9PSAxKSB7Ci0JCWRhdGFbMF0gPSBNSVA2X09QVF9QQURfMTsKKwkJZGF0YVswXSA9IElQVjZfVExWX1BBRDA7CiAJfSBlbHNlIGlmIChwYWRsZW4gPiAxKSB7Ci0JCWRhdGFbMF0gPSBNSVA2X09QVF9QQURfTjsKKwkJZGF0YVswXSA9IElQVjZfVExWX1BBRE47CiAJCWRhdGFbMV0gPSBwYWRsZW4gLSAyOwogCQlpZiAocGFkbGVuID4gMikKIAkJCW1lbXNldChkYXRhKzIsIDAsIGRhdGFbMV0pOwpAQCAtMzA0LDEzICszMDQsMTMgQEAKIHN0YXRpYyBpbnQgbWlwNl9kZXN0b3B0X2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CiAJaWYgKHgtPmlkLnNwaSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogc3BpIGlzIG5vdCAwOiAldVxuIiwgX19GVU5DVElPTl9fLAorCQlwcmludGsoS0VSTl9JTkZPICIlczogc3BpIGlzIG5vdCAwOiAldVxuIiwgX19mdW5jX18sCiAJCSAgICAgICB4LT5pZC5zcGkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHgtPnByb3BzLm1vZGUgIT0gWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzdGF0ZSdzIG1vZGUgaXMgbm90ICV1OiAldVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OLCB4LT5wcm9wcy5tb2RlKTsKKwkJICAgICAgIF9fZnVuY19fLCBYRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04sIHgtPnByb3BzLm1vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzOSwxMyArNDM5LDEzIEBACiBzdGF0aWMgaW50IG1pcDZfcnRoZHJfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKIAlpZiAoeC0+aWQuc3BpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcGkgaXMgbm90IDA6ICV1XG4iLCBfX0ZVTkNUSU9OX18sCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzcGkgaXMgbm90IDA6ICV1XG4iLCBfX2Z1bmNfXywKIAkJICAgICAgIHgtPmlkLnNwaSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoeC0+cHJvcHMubW9kZSAhPSBYRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04pIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN0YXRlJ3MgbW9kZSBpcyBub3QgJXU6ICV1XG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBYRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04sIHgtPnByb3BzLm1vZGUpOworCQkgICAgICAgX19mdW5jX18sIFhGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiwgeC0+cHJvcHMubW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDgwLDE1ICs0ODAsMTUgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNb2JpbGUgSVB2NlxuIik7CiAKIAlpZiAoeGZybV9yZWdpc3Rlcl90eXBlKCZtaXA2X2Rlc3RvcHRfdHlwZSwgQUZfSU5FVDYpIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgYWRkIHhmcm0gdHlwZShkZXN0b3B0KVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbid0IGFkZCB4ZnJtIHR5cGUoZGVzdG9wdClcbiIsIF9fZnVuY19fKTsKIAkJZ290byBtaXA2X2Rlc3RvcHRfeGZybV9mYWlsOwogCX0KIAlpZiAoeGZybV9yZWdpc3Rlcl90eXBlKCZtaXA2X3J0aGRyX3R5cGUsIEFGX0lORVQ2KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbid0IGFkZCB4ZnJtIHR5cGUocnRoZHIpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgYWRkIHhmcm0gdHlwZShydGhkcilcbiIsIF9fZnVuY19fKTsKIAkJZ290byBtaXA2X3J0aGRyX3hmcm1fZmFpbDsKIAl9CiAJaWYgKHJhd3Y2X21oX2ZpbHRlcl9yZWdpc3RlcihtaXA2X21oX2ZpbHRlcikgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW4ndCBhZGQgcmF3djYgbWggZmlsdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgYWRkIHJhd3Y2IG1oIGZpbHRlclxuIiwgX19mdW5jX18pOwogCQlnb3RvIG1pcDZfcmF3djZfbWhfZmFpbDsKIAl9CiAKQEAgLTUwNiwxMSArNTA2LDExIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbWlwNl9maW5pKHZvaWQpCiB7CiAJaWYgKHJhd3Y2X21oX2ZpbHRlcl91bnJlZ2lzdGVyKG1pcDZfbWhfZmlsdGVyKSA8IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW4ndCByZW1vdmUgcmF3djYgbWggZmlsdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgcmVtb3ZlIHJhd3Y2IG1oIGZpbHRlclxuIiwgX19mdW5jX18pOwogCWlmICh4ZnJtX3VucmVnaXN0ZXJfdHlwZSgmbWlwNl9ydGhkcl90eXBlLCBBRl9JTkVUNikgPCAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgcmVtb3ZlIHhmcm0gdHlwZShydGhkcilcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW4ndCByZW1vdmUgeGZybSB0eXBlKHJ0aGRyKVxuIiwgX19mdW5jX18pOwogCWlmICh4ZnJtX3VucmVnaXN0ZXJfdHlwZSgmbWlwNl9kZXN0b3B0X3R5cGUsIEFGX0lORVQ2KSA8IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW4ndCByZW1vdmUgeGZybSB0eXBlKGRlc3RvcHQpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuJ3QgcmVtb3ZlIHhmcm0gdHlwZShkZXN0b3B0KVxuIiwgX19mdW5jX18pOwogfQogCiBtb2R1bGVfaW5pdChtaXA2X2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggMGQzM2E3ZC4uMmM3NDg4NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC04NCwxMyArODQsMTIgQEAKIAogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpuZGlzY19zb2NrZXQ7Ci0KIHN0YXRpYyB1MzIgbmRpc2NfaGFzaChjb25zdCB2b2lkICpwa2V5LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbmRpc2NfY29uc3RydWN0b3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpOwogc3RhdGljIHZvaWQgbmRpc2Nfc29saWNpdChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0yNzAsNyArMjY5LDcgQEAKIAkJCWlmIChuZG9wdHMtPm5kX29wdF9hcnJheVtuZF9vcHQtPm5kX29wdF90eXBlXSkgewogCQkJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCiAJCQkJCSAgICIlcygpOiBkdXBsaWNhdGVkIE5ENiBvcHRpb24gZm91bmQ6IHR5cGU9JWRcbiIsCi0JCQkJCSAgIF9fRlVOQ1RJT05fXywKKwkJCQkJICAgX19mdW5jX18sCiAJCQkJCSAgIG5kX29wdC0+bmRfb3B0X3R5cGUpOwogCQkJfSBlbHNlIHsKIAkJCQluZG9wdHMtPm5kX29wdF9hcnJheVtuZF9vcHQtPm5kX29wdF90eXBlXSA9IG5kX29wdDsKQEAgLTMwMSw3ICszMDAsNyBAQAogCQkJCSAqLwogCQkJCU5EX1BSSU5USzIoS0VSTl9OT1RJQ0UKIAkJCQkJICAgIiVzKCk6IGlnbm9yZWQgdW5zdXBwb3J0ZWQgb3B0aW9uOyB0eXBlPSVkLCBsZW49JWRcbiIsCi0JCQkJCSAgIF9fRlVOQ1RJT05fXywKKwkJCQkJICAgX19mdW5jX18sCiAJCQkJCSAgIG5kX29wdC0+bmRfb3B0X3R5cGUsIG5kX29wdC0+bmRfb3B0X2xlbik7CiAJCQl9CiAJCX0KQEAgLTQ0MSwzMCArNDQwLDE3IEBACiAvKgogICoJU2VuZCBhIE5laWdoYm91ciBBZHZlcnRpc2VtZW50CiAgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG5kaXNjX2Zsb3dfaW5pdChzdHJ1Y3QgZmxvd2kgKmZsLCB1OCB0eXBlLAotCQkJICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkgICAgaW50IG9pZikKLXsKLQltZW1zZXQoZmwsIDAsIHNpemVvZigqZmwpKTsKLQlpcHY2X2FkZHJfY29weSgmZmwtPmZsNl9zcmMsIHNhZGRyKTsKLQlpcHY2X2FkZHJfY29weSgmZmwtPmZsNl9kc3QsIGRhZGRyKTsKLQlmbC0+cHJvdG8JIAk9IElQUFJPVE9fSUNNUFY2OwotCWZsLT5mbF9pY21wX3R5cGUJPSB0eXBlOwotCWZsLT5mbF9pY21wX2NvZGUJPSAwOwotCWZsLT5vaWYJCQk9IG9pZjsKLQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KG5kaXNjX3NvY2tldC0+c2ssIGZsKTsKLX0KLQogc3RhdGljIHZvaWQgX19uZGlzY19zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCi0JCQkgc3RydWN0IGluNl9hZGRyICpkYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCSBzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2aCwgc3RydWN0IGluNl9hZGRyICp0YXJnZXQsCisJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJIHN0cnVjdCBpY21wNmhkciAqaWNtcDZoLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldCwKIAkJCSBpbnQgbGxpbmZvKQogewogCXN0cnVjdCBmbG93aSBmbDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7Ci0Jc3RydWN0IHNvY2sgKnNrID0gbmRpc2Nfc29ja2V0LT5zazsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisJc3RydWN0IHNvY2sgKnNrID0gbmV0LT5pcHY2Lm5kaXNjX3NrOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGljbXA2aGRyICpoZHI7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKQEAgLTQ3NCwxMCArNDYwLDkgQEAKIAogCXR5cGUgPSBpY21wNmgtPmljbXA2X3R5cGU7CiAKLQluZGlzY19mbG93X2luaXQoJmZsLCB0eXBlLCBzYWRkciwgZGFkZHIsCi0JCQlkZXYtPmlmaW5kZXgpOworCWljbXB2Nl9mbG93X2luaXQoc2ssICZmbCwgdHlwZSwgc2FkZHIsIGRhZGRyLCBkZXYtPmlmaW5kZXgpOwogCi0JZHN0ID0gbmRpc2NfZHN0X2FsbG9jKGRldiwgbmVpZ2gsIGRhZGRyLCBpcDZfb3V0cHV0KTsKKwlkc3QgPSBpY21wNl9kc3RfYWxsb2MoZGV2LCBuZWlnaCwgZGFkZHIpOwogCWlmICghZHN0KQogCQlyZXR1cm47CiAKQEAgLTQ5OSw3ICs0ODQsNyBAQAogCWlmICghc2tiKSB7CiAJCU5EX1BSSU5USzAoS0VSTl9FUlIKIAkJCSAgICJJQ01QdjYgTkQ6ICVzKCkgZmFpbGVkIHRvIGFsbG9jYXRlIGFuIHNrYi5cbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlkc3RfcmVsZWFzZShkc3QpOwogCQlyZXR1cm47CiAJfQpAQCAtNTQ1LDI1ICs1MzAsMjggQEAKIH0KIAogc3RhdGljIHZvaWQgbmRpc2Nfc2VuZF9uYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKLQkJICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwgc3RydWN0IGluNl9hZGRyICpzb2xpY2l0ZWRfYWRkciwKLQkJICAgaW50IHJvdXRlciwgaW50IHNvbGljaXRlZCwgaW50IG92ZXJyaWRlLCBpbnQgaW5jX29wdCkKKwkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzb2xpY2l0ZWRfYWRkciwKKwkJCSAgaW50IHJvdXRlciwgaW50IHNvbGljaXRlZCwgaW50IG92ZXJyaWRlLCBpbnQgaW5jX29wdCkKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgdG1wYWRkcjsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7Ci0Jc3RydWN0IGluNl9hZGRyICpzcmNfYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyY19hZGRyOwogCXN0cnVjdCBpY21wNmhkciBpY21wNmggPSB7CiAJCS5pY21wNl90eXBlID0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQsCiAJfTsKIAogCS8qIGZvciBhbnljYXN0IG9yIHByb3h5LCBzb2xpY2l0ZWRfYWRkciAhPSBzcmNfYWRkciAqLwotCWlmcCA9IGlwdjZfZ2V0X2lmYWRkcigmaW5pdF9uZXQsIHNvbGljaXRlZF9hZGRyLCBkZXYsIDEpOworCWlmcCA9IGlwdjZfZ2V0X2lmYWRkcihkZXZfbmV0KGRldiksIHNvbGljaXRlZF9hZGRyLCBkZXYsIDEpOwogCWlmIChpZnApIHsKIAkJc3JjX2FkZHIgPSBzb2xpY2l0ZWRfYWRkcjsKIAkJaWYgKGlmcC0+ZmxhZ3MgJiBJRkFfRl9PUFRJTUlTVElDKQogCQkJb3ZlcnJpZGUgPSAwOwogCQlpbjZfaWZhX3B1dChpZnApOwogCX0gZWxzZSB7Ci0JCWlmIChpcHY2X2Rldl9nZXRfc2FkZHIoZGV2LCBkYWRkciwgJnRtcGFkZHIpKQorCQlpZiAoaXB2Nl9kZXZfZ2V0X3NhZGRyKGRldiwgZGFkZHIsCisJCQkJICAgICAgIGluZXQ2X3NrKGRldl9uZXQoZGV2KS0+aXB2Ni5uZGlzY19zayktPnNyY3ByZWZzLAorCQkJCSAgICAgICAmdG1wYWRkcikpCiAJCQlyZXR1cm47CiAJCXNyY19hZGRyID0gJnRtcGFkZHI7CiAJfQpAQCAtNTc4LDggKzU2Niw4IEBACiB9CiAKIHZvaWQgbmRpc2Nfc2VuZF9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKLQkJICAgc3RydWN0IGluNl9hZGRyICpzb2xpY2l0LAotCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQorCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNvbGljaXQsCisJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCiB7CiAJc3RydWN0IGluNl9hZGRyIGFkZHJfYnVmOwogCXN0cnVjdCBpY21wNmhkciBpY21wNmggPSB7CkBAIC01OTgsOCArNTg2LDggQEAKIAkJICAgICAhaXB2Nl9hZGRyX2FueShzYWRkcikgPyBORF9PUFRfU09VUkNFX0xMX0FERFIgOiAwKTsKIH0KIAotdm9pZCBuZGlzY19zZW5kX3JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCSAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCit2b2lkIG5kaXNjX3NlbmRfcnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcikKIHsKIAlzdHJ1Y3QgaWNtcDZoZHIgaWNtcDZoID0gewogCQkuaWNtcDZfdHlwZSA9IE5ESVNDX1JPVVRFUl9TT0xJQ0lUQVRJT04sCkBAIC02MTYsNyArNjA0LDcgQEAKIAkgKiBzdXBwcmVzcyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBzbGxhby4KIAkgKi8KIAlpZiAoc2VuZF9zbGxhbykgewotCQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnAgPSBpcHY2X2dldF9pZmFkZHIoJmluaXRfbmV0LCBzYWRkciwKKwkJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwID0gaXB2Nl9nZXRfaWZhZGRyKGRldl9uZXQoZGV2KSwgc2FkZHIsCiAJCQkJCQkJICAgZGV2LCAxKTsKIAkJaWYgKGlmcCkgewogCQkJaWYgKGlmcC0+ZmxhZ3MgJiBJRkFfRl9PUFRJTUlTVElDKSAgewpAQCAtNjU0LDcgKzY0Miw3IEBACiAJc3RydWN0IGluNl9hZGRyICp0YXJnZXQgPSAoc3RydWN0IGluNl9hZGRyICopJm5laWdoLT5wcmltYXJ5X2tleTsKIAlpbnQgcHJvYmVzID0gYXRvbWljX3JlYWQoJm5laWdoLT5wcm9iZXMpOwogCi0JaWYgKHNrYiAmJiBpcHY2X2Noa19hZGRyKCZpbml0X25ldCwgJmlwdjZfaGRyKHNrYiktPnNhZGRyLCBkZXYsIDEpKQorCWlmIChza2IgJiYgaXB2Nl9jaGtfYWRkcihkZXZfbmV0KGRldiksICZpcHY2X2hkcihza2IpLT5zYWRkciwgZGV2LCAxKSkKIAkJc2FkZHIgPSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CiAKIAlpZiAoKHByb2JlcyAtPSBuZWlnaC0+cGFybXMtPnVjYXN0X3Byb2JlcykgPCAwKSB7CkBAIC02NjIsNyArNjUwLDcgQEAKIAkJCU5EX1BSSU5USzEoS0VSTl9ERUJVRwogCQkJCSAgICIlcygpOiB0cnlpbmcgdG8gdWNhc3QgcHJvYmUgaW4gTlVEX0lOVkFMSUQ6ICIKIAkJCQkgICBOSVA2X0ZNVCAiXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXywKKwkJCQkgICBfX2Z1bmNfXywKIAkJCQkgICBOSVA2KCp0YXJnZXQpKTsKIAkJfQogCQluZGlzY19zZW5kX25zKGRldiwgbmVpZ2gsIHRhcmdldCwgdGFyZ2V0LCBzYWRkcik7CkBAIC02NzYsNiArNjY0LDIxIEBACiAJfQogfQogCitzdGF0aWMgaW50IHBuZGlzY19pc19yb3V0ZXIoY29uc3Qgdm9pZCAqcGtleSwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwbmVpZ2hfZW50cnkgKm47CisJaW50IHJldCA9IC0xOworCisJcmVhZF9sb2NrX2JoKCZuZF90YmwubG9jayk7CisJbiA9IF9fcG5laWdoX2xvb2t1cCgmbmRfdGJsLCBkZXZfbmV0KGRldiksIHBrZXksIGRldik7CisJaWYgKG4pCisJCXJldCA9ICEhKG4tPmZsYWdzICYgTlRGX1JPVVRFUik7CisJcmVhZF91bmxvY2tfYmgoJm5kX3RibC5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIG5kaXNjX3JlY3ZfbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmRfbXNnICptc2cgPSAoc3RydWN0IG5kX21zZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7CkBAIC02ODksMTAgKzY5Miw5IEBACiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBOVUxMOwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwotCXN0cnVjdCBwbmVpZ2hfZW50cnkgKnBuZWlnaCA9IE5VTEw7CiAJaW50IGRhZCA9IGlwdjZfYWRkcl9hbnkoc2FkZHIpOwogCWludCBpbmM7Ci0JaW50IGlzX3JvdXRlcjsKKwlpbnQgaXNfcm91dGVyID0gLTE7CiAKIAlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmbXNnLT50YXJnZXQpKSB7CiAJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCkBAIC03NDIsNyArNzQ0LDggQEAKIAogCWluYyA9IGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoZGFkZHIpOwogCi0JaWYgKChpZnAgPSBpcHY2X2dldF9pZmFkZHIoJmluaXRfbmV0LCAmbXNnLT50YXJnZXQsIGRldiwgMSkpICE9IE5VTEwpIHsKKwlpZnAgPSBpcHY2X2dldF9pZmFkZHIoZGV2X25ldChkZXYpLCAmbXNnLT50YXJnZXQsIGRldiwgMSk7CisJaWYgKGlmcCkgewogCiAJCWlmIChpZnAtPmZsYWdzICYgKElGQV9GX1RFTlRBVElWRXxJRkFfRl9PUFRJTUlTVElDKSkgewogCQkJaWYgKGRhZCkgewpAQCAtNzg3LDExICs3OTAsMTAgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmIChpcHY2X2Noa19hY2FzdF9hZGRyKGRldiwgJm1zZy0+dGFyZ2V0KSB8fAorCQlpZiAoaXB2Nl9jaGtfYWNhc3RfYWRkcihkZXZfbmV0KGRldiksIGRldiwgJm1zZy0+dGFyZ2V0KSB8fAogCQkgICAgKGlkZXYtPmNuZi5mb3J3YXJkaW5nICYmCiAJCSAgICAgKGlwdjZfZGV2Y29uZi5wcm94eV9uZHAgfHwgaWRldi0+Y25mLnByb3h5X25kcCkgJiYKLQkJICAgICAocG5laWdoID0gcG5laWdoX2xvb2t1cCgmbmRfdGJsLCAmaW5pdF9uZXQsCi0JCQkJCSAgICAgJm1zZy0+dGFyZ2V0LCBkZXYsIDApKSAhPSBOVUxMKSkgeworCQkgICAgIChpc19yb3V0ZXIgPSBwbmRpc2NfaXNfcm91dGVyKCZtc2ctPnRhcmdldCwgZGV2KSkgPj0gMCkpIHsKIAkJCWlmICghKE5FSUdIX0NCKHNrYiktPmZsYWdzICYgTE9DQUxMWV9FTlFVRVVFRCkgJiYKIAkJCSAgICBza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9IT1NUICYmCiAJCQkgICAgaW5jICE9IDAgJiYKQEAgLTgxMiwxMyArODE0LDExIEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpc19yb3V0ZXIgPSAhIShwbmVpZ2ggPyBwbmVpZ2gtPmZsYWdzICYgTlRGX1JPVVRFUiA6IGlkZXYtPmNuZi5mb3J3YXJkaW5nKTsKKwlpZiAoaXNfcm91dGVyIDwgMCkKKwkJaXNfcm91dGVyID0gISFpZGV2LT5jbmYuZm9yd2FyZGluZzsKIAogCWlmIChkYWQpIHsKLQkJc3RydWN0IGluNl9hZGRyIG1hZGRyOwotCi0JCWlwdjZfYWRkcl9hbGxfbm9kZXMoJm1hZGRyKTsKLQkJbmRpc2Nfc2VuZF9uYShkZXYsIE5VTEwsICZtYWRkciwgJm1zZy0+dGFyZ2V0LAorCQluZGlzY19zZW5kX25hKGRldiwgTlVMTCwgJmluNmFkZHJfbGlua2xvY2FsX2FsbG5vZGVzLCAmbXNnLT50YXJnZXQsCiAJCQkgICAgICBpc19yb3V0ZXIsIDAsIChpZnAgIT0gTlVMTCksIDEpOwogCQlnb3RvIG91dDsKIAl9CkBAIC05MDAsNyArOTAwLDggQEAKIAkJCXJldHVybjsKIAkJfQogCX0KLQlpZiAoKGlmcCA9IGlwdjZfZ2V0X2lmYWRkcigmaW5pdF9uZXQsICZtc2ctPnRhcmdldCwgZGV2LCAxKSkpIHsKKwlpZnAgPSBpcHY2X2dldF9pZmFkZHIoZGV2X25ldChkZXYpLCAmbXNnLT50YXJnZXQsIGRldiwgMSk7CisJaWYgKGlmcCkgewogCQlpZiAoaWZwLT5mbGFncyAmIElGQV9GX1RFTlRBVElWRSkgewogCQkJYWRkcmNvbmZfZGFkX2ZhaWx1cmUoaWZwKTsKIAkJCXJldHVybjsKQEAgLTkzMSw3ICs5MzIsNyBAQAogCQkgKi8KIAkJaWYgKGxsYWRkciAmJiAhbWVtY21wKGxsYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbikgJiYKIAkJICAgIGlwdjZfZGV2Y29uZi5mb3J3YXJkaW5nICYmIGlwdjZfZGV2Y29uZi5wcm94eV9uZHAgJiYKLQkJICAgIHBuZWlnaF9sb29rdXAoJm5kX3RibCwgJmluaXRfbmV0LCAmbXNnLT50YXJnZXQsIGRldiwgMCkpIHsKKwkJICAgIHBuZWlnaF9sb29rdXAoJm5kX3RibCwgZGV2X25ldChkZXYpLCAmbXNnLT50YXJnZXQsIGRldiwgMCkpIHsKIAkJCS8qIFhYWDogaWRldi0+Y25mLnByaXh5X25kcCAqLwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTEwMjEsNiArMTAyMiw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgbmR1c2Vyb3B0bXNnICpuZG1zZzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJhLT5kZXYpOwogCWludCBlcnI7CiAJaW50IGJhc2Vfc2l6ZSA9IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmR1c2Vyb3B0bXNnKQogCQkJCSAgICArIChvcHQtPm5kX29wdF9sZW4gPDwgMykpOwpAQCAtMTA1MCw3ICsxMDUyLDcgQEAKIAkJJmlwdjZfaGRyKHJhKS0+c2FkZHIpOwogCW5sbXNnX2VuZChza2IsIG5saCk7CiAKLQllcnIgPSBydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgMCwgUlROTEdSUF9ORF9VU0VST1BULCBOVUxMLAorCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsCiAJCQkgIEdGUF9BVE9NSUMpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm91dDsKQEAgLTEwNjEsNyArMTA2Myw3IEBACiAJbmxtc2dfZnJlZShza2IpOwogCWVyciA9IC1FTVNHU0laRTsKIGVycm91dDoKLQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX05EX1VTRVJPUFQsIGVycik7CisJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9ORF9VU0VST1BULCBlcnIpOwogfQogCiBzdGF0aWMgdm9pZCBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5KHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMDkwLDYgKzEwOTIsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAorI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCisJaWYgKHNrYi0+bmRpc2Nfbm9kZXR5cGUgPT0gTkRJU0NfTk9ERVRZUEVfSE9TVCkgeworCQlORF9QUklOVEsyKEtFUk5fV0FSTklORworCQkJICAgIklDTVB2NiBSQTogZnJvbSBob3N0IG9yIHVuYXV0aG9yaXplZCByb3V0ZXJcbiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKIAkvKgogCSAqCXNldCB0aGUgUkFfUkVDViBmbGFnIGluIHRoZSBpbnRlcmZhY2UKIAkgKi8KQEAgLTExMTMsNiArMTEyMywxMiBAQAogCQlyZXR1cm47CiAJfQogCisjaWZkZWYgQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEUKKwkvKiBza2lwIGxpbmstc3BlY2lmaWMgcGFyYW1ldGVycyBmcm9tIGludGVyaW9yIHJvdXRlcnMgKi8KKwlpZiAoc2tiLT5uZGlzY19ub2RldHlwZSA9PSBORElTQ19OT0RFVFlQRV9OT0RFRkFVTFQpCisJCWdvdG8gc2tpcF9saW5rcGFybXM7CisjZW5kaWYKKwogCWlmIChpbjZfZGV2LT5pZl9mbGFncyAmIElGX1JTX1NFTlQpIHsKIAkJLyoKIAkJICoJZmxhZyB0aGF0IGFuIFJBIHdhcyByZWNlaXZlZCBhZnRlciBhbiBSUyB3YXMgc2VudApAQCAtMTE2NCw3ICsxMTgwLDcgQEAKIAkJaWYgKHJ0ID09IE5VTEwpIHsKIAkJCU5EX1BSSU5USzAoS0VSTl9FUlIKIAkJCQkgICAiSUNNUHY2IFJBOiAlcygpIGZhaWxlZCB0byBhZGQgZGVmYXVsdCByb3V0ZS5cbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCQlpbjZfZGV2X3B1dChpbjZfZGV2KTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTE3Myw3ICsxMTg5LDcgQEAKIAkJaWYgKG5laWdoID09IE5VTEwpIHsKIAkJCU5EX1BSSU5USzAoS0VSTl9FUlIKIAkJCQkgICAiSUNNUHY2IFJBOiAlcygpIGdvdCBkZWZhdWx0IHJvdXRlciB3aXRob3V0IG5laWdoYm91ci5cbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIAkJCWluNl9kZXZfcHV0KGluNl9kZXYpOwogCQkJcmV0dXJuOwpAQCAtMTIyNyw2ICsxMjQzLDEwIEBACiAJCX0KIAl9CiAKKyNpZmRlZiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRQorc2tpcF9saW5rcGFybXM6CisjZW5kaWYKKwogCS8qCiAJICoJUHJvY2VzcyBvcHRpb25zLgogCSAqLwpAQCAtMTI1OCw3ICsxMjc4LDEzIEBACiAJCWZvciAocCA9IG5kb3B0cy5uZF9vcHRzX3JpOwogCQkgICAgIHA7CiAJCSAgICAgcCA9IG5kaXNjX25leHRfb3B0aW9uKHAsIG5kb3B0cy5uZF9vcHRzX3JpX2VuZCkpIHsKLQkJCWlmICgoKHN0cnVjdCByb3V0ZV9pbmZvICopcCktPnByZWZpeF9sZW4gPiBpbjZfZGV2LT5jbmYuYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4pCisJCQlzdHJ1Y3Qgcm91dGVfaW5mbyAqcmkgPSAoc3RydWN0IHJvdXRlX2luZm8gKilwOworI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCisJCQlpZiAoc2tiLT5uZGlzY19ub2RldHlwZSA9PSBORElTQ19OT0RFVFlQRV9OT0RFRkFVTFQgJiYKKwkJCSAgICByaS0+cHJlZml4X2xlbiA9PSAwKQorCQkJCWNvbnRpbnVlOworI2VuZGlmCisJCQlpZiAocmktPnByZWZpeF9sZW4gPiBpbjZfZGV2LT5jbmYuYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4pCiAJCQkJY29udGludWU7CiAJCQlydDZfcm91dGVfcmN2KHNrYi0+ZGV2LCAodTgqKXAsIChwLT5uZF9vcHRfbGVuKSA8PCAzLAogCQkJCSAgICAgICZpcHY2X2hkcihza2IpLT5zYWRkcik7CkBAIC0xMjY2LDYgKzEyOTIsMTIgQEAKIAl9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCisJLyogc2tpcCBsaW5rLXNwZWNpZmljIG5kb3B0cyBmcm9tIGludGVyaW9yIHJvdXRlcnMgKi8KKwlpZiAoc2tiLT5uZGlzY19ub2RldHlwZSA9PSBORElTQ19OT0RFVFlQRV9OT0RFRkFVTFQpCisJCWdvdG8gb3V0OworI2VuZGlmCisKIAlpZiAoaW42X2Rldi0+Y25mLmFjY2VwdF9yYV9waW5mbyAmJiBuZG9wdHMubmRfb3B0c19waSkgewogCQlzdHJ1Y3QgbmRfb3B0X2hkciAqcDsKIAkJZm9yIChwID0gbmRvcHRzLm5kX29wdHNfcGk7CkBAIC0xMzI5LDYgKzEzNjEsMTYgQEAKIAlpbnQgb3B0bGVuOwogCXU4ICpsbGFkZHIgPSBOVUxMOwogCisjaWZkZWYgQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEUKKwlzd2l0Y2ggKHNrYi0+bmRpc2Nfbm9kZXR5cGUpIHsKKwljYXNlIE5ESVNDX05PREVUWVBFX0hPU1Q6CisJY2FzZSBORElTQ19OT0RFVFlQRV9OT0RFRkFVTFQ6CisJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCisJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiBmcm9tIGhvc3Qgb3IgdW5hdXRob3JpemVkIHJvdXRlclxuIik7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwogCWlmICghKGlwdjZfYWRkcl90eXBlKCZpcHY2X2hkcihza2IpLT5zYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSkgewogCQlORF9QUklOVEsyKEtFUk5fV0FSTklORwogCQkJICAgIklDTVB2NiBSZWRpcmVjdDogc291cmNlIGFkZHJlc3MgaXMgbm90IGxpbmstbG9jYWwuXG4iKTsKQEAgLTE0MDQsMTUgKzE0NDYsMTYgQEAKIH0KIAogdm9pZCBuZGlzY19zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAotCQkJIHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KQorCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KQogewotCXN0cnVjdCBzb2NrICpzayA9IG5kaXNjX3NvY2tldC0+c2s7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBuZXQtPmlwdjYubmRpc2Nfc2s7CiAJaW50IGxlbiA9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpICsgMiAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwogCXN0cnVjdCBza19idWZmICpidWZmOwogCXN0cnVjdCBpY21wNmhkciAqaWNtcGg7CiAJc3RydWN0IGluNl9hZGRyIHNhZGRyX2J1ZjsKIAlzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKQEAgLTE0MjAsMTEgKzE0NjMsOCBAQAogCXU4ICpvcHQ7CiAJaW50IHJkX2xlbjsKIAlpbnQgZXJyOwotCWludCBobGVuOwogCXU4IGhhX2J1ZltNQVhfQUREUl9MRU5dLCAqaGEgPSBOVUxMOwogCi0JZGV2ID0gc2tiLT5kZXY7Ci0KIAlpZiAoaXB2Nl9nZXRfbGxhZGRyKGRldiwgJnNhZGRyX2J1ZiwgSUZBX0ZfVEVOVEFUSVZFKSkgewogCQlORF9QUklOVEsyKEtFUk5fV0FSTklORwogCQkJICAgIklDTVB2NiBSZWRpcmVjdDogbm8gbGluay1sb2NhbCBhZGRyZXNzIG9uICVzXG4iLApAQCAtMTQzOSwxMCArMTQ3OSwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JbmRpc2NfZmxvd19pbml0KCZmbCwgTkRJU0NfUkVESVJFQ1QsICZzYWRkcl9idWYsICZpcHY2X2hkcihza2IpLT5zYWRkciwKLQkJCWRldi0+aWZpbmRleCk7CisJaWNtcHY2X2Zsb3dfaW5pdChzaywgJmZsLCBORElTQ19SRURJUkVDVCwKKwkJCSAmc2FkZHJfYnVmLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsIGRldi0+aWZpbmRleCk7CiAKLQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KE5VTEwsICZmbCk7CisJZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsICZmbCk7CiAJaWYgKGRzdCA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTE0ODYsMTMgKzE1MjYsMTEgQEAKIAlpZiAoYnVmZiA9PSBOVUxMKSB7CiAJCU5EX1BSSU5USzAoS0VSTl9FUlIKIAkJCSAgICJJQ01QdjYgUmVkaXJlY3Q6ICVzKCkgZmFpbGVkIHRvIGFsbG9jYXRlIGFuIHNrYi5cbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlkc3RfcmVsZWFzZShkc3QpOwogCQlyZXR1cm47CiAJfQogCi0JaGxlbiA9IDA7Ci0KIAlza2JfcmVzZXJ2ZShidWZmLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKIAlpcDZfbmRfaGRyKHNrLCBidWZmLCBkZXYsICZzYWRkcl9idWYsICZpcHY2X2hkcihza2IpLT5zYWRkciwKIAkJICAgSVBQUk9UT19JQ01QVjYsIGxlbik7CkBAIC0xNjEzLDE4ICsxNjUxLDE2IEBACiBzdGF0aWMgaW50IG5kaXNjX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwotCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCQluZWlnaF9jaGFuZ2VhZGRyKCZuZF90YmwsIGRldik7Ci0JCWZpYjZfcnVuX2djKH4wVUwpOworCQlmaWI2X3J1bl9nYyh+MFVMLCBuZXQpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQluZWlnaF9pZmRvd24oJm5kX3RibCwgZGV2KTsKLQkJZmliNl9ydW5fZ2MofjBVTCk7CisJCWZpYjZfcnVuX2djKH4wVUwsIG5ldCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTczMyw0NCArMTc2OSw3NCBAQAogCiAjZW5kaWYKIAotaW50IF9faW5pdCBuZGlzY19pbml0KHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpCitzdGF0aWMgaW50IG5kaXNjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7CiAJc3RydWN0IHNvY2sgKnNrOwogCWludCBlcnI7CiAKLQllcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19JQ01QVjYsICZuZGlzY19zb2NrZXQpOworCWVyciA9IGluZXRfY3RsX3NvY2tfY3JlYXRlKCZzaywgUEZfSU5FVDYsCisJCQkJICAgU09DS19SQVcsIElQUFJPVE9fSUNNUFY2LCBuZXQpOwogCWlmIChlcnIgPCAwKSB7CiAJCU5EX1BSSU5USzAoS0VSTl9FUlIKIAkJCSAgICJJQ01QdjYgTkRJU0M6IEZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBjb250cm9sIHNvY2tldCAoZXJyICVkKS5cbiIsCiAJCQkgICBlcnIpOwotCQluZGlzY19zb2NrZXQgPSBOVUxMOyAvKiBGb3Igc2FmZXR5LiAqLwogCQlyZXR1cm4gZXJyOwogCX0KIAotCXNrID0gbmRpc2Nfc29ja2V0LT5zazsKKwluZXQtPmlwdjYubmRpc2Nfc2sgPSBzazsKKwogCW5wID0gaW5ldDZfc2soc2spOwotCXNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKIAlucC0+aG9wX2xpbWl0ID0gMjU1OwogCS8qIERvIG5vdCBsb29wYmFjayBuZGlzYyBtZXNzYWdlcyAqLwogCW5wLT5tY19sb29wID0gMDsKLQlzay0+c2tfcHJvdC0+dW5oYXNoKHNrKTsKIAorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZGlzY19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+aXB2Ni5uZGlzY19zayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgbmRpc2NfbmV0X29wcyA9IHsKKwkuaW5pdCA9IG5kaXNjX25ldF9pbml0LAorCS5leGl0ID0gbmRpc2NfbmV0X2V4aXQsCit9OworCitpbnQgX19pbml0IG5kaXNjX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmbmRpc2NfbmV0X29wcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIG5laWdoYm91ciB0YWJsZQogCSAqLwotCiAJbmVpZ2hfdGFibGVfaW5pdCgmbmRfdGJsKTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLQluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoTlVMTCwgJm5kX3RibC5wYXJtcywgTkVUX0lQVjYsIE5FVF9JUFY2X05FSUdILAotCQkJICAgICAgImlwdjYiLAotCQkJICAgICAgJm5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlLAotCQkJICAgICAgJm5kaXNjX2lmaW5mb19zeXNjdGxfc3RyYXRlZ3kpOworCWVyciA9IG5laWdoX3N5c2N0bF9yZWdpc3RlcihOVUxMLCAmbmRfdGJsLnBhcm1zLCBORVRfSVBWNiwKKwkJCQkgICAgTkVUX0lQVjZfTkVJR0gsICJpcHY2IiwKKwkJCQkgICAgJm5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlLAorCQkJCSAgICAmbmRpc2NfaWZpbmZvX3N5c2N0bF9zdHJhdGVneSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9wZXJuZXQ7CiAjZW5kaWYKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5kaXNjX25ldGRldl9ub3RpZmllcik7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9zeXNjdGw7CitvdXQ6CisJcmV0dXJuIGVycjsKIAotCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmRpc2NfbmV0ZGV2X25vdGlmaWVyKTsKLQlyZXR1cm4gMDsKK291dF91bnJlZ2lzdGVyX3N5c2N0bDoKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJbmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIoJm5kX3RibC5wYXJtcyk7CitvdXRfdW5yZWdpc3Rlcl9wZXJuZXQ6CisjZW5kaWYKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJm5kaXNjX25ldF9vcHMpOworCWdvdG8gb3V0OwogfQogCiB2b2lkIG5kaXNjX2NsZWFudXAodm9pZCkKQEAgLTE3ODAsNiArMTg0Niw1IEBACiAJbmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIoJm5kX3RibC5wYXJtcyk7CiAjZW5kaWYKIAluZWlnaF90YWJsZV9jbGVhcigmbmRfdGJsKTsKLQlzb2NrX3JlbGVhc2UobmRpc2Nfc29ja2V0KTsKLQluZGlzY19zb2NrZXQgPSBOVUxMOyAvKiBGb3Igc2FmZXR5LiAqLworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmbmRpc2NfbmV0X29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci5jCmluZGV4IDJlMDY3MjQuLjhjNmM1ZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci5jCkBAIC0yMyw3ICsyMyw3IEBACiAJCSAgICAuc2FkZHIgPSBpcGgtPnNhZGRyLCB9IH0sCiAJfTsKIAotCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoc2tiLT5zaywgJmZsKTsKKwlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgc2tiLT5zaywgJmZsKTsKIAogI2lmZGVmIENPTkZJR19YRlJNCiAJaWYgKCEoSVA2Q0Ioc2tiKS0+ZmxhZ3MgJiBJUDZTS0JfWEZSTV9UUkFOU0ZPUk1FRCkgJiYKQEAgLTg2LDcgKzg2LDcgQEAKIAogc3RhdGljIGludCBuZl9pcDZfcm91dGUoc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKIHsKLQkqZHN0ID0gaXA2X3JvdXRlX291dHB1dChOVUxMLCBmbCk7CisJKmRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoJmluaXRfbmV0LCBOVUxMLCBmbCk7CiAJcmV0dXJuICgqZHN0KS0+ZXJyb3I7CiB9CiAKQEAgLTEyMSwxNiArMTIxLDQ0IEBACiAJfQogCXJldHVybiBjc3VtOwogfQotCiBFWFBPUlRfU1lNQk9MKG5mX2lwNl9jaGVja3N1bSk7CiAKK3N0YXRpYyBfX3N1bTE2IG5mX2lwNl9jaGVja3N1bV9wYXJ0aWFsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICAgdV9pbnQ4X3QgcHJvdG9jb2wpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCV9fd3N1bSBoc3VtOworCV9fc3VtMTYgY3N1bSA9IDA7CisKKwlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CisJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKKwkJaWYgKGxlbiA9PSBza2ItPmxlbiAtIGRhdGFvZmYpCisJCQlyZXR1cm4gbmZfaXA2X2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENIRUNLU1VNX05PTkU6CisJCWhzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCAwLCBkYXRhb2ZmLCAwKTsKKwkJc2tiLT5jc3VtID0gfmNzdW1fdW5mb2xkKGNzdW1faXB2Nl9tYWdpYygmaXA2aC0+c2FkZHIsCisJCQkJCQkJICZpcDZoLT5kYWRkciwKKwkJCQkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLAorCQkJCQkJCSBwcm90b2NvbCwKKwkJCQkJCQkgY3N1bV9zdWIoMCwgaHN1bSkpKTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQljc3VtID0gX19za2JfY2hlY2tzdW1fY29tcGxldGVfaGVhZChza2IsIGRhdGFvZmYgKyBsZW4pOworCQlpZiAoIWNzdW0pCisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCX0KKwlyZXR1cm4gY3N1bTsKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfYWZpbmZvIG5mX2lwNl9hZmluZm8gPSB7Ci0JLmZhbWlseQkJPSBBRl9JTkVUNiwKLQkuY2hlY2tzdW0JPSBuZl9pcDZfY2hlY2tzdW0sCi0JLnJvdXRlCQk9IG5mX2lwNl9yb3V0ZSwKLQkuc2F2ZXJvdXRlCT0gbmZfaXA2X3NhdmVyb3V0ZSwKLQkucmVyb3V0ZQk9IG5mX2lwNl9yZXJvdXRlLAotCS5yb3V0ZV9rZXlfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2X3J0X2luZm8pLAorCS5mYW1pbHkJCQk9IEFGX0lORVQ2LAorCS5jaGVja3N1bQkJPSBuZl9pcDZfY2hlY2tzdW0sCisJLmNoZWNrc3VtX3BhcnRpYWwJPSBuZl9pcDZfY2hlY2tzdW1fcGFydGlhbCwKKwkucm91dGUJCQk9IG5mX2lwNl9yb3V0ZSwKKwkuc2F2ZXJvdXRlCQk9IG5mX2lwNl9zYXZlcm91dGUsCisJLnJlcm91dGUJCT0gbmZfaXA2X3Jlcm91dGUsCisJLnJvdXRlX2tleV9zaXplCQk9IHNpemVvZihzdHJ1Y3QgaXA2X3J0X2luZm8pLAogfTsKIAogaW50IF9faW5pdCBpcHY2X25ldGZpbHRlcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKaW5kZXggZTg2OTkxNi4uOTJhMzZjOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwpAQCAtMjg1LDggKzI4NSw4IEBACiBpcHFfbWFuZ2xlX2lwdjYoaXBxX3ZlcmRpY3RfbXNnX3QgKnYsIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSkKIHsKIAlpbnQgZGlmZjsKLQlpbnQgZXJyOwogCXN0cnVjdCBpcHY2aGRyICp1c2VyX2lwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKXYtPnBheWxvYWQ7CisJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAKIAlpZiAodi0+ZGF0YV9sZW4gPCBzaXplb2YoKnVzZXJfaXBoKSkKIAkJcmV0dXJuIDA7CkBAIC0yOTgsMTQgKzI5OCwxNiBAQAogCQlpZiAodi0+ZGF0YV9sZW4gPiAweEZGRkYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGRpZmYgPiBza2JfdGFpbHJvb20oZS0+c2tiKSkgewotCQkJZXJyID0gcHNrYl9leHBhbmRfaGVhZChlLT5za2IsIDAsCisJCQluc2tiID0gc2tiX2NvcHlfZXhwYW5kKGUtPnNrYiwgMCwKIAkJCQkJICAgICAgIGRpZmYgLSBza2JfdGFpbHJvb20oZS0+c2tiKSwKIAkJCQkJICAgICAgIEdGUF9BVE9NSUMpOwotCQkJaWYgKGVycikgeworCQkJaWYgKCFuc2tiKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2X3F1ZXVlOiBPT00gIgogCQkJCSAgICAgICJpbiBtYW5nbGUsIGRyb3BwaW5nIHBhY2tldFxuIik7Ci0JCQkJcmV0dXJuIGVycjsKKwkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KKwkJCWtmcmVlX3NrYihlLT5za2IpOworCQkJZS0+c2tiID0gbnNrYjsKIAkJfQogCQlza2JfcHV0KGUtPnNrYiwgZGlmZik7CiAJfQpAQCAtNDgyLDcgKzQ4NCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCS8qIERyb3AgYW55IHBhY2tldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb3duZWQgZGV2aWNlICovCkBAIC01ODksMTEgKzU5MSw5IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoSVBRX1BST0NfRlNfTkFNRSwgMCwgaW5pdF9uZXQucHJvY19uZXQpOwotCWlmIChwcm9jKSB7Ci0JCXByb2MtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCXByb2MtPnByb2NfZm9wcyA9ICZpcDZfcXVldWVfcHJvY19mb3BzOwotCX0gZWxzZSB7CisJcHJvYyA9IHByb2NfY3JlYXRlKElQUV9QUk9DX0ZTX05BTUUsIDAsIGluaXRfbmV0LnByb2NfbmV0LAorCQkJICAgJmlwNl9xdWV1ZV9wcm9jX2ZvcHMpOworCWlmICghcHJvYykgewogCQlwcmludGsoS0VSTl9FUlIgImlwNl9xdWV1ZTogZmFpbGVkIHRvIGNyZWF0ZSBwcm9jIGVudHJ5XG4iKTsKIAkJZ290byBjbGVhbnVwX2lwcW5sOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IGJmOWJiNmUuLjBiNDU1N2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtNTUsNyArNTUsNyBAQAogZG8gewkJCQkJCQkJXAogCWlmICghKHgpKQkJCQkJCVwKIAkJcHJpbnRrKCJJUF9ORl9BU1NFUlQ6ICVzOiVzOiV1XG4iLAkJXAotCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOwlcCisJCSAgICAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJXAogfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgSVBfTkZfQVNTRVJUKHgpCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJCSBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSkKIHsKIAl2b2lkICp0YWJsZV9iYXNlOwotCXN0cnVjdCBpcDZ0X2VudHJ5ICpyb290OworCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICpyb290OwogCWNoYXIgKmhvb2tuYW1lLCAqY2hhaW5uYW1lLCAqY29tbWVudDsKIAl1bnNpZ25lZCBpbnQgcnVsZW51bSA9IDA7CiAKQEAgLTk1Miw3ICs5NTIsNyBAQAogewogCXVuc2lnbmVkIGludCBjb3VudGVyc2l6ZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICAgKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKQEAgLTk3OSw5ICs5NzksOSBAQAogCXVuc2lnbmVkIGludCBvZmYsIG51bTsKIAlzdHJ1Y3QgaXA2dF9lbnRyeSAqZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKLQl2b2lkICpsb2NfY3B1X2VudHJ5OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnk7CiAKIAljb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTsKIAlpZiAoSVNfRVJSKGNvdW50ZXJzKSkKQEAgLTEwMDEsOCArMTAwMSw4IEBACiAJLyogLi4uIHRoZW4gZ28gYmFjayBhbmQgZml4IGNvdW50ZXJzIGFuZCBuYW1lcyAqLwogCWZvciAob2ZmID0gMCwgbnVtID0gMDsgb2ZmIDwgdG90YWxfc2l6ZTsgb2ZmICs9IGUtPm5leHRfb2Zmc2V0LCBudW0rKyl7CiAJCXVuc2lnbmVkIGludCBpOwotCQlzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbTsKLQkJc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OworCQljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbTsKKwkJY29uc3Qgc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OwogCiAJCWUgPSAoc3RydWN0IGlwNnRfZW50cnkgKikobG9jX2NwdV9lbnRyeSArIG9mZik7CiAJCWlmIChjb3B5X3RvX3VzZXIodXNlcnB0ciArIG9mZgpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAkJCQkgICAgImlwNnRhYmxlXyVzIiwgbmFtZSk7CiAJaWYgKHQgJiYgIUlTX0VSUih0KSkgewogCQlzdHJ1Y3QgaXA2dF9nZXRpbmZvIGluZm87Ci0JCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKKwkJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCQlpZiAoY29tcGF0KSB7CkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCQllbHNlIHsKIAkJCWR1cHJpbnRmKCJnZXRfZW50cmllczogSSd2ZSBnb3QgJXUgbm90ICV1IVxuIiwKIAkJCQkgcHJpdmF0ZS0+c2l6ZSwgZ2V0LnNpemUpOwotCQkJcmV0ID0gLUVJTlZBTDsKKwkJCXJldCA9IC1FQUdBSU47CiAJCX0KIAkJbW9kdWxlX3B1dCh0LT5tZSk7CiAJCXh0X3RhYmxlX3VubG9jayh0KTsKQEAgLTEyMjUsNyArMTIyNSw3IEBACiAJc3RydWN0IHh0X3RhYmxlICp0OwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jdm9pZCAqbG9jX2NwdV9vbGRfZW50cnk7CisJY29uc3Qgdm9pZCAqbG9jX2NwdV9vbGRfZW50cnk7CiAKIAlyZXQgPSAwOwogCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpLApAQCAtMTM2OSw5ICsxMzY5LDkgQEAKIAlpbnQgc2l6ZTsKIAl2b2lkICpwdG1wOwogCXN0cnVjdCB4dF90YWJsZSAqdDsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKLQl2b2lkICpsb2NfY3B1X2VudHJ5OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnk7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyBjb21wYXRfdG1wOwogCkBAIC0xODc5LDExICsxODc5LDExIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSVA2VF9TT19TRVRfUkVQTEFDRToKLQkJcmV0ID0gY29tcGF0X2RvX3JlcGxhY2Uoc2stPnNrX25ldCwgdXNlciwgbGVuKTsKKwkJcmV0ID0gY29tcGF0X2RvX3JlcGxhY2Uoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwogCQlicmVhazsKIAogCWNhc2UgSVA2VF9TT19TRVRfQUREX0NPVU5URVJTOgotCQlyZXQgPSBkb19hZGRfY291bnRlcnMoc2stPnNrX25ldCwgdXNlciwgbGVuLCAxKTsKKwkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAxKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTkwNSwxMSArMTkwNSwxMSBAQAogCQkJICAgIHZvaWQgX191c2VyICp1c2VycHRyKQogewogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCXZvaWQgX191c2VyICpwb3M7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJaW50IHJldCA9IDA7Ci0Jdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5OwogCXVuc2lnbmVkIGludCBpID0gMDsKIAogCWNvdW50ZXJzID0gYWxsb2NfY291bnRlcnModGFibGUpOwpAQCAtMTk1Niw3ICsxOTU2LDcgQEAKIAl4dF9jb21wYXRfbG9jayhBRl9JTkVUNik7CiAJdCA9IHh0X2ZpbmRfdGFibGVfbG9jayhuZXQsIEFGX0lORVQ2LCBnZXQubmFtZSk7CiAJaWYgKHQgJiYgIUlTX0VSUih0KSkgewotCQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHQtPnByaXZhdGU7CisJCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAkJc3RydWN0IHh0X3RhYmxlX2luZm8gaW5mbzsKIAkJZHVwcmludGYoInQtPnByaXZhdGUtPm51bWJlciA9ICV1XG4iLCBwcml2YXRlLT5udW1iZXIpOwogCQlyZXQgPSBjb21wYXRfdGFibGVfaW5mbyhwcml2YXRlLCAmaW5mbyk7CkBAIC0xOTY2LDcgKzE5NjYsNyBAQAogCQl9IGVsc2UgaWYgKCFyZXQpIHsKIAkJCWR1cHJpbnRmKCJjb21wYXRfZ2V0X2VudHJpZXM6IEkndmUgZ290ICV1IG5vdCAldSFcbiIsCiAJCQkJIHByaXZhdGUtPnNpemUsIGdldC5zaXplKTsKLQkJCXJldCA9IC1FSU5WQUw7CisJCQlyZXQgPSAtRUFHQUlOOwogCQl9CiAJCXh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKEFGX0lORVQ2KTsKIAkJbW9kdWxlX3B1dCh0LT5tZSk7CkBAIC0xOTkwLDEwICsxOTkwLDEwIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSVA2VF9TT19HRVRfSU5GTzoKLQkJcmV0ID0gZ2V0X2luZm8oc2stPnNrX25ldCwgdXNlciwgbGVuLCAxKTsKKwkJcmV0ID0gZ2V0X2luZm8oc29ja19uZXQoc2spLCB1c2VyLCBsZW4sIDEpOwogCQlicmVhazsKIAljYXNlIElQNlRfU09fR0VUX0VOVFJJRVM6Ci0JCXJldCA9IGNvbXBhdF9nZXRfZW50cmllcyhzay0+c2tfbmV0LCB1c2VyLCBsZW4pOworCQlyZXQgPSBjb21wYXRfZ2V0X2VudHJpZXMoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSBkb19pcDZ0X2dldF9jdGwoc2ssIGNtZCwgdXNlciwgbGVuKTsKQEAgLTIwMTIsMTEgKzIwMTIsMTEgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJUDZUX1NPX1NFVF9SRVBMQUNFOgotCQlyZXQgPSBkb19yZXBsYWNlKHNrLT5za19uZXQsIHVzZXIsIGxlbik7CisJCXJldCA9IGRvX3JlcGxhY2Uoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwogCQlicmVhazsKIAogCWNhc2UgSVA2VF9TT19TRVRfQUREX0NPVU5URVJTOgotCQlyZXQgPSBkb19hZGRfY291bnRlcnMoc2stPnNrX25ldCwgdXNlciwgbGVuLCAwKTsKKwkJcmV0ID0gZG9fYWRkX2NvdW50ZXJzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAwKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjAzNywxMSArMjAzNywxMSBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIElQNlRfU09fR0VUX0lORk86Ci0JCXJldCA9IGdldF9pbmZvKHNrLT5za19uZXQsIHVzZXIsIGxlbiwgMCk7CisJCXJldCA9IGdldF9pbmZvKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIElQNlRfU09fR0VUX0VOVFJJRVM6Ci0JCXJldCA9IGdldF9lbnRyaWVzKHNrLT5za19uZXQsIHVzZXIsIGxlbik7CisJCXJldCA9IGdldF9lbnRyaWVzKHNvY2tfbmV0KHNrKSwgdXNlciwgbGVuKTsKIAkJYnJlYWs7CiAKIAljYXNlIElQNlRfU09fR0VUX1JFVklTSU9OX01BVENIOgpAQCAtMjE1NSw3ICsyMTU1LDggQEAKIAkgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKIAkgICBib29sICpob3Rkcm9wKQogewotCXN0cnVjdCBpY21wNmhkciBfaWNtcGgsICppYzsKKwljb25zdCBzdHJ1Y3QgaWNtcDZoZHIgKmljOworCXN0cnVjdCBpY21wNmhkciBfaWNtcGg7CiAJY29uc3Qgc3RydWN0IGlwNnRfaWNtcCAqaWNtcGluZm8gPSBtYXRjaGluZm87CiAKIAkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwppbmRleCA4NmE2MTM4Li4zYTIzMTY5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwpAQCAtMzYzLDExICszNjMsMTUgQEAKIAlpZiAoKGxvZ2ZsYWdzICYgSVA2VF9MT0dfVUlEKSAmJiByZWN1cnNlICYmIHNrYi0+c2spIHsKIAkJcmVhZF9sb2NrX2JoKCZza2ItPnNrLT5za19jYWxsYmFja19sb2NrKTsKIAkJaWYgKHNrYi0+c2stPnNrX3NvY2tldCAmJiBza2ItPnNrLT5za19zb2NrZXQtPmZpbGUpCi0JCQlwcmludGsoIlVJRD0ldSBHSUQ9JXUiLAorCQkJcHJpbnRrKCJVSUQ9JXUgR0lEPSV1ICIsCiAJCQkJc2tiLT5zay0+c2tfc29ja2V0LT5maWxlLT5mX3VpZCwKIAkJCQlza2ItPnNrLT5za19zb2NrZXQtPmZpbGUtPmZfZ2lkKTsKIAkJcmVhZF91bmxvY2tfYmgoJnNrYi0+c2stPnNrX2NhbGxiYWNrX2xvY2spOwogCX0KKworCS8qIE1heCBsZW5ndGg6IDE2ICJNQVJLPTB4RkZGRkZGRkYgIiAqLworCWlmICghcmVjdXJzZSAmJiBza2ItPm1hcmspCisJCXByaW50aygiTUFSSz0weCV4ICIsIHNrYi0+bWFyayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfbG9naW5mbyBkZWZhdWx0X2xvZ2luZm8gPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCmluZGV4IGIyM2JhYTYuLjQ0YzhkNjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCkBAIC00MSw3ICs0MSw4IEBACiAJc3RydWN0IHRjcGhkciBvdGNwaCwgKnRjcGg7CiAJdW5zaWduZWQgaW50IG90Y3BsZW4sIGhoX2xlbjsKIAlpbnQgdGNwaG9mZiwgbmVlZHNfYWNrOwotCXN0cnVjdCBpcHY2aGRyICpvaXA2aCA9IGlwdjZfaGRyKG9sZHNrYiksICppcDZoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpvaXA2aCA9IGlwdjZfaGRyKG9sZHNrYik7CisJc3RydWN0IGlwdjZoZHIgKmlwNmg7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDsKIAl1OCBwcm90bzsKIAlzdHJ1Y3QgZmxvd2kgZmw7CkBAIC05Myw3ICs5NCw3IEBACiAJZmwuZmxfaXBfc3BvcnQgPSBvdGNwaC5kZXN0OwogCWZsLmZsX2lwX2Rwb3J0ID0gb3RjcGguc291cmNlOwogCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KG9sZHNrYiwgJmZsKTsKLQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KE5VTEwsICZmbCk7CisJZHN0ID0gaXA2X3JvdXRlX291dHB1dCgmaW5pdF9uZXQsIE5VTEwsICZmbCk7CiAJaWYgKGRzdCA9PSBOVUxMKQogCQlyZXR1cm47CiAJaWYgKGRzdC0+ZXJyb3IgfHwgeGZybV9sb29rdXAoJmRzdCwgJmZsLCBOVUxMLCAwKSkKQEAgLTE3Nyw3ICsxNzgsNyBAQAogewogCWNvbnN0IHN0cnVjdCBpcDZ0X3JlamVjdF9pbmZvICpyZWplY3QgPSB0YXJnaW5mbzsKIAotCXByX2RlYnVnKCIlczogbWVkaXVtIHBvaW50XG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlczogbWVkaXVtIHBvaW50XG4iLCBfX2Z1bmNfXyk7CiAJLyogV0FSTklORzogVGhpcyBjb2RlIGNhdXNlcyByZWVudHJ5IHdpdGhpbiBpcDZ0YWJsZXMuCiAJICAgVGhpcyBtZWFucyB0aGF0IHRoZSBpcDZ0YWJsZXMganVtcCBzdGFjayBpcyBub3cgY3JhcC4gIFdlCiAJICAgbXVzdCByZXR1cm4gYW4gYWJzb2x1dGUgdmVyZGljdC4gLS1SUiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jCmluZGV4IDNhOTQwMTcuLjMxN2E4OTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMKQEAgLTQ5LDcgKzQ5LDggQEAKIAl0ZW1wID0gMDsKIAogCXdoaWxlIChpcDZ0X2V4dF9oZHIobmV4dGhkcikpIHsKLQkJc3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7CisJCWNvbnN0IHN0cnVjdCBpcHY2X29wdF9oZHIgKmhwOworCQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHI7CiAJCWludCBoZHJsZW47CiAKIAkJLyogSXMgdGhlcmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgbmV4dCBleHQgaGVhZGVyPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKaW5kZXggMTJhOWVmZS4uODFhYWY3YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCkBAIC0xMTAsNyArMTEwLDggQEAKIAkJISEocnRpbmZvLT5pbnZmbGFncyAmIElQNlRfUlRfSU5WX1RZUCkpKTsKIAogCWlmIChyZXQgJiYgKHJ0aW5mby0+ZmxhZ3MgJiBJUDZUX1JUX1JFUykpIHsKLQkJdV9pbnQzMl90ICpycCwgX3Jlc2VydmVkOworCQljb25zdCB1X2ludDMyX3QgKnJwOworCQl1X2ludDMyX3QgX3Jlc2VydmVkOwogCQlycCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsCiAJCQkJCXB0ciArIG9mZnNldG9mKHN0cnVjdCBydDBfaGRyLAogCQkJCQkJICAgICAgIHJlc2VydmVkKSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwppbmRleCAyZDljZDA5Li5mOTc5ZTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IFJXX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9maWx0ZXIubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKaW5kZXggMDM1MzQzYS4uMjdhNWU4YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKIAkubmFtZQkJPSAibWFuZ2xlIiwKIAkudmFsaWRfaG9va3MJPSBNQU5HTEVfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gUldfTE9DS19VTkxPQ0tFRCwKKwkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X21hbmdsZXIubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKaW5kZXggNWNkODQyMC4uOTJiOTEwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwpAQCAtMzgsNyArMzgsNyBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfcmF3ID0gewogCS5uYW1lID0gInJhdyIsCiAJLnZhbGlkX2hvb2tzID0gUkFXX1ZBTElEX0hPT0tTLAotCS5sb2NrID0gUldfTE9DS19VTkxPQ0tFRCwKKwkubG9jayA9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfcmF3LmxvY2spLAogCS5tZSA9IFRISVNfTU9EVUxFLAogCS5hZiA9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDM3MTdiZGYuLjg1MDUwYzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAKLXN0YXRpYyBpbnQgaXB2Nl9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ob2ZmLAotCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyBib29sIGlwdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKKwkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCWNvbnN0IHVfaW50MzJfdCAqYXA7CiAJdV9pbnQzMl90IF9hZGRyc1s4XTsKQEAgLTM2LDIxICszNiwyMSBAQAogCWFwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbmhvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpLAogCQkJCXNpemVvZihfYWRkcnMpLCBfYWRkcnMpOwogCWlmIChhcCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJbWVtY3B5KHR1cGxlLT5zcmMudTMuaXA2LCBhcCwgc2l6ZW9mKHR1cGxlLT5zcmMudTMuaXA2KSk7CiAJbWVtY3B5KHR1cGxlLT5kc3QudTMuaXA2LCBhcCArIDQsIHNpemVvZih0dXBsZS0+ZHN0LnUzLmlwNikpOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgaXB2Nl9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCitzdGF0aWMgYm9vbCBpcHY2X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7CiAJbWVtY3B5KHR1cGxlLT5zcmMudTMuaXA2LCBvcmlnLT5kc3QudTMuaXA2LCBzaXplb2YodHVwbGUtPnNyYy51My5pcDYpKTsKIAltZW1jcHkodHVwbGUtPmRzdC51My5pcDYsIG9yaWctPnNyYy51My5pcDYsIHNpemVvZih0dXBsZS0+ZHN0LnUzLmlwNikpOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgaXB2Nl9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCAwODk3ZDBmLi5lZTcxM2IwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTI4LDIxICsyOCwyMSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuZl9jdF9pY21wdjZfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAqSFo7CiAKLXN0YXRpYyBpbnQgaWNtcHY2X3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorc3RhdGljIGJvb2wgaWNtcHY2X3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCWNvbnN0IHN0cnVjdCBpY21wNmhkciAqaHA7CiAJc3RydWN0IGljbXA2aGRyIF9oZHI7CiAKIAlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfaGRyKSwgJl9oZHIpOwogCWlmIChocCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCXR1cGxlLT5kc3QudS5pY21wLnR5cGUgPSBocC0+aWNtcDZfdHlwZTsKIAl0dXBsZS0+c3JjLnUuaWNtcC5pZCA9IGhwLT5pY21wNl9pZGVudGlmaWVyOwogCXR1cGxlLT5kc3QudS5pY21wLmNvZGUgPSBocC0+aWNtcDZfY29kZTsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKiBBZGQgMTsgc3BhY2VzIGZpbGxlZCB3aXRoIDAuICovCkBAIC01MywxNyArNTMsMTcgQEAKIAlbSUNNUFY2X05JX1JFUExZIC0gMTI4XQkJPSBJQ01QVjZfTklfUkVQTFkgKzEKIH07CiAKLXN0YXRpYyBpbnQgaWNtcHY2X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQorc3RhdGljIGJvb2wgaWNtcHY2X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQogewogCWludCB0eXBlID0gb3JpZy0+ZHN0LnUuaWNtcC50eXBlIC0gMTI4OwogCWlmICh0eXBlIDwgMCB8fCB0eXBlID49IHNpemVvZihpbnZtYXApIHx8ICFpbnZtYXBbdHlwZV0pCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAl0dXBsZS0+c3JjLnUuaWNtcC5pZCAgID0gb3JpZy0+c3JjLnUuaWNtcC5pZDsKIAl0dXBsZS0+ZHN0LnUuaWNtcC50eXBlID0gaW52bWFwW3R5cGVdIC0gMTsKIAl0dXBsZS0+ZHN0LnUuaWNtcC5jb2RlID0gb3JpZy0+ZHN0LnUuaWNtcC5jb2RlOwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KQEAgLTEwMiw5ICsxMDIsOCBAQAogfQogCiAvKiBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGlzIHByb3RvY29sIGZvdW5kLiAqLwotc3RhdGljIGludCBpY21wdjZfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwKLQkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCitzdGF0aWMgYm9vbCBpY21wdjZfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQogewogCXN0YXRpYyBjb25zdCB1X2ludDhfdCB2YWxpZF9uZXdbXSA9IHsKIAkJW0lDTVBWNl9FQ0hPX1JFUVVFU1QgLSAxMjhdID0gMSwKQEAgLTExNiwxMSArMTE1LDExIEBACiAJCS8qIENhbid0IGNyZWF0ZSBhIG5ldyBJQ01QdjYgYGNvbm4nIHdpdGggdGhpcy4gKi8KIAkJcHJfZGVidWcoImljbXB2NjogY2FuJ3QgY3JlYXRlIG5ldyBjb25uIHdpdGggdHlwZSAldVxuIiwKIAkJCSB0eXBlICsgMTI4KTsKLQkJTkZfQ1RfRFVNUF9UVVBMRSgmY3QtPnR1cGxlaGFzaFswXS50dXBsZSk7Ci0JCXJldHVybiAwOworCQluZl9jdF9kdW1wX3R1cGxlX2lwdjYoJmN0LT50dXBsZWhhc2hbMF0udHVwbGUpOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCWF0b21pY19zZXQoJmN0LT5wcm90by5pY21wLmNvdW50LCAwKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCmluZGV4IDJhMGQ2OTguLjJkY2NhZDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKQEAgLTEwMyw4ICsxMDMsOCBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwNnFoYXNoZm4oX19iZTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCitzdGF0aWMgdW5zaWduZWQgaW50IGlwNnFoYXNoZm4oX19iZTMyIGlkLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCiB7CiAJdTMyIGEsIGIsIGM7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2hhc2hmbihzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxKQogewotCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqbnE7CisJY29uc3Qgc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpucTsKIAogCW5xID0gY29udGFpbmVyX29mKHEsIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSwgcSk7CiAJcmV0dXJuIGlwNnFoYXNoZm4obnEtPmlkLCAmbnEtPnNhZGRyLCAmbnEtPmRhZGRyKTsKQEAgLTE3MSw3ICsxNzEsOSBAQAogCiBzdGF0aWMgdm9pZCBuZl9jdF9mcmFnNl9ldmljdG9yKHZvaWQpCiB7CisJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWluZXRfZnJhZ19ldmljdG9yKCZuZl9pbml0X2ZyYWdzLCAmbmZfZnJhZ3MpOworCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCiBzdGF0aWMgdm9pZCBuZl9jdF9mcmFnNl9leHBpcmUodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMTgzLDcgKzE4NSw3IEBACiAKIAlzcGluX2xvY2soJmZxLT5xLmxvY2spOwogCi0JaWYgKGZxLT5xLmxhc3RfaW4gJiBDT01QTEVURSkKKwlpZiAoZnEtPnEubGFzdF9pbiAmIElORVRfRlJBR19DT01QTEVURSkKIAkJZ290byBvdXQ7CiAKIAlmcV9raWxsKGZxKTsKQEAgLTIyMCwxMiArMjIyLDEyIEBACiAKIAogc3RhdGljIGludCBuZl9jdF9mcmFnNl9xdWV1ZShzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICBzdHJ1Y3QgZnJhZ19oZHIgKmZoZHIsIGludCBuaG9mZikKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZyYWdfaGRyICpmaGRyLCBpbnQgbmhvZmYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnByZXYsICpuZXh0OwogCWludCBvZmZzZXQsIGVuZDsKIAotCWlmIChmcS0+cS5sYXN0X2luICYgQ09NUExFVEUpIHsKKwlpZiAoZnEtPnEubGFzdF9pbiAmIElORVRfRlJBR19DT01QTEVURSkgewogCQlwcl9kZWJ1ZygiQWxscmVhZHkgY29tcGxldGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQpAQCAtMjUyLDExICsyNTQsMTEgQEAKIAkJICogb3IgaGF2ZSBkaWZmZXJlbnQgZW5kLCB0aGUgc2VnbWVudCBpcyBjb3JydXB0ZWQuCiAJCSAqLwogCQlpZiAoZW5kIDwgZnEtPnEubGVuIHx8Ci0JCSAgICAoKGZxLT5xLmxhc3RfaW4gJiBMQVNUX0lOKSAmJiBlbmQgIT0gZnEtPnEubGVuKSkgeworCQkgICAgKChmcS0+cS5sYXN0X2luICYgSU5FVF9GUkFHX0xBU1RfSU4pICYmIGVuZCAhPSBmcS0+cS5sZW4pKSB7CiAJCQlwcl9kZWJ1ZygiYWxyZWFkeSByZWNlaXZlZCBsYXN0IGZyYWdtZW50XG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCWZxLT5xLmxhc3RfaW4gfD0gTEFTVF9JTjsKKwkJZnEtPnEubGFzdF9pbiB8PSBJTkVUX0ZSQUdfTEFTVF9JTjsKIAkJZnEtPnEubGVuID0gZW5kOwogCX0gZWxzZSB7CiAJCS8qIENoZWNrIGlmIHRoZSBmcmFnbWVudCBpcyByb3VuZGVkIHRvIDggYnl0ZXMuCkBAIC0yNzEsNyArMjczLDcgQEAKIAkJfQogCQlpZiAoZW5kID4gZnEtPnEubGVuKSB7CiAJCQkvKiBTb21lIGJpdHMgYmV5b25kIGVuZCAtPiBjb3JydXB0aW9uLiAqLwotCQkJaWYgKGZxLT5xLmxhc3RfaW4gJiBMQVNUX0lOKSB7CisJCQlpZiAoZnEtPnEubGFzdF9pbiAmIElORVRfRlJBR19MQVNUX0lOKSB7CiAJCQkJcHJfZGVidWcoImxhc3QgcGFja2V0IGFscmVhZHkgcmVhY2hlZC5cbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQpAQCAtMzgzLDcgKzM4NSw3IEBACiAJICovCiAJaWYgKG9mZnNldCA9PSAwKSB7CiAJCWZxLT5uaG9mZnNldCA9IG5ob2ZmOwotCQlmcS0+cS5sYXN0X2luIHw9IEZJUlNUX0lOOworCQlmcS0+cS5sYXN0X2luIHw9IElORVRfRlJBR19GSVJTVF9JTjsKIAl9CiAJd3JpdGVfbG9jaygmbmZfZnJhZ3MubG9jayk7CiAJbGlzdF9tb3ZlX3RhaWwoJmZxLT5xLmxydV9saXN0LCAmbmZfaW5pdF9mcmFncy5scnVfbGlzdCk7CkBAIC02NDUsNyArNjQ3LDggQEAKIAkJZ290byByZXRfb3JpZzsKIAl9CiAKLQlpZiAoZnEtPnEubGFzdF9pbiA9PSAoRklSU1RfSU58TEFTVF9JTikgJiYgZnEtPnEubWVhdCA9PSBmcS0+cS5sZW4pIHsKKwlpZiAoZnEtPnEubGFzdF9pbiA9PSAoSU5FVF9GUkFHX0ZJUlNUX0lOIHwgSU5FVF9GUkFHX0xBU1RfSU4pICYmCisJICAgIGZxLT5xLm1lYXQgPT0gZnEtPnEubGVuKSB7CiAJCXJldF9za2IgPSBuZl9jdF9mcmFnNl9yZWFzbShmcSwgZGV2KTsKIAkJaWYgKHJldF9za2IgPT0gTlVMTCkKIAkJCXByX2RlYnVnKCJDYW4ndCByZWFzc2VtYmxlIGZyYWdtZW50ZWQgcGFja2V0c1xuIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggMzVlNTAyYS4uY2E4YjgyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtMzUsMTYgKzM1LDE4IEBACiAKIHN0YXRpYyBpbnQgc29ja3N0YXQ2X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcS0+cHJpdmF0ZTsKKwogCXNlcV9wcmludGYoc2VxLCAiVENQNjogaW51c2UgJWRcbiIsCi0JCSAgICAgICBzb2NrX3Byb3RfaW51c2VfZ2V0KCZ0Y3B2Nl9wcm90KSk7CisJCSAgICAgICBzb2NrX3Byb3RfaW51c2VfZ2V0KG5ldCwgJnRjcHY2X3Byb3QpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIlVEUDY6IGludXNlICVkXG4iLAotCQkgICAgICAgc29ja19wcm90X2ludXNlX2dldCgmdWRwdjZfcHJvdCkpOworCQkgICAgICAgc29ja19wcm90X2ludXNlX2dldChuZXQsICZ1ZHB2Nl9wcm90KSk7CiAJc2VxX3ByaW50ZihzZXEsICJVRFBMSVRFNjogaW51c2UgJWRcbiIsCi0JCQlzb2NrX3Byb3RfaW51c2VfZ2V0KCZ1ZHBsaXRldjZfcHJvdCkpOworCQkJc29ja19wcm90X2ludXNlX2dldChuZXQsICZ1ZHBsaXRldjZfcHJvdCkpOwogCXNlcV9wcmludGYoc2VxLCAiUkFXNjogaW51c2UgJWRcbiIsCi0JCSAgICAgICBzb2NrX3Byb3RfaW51c2VfZ2V0KCZyYXd2Nl9wcm90KSk7CisJCSAgICAgICBzb2NrX3Byb3RfaW51c2VfZ2V0KG5ldCwgJnJhd3Y2X3Byb3QpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIkZSQUc2OiBpbnVzZSAlZCBtZW1vcnkgJWRcbiIsCi0JCSAgICAgICBpcDZfZnJhZ19ucXVldWVzKCZpbml0X25ldCksIGlwNl9mcmFnX21lbSgmaW5pdF9uZXQpKTsKKwkJICAgICAgIGlwNl9mcmFnX25xdWV1ZXMobmV0KSwgaXA2X2ZyYWdfbWVtKG5ldCkpOwogCXJldHVybiAwOwogfQogCkBAIC0xODMsNyArMTg1LDMyIEBACiAKIHN0YXRpYyBpbnQgc29ja3N0YXQ2X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzb2Nrc3RhdDZfc2VxX3Nob3csIE5VTEwpOworCWludCBlcnI7CisJc3RydWN0IG5ldCAqbmV0OworCisJZXJyID0gLUVOWElPOworCW5ldCA9IGdldF9wcm9jX25ldChpbm9kZSk7CisJaWYgKG5ldCA9PSBOVUxMKQorCQlnb3RvIGVycl9uZXQ7CisKKwllcnIgPSBzaW5nbGVfb3BlbihmaWxlLCBzb2Nrc3RhdDZfc2VxX3Nob3csIG5ldCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX29wZW47CisKKwlyZXR1cm4gMDsKKworZXJyX29wZW46CisJcHV0X25ldChuZXQpOworZXJyX25ldDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNvY2tzdGF0Nl9zZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQgPSAoKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGU7CisKKwlwdXRfbmV0KG5ldCk7CisJcmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc29ja3N0YXQ2X3NlcV9mb3BzID0gewpAQCAtMTkxLDcgKzIxOCw3IEBACiAJLm9wZW4JID0gc29ja3N0YXQ2X3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLAogCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzb2Nrc3RhdDZfc2VxX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgaW50IHNubXA2X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMjE0LDE1ICsyNDEsMTggQEAKIAlpZiAoIWlkZXYgfHwgIWlkZXYtPmRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoZGV2X25ldChpZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoIXByb2NfbmV0X2RldnNubXA2KQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXAgPSBjcmVhdGVfcHJvY19lbnRyeShpZGV2LT5kZXYtPm5hbWUsIFNfSVJVR08sIHByb2NfbmV0X2RldnNubXA2KTsKKwlwID0gcHJvY19jcmVhdGUoaWRldi0+ZGV2LT5uYW1lLCBTX0lSVUdPLAorCQkJcHJvY19uZXRfZGV2c25tcDYsICZzbm1wNl9zZXFfZm9wcyk7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXAtPmRhdGEgPSBpZGV2OwotCXAtPnByb2NfZm9wcyA9ICZzbm1wNl9zZXFfZm9wczsKIAogCWlkZXYtPnN0YXRzLnByb2NfZGlyX2VudHJ5ID0gcDsKIAlyZXR1cm4gMDsKQEAgLTI0MCwyNyArMjcwLDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXB2Nl9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInNvY2tzdGF0NiIsIFNfSVJVR08sCisJCQkmc29ja3N0YXQ2X3NlcV9mb3BzKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwdjZfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgInNvY2tzdGF0NiIpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdjZfcHJvY19vcHMgPSB7CisJLmluaXQgPSBpcHY2X3Byb2NfaW5pdF9uZXQsCisJLmV4aXQgPSBpcHY2X3Byb2NfZXhpdF9uZXQsCit9OworCiBpbnQgX19pbml0IGlwdjZfbWlzY19wcm9jX2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSAwOwogCisJaWYgKHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdjZfcHJvY19vcHMpKQorCQlnb3RvIHByb2NfbmV0X2ZhaWw7CisKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgInNubXA2IiwgU19JUlVHTywgJnNubXA2X3NlcV9mb3BzKSkKIAkJZ290byBwcm9jX3NubXA2X2ZhaWw7CiAKIAlwcm9jX25ldF9kZXZzbm1wNiA9IHByb2NfbWtkaXIoImRldl9zbm1wNiIsIGluaXRfbmV0LnByb2NfbmV0KTsKIAlpZiAoIXByb2NfbmV0X2RldnNubXA2KQogCQlnb3RvIHByb2NfZGV2X3NubXA2X2ZhaWw7Ci0KLQlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgInNvY2tzdGF0NiIsIFNfSVJVR08sICZzb2Nrc3RhdDZfc2VxX2ZvcHMpKQotCQlnb3RvIHByb2Nfc29ja3N0YXQ2X2ZhaWw7CiBvdXQ6CiAJcmV0dXJuIHJjOwogCi1wcm9jX3NvY2tzdGF0Nl9mYWlsOgotCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJkZXZfc25tcDYiKTsKIHByb2NfZGV2X3NubXA2X2ZhaWw6CiAJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgInNubXA2Iik7CiBwcm9jX3NubXA2X2ZhaWw6CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHY2X3Byb2Nfb3BzKTsKK3Byb2NfbmV0X2ZhaWw6CiAJcmMgPSAtRU5PTUVNOwogCWdvdG8gb3V0OwogfQpAQCAtMjcwLDUgKzMxOCw2IEBACiAJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgInNvY2tzdGF0NiIpOwogCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJkZXZfc25tcDYiKTsKIAlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAic25tcDYiKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdjZfcHJvY19vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jCmluZGV4IDg4OTdjY2YuLjYxOTNiMTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCisrKyBiL25ldC9pcHY2L3Jhdy5jCkBAIC01Myw2ICs1Myw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9NSVA2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01JUDZfTU9EVUxFKQogI2luY2x1ZGUgPG5ldC9taXA2Lmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9tcm91dGU2Lmg+CiAKICNpbmNsdWRlIDxuZXQvcmF3Lmg+CiAjaW5jbHVkZSA8bmV0L3Jhd3Y2Lmg+CkBAIC02MiwyMCArNjMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmF3X2hhc2hpbmZvIHJhd192Nl9oYXNoaW5mbyA9IHsKLQkubG9jayA9IF9fUldfTE9DS19VTkxPQ0tFRCgpLAorCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHJhd192Nl9oYXNoaW5mby5sb2NrKSwKIH07CiAKLXN0YXRpYyB2b2lkIHJhd192Nl9oYXNoKHN0cnVjdCBzb2NrICpzaykKLXsKLQlyYXdfaGFzaF9zayhzaywgJnJhd192Nl9oYXNoaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJhd192Nl91bmhhc2goc3RydWN0IHNvY2sgKnNrKQotewotCXJhd191bmhhc2hfc2soc2ssICZyYXdfdjZfaGFzaGluZm8pOwotfQotCi0KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX19yYXdfdjZfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLAogCQl1bnNpZ25lZCBzaG9ydCBudW0sIHN0cnVjdCBpbjZfYWRkciAqbG9jX2FkZHIsCiAJCXN0cnVjdCBpbjZfYWRkciAqcm10X2FkZHIsIGludCBkaWYpCkBAIC04Nyw3ICs3Nyw3IEBACiAJCWlmIChpbmV0X3NrKHNrKS0+bnVtID09IG51bSkgewogCQkJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCi0JCQlpZiAoc2stPnNrX25ldCAhPSBuZXQpCisJCQlpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICghaXB2Nl9hZGRyX2FueSgmbnAtPmRhZGRyKSAmJgpAQCAtMTc5LDE1ICsxNjksMTAgQEAKIAlyZWFkX2xvY2soJnJhd192Nl9oYXNoaW5mby5sb2NrKTsKIAlzayA9IHNrX2hlYWQoJnJhd192Nl9oYXNoaW5mby5odFtoYXNoXSk7CiAKLQkvKgotCSAqCVRoZSBmaXJzdCBzb2NrZXQgZm91bmQgd2lsbCBiZSBkZWxpdmVyZWQgYWZ0ZXIKLQkgKglkZWxpdmVyeSB0byB0cmFuc3BvcnQgcHJvdG9jb2xzLgotCSAqLwotCiAJaWYgKHNrID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCi0JbmV0ID0gc2tiLT5kZXYtPm5kX25ldDsKKwluZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlzayA9IF9fcmF3X3Y2X2xvb2t1cChuZXQsIHNrLCBuZXh0aGRyLCBkYWRkciwgc2FkZHIsIElQNkNCKHNrYiktPmlpZik7CiAKIAl3aGlsZSAoc2spIHsKQEAgLTI5MSw3ICsyNzYsNyBAQAogCQkJaWYgKCFzay0+c2tfYm91bmRfZGV2X2lmKQogCQkJCWdvdG8gb3V0OwogCi0JCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNrLT5za19uZXQsIHNrLT5za19ib3VuZF9kZXZfaWYpOworCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHNrLT5za19ib3VuZF9kZXZfaWYpOwogCQkJaWYgKCFkZXYpIHsKIAkJCQllcnIgPSAtRU5PREVWOwogCQkJCWdvdG8gb3V0OwpAQCAtMzA0LDcgKzI4OSw3IEBACiAJCXY0YWRkciA9IExPT1BCQUNLNF9JUFY2OwogCQlpZiAoIShhZGRyX3R5cGUgJiBJUFY2X0FERFJfTVVMVElDQVNUKSkJewogCQkJZXJyID0gLUVBRERSTk9UQVZBSUw7Ci0JCQlpZiAoIWlwdjZfY2hrX2FkZHIoc2stPnNrX25ldCwgJmFkZHItPnNpbjZfYWRkciwKKwkJCWlmICghaXB2Nl9jaGtfYWRkcihzb2NrX25ldChzayksICZhZGRyLT5zaW42X2FkZHIsCiAJCQkJCSAgIGRldiwgMCkpIHsKIAkJCQlpZiAoZGV2KQogCQkJCQlkZXZfcHV0KGRldik7CkBAIC0zNzIsOSArMzU3LDExIEBACiAJcmVhZF9sb2NrKCZyYXdfdjZfaGFzaGluZm8ubG9jayk7CiAJc2sgPSBza19oZWFkKCZyYXdfdjZfaGFzaGluZm8uaHRbaGFzaF0pOwogCWlmIChzayAhPSBOVUxMKSB7Ci0JCXNhZGRyID0gJmlwdjZfaGRyKHNrYiktPnNhZGRyOwotCQlkYWRkciA9ICZpcHY2X2hkcihza2IpLT5kYWRkcjsKLQkJbmV0ID0gc2tiLT5kZXYtPm5kX25ldDsKKwkJLyogTm90ZTogaXB2Nl9oZHIoc2tiKSAhPSBza2ItPmRhdGEgKi8KKwkJc3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CisJCXNhZGRyID0gJmlwNmgtPnNhZGRyOworCQlkYWRkciA9ICZpcDZoLT5kYWRkcjsKKwkJbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAkJd2hpbGUgKChzayA9IF9fcmF3X3Y2X2xvb2t1cChuZXQsIHNrLCBuZXh0aGRyLCBzYWRkciwgZGFkZHIsCiAJCQkJCQlJUDZDQihza2IpLT5paWYpKSkgewpAQCAtODIwLDE1ICs4MDcsNiBAQAogCQlmbC5mbDZfZmxvd2xhYmVsID0gbnAtPmZsb3dfbGFiZWw7CiAJfQogCi0JaWYgKGlwdjZfYWRkcl9hbnkoZGFkZHIpKSB7Ci0JCS8qCi0JCSAqIHVuc3BlY2lmaWVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKLQkJICogdHJlYXRlZCBhcyBlcnJvci4uLiBpcyB0aGlzIGNvcnJlY3QgPwotCQkgKi8KLQkJZmw2X3NvY2tfcmVsZWFzZShmbG93bGFiZWwpOwotCQlyZXR1cm4oLUVJTlZBTCk7Ci0JfQotCiAJaWYgKGZsLm9pZiA9PSAwKQogCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCkBAIC04NjEsNyArODM5LDEwIEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZGFkZHIpOworCWlmICghaXB2Nl9hZGRyX2FueShkYWRkcikpCisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBkYWRkcik7CisJZWxzZQorCQlmbC5mbDZfZHN0LnM2X2FkZHJbMTVdID0gMHgxOyAvKiA6OiBtZWFucyBsb29wYmFjayAoQlNEJ2lzbSkgKi8KIAlpZiAoaXB2Nl9hZGRyX2FueSgmZmwuZmw2X3NyYykgJiYgIWlwdjZfYWRkcl9hbnkoJm5wLT5zYWRkcikpCiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmbnAtPnNhZGRyKTsKIApAQCAtODk2LDkgKzg3Nyw3IEBACiAJCWVsc2UKIAkJCWhsaW1pdCA9IG5wLT5ob3BfbGltaXQ7CiAJCWlmIChobGltaXQgPCAwKQotCQkJaGxpbWl0ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfSE9QTElNSVQpOwotCQlpZiAoaGxpbWl0IDwgMCkKLQkJCWhsaW1pdCA9IGlwdjZfZ2V0X2hvcGxpbWl0KGRzdC0+ZGV2KTsKKwkJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAl9CiAKIAlpZiAodGNsYXNzIDwgMCkgewpAQCAtMTE1Myw3ICsxMTMyLDExIEBACiAJCX0KIAogCQlkZWZhdWx0OgorI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorCQkJcmV0dXJuIGlwNm1yX2lvY3RsKHNrLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisjZWxzZQogCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyNlbmRpZgogCX0KIH0KIApAQCAtMTE2MSw3ICsxMTQ0LDcgQEAKIHsKIAlpZiAoaW5ldF9zayhzayktPm51bSA9PSBJUFBST1RPX1JBVykKIAkJaXA2X3JhX2NvbnRyb2woc2ssIC0xLCBOVUxMKTsKLQorCWlwNm1yX3NrX2RvbmUoc2spOwogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIH0KIApAQCAtMTE4NCw4ICsxMTY3LDYgQEAKIAlyZXR1cm4oMCk7CiB9CiAKLURFRklORV9QUk9UT19JTlVTRShyYXd2NikKLQogc3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIlJBV3Y2IiwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC0xMjAxLDE0ICsxMTgyLDE0IEBACiAJLnJlY3Ztc2cJICAgPSByYXd2Nl9yZWN2bXNnLAogCS5iaW5kCQkgICA9IHJhd3Y2X2JpbmQsCiAJLmJhY2tsb2dfcmN2CSAgID0gcmF3djZfcmN2X3NrYiwKLQkuaGFzaAkJICAgPSByYXdfdjZfaGFzaCwKLQkudW5oYXNoCQkgICA9IHJhd192Nl91bmhhc2gsCisJLmhhc2gJCSAgID0gcmF3X2hhc2hfc2ssCisJLnVuaGFzaAkJICAgPSByYXdfdW5oYXNoX3NrLAogCS5vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgcmF3Nl9zb2NrKSwKKwkuaC5yYXdfaGFzaAkgICA9ICZyYXdfdjZfaGFzaGluZm8sCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9yYXd2Nl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9yYXd2Nl9nZXRzb2Nrb3B0LAogI2VuZGlmCi0JUkVGX1BST1RPX0lOVVNFKHJhd3Y2KQogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggZjkzNmQwNC4uN2IyNDdlMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAKIAlzcGluX2xvY2soJmZxLT5xLmxvY2spOwogCi0JaWYgKGZxLT5xLmxhc3RfaW4gJiBDT01QTEVURSkKKwlpZiAoZnEtPnEubGFzdF9pbiAmIElORVRfRlJBR19DT01QTEVURSkKIAkJZ290byBvdXQ7CiAKIAlmcV9raWxsKGZxKTsKQEAgLTIxNyw3ICsyMTcsNyBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyogRG9uJ3Qgc2VuZCBlcnJvciBpZiB0aGUgZmlyc3Qgc2VnbWVudCBkaWQgbm90IGFycml2ZS4gKi8KLQlpZiAoIShmcS0+cS5sYXN0X2luJkZJUlNUX0lOKSB8fCAhZnEtPnEuZnJhZ21lbnRzKQorCWlmICghKGZxLT5xLmxhc3RfaW4gJiBJTkVUX0ZSQUdfRklSU1RfSU4pIHx8ICFmcS0+cS5mcmFnbWVudHMpCiAJCWdvdG8gb3V0OwogCiAJLyoKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IG9mZnNldCwgZW5kOwogCi0JaWYgKGZxLT5xLmxhc3RfaW4gJiBDT01QTEVURSkKKwlpZiAoZnEtPnEubGFzdF9pbiAmIElORVRfRlJBR19DT01QTEVURSkKIAkJZ290byBlcnI7CiAKIAlvZmZzZXQgPSBudG9ocyhmaGRyLT5mcmFnX29mZikgJiB+MHg3OwpAQCAtMjk0LDkgKzI5NCw5IEBACiAJCSAqIG9yIGhhdmUgZGlmZmVyZW50IGVuZCwgdGhlIHNlZ21lbnQgaXMgY29ycnVwdGVkLgogCQkgKi8KIAkJaWYgKGVuZCA8IGZxLT5xLmxlbiB8fAotCQkgICAgKChmcS0+cS5sYXN0X2luICYgTEFTVF9JTikgJiYgZW5kICE9IGZxLT5xLmxlbikpCisJCSAgICAoKGZxLT5xLmxhc3RfaW4gJiBJTkVUX0ZSQUdfTEFTVF9JTikgJiYgZW5kICE9IGZxLT5xLmxlbikpCiAJCQlnb3RvIGVycjsKLQkJZnEtPnEubGFzdF9pbiB8PSBMQVNUX0lOOworCQlmcS0+cS5sYXN0X2luIHw9IElORVRfRlJBR19MQVNUX0lOOwogCQlmcS0+cS5sZW4gPSBlbmQ7CiAJfSBlbHNlIHsKIAkJLyogQ2hlY2sgaWYgdGhlIGZyYWdtZW50IGlzIHJvdW5kZWQgdG8gOCBieXRlcy4KQEAgLTMxNCw3ICszMTQsNyBAQAogCQl9CiAJCWlmIChlbmQgPiBmcS0+cS5sZW4pIHsKIAkJCS8qIFNvbWUgYml0cyBiZXlvbmQgZW5kIC0+IGNvcnJ1cHRpb24uICovCi0JCQlpZiAoZnEtPnEubGFzdF9pbiAmIExBU1RfSU4pCisJCQlpZiAoZnEtPnEubGFzdF9pbiAmIElORVRfRlJBR19MQVNUX0lOKQogCQkJCWdvdG8gZXJyOwogCQkJZnEtPnEubGVuID0gZW5kOwogCQl9CkBAIC00MTcsMTAgKzQxNywxMSBAQAogCSAqLwogCWlmIChvZmZzZXQgPT0gMCkgewogCQlmcS0+bmhvZmZzZXQgPSBuaG9mZjsKLQkJZnEtPnEubGFzdF9pbiB8PSBGSVJTVF9JTjsKKwkJZnEtPnEubGFzdF9pbiB8PSBJTkVUX0ZSQUdfRklSU1RfSU47CiAJfQogCi0JaWYgKGZxLT5xLmxhc3RfaW4gPT0gKEZJUlNUX0lOIHwgTEFTVF9JTikgJiYgZnEtPnEubWVhdCA9PSBmcS0+cS5sZW4pCisJaWYgKGZxLT5xLmxhc3RfaW4gPT0gKElORVRfRlJBR19GSVJTVF9JTiB8IElORVRfRlJBR19MQVNUX0lOKSAmJgorCSAgICBmcS0+cS5tZWF0ID09IGZxLT5xLmxlbikKIAkJcmV0dXJuIGlwNl9mcmFnX3JlYXNtKGZxLCBwcmV2LCBkZXYpOwogCiAJd3JpdGVfbG9jaygmaXA2X2ZyYWdzLmxvY2spOwpAQCAtNjAwLDcgKzYwMSw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCW5ldCA9IHNrYi0+ZGV2LT5uZF9uZXQ7CisJbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJaWYgKGF0b21pY19yZWFkKCZuZXQtPmlwdjYuZnJhZ3MubWVtKSA+IG5ldC0+aXB2Ni5mcmFncy5oaWdoX3RocmVzaCkKIAkJaXA2X2V2aWN0b3IobmV0LCBpcDZfZHN0X2lkZXYoc2tiLT5kc3QpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNmU3YjU2ZS4uMjEwYTA3OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC0zNiwxMCArMzYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9yb3V0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L21yb3V0ZTYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3NubXAuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgpAQCAtODcsMTQgKzg5LDE2IEBACiBzdGF0aWMgdm9pZAkJaXA2X3J0X3VwZGF0ZV9wbXR1KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIG10dSk7CiAKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKIAkJCQkJICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4LAogCQkJCQkgICB1bnNpZ25lZCBwcmVmKTsKLXN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9nZXRfcm91dGVfaW5mbyhzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKK3N0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9nZXRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAogCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwgaW50IGlmaW5kZXgpOwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKIAkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKIAkuZ2MJCQk9CWlwNl9kc3RfZ2MsCkBAIC0xMjQsNyArMTI4LDcgQEAKIAkuZW50cmllcwkJPQlBVE9NSUNfSU5JVCgwKSwKIH07CiAKLXN0cnVjdCBydDZfaW5mbyBpcDZfbnVsbF9lbnRyeSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gaXA2X251bGxfZW50cnlfdGVtcGxhdGUgPSB7CiAJLnUgPSB7CiAJCS5kc3QgPSB7CiAJCQkuX19yZWZjbnQJPSBBVE9NSUNfSU5JVCgxKSwKQEAgLTEzNCw4ICsxMzgsNiBAQAogCQkJLm1ldHJpY3MJPSB7IFtSVEFYX0hPUExJTUlUIC0gMV0gPSAyNTUsIH0sCiAJCQkuaW5wdXQJCT0gaXA2X3BrdF9kaXNjYXJkLAogCQkJLm91dHB1dAkJPSBpcDZfcGt0X2Rpc2NhcmRfb3V0LAotCQkJLm9wcwkJPSAmaXA2X2RzdF9vcHMsCi0JCQkucGF0aAkJPSAoc3RydWN0IGRzdF9lbnRyeSopJmlwNl9udWxsX2VudHJ5LAogCQl9CiAJfSwKIAkucnQ2aV9mbGFncwk9IChSVEZfUkVKRUNUIHwgUlRGX05PTkVYVEhPUCksCkBAIC0xNDgsNyArMTUwLDcgQEAKIHN0YXRpYyBpbnQgaXA2X3BrdF9wcm9oaWJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBpbnQgaXA2X3BrdF9wcm9oaWJpdF9vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLXN0cnVjdCBydDZfaW5mbyBpcDZfcHJvaGliaXRfZW50cnkgPSB7CitzdHJ1Y3QgcnQ2X2luZm8gaXA2X3Byb2hpYml0X2VudHJ5X3RlbXBsYXRlID0gewogCS51ID0gewogCQkuZHN0ID0gewogCQkJLl9fcmVmY250CT0gQVRPTUlDX0lOSVQoMSksCkBAIC0xNTgsOCArMTYwLDYgQEAKIAkJCS5tZXRyaWNzCT0geyBbUlRBWF9IT1BMSU1JVCAtIDFdID0gMjU1LCB9LAogCQkJLmlucHV0CQk9IGlwNl9wa3RfcHJvaGliaXQsCiAJCQkub3V0cHV0CQk9IGlwNl9wa3RfcHJvaGliaXRfb3V0LAotCQkJLm9wcwkJPSAmaXA2X2RzdF9vcHMsCi0JCQkucGF0aAkJPSAoc3RydWN0IGRzdF9lbnRyeSopJmlwNl9wcm9oaWJpdF9lbnRyeSwKIAkJfQogCX0sCiAJLnJ0NmlfZmxhZ3MJPSAoUlRGX1JFSkVDVCB8IFJURl9OT05FWFRIT1ApLApAQCAtMTY3LDcgKzE2Nyw3IEBACiAJLnJ0NmlfcmVmCT0gQVRPTUlDX0lOSVQoMSksCiB9OwogCi1zdHJ1Y3QgcnQ2X2luZm8gaXA2X2Jsa19ob2xlX2VudHJ5ID0geworc3RhdGljIHN0cnVjdCBydDZfaW5mbyBpcDZfYmxrX2hvbGVfZW50cnlfdGVtcGxhdGUgPSB7CiAJLnUgPSB7CiAJCS5kc3QgPSB7CiAJCQkuX19yZWZjbnQJPSBBVE9NSUNfSU5JVCgxKSwKQEAgLTE3Nyw4ICsxNzcsNiBAQAogCQkJLm1ldHJpY3MJPSB7IFtSVEFYX0hPUExJTUlUIC0gMV0gPSAyNTUsIH0sCiAJCQkuaW5wdXQJCT0gZHN0X2Rpc2NhcmQsCiAJCQkub3V0cHV0CQk9IGRzdF9kaXNjYXJkLAotCQkJLm9wcwkJPSAmaXA2X2RzdF9vcHMsCi0JCQkucGF0aAkJPSAoc3RydWN0IGRzdF9lbnRyeSopJmlwNl9ibGtfaG9sZV9lbnRyeSwKIAkJfQogCX0sCiAJLnJ0NmlfZmxhZ3MJPSAoUlRGX1JFSkVDVCB8IFJURl9OT05FWFRIT1ApLApAQCAtMTg5LDkgKzE4Nyw5IEBACiAjZW5kaWYKIAogLyogYWxsb2NhdGUgZHN0IHdpdGggaXA2X2RzdF9vcHMgKi8KLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBydDZfaW5mbyAqaXA2X2RzdF9hbGxvYyh2b2lkKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcnQ2X2luZm8gKmlwNl9kc3RfYWxsb2Moc3RydWN0IGRzdF9vcHMgKm9wcykKIHsKLQlyZXR1cm4gKHN0cnVjdCBydDZfaW5mbyAqKWRzdF9hbGxvYygmaXA2X2RzdF9vcHMpOworCXJldHVybiAoc3RydWN0IHJ0Nl9pbmZvICopZHN0X2FsbG9jKG9wcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwNl9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCkBAIC0yMTEsNyArMjA5LDcgQEAKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWRzdDsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gcnQtPnJ0NmlfaWRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbG9vcGJhY2tfZGV2ID0KLQkJZGV2LT5uZF9uZXQtPmxvb3BiYWNrX2RldjsKKwkJZGV2X25ldChkZXYpLT5sb29wYmFja19kZXY7CiAKIAlpZiAoZGV2ICE9IGxvb3BiYWNrX2RldiAmJiBpZGV2ICE9IE5VTEwgJiYgaWRldi0+ZGV2ID09IGRldikgewogCQlzdHJ1Y3QgaW5ldDZfZGV2ICpsb29wYmFja19pZGV2ID0KQEAgLTIzOSw3ICsyMzcsOCBAQAogICoJUm91dGUgbG9va3VwLiBBbnkgdGFibGUtPnRiNl9sb2NrIGlzIGltcGxpZWQuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IHJ0Nl9pbmZvICpydDZfZGV2aWNlX21hdGNoKHN0cnVjdCBydDZfaW5mbyAqcnQsCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2RldmljZV9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgICAgc3RydWN0IHJ0Nl9pbmZvICpydCwKIAkJCQkJCSAgICBpbnQgb2lmLAogCQkJCQkJICAgIGludCBzdHJpY3QpCiB7CkBAIC0yNjgsNyArMjY3LDcgQEAKIAkJCXJldHVybiBsb2NhbDsKIAogCQlpZiAoc3RyaWN0KQotCQkJcmV0dXJuICZpcDZfbnVsbF9lbnRyeTsKKwkJCXJldHVybiBuZXQtPmlwdjYuaXA2X251bGxfZW50cnk7CiAJfQogCXJldHVybiBydDsKIH0KQEAgLTQwOSw5ICs0MDgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9zZWxlY3Qoc3RydWN0IGZpYjZfbm9kZSAqZm4sIGludCBvaWYsIGludCBzdHJpY3QpCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICptYXRjaCwgKnJ0MDsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAlSVDZfVFJBQ0UoIiVzKGZuLT5sZWFmPSVwLCBvaWY9JWQpXG4iLAotCQkgIF9fRlVOQ1RJT05fXywgZm4tPmxlYWYsIG9pZik7CisJCSAgX19mdW5jX18sIGZuLT5sZWFmLCBvaWYpOwogCiAJcnQwID0gZm4tPnJyX3B0cjsKIAlpZiAoIXJ0MCkKQEAgLTQzMiwxNSArNDMyLDE3IEBACiAJfQogCiAJUlQ2X1RSQUNFKCIlcygpID0+ICVwXG4iLAotCQkgIF9fRlVOQ1RJT05fXywgbWF0Y2gpOworCQkgIF9fZnVuY19fLCBtYXRjaCk7CiAKLQlyZXR1cm4gKG1hdGNoID8gbWF0Y2ggOiAmaXA2X251bGxfZW50cnkpOworCW5ldCA9IGRldl9uZXQocnQwLT5ydDZpX2Rldik7CisJcmV0dXJuIChtYXRjaCA/IG1hdGNoIDogbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KTsKIH0KIAogI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk8KIGludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sCiAJCSAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCByb3V0ZV9pbmZvICpyaW5mbyA9IChzdHJ1Y3Qgcm91dGVfaW5mbyAqKSBvcHQ7CiAJc3RydWN0IGluNl9hZGRyIHByZWZpeF9idWYsICpwcmVmaXg7CiAJdW5zaWduZWQgaW50IHByZWY7CkBAIC00ODgsNyArNDkwLDggQEAKIAkJcHJlZml4ID0gJnByZWZpeF9idWY7CiAJfQogCi0JcnQgPSBydDZfZ2V0X3JvdXRlX2luZm8ocHJlZml4LCByaW5mby0+cHJlZml4X2xlbiwgZ3dhZGRyLCBkZXYtPmlmaW5kZXgpOworCXJ0ID0gcnQ2X2dldF9yb3V0ZV9pbmZvKG5ldCwgcHJlZml4LCByaW5mby0+cHJlZml4X2xlbiwgZ3dhZGRyLAorCQkJCWRldi0+aWZpbmRleCk7CiAKIAlpZiAocnQgJiYgIWxpZmV0aW1lKSB7CiAJCWlwNl9kZWxfcnQocnQpOwpAQCAtNDk2LDcgKzQ5OSw3IEBACiAJfQogCiAJaWYgKCFydCAmJiBsaWZldGltZSkKLQkJcnQgPSBydDZfYWRkX3JvdXRlX2luZm8ocHJlZml4LCByaW5mby0+cHJlZml4X2xlbiwgZ3dhZGRyLCBkZXYtPmlmaW5kZXgsCisJCXJ0ID0gcnQ2X2FkZF9yb3V0ZV9pbmZvKG5ldCwgcHJlZml4LCByaW5mby0+cHJlZml4X2xlbiwgZ3dhZGRyLCBkZXYtPmlmaW5kZXgsCiAJCQkJCXByZWYpOwogCWVsc2UgaWYgKHJ0KQogCQlydC0+cnQ2aV9mbGFncyA9IFJURl9ST1VURUlORk8gfApAQCAtNTE1LDkgKzUxOCw5IEBACiB9CiAjZW5kaWYKIAotI2RlZmluZSBCQUNLVFJBQ0soc2FkZHIpIFwKKyNkZWZpbmUgQkFDS1RSQUNLKF9fbmV0LCBzYWRkcikJCQlcCiBkbyB7IFwKLQlpZiAocnQgPT0gJmlwNl9udWxsX2VudHJ5KSB7IFwKKwlpZiAocnQgPT0gX19uZXQtPmlwdjYuaXA2X251bGxfZW50cnkpIHsJXAogCQlzdHJ1Y3QgZmliNl9ub2RlICpwbjsgXAogCQl3aGlsZSAoMSkgeyBcCiAJCQlpZiAoZm4tPmZuX2ZsYWdzICYgUlROX1RMX1JPT1QpIFwKQEAgLTUzMyw3ICs1MzYsOCBAQAogCX0gXAogfSB3aGlsZSgwKQogCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICppcDZfcG9sX3JvdXRlX2xvb2t1cChzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICppcDZfcG9sX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgICAgc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLAogCQkJCQkgICAgIHN0cnVjdCBmbG93aSAqZmwsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZmliNl9ub2RlICpmbjsKQEAgLTU0Myw4ICs1NDcsOCBAQAogCWZuID0gZmliNl9sb29rdXAoJnRhYmxlLT50YjZfcm9vdCwgJmZsLT5mbDZfZHN0LCAmZmwtPmZsNl9zcmMpOwogcmVzdGFydDoKIAlydCA9IGZuLT5sZWFmOwotCXJ0ID0gcnQ2X2RldmljZV9tYXRjaChydCwgZmwtPm9pZiwgZmxhZ3MpOwotCUJBQ0tUUkFDSygmZmwtPmZsNl9zcmMpOworCXJ0ID0gcnQ2X2RldmljZV9tYXRjaChuZXQsIHJ0LCBmbC0+b2lmLCBmbGFncyk7CisJQkFDS1RSQUNLKG5ldCwgJmZsLT5mbDZfc3JjKTsKIG91dDoKIAlkc3RfdXNlKCZydC0+dS5kc3QsIGppZmZpZXMpOwogCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwpAQCAtNTUyLDggKzU1Niw4IEBACiAKIH0KIAotc3RydWN0IHJ0Nl9pbmZvICpydDZfbG9va3VwKHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkgICAgaW50IG9pZiwgaW50IHN0cmljdCkKK3N0cnVjdCBydDZfaW5mbyAqcnQ2X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgaW50IG9pZiwgaW50IHN0cmljdCkKIHsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCS5vaWYgPSBvaWYsCkBAIC01NzEsNyArNTc1LDcgQEAKIAkJZmxhZ3MgfD0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjsKIAl9CiAKLQlkc3QgPSBmaWI2X3J1bGVfbG9va3VwKCZmbCwgZmxhZ3MsIGlwNl9wb2xfcm91dGVfbG9va3VwKTsKKwlkc3QgPSBmaWI2X3J1bGVfbG9va3VwKG5ldCwgJmZsLCBmbGFncywgaXA2X3BvbF9yb3V0ZV9sb29rdXApOwogCWlmIChkc3QtPmVycm9yID09IDApCiAJCXJldHVybiAoc3RydWN0IHJ0Nl9pbmZvICopIGRzdDsKIApAQCAtNjA0LDcgKzYwOCw3IEBACiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogewogCXN0cnVjdCBubF9pbmZvIGluZm8gPSB7Ci0JCS5ubF9uZXQgPSAmaW5pdF9uZXQsCisJCS5ubF9uZXQgPSBkZXZfbmV0KHJ0LT5ydDZpX2RldiksCiAJfTsKIAlyZXR1cm4gX19pcDZfaW5zX3J0KHJ0LCAmaW5mbyk7CiB9CkBAIC02NjAsOCArNjY0LDggQEAKIAlyZXR1cm4gcnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKmlwNl9wb2xfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBpbnQgb2lmLAotCQkJCQkgICAgc3RydWN0IGZsb3dpICpmbCwgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqaXA2X3BvbF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgaW50IG9pZiwKKwkJCQkgICAgICBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGZpYjZfbm9kZSAqZm47CiAJc3RydWN0IHJ0Nl9pbmZvICpydCwgKm5ydDsKQEAgLTY4MCw4ICs2ODQsOSBAQAogCiByZXN0YXJ0OgogCXJ0ID0gcnQ2X3NlbGVjdChmbiwgb2lmLCBzdHJpY3QgfCByZWFjaGFibGUpOwotCUJBQ0tUUkFDSygmZmwtPmZsNl9zcmMpOwotCWlmIChydCA9PSAmaXA2X251bGxfZW50cnkgfHwKKworCUJBQ0tUUkFDSyhuZXQsICZmbC0+Zmw2X3NyYyk7CisJaWYgKHJ0ID09IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSB8fAogCSAgICBydC0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkKIAkJZ290byBvdXQ7CiAKQEAgLTY5OSw3ICs3MDQsNyBAQAogCX0KIAogCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwotCXJ0ID0gbnJ0ID8gOiAmaXA2X251bGxfZW50cnk7CisJcnQgPSBucnQgPyA6IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKIAogCWRzdF9ob2xkKCZydC0+dS5kc3QpOwogCWlmIChucnQpIHsKQEAgLTczMiwxNSArNzM3LDE2IEBACiAJcmV0dXJuIHJ0OwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICppcDZfcG9sX3JvdXRlX2lucHV0KHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwKK3N0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKmlwNl9wb2xfcm91dGVfaW5wdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsCiAJCQkJCSAgICBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgZmxhZ3MpCiB7Ci0JcmV0dXJuIGlwNl9wb2xfcm91dGUodGFibGUsIGZsLT5paWYsIGZsLCBmbGFncyk7CisJcmV0dXJuIGlwNl9wb2xfcm91dGUobmV0LCB0YWJsZSwgZmwtPmlpZiwgZmwsIGZsYWdzKTsKIH0KIAogdm9pZCBpcDZfcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlpbnQgZmxhZ3MgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSOwogCXN0cnVjdCBmbG93aSBmbCA9IHsKIAkJLmlpZiA9IHNrYi0+ZGV2LT5pZmluZGV4LApAQCAtNzU4LDE2ICs3NjQsMTcgQEAKIAlpZiAocnQ2X25lZWRfc3RyaWN0KCZpcGgtPmRhZGRyKSkKIAkJZmxhZ3MgfD0gUlQ2X0xPT0tVUF9GX0lGQUNFOwogCi0Jc2tiLT5kc3QgPSBmaWI2X3J1bGVfbG9va3VwKCZmbCwgZmxhZ3MsIGlwNl9wb2xfcm91dGVfaW5wdXQpOworCXNrYi0+ZHN0ID0gZmliNl9ydWxlX2xvb2t1cChuZXQsICZmbCwgZmxhZ3MsIGlwNl9wb2xfcm91dGVfaW5wdXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICppcDZfcG9sX3JvdXRlX291dHB1dChzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICppcDZfcG9sX3JvdXRlX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwKIAkJCQkJICAgICBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgZmxhZ3MpCiB7Ci0JcmV0dXJuIGlwNl9wb2xfcm91dGUodGFibGUsIGZsLT5vaWYsIGZsLCBmbGFncyk7CisJcmV0dXJuIGlwNl9wb2xfcm91dGUobmV0LCB0YWJsZSwgZmwtPm9pZiwgZmwsIGZsYWdzKTsKIH0KIAotc3RydWN0IGRzdF9lbnRyeSAqIGlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2kgKmZsKQorc3RydWN0IGRzdF9lbnRyeSAqIGlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgIHN0cnVjdCBmbG93aSAqZmwpCiB7CiAJaW50IGZsYWdzID0gMDsKIApAQCAtNzc2LDggKzc4MywxNyBAQAogCiAJaWYgKCFpcHY2X2FkZHJfYW55KCZmbC0+Zmw2X3NyYykpCiAJCWZsYWdzIHw9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7CisJZWxzZSBpZiAoc2spIHsKKwkJdW5zaWduZWQgaW50IHByZWZzID0gaW5ldDZfc2soc2spLT5zcmNwcmVmczsKKwkJaWYgKHByZWZzICYgSVBWNl9QUkVGRVJfU1JDX1RNUCkKKwkJCWZsYWdzIHw9IFJUNl9MT09LVVBfRl9TUkNQUkVGX1RNUDsKKwkJaWYgKHByZWZzICYgSVBWNl9QUkVGRVJfU1JDX1BVQkxJQykKKwkJCWZsYWdzIHw9IFJUNl9MT09LVVBfRl9TUkNQUkVGX1BVQkxJQzsKKwkJaWYgKHByZWZzICYgSVBWNl9QUkVGRVJfU1JDX0NPQSkKKwkJCWZsYWdzIHw9IFJUNl9MT09LVVBfRl9TUkNQUkVGX0NPQTsKKwl9CiAKLQlyZXR1cm4gZmliNl9ydWxlX2xvb2t1cChmbCwgZmxhZ3MsIGlwNl9wb2xfcm91dGVfb3V0cHV0KTsKKwlyZXR1cm4gZmliNl9ydWxlX2xvb2t1cChuZXQsIGZsLCBmbGFncywgaXA2X3BvbF9yb3V0ZV9vdXRwdXQpOwogfQogCiBFWFBPUlRfU1lNQk9MKGlwNl9yb3V0ZV9vdXRwdXQpOwpAQCAtODg2LDEyICs5MDIsMTIgQEAKIAogc3RhdGljIGludCBpcHY2X2dldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwdjZfYWR2bXNzKHVuc2lnbmVkIGludCBtdHUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcHY2X2Fkdm1zcyhzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBtdHUpCiB7CiAJbXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CiAKLQlpZiAobXR1IDwgaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X21pbl9hZHZtc3MpCi0JCW10dSA9IGluaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzOworCWlmIChtdHUgPCBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzKQorCQltdHUgPSBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzOwogCiAJLyoKIAkgKiBNYXhpbWFsIG5vbi1qdW1ibyBJUHY2IHBheWxvYWQgaXMgSVBWNl9NQVhQTEVOIGFuZApAQCAtOTA0LDIxICs5MjAsMjEgQEAKIAlyZXR1cm4gbXR1OwogfQogCi1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqbmRpc2NfZHN0X2djX2xpc3Q7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5kaXNjX2xvY2spOworc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKmljbXA2X2RzdF9nY19saXN0Oworc3RhdGljIERFRklORV9TUElOTE9DSyhpY21wNl9kc3RfbG9jayk7CiAKLXN0cnVjdCBkc3RfZW50cnkgKm5kaXNjX2RzdF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorc3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKLQkJCQkgIHN0cnVjdCBpbjZfYWRkciAqYWRkciwKLQkJCQkgIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKikpCisJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKIAlpZiAodW5saWtlbHkoaWRldiA9PSBOVUxMKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlydCA9IGlwNl9kc3RfYWxsb2MoKTsKKwlydCA9IGlwNl9kc3RfYWxsb2MobmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKIAlpZiAodW5saWtlbHkocnQgPT0gTlVMTCkpIHsKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJCWdvdG8gb3V0OwpAQCAtOTM2LDggKzk1Miw4IEBACiAJYXRvbWljX3NldCgmcnQtPnUuZHN0Ll9fcmVmY250LCAxKTsKIAlydC0+dS5kc3QubWV0cmljc1tSVEFYX0hPUExJTUlULTFdID0gMjU1OwogCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gaXB2Nl9nZXRfbXR1KHJ0LT5ydDZpX2Rldik7Ci0JcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSBpcHY2X2Fkdm1zcyhkc3RfbXR1KCZydC0+dS5kc3QpKTsKLQlydC0+dS5kc3Qub3V0cHV0ICA9IG91dHB1dDsKKwlydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKG5ldCwgZHN0X210dSgmcnQtPnUuZHN0KSk7CisJcnQtPnUuZHN0Lm91dHB1dCAgPSBpcDZfb3V0cHV0OwogCiAjaWYgMAkvKiB0aGVyZSdzIG5vIGNoYW5jZSB0byB1c2UgdGhlc2UgZm9yIG5kaXNjICovCiAJcnQtPnUuZHN0LmZsYWdzICAgPSBpcHY2X2FkZHJfdHlwZShhZGRyKSAmIElQVjZfQUREUl9VTklDQVNUCkBAIC05NDcsMTggKzk2MywxOCBAQAogCXJ0LT5ydDZpX2RzdC5wbGVuID0gMTI4OwogI2VuZGlmCiAKLQlzcGluX2xvY2tfYmgoJm5kaXNjX2xvY2spOwotCXJ0LT51LmRzdC5uZXh0ID0gbmRpc2NfZHN0X2djX2xpc3Q7Ci0JbmRpc2NfZHN0X2djX2xpc3QgPSAmcnQtPnUuZHN0OwotCXNwaW5fdW5sb2NrX2JoKCZuZGlzY19sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmljbXA2X2RzdF9sb2NrKTsKKwlydC0+dS5kc3QubmV4dCA9IGljbXA2X2RzdF9nY19saXN0OworCWljbXA2X2RzdF9nY19saXN0ID0gJnJ0LT51LmRzdDsKKwlzcGluX3VubG9ja19iaCgmaWNtcDZfZHN0X2xvY2spOwogCi0JZmliNl9mb3JjZV9zdGFydF9nYygpOworCWZpYjZfZm9yY2Vfc3RhcnRfZ2MobmV0KTsKIAogb3V0OgogCXJldHVybiAmcnQtPnUuZHN0OwogfQogCi1pbnQgbmRpc2NfZHN0X2djKGludCAqbW9yZSkKK2ludCBpY21wNl9kc3RfZ2MoaW50ICptb3JlKQogewogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCwgKm5leHQsICoqcHByZXY7CiAJaW50IGZyZWVkOwpAQCAtOTY2LDggKzk4Miw4IEBACiAJbmV4dCA9IE5VTEw7CiAJZnJlZWQgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZuZGlzY19sb2NrKTsKLQlwcHJldiA9ICZuZGlzY19kc3RfZ2NfbGlzdDsKKwlzcGluX2xvY2tfYmgoJmljbXA2X2RzdF9sb2NrKTsKKwlwcHJldiA9ICZpY21wNl9kc3RfZ2NfbGlzdDsKIAogCXdoaWxlICgoZHN0ID0gKnBwcmV2KSAhPSBOVUxMKSB7CiAJCWlmICghYXRvbWljX3JlYWQoJmRzdC0+X19yZWZjbnQpKSB7CkBAIC05ODAsMzAgKzk5NiwzMyBAQAogCQl9CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJm5kaXNjX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZpY21wNl9kc3RfbG9jayk7CiAKIAlyZXR1cm4gZnJlZWQ7CiB9CiAKIHN0YXRpYyBpbnQgaXA2X2RzdF9nYyhzdHJ1Y3QgZHN0X29wcyAqb3BzKQogewotCXN0YXRpYyB1bnNpZ25lZCBleHBpcmUgPSAzMCpIWjsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2djOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBvcHMtPmRzdF9uZXQ7CisJaW50IHJ0X21pbl9pbnRlcnZhbCA9IG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX21pbl9pbnRlcnZhbDsKKwlpbnQgcnRfbWF4X3NpemUgPSBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZTsKKwlpbnQgcnRfZWxhc3RpY2l0eSA9IG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2VsYXN0aWNpdHk7CisJaW50IHJ0X2djX3RpbWVvdXQgPSBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY190aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgcnRfbGFzdF9nYyA9IG5ldC0+aXB2Ni5pcDZfcnRfbGFzdF9nYzsKIAotCWlmICh0aW1lX2FmdGVyKGxhc3RfZ2MgKyBpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfbWluX2ludGVydmFsLCBub3cpICYmCi0JICAgIGF0b21pY19yZWFkKCZpcDZfZHN0X29wcy5lbnRyaWVzKSA8PSBpbml0X25ldC5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemUpCisJaWYgKHRpbWVfYWZ0ZXIocnRfbGFzdF9nYyArIHJ0X21pbl9pbnRlcnZhbCwgbm93KSAmJgorCSAgICBhdG9taWNfcmVhZCgmb3BzLT5lbnRyaWVzKSA8PSBydF9tYXhfc2l6ZSkKIAkJZ290byBvdXQ7CiAKLQlleHBpcmUrKzsKLQlmaWI2X3J1bl9nYyhleHBpcmUpOwotCWxhc3RfZ2MgPSBub3c7Ci0JaWYgKGF0b21pY19yZWFkKCZpcDZfZHN0X29wcy5lbnRyaWVzKSA8IGlwNl9kc3Rfb3BzLmdjX3RocmVzaCkKLQkJZXhwaXJlID0gaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X2djX3RpbWVvdXQ+PjE7Ci0KKwluZXQtPmlwdjYuaXA2X3J0X2djX2V4cGlyZSsrOworCWZpYjZfcnVuX2djKG5ldC0+aXB2Ni5pcDZfcnRfZ2NfZXhwaXJlLCBuZXQpOworCW5ldC0+aXB2Ni5pcDZfcnRfbGFzdF9nYyA9IG5vdzsKKwlpZiAoYXRvbWljX3JlYWQoJm9wcy0+ZW50cmllcykgPCBvcHMtPmdjX3RocmVzaCkKKwkJbmV0LT5pcHY2LmlwNl9ydF9nY19leHBpcmUgPSBydF9nY190aW1lb3V0Pj4xOwogb3V0OgotCWV4cGlyZSAtPSBleHBpcmU+PmluaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9nY19lbGFzdGljaXR5OwotCXJldHVybiAoYXRvbWljX3JlYWQoJmlwNl9kc3Rfb3BzLmVudHJpZXMpID4gaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X21heF9zaXplKTsKKwluZXQtPmlwdjYuaXA2X3J0X2djX2V4cGlyZSAtPSBuZXQtPmlwdjYuaXA2X3J0X2djX2V4cGlyZT4+cnRfZWxhc3RpY2l0eTsKKwlyZXR1cm4gKGF0b21pY19yZWFkKCZvcHMtPmVudHJpZXMpID4gcnRfbWF4X3NpemUpOwogfQogCiAvKiBDbGVhbiBob3N0IHBhcnQgb2YgYSBwcmVmaXguIE5vdCBuZWNlc3NhcnkgaW4gcmFkaXggdHJlZSwKQEAgLTEwMjUsMTUgKzEwNDQsMTcgQEAKIAlyZXR1cm4gbXR1OwogfQogCi1pbnQgaXB2Nl9nZXRfaG9wbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQlpbnQgaG9wbGltaXQgPSBpcHY2X2RldmNvbmYuaG9wX2xpbWl0OwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7Ci0KLQlpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKLQlpZiAoaWRldikgewotCQlob3BsaW1pdCA9IGlkZXYtPmNuZi5ob3BfbGltaXQ7Ci0JCWluNl9kZXZfcHV0KGlkZXYpOworCWludCBob3BsaW1pdCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0hPUExJTUlUKTsKKwlpZiAoaG9wbGltaXQgPCAwKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3QtPmRldjsKKwkJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CisJCWlmIChpZGV2KSB7CisJCQlob3BsaW1pdCA9IGlkZXYtPmNuZi5ob3BfbGltaXQ7CisJCQlpbjZfZGV2X3B1dChpZGV2KTsKKwkJfSBlbHNlCisJCQlob3BsaW1pdCA9IGlwdjZfZGV2Y29uZi5ob3BfbGltaXQ7CiAJfQogCXJldHVybiBob3BsaW1pdDsKIH0KQEAgLTEwNDUsNiArMTA2Niw3IEBACiBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIHsKIAlpbnQgZXJyOworCXN0cnVjdCBuZXQgKm5ldCA9IGNmZy0+ZmNfbmxpbmZvLm5sX25ldDsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gTlVMTDsKQEAgLTEwNTksNyArMTA4MSw3IEBACiAjZW5kaWYKIAlpZiAoY2ZnLT5mY19pZmluZGV4KSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBjZmctPmZjX2lmaW5kZXgpOworCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgY2ZnLT5mY19pZmluZGV4KTsKIAkJaWYgKCFkZXYpCiAJCQlnb3RvIG91dDsKIAkJaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CkBAIC0xMDcwLDEzICsxMDkyLDEzIEBACiAJaWYgKGNmZy0+ZmNfbWV0cmljID09IDApCiAJCWNmZy0+ZmNfbWV0cmljID0gSVA2X1JUX1BSSU9fVVNFUjsKIAotCXRhYmxlID0gZmliNl9uZXdfdGFibGUoY2ZnLT5mY190YWJsZSk7CisJdGFibGUgPSBmaWI2X25ld190YWJsZShuZXQsIGNmZy0+ZmNfdGFibGUpOwogCWlmICh0YWJsZSA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9CVUZTOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydCA9IGlwNl9kc3RfYWxsb2MoKTsKKwlydCA9IGlwNl9kc3RfYWxsb2MobmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKIAogCWlmIChydCA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xMTE3LDEyICsxMTM5LDEyIEBACiAJaWYgKChjZmctPmZjX2ZsYWdzICYgUlRGX1JFSkVDVCkgfHwKIAkgICAgKGRldiAmJiAoZGV2LT5mbGFncyZJRkZfTE9PUEJBQ0spICYmICEoYWRkcl90eXBlJklQVjZfQUREUl9MT09QQkFDSykpKSB7CiAJCS8qIGhvbGQgbG9vcGJhY2sgZGV2L2lkZXYgaWYgd2UgaGF2ZW4ndCBkb25lIHNvLiAqLwotCQlpZiAoZGV2ICE9IGluaXRfbmV0Lmxvb3BiYWNrX2RldikgeworCQlpZiAoZGV2ICE9IG5ldC0+bG9vcGJhY2tfZGV2KSB7CiAJCQlpZiAoZGV2KSB7CiAJCQkJZGV2X3B1dChkZXYpOwogCQkJCWluNl9kZXZfcHV0KGlkZXYpOwogCQkJfQotCQkJZGV2ID0gaW5pdF9uZXQubG9vcGJhY2tfZGV2OworCQkJZGV2ID0gbmV0LT5sb29wYmFja19kZXY7CiAJCQlkZXZfaG9sZChkZXYpOwogCQkJaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CiAJCQlpZiAoIWlkZXYpIHsKQEAgLTExNTksNyArMTE4MSw3IEBACiAJCQlpZiAoIShnd2FfdHlwZSZJUFY2X0FERFJfVU5JQ0FTVCkpCiAJCQkJZ290byBvdXQ7CiAKLQkJCWdydCA9IHJ0Nl9sb29rdXAoZ3dfYWRkciwgTlVMTCwgY2ZnLT5mY19pZmluZGV4LCAxKTsKKwkJCWdydCA9IHJ0Nl9sb29rdXAobmV0LCBnd19hZGRyLCBOVUxMLCBjZmctPmZjX2lmaW5kZXgsIDEpOwogCiAJCQllcnIgPSAtRUhPU1RVTlJFQUNIOwogCQkJaWYgKGdydCA9PSBOVUxMKQpAQCAtMTIyNiwxMCArMTI0OCwxMyBAQAogCWlmICghcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0pCiAJCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gaXB2Nl9nZXRfbXR1KGRldik7CiAJaWYgKCFydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSkKLQkJcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSBpcHY2X2Fkdm1zcyhkc3RfbXR1KCZydC0+dS5kc3QpKTsKKwkJcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSBpcHY2X2Fkdm1zcyhuZXQsIGRzdF9tdHUoJnJ0LT51LmRzdCkpOwogCXJ0LT51LmRzdC5kZXYgPSBkZXY7CiAJcnQtPnJ0NmlfaWRldiA9IGlkZXY7CiAJcnQtPnJ0NmlfdGFibGUgPSB0YWJsZTsKKworCWNmZy0+ZmNfbmxpbmZvLm5sX25ldCA9IGRldl9uZXQoZGV2KTsKKwogCXJldHVybiBfX2lwNl9pbnNfcnQocnQsICZjZmctPmZjX25saW5mbyk7CiAKIG91dDoKQEAgLTEyNDYsOCArMTI3MSw5IEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChydC0+cnQ2aV9kZXYpOwogCi0JaWYgKHJ0ID09ICZpcDZfbnVsbF9lbnRyeSkKKwlpZiAocnQgPT0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXRhYmxlID0gcnQtPnJ0NmlfdGFibGU7CkBAIC0xMjY0LDcgKzEyOTAsNyBAQAogaW50IGlwNl9kZWxfcnQoc3RydWN0IHJ0Nl9pbmZvICpydCkKIHsKIAlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0gewotCQkubmxfbmV0ID0gJmluaXRfbmV0LAorCQkubmxfbmV0ID0gZGV2X25ldChydC0+cnQ2aV9kZXYpLAogCX07CiAJcmV0dXJuIF9faXA2X2RlbF9ydChydCwgJmluZm8pOwogfQpAQCAtMTI3Niw3ICsxMzAyLDcgQEAKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCWludCBlcnIgPSAtRVNSQ0g7CiAKLQl0YWJsZSA9IGZpYjZfZ2V0X3RhYmxlKGNmZy0+ZmNfdGFibGUpOworCXRhYmxlID0gZmliNl9nZXRfdGFibGUoY2ZnLT5mY19ubGluZm8ubmxfbmV0LCBjZmctPmZjX3RhYmxlKTsKIAlpZiAodGFibGUgPT0gTlVMTCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTMxNiw3ICsxMzQyLDggQEAKIAlzdHJ1Y3QgaW42X2FkZHIgZ2F0ZXdheTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKl9faXA2X3JvdXRlX3JlZGlyZWN0KHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwKK3N0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKl9faXA2X3JvdXRlX3JlZGlyZWN0KHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICAgICBzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsCiAJCQkJCSAgICAgc3RydWN0IGZsb3dpICpmbCwKIAkJCQkJICAgICBpbnQgZmxhZ3MpCiB7CkBAIC0xMzU5LDggKzEzODYsOCBAQAogCX0KIAogCWlmICghcnQpCi0JCXJ0ID0gJmlwNl9udWxsX2VudHJ5OwotCUJBQ0tUUkFDSygmZmwtPmZsNl9zcmMpOworCQlydCA9IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKKwlCQUNLVFJBQ0sobmV0LCAmZmwtPmZsNl9zcmMpOwogb3V0OgogCWRzdF9ob2xkKCZydC0+dS5kc3QpOwogCkBAIC0xMzc1LDYgKzE0MDIsNyBAQAogCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBmbGFncyA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBpcDZyZF9mbG93aSByZGZsID0gewogCQkuZmwgPSB7CiAJCQkub2lmID0gZGV2LT5pZmluZGV4LApAQCAtMTM5MSw3ICsxNDE5LDggQEAKIAlpZiAocnQ2X25lZWRfc3RyaWN0KGRlc3QpKQogCQlmbGFncyB8PSBSVDZfTE9PS1VQX0ZfSUZBQ0U7CiAKLQlyZXR1cm4gKHN0cnVjdCBydDZfaW5mbyAqKWZpYjZfcnVsZV9sb29rdXAoKHN0cnVjdCBmbG93aSAqKSZyZGZsLCBmbGFncywgX19pcDZfcm91dGVfcmVkaXJlY3QpOworCXJldHVybiAoc3RydWN0IHJ0Nl9pbmZvICopZmliNl9ydWxlX2xvb2t1cChuZXQsIChzdHJ1Y3QgZmxvd2kgKikmcmRmbCwKKwkJCQkJCSAgIGZsYWdzLCBfX2lwNl9yb3V0ZV9yZWRpcmVjdCk7CiB9CiAKIHZvaWQgcnQ2X3JlZGlyZWN0KHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCkBAIC0xNDAwLDEwICsxNDI5LDExIEBACiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydCwgKm5ydCA9IE5VTEw7CiAJc3RydWN0IG5ldGV2ZW50X3JlZGlyZWN0IG5ldGV2ZW50OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQobmVpZ2gtPmRldik7CiAKIAlydCA9IGlwNl9yb3V0ZV9yZWRpcmVjdChkZXN0LCBzcmMsIHNhZGRyLCBuZWlnaC0+ZGV2KTsKIAotCWlmIChydCA9PSAmaXA2X251bGxfZW50cnkpIHsKKwlpZiAocnQgPT0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAicnQ2X3JlZGlyZWN0OiBzb3VyY2UgaXNuJ3QgYSB2YWxpZCBuZXh0aG9wICIKIAkJCSAgICAgICAiZm9yIHJlZGlyZWN0IHRhcmdldFxuIik7CkBAIC0xNDQ4LDcgKzE0NzgsOCBAQAogCW5ydC0+cnQ2aV9uZXh0aG9wID0gbmVpZ2hfY2xvbmUobmVpZ2gpOwogCS8qIFJlc2V0IHBtdHUsIGl0IG1heSBiZSBiZXR0ZXIgKi8KIAlucnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBpcHY2X2dldF9tdHUobmVpZ2gtPmRldik7Ci0JbnJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MoZHN0X210dSgmbnJ0LT51LmRzdCkpOworCW5ydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKGRldl9uZXQobmVpZ2gtPmRldiksCisJCQkJCQkJZHN0X210dSgmbnJ0LT51LmRzdCkpOwogCiAJaWYgKGlwNl9pbnNfcnQobnJ0KSkKIAkJZ290byBvdXQ7CkBAIC0xNDc2LDkgKzE1MDcsMTAgQEAKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwbXR1KQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQsICpucnQ7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCWludCBhbGxmcmFnID0gMDsKIAotCXJ0ID0gcnQ2X2xvb2t1cChkYWRkciwgc2FkZHIsIGRldi0+aWZpbmRleCwgMCk7CisJcnQgPSBydDZfbG9va3VwKG5ldCwgZGFkZHIsIHNhZGRyLCBkZXYtPmlmaW5kZXgsIDApOwogCWlmIChydCA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTE1MTEsNyArMTU0Myw3IEBACiAJCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKIAkJaWYgKGFsbGZyYWcpCiAJCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0ZFQVRVUkVTLTFdIHw9IFJUQVhfRkVBVFVSRV9BTExGUkFHOwotCQlkc3Rfc2V0X2V4cGlyZXMoJnJ0LT51LmRzdCwgaW5pdF9uZXQuaXB2Ni5zeXNjdGwuaXA2X3J0X210dV9leHBpcmVzKTsKKwkJZHN0X3NldF9leHBpcmVzKCZydC0+dS5kc3QsIG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X210dV9leHBpcmVzKTsKIAkJcnQtPnJ0NmlfZmxhZ3MgfD0gUlRGX01PRElGSUVEfFJURl9FWFBJUkVTOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNTM3LDcgKzE1NjksNyBAQAogCQkgKiB3aGljaCBpcyAxMCBtaW5zLiBBZnRlciAxMCBtaW5zIHRoZSBkZWNyZWFzZWQgcG10dSBpcyBleHBpcmVkCiAJCSAqIGFuZCBkZXRlY3RpbmcgUE1UVSBpbmNyZWFzZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaGFwcGVuZWQuCiAJCSAqLwotCQlkc3Rfc2V0X2V4cGlyZXMoJm5ydC0+dS5kc3QsIGluaXRfbmV0LmlwdjYuc3lzY3RsLmlwNl9ydF9tdHVfZXhwaXJlcyk7CisJCWRzdF9zZXRfZXhwaXJlcygmbnJ0LT51LmRzdCwgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbXR1X2V4cGlyZXMpOwogCQlucnQtPnJ0NmlfZmxhZ3MgfD0gUlRGX0RZTkFNSUN8UlRGX0VYUElSRVM7CiAKIAkJaXA2X2luc19ydChucnQpOwpAQCAtMTU1Miw3ICsxNTg0LDggQEAKIAogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqIGlwNl9ydF9jb3B5KHN0cnVjdCBydDZfaW5mbyAqb3J0KQogewotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKCk7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChvcnQtPnJ0NmlfZGV2KTsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gaXA2X2RzdF9hbGxvYyhuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOwogCiAJaWYgKHJ0KSB7CiAJCXJ0LT51LmRzdC5pbnB1dCA9IG9ydC0+dS5kc3QuaW5wdXQ7CkBAIC0xNTgzLDE0ICsxNjE2LDE1IEBACiB9CiAKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKIAkJCQkJICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuOwogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBOVUxMOwogCXN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTsKIAotCXRhYmxlID0gZmliNl9nZXRfdGFibGUoUlQ2X1RBQkxFX0lORk8pOworCXRhYmxlID0gZmliNl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfSU5GTyk7CiAJaWYgKHRhYmxlID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNjE0LDcgKzE2NDgsOCBAQAogCXJldHVybiBydDsKIH0KIAotc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAorc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICAgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCiAJCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCwKIAkJCQkJICAgdW5zaWduZWQgcHJlZikKIHsKQEAgLTE2MjUsNiArMTY2MCw5IEBACiAJCS5mY19kc3RfbGVuCT0gcHJlZml4bGVuLAogCQkuZmNfZmxhZ3MJPSBSVEZfR0FURVdBWSB8IFJURl9BRERSQ09ORiB8IFJURl9ST1VURUlORk8gfAogCQkJCSAgUlRGX1VQIHwgUlRGX1BSRUYocHJlZiksCisJCS5mY19ubGluZm8ucGlkID0gMCwKKwkJLmZjX25saW5mby5ubGggPSBOVUxMLAorCQkuZmNfbmxpbmZvLm5sX25ldCA9IG5ldCwKIAl9OwogCiAJaXB2Nl9hZGRyX2NvcHkoJmNmZy5mY19kc3QsIHByZWZpeCk7CkBAIC0xNjM2LDcgKzE2NzQsNyBAQAogCiAJaXA2X3JvdXRlX2FkZCgmY2ZnKTsKIAotCXJldHVybiBydDZfZ2V0X3JvdXRlX2luZm8ocHJlZml4LCBwcmVmaXhsZW4sIGd3YWRkciwgaWZpbmRleCk7CisJcmV0dXJuIHJ0Nl9nZXRfcm91dGVfaW5mbyhuZXQsIHByZWZpeCwgcHJlZml4bGVuLCBnd2FkZHIsIGlmaW5kZXgpOwogfQogI2VuZGlmCiAKQEAgLTE2NDUsNyArMTY4Myw3IEBACiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CiAKLQl0YWJsZSA9IGZpYjZfZ2V0X3RhYmxlKFJUNl9UQUJMRV9ERkxUKTsKKwl0YWJsZSA9IGZpYjZfZ2V0X3RhYmxlKGRldl9uZXQoZGV2KSwgUlQ2X1RBQkxFX0RGTFQpOwogCWlmICh0YWJsZSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTY2Miw4ICsxNzAwLDYgQEAKIAlyZXR1cm4gcnQ7CiB9CiAKLUVYUE9SVF9TWU1CT0wocnQ2X2dldF9kZmx0X3JvdXRlcik7Ci0KIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9kZmx0X3JvdXRlcihzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgcHJlZikKQEAgLTE2NzQsNiArMTcxMCw5IEBACiAJCS5mY19pZmluZGV4CT0gZGV2LT5pZmluZGV4LAogCQkuZmNfZmxhZ3MJPSBSVEZfR0FURVdBWSB8IFJURl9BRERSQ09ORiB8IFJURl9ERUZBVUxUIHwKIAkJCQkgIFJURl9VUCB8IFJURl9FWFBJUkVTIHwgUlRGX1BSRUYocHJlZiksCisJCS5mY19ubGluZm8ucGlkID0gMCwKKwkJLmZjX25saW5mby5ubGggPSBOVUxMLAorCQkuZmNfbmxpbmZvLm5sX25ldCA9IGRldl9uZXQoZGV2KSwKIAl9OwogCiAJaXB2Nl9hZGRyX2NvcHkoJmNmZy5mY19nYXRld2F5LCBnd2FkZHIpOwpAQCAtMTY4MywxMyArMTcyMiwxMyBAQAogCXJldHVybiBydDZfZ2V0X2RmbHRfcm91dGVyKGd3YWRkciwgZGV2KTsKIH0KIAotdm9pZCBydDZfcHVyZ2VfZGZsdF9yb3V0ZXJzKHZvaWQpCit2b2lkIHJ0Nl9wdXJnZV9kZmx0X3JvdXRlcnMoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAJc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlOwogCiAJLyogTk9URTogS2VlcCBjb25zaXN0ZW50IHdpdGggcnQ2X2dldF9kZmx0X3JvdXRlciAqLwotCXRhYmxlID0gZmliNl9nZXRfdGFibGUoUlQ2X1RBQkxFX0RGTFQpOworCXRhYmxlID0gZmliNl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7CiAJaWYgKHRhYmxlID09IE5VTEwpCiAJCXJldHVybjsKIApAQCAtMTcwNiw3ICsxNzQ1LDggQEAKIAlyZWFkX3VubG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgcnRtc2dfdG9fZmliNl9jb25maWcoc3RydWN0IGluNl9ydG1zZyAqcnRtc2csCitzdGF0aWMgdm9pZCBydG1zZ190b19maWI2X2NvbmZpZyhzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJIHN0cnVjdCBpbjZfcnRtc2cgKnJ0bXNnLAogCQkJCSBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKIHsKIAltZW1zZXQoY2ZnLCAwLCBzaXplb2YoKmNmZykpOwpAQCAtMTcxOSwxMiArMTc1OSwxNCBAQAogCWNmZy0+ZmNfc3JjX2xlbiA9IHJ0bXNnLT5ydG1zZ19zcmNfbGVuOwogCWNmZy0+ZmNfZmxhZ3MgPSBydG1zZy0+cnRtc2dfZmxhZ3M7CiAKKwljZmctPmZjX25saW5mby5ubF9uZXQgPSBuZXQ7CisKIAlpcHY2X2FkZHJfY29weSgmY2ZnLT5mY19kc3QsICZydG1zZy0+cnRtc2dfZHN0KTsKIAlpcHY2X2FkZHJfY29weSgmY2ZnLT5mY19zcmMsICZydG1zZy0+cnRtc2dfc3JjKTsKIAlpcHY2X2FkZHJfY29weSgmY2ZnLT5mY19nYXRld2F5LCAmcnRtc2ctPnJ0bXNnX2dhdGV3YXkpOwogfQogCi1pbnQgaXB2Nl9yb3V0ZV9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQoraW50IGlwdjZfcm91dGVfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBmaWI2X2NvbmZpZyBjZmc7CiAJc3RydWN0IGluNl9ydG1zZyBydG1zZzsKQEAgLTE3NDAsNyArMTc4Miw3IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlydG1zZ190b19maWI2X2NvbmZpZygmcnRtc2csICZjZmcpOworCQlydG1zZ190b19maWI2X2NvbmZpZyhuZXQsICZydG1zZywgJmNmZyk7CiAKIAkJcnRubF9sb2NrKCk7CiAJCXN3aXRjaCAoY21kKSB7CkBAIC0xODE5LDIxICsxODYxLDIyIEBACiAJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkgICAgaW50IGFueWNhc3QpCiB7Ci0Jc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MoKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MobmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKIAogCWlmIChydCA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWRldl9ob2xkKGluaXRfbmV0Lmxvb3BiYWNrX2Rldik7CisJZGV2X2hvbGQobmV0LT5sb29wYmFja19kZXYpOwogCWluNl9kZXZfaG9sZChpZGV2KTsKIAogCXJ0LT51LmRzdC5mbGFncyA9IERTVF9IT1NUOwogCXJ0LT51LmRzdC5pbnB1dCA9IGlwNl9pbnB1dDsKIAlydC0+dS5kc3Qub3V0cHV0ID0gaXA2X291dHB1dDsKLQlydC0+cnQ2aV9kZXYgPSBpbml0X25ldC5sb29wYmFja19kZXY7CisJcnQtPnJ0NmlfZGV2ID0gbmV0LT5sb29wYmFja19kZXY7CiAJcnQtPnJ0NmlfaWRldiA9IGlkZXY7CiAJcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBpcHY2X2dldF9tdHUocnQtPnJ0NmlfZGV2KTsKLQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKGRzdF9tdHUoJnJ0LT51LmRzdCkpOworCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MobmV0LCBkc3RfbXR1KCZydC0+dS5kc3QpKTsKIAlydC0+dS5kc3QubWV0cmljc1tSVEFYX0hPUExJTUlULTFdID0gLTE7CiAJcnQtPnUuZHN0Lm9ic29sZXRlID0gLTE7CiAKQEAgLTE4NTAsMjYgKzE4OTMsMzkgQEAKIAogCWlwdjZfYWRkcl9jb3B5KCZydC0+cnQ2aV9kc3QuYWRkciwgYWRkcik7CiAJcnQtPnJ0NmlfZHN0LnBsZW4gPSAxMjg7Ci0JcnQtPnJ0NmlfdGFibGUgPSBmaWI2X2dldF90YWJsZShSVDZfVEFCTEVfTE9DQUwpOworCXJ0LT5ydDZpX3RhYmxlID0gZmliNl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfTE9DQUwpOwogCiAJYXRvbWljX3NldCgmcnQtPnUuZHN0Ll9fcmVmY250LCAxKTsKIAogCXJldHVybiBydDsKIH0KIAorc3RydWN0IGFyZ19kZXZfbmV0IHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXQgKm5ldDsKK307CisKIHN0YXRpYyBpbnQgZmliNl9pZmRvd24oc3RydWN0IHJ0Nl9pbmZvICpydCwgdm9pZCAqYXJnKQogewotCWlmICgoKHZvaWQqKXJ0LT5ydDZpX2RldiA9PSBhcmcgfHwgYXJnID09IE5VTEwpICYmCi0JICAgIHJ0ICE9ICZpcDZfbnVsbF9lbnRyeSkgeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoKHN0cnVjdCBhcmdfZGV2X25ldCAqKWFyZyktPmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSAoKHN0cnVjdCBhcmdfZGV2X25ldCAqKWFyZyktPm5ldDsKKworCWlmICgoKHZvaWQgKilydC0+cnQ2aV9kZXYgPT0gZGV2IHx8IGRldiA9PSBOVUxMKSAmJgorCSAgICBydCAhPSBuZXQtPmlwdjYuaXA2X251bGxfZW50cnkpIHsKIAkJUlQ2X1RSQUNFKCJkZWxldGVkIGJ5IGlmZG93biAlcFxuIiwgcnQpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiAwOwogfQogCi12b2lkIHJ0Nl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgcnQ2X2lmZG93bihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZmliNl9jbGVhbl9hbGwoZmliNl9pZmRvd24sIDAsIGRldik7CisJc3RydWN0IGFyZ19kZXZfbmV0IGFkbiA9IHsKKwkJLmRldiA9IGRldiwKKwkJLm5ldCA9IG5ldCwKKwl9OworCisJZmliNl9jbGVhbl9hbGwobmV0LCBmaWI2X2lmZG93biwgMCwgJmFkbik7CiB9CiAKIHN0cnVjdCBydDZfbXR1X2NoYW5nZV9hcmcKQEAgLTE4ODIsNiArMTkzOCw3IEBACiB7CiAJc3RydWN0IHJ0Nl9tdHVfY2hhbmdlX2FyZyAqYXJnID0gKHN0cnVjdCBydDZfbXR1X2NoYW5nZV9hcmcgKikgcF9hcmc7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGFyZy0+ZGV2KTsKIAogCS8qIEluIElQdjYgcG10dSBkaXNjb3ZlcnkgaXMgbm90IG9wdGlvbmFsLAogCSAgIHNvIHRoYXQgUlRBWF9NVFUgbG9jayBjYW5ub3QgZGlzYWJsZSBpdC4KQEAgLTE5MTMsNyArMTk3MCw3IEBACiAJICAgICAoZHN0X210dSgmcnQtPnUuZHN0KSA8IGFyZy0+bXR1ICYmCiAJICAgICAgZHN0X210dSgmcnQtPnUuZHN0KSA9PSBpZGV2LT5jbmYubXR1NikpKSB7CiAJCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gYXJnLT5tdHU7Ci0JCXJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MoYXJnLT5tdHUpOworCQlydC0+dS5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKG5ldCwgYXJnLT5tdHUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE5MjUsNyArMTk4Miw3IEBACiAJCS5tdHUgPSBtdHUsCiAJfTsKIAotCWZpYjZfY2xlYW5fYWxsKHJ0Nl9tdHVfY2hhbmdlX3JvdXRlLCAwLCAmYXJnKTsKKwlmaWI2X2NsZWFuX2FsbChkZXZfbmV0KGRldiksIHJ0Nl9tdHVfY2hhbmdlX3JvdXRlLCAwLCAmYXJnKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bV9pcHY2X3BvbGljeVtSVEFfTUFYKzFdID0gewpAQCAtMTk2Miw3ICsyMDE5LDcgQEAKIAogCWNmZy0+ZmNfbmxpbmZvLnBpZCA9IE5FVExJTktfQ0Ioc2tiKS5waWQ7CiAJY2ZnLT5mY19ubGluZm8ubmxoID0gbmxoOwotCWNmZy0+ZmNfbmxpbmZvLm5sX25ldCA9IHNrYi0+c2stPnNrX25ldDsKKwljZmctPmZjX25saW5mby5ubF9uZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAogCWlmICh0YltSVEFfR0FURVdBWV0pIHsKIAkJbmxhX21lbWNweSgmY2ZnLT5mY19nYXRld2F5LCB0YltSVEFfR0FURVdBWV0sIDE2KTsKQEAgLTIwMDgsMTMgKzIwNjUsOSBAQAogCiBzdGF0aWMgaW50IGluZXQ2X3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIqIG5saCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKIAlzdHJ1Y3QgZmliNl9jb25maWcgY2ZnOwogCWludCBlcnI7CiAKLQlpZiAobmV0ICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAllcnIgPSBydG1fdG9fZmliNl9jb25maWcoc2tiLCBubGgsICZjZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMjAyNCwxMyArMjA3Nyw5IEBACiAKIHN0YXRpYyBpbnQgaW5ldDZfcnRtX25ld3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OwogCXN0cnVjdCBmaWI2X2NvbmZpZyBjZmc7CiAJaW50IGVycjsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IHJ0bV90b19maWI2X2NvbmZpZyhza2IsIG5saCwgJmNmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0yMDU2LDcgKzIxMDUsNyBAQAogc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydDZfaW5mbyAqcnQsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAogCQkJIGludCBpaWYsIGludCB0eXBlLCB1MzIgcGlkLCB1MzIgc2VxLAotCQkJIGludCBwcmVmaXgsIHVuc2lnbmVkIGludCBmbGFncykKKwkJCSBpbnQgcHJlZml4LCBpbnQgbm93YWl0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHJ0bXNnICpydG07CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CkBAIC0yMTE2LDExICsyMTY1LDI3IEBACiAJfSBlbHNlIGlmIChydG0tPnJ0bV9zcmNfbGVuKQogCQlOTEFfUFVUKHNrYiwgUlRBX1NSQywgMTYsICZydC0+cnQ2aV9zcmMuYWRkcik7CiAjZW5kaWYKLQlpZiAoaWlmKQotCQlOTEFfUFVUX1UzMihza2IsIFJUQV9JSUYsIGlpZik7Ci0JZWxzZSBpZiAoZHN0KSB7CisJaWYgKGlpZikgeworI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorCQlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmcnQtPnJ0NmlfZHN0LmFkZHIpKSB7CisJCQlpbnQgZXJyID0gaXA2bXJfZ2V0X3JvdXRlKHNrYiwgcnRtLCBub3dhaXQpOworCQkJaWYgKGVyciA8PSAwKSB7CisJCQkJaWYgKCFub3dhaXQpIHsKKwkJCQkJaWYgKGVyciA9PSAwKQorCQkJCQkJcmV0dXJuIDA7CisJCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChlcnIgPT0gLUVNU0dTSVpFKQorCQkJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKyNlbmRpZgorCQkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfSUlGLCBpaWYpOworCX0gZWxzZSBpZiAoZHN0KSB7CiAJCXN0cnVjdCBpbjZfYWRkciBzYWRkcl9idWY7Ci0JCWlmIChpcHY2X2dldF9zYWRkcigmcnQtPnUuZHN0LCBkc3QsICZzYWRkcl9idWYpID09IDApCisJCWlmIChpcHY2X2Rldl9nZXRfc2FkZHIoaXA2X2RzdF9pZGV2KCZydC0+dS5kc3QpLT5kZXYsCisJCQkJICAgICAgIGRzdCwgMCwgJnNhZGRyX2J1ZikgPT0gMCkKIAkJCU5MQV9QVVQoc2tiLCBSVEFfUFJFRlNSQywgMTYsICZzYWRkcl9idWYpOwogCX0KIApAQCAtMjE2MCwxMiArMjIyNSwxMiBAQAogCiAJcmV0dXJuIHJ0Nl9maWxsX25vZGUoYXJnLT5za2IsIHJ0LCBOVUxMLCBOVUxMLCAwLCBSVE1fTkVXUk9VVEUsCiAJCSAgICAgTkVUTElOS19DQihhcmctPmNiLT5za2IpLnBpZCwgYXJnLT5jYi0+bmxoLT5ubG1zZ19zZXEsCi0JCSAgICAgcHJlZml4LCBOTE1fRl9NVUxUSSk7CisJCSAgICAgcHJlZml4LCAwLCBOTE1fRl9NVUxUSSk7CiB9CiAKIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gaW5fc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGluX3NrYi0+c2spOwogCXN0cnVjdCBubGF0dHIgKnRiW1JUQV9NQVgrMV07CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMjE3Myw5ICsyMjM4LDYgQEAKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJaW50IGVyciwgaWlmID0gMDsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCpydG0pLCB0YiwgUlRBX01BWCwgcnRtX2lwdjZfcG9saWN5KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvdXQ7CkBAIC0yMjA1LDcgKzIyNjcsNyBAQAogCiAJaWYgKGlpZikgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpaWYpOworCQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBpaWYpOwogCQlpZiAoIWRldikgewogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyb3V0OwpAQCAtMjIyNCwxOCArMjI4NiwxOCBAQAogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAKLQlydCA9IChzdHJ1Y3QgcnQ2X2luZm8qKSBpcDZfcm91dGVfb3V0cHV0KE5VTEwsICZmbCk7CisJcnQgPSAoc3RydWN0IHJ0Nl9pbmZvKikgaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsICZmbCk7CiAJc2tiLT5kc3QgPSAmcnQtPnUuZHN0OwogCiAJZXJyID0gcnQ2X2ZpbGxfbm9kZShza2IsIHJ0LCAmZmwuZmw2X2RzdCwgJmZsLmZsNl9zcmMsIGlpZiwKIAkJCSAgICBSVE1fTkVXUk9VVEUsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQsCi0JCQkgICAgbmxoLT5ubG1zZ19zZXEsIDAsIDApOworCQkJICAgIG5saC0+bmxtc2dfc2VxLCAwLCAwLCAwKTsKIAlpZiAoZXJyIDwgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JZXJyID0gcnRubF91bmljYXN0KHNrYiwgJmluaXRfbmV0LCBORVRMSU5LX0NCKGluX3NrYikucGlkKTsKKwllcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQpOwogZXJyb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC0yMjQzLDYgKzIzMDUsNyBAQAogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tPm5sX25ldDsKIAl1MzIgc2VxOwogCWludCBlcnI7CiAKQEAgLTIyNTQsMTggKzIzMTcsMzggQEAKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKHNrYiwgcnQsIE5VTEwsIE5VTEwsIDAsCi0JCQkJZXZlbnQsIGluZm8tPnBpZCwgc2VxLCAwLCAwKTsKKwkJCQlldmVudCwgaW5mby0+cGlkLCBzZXEsIDAsIDAsIDApOwogCWlmIChlcnIgPCAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIGluZm8tPnBpZCwKLQkJCQlSVE5MR1JQX0lQVjZfUk9VVEUsIGluZm8tPm5saCwgZ2ZwX2FueSgpKTsKKwllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgaW5mby0+cGlkLCBSVE5MR1JQX0lQVjZfUk9VVEUsCisJCQkgIGluZm8tPm5saCwgZ2ZwX2FueSgpKTsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKLQkJcnRubF9zZXRfc2tfZXJyKCZpbml0X25ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpOworCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7Cit9CisKK3N0YXRpYyBpbnQgaXA2X3JvdXRlX2Rldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCisJaWYgKGV2ZW50ID09IE5FVERFVl9SRUdJU1RFUiAmJiAoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykpIHsKKwkJbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT51LmRzdC5kZXYgPSBkZXY7CisJCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKKyNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKKwkJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+dS5kc3QuZGV2ID0gZGV2OworCQluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChkZXYpOworCQluZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT51LmRzdC5kZXYgPSBkZXY7CisJCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPnJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gTk9USUZZX09LOwogfQogCiAvKgpAQCAtMjMxNCwxMyArMjM5NywzMyBAQAogCiBzdGF0aWMgaW50IGlwdjZfcm91dGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JZmliNl9jbGVhbl9hbGwocnQ2X2luZm9fcm91dGUsIDAsIG0pOworCXN0cnVjdCBuZXQgKm5ldCA9IChzdHJ1Y3QgbmV0ICopbS0+cHJpdmF0ZTsKKwlmaWI2X2NsZWFuX2FsbChuZXQsIHJ0Nl9pbmZvX3JvdXRlLCAwLCBtKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpcHY2X3JvdXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlwdjZfcm91dGVfc2hvdywgTlVMTCk7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBnZXRfcHJvY19uZXQoaW5vZGUpOworCWlmICghbmV0KQorCQlyZXR1cm4gLUVOWElPOworCisJZXJyID0gc2luZ2xlX29wZW4oZmlsZSwgaXB2Nl9yb3V0ZV9zaG93LCBuZXQpOworCWlmIChlcnIgPCAwKSB7CisJCXB1dF9uZXQobmV0KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHY2X3JvdXRlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxLT5wcml2YXRlOworCXB1dF9uZXQobmV0KTsKKwlyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcHY2X3JvdXRlX3Byb2NfZm9wcyA9IHsKQEAgLTIzMjgsMjQgKzI0MzEsNDYgQEAKIAkub3BlbgkJPSBpcHY2X3JvdXRlX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkucmVsZWFzZQk9IGlwdjZfcm91dGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgcnQ2X3N0YXRzX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IChzdHJ1Y3QgbmV0ICopc2VxLT5wcml2YXRlOwogCXNlcV9wcmludGYoc2VxLCAiJTA0eCAlMDR4ICUwNHggJTA0eCAlMDR4ICUwNHggJTA0eFxuIiwKLQkJICAgICAgcnQ2X3N0YXRzLmZpYl9ub2RlcywgcnQ2X3N0YXRzLmZpYl9yb3V0ZV9ub2RlcywKLQkJICAgICAgcnQ2X3N0YXRzLmZpYl9ydF9hbGxvYywgcnQ2X3N0YXRzLmZpYl9ydF9lbnRyaWVzLAotCQkgICAgICBydDZfc3RhdHMuZmliX3J0X2NhY2hlLAotCQkgICAgICBhdG9taWNfcmVhZCgmaXA2X2RzdF9vcHMuZW50cmllcyksCi0JCSAgICAgIHJ0Nl9zdGF0cy5maWJfZGlzY2FyZGVkX3JvdXRlcyk7CisJCSAgIG5ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9ub2RlcywKKwkJICAgbmV0LT5pcHY2LnJ0Nl9zdGF0cy0+ZmliX3JvdXRlX25vZGVzLAorCQkgICBuZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfcnRfYWxsb2MsCisJCSAgIG5ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9ydF9lbnRyaWVzLAorCQkgICBuZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfcnRfY2FjaGUsCisJCSAgIGF0b21pY19yZWFkKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmVudHJpZXMpLAorCQkgICBuZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfZGlzY2FyZGVkX3JvdXRlcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBydDZfc3RhdHNfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0Nl9zdGF0c19zZXFfc2hvdywgTlVMTCk7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBnZXRfcHJvY19uZXQoaW5vZGUpOworCWlmICghbmV0KQorCQlyZXR1cm4gLUVOWElPOworCisJZXJyID0gc2luZ2xlX29wZW4oZmlsZSwgcnQ2X3N0YXRzX3NlcV9zaG93LCBuZXQpOworCWlmIChlcnIgPCAwKSB7CisJCXB1dF9uZXQobmV0KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDZfc3RhdHNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG5ldCAqbmV0ID0gKHN0cnVjdCBuZXQgKilzZXEtPnByaXZhdGU7CisJcHV0X25ldChuZXQpOworCXJldHVybiBzaW5nbGVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0Nl9zdGF0c19zZXFfZm9wcyA9IHsKQEAgLTIzNTMsNDIgKzI0NzgsOCBAQAogCS5vcGVuCSA9IHJ0Nl9zdGF0c19zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKIAkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS5yZWxlYXNlID0gcnQ2X3N0YXRzX3NlcV9yZWxlYXNlLAogfTsKLQotc3RhdGljIGludCBpcHY2X3JvdXRlX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcHY2X3JvdXRlIiwKLQkJCQkgIDAsICZpcHY2X3JvdXRlX3Byb2NfZm9wcykpCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJydDZfc3RhdHMiLAotCQkJCSAgU19JUlVHTywgJnJ0Nl9zdGF0c19zZXFfZm9wcykpCi0JCWdvdG8gb3V0X2lwdjZfcm91dGU7Ci0KLQlyZXQgPSAwOwotb3V0OgotCXJldHVybiByZXQ7Ci1vdXRfaXB2Nl9yb3V0ZToKLQlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXB2Nl9yb3V0ZSIpOwotCWdvdG8gb3V0OwotfQotCi1zdGF0aWMgdm9pZCBpcHY2X3JvdXRlX3Byb2NfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0JcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwdjZfcm91dGUiKTsKLQlwcm9jX25ldF9yZW1vdmUobmV0LCAicnQ2X3N0YXRzIik7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXB2Nl9yb3V0ZV9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIGlwdjZfcm91dGVfcHJvY19maW5pKHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlyZXR1cm4gOwotfQogI2VuZGlmCS8qIENPTkZJR19QUk9DX0ZTICovCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0yMzk3LDEwICsyNDg4LDExIEBACiBpbnQgaXB2Nl9zeXNjdGxfcnRjYWNoZV9mbHVzaChjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsCiAJCQkgICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgZGVsYXkgPSBpbml0X25ldC5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnM7CisJaW50IGRlbGF5ID0gbmV0LT5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheTsKIAlpZiAod3JpdGUpIHsKIAkJcHJvY19kb2ludHZlYyhjdGwsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOwotCQlmaWI2X3J1bl9nYyhkZWxheSA8PSAwID8gfjBVTCA6ICh1bnNpZ25lZCBsb25nKWRlbGF5KTsKKwkJZmliNl9ydW5fZ2MoZGVsYXkgPD0gMCA/IH4wVUwgOiAodW5zaWduZWQgbG9uZylkZWxheSwgbmV0KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQxNyw3ICsyNTA5LDcgQEAKIAl7CiAJCS5jdGxfbmFtZQk9CU5FVF9JUFY2X1JPVVRFX0dDX1RIUkVTSCwKIAkJLnByb2NuYW1lCT0JImdjX3RocmVzaCIsCi0JCS5kYXRhCQk9CSZpcDZfZHN0X29wcy5nY190aHJlc2gsCisJCS5kYXRhCQk9CSZpcDZfZHN0X29wc190ZW1wbGF0ZS5nY190aHJlc2gsCiAJCS5tYXhsZW4JCT0Jc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9CTA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPQkmcHJvY19kb2ludHZlYywKQEAgLTI1MDMsMzMgKzI1OTUsMTQzIEBACiAJdGFibGUgPSBrbWVtZHVwKGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGUsCiAJCQlzaXplb2YoaXB2Nl9yb3V0ZV90YWJsZV90ZW1wbGF0ZSksCiAJCQlHRlBfS0VSTkVMKTsKKworCWlmICh0YWJsZSkgeworCQl0YWJsZVswXS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuZmx1c2hfZGVsYXk7CisJCXRhYmxlWzFdLmRhdGEgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLT5nY190aHJlc2g7CisJCXRhYmxlWzJdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemU7CisJCXRhYmxlWzNdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfbWluX2ludGVydmFsOworCQl0YWJsZVs0XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX3RpbWVvdXQ7CisJCXRhYmxlWzVdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWw7CisJCXRhYmxlWzZdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfZWxhc3RpY2l0eTsKKwkJdGFibGVbN10uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tdHVfZXhwaXJlczsKKwkJdGFibGVbOF0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzOworCX0KKwogCXJldHVybiB0YWJsZTsKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IGlwNl9yb3V0ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSAtRU5PTUVNOworCW5ldC0+aXB2Ni5pcDZfZHN0X29wcyA9IGttZW1kdXAoJmlwNl9kc3Rfb3BzX3RlbXBsYXRlLAorCQkJCQlzaXplb2YoKm5ldC0+aXB2Ni5pcDZfZHN0X29wcyksCisJCQkJCUdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKQorCQlnb3RvIG91dDsKKwluZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmRzdF9uZXQgPSBob2xkX25ldChuZXQpOworCisJbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5ID0ga21lbWR1cCgmaXA2X251bGxfZW50cnlfdGVtcGxhdGUsCisJCQkJCSAgIHNpemVvZigqbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXQtPmlwdjYuaXA2X251bGxfZW50cnkpCisJCWdvdG8gb3V0X2lwNl9kc3Rfb3BzOworCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3QucGF0aCA9CisJCShzdHJ1Y3QgZHN0X2VudHJ5ICopbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OworCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3Qub3BzID0gbmV0LT5pcHY2LmlwNl9kc3Rfb3BzOworCisjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSA9IGttZW1kdXAoJmlwNl9wcm9oaWJpdF9lbnRyeV90ZW1wbGF0ZSwKKwkJCQkJICAgICAgIHNpemVvZigqbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSksCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnkpIHsKKwkJa2ZyZWUobmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KTsKKwkJZ290byBvdXQ7CisJfQorCW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPnUuZHN0LnBhdGggPQorCQkoc3RydWN0IGRzdF9lbnRyeSAqKW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnk7CisJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+dS5kc3Qub3BzID0gbmV0LT5pcHY2LmlwNl9kc3Rfb3BzOworCisJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSA9IGttZW1kdXAoJmlwNl9ibGtfaG9sZV9lbnRyeV90ZW1wbGF0ZSwKKwkJCQkJICAgICAgIHNpemVvZigqbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSksCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkpIHsKKwkJa2ZyZWUobmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KTsKKwkJa2ZyZWUobmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSk7CisJCWdvdG8gb3V0OworCX0KKwluZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT51LmRzdC5wYXRoID0KKwkJKHN0cnVjdCBkc3RfZW50cnkgKiluZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5OworCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPnUuZHN0Lm9wcyA9IG5ldC0+aXB2Ni5pcDZfZHN0X29wczsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcHY2X3JvdXRlIiwgMCwgJmlwdjZfcm91dGVfcHJvY19mb3BzKTsKKwlwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJydDZfc3RhdHMiLCBTX0lSVUdPLCAmcnQ2X3N0YXRzX3NlcV9mb3BzKTsKKyNlbmRpZgorCW5ldC0+aXB2Ni5pcDZfcnRfZ2NfZXhwaXJlID0gMzAqSFo7CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7CisKK291dF9pcDZfZHN0X29wczoKKwlyZWxlYXNlX25ldChuZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmRzdF9uZXQpOworCWtmcmVlKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwNl9yb3V0ZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXB2Nl9yb3V0ZSIpOworCXByb2NfbmV0X3JlbW92ZShuZXQsICJydDZfc3RhdHMiKTsKKyNlbmRpZgorCWtmcmVlKG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSk7CisjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisJa2ZyZWUobmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSk7CisJa2ZyZWUobmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSk7CisjZW5kaWYKKwlyZWxlYXNlX25ldChuZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmRzdF9uZXQpOworCWtmcmVlKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXA2X3JvdXRlX25ldF9vcHMgPSB7CisJLmluaXQgPSBpcDZfcm91dGVfbmV0X2luaXQsCisJLmV4aXQgPSBpcDZfcm91dGVfbmV0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGlwNl9yb3V0ZV9kZXZfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpcDZfcm91dGVfZGV2X25vdGlmeSwKKwkucHJpb3JpdHkgPSAwLAorfTsKKwogaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlpcDZfZHN0X29wcy5rbWVtX2NhY2hlcCA9CisJcmV0ID0gLUVOT01FTTsKKwlpcDZfZHN0X29wc190ZW1wbGF0ZS5rbWVtX2NhY2hlcCA9CiAJCWttZW1fY2FjaGVfY3JlYXRlKCJpcDZfZHN0X2NhY2hlIiwgc2l6ZW9mKHN0cnVjdCBydDZfaW5mbyksIDAsCiAJCQkJICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOwotCWlmICghaXA2X2RzdF9vcHMua21lbV9jYWNoZXApCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghaXA2X2RzdF9vcHNfdGVtcGxhdGUua21lbV9jYWNoZXApCisJCWdvdG8gb3V0OzsKIAotCWlwNl9kc3RfYmxhY2tob2xlX29wcy5rbWVtX2NhY2hlcCA9IGlwNl9kc3Rfb3BzLmttZW1fY2FjaGVwOwotCi0JcmV0ID0gZmliNl9pbml0KCk7CisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2X3JvdXRlX25ldF9vcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ttZW1fY2FjaGU7CiAKLQlyZXQgPSBpcHY2X3JvdXRlX3Byb2NfaW5pdCgmaW5pdF9uZXQpOworCS8qIFJlZ2lzdGVyaW5nIG9mIHRoZSBsb29wYmFjayBpcyBkb25lIGJlZm9yZSB0aGlzIHBvcnRpb24gb2YgY29kZSwKKwkgKiB0aGUgbG9vcGJhY2sgcmVmZXJlbmNlIGluIHJ0Nl9pbmZvIHdpbGwgbm90IGJlIHRha2VuLCBkbyBpdAorCSAqIG1hbnVhbGx5IGZvciBpbml0X25ldCAqLworCWluaXRfbmV0LmlwdjYuaXA2X251bGxfZW50cnktPnUuZHN0LmRldiA9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKKwlpbml0X25ldC5pcHY2LmlwNl9udWxsX2VudHJ5LT5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChpbml0X25ldC5sb29wYmFja19kZXYpOworICAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisJaW5pdF9uZXQuaXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPnUuZHN0LmRldiA9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKKwlpbml0X25ldC5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoaW5pdF9uZXQubG9vcGJhY2tfZGV2KTsKKwlpbml0X25ldC5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+dS5kc3QuZGV2ID0gaW5pdF9uZXQubG9vcGJhY2tfZGV2OworCWluaXRfbmV0LmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChpbml0X25ldC5sb29wYmFja19kZXYpOworICAjZW5kaWYKKwlyZXQgPSBmaWI2X2luaXQoKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9maWI2X2luaXQ7CisJCWdvdG8gb3V0X3JlZ2lzdGVyX3N1YnN5czsKIAogCXJldCA9IHhmcm02X2luaXQoKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9wcm9jX2luaXQ7CisJCWdvdG8gb3V0X2ZpYjZfaW5pdDsKIAogCXJldCA9IGZpYjZfcnVsZXNfaW5pdCgpOwogCWlmIChyZXQpCkBAIC0yNTQxLDcgKzI3NDMsMTAgQEAKIAkgICAgX19ydG5sX3JlZ2lzdGVyKFBGX0lORVQ2LCBSVE1fR0VUUk9VVEUsIGluZXQ2X3J0bV9nZXRyb3V0ZSwgTlVMTCkpCiAJCWdvdG8gZmliNl9ydWxlc19pbml0OwogCi0JcmV0ID0gMDsKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwNl9yb3V0ZV9kZXZfbm90aWZpZXIpOworCWlmIChyZXQpCisJCWdvdG8gZmliNl9ydWxlc19pbml0OworCiBvdXQ6CiAJcmV0dXJuIHJldDsKIApAQCAtMjU0OSwyMiArMjc1NCwyMSBAQAogCWZpYjZfcnVsZXNfY2xlYW51cCgpOwogeGZybTZfaW5pdDoKIAl4ZnJtNl9maW5pKCk7Ci1vdXRfcHJvY19pbml0OgotCWlwdjZfcm91dGVfcHJvY19maW5pKCZpbml0X25ldCk7CiBvdXRfZmliNl9pbml0OgotCXJ0Nl9pZmRvd24oTlVMTCk7CiAJZmliNl9nY19jbGVhbnVwKCk7CitvdXRfcmVnaXN0ZXJfc3Vic3lzOgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2X3JvdXRlX25ldF9vcHMpOwogb3V0X2ttZW1fY2FjaGU6Ci0Ja21lbV9jYWNoZV9kZXN0cm95KGlwNl9kc3Rfb3BzLmttZW1fY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koaXA2X2RzdF9vcHNfdGVtcGxhdGUua21lbV9jYWNoZXApOwogCWdvdG8gb3V0OwogfQogCiB2b2lkIGlwNl9yb3V0ZV9jbGVhbnVwKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwNl9yb3V0ZV9kZXZfbm90aWZpZXIpOwogCWZpYjZfcnVsZXNfY2xlYW51cCgpOwotCWlwdjZfcm91dGVfcHJvY19maW5pKCZpbml0X25ldCk7CiAJeGZybTZfZmluaSgpOwotCXJ0Nl9pZmRvd24oTlVMTCk7CiAJZmliNl9nY19jbGVhbnVwKCk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KGlwNl9kc3Rfb3BzLmttZW1fY2FjaGVwKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNl9yb3V0ZV9uZXRfb3BzKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koaXA2X2RzdF9vcHNfdGVtcGxhdGUua21lbV9jYWNoZXApOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCBlNzcyMzlkLi40YjJmMTAzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMTYsNyArMTYsNyBAQAogICoJQ2hhbmdlczoKICAqIFJvZ2VyIFZlbm5pbmcgPHIudmVubmluZ0B0ZWxzdHJhLmNvbT46CTZ0bzQgc3VwcG9ydAogICogTmF0ZSBUaG9tcHNvbiA8bmF0ZUB0aGVib2cubmV0PjoJCTZ0bzQgc3VwcG9ydAotICogRnJlZCBMLiBUZW1wbGluIDxmbHRlbXBsaW5AYWNtLm9yZz46CQlpc2F0YXAgc3VwcG9ydAorICogRnJlZCBUZW1wbGluIDxmcmVkLmwudGVtcGxpbkBib2VpbmcuY29tPjoJaXNhdGFwIHN1cHBvcnQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC01Miw2ICs1Miw4IEBACiAjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxuZXQvZHNmaWVsZC5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KIAogLyoKICAgIFRoaXMgdmVyc2lvbiBvZiBuZXQvaXB2Ni9zaXQuYyBpcyBjbG9uZWQgb2YgbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTY2LDQxICs2OCw0NyBAQAogc3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcGlwNl9mYl90dW5uZWxfZGV2Oworc3RhdGljIGludCBzaXRfbmV0X2lkOworc3RydWN0IHNpdF9uZXQgeworCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbHNfcl9sW0hBU0hfU0laRV07CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc19yW0hBU0hfU0laRV07CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc19sW0hBU0hfU0laRV07CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc193Y1sxXTsKKwlzdHJ1Y3QgaXBfdHVubmVsICoqdHVubmVsc1s0XTsKIAotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbHNfcl9sW0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc19yW0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc19sW0hBU0hfU0laRV07Ci1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc193Y1sxXTsKLXN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICoqdHVubmVsc1s0XSA9IHsgdHVubmVsc193YywgdHVubmVsc19sLCB0dW5uZWxzX3IsIHR1bm5lbHNfcl9sIH07CisJc3RydWN0IG5ldF9kZXZpY2UgKmZiX3R1bm5lbF9kZXY7Cit9OwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhpcGlwNl9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGlwNl90dW5uZWxfbG9va3VwKF9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCkKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBpcDZfdHVubmVsX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCisJCV9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCkKIHsKIAl1bnNpZ25lZCBoMCA9IEhBU0gocmVtb3RlKTsKIAl1bnNpZ25lZCBoMSA9IEhBU0gobG9jYWwpOwogCXN0cnVjdCBpcF90dW5uZWwgKnQ7CisJc3RydWN0IHNpdF9uZXQgKnNpdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHNpdF9uZXRfaWQpOwogCi0JZm9yICh0ID0gdHVubmVsc19yX2xbaDBeaDFdOyB0OyB0ID0gdC0+bmV4dCkgeworCWZvciAodCA9IHNpdG4tPnR1bm5lbHNfcl9sW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKIAkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJgogCQkgICAgcmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkciAmJiAodC0+ZGV2LT5mbGFncyZJRkZfVVApKQogCQkJcmV0dXJuIHQ7CiAJfQotCWZvciAodCA9IHR1bm5lbHNfcltoMF07IHQ7IHQgPSB0LT5uZXh0KSB7CisJZm9yICh0ID0gc2l0bi0+dHVubmVsc19yW2gwXTsgdDsgdCA9IHQtPm5leHQpIHsKIAkJaWYgKHJlbW90ZSA9PSB0LT5wYXJtcy5pcGguZGFkZHIgJiYgKHQtPmRldi0+ZmxhZ3MmSUZGX1VQKSkKIAkJCXJldHVybiB0OwogCX0KLQlmb3IgKHQgPSB0dW5uZWxzX2xbaDFdOyB0OyB0ID0gdC0+bmV4dCkgeworCWZvciAodCA9IHNpdG4tPnR1bm5lbHNfbFtoMV07IHQ7IHQgPSB0LT5uZXh0KSB7CiAJCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgJiYgKHQtPmRldi0+ZmxhZ3MmSUZGX1VQKSkKIAkJCXJldHVybiB0OwogCX0KLQlpZiAoKHQgPSB0dW5uZWxzX3djWzBdKSAhPSBOVUxMICYmICh0LT5kZXYtPmZsYWdzJklGRl9VUCkpCisJaWYgKCh0ID0gc2l0bi0+dHVubmVsc193Y1swXSkgIT0gTlVMTCAmJiAodC0+ZGV2LT5mbGFncyZJRkZfVVApKQogCQlyZXR1cm4gdDsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKipfX2lwaXA2X2J1Y2tldChzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0gKnBhcm1zKQorc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKipfX2lwaXA2X2J1Y2tldChzdHJ1Y3Qgc2l0X25ldCAqc2l0biwKKwkJc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcykKIHsKIAlfX2JlMzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKIAlfX2JlMzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOwpAQCAtMTE1LDE5ICsxMjMsMjAgQEAKIAkJcHJpbyB8PSAxOwogCQloIF49IEhBU0gobG9jYWwpOwogCX0KLQlyZXR1cm4gJnR1bm5lbHNbcHJpb11baF07CisJcmV0dXJuICZzaXRuLT50dW5uZWxzW3ByaW9dW2hdOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF90dW5uZWwgKippcGlwNl9idWNrZXQoc3RydWN0IGlwX3R1bm5lbCAqdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3R1bm5lbCAqKmlwaXA2X2J1Y2tldChzdHJ1Y3Qgc2l0X25ldCAqc2l0biwKKwkJc3RydWN0IGlwX3R1bm5lbCAqdCkKIHsKLQlyZXR1cm4gX19pcGlwNl9idWNrZXQoJnQtPnBhcm1zKTsKKwlyZXR1cm4gX19pcGlwNl9idWNrZXQoc2l0biwgJnQtPnBhcm1zKTsKIH0KIAotc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VubGluayhzdHJ1Y3QgaXBfdHVubmVsICp0KQorc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3VubGluayhzdHJ1Y3Qgc2l0X25ldCAqc2l0biwgc3RydWN0IGlwX3R1bm5lbCAqdCkKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICoqdHA7CiAKLQlmb3IgKHRwID0gaXBpcDZfYnVja2V0KHQpOyAqdHA7IHRwID0gJigqdHApLT5uZXh0KSB7CisJZm9yICh0cCA9IGlwaXA2X2J1Y2tldChzaXRuLCB0KTsgKnRwOyB0cCA9ICYoKnRwKS0+bmV4dCkgewogCQlpZiAodCA9PSAqdHApIHsKIAkJCXdyaXRlX2xvY2tfYmgoJmlwaXA2X2xvY2spOwogCQkJKnRwID0gdC0+bmV4dDsKQEAgLTEzNyw5ICsxNDYsOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2xpbmsoc3RydWN0IGlwX3R1bm5lbCAqdCkKK3N0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9saW5rKHN0cnVjdCBzaXRfbmV0ICpzaXRuLCBzdHJ1Y3QgaXBfdHVubmVsICp0KQogewotCXN0cnVjdCBpcF90dW5uZWwgKip0cCA9IGlwaXA2X2J1Y2tldCh0KTsKKwlzdHJ1Y3QgaXBfdHVubmVsICoqdHAgPSBpcGlwNl9idWNrZXQoc2l0biwgdCk7CiAKIAl0LT5uZXh0ID0gKnRwOwogCXdyaXRlX2xvY2tfYmgoJmlwaXA2X2xvY2spOwpAQCAtMTQ3LDE1ICsxNTYsMTcgQEAKIAl3cml0ZV91bmxvY2tfYmgoJmlwaXA2X2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwaXA2X3R1bm5lbF9sb2NhdGUoc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcywgaW50IGNyZWF0ZSkKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBpcDZfdHVubmVsX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsCisJCXN0cnVjdCBpcF90dW5uZWxfcGFybSAqcGFybXMsIGludCBjcmVhdGUpCiB7CiAJX19iZTMyIHJlbW90ZSA9IHBhcm1zLT5pcGguZGFkZHI7CiAJX19iZTMyIGxvY2FsID0gcGFybXMtPmlwaC5zYWRkcjsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0LCAqKnRwLCAqbnQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAljaGFyIG5hbWVbSUZOQU1TSVpdOworCXN0cnVjdCBzaXRfbmV0ICpzaXRuID0gbmV0X2dlbmVyaWMobmV0LCBzaXRfbmV0X2lkKTsKIAotCWZvciAodHAgPSBfX2lwaXA2X2J1Y2tldChwYXJtcyk7ICh0ID0gKnRwKSAhPSBOVUxMOyB0cCA9ICZ0LT5uZXh0KSB7CisJZm9yICh0cCA9IF9faXBpcDZfYnVja2V0KHNpdG4sIHBhcm1zKTsgKHQgPSAqdHApICE9IE5VTEw7IHRwID0gJnQtPm5leHQpIHsKIAkJaWYgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5zYWRkciAmJiByZW1vdGUgPT0gdC0+cGFybXMuaXBoLmRhZGRyKQogCQkJcmV0dXJuIHQ7CiAJfQpAQCAtMTY0LDIxICsxNzUsMjAgQEAKIAogCWlmIChwYXJtcy0+bmFtZVswXSkKIAkJc3RybGNweShuYW1lLCBwYXJtcy0+bmFtZSwgSUZOQU1TSVopOwotCWVsc2UgewotCQlpbnQgaTsKLQkJZm9yIChpPTE7IGk8MTAwOyBpKyspIHsKLQkJCXNwcmludGYobmFtZSwgInNpdCVkIiwgaSk7Ci0JCQlpZiAoX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBuYW1lKSA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpPT0xMDApCi0JCQlnb3RvIGZhaWxlZDsKLQl9CisJZWxzZQorCQlzcHJpbnRmKG5hbWUsICJzaXQlJWQiKTsKIAogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnQpLCBuYW1lLCBpcGlwNl90dW5uZWxfc2V0dXApOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlkZXZfbmV0X3NldChkZXYsIG5ldCk7CisKKwlpZiAoc3RyY2hyKG5hbWUsICclJykpIHsKKwkJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgbmFtZSkgPCAwKQorCQkJZ290byBmYWlsZWRfZnJlZTsKKwl9CisKIAludCA9IG5ldGRldl9wcml2KGRldik7CiAJZGV2LT5pbml0ID0gaXBpcDZfdHVubmVsX2luaXQ7CiAJbnQtPnBhcm1zID0gKnBhcm1zOwpAQCAtMTg2LDI5ICsxOTYsMjA2IEBACiAJaWYgKHBhcm1zLT5pX2ZsYWdzICYgU0lUX0lTQVRBUCkKIAkJZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9JU0FUQVA7CiAKLQlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKGRldikgPCAwKSB7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCWdvdG8gZmFpbGVkOwotCX0KKwlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKGRldikgPCAwKQorCQlnb3RvIGZhaWxlZF9mcmVlOwogCiAJZGV2X2hvbGQoZGV2KTsKIAotCWlwaXA2X3R1bm5lbF9saW5rKG50KTsKKwlpcGlwNl90dW5uZWxfbGluayhzaXRuLCBudCk7CiAJcmV0dXJuIG50OwogCitmYWlsZWRfZnJlZToKKwlmcmVlX25ldGRldihkZXYpOwogZmFpbGVkOgogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkgKgorX19pcGlwNl90dW5uZWxfbG9jYXRlX3BybChzdHJ1Y3QgaXBfdHVubmVsICp0LCBfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSAqcCA9IChzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSAqKU5VTEw7CisKKwlmb3IgKHAgPSB0LT5wcmw7IHA7IHAgPSBwLT5uZXh0KQorCQlpZiAocC0+YWRkciA9PSBhZGRyKQorCQkJYnJlYWs7CisJcmV0dXJuIHA7CisKK30KKworc3RhdGljIGludCBpcGlwNl90dW5uZWxfZ2V0X3BybChzdHJ1Y3QgaXBfdHVubmVsICp0LCBzdHJ1Y3QgaXBfdHVubmVsX3BybCAqYSkKK3sKKwlzdHJ1Y3QgaXBfdHVubmVsX3BybCAqa3A7CisJc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkgKnBybDsKKwl1bnNpZ25lZCBpbnQgY21heCwgYyA9IDAsIGNhLCBsZW47CisJaW50IHJldCA9IDA7CisKKwljbWF4ID0gYS0+ZGF0YWxlbiAvIHNpemVvZigqYSk7CisJaWYgKGNtYXggPiAxICYmIGEtPmFkZHIgIT0gaHRvbmwoSU5BRERSX0FOWSkpCisJCWNtYXggPSAxOworCisJLyogRm9yIHNpbXBsZSBHRVQgb3IgZm9yIHJvb3QgdXNlcnMsCisJICogd2UgdHJ5IGhhcmRlciB0byBhbGxvY2F0ZS4KKwkgKi8KKwlrcCA9IChjbWF4IDw9IDEgfHwgY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgPworCQlrY2FsbG9jKGNtYXgsIHNpemVvZigqa3ApLCBHRlBfS0VSTkVMKSA6CisJCU5VTEw7CisKKwlyZWFkX2xvY2soJmlwaXA2X2xvY2spOworCisJY2EgPSB0LT5wcmxfY291bnQgPCBjbWF4ID8gdC0+cHJsX2NvdW50IDogY21heDsKKworCWlmICgha3ApIHsKKwkJLyogV2UgZG9uJ3QgdHJ5IGhhcmQgdG8gYWxsb2NhdGUgbXVjaCBtZW1vcnkgZm9yCisJCSAqIG5vbi1yb290IHVzZXJzLgorCQkgKiBGb3Igcm9vdCB1c2VycywgcmV0cnkgYWxsb2NhdGluZyBlbm91Z2ggbWVtb3J5IGZvcgorCQkgKiB0aGUgYW5zd2VyLgorCQkgKi8KKwkJa3AgPSBrY2FsbG9jKGNhLCBzaXplb2YoKmtwKSwgR0ZQX0FUT01JQyk7CisJCWlmICgha3ApIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWMgPSAwOworCWZvciAocHJsID0gdC0+cHJsOyBwcmw7IHBybCA9IHBybC0+bmV4dCkgeworCQlpZiAoYyA+IGNtYXgpCisJCQlicmVhazsKKwkJaWYgKGEtPmFkZHIgIT0gaHRvbmwoSU5BRERSX0FOWSkgJiYgcHJsLT5hZGRyICE9IGEtPmFkZHIpCisJCQljb250aW51ZTsKKwkJa3BbY10uYWRkciA9IHBybC0+YWRkcjsKKwkJa3BbY10uZmxhZ3MgPSBwcmwtPmZsYWdzOworCQljKys7CisJCWlmIChhLT5hZGRyICE9IGh0b25sKElOQUREUl9BTlkpKQorCQkJYnJlYWs7CisJfQorb3V0OgorCXJlYWRfdW5sb2NrKCZpcGlwNl9sb2NrKTsKKworCWxlbiA9IHNpemVvZigqa3ApICogYzsKKwlyZXQgPSBsZW4gPyBjb3B5X3RvX3VzZXIoYS0+ZGF0YSwga3AsIGxlbikgOiAwOworCisJa2ZyZWUoa3ApOworCWlmIChyZXQpCisJCXJldHVybiAtRUZBVUxUOworCisJYS0+ZGF0YWxlbiA9IGxlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraXBpcDZfdHVubmVsX2FkZF9wcmwoc3RydWN0IGlwX3R1bm5lbCAqdCwgc3RydWN0IGlwX3R1bm5lbF9wcmwgKmEsIGludCBjaGcpCit7CisJc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkgKnA7CisJaW50IGVyciA9IDA7CisKKwlpZiAoYS0+YWRkciA9PSBodG9ubChJTkFERFJfQU5ZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZV9sb2NrKCZpcGlwNl9sb2NrKTsKKworCWZvciAocCA9IHQtPnBybDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPmFkZHIgPT0gYS0+YWRkcikgeworCQkJaWYgKGNoZykKKwkJCQlnb3RvIHVwZGF0ZTsKKwkJCWVyciA9IC1FRVhJU1Q7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChjaGcpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKworCXAtPm5leHQgPSB0LT5wcmw7CisJdC0+cHJsID0gcDsKKwl0LT5wcmxfY291bnQrKzsKK3VwZGF0ZToKKwlwLT5hZGRyID0gYS0+YWRkcjsKKwlwLT5mbGFncyA9IGEtPmZsYWdzOworb3V0OgorCXdyaXRlX3VubG9jaygmaXBpcDZfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAoraXBpcDZfdHVubmVsX2RlbF9wcmwoc3RydWN0IGlwX3R1bm5lbCAqdCwgc3RydWN0IGlwX3R1bm5lbF9wcmwgKmEpCit7CisJc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkgKngsICoqcDsKKwlpbnQgZXJyID0gMDsKKworCXdyaXRlX2xvY2soJmlwaXA2X2xvY2spOworCisJaWYgKGEgJiYgYS0+YWRkciAhPSBodG9ubChJTkFERFJfQU5ZKSkgeworCQlmb3IgKHAgPSAmdC0+cHJsOyAqcDsgcCA9ICYoKnApLT5uZXh0KSB7CisJCQlpZiAoKCpwKS0+YWRkciA9PSBhLT5hZGRyKSB7CisJCQkJeCA9ICpwOworCQkJCSpwID0geC0+bmV4dDsKKwkJCQlrZnJlZSh4KTsKKwkJCQl0LT5wcmxfY291bnQtLTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQllcnIgPSAtRU5YSU87CisJfSBlbHNlIHsKKwkJd2hpbGUgKHQtPnBybCkgeworCQkJeCA9IHQtPnBybDsKKwkJCXQtPnBybCA9IHQtPnBybC0+bmV4dDsKKwkJCWtmcmVlKHgpOworCQkJdC0+cHJsX2NvdW50LS07CisJCX0KKwl9CitvdXQ6CisJd3JpdGVfdW5sb2NrKCZpcGlwNl9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraXNhdGFwX2Noa3NyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IGlwX3R1bm5lbCAqdCkKK3sKKwlzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSAqcDsKKwlpbnQgb2sgPSAxOworCisJcmVhZF9sb2NrKCZpcGlwNl9sb2NrKTsKKwlwID0gX19pcGlwNl90dW5uZWxfbG9jYXRlX3BybCh0LCBpcGgtPnNhZGRyKTsKKwlpZiAocCkgeworCQlpZiAocC0+ZmxhZ3MgJiBQUkxfREVGQVVMVCkKKwkJCXNrYi0+bmRpc2Nfbm9kZXR5cGUgPSBORElTQ19OT0RFVFlQRV9ERUZBVUxUOworCQllbHNlCisJCQlza2ItPm5kaXNjX25vZGV0eXBlID0gTkRJU0NfTk9ERVRZUEVfTk9ERUZBVUxUOworCX0gZWxzZSB7CisJCXN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CisJCWlmIChpcHY2X2FkZHJfaXNfaXNhdGFwKGFkZHI2KSAmJgorCQkgICAgKGFkZHI2LT5zNl9hZGRyMzJbM10gPT0gaXBoLT5zYWRkcikgJiYKKwkJICAgIGlwdjZfY2hrX3ByZWZpeChhZGRyNiwgdC0+ZGV2KSkKKwkJCXNrYi0+bmRpc2Nfbm9kZXR5cGUgPSBORElTQ19OT0RFVFlQRV9IT1NUOworCQllbHNlCisJCQlvayA9IDA7CisJfQorCXJlYWRfdW5sb2NrKCZpcGlwNl9sb2NrKTsKKwlyZXR1cm4gb2s7Cit9CisKIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2ID09IGlwaXA2X2ZiX3R1bm5lbF9kZXYpIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisJc3RydWN0IHNpdF9uZXQgKnNpdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHNpdF9uZXRfaWQpOworCisJaWYgKGRldiA9PSBzaXRuLT5mYl90dW5uZWxfZGV2KSB7CiAJCXdyaXRlX2xvY2tfYmgoJmlwaXA2X2xvY2spOwotCQl0dW5uZWxzX3djWzBdID0gTlVMTDsKKwkJc2l0bi0+dHVubmVsc193Y1swXSA9IE5VTEw7CiAJCXdyaXRlX3VubG9ja19iaCgmaXBpcDZfbG9jayk7CiAJCWRldl9wdXQoZGV2KTsKIAl9IGVsc2UgewotCQlpcGlwNl90dW5uZWxfdW5saW5rKG5ldGRldl9wcml2KGRldikpOworCQlpcGlwNl90dW5uZWxfdW5saW5rKHNpdG4sIG5ldGRldl9wcml2KGRldikpOworCQlpcGlwNl90dW5uZWxfZGVsX3BybChuZXRkZXZfcHJpdihkZXYpLCBOVUxMKTsKIAkJZGV2X3B1dChkZXYpOwogCX0KIH0KQEAgLTI1OSw3ICs0NDYsNyBAQAogCWVyciA9IC1FTk9FTlQ7CiAKIAlyZWFkX2xvY2soJmlwaXA2X2xvY2spOwotCXQgPSBpcGlwNl90dW5uZWxfbG9va3VwKGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIpOworCXQgPSBpcGlwNl90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyKTsKIAlpZiAodCA9PSBOVUxMIHx8IHQtPnBhcm1zLmlwaC5kYWRkciA9PSAwKQogCQlnb3RvIG91dDsKIApAQCAtMzQyLDExICs1MjksMTIgQEAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiMik7CiAKIAkvKiBUcnkgdG8gZ3Vlc3MgaW5jb21pbmcgaW50ZXJmYWNlICovCi0JcnQ2aSA9IHJ0Nl9sb29rdXAoJmlwaDYtPnNhZGRyLCBOVUxMLCBOVUxMLCAwKTsKKwlydDZpID0gcnQ2X2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwgJmlwaDYtPnNhZGRyLCBOVUxMLCBOVUxMLCAwKTsKIAlpZiAocnQ2aSAmJiBydDZpLT5ydDZpX2RldikgewogCQlza2IyLT5kZXYgPSBydDZpLT5ydDZpX2RldjsKIAotCQlydDZpID0gcnQ2X2xvb2t1cCgmaXBoNi0+ZGFkZHIsICZpcGg2LT5zYWRkciwgTlVMTCwgMCk7CisJCXJ0NmkgPSBydDZfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLAorCQkJCSZpcGg2LT5kYWRkciwgJmlwaDYtPnNhZGRyLCBOVUxMLCAwKTsKIAogCQlpZiAocnQ2aSAmJiBydDZpLT5ydDZpX2RldiAmJiBydDZpLT5ydDZpX2Rldi0+dHlwZSA9PSBBUlBIUkRfU0lUKSB7CiAJCQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYocnQ2aS0+cnQ2aV9kZXYpOwpAQCAtMzY4LDQ4ICs1NTYsNiBAQAogCQlJUDZfRUNOX3NldF9jZShpcHY2X2hkcihza2IpKTsKIH0KIAotLyogSVNBVEFQIChSRkM0MjE0KSAtIGNoZWNrIHNvdXJjZSBhZGRyZXNzICovCi1zdGF0aWMgaW50Ci1pc2F0YXBfc3Jjb2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0OwotCXN0cnVjdCBydDZfaW5mbyAqcnQ7Ci0Jc3RydWN0IGZsb3dpIGZsOwotCXN0cnVjdCBpbjZfYWRkciAqYWRkcjY7Ci0Jc3RydWN0IGluNl9hZGRyIHJ0cjsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoNjsKLQlpbnQgb2sgPSAwOwotCi0JLyogZnJvbSBvbmxpbmsgZGVmYXVsdCByb3V0ZXIgKi8KLQlpcHY2X2FkZHJfc2V0KCZydHIsICBodG9ubCgweEZFODAwMDAwKSwgMCwgMCwgMCk7Ci0JaXB2Nl9pc2F0YXBfZXVpNjQocnRyLnM2X2FkZHIgKyA4LCBpcGgtPnNhZGRyKTsKLQlpZiAoKHJ0ID0gcnQ2X2dldF9kZmx0X3JvdXRlcigmcnRyLCBkZXYpKSkgewotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaXBoNiA9IGlwdjZfaGRyKHNrYik7Ci0JbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7Ci0JZmwucHJvdG8gPSBpcGg2LT5uZXh0aGRyOwotCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmaXBoNi0+c2FkZHIpOwotCWZsLm9pZiA9IGRldi0+aWZpbmRleDsKLQlzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsICZmbCk7Ci0KLQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KE5VTEwsICZmbCk7Ci0JaWYgKCFkc3QtPmVycm9yICYmIChkc3QtPmRldiA9PSBkZXYpICYmIChuZWlnaCA9IGRzdC0+bmVpZ2hib3VyKSkgewotCi0JCWFkZHI2ID0gKHN0cnVjdCBpbjZfYWRkciopJm5laWdoLT5wcmltYXJ5X2tleTsKLQotCQkvKiBmcm9tIGNvcnJlY3QgcHJldmlvdXMgaG9wICovCi0JCWlmIChpcHY2X2FkZHJfaXNfaXNhdGFwKGFkZHI2KSAmJgotCQkgICAgKGFkZHI2LT5zNl9hZGRyMzJbM10gPT0gaXBoLT5zYWRkcikpCi0JCQlvayA9IDE7Ci0JfQotCWRzdF9yZWxlYXNlKGRzdCk7Ci0JcmV0dXJuIG9rOwotfQotCiBzdGF0aWMgaW50IGlwaXA2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcGhkciAqaXBoOwpAQCAtNDIxLDcgKzU2Nyw4IEBACiAJaXBoID0gaXBfaGRyKHNrYik7CiAKIAlyZWFkX2xvY2soJmlwaXA2X2xvY2spOwotCWlmICgodHVubmVsID0gaXBpcDZfdHVubmVsX2xvb2t1cChpcGgtPnNhZGRyLCBpcGgtPmRhZGRyKSkgIT0gTlVMTCkgeworCWlmICgodHVubmVsID0gaXBpcDZfdHVubmVsX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwKKwkJCQkJaXBoLT5zYWRkciwgaXBoLT5kYWRkcikpICE9IE5VTEwpIHsKIAkJc2VjcGF0aF9yZXNldChza2IpOwogCQlza2ItPm1hY19oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKQEAgLTQzMCw3ICs1NzcsNyBAQAogCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAKIAkJaWYgKCh0dW5uZWwtPmRldi0+cHJpdl9mbGFncyAmIElGRl9JU0FUQVApICYmCi0JCSAgICAhaXNhdGFwX3NyY29rKHNrYiwgaXBoLCB0dW5uZWwtPmRldikpIHsKKwkJICAgICFpc2F0YXBfY2hrc3JjKHNrYiwgaXBoLCB0dW5uZWwpKSB7CiAJCQl0dW5uZWwtPnN0YXQucnhfZXJyb3JzKys7CiAJCQlyZWFkX3VubG9jaygmaXBpcDZfbG9jayk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTU1Nyw3ICs3MDQsNyBAQAogCQkJCQkJLnRvcyA9IFJUX1RPUyh0b3MpIH0gfSwKIAkJCQkgICAgLm9pZiA9IHR1bm5lbC0+cGFybXMubGluaywKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19JUFY2IH07Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7CisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgJnJ0LCAmZmwpKSB7CiAJCQl0dW5uZWwtPnN0YXQudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAkJfQpAQCAtNjg2LDcgKzgzMyw3IEBACiAJCQkJICAgIC5vaWYgPSB0dW5uZWwtPnBhcm1zLmxpbmssCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fSVBWNiB9OwogCQlzdHJ1Y3QgcnRhYmxlICpydDsKLQkJaWYgKCFpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7CisJCWlmICghaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkgewogCQkJdGRldiA9IHJ0LT51LmRzdC5kZXY7CiAJCQlpcF9ydF9wdXQocnQpOwogCQl9CkBAIC02OTQsNyArODQxLDcgQEAKIAl9CiAKIAlpZiAoIXRkZXYgJiYgdHVubmVsLT5wYXJtcy5saW5rKQotCQl0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgdHVubmVsLT5wYXJtcy5saW5rKTsKKwkJdGRldiA9IF9fZGV2X2dldF9ieV9pbmRleChkZXZfbmV0KGRldiksIHR1bm5lbC0+cGFybXMubGluayk7CiAKIAlpZiAodGRldikgewogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHRkZXYtPmhhcmRfaGVhZGVyX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwpAQCAtNzEwLDE3ICs4NTcsMjAgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm0gcDsKKwlzdHJ1Y3QgaXBfdHVubmVsX3BybCBwcmw7CiAJc3RydWN0IGlwX3R1bm5lbCAqdDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisJc3RydWN0IHNpdF9uZXQgKnNpdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHNpdF9uZXRfaWQpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHRVRUVU5ORUw6CiAJCXQgPSBOVUxMOwotCQlpZiAoZGV2ID09IGlwaXA2X2ZiX3R1bm5lbF9kZXYpIHsKKwkJaWYgKGRldiA9PSBzaXRuLT5mYl90dW5uZWxfZGV2KSB7CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCBzaXplb2YocCkpKSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXQgPSBpcGlwNl90dW5uZWxfbG9jYXRlKCZwLCAwKTsKKwkJCXQgPSBpcGlwNl90dW5uZWxfbG9jYXRlKG5ldCwgJnAsIDApOwogCQl9CiAJCWlmICh0ID09IE5VTEwpCiAJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTc0Niw5ICs4OTYsOSBAQAogCQlpZiAocC5pcGgudHRsKQogCQkJcC5pcGguZnJhZ19vZmYgfD0gaHRvbnMoSVBfREYpOwogCi0JCXQgPSBpcGlwNl90dW5uZWxfbG9jYXRlKCZwLCBjbWQgPT0gU0lPQ0FERFRVTk5FTCk7CisJCXQgPSBpcGlwNl90dW5uZWxfbG9jYXRlKG5ldCwgJnAsIGNtZCA9PSBTSU9DQUREVFVOTkVMKTsKIAotCQlpZiAoZGV2ICE9IGlwaXA2X2ZiX3R1bm5lbF9kZXYgJiYgY21kID09IFNJT0NDSEdUVU5ORUwpIHsKKwkJaWYgKGRldiAhPSBzaXRuLT5mYl90dW5uZWxfZGV2ICYmIGNtZCA9PSBTSU9DQ0hHVFVOTkVMKSB7CiAJCQlpZiAodCAhPSBOVUxMKSB7CiAJCQkJaWYgKHQtPmRldiAhPSBkZXYpIHsKIAkJCQkJZXJyID0gLUVFWElTVDsKQEAgLTc2MSwxMiArOTExLDEyIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCQlpcGlwNl90dW5uZWxfdW5saW5rKHQpOworCQkJCWlwaXA2X3R1bm5lbF91bmxpbmsoc2l0biwgdCk7CiAJCQkJdC0+cGFybXMuaXBoLnNhZGRyID0gcC5pcGguc2FkZHI7CiAJCQkJdC0+cGFybXMuaXBoLmRhZGRyID0gcC5pcGguZGFkZHI7CiAJCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwLmlwaC5zYWRkciwgNCk7CiAJCQkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmcC5pcGguZGFkZHIsIDQpOwotCQkJCWlwaXA2X3R1bm5lbF9saW5rKHQpOworCQkJCWlwaXA2X3R1bm5lbF9saW5rKHNpdG4sIHQpOwogCQkJCW5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTsKIAkJCX0KIAkJfQpAQCAtNzkzLDE1ICs5NDMsMTUgQEAKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJZ290byBkb25lOwogCi0JCWlmIChkZXYgPT0gaXBpcDZfZmJfdHVubmVsX2RldikgeworCQlpZiAoZGV2ID09IHNpdG4tPmZiX3R1bm5lbF9kZXYpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCBzaXplb2YocCkpKQogCQkJCWdvdG8gZG9uZTsKIAkJCWVyciA9IC1FTk9FTlQ7Ci0JCQlpZiAoKHQgPSBpcGlwNl90dW5uZWxfbG9jYXRlKCZwLCAwKSkgPT0gTlVMTCkKKwkJCWlmICgodCA9IGlwaXA2X3R1bm5lbF9sb2NhdGUobmV0LCAmcCwgMCkpID09IE5VTEwpCiAJCQkJZ290byBkb25lOwogCQkJZXJyID0gLUVQRVJNOwotCQkJaWYgKHQgPT0gbmV0ZGV2X3ByaXYoaXBpcDZfZmJfdHVubmVsX2RldikpCisJCQlpZiAodCA9PSBuZXRkZXZfcHJpdihzaXRuLT5mYl90dW5uZWxfZGV2KSkKIAkJCQlnb3RvIGRvbmU7CiAJCQlkZXYgPSB0LT5kZXY7CiAJCX0KQEAgLTgwOSw2ICs5NTksNDIgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAKKwljYXNlIFNJT0NHRVRQUkw6CisJY2FzZSBTSU9DQUREUFJMOgorCWNhc2UgU0lPQ0RFTFBSTDoKKwljYXNlIFNJT0NDSEdQUkw6CisJCWVyciA9IC1FUEVSTTsKKwkJaWYgKGNtZCAhPSBTSU9DR0VUUFJMICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJZ290byBkb25lOworCQllcnIgPSAtRUlOVkFMOworCQlpZiAoZGV2ID09IHNpdG4tPmZiX3R1bm5lbF9kZXYpCisJCQlnb3RvIGRvbmU7CisJCWVyciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcHJsLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mKHBybCkpKQorCQkJZ290byBkb25lOworCQllcnIgPSAtRU5PRU5UOworCQlpZiAoISh0ID0gbmV0ZGV2X3ByaXYoZGV2KSkpCisJCQlnb3RvIGRvbmU7CisKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBTSU9DR0VUUFJMOgorCQkJZXJyID0gaXBpcDZfdHVubmVsX2dldF9wcmwodCwgJnBybCk7CisJCQlpZiAoIWVyciAmJiBjb3B5X3RvX3VzZXIoaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsCisJCQkJCQkgJnBybCwgc2l6ZW9mKHBybCkpKQorCQkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJY2FzZSBTSU9DREVMUFJMOgorCQkJZXJyID0gaXBpcDZfdHVubmVsX2RlbF9wcmwodCwgJnBybCk7CisJCQlicmVhazsKKwkJY2FzZSBTSU9DQUREUFJMOgorCQljYXNlIFNJT0NDSEdQUkw6CisJCQllcnIgPSBpcGlwNl90dW5uZWxfYWRkX3BybCh0LCAmcHJsLCBjbWQgPT0gU0lPQ0NIR1BSTCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY21kICE9IFNJT0NHRVRQUkwpCisJCQluZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJZXJyID0gLUVJTlZBTDsKIAl9CkBAIC04NDUsNiArMTAzMSw3IEBACiAJZGV2LT5mbGFncwkJPSBJRkZfTk9BUlA7CiAJZGV2LT5pZmxpbmsJCT0gMDsKIAlkZXYtPmFkZHJfbGVuCQk9IDQ7CisJZGV2LT5mZWF0dXJlcwkJfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIH0KIAogc3RhdGljIGludCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtODY0LDEwICsxMDUxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlwaXA2X2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlwaXA2X2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisJc3RydWN0IHNpdF9uZXQgKnNpdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHNpdF9uZXRfaWQpOwogCiAJdHVubmVsLT5kZXYgPSBkZXY7CiAJc3RyY3B5KHR1bm5lbC0+cGFybXMubmFtZSwgZGV2LT5uYW1lKTsKQEAgLTg3OCw3ICsxMDY3LDcgQEAKIAlpcGgtPnR0bAkJPSA2NDsKIAogCWRldl9ob2xkKGRldik7Ci0JdHVubmVsc193Y1swXQkJPSB0dW5uZWw7CisJc2l0bi0+dHVubmVsc193Y1swXQk9IHR1bm5lbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg4LDcgKzEwNzcsNyBAQAogCS5wcmlvcml0eQk9CTEsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2l0X2Rlc3Ryb3lfdHVubmVscyh2b2lkKQorc3RhdGljIHZvaWQgc2l0X2Rlc3Ryb3lfdHVubmVscyhzdHJ1Y3Qgc2l0X25ldCAqc2l0bikKIHsKIAlpbnQgcHJpbzsKIApAQCAtODk2LDIwICsxMDg1LDc4IEBACiAJCWludCBoOwogCQlmb3IgKGggPSAwOyBoIDwgSEFTSF9TSVpFOyBoKyspIHsKIAkJCXN0cnVjdCBpcF90dW5uZWwgKnQ7Ci0JCQl3aGlsZSAoKHQgPSB0dW5uZWxzW3ByaW9dW2hdKSAhPSBOVUxMKQorCQkJd2hpbGUgKCh0ID0gc2l0bi0+dHVubmVsc1twcmlvXVtoXSkgIT0gTlVMTCkKIAkJCQl1bnJlZ2lzdGVyX25ldGRldmljZSh0LT5kZXYpOwogCQl9CiAJfQogfQogCitzdGF0aWMgaW50IHNpdF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc2l0X25ldCAqc2l0bjsKKworCWVyciA9IC1FTk9NRU07CisJc2l0biA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaXRfbmV0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNpdG4gPT0gTlVMTCkKKwkJZ290byBlcnJfYWxsb2M7CisKKwllcnIgPSBuZXRfYXNzaWduX2dlbmVyaWMobmV0LCBzaXRfbmV0X2lkLCBzaXRuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfYXNzaWduOworCisJc2l0bi0+dHVubmVsc1swXSA9IHNpdG4tPnR1bm5lbHNfd2M7CisJc2l0bi0+dHVubmVsc1sxXSA9IHNpdG4tPnR1bm5lbHNfbDsKKwlzaXRuLT50dW5uZWxzWzJdID0gc2l0bi0+dHVubmVsc19yOworCXNpdG4tPnR1bm5lbHNbM10gPSBzaXRuLT50dW5uZWxzX3JfbDsKKworCXNpdG4tPmZiX3R1bm5lbF9kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBpcF90dW5uZWwpLCAic2l0MCIsCisJCQkJCSAgIGlwaXA2X3R1bm5lbF9zZXR1cCk7CisJaWYgKCFzaXRuLT5mYl90dW5uZWxfZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2RldjsKKwl9CisKKwlzaXRuLT5mYl90dW5uZWxfZGV2LT5pbml0ID0gaXBpcDZfZmJfdHVubmVsX2luaXQ7CisJZGV2X25ldF9zZXQoc2l0bi0+ZmJfdHVubmVsX2RldiwgbmV0KTsKKworCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KHNpdG4tPmZiX3R1bm5lbF9kZXYpKSkKKwkJZ290byBlcnJfcmVnX2RldjsKKworCXJldHVybiAwOworCitlcnJfcmVnX2RldjoKKwlmcmVlX25ldGRldihzaXRuLT5mYl90dW5uZWxfZGV2KTsKK2Vycl9hbGxvY19kZXY6CisJLyogbm90aGluZyAqLworZXJyX2Fzc2lnbjoKKwlrZnJlZShzaXRuKTsKK2Vycl9hbGxvYzoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzaXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBzaXRfbmV0ICpzaXRuOworCisJc2l0biA9IG5ldF9nZW5lcmljKG5ldCwgc2l0X25ldF9pZCk7CisJcnRubF9sb2NrKCk7CisJc2l0X2Rlc3Ryb3lfdHVubmVscyhzaXRuKTsKKwl1bnJlZ2lzdGVyX25ldGRldmljZShzaXRuLT5mYl90dW5uZWxfZGV2KTsKKwlydG5sX3VubG9jaygpOworCWtmcmVlKHNpdG4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHNpdF9uZXRfb3BzID0geworCS5pbml0ID0gc2l0X2luaXRfbmV0LAorCS5leGl0ID0gc2l0X2V4aXRfbmV0LAorfTsKKwogc3RhdGljIHZvaWQgX19leGl0IHNpdF9jbGVhbnVwKHZvaWQpCiB7CiAJeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoJnNpdF9oYW5kbGVyLCBBRl9JTkVUNik7CiAKLQlydG5sX2xvY2soKTsKLQlzaXRfZGVzdHJveV90dW5uZWxzKCk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UoaXBpcDZfZmJfdHVubmVsX2Rldik7Ci0JcnRubF91bmxvY2soKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHNpdF9uZXRfaWQsICZzaXRfbmV0X29wcyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNpdF9pbml0KHZvaWQpCkBAIC05MjMsMjUgKzExNzAsMTEgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JaXBpcDZfZmJfdHVubmVsX2RldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGlwX3R1bm5lbCksICJzaXQwIiwKLQkJCQkJICAgaXBpcDZfdHVubmVsX3NldHVwKTsKLQlpZiAoIWlwaXA2X2ZiX3R1bm5lbF9kZXYpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnIxOwotCX0KKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmc2l0X25ldF9pZCwgJnNpdF9uZXRfb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoJnNpdF9oYW5kbGVyLCBBRl9JTkVUNik7CiAKLQlpcGlwNl9mYl90dW5uZWxfZGV2LT5pbml0ID0gaXBpcDZfZmJfdHVubmVsX2luaXQ7Ci0KLQlpZiAoKGVyciA9ICByZWdpc3Rlcl9uZXRkZXYoaXBpcDZfZmJfdHVubmVsX2RldikpKQotCQlnb3RvIGVycjI7Ci0KLSBvdXQ6CiAJcmV0dXJuIGVycjsKLSBlcnIyOgotCWZyZWVfbmV0ZGV2KGlwaXA2X2ZiX3R1bm5lbF9kZXYpOwotIGVycjE6Ci0JeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoJnNpdF9oYW5kbGVyLCBBRl9JTkVUNik7Ci0JZ290byBvdXQ7CiB9CiAKIG1vZHVsZV9pbml0KHNpdF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzhjZTRlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjYvc3luY29va2llcy5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogIElQdjYgU3luY29va2llcyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIExpbnV4IGtlcm5lbAorICoKKyAqICBBdXRob3JzOgorICogIEdsZW5uIEdyaWZmaW4JPGdncmlmZmluLmtlcm5lbEBnbWFpbC5jb20+CisgKgorICogIEJhc2VkIG9uIElQdjQgaW1wbGVtZW50YXRpb24gYnkgQW5kaSBLbGVlbgorICogIGxpbnV4L25ldC9pcHY0L3N5bmNvb2tpZXMuYworICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF9zeW5jb29raWVzOworZXh0ZXJuIF9fdTMyIHN5bmNvb2tpZV9zZWNyZXRbMl1bMTYtNCtTSEFfRElHRVNUX1dPUkRTXTsKKworI2RlZmluZSBDT09LSUVCSVRTIDI0CS8qIFVwcGVyIGJpdHMgc3RvcmUgY291bnQgKi8KKyNkZWZpbmUgQ09PS0lFTUFTSyAoKChfX3UzMikxIDw8IENPT0tJRUJJVFMpIC0gMSkKKworLyoKKyAqIFRoaXMgdGFibGUgaGFzIHRvIGJlIHNvcnRlZCBhbmQgdGVybWluYXRlZCB3aXRoIChfX3UxNiktMS4KKyAqIFhYWCBnZW5lcmF0ZSBhIGJldHRlciB0YWJsZS4KKyAqIFVucmVzb2x2ZWQgSXNzdWVzOiBISVBQSSB3aXRoIGEgNjRrIE1TUyBpcyBub3Qgd2VsbCBzdXBwb3J0ZWQuCisgKgorICogVGFrZW4gZGlyZWN0bHkgZnJvbSBpcHY0IGltcGxlbWVudGF0aW9uLgorICogU2hvdWxkIHRoaXMgbGlzdCBiZSBtb2RpZmllZCBmb3IgaXB2NiB1c2Ugb3IgaXMgaXQgY2xvc2UgZW5vdWdoPworICogcmZjIDI0NjAgOC4zIHN1Z2dlc3RzIG1zcyB2YWx1ZXMgMjAgYnl0ZXMgbGVzcyB0aGFuIGlwdjQgY291bnRlcnBhcnQKKyAqLworc3RhdGljIF9fdTE2IGNvbnN0IG1zc3RhYltdID0geworCTY0IC0gMSwKKwkyNTYgLSAxLAorCTUxMiAtIDEsCisJNTM2IC0gMSwKKwkxMDI0IC0gMSwKKwkxNDQwIC0gMSwKKwkxNDYwIC0gMSwKKwk0MzEyIC0gMSwKKwkoX191MTYpLTEKK307CisvKiBUaGUgbnVtYmVyIGRvZXNuJ3QgaW5jbHVkZSB0aGUgLTEgdGVybWluYXRvciAqLworI2RlZmluZSBOVU1fTVNTIChBUlJBWV9TSVpFKG1zc3RhYikgLSAxKQorCisvKgorICogVGhpcyAobWlzbmFtZWQpIHZhbHVlIGlzIHRoZSBhZ2Ugb2Ygc3luY29va2llIHdoaWNoIGlzIHBlcm1pdHRlZC4KKyAqIEl0cyBpZGVhbCB2YWx1ZSBzaG91bGQgYmUgZGVwZW5kZW50IG9uIFRDUF9USU1FT1VUX0lOSVQgYW5kCisgKiBzeXNjdGxfdGNwX3JldHJpZXMxLiBJdCdzIGEgcmF0aGVyIGNvbXBsaWNhdGVkIGZvcm11bGEgKGV4cG9uZW50aWFsCisgKiBiYWNrb2ZmKSB0byBjb21wdXRlIGF0IHJ1bnRpbWUgc28gaXQncyBjdXJyZW50bHkgaGFyZGNvZGVkIGhlcmUuCisgKi8KKyNkZWZpbmUgQ09VTlRFUl9UUklFUyA0CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmdldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkJICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwlzdHJ1Y3Qgc29jayAqY2hpbGQ7CisKKwljaGlsZCA9IGljc2stPmljc2tfYWZfb3BzLT5zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0KTsKKwlpZiAoY2hpbGQpCisJCWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBjaGlsZCk7CisJZWxzZQorCQlyZXFza19mcmVlKHJlcSk7CisKKwlyZXR1cm4gY2hpbGQ7Cit9CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShfX3UzMiwgY29va2llX3NjcmF0Y2gpWzE2ICsgNSArIFNIQV9XT1JLU1BBQ0VfV09SRFNdOworCitzdGF0aWMgdTMyIGNvb2tpZV9oYXNoKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCSAgICAgICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCwgdTMyIGNvdW50LCBpbnQgYykKK3sKKwlfX3UzMiAqdG1wID0gX19nZXRfY3B1X3Zhcihjb29raWVfc2NyYXRjaCk7CisKKwkvKgorCSAqIHdlIGhhdmUgMzIwIGJpdHMgb2YgaW5mb3JtYXRpb24gdG8gaGFzaCwgY29weSBpbiB0aGUgcmVtYWluaW5nCisJICogMTkyIGJpdHMgcmVxdWlyZWQgZm9yIHNoYV90cmFuc2Zvcm0sIGZyb20gdGhlIHN5bmNvb2tpZV9zZWNyZXQKKwkgKiBhbmQgb3ZlcndyaXRlIHRoZSBkaWdlc3Qgd2l0aCB0aGUgc2VjcmV0CisJICovCisJbWVtY3B5KHRtcCArIDEwLCBzeW5jb29raWVfc2VjcmV0W2NdLCA0NCk7CisJbWVtY3B5KHRtcCwgc2FkZHIsIDE2KTsKKwltZW1jcHkodG1wICsgNCwgZGFkZHIsIDE2KTsKKwl0bXBbOF0gPSAoKF9fZm9yY2UgdTMyKXNwb3J0IDw8IDE2KSArIChfX2ZvcmNlIHUzMilkcG9ydDsKKwl0bXBbOV0gPSBjb3VudDsKKwlzaGFfdHJhbnNmb3JtKHRtcCArIDE2LCAoX191OCAqKXRtcCwgdG1wICsgMTYgKyA1KTsKKworCXJldHVybiB0bXBbMTddOworfQorCitzdGF0aWMgX191MzIgc2VjdXJlX3RjcF9zeW5fY29va2llKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsIF9fdTMyIHNzZXEsCisJCQkJICAgX191MzIgY291bnQsIF9fdTMyIGRhdGEpCit7CisJcmV0dXJuIChjb29raWVfaGFzaChzYWRkciwgZGFkZHIsIHNwb3J0LCBkcG9ydCwgMCwgMCkgKworCQlzc2VxICsgKGNvdW50IDw8IENPT0tJRUJJVFMpICsKKwkJKChjb29raWVfaGFzaChzYWRkciwgZGFkZHIsIHNwb3J0LCBkcG9ydCwgY291bnQsIDEpICsgZGF0YSkKKwkJJiBDT09LSUVNQVNLKSk7Cit9CisKK3N0YXRpYyBfX3UzMiBjaGVja190Y3Bfc3luX2Nvb2tpZShfX3UzMiBjb29raWUsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJICBfX2JlMTYgZHBvcnQsIF9fdTMyIHNzZXEsIF9fdTMyIGNvdW50LAorCQkJCSAgX191MzIgbWF4ZGlmZikKK3sKKwlfX3UzMiBkaWZmOworCisJY29va2llIC09IGNvb2tpZV9oYXNoKHNhZGRyLCBkYWRkciwgc3BvcnQsIGRwb3J0LCAwLCAwKSArIHNzZXE7CisKKwlkaWZmID0gKGNvdW50IC0gKGNvb2tpZSA+PiBDT09LSUVCSVRTKSkgJiAoKF9fdTMyKSAtMSA+PiBDT09LSUVCSVRTKTsKKwlpZiAoZGlmZiA+PSBtYXhkaWZmKQorCQlyZXR1cm4gKF9fdTMyKS0xOworCisJcmV0dXJuIChjb29raWUgLQorCQljb29raWVfaGFzaChzYWRkciwgZGFkZHIsIHNwb3J0LCBkcG9ydCwgY291bnQgLSBkaWZmLCAxKSkKKwkJJiBDT09LSUVNQVNLOworfQorCitfX3UzMiBjb29raWVfdjZfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2ICptc3NwKQoreworCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOworCWludCBtc3NpbmQ7CisJY29uc3QgX191MTYgbXNzID0gKm1zc3A7CisKKwl0Y3Bfc2soc2spLT5sYXN0X3N5bnFfb3ZlcmZsb3cgPSBqaWZmaWVzOworCisJZm9yIChtc3NpbmQgPSAwOyBtc3MgPiBtc3N0YWJbbXNzaW5kICsgMV07IG1zc2luZCsrKQorCQk7CisJKm1zc3AgPSBtc3N0YWJbbXNzaW5kXSArIDE7CisKKwlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9TWU5DT09LSUVTU0VOVCk7CisKKwlyZXR1cm4gc2VjdXJlX3RjcF9zeW5fY29va2llKCZpcGgtPnNhZGRyLCAmaXBoLT5kYWRkciwgdGgtPnNvdXJjZSwKKwkJCQkgICAgIHRoLT5kZXN0LCBudG9obCh0aC0+c2VxKSwKKwkJCQkgICAgIGppZmZpZXMgLyAoSFogKiA2MCksIG1zc2luZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvb2tpZV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBjb29raWUpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CisJX191MzIgc2VxID0gbnRvaGwodGgtPnNlcSkgLSAxOworCV9fdTMyIG1zc2luZCA9IGNoZWNrX3RjcF9zeW5fY29va2llKGNvb2tpZSwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLAorCQkJCQkgICAgdGgtPnNvdXJjZSwgdGgtPmRlc3QsIHNlcSwKKwkJCQkJICAgIGppZmZpZXMgLyAoSFogKiA2MCksIENPVU5URVJfVFJJRVMpOworCisJcmV0dXJuIG1zc2luZCA8IE5VTV9NU1MgPyBtc3N0YWJbbXNzaW5kXSArIDEgOiAwOworfQorCitzdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7CisJc3RydWN0IGluZXQ2X3JlcXVlc3Rfc29jayAqaXJlcTY7CisJc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXE7CisJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOworCV9fdTMyIGNvb2tpZSA9IG50b2hsKHRoLT5hY2tfc2VxKSAtIDE7CisJc3RydWN0IHNvY2sgKnJldCA9IHNrOworCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTsKKwlpbnQgbXNzOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKwlfX3U4IHJjdl93c2NhbGU7CisJc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRjcF9vcHQ7CisKKwlpZiAoIXN5c2N0bF90Y3Bfc3luY29va2llcyB8fCAhdGgtPmFjaykKKwkJZ290byBvdXQ7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0cC0+bGFzdF9zeW5xX292ZXJmbG93ICsgVENQX1RJTUVPVVRfSU5JVCkgfHwKKwkJKG1zcyA9IGNvb2tpZV9jaGVjayhza2IsIGNvb2tpZSkpID09IDApIHsKKwkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfU1lOQ09PS0lFU0ZBSUxFRCk7CisJCWdvdG8gb3V0OworCX0KKworCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1NZTkNPT0tJRVNSRUNWKTsKKworCS8qIGNoZWNrIGZvciB0aW1lc3RhbXAgY29va2llIHN1cHBvcnQgKi8KKwltZW1zZXQoJnRjcF9vcHQsIDAsIHNpemVvZih0Y3Bfb3B0KSk7CisJdGNwX3BhcnNlX29wdGlvbnMoc2tiLCAmdGNwX29wdCwgMCk7CisKKwlpZiAodGNwX29wdC5zYXdfdHN0YW1wKQorCQljb29raWVfY2hlY2tfdGltZXN0YW1wKCZ0Y3Bfb3B0KTsKKworCXJldCA9IE5VTEw7CisJcmVxID0gaW5ldDZfcmVxc2tfYWxsb2MoJnRjcDZfcmVxdWVzdF9zb2NrX29wcyk7CisJaWYgKCFyZXEpCisJCWdvdG8gb3V0OworCisJaXJlcSA9IGluZXRfcnNrKHJlcSk7CisJaXJlcTYgPSBpbmV0Nl9yc2socmVxKTsKKwl0cmVxID0gdGNwX3JzayhyZXEpOworCWlyZXE2LT5wa3RvcHRzID0gTlVMTDsKKworCWlmIChzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChzaywgc2tiLCByZXEpKSB7CisJCXJlcXNrX2ZyZWUocmVxKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVxLT5tc3MgPSBtc3M7CisJaXJlcS0+cm10X3BvcnQgPSB0aC0+c291cmNlOworCWlwdjZfYWRkcl9jb3B5KCZpcmVxNi0+cm10X2FkZHIsICZpcHY2X2hkcihza2IpLT5zYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJmlyZXE2LT5sb2NfYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyKTsKKwlpZiAoaXB2Nl9vcHRfYWNjZXB0ZWQoc2ssIHNrYikgfHwKKwkgICAgbnAtPnJ4b3B0LmJpdHMucnhpbmZvIHx8IG5wLT5yeG9wdC5iaXRzLnJ4b2luZm8gfHwKKwkgICAgbnAtPnJ4b3B0LmJpdHMucnhobGltIHx8IG5wLT5yeG9wdC5iaXRzLnJ4b2hsaW0pIHsKKwkJYXRvbWljX2luYygmc2tiLT51c2Vycyk7CisJCWlyZXE2LT5wa3RvcHRzID0gc2tiOworCX0KKworCWlyZXE2LT5paWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCS8qIFNvIHRoYXQgbGluayBsb2NhbHMgaGF2ZSBtZWFuaW5nICovCisJaWYgKCFzay0+c2tfYm91bmRfZGV2X2lmICYmCisJICAgIGlwdjZfYWRkcl90eXBlKCZpcmVxNi0+cm10X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkKKwkJaXJlcTYtPmlpZiA9IGluZXQ2X2lpZihza2IpOworCisJcmVxLT5leHBpcmVzID0gMFVMOworCXJlcS0+cmV0cmFucyA9IDA7CisJaXJlcS0+c25kX3dzY2FsZQk9IHRjcF9vcHQuc25kX3dzY2FsZTsKKwlpcmVxLT5yY3Zfd3NjYWxlCT0gdGNwX29wdC5yY3Zfd3NjYWxlOworCWlyZXEtPnNhY2tfb2sJCT0gdGNwX29wdC5zYWNrX29rOworCWlyZXEtPndzY2FsZV9vawkJPSB0Y3Bfb3B0LndzY2FsZV9vazsKKwlpcmVxLT50c3RhbXBfb2sJCT0gdGNwX29wdC5zYXdfdHN0YW1wOworCXJlcS0+dHNfcmVjZW50CQk9IHRjcF9vcHQuc2F3X3RzdGFtcCA/IHRjcF9vcHQucmN2X3RzdmFsIDogMDsKKwl0cmVxLT5yY3ZfaXNuID0gbnRvaGwodGgtPnNlcSkgLSAxOworCXRyZXEtPnNudF9pc24gPSBjb29raWU7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gbG9va3VwIHRoZSBkc3RfZW50cnkgdG8gZ2V0IHRoZSBjb3JyZWN0IHdpbmRvdyBzaXplLgorCSAqIFRoaXMgaXMgdGFrZW4gZnJvbSB0Y3BfdjZfc3luX3JlY3Zfc29jay4gIFNvbWVib2R5IHBsZWFzZSBlbmxpZ2h0ZW4KKwkgKiBtZSBpZiB0aGVyZSBpcyBhIHByZWZlcnJlZCB3YXkuCisJICovCisJeworCQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKKwkJc3RydWN0IGZsb3dpIGZsOworCQltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKKwkJZmwucHJvdG8gPSBJUFBST1RPX1RDUDsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZpcmVxNi0+cm10X2FkZHIpOworCQlpZiAobnAtPm9wdCAmJiBucC0+b3B0LT5zcmNydCkgeworCQkJc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKSBucC0+b3B0LT5zcmNydDsKKwkJCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOworCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7CisJCQlmaW5hbF9wID0gJmZpbmFsOworCQl9CisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmaXJlcTYtPmxvY19hZGRyKTsKKwkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKKwkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKKwkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKKwkJaWYgKGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpKSB7CisJCQlyZXFza19mcmVlKHJlcSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoZmluYWxfcCkKKwkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBmaW5hbF9wKTsKKwkJaWYgKCh4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCisJcmVxLT53aW5kb3dfY2xhbXAgPSB0cC0+d2luZG93X2NsYW1wID8gOmRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVyk7CisJdGNwX3NlbGVjdF9pbml0aWFsX3dpbmRvdyh0Y3BfZnVsbF9zcGFjZShzayksIHJlcS0+bXNzLAorCQkJCSAgJnJlcS0+cmN2X3duZCwgJnJlcS0+d2luZG93X2NsYW1wLAorCQkJCSAgaXJlcS0+d3NjYWxlX29rLCAmcmN2X3dzY2FsZSk7CisKKwlpcmVxLT5yY3Zfd3NjYWxlID0gcmN2X3dzY2FsZTsKKworCXJldCA9IGdldF9jb29raWVfc29jayhzaywgc2tiLCByZXEsIGRzdCk7CisKK291dDoJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwppbmRleCA0MDg2OTFiLi4zODA0ZGNiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYworKysgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwpAQCAtNzEsMjQgKzcxLDExIEBACiAJaXB2Nl9yb3V0ZV90YWJsZSA9IGlwdjZfcm91dGVfc3lzY3RsX2luaXQobmV0KTsKIAlpZiAoIWlwdjZfcm91dGVfdGFibGUpCiAJCWdvdG8gb3V0X2lwdjZfdGFibGU7CisJaXB2Nl90YWJsZVswXS5jaGlsZCA9IGlwdjZfcm91dGVfdGFibGU7CiAKIAlpcHY2X2ljbXBfdGFibGUgPSBpcHY2X2ljbXBfc3lzY3RsX2luaXQobmV0KTsKIAlpZiAoIWlwdjZfaWNtcF90YWJsZSkKIAkJZ290byBvdXRfaXB2Nl9yb3V0ZV90YWJsZTsKLQotCWlwdjZfcm91dGVfdGFibGVbMF0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5OwotCS8qIGlwdjZfcm91dGVfdGFibGVbMV0uZGF0YSB3aWxsIGJlIGhhbmRsZWQgd2hlbiB3ZSBoYXZlCi0JICAgcm91dGVzIHBlciBuYW1lc3BhY2UgKi8KLQlpcHY2X3JvdXRlX3RhYmxlWzJdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemU7Ci0JaXB2Nl9yb3V0ZV90YWJsZVszXS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX21pbl9pbnRlcnZhbDsKLQlpcHY2X3JvdXRlX3RhYmxlWzRdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfdGltZW91dDsKLQlpcHY2X3JvdXRlX3RhYmxlWzVdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfaW50ZXJ2YWw7Ci0JaXB2Nl9yb3V0ZV90YWJsZVs2XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2VsYXN0aWNpdHk7Ci0JaXB2Nl9yb3V0ZV90YWJsZVs3XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X210dV9leHBpcmVzOwotCWlwdjZfcm91dGVfdGFibGVbOF0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzOwotCWlwdjZfdGFibGVbMF0uY2hpbGQgPSBpcHY2X3JvdXRlX3RhYmxlOwotCi0JaXB2Nl9pY21wX3RhYmxlWzBdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pY21wdjZfdGltZTsKIAlpcHY2X3RhYmxlWzFdLmNoaWxkID0gaXB2Nl9pY21wX3RhYmxlOwogCiAJaXB2Nl90YWJsZVsyXS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuYmluZHY2b25seTsKQEAgLTEwMiw5ICs4OSw2IEBACiAJbmV0LT5pcHY2LnN5c2N0bC50YWJsZSA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUobmV0LCBuZXRfaXB2Nl9jdGxfcGF0aCwKIAkJCQkJCQkgICBpcHY2X3RhYmxlKTsKIAlpZiAoIW5ldC0+aXB2Ni5zeXNjdGwudGFibGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCFuZXQtPmlwdjYuc3lzY3RsLnRhYmxlKQogCQlnb3RvIG91dF9pcHY2X2ljbXBfdGFibGU7CiAKIAllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggMTI3NTBmMi4uNzE1OTY1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bmV0L2RzZmllbGQuaD4KICNpbmNsdWRlIDxuZXQvdGltZXdhaXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC9uZXRkbWEuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTY5LDkgKzcwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCi0vKiBTb2NrZXQgdXNlZCBmb3Igc2VuZGluZyBSU1RzIGFuZCBBQ0tzICovCi1zdGF0aWMgc3RydWN0IHNvY2tldCAqdGNwNl9zb2NrZXQ7Ci0KIHN0YXRpYyB2b2lkCXRjcF92Nl9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZAl0Y3BfdjZfcmVxc2tfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIHN0YXRpYyB2b2lkCXRjcF92Nl9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKQEAgLTMyNCw3ICszMjIsNyBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHA7CiAJX191MzIgc2VxOwogCi0Jc2sgPSBpbmV0Nl9sb29rdXAoc2tiLT5kZXYtPm5kX25ldCwgJnRjcF9oYXNoaW5mbywgJmhkci0+ZGFkZHIsCisJc2sgPSBpbmV0Nl9sb29rdXAoZGV2X25ldChza2ItPmRldiksICZ0Y3BfaGFzaGluZm8sICZoZHItPmRhZGRyLAogCQkJdGgtPmRlc3QsICZoZHItPnNhZGRyLCB0aC0+c291cmNlLCBza2ItPmRldi0+aWZpbmRleCk7CiAKIAlpZiAoc2sgPT0gTlVMTCkgewpAQCAtNDU1LDggKzQ1Myw3IEBACiB9CiAKIAotc3RhdGljIGludCB0Y3BfdjZfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCitzdGF0aWMgaW50IHRjcF92Nl9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKIAlzdHJ1Y3QgaW5ldDZfcmVxdWVzdF9zb2NrICp0cmVxID0gaW5ldDZfcnNrKHJlcSk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwpAQCAtNDY0LDYgKzQ2MSw3IEBACiAJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQgPSBOVUxMOwogCXN0cnVjdCBpbjZfYWRkciAqIGZpbmFsX3AgPSBOVUxMLCBmaW5hbDsKIAlzdHJ1Y3QgZmxvd2kgZmw7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBlcnIgPSAtMTsKIAogCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwpAQCAtNDc2LDI0ICs0NzQsMjIgQEAKIAlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKIAlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsICZmbCk7CiAKLQlpZiAoZHN0ID09IE5VTEwpIHsKLQkJb3B0ID0gbnAtPm9wdDsKLQkJaWYgKG9wdCAmJiBvcHQtPnNyY3J0KSB7Ci0JCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopIG9wdC0+c3JjcnQ7Ci0JCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOwotCQkJZmluYWxfcCA9ICZmaW5hbDsKLQkJfQotCi0JCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOwotCQlpZiAoZXJyKQotCQkJZ290byBkb25lOwotCQlpZiAoZmluYWxfcCkKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBmaW5hbF9wKTsKLQkJaWYgKChlcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKQotCQkJZ290byBkb25lOworCW9wdCA9IG5wLT5vcHQ7CisJaWYgKG9wdCAmJiBvcHQtPnNyY3J0KSB7CisJCXN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKikgb3B0LT5zcmNydDsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZpbmFsLCAmZmwuZmw2X2RzdCk7CisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOworCQlmaW5hbF9wID0gJmZpbmFsOwogCX0KIAorCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKwlpZiAoZmluYWxfcCkKKwkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGZpbmFsX3ApOworCWlmICgoZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMCkpIDwgMCkKKwkJZ290byBkb25lOworCiAJc2tiID0gdGNwX21ha2Vfc3luYWNrKHNrLCBkc3QsIHJlcSk7CiAJaWYgKHNrYikgewogCQlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKQEAgLTUxNCw2ICs1MTAsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc3luX2Zsb29kX3dhcm5pbmcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKyNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVMKKwlpZiAoc3lzY3RsX3RjcF9zeW5jb29raWVzKQorCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiVENQdjY6IFBvc3NpYmxlIFNZTiBmbG9vZGluZyBvbiBwb3J0ICVkLiAiCisJCSAgICAgICAiU2VuZGluZyBjb29raWVzLlxuIiwgbnRvaHModGNwX2hkcihza2IpLT5kZXN0KSk7CisJZWxzZQorI2VuZGlmCisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJUQ1B2NjogUG9zc2libGUgU1lOIGZsb29kaW5nIG9uIHBvcnQgJWQuICIKKwkJICAgICAgICJEcm9wcGluZyByZXF1ZXN0LlxuIiwgbnRvaHModGNwX2hkcihza2IpLT5kZXN0KSk7Cit9CisKIHN0YXRpYyB2b2lkIHRjcF92Nl9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKIAlpZiAoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpCkBAIC01MzMsNyArNTQzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNjsgaSsrKSB7Ci0JCWlmIChpcHY2X2FkZHJfY21wKCZ0cC0+bWQ1c2lnX2luZm8tPmtleXM2W2ldLmFkZHIsIGFkZHIpID09IDApCisJCWlmIChpcHY2X2FkZHJfZXF1YWwoJnRwLT5tZDVzaWdfaW5mby0+a2V5czZbaV0uYWRkciwgYWRkcikpCiAJCQlyZXR1cm4gJnRwLT5tZDVzaWdfaW5mby0+a2V5czZbaV0uYmFzZTsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC02MjIsNyArNjMyLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCB0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM2OyBpKyspIHsKLQkJaWYgKGlwdjZfYWRkcl9jbXAoJnRwLT5tZDVzaWdfaW5mby0+a2V5czZbaV0uYWRkciwgcGVlcikgPT0gMCkgeworCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZ0cC0+bWQ1c2lnX2luZm8tPmtleXM2W2ldLmFkZHIsIHBlZXIpKSB7CiAJCQkvKiBGcmVlIHRoZSBrZXkgKi8KIAkJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czZbaV0uYmFzZS5rZXkpOwogCQkJdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNi0tOwpAQCAtNzQxLDcgKzc1MSw3IEBACiAKIAlocCA9IHRjcF9nZXRfbWQ1c2lnX3Bvb2woKTsKIAlpZiAoIWhwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2ggcG9vbCBub3QgZm91bmQuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2ggcG9vbCBub3QgZm91bmQuLi5cbiIsIF9fZnVuY19fKTsKIAkJZ290byBjbGVhcl9oYXNoX25vcHV0OwogCX0KIAlicCA9ICZocC0+bWQ1X2Jsay5pcDY7CkBAIC03ODEsMTcgKzc5MSwxNyBAQAogCS8qIE5vdyBzdG9yZSB0aGUgaGFzaCBpbnRvIHRoZSBwYWNrZXQgKi8KIAllcnIgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMoKTogaGFzaF9pbml0IGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMoKTogaGFzaF9pbml0IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGNsZWFyX2hhc2g7CiAJfQogCWVyciA9IGNyeXB0b19oYXNoX3VwZGF0ZShkZXNjLCBzZywgbmJ5dGVzKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2hfdXBkYXRlIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMoKTogaGFzaF91cGRhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gY2xlYXJfaGFzaDsKIAl9CiAJZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgbWQ1X2hhc2gpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMoKTogaGFzaF9maW5hbCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2hfZmluYWwgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gY2xlYXJfaGFzaDsKIAl9CiAKQEAgLTkxNyw3ICs5MjcsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyB0Y3A2X3JlcXVlc3Rfc29ja19vcHMgX19yZWFkX21vc3RseSA9IHsKK3N0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIHRjcDZfcmVxdWVzdF9zb2NrX29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5mYW1pbHkJCT0JQUZfSU5FVDYsCiAJLm9ial9zaXplCT0Jc2l6ZW9mKHN0cnVjdCB0Y3A2X3JlcXVlc3Rfc29jayksCiAJLnJ0eF9zeW5fYWNrCT0JdGNwX3Y2X3NlbmRfc3luYWNrLApAQCAtOTc5LDYgKzk4OSw4IEBACiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYiksICp0MTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlzdHJ1Y3QgZmxvd2kgZmw7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRzdC0+ZGV2KTsKKwlzdHJ1Y3Qgc29jayAqY3RsX3NrID0gbmV0LT5pcHY2LnRjcF9zazsKIAl1bnNpZ25lZCBpbnQgdG90X2xlbiA9IHNpemVvZigqdGgpOwogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CkBAIC0xMDU5LDExICsxMDcxLDE0IEBACiAJZmwuZmxfaXBfc3BvcnQgPSB0MS0+c291cmNlOwogCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYiwgJmZsKTsKIAotCS8qIHNrID0gTlVMTCwgYnV0IGl0IGlzIHNhZmUgZm9yIG5vdy4gUlNUIHNvY2tldCByZXF1aXJlZC4gKi8KLQlpZiAoIWlwNl9kc3RfbG9va3VwKE5VTEwsICZidWZmLT5kc3QsICZmbCkpIHsKKwkvKiBQYXNzIGEgc29ja2V0IHRvIGlwNl9kc3RfbG9va3VwIGVpdGhlciBpdCBpcyBmb3IgUlNUCisJICogVW5kZXJseWluZyBmdW5jdGlvbiB3aWxsIHVzZSB0aGlzIHRvIHJldHJpZXZlIHRoZSBuZXR3b3JrCisJICogbmFtZXNwYWNlCisJICovCisJaWYgKCFpcDZfZHN0X2xvb2t1cChjdGxfc2ssICZidWZmLT5kc3QsICZmbCkpIHsKIAogCQlpZiAoeGZybV9sb29rdXAoJmJ1ZmYtPmRzdCwgJmZsLCBOVUxMLCAwKSA+PSAwKSB7Ci0JCQlpcDZfeG1pdCh0Y3A2X3NvY2tldC0+c2ssIGJ1ZmYsICZmbCwgTlVMTCwgMCk7CisJCQlpcDZfeG1pdChjdGxfc2ssIGJ1ZmYsICZmbCwgTlVMTCwgMCk7CiAJCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfT1VUU0VHUyk7CiAJCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfT1VUUlNUUyk7CiAJCQlyZXR1cm47CkBAIC0xMDc5LDYgKzEwOTQsOCBAQAogCXN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpLCAqdDE7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZmY7CiAJc3RydWN0IGZsb3dpIGZsOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOworCXN0cnVjdCBzb2NrICpjdGxfc2sgPSBuZXQtPmlwdjYudGNwX3NrOwogCXVuc2lnbmVkIGludCB0b3RfbGVuID0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCV9fYmUzMiAqdG9wdDsKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwpAQCAtMTE2MCw5ICsxMTc3LDkgQEAKIAlmbC5mbF9pcF9zcG9ydCA9IHQxLT5zb3VyY2U7CiAJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCAmZmwpOwogCi0JaWYgKCFpcDZfZHN0X2xvb2t1cChOVUxMLCAmYnVmZi0+ZHN0LCAmZmwpKSB7CisJaWYgKCFpcDZfZHN0X2xvb2t1cChjdGxfc2ssICZidWZmLT5kc3QsICZmbCkpIHsKIAkJaWYgKHhmcm1fbG9va3VwKCZidWZmLT5kc3QsICZmbCwgTlVMTCwgMCkgPj0gMCkgewotCQkJaXA2X3htaXQodGNwNl9zb2NrZXQtPnNrLCBidWZmLCAmZmwsIE5VTEwsIDApOworCQkJaXA2X3htaXQoY3RsX3NrLCBidWZmLCAmZmwsIE5VTEwsIDApOwogCQkJVENQX0lOQ19TVEFUU19CSChUQ1BfTUlCX09VVFNFR1MpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xMjAyLDcgKzEyMTksNyBAQAogCWlmIChyZXEpCiAJCXJldHVybiB0Y3BfY2hlY2tfcmVxKHNrLCBza2IsIHJlcSwgcHJldik7CiAKLQluc2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChzay0+c2tfbmV0LCAmdGNwX2hhc2hpbmZvLAorCW5zayA9IF9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKHNvY2tfbmV0KHNrKSwgJnRjcF9oYXNoaW5mbywKIAkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgdGgtPnNvdXJjZSwKIAkJCSZpcHY2X2hkcihza2IpLT5kYWRkciwgbnRvaHModGgtPmRlc3QpLCBpbmV0Nl9paWYoc2tiKSk7CiAKQEAgLTEyMTUsOSArMTIzMiw5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotI2lmIDAgLypkZWYgQ09ORklHX1NZTl9DT09LSUVTKi8KKyNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVMKIAlpZiAoIXRoLT5yc3QgJiYgIXRoLT5zeW4gJiYgdGgtPmFjaykKLQkJc2sgPSBjb29raWVfdjZfY2hlY2soc2ssIHNrYiwgJihJUENCKHNrYiktPm9wdCkpOworCQlzayA9IGNvb2tpZV92Nl9jaGVjayhzaywgc2tiKTsKICNlbmRpZgogCXJldHVybiBzazsKIH0KQEAgLTEyMzMsNiArMTI1MCwxMSBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IE5VTEw7CiAJX191MzIgaXNuID0gVENQX1NLQl9DQihza2IpLT53aGVuOworI2lmZGVmIENPTkZJR19TWU5fQ09PS0lFUworCWludCB3YW50X2Nvb2tpZSA9IDA7CisjZWxzZQorI2RlZmluZSB3YW50X2Nvb2tpZSAwCisjZW5kaWYKIAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJcmV0dXJuIHRjcF92NF9jb25uX3JlcXVlc3Qoc2ssIHNrYik7CkBAIC0xMjQwLDEyICsxMjYyLDE0IEBACiAJaWYgKCFpcHY2X3VuaWNhc3RfZGVzdGluYXRpb24oc2tiKSkKIAkJZ290byBkcm9wOwogCi0JLyoKLQkgKglUaGVyZSBhcmUgbm8gU1lOIGF0dGFja3Mgb24gSVB2NiwgeWV0Li4uCi0JICovCiAJaWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2lzX2Z1bGwoc2spICYmICFpc24pIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIlRDUHY2OiBkcm9wcGluZyByZXF1ZXN0LCBzeW5mbG9vZCBpcyBwb3NzaWJsZVxuIik7CisJCQlzeW5fZmxvb2Rfd2FybmluZyhza2IpOworI2lmZGVmIENPTkZJR19TWU5fQ09PS0lFUworCQlpZiAoc3lzY3RsX3RjcF9zeW5jb29raWVzKQorCQkJd2FudF9jb29raWUgPSAxOworCQllbHNlCisjZW5kaWYKIAkJZ290byBkcm9wOwogCX0KIApAQCAtMTI2NiwzOSArMTI5MCw1MCBAQAogCiAJdGNwX3BhcnNlX29wdGlvbnMoc2tiLCAmdG1wX29wdCwgMCk7CiAKKwlpZiAod2FudF9jb29raWUgJiYgIXRtcF9vcHQuc2F3X3RzdGFtcCkKKwkJdGNwX2NsZWFyX29wdGlvbnMoJnRtcF9vcHQpOworCiAJdG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7CiAJdGNwX29wZW5yZXFfaW5pdChyZXEsICZ0bXBfb3B0LCBza2IpOwogCiAJdHJlcSA9IGluZXQ2X3JzayhyZXEpOwogCWlwdjZfYWRkcl9jb3B5KCZ0cmVxLT5ybXRfYWRkciwgJmlwdjZfaGRyKHNrYiktPnNhZGRyKTsKIAlpcHY2X2FkZHJfY29weSgmdHJlcS0+bG9jX2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkcik7Ci0JVENQX0VDTl9jcmVhdGVfcmVxdWVzdChyZXEsIHRjcF9oZHIoc2tiKSk7CiAJdHJlcS0+cGt0b3B0cyA9IE5VTEw7Ci0JaWYgKGlwdjZfb3B0X2FjY2VwdGVkKHNrLCBza2IpIHx8Ci0JICAgIG5wLT5yeG9wdC5iaXRzLnJ4aW5mbyB8fCBucC0+cnhvcHQuYml0cy5yeG9pbmZvIHx8Ci0JICAgIG5wLT5yeG9wdC5iaXRzLnJ4aGxpbSB8fCBucC0+cnhvcHQuYml0cy5yeG9obGltKSB7Ci0JCWF0b21pY19pbmMoJnNrYi0+dXNlcnMpOwotCQl0cmVxLT5wa3RvcHRzID0gc2tiOwotCX0KLQl0cmVxLT5paWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWlmICghd2FudF9jb29raWUpCisJCVRDUF9FQ05fY3JlYXRlX3JlcXVlc3QocmVxLCB0Y3BfaGRyKHNrYikpOwogCi0JLyogU28gdGhhdCBsaW5rIGxvY2FscyBoYXZlIG1lYW5pbmcgKi8KLQlpZiAoIXNrLT5za19ib3VuZF9kZXZfaWYgJiYKLQkgICAgaXB2Nl9hZGRyX3R5cGUoJnRyZXEtPnJtdF9hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpCi0JCXRyZXEtPmlpZiA9IGluZXQ2X2lpZihza2IpOworCWlmICh3YW50X2Nvb2tpZSkgeworCQlpc24gPSBjb29raWVfdjZfaW5pdF9zZXF1ZW5jZShzaywgc2tiLCAmcmVxLT5tc3MpOworCQlyZXEtPmNvb2tpZV90cyA9IHRtcF9vcHQudHN0YW1wX29rOworCX0gZWxzZSBpZiAoIWlzbikgeworCQlpZiAoaXB2Nl9vcHRfYWNjZXB0ZWQoc2ssIHNrYikgfHwKKwkJICAgIG5wLT5yeG9wdC5iaXRzLnJ4aW5mbyB8fCBucC0+cnhvcHQuYml0cy5yeG9pbmZvIHx8CisJCSAgICBucC0+cnhvcHQuYml0cy5yeGhsaW0gfHwgbnAtPnJ4b3B0LmJpdHMucnhvaGxpbSkgeworCQkJYXRvbWljX2luYygmc2tiLT51c2Vycyk7CisJCQl0cmVxLT5wa3RvcHRzID0gc2tiOworCQl9CisJCXRyZXEtPmlpZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAKLQlpZiAoaXNuID09IDApCisJCS8qIFNvIHRoYXQgbGluayBsb2NhbHMgaGF2ZSBtZWFuaW5nICovCisJCWlmICghc2stPnNrX2JvdW5kX2Rldl9pZiAmJgorCQkgICAgaXB2Nl9hZGRyX3R5cGUoJnRyZXEtPnJtdF9hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpCisJCQl0cmVxLT5paWYgPSBpbmV0Nl9paWYoc2tiKTsKKwogCQlpc24gPSB0Y3BfdjZfaW5pdF9zZXF1ZW5jZShza2IpOworCX0KIAogCXRjcF9yc2socmVxKS0+c250X2lzbiA9IGlzbjsKIAogCXNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSk7CiAKLQlpZiAodGNwX3Y2X3NlbmRfc3luYWNrKHNrLCByZXEsIE5VTEwpKQorCWlmICh0Y3BfdjZfc2VuZF9zeW5hY2soc2ssIHJlcSkpCiAJCWdvdG8gZHJvcDsKIAotCWluZXQ2X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxLCBUQ1BfVElNRU9VVF9JTklUKTsKLQlyZXR1cm4gMDsKKwlpZiAoIXdhbnRfY29va2llKSB7CisJCWluZXQ2X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxLCBUQ1BfVElNRU9VVF9JTklUKTsKKwkJcmV0dXJuIDA7CisJfQogCiBkcm9wOgogCWlmIChyZXEpCkBAIC0xNDk5LDcgKzE1MzQsNyBAQAogI2VuZGlmCiAKIAlfX2luZXQ2X2hhc2gobmV3c2spOwotCWluZXRfaW5oZXJpdF9wb3J0KHNrLCBuZXdzayk7CisJX19pbmV0X2luaGVyaXRfcG9ydChzaywgbmV3c2spOwogCiAJcmV0dXJuIG5ld3NrOwogCkBAIC0xNzA0LDcgKzE3MzksNyBAQAogCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgPSBpcHY2X2dldF9kc2ZpZWxkKGlwdjZfaGRyKHNrYikpOwogCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkID0gMDsKIAotCXNrID0gX19pbmV0Nl9sb29rdXAoc2tiLT5kZXYtPm5kX25ldCwgJnRjcF9oYXNoaW5mbywKKwlzayA9IF9faW5ldDZfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCAmdGNwX2hhc2hpbmZvLAogCQkJJmlwdjZfaGRyKHNrYiktPnNhZGRyLCB0aC0+c291cmNlLAogCQkJJmlwdjZfaGRyKHNrYiktPmRhZGRyLCBudG9ocyh0aC0+ZGVzdCksCiAJCQlpbmV0Nl9paWYoc2tiKSk7CkBAIC0xNzg3LDcgKzE4MjIsNyBAQAogCXsKIAkJc3RydWN0IHNvY2sgKnNrMjsKIAotCQlzazIgPSBpbmV0Nl9sb29rdXBfbGlzdGVuZXIoc2tiLT5kZXYtPm5kX25ldCwgJnRjcF9oYXNoaW5mbywKKwkJc2syID0gaW5ldDZfbG9va3VwX2xpc3RlbmVyKGRldl9uZXQoc2tiLT5kZXYpLCAmdGNwX2hhc2hpbmZvLAogCQkJCQkgICAgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAogCQkJCQkgICAgbnRvaHModGgtPmRlc3QpLCBpbmV0Nl9paWYoc2tiKSk7CiAJCWlmIChzazIgIT0gTlVMTCkgewpAQCAtMjA4NSwyOCArMjEyMCwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0Y3A2X3NlcV9mb3BzOwogc3RhdGljIHN0cnVjdCB0Y3Bfc2VxX2FmaW5mbyB0Y3A2X3NlcV9hZmluZm8gPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJ0Y3A2IiwKIAkuZmFtaWx5CQk9IEFGX0lORVQ2LAotCS5zZXFfc2hvdwk9IHRjcDZfc2VxX3Nob3csCi0JLnNlcV9mb3BzCT0gJnRjcDZfc2VxX2ZvcHMsCisJLnNlcV9mb3BzCT0geworCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc2VxX29wcwk9IHsKKwkJLnNob3cJCT0gdGNwNl9zZXFfc2hvdywKKwl9LAogfTsKIAotaW50IF9faW5pdCB0Y3A2X3Byb2NfaW5pdCh2b2lkKQoraW50IHRjcDZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlyZXR1cm4gdGNwX3Byb2NfcmVnaXN0ZXIoJnRjcDZfc2VxX2FmaW5mbyk7CisJcmV0dXJuIHRjcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnRjcDZfc2VxX2FmaW5mbyk7CiB9CiAKLXZvaWQgdGNwNl9wcm9jX2V4aXQodm9pZCkKK3ZvaWQgdGNwNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCXRjcF9wcm9jX3VucmVnaXN0ZXIoJnRjcDZfc2VxX2FmaW5mbyk7CisJdGNwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ0Y3A2X3NlcV9hZmluZm8pOwogfQogI2VuZGlmCiAKLURFRklORV9QUk9UT19JTlVTRSh0Y3B2NikKLQogc3RydWN0IHByb3RvIHRjcHY2X3Byb3QgPSB7CiAJLm5hbWUJCQk9ICJUQ1B2NiIsCiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKQEAgLTIxMzcsMTIgKzIxNzIsMTEgQEAKIAkub2JqX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCB0Y3A2X3NvY2spLAogCS50d3NrX3Byb3QJCT0gJnRjcDZfdGltZXdhaXRfc29ja19vcHMsCiAJLnJza19wcm90CQk9ICZ0Y3A2X3JlcXVlc3Rfc29ja19vcHMsCi0JLmhhc2hpbmZvCQk9ICZ0Y3BfaGFzaGluZm8sCisJLmguaGFzaGluZm8JCT0gJnRjcF9oYXNoaW5mbywKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0CT0gY29tcGF0X3RjcF9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdAk9IGNvbXBhdF90Y3BfZ2V0c29ja29wdCwKICNlbmRpZgotCVJFRl9QUk9UT19JTlVTRSh0Y3B2NikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgdGNwdjZfcHJvdG9jb2wgPSB7CkBAIC0yMTY0LDYgKzIxOTgsMjIgQEAKIAkJCQlJTkVUX1BST1RPU1dfSUNTSywKIH07CiAKK3N0YXRpYyBpbnQgdGNwdjZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBpbmV0X2N0bF9zb2NrX2NyZWF0ZSgmbmV0LT5pcHY2LnRjcF9zaywgUEZfSU5FVDYsCisJCQkJICAgIFNPQ0tfUkFXLCBJUFBST1RPX1RDUCwgbmV0KTsKK30KKworc3RhdGljIHZvaWQgdGNwdjZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjYudGNwX3NrKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB0Y3B2Nl9uZXRfb3BzID0geworCS5pbml0ID0gdGNwdjZfbmV0X2luaXQsCisJLmV4aXQgPSB0Y3B2Nl9uZXRfZXhpdCwKK307CisKIGludCBfX2luaXQgdGNwdjZfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0yMTc3LDggKzIyMjcsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3RjcHY2X3Byb3RvY29sOwogCi0JcmV0ID0gaW5ldF9jc2tfY3RsX3NvY2tfY3JlYXRlKCZ0Y3A2X3NvY2tldCwgUEZfSU5FVDYsCi0JCQkJICAgICAgIFNPQ0tfUkFXLCBJUFBST1RPX1RDUCk7CisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdGNwdjZfbmV0X29wcyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdGNwdjZfcHJvdG9zdzsKIG91dDoKQEAgLTIxOTMsNyArMjI0Miw3IEBACiAKIHZvaWQgdGNwdjZfZXhpdCh2b2lkKQogewotCXNvY2tfcmVsZWFzZSh0Y3A2X3NvY2tldCk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ0Y3B2Nl9uZXRfb3BzKTsKIAlpbmV0Nl91bnJlZ2lzdGVyX3Byb3Rvc3coJnRjcHY2X3Byb3Rvc3cpOwogCWluZXQ2X2RlbF9wcm90b2NvbCgmdGNwdjZfcHJvdG9jb2wsIElQUFJPVE9fVENQKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggNTM3MzlkZS4uMWZkNzg0ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTUxLDkgKzUxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgInVkcF9pbXBsLmgiCiAKLXN0YXRpYyBpbmxpbmUgaW50IHVkcF92Nl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCitpbnQgdWRwX3Y2X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSkKIHsKLQlyZXR1cm4gdWRwX2dldF9wb3J0KHNrLCBzbnVtLCBpcHY2X3Jjdl9zYWRkcl9lcXVhbCk7CisJcmV0dXJuIHVkcF9saWJfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjZfcmN2X3NhZGRyX2VxdWFsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NrICpfX3VkcDZfbGliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCkBAIC03MCw3ICs3MCw3IEBACiAJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZ1ZHB0YWJsZVtobnVtICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSkgewogCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAKLQkJaWYgKHNrLT5za19uZXQgPT0gbmV0ICYmIHNrLT5za19oYXNoID09IGhudW0gJiYKKwkJaWYgKG5ldF9lcShzb2NrX25ldChzayksIG5ldCkgJiYgc2stPnNrX2hhc2ggPT0gaG51bSAmJgogCQkJCXNrLT5za19mYW1pbHkgPT0gUEZfSU5FVDYpIHsKIAkJCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAkJCWludCBzY29yZSA9IDA7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGVycjsKIAotCXNrID0gX191ZHA2X2xpYl9sb29rdXAoc2tiLT5kZXYtPm5kX25ldCwgZGFkZHIsIHVoLT5kZXN0LAorCXNrID0gX191ZHA2X2xpYl9sb29rdXAoZGV2X25ldChza2ItPmRldiksIGRhZGRyLCB1aC0+ZGVzdCwKIAkJCSAgICAgICBzYWRkciwgdWgtPnNvdXJjZSwgaW5ldDZfaWlmKHNrYiksIHVkcHRhYmxlKTsKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMzIzLDYgKzMyMyw5IEBACiAJc2tfZm9yX2VhY2hfZnJvbShzLCBub2RlKSB7CiAJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHMpOwogCisJCWlmIChzb2NrX25ldChzKSAhPSBzb2NrX25ldChzaykpCisJCQljb250aW51ZTsKKwogCQlpZiAocy0+c2tfaGFzaCA9PSBudW0gJiYgcy0+c2tfZmFtaWx5ID09IFBGX0lORVQ2KSB7CiAJCQlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzKTsKIAkJCWlmIChpbmV0LT5kcG9ydCkgewpAQCAtNDgwLDcgKzQ4Myw3IEBACiAJICogY2hlY2sgc29ja2V0IGNhY2hlIC4uLiBtdXN0IHRhbGsgdG8gQWxhbiBhYm91dCBoaXMgcGxhbnMKIAkgKiBmb3Igc29jayBjYWNoZXMuLi4gaSdsbCBza2lwIHRoaXMgZm9yIG5vdy4KIAkgKi8KLQlzayA9IF9fdWRwNl9saWJfbG9va3VwKHNrYi0+ZGV2LT5uZF9uZXQsIHNhZGRyLCB1aC0+c291cmNlLAorCXNrID0gX191ZHA2X2xpYl9sb29rdXAoZGV2X25ldChza2ItPmRldiksIHNhZGRyLCB1aC0+c291cmNlLAogCQkJICAgICAgIGRhZGRyLCB1aC0+ZGVzdCwgaW5ldDZfaWlmKHNrYiksIHVkcHRhYmxlKTsKIAogCWlmIChzayA9PSBOVUxMKSB7CkBAIC03NDksNyArNzUyLDEwIEBACiAJb3B0ID0gaXB2Nl9maXh1cF9vcHRpb25zKCZvcHRfc3BhY2UsIG9wdCk7CiAKIAlmbC5wcm90byA9IHNrLT5za19wcm90b2NvbDsKLQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZGFkZHIpOworCWlmICghaXB2Nl9hZGRyX2FueShkYWRkcikpCisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBkYWRkcik7CisJZWxzZQorCQlmbC5mbDZfZHN0LnM2X2FkZHJbMTVdID0gMHgxOyAvKiA6OiBtZWFucyBsb29wYmFjayAoQlNEJ2lzbSkgKi8KIAlpZiAoaXB2Nl9hZGRyX2FueSgmZmwuZmw2X3NyYykgJiYgIWlwdjZfYWRkcl9hbnkoJm5wLT5zYWRkcikpCiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmbnAtPnNhZGRyKTsKIAlmbC5mbF9pcF9zcG9ydCA9IGluZXQtPnNwb3J0OwpAQCAtNzg5LDkgKzc5NSw3IEBACiAJCWVsc2UKIAkJCWhsaW1pdCA9IG5wLT5ob3BfbGltaXQ7CiAJCWlmIChobGltaXQgPCAwKQotCQkJaGxpbWl0ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfSE9QTElNSVQpOwotCQlpZiAoaGxpbWl0IDwgMCkKLQkJCWhsaW1pdCA9IGlwdjZfZ2V0X2hvcGxpbWl0KGRzdC0+ZGV2KTsKKwkJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAl9CiAKIAlpZiAodGNsYXNzIDwgMCkgewpAQCAtOTc2LDMwICs5ODAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRwNl9zZXFfZm9wczsKIHN0YXRpYyBzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gdWRwNl9zZXFfYWZpbmZvID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidWRwNiIsCiAJLmZhbWlseQkJPSBBRl9JTkVUNiwKIAkuaGFzaHRhYmxlCT0gdWRwX2hhc2gsCi0JLnNlcV9zaG93CT0gdWRwNl9zZXFfc2hvdywKLQkuc2VxX2ZvcHMJPSAmdWRwNl9zZXFfZm9wcywKKwkuc2VxX2ZvcHMJPSB7CisJCS5vd25lcgk9CVRISVNfTU9EVUxFLAorCX0sCisJLnNlcV9vcHMJPSB7CisJCS5zaG93CQk9IHVkcDZfc2VxX3Nob3csCisJfSwKIH07CiAKLWludCBfX2luaXQgdWRwNl9wcm9jX2luaXQodm9pZCkKK2ludCB1ZHA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JcmV0dXJuIHVkcF9wcm9jX3JlZ2lzdGVyKCZ1ZHA2X3NlcV9hZmluZm8pOworCXJldHVybiB1ZHBfcHJvY19yZWdpc3RlcihuZXQsICZ1ZHA2X3NlcV9hZmluZm8pOwogfQogCi12b2lkIHVkcDZfcHJvY19leGl0KHZvaWQpIHsKLQl1ZHBfcHJvY191bnJlZ2lzdGVyKCZ1ZHA2X3NlcV9hZmluZm8pOwordm9pZCB1ZHA2X3Byb2NfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpIHsKKwl1ZHBfcHJvY191bnJlZ2lzdGVyKG5ldCwgJnVkcDZfc2VxX2FmaW5mbyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLURFRklORV9QUk9UT19JTlVTRSh1ZHB2NikKLQogc3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIlVEUHY2IiwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC0xMDIxLDExICsxMDI1LDExIEBACiAJLnN5c2N0bF93bWVtCSAgID0gJnN5c2N0bF91ZHBfd21lbV9taW4sCiAJLnN5c2N0bF9ybWVtCSAgID0gJnN5c2N0bF91ZHBfcm1lbV9taW4sCiAJLm9ial9zaXplCSAgID0gc2l6ZW9mKHN0cnVjdCB1ZHA2X3NvY2spLAorCS5oLnVkcF9oYXNoCSAgID0gdWRwX2hhc2gsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF91ZHB2Nl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF91ZHB2Nl9nZXRzb2Nrb3B0LAogI2VuZGlmCi0JUkVGX1BST1RPX0lOVVNFKHVkcHY2KQogfTsKIAogc3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgdWRwdjZfcHJvdG9zdyA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcF9pbXBsLmggYi9uZXQvaXB2Ni91ZHBfaW1wbC5oCmluZGV4IDIxYmUzYTguLjMyMWI4MWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcF9pbXBsLmgKKysrIGIvbmV0L2lwdjYvdWRwX2ltcGwuaApAQCAtMTEsNiArMTEsOCBAQAogZXh0ZXJuIHZvaWQgCV9fdWRwNl9saWJfZXJyKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqLAogCQkJICAgICAgIGludCAsIGludCAsIGludCAsIF9fYmUzMiAsIHN0cnVjdCBobGlzdF9oZWFkIFtdKTsKIAorZXh0ZXJuIGludAl1ZHBfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKTsKKwogZXh0ZXJuIGludAl1ZHB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQkgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKIGV4dGVybiBpbnQJdWRwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHBsaXRlLmMgYi9uZXQvaXB2Ni91ZHBsaXRlLmMKaW5kZXggODdkNDIwMi4uNDkxZWZkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwbGl0ZS5jCisrKyBiL25ldC9pcHY2L3VkcGxpdGUuYwpAQCAtMzUsMTMgKzM1LDYgQEAKIAkuZmxhZ3MJCT0JSU5FVDZfUFJPVE9fTk9QT0xJQ1l8SU5FVDZfUFJPVE9fRklOQUwsCiB9OwogCi1zdGF0aWMgaW50IHVkcGxpdGVfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQotewotCXJldHVybiB1ZHBsaXRlX2dldF9wb3J0KHNrLCBzbnVtLCBpcHY2X3Jjdl9zYWRkcl9lcXVhbCk7Ci19Ci0KLURFRklORV9QUk9UT19JTlVTRSh1ZHBsaXRldjYpCi0KIHN0cnVjdCBwcm90byB1ZHBsaXRldjZfcHJvdCA9IHsKIAkubmFtZQkJICAgPSAiVURQTElURXY2IiwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC01OCwxMyArNTEsMTMgQEAKIAkuYmFja2xvZ19yY3YJICAgPSB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiLAogCS5oYXNoCQkgICA9IHVkcF9saWJfaGFzaCwKIAkudW5oYXNoCQkgICA9IHVkcF9saWJfdW5oYXNoLAotCS5nZXRfcG9ydAkgICA9IHVkcGxpdGVfdjZfZ2V0X3BvcnQsCisJLmdldF9wb3J0CSAgID0gdWRwX3Y2X2dldF9wb3J0LAogCS5vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgdWRwNl9zb2NrKSwKKwkuaC51ZHBfaGFzaAkgICA9IHVkcGxpdGVfaGFzaCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3VkcHY2X3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3VkcHY2X2dldHNvY2tvcHQsCiAjZW5kaWYKLQlSRUZfUFJPVE9fSU5VU0UodWRwbGl0ZXY2KQogfTsKIAogc3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgdWRwbGl0ZTZfcHJvdG9zdyA9IHsKQEAgLTEwMywyMyArOTYsNDAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZHBsaXRlNl9zZXFfZm9wczsKIHN0YXRpYyBzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gdWRwbGl0ZTZfc2VxX2FmaW5mbyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInVkcGxpdGU2IiwKIAkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCS5oYXNodGFibGUJPSB1ZHBsaXRlX2hhc2gsCi0JLnNlcV9zaG93CT0gdWRwNl9zZXFfc2hvdywKLQkuc2VxX2ZvcHMJPSAmdWRwbGl0ZTZfc2VxX2ZvcHMsCisJLnNlcV9mb3BzCT0geworCQkub3duZXIJPQlUSElTX01PRFVMRSwKKwl9LAorCS5zZXFfb3BzCT0geworCQkuc2hvdwkJPSB1ZHA2X3NlcV9zaG93LAorCX0sCit9OworCitzdGF0aWMgaW50IHVkcGxpdGU2X3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiB1ZHBfcHJvY19yZWdpc3RlcihuZXQsICZ1ZHBsaXRlNl9zZXFfYWZpbmZvKTsKK30KKworc3RhdGljIHZvaWQgdWRwbGl0ZTZfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJdWRwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ1ZHBsaXRlNl9zZXFfYWZpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1ZHBsaXRlNl9uZXRfb3BzID0geworCS5pbml0ID0gdWRwbGl0ZTZfcHJvY19pbml0X25ldCwKKwkuZXhpdCA9IHVkcGxpdGU2X3Byb2NfZXhpdF9uZXQsCiB9OwogCiBpbnQgX19pbml0IHVkcGxpdGU2X3Byb2NfaW5pdCh2b2lkKQogewotCXJldHVybiB1ZHBfcHJvY19yZWdpc3RlcigmdWRwbGl0ZTZfc2VxX2FmaW5mbyk7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnVkcGxpdGU2X25ldF9vcHMpOwogfQogCiB2b2lkIHVkcGxpdGU2X3Byb2NfZXhpdCh2b2lkKQogewotCXVkcF9wcm9jX3VucmVnaXN0ZXIoJnVkcGxpdGU2X3NlcV9hZmluZm8pOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdWRwbGl0ZTZfbmV0X29wcyk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCmluZGV4IGE0NzE0ZDcuLmE3MWM3ZGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwpAQCAtNTksOSArNTksNiBAQAogCQkgICAgIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8pCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMOwotCWludCB3aWxkY2FyZCA9IDA7Ci0JeGZybV9hZGRyZXNzX3QgKnhhbnk7Ci0JaW50IG5oID0gMDsKIAlpbnQgaSA9IDA7CiAKIAkvKiBBbGxvY2F0ZSBuZXcgc2VjcGF0aCBvciBDT1cgZXhpc3Rpbmcgb25lLiAqLwpAQCAtODMsMTAgKzgwLDkgQEAKIAkJZ290byBkcm9wOwogCX0KIAotCXhhbnkgPSAoeGZybV9hZGRyZXNzX3QgKikmaW42YWRkcl9hbnk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCXhmcm1fYWRkcmVzc190ICpkc3QsICpzcmM7CisKIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJCWRzdCA9IGRhZGRyOwpAQCAtOTQsMTYgKzkwLDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJLyogbG9va3VwIHN0YXRlIHdpdGggd2lsZC1jYXJkIHNvdXJjZSBhZGRyZXNzICovCi0JCQl3aWxkY2FyZCA9IDE7CiAJCQlkc3QgPSBkYWRkcjsKLQkJCXNyYyA9IHhhbnk7CisJCQlzcmMgPSAoeGZybV9hZGRyZXNzX3QgKikmaW42YWRkcl9hbnk7CiAJCQlicmVhazsKLQkJY2FzZSAyOgogCQlkZWZhdWx0OgogCQkJLyogbG9va3VwIHN0YXRlIHdpdGggd2lsZC1jYXJkIGFkZHJlc3NlcyAqLwotCQkJd2lsZGNhcmQgPSAxOyAvKiBYWFggKi8KLQkJCWRzdCA9IHhhbnk7Ci0JCQlzcmMgPSB4YW55OworCQkJZHN0ID0gKHhmcm1fYWRkcmVzc190ICopJmluNmFkZHJfYW55OworCQkJc3JjID0gKHhmcm1fYWRkcmVzc190ICopJmluNmFkZHJfYW55OwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTEzLDM5ICsxMDYsMTkgQEAKIAogCQlzcGluX2xvY2soJngtPmxvY2spOwogCi0JCWlmICh3aWxkY2FyZCkgewotCQkJaWYgKCh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfV0lMRFJFQ1YpID09IDApIHsKLQkJCQlzcGluX3VubG9jaygmeC0+bG9jayk7Ci0JCQkJeGZybV9zdGF0ZV9wdXQoeCk7Ci0JCQkJeCA9IE5VTEw7Ci0JCQkJY29udGludWU7CisJCWlmICgoIWkgfHwgKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9XSUxEUkVDVikpICYmCisJCSAgICBsaWtlbHkoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkgJiYKKwkJICAgICF4ZnJtX3N0YXRlX2NoZWNrX2V4cGlyZSh4KSkgeworCQkJc3Bpbl91bmxvY2soJngtPmxvY2spOworCQkJaWYgKHgtPnR5cGUtPmlucHV0KHgsIHNrYikgPiAwKSB7CisJCQkJLyogZm91bmQgYSB2YWxpZCBzdGF0ZSAqLworCQkJCWJyZWFrOwogCQkJfQotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KHgtPmttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKSB7CisJCX0gZWxzZQogCQkJc3Bpbl91bmxvY2soJngtPmxvY2spOwotCQkJeGZybV9zdGF0ZV9wdXQoeCk7Ci0JCQl4ID0gTlVMTDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh4ZnJtX3N0YXRlX2NoZWNrX2V4cGlyZSh4KSkgewotCQkJc3Bpbl91bmxvY2soJngtPmxvY2spOwotCQkJeGZybV9zdGF0ZV9wdXQoeCk7Ci0JCQl4ID0gTlVMTDsKLQkJCWNvbnRpbnVlOwotCQl9CiAKLQkJc3Bpbl91bmxvY2soJngtPmxvY2spOwotCi0JCW5oID0geC0+dHlwZS0+aW5wdXQoeCwgc2tiKTsKLQkJaWYgKG5oIDw9IDApIHsKLQkJCXhmcm1fc3RhdGVfcHV0KHgpOwotCQkJeCA9IE5VTEw7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIEZvdW5kIGEgc3RhdGUgKi8KLQkJYnJlYWs7CisJCXhmcm1fc3RhdGVfcHV0KHgpOworCQl4ID0gTlVMTDsKIAl9CiAKIAlpZiAoIXgpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X21vZGVfYmVldC5jIGIvbmV0L2lwdjYveGZybTZfbW9kZV9iZWV0LmMKaW5kZXggMDUyN2QxMS4uZDZjZTQwMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfbW9kZV9iZWV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfbW9kZV9iZWV0LmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlza2ItPm1hY19oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyICsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOwogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpOworCV9fc2tiX3B1bGwoc2tiLCBYRlJNX01PREVfU0tCX0NCKHNrYiktPmlobCk7CiAKIAl4ZnJtNl9iZWV0X21ha2VfaGVhZGVyKHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCmluZGV4IDBjNzQyZmEuLmUyMDUyOWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYwpAQCAtNDUsNyArNDUsNyBAQAogCiAJbWVtY3B5KHRvcF9pcGgtPmZsb3dfbGJsLCBYRlJNX01PREVfU0tCX0NCKHNrYiktPmZsb3dfbGJsLAogCSAgICAgICBzaXplb2YodG9wX2lwaC0+Zmxvd19sYmwpKTsKLQl0b3BfaXBoLT5uZXh0aGRyID0geC0+aW5uZXJfbW9kZS0+YWZpbmZvLT5wcm90bzsKKwl0b3BfaXBoLT5uZXh0aGRyID0geGZybV9hZjJwcm90byhza2ItPmRzdC0+b3BzLT5mYW1pbHkpOwogCiAJZHNmaWVsZCA9IFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+dG9zOwogCWRzZmllbGQgPSBJTkVUX0VDTl9lbmNhcHN1bGF0ZShkc2ZpZWxkLCBkc2ZpZWxkKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggNzljY2ZiMC4uMGFmODIzY2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jCisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCkBAIC02Miw3ICs2Miw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHgtPmlubmVyX21vZGUtPmFmaW5mby0+ZXh0cmFjdF9vdXRwdXQoeCwgc2tiKTsKKwllcnIgPSB4ZnJtX2lubmVyX2V4dHJhY3Rfb3V0cHV0KHgsIHNrYik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCA3ZDIwMTk5Li44ZjFlMDU0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMzgsNyArMzgsNyBAQAogCWlmIChzYWRkcikKIAkJbWVtY3B5KCZmbC5mbDZfc3JjLCBzYWRkciwgc2l6ZW9mKGZsLmZsNl9zcmMpKTsKIAotCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoTlVMTCwgJmZsKTsKKwlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgTlVMTCwgJmZsKTsKIAogCWVyciA9IGRzdC0+ZXJyb3I7CiAJaWYgKGRzdC0+ZXJyb3IpIHsKQEAgLTU3LDggKzU3LDkgQEAKIAlpZiAoSVNfRVJSKGRzdCkpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCi0JaXB2Nl9nZXRfc2FkZHIoZHN0LCAoc3RydWN0IGluNl9hZGRyICopJmRhZGRyLT5hNiwKLQkJICAgICAgIChzdHJ1Y3QgaW42X2FkZHIgKikmc2FkZHItPmE2KTsKKwlpcHY2X2Rldl9nZXRfc2FkZHIoaXA2X2RzdF9pZGV2KGRzdCktPmRldiwKKwkJCSAgIChzdHJ1Y3QgaW42X2FkZHIgKikmZGFkZHItPmE2LCAwLAorCQkJICAgKHN0cnVjdCBpbjZfYWRkciAqKSZzYWRkci0+YTYpOwogCWRzdF9yZWxlYXNlKGRzdCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDYsNyArMjQ3LDcgQEAKIAl4ZHN0ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDsKIAlpZiAoeGRzdC0+dS5ydDYucnQ2aV9pZGV2LT5kZXYgPT0gZGV2KSB7CiAJCXN0cnVjdCBpbmV0Nl9kZXYgKmxvb3BiYWNrX2lkZXYgPQotCQkJaW42X2Rldl9nZXQoZGV2LT5uZF9uZXQtPmxvb3BiYWNrX2Rldik7CisJCQlpbjZfZGV2X2dldChkZXZfbmV0KGRldiktPmxvb3BiYWNrX2Rldik7CiAJCUJVR19PTighbG9vcGJhY2tfaWRldik7CiAKIAkJZG8gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfc3RhdGUuYyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKaW5kZXggZGM4MTdlMC4uODk4ODRhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfc3RhdGUuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCkBAIC00OSwxMzUgKzQ5LDExNCBAQAogCXgtPnByb3BzLmZhbWlseSA9IEFGX0lORVQ2OwogfQogCisvKiBkaXN0cmlidXRpb24gY291bnRpbmcgc29ydCBmdW5jdGlvbiBmb3IgeGZybV9zdGF0ZSBhbmQgeGZybV90bXBsICovCitzdGF0aWMgaW50CitfX3hmcm02X3NvcnQodm9pZCAqKmRzdCwgdm9pZCAqKnNyYywgaW50IG4sIGludCAoKmNtcCkodm9pZCAqcCksIGludCBtYXhjbGFzcykKK3sKKwlpbnQgaTsKKwlpbnQgY2xhc3NbWEZSTV9NQVhfREVQVEhdOworCWludCBjb3VudFttYXhjbGFzc107CisKKwltZW1zZXQoY291bnQsIDAsIHNpemVvZihjb3VudCkpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpbnQgYzsKKwkJY2xhc3NbaV0gPSBjID0gY21wKHNyY1tpXSk7CisJCWNvdW50W2NdKys7CisJfQorCisJZm9yIChpID0gMjsgaSA8IG1heGNsYXNzOyBpKyspCisJCWNvdW50W2ldICs9IGNvdW50W2kgLSAxXTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZHN0W2NvdW50W2NsYXNzW2ldIC0gMV0rK10gPSBzcmNbaV07CisJCXNyY1tpXSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSdWxlIGZvciB4ZnJtX3N0YXRlOgorICoKKyAqIHJ1bGUgMTogc2VsZWN0IElQc2VjIHRyYW5zcG9ydCBleGNlcHQgQUgKKyAqIHJ1bGUgMjogc2VsZWN0IE1JUHY2IFJPIG9yIGluYm91bmQgdHJpZ2dlcgorICogcnVsZSAzOiBzZWxlY3QgSVBzZWMgdHJhbnNwb3J0IEFICisgKiBydWxlIDQ6IHNlbGVjdCBJUHNlYyB0dW5uZWwKKyAqIHJ1bGUgNTogb3RoZXJzCisgKi8KK3N0YXRpYyBpbnQgX194ZnJtNl9zdGF0ZV9zb3J0X2NtcCh2b2lkICpwKQoreworCXN0cnVjdCB4ZnJtX3N0YXRlICp2ID0gcDsKKworCXN3aXRjaCAodi0+cHJvcHMubW9kZSkgeworCWNhc2UgWEZSTV9NT0RFX1RSQU5TUE9SVDoKKwkJaWYgKHYtPmlkLnByb3RvICE9IElQUFJPVE9fQUgpCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDM7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9NSVA2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01JUDZfTU9EVUxFKQorCWNhc2UgWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OOgorCWNhc2UgWEZSTV9NT0RFX0lOX1RSSUdHRVI6CisJCXJldHVybiAyOworI2VuZGlmCisJY2FzZSBYRlJNX01PREVfVFVOTkVMOgorCWNhc2UgWEZSTV9NT0RFX0JFRVQ6CisJCXJldHVybiA0OworCX0KKwlyZXR1cm4gNTsKK30KKwogc3RhdGljIGludAogX194ZnJtNl9zdGF0ZV9zb3J0KHN0cnVjdCB4ZnJtX3N0YXRlICoqZHN0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqKnNyYywgaW50IG4pCiB7Ci0JaW50IGk7Ci0JaW50IGogPSAwOworCXJldHVybiBfX3hmcm02X3NvcnQoKHZvaWQgKiopZHN0LCAodm9pZCAqKilzcmMsIG4sCisJCQkgICAgX194ZnJtNl9zdGF0ZV9zb3J0X2NtcCwgNik7Cit9CiAKLQkvKiBSdWxlIDE6IHNlbGVjdCBJUHNlYyB0cmFuc3BvcnQgZXhjZXB0IEFIICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlpZiAoc3JjW2ldLT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UUkFOU1BPUlQgJiYKLQkJICAgIHNyY1tpXS0+aWQucHJvdG8gIT0gSVBQUk9UT19BSCkgewotCQkJZHN0W2orK10gPSBzcmNbaV07Ci0JCQlzcmNbaV0gPSBOVUxMOwotCQl9Ci0JfQotCWlmIChqID09IG4pCi0JCWdvdG8gZW5kOwotCi0JLyogUnVsZSAyOiBzZWxlY3QgTUlQdjYgUk8gb3IgaW5ib3VuZCB0cmlnZ2VyICovCisvKgorICogUnVsZSBmb3IgeGZybV90bXBsOgorICoKKyAqIHJ1bGUgMTogc2VsZWN0IElQc2VjIHRyYW5zcG9ydAorICogcnVsZSAyOiBzZWxlY3QgTUlQdjYgUk8gb3IgaW5ib3VuZCB0cmlnZ2VyCisgKiBydWxlIDM6IHNlbGVjdCBJUHNlYyB0dW5uZWwKKyAqIHJ1bGUgNDogb3RoZXJzCisgKi8KK3N0YXRpYyBpbnQgX194ZnJtNl90bXBsX3NvcnRfY21wKHZvaWQgKnApCit7CisJc3RydWN0IHhmcm1fdG1wbCAqdiA9IHA7CisJc3dpdGNoICh2LT5tb2RlKSB7CisJY2FzZSBYRlJNX01PREVfVFJBTlNQT1JUOgorCQlyZXR1cm4gMTsKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X01JUDYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTUlQNl9NT0RVTEUpCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlpZiAoc3JjW2ldICYmCi0JCSAgICAoc3JjW2ldLT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiB8fAotCQkgICAgIHNyY1tpXS0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfSU5fVFJJR0dFUikpIHsKLQkJCWRzdFtqKytdID0gc3JjW2ldOwotCQkJc3JjW2ldID0gTlVMTDsKLQkJfQotCX0KLQlpZiAoaiA9PSBuKQotCQlnb3RvIGVuZDsKKwljYXNlIFhGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTjoKKwljYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOgorCQlyZXR1cm4gMjsKICNlbmRpZgotCi0JLyogUnVsZSAzOiBzZWxlY3QgSVBzZWMgdHJhbnNwb3J0IEFIICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlpZiAoc3JjW2ldICYmCi0JCSAgICBzcmNbaV0tPnByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RSQU5TUE9SVCAmJgotCQkgICAgc3JjW2ldLT5pZC5wcm90byA9PSBJUFBST1RPX0FIKSB7Ci0JCQlkc3RbaisrXSA9IHNyY1tpXTsKLQkJCXNyY1tpXSA9IE5VTEw7Ci0JCX0KKwljYXNlIFhGUk1fTU9ERV9UVU5ORUw6CisJY2FzZSBYRlJNX01PREVfQkVFVDoKKwkJcmV0dXJuIDM7CiAJfQotCWlmIChqID09IG4pCi0JCWdvdG8gZW5kOwotCi0JLyogUnVsZSA0OiBzZWxlY3QgSVBzZWMgdHVubmVsICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlpZiAoc3JjW2ldICYmCi0JCSAgICAoc3JjW2ldLT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwgfHwKLQkJICAgICBzcmNbaV0tPnByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX0JFRVQpKSB7Ci0JCQlkc3RbaisrXSA9IHNyY1tpXTsKLQkJCXNyY1tpXSA9IE5VTEw7Ci0JCX0KLQl9Ci0JaWYgKGxpa2VseShqID09IG4pKQotCQlnb3RvIGVuZDsKLQotCS8qIEZpbmFsIHJ1bGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCWlmIChzcmNbaV0pIHsKLQkJCWRzdFtqKytdID0gc3JjW2ldOwotCQkJc3JjW2ldID0gTlVMTDsKLQkJfQotCX0KLQotIGVuZDoKLQlyZXR1cm4gMDsKKwlyZXR1cm4gNDsKIH0KIAogc3RhdGljIGludAogX194ZnJtNl90bXBsX3NvcnQoc3RydWN0IHhmcm1fdG1wbCAqKmRzdCwgc3RydWN0IHhmcm1fdG1wbCAqKnNyYywgaW50IG4pCiB7Ci0JaW50IGk7Ci0JaW50IGogPSAwOwotCi0JLyogUnVsZSAxOiBzZWxlY3QgSVBzZWMgdHJhbnNwb3J0ICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlpZiAoc3JjW2ldLT5tb2RlID09IFhGUk1fTU9ERV9UUkFOU1BPUlQpIHsKLQkJCWRzdFtqKytdID0gc3JjW2ldOwotCQkJc3JjW2ldID0gTlVMTDsKLQkJfQotCX0KLQlpZiAoaiA9PSBuKQotCQlnb3RvIGVuZDsKLQotCS8qIFJ1bGUgMjogc2VsZWN0IE1JUHY2IFJPIG9yIGluYm91bmQgdHJpZ2dlciAqLwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjZfTUlQNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NSVA2X01PRFVMRSkKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCWlmIChzcmNbaV0gJiYKLQkJICAgIChzcmNbaV0tPm1vZGUgPT0gWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIHx8Ci0JCSAgICAgc3JjW2ldLT5tb2RlID09IFhGUk1fTU9ERV9JTl9UUklHR0VSKSkgewotCQkJZHN0W2orK10gPSBzcmNbaV07Ci0JCQlzcmNbaV0gPSBOVUxMOwotCQl9Ci0JfQotCWlmIChqID09IG4pCi0JCWdvdG8gZW5kOwotI2VuZGlmCi0KLQkvKiBSdWxlIDM6IHNlbGVjdCBJUHNlYyB0dW5uZWwgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCWlmIChzcmNbaV0gJiYKLQkJICAgIChzcmNbaV0tPm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCB8fAotCQkgICAgIHNyY1tpXS0+bW9kZSA9PSBYRlJNX01PREVfQkVFVCkpIHsKLQkJCWRzdFtqKytdID0gc3JjW2ldOwotCQkJc3JjW2ldID0gTlVMTDsKLQkJfQotCX0KLQlpZiAobGlrZWx5KGogPT0gbikpCi0JCWdvdG8gZW5kOwotCi0JLyogRmluYWwgcnVsZSAqLwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJaWYgKHNyY1tpXSkgewotCQkJZHN0W2orK10gPSBzcmNbaV07Ci0JCQlzcmNbaV0gPSBOVUxMOwotCQl9Ci0JfQotCi0gZW5kOgotCXJldHVybiAwOworCXJldHVybiBfX3hmcm02X3NvcnQoKHZvaWQgKiopZHN0LCAodm9pZCAqKilzcmMsIG4sCisJCQkgICAgX194ZnJtNl90bXBsX3NvcnRfY21wLCA1KTsKIH0KIAogaW50IHhmcm02X2V4dHJhY3RfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAKKwlYRlJNX01PREVfU0tCX0NCKHNrYiktPmlobCA9IHNpemVvZigqaXBoKTsKIAlYRlJNX01PREVfU0tCX0NCKHNrYiktPmlkID0gMDsKIAlYRlJNX01PREVfU0tCX0NCKHNrYiktPmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpOwogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+dG9zID0gaXB2Nl9nZXRfZHNmaWVsZChpcGgpOwogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+dHRsID0gaXBoLT5ob3BfbGltaXQ7CisJWEZSTV9NT0RFX1NLQl9DQihza2IpLT5vcHRsZW4gPSAwOwogCW1lbWNweShYRlJNX01PREVfU0tCX0NCKHNrYiktPmZsb3dfbGJsLCBpcGgtPmZsb3dfbGJsLAogCSAgICAgICBzaXplb2YoWEZSTV9NT0RFX1NLQl9DQihza2IpLT5mbG93X2xibCkpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCmluZGV4IDYzOWZlOGEuLmMyYjI3ODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCkBAIC0xNDAsMTIgKzE0MCwyNiBAQAogCiBFWFBPUlRfU1lNQk9MKHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKTsKIAorc3RhdGljIGludCBfX3hmcm02X3R1bm5lbF9zcGlfY2hlY2sodTMyIHNwaSkKK3sKKwlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CisJaW50IGluZGV4ID0geGZybTZfdHVubmVsX3NwaV9oYXNoX2J5c3BpKHNwaSk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHg2c3BpLCBwb3MsCisJCQkgICAgICZ4ZnJtNl90dW5uZWxfc3BpX2J5c3BpW2luZGV4XSwKKwkJCSAgICAgbGlzdF9ieXNwaSkgeworCQlpZiAoeDZzcGktPnNwaSA9PSBzcGkpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBpbmRleDsKK30KKwogc3RhdGljIHUzMiBfX3hmcm02X3R1bm5lbF9hbGxvY19zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKQogewogCXUzMiBzcGk7CiAJc3RydWN0IHhmcm02X3R1bm5lbF9zcGkgKng2c3BpOwotCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7Ci0JdW5zaWduZWQgaW5kZXg7CisJaW50IGluZGV4OwogCiAJaWYgKHhmcm02X3R1bm5lbF9zcGkgPCBYRlJNNl9UVU5ORUxfU1BJX01JTiB8fAogCSAgICB4ZnJtNl90dW5uZWxfc3BpID49IFhGUk02X1RVTk5FTF9TUElfTUFYKQpAQCAtMTU0LDMyICsxNjgsMTkgQEAKIAkJeGZybTZfdHVubmVsX3NwaSsrOwogCiAJZm9yIChzcGkgPSB4ZnJtNl90dW5uZWxfc3BpOyBzcGkgPD0gWEZSTTZfVFVOTkVMX1NQSV9NQVg7IHNwaSsrKSB7Ci0JCWluZGV4ID0geGZybTZfdHVubmVsX3NwaV9oYXNoX2J5c3BpKHNwaSk7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHg2c3BpLCBwb3MsCi0JCQkJICAgICAmeGZybTZfdHVubmVsX3NwaV9ieXNwaVtpbmRleF0sCi0JCQkJICAgICBsaXN0X2J5c3BpKSB7Ci0JCQlpZiAoeDZzcGktPnNwaSA9PSBzcGkpCi0JCQkJZ290byB0cnlfbmV4dF8xOwotCQl9Ci0JCXhmcm02X3R1bm5lbF9zcGkgPSBzcGk7Ci0JCWdvdG8gYWxsb2Nfc3BpOwotdHJ5X25leHRfMTo7CisJCWluZGV4ID0gX194ZnJtNl90dW5uZWxfc3BpX2NoZWNrKHNwaSk7CisJCWlmIChpbmRleCA+PSAwKQorCQkJZ290byBhbGxvY19zcGk7CiAJfQogCWZvciAoc3BpID0gWEZSTTZfVFVOTkVMX1NQSV9NSU47IHNwaSA8IHhmcm02X3R1bm5lbF9zcGk7IHNwaSsrKSB7Ci0JCWluZGV4ID0geGZybTZfdHVubmVsX3NwaV9oYXNoX2J5c3BpKHNwaSk7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHg2c3BpLCBwb3MsCi0JCQkJICAgICAmeGZybTZfdHVubmVsX3NwaV9ieXNwaVtpbmRleF0sCi0JCQkJICAgICBsaXN0X2J5c3BpKSB7Ci0JCQlpZiAoeDZzcGktPnNwaSA9PSBzcGkpCi0JCQkJZ290byB0cnlfbmV4dF8yOwotCQl9Ci0JCXhmcm02X3R1bm5lbF9zcGkgPSBzcGk7Ci0JCWdvdG8gYWxsb2Nfc3BpOwotdHJ5X25leHRfMjo7CisJCWluZGV4ID0gX194ZnJtNl90dW5uZWxfc3BpX2NoZWNrKHNwaSk7CisJCWlmIChpbmRleCA+PSAwKQorCQkJZ290byBhbGxvY19zcGk7CiAJfQogCXNwaSA9IDA7CiAJZ290byBvdXQ7CiBhbGxvY19zcGk6CisJeGZybTZfdHVubmVsX3NwaSA9IHNwaTsKIAl4NnNwaSA9IGttZW1fY2FjaGVfYWxsb2MoeGZybTZfdHVubmVsX3NwaV9rbWVtLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXg2c3BpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9pcHgvYWZfaXB4LmMgYi9uZXQvaXB4L2FmX2lweC5jCmluZGV4IGM3NmE5NTIuLjgxYWU4NzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvYWZfaXB4LmMKKysrIGIvbmV0L2lweC9hZl9pcHguYwpAQCAtMzM1LDcgKzMzNSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAlzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaSwgKnRtcDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChldmVudCAhPSBORVRERVZfRE9XTiAmJiBldmVudCAhPSBORVRERVZfVVApCkBAIC0xNjM2LDcgKzE2MzYsNyBAQAogCXUxNiBpcHhfcGt0c2l6ZTsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJZ290byBkcm9wOwogCiAJLyogTm90IG91cnMgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHgvaXB4X3Byb2MuYyBiL25ldC9pcHgvaXB4X3Byb2MuYwppbmRleCBkNDgzYTAwLi41ZWQ5N2FkIDEwMDY0NAotLS0gYS9uZXQvaXB4L2lweF9wcm9jLmMKKysrIGIvbmV0L2lweC9pcHhfcHJvYy5jCkBAIC0zNTgsMjIgKzM1OCwxOSBAQAogCiAJaWYgKCFpcHhfcHJvY19kaXIpCiAJCWdvdG8gb3V0OwotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiaW50ZXJmYWNlIiwgU19JUlVHTywgaXB4X3Byb2NfZGlyKTsKKwlwID0gcHJvY19jcmVhdGUoImludGVyZmFjZSIsIFNfSVJVR08sCisJCQlpcHhfcHJvY19kaXIsICZpcHhfc2VxX2ludGVyZmFjZV9mb3BzKTsKIAlpZiAoIXApCiAJCWdvdG8gb3V0X2ludGVyZmFjZTsKIAotCXAtPnByb2NfZm9wcyA9ICZpcHhfc2VxX2ludGVyZmFjZV9mb3BzOwotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgicm91dGUiLCBTX0lSVUdPLCBpcHhfcHJvY19kaXIpOworCXAgPSBwcm9jX2NyZWF0ZSgicm91dGUiLCBTX0lSVUdPLCBpcHhfcHJvY19kaXIsICZpcHhfc2VxX3JvdXRlX2ZvcHMpOwogCWlmICghcCkKIAkJZ290byBvdXRfcm91dGU7CiAKLQlwLT5wcm9jX2ZvcHMgPSAmaXB4X3NlcV9yb3V0ZV9mb3BzOwotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgic29ja2V0IiwgU19JUlVHTywgaXB4X3Byb2NfZGlyKTsKKwlwID0gcHJvY19jcmVhdGUoInNvY2tldCIsIFNfSVJVR08sIGlweF9wcm9jX2RpciwgJmlweF9zZXFfc29ja2V0X2ZvcHMpOwogCWlmICghcCkKIAkJZ290byBvdXRfc29ja2V0OwogCi0JcC0+cHJvY19mb3BzID0gJmlweF9zZXFfc29ja2V0X2ZvcHM7Ci0KIAlyYyA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvYWZfaXJkYS5jIGIvbmV0L2lyZGEvYWZfaXJkYS5jCmluZGV4IDI0MGIwY2IuLmFlNTRiMjAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2FmX2lyZGEuYworKysgYi9uZXQvaXJkYS9hZl9pcmRhLmMKQEAgLTg1LDE0ICs4NSwxNCBAQAogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZXJyOwogCi0JSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDMsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzZWxmID0gaW5zdGFuY2U7CiAJc2sgPSBpbnN0YW5jZTsKIAogCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKTsKIAlpZiAoZXJyKSB7Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIGVycm9yOiBubyBtb3JlIG1lbSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIGVycm9yOiBubyBtb3JlIG1lbSFcbiIsIF9fZnVuY19fKTsKIAkJc2VsZi0+cnhfZmxvdyA9IEZMT1dfU1RPUDsKIAogCQkvKiBXaGVuIHdlIHJldHVybiBlcnJvciwgVFRQIHdpbGwgbmVlZCB0byByZXF1ZXVlIHRoZSBza2IgKi8KQEAgLTExNiw3ICsxMTYsNyBAQAogCiAJc2VsZiA9IGluc3RhbmNlOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX0ZVTkNUSU9OX18sIHNlbGYpOworCUlSREFfREVCVUcoMiwgIiVzKCVwKVxuIiwgX19mdW5jX18sIHNlbGYpOwogCiAJLyogRG9uJ3QgY2FyZSBhYm91dCBpdCwgYnV0IGxldCdzIG5vdCBsZWFrIGl0ICovCiAJaWYoc2tiKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAJc2sgPSBpbnN0YW5jZTsKIAlpZiAoc2sgPT0gTlVMTCkgewogCQlJUkRBX0RFQlVHKDAsICIlcyglcCkgOiBCVUcgOiBzayBpcyBOVUxMXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBzZWxmKTsKKwkJCSAgIF9fZnVuY19fLCBzZWxmKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTgxLDcgKzE4MSw3IEBACiAKIAlzZWxmID0gaW5zdGFuY2U7CiAKLQlJUkRBX0RFQlVHKDIsICIlcyglcClcbiIsIF9fRlVOQ1RJT05fXywgc2VsZik7CisJSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX2Z1bmNfXywgc2VsZik7CiAKIAlzayA9IGluc3RhbmNlOwogCWlmIChzayA9PSBOVUxMKSB7CkBAIC0yMDMsNyArMjAzLDcgQEAKIAljYXNlIFNPQ0tfU1RSRUFNOgogCQlpZiAobWF4X3NkdV9zaXplICE9IDApIHsKIAkJCUlSREFfRVJST1IoIiVzOiBtYXhfc2R1X3NpemUgbXVzdCBiZSAwXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJCXNlbGYtPm1heF9kYXRhX3NpemUgPSBpcnR0cF9nZXRfbWF4X3NlZ19zaXplKHNlbGYtPnRzYXApOwpAQCAtMjExLDcgKzIxMSw3IEBACiAJY2FzZSBTT0NLX1NFUVBBQ0tFVDoKIAkJaWYgKG1heF9zZHVfc2l6ZSA9PSAwKSB7CiAJCQlJUkRBX0VSUk9SKCIlczogbWF4X3NkdV9zaXplIGNhbm5vdCBiZSAwXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJCXNlbGYtPm1heF9kYXRhX3NpemUgPSBtYXhfc2R1X3NpemU7CkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJc2VsZi0+bWF4X2RhdGFfc2l6ZSA9IGlydHRwX2dldF9tYXhfc2VnX3NpemUoc2VsZi0+dHNhcCk7CiAJfQogCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgbWF4X2RhdGFfc2l6ZT0lZFxuIiwgX19GVU5DVElPTl9fLAorCUlSREFfREVCVUcoMiwgIiVzKCksIG1heF9kYXRhX3NpemU9JWRcbiIsIF9fZnVuY19fLAogCQkgICBzZWxmLT5tYXhfZGF0YV9zaXplKTsKIAogCW1lbWNweSgmc2VsZi0+cW9zX3R4LCBxb3MsIHNpemVvZihzdHJ1Y3QgcW9zX2luZm8pKTsKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAJc2VsZiA9IGluc3RhbmNlOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX0ZVTkNUSU9OX18sIHNlbGYpOworCUlSREFfREVCVUcoMiwgIiVzKCVwKVxuIiwgX19mdW5jX18sIHNlbGYpOwogCiAJc2sgPSBpbnN0YW5jZTsKIAlpZiAoc2sgPT0gTlVMTCkgewpAQCAtMjY0LDcgKzI2NCw3IEBACiAJY2FzZSBTT0NLX1NUUkVBTToKIAkJaWYgKG1heF9zZHVfc2l6ZSAhPSAwKSB7CiAJCQlJUkRBX0VSUk9SKCIlczogbWF4X3NkdV9zaXplIG11c3QgYmUgMFxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0yNzMsNyArMjczLDcgQEAKIAljYXNlIFNPQ0tfU0VRUEFDS0VUOgogCQlpZiAobWF4X3NkdV9zaXplID09IDApIHsKIAkJCUlSREFfRVJST1IoIiVzOiBtYXhfc2R1X3NpemUgY2Fubm90IGJlIDBcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMjgzLDcgKzI4Myw3IEBACiAJCXNlbGYtPm1heF9kYXRhX3NpemUgPSBpcnR0cF9nZXRfbWF4X3NlZ19zaXplKHNlbGYtPnRzYXApOwogCX0KIAotCUlSREFfREVCVUcoMiwgIiVzKCksIG1heF9kYXRhX3NpemU9JWRcbiIsIF9fRlVOQ1RJT05fXywKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBtYXhfZGF0YV9zaXplPSVkXG4iLCBfX2Z1bmNfXywKIAkJICAgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7CiAKIAltZW1jcHkoJnNlbGYtPnFvc190eCwgcW9zLCBzaXplb2Yoc3RydWN0IHFvc19pbmZvKSk7CkBAIC0zMDIsMTMgKzMwMiwxMyBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXNrYiA9IGFsbG9jX3NrYihUVFBfTUFYX0hFQURFUiArIFRUUF9TQVJfSEVBREVSLAogCQkJR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUlSREFfREVCVUcoMCwgIiVzKCkgVW5hYmxlIHRvIGFsbG9jYXRlIHNrX2J1ZmYhXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzI5LDcgKzMyOSw3IEBACiAJc3RydWN0IGlyZGFfc29jayAqc2VsZjsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXNlbGYgPSBpbnN0YW5jZTsKIAlzayA9IGluc3RhbmNlOwpAQCAtMzM4LDE3ICszMzgsMTcgQEAKIAlzd2l0Y2ggKGZsb3cpIHsKIAljYXNlIEZMT1dfU1RPUDoKIAkJSVJEQV9ERUJVRygxLCAiJXMoKSwgSXJUVFAgd2FudHMgdXMgdG8gc2xvdyBkb3duXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJc2VsZi0+dHhfZmxvdyA9IGZsb3c7CiAJCWJyZWFrOwogCWNhc2UgRkxPV19TVEFSVDoKIAkJc2VsZi0+dHhfZmxvdyA9IGZsb3c7CiAJCUlSREFfREVCVUcoMSwgIiVzKCksIElyVFRQIHdhbnRzIHVzIHRvIHN0YXJ0IGFnYWluXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNrLT5za19zbGVlcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZmxvdyBjb21tYW5kIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgVW5rbm93biBmbG93IGNvbW1hbmQhXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIFVua25vd24gZmxvdyBjb21tYW5kLCBiZXR0ZXIgc3RvcCAqLwogCQlzZWxmLT50eF9mbG93ID0gZmxvdzsKIAkJYnJlYWs7CkBAIC0zNzAsMTEgKzM3MCwxMSBAQAogCiAJc2VsZiA9IChzdHJ1Y3QgaXJkYV9zb2NrICopIHByaXY7CiAJaWYgKCFzZWxmKSB7Ci0JCUlSREFfV0FSTklORygiJXM6IGxvc3QgbXlzZWxmIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9XQVJOSU5HKCIlczogbG9zdCBteXNlbGYhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlJUkRBX0RFQlVHKDIsICIlcyglcClcbiIsIF9fRlVOQ1RJT05fXywgc2VsZik7CisJSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX2Z1bmNfXywgc2VsZik7CiAKIAkvKiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIG1ha2UgYW55IG1vcmUgcXVlcmllcyAqLwogCWlyaWFwX2Nsb3NlKHNlbGYtPmlyaWFwKTsKQEAgLTM4Miw3ICszODIsNyBAQAogCiAJLyogQ2hlY2sgaWYgcmVxdWVzdCBzdWNjZWVkZWQgKi8KIAlpZiAocmVzdWx0ICE9IElBU19TVUNDRVNTKSB7Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIElBUyBxdWVyeSBmYWlsZWQhICglZClcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgSUFTIHF1ZXJ5IGZhaWxlZCEgKCVkKVxuIiwgX19mdW5jX18sCiAJCQkgICByZXN1bHQpOwogCiAJCXNlbGYtPmVycm5vID0gcmVzdWx0OwkvKiBXZSByZWFsbHkgbmVlZCBpdCBsYXRlciAqLwpAQCAtNDE1LDExICs0MTUsMTEgQEAKIHsKIAlzdHJ1Y3QgaXJkYV9zb2NrICpzZWxmOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmRhX3NvY2sgKikgcHJpdjsKIAlpZiAoIXNlbGYpIHsKLQkJSVJEQV9XQVJOSU5HKCIlczogbG9zdCBteXNlbGYhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX1dBUk5JTkcoIiVzOiBsb3N0IG15c2VsZiFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDQyLDcgKzQ0Miw3IEBACiB7CiAJc3RydWN0IGlyZGFfc29jayAqc2VsZjsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc2VsZiA9IChzdHJ1Y3QgaXJkYV9zb2NrICopIHByaXY7CiAJQlVHX09OKHNlbGYgPT0gTlVMTCk7CkBAIC00NjcsNyArNDY3LDcgQEAKIAlub3RpZnlfdCBub3RpZnk7CiAKIAlpZiAoc2VsZi0+dHNhcCkgewotCQlJUkRBX1dBUk5JTkcoIiVzOiBidXN5IVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9XQVJOSU5HKCIlczogYnVzeSFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQAogCQkJCSAgICAgJm5vdGlmeSk7CiAJaWYgKHNlbGYtPnRzYXAgPT0gTlVMTCkgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmFibGUgdG8gYWxsb2NhdGUgVFNBUCFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogUmVtZW1iZXIgd2hpY2ggVFNBUCBzZWxlY3RvciB3ZSBhY3R1YWxseSBnb3QgKi8KQEAgLTUwNyw3ICs1MDcsNyBAQAogCW5vdGlmeV90IG5vdGlmeTsKIAogCWlmIChzZWxmLT5sc2FwKSB7Ci0JCUlSREFfV0FSTklORygiJXMoKSwgYnVzeSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfV0FSTklORygiJXMoKSwgYnVzeSFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTUxOSw3ICs1MTksNyBAQAogCiAJc2VsZi0+bHNhcCA9IGlybG1wX29wZW5fbHNhcChMU0FQX0NPTk5MRVNTLCAmbm90aWZ5LCBwaWQpOwogCWlmIChzZWxmLT5sc2FwID09IE5VTEwpIHsKLQkJSVJEQV9ERUJVRyggMCwgIiVzKCksIFVuYWJsZSB0byBhbGxvY2F0ZSBMU0FQIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRyggMCwgIiVzKCksIFVuYWJsZSB0byBhbGxvY2F0ZSBMU0FQIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTU0MCwxMSArNTQwLDExIEBACiAgKi8KIHN0YXRpYyBpbnQgaXJkYV9maW5kX2xzYXBfc2VsKHN0cnVjdCBpcmRhX3NvY2sgKnNlbGYsIGNoYXIgKm5hbWUpCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoJXAsICVzKVxuIiwgX19GVU5DVElPTl9fLCBzZWxmLCBuYW1lKTsKKwlJUkRBX0RFQlVHKDIsICIlcyglcCwgJXMpXG4iLCBfX2Z1bmNfXywgc2VsZiwgbmFtZSk7CiAKIAlpZiAoc2VsZi0+aXJpYXApIHsKIAkJSVJEQV9XQVJOSU5HKCIlcygpOiBidXN5IHdpdGggYSBwcmV2aW91cyBxdWVyeVxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNTgwLDcgKzU4MCw3IEBACiAJc3dpdGNoIChzZWxmLT5pYXNfcmVzdWx0LT50eXBlKSB7CiAJY2FzZSBJQVNfSU5URUdFUjoKIAkJSVJEQV9ERUJVRyg0LCAiJXMoKSBpbnQ9JWRcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIHNlbGYtPmlhc19yZXN1bHQtPnQuaW50ZWdlcik7CisJCQkgICBfX2Z1bmNfXywgc2VsZi0+aWFzX3Jlc3VsdC0+dC5pbnRlZ2VyKTsKIAogCQlpZiAoc2VsZi0+aWFzX3Jlc3VsdC0+dC5pbnRlZ2VyICE9IC0xKQogCQkJc2VsZi0+ZHRzYXBfc2VsID0gc2VsZi0+aWFzX3Jlc3VsdC0+dC5pbnRlZ2VyOwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNlbGYtPmR0c2FwX3NlbCA9IDA7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIGJhZCB0eXBlIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgYmFkIHR5cGUhXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCX0KIAlpZiAoc2VsZi0+aWFzX3Jlc3VsdCkKQEAgLTYyNyw3ICs2MjcsNyBAQAogCV9fdTMyCWRhZGRyID0gREVWX0FERFJfQU5ZOwkvKiBBZGRyZXNzIHdlIGZvdW5kIHRoZSBzZXJ2aWNlIG9uICovCiAJX191OAlkdHNhcF9zZWwgPSAweDA7CS8qIFRTQVAgYXNzb2NpYXRlZCB3aXRoIGl0ICovCiAKLQlJUkRBX0RFQlVHKDIsICIlcygpLCBuYW1lPSVzXG4iLCBfX0ZVTkNUSU9OX18sIG5hbWUpOworCUlSREFfREVCVUcoMiwgIiVzKCksIG5hbWU9JXNcbiIsIF9fZnVuY19fLCBuYW1lKTsKIAogCS8qIEFzayBsbXAgZm9yIHRoZSBjdXJyZW50IGRpc2NvdmVyeSBsb2cKIAkgKiBOb3RlIDogd2UgaGF2ZSB0byB1c2UgaXJsbXBfZ2V0X2Rpc2NvdmVyaWVzKCksIGFzIG9wcG9zZWQKQEAgLTY0OSw3ICs2NDksNyBAQAogCQlzZWxmLT5kYWRkciA9IGRpc2NvdmVyaWVzW2ldLmRhZGRyOwogCQlzZWxmLT5zYWRkciA9IDB4MDsKIAkJSVJEQV9ERUJVRygxLCAiJXMoKSwgdHJ5aW5nIGRhZGRyID0gJTA4eFxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgc2VsZi0+ZGFkZHIpOworCQkJICAgX19mdW5jX18sIHNlbGYtPmRhZGRyKTsKIAogCQkvKiBRdWVyeSByZW1vdGUgTE0tSUFTIGZvciB0aGlzIHNlcnZpY2UgKi8KIAkJZXJyID0gaXJkYV9maW5kX2xzYXBfc2VsKHNlbGYsIG5hbWUpOwpAQCAtNjU4LDcgKzY1OCw3IEBACiAJCQkvKiBXZSBmb3VuZCB0aGUgcmVxdWVzdGVkIHNlcnZpY2UgKi8KIAkJCWlmKGRhZGRyICE9IERFVl9BRERSX0FOWSkgewogCQkJCUlSREFfREVCVUcoMSwgIiVzKCksIGRpc2NvdmVyZWQgc2VydmljZSAnJyVzJycgaW4gdHdvIGRpZmZlcmVudCBkZXZpY2VzICEhIVxuIiwKLQkJCQkJICAgX19GVU5DVElPTl9fLCBuYW1lKTsKKwkJCQkJICAgX19mdW5jX18sIG5hbWUpOwogCQkJCXNlbGYtPmRhZGRyID0gREVWX0FERFJfQU5ZOwogCQkJCWtmcmVlKGRpc2NvdmVyaWVzKTsKIAkJCQlyZXR1cm4oLUVOT1RVTklRKTsKQEAgLTY3Miw3ICs2NzIsNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBTb21ldGhpbmcgYmFkIGRpZCBoYXBwZW4gOi0oICovCi0JCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmV4cGVjdGVkIElBUyBxdWVyeSBmYWlsdXJlXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5leHBlY3RlZCBJQVMgcXVlcnkgZmFpbHVyZVxuIiwgX19mdW5jX18pOwogCQkJc2VsZi0+ZGFkZHIgPSBERVZfQUREUl9BTlk7CiAJCQlrZnJlZShkaXNjb3Zlcmllcyk7CiAJCQlyZXR1cm4oLUVIT1NUVU5SRUFDSCk7CkBAIC02ODUsNyArNjg1LDcgQEAKIAkvKiBDaGVjayBvdXQgd2hhdCB3ZSBmb3VuZCAqLwogCWlmKGRhZGRyID09IERFVl9BRERSX0FOWSkgewogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBjYW5ub3QgZGlzY292ZXIgc2VydmljZSAnJyVzJycgaW4gYW55IGRldmljZSAhISFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIG5hbWUpOworCQkJICAgX19mdW5jX18sIG5hbWUpOwogCQlzZWxmLT5kYWRkciA9IERFVl9BRERSX0FOWTsKIAkJcmV0dXJuKC1FQUREUk5PVEFWQUlMKTsKIAl9CkBAIC02OTYsNyArNjk2LDcgQEAKIAlzZWxmLT5kdHNhcF9zZWwgPSBkdHNhcF9zZWw7CiAKIAlJUkRBX0RFQlVHKDEsICIlcygpLCBkaXNjb3ZlcmVkIHJlcXVlc3RlZCBzZXJ2aWNlICcnJXMnJyBhdCBhZGRyZXNzICUwOHhcbiIsCi0JCSAgIF9fRlVOQ1RJT05fXywgbmFtZSwgc2VsZi0+ZGFkZHIpOworCQkgICBfX2Z1bmNfXywgbmFtZSwgc2VsZi0+ZGFkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MjcsOCArNzI3LDggQEAKIAkJc2FkZHIuc2lyX2FkZHIgPSBzZWxmLT5zYWRkcjsKIAl9CiAKLQlJUkRBX0RFQlVHKDEsICIlcygpLCB0c2FwX3NlbCA9ICUjeFxuIiwgX19GVU5DVElPTl9fLCBzYWRkci5zaXJfbHNhcF9zZWwpOwotCUlSREFfREVCVUcoMSwgIiVzKCksIGFkZHIgPSAlMDh4XG4iLCBfX0ZVTkNUSU9OX18sIHNhZGRyLnNpcl9hZGRyKTsKKwlJUkRBX0RFQlVHKDEsICIlcygpLCB0c2FwX3NlbCA9ICUjeFxuIiwgX19mdW5jX18sIHNhZGRyLnNpcl9sc2FwX3NlbCk7CisJSVJEQV9ERUJVRygxLCAiJXMoKSwgYWRkciA9ICUwOHhcbiIsIF9fZnVuY19fLCBzYWRkci5zaXJfYWRkcik7CiAKIAkvKiB1YWRkcl9sZW4gY29tZSB0byB1cyB1bmluaXRpYWxpc2VkICovCiAJKnVhZGRyX2xlbiA9IHNpemVvZiAoc3RydWN0IHNvY2thZGRyX2lyZGEpOwpAQCAtNzQ3LDcgKzc0Nyw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWlmICgoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pICYmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCkgJiYKIAkgICAgKHNrLT5za190eXBlICE9IFNPQ0tfREdSQU0pKQpAQCAtNzc2LDcgKzc3Niw3IEBACiAJc3RydWN0IGlyZGFfc29jayAqc2VsZiA9IGlyZGFfc2soc2spOwogCWludCBlcnI7CiAKLQlJUkRBX0RFQlVHKDIsICIlcyglcClcbiIsIF9fRlVOQ1RJT05fXywgc2VsZik7CisJSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX2Z1bmNfXywgc2VsZik7CiAKIAlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcmRhKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03ODcsNyArNzg3LDcgQEAKIAkgICAgKHNrLT5za19wcm90b2NvbCA9PSBJUkRBUFJPVE9fVUxUUkEpKSB7CiAJCXNlbGYtPnBpZCA9IGFkZHItPnNpcl9sc2FwX3NlbDsKIAkJaWYgKHNlbGYtPnBpZCAmIDB4ODApIHsKLQkJCUlSREFfREVCVUcoMCwgIiVzKCksIGV4dGVuc2lvbiBpbiBQSUQgbm90IHN1cHAhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZXh0ZW5zaW9uIGluIFBJRCBub3Qgc3VwcCFcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJfQogCQllcnIgPSBpcmRhX29wZW5fbHNhcChzZWxmLCBzZWxmLT5waWQpOwpAQCAtODM1LDkgKzgzNSw5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQllcnIgPSBpcmRhX2NyZWF0ZShzay0+c2tfbmV0LCBuZXdzb2NrLCBzay0+c2tfcHJvdG9jb2wpOworCWVyciA9IGlyZGFfY3JlYXRlKHNvY2tfbmV0KHNrKSwgbmV3c29jaywgc2stPnNrX3Byb3RvY29sKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC04OTMsNyArODkzLDcgQEAKIAkvKiBOb3cgYXR0YWNoIHVwIHRoZSBuZXcgc29ja2V0ICovCiAJbmV3LT50c2FwID0gaXJ0dHBfZHVwKHNlbGYtPnRzYXAsIG5ldyk7CiAJaWYgKCFuZXctPnRzYXApIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZHVwIGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGR1cCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtOTU0LDcgKzk1NCw3IEBACiAJc3RydWN0IGlyZGFfc29jayAqc2VsZiA9IGlyZGFfc2soc2spOwogCWludCBlcnI7CiAKLQlJUkRBX0RFQlVHKDIsICIlcyglcClcbiIsIF9fRlVOQ1RJT05fXywgc2VsZik7CisJSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX2Z1bmNfXywgc2VsZik7CiAKIAkvKiBEb24ndCBhbGxvdyBjb25uZWN0IGZvciBVbHRyYSBzb2NrZXRzICovCiAJaWYgKChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSAmJiAoc2stPnNrX3Byb3RvY29sID09IElSREFQUk9UT19VTFRSQSkpCkBAIC05ODQsMTMgKzk4NCwxMyBAQAogCQkvKiBUcnkgdG8gZmluZCBvbmUgc3VpdGFibGUgKi8KIAkJZXJyID0gaXJkYV9kaXNjb3Zlcl9kYWRkcl9hbmRfbHNhcF9zZWwoc2VsZiwgYWRkci0+c2lyX25hbWUpOwogCQlpZiAoZXJyKSB7Ci0JCQlJUkRBX0RFQlVHKDAsICIlcygpLCBhdXRvLWNvbm5lY3QgZmFpbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMCwgIiVzKCksIGF1dG8tY29ubmVjdCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogVXNlIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIHVzZXIgKi8KIAkJc2VsZi0+ZGFkZHIgPSBhZGRyLT5zaXJfYWRkcjsKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZGFkZHIgPSAlMDh4XG4iLCBfX0ZVTkNUSU9OX18sIHNlbGYtPmRhZGRyKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZGFkZHIgPSAlMDh4XG4iLCBfX2Z1bmNfXywgc2VsZi0+ZGFkZHIpOwogCiAJCS8qIElmIHdlIGRvbid0IGhhdmUgYSB2YWxpZCBzZXJ2aWNlIG5hbWUsIHdlIGFzc3VtZSB0aGUKIAkJICogdXNlciB3YW50IHRvIGNvbm5lY3Qgb24gYSBzcGVjaWZpYyBMU0FQLiBQcmV2ZW50CkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogCQkJLyogUXVlcnkgcmVtb3RlIExNLUlBUyB1c2luZyBzZXJ2aWNlIG5hbWUgKi8KIAkJCWVyciA9IGlyZGFfZmluZF9sc2FwX3NlbChzZWxmLCBhZGRyLT5zaXJfbmFtZSk7CiAJCQlpZiAoZXJyKSB7Ci0JCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgY29ubmVjdCBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCUlSREFfREVCVUcoMCwgIiVzKCksIGNvbm5lY3QgZmFpbGVkIVxuIiwgX19mdW5jX18pOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCQkJCSAgICBzZWxmLT5zYWRkciwgc2VsZi0+ZGFkZHIsIE5VTEwsCiAJCQkJICAgIHNlbGYtPm1heF9zZHVfc2l6ZV9yeCwgTlVMTCk7CiAJaWYgKGVycikgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBjb25uZWN0IGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGNvbm5lY3QgZmFpbGVkIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTA2OCw3ICsxMDY4LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGlyZGFfc29jayAqc2VsZjsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaWYgKG5ldCAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwpAQCAtMTA4OSw3ICsxMDg5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzZWxmID0gaXJkYV9zayhzayk7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKSA6IHNlbGYgaXMgJXBcbiIsIF9fRlVOQ1RJT05fXywgc2VsZik7CisJSVJEQV9ERUJVRygyLCAiJXMoKSA6IHNlbGYgaXMgJXBcbiIsIF9fZnVuY19fLCBzZWxmKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbGYtPnF1ZXJ5X3dhaXQpOwogCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogICovCiBzdGF0aWMgdm9pZCBpcmRhX2Rlc3Ryb3lfc29ja2V0KHN0cnVjdCBpcmRhX3NvY2sgKnNlbGYpCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX0ZVTkNUSU9OX18sIHNlbGYpOworCUlSREFfREVCVUcoMiwgIiVzKCVwKVxuIiwgX19mdW5jX18sIHNlbGYpOwogCiAJLyogVW5yZWdpc3RlciB3aXRoIElyTE1QICovCiAJaXJsbXBfdW5yZWdpc3Rlcl9jbGllbnQoc2VsZi0+Y2tleSk7CkBAIC0xMTg2LDcgKzExODYsNyBAQAogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xMjU0LDcgKzEyNTQsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciA9IC1FUElQRTsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIGxlbj0lemRcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBsZW49JXpkXG4iLCBfX2Z1bmNfXywgbGVuKTsKIAogCS8qIE5vdGUgOiBzb2NrZXQuYyBzZXQgTVNHX0VPUiBvbiBTRVFQQUNLRVQgc29ja2V0cyAqLwogCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUIHwgTVNHX0VPUiB8IE1TR19DTVNHX0NPTVBBVCB8CkBAIC0xMjgyLDcgKzEyODIsNyBAQAogCS8qIENoZWNrIHRoYXQgd2UgZG9uJ3Qgc2VuZCBvdXQgdG9vIGJpZyBmcmFtZXMgKi8KIAlpZiAobGVuID4gc2VsZi0+bWF4X2RhdGFfc2l6ZSkgewogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBDaG9wcGluZyBmcmFtZSBmcm9tICV6ZCB0byAlZCBieXRlcyFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGxlbiwgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7CisJCQkgICBfX2Z1bmNfXywgbGVuLCBzZWxmLT5tYXhfZGF0YV9zaXplKTsKIAkJbGVuID0gc2VsZi0+bWF4X2RhdGFfc2l6ZTsKIAl9CiAKQEAgLTEzMDYsNyArMTMwNiw3IEBACiAJICovCiAJZXJyID0gaXJ0dHBfZGF0YV9yZXF1ZXN0KHNlbGYtPnRzYXAsIHNrYik7CiAJaWYgKGVycikgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBlcnI9JWRcbiIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKIAkJZ290byBvdXRfZXJyOwogCX0KIAkvKiBUZWxsIGNsaWVudCBob3cgbXVjaCBkYXRhIHdlIGFjdHVhbGx5IHNlbnQgKi8KQEAgLTEzMzIsNyArMTMzMiw3IEBACiAJc2l6ZV90IGNvcGllZDsKIAlpbnQgZXJyOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoKGVyciA9IHNvY2tfZXJyb3Ioc2spKSA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xMzQ3LDcgKzEzNDcsNyBAQAogCiAJaWYgKGNvcGllZCA+IHNpemUpIHsKIAkJSVJEQV9ERUJVRygyLCAiJXMoKSwgUmVjZWl2ZWQgdHJ1bmNhdGVkIGZyYW1lICglemQgPCAlemQpIVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgY29waWVkLCBzaXplKTsKKwkJCSAgIF9fZnVuY19fLCBjb3BpZWQsIHNpemUpOwogCQljb3BpZWQgPSBzaXplOwogCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CiAJfQpAQCAtMTM2Myw3ICsxMzYzLDcgQEAKIAkgKi8KIAlpZiAoc2VsZi0+cnhfZmxvdyA9PSBGTE9XX1NUT1ApIHsKIAkJaWYgKChhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDw8IDIpIDw9IHNrLT5za19yY3ZidWYpIHsKLQkJCUlSREFfREVCVUcoMiwgIiVzKCksIFN0YXJ0aW5nIElyVFRQXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgU3RhcnRpbmcgSXJUVFBcbiIsIF9fZnVuY19fKTsKIAkJCXNlbGYtPnJ4X2Zsb3cgPSBGTE9XX1NUQVJUOwogCQkJaXJ0dHBfZmxvd19yZXF1ZXN0KHNlbGYtPnRzYXAsIEZMT1dfU1RBUlQpOwogCQl9CkBAIC0xMzg1LDcgKzEzODUsNyBAQAogCWludCB0YXJnZXQsIGVycjsKIAlsb25nIHRpbWVvOwogCi0JSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDMsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoKGVyciA9IHNvY2tfZXJyb3Ioc2spKSA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xNDU5LDE0ICsxNDU5LDE0IEBACiAJCQkvKiBwdXQgdGhlIHNrYiBiYWNrIGlmIHdlIGRpZG4ndCB1c2UgaXQgdXAuLiAqLwogCQkJaWYgKHNrYi0+bGVuKSB7CiAJCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgYmFjayBvbiBxIVxuIiwKLQkJCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkJICAgX19mdW5jX18pOwogCQkJCXNrYl9xdWV1ZV9oZWFkKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKIAkJCQlicmVhazsKIAkJCX0KIAogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCX0gZWxzZSB7Ci0JCQlJUkRBX0RFQlVHKDAsICIlcygpIHF1ZXN0aW9uYWJsZSE/XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygwLCAiJXMoKSBxdWVzdGlvbmFibGUhP1xuIiwgX19mdW5jX18pOwogCiAJCQkvKiBwdXQgbWVzc2FnZSBiYWNrIGFuZCByZXR1cm4gKi8KIAkJCXNrYl9xdWV1ZV9oZWFkKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKQEAgLTE0ODIsNyArMTQ4Miw3IEBACiAJICovCiAJaWYgKHNlbGYtPnJ4X2Zsb3cgPT0gRkxPV19TVE9QKSB7CiAJCWlmICgoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA8PCAyKSA8PSBzay0+c2tfcmN2YnVmKSB7Ci0JCQlJUkRBX0RFQlVHKDIsICIlcygpLCBTdGFydGluZyBJclRUUFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMiwgIiVzKCksIFN0YXJ0aW5nIElyVFRQXG4iLCBfX2Z1bmNfXyk7CiAJCQlzZWxmLT5yeF9mbG93ID0gRkxPV19TVEFSVDsKIAkJCWlydHRwX2Zsb3dfcmVxdWVzdChzZWxmLT50c2FwLCBGTE9XX1NUQVJUKTsKIAkJfQpAQCAtMTUwNiw3ICsxNTA2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBsZW49JXpkXG4iLCBfX0ZVTkNUSU9OX18sIGxlbik7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgbGVuPSV6ZFxuIiwgX19mdW5jX18sIGxlbik7CiAKIAlpZiAobXNnLT5tc2dfZmxhZ3MgJiB+KE1TR19ET05UV0FJVHxNU0dfQ01TR19DT01QQVQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1MjgsNyArMTUyOCw3IEBACiAJaWYgKGxlbiA+IHNlbGYtPm1heF9kYXRhX3NpemUpIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgV2FybmluZyB0byBtdWNoIGRhdGEhICIKIAkJCSAgICJDaG9wcGluZyBmcmFtZSBmcm9tICV6ZCB0byAlZCBieXRlcyFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGxlbiwgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7CisJCQkgICBfX2Z1bmNfXywgbGVuLCBzZWxmLT5tYXhfZGF0YV9zaXplKTsKIAkJbGVuID0gc2VsZi0+bWF4X2RhdGFfc2l6ZTsKIAl9CiAKQEAgLTE1NDAsNyArMTU0MCw3IEBACiAJc2tiX3Jlc2VydmUoc2tiLCBzZWxmLT5tYXhfaGVhZGVyX3NpemUpOwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBhcHBlbmRpbmcgdXNlciBkYXRhXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKCksIGFwcGVuZGluZyB1c2VyIGRhdGFcbiIsIF9fZnVuY19fKTsKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksIG1zZy0+bXNnX2lvdiwgbGVuKTsKIAlpZiAoZXJyKSB7CkBAIC0xNTU0LDcgKzE1NTQsNyBAQAogCSAqLwogCWVyciA9IGlydHRwX3VkYXRhX3JlcXVlc3Qoc2VsZi0+dHNhcCwgc2tiKTsKIAlpZiAoZXJyKSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIGVycj0lZFxuIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gbGVuOwpAQCAtMTU3Nyw3ICsxNTc3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBsZW49JXpkXG4iLCBfX0ZVTkNUSU9OX18sIGxlbik7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgbGVuPSV6ZFxuIiwgX19mdW5jX18sIGxlbik7CiAKIAlpZiAobXNnLT5tc2dfZmxhZ3MgJiB+KE1TR19ET05UV0FJVHxNU0dfQ01TR19DT01QQVQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2MDAsNyArMTYwMCw3IEBACiAKIAkJcGlkID0gYWRkci0+c2lyX2xzYXBfc2VsOwogCQlpZiAocGlkICYgMHg4MCkgewotCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZXh0ZW5zaW9uIGluIFBJRCBub3Qgc3VwcCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDAsICIlcygpLCBleHRlbnNpb24gaW4gUElEIG5vdCBzdXBwIVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl9CiAJfSBlbHNlIHsKQEAgLTE2MDksNyArMTYwOSw3IEBACiAJCWlmICgoc2VsZi0+bHNhcCA9PSBOVUxMKSB8fAogCQkgICAgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpKSB7CiAJCQlJUkRBX0RFQlVHKDAsICIlcygpLCBzb2NrZXQgbm90IGJvdW5kIHRvIFVsdHJhIFBJRC5cbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT1RDT05OOwogCQl9CiAJCS8qIFVzZSBQSUQgZnJvbSBzb2NrZXQgKi8KQEAgLTE2MjMsNyArMTYyMyw3IEBACiAJaWYgKGxlbiA+IHNlbGYtPm1heF9kYXRhX3NpemUpIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgV2FybmluZyB0byBtdWNoIGRhdGEhICIKIAkJCSAgICJDaG9wcGluZyBmcmFtZSBmcm9tICV6ZCB0byAlZCBieXRlcyFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGxlbiwgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7CisJCQkgICBfX2Z1bmNfXywgbGVuLCBzZWxmLT5tYXhfZGF0YV9zaXplKTsKIAkJbGVuID0gc2VsZi0+bWF4X2RhdGFfc2l6ZTsKIAl9CiAKQEAgLTE2MzUsNyArMTYzNSw3IEBACiAJc2tiX3Jlc2VydmUoc2tiLCBzZWxmLT5tYXhfaGVhZGVyX3NpemUpOwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBhcHBlbmRpbmcgdXNlciBkYXRhXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKCksIGFwcGVuZGluZyB1c2VyIGRhdGFcbiIsIF9fZnVuY19fKTsKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksIG1zZy0+bXNnX2lvdiwgbGVuKTsKIAlpZiAoZXJyKSB7CkBAIC0xNjQ2LDcgKzE2NDYsNyBAQAogCWVyciA9IGlybG1wX2Nvbm5sZXNzX2RhdGFfcmVxdWVzdCgoYm91bmQgPyBzZWxmLT5sc2FwIDogTlVMTCksCiAJCQkJCSAgc2tiLCBwaWQpOwogCWlmIChlcnIpIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZXJyPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiBsZW47CkBAIC0xNjYxLDcgKzE2NjEsNyBAQAogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBpcmRhX3NvY2sgKnNlbGYgPSBpcmRhX3NrKHNrKTsKIAotCUlSREFfREVCVUcoMSwgIiVzKCVwKVxuIiwgX19GVU5DVElPTl9fLCBzZWxmKTsKKwlJUkRBX0RFQlVHKDEsICIlcyglcClcbiIsIF9fZnVuY19fLCBzZWxmKTsKIAogCXNrLT5za19zdGF0ZSAgICAgICA9IFRDUF9DTE9TRTsKIAlzay0+c2tfc2h1dGRvd24gICB8PSBTRU5EX1NIVVRET1dOOwpAQCAtMTY5Niw3ICsxNjk2LDcgQEAKIAlzdHJ1Y3QgaXJkYV9zb2NrICpzZWxmID0gaXJkYV9zayhzayk7CiAJdW5zaWduZWQgaW50IG1hc2s7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXBvbGxfd2FpdChmaWxlLCBzay0+c2tfc2xlZXAsIHdhaXQpOwogCW1hc2sgPSAwOwpAQCAtMTcwNSw3ICsxNzA1LDcgQEAKIAlpZiAoc2stPnNrX2VycikKIAkJbWFzayB8PSBQT0xMRVJSOwogCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgUE9MTEhVUFxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgUE9MTEhVUFxuIiwgX19mdW5jX18pOwogCQltYXNrIHw9IFBPTExIVVA7CiAJfQogCkBAIC0xNzE5LDcgKzE3MTksNyBAQAogCXN3aXRjaCAoc2stPnNrX3R5cGUpIHsKIAljYXNlIFNPQ0tfU1RSRUFNOgogCQlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkgewotCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgUE9MTEhVUFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMCwgIiVzKCksIFBPTExIVVBcbiIsIF9fZnVuY19fKTsKIAkJCW1hc2sgfD0gUE9MTEhVUDsKIAkJfQogCkBAIC0xNzU1LDcgKzE3NTUsNyBAQAogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKSwgY21kPSUjeFxuIiwgX19GVU5DVElPTl9fLCBjbWQpOworCUlSREFfREVCVUcoNCwgIiVzKCksIGNtZD0lI3hcbiIsIF9fZnVuY19fLCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRJT0NPVVRROiB7CkBAIC0xNzk2LDcgKzE3OTYsNyBAQAogCWNhc2UgU0lPQ1NJRk1FVFJJQzoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZG9pbmcgZGV2aWNlIGlvY3RsIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZG9pbmcgZGV2aWNlIGlvY3RsIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIApAQCAtMTgzMyw3ICsxODMzLDcgQEAKIAlzdHJ1Y3QgaWFzX2F0dHJpYiAqCWlhc19hdHRyOwkvKiBBdHRyaWJ1dGUgaW4gSUFTIG9iamVjdCAqLwogCWludCBvcHQsIGZyZWVfaWFzID0gMDsKIAotCUlSREFfREVCVUcoMiwgIiVzKCVwKVxuIiwgX19GVU5DVElPTl9fLCBzZWxmKTsKKwlJUkRBX0RFQlVHKDIsICIlcyglcClcbiIsIF9fZnVuY19fLCBzZWxmKTsKIAogCWlmIChsZXZlbCAhPSBTT0xfSVJMTVApCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CkBAIC0yMDEyLDcgKzIwMTIsNyBAQAogCiAJCS8qIENoZWNrIGlzIHRoZSB1c2VyIHNwYWNlIG93biB0aGUgb2JqZWN0ICovCiAJCWlmKGlhc19hdHRyLT52YWx1ZS0+b3duZXIgIT0gSUFTX1VTRVJfQVRUUikgewotCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgYXR0ZW1wdGluZyB0byBkZWxldGUgYSBrZXJuZWwgYXR0cmlidXRlXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgYXR0ZW1wdGluZyB0byBkZWxldGUgYSBrZXJuZWwgYXR0cmlidXRlXG4iLCBfX2Z1bmNfXyk7CiAJCQlrZnJlZShpYXNfb3B0KTsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KQEAgLTIwMzEsMTEgKzIwMzEsMTEgQEAKIAkJLyogT25seSBwb3NzaWJsZSBmb3IgYSBzZXFwYWNrZXQgc2VydmljZSAoVFRQIHdpdGggU0FSKSAqLwogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQpIHsKIAkJCUlSREFfREVCVUcoMiwgIiVzKCksIHNldHRpbmcgbWF4X3NkdV9zaXplID0gJWRcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fLCBvcHQpOworCQkJCSAgIF9fZnVuY19fLCBvcHQpOwogCQkJc2VsZi0+bWF4X3NkdV9zaXplX3J4ID0gb3B0OwogCQl9IGVsc2UgewogCQkJSVJEQV9XQVJOSU5HKCIlczogbm90IGFsbG93ZWQgdG8gc2V0IE1BWFNEVVNJWkUgZm9yIHRoaXMgc29ja2V0IHR5cGUhXG4iLAotCQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJCX0KIAkJYnJlYWs7CkBAIC0yMTQ5LDcgKzIxNDksNyBAQAogCWludCBlcnI7CiAJaW50IG9mZnNldCwgdG90YWw7CiAKLQlJUkRBX0RFQlVHKDIsICIlcyglcClcbiIsIF9fRlVOQ1RJT05fXywgc2VsZik7CisJSVJEQV9ERUJVRygyLCAiJXMoJXApXG4iLCBfX2Z1bmNfXywgc2VsZik7CiAKIAlpZiAobGV2ZWwgIT0gU09MX0lSTE1QKQogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwpAQCAtMjMxMCw3ICsyMzEwLDcgQEAKIAkJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gcHJvY2VlZCB3aXRoIElBUCAqLwogCQlpZiAoc2VsZi0+aXJpYXApIHsKIAkJCUlSREFfV0FSTklORygiJXM6IGJ1c3kgd2l0aCBhIHByZXZpb3VzIHF1ZXJ5XG4iLAotCQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICAgIF9fZnVuY19fKTsKIAkJCWtmcmVlKGlhc19vcHQpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQpAQCAtMjQwNiw3ICsyNDA2LDcgQEAKIAkJaWYgKCFzZWxmLT5jYWNoZWRhZGRyKSB7CiAJCQlpbnQgcmV0ID0gMDsKIAotCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgbm90aGluZyBkaXNjb3ZlcmVkIHlldCwgZ29pbmcgdG8gc2xlZXAuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDEsICIlcygpLCBub3RoaW5nIGRpc2NvdmVyZWQgeWV0LCBnb2luZyB0byBzbGVlcC4uLlxuIiwgX19mdW5jX18pOwogCiAJCQkvKiBTZXQgd2F0Y2hkb2cgdGltZXIgdG8gZXhwaXJlIGluIDx2YWw+IG1zLiAqLwogCQkJc2VsZi0+ZXJybm8gPSAwOwpAQCAtMjQyNCwxNCArMjQyNCwxNCBAQAogCQkJaWYodGltZXJfcGVuZGluZygmKHNlbGYtPndhdGNoZG9nKSkpCiAJCQkJZGVsX3RpbWVyKCYoc2VsZi0+d2F0Y2hkb2cpKTsKIAotCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgLi4ud2FraW5nIHVwICFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDEsICIlcygpLCAuLi53YWtpbmcgdXAgIVxuIiwgX19mdW5jX18pOwogCiAJCQlpZiAocmV0ICE9IDApCiAJCQkJcmV0dXJuIHJldDsKIAkJfQogCQllbHNlCiAJCQlJUkRBX0RFQlVHKDEsICIlcygpLCBmb3VuZCBpbW1lZGlhdGVseSAhXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCiAJCS8qIFRlbGwgSXJMTVAgdGhhdCB3ZSBoYXZlIGJlZW4gbm90aWZpZWQgKi8KIAkJaXJsbXBfdXBkYXRlX2NsaWVudChzZWxmLT5ja2V5LCBzZWxmLT5tYXNrLndvcmQsCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9kaXNjb3ZlcnkuYyBiL25ldC9pcmRhL2Rpc2NvdmVyeS5jCmluZGV4IDgwYzMzZjQuLmJmYWNlZjggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2Rpc2NvdmVyeS5jCisrKyBiL25ldC9pcmRhL2Rpc2NvdmVyeS5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIHsKIAlkaXNjb3ZlcnlfdCAqZGlzY292ZXJ5OwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKgogCSAqICBJZiBsb2cgaXMgbWlzc2luZyB0aGlzIG1lYW5zIHRoYXQgSXJMQVAgd2FzIHVuYWJsZSB0byBwZXJmb3JtIHRoZQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJaW50CQkJaSA9IDA7CQkvKiBIb3cgbWFueSB3ZSBleHBpcmVkICovCiAKIAlJUkRBX0FTU0VSVChsb2cgIT0gTlVMTCwgcmV0dXJuOyk7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbG9nLT5oYl9zcGlubG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2NvcmUuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCmluZGV4IGI4MjUzOTkuLjAxOGM5MjkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCkBAIC03MCwxNSArNzAsMTcgQEAKIHsKIAlpcmNvbW0gPSBoYXNoYmluX25ldyhIQl9MT0NLKTsKIAlpZiAoaXJjb21tID09IE5VTEwpIHsKLQkJSVJEQV9FUlJPUigiJXMoKSwgY2FuJ3QgYWxsb2NhdGUgaGFzaGJpbiFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfRVJST1IoIiVzKCksIGNhbid0IGFsbG9jYXRlIGhhc2hiaW4hXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJeyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgiaXJjb21tIiwgMCwgcHJvY19pcmRhKTsKLQlpZiAoZW50KQotCQllbnQtPnByb2NfZm9wcyA9ICZpcmNvbW1fcHJvY19mb3BzOworCWVudCA9IHByb2NfY3JlYXRlKCJpcmNvbW0iLCAwLCBwcm9jX2lyZGEsICZpcmNvbW1fcHJvY19mb3BzKTsKKwlpZiAoIWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImlyY29tbV9pbml0OiBjYW4ndCBjcmVhdGUgL3Byb2MgZW50cnkhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCX0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCkBAIC04OSw3ICs5MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcmNvbW1fY2xlYW51cCh2b2lkKQogewotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAloYXNoYmluX2RlbGV0ZShpcmNvbW0sIChGUkVFX0ZVTkMpIF9faXJjb21tX2Nsb3NlKTsKIApAQCAtMTA5LDcgKzExMSw3IEBACiAJc3RydWN0IGlyY29tbV9jYiAqc2VsZiA9IE5VTEw7CiAJaW50IHJldDsKIAotCUlSREFfREVCVUcoMiwgIiVzKCksIHNlcnZpY2VfdHlwZT0weCUwMnhcbiIsIF9fRlVOQ1RJT05fXyAsCisJSVJEQV9ERUJVRygyLCAiJXMoKSwgc2VydmljZV90eXBlPTB4JTAyeFxuIiwgX19mdW5jX18gLAogCQkgICBzZXJ2aWNlX3R5cGUpOwogCiAJSVJEQV9BU1NFUlQoaXJjb21tICE9IE5VTEwsIHJldHVybiBOVUxMOyk7CkBAIC0xNTMsNyArMTU1LDcgQEAKICAqLwogc3RhdGljIGludCBfX2lyY29tbV9jbG9zZShzdHJ1Y3QgaXJjb21tX2NiICpzZWxmKQogewotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAkvKiBEaXNjb25uZWN0IGxpbmsgaWYgYW55ICovCiAJaXJjb21tX2RvX2V2ZW50KHNlbGYsIElSQ09NTV9ESVNDT05ORUNUX1JFUVVFU1QsIE5VTEwsIE5VTEwpOwpAQCAtMTg5LDcgKzE5MSw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLUVJTzspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9NQUdJQywgcmV0dXJuIC1FSU87KTsKIAotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAllbnRyeSA9IGhhc2hiaW5fcmVtb3ZlKGlyY29tbSwgc2VsZi0+bGluZSwgTlVMTCk7CiAKQEAgLTIxNCw3ICsyMTYsNyBAQAogCXN0cnVjdCBpcmNvbW1faW5mbyBpbmZvOwogCWludCByZXQ7CiAKLQlJUkRBX0RFQlVHKDIgLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyICwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9NQUdJQywgcmV0dXJuIC0xOyk7CkBAIC0yNDMsNyArMjQ1LDcgQEAKIHsKIAlpbnQgY2xlbiA9IDA7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBjb250YWlucyBkYXRhIG9uIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KIAlpZiAoc2tiLT5sZW4gPiAwKQpAQCAtMjU5LDcgKzI2MSw3IEBACiAJCQkJCQlpbmZvLT5xb3MsIGluZm8tPm1heF9kYXRhX3NpemUsCiAJCQkJCQlpbmZvLT5tYXhfaGVhZGVyX3NpemUsIHNrYik7CiAJZWxzZSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIG1pc3NpbmcgaGFuZGxlclxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIG1pc3NpbmcgaGFuZGxlclxuIiwgX19mdW5jX18gKTsKIAl9CiB9CiAKQEAgLTI3Niw3ICsyNzgsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm4gLTE7KTsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlyZXQgPSBpcmNvbW1fZG9fZXZlbnQoc2VsZiwgSVJDT01NX0NPTk5FQ1RfUkVTUE9OU0UsIHVzZXJkYXRhLCBOVUxMKTsKIApAQCAtMjk0LDcgKzI5Niw3IEBACiB2b2lkIGlyY29tbV9jb25uZWN0X2NvbmZpcm0oc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmIChzZWxmLT5ub3RpZnkuY29ubmVjdF9jb25maXJtICkKIAkJc2VsZi0+bm90aWZ5LmNvbm5lY3RfY29uZmlybShzZWxmLT5ub3RpZnkuaW5zdGFuY2UsCkBAIC0zMDIsNyArMzA0LDcgQEAKIAkJCQkJICAgICBpbmZvLT5tYXhfZGF0YV9zaXplLAogCQkJCQkgICAgIGluZm8tPm1heF9oZWFkZXJfc2l6ZSwgc2tiKTsKIAllbHNlIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbWlzc2luZyBoYW5kbGVyXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbWlzc2luZyBoYW5kbGVyXG4iLCBfX2Z1bmNfXyApOwogCX0KIH0KIApAQCAtMzE2LDcgKzMxOCw3IEBACiB7CiAJaW50IHJldDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtRUZBVUxUOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm4gLUVGQVVMVDspOwpAQCAtMzM3LDE0ICszMzksMTQgQEAKICAqLwogdm9pZCBpcmNvbW1fZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNrYi0+bGVuID4gMCwgcmV0dXJuOyk7CiAKIAlpZiAoc2VsZi0+bm90aWZ5LmRhdGFfaW5kaWNhdGlvbikKIAkJc2VsZi0+bm90aWZ5LmRhdGFfaW5kaWNhdGlvbihzZWxmLT5ub3RpZnkuaW5zdGFuY2UsIHNlbGYsIHNrYik7CiAJZWxzZSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIG1pc3NpbmcgaGFuZGxlclxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIG1pc3NpbmcgaGFuZGxlclxuIiwgX19mdW5jX18gKTsKIAl9CiB9CiAKQEAgLTM3MCw3ICszNzIsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IChjbGVuICsgMSkpKSB7CiAJCUlSREFfREVCVUcoMiwgIiVzKCkgdGhyb3dpbmcgYXdheSBpbGxlZ2FsIGZyYW1lXG4iLAotCQkJICAgX19GVU5DVElPTl9fICk7CisJCQkgICBfX2Z1bmNfXyApOwogCQlyZXR1cm47CiAJfQogCkBAIC0zODksNyArMzkxLDcgQEAKIAkJaXJjb21tX2RhdGFfaW5kaWNhdGlvbihzZWxmLCBza2IpOwogCWVsc2UgewogCQlJUkRBX0RFQlVHKDQsICIlcygpLCBkYXRhIHdhcyBjb250cm9sIGluZm8gb25seSFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18gKTsKKwkJCSAgIF9fZnVuY19fICk7CiAJfQogfQogCkBAIC00MDMsNyArNDA1LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC1FRkFVTFQ7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybiAtRUZBVUxUOyk7CkBAIC00MjUsNyArNDI3LDcgQEAKIHN0YXRpYyB2b2lkIGlyY29tbV9jb250cm9sX2luZGljYXRpb24oc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY2xlbikKIHsKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJLyogVXNlIHVkYXRhIGZvciBkZWxpdmVyaW5nIGRhdGEgb24gdGhlIGNvbnRyb2wgY2hhbm5lbCAqLwogCWlmIChzZWxmLT5ub3RpZnkudWRhdGFfaW5kaWNhdGlvbikgewpAQCAtNDQ2LDcgKzQ0OCw3IEBACiAJCSAqIHNlZSBpcmNvbW1fdHR5X2NvbnRyb2xfaW5kaWNhdGlvbigpLiAqLwogCQlkZXZfa2ZyZWVfc2tiKGN0cmxfc2tiKTsKIAl9IGVsc2UgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBtaXNzaW5nIGhhbmRsZXJcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBtaXNzaW5nIGhhbmRsZXJcbiIsIF9fZnVuY19fICk7CiAJfQogfQogCkBAIC00NjEsNyArNDYzLDcgQEAKIAlzdHJ1Y3QgaXJjb21tX2luZm8gaW5mbzsKIAlpbnQgcmV0OwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm4gLTE7KTsKQEAgLTQ4Miw3ICs0ODQsNyBAQAogdm9pZCBpcmNvbW1fZGlzY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKGluZm8gIT0gTlVMTCwgcmV0dXJuOyk7CiAKQEAgLTQ5MCw3ICs0OTIsNyBAQAogCQlzZWxmLT5ub3RpZnkuZGlzY29ubmVjdF9pbmRpY2F0aW9uKHNlbGYtPm5vdGlmeS5pbnN0YW5jZSwgc2VsZiwKIAkJCQkJCSAgIGluZm8tPnJlYXNvbiwgc2tiKTsKIAl9IGVsc2UgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBtaXNzaW5nIGhhbmRsZXJcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBtaXNzaW5nIGhhbmRsZXJcbiIsIF9fZnVuY19fICk7CiAJfQogfQogCkBAIC01MDIsNyArNTA0LDcgQEAKICAqLwogdm9pZCBpcmNvbW1fZmxvd19yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIExPQ0FMX0ZMT1cgZmxvdykKIHsKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybjspOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9ldmVudC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9ldmVudC5jCmluZGV4IDhiYTRlNTkuLmMzNWIzZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2V2ZW50LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQlpcmNvbW1fY29ubmVjdF9pbmRpY2F0aW9uKHNlbGYsIHNrYiwgaW5mbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoNCwgIiVzKCksIHVua25vd24gZXZlbnQ6ICVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCQlJUkRBX0RFQlVHKDQsICIlcygpLCB1bmtub3duIGV2ZW50OiAlc1xuIiwgX19mdW5jX18gLAogCQkJICAgaXJjb21tX2V2ZW50W2V2ZW50XSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtMTM4LDcgKzEzOCw3IEBACiAJCWlyY29tbV9kaXNjb25uZWN0X2luZGljYXRpb24oc2VsZiwgc2tiLCBpbmZvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5rbm93biBldmVudDogJXNcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoMCwgIiVzKCksIHVua25vd24gZXZlbnQ6ICVzXG4iLCBfX2Z1bmNfXyAsCiAJCQkgICBpcmNvbW1fZXZlbnRbZXZlbnRdKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJaXJjb21tX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzZWxmLCBza2IsIGluZm8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmtub3duIGV2ZW50ID0gJXNcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoMCwgIiVzKCksIHVua25vd24gZXZlbnQgPSAlc1xuIiwgX19mdW5jX18gLAogCQkJICAgaXJjb21tX2V2ZW50W2V2ZW50XSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCXJldCA9IHNlbGYtPmlzc3VlLmRpc2Nvbm5lY3RfcmVxdWVzdChzZWxmLCBza2IsIGluZm8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmtub3duIGV2ZW50ID0gJXNcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoMCwgIiVzKCksIHVua25vd24gZXZlbnQgPSAlc1xuIiwgX19mdW5jX18gLAogCQkJICAgaXJjb21tX2V2ZW50W2V2ZW50XSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtMjI5LDcgKzIyOSw3IEBACiBpbnQgaXJjb21tX2RvX2V2ZW50KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwKIAkJICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykKIHsKLQlJUkRBX0RFQlVHKDQsICIlczogc3RhdGU9JXMsIGV2ZW50PSVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCUlSREFfREVCVUcoNCwgIiVzOiBzdGF0ZT0lcywgZXZlbnQ9JXNcbiIsIF9fZnVuY19fICwKIAkJICAgaXJjb21tX3N0YXRlW3NlbGYtPnN0YXRlXSwgaXJjb21tX2V2ZW50W2V2ZW50XSk7CiAKIAlyZXR1cm4gKCpzdGF0ZVtzZWxmLT5zdGF0ZV0pKHNlbGYsIGV2ZW50LCBza2IsIGluZm8pOwpAQCAtMjQ1LDYgKzI0NSw2IEBACiB7CiAJc2VsZi0+c3RhdGUgPSBzdGF0ZTsKIAotCUlSREFfREVCVUcoNCwgIiVzOiBuZXh0IHN0YXRlPSVzLCBzZXJ2aWNlIHR5cGU9JWRcbiIsIF9fRlVOQ1RJT05fXyAsCisJSVJEQV9ERUJVRyg0LCAiJXM6IG5leHQgc3RhdGU9JXMsIHNlcnZpY2UgdHlwZT0lZFxuIiwgX19mdW5jX18gLAogCQkgICBpcmNvbW1fc3RhdGVbc2VsZi0+c3RhdGVdLCBzZWxmLT5zZXJ2aWNlX3R5cGUpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fbG1wLmMKaW5kZXggNTU4NjBlZS4uNjdjOTlkMiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2xtcC5jCkBAIC01Myw3ICs1Myw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJLyogRG9uJ3QgZm9yZ2V0IHRvIHJlZmNvdW50IGl0IC0gc2hvdWxkIGJlIE5VTEwgYW55d2F5ICovCiAJaWYodXNlcmRhdGEpCkBAIC03Niw3ICs3Niw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKIAlpbnQgcmV0OwogCi0JSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCS8qIEFueSB1c2VyZGF0YSBzdXBwbGllZD8gKi8KIAlpZiAodXNlcmRhdGEgPT0gTlVMTCkgewpAQCAtMTExLDcgKzExMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKIAlpbnQgcmV0OwogCi0JSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmICghdXNlcmRhdGEpIHsKIAkJdHhfc2tiID0gYWxsb2Nfc2tiKExNUF9NQVhfSEVBREVSLCBHRlBfQVRPTUlDKTsKQEAgLTE0OCwxMyArMTQ4LDEzIEBACiAKIAljYiA9IChzdHJ1Y3QgaXJkYV9za2JfY2IgKikgc2tiLT5jYjsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlsaW5lID0gY2ItPmxpbmU7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmNvbW1fY2IgKikgaGFzaGJpbl9sb2NrX2ZpbmQoaXJjb21tLCBsaW5lLCBOVUxMKTsKIAlpZiAoIXNlbGYpIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZGlkbid0IGZpbmQgbXlzZWxmXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZGlkbid0IGZpbmQgbXlzZWxmXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlzZWxmLT5wa3RfY291bnQtLTsKIAogCWlmICgoc2VsZi0+cGt0X2NvdW50IDwgMikgJiYgKHNlbGYtPmZsb3dfc3RhdHVzID09IEZMT1dfU1RPUCkpIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgYXNraW5nIFRUWSB0byBzdGFydCBhZ2FpbiFcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBhc2tpbmcgVFRZIHRvIHN0YXJ0IGFnYWluIVxuIiwgX19mdW5jX18gKTsKIAkJc2VsZi0+Zmxvd19zdGF0dXMgPSBGTE9XX1NUQVJUOwogCQlpZiAoc2VsZi0+bm90aWZ5LmZsb3dfaW5kaWNhdGlvbikKIAkJCXNlbGYtPm5vdGlmeS5mbG93X2luZGljYXRpb24oc2VsZi0+bm90aWZ5Lmluc3RhbmNlLApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIAljYi0+bGluZSA9IHNlbGYtPmxpbmU7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBzZW5kaW5nIGZyYW1lXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBzZW5kaW5nIGZyYW1lXG4iLCBfX2Z1bmNfXyApOwogCiAJLyogRG9uJ3QgZm9yZ2V0IHRvIHJlZmNvdW50IGl0IC0gc2VlIGlyY29tbV90dHlfZG9fc29mdGludCgpICovCiAJc2tiX2dldChza2IpOwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJc2tiLT5kZXN0cnVjdG9yID0gaXJjb21tX2xtcF9mbG93X2NvbnRyb2w7CiAKIAlpZiAoKHNlbGYtPnBrdF9jb3VudCsrID4gNykgJiYgKHNlbGYtPmZsb3dfc3RhdHVzID09IEZMT1dfU1RBUlQpKSB7Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIGFza2luZyBUVFkgdG8gc2xvdyBkb3duIVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIGFza2luZyBUVFkgdG8gc2xvdyBkb3duIVxuIiwgX19mdW5jX18gKTsKIAkJc2VsZi0+Zmxvd19zdGF0dXMgPSBGTE9XX1NUT1A7CiAJCWlmIChzZWxmLT5ub3RpZnkuZmxvd19pbmRpY2F0aW9uKQogCQkJc2VsZi0+bm90aWZ5LmZsb3dfaW5kaWNhdGlvbihzZWxmLT5ub3RpZnkuaW5zdGFuY2UsCkBAIC0yMDcsNyArMjA3LDcgQEAKIAl9CiAJcmV0ID0gaXJsbXBfZGF0YV9yZXF1ZXN0KHNlbGYtPmxzYXAsIHNrYik7CiAJaWYgKHJldCkgewotCQlJUkRBX0VSUk9SKCIlcygpLCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfRVJST1IoIiVzKCksIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkvKiBpcmxtcF9kYXRhX3JlcXVlc3QgYWxyZWFkeSBmcmVlIHRoZSBwYWNrZXQgKi8KIAl9CiAKQEAgLTIyNSw3ICsyMjUsNyBAQAogewogCXN0cnVjdCBpcmNvbW1fY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV9jYiAqKSBpbnN0YW5jZTsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9NQUdJQywgcmV0dXJuIC0xOyk7CkBAIC0yNTUsNyArMjU1LDcgQEAKIAlzdHJ1Y3QgaXJjb21tX2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fY2IgKikgaW5zdGFuY2U7CiAJc3RydWN0IGlyY29tbV9pbmZvIGluZm87CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybjspOwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJc3RydWN0IGlyY29tbV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX2NiICopaW5zdGFuY2U7CiAJc3RydWN0IGlyY29tbV9pbmZvIGluZm87CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybjspOwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJc3RydWN0IGlyY29tbV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX2NiICopIGluc3RhbmNlOwogCXN0cnVjdCBpcmNvbW1faW5mbyBpbmZvOwogCi0JSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm47KTsKQEAgLTM0MSw3ICszNDEsNyBAQAogewogCW5vdGlmeV90IG5vdGlmeTsKIAotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAkvKiBSZWdpc3RlciBjYWxsYmFja3MgKi8KIAlpcmRhX25vdGlmeV9pbml0KCZub3RpZnkpOwpAQCAtMzU0LDcgKzM1NCw3IEBACiAKIAlzZWxmLT5sc2FwID0gaXJsbXBfb3Blbl9sc2FwKExTQVBfQU5ZLCAmbm90aWZ5LCAwKTsKIAlpZiAoIXNlbGYtPmxzYXApIHsKLQkJSVJEQV9ERUJVRygwLCIlc2ZhaWxlZCB0byBhbGxvY2F0ZSB0c2FwXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygwLCIlc2ZhaWxlZCB0byBhbGxvY2F0ZSB0c2FwXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gLTE7CiAJfQogCXNlbGYtPnNsc2FwX3NlbCA9IHNlbGYtPmxzYXAtPnNsc2FwX3NlbDsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fcGFyYW0uYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fcGFyYW0uYwppbmRleCA1OThkY2JlLi5kNTdhZWZkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3BhcmFtLmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9wYXJhbS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBjb3VudDsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJY291bnQgPSBpcmRhX3BhcmFtX2luc2VydChzZWxmLCBwaSwgc2tiX3RhaWxfcG9pbnRlcihza2IpLAogCQkJCSAgc2tiX3RhaWxyb29tKHNrYiksICZpcmNvbW1fcGFyYW1faW5mbyk7CiAJaWYgKGNvdW50IDwgMCkgewotCQlJUkRBX1dBUk5JTkcoIiVzKCksIG5vIHJvb20gZm9yIHBhcmFtZXRlciFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfV0FSTklORygiJXMoKSwgbm8gcm9vbSBmb3IgcGFyYW1ldGVyIVxuIiwgX19mdW5jX18pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgc2tiLT5sZW49JWRcbiIsIF9fRlVOQ1RJT05fXyAsIHNrYi0+bGVuKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBza2ItPmxlbj0lZFxuIiwgX19mdW5jX18gLCBza2ItPmxlbik7CiAKIAlpZiAoZmx1c2gpIHsKIAkJLyogaXJjb21tX3R0eV9kb19zb2Z0aW50IHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0ICovCkBAIC0xNzksMTAgKzE3OSwxMCBAQAogCXNlcnZpY2VfdHlwZSAmPSBzZWxmLT5zZXJ2aWNlX3R5cGU7CiAJaWYgKCFzZXJ2aWNlX3R5cGUpIHsKIAkJSVJEQV9ERUJVRygyLAotCQkJICAgIiVzKCksIE5vIGNvbW1vbiBzZXJ2aWNlIHR5cGUgdG8gdXNlIVxuIiwgX19GVU5DVElPTl9fICk7CisJCQkgICAiJXMoKSwgTm8gY29tbW9uIHNlcnZpY2UgdHlwZSB0byB1c2UhXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gLTE7CiAJfQotCUlSREFfREVCVUcoMCwgIiVzKCksIHNlcnZpY2VzIGluIGNvbW1vbj0lMDJ4XG4iLCBfX0ZVTkNUSU9OX18gLAorCUlSREFfREVCVUcoMCwgIiVzKCksIHNlcnZpY2VzIGluIGNvbW1vbj0lMDJ4XG4iLCBfX2Z1bmNfXyAsCiAJCSAgIHNlcnZpY2VfdHlwZSk7CiAKIAkvKgpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJZWxzZSBpZiAoc2VydmljZV90eXBlICYgSVJDT01NXzNfV0lSRV9SQVcpCiAJCXNlbGYtPnNldHRpbmdzLnNlcnZpY2VfdHlwZSA9IElSQ09NTV8zX1dJUkVfUkFXOwogCi0JSVJEQV9ERUJVRygwLCAiJXMoKSwgcmVzdWx0aW5nIHNlcnZpY2UgdHlwZT0weCUwMnhcbiIsIF9fRlVOQ1RJT05fXyAsCisJSVJEQV9ERUJVRygwLCAiJXMoKSwgcmVzdWx0aW5nIHNlcnZpY2UgdHlwZT0weCUwMnhcbiIsIF9fZnVuY19fICwKIAkJICAgc2VsZi0+c2V0dGluZ3Muc2VydmljZV90eXBlKTsKIAogCS8qCkBAIC0yNDAsNyArMjQwLDcgQEAKIAllbHNlIHsKIAkJc2VsZi0+c2V0dGluZ3MucG9ydF90eXBlID0gKF9fdTgpIHBhcmFtLT5wdi5pOwogCi0JCUlSREFfREVCVUcoMCwgIiVzKCksIHBvcnQgdHlwZT0lZFxuIiwgX19GVU5DVElPTl9fICwKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgcG9ydCB0eXBlPSVkXG4iLCBfX2Z1bmNfXyAsCiAJCQkgICBzZWxmLT5zZXR0aW5ncy5wb3J0X3R5cGUpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI2MCw5ICsyNjAsOSBAQAogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybiAtMTspOwogCiAJaWYgKGdldCkgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBub3QgaW1wIVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIG5vdCBpbXAhXG4iLCBfX2Z1bmNfXyApOwogCX0gZWxzZSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIHBvcnQtbmFtZT0lc1xuIiwgX19GVU5DVElPTl9fICwgcGFyYW0tPnB2LmMpOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBwb3J0LW5hbWU9JXNcbiIsIF9fZnVuY19fICwgcGFyYW0tPnB2LmMpOwogCQlzdHJuY3B5KHNlbGYtPnNldHRpbmdzLnBvcnRfbmFtZSwgcGFyYW0tPnB2LmMsIDMyKTsKIAl9CiAKQEAgLTI4Nyw3ICsyODcsNyBAQAogCWVsc2UKIAkJc2VsZi0+c2V0dGluZ3MuZGF0YV9yYXRlID0gcGFyYW0tPnB2Lmk7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpLCBkYXRhIHJhdGUgPSAlZFxuIiwgX19GVU5DVElPTl9fICwgcGFyYW0tPnB2LmkpOworCUlSREFfREVCVUcoMiwgIiVzKCksIGRhdGEgcmF0ZSA9ICVkXG4iLCBfX2Z1bmNfXyAsIHBhcmFtLT5wdi5pKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzMzLDcgKzMzMyw3IEBACiAJZWxzZQogCQlzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2wgPSAoX191OCkgcGFyYW0tPnB2Lmk7CiAKLQlJUkRBX0RFQlVHKDEsICIlcygpLCBmbG93IGNvbnRyb2wgPSAweCUwMnhcbiIsIF9fRlVOQ1RJT05fXyAsIChfX3U4KSBwYXJhbS0+cHYuaSk7CisJSVJEQV9ERUJVRygxLCAiJXMoKSwgZmxvdyBjb250cm9sID0gMHglMDJ4XG4iLCBfX2Z1bmNfXyAsIChfX3U4KSBwYXJhbS0+cHYuaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1OSw3ICszNTksNyBAQAogCQlzZWxmLT5zZXR0aW5ncy54b254b2ZmWzFdID0gKF9fdTE2KSBwYXJhbS0+cHYuaSA+PiA4OwogCX0KIAotCUlSREFfREVCVUcoMCwgIiVzKCksIFhPTi9YT0ZGID0gMHglMDJ4LDB4JTAyeFxuIiwgX19GVU5DVElPTl9fICwKKwlJUkRBX0RFQlVHKDAsICIlcygpLCBYT04vWE9GRiA9IDB4JTAyeCwweCUwMnhcbiIsIF9fZnVuY19fICwKIAkJICAgcGFyYW0tPnB2LmkgJiAweGZmLCBwYXJhbS0+cHYuaSA+PiA4KTsKIAogCXJldHVybiAwOwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJCXNlbGYtPnNldHRpbmdzLmVucWFja1sxXSA9IChfX3UxNikgcGFyYW0tPnB2LmkgPj4gODsKIAl9CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpLCBFTlEvQUNLID0gMHglMDJ4LDB4JTAyeFxuIiwgX19GVU5DVElPTl9fICwKKwlJUkRBX0RFQlVHKDAsICIlcygpLCBFTlEvQUNLID0gMHglMDJ4LDB4JTAyeFxuIiwgX19mdW5jX18gLAogCQkgICBwYXJhbS0+cHYuaSAmIDB4ZmYsIHBhcmFtLT5wdi5pID4+IDgpOwogCiAJcmV0dXJuIDA7CkBAIC00MDEsNyArNDAxLDcgQEAKIHN0YXRpYyBpbnQgaXJjb21tX3BhcmFtX2xpbmVfc3RhdHVzKHZvaWQgKmluc3RhbmNlLCBpcmRhX3BhcmFtX3QgKnBhcmFtLAogCQkJCSAgICBpbnQgZ2V0KQogewotCUlSREFfREVCVUcoMiwgIiVzKCksIG5vdCBpbXBsLlxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKSwgbm90IGltcGwuXG4iLCBfX2Z1bmNfXyApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NjIsNyArNDYyLDcgQEAKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBpbnN0YW5jZTsKIAlfX3U4IGRjZTsKIAotCUlSREFfREVCVUcoMSwgIiVzKCksIGRjZSA9IDB4JTAyeFxuIiwgX19GVU5DVElPTl9fICwgKF9fdTgpIHBhcmFtLT5wdi5pKTsKKwlJUkRBX0RFQlVHKDEsICIlcygpLCBkY2UgPSAweCUwMnhcbiIsIF9fZnVuY19fICwgKF9fdTgpIHBhcmFtLT5wdi5pKTsKIAogCWRjZSA9IChfX3U4KSBwYXJhbS0+cHYuaTsKIApAQCAtNDc0LDcgKzQ3NCw3IEBACiAJLyogQ2hlY2sgaWYgYW55IG9mIHRoZSBzZXR0aW5ncyBoYXZlIGNoYW5nZWQgKi8KIAlpZiAoZGNlICYgMHgwZikgewogCQlpZiAoZGNlICYgSVJDT01NX0RFTFRBX0NUUykgewotCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgQ1RTIFxuIiwgX19GVU5DVElPTl9fICk7CisJCQlJUkRBX0RFQlVHKDIsICIlcygpLCBDVFMgXG4iLCBfX2Z1bmNfXyApOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0cC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHAuYwppbmRleCA3MTJlYWZkLi42ZTY1MDlmIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0cC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHRwLmMKQEAgLTc4LDcgKzc4LDcgQEAKIHsKIAlub3RpZnlfdCBub3RpZnk7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJLyogUmVnaXN0ZXIgY2FsbGJhY2tzICovCiAJaXJkYV9ub3RpZnlfaW5pdCgmbm90aWZ5KTsKQEAgLTkzLDcgKzkzLDcgQEAKIAlzZWxmLT50c2FwID0gaXJ0dHBfb3Blbl90c2FwKExTQVBfQU5ZLCBERUZBVUxUX0lOSVRJQUxfQ1JFRElULAogCQkJCSAgICAgJm5vdGlmeSk7CiAJaWYgKCFzZWxmLT50c2FwKSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzZmFpbGVkIHRvIGFsbG9jYXRlIHRzYXBcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDAsICIlc2ZhaWxlZCB0byBhbGxvY2F0ZSB0c2FwXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gLTE7CiAJfQogCXNlbGYtPnNsc2FwX3NlbCA9IHNlbGYtPnRzYXAtPnN0c2FwX3NlbDsKQEAgLTEyMSw3ICsxMjEsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCS8qIERvbid0IGZvcmdldCB0byByZWZjb3VudCBpdCAtIHNob3VsZCBiZSBOVUxMIGFueXdheSAqLwogCWlmKHVzZXJkYXRhKQpAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJaW50IHJldDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAkvKiBEb24ndCBmb3JnZXQgdG8gcmVmY291bnQgaXQgLSBzaG91bGQgYmUgTlVMTCBhbnl3YXkgKi8KIAlpZih1c2VyZGF0YSkKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiAJSVJEQV9BU1NFUlQoc2tiICE9IE5VTEwsIHJldHVybiAtMTspOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgY2xlbj0lZFxuIiwgX19GVU5DVElPTl9fICwgY2xlbik7CisJSVJEQV9ERUJVRygyLCAiJXMoKSwgY2xlbj0lZFxuIiwgX19mdW5jX18gLCBjbGVuKTsKIAogCS8qCiAJICogSW5zZXJ0IGNsZW4gZmllbGQsIGN1cnJlbnRseSB3ZSBlaXRoZXIgc2VuZCBkYXRhIG9ubHksIG9yIGNvbnRyb2wKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAJcmV0ID0gaXJ0dHBfZGF0YV9yZXF1ZXN0KHNlbGYtPnRzYXAsIHNrYik7CiAJaWYgKHJldCkgewotCQlJUkRBX0VSUk9SKCIlcygpLCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfRVJST1IoIiVzKCksIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkvKiBpcnR0cF9kYXRhX3JlcXVlc3QgYWxyZWFkeSBmcmVlIHRoZSBwYWNrZXQgKi8KIAl9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQAogewogCXN0cnVjdCBpcmNvbW1fY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV9jYiAqKSBpbnN0YW5jZTsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9NQUdJQywgcmV0dXJuIC0xOyk7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzdHJ1Y3QgaXJjb21tX2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fY2IgKikgaW5zdGFuY2U7CiAJc3RydWN0IGlyY29tbV9pbmZvIGluZm87CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybjspOwpAQCAtMjQwLDcgKzI0MCw3IEBACiAKIAlpZiAobWF4X3NkdV9zaXplICE9IFRUUF9TQVJfRElTQUJMRSkgewogCQlJUkRBX0VSUk9SKCIlcygpLCBTQVIgbm90IGFsbG93ZWQgZm9yIElyQ09NTSFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI3Miw3ICsyNzIsNyBAQAogCXN0cnVjdCBpcmNvbW1fY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV9jYiAqKWluc3RhbmNlOwogCXN0cnVjdCBpcmNvbW1faW5mbyBpbmZvOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm47KTsKQEAgLTI4MSw3ICsyODEsNyBAQAogCiAJaWYgKG1heF9zZHVfc2l6ZSAhPSBUVFBfU0FSX0RJU0FCTEUpIHsKIAkJSVJEQV9FUlJPUigiJXMoKSwgU0FSIG5vdCBhbGxvd2VkIGZvciBJckNPTU0hXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zMzEsNyArMzMxLDcgQEAKIAlzdHJ1Y3QgaXJjb21tX2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fY2IgKikgaW5zdGFuY2U7CiAJc3RydWN0IGlyY29tbV9pbmZvIGluZm87CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fTUFHSUMsIHJldHVybjspOwpAQCAtMzU2LDcgKzM1Niw3IEBACiB7CiAJc3RydWN0IGlyY29tbV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX2NiICopIGluc3RhbmNlOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX01BR0lDLCByZXR1cm47KTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCmluZGV4IGJlNjI3ZTEuLmQyNjIwNDEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWlyY29tbV90dHkgPSBoYXNoYmluX25ldyhIQl9MT0NLKTsKIAlpZiAoaXJjb21tX3R0eSA9PSBOVUxMKSB7Ci0JCUlSREFfRVJST1IoIiVzKCksIGNhbid0IGFsbG9jYXRlIGhhc2hiaW4hXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0VSUk9SKCIlcygpLCBjYW4ndCBhbGxvY2F0ZSBoYXNoYmluIVxuIiwgX19mdW5jX18pOwogCQlwdXRfdHR5X2RyaXZlcihkcml2ZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xMzMsNyArMTMzLDcgQEAKIAl0dHlfc2V0X29wZXJhdGlvbnMoZHJpdmVyLCAmb3BzKTsKIAlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpKSB7CiAJCUlSREFfRVJST1IoIiVzKCk6IENvdWxkbid0IHJlZ2lzdGVyIHNlcmlhbCBkcml2ZXJcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlwdXRfdHR5X2RyaXZlcihkcml2ZXIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQyLDcgKzE0Miw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBfX2lyY29tbV90dHlfY2xlYW51cChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZikKIHsKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKQEAgLTE2MywxMiArMTYzLDEyIEBACiB7CiAJaW50IHJldDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlyZXQgPSB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCUlSREFfRVJST1IoIiVzKCksIGZhaWxlZCB0byB1bnJlZ2lzdGVyIGRyaXZlclxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE4NywxNCArMTg3LDE0IEBACiAJbm90aWZ5X3Qgbm90aWZ5OwogCWludCByZXQgPSAtRU5PREVWOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuIC0xOyk7CiAKIAkvKiBDaGVjayBpZiBhbHJlYWR5IG9wZW4gKi8KIAlpZiAodGVzdF9hbmRfc2V0X2JpdChBU1lOQ19CX0lOSVRJQUxJWkVELCAmc2VsZi0+ZmxhZ3MpKSB7Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIGFscmVhZHkgb3BlbiBzbyBicmVhayBvdXQhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgYWxyZWFkeSBvcGVuIHNvIGJyZWFrIG91dCFcbiIsIF9fZnVuY19fICk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjI0LDcgKzIyNCw3IEBACiAJLyogQ29ubmVjdCBJckNPTU0gbGluayB3aXRoIHJlbW90ZSBkZXZpY2UgKi8KIAlyZXQgPSBpcmNvbW1fdHR5X2F0dGFjaF9jYWJsZShzZWxmKTsKIAlpZiAocmV0IDwgMCkgewotCQlJUkRBX0VSUk9SKCIlcygpLCBlcnJvciBhdHRhY2hpbmcgY2FibGUhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0VSUk9SKCIlcygpLCBlcnJvciBhdHRhY2hpbmcgY2FibGUhXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMjQ5LDcgKzI0OSw3IEBACiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCXR0eSA9IHNlbGYtPnR0eTsKIApAQCAtMjYwLDEyICsyNjAsMTIgQEAKIAlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgfHwgdHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpewogCQkvKiBub25ibG9jayBtb2RlIGlzIHNldCBvciBwb3J0IGlzIG5vdCBlbmFibGVkICovCiAJCXNlbGYtPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIE9fTk9OQkxPQ0sgcmVxdWVzdGVkIVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIE9fTk9OQkxPQ0sgcmVxdWVzdGVkIVxuIiwgX19mdW5jX18gKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgewotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBkb2luZyBDTE9DQUwhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZG9pbmcgQ0xPQ0FMIVxuIiwgX19mdW5jX18gKTsKIAkJZG9fY2xvY2FsID0gMTsKIAl9CiAKQEAgLTM2OCw3ICszNjgsNyBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJaW50IHJldDsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlsaW5lID0gdHR5LT5pbmRleDsKIAlpZiAoKGxpbmUgPCAwKSB8fCAobGluZSA+PSBJUkNPTU1fVFRZX1BPUlRTKSkgewpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCS8qIE5vLCBzbyBtYWtlIG5ldyBpbnN0YW5jZSAqLwogCQlzZWxmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyY29tbV90dHlfY2IpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHNlbGYgPT0gTlVMTCkgewotCQkJSVJEQV9FUlJPUigiJXMoKSwga21hbGxvYyBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9FUlJPUigiJXMoKSwga21hbGxvYyBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCkBAIC00MjAsNyArNDIwLDcgQEAKIAlzZWxmLT50dHkgPSB0dHk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCUlSREFfREVCVUcoMSwgIiVzKCksICVzJWQsIGNvdW50ID0gJWRcbiIsIF9fRlVOQ1RJT05fXyAsIHR0eS0+ZHJpdmVyLT5uYW1lLAorCUlSREFfREVCVUcoMSwgIiVzKCksICVzJWQsIGNvdW50ID0gJWRcbiIsIF9fZnVuY19fICwgdHR5LT5kcml2ZXItPm5hbWUsCiAJCSAgIHNlbGYtPmxpbmUsIHNlbGYtPm9wZW5fY291bnQpOwogCiAJLyogTm90IHJlYWxseSB1c2VkIGJ5IHVzLCBidXQgbGV0cyBkbyBpdCBhbnl3YXkgKi8KQEAgLTQ0Miw3ICs0NDIsNyBAQAogCiAJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc2VsZi0+Y2xvc2Vfd2FpdCwgIXRlc3RfYml0KEFTWU5DX0JfQ0xPU0lORywgJnNlbGYtPmZsYWdzKSkpIHsKIAkJCUlSREFfV0FSTklORygiJXMgLSBnb3Qgc2lnbmFsIHdoaWxlIGJsb2NraW5nIG9uIEFTWU5DX0NMT1NJTkchXG4iLAotCQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCX0KIApAQCAtNDYwLDkgKzQ2MCw5IEBACiAJCXNlbGYtPnNldHRpbmdzLnNlcnZpY2VfdHlwZSA9IElSQ09NTV85X1dJUkU7IC8qIDkgd2lyZSBhcyBkZWZhdWx0ICovCiAJCS8qIEphbiBLaXN6a2EgLT4gYWRkIERTUi9SSSAtPiBDb25mb3JtIHRvIElyQ09NTSBzcGVjICovCiAJCXNlbGYtPnNldHRpbmdzLmRjZSA9IElSQ09NTV9DVFMgfCBJUkNPTU1fQ0QgfCBJUkNPTU1fRFNSIHwgSVJDT01NX1JJOyAvKiBEZWZhdWx0IGxpbmUgc2V0dGluZ3MgKi8KLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJDT01NIGRldmljZVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIElyQ09NTSBkZXZpY2VcbiIsIF9fZnVuY19fICk7CiAJfSBlbHNlIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMUFQgZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMUFQgZGV2aWNlXG4iLCBfX2Z1bmNfXyApOwogCQlzZWxmLT5zZXJ2aWNlX3R5cGUgPSBJUkNPTU1fM19XSVJFX1JBVzsKIAkJc2VsZi0+c2V0dGluZ3Muc2VydmljZV90eXBlID0gSVJDT01NXzNfV0lSRV9SQVc7IC8qIERlZmF1bHQgKi8KIAl9CkBAIC00NzQsNyArNDc0LDcgQEAKIAlyZXQgPSBpcmNvbW1fdHR5X2Jsb2NrX3RpbF9yZWFkeShzZWxmLCBmaWxwKTsKIAlpZiAocmV0KSB7CiAJCUlSREFfREVCVUcoMiwKLQkJICAgICAgIiVzKCksIHJldHVybmluZyBhZnRlciBibG9ja190aWxfcmVhZHkgd2l0aCAlZFxuIiwgX19GVU5DVElPTl9fICwKKwkJICAgICAgIiVzKCksIHJldHVybmluZyBhZnRlciBibG9ja190aWxfcmVhZHkgd2l0aCAlZFxuIiwgX19mdW5jX18gLAogCQkgICAgICByZXQpOwogCiAJCXJldHVybiByZXQ7CkBAIC00OTMsNyArNDkzLDcgQEAKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJaWYgKCF0dHkpCiAJCXJldHVybjsKQEAgLTUwNiw3ICs1MDYsNyBAQAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgcmV0dXJuaW5nIDFcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCByZXR1cm5pbmcgMVxuIiwgX19mdW5jX18gKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTE5LDIwICs1MTksMjAgQEAKIAkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCiAJCSAqLwogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBiYWQgc2VyaWFsIHBvcnQgY291bnQ7ICIKLQkJCSAgICJ0dHktPmNvdW50IGlzIDEsIHN0YXRlLT5jb3VudCBpcyAlZFxuIiwgX19GVU5DVElPTl9fICwKKwkJCSAgICJ0dHktPmNvdW50IGlzIDEsIHN0YXRlLT5jb3VudCBpcyAlZFxuIiwgX19mdW5jX18gLAogCQkJICAgc2VsZi0+b3Blbl9jb3VudCk7CiAJCXNlbGYtPm9wZW5fY291bnQgPSAxOwogCX0KIAogCWlmICgtLXNlbGYtPm9wZW5fY291bnQgPCAwKSB7CiAJCUlSREFfRVJST1IoIiVzKCksIGJhZCBzZXJpYWwgcG9ydCBjb3VudCBmb3IgdHR5cyVkOiAlZFxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgc2VsZi0+bGluZSwgc2VsZi0+b3Blbl9jb3VudCk7CisJCQkgICBfX2Z1bmNfXywgc2VsZi0+bGluZSwgc2VsZi0+b3Blbl9jb3VudCk7CiAJCXNlbGYtPm9wZW5fY291bnQgPSAwOwogCX0KIAlpZiAoc2VsZi0+b3Blbl9jb3VudCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JCUlSREFfREVCVUcoMCwgIiVzKCksIG9wZW4gY291bnQgPiAwXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgb3BlbiBjb3VudCA+IDBcbiIsIF9fZnVuY19fICk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYwOCw3ICs2MDgsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKmN0cmxfc2tiOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmICghc2VsZiB8fCBzZWxmLT5tYWdpYyAhPSBJUkNPTU1fVFRZX01BR0lDKQogCQlyZXR1cm47CkBAIC02NzgsNyArNjc4LDcgQEAKIAlpbnQgbGVuID0gMDsKIAlpbnQgc2l6ZTsKIAotCUlSREFfREVCVUcoMiwgIiVzKCksIGNvdW50PSVkLCBod19zdG9wcGVkPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCBjb3VudCwKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBjb3VudD0lZCwgaHdfc3RvcHBlZD0lZFxuIiwgX19mdW5jX18gLCBjb3VudCwKIAkJICAgdHR5LT5od19zdG9wcGVkKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CkBAIC03MDEsNyArNzAxLDcgQEAKIAkgKiB3ZSBkb24ndCBtZXNzIHVwIHRoZSBvcmlnaW5hbCAic2FmZSBza2IiIChzZWUgdHhfZGF0YV9zaXplKS4KIAkgKiBKZWFuIElJICovCiAJaWYgKHNlbGYtPm1heF9oZWFkZXJfc2l6ZSA9PSBJUkNPTU1fVFRZX0hEUl9VTklOSVRJQUxJU0VEKSB7Ci0JCUlSREFfREVCVUcoMSwgIiVzKCkgOiBub3QgaW5pdGlhbGlzZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCkgOiBub3QgaW5pdGlhbGlzZWRcbiIsIF9fZnVuY19fKTsKICNpZmRlZiBJUkNPTU1fTk9fVFhfQkVGT1JFX0lOSVQKIAkJLyogV2UgZGlkbid0IGNvbnN1bWUgYW55dGhpbmcsIFRUWSB3aWxsIHJldHJ5ICovCiAJCXJldHVybiAwOwpAQCAtODMwLDcgKzgzMCw3IEBACiAJCQlyZXQgPSBzZWxmLT5tYXhfZGF0YV9zaXplOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogCX0KLQlJUkRBX0RFQlVHKDIsICIlcygpLCByZXQ9JWRcbiIsIF9fRlVOQ1RJT05fXyAsIHJldCk7CisJSVJEQV9ERUJVRygyLCAiJXMoKSwgcmV0PSVkXG4iLCBfX2Z1bmNfXyAsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODQ3LDcgKzg0Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBvcmlnX2ppZmZpZXMsIHBvbGxfdGltZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CkBAIC04ODIsNyArODgyLDcgQEAKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSB0dHktPmRyaXZlcl9kYXRhOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CkBAIC05MTMsNyArOTEzLDcgQEAKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSB0dHktPmRyaXZlcl9kYXRhOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CkBAIC05MjgsNyArOTI4LDcgQEAKIAkJc2VsZi0+c2V0dGluZ3MuZHRlIHw9IChJUkNPTU1fUlRTfElSQ09NTV9ERUxUQV9SVFMpOwogCiAJCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9EVEUsIFRSVUUpOwotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBGTE9XX1NUQVJUXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRkxPV19TVEFSVFxuIiwgX19mdW5jX18gKTsKIAl9CiAJaXJjb21tX2Zsb3dfcmVxdWVzdChzZWxmLT5pcmNvbW0sIEZMT1dfU1RBUlQpOwogfQpAQCAtOTY1LDcgKzk2NSw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKIAotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChBU1lOQ19CX0lOSVRJQUxJWkVELCAmc2VsZi0+ZmxhZ3MpKQogCQlyZXR1cm47CkBAIC0xMDA4LDcgKzEwMDgsNyBAQAogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybjspOwpAQCAtMTAzNyw3ICsxMDM3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgaXJjb21tX3R0eV9zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCiB7Ci0JSVJEQV9ERUJVRygwLCAiJXMoKSwgbm90IGltcGxcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKCksIG5vdCBpbXBsXG4iLCBfX2Z1bmNfXyApOwogfQogCiAvKgpAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBzdGF0dXM7CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKQEAgLTEwOTUsMTQgKzEwOTUsMTQgQEAKIAl9CiAJaWYgKChzZWxmLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSAmJiAoc3RhdHVzICYgSVJDT01NX0RFTFRBX0NEKSkgewogCQlJUkRBX0RFQlVHKDIsCi0JCQkgICAiJXMoKSwgaXJjb21tJWQgQ0Qgbm93ICVzLi4uXG4iLCBfX0ZVTkNUSU9OX18gLCBzZWxmLT5saW5lLAorCQkJICAgIiVzKCksIGlyY29tbSVkIENEIG5vdyAlcy4uLlxuIiwgX19mdW5jX18gLCBzZWxmLT5saW5lLAogCQkJICAgKHN0YXR1cyAmIElSQ09NTV9DRCkgPyAib24iIDogIm9mZiIpOwogCiAJCWlmIChzdGF0dXMgJiBJUkNPTU1fQ0QpIHsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2VsZi0+b3Blbl93YWl0KTsKIAkJfSBlbHNlIHsKIAkJCUlSREFfREVCVUcoMiwKLQkJCQkgICAiJXMoKSwgRG9pbmcgc2VyaWFsIGhhbmd1cC4uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJCQkgICAiJXMoKSwgRG9pbmcgc2VyaWFsIGhhbmd1cC4uXG4iLCBfX2Z1bmNfXyApOwogCQkJaWYgKHR0eSkKIAkJCQl0dHlfaGFuZ3VwKHR0eSk7CiAKQEAgLTExMTQsNyArMTExNCw3IEBACiAJCWlmICh0dHktPmh3X3N0b3BwZWQpIHsKIAkJCWlmIChzdGF0dXMgJiBJUkNPTU1fQ1RTKSB7CiAJCQkJSVJEQV9ERUJVRygyLAotCQkJCQkgICAiJXMoKSwgQ1RTIHR4IHN0YXJ0Li4uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJCQkJICAgIiVzKCksIENUUyB0eCBzdGFydC4uLlxuIiwgX19mdW5jX18gKTsKIAkJCQl0dHktPmh3X3N0b3BwZWQgPSAwOwogCiAJCQkJLyogV2FrZSB1cCBwcm9jZXNzZXMgYmxvY2tlZCBvbiBvcGVuICovCkBAIC0xMTI2LDcgKzExMjYsNyBAQAogCQl9IGVsc2UgewogCQkJaWYgKCEoc3RhdHVzICYgSVJDT01NX0NUUykpIHsKIAkJCQlJUkRBX0RFQlVHKDIsCi0JCQkJCSAgICIlcygpLCBDVFMgdHggc3RvcC4uLlxuIiwgX19GVU5DVElPTl9fICk7CisJCQkJCSAgICIlcygpLCBDVFMgdHggc3RvcC4uLlxuIiwgX19mdW5jX18gKTsKIAkJCQl0dHktPmh3X3N0b3BwZWQgPSAxOwogCQkJfQogCQl9CkBAIC0xMTQ0LDE0ICsxMTQ0LDE0IEBACiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaW5zdGFuY2U7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAKIAlpZiAoIXNlbGYtPnR0eSkgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBubyB0dHkhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbm8gdHR5IVxuIiwgX19mdW5jX18gKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTYyLDcgKzExNjIsNyBAQAogCSAqIHBhcmFtcywgd2UgY2FuIGp1c3QgYXMgd2VsbCBkZWNsYXJlIHRoZSBoYXJkd2FyZSBmb3IgcnVubmluZy4KIAkgKi8KIAlpZiAoc2VsZi0+dHR5LT5od19zdG9wcGVkICYmIChzZWxmLT5mbG93ID09IEZMT1dfU1RBUlQpKSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIHBvbGxpbmcgZm9yIGxpbmUgc2V0dGluZ3MhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgcG9sbGluZyBmb3IgbGluZSBzZXR0aW5ncyFcbiIsIF9fZnVuY19fICk7CiAJCWlyY29tbV9wYXJhbV9yZXF1ZXN0KHNlbGYsIElSQ09NTV9QT0xMLCBUUlVFKTsKIAogCQkvKiBXZSBjYW4ganVzdCBhcyB3ZWxsIGRlY2xhcmUgdGhlIGhhcmR3YXJlIGZvciBydW5uaW5nICovCkBAIC0xMTk0LDcgKzExOTQsNyBAQAogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOwogCWludCBjbGVuOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuIC0xOyk7CkBAIC0xMjMwLDcgKzEyMzAsNyBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZMT1dfU1RBUlQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIGh3IHN0YXJ0IVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIGh3IHN0YXJ0IVxuIiwgX19mdW5jX18gKTsKIAkJdHR5LT5od19zdG9wcGVkID0gMDsKIAogCQkvKiBpcmNvbW1fdHR5X2RvX3NvZnRpbnQgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIHJlc3QgKi8KQEAgLTEyMzgsNyArMTIzOCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6ICAvKiBJZiB3ZSBnZXQgaGVyZSwgc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcsIGJldHRlciBzdG9wICovCiAJY2FzZSBGTE9XX1NUT1A6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIGh3IHN0b3BwZWQhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgaHcgc3RvcHBlZCFcbiIsIF9fZnVuY19fICk7CiAJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKaW5kZXggYjVhMTM4OC4uOTAzMmExZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKQEAgLTEyOSwxNCArMTI5LDE0IEBACiAgKi8KIGludCBpcmNvbW1fdHR5X2F0dGFjaF9jYWJsZShzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZikKIHsKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm4gLTE7KTsKIAogCS8qIENoZWNrIGlmIHNvbWVib2R5IGhhcyBhbHJlYWR5IGNvbm5lY3RlZCB0byB1cyAqLwogCWlmIChpcmNvbW1faXNfY29ubmVjdGVkKHNlbGYtPmlyY29tbSkpIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgYWxyZWFkeSBjb25uZWN0ZWQhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgYWxyZWFkeSBjb25uZWN0ZWQhXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogICovCiB2b2lkIGlyY29tbV90dHlfZGV0YWNoX2NhYmxlKHN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmKQogewotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybjspOwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJX191OCBvY3Rfc2VxWzZdOwogCV9fdTE2IGhpbnRzOwogCi0JSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CkBAIC0zMDgsMTYgKzMwOCwxNiBAQAogCSAqIFNldCBkZWZhdWx0IHZhbHVlcywgYnV0IG9ubHkgaWYgdGhlIGFwcGxpY2F0aW9uIGZvciBzb21lIHJlYXNvbgogCSAqIGhhdmVuJ3Qgc2V0IHRoZW0gYWxyZWFkeQogCSAqLwotCUlSREFfREVCVUcoMiwgIiVzKCksIGRhdGEtcmF0ZSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18gLAorCUlSREFfREVCVUcoMiwgIiVzKCksIGRhdGEtcmF0ZSA9ICVkXG4iLCBfX2Z1bmNfXyAsCiAJCSAgIHNlbGYtPnNldHRpbmdzLmRhdGFfcmF0ZSk7CiAJaWYgKCFzZWxmLT5zZXR0aW5ncy5kYXRhX3JhdGUpCiAJCXNlbGYtPnNldHRpbmdzLmRhdGFfcmF0ZSA9IDk2MDA7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKSwgZGF0YS1mb3JtYXQgPSAlZFxuIiwgX19GVU5DVElPTl9fICwKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBkYXRhLWZvcm1hdCA9ICVkXG4iLCBfX2Z1bmNfXyAsCiAJCSAgIHNlbGYtPnNldHRpbmdzLmRhdGFfZm9ybWF0KTsKIAlpZiAoIXNlbGYtPnNldHRpbmdzLmRhdGFfZm9ybWF0KQogCQlzZWxmLT5zZXR0aW5ncy5kYXRhX2Zvcm1hdCA9IElSQ09NTV9XU0laRV84OyAgLyogOE4xICovCiAKLQlJUkRBX0RFQlVHKDIsICIlcygpLCBmbG93LWNvbnRyb2wgPSAlZFxuIiwgX19GVU5DVElPTl9fICwKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBmbG93LWNvbnRyb2wgPSAlZFxuIiwgX19mdW5jX18gLAogCQkgICBzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2wpOwogCS8qc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sID0gSVJDT01NX1JUU19DVFNfSU58SVJDT01NX1JUU19DVFNfT1VUOyovCiAKQEAgLTM2Miw3ICszNjIsNyBAQAogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmOwogCXN0cnVjdCBpcmNvbW1fdHR5X2luZm8gaW5mbzsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAkvKiBJbXBvcnRhbnQgbm90ZSA6CiAJICogV2UgbmVlZCB0byBkcm9wIGFsbCBwYXNzaXZlIGRpc2NvdmVyaWVzLgpAQCAtMzk4LDcgKzM5OCw3IEBACiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaW5zdGFuY2U7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKQEAgLTQyOCw3ICs0MjgsNyBAQAogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIHByaXY7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKQEAgLTQzOSwxMyArNDM5LDEzIEBACiAKIAkvKiBDaGVjayBpZiByZXF1ZXN0IHN1Y2NlZWRlZCAqLwogCWlmIChyZXN1bHQgIT0gSUFTX1NVQ0NFU1MpIHsKLQkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZ290IE5VTEwgdmFsdWUhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZ290IE5VTEwgdmFsdWUhXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm47CiAJfQogCiAJc3dpdGNoICh2YWx1ZS0+dHlwZSkgewogCWNhc2UgSUFTX09DVF9TRVE6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIGdvdCBvY3RldCBzZXF1ZW5jZVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIGdvdCBvY3RldCBzZXF1ZW5jZVxuIiwgX19mdW5jX18gKTsKIAogCQlpcmRhX3BhcmFtX2V4dHJhY3RfYWxsKHNlbGYsIHZhbHVlLT50Lm9jdF9zZXEsIHZhbHVlLT5sZW4sCiAJCQkJICAgICAgICZpcmNvbW1fcGFyYW1faW5mbyk7CkBAIC00NTUsMjEgKzQ1NSwyMSBAQAogCQlicmVhazsKIAljYXNlIElBU19JTlRFR0VSOgogCQkvKiBHb3QgTFNBUCBzZWxlY3RvciAqLwotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBnb3QgbHNhcHNlbCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18gLAorCQlJUkRBX0RFQlVHKDIsICIlcygpLCBnb3QgbHNhcHNlbCA9ICVkXG4iLCBfX2Z1bmNfXyAsCiAJCQkgICB2YWx1ZS0+dC5pbnRlZ2VyKTsKIAogCQlpZiAodmFsdWUtPnQuaW50ZWdlciA9PSAtMSkgewotCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgaW52YWxpZCB2YWx1ZSFcbiIsIF9fRlVOQ1RJT05fXyApOworCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgaW52YWxpZCB2YWx1ZSFcbiIsIF9fZnVuY19fICk7CiAJCX0gZWxzZQogCQkJc2VsZi0+ZGxzYXBfc2VsID0gdmFsdWUtPnQuaW50ZWdlcjsKIAogCQlpcmNvbW1fdHR5X2RvX2V2ZW50KHNlbGYsIElSQ09NTV9UVFlfR09UX0xTQVBTRUwsIE5VTEwsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIElBU19NSVNTSU5HOgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBnb3QgSUFTX01JU1NJTkdcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBnb3QgSUFTX01JU1NJTkdcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIGdvdCB1bmtub3duIHR5cGUhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZ290IHVua25vd24gdHlwZSFcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCX0KIAlpcmlhc19kZWxldGVfdmFsdWUodmFsdWUpOwpAQCAtNDg5LDcgKzQ4OSw3IEBACiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaW5zdGFuY2U7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKQEAgLTUyMCw3ICs1MjAsNyBAQAogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOwogCWludCBjbGVuOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CkBAIC01NDksNyArNTQ5LDcgQEAKICAqLwogdm9pZCBpcmNvbW1fdHR5X2xpbmtfZXN0YWJsaXNoZWQoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYpCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CkBAIC01NjYsMTAgKzU2NiwxMCBAQAogCSAqIGxpbmUuCiAJICovCiAJaWYgKChzZWxmLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSAmJiAoKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9DVFMpID09IDApKSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIHdhaXRpbmcgZm9yIENUUyAuLi5cbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCB3YWl0aW5nIGZvciBDVFMgLi4uXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgc3RhcnRpbmcgaGFyZHdhcmUhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgc3RhcnRpbmcgaGFyZHdhcmUhXG4iLCBfX2Z1bmNfXyApOwogCiAJCXNlbGYtPnR0eS0+aHdfc3RvcHBlZCA9IDA7CiAKQEAgLTYwNyw3ICs2MDcsNyBAQAogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGRhdGE7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkNPTU1fVFRZX01BR0lDLCByZXR1cm47KTsKQEAgLTYyOCw3ICs2MjgsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuIC0xOyk7CiAKLQlJUkRBX0RFQlVHKDIsICIlczogc3RhdGU9JXMsIGV2ZW50PSVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCUlSREFfREVCVUcoMiwgIiVzOiBzdGF0ZT0lcywgZXZlbnQ9JXNcbiIsIF9fZnVuY19fICwKIAkJICAgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0sIGlyY29tbV90dHlfZXZlbnRbZXZlbnRdKTsKIAogCXJldHVybiAoKnN0YXRlW3NlbGYtPnN0YXRlXSkoc2VsZiwgZXZlbnQsIHNrYiwgaW5mbyk7CkBAIC02NDYsNyArNjQ2LDcgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybjspOwogCi0JSVJEQV9ERUJVRygyLCAiJXM6IG5leHQgc3RhdGU9JXMsIHNlcnZpY2UgdHlwZT0lZFxuIiwgX19GVU5DVElPTl9fICwKKwlJUkRBX0RFQlVHKDIsICIlczogbmV4dCBzdGF0ZT0lcywgc2VydmljZSB0eXBlPSVkXG4iLCBfX2Z1bmNfXyAsCiAJCSAgIGlyY29tbV90dHlfc3RhdGVbc2VsZi0+c3RhdGVdLCBzZWxmLT5zZXJ2aWNlX3R5cGUpOwogCSovCiAJc2VsZi0+c3RhdGUgPSBzdGF0ZTsKQEAgLTY2NSw3ICs2NjUsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JSVJEQV9ERUJVRygyLCAiJXM6IHN0YXRlPSVzLCBldmVudD0lc1xuIiwgX19GVU5DVElPTl9fICwKKwlJUkRBX0RFQlVHKDIsICIlczogc3RhdGU9JXMsIGV2ZW50PSVzXG4iLCBfX2Z1bmNfXyAsCiAJCSAgIGlyY29tbV90dHlfc3RhdGVbc2VsZi0+c3RhdGVdLCBpcmNvbW1fdHR5X2V2ZW50W2V2ZW50XSk7CiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgSVJDT01NX1RUWV9BVFRBQ0hfQ0FCTEU6CkBAIC02ODEsNyArNjgxLDcgQEAKIAogCQlpZiAoc2VsZi0+aXJpYXApIHsKIAkJCUlSREFfV0FSTklORygiJXMoKSwgYnVzeSB3aXRoIGEgcHJldmlvdXMgcXVlcnlcbiIsCi0JCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgICAgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCkBAIC03MDksNyArNzA5LDcgQEAKIAkJaXJjb21tX3R0eV9uZXh0X3N0YXRlKHNlbGYsIElSQ09NTV9UVFlfSURMRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gZXZlbnQ6ICVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1bmtub3duIGV2ZW50OiAlc1xuIiwgX19mdW5jX18gLAogCQkJICAgaXJjb21tX3R0eV9ldmVudFtldmVudF0pOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KQEAgLTcyOSw3ICs3MjksNyBAQAogewogCWludCByZXQgPSAwOwogCi0JSVJEQV9ERUJVRygyLCAiJXM6IHN0YXRlPSVzLCBldmVudD0lc1xuIiwgX19GVU5DVElPTl9fICwKKwlJUkRBX0RFQlVHKDIsICIlczogc3RhdGU9JXMsIGV2ZW50PSVzXG4iLCBfX2Z1bmNfXyAsCiAJCSAgIGlyY29tbV90dHlfc3RhdGVbc2VsZi0+c3RhdGVdLCBpcmNvbW1fdHR5X2V2ZW50W2V2ZW50XSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC03MzksNyArNzM5LDcgQEAKIAogCQlpZiAoc2VsZi0+aXJpYXApIHsKIAkJCUlSREFfV0FSTklORygiJXMoKSwgYnVzeSB3aXRoIGEgcHJldmlvdXMgcXVlcnlcbiIsCi0JCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgICAgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCkBAIC03ODIsNyArNzgyLDcgQEAKIAkJaXJjb21tX3R0eV9uZXh0X3N0YXRlKHNlbGYsIElSQ09NTV9UVFlfSURMRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gZXZlbnQ6ICVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1bmtub3duIGV2ZW50OiAlc1xuIiwgX19mdW5jX18gLAogCQkJICAgaXJjb21tX3R0eV9ldmVudFtldmVudF0pOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KQEAgLTgwMiwxNCArODAyLDE0IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDIsICIlczogc3RhdGU9JXMsIGV2ZW50PSVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCUlSREFfREVCVUcoMiwgIiVzOiBzdGF0ZT0lcywgZXZlbnQ9JXNcbiIsIF9fZnVuY19fICwKIAkJICAgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0sIGlyY29tbV90dHlfZXZlbnRbZXZlbnRdKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElSQ09NTV9UVFlfR09UX1BBUkFNRVRFUlM6CiAJCWlmIChzZWxmLT5pcmlhcCkgewogCQkJSVJEQV9XQVJOSU5HKCIlcygpLCBidXN5IHdpdGggYSBwcmV2aW91cyBxdWVyeVxuIiwKLQkJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKQEAgLTg0MCw3ICs4NDAsNyBAQAogCQlpcmNvbW1fdHR5X25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1RUWV9JRExFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgdW5rbm93biBldmVudDogJXNcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gZXZlbnQ6ICVzXG4iLCBfX2Z1bmNfXyAsCiAJCQkgICBpcmNvbW1fdHR5X2V2ZW50W2V2ZW50XSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtODYwLDcgKzg2MCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDIsICIlczogc3RhdGU9JXMsIGV2ZW50PSVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCUlSREFfREVCVUcoMiwgIiVzOiBzdGF0ZT0lcywgZXZlbnQ9JXNcbiIsIF9fZnVuY19fICwKIAkJICAgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0sIGlyY29tbV90dHlfZXZlbnRbZXZlbnRdKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTg4OSw3ICs4ODksNyBAQAogCQlpcmNvbW1fdHR5X25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1RUWV9JRExFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgdW5rbm93biBldmVudDogJXNcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gZXZlbnQ6ICVzXG4iLCBfX2Z1bmNfXyAsCiAJCQkgICBpcmNvbW1fdHR5X2V2ZW50W2V2ZW50XSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtOTA5LDcgKzkwOSw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDIsICIlczogc3RhdGU9JXMsIGV2ZW50PSVzXG4iLCBfX0ZVTkNUSU9OX18gLAorCUlSREFfREVCVUcoMiwgIiVzOiBzdGF0ZT0lcywgZXZlbnQ9JXNcbiIsIF9fZnVuY19fICwKIAkJICAgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0sIGlyY29tbV90dHlfZXZlbnRbZXZlbnRdKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTk0Myw3ICs5NDMsNyBAQAogCQlpcmNvbW1fdHR5X25leHRfc3RhdGUoc2VsZiwgSVJDT01NX1RUWV9JRExFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgdW5rbm93biBldmVudDogJXNcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gZXZlbnQ6ICVzXG4iLCBfX2Z1bmNfXyAsCiAJCQkgICBpcmNvbW1fdHR5X2V2ZW50W2V2ZW50XSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtOTgxLDEzICs5ODEsMTMgQEAKIAkJCXNlbGYtPnNldHRpbmdzLmRjZSA9IElSQ09NTV9ERUxUQV9DRDsKIAkJCWlyY29tbV90dHlfY2hlY2tfbW9kZW1fc3RhdHVzKHNlbGYpOwogCQl9IGVsc2UgewotCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgaGFuZ2luZyB1cCFcbiIsIF9fRlVOQ1RJT05fXyApOworCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgaGFuZ2luZyB1cCFcbiIsIF9fZnVuY19fICk7CiAJCQlpZiAoc2VsZi0+dHR5KQogCQkJCXR0eV9oYW5ndXAoc2VsZi0+dHR5KTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1bmtub3duIGV2ZW50OiAlc1xuIiwgX19GVU5DVElPTl9fICwKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgdW5rbm93biBldmVudDogJXNcbiIsIF9fZnVuY19fICwKIAkJCSAgIGlyY29tbV90dHlfZXZlbnRbZXZlbnRdKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9pb2N0bC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfaW9jdGwuYwppbmRleCA2MDMwOTQ3Li4yNGNiM2FhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9pb2N0bC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2lvY3RsLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAl1bnNpZ25lZCBjZmxhZywgY3ZhbDsKIAlpbnQgYmF1ZDsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlpZiAoIXNlbGYtPnR0eSB8fCAhc2VsZi0+dHR5LT50ZXJtaW9zIHx8ICFzZWxmLT5pcmNvbW0pCiAJCXJldHVybjsKQEAgLTk0LDcgKzk0LDcgQEAKIAkJc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sIHw9IElSQ09NTV9SVFNfQ1RTX0lOOwogCQkvKiBUaGlzIGdvdCBtZS4gQnVtbWVyLiBKZWFuIElJICovCiAJCWlmIChzZWxmLT5zZXJ2aWNlX3R5cGUgPT0gSVJDT01NXzNfV0lSRV9SQVcpCi0JCQlJUkRBX1dBUk5JTkcoIiVzKCksIGVuYWJsaW5nIFJUUy9DVFMgb24gbGluayB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdCAoMy13aXJlLXJhdylcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX1dBUk5JTkcoIiVzKCksIGVuYWJsaW5nIFJUUy9DVFMgb24gbGluayB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdCAoMy13aXJlLXJhdylcbiIsIF9fZnVuY19fKTsKIAl9IGVsc2UgewogCQlzZWxmLT5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7CiAJCXNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmPSB+SVJDT01NX1JUU19DVFNfSU47CkBAIC0xNTAsNyArMTUwLDcgQEAKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGludCBjZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgogCSAgICAoUkVMRVZBTlRfSUZMQUcodHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PQpAQCAtMTk5LDcgKzE5OSw3IEBACiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0OwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0yMjQsNyArMjI0LDcgQEAKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSB0dHktPmRyaXZlcl9kYXRhOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0yNjYsNyArMjY2LDcgQEAKIAlpZiAoIXJldGluZm8pCiAJCXJldHVybiAtRUZBVUxUOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKIAlpbmZvLmxpbmUgPSBzZWxmLT5saW5lOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgbmV3X3NlcmlhbDsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiBvbGRfc3RhdGUsICpzdGF0ZTsKIAotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsbmV3X2luZm8sc2l6ZW9mKG5ld19zZXJpYWwpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSB0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXQgPSAwOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmICgoY21kICE9IFRJT0NHU0VSSUFMKSAmJiAoY21kICE9IFRJT0NTU0VSSUFMKSAmJgogCSAgICAoY21kICE9IFRJT0NTRVJDT05GSUcpICYmIChjbWQgIT0gVElPQ1NFUkdTVFJVQ1QpICYmCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFRJT0NHSUNPVU5UOgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBUSU9DR0lDT1VOVCBub3QgaW1wbCFcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBUSU9DR0lDT1VOVCBub3QgaW1wbCFcbiIsIF9fZnVuY19fICk7CiAjaWYgMAogCQlzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7CiAJCWNub3cgPSBkcml2ZXItPmljb3VudDsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMgYi9uZXQvaXJkYS9pcmRhX2RldmljZS5jCmluZGV4IDg3MTg1OTEuLmVhMzE5ZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKKysrIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwpAQCAtOTAsNyArOTAsNyBAQAogCiB2b2lkIGlyZGFfZGV2aWNlX2NsZWFudXAodm9pZCkKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWhhc2hiaW5fZGVsZXRlKHRhc2tzLCAoRlJFRV9GVU5DKSBfX2lyZGFfdGFza19kZWxldGUpOwogCkBAIC0xMDcsNyArMTA3LDcgQEAKIHsKIAlzdHJ1Y3QgaXJsYXBfY2IgKnNlbGY7CiAKLQlJUkRBX0RFQlVHKDQsICIlcyglcylcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzID8gIlRSVUUiIDogIkZBTFNFIik7CisJSVJEQV9ERUJVRyg0LCAiJXMoJXMpXG4iLCBfX2Z1bmNfXywgc3RhdHVzID8gIlRSVUUiIDogIkZBTFNFIik7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmxhcF9jYiAqKSBkZXYtPmF0YWxrX3B0cjsKIApAQCAtMTQ3LDExICsxNDcsMTEgQEAKIAlzdHJ1Y3QgaWZfaXJkYV9yZXEgcmVxOwogCWludCByZXQ7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWlmICghZGV2LT5kb19pb2N0bCkgewogCQlJUkRBX0VSUk9SKCIlczogZG9faW9jdGwgbm90IGltcGwuIGJ5IGRldmljZSBkcml2ZXJcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlpbnQgY291bnQgPSAwOwogCWludCB0aW1lb3V0OwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVCh0YXNrICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHRhc2stPm1hZ2ljID09IElSREFfVEFTS19NQUdJQywgcmV0dXJuIC0xOyk7CkBAIC0yMDEsMTQgKzIwMSwxNCBAQAogCQl0aW1lb3V0ID0gdGFzay0+ZnVuY3Rpb24odGFzayk7CiAJCWlmIChjb3VudCsrID4gMTAwKSB7CiAJCQlJUkRBX0VSUk9SKCIlczogZXJyb3IgaW4gdGFzayBoYW5kbGVyIVxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCWlyZGFfdGFza19kZWxldGUodGFzayk7CiAJCQlyZXR1cm4gVFJVRTsKIAkJfQogCX0gd2hpbGUgKCh0aW1lb3V0ID09IDApICYmICh0YXNrLT5zdGF0ZSAhPSBJUkRBX1RBU0tfRE9ORSkpOwogCiAJaWYgKHRpbWVvdXQgPCAwKSB7Ci0JCUlSREFfRVJST1IoIiVzOiBFcnJvciBleGVjdXRpbmcgdGFzayFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfRVJST1IoIiVzOiBFcnJvciBleGVjdXRpbmcgdGFzayFcbiIsIF9fZnVuY19fKTsKIAkJaXJkYV90YXNrX2RlbGV0ZSh0YXNrKTsKIAkJcmV0dXJuIFRSVUU7CiAJfQpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCWZpbmlzaGVkID0gRkFMU0U7CiAJfSBlbHNlIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbm90IGZpbmlzaGVkLCBhbmQgbm8gdGltZW91dCFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlmaW5pc2hlZCA9IEZBTFNFOwogCX0KIApAQCAtMjU4LDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IGlyZGFfdGFzayAqdGFzazsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJdGFzayA9IChzdHJ1Y3QgaXJkYV90YXNrICopIGRhdGE7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFwLmMgYi9uZXQvaXJkYS9pcmlhcC5jCmluZGV4IDM5MGE3OTAuLjllMTVjODIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFwLmMKKysrIGIvbmV0L2lyZGEvaXJpYXAuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJaXJpYXNfb2JqZWN0cyA9IGhhc2hiaW5fbmV3KEhCX0xPQ0spOwogCWlmICghaXJpYXNfb2JqZWN0cykgewogCQlJUkRBX1dBUk5JTkcoIiVzOiBDYW4ndCBhbGxvY2F0ZSBpcmlhc19vYmplY3RzIGhhc2hiaW4hXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICBfX2Z1bmNfXyk7CiAJCWhhc2hiaW5fZGVsZXRlKGlyaWFwLCBOVUxMKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTM5LDcgKzEzOSw3IEBACiAJICovCiAJc2VydmVyID0gaXJpYXBfb3BlbihMU0FQX0lBUywgSUFTX1NFUlZFUiwgTlVMTCwgTlVMTCk7CiAJaWYgKCFzZXJ2ZXIpIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5hYmxlIHRvIG9wZW4gc2VydmVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmFibGUgdG8gb3BlbiBzZXJ2ZXJcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlpcmlhcF9yZWdpc3Rlcl9sc2FwKHNlcnZlciwgTFNBUF9JQVMsIElBU19TRVJWRVIpOwpAQCAtMTcxLDExICsxNzEsMTEgQEAKIHsKIAlzdHJ1Y3QgaXJpYXBfY2IgKnNlbGY7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXNlbGYgPSBremFsbG9jKHNpemVvZigqc2VsZiksIEdGUF9BVE9NSUMpOwogCWlmICghc2VsZikgewotCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2lyaWFwX2Nsb3NlKHN0cnVjdCBpcmlhcF9jYiAqc2VsZikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSUFTX01BR0lDLCByZXR1cm47KTsKQEAgLTI0MSw3ICsyNDEsNyBAQAogewogCXN0cnVjdCBpcmlhcF9jYiAqZW50cnk7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSUFTX01BR0lDLCByZXR1cm47KTsKQEAgLTI2Miw3ICsyNjIsNyBAQAogewogCW5vdGlmeV90IG5vdGlmeTsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaXJkYV9ub3RpZnlfaW5pdCgmbm90aWZ5KTsKIAlub3RpZnkuY29ubmVjdF9jb25maXJtICAgICAgID0gaXJpYXBfY29ubmVjdF9jb25maXJtOwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAKIAlzZWxmLT5sc2FwID0gaXJsbXBfb3Blbl9sc2FwKHNsc2FwX3NlbCwgJm5vdGlmeSwgMCk7CiAJaWYgKHNlbGYtPmxzYXAgPT0gTlVMTCkgewotCQlJUkRBX0VSUk9SKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlZCBMU0FQIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9FUlJPUigiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZWQgTFNBUCFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlzZWxmLT5zbHNhcF9zZWwgPSBzZWxmLT5sc2FwLT5zbHNhcF9zZWw7CkBAIC0yOTcsNyArMjk3LDcgQEAKIHsKIAlzdHJ1Y3QgaXJpYXBfY2IgKnNlbGY7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCByZWFzb249JXNcbiIsIF9fRlVOQ1RJT05fXywgaXJsbXBfcmVhc29uc1tyZWFzb25dKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCByZWFzb249JXNcbiIsIF9fZnVuY19fLCBpcmxtcF9yZWFzb25zW3JlYXNvbl0pOwogCiAJc2VsZiA9IChzdHJ1Y3QgaXJpYXBfY2IgKikgaW5zdGFuY2U7CiAKQEAgLTMxMyw3ICszMTMsNyBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAlpZiAoc2VsZi0+bW9kZSA9PSBJQVNfQ0xJRU5UKSB7Ci0JCUlSREFfREVCVUcoNCwgIiVzKCksIGRpc2Nvbm5lY3QgYXMgY2xpZW50XG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBkaXNjb25uZWN0IGFzIGNsaWVudFxuIiwgX19mdW5jX18pOwogCiAKIAkJaXJpYXBfZG9fY2xpZW50X2V2ZW50KHNlbGYsIElBUF9MTV9ESVNDT05ORUNUX0lORElDQVRJT04sCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJaWYgKHNlbGYtPmNvbmZpcm0pCiAJCQlzZWxmLT5jb25maXJtKElBU19ESVNDT05ORUNULCAwLCBOVUxMLCBzZWxmLT5wcml2KTsKIAl9IGVsc2UgewotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBkaXNjb25uZWN0IGFzIHNlcnZlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZGlzY29ubmVjdCBhcyBzZXJ2ZXJcbiIsIF9fZnVuY19fKTsKIAkJaXJpYXBfZG9fc2VydmVyX2V2ZW50KHNlbGYsIElBUF9MTV9ESVNDT05ORUNUX0lORElDQVRJT04sCiAJCQkJICAgICAgTlVMTCk7CiAJCWlyaWFwX2Nsb3NlKHNlbGYpOwpAQCAtMzQwLDcgKzM0MCw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJQVNfTUFHSUMsIHJldHVybjspOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJaWYgKHR4X3NrYiA9PSBOVUxMKSB7CiAJCUlSREFfREVCVUcoMCwKIAkJCSAgICIlcygpLCBDb3VsZCBub3QgYWxsb2NhdGUgYW4gc2tfYnVmZiBvZiBsZW5ndGggJWRcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIExNUF9NQVhfSEVBREVSKTsKKwkJCSAgIF9fZnVuY19fLCBMTVBfTUFYX0hFQURFUik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ1MywxMyArNDUzLDEzIEBACiAJLyogR2V0IGxlbmd0aCwgTVNCIGZpcnN0ICovCiAJbGVuID0gYmUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopKGZwK24pKSk7IG4gKz0gMjsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIGxlbj0lZFxuIiwgX19GVU5DVElPTl9fLCBsZW4pOworCUlSREFfREVCVUcoNCwgIiVzKCksIGxlbj0lZFxuIiwgX19mdW5jX18sIGxlbik7CiAKIAkvKiBHZXQgb2JqZWN0IElELCBNU0IgZmlyc3QgKi8KIAlvYmpfaWQgPSBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2JlMTYgKikoZnArbikpKTsgbiArPSAyOwogCiAJdHlwZSA9IGZwW24rK107Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKSwgVmFsdWUgdHlwZSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHR5cGUpOworCUlSREFfREVCVUcoNCwgIiVzKCksIFZhbHVlIHR5cGUgPSAlZFxuIiwgX19mdW5jX18sIHR5cGUpOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBJQVNfSU5URUdFUjoKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCQl2YWx1ZSA9IGlyaWFzX25ld19pbnRlZ2VyX3ZhbHVlKHRtcF9jcHUzMik7CiAKIAkJLyogIExlZ2FsIHZhbHVlcyByZXN0cmljdGVkIHRvIDB4MDEtMHg2ZiwgcGFnZSAxNSBpcnR0cCAqLwotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBsc2FwPSVkXG4iLCBfX0ZVTkNUSU9OX18sIHZhbHVlLT50LmludGVnZXIpOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBsc2FwPSVkXG4iLCBfX2Z1bmNfXywgdmFsdWUtPnQuaW50ZWdlcik7CiAJCWJyZWFrOwogCWNhc2UgSUFTX1NUUklORzoKIAkJY2hhcnNldCA9IGZwW24rK107CkBAIC00ODgsNyArNDg4LDcgQEAKIC8qCQljYXNlIENTX1VOSUNPREU6ICovCiAJCWRlZmF1bHQ6CiAJCQlJUkRBX0RFQlVHKDAsICIlcygpLCBjaGFyc2V0ICVzLCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXywgaWFzX2NoYXJzZXRfdHlwZXNbY2hhcnNldF0pOworCQkJCSAgIF9fZnVuY19fLCBpYXNfY2hhcnNldF90eXBlc1tjaGFyc2V0XSk7CiAKIAkJCS8qIEFib3J0aW5nLCBjbG9zZSBjb25uZWN0aW9uISAqLwogCQkJaXJpYXBfZGlzY29ubmVjdF9yZXF1ZXN0KHNlbGYpOwpAQCAtNDk2LDcgKzQ5Niw3IEBACiAJCQkvKiBicmVhazsgKi8KIAkJfQogCQl2YWx1ZV9sZW4gPSBmcFtuKytdOwotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBzdHJsZW49JWRcbiIsIF9fRlVOQ1RJT05fXywgdmFsdWVfbGVuKTsKKwkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgc3RybGVuPSVkXG4iLCBfX2Z1bmNfXywgdmFsdWVfbGVuKTsKIAogCQkvKiBNYWtlIHN1cmUgdGhlIHN0cmluZyBpcyBudWxsLXRlcm1pbmF0ZWQgKi8KIAkJZnBbbit2YWx1ZV9sZW5dID0gMHgwMDsKQEAgLTUyNiw3ICs1MjYsNyBAQAogCWlmIChzZWxmLT5jb25maXJtKQogCQlzZWxmLT5jb25maXJtKElBU19TVUNDRVNTLCBvYmpfaWQsIHZhbHVlLCBzZWxmLT5wcml2KTsKIAllbHNlIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbWlzc2luZyBoYW5kbGVyIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbWlzc2luZyBoYW5kbGVyIVxuIiwgX19mdW5jX18pOwogCQlpcmlhc19kZWxldGVfdmFsdWUodmFsdWUpOwogCX0KIH0KQEAgLTU0OCw3ICs1NDgsNyBAQAogCV9fYmUxNiB0bXBfYmUxNjsKIAlfX3U4ICpmcDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJQVNfTUFHSUMsIHJldHVybjspOwpAQCAtNjEwLDEyICs2MTAsMTIgQEAKIAkJbWVtY3B5KGZwK24sIHZhbHVlLT50Lm9jdF9zZXEsIHZhbHVlLT5sZW4pOyBuKz12YWx1ZS0+bGVuOwogCQlicmVhazsKIAljYXNlIElBU19NSVNTSU5HOgotCQlJUkRBX0RFQlVHKCAzLCAiJXM6IHNlbmRpbmcgSUFTX01JU1NJTkdcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoIDMsICIlczogc2VuZGluZyBJQVNfTUlTU0lOR1xuIiwgX19mdW5jX18pOwogCQlza2JfcHV0KHR4X3NrYiwgMSk7CiAJCWZwW24rK10gPSB2YWx1ZS0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdHlwZSBub3QgaW1wbGVtZW50ZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCB0eXBlIG5vdCBpbXBsZW1lbnRlZCFcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJfQogCWlyaWFwX2RvX3JfY29ubmVjdF9ldmVudChzZWxmLCBJQVBfQ0FMTF9SRVNQT05TRSwgdHhfc2tiKTsKQEAgLTY0Miw3ICs2NDIsNyBAQAogCV9fdTggKmZwOwogCWludCBuOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElBU19NQUdJQywgcmV0dXJuOyk7CkBAIC02OTcsNyArNjk3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwogCV9fdTggKmZyYW1lOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElBU19NQUdJQywgcmV0dXJuOyk7CkBAIC03MjgsNyArNzI4LDcgQEAKIAkJCQkgICAgc2VsZi0+c2FkZHIsIHNlbGYtPmRhZGRyLAogCQkJCSAgICBOVUxMLCBOVUxMKTsKIAlpZiAocmV0IDwgMCkgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBjb25uZWN0IGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGNvbm5lY3QgZmFpbGVkIVxuIiwgX19mdW5jX18pOwogCQlzZWxmLT5jb25maXJtKElBU19ESVNDT05ORUNULCAwLCBOVUxMLCBzZWxmLT5wcml2KTsKIAl9CiB9CkBAIC03NzYsNyArNzc2LDcgQEAKIHsKIAlzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsICpuZXc7CiAKLQlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXNlbGYgPSAoc3RydWN0IGlyaWFwX2NiICopIGluc3RhbmNlOwogCkBAIC03ODcsMTQgKzc4NywxNCBAQAogCS8qIFN0YXJ0IG5ldyBzZXJ2ZXIgKi8KIAluZXcgPSBpcmlhcF9vcGVuKExTQVBfSUFTLCBJQVNfU0VSVkVSLCBOVUxMLCBOVUxMKTsKIAlpZiAoIW5ldykgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBvcGVuIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgb3BlbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogTm93IGF0dGFjaCB1cCB0aGUgbmV3ICJzb2NrZXQiICovCiAJbmV3LT5sc2FwID0gaXJsbXBfZHVwKHNlbGYtPmxzYXAsIG5ldyk7CiAJaWYgKCFuZXctPmxzYXApIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZHVwIGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGR1cCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtODI0LDcgKzgyNCw3IEBACiAJX191OCAgKmZyYW1lOwogCV9fdTggIG9wY29kZTsKIAotCUlSREFfREVCVUcoMywgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc2VsZiA9IChzdHJ1Y3QgaXJpYXBfY2IgKikgaW5zdGFuY2U7CiAKQEAgLTgzNiw3ICs4MzYsNyBAQAogCiAJaWYgKHNlbGYtPm1vZGUgPT0gSUFTX1NFUlZFUikgewogCQkvKiBDYWxsIHNlcnZlciAqLwotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBDYWxsaW5nIHNlcnZlciFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIENhbGxpbmcgc2VydmVyIVxuIiwgX19mdW5jX18pOwogCQlpcmlhcF9kb19yX2Nvbm5lY3RfZXZlbnQoc2VsZiwgSUFQX1JFQ1ZfRl9MU1QsIHNrYik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTg0NCwxMyArODQ0LDEzIEBACiAJaWYgKH5vcGNvZGUgJiBJQVBfTFNUKSB7CiAJCUlSREFfV0FSTklORygiJXM6LCBJcklBUyBtdWx0aWZyYW1lIGNvbW1hbmRzIG9yICIKIAkJCSAgICAgInJlc3VsdHMgaXMgbm90IGltcGxlbWVudGVkIHlldCFcbiIsCi0JCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogQ2hlY2sgZm9yIGFjayBmcmFtZXMgc2luY2UgdGhleSBkb24ndCBjb250YWluIGFueSBkYXRhICovCiAJaWYgKG9wY29kZSAmIElBUF9BQ0spIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSBHb3QgYWNrIGZyYW1lIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSBHb3QgYWNrIGZyYW1lIVxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTg2OCw3ICs4NjgsNyBAQAogCQkJaXJpYXBfZ2V0dmFsdWVieWNsYXNzX2NvbmZpcm0oc2VsZiwgc2tiKTsKIAkJCWJyZWFrOwogCQljYXNlIElBU19DTEFTU19VTktOT1dOOgotCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgTm8gc3VjaCBjbGFzcyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDEsICIlcygpLCBObyBzdWNoIGNsYXNzIVxuIiwgX19mdW5jX18pOwogCQkJLyogRmluaXNoZWQsIGNsb3NlIGNvbm5lY3Rpb24hICovCiAJCQlpcmlhcF9kaXNjb25uZWN0X3JlcXVlc3Qoc2VsZik7CiAKQEAgLTg4MSw3ICs4ODEsNyBAQAogCQkJCQkgICAgICBzZWxmLT5wcml2KTsKIAkJCWJyZWFrOwogCQljYXNlIElBU19BVFRSSUJfVU5LTk9XTjoKLQkJCUlSREFfREVCVUcoMSwgIiVzKCksIE5vIHN1Y2ggYXR0cmlidXRlIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMSwgIiVzKCksIE5vIHN1Y2ggYXR0cmlidXRlIVxuIiwgX19mdW5jX18pOwogCQkJLyogRmluaXNoZWQsIGNsb3NlIGNvbm5lY3Rpb24hICovCiAJCQlpcmlhcF9kaXNjb25uZWN0X3JlcXVlc3Qoc2VsZik7CiAKQEAgLTg5Niw3ICs4OTYsNyBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gb3AtY29kZTogJTAyeFxuIiwgX19GVU5DVElPTl9fLAorCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIG9wLWNvZGU6ICUwMnhcbiIsIF9fZnVuY19fLAogCQkJICAgb3Bjb2RlKTsKIAkJYnJlYWs7CiAJfQpAQCAtOTE4LDcgKzkxOCw3IEBACiAJX191OCAqZnA7CiAJX191OCBvcGNvZGU7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSUFTX01BR0lDLCByZXR1cm47KTsKQEAgLTkyOSw3ICs5MjksNyBAQAogCW9wY29kZSA9IGZwWzBdOwogCWlmICh+b3Bjb2RlICYgMHg4MCkgewogCQlJUkRBX1dBUk5JTkcoIiVzOiBJcklBUyBtdWx0aWZyYW1lIGNvbW1hbmRzIG9yIHJlc3VsdHMgIgotCQkJICAgICAiaXMgbm90IGltcGxlbWVudGVkIHlldCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgICJpcyBub3QgaW1wbGVtZW50ZWQgeWV0IVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCW9wY29kZSAmPSAweDdmOyAvKiBNYXNrIGF3YXkgTFNUIGJpdCAqLwpAQCAtOTM3LDcgKzkzNyw3IEBACiAJc3dpdGNoIChvcGNvZGUpIHsKIAljYXNlIEdFVF9JTkZPX0JBU0U6CiAJCUlSREFfV0FSTklORygiJXM6IEdldEluZm9CYXNlRGV0YWlscyBub3QgaW1wbGVtZW50ZWQgeWV0IVxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgX19mdW5jX18pOwogCQlicmVhazsKIAljYXNlIEdFVF9WQUxVRV9CWV9DTEFTUzoKIAkJaXJpYXBfZ2V0dmFsdWVieWNsYXNzX2luZGljYXRpb24oc2VsZiwgc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmlhcF9ldmVudC5jCmluZGV4IDhmYjlkNzIuLmEzMDFjYmQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJpYXBfZXZlbnQuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJY2FzZSBJQVBfTE1fRElTQ09OTkVDVF9JTkRJQ0FUSU9OOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGV2ZW50KTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19mdW5jX18sIGV2ZW50KTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjE3LDcgKzIxNyw3IEBACiAJCWlyaWFwX25leHRfY2xpZW50X3N0YXRlKHNlbGYsIFNfRElTQ09OTkVDVCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXZlbnQpOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX2Z1bmNfXywgZXZlbnQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0yNjksNyArMjY5LDcgQEAKIAkJaXJpYXBfbmV4dF9jYWxsX3N0YXRlKHNlbGYsIFNfT1VUU1RBTkRJTkcpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGV2ZW50KTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19mdW5jX18sIGV2ZW50KTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjgzLDcgKzI4Myw3IEBACiBzdGF0aWMgdm9pZCBzdGF0ZV9zX2NhbGxpbmcoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9FVkVOVCBldmVudCwKIAkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoMCwgIiVzKCksIE5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpLCBOb3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlpcmlhcF9uZXh0X2NhbGxfc3RhdGUoc2VsZiwgU19XQUlUX0ZPUl9DQUxMKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19GVU5DVElPTl9fLCBldmVudCk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fZnVuY19fLCBldmVudCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTMxOCw3ICszMTgsNyBAQAogc3RhdGljIHZvaWQgc3RhdGVfc19yZXBseWluZyhzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX0VWRU5UIGV2ZW50LAogCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoMCwgIiVzKCksIE5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpLCBOb3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoKQEAgLTMzMCw3ICszMzAsNyBAQAogc3RhdGljIHZvaWQgc3RhdGVfc193YWl0X2Zvcl9jYWxsKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfRVZFTlQgZXZlbnQsCiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoMCwgIiVzKCksIE5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpLCBOb3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogCkBAIC0zNDMsNyArMzQzLDcgQEAKIHN0YXRpYyB2b2lkIHN0YXRlX3Nfd2FpdF9hY3RpdmUoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9FVkVOVCBldmVudCwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoMCwgIiVzKCksIE5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpLCBOb3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNjcsNyArMzY3LDcgQEAKIAljYXNlIElBUF9MTV9DT05ORUNUX0lORElDQVRJT046CiAJCXR4X3NrYiA9IGFsbG9jX3NrYihMTVBfTUFYX0hFQURFUiwgR0ZQX0FUT01JQyk7CiAJCWlmICh0eF9za2IgPT0gTlVMTCkgewotCQkJSVJEQV9XQVJOSU5HKCIlczogdW5hYmxlIHRvIG1hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX1dBUk5JTkcoIiVzOiB1bmFibGUgdG8gbWFsbG9jIVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTM4Niw3ICszODYsNyBAQAogCQlpcmlhcF9uZXh0X3JfY29ubmVjdF9zdGF0ZShzZWxmLCBSX1JFQ0VJVklORyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIHVua25vd24gZXZlbnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXZlbnQpOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmtub3duIGV2ZW50ICVkXG4iLCBfX2Z1bmNfXywgZXZlbnQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zOTcsNyArMzk3LDcgQEAKIHN0YXRpYyB2b2lkIHN0YXRlX3JfY2FsbChzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX0VWRU5UIGV2ZW50LAogCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJQVBfTE1fRElTQ09OTkVDVF9JTkRJQ0FUSU9OOgpAQCAtNDA2LDcgKzQwNiw3IEBACiAJCWlyaWFwX25leHRfcl9jb25uZWN0X3N0YXRlKHNlbGYsIFJfV0FJVElORyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIHVua25vd24gZXZlbnQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmtub3duIGV2ZW50IVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAl9CiB9CkBAIC00MjEsMTMgKzQyMSwxMyBAQAogc3RhdGljIHZvaWQgc3RhdGVfcl93YWl0aW5nKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfRVZFTlQgZXZlbnQsCiAJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDAsICIlcygpLCBOb3QgaW1wbGVtZW50ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygwLCAiJXMoKSwgTm90IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YXRlX3Jfd2FpdF9hY3RpdmUoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9FVkVOVCBldmVudCwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoMCwgIiVzKCksIE5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpLCBOb3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoKQEAgLTQzOSw3ICs0MzksNyBAQAogc3RhdGljIHZvaWQgc3RhdGVfcl9yZWNlaXZpbmcoc3RydWN0IGlyaWFwX2NiICpzZWxmLCBJUklBUF9FVkVOVCBldmVudCwKIAkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJQVBfUkVDVl9GX0xTVDoKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCQlpcmlhcF9jYWxsX2luZGljYXRpb24oc2VsZiwgc2tiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5rbm93biBldmVudCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIHVua25vd24gZXZlbnQhXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTQ2Miw3ICs0NjIsNyBAQAogc3RhdGljIHZvaWQgc3RhdGVfcl9leGVjdXRlKHN0cnVjdCBpcmlhcF9jYiAqc2VsZiwgSVJJQVBfRVZFTlQgZXZlbnQsCiAJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlybG1wX2RhdGFfcmVxdWVzdChzZWxmLT5sc2FwLCBza2IpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmtub3duIGV2ZW50IVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5rbm93biBldmVudCFcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNDkxLDcgKzQ5MSw3IEBACiBzdGF0aWMgdm9pZCBzdGF0ZV9yX3JldHVybmluZyhzdHJ1Y3QgaXJpYXBfY2IgKnNlbGYsIElSSUFQX0VWRU5UIGV2ZW50LAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDAsICIlcygpLCBldmVudD0lZFxuIiwgX19GVU5DVElPTl9fLCBldmVudCk7CisJSVJEQV9ERUJVRygwLCAiJXMoKSwgZXZlbnQ9JWRcbiIsIF9fZnVuY19fLCBldmVudCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJQVBfUkVDVl9GX0xTVDoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFzX29iamVjdC5jIGIvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKaW5kZXggY2JjZjA0My4uOTllYmI5NiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKKysrIGIvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKQEAgLTQ3LDEyICs0NywxMiBAQAogewogCXN0cnVjdCBpYXNfb2JqZWN0ICpvYmo7CiAKLQlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlhc19vYmplY3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAob2JqID09IE5VTEwpIHsKIAkJSVJEQV9XQVJOSU5HKCIlcygpLCBVbmFibGUgdG8gYWxsb2NhdGUgb2JqZWN0IVxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTYwLDcgKzYwLDcgQEAKIAlvYmotPm5hbWUgPSBrc3RybmR1cChuYW1lLCBJQVNfTUFYX0NMQVNTTkFNRSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFvYmotPm5hbWUpIHsKIAkJSVJEQV9XQVJOSU5HKCIlcygpLCBVbmFibGUgdG8gYWxsb2NhdGUgbmFtZSFcbiIsCi0JCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgIF9fZnVuY19fKTsKIAkJa2ZyZWUob2JqKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzMsNyArNzMsNyBAQAogCiAJaWYgKG9iai0+YXR0cmlicyA9PSBOVUxMKSB7CiAJCUlSREFfV0FSTklORygiJXMoKSwgVW5hYmxlIHRvIGFsbG9jYXRlIGF0dHJpYnMhXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICBfX2Z1bmNfXyk7CiAJCWtmcmVlKG9iai0+bmFtZSk7CiAJCWtmcmVlKG9iaik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJbm9kZSA9IGhhc2hiaW5fcmVtb3ZlX3RoaXMoaXJpYXNfb2JqZWN0cywgKGlyZGFfcXVldWVfdCAqKSBvYmopOwogCWlmICghbm9kZSkKIAkJSVJEQV9ERUJVRyggMCwgIiVzKCksIG9iamVjdCBhbHJlYWR5IHJlbW92ZWQhXG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgX19mdW5jX18pOwogCiAJLyogRGVzdHJveSAqLwogCV9faXJpYXNfZGVsZXRlX29iamVjdChvYmopOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJLyogRmluZCBvYmplY3QgKi8KIAlvYmogPSBoYXNoYmluX2xvY2tfZmluZChpcmlhc19vYmplY3RzLCAwLCBvYmpfbmFtZSk7CiAJaWYgKG9iaiA9PSBOVUxMKSB7Ci0JCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBmaW5kIG9iamVjdDogJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9XQVJOSU5HKCIlczogVW5hYmxlIHRvIGZpbmQgb2JqZWN0OiAlc1xuIiwgX19mdW5jX18sCiAJCQkgICAgIG9ial9uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI4MCwxNCArMjgwLDE0IEBACiAJYXR0cmliID0gaGFzaGJpbl9maW5kKG9iai0+YXR0cmlicywgMCwgYXR0cmliX25hbWUpOwogCWlmIChhdHRyaWIgPT0gTlVMTCkgewogCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8gZmluZCBhdHRyaWJ1dGU6ICVzXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18sIGF0dHJpYl9uYW1lKTsKKwkJCSAgICAgX19mdW5jX18sIGF0dHJpYl9uYW1lKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqLT5hdHRyaWJzLT5oYl9zcGlubG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKCBhdHRyaWItPnZhbHVlLT50eXBlICE9IG5ld192YWx1ZS0+dHlwZSkgewogCQlJUkRBX0RFQlVHKCAwLCAiJXMoKSwgY2hhbmdpbmcgdmFsdWUgdHlwZSBub3QgYWxsb3dlZCFcbiIsCi0JCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICBfX2Z1bmNfXyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iai0+YXR0cmlicy0+aGJfc3BpbmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTMyMiw3ICszMjIsNyBAQAogCWF0dHJpYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpYXNfYXR0cmliKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGF0dHJpYiA9PSBOVUxMKSB7CiAJCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBhdHRyaWJ1dGUhXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMzMyw3ICszMzMsNyBAQAogCWF0dHJpYi0+dmFsdWUgPSBpcmlhc19uZXdfaW50ZWdlcl92YWx1ZSh2YWx1ZSk7CiAJaWYgKCFhdHRyaWItPm5hbWUgfHwgIWF0dHJpYi0+dmFsdWUpIHsKIAkJSVJEQV9XQVJOSU5HKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIGF0dHJpYnV0ZSFcbiIsCi0JCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgIF9fZnVuY19fKTsKIAkJaWYgKGF0dHJpYi0+dmFsdWUpCiAJCQlpcmlhc19kZWxldGVfdmFsdWUoYXR0cmliLT52YWx1ZSk7CiAJCWtmcmVlKGF0dHJpYi0+bmFtZSk7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAlhdHRyaWIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWFzX2F0dHJpYiksIEdGUF9BVE9NSUMpOwogCWlmIChhdHRyaWIgPT0gTlVMTCkgewogCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgYXR0cmlidXRlIVxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNzYsNyArMzc2LDcgQEAKIAlhdHRyaWItPnZhbHVlID0gaXJpYXNfbmV3X29jdHNlcV92YWx1ZSggb2N0ZXRzLCBsZW4pOwogCWlmICghYXR0cmliLT5uYW1lIHx8ICFhdHRyaWItPnZhbHVlKSB7CiAJCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBhdHRyaWJ1dGUhXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICBfX2Z1bmNfXyk7CiAJCWlmIChhdHRyaWItPnZhbHVlKQogCQkJaXJpYXNfZGVsZXRlX3ZhbHVlKGF0dHJpYi0+dmFsdWUpOwogCQlrZnJlZShhdHRyaWItPm5hbWUpOwpAQCAtNDA4LDcgKzQwOCw3IEBACiAJYXR0cmliID0ga3phbGxvYyhzaXplb2YoIHN0cnVjdCBpYXNfYXR0cmliKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGF0dHJpYiA9PSBOVUxMKSB7CiAJCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBhdHRyaWJ1dGUhXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQxOCw3ICs0MTgsNyBAQAogCWF0dHJpYi0+dmFsdWUgPSBpcmlhc19uZXdfc3RyaW5nX3ZhbHVlKHZhbHVlKTsKIAlpZiAoIWF0dHJpYi0+bmFtZSB8fCAhYXR0cmliLT52YWx1ZSkgewogCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgYXR0cmlidXRlIVxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgX19mdW5jX18pOwogCQlpZiAoYXR0cmliLT52YWx1ZSkKIAkJCWlyaWFzX2RlbGV0ZV92YWx1ZShhdHRyaWItPnZhbHVlKTsKIAkJa2ZyZWUoYXR0cmliLT5uYW1lKTsKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCiAJdmFsdWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWFzX3ZhbHVlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHZhbHVlID09IE5VTEwpIHsKLQkJSVJEQV9XQVJOSU5HKCIlczogVW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00NjcsNyArNDY3LDcgQEAKIAogCXZhbHVlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlhc192YWx1ZSksIEdGUF9BVE9NSUMpOwogCWlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0JCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9XQVJOSU5HKCIlczogVW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNDc1LDcgKzQ3NSw3IEBACiAJdmFsdWUtPmNoYXJzZXQgPSBDU19BU0NJSTsKIAl2YWx1ZS0+dC5zdHJpbmcgPSBrc3RybmR1cChzdHJpbmcsIElBU19NQVhfU1RSSU5HLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXZhbHVlLT50LnN0cmluZykgewotCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19mdW5jX18pOwogCQlrZnJlZSh2YWx1ZSk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTQ5OCw3ICs0OTgsNyBAQAogCiAJdmFsdWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWFzX3ZhbHVlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHZhbHVlID09IE5VTEwpIHsKLQkJSVJEQV9XQVJOSU5HKCIlczogVW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC01MTAsNyArNTEwLDcgQEAKIAogCXZhbHVlLT50Lm9jdF9zZXEgPSBrbWVtZHVwKG9jdHNlcSwgbGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAodmFsdWUtPnQub2N0X3NlcSA9PSBOVUxMKXsKLQkJSVJEQV9XQVJOSU5HKCIlczogVW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fZnVuY19fKTsKIAkJa2ZyZWUodmFsdWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC01MjMsNyArNTIzLDcgQEAKIAogCXZhbHVlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlhc192YWx1ZSksIEdGUF9BVE9NSUMpOwogCWlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0JCUlSREFfV0FSTklORygiJXM6IFVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9XQVJOSU5HKCIlczogVW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNTQwLDcgKzU0MCw3IEBACiAgKi8KIHZvaWQgaXJpYXNfZGVsZXRlX3ZhbHVlKHN0cnVjdCBpYXNfdmFsdWUgKnZhbHVlKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQodmFsdWUgIT0gTlVMTCwgcmV0dXJuOyk7CiAKQEAgLTU1OCw3ICs1NTgsNyBAQAogCQkga2ZyZWUodmFsdWUtPnQub2N0X3NlcSk7CiAJCSBicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIHZhbHVlIHR5cGUhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIHZhbHVlIHR5cGUhXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCX0KIAlrZnJlZSh2YWx1ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudC5jCmluZGV4IGZmZjUyZDUuLjZiZTFlYzIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudC5jCkBAIC03Miw3ICs3Miw3IEBACiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmID0gKHN0cnVjdCBpcmxhbl9jYiAqKSBkYXRhOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtOTEsNyArOTEsNyBAQAogCiBzdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfc3RhcnRfa2lja190aW1lcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCB0aW1lb3V0KQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5jbGllbnQua2lja190aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwKIAkJCSBpcmxhbl9jbGllbnRfa2lja190aW1lcl9leHBpcmVkKTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICovCiB2b2lkIGlybGFuX2NsaWVudF93YWtldXAoc3RydWN0IGlybGFuX2NiICpzZWxmLCBfX3UzMiBzYWRkciwgX191MzIgZGFkZHIpCiB7Ci0JSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtMTE3LDcgKzExNyw3IEBACiAJaWYgKChzZWxmLT5jbGllbnQuc3RhdGUgIT0gSVJMQU5fSURMRSkgfHwKIAkgICAgKHNlbGYtPnByb3ZpZGVyLmFjY2Vzc190eXBlID09IEFDQ0VTU19ESVJFQ1QpKQogCXsKLQkJCUlSREFfREVCVUcoMCwgIiVzKCksIGFscmVhZHkgYXdha2UhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJCUlSREFfREVCVUcoMCwgIiVzKCksIGFscmVhZHkgYXdha2UhXG4iLCBfX2Z1bmNfXyApOwogCQkJcmV0dXJuOwogCX0KIApAQCAtMTI2LDcgKzEyNiw3IEBACiAJc2VsZi0+ZGFkZHIgPSBkYWRkcjsKIAogCWlmIChzZWxmLT5kaXNjb25uZWN0X3JlYXNvbiA9PSBMTV9VU0VSX1JFUVVFU1QpIHsKLQkJCUlSREFfREVCVUcoMCwgIiVzKCksIHN0aWxsIHN0b3BwZWQgYnkgdXNlclxuIiwgX19GVU5DVElPTl9fICk7CisJCQlJUkRBX0RFQlVHKDAsICIlcygpLCBzdGlsbCBzdG9wcGVkIGJ5IHVzZXJcbiIsIF9fZnVuY19fICk7CiAJCQlyZXR1cm47CiAJfQogCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAJX191MzIgc2FkZHIsIGRhZGRyOwogCi0JSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKGRpc2NvdmVyeSAhPSBOVUxMLCByZXR1cm47KTsKIApAQCAtMTc1LDcgKzE3NSw3IEBACiAJaWYgKHNlbGYpIHsKIAkJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIGdvdG8gb3V0Oyk7CiAKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRm91bmQgaW5zdGFuY2UgKCUwOHgpIVxuIiwgX19GVU5DVElPTl9fICwKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRm91bmQgaW5zdGFuY2UgKCUwOHgpIVxuIiwgX19mdW5jX18gLAogCQkgICAgICBkYWRkcik7CiAKIAkJaXJsYW5fY2xpZW50X3dha2V1cChzZWxmLCBzYWRkciwgZGFkZHIpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCXNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGluc3RhbmNlOwogCkBAIC0yMDYsNyArMjA2LDcgQEAKIAlpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fREFUQV9JTkRJQ0FUSU9OLCBza2IpOwogCiAJLyogUmVhZHkgZm9yIGEgbmV3IGNvbW1hbmQgKi8KLQlJUkRBX0RFQlVHKDIsICIlcygpLCBjbGVhcmluZyB0eF9idXN5XG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBjbGVhcmluZyB0eF9idXN5XG4iLCBfX2Z1bmNfXyApOwogCXNlbGYtPmNsaWVudC50eF9idXN5ID0gRkFMU0U7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIHNvbWUgcXVldWVkIGNvbW1hbmRzIHdhaXRpbmcgdG8gYmUgc2VudCAqLwpAQCAtMjIzLDcgKzIyMyw3IEBACiAJc3RydWN0IHRzYXBfY2IgKnRzYXA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIHJlYXNvbj0lZFxuIiwgX19GVU5DVElPTl9fICwgcmVhc29uKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCByZWFzb249JWRcbiIsIF9fZnVuY19fICwgcmVhc29uKTsKIAogCXNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGluc3RhbmNlOwogCXRzYXAgPSAoc3RydWN0IHRzYXBfY2IgKikgc2FwOwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJc3RydWN0IHRzYXBfY2IgKnRzYXA7CiAJbm90aWZ5X3Qgbm90aWZ5OwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAKIAl0c2FwID0gaXJ0dHBfb3Blbl90c2FwKExTQVBfQU5ZLCBERUZBVUxUX0lOSVRJQUxfQ1JFRElULCAmbm90aWZ5KTsKIAlpZiAoIXRzYXApIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgR290IG5vIHRzYXAhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgR290IG5vIHRzYXAhXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm47CiAJfQogCXNlbGYtPmNsaWVudC50c2FwX2N0cmwgPSB0c2FwOwpAQCAtMjk1LDcgKzI5NSw3IEBACiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCXNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGluc3RhbmNlOwogCkBAIC0zNzQsMTMgKzM3NCwxMyBAQAogCiAJSVJEQV9BU1NFUlQoc2tiICE9IE5VTEwsIHJldHVybjspOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKSBza2ItPmxlbj0lZFxuIiwgX19GVU5DVElPTl9fICwgKGludCkgc2tiLT5sZW4pOworCUlSREFfREVCVUcoNCwgIiVzKCkgc2tiLT5sZW49JWRcbiIsIF9fZnVuY19fICwgKGludCkgc2tiLT5sZW4pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CiAKIAlpZiAoIXNrYikgewotCQlJUkRBX0VSUk9SKCIlcygpLCBHb3QgTlVMTCBza2IhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0VSUk9SKCIlcygpLCBHb3QgTlVMTCBza2IhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJZnJhbWUgPSBza2ItPmRhdGE7CkBAIC00MDUsNyArNDA1LDcgQEAKIAkvKiBIb3cgbWFueSBwYXJhbWV0ZXJzPyAqLwogCWNvdW50ID0gZnJhbWVbMV07CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBnb3QgJWQgcGFyYW1ldGVyc1xuIiwgX19GVU5DVElPTl9fICwgY291bnQpOworCUlSREFfREVCVUcoNCwgIiVzKCksIGdvdCAlZCBwYXJhbWV0ZXJzXG4iLCBfX2Z1bmNfXyAsIGNvdW50KTsKIAogCXB0ciA9IGZyYW1lKzI7CiAKQEAgLTQxMyw3ICs0MTMsNyBAQAogCWZvciAoaT0wOyBpPGNvdW50O2krKykgewogCQlyZXQgPSBpcmxhbl9leHRyYWN0X3BhcmFtKHB0ciwgbmFtZSwgdmFsdWUsICZ2YWxfbGVuKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCUlSREFfREVCVUcoMiwgIiVzKCksIElyTEFOLCBFcnJvciFcbiIsIF9fRlVOQ1RJT05fXyApOworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMQU4sIEVycm9yIVxuIiwgX19mdW5jX18gKTsKIAkJCWJyZWFrOwogCQl9CiAJCXB0ciArPSByZXQ7CkBAIC00MzgsNyArNDM4LDcgQEAKIAlpbnQgaTsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIHBhcm09JXNcbiIsIF9fRlVOQ1RJT05fXyAsIHBhcmFtKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBwYXJtPSVzXG4iLCBfX2Z1bmNfXyAsIHBhcmFtKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgIkhPU1RFRCIpID09IDApCiAJCQlzZWxmLT5jbGllbnQuYWNjZXNzX3R5cGUgPSBBQ0NFU1NfSE9TVEVEOwogCQllbHNlIHsKLQkJCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gYWNjZXNzIHR5cGUhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gYWNjZXNzIHR5cGUhXG4iLCBfX2Z1bmNfXyApOwogCQl9CiAJfQogCS8qIElSTEFOIHZlcnNpb24gKi8KQEAgLTQ5OCwxNCArNDk4LDE0IEBACiAJCW1lbWNweSgmdG1wX2NwdSwgdmFsdWUsIDIpOyAvKiBBbGlnbiB2YWx1ZSAqLwogCQlsZTE2X3RvX2NwdXMoJnRtcF9jcHUpOyAgICAgLyogQ29udmVydCB0byBob3N0IG9yZGVyICovCiAJCXNlbGYtPmNsaWVudC5yZWN2X2FyYl92YWwgPSB0bXBfY3B1OwotCQlJUkRBX0RFQlVHKDIsICIlcygpLCByZWNlaXZlIGFyYiB2YWw9JWRcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoMiwgIiVzKCksIHJlY2VpdmUgYXJiIHZhbD0lZFxuIiwgX19mdW5jX18gLAogCQkJICAgc2VsZi0+Y2xpZW50LnJlY3ZfYXJiX3ZhbCk7CiAJfQogCWlmIChzdHJjbXAocGFyYW0sICJNQVhfRlJBTUUiKSA9PSAwKSB7CiAJCW1lbWNweSgmdG1wX2NwdSwgdmFsdWUsIDIpOyAvKiBBbGlnbiB2YWx1ZSAqLwogCQlsZTE2X3RvX2NwdXMoJnRtcF9jcHUpOyAgICAgLyogQ29udmVydCB0byBob3N0IG9yZGVyICovCiAJCXNlbGYtPmNsaWVudC5tYXhfZnJhbWUgPSB0bXBfY3B1OwotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBtYXggZnJhbWU9JWRcbiIsIF9fRlVOQ1RJT05fXyAsCisJCUlSREFfREVCVUcoNCwgIiVzKCksIG1heCBmcmFtZT0lZFxuIiwgX19mdW5jX18gLAogCQkJICAgc2VsZi0+Y2xpZW50Lm1heF9mcmFtZSk7CiAJfQogCkBAIC01MzksNyArNTM5LDcgQEAKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQocHJpdiAhPSBOVUxMLCByZXR1cm47KTsKIApAQCAtNTUyLDcgKzU1Miw3IEBACiAKIAkvKiBDaGVjayBpZiByZXF1ZXN0IHN1Y2NlZWRlZCAqLwogCWlmIChyZXN1bHQgIT0gSUFTX1NVQ0NFU1MpIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZ290IE5VTEwgdmFsdWUhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZ290IE5VTEwgdmFsdWUhXG4iLCBfX2Z1bmNfXyApOwogCQlpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fSUFTX1BST1ZJREVSX05PVF9BVkFJTCwKIAkJCQkgICAgICBOVUxMKTsKIAkJcmV0dXJuOwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCWlyaWFzX2RlbGV0ZV92YWx1ZSh2YWx1ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gdHlwZSFcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1bmtub3duIHR5cGUhXG4iLCBfX2Z1bmNfXyApOwogCQlicmVhazsKIAl9CiAJaXJsYW5fZG9fY2xpZW50X2V2ZW50KHNlbGYsIElSTEFOX0lBU19QUk9WSURFUl9OT1RfQVZBSUwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50X2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnRfZXZlbnQuYwppbmRleCA2YWZjZWU1Li44ZDVhOGViIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnRfZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnRfZXZlbnQuYwpAQCAtOTIsNyArOTIsNyBAQAogc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfaWRsZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybiAtMTspOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJY2FzZSBJUkxBTl9ESVNDT1ZFUllfSU5ESUNBVElPTjoKIAkJaWYgKHNlbGYtPmNsaWVudC5pcmlhcCkgewogCQkJSVJEQV9XQVJOSU5HKCIlcygpLCBidXN5IHdpdGggYSBwcmV2aW91cyBxdWVyeVxuIiwKLQkJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKQEAgLTExNCwxMCArMTE0LDEwIEBACiAJCQkJCSAgICAgICJJckxBTiIsICJJckRBOlRpbnlUUDpMc2FwU2VsIik7CiAJCWJyZWFrOwogCWNhc2UgSVJMQU5fV0FUQ0hET0dfVElNRU9VVDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSVJMQU5fV0FUQ0hET0dfVElNRU9VVFxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIElSTEFOX1dBVENIRE9HX1RJTUVPVVRcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoNCwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fRlVOQ1RJT05fXyAsIGV2ZW50KTsKKwkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19mdW5jX18gLCBldmVudCk7CiAJCWJyZWFrOwogCX0KIAlpZiAoc2tiKQpAQCAtMTM2LDcgKzEzNiw3IEBACiBzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV9xdWVyeShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm4gLTE7KTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9DT05OKTsKIAkJYnJlYWs7CiAJY2FzZSBJUkxBTl9JQVNfUFJPVklERVJfTk9UX0FWQUlMOgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJQVNfUFJPVklERVJfTk9UX0FWQUlMXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSUFTX1BST1ZJREVSX05PVF9BVkFJTFxuIiwgX19mdW5jX18gKTsKIAkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fSURMRSk7CiAKIAkJLyogR2l2ZSB0aGUgY2xpZW50IGEga2ljayEgKi8KQEAgLTE2NywxMCArMTY3LDEwIEBACiAJCWlybGFuX25leHRfY2xpZW50X3N0YXRlKHNlbGYsIElSTEFOX0lETEUpOwogCQlicmVhazsKIAljYXNlIElSTEFOX1dBVENIRE9HX1RJTUVPVVQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIElSTEFOX1dBVENIRE9HX1RJTUVPVVRcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJUkxBTl9XQVRDSERPR19USU1FT1VUXG4iLCBfX2Z1bmNfXyApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fZnVuY19fICwgZXZlbnQpOwogCQlicmVhazsKIAl9CiAJaWYgKHNrYikKQEAgLTE4OSw3ICsxODksNyBAQAogc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfY29ubihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAKQEAgLTIwNCwxMCArMjA0LDEwIEBACiAJCWlybGFuX25leHRfY2xpZW50X3N0YXRlKHNlbGYsIElSTEFOX0lETEUpOwogCQlicmVhazsKIAljYXNlIElSTEFOX1dBVENIRE9HX1RJTUVPVVQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIElSTEFOX1dBVENIRE9HX1RJTUVPVVRcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJUkxBTl9XQVRDSERPR19USU1FT1VUXG4iLCBfX2Z1bmNfXyApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fZnVuY19fICwgZXZlbnQpOwogCQlicmVhazsKIAl9CiAJaWYgKHNrYikKQEAgLTIyNCw3ICsyMjQsNyBAQAogc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfaW5mbyhzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAKQEAgLTI0NCwxMCArMjQ0LDEwIEBACiAJCWlybGFuX25leHRfY2xpZW50X3N0YXRlKHNlbGYsIElSTEFOX0lETEUpOwogCQlicmVhazsKIAljYXNlIElSTEFOX1dBVENIRE9HX1RJTUVPVVQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIElSTEFOX1dBVENIRE9HX1RJTUVPVVRcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJUkxBTl9XQVRDSERPR19USU1FT1VUXG4iLCBfX2Z1bmNfXyApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fZnVuY19fICwgZXZlbnQpOwogCQlicmVhazsKIAl9CiAJaWYgKHNrYikKQEAgLTI2Niw3ICsyNjYsNyBAQAogc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfbWVkaWEoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIApAQCAtMjgxLDEwICsyODEsMTAgQEAKIAkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fSURMRSk7CiAJCWJyZWFrOwogCWNhc2UgSVJMQU5fV0FUQ0hET0dfVElNRU9VVDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSVJMQU5fV0FUQ0hET0dfVElNRU9VVFxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIElSTEFOX1dBVENIRE9HX1RJTUVPVVRcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fRlVOQ1RJT05fXyAsIGV2ZW50KTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19mdW5jX18gLCBldmVudCk7CiAJCWJyZWFrOwogCX0KIAlpZiAoc2tiKQpAQCAtMzA1LDcgKzMwNSw3IEBACiB7CiAJc3RydWN0IHFvc19pbmZvIHFvczsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCkBAIC0zNDQsNyArMzQ0LDcgQEAKIAkJCWlybGFuX25leHRfY2xpZW50X3N0YXRlKHNlbGYsIElSTEFOX0RBVEEpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1bmtub3duIGFjY2VzcyB0eXBlIVxuIiwgX19GVU5DVElPTl9fICk7CisJCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1bmtub3duIGFjY2VzcyB0eXBlIVxuIiwgX19mdW5jX18gKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtMzUzLDEwICszNTMsMTAgQEAKIAkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fSURMRSk7CiAJCWJyZWFrOwogCWNhc2UgSVJMQU5fV0FUQ0hET0dfVElNRU9VVDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSVJMQU5fV0FUQ0hET0dfVElNRU9VVFxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIElSTEFOX1dBVENIRE9HX1RJTUVPVVRcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fRlVOQ1RJT05fXyAsIGV2ZW50KTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19mdW5jX18gLCBldmVudCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzc2LDcgKzM3Niw3IEBACiBzdGF0aWMgaW50IGlybGFuX2NsaWVudF9zdGF0ZV93YWl0KHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIApAQCAtMzkwLDEwICszOTAsMTAgQEAKIAkJaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc2VsZiwgSVJMQU5fSURMRSk7CiAJCWJyZWFrOwogCWNhc2UgSVJMQU5fV0FUQ0hET0dfVElNRU9VVDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSVJMQU5fV0FUQ0hET0dfVElNRU9VVFxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIElSTEFOX1dBVENIRE9HX1RJTUVPVVRcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fRlVOQ1RJT05fXyAsIGV2ZW50KTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19mdW5jX18gLCBldmVudCk7CiAJCWJyZWFrOwogCX0KIAlpZiAoc2tiKQpAQCAtNDA3LDcgKzQwNyw3IEBACiB7CiAJc3RydWN0IHFvc19pbmZvIHFvczsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCkBAIC00MjksNyArNDI5LDcgQEAKIAkJfSBlbHNlIGlmIChzZWxmLT5jbGllbnQucmVjdl9hcmJfdmFsID4KIAkJCSAgIHNlbGYtPnByb3ZpZGVyLnNlbmRfYXJiX3ZhbCkKIAkJewotCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgbG9zdCB0aGUgYmF0dGxlIDotKFxuIiwgX19GVU5DVElPTl9fICk7CisJCQlJUkRBX0RFQlVHKDIsICIlcygpLCBsb3N0IHRoZSBiYXR0bGUgOi0oXG4iLCBfX2Z1bmNfXyApOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVJMQU5fREFUQV9DT05ORUNUX0lORElDQVRJT046CkBAIC00NDAsMTAgKzQ0MCwxMCBAQAogCQlpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9JRExFKTsKIAkJYnJlYWs7CiAJY2FzZSBJUkxBTl9XQVRDSERPR19USU1FT1VUOgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJUkxBTl9XQVRDSERPR19USU1FT1VUXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSVJMQU5fV0FUQ0hET0dfVElNRU9VVFxuIiwgX19mdW5jX18gKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19GVU5DVElPTl9fICwgZXZlbnQpOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX2Z1bmNfXyAsIGV2ZW50KTsKIAkJYnJlYWs7CiAJfQogCWlmIChza2IpCkBAIC00NjIsNyArNDYyLDcgQEAKIHN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2RhdGEoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm4gLTE7KTsKQEAgLTQ3Niw3ICs0NzYsNyBAQAogCQlpcmxhbl9uZXh0X2NsaWVudF9zdGF0ZShzZWxmLCBJUkxBTl9JRExFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19GVU5DVElPTl9fICwgZXZlbnQpOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX2Z1bmNfXyAsIGV2ZW50KTsKIAkJYnJlYWs7CiAJfQogCWlmIChza2IpCkBAIC00OTQsNyArNDk0LDcgQEAKIHN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X3N0YXRlX2Nsb3NlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgSVJMQU5fRVZFTlQgZXZlbnQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTUxMSw3ICs1MTEsNyBAQAogc3RhdGljIGludCBpcmxhbl9jbGllbnRfc3RhdGVfc3luYyhzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKaW5kZXggYTRiNTZlMi4uOWExY2Q4NyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKQEAgLTU0LDEzICs1NCw2IEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYW5fZmlsdGVyLmg+CiAKIAotLyoKLSAqIFNlbmQgZ3JhdHVpdG91cyBBUlAgd2hlbiBjb25uZWN0ZWQgdG8gYSBuZXcgQVAgb3Igbm90LiBNYXkgYmUgYSBjbGV2ZXIKLSAqIHRoaW5nIHRvIGRvLCBidXQgZm9yIHNvbWUgcmVhc29uIHRoZSBtYWNoaW5lIGNyYXNoZXMgaWYgeW91IHVzZSBESENQLiBTbwotICogbGV0cyBub3QgdXNlIGl0IGJ5IGRlZmF1bHQuCi0gKi8KLSN1bmRlZiBDT05GSUdfSVJMQU5fU0VORF9HUkFUVUlUT1VTX0FSUAotCiAvKiBleHRlcm4gY2hhciBzeXNjdGxfZGV2bmFtZVtdOyAqLwogCiAvKgpAQCAtMTI0LDIxICsxMTcsMTkgQEAKIAlzdHJ1Y3QgaXJsYW5fY2IgKm5ldzsKIAlfX3UxNiBoaW50czsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXsgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwotCXByb2MgPSBjcmVhdGVfcHJvY19lbnRyeSgiaXJsYW4iLCAwLCBwcm9jX2lyZGEpOworCXByb2MgPSBwcm9jX2NyZWF0ZSgiaXJsYW4iLCAwLCBwcm9jX2lyZGEsICZpcmxhbl9mb3BzKTsKIAlpZiAoIXByb2MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpcmxhbl9pbml0OiBjYW4ndCBjcmVhdGUgL3Byb2MgZW50cnkhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCi0JcHJvYy0+cHJvY19mb3BzID0gJmlybGFuX2ZvcHM7CiAJfQogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCWhpbnRzID0gaXJsbXBfc2VydmljZV90b19oaW50KFNfTEFOKTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggSXJMTVAgYXMgYSBjbGllbnQgKi8KQEAgLTE4MSw3ICsxNzIsNyBAQAogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgKm5leHQ7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJaXJsbXBfdW5yZWdpc3Rlcl9jbGllbnQoY2tleSk7CiAJaXJsbXBfdW5yZWdpc3Rlcl9zZXJ2aWNlKHNrZXkpOwpAQCAtMjA5LDcgKzIwMCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJLyogQ3JlYXRlIG5ldHdvcmsgZGV2aWNlIHdpdGggaXJsYW4gKi8KIAlkZXYgPSBhbGxvY19pcmxhbmRldihldGggPyAiZXRoJWQiIDogImlybGFuJWQiKTsKQEAgLTI1NCw3ICsyNDUsNyBAQAogCiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKSB7CiAJCUlSREFfREVCVUcoMiwgIiVzKCksIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZCFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18gKTsKKwkJCSAgIF9fZnVuY19fICk7CiAJCXNlbGYgPSBOVUxMOwogCQlmcmVlX25ldGRldihkZXYpOwogCX0gZWxzZSB7CkBAIC0yNzQsNyArMjY1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pcmxhbl9jbG9zZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUFTU0VSVF9SVE5MKCk7CiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTMyMiw3ICszMTMsNyBAQAogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKIAlzdHJ1Y3QgdHNhcF9jYiAqdHNhcDsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmxhbl9jYiAqKSBpbnN0YW5jZTsKIAl0c2FwID0gKHN0cnVjdCB0c2FwX2NiICopIHNhcDsKQEAgLTMzNCw3ICszMjUsNyBAQAogCXNlbGYtPm1heF9zZHVfc2l6ZSA9IG1heF9zZHVfc2l6ZTsKIAlzZWxmLT5tYXhfaGVhZGVyX3NpemUgPSBtYXhfaGVhZGVyX3NpemU7CiAKLQlJUkRBX0RFQlVHKDAsICIlczogV2UgYXJlIG5vdyBjb25uZWN0ZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMCwgIiVzOiBXZSBhcmUgbm93IGNvbm5lY3RlZCFcbiIsIF9fZnVuY19fKTsKIAogCWRlbF90aW1lcigmc2VsZi0+d2F0Y2hkb2dfdGltZXIpOwogCkBAIC0zNzgsNyArMzY5LDcgQEAKIAogCS8qIFRPRE86IHdlIGNvdWxkIHNldCB0aGUgTVRVIGRlcGVuZGluZyBvbiB0aGUgbWF4X3NkdV9zaXplICovCiAKLQlJUkRBX0RFQlVHKDAsICIlczogV2UgYXJlIG5vdyBjb25uZWN0ZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMCwgIiVzOiBXZSBhcmUgbm93IGNvbm5lY3RlZCFcbiIsIF9fZnVuY19fKTsKIAlkZWxfdGltZXIoJnNlbGYtPndhdGNoZG9nX3RpbWVyKTsKIAogCS8qCkBAIC0zOTUsOSArMzg2LDYgQEAKIAkvKiBSZWFkeSB0byB0cmFuc2ZlciBFdGhlcm5ldCBmcmFtZXMgKi8KIAluZXRpZl9zdGFydF9xdWV1ZShzZWxmLT5kZXYpOwogCXNlbGYtPmRpc2Nvbm5lY3RfcmVhc29uID0gMDsgLyogQ2xlYXIgcmVhc29uICovCi0jaWZkZWYgQ09ORklHX0lSTEFOX1NFTkRfR1JBVFVJVE9VU19BUlAKLQlpcmxhbl9ldGhfc2VuZF9ncmF0dWl0b3VzX2FycCgmc2VsZi0+ZGV2KTsKLSNlbmRpZgogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2VsZi0+b3Blbl93YWl0KTsKIH0KIApAQCAtNDE0LDcgKzQwMiw3IEBACiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwogCXN0cnVjdCB0c2FwX2NiICp0c2FwOwogCi0JSVJEQV9ERUJVRygwLCAiJXMoKSwgcmVhc29uPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCByZWFzb24pOworCUlSREFfREVCVUcoMCwgIiVzKCksIHJlYXNvbj0lZFxuIiwgX19mdW5jX18gLCByZWFzb24pOwogCiAJc2VsZiA9IChzdHJ1Y3QgaXJsYW5fY2IgKikgaW5zdGFuY2U7CiAJdHNhcCA9IChzdHJ1Y3QgdHNhcF9jYiAqKSBzYXA7CkBAIC00MzMsMjIgKzQyMSwyMiBAQAogCiAJc3dpdGNoIChyZWFzb24pIHsKIAljYXNlIExNX1VTRVJfUkVRVUVTVDogLyogVXNlciByZXF1ZXN0ICovCi0JCUlSREFfREVCVUcoMiwgIiVzKCksIFVzZXIgcmVxdWVzdGVkXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVXNlciByZXF1ZXN0ZWRcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWNhc2UgTE1fTEFQX0RJU0NPTk5FQ1Q6IC8qIFVuZXhwZWN0ZWQgSXJMQVAgZGlzY29ubmVjdCAqLwotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmV4cGVjdGVkIElyTEFQIGRpc2Nvbm5lY3RcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmV4cGVjdGVkIElyTEFQIGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWNhc2UgTE1fQ09OTkVDVF9GQUlMVVJFOiAvKiBGYWlsZWQgdG8gZXN0YWJsaXNoIElyTEFQIGNvbm5lY3Rpb24gKi8KLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMQVAgY29ubmVjdCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJckxBUCBjb25uZWN0IGZhaWxlZFxuIiwgX19mdW5jX18gKTsKIAkJYnJlYWs7CiAJY2FzZSBMTV9MQVBfUkVTRVQ6ICAvKiBJckxBUCByZXNldCAqLwotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJckxBUCByZXNldFxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIElyTEFQIHJlc2V0XG4iLCBfX2Z1bmNfXyApOwogCQlicmVhazsKIAljYXNlIExNX0lOSVRfRElTQ09OTkVDVDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMTVAgY29ubmVjdCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBJckxNUCBjb25uZWN0IGZhaWxlZFxuIiwgX19mdW5jX18gKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9FUlJPUigiJXMoKSwgVW5rbm93biBkaXNjb25uZWN0IHJlYXNvblxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9FUlJPUigiJXMoKSwgVW5rbm93biBkaXNjb25uZWN0IHJlYXNvblxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAl9CiAKQEAgLTQ3MCw3ICs0NTgsNyBAQAogCXN0cnVjdCB0c2FwX2NiICp0c2FwOwogCW5vdGlmeV90IG5vdGlmeTsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKQEAgLTQ5Miw3ICs0ODAsNyBAQAogCiAJdHNhcCA9IGlydHRwX29wZW5fdHNhcChMU0FQX0FOWSwgREVGQVVMVF9JTklUSUFMX0NSRURJVCwgJm5vdGlmeSk7CiAJaWYgKCF0c2FwKSB7Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIEdvdCBubyB0c2FwIVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIEdvdCBubyB0c2FwIVxuIiwgX19mdW5jX18gKTsKIAkJcmV0dXJuOwogCX0KIAlzZWxmLT50c2FwX2RhdGEgPSB0c2FwOwpAQCAtNTA2LDcgKzQ5NCw3IEBACiAKIHZvaWQgaXJsYW5fY2xvc2VfdHNhcHMoc3RydWN0IGlybGFuX2NiICpzZWxmKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKQEAgLTU5Niw3ICs1ODQsNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJaWYgKGlyZGFfbG9jaygmc2VsZi0+Y2xpZW50LnR4X2J1c3kpID09IEZBTFNFKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtNjE1LDcgKzYwMyw3IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlJUkRBX0RFQlVHKDIsICIlcygpLCBzZW5kaW5nIC4uLlxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKSwgc2VuZGluZyAuLi5cbiIsIF9fZnVuY19fICk7CiAKIAlyZXR1cm4gaXJ0dHBfZGF0YV9yZXF1ZXN0KHNlbGYtPmNsaWVudC50c2FwX2N0cmwsIHNrYik7CiB9CkBAIC02MjgsNyArNjE2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgaXJsYW5fY3RybF9kYXRhX3JlcXVlc3Qoc3RydWN0IGlybGFuX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAkvKiBRdWV1ZSBjb21tYW5kICovCiAJc2tiX3F1ZXVlX3RhaWwoJnNlbGYtPmNsaWVudC50eHEsIHNrYik7CkBAIC02NDgsNyArNjM2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtNjgxLDcgKzY2OSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX3U4ICpmcmFtZTsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKQEAgLTcxNiw3ICs3MDQsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJX191OCAqZnJhbWU7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CkBAIC03NTcsNyArNzQ1LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtNzk5LDcgKzc4Nyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX3U4ICpmcmFtZTsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKQEAgLTg0Myw3ICs4MzEsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJX191OCAqZnJhbWU7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CkBAIC04ODgsNyArODc2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTggKmZyYW1lOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwpAQCAtOTI4LDcgKzkxNiw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX3U4ICpmcmFtZTsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKQEAgLTEwMTYsNyArMTAwNCw3IEBACiAJaW50IG49MDsKIAogCWlmIChza2IgPT0gTlVMTCkgewotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBHb3QgTlVMTCBza2JcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBHb3QgTlVMTCBza2JcbiIsIF9fZnVuY19fICk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTAzMyw3ICsxMDIxLDcgQEAKIAkJSVJEQV9BU1NFUlQodmFsdWVfbGVuID4gMCwgcmV0dXJuIDA7KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBwYXJhbWV0ZXIgdHlwZSFcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIHBhcmFtZXRlciB0eXBlIVxuIiwgX19mdW5jX18gKTsKIAkJcmV0dXJuIDA7CiAJCWJyZWFrOwogCX0KQEAgLTEwNDMsNyArMTAzMSw3IEBACiAKIAkvKiBNYWtlIHNwYWNlIGZvciBkYXRhICovCiAJaWYgKHNrYl90YWlscm9vbShza2IpIDwgKHBhcmFtX2xlbit2YWx1ZV9sZW4rMykpIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgTm8gbW9yZSBzcGFjZSBhdCBlbmQgb2Ygc2tiXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgTm8gbW9yZSBzcGFjZSBhdCBlbmQgb2Ygc2tiXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gMDsKIAl9CiAJc2tiX3B1dChza2IsIHBhcmFtX2xlbit2YWx1ZV9sZW4rMyk7CkBAIC0xMDkwLDEzICsxMDc4LDEzIEBACiAJX191MTYgdmFsX2xlbjsKIAlpbnQgbj0wOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCS8qIGdldCBsZW5ndGggb2YgcGFyYW1ldGVyIG5hbWUgKDEgYnl0ZSkgKi8KIAluYW1lX2xlbiA9IGJ1ZltuKytdOwogCiAJaWYgKG5hbWVfbGVuID4gMjU0KSB7Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIG5hbWVfbGVuID4gMjU0XG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgbmFtZV9sZW4gPiAyNTRcbiIsIF9fZnVuY19fICk7CiAJCXJldHVybiAtUlNQX0lOVkFMSURfQ09NTUFORF9GT1JNQVQ7CiAJfQogCkBAIC0xMTEzLDcgKzExMDEsNyBAQAogCWxlMTZfdG9fY3B1cygmdmFsX2xlbik7IG4rPTI7CiAKIAlpZiAodmFsX2xlbiA+IDEwMTYpIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgcGFyYW1ldGVyIGxlbmd0aCB0byBsb25nXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgcGFyYW1ldGVyIGxlbmd0aCB0byBsb25nXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gLVJTUF9JTlZBTElEX0NPTU1BTkRfRk9STUFUOwogCX0KIAkqbGVuID0gdmFsX2xlbjsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggMWFiOTFmNy4uMDUxMTJiZSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJLyogUmVhZHkgdG8gcGxheSEgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7IC8qIFdhaXQgdW50aWwgZGF0YSBsaW5rIGlzIHJlYWR5ICovCkBAIC0xMzAsNyArMTMwLDcgQEAKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCS8qIFN0b3AgZGV2aWNlICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJfQogCWlmIChza2ItPmxlbiA8IEVUSF9ITEVOKSB7CiAJCUlSREFfREVCVUcoMCwgIiVzKCkgOiBJckxBTiBmcmFtZSB0b28gc2hvcnQgKCVkKVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgc2tiLT5sZW4pOworCQkJICAgX19mdW5jX18sIHNrYi0+bGVuKTsKIAkJKytzZWxmLT5zdGF0cy5yeF9kcm9wcGVkOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAKIAlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuOyk7CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpIDogZmxvdyAlcyA7IHJ1bm5pbmcgJWRcbiIsIF9fRlVOQ1RJT05fXywKKwlJUkRBX0RFQlVHKDAsICIlcygpIDogZmxvdyAlcyA7IHJ1bm5pbmcgJWRcbiIsIF9fZnVuY19fLAogCQkgICBmbG93ID09IEZMT1dfU1RPUCA/ICJGTE9XX1NUT1AiIDogIkZMT1dfU1RBUlQiLAogCQkgICBuZXRpZl9ydW5uaW5nKGRldikpOwogCkBAIC0yODksMzkgKzI4OSw2IEBACiB9CiAKIC8qCi0gKiBGdW5jdGlvbiBpcmxhbl9ldGNfc2VuZF9ncmF0dWl0b3VzX2FycCAoZGV2KQotICoKLSAqICAgIFNlbmQgZ3JhdHVpdG91cyBBUlAgdG8gYW5ub3VuY2UgdGhhdCB3ZSBoYXZlIGNoYW5nZWQKLSAqICAgIGhhcmR3YXJlIGFkZHJlc3MsIHNvIHRoYXQgYWxsIHBlZXJzIHVwZGF0ZXMgdGhlaXIgQVJQIHRhYmxlcwotICovCi12b2lkIGlybGFuX2V0aF9zZW5kX2dyYXR1aXRvdXNfYXJwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0jaWZkZWYgQ09ORklHX0lORVQKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0KLQkvKgotCSAqIFdoZW4gd2UgZ2V0IGEgbmV3IE1BQyBhZGRyZXNzIGRvIGEgZ3JhdHVpdG91cyBBUlAuIFRoaXMKLQkgKiBpcyB1c2VmdWwgaWYgd2UgaGF2ZSBjaGFuZ2VkIGFjY2VzcyBwb2ludHMgb24gdGhlIHNhbWUKLQkgKiBzdWJuZXQuCi0JICovCi0JSVJEQV9ERUJVRyg0LCAiSXJMQU46IFNlbmRpbmcgZ3JhdHVpdG91cyBBUlBcbiIpOwotCXJjdV9yZWFkX2xvY2soKTsKLQlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7Ci0JaWYgKGluX2RldiA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQlpZiAoaW5fZGV2LT5pZmFfbGlzdCkKLQotCWFycF9zZW5kKEFSUE9QX1JFUVVFU1QsIEVUSF9QX0FSUCwKLQkJIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzLAotCQkgZGV2LAotCQkgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3MsCi0JCSBOVUxMLCBkZXYtPmRldl9hZGRyLCBOVUxMKTsKLW91dDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLSNlbmRpZiAvKiBDT05GSUdfSU5FVCAqLwotfQotCi0vKgogICogRnVuY3Rpb24gc2V0X211bHRpY2FzdF9saXN0IChkZXYpCiAgKgogICogICAgQ29uZmlndXJlIHRoZSBmaWx0ZXJpbmcgb2YgdGhlIGRldmljZQpAQCAtMzMyLDExICsyOTksMTEgQEAKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCS8qIENoZWNrIGlmIGRhdGEgY2hhbm5lbCBoYXMgYmVlbiBjb25uZWN0ZWQgeWV0ICovCiAJaWYgKHNlbGYtPmNsaWVudC5zdGF0ZSAhPSBJUkxBTl9EQVRBKSB7Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIGRlbGF5aW5nIVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIGRlbGF5aW5nIVxuIiwgX19mdW5jX18gKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzQ2LDIwICszMTMsMjAgQEAKIAl9CiAJZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IGRldi0+bWNfY291bnQgPiBIV19NQVhfQUREUlMpIHsKIAkJLyogRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLCB1c2Ugbm9ybWFsIG1vZGUuICovCi0JCUlSREFfREVCVUcoNCwgIiVzKCksIFNldHRpbmcgbXVsdGljYXN0IGZpbHRlclxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIFNldHRpbmcgbXVsdGljYXN0IGZpbHRlclxuIiwgX19mdW5jX18gKTsKIAkJLyogaGFyZHdhcmVfc2V0X2ZpbHRlcihOVUxMKTsgKi8KIAogCQlpcmxhbl9zZXRfbXVsdGljYXN0X2ZpbHRlcihzZWxmLCBUUlVFKTsKIAl9CiAJZWxzZSBpZiAoZGV2LT5tY19jb3VudCkgewotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBTZXR0aW5nIG11bHRpY2FzdCBmaWx0ZXJcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBTZXR0aW5nIG11bHRpY2FzdCBmaWx0ZXJcbiIsIF9fZnVuY19fICk7CiAJCS8qIFdhbGsgdGhlIGFkZHJlc3MgbGlzdCwgYW5kIGxvYWQgdGhlIGZpbHRlciAqLwogCQkvKiBoYXJkd2FyZV9zZXRfZmlsdGVyKGRldi0+bWNfbGlzdCk7ICovCiAKIAkJaXJsYW5fc2V0X211bHRpY2FzdF9maWx0ZXIoc2VsZiwgVFJVRSk7CiAJfQogCWVsc2UgewotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBDbGVhcmluZyBtdWx0aWNhc3QgZmlsdGVyXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgQ2xlYXJpbmcgbXVsdGljYXN0IGZpbHRlclxuIiwgX19mdW5jX18gKTsKIAkJaXJsYW5fc2V0X211bHRpY2FzdF9maWx0ZXIoc2VsZiwgRkFMU0UpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXZlbnQuYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V2ZW50LmMKaW5kZXggYTk3NTBhOC4uY2JjYjRlYiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldmVudC5jCkBAIC00MCw3ICs0MCw3IEBACiAKIHZvaWQgaXJsYW5fbmV4dF9jbGllbnRfc3RhdGUoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9TVEFURSBzdGF0ZSkKIHsKLQlJUkRBX0RFQlVHKDIsICIlcygpLCAlc1xuIiwgX19GVU5DVElPTl9fICwgaXJsYW5fc3RhdGVbc3RhdGVdKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpLCAlc1xuIiwgX19mdW5jX18gLCBpcmxhbl9zdGF0ZVtzdGF0ZV0pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CkBAIC01MCw3ICs1MCw3IEBACiAKIHZvaWQgaXJsYW5fbmV4dF9wcm92aWRlcl9zdGF0ZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX1NUQVRFIHN0YXRlKQogewotCUlSREFfREVCVUcoMiwgIiVzKCksICVzXG4iLCBfX0ZVTkNUSU9OX18gLCBpcmxhbl9zdGF0ZVtzdGF0ZV0pOworCUlSREFfREVCVUcoMiwgIiVzKCksICVzXG4iLCBfX2Z1bmNfXyAsIGlybGFuX3N0YXRlW3N0YXRlXSk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2ZpbHRlci5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKaW5kZXggNDM4NGJlOS4uOWZmNzgyMyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogewogCV9fdTggKmJ5dGVzOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCWJ5dGVzID0gdmFsdWU7CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogCSAqICBUaGlzIGlzIGV4cGVyaW1lbnRhbCEhIERCLgogCSAqLwogCSBpZiAoc3RyY21wKHBhcmFtLCAiTU9ERSIpID09IDApIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAJCXNlbGYtPnVzZV91ZGF0YSA9IFRSVUU7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYwppbmRleCAxM2RiOTQyLi4zZjgxZjgxIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAJX191OCBjb2RlOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCXNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGluc3RhbmNlOwogCkBAIC05OSwxNSArOTksMTUgQEAKIAkJaXJsYW5fZG9fcHJvdmlkZXJfZXZlbnQoc2VsZiwgSVJMQU5fRklMVEVSX0NPTkZJR19DTUQsIHNrYik7CiAJCWJyZWFrOwogCWNhc2UgQ01EX1JFQ09OTkVDVF9EQVRBX0NIQU46Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIEdvdCBSRUNPTk5FQ1RfREFUQV9DSEFOIGNvbW1hbmRcbiIsIF9fRlVOQ1RJT05fXyApOwotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBOT1QgSU1QTEVNRU5URURcbiIsIF9fRlVOQ1RJT05fXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBHb3QgUkVDT05ORUNUX0RBVEFfQ0hBTiBjb21tYW5kXG4iLCBfX2Z1bmNfXyApOworCQlJUkRBX0RFQlVHKDIsICIlcygpLCBOT1QgSU1QTEVNRU5URURcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCWNhc2UgQ01EX0NMT1NFX0RBVEFfQ0hBTjoKIAkJSVJEQV9ERUJVRygyLCAiR290IENMT1NFX0RBVEFfQ0hBTiBjb21tYW5kIVxuIik7Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIE5PVCBJTVBMRU1FTlRFRFxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIE5PVCBJTVBMRU1FTlRFRFxuIiwgX19mdW5jX18gKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBjb21tYW5kIVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gY29tbWFuZCFcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEyOSw3ICsxMjksNyBAQAogCXN0cnVjdCB0c2FwX2NiICp0c2FwOwogCV9fdTMyIHNhZGRyLCBkYWRkcjsKIAotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmxhbl9jYiAqKSBpbnN0YW5jZTsKIAl0c2FwID0gKHN0cnVjdCB0c2FwX2NiICopIHNhcDsKQEAgLTE4Miw3ICsxODIsNyBAQAogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKIAlzdHJ1Y3QgdHNhcF9jYiAqdHNhcDsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIHJlYXNvbj0lZFxuIiwgX19GVU5DVElPTl9fICwgcmVhc29uKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCByZWFzb249JWRcbiIsIF9fZnVuY19fICwgcmVhc29uKTsKIAogCXNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGluc3RhbmNlOwogCXRzYXAgPSAoc3RydWN0IHRzYXBfY2IgKikgc2FwOwpAQCAtMjM2LDcgKzIzNiw3IEBACiAKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuIC1SU1BfUFJPVE9DT0xfRVJST1I7KTsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIHNrYi0+bGVuPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCAoaW50KXNrYi0+bGVuKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBza2ItPmxlbj0lZFxuIiwgX19mdW5jX18gLCAoaW50KXNrYi0+bGVuKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC1SU1BfUFJPVE9DT0xfRVJST1I7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuIC1SU1BfUFJPVE9DT0xfRVJST1I7KTsKQEAgLTI2Niw3ICsyNjYsNyBAQAogCWZvciAoaT0wOyBpPGNvdW50O2krKykgewogCQlyZXQgPSBpcmxhbl9leHRyYWN0X3BhcmFtKHB0ciwgbmFtZSwgdmFsdWUsICZ2YWxfbGVuKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCUlSREFfREVCVUcoMiwgIiVzKCksIElyTEFOLCBFcnJvciFcbiIsIF9fRlVOQ1RJT05fXyApOworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgSXJMQU4sIEVycm9yIVxuIiwgX19mdW5jX18gKTsKIAkJCWJyZWFrOwogCQl9CiAJCXB0cis9cmV0OwpAQCAtMjkxLDcgKzI5MSw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKQEAgLTMyMyw3ICszMjMsNyBAQAogCQkJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJNRURJQSIsICI4MDIuNSIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1bmtub3duIG1lZGlhIHR5cGUhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJCUlSREFfREVCVUcoMiwgIiVzKCksIHVua25vd24gbWVkaWEgdHlwZSFcbiIsIF9fZnVuY19fICk7CiAJCQlicmVhazsKIAkJfQogCQlpcmxhbl9pbnNlcnRfc2hvcnRfcGFyYW0oc2tiLCAiSVJMQU5fVkVSIiwgMHgwMTAxKTsKQEAgLTM0Nyw3ICszNDcsNyBAQAogCQkJaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShza2IsICJBQ0NFU1NfVFlQRSIsICJIT1NURUQiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBhY2Nlc3MgdHlwZVxuIiwgX19GVU5DVElPTl9fICk7CisJCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGFjY2VzcyB0eXBlXG4iLCBfX2Z1bmNfXyApOwogCQkJYnJlYWs7CiAJCX0KIAkJaXJsYW5faW5zZXJ0X3Nob3J0X3BhcmFtKHNrYiwgIk1BWF9GUkFNRSIsIDB4MDVlZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJaXJsYW5fZmlsdGVyX3JlcXVlc3Qoc2VsZiwgc2tiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBjb21tYW5kIVxuIiwgX19GVU5DVElPTl9fICk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gY29tbWFuZCFcbiIsIF9fZnVuY19fICk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzg1LDcgKzM4NSw3IEBACiAJc3RydWN0IHRzYXBfY2IgKnRzYXA7CiAJbm90aWZ5X3Qgbm90aWZ5OwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybiAtMTspOwpAQCAtNDA2LDcgKzQwNiw3IEBACiAKIAl0c2FwID0gaXJ0dHBfb3Blbl90c2FwKExTQVBfQU5ZLCAxLCAmbm90aWZ5KTsKIAlpZiAoIXRzYXApIHsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgR290IG5vIHRzYXAhXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgR290IG5vIHRzYXAhXG4iLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gLTE7CiAJfQogCXNlbGYtPnByb3ZpZGVyLnRzYXBfY3RybCA9IHRzYXA7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlcl9ldmVudC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXJfZXZlbnQuYwppbmRleCAxMGVjZTVhLi4wMWE5ZDdjIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlcl9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyX2V2ZW50LmMKQEAgLTcyLDcgKzcyLDcgQEAKIHN0YXRpYyBpbnQgaXJsYW5fcHJvdmlkZXJfc3RhdGVfaWRsZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIApAQCAtODIsNyArODIsNyBAQAogCSAgICAgaXJsYW5fbmV4dF9wcm92aWRlcl9zdGF0ZSggc2VsZiwgSVJMQU5fSU5GTyk7CiAJICAgICBicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fZnVuY19fICwgZXZlbnQpOwogCQlicmVhazsKIAl9CiAJaWYgKHNrYikKQEAgLTEwMSw3ICsxMDEsNyBAQAogewogCWludCByZXQ7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCWlybGFuX25leHRfcHJvdmlkZXJfc3RhdGUoc2VsZiwgSVJMQU5fSURMRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoIDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CisJCUlSREFfREVCVUcoIDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX2Z1bmNfXyAsIGV2ZW50KTsKIAkJYnJlYWs7CiAJfQogCWlmIChza2IpCkBAIC0xNjYsNyArMTY2LDcgQEAKIHN0YXRpYyBpbnQgaXJsYW5fcHJvdmlkZXJfc3RhdGVfb3BlbihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIElSTEFOX0VWRU5UIGV2ZW50LAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAJCWlybGFuX25leHRfcHJvdmlkZXJfc3RhdGUoc2VsZiwgSVJMQU5fSURMRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fRlVOQ1RJT05fXyAsIGV2ZW50KTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19mdW5jX18gLCBldmVudCk7CiAJCWJyZWFrOwogCX0KIAlpZiAoc2tiKQpAQCAtMjA1LDcgKzIwNSw3IEBACiBzdGF0aWMgaW50IGlybGFuX3Byb3ZpZGVyX3N0YXRlX2RhdGEoc3RydWN0IGlybGFuX2NiICpzZWxmLCBJUkxBTl9FVkVOVCBldmVudCwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybiAtMTspOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCWlybGFuX25leHRfcHJvdmlkZXJfc3RhdGUoc2VsZiwgSVJMQU5fSURMRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoIDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX0ZVTkNUSU9OX18gLCBldmVudCk7CisJCUlSREFfREVCVUcoIDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVkXG4iLCBfX2Z1bmNfXyAsIGV2ZW50KTsKIAkJYnJlYWs7CiAJfQogCWlmIChza2IpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhcC5jIGIvbmV0L2lyZGEvaXJsYXAuYwppbmRleCBmMzIzNmFjLi5lNDk2NWI3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhcC5jCisrKyBiL25ldC9pcmRhL2lybGFwLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAlpcmxhcCA9IGhhc2hiaW5fbmV3KEhCX0xPQ0spOwogCWlmIChpcmxhcCA9PSBOVUxMKSB7CiAJCUlSREFfRVJST1IoIiVzOiBjYW4ndCBhbGxvY2F0ZSBpcmxhcCBoYXNoYmluIVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTEzLDcgKzExMyw3IEBACiB7CiAJc3RydWN0IGlybGFwX2NiICpzZWxmOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBpcmxhcCBzdHJ1Y3R1cmUuICovCiAJc2VsZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcmxhcF9jYiksIEdGUF9LRVJORUwpOwpAQCAtMjE1LDcgKzIxNSw3IEBACiB7CiAJc3RydWN0IGlybGFwX2NiICpsYXA7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCS8qIEJlIHN1cmUgdGhhdCB3ZSBtYW5hZ2UgdG8gcmVtb3ZlIG91cnNlbGYgZnJvbSB0aGUgaGFzaCAqLwogCWxhcCA9IGhhc2hiaW5fcmVtb3ZlKGlybGFwLCBzZWxmLT5zYWRkciwgTlVMTCk7CiAJaWYgKCFsYXApIHsKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRGlkbid0IGZpbmQgbXlzZWxmIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRGlkbid0IGZpbmQgbXlzZWxmIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCV9faXJsYXBfY2xvc2UobGFwKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogICovCiB2b2lkIGlybGFwX2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC0yNjUsNyArMjY1LDcgQEAKICAqLwogdm9pZCBpcmxhcF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaXJsYXBfZG9fZXZlbnQoc2VsZiwgQ09OTkVDVF9SRVNQT05TRSwgdXNlcmRhdGEsIE5VTEwpOwogfQpAQCAtMjgwLDcgKzI4MCw3IEBACiB2b2lkIGlybGFwX2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIF9fdTMyIGRhZGRyLAogCQkJICAgc3RydWN0IHFvc19pbmZvICpxb3NfdXNlciwgaW50IHNuaWZmKQogewotCUlSREFfREVCVUcoMywgIiVzKCksIGRhZGRyPTB4JTA4eFxuIiwgX19GVU5DVElPTl9fLCBkYWRkcik7CisJSVJEQV9ERUJVRygzLCAiJXMoKSwgZGFkZHI9MHglMDh4XG4iLCBfX2Z1bmNfXywgZGFkZHIpOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybjspOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAgKi8KIHZvaWQgaXJsYXBfY29ubmVjdF9jb25maXJtKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTM0NCw3ICszNDQsNyBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKIAotCUlSREFfREVCVUcoMywgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2tiX2hlYWRyb29tKHNrYikgPj0gKExBUF9BRERSX0hFQURFUitMQVBfQ1RSTF9IRUFERVIpLAogCQkgICAgcmV0dXJuOyk7CkBAIC0zOTEsNyArMzkxLDcgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CiAKLQlJUkRBX0RFQlVHKDMsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMywgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNrYl9oZWFkcm9vbShza2IpID49IChMQVBfQUREUl9IRUFERVIrTEFQX0NUUkxfSEVBREVSKSwKIAkgICAgICAgcmV0dXJuOyk7CkBAIC00MTcsNyArNDE3LDcgQEAKICNpZmRlZiBDT05GSUdfSVJEQV9VTFRSQQogdm9pZCBpcmxhcF91bml0ZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTQzNyw3ICs0MzcsNyBAQAogICovCiB2b2lkIGlybGFwX2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpCiB7Ci0JSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDMsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC00NTgsNyArNDU4LDcgQEAKIAkJaXJsYXBfZG9fZXZlbnQoc2VsZiwgRElTQ09OTkVDVF9SRVFVRVNULCBOVUxMLCBOVUxMKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZGlzY29ubmVjdCBwZW5kaW5nIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZGlzY29ubmVjdCBwZW5kaW5nIVxuIiwgX19mdW5jX18pOwogCQlzZWxmLT5kaXNjb25uZWN0X3BlbmRpbmcgPSBUUlVFOwogCQlicmVhazsKIAl9CkBAIC00NzIsNyArNDcyLDcgQEAKICAqLwogdm9pZCBpcmxhcF9kaXNjb25uZWN0X2luZGljYXRpb24oc3RydWN0IGlybGFwX2NiICpzZWxmLCBMQVBfUkVBU09OIHJlYXNvbikKIHsKLQlJUkRBX0RFQlVHKDEsICIlcygpLCByZWFzb249JXNcbiIsIF9fRlVOQ1RJT05fXywgbGFwX3JlYXNvbnNbcmVhc29uXSk7CisJSVJEQV9ERUJVRygxLCAiJXMoKSwgcmVhc29uPSVzXG4iLCBfX2Z1bmNfXywgbGFwX3JlYXNvbnNbcmVhc29uXSk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC00ODIsNyArNDgyLDcgQEAKIAogCXN3aXRjaCAocmVhc29uKSB7CiAJY2FzZSBMQVBfUkVTRVRfSU5ESUNBVElPTjoKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgU2VuZGluZyByZXNldCByZXF1ZXN0IVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgU2VuZGluZyByZXNldCByZXF1ZXN0IVxuIiwgX19mdW5jX18pOwogCQlpcmxhcF9kb19ldmVudChzZWxmLCBSRVNFVF9SRVFVRVNULCBOVUxMLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBMQVBfTk9fUkVTUE9OU0U6CSAgIC8qIEZBTExUUk9VR0ggKi8KQEAgLTQ5Myw3ICs0OTMsNyBAQAogCQkJCQkJIHJlYXNvbiwgTlVMTCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfRVJST1IoIiVzOiBVbmtub3duIHJlYXNvbiAlZFxuIiwgX19GVU5DVElPTl9fLCByZWFzb24pOworCQlJUkRBX0VSUk9SKCIlczogVW5rbm93biByZWFzb24gJWRcbiIsIF9fZnVuY19fLCByZWFzb24pOwogCX0KIH0KIApAQCAtNTExLDcgKzUxMSw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChkaXNjb3ZlcnkgIT0gTlVMTCwgcmV0dXJuOyk7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBuc2xvdHMgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBkaXNjb3ZlcnktPm5zbG90cyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgbnNsb3RzID0gJWRcbiIsIF9fZnVuY19fLCBkaXNjb3ZlcnktPm5zbG90cyk7CiAKIAlJUkRBX0FTU0VSVCgoZGlzY292ZXJ5LT5uc2xvdHMgPT0gMSkgfHwgKGRpc2NvdmVyeS0+bnNsb3RzID09IDYpIHx8CiAJCSAgICAoZGlzY292ZXJ5LT5uc2xvdHMgPT0gOCkgfHwgKGRpc2NvdmVyeS0+bnNsb3RzID09IDE2KSwKQEAgLTUyMCw3ICs1MjAsNyBAQAogCS8qIERpc2NvdmVyeSBpcyBvbmx5IHBvc3NpYmxlIGluIE5ETSBtb2RlICovCiAJaWYgKHNlbGYtPnN0YXRlICE9IExBUF9ORE0pIHsKIAkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZGlzY292ZXJ5IG9ubHkgcG9zc2libGUgaW4gTkRNIG1vZGVcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlpcmxhcF9kaXNjb3ZlcnlfY29uZmlybShzZWxmLCBOVUxMKTsKIAkJLyogTm90ZSA6IGluIHRoZW9yeSwgaWYgd2UgYXJlIG5vdCBpbiBORE0sIHdlIGNvdWxkIHBvc3Rwb25lCiAJCSAqIHRoZSBkaXNjb3ZlcnkgbGlrZSB3ZSBkbyBmb3IgY29ubmVjdGlvbiByZXF1ZXN0LgpAQCAtNTQzLDcgKzU0Myw3IEBACiAKIAlpZiAoc2VsZi0+ZGlzY292ZXJ5X2xvZyA9PSBOVUxMKSB7CiAJCUlSREFfV0FSTklORygiJXMoKSwgVW5hYmxlIHRvIGFsbG9jYXRlIGRpc2NvdmVyeSBsb2chXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU5OCw3ICs1OTgsNyBAQAogICovCiB2b2lkIGlybGFwX2Rpc2NvdmVyeV9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgZGlzY292ZXJ5X3QgKmRpc2NvdmVyeSkKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTY0NCw3ICs2NDQsNyBAQAogICovCiB2b2lkIGlybGFwX3Jlc2V0X2luZGljYXRpb24oc3RydWN0IGlybGFwX2NiICpzZWxmKQogewotCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybjspOwpAQCAtNjYwLDcgKzY2MCw3IEBACiAgKi8KIHZvaWQgaXJsYXBfcmVzZXRfY29uZmlybSh2b2lkKQogewotCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogfQogCiAvKgpAQCAtNzYwLDcgKzc2MCw3IEBACiB7CiAJLyogIG5yIGFzIGV4cGVjdGVkPyAgKi8KIAlpZiAobnIgPT0gc2VsZi0+dnMpIHsKLQkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZXhwZWN0ZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBleHBlY3RlZCFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5SX0VYUEVDVEVEOwogCX0KIApAQCAtNzg4LDcgKzc4OCw3IEBACiAgKi8KIHZvaWQgaXJsYXBfaW5pdGlhdGVfY29ubmVjdGlvbl9zdGF0ZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC04NzEsNyArODcxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JSVJEQV9ERUJVRygwLCAiJXMoKSwgc2V0dGluZyBzcGVlZCB0byAlZFxuIiwgX19GVU5DVElPTl9fLCBzcGVlZCk7CisJSVJEQV9ERUJVRygwLCAiJXMoKSwgc2V0dGluZyBzcGVlZCB0byAlZFxuIiwgX19mdW5jX18sIHNwZWVkKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTkxNCw3ICs5MTQsNyBAQAogCSAqICB1c2VyIG1heSBub3QgaGF2ZSBzZXQgYWxsIG9mIHRoZW0uCiAJICovCiAJaWYgKHFvc191c2VyKSB7Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIEZvdW5kIHVzZXIgc3BlY2lmaWVkIFFvUyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIEZvdW5kIHVzZXIgc3BlY2lmaWVkIFFvUyFcbiIsIF9fZnVuY19fKTsKIAogCQlpZiAocW9zX3VzZXItPmJhdWRfcmF0ZS5iaXRzKQogCQkJc2VsZi0+cW9zX3J4LmJhdWRfcmF0ZS5iaXRzICY9IHFvc191c2VyLT5iYXVkX3JhdGUuYml0czsKQEAgLTk0NCw3ICs5NDQsNyBAQAogICovCiB2b2lkIGlybGFwX2FwcGx5X2RlZmF1bHRfY29ubmVjdGlvbl9wYXJhbWV0ZXJzKHN0cnVjdCBpcmxhcF9jYiAqc2VsZikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAgKi8KIHZvaWQgaXJsYXBfYXBwbHlfY29ubmVjdGlvbl9wYXJhbWV0ZXJzKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IG5vdykKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCmluZGV4IDZhZjg2ZWIuLjE2YzRlZjAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJfSBlbHNlCiAJCXNlbGYtPmZhc3RfUlIgPSBGQUxTRTsKIAotCUlSREFfREVCVUcoMywgIiVzKCksIHRpbWVvdXQ9JWQgKCVsZClcbiIsIF9fRlVOQ1RJT05fXywgdGltZW91dCwgamlmZmllcyk7CisJSVJEQV9ERUJVRygzLCAiJXMoKSwgdGltZW91dD0lZCAoJWxkKVxuIiwgX19mdW5jX18sIHRpbWVvdXQsIGppZmZpZXMpOwogI2VuZGlmIC8qIENPTkZJR19JUkRBX0ZBU1RfUlIgKi8KIAogCWlmICh0aW1lb3V0ID09IDApCkBAIC0yNDEsNyArMjQxLDcgQEAKIAlpZiAoIXNlbGYgfHwgc2VsZi0+bWFnaWMgIT0gTEFQX01BR0lDKQogCQlyZXR1cm47CiAKLQlJUkRBX0RFQlVHKDMsICIlcygpLCBldmVudCA9ICVzLCBzdGF0ZSA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sCisJSVJEQV9ERUJVRygzLCAiJXMoKSwgZXZlbnQgPSAlcywgc3RhdGUgPSAlc1xuIiwgX19mdW5jX18sCiAJCSAgIGlybGFwX2V2ZW50W2V2ZW50XSwgaXJsYXBfc3RhdGVbc2VsZi0+c3RhdGVdKTsKIAogCXJldCA9ICgqc3RhdGVbc2VsZi0+c3RhdGVdKShzZWxmLCBldmVudCwgc2tiLCBpbmZvKTsKQEAgLTI1OSw3ICsyNTksNyBAQAogCQkgKiB0cnkgdG8gZGlzY29ubmVjdCBsaW5rIGlmIHdlIHNlbmQgYW55IGRhdGEgZnJhbWVzLCBzaW5jZQogCQkgKiB0aGF0IHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBhd2F5IGZvcm0gWE1JVAogCQkgKi8KLQkJSVJEQV9ERUJVRygyLCAiJXMoKSA6IHF1ZXVlIGxlbiA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCUlSREFfREVCVUcoMiwgIiVzKCkgOiBxdWV1ZSBsZW4gPSAlZFxuIiwgX19mdW5jX18sCiAJCQkgICBza2JfcXVldWVfbGVuKCZzZWxmLT50eHEpKTsKIAogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc2VsZi0+dHhxKSkgewpAQCAtMzQwLDcgKzM0MCw3IEBACiAJCQkgKiBtZWRpYSBidXN5IGluIGlybGFwX2Nvbm5lY3RfcmVxdWVzdCgpIGFuZAogCQkJICogcG9zdHBvbmUgdGhlIGV2ZW50Li4uIC0gSmVhbiBJSSAqLwogCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgQ09OTkVDVF9SRVFVRVNUOiBtZWRpYSBidXN5IVxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAogCQkJLyogQWx3YXlzIHN3aXRjaCBzdGF0ZSBiZWZvcmUgY2FsbGluZyB1cHBlciBsYXllcnMgKi8KIAkJCWlybGFwX25leHRfc3RhdGUoc2VsZiwgTEFQX05ETSk7CkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJCWlybGFwX2Nvbm5lY3RfaW5kaWNhdGlvbihzZWxmLCBza2IpOwogCQl9IGVsc2UgewogCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgU05STSBmcmFtZSBkb2VzIG5vdCAiCi0JCQkJICAgImNvbnRhaW4gYW4gSSBmaWVsZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgImNvbnRhaW4gYW4gSSBmaWVsZCFcbiIsIF9fZnVuY19fKTsKIAkJfQogCQlicmVhazsKIAljYXNlIERJU0NPVkVSWV9SRVFVRVNUOgpAQCAtMzc1LDcgKzM3NSw3IEBACiAKIAkJaWYgKHNlbGYtPm1lZGlhX2J1c3kpIHsKIAkJCUlSREFfREVCVUcoMSwgIiVzKCksIERJU0NPVkVSWV9SRVFVRVNUOiBtZWRpYSBidXN5IVxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCS8qIGlybGFwLT5sb2cuY29uZGl0aW9uID0gTUVESUFfQlVTWTsgKi8KIAogCQkJLyogVGhpcyB3aWxsIG1ha2UgSXJMTVAgdHJ5IGFnYWluICovCkBAIC00NDEsNyArNDQxLDcgQEAKIAkJICogdGhvc2UgY2FzZXMuLi4KIAkJICogSmVhbiBJSQogCQkgKi8KLQkJCUlSREFfREVCVUcoMSwgIiVzKCksIFJlY2VpdmluZyBmaW5hbCBkaXNjb3ZlcnkgcmVxdWVzdCwgbWlzc2VkIHRoZSBkaXNjb3Zlcnkgc2xvdHMgOi0oXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgUmVjZWl2aW5nIGZpbmFsIGRpc2NvdmVyeSByZXF1ZXN0LCBtaXNzZWQgdGhlIGRpc2NvdmVyeSBzbG90cyA6LShcbiIsIF9fZnVuY19fKTsKIAogCQkJLyogTGFzdCBkaXNjb3ZlcnkgcmVxdWVzdCAtPiBpbiB0aGUgbG9nICovCiAJCQlpcmxhcF9kaXNjb3ZlcnlfaW5kaWNhdGlvbihzZWxmLCBpbmZvLT5kaXNjb3ZlcnkpOwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCS8qIE9ubHkgYWNjZXB0IGJyb2FkY2FzdCBmcmFtZXMgaW4gTkRNIG1vZGUgKi8KIAkJaWYgKGluZm8tPmNhZGRyICE9IENCUk9BRENBU1QpIHsKIAkJCUlSREFfREVCVUcoMCwgIiVzKCksIG5vdCBhIGJyb2FkY2FzdCBmcmFtZSFcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCX0gZWxzZQogCQkJaXJsYXBfdW5pdGRhdGFfaW5kaWNhdGlvbihzZWxmLCBza2IpOwogCQlicmVhazsKQEAgLTUzNiwxMCArNTM2LDEwIEBACiAJCWlybGFwX3NlbmRfdGVzdF9mcmFtZShzZWxmLCBDQlJPQURDQVNULCBpbmZvLT5kYWRkciwgc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUNWX1RFU1RfUlNQOgotCQlJUkRBX0RFQlVHKDAsICIlcygpIG5vdCBpbXBsZW1lbnRlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCkgbm90IGltcGxlbWVudGVkIVxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJXNcbiIsIF9fZnVuY19fLAogCQkJICAgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtMTsKQEAgLTU2NywxMyArNTY3LDEzIEBACiAJCUlSREFfQVNTRVJUKGluZm8gIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJCUlSREFfQVNTRVJUKGluZm8tPmRpc2NvdmVyeSAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBkYWRkcj0lMDh4XG4iLCBfX0ZVTkNUSU9OX18sCisJCUlSREFfREVCVUcoNCwgIiVzKCksIGRhZGRyPSUwOHhcbiIsIF9fZnVuY19fLAogCQkJICAgaW5mby0+ZGlzY292ZXJ5LT5kYXRhLmRhZGRyKTsKIAogCQlpZiAoIXNlbGYtPmRpc2NvdmVyeV9sb2cpIHsKIAkJCUlSREFfV0FSTklORygiJXM6IGRpc2NvdmVyeSBsb2cgaXMgZ29uZSEgIgogCQkJCSAgICAgIm1heWJlIHRoZSBkaXNjb3ZlcnkgdGltZW91dCBoYXMgYmVlbiBzZXQiCi0JCQkJICAgICAiIHRvbyBzaG9ydD9cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICAiIHRvbyBzaG9ydD9cbiIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOwogCQl9CiAJCWhhc2hiaW5faW5zZXJ0KHNlbGYtPmRpc2NvdmVyeV9sb2csCkBAIC01OTgsNyArNTk4LDcgQEAKIAogCQlJUkRBX0FTU0VSVChpbmZvICE9IE5VTEwsIHJldHVybiAtMTspOwogCi0JCUlSREFfREVCVUcoMSwgIiVzKCksIFJlY2VpdmluZyBkaXNjb3ZlcnkgcmVxdWVzdCAocyA9ICVkKSB3aGlsZSBwZXJmb3JtaW5nIGRpc2NvdmVyeSA6LShcbiIsIF9fRlVOQ1RJT05fXywgaW5mby0+cyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIFJlY2VpdmluZyBkaXNjb3ZlcnkgcmVxdWVzdCAocyA9ICVkKSB3aGlsZSBwZXJmb3JtaW5nIGRpc2NvdmVyeSA6LShcbiIsIF9fZnVuY19fLCBpbmZvLT5zKTsKIAogCQkvKiBMYXN0IGRpc2NvdmVyeSByZXF1ZXN0ID8gKi8KIAkJaWYgKGluZm8tPnMgPT0gMHhmZikKQEAgLTYxMyw3ICs2MTMsNyBAQAogCQkgKi8KIAkJaWYgKGlyZGFfZGV2aWNlX2lzX3JlY2VpdmluZyhzZWxmLT5uZXRkZXYpICYmICFzZWxmLT5hZGRfd2FpdCkgewogCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZGV2aWNlIGlzIHNsb3cgdG8gYW5zd2VyLCAiCi0JCQkJICAgIndhaXRpbmcgc29tZSBtb3JlIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkgICAid2FpdGluZyBzb21lIG1vcmUhXG4iLCBfX2Z1bmNfXyk7CiAJCQlpcmxhcF9zdGFydF9zbG90X3RpbWVyKHNlbGYsIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKIAkJCXNlbGYtPmFkZF93YWl0ID0gVFJVRTsKIAkJCXJldHVybiByZXQ7CkBAIC02NDksNyArNjQ5LDcgQEAKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBVbmtub3duIGV2ZW50ICVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJXNcbiIsIF9fZnVuY19fLAogCQkJICAgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtMTsKQEAgLTY3MSw3ICs2NzEsNyBAQAogCWRpc2NvdmVyeV90ICpkaXNjb3ZlcnlfcnNwOwogCWludCByZXQ9MDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybiAtMTspOwpAQCAtNjc5LDcgKzY3OSw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgUVVFUllfVElNRVJfRVhQSVJFRDoKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgUVVFUllfVElNRVJfRVhQSVJFRCA8JWxkPlxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgamlmZmllcyk7CisJCQkgICBfX2Z1bmNfXywgamlmZmllcyk7CiAJCWlybGFwX25leHRfc3RhdGUoc2VsZiwgTEFQX05ETSk7CiAJCWJyZWFrOwogCWNhc2UgUkVDVl9ESVNDT1ZFUllfWElEX0NNRDoKQEAgLTcxNyw3ICs3MTcsNyBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZXZlbnQgJWQsICVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZXZlbnQgJWQsICVzXG4iLCBfX2Z1bmNfXywKIAkJCSAgIGV2ZW50LCBpcmxhcF9ldmVudFtldmVudF0pOwogCiAJCXJldCA9IC0xOwpAQCAtNzM4LDcgKzczOCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBldmVudD0lc1xuIiwgX19GVU5DVElPTl9fLCBpcmxhcF9ldmVudFsgZXZlbnRdKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBldmVudD0lc1xuIiwgX19mdW5jX18sIGlybGFwX2V2ZW50WyBldmVudF0pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybiAtMTspOwpAQCAtNzk5LDE4ICs3OTksMTggQEAKIAkJYnJlYWs7CiAJY2FzZSBSRUNWX0RJU0NPVkVSWV9YSURfQ01EOgogCQlJUkRBX0RFQlVHKDMsICIlcygpLCBldmVudCBSRUNWX0RJU0NPVkVSX1hJRF9DTUQhXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJaXJsYXBfbmV4dF9zdGF0ZShzZWxmLCBMQVBfTkRNKTsKIAogCQlicmVhazsKIAljYXNlIERJU0NPTk5FQ1RfUkVRVUVTVDoKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgRGlzY29ubmVjdCByZXF1ZXN0IVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgRGlzY29ubmVjdCByZXF1ZXN0IVxuIiwgX19mdW5jX18pOwogCQlpcmxhcF9zZW5kX2RtX2ZyYW1lKHNlbGYpOwogCQlpcmxhcF9uZXh0X3N0YXRlKCBzZWxmLCBMQVBfTkRNKTsKIAkJaXJsYXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHNlbGYsIExBUF9ESVNDX0lORElDQVRJT04pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVkLCAlc1xuIiwgX19GVU5DVElPTl9fLAorCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVkLCAlc1xuIiwgX19mdW5jX18sCiAJCQkgICBldmVudCwgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtMTsKQEAgLTgzMiw3ICs4MzIsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuIC0xOyk7CkBAIC04NjEsNyArODYxLDcgQEAKIAkJc2VsZi0+cmV0cnlfY291bnQrKzsKIAkJYnJlYWs7CiAJY2FzZSBSRUNWX1NOUk1fQ01EOgotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBTTlJNIGJhdHRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIFNOUk0gYmF0dGxlIVxuIiwgX19mdW5jX18pOwogCiAJCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm4gMDspOwogCQlJUkRBX0FTU0VSVChpbmZvICE9IE5VTEwsIHJldHVybiAwOyk7CkBAIC05NDgsNyArOTQ4LDcgQEAKIAkJaXJsYXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHNlbGYsIExBUF9ESVNDX0lORElDQVRJT04pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVkLCAlc1xuIiwgX19GVU5DVElPTl9fLAorCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVkLCAlc1xuIiwgX19mdW5jX18sCiAJCQkgICBldmVudCwgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtMTsKQEAgLTk2Niw3ICs5NjYsNyBAQAogc3RhdGljIGludCBpcmxhcF9zdGF0ZV9vZmZsaW5lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgSVJMQVBfRVZFTlQgZXZlbnQsCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlybGFwX2luZm8gKmluZm8pCiB7Ci0JSVJEQV9ERUJVRyggMCwgIiVzKCksIFVua25vd24gZXZlbnRcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyggMCwgIiVzKCksIFVua25vd24gZXZlbnRcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTEwMzAsNyArMTAzMCw3IEBACiAJCQkgKi8KIAkJCWlmKCghbmV4dGZpdCkgJiYgKHNrYi0+bGVuID4gc2VsZi0+Ynl0ZXNfbGVmdCkpIHsKIAkJCQlJUkRBX0RFQlVHKDAsICIlcygpLCBOb3QgYWxsb3dlZCB0byB0cmFuc21pdCIKLQkJCQkJICAgIiBtb3JlIGJ5dGVzIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJICAgIiBtb3JlIGJ5dGVzIVxuIiwgX19mdW5jX18pOwogCQkJCS8qIFJlcXVldWUgdGhlIHNrYiAqLwogCQkJCXNrYl9xdWV1ZV9oZWFkKCZzZWxmLT50eHEsIHNrYl9nZXQoc2tiKSk7CiAJCQkJLyoKQEAgLTEwODIsNyArMTA4Miw3IEBACiAjZW5kaWYgLyogQ09ORklHX0lSREFfRkFTVF9SUiAqLwogCQl9IGVsc2UgewogCQkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgVW5hYmxlIHRvIHNlbmQhIHJlbW90ZSBidXN5P1xuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCXNrYl9xdWV1ZV9oZWFkKCZzZWxmLT50eHEsIHNrYl9nZXQoc2tiKSk7CiAKIAkJCS8qCkBAIC0xMDk0LDcgKzEwOTQsNyBAQAogCQlicmVhazsKIAljYXNlIFBPTExfVElNRVJfRVhQSVJFRDoKIAkJSVJEQV9ERUJVRygzLCAiJXMoKSwgUE9MTF9USU1FUl9FWFBJUkVEIDwlbGQ+XG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXywgamlmZmllcyk7CisJCQkgICAgX19mdW5jX18sIGppZmZpZXMpOwogCQlpcmxhcF9zZW5kX3JyX2ZyYW1lKHNlbGYsIENNRF9GUkFNRSk7CiAJCS8qIFJldHVybiB0byBOUk0gcHJvcGVybHkgLSBKZWFuIElJICAqLwogCQlzZWxmLT53aW5kb3cgPSBzZWxmLT53aW5kb3dfc2l6ZTsKQEAgLTExMjAsNyArMTEyMCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZXZlbnQgJXNcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGlybGFwX2V2ZW50W2V2ZW50XSk7CisJCQkgICBfX2Z1bmNfXywgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTExMzgsNyArMTEzOCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm4gLTE7KTsKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVW5rbm93biBldmVudCAlZFxuIiwgX19GVU5DVElPTl9fLCBldmVudCk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZXZlbnQgJWRcbiIsIF9fZnVuY19fLCBldmVudCk7CiAKIAkJcmV0ID0gLTE7CiAJCWJyZWFrOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJSVJEQV9ERUJVRyg0LAogCQkJCSAgICAgICAiJXMoKSwgbWlzc2luZyBvciBkdXBsaWNhdGUgZnJhbWUhXG4iLAotCQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCQkgICBfX2Z1bmNfXyk7CiAKIAkJCQkvKiBVcGRhdGUgTnIgcmVjZWl2ZWQgKi8KIAkJCQlpcmxhcF91cGRhdGVfbnJfcmVjZWl2ZWQoc2VsZiwgaW5mby0+bnIpOwpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAkJICAgIChucl9zdGF0dXMgPT0gTlJfVU5FWFBFQ1RFRCkpCiAJCXsKIAkJCUlSREFfREVCVUcoNCwgIiVzKCksIHVuZXhwZWN0ZWQgbnIgYW5kIG5zIVxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCWlmIChpbmZvLT5wZikgewogCQkJCS8qIFJlc2VuZCByZWplY3RlZCBmcmFtZXMgKi8KIAkJCQlpcmxhcF9yZXNlbmRfcmVqZWN0ZWRfZnJhbWVzKHNlbGYsIENNRF9GUkFNRSk7CkBAIC0xNDA3LDkgKzE0MDcsOSBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgTm90IGltcGxlbWVudGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgTm90IGltcGxlbWVudGVkIVxuIiwgX19mdW5jX18pOwogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBldmVudD0lcywgbnNfc3RhdHVzPSVkLCBucl9zdGF0dXM9JWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGlybGFwX2V2ZW50W2V2ZW50XSwgbnNfc3RhdHVzLCBucl9zdGF0dXMpOworCQkgICAgICAgX19mdW5jX18sIGlybGFwX2V2ZW50W2V2ZW50XSwgbnNfc3RhdHVzLCBucl9zdGF0dXMpOwogCQlicmVhazsKIAljYXNlIFJFQ1ZfVUlfRlJBTUU6CiAJCS8qIFBvbGwgYml0IGNsZWFyZWQ/ICovCkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogCQkJZGVsX3RpbWVyKCZzZWxmLT5maW5hbF90aW1lcik7CiAJCQlpcmxhcF9kYXRhX2luZGljYXRpb24oc2VsZiwgc2tiLCBUUlVFKTsKIAkJCWlybGFwX25leHRfc3RhdGUoc2VsZiwgTEFQX1hNSVRfUCk7Ci0JCQlJUkRBX0RFQlVHKDEsICIlczogUkVDVl9VSV9GUkFNRTogbmV4dCBzdGF0ZSAlc1xuIiwgX19GVU5DVElPTl9fLCBpcmxhcF9zdGF0ZVtzZWxmLT5zdGF0ZV0pOworCQkJSVJEQV9ERUJVRygxLCAiJXM6IFJFQ1ZfVUlfRlJBTUU6IG5leHQgc3RhdGUgJXNcbiIsIF9fZnVuY19fLCBpcmxhcF9zdGF0ZVtzZWxmLT5zdGF0ZV0pOwogCQkJaXJsYXBfc3RhcnRfcG9sbF90aW1lcihzZWxmLCBzZWxmLT5wb2xsX3RpbWVvdXQpOwogCQl9CiAJCWJyZWFrOwpAQCAtMTQ3NSw3ICsxNDc1LDcgQEAKIAkJCWlybGFwX25leHRfc3RhdGUoc2VsZiwgTEFQX05STV9QKTsKIAkJfSBlbHNlIGlmIChyZXQgPT0gTlJfSU5WQUxJRCkgewogCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgUmVjZWl2ZWQgUlIgd2l0aCAiCi0JCQkJICAgImludmFsaWQgbnIgIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkgICAiaW52YWxpZCBuciAhXG4iLCBfX2Z1bmNfXyk7CiAKIAkJCWlybGFwX25leHRfc3RhdGUoc2VsZiwgTEFQX1JFU0VUX1dBSVQpOwogCkBAIC0xNTgwLDcgKzE1ODAsNyBAQAogCQlpcmxhcF9zdGFydF9maW5hbF90aW1lcihzZWxmLCAyICogc2VsZi0+ZmluYWxfdGltZW91dCk7CiAJCWJyZWFrOwogCWNhc2UgUkVDVl9SRF9SU1A6Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIFJFQ1ZfUkRfUlNQXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDEsICIlcygpLCBSRUNWX1JEX1JTUFxuIiwgX19mdW5jX18pOwogCiAJCWlybGFwX2ZsdXNoX2FsbF9xdWV1ZXMoc2VsZik7CiAJCWlybGFwX25leHRfc3RhdGUoc2VsZiwgTEFQX1hNSVRfUCk7CkBAIC0xNTg5LDcgKzE1ODksNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVzXG4iLAotCQkJICAgIF9fRlVOQ1RJT05fXywgaXJsYXBfZXZlbnRbZXZlbnRdKTsKKwkJCSAgICBfX2Z1bmNfXywgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtMTsKIAkJYnJlYWs7CkBAIC0xNjA5LDcgKzE2MDksNyBAQAogewogCWludCByZXQgPSAwOwogCi0JSVJEQV9ERUJVRygzLCAiJXMoKSwgZXZlbnQgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBpcmxhcF9ldmVudFtldmVudF0pOworCUlSREFfREVCVUcoMywgIiVzKCksIGV2ZW50ID0gJXNcbiIsIF9fZnVuY19fLCBpcmxhcF9ldmVudFtldmVudF0pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybiAtMTspOwpAQCAtMTYzNSw3ICsxNjM1LDcgQEAKIAkJaXJsYXBfbmV4dF9zdGF0ZSggc2VsZiwgTEFQX1BDTE9TRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlc1xuIiwgX19mdW5jX18sCiAJCQkgICBpcmxhcF9ldmVudFtldmVudF0pOwogCiAJCXJldCA9IC0xOwpAQCAtMTY1Niw3ICsxNjU2LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCUlSREFfREVCVUcoMywgIiVzKCksIGV2ZW50ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaXJsYXBfZXZlbnRbZXZlbnRdKTsKKwlJUkRBX0RFQlVHKDMsICIlcygpLCBldmVudCA9ICVzXG4iLCBfX2Z1bmNfXywgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm4gLTE7KTsKQEAgLTE3MTQsNyArMTcxNCw3IEBACiAJCSAqIHN0YXRlCiAJCSAqLwogCQlpZiAoIWluZm8pIHsKLQkJCUlSREFfREVCVUcoMywgIiVzKCksIFJFQ1ZfU05STV9DTURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDMsICIlcygpLCBSRUNWX1NOUk1fQ01EXG4iLCBfX2Z1bmNfXyk7CiAJCQlpcmxhcF9pbml0aWF0ZV9jb25uZWN0aW9uX3N0YXRlKHNlbGYpOwogCQkJaXJsYXBfd2FpdF9taW5fdHVybl9hcm91bmQoc2VsZiwgJnNlbGYtPnFvc190eCk7CiAJCQlpcmxhcF9zZW5kX3VhX3Jlc3BvbnNlX2ZyYW1lKHNlbGYsICZzZWxmLT5xb3NfcngpOwpAQCAtMTcyNCwxMiArMTcyNCwxMiBAQAogCQl9IGVsc2UgewogCQkJSVJEQV9ERUJVRygwLAogCQkJCSAgICIlcygpLCBTTlJNIGZyYW1lIGNvbnRhaW5lZCBhbiBJIGZpZWxkIVxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVzXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBpcmxhcF9ldmVudFtldmVudF0pOworCQkJICAgX19mdW5jX18sIGlybGFwX2V2ZW50W2V2ZW50XSk7CiAKIAkJcmV0ID0gLTE7CiAJCWJyZWFrOwpAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIGV2ZW50PSVzXG4iLCBfX0ZVTkNUSU9OX18sIGlybGFwX2V2ZW50W2V2ZW50XSk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgZXZlbnQ9JXNcbiIsIF9fZnVuY19fLCBpcmxhcF9ldmVudFtldmVudF0pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLUVOT0RFVjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuIC1FQkFEUjspOwpAQCAtMTc4Niw3ICsxNzg2LDcgQEAKIAkJCSAqLwogCQkJaWYoKCFuZXh0Zml0KSAmJiAoc2tiLT5sZW4gPiBzZWxmLT5ieXRlc19sZWZ0KSkgewogCQkJCUlSREFfREVCVUcoMCwgIiVzKCksIE5vdCBhbGxvd2VkIHRvIHRyYW5zbWl0IgotCQkJCQkgICAiIG1vcmUgYnl0ZXMhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQkgICAiIG1vcmUgYnl0ZXMhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJLyogUmVxdWV1ZSB0aGUgc2tiICovCiAJCQkJc2tiX3F1ZXVlX2hlYWQoJnNlbGYtPnR4cSwgc2tiX2dldChza2IpKTsKIApAQCAtMTgzMiw3ICsxODMyLDcgQEAKIAkJCQlyZXQgPSAtRVBST1RPOwogCQkJfQogCQl9IGVsc2UgewotCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5hYmxlIHRvIHNlbmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5hYmxlIHRvIHNlbmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQlza2JfcXVldWVfaGVhZCgmc2VsZi0+dHhxLCBza2JfZ2V0KHNrYikpOwogCQkJcmV0ID0gLUVQUk9UTzsKIAkJfQpAQCAtMTg0OCw3ICsxODQ4LDcgQEAKIAkJICogd2hlbiB3ZSByZXR1cm4uLi4gLSBKZWFuIElJICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMiwgIiVzKCksIFVua25vd24gZXZlbnQgJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgVW5rbm93biBldmVudCAlc1xuIiwgX19mdW5jX18sCiAJCQkgICBpcmxhcF9ldmVudFtldmVudF0pOwogCiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xODcxLDcgKzE4NzEsNyBAQAogCWludCBucl9zdGF0dXM7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBldmVudD0lc1xuIiwgX19GVU5DVElPTl9fLCBpcmxhcF9ldmVudFsgZXZlbnRdKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBldmVudD0lc1xuIiwgX19mdW5jX18sIGlybGFwX2V2ZW50WyBldmVudF0pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybiAtMTspOwpAQCAtMTg4MCw3ICsxODgwLDcgQEAKIAljYXNlIFJFQ1ZfSV9DTUQ6IC8qIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2UgKi8KIAkJLyogRklYTUU6IG11c3QgY2hlY2sgZm9yIHJlbW90ZV9idXN5IGJlbG93ICovCiAJCUlSREFfREVCVUcoNCwgIiVzKCksIGV2ZW50PSVzIG5yPSVkLCB2cz0lZCwgbnM9JWQsICIKLQkJCSAgICJ2cj0lZCwgcGY9JWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICJ2cj0lZCwgcGY9JWRcbiIsIF9fZnVuY19fLAogCQkJICAgaXJsYXBfZXZlbnRbZXZlbnRdLCBpbmZvLT5uciwKIAkJCSAgIHNlbGYtPnZzLCBpbmZvLT5ucywgc2VsZi0+dnIsIGluZm8tPnBmKTsKIApAQCAtMjExMiwyMSArMjExMiwyMSBAQAogCQkJaXJsYXBfbmV4dF9zdGF0ZShzZWxmLCBMQVBfTlJNX1MpOwogCQl9IGVsc2UgewogCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgaW52YWxpZCBuciBub3QgaW1wbGVtZW50ZWQhXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkVDVl9TTlJNX0NNRDoKIAkJLyogU05STSBmcmFtZSBpcyBub3QgYWxsb3dlZCB0byBjb250YWluIGFuIEktZmllbGQgKi8KIAkJaWYgKCFpbmZvKSB7CiAJCQlkZWxfdGltZXIoJnNlbGYtPndkX3RpbWVyKTsKLQkJCUlSREFfREVCVUcoMSwgIiVzKCksIHJlY2VpdmVkIFNOUk0gY21kXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgcmVjZWl2ZWQgU05STSBjbWRcbiIsIF9fZnVuY19fKTsKIAkJCWlybGFwX25leHRfc3RhdGUoc2VsZiwgTEFQX1JFU0VUX0NIRUNLKTsKIAogCQkJaXJsYXBfcmVzZXRfaW5kaWNhdGlvbihzZWxmKTsKIAkJfSBlbHNlIHsKIAkJCUlSREFfREVCVUcoMCwKIAkJCQkgICAiJXMoKSwgU05STSBmcmFtZSBjb250YWluZWQgYW4gSS1maWVsZCFcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAKIAkJfQogCQlicmVhazsKQEAgLTIxNTgsNyArMjE1OCw3IEBACiAJCSAqICAgd2hpY2ggZXhwbGFpbiB3aHkgd2UgdXNlIChzZWxmLT5OMiAvIDIpIGhlcmUgISEhCiAJCSAqIEplYW4gSUkKIAkJICovCi0JCUlSREFfREVCVUcoMSwgIiVzKCksIHJldHJ5X2NvdW50ID0gJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgcmV0cnlfY291bnQgPSAlZFxuIiwgX19mdW5jX18sCiAJCQkgICBzZWxmLT5yZXRyeV9jb3VudCk7CiAKIAkJaWYgKHNlbGYtPnJldHJ5X2NvdW50IDwgKHNlbGYtPk4yIC8gMikpIHsKQEAgLTIyMTEsNyArMjIxMSw3IEBACiAJCWlybGFwX3NlbmRfdGVzdF9mcmFtZShzZWxmLCBzZWxmLT5jYWRkciwgaW5mby0+ZGFkZHIsIHNrYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZXZlbnQgJWQsICglcylcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVW5rbm93biBldmVudCAlZCwgKCVzKVxuIiwgX19mdW5jX18sCiAJCQkgICBldmVudCwgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMjIyOCw3ICsyMjI4LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLUVOT0RFVjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuIC1FQkFEUjspOwpAQCAtMjI4NSw3ICsyMjg1LDcgQEAKIAkJCWJyZWFrOwkJLyogc3RheSBpbiBTQ0xPU0UgKi8KIAkJfQogCi0JCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZXZlbnQgJWQsICglcylcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVW5rbm93biBldmVudCAlZCwgKCVzKVxuIiwgX19mdW5jX18sCiAJCQkgICBldmVudCwgaXJsYXBfZXZlbnRbZXZlbnRdKTsKIAogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMjMwMSw3ICsyMzAxLDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCUlSREFfREVCVUcoMSwgIiVzKCksIGV2ZW50PSVzXG4iLCBfX0ZVTkNUSU9OX18sIGlybGFwX2V2ZW50W2V2ZW50XSk7CisJSVJEQV9ERUJVRygxLCAiJXMoKSwgZXZlbnQ9JXNcbiIsIF9fZnVuY19fLCBpcmxhcF9ldmVudFtldmVudF0pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLUVOT0RFVjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuIC1FQkFEUjspOwpAQCAtMjMyMiw3ICsyMzIyLDcgQEAKIAkJaXJsYXBfbmV4dF9zdGF0ZShzZWxmLCBMQVBfU0NMT1NFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVW5rbm93biBldmVudCAlZCwgKCVzKVxuIiwgX19GVU5DVElPTl9fLAorCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVkLCAoJXMpXG4iLCBfX2Z1bmNfXywKIAkJCSAgIGV2ZW50LCBpcmxhcF9ldmVudFtldmVudF0pOwogCiAJCXJldCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jIGIvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYwppbmRleCA3YzEzMmQ2Li45MDg5NDUzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCisrKyBiL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCWlybGFwX2luc2VydF9pbmZvKHNlbGYsIHNrYik7CiAKIAlpZiAodW5saWtlbHkoc2VsZi0+bW9kZSAmIElSREFfTU9ERV9NT05JVE9SKSkgewotCQlJUkRBX0RFQlVHKDMsICIlcygpOiAlcyBpcyBpbiBtb25pdG9yIG1vZGVcbiIsIF9fRlVOQ1RJT05fXywKKwkJSVJEQV9ERUJVRygzLCAiJXMoKTogJXMgaXMgaW4gbW9uaXRvciBtb2RlXG4iLCBfX2Z1bmNfXywKIAkJCSAgIHNlbGYtPm5ldGRldi0+bmFtZSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJCS8qIENoZWNrIGlmIHRoZSBuZXcgY29ubmVjdGlvbiBhZGRyZXNzIGlzIHZhbGlkICovCiAJCWlmICgoaW5mby0+Y2FkZHIgPT0gMHgwMCkgfHwgKGluZm8tPmNhZGRyID09IDB4ZmUpKSB7CiAJCQlJUkRBX0RFQlVHKDMsICIlcygpLCBpbnZhbGlkIGNvbm5lY3Rpb24gYWRkcmVzcyFcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTkzLDcgKzE5Myw3IEBACiAJCS8qIE9ubHkgYWNjZXB0IGlmIGFkZHJlc3NlZCBkaXJlY3RseSB0byB1cyAqLwogCQlpZiAoaW5mby0+c2FkZHIgIT0gc2VsZi0+c2FkZHIpIHsKIAkJCUlSREFfREVCVUcoMiwgIiVzKCksIG5vdCBhZGRyZXNzZWQgdG8gdXMhXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJCWlybGFwX2RvX2V2ZW50KHNlbGYsIFJFQ1ZfU05STV9DTUQsIHNrYiwgaW5mbyk7CkBAIC0yMTUsNyArMjE1LDcgQEAKIAlzdHJ1Y3QgdWFfZnJhbWUgKmZyYW1lOwogCWludCByZXQ7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpIDwlbGQ+XG4iLCBfX0ZVTkNUSU9OX18sIGppZmZpZXMpOworCUlSREFfREVCVUcoMiwgIiVzKCkgPCVsZD5cbiIsIF9fZnVuY19fLCBqaWZmaWVzKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCXN0cnVjdCBza19idWZmICp0eF9za2IgPSBOVUxMOwogCXN0cnVjdCBkaXNjX2ZyYW1lICpmcmFtZTsKIAotCUlSREFfREVCVUcoMywgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybjspOwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJX191MzIgYmNhc3QgPSBCUk9BRENBU1Q7CiAJX191OCAqaW5mbzsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIHM9JWQsIFM9JWQsIGNvbW1hbmQ9JWRcbiIsIF9fRlVOQ1RJT05fXywKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBzPSVkLCBTPSVkLCBjb21tYW5kPSVkXG4iLCBfX2Z1bmNfXywKIAkJICAgcywgUywgY29tbWFuZCk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwpAQCAtNDE0LDEzICs0MTQsMTMgQEAKIAlfX3U4ICpkaXNjb3ZlcnlfaW5mbzsKIAljaGFyICp0ZXh0OwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHhpZF9mcmFtZSkpKSB7Ci0JCUlSREFfRVJST1IoIiVzOiBmcmFtZSB0b28gc2hvcnQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0VSUk9SKCIlczogZnJhbWUgdG9vIHNob3J0IVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC00MzIsMTIgKzQzMiwxMiBAQAogCS8qIE1ha2Ugc3VyZSBmcmFtZSBpcyBhZGRyZXNzZWQgdG8gdXMgKi8KIAlpZiAoKGluZm8tPnNhZGRyICE9IHNlbGYtPnNhZGRyKSAmJiAoaW5mby0+c2FkZHIgIT0gQlJPQURDQVNUKSkgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBmcmFtZSBpcyBub3QgYWRkcmVzc2VkIHRvIHVzIVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoKGRpc2NvdmVyeSA9IGt6YWxsb2Moc2l6ZW9mKGRpc2NvdmVyeV90KSwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLQkJSVJEQV9XQVJOSU5HKCIlczoga21hbGxvYyBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX1dBUk5JTkcoIiVzOiBrbWFsbG9jIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJZGlzY292ZXJ5LT5kYXRhLnNhZGRyID0gc2VsZi0+c2FkZHI7CiAJZGlzY292ZXJ5LT50aW1lc3RhbXAgPSBqaWZmaWVzOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKSwgZGFkZHI9JTA4eFxuIiwgX19GVU5DVElPTl9fLAorCUlSREFfREVCVUcoNCwgIiVzKCksIGRhZGRyPSUwOHhcbiIsIF9fZnVuY19fLAogCQkgICBkaXNjb3ZlcnktPmRhdGEuZGFkZHIpOwogCiAJZGlzY292ZXJ5X2luZm8gPSBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgeGlkX2ZyYW1lKSk7CkBAIC00OTEsNyArNDkxLDcgQEAKIAljaGFyICp0ZXh0OwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB4aWRfZnJhbWUpKSkgewotCQlJUkRBX0VSUk9SKCIlczogZnJhbWUgdG9vIHNob3J0IVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9FUlJPUigiJXM6IGZyYW1lIHRvbyBzaG9ydCFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTAzLDcgKzUwMyw3IEBACiAJLyogTWFrZSBzdXJlIGZyYW1lIGlzIGFkZHJlc3NlZCB0byB1cyAqLwogCWlmICgoaW5mby0+c2FkZHIgIT0gc2VsZi0+c2FkZHIpICYmIChpbmZvLT5zYWRkciAhPSBCUk9BRENBU1QpKSB7CiAJCUlSREFfREVCVUcoMCwgIiVzKCksIGZyYW1lIGlzIG5vdCBhZGRyZXNzZWQgdG8gdXMhXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTM2LDcgKzUzNiw3IEBACiAJCWlmKChkaXNjb3ZlcnlfaW5mbyA9PSBOVUxMKSB8fAogCQkgICAhcHNrYl9tYXlfcHVsbChza2IsIDMpKSB7CiAJCQlJUkRBX0VSUk9SKCIlczogZGlzY292ZXJ5IGZyYW1lIHRvbyBzaG9ydCFcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtNTQ1LDcgKzU0NSw3IEBACiAJCSAqLwogCQlkaXNjb3ZlcnkgPSBrbWFsbG9jKHNpemVvZihkaXNjb3ZlcnlfdCksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWRpc2NvdmVyeSkgewotCQkJSVJEQV9XQVJOSU5HKCIlczogdW5hYmxlIHRvIG1hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX1dBUk5JTkcoIiVzOiB1bmFibGUgdG8gbWFsbG9jIVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTY1Nyw3ICs2NTcsNyBAQAogewogCWluZm8tPm5yID0gc2tiLT5kYXRhWzFdID4+IDU7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBucj0lZCwgJWxkXG4iLCBfX0ZVTkNUSU9OX18sIGluZm8tPm5yLCBqaWZmaWVzKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBucj0lZCwgJWxkXG4iLCBfX2Z1bmNfXywgaW5mby0+bnIsIGppZmZpZXMpOwogCiAJaWYgKGNvbW1hbmQpCiAJCWlybGFwX2RvX2V2ZW50KHNlbGYsIFJFQ1ZfUk5SX0NNRCwgc2tiLCBpbmZvKTsKQEAgLTY2OCw3ICs2NjgsNyBAQAogc3RhdGljIHZvaWQgaXJsYXBfcmVjdl9yZWpfZnJhbWUoc3RydWN0IGlybGFwX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbywgaW50IGNvbW1hbmQpCiB7Ci0JSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpbmZvLT5uciA9IHNrYi0+ZGF0YVsxXSA+PiA1OwogCkBAIC02ODIsNyArNjgyLDcgQEAKIHN0YXRpYyB2b2lkIGlybGFwX3JlY3Zfc3Jlal9mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbywgaW50IGNvbW1hbmQpCiB7Ci0JSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpbmZvLT5uciA9IHNrYi0+ZGF0YVsxXSA+PiA1OwogCkBAIC02OTYsNyArNjk2LDcgQEAKIHN0YXRpYyB2b2lkIGlybGFwX3JlY3ZfZGlzY19mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbywgaW50IGNvbW1hbmQpCiB7Ci0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBDaGVjayBpZiB0aGlzIGlzIGEgY29tbWFuZCBvciBhIHJlc3BvbnNlIGZyYW1lICovCiAJaWYgKGNvbW1hbmQpCkBAIC03NTUsNyArNzU1LDcgQEAKIAogCQlpcmxhcF9zZW5kX2lfZnJhbWUoIHNlbGYsIHR4X3NrYiwgQ01EX0ZSQU1FKTsKIAl9IGVsc2UgewotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBzZW5kaW5nIHVucmVsaWFibGUgZnJhbWVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIHNlbmRpbmcgdW5yZWxpYWJsZSBmcmFtZVxuIiwgX19mdW5jX18pOwogCQlpcmxhcF9zZW5kX3VpX2ZyYW1lKHNlbGYsIHNrYl9nZXQoc2tiKSwgc2VsZi0+Y2FkZHIsIENNRF9GUkFNRSk7CiAJCXNlbGYtPndpbmRvdyAtPSAxOwogCX0KQEAgLTgwOCw3ICs4MDgsNyBAQAogCQlpcmxhcF9uZXh0X3N0YXRlKHNlbGYsIExBUF9OUk1fUCk7CiAJCWlybGFwX3NlbmRfaV9mcmFtZShzZWxmLCB0eF9za2IsIENNRF9GUkFNRSk7CiAJfSBlbHNlIHsKLQkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgc2VuZGluZyB1bnJlbGlhYmxlIGZyYW1lXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBzZW5kaW5nIHVucmVsaWFibGUgZnJhbWVcbiIsIF9fZnVuY19fKTsKIAogCQlpZiAoc2VsZi0+YWNrX3JlcXVpcmVkKSB7CiAJCQlpcmxhcF9zZW5kX3VpX2ZyYW1lKHNlbGYsIHNrYl9nZXQoc2tiKSwgc2VsZi0+Y2FkZHIsIENNRF9GUkFNRSk7CkBAIC04MzUsNyArODM1LDcgQEAKIAkgKiBTZWUgbWF4X2xpbmVfY2FwYWNpdGllc1tdW10gaW4gcW9zLmMgZm9yIGRldGFpbHMuIEplYW4gSUkgKi8KIAl0cmFuc21pc3Npb25fdGltZSAtPSAoc2VsZi0+ZmluYWxfdGltZW91dCAqIHNlbGYtPmJ5dGVzX2xlZnQKIAkJCSAgICAgIC8gc2VsZi0+bGluZV9jYXBhY2l0eSk7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKSBhZGp1c3RpbmcgdHJhbnNtaXNzaW9uX3RpbWUgOiBmdD0lZCwgYmw9JWQsIGxjPSVkIC0+IHR0PSVkXG4iLCBfX0ZVTkNUSU9OX18sIHNlbGYtPmZpbmFsX3RpbWVvdXQsIHNlbGYtPmJ5dGVzX2xlZnQsIHNlbGYtPmxpbmVfY2FwYWNpdHksIHRyYW5zbWlzc2lvbl90aW1lKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpIGFkanVzdGluZyB0cmFuc21pc3Npb25fdGltZSA6IGZ0PSVkLCBibD0lZCwgbGM9JWQgLT4gdHQ9JWRcbiIsIF9fZnVuY19fLCBzZWxmLT5maW5hbF90aW1lb3V0LCBzZWxmLT5ieXRlc19sZWZ0LCBzZWxmLT5saW5lX2NhcGFjaXR5LCB0cmFuc21pc3Npb25fdGltZSk7CiAKIAkvKiBXZSBhcmUgYWxsb3dlZCB0byB0cmFuc21pdCBhIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGFnYWluLiAqLwogCXNlbGYtPmJ5dGVzX2xlZnQgPSBzZWxmLT5saW5lX2NhcGFjaXR5OwpAQCAtMTAwMSw3ICsxMDAxLDcgQEAKIAkJLyogdHhfc2tiID0gc2tiX2Nsb25lKCBza2IsIEdGUF9BVE9NSUMpOyAqLwogCQl0eF9za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXR4X3NrYikgewotCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5hYmxlIHRvIGNvcHlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmFibGUgdG8gY29weVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTEwMzMsNyArMTAzMyw3IEBACiAJICovCiAJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJnNlbGYtPnR4cSkpIHsKIAotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBzZW5kaW5nIGFkZGl0aW9uYWwgZnJhbWVzIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgc2VuZGluZyBhZGRpdGlvbmFsIGZyYW1lcyFcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHNlbGYtPndpbmRvdyA+IDApIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCAmc2VsZi0+dHhxKTsKIAkJCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJCS8qIHR4X3NrYiA9IHNrYl9jbG9uZSggc2tiLCBHRlBfQVRPTUlDKTsgKi8KIAkJdHhfc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCF0eF9za2IpIHsKLQkJCUlSREFfREVCVUcoMCwgIiVzKCksIHVuYWJsZSB0byBjb3B5XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5hYmxlIHRvIGNvcHlcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogdm9pZCBpcmxhcF9zZW5kX3VpX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBfX3U4IGNhZGRyLCBpbnQgY29tbWFuZCkKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTExNTYsNyArMTE1Niw3IEBACiBzdGF0aWMgdm9pZCBpcmxhcF9yZWN2X3VpX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbykKIHsKLQlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaW5mby0+cGYgPSBza2ItPmRhdGFbMV0gJiBQRl9CSVQ7ICAgICAgLyogRmluYWwgYml0ICovCiAKQEAgLTExNzUsNyArMTE3NSw3IEBACiAJX191OCAqZnJhbWU7CiAJaW50IHcsIHgsIHksIHo7CiAKLQlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTExODMsNyArMTE4Myw3IEBACiAJSVJEQV9BU1NFUlQoaW5mbyAhPSBOVUxMLCByZXR1cm47KTsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDQpKSB7Ci0JCUlSREFfRVJST1IoIiVzOiBmcmFtZSB0b28gc2hvcnQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0VSUk9SKCIlczogZnJhbWUgdG9vIHNob3J0IVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjY5LDEwICsxMjY5LDEwIEBACiB7CiAJc3RydWN0IHRlc3RfZnJhbWUgKmZyYW1lOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmZyYW1lKSkpIHsKLQkJSVJEQV9FUlJPUigiJXM6IGZyYW1lIHRvbyBzaG9ydCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfRVJST1IoIiVzOiBmcmFtZSB0b28gc2hvcnQhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJZnJhbWUgPSAoc3RydWN0IHRlc3RfZnJhbWUgKikgc2tiLT5kYXRhOwpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIAlpZiAoaW5mby0+Y2FkZHIgPT0gQ0JST0FEQ0FTVCkgewogCQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IHRlc3RfZnJhbWUpKSB7CiAJCQlJUkRBX0RFQlVHKDAsICIlcygpIHRlc3QgZnJhbWUgdG9vIHNob3J0IVxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogCWludCBjb21tYW5kOwogCV9fdTggY29udHJvbDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IHNob3VsZCB3ZSBnZXQgb3VyIG93biBmaWVsZD8gKi8KQEAgLTEzNDIsMTQgKzEzNDIsMTQgQEAKIAkgKiBzaGFyZSBhbmQgbm9uIGxpbmVhciBza2JzLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHNvCiAJICogd2UgZG9uJ3QgbmVlZCB0byBiZSBjbGV2ZXIgYWJvdXQgaXQuIEplYW4gSUkgKi8KIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCUlSREFfRVJST1IoIiVzOiBjYW4ndCBjbG9uZSBzaGFyZWQgc2tiIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9FUlJPUigiJXM6IGNhbid0IGNsb25lIHNoYXJlZCBza2IhXG4iLCBfX2Z1bmNfXyk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIENoZWNrIGlmIGZyYW1lIGlzIGxhcmdlIGVub3VnaCBmb3IgcGFyc2luZyAqLwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDIpKSB7Ci0JCUlSREFfRVJST1IoIiVzOiBmcmFtZSB0b28gc2hvcnQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0VSUk9SKCIlczogZnJhbWUgdG9vIHNob3J0IVxuIiwgX19mdW5jX18pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMzY1LDcgKzEzNjUsNyBAQAogCS8qICBGaXJzdCB3ZSBjaGVjayBpZiB0aGlzIGZyYW1lIGhhcyBhIHZhbGlkIGNvbm5lY3Rpb24gYWRkcmVzcyAqLwogCWlmICgoaW5mby5jYWRkciAhPSBzZWxmLT5jYWRkcikgJiYgKGluZm8uY2FkZHIgIT0gQ0JST0FEQ0FTVCkpIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgd3JvbmcgY29ubmVjdGlvbiBhZGRyZXNzIVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KIAkvKgpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJSVJEQV9XQVJOSU5HKCIlczogVW5rbm93biBTLWZyYW1lICUwMnggcmVjZWl2ZWQhXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgaW5mby5jb250cm9sKTsKKwkJCQlfX2Z1bmNfXywgaW5mby5jb250cm9sKTsKIAkJCWJyZWFrOwogCQl9CiAJCWdvdG8gb3V0OwpAQCAtMTQzOCw3ICsxNDM4LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJSVJEQV9XQVJOSU5HKCIlczogVW5rbm93biBmcmFtZSAlMDJ4IHJlY2VpdmVkIVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGluZm8uY29udHJvbCk7CisJCQkJX19mdW5jX18sIGluZm8uY29udHJvbCk7CiAJCWJyZWFrOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybG1wLmMgYi9uZXQvaXJkYS9pcmxtcC5jCmluZGV4IDEzNWFjNjkuLjFmODFmOGUgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybG1wLmMKKysrIGIvbmV0L2lyZGEvaXJsbXAuYwpAQCAtNzYsNyArNzYsNyBAQAogICovCiBpbnQgX19pbml0IGlybG1wX2luaXQodm9pZCkKIHsKLQlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAkvKiBJbml0aWFsaXplIHRoZSBpcmxtcCBzdHJ1Y3R1cmUuICovCiAJaXJsbXAgPSBremFsbG9jKCBzaXplb2Yoc3RydWN0IGlybG1wX2NiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGlybG1wID09IE5VTEwpCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkvKiBBbGxvY2F0ZSBuZXcgaW5zdGFuY2Ugb2YgYSBMU0FQIGNvbm5lY3Rpb24gKi8KIAlzZWxmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzYXBfY2IpLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2VsZiA9PSBOVUxMKSB7Ci0JCUlSREFfRVJST1IoIiVzOiBjYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfRVJST1IoIiVzOiBjYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMDIsNyArMjAyLDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pcmxtcF9jbG9zZV9sc2FwKHN0cnVjdCBsc2FwX2NiICpzZWxmKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMTVBfTFNBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC0yNjQsNyArMjY0LDcgQEAKIAlpZiAoIWxzYXApIHsKIAkJSVJEQV9ERUJVRygwLAogCQkgICAgICIlcygpLCBMb29rcyBsaWtlIHNvbWVib2R5IGhhcyByZW1vdmVkIG1lIGFscmVhZHkhXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlfX2lybG1wX2Nsb3NlX2xzYXAoc2VsZik7CkBAIC0yOTEsNyArMjkxLDcgQEAKIAkgKi8KIAlsYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGFwX2NiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGxhcCA9PSBOVUxMKSB7Ci0JCUlSREFfRVJST1IoIiVzOiB1bmFibGUgdG8ga21hbGxvY1xuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9FUlJPUigiJXM6IHVuYWJsZSB0byBrbWFsbG9jXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogI2VuZGlmCiAJbGFwLT5sc2FwcyA9IGhhc2hiaW5fbmV3KEhCX0xPQ0spOwogCWlmIChsYXAtPmxzYXBzID09IE5VTEwpIHsKLQkJSVJEQV9XQVJOSU5HKCIlcygpLCB1bmFibGUgdG8ga21hbGxvYyBsc2Fwc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9XQVJOSU5HKCIlcygpLCB1bmFibGUgdG8ga21hbGxvYyBsc2Fwc1xuIiwgX19mdW5jX18pOwogCQlrZnJlZShsYXApOwogCQlyZXR1cm47CiAJfQpAQCAtMzM2LDcgKzMzNiw3IEBACiB7CiAJc3RydWN0IGxhcF9jYiAqbGluazsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogV2UgbXVzdCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGhhc2hiaW4gKmZpcnN0Ki4gVGhpcyBlbnN1cmUKIAkgKiB0aGF0IG5vIG1vcmUgTFNBUHMgd2lsbCBiZSBvcGVuIG9uIHRoaXMgbGluayBhbmQgbm8gZGlzY292ZXJ5CkBAIC0zODEsNyArMzgxLDcgQEAKIAogCUlSREFfREVCVUcoMiwKIAkgICAgICAiJXMoKSwgc2xzYXBfc2VsPSUwMngsIGRsc2FwX3NlbD0lMDJ4LCBzYWRkcj0lMDh4LCBkYWRkcj0lMDh4XG4iLAotCSAgICAgIF9fRlVOQ1RJT05fXywgc2VsZi0+c2xzYXBfc2VsLCBkbHNhcF9zZWwsIHNhZGRyLCBkYWRkcik7CisJICAgICAgX19mdW5jX18sIHNlbGYtPnNsc2FwX3NlbCwgZGxzYXBfc2VsLCBzYWRkciwgZGFkZHIpOwogCiAJaWYgKHRlc3RfYml0KDAsICZzZWxmLT5jb25uZWN0ZWQpKSB7CiAJCXJldCA9IC1FSVNDT05OOwpAQCAtNDI1LDcgKzQyNSw3IEBACiAJCWlmIChkYWRkciAhPSBERVZfQUREUl9BTlkpCiAJCQlkaXNjb3ZlcnkgPSBoYXNoYmluX2ZpbmQoaXJsbXAtPmNhY2hlbG9nLCBkYWRkciwgTlVMTCk7CiAJCWVsc2UgewotCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgbm8gZGFkZHJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDIsICIlcygpLCBubyBkYWRkclxuIiwgX19mdW5jX18pOwogCQkJZGlzY292ZXJ5ID0gKGRpc2NvdmVyeV90ICopCiAJCQkJaGFzaGJpbl9nZXRfZmlyc3QoaXJsbXAtPmNhY2hlbG9nKTsKIAkJfQpAQCAtNDM4LDcgKzQzOCw3IEBACiAJfQogCWxhcCA9IGhhc2hiaW5fbG9ja19maW5kKGlybG1wLT5saW5rcywgc2FkZHIsIE5VTEwpOwogCWlmIChsYXAgPT0gTlVMTCkgewotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmFibGUgdG8gZmluZCBhIHVzYWJsZSBsaW5rIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVW5hYmxlIHRvIGZpbmQgYSB1c2FibGUgbGluayFcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVIT1NUVU5SRUFDSDsKIAkJZ290byBlcnI7CiAJfQpAQCAtNDUzLDE0ICs0NTMsMTQgQEAKIAkJCSAqIGRpc2Nvbm5lY3RlZCB5ZXQgKHdhaXRpbmcgZm9yIHRpbWVvdXQgaW4gTEFQKS4KIAkJCSAqIE1heWJlIHdlIGNvdWxkIGdpdmUgTEFQIGEgYml0IG9mIGhlbHAgaW4gdGhpcyBjYXNlLgogCQkJICovCi0JCQlJUkRBX0RFQlVHKDAsICIlcygpLCBzb3JyeSwgYnV0IEknbSB3YWl0aW5nIGZvciBMQVAgdG8gdGltZW91dCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDAsICIlcygpLCBzb3JyeSwgYnV0IEknbSB3YWl0aW5nIGZvciBMQVAgdG8gdGltZW91dCFcbiIsIF9fZnVuY19fKTsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIGVycjsKIAkJfQogCiAJCS8qIExBUCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCBub2RlLCBhbmQgTEFQCiAJCSAqIGNhbiBvbmx5IHRhbGsgdG8gb25lIG5vZGUgYXQgYSB0aW1lICovCi0JCUlSREFfREVCVUcoMCwgIiVzKCksIHNvcnJ5LCBidXQgbGluayBpcyBidXN5IVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgc29ycnksIGJ1dCBsaW5rIGlzIGJ1c3khXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBlcnI7CiAJfQpAQCAtNTIyLDcgKzUyMiw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZi0+bGFwICE9IE5VTEwsIHJldHVybjspOwogCiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgc2xzYXBfc2VsPSUwMngsIGRsc2FwX3NlbD0lMDJ4XG4iLAotCQkgICBfX0ZVTkNUSU9OX18sIHNlbGYtPnNsc2FwX3NlbCwgc2VsZi0+ZGxzYXBfc2VsKTsKKwkJICAgX19mdW5jX18sIHNlbGYtPnNsc2FwX3NlbCwgc2VsZi0+ZGxzYXBfc2VsKTsKIAogCS8qIE5vdGUgOiBzZWxmLT5sYXAgaXMgc2V0IGluIGlybG1wX2xpbmtfZGF0YV9pbmRpY2F0aW9uKCksCiAJICogKGNhc2UgQ09OTkVDVF9DTUQ6KSBiZWNhdXNlIHdlIGhhdmUgbm8gd2F5IHRvIHNldCBpdCBoZXJlLgpAQCAtNTYzLDcgKzU2Myw3IEBACiAJICogaW4gdGhlIHN0YXRlIG1hY2hpbmUgaXRzZWxmLiBKZWFuIElJICovCiAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCBzbHNhcF9zZWw9JTAyeCwgZGxzYXBfc2VsPSUwMnhcbiIsCi0JCSAgIF9fRlVOQ1RJT05fXywgc2VsZi0+c2xzYXBfc2VsLCBzZWxmLT5kbHNhcF9zZWwpOworCQkgICBfX2Z1bmNfXywgc2VsZi0+c2xzYXBfc2VsLCBzZWxmLT5kbHNhcF9zZWwpOwogCiAJLyogTWFrZSByb29tIGZvciBNVVggY29udHJvbCBoZWFkZXIgKDMgYnl0ZXMpICovCiAJSVJEQV9BU1NFUlQoc2tiX2hlYWRyb29tKHVzZXJkYXRhKSA+PSBMTVBfQ09OVFJPTF9IRUFERVIsIHJldHVybiAtMTspOwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJaW50IGxhcF9oZWFkZXJfc2l6ZTsKIAlpbnQgbWF4X3NlZ19zaXplOwogCi0JSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDMsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTYwMyw3ICs2MDMsNyBAQAogCW1heF9oZWFkZXJfc2l6ZSA9IExNUF9IRUFERVIgKyBsYXBfaGVhZGVyX3NpemU7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCBtYXhfaGVhZGVyX3NpemU9JWRcbiIsCi0JCSAgIF9fRlVOQ1RJT05fXywgbWF4X2hlYWRlcl9zaXplKTsKKwkJICAgX19mdW5jX18sIG1heF9oZWFkZXJfc2l6ZSk7CiAKIAkvKiBIaWRlIExNUF9DT05UUk9MX0hFQURFUiBoZWFkZXIgZnJvbSBsYXllciBhYm92ZSAqLwogCXNrYl9wdWxsKHNrYiwgTE1QX0NPTlRST0xfSEVBREVSKTsKQEAgLTYyOSw3ICs2MjksNyBAQAogCXN0cnVjdCBsc2FwX2NiICpuZXc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlybG1wLT51bmNvbm5lY3RlZF9sc2Fwcy0+aGJfc3BpbmxvY2ssIGZsYWdzKTsKIApAQCAtNjM4LDcgKzYzOCw3IEBACiAJaWYgKCghaGFzaGJpbl9maW5kKGlybG1wLT51bmNvbm5lY3RlZF9sc2FwcywgKGxvbmcpIG9yaWcsIE5VTEwpKSB8fAogCSAgICAob3JpZy0+bGFwID09IE5VTEwpKSB7CiAJCUlSREFfREVCVUcoMCwgIiVzKCksIGludmFsaWQgTFNBUCAod3Jvbmcgc3RhdGUpXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJsbXAtPnVuY29ubmVjdGVkX2xzYXBzLT5oYl9zcGlubG9jaywKIAkJCQkgICAgICAgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCS8qIEFsbG9jYXRlIGEgbmV3IGluc3RhbmNlICovCiAJbmV3ID0ga21lbWR1cChvcmlnLCBzaXplb2YoKm5ldyksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3KSAgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmFibGUgdG8ga21hbGxvY1xuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5hYmxlIHRvIGttYWxsb2NcbiIsIF9fZnVuY19fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJsbXAtPnVuY29ubmVjdGVkX2xzYXBzLT5oYl9zcGlubG9jaywKIAkJCQkgICAgICAgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTY5Myw3ICs2OTMsNyBAQAogCSAqIGFuZCB1cyB0aGF0IG1pZ2h0IG1lc3MgdXAgdGhlIGhhc2hiaW5zIGJlbG93LiBUaGlzIGZpeGVzIGl0LgogCSAqIEplYW4gSUkgKi8KIAlpZiAoISB0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJnNlbGYtPmNvbm5lY3RlZCkpIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgYWxyZWFkeSBkaXNjb25uZWN0ZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBhbHJlYWR5IGRpc2Nvbm5lY3RlZCFcbiIsIF9fZnVuY19fKTsKIAkJZGV2X2tmcmVlX3NrYih1c2VyZGF0YSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC03NDcsMTkgKzc0NywxOSBAQAogewogCXN0cnVjdCBsc2FwX2NiICpsc2FwOwogCi0JSVJEQV9ERUJVRygxLCAiJXMoKSwgcmVhc29uPSVzXG4iLCBfX0ZVTkNUSU9OX18sIGlybG1wX3JlYXNvbnNbcmVhc29uXSk7CisJSVJEQV9ERUJVRygxLCAiJXMoKSwgcmVhc29uPSVzXG4iLCBfX2Z1bmNfXywgaXJsbXBfcmVhc29uc1tyZWFzb25dKTsKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExNUF9MU0FQX01BR0lDLCByZXR1cm47KTsKIAogCUlSREFfREVCVUcoMywgIiVzKCksIHNsc2FwX3NlbD0lMDJ4LCBkbHNhcF9zZWw9JTAyeFxuIiwKLQkJICAgX19GVU5DVElPTl9fLCBzZWxmLT5zbHNhcF9zZWwsIHNlbGYtPmRsc2FwX3NlbCk7CisJCSAgIF9fZnVuY19fLCBzZWxmLT5zbHNhcF9zZWwsIHNlbGYtPmRsc2FwX3NlbCk7CiAKIAkvKiBBbHJlYWR5IGRpc2Nvbm5lY3RlZCA/CiAJICogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGlybG1wX2Rpc2Nvbm5lY3RfcmVxdWVzdCgpCiAJICogYW5kIHVzIHRoYXQgbWlnaHQgbWVzcyB1cCB0aGUgaGFzaGJpbnMgYmVsb3cuIFRoaXMgZml4ZXMgaXQuCiAJICogSmVhbiBJSSAqLwogCWlmICghIHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmc2VsZi0+Y29ubmVjdGVkKSkgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBhbHJlYWR5IGRpc2Nvbm5lY3RlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGFscmVhZHkgZGlzY29ubmVjdGVkIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC03OTIsNyArNzkyLDcgQEAKIAkJc2VsZi0+bm90aWZ5LmRpc2Nvbm5lY3RfaW5kaWNhdGlvbihzZWxmLT5ub3RpZnkuaW5zdGFuY2UsCiAJCQkJCQkgICBzZWxmLCByZWFzb24sIHNrYik7CiAJfSBlbHNlIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbm8gaGFuZGxlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgbm8gaGFuZGxlclxuIiwgX19mdW5jX18pOwogCX0KIH0KIApAQCAtODQ1LDcgKzg0NSw3IEBACiAJLyogTWFrZSBzdXJlIHRoZSB2YWx1ZSBpcyBzYW5lICovCiAJaWYgKChuc2xvdHMgIT0gMSkgJiYgKG5zbG90cyAhPSA2KSAmJiAobnNsb3RzICE9IDgpICYmIChuc2xvdHMgIT0gMTYpKXsKIAkJSVJEQV9XQVJOSU5HKCIlczogaW52YWxpZCB2YWx1ZSBmb3IgbnVtYmVyIG9mIHNsb3RzIVxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgX19mdW5jX18pOwogCQluc2xvdHMgPSBzeXNjdGxfZGlzY292ZXJ5X3Nsb3RzID0gODsKIAl9CiAKQEAgLTk2Myw3ICs5NjMsNyBAQAogCWludAludW1iZXI7CQkJLyogTnVtYmVyIG9mIG5vZGVzIGluIHRoZSBsb2cgKi8KIAlpbnQJaTsKIAotCUlSREFfREVCVUcoMywgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogQ2hlY2sgaWYgY2xpZW50IHdhbnRzIG9yIG5vdCBwYXJ0aWFsL3NlbGVjdGl2ZSBsb2cgKG9wdGltaXNhdGlvbikgKi8KIAlpZiAoIWNsaWVudC0+ZGlzY29fY2FsbGJhY2spCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCWlybG1wX2NsaWVudF90ICpjbGllbnQ7CiAJaXJsbXBfY2xpZW50X3QgKmNsaWVudF9uZXh0OwogCi0JSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDMsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChsb2cgIT0gTlVMTCwgcmV0dXJuOyk7CiAKQEAgLTEwNDksNyArMTA0OSw3IEBACiAJaXJsbXBfY2xpZW50X3QgKmNsaWVudF9uZXh0OwogCWludAkJaTsKIAotCUlSREFfREVCVUcoMywgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoZXhwaXJpZXMgIT0gTlVMTCwgcmV0dXJuOyk7CiAKQEAgLTEwODIsNyArMTA4Miw3IEBACiAgKi8KIGRpc2NvdmVyeV90ICppcmxtcF9nZXRfZGlzY292ZXJ5X3Jlc3BvbnNlKHZvaWQpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChpcmxtcCAhPSBOVUxMLCByZXR1cm4gTlVMTDspOwogCkBAIC0xMTYwLDcgKzExNjAsNyBAQAogewogCWludAlyZXQ7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHVzZXJkYXRhICE9IE5VTEwsIHJldHVybiAtMTspOwogCkBAIC0xMTg0LDcgKzExODQsNyBAQAogICovCiB2b2lkIGlybG1wX3VkYXRhX2luZGljYXRpb24oc3RydWN0IGxzYXBfY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExNUF9MU0FQX01BR0lDLCByZXR1cm47KTsKQEAgLTEyMTEsNyArMTIxMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKmNsb25lX3NrYjsKIAlzdHJ1Y3QgbGFwX2NiICpsYXA7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHVzZXJkYXRhICE9IE5VTEwsIHJldHVybiAtMTspOwogCkBAIC0xMjYyLDcgKzEyNjIsNyBAQAogI2lmZGVmIENPTkZJR19JUkRBX1VMVFJBCiB2b2lkIGlybG1wX2Nvbm5sZXNzX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbHNhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTE1QX0xTQVBfTUFHSUMsIHJldHVybjspOwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAKIAkJCWN1cnItPm5vdGlmeS5zdGF0dXNfaW5kaWNhdGlvbihjdXJyLT5ub3RpZnkuaW5zdGFuY2UsCiAJCQkJCQkgICAgICAgbGluaywgbG9jayk7CiAJCWVsc2UKLQkJCUlSREFfREVCVUcoMiwgIiVzKCksIG5vIGhhbmRsZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDIsICIlcygpLCBubyBoYW5kbGVyXG4iLCBfX2Z1bmNfXyk7CiAKIAkJY3VyciA9IG5leHQ7CiAJfQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAKIAkvKiBHZXQgdGhlIG51bWJlciBvZiBsc2FwLiBUaGF0J3MgdGhlIG9ubHkgc2FmZSB3YXkgdG8ga25vdwogCSAqIHRoYXQgd2UgaGF2ZSBsb29wZWQgYXJvdW5kLi4uIC0gSmVhbiBJSSAqLwogCWxzYXBfdG9kbyA9IEhBU0hCSU5fR0VUX1NJWkUoc2VsZi0+bHNhcHMpOwotCUlSREFfREVCVUcoNCwgIiVzKCkgOiAlZCBsc2FwcyB0byBzY2FuXG4iLCBfX0ZVTkNUSU9OX18sIGxzYXBfdG9kbyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSA6ICVkIGxzYXBzIHRvIHNjYW5cbiIsIF9fZnVuY19fLCBsc2FwX3RvZG8pOwogCiAJLyogUG9sbCBsc2FwIGluIG9yZGVyIHVudGlsIHRoZSBxdWV1ZSBpcyBmdWxsIG9yIHVudGlsIHdlCiAJICogdHJpZWQgdGhlbSBhbGwuCkBAIC0xMzUyLDE0ICsxMzUyLDE0IEBACiAJCS8qIFVoLW9oLi4uIFBhcmFub2lhICovCiAJCWlmKGN1cnIgPT0gTlVMTCkKIAkJCWJyZWFrOwotCQlJUkRBX0RFQlVHKDQsICIlcygpIDogY3VyciBpcyAlcCwgbmV4dCB3YXMgJXAgYW5kIGlzIG5vdyAlcCwgc3RpbGwgJWQgdG8gZ28gLSBxdWV1ZSBsZW4gPSAlZFxuIiwgX19GVU5DVElPTl9fLCBjdXJyLCBuZXh0LCBzZWxmLT5mbG93X25leHQsIGxzYXBfdG9kbywgSVJMQVBfR0VUX1RYX1FVRVVFX0xFTihzZWxmLT5pcmxhcCkpOworCQlJUkRBX0RFQlVHKDQsICIlcygpIDogY3VyciBpcyAlcCwgbmV4dCB3YXMgJXAgYW5kIGlzIG5vdyAlcCwgc3RpbGwgJWQgdG8gZ28gLSBxdWV1ZSBsZW4gPSAlZFxuIiwgX19mdW5jX18sIGN1cnIsIG5leHQsIHNlbGYtPmZsb3dfbmV4dCwgbHNhcF90b2RvLCBJUkxBUF9HRVRfVFhfUVVFVUVfTEVOKHNlbGYtPmlybGFwKSk7CiAKIAkJLyogSW5mb3JtIGxzYXAgdXNlciB0aGF0IGl0IGNhbiBzZW5kIG9uZSBtb3JlIHBhY2tldC4gKi8KIAkJaWYgKGN1cnItPm5vdGlmeS5mbG93X2luZGljYXRpb24gIT0gTlVMTCkKIAkJCWN1cnItPm5vdGlmeS5mbG93X2luZGljYXRpb24oY3Vyci0+bm90aWZ5Lmluc3RhbmNlLAogCQkJCQkJICAgICBjdXJyLCBmbG93KTsKIAkJZWxzZQotCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgbm8gaGFuZGxlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMSwgIiVzKCksIG5vIGhhbmRsZXJcbiIsIF9fZnVuY19fKTsKIAl9CiB9CiAKQEAgLTEzODEsNyArMTM4MSw3IEBACiAJICovCiAJc2VydmljZSA9IGttYWxsb2MoMTYsIEdGUF9BVE9NSUMpOwogCWlmICghc2VydmljZSkgewotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIFVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTE0ODIsMTIgKzE0ODIsMTIgQEAKIHsKIAlpcmxtcF9zZXJ2aWNlX3QgKnNlcnZpY2U7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBoaW50cyA9ICUwNHhcbiIsIF9fRlVOQ1RJT05fXywgaGludHMpOworCUlSREFfREVCVUcoNCwgIiVzKCksIGhpbnRzID0gJTA0eFxuIiwgX19mdW5jX18sIGhpbnRzKTsKIAogCS8qIE1ha2UgYSBuZXcgcmVnaXN0cmF0aW9uICovCiAJc2VydmljZSA9IGttYWxsb2Moc2l6ZW9mKGlybG1wX3NlcnZpY2VfdCksIEdGUF9BVE9NSUMpOwogCWlmICghc2VydmljZSkgewotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIFVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJc2VydmljZS0+aGludHMud29yZCA9IGhpbnRzOwpAQCAtMTUxMiw3ICsxNTEyLDcgQEAKIAlpcmxtcF9zZXJ2aWNlX3QgKnNlcnZpY2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAtMTsKQEAgLTE1MjAsNyArMTUyMCw3IEBACiAJLyogQ2FsbGVyIG1heSBjYWxsIHdpdGggaW52YWxpZCBoYW5kbGUgKGl0J3MgbGVnYWwpIC0gSmVhbiBJSSAqLwogCXNlcnZpY2UgPSBoYXNoYmluX2xvY2tfZmluZChpcmxtcC0+c2VydmljZXMsIChsb25nKSBoYW5kbGUsIE5VTEwpOwogCWlmICghc2VydmljZSkgewotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIHNlcnZpY2UhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIHNlcnZpY2UhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE1NTcsMTMgKzE1NTcsMTMgQEAKIHsKIAlpcmxtcF9jbGllbnRfdCAqY2xpZW50OwogCi0JSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAJSVJEQV9BU1NFUlQoaXJsbXAgIT0gTlVMTCwgcmV0dXJuIE5VTEw7KTsKIAogCS8qIE1ha2UgYSBuZXcgcmVnaXN0cmF0aW9uICovCiAJY2xpZW50ID0ga21hbGxvYyhzaXplb2YoaXJsbXBfY2xpZW50X3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWNsaWVudCkgewotCQlJUkRBX0RFQlVHKCAxLCAiJXMoKSwgVW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKCAxLCAiJXMoKSwgVW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTU5OSw3ICsxNTk5LDcgQEAKIAogCWNsaWVudCA9IGhhc2hiaW5fbG9ja19maW5kKGlybG1wLT5jbGllbnRzLCAobG9uZykgaGFuZGxlLCBOVUxMKTsKIAlpZiAoIWNsaWVudCkgewotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGNsaWVudCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gY2xpZW50IVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNjIyLDcgKzE2MjIsNyBAQAogewogCXN0cnVjdCBpcmxtcF9jbGllbnQgKmNsaWVudDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAtMTsKQEAgLTE2MzAsMTEgKzE2MzAsMTEgQEAKIAkvKiBDYWxsZXIgbWF5IGNhbGwgd2l0aCBpbnZhbGlkIGhhbmRsZSAoaXQncyBsZWdhbCkgLSBKZWFuIElJICovCiAJY2xpZW50ID0gaGFzaGJpbl9sb2NrX2ZpbmQoaXJsbXAtPmNsaWVudHMsIChsb25nKSBoYW5kbGUsIE5VTEwpOwogCWlmICghY2xpZW50KSB7Ci0JCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gY2xpZW50IVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVW5rbm93biBjbGllbnQhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCByZW1vdmluZyBjbGllbnQhXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKCksIHJlbW92aW5nIGNsaWVudCFcbiIsIF9fZnVuY19fKTsKIAloYXNoYmluX3JlbW92ZV90aGlzKGlybG1wLT5jbGllbnRzLCAoaXJkYV9xdWV1ZV90ICopIGNsaWVudCk7CiAJa2ZyZWUoY2xpZW50KTsKIApAQCAtMTY2Myw3ICsxNjYzLDcgQEAKIAlJUkRBX0FTU0VSVChpcmxtcC0+bWFnaWMgPT0gTE1QX01BR0lDLCByZXR1cm4gVFJVRTspOwogCUlSREFfQVNTRVJUKHNsc2FwX3NlbCAhPSBMU0FQX0FOWSwgcmV0dXJuIFRSVUU7KTsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAjaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKIAkvKiBBY2NlcHQgYWxsIGJpbmRpbmdzIHRvIHRoZSBjb25uZWN0aW9ubGVzcyBMU0FQICovCkBAIC0xNzkwLDcgKzE3OTAsNyBAQAogCQkJLyogTWFrZSBzdXJlIHdlIHRlcm1pbmF0ZSB0aGUgbG9vcCAqLwogCQkJaWYgKHdyYXBwZWQrKykgewogCQkJCUlSREFfRVJST1IoIiVzOiBubyBtb3JlIGZyZWUgTFNBUHMgIVxuIiwKLQkJCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCQkJICAgX19mdW5jX18pOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CkBAIC0xODA1LDcgKzE4MDUsNyBAQAogCS8qIEdvdCBpdCAhICovCiAJbHNhcF9zZWwgPSBpcmxtcC0+bGFzdF9sc2FwX3NlbDsKIAlJUkRBX0RFQlVHKDQsICIlcygpLCBmb3VuZCBmcmVlIGxzYXBfc2VsPSUwMnhcbiIsCi0JCSAgIF9fRlVOQ1RJT05fXywgbHNhcF9zZWwpOworCQkgICBfX2Z1bmNfXywgbHNhcF9zZWwpOwogCiAJcmV0dXJuIGxzYXBfc2VsOwogfQpAQCAtMTgyMywyNiArMTgyMywyNiBAQAogCiAJc3dpdGNoIChsYXBfcmVhc29uKSB7CiAJY2FzZSBMQVBfRElTQ19JTkRJQ0FUSU9OOiAvKiBSZWNlaXZlZCBhIGRpc2Nvbm5lY3QgcmVxdWVzdCBmcm9tIHBlZXIgKi8KLQkJSVJEQV9ERUJVRyggMSwgIiVzKCksIExBUF9ESVNDX0lORElDQVRJT05cbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoIDEsICIlcygpLCBMQVBfRElTQ19JTkRJQ0FUSU9OXG4iLCBfX2Z1bmNfXyk7CiAJCXJlYXNvbiA9IExNX1VTRVJfUkVRVUVTVDsKIAkJYnJlYWs7CiAJY2FzZSBMQVBfTk9fUkVTUE9OU0U6ICAgIC8qIFRvIG1hbnkgcmV0cmFuc21pdHMgd2l0aG91dCByZXNwb25zZSAqLwotCQlJUkRBX0RFQlVHKCAxLCAiJXMoKSwgTEFQX05PX1JFU1BPTlNFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKCAxLCAiJXMoKSwgTEFQX05PX1JFU1BPTlNFXG4iLCBfX2Z1bmNfXyk7CiAJCXJlYXNvbiA9IExNX0xBUF9ESVNDT05ORUNUOwogCQlicmVhazsKIAljYXNlIExBUF9SRVNFVF9JTkRJQ0FUSU9OOgotCQlJUkRBX0RFQlVHKCAxLCAiJXMoKSwgTEFQX1JFU0VUX0lORElDQVRJT05cbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoIDEsICIlcygpLCBMQVBfUkVTRVRfSU5ESUNBVElPTlxuIiwgX19mdW5jX18pOwogCQlyZWFzb24gPSBMTV9MQVBfUkVTRVQ7CiAJCWJyZWFrOwogCWNhc2UgTEFQX0ZPVU5EX05PTkU6CiAJY2FzZSBMQVBfTUVESUFfQlVTWToKIAljYXNlIExBUF9QUklNQVJZX0NPTkZMSUNUOgotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBMQVBfRk9VTkRfTk9ORSwgTEFQX01FRElBX0JVU1kgb3IgTEFQX1BSSU1BUllfQ09ORkxJQ1RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIExBUF9GT1VORF9OT05FLCBMQVBfTUVESUFfQlVTWSBvciBMQVBfUFJJTUFSWV9DT05GTElDVFxuIiwgX19mdW5jX18pOwogCQlyZWFzb24gPSBMTV9DT05ORUNUX0ZBSUxVUkU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vdyBJckxBUCBkaXNjb25uZWN0IHJlYXNvbiAlZCFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGxhcF9yZWFzb24pOworCQkJICAgX19mdW5jX18sIGxhcF9yZWFzb24pOwogCQlyZWFzb24gPSBMTV9MQVBfRElTQ09OTkVDVDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYyBiL25ldC9pcmRhL2lybG1wX2V2ZW50LmMKaW5kZXggMTUwY2QzZi4uNzhjY2UwYyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJCQkJSVJMTVBfU1RBVEUgc3RhdGUpCiB7CiAJLyoKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBMTVAgTEFQID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaXJsbXBfc3RhdGVbc3RhdGVdKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBMTVAgTEFQID0gJXNcbiIsIF9fZnVuY19fLCBpcmxtcF9zdGF0ZVtzdGF0ZV0pOwogCSovCiAJc2VsZi0+bGFwX3N0YXRlID0gc3RhdGU7CiB9CkBAIC0xMzAsNyArMTMwLDcgQEAKIHsKIAkvKgogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKSwgTE1QIExTQVAgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBpcmxzYXBfc3RhdGVbc3RhdGVdKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBMTVAgTFNBUCA9ICVzXG4iLCBfX2Z1bmNfXywgaXJsc2FwX3N0YXRlW3N0YXRlXSk7CiAJKi8KIAlzZWxmLT5sc2FwX3N0YXRlID0gc3RhdGU7CiB9CkBAIC0xNDMsNyArMTQzLDcgQEAKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMTVBfTFNBUF9NQUdJQywgcmV0dXJuIC0xOyk7CiAKIAlJUkRBX0RFQlVHKDQsICIlcygpLCBFVkVOVCA9ICVzLCBTVEFURSA9ICVzXG4iLAotCQlfX0ZVTkNUSU9OX18sIGlybG1wX2V2ZW50W2V2ZW50XSwgaXJsc2FwX3N0YXRlWyBzZWxmLT5sc2FwX3N0YXRlXSk7CisJCV9fZnVuY19fLCBpcmxtcF9ldmVudFtldmVudF0sIGlybHNhcF9zdGF0ZVsgc2VsZi0+bHNhcF9zdGF0ZV0pOwogCiAJcmV0dXJuICgqbHNhcF9zdGF0ZVtzZWxmLT5sc2FwX3N0YXRlXSkgKHNlbGYsIGV2ZW50LCBza2IpOwogfQpAQCAtMTYwLDcgKzE2MCw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMTVBfTEFQX01BR0lDLCByZXR1cm47KTsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIEVWRU5UID0gJXMsIFNUQVRFID0gJXNcbiIsIF9fRlVOQ1RJT05fXywKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBFVkVOVCA9ICVzLCBTVEFURSA9ICVzXG4iLCBfX2Z1bmNfXywKIAkJICAgaXJsbXBfZXZlbnRbZXZlbnRdLAogCQkgICBpcmxtcF9zdGF0ZVtzZWxmLT5sYXBfc3RhdGVdKTsKIApAQCAtMTY5LDcgKzE2OSw3IEBACiAKIHZvaWQgaXJsbXBfZGlzY292ZXJ5X3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSkKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCS8qIFdlIGFsd2F5cyBjbGVhbnVwIHRoZSBsb2cgKGFjdGl2ZSAmIHBhc3NpdmUgZGlzY292ZXJ5KSAqLwogCWlybG1wX2RvX2V4cGlyeSgpOwpAQCAtMTg0LDcgKzE4NCw3IEBACiB7CiAJc3RydWN0IGxzYXBfY2IgKnNlbGYgPSAoc3RydWN0IGxzYXBfY2IgKikgZGF0YTsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMTVBfTFNBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC0xOTYsNyArMTk2LDcgQEAKIHsKIAlzdHJ1Y3QgbGFwX2NiICpzZWxmID0gKHN0cnVjdCBsYXBfY2IgKikgZGF0YTsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMTVBfTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTI1Niw3ICsyNTYsNyBAQAogc3RhdGljIHZvaWQgaXJsbXBfc3RhdGVfc3RhbmRieShzdHJ1Y3QgbGFwX2NiICpzZWxmLCBJUkxNUF9FVkVOVCBldmVudCwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCUlSREFfQVNTRVJUKHNlbGYtPmlybGFwICE9IE5VTEwsIHJldHVybjspOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMjc2LDcgKzI3Niw3IEBACiAJCWlybGFwX2Nvbm5lY3RfcmVzcG9uc2Uoc2VsZi0+aXJsYXAsIHNrYik7CiAJCWJyZWFrOwogCWNhc2UgTE1fTEFQX0NPTk5FQ1RfUkVRVUVTVDoKLQkJSVJEQV9ERUJVRyg0LCAiJXMoKSBMU19DT05ORUNUX1JFUVVFU1RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoNCwgIiVzKCkgTFNfQ09OTkVDVF9SRVFVRVNUXG4iLCBfX2Z1bmNfXyk7CiAKIAkJaXJsbXBfbmV4dF9sYXBfc3RhdGUoc2VsZiwgTEFQX1VfQ09OTkVDVCk7CiAKQEAgLTI4NSwxMyArMjg1LDEzIEBACiAJCWJyZWFrOwogCWNhc2UgTE1fTEFQX0RJU0NPTk5FQ1RfSU5ESUNBVElPTjoKIAkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgRXJyb3IgTE1fTEFQX0RJU0NPTk5FQ1RfSU5ESUNBVElPTlxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICBfX2Z1bmNfXyk7CiAKIAkJaXJsbXBfbmV4dF9sYXBfc3RhdGUoc2VsZiwgTEFQX1NUQU5EQlkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVzXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBpcmxtcF9ldmVudFtldmVudF0pOworCQkJICAgX19mdW5jX18sIGlybG1wX2V2ZW50W2V2ZW50XSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTMwNiw3ICszMDYsNyBAQAogc3RhdGljIHZvaWQgaXJsbXBfc3RhdGVfdV9jb25uZWN0KHN0cnVjdCBsYXBfY2IgKnNlbGYsIElSTE1QX0VWRU5UIGV2ZW50LAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDIsICIlcygpLCBldmVudD0lc1xuIiwgX19GVU5DVElPTl9fLCBpcmxtcF9ldmVudFtldmVudF0pOworCUlSREFfREVCVUcoMiwgIiVzKCksIGV2ZW50PSVzXG4iLCBfX2Z1bmNfXywgaXJsbXBfZXZlbnRbZXZlbnRdKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIExNX0xBUF9DT05ORUNUX0lORElDQVRJT046CkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJICogdGhlIGxzYXBzIG1heSBhbHJlYWR5IGhhdmUgZ29uZS4gVGhpcyBhdm9pZCBnZXR0aW5nIHN0dWNrCiAJCSAqIGZvcmV2ZXIgaW4gTEFQX0FDVElWRSBzdGF0ZSAtIEplYW4gSUkgKi8KIAkJaWYgKEhBU0hCSU5fR0VUX1NJWkUoc2VsZi0+bHNhcHMpID09IDApIHsKLQkJCUlSREFfREVCVUcoMCwgIiVzKCkgTk8gTFNBUHMgIVxuIiwgIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDAsICIlcygpIE5PIExTQVBzICFcbiIsICBfX2Z1bmNfXyk7CiAJCQlpcmxtcF9zdGFydF9pZGxlX3RpbWVyKHNlbGYsIExNX0lETEVfVElNRU9VVCk7CiAJCX0KIAkJYnJlYWs7CkBAIC0zNDQsMTIgKzM0NCwxMiBAQAogCQkgKiB0aGUgbHNhcHMgbWF5IGFscmVhZHkgaGF2ZSBnb25lLiBUaGlzIGF2b2lkIGdldHRpbmcgc3R1Y2sKIAkJICogZm9yZXZlciBpbiBMQVBfQUNUSVZFIHN0YXRlIC0gSmVhbiBJSSAqLwogCQlpZiAoSEFTSEJJTl9HRVRfU0laRShzZWxmLT5sc2FwcykgPT0gMCkgewotCQkJSVJEQV9ERUJVRygwLCAiJXMoKSBOTyBMU0FQcyAhXG4iLCAgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMCwgIiVzKCkgTk8gTFNBUHMgIVxuIiwgIF9fZnVuY19fKTsKIAkJCWlybG1wX3N0YXJ0X2lkbGVfdGltZXIoc2VsZiwgTE1fSURMRV9USU1FT1VUKTsKIAkJfQogCQlicmVhazsKIAljYXNlIExNX0xBUF9ESVNDT05ORUNUX0lORElDQVRJT046Ci0JCUlSREFfREVCVUcoNCwgIiVzKCksIExNX0xBUF9ESVNDT05ORUNUX0lORElDQVRJT05cbiIsICBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBMTV9MQVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OXG4iLCAgX19mdW5jX18pOwogCQlpcmxtcF9uZXh0X2xhcF9zdGF0ZShzZWxmLCBMQVBfU1RBTkRCWSk7CiAKIAkJLyogU2VuZCBkaXNjb25uZWN0IGV2ZW50IHRvIGFsbCBMU0FQcyB1c2luZyB0aGlzIGxpbmsgKi8KQEAgLTM1Nyw3ICszNTcsNyBAQAogCQkJCQlMTV9MQVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OKTsKIAkJYnJlYWs7CiAJY2FzZSBMTV9MQVBfRElTQ09OTkVDVF9SRVFVRVNUOgotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBMTV9MQVBfRElTQ09OTkVDVF9SRVFVRVNUXG4iLCAgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgTE1fTEFQX0RJU0NPTk5FQ1RfUkVRVUVTVFxuIiwgIF9fZnVuY19fKTsKIAogCQkvKiBPbmUgb2YgdGhlIExTQVAgZGlkIHRpbWVvdXQgb3Igd2FzIGNsb3NlZCwgaWYgaXQgd2FzCiAJCSAqIHRoZSBsYXN0IG9uZSwgdHJ5IHRvIGdldCBvdXQgb2YgaGVyZSAtIEplYW4gSUkgKi8KQEAgLTM2Nyw3ICszNjcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVzXG4iLAotCQkJIF9fRlVOQ1RJT05fXywgaXJsbXBfZXZlbnRbZXZlbnRdKTsKKwkJCSBfX2Z1bmNfXywgaXJsbXBfZXZlbnRbZXZlbnRdKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMzgxLDExICszODEsMTEgQEAKIHN0YXRpYyB2b2lkIGlybG1wX3N0YXRlX2FjdGl2ZShzdHJ1Y3QgbGFwX2NiICpzZWxmLCBJUkxNUF9FVkVOVCBldmVudCwKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTE1fTEFQX0NPTk5FQ1RfUkVRVUVTVDoKLQkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgTFNfQ09OTkVDVF9SRVFVRVNUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBMU19DT05ORUNUX1JFUVVFU1RcbiIsIF9fZnVuY19fKTsKIAogCQkvKgogCQkgKiBJckxBUCBtYXkgaGF2ZSBhIHBlbmRpbmcgZGlzY29ubmVjdC4gV2UgdHJpZWQgdG8gY2xvc2UKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVzXG4iLAotCQkJIF9fRlVOQ1RJT05fXywgaXJsbXBfZXZlbnRbZXZlbnRdKTsKKwkJCSBfX2Z1bmNfXywgaXJsbXBfZXZlbnRbZXZlbnRdKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNDkwLDcgKzQ5MCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTE1QX0xTQVBfTUFHSUMsIHJldHVybiAtMTspOwpAQCAtNTA1LDExICs1MDUsMTEgQEAKIAkJYnJlYWs7CiAjZW5kaWYgLyogQ09ORklHX0lSREFfVUxUUkEgKi8KIAljYXNlIExNX0NPTk5FQ1RfUkVRVUVTVDoKLQkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgTE1fQ09OTkVDVF9SRVFVRVNUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCBMTV9DT05ORUNUX1JFUVVFU1RcbiIsIF9fZnVuY19fKTsKIAogCQlpZiAoc2VsZi0+Y29ubl9za2IpIHsKIAkJCUlSREFfV0FSTklORygiJXM6IGJ1c3kgd2l0aCBhbm90aGVyIHJlcXVlc3QhXG4iLAotCQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCQkgICAgIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJLyogRG9uJ3QgZm9yZ2V0IHRvIHJlZmNvdW50IGl0IChzZWUgaXJsbXBfY29ubmVjdF9yZXF1ZXN0KCkpICovCkBAIC01MjYsNyArNTI2LDcgQEAKIAljYXNlIExNX0NPTk5FQ1RfSU5ESUNBVElPTjoKIAkJaWYgKHNlbGYtPmNvbm5fc2tiKSB7CiAJCQlJUkRBX1dBUk5JTkcoIiVzOiBidXN5IHdpdGggYW5vdGhlciByZXF1ZXN0IVxuIiwKLQkJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCS8qIERvbid0IGZvcmdldCB0byByZWZjb3VudCBpdCAoc2VlIGlybGFwX2RyaXZlcl9yY3YoKSkgKi8KQEAgLTU1Miw3ICs1NTIsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVzIG9uIExTQVAgJSMwMnhcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGlybG1wX2V2ZW50W2V2ZW50XSwgc2VsZi0+c2xzYXBfc2VsKTsKKwkJCSAgIF9fZnVuY19fLCBpcmxtcF9ldmVudFtldmVudF0sIHNlbGYtPnNsc2FwX3NlbCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJc3RydWN0IGxzYXBfY2IgKmxzYXA7CiAJaW50IHJldCA9IDA7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTE1QX0xTQVBfTUFHSUMsIHJldHVybiAtMTspOwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJY2FzZSBMTV9XQVRDSERPR19USU1FT1VUOgogCQkvKiBNYXkgaGFwcGVuLCB3aG8ga25vd3MuLi4KIAkJICogSmVhbiBJSSAqLwotCQlJUkRBX0RFQlVHKDAsICIlcygpIFdBVENIRE9HX1RJTUVPVVQhXG4iLCAgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSBXQVRDSERPR19USU1FT1VUIVxuIiwgIF9fZnVuY19fKTsKIAogCQkvKiBEaXNjb25uZWN0LCBnZXQgb3V0Li4uIC0gSmVhbiBJSSAqLwogCQlzZWxmLT5sYXAgPSBOVUxMOwpAQCAtNjE0LDcgKzYxNCw3IEBACiAJCS8qIExNX0xBUF9ESVNDT05ORUNUX0lORElDQVRJT04gOiBTaG91bGQgbmV2ZXIgaGFwcGVuLCB3ZQogCQkgKiBhcmUgKm5vdCogeWV0IGJvdW5kIHRvIHRoZSBJckxBUCBsaW5rLiBKZWFuIElJICovCiAJCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZXZlbnQgJXMgb24gTFNBUCAlIzAyeFxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgaXJsbXBfZXZlbnRbZXZlbnRdLCBzZWxmLT5zbHNhcF9zZWwpOworCQkJICAgX19mdW5jX18sIGlybG1wX2V2ZW50W2V2ZW50XSwgc2VsZi0+c2xzYXBfc2VsKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiByZXQ7CkBAIC02MzIsNyArNjMyLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwogCWludCByZXQgPSAwOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExNUF9MU0FQX01BR0lDLCByZXR1cm4gLTE7KTsKQEAgLTY0MywxNiArNjQzLDE2IEBACiAJCWJyZWFrOwogCWNhc2UgTE1fQ09OTkVDVF9SRVNQT05TRToKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgTE1fQ09OTkVDVF9SRVNQT05TRSwgIgotCQkJICAgIm5vIGluZGljYXRpb24gaXNzdWVkIHlldFxuIiwgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAibm8gaW5kaWNhdGlvbiBpc3N1ZWQgeWV0XG4iLCAgX19mdW5jX18pOwogCQkvKiBLZWVwIHN0YXRlICovCiAJCWJyZWFrOwogCWNhc2UgTE1fRElTQ09OTkVDVF9SRVFVRVNUOgogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBMTV9ESVNDT05ORUNUX1JFUVVFU1QsICIKLQkJCSAgICJub3QgeWV0IGJvdW5kIHRvIElyTEFQIGNvbm5lY3Rpb25cbiIsICBfX0ZVTkNUSU9OX18pOworCQkJICAgIm5vdCB5ZXQgYm91bmQgdG8gSXJMQVAgY29ubmVjdGlvblxuIiwgIF9fZnVuY19fKTsKIAkJLyogS2VlcCBzdGF0ZSAqLwogCQlicmVhazsKIAljYXNlIExNX0xBUF9DT05ORUNUX0NPTkZJUk06Ci0JCUlSREFfREVCVUcoNCwgIiVzKCksIExTX0NPTk5FQ1RfQ09ORklSTVxuIiwgIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIExTX0NPTk5FQ1RfQ09ORklSTVxuIiwgIF9fZnVuY19fKTsKIAkJaXJsbXBfbmV4dF9sc2FwX3N0YXRlKHNlbGYsIExTQVBfQ09OTkVDVCk7CiAKIAkJdHhfc2tiID0gc2VsZi0+Y29ubl9za2I7CkBAIC02NjYsNyArNjY2LDcgQEAKIAkJLyogV2lsbCBoYXBwZW4gaW4gc29tZSByYXJlIGNhc2VzIGJlY2F1c2Ugb2YgYSByYWNlIGNvbmRpdGlvbi4KIAkJICogSnVzdCBtYWtlIHN1cmUgd2UgZG9uJ3Qgc3RheSB0aGVyZSBmb3JldmVyLi4uCiAJCSAqIEplYW4gSUkgKi8KLQkJSVJEQV9ERUJVRygwLCAiJXMoKSBXQVRDSERPR19USU1FT1VUIVxuIiwgIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCkgV0FUQ0hET0dfVElNRU9VVCFcbiIsICBfX2Z1bmNfXyk7CiAKIAkJLyogR28gYmFjayB0byBkaXNjb25uZWN0ZWQgbW9kZSwga2VlcCB0aGUgc29ja2V0IHdhaXRpbmcgKi8KIAkJc2VsZi0+bGFwID0gTlVMTDsKQEAgLTY4MCw3ICs2ODAsNyBAQAogCQkvKiBMTV9MQVBfRElTQ09OTkVDVF9JTkRJQ0FUSU9OIDogU2hvdWxkIG5ldmVyIGhhcHBlbiwgd2UKIAkJICogYXJlICpub3QqIHlldCBib3VuZCB0byB0aGUgSXJMQVAgbGluay4gSmVhbiBJSSAqLwogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVzIG9uIExTQVAgJSMwMnhcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGlybG1wX2V2ZW50W2V2ZW50XSwgc2VsZi0+c2xzYXBfc2VsKTsKKwkJCSAgIF9fZnVuY19fLCBpcmxtcF9ldmVudFtldmVudF0sIHNlbGYtPnNsc2FwX3NlbCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNjk4LDcgKzY5OCw3IEBACiAJTE1fUkVBU09OIHJlYXNvbjsKIAlpbnQgcmV0ID0gMDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMTVBfTFNBUF9NQUdJQywgcmV0dXJuIC0xOyk7CkBAIC03MjIsMTIgKzcyMiwxMiBAQAogCQlicmVhazsKIAljYXNlIExNX0NPTk5FQ1RfUkVRVUVTVDoKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgTE1fQ09OTkVDVF9SRVFVRVNULCAiCi0JCQkgICAiZXJyb3IsIExTQVAgYWxyZWFkeSBjb25uZWN0ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkgICAiZXJyb3IsIExTQVAgYWxyZWFkeSBjb25uZWN0ZWRcbiIsIF9fZnVuY19fKTsKIAkJLyogS2VlcCBzdGF0ZSAqLwogCQlicmVhazsKIAljYXNlIExNX0NPTk5FQ1RfUkVTUE9OU0U6CiAJCUlSREFfREVCVUcoMCwgIiVzKCksIExNX0NPTk5FQ1RfUkVTUE9OU0UsICIKLQkJCSAgICJlcnJvciwgTFNBUCBhbHJlYWR5IGNvbm5lY3RlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICJlcnJvciwgTFNBUCBhbHJlYWR5IGNvbm5lY3RlZFxuIiwgX19mdW5jX18pOwogCQkvKiBLZWVwIHN0YXRlICovCiAJCWJyZWFrOwogCWNhc2UgTE1fRElTQ09OTkVDVF9SRVFVRVNUOgpAQCAtNzQwLDcgKzc0MCw3IEBACiAJCS8qIFRyeSB0byBjbG9zZSB0aGUgTEFQIGNvbm5lY3Rpb24gaWYgaXRzIHN0aWxsIHRoZXJlICovCiAJCWlmIChzZWxmLT5sYXApIHsKIAkJCUlSREFfREVCVUcoNCwgIiVzKCksIHRyeWluZyB0byBjbG9zZSBJckxBUFxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCWlybG1wX2RvX2xhcF9ldmVudChzZWxmLT5sYXAsCiAJCQkJCSAgIExNX0xBUF9ESVNDT05ORUNUX1JFUVVFU1QsCiAJCQkJCSAgIE5VTEwpOwpAQCAtNzY0LDE0ICs3NjQsMTQgQEAKIAkJcmVhc29uID0gc2tiLT5kYXRhWzNdOwogCiAJCSAvKiBUcnkgdG8gY2xvc2UgdGhlIExBUCBjb25uZWN0aW9uICovCi0JCUlSREFfREVCVUcoNCwgIiVzKCksIHRyeWluZyB0byBjbG9zZSBJckxBUFxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRyg0LCAiJXMoKSwgdHJ5aW5nIHRvIGNsb3NlIElyTEFQXG4iLCBfX2Z1bmNfXyk7CiAJCWlybG1wX2RvX2xhcF9ldmVudChzZWxmLT5sYXAsIExNX0xBUF9ESVNDT05ORUNUX1JFUVVFU1QsIE5VTEwpOwogCiAJCWlybG1wX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzZWxmLCByZWFzb24sIHNrYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gZXZlbnQgJXMgb24gTFNBUCAlIzAyeFxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgaXJsbXBfZXZlbnRbZXZlbnRdLCBzZWxmLT5zbHNhcF9zZWwpOworCQkJICAgX19mdW5jX18sIGlybG1wX2V2ZW50W2V2ZW50XSwgc2VsZi0+c2xzYXBfc2VsKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiByZXQ7CkBAIC03OTMsNyArNzkzLDcgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExNUF9MU0FQX01BR0lDLCByZXR1cm4gLTE7KTsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTE1fQ09OTkVDVF9DT05GSVJNOgpAQCAtODE0LDcgKzgxNCw3IEBACiAJCXJlYXNvbiA9IHNrYi0+ZGF0YVszXTsKIAogCQkgLyogVHJ5IHRvIGNsb3NlIHRoZSBMQVAgY29ubmVjdGlvbiAqLwotCQlJUkRBX0RFQlVHKDQsICIlcygpLCB0cnlpbmcgdG8gY2xvc2UgSXJMQVBcbiIsICBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDQsICIlcygpLCB0cnlpbmcgdG8gY2xvc2UgSXJMQVBcbiIsICBfX2Z1bmNfXyk7CiAJCWlybG1wX2RvX2xhcF9ldmVudChzZWxmLT5sYXAsIExNX0xBUF9ESVNDT05ORUNUX1JFUVVFU1QsIE5VTEwpOwogCiAJCWlybG1wX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbihzZWxmLCByZWFzb24sIHNrYik7CkBAIC04MzIsNyArODMyLDcgQEAKIAkJaXJsbXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHNlbGYsIHJlYXNvbiwgc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBMTV9XQVRDSERPR19USU1FT1VUOgotCQlJUkRBX0RFQlVHKDAsICIlcygpIFdBVENIRE9HX1RJTUVPVVQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpIFdBVENIRE9HX1RJTUVPVVQhXG4iLCBfX2Z1bmNfXyk7CiAKIAkJSVJEQV9BU1NFUlQoc2VsZi0+bGFwICE9IE5VTEwsIHJldHVybiAtMTspOwogCQlpcmxtcF9kb19sYXBfZXZlbnQoc2VsZi0+bGFwLCBMTV9MQVBfRElTQ09OTkVDVF9SRVFVRVNULCBOVUxMKTsKQEAgLTg0Miw3ICs4NDIsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVzIG9uIExTQVAgJSMwMnhcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGlybG1wX2V2ZW50W2V2ZW50XSwgc2VsZi0+c2xzYXBfc2VsKTsKKwkJCSAgIF9fZnVuY19fLCBpcmxtcF9ldmVudFtldmVudF0sIHNlbGYtPnNsc2FwX3NlbCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtODYzLDcgKzg2Myw3IEBACiAJTE1fUkVBU09OIHJlYXNvbjsKIAlpbnQgcmV0ID0gMDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChpcmxtcCAhPSBOVUxMLCByZXR1cm4gLTE7KTsKQEAgLTg4Myw3ICs4ODMsNyBAQAogCQlpcmxtcF9uZXh0X2xzYXBfc3RhdGUoc2VsZiwgTFNBUF9TRVRVUCk7CiAJCWJyZWFrOwogCWNhc2UgTE1fV0FUQ0hET0dfVElNRU9VVDoKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSA6IFdBVENIRE9HX1RJTUVPVVQgIVxuIiwgIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCkgOiBXQVRDSERPR19USU1FT1VUICFcbiIsICBfX2Z1bmNfXyk7CiAKIAkJSVJEQV9BU1NFUlQoc2VsZi0+bGFwICE9IE5VTEwsIHJldHVybiAtMTspOwogCQlpcmxtcF9kb19sYXBfZXZlbnQoc2VsZi0+bGFwLCBMTV9MQVBfRElTQ09OTkVDVF9SRVFVRVNULCBOVUxMKTsKQEAgLTkwMiw3ICs5MDIsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBVbmtub3duIGV2ZW50ICVzIG9uIExTQVAgJSMwMnhcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGlybG1wX2V2ZW50W2V2ZW50XSwgc2VsZi0+c2xzYXBfc2VsKTsKKwkJCSAgIF9fZnVuY19fLCBpcmxtcF9ldmVudFtldmVudF0sIHNlbGYtPnNsc2FwX3NlbCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXBfZnJhbWUuYyBiL25ldC9pcmRhL2lybG1wX2ZyYW1lLmMKaW5kZXggMGE3OWQ5YS4uMzc1MDg4NCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXBfZnJhbWUuYworKysgYi9uZXQvaXJkYS9pcmxtcF9mcmFtZS5jCkBAIC00NCw3ICs0NCw3IEBACiAJc2tiLT5kYXRhWzFdID0gc2xzYXA7CiAKIAlpZiAoZXhwZWRpdGVkKSB7Ci0JCUlSREFfREVCVUcoNCwgIiVzKCksIHNlbmRpbmcgZXhwZWRpdGVkIGRhdGFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIHNlbmRpbmcgZXhwZWRpdGVkIGRhdGFcbiIsIF9fZnVuY19fKTsKIAkJaXJsYXBfZGF0YV9yZXF1ZXN0KHNlbGYtPmlybGFwLCBza2IsIFRSVUUpOwogCX0gZWxzZQogCQlpcmxhcF9kYXRhX3JlcXVlc3Qoc2VsZi0+aXJsYXAsIHNrYiwgRkFMU0UpOwpAQCAtNjAsNyArNjAsNyBAQAogewogCV9fdTggKmZyYW1lOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExNUF9MQVBfTUFHSUMsIHJldHVybjspOwpAQCAtOTUsNyArOTUsNyBAQAogCV9fdTggICBkbHNhcF9zZWw7ICAgLyogRGVzdGluYXRpb24gTFNBUCBhZGRyZXNzICovCiAJX191OCAgICpmcDsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMTVBfTEFQX01BR0lDLCByZXR1cm47KTsKQEAgLTExNyw3ICsxMTcsNyBAQAogCWlmICgoZnBbMF0gJiBDT05UUk9MX0JJVCkgJiYgKGZwWzJdID09IENPTk5FQ1RfQ01EKSkgewogCQlJUkRBX0RFQlVHKDMsICIlcygpLCBpbmNvbWluZyBjb25uZWN0aW9uLCAiCiAJCQkgICAic291cmNlIExTQVA9JWQsIGRlc3QgTFNBUD0lZFxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgc2xzYXBfc2VsLCBkbHNhcF9zZWwpOworCQkJICAgX19mdW5jX18sIHNsc2FwX3NlbCwgZGxzYXBfc2VsKTsKIAogCQkvKiBUcnkgdG8gZmluZCBMU0FQIGFtb25nIHRoZSB1bmNvbm5lY3RlZCBMU0FQcyAqLwogCQlsc2FwID0gaXJsbXBfZmluZF9sc2FwKHNlbGYsIGRsc2FwX3NlbCwgc2xzYXBfc2VsLCBDT05ORUNUX0NNRCwKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAJCS8qIE1heWJlIExTQVAgd2FzIGFscmVhZHkgY29ubmVjdGVkLCBzbyB0cnkgb25lIG1vcmUgdGltZSAqLwogCQlpZiAoIWxzYXApIHsKLQkJCUlSREFfREVCVUcoMSwgIiVzKCksIGluY29taW5nIGNvbm5lY3Rpb24gZm9yIExTQVAgYWxyZWFkeSBjb25uZWN0ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDEsICIlcygpLCBpbmNvbWluZyBjb25uZWN0aW9uIGZvciBMU0FQIGFscmVhZHkgY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlsc2FwID0gaXJsbXBfZmluZF9sc2FwKHNlbGYsIGRsc2FwX3NlbCwgc2xzYXBfc2VsLCAwLAogCQkJCQkgICAgICAgc2VsZi0+bHNhcHMpOwogCQl9CkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogCWlmIChsc2FwID09IE5VTEwpIHsKIAkJSVJEQV9ERUJVRygyLCAiSXJMTVAsIFNvcnJ5LCBubyBMU0FQIGZvciByZWNlaXZlZCBmcmFtZSFcbiIpOwogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBzbHNhcF9zZWwgPSAlMDJ4LCBkbHNhcF9zZWwgPSAlMDJ4XG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBzbHNhcF9zZWwsIGRsc2FwX3NlbCk7CisJCQkgICBfX2Z1bmNfXywgc2xzYXBfc2VsLCBkbHNhcF9zZWwpOwogCQlpZiAoZnBbMF0gJiBDT05UUk9MX0JJVCkgewogCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgcmVjZWl2ZWQgY29udHJvbCBmcmFtZSAlMDJ4XG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXywgZnBbMl0pOworCQkJCSAgIF9fZnVuY19fLCBmcFsyXSk7CiAJCX0gZWxzZSB7Ci0JCQlJUkRBX0RFQlVHKDIsICIlcygpLCByZWNlaXZlZCBkYXRhIGZyYW1lXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgcmVjZWl2ZWQgZGF0YSBmcmFtZVxuIiwgX19mdW5jX18pOwogCQl9CiAJCXJldHVybjsKIAl9CkBAIC0xNjAsNyArMTYwLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIERJU0NPTk5FQ1Q6CiAJCQlJUkRBX0RFQlVHKDQsICIlcygpLCBEaXNjb25uZWN0IGluZGljYXRpb24hXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCQkJaXJsbXBfZG9fbHNhcF9ldmVudChsc2FwLCBMTV9ESVNDT05ORUNUX0lORElDQVRJT04sCiAJCQkJCSAgICBza2IpOwogCQkJYnJlYWs7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgVW5rbm93biBjb250cm9sIGZyYW1lICUwMnhcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fLCBmcFsyXSk7CisJCQkJICAgX19mdW5jX18sIGZwWzJdKTsKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIGlmICh1bnJlbGlhYmxlKSB7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAlfX3U4ICAgKmZwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTE1QX0xBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC0yMjQsMTMgKzIyNCwxMyBAQAogCiAJaWYgKHBpZCAmIDB4ODApIHsKIAkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZXh0ZW5zaW9uIGluIFBJRCBub3Qgc3VwcCFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCiAJLyogQ2hlY2sgaWYgZnJhbWUgaXMgYWRkcmVzc2VkIHRvIHRoZSBjb25uZWN0aW9ubGVzcyBMU0FQICovCiAJaWYgKChzbHNhcF9zZWwgIT0gTFNBUF9DT05OTEVTUykgfHwgKGRsc2FwX3NlbCAhPSBMU0FQX0NPTk5MRVNTKSkgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBkcm9wcGluZyBmcmFtZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGRyb3BwaW5nIGZyYW1lIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlpZiAobHNhcCkKIAkJaXJsbXBfY29ubmxlc3NfZGF0YV9pbmRpY2F0aW9uKGxzYXAsIHNrYik7CiAJZWxzZSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIGZvdW5kIG5vIG1hdGNoaW5nIExTQVAhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBmb3VuZCBubyBtYXRjaGluZyBMU0FQIVxuIiwgX19mdW5jX18pOwogCX0KIH0KICNlbmRpZiAvKiBDT05GSUdfSVJEQV9VTFRSQSAqLwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCQkJICAgICAgTEFQX1JFQVNPTiByZWFzb24sCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKGxhcCAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChsYXAtPm1hZ2ljID09IExNUF9MQVBfTUFHSUMsIHJldHVybjspOwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCQkJICAgX191MzIgZGFkZHIsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBDb3B5IFFvUyBzZXR0aW5ncyBmb3IgdGhpcyBzZXNzaW9uICovCiAJc2VsZi0+cW9zID0gcW9zOwpAQCAtMzE3LDcgKzMxNyw3IEBACiB2b2lkIGlybG1wX2xpbmtfY29ubmVjdF9jb25maXJtKHN0cnVjdCBsYXBfY2IgKnNlbGYsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAogCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExNUF9MQVBfTUFHSUMsIHJldHVybjspOwpAQCAtMzgzLDcgKzM4Myw3IEBACiAgKi8KIHZvaWQgaXJsbXBfbGlua19kaXNjb3ZlcnlfY29uZmlybShzdHJ1Y3QgbGFwX2NiICpzZWxmLCBoYXNoYmluX3QgKmxvZykKIHsKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTE1QX0xBUF9NQUdJQywgcmV0dXJuOyk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm1vZC5jIGIvbmV0L2lyZGEvaXJtb2QuYwppbmRleCAwMTU1NGI5Li40YzQ4N2E4IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm1vZC5jCisrKyBiL25ldC9pcmRhL2lybW9kLmMKQEAgLTkwLDcgKzkwLDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogTG93ZXIgbGF5ZXIgb2YgdGhlIHN0YWNrICovCiAJaXJsbXBfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXQuaCBiL25ldC9pcmRhL2lybmV0L2lybmV0LmgKaW5kZXggYmMyZTE1Yy4uYjAwMWMzNiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXQvaXJuZXQuaAorKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oCkBAIC0zMzcsMjcgKzMzNywyNyBAQAogLyogQWxsIGVycm9yIG1lc3NhZ2VzICh3aWxsIHNob3cgdXAgaW4gdGhlIG5vcm1hbCBsb2dzKSAqLwogI2RlZmluZSBERVJST1IoZGJnLCBmb3JtYXQsIGFyZ3MuLi4pIFwKIAl7aWYoREVCVUdfIyNkYmcpIFwKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaXJuZXQ6ICVzKCk6ICIgZm9ybWF0LCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpO30KKwkJcHJpbnRrKEtFUk5fSU5GTyAiaXJuZXQ6ICVzKCk6ICIgZm9ybWF0LCBfX2Z1bmNfXyAsICMjYXJncyk7fQogCiAvKiBOb3JtYWwgZGVidWcgbWVzc2FnZSAod2lsbCBzaG93IHVwIGluIC92YXIvbG9nL2RlYnVnKSAqLwogI2RlZmluZSBERUJVRyhkYmcsIGZvcm1hdCwgYXJncy4uLikgXAogCXtpZihERUJVR18jI2RiZykgXAotCQlwcmludGsoS0VSTl9ERUJVRyAiaXJuZXQ6ICVzKCk6ICIgZm9ybWF0LCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpO30KKwkJcHJpbnRrKEtFUk5fREVCVUcgImlybmV0OiAlcygpOiAiIGZvcm1hdCwgX19mdW5jX18gLCAjI2FyZ3MpO30KIAogLyogRW50ZXJpbmcgYSBmdW5jdGlvbiAodHJhY2UpICovCiAjZGVmaW5lIERFTlRFUihkYmcsIGZvcm1hdCwgYXJncy4uLikgXAogCXtpZihERUJVR18jI2RiZykgXAotCQlwcmludGsoS0VSTl9ERUJVRyAiaXJuZXQ6IC0+ICVzIiBmb3JtYXQsIF9fRlVOQ1RJT05fXyAsICMjYXJncyk7fQorCQlwcmludGsoS0VSTl9ERUJVRyAiaXJuZXQ6IC0+ICVzIiBmb3JtYXQsIF9fZnVuY19fICwgIyNhcmdzKTt9CiAKIC8qIEVudGVyaW5nIGFuZCBleGl0aW5nIGEgZnVuY3Rpb24gaW4gb25lIGdvICh0cmFjZSkgKi8KICNkZWZpbmUgRFBBU1MoZGJnLCBmb3JtYXQsIGFyZ3MuLi4pIFwKIAl7aWYoREVCVUdfIyNkYmcpIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgImlybmV0OiA8PiVzIiBmb3JtYXQsIF9fRlVOQ1RJT05fXyAsICMjYXJncyk7fQorCQlwcmludGsoS0VSTl9ERUJVRyAiaXJuZXQ6IDw+JXMiIGZvcm1hdCwgX19mdW5jX18gLCAjI2FyZ3MpO30KIAogLyogRXhpdGluZyBhIGZ1bmN0aW9uICh0cmFjZSkgKi8KICNkZWZpbmUgREVYSVQoZGJnLCBmb3JtYXQsIGFyZ3MuLi4pIFwKIAl7aWYoREVCVUdfIyNkYmcpIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgImlybmV0OiA8LSVzKCkiIGZvcm1hdCwgX19GVU5DVElPTl9fICwgIyNhcmdzKTt9CisJCXByaW50ayhLRVJOX0RFQlVHICJpcm5ldDogPC0lcygpIiBmb3JtYXQsIF9fZnVuY19fICwgIyNhcmdzKTt9CiAKIC8qIEV4aXQgYSBmdW5jdGlvbiB3aXRoIGRlYnVnICovCiAjZGVmaW5lIERSRVRVUk4ocmV0LCBkYmcsIGFyZ3MuLi4pIFwKQEAgLTQwNSw3ICs0MDUsNyBAQAogICAvKiAicHBwZCIgaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB1cyBvbiBhIC9kZXYvIGZpbGUgKi8KICAgc3RydWN0IGZpbGUgKgkJZmlsZTsJCS8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGlzIGluc3RhbmNlICovCiAgIC8qIFRUWSBzdHVmZiAtIHRvIGtlZXAgInBwcGQiIGhhcHB5ICovCi0gIHN0cnVjdCB0ZXJtaW9zCXRlcm1pb3M7CS8qIFZhcmlvdXMgdHR5IGZsYWdzICovCisgIHN0cnVjdCBrdGVybWlvcwl0ZXJtaW9zOwkvKiBWYXJpb3VzIHR0eSBmbGFncyAqLwogICAvKiBTdHVmZiBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbCAqLwogICBpbnQJCQlldmVudF9pbmRleDsJLyogTGFzdCByZWFkIGluIHRoZSBldmVudCBsb2cgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXRsaW5rLmMgYi9uZXQvaXJkYS9pcm5ldGxpbmsuYwppbmRleCBjZDlmZjE3Li45ZTFmYjgyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldGxpbmsuYworKysgYi9uZXQvaXJkYS9pcm5ldGxpbmsuYwpAQCAtNDAsNyArNDAsNyBAQAogCiAJaWZuYW1lID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbSVJEQV9OTF9BVFRSX0lGTkFNRV0pOwogCi0JSVJEQV9ERUJVRyg1LCAiJXMoKTogTG9va2luZyBmb3IgJXNcbiIsIF9fRlVOQ1RJT05fXywgaWZuYW1lKTsKKwlJUkRBX0RFQlVHKDUsICIlcygpOiBMb29raW5nIGZvciAlc1xuIiwgX19mdW5jX18sIGlmbmFtZSk7CiAKIAlyZXR1cm4gZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZuYW1lKTsKIH0KQEAgLTU2LDcgKzU2LDcgQEAKIAogCW1vZGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tJUkRBX05MX0FUVFJfTU9ERV0pOwogCi0JSVJEQV9ERUJVRyg1LCAiJXMoKTogU3dpdGNoaW5nIHRvIG1vZGU6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIG1vZGUpOworCUlSREFfREVCVUcoNSwgIiVzKCk6IFN3aXRjaGluZyB0byBtb2RlOiAlZFxuIiwgX19mdW5jX18sIG1vZGUpOwogCiAJZGV2ID0gaWZuYW1lX3RvX25ldGRldigmaW5pdF9uZXQsIGluZm8pOwogCWlmICghZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJwcm9jLmMgYi9uZXQvaXJkYS9pcnByb2MuYwppbmRleCBjYWUyNGZiLi44OGU4MGEzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnByb2MuYworKysgYi9uZXQvaXJkYS9pcnByb2MuYwpAQCAtNzIsMTEgKzcyLDkgQEAKIAkJcmV0dXJuOwogCXByb2NfaXJkYS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoaXJkYV9kaXJzKTsgaSsrKSB7Ci0JCWQgPSBjcmVhdGVfcHJvY19lbnRyeShpcmRhX2RpcnNbaV0ubmFtZSwgMCwgcHJvY19pcmRhKTsKLQkJaWYgKGQpCi0JCQlkLT5wcm9jX2ZvcHMgPSBpcmRhX2RpcnNbaV0uZm9wczsKLQl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJkYV9kaXJzKTsgaSsrKQorCQlkID0gcHJvY19jcmVhdGUoaXJkYV9kaXJzW2ldLm5hbWUsIDAsIHByb2NfaXJkYSwKKwkJCQlpcmRhX2RpcnNbaV0uZm9wcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnF1ZXVlLmMgYi9uZXQvaXJkYS9pcnF1ZXVlLmMKaW5kZXggNDBjMjhlZi4uYmEwMTkzOCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJxdWV1ZS5jCisrKyBiL25ldC9pcmRhL2lycXVldWUuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiBzdGF0aWMgdm9pZCBlbnF1ZXVlX2ZpcnN0KGlyZGFfcXVldWVfdCAqKnF1ZXVlLCBpcmRhX3F1ZXVlX3QqIGVsZW1lbnQpCiB7CiAKLQlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyoKIAkgKiBDaGVjayBpZiBxdWV1ZSBpcyBlbXB0eS4KQEAgLTQ1MSw3ICs0NTEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCBiaW47CiAKLQlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoIGhhc2hiaW4gIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoIGhhc2hiaW4tPm1hZ2ljID09IEhCX01BR0lDLCByZXR1cm47KTsKQEAgLTU2NCw3ICs1NjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWlyZGFfcXVldWVfdCogZW50cnk7CiAKLQlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoIGhhc2hiaW4gIT0gTlVMTCwgcmV0dXJuIE5VTEw7KTsKIAlJUkRBX0FTU0VSVCggaGFzaGJpbi0+bWFnaWMgPT0gSEJfTUFHSUMsIHJldHVybiBOVUxMOyk7CkBAIC02NTcsNyArNjU3LDcgQEAKIAlpbnQJYmluOwogCWxvbmcJaGFzaHY7CiAKLQlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKCA0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoIGhhc2hiaW4gIT0gTlVMTCwgcmV0dXJuIE5VTEw7KTsKIAlJUkRBX0FTU0VSVCggaGFzaGJpbi0+bWFnaWMgPT0gSEJfTUFHSUMsIHJldHVybiBOVUxMOyk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnR0cC5jIGIvbmV0L2lyZGEvaXJ0dHAuYwppbmRleCA5N2RiMTU4Li43NGU0MzllIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnR0cC5jCisrKyBiL25ldC9pcmRhL2lydHRwLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAlpcnR0cC0+dHNhcHMgPSBoYXNoYmluX25ldyhIQl9MT0NLKTsKIAlpZiAoIWlydHRwLT50c2FwcykgewogCQlJUkRBX0VSUk9SKCIlczogY2FuJ3QgYWxsb2NhdGUgSXJUVFAgaGFzaGJpbiFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlrZnJlZShpcnR0cCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE2NCw3ICsxNjQsNyBAQAogCWlmICghc2VsZiB8fCBzZWxmLT5tYWdpYyAhPSBUVFBfVFNBUF9NQUdJQykKIAkJcmV0dXJuOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoaW5zdGFuY2U9JXApXG4iLCBfX0ZVTkNUSU9OX18sIHNlbGYpOworCUlSREFfREVCVUcoNCwgIiVzKGluc3RhbmNlPSVwKVxuIiwgX19mdW5jX18sIHNlbGYpOwogCiAJLyogVHJ5IHRvIG1ha2Ugc29tZSBwcm9ncmVzcywgZXNwZWNpYWxseSBvbiBUeCBzaWRlIC0gSmVhbiBJSSAqLwogCWlydHRwX3J1bl9yeF9xdWV1ZShzZWxmKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogewogCXN0cnVjdCBza19idWZmKiBza2I7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gVFRQX1RTQVBfTUFHSUMsIHJldHVybjspOwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gTlVMTDspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IFRUUF9UU0FQX01BR0lDLCByZXR1cm4gTlVMTDspOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgc2VsZi0+cnhfc2R1X3NpemU9JWRcbiIsIF9fRlVOQ1RJT05fXywKKwlJUkRBX0RFQlVHKDIsICIlcygpLCBzZWxmLT5yeF9zZHVfc2l6ZT0lZFxuIiwgX19mdW5jX18sCiAJCSAgIHNlbGYtPnJ4X3NkdV9zaXplKTsKIAogCXNrYiA9IGRldl9hbGxvY19za2IoVFRQX0hFQURFUiArIHNlbGYtPnJ4X3NkdV9zaXplKTsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiAJSVJEQV9ERUJVRygyLAogCQkgICAiJXMoKSwgZnJhbWUgbGVuPSVkLCByeF9zZHVfc2l6ZT0lZCwgcnhfbWF4X3NkdV9zaXplPSVkXG4iLAotCQkgICBfX0ZVTkNUSU9OX18sIG4sIHNlbGYtPnJ4X3NkdV9zaXplLCBzZWxmLT5yeF9tYXhfc2R1X3NpemUpOworCQkgICBfX2Z1bmNfXywgbiwgc2VsZi0+cnhfc2R1X3NpemUsIHNlbGYtPnJ4X21heF9zZHVfc2l6ZSk7CiAJLyogTm90ZSA6IGlydHRwX3J1bl9yeF9xdWV1ZSgpIGNhbGN1bGF0ZSBzZWxmLT5yeF9zZHVfc2l6ZQogCSAqIGJ5IHN1bW1pbmcgdGhlIHNpemUgb2YgYWxsIGZyYWdtZW50cywgc28gd2Ugc2hvdWxkIGFsd2F5cwogCSAqIGhhdmUgbiA9PSBzZWxmLT5yeF9zZHVfc2l6ZSwgZXhjZXB0IGluIGNhc2VzIHdoZXJlIHdlCkBAIC0yOTMsNyArMjkzLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZzsKIAlfX3U4ICpmcmFtZTsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBUVFBfVFNBUF9NQUdJQywgcmV0dXJuOyk7CkBAIC0zMDMsNyArMzAzLDcgQEAKIAkgKiAgU3BsaXQgZnJhbWUgaW50byBhIG51bWJlciBvZiBzZWdtZW50cwogCSAqLwogCXdoaWxlIChza2ItPmxlbiA+IHNlbGYtPm1heF9zZWdfc2l6ZSkgewotCQlJUkRBX0RFQlVHKDIsICIlcygpLCBmcmFnbWVudGluZyAuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIGZyYWdtZW50aW5nIC4uLlxuIiwgX19mdW5jX18pOwogCiAJCS8qIE1ha2UgbmV3IHNlZ21lbnQgKi8KIAkJZnJhZyA9IGFsbG9jX3NrYihzZWxmLT5tYXhfc2VnX3NpemUrc2VsZi0+bWF4X2hlYWRlcl9zaXplLApAQCAtMzI4LDcgKzMyOCw3IEBACiAJCXNrYl9xdWV1ZV90YWlsKCZzZWxmLT50eF9xdWV1ZSwgZnJhZyk7CiAJfQogCS8qIFF1ZXVlIHdoYXQgaXMgbGVmdCBvZiB0aGUgb3JpZ2luYWwgc2tiICovCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgcXVldWluZyBsYXN0IHNlZ21lbnRcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKSwgcXVldWluZyBsYXN0IHNlZ21lbnRcbiIsIF9fZnVuY19fKTsKIAogCWZyYW1lID0gc2tiX3B1c2goc2tiLCBUVFBfSEVBREVSKTsKIAlmcmFtZVswXSA9IDB4MDA7IC8qIENsZWFyIG1vcmUgYml0ICovCkBAIC0zNTksNyArMzU5LDcgQEAKIAllbHNlCiAJCXNlbGYtPnR4X21heF9zZHVfc2l6ZSA9IHBhcmFtLT5wdi5pOwogCi0JSVJEQV9ERUJVRygxLCAiJXMoKSwgTWF4U2R1U2l6ZT0lZFxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+cHYuaSk7CisJSVJEQV9ERUJVRygxLCAiJXMoKSwgTWF4U2R1U2l6ZT0lZFxuIiwgX19mdW5jX18sIHBhcmFtLT5wdi5pKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDAwLDEzICs0MDAsMTMgQEAKIAkgKiBKZWFuSUkgKi8KIAlpZigoc3RzYXBfc2VsICE9IExTQVBfQU5ZKSAmJgogCSAgICgoc3RzYXBfc2VsIDwgMHgwMSkgfHwgKHN0c2FwX3NlbCA+PSAweDcwKSkpIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgaW52YWxpZCB0c2FwIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgaW52YWxpZCB0c2FwIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlzZWxmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRzYXBfY2IpLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2VsZiA9PSBOVUxMKSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIHVuYWJsZSB0byBrbWFsbG9jIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5hYmxlIHRvIGttYWxsb2MhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNDM4LDcgKzQzOCw3IEBACiAJICovCiAJbHNhcCA9IGlybG1wX29wZW5fbHNhcChzdHNhcF9zZWwsICZ0dHBfbm90aWZ5LCAwKTsKIAlpZiAobHNhcCA9PSBOVUxMKSB7Ci0JCUlSREFfV0FSTklORygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBMU0FQISFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfV0FSTklORygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBMU0FQISFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00NDgsNyArNDQ4LDcgQEAKIAkgKiAgdGhlIHN0c2FwX3NlbCB3ZSBoYXZlIG1pZ2h0IG5vdCBiZSB2YWxpZCBhbnltb3JlCiAJICovCiAJc2VsZi0+c3RzYXBfc2VsID0gbHNhcC0+c2xzYXBfc2VsOwotCUlSREFfREVCVUcoNCwgIiVzKCksIHN0c2FwX3NlbD0lMDJ4XG4iLCBfX0ZVTkNUSU9OX18sIHNlbGYtPnN0c2FwX3NlbCk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgc3RzYXBfc2VsPSUwMnhcbiIsIF9fZnVuY19fLCBzZWxmLT5zdHNhcF9zZWwpOwogCiAJc2VsZi0+bm90aWZ5ID0gKm5vdGlmeTsKIAlzZWxmLT5sc2FwID0gbHNhcDsKQEAgLTUwNiw3ICs1MDYsNyBAQAogewogCXN0cnVjdCB0c2FwX2NiICp0c2FwOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IFRUUF9UU0FQX01BR0lDLCByZXR1cm4gLTE7KTsKQEAgLTUxNiw3ICs1MTYsNyBAQAogCQkvKiBDaGVjayBpZiBkaXNjb25uZWN0IGlzIG5vdCBwZW5kaW5nICovCiAJCWlmICghdGVzdF9iaXQoMCwgJnNlbGYtPmRpc2Nvbm5lY3RfcGVuZCkpIHsKIAkJCUlSREFfV0FSTklORygiJXM6IFRTQVAgc3RpbGwgY29ubmVjdGVkIVxuIiwKLQkJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICBfX2Z1bmNfXyk7CiAJCQlpcnR0cF9kaXNjb25uZWN0X3JlcXVlc3Qoc2VsZiwgTlVMTCwgUF9OT1JNQUwpOwogCQl9CiAJCXNlbGYtPmNsb3NlX3BlbmQgPSBUUlVFOwpAQCAtNTUzLDE4ICs1NTMsMTggQEAKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBUVFBfVFNBUF9NQUdJQywgcmV0dXJuIC0xOyk7CiAJSVJEQV9BU1NFUlQoc2tiICE9IE5VTEwsIHJldHVybiAtMTspOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBDaGVjayB0aGF0IG5vdGhpbmcgYmFkIGhhcHBlbnMgKi8KIAlpZiAoKHNrYi0+bGVuID09IDApIHx8ICghc2VsZi0+Y29ubmVjdGVkKSkgewogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBObyBkYXRhLCBvciBub3QgY29ubmVjdGVkXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJZ290byBlcnI7CiAJfQogCiAJaWYgKHNrYi0+bGVuID4gc2VsZi0+bWF4X3NlZ19zaXplKSB7CiAJCUlSREFfREVCVUcoMSwgIiVzKCksIFVEYXRhIGlzIHRvbyBsYXJnZSBmb3IgSXJMQVAhXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC01OTUsMTIgKzU5NSwxMiBAQAogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IFRUUF9UU0FQX01BR0lDLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuIC0xOyk7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpIDogcXVldWUgbGVuID0gJWRcbiIsIF9fRlVOQ1RJT05fXywKKwlJUkRBX0RFQlVHKDIsICIlcygpIDogcXVldWUgbGVuID0gJWRcbiIsIF9fZnVuY19fLAogCQkgICBza2JfcXVldWVfbGVuKCZzZWxmLT50eF9xdWV1ZSkpOwogCiAJLyogQ2hlY2sgdGhhdCBub3RoaW5nIGJhZCBoYXBwZW5zICovCiAJaWYgKChza2ItPmxlbiA9PSAwKSB8fCAoIXNlbGYtPmNvbm5lY3RlZCkpIHsKLQkJSVJEQV9XQVJOSU5HKCIlczogTm8gZGF0YSwgb3Igbm90IGNvbm5lY3RlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9XQVJOSU5HKCIlczogTm8gZGF0YSwgb3Igbm90IGNvbm5lY3RlZFxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PVENPTk47CiAJCWdvdG8gZXJyOwogCX0KQEAgLTYxMSw3ICs2MTEsNyBAQAogCSAqLwogCWlmICgoc2VsZi0+dHhfbWF4X3NkdV9zaXplID09IDApICYmIChza2ItPmxlbiA+IHNlbGYtPm1heF9zZWdfc2l6ZSkpIHsKIAkJSVJEQV9FUlJPUigiJXM6IFNBUiBkaXNhYmxlZCwgYW5kIGRhdGEgaXMgdG9vIGxhcmdlIGZvciBJckxBUCFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlyZXQgPSAtRU1TR1NJWkU7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTYyNSw3ICs2MjUsNyBAQAogCSAgICAoc2tiLT5sZW4gPiBzZWxmLT50eF9tYXhfc2R1X3NpemUpKQogCXsKIAkJSVJEQV9FUlJPUigiJXM6IFNBUiBlbmFibGVkLCBidXQgZGF0YSBpcyBsYXJnZXIgdGhhbiBUeE1heFNkdVNpemUhXG4iLAotCQkJICAgX19GVU5DVElPTl9fKTsKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVNU0dTSVpFOwogCQlnb3RvIGVycjsKIAl9CkBAIC03MDQsNyArNzA0LDcgQEAKIAlpbnQgbjsKIAogCUlSREFfREVCVUcoMiwgIiVzKCkgOiBzZW5kX2NyZWRpdCA9ICVkLCBxdWV1ZV9sZW4gPSAlZFxuIiwKLQkJICAgX19GVU5DVElPTl9fLAorCQkgICBfX2Z1bmNfXywKIAkJICAgc2VsZi0+c2VuZF9jcmVkaXQsIHNrYl9xdWV1ZV9sZW4oJnNlbGYtPnR4X3F1ZXVlKSk7CiAKIAkvKiBHZXQgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgdHggcXVldWUsIG90aGVyd2lzZSBkb24ndCB0b3VjaCBpdCAqLwpAQCAtODEzLDcgKzgxMyw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gVFRQX1RTQVBfTUFHSUMsIHJldHVybjspOwogCiAJSVJEQV9ERUJVRyg0LCAiJXMoKSBzZW5kPSVkLGF2YWlsPSVkLHJlbW90ZT0lZFxuIiwKLQkJICAgX19GVU5DVElPTl9fLAorCQkgICBfX2Z1bmNfXywKIAkJICAgc2VsZi0+c2VuZF9jcmVkaXQsIHNlbGYtPmF2YWlsX2NyZWRpdCwgc2VsZi0+cmVtb3RlX2NyZWRpdCk7CiAKIAkvKiBHaXZlIGNyZWRpdCB0byBwZWVyICovCkBAIC04NjIsNyArODYyLDcgQEAKIAlzdHJ1Y3QgdHNhcF9jYiAqc2VsZjsKIAlpbnQgZXJyOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlzZWxmID0gKHN0cnVjdCB0c2FwX2NiICopIGluc3RhbmNlOwogCkBAIC05NzksNyArOTc5LDcgQEAKIHsKIAlzdHJ1Y3QgdHNhcF9jYiAqc2VsZjsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc2VsZiA9IChzdHJ1Y3QgdHNhcF9jYiAqKSBpbnN0YW5jZTsKIApAQCAtOTk3LDcgKzk5Nyw3IEBACiAJCXNlbGYtPm5vdGlmeS5zdGF0dXNfaW5kaWNhdGlvbihzZWxmLT5ub3RpZnkuaW5zdGFuY2UsCiAJCQkJCSAgICAgICBsaW5rLCBsb2NrKTsKIAllbHNlCi0JCUlSREFfREVCVUcoMiwgIiVzKCksIG5vIGhhbmRsZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMiwgIiVzKCksIG5vIGhhbmRsZXJcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBUVFBfVFNBUF9NQUdJQywgcmV0dXJuOyk7CiAKLQlJUkRBX0RFQlVHKDQsICIlcyhpbnN0YW5jZT0lcClcbiIsIF9fRlVOQ1RJT05fXywgc2VsZik7CisJSVJEQV9ERUJVRyg0LCAiJXMoaW5zdGFuY2U9JXApXG4iLCBfX2Z1bmNfXywgc2VsZik7CiAKIAkvKiBXZSBhcmUgInBvbGxlZCIgZGlyZWN0bHkgZnJvbSBMQVAsIGFuZCB0aGUgTEFQIHdhbnQgdG8gZmlsbAogCSAqIGl0cyBUeCB3aW5kb3cuIFdlIHdhbnQgdG8gZG8gb3VyIGJlc3QgdG8gc2VuZCBpdCBkYXRhLCBzbyB0aGF0CkBAIC0xMDUzLDE4ICsxMDUzLDE4IEBACiAgKi8KIHZvaWQgaXJ0dHBfZmxvd19yZXF1ZXN0KHN0cnVjdCB0c2FwX2NiICpzZWxmLCBMT0NBTF9GTE9XIGZsb3cpCiB7Ci0JSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IFRUUF9UU0FQX01BR0lDLCByZXR1cm47KTsKIAogCXN3aXRjaCAoZmxvdykgewogCWNhc2UgRkxPV19TVE9QOgotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBmbG93IHN0b3BcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIGZsb3cgc3RvcFxuIiwgX19mdW5jX18pOwogCQlzZWxmLT5yeF9zZHVfYnVzeSA9IFRSVUU7CiAJCWJyZWFrOwogCWNhc2UgRkxPV19TVEFSVDoKLQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZmxvdyBzdGFydFxuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygxLCAiJXMoKSwgZmxvdyBzdGFydFxuIiwgX19mdW5jX18pOwogCQlzZWxmLT5yeF9zZHVfYnVzeSA9IEZBTFNFOwogCiAJCS8qIENsaWVudCBzYXkgaGUgY2FuIGFjY2VwdCBtb3JlIGRhdGEsIHRyeSB0byBmcmVlIG91cgpAQCAtMTA3Myw3ICsxMDczLDcgQEAKIAogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGZsb3cgY29tbWFuZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZmxvdyBjb21tYW5kIVxuIiwgX19mdW5jX18pOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woaXJ0dHBfZmxvd19yZXF1ZXN0KTsKQEAgLTEwOTMsNyArMTA5Myw3IEBACiAJX191OCAqZnJhbWU7CiAJX191OCBuOwogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKSwgbWF4X3NkdV9zaXplPSVkXG4iLCBfX0ZVTkNUSU9OX18sIG1heF9zZHVfc2l6ZSk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgbWF4X3NkdV9zaXplPSVkXG4iLCBfX2Z1bmNfXywgbWF4X3NkdV9zaXplKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC1FQkFEUjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IFRUUF9UU0FQX01BR0lDLCByZXR1cm4gLUVCQURSOyk7CkBAIC0xMTkxLDcgKzExOTEsNyBAQAogCV9fdTggcGxlbjsKIAlfX3U4IG47CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXNlbGYgPSAoc3RydWN0IHRzYXBfY2IgKikgaW5zdGFuY2U7CiAKQEAgLTEyMTUsNyArMTIxNSw3IEBACiAKIAluID0gc2tiLT5kYXRhWzBdICYgMHg3ZjsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIEluaXRpYWwgc2VuZF9jcmVkaXQ9JWRcbiIsIF9fRlVOQ1RJT05fXywgbik7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgSW5pdGlhbCBzZW5kX2NyZWRpdD0lZFxuIiwgX19mdW5jX18sIG4pOwogCiAJc2VsZi0+c2VuZF9jcmVkaXQgPSBuOwogCXNlbGYtPnR4X21heF9zZHVfc2l6ZSA9IDA7CkBAIC0xMjM2LDcgKzEyMzYsNyBAQAogCQkvKiBBbnkgZXJyb3JzIGluIHRoZSBwYXJhbWV0ZXIgbGlzdD8gKi8KIAkJaWYgKHJldCA8IDApIHsKIAkJCUlSREFfV0FSTklORygiJXM6IGVycm9yIGV4dHJhY3RpbmcgcGFyYW1ldGVyc1xuIiwKLQkJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICBfX2Z1bmNfXyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAkJCS8qIERvIG5vdCBhY2NlcHQgdGhpcyBjb25uZWN0aW9uIGF0dGVtcHQgKi8KQEAgLTEyNDYsMTAgKzEyNDYsMTAgQEAKIAkJc2tiX3B1bGwoc2tiLCBJUkRBX01JTihza2ItPmxlbiwgcGxlbisxKSk7CiAJfQogCi0JSVJEQV9ERUJVRyg0LCAiJXMoKSBzZW5kPSVkLGF2YWlsPSVkLHJlbW90ZT0lZFxuIiwgX19GVU5DVElPTl9fLAorCUlSREFfREVCVUcoNCwgIiVzKCkgc2VuZD0lZCxhdmFpbD0lZCxyZW1vdGU9JWRcbiIsIF9fZnVuY19fLAogCSAgICAgIHNlbGYtPnNlbmRfY3JlZGl0LCBzZWxmLT5hdmFpbF9jcmVkaXQsIHNlbGYtPnJlbW90ZV9jcmVkaXQpOwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgTWF4U2R1U2l6ZT0lZFxuIiwgX19GVU5DVElPTl9fLAorCUlSREFfREVCVUcoMiwgIiVzKCksIE1heFNkdVNpemU9JWRcbiIsIF9fZnVuY19fLAogCQkgICBzZWxmLT50eF9tYXhfc2R1X3NpemUpOwogCiAJaWYgKHNlbGYtPm5vdGlmeS5jb25uZWN0X2NvbmZpcm0pIHsKQEAgLTEyODgsNyArMTI4OCw3IEBACiAJc2VsZi0+bWF4X3NlZ19zaXplID0gbWF4X3NlZ19zaXplIC0gVFRQX0hFQURFUjsKIAlzZWxmLT5tYXhfaGVhZGVyX3NpemUgPSBtYXhfaGVhZGVyX3NpemUrVFRQX0hFQURFUjsKIAotCUlSREFfREVCVUcoNCwgIiVzKCksIFRTQVAgc2VsPSUwMnhcbiIsIF9fRlVOQ1RJT05fXywgc2VsZi0+c3RzYXBfc2VsKTsKKwlJUkRBX0RFQlVHKDQsICIlcygpLCBUU0FQIHNlbD0lMDJ4XG4iLCBfX2Z1bmNfXywgc2VsZi0+c3RzYXBfc2VsKTsKIAogCS8qIE5lZWQgdG8gdXBkYXRlIGR0c2FwX3NlbCBpZiBpdHMgZXF1YWwgdG8gTFNBUF9BTlkgKi8KIAlzZWxmLT5kdHNhcF9zZWwgPSBsc2FwLT5kbHNhcF9zZWw7CkBAIC0xMzEzLDcgKzEzMTMsNyBAQAogCQkvKiBBbnkgZXJyb3JzIGluIHRoZSBwYXJhbWV0ZXIgbGlzdD8gKi8KIAkJaWYgKHJldCA8IDApIHsKIAkJCUlSREFfV0FSTklORygiJXM6IGVycm9yIGV4dHJhY3RpbmcgcGFyYW1ldGVyc1xuIiwKLQkJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgICBfX2Z1bmNfXyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAkJCS8qIERvIG5vdCBhY2NlcHQgdGhpcyBjb25uZWN0aW9uIGF0dGVtcHQgKi8KQEAgLTEzNTAsNyArMTM1MCw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBUVFBfVFNBUF9NQUdJQywgcmV0dXJuIC0xOyk7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCBTb3VyY2UgVFNBUCBzZWxlY3Rvcj0lMDJ4XG4iLCBfX0ZVTkNUSU9OX18sCisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgU291cmNlIFRTQVAgc2VsZWN0b3I9JTAyeFxuIiwgX19mdW5jX18sCiAJCSAgIHNlbGYtPnN0c2FwX3NlbCk7CiAKIAkvKiBBbnkgdXNlcmRhdGEgc3VwcGxpZWQ/ICovCkBAIC0xNDMyLDE0ICsxNDMyLDE0IEBACiAJc3RydWN0IHRzYXBfY2IgKm5ldzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVJEQV9ERUJVRygxLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBQcm90ZWN0IG91ciBhY2Nlc3MgdG8gdGhlIG9sZCB0c2FwIGluc3RhbmNlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlydHRwLT50c2Fwcy0+aGJfc3BpbmxvY2ssIGZsYWdzKTsKIAogCS8qIEZpbmQgdGhlIG9sZCBpbnN0YW5jZSAqLwogCWlmICghaGFzaGJpbl9maW5kKGlydHRwLT50c2FwcywgKGxvbmcpIG9yaWcsIE5VTEwpKSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCksIHVuYWJsZSB0byBmaW5kIFRTQVBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIHVuYWJsZSB0byBmaW5kIFRTQVBcbiIsIF9fZnVuY19fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJ0dHAtPnRzYXBzLT5oYl9zcGlubG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xNDQ3LDcgKzE0NDcsNyBAQAogCS8qIEFsbG9jYXRlIGEgbmV3IGluc3RhbmNlICovCiAJbmV3ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRzYXBfY2IpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ldykgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmFibGUgdG8ga21hbGxvY1xuIiwgX19GVU5DVElPTl9fKTsKKwkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdW5hYmxlIHRvIGttYWxsb2NcbiIsIF9fZnVuY19fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJ0dHAtPnRzYXBzLT5oYl9zcGlubG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xNDYwLDcgKzE0NjAsNyBAQAogCS8qIFRyeSB0byBkdXAgdGhlIExTQVAgKG1heSBmYWlsIGlmIHdlIHdlcmUgdG9vIHNsb3cpICovCiAJbmV3LT5sc2FwID0gaXJsbXBfZHVwKG9yaWctPmxzYXAsIG5ldyk7CiAJaWYgKCFuZXctPmxzYXApIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgZHVwIGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMCwgIiVzKCksIGR1cCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CiAJCWtmcmVlKG5ldyk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTE0OTUsNyArMTQ5NSw3IEBACiAKIAkvKiBBbHJlYWR5IGRpc2Nvbm5lY3RlZD8gKi8KIAlpZiAoIXNlbGYtPmNvbm5lY3RlZCkgewotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBhbHJlYWR5IGRpc2Nvbm5lY3RlZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoNCwgIiVzKCksIGFscmVhZHkgZGlzY29ubmVjdGVkIVxuIiwgX19mdW5jX18pOwogCQlpZiAodXNlcmRhdGEpCiAJCQlkZXZfa2ZyZWVfc2tiKHVzZXJkYXRhKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTUwOCw3ICsxNTA4LDcgQEAKIAkgKiBKZWFuIElJICovCiAJaWYodGVzdF9hbmRfc2V0X2JpdCgwLCAmc2VsZi0+ZGlzY29ubmVjdF9wZW5kKSkgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBkaXNjb25uZWN0IGFscmVhZHkgcGVuZGluZ1xuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICBfX2Z1bmNfXyk7CiAJCWlmICh1c2VyZGF0YSkKIAkJCWRldl9rZnJlZV9za2IodXNlcmRhdGEpOwogCkBAIC0xNTI3LDcgKzE1MjcsNyBAQAogCQkJICogIGRpc2Nvbm5lY3RpbmcgcmlnaHQgbm93IHNpbmNlIHRoZSBkYXRhIHdpbGwKIAkJCSAqICBub3QgaGF2ZSBhbnkgdXNhYmxlIGNvbm5lY3Rpb24gdG8gYmUgc2VudCBvbgogCQkJICovCi0JCQlJUkRBX0RFQlVHKDEsICIlcygpOiBIaWdoIHByaW9yaXR5ISEoKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMSwgIiVzKCk6IEhpZ2ggcHJpb3JpdHkhISgpXG4iLCBfX2Z1bmNfXyk7CiAJCQlpcnR0cF9mbHVzaF9xdWV1ZXMoc2VsZik7CiAJCX0gZWxzZSBpZiAocHJpb3JpdHkgPT0gUF9OT1JNQUwpIHsKIAkJCS8qCkBAIC0xNTQ4LDcgKzE1NDgsNyBAQAogCSAqIGJlIHNlbnQgYXQgdGhlIExNUCBsZXZlbCAoc28gZXZlbiBpZiB0aGUgcGVlciBoYXMgaXRzIFR4IHF1ZXVlCiAJICogZnVsbCBvZiBkYXRhKS4gLSBKZWFuIElJICovCiAKLQlJUkRBX0RFQlVHKDEsICIlcygpLCBEaXNjb25uZWN0aW5nIC4uLlxuIiwgX19GVU5DVElPTl9fKTsKKwlJUkRBX0RFQlVHKDEsICIlcygpLCBEaXNjb25uZWN0aW5nIC4uLlxuIiwgX19mdW5jX18pOwogCXNlbGYtPmNvbm5lY3RlZCA9IEZBTFNFOwogCiAJaWYgKCF1c2VyZGF0YSkgewpAQCAtMTU4NCw3ICsxNTg0LDcgQEAKIHsKIAlzdHJ1Y3QgdHNhcF9jYiAqc2VsZjsKIAotCUlSREFfREVCVUcoNCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc2VsZiA9IChzdHJ1Y3QgdHNhcF9jYiAqKSBpbnN0YW5jZTsKIApAQCAtMTY0NCw3ICsxNjQ0LDcgQEAKIAkgKiBnaXZlIGFuIGVycm9yIGJhY2sKIAkgKi8KIAlpZiAoZXJyKSB7Ci0JCUlSREFfREVCVUcoMCwgIiVzKCkgcmVxdWV1ZWluZyBza2IhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX0RFQlVHKDAsICIlcygpIHJlcXVldWVpbmcgc2tiIVxuIiwgX19mdW5jX18pOwogCiAJCS8qIE1ha2Ugc3VyZSB3ZSB0YWtlIGEgYnJlYWsgKi8KIAkJc2VsZi0+cnhfc2R1X2J1c3kgPSBUUlVFOwpAQCAtMTY2OSw3ICsxNjY5LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBtb3JlID0gMDsKIAotCUlSREFfREVCVUcoMiwgIiVzKCkgc2VuZD0lZCxhdmFpbD0lZCxyZW1vdGU9JWRcbiIsIF9fRlVOQ1RJT05fXywKKwlJUkRBX0RFQlVHKDIsICIlcygpIHNlbmQ9JWQsYXZhaWw9JWQscmVtb3RlPSVkXG4iLCBfX2Z1bmNfXywKIAkJICAgc2VsZi0+c2VuZF9jcmVkaXQsIHNlbGYtPmF2YWlsX2NyZWRpdCwgc2VsZi0+cmVtb3RlX2NyZWRpdCk7CiAKIAkvKiBHZXQgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcnggcXVldWUsIG90aGVyd2lzZSBkb24ndCB0b3VjaCBpdCAqLwpAQCAtMTcxMCw3ICsxNzEwLDcgQEAKIAkJCSAqLwogCQkJaWYgKHNlbGYtPnJ4X3NkdV9zaXplIDw9IHNlbGYtPnJ4X21heF9zZHVfc2l6ZSkgewogCQkJCUlSREFfREVCVUcoNCwgIiVzKCksIHF1ZXVlaW5nIGZyYWdcbiIsCi0JCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJCSAgIF9fZnVuY19fKTsKIAkJCQlza2JfcXVldWVfdGFpbCgmc2VsZi0+cnhfZnJhZ21lbnRzLCBza2IpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBGcmVlIHRoZSBwYXJ0IG9mIHRoZSBTRFUgdGhhdCBpcyB0b28gYmlnICovCkBAIC0xNzQwLDcgKzE3NDAsNyBAQAogCQkJLyogTm93IHdlIGNhbiBkZWxpdmVyIHRoZSByZWFzc2VtYmxlZCBza2IgKi8KIAkJCWlydHRwX2RvX2RhdGFfaW5kaWNhdGlvbihzZWxmLCBza2IpOwogCQl9IGVsc2UgewotCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVHJ1bmNhdGVkIGZyYW1lXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgVHJ1bmNhdGVkIGZyYW1lXG4iLCBfX2Z1bmNfXyk7CiAKIAkJCS8qIEZyZWUgdGhlIHBhcnQgb2YgdGhlIFNEVSB0aGF0IGlzIHRvbyBiaWcgKi8KIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL3BhcmFtZXRlcnMuYyBiL25ldC9pcmRhL3BhcmFtZXRlcnMuYwppbmRleCA3MjJiYmUwLi5mYzFhMjA1IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9wYXJhbWV0ZXJzLmMKKysrIGIvbmV0L2lyZGEvcGFyYW1ldGVycy5jCkBAIC0xNDgsMjMgKzE0OCwyMyBAQAogCSAqLwogCWlmIChwLnBsID09IDApIHsKIAkJaWYgKHAucHYuaSA8IDB4ZmYpIHsKLQkJCUlSREFfREVCVUcoMiwgIiVzKCksIHVzaW5nIDEgYnl0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCUlSREFfREVCVUcoMiwgIiVzKCksIHVzaW5nIDEgYnl0ZVxuIiwgX19mdW5jX18pOwogCQkJcC5wbCA9IDE7CiAJCX0gZWxzZSBpZiAocC5wdi5pIDwgMHhmZmZmKSB7Ci0JCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1c2luZyAyIGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgdXNpbmcgMiBieXRlc1xuIiwgX19mdW5jX18pOwogCQkJcC5wbCA9IDI7CiAJCX0gZWxzZSB7Ci0JCQlJUkRBX0RFQlVHKDIsICIlcygpLCB1c2luZyA0IGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgdXNpbmcgNCBieXRlc1xuIiwgX19mdW5jX18pOwogCQkJcC5wbCA9IDQ7IC8qIERlZmF1bHQgbGVuZ3RoICovCiAJCX0KIAl9CiAJLyogQ2hlY2sgaWYgYnVmZmVyIGlzIGxvbmcgZW5vdWdoIGZvciBpbnNlcnRpb24gKi8KIAlpZiAobGVuIDwgKDIrcC5wbCkpIHsKIAkJSVJEQV9XQVJOSU5HKCIlczogYnVmZmVyIHRvbyBzaG9ydCBmb3IgaW5zZXJ0aW9uIVxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCSAgICAgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQotCUlSREFfREVCVUcoMiwgIiVzKCksIHBpPSUjeCwgcGw9JWQsIHBpPSVkXG4iLCBfX0ZVTkNUSU9OX18sCisJSVJEQV9ERUJVRygyLCAiJXMoKSwgcGk9JSN4LCBwbD0lZCwgcGk9JWRcbiIsIF9fZnVuY19fLAogCQkgICBwLnBpLCBwLnBsLCBwLnB2LmkpOwogCXN3aXRjaCAocC5wbCkgewogCWNhc2UgMToKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlJUkRBX1dBUk5JTkcoIiVzOiBsZW5ndGggJWQgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fLCBwLnBsKTsKKwkJCSAgICAgX19mdW5jX18sIHAucGwpOwogCQkvKiBTa2lwIHBhcmFtZXRlciAqLwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjE4LDcgKzIxOCw3IEBACiAJaWYgKGxlbiA8ICgyK3AucGwpKSB7CiAJCUlSREFfV0FSTklORygiJXM6IGJ1ZmZlciB0b28gc2hvcnQgZm9yIHBhcnNpbmchICIKIAkJCSAgICAgIk5lZWQgJWQgYnl0ZXMsIGJ1dCBsZW4gaXMgb25seSAlZFxuIiwKLQkJCSAgICAgX19GVU5DVElPTl9fLCBwLnBsLCBsZW4pOworCQkJICAgICBfX2Z1bmNfXywgcC5wbCwgbGVuKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjMwLDcgKzIzMCw3IEBACiAJaWYgKCgodHlwZSAmIFBWX01BU0spICE9IFBWX0lOVEVHRVIpICYmICgodHlwZSAmIFBWX01BU0spICE9IHAucGwpKSB7CiAJCUlSREFfRVJST1IoIiVzOiBpbnZhbGlkIHBhcmFtZXRlciBsZW5ndGghICIKIAkJCSAgICJFeHBlY3RlZCAlZCBieXRlcywgYnV0IHZhbHVlIGhhZCAlZCBieXRlcyFcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIHR5cGUgJiBQVl9NQVNLLCBwLnBsKTsKKwkJCSAgIF9fZnVuY19fLCB0eXBlICYgUFZfTUFTSywgcC5wbCk7CiAKIAkJLyogTW9zdCBwYXJhbWV0ZXJzIGFyZSBiaXQvYnl0ZSBmaWVsZHMgb3IgbGl0dGxlIGVuZGlhbiwKIAkJICogc28gaXQncyBvayB0byBvbmx5IGV4dHJhY3QgYSBzdWJzZXQgb2YgaXQgKHRoZSBzdWJzZXQKQEAgLTI2OCwxMyArMjY4LDEzIEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUlSREFfV0FSTklORygiJXM6IGxlbmd0aCAlZCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18sIHAucGwpOworCQkJICAgICBfX2Z1bmNfXywgcC5wbCk7CiAKIAkJLyogU2tpcCBwYXJhbWV0ZXIgKi8KIAkJcmV0dXJuIHAucGwrMjsKIAl9CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpLCBwaT0lI3gsIHBsPSVkLCBwaT0lZFxuIiwgX19GVU5DVElPTl9fLAorCUlSREFfREVCVUcoMiwgIiVzKCksIHBpPSUjeCwgcGw9JWQsIHBpPSVkXG4iLCBfX2Z1bmNfXywKIAkJICAgcC5waSwgcC5wbCwgcC5wdi5pKTsKIAkvKiBDYWxsIGhhbmRsZXIgZm9yIHRoaXMgcGFyYW1ldGVyICovCiAJZXJyID0gKCpmdW5jKShzZWxmLCAmcCwgUFZfUFVUKTsKQEAgLTI5NCwxOSArMjk0LDE5IEBACiAJaXJkYV9wYXJhbV90IHA7CiAJaW50IGVycjsKIAotCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJcC5waSA9IHBpOyAgICAgLyogSW4gY2FzZSBoYW5kbGVyIG5lZWRzIHRvIGtub3cgKi8KIAlwLnBsID0gYnVmWzFdOyAvKiBFeHRyYWN0IGxlbmd0aCBvZiB2YWx1ZSAqLwogCi0JSVJEQV9ERUJVRygyLCAiJXMoKSwgcGk9JSN4LCBwbD0lZFxuIiwgX19GVU5DVElPTl9fLAorCUlSREFfREVCVUcoMiwgIiVzKCksIHBpPSUjeCwgcGw9JWRcbiIsIF9fZnVuY19fLAogCQkgICBwLnBpLCBwLnBsKTsKIAogCS8qIENoZWNrIGlmIGJ1ZmZlciBpcyBsb25nIGVub3VnaCBmb3IgcGFyc2luZyAqLwogCWlmIChsZW4gPCAoMitwLnBsKSkgewogCQlJUkRBX1dBUk5JTkcoIiVzOiBidWZmZXIgdG9vIHNob3J0IGZvciBwYXJzaW5nISAiCiAJCQkgICAgICJOZWVkICVkIGJ5dGVzLCBidXQgbGVuIGlzIG9ubHkgJWRcbiIsCi0JCQkgICAgIF9fRlVOQ1RJT05fXywgcC5wbCwgbGVuKTsKKwkJCSAgICAgX19mdW5jX18sIHAucGwsIGxlbik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMxNCw3ICszMTQsNyBAQAogCSAqIGNoZWNrZWQgdGhhdCB0aGUgYnVmZmVyIGlzIGxvbmcgZW5vdWdoICovCiAJc3RybmNweShzdHIsIGJ1ZisyLCBwLnBsKTsKIAotCUlSREFfREVCVUcoMiwgIiVzKCksIHN0cj0weCUwMnggMHglMDJ4XG4iLCBfX0ZVTkNUSU9OX18sCisJSVJEQV9ERUJVRygyLCAiJXMoKSwgc3RyPTB4JTAyeCAweCUwMnhcbiIsIF9fZnVuY19fLAogCQkgICAoX191OCkgc3RyWzBdLCAoX191OCkgc3RyWzFdKTsKIAogCS8qIE51bGwgdGVybWluYXRlIHN0cmluZyAqLwpAQCAtMzQ1LDExICszNDUsMTEgQEAKIAlpZiAobGVuIDwgKDIrcC5wbCkpIHsKIAkJSVJEQV9XQVJOSU5HKCIlczogYnVmZmVyIHRvbyBzaG9ydCBmb3IgcGFyc2luZyEgIgogCQkJICAgICAiTmVlZCAlZCBieXRlcywgYnV0IGxlbiBpcyBvbmx5ICVkXG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18sIHAucGwsIGxlbik7CisJCQkgICAgIF9fZnVuY19fLCBwLnBsLCBsZW4pOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JSVJEQV9ERUJVRygwLCAiJXMoKSwgbm90IGltcGxcbiIsIF9fRlVOQ1RJT05fXyk7CisJSVJEQV9ERUJVRygwLCAiJXMoKSwgbm90IGltcGxcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiBwLnBsKzI7IC8qIEV4dHJhY3RlZCBwbCsyIGJ5dGVzICovCiB9CkBAIC00NzMsNyArNDczLDcgQEAKIAkgICAgKHBpX21pbm9yID4gaW5mby0+dGFibGVzW3BpX21ham9yXS5sZW4tMSkpCiAJewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCBubyBoYW5kbGVyIGZvciBwYXJhbWV0ZXI9MHglMDJ4XG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBwaSk7CisJCQkgICBfX2Z1bmNfXywgcGkpOwogCiAJCS8qIFNraXAgdGhpcyBwYXJhbWV0ZXIgKi8KIAkJcmV0dXJuIC0xOwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAKIAkvKiAgQ2hlY2sgaWYgaGFuZGxlciBoYXMgYmVlbiBpbXBsZW1lbnRlZCAqLwogCWlmICghcGlfbWlub3JfaW5mby0+ZnVuYykgewotCQlJUkRBX01FU1NBR0UoIiVzOiBubyBoYW5kbGVyIGZvciBwaT0lI3hcbiIsIF9fRlVOQ1RJT05fXywgcGkpOworCQlJUkRBX01FU1NBR0UoIiVzOiBubyBoYW5kbGVyIGZvciBwaT0lI3hcbiIsIF9fZnVuY19fLCBwaSk7CiAJCS8qIFNraXAgdGhpcyBwYXJhbWV0ZXIgKi8KIAkJcmV0dXJuIC0xOwogCX0KQEAgLTUyNyw3ICs1MjcsNyBAQAogCSAgICAocGlfbWlub3IgPiBpbmZvLT50YWJsZXNbcGlfbWFqb3JdLmxlbi0xKSkKIAl7CiAJCUlSREFfREVCVUcoMCwgIiVzKCksIG5vIGhhbmRsZXIgZm9yIHBhcmFtZXRlcj0weCUwMnhcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIGJ1ZlswXSk7CisJCQkgICBfX2Z1bmNfXywgYnVmWzBdKTsKIAogCQkvKiBTa2lwIHRoaXMgcGFyYW1ldGVyICovCiAJCXJldHVybiAyICsgYnVmW24gKyAxXTsgIC8qIENvbnRpbnVlICovCkBAIC01MzksMTMgKzUzOSwxMyBAQAogCS8qIEZpbmQgZXhwZWN0ZWQgZGF0YSB0eXBlIGZvciB0aGlzIHBhcmFtZXRlciBpZGVudGlmaWVyIChwaSkqLwogCXR5cGUgPSBwaV9taW5vcl9pbmZvLT50eXBlOwogCi0JSVJEQV9ERUJVRygzLCAiJXMoKSwgcGk9WyVkLCVkXSwgdHlwZT0lZFxuIiwgX19GVU5DVElPTl9fLAorCUlSREFfREVCVUcoMywgIiVzKCksIHBpPVslZCwlZF0sIHR5cGU9JWRcbiIsIF9fZnVuY19fLAogCQkgICBwaV9tYWpvciwgcGlfbWlub3IsIHR5cGUpOwogCiAJLyogIENoZWNrIGlmIGhhbmRsZXIgaGFzIGJlZW4gaW1wbGVtZW50ZWQgKi8KIAlpZiAoIXBpX21pbm9yX2luZm8tPmZ1bmMpIHsKIAkJSVJEQV9NRVNTQUdFKCIlczogbm8gaGFuZGxlciBmb3IgcGk9JSN4XG4iLAotCQkJICAgICBfX0ZVTkNUSU9OX18sIGJ1ZltuXSk7CisJCQkgICAgIF9fZnVuY19fLCBidWZbbl0pOwogCQkvKiBTa2lwIHRoaXMgcGFyYW1ldGVyICovCiAJCXJldHVybiAyICsgYnVmW24gKyAxXTsgLyogQ29udGludWUgKi8KIAl9CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9xb3MuYyBiL25ldC9pcmRhL3Fvcy5jCmluZGV4IGFlYjE4Y2YuLjJiMDA5NzQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL3Fvcy5jCisrKyBiL25ldC9pcmRhL3Fvcy5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkgKiBpdCdzIHZlcnkgbGlrZWx5IHRoZSBwZWVyLiAtIEplYW4gSUkgKi8KIAlpZiAod29yZCA9PSAwKSB7CiAJCUlSREFfV0FSTklORygiJXMoKSwgRGV0ZWN0ZWQgYnVnZ3kgcGVlciwgYWRqdXN0IG51bGwgUFYgdG8gMHgxIVxuIiwKLQkJCSBfX0ZVTkNUSU9OX18pOworCQkJIF9fZnVuY19fKTsKIAkJLyogVGhlIG9ubHkgc2FmZSBjaG9pY2UgKHdlIGRvbid0IGtub3cgdGhlIGFycmF5IHNpemUpICovCiAJCXdvcmQgPSAweDE7CiAJfQpAQCAtMzQyLDcgKzM0Miw3IEBACiAJX191MzIgbGluZV9jYXBhY2l0eTsKIAlpbnQgaW5kZXg7CiAKLQlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBtaW50dCBpcyBzZW5zaWJsZS4KQEAgLTM1Miw3ICszNTIsNyBAQAogCQlpbnQgaTsKIAogCQlJUkRBX1dBUk5JTkcoIiVzKCksIERldGVjdGVkIGJ1Z2d5IHBlZXIsIGFkanVzdCBtdHQgdG8gJWR1cyFcbiIsCi0JCQkgX19GVU5DVElPTl9fLCBzeXNjdGxfbWluX3R4X3R1cm5fdGltZSk7CisJCQkgX19mdW5jX18sIHN5c2N0bF9taW5fdHhfdHVybl90aW1lKTsKIAogCQkvKiBXZSBkb24ndCByZWFsbHkgbmVlZCBiaXRzLCBidXQgZWFzaWVyIHRoaXMgd2F5ICovCiAJCWkgPSB2YWx1ZV9oaWdoZXN0X2JpdChzeXNjdGxfbWluX3R4X3R1cm5fdGltZSwgbWluX3R1cm5fdGltZXMsCkBAIC0zNzAsNyArMzcwLDcgQEAKIAl7CiAJCUlSREFfREVCVUcoMCwKIAkJCSAgICIlcygpLCBhZGp1c3RpbmcgbWF4IHR1cm4gdGltZSBmcm9tICVkIHRvIDUwMCBtc1xuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgcW9zLT5tYXhfdHVybl90aW1lLnZhbHVlKTsKKwkJCSAgIF9fZnVuY19fLCBxb3MtPm1heF90dXJuX3RpbWUudmFsdWUpOwogCQlxb3MtPm1heF90dXJuX3RpbWUudmFsdWUgPSA1MDA7CiAJfQogCkBAIC0zODYsNyArMzg2LDcgQEAKIAl3aGlsZSAoKHFvcy0+ZGF0YV9zaXplLnZhbHVlID4gbGluZV9jYXBhY2l0eSkgJiYgKGluZGV4ID4gMCkpIHsKIAkJcW9zLT5kYXRhX3NpemUudmFsdWUgPSBkYXRhX3NpemVzW2luZGV4LS1dOwogCQlJUkRBX0RFQlVHKDIsICIlcygpLCByZWR1Y2luZyBkYXRhIHNpemUgdG8gJWRcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIHFvcy0+ZGF0YV9zaXplLnZhbHVlKTsKKwkJCSAgIF9fZnVuY19fLCBxb3MtPmRhdGFfc2l6ZS52YWx1ZSk7CiAJfQogI2Vsc2UgLyogVXNlIG1ldGhvZCBkZXNjcmliZWQgaW4gc2VjdGlvbiA2LjYuMTEgb2YgSXJMQVAgKi8KIAl3aGlsZSAoaXJsYXBfcmVxdWVzdGVkX2xpbmVfY2FwYWNpdHkocW9zKSA+IGxpbmVfY2FwYWNpdHkpIHsKQEAgLTM5NiwxNCArMzk2LDE0IEBACiAJCWlmIChxb3MtPndpbmRvd19zaXplLnZhbHVlID4gMSkgewogCQkJcW9zLT53aW5kb3dfc2l6ZS52YWx1ZS0tOwogCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgcmVkdWNpbmcgd2luZG93IHNpemUgdG8gJWRcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fLCBxb3MtPndpbmRvd19zaXplLnZhbHVlKTsKKwkJCQkgICBfX2Z1bmNfXywgcW9zLT53aW5kb3dfc2l6ZS52YWx1ZSk7CiAJCX0gZWxzZSBpZiAoaW5kZXggPiAxKSB7CiAJCQlxb3MtPmRhdGFfc2l6ZS52YWx1ZSA9IGRhdGFfc2l6ZXNbaW5kZXgtLV07CiAJCQlJUkRBX0RFQlVHKDIsICIlcygpLCByZWR1Y2luZyBkYXRhIHNpemUgdG8gJWRcbiIsCi0JCQkJICAgX19GVU5DVElPTl9fLCBxb3MtPmRhdGFfc2l6ZS52YWx1ZSk7CisJCQkJICAgX19mdW5jX18sIHFvcy0+ZGF0YV9zaXplLnZhbHVlKTsKIAkJfSBlbHNlIHsKIAkJCUlSREFfV0FSTklORygiJXMoKSwgbm90aGluZyBtb3JlIHdlIGNhbiBkbyFcbiIsCi0JCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgICAgX19mdW5jX18pOwogCQl9CiAJfQogI2VuZGlmIC8qIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XICovCkBAIC01MzgsNyArNTM4LDcgQEAKIAlpZiAoZ2V0KSB7CiAJCXBhcmFtLT5wdi5pID0gc2VsZi0+cW9zX3J4LmJhdWRfcmF0ZS5iaXRzOwogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBiYXVkIHJhdGUgPSAweCUwMnhcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18sIHBhcmFtLT5wdi5pKTsKKwkJCSAgIF9fZnVuY19fLCBwYXJhbS0+cHYuaSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogIFN0YXRpb25zIG11c3QgYWdyZWUgb24gYmF1ZCByYXRlLCBzbyBjYWxjdWxhdGUKQEAgLTcxMSw3ICs3MTEsNyBAQAogCWludCBpLGo7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCBzcGVlZD0lZCwgbWF4X3R1cm5fdGltZT0lZFxuIiwKLQkJICAgX19GVU5DVElPTl9fLCBzcGVlZCwgbWF4X3R1cm5fdGltZSk7CisJCSAgIF9fZnVuY19fLCBzcGVlZCwgbWF4X3R1cm5fdGltZSk7CiAKIAlpID0gdmFsdWVfaW5kZXgoc3BlZWQsIGJhdWRfcmF0ZXMsIDEwKTsKIAlqID0gdmFsdWVfaW5kZXgobWF4X3R1cm5fdGltZSwgbWF4X3R1cm5fdGltZXMsIDQpOwpAQCAtNzIyLDcgKzcyMiw3IEBACiAJbGluZV9jYXBhY2l0eSA9IG1heF9saW5lX2NhcGFjaXRpZXNbaV1bal07CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCBsaW5lIGNhcGFjaXR5PSVkIGJ5dGVzXG4iLAotCQkgICBfX0ZVTkNUSU9OX18sIGxpbmVfY2FwYWNpdHkpOworCQkgICBfX2Z1bmNfXywgbGluZV9jYXBhY2l0eSk7CiAKIAlyZXR1cm4gbGluZV9jYXBhY2l0eTsKIH0KQEAgLTczOCw3ICs3MzgsNyBAQAogCQkJCQkgICAgIHFvcy0+bWluX3R1cm5fdGltZS52YWx1ZSk7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCByZXF1ZXN0ZWQgbGluZSBjYXBhY2l0eT0lZFxuIiwKLQkJICAgX19GVU5DVElPTl9fLCBsaW5lX2NhcGFjaXR5KTsKKwkJICAgX19mdW5jX18sIGxpbmVfY2FwYWNpdHkpOwogCiAJcmV0dXJuIGxpbmVfY2FwYWNpdHk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXJkYS93cmFwcGVyLmMgYi9uZXQvaXJkYS93cmFwcGVyLmMKaW5kZXggYzI0Njk4My4uZmQwOTk1YiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvd3JhcHBlci5jCisrKyBiL25ldC9pcmRhL3dyYXBwZXIuYwpAQCAtMTA2LDE2ICsxMDYsMTYgQEAKIAkJICogTm90aGluZyB0byB3b3JyeSBhYm91dCwgYnV0IHdlIHNldCB0aGUgZGVmYXVsdCBudW1iZXIgb2YKIAkJICogQk9GJ3MKIAkJICovCi0JCUlSREFfREVCVUcoMSwgIiVzKCksIHdyb25nIG1hZ2ljIGluIHNrYiFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCUlSREFfREVCVUcoMSwgIiVzKCksIHdyb25nIG1hZ2ljIGluIHNrYiFcbiIsIF9fZnVuY19fKTsKIAkJeGJvZnMgPSAxMDsKIAl9IGVsc2UKIAkJeGJvZnMgPSBjYi0+eGJvZnMgKyBjYi0+eGJvZnNfZGVsYXk7CiAKLQlJUkRBX0RFQlVHKDQsICIlcygpLCB4Ym9mcz0lZFxuIiwgX19GVU5DVElPTl9fLCB4Ym9mcyk7CisJSVJEQV9ERUJVRyg0LCAiJXMoKSwgeGJvZnM9JWRcbiIsIF9fZnVuY19fLCB4Ym9mcyk7CiAKIAkvKiBDaGVjayB0aGF0IHdlIG5ldmVyIHVzZSBtb3JlIHRoYW4gMTE1ICsgNDggeGJvZnMgKi8KIAlpZiAoeGJvZnMgPiAxNjMpIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgdG9vIG1hbnkgeGJvZnMgKCVkKVxuIiwgX19GVU5DVElPTl9fLAorCQlJUkRBX0RFQlVHKDAsICIlcygpLCB0b28gbWFueSB4Ym9mcyAoJWQpXG4iLCBfX2Z1bmNfXywKIAkJCSAgIHhib2ZzKTsKIAkJeGJvZnMgPSAxNjM7CiAJfQpAQCAtMTM1LDcgKzEzNSw3IEBACiAJCSAqLwogCQlpZihuID49IChidWZmc2l6ZS01KSkgewogCQkJSVJEQV9FUlJPUigiJXMoKSwgdHggYnVmZmVyIG92ZXJmbG93IChuPSVkKVxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18sIG4pOworCQkJCSAgIF9fZnVuY19fLCBuKTsKIAkJCXJldHVybiBuOwogCQl9CiAKQEAgLTI4Nyw3ICsyODcsNyBAQAogCQkvKiBOb3Qgc3VwcG9zZWQgdG8gaGFwcGVuLCB0aGUgcHJldmlvdXMgZnJhbWUgaXMgbm90CiAJCSAqIGZpbmlzaGVkIC0gSmVhbiBJSSAqLwogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBEaXNjYXJkaW5nIGluY29tcGxldGUgZnJhbWVcbiIsCi0JCQkgICBfX0ZVTkNUSU9OX18pOworCQkJICAgX19mdW5jX18pOwogCQlzdGF0cy0+cnhfZXJyb3JzKys7CiAJCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzKys7CiAJCWlyZGFfZGV2aWNlX3NldF9tZWRpYV9idXN5KGRldiwgVFJVRSk7CkBAIC0zNjAsNyArMzYwLDcgQEAKIAkJCS8qIFdyb25nIENSQywgZGlzY2FyZCBmcmFtZSEgICovCiAJCQlpcmRhX2RldmljZV9zZXRfbWVkaWFfYnVzeShkZXYsIFRSVUUpOwogCi0JCQlJUkRBX0RFQlVHKDEsICIlcygpLCBjcmMgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlJUkRBX0RFQlVHKDEsICIlcygpLCBjcmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKIAkJCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7CiAJCX0KQEAgLTM4Niw3ICszODYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTElOS19FU0NBUEU6Ci0JCUlSREFfV0FSTklORygiJXM6IHN0YXRlIG5vdCBkZWZpbmVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlJUkRBX1dBUk5JTkcoIiVzOiBzdGF0ZSBub3QgZGVmaW5lZFxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAogCWNhc2UgQkVHSU5fRlJBTUU6CkBAIC00MjEsNyArNDIxLDcgQEAKICNlbmRpZgogCQl9IGVsc2UgewogCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgUnggYnVmZmVyIG92ZXJmbG93LCBhYm9ydGluZ1xuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18pOworCQkJCSAgIF9fZnVuY19fKTsKIAkJCXJ4X2J1ZmYtPnN0YXRlID0gT1VUU0lERV9GUkFNRTsKIAkJfQogCQlicmVhazsKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCQkJcnhfYnVmZi0+c3RhdGUgPSBJTlNJREVfRlJBTUU7CiAJCX0gZWxzZSB7CiAJCQlJUkRBX0RFQlVHKDEsICIlcygpLCBSeCBidWZmZXIgb3ZlcmZsb3csIGFib3J0aW5nXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXyk7CisJCQkJICAgX19mdW5jX18pOwogCQkJcnhfYnVmZi0+c3RhdGUgPSBPVVRTSURFX0ZSQU1FOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGZlZTIyY2EuLjdiMDAzOGYgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYworKysgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTUzLDcgKzUzLDcgQEAKIHN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfY29ubnJlaihzdHJ1Y3QgaXVjdl9wYXRoICosIHU4IGlwdXNlclsxNl0pOwogCiBzdGF0aWMgc3RydWN0IGl1Y3Zfc29ja19saXN0IGl1Y3Zfc2tfbGlzdCA9IHsKLQkubG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQoaXVjdl9za19saXN0LmxvY2spLAogCS5hdXRvYmluZF9uYW1lID0gQVRPTUlDX0lOSVQoMCkKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2l1Y3YuYyBiL25ldC9pdWN2L2l1Y3YuYwppbmRleCAyNzUzYjBjLi45MTg5NzA3IDEwMDY0NAotLS0gYS9uZXQvaXVjdi9pdWN2LmMKKysrIGIvbmV0L2l1Y3YvaXVjdi5jCkBAIC02MjEsNyArNjIxLDYgQEAKIAlyZXR1cm4gaXVjdl9jYWxsX2IyZjAoSVVDVl9TRVZFUiwgcGFybSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfU01QCiAvKioKICAqIF9faXVjdl9jbGVhbnVwX3F1ZXVlCiAgKiBAZHVtbXk6IHVudXNlZCBkdW1teSBhcmd1bWVudApAQCAtNjMyLDcgKzYzMSw2IEBACiBzdGF0aWMgdm9pZCBfX2l1Y3ZfY2xlYW51cF9xdWV1ZSh2b2lkICpkdW1teSkKIHsKIH0KLSNlbmRpZgogCiAvKioKICAqIGl1Y3ZfY2xlYW51cF9xdWV1ZQpAQCAtNzk3LDcgKzc5NSw2IEBACiAJdW5pb24gaXVjdl9wYXJhbSAqcGFybTsKIAlpbnQgcmM7CiAKLQlCVUdfT04oaW5fYXRvbWljKCkpOwogCXNwaW5fbG9ja19iaCgmaXVjdl90YWJsZV9sb2NrKTsKIAlpdWN2X2NsZWFudXBfcXVldWUoKTsKIAlwYXJtID0gaXVjdl9wYXJhbVtzbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtMTYxMSwxMyArMTYwOCwxMCBAQAogCXJjID0gcmVnaXN0ZXJfZXh0ZXJuYWxfaW50ZXJydXB0KDB4NDAwMCwgaXVjdl9leHRlcm5hbF9pbnRlcnJ1cHQpOwogCWlmIChyYykKIAkJZ290byBvdXQ7Ci0JcmMgPSBidXNfcmVnaXN0ZXIoJml1Y3ZfYnVzKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2ludDsKIAlpdWN2X3Jvb3QgPSBzMzkwX3Jvb3RfZGV2X3JlZ2lzdGVyKCJpdWN2Iik7CiAJaWYgKElTX0VSUihpdWN2X3Jvb3QpKSB7CiAJCXJjID0gUFRSX0VSUihpdWN2X3Jvb3QpOwotCQlnb3RvIG91dF9idXM7CisJCWdvdG8gb3V0X2ludDsKIAl9CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewpAQCAtMTYzNywxMyArMTYzMSwyMCBAQAogCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCX0KLQlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJml1Y3ZfY3B1X25vdGlmaWVyKTsKKwlyYyA9IHJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmaXVjdl9jcHVfbm90aWZpZXIpOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKIAlBU0NFQkMoaXVjdl9lcnJvcl9ub19saXN0ZW5lciwgMTYpOwogCUFTQ0VCQyhpdWN2X2Vycm9yX25vX21lbW9yeSwgMTYpOwogCUFTQ0VCQyhpdWN2X2Vycm9yX3BhdGhpZCwgMTYpOwogCWl1Y3ZfYXZhaWxhYmxlID0gMTsKKwlyYyA9IGJ1c19yZWdpc3RlcigmaXVjdl9idXMpOworCWlmIChyYykKKwkJZ290byBvdXRfY3B1OwogCXJldHVybiAwOwogCitvdXRfY3B1OgorCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZpdWN2X2NwdV9ub3RpZmllcik7CiBvdXRfZnJlZToKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWtmcmVlKGl1Y3ZfcGFyYW1bY3B1XSk7CkBAIC0xNjUyLDggKzE2NTMsNiBAQAogCQlpdWN2X2lycV9kYXRhW2NwdV0gPSBOVUxMOwogCX0KIAlzMzkwX3Jvb3RfZGV2X3VucmVnaXN0ZXIoaXVjdl9yb290KTsKLW91dF9idXM6Ci0JYnVzX3VucmVnaXN0ZXIoJml1Y3ZfYnVzKTsKIG91dF9pbnQ6CiAJdW5yZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHg0MDAwLCBpdWN2X2V4dGVybmFsX2ludGVycnVwdCk7CiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCAxYzg1MzkyLi4xZmIwZmU0IDEwMDY0NAotLS0gYS9uZXQva2V5L2FmX2tleS5jCisrKyBiL25ldC9rZXkvYWZfa2V5LmMKQEAgLTQ4LDYgKzQ4LDE3IEBACiAJc3RydWN0IHNvY2sJc2s7CiAJaW50CQlyZWdpc3RlcmVkOwogCWludAkJcHJvbWlzYzsKKworCXN0cnVjdCB7CisJCXVpbnQ4X3QJCW1zZ192ZXJzaW9uOworCQl1aW50MzJfdAltc2dfcGlkOworCQlpbnQJCSgqZHVtcCkoc3RydWN0IHBma2V5X3NvY2sgKnNrKTsKKwkJdm9pZAkJKCpkb25lKShzdHJ1Y3QgcGZrZXlfc29jayAqc2spOworCQl1bmlvbiB7CisJCQlzdHJ1Y3QgeGZybV9wb2xpY3lfd2Fsawlwb2xpY3k7CisJCQlzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrCXN0YXRlOworCQl9IHU7CisJfSBkdW1wOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGZrZXlfc29jayAqcGZrZXlfc2soc3RydWN0IHNvY2sgKnNrKQpAQCAtNTUsNiArNjYsMjcgQEAKIAlyZXR1cm4gKHN0cnVjdCBwZmtleV9zb2NrICopc2s7CiB9CiAKK3N0YXRpYyBpbnQgcGZrZXlfY2FuX2R1bXAoc3RydWN0IHNvY2sgKnNrKQoreworCWlmICgzICogYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA8PSAyICogc2stPnNrX3JjdmJ1ZikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGZrZXlfZG9fZHVtcChzdHJ1Y3QgcGZrZXlfc29jayAqcGZrKQoreworCWludCByYzsKKworCXJjID0gcGZrLT5kdW1wLmR1bXAocGZrKTsKKwlpZiAocmMgPT0gLUVOT0JVRlMpCisJCXJldHVybiAwOworCisJcGZrLT5kdW1wLmRvbmUocGZrKTsKKwlwZmstPmR1bXAuZHVtcCA9IE5VTEw7CisJcGZrLT5kdW1wLmRvbmUgPSBOVUxMOworCXJldHVybiByYzsKK30KKwogc3RhdGljIHZvaWQgcGZrZXlfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CkBAIC0xMjE5LDcgKzEyNTEsNyBAQAogCQl4LT5zZWwucHJlZml4bGVuX3MgPSBhZGRyLT5zYWRiX2FkZHJlc3NfcHJlZml4bGVuOwogCX0KIAotCWlmICgheC0+c2VsLmZhbWlseSkKKwlpZiAoeC0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFJBTlNQT1JUKQogCQl4LT5zZWwuZmFtaWx5ID0geC0+cHJvcHMuZmFtaWx5OwogCiAJaWYgKGV4dF9oZHJzW1NBREJfWF9FWFRfTkFUX1RfVFlQRS0xXSkgewpAQCAtMTcwOSw0NSArMTc0MSw2MCBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGZrZXlfZHVtcF9kYXRhCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2FkYl9tc2cgKmhkcjsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci19OwotCiBzdGF0aWMgaW50IGR1bXBfc2Eoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKQogewotCXN0cnVjdCBwZmtleV9kdW1wX2RhdGEgKmRhdGEgPSBwdHI7CisJc3RydWN0IHBma2V5X3NvY2sgKnBmayA9IHB0cjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqb3V0X3NrYjsKIAlzdHJ1Y3Qgc2FkYl9tc2cgKm91dF9oZHI7CiAKKwlpZiAoIXBma2V5X2Nhbl9kdW1wKCZwZmstPnNrKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCiAJb3V0X3NrYiA9IHBma2V5X3hmcm1fc3RhdGUybXNnKHgpOwogCWlmIChJU19FUlIob3V0X3NrYikpCiAJCXJldHVybiBQVFJfRVJSKG91dF9za2IpOwogCiAJb3V0X2hkciA9IChzdHJ1Y3Qgc2FkYl9tc2cgKikgb3V0X3NrYi0+ZGF0YTsKLQlvdXRfaGRyLT5zYWRiX21zZ192ZXJzaW9uID0gZGF0YS0+aGRyLT5zYWRiX21zZ192ZXJzaW9uOworCW91dF9oZHItPnNhZGJfbXNnX3ZlcnNpb24gPSBwZmstPmR1bXAubXNnX3ZlcnNpb247CiAJb3V0X2hkci0+c2FkYl9tc2dfdHlwZSA9IFNBREJfRFVNUDsKIAlvdXRfaGRyLT5zYWRiX21zZ19zYXR5cGUgPSBwZmtleV9wcm90bzJzYXR5cGUoeC0+aWQucHJvdG8pOwogCW91dF9oZHItPnNhZGJfbXNnX2Vycm5vID0gMDsKIAlvdXRfaGRyLT5zYWRiX21zZ19yZXNlcnZlZCA9IDA7CiAJb3V0X2hkci0+c2FkYl9tc2dfc2VxID0gY291bnQ7Ci0Jb3V0X2hkci0+c2FkYl9tc2dfcGlkID0gZGF0YS0+aGRyLT5zYWRiX21zZ19waWQ7Ci0JcGZrZXlfYnJvYWRjYXN0KG91dF9za2IsIEdGUF9BVE9NSUMsIEJST0FEQ0FTVF9PTkUsIGRhdGEtPnNrKTsKKwlvdXRfaGRyLT5zYWRiX21zZ19waWQgPSBwZmstPmR1bXAubXNnX3BpZDsKKwlwZmtleV9icm9hZGNhc3Qob3V0X3NrYiwgR0ZQX0FUT01JQywgQlJPQURDQVNUX09ORSwgJnBmay0+c2spOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBma2V5X2R1bXBfc2Eoc3RydWN0IHBma2V5X3NvY2sgKnBmaykKK3sKKwlyZXR1cm4geGZybV9zdGF0ZV93YWxrKCZwZmstPmR1bXAudS5zdGF0ZSwgZHVtcF9zYSwgKHZvaWQgKikgcGZrKTsKK30KKworc3RhdGljIHZvaWQgcGZrZXlfZHVtcF9zYV9kb25lKHN0cnVjdCBwZmtleV9zb2NrICpwZmspCit7CisJeGZybV9zdGF0ZV93YWxrX2RvbmUoJnBmay0+ZHVtcC51LnN0YXRlKTsKK30KKwogc3RhdGljIGludCBwZmtleV9kdW1wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKipleHRfaGRycykKIHsKIAl1OCBwcm90bzsKLQlzdHJ1Y3QgcGZrZXlfZHVtcF9kYXRhIGRhdGEgPSB7IC5za2IgPSBza2IsIC5oZHIgPSBoZHIsIC5zayA9IHNrIH07CisJc3RydWN0IHBma2V5X3NvY2sgKnBmayA9IHBma2V5X3NrKHNrKTsKKworCWlmIChwZmstPmR1bXAuZHVtcCAhPSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJcHJvdG8gPSBwZmtleV9zYXR5cGUycHJvdG8oaGRyLT5zYWRiX21zZ19zYXR5cGUpOwogCWlmIChwcm90byA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiB4ZnJtX3N0YXRlX3dhbGsocHJvdG8sIGR1bXBfc2EsICZkYXRhKTsKKwlwZmstPmR1bXAubXNnX3ZlcnNpb24gPSBoZHItPnNhZGJfbXNnX3ZlcnNpb247CisJcGZrLT5kdW1wLm1zZ19waWQgPSBoZHItPnNhZGJfbXNnX3BpZDsKKwlwZmstPmR1bXAuZHVtcCA9IHBma2V5X2R1bXBfc2E7CisJcGZrLT5kdW1wLmRvbmUgPSBwZmtleV9kdW1wX3NhX2RvbmU7CisJeGZybV9zdGF0ZV93YWxrX2luaXQoJnBmay0+ZHVtcC51LnN0YXRlLCBwcm90byk7CisKKwlyZXR1cm4gcGZrZXlfZG9fZHVtcChwZmspOwogfQogCiBzdGF0aWMgaW50IHBma2V5X3Byb21pc2Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2FkYl9tc2cgKmhkciwgdm9pZCAqKmV4dF9oZHJzKQpAQCAtMTc4MCw3ICsxODI3LDkgQEAKIAogc3RhdGljIHUzMiBnZW5fcmVxaWQodm9pZCkKIHsKKwlzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayB3YWxrOwogCXUzMiBzdGFydDsKKwlpbnQgcmM7CiAJc3RhdGljIHUzMiByZXFpZCA9IElQU0VDX01BTlVBTF9SRVFJRF9NQVg7CiAKIAlzdGFydCA9IHJlcWlkOwpAQCAtMTc4OCw4ICsxODM3LDEwIEBACiAJCSsrcmVxaWQ7CiAJCWlmIChyZXFpZCA9PSAwKQogCQkJcmVxaWQgPSBJUFNFQ19NQU5VQUxfUkVRSURfTUFYKzE7Ci0JCWlmICh4ZnJtX3BvbGljeV93YWxrKFhGUk1fUE9MSUNZX1RZUEVfTUFJTiwgY2hlY2tfcmVxaWQsCi0JCQkJICAgICAodm9pZCopJnJlcWlkKSAhPSAtRUVYSVNUKQorCQl4ZnJtX3BvbGljeV93YWxrX2luaXQoJndhbGssIFhGUk1fUE9MSUNZX1RZUEVfTUFJTik7CisJCXJjID0geGZybV9wb2xpY3lfd2Fsaygmd2FsaywgY2hlY2tfcmVxaWQsICh2b2lkKikmcmVxaWQpOworCQl4ZnJtX3BvbGljeV93YWxrX2RvbmUoJndhbGspOworCQlpZiAocmMgIT0gLUVFWElTVCkKIAkJCXJldHVybiByZXFpZDsKIAl9IHdoaWxlIChyZXFpZCAhPSBzdGFydCk7CiAJcmV0dXJuIDA7CkBAIC0yMjQxLDcgKzIyOTIsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQllcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9hbGxvYyh4cCwgdWN0eCk7CisJCWVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKCZ4cC0+c2VjdXJpdHksIHVjdHgpOwogCQlrZnJlZSh1Y3R4KTsKIAogCQlpZiAoZXJyKQpAQCAtMjMwMSwxMCArMjM1MiwxMSBAQAogCWludCBlcnI7CiAJc3RydWN0IHNhZGJfYWRkcmVzcyAqc2E7CiAJc3RydWN0IHNhZGJfeF9wb2xpY3kgKnBvbDsKLQlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB0bXA7CisJc3RydWN0IHhmcm1fcG9saWN5ICp4cDsKIAlzdHJ1Y3QgeGZybV9zZWxlY3RvciBzZWw7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAJc3RydWN0IHNhZGJfeF9zZWNfY3R4ICpzZWNfY3R4OworCXN0cnVjdCB4ZnJtX3NlY19jdHggKnBvbF9jdHg7CiAKIAlpZiAoIXByZXNlbnRfYW5kX3NhbWVfZmFtaWx5KGV4dF9oZHJzW1NBREJfRVhUX0FERFJFU1NfU1JDLTFdLAogCQkJCSAgICAgZXh0X2hkcnNbU0FEQl9FWFRfQUREUkVTU19EU1QtMV0pIHx8CkBAIC0yMzM0LDI1ICsyMzg2LDIzIEBACiAJCXNlbC5kcG9ydF9tYXNrID0gaHRvbnMoMHhmZmZmKTsKIAogCXNlY19jdHggPSAoc3RydWN0IHNhZGJfeF9zZWNfY3R4ICopIGV4dF9oZHJzW1NBREJfWF9FWFRfU0VDX0NUWC0xXTsKLQltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHN0cnVjdCB4ZnJtX3BvbGljeSkpOwotCiAJaWYgKHNlY19jdHggIT0gTlVMTCkgewogCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHggPSBwZmtleV9zYWRiMnhmcm1fdXNlcl9zZWNfY3R4KHNlY19jdHgpOwogCiAJCWlmICghdWN0eCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCWVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKCZ0bXAsIHVjdHgpOworCQllcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9hbGxvYygmcG9sX2N0eCwgdWN0eCk7CiAJCWtmcmVlKHVjdHgpOwotCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCX0KKwl9IGVsc2UKKwkJcG9sX2N0eCA9IE5VTEw7CiAKLQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eChYRlJNX1BPTElDWV9UWVBFX01BSU4sIHBvbC0+c2FkYl94X3BvbGljeV9kaXItMSwKLQkJCQkgICAmc2VsLCB0bXAuc2VjdXJpdHksIDEsICZlcnIpOwotCXNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoJnRtcCk7Ci0KKwl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eChYRlJNX1BPTElDWV9UWVBFX01BSU4sCisJCQkJICAgcG9sLT5zYWRiX3hfcG9saWN5X2RpciAtIDEsICZzZWwsIHBvbF9jdHgsCisJCQkJICAgMSwgJmVycik7CisJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShwb2xfY3R4KTsKIAlpZiAoeHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTI2MzgsMTEgKzI2ODgsMTQgQEAKIAogc3RhdGljIGludCBkdW1wX3NwKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIGludCBkaXIsIGludCBjb3VudCwgdm9pZCAqcHRyKQogewotCXN0cnVjdCBwZmtleV9kdW1wX2RhdGEgKmRhdGEgPSBwdHI7CisJc3RydWN0IHBma2V5X3NvY2sgKnBmayA9IHB0cjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqb3V0X3NrYjsKIAlzdHJ1Y3Qgc2FkYl9tc2cgKm91dF9oZHI7CiAJaW50IGVycjsKIAorCWlmICghcGZrZXlfY2FuX2R1bXAoJnBmay0+c2spKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKIAlvdXRfc2tiID0gcGZrZXlfeGZybV9wb2xpY3kybXNnX3ByZXAoeHApOwogCWlmIChJU19FUlIob3V0X3NrYikpCiAJCXJldHVybiBQVFJfRVJSKG91dF9za2IpOwpAQCAtMjY1MiwyMSArMjcwNSw0MCBAQAogCQlyZXR1cm4gZXJyOwogCiAJb3V0X2hkciA9IChzdHJ1Y3Qgc2FkYl9tc2cgKikgb3V0X3NrYi0+ZGF0YTsKLQlvdXRfaGRyLT5zYWRiX21zZ192ZXJzaW9uID0gZGF0YS0+aGRyLT5zYWRiX21zZ192ZXJzaW9uOworCW91dF9oZHItPnNhZGJfbXNnX3ZlcnNpb24gPSBwZmstPmR1bXAubXNnX3ZlcnNpb247CiAJb3V0X2hkci0+c2FkYl9tc2dfdHlwZSA9IFNBREJfWF9TUEREVU1QOwogCW91dF9oZHItPnNhZGJfbXNnX3NhdHlwZSA9IFNBREJfU0FUWVBFX1VOU1BFQzsKIAlvdXRfaGRyLT5zYWRiX21zZ19lcnJubyA9IDA7CiAJb3V0X2hkci0+c2FkYl9tc2dfc2VxID0gY291bnQ7Ci0Jb3V0X2hkci0+c2FkYl9tc2dfcGlkID0gZGF0YS0+aGRyLT5zYWRiX21zZ19waWQ7Ci0JcGZrZXlfYnJvYWRjYXN0KG91dF9za2IsIEdGUF9BVE9NSUMsIEJST0FEQ0FTVF9PTkUsIGRhdGEtPnNrKTsKKwlvdXRfaGRyLT5zYWRiX21zZ19waWQgPSBwZmstPmR1bXAubXNnX3BpZDsKKwlwZmtleV9icm9hZGNhc3Qob3V0X3NrYiwgR0ZQX0FUT01JQywgQlJPQURDQVNUX09ORSwgJnBmay0+c2spOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBma2V5X2R1bXBfc3Aoc3RydWN0IHBma2V5X3NvY2sgKnBmaykKK3sKKwlyZXR1cm4geGZybV9wb2xpY3lfd2FsaygmcGZrLT5kdW1wLnUucG9saWN5LCBkdW1wX3NwLCAodm9pZCAqKSBwZmspOworfQorCitzdGF0aWMgdm9pZCBwZmtleV9kdW1wX3NwX2RvbmUoc3RydWN0IHBma2V5X3NvY2sgKnBmaykKK3sKKwl4ZnJtX3BvbGljeV93YWxrX2RvbmUoJnBmay0+ZHVtcC51LnBvbGljeSk7Cit9CisKIHN0YXRpYyBpbnQgcGZrZXlfc3BkZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzYWRiX21zZyAqaGRyLCB2b2lkICoqZXh0X2hkcnMpCiB7Ci0Jc3RydWN0IHBma2V5X2R1bXBfZGF0YSBkYXRhID0geyAuc2tiID0gc2tiLCAuaGRyID0gaGRyLCAuc2sgPSBzayB9OworCXN0cnVjdCBwZmtleV9zb2NrICpwZmsgPSBwZmtleV9zayhzayk7CiAKLQlyZXR1cm4geGZybV9wb2xpY3lfd2FsayhYRlJNX1BPTElDWV9UWVBFX01BSU4sIGR1bXBfc3AsICZkYXRhKTsKKwlpZiAocGZrLT5kdW1wLmR1bXAgIT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXBmay0+ZHVtcC5tc2dfdmVyc2lvbiA9IGhkci0+c2FkYl9tc2dfdmVyc2lvbjsKKwlwZmstPmR1bXAubXNnX3BpZCA9IGhkci0+c2FkYl9tc2dfcGlkOworCXBmay0+ZHVtcC5kdW1wID0gcGZrZXlfZHVtcF9zcDsKKwlwZmstPmR1bXAuZG9uZSA9IHBma2V5X2R1bXBfc3BfZG9uZTsKKwl4ZnJtX3BvbGljeV93YWxrX2luaXQoJnBmay0+ZHVtcC51LnBvbGljeSwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOKTsKKworCXJldHVybiBwZmtleV9kb19kdW1wKHBmayk7CiB9CiAKIHN0YXRpYyBpbnQga2V5X25vdGlmeV9wb2xpY3lfZmx1c2goc3RydWN0IGttX2V2ZW50ICpjKQpAQCAtMzIyNSw3ICszMjk3LDcgQEAKIAkJaWYgKCgqZGlyID0gdmVyaWZ5X3NlY19jdHhfbGVuKHApKSkKIAkJCWdvdG8gb3V0OwogCQl1Y3R4ID0gcGZrZXlfc2FkYjJ4ZnJtX3VzZXJfc2VjX2N0eChzZWNfY3R4KTsKLQkJKmRpciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHhwLCB1Y3R4KTsKKwkJKmRpciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKCZ4cC0+c2VjdXJpdHksIHVjdHgpOwogCQlrZnJlZSh1Y3R4KTsKIAogCQlpZiAoKmRpcikKQEAgLTM2NzEsNiArMzc0Myw3IEBACiAJCQkgaW50IGZsYWdzKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBwZmtleV9zb2NrICpwZmsgPSBwZmtleV9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgY29waWVkLCBlcnI7CiAKQEAgLTM2OTgsNiArMzc3MSwxMCBAQAogCiAJZXJyID0gKGZsYWdzICYgTVNHX1RSVU5DKSA/IHNrYi0+bGVuIDogY29waWVkOwogCisJaWYgKHBmay0+ZHVtcC5kdW1wICE9IE5VTEwgJiYKKwkgICAgMyAqIGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPD0gc2stPnNrX3JjdmJ1ZikKKwkJcGZrZXlfZG9fZHVtcChwZmspOworCiBvdXRfZnJlZToKIAlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKIG91dDoKQEAgLTM4MDcsMTcgKzM4ODQsMTYgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmU7CiAKLQllID0gY3JlYXRlX3Byb2NfZW50cnkoInBma2V5IiwgMCwgaW5pdF9uZXQucHJvY19uZXQpOworCWUgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJwZmtleSIsIDAsICZwZmtleV9wcm9jX29wcyk7CiAJaWYgKGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllLT5wcm9jX2ZvcHMgPSAmcGZrZXlfcHJvY19vcHM7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHBma2V5X2V4aXRfcHJvYyh2b2lkKQogewotCXJlbW92ZV9wcm9jX2VudHJ5KCJuZXQvcGZrZXkiLCBOVUxMKTsKKwlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAicGZrZXkiKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwZmtleV9pbml0X3Byb2Modm9pZCkKZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDQ2Y2Y5NjIuLjk3MTAxZGMgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMTU1LDYgKzE1NSw5IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCWludCByYyA9IC1FU09DS1ROT1NVUFBPUlQ7CiAKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9SQVcpKQorCQlyZXR1cm4gLUVQRVJNOworCiAJaWYgKG5ldCAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCkBAIC0xODUsNyArMTg4LDcgQEAKIAlzb2NrX2hvbGQoc2spOwogCWxvY2tfc29jayhzayk7CiAJbGxjID0gbGxjX3NrKHNrKTsKLQlkcHJpbnRrKCIlczogY2xvc2luZyBsb2NhbCglMDJYKSByZW1vdGUoJTAyWClcbiIsIF9fRlVOQ1RJT05fXywKKwlkcHJpbnRrKCIlczogY2xvc2luZyBsb2NhbCglMDJYKSByZW1vdGUoJTAyWClcbiIsIF9fZnVuY19fLAogCQlsbGMtPmxhZGRyLmxzYXAsIGxsYy0+ZGFkZHIubHNhcCk7CiAJaWYgKCFsbGNfc2VuZF9kaXNjKHNrKSkKIAkJbGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIHNrLT5za19yY3Z0aW1lbyk7CkBAIC0yOTUsNyArMjk4LDcgQEAKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwOwogCWludCByYyA9IC1FSU5WQUw7CiAKLQlkcHJpbnRrKCIlczogYmluZGluZyAlMDJYXG4iLCBfX0ZVTkNUSU9OX18sIGFkZHItPnNsbGNfc2FwKTsKKwlkcHJpbnRrKCIlczogYmluZGluZyAlMDJYXG4iLCBfX2Z1bmNfXywgYWRkci0+c2xsY19zYXApOwogCWlmICh1bmxpa2VseSghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkgfHwgYWRkcmxlbiAhPSBzaXplb2YoKmFkZHIpKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRUFGTk9TVVBQT1JUOwpAQCAtNDMyLDcgKzQzNSw3IEBACiAJcmMgPSBsbGNfZXN0YWJsaXNoX2Nvbm5lY3Rpb24oc2ssIGxsYy0+ZGV2LT5kZXZfYWRkciwKIAkJCQkgICAgICBhZGRyLT5zbGxjX21hYywgYWRkci0+c2xsY19zYXApOwogCWlmIChyYykgewotCQlkcHJpbnRrKCIlczogbGxjX3VpX3NlbmRfY29ubiBmYWlsZWQgOi0oXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlczogbGxjX3VpX3NlbmRfY29ubiBmYWlsZWQgOi0oXG4iLCBfX2Z1bmNfXyk7CiAJCXNvY2stPnN0YXRlICA9IFNTX1VOQ09OTkVDVEVEOwogCQlzay0+c2tfc3RhdGUgPSBUQ1BfQ0xPU0U7CiAJCWdvdG8gb3V0OwpAQCAtNjA0LDcgKzYwNyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKIAotCWRwcmludGsoIiVzOiBhY2NlcHRpbmcgb24gJTAyWFxuIiwgX19GVU5DVElPTl9fLAorCWRwcmludGsoIiVzOiBhY2NlcHRpbmcgb24gJTAyWFxuIiwgX19mdW5jX18sCiAJCWxsY19zayhzayktPmxhZGRyLmxzYXApOwogCWxvY2tfc29jayhzayk7CiAJaWYgKHVubGlrZWx5KHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSkKQEAgLTYxOSw3ICs2MjIsNyBAQAogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKIAl9Ci0JZHByaW50aygiJXM6IGdvdCBhIG5ldyBjb25uZWN0aW9uIG9uICUwMlhcbiIsIF9fRlVOQ1RJT05fXywKKwlkcHJpbnRrKCIlczogZ290IGEgbmV3IGNvbm5lY3Rpb24gb24gJTAyWFxuIiwgX19mdW5jX18sCiAJCWxsY19zayhzayktPmxhZGRyLmxzYXApOwogCXNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJcmMgPSAtRUlOVkFMOwpAQCAtNjQwLDcgKzY0Myw3IEBACiAJLyogcHV0IG9yaWdpbmFsIHNvY2tldCBiYWNrIGludG8gYSBjbGVhbiBsaXN0ZW4gc3RhdGUuICovCiAJc2stPnNrX3N0YXRlID0gVENQX0xJU1RFTjsKIAlzay0+c2tfYWNrX2JhY2tsb2ctLTsKLQlkcHJpbnRrKCIlczogb2sgc3VjY2VzcyBvbiAlMDJYLCBjbGllbnQgb24gJTAyWFxuIiwgX19GVU5DVElPTl9fLAorCWRwcmludGsoIiVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXG4iLCBfX2Z1bmNfXywKIAkJbGxjX3NrKHNrKS0+YWRkci5zbGxjX3NhcCwgbmV3bGxjLT5kYWRkci5sc2FwKTsKIGZyZWVzOgogCWtmcmVlX3NrYihza2IpOwpAQCAtODMzLDcgKzgzNiw3IEBACiAJc2l6ZV90IHNpemUgPSAwOwogCWludCByYyA9IC1FSU5WQUwsIGNvcGllZCA9IDAsIGhkcmxlbjsKIAotCWRwcmludGsoIiVzOiBzZW5kaW5nIGZyb20gJTAyWCB0byAlMDJYXG4iLCBfX0ZVTkNUSU9OX18sCisJZHByaW50aygiJXM6IHNlbmRpbmcgZnJvbSAlMDJYIHRvICUwMlhcbiIsIF9fZnVuY19fLAogCQlsbGMtPmxhZGRyLmxzYXAsIGxsYy0+ZGFkZHIubHNhcCk7CiAJbG9ja19zb2NrKHNrKTsKIAlpZiAoYWRkcikgewpAQCAtODkxLDcgKzg5NCw3IEBACiAJCWtmcmVlX3NrYihza2IpOwogcmVsZWFzZToKIAkJZHByaW50aygiJXM6IGZhaWxlZCBzZW5kaW5nIGZyb20gJTAyWCB0byAlMDJYOiAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgbGxjLT5sYWRkci5sc2FwLCBsbGMtPmRhZGRyLmxzYXAsIHJjKTsKKwkJCV9fZnVuY19fLCBsbGMtPmxhZGRyLmxzYXAsIGxsYy0+ZGFkZHIubHNhcCwgcmMpOwogCX0KIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiByYyA/IDogY29waWVkOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY19hYy5jIGIvbmV0L2xsYy9sbGNfY19hYy5jCmluZGV4IDg2MDE0MGMuLjAxOWM3ODAgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2NfYWMuYworKysgYi9uZXQvbGxjL2xsY19jX2FjLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogewogCWludCByYyA9IC1FTk9CVUZTOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1UsIDApOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtMjIzLDcgKzIyMyw3IEBACiB7CiAJaW50IHJjID0gLUVOT0JVRlM7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7CiAKIAlpZiAobnNrYikgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CkBAIC0yNDksNyArMjQ5LDcgQEAKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYsIExMQ19QRFVfVFlQRV9VLCAwKTsKIAogCWlmIChuc2tiKSB7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKQEAgLTI4Miw3ICsyODIsOCBAQAogCQlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmZl9iaXQpOwogCWVsc2UKIAkJZl9iaXQgPSAwOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1UsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfZnJtcl9pbmZvKSk7CiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwogCkBAIC0zMDYsNyArMzA3LDggQEAKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYsIExMQ19QRFVfVFlQRV9VLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfZnJtcl9pbmZvKSk7CiAKIAlpZiAobnNrYikgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CkBAIC0zMzYsNyArMzM4LDggQEAKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAKIAlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmZl9iaXQpOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1UsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfZnJtcl9pbmZvKSk7CiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwogCQlzdHJ1Y3QgbGxjX3BkdV9zbiAqcGR1ID0gbGxjX3BkdV9zbl9oZHIoc2tiKTsKQEAgLTQyNCw3ICs0MjcsNyBAQAogCXN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpOwogCWludCByYyA9IC1FTk9CVUZTOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1UsIDApOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtNDU5LDcgKzQ2Miw3IEBACiB7CiAJaW50IHJjID0gLUVOT0JVRlM7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2LCBMTENfUERVX1RZUEVfUywgMCk7CiAKIAlpZiAobnNrYikgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CkBAIC00ODMsNyArNDg2LDcgQEAKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYsIExMQ19QRFVfVFlQRV9TLCAwKTsKIAogCWlmIChuc2tiKSB7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKQEAgLTUwNyw3ICs1MTAsNyBAQAogewogCWludCByYyA9IC1FTk9CVUZTOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1MsIDApOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtNTMxLDcgKzUzNCw3IEBACiB7CiAJaW50IHJjID0gLUVOT0JVRlM7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2LCBMTENfUERVX1RZUEVfUywgMCk7CiAKIAlpZiAobnNrYikgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CkBAIC01NTUsNyArNTU4LDcgQEAKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYsIExMQ19QRFVfVFlQRV9TLCAwKTsKIAogCWlmIChuc2tiKSB7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKQEAgLTU3OSw3ICs1ODIsNyBAQAogewogCWludCByYyA9IC1FTk9CVUZTOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1MsIDApOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtNjE1LDcgKzYxOCw3IEBACiB7CiAJaW50IHJjID0gLUVOT0JVRlM7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2LCBMTENfUERVX1RZUEVfUywgMCk7CiAKIAlpZiAobnNrYikgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CkBAIC02MzksNyArNjQyLDcgQEAKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYsIExMQ19QRFVfVFlQRV9TLCAwKTsKIAogCWlmIChuc2tiKSB7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKQEAgLTY2Myw3ICs2NjYsNyBAQAogewogCWludCByYyA9IC1FTk9CVUZTOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1MsIDApOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtNjg4LDcgKzY5MSw3IEBACiB7CiAJaW50IHJjID0gLUVOT0JVRlM7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2LCBMTENfUERVX1RZUEVfUywgMCk7CiAKIAlpZiAobnNrYikgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CkBAIC03MTIsNyArNzE1LDcgQEAKIHsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYsIExMQ19QRFVfVFlQRV9TLCAwKTsKIAogCWlmIChuc2tiKSB7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKQEAgLTczNiw3ICs3MzksNyBAQAogewogCWludCByYyA9IC1FTk9CVUZTOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1MsIDApOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtNzcwLDcgKzc3Myw3IEBACiB7CiAJaW50IHJjID0gLUVOT0JVRlM7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7CiAKIAlpZiAobnNrYikgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLT5zYXA7CkBAIC03OTksNyArODAyLDcgQEAKIAl1OCBmX2JpdDsKIAlpbnQgcmMgPSAtRU5PQlVGUzsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYsIExMQ19QRFVfVFlQRV9VLCAwKTsKIAogCWxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsICZmX2JpdCk7CiAJaWYgKG5za2IpIHsKQEAgLTk1Niw3ICs5NTksNyBAQAogewogCWludCByYyA9IC1FTk9CVUZTOwogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLT5kZXYpOworCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtPmRldiwgTExDX1BEVV9UWVBFX1MsIDApOwogCiAJaWYgKG5za2IpIHsKIAkJc3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy0+c2FwOwpAQCAtMTQyNyw3ICsxNDMwLDcgQEAKIHsKIAlpZiAobGxjX3NrKHNrKS0+c3RhdGUgPT0gTExDX0NPTk5fT1VUX09GX1NWQykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdGltZXIgY2FsbGVkIG9uIGNsb3NlZCBjb25uZWN0aW9uXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfSBlbHNlIHsKIAkJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY19ldi5jIGIvbmV0L2xsYy9sbGNfY19ldi5jCmluZGV4IGM1ZGVkYTIuLjUyM2ZkZDEgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2NfZXYuYworKysgYi9uZXQvbGxjL2xsY19jX2V2LmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQkgbGxjX3V0aWxfbnNfaW5zaWRlX3J4X3dpbmRvdyhucywgdnIsIGxsY19zayhzayktPnJ3KSA/IDAgOiAxOwogCWlmICghcmMpCiAJCWRwcmludGsoIiVzOiBtYXRjaGVkLCBzdGF0ZT0lZCwgbnM9JWQsIHZyPSVkXG4iLAotCQkJX19GVU5DVElPTl9fLCBsbGNfc2soc2spLT5zdGF0ZSwgbnMsIHZyKTsKKwkJCV9fZnVuY19fLCBsbGNfc2soc2spLT5zdGF0ZSwgbnMsIHZyKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMwNiw3ICszMDYsNyBAQAogCQkgbGxjX3V0aWxfbnNfaW5zaWRlX3J4X3dpbmRvdyhucywgdnIsIGxsY19zayhzayktPnJ3KSA/IDAgOiAxOwogCWlmICghcmMpCiAJCWRwcmludGsoIiVzOiBtYXRjaGVkLCBzdGF0ZT0lZCwgbnM9JWQsIHZyPSVkXG4iLAotCQkJX19GVU5DVElPTl9fLCBsbGNfc2soc2spLT5zdGF0ZSwgbnMsIHZyKTsKKwkJCV9fZnVuY19fLCBsbGNfc2soc2spLT5zdGF0ZSwgbnMsIHZyKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTUxMSw3ICs1MTEsNyBAQAogCSAgICAoTExDX1BEVV9UWVBFX0lTX0kocGR1KSB8fCBMTENfUERVX1RZUEVfSVNfUyhwZHUpKSAmJgogCSAgICBuciAhPSB2cyAmJiBsbGNfdXRpbF9ucl9pbnNpZGVfdHhfd2luZG93KHNrLCBucikpIHsKIAkJZHByaW50aygiJXM6IG1hdGNoZWQsIHN0YXRlPSVkLCB2cz0lZCwgbnI9JWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGxsY19zayhzayktPnN0YXRlLCB2cywgbnIpOworCQkJX19mdW5jX18sIGxsY19zayhzayktPnN0YXRlLCB2cywgbnIpOwogCQlyYyA9IDA7CiAJfQogCXJldHVybiByYzsKQEAgLTUzMCw3ICs1MzAsNyBAQAogCSAgICBuciAhPSB2cyAmJiBsbGNfdXRpbF9ucl9pbnNpZGVfdHhfd2luZG93KHNrLCBucikpIHsKIAkJcmMgPSAwOwogCQlkcHJpbnRrKCIlczogbWF0Y2hlZCwgc3RhdGU9JWQsIHZzPSVkLCBucj0lZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgbGxjX3NrKHNrKS0+c3RhdGUsIHZzLCBucik7CisJCQlfX2Z1bmNfXywgbGxjX3NrKHNrKS0+c3RhdGUsIHZzLCBucik7CiAJfQogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uYwppbmRleCA0NDFiYzE4Li41YzZkODljIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb25uLmMKKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jCkBAIC03Myw3ICs3Myw3IEBACiAJICovCiAJcmMgPSBsbGNfY29ubl9zZXJ2aWNlKHNrYi0+c2ssIHNrYik7CiAJaWYgKHVubGlrZWx5KHJjICE9IDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGxsY19jb25uX3NlcnZpY2UgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBsbGNfY29ubl9zZXJ2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9rZnJlZV9za2I7CiAJfQogCkBAIC05OSw3ICs5OSw3IEBACiAJCQkgKiBzaG91bGRuJ3QgaGFwcGVuCiAJCQkgKi8KIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNvY2tfcXVldWVfcmN2X3NrYiBmYWlsZWQhXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkgICAgICAgX19mdW5jX18pOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMzIsMTMgKzEzMiwxMyBAQAogCQkgKiBGSVhNRToKIAkJICogUkVTRVQgaXMgbm90IGJlaW5nIG5vdGlmaWVkIHRvIHVwcGVyIGxheWVycyBmb3Igbm93CiAJCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgYSByZXNldCBpbmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgYSByZXNldCBpbmQhXG4iLCBfX2Z1bmNfXyk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoZXYtPmluZF9wcmltKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgdW5rbm93biAlZCBwcmltIVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGV2LT5pbmRfcHJpbSk7CisJCQkJX19mdW5jX18sIGV2LT5pbmRfcHJpbSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQogCQkvKiBObyBpbmRpY2F0aW9uICovCkBAIC0xNzksMTIgKzE3OSwxMiBAQAogCQkgKiBGSVhNRToKIAkJICogUkVTRVQgaXMgbm90IGJlaW5nIG5vdGlmaWVkIHRvIHVwcGVyIGxheWVycyBmb3Igbm93CiAJCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgYSByZXNldCBjb25mIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmVkIGEgcmVzZXQgY29uZiFcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKGV2LT5jZm1fcHJpbSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmVkIHVua25vd24gJWQgcHJpbSFcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgZXYtPmNmbV9wcmltKTsKKwkJCQkJX19mdW5jX18sIGV2LT5jZm1fcHJpbSk7CiAJCQlicmVhazsKIAkJfQogCQlnb3RvIG91dF9za2JfcHV0OyAvKiBObyBjb25maXJtYXRpb24gKi8KQEAgLTcwMCw3ICs3MDAsNyBAQAogCQkJCQkgICAgIHN0cnVjdCBsbGNfYWRkciAqc2FkZHIsCiAJCQkJCSAgICAgc3RydWN0IGxsY19hZGRyICpkYWRkcikKIHsKLQlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfc2tfYWxsb2Moc2stPnNrX25ldCwgc2stPnNrX2ZhbWlseSwgR0ZQX0FUT01JQywKKwlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfc2tfYWxsb2Moc29ja19uZXQoc2spLCBzay0+c2tfZmFtaWx5LCBHRlBfQVRPTUlDLAogCQkJCQkgIHNrLT5za19wcm90KTsKIAlzdHJ1Y3QgbGxjX3NvY2sgKm5ld2xsYywgKmxsYyA9IGxsY19zayhzayk7CiAKQEAgLTc1OSw3ICs3NTksNyBAQAogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkKIAkJbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwogCWVsc2UgewotCQlkcHJpbnRrKCIlczogYWRkaW5nIHRvIGJhY2tsb2cuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRwcmludGsoIiVzOiBhZGRpbmcgdG8gYmFja2xvZy4uLlxuIiwgX19mdW5jX18pOwogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwogCQlza19hZGRfYmFja2xvZyhzaywgc2tiKTsKIAl9CkBAIC04MDcsNyArODA3LDcgQEAKIAkJZWxzZQogCQkJZ290byBvdXRfa2ZyZWVfc2tiOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgc2tiIGluIGJhY2tsb2dcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgc2tiIGluIGJhY2tsb2dcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfa2ZyZWVfc2tiOwogCX0KIG91dDoKQEAgLTg3NCw3ICs4NzQsNyBAQAogI2lmZGVmIExMQ19SRUZDTlRfREVCVUcKIAlhdG9taWNfaW5jKCZsbGNfc29ja19ucik7CiAJcHJpbnRrKEtFUk5fREVCVUcgIkxMQyBzb2NrZXQgJXAgY3JlYXRlZCBpbiAlcywgbm93IHdlIGhhdmUgJWQgYWxpdmVcbiIsIHNrLAotCQlfX0ZVTkNUSU9OX18sIGF0b21pY19yZWFkKCZsbGNfc29ja19ucikpOworCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmxsY19zb2NrX25yKSk7CiAjZW5kaWYKIG91dDoKIAlyZXR1cm4gc2s7CkBAIC04OTQsNyArODk0LDcgQEAKIAkvKiBTdG9wIGFsbCAocG9zc2libHkpIHJ1bm5pbmcgdGltZXJzICovCiAJbGxjX2Nvbm5fYWNfc3RvcF9hbGxfdGltZXJzKHNrLCBOVUxMKTsKICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQwotCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxuIiwgX19GVU5DVElPTl9fLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxuIiwgX19mdW5jX18sCiAJCXNrYl9xdWV1ZV9sZW4oJmxsYy0+cGR1X3VuYWNrX3EpLAogCQlza2JfcXVldWVfbGVuKCZzay0+c2tfd3JpdGVfcXVldWUpKTsKICNlbmRpZgpAQCAtOTA0LDEzICs5MDQsMTMgQEAKICNpZmRlZiBMTENfUkVGQ05UX0RFQlVHCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcmVmY250KSAhPSAxKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJEZXN0cnVjdGlvbiBvZiBMTEMgc29jayAlcCBkZWxheWVkIGluICVzLCBjbnQ9JWRcbiIsCi0JCQlzaywgX19GVU5DVElPTl9fLCBhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkpOworCQkJc2ssIF9fZnVuY19fLCBhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiJWQgTExDIHNvY2tldHMgYXJlIHN0aWxsIGFsaXZlXG4iLAogCQkJYXRvbWljX3JlYWQoJmxsY19zb2NrX25yKSk7CiAJfSBlbHNlIHsKIAkJYXRvbWljX2RlYygmbGxjX3NvY2tfbnIpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiTExDIHNvY2tldCAlcCByZWxlYXNlZCBpbiAlcywgJWQgYXJlIHN0aWxsIGFsaXZlXG4iLCBzaywKLQkJCV9fRlVOQ1RJT05fXywgYXRvbWljX3JlYWQoJmxsY19zb2NrX25yKSk7CisJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmxsY19zb2NrX25yKSk7CiAJfQogI2VuZGlmCiAJc29ja19wdXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29yZS5jIGIvbmV0L2xsYy9sbGNfY29yZS5jCmluZGV4IDI0OGI1OTAuLjUwZDViMTAgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2NvcmUuYworKysgYi9uZXQvbGxjL2xsY19jb3JlLmMKQEAgLTI1LDggKzI1LDYgQEAKIExJU1RfSEVBRChsbGNfc2FwX2xpc3QpOwogREVGSU5FX1JXTE9DSyhsbGNfc2FwX2xpc3RfbG9jayk7CiAKLXVuc2lnbmVkIGNoYXIgbGxjX3N0YXRpb25fbWFjX3NhW0VUSF9BTEVOXTsKLQogLyoqCiAgKglsbGNfc2FwX2FsbG9jIC0gYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBzYXAuCiAgKgpAQCAtMzcsOCArMzUsOCBAQAogCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBremFsbG9jKHNpemVvZigqc2FwKSwgR0ZQX0FUT01JQyk7CiAKIAlpZiAoc2FwKSB7CisJCS8qIHNhcC0+bGFkZHIubWFjIC0gbGVhdmUgYXMgYSBudWxsLCBpdCdzIGZpbGxlZCBieSBiaW5kICovCiAJCXNhcC0+c3RhdGUgPSBMTENfU0FQX1NUQVRFX0FDVElWRTsKLQkJbWVtY3B5KHNhcC0+bGFkZHIubWFjLCBsbGNfc3RhdGlvbl9tYWNfc2EsIEVUSF9BTEVOKTsKIAkJcndsb2NrX2luaXQoJnNhcC0+c2tfbGlzdC5sb2NrKTsKIAkJYXRvbWljX3NldCgmc2FwLT5yZWZjbnQsIDEpOwogCX0KQEAgLTE2NywxMCArMTY1LDYgQEAKIAlpZiAoZGV2ICE9IE5VTEwpCiAJCWRldiA9IG5leHRfbmV0X2RldmljZShkZXYpOwogCi0JaWYgKGRldiAhPSBOVUxMKQotCQltZW1jcHkobGxjX3N0YXRpb25fbWFjX3NhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1zZXQobGxjX3N0YXRpb25fbWFjX3NhLCAwLCBFVEhfQUxFTik7CiAJZGV2X2FkZF9wYWNrKCZsbGNfcGFja2V0X3R5cGUpOwogCWRldl9hZGRfcGFjaygmbGxjX3RyX3BhY2tldF90eXBlKTsKIAlyZXR1cm4gMDsKQEAgLTE4NSw3ICsxNzksNiBAQAogbW9kdWxlX2luaXQobGxjX2luaXQpOwogbW9kdWxlX2V4aXQobGxjX2V4aXQpOwogCi1FWFBPUlRfU1lNQk9MKGxsY19zdGF0aW9uX21hY19zYSk7CiBFWFBPUlRfU1lNQk9MKGxsY19zYXBfbGlzdCk7CiBFWFBPUlRfU1lNQk9MKGxsY19zYXBfbGlzdF9sb2NrKTsKIEVYUE9SVF9TWU1CT0wobGxjX3NhcF9maW5kKTsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2lucHV0LmMgYi9uZXQvbGxjL2xsY19pbnB1dC5jCmluZGV4IGM0MGM5YjIuLjFjNDVmMTcgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2lucHV0LmMKKysrIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwpAQCAtMTE3LDggKzExNywxMiBAQAogCXNrYl9wdWxsKHNrYiwgbGxjX2xlbik7CiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyXzIpKSB7CiAJCV9fYmUxNiBwZHVsZW4gPSBldGhfaGRyKHNrYiktPmhfcHJvdG87Ci0JCXUxNiBkYXRhX3NpemUgPSBudG9ocyhwZHVsZW4pIC0gbGxjX2xlbjsKKwkJczMyIGRhdGFfc2l6ZSA9IG50b2hzKHBkdWxlbikgLSBsbGNfbGVuOwogCisJCWlmIChkYXRhX3NpemUgPCAwIHx8CisJCSAgICAoKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtCisJCSAgICAgICh1OCAqKXBkdSkgLSBsbGNfbGVuKSA8IGRhdGFfc2l6ZSkKKwkJCXJldHVybiAwOwogCQlpZiAodW5saWtlbHkocHNrYl90cmltX3Jjc3VtKHNrYiwgZGF0YV9zaXplKSkpCiAJCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDYsNyArMTUwLDcgQEAKIAlpbnQgKCpyY3YpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosCiAJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCWdvdG8gZHJvcDsKIAogCS8qCkBAIC0xNTQsNyArMTU4LDcgQEAKIAkgKiByZWNlaXZlcywgZG8gbm90IHRyeSB0byBhbmFseXNlIGl0LgogCSAqLwogCWlmICh1bmxpa2VseShza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QpKSB7Ci0JCWRwcmludGsoIiVzOiBQQUNLRVRfT1RIRVJIT1NUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKCIlczogUEFDS0VUX09USEVSSE9TVFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGRyb3A7CiAJfQogCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwpAQCAtMTY3LDcgKzE3MSw3IEBACiAJICAgICAgIGdvdG8gaGFuZGxlX3N0YXRpb247CiAJc2FwID0gbGxjX3NhcF9maW5kKHBkdS0+ZHNhcCk7CiAJaWYgKHVubGlrZWx5KCFzYXApKSB7LyogdW5rbm93biBTQVAgKi8KLQkJZHByaW50aygiJXM6IGxsY19zYXBfZmluZCglMDJYKSBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18sCisJCWRwcmludGsoIiVzOiBsbGNfc2FwX2ZpbmQoJTAyWCkgZmFpbGVkIVxuIiwgX19mdW5jX18sCiAJCQlwZHUtPmRzYXApOwogCQlnb3RvIGRyb3A7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfcGR1LmMgYi9uZXQvbGxjL2xsY19wZHUuYwppbmRleCBmYTgzMjQzLi4yZTZjYjc5IDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19wZHUuYworKysgYi9uZXQvbGxjL2xsY19wZHUuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJRlJNUl9JTkZPX1NFVF9QRFVfSU5GT18yTE9OR19JTkQoZnJtcl9pbmZvLCB2enl4dyk7CiAJRlJNUl9JTkZPX1NFVF9QRFVfSU5WQUxJRF9Ocl9JTkQoZnJtcl9pbmZvLCB2enl4dyk7CiAJRlJNUl9JTkZPX1NFVF9QRFVfSU5WQUxJRF9Oc19JTkQoZnJtcl9pbmZvLCB2enl4dyk7Ci0Jc2tiX3B1dChza2IsIDUpOworCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGxsY19mcm1yX2luZm8pKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19wcm9jLmMgYi9uZXQvbGxjL2xsY19wcm9jLmMKaW5kZXggY2IzNGJjMC4uNDgyMTJjMCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfcHJvYy5jCisrKyBiL25ldC9sbGMvbGxjX3Byb2MuYwpAQCAtMjM5LDE4ICsyMzksMTQgQEAKIAkJZ290byBvdXQ7CiAJbGxjX3Byb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzb2NrZXQiLCBTX0lSVUdPLCBsbGNfcHJvY19kaXIpOworCXAgPSBwcm9jX2NyZWF0ZSgic29ja2V0IiwgU19JUlVHTywgbGxjX3Byb2NfZGlyLCAmbGxjX3NlcV9zb2NrZXRfZm9wcyk7CiAJaWYgKCFwKQogCQlnb3RvIG91dF9zb2NrZXQ7CiAKLQlwLT5wcm9jX2ZvcHMgPSAmbGxjX3NlcV9zb2NrZXRfZm9wczsKLQotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiY29yZSIsIFNfSVJVR08sIGxsY19wcm9jX2Rpcik7CisJcCA9IHByb2NfY3JlYXRlKCJjb3JlIiwgU19JUlVHTywgbGxjX3Byb2NfZGlyLCAmbGxjX3NlcV9jb3JlX2ZvcHMpOwogCWlmICghcCkKIAkJZ290byBvdXRfY29yZTsKIAotCXAtPnByb2NfZm9wcyA9ICZsbGNfc2VxX2NvcmVfZm9wczsKLQogCXJjID0gMDsKIG91dDoKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19zX2FjLmMgYi9uZXQvbGxjL2xsY19zX2FjLmMKaW5kZXggYWMzZDkzYi4uYTk0YmQ1NiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfc19hYy5jCisrKyBiL25ldC9sbGMvbGxjX3NfYWMuYwpAQCAtMTAzLDcgKzEwMyw4IEBACiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBtYWNfZGEpOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgbWFjX3NhKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmRzYXApOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLT5kZXYpOworCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLT5kZXYsIExMQ19QRFVfVFlQRV9VLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX3hpZF9pbmZvKSk7CiAJaWYgKCFuc2tiKQogCQlnb3RvIG91dDsKIAlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtPmxhZGRyLmxzYXAsIGRzYXAsCkBAIC0xNDQsMTEgKzE0NSwxNSBAQAogCXU4IG1hY19kYVtFVEhfQUxFTl0sIG1hY19zYVtFVEhfQUxFTl0sIGRzYXA7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJaW50IHJjID0gMTsKKwl1MzIgZGF0YV9zaXplOwogCiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBtYWNfZGEpOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgbWFjX3NhKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmRzYXApOwotCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLT5kZXYpOworCisJLyogVGhlIHRlc3QgcmVxdWVzdCBjb21tYW5kIGlzIHR5cGUgVSAobGxjX2xlbiA9IDMpICovCisJZGF0YV9zaXplID0gbnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSAtIDM7CisJbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItPmRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7CiAJaWYgKCFuc2tiKQogCQlnb3RvIG91dDsKIAlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtPmxhZGRyLmxzYXAsIGRzYXAsCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19zYXAuYyBiL25ldC9sbGMvbGxjX3NhcC5jCmluZGV4IDI1MjUxNjUuLmUyZGRkZTcgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX3NhcC5jCisrKyBiL25ldC9sbGMvbGxjX3NhcC5jCkBAIC0yNCwyMCArMjQsNDEgQEAKICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xsYy5oPgogCitzdGF0aWMgaW50IGxsY19tYWNfaGVhZGVyX2xlbih1bnNpZ25lZCBzaG9ydCBkZXZ0eXBlKQoreworCXN3aXRjaCAoZGV2dHlwZSkgeworCWNhc2UgQVJQSFJEX0VUSEVSOgorCWNhc2UgQVJQSFJEX0xPT1BCQUNLOgorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBldGhoZHIpOworI2lmZGVmIENPTkZJR19UUgorCWNhc2UgQVJQSFJEX0lFRUU4MDJfVFI6CisJCXJldHVybiBzaXplb2Yoc3RydWN0IHRyaF9oZHIpOworI2VuZGlmCisJfQorCXJldHVybiAwOworfQorCiAvKioKICAqCWxsY19hbGxvY19mcmFtZSAtIGFsbG9jYXRlcyBza19idWZmIGZvciBmcmFtZQogICoJQGRldjogbmV0d29yayBkZXZpY2UgdGhpcyBza2Igd2lsbCBiZSBzZW50IG92ZXIKKyAqCUB0eXBlOiBwZHUgdHlwZSB0byBhbGxvY2F0ZQorICoJQGRhdGFfc2l6ZTogZGF0YSBzaXplIHRvIGFsbG9jYXRlCiAgKgogICoJQWxsb2NhdGVzIGFuIHNrX2J1ZmYgZm9yIGZyYW1lIGFuZCBpbml0aWFsaXplcyBza19idWZmIGZpZWxkcy4KICAqCVJldHVybnMgYWxsb2NhdGVkIHNrYiBvciAlTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuCiAgKi8KLXN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJdTggdHlwZSwgdTMyIGRhdGFfc2l6ZSkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKDEyOCwgR0ZQX0FUT01JQyk7CisJaW50IGhsZW4gPSB0eXBlID09IExMQ19QRFVfVFlQRV9VID8gMyA6IDQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWhsZW4gKz0gbGxjX21hY19oZWFkZXJfbGVuKGRldi0+dHlwZSk7CisJc2tiID0gYWxsb2Nfc2tiKGhsZW4gKyBkYXRhX3NpemUsIEdGUF9BVE9NSUMpOwogCiAJaWYgKHNrYikgewogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQlza2JfcmVzZXJ2ZShza2IsIDUwKTsKKwkJc2tiX3Jlc2VydmUoc2tiLCBobGVuKTsKIAkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19zdGF0aW9uLmMgYi9uZXQvbGxjL2xsY19zdGF0aW9uLmMKaW5kZXggNmYyZWEyMC4uODNkYTEzMyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfc3RhdGlvbi5jCisrKyBiL25ldC9sbGMvbGxjX3N0YXRpb24uYwpAQCAtMjUzLDEzICsyNTMsMTQgQEAKIHN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF9udWxsX2RzYXBfeGlkX2Moc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmMgPSAxOwotCXN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0+ZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItPmRldiwgTExDX1BEVV9UWVBFX1UsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpOwogCiAJaWYgKCFuc2tiKQogCQlnb3RvIG91dDsKIAlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCAwLCAwLCBMTENfUERVX0NNRCk7CiAJbGxjX3BkdV9pbml0X2FzX3hpZF9jbWQobnNrYiwgTExDX1hJRF9OVUxMX0NMQVNTXzIsIDEyNyk7Ci0JcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsY19zdGF0aW9uX21hY19zYSwgbGxjX3N0YXRpb25fbWFjX3NhKTsKKwlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLT5kZXYtPmRldl9hZGRyLCBza2ItPmRldi0+ZGV2X2FkZHIpOwogCWlmICh1bmxpa2VseShyYykpCiAJCWdvdG8gZnJlZTsKIAlsbGNfc3RhdGlvbl9zZW5kX3BkdShuc2tiKTsKQEAgLTI3NCw3ICsyNzUsOCBAQAogewogCXU4IG1hY19kYVtFVEhfQUxFTl0sIGRzYXA7CiAJaW50IHJjID0gMTsKLQlzdHJ1Y3Qgc2tfYnVmZiogbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLT5kZXYsIExMQ19QRFVfVFlQRV9VLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTsKIAogCWlmICghbnNrYikKIAkJZ290byBvdXQ7CkBAIC0yODMsNyArMjg1LDcgQEAKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmRzYXApOwogCWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIDAsIGRzYXAsIExMQ19QRFVfUlNQKTsKIAlsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMTI3KTsKLQlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjX3N0YXRpb25fbWFjX3NhLCBtYWNfZGEpOworCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItPmRldi0+ZGV2X2FkZHIsIG1hY19kYSk7CiAJaWYgKHVubGlrZWx5KHJjKSkKIAkJZ290byBmcmVlOwogCWxsY19zdGF0aW9uX3NlbmRfcGR1KG5za2IpOwpAQCAtMjk4LDcgKzMwMCwxMiBAQAogewogCXU4IG1hY19kYVtFVEhfQUxFTl0sIGRzYXA7CiAJaW50IHJjID0gMTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItPmRldik7CisJdTMyIGRhdGFfc2l6ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKworCS8qIFRoZSB0ZXN0IHJlcXVlc3QgY29tbWFuZCBpcyB0eXBlIFUgKGxsY19sZW4gPSAzKSAqLworCWRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS0+aF9wcm90bykgLSAzOworCW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLT5kZXYsIExMQ19QRFVfVFlQRV9VLCBkYXRhX3NpemUpOwogCiAJaWYgKCFuc2tiKQogCQlnb3RvIG91dDsKQEAgLTMwNyw3ICszMTQsNyBAQAogCWxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCAmZHNhcCk7CiAJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgMCwgZHNhcCwgTExDX1BEVV9SU1ApOwogCWxsY19wZHVfaW5pdF9hc190ZXN0X3JzcChuc2tiLCBza2IpOwotCXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGNfc3RhdGlvbl9tYWNfc2EsIG1hY19kYSk7CisJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi0+ZGV2LT5kZXZfYWRkciwgbWFjX2RhKTsKIAlpZiAodW5saWtlbHkocmMpKQogCQlnb3RvIGZyZWU7CiAJbGxjX3N0YXRpb25fc2VuZF9wZHUobnNrYik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IDQ1YzdjMGMuLjUyMGE1MTggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9LY29uZmlnCisrKyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCkBAIC0zMiwxNSArMzIsNiBAQAogCSAgZGVmYXVsdCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtLiBZb3Ugc2hvdWxkIGNob29zZQogCSAgdGhpcyB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogCi1jb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9TSU1QTEUKLQlib29sICJTaW1wbGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSIKLQlzZWxlY3QgTUFDODAyMTFfUkNfU0lNUExFCi0JLS0taGVscC0tLQotCSAgU2VsZWN0IHRoZSBzaW1wbGUgcmF0ZSBjb250cm9sIGFzIHRoZSBkZWZhdWx0IHJhdGUKLQkgIGNvbnRyb2wgYWxnb3JpdGhtLiBOb3RlIHRoYXQgdGhpcyBpcyBhIG5vbi1yZXNwb25zaXZlLAotCSAgZHVtYiBhbGdvcml0aG0uIFlvdSBzaG91bGQgY2hvb3NlIHRoZSBQSUQgcmF0ZSBjb250cm9sCi0JICBpbnN0ZWFkLgotCiBjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9OT05FCiAJYm9vbCAiTm8gZGVmYXVsdCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBFTUJFRERFRApAQCAtNTcsNyArNDgsNiBAQAogY29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFQKIAlzdHJpbmcKIAlkZWZhdWx0ICJwaWQiIGlmIE1BQzgwMjExX1JDX0RFRkFVTFRfUElECi0JZGVmYXVsdCAic2ltcGxlIiBpZiBNQUM4MDIxMV9SQ19ERUZBVUxUX1NJTVBMRQogCWRlZmF1bHQgIiIKIAogY29uZmlnIE1BQzgwMjExX1JDX1BJRApAQCAtNzAsMTcgKzYwLDE3IEBACiAJICBTYXkgWSBvciBNIHVubGVzcyB5b3UncmUgc3VyZSB5b3Ugd2FudCB0byB1c2UgYQogCSAgZGlmZmVyZW50IHJhdGUgY29udHJvbCBhbGdvcml0aG0uCiAKLWNvbmZpZyBNQUM4MDIxMV9SQ19TSU1QTEUKLQl0cmlzdGF0ZSAiU2ltcGxlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gKERFUFJFQ0FURUQpIgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSB2ZXJ5IHNpbXBsZSwgbm9uLXJlc3BvbnNpdmUgVFgKLQkgIHJhdGUgY29udHJvbCBhbGdvcml0aG0uIFRoaXMgYWxnb3JpdGhtIGlzIGRlcHJlY2F0ZWQKLQkgIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIGluIHRoZSBuZWFyIGZ1dHVyZS4KLQkgIEl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBQSUQgYWxnb3JpdGhtLgotCi0JICBTYXkgTiB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogZW5kbWVudQogCitjb25maWcgTUFDODAyMTFfTUVTSAorCWJvb2wgIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgKHByZS04MDIuMTFzKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSBUaGlzIG9wdGlvbnMgZW5hYmxlcyBzdXBwb3J0IG9mIERyYWZ0IDgwMi4xMXMgbWVzaCBuZXR3b3JraW5nLgorCSBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gRHJhZnQgMS4wOCBvZiB0aGUgTWVzaCBOZXR3b3JraW5nCisJIGFtZW5kbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgaHR0cDovL28xMXMub3JnLy4KKworCiBjb25maWcgTUFDODAyMTFfTEVEUwogCWJvb2wgIkVuYWJsZSBMRUQgdHJpZ2dlcnMiCiAJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBMRURTX1RSSUdHRVJTCkBAIC0xNjYsMyArMTU2LDEwIEBACiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBwcmludCBvdXQgdmVyYm9zZSBwb3dlcnNhdmUKIAkgIG1vZGUgZGVidWcgbWVzc2FnZXMuCisKK2NvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX01QTF9ERUJVRworCWJvb2wgIlZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gTUFDODAyMTFfREVCVUcgJiYgTUFDODAyMTFfTUVTSAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gcHJpbnQgb3V0IHZlcmJvc2UgbWVzaCBwZWVyIGxpbmsKKwkgIGRlYnVnIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL01ha2VmaWxlIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCmluZGV4IDU0ZjQ2YmMuLjRlNTg0N2YgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZQorKysgYi9uZXQvbWFjODAyMTEvTWFrZWZpbGUKQEAgLTEwLDE2ICsxMCwxNSBAQAogCiAjIG1hYzgwMjExIG9iamVjdHMKIG1hYzgwMjExLXkgOj0gXAotCWllZWU4MDIxMS5vIFwKLQlpZWVlODAyMTFfaW9jdGwubyBcCisJbWFpbi5vIFwKKwl3ZXh0Lm8gXAogCXN0YV9pbmZvLm8gXAogCXdlcC5vIFwKIAl3cGEubyBcCi0JaWVlZTgwMjExX3N0YS5vIFwKLQlpZWVlODAyMTFfaWZhY2UubyBcCi0JaWVlZTgwMjExX3JhdGUubyBcCisJbWxtZS5vIFwKKwlpZmFjZS5vIFwKKwlyYXRlLm8gXAogCW1pY2hhZWwubyBcCi0JcmVnZG9tYWluLm8gXAogCXRraXAubyBcCiAJYWVzX2NjbS5vIFwKIAljZmcubyBcCkBAIC0yOSw3ICsyOCw3IEBACiAJdXRpbC5vIFwKIAlldmVudC5vCiAKLW1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICs9IGllZWU4MDIxMV9sZWQubworbWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTEVEUykgKz0gbGVkLm8KIG1hYzgwMjExLSQoQ09ORklHX05FVF9TQ0hFRCkgKz0gd21lLm8KIG1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFwKIAlkZWJ1Z2ZzLm8gXApAQCAtMzcsMTEgKzM2LDE1IEBACiAJZGVidWdmc19uZXRkZXYubyBcCiAJZGVidWdmc19rZXkubwogCittYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9NRVNIKSArPSBcCisJbWVzaC5vIFwKKwltZXNoX3BhdGh0YmwubyBcCisJbWVzaF9wbGluay5vIFwKKwltZXNoX2h3bXAubworCiAKICMgQnVpbGQgcmF0ZSBjb250cm9sIGFsZ29yaXRobShzKQotQ0ZMQUdTX3JjODAyMTFfc2ltcGxlLm8gKz0gLURSQzgwMjExX1NJTVBMRV9DT01QSUxFCiBDRkxBR1NfcmM4MDIxMV9waWRfYWxnby5vICs9IC1EUkM4MDIxMV9QSURfQ09NUElMRQotbWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfUkNfU0lNUExFKSArPSByYzgwMjExX3NpbXBsZS5vCiBtYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9SQ19QSUQpICs9ICQocmMtcGlkLSQoQ09ORklHX01BQzgwMjExX1JDX1BJRCkpCiAKICMgTW9kdWxhciByYXRlIGFsZ29yaXRobXMgYXJlIGFzc2lnbmVkIHRvIG1hYzgwMjExLW0gLSBtYWtlIHNlcGFyYXRlIG1vZHVsZXMKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMgYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5jCmluZGV4IGU2MmZlNTUuLjU5ZjE2OTEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMKKysrIGIvbmV0L21hYzgwMjExL2Flc19jY20uYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExX2tleS5oIgorI2luY2x1ZGUgImtleS5oIgogI2luY2x1ZGUgImFlc19jY20uaCIKIAogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggMjJjOTYxOS4uNjk5ZDk3YiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTQsNyArMTQsOCBAQAogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCiAjaW5jbHVkZSAiY2ZnLmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExX3JhdGUuaCIKKyNpbmNsdWRlICJyYXRlLmgiCisjaW5jbHVkZSAibWVzaC5oIgogCiBzdGF0aWMgZW51bSBpZWVlODAyMTFfaWZfdHlwZXMKIG5sODAyMTFfdHlwZV90b19tYWM4MDIxMV90eXBlKGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKQEAgLTI4LDE2ICsyOSwyNiBAQAogCQlyZXR1cm4gSUVFRTgwMjExX0lGX1RZUEVfU1RBOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKIAkJcmV0dXJuIElFRUU4MDIxMV9JRl9UWVBFX01OVFI7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCXJldHVybiBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOworI2VuZGlmCisJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCXJldHVybiBJRUVFODAyMTFfSUZfVFlQRV9XRFM7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQ7CiAJfQogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgY2hhciAqbmFtZSwKLQkJCSAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpCisJCQkgICAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAorCQkJICAgICAgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAllbnVtIGllZWU4MDIxMV9pZl90eXBlcyBpdHlwZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCWludCBlcnI7CiAKIAlpZiAodW5saWtlbHkobG9jYWwtPnJlZ19zdGF0ZSAhPSBJRUVFODAyMTFfREVWX1JFR0lTVEVSRUQpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQ2LDcgKzU3LDEzIEBACiAJaWYgKGl0eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIGllZWU4MDIxMV9pZl9hZGQobG9jYWwtPm1kZXYsIG5hbWUsIE5VTEwsIGl0eXBlKTsKKwllcnIgPSBpZWVlODAyMTFfaWZfYWRkKGxvY2FsLT5tZGV2LCBuYW1lLCAmZGV2LCBpdHlwZSwgcGFyYW1zKTsKKwlpZiAoZXJyIHx8IGl0eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX01OVFIgfHwgIWZsYWdzKQorCQlyZXR1cm4gZXJyOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXNkYXRhLT51Lm1udHJfZmxhZ3MgPSAqZmxhZ3M7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgaWZpbmRleCkKQEAgLTY5LDcgKzg2LDggQEAKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4LAotCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQorCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAorCQkJCSAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC05OSw2ICsxMTcsMTUgQEAKIAlpZWVlODAyMTFfaWZfcmVpbml0KGRldik7CiAJaWVlZTgwMjExX2lmX3NldF90eXBlKGRldiwgaXR5cGUpOwogCisJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKKwkJaWVlZTgwMjExX2lmX3N0YV9zZXRfbWVzaF9pZCgmc2RhdGEtPnUuc3RhLAorCQkJCQkgICAgIHBhcmFtcy0+bWVzaF9pZF9sZW4sCisJCQkJCSAgICAgcGFyYW1zLT5tZXNoX2lkKTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUiB8fCAhZmxhZ3MpCisJCXJldHVybiAwOworCisJc2RhdGEtPnUubW50cl9mbGFncyA9ICpmbGFnczsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5LDcgKzEzNiw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCWVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnOwotCWludCByZXQ7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKKwlpbnQgZXJyOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCkBAIC0xMjgsMjEgKzE1NiwyOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlrZXkgPSBpZWVlODAyMTFfa2V5X2FsbG9jKGFsZywga2V5X2lkeCwgcGFyYW1zLT5rZXlfbGVuLCBwYXJhbXMtPmtleSk7CisJaWYgKCFrZXkpCisJCXJldHVybiAtRU5PTUVNOworCisJcmN1X3JlYWRfbG9jaygpOworCiAJaWYgKG1hY19hZGRyKSB7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YS0+bG9jYWwsIG1hY19hZGRyKTsKLQkJaWYgKCFzdGEpCi0JCQlyZXR1cm4gLUVOT0VOVDsKKwkJaWYgKCFzdGEpIHsKKwkJCWllZWU4MDIxMV9rZXlfZnJlZShrZXkpOworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQogCX0KIAotCXJldCA9IDA7Ci0JaWYgKCFpZWVlODAyMTFfa2V5X2FsbG9jKHNkYXRhLCBzdGEsIGFsZywga2V5X2lkeCwKLQkJCQkgcGFyYW1zLT5rZXlfbGVuLCBwYXJhbXMtPmtleSkpCi0JCXJldCA9IC1FTk9NRU07CisJaWVlZTgwMjExX2tleV9saW5rKGtleSwgc2RhdGEsIHN0YSk7CiAKLQlpZiAoc3RhKQotCQlzdGFfaW5mb19wdXQoc3RhKTsKKwllcnIgPSAwOworIG91dF91bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTE1NCwyNyArMTg5LDM3IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisKIAlpZiAobWFjX2FkZHIpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwogCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEtPmxvY2FsLCBtYWNfYWRkcik7CiAJCWlmICghc3RhKQotCQkJcmV0dXJuIC1FTk9FTlQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAKLQkJcmV0ID0gMDsKLQkJaWYgKHN0YS0+a2V5KQorCQlpZiAoc3RhLT5rZXkpIHsKIAkJCWllZWU4MDIxMV9rZXlfZnJlZShzdGEtPmtleSk7Ci0JCWVsc2UKLQkJCXJldCA9IC1FTk9FTlQ7CisJCQlXQVJOX09OKHN0YS0+a2V5KTsKKwkJCXJldCA9IDA7CisJCX0KIAotCQlzdGFfaW5mb19wdXQoc3RhKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlmICghc2RhdGEtPmtleXNba2V5X2lkeF0pCi0JCXJldHVybiAtRU5PRU5UOworCWlmICghc2RhdGEtPmtleXNba2V5X2lkeF0pIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAogCWllZWU4MDIxMV9rZXlfZnJlZShzZGF0YS0+a2V5c1trZXlfaWR4XSk7CisJV0FSTl9PTihzZGF0YS0+a2V5c1trZXlfaWR4XSk7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworIG91dF91bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xOTEsNiArMjM2LDggQEAKIAl1MTYgaXYxNjsKIAlpbnQgZXJyID0gLUVOT0VOVDsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCWlmIChtYWNfYWRkcikgewogCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEtPmxvY2FsLCBtYWNfYWRkcik7CiAJCWlmICghc3RhKQpAQCAtMjU0LDggKzMwMSw3IEBACiAJZXJyID0gMDsKIAogIG91dDoKLQlpZiAoc3RhKQotCQlzdGFfaW5mb19wdXQoc3RhKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjUsMzUgKzMxMSw4MyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCisJcmN1X3JlYWRfbG9jaygpOworCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIGtleV9pZHgpOwogCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgdTggKm1hYywgc3RydWN0IHN0YXRpb25fc3RhdHMgKnN0YXRzKQorc3RhdGljIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworCisJc2luZm8tPmZpbGxlZCA9IFNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FIHwKKwkJCVNUQVRJT05fSU5GT19SWF9CWVRFUyB8CisJCQlTVEFUSU9OX0lORk9fVFhfQllURVM7CisKKwlzaW5mby0+aW5hY3RpdmVfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCk7CisJc2luZm8tPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKKwlzaW5mby0+dHhfYnl0ZXMgPSBzdGEtPnR4X2J5dGVzOworCisJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19MTElEIHwKKwkJCQkgU1RBVElPTl9JTkZPX1BMSUQgfAorCQkJCSBTVEFUSU9OX0lORk9fUExJTktfU1RBVEU7CisKKwkJc2luZm8tPmxsaWQgPSBsZTE2X3RvX2NwdShzdGEtPmxsaWQpOworCQlzaW5mby0+cGxpZCA9IGxlMTZfdG9fY3B1KHN0YS0+cGxpZCk7CisJCXNpbmZvLT5wbGlua19zdGF0ZSA9IHN0YS0+cGxpbmtfc3RhdGU7CisjZW5kaWYKKwl9Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIGludCBpZHgsIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IHJldCA9IC1FTk9FTlQ7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybiAtRU5PRU5UOworCXJjdV9yZWFkX2xvY2soKTsKKworCXN0YSA9IHN0YV9pbmZvX2dldF9ieV9pZHgobG9jYWwsIGlkeCwgZGV2KTsKKwlpZiAoc3RhKSB7CisJCXJldCA9IDA7CisJCW1lbWNweShtYWMsIHN0YS0+YWRkciwgRVRIX0FMRU4pOworCQlzdGFfc2V0X3NpbmZvKHN0YSwgc2luZm8pOworCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCXJjdV9yZWFkX2xvY2soKTsKIAogCS8qIFhYWDogdmVyaWZ5IHN0YS0+ZGV2ID09IGRldiAqLwogCi0Jc3RhdHMtPmZpbGxlZCA9IFNUQVRJT05fU1RBVF9JTkFDVElWRV9USU1FIHwKLQkJCVNUQVRJT05fU1RBVF9SWF9CWVRFUyB8Ci0JCQlTVEFUSU9OX1NUQVRfVFhfQllURVM7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtYWMpOworCWlmIChzdGEpIHsKKwkJcmV0ID0gMDsKKwkJc3RhX3NldF9zaW5mbyhzdGEsIHNpbmZvKTsKKwl9CiAKLQlzdGF0cy0+aW5hY3RpdmVfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCk7Ci0Jc3RhdHMtPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKLQlzdGF0cy0+dHhfYnl0ZXMgPSBzdGEtPnR4X2J5dGVzOworCXJjdV9yZWFkX3VubG9jaygpOwogCi0Jc3RhX2luZm9fcHV0KHN0YSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNDg2LDggKzU4MCw4IEBACiAJbXNnLT54aWRfaW5mb1sxXSA9IDE7CS8qIExMQyB0eXBlcy9jbGFzc2VzOiBUeXBlIDEgTExDICovCiAJbXNnLT54aWRfaW5mb1syXSA9IDA7CS8qIFhJRCBzZW5kZXIncyByZWNlaXZlIHdpbmRvdyBzaXplIChSVykgKi8KIAotCXNrYi0+ZGV2ID0gc3RhLT5kZXY7Ci0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc3RhLT5kZXYpOworCXNrYi0+ZGV2ID0gc3RhLT5zZGF0YS0+ZGV2OworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHN0YS0+c2RhdGEtPmRldik7CiAJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiAJbmV0aWZfcngoc2tiKTsKIH0KQEAgLTQ5OCw3ICs1OTIsMTQgQEAKIHsKIAl1MzIgcmF0ZXM7CiAJaW50IGksIGo7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKKworCS8qCisJICogRklYTUU6IHVwZGF0aW5nIHRoZSBmbGFncyBpcyByYWN5IHdoZW4gdGhpcyBmdW5jdGlvbiBpcworCSAqCSAgY2FsbGVkIGZyb20gaWVlZTgwMjExX2NoYW5nZV9zdGF0aW9uKCksIHRoaXMgd2lsbAorCSAqCSAgYmUgcmVzb2x2ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCisJICovCiAKIAlpZiAocGFyYW1zLT5zdGF0aW9uX2ZsYWdzICYgU1RBVElPTl9GTEFHX0NIQU5HRUQpIHsKIAkJc3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfQVVUSE9SSVpFRDsKQEAgLTUxNCw2ICs2MTUsMTMgQEAKIAkJCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfV01FOwogCX0KIAorCS8qCisJICogRklYTUU6IHVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgcmFjeSB3aGVuIHRoaXMKKwkgKgkgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGllZWU4MDIxMV9jaGFuZ2Vfc3RhdGlvbigpLgorCSAqCSAgSG93ZXZlciwgYWxsIHRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHN0YXRpYyBzbworCSAqCSAgbWF5YmUgd2Ugc2hvdWxkIGp1c3QgcmVqZWN0IGF0dGVtcHMgdG8gY2hhbmdlIGl0LgorCSAqLworCiAJaWYgKHBhcmFtcy0+YWlkKSB7CiAJCXN0YS0+YWlkID0gcGFyYW1zLT5haWQ7CiAJCWlmIChzdGEtPmFpZCA+IElFRUU4MDIxMV9NQVhfQUlEKQpAQCAtNTI1LDE1ICs2MzMsMjcgQEAKIAogCWlmIChwYXJhbXMtPnN1cHBvcnRlZF9yYXRlcykgewogCQlyYXRlcyA9IDA7Ci0JCW1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPm9wZXJfY2hhbm5lbC0+YmFuZF07CisKIAkJZm9yIChpID0gMDsgaSA8IHBhcmFtcy0+c3VwcG9ydGVkX3JhdGVzX2xlbjsgaSsrKSB7CiAJCQlpbnQgcmF0ZSA9IChwYXJhbXMtPnN1cHBvcnRlZF9yYXRlc1tpXSAmIDB4N2YpICogNTsKLQkJCWZvciAoaiA9IDA7IGogPCBtb2RlLT5udW1fcmF0ZXM7IGorKykgewotCQkJCWlmIChtb2RlLT5yYXRlc1tqXS5yYXRlID09IHJhdGUpCisJCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykgeworCQkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSByYXRlKQogCQkJCQlyYXRlcyB8PSBCSVQoaik7CiAJCQl9CiAJCX0KLQkJc3RhLT5zdXBwX3JhdGVzID0gcmF0ZXM7CisJCXN0YS0+c3VwcF9yYXRlc1tsb2NhbC0+b3Blcl9jaGFubmVsLT5iYW5kXSA9IHJhdGVzOworCX0KKworCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmIHBhcmFtcy0+cGxpbmtfYWN0aW9uKSB7CisJCXN3aXRjaCAocGFyYW1zLT5wbGlua19hY3Rpb24pIHsKKwkJY2FzZSBQTElOS19BQ1RJT05fT1BFTjoKKwkJCW1lc2hfcGxpbmtfb3BlbihzdGEpOworCQkJYnJlYWs7CisJCWNhc2UgUExJTktfQUNUSU9OX0JMT0NLOgorCQkJbWVzaF9wbGlua19ibG9jayhzdGEpOworCQkJYnJlYWs7CisJCX0KIAl9CiB9CiAKQEAgLTU0MywxOCArNjYzLDEyIEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlpbnQgZXJyOwogCiAJLyogUHJldmVudCBhIHJhY2Ugd2l0aCBjaGFuZ2luZyB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSAqLwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVORVRET1dOOwogCi0JLyogWFhYOiBnZXQgc3RhIGJlbG9uZ2luZyB0byBkZXYgKi8KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7Ci0JaWYgKHN0YSkgewotCQlzdGFfaW5mb19wdXQoc3RhKTsKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQotCiAJaWYgKHBhcmFtcy0+dmxhbikgewogCQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHBhcmFtcy0+dmxhbik7CiAKQEAgLTU2NCwyMiArNjc4LDM2IEBACiAJfSBlbHNlCiAJCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCXN0YSA9IHN0YV9pbmZvX2FkZChsb2NhbCwgZGV2LCBtYWMsIEdGUF9LRVJORUwpOworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWFjLCBkZXYtPmRldl9hZGRyKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihtYWMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBtYWMsIEdGUF9LRVJORUwpOwogCWlmICghc3RhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXN0YS0+ZGV2ID0gc2RhdGEtPmRldjsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKQotCQlpZWVlODAyMTFfc2VuZF9sYXllcjJfdXBkYXRlKHN0YSk7Ci0KIAlzdGEtPmZsYWdzID0gV0xBTl9TVEFfQVVUSCB8IFdMQU5fU1RBX0FTU09DOwogCiAJc3RhX2FwcGx5X3BhcmFtZXRlcnMobG9jYWwsIHN0YSwgcGFyYW1zKTsKIAogCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhLCBsb2NhbCk7CiAKLQlzdGFfaW5mb19wdXQoc3RhKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwllcnIgPSBzdGFfaW5mb19pbnNlcnQoc3RhKTsKKwlpZiAoZXJyKSB7CisJCS8qIFNUQSBoYXMgYmVlbiBmcmVlZCAqLworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4gfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKQorCQlpZWVlODAyMTFfc2VuZF9sYXllcjJfdXBkYXRlKHN0YSk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTg3LDE5ICs3MTUsMjYgQEAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJIHU4ICptYWMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAKIAlpZiAobWFjKSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwogCQkvKiBYWFg6IGdldCBzdGEgYmVsb25naW5nIHRvIGRldiAqLwogCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7Ci0JCWlmICghc3RhKQorCQlpZiAoIXN0YSkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQogCi0JCXN0YV9pbmZvX2ZyZWUoc3RhKTsKLQkJc3RhX2luZm9fcHV0KHN0YSk7CisJCXN0YV9pbmZvX3VubGluaygmc3RhKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJc3RhX2luZm9fZGVzdHJveShzdGEpOwogCX0gZWxzZQotCQlzdGFfaW5mb19mbHVzaChsb2NhbCwgZGV2KTsKKwkJc3RhX2luZm9fZmx1c2gobG9jYWwsIHNkYXRhKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjEzLDI5ICs3NDgsMjA0IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqdmxhbnNkYXRhOwogCisJcmN1X3JlYWRfbG9jaygpOworCiAJLyogWFhYOiBnZXQgc3RhIGJlbG9uZ2luZyB0byBkZXYgKi8KIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7Ci0JaWYgKCFzdGEpCisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PRU5UOworCX0KIAotCWlmIChwYXJhbXMtPnZsYW4gJiYgcGFyYW1zLT52bGFuICE9IHN0YS0+ZGV2KSB7CisJaWYgKHBhcmFtcy0+dmxhbiAmJiBwYXJhbXMtPnZsYW4gIT0gc3RhLT5zZGF0YS0+ZGV2KSB7CiAJCXZsYW5zZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHBhcmFtcy0+dmxhbik7CiAKIAkJaWYgKHZsYW5zZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTiB8fAotCQkgICAgdmxhbnNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKKwkJICAgIHZsYW5zZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAotCQlzdGEtPmRldiA9IHBhcmFtcy0+dmxhbjsKKwkJc3RhLT5zZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHBhcmFtcy0+dmxhbik7CiAJCWllZWU4MDIxMV9zZW5kX2xheWVyMl91cGRhdGUoc3RhKTsKIAl9CiAKIAlzdGFfYXBwbHlfcGFyYW1ldGVycyhsb2NhbCwgc3RhLCBwYXJhbXMpOwogCi0Jc3RhX2luZm9fcHV0KHN0YSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICitzdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfbXBhdGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgdTggKmRzdCwgdTggKm5leHRfaG9wKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCBlcnI7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTkVURE9XTjsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG5leHRfaG9wKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJZXJyID0gbWVzaF9wYXRoX2FkZChkc3QsIGRldik7CisJaWYgKGVycikgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZHN0LCBkZXYpOworCWlmICghbXBhdGgpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5YSU87CisJfQorCW1lc2hfcGF0aF9maXhfbmV4dGhvcChtcGF0aCwgc3RhKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfbXBhdGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgdTggKmRzdCkKK3sKKwlpZiAoZHN0KQorCQlyZXR1cm4gbWVzaF9wYXRoX2RlbChkc3QsIGRldik7CisKKwltZXNoX3BhdGhfZmx1c2goZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBuZXh0X2hvcCk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCW1wYXRoID0gbWVzaF9wYXRoX2xvb2t1cChkc3QsIGRldik7CisJaWYgKCFtcGF0aCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJbWVzaF9wYXRoX2ZpeF9uZXh0aG9wKG1wYXRoLCBzdGEpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1wYXRoX3NldF9waW5mbyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgdTggKm5leHRfaG9wLAorCQkJICAgIHN0cnVjdCBtcGF0aF9pbmZvICpwaW5mbykKK3sKKwlpZiAobXBhdGgtPm5leHRfaG9wKQorCQltZW1jcHkobmV4dF9ob3AsIG1wYXRoLT5uZXh0X2hvcC0+YWRkciwgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtc2V0KG5leHRfaG9wLCAwLCBFVEhfQUxFTik7CisKKwlwaW5mby0+ZmlsbGVkID0gTVBBVEhfSU5GT19GUkFNRV9RTEVOIHwKKwkJCU1QQVRIX0lORk9fRFNOIHwKKwkJCU1QQVRIX0lORk9fTUVUUklDIHwKKwkJCU1QQVRIX0lORk9fRVhQVElNRSB8CisJCQlNUEFUSF9JTkZPX0RJU0NPVkVSWV9USU1FT1VUIHwKKwkJCU1QQVRIX0lORk9fRElTQ09WRVJZX1JFVFJJRVMgfAorCQkJTVBBVEhfSU5GT19GTEFHUzsKKworCXBpbmZvLT5mcmFtZV9xbGVuID0gbXBhdGgtPmZyYW1lX3F1ZXVlLnFsZW47CisJcGluZm8tPmRzbiA9IG1wYXRoLT5kc247CisJcGluZm8tPm1ldHJpYyA9IG1wYXRoLT5tZXRyaWM7CisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG1wYXRoLT5leHBfdGltZSkpCisJCXBpbmZvLT5leHB0aW1lID0gamlmZmllc190b19tc2VjcyhtcGF0aC0+ZXhwX3RpbWUgLSBqaWZmaWVzKTsKKwlwaW5mby0+ZGlzY292ZXJ5X3RpbWVvdXQgPQorCQkJamlmZmllc190b19tc2VjcyhtcGF0aC0+ZGlzY292ZXJ5X3RpbWVvdXQpOworCXBpbmZvLT5kaXNjb3ZlcnlfcmV0cmllcyA9IG1wYXRoLT5kaXNjb3ZlcnlfcmV0cmllczsKKwlwaW5mby0+ZmxhZ3MgPSAwOworCWlmIChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKQorCQlwaW5mby0+ZmxhZ3MgfD0gTkw4MDIxMV9NUEFUSF9GTEFHX0FDVElWRTsKKwlpZiAobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykKKwkJcGluZm8tPmZsYWdzIHw9IE5MODAyMTFfTVBBVEhfRkxBR19SRVNPTFZJTkc7CisJaWYgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9EU05fVkFMSUQpCisJCXBpbmZvLT5mbGFncyB8PSBOTDgwMjExX01QQVRIX0ZMQUdfRFNOX1ZBTElEOworCWlmIChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfRklYRUQpCisJCXBpbmZvLT5mbGFncyB8PSBOTDgwMjExX01QQVRIX0ZMQUdfRklYRUQ7CisJaWYgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9SRVNPTFZJTkcpCisJCXBpbmZvLT5mbGFncyB8PSBOTDgwMjExX01QQVRIX0ZMQUdfUkVTT0xWSU5HOworCisJcGluZm8tPmZsYWdzID0gbXBhdGgtPmZsYWdzOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfbXBhdGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICB1OCAqZHN0LCB1OCAqbmV4dF9ob3AsIHN0cnVjdCBtcGF0aF9pbmZvICpwaW5mbykKKworeworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZHN0LCBkZXYpOworCWlmICghbXBhdGgpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwltZW1jcHkoZHN0LCBtcGF0aC0+ZHN0LCBFVEhfQUxFTik7CisJbXBhdGhfc2V0X3BpbmZvKG1wYXRoLCBuZXh0X2hvcCwgcGluZm8pOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9kdW1wX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIGludCBpZHgsIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCwKKwkJCQkgc3RydWN0IG1wYXRoX2luZm8gKnBpbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXBfYnlfaWR4KGlkeCwgZGV2KTsKKwlpZiAoIW1wYXRoKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJbWVtY3B5KGRzdCwgbXBhdGgtPmRzdCwgRVRIX0FMRU4pOworCW1wYXRoX3NldF9waW5mbyhtcGF0aCwgbmV4dF9ob3AsIHBpbmZvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2RlbF9pZmFjZSwKQEAgLTY1MSw0ICs5NjEsMTIgQEAKIAkuZGVsX3N0YXRpb24gPSBpZWVlODAyMTFfZGVsX3N0YXRpb24sCiAJLmNoYW5nZV9zdGF0aW9uID0gaWVlZTgwMjExX2NoYW5nZV9zdGF0aW9uLAogCS5nZXRfc3RhdGlvbiA9IGllZWU4MDIxMV9nZXRfc3RhdGlvbiwKKwkuZHVtcF9zdGF0aW9uID0gaWVlZTgwMjExX2R1bXBfc3RhdGlvbiwKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCS5hZGRfbXBhdGggPSBpZWVlODAyMTFfYWRkX21wYXRoLAorCS5kZWxfbXBhdGggPSBpZWVlODAyMTFfZGVsX21wYXRoLAorCS5jaGFuZ2VfbXBhdGggPSBpZWVlODAyMTFfY2hhbmdlX21wYXRoLAorCS5nZXRfbXBhdGggPSBpZWVlODAyMTFfZ2V0X21wYXRoLAorCS5kdW1wX21wYXRoID0gaWVlZTgwMjExX2R1bXBfbXBhdGgsCisjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwppbmRleCA2MDUxNGIyLi4xY2NjYmZkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfcmF0ZS5oIgorI2luY2x1ZGUgInJhdGUuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKIGludCBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE5LDQxICsxOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICppZWVlODAyMTFfbW9kZV9zdHIoaW50IG1vZGUpCi17Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUE6Ci0JCXJldHVybiAiSUVFRSA4MDIuMTFhIjsKLQljYXNlIE1PREVfSUVFRTgwMjExQjoKLQkJcmV0dXJuICJJRUVFIDgwMi4xMWIiOwotCWNhc2UgTU9ERV9JRUVFODAyMTFHOgotCQlyZXR1cm4gIklFRUUgODAyLjExZyI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJVTktOT1dOIjsKLQl9Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IG1vZGVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGU7Ci0JY2hhciBidWZbMTUwXSwgKnAgPSBidWY7Ci0KLQkvKiBGSVhNRTogbG9ja2luZyEgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZsb2NhbC0+bW9kZXNfbGlzdCwgbGlzdCkgewotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwKLQkJCSAgICAgICAiJXNcbiIsIGllZWU4MDIxMV9tb2RlX3N0cihtb2RlLT5tb2RlKSk7Ci0JfQotCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHAtYnVmKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9kZXNfb3BzID0gewotCS5yZWFkID0gbW9kZXNfcmVhZCwKLQkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAotfTsKLQogI2RlZmluZSBERUJVR0ZTX1JFQURPTkxZX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJXAogc3RhdGljIHNzaXplX3QgbmFtZSMjIF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJXAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJCVwKQEAgLTcyLDcgKzM3LDcgQEAKIH07CiAKICNkZWZpbmUgREVCVUdGU19BREQobmFtZSkJCQkJCQlcCi0JbG9jYWwtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0NDQsIHBoeWQsCVwKKwlsb2NhbC0+ZGVidWdmcy5uYW1lID0gZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDQwMCwgcGh5ZCwJXAogCQkJCQkJICBsb2NhbCwgJm5hbWUjIyBfb3BzKTsKIAogI2RlZmluZSBERUJVR0ZTX0RFTChuYW1lKQkJCQkJCVwKQEAgLTgwLDEwICs0NSw4IEBACiAJbG9jYWwtPmRlYnVnZnMubmFtZSA9IE5VTEw7CiAKIAotREVCVUdGU19SRUFET05MWV9GSUxFKGNoYW5uZWwsIDIwLCAiJWQiLAotCQkgICAgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsKTsKIERFQlVHRlNfUkVBRE9OTFlfRklMRShmcmVxdWVuY3ksIDIwLCAiJWQiLAotCQkgICAgICBsb2NhbC0+aHcuY29uZi5mcmVxKTsKKwkJICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogREVCVUdGU19SRUFET05MWV9GSUxFKGFudGVubmFfc2VsX3R4LCAyMCwgIiVkIiwKIAkJICAgICAgbG9jYWwtPmh3LmNvbmYuYW50ZW5uYV9zZWxfdHgpOwogREVCVUdGU19SRUFET05MWV9GSUxFKGFudGVubmFfc2VsX3J4LCAyMCwgIiVkIiwKQEAgLTEwMCw4ICs2Myw2IEBACiAJCSAgICAgIGxvY2FsLT5sb25nX3JldHJ5X2xpbWl0KTsKIERFQlVHRlNfUkVBRE9OTFlfRklMRSh0b3RhbF9wc19idWZmZXJlZCwgMjAsICIlZCIsCiAJCSAgICAgIGxvY2FsLT50b3RhbF9wc19idWZmZXJlZCk7Ci1ERUJVR0ZTX1JFQURPTkxZX0ZJTEUobW9kZSwgMjAsICIlcyIsCi0JCSAgICAgIGllZWU4MDIxMV9tb2RlX3N0cihsb2NhbC0+aHcuY29uZi5waHltb2RlKSk7CiBERUJVR0ZTX1JFQURPTkxZX0ZJTEUod2VwX2l2LCAyMCwgIiUjMDZ4IiwKIAkJICAgICAgbG9jYWwtPndlcF9pdiAmIDB4ZmZmZmZmKTsKIERFQlVHRlNfUkVBRE9OTFlfRklMRShyYXRlX2N0cmxfYWxnLCAxMDAsICIlcyIsCkBAIC0xNjksNyArMTMwLDcgQEAKIH07CiAKICNkZWZpbmUgREVCVUdGU19TVEFUU19BREQobmFtZSkJCQkJCQlcCi0JbG9jYWwtPmRlYnVnZnMuc3RhdHMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0NDQsIHN0YXRzZCxcCisJbG9jYWwtPmRlYnVnZnMuc3RhdHMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsIHN0YXRzZCxcCiAJCWxvY2FsLCAmc3RhdHNfICMjbmFtZSMjIF9vcHMpOwogCiAjZGVmaW5lIERFQlVHRlNfU1RBVFNfREVMKG5hbWUpCQkJCQkJXApAQCAtMjk0LDcgKzI1NSw2IEBACiAJbG9jYWwtPmRlYnVnZnMuc3RhdGlvbnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXRpb25zIiwgcGh5ZCk7CiAJbG9jYWwtPmRlYnVnZnMua2V5cyA9IGRlYnVnZnNfY3JlYXRlX2Rpcigia2V5cyIsIHBoeWQpOwogCi0JREVCVUdGU19BREQoY2hhbm5lbCk7CiAJREVCVUdGU19BREQoZnJlcXVlbmN5KTsKIAlERUJVR0ZTX0FERChhbnRlbm5hX3NlbF90eCk7CiAJREVCVUdGU19BREQoYW50ZW5uYV9zZWxfcngpOwpAQCAtMzA0LDkgKzI2NCw3IEBACiAJREVCVUdGU19BREQoc2hvcnRfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfQUREKGxvbmdfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfQUREKHRvdGFsX3BzX2J1ZmZlcmVkKTsKLQlERUJVR0ZTX0FERChtb2RlKTsKIAlERUJVR0ZTX0FERCh3ZXBfaXYpOwotCURFQlVHRlNfQUREKG1vZGVzKTsKIAogCXN0YXRzZCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic3RhdGlzdGljcyIsIHBoeWQpOwogCWxvY2FsLT5kZWJ1Z2ZzLnN0YXRpc3RpY3MgPSBzdGF0c2Q7CkBAIC0zNTYsNyArMzE0LDYgQEAKIAogdm9pZCBkZWJ1Z2ZzX2h3X2RlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKLQlERUJVR0ZTX0RFTChjaGFubmVsKTsKIAlERUJVR0ZTX0RFTChmcmVxdWVuY3kpOwogCURFQlVHRlNfREVMKGFudGVubmFfc2VsX3R4KTsKIAlERUJVR0ZTX0RFTChhbnRlbm5hX3NlbF9yeCk7CkBAIC0zNjYsOSArMzIzLDcgQEAKIAlERUJVR0ZTX0RFTChzaG9ydF9yZXRyeV9saW1pdCk7CiAJREVCVUdGU19ERUwobG9uZ19yZXRyeV9saW1pdCk7CiAJREVCVUdGU19ERUwodG90YWxfcHNfYnVmZmVyZWQpOwotCURFQlVHRlNfREVMKG1vZGUpOwogCURFQlVHRlNfREVMKHdlcF9pdik7Ci0JREVCVUdGU19ERUwobW9kZXMpOwogCiAJREVCVUdGU19TVEFUU19ERUwodHJhbnNtaXR0ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKG11bHRpY2FzdF90cmFuc21pdHRlZF9mcmFtZV9jb3VudCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCmluZGV4IGM4ODE1MjQuLjg3OWU3MjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfa2V5LmgiCisjaW5jbHVkZSAia2V5LmgiCiAjaW5jbHVkZSAiZGVidWdmcy5oIgogI2luY2x1ZGUgImRlYnVnZnNfa2V5LmgiCiAKQEAgLTE4NCwyMyArMTg0LDM2IEBACiAJa2V5LT5kZWJ1Z2ZzLm5hbWUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLFwKIAkJCQlrZXktPmRlYnVnZnMuZGlyLCBrZXksICZrZXlfIyNuYW1lIyNfb3BzKTsKIAotdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCi17Cit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKKyAgewogCXN0YXRpYyBpbnQga2V5Y291bnQ7Ci0JY2hhciBidWZbMjBdOworCWNoYXIgYnVmWzUwXTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAotCWlmICghbG9jYWwtPmRlYnVnZnMua2V5cykKKwlpZiAoIWtleS0+bG9jYWwtPmRlYnVnZnMua2V5cykKIAkJcmV0dXJuOwogCiAJc3ByaW50ZihidWYsICIlZCIsIGtleWNvdW50KTsKKwlrZXktPmRlYnVnZnMuY250ID0ga2V5Y291bnQ7CiAJa2V5Y291bnQrKzsKIAlrZXktPmRlYnVnZnMuZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGJ1ZiwKLQkJCQkJbG9jYWwtPmRlYnVnZnMua2V5cyk7CisJCQkJCWtleS0+bG9jYWwtPmRlYnVnZnMua2V5cyk7CiAKIAlpZiAoIWtleS0+ZGVidWdmcy5kaXIpCiAJCXJldHVybjsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSByY3VfZGVyZWZlcmVuY2Uoa2V5LT5zdGEpOworCWlmIChzdGEpCisJCXNwcmludGYoYnVmLCAiLi4vLi4vc3RhdGlvbnMvJXMiLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIHVzaW5nIHN0YSBhcyBhIGJvb2xlYW4gaXMgZmluZSBvdXRzaWRlIFJDVSBsb2NrICovCisJaWYgKHN0YSkKKwkJa2V5LT5kZWJ1Z2ZzLnN0YWxpbmsgPQorCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygic3RhdGlvbiIsIGtleS0+ZGVidWdmcy5kaXIsIGJ1Zik7CisKIAlERUJVR0ZTX0FERChrZXlsZW4pOwogCURFQlVHRlNfQUREKGZsYWdzKTsKIAlERUJVR0ZTX0FERChrZXlpZHgpOwpAQCAtMjQ2LDcgKzI1OSw3IEBACiAJaWYgKCFzZGF0YS0+ZGVidWdmc2RpcikKIAkJcmV0dXJuOwogCi0Jc3ByaW50ZihidWYsICIuLi9rZXlzLyVkIiwgc2RhdGEtPmRlZmF1bHRfa2V5LT5jb25mLmtleWlkeCk7CisJc3ByaW50ZihidWYsICIuLi9rZXlzLyVkIiwgc2RhdGEtPmRlZmF1bHRfa2V5LT5kZWJ1Z2ZzLmNudCk7CiAJc2RhdGEtPmRlYnVnZnMuZGVmYXVsdF9rZXkgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV9zeW1saW5rKCJkZWZhdWx0X2tleSIsIHNkYXRhLT5kZWJ1Z2ZzZGlyLCBidWYpOwogfQpAQCAtMjU4LDE5ICsyNzEsNiBAQAogCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5kZWJ1Z2ZzLmRlZmF1bHRfa2V5KTsKIAlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X2tleSA9IE5VTEw7CiB9Ci12b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAotCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQljaGFyIGJ1Zls1MF07Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLQlpZiAoIWtleS0+ZGVidWdmcy5kaXIpCi0JCXJldHVybjsKLQotCXNwcmludGYoYnVmLCAiLi4vLi4vc3RhdGlvbnMvJXMiLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKLQlrZXktPmRlYnVnZnMuc3RhbGluayA9Ci0JCWRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoInN0YXRpb24iLCBrZXktPmRlYnVnZnMuZGlyLCBidWYpOwotfQogCiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaCBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCmluZGV4IGFlY2ZjZTMuLmIxYTM3NTQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCkBAIC0yLDE4ICsyLDE0IEBACiAjZGVmaW5lIF9fTUFDODAyMTFfREVCVUdGU19LRVlfSAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9saW5rKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCi0JCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9kZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7fQogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHt9CkBAIC0yMyw5ICsxOSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfc3RhX2xpbmsoCi0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgc3RydWN0IHN0YV9pbmZvICpzdGEpCi17fQogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7fQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCA4Mjk4NzJhLi5lMzMyNmQwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExX3JhdGUuaCIKKyNpbmNsdWRlICJyYXRlLmgiCiAjaW5jbHVkZSAiZGVidWdmcy5oIgogI2luY2x1ZGUgImRlYnVnZnNfbmV0ZGV2LmgiCiAKQEAgLTMxLDE0ICszMSwzOSBAQAogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKIAogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JaWYgKHNkYXRhLT5kZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkgeworCWlmIChzZGF0YS0+ZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQpCiAJCXJldCA9ICgqZm9ybWF0KShzZGF0YSwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7Ci0JfQogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKKworCWlmIChyZXQgIT0gLUVJTlZBTCkKKwkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKKwogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX3dyaXRlKAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCWNoYXIgY29uc3QgX191c2VyICp1c2VyYnVmLAorCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLAorCWludCAoKmZvcm1hdCkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqLCBjaGFyICopKQoreworCWNoYXIgYnVmWzEwXTsKKwlpbnQgYnVmX3NpemU7CisKKwltZW1zZXQoYnVmLCAweDAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIChzaXplb2YoYnVmKS0xKSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gY291bnQ7CisJcmVhZF9sb2NrKCZkZXZfYmFzZV9sb2NrKTsKKwlpZiAoc2RhdGEtPmRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKQorCQkoKmZvcm1hdCkoc2RhdGEsIGJ1Zik7CisJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorI2VuZGlmCisKICNkZWZpbmUgSUVFRTgwMjExX0lGX0ZNVChuYW1lLCBmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCiBzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfZm10XyMjbmFtZSgJCQkJCVwKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqYnVmLAkJXApAQCAtNDYsNiArNzEsMTkgQEAKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm9ybWF0X3N0cmluZywgc2RhdGEtPmZpZWxkKTsJXAogfQorI2RlZmluZSBJRUVFODAyMTFfSUZfV0ZNVChuYW1lLCBmaWVsZCwgdHlwZSkJCQkJXAorc3RhdGljIGludCBpZWVlODAyMTFfaWZfd2ZtdF8jI25hbWUoCQkJCQlcCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmJ1ZikJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdG1wOwkJCQkJCVwKKwljaGFyICplbmRwOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJdG1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CQkJCVwKKwlpZiAoKGVuZHAgPT0gYnVmKSB8fCAoKHR5cGUpdG1wICE9IHRtcCkpCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJc2RhdGEtPmZpZWxkID0gdG1wOwkJCQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAorfQogI2RlZmluZSBJRUVFODAyMTFfSUZfRk1UX0RFQyhuYW1lLCBmaWVsZCkJCQkJXAogCQlJRUVFODAyMTFfSUZfRk1UKG5hbWUsIGZpZWxkLCAiJWRcbiIpCiAjZGVmaW5lIElFRUU4MDIxMV9JRl9GTVRfSEVYKG5hbWUsIGZpZWxkKQkJCQlcCkBAIC04OCwxMCArMTI2LDM3IEBACiAJCUlFRUU4MDIxMV9JRl9GTVRfIyNmb3JtYXQobmFtZSwgZmllbGQpCQkJXAogCQlfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUpCiAKKyNkZWZpbmUgX19JRUVFODAyMTFfSUZfV0ZJTEUobmFtZSkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9yZWFkXyMjbmFtZShzdHJ1Y3QgZmlsZSAqZmlsZSwJCVwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJidWYsCQlcCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBpZWVlODAyMTFfaWZfcmVhZChmaWxlLT5wcml2YXRlX2RhdGEsCQkJXAorCQkJCSB1c2VyYnVmLCBjb3VudCwgcHBvcywJCQlcCisJCQkJIGllZWU4MDIxMV9pZl9mbXRfIyNuYW1lKTsJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfd3JpdGVfIyNuYW1lKHN0cnVjdCBmaWxlICpmaWxlLAkJXAorCQkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJXAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gaWVlZTgwMjExX2lmX3dyaXRlKGZpbGUtPnByaXZhdGVfZGF0YSwJCQlcCisJCQkJIHVzZXJidWYsIGNvdW50LCBwcG9zLAkJCVwKKwkJCQkgaWVlZTgwMjExX2lmX3dmbXRfIyNuYW1lKTsJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lIyNfb3BzID0gewkJCVwKKwkucmVhZCA9IGllZWU4MDIxMV9pZl9yZWFkXyMjbmFtZSwJCQkJXAorCS53cml0ZSA9IGllZWU4MDIxMV9pZl93cml0ZV8jI25hbWUsCQkJCVwKKwkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCit9CisKKyNkZWZpbmUgSUVFRTgwMjExX0lGX1dGSUxFKG5hbWUsIGZpZWxkLCBmb3JtYXQsIHR5cGUpCQkJXAorCQlJRUVFODAyMTFfSUZfRk1UXyMjZm9ybWF0KG5hbWUsIGZpZWxkKQkJCVwKKwkJSUVFRTgwMjExX0lGX1dGTVQobmFtZSwgZmllbGQsIHR5cGUpCQkJXAorCQlfX0lFRUU4MDIxMV9JRl9XRklMRShuYW1lKQorCiAvKiBjb21tb24gYXR0cmlidXRlcyAqLwogSUVFRTgwMjExX0lGX0ZJTEUoY2hhbm5lbF91c2UsIGNoYW5uZWxfdXNlLCBERUMpOwogSUVFRTgwMjExX0lGX0ZJTEUoZHJvcF91bmVuY3J5cHRlZCwgZHJvcF91bmVuY3J5cHRlZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGllZWU4MDJfMXhfcGFjLCBpZWVlODAyXzF4X3BhYywgREVDKTsKIAogLyogU1RBL0lCU1MgYXR0cmlidXRlcyAqLwogSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUuc3RhLnN0YXRlLCBERUMpOwpAQCAtMTA3LDYgKzE3Miw3IEBACiBJRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUuc3RhLmF1dGhfYWxncywgSEVYKTsKIElFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1LnN0YS5hdXRoX2FsZywgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUuc3RhLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShudW1fYmVhY29uc19zdGEsIHUuc3RhLm51bV9iZWFjb25zLCBERUMpOwogCiBzdGF0aWMgc3NpemVfdCBpZWVlODAyMTFfaWZfZm10X2ZsYWdzKAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpidWYsIGludCBidWZsZW4pCkBAIC0xNDAsMTUgKzIwNiw1MCBAQAogLyogV0RTIGF0dHJpYnV0ZXMgKi8KIElFRUU4MDIxMV9JRl9GSUxFKHBlZXIsIHUud2RzLnJlbW90ZV9hZGRyLCBNQUMpOwogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKy8qIE1lc2ggc3RhdHMgYXR0cmlidXRlcyAqLworSUVFRTgwMjExX0lGX0ZJTEUoZndkZWRfZnJhbWVzLCB1LnN0YS5tc2hzdGF0cy5md2RlZF9mcmFtZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShkcm9wcGVkX2ZyYW1lc190dGwsIHUuc3RhLm1zaHN0YXRzLmRyb3BwZWRfZnJhbWVzX3R0bCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGRyb3BwZWRfZnJhbWVzX25vX3JvdXRlLAorCQl1LnN0YS5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc19ub19yb3V0ZSwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGVzdGFiX3BsaW5rcywgdS5zdGEubXNoc3RhdHMuZXN0YWJfcGxpbmtzLCBBVE9NSUMpOworCisvKiBNZXNoIHBhcmFtZXRlcnMgKi8KK0lFRUU4MDIxMV9JRl9XRklMRShkb3QxMU1lc2hNYXhSZXRyaWVzLAorCQl1LnN0YS5tc2hjZmcuZG90MTFNZXNoTWF4UmV0cmllcywgREVDLCB1OCk7CitJRUVFODAyMTFfSUZfV0ZJTEUoZG90MTFNZXNoUmV0cnlUaW1lb3V0LAorCQl1LnN0YS5tc2hjZmcuZG90MTFNZXNoUmV0cnlUaW1lb3V0LCBERUMsIHUxNik7CitJRUVFODAyMTFfSUZfV0ZJTEUoZG90MTFNZXNoQ29uZmlybVRpbWVvdXQsCisJCXUuc3RhLm1zaGNmZy5kb3QxMU1lc2hDb25maXJtVGltZW91dCwgREVDLCB1MTYpOworSUVFRTgwMjExX0lGX1dGSUxFKGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0LAorCQl1LnN0YS5tc2hjZmcuZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQsIERFQywgdTE2KTsKK0lFRUU4MDIxMV9JRl9XRklMRShkb3QxMU1lc2hUVEwsIHUuc3RhLm1zaGNmZy5kb3QxMU1lc2hUVEwsIERFQywgdTgpOworSUVFRTgwMjExX0lGX1dGSUxFKGF1dG9fb3Blbl9wbGlua3MsIHUuc3RhLm1zaGNmZy5hdXRvX29wZW5fcGxpbmtzLCBERUMsIHU4KTsKK0lFRUU4MDIxMV9JRl9XRklMRShkb3QxMU1lc2hNYXhQZWVyTGlua3MsCisJCXUuc3RhLm1zaGNmZy5kb3QxMU1lc2hNYXhQZWVyTGlua3MsIERFQywgdTE2KTsKK0lFRUU4MDIxMV9JRl9XRklMRShkb3QxMU1lc2hIV01QYWN0aXZlUGF0aFRpbWVvdXQsCisJCXUuc3RhLm1zaGNmZy5kb3QxMU1lc2hIV01QYWN0aXZlUGF0aFRpbWVvdXQsIERFQywgdTMyKTsKK0lFRUU4MDIxMV9JRl9XRklMRShkb3QxMU1lc2hIV01QcHJlcU1pbkludGVydmFsLAorCQl1LnN0YS5tc2hjZmcuZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbCwgREVDLCB1MTYpOworSUVFRTgwMjExX0lGX1dGSUxFKGRvdDExTWVzaEhXTVBuZXREaWFtZXRlclRyYXZlcnNhbFRpbWUsCisJCXUuc3RhLm1zaGNmZy5kb3QxMU1lc2hIV01QbmV0RGlhbWV0ZXJUcmF2ZXJzYWxUaW1lLCBERUMsIHUxNik7CitJRUVFODAyMTFfSUZfV0ZJTEUoZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzLAorCQl1LnN0YS5tc2hjZmcuZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzLCBERUMsIHU4KTsKK0lFRUU4MDIxMV9JRl9XRklMRShwYXRoX3JlZnJlc2hfdGltZSwKKwkJdS5zdGEubXNoY2ZnLnBhdGhfcmVmcmVzaF90aW1lLCBERUMsIHUzMik7CitJRUVFODAyMTFfSUZfV0ZJTEUobWluX2Rpc2NvdmVyeV90aW1lb3V0LAorCQl1LnN0YS5tc2hjZmcubWluX2Rpc2NvdmVyeV90aW1lb3V0LCBERUMsIHUxNik7CisjZW5kaWYKKworCiAjZGVmaW5lIERFQlVHRlNfQUREKG5hbWUsIHR5cGUpXAotCXNkYXRhLT5kZWJ1Z2ZzLnR5cGUubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0NDQsXAorCXNkYXRhLT5kZWJ1Z2ZzLnR5cGUubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsXAogCQlzZGF0YS0+ZGVidWdmc2Rpciwgc2RhdGEsICZuYW1lIyNfb3BzKTsKIAogc3RhdGljIHZvaWQgYWRkX3N0YV9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlERUJVR0ZTX0FERChjaGFubmVsX3VzZSwgc3RhKTsKIAlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkLCBzdGEpOwotCURFQlVHRlNfQUREKGllZWU4MDJfMXhfcGFjLCBzdGEpOwogCURFQlVHRlNfQUREKHN0YXRlLCBzdGEpOwogCURFQlVHRlNfQUREKGJzc2lkLCBzdGEpOwogCURFQlVHRlNfQUREKHByZXZfYnNzaWQsIHN0YSk7CkBAIC0xNjMsMTMgKzI2NCwxMyBAQAogCURFQlVHRlNfQUREKGF1dGhfYWxnLCBzdGEpOwogCURFQlVHRlNfQUREKGF1dGhfdHJhbnNhY3Rpb24sIHN0YSk7CiAJREVCVUdGU19BREQoZmxhZ3MsIHN0YSk7CisJREVCVUdGU19BREQobnVtX2JlYWNvbnNfc3RhLCBzdGEpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfYXBfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJREVCVUdGU19BREQoY2hhbm5lbF91c2UsIGFwKTsKIAlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkLCBhcCk7Ci0JREVCVUdGU19BREQoaWVlZTgwMl8xeF9wYWMsIGFwKTsKIAlERUJVR0ZTX0FERChudW1fc3RhX3BzLCBhcCk7CiAJREVCVUdGU19BREQoZHRpbV9jb3VudCwgYXApOwogCURFQlVHRlNfQUREKG51bV9iZWFjb25zLCBhcCk7CkBAIC0xODIsNyArMjgzLDYgQEAKIHsKIAlERUJVR0ZTX0FERChjaGFubmVsX3VzZSwgd2RzKTsKIAlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkLCB3ZHMpOwotCURFQlVHRlNfQUREKGllZWU4MDJfMXhfcGFjLCB3ZHMpOwogCURFQlVHRlNfQUREKHBlZXIsIHdkcyk7CiB9CiAKQEAgLTE5MCwxOSArMjkwLDYzIEBACiB7CiAJREVCVUdGU19BREQoY2hhbm5lbF91c2UsIHZsYW4pOwogCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQsIHZsYW4pOwotCURFQlVHRlNfQUREKGllZWU4MDJfMXhfcGFjLCB2bGFuKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkX21vbml0b3JfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorI2RlZmluZSBNRVNIU1RBVFNfQUREKG5hbWUpXAorCXNkYXRhLT5tZXNoX3N0YXRzLm5hbWUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLFwKKwkJc2RhdGEtPm1lc2hfc3RhdHNfZGlyLCBzZGF0YSwgJm5hbWUjI19vcHMpOworCitzdGF0aWMgdm9pZCBhZGRfbWVzaF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzZGF0YS0+bWVzaF9zdGF0c19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm1lc2hfc3RhdHMiLAorCQkJCXNkYXRhLT5kZWJ1Z2ZzZGlyKTsKKwlNRVNIU1RBVFNfQUREKGZ3ZGVkX2ZyYW1lcyk7CisJTUVTSFNUQVRTX0FERChkcm9wcGVkX2ZyYW1lc190dGwpOworCU1FU0hTVEFUU19BREQoZHJvcHBlZF9mcmFtZXNfbm9fcm91dGUpOworCU1FU0hTVEFUU19BREQoZXN0YWJfcGxpbmtzKTsKK30KKworI2RlZmluZSBNRVNIUEFSQU1TX0FERChuYW1lKVwKKwlzZGF0YS0+bWVzaF9jb25maWcubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA2MDAsXAorCQlzZGF0YS0+bWVzaF9jb25maWdfZGlyLCBzZGF0YSwgJm5hbWUjI19vcHMpOworCitzdGF0aWMgdm9pZCBhZGRfbWVzaF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc2RhdGEtPm1lc2hfY29uZmlnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigibWVzaF9jb25maWciLAorCQkJCXNkYXRhLT5kZWJ1Z2ZzZGlyKTsKKwlNRVNIUEFSQU1TX0FERChkb3QxMU1lc2hNYXhSZXRyaWVzKTsKKwlNRVNIUEFSQU1TX0FERChkb3QxMU1lc2hSZXRyeVRpbWVvdXQpOworCU1FU0hQQVJBTVNfQUREKGRvdDExTWVzaENvbmZpcm1UaW1lb3V0KTsKKwlNRVNIUEFSQU1TX0FERChkb3QxMU1lc2hIb2xkaW5nVGltZW91dCk7CisJTUVTSFBBUkFNU19BREQoZG90MTFNZXNoVFRMKTsKKwlNRVNIUEFSQU1TX0FERChhdXRvX29wZW5fcGxpbmtzKTsKKwlNRVNIUEFSQU1TX0FERChkb3QxMU1lc2hNYXhQZWVyTGlua3MpOworCU1FU0hQQVJBTVNfQUREKGRvdDExTWVzaEhXTVBhY3RpdmVQYXRoVGltZW91dCk7CisJTUVTSFBBUkFNU19BREQoZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbCk7CisJTUVTSFBBUkFNU19BREQoZG90MTFNZXNoSFdNUG5ldERpYW1ldGVyVHJhdmVyc2FsVGltZSk7CisJTUVTSFBBUkFNU19BREQoZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzKTsKKwlNRVNIUEFSQU1TX0FERChwYXRoX3JlZnJlc2hfdGltZSk7CisJTUVTSFBBUkFNU19BREQobWluX2Rpc2NvdmVyeV90aW1lb3V0KTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBhZGRfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJaWYgKCFzZGF0YS0+ZGVidWdmc2RpcikKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwkJYWRkX21lc2hfc3RhdHMoc2RhdGEpOworCQlhZGRfbWVzaF9jb25maWcoc2RhdGEpOworI2VuZGlmCisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKIAkJYWRkX3N0YV9maWxlcyhzZGF0YSk7CkBAIC0yMzQsNyArMzc4LDYgQEAKIHsKIAlERUJVR0ZTX0RFTChjaGFubmVsX3VzZSwgc3RhKTsKIAlERUJVR0ZTX0RFTChkcm9wX3VuZW5jcnlwdGVkLCBzdGEpOwotCURFQlVHRlNfREVMKGllZWU4MDJfMXhfcGFjLCBzdGEpOwogCURFQlVHRlNfREVMKHN0YXRlLCBzdGEpOwogCURFQlVHRlNfREVMKGJzc2lkLCBzdGEpOwogCURFQlVHRlNfREVMKHByZXZfYnNzaWQsIHN0YSk7CkBAIC0yNDksMTMgKzM5MiwxMyBAQAogCURFQlVHRlNfREVMKGF1dGhfYWxnLCBzdGEpOwogCURFQlVHRlNfREVMKGF1dGhfdHJhbnNhY3Rpb24sIHN0YSk7CiAJREVCVUdGU19ERUwoZmxhZ3MsIHN0YSk7CisJREVCVUdGU19ERUwobnVtX2JlYWNvbnNfc3RhLCBzdGEpOwogfQogCiBzdGF0aWMgdm9pZCBkZWxfYXBfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJREVCVUdGU19ERUwoY2hhbm5lbF91c2UsIGFwKTsKIAlERUJVR0ZTX0RFTChkcm9wX3VuZW5jcnlwdGVkLCBhcCk7Ci0JREVCVUdGU19ERUwoaWVlZTgwMl8xeF9wYWMsIGFwKTsKIAlERUJVR0ZTX0RFTChudW1fc3RhX3BzLCBhcCk7CiAJREVCVUdGU19ERUwoZHRpbV9jb3VudCwgYXApOwogCURFQlVHRlNfREVMKG51bV9iZWFjb25zLCBhcCk7CkBAIC0yNjgsNyArNDExLDYgQEAKIHsKIAlERUJVR0ZTX0RFTChjaGFubmVsX3VzZSwgd2RzKTsKIAlERUJVR0ZTX0RFTChkcm9wX3VuZW5jcnlwdGVkLCB3ZHMpOwotCURFQlVHRlNfREVMKGllZWU4MDJfMXhfcGFjLCB3ZHMpOwogCURFQlVHRlNfREVMKHBlZXIsIHdkcyk7CiB9CiAKQEAgLTI3NiwxOSArNDE4LDY3IEBACiB7CiAJREVCVUdGU19ERUwoY2hhbm5lbF91c2UsIHZsYW4pOwogCURFQlVHRlNfREVMKGRyb3BfdW5lbmNyeXB0ZWQsIHZsYW4pOwotCURFQlVHRlNfREVMKGllZWU4MDJfMXhfcGFjLCB2bGFuKTsKIH0KIAogc3RhdGljIHZvaWQgZGVsX21vbml0b3JfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorI2RlZmluZSBNRVNIU1RBVFNfREVMKG5hbWUpCQkJXAorCWRvIHsJCQkJCQlcCisJCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5tZXNoX3N0YXRzLm5hbWUpOwlcCisJCXNkYXRhLT5tZXNoX3N0YXRzLm5hbWUgPSBOVUxMOwkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIGRlbF9tZXNoX3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCU1FU0hTVEFUU19ERUwoZndkZWRfZnJhbWVzKTsKKwlNRVNIU1RBVFNfREVMKGRyb3BwZWRfZnJhbWVzX3R0bCk7CisJTUVTSFNUQVRTX0RFTChkcm9wcGVkX2ZyYW1lc19ub19yb3V0ZSk7CisJTUVTSFNUQVRTX0RFTChlc3RhYl9wbGlua3MpOworCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5tZXNoX3N0YXRzX2Rpcik7CisJc2RhdGEtPm1lc2hfc3RhdHNfZGlyID0gTlVMTDsKK30KKworI2RlZmluZSBNRVNIUEFSQU1TX0RFTChuYW1lKQkJCVwKKwlkbyB7CQkJCQkJXAorCQlkZWJ1Z2ZzX3JlbW92ZShzZGF0YS0+bWVzaF9jb25maWcubmFtZSk7CVwKKwkJc2RhdGEtPm1lc2hfY29uZmlnLm5hbWUgPSBOVUxMOwkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIGRlbF9tZXNoX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlNRVNIUEFSQU1TX0RFTChkb3QxMU1lc2hNYXhSZXRyaWVzKTsKKwlNRVNIUEFSQU1TX0RFTChkb3QxMU1lc2hSZXRyeVRpbWVvdXQpOworCU1FU0hQQVJBTVNfREVMKGRvdDExTWVzaENvbmZpcm1UaW1lb3V0KTsKKwlNRVNIUEFSQU1TX0RFTChkb3QxMU1lc2hIb2xkaW5nVGltZW91dCk7CisJTUVTSFBBUkFNU19ERUwoZG90MTFNZXNoVFRMKTsKKwlNRVNIUEFSQU1TX0RFTChhdXRvX29wZW5fcGxpbmtzKTsKKwlNRVNIUEFSQU1TX0RFTChkb3QxMU1lc2hNYXhQZWVyTGlua3MpOworCU1FU0hQQVJBTVNfREVMKGRvdDExTWVzaEhXTVBhY3RpdmVQYXRoVGltZW91dCk7CisJTUVTSFBBUkFNU19ERUwoZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbCk7CisJTUVTSFBBUkFNU19ERUwoZG90MTFNZXNoSFdNUG5ldERpYW1ldGVyVHJhdmVyc2FsVGltZSk7CisJTUVTSFBBUkFNU19ERUwoZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzKTsKKwlNRVNIUEFSQU1TX0RFTChwYXRoX3JlZnJlc2hfdGltZSk7CisJTUVTSFBBUkFNU19ERUwobWluX2Rpc2NvdmVyeV90aW1lb3V0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShzZGF0YS0+bWVzaF9jb25maWdfZGlyKTsKKwlzZGF0YS0+bWVzaF9jb25maWdfZGlyID0gTlVMTDsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBkZWxfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCB0eXBlKQogewogCWlmICghc2RhdGEtPmRlYnVnZnNkaXIpCiAJCXJldHVybjsKIAogCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDoKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCQlkZWxfbWVzaF9zdGF0cyhzZGF0YSk7CisJCWRlbF9tZXNoX2NvbmZpZyhzZGF0YSk7CisjZW5kaWYKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgogCQlkZWxfc3RhX2ZpbGVzKHNkYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggOGY1OTQ0Yy4uNmQ0N2ExZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTMzLDM0ICszMywyNSBAQAogI2RlZmluZSBTVEFfUkVBRF9MVShuYW1lLCBmaWVsZCkgU1RBX1JFQUQobmFtZSwgMjAsIGZpZWxkLCAiJWx1XG4iKQogI2RlZmluZSBTVEFfUkVBRF9TKG5hbWUsIGZpZWxkKSBTVEFfUkVBRChuYW1lLCAyMCwgZmllbGQsICIlc1xuIikKIAotI2RlZmluZSBTVEFfUkVBRF9SQVRFKG5hbWUsIGZpZWxkKQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc3RhXyMjbmFtZSMjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCQkJXAotCQkJCSBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJCQlcCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsJCQlcCi0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoc3RhLT5kZXYtPmllZWU4MDIxMV9wdHIpO1wKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOwkJXAotCWNoYXIgYnVmWzIwXTsJCQkJCQkJXAotCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkXG4iLAkJCVwKLQkJCSAgICAoc3RhLT5maWVsZCA+PSAwICYmCQkJCVwKLQkJCSAgICBzdGEtPmZpZWxkIDwgbW9kZS0+bnVtX3JhdGVzKSA/CQlcCi0JCQkgICAgbW9kZS0+cmF0ZXNbc3RhLT5maWVsZF0ucmF0ZSA6IC0xKTsJCVwKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsJXAotfQotCiAjZGVmaW5lIFNUQV9PUFMobmFtZSkJCQkJCQkJXAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhXyAjI25hbWUjIyBfb3BzID0gewkJXAogCS5yZWFkID0gc3RhXyMjbmFtZSMjX3JlYWQsCQkJCQlcCiAJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAogfQogCisjZGVmaW5lIFNUQV9PUFNfV1IobmFtZSkJCQkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFfICMjbmFtZSMjIF9vcHMgPSB7CQlcCisJLnJlYWQgPSBzdGFfIyNuYW1lIyNfcmVhZCwJCQkJCVwKKwkud3JpdGUgPSBzdGFfIyNuYW1lIyNfd3JpdGUsCQkJCQlcCisJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAorfQorCiAjZGVmaW5lIFNUQV9GSUxFKG5hbWUsIGZpZWxkLCBmb3JtYXQpCQkJCQlcCiAJCVNUQV9SRUFEXyMjZm9ybWF0KG5hbWUsIGZpZWxkKQkJCQlcCiAJCVNUQV9PUFMobmFtZSkKIAogU1RBX0ZJTEUoYWlkLCBhaWQsIEQpOwotU1RBX0ZJTEUoZGV2LCBkZXYtPm5hbWUsIFMpOworU1RBX0ZJTEUoZGV2LCBzZGF0YS0+ZGV2LT5uYW1lLCBTKTsKIFNUQV9GSUxFKHJ4X3BhY2tldHMsIHJ4X3BhY2tldHMsIExVKTsKIFNUQV9GSUxFKHR4X3BhY2tldHMsIHR4X3BhY2tldHMsIExVKTsKIFNUQV9GSUxFKHJ4X2J5dGVzLCByeF9ieXRlcywgTFUpOwpAQCAtNzAsMjcgKzYxLDIzIEBACiBTVEFfRklMRShyeF9kcm9wcGVkLCByeF9kcm9wcGVkLCBMVSk7CiBTVEFfRklMRSh0eF9mcmFnbWVudHMsIHR4X2ZyYWdtZW50cywgTFUpOwogU1RBX0ZJTEUodHhfZmlsdGVyZWQsIHR4X2ZpbHRlcmVkX2NvdW50LCBMVSk7Ci1TVEFfRklMRSh0eHJhdGUsIHR4cmF0ZSwgUkFURSk7Ci1TVEFfRklMRShsYXN0X3R4cmF0ZSwgbGFzdF90eHJhdGUsIFJBVEUpOwogU1RBX0ZJTEUodHhfcmV0cnlfZmFpbGVkLCB0eF9yZXRyeV9mYWlsZWQsIExVKTsKIFNUQV9GSUxFKHR4X3JldHJ5X2NvdW50LCB0eF9yZXRyeV9jb3VudCwgTFUpOwogU1RBX0ZJTEUobGFzdF9yc3NpLCBsYXN0X3Jzc2ksIEQpOwogU1RBX0ZJTEUobGFzdF9zaWduYWwsIGxhc3Rfc2lnbmFsLCBEKTsKIFNUQV9GSUxFKGxhc3Rfbm9pc2UsIGxhc3Rfbm9pc2UsIEQpOwogU1RBX0ZJTEUoY2hhbm5lbF91c2UsIGNoYW5uZWxfdXNlLCBEKTsKLVNUQV9GSUxFKHdlcF93ZWFrX2l2X2NvdW50LCB3ZXBfd2Vha19pdl9jb3VudCwgRCk7CitTVEFfRklMRSh3ZXBfd2Vha19pdl9jb3VudCwgd2VwX3dlYWtfaXZfY291bnQsIExVKTsKIAogc3RhdGljIHNzaXplX3Qgc3RhX2ZsYWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJY2hhciBidWZbMTAwXTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzJXMlcyVzJXMlcyVzJXMiLAorCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMlcyVzJXMlcyVzIiwKIAkJc3RhLT5mbGFncyAmIFdMQU5fU1RBX0FVVEggPyAiQVVUSFxuIiA6ICIiLAogCQlzdGEtPmZsYWdzICYgV0xBTl9TVEFfQVNTT0MgPyAiQVNTT0NcbiIgOiAiIiwKIAkJc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTID8gIlBTXG4iIDogIiIsCi0JCXN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9USU0gPyAiVElNXG4iIDogIiIsCi0JCXN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9QRVJNID8gIlBFUk1cbiIgOiAiIiwKIAkJc3RhLT5mbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQgPyAiQVVUSE9SSVpFRFxuIiA6ICIiLAogCQlzdGEtPmZsYWdzICYgV0xBTl9TVEFfU0hPUlRfUFJFQU1CTEUgPyAiU0hPUlQgUFJFQU1CTEVcbiIgOiAiIiwKIAkJc3RhLT5mbGFncyAmIFdMQU5fU1RBX1dNRSA/ICJXTUVcbiIgOiAiIiwKQEAgLTExMSwzMSArOTgsNiBAQAogfQogU1RBX09QUyhudW1fcHNfYnVmX2ZyYW1lcyk7CiAKLXN0YXRpYyBzc2l6ZV90IHN0YV9sYXN0X2Fja19yc3NpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgYnVmWzEwMF07Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQgJWQgJWRcbiIsCi0JCQkgICAgc3RhLT5sYXN0X2Fja19yc3NpWzBdLAotCQkJICAgIHN0YS0+bGFzdF9hY2tfcnNzaVsxXSwKLQkJCSAgICBzdGEtPmxhc3RfYWNrX3Jzc2lbMl0pOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwotfQotU1RBX09QUyhsYXN0X2Fja19yc3NpKTsKLQotc3RhdGljIHNzaXplX3Qgc3RhX2xhc3RfYWNrX21zX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIGJ1ZlsyMF07Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsCi0JCQkgICAgc3RhLT5sYXN0X2FjayA/Ci0JCQkgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhLT5sYXN0X2FjaykgOiAtMSk7Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7Ci19Ci1TVEFfT1BTKGxhc3RfYWNrX21zKTsKLQogc3RhdGljIHNzaXplX3Qgc3RhX2luYWN0aXZlX21zX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTE5MSw4ICsxNTMsMTIwIEBACiBTVEFfT1BTKHdtZV90eF9xdWV1ZSk7CiAjZW5kaWYKIAorc3RhdGljIHNzaXplX3Qgc3RhX2FnZ19zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgYnVmWzc2OF0sICpwID0gYnVmOworCWludCBpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiQWdnIHN0YXRlIGZvciBTVEEgaXM6XG4iKTsKKwlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiBTVEEgbmV4dCBkaWFsb2dfdG9rZW4gaXMgJWQgXG4gIgorCQkJIlRJRHMgaW5mbyBpczogXG4gVElEIDoiLAorCQkJKHN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yICsgMSkpOworCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsIGkpOworCisJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiBSWCAgOiIpOworCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsCisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldKTsKKworCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiXG4gRFRLTjoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIlNWQiLAorCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFtpXT8KKwkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPmRpYWxvZ190b2tlbiA6IDApOworCisJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiBUWCAgOiIpOworCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsCisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldKTsKKworCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiXG4gRFRLTjoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIlNWQiLAorCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXT8KKwkJCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0tPmRpYWxvZ190b2tlbiA6IDApOworCisJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiBTU04gOiIpOworCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsCisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldPworCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+c3NuIDogMCk7CisKKwlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuIik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0YV9hZ2dfc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzdGEtPnNkYXRhLT5kZXY7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJdTggKmRhID0gc3RhLT5hZGRyOworCXN0YXRpYyBpbnQgdGlkX3N0YXRpY190eFsxNl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisJc3RhdGljIGludCB0aWRfc3RhdGljX3J4WzE2XSA9IHsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCQkJCQkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxfTsKKwljaGFyICplbmRwOworCWNoYXIgYnVmWzMyXTsKKwlpbnQgYnVmX3NpemUsIHJzOworCXVuc2lnbmVkIGludCB0aWRfbnVtOworCWNoYXIgc3RhdGVbNF07CisKKwltZW1zZXQoYnVmLCAweDAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIChzaXplb2YoYnVmKS0xKSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl0aWRfbnVtID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CisJaWYgKGVuZHAgPT0gYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodGlkX251bSA+PSAxMDApICYmICh0aWRfbnVtIDw9IDExNSkpIHsKKwkJLyogdG9nZ2xlIFJ4IGFnZ3JlZ2F0aW9uIGNvbW1hbmQgKi8KKwkJdGlkX251bSA9IHRpZF9udW0gLSAxMDA7CisJCWlmICh0aWRfc3RhdGljX3J4W3RpZF9udW1dID09IDEpIHsKKwkJCXN0cmNweShzdGF0ZSwgIm9mZiAiKTsKKwkJCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKGRldiwgZGEsIHRpZF9udW0sIDAsCisJCQkJCVdMQU5fUkVBU09OX1FTVEFfUkVRVUlSRV9TRVRVUCk7CisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF9udW1dIHw9CisJCQkJCUhUX0FHR19TVEFURV9ERUJVR0ZTX0NUTDsKKwkJCXRpZF9zdGF0aWNfcnhbdGlkX251bV0gPSAwOworCQl9IGVsc2UgeworCQkJc3RyY3B5KHN0YXRlLCAib24gIik7CisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF9udW1dICY9CisJCQkJCX5IVF9BR0dfU1RBVEVfREVCVUdGU19DVEw7CisJCQl0aWRfc3RhdGljX3J4W3RpZF9udW1dID0gMTsKKwkJfQorCQlwcmludGsoS0VSTl9ERUJVRyAiZGVidWdmcyAtIHRyeSBzd2l0Y2hpbmcgdGlkICV1ICVzXG4iLAorCQkJCXRpZF9udW0sIHN0YXRlKTsKKwl9IGVsc2UgaWYgKCh0aWRfbnVtID49IDApICYmICh0aWRfbnVtIDw9IDE1KSkgeworCQkvKiB0b2dnbGUgVHggYWdncmVnYXRpb24gY29tbWFuZCAqLworCQlpZiAodGlkX3N0YXRpY190eFt0aWRfbnVtXSA9PSAwKSB7CisJCQlzdHJjcHkoc3RhdGUsICJvbiAiKTsKKwkJCXJzID0gIGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKGh3LCBkYSwgdGlkX251bSk7CisJCQlpZiAocnMgPT0gMCkKKwkJCQl0aWRfc3RhdGljX3R4W3RpZF9udW1dID0gMTsKKwkJfSBlbHNlIHsKKwkJCXN0cmNweShzdGF0ZSwgIm9mZiIpOworCQkJcnMgPSAgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihodywgZGEsIHRpZF9udW0sIDEpOworCQkJaWYgKHJzID09IDApCisJCQkJdGlkX3N0YXRpY190eFt0aWRfbnVtXSA9IDA7CisJCX0KKwkJcHJpbnRrKEtFUk5fREVCVUcgImRlYnVnZnMgLSBzd2l0Y2hpbmcgdGlkICV1ICVzLCByZXR1cm49JWRcbiIsCisJCQkJdGlkX251bSwgc3RhdGUsIHJzKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CitTVEFfT1BTX1dSKGFnZ19zdGF0dXMpOworCiAjZGVmaW5lIERFQlVHRlNfQUREKG5hbWUpIFwKLQlzdGEtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0NDQsIFwKKwlzdGEtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsIFwKIAkJc3RhLT5kZWJ1Z2ZzLmRpciwgc3RhLCAmc3RhXyAjI25hbWUjIyBfb3BzKTsKIAogI2RlZmluZSBERUJVR0ZTX0RFTChuYW1lKSBcCkBAIC0yMDMsMTIgKzI3NywxMyBAQAogdm9pZCBpZWVlODAyMTFfc3RhX2RlYnVnZnNfYWRkKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogCXN0cnVjdCBkZW50cnkgKnN0YXRpb25zX2RpciA9IHN0YS0+bG9jYWwtPmRlYnVnZnMuc3RhdGlvbnM7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJREVDTEFSRV9NQUNfQlVGKG1idWYpOworCXU4ICptYWM7CiAKIAlpZiAoIXN0YXRpb25zX2RpcikKIAkJcmV0dXJuOwogCi0JcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKTsKKwltYWMgPSBwcmludF9tYWMobWJ1Ziwgc3RhLT5hZGRyKTsKIAogCXN0YS0+ZGVidWdmcy5kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobWFjLCBzdGF0aW9uc19kaXIpOwogCWlmICghc3RhLT5kZWJ1Z2ZzLmRpcikKQEAgLTIxNiwyOCArMjkxLDI2IEBACiAKIAlERUJVR0ZTX0FERChmbGFncyk7CiAJREVCVUdGU19BREQobnVtX3BzX2J1Zl9mcmFtZXMpOwotCURFQlVHRlNfQUREKGxhc3RfYWNrX3Jzc2kpOwotCURFQlVHRlNfQUREKGxhc3RfYWNrX21zKTsKIAlERUJVR0ZTX0FERChpbmFjdGl2ZV9tcyk7CiAJREVCVUdGU19BREQobGFzdF9zZXFfY3RybCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiAJREVCVUdGU19BREQod21lX3J4X3F1ZXVlKTsKIAlERUJVR0ZTX0FERCh3bWVfdHhfcXVldWUpOwogI2VuZGlmCisJREVCVUdGU19BREQoYWdnX3N0YXR1cyk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKIAlERUJVR0ZTX0RFTChmbGFncyk7CiAJREVCVUdGU19ERUwobnVtX3BzX2J1Zl9mcmFtZXMpOwotCURFQlVHRlNfREVMKGxhc3RfYWNrX3Jzc2kpOwotCURFQlVHRlNfREVMKGxhc3RfYWNrX21zKTsKIAlERUJVR0ZTX0RFTChpbmFjdGl2ZV9tcyk7CiAJREVCVUdGU19ERUwobGFzdF9zZXFfY3RybCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiAJREVCVUdGU19ERUwod21lX3J4X3F1ZXVlKTsKIAlERUJVR0ZTX0RFTCh3bWVfdHhfcXVldWUpOwogI2VuZGlmCisJREVCVUdGU19ERUwoYWdnX3N0YXR1cyk7CiAKIAlkZWJ1Z2ZzX3JlbW92ZShzdGEtPmRlYnVnZnMuZGlyKTsKIAlzdGEtPmRlYnVnZnMuZGlyID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgKaW5kZXggNTc0YTFjZC4uOGI2MDg5MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fTUFDODAyMTFfREVCVUdGU19TVEFfSAogI2RlZmluZSBfX01BQzgwMjExX0RFQlVHRlNfU1RBX0gKIAorI2luY2x1ZGUgInN0YV9pbmZvLmgiCisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogdm9pZCBpZWVlODAyMTFfc3RhX2RlYnVnZnNfYWRkKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExLmMgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YjdjNzVjLi4wMDAwMDAwCi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTEuYworKysgL2Rldi9udWxsCkBAIC0xLDEzODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KLSAqIENvcHlyaWdodCAyMDA1LTIwMDYsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgotI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgotCi0jaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfcmF0ZS5oIgotI2luY2x1ZGUgIndlcC5oIgotI2luY2x1ZGUgIndtZS5oIgotI2luY2x1ZGUgImFlc19jY20uaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfbGVkLmgiCi0jaW5jbHVkZSAiY2ZnLmgiCi0jaW5jbHVkZSAiZGVidWdmcy5oIgotI2luY2x1ZGUgImRlYnVnZnNfbmV0ZGV2LmgiCi0KLSNkZWZpbmUgU1VQUF9NQ1NfU0VUX0xFTiAxNgotCi0vKgotICogRm9yIHNlZWluZyB0cmFuc21pdHRlZCBwYWNrZXRzIG9uIG1vbml0b3IgaW50ZXJmYWNlcwotICogd2UgaGF2ZSBhIHJhZGlvdGFwIGhlYWRlciB0b28uCi0gKi8KLXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7Ci0JX19sZTE2IHR4X2ZsYWdzOwotCXU4IGRhdGFfcmV0cmllczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBjb21tb24gaW50ZXJmYWNlIHJvdXRpbmVzICovCi0KLXN0YXRpYyBpbnQgaGVhZGVyX3BhcnNlXzgwMjExKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKmhhZGRyKQotewotCW1lbWNweShoYWRkciwgc2tiX21hY19oZWFkZXIoc2tiKSArIDEwLCBFVEhfQUxFTik7IC8qIGFkZHIyICovCi0JcmV0dXJuIEVUSF9BTEVOOwotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBtZGV2IHR4IGxvY2sgKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzOwotCXVuc2lnbmVkIGludCBuZXdfZmxhZ3MgPSAwOwotCi0JaWYgKGF0b21pY19yZWFkKCZsb2NhbC0+aWZmX3Byb21pc2NzKSkKLQkJbmV3X2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUzsKLQotCWlmIChhdG9taWNfcmVhZCgmbG9jYWwtPmlmZl9hbGxtdWx0aXMpKQotCQluZXdfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOwotCi0JaWYgKGxvY2FsLT5tb25pdG9ycykKLQkJbmV3X2ZsYWdzIHw9IEZJRl9DT05UUk9MIHwKLQkJCSAgICAgRklGX09USEVSX0JTUyB8Ci0JCQkgICAgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOwotCi0JY2hhbmdlZF9mbGFncyA9IGxvY2FsLT5maWx0ZXJfZmxhZ3MgXiBuZXdfZmxhZ3M7Ci0KLQkvKiBiZSBhIGJpdCBuYXN0eSAqLwotCW5ld19mbGFncyB8PSAoMTw8MzEpOwotCi0JbG9jYWwtPm9wcy0+Y29uZmlndXJlX2ZpbHRlcihsb2NhbF90b19odyhsb2NhbCksCi0JCQkJICAgICBjaGFuZ2VkX2ZsYWdzLCAmbmV3X2ZsYWdzLAotCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2NvdW50LAotCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOwotCi0JV0FSTl9PTihuZXdfZmxhZ3MgJiAoMTw8MzEpKTsKLQotCWxvY2FsLT5maWx0ZXJfZmxhZ3MgPSBuZXdfZmxhZ3MgJiB+KDE8PDMxKTsKLX0KLQotLyogbWFzdGVyIGludGVyZmFjZSAqLwotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9tYXN0ZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JaW50IHJlcyA9IC1FT1BOT1RTVVBQOwotCi0JLyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoc2RhdGEtPmRldiAhPSBkZXYgJiYgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgewotCQkJcmVzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX21hc3Rlcl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCS8qIHdlIGhvbGQgdGhlIFJUTkwgaGVyZSBzbyBjYW4gc2FmZWx5IHdhbGsgdGhlIGxpc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCi0JCWlmIChzZGF0YS0+ZGV2ICE9IGRldiAmJiBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQotCQkJZGV2X2Nsb3NlKHNkYXRhLT5kZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9tYXN0ZXJfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQotCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLX0KLQotLyogcmVndWxhciBpbnRlcmZhY2VzICovCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0JLyogRklYOiB3aGF0IHdvdWxkIGJlIHByb3BlciBsaW1pdHMgZm9yIE1UVT8KLQkgKiBUaGlzIGludGVyZmFjZSB1c2VzIDgwMi4zIGZyYW1lcy4gKi8KLQlpZiAobmV3X210dSA8IDI1NiB8fCBuZXdfbXR1ID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTiAtIDI0IC0gNikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBNVFUgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIG5ld19tdHUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0dGluZyBNVFUgJWRcbiIsIGRldi0+bmFtZSwgbmV3X210dSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlkZW50aWNhbF9tYWNfYWRkcl9hbGxvd2VkKGludCB0eXBlMSwgaW50IHR5cGUyKQotewotCXJldHVybiAodHlwZTEgPT0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUiB8fAotCQl0eXBlMiA9PSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSIHx8Ci0JCSh0eXBlMSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCAmJgotCQkgdHlwZTIgPT0gSUVFRTgwMjExX0lGX1RZUEVfV0RTKSB8fAotCQkodHlwZTEgPT0gSUVFRTgwMjExX0lGX1RZUEVfV0RTICYmCi0JCSAodHlwZTIgPT0gSUVFRTgwMjExX0lGX1RZUEVfV0RTIHx8Ci0JCSAgdHlwZTIgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApKSB8fAotCQkodHlwZTEgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYKLQkJIHR5cGUyID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pIHx8Ci0JCSh0eXBlMSA9PSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOICYmCi0JCSAodHlwZTIgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgfHwKLQkJICB0eXBlMiA9PSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOKSkpOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsICpuc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOwotCWludCByZXM7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQkvKiB3ZSBob2xkIHRoZSBSVE5MIGhlcmUgc28gY2FuIHNhZmVseSB3YWxrIHRoZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShuc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5zZGF0YS0+ZGV2OwotCi0JCWlmIChuZGV2ICE9IGRldiAmJiBuZGV2ICE9IGxvY2FsLT5tZGV2ICYmIG5ldGlmX3J1bm5pbmcobmRldikgJiYKLQkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyLCBuZGV2LT5kZXZfYWRkcikgPT0gMCkgewotCQkJLyoKLQkJCSAqIGNoZWNrIHdoZXRoZXIgaXQgbWF5IGhhdmUgdGhlIHNhbWUgYWRkcmVzcwotCQkJICovCi0JCQlpZiAoIWlkZW50aWNhbF9tYWNfYWRkcl9hbGxvd2VkKHNkYXRhLT52aWYudHlwZSwKLQkJCQkJCQluc2RhdGEtPnZpZi50eXBlKSkKLQkJCQlyZXR1cm4gLUVOT1RVTklROwotCi0JCQkvKgotCQkJICogY2FuIG9ubHkgYWRkIFZMQU5zIHRvIGVuYWJsZWQgQVBzCi0JCQkgKi8KLQkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTiAmJgotCQkJICAgIG5zZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVAgJiYKLQkJCSAgICBuZXRpZl9ydW5uaW5nKG5zZGF0YS0+ZGV2KSkKLQkJCQlzZGF0YS0+dS52bGFuLmFwID0gbnNkYXRhOwotCQl9Ci0JfQotCi0Jc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1dEUzoKLQkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihzZGF0YS0+dS53ZHMucmVtb3RlX2FkZHIpKQotCQkJcmV0dXJuIC1FTk9MSU5LOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46Ci0JCWlmICghc2RhdGEtPnUudmxhbi5hcCkKLQkJCXJldHVybiAtRU5PTElOSzsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9BUDoKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgotCQkvKiBubyBzcGVjaWFsIHRyZWF0bWVudCAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQ6Ci0JCS8qIGNhbm5vdCBoYXBwZW4gKi8KLQkJV0FSTl9PTigxKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGxvY2FsLT5vcGVuX2NvdW50ID09IDApIHsKLQkJcmVzID0gMDsKLQkJaWYgKGxvY2FsLT5vcHMtPnN0YXJ0KQotCQkJcmVzID0gbG9jYWwtPm9wcy0+c3RhcnQobG9jYWxfdG9faHcobG9jYWwpKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JCWllZWU4MDIxMV9od19jb25maWcobG9jYWwpOwotCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkKTsKLQl9Ci0KLQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfVkxBTjoKLQkJbGlzdF9hZGQoJnNkYXRhLT51LnZsYW4ubGlzdCwgJnNkYXRhLT51LnZsYW4uYXAtPnUuYXAudmxhbnMpOwotCQkvKiBubyBuZWVkIHRvIHRlbGwgZHJpdmVyICovCi0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKLQkJLyogbXVzdCBiZSBiZWZvcmUgdGhlIGNhbGwgdG8gaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIgKi8KLQkJbG9jYWwtPm1vbml0b3JzKys7Ci0JCWlmIChsb2NhbC0+bW9uaXRvcnMgPT0gMSkgewotCQkJbmV0aWZfdHhfbG9ja19iaChsb2NhbC0+bWRldik7Ci0JCQlpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7Ci0JCQluZXRpZl90eF91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwotCi0JCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9SQURJT1RBUDsKLQkJfQotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JZGVmYXVsdDoKLQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKLQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwotCQljb25mLm1hY19hZGRyID0gZGV2LT5kZXZfYWRkcjsKLQkJcmVzID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksICZjb25mKTsKLQkJaWYgKHJlcyAmJiAhbG9jYWwtPm9wZW5fY291bnQgJiYgbG9jYWwtPm9wcy0+c3RvcCkKLQkJCWxvY2FsLT5vcHMtPnN0b3AobG9jYWxfdG9faHcobG9jYWwpKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0KLQkJaWVlZTgwMjExX2lmX2NvbmZpZyhkZXYpOwotCQlpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oZGV2KTsKLQkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKLQotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgotCQkgICAgIShzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpKQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJZWxzZQotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCX0KLQotCWlmIChsb2NhbC0+b3Blbl9jb3VudCA9PSAwKSB7Ci0JCXJlcyA9IGRldl9vcGVuKGxvY2FsLT5tZGV2KTsKLQkJV0FSTl9PTihyZXMpOwotCQl0YXNrbGV0X2VuYWJsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7Ci0JCXRhc2tsZXRfZW5hYmxlKCZsb2NhbC0+dGFza2xldCk7Ci0JfQotCi0JLyoKLQkgKiBzZXRfbXVsdGljYXN0X2xpc3Qgd2lsbCBiZSBpbnZva2VkIGJ5IHRoZSBuZXR3b3JraW5nIGNvcmUKLQkgKiB3aGljaCB3aWxsIGNoZWNrIHdoZXRoZXIgYW55IGluY3JlbWVudHMgaGVyZSB3ZXJlIGRvbmUgaW4KLQkgKiBlcnJvciBhbmQgc3luYyB0aGVtIGRvd24gdG8gdGhlIGhhcmR3YXJlIGFzIGZpbHRlciBmbGFncy4KLQkgKi8KLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJKQotCQlhdG9taWNfaW5jKCZsb2NhbC0+aWZmX2FsbG11bHRpcyk7Ci0KLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1BST01JU0MpCi0JCWF0b21pY19pbmMoJmxvY2FsLT5pZmZfcHJvbWlzY3MpOwotCi0JbG9jYWwtPm9wZW5fY291bnQrKzsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgaTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPmRldiA9PSBkZXYpCi0JCQlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspCi0JCQkJaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLT5kZXYsCi0JCQkJCQlzdGEtPmFkZHIsIGksCi0JCQkJCQlXTEFOX0JBQ0tfUkVDSVBJRU5ULAotCQkJCQkJV0xBTl9SRUFTT05fUVNUQV9MRUFWRV9RQlNTKTsKLQl9Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQkvKgotCSAqIERvbid0IGNvdW50IHRoaXMgaW50ZXJmYWNlIGZvciBwcm9taXNjL2FsbG11bHRpIHdoaWxlIGl0Ci0JICogaXMgZG93bi4gZGV2X21jX3Vuc3luYygpIHdpbGwgaW52b2tlIHNldF9tdWx0aWNhc3RfbGlzdAotCSAqIG9uIHRoZSBtYXN0ZXIgaW50ZXJmYWNlIHdoaWNoIHdpbGwgc3luYyB0aGVzZSBkb3duIHRvIHRoZQotCSAqIGhhcmR3YXJlIGFzIGZpbHRlciBmbGFncy4KLQkgKi8KLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJKQotCQlhdG9taWNfZGVjKCZsb2NhbC0+aWZmX2FsbG11bHRpcyk7Ci0KLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1BST01JU0MpCi0JCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfcHJvbWlzY3MpOwotCi0JZGV2X21jX3Vuc3luYyhsb2NhbC0+bWRldiwgZGV2KTsKLQotCS8qIEFQcyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50ICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICp2bGFuLCAqdG1wOwotCQlzdHJ1Y3QgYmVhY29uX2RhdGEgKm9sZF9iZWFjb24gPSBzZGF0YS0+dS5hcC5iZWFjb247Ci0KLQkJLyogcmVtb3ZlIGJlYWNvbiAqLwotCQlyY3VfYXNzaWduX3BvaW50ZXIoc2RhdGEtPnUuYXAuYmVhY29uLCBOVUxMKTsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKG9sZF9iZWFjb24pOwotCi0JCS8qIGRvd24gYWxsIGRlcGVuZGVudCBkZXZpY2VzLCB0aGF0IGlzIFZMQU5zICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB0bXAsICZzZGF0YS0+dS5hcC52bGFucywKLQkJCQkJIHUudmxhbi5saXN0KQotCQkJZGV2X2Nsb3NlKHZsYW4tPmRldik7Ci0JCVdBUk5fT04oIWxpc3RfZW1wdHkoJnNkYXRhLT51LmFwLnZsYW5zKSk7Ci0JfQotCi0JbG9jYWwtPm9wZW5fY291bnQtLTsKLQotCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOOgotCQlsaXN0X2RlbCgmc2RhdGEtPnUudmxhbi5saXN0KTsKLQkJc2RhdGEtPnUudmxhbi5hcCA9IE5VTEw7Ci0JCS8qIG5vIG5lZWQgdG8gdGVsbCBkcml2ZXIgKi8KLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSOgotCQlsb2NhbC0+bW9uaXRvcnMtLTsKLQkJaWYgKGxvY2FsLT5tb25pdG9ycyA9PSAwKSB7Ci0JCQluZXRpZl90eF9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKLQkJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7Ci0KLQkJCWxvY2FsLT5ody5jb25mLmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9SQURJT1RBUDsKLQkJfQotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6Ci0JCXNkYXRhLT51LnN0YS5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKLQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51LnN0YS50aW1lcik7Ci0JCS8qCi0JCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCi0JCSAqIENhbGwgc3luY2hyb25pemVfcmN1KCkgdG8gd2FpdCBmb3IgdGhlIFJYIHBhdGgKLQkJICogc2hvdWxkIGl0IGJlIHVzaW5nIHRoZSBpbnRlcmZhY2UgYW5kIGVucXVldWluZwotCQkgKiBmcmFtZXMgYXQgdGhpcyB2ZXJ5IHRpbWUgb24gYW5vdGhlciBDUFUuCi0JCSAqLwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5zdGEuc2tiX3F1ZXVlKTsKLQotCQlpZiAobG9jYWwtPnNjYW5fZGV2ID09IHNkYXRhLT5kZXYpIHsKLQkJCWlmICghbG9jYWwtPm9wcy0+aHdfc2NhbikgewotCQkJCWxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgPSAwOwotCQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmxvY2FsLT5zY2FuX3dvcmspOwotCQkJfSBlbHNlCi0JCQkJbG9jYWwtPnN0YV9od19zY2FubmluZyA9IDA7Ci0JCX0KLQotCQlmbHVzaF93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7Ci0KLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmV4dHJhX2llKTsKLQkJc2RhdGEtPnUuc3RhLmV4dHJhX2llID0gTlVMTDsKLQkJc2RhdGEtPnUuc3RhLmV4dHJhX2llX2xlbiA9IDA7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWRlZmF1bHQ6Ci0JCWNvbmYudmlmID0gJnNkYXRhLT52aWY7Ci0JCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQkJY29uZi5tYWNfYWRkciA9IGRldi0+ZGV2X2FkZHI7Ci0JCS8qIGRpc2FibGUgYWxsIGtleXMgZm9yIGFzIGxvbmcgYXMgdGhpcyBuZXRkZXYgaXMgZG93biAqLwotCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKLQkJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksICZjb25mKTsKLQl9Ci0KLQlpZiAobG9jYWwtPm9wZW5fY291bnQgPT0gMCkgewotCQlpZiAobmV0aWZfcnVubmluZyhsb2NhbC0+bWRldikpCi0JCQlkZXZfY2xvc2UobG9jYWwtPm1kZXYpOwotCi0JCWlmIChsb2NhbC0+b3BzLT5zdG9wKQotCQkJbG9jYWwtPm9wcy0+c3RvcChsb2NhbF90b19odyhsb2NhbCkpOwotCi0JCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIDApOwotCi0JCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7Ci0JCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnRhc2tsZXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaW50IGFsbG11bHRpLCBwcm9taXNjLCBzZGF0YV9hbGxtdWx0aSwgc2RhdGFfcHJvbWlzYzsKLQotCWFsbG11bHRpID0gISEoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSk7Ci0JcHJvbWlzYyA9ICEhKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyk7Ci0Jc2RhdGFfYWxsbXVsdGkgPSAhIShzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfQUxMTVVMVEkpOwotCXNkYXRhX3Byb21pc2MgPSAhIShzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfUFJPTUlTQyk7Ci0KLQlpZiAoYWxsbXVsdGkgIT0gc2RhdGFfYWxsbXVsdGkpIHsKLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCi0JCQlhdG9taWNfaW5jKCZsb2NhbC0+aWZmX2FsbG11bHRpcyk7Ci0JCWVsc2UKLQkJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfYWxsbXVsdGlzKTsKLQkJc2RhdGEtPmZsYWdzIF49IElFRUU4MDIxMV9TREFUQV9BTExNVUxUSTsKLQl9Ci0KLQlpZiAocHJvbWlzYyAhPSBzZGF0YV9wcm9taXNjKSB7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCQlhdG9taWNfaW5jKCZsb2NhbC0+aWZmX3Byb21pc2NzKTsKLQkJZWxzZQotCQkJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9wcm9taXNjcyk7Ci0JCXNkYXRhLT5mbGFncyBePSBJRUVFODAyMTFfU0RBVEFfUFJPTUlTQzsKLQl9Ci0KLQlkZXZfbWNfc3luYyhsb2NhbC0+bWRldiwgZGV2KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGllZWU4MDIxMV9oZWFkZXJfb3BzID0gewotCS5jcmVhdGUJCT0gZXRoX2hlYWRlciwKLQkucGFyc2UJCT0gaGVhZGVyX3BhcnNlXzgwMjExLAotCS5yZWJ1aWxkCT0gZXRoX3JlYnVpbGRfaGVhZGVyLAotCS5jYWNoZQkJPSBldGhfaGVhZGVyX2NhY2hlLAotCS5jYWNoZV91cGRhdGUJPSBldGhfaGVhZGVyX2NhY2hlX3VwZGF0ZSwKLX07Ci0KLS8qIE11c3Qgbm90IGJlIGNhbGxlZCBmb3IgbWRldiAqLwotdm9pZCBpZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlldGhlcl9zZXR1cChkZXYpOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQ7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9IGllZWU4MDIxMV9vcGVuOwotCWRldi0+c3RvcCA9IGllZWU4MDIxMV9zdG9wOwotCWRldi0+ZGVzdHJ1Y3RvciA9IGllZWU4MDIxMV9pZl9mcmVlOwotfQotCi0vKiBXRFMgc3BlY2lhbHRpZXMgKi8KLQotaW50IGllZWU4MDIxMV9pZl91cGRhdGVfd2RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpyZW1vdGVfYWRkcikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIocmVtb3RlX2FkZHIsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkcikgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBDcmVhdGUgU1RBIGVudHJ5IGZvciB0aGUgbmV3IHBlZXIgKi8KLQlzdGEgPSBzdGFfaW5mb19hZGQobG9jYWwsIGRldiwgcmVtb3RlX2FkZHIsIEdGUF9LRVJORUwpOwotCWlmICghc3RhKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzdGFfaW5mb19wdXQoc3RhKTsKLQotCS8qIFJlbW92ZSBTVEEgZW50cnkgZm9yIHRoZSBvbGQgcGVlciAqLwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyKTsKLQlpZiAoc3RhKSB7Ci0JCXN0YV9pbmZvX2ZyZWUoc3RhKTsKLQkJc3RhX2luZm9fcHV0KHN0YSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjb3VsZCBub3QgZmluZCBTVEEgZW50cnkgZm9yIFdEUyBsaW5rICIKLQkJICAgICAgICJwZWVyICVzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBzZGF0YS0+dS53ZHMucmVtb3RlX2FkZHIpKTsKLQl9Ci0KLQkvKiBVcGRhdGUgV0RTIGxpbmsgZGF0YSAqLwotCW1lbWNweSgmc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCByZW1vdGVfYWRkciwgRVRIX0FMRU4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGV2ZXJ5dGhpbmcgZWxzZSAqLwotCi1zdGF0aWMgaW50IF9faWVlZTgwMjExX2lmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9jb25mIGNvbmY7Ci0KLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZpZ19pbnRlcmZhY2UgfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihjb25mKSk7Ci0JY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7Ci0JCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5zdGEuYnNzaWQ7Ci0JCWNvbmYuc3NpZCA9IHNkYXRhLT51LnN0YS5zc2lkOwotCQljb25mLnNzaWRfbGVuID0gc2RhdGEtPnUuc3RhLnNzaWRfbGVuOwotCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7Ci0JCWNvbmYuc3NpZCA9IHNkYXRhLT51LmFwLnNzaWQ7Ci0JCWNvbmYuc3NpZF9sZW4gPSBzZGF0YS0+dS5hcC5zc2lkX2xlbjsKLQkJY29uZi5iZWFjb24gPSBiZWFjb247Ci0JCWNvbmYuYmVhY29uX2NvbnRyb2wgPSBjb250cm9sOwotCX0KLQlyZXR1cm4gbG9jYWwtPm9wcy0+Y29uZmlnX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksCi0JCQkJCSAgICAmc2RhdGEtPnZpZiwgJmNvbmYpOwotfQotCi1pbnQgaWVlZTgwMjExX2lmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiBfX2llZWU4MDIxMV9pZl9jb25maWcoZGV2LCBOVUxMLCBOVUxMKTsKLX0KLQotaW50IGllZWU4MDIxMV9pZl9jb25maWdfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IT1NUX0dFTl9CRUFDT05fVEVNUExBVEUpKQotCQlyZXR1cm4gMDsKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChsb2NhbF90b19odyhsb2NhbCksICZzZGF0YS0+dmlmLAotCQkJCSAgICZjb250cm9sKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIF9faWVlZTgwMjExX2lmX2NvbmZpZyhkZXYsIHNrYiwgJmNvbnRyb2wpOwotfQotCi1pbnQgaWVlZTgwMjExX2h3X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCWludCByZXQgPSAwOwotCi0JaWYgKGxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcpIHsKLQkJY2hhbiA9IGxvY2FsLT5zY2FuX2NoYW5uZWw7Ci0JCW1vZGUgPSBsb2NhbC0+c2Nhbl9od19tb2RlOwotCX0gZWxzZSB7Ci0JCWNoYW4gPSBsb2NhbC0+b3Blcl9jaGFubmVsOwotCQltb2RlID0gbG9jYWwtPm9wZXJfaHdfbW9kZTsKLQl9Ci0KLQlsb2NhbC0+aHcuY29uZi5jaGFubmVsID0gY2hhbi0+Y2hhbjsKLQlsb2NhbC0+aHcuY29uZi5jaGFubmVsX3ZhbCA9IGNoYW4tPnZhbDsKLQlpZiAoIWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsKSB7Ci0JCWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsID0gY2hhbi0+cG93ZXJfbGV2ZWw7Ci0JfSBlbHNlIHsKLQkJbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgPSBtaW4oY2hhbi0+cG93ZXJfbGV2ZWwsCi0JCQkJCQkgbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwpOwotCX0KLQlsb2NhbC0+aHcuY29uZi5mcmVxID0gY2hhbi0+ZnJlcTsKLQlsb2NhbC0+aHcuY29uZi5waHltb2RlID0gbW9kZS0+bW9kZTsKLQlsb2NhbC0+aHcuY29uZi5hbnRlbm5hX21heCA9IGNoYW4tPmFudGVubmFfbWF4OwotCWxvY2FsLT5ody5jb25mLmNoYW4gPSBjaGFuOwotCWxvY2FsLT5ody5jb25mLm1vZGUgPSBtb2RlOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiSFcgQ09ORklHOiBjaGFubmVsPSVkIGZyZXE9JWQgIgotCSAgICAgICAicGh5bW9kZT0lZFxuIiwgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCwgbG9jYWwtPmh3LmNvbmYuZnJlcSwKLQkgICAgICAgbG9jYWwtPmh3LmNvbmYucGh5bW9kZSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KLQotCWlmIChsb2NhbC0+b3Blbl9jb3VudCkKLQkJcmV0ID0gbG9jYWwtPm9wcy0+Y29uZmlnKGxvY2FsX3RvX2h3KGxvY2FsKSwgJmxvY2FsLT5ody5jb25mKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogaWVlZTgwMjExX2h3X2NvbmZpZ19odCBzaG91bGQgYmUgdXNlZCBvbmx5IGFmdGVyIGxlZ2FjeSBjb25maWd1cmF0aW9uCi0gKiBoYXMgYmVlbiBkZXRlcm1pbmVkLCBhcyBodCBjb25maWd1cmF0aW9uIGRlcGVuZHMgdXBvbiB0aGUgaGFyZHdhcmUncwotICogSFQgYWJpbGl0aWVzIGZvciBhIF9zcGVjaWZpY18gYmFuZC4KLSAqLwotaW50IGllZWU4MDIxMV9od19jb25maWdfaHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBlbmFibGVfaHQsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKnJlcV9odF9jYXAsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvICpyZXFfYnNzX2NhcCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWwtPmh3LmNvbmY7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlID0gY29uZi0+bW9kZTsKLQlpbnQgaTsKLQotCS8qIEhUIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQlpZiAoIW1vZGUtPmh0X2luZm8uaHRfc3VwcG9ydGVkKSB7Ci0JCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREU7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQkvKiBkaXNhYmxlIEhUICovCi0JaWYgKCFlbmFibGVfaHQpIHsKLQkJY29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERTsKLQl9IGVsc2UgewotCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREU7Ci0JCWNvbmYtPmh0X2NvbmYuY2FwID0gcmVxX2h0X2NhcC0+Y2FwICYgbW9kZS0+aHRfaW5mby5jYXA7Ci0JCWNvbmYtPmh0X2NvbmYuY2FwICY9IH4oSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTKTsKLQkJY29uZi0+aHRfY29uZi5jYXAgfD0KLQkJCW1vZGUtPmh0X2luZm8uY2FwICYgSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTOwotCQljb25mLT5odF9ic3NfY29uZi5wcmltYXJ5X2NoYW5uZWwgPQotCQkJcmVxX2Jzc19jYXAtPnByaW1hcnlfY2hhbm5lbDsKLQkJY29uZi0+aHRfYnNzX2NvbmYuYnNzX2NhcCA9IHJlcV9ic3NfY2FwLT5ic3NfY2FwOwotCQljb25mLT5odF9ic3NfY29uZi5ic3Nfb3BfbW9kZSA9IHJlcV9ic3NfY2FwLT5ic3Nfb3BfbW9kZTsKLQkJZm9yIChpID0gMDsgaSA8IFNVUFBfTUNTX1NFVF9MRU47IGkrKykKLQkJCWNvbmYtPmh0X2NvbmYuc3VwcF9tY3Nfc2V0W2ldID0KLQkJCQltb2RlLT5odF9pbmZvLnN1cHBfbWNzX3NldFtpXSAmCi0JCQkJICByZXFfaHRfY2FwLT5zdXBwX21jc19zZXRbaV07Ci0KLQkJLyogSW4gU1RBIG1vZGUsIHRoaXMgZ2l2ZXMgdXMgaW5kaWNhdGlvbgotCQkgKiB0byB0aGUgQVAncyBtb2RlIG9mIG9wZXJhdGlvbiAqLwotCQljb25mLT5odF9jb25mLmh0X3N1cHBvcnRlZCA9IDE7Ci0JCWNvbmYtPmh0X2NvbmYuYW1wZHVfZmFjdG9yID0gcmVxX2h0X2NhcC0+YW1wZHVfZmFjdG9yOwotCQljb25mLT5odF9jb25mLmFtcGR1X2RlbnNpdHkgPSByZXFfaHRfY2FwLT5hbXBkdV9kZW5zaXR5OwotCX0KLQotCWxvY2FsLT5vcHMtPmNvbmZfaHQobG9jYWxfdG9faHcobG9jYWwpLCAmbG9jYWwtPmh3LmNvbmYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICAgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKQotCQlsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKGxvY2FsX3RvX2h3KGxvY2FsKSwKLQkJCQkJICAgICAmc2RhdGEtPnZpZiwKLQkJCQkJICAgICAmc2RhdGEtPmJzc19jb25mLAotCQkJCQkgICAgIGNoYW5nZWQpOwotfQotCi12b2lkIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCXNkYXRhLT5ic3NfY29uZi51c2VfY3RzX3Byb3QgPSAwOwotCXNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUgPSAwOwotCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLAotCQkJCQkgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UIHwKLQkJCQkJIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzYXZlZDsKLQlpbnQgdG1wOwotCi0Jc2tiLT5kZXYgPSBsb2NhbC0+bWRldjsKLQlzYXZlZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KCFzYXZlZCkpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgotCQkJICAgICAgICJkcm9wcGluZyB0eCBzdGF0dXMiLCBza2ItPmRldi0+bmFtZSk7Ci0JCS8qIHNob3VsZCBiZSBkZXZfa2ZyZWVfc2tiX2lycSwgYnV0IGR1ZSB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nCi0JCSAqIG5hbWVkIF9pcnFzYWZlIGluc3RlYWQgb2YganVzdCBfaXJxIHdlIGNhbid0IGJlIHN1cmUgdGhhdAotCQkgKiBwZW9wbGUgd29uJ3QgY2FsbCBpdCBmcm9tIG5vbi1pcnEgY29udGV4dHMgKi8KLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuOwotCX0KLQltZW1jcHkoc2F2ZWQsIHN0YXR1cywgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzKSk7Ci0JLyogY29weSBwb2ludGVyIHRvIHNhdmVkIHN0YXR1cyBpbnRvIHNrYi0+Y2IgZm9yIHVzZSBieSB0YXNrbGV0ICovCi0JbWVtY3B5KHNrYi0+Y2IsICZzYXZlZCwgc2l6ZW9mKHNhdmVkKSk7Ci0KLQlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX1RYX1NUQVRVU19NU0c7Ci0Jc2tiX3F1ZXVlX3RhaWwoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1JFUV9UWF9TVEFUVVMgPwotCQkgICAgICAgJmxvY2FsLT5za2JfcXVldWUgOiAmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlLCBza2IpOwotCXRtcCA9IHNrYl9xdWV1ZV9sZW4oJmxvY2FsLT5za2JfcXVldWUpICsKLQkJc2tiX3F1ZXVlX2xlbigmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKLQl3aGlsZSAodG1wID4gSUVFRTgwMjExX0lSUVNBRkVfUVVFVUVfTElNSVQgJiYKLQkgICAgICAgKHNrYiA9IHNrYl9kZXF1ZXVlKCZsb2NhbC0+c2tiX3F1ZXVlX3VucmVsaWFibGUpKSkgewotCQltZW1jcHkoJnNhdmVkLCBza2ItPmNiLCBzaXplb2Yoc2F2ZWQpKTsKLQkJa2ZyZWUoc2F2ZWQpOwotCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCQl0bXAtLTsKLQkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X3N0YXR1c19kcm9wKTsKLQl9Ci0JdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUpOwotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdGFza2xldF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICopIGRhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1czsKLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmxvY2FsLT5za2JfcXVldWUpKSB8fAotCSAgICAgICAoc2tiID0gc2tiX2RlcXVldWUoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSkpKSB7Ci0JCXN3aXRjaCAoc2tiLT5wa3RfdHlwZSkgewotCQljYXNlIElFRUU4MDIxMV9SWF9NU0c6Ci0JCQkvKiBzdGF0dXMgaXMgaW4gc2tiLT5jYiAqLwotCQkJbWVtY3B5KCZyeF9zdGF0dXMsIHNrYi0+Y2IsIHNpemVvZihyeF9zdGF0dXMpKTsKLQkJCS8qIENsZWFyIHNrYi0+cGt0X3R5cGUgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2Uga2VybmVsCi0JCQkgKiBuZXRzdGFjay4gKi8KLQkJCXNrYi0+cGt0X3R5cGUgPSAwOwotCQkJX19pZWVlODAyMTFfcngobG9jYWxfdG9faHcobG9jYWwpLCBza2IsICZyeF9zdGF0dXMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1RYX1NUQVRVU19NU0c6Ci0JCQkvKiBnZXQgcG9pbnRlciB0byBzYXZlZCBzdGF0dXMgb3V0IG9mIHNrYi0+Y2IgKi8KLQkJCW1lbWNweSgmdHhfc3RhdHVzLCBza2ItPmNiLCBzaXplb2YodHhfc3RhdHVzKSk7Ci0JCQlza2ItPnBrdF90eXBlID0gMDsKLQkJCWllZWU4MDIxMV90eF9zdGF0dXMobG9jYWxfdG9faHcobG9jYWwpLAotCQkJCQkgICAgc2tiLCB0eF9zdGF0dXMpOwotCQkJa2ZyZWUodHhfc3RhdHVzKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUhICovCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmtub3duIG1lc3NhZ2UgdHlwZSAoJWQpXG4iLAotCQkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgc2tiLT5wa3RfdHlwZSk7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotLyogUmVtb3ZlIGFkZGVkIGhlYWRlcnMgKGUuZy4sIFFvUyBjb250cm9sKSwgZW5jcnlwdGlvbiBoZWFkZXIvTUlDLCBldGMuIHRvCi0gKiBtYWtlIGEgcHJlcGFyZWQgVFggZnJhbWUgKG9uZSB0aGF0IGhhcyBiZWVuIGdpdmVuIHRvIGh3KSB0byBsb29rIGxpa2UgYnJhbmQKLSAqIG5ldyBJRUVFIDgwMi4xMSBmcmFtZSB0aGF0IGlzIHJlYWR5IHRvIGdvIHRocm91Z2ggVFggcHJvY2Vzc2luZyBhZ2Fpbi4KLSAqIEFsc28sIHR4X3BhY2tldF9kYXRhIGluIGNiIGlzIHJlc3RvcmVkIGZyb20gdHhfY29udHJvbC4gKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZW1vdmVfdHhfZXh0cmEoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKLQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKLXsKLQlpbnQgaGRybGVuLCBpdl9sZW4sIG1pY19sZW47Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqcGt0X2RhdGE7Ci0KLQlwa3RfZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICopc2tiLT5jYjsKLQlwa3RfZGF0YS0+aWZpbmRleCA9IHZpZl90b19zZGF0YShjb250cm9sLT52aWYpLT5kZXYtPmlmaW5kZXg7Ci0JcGt0X2RhdGEtPmZsYWdzID0gMDsKLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfUkVRX1RYX1NUQVRVUykKLQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX1JFUV9UWF9TVEFUVVM7Ci0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUKQotCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfRE9fTk9UX0VOQ1JZUFQ7Ci0JaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1JFUVVFVUUpCi0JCXBrdF9kYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfVFhQRF9SRVFVRVVFOwotCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9FQVBPTF9GUkFNRSkKLQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX0VBUE9MX0ZSQU1FOwotCXBrdF9kYXRhLT5xdWV1ZSA9IGNvbnRyb2wtPnF1ZXVlOwotCi0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQotCWlmICgha2V5KQotCQlnb3RvIG5vX2tleTsKLQotCXN3aXRjaCAoa2V5LT5jb25mLmFsZykgewotCWNhc2UgQUxHX1dFUDoKLQkJaXZfbGVuID0gV0VQX0lWX0xFTjsKLQkJbWljX2xlbiA9IFdFUF9JQ1ZfTEVOOwotCQlicmVhazsKLQljYXNlIEFMR19US0lQOgotCQlpdl9sZW4gPSBUS0lQX0lWX0xFTjsKLQkJbWljX2xlbiA9IFRLSVBfSUNWX0xFTjsKLQkJYnJlYWs7Ci0JY2FzZSBBTEdfQ0NNUDoKLQkJaXZfbGVuID0gQ0NNUF9IRFJfTEVOOwotCQltaWNfbGVuID0gQ0NNUF9NSUNfTEVOOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb3RvIG5vX2tleTsKLQl9Ci0KLQlpZiAoc2tiLT5sZW4gPj0gbWljX2xlbiAmJgotCSAgICAhKGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkpCi0JCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBtaWNfbGVuKTsKLQlpZiAoc2tiLT5sZW4gPj0gaXZfbGVuICYmIHNrYi0+bGVuID4gaGRybGVuKSB7Ci0JCW1lbW1vdmUoc2tiLT5kYXRhICsgaXZfbGVuLCBza2ItPmRhdGEsIGhkcmxlbik7Ci0JCXNrYl9wdWxsKHNrYiwgaXZfbGVuKTsKLQl9Ci0KLW5vX2tleToKLQl7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCQl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCQlpZiAoKGZjICYgMHg4QykgPT0gMHg4OCkgLyogUW9TIENvbnRyb2wgRmllbGQgKi8gewotCQkJZmMgJj0gfklFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKLQkJCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKLQkJCW1lbW1vdmUoc2tiLT5kYXRhICsgMiwgc2tiLT5kYXRhLCBoZHJsZW4gLSAyKTsKLQkJCXNrYl9wdWxsKHNrYiwgMik7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKQotewotCXN0cnVjdCBza19idWZmICpza2IyOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXUxNiBmcmFnLCB0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyICpydGhkcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlpbnQgbW9uaXRvcnM7Ci0KLQlpZiAoIXN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogaWVlZTgwMjExX3R4X3N0YXR1cyBjYWxsZWQgd2l0aCBOVUxMIHN0YXR1c1xuIiwKLQkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChzdGF0dXMtPmV4Y2Vzc2l2ZV9yZXRyaWVzKSB7Ci0JCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwotCQlpZiAoc3RhKSB7Ci0JCQlpZiAoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTKSB7Ci0JCQkJLyogVGhlIFNUQSBpcyBpbiBwb3dlciBzYXZlIG1vZGUsIHNvIGFzc3VtZQotCQkJCSAqIHRoYXQgdGhpcyBUWCBwYWNrZXQgZmFpbGVkIGJlY2F1c2Ugb2YgdGhhdC4KLQkJCQkgKi8KLQkJCQlzdGF0dXMtPmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKLQkJCQlzdGF0dXMtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfVFhfRklMVEVSRUQ7Ci0JCQl9Ci0JCQlzdGFfaW5mb19wdXQoc3RhKTsKLQkJfQotCX0KLQotCWlmIChzdGF0dXMtPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRVU19UWF9GSUxURVJFRCkgewotCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKLQkJaWYgKHN0YSkgewotCQkJc3RhLT50eF9maWx0ZXJlZF9jb3VudCsrOwotCi0JCQkvKiBDbGVhciB0aGUgVFggZmlsdGVyIG1hc2sgZm9yIHRoaXMgU1RBIHdoZW4gc2VuZGluZwotCQkJICogdGhlIG5leHQgcGFja2V0LiBJZiB0aGUgU1RBIHdlbnQgdG8gcG93ZXIgc2F2ZSBtb2RlLAotCQkJICogdGhpcyB3aWxsIGhhcHBlbiB3aGVuIGl0IGlzIHdha2luZyB1cCBmb3IgdGhlIG5leHQKLQkJCSAqIHRpbWUuICovCi0JCQlzdGEtPmNsZWFyX2RzdF9tYXNrID0gMTsKLQotCQkJLyogVE9ETzogSXMgdGhlIFdMQU5fU1RBX1BTIGZsYWcgYWx3YXlzIHNldCBoZXJlIG9yIGlzCi0JCQkgKiB0aGUgcmFjZSBiZXR3ZWVuIFJYIGFuZCBUWCBzdGF0dXMgY2F1c2luZyBzb21lCi0JCQkgKiBwYWNrZXRzIHRvIGJlIGZpbHRlcmVkIG91dCBiZWZvcmUgODAyMTEubyBnZXRzIGFuCi0JCQkgKiB1cGRhdGUgZm9yIFBTIHN0YXR1cz8gVGhpcyBzZWVtcyB0byBiZSB0aGUgY2FzZSwgc28KLQkJCSAqIG5vIGNoYW5nZXMgYXJlIGxpa2VseSB0byBiZSBuZWVkZWQuICovCi0JCQlpZiAoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTICYmCi0JCQkgICAgc2tiX3F1ZXVlX2xlbigmc3RhLT50eF9maWx0ZXJlZCkgPAotCQkJICAgIFNUQV9NQVhfVFhfQlVGRkVSKSB7Ci0JCQkJaWVlZTgwMjExX3JlbW92ZV90eF9leHRyYShsb2NhbCwgc3RhLT5rZXksCi0JCQkJCQkJICBza2IsCi0JCQkJCQkJICAmc3RhdHVzLT5jb250cm9sKTsKLQkJCQlza2JfcXVldWVfdGFpbCgmc3RhLT50eF9maWx0ZXJlZCwgc2tiKTsKLQkJCX0gZWxzZSBpZiAoIShzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMpICYmCi0JCQkJICAgIShzdGF0dXMtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfUkVRVUVVRSkpIHsKLQkJCQkvKiBTb2Z0d2FyZSByZXRyeSB0aGUgcGFja2V0IG9uY2UgKi8KLQkJCQlzdGF0dXMtPmNvbnRyb2wuZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX1JFUVVFVUU7Ci0JCQkJaWVlZTgwMjExX3JlbW92ZV90eF9leHRyYShsb2NhbCwgc3RhLT5rZXksCi0JCQkJCQkJICBza2IsCi0JCQkJCQkJICAmc3RhdHVzLT5jb250cm9sKTsKLQkJCQlkZXZfcXVldWVfeG1pdChza2IpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCAiCi0JCQkJCSAgICAgICAiZmlsdGVyZWQgZnJhbWUgcXVldWVfbGVuPSVkICIKLQkJCQkJICAgICAgICJQUz0lZCBAJWx1XG4iLAotCQkJCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLAotCQkJCQkgICAgICAgc2tiX3F1ZXVlX2xlbigKLQkJCQkJCSAgICAgICAmc3RhLT50eF9maWx0ZXJlZCksCi0JCQkJCSAgICAgICAhIShzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMpLAotCQkJCQkgICAgICAgamlmZmllcyk7Ci0JCQkJfQotCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCX0KLQkJCXN0YV9pbmZvX3B1dChzdGEpOwotCQkJcmV0dXJuOwotCQl9Ci0JfSBlbHNlCi0JCXJhdGVfY29udHJvbF90eF9zdGF0dXMobG9jYWwtPm1kZXYsIHNrYiwgc3RhdHVzKTsKLQotCWllZWU4MDIxMV9sZWRfdHgobG9jYWwsIDApOwotCi0JLyogU05NUCBjb3VudGVycwotCSAqIEZyYWdtZW50cyBhcmUgcGFzc2VkIHRvIGxvdy1sZXZlbCBkcml2ZXJzIGFzIHNlcGFyYXRlIHNrYnMsIHNvIHRoZXNlCi0JICogYXJlIGFjdHVhbGx5IGZyYWdtZW50cywgbm90IGZyYW1lcy4gVXBkYXRlIGZyYW1lIGNvdW50ZXJzIG9ubHkgZm9yCi0JICogdGhlIGZpcnN0IGZyYWdtZW50IG9mIHRoZSBmcmFtZS4gKi8KLQotCWZyYWcgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUc7Ci0JdHlwZSA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKLQotCWlmIChzdGF0dXMtPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRVU19BQ0spIHsKLQkJaWYgKGZyYWcgPT0gMCkgewotCQkJbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50Kys7Ci0JCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCQkJbG9jYWwtPmRvdDExTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50Kys7Ci0JCQlpZiAoc3RhdHVzLT5yZXRyeV9jb3VudCA+IDApCi0JCQkJbG9jYWwtPmRvdDExUmV0cnlDb3VudCsrOwotCQkJaWYgKHN0YXR1cy0+cmV0cnlfY291bnQgPiAxKQotCQkJCWxvY2FsLT5kb3QxMU11bHRpcGxlUmV0cnlDb3VudCsrOwotCQl9Ci0KLQkJLyogVGhpcyBjb3VudGVyIHNoYWxsIGJlIGluY3JlbWVudGVkIGZvciBhbiBhY2tub3dsZWRnZWQgTVBEVQotCQkgKiB3aXRoIGFuIGluZGl2aWR1YWwgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyAxIGZpZWxkIG9yIGFuIE1QRFUKLQkJICogd2l0aCBhIG11bHRpY2FzdCBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIDEgZmllbGQgb2YgdHlwZSBEYXRhCi0JCSAqIG9yIE1hbmFnZW1lbnQuICovCi0JCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKLQkJICAgIHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKLQkJICAgIHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpCi0JCQlsb2NhbC0+ZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQrKzsKLQl9IGVsc2UgewotCQlpZiAoZnJhZyA9PSAwKQotCQkJbG9jYWwtPmRvdDExRmFpbGVkQ291bnQrKzsKLQl9Ci0KLQkvKiB0aGlzIHdhcyBhIHRyYW5zbWl0dGVkIGZyYW1lLCBidXQgbm93IHdlIHdhbnQgdG8gcmV1c2UgaXQgKi8KLQlza2Jfb3JwaGFuKHNrYik7Ci0KLQlpZiAoIWxvY2FsLT5tb25pdG9ycykgewotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBzZW5kIGZyYW1lIHRvIG1vbml0b3IgaW50ZXJmYWNlcyBub3cgKi8KLQotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZigqcnRoZHIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExX3R4X3N0YXR1czogaGVhZHJvb20gdG9vIHNtYWxsXG4iKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCi0JcnRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXNfcnRhcF9oZHIqKQotCQkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGhkcikpOwotCi0JbWVtc2V0KHJ0aGRyLCAwLCBzaXplb2YoKnJ0aGRyKSk7Ci0JcnRoZHItPmhkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJ0aGRyKSk7Ci0JcnRoZHItPmhkci5pdF9wcmVzZW50ID0KLQkJY3B1X3RvX2xlMzIoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTKSB8Ci0JCQkgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RBVEFfUkVUUklFUykpOwotCi0JaWYgKCEoc3RhdHVzLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLKSAmJgotCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCXJ0aGRyLT50eF9mbGFncyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9GQUlMKTsKLQotCWlmICgoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSAmJgotCSAgICAoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkpCi0JCXJ0aGRyLT50eF9mbGFncyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9DVFMpOwotCWVsc2UgaWYgKHN0YXR1cy0+Y29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykKLQkJcnRoZHItPnR4X2ZsYWdzIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX1JUUyk7Ci0KLQlydGhkci0+ZGF0YV9yZXRyaWVzID0gc3RhdHVzLT5yZXRyeV9jb3VudDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQltb25pdG9ycyA9IGxvY2FsLT5tb25pdG9yczsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCS8qCi0JCSAqIFVzaW5nIHRoZSBtb25pdG9ycyBjb3VudGVyIGlzIHBvc3NpYmx5IHJhY3ksIGJ1dAotCQkgKiBpZiB0aGUgdmFsdWUgaXMgd3Jvbmcgd2Ugc2ltcGx5IGVpdGhlciBjbG9uZSB0aGUgc2tiCi0JCSAqIG9uY2UgdG9vIG11Y2ggb3IgZm9yZ2V0IHNlbmRpbmcgaXQgdG8gb25lIG1vbml0b3IgaWZhY2UKLQkJICogVGhlIGxhdHRlciBjYXNlIGlzbid0IG5pY2UgYnV0IGZpeGluZyB0aGUgcmFjZSBpcyBtdWNoCi0JCSAqIG1vcmUgY29tcGxpY2F0ZWQuCi0JCSAqLwotCQlpZiAoIW1vbml0b3JzIHx8ICFza2IpCi0JCQlnb3RvIG91dDsKLQotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX01OVFIpIHsKLQkJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCQljb250aW51ZTsKLQkJCW1vbml0b3JzLS07Ci0JCQlpZiAobW9uaXRvcnMpCi0JCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCQkJZWxzZQotCQkJCXNrYjIgPSBOVUxMOwotCQkJc2tiLT5kZXYgPSBzZGF0YS0+ZGV2OwotCQkJLyogWFhYOiBpcyB0aGlzIHN1ZmZpY2llbnQgZm9yIEJQRj8gKi8KLQkJCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKLQkJCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOwotCQkJbmV0aWZfcngoc2tiKTsKLQkJCXNrYiA9IHNrYjI7Ci0JCX0KLQl9Ci0gb3V0OgotCXJjdV9yZWFkX3VubG9jaygpOwotCWlmIChza2IpCi0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4X3N0YXR1cyk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19odyhzaXplX3QgcHJpdl9kYXRhX2xlbiwKLQkJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcykKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlpbnQgcHJpdl9zaXplOwotCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0KLQkvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLgotCSAqIFdlIHVzZSB0aGUgd2lwaHkgcHJpdiBkYXRhIGZvciBib3RoIG91ciBpZWVlODAyMTFfbG9jYWwgYW5kIGZvcgotCSAqIHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEKLQkgKgotCSAqIEluIG1lbW9yeSBpdCdsbCBiZSBsaWtlIHRoaXM6Ci0JICoKLQkgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiB8IHN0cnVjdCB3aXBoeQkgICAgfAotCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIHwgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAgfAotCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIHwgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhICAgfAotCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqCi0JICovCi0JcHJpdl9zaXplID0gKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCkgKwotCQkgICAgICBORVRERVZfQUxJR05fQ09OU1QpICYgfk5FVERFVl9BTElHTl9DT05TVCkgKwotCQkgICAgcHJpdl9kYXRhX2xlbjsKLQotCXdpcGh5ID0gd2lwaHlfbmV3KCZtYWM4MDIxMV9jb25maWdfb3BzLCBwcml2X3NpemUpOwotCi0JaWYgKCF3aXBoeSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQl3aXBoeS0+cHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkOwotCi0JbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKLQlsb2NhbC0+aHcud2lwaHkgPSB3aXBoeTsKLQotCWxvY2FsLT5ody5wcml2ID0gKGNoYXIgKilsb2NhbCArCi0JCQkgKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCkgKwotCQkJICAgTkVUREVWX0FMSUdOX0NPTlNUKSAmIH5ORVRERVZfQUxJR05fQ09OU1QpOwotCi0JQlVHX09OKCFvcHMtPnR4KTsKLQlCVUdfT04oIW9wcy0+c3RhcnQpOwotCUJVR19PTighb3BzLT5zdG9wKTsKLQlCVUdfT04oIW9wcy0+Y29uZmlnKTsKLQlCVUdfT04oIW9wcy0+YWRkX2ludGVyZmFjZSk7Ci0JQlVHX09OKCFvcHMtPnJlbW92ZV9pbnRlcmZhY2UpOwotCUJVR19PTighb3BzLT5jb25maWd1cmVfZmlsdGVyKTsKLQlsb2NhbC0+b3BzID0gb3BzOwotCi0JLyogZm9yIG5vdywgbWRldiBuZWVkcyBzdWJfaWZfZGF0YSA6LyAqLwotCW1kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEpLAotCQkJICAgICJ3bWFzdGVyJWQiLCBldGhlcl9zZXR1cCk7Ci0JaWYgKCFtZGV2KSB7Ci0JCXdpcGh5X2ZyZWUod2lwaHkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKG1kZXYpOwotCW1kZXYtPmllZWU4MDIxMV9wdHIgPSAmc2RhdGEtPndkZXY7Ci0Jc2RhdGEtPndkZXYud2lwaHkgPSB3aXBoeTsKLQotCWxvY2FsLT5ody5xdWV1ZXMgPSAxOyAvKiBkZWZhdWx0ICovCi0KLQlsb2NhbC0+bWRldiA9IG1kZXY7Ci0JbG9jYWwtPnJ4X3ByZV9oYW5kbGVycyA9IGllZWU4MDIxMV9yeF9wcmVfaGFuZGxlcnM7Ci0JbG9jYWwtPnJ4X2hhbmRsZXJzID0gaWVlZTgwMjExX3J4X2hhbmRsZXJzOwotCWxvY2FsLT50eF9oYW5kbGVycyA9IGllZWU4MDIxMV90eF9oYW5kbGVyczsKLQotCWxvY2FsLT5icmlkZ2VfcGFja2V0cyA9IDE7Ci0KLQlsb2NhbC0+cnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDsKLQlsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEOwotCWxvY2FsLT5zaG9ydF9yZXRyeV9saW1pdCA9IDc7Ci0JbG9jYWwtPmxvbmdfcmV0cnlfbGltaXQgPSA0OwotCWxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgPSAxOwotCi0JbG9jYWwtPmVuYWJsZWRfbW9kZXMgPSB+MDsKLQotCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+bW9kZXNfbGlzdCk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPmludGVyZmFjZXMpOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmxvY2FsLT5zY2FuX3dvcmssIGllZWU4MDIxMV9zdGFfc2Nhbl93b3JrKTsKLQlpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChtZGV2KTsKLQotCXN0YV9pbmZvX2luaXQobG9jYWwpOwotCi0JbWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0OwotCW1kZXYtPm9wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW47Ci0JbWRldi0+c3RvcCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RvcDsKLQltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQltZGV2LT5oZWFkZXJfb3BzID0gJmllZWU4MDIxMV9oZWFkZXJfb3BzOwotCW1kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9tYXN0ZXJfc2V0X211bHRpY2FzdF9saXN0OwotCi0Jc2RhdGEtPnZpZi50eXBlID0gSUVFRTgwMjExX0lGX1RZUEVfQVA7Ci0Jc2RhdGEtPmRldiA9IG1kZXY7Ci0Jc2RhdGEtPmxvY2FsID0gbG9jYWw7Ci0Jc2RhdGEtPnUuYXAuZm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gLTE7Ci0Jc2RhdGEtPnUuYXAubWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKLQlpZWVlODAyMTFfaWZfc2RhdGFfaW5pdChzZGF0YSk7Ci0JLyogbm8gUkNVIG5lZWRlZCBzaW5jZSB3ZSdyZSBzdGlsbCBkdXJpbmcgaW5pdCBwaGFzZSAqLwotCWxpc3RfYWRkX3RhaWwoJnNkYXRhLT5saXN0LCAmbG9jYWwtPmludGVyZmFjZXMpOwotCi0JdGFza2xldF9pbml0KCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0LCBpZWVlODAyMTFfdHhfcGVuZGluZywKLQkJICAgICAodW5zaWduZWQgbG9uZylsb2NhbCk7Ci0JdGFza2xldF9kaXNhYmxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKLQotCXRhc2tsZXRfaW5pdCgmbG9jYWwtPnRhc2tsZXQsCi0JCSAgICAgaWVlZTgwMjExX3Rhc2tsZXRfaGFuZGxlciwKLQkJICAgICAodW5zaWduZWQgbG9uZykgbG9jYWwpOwotCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnRhc2tsZXQpOwotCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZSk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKLQotCXJldHVybiBsb2NhbF90b19odyhsb2NhbCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9hbGxvY19odyk7Ci0KLWludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgcmVzdWx0OwotCi0JcmVzdWx0ID0gd2lwaHlfcmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKLQlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuIHJlc3VsdDsKLQotCW5hbWUgPSB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KS0+ZHJpdmVyLT5uYW1lOwotCWxvY2FsLT5ody53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShuYW1lKTsKLQlpZiAoIWxvY2FsLT5ody53b3JrcXVldWUpIHsKLQkJcmVzdWx0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsX3dvcmtxdWV1ZTsKLQl9Ci0KLQkvKgotCSAqIFRoZSBoYXJkd2FyZSBuZWVkcyBoZWFkcm9vbSBmb3Igc2VuZGluZyB0aGUgZnJhbWUsCi0JICogYW5kIHdlIG5lZWQgc29tZSBoZWFkcm9vbSBmb3IgcGFzc2luZyB0aGUgZnJhbWUgdG8gbW9uaXRvcgotCSAqIGludGVyZmFjZXMsIGJ1dCBuZXZlciBib3RoIGF0IHRoZSBzYW1lIHRpbWUuCi0JICovCi0JbG9jYWwtPnR4X2hlYWRyb29tID0gbWF4X3QodW5zaWduZWQgaW50ICwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1c19ydGFwX2hkcikpOwotCi0JZGVidWdmc19od19hZGQobG9jYWwpOwotCi0JbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDA7Ci0KLQlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IGxvY2FsLT5ody5tYXhfcnNzaSA/Ci0JCQkgICAgICAgSVdfUVVBTF9MRVZFTF9VUERBVEVEIDogSVdfUVVBTF9MRVZFTF9JTlZBTElEOwotCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3Lm1heF9zaWduYWwgPwotCQkJICAgICAgIElXX1FVQUxfUVVBTF9VUERBVEVEIDogSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcubWF4X25vaXNlID8KLQkJCSAgICAgICBJV19RVUFMX05PSVNFX1VQREFURUQgOiBJV19RVUFMX05PSVNFX0lOVkFMSUQ7Ci0JaWYgKGxvY2FsLT5ody5tYXhfcnNzaSA8IDAgfHwgbG9jYWwtPmh3Lm1heF9ub2lzZSA8IDApCi0JCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gSVdfUVVBTF9EQk07Ci0KLQlyZXN1bHQgPSBzdGFfaW5mb19zdGFydChsb2NhbCk7Ci0JaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZmFpbF9zdGFfaW5mbzsKLQotCXJ0bmxfbG9jaygpOwotCXJlc3VsdCA9IGRldl9hbGxvY19uYW1lKGxvY2FsLT5tZGV2LCBsb2NhbC0+bWRldi0+bmFtZSk7Ci0JaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZmFpbF9kZXY7Ci0KLQltZW1jcHkobG9jYWwtPm1kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwotCVNFVF9ORVRERVZfREVWKGxvY2FsLT5tZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7Ci0KLQlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwotCWlmIChyZXN1bHQgPCAwKQotCQlnb3RvIGZhaWxfZGV2OwotCi0JaWVlZTgwMjExX2RlYnVnZnNfYWRkX25ldGRldihJRUVFODAyMTFfREVWX1RPX1NVQl9JRihsb2NhbC0+bWRldikpOwotCWllZWU4MDIxMV9pZl9zZXRfdHlwZShsb2NhbC0+bWRldiwgSUVFRTgwMjExX0lGX1RZUEVfQVApOwotCi0JcmVzdWx0ID0gaWVlZTgwMjExX2luaXRfcmF0ZV9jdHJsX2FsZyhsb2NhbCwKLQkJCQkJICAgICAgaHctPnJhdGVfY29udHJvbF9hbGdvcml0aG0pOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcmF0ZSBjb250cm9sICIKLQkJICAgICAgICJhbGdvcml0aG1cbiIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Ci0JCWdvdG8gZmFpbF9yYXRlOwotCX0KLQotCXJlc3VsdCA9IGllZWU4MDIxMV93ZXBfaW5pdChsb2NhbCk7Ci0KLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHdlcFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Ci0JCWdvdG8gZmFpbF93ZXA7Ci0JfQotCi0JaWVlZTgwMjExX2luc3RhbGxfcWRpc2MobG9jYWwtPm1kZXYpOwotCi0JLyogYWRkIG9uZSBkZWZhdWx0IFNUQSBpbnRlcmZhY2UgKi8KLQlyZXN1bHQgPSBpZWVlODAyMTFfaWZfYWRkKGxvY2FsLT5tZGV2LCAid2xhbiVkIiwgTlVMTCwKLQkJCQkgIElFRUU4MDIxMV9JRl9UWVBFX1NUQSk7Ci0JaWYgKHJlc3VsdCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZhaWxlZCB0byBhZGQgZGVmYXVsdCB2aXJ0dWFsIGlmYWNlXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKLQotCWxvY2FsLT5yZWdfc3RhdGUgPSBJRUVFODAyMTFfREVWX1JFR0lTVEVSRUQ7Ci0JcnRubF91bmxvY2soKTsKLQotCWllZWU4MDIxMV9sZWRfaW5pdChsb2NhbCk7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbF93ZXA6Ci0JcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7Ci1mYWlsX3JhdGU6Ci0JaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldihJRUVFODAyMTFfREVWX1RPX1NVQl9JRihsb2NhbC0+bWRldikpOwotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGxvY2FsLT5tZGV2KTsKLWZhaWxfZGV2OgotCXJ0bmxfdW5sb2NrKCk7Ci0Jc3RhX2luZm9fc3RvcChsb2NhbCk7Ci1mYWlsX3N0YV9pbmZvOgotCWRlYnVnZnNfaHdfZGVsKGxvY2FsKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKLWZhaWxfd29ya3F1ZXVlOgotCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVnaXN0ZXJfaHcpOwotCi1pbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IGk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbW9kZS0+bGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmbW9kZS0+bGlzdCwgJmxvY2FsLT5tb2Rlc19saXN0KTsKLQotCWxvY2FsLT5od19tb2RlcyB8PSAoMSA8PCBtb2RlLT5tb2RlKTsKLQlmb3IgKGkgPSAwOyBpIDwgbW9kZS0+bnVtX3JhdGVzOyBpKyspIHsKLQkJcmF0ZSA9ICYobW9kZS0+cmF0ZXNbaV0pOwotCQlyYXRlLT5yYXRlX2ludiA9IENIQU5fVVRJTF9SQVRFX0xDTSAvIHJhdGUtPnJhdGU7Ci0JfQotCWllZWU4MDIxMV9wcmVwYXJlX3JhdGVzKGxvY2FsLCBtb2RlKTsKLQotCWlmICghbG9jYWwtPm9wZXJfaHdfbW9kZSkgewotCQkvKiBEZWZhdWx0IHRvIHRoaXMgbW9kZSAqLwotCQlsb2NhbC0+aHcuY29uZi5waHltb2RlID0gbW9kZS0+bW9kZTsKLQkJbG9jYWwtPm9wZXJfaHdfbW9kZSA9IGxvY2FsLT5zY2FuX2h3X21vZGUgPSBtb2RlOwotCQlsb2NhbC0+b3Blcl9jaGFubmVsID0gbG9jYWwtPnNjYW5fY2hhbm5lbCA9ICZtb2RlLT5jaGFubmVsc1swXTsKLQkJbG9jYWwtPmh3LmNvbmYubW9kZSA9IGxvY2FsLT5vcGVyX2h3X21vZGU7Ci0JCWxvY2FsLT5ody5jb25mLmNoYW4gPSBsb2NhbC0+b3Blcl9jaGFubmVsOwotCX0KLQotCWlmICghKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19ERUZBVUxUX1JFR19ET01BSU5fQ09ORklHVVJFRCkpCi0JCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9yZWdkb21haW4obW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZSk7Ci0KLXZvaWQgaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsICp0bXA7Ci0JaW50IGk7Ci0KLQl0YXNrbGV0X2tpbGwoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmbG9jYWwtPnRhc2tsZXQpOwotCi0JcnRubF9sb2NrKCk7Ci0KLQlCVUdfT04obG9jYWwtPnJlZ19zdGF0ZSAhPSBJRUVFODAyMTFfREVWX1JFR0lTVEVSRUQpOwotCi0JbG9jYWwtPnJlZ19zdGF0ZSA9IElFRUU4MDIxMV9ERVZfVU5SRUdJU1RFUkVEOwotCi0JLyoKLQkgKiBBdCB0aGlzIHBvaW50LCBpbnRlcmZhY2UgbGlzdCBtYW5pcHVsYXRpb25zIGFyZSBmaW5lCi0JICogYmVjYXVzZSB0aGUgZHJpdmVyIGNhbm5vdCBiZSBoYW5kaW5nIHVzIGZyYW1lcyBhbnkKLQkgKiBtb3JlIGFuZCB0aGUgdGFza2xldCBpcyBraWxsZWQuCi0JICovCi0KLQkvKgotCSAqIEZpcnN0LCB3ZSByZW1vdmUgYWxsIG5vbi1tYXN0ZXIgaW50ZXJmYWNlcy4gRG8gdGhpcyBiZWNhdXNlIHRoZXkKLQkgKiBtYXkgaGF2ZSBic3MgcG9pbnRlciBkZXBlbmRlbmN5IG9uIHRoZSBtYXN0ZXIsIGFuZCB3aGVuIHdlIGZyZWUKLQkgKiB0aGUgbWFzdGVyIHRoZXNlIHdvdWxkIGJlIGZyZWVkIGFzIHdlbGwsIGJyZWFraW5nIG91ciBsaXN0Ci0JICogaXRlcmF0aW9uIGNvbXBsZXRlbHkuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCB0bXAsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoc2RhdGEtPmRldiA9PSBsb2NhbC0+bWRldikKLQkJCWNvbnRpbnVlOwotCQlsaXN0X2RlbCgmc2RhdGEtPmxpc3QpOwotCQlfX2llZWU4MDIxMV9pZl9kZWwobG9jYWwsIHNkYXRhKTsKLQl9Ci0KLQkvKiB0aGVuLCBmaW5hbGx5LCByZW1vdmUgdGhlIG1hc3RlciBpbnRlcmZhY2UgKi8KLQlfX2llZWU4MDIxMV9pZl9kZWwobG9jYWwsIElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGxvY2FsLT5tZGV2KSk7Ci0KLQlydG5sX3VubG9jaygpOwotCi0JaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChsb2NhbC0+bWRldik7Ci0JaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOwotCXN0YV9pbmZvX3N0b3AobG9jYWwpOwotCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwotCWRlYnVnZnNfaHdfZGVsKGxvY2FsKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fSUVFRTgwMjExX01PREVTOyBpKyspIHsKLQkJa2ZyZWUobG9jYWwtPnN1cHBfcmF0ZXNbaV0pOwotCQlrZnJlZShsb2NhbC0+YmFzaWNfcmF0ZXNbaV0pOwotCX0KLQotCWlmIChza2JfcXVldWVfbGVuKCZsb2NhbC0+c2tiX3F1ZXVlKQotCQkJfHwgc2tiX3F1ZXVlX2xlbigmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHNrYl9xdWV1ZSBub3QgZW1wdHlcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOwotCXNrYl9xdWV1ZV9wdXJnZSgmbG9jYWwtPnNrYl9xdWV1ZSk7Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZsb2NhbC0+c2tiX3F1ZXVlX3VucmVsaWFibGUpOwotCi0JZGVzdHJveV93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7Ci0Jd2lwaHlfdW5yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwotCWllZWU4MDIxMV93ZXBfZnJlZShsb2NhbCk7Ci0JaWVlZTgwMjExX2xlZF9leGl0KGxvY2FsKTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcpOwotCi12b2lkIGllZWU4MDIxMV9mcmVlX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCi0JaWVlZTgwMjExX2lmX2ZyZWUobG9jYWwtPm1kZXYpOwotCXdpcGh5X2ZyZWUobG9jYWwtPmh3LndpcGh5KTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2ZyZWVfaHcpOwotCi1zdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfaW5pdCh2b2lkKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHJldDsKLQotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSkgPiBzaXplb2Yoc2tiLT5jYikpOwotCi0JcmV0ID0gcmM4MDIxMV9zaW1wbGVfaW5pdCgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gcmM4MDIxMV9waWRfaW5pdCgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2NsZWFudXBfc2ltcGxlOwotCi0JcmV0ID0gaWVlZTgwMjExX3dtZV9yZWdpc3RlcigpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9pbml0OiBmYWlsZWQgdG8gIgotCQkgICAgICAgImluaXRpYWxpemUgV01FIChlcnI9JWQpXG4iLCByZXQpOwotCQlnb3RvIG91dF9jbGVhbnVwX3BpZDsKLQl9Ci0KLQlpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCgpOwotCWllZWU4MDIxMV9yZWdkb21haW5faW5pdCgpOwotCi0JcmV0dXJuIDA7Ci0KLSBvdXRfY2xlYW51cF9waWQ6Ci0JcmM4MDIxMV9waWRfZXhpdCgpOwotIG91dF9jbGVhbnVwX3NpbXBsZToKLQlyYzgwMjExX3NpbXBsZV9leGl0KCk7Ci0gb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpZWVlODAyMTFfZXhpdCh2b2lkKQotewotCXJjODAyMTFfc2ltcGxlX2V4aXQoKTsKLQlyYzgwMjExX3BpZF9leGl0KCk7Ci0KLQlpZWVlODAyMTFfd21lX3VucmVnaXN0ZXIoKTsKLQlpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfZXhpdCgpOwotfQotCi0KLXN1YnN5c19pbml0Y2FsbChpZWVlODAyMTFfaW5pdCk7Ci1tb2R1bGVfZXhpdChpZWVlODAyMTFfZXhpdCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiSUVFRSA4MDIuMTEgc3Vic3lzdGVtIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDcyZWNiZjcuLjhlNTNjZTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgotI2luY2x1ZGUgImllZWU4MDIxMV9rZXkuaCIKKyNpbmNsdWRlICJrZXkuaCIKICNpbmNsdWRlICJzdGFfaW5mby5oIgogCiAvKiBpZWVlODAyMTEubyBpbnRlcm5hbCBkZWZpbml0aW9ucywgZXRjLiBUaGVzZSBhcmUgbm90IGluY2x1ZGVkIGludG8KQEAgLTM1LDkgKzM1LDkgQEAKIAogI2RlZmluZSBXTEFOX0ZDX0RBVEFfUFJFU0VOVChmYykgKCgoZmMpICYgMHg0YykgPT0gMHgwOCkKIAotc3RydWN0IGllZWU4MDIxMV9sb2NhbDsKKyNkZWZpbmUgSUVFRTgwMjExX0ZDKHR5cGUsIHN1YnR5cGUpIGNwdV90b19sZTE2KHR5cGUgfCBzdWJ0eXBlKQogCi0jZGVmaW5lIElFRUU4MDIxMV9BTElHTjMyX1BBRChhKSAoKDQgLSAoKGEpICYgMykpICYgMykKK3N0cnVjdCBpZWVlODAyMTFfbG9jYWw7CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWVzIHRvIGJ1ZmZlciB3aGVuIHNvbWUgb2YgdGhlCiAgKiBhc3NvY2lhdGVkIHN0YXRpb25zIGFyZSB1c2luZyBwb3dlciBzYXZpbmcuICovCkBAIC03MywxNCArNzMsMTQgQEAKIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqaG5leHQ7CisJc2l6ZV90IHNzaWRfbGVuOworCiAJYXRvbWljX3QgdXNlcnM7CiAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQlzaXplX3Qgc3NpZF9sZW47CiAJdTE2IGNhcGFiaWxpdHk7IC8qIGhvc3QgYnl0ZSBvcmRlciAqLwotCWludCBod19tb2RlOwotCWludCBjaGFubmVsOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlpbnQgZnJlcTsKIAlpbnQgcnNzaSwgc2lnbmFsLCBub2lzZTsKIAl1OCAqd3BhX2llOwpAQCAtOTEsMTMgKzkxLDE4IEBACiAJc2l6ZV90IHdtbV9pZV9sZW47CiAJdTggKmh0X2llOwogCXNpemVfdCBodF9pZV9sZW47CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwl1OCAqbWVzaF9pZDsKKwlzaXplX3QgbWVzaF9pZF9sZW47CisJdTggKm1lc2hfY2ZnOworI2VuZGlmCiAjZGVmaW5lIElFRUU4MDIxMV9NQVhfU1VQUF9SQVRFUyAzMgogCXU4IHN1cHBfcmF0ZXNbSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTXTsKIAlzaXplX3Qgc3VwcF9yYXRlc19sZW47Ci0JaW50IGJlYWNvbl9pbnQ7CiAJdTY0IHRpbWVzdGFtcDsKKwlpbnQgYmVhY29uX2ludDsKIAotCWludCBwcm9iZV9yZXNwOworCWJvb2wgcHJvYmVfcmVzcDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlOwogCiAJLyogZHVyaW5nIGFzc29jYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbwpAQCAtMTA4LDU2ICsxMTMsOTggQEAKIAl1OCBlcnBfdmFsdWU7CiB9OwogCitzdGF0aWMgaW5saW5lIHU4ICpic3NfbWVzaF9jZmcoc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpCit7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlyZXR1cm4gYnNzLT5tZXNoX2NmZzsKKyNlbmRpZgorCXJldHVybiBOVUxMOworfQogCi10eXBlZGVmIGVudW0gewotCVRYUlhfQ09OVElOVUUsIFRYUlhfRFJPUCwgVFhSWF9RVUVVRUQKLX0gaWVlZTgwMjExX3R4cnhfcmVzdWx0Oworc3RhdGljIGlubGluZSB1OCAqYnNzX21lc2hfaWQoc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpCit7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlyZXR1cm4gYnNzLT5tZXNoX2lkOworI2VuZGlmCisJcmV0dXJuIE5VTEw7Cit9CiAKLS8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEuZmxhZ3MgKi8KLS8qIHdoZXRoZXIgdGhlIE1TRFUgd2FzIGZyYWdtZW50ZWQgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1RYUlhEX0ZSQUdNRU5URUQJCUJJVCgwKQotI2RlZmluZSBJRUVFODAyMTFfVFhSWERfVFhVTklDQVNUCQlCSVQoMSkKLSNkZWZpbmUgSUVFRTgwMjExX1RYUlhEX1RYUFNfQlVGRkVSRUQJCUJJVCgyKQotI2RlZmluZSBJRUVFODAyMTFfVFhSWERfVFhQUk9CRV9MQVNUX0ZSQUcJQklUKDMpCi0jZGVmaW5lIElFRUU4MDIxMV9UWFJYRF9SWElOX1NDQU4JCUJJVCg0KQotLyogZnJhbWUgaXMgZGVzdGluZWQgdG8gaW50ZXJmYWNlIGN1cnJlbnRseSBwcm9jZXNzZWQgKGluY2wuIG11bHRpY2FzdCBmcmFtZXMpICovCi0jZGVmaW5lIElFRUU4MDIxMV9UWFJYRF9SWFJBX01BVENICQlCSVQoNSkKLSNkZWZpbmUgSUVFRTgwMjExX1RYUlhEX1RYX0lOSkVDVEVECQlCSVQoNikKLSNkZWZpbmUgSUVFRTgwMjExX1RYUlhEX1JYX0FNU0RVCQlCSVQoNykKLXN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhIHsKK3N0YXRpYyBpbmxpbmUgdTggYnNzX21lc2hfaWRfbGVuKHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKQoreworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJcmV0dXJuIGJzcy0+bWVzaF9pZF9sZW47CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworCit0eXBlZGVmIHVuc2lnbmVkIF9fYml0d2lzZV9fIGllZWU4MDIxMV90eF9yZXN1bHQ7CisjZGVmaW5lIFRYX0NPTlRJTlVFCSgoX19mb3JjZSBpZWVlODAyMTFfdHhfcmVzdWx0KSAwdSkKKyNkZWZpbmUgVFhfRFJPUAkJKChfX2ZvcmNlIGllZWU4MDIxMV90eF9yZXN1bHQpIDF1KQorI2RlZmluZSBUWF9RVUVVRUQJKChfX2ZvcmNlIGllZWU4MDIxMV90eF9yZXN1bHQpIDJ1KQorCisjZGVmaW5lIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVECQlCSVQoMCkKKyNkZWZpbmUgSUVFRTgwMjExX1RYX1VOSUNBU1QJCUJJVCgxKQorI2RlZmluZSBJRUVFODAyMTFfVFhfUFNfQlVGRkVSRUQJQklUKDIpCisjZGVmaW5lIElFRUU4MDIxMV9UWF9QUk9CRV9MQVNUX0ZSQUcJQklUKDMpCisjZGVmaW5lIElFRUU4MDIxMV9UWF9JTkpFQ1RFRAkJQklUKDQpCisKK3N0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXUxNiBmYywgZXRoZXJ0eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbDsKLQkJCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQkJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQkJCS8qIHVzZSB0aGlzIHJhdGUgKGlmIHNldCkgZm9yIGxhc3QgZnJhZ21lbnQ7IHJhdGUgY2FuCi0JCQkgKiBiZSBzZXQgdG8gbG93ZXIgcmF0ZSBmb3IgdGhlIGZpcnN0IGZyYWdtZW50cywgZS5nLiwKLQkJCSAqIHdoZW4gdXNpbmcgQ1RTIHByb3RlY3Rpb24gd2l0aCBJRUVFIDgwMi4xMWcuICovCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmxhc3RfZnJhZ19yYXRlOwotCQkJaW50IGxhc3RfZnJhZ19od3JhdGU7CiAKLQkJCS8qIEV4dHJhIGZyYWdtZW50cyAoaW4gYWRkaXRpb24gdG8gdGhlIGZpcnN0IGZyYWdtZW50Ci0JCQkgKiBpbiBza2IpICovCi0JCQlpbnQgbnVtX2V4dHJhX2ZyYWc7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqKmV4dHJhX2ZyYWc7Ci0JCX0gdHg7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzOwotCQkJaW50IHNlbnRfcHNfYnVmZmVyZWQ7Ci0JCQlpbnQgcXVldWU7Ci0JCQlpbnQgbG9hZDsKLQkJCXUzMiB0a2lwX2l2MzI7Ci0JCQl1MTYgdGtpcF9pdjE2OwotCQl9IHJ4OwotCX0gdTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2w7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwkvKiB1c2UgdGhpcyByYXRlIChpZiBzZXQpIGZvciBsYXN0IGZyYWdtZW50OyByYXRlIGNhbgorCSAqIGJlIHNldCB0byBsb3dlciByYXRlIGZvciB0aGUgZmlyc3QgZnJhZ21lbnRzLCBlLmcuLAorCSAqIHdoZW4gdXNpbmcgQ1RTIHByb3RlY3Rpb24gd2l0aCBJRUVFIDgwMi4xMWcuICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpsYXN0X2ZyYWdfcmF0ZTsKKworCS8qIEV4dHJhIGZyYWdtZW50cyAoaW4gYWRkaXRpb24gdG8gdGhlIGZpcnN0IGZyYWdtZW50CisJICogaW4gc2tiKSAqLworCXN0cnVjdCBza19idWZmICoqZXh0cmFfZnJhZzsKKwlpbnQgbnVtX2V4dHJhX2ZyYWc7CisKKwl1MTYgZmMsIGV0aGVydHlwZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisKK3R5cGVkZWYgdW5zaWduZWQgX19iaXR3aXNlX18gaWVlZTgwMjExX3J4X3Jlc3VsdDsKKyNkZWZpbmUgUlhfQ09OVElOVUUJCSgoX19mb3JjZSBpZWVlODAyMTFfcnhfcmVzdWx0KSAwdSkKKyNkZWZpbmUgUlhfRFJPUF9VTlVTQUJMRQkoKF9fZm9yY2UgaWVlZTgwMjExX3J4X3Jlc3VsdCkgMXUpCisjZGVmaW5lIFJYX0RST1BfTU9OSVRPUgkJKChfX2ZvcmNlIGllZWU4MDIxMV9yeF9yZXN1bHQpIDJ1KQorI2RlZmluZSBSWF9RVUVVRUQJCSgoX19mb3JjZSBpZWVlODAyMTFfcnhfcmVzdWx0KSAzdSkKKworI2RlZmluZSBJRUVFODAyMTFfUlhfSU5fU0NBTgkJQklUKDApCisvKiBmcmFtZSBpcyBkZXN0aW5lZCB0byBpbnRlcmZhY2UgY3VycmVudGx5IHByb2Nlc3NlZCAoaW5jbC4gbXVsdGljYXN0IGZyYW1lcykgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1JYX1JBX01BVENICQlCSVQoMSkKKyNkZWZpbmUgSUVFRTgwMjExX1JYX0FNU0RVCQlCSVQoMikKKyNkZWZpbmUgSUVFRTgwMjExX1JYX0NNTlRSX1JFUE9SVEVECUJJVCgzKQorI2RlZmluZSBJRUVFODAyMTFfUlhfRlJBR01FTlRFRAkJQklUKDQpCisKK3N0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CisKKwl1MTYgZmMsIGV0aGVydHlwZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJaW50IHNlbnRfcHNfYnVmZmVyZWQ7CisJaW50IHF1ZXVlOworCWludCBsb2FkOworCXUzMiB0a2lwX2l2MzI7CisJdTE2IHRraXBfaXYxNjsKIH07CiAKIC8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YS5mbGFncyAqLwpAQCAtMTY1LDYgKzIxMiw3IEBACiAjZGVmaW5lIElFRUU4MDIxMV9UWFBEX0RPX05PVF9FTkNSWVBUCUJJVCgxKQogI2RlZmluZSBJRUVFODAyMTFfVFhQRF9SRVFVRVVFCQlCSVQoMikKICNkZWZpbmUgSUVFRTgwMjExX1RYUERfRUFQT0xfRlJBTUUJQklUKDMpCisjZGVmaW5lIElFRUU4MDIxMV9UWFBEX0FNUERVCQlCSVQoNCkKIC8qIFN0b3JlZCBpbiBza19idWZmLT5jYiAqLwogc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSB7CiAJaW50IGlmaW5kZXg7CkBAIC0xNzYsMjAgKzIyNCwxMiBAQAogc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0IHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBudW1fZXh0cmFfZnJhZzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKmV4dHJhX2ZyYWc7Ci0JaW50IGxhc3RfZnJhZ19yYXRlaWR4OwotCWludCBsYXN0X2ZyYWdfaHdyYXRlOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqbGFzdF9mcmFnX3JhdGU7CisJaW50IG51bV9leHRyYV9mcmFnOwogCXVuc2lnbmVkIGludCBsYXN0X2ZyYWdfcmF0ZV9jdHJsX3Byb2JlOwogfTsKIAotdHlwZWRlZiBpZWVlODAyMTFfdHhyeF9yZXN1bHQgKCppZWVlODAyMTFfdHhfaGFuZGxlcikKLShzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpOwotCi10eXBlZGVmIGllZWU4MDIxMV90eHJ4X3Jlc3VsdCAoKmllZWU4MDIxMV9yeF9oYW5kbGVyKQotKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCk7Ci0KIHN0cnVjdCBiZWFjb25fZGF0YSB7CiAJdTggKmhlYWQsICp0YWlsOwogCWludCBoZWFkX2xlbiwgdGFpbF9sZW47CkBAIC0yMDYsMTAgKzI0NiwxMCBAQAogCiAJLyogeWVzLCB0aGlzIGxvb2tzIHVnbHksIGJ1dCBndWFyYW50ZWVzIHRoYXQgd2UgY2FuIGxhdGVyIHVzZQogCSAqIGJpdG1hcF9lbXB0eSA6KQotCSAqIE5COiBkb24ndCBldmVyIHVzZSBzZXRfYml0LCB1c2UgYnNzX3RpbV9zZXQvYnNzX3RpbV9jbGVhciEgKi8KKwkgKiBOQjogZG9uJ3QgdG91Y2ggdGhpcyBiaXRtYXAsIHVzZSBzdGFfaW5mb197c2V0LGNsZWFyfV90aW1fYml0ICovCiAJdTggdGltW3NpemVvZih1bnNpZ25lZCBsb25nKSAqIEJJVFNfVE9fTE9OR1MoSUVFRTgwMjExX01BWF9BSUQgKyAxKV07Ci0JYXRvbWljX3QgbnVtX3N0YV9wczsgLyogbnVtYmVyIG9mIHN0YXRpb25zIGluIFBTIG1vZGUgKi8KIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBzX2JjX2J1ZjsKKwlhdG9taWNfdCBudW1fc3RhX3BzOyAvKiBudW1iZXIgb2Ygc3RhdGlvbnMgaW4gUFMgbW9kZSAqLwogCWludCBkdGltX2NvdW50OwogCWludCBmb3JjZV91bmljYXN0X3JhdGVpZHg7IC8qIGZvcmNlZCBUWCByYXRlaWR4IGZvciB1bmljYXN0IGZyYW1lcyAqLwogCWludCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeDsgLyogbWF4IFRYIHJhdGVpZHggZm9yIHJhdGUgY29udHJvbCAqLwpAQCAtMjE3LDggKzI1Nyw4IEBACiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX3dkcyB7Ci0JdTggcmVtb3RlX2FkZHJbRVRIX0FMRU5dOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXU4IHJlbW90ZV9hZGRyW0VUSF9BTEVOXTsKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfaWZfdmxhbiB7CkBAIC0yMjYsNiArMjY2LDQxIEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAorc3RydWN0IG1lc2hfc3RhdHMgeworCV9fdTMyIGZ3ZGVkX2ZyYW1lczsJCS8qIE1lc2ggZm9yd2FyZGVkIGZyYW1lcyAqLworCV9fdTMyIGRyb3BwZWRfZnJhbWVzX3R0bDsJLyogTm90IHRyYW5zbWl0dGVkIHNpbmNlIG1lc2hfdHRsID09IDAqLworCV9fdTMyIGRyb3BwZWRfZnJhbWVzX25vX3JvdXRlOwkvKiBOb3QgdHJhbnNtaXR0ZWQsIG5vIHJvdXRlIGZvdW5kICovCisJYXRvbWljX3QgZXN0YWJfcGxpbmtzOworfTsKKworI2RlZmluZSBQUkVRX1FfRl9TVEFSVAkJMHgxCisjZGVmaW5lIFBSRVFfUV9GX1JFRlJFU0gJMHgyCitzdHJ1Y3QgbWVzaF9wcmVxX3F1ZXVlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTggZHN0W0VUSF9BTEVOXTsKKwl1OCBmbGFnczsKK307CisKK3N0cnVjdCBtZXNoX2NvbmZpZyB7CisJLyogVGltZW91dHMgaW4gbXMgKi8KKwkvKiBNZXNoIHBsaW5rIG1hbmFnZW1lbnQgcGFyYW1ldGVycyAqLworCXUxNiBkb3QxMU1lc2hSZXRyeVRpbWVvdXQ7CisJdTE2IGRvdDExTWVzaENvbmZpcm1UaW1lb3V0OworCXUxNiBkb3QxMU1lc2hIb2xkaW5nVGltZW91dDsKKwl1MTYgZG90MTFNZXNoTWF4UGVlckxpbmtzOworCXU4ICBkb3QxMU1lc2hNYXhSZXRyaWVzOworCXU4ICBkb3QxMU1lc2hUVEw7CisJYm9vbCBhdXRvX29wZW5fcGxpbmtzOworCS8qIEhXTVAgcGFyYW1ldGVycyAqLworCXU4ICBkb3QxMU1lc2hIV01QbWF4UFJFUXJldHJpZXM7CisJdTMyIHBhdGhfcmVmcmVzaF90aW1lOworCXUxNiBtaW5fZGlzY292ZXJ5X3RpbWVvdXQ7CisJdTMyIGRvdDExTWVzaEhXTVBhY3RpdmVQYXRoVGltZW91dDsKKwl1MTYgZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbDsKKwl1MTYgZG90MTFNZXNoSFdNUG5ldERpYW1ldGVyVHJhdmVyc2FsVGltZTsKK307CisKKwogLyogZmxhZ3MgdXNlZCBpbiBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YS5mbGFncyAqLwogI2RlZmluZSBJRUVFODAyMTFfU1RBX1NTSURfU0VUCQlCSVQoMCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQJCUJJVCgxKQpAQCAtMjQxLDE4ICszMTYsNDcgQEAKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMCUJJVCgxMikKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQJQklUKDEzKQogc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgewotCWVudW0gewotCQlJRUVFODAyMTFfRElTQUJMRUQsIElFRUU4MDIxMV9BVVRIRU5USUNBVEUsCi0JCUlFRUU4MDIxMV9BU1NPQ0lBVEUsIElFRUU4MDIxMV9BU1NPQ0lBVEVELAotCQlJRUVFODAyMTFfSUJTU19TRUFSQ0gsIElFRUU4MDIxMV9JQlNTX0pPSU5FRAotCX0gc3RhdGU7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJdTggYnNzaWRbRVRIX0FMRU5dLCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCWVudW0geworCQlJRUVFODAyMTFfRElTQUJMRUQsIElFRUU4MDIxMV9BVVRIRU5USUNBVEUsCisJCUlFRUU4MDIxMV9BU1NPQ0lBVEUsIElFRUU4MDIxMV9BU1NPQ0lBVEVELAorCQlJRUVFODAyMTFfSUJTU19TRUFSQ0gsIElFRUU4MDIxMV9JQlNTX0pPSU5FRCwKKwkJSUVFRTgwMjExX01FU0hfVVAKKwl9IHN0YXRlOwogCXNpemVfdCBzc2lkX2xlbjsKIAl1OCBzY2FuX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CiAJc2l6ZV90IHNjYW5fc3NpZF9sZW47CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfdGltZXI7CisJdTggbWVzaF9pZFtJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOXTsKKwlzaXplX3QgbWVzaF9pZF9sZW47CisJLyogQWN0aXZlIFBhdGggU2VsZWN0aW9uIFByb3RvY29sIElkZW50aWZpZXIgKi8KKwl1OCBtZXNoX3BwX2lkWzRdOworCS8qIEFjdGl2ZSBQYXRoIFNlbGVjdGlvbiBNZXRyaWMgSWRlbnRpZmllciAqLworCXU4IG1lc2hfcG1faWRbNF07CisJLyogQ29uZ2VzdGlvbiBDb250cm9sIE1vZGUgSWRlbnRpZmllciAqLworCXU4IG1lc2hfY2NfaWRbNF07CisJLyogTG9jYWwgbWVzaCBEZXN0aW5hdGlvbiBTZXF1ZW5jZSBOdW1iZXIgKi8KKwl1MzIgZHNuOworCS8qIExhc3QgdXNlZCBQUkVRIElEICovCisJdTMyIHByZXFfaWQ7CisJYXRvbWljX3QgbXBhdGhzOworCS8qIFRpbWVzdGFtcCBvZiBsYXN0IERTTiB1cGRhdGUgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfZHNuX3VwZGF0ZTsKKwkvKiBUaW1lc3RhbXAgb2YgbGFzdCBEU04gc2VudCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9wcmVxOworCXN0cnVjdCBtZXNoX3JtYyAqcm1jOworCXNwaW5sb2NrX3QgbWVzaF9wcmVxX3F1ZXVlX2xvY2s7CisJc3RydWN0IG1lc2hfcHJlcV9xdWV1ZSBwcmVxX3F1ZXVlOworCWludCBwcmVxX3F1ZXVlX2xlbjsKKwlzdHJ1Y3QgbWVzaF9zdGF0cyBtc2hzdGF0czsKKwlzdHJ1Y3QgbWVzaF9jb25maWcgbXNoY2ZnOworCXU4IG1lc2hfc2VxbnVtWzNdOworCWJvb2wgYWNjZXB0aW5nX3BsaW5rczsKKyNlbmRpZgogCXUxNiBhaWQ7CiAJdTE2IGFwX2NhcGFiLCBjYXBhYjsKIAl1OCAqZXh0cmFfaWU7IC8qIHRvIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgQXNzb2NSZXEgKi8KQEAgLTI2MiwxNiArMzY2LDE4IEBACiAJdTggKmFzc29jcmVxX2llcywgKmFzc29jcmVzcF9pZXM7CiAJc2l6ZV90IGFzc29jcmVxX2llc19sZW4sIGFzc29jcmVzcF9pZXNfbGVuOwogCisJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CisKIAlpbnQgYXV0aF90cmllcywgYXNzb2NfdHJpZXM7CiAKKwl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CisKKwl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmU7CisKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX1NDQU4gMAogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9BVVRIIDEKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfUlVOICAyCi0JdW5zaWduZWQgbG9uZyByZXF1ZXN0OwotCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3F1ZXVlOwotCi0JdW5zaWduZWQgbG9uZyBsYXN0X3Byb2JlOwogCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIEJJVCgwKQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSBCSVQoMSkKQEAgLTI4MiwxNiArMzg4LDM0IEBACiAKIAl1bnNpZ25lZCBsb25nIGlic3Nfam9pbl9yZXE7CiAJc3RydWN0IHNrX2J1ZmYgKnByb2JlX3Jlc3A7IC8qIFByb2JlUmVzcCB0ZW1wbGF0ZSBmb3IgSUJTUyAqLwotCXUzMiBzdXBwX3JhdGVzX2JpdHM7CisJdTMyIHN1cHBfcmF0ZXNfYml0c1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKIAogCWludCB3bW1fbGFzdF9wYXJhbV9zZXQ7CisJaW50IG51bV9iZWFjb25zOyAvKiBudW1iZXIgb2YgVFhlZCBiZWFjb24gZnJhbWVzIGJ5IHRoaXMgU1RBICovCiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2lmX3N0YV9zZXRfbWVzaF9pZChzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCisJCQkJCQl1OCBtZXNoX2lkX2xlbiwgdTggKm1lc2hfaWQpCit7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlpZnN0YS0+bWVzaF9pZF9sZW4gPSBtZXNoX2lkX2xlbjsKKwltZW1jcHkoaWZzdGEtPm1lc2hfaWQsIG1lc2hfaWQsIG1lc2hfaWRfbGVuKTsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKyNkZWZpbmUgSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQyhzdGEsIG5hbWUpCVwKKwlkbyB7IChzdGEpLT5tc2hzdGF0cy5uYW1lKys7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBJRUVFODAyMTFfSUZTVEFfTUVTSF9DVFJfSU5DKHN0YSwgbmFtZSkgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgogCiAvKiBmbGFncyB1c2VkIGluIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEuZmxhZ3MgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJCUJJVCgwKQogI2RlZmluZSBJRUVFODAyMTFfU0RBVEFfUFJPTUlTQwkJQklUKDEpCiAjZGVmaW5lIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRQlCSVQoMikKKyNkZWZpbmUgSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERQlCSVQoMykKIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIApAQCAtMzA2LDExICs0MzAsMTEgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKIAlpbnQgZHJvcF91bmVuY3J5cHRlZDsKKwogCS8qCi0JICogSUVFRSA4MDIuMVggUG9ydCBhY2Nlc3MgY29udHJvbCBpbiBlZmZlY3QsCi0JICogZHJvcCBwYWNrZXRzIHRvL2Zyb20gdW5hdXRob3JpemVkIHBvcnQKKwkgKiBiYXNpYyByYXRlcyBvZiB0aGlzIEFQIG9yIHRoZSBBUCB3ZSdyZSBhc3NvY2lhdGVkIHRvCiAJICovCi0JaW50IGllZWU4MDJfMXhfcGFjOworCXU2NCBiYXNpY19yYXRlczsKIAogCXUxNiBzZXF1ZW5jZTsKIApAQCAtMzM4LDYgKzQ2Miw3IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfd2RzIHdkczsKIAkJc3RydWN0IGllZWU4MDIxMV9pZl92bGFuIHZsYW47CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhIHN0YTsKKwkJdTMyIG1udHJfZmxhZ3M7CiAJfSB1OwogCWludCBjaGFubmVsX3VzZTsKIAlpbnQgY2hhbm5lbF91c2VfcmF3OwpAQCAtMzQ4LDcgKzQ3Myw2IEBACiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpjaGFubmVsX3VzZTsKIAkJCXN0cnVjdCBkZW50cnkgKmRyb3BfdW5lbmNyeXB0ZWQ7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICppZWVlODAyXzF4X3BhYzsKIAkJCXN0cnVjdCBkZW50cnkgKnN0YXRlOwogCQkJc3RydWN0IGRlbnRyeSAqYnNzaWQ7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpwcmV2X2Jzc2lkOwpAQCAtMzYzLDExICs0ODcsMTEgQEAKIAkJCXN0cnVjdCBkZW50cnkgKmF1dGhfYWxnOwogCQkJc3RydWN0IGRlbnRyeSAqYXV0aF90cmFuc2FjdGlvbjsKIAkJCXN0cnVjdCBkZW50cnkgKmZsYWdzOworCQkJc3RydWN0IGRlbnRyeSAqbnVtX2JlYWNvbnNfc3RhOwogCQl9IHN0YTsKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBkZW50cnkgKmNoYW5uZWxfdXNlOwogCQkJc3RydWN0IGRlbnRyeSAqZHJvcF91bmVuY3J5cHRlZDsKLQkJCXN0cnVjdCBkZW50cnkgKmllZWU4MDJfMXhfcGFjOwogCQkJc3RydWN0IGRlbnRyeSAqbnVtX3N0YV9wczsKIAkJCXN0cnVjdCBkZW50cnkgKmR0aW1fY291bnQ7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpudW1fYmVhY29uczsKQEAgLTM3OCwxOSArNTAyLDQ2IEBACiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpjaGFubmVsX3VzZTsKIAkJCXN0cnVjdCBkZW50cnkgKmRyb3BfdW5lbmNyeXB0ZWQ7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICppZWVlODAyXzF4X3BhYzsKIAkJCXN0cnVjdCBkZW50cnkgKnBlZXI7CiAJCX0gd2RzOwogCQlzdHJ1Y3QgewogCQkJc3RydWN0IGRlbnRyeSAqY2hhbm5lbF91c2U7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpkcm9wX3VuZW5jcnlwdGVkOwotCQkJc3RydWN0IGRlbnRyeSAqaWVlZTgwMl8xeF9wYWM7CiAJCX0gdmxhbjsKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBkZW50cnkgKm1vZGU7CiAJCX0gbW9uaXRvcjsKIAkJc3RydWN0IGRlbnRyeSAqZGVmYXVsdF9rZXk7CiAJfSBkZWJ1Z2ZzOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlzdHJ1Y3QgZGVudHJ5ICptZXNoX3N0YXRzX2RpcjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZGVudHJ5ICpmd2RlZF9mcmFtZXM7CisJCXN0cnVjdCBkZW50cnkgKmRyb3BwZWRfZnJhbWVzX3R0bDsKKwkJc3RydWN0IGRlbnRyeSAqZHJvcHBlZF9mcmFtZXNfbm9fcm91dGU7CisJCXN0cnVjdCBkZW50cnkgKmVzdGFiX3BsaW5rczsKKwkJc3RydWN0IHRpbWVyX2xpc3QgbWVzaF9wYXRoX3RpbWVyOworCX0gbWVzaF9zdGF0czsKKworCXN0cnVjdCBkZW50cnkgKm1lc2hfY29uZmlnX2RpcjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZGVudHJ5ICpkb3QxMU1lc2hSZXRyeVRpbWVvdXQ7CisJCXN0cnVjdCBkZW50cnkgKmRvdDExTWVzaENvbmZpcm1UaW1lb3V0OworCQlzdHJ1Y3QgZGVudHJ5ICpkb3QxMU1lc2hIb2xkaW5nVGltZW91dDsKKwkJc3RydWN0IGRlbnRyeSAqZG90MTFNZXNoTWF4UmV0cmllczsKKwkJc3RydWN0IGRlbnRyeSAqZG90MTFNZXNoVFRMOworCQlzdHJ1Y3QgZGVudHJ5ICphdXRvX29wZW5fcGxpbmtzOworCQlzdHJ1Y3QgZGVudHJ5ICpkb3QxMU1lc2hNYXhQZWVyTGlua3M7CisJCXN0cnVjdCBkZW50cnkgKmRvdDExTWVzaEhXTVBhY3RpdmVQYXRoVGltZW91dDsKKwkJc3RydWN0IGRlbnRyeSAqZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbDsKKwkJc3RydWN0IGRlbnRyeSAqZG90MTFNZXNoSFdNUG5ldERpYW1ldGVyVHJhdmVyc2FsVGltZTsKKwkJc3RydWN0IGRlbnRyeSAqZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzOworCQlzdHJ1Y3QgZGVudHJ5ICpwYXRoX3JlZnJlc2hfdGltZTsKKwkJc3RydWN0IGRlbnRyeSAqbWluX2Rpc2NvdmVyeV90aW1lb3V0OworCX0gbWVzaF9jb25maWc7CisjZW5kaWYKKwogI2VuZGlmCiAJLyogbXVzdCBiZSBsYXN0LCBkeW5hbWljYWxseSBzaXplZCBhcmVhIGluIHRoaXMhICovCiAJc3RydWN0IGllZWU4MDIxMV92aWYgdmlmOwpAQCAtNDA3LDYgKzU1OCw4IEBACiBlbnVtIHsKIAlJRUVFODAyMTFfUlhfTVNHCT0gMSwKIAlJRUVFODAyMTFfVFhfU1RBVFVTX01TRwk9IDIsCisJSUVFRTgwMjExX0RFTEJBX01TRwk9IDMsCisJSUVFRTgwMjExX0FEREJBX01TRwk9IDQsCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHsKQEAgLTQxNywxNSArNTcwLDE1IEBACiAKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqb3BzOwogCi0JLyogTGlzdCBvZiByZWdpc3RlcmVkIHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbW9kZXNfbGlzdDsKLQogCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OyAvKiB3bWFzdGVyIyAtICJtYXN0ZXIiIDgwMi4xMSBkZXZpY2UgKi8KIAlpbnQgb3Blbl9jb3VudDsKLQlpbnQgbW9uaXRvcnM7CisJaW50IG1vbml0b3JzLCBjb29rZWRfbW50cnM7CisJLyogbnVtYmVyIG9mIGludGVyZmFjZXMgd2l0aCBjb3JyZXNwb25kaW5nIEZJRl8gZmxhZ3MgKi8KKwlpbnQgZmlmX2Zjc2ZhaWwsIGZpZl9wbGNwZmFpbCwgZmlmX2NvbnRyb2wsIGZpZl9vdGhlcl9ic3M7CiAJdW5zaWduZWQgaW50IGZpbHRlcl9mbGFnczsgLyogRklGXyogKi8KIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7CiAJdTggd3N0YXRzX2ZsYWdzOworCWJvb2wgdGltX2luX2xvY2tlZF9zZWN0aW9uOyAvKiBzZWUgaWVlZTgwMjExX2JlYWNvbl9nZXQoKSAqLwogCWludCB0eF9oZWFkcm9vbTsgLyogcmVxdWlyZWQgaGVhZHJvb20gZm9yIGhhcmR3YXJlL3JhZGlvdGFwICovCiAKIAllbnVtIHsKQEAgLTQ0MywxNSArNTk2LDIyIEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWVfdW5yZWxpYWJsZTsKIAotCS8qIFN0YXRpb24gZGF0YSBzdHJ1Y3R1cmVzICovCi0Jcndsb2NrX3Qgc3RhX2xvY2s7IC8qIHByb3RlY3RzIFNUQSBkYXRhIHN0cnVjdHVyZXMgKi8KLQlpbnQgbnVtX3N0YTsgLyogbnVtYmVyIG9mIHN0YXRpb25zIGluIHN0YV9saXN0ICovCisJLyogU3RhdGlvbiBkYXRhICovCisJLyoKKwkgKiBUaGUgbG9jayBvbmx5IHByb3RlY3RzIHRoZSBsaXN0LCBoYXNoLCB0aW1lciBhbmQgY291bnRlcgorCSAqIGFnYWluc3QgbWFuaXB1bGF0aW9uLCByZWFkcyBhcmUgZG9uZSBpbiBSQ1UuIEFkZGl0aW9uYWxseSwKKwkgKiB0aGUgbG9jayBwcm90ZWN0cyBlYWNoIEJTUydzIFRJTSBiaXRtYXAuCisJICovCisJc3BpbmxvY2tfdCBzdGFfbG9jazsKKwl1bnNpZ25lZCBsb25nIG51bV9zdGE7CiAJc3RydWN0IGxpc3RfaGVhZCBzdGFfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9mbHVzaF9saXN0OworCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGFfZmx1c2hfd29yazsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9oYXNoW1NUQV9IQVNIX1NJWkVdOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YV9jbGVhbnVwOwogCi0JdW5zaWduZWQgbG9uZyBzdGF0ZVtOVU1fVFhfREFUQV9RVUVVRVNdOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCBwZW5kaW5nX3BhY2tldFtOVU1fVFhfREFUQV9RVUVVRVNdOworCXVuc2lnbmVkIGxvbmcgc3RhdGVbTlVNX1RYX0RBVEFfUVVFVUVTX0FNUERVXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgcGVuZGluZ19wYWNrZXRbTlVNX1RYX0RBVEFfUVVFVUVTX0FNUERVXTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcGVuZGluZ190YXNrbGV0OwogCiAJLyogbnVtYmVyIG9mIGludGVyZmFjZXMgd2l0aCBjb3JyZXNwb25kaW5nIElGRl8gZmxhZ3MgKi8KQEAgLTQ1OSwxMSArNjE5LDYgQEAKIAogCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyYXRlX2N0cmw7CiAKLQkvKiBTdXBwb3J0ZWQgYW5kIGJhc2ljIHJhdGUgZmlsdGVycyBmb3IgZGlmZmVyZW50IG1vZGVzLiBUaGVzZSBhcmUKLQkgKiBwb2ludGVycyB0byAtMSB0ZXJtaW5hdGVkIGxpc3RzIGFuZCByYXRlcyBpbiAxMDAga2JwcyB1bml0cy4gKi8KLQlpbnQgKnN1cHBfcmF0ZXNbTlVNX0lFRUU4MDIxMV9NT0RFU107Ci0JaW50ICpiYXNpY19yYXRlc1tOVU1fSUVFRTgwMjExX01PREVTXTsKLQogCWludCBydHNfdGhyZXNob2xkOwogCWludCBmcmFnbWVudGF0aW9uX3RocmVzaG9sZDsKIAlpbnQgc2hvcnRfcmV0cnlfbGltaXQ7IC8qIGRvdDExU2hvcnRSZXRyeUxpbWl0ICovCkBAIC00NzcsMjEgKzYzMiwyNSBAQAogCQkJICAgICAqIGRlbGl2ZXIgbXVsdGljYXN0IGZyYW1lcyBib3RoIGJhY2sgdG8gd2lyZWxlc3MKIAkJCSAgICAgKiBtZWRpYSBhbmQgdG8gdGhlIGxvY2FsIG5ldCBzdGFjayAqLwogCi0JaWVlZTgwMjExX3J4X2hhbmRsZXIgKnJ4X3ByZV9oYW5kbGVyczsKLQlpZWVlODAyMTFfcnhfaGFuZGxlciAqcnhfaGFuZGxlcnM7Ci0JaWVlZTgwMjExX3R4X2hhbmRsZXIgKnR4X2hhbmRsZXJzOwotCiAJc3RydWN0IGxpc3RfaGVhZCBpbnRlcmZhY2VzOwogCisJLyoKKwkgKiBLZXkgbG9jaywgcHJvdGVjdHMgc2RhdGEncyBrZXlfbGlzdCBhbmQgc3RhX2luZm8ncworCSAqIGtleSBwb2ludGVycyAod3JpdGUgYWNjZXNzLCB0aGV5J3JlIFJDVS4pCisJICovCisJc3BpbmxvY2tfdCBrZXlfbG9jazsKKworCiAJYm9vbCBzdGFfc3dfc2Nhbm5pbmc7CiAJYm9vbCBzdGFfaHdfc2Nhbm5pbmc7CiAJaW50IHNjYW5fY2hhbm5lbF9pZHg7CisJZW51bSBpZWVlODAyMTFfYmFuZCBzY2FuX2JhbmQ7CisKIAllbnVtIHsgU0NBTl9TRVRfQ0hBTk5FTCwgU0NBTl9TRU5EX1BST0JFIH0gc2Nhbl9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbl9jb21wbGV0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX3dvcms7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnNjYW5fZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqc2Nhbl9jaGFubmVsOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqb3Blcl9od19tb2RlLCAqc2Nhbl9od19tb2RlOwogCXU4IHNjYW5fc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKIAlzaXplX3Qgc2Nhbl9zc2lkX2xlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9ic3NfbGlzdDsKQEAgLTU2MCwxNCArNzE5LDggQEAKIAlpbnQgd2lmaV93bWVfbm9hY2tfdGVzdDsKIAl1bnNpZ25lZCBpbnQgd21tX2FjbTsgLyogYml0IGZpZWxkIG9mIEFDTSBiaXRzIChCSVQoODAyLjFEIHRhZykpICovCiAKLQl1bnNpZ25lZCBpbnQgZW5hYmxlZF9tb2RlczsgLyogYml0ZmllbGQgb2YgYWxsb3dlZCBtb2RlczsKLQkJCQkgICAgICAqICgxIDw8IE1PREVfKikgKi8KLQl1bnNpZ25lZCBpbnQgaHdfbW9kZXM7IC8qIGJpdGZpZWxkIG9mIHN1cHBvcnRlZCBoYXJkd2FyZSBtb2RlczsKLQkJCQkqICgxIDw8IE1PREVfKikgKi8KLQogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiAJc3RydWN0IGxvY2FsX2RlYnVnZnNkZW50cmllcyB7Ci0JCXN0cnVjdCBkZW50cnkgKmNoYW5uZWw7CiAJCXN0cnVjdCBkZW50cnkgKmZyZXF1ZW5jeTsKIAkJc3RydWN0IGRlbnRyeSAqYW50ZW5uYV9zZWxfdHg7CiAJCXN0cnVjdCBkZW50cnkgKmFudGVubmFfc2VsX3J4OwpAQCAtNTc3LDkgKzczMCw3IEBACiAJCXN0cnVjdCBkZW50cnkgKnNob3J0X3JldHJ5X2xpbWl0OwogCQlzdHJ1Y3QgZGVudHJ5ICpsb25nX3JldHJ5X2xpbWl0OwogCQlzdHJ1Y3QgZGVudHJ5ICp0b3RhbF9wc19idWZmZXJlZDsKLQkJc3RydWN0IGRlbnRyeSAqbW9kZTsKIAkJc3RydWN0IGRlbnRyeSAqd2VwX2l2OwotCQlzdHJ1Y3QgZGVudHJ5ICptb2RlczsKIAkJc3RydWN0IGRlbnRyeSAqc3RhdGlzdGljczsKIAkJc3RydWN0IGxvY2FsX2RlYnVnZnNkZW50cmllc19zdGF0c2RlbnRyaWVzIHsKIAkJCXN0cnVjdCBkZW50cnkgKnRyYW5zbWl0dGVkX2ZyYWdtZW50X2NvdW50OwpAQCAtNjI3LDYgKzc3OCw2MyBAQAogI2VuZGlmCiB9OwogCisvKiB0aGlzIHN0cnVjdCByZXByZXNlbnRzIDgwMi4xMW4ncyBSQS9USUQgY29tYmluYXRpb24gKi8KK3N0cnVjdCBpZWVlODAyMTFfcmFfdGlkIHsKKwl1OCByYVtFVEhfQUxFTl07CisJdTE2IHRpZDsKK307CisKKy8qIFBhcnNlZCBJbmZvcm1hdGlvbiBFbGVtZW50cyAqLworc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgeworCS8qIHBvaW50ZXJzIHRvIElFcyAqLworCXU4ICpzc2lkOworCXU4ICpzdXBwX3JhdGVzOworCXU4ICpmaF9wYXJhbXM7CisJdTggKmRzX3BhcmFtczsKKwl1OCAqY2ZfcGFyYW1zOworCXU4ICp0aW07CisJdTggKmlic3NfcGFyYW1zOworCXU4ICpjaGFsbGVuZ2U7CisJdTggKndwYTsKKwl1OCAqcnNuOworCXU4ICplcnBfaW5mbzsKKwl1OCAqZXh0X3N1cHBfcmF0ZXM7CisJdTggKndtbV9pbmZvOworCXU4ICp3bW1fcGFyYW07CisJdTggKmh0X2NhcF9lbGVtOworCXU4ICpodF9pbmZvX2VsZW07CisJdTggKm1lc2hfY29uZmlnOworCXU4ICptZXNoX2lkOworCXU4ICpwZWVyX2xpbms7CisJdTggKnByZXE7CisJdTggKnByZXA7CisJdTggKnBlcnI7CisKKwkvKiBsZW5ndGggb2YgdGhlbSwgcmVzcGVjdGl2ZWx5ICovCisJdTggc3NpZF9sZW47CisJdTggc3VwcF9yYXRlc19sZW47CisJdTggZmhfcGFyYW1zX2xlbjsKKwl1OCBkc19wYXJhbXNfbGVuOworCXU4IGNmX3BhcmFtc19sZW47CisJdTggdGltX2xlbjsKKwl1OCBpYnNzX3BhcmFtc19sZW47CisJdTggY2hhbGxlbmdlX2xlbjsKKwl1OCB3cGFfbGVuOworCXU4IHJzbl9sZW47CisJdTggZXJwX2luZm9fbGVuOworCXU4IGV4dF9zdXBwX3JhdGVzX2xlbjsKKwl1OCB3bW1faW5mb19sZW47CisJdTggd21tX3BhcmFtX2xlbjsKKwl1OCBodF9jYXBfZWxlbV9sZW47CisJdTggaHRfaW5mb19lbGVtX2xlbjsKKwl1OCBtZXNoX2NvbmZpZ19sZW47CisJdTggbWVzaF9pZF9sZW47CisJdTggcGVlcl9saW5rX2xlbjsKKwl1OCBwcmVxX2xlbjsKKwl1OCBwcmVwX2xlbjsKKwl1OCBwZXJyX2xlbjsKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqaHdfdG9fbG9jYWwoCiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CkBAIC02NTAsNTcgKzg1OCw2IEBACiAJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qgc3RhX2luZm8gKiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fYnNzX3RpbV9zZXQoc3RydWN0IGllZWU4MDIxMV9pZl9hcCAqYnNzLCB1MTYgYWlkKQotewotCS8qCi0JICogVGhpcyBmb3JtYXQgaGFzIGJlZW4gbWFuZGF0ZWQgYnkgdGhlIElFRUUgc3BlY2lmaWNhdGlvbnMsCi0JICogc28gdGhpcyBsaW5lIG1heSBub3QgYmUgY2hhbmdlZCB0byB1c2UgdGhlIF9fc2V0X2JpdCgpIGZvcm1hdC4KLQkgKi8KLQlic3MtPnRpbVthaWQgLyA4XSB8PSAoMSA8PCAoYWlkICUgOCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYnNzX3RpbV9zZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9hcCAqYnNzLCB1MTYgYWlkKQotewotCXJlYWRfbG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKLQlfX2Jzc190aW1fc2V0KGJzcywgYWlkKTsKLQlyZWFkX3VubG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fYnNzX3RpbV9jbGVhcihzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICpic3MsIHUxNiBhaWQpCi17Ci0JLyoKLQkgKiBUaGlzIGZvcm1hdCBoYXMgYmVlbiBtYW5kYXRlZCBieSB0aGUgSUVFRSBzcGVjaWZpY2F0aW9ucywKLQkgKiBzbyB0aGlzIGxpbmUgbWF5IG5vdCBiZSBjaGFuZ2VkIHRvIHVzZSB0aGUgX19jbGVhcl9iaXQoKSBmb3JtYXQuCi0JICovCi0JYnNzLT50aW1bYWlkIC8gOF0gJj0gfigxIDw8IChhaWQgJSA4KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBic3NfdGltX2NsZWFyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICpic3MsIHUxNiBhaWQpCi17Ci0JcmVhZF9sb2NrX2JoKCZsb2NhbC0+c3RhX2xvY2spOwotCV9fYnNzX3RpbV9jbGVhcihic3MsIGFpZCk7Ci0JcmVhZF91bmxvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7Ci19Ci0KLS8qKgotICogaWVlZTgwMjExX2lzX2VycF9yYXRlIC0gQ2hlY2sgaWYgYSByYXRlIGlzIGFuIEVSUCByYXRlCi0gKiBAcGh5bW9kZTogVGhlIFBIWS1tb2RlIGZvciB0aGlzIHJhdGUgKE1PREVfSUVFRTgwMjExLi4uKQotICogQHJhdGU6IFRyYW5zbWlzc2lvbiByYXRlIHRvIGNoZWNrLCBpbiAxMDAga2JwcwotICoKLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF0ZSBpcyBhbiBFeHRlbmRlZCBSYXRlIFBIWSAoRVJQKSByYXRlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfZXJwX3JhdGUoaW50IHBoeW1vZGUsIGludCByYXRlKQotewotCWlmIChwaHltb2RlID09IE1PREVfSUVFRTgwMjExRykgewotCQlpZiAocmF0ZSAhPSAxMCAmJiByYXRlICE9IDIwICYmCi0JCSAgICByYXRlICE9IDU1ICYmIHJhdGUgIT0gMTEwKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfYnNzaWRfbWF0Y2goY29uc3QgdTggKnJhZGRyLCBjb25zdCB1OCAqYWRkcikKIHsKIAlyZXR1cm4gY29tcGFyZV9ldGhlcl9hZGRyKHJhZGRyLCBhZGRyKSA9PSAwIHx8CkBAIC03MTIsMTYgKzg2OSwxMSBAQAogaW50IGllZWU4MDIxMV9od19jb25maWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogaW50IGllZWU4MDIxMV9pZl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgaWVlZTgwMjExX2lmX2NvbmZpZ19iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIGllZWU4MDIxMV9wcmVwYXJlX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUpOwotdm9pZCBpZWVlODAyMTFfdHhfc2V0X2lzd2VwKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICp0eCk7Ci1pbnQgaWVlZTgwMjExX2lmX3VwZGF0ZV93ZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKnJlbW90ZV9hZGRyKTsKK3ZvaWQgaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CiB2b2lkIGllZWU4MDIxMV9pZl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqaWVlZTgwMjExX2dldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQkgIGludCBwaHltb2RlLCBpbnQgaHdyYXRlKTsKLWludCBpZWVlODAyMTFfaHdfY29uZmlnX2h0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgZW5hYmxlX2h0LAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpyZXFfaHRfY2FwLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqcmVxX2Jzc19jYXApOwordTMyIGllZWU4MDIxMV9oYW5kbGVfaHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBlbmFibGVfaHQsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKnJlcV9odF9jYXAsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvICpyZXFfYnNzX2NhcCk7CiAKIC8qIGllZWU4MDIxMV9pb2N0bC5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGllZWU4MDIxMV9pd19oYW5kbGVyX2RlZjsKQEAgLTc0Nyw5ICs4OTksNyBAQAogCiAKIC8qIGllZWU4MDIxMV9pb2N0bC5jICovCi1pbnQgaWVlZTgwMjExX3NldF9jb21wcmVzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLWludCBpZWVlODAyMTFfc2V0X2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBjaGFubmVsLCBpbnQgZnJlcSk7CitpbnQgaWVlZTgwMjExX3NldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgZnJlcSk7CiAvKiBpZWVlODAyMTFfc3RhLmMgKi8KIHZvaWQgaWVlZTgwMjExX3N0YV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogdm9pZCBpZWVlODAyMTFfc3RhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTc2Myw5ICs5MTMsOSBAQAogdm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKTsKIGludCBpZWVlODAyMTFfc3RhX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwotaWVlZTgwMjExX3R4cnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworaWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfc3RhX3J4X3NjYW4oCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9kZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqaWUsIHNpemVfdCBsZW4pOwpAQCAtNzgyLDEyICs5MzIsMzYgQEAKIGludCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvX2llX3RvX2h0X2Jzc19pbmZvKAogCQkJc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8gKmh0X2FkZF9pbmZvX2llLAogCQkJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqYnNzX2luZm8pOwordm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYSwKKwkJCQkgIHUxNiB0aWQsIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXJ0X3NlcV9udW0sCisJCQkJICB1MTYgYWdnX3NpemUsIHUxNiB0aW1lb3V0KTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJCXUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSk7CisKIHZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRhLAogCQkJCXUxNiB0aWQsIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pOwogdm9pZCBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICphZGRyKTsKK3U2NCBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK3ZvaWQgaWVlZTgwMjExX3N0YV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQlpbnQgZW5jcnlwdCk7Cit2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcyk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAordm9pZCBpZWVlODAyMTFfc3RhcnRfbWVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3N0YXJ0X21lc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3t9CisjZW5kaWYKKwogLyogaWVlZTgwMjExX2lmYWNlLmMgKi8KIGludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBpbnQgdHlwZSk7CisJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBpbnQgdHlwZSwKKwkJICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTsKIHZvaWQgaWVlZTgwMjExX2lmX3NldF90eXBlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0eXBlKTsKIHZvaWQgaWVlZTgwMjExX2lmX3JlaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgX19pZWVlODAyMTFfaWZfZGVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtNzk2LDE2ICs5NzAsNyBAQAogdm9pZCBpZWVlODAyMTFfaWZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgaWVlZTgwMjExX2lmX3NkYXRhX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCi0vKiByZWdkb21haW4uYyAqLwotdm9pZCBpZWVlODAyMTFfcmVnZG9tYWluX2luaXQodm9pZCk7Ci12b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9yZWdkb21haW4oc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlKTsKLQotLyogcnggaGFuZGxpbmcgKi8KLWV4dGVybiBpZWVlODAyMTFfcnhfaGFuZGxlciBpZWVlODAyMTFfcnhfcHJlX2hhbmRsZXJzW107Ci1leHRlcm4gaWVlZTgwMjExX3J4X2hhbmRsZXIgaWVlZTgwMjExX3J4X2hhbmRsZXJzW107Ci0KIC8qIHR4IGhhbmRsaW5nICovCi1leHRlcm4gaWVlZTgwMjExX3R4X2hhbmRsZXIgaWVlZTgwMjExX3R4X2hhbmRsZXJzW107CiB2b2lkIGllZWU4MDIxMV9jbGVhcl90eF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX3R4X3BlbmRpbmcodW5zaWduZWQgbG9uZyBkYXRhKTsKIGludCBpZWVlODAyMTFfbWFzdGVyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2lmYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjFlYjIuLjAwMDAwMDAKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pZmFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA2IEppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJzdGFfaW5mby5oIgotI2luY2x1ZGUgImRlYnVnZnNfbmV0ZGV2LmgiCi0KLXZvaWQgaWVlZTgwMjExX2lmX3NkYXRhX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0JaW50IGk7Ci0KLQkvKiBEZWZhdWx0IHZhbHVlcyBmb3Igc3ViLWludGVyZmFjZSBwYXJhbWV0ZXJzICovCi0Jc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfRlJBR01FTlRfTUFYOyBpKyspCi0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNkYXRhLT5mcmFnbWVudHNbaV0uc2tiX2xpc3QpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT5rZXlfbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9pZl9zZGF0YV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX0ZSQUdNRU5UX01BWDsgaSsrKSB7Ci0JCV9fc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+ZnJhZ21lbnRzW2ldLnNrYl9saXN0KTsKLQl9Ci19Ci0KLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovCi1pbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICoqbmV3X2RldiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IE5VTEw7Ci0JaW50IHJldDsKLQotCUFTU0VSVF9SVE5MKCk7Ci0JbmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNkYXRhKSArIGxvY2FsLT5ody52aWZfZGF0YV9zaXplLAotCQkJICAgIG5hbWUsIGllZWU4MDIxMV9pZl9zZXR1cCk7Ci0JaWYgKCFuZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldCA9IGRldl9hbGxvY19uYW1lKG5kZXYsIG5kZXYtPm5hbWUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGZhaWw7Ci0KLQltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7Ci0JbmRldi0+YmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JbmRldi0+aXJxID0gZGV2LT5pcnE7Ci0JbmRldi0+bWVtX3N0YXJ0ID0gZGV2LT5tZW1fc3RhcnQ7Ci0JbmRldi0+bWVtX2VuZCA9IGRldi0+bWVtX2VuZDsKLQlTRVRfTkVUREVWX0RFVihuZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKG5kZXYpOwotCW5kZXYtPmllZWU4MDIxMV9wdHIgPSAmc2RhdGEtPndkZXY7Ci0Jc2RhdGEtPndkZXYud2lwaHkgPSBsb2NhbC0+aHcud2lwaHk7Ci0Jc2RhdGEtPnZpZi50eXBlID0gSUVFRTgwMjExX0lGX1RZUEVfQVA7Ci0Jc2RhdGEtPmRldiA9IG5kZXY7Ci0Jc2RhdGEtPmxvY2FsID0gbG9jYWw7Ci0JaWVlZTgwMjExX2lmX3NkYXRhX2luaXQoc2RhdGEpOwotCi0JcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5kZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCWllZWU4MDIxMV9kZWJ1Z2ZzX2FkZF9uZXRkZXYoc2RhdGEpOwotCWllZWU4MDIxMV9pZl9zZXRfdHlwZShuZGV2LCB0eXBlKTsKLQotCS8qIHdlJ3JlIHVuZGVyIFJUTkwgc28gYWxsIHRoaXMgaXMgZmluZSAqLwotCWlmICh1bmxpa2VseShsb2NhbC0+cmVnX3N0YXRlID09IElFRUU4MDIxMV9ERVZfVU5SRUdJU1RFUkVEKSkgewotCQlfX2llZWU4MDIxMV9pZl9kZWwobG9jYWwsIHNkYXRhKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWxpc3RfYWRkX3RhaWxfcmN1KCZzZGF0YS0+bGlzdCwgJmxvY2FsLT5pbnRlcmZhY2VzKTsKLQotCWlmIChuZXdfZGV2KQotCQkqbmV3X2RldiA9IG5kZXY7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlmcmVlX25ldGRldihuZGV2KTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGllZWU4MDIxMV9pZl9zZXRfdHlwZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaW50IG9sZHR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG9uIHRoZSBtYXN0ZXIgaW50ZXJmYWNlCi0JICogd2hpY2ggYWxyZWFkeSBoYXMgYSBoYXJkX3N0YXJ0X3htaXQgcm91dGluZSBhc3NpZ25lZAotCSAqIHdoaWNoIG11c3Qgbm90IGJlIGNoYW5nZWQuCi0JICovCi0JaWYgKGRldiAhPSBzZGF0YS0+bG9jYWwtPm1kZXYpCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQ7Ci0KLQkvKgotCSAqIENhbGxlZCBldmVuIHdoZW4gcmVnaXN0ZXJfbmV0ZGV2aWNlIGZhaWxzLCBpdCB3b3VsZAotCSAqIG9vcHMgaWYgYXNzaWduZWQgYmVmb3JlIGluaXRpYWxpc2luZyB0aGUgcmVzdC4KLQkgKi8KLQlkZXYtPnVuaW5pdCA9IGllZWU4MDIxMV9pZl9yZWluaXQ7Ci0KLQkvKiBtb3N0IGhhdmUgbm8gQlNTIHBvaW50ZXIgKi8KLQlzZGF0YS0+YnNzID0gTlVMTDsKLQlzZGF0YS0+dmlmLnR5cGUgPSB0eXBlOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6Ci0JCS8qIG5vdGhpbmcgc3BlY2lhbCAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46Ci0JCXNkYXRhLT51LnZsYW4uYXAgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOgotCQlzZGF0YS0+dS5hcC5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKLQkJc2RhdGEtPnUuYXAubWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2RhdGEtPnUuYXAucHNfYmNfYnVmKTsKLQkJc2RhdGEtPmJzcyA9ICZzZGF0YS0+dS5hcDsKLQkJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT51LmFwLnZsYW5zKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOiB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKm1zZGF0YTsKLQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwotCi0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJSU5JVF9XT1JLKCZpZnN0YS0+d29yaywgaWVlZTgwMjExX3N0YV93b3JrKTsKLQkJc2V0dXBfdGltZXIoJmlmc3RhLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwotCQlza2JfcXVldWVfaGVhZF9pbml0KCZpZnN0YS0+c2tiX3F1ZXVlKTsKLQotCQlpZnN0YS0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwotCQlpZnN0YS0+YXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX09QRU4gfAotCQkJSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVk7Ci0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKLQkJCUlFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQgfAotCQkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8Ci0JCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0KLQkJbXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoc2RhdGEtPmxvY2FsLT5tZGV2KTsKLQkJc2RhdGEtPmJzcyA9ICZtc2RhdGEtPnUuYXA7Ci0JCWJyZWFrOwotCX0KLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6Ci0JCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzOiBVbmtub3duIGludGVyZmFjZSB0eXBlIDB4JXgiLAotCQkgICAgICAgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18sIHR5cGUpOwotCX0KLQlpZWVlODAyMTFfZGVidWdmc19jaGFuZ2VfaWZfdHlwZShzZGF0YSwgb2xkdHlwZSk7Ci19Ci0KLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovCi12b2lkIGllZWU4MDIxMV9pZl9yZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JQVNTRVJUX1JUTkwoKTsKLQotCWllZWU4MDIxMV9mcmVlX2tleXMoc2RhdGEpOwotCi0JaWVlZTgwMjExX2lmX3NkYXRhX2RlaW5pdChzZGF0YSk7Ci0KLQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSU5WQUxJRDoKLQkJLyogY2Fubm90IGhhcHBlbiAqLwotCQlXQVJOX09OKDEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOiB7Ci0JCS8qIFJlbW92ZSBhbGwgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgdXNlIHRoaXMgQlNTCi0JCSAqIGFzIHRoZWlyIHNkYXRhLT5ic3MgKi8KLQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqdHNkYXRhLCAqbjsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHNkYXRhLCBuLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJCWlmICh0c2RhdGEgIT0gc2RhdGEgJiYgdHNkYXRhLT5ic3MgPT0gJnNkYXRhLT51LmFwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZW1vdmluZyB2aXJ0dWFsICIKLQkJCQkgICAgICAgImludGVyZmFjZSAlcyBiZWNhdXNlIGl0cyBCU1MgaW50ZXJmYWNlIgotCQkJCSAgICAgICAiIGlzIGJlaW5nIHJlbW92ZWRcbiIsCi0JCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHRzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJCQlsaXN0X2RlbF9yY3UoJnRzZGF0YS0+bGlzdCk7Ci0JCQkJLyoKLQkJCQkgKiBXZSBoYXZlIGxvdHMgb2YgdGltZSBhbmQgY2FuIGFmZm9yZAotCQkJCSAqIHRvIHN5bmMgZm9yIGVhY2ggaW50ZXJmYWNlCi0JCQkJICovCi0JCQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCQkJX19pZWVlODAyMTFfaWZfZGVsKGxvY2FsLCB0c2RhdGEpOwotCQkJfQotCQl9Ci0KLQkJa2ZyZWUoc2RhdGEtPnUuYXAuYmVhY29uKTsKLQotCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzZGF0YS0+dS5hcC5wc19iY19idWYpKSkgewotCQkJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkLS07Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCX0KLQotCQlicmVhazsKLQl9Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyKTsKLQkJaWYgKHN0YSkgewotCQkJc3RhX2luZm9fZnJlZShzdGEpOwotCQkJc3RhX2luZm9fcHV0KHN0YSk7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogU29tZW9uZSBoYWQgZGVsZXRlZCBteSBTVEEgIgotCQkJICAgICAgICJlbnRyeSBmb3IgdGhlIFdEUyBsaW5rXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCi0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlzZGF0YS0+dS5zdGEuZXh0cmFfaWUgPSBOVUxMOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXFfaWVzKTsKLQkJc2RhdGEtPnUuc3RhLmFzc29jcmVxX2llcyA9IE5VTEw7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5hc3NvY3Jlc3BfaWVzKTsKLQkJc2RhdGEtPnUuc3RhLmFzc29jcmVzcF9pZXMgPSBOVUxMOwotCQlpZiAoc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApIHsKLQkJCWRldl9rZnJlZV9za2Ioc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApOwotCQkJc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3AgPSBOVUxMOwotCQl9Ci0KLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSOgotCQlkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfVkxBTjoKLQkJc2RhdGEtPnUudmxhbi5hcCA9IE5VTEw7Ci0JCWJyZWFrOwotCX0KLQotCS8qIHJlbW92ZSBhbGwgU1RBcyB0aGF0IGFyZSBib3VuZCB0byB0aGlzIHZpcnR1YWwgaW50ZXJmYWNlICovCi0Jc3RhX2luZm9fZmx1c2gobG9jYWwsIGRldik7Ci0KLQltZW1zZXQoJnNkYXRhLT51LCAwLCBzaXplb2Yoc2RhdGEtPnUpKTsKLQlpZWVlODAyMTFfaWZfc2RhdGFfaW5pdChzZGF0YSk7Ci19Ci0KLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovCi12b2lkIF9faWVlZTgwMjExX2lmX2RlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwotCi0JaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldihzZGF0YSk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKLQkvKiBFeGNlcHQgbWFzdGVyIGludGVyZmFjZSwgdGhlIG5ldF9kZXZpY2Ugd2lsbCBiZSBmcmVlZCBieQotCSAqIG5ldF9kZXZpY2UtPmRlc3RydWN0b3IgKGkuIGUuIGllZWU4MDIxMV9pZl9mcmVlKS4gKi8KLX0KLQotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi8KLWludCBpZWVlODAyMTFfaWZfcmVtb3ZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCAqbjsKLQotCUFTU0VSVF9SVE5MKCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RhdGEsIG4sICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoKHNkYXRhLT52aWYudHlwZSA9PSBpZCB8fCBpZCA9PSAtMSkgJiYKLQkJICAgIHN0cmNtcChuYW1lLCBzZGF0YS0+ZGV2LT5uYW1lKSA9PSAwICYmCi0JCSAgICBzZGF0YS0+ZGV2ICE9IGxvY2FsLT5tZGV2KSB7Ci0JCQlsaXN0X2RlbF9yY3UoJnNkYXRhLT5saXN0KTsKLQkJCXN5bmNocm9uaXplX3JjdSgpOwotCQkJX19pZWVlODAyMTFfaWZfZGVsKGxvY2FsLCBzZGF0YSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotdm9pZCBpZWVlODAyMTFfaWZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWllZWU4MDIxMV9pZl9zZGF0YV9kZWluaXQoc2RhdGEpOwotCWZyZWVfbmV0ZGV2KGRldik7Ci19CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2lvY3RsLmMgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2lvY3RsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMjRkMzcuLjAwMDAwMDAKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pb2N0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgotICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExX2xlZC5oIgotI2luY2x1ZGUgImllZWU4MDIxMV9yYXRlLmgiCi0jaW5jbHVkZSAid3BhLmgiCi0jaW5jbHVkZSAiYWVzX2NjbS5oIgotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpzdGFfYWRkciwKLQkJCQkgICAgaW50IGlkeCwgaW50IGFsZywgaW50IHJlbW92ZSwKLQkJCQkgICAgaW50IHNldF90eF9rZXksIGNvbnN0IHU4ICpfa2V5LAotCQkJCSAgICBzaXplX3Qga2V5X2xlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCWludCByZXQgPSAwOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAoaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldF9lbmNyeXB0IC0gaW52YWxpZCBpZHg9JWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGlkeCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihzdGFfYWRkcikpIHsKLQkJc3RhID0gTlVMTDsKLQkJa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKLQl9IGVsc2UgewotCQlzZXRfdHhfa2V5ID0gMDsKLQkJLyoKLQkJICogQWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCwgdGhlIGtleSBpbmRleCBvZiBhIHBhaXJ3aXNlCi0JCSAqIGtleSBtdXN0IGJlIHplcm8uIEhvd2V2ZXIsIHNvbWUgQVAgYXJlIGJyb2tlbiB3aGVuIGl0Ci0JCSAqIGNvbWVzIHRvIFdFUCBrZXkgaW5kaWNlcywgc28gd2Ugd29yayBhcm91bmQgdGhpcy4KLQkJICovCi0JCWlmIChpZHggIT0gMCAmJiBhbGcgIT0gQUxHX1dFUCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXRfZW5jcnlwdCAtIG5vbi16ZXJvIGlkeCBmb3IgIgotCQkJICAgICAgICJpbmRpdmlkdWFsIGtleVxuIiwgZGV2LT5uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzdGFfYWRkcik7Ci0JCWlmICghc3RhKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQkJCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXRfZW5jcnlwdCAtIHVua25vd24gYWRkciAiCi0JCQkgICAgICAgIiVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhX2FkZHIpKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRyAqLwotCi0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJfQotCi0JCWtleSA9IHN0YS0+a2V5OwotCX0KLQotCWlmIChyZW1vdmUpIHsKLQkJaWVlZTgwMjExX2tleV9mcmVlKGtleSk7Ci0JCWtleSA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogQXV0b21hdGljYWxseSBmcmVlcyBhbnkgb2xkIGtleSBpZiBwcmVzZW50LgotCQkgKi8KLQkJa2V5ID0gaWVlZTgwMjExX2tleV9hbGxvYyhzZGF0YSwgc3RhLCBhbGcsIGlkeCwga2V5X2xlbiwgX2tleSk7Ci0JCWlmICgha2V5KSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnJfb3V0OwotCQl9Ci0JfQotCi0JaWYgKHNldF90eF9rZXkgfHwgKCFzdGEgJiYgIXNkYXRhLT5kZWZhdWx0X2tleSAmJiBrZXkpKQotCQlpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBpZHgpOwotCi0JcmV0ID0gMDsKLSBlcnJfb3V0OgotCWlmIChzdGEpCi0JCXN0YV9pbmZvX3B1dChzdGEpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQlpbnQgcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoZGV2LCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChkZXYsICZzZGF0YS0+dS5zdGEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlzd2l0Y2ggKGxvY2FsLT5ody5jb25mLnBoeW1vZGUpIHsKLQljYXNlIE1PREVfSUVFRTgwMjExQToKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWEiKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RFX0lFRUU4MDIxMUI6Ci0JCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTFiIik7Ci0JCWJyZWFrOwotCWNhc2UgTU9ERV9JRUVFODAyMTFHOgotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExZyIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExIik7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUgPSBOVUxMOwotCWludCBjID0gMDsKLQotCWRhdGEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjE7Ci0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9ERUZBVUxUX0tFWVM7Ci0KLQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IGxvY2FsLT5ody5tYXhfc2lnbmFsOwotCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IGxvY2FsLT5ody5tYXhfcnNzaTsKLQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSBsb2NhbC0+aHcubWF4X25vaXNlOwotCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQotCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gbG9jYWwtPmh3Lm1heF9zaWduYWwvMjsKLQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAwOwotCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7Ci0JcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOwotCi0JcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8Ci0JCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZsb2NhbC0+bW9kZXNfbGlzdCwgbGlzdCkgewotCQlpbnQgaSA9IDA7Ci0KLQkJaWYgKCEobG9jYWwtPmVuYWJsZWRfbW9kZXMgJiAoMSA8PCBtb2RlLT5tb2RlKSkgfHwKLQkJICAgIChsb2NhbC0+aHdfbW9kZXMgJiBsb2NhbC0+ZW5hYmxlZF9tb2RlcyAmCi0JCSAgICAgKDEgPDwgTU9ERV9JRUVFODAyMTFHKSAmJiBtb2RlLT5tb2RlID09IE1PREVfSUVFRTgwMjExQikpCi0JCQljb250aW51ZTsKLQotCQl3aGlsZSAoaSA8IG1vZGUtPm51bV9jaGFubmVscyAmJiBjIDwgSVdfTUFYX0ZSRVFVRU5DSUVTKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmbW9kZS0+Y2hhbm5lbHNbaV07Ci0KLQkJCWlmIChjaGFuLT5mbGFnICYgSUVFRTgwMjExX0NIQU5fV19TQ0FOKSB7Ci0JCQkJcmFuZ2UtPmZyZXFbY10uaSA9IGNoYW4tPmNoYW47Ci0JCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmZyZXEgKiAxMDAwMDA7Ci0JCQkJcmFuZ2UtPmZyZXFbY10uZSA9IDE7Ci0JCQkJYysrOwotCQkJfQotCQkJaSsrOwotCQl9Ci0JfQotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBjOwotCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gYzsKLQotCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdUSFJTUFkpOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7Ci0KLQlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaW50IHR5cGU7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXN3aXRjaCAoKm1vZGUpIHsKLQljYXNlIElXX01PREVfSU5GUkE6Ci0JCXR5cGUgPSBJRUVFODAyMTFfSUZfVFlQRV9TVEE7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJdHlwZSA9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1M7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9NT05JVE9SOgotCQl0eXBlID0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHR5cGUgPT0gc2RhdGEtPnZpZi50eXBlKQotCQlyZXR1cm4gMDsKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWVlZTgwMjExX2lmX3JlaW5pdChkZXYpOwotCWllZWU4MDIxMV9pZl9zZXRfdHlwZShkZXYsIHR5cGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9BUDoKLQkJKm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6Ci0JCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgotCQkqbW9kZSA9IElXX01PREVfQURIT0M7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKLQkJKm1vZGUgPSBJV19NT0RFX01PTklUT1I7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfV0RTOgotCQkqbW9kZSA9IElXX01PREVfUkVQRUFUOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46Ci0JCSptb2RlID0gSVdfTU9ERV9TRUNPTkQ7CQkvKiBGSVhNRSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqbW9kZSA9IElXX01PREVfQVVUTzsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgaWVlZTgwMjExX3NldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgY2hhbm5lbCwgaW50IGZyZXEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCWludCBjLCBzZXQgPSAwOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmbG9jYWwtPm1vZGVzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCEobG9jYWwtPmVuYWJsZWRfbW9kZXMgJiAoMSA8PCBtb2RlLT5tb2RlKSkpCi0JCQljb250aW51ZTsKLQkJZm9yIChjID0gMDsgYyA8IG1vZGUtPm51bV9jaGFubmVsczsgYysrKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmbW9kZS0+Y2hhbm5lbHNbY107Ci0JCQlpZiAoY2hhbi0+ZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfU0NBTiAmJgotCQkJICAgICgoY2hhbi0+Y2hhbiA9PSBjaGFubmVsKSB8fCAoY2hhbi0+ZnJlcSA9PSBmcmVxKSkpIHsKLQkJCQlsb2NhbC0+b3Blcl9jaGFubmVsID0gY2hhbjsKLQkJCQlsb2NhbC0+b3Blcl9od19tb2RlID0gbW9kZTsKLQkJCQlzZXQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChzZXQpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoc2V0KSB7Ci0JCWlmIChsb2NhbC0+c3RhX3N3X3NjYW5uaW5nKQotCQkJcmV0ID0gMDsKLQkJZWxzZQotCQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCk7Ci0KLQkJcmF0ZV9jb250cm9sX2NsZWFyKGxvY2FsKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0KLQkvKiBmcmVxLT5lID09IDA6IGZyZXEtPm0gPSBjaGFubmVsOyBvdGhlcndpc2UgZnJlcSA9IG0gKiAxMF5lICovCi0JaWYgKGZyZXEtPmUgPT0gMCkgewotCQlpZiAoZnJlcS0+bSA8IDApIHsKLQkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQotCQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gaWVlZTgwMjExX3NldF9jaGFubmVsKGxvY2FsLCBmcmVxLT5tLCAtMSk7Ci0JfSBlbHNlIHsKLQkJaW50IGksIGRpdiA9IDEwMDAwMDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBmcmVxLT5lOyBpKyspCi0JCQlkaXYgLz0gMTA7Ci0JCWlmIChkaXYgPiAwKQotCQkJcmV0dXJuIGllZWU4MDIxMV9zZXRfY2hhbm5lbChsb2NhbCwgLTEsIGZyZXEtPm0gLyBkaXYpOwotCQllbHNlCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQkvKiBUT0RPOiBpbiBzdGF0aW9uIG1vZGUgKE1hbmFnZWQvQWQtaG9jKSBtaWdodCBuZWVkIHRvIHBvbGwgbG93LWxldmVsCi0JICogZHJpdmVyIGZvciB0aGUgY3VycmVudCBjaGFubmVsIHdpdGggZmlybXdhcmUtYmFzZWQgbWFuYWdlbWVudCAqLwotCi0JZnJlcS0+bSA9IGxvY2FsLT5ody5jb25mLmZyZXE7Ci0JZnJlcS0+ZSA9IDY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc2l6ZV90IGxlbiA9IGRhdGEtPmxlbmd0aDsKLQotCS8qIGl3Y29uZmlnIHVzZXMgbnVsIHRlcm1pbmF0aW9uIGluIFNTSUQuLiAqLwotCWlmIChsZW4gPiAwICYmIHNzaWRbbGVuIC0gMV0gPT0gJ1wwJykKLQkJbGVuLS07Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKLQkJaW50IHJldDsKLQkJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkgewotCQkJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoc2RhdGEtPnUuc3RhLnNzaWQsIHNzaWQsIGxlbik7Ci0JCQlzZGF0YS0+dS5zdGEuc3NpZF9sZW4gPSBsZW47Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAoZGF0YS0+ZmxhZ3MpCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKLQkJZWxzZQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKLQkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfc3NpZChkZXYsIHNzaWQsIGxlbik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKGRldiwgJnNkYXRhLT51LnN0YSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKLQkJbWVtY3B5KHNkYXRhLT51LmFwLnNzaWQsIHNzaWQsIGxlbik7Ci0JCW1lbXNldChzZGF0YS0+dS5hcC5zc2lkICsgbGVuLCAwLAotCQkgICAgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTiAtIGxlbik7Ci0JCXNkYXRhLT51LmFwLnNzaWRfbGVuID0gbGVuOwotCQlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhkZXYpOwotCX0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQotewotCXNpemVfdCBsZW47Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKLQkJaW50IHJlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoZGV2LCBzc2lkLCAmbGVuKTsKLQkJaWYgKHJlcyA9PSAwKSB7Ci0JCQlkYXRhLT5sZW5ndGggPSBsZW47Ci0JCQlkYXRhLT5mbGFncyA9IDE7Ci0JCX0gZWxzZQotCQkJZGF0YS0+ZmxhZ3MgPSAwOwotCQlyZXR1cm4gcmVzOwotCX0KLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApIHsKLQkJbGVuID0gc2RhdGEtPnUuYXAuc3NpZF9sZW47Ci0JCWlmIChsZW4gPiBJV19FU1NJRF9NQVhfU0laRSkKLQkJCWxlbiA9IElXX0VTU0lEX01BWF9TSVpFOwotCQltZW1jcHkoc3NpZCwgc2RhdGEtPnUuYXAuc3NpZCwgbGVuKTsKLQkJZGF0YS0+bGVuZ3RoID0gbGVuOwotCQlkYXRhLT5mbGFncyA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQlpbnQgcmV0OwotCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSB7Ci0JCQltZW1jcHkoc2RhdGEtPnUuc3RhLmJzc2lkLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCi0JCQkgICAgICAgRVRIX0FMRU4pOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAotCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKLQkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwotCQllbHNlCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0JCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKGRldiwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoZGV2LCAmc2RhdGEtPnUuc3RhKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfV0RTKSB7Ci0JCWlmIChtZW1jbXAoc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCi0JCQkgICBFVEhfQUxFTikgPT0gMCkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gaWVlZTgwMjExX2lmX3VwZGF0ZV93ZHMoZGV2LCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEpOwotCX0KLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7Ci0JCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfV0RTKSB7Ci0JCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS53ZHMucmVtb3RlX2FkZHIsIEVUSF9BTEVOKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IE5VTEw7Ci0JdTggKnNzaWQgPSBOVUxMOwotCXNpemVfdCBzc2lkX2xlbiA9IDA7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogaWYgU1NJRCB3YXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkgdGhlbiB1c2UgdGhhdCAqLwotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSAmJgotCSAgICB3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCXJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKLQkJc3NpZCA9IHJlcS0+ZXNzaWQ7Ci0JCXNzaWRfbGVuID0gcmVxLT5lc3NpZF9sZW47Ci0JfQotCi0JcmV0dXJuIGllZWU4MDIxMV9zdGFfcmVxX3NjYW4oZGV2LCBzc2lkLCBzc2lkX2xlbik7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlpbnQgcmVzOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlpZiAobG9jYWwtPnN0YV9zd19zY2FubmluZyB8fCBsb2NhbC0+c3RhX2h3X3NjYW5uaW5nKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJlcyA9IGllZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHRzKGRldiwgZXh0cmEsIGRhdGEtPmxlbmd0aCk7Ci0JaWYgKHJlcyA+PSAwKSB7Ci0JCWRhdGEtPmxlbmd0aCA9IHJlczsKLQkJcmV0dXJuIDA7Ci0JfQotCWRhdGEtPmxlbmd0aCA9IDA7Ci0JcmV0dXJuIHJlczsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQlpbnQgaTsKLQl1MzIgdGFyZ2V0X3JhdGUgPSByYXRlLT52YWx1ZSAvIDEwMDAwMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoIXNkYXRhLT5ic3MpCi0JCXJldHVybiAtRU5PREVWOwotCW1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOwotCS8qIHRhcmdldF9yYXRlID0gLTEsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhdXRvIG9ubHksIHNvIHVzZSBhbGwgcmF0ZXMKLQkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMSBtZWFucyBvbmx5IHJhdGUgWAotCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyA8PSBYICovCi0Jc2RhdGEtPmJzcy0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKLQlzZGF0YS0+YnNzLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKLQlpZiAocmF0ZS0+dmFsdWUgPCAwKQotCQlyZXR1cm4gMDsKLQlmb3IgKGk9MDsgaSA8IG1vZGUtPm51bV9yYXRlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZXMgPSAmbW9kZS0+cmF0ZXNbaV07Ci0JCWludCB0aGlzX3JhdGUgPSByYXRlcy0+cmF0ZTsKLQotCQlpZiAodGFyZ2V0X3JhdGUgPT0gdGhpc19yYXRlKSB7Ci0JCQlzZGF0YS0+YnNzLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCA9IGk7Ci0JCQlpZiAocmF0ZS0+Zml4ZWQpCi0JCQkJc2RhdGEtPmJzcy0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gaTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51LnN0YS5ic3NpZCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKCFzdGEpCi0JCXJldHVybiAtRU5PREVWOwotCWlmIChzdGEtPnR4cmF0ZSA8IGxvY2FsLT5vcGVyX2h3X21vZGUtPm51bV9yYXRlcykKLQkJcmF0ZS0+dmFsdWUgPSBsb2NhbC0+b3Blcl9od19tb2RlLT5yYXRlc1tzdGEtPnR4cmF0ZV0ucmF0ZSAqIDEwMDAwMDsKLQllbHNlCi0JCXJhdGUtPnZhbHVlID0gMDsKLQlzdGFfaW5mb19wdXQoc3RhKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3dHhwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlib29sIG5lZWRfcmVjb25maWcgPSAwOwotCXU4IG5ld19wb3dlcl9sZXZlbDsKLQotCWlmICgoZGF0YS0+dHhwb3dlci5mbGFncyAmIElXX1RYUE9XX1RZUEUpICE9IElXX1RYUE9XX0RCTSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGRhdGEtPnR4cG93ZXIuZmxhZ3MgJiBJV19UWFBPV19SQU5HRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGF0YS0+dHhwb3dlci5maXhlZCkgewotCQluZXdfcG93ZXJfbGV2ZWwgPSBkYXRhLT50eHBvd2VyLnZhbHVlOwotCX0gZWxzZSB7Ci0JCS8qIEF1dG9tYXRpYyBwb3dlciBsZXZlbC4gR2V0IHRoZSBweCBwb3dlciBmcm9tIHRoZSBjdXJyZW50Ci0JCSAqIGNoYW5uZWwuICovCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCogY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7Ci0JCWlmICghY2hhbikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW5ld19wb3dlcl9sZXZlbCA9IGNoYW4tPnBvd2VyX2xldmVsOwotCX0KLQotCWlmIChsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCAhPSBuZXdfcG93ZXJfbGV2ZWwpIHsKLQkJbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgPSBuZXdfcG93ZXJfbGV2ZWw7Ci0JCW5lZWRfcmVjb25maWcgPSAxOwotCX0KLQotCWlmIChsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkICE9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCkpIHsKLQkJbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCA9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCk7Ci0JCW5lZWRfcmVjb25maWcgPSAxOwotCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkKTsKLQl9Ci0KLQlpZiAobmVlZF9yZWNvbmZpZykgewotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsKTsKLQkJLyogVGhlIHJldHVybiB2YWx1ZSBvZiBod19jb25maWcgaXMgbm90IG9mIGJpZyBpbnRlcmVzdCBoZXJlLAotCQkgKiBhcyBpdCBkb2Vzbid0IHNheSB0aGF0IGl0IGZhaWxlZCBiZWNhdXNlIG9mIF90aGlzXyBjb25maWcKLQkJICogY2hhbmdlIG9yIHNvbWV0aGluZyBlbHNlLiBJZ25vcmUgaXQuICovCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3R4cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlkYXRhLT50eHBvd2VyLmZpeGVkID0gMTsKLQlkYXRhLT50eHBvd2VyLmRpc2FibGVkID0gIShsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkKTsKLQlkYXRhLT50eHBvd2VyLnZhbHVlID0gbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWw7Ci0JZGF0YS0+dHhwb3dlci5mbGFncyA9IElXX1RYUE9XX0RCTTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQotCWlmIChydHMtPmRpc2FibGVkKQotCQlsb2NhbC0+cnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDsKLQllbHNlIGlmIChydHMtPnZhbHVlIDwgMCB8fCBydHMtPnZhbHVlID4gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlCi0JCWxvY2FsLT5ydHNfdGhyZXNob2xkID0gcnRzLT52YWx1ZTsKLQotCS8qIElmIHRoZSB3bGFuIGNhcmQgcGVyZm9ybXMgUlRTL0NUUyBpbiBoYXJkd2FyZS9maXJtd2FyZSwKLQkgKiBjb25maWd1cmUgaXQgaGVyZSAqLwotCi0JaWYgKGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKQotCQlsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZChsb2NhbF90b19odyhsb2NhbCksCi0JCQkJCSAgICAgbG9jYWwtPnJ0c190aHJlc2hvbGQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCi0JcnRzLT52YWx1ZSA9IGxvY2FsLT5ydHNfdGhyZXNob2xkOwotCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA+PSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQpOwotCXJ0cy0+Zml4ZWQgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCi0JaWYgKGZyYWctPmRpc2FibGVkKQotCQlsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEOwotCWVsc2UgaWYgKGZyYWctPnZhbHVlIDwgMjU2IHx8Ci0JCSBmcmFnLT52YWx1ZSA+IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgewotCQkvKiBGcmFnbWVudCBsZW5ndGggbXVzdCBiZSBldmVuLCBzbyBzdHJpcCBMU0IuICovCi0JCWxvY2FsLT5mcmFnbWVudGF0aW9uX3RocmVzaG9sZCA9IGZyYWctPnZhbHVlICYgfjB4MTsKLQl9Ci0KLQkvKiBJZiB0aGUgd2xhbiBjYXJkIHBlcmZvcm1zIGZyYWdtZW50YXRpb24gaW4gaGFyZHdhcmUvZmlybXdhcmUsCi0JICogY29uZmlndXJlIGl0IGhlcmUgKi8KLQotCWlmIChsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQpCi0JCWxvY2FsLT5vcHMtPnNldF9mcmFnX3RocmVzaG9sZCgKLQkJCWxvY2FsX3RvX2h3KGxvY2FsKSwKLQkJCWxvY2FsLT5mcmFnbWVudGF0aW9uX3RocmVzaG9sZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCi0JZnJhZy0+dmFsdWUgPSBsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQ7Ci0JZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPj0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEKTsKLQlmcmFnLT5maXhlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdyZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJldHJ5LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCi0JaWYgKHJldHJ5LT5kaXNhYmxlZCB8fAotCSAgICAocmV0cnktPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgIT0gSVdfUkVUUllfTElNSVQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHJldHJ5LT5mbGFncyAmIElXX1JFVFJZX01BWCkKLQkJbG9jYWwtPmxvbmdfcmV0cnlfbGltaXQgPSByZXRyeS0+dmFsdWU7Ci0JZWxzZSBpZiAocmV0cnktPmZsYWdzICYgSVdfUkVUUllfTUlOKQotCQlsb2NhbC0+c2hvcnRfcmV0cnlfbGltaXQgPSByZXRyeS0+dmFsdWU7Ci0JZWxzZSB7Ci0JCWxvY2FsLT5sb25nX3JldHJ5X2xpbWl0ID0gcmV0cnktPnZhbHVlOwotCQlsb2NhbC0+c2hvcnRfcmV0cnlfbGltaXQgPSByZXRyeS0+dmFsdWU7Ci0JfQotCi0JaWYgKGxvY2FsLT5vcHMtPnNldF9yZXRyeV9saW1pdCkgewotCQlyZXR1cm4gbG9jYWwtPm9wcy0+c2V0X3JldHJ5X2xpbWl0KAotCQkJbG9jYWxfdG9faHcobG9jYWwpLAotCQkJbG9jYWwtPnNob3J0X3JldHJ5X2xpbWl0LAotCQkJbG9jYWwtPmxvbmdfcmV0cnlfbGltaXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBpd19wYXJhbSAqcmV0cnksIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlyZXRyeS0+ZGlzYWJsZWQgPSAwOwotCWlmIChyZXRyeS0+ZmxhZ3MgPT0gMCB8fCByZXRyeS0+ZmxhZ3MgJiBJV19SRVRSWV9NSU4pIHsKLQkJLyogZmlyc3QgcmV0dXJuIG1pbiB2YWx1ZSwgaXdjb25maWcgd2lsbCBhc2sgbWF4IHZhbHVlCi0JCSAqIGxhdGVyIGlmIG5lZWRlZCAqLwotCQlyZXRyeS0+ZmxhZ3MgfD0gSVdfUkVUUllfTElNSVQ7Ci0JCXJldHJ5LT52YWx1ZSA9IGxvY2FsLT5zaG9ydF9yZXRyeV9saW1pdDsKLQkJaWYgKGxvY2FsLT5sb25nX3JldHJ5X2xpbWl0ICE9IGxvY2FsLT5zaG9ydF9yZXRyeV9saW1pdCkKLQkJCXJldHJ5LT5mbGFncyB8PSBJV19SRVRSWV9NSU47Ci0JCXJldHVybiAwOwotCX0KLQlpZiAocmV0cnktPmZsYWdzICYgSVdfUkVUUllfTUFYKSB7Ci0JCXJldHJ5LT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTUFYOwotCQlyZXRyeS0+dmFsdWUgPSBsb2NhbC0+bG9uZ19yZXRyeV9saW1pdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKSBleHRyYTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKG1sbWUtPmNtZCkgewotCWNhc2UgSVdfTUxNRV9ERUFVVEg6Ci0JCS8qIFRPRE86IG1sbWUtPmFkZHIuc2FfZGF0YSAqLwotCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShkZXYsIG1sbWUtPnJlYXNvbl9jb2RlKTsKLQljYXNlIElXX01MTUVfRElTQVNTT0M6Ci0JCS8qIFRPRE86IG1sbWUtPmFkZHIuc2FfZGF0YSAqLwotCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoZGV2LCBtbG1lLT5yZWFzb25fY29kZSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5YnVmKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCWludCBpZHgsIGksIGFsZyA9IEFMR19XRVA7Ci0JdTggYmNhZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCWludCByZW1vdmUgPSAwOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4ID09IDApIHsKLQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKLQkJCWZvciAoaSA9IDA7IGkgPCBOVU1fREVGQVVMVF9LRVlTOyBpKyspIHsKLQkJCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKSB7Ci0JCQkJCWlkeCA9IGk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQl9IGVsc2UgaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZQotCQlpZHgtLTsKLQotCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQotCQlyZW1vdmUgPSAxOwotCWVsc2UgaWYgKGVycS0+bGVuZ3RoID09IDApIHsKLQkJLyogTm8ga2V5IGRhdGEgLSBqdXN0IHNldCB0aGUgZGVmYXVsdCBUWCBrZXkgaW5kZXggKi8KLQkJaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgaWR4KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbigKLQkJZGV2LCBiY2FkZHIsCi0JCWlkeCwgYWxnLCByZW1vdmUsCi0JCSFzZGF0YS0+ZGVmYXVsdF9rZXksCi0JCWtleWJ1ZiwgZXJxLT5sZW5ndGgpOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JaW50IGlkeCwgaTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlkeCA9IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgewotCQlpZHggPSAtMTsKLQkJaWYgKCFzZGF0YS0+ZGVmYXVsdF9rZXkpCi0JCQlpZHggPSAwOwotCQllbHNlIGZvciAoaSA9IDA7IGkgPCBOVU1fREVGQVVMVF9LRVlTOyBpKyspIHsKLQkJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkgPT0gc2RhdGEtPmtleXNbaV0pIHsKLQkJCQlpZHggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChpZHggPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JCWlkeC0tOwotCi0JZXJxLT5mbGFncyA9IGlkeCArIDE7Ci0KLQlpZiAoIXNkYXRhLT5rZXlzW2lkeF0pIHsKLQkJZXJxLT5sZW5ndGggPSAwOwotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWVtY3B5KGtleSwgc2RhdGEtPmtleXNbaWR4XS0+Y29uZi5rZXksCi0JICAgICAgIG1pbl90KGludCwgZXJxLT5sZW5ndGgsIHNkYXRhLT5rZXlzW2lkeF0tPmNvbmYua2V5bGVuKSk7Ci0JZXJxLT5sZW5ndGggPSBzZGF0YS0+a2V5c1tpZHhdLT5jb25mLmtleWxlbjsKLQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLQljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6Ci0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQlicmVhazsKLQljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLQkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAhIWRhdGEtPnZhbHVlOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKLQkJCS8qCi0JCQkgKiBQcml2YWN5IGludm9rZWQgYnkgd3BhX3N1cHBsaWNhbnQsIHN0b3JlIHRoZQotCQkJICogdmFsdWUgYW5kIGFsbG93IGFzc29jaWF0aW5nIHRvIGEgcHJvdGVjdGVkCi0JCQkgKiBuZXR3b3JrIHdpdGhvdXQgaGF2aW5nIGEga2V5IHVwIGZyb250LgotCQkJICovCi0JCQlpZiAoZGF0YS0+dmFsdWUpCi0JCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9Ci0JCQkJCUlFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQotCQkJc2RhdGEtPnUuc3RhLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOwotCQllbHNlCi0JCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBHZXQgd2lyZWxlc3Mgc3RhdGlzdGljcy4gIENhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgYW5kIGJ5IFNJT0NHSVdTVEFUUyAqLwotc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICppZWVlODAyMTFfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJmxvY2FsLT53c3RhdHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51LnN0YS5ic3NpZCk7Ci0JaWYgKCFzdGEpIHsKLQkJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ID0gMDsKLQkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgPSAwOwotCQl3c3RhdHMtPnF1YWwucXVhbCA9IDA7Ci0JCXdzdGF0cy0+cXVhbC5sZXZlbCA9IDA7Ci0JCXdzdGF0cy0+cXVhbC5ub2lzZSA9IDA7Ci0JCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfSU5WQUxJRDsKLQl9IGVsc2UgewotCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3RfcnNzaTsKLQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzdGEtPmxhc3Rfc2lnbmFsOwotCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBzdGEtPmxhc3Rfbm9pc2U7Ci0JCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQkJc3RhX2luZm9fcHV0KHN0YSk7Ci0JfQotCXJldHVybiB3c3RhdHM7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykKLQkJCWRhdGEtPnZhbHVlID0gc2RhdGEtPnUuc3RhLmF1dGhfYWxnczsKLQkJZWxzZQotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdlbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopIGV4dHJhOwotCWludCB1bmluaXRpYWxpemVkX3ZhcihhbGcpLCBpZHgsIGksIHJlbW92ZSA9IDA7Ci0KLQlzd2l0Y2ggKGV4dC0+YWxnKSB7Ci0JY2FzZSBJV19FTkNPREVfQUxHX05PTkU6Ci0JCXJlbW92ZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6Ci0JCWFsZyA9IEFMR19XRVA7Ci0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQlhbGcgPSBBTEdfVEtJUDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6Ci0JCWFsZyA9IEFMR19DQ01QOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JCXJlbW92ZSA9IDE7Ci0KLQlpZHggPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCWlmIChpZHggPCAxIHx8IGlkeCA+IDQpIHsKLQkJaWR4ID0gLTE7Ci0JCWlmICghc2RhdGEtPmRlZmF1bHRfa2V5KQotCQkJaWR4ID0gMDsKLQkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7Ci0JCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKSB7Ci0JCQkJaWR4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlpZHgtLTsKLQotCXJldHVybiBpZWVlODAyMTFfc2V0X2VuY3J5cHRpb24oZGV2LCBleHQtPmFkZHIuc2FfZGF0YSwgaWR4LCBhbGcsCi0JCQkJCXJlbW92ZSwKLQkJCQkJZXh0LT5leHRfZmxhZ3MgJgotCQkJCQlJV19FTkNPREVfRVhUX1NFVF9UWF9LRVksCi0JCQkJCWV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwotfQotCi0KLS8qIFN0cnVjdHVyZXMgdG8gZXhwb3J0IHRoZSBXaXJlbGVzcyBIYW5kbGVycyAqLwotCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBpZWVlODAyMTFfaGFuZGxlcltdID0KLXsKLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV0NPTU1JVCAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdmcmVxLAkJLyogU0lPQ1NJV0ZSRVEgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2ZyZXEsCQkvKiBTSU9DR0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3bW9kZSwJCS8qIFNJT0NTSVdNT0RFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdtb2RlLAkJLyogU0lPQ0dJV01PREUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdSQU5HRSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NQWSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdUSFJTUFkgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1RIUlNQWSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3YXAsCQkvKiBTSU9DU0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2FwLAkJLyogU0lPQ0dJV0FQICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdtbG1lLAkJLyogU0lPQ1NJV01MTUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV0FQTElTVCAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2Vzc2lkLAkJLyogU0lPQ1NJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdlc3NpZCwJCS8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTklDS04gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZSwJCS8qIFNJT0NTSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdyYXRlLAkJLyogU0lPQ0dJV1JBVEUgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd3J0cywJCS8qIFNJT0NTSVdSVFMgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3J0cywJCS8qIFNJT0NHSVdSVFMgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2ZyYWcsCQkvKiBTSU9DU0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3ZnJhZywJCS8qIFNJT0NHSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXd0eHBvd2VyLAkvKiBTSU9DU0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3R4cG93ZXIsCS8qIFNJT0NHSVdUWFBPVyAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3cmV0cnksCQkvKiBTSU9DU0lXUkVUUlkgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3JldHJ5LAkJLyogU0lPQ0dJV1JFVFJZICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdlbmNvZGUsCQkvKiBTSU9DU0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdlbmNvZGUsCQkvKiBTSU9DR0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXUE9XRVIgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdnZW5pZSwJCS8qIFNJT0NTSVdHRU5JRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXR0VOSUUgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2F1dGgsCQkvKiBTSU9DU0lXQVVUSCAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3YXV0aCwJCS8qIFNJT0NHSVdBVVRIICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdlbmNvZGVleHQsCS8qIFNJT0NTSVdFTkNPREVFWFQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXUE1LU0EgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotfTsKLQotY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGllZWU4MDIxMV9pd19oYW5kbGVyX2RlZiA9Ci17Ci0JLm51bV9zdGFuZGFyZAk9IEFSUkFZX1NJWkUoaWVlZTgwMjExX2hhbmRsZXIpLAotCS5zdGFuZGFyZAk9IChpd19oYW5kbGVyICopIGllZWU4MDIxMV9oYW5kbGVyLAotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBpZWVlODAyMTFfZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfa2V5LmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2tleS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzc3MGU5Li4wMDAwMDAwCi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfa2V5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KLSAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBJRUVFODAyMTFfS0VZX0gKLSNkZWZpbmUgSUVFRTgwMjExX0tFWV9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotLyogQUxHX1RLSVAKLSAqIHN0cnVjdCBpZWVlODAyMTFfa2V5OjprZXkgaXMgZW5jb2RlZCBhcyBhIDI1Ni1iaXQgKDMyIGJ5dGUpIGRhdGEgYmxvY2s6Ci0gKiBUZW1wb3JhbCBFbmNyeXB0aW9uIEtleSAoMTI4IGJpdHMpCi0gKiBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFR4IE1JQyBLZXkgKDY0IGJpdHMpCi0gKiBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFJ4IE1JQyBLZXkgKDY0IGJpdHMpCi0gKi8KLQotI2RlZmluZSBXRVBfSVZfTEVOIDQKLSNkZWZpbmUgV0VQX0lDVl9MRU4gNAotCi0jZGVmaW5lIEFMR19US0lQX0tFWV9MRU4gMzIKLS8qIFN0YXJ0aW5nIG9mZnNldHMgZm9yIGVhY2gga2V5ICovCi0jZGVmaW5lIEFMR19US0lQX1RFTVBfRU5DUl9LRVkgMAotI2RlZmluZSBBTEdfVEtJUF9URU1QX0FVVEhfVFhfTUlDX0tFWSAxNgotI2RlZmluZSBBTEdfVEtJUF9URU1QX0FVVEhfUlhfTUlDX0tFWSAyNAotI2RlZmluZSBUS0lQX0lWX0xFTiA4Ci0jZGVmaW5lIFRLSVBfSUNWX0xFTiA0Ci0KLSNkZWZpbmUgQUxHX0NDTVBfS0VZX0xFTiAxNgotI2RlZmluZSBDQ01QX0hEUl9MRU4gOAotI2RlZmluZSBDQ01QX01JQ19MRU4gOAotI2RlZmluZSBDQ01QX1RLX0xFTiAxNgotI2RlZmluZSBDQ01QX1BOX0xFTiA2Ci0KLSNkZWZpbmUgTlVNX1JYX0RBVEFfUVVFVUVTIDE3Ci0KLXN0cnVjdCBpZWVlODAyMTFfbG9jYWw7Ci1zdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhOwotc3RydWN0IHN0YV9pbmZvOwotCi0jZGVmaW5lIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFCSgxPDwwKQotCi1zdHJ1Y3QgaWVlZTgwMjExX2tleSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQkvKiBsYXN0IHVzZWQgVFNDICovCi0JCQl1MzIgaXYzMjsKLQkJCXUxNiBpdjE2OwotCQkJdTE2IHAxa1s1XTsKLQkJCWludCB0eF9pbml0aWFsaXplZDsKLQotCQkJLyogbGFzdCByZWNlaXZlZCBSU0MgKi8KLQkJCXUzMiBpdjMyX3J4W05VTV9SWF9EQVRBX1FVRVVFU107Ci0JCQl1MTYgaXYxNl9yeFtOVU1fUlhfREFUQV9RVUVVRVNdOwotCQkJdTE2IHAxa19yeFtOVU1fUlhfREFUQV9RVUVVRVNdWzVdOwotCQkJaW50IHJ4X2luaXRpYWxpemVkW05VTV9SWF9EQVRBX1FVRVVFU107Ci0JCX0gdGtpcDsKLQkJc3RydWN0IHsKLQkJCXU4IHR4X3BuWzZdOwotCQkJdTggcnhfcG5bTlVNX1JYX0RBVEFfUVVFVUVTXVs2XTsKLQkJCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm07Ci0JCQl1MzIgcmVwbGF5czsgLyogZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cyAqLwotCQkJLyogc2NyYXRjaCBidWZmZXJzIGZvciB2aXJ0X3RvX3BhZ2UoKSAoY3J5cHRvIEFQSSkgKi8KLSNpZm5kZWYgQUVTX0JMT0NLX0xFTgotI2RlZmluZSBBRVNfQkxPQ0tfTEVOIDE2Ci0jZW5kaWYKLQkJCXU4IHR4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOwotCQkJdTggcnhfY3J5cHRvX2J1Zls2ICogQUVTX0JMT0NLX0xFTl07Ci0JCX0gY2NtcDsKLQl9IHU7Ci0KLQkvKiBudW1iZXIgb2YgdGltZXMgdGhpcyBrZXkgaGFzIGJlZW4gdXNlZCAqLwotCWludCB0eF9yeF9jb3VudDsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi0Jc3RydWN0IHsKLQkJc3RydWN0IGRlbnRyeSAqc3RhbGluazsKLQkJc3RydWN0IGRlbnRyeSAqZGlyOwotCQlzdHJ1Y3QgZGVudHJ5ICprZXlsZW47Ci0JCXN0cnVjdCBkZW50cnkgKmZsYWdzOwotCQlzdHJ1Y3QgZGVudHJ5ICprZXlpZHg7Ci0JCXN0cnVjdCBkZW50cnkgKmh3X2tleV9pZHg7Ci0JCXN0cnVjdCBkZW50cnkgKnR4X3J4X2NvdW50OwotCQlzdHJ1Y3QgZGVudHJ5ICphbGdvcml0aG07Ci0JCXN0cnVjdCBkZW50cnkgKnR4X3NwZWM7Ci0JCXN0cnVjdCBkZW50cnkgKnJ4X3NwZWM7Ci0JCXN0cnVjdCBkZW50cnkgKnJlcGxheXM7Ci0JCXN0cnVjdCBkZW50cnkgKmtleTsKLQkJc3RydWN0IGRlbnRyeSAqaWZpbmRleDsKLQl9IGRlYnVnZnM7Ci0jZW5kaWYKLQotCS8qCi0JICoga2V5IGNvbmZpZywgbXVzdCBiZSBsYXN0IGJlY2F1c2UgaXQgY29udGFpbnMga2V5Ci0JICogbWF0ZXJpYWwgYXMgdmFyaWFibGUgbGVuZ3RoIG1lbWJlcgotCSAqLwotCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgY29uZjsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfa2V5ICppZWVlODAyMTFfa2V5X2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCQkgIGVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnLAotCQkJCQkgIGludCBpZHgsCi0JCQkJCSAgc2l6ZV90IGtleV9sZW4sCi0JCQkJCSAgY29uc3QgdTggKmtleV9kYXRhKTsKLXZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwotdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4KTsKLXZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci12b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci12b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotCi0jZW5kaWYgLyogSUVFRTgwMjExX0tFWV9IICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2xlZC5jIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9sZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQwMTQ4NC4uMDAwMDAwMAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2xlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNiwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLS8qIGp1c3QgZm9yIElGTkFNU0laICovCi0jaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlICJpZWVlODAyMTFfbGVkLmgiCi0KLXZvaWQgaWVlZTgwMjExX2xlZF9yeChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlpZiAodW5saWtlbHkoIWxvY2FsLT5yeF9sZWQpKQotCQlyZXR1cm47Ci0JaWYgKGxvY2FsLT5yeF9sZWRfY291bnRlcisrICUgMiA9PSAwKQotCQlsZWRfdHJpZ2dlcl9ldmVudChsb2NhbC0+cnhfbGVkLCBMRURfT0ZGKTsKLQllbHNlCi0JCWxlZF90cmlnZ2VyX2V2ZW50KGxvY2FsLT5yeF9sZWQsIExFRF9GVUxMKTsKLX0KLQotLyogcSBpcyAxIGlmIGEgcGFja2V0IHdhcyBlbnF1ZXVlZCwgMCBpZiBpdCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwotdm9pZCBpZWVlODAyMTFfbGVkX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcSkKLXsKLQlpZiAodW5saWtlbHkoIWxvY2FsLT50eF9sZWQpKQotCQlyZXR1cm47Ci0JLyogbm90IHN1cmUgaG93IHRoaXMgaXMgc3VwcG9zZWQgdG8gd29yayAuLi4gKi8KLQlsb2NhbC0+dHhfbGVkX2NvdW50ZXIgKz0gMipxLTE7Ci0JaWYgKGxvY2FsLT50eF9sZWRfY291bnRlciAlIDIgPT0gMCkKLQkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPnR4X2xlZCwgTEVEX09GRik7Ci0JZWxzZQotCQlsZWRfdHJpZ2dlcl9ldmVudChsb2NhbC0+dHhfbGVkLCBMRURfRlVMTCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX2xlZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgYm9vbCBhc3NvY2lhdGVkKQotewotCWlmICh1bmxpa2VseSghbG9jYWwtPmFzc29jX2xlZCkpCi0JCXJldHVybjsKLQlpZiAoYXNzb2NpYXRlZCkKLQkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPmFzc29jX2xlZCwgTEVEX0ZVTEwpOwotCWVsc2UKLQkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPmFzc29jX2xlZCwgTEVEX09GRik7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX2xlZF9yYWRpbyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgYm9vbCBlbmFibGVkKQotewotCWlmICh1bmxpa2VseSghbG9jYWwtPnJhZGlvX2xlZCkpCi0JCXJldHVybjsKLQlpZiAoZW5hYmxlZCkKLQkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPnJhZGlvX2xlZCwgTEVEX0ZVTEwpOwotCWVsc2UKLQkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPnJhZGlvX2xlZCwgTEVEX09GRik7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX2xlZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCWxvY2FsLT5yeF9sZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAobG9jYWwtPnJ4X2xlZCkgewotCQlzbnByaW50Zihsb2NhbC0+cnhfbGVkX25hbWUsIHNpemVvZihsb2NhbC0+cnhfbGVkX25hbWUpLAotCQkJICIlc3J4Iiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKLQkJbG9jYWwtPnJ4X2xlZC0+bmFtZSA9IGxvY2FsLT5yeF9sZWRfbmFtZTsKLQkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGxvY2FsLT5yeF9sZWQpKSB7Ci0JCQlrZnJlZShsb2NhbC0+cnhfbGVkKTsKLQkJCWxvY2FsLT5yeF9sZWQgPSBOVUxMOwotCQl9Ci0JfQotCi0JbG9jYWwtPnR4X2xlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWRfdHJpZ2dlciksIEdGUF9LRVJORUwpOwotCWlmIChsb2NhbC0+dHhfbGVkKSB7Ci0JCXNucHJpbnRmKGxvY2FsLT50eF9sZWRfbmFtZSwgc2l6ZW9mKGxvY2FsLT50eF9sZWRfbmFtZSksCi0JCQkgIiVzdHgiLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOwotCQlsb2NhbC0+dHhfbGVkLT5uYW1lID0gbG9jYWwtPnR4X2xlZF9uYW1lOwotCQlpZiAobGVkX3RyaWdnZXJfcmVnaXN0ZXIobG9jYWwtPnR4X2xlZCkpIHsKLQkJCWtmcmVlKGxvY2FsLT50eF9sZWQpOwotCQkJbG9jYWwtPnR4X2xlZCA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlsb2NhbC0+YXNzb2NfbGVkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxlZF90cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGxvY2FsLT5hc3NvY19sZWQpIHsKLQkJc25wcmludGYobG9jYWwtPmFzc29jX2xlZF9uYW1lLCBzaXplb2YobG9jYWwtPmFzc29jX2xlZF9uYW1lKSwKLQkJCSAiJXNhc3NvYyIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Ci0JCWxvY2FsLT5hc3NvY19sZWQtPm5hbWUgPSBsb2NhbC0+YXNzb2NfbGVkX25hbWU7Ci0JCWlmIChsZWRfdHJpZ2dlcl9yZWdpc3Rlcihsb2NhbC0+YXNzb2NfbGVkKSkgewotCQkJa2ZyZWUobG9jYWwtPmFzc29jX2xlZCk7Ci0JCQlsb2NhbC0+YXNzb2NfbGVkID0gTlVMTDsKLQkJfQotCX0KLQotCWxvY2FsLT5yYWRpb19sZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAobG9jYWwtPnJhZGlvX2xlZCkgewotCQlzbnByaW50Zihsb2NhbC0+cmFkaW9fbGVkX25hbWUsIHNpemVvZihsb2NhbC0+cmFkaW9fbGVkX25hbWUpLAotCQkJICIlc3JhZGlvIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKLQkJbG9jYWwtPnJhZGlvX2xlZC0+bmFtZSA9IGxvY2FsLT5yYWRpb19sZWRfbmFtZTsKLQkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGxvY2FsLT5yYWRpb19sZWQpKSB7Ci0JCQlrZnJlZShsb2NhbC0+cmFkaW9fbGVkKTsKLQkJCWxvY2FsLT5yYWRpb19sZWQgPSBOVUxMOwotCQl9Ci0JfQotfQotCi12b2lkIGllZWU4MDIxMV9sZWRfZXhpdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlpZiAobG9jYWwtPnJhZGlvX2xlZCkgewotCQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKGxvY2FsLT5yYWRpb19sZWQpOwotCQlrZnJlZShsb2NhbC0+cmFkaW9fbGVkKTsKLQl9Ci0JaWYgKGxvY2FsLT5hc3NvY19sZWQpIHsKLQkJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcihsb2NhbC0+YXNzb2NfbGVkKTsKLQkJa2ZyZWUobG9jYWwtPmFzc29jX2xlZCk7Ci0JfQotCWlmIChsb2NhbC0+dHhfbGVkKSB7Ci0JCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIobG9jYWwtPnR4X2xlZCk7Ci0JCWtmcmVlKGxvY2FsLT50eF9sZWQpOwotCX0KLQlpZiAobG9jYWwtPnJ4X2xlZCkgewotCQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKGxvY2FsLT5yeF9sZWQpOwotCQlrZnJlZShsb2NhbC0+cnhfbGVkKTsKLQl9Ci19Ci0KLWNoYXIgKl9faWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQotCWlmIChsb2NhbC0+cmFkaW9fbGVkKQotCQlyZXR1cm4gbG9jYWwtPnJhZGlvX2xlZF9uYW1lOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChfX2llZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUpOwotCi1jaGFyICpfX2llZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0KLQlpZiAobG9jYWwtPmFzc29jX2xlZCkKLQkJcmV0dXJuIGxvY2FsLT5hc3NvY19sZWRfbmFtZTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKTsKLQotY2hhciAqX19pZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCi0JaWYgKGxvY2FsLT50eF9sZWQpCi0JCXJldHVybiBsb2NhbC0+dHhfbGVkX25hbWU7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKF9faWVlZTgwMjExX2dldF90eF9sZWRfbmFtZSk7Ci0KLWNoYXIgKl9faWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQotCWlmIChsb2NhbC0+cnhfbGVkKQotCQlyZXR1cm4gbG9jYWwtPnJ4X2xlZF9uYW1lOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChfX2llZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9yYXRlLmMgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3JhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk1N2U2Ny4uMDAwMDAwMAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3JhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgotICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExX3JhdGUuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgotCi1zdHJ1Y3QgcmF0ZV9jb250cm9sX2FsZyB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHM7Ci19OwotCi1zdGF0aWMgTElTVF9IRUFEKHJhdGVfY3RybF9hbGdzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgocmF0ZV9jdHJsX211dGV4KTsKLQotc3RhdGljIGNoYXIgKmllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28gPSBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVDsKLW1vZHVsZV9wYXJhbShpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvLCBjaGFycCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28sCi0JCSAiRGVmYXVsdCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGZvciBtYWM4MDIxMSB0byB1c2UiKTsKLQotaW50IGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcykKLXsKLQlzdHJ1Y3QgcmF0ZV9jb250cm9sX2FsZyAqYWxnOwotCi0JaWYgKCFvcHMtPm5hbWUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmcmF0ZV9jdHJsX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsZywgJnJhdGVfY3RybF9hbGdzLCBsaXN0KSB7Ci0JCWlmICghc3RyY21wKGFsZy0+b3BzLT5uYW1lLCBvcHMtPm5hbWUpKSB7Ci0JCQkvKiBkb24ndCByZWdpc3RlciBhbiBhbGdvcml0aG0gdHdpY2UgKi8KLQkJCVdBUk5fT04oMSk7Ci0JCQltdXRleF91bmxvY2soJnJhdGVfY3RybF9tdXRleCk7Ci0JCQlyZXR1cm4gLUVBTFJFQURZOwotCQl9Ci0JfQotCi0JYWxnID0ga3phbGxvYyhzaXplb2YoKmFsZyksIEdGUF9LRVJORUwpOwotCWlmIChhbGcgPT0gTlVMTCkgewotCQltdXRleF91bmxvY2soJnJhdGVfY3RybF9tdXRleCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlhbGctPm9wcyA9IG9wczsKLQotCWxpc3RfYWRkX3RhaWwoJmFsZy0+bGlzdCwgJnJhdGVfY3RybF9hbGdzKTsKLQltdXRleF91bmxvY2soJnJhdGVfY3RybF9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3Rlcik7Ci0KLXZvaWQgaWVlZTgwMjExX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpCi17Ci0Jc3RydWN0IHJhdGVfY29udHJvbF9hbGcgKmFsZzsKLQotCW11dGV4X2xvY2soJnJhdGVfY3RybF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShhbGcsICZyYXRlX2N0cmxfYWxncywgbGlzdCkgewotCQlpZiAoYWxnLT5vcHMgPT0gb3BzKSB7Ci0JCQlsaXN0X2RlbCgmYWxnLT5saXN0KTsKLQkJCWtmcmVlKGFsZyk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJnJhdGVfY3RybF9tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfdW5yZWdpc3Rlcik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqCi1pZWVlODAyMTFfdHJ5X3JhdGVfY29udHJvbF9vcHNfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHJhdGVfY29udHJvbF9hbGcgKmFsZzsKLQlzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzID0gTlVMTDsKLQotCWlmICghbmFtZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltdXRleF9sb2NrKCZyYXRlX2N0cmxfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxnLCAmcmF0ZV9jdHJsX2FsZ3MsIGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAoYWxnLT5vcHMtPm5hbWUsIG5hbWUpKQotCQkJaWYgKHRyeV9tb2R1bGVfZ2V0KGFsZy0+b3BzLT5tb2R1bGUpKSB7Ci0JCQkJb3BzID0gYWxnLT5vcHM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcmF0ZV9jdHJsX211dGV4KTsKLQlyZXR1cm4gb3BzOwotfQotCi0vKiBHZXQgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0uICovCi1zdGF0aWMgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKgotaWVlZTgwMjExX3JhdGVfY29udHJvbF9vcHNfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wczsKLQljb25zdCBjaGFyICphbGdfbmFtZTsKLQotCWlmICghbmFtZSkKLQkJYWxnX25hbWUgPSBpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvOwotCWVsc2UKLQkJYWxnX25hbWUgPSBuYW1lOwotCi0Jb3BzID0gaWVlZTgwMjExX3RyeV9yYXRlX2NvbnRyb2xfb3BzX2dldChhbGdfbmFtZSk7Ci0JaWYgKCFvcHMpIHsKLQkJcmVxdWVzdF9tb2R1bGUoInJjODAyMTFfJXMiLCBhbGdfbmFtZSk7Ci0JCW9wcyA9IGllZWU4MDIxMV90cnlfcmF0ZV9jb250cm9sX29wc19nZXQoYWxnX25hbWUpOwotCX0KLQlpZiAoIW9wcyAmJiBuYW1lKQotCQkvKiB0cnkgZGVmYXVsdCBpZiBzcGVjaWZpYyBhbGcgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmQgKi8KLQkJb3BzID0gaWVlZTgwMjExX3RyeV9yYXRlX2NvbnRyb2xfb3BzX2dldChpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvKTsKLQotCS8qIHRyeSBidWlsdC1pbiBvbmUgaWYgc3BlY2lmaWMgYWxnIHJlcXVlc3RlZCBidXQgbm90IGZvdW5kICovCi0JaWYgKCFvcHMgJiYgc3RybGVuKENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUKSkKLQkJb3BzID0gaWVlZTgwMjExX3RyeV9yYXRlX2NvbnRyb2xfb3BzX2dldChDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCk7Ci0KLQlyZXR1cm4gb3BzOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX29wc19wdXQoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcykKLXsKLQltb2R1bGVfcHV0KG9wcy0+bW9kdWxlKTsKLX0KLQotc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY29udHJvbF9hbGxvYyhjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0Jc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZjsKLQotCXJlZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWYpCi0JCWdvdG8gZmFpbF9yZWY7Ci0Ja3JlZl9pbml0KCZyZWYtPmtyZWYpOwotCXJlZi0+b3BzID0gaWVlZTgwMjExX3JhdGVfY29udHJvbF9vcHNfZ2V0KG5hbWUpOwotCWlmICghcmVmLT5vcHMpCi0JCWdvdG8gZmFpbF9vcHM7Ci0JcmVmLT5wcml2ID0gcmVmLT5vcHMtPmFsbG9jKGxvY2FsKTsKLQlpZiAoIXJlZi0+cHJpdikKLQkJZ290byBmYWlsX3ByaXY7Ci0JcmV0dXJuIHJlZjsKLQotZmFpbF9wcml2OgotCWllZWU4MDIxMV9yYXRlX2NvbnRyb2xfb3BzX3B1dChyZWYtPm9wcyk7Ci1mYWlsX29wczoKLQlrZnJlZShyZWYpOwotZmFpbF9yZWY6Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHJhdGVfY29udHJvbF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpjdHJsX3JlZjsKLQotCWN0cmxfcmVmID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmLCBrcmVmKTsKLQljdHJsX3JlZi0+b3BzLT5mcmVlKGN0cmxfcmVmLT5wcml2KTsKLQlpZWVlODAyMTFfcmF0ZV9jb250cm9sX29wc19wdXQoY3RybF9yZWYtPm9wcyk7Ci0Ja2ZyZWUoY3RybF9yZWYpOwotfQotCi12b2lkIHJhdGVfY29udHJvbF9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IHJhdGVfc2VsZWN0aW9uICpzZWwpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gbG9jYWwtPnJhdGVfY3RybDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JaW50IGk7Ci0KLQltZW1zZXQoc2VsLCAwLCBzaXplb2Yoc3RydWN0IHJhdGVfc2VsZWN0aW9uKSk7Ci0KLQlyZWYtPm9wcy0+Z2V0X3JhdGUocmVmLT5wcml2LCBkZXYsIG1vZGUsIHNrYiwgc2VsKTsKLQotCS8qIFNlbGVjdCBhIG5vbi1FUlAgYmFja3VwIHJhdGUuICovCi0JaWYgKCFzZWwtPm5vbmVycCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbW9kZS0+bnVtX3JhdGVzIC0gMTsgaSsrKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmbW9kZS0+cmF0ZXNbaV07Ci0JCQlpZiAoc2VsLT5yYXRlLT5yYXRlIDwgcmF0ZS0+cmF0ZSkKLQkJCQlicmVhazsKLQotCQkJaWYgKHJhdGVfc3VwcG9ydGVkKHN0YSwgbW9kZSwgaSkgJiYKLQkJCSAgICAhKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQKSkKLQkJCQlzZWwtPm5vbmVycCA9IHJhdGU7Ci0JCX0KLQl9Ci0KLQlpZiAoc3RhKQotCQlzdGFfaW5mb19wdXQoc3RhKTsKLX0KLQotc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY29udHJvbF9nZXQoc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZikKLXsKLQlrcmVmX2dldCgmcmVmLT5rcmVmKTsKLQlyZXR1cm4gcmVmOwotfQotCi12b2lkIHJhdGVfY29udHJvbF9wdXQoc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZikKLXsKLQlrcmVmX3B1dCgmcmVmLT5rcmVmLCByYXRlX2NvbnRyb2xfcmVsZWFzZSk7Ci19Ci0KLWludCBpZWVlODAyMTFfaW5pdF9yYXRlX2N0cmxfYWxnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSBjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYsICpvbGQ7Ci0KLQlBU1NFUlRfUlROTCgpOwotCWlmIChsb2NhbC0+b3Blbl9jb3VudCB8fCBuZXRpZl9ydW5uaW5nKGxvY2FsLT5tZGV2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJlZiA9IHJhdGVfY29udHJvbF9hbGxvYyhuYW1lLCBsb2NhbCk7Ci0JaWYgKCFyZWYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZhaWxlZCB0byBzZWxlY3QgcmF0ZSBjb250cm9sICIKLQkJICAgICAgICJhbGdvcml0aG1cbiIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCW9sZCA9IGxvY2FsLT5yYXRlX2N0cmw7Ci0JbG9jYWwtPnJhdGVfY3RybCA9IHJlZjsKLQlpZiAob2xkKSB7Ci0JCXJhdGVfY29udHJvbF9wdXQob2xkKTsKLQkJc3RhX2luZm9fZmx1c2gobG9jYWwsIE5VTEwpOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VsZWN0ZWQgcmF0ZSBjb250cm9sICIKLQkgICAgICAgImFsZ29yaXRobSAnJXMnXG4iLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksCi0JICAgICAgIHJlZi0+b3BzLT5uYW1lKTsKLQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmOwotCi0JcmVmID0gbG9jYWwtPnJhdGVfY3RybDsKLQlsb2NhbC0+cmF0ZV9jdHJsID0gTlVMTDsKLQlyYXRlX2NvbnRyb2xfcHV0KHJlZik7Ci19Ci0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfcmF0ZS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9yYXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZjE5ZTguLjAwMDAwMDAKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9yYXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KLSAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA2IEppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgSUVFRTgwMjExX1JBVEVfSAotI2RlZmluZSBJRUVFODAyMTFfUkFURV9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCi0jaW5jbHVkZSAic3RhX2luZm8uaCIKLQotc3RydWN0IHJhdGVfc2VsZWN0aW9uIHsKLQkvKiBTZWxlY3RlZCB0cmFuc21pc3Npb24gcmF0ZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQkvKiBOb24tRVJQIHJhdGUgdG8gdXNlIGlmIG1hYzgwMjExIGRlY2lkZXMgaXQgY2Fubm90IHVzZSBhbiBFUlAgcmF0ZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqbm9uZXJwOwotCS8qIHByb2JlIHdpdGggdGhpcyByYXRlLCBvciBOVUxMIGZvciBubyBwcm9iaW5nICovCi0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpwcm9iZTsKLX07Ci0KLXN0cnVjdCByYXRlX2NvbnRyb2xfb3BzIHsKLQlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl2b2lkICgqdHhfc3RhdHVzKSh2b2lkICpwcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKTsKLQl2b2lkICgqZ2V0X3JhdGUpKHZvaWQgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHN0cnVjdCByYXRlX3NlbGVjdGlvbiAqc2VsKTsKLQl2b2lkICgqcmF0ZV9pbml0KSh2b2lkICpwcml2LCB2b2lkICpwcml2X3N0YSwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLQl2b2lkICgqY2xlYXIpKHZvaWQgKnByaXYpOwotCi0Jdm9pZCAqKCphbGxvYykoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwotCXZvaWQgKCpmcmVlKSh2b2lkICpwcml2KTsKLQl2b2lkICooKmFsbG9jX3N0YSkodm9pZCAqcHJpdiwgZ2ZwX3QgZ2ZwKTsKLQl2b2lkICgqZnJlZV9zdGEpKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhKTsKLQotCWludCAoKmFkZF9hdHRycykodm9pZCAqcHJpdiwgc3RydWN0IGtvYmplY3QgKmtvYmopOwotCXZvaWQgKCpyZW1vdmVfYXR0cnMpKHZvaWQgKnByaXYsIHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKLQl2b2lkICgqYWRkX3N0YV9kZWJ1Z2ZzKSh2b2lkICpwcml2LCB2b2lkICpwcml2X3N0YSwKLQkJCQlzdHJ1Y3QgZGVudHJ5ICpkaXIpOwotCXZvaWQgKCpyZW1vdmVfc3RhX2RlYnVnZnMpKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhKTsKLX07Ci0KLXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmIHsKLQlzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzOwotCXZvaWQgKnByaXY7Ci0Jc3RydWN0IGtyZWYga3JlZjsKLX07Ci0KLWludCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwotdm9pZCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcyk7Ci0KLS8qIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobS4gSWYgYG5hbWUnIGlzIE5VTEwsIGdldCB0aGUKLSAqIGZpcnN0IGF2YWlsYWJsZSBhbGdvcml0aG0uICovCi1zdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmF0ZV9jb250cm9sX2FsbG9jKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci12b2lkIHJhdGVfY29udHJvbF9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IHJhdGVfc2VsZWN0aW9uICpzZWwpOwotc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY29udHJvbF9nZXQoc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZik7Ci12b2lkIHJhdGVfY29udHJvbF9wdXQoc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByYXRlX2NvbnRyb2xfdHhfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IGxvY2FsLT5yYXRlX2N0cmw7Ci0KLQlyZWYtPm9wcy0+dHhfc3RhdHVzKHJlZi0+cHJpdiwgZGV2LCBza2IsIHN0YXR1cyk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RydWN0IHN0YV9pbmZvICpzdGEsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0Jc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IHN0YS0+cmF0ZV9jdHJsOwotCXJlZi0+b3BzLT5yYXRlX2luaXQocmVmLT5wcml2LCBzdGEtPnJhdGVfY3RybF9wcml2LCBsb2NhbCwgc3RhKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX2NsZWFyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOwotCXJlZi0+b3BzLT5jbGVhcihyZWYtPnByaXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKnJhdGVfY29udHJvbF9hbGxvY19zdGEoc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiwKLQkJCQkJICAgZ2ZwX3QgZ2ZwKQotewotCXJldHVybiByZWYtPm9wcy0+YWxsb2Nfc3RhKHJlZi0+cHJpdiwgZ2ZwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9mcmVlX3N0YShzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmLAotCQkJCQkgdm9pZCAqcHJpdikKLXsKLQlyZWYtPm9wcy0+ZnJlZV9zdGEocmVmLT5wcml2LCBwcml2KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9hZGRfc3RhX2RlYnVnZnMoc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLQlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gc3RhLT5yYXRlX2N0cmw7Ci0JaWYgKHN0YS0+ZGVidWdmcy5kaXIgJiYgcmVmLT5vcHMtPmFkZF9zdGFfZGVidWdmcykKLQkJcmVmLT5vcHMtPmFkZF9zdGFfZGVidWdmcyhyZWYtPnByaXYsIHN0YS0+cmF0ZV9jdHJsX3ByaXYsCi0JCQkJCSAgc3RhLT5kZWJ1Z2ZzLmRpcik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9yZW1vdmVfc3RhX2RlYnVnZnMoc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLQlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gc3RhLT5yYXRlX2N0cmw7Ci0JaWYgKHJlZi0+b3BzLT5yZW1vdmVfc3RhX2RlYnVnZnMpCi0JCXJlZi0+b3BzLT5yZW1vdmVfc3RhX2RlYnVnZnMocmVmLT5wcml2LCBzdGEtPnJhdGVfY3RybF9wcml2KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIGludAotcmF0ZV9zdXBwb3J0ZWQoc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSwgaW50IGluZGV4KQotewotCXJldHVybiAoc3RhID09IE5VTEwgfHwgc3RhLT5zdXBwX3JhdGVzICYgQklUKGluZGV4KSkgJiYKLQkgICAgICAgKG1vZGUtPnJhdGVzW2luZGV4XS5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1NVUFBPUlRFRCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yYXRlX2xvd2VzdF9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlLAotCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1vZGUtPm51bV9yYXRlczsgaSsrKSB7Ci0JCWlmIChyYXRlX3N1cHBvcnRlZChzdGEsIG1vZGUsIGkpKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JLyogd2FybiB3aGVuIHdlIGNhbm5vdCBmaW5kIGEgcmF0ZS4gKi8KLQlXQVJOX09OKDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9yYXRlICoKLXJhdGVfbG93ZXN0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUsCi0JICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCXJldHVybiAmbW9kZS0+cmF0ZXNbcmF0ZV9sb3dlc3RfaW5kZXgobG9jYWwsIG1vZGUsIHN0YSldOwotfQotCi0KLS8qIGZ1bmN0aW9ucyBmb3IgcmF0ZSBjb250cm9sIHJlbGF0ZWQgdG8gYSBkZXZpY2UgKi8KLWludCBpZWVlODAyMTFfaW5pdF9yYXRlX2N0cmxfYWxnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSBjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci0KLQotLyogUmF0ZSBjb250cm9sIGFsZ29yaXRobXMgKi8KLSNpZiBkZWZpbmVkKFJDODAyMTFfU0lNUExFX0NPTVBJTEUpIHx8IFwKLQkoZGVmaW5lZChDT05GSUdfTUFDODAyMTFfUkNfU0lNUExFKSAmJiBcCi0JICFkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9SQ19TSU1QTEVfTU9EVUxFKSkKLWV4dGVybiBpbnQgcmM4MDIxMV9zaW1wbGVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHJjODAyMTFfc2ltcGxlX2V4aXQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgcmM4MDIxMV9zaW1wbGVfaW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJjODAyMTFfc2ltcGxlX2V4aXQodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChSQzgwMjExX1BJRF9DT01QSUxFKSB8fCBcCi0JKGRlZmluZWQoQ09ORklHX01BQzgwMjExX1JDX1BJRCkgJiYgXAotCSAhZGVmaW5lZChDT05GSUdfTUFDODAyMTFfUkNfUElEX01PRFVMRSkpCi1leHRlcm4gaW50IHJjODAyMTFfcGlkX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCByYzgwMjExX3BpZF9leGl0KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHJjODAyMTFfcGlkX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCByYzgwMjExX3BpZF9leGl0KHZvaWQpCi17Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIElFRUU4MDIxMV9SQVRFX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfc3RhLmMgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3N0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE5YjRmLi4wMDAwMDAwCi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfc3RhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjA1ICswLDAgQEAKLS8qCi0gKiBCU1MgY2xpZW50IG1vZGUgaW1wbGVtZW50YXRpb24KLSAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+Ci0gKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgotICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KLSAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLS8qIFRPRE86Ci0gKiBvcmRlciBCU1MgbGlzdCBieSBSU1NJKD8pICgicXVhbGl0eSBvZiBBUCIpCi0gKiBzY2FuIHJlc3VsdCB0YWJsZSBmaWx0ZXJpbmcgKGJ5IGNhcGFiaWxpdHkgKHByaXZhY3ksIElCU1MvQlNTLCBXUEEvUlNOIElFLAotICogICAgU1NJRCkKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExX3JhdGUuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfbGVkLmgiCi0KLSNkZWZpbmUgSUVFRTgwMjExX0FVVEhfVElNRU9VVCAoSFogLyA1KQotI2RlZmluZSBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMgMwotI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCAoSFogLyA1KQotI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTIDMKLSNkZWZpbmUgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0lOVEVSVkFMICg2MCAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfUkVUUllfQVVUSF9JTlRFUlZBTCAoMSAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCAoMiAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XICgxNSAqIEhaKQotI2RlZmluZSBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQgKDIwICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0RFTEFZIChIWiAvIDMzKQotI2RlZmluZSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FIChIWiAvIDMzKQotI2RlZmluZSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUUgKEhaIC8gNSkKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMTAgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAotCi0KLSNkZWZpbmUgSUVFRTgwMjExX0ZDKHR5cGUsIHN0eXBlKSBjcHVfdG9fbGUxNih0eXBlIHwgc3R5cGUpCi0KLSNkZWZpbmUgRVJQX0lORk9fVVNFX1BST1RFQ1RJT04gQklUKDEpCi0KLS8qIG1nbXQgaGVhZGVyICsgMSBieXRlIGFjdGlvbiBjb2RlICovCi0jZGVmaW5lIElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKDI0ICsgMSkKLQotI2RlZmluZSBJRUVFODAyMTFfQUREQkFfUEFSQU1fUE9MSUNZX01BU0sgMHgwMDAyCi0jZGVmaW5lIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSyAweDAwM0MKLSNkZWZpbmUgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0sgMHhGRkEwCi0jZGVmaW5lIElFRUU4MDIxMV9ERUxCQV9QQVJBTV9USURfTUFTSyAweEYwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0RFTEJBX1BBUkFNX0lOSVRJQVRPUl9NQVNLIDB4MDgwMAotCi0vKiBuZXh0IHZhbHVlcyByZXByZXNlbnQgdGhlIGJ1ZmZlciBzaXplIGZvciBBLU1QRFUgZnJhbWUuCi0gKiBBY2NvcmRpbmcgdG8gSUVFRTgwMi4xMW4gc3BlYyBzaXplIHZhcmllcyBmcm9tIDhLIHRvIDY0SyAoaW4gcG93ZXJzIG9mIDIpICovCi0jZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGIDB4OAotI2RlZmluZSBJRUVFODAyMTFfTUFYX0FNUERVX0JVRiAweDQwCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqZHN0LAotCQkJCSAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7Ci1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpic3NpZCwgaW50IGNoYW5uZWwsCi0JCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKTsKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpOwotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX3N0YXJ0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7Ci1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSk7Ci0KLQotLyogUGFyc2VkIEluZm9ybWF0aW9uIEVsZW1lbnRzICovCi1zdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyB7Ci0JLyogcG9pbnRlcnMgdG8gSUVzICovCi0JdTggKnNzaWQ7Ci0JdTggKnN1cHBfcmF0ZXM7Ci0JdTggKmZoX3BhcmFtczsKLQl1OCAqZHNfcGFyYW1zOwotCXU4ICpjZl9wYXJhbXM7Ci0JdTggKnRpbTsKLQl1OCAqaWJzc19wYXJhbXM7Ci0JdTggKmNoYWxsZW5nZTsKLQl1OCAqd3BhOwotCXU4ICpyc247Ci0JdTggKmVycF9pbmZvOwotCXU4ICpleHRfc3VwcF9yYXRlczsKLQl1OCAqd21tX2luZm87Ci0JdTggKndtbV9wYXJhbTsKLQl1OCAqaHRfY2FwX2VsZW07Ci0JdTggKmh0X2luZm9fZWxlbTsKLQkvKiBsZW5ndGggb2YgdGhlbSwgcmVzcGVjdGl2ZWx5ICovCi0JdTggc3NpZF9sZW47Ci0JdTggc3VwcF9yYXRlc19sZW47Ci0JdTggZmhfcGFyYW1zX2xlbjsKLQl1OCBkc19wYXJhbXNfbGVuOwotCXU4IGNmX3BhcmFtc19sZW47Ci0JdTggdGltX2xlbjsKLQl1OCBpYnNzX3BhcmFtc19sZW47Ci0JdTggY2hhbGxlbmdlX2xlbjsKLQl1OCB3cGFfbGVuOwotCXU4IHJzbl9sZW47Ci0JdTggZXJwX2luZm9fbGVuOwotCXU4IGV4dF9zdXBwX3JhdGVzX2xlbjsKLQl1OCB3bW1faW5mb19sZW47Ci0JdTggd21tX3BhcmFtX2xlbjsKLQl1OCBodF9jYXBfZWxlbV9sZW47Ci0JdTggaHRfaW5mb19lbGVtX2xlbjsKLX07Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcykKLXsKLQlzaXplX3QgbGVmdCA9IGxlbjsKLQl1OCAqcG9zID0gc3RhcnQ7Ci0KLQltZW1zZXQoZWxlbXMsIDAsIHNpemVvZigqZWxlbXMpKTsKLQotCXdoaWxlIChsZWZ0ID49IDIpIHsKLQkJdTggaWQsIGVsZW47Ci0KLQkJaWQgPSAqcG9zKys7Ci0JCWVsZW4gPSAqcG9zKys7Ci0JCWxlZnQgLT0gMjsKLQotCQlpZiAoZWxlbiA+IGxlZnQpCi0JCQlyZXR1cm47Ci0KLQkJc3dpdGNoIChpZCkgewotCQljYXNlIFdMQU5fRUlEX1NTSUQ6Ci0JCQllbGVtcy0+c3NpZCA9IHBvczsKLQkJCWVsZW1zLT5zc2lkX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgotCQkJZWxlbXMtPnN1cHBfcmF0ZXMgPSBwb3M7Ci0JCQllbGVtcy0+c3VwcF9yYXRlc19sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfRkhfUEFSQU1TOgotCQkJZWxlbXMtPmZoX3BhcmFtcyA9IHBvczsKLQkJCWVsZW1zLT5maF9wYXJhbXNfbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0RTX1BBUkFNUzoKLQkJCWVsZW1zLT5kc19wYXJhbXMgPSBwb3M7Ci0JCQllbGVtcy0+ZHNfcGFyYW1zX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9DRl9QQVJBTVM6Ci0JCQllbGVtcy0+Y2ZfcGFyYW1zID0gcG9zOwotCQkJZWxlbXMtPmNmX3BhcmFtc19sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfVElNOgotCQkJZWxlbXMtPnRpbSA9IHBvczsKLQkJCWVsZW1zLT50aW1fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0lCU1NfUEFSQU1TOgotCQkJZWxlbXMtPmlic3NfcGFyYW1zID0gcG9zOwotCQkJZWxlbXMtPmlic3NfcGFyYW1zX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9DSEFMTEVOR0U6Ci0JCQllbGVtcy0+Y2hhbGxlbmdlID0gcG9zOwotCQkJZWxlbXMtPmNoYWxsZW5nZV9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfV1BBOgotCQkJaWYgKGVsZW4gPj0gNCAmJiBwb3NbMF0gPT0gMHgwMCAmJiBwb3NbMV0gPT0gMHg1MCAmJgotCQkJICAgIHBvc1syXSA9PSAweGYyKSB7Ci0JCQkJLyogTWljcm9zb2Z0IE9VSSAoMDA6NTA6RjIpICovCi0JCQkJaWYgKHBvc1szXSA9PSAxKSB7Ci0JCQkJCS8qIE9VSSBUeXBlIDEgLSBXUEEgSUUgKi8KLQkJCQkJZWxlbXMtPndwYSA9IHBvczsKLQkJCQkJZWxlbXMtPndwYV9sZW4gPSBlbGVuOwotCQkJCX0gZWxzZSBpZiAoZWxlbiA+PSA1ICYmIHBvc1szXSA9PSAyKSB7Ci0JCQkJCWlmIChwb3NbNF0gPT0gMCkgewotCQkJCQkJZWxlbXMtPndtbV9pbmZvID0gcG9zOwotCQkJCQkJZWxlbXMtPndtbV9pbmZvX2xlbiA9IGVsZW47Ci0JCQkJCX0gZWxzZSBpZiAocG9zWzRdID09IDEpIHsKLQkJCQkJCWVsZW1zLT53bW1fcGFyYW0gPSBwb3M7Ci0JCQkJCQllbGVtcy0+d21tX3BhcmFtX2xlbiA9IGVsZW47Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9SU046Ci0JCQllbGVtcy0+cnNuID0gcG9zOwotCQkJZWxlbXMtPnJzbl9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9FSURfRVJQX0lORk86Ci0JCQllbGVtcy0+ZXJwX2luZm8gPSBwb3M7Ci0JCQllbGVtcy0+ZXJwX2luZm9fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOgotCQkJZWxlbXMtPmV4dF9zdXBwX3JhdGVzID0gcG9zOwotCQkJZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgotCQkJZWxlbXMtPmh0X2NhcF9lbGVtID0gcG9zOwotCQkJZWxlbXMtPmh0X2NhcF9lbGVtX2xlbiA9IGVsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0VJRF9IVF9FWFRSQV9JTkZPOgotCQkJZWxlbXMtPmh0X2luZm9fZWxlbSA9IHBvczsKLQkJCWVsZW1zLT5odF9pbmZvX2VsZW1fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQlsZWZ0IC09IGVsZW47Ci0JCXBvcyArPSBlbGVuOwotCX0KLX0KLQotCi1zdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQotewotCWludCBjdyA9IDE7Ci0Jd2hpbGUgKGVjdyA+IDApIHsKLQkJY3cgPDw9IDE7Ci0JCWVjdy0tOwotCX0KLQlyZXR1cm4gY3cgLSAxOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICAgIHU4ICp3bW1fcGFyYW0sIHNpemVfdCB3bW1fcGFyYW1fbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcGFyYW1zOwotCXNpemVfdCBsZWZ0OwotCWludCBjb3VudDsKLQl1OCAqcG9zOwotCi0JaWYgKHdtbV9wYXJhbV9sZW4gPCA4IHx8IHdtbV9wYXJhbVs1XSAvKiB2ZXJzaW9uICovICE9IDEpCi0JCXJldHVybjsKLQljb3VudCA9IHdtbV9wYXJhbVs2XSAmIDB4MGY7Ci0JaWYgKGNvdW50ID09IGlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQpCi0JCXJldHVybjsKLQlpZnN0YS0+d21tX2xhc3RfcGFyYW1fc2V0ID0gY291bnQ7Ci0KLQlwb3MgPSB3bW1fcGFyYW0gKyA4OwotCWxlZnQgPSB3bW1fcGFyYW1fbGVuIC0gODsKLQotCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7Ci0KLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZfdHgpCi0JCXJldHVybjsKLQotCWxvY2FsLT53bW1fYWNtID0gMDsKLQlmb3IgKDsgbGVmdCA+PSA0OyBsZWZ0IC09IDQsIHBvcyArPSA0KSB7Ci0JCWludCBhY2kgPSAocG9zWzBdID4+IDUpICYgMHgwMzsKLQkJaW50IGFjbSA9IChwb3NbMF0gPj4gNCkgJiAweDAxOwotCQlpbnQgcXVldWU7Ci0KLQkJc3dpdGNoIChhY2kpIHsKLQkJY2FzZSAxOgotCQkJcXVldWUgPSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTM7Ci0JCQlpZiAoYWNtKSB7Ci0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXF1ZXVlID0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEExOwotCQkJaWYgKGFjbSkgewotCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg0KSB8IEJJVCg1KTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlxdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMDsKLQkJCWlmIChhY20pIHsKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNikgfCBCSVQoNyk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAwOgotCQlkZWZhdWx0OgotCQkJcXVldWUgPSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTI7Ci0JCQlpZiAoYWNtKSB7Ci0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDEpIHwgQklUKDIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQlwYXJhbXMuYWlmcyA9IHBvc1swXSAmIDB4MGY7Ci0JCXBhcmFtcy5jd19tYXggPSBlY3cyY3coKHBvc1sxXSAmIDB4ZjApID4+IDQpOwotCQlwYXJhbXMuY3dfbWluID0gZWN3MmN3KHBvc1sxXSAmIDB4MGYpOwotCQkvKiBUWE9QIGlzIGluIHVuaXRzIG9mIDMyIHVzZWM7IGJ1cnN0X3RpbWUgaW4gMC4xIG1zICovCi0JCXBhcmFtcy5idXJzdF90aW1lID0gKHBvc1syXSB8IChwb3NbM10gPDwgOCkpICogMzIgLyAxMDA7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogV01NIHF1ZXVlPSVkIGFjaT0lZCBhY209JWQgYWlmcz0lZCAiCi0JCSAgICAgICAiY1dtaW49JWQgY1dtYXg9JWQgYnVyc3Q9JWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHF1ZXVlLCBhY2ksIGFjbSwgcGFyYW1zLmFpZnMsIHBhcmFtcy5jd19taW4sCi0JCSAgICAgICBwYXJhbXMuY3dfbWF4LCBwYXJhbXMuYnVyc3RfdGltZSk7Ci0JCS8qIFRPRE86IGhhbmRsZSBBQ00gKGJsb2NrIFRYLCBmYWxsYmFjayB0byBuZXh0IGxvd2VzdCBhbGxvd2VkCi0JCSAqIEFDIGZvciBub3cpICovCi0JCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgVFggcXVldWUgIgotCQkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwgZGV2LT5uYW1lLCBxdWV1ZSk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHUzMiBpZWVlODAyMTFfaGFuZGxlX2VycF9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICB1OCBlcnBfdmFsdWUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPmJzc19jb25mOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JYm9vbCB1c2VfcHJvdGVjdGlvbiA9IChlcnBfdmFsdWUgJiBXTEFOX0VSUF9VU0VfUFJPVEVDVElPTikgIT0gMDsKLQlib29sIHByZWFtYmxlX21vZGUgPSAoZXJwX3ZhbHVlICYgV0xBTl9FUlBfQkFSS0VSX1BSRUFNQkxFKSAhPSAwOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCXUzMiBjaGFuZ2VkID0gMDsKLQotCWlmICh1c2VfcHJvdGVjdGlvbiAhPSBic3NfY29uZi0+dXNlX2N0c19wcm90KSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ1RTIHByb3RlY3Rpb24gJXMgKEJTU0lEPSIKLQkJCSAgICAgICAiJXMpXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkgICAgICAgdXNlX3Byb3RlY3Rpb24gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAotCQkJICAgICAgIHByaW50X21hYyhtYWMsIGlmc3RhLT5ic3NpZCkpOwotCQl9Ci0JCWJzc19jb25mLT51c2VfY3RzX3Byb3QgPSB1c2VfcHJvdGVjdGlvbjsKLQkJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1Q7Ci0JfQotCi0JaWYgKHByZWFtYmxlX21vZGUgIT0gYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN3aXRjaGVkIHRvICVzIGJhcmtlciBwcmVhbWJsZSIKLQkJCSAgICAgICAiIChCU1NJRD0lcylcbiIsCi0JCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwKLQkJCSAgICAgICAocHJlYW1ibGVfbW9kZSA9PSBXTEFOX0VSUF9QUkVBTUJMRV9TSE9SVCkgPwotCQkJCQkic2hvcnQiIDogImxvbmciLAotCQkJICAgICAgIHByaW50X21hYyhtYWMsIGlmc3RhLT5ic3NpZCkpOwotCQl9Ci0JCWJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUgPSBwcmVhbWJsZV9tb2RlOwotCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRTsKLQl9Ci0KLQlyZXR1cm4gY2hhbmdlZDsKLX0KLQotaW50IGllZWU4MDIxMV9odF9jYXBfaWVfdG9faHRfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqaHRfY2FwX2llLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbykKLXsKLQotCWlmIChodF9pbmZvID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KGh0X2luZm8sIDAsIHNpemVvZigqaHRfaW5mbykpOwotCi0JaWYgKGh0X2NhcF9pZSkgewotCQl1OCBhbXBkdV9pbmZvID0gaHRfY2FwX2llLT5hbXBkdV9wYXJhbXNfaW5mbzsKLQotCQlodF9pbmZvLT5odF9zdXBwb3J0ZWQgPSAxOwotCQlodF9pbmZvLT5jYXAgPSBsZTE2X3RvX2NwdShodF9jYXBfaWUtPmNhcF9pbmZvKTsKLQkJaHRfaW5mby0+YW1wZHVfZmFjdG9yID0KLQkJCWFtcGR1X2luZm8gJiBJRUVFODAyMTFfSFRfQ0FQX0FNUERVX0ZBQ1RPUjsKLQkJaHRfaW5mby0+YW1wZHVfZGVuc2l0eSA9Ci0JCQkoYW1wZHVfaW5mbyAmIElFRUU4MDIxMV9IVF9DQVBfQU1QRFVfREVOU0lUWSkgPj4gMjsKLQkJbWVtY3B5KGh0X2luZm8tPnN1cHBfbWNzX3NldCwgaHRfY2FwX2llLT5zdXBwX21jc19zZXQsIDE2KTsKLQl9IGVsc2UKLQkJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gMDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgaWVlZTgwMjExX2h0X2FkZHRfaW5mb19pZV90b19odF9ic3NfaW5mbygKLQkJCXN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICpodF9hZGRfaW5mb19pZSwKLQkJCXN0cnVjdCBpZWVlODAyMTFfaHRfYnNzX2luZm8gKmJzc19pbmZvKQotewotCWlmIChic3NfaW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbXNldChic3NfaW5mbywgMCwgc2l6ZW9mKCpic3NfaW5mbykpOwotCi0JaWYgKGh0X2FkZF9pbmZvX2llKSB7Ci0JCXUxNiBvcF9tb2RlOwotCQlvcF9tb2RlID0gbGUxNl90b19jcHUoaHRfYWRkX2luZm9faWUtPm9wZXJhdGlvbl9tb2RlKTsKLQotCQlic3NfaW5mby0+cHJpbWFyeV9jaGFubmVsID0gaHRfYWRkX2luZm9faWUtPmNvbnRyb2xfY2hhbjsKLQkJYnNzX2luZm8tPmJzc19jYXAgPSBodF9hZGRfaW5mb19pZS0+aHRfcGFyYW07Ci0JCWJzc19pbmZvLT5ic3Nfb3BfbW9kZSA9ICh1OCkob3BfbW9kZSAmIDB4ZmYpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17Ci0JY2hhciAqYnVmOwotCXNpemVfdCBsZW47Ci0JaW50IGk7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0JaWYgKCFpZnN0YS0+YXNzb2NyZXFfaWVzICYmICFpZnN0YS0+YXNzb2NyZXNwX2llcykKLQkJcmV0dXJuOwotCi0JYnVmID0ga21hbGxvYyg1MCArIDIgKiAoaWZzdGEtPmFzc29jcmVxX2llc19sZW4gKwotCQkJCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiksIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm47Ci0KLQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DSU5GTygiKTsKLQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykgewotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXFJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7Ci0JCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVxX2llc1tpXSk7Ci0JCX0KLQl9Ci0JaWYgKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKSB7Ci0JCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQotCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiICIpOwotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXNwSUVzPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXNwX2llc1tpXSk7Ci0JCX0KLQl9Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiKSIpOwotCi0JaWYgKGxlbiA+IElXX0NVU1RPTV9NQVgpIHsKLQkJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ1JFU1BJRT0iKTsKLQkJZm9yIChpID0gMDsgaSA8IGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7Ci0JCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOwotCQl9Ci0JfQotCi0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCXdycXUuZGF0YS5sZW5ndGggPSBsZW47Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZDVVNUT00sICZ3cnF1LCBidWYpOwotCi0Ja2ZyZWUoYnVmKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICAgIGJvb2wgYXNzb2MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQl1MzIgY2hhbmdlZCA9IEJTU19DSEFOR0VEX0FTU09DOwotCi0JaWYgKGFzc29jKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOwotCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7Ci0KLQkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCi0JCQlyZXR1cm47Ci0KLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQsCi0JCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwsCi0JCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCQlpZiAoYnNzKSB7Ci0JCQlpZiAoYnNzLT5oYXNfZXJwX3ZhbHVlKQotCQkJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9lcnBfaWUoCi0JCQkJCQlzZGF0YSwgYnNzLT5lcnBfdmFsdWUpOwotCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOwotCQl9Ci0KLQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQkJbWVtY3B5KGlmc3RhLT5wcmV2X2Jzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhkZXYsIGlmc3RhKTsKLQl9IGVsc2UgewotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKLQotCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQlpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oZGV2KTsKLQkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JfQotCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotCWlmc3RhLT5sYXN0X3Byb2JlID0gamlmZmllczsKLQlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCBhc3NvYyk7Ci0KLQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsIGludCBkZWF1dGgpCi17Ci0JaWYgKGRlYXV0aCkKLQkJaWZzdGEtPmF1dGhfdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7Ci0JaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKGRldiwgaWZzdGEsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIGludCBlbmNyeXB0KQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKnBrdF9kYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXNrYi0+ZGV2ID0gc2RhdGEtPmxvY2FsLT5tZGV2OwotCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApOwotCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKLQlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKLQotCXBrdF9kYXRhID0gKHN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKikgc2tiLT5jYjsKLQltZW1zZXQocGt0X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhKSk7Ci0JcGt0X2RhdGEtPmlmaW5kZXggPSBzZGF0YS0+ZGV2LT5pZmluZGV4OwotCWlmICghZW5jcnlwdCkKLQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX0RPX05PVF9FTkNSWVBUOwotCi0JZGV2X3F1ZXVlX3htaXQoc2tiKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCWludCB0cmFuc2FjdGlvbiwgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAotCQkJCWludCBlbmNyeXB0KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXV0aCAiCi0JCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0ICsgNik7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0ICsgNik7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKLQkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0FVVEgpOwotCWlmIChlbmNyeXB0KQotCQltZ210LT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1nbXQtPnUuYXV0aC5hdXRoX2FsZyA9IGNwdV90b19sZTE2KGlmc3RhLT5hdXRoX2FsZyk7Ci0JbWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7Ci0JaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbiArIDE7Ci0JbWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlID0gY3B1X3RvX2xlMTYoMCk7Ci0JaWYgKGV4dHJhKQotCQltZW1jcHkoc2tiX3B1dChza2IsIGV4dHJhX2xlbiksIGV4dHJhLCBleHRyYV9sZW4pOwotCi0JaWVlZTgwMjExX3N0YV90eChkZXYsIHNrYiwgZW5jcnlwdCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCWlmc3RhLT5hdXRoX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcyIKLQkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBpZnN0YS0+YnNzaWQpKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0RJU0FCTEVEOwotCQlyZXR1cm47Ci0JfQotCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZSB3aXRoIEFQICVzXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGlmc3RhLT5ic3NpZCkpOwotCi0JaWVlZTgwMjExX3NlbmRfYXV0aChkZXYsIGlmc3RhLCAxLCBOVUxMLCAwLCAwKTsKLQotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3MsICppZXM7Ci0JaW50IGksIGxlbjsKLQl1MTYgY2FwYWI7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7Ci0JaW50IHdtbSA9IDA7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkgICAgc2l6ZW9mKCptZ210KSArIDIwMCArIGlmc3RhLT5leHRyYV9pZV9sZW4gKwotCQkJICAgIGlmc3RhLT5zc2lkX2xlbik7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhc3NvYyAiCi0JCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbW9kZSA9IGxvY2FsLT5vcGVyX2h3X21vZGU7Ci0JY2FwYWIgPSBpZnN0YS0+Y2FwYWI7Ci0JaWYgKG1vZGUtPm1vZGUgPT0gTU9ERV9JRUVFODAyMTFHKSB7Ci0JCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUgfAotCQkJV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwotCX0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCwgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQlpZiAoYnNzKSB7Ci0JCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCQlpZiAoYnNzLT53bW1faWUpIHsKLQkJCXdtbSA9IDE7Ci0JCX0KLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOwotCX0KLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgewotCQlza2JfcHV0KHNrYiwgMTApOwotCQltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAotCQkJCQkJICAgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKTsKLQkJbWdtdC0+dS5yZWFzc29jX3JlcS5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCQltZ210LT51LnJlYXNzb2NfcmVxLmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KDEpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCBpZnN0YS0+cHJldl9ic3NpZCwKLQkJICAgICAgIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQlza2JfcHV0KHNrYiwgNCk7Ci0JCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCi0JCQkJCQkgICBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKTsKLQkJbWdtdC0+dS5hc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKLQkJbWdtdC0+dS5hc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYoMSk7Ci0JfQotCi0JLyogU1NJRCAqLwotCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZzdGEtPnNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQotCWxlbiA9IG1vZGUtPm51bV9yYXRlczsKLQlpZiAobGVuID4gOCkKLQkJbGVuID0gODsKLQlwb3MgPSBza2JfcHV0KHNrYiwgbGVuICsgMik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQkqcG9zKysgPSBsZW47Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWludCByYXRlID0gbW9kZS0+cmF0ZXNbaV0ucmF0ZTsKLQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOwotCX0KLQotCWlmIChtb2RlLT5udW1fcmF0ZXMgPiBsZW4pIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIG1vZGUtPm51bV9yYXRlcyAtIGxlbiArIDIpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJKnBvcysrID0gbW9kZS0+bnVtX3JhdGVzIC0gbGVuOwotCQlmb3IgKGkgPSBsZW47IGkgPCBtb2RlLT5udW1fcmF0ZXM7IGkrKykgewotCQkJaW50IHJhdGUgPSBtb2RlLT5yYXRlc1tpXS5yYXRlOwotCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOwotCQl9Ci0JfQotCi0JaWYgKGlmc3RhLT5leHRyYV9pZSkgewotCQlwb3MgPSBza2JfcHV0KHNrYiwgaWZzdGEtPmV4dHJhX2llX2xlbik7Ci0JCW1lbWNweShwb3MsIGlmc3RhLT5leHRyYV9pZSwgaWZzdGEtPmV4dHJhX2llX2xlbik7Ci0JfQotCi0JaWYgKHdtbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIDkpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM7Ci0JCSpwb3MrKyA9IDc7IC8qIGxlbiAqLwotCQkqcG9zKysgPSAweDAwOyAvKiBNaWNyb3NvZnQgT1VJIDAwOjUwOkYyICovCi0JCSpwb3MrKyA9IDB4NTA7Ci0JCSpwb3MrKyA9IDB4ZjI7Ci0JCSpwb3MrKyA9IDI7IC8qIFdNRSAqLwotCQkqcG9zKysgPSAwOyAvKiBXTUUgaW5mbyAqLwotCQkqcG9zKysgPSAxOyAvKiBXTUUgdmVyICovCi0JCSpwb3MrKyA9IDA7Ci0JfQotCS8qIHdtbSBzdXBwb3J0IGlzIGEgbXVzdCB0byBIVCAqLwotCWlmICh3bW0gJiYgbW9kZS0+aHRfaW5mby5odF9zdXBwb3J0ZWQpIHsKLQkJX19sZTE2IHRtcCA9IGNwdV90b19sZTE2KG1vZGUtPmh0X2luZm8uY2FwKTsKLQkJcG9zID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkrMik7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk7Ci0JCSpwb3MrKyA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCk7Ci0JCW1lbXNldChwb3MsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOwotCQltZW1jcHkocG9zLCAmdG1wLCBzaXplb2YodTE2KSk7Ci0JCXBvcyArPSBzaXplb2YodTE2KTsKLQkJKnBvcysrID0gKG1vZGUtPmh0X2luZm8uYW1wZHVfZmFjdG9yIHwKLQkJCQkobW9kZS0+aHRfaW5mby5hbXBkdV9kZW5zaXR5IDw8IDIpKTsKLQkJbWVtY3B5KHBvcywgbW9kZS0+aHRfaW5mby5zdXBwX21jc19zZXQsIDE2KTsKLQl9Ci0KLQlrZnJlZShpZnN0YS0+YXNzb2NyZXFfaWVzKTsKLQlpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiA9IChza2ItPmRhdGEgKyBza2ItPmxlbikgLSBpZXM7Ci0JaWZzdGEtPmFzc29jcmVxX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVxX2llc19sZW4sIEdGUF9LRVJORUwpOwotCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVxX2llcywgaWVzLCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbik7Ci0KLQlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9kZWF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwgdTE2IHJlYXNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGRlYXV0aCAiCi0JCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAotCQkJCQkgICBJRUVFODAyMTFfU1RZUEVfREVBVVRIKTsKLQlza2JfcHV0KHNrYiwgMik7Ci0JbWdtdC0+dS5kZWF1dGgucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihyZWFzb24pOwotCi0JaWVlZTgwMjExX3N0YV90eChkZXYsIHNrYiwgMCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLCB1MTYgcmVhc29uKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZGlzYXNzb2MgIgotCQkgICAgICAgImZyYW1lXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKLQkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKTsKLQlza2JfcHV0KHNrYiwgMik7Ci0JbWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbik7Ci0KLQlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7Ci0JaW50IGJzc19wcml2YWN5OwotCWludCB3ZXBfcHJpdmFjeTsKLQlpbnQgcHJpdmFjeV9pbnZva2VkOwotCi0JaWYgKCFpZnN0YSB8fCAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NSVhFRF9DRUxMKSkKLQkJcmV0dXJuIDA7Ci0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCwgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIDA7Ci0KLQlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKTsKLQl3ZXBfcHJpdmFjeSA9ICEhaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChkZXYpOwotCXByaXZhY3lfaW52b2tlZCA9ICEhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEKTsKLQotCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKLQotCWlmICgoYnNzX3ByaXZhY3kgPT0gd2VwX3ByaXZhY3kpIHx8IChic3NfcHJpdmFjeSA9PSBwcml2YWN5X2ludm9rZWQpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLQlpZnN0YS0+YXNzb2NfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0aW9uIHdpdGggQVAgJXMiCi0JCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaWZzdGEtPmJzc2lkKSk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKLQkJcmV0dXJuOwotCX0KLQotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVEU7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCBBUCAlc1xuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBpZnN0YS0+YnNzaWQpKTsKLQlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goZGV2LCBpZnN0YSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtaXNtYXRjaCBpbiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gYW5kICIKLQkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gYWJvcnQgYXNzb2NpYXRpb25cbiIsIGRldi0+bmFtZSk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKLQkJcmV0dXJuOwotCX0KLQotCWllZWU4MDIxMV9zZW5kX2Fzc29jKGRldiwgaWZzdGEpOwotCi0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGRpc2Fzc29jOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JLyogVE9ETzogc3RhcnQgbW9uaXRvcmluZyBjdXJyZW50IEFQIHNpZ25hbCBxdWFsaXR5IGFuZCBudW1iZXIgb2YKLQkgKiBtaXNzZWQgYmVhY29ucy4gU2NhbiBvdGhlciBjaGFubmVscyBldmVyeSBub3cgYW5kIHRoZW4gYW5kIHNlYXJjaAotCSAqIGZvciBiZXR0ZXIgQVBzLiAqLwotCS8qIFRPRE86IHJlbW92ZSBleHBpcmVkIEJTU2VzICovCi0KLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfQVNTT0NJQVRFRDsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKLQlpZiAoIXN0YSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFNUQSBlbnRyeSBmb3Igb3duIEFQICVzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBpZnN0YS0+YnNzaWQpKTsKLQkJZGlzYXNzb2MgPSAxOwotCX0gZWxzZSB7Ci0JCWRpc2Fzc29jID0gMDsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJCSAgICAgICBzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCkpIHsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFByb2JlUmVzcCBmcm9tICIKLQkJCQkgICAgICAgImN1cnJlbnQgQVAgJXMgLSBhc3N1bWUgb3V0IG9mICIKLQkJCQkgICAgICAgInJhbmdlXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGlmc3RhLT5ic3NpZCkpOwotCQkJCWRpc2Fzc29jID0gMTsKLQkJCQlzdGFfaW5mb19mcmVlKHN0YSk7Ci0JCQl9IGVsc2UKLQkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoZGV2LCBpZnN0YS0+YnNzaWQsCi0JCQkJCQkJIGxvY2FsLT5zY2FuX3NzaWQsCi0JCQkJCQkJIGxvY2FsLT5zY2FuX3NzaWRfbGVuKTsKLQkJCWlmc3RhLT5mbGFncyBePSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCX0gZWxzZSB7Ci0JCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5sYXN0X3Byb2JlICsKLQkJCQkgICAgICAgSUVFRTgwMjExX1BST0JFX0lOVEVSVkFMKSkgewotCQkJCWlmc3RhLT5sYXN0X3Byb2JlID0gamlmZmllczsKLQkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoZGV2LCBpZnN0YS0+YnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOwotCQkJfQotCQl9Ci0JCXN0YV9pbmZvX3B1dChzdGEpOwotCX0KLQlpZiAoZGlzYXNzb2MpIHsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0RJU0FCTEVEOwotCQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoZGV2LCBpZnN0YSwgMCk7Ci0JfSBlbHNlIHsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKwotCQkJCSAgICAgIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKTsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpkc3QsCi0JCQkJICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3MsICpzdXBwX3JhdGVzLCAqZXN1cHBfcmF0ZXMgPSBOVUxMOwotCWludCBpOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpICsgMjAwKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXF1ZXN0XG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAotCQkJCQkgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLQltZW1jcHkobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoZHN0KSB7Ci0JCW1lbWNweShtZ210LT5kYSwgZHN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShtZ210LT5ic3NpZCwgZHN0LCBFVEhfQUxFTik7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JCW1lbXNldChtZ210LT5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwotCX0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IHNzaWRfbGVuOwotCW1lbWNweShwb3MsIHNzaWQsIHNzaWRfbGVuKTsKLQotCXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMik7Ci0Jc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0Jc3VwcF9yYXRlc1sxXSA9IDA7Ci0JbW9kZSA9IGxvY2FsLT5vcGVyX2h3X21vZGU7Ci0JZm9yIChpID0gMDsgaSA8IG1vZGUtPm51bV9yYXRlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9ICZtb2RlLT5yYXRlc1tpXTsKLQkJaWYgKCEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TVVBQT1JURUQpKQotCQkJY29udGludWU7Ci0JCWlmIChlc3VwcF9yYXRlcykgewotCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOwotCQkJZXN1cHBfcmF0ZXNbMV0rKzsKLQkJfSBlbHNlIGlmIChzdXBwX3JhdGVzWzFdID09IDgpIHsKLQkJCWVzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDMpOwotCQkJZXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJCWVzdXBwX3JhdGVzWzFdID0gMTsKLQkJCXBvcyA9ICZlc3VwcF9yYXRlc1syXTsKLQkJfSBlbHNlIHsKLQkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKLQkJCXN1cHBfcmF0ZXNbMV0rKzsKLQkJfQotCQkqcG9zID0gcmF0ZS0+cmF0ZSAvIDU7Ci0JfQotCi0JaWVlZTgwMjExX3N0YV90eChkZXYsIHNrYiwgMCk7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmICghc2RhdGEgfHwgIXNkYXRhLT5kZWZhdWx0X2tleSB8fAotCSAgICBzZGF0YS0+ZGVmYXVsdF9rZXktPmNvbmYuYWxnICE9IEFMR19XRVApCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlZFxuIiwgZGV2LT5uYW1lKTsKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOwotCWllZWU4MDIxMV9hc3NvY2lhdGUoZGV2LCBpZnN0YSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICAgICBzaXplX3QgbGVuKQotewotCXU4ICpwb3M7Ci0Jc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlcGx5aW5nIHRvIGF1dGggY2hhbGxlbmdlXG4iLCBkZXYtPm5hbWUpOwotCXBvcyA9IG1nbXQtPnUuYXV0aC52YXJpYWJsZTsKLQlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKLQlpZiAoIWVsZW1zLmNoYWxsZW5nZSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vIGNoYWxsZW5nZSBJRSBpbiBzaGFyZWQga2V5IGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCWllZWU4MDIxMV9zZW5kX2F1dGgoZGV2LCBpZnN0YSwgMywgZWxlbXMuY2hhbGxlbmdlIC0gMiwKLQkJCSAgICBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3Jlc3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRhLCB1MTYgdGlkLAotCQkJCQl1OCBkaWFsb2dfdG9rZW4sIHUxNiBzdGF0dXMsIHUxNiBwb2xpY3ksCi0JCQkJCXUxNiBidWZfc2l6ZSwgdTE2IHRpbWVvdXQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgY2FwYWI7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyAxICsKLQkJCQkJc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcCkpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCSAgICAgICAiZm9yIGFkZGJhIHJlc3AgZnJhbWVcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKLQkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7Ci0KLQlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKTsKLQltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfQkFDSzsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0KLQljYXBhYiA9ICh1MTYpKHBvbGljeSA8PCAxKTsJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCi0JY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCi0JY2FwYWIgfD0gKHUxNikoYnVmX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ3JlZ2F0aW9uICovCi0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKLQotCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQkJc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDsKLQl1MTYgY2FwYWIsIHRpZCwgdGltZW91dCwgYmFfcG9saWN5LCBidWZfc2l6ZSwgc3RhcnRfc2VxX251bSwgc3RhdHVzOwotCXU4IGRpYWxvZ190b2tlbjsKLQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKLQlpZiAoIXN0YSkKLQkJcmV0dXJuOwotCi0JLyogZXh0cmFjdCBzZXNzaW9uIHBhcmFtZXRlcnMgZnJvbSBhZGRiYSByZXF1ZXN0IGZyYW1lICovCi0JZGlhbG9nX3Rva2VuID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuOwotCXRpbWVvdXQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0KTsKLQlzdGFydF9zZXFfbnVtID0KLQkJbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSkgPj4gNDsKLQotCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOwotCWJhX3BvbGljeSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9QT0xJQ1lfTUFTSykgPj4gMTsKLQl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7Ci0JYnVmX3NpemUgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykgPj4gNjsKLQotCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1JFUVVFU1RfREVDTElORUQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhcmFtZXRlcnM6Ci0JICogY2hlY2sgaWYgY29uZmlndXJhdGlvbiBjYW4gc3VwcG9ydCB0aGUgQkEgcG9saWN5Ci0JICogYW5kIGlmIGJ1ZmZlciBzaXplIGRvZXMgbm90IGV4Y2VlZHMgbWF4IHZhbHVlICovCi0JaWYgKCgoYmFfcG9saWN5ICE9IDEpCi0JCSYmICghKGNvbmYtPmh0X2NvbmYuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9ERUxBWV9CQSkpKQotCQl8fCAoYnVmX3NpemUgPiBJRUVFODAyMTFfTUFYX0FNUERVX0JVRikpIHsKLQkJc3RhdHVzID0gV0xBTl9TVEFUVVNfSU5WQUxJRF9RT1NfUEFSQU07Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiQmxvY2sgQWNrIFJlcSB3aXRoIGJhZCBwYXJhbXMgZnJvbSAiCi0JCQkJIiVzIG9uIHRpZCAldS4gcG9saWN5ICVkLCBidWZmZXIgc2l6ZSAlZFxuIiwKLQkJCQlwcmludF9tYWMobWFjLCBtZ210LT5zYSksIHRpZCwgYmFfcG9saWN5LAotCQkJCWJ1Zl9zaXplKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJZ290byBlbmRfbm9fbG9jazsKLQl9Ci0JLyogZGV0ZXJtaW5lIGRlZmF1bHQgYnVmZmVyIHNpemUgKi8KLQlpZiAoYnVmX3NpemUgPT0gMCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUgPSBjb25mLT5tb2RlOwotCQlidWZfc2l6ZSA9IElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGOwotCQlidWZfc2l6ZSA9IGJ1Zl9zaXplIDw8IG1vZGUtPmh0X2luZm8uYW1wZHVfZmFjdG9yOwotCX0KLQotCXRpZF9hZ2dfcnggPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOwotCi0JLyogZXhhbWluZSBzdGF0ZSBtYWNoaW5lICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfcngpOwotCi0JaWYgKHRpZF9hZ2dfcngtPnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBCbG9jayBBY2sgUmVxIGZyb20gIgotCQkJCSIlcyBvbiB0aWQgJXVcbiIsCi0JCQkJcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCi0JdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQotCQlrbWFsbG9jKGJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWYgKiksIEdGUF9BVE9NSUMpOwotCWlmICgoIXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKSAmJiBuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4gbm90IGFsbG9jYXRlIHJlb3JkZXJpbmcgYnVmZmVyICIKLQkJCQkJCSJ0byB0aWQgJWRcbiIsIHRpZCk7Ci0JCWdvdG8gZW5kOwotCX0KLQltZW1zZXQodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYsIDAsCi0JCWJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWYgKikpOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCi0JCQkJCSAgICAgICBzdGEtPmFkZHIsIHRpZCwgc3RhcnRfc2VxX251bSk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSBvbiB0aWQgJWQgcmVzdWx0ICVkIiwgdGlkLCByZXQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JaWYgKHJldCkgewotCQlrZnJlZSh0aWRfYWdnX3J4LT5yZW9yZGVyX2J1Zik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCS8qIGNoYW5nZSBzdGF0ZSBhbmQgc2VuZCBhZGRiYSByZXNwICovCi0JdGlkX2FnZ19yeC0+c3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JdGlkX2FnZ19yeC0+ZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCXRpZF9hZ2dfcngtPnNzbiA9IHN0YXJ0X3NlcV9udW07Ci0JdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc3RhcnRfc2VxX251bTsKLQl0aWRfYWdnX3J4LT5idWZfc2l6ZSA9IGJ1Zl9zaXplOwotCXRpZF9hZ2dfcngtPnRpbWVvdXQgPSB0aW1lb3V0OwotCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7Ci0Jc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKLWVuZDoKLQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKLQotZW5kX25vX2xvY2s6Ci0JaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPmRldiwgc3RhLT5hZGRyLCB0aWQsIGRpYWxvZ190b2tlbiwKLQkJCQlzdGF0dXMsIDEsIGJ1Zl9zaXplLCB0aW1lb3V0KTsKLQlzdGFfaW5mb19wdXQoc3RhKTsKLX0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhLCB1MTYgdGlkLAotCQkJCSB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgcGFyYW1zOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMSArCi0JCQkJCXNpemVvZihtZ210LT51LmFjdGlvbi51LmRlbGJhKSk7Ci0KLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJCQkJImZvciBkZWxiYSBmcmFtZVxuIiwgZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCi0JCW1lbWNweShtZ210LT5ic3NpZCwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAotCQkJCQlJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKLQotCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEpKTsKLQotCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOwotCW1nbXQtPnUuYWN0aW9uLnUuZGVsYmEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9ERUxCQTsKLQlwYXJhbXMgPSAodTE2KShpbml0aWF0b3IgPDwgMTEpOyAJLyogYml0IDExIGluaXRpYXRvciAqLwotCXBhcmFtcyB8PSAodTE2KSh0aWQgPDwgMTIpOyAJCS8qIGJpdCAxNToxMiBUSUQgbnVtYmVyICovCi0KLQltZ210LT51LmFjdGlvbi51LmRlbGJhLnBhcmFtcyA9IGNwdV90b19sZTE2KHBhcmFtcyk7Ci0JbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbl9jb2RlKTsKLQotCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpyYSwgdTE2IHRpZCwKLQkJCQkJdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgcmV0LCBpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybjsKLQotCS8qIGNoZWNrIGlmIFRJRCBpcyBpbiBvcGVyYXRpb25hbCBzdGF0ZSAqLwotCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKLQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLnN0YXRlCi0JCQkJIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfcngpOwotCQlzdGFfaW5mb19wdXQoc3RhKTsKLQkJcmV0dXJuOwotCX0KLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0uc3RhdGUgPQotCQlIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKLQkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV9yeCk7Ci0KLQkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCi0JICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KLQlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7Ci0KLQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAotCQkJCQlyYSwgdGlkLCBFSU5WQUwpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKLQkJCQkiYWdnZXJnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKLQotCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLwotCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQotCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLgotCQkJCQlzZXNzaW9uX3RpbWVyKTsKLQotCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCi0JaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCi0JCWllZWU4MDIxMV9zZW5kX2RlbGJhKGRldiwgcmEsIHRpZCwgMCwgcmVhc29uKTsKLQotCS8qIGZyZWUgdGhlIHJlb3JkZXJpbmcgYnVmZmVyICovCi0JZm9yIChpID0gMDsgaSA8IHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS5idWZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0ucmVvcmRlcl9idWZbaV0pIHsKLQkJCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgKi8KLQkJCWRldl9rZnJlZV9za2Ioc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLnJlb3JkZXJfYnVmW2ldKTsKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS5zdG9yZWRfbXBkdV9udW0tLTsKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS5yZW9yZGVyX2J1ZltpXSA9IE5VTEw7Ci0JCX0KLQl9Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLnJlb3JkZXJfYnVmKTsKLQotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS5zdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotCXN0YV9pbmZvX3B1dChzdGEpOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Byb2Nlc3NfZGVsYmEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXUxNiB0aWQsIHBhcmFtczsKLQl1MTYgaW5pdGlhdG9yOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybjsKLQotCXBhcmFtcyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zKTsKLQl0aWQgPSAocGFyYW1zICYgSUVFRTgwMjExX0RFTEJBX1BBUkFNX1RJRF9NQVNLKSA+PiAxMjsKLQlpbml0aWF0b3IgPSAocGFyYW1zICYgSUVFRTgwMjExX0RFTEJBX1BBUkFNX0lOSVRJQVRPUl9NQVNLKSA+PiAxMTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICJkZWxiYSBmcm9tICVzIG9uIHRpZCAlZCByZWFzb24gY29kZSAlZFxuIiwKLQkJCXByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgdGlkLAotCQkJbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5yZWFzb25fY29kZSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlpZiAoaW5pdGlhdG9yID09IFdMQU5fQkFDS19JTklUSUFUT1IpCi0JCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKGRldiwgc3RhLT5hZGRyLCB0aWQsCi0JCQkJCQkgV0xBTl9CQUNLX0lOSVRJQVRPUiwgMCk7Ci0Jc3RhX2luZm9fcHV0KHN0YSk7Ci19Ci0KLS8qCi0gKiBBZnRlciByZWNlaXZpbmcgQmxvY2sgQWNrIFJlcXVlc3QgKEJBUikgd2UgYWN0aXZhdGVkIGEKLSAqIHRpbWVyIGFmdGVyIGVhY2ggZnJhbWUgYXJyaXZlcyBmcm9tIHRoZSBvcmlnaW5hdG9yLgotICogaWYgdGhpcyB0aW1lciBleHBpcmVzIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uIHdpbGwgYmUgZXhlY3V0ZWQuCi0gKi8KLXZvaWQgc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCi0JICogb25seSBvbmUgYXJndW1lbnQsIGFuZCB2ZXJpb3VzIHN0YV9pbmZvIGFyZSBuZWVkZWQgaGVyZSwgc28gaW5pdAotCSAqIGZsb3cgaW4gc3RhX2luZm9fYWRkIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCi0JICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLwotCXU4ICpwdGlkID0gKHU4ICopZGF0YTsKLQl1OCAqdGltZXJfdG9faWQgPSBwdGlkIC0gKnB0aWQ7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodGltZXJfdG9faWQsIHN0cnVjdCBzdGFfaW5mbywKLQkJCQkJIHRpbWVyX3RvX3RpZFswXSk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAicnggc2Vzc2lvbiB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgKHUxNikqcHRpZCk7Ci0JaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLT5kZXYsIHN0YS0+YWRkciwgKHUxNikqcHRpZCwKLQkJCQkJIFdMQU5fQkFDS19USU1FUiwKLQkJCQkJIFdMQU5fUkVBU09OX1FTVEFfVElNRU9VVCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICAgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgIiVzLCBidXQgbm90IGluIGF1dGhlbnRpY2F0ZSBzdGF0ZSAtIGlnbm9yZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGVuIDwgMjQgKyA2KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIHNob3J0ICglemQpIGF1dGhlbnRpY2F0aW9uIGZyYW1lICIKLQkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCi0JICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKLQkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gZnJhbWUgcmVjZWl2ZWQgZnJvbSAiCi0JCSAgICAgICAidW5rbm93biBCU1NJRCAoU0E9JXMgQlNTSUQ9JXMpIC0gIgotCQkgICAgICAgImlnbm9yZWRcbiIsIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLAotCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbWdtdC0+YnNzaWQpKTsKLQkJcmV0dXJuOwotCX0KLQotCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKLQlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwotCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggYXV0aGVudGljYXRpb24gZnJvbSAlcyAoYWxnPSVkICIKLQkgICAgICAgInRyYW5zYWN0aW9uPSVkIHN0YXR1cz0lZClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCBhdXRoX2FsZywKLQkgICAgICAgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGUpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7Ci0JCS8qIElFRUUgODAyLjExIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgYXV0aGVudGljYXRpb24gaW4gSUJTUwotCQkgKiBuZXR3b3JrcyBhbmQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHNlZW0gdG8gdXNlIGl0LgotCQkgKiBIb3dldmVyLCB0cnkgdG8gcmVwbHkgdG8gYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgaWYgc29tZW9uZQotCQkgKiBoYXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdGhpcy4KLQkJICogVE9ETzogQ291bGQgaW1wbGVtZW50IHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24uICovCi0JCWlmIChhdXRoX2FsZyAhPSBXTEFOX0FVVEhfT1BFTiB8fCBhdXRoX3RyYW5zYWN0aW9uICE9IDEpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5leHBlY3RlZCBJQlNTIGF1dGhlbnRpY2F0aW9uICIKLQkJCSAgICAgICAiZnJhbWUgKGFsZz0lZCB0cmFuc2FjdGlvbj0lZClcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWVlZTgwMjExX3NlbmRfYXV0aChkZXYsIGlmc3RhLCAyLCBOVUxMLCAwLCAwKTsKLQl9Ci0KLQlpZiAoYXV0aF9hbGcgIT0gaWZzdGEtPmF1dGhfYWxnIHx8Ci0JICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24pIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmV4cGVjdGVkIGF1dGhlbnRpY2F0aW9uIGZyYW1lICIKLQkJICAgICAgICIoYWxnPSVkIHRyYW5zYWN0aW9uPSVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCBkZW5pZWQgYXV0aGVudGljYXRpb24gKGF1dGhfYWxnPSVkICIKLQkJICAgICAgICJjb2RlPSVkKVxuIiwgZGV2LT5uYW1lLCBpZnN0YS0+YXV0aF9hbGcsIHN0YXR1c19jb2RlKTsKLQkJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX05PVF9TVVBQT1JURURfQVVUSF9BTEcpIHsKLQkJCXU4IGFsZ3NbM107Ci0JCQljb25zdCBpbnQgbnVtX2FsZ3MgPSBBUlJBWV9TSVpFKGFsZ3MpOwotCQkJaW50IGksIHBvczsKLQkJCWFsZ3NbMF0gPSBhbGdzWzFdID0gYWxnc1syXSA9IDB4ZmY7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQotCQkJCWFsZ3NbMF0gPSBXTEFOX0FVVEhfT1BFTjsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCi0JCQkJYWxnc1sxXSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwotCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKLQkJCQlhbGdzWzJdID0gV0xBTl9BVVRIX0xFQVA7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOKQotCQkJCXBvcyA9IDA7Ci0JCQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCi0JCQkJcG9zID0gMTsKLQkJCWVsc2UKLQkJCQlwb3MgPSAyOwotCQkJZm9yIChpID0gMDsgaSA8IG51bV9hbGdzOyBpKyspIHsKLQkJCQlwb3MrKzsKLQkJCQlpZiAocG9zID49IG51bV9hbGdzKQotCQkJCQlwb3MgPSAwOwotCQkJCWlmIChhbGdzW3Bvc10gPT0gaWZzdGEtPmF1dGhfYWxnIHx8Ci0JCQkJICAgIGFsZ3NbcG9zXSA9PSAweGZmKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAoYWxnc1twb3NdID09IFdMQU5fQVVUSF9TSEFSRURfS0VZICYmCi0JCQkJICAgICFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKGRldikpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmc3RhLT5hdXRoX2FsZyA9IGFsZ3NbcG9zXTsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldCBhdXRoX2FsZz0lZCBmb3IgIgotCQkJCSAgICAgICAibmV4dCB0cnlcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgaWZzdGEtPmF1dGhfYWxnKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoIChpZnN0YS0+YXV0aF9hbGcpIHsKLQljYXNlIFdMQU5fQVVUSF9PUEVOOgotCWNhc2UgV0xBTl9BVVRIX0xFQVA6Ci0JCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChkZXYsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpCi0JCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoZGV2LCBpZnN0YSk7Ci0JCWVsc2UKLQkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShkZXYsIGlmc3RhLCBtZ210LCBsZW4pOwotCQlicmVhazsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICAgICBzaXplX3QgbGVuKQotewotCXUxNiByZWFzb25fY29kZTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCWlmIChsZW4gPCAyNCArIDIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gc2hvcnQgKCV6ZCkgZGVhdXRoZW50aWNhdGlvbiBmcmFtZSAiCi0JCSAgICAgICAicmVjZWl2ZWQgZnJvbSAlcyAtIGlnbm9yZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKLQkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggZGVhdXRoZW50aWNhdGlvbiBmcm9tICVzIgotCSAgICAgICAiIChyZWFzb249JWQpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgcmVhc29uX2NvZGUpOwotCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRlZFxuIiwgZGV2LT5uYW1lKTsKLQl9Ci0KLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BVVRIRU5USUNBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BU1NPQ0lBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BU1NPQ0lBVEVEKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9BVVRIRU5USUNBVEU7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKLQkJCQkgICAgICBJRUVFODAyMTFfUkVUUllfQVVUSF9JTlRFUlZBTCk7Ci0JfQotCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhkZXYsIGlmc3RhLCAxKTsKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgICAgc2l6ZV90IGxlbikKLXsKLQl1MTYgcmVhc29uX2NvZGU7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLQlpZiAobGVuIDwgMjQgKyAyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIHNob3J0ICglemQpIGRpc2Fzc29jaWF0aW9uIGZyYW1lICIKLQkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKLQkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGlzYXNzb2MucmVhc29uX2NvZGUpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBkaXNhc3NvY2lhdGlvbiBmcm9tICVzIgotCSAgICAgICAiIChyZWFzb249JWQpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgcmVhc29uX2NvZGUpOwotCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGVkXG4iLCBkZXYtPm5hbWUpOwotCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfQVNTT0NJQVRFRCkgewotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfQVNTT0NJQVRFOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCi0JCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOwotCX0KLQotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2MoZGV2LCBpZnN0YSwgMCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkJIHNpemVfdCBsZW4sCi0JCQkJCSBpbnQgcmVhc3NvYykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2RhdGEtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGU7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTMyIHJhdGVzOwotCXUxNiBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgYWlkOwotCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnNkYXRhLT5ic3NfY29uZjsKLQl1OCAqcG9zOwotCWludCBpLCBqOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCi0JLyogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAotCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4gKi8KLQotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0FTU09DSUFURSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgIiVzLCBidXQgbm90IGluIGFzc29jaWF0ZSBzdGF0ZSAtIGlnbm9yZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGVuIDwgMjQgKyA2KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIHNob3J0ICglemQpIGFzc29jaWF0aW9uIGZyYW1lICIKLQkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgotCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKLQkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKLQkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljYXBhYl9pbmZvID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmNhcGFiX2luZm8pOwotCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLnN0YXR1c19jb2RlKTsKLQlhaWQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuYWlkKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggJXNzc29jUmVzcCBmcm9tICVzIChjYXBhYj0weCV4ICIKLQkgICAgICAgInN0YXR1cz0lZCBhaWQ9JWQpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLAotCSAgICAgICBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgKHUxNikoYWlkICYgfihCSVQoMTUpIHwgQklUKDE0KSkpKTsKLQotCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzX2NvZGUpOwotCQkvKiBpZiB0aGlzIHdhcyBhIHJlYXNzb2NpYXRpb24sIGVuc3VyZSB3ZSB0cnkgYSAiZnVsbCIKLQkJICogYXNzb2NpYXRpb24gbmV4dCB0aW1lLiBUaGlzIHdvcmtzIGFyb3VuZCBzb21lIGJyb2tlbiBBUHMKLQkJICogd2hpY2ggZG8gbm90IGNvcnJlY3RseSByZWplY3QgcmVhc3NvY2lhdGlvbiByZXF1ZXN0cy4gKi8KLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKChhaWQgJiAoQklUKDE1KSB8IEJJVCgxNCkpKSAhPSAoQklUKDE1KSB8IEJJVCgxNCkpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGludmFsaWQgYWlkIHZhbHVlICVkOyBiaXRzIDE1OjE0IG5vdCAiCi0JCSAgICAgICAic2V0XG4iLCBkZXYtPm5hbWUsIGFpZCk7Ci0JYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwotCi0JcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwotCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwotCi0JaWYgKCFlbGVtcy5zdXBwX3JhdGVzKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gU3VwcFJhdGVzIGVsZW1lbnQgaW4gQXNzb2NSZXNwXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlZFxuIiwgZGV2LT5uYW1lKTsKLQlpZnN0YS0+YWlkID0gYWlkOwotCWlmc3RhLT5hcF9jYXBhYiA9IGNhcGFiX2luZm87Ci0KLQlrZnJlZShpZnN0YS0+YXNzb2NyZXNwX2llcyk7Ci0JaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuID0gbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KTsKLQlpZnN0YS0+YXNzb2NyZXNwX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoaWZzdGEtPmFzc29jcmVzcF9pZXMpCi0JCW1lbWNweShpZnN0YS0+YXNzb2NyZXNwX2llcywgcG9zLCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW4pOwotCi0JLyogc2V0IEFJRCwgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKCkgd2lsbCB0ZWxsIHRoZSBkcml2ZXIgKi8KLQlic3NfY29uZi0+YWlkID0gYWlkOwotCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChkZXYsIGlmc3RhLCAxKTsKLQotCS8qIEFkZCBTVEEgZW50cnkgZm9yIHRoZSBBUCAqLwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKLQlpZiAoIXN0YSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzczsKLQkJc3RhID0gc3RhX2luZm9fYWRkKGxvY2FsLCBkZXYsIGlmc3RhLT5ic3NpZCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc3RhKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhZGQgU1RBIGVudHJ5IGZvciB0aGUiCi0JCQkgICAgICAgIiBBUFxuIiwgZGV2LT5uYW1lKTsKLQkJCXJldHVybjsKLQkJfQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCwKLQkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JCWlmIChic3MpIHsKLQkJCXN0YS0+bGFzdF9yc3NpID0gYnNzLT5yc3NpOwotCQkJc3RhLT5sYXN0X3NpZ25hbCA9IGJzcy0+c2lnbmFsOwotCQkJc3RhLT5sYXN0X25vaXNlID0gYnNzLT5ub2lzZTsKLQkJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKLQkJfQotCX0KLQotCXN0YS0+ZGV2ID0gZGV2OwotCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfQVVUSCB8IFdMQU5fU1RBX0FTU09DIHwgV0xBTl9TVEFfQVNTT0NfQVA7Ci0KLQlyYXRlcyA9IDA7Ci0JbW9kZSA9IGxvY2FsLT5vcGVyX2h3X21vZGU7Ci0JZm9yIChpID0gMDsgaSA8IGVsZW1zLnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJaW50IHJhdGUgPSAoZWxlbXMuc3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKLQkJZm9yIChqID0gMDsgaiA8IG1vZGUtPm51bV9yYXRlczsgaisrKQotCQkJaWYgKG1vZGUtPnJhdGVzW2pdLnJhdGUgPT0gcmF0ZSkKLQkJCQlyYXRlcyB8PSBCSVQoaik7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBlbGVtcy5leHRfc3VwcF9yYXRlc19sZW47IGkrKykgewotCQlpbnQgcmF0ZSA9IChlbGVtcy5leHRfc3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKLQkJZm9yIChqID0gMDsgaiA8IG1vZGUtPm51bV9yYXRlczsgaisrKQotCQkJaWYgKG1vZGUtPnJhdGVzW2pdLnJhdGUgPT0gcmF0ZSkKLQkJCQlyYXRlcyB8PSBCSVQoaik7Ci0JfQotCXN0YS0+c3VwcF9yYXRlcyA9IHJhdGVzOwotCi0JaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKLQkgICAgbG9jYWwtPm9wcy0+Y29uZl9odCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvIGJzc19pbmZvOwotCi0JCWllZWU4MDIxMV9odF9jYXBfaWVfdG9faHRfaW5mbygKLQkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKLQkJCQllbGVtcy5odF9jYXBfZWxlbSwgJnN0YS0+aHRfaW5mbyk7Ci0JCWllZWU4MDIxMV9odF9hZGR0X2luZm9faWVfdG9faHRfYnNzX2luZm8oCi0JCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICopCi0JCQkJZWxlbXMuaHRfaW5mb19lbGVtLCAmYnNzX2luZm8pOwotCQlpZWVlODAyMTFfaHdfY29uZmlnX2h0KGxvY2FsLCAxLCAmc3RhLT5odF9pbmZvLCAmYnNzX2luZm8pOwotCX0KLQotCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhLCBsb2NhbCk7Ci0KLQlpZiAoZWxlbXMud21tX3BhcmFtICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgewotCQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1dNRTsKLQkJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGRldiwgaWZzdGEsIGVsZW1zLndtbV9wYXJhbSwKLQkJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwotCX0KLQotCi0Jc3RhX2luZm9fcHV0KHN0YSk7Ci0KLQlpZWVlODAyMTFfYXNzb2NpYXRlZChkZXYsIGlmc3RhKTsKLX0KLQotCi0vKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5zdGFfYnNzX2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCWJzcy0+aG5leHQgPSBsb2NhbC0+c3RhX2Jzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXTsKLQlsb2NhbC0+c3RhX2Jzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXSA9IGJzczsKLX0KLQotCi0vKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5zdGFfYnNzX2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYiwgKnByZXYgPSBOVUxMOwotCWIgPSBsb2NhbC0+c3RhX2Jzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXTsKLQl3aGlsZSAoYikgewotCQlpZiAoYiA9PSBic3MpIHsKLQkJCWlmICghcHJldikKLQkJCQlsb2NhbC0+c3RhX2Jzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXSA9Ci0JCQkJCWJzcy0+aG5leHQ7Ci0JCQllbHNlCi0JCQkJcHJldi0+aG5leHQgPSBic3MtPmhuZXh0OwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJldiA9IGI7Ci0JCWIgPSBiLT5obmV4dDsKLQl9Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqCi1pZWVlODAyMTFfcnhfYnNzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYnNzaWQsIGludCBjaGFubmVsLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOwotCi0JYnNzID0ga3phbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOwotCWlmICghYnNzKQotCQlyZXR1cm4gTlVMTDsKLQlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKLQlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKLQltZW1jcHkoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQlic3MtPmNoYW5uZWwgPSBjaGFubmVsOwotCWlmIChzc2lkICYmIHNzaWRfbGVuIDw9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKLQkJbWVtY3B5KGJzcy0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCQlic3MtPnNzaWRfbGVuID0gc3NpZF9sZW47Ci0JfQotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKLQkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwotCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5zdGFfYnNzX2xpc3QpOwotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChkZXYsIGJzcyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqCi1pZWVlODAyMTFfcnhfYnNzX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYnNzaWQsIGludCBjaGFubmVsLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKLQlic3MgPSBsb2NhbC0+c3RhX2Jzc19oYXNoW1NUQV9IQVNIKGJzc2lkKV07Ci0Jd2hpbGUgKGJzcykgewotCQlpZiAoIW1lbWNtcChic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICYmCi0JCSAgICBic3MtPmNoYW5uZWwgPT0gY2hhbm5lbCAmJgotCQkgICAgYnNzLT5zc2lkX2xlbiA9PSBzc2lkX2xlbiAmJgotCQkgICAgKHNzaWRfbGVuID09IDAgfHwgIW1lbWNtcChic3MtPnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkpIHsKLQkJCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnNzID0gYnNzLT5obmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19mcmVlKHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKQotewotCWtmcmVlKGJzcy0+d3BhX2llKTsKLQlrZnJlZShic3MtPnJzbl9pZSk7Ci0Ja2ZyZWUoYnNzLT53bW1faWUpOwotCWtmcmVlKGJzcy0+aHRfaWUpOwotCWtmcmVlKGJzcyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmJzcy0+dXNlcnMpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChkZXYsIGJzcyk7Ci0JbGlzdF9kZWwoJmJzcy0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwotCWllZWU4MDIxMV9yeF9ic3NfZnJlZShic3MpOwotfQotCi0KLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPnN0YV9ic3NfbGlzdCk7Ci19Ci0KLQotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcCwgJmxvY2FsLT5zdGFfYnNzX2xpc3QsIGxpc3QpCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgIHNpemVfdCBsZW4sCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAotCQkJCSAgaW50IGJlYWNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwotCXNpemVfdCBiYXNlbGVuOwotCWludCBjaGFubmVsLCBjbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQl1NjQgdGltZXN0YW1wOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCURFQ0xBUkVfTUFDX0JVRihtYWMyKTsKLQotCWlmICghYmVhY29uICYmIG1lbWNtcChtZ210LT5kYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQotCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCi0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCAlcyBmcm9tICVzIHRvICVzXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGJlYWNvbiA/ICJCZWFjb24iIDogIlByb2JlIFJlc3BvbnNlIiwKLQkgICAgICAgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCBwcmludF9tYWMobWFjMiwgbWdtdC0+ZGEpKTsKLSNlbmRpZgotCi0JYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OwotCWlmIChiYXNlbGVuID4gbGVuKQotCQlyZXR1cm47Ci0KLQl0aW1lc3RhbXAgPSBsZTY0X3RvX2NwdShtZ210LT51LmJlYWNvbi50aW1lc3RhbXApOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmIGJlYWNvbiAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3RzZl9kZWJ1ZyA9IDA7Ci0JCXU2NCB0c2Y7Ci0JCWlmIChsb2NhbC0+b3BzLT5nZXRfdHNmKQotCQkJdHNmID0gbG9jYWwtPm9wcy0+Z2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwotCQllbHNlCi0JCQl0c2YgPSAtMUxMVTsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF90c2ZfZGVidWcgKyA1ICogSFopKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVzIEJTU0lEPSIKLQkJCSAgICAgICAiJXMgVFNGPTB4JWxseCBCQ049MHglbGx4IGRpZmY9JWxsZCAiCi0JCQkgICAgICAgIkAlbHVcbiIsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCBwcmludF9tYWMobWFjMiwgbWdtdC0+YnNzaWQpLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdHNmLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdGltZXN0YW1wLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHRzZiAtIHRpbWVzdGFtcCksCi0JCQkgICAgICAgamlmZmllcyk7Ci0JCQlsYXN0X3RzZl9kZWJ1ZyA9IGppZmZpZXM7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCX0KLQotCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZlbGVtcyk7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYgZWxlbXMuc3VwcF9yYXRlcyAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKLQkgICAgKHN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpKSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGU7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZXM7Ci0JCXNpemVfdCBudW1fcmF0ZXM7Ci0JCXUzMiBzdXBwX3JhdGVzLCBwcmV2X3JhdGVzOwotCQlpbnQgaSwgajsKLQotCQltb2RlID0gbG9jYWwtPnN0YV9zd19zY2FubmluZyA/Ci0JCSAgICAgICBsb2NhbC0+c2Nhbl9od19tb2RlIDogbG9jYWwtPm9wZXJfaHdfbW9kZTsKLQotCQlpZiAobG9jYWwtPnN0YV9od19zY2FubmluZykgewotCQkJLyogc2VhcmNoIGZvciB0aGUgY29ycmVjdCBtb2RlIG1hdGNoZXMgdGhlIGJlYWNvbiAqLwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmbG9jYWwtPm1vZGVzX2xpc3QsIGxpc3QpCi0JCQkJaWYgKG1vZGUtPm1vZGUgPT0gcnhfc3RhdHVzLT5waHltb2RlKQotCQkJCQlicmVhazsKLQotCQkJaWYgKG1vZGUgPT0gTlVMTCkKLQkJCQltb2RlID0gbG9jYWwtPm9wZXJfaHdfbW9kZTsKLQkJfQotCQlyYXRlcyA9IG1vZGUtPnJhdGVzOwotCQludW1fcmF0ZXMgPSBtb2RlLT5udW1fcmF0ZXM7Ci0KLQkJc3VwcF9yYXRlcyA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBlbGVtcy5zdXBwX3JhdGVzX2xlbiArCi0JCQkgICAgIGVsZW1zLmV4dF9zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCQl1OCByYXRlID0gMDsKLQkJCWludCBvd25fcmF0ZTsKLQkJCWlmIChpIDwgZWxlbXMuc3VwcF9yYXRlc19sZW4pCi0JCQkJcmF0ZSA9IGVsZW1zLnN1cHBfcmF0ZXNbaV07Ci0JCQllbHNlIGlmIChlbGVtcy5leHRfc3VwcF9yYXRlcykKLQkJCQlyYXRlID0gZWxlbXMuZXh0X3N1cHBfcmF0ZXMKLQkJCQkJW2kgLSBlbGVtcy5zdXBwX3JhdGVzX2xlbl07Ci0JCQlvd25fcmF0ZSA9IDUgKiAocmF0ZSAmIDB4N2YpOwotCQkJZm9yIChqID0gMDsgaiA8IG51bV9yYXRlczsgaisrKQotCQkJCWlmIChyYXRlc1tqXS5yYXRlID09IG93bl9yYXRlKQotCQkJCQlzdXBwX3JhdGVzIHw9IEJJVChqKTsKLQkJfQotCi0JCXByZXZfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXM7Ci0JCXN0YS0+c3VwcF9yYXRlcyAmPSBzdXBwX3JhdGVzOwotCQlpZiAoc3RhLT5zdXBwX3JhdGVzID09IDApIHsKLQkJCS8qIE5vIG1hdGNoaW5nIHJhdGVzIC0gdGhpcyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4uCi0JCQkgKiBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgcmF0ZSBpcyBtYXJrZWQKLQkJCSAqIHN1cHBvcnRlZCB0byBhdm9pZCBpc3N1ZXMgd2l0aCBUWCByYXRlIGN0cmwuICovCi0JCQlzdGEtPnN1cHBfcmF0ZXMgPSBzZGF0YS0+dS5zdGEuc3VwcF9yYXRlc19iaXRzOwotCQl9Ci0JCWlmIChzdGEtPnN1cHBfcmF0ZXMgIT0gcHJldl9yYXRlcykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1cGRhdGVkIHN1cHBfcmF0ZXMgc2V0IGZvciAiCi0JCQkgICAgICAgIiVzIGJhc2VkIG9uIGJlYWNvbiBpbmZvICgweCV4ICYgMHgleCAtPiAiCi0JCQkgICAgICAgIjB4JXgpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSwgcHJldl9yYXRlcywKLQkJCSAgICAgICBzdXBwX3JhdGVzLCBzdGEtPnN1cHBfcmF0ZXMpOwotCQl9Ci0JCXN0YV9pbmZvX3B1dChzdGEpOwotCX0KLQotCWlmICghZWxlbXMuc3NpZCkKLQkJcmV0dXJuOwotCi0JaWYgKGVsZW1zLmRzX3BhcmFtcyAmJiBlbGVtcy5kc19wYXJhbXNfbGVuID09IDEpCi0JCWNoYW5uZWwgPSBlbGVtcy5kc19wYXJhbXNbMF07Ci0JZWxzZQotCQljaGFubmVsID0gcnhfc3RhdHVzLT5jaGFubmVsOwotCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBtZ210LT5ic3NpZCwgY2hhbm5lbCwKLQkJCQkgICBlbGVtcy5zc2lkLCBlbGVtcy5zc2lkX2xlbik7Ci0JaWYgKCFic3MpIHsKLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19hZGQoZGV2LCBtZ210LT5ic3NpZCwgY2hhbm5lbCwKLQkJCQkJICAgZWxlbXMuc3NpZCwgZWxlbXMuc3NpZF9sZW4pOwotCQlpZiAoIWJzcykKLQkJCXJldHVybjsKLQl9IGVsc2UgewotI2lmIDAKLQkJLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KLQkJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5zdGFfYnNzX2xpc3QpOwotCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoYnNzLT5wcm9iZV9yZXNwICYmIGJlYWNvbikgewotCQkvKiBEbyBub3QgYWxsb3cgYmVhY29uIHRvIG92ZXJyaWRlIGRhdGEgZnJvbSBQcm9iZSBSZXNwb25zZS4gKi8KLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogc2F2ZSB0aGUgRVJQIHZhbHVlIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGF0IGFzc29jaWF0aW9uIHRpbWUgKi8KLQlpZiAoZWxlbXMuZXJwX2luZm8gJiYgZWxlbXMuZXJwX2luZm9fbGVuID49IDEpIHsKLQkJYnNzLT5lcnBfdmFsdWUgPSBlbGVtcy5lcnBfaW5mb1swXTsKLQkJYnNzLT5oYXNfZXJwX3ZhbHVlID0gMTsKLQl9Ci0KLQlic3MtPmJlYWNvbl9pbnQgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5iZWFjb25faW50KTsKLQlic3MtPmNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvKTsKLQotCWJzcy0+c3VwcF9yYXRlc19sZW4gPSAwOwotCWlmIChlbGVtcy5zdXBwX3JhdGVzKSB7Ci0JCWNsZW4gPSBJRUVFODAyMTFfTUFYX1NVUFBfUkFURVMgLSBic3MtPnN1cHBfcmF0ZXNfbGVuOwotCQlpZiAoY2xlbiA+IGVsZW1zLnN1cHBfcmF0ZXNfbGVuKQotCQkJY2xlbiA9IGVsZW1zLnN1cHBfcmF0ZXNfbGVuOwotCQltZW1jcHkoJmJzcy0+c3VwcF9yYXRlc1tic3MtPnN1cHBfcmF0ZXNfbGVuXSwgZWxlbXMuc3VwcF9yYXRlcywKLQkJICAgICAgIGNsZW4pOwotCQlic3MtPnN1cHBfcmF0ZXNfbGVuICs9IGNsZW47Ci0JfQotCWlmIChlbGVtcy5leHRfc3VwcF9yYXRlcykgewotCQljbGVuID0gSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTIC0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKLQkJaWYgKGNsZW4gPiBlbGVtcy5leHRfc3VwcF9yYXRlc19sZW4pCi0JCQljbGVuID0gZWxlbXMuZXh0X3N1cHBfcmF0ZXNfbGVuOwotCQltZW1jcHkoJmJzcy0+c3VwcF9yYXRlc1tic3MtPnN1cHBfcmF0ZXNfbGVuXSwKLQkJICAgICAgIGVsZW1zLmV4dF9zdXBwX3JhdGVzLCBjbGVuKTsKLQkJYnNzLT5zdXBwX3JhdGVzX2xlbiArPSBjbGVuOwotCX0KLQotCWlmIChlbGVtcy53cGEgJiYKLQkgICAgKCFic3MtPndwYV9pZSB8fCBic3MtPndwYV9pZV9sZW4gIT0gZWxlbXMud3BhX2xlbiB8fAotCSAgICAgbWVtY21wKGJzcy0+d3BhX2llLCBlbGVtcy53cGEsIGVsZW1zLndwYV9sZW4pKSkgewotCQlrZnJlZShic3MtPndwYV9pZSk7Ci0JCWJzcy0+d3BhX2llID0ga21hbGxvYyhlbGVtcy53cGFfbGVuICsgMiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChic3MtPndwYV9pZSkgewotCQkJbWVtY3B5KGJzcy0+d3BhX2llLCBlbGVtcy53cGEgLSAyLCBlbGVtcy53cGFfbGVuICsgMik7Ci0JCQlic3MtPndwYV9pZV9sZW4gPSBlbGVtcy53cGFfbGVuICsgMjsKLQkJfSBlbHNlCi0JCQlic3MtPndwYV9pZV9sZW4gPSAwOwotCX0gZWxzZSBpZiAoIWVsZW1zLndwYSAmJiBic3MtPndwYV9pZSkgewotCQlrZnJlZShic3MtPndwYV9pZSk7Ci0JCWJzcy0+d3BhX2llID0gTlVMTDsKLQkJYnNzLT53cGFfaWVfbGVuID0gMDsKLQl9Ci0KLQlpZiAoZWxlbXMucnNuICYmCi0JICAgICghYnNzLT5yc25faWUgfHwgYnNzLT5yc25faWVfbGVuICE9IGVsZW1zLnJzbl9sZW4gfHwKLQkgICAgIG1lbWNtcChic3MtPnJzbl9pZSwgZWxlbXMucnNuLCBlbGVtcy5yc25fbGVuKSkpIHsKLQkJa2ZyZWUoYnNzLT5yc25faWUpOwotCQlic3MtPnJzbl9pZSA9IGttYWxsb2MoZWxlbXMucnNuX2xlbiArIDIsIEdGUF9BVE9NSUMpOwotCQlpZiAoYnNzLT5yc25faWUpIHsKLQkJCW1lbWNweShic3MtPnJzbl9pZSwgZWxlbXMucnNuIC0gMiwgZWxlbXMucnNuX2xlbiArIDIpOwotCQkJYnNzLT5yc25faWVfbGVuID0gZWxlbXMucnNuX2xlbiArIDI7Ci0JCX0gZWxzZQotCQkJYnNzLT5yc25faWVfbGVuID0gMDsKLQl9IGVsc2UgaWYgKCFlbGVtcy5yc24gJiYgYnNzLT5yc25faWUpIHsKLQkJa2ZyZWUoYnNzLT5yc25faWUpOwotCQlic3MtPnJzbl9pZSA9IE5VTEw7Ci0JCWJzcy0+cnNuX2llX2xlbiA9IDA7Ci0JfQotCi0JaWYgKGVsZW1zLndtbV9wYXJhbSAmJgotCSAgICAoIWJzcy0+d21tX2llIHx8IGJzcy0+d21tX2llX2xlbiAhPSBlbGVtcy53bW1fcGFyYW1fbGVuIHx8Ci0JICAgICBtZW1jbXAoYnNzLT53bW1faWUsIGVsZW1zLndtbV9wYXJhbSwgZWxlbXMud21tX3BhcmFtX2xlbikpKSB7Ci0JCWtmcmVlKGJzcy0+d21tX2llKTsKLQkJYnNzLT53bW1faWUgPSBrbWFsbG9jKGVsZW1zLndtbV9wYXJhbV9sZW4gKyAyLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJzcy0+d21tX2llKSB7Ci0JCQltZW1jcHkoYnNzLT53bW1faWUsIGVsZW1zLndtbV9wYXJhbSAtIDIsCi0JCQkgICAgICAgZWxlbXMud21tX3BhcmFtX2xlbiArIDIpOwotCQkJYnNzLT53bW1faWVfbGVuID0gZWxlbXMud21tX3BhcmFtX2xlbiArIDI7Ci0JCX0gZWxzZQotCQkJYnNzLT53bW1faWVfbGVuID0gMDsKLQl9IGVsc2UgaWYgKCFlbGVtcy53bW1fcGFyYW0gJiYgYnNzLT53bW1faWUpIHsKLQkJa2ZyZWUoYnNzLT53bW1faWUpOwotCQlic3MtPndtbV9pZSA9IE5VTEw7Ci0JCWJzcy0+d21tX2llX2xlbiA9IDA7Ci0JfQotCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJgotCSAgICAoIWJzcy0+aHRfaWUgfHwgYnNzLT5odF9pZV9sZW4gIT0gZWxlbXMuaHRfY2FwX2VsZW1fbGVuIHx8Ci0JICAgICBtZW1jbXAoYnNzLT5odF9pZSwgZWxlbXMuaHRfY2FwX2VsZW0sIGVsZW1zLmh0X2NhcF9lbGVtX2xlbikpKSB7Ci0JCWtmcmVlKGJzcy0+aHRfaWUpOwotCQlic3MtPmh0X2llID0ga21hbGxvYyhlbGVtcy5odF9jYXBfZWxlbV9sZW4gKyAyLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJzcy0+aHRfaWUpIHsKLQkJCW1lbWNweShic3MtPmh0X2llLCBlbGVtcy5odF9jYXBfZWxlbSAtIDIsCi0JCQkgICAgICAgZWxlbXMuaHRfY2FwX2VsZW1fbGVuICsgMik7Ci0JCQlic3MtPmh0X2llX2xlbiA9IGVsZW1zLmh0X2NhcF9lbGVtX2xlbiArIDI7Ci0JCX0gZWxzZQotCQkJYnNzLT5odF9pZV9sZW4gPSAwOwotCX0gZWxzZSBpZiAoIWVsZW1zLmh0X2NhcF9lbGVtICYmIGJzcy0+aHRfaWUpIHsKLQkJa2ZyZWUoYnNzLT5odF9pZSk7Ci0JCWJzcy0+aHRfaWUgPSBOVUxMOwotCQlic3MtPmh0X2llX2xlbiA9IDA7Ci0JfQotCi0JYnNzLT5od19tb2RlID0gcnhfc3RhdHVzLT5waHltb2RlOwotCWJzcy0+ZnJlcSA9IHJ4X3N0YXR1cy0+ZnJlcTsKLQlpZiAoY2hhbm5lbCAhPSByeF9zdGF0dXMtPmNoYW5uZWwgJiYKLQkgICAgKGJzcy0+aHdfbW9kZSA9PSBNT0RFX0lFRUU4MDIxMUcgfHwKLQkgICAgIGJzcy0+aHdfbW9kZSA9PSBNT0RFX0lFRUU4MDIxMUIpICYmCi0JICAgIGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KSB7Ci0JCXN0YXRpYyBjb25zdCBpbnQgZnJlcV9saXN0W10gPSB7Ci0JCQkyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NAotCQl9OwotCQkvKiBJRUVFIDgwMi4xMWcvYiBtb2RlIGNhbiByZWNlaXZlIHBhY2tldHMgZnJvbSBuZWlnaGJvcmluZwotCQkgKiBjaGFubmVscywgc28gbWFwIHRoZSBjaGFubmVsIGludG8gZnJlcXVlbmN5LiAqLwotCQlic3MtPmZyZXEgPSBmcmVxX2xpc3RbY2hhbm5lbCAtIDFdOwotCX0KLQlic3MtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKLQlic3MtPnJzc2kgPSByeF9zdGF0dXMtPnNzaTsKLQlic3MtPnNpZ25hbCA9IHJ4X3N0YXR1cy0+c2lnbmFsOwotCWJzcy0+bm9pc2UgPSByeF9zdGF0dXMtPm5vaXNlOwotCWlmICghYmVhY29uKQotCQlic3MtPnByb2JlX3Jlc3ArKzsKLQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQkgc2l6ZV90IGxlbiwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0JaWVlZTgwMjExX3J4X2Jzc19pbmZvKGRldiwgbWdtdCwgbGVuLCByeF9zdGF0dXMsIDApOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgICAgc2l6ZV90IGxlbiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwotCXNpemVfdCBiYXNlbGVuOwotCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsLT5ody5jb25mOwotCXUzMiBjaGFuZ2VkID0gMDsKLQotCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhkZXYsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAxKTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkKLQkJcmV0dXJuOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm47Ci0KLQkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLwotCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKLQlpZiAoYmFzZWxlbiA+IGxlbikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKLQotCWlmIChlbGVtcy5lcnBfaW5mbyAmJiBlbGVtcy5lcnBfaW5mb19sZW4gPj0gMSkKLQkJY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2VycF9pZShzZGF0YSwgZWxlbXMuZXJwX2luZm9bMF0pOwotCi0JaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJgotCSAgICBlbGVtcy53bW1fcGFyYW0gJiYgbG9jYWwtPm9wcy0+Y29uZl9odCAmJgotCSAgICBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvIGJzc19pbmZvOwotCi0JCWllZWU4MDIxMV9odF9hZGR0X2luZm9faWVfdG9faHRfYnNzX2luZm8oCi0JCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICopCi0JCQkJZWxlbXMuaHRfaW5mb19lbGVtLCAmYnNzX2luZm8pOwotCQkvKiBjaGVjayBpZiBBUCBjaGFuZ2VkIGJzcyBpbmZvcmFtYXRpb24gKi8KLQkJaWYgKChjb25mLT5odF9ic3NfY29uZi5wcmltYXJ5X2NoYW5uZWwgIT0KLQkJICAgICBic3NfaW5mby5wcmltYXJ5X2NoYW5uZWwpIHx8Ci0JCSAgICAoY29uZi0+aHRfYnNzX2NvbmYuYnNzX2NhcCAhPSBic3NfaW5mby5ic3NfY2FwKSB8fAotCQkgICAgKGNvbmYtPmh0X2Jzc19jb25mLmJzc19vcF9tb2RlICE9IGJzc19pbmZvLmJzc19vcF9tb2RlKSkKLQkJCWllZWU4MDIxMV9od19jb25maWdfaHQobG9jYWwsIDEsICZjb25mLT5odF9jb25mLAotCQkJCQkJJmJzc19pbmZvKTsKLQl9Ci0KLQlpZiAoZWxlbXMud21tX3BhcmFtICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgewotCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoZGV2LCBpZnN0YSwgZWxlbXMud21tX3BhcmFtLAotCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7Ci0JfQotCi0JaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkJc2l6ZV90IGxlbiwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpbnQgdHhfbGFzdF9iZWFjb247Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7Ci0JdTggKnBvcywgKmVuZDsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCURFQ0xBUkVfTUFDX0JVRihtYWMyKTsKLQlERUNMQVJFX01BQ19CVUYobWFjMyk7Ci0jZW5kaWYKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyB8fAotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfSk9JTkVEIHx8Ci0JICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZzdGEtPnByb2JlX3Jlc3ApCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKLQkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOwotCWVsc2UKLQkJdHhfbGFzdF9iZWFjb24gPSAxOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVzIERBPSVzIEJTU0lEPSIKLQkgICAgICAgIiVzICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCBwcmludF9tYWMobWFjMiwgbWdtdC0+ZGEpLAotCSAgICAgICBwcmludF9tYWMobWFjMywgbWdtdC0+YnNzaWQpLCB0eF9sYXN0X2JlYWNvbik7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQotCWlmICghdHhfbGFzdF9iZWFjb24pCi0JCXJldHVybjsKLQotCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKLQkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwgRVRIX0FMRU4pICE9IDApCi0JCXJldHVybjsKLQotCWVuZCA9ICgodTggKikgbWdtdCkgKyBsZW47Ci0JcG9zID0gbWdtdC0+dS5wcm9iZV9yZXEudmFyaWFibGU7Ci0JaWYgKHBvc1swXSAhPSBXTEFOX0VJRF9TU0lEIHx8Ci0JICAgIHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIFNTSUQgSUUgaW4gUHJvYmVSZXEgIgotCQkJICAgICAgICJmcm9tICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCWlmIChwb3NbMV0gIT0gMCAmJgotCSAgICAocG9zWzFdICE9IGlmc3RhLT5zc2lkX2xlbiB8fAotCSAgICAgbWVtY21wKHBvcyArIDIsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pICE9IDApKSB7Ci0JCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLwotCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCi0JcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXNcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgcmVzcC0+ZGEpKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hY3Rpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgIHNpemVfdCBsZW4pCi17Ci0JaWYgKGxlbiA8IElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUpCi0JCXJldHVybjsKLQotCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkpIHsKLQljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzoKLQkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSkgewotCQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFUToKLQkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCi0JCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxKSkpCi0JCQkJYnJlYWs7Ci0JCQlpZWVlODAyMTFfc3RhX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChkZXYsIG1nbXQsIGxlbik7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0FDVElPTl9ERUxCQToKLQkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCi0JCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEpKSkKLQkJCQlicmVhazsKLQkJCWllZWU4MDIxMV9zdGFfcHJvY2Vzc19kZWxiYShkZXYsIG1nbXQsIGxlbik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJ4IHVua25vd24gQS1NUERVIGFjdGlvblxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBmYzsKLQotCWlmIChza2ItPmxlbiA8IDI0KQotCQlnb3RvIGZhaWw7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7Ci0KLQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCW1lbWNweShza2ItPmNiLCByeF9zdGF0dXMsIHNpemVvZigqcnhfc3RhdHVzKSk7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgotCQlza2JfcXVldWVfdGFpbCgmaWZzdGEtPnNrYl9xdWV1ZSwgc2tiKTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCB1bmtub3duIG1hbmFnZW1lbnQgZnJhbWUgLSAiCi0JCSAgICAgICAic3R5cGU9JWRcbiIsIGRldi0+bmFtZSwKLQkJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0KTsKLQkJYnJlYWs7Ci0JfQotCi0gZmFpbDoKLQlrZnJlZV9za2Ioc2tiKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgZmM7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0Jcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7Ci0KLQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6Ci0JCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShkZXYsIGlmc3RhLCBtZ210LCBza2ItPmxlbiwKLQkJCQkJICAgIHJ4X3N0YXR1cyk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6Ci0JCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3AoZGV2LCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oZGV2LCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChkZXYsIGlmc3RhLCBtZ210LCBza2ItPmxlbik7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbiwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuLCAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgotCQlpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoZGV2LCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKLQkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2MoZGV2LCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ1RJT046Ci0JCWllZWU4MDIxMV9yeF9tZ210X2FjdGlvbihkZXYsIGlmc3RhLCBtZ210LCBza2ItPmxlbik7Ci0JCWJyZWFrOwotCX0KLQotCWtmcmVlX3NrYihza2IpOwotfQotCi0KLWllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3N0YV9yeF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBmYzsKLQotCWlmIChza2ItPmxlbiA8IDIpCi0JCXJldHVybiBUWFJYX0RST1A7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKLQotCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7Ci0KLQlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJcmV0dXJuIFRYUlhfRFJPUDsKLQotCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpIHsKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCkgewotCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChkZXYsIG1nbXQsCi0JCQkJCQkgICAgIHNrYi0+bGVuLCByeF9zdGF0dXMpOwotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIFRYUlhfUVVFVUVEOwotCQl9IGVsc2UgaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKSB7Ci0JCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oZGV2LCBtZ210LCBza2ItPmxlbiwKLQkJCQkJCSByeF9zdGF0dXMpOwotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIFRYUlhfUVVFVUVEOwotCQl9Ci0JfQotCXJldHVybiBUWFJYX0NPTlRJTlVFOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0JaW50IGFjdGl2ZSA9IDA7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0KLQlyZWFkX2xvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHN0YS0+ZGV2ID09IGRldiAmJgotCQkgICAgdGltZV9hZnRlcihzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCwKLQkJCSAgICAgICBqaWZmaWVzKSkgewotCQkJYWN0aXZlKys7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZWFkX3VubG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKLQotCXJldHVybiBhY3RpdmU7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9leHBpcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqdG1wOwotCUxJU1RfSEVBRCh0bXBfbGlzdCk7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLQl3cml0ZV9sb2NrX2JoKCZsb2NhbC0+c3RhX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhLT5sYXN0X3J4ICsKLQkJCSAgICAgICBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleHBpcmluZyBpbmFjdGl2ZSBTVEEgJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKLQkJCV9fc3RhX2luZm9fZ2V0KHN0YSk7Ci0JCQlzdGFfaW5mb19yZW1vdmUoc3RhKTsKLQkJCWxpc3RfYWRkKCZzdGEtPmxpc3QsICZ0bXBfbGlzdCk7Ci0JCX0KLQl3cml0ZV91bmxvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RhLCB0bXAsICZ0bXBfbGlzdCwgbGlzdCkgewotCQlzdGFfaW5mb19mcmVlKHN0YSk7Ci0JCXN0YV9pbmZvX3B1dChzdGEpOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9zdGFfZXhwaXJlKGRldik7Ci0JaWYgKGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3MoZGV2KSkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKLQkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgZGV2LT5uYW1lKTsKLQlpZWVlODAyMTFfc3RhX3JlcV9zY2FuKGRldiwgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci19Ci0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9Ci0JCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdigmc2RhdGEtPndkZXYpOwotCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOwotfQotCi0KLXZvaWQgaWVlZTgwMjExX3N0YV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LnN0YS53b3JrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2RhdGEtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+c3RhX3N3X3NjYW5uaW5nIHx8IGxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcpCi0JCXJldHVybjsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaWVlZTgwMjExX3N0YV93b3JrOiBub24tU1RBIGludGVyZmFjZSAiCi0JCSAgICAgICAiKHR5cGU9JWQpXG4iLCBkZXYtPm5hbWUsIHNkYXRhLT52aWYudHlwZSk7Ci0JCXJldHVybjsKLQl9Ci0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZzdGEtPnNrYl9xdWV1ZSkpKQotCQlpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KGRldiwgc2tiKTsKLQotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURSAmJgotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0FTU09DSUFURSAmJgotCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KSkgewotCQlpZiAoaWZzdGEtPnNjYW5fc3NpZF9sZW4pCi0JCQlpZWVlODAyMTFfc3RhX3N0YXJ0X3NjYW4oZGV2LCBpZnN0YS0+c2Nhbl9zc2lkLCBpZnN0YS0+c2Nhbl9zc2lkX2xlbik7Ci0JCWVsc2UKLQkJCWllZWU4MDIxMV9zdGFfc3RhcnRfc2NhbihkZXYsIE5VTEwsIDApOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpKSB7Ci0JCWlmIChpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKGRldiwgaWZzdGEpKQotCQkJcmV0dXJuOwotCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpOwotCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCkpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoaWZzdGEtPnN0YXRlKSB7Ci0JY2FzZSBJRUVFODAyMTFfRElTQUJMRUQ6Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0FVVEhFTlRJQ0FURToKLQkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShkZXYsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfQVNTT0NJQVRFOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlKGRldiwgaWZzdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9BU1NPQ0lBVEVEOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlZChkZXYsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfSUJTU19TRUFSQ0g6Ci0JCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKGRldiwgaWZzdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9JQlNTX0pPSU5FRDoKLQkJaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKGRldiwgaWZzdGEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX3N0YV93b3JrOiBVbmtub3duIHN0YXRlICVkXG4iLAotCQkgICAgICAgaWZzdGEtPnN0YXRlKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKGRldiwgaWZzdGEpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcHJpdmFjeSBjb25maWd1cmF0aW9uIG1pc21hdGNoIGFuZCAiCi0JCSAgICAgICAibWl4ZWQtY2VsbCBkaXNhYmxlZCAtIGRpc2Fzc29jaWF0ZVxuIiwgZGV2LT5uYW1lKTsKLQotCQlpZWVlODAyMTFfc2VuZF9kaXNhc3NvYyhkZXYsIGlmc3RhLCBXTEFOX1JFQVNPTl9VTlNQRUNJRklFRCk7Ci0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2MoZGV2LCBpZnN0YSwgMCk7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7Ci0JCS8qIFJlc2V0IG93biBUU0YgdG8gYWxsb3cgdGltZSBzeW5jaHJvbml6YXRpb24gd29yay4gKi8KLQkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7Ci0JfQotCi0JaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCA9IC0xOyAvKiBhbGxvdyBhbnkgV01NIHVwZGF0ZSAqLwotCi0KLQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwotCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0xFQVA7Ci0JZWxzZQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluaXRpYWwgYXV0aF9hbGc9JWRcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgaWZzdGEtPmF1dGhfYWxnKTsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IC0xOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwotCWlmc3RhLT5hdXRoX3RyaWVzID0gaWZzdGEtPmFzc29jX3RyaWVzID0gMDsKLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotfQotCi0KLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQotCQlyZXR1cm47Ci0KLQlpZiAoKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCB8Ci0JCQkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkpICYmCi0JICAgIChpZnN0YS0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9TU0lEX1NFVCB8Ci0JCQkJSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSkpIHsKLQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgIGNvbnN0IGNoYXIgKnNzaWQsIGludCBzc2lkX2xlbikKLXsKLQlpbnQgdG1wLCBoaWRkZW5fc3NpZDsKLQotCWlmIChzc2lkX2xlbiA9PSBpZnN0YS0+c3NpZF9sZW4gJiYKLQkgICAgIW1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pKQotCQlyZXR1cm4gMTsKLQotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQotCQlyZXR1cm4gMDsKLQotCWhpZGRlbl9zc2lkID0gMTsKLQl0bXAgPSBzc2lkX2xlbjsKLQl3aGlsZSAodG1wLS0pIHsKLQkJaWYgKHNzaWRbdG1wXSAhPSAnXDAnKSB7Ci0JCQloaWRkZW5fc3NpZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChoaWRkZW5fc3NpZCAmJiBpZnN0YS0+c3NpZF9sZW4gPT0gc3NpZF9sZW4pCi0JCXJldHVybiAxOwotCi0JaWYgKHNzaWRfbGVuID09IDEgJiYgc3NpZFswXSA9PSAnICcpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzLCAqc2VsZWN0ZWQgPSBOVUxMOwotCWludCB0b3BfcnNzaSA9IDAsIGZyZXE7Ci0KLQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMIHwKLQkgICAgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8IElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9BVVRIRU5USUNBVEU7Ci0JCWllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChkZXYsIGlmc3RhKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKLQlmcmVxID0gbG9jYWwtPm9wZXJfY2hhbm5lbC0+ZnJlcTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmxvY2FsLT5zdGFfYnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoISEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIF4KLQkJICAgICEhc2RhdGEtPmRlZmF1bHRfa2V5KQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKSAmJgotCQkgICAgYnNzLT5mcmVxICE9IGZyZXEpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKSAmJgotCQkgICAgbWVtY21wKGJzcy0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSAmJgotCQkgICAgIWllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChpZnN0YSwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghc2VsZWN0ZWQgfHwgdG9wX3Jzc2kgPCBic3MtPnJzc2kpIHsKLQkJCXNlbGVjdGVkID0gYnNzOwotCQkJdG9wX3Jzc2kgPSBic3MtPnJzc2k7Ci0JCX0KLQl9Ci0JaWYgKHNlbGVjdGVkKQotCQlhdG9taWNfaW5jKCZzZWxlY3RlZC0+dXNlcnMpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKLQotCWlmIChzZWxlY3RlZCkgewotCQlpZWVlODAyMTFfc2V0X2NoYW5uZWwobG9jYWwsIC0xLCBzZWxlY3RlZC0+ZnJlcSk7Ci0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQpKQotCQkJaWVlZTgwMjExX3N0YV9zZXRfc3NpZChkZXYsIHNlbGVjdGVkLT5zc2lkLAotCQkJCQkgICAgICAgc2VsZWN0ZWQtPnNzaWRfbGVuKTsKLQkJaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoZGV2LCBzZWxlY3RlZC0+YnNzaWQpOwotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIHNlbGVjdGVkKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURTsKLQkJaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKGRldiwgaWZzdGEpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9BVVRIRU5USUNBVEUpIHsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpCi0JCQkJaWVlZTgwMjExX3N0YV9zdGFydF9zY2FuKGRldiwgTlVMTCwgMCk7Ci0JCQllbHNlCi0JCQkJaWVlZTgwMjExX3N0YV9zdGFydF9zY2FuKGRldiwgaWZzdGEtPnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkX2xlbik7Ci0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfQVVUSEVOVElDQVRFOwotCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpOwotCQl9IGVsc2UKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0JaW50IHJlcywgcmF0ZXMsIGksIGo7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sIGNvbnRyb2w7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCXN0cnVjdCByYXRlX3NlbGVjdGlvbiByYXRlc2VsOwotCXU4ICpwb3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQkvKiBSZW1vdmUgcG9zc2libGUgU1RBIGVudHJpZXMgZnJvbSBvdGhlciBJQlNTIG5ldHdvcmtzLiAqLwotCXN0YV9pbmZvX2ZsdXNoKGxvY2FsLCBOVUxMKTsKLQotCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKLQkJLyogUmVzZXQgb3duIFRTRiB0byBhbGxvdyB0aW1lIHN5bmNocm9uaXphdGlvbiB3b3JrLiAqLwotCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKLQl9Ci0JbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoZGV2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IGJzcy0+YmVhY29uX2ludCA+PSAxMCA/IGJzcy0+YmVhY29uX2ludCA6IDEwOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gYnNzLT5jYXBhYmlsaXR5ICYKLQkJV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kgPyAxIDogMDsKLQotCXJlcyA9IGllZWU4MDIxMV9zZXRfY2hhbm5lbChsb2NhbCwgLTEsIGJzcy0+ZnJlcSk7Ci0KLQlpZiAoIShsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFnICYgSUVFRTgwMjExX0NIQU5fV19JQlNTKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24gY2hhbm5lbCAlZCAiCi0JCSAgICAgICAiKCVkIE1IeilcbiIsIGRldi0+bmFtZSwgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCwKLQkJICAgICAgIGxvY2FsLT5ody5jb25mLmZyZXEpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogU2V0IGJlYWNvbiB0ZW1wbGF0ZSBiYXNlZCBvbiBzY2FuIHJlc3VsdHMgKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDQwMCk7Ci0JZG8gewotCQlpZiAoIXNrYikKLQkJCWJyZWFrOwotCi0JCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQotCQkJc2tiX3B1dChza2IsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7Ci0JCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwotCQltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAotCQkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7Ci0JCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCQltZW1jcHkobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9Ci0JCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5iZWFjb25faW50KTsKLQkJbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGJzcy0+Y2FwYWJpbGl0eSk7Ci0KLQkJcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOwotCQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCQkqcG9zKysgPSBpZnN0YS0+c3NpZF9sZW47Ci0JCW1lbWNweShwb3MsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCi0JCXJhdGVzID0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKLQkJaWYgKHJhdGVzID4gOCkKLQkJCXJhdGVzID0gODsKLQkJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JCSpwb3MrKyA9IHJhdGVzOwotCQltZW1jcHkocG9zLCBic3MtPnN1cHBfcmF0ZXMsIHJhdGVzKTsKLQotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDEpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9EU19QQVJBTVM7Ci0JCSpwb3MrKyA9IDE7Ci0JCSpwb3MrKyA9IGJzcy0+Y2hhbm5lbDsKLQotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDIpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9JQlNTX1BBUkFNUzsKLQkJKnBvcysrID0gMjsKLQkJLyogRklYOiBzZXQgQVRJTSB3aW5kb3cgYmFzZWQgb24gc2NhbiByZXN1bHRzICovCi0JCSpwb3MrKyA9IDA7Ci0JCSpwb3MrKyA9IDA7Ci0KLQkJaWYgKGJzcy0+c3VwcF9yYXRlc19sZW4gPiA4KSB7Ci0JCQlyYXRlcyA9IGJzcy0+c3VwcF9yYXRlc19sZW4gLSA4OwotCQkJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7Ci0JCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJCSpwb3MrKyA9IHJhdGVzOwotCQkJbWVtY3B5KHBvcywgJmJzcy0+c3VwcF9yYXRlc1s4XSwgcmF0ZXMpOwotCQl9Ci0KLQkJbWVtc2V0KCZjb250cm9sLCAwLCBzaXplb2YoY29udHJvbCkpOwotCQlyYXRlX2NvbnRyb2xfZ2V0X3JhdGUoZGV2LCBsb2NhbC0+b3Blcl9od19tb2RlLCBza2IsICZyYXRlc2VsKTsKLQkJaWYgKCFyYXRlc2VsLnJhdGUpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGRldGVybWluZSBUWCByYXRlICIKLQkJCSAgICAgICAiZm9yIElCU1MgYmVhY29uXG4iLCBkZXYtPm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY29udHJvbC52aWYgPSAmc2RhdGEtPnZpZjsKLQkJY29udHJvbC50eF9yYXRlID0KLQkJCShzZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlICYmCi0JCQkocmF0ZXNlbC5yYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1BSRUFNQkxFMikpID8KLQkJCXJhdGVzZWwucmF0ZS0+dmFsMiA6IHJhdGVzZWwucmF0ZS0+dmFsOwotCQljb250cm9sLmFudGVubmFfc2VsX3R4ID0gbG9jYWwtPmh3LmNvbmYuYW50ZW5uYV9zZWxfdHg7Ci0JCWNvbnRyb2wucG93ZXJfbGV2ZWwgPSBsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbDsKLQkJY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfTk9fQUNLOwotCQljb250cm9sLnJldHJ5X2xpbWl0ID0gMTsKLQotCQlpZnN0YS0+cHJvYmVfcmVzcCA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChpZnN0YS0+cHJvYmVfcmVzcCkgewotCQkJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKLQkJCQlpZnN0YS0+cHJvYmVfcmVzcC0+ZGF0YTsKLQkJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPQotCQkJCUlFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKLQkJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBQcm9iZVJlc3AgIgotCQkJICAgICAgICJ0ZW1wbGF0ZSBmb3IgSUJTU1xuIiwgZGV2LT5uYW1lKTsKLQkJfQotCi0JCWlmIChsb2NhbC0+b3BzLT5iZWFjb25fdXBkYXRlICYmCi0JCSAgICBsb2NhbC0+b3BzLT5iZWFjb25fdXBkYXRlKGxvY2FsX3RvX2h3KGxvY2FsKSwKLQkJCQkJICAgICBza2IsICZjb250cm9sKSA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvbmZpZ3VyZWQgSUJTUyBiZWFjb24gIgotCQkJICAgICAgICJ0ZW1wbGF0ZSBiYXNlZCBvbiBzY2FuIHJlc3VsdHNcbiIsIGRldi0+bmFtZSk7Ci0JCQlza2IgPSBOVUxMOwotCQl9Ci0KLQkJcmF0ZXMgPSAwOwotCQltb2RlID0gbG9jYWwtPm9wZXJfaHdfbW9kZTsKLQkJZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgewotCQkJaW50IGJpdHJhdGUgPSAoYnNzLT5zdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1OwotCQkJZm9yIChqID0gMDsgaiA8IG1vZGUtPm51bV9yYXRlczsgaisrKQotCQkJCWlmIChtb2RlLT5yYXRlc1tqXS5yYXRlID09IGJpdHJhdGUpCi0JCQkJCXJhdGVzIHw9IEJJVChqKTsKLQkJfQotCQlpZnN0YS0+c3VwcF9yYXRlc19iaXRzID0gcmF0ZXM7Ci0JfSB3aGlsZSAoMCk7Ci0KLQlpZiAoc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGNvbmZpZ3VyZSBJQlNTIGJlYWNvbiAiCi0JCSAgICAgICAidGVtcGxhdGVcbiIsIGRldi0+bmFtZSk7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQl9Ci0KLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19KT0lORUQ7Ci0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7Ci0KLQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQl1OCBic3NpZFtFVEhfQUxFTl0sICpwb3M7Ci0JaW50IGk7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0KLSNpZiAwCi0JLyogRWFzaWVyIHRlc3RpbmcsIHVzZSBmaXhlZCBCU1NJRC4gKi8KLQltZW1zZXQoYnNzaWQsIDB4ZmUsIEVUSF9BTEVOKTsKLSNlbHNlCi0JLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCi0JICogb3duIE1BQyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBwcm9wZXIKLQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwotCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJYnNzaWRbaV0gXj0gZGV2LT5kZXZfYWRkcltpXTsKLQlic3NpZFswXSAmPSB+MHgwMTsKLQlic3NpZFswXSB8PSAweDAyOwotI2VuZGlmCi0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENyZWF0aW5nIG5ldyBJQlNTIG5ldHdvcmssIEJTU0lEICVzXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGJzc2lkKSk7Ci0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChkZXYsIGJzc2lkLCBsb2NhbC0+aHcuY29uZi5jaGFubmVsLAotCQkJCSAgIHNkYXRhLT51LnN0YS5zc2lkLCBzZGF0YS0+dS5zdGEuc3NpZF9sZW4pOwotCWlmICghYnNzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPT0gMCkKLQkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKLQlic3MtPmJlYWNvbl9pbnQgPSBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50OwotCWJzcy0+aHdfbW9kZSA9IGxvY2FsLT5ody5jb25mLnBoeW1vZGU7Ci0JYnNzLT5mcmVxID0gbG9jYWwtPmh3LmNvbmYuZnJlcTsKLQlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKLQlic3MtPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKLQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KSB7Ci0JCWJzcy0+Y2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQl9IGVsc2UKLQkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOwotCWJzcy0+c3VwcF9yYXRlc19sZW4gPSBtb2RlLT5udW1fcmF0ZXM7Ci0JcG9zID0gYnNzLT5zdXBwX3JhdGVzOwotCWZvciAoaSA9IDA7IGkgPCBtb2RlLT5udW1fcmF0ZXM7IGkrKykgewotCQlpbnQgcmF0ZSA9IG1vZGUtPnJhdGVzW2ldLnJhdGU7Ci0JCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKLQl9Ci0KLQlyZXR1cm4gaWVlZTgwMjExX3N0YV9qb2luX2lic3MoZGV2LCBpZnN0YSwgYnNzKTsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7Ci0JaW50IGZvdW5kID0gMDsKLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JaW50IGFjdGl2ZV9pYnNzOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCURFQ0xBUkVfTUFDX0JVRihtYWMyKTsKLQotCWlmIChpZnN0YS0+c3NpZF9sZW4gPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3MoZGV2KTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhX2ZpbmRfaWJzcyAoYWN0aXZlX2lic3M9JWQpXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCXNwaW5fbG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+c3RhX2Jzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gYnNzLT5zc2lkX2xlbiB8fAotCQkgICAgbWVtY21wKGlmc3RhLT5zc2lkLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pICE9IDAKLQkJICAgIHx8ICEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQotCQkJY29udGludWU7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIGJzc2lkPSVzIGZvdW5kXG4iLAotCQkgICAgICAgcHJpbnRfbWFjKG1hYywgYnNzLT5ic3NpZCkpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0JCW1lbWNweShic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCQlmb3VuZCA9IDE7Ci0JCWlmIChhY3RpdmVfaWJzcyB8fCBtZW1jbXAoYnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCi0JCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXMgY3VycmVudCAiCi0JICAgICAgICIlc1xuIiwgcHJpbnRfbWFjKG1hYywgYnNzaWQpLCBwcmludF9tYWMobWFjMiwgaWZzdGEtPmJzc2lkKSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQlpZiAoZm91bmQgJiYgbWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwICYmCi0JICAgIChic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGJzc2lkLCBsb2NhbC0+aHcuY29uZi5jaGFubmVsLAotCQkJCQlpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVzIgotCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGJzc2lkKSk7Ci0JCXJldHVybiBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhkZXYsIGlmc3RhLCBic3MpOwotCX0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0KLQkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19KT0lORUQgJiYKLQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3MoZGV2KSkgewotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCi0JCQkJICAgICAgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwotCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCArCi0JCQkgICAgICBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCi0JCSAgICAgICAiam9pblxuIiwgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcmVxX3NjYW4oZGV2LCBpZnN0YS0+c3NpZCwKLQkJCQkJICAgICAgaWZzdGEtPnNzaWRfbGVuKTsKLQl9IGVsc2UgaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19KT0lORUQpIHsKLQkJaW50IGludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUw7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmlic3Nfam9pbl9yZXEgKwotCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCkpIHsKLQkJCWlmICgoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUykgJiYKLQkJCSAgICBsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFnICYgSUVFRTgwMjExX0NIQU5fV19JQlNTKQotCQkJCXJldHVybiBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKGRldiwgaWZzdGEpOwotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24gdGhlIgotCQkJCSAgICAgICAiIGNvbmZpZ3VyZWQgY2hhbm5lbCAlZCAoJWQgTUh6KVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBsb2NhbC0+aHcuY29uZi5jaGFubmVsLAotCQkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5mcmVxKTsKLQkJCX0KLQotCQkJLyogTm8gSUJTUyBmb3VuZCAtIGRlY3JlYXNlIHNjYW4gaW50ZXJ2YWwgYW5kIGNvbnRpbnVlCi0JCQkgKiBzY2FubmluZy4gKi8KLQkJCWludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVzsKLQkJfQotCi0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX1NFQVJDSDsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBpbnRlcnZhbCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLWludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBUT0RPOiBUaGlzIHNob3VsZCBhbHdheXMgYmUgZG9uZSBmb3IgSUJTUywgZXZlbiBpZiBJRUVFODAyMTFfUU9TIGlzCi0JICogbm90IGRlZmluZWQuICovCi0JaWYgKGxvY2FsLT5vcHMtPmNvbmZfdHgpIHsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcXBhcmFtOwotCQlpbnQgaTsKLQotCQltZW1zZXQoJnFwYXJhbSwgMCwgc2l6ZW9mKHFwYXJhbSkpOwotCQkvKiBUT0RPOiBhcmUgdGhlc2Ugb2sgZGVmYXVsdHMgZm9yIGFsbCBod19tb2Rlcz8gKi8KLQkJcXBhcmFtLmFpZnMgPSAyOwotCQlxcGFyYW0uY3dfbWluID0KLQkJCWxvY2FsLT5ody5jb25mLnBoeW1vZGUgPT0gTU9ERV9JRUVFODAyMTFCID8gMzEgOiAxNTsKLQkJcXBhcmFtLmN3X21heCA9IDEwMjM7Ci0JCXFwYXJhbS5idXJzdF90aW1lID0gMDsKLQkJZm9yIChpID0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwOyBpIDwgTlVNX1RYX0RBVEFfUVVFVUVTOyBpKyspCi0JCXsKLQkJCWxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLAotCQkJCQkgICBpICsgSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwLAotCQkJCQkgICAmcXBhcmFtKTsKLQkJfQotCQkvKiBJQlNTIHVzZXMgZGlmZmVyZW50IHBhcmFtZXRlcnMgZm9yIEJlYWNvbiBzZW5kaW5nICovCi0JCXFwYXJhbS5jd19taW4rKzsKLQkJcXBhcmFtLmN3X21pbiAqPSAyOwotCQlxcGFyYW0uY3dfbWluLS07Ci0JCWxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLAotCQkJCSAgIElFRUU4MDIxMV9UWF9RVUVVRV9CRUFDT04sICZxcGFyYW0pOwotCX0KLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KLQlpZiAoaWZzdGEtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZzdGEtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCW1lbWNweShpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKTsKLQltZW1zZXQoaWZzdGEtPnNzaWQgKyBsZW4sIDAsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gLSBsZW4pOwotCWlmc3RhLT5zc2lkX2xlbiA9IGxlbjsKLQotCWlmIChsZW4pCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOwotCWVsc2UKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1NTSURfU0VUOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJgotCSAgICAhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUKSkgewotCQlpZnN0YS0+aWJzc19qb2luX3JlcSA9IGppZmZpZXM7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX1NFQVJDSDsKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKGRldiwgaWZzdGEpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgaWVlZTgwMjExX3N0YV9nZXRfc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQltZW1jcHkoc3NpZCwgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JKmxlbiA9IGlmc3RhLT5zc2lkX2xlbjsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmJzc2lkKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKLQlpbnQgcmVzOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICE9IDApIHsKLQkJbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQkJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhkZXYpOwotCQlpZiAocmVzKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBjb25maWcgbmV3IEJTU0lEIHRvICIKLQkJCSAgICAgICAidGhlIGxvdy1sZXZlbCBkcml2ZXJcbiIsIGRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gcmVzOwotCQl9Ci0JfQotCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7Ci0JZWxzZQotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICBpbnQgcG93ZXJzYXZlKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOwotCXUxNiBmYzsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChudWxsZnVuYywgMCwgMjQpOwotCWZjID0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAotCSAgICAgSUVFRTgwMjExX0ZDVExfVE9EUzsKLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKLQludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCi0JaWVlZTgwMjExX3N0YV90eChzZGF0YS0+ZGV2LCBza2IsIDApOwotfQotCi0KLXZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+c2Nhbl9kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0JbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgPSBqaWZmaWVzOwotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKLQotCWlmIChsb2NhbC0+c3RhX2h3X3NjYW5uaW5nKSB7Ci0JCWxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcgPSAwOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JbG9jYWwtPnN0YV9zd19zY2FubmluZyA9IDA7Ci0JaWYgKGllZWU4MDIxMV9od19jb25maWcobG9jYWwpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byByZXN0b3JlIG9wZXJhdGlvbmFsICIKLQkJICAgICAgICJjaGFubmVsIGFmdGVyIHNjYW5cbiIsIGRldi0+bmFtZSk7Ci0KLQotCW5ldGlmX3R4X2xvY2tfYmgobG9jYWwtPm1kZXYpOwotCWxvY2FsLT5maWx0ZXJfZmxhZ3MgJj0gfkZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOwotCWxvY2FsLT5vcHMtPmNvbmZpZ3VyZV9maWx0ZXIobG9jYWxfdG9faHcobG9jYWwpLAotCQkJCSAgICAgRklGX0JDTl9QUkJSRVNQX1BST01JU0MsCi0JCQkJICAgICAmbG9jYWwtPmZpbHRlcl9mbGFncywKLQkJCQkgICAgIGxvY2FsLT5tZGV2LT5tY19jb3VudCwKLQkJCQkgICAgIGxvY2FsLT5tZGV2LT5tY19saXN0KTsKLQotCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCi0JCS8qIE5vIG5lZWQgdG8gd2FrZSB0aGUgbWFzdGVyIGRldmljZS4gKi8KLQkJaWYgKHNkYXRhLT5kZXYgPT0gbG9jYWwtPm1kZXYpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkgewotCQkJaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKLQkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOwotCQkJaWVlZTgwMjExX3N0YV90aW1lcigodW5zaWduZWQgbG9uZylzZGF0YSk7Ci0JCX0KLQotCQluZXRpZl93YWtlX3F1ZXVlKHNkYXRhLT5kZXYpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotZG9uZToKLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUKSB8fAotCQkgICAgKCFpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfSk9JTkVEICYmCi0JCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhkZXYpKSkKLQkJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKGRldiwgaWZzdGEpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKTsKLQotdm9pZCBpZWVlODAyMTFfc3RhX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgc2Nhbl93b3JrLndvcmspOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+c2Nhbl9kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JaW50IHNraXA7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X2RlbGF5ID0gMDsKLQotCWlmICghbG9jYWwtPnN0YV9zd19zY2FubmluZykKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChsb2NhbC0+c2Nhbl9zdGF0ZSkgewotCWNhc2UgU0NBTl9TRVRfQ0hBTk5FTDoKLQkJbW9kZSA9IGxvY2FsLT5zY2FuX2h3X21vZGU7Ci0JCWlmIChsb2NhbC0+c2Nhbl9od19tb2RlLT5saXN0Lm5leHQgPT0gJmxvY2FsLT5tb2Rlc19saXN0ICYmCi0JCSAgICBsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBtb2RlLT5udW1fY2hhbm5lbHMpIHsKLQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChsb2NhbF90b19odyhsb2NhbCkpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXNraXAgPSAhKGxvY2FsLT5lbmFibGVkX21vZGVzICYgKDEgPDwgbW9kZS0+bW9kZSkpOwotCQljaGFuID0gJm1vZGUtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKLQkJaWYgKCEoY2hhbi0+ZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfU0NBTikgfHwKLQkJICAgIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJgotCQkgICAgICEoY2hhbi0+ZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfSUJTUykpIHx8Ci0JCSAgICAobG9jYWwtPmh3X21vZGVzICYgbG9jYWwtPmVuYWJsZWRfbW9kZXMgJgotCQkgICAgICgxIDw8IE1PREVfSUVFRTgwMjExRykgJiYgbW9kZS0+bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUIpKQotCQkJc2tpcCA9IDE7Ci0KLQkJaWYgKCFza2lwKSB7Ci0jaWYgMAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzY2FuIGNoYW5uZWwgJWQgKCVkIE1IeilcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBjaGFuLT5jaGFuLCBjaGFuLT5mcmVxKTsKLSNlbmRpZgotCi0JCQlsb2NhbC0+c2Nhbl9jaGFubmVsID0gY2hhbjsKLQkJCWlmIChpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHNldCBjaGFubmVsICIKLQkJCQkgICAgICAgIiVkICglZCBNSHopIGZvciBzY2FuXG4iLCBkZXYtPm5hbWUsCi0JCQkJICAgICAgIGNoYW4tPmNoYW4sIGNoYW4tPmZyZXEpOwotCQkJCXNraXAgPSAxOwotCQkJfQotCQl9Ci0KLQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHgrKzsKLQkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID49IGxvY2FsLT5zY2FuX2h3X21vZGUtPm51bV9jaGFubmVscykgewotCQkJaWYgKGxvY2FsLT5zY2FuX2h3X21vZGUtPmxpc3QubmV4dCAhPSAmbG9jYWwtPm1vZGVzX2xpc3QpIHsKLQkJCQlsb2NhbC0+c2Nhbl9od19tb2RlID0gbGlzdF9lbnRyeShsb2NhbC0+c2Nhbl9od19tb2RlLT5saXN0Lm5leHQsCi0JCQkJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUsCi0JCQkJCQkJCSBsaXN0KTsKLQkJCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc2tpcCkKLQkJCWJyZWFrOwotCi0JCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfUFJPQkVfREVMQVkgKwotCQkJICAgICB1c2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jaGFubmVsX2NoYW5nZV90aW1lKTsKLQkJbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFTkRfUFJPQkU7Ci0JCWJyZWFrOwotCWNhc2UgU0NBTl9TRU5EX1BST0JFOgotCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbC0+ZmxhZyAmIElFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU4pIHsKLQkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShkZXYsIE5VTEwsIGxvY2FsLT5zY2FuX3NzaWQsCi0JCQkJCQkgbG9jYWwtPnNjYW5fc3NpZF9sZW4pOwotCQkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9DSEFOTkVMX1RJTUU7Ci0JCX0gZWxzZQotCQkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9QQVNTSVZFX0NIQU5ORUxfVElNRTsKLQkJbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOwotCQlicmVhazsKLQl9Ci0KLQlpZiAobG9jYWwtPnN0YV9zd19zY2FubmluZykKLQkJcXVldWVfZGVsYXllZF93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZsb2NhbC0+c2Nhbl93b3JrLAotCQkJCSAgIG5leHRfZGVsYXkpOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9zdGFydF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCWlmIChzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTUxNRS1TQ0FOLnJlcXVlc3QgKHBhZ2UgMTE4KSAgcGFnZSAxNDQgKDExLjEuMy4xKQotCSAqIEJTU1R5cGU6IElORlJBU1RSVUNUVVJFLCBJTkRFUEVOREVOVCwgQU5ZX0JTUwotCSAqIEJTU0lEOiBNQUNBZGRyZXNzCi0JICogU1NJRAotCSAqIFNjYW5UeXBlOiBBQ1RJVkUsIFBBU1NJVkUKLQkgKiBQcm9iZURlbGF5OiBkZWxheSAoaW4gbWljcm9zZWNvbmRzKSB0byBiZSB1c2VkIHByaW9yIHRvIHRyYW5zbWl0dGluZwotCSAqICAgIGEgUHJvYmUgZnJhbWUgZHVyaW5nIGFjdGl2ZSBzY2FubmluZwotCSAqIENoYW5uZWxMaXN0Ci0JICogTWluQ2hhbm5lbFRpbWUgKD49IFByb2JlRGVsYXkpLCBpbiBUVQotCSAqIE1heENoYW5uZWxUaW1lOiAoPj0gTWluQ2hhbm5lbFRpbWUpLCBpbiBUVQotCSAqLwotCi0JIC8qIE1MTUUtU0NBTi5jb25maXJtCi0JICAqIEJTU0Rlc2NyaXB0aW9uU2V0Ci0JICAqIFJlc3VsdENvZGU6IFNVQ0NFU1MsIElOVkFMSURfUEFSQU1FVEVSUwotCSAqLwotCi0JaWYgKGxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgfHwgbG9jYWwtPnN0YV9od19zY2FubmluZykgewotCQlpZiAobG9jYWwtPnNjYW5fZGV2ID09IGRldikKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmIChsb2NhbC0+b3BzLT5od19zY2FuKSB7Ci0JCWludCByYyA9IGxvY2FsLT5vcHMtPmh3X3NjYW4obG9jYWxfdG9faHcobG9jYWwpLAotCQkJCQkgICAgIHNzaWQsIHNzaWRfbGVuKTsKLQkJaWYgKCFyYykgewotCQkJbG9jYWwtPnN0YV9od19zY2FubmluZyA9IDE7Ci0JCQlsb2NhbC0+c2Nhbl9kZXYgPSBkZXY7Ci0JCX0KLQkJcmV0dXJuIHJjOwotCX0KLQotCWxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgPSAxOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQotCQkvKiBEb24ndCBzdG9wIHRoZSBtYXN0ZXIgaW50ZXJmYWNlLCBvdGhlcndpc2Ugd2UgY2FuJ3QgdHJhbnNtaXQKLQkJICogcHJvYmVzISAqLwotCQlpZiAoc2RhdGEtPmRldiA9PSBsb2NhbC0+bWRldikKLQkJCWNvbnRpbnVlOwotCi0JCW5ldGlmX3N0b3BfcXVldWUoc2RhdGEtPmRldik7Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCi0JCSAgICAoc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSkKLQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JaWYgKHNzaWQpIHsKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQkJbWVtY3B5KGxvY2FsLT5zY2FuX3NzaWQsIHNzaWQsIHNzaWRfbGVuKTsKLQl9IGVsc2UKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSAwOwotCWxvY2FsLT5zY2FuX3N0YXRlID0gU0NBTl9TRVRfQ0hBTk5FTDsKLQlsb2NhbC0+c2Nhbl9od19tb2RlID0gbGlzdF9lbnRyeShsb2NhbC0+bW9kZXNfbGlzdC5uZXh0LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9od19tb2RlLAotCQkJCQkgbGlzdCk7Ci0JbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCWxvY2FsLT5zY2FuX2RldiA9IGRldjsKLQotCW5ldGlmX3R4X2xvY2tfYmgobG9jYWwtPm1kZXYpOwotCWxvY2FsLT5maWx0ZXJfZmxhZ3MgfD0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7Ci0JbG9jYWwtPm9wcy0+Y29uZmlndXJlX2ZpbHRlcihsb2NhbF90b19odyhsb2NhbCksCi0JCQkJICAgICBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQywKLQkJCQkgICAgICZsb2NhbC0+ZmlsdGVyX2ZsYWdzLAotCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2NvdW50LAotCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOwotCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7Ci0KLQkvKiBUT0RPOiBzdGFydCBzY2FuIGFzIHNvb24gYXMgYWxsIG51bGxmdW5jIGZyYW1lcyBhcmUgQUNLZWQgKi8KLQlxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmxvY2FsLT5zY2FuX3dvcmssCi0JCQkgICBJRUVFODAyMTFfQ0hBTk5FTF9USU1FKTsKLQotCXJldHVybiAwOwotfQotCi0KLWludCBpZWVlODAyMTFfc3RhX3JlcV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQotCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9zdGFydF9zY2FuKGRldiwgc3NpZCwgc3NpZF9sZW4pOwotCi0JaWYgKGxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgfHwgbG9jYWwtPnN0YV9od19zY2FubmluZykgewotCQlpZiAobG9jYWwtPnNjYW5fZGV2ID09IGRldikKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmc3RhLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47Ci0JaWYgKHNzaWRfbGVuKQotCQltZW1jcHkoaWZzdGEtPnNjYW5fc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLWllZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MsCi0JCQkgIGNoYXIgKmN1cnJlbnRfZXYsIGNoYXIgKmVuZF9idWYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIGJzcy0+bGFzdF91cGRhdGUgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKLQkJcmV0dXJuIGN1cnJlbnRfZXY7Ci0KLQlpZiAoIShsb2NhbC0+ZW5hYmxlZF9tb2RlcyAmICgxIDw8IGJzcy0+aHdfbW9kZSkpKQotCQlyZXR1cm4gY3VycmVudF9ldjsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfQUREUl9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT5zc2lkX2xlbjsKLQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJICBic3MtPnNzaWQpOwotCi0JaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQkJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWl3ZS51LmZyZXEubSA9IGJzcy0+Y2hhbm5lbDsKLQlpd2UudS5mcmVxLmUgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKLQlpd2UudS5mcmVxLm0gPSBic3MtPmZyZXEgKiAxMDAwMDA7Ci0JaXdlLnUuZnJlcS5lID0gMTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJICBJV19FVl9GUkVRX0xFTik7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnF1YWwgPSBic3MtPnNpZ25hbDsKLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5yc3NpOwotCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfUVVBTF9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAiIik7Ci0KLQlpZiAoYnNzICYmIGJzcy0+d3BhX2llKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT53cGFfaWVfbGVuOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCSAgYnNzLT53cGFfaWUpOwotCX0KLQotCWlmIChic3MgJiYgYnNzLT5yc25faWUpIHsKLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3MtPnJzbl9pZV9sZW47Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkJICBic3MtPnJzbl9pZSk7Ci0JfQotCi0JaWYgKGJzcyAmJiBic3MtPnN1cHBfcmF0ZXNfbGVuID4gMCkgewotCQkvKiBkaXNwbGF5IGFsbCBzdXBwb3J0ZWQgcmF0ZXMgaW4gcmVhZGFibGUgZm9ybWF0ICovCi0JCWNoYXIgKnAgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKLQkJaW50IGk7Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGJzcy0+c3VwcF9yYXRlc1tpXSAmCi0JCQkJCQkJMHg3ZikgKiA1MDAwMDApOwotCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGN1cnJlbnRfZXYsIHAsCi0JCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJY3VycmVudF9ldiA9IHA7Ci0JfQotCi0JaWYgKGJzcykgewotCQljaGFyICpidWY7Ci0JCWJ1ZiA9IGttYWxsb2MoMzAsIEdGUF9BVE9NSUMpOwotCQlpZiAoYnVmKSB7Ci0JCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQkJaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JCQlzcHJpbnRmKGJ1ZiwgInRzZj0lMDE2bGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoYnNzLT50aW1lc3RhbXApKTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlrZnJlZShidWYpOwotCQl9Ci0JfQotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLQotaW50IGllZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCWNoYXIgKmN1cnJlbnRfZXYgPSBidWY7Ci0JY2hhciAqZW5kX2J1ZiA9IGJ1ZiArIGxlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzczsKLQotCXNwaW5fbG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+c3RhX2Jzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChidWYgKyBsZW4gLSBjdXJyZW50X2V2IDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7Ci0JCQlyZXR1cm4gLUUyQklHOwotCQl9Ci0JCWN1cnJlbnRfZXYgPSBpZWVlODAyMTFfc3RhX3NjYW5fcmVzdWx0KGRldiwgYnNzLCBjdXJyZW50X2V2LAotCQkJCQkJICAgICAgIGVuZF9idWYpOwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7Ci0JcmV0dXJuIGN1cnJlbnRfZXYgLSBidWY7Ci19Ci0KLQotaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmllLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCWtmcmVlKGlmc3RhLT5leHRyYV9pZSk7Ci0JaWYgKGxlbiA9PSAwKSB7Ci0JCWlmc3RhLT5leHRyYV9pZSA9IE5VTEw7Ci0JCWlmc3RhLT5leHRyYV9pZV9sZW4gPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWZzdGEtPmV4dHJhX2llID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCWlmICghaWZzdGEtPmV4dHJhX2llKSB7Ci0JCWlmc3RhLT5leHRyYV9pZV9sZW4gPSAwOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWVtY3B5KGlmc3RhLT5leHRyYV9pZSwgaWUsIGxlbik7Ci0JaWZzdGEtPmV4dHJhX2llX2xlbiA9IGxlbjsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdHJ1Y3Qgc3RhX2luZm8gKiBpZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqYnNzaWQsCi0JCQkJCSB1OCAqYWRkcikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKLQotCS8qIFRPRE86IENvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5IGFuZAotCSAqIGFsbG93IG5ldyBvbmUgdG8gYmUgYWRkZWQuICovCi0JaWYgKGxvY2FsLT5udW1fc3RhID49IElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUykgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIHJvb20gZm9yIGEgbmV3IElCU1MgU1RBICIKLQkJCSAgICAgICAiZW50cnkgJXNcbiIsIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgYWRkcikpOwotCQl9Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXMgKGRldj0lcylcbiIsCi0JICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgcHJpbnRfbWFjKG1hYywgYWRkciksIGRldi0+bmFtZSk7Ci0KLQlzdGEgPSBzdGFfaW5mb19hZGQobG9jYWwsIGRldiwgYWRkciwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybiBOVUxMOwotCi0Jc3RhLT5zdXBwX3JhdGVzID0gc2RhdGEtPnUuc3RhLnN1cHBfcmF0ZXNfYml0czsKLQotCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhLCBsb2NhbCk7Ci0KLQlyZXR1cm4gc3RhOyAvKiBjYWxsZXIgd2lsbCBjYWxsIHN0YV9pbmZvX3B1dCgpICovCi19Ci0KLQotaW50IGllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGUocmVhc29uPSVkKVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCByZWFzb24pOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWVlZTgwMjExX3NlbmRfZGVhdXRoKGRldiwgaWZzdGEsIHJlYXNvbik7Ci0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhkZXYsIGlmc3RhLCAxKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRlKHJlYXNvbj0lZClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcmVhc29uKTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCi0JCXJldHVybiAtMTsKLQotCWllZWU4MDIxMV9zZW5kX2Rpc2Fzc29jKGRldiwgaWZzdGEsIHJlYXNvbik7Ci0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhkZXYsIGlmc3RhLCAwKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5NTRhNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNiBKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAic3RhX2luZm8uaCIKKyNpbmNsdWRlICJkZWJ1Z2ZzX25ldGRldi5oIgorI2luY2x1ZGUgIm1lc2guaCIKKwordm9pZCBpZWVlODAyMTFfaWZfc2RhdGFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlpbnQgaTsKKworCS8qIERlZmF1bHQgdmFsdWVzIGZvciBzdWItaW50ZXJmYWNlIHBhcmFtZXRlcnMgKi8KKwlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9GUkFHTUVOVF9NQVg7IGkrKykKKwkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2RhdGEtPmZyYWdtZW50c1tpXS5za2JfbGlzdCk7CisKKwlJTklUX0xJU1RfSEVBRCgmc2RhdGEtPmtleV9saXN0KTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmX3NkYXRhX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfRlJBR01FTlRfTUFYOyBpKyspIHsKKwkJX19za2JfcXVldWVfcHVyZ2UoJnNkYXRhLT5mcmFnbWVudHNbaV0uc2tiX2xpc3QpOworCX0KK30KKworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi8KK2ludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBpbnQgdHlwZSwKKwkJICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBOVUxMOworCWludCByZXQ7CisKKwlBU1NFUlRfUlROTCgpOworCW5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzZGF0YSkgKyBsb2NhbC0+aHcudmlmX2RhdGFfc2l6ZSwKKwkJCSAgICBuYW1lLCBpZWVlODAyMTFfaWZfc2V0dXApOworCWlmICghbmRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBkZXZfYWxsb2NfbmFtZShuZGV2LCBuZGV2LT5uYW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsOworCisJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOworCW5kZXYtPmJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOworCW5kZXYtPmlycSA9IGRldi0+aXJxOworCW5kZXYtPm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0OworCW5kZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9lbmQ7CisJU0VUX05FVERFVl9ERVYobmRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihuZGV2KTsKKwluZGV2LT5pZWVlODAyMTFfcHRyID0gJnNkYXRhLT53ZGV2OworCXNkYXRhLT53ZGV2LndpcGh5ID0gbG9jYWwtPmh3LndpcGh5OworCXNkYXRhLT52aWYudHlwZSA9IElFRUU4MDIxMV9JRl9UWVBFX0FQOworCXNkYXRhLT5kZXYgPSBuZGV2OworCXNkYXRhLT5sb2NhbCA9IGxvY2FsOworCWllZWU4MDIxMV9pZl9zZGF0YV9pbml0KHNkYXRhKTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KHNkYXRhKTsKKwlpZWVlODAyMTFfaWZfc2V0X3R5cGUobmRldiwgdHlwZSk7CisKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJgorCSAgICBwYXJhbXMgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKKwkJaWVlZTgwMjExX2lmX3N0YV9zZXRfbWVzaF9pZCgmc2RhdGEtPnUuc3RhLAorCQkJCQkgICAgIHBhcmFtcy0+bWVzaF9pZF9sZW4sCisJCQkJCSAgICAgcGFyYW1zLT5tZXNoX2lkKTsKKworCS8qIHdlJ3JlIHVuZGVyIFJUTkwgc28gYWxsIHRoaXMgaXMgZmluZSAqLworCWlmICh1bmxpa2VseShsb2NhbC0+cmVnX3N0YXRlID09IElFRUU4MDIxMV9ERVZfVU5SRUdJU1RFUkVEKSkgeworCQlfX2llZWU4MDIxMV9pZl9kZWwobG9jYWwsIHNkYXRhKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWxpc3RfYWRkX3RhaWxfcmN1KCZzZGF0YS0+bGlzdCwgJmxvY2FsLT5pbnRlcmZhY2VzKTsKKworCWlmIChuZXdfZGV2KQorCQkqbmV3X2RldiA9IG5kZXY7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmcmVlX25ldGRldihuZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGllZWU4MDIxMV9pZl9zZXRfdHlwZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaW50IG9sZHR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG9uIHRoZSBtYXN0ZXIgaW50ZXJmYWNlCisJICogd2hpY2ggYWxyZWFkeSBoYXMgYSBoYXJkX3N0YXJ0X3htaXQgcm91dGluZSBhc3NpZ25lZAorCSAqIHdoaWNoIG11c3Qgbm90IGJlIGNoYW5nZWQuCisJICovCisJaWYgKGRldiAhPSBzZGF0YS0+bG9jYWwtPm1kZXYpCisJCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQ7CisKKwkvKgorCSAqIENhbGxlZCBldmVuIHdoZW4gcmVnaXN0ZXJfbmV0ZGV2aWNlIGZhaWxzLCBpdCB3b3VsZAorCSAqIG9vcHMgaWYgYXNzaWduZWQgYmVmb3JlIGluaXRpYWxpc2luZyB0aGUgcmVzdC4KKwkgKi8KKwlkZXYtPnVuaW5pdCA9IGllZWU4MDIxMV9pZl9yZWluaXQ7CisKKwkvKiBtb3N0IGhhdmUgbm8gQlNTIHBvaW50ZXIgKi8KKwlzZGF0YS0+YnNzID0gTlVMTDsKKwlzZGF0YS0+dmlmLnR5cGUgPSB0eXBlOworCisJc2RhdGEtPmJhc2ljX3JhdGVzID0gMDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfV0RTOgorCQkvKiBub3RoaW5nIHNwZWNpYWwgKi8KKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOOgorCQlzZGF0YS0+dS52bGFuLmFwID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9BUDoKKwkJc2RhdGEtPnUuYXAuZm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gLTE7CisJCXNkYXRhLT51LmFwLm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNkYXRhLT51LmFwLnBzX2JjX2J1Zik7CisJCXNkYXRhLT5ic3MgPSAmc2RhdGEtPnUuYXA7CisJCUlOSVRfTElTVF9IRUFEKCZzZGF0YS0+dS5hcC52bGFucyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDoKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6IHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqbXNkYXRhOworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisKKwkJaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlJTklUX1dPUksoJmlmc3RhLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOworCQlzZXR1cF90aW1lcigmaWZzdGEtPnRpbWVyLCBpZWVlODAyMTFfc3RhX3RpbWVyLAorCQkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlmc3RhLT5za2JfcXVldWUpOworCisJCWlmc3RhLT5jYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisJCWlmc3RhLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8CisJCQlJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWTsKKwkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MgfAorCQkJSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCB8CisJCQlJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKKwkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKworCQltc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihzZGF0YS0+bG9jYWwtPm1kZXYpOworCQlzZGF0YS0+YnNzID0gJm1zZGF0YS0+dS5hcDsKKworCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKKwkJCWllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc2RhdGEpOworCQlicmVhazsKKwl9CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSOgorCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQ7CisJCXNkYXRhLT51Lm1udHJfZmxhZ3MgPSBNT05JVE9SX0ZMQUdfQ09OVFJPTCB8CisJCQkJICAgICAgTU9OSVRPUl9GTEFHX09USEVSX0JTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzOiBVbmtub3duIGludGVyZmFjZSB0eXBlIDB4JXgiLAorCQkgICAgICAgZGV2LT5uYW1lLCBfX2Z1bmNfXywgdHlwZSk7CisJfQorCWllZWU4MDIxMV9kZWJ1Z2ZzX2NoYW5nZV9pZl90eXBlKHNkYXRhLCBvbGR0eXBlKTsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi8KK3ZvaWQgaWVlZTgwMjExX2lmX3JlaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGZsdXNoZWQ7CisKKwlBU1NFUlRfUlROTCgpOworCisJaWVlZTgwMjExX2ZyZWVfa2V5cyhzZGF0YSk7CisKKwlpZWVlODAyMTFfaWZfc2RhdGFfZGVpbml0KHNkYXRhKTsKKworCS8qIE5lZWQgdG8gaGFuZGxlIG1lc2ggc3BlY2lhbGx5IHRvIGFsbG93IGVsaWRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgKi8KKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKKwkJbWVzaF9ybWNfZnJlZShkZXYpOworCisJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQ6CisJCS8qIGNhbm5vdCBoYXBwZW4gKi8KKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9BUDogeworCQkvKiBSZW1vdmUgYWxsIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHVzZSB0aGlzIEJTUworCQkgKiBhcyB0aGVpciBzZGF0YS0+YnNzICovCisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnRzZGF0YSwgKm47CisJCXN0cnVjdCBiZWFjb25fZGF0YSAqYmVhY29uOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0c2RhdGEsIG4sICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQkJaWYgKHRzZGF0YSAhPSBzZGF0YSAmJiB0c2RhdGEtPmJzcyA9PSAmc2RhdGEtPnUuYXApIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlbW92aW5nIHZpcnR1YWwgIgorCQkJCSAgICAgICAiaW50ZXJmYWNlICVzIGJlY2F1c2UgaXRzIEJTUyBpbnRlcmZhY2UiCisJCQkJICAgICAgICIgaXMgYmVpbmcgcmVtb3ZlZFxuIiwKKwkJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgdHNkYXRhLT5kZXYtPm5hbWUpOworCQkJCWxpc3RfZGVsX3JjdSgmdHNkYXRhLT5saXN0KTsKKwkJCQkvKgorCQkJCSAqIFdlIGhhdmUgbG90cyBvZiB0aW1lIGFuZCBjYW4gYWZmb3JkCisJCQkJICogdG8gc3luYyBmb3IgZWFjaCBpbnRlcmZhY2UKKwkJCQkgKi8KKwkJCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJCQlfX2llZWU4MDIxMV9pZl9kZWwobG9jYWwsIHRzZGF0YSk7CisJCQl9CisJCX0KKworCQliZWFjb24gPSBzZGF0YS0+dS5hcC5iZWFjb247CisJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+dS5hcC5iZWFjb24sIE5VTEwpOworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJa2ZyZWUoYmVhY29uKTsKKworCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzZGF0YS0+dS5hcC5wc19iY19idWYpKSkgeworCQkJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkLS07CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCX0KKworCQlicmVhazsKKwl9CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6CisJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOgorCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgorCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKKwkJa2ZyZWUoc2RhdGEtPnUuc3RhLmV4dHJhX2llKTsKKwkJc2RhdGEtPnUuc3RhLmV4dHJhX2llID0gTlVMTDsKKwkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVxX2llcyk7CisJCXNkYXRhLT51LnN0YS5hc3NvY3JlcV9pZXMgPSBOVUxMOworCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXNwX2llcyk7CisJCXNkYXRhLT51LnN0YS5hc3NvY3Jlc3BfaWVzID0gTlVMTDsKKwkJaWYgKHNkYXRhLT51LnN0YS5wcm9iZV9yZXNwKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNkYXRhLT51LnN0YS5wcm9iZV9yZXNwKTsKKwkJCXNkYXRhLT51LnN0YS5wcm9iZV9yZXNwID0gTlVMTDsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKKwkJZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46CisJCXNkYXRhLT51LnZsYW4uYXAgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlmbHVzaGVkID0gc3RhX2luZm9fZmx1c2gobG9jYWwsIHNkYXRhKTsKKwlXQVJOX09OKGZsdXNoZWQpOworCisJbWVtc2V0KCZzZGF0YS0+dSwgMCwgc2l6ZW9mKHNkYXRhLT51KSk7CisJaWVlZTgwMjExX2lmX3NkYXRhX2luaXQoc2RhdGEpOworfQorCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJ0bmwgbG9jayBoZWxkLiAqLwordm9pZCBfX2llZWU4MDIxMV9pZl9kZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2RhdGEtPmRldjsKKworCWllZWU4MDIxMV9kZWJ1Z2ZzX3JlbW92ZV9uZXRkZXYoc2RhdGEpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CisJLyogRXhjZXB0IG1hc3RlciBpbnRlcmZhY2UsIHRoZSBuZXRfZGV2aWNlIHdpbGwgYmUgZnJlZWQgYnkKKwkgKiBuZXRfZGV2aWNlLT5kZXN0cnVjdG9yIChpLiBlLiBpZWVlODAyMTFfaWZfZnJlZSkuICovCit9CisKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovCitpbnQgaWVlZTgwMjExX2lmX3JlbW92ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgKm47CisKKwlBU1NFUlRfUlROTCgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCBuLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKChzZGF0YS0+dmlmLnR5cGUgPT0gaWQgfHwgaWQgPT0gLTEpICYmCisJCSAgICBzdHJjbXAobmFtZSwgc2RhdGEtPmRldi0+bmFtZSkgPT0gMCAmJgorCQkgICAgc2RhdGEtPmRldiAhPSBsb2NhbC0+bWRldikgeworCQkJbGlzdF9kZWxfcmN1KCZzZGF0YS0+bGlzdCk7CisJCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJCV9faWVlZTgwMjExX2lmX2RlbChsb2NhbCwgc2RhdGEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2lmX2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZWVlODAyMTFfaWZfc2RhdGFfZGVpbml0KHNkYXRhKTsKKwlmcmVlX25ldGRldihkZXYpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IGVkNTdmYjguLjE1MGQ2NmQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgMjAwNwlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAwOAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTMsMTQgKzEzLDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogI2luY2x1ZGUgImRlYnVnZnNfa2V5LmgiCiAjaW5jbHVkZSAiYWVzX2NjbS5oIgogCiAKLS8qCi0gKiBLZXkgaGFuZGxpbmcgYmFzaWNzCisvKioKKyAqIERPQzogS2V5IGhhbmRsaW5nIGJhc2ljcwogICoKICAqIEtleSBoYW5kbGluZyBpbiBtYWM4MDIxMSBpcyBkb25lIGJhc2VkIG9uIHBlci1pbnRlcmZhY2UgKHN1Yl9pZl9kYXRhKQogICoga2V5cyBhbmQgcGVyLXN0YXRpb24ga2V5cy4gU2luY2UgZWFjaCBzdGF0aW9uIGJlbG9uZ3MgdG8gYW4gaW50ZXJmYWNlLApAQCAtMzIsMTMgKzMzLDgxIEBACiAgKiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IG9mIGtub3dpbmcgdGhpcyBleGNlcHQgYnkgbG9va2luZyBpbnRvCiAgKiBkZWJ1Z2ZzLgogICoKLSAqIEFsbCBvcGVyYXRpb25zIGhlcmUgYXJlIGNhbGxlZCB1bmRlciBSVE5MIHNvIG5vIGV4dHJhIGxvY2tpbmcgaXMKLSAqIHJlcXVpcmVkLgorICogQWxsIGtleSBvcGVyYXRpb25zIGFyZSBwcm90ZWN0ZWQgaW50ZXJuYWxseSBzbyB5b3UgY2FuIGNhbGwgdGhlbSBhdAorICogYW55IHRpbWUuCisgKgorICogV2l0aGluIG1hYzgwMjExLCBrZXkgcmVmZXJlbmNlcyBhcmUsIGp1c3QgYXMgU1RBIHN0cnVjdHVyZSByZWZlcmVuY2VzLAorICogcHJvdGVjdGVkIGJ5IFJDVS4gTm90ZSwgaG93ZXZlciwgdGhhdCBzb21lIHRoaW5ncyBhcmUgdW5wcm90ZWN0ZWQsCisgKiBuYW1lbHkgdGhlIGtleS0+c3RhIGRlcmVmZXJlbmNlcyB3aXRoaW4gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgorICogZnVuY3Rpb25zLiBUaGlzIG1lYW5zIHRoYXQgc3RhX2luZm9fZGVzdHJveSgpIG11c3QgZmx1c2ggdGhlIGtleSB0b2RvCisgKiBsaXN0LgorICoKKyAqIEFsbCB0aGUgZGlyZWN0IGtleSBsaXN0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgbXVzdCBub3Qgc2xlZXAgYmVjYXVzZQorICogdGhleSBjYW4gb3BlcmF0ZSBvbiBTVEEgaW5mbyBzdHJ1Y3RzIHRoYXQgYXJlIHByb3RlY3RlZCBieSBSQ1UuCiAgKi8KIAogc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CiBzdGF0aWMgY29uc3QgdTggemVyb19hZGRyW0VUSF9BTEVOXTsKIAorLyoga2V5IG11dGV4OiB1c2VkIHRvIHN5bmNocm9uaXNlIHRvZG8gcnVubmVycyAqLworc3RhdGljIERFRklORV9NVVRFWChrZXlfbXV0ZXgpOworc3RhdGljIERFRklORV9TUElOTE9DSyh0b2RvX2xvY2spOworc3RhdGljIExJU1RfSEVBRCh0b2RvX2xpc3QpOworCitzdGF0aWMgdm9pZCBrZXlfdG9kbyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaWVlZTgwMjExX2tleV90b2RvKCk7Cit9CisKK3N0YXRpYyBERUNMQVJFX1dPUksodG9kb193b3JrLCBrZXlfdG9kbyk7CisKKy8qKgorICogYWRkX3RvZG8gLSBhZGQgdG9kbyBpdGVtIGZvciBhIGtleQorICoKKyAqIEBrZXk6IGtleSB0byBhZGQgdG8gZG8gaXRlbSBmb3IKKyAqIEBmbGFnOiB0b2RvIGZsYWcocykKKyAqLworc3RhdGljIHZvaWQgYWRkX3RvZG8oc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgdTMyIGZsYWcpCit7CisJaWYgKCFrZXkpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmdG9kb19sb2NrKTsKKwlrZXktPmZsYWdzIHw9IGZsYWc7CisJLyoKKwkgKiBSZW1vdmUgYWdhaW4gaWYgYWxyZWFkeSBvbiB0aGUgbGlzdCBzbyB0aGF0IHdlIG1vdmUgaXQgdG8gdGhlIGVuZC4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmtleS0+dG9kbykpCisJCWxpc3RfZGVsKCZrZXktPnRvZG8pOworCWxpc3RfYWRkX3RhaWwoJmtleS0+dG9kbywgJnRvZG9fbGlzdCk7CisJc2NoZWR1bGVfd29yaygmdG9kb193b3JrKTsKKwlzcGluX3VubG9jaygmdG9kb19sb2NrKTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfa2V5X2xvY2sgLSBsb2NrIHRoZSBtYWM4MDIxMSBrZXkgb3BlcmF0aW9uIGxvY2sKKyAqCisgKiBUaGlzIGxvY2tzIHRoZSAoZ2xvYmFsKSBtYWM4MDIxMSBrZXkgb3BlcmF0aW9uIGxvY2ssIGFsbAorICoga2V5IG9wZXJhdGlvbnMgbXVzdCBiZSBkb25lIHVuZGVyIHRoaXMgbG9jay4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX2tleV9sb2NrKHZvaWQpCit7CisJbXV0ZXhfbG9jaygma2V5X211dGV4KTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfa2V5X3VubG9jayAtIHVubG9jayB0aGUgbWFjODAyMTEga2V5IG9wZXJhdGlvbiBsb2NrCisgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9rZXlfdW5sb2NrKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZrZXlfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBhc3NlcnRfa2V5X2xvY2sodm9pZCkKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmtleV9tdXRleCkpOworfQorCiBzdGF0aWMgY29uc3QgdTggKmdldF9tYWNfZm9yX2tleShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewogCWNvbnN0IHU4ICphZGRyID0gYmNhc3RfYWRkcjsKQEAgLTY1LDYgKzEzNCw5IEBACiAJaW50IHJldDsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAorCWFzc2VydF9rZXlfbG9jaygpOworCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAoIWtleS0+bG9jYWwtPm9wcy0+c2V0X2tleSkKIAkJcmV0dXJuOwogCkBAIC03NCw4ICsxNDYsMTEgQEAKIAkJCQkgICAgICAga2V5LT5zZGF0YS0+ZGV2LT5kZXZfYWRkciwgYWRkciwKIAkJCQkgICAgICAgJmtleS0+Y29uZik7CiAKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQlzcGluX2xvY2soJnRvZG9fbG9jayk7CiAJCWtleS0+ZmxhZ3MgfD0gS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CisJCXNwaW5fdW5sb2NrKCZ0b2RvX2xvY2spOworCX0KIAogCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9TUEMgJiYgcmV0ICE9IC1FT1BOT1RTVVBQKQogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExLSVzOiBmYWlsZWQgdG8gc2V0IGtleSAiCkBAIC05MCwxMSArMTY1LDE4IEBACiAJaW50IHJldDsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotCWlmICgha2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KQorCWFzc2VydF9rZXlfbG9jaygpOworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAoIWtleSB8fCAha2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KQogCQlyZXR1cm47CiAKLQlpZiAoIShrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKQorCXNwaW5fbG9jaygmdG9kb19sb2NrKTsKKwlpZiAoIShrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKSB7CisJCXNwaW5fdW5sb2NrKCZ0b2RvX2xvY2spOwogCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrKCZ0b2RvX2xvY2spOwogCiAJYWRkciA9IGdldF9tYWNfZm9yX2tleShrZXkpOwogCkBAIC0xMDgsMTIgKzE5MCw3NSBAQAogCQkgICAgICAgd2lwaHlfbmFtZShrZXktPmxvY2FsLT5ody53aXBoeSksCiAJCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBwcmludF9tYWMobWFjLCBhZGRyKSwgcmV0KTsKIAorCXNwaW5fbG9jaygmdG9kb19sb2NrKTsKIAlrZXktPmZsYWdzICY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKKwlzcGluX3VubG9jaygmdG9kb19sb2NrKTsKIH0KIAotc3RydWN0IGllZWU4MDIxMV9rZXkgKmllZWU4MDIxMV9rZXlfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGcsCitzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCWludCBpZHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7CisKKwlpZiAoaWR4ID49IDAgJiYgaWR4IDwgTlVNX0RFRkFVTFRfS0VZUykKKwkJa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9rZXksIGtleSk7CisKKwlpZiAoa2V5KQorCQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fREVGS0VZKTsKK30KKwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgaWR4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIHZvaWQgX19pZWVlODAyMTFfa2V5X3JlcGxhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqb2xkLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqbmV3KQoreworCWludCBpZHgsIGRlZmtleTsKKworCWlmIChuZXcpCisJCWxpc3RfYWRkKCZuZXctPmxpc3QsICZzZGF0YS0+a2V5X2xpc3QpOworCisJaWYgKHN0YSkgeworCQlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5rZXksIG5ldyk7CisJfSBlbHNlIHsKKwkJV0FSTl9PTihuZXcgJiYgb2xkICYmIG5ldy0+Y29uZi5rZXlpZHggIT0gb2xkLT5jb25mLmtleWlkeCk7CisKKwkJaWYgKG9sZCkKKwkJCWlkeCA9IG9sZC0+Y29uZi5rZXlpZHg7CisJCWVsc2UKKwkJCWlkeCA9IG5ldy0+Y29uZi5rZXlpZHg7CisKKwkJZGVma2V5ID0gb2xkICYmIHNkYXRhLT5kZWZhdWx0X2tleSA9PSBvbGQ7CisKKwkJaWYgKGRlZmtleSAmJiAhbmV3KQorCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCAtMSk7CisKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT5rZXlzW2lkeF0sIG5ldyk7CisJCWlmIChkZWZrZXkgJiYgbmV3KQorCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBuZXctPmNvbmYua2V5aWR4KTsKKwl9CisKKwlpZiAob2xkKSB7CisJCS8qCisJCSAqIFdlJ2xsIHVzZSBhbiBlbXB0eSBsaXN0IHRvIGluZGljYXRlIHRoYXQgdGhlIGtleQorCQkgKiBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQuCisJCSAqLworCQlsaXN0X2RlbF9pbml0KCZvbGQtPmxpc3QpOworCX0KK30KKworc3RydWN0IGllZWU4MDIxMV9rZXkgKmllZWU4MDIxMV9rZXlfYWxsb2MoZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGcsCiAJCQkJCSAgaW50IGlkeCwKIAkJCQkJICBzaXplX3Qga2V5X2xlbiwKIAkJCQkJICBjb25zdCB1OCAqa2V5X2RhdGEpCkBAIC0xMzcsMTAgKzI4Miw4IEBACiAJa2V5LT5jb25mLmtleWlkeCA9IGlkeDsKIAlrZXktPmNvbmYua2V5bGVuID0ga2V5X2xlbjsKIAltZW1jcHkoa2V5LT5jb25mLmtleSwga2V5X2RhdGEsIGtleV9sZW4pOwotCi0Ja2V5LT5sb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlrZXktPnNkYXRhID0gc2RhdGE7Ci0Ja2V5LT5zdGEgPSBzdGE7CisJSU5JVF9MSVNUX0hFQUQoJmtleS0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmtleS0+dG9kbyk7CiAKIAlpZiAoYWxnID09IEFMR19DQ01QKSB7CiAJCS8qCkBAIC0xNDksMjIgKzI5MiwzMSBAQAogCQkgKi8KIAkJa2V5LT51LmNjbXAudGZtID0gaWVlZTgwMjExX2Flc19rZXlfc2V0dXBfZW5jcnlwdChrZXlfZGF0YSk7CiAJCWlmICgha2V5LT51LmNjbXAudGZtKSB7Ci0JCQlpZWVlODAyMTFfa2V5X2ZyZWUoa2V5KTsKKwkJCWtmcmVlKGtleSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KIAotCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGQoa2V5LT5sb2NhbCwga2V5KTsKKwlyZXR1cm4ga2V5OworfQogCi0JLyogcmVtb3ZlIGtleSBmaXJzdCAqLwotCWlmIChzdGEpCi0JCWllZWU4MDIxMV9rZXlfZnJlZShzdGEtPmtleSk7Ci0JZWxzZQotCQlpZWVlODAyMTFfa2V5X2ZyZWUoc2RhdGEtPmtleXNbaWR4XSk7Cit2b2lkIGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAorCQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqb2xkX2tleTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpZHg7CisKKwlCVUdfT04oIXNkYXRhKTsKKwlCVUdfT04oIWtleSk7CisKKwlpZHggPSBrZXktPmNvbmYua2V5aWR4OworCWtleS0+bG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJa2V5LT5zZGF0YSA9IHNkYXRhOworCWtleS0+c3RhID0gc3RhOwogCiAJaWYgKHN0YSkgewotCQlpZWVlODAyMTFfZGVidWdmc19rZXlfc3RhX2xpbmsoa2V5LCBzdGEpOwotCiAJCS8qCiAJCSAqIHNvbWUgaGFyZHdhcmUgY2Fubm90IGhhbmRsZSBUS0lQIHdpdGggUW9TLCBzbwogCQkgKiB3ZSBpbmRpY2F0ZSB3aGV0aGVyIFFvUyBjb3VsZCBiZSBpbiB1c2UuCkBAIC0xNzUsMTA1ICszMjcsMTk0IEBACiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKSB7CiAJCQlzdHJ1Y3Qgc3RhX2luZm8gKmFwOwogCisJCQkvKgorCQkJICogV2UncmUgZ2V0dGluZyBhIHN0YSBwb2ludGVyIGluLAorCQkJICogc28gbXVzdCBiZSB1bmRlciBSQ1UgcmVhZCBsb2NrLgorCQkJICovCisKIAkJCS8qIHNhbWUgaGVyZSwgdGhlIEFQIGNvdWxkIGJlIHVzaW5nIFFvUyAqLwogCQkJYXAgPSBzdGFfaW5mb19nZXQoa2V5LT5sb2NhbCwga2V5LT5zZGF0YS0+dS5zdGEuYnNzaWQpOwogCQkJaWYgKGFwKSB7CiAJCQkJaWYgKGFwLT5mbGFncyAmIFdMQU5fU1RBX1dNRSkKIAkJCQkJa2V5LT5jb25mLmZsYWdzIHw9CiAJCQkJCQlJRUVFODAyMTFfS0VZX0ZMQUdfV01NX1NUQTsKLQkJCQlzdGFfaW5mb19wdXQoYXApOwogCQkJfQogCQl9CiAJfQogCi0JLyogZW5hYmxlIGh3YWNjZWwgaWYgYXBwcm9wcmlhdGUgKi8KLQlpZiAobmV0aWZfcnVubmluZyhrZXktPnNkYXRhLT5kZXYpKQotCQlpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoc3RhKQotCQlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5rZXksIGtleSk7CisJCW9sZF9rZXkgPSBzdGEtPmtleTsKIAllbHNlCi0JCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+a2V5c1tpZHhdLCBrZXkpOworCQlvbGRfa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKIAotCWxpc3RfYWRkKCZrZXktPmxpc3QsICZzZGF0YS0+a2V5X2xpc3QpOworCV9faWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBzdGEsIG9sZF9rZXksIGtleSk7CiAKLQlyZXR1cm4ga2V5OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKKworCS8qIGZyZWUgb2xkIGtleSBsYXRlciAqLworCWFkZF90b2RvKG9sZF9rZXksIEtFWV9GTEFHX1RPRE9fREVMRVRFKTsKKworCWFkZF90b2RvKGtleSwgS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUyk7CisJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWFkZF90b2RvKGtleSwgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCit7CisJLyoKKwkgKiBSZXBsYWNlIGtleSB3aXRoIG5vdGhpbmduZXNzIGlmIGl0IHdhcyBldmVyIHVzZWQuCisJICovCisJaWYgKGtleS0+c2RhdGEpCisJCV9faWVlZTgwMjExX2tleV9yZXBsYWNlKGtleS0+c2RhdGEsIGtleS0+c3RhLAorCQkJCQlrZXksIE5VTEwpOworCisJYWRkX3RvZG8oa2V5LCBLRVlfRkxBR19UT0RPX0RFTEVURSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmICgha2V5KQogCQlyZXR1cm47CiAKLQlpZiAoa2V5LT5zdGEpIHsKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKGtleS0+c3RhLT5rZXksIE5VTEwpOwotCX0gZWxzZSB7Ci0JCWlmIChrZXktPnNkYXRhLT5kZWZhdWx0X2tleSA9PSBrZXkpCi0JCQlpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KGtleS0+c2RhdGEsIC0xKTsKLQkJaWYgKGtleS0+Y29uZi5rZXlpZHggPj0gMCAmJgotCQkgICAga2V5LT5jb25mLmtleWlkeCA8IE5VTV9ERUZBVUxUX0tFWVMpCi0JCQlyY3VfYXNzaWduX3BvaW50ZXIoa2V5LT5zZGF0YS0+a2V5c1trZXktPmNvbmYua2V5aWR4XSwKLQkJCQkJICAgTlVMTCk7Ci0JCWVsc2UKLQkJCVdBUk5fT04oMSk7Ci0JfQorCXNwaW5fbG9ja19pcnFzYXZlKCZrZXktPnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKKwlfX2llZWU4MDIxMV9rZXlfZnJlZShrZXkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtleS0+c2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworfQogCi0JLyogd2FpdCBmb3IgYWxsIGtleSB1c2VycyB0byBjb21wbGV0ZSAqLwotCXN5bmNocm9uaXplX3JjdSgpOworLyoKKyAqIFRvIGJlIHNhZmUgYWdhaW5zdCBjb25jdXJyZW50IG1hbmlwdWxhdGlvbnMgb2YgdGhlIGxpc3QgKHdoaWNoIHNob3VsZG4ndAorICogYWN0dWFsbHkgaGFwcGVuKSB3ZSBuZWVkIHRvIGhvbGQgdGhlIHNwaW5sb2NrLiBCdXQgdW5kZXIgdGhlIHNwaW5sb2NrIHdlCisgKiBjYW4ndCBhY3R1YWxseSBkbyBtdWNoLCBzbyB3ZSBkZWZlciBwcm9jZXNzaW5nIHRvIHRoZSB0b2RvIGxpc3QuIFRoZW4gcnVuCisgKiB0aGUgdG9kbyBsaXN0IHRvIGJlIHN1cmUgdGhlIG9wZXJhdGlvbiBhbmQgcG9zc2libHkgcHJldmlvdXNseSBwZW5kaW5nCisgKiBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV90b2RvX2Zvcl9lYWNoX2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJdTMyIHRvZG9fZmxhZ3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogcmVtb3ZlIGZyb20gaHdhY2NlbCBpZiBhcHByb3ByaWF0ZSAqLworCW1pZ2h0X3NsZWVwKCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCAmc2RhdGEtPmtleV9saXN0LCBsaXN0KQorCQlhZGRfdG9kbyhrZXksIHRvZG9fZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkYXRhLT5sb2NhbC0+a2V5X2xvY2ssIGZsYWdzKTsKKworCWllZWU4MDIxMV9rZXlfdG9kbygpOworfQorCit2b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlBU1NFUlRfUlROTCgpOworCisJaWYgKFdBUk5fT04oIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfdG9kb19mb3JfZWFjaF9rZXkoc2RhdGEsIEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQpOworfQorCit2b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJQVNTRVJUX1JUTkwoKTsKKworCWllZWU4MDIxMV90b2RvX2Zvcl9lYWNoX2tleShzZGF0YSwgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faWVlZTgwMjExX2tleV9kZXN0cm95KHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCit7CisJaWYgKCFrZXkpCisJCXJldHVybjsKKwogCWllZWU4MDIxMV9rZXlfZGlzYWJsZV9od19hY2NlbChrZXkpOwogCiAJaWYgKGtleS0+Y29uZi5hbGcgPT0gQUxHX0NDTVApCiAJCWllZWU4MDIxMV9hZXNfa2V5X2ZyZWUoa2V5LT51LmNjbXAudGZtKTsKIAlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKGtleSk7CiAKLQlsaXN0X2RlbCgma2V5LT5saXN0KTsKLQogCWtmcmVlKGtleSk7CiB9CiAKLXZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGlkeCkKK3N0YXRpYyB2b2lkIF9faWVlZTgwMjExX2tleV90b2RvKHZvaWQpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKKwlib29sIHdvcmtfZG9uZTsKKwl1MzIgdG9kb2ZsYWdzOwogCi0JaWYgKGlkeCA+PSAwICYmIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMpCi0JCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CisJLyoKKwkgKiBOQjogc3RhX2luZm9fZGVzdHJveSByZWxpZXMgb24gdGhpcyEKKwkgKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAotCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkgIT0ga2V5KSB7Ci0JCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChzZGF0YSk7CisJc3Bpbl9sb2NrKCZ0b2RvX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmdG9kb19saXN0KSkgeworCQlrZXkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0b2RvX2xpc3QsIHN0cnVjdCBpZWVlODAyMTFfa2V5LCB0b2RvKTsKKwkJbGlzdF9kZWxfaW5pdCgma2V5LT50b2RvKTsKKwkJdG9kb2ZsYWdzID0ga2V5LT5mbGFncyAmIChLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTIHwKKwkJCQkJICBLRVlfRkxBR19UT0RPX0RFRktFWSB8CisJCQkJCSAgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERCB8CisJCQkJCSAgS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRSB8CisJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUxFVEUpOworCQlrZXktPmZsYWdzICY9IH50b2RvZmxhZ3M7CisJCXNwaW5fdW5sb2NrKCZ0b2RvX2xvY2spOwogCi0JCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9rZXksIGtleSk7CisJCXdvcmtfZG9uZSA9IGZhbHNlOwogCi0JCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCi0JCQlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoc2RhdGEpOworCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUykgeworCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChrZXkpOworCQkJd29ya19kb25lID0gdHJ1ZTsKKwkJfQorCQlpZiAodG9kb2ZsYWdzICYgS0VZX0ZMQUdfVE9ET19ERUZLRVkpIHsKKwkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChrZXktPnNkYXRhKTsKKwkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfZGVmYXVsdChrZXktPnNkYXRhKTsKKwkJCXdvcmtfZG9uZSA9IHRydWU7CisJCX0KKwkJaWYgKHRvZG9mbGFncyAmIEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQpIHsKKwkJCWllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CisJCQl3b3JrX2RvbmUgPSB0cnVlOworCQl9CisJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0hXQUNDRUxfUkVNT1ZFKSB7CisJCQlpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoa2V5KTsKKwkJCXdvcmtfZG9uZSA9IHRydWU7CisJCX0KKwkJaWYgKHRvZG9mbGFncyAmIEtFWV9GTEFHX1RPRE9fREVMRVRFKSB7CisJCQlfX2llZWU4MDIxMV9rZXlfZGVzdHJveShrZXkpOworCQkJd29ya19kb25lID0gdHJ1ZTsKKwkJfQorCisJCVdBUk5fT04oIXdvcmtfZG9uZSk7CisKKwkJc3Bpbl9sb2NrKCZ0b2RvX2xvY2spOwogCX0KKwlzcGluX3VubG9jaygmdG9kb19sb2NrKTsKK30KKwordm9pZCBpZWVlODAyMTFfa2V5X3RvZG8odm9pZCkKK3sKKwlpZWVlODAyMTFfa2V5X2xvY2soKTsKKwlfX2llZWU4MDIxMV9rZXlfdG9kbygpOworCWllZWU4MDIxMV9rZXlfdW5sb2NrKCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX2ZyZWVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZWVlODAyMTFfa2V5X2xvY2soKTsKKworCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChzZGF0YSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIHRtcCwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkKLQkJaWVlZTgwMjExX2tleV9mcmVlKGtleSk7Ci19CisJCV9faWVlZTgwMjExX2tleV9mcmVlKGtleSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogCi12b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OworCV9faWVlZTgwMjExX2tleV90b2RvKCk7CiAKLQlXQVJOX09OKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKTsKLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCXJldHVybjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCAmc2RhdGEtPmtleV9saXN0LCBsaXN0KQotCQlpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpOwotfQotCi12b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCAmc2RhdGEtPmtleV9saXN0LCBsaXN0KQotCQlpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoa2V5KTsKKwlpZWVlODAyMTFfa2V5X3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MmMzZGYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEva2V5LmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgSUVFRTgwMjExX0tFWV9ICisjZGVmaW5lIElFRUU4MDIxMV9LRVlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworLyogQUxHX1RLSVAKKyAqIHN0cnVjdCBpZWVlODAyMTFfa2V5OjprZXkgaXMgZW5jb2RlZCBhcyBhIDI1Ni1iaXQgKDMyIGJ5dGUpIGRhdGEgYmxvY2s6CisgKiBUZW1wb3JhbCBFbmNyeXB0aW9uIEtleSAoMTI4IGJpdHMpCisgKiBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFR4IE1JQyBLZXkgKDY0IGJpdHMpCisgKiBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFJ4IE1JQyBLZXkgKDY0IGJpdHMpCisgKi8KKworI2RlZmluZSBXRVBfSVZfTEVOIDQKKyNkZWZpbmUgV0VQX0lDVl9MRU4gNAorCisjZGVmaW5lIEFMR19US0lQX0tFWV9MRU4gMzIKKy8qIFN0YXJ0aW5nIG9mZnNldHMgZm9yIGVhY2gga2V5ICovCisjZGVmaW5lIEFMR19US0lQX1RFTVBfRU5DUl9LRVkgMAorI2RlZmluZSBBTEdfVEtJUF9URU1QX0FVVEhfVFhfTUlDX0tFWSAxNgorI2RlZmluZSBBTEdfVEtJUF9URU1QX0FVVEhfUlhfTUlDX0tFWSAyNAorI2RlZmluZSBUS0lQX0lWX0xFTiA4CisjZGVmaW5lIFRLSVBfSUNWX0xFTiA0CisKKyNkZWZpbmUgQUxHX0NDTVBfS0VZX0xFTiAxNgorI2RlZmluZSBDQ01QX0hEUl9MRU4gOAorI2RlZmluZSBDQ01QX01JQ19MRU4gOAorI2RlZmluZSBDQ01QX1RLX0xFTiAxNgorI2RlZmluZSBDQ01QX1BOX0xFTiA2CisKKyNkZWZpbmUgTlVNX1JYX0RBVEFfUVVFVUVTIDE3CisKK3N0cnVjdCBpZWVlODAyMTFfbG9jYWw7CitzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhOworc3RydWN0IHN0YV9pbmZvOworCisvKioKKyAqIGVudW0gaWVlZTgwMjExX2ludGVybmFsX2tleV9mbGFncyAtIGludGVybmFsIGtleSBmbGFncworICoKKyAqIEBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTogSW5kaWNhdGVzIHRoYXQgdGhpcyBrZXkgaXMgcHJlc2VudAorICoJaW4gdGhlIGhhcmR3YXJlIGZvciBUWCBjcnlwdG8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uLgorICogQEtFWV9GTEFHX1RPRE9fREVMRVRFOiBLZXkgaXMgbWFya2VkIGZvciBkZWxldGlvbiBhbmQgd2lsbCwgYWZ0ZXIgYW4KKyAqCVJDVSBncmFjZSBwZXJpb2QsIG5vIGxvbmdlciBiZSByZWFjaGFibGUgb3RoZXIgdGhhbiBmcm9tIHRoZQorICoJdG9kbyBsaXN0LgorICogQEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQ6IEtleSBuZWVkcyB0byBiZSBhZGRlZCB0byBoYXJkd2FyZSBhY2NlbGVyYXRpb24uCisgKiBAS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRTogS2V5IG5lZWRzIHRvIGJlIHJlbW92ZWQgZnJvbSBoYXJkd2FyZQorICoJYWNjZWxlcmF0aW9uLgorICogQEtFWV9GTEFHX1RPRE9fREVGS0VZOiBLZXkgaXMgZGVmYXVsdCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKyAqIEBLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTOiBLZXkgbmVlZHMgdG8gYmUgYWRkZWQgdG8gZGVidWdmcy4KKyAqLworZW51bSBpZWVlODAyMTFfaW50ZXJuYWxfa2V5X2ZsYWdzIHsKKwlLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRQk9IEJJVCgwKSwKKwlLRVlfRkxBR19UT0RPX0RFTEVURQkJPSBCSVQoMSksCisJS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX0FERAk9IEJJVCgyKSwKKwlLRVlfRkxBR19UT0RPX0hXQUNDRUxfUkVNT1ZFCT0gQklUKDMpLAorCUtFWV9GTEFHX1RPRE9fREVGS0VZCQk9IEJJVCg0KSwKKwlLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTCT0gQklUKDUpLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9rZXkgeworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJLyogZm9yIHNkYXRhIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyogZm9yIHRvZG8gbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgdG9kbzsKKworCS8qIHByb3RlY3RlZCBieSB0b2RvIGxvY2shICovCisJdW5zaWduZWQgaW50IGZsYWdzOworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJLyogbGFzdCB1c2VkIFRTQyAqLworCQkJdTMyIGl2MzI7CisJCQl1MTYgaXYxNjsKKwkJCXUxNiBwMWtbNV07CisJCQlpbnQgdHhfaW5pdGlhbGl6ZWQ7CisKKwkJCS8qIGxhc3QgcmVjZWl2ZWQgUlNDICovCisJCQl1MzIgaXYzMl9yeFtOVU1fUlhfREFUQV9RVUVVRVNdOworCQkJdTE2IGl2MTZfcnhbTlVNX1JYX0RBVEFfUVVFVUVTXTsKKwkJCXUxNiBwMWtfcnhbTlVNX1JYX0RBVEFfUVVFVUVTXVs1XTsKKwkJCWludCByeF9pbml0aWFsaXplZFtOVU1fUlhfREFUQV9RVUVVRVNdOworCQl9IHRraXA7CisJCXN0cnVjdCB7CisJCQl1OCB0eF9wbls2XTsKKwkJCXU4IHJ4X3BuW05VTV9SWF9EQVRBX1FVRVVFU11bNl07CisJCQlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCQkJdTMyIHJlcGxheXM7IC8qIGRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMgKi8KKwkJCS8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgdmlydF90b19wYWdlKCkgKGNyeXB0byBBUEkpICovCisjaWZuZGVmIEFFU19CTE9DS19MRU4KKyNkZWZpbmUgQUVTX0JMT0NLX0xFTiAxNgorI2VuZGlmCisJCQl1OCB0eF9jcnlwdG9fYnVmWzYgKiBBRVNfQkxPQ0tfTEVOXTsKKwkJCXU4IHJ4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOworCQl9IGNjbXA7CisJfSB1OworCisJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMga2V5IGhhcyBiZWVuIHVzZWQgKi8KKwlpbnQgdHhfcnhfY291bnQ7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUworCXN0cnVjdCB7CisJCXN0cnVjdCBkZW50cnkgKnN0YWxpbms7CisJCXN0cnVjdCBkZW50cnkgKmRpcjsKKwkJc3RydWN0IGRlbnRyeSAqa2V5bGVuOworCQlzdHJ1Y3QgZGVudHJ5ICpmbGFnczsKKwkJc3RydWN0IGRlbnRyeSAqa2V5aWR4OworCQlzdHJ1Y3QgZGVudHJ5ICpod19rZXlfaWR4OworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9yeF9jb3VudDsKKwkJc3RydWN0IGRlbnRyeSAqYWxnb3JpdGhtOworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9zcGVjOworCQlzdHJ1Y3QgZGVudHJ5ICpyeF9zcGVjOworCQlzdHJ1Y3QgZGVudHJ5ICpyZXBsYXlzOworCQlzdHJ1Y3QgZGVudHJ5ICprZXk7CisJCXN0cnVjdCBkZW50cnkgKmlmaW5kZXg7CisJCWludCBjbnQ7CisJfSBkZWJ1Z2ZzOworI2VuZGlmCisKKwkvKgorCSAqIGtleSBjb25maWcsIG11c3QgYmUgbGFzdCBiZWNhdXNlIGl0IGNvbnRhaW5zIGtleQorCSAqIG1hdGVyaWFsIGFzIHZhcmlhYmxlIGxlbmd0aCBtZW1iZXIKKwkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mIGNvbmY7Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX2tleSAqaWVlZTgwMjExX2tleV9hbGxvYyhlbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZywKKwkJCQkJICBpbnQgaWR4LAorCQkJCQkgIHNpemVfdCBrZXlfbGVuLAorCQkJCQkgIGNvbnN0IHU4ICprZXlfZGF0YSk7CisvKgorICogSW5zZXJ0IGEga2V5IGludG8gZGF0YSBzdHJ1Y3R1cmVzIChzZGF0YSwgc3RhIGlmIG5lY2Vzc2FyeSkKKyAqIHRvIG1ha2UgaXQgdXNlZCwgZnJlZSBvbGQga2V5LgorICovCit2b2lkIGllZWU4MDIxMV9rZXlfbGluayhzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAorCQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Cit2b2lkIGllZWU4MDIxMV9rZXlfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKK3ZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGlkeCk7Cit2b2lkIGllZWU4MDIxMV9mcmVlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZW5hYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKKwordm9pZCBpZWVlODAyMTFfa2V5X3RvZG8odm9pZCk7CisKKyNlbmRpZiAvKiBJRUVFODAyMTFfS0VZX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9sZWQuYyBiL25ldC9tYWM4MDIxMS9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJhNjQzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2xlZC5jCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDYsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKiBqdXN0IGZvciBJRk5BTVNJWiAqLworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSAibGVkLmgiCisKK3ZvaWQgaWVlZTgwMjExX2xlZF9yeChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlpZiAodW5saWtlbHkoIWxvY2FsLT5yeF9sZWQpKQorCQlyZXR1cm47CisJaWYgKGxvY2FsLT5yeF9sZWRfY291bnRlcisrICUgMiA9PSAwKQorCQlsZWRfdHJpZ2dlcl9ldmVudChsb2NhbC0+cnhfbGVkLCBMRURfT0ZGKTsKKwllbHNlCisJCWxlZF90cmlnZ2VyX2V2ZW50KGxvY2FsLT5yeF9sZWQsIExFRF9GVUxMKTsKK30KKworLyogcSBpcyAxIGlmIGEgcGFja2V0IHdhcyBlbnF1ZXVlZCwgMCBpZiBpdCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwordm9pZCBpZWVlODAyMTFfbGVkX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcSkKK3sKKwlpZiAodW5saWtlbHkoIWxvY2FsLT50eF9sZWQpKQorCQlyZXR1cm47CisJLyogbm90IHN1cmUgaG93IHRoaXMgaXMgc3VwcG9zZWQgdG8gd29yayAuLi4gKi8KKwlsb2NhbC0+dHhfbGVkX2NvdW50ZXIgKz0gMipxLTE7CisJaWYgKGxvY2FsLT50eF9sZWRfY291bnRlciAlIDIgPT0gMCkKKwkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPnR4X2xlZCwgTEVEX09GRik7CisJZWxzZQorCQlsZWRfdHJpZ2dlcl9ldmVudChsb2NhbC0+dHhfbGVkLCBMRURfRlVMTCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2xlZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgYm9vbCBhc3NvY2lhdGVkKQoreworCWlmICh1bmxpa2VseSghbG9jYWwtPmFzc29jX2xlZCkpCisJCXJldHVybjsKKwlpZiAoYXNzb2NpYXRlZCkKKwkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPmFzc29jX2xlZCwgTEVEX0ZVTEwpOworCWVsc2UKKwkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPmFzc29jX2xlZCwgTEVEX09GRik7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2xlZF9yYWRpbyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgYm9vbCBlbmFibGVkKQoreworCWlmICh1bmxpa2VseSghbG9jYWwtPnJhZGlvX2xlZCkpCisJCXJldHVybjsKKwlpZiAoZW5hYmxlZCkKKwkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPnJhZGlvX2xlZCwgTEVEX0ZVTEwpOworCWVsc2UKKwkJbGVkX3RyaWdnZXJfZXZlbnQobG9jYWwtPnJhZGlvX2xlZCwgTEVEX09GRik7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2xlZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCWxvY2FsLT5yeF9sZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAobG9jYWwtPnJ4X2xlZCkgeworCQlzbnByaW50Zihsb2NhbC0+cnhfbGVkX25hbWUsIHNpemVvZihsb2NhbC0+cnhfbGVkX25hbWUpLAorCQkJICIlc3J4Iiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJbG9jYWwtPnJ4X2xlZC0+bmFtZSA9IGxvY2FsLT5yeF9sZWRfbmFtZTsKKwkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGxvY2FsLT5yeF9sZWQpKSB7CisJCQlrZnJlZShsb2NhbC0+cnhfbGVkKTsKKwkJCWxvY2FsLT5yeF9sZWQgPSBOVUxMOworCQl9CisJfQorCisJbG9jYWwtPnR4X2xlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWRfdHJpZ2dlciksIEdGUF9LRVJORUwpOworCWlmIChsb2NhbC0+dHhfbGVkKSB7CisJCXNucHJpbnRmKGxvY2FsLT50eF9sZWRfbmFtZSwgc2l6ZW9mKGxvY2FsLT50eF9sZWRfbmFtZSksCisJCQkgIiVzdHgiLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCQlsb2NhbC0+dHhfbGVkLT5uYW1lID0gbG9jYWwtPnR4X2xlZF9uYW1lOworCQlpZiAobGVkX3RyaWdnZXJfcmVnaXN0ZXIobG9jYWwtPnR4X2xlZCkpIHsKKwkJCWtmcmVlKGxvY2FsLT50eF9sZWQpOworCQkJbG9jYWwtPnR4X2xlZCA9IE5VTEw7CisJCX0KKwl9CisKKwlsb2NhbC0+YXNzb2NfbGVkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxlZF90cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxvY2FsLT5hc3NvY19sZWQpIHsKKwkJc25wcmludGYobG9jYWwtPmFzc29jX2xlZF9uYW1lLCBzaXplb2YobG9jYWwtPmFzc29jX2xlZF9uYW1lKSwKKwkJCSAiJXNhc3NvYyIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CisJCWxvY2FsLT5hc3NvY19sZWQtPm5hbWUgPSBsb2NhbC0+YXNzb2NfbGVkX25hbWU7CisJCWlmIChsZWRfdHJpZ2dlcl9yZWdpc3Rlcihsb2NhbC0+YXNzb2NfbGVkKSkgeworCQkJa2ZyZWUobG9jYWwtPmFzc29jX2xlZCk7CisJCQlsb2NhbC0+YXNzb2NfbGVkID0gTlVMTDsKKwkJfQorCX0KKworCWxvY2FsLT5yYWRpb19sZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAobG9jYWwtPnJhZGlvX2xlZCkgeworCQlzbnByaW50Zihsb2NhbC0+cmFkaW9fbGVkX25hbWUsIHNpemVvZihsb2NhbC0+cmFkaW9fbGVkX25hbWUpLAorCQkJICIlc3JhZGlvIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJbG9jYWwtPnJhZGlvX2xlZC0+bmFtZSA9IGxvY2FsLT5yYWRpb19sZWRfbmFtZTsKKwkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGxvY2FsLT5yYWRpb19sZWQpKSB7CisJCQlrZnJlZShsb2NhbC0+cmFkaW9fbGVkKTsKKwkJCWxvY2FsLT5yYWRpb19sZWQgPSBOVUxMOworCQl9CisJfQorfQorCit2b2lkIGllZWU4MDIxMV9sZWRfZXhpdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlpZiAobG9jYWwtPnJhZGlvX2xlZCkgeworCQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKGxvY2FsLT5yYWRpb19sZWQpOworCQlrZnJlZShsb2NhbC0+cmFkaW9fbGVkKTsKKwl9CisJaWYgKGxvY2FsLT5hc3NvY19sZWQpIHsKKwkJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcihsb2NhbC0+YXNzb2NfbGVkKTsKKwkJa2ZyZWUobG9jYWwtPmFzc29jX2xlZCk7CisJfQorCWlmIChsb2NhbC0+dHhfbGVkKSB7CisJCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIobG9jYWwtPnR4X2xlZCk7CisJCWtmcmVlKGxvY2FsLT50eF9sZWQpOworCX0KKwlpZiAobG9jYWwtPnJ4X2xlZCkgeworCQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKGxvY2FsLT5yeF9sZWQpOworCQlrZnJlZShsb2NhbC0+cnhfbGVkKTsKKwl9Cit9CisKK2NoYXIgKl9faWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKworCWlmIChsb2NhbC0+cmFkaW9fbGVkKQorCQlyZXR1cm4gbG9jYWwtPnJhZGlvX2xlZF9uYW1lOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChfX2llZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUpOworCitjaGFyICpfX2llZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisKKwlpZiAobG9jYWwtPmFzc29jX2xlZCkKKwkJcmV0dXJuIGxvY2FsLT5hc3NvY19sZWRfbmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKTsKKworY2hhciAqX19pZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCisJaWYgKGxvY2FsLT50eF9sZWQpCisJCXJldHVybiBsb2NhbC0+dHhfbGVkX25hbWU7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKF9faWVlZTgwMjExX2dldF90eF9sZWRfbmFtZSk7CisKK2NoYXIgKl9faWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKworCWlmIChsb2NhbC0+cnhfbGVkKQorCQlyZXR1cm4gbG9jYWwtPnJ4X2xlZF9uYW1lOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChfX2llZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9sZWQuaCBiL25ldC9tYWM4MDIxMS9sZWQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbmV0L21hYzgwMjExL2llZWU4MDIxMV9sZWQuaApyZW5hbWUgdG8gbmV0L21hYzgwMjExL2xlZC5oCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWE5Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL21haW4uYwpAQCAtMCwwICsxLDE4OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKworI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAicmF0ZS5oIgorI2luY2x1ZGUgIm1lc2guaCIKKyNpbmNsdWRlICJ3ZXAuaCIKKyNpbmNsdWRlICJ3bWUuaCIKKyNpbmNsdWRlICJhZXNfY2NtLmgiCisjaW5jbHVkZSAibGVkLmgiCisjaW5jbHVkZSAiY2ZnLmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgorI2luY2x1ZGUgImRlYnVnZnNfbmV0ZGV2LmgiCisKKyNkZWZpbmUgU1VQUF9NQ1NfU0VUX0xFTiAxNgorCisvKgorICogRm9yIHNlZWluZyB0cmFuc21pdHRlZCBwYWNrZXRzIG9uIG1vbml0b3IgaW50ZXJmYWNlcworICogd2UgaGF2ZSBhIHJhZGlvdGFwIGhlYWRlciB0b28uCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7CisJX19sZTE2IHR4X2ZsYWdzOworCXU4IGRhdGFfcmV0cmllczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBjb21tb24gaW50ZXJmYWNlIHJvdXRpbmVzICovCisKK3N0YXRpYyBpbnQgaGVhZGVyX3BhcnNlXzgwMjExKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKmhhZGRyKQoreworCW1lbWNweShoYWRkciwgc2tiX21hY19oZWFkZXIoc2tiKSArIDEwLCBFVEhfQUxFTik7IC8qIGFkZHIyICovCisJcmV0dXJuIEVUSF9BTEVOOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBtZGV2IHR4IGxvY2sgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzOworCXVuc2lnbmVkIGludCBuZXdfZmxhZ3MgPSAwOworCisJaWYgKGF0b21pY19yZWFkKCZsb2NhbC0+aWZmX3Byb21pc2NzKSkKKwkJbmV3X2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUzsKKworCWlmIChhdG9taWNfcmVhZCgmbG9jYWwtPmlmZl9hbGxtdWx0aXMpKQorCQluZXdfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOworCisJaWYgKGxvY2FsLT5tb25pdG9ycykKKwkJbmV3X2ZsYWdzIHw9IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOworCisJaWYgKGxvY2FsLT5maWZfZmNzZmFpbCkKKwkJbmV3X2ZsYWdzIHw9IEZJRl9GQ1NGQUlMOworCisJaWYgKGxvY2FsLT5maWZfcGxjcGZhaWwpCisJCW5ld19mbGFncyB8PSBGSUZfUExDUEZBSUw7CisKKwlpZiAobG9jYWwtPmZpZl9jb250cm9sKQorCQluZXdfZmxhZ3MgfD0gRklGX0NPTlRST0w7CisKKwlpZiAobG9jYWwtPmZpZl9vdGhlcl9ic3MpCisJCW5ld19mbGFncyB8PSBGSUZfT1RIRVJfQlNTOworCisJY2hhbmdlZF9mbGFncyA9IGxvY2FsLT5maWx0ZXJfZmxhZ3MgXiBuZXdfZmxhZ3M7CisKKwkvKiBiZSBhIGJpdCBuYXN0eSAqLworCW5ld19mbGFncyB8PSAoMTw8MzEpOworCisJbG9jYWwtPm9wcy0+Y29uZmlndXJlX2ZpbHRlcihsb2NhbF90b19odyhsb2NhbCksCisJCQkJICAgICBjaGFuZ2VkX2ZsYWdzLCAmbmV3X2ZsYWdzLAorCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2NvdW50LAorCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOworCisJV0FSTl9PTihuZXdfZmxhZ3MgJiAoMTw8MzEpKTsKKworCWxvY2FsLT5maWx0ZXJfZmxhZ3MgPSBuZXdfZmxhZ3MgJiB+KDE8PDMxKTsKK30KKworLyogbWFzdGVyIGludGVyZmFjZSAqLworCitzdGF0aWMgaW50IGllZWU4MDIxMV9tYXN0ZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJaW50IHJlcyA9IC1FT1BOT1RTVVBQOworCisJLyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoc2RhdGEtPmRldiAhPSBkZXYgJiYgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQkJcmVzID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX21hc3Rlcl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCS8qIHdlIGhvbGQgdGhlIFJUTkwgaGVyZSBzbyBjYW4gc2FmZWx5IHdhbGsgdGhlIGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCisJCWlmIChzZGF0YS0+ZGV2ICE9IGRldiAmJiBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJZGV2X2Nsb3NlKHNkYXRhLT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9tYXN0ZXJfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKK30KKworLyogcmVndWxhciBpbnRlcmZhY2VzICovCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJaW50IG1lc2hoZHJsZW47CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJbWVzaGhkcmxlbiA9IChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkgPyA1IDogMDsKKworCS8qIEZJWDogd2hhdCB3b3VsZCBiZSBwcm9wZXIgbGltaXRzIGZvciBNVFU/CisJICogVGhpcyBpbnRlcmZhY2UgdXNlcyA4MDIuMyBmcmFtZXMuICovCisJaWYgKG5ld19tdHUgPCAyNTYgfHwKKwkJbmV3X210dSA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gLSAyNCAtIDYgLSBtZXNoaGRybGVuKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpbnZhbGlkIE1UVSAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbmV3X210dSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXR0aW5nIE1UVSAlZFxuIiwgZGV2LT5uYW1lLCBuZXdfbXR1KTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRyAqLworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWRlbnRpY2FsX21hY19hZGRyX2FsbG93ZWQoaW50IHR5cGUxLCBpbnQgdHlwZTIpCit7CisJcmV0dXJuICh0eXBlMSA9PSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSIHx8CisJCXR5cGUyID09IElFRUU4MDIxMV9JRl9UWVBFX01OVFIgfHwKKwkJKHR5cGUxID09IElFRUU4MDIxMV9JRl9UWVBFX0FQICYmCisJCSB0eXBlMiA9PSBJRUVFODAyMTFfSUZfVFlQRV9XRFMpIHx8CisJCSh0eXBlMSA9PSBJRUVFODAyMTFfSUZfVFlQRV9XRFMgJiYKKwkJICh0eXBlMiA9PSBJRUVFODAyMTFfSUZfVFlQRV9XRFMgfHwKKwkJICB0eXBlMiA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkpIHx8CisJCSh0eXBlMSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCAmJgorCQkgdHlwZTIgPT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTikgfHwKKwkJKHR5cGUxID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4gJiYKKwkJICh0eXBlMiA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCB8fAorCQkgIHR5cGUyID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pKSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgKm5zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CisJaW50IHJlczsKKwlib29sIG5lZWRfaHdfcmVjb25maWcgPSAwOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJLyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobnNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuc2RhdGEtPmRldjsKKworCQlpZiAobmRldiAhPSBkZXYgJiYgbmRldiAhPSBsb2NhbC0+bWRldiAmJiBuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCQkvKgorCQkJICogQWxsb3cgb25seSBhIHNpbmdsZSBJQlNTIGludGVyZmFjZSB0byBiZSB1cCBhdCBhbnkKKwkJCSAqIHRpbWUuIFRoaXMgaXMgcmVzdHJpY3RlZCBiZWNhdXNlIGJlYWNvbiBkaXN0cmlidXRpb24KKwkJCSAqIGNhbm5vdCB3b3JrIHByb3Blcmx5IGlmIGJvdGggYXJlIGluIHRoZSBzYW1lIElCU1MuCisJCQkgKgorCQkJICogVG8gcmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24gd2UnZCBoYXZlIHRvIGRpc2FsbG93IHRoZW0KKwkJCSAqIGZyb20gc2V0dGluZyB0aGUgc2FtZSBTU0lEIG9uIGRpZmZlcmVudCBJQlNTIGludGVyZmFjZXMKKwkJCSAqIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBoYXJkd2FyZS4gVGhlbiwgaG93ZXZlciwgd2UncmUKKwkJCSAqIGZhY2VkIHdpdGggaGF2aW5nIHRvIGFkb3B0IHR3byBkaWZmZXJlbnQgVFNGIHRpbWVycy4uLgorCQkJICovCisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYKKwkJCSAgICBuc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCisJCQkJcmV0dXJuIC1FQlVTWTsKKworCQkJLyoKKwkJCSAqIERpc2FsbG93IG11bHRpcGxlIElCU1MvU1RBIG1vZGUgaW50ZXJmYWNlcy4KKwkJCSAqCisJCQkgKiBUaGlzIGlzIGEgdGVjaG5pY2FsIHJlc3RyaWN0aW9uLCBpdCBpcyBwb3NzaWJsZSBhbHRob3VnaAorCQkJICogbW9zdCBsaWtlbHkgbm90IElFRUUgODAyLjExIGNvbXBsaWFudCB0byBoYXZlIG11bHRpcGxlCisJCQkgKiBTVEFzIHdpdGgganVzdCBhIHNpbmdsZSBoYXJkd2FyZSAodGhlIFRTRiB0aW1lciB3aWxsIG5vdAorCQkJICogYmUgYWRqdXN0ZWQgcHJvcGVybHkuKQorCQkJICoKKwkJCSAqIEhvd2V2ZXIsIGJlY2F1c2UgbWFjODAyMTEgdXNlcyB0aGUgbWFzdGVyIGRldmljZSdzIEJTUworCQkJICogaW5mb3JtYXRpb24gZm9yIGVhY2ggU1RBL0lCU1MgaW50ZXJmYWNlLCBkb2luZyB0aGlzIHdpbGwKKwkJCSAqIGN1cnJlbnRseSBjb3JydXB0IHRoYXQgQlNTIGluZm9ybWF0aW9uIGNvbXBsZXRlbHksIHVubGVzcywKKwkJCSAqIGEgbm90IHZlcnkgdXNlZnVsIGNhc2UsIGJvdGggU1RBcyBhcmUgYXNzb2NpYXRlZCB0byB0aGUKKwkJCSAqIHNhbWUgQlNTLgorCQkJICoKKwkJCSAqIFRvIHJlbW92ZSB0aGlzIHJlc3RyaWN0aW9uLCB0aGUgQlNTIGluZm9ybWF0aW9uIG5lZWRzIHRvCisJCQkgKiBiZSBlbWJlZGRlZCBpbiB0aGUgU1RBL0lCU1MgbW9kZSBzZGF0YSBpbnN0ZWFkIG9mIHVzaW5nCisJCQkgKiB0aGUgbWFzdGVyIGRldmljZSdzIEJTUyBzdHJ1Y3R1cmUuCisJCQkgKi8KKwkJCWlmICgoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAorCQkJICAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgJiYKKwkJCSAgICAobnNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKKwkJCSAgICAgbnNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSkKKwkJCQlyZXR1cm4gLUVCVVNZOworCisJCQkvKgorCQkJICogVGhlIHJlbWFpbmluZyBjaGVja3MgYXJlIG9ubHkgcGVyZm9ybWVkIGZvciBpbnRlcmZhY2VzCisJCQkgKiB3aXRoIHRoZSBzYW1lIE1BQyBhZGRyZXNzLgorCQkJICovCisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIsIG5kZXYtPmRldl9hZGRyKSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIGNoZWNrIHdoZXRoZXIgaXQgbWF5IGhhdmUgdGhlIHNhbWUgYWRkcmVzcworCQkJICovCisJCQlpZiAoIWlkZW50aWNhbF9tYWNfYWRkcl9hbGxvd2VkKHNkYXRhLT52aWYudHlwZSwKKwkJCQkJCQluc2RhdGEtPnZpZi50eXBlKSkKKwkJCQlyZXR1cm4gLUVOT1RVTklROworCisJCQkvKgorCQkJICogY2FuIG9ubHkgYWRkIFZMQU5zIHRvIGVuYWJsZWQgQVBzCisJCQkgKi8KKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTiAmJgorCQkJICAgIG5zZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCisJCQkJc2RhdGEtPnUudmxhbi5hcCA9IG5zZGF0YTsKKwkJfQorCX0KKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6CisJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyKSkKKwkJCXJldHVybiAtRU5PTElOSzsKKworCQkvKiBDcmVhdGUgU1RBIGVudHJ5IGZvciB0aGUgV0RTIHBlZXIgKi8KKwkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwKKwkJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfQVVUSE9SSVpFRDsKKworCQlyZXMgPSBzdGFfaW5mb19pbnNlcnQoc3RhKTsKKwkJaWYgKHJlcykgeworCQkJLyogU1RBIGhhcyBiZWVuIGZyZWVkICovCisJCQlyZXR1cm4gcmVzOworCQl9CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfVkxBTjoKKwkJaWYgKCFzZGF0YS0+dS52bGFuLmFwKQorCQkJcmV0dXJuIC1FTk9MSU5LOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0FQOgorCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgorCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOgorCQkvKiBubyBzcGVjaWFsIHRyZWF0bWVudCAqLworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lOVkFMSUQ6CisJCS8qIGNhbm5vdCBoYXBwZW4gKi8KKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGxvY2FsLT5vcGVuX2NvdW50ID09IDApIHsKKwkJcmVzID0gMDsKKwkJaWYgKGxvY2FsLT5vcHMtPnN0YXJ0KQorCQkJcmVzID0gbG9jYWwtPm9wcy0+c3RhcnQobG9jYWxfdG9faHcobG9jYWwpKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisJCW5lZWRfaHdfcmVjb25maWcgPSAxOworCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkKTsKKwl9CisKKwlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfVkxBTjoKKwkJbGlzdF9hZGQoJnNkYXRhLT51LnZsYW4ubGlzdCwgJnNkYXRhLT51LnZsYW4uYXAtPnUuYXAudmxhbnMpOworCQkvKiBubyBuZWVkIHRvIHRlbGwgZHJpdmVyICovCisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09PS19GUkFNRVMpIHsKKwkJCWxvY2FsLT5jb29rZWRfbW50cnMrKzsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogbXVzdCBiZSBiZWZvcmUgdGhlIGNhbGwgdG8gaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIgKi8KKwkJbG9jYWwtPm1vbml0b3JzKys7CisJCWlmIChsb2NhbC0+bW9uaXRvcnMgPT0gMSkKKwkJCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1JBRElPVEFQOworCisJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0ZDU0ZBSUwpCisJCQlsb2NhbC0+ZmlmX2Zjc2ZhaWwrKzsKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfUExDUEZBSUwpCisJCQlsb2NhbC0+ZmlmX3BsY3BmYWlsKys7CisJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0NPTlRST0wpCisJCQlsb2NhbC0+ZmlmX2NvbnRyb2wrKzsKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfT1RIRVJfQlNTKQorCQkJbG9jYWwtPmZpZl9vdGhlcl9ic3MrKzsKKworCQluZXRpZl90eF9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKwkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOworCQluZXRpZl90eF91bmxvY2tfYmgobG9jYWwtPm1kZXYpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CisJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKKwkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOworCQljb25mLm1hY19hZGRyID0gZGV2LT5kZXZfYWRkcjsKKwkJcmVzID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksICZjb25mKTsKKwkJaWYgKHJlcyAmJiAhbG9jYWwtPm9wZW5fY291bnQgJiYgbG9jYWwtPm9wcy0+c3RvcCkKKwkJCWxvY2FsLT5vcHMtPnN0b3AobG9jYWxfdG9faHcobG9jYWwpKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisKKwkJaWVlZTgwMjExX2lmX2NvbmZpZyhkZXYpOworCQlpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oZGV2KTsKKwkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgorCQkgICAgIShzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpKQorCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJZWxzZQorCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCX0KKworCWlmIChsb2NhbC0+b3Blbl9jb3VudCA9PSAwKSB7CisJCXJlcyA9IGRldl9vcGVuKGxvY2FsLT5tZGV2KTsKKwkJV0FSTl9PTihyZXMpOworCQl0YXNrbGV0X2VuYWJsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7CisJCXRhc2tsZXRfZW5hYmxlKCZsb2NhbC0+dGFza2xldCk7CisJfQorCisJLyoKKwkgKiBzZXRfbXVsdGljYXN0X2xpc3Qgd2lsbCBiZSBpbnZva2VkIGJ5IHRoZSBuZXR3b3JraW5nIGNvcmUKKwkgKiB3aGljaCB3aWxsIGNoZWNrIHdoZXRoZXIgYW55IGluY3JlbWVudHMgaGVyZSB3ZXJlIGRvbmUgaW4KKwkgKiBlcnJvciBhbmQgc3luYyB0aGVtIGRvd24gdG8gdGhlIGhhcmR3YXJlIGFzIGZpbHRlciBmbGFncy4KKwkgKi8KKwlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJKQorCQlhdG9taWNfaW5jKCZsb2NhbC0+aWZmX2FsbG11bHRpcyk7CisKKwlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1BST01JU0MpCisJCWF0b21pY19pbmMoJmxvY2FsLT5pZmZfcHJvbWlzY3MpOworCisJbG9jYWwtPm9wZW5fY291bnQrKzsKKwlpZiAobmVlZF9od19yZWNvbmZpZykKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCk7CisKKwkvKgorCSAqIGllZWU4MDIxMV9zdGFfd29yayBpcyBkaXNhYmxlZCB3aGlsZSBuZXR3b3JrIGludGVyZmFjZQorCSAqIGlzIGRvd24uIFRoZXJlZm9yZSwgc29tZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgbWF5IG5vdAorCSAqIHlldCBiZSBlZmZlY3RpdmUuIFRyaWdnZXIgZXhlY3V0aW9uIG9mIGllZWU4MDIxMV9zdGFfd29yaworCSAqIHRvIGZpeCB0aGlzLgorCSAqLworCWlmKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKKwkgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJfQorCisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwkvKgorCSAqIFN0b3AgVFggb24gdGhpcyBpbnRlcmZhY2UgZmlyc3QuCisJICovCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJLyoKKwkgKiBOb3cgZGVsZXRlIGFsbCBhY3RpdmUgYWdncmVnYXRpb24gc2Vzc2lvbnMuCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhKQorCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoZGV2LCBzdGEtPmFkZHIpOworCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCisJLyoKKwkgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS4KKwkgKgorCSAqIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIG9wcy0+cmVtb3ZlX2ludGVyZmFjZSgpCisJICogYmVjYXVzZSBvdGhlcndpc2Ugd2UgY2FuIGxhdGVyIGludm9rZSBvcHMtPnN0YV9ub3RpZnkoKQorCSAqIHdoZW5ldmVyIHRoZSBTVEFzIGFyZSByZW1vdmVkLCBhbmQgdGhhdCBpbnZhbGlkYXRlcyBkcml2ZXIKKwkgKiBhc3N1bXB0aW9ucyBhYm91dCBhbHdheXMgZ2V0dGluZyBhIHZpZiBwb2ludGVyIHRoYXQgaXMgdmFsaWQKKwkgKiAoYmVjYXVzZSBpZiB3ZSByZW1vdmUgYSBTVEEgYWZ0ZXIgb3BzLT5yZW1vdmVfaW50ZXJmYWNlKCkKKwkgKiB0aGUgZHJpdmVyIHdpbGwgaGF2ZSByZW1vdmVkIHRoZSB2aWYgaW5mbyBhbHJlYWR5ISkKKwkgKgorCSAqIFdlIGNvdWxkIHJlbGF4IHRoaXMgYW5kIG9ubHkgdW5saW5rIHRoZSBzdGF0aW9ucyBmcm9tIHRoZQorCSAqIGhhc2ggdGFibGUgYW5kIGxpc3QgYnV0IGtlZXAgdGhlbSBvbiBhIHBlci1zZGF0YSBsaXN0IHRoYXQKKwkgKiB3aWxsIGJlIGluc2VydGVkIGJhY2sgYWdhaW4gd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQKKwkgKiB1cCBhZ2FpbiwgYnV0IEkgZG9uJ3QgY3VycmVudGx5IHNlZSBhIHVzZSBjYXNlIGZvciB0aGF0LAorCSAqIGV4Y2VwdCB3aXRoIFdEUyB3aGljaCBnZXRzIGEgU1RBIGVudHJ5IGNyZWF0ZWQgd2hlbiBpdCBpcworCSAqIGJyb3VnaHQgdXAuCisJICovCisJc3RhX2luZm9fZmx1c2gobG9jYWwsIHNkYXRhKTsKKworCS8qCisJICogRG9uJ3QgY291bnQgdGhpcyBpbnRlcmZhY2UgZm9yIHByb21pc2MvYWxsbXVsdGkgd2hpbGUgaXQKKwkgKiBpcyBkb3duLiBkZXZfbWNfdW5zeW5jKCkgd2lsbCBpbnZva2Ugc2V0X211bHRpY2FzdF9saXN0CisJICogb24gdGhlIG1hc3RlciBpbnRlcmZhY2Ugd2hpY2ggd2lsbCBzeW5jIHRoZXNlIGRvd24gdG8gdGhlCisJICogaGFyZHdhcmUgYXMgZmlsdGVyIGZsYWdzLgorCSAqLworCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfQUxMTVVMVEkpCisJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfYWxsbXVsdGlzKTsKKworCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfUFJPTUlTQykKKwkJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9wcm9taXNjcyk7CisKKwlkZXZfbWNfdW5zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOworCisJLyogQVBzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgKi8KKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW4sICp0bXA7CisJCXN0cnVjdCBiZWFjb25fZGF0YSAqb2xkX2JlYWNvbiA9IHNkYXRhLT51LmFwLmJlYWNvbjsKKworCQkvKiByZW1vdmUgYmVhY29uICovCisJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+dS5hcC5iZWFjb24sIE5VTEwpOworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJa2ZyZWUob2xkX2JlYWNvbik7CisKKwkJLyogZG93biBhbGwgZGVwZW5kZW50IGRldmljZXMsIHRoYXQgaXMgVkxBTnMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHRtcCwgJnNkYXRhLT51LmFwLnZsYW5zLAorCQkJCQkgdS52bGFuLmxpc3QpCisJCQlkZXZfY2xvc2Uodmxhbi0+ZGV2KTsKKwkJV0FSTl9PTighbGlzdF9lbXB0eSgmc2RhdGEtPnUuYXAudmxhbnMpKTsKKwl9CisKKwlsb2NhbC0+b3Blbl9jb3VudC0tOworCisJc3dpdGNoIChzZGF0YS0+dmlmLnR5cGUpIHsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46CisJCWxpc3RfZGVsKCZzZGF0YS0+dS52bGFuLmxpc3QpOworCQlzZGF0YS0+dS52bGFuLmFwID0gTlVMTDsKKwkJLyogbm8gbmVlZCB0byB0ZWxsIGRyaXZlciAqLworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01OVFI6CisJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0NPT0tfRlJBTUVTKSB7CisJCQlsb2NhbC0+Y29va2VkX21udHJzLS07CisJCQlicmVhazsKKwkJfQorCisJCWxvY2FsLT5tb25pdG9ycy0tOworCQlpZiAobG9jYWwtPm1vbml0b3JzID09IDApCisJCQlsb2NhbC0+aHcuY29uZi5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUkFESU9UQVA7CisKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfRkNTRkFJTCkKKwkJCWxvY2FsLT5maWZfZmNzZmFpbC0tOworCQlpZiAoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19QTENQRkFJTCkKKwkJCWxvY2FsLT5maWZfcGxjcGZhaWwtLTsKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09OVFJPTCkKKwkJCWxvY2FsLT5maWZfY29udHJvbC0tOworCQlpZiAoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19PVEhFUl9CU1MpCisJCQlsb2NhbC0+ZmlmX290aGVyX2Jzcy0tOworCisJCW5ldGlmX3R4X2xvY2tfYmgobG9jYWwtPm1kZXYpOworCQlpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7CisJCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDoKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1NUQToKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CisJCXNkYXRhLT51LnN0YS5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKKwkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51LnN0YS50aW1lcik7CisJCS8qCisJCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCisJCSAqIENhbGwgc3luY2hyb25pemVfcmN1KCkgdG8gd2FpdCBmb3IgdGhlIFJYIHBhdGgKKwkJICogc2hvdWxkIGl0IGJlIHVzaW5nIHRoZSBpbnRlcmZhY2UgYW5kIGVucXVldWluZworCQkgKiBmcmFtZXMgYXQgdGhpcyB2ZXJ5IHRpbWUgb24gYW5vdGhlciBDUFUuCisJCSAqLworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5zdGEuc2tiX3F1ZXVlKTsKKworCQlpZiAobG9jYWwtPnNjYW5fZGV2ID09IHNkYXRhLT5kZXYpIHsKKwkJCWlmICghbG9jYWwtPm9wcy0+aHdfc2NhbikgeworCQkJCWxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgPSAwOworCQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmxvY2FsLT5zY2FuX3dvcmspOworCQkJfSBlbHNlCisJCQkJbG9jYWwtPnN0YV9od19zY2FubmluZyA9IDA7CisJCX0KKworCQlmbHVzaF93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisKKwkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKKwkJa2ZyZWUoc2RhdGEtPnUuc3RhLmV4dHJhX2llKTsKKwkJc2RhdGEtPnUuc3RhLmV4dHJhX2llID0gTlVMTDsKKwkJc2RhdGEtPnUuc3RhLmV4dHJhX2llX2xlbiA9IDA7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CisJCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKKwkJY29uZi5tYWNfYWRkciA9IGRldi0+ZGV2X2FkZHI7CisJCS8qIGRpc2FibGUgYWxsIGtleXMgZm9yIGFzIGxvbmcgYXMgdGhpcyBuZXRkZXYgaXMgZG93biAqLworCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKKwkJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksICZjb25mKTsKKwl9CisKKwlpZiAobG9jYWwtPm9wZW5fY291bnQgPT0gMCkgeworCQlpZiAobmV0aWZfcnVubmluZyhsb2NhbC0+bWRldikpCisJCQlkZXZfY2xvc2UobG9jYWwtPm1kZXYpOworCisJCWlmIChsb2NhbC0+b3BzLT5zdG9wKQorCQkJbG9jYWwtPm9wcy0+c3RvcChsb2NhbF90b19odyhsb2NhbCkpOworCisJCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIDApOworCisJCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7CisJCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnRhc2tsZXQpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwl1MTYgc3RhcnRfc2VxX251bSA9IDA7CisJdTggKnN0YXRlOworCWludCByZXQ7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZiAodGlkID49IFNUQV9USURfTlVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJPcGVuIEJBIHNlc3Npb24gcmVxdWVzdGVkIGZvciAlcyB0aWQgJXVcbiIsCisJCQkJcHJpbnRfbWFjKG1hYywgcmEpLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHRoZSBzdGF0aW9uXG4iKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKworCS8qIHdlIGhhdmUgdHJpZWQgdG9vIG1hbnkgdGltZXMsIHJlY2VpdmVyIGRvZXMgbm90IHdhbnQgQS1NUERVICovCisJaWYgKHN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPiBIVF9BR0dfTUFYX1JFVFJJRVMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHN0YXJ0X2JhX2V4aXQ7CisJfQorCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgbm90IGluIGFnZ3JlZ2F0aW9uIGZsb3cgYWxyZWFkeSAqLworCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gc2Vzc2lvbiBpcyBub3QgIgorCQkJCSAiaWRsZSBvbiB0aWQgJXVcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gc3RhcnRfYmFfZXhpdDsKKwl9CisKKwkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAorCQkJCQl0aWQpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHN0YXJ0X2JhX2V4aXQ7CisJfQorCS8qIFR4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmZ1bmN0aW9uID0KKwkJCXN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQ7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmRhdGEgPQorCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKworCS8qIGVuc3VyZSB0aGF0IFRYIGZsb3cgd29uJ3QgaW50ZXJydXB0IHVzCisJICogdW50aWwgdGhlIGVuZCBvZiB0aGUgY2FsbCB0byByZXF1ZXVlIGZ1bmN0aW9uICovCisJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+bWRldi0+cXVldWVfbG9jayk7CisKKwkvKiBjcmVhdGUgYSBuZXcgcXVldWUgZm9yIHRoaXMgYWdncmVnYXRpb24gKi8KKwlyZXQgPSBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChsb2NhbCwgc3RhLCB0aWQpOworCisJLyogY2FzZSBubyBxdWV1ZSBpcyBhdmFpbGFibGUgdG8gYWdncmVnYXRpb24KKwkgKiBkb24ndCBzd2l0Y2ggdG8gYWdncmVnYXRpb24gKi8KKwlpZiAocmV0KSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHF1ZXVlIHVuYXZhaWxhYmxlIGZvciIKKwkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gc3RhcnRfYmFfZXJyOworCX0KKwlzZGF0YSA9IHN0YS0+c2RhdGE7CisKKwkvKiBPaywgdGhlIEFkZGJhIGZyYW1lIGhhc24ndCBiZWVuIHNlbnQgeWV0LCBidXQgaWYgdGhlIGRyaXZlciBjYWxscyB0aGUKKwkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KKwkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKKworCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCisJCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAorCQkJCQkJcmEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworCisJaWYgKHJldCkgeworCQkvKiBObyBuZWVkIHRvIHJlcXVldWUgdGhlIHBhY2tldHMgaW4gdGhlIGFnZyBxdWV1ZSwgc2luY2Ugd2UKKwkJICogaGVsZCB0aGUgdHggbG9jazogbm8gcGFja2V0IGNvdWxkIGJlIGVucXVldWVkIHRvIHRoZSBuZXdseQorCQkgKiBhbGxvY2F0ZWQgcXVldWUgKi8KKwkJIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMCk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKKwkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOworCQlnb3RvIHN0YXJ0X2JhX2VycjsKKwl9CisKKwkvKiBXaWxsIHB1dCBhbGwgdGhlIHBhY2tldHMgaW4gdGhlIG5ldyBTVyBxdWV1ZSAqLworCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBpZWVlODAyXzFkX3RvX2FjW3RpZF0pOworCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+bWRldi0+cXVldWVfbG9jayk7CisKKwkvKiBzZW5kIGFuIGFkZEJBIHJlcXVlc3QgKi8KKwlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcisrOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuID0KKwkJCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuID0gc3RhcnRfc2VxX251bTsKKworCWllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RhLT5zZGF0YS0+ZGV2LCByYSwgdGlkLAorCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuLAorCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuLAorCQkJIDB4NDAsIDUwMDApOworCisJLyogYWN0aXZhdGUgdGhlIHRpbWVyIGZvciB0aGUgcmVjaXBpZW50J3MgYWRkQkEgcmVzcG9uc2UgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZXhwaXJlcyA9CisJCQkJamlmZmllcyArIEFEREJBX1JFU1BfSU5URVJWQUw7CisJYWRkX3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJhY3RpdmF0ZWQgYWRkQkEgcmVzcG9uc2UgdGltZXIgb24gdGlkICVkXG4iLCB0aWQpOworCWdvdG8gc3RhcnRfYmFfZXhpdDsKKworc3RhcnRfYmFfZXJyOgorCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKKwlzcGluX3VubG9ja19iaCgmbG9jYWwtPm1kZXYtPnF1ZXVlX2xvY2spOworCXJldCA9IC1FQlVTWTsKK3N0YXJ0X2JhX2V4aXQ6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24pOworCitpbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgdTggKnJhLCB1MTYgdGlkLAorCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXU4ICpzdGF0ZTsKKwlpbnQgcmV0ID0gMDsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKworCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gc3RvcF9CQV9leGl0OworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcyB0aWQgJXVcbiIsCisJCQkJcHJpbnRfbWFjKG1hYywgcmEpLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7CisKKwkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKKwkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKKworCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCisJCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCisJCQkJCQlyYSwgdGlkLCBOVUxMKTsKKworCS8qIGNhc2UgSFcgZGVuaWVkIGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCisJaWYgKHJldCkgeworCQlXQVJOX09OKHJldCAhPSAtRUJVU1kpOworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOworCQlnb3RvIHN0b3BfQkFfZXhpdDsKKwl9CisKK3N0b3BfQkFfZXhpdDoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKTsKKwordm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1OCAqc3RhdGU7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZiAodGlkID49IFNUQV9USURfTlVNKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAorCQkJCXRpZCwgU1RBX1RJRF9OVU0pOworCQlyZXR1cm47CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXNcbiIsCisJCQkJcHJpbnRfbWFjKG1hYywgcmEpKTsKKwkJcmV0dXJuOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisKKwlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgd2FzIG5vdCByZXF1ZXN0ZWQgeWV0LCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQkqc3RhdGUpOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlXQVJOX09OX09OQ0UoKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSyk7CisKKwkqc3RhdGUgfD0gSFRfQUREQkFfRFJWX1JFQURZX01TSzsKKworCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKKwkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IpOworCit2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHU4IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1OCAqc3RhdGU7CisJaW50IGFnZ19xdWV1ZTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCisJCQkJdGlkLCBTVEFfVElEX05VTSk7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiU3RvcHBpbmcgVHggQkEgc2Vzc2lvbiBmb3IgJXMgdGlkICVkXG4iLAorCQkJCXByaW50X21hYyhtYWMsIHJhKSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXNcbiIsCisJCQkJcHJpbnRfbWFjKG1hYywgcmEpKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCWlmICgoKnN0YXRlICYgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSykgPT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBjYWxsYmFjayB0byBBLU1QRFUgc3RvcFxuIik7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSykKKwkJaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RhLT5zZGF0YS0+ZGV2LCByYSwgdGlkLAorCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwgV0xBTl9SRUFTT05fUVNUQV9OT1RfVVNFKTsKKworCWFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKKworCS8qIGF2b2lkIG9yZGVyaW5nIGlzc3Vlczogd2UgYXJlIHRoZSBvbmx5IG9uZSB0aGF0IGNhbiBtb2RpZnkKKwkgKiB0aGUgY29udGVudCBvZiB0aGUgcWRpc2NzICovCisJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+bWRldi0+cXVldWVfbG9jayk7CisJLyogcmVtb3ZlIHRoZSBxdWV1ZSBmb3IgdGhpcyBhZ2dyZWdhdGlvbiAqLworCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMSk7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5tZGV2LT5xdWV1ZV9sb2NrKTsKKworCS8qIHdlIGp1c3QgcmVxdWV1ZWQgdGhlIGFsbCB0aGUgZnJhbWVzIHRoYXQgd2VyZSBpbiB0aGUgcmVtb3ZlZAorCSAqIHF1ZXVlLCBhbmQgc2luY2Ugd2UgbWlnaHQgbWlzcyBhIHNvZnRpcnEgd2UgZG8gbmV0aWZfc2NoZWR1bGUuCisJICogaWVlZTgwMjExX3dha2VfcXVldWUgaXMgbm90IHVzZWQgaGVyZSBhcyB0aGlzIHF1ZXVlIGlzIG5vdAorCSAqIG5lY2Vzc2FyaWx5IHN0b3BwZWQgKi8KKwluZXRpZl9zY2hlZHVsZShsb2NhbC0+bWRldik7CisJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7CisJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7CisJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKTsKKwordm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKKworCWlmICh1bmxpa2VseSghc2tiKSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCisJCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOworCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwlyYV90aWQtPnRpZCA9IHRpZDsKKworCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfQUREQkFfTVNHOworCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOworCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUpOworCit2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKKworCWlmICh1bmxpa2VseSghc2tiKSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCisJCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7CisJbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOworCXJhX3RpZC0+dGlkID0gdGlkOworCisJc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9ERUxCQV9NU0c7CisJc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7CisJdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWludCBhbGxtdWx0aSwgcHJvbWlzYywgc2RhdGFfYWxsbXVsdGksIHNkYXRhX3Byb21pc2M7CisKKwlhbGxtdWx0aSA9ICEhKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpOworCXByb21pc2MgPSAhIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpOworCXNkYXRhX2FsbG11bHRpID0gISEoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJKTsKKwlzZGF0YV9wcm9taXNjID0gISEoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1BST01JU0MpOworCisJaWYgKGFsbG11bHRpICE9IHNkYXRhX2FsbG11bHRpKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQkJYXRvbWljX2luYygmbG9jYWwtPmlmZl9hbGxtdWx0aXMpOworCQllbHNlCisJCQlhdG9taWNfZGVjKCZsb2NhbC0+aWZmX2FsbG11bHRpcyk7CisJCXNkYXRhLT5mbGFncyBePSBJRUVFODAyMTFfU0RBVEFfQUxMTVVMVEk7CisJfQorCisJaWYgKHByb21pc2MgIT0gc2RhdGFfcHJvbWlzYykgeworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQkJYXRvbWljX2luYygmbG9jYWwtPmlmZl9wcm9taXNjcyk7CisJCWVsc2UKKwkJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfcHJvbWlzY3MpOworCQlzZGF0YS0+ZmxhZ3MgXj0gSUVFRTgwMjExX1NEQVRBX1BST01JU0M7CisJfQorCisJZGV2X21jX3N5bmMobG9jYWwtPm1kZXYsIGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBpZWVlODAyMTFfaGVhZGVyX29wcyA9IHsKKwkuY3JlYXRlCQk9IGV0aF9oZWFkZXIsCisJLnBhcnNlCQk9IGhlYWRlcl9wYXJzZV84MDIxMSwKKwkucmVidWlsZAk9IGV0aF9yZWJ1aWxkX2hlYWRlciwKKwkuY2FjaGUJCT0gZXRoX2hlYWRlcl9jYWNoZSwKKwkuY2FjaGVfdXBkYXRlCT0gZXRoX2hlYWRlcl9jYWNoZV91cGRhdGUsCit9OworCisvKiBNdXN0IG5vdCBiZSBjYWxsZWQgZm9yIG1kZXYgKi8KK3ZvaWQgaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0OworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPmNoYW5nZV9tdHUgPSBpZWVlODAyMTFfY2hhbmdlX210dTsKKwlkZXYtPm9wZW4gPSBpZWVlODAyMTFfb3BlbjsKKwlkZXYtPnN0b3AgPSBpZWVlODAyMTFfc3RvcDsKKwlkZXYtPmRlc3RydWN0b3IgPSBpZWVlODAyMTFfaWZfZnJlZTsKK30KKworLyogZXZlcnl0aGluZyBlbHNlICovCisKK3N0YXRpYyBpbnQgX19pZWVlODAyMTFfaWZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBza19idWZmICpiZWFjb24sCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgY29uZjsKKworCWlmICghbG9jYWwtPm9wcy0+Y29uZmlnX2ludGVyZmFjZSB8fCAhbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmY29uZiwgMCwgc2l6ZW9mKGNvbmYpKTsKKwljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwkJY29uZi5ic3NpZCA9IHNkYXRhLT51LnN0YS5ic3NpZDsKKwkJY29uZi5zc2lkID0gc2RhdGEtPnUuc3RhLnNzaWQ7CisJCWNvbmYuc3NpZF9sZW4gPSBzZGF0YS0+dS5zdGEuc3NpZF9sZW47CisJfSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CisJCWNvbmYuYmVhY29uID0gYmVhY29uOworCQlpZWVlODAyMTFfc3RhcnRfbWVzaChkZXYpOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CisJCWNvbmYuc3NpZCA9IHNkYXRhLT51LmFwLnNzaWQ7CisJCWNvbmYuc3NpZF9sZW4gPSBzZGF0YS0+dS5hcC5zc2lkX2xlbjsKKwkJY29uZi5iZWFjb24gPSBiZWFjb247CisJCWNvbmYuYmVhY29uX2NvbnRyb2wgPSBjb250cm9sOworCX0KKwlyZXR1cm4gbG9jYWwtPm9wcy0+Y29uZmlnX2ludGVyZmFjZShsb2NhbF90b19odyhsb2NhbCksCisJCQkJCSAgICAmc2RhdGEtPnZpZiwgJmNvbmYpOworfQorCitpbnQgaWVlZTgwMjExX2lmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCAmJgorCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hPU1RfR0VOX0JFQUNPTl9URU1QTEFURSkpCisJCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnX2JlYWNvbihkZXYpOworCXJldHVybiBfX2llZWU4MDIxMV9pZl9jb25maWcoZGV2LCBOVUxMLCBOVUxMKTsKK30KKworaW50IGllZWU4MDIxMV9pZl9jb25maWdfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgY29udHJvbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IT1NUX0dFTl9CRUFDT05fVEVNUExBVEUpKQorCQlyZXR1cm4gMDsKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChsb2NhbF90b19odyhsb2NhbCksICZzZGF0YS0+dmlmLAorCQkJCSAgICZjb250cm9sKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIF9faWVlZTgwMjExX2lmX2NvbmZpZyhkZXYsIHNrYiwgJmNvbnRyb2wpOworfQorCitpbnQgaWVlZTgwMjExX2h3X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJaW50IHJldCA9IDA7CisKKwlpZiAobG9jYWwtPnN0YV9zd19zY2FubmluZykKKwkJY2hhbiA9IGxvY2FsLT5zY2FuX2NoYW5uZWw7CisJZWxzZQorCQljaGFuID0gbG9jYWwtPm9wZXJfY2hhbm5lbDsKKworCWxvY2FsLT5ody5jb25mLmNoYW5uZWwgPSBjaGFuOworCisJaWYgKCFsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCkKKwkJbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgPSBjaGFuLT5tYXhfcG93ZXI7CisJZWxzZQorCQlsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCA9IG1pbihjaGFuLT5tYXhfcG93ZXIsCisJCQkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCk7CisKKwlsb2NhbC0+aHcuY29uZi5tYXhfYW50ZW5uYV9nYWluID0gY2hhbi0+bWF4X2FudGVubmFfZ2FpbjsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBIVyBDT05GSUc6IGZyZXE9JWRcbiIsCisJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgY2hhbi0+Y2VudGVyX2ZyZXEpOworI2VuZGlmCisKKwlpZiAobG9jYWwtPm9wZW5fY291bnQpCisJCXJldCA9IGxvY2FsLT5vcHMtPmNvbmZpZyhsb2NhbF90b19odyhsb2NhbCksICZsb2NhbC0+aHcuY29uZik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGllZWU4MDIxMV9oYW5kbGVfaHQgc2hvdWxkIGJlIHVzZWQgb25seSBhZnRlciBsZWdhY3kgY29uZmlndXJhdGlvbgorICogaGFzIGJlZW4gZGV0ZXJtaW5lZCBuYW1lbHkgYmFuZCwgYXMgaHQgY29uZmlndXJhdGlvbiBkZXBlbmRzIHVwb24KKyAqIHRoZSBoYXJkd2FyZSdzIEhUIGFiaWxpdGllcyBmb3IgYSBfc3BlY2lmaWNfIGJhbmQuCisgKi8KK3UzMiBpZWVlODAyMTFfaGFuZGxlX2h0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgZW5hYmxlX2h0LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpyZXFfaHRfY2FwLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyAqcmVxX2Jzc19jYXApCit7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsLT5ody5jb25mOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyBodF9jb25mOworCXN0cnVjdCBpZWVlODAyMTFfaHRfYnNzX2luZm8gaHRfYnNzX2NvbmY7CisJaW50IGk7CisJdTMyIGNoYW5nZWQgPSAwOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOworCisJLyogSFQgaXMgbm90IHN1cHBvcnRlZCAqLworCWlmICghc2JhbmQtPmh0X2luZm8uaHRfc3VwcG9ydGVkKSB7CisJCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREU7CisJCXJldHVybiAwOworCX0KKworCW1lbXNldCgmaHRfY29uZiwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpOworCW1lbXNldCgmaHRfYnNzX2NvbmYsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvKSk7CisKKwlpZiAoZW5hYmxlX2h0KSB7CisJCWlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFKSkKKwkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSFQ7CisKKwkJY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFOworCQlodF9jb25mLmh0X3N1cHBvcnRlZCA9IDE7CisKKwkJaHRfY29uZi5jYXAgPSByZXFfaHRfY2FwLT5jYXAgJiBzYmFuZC0+aHRfaW5mby5jYXA7CisJCWh0X2NvbmYuY2FwICY9IH4oSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTKTsKKwkJaHRfY29uZi5jYXAgfD0gc2JhbmQtPmh0X2luZm8uY2FwICYgSUVFRTgwMjExX0hUX0NBUF9NSU1PX1BTOworCisJCWZvciAoaSA9IDA7IGkgPCBTVVBQX01DU19TRVRfTEVOOyBpKyspCisJCQlodF9jb25mLnN1cHBfbWNzX3NldFtpXSA9CisJCQkJCXNiYW5kLT5odF9pbmZvLnN1cHBfbWNzX3NldFtpXSAmCisJCQkJCXJlcV9odF9jYXAtPnN1cHBfbWNzX3NldFtpXTsKKworCQlodF9ic3NfY29uZi5wcmltYXJ5X2NoYW5uZWwgPSByZXFfYnNzX2NhcC0+cHJpbWFyeV9jaGFubmVsOworCQlodF9ic3NfY29uZi5ic3NfY2FwID0gcmVxX2Jzc19jYXAtPmJzc19jYXA7CisJCWh0X2Jzc19jb25mLmJzc19vcF9tb2RlID0gcmVxX2Jzc19jYXAtPmJzc19vcF9tb2RlOworCisJCWh0X2NvbmYuYW1wZHVfZmFjdG9yID0gcmVxX2h0X2NhcC0+YW1wZHVfZmFjdG9yOworCQlodF9jb25mLmFtcGR1X2RlbnNpdHkgPSByZXFfaHRfY2FwLT5hbXBkdV9kZW5zaXR5OworCisJCS8qIGlmIGJzcyBjb25maWd1cmF0aW9uIGNoYW5nZWQgc3RvcmUgdGhlIG5ldyBvbmUgKi8KKwkJaWYgKG1lbWNtcCgmY29uZi0+aHRfY29uZiwgJmh0X2NvbmYsIHNpemVvZihodF9jb25mKSkgfHwKKwkJICAgIG1lbWNtcCgmY29uZi0+aHRfYnNzX2NvbmYsICZodF9ic3NfY29uZiwgc2l6ZW9mKGh0X2Jzc19jb25mKSkpIHsKKwkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSFQ7CisJCQltZW1jcHkoJmNvbmYtPmh0X2NvbmYsICZodF9jb25mLCBzaXplb2YoaHRfY29uZikpOworCQkJbWVtY3B5KCZjb25mLT5odF9ic3NfY29uZiwgJmh0X2Jzc19jb25mLCBzaXplb2YoaHRfYnNzX2NvbmYpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1NVUFBPUlRfSFRfTU9ERSkKKwkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSFQ7CisJCWNvbmYtPmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREU7CisJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICAgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlpZiAoIWNoYW5nZWQpCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKQorCQlsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKGxvY2FsX3RvX2h3KGxvY2FsKSwKKwkJCQkJICAgICAmc2RhdGEtPnZpZiwKKwkJCQkJICAgICAmc2RhdGEtPmJzc19jb25mLAorCQkJCQkgICAgIGNoYW5nZWQpOworfQorCit2b2lkIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCXNkYXRhLT5ic3NfY29uZi51c2VfY3RzX3Byb3QgPSAwOworCXNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUgPSAwOworCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLAorCQkJCQkgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UIHwKKwkJCQkJIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzYXZlZDsKKwlpbnQgdG1wOworCisJc2tiLT5kZXYgPSBsb2NhbC0+bWRldjsKKwlzYXZlZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzKSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFzYXZlZCkpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgorCQkJICAgICAgICJkcm9wcGluZyB0eCBzdGF0dXMiLCBza2ItPmRldi0+bmFtZSk7CisJCS8qIHNob3VsZCBiZSBkZXZfa2ZyZWVfc2tiX2lycSwgYnV0IGR1ZSB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nCisJCSAqIG5hbWVkIF9pcnFzYWZlIGluc3RlYWQgb2YganVzdCBfaXJxIHdlIGNhbid0IGJlIHN1cmUgdGhhdAorCQkgKiBwZW9wbGUgd29uJ3QgY2FsbCBpdCBmcm9tIG5vbi1pcnEgY29udGV4dHMgKi8KKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkoc2F2ZWQsIHN0YXR1cywgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzKSk7CisJLyogY29weSBwb2ludGVyIHRvIHNhdmVkIHN0YXR1cyBpbnRvIHNrYi0+Y2IgZm9yIHVzZSBieSB0YXNrbGV0ICovCisJbWVtY3B5KHNrYi0+Y2IsICZzYXZlZCwgc2l6ZW9mKHNhdmVkKSk7CisKKwlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX1RYX1NUQVRVU19NU0c7CisJc2tiX3F1ZXVlX3RhaWwoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1JFUV9UWF9TVEFUVVMgPworCQkgICAgICAgJmxvY2FsLT5za2JfcXVldWUgOiAmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlLCBza2IpOworCXRtcCA9IHNrYl9xdWV1ZV9sZW4oJmxvY2FsLT5za2JfcXVldWUpICsKKwkJc2tiX3F1ZXVlX2xlbigmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKKwl3aGlsZSAodG1wID4gSUVFRTgwMjExX0lSUVNBRkVfUVVFVUVfTElNSVQgJiYKKwkgICAgICAgKHNrYiA9IHNrYl9kZXF1ZXVlKCZsb2NhbC0+c2tiX3F1ZXVlX3VucmVsaWFibGUpKSkgeworCQltZW1jcHkoJnNhdmVkLCBza2ItPmNiLCBzaXplb2Yoc2F2ZWQpKTsKKwkJa2ZyZWUoc2F2ZWQpOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQl0bXAtLTsKKwkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X3N0YXR1c19kcm9wKTsKKwl9CisJdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUpOworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfdGFza2xldF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICopIGRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7CisJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnR4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZSkpIHx8CisJICAgICAgIChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKSkpIHsKKwkJc3dpdGNoIChza2ItPnBrdF90eXBlKSB7CisJCWNhc2UgSUVFRTgwMjExX1JYX01TRzoKKwkJCS8qIHN0YXR1cyBpcyBpbiBza2ItPmNiICovCisJCQltZW1jcHkoJnJ4X3N0YXR1cywgc2tiLT5jYiwgc2l6ZW9mKHJ4X3N0YXR1cykpOworCQkJLyogQ2xlYXIgc2tiLT5wa3RfdHlwZSBpbiBvcmRlciB0byBub3QgY29uZnVzZSBrZXJuZWwKKwkJCSAqIG5ldHN0YWNrLiAqLworCQkJc2tiLT5wa3RfdHlwZSA9IDA7CisJCQlfX2llZWU4MDIxMV9yeChsb2NhbF90b19odyhsb2NhbCksIHNrYiwgJnJ4X3N0YXR1cyk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfVFhfU1RBVFVTX01TRzoKKwkJCS8qIGdldCBwb2ludGVyIHRvIHNhdmVkIHN0YXR1cyBvdXQgb2Ygc2tiLT5jYiAqLworCQkJbWVtY3B5KCZ0eF9zdGF0dXMsIHNrYi0+Y2IsIHNpemVvZih0eF9zdGF0dXMpKTsKKwkJCXNrYi0+cGt0X3R5cGUgPSAwOworCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhsb2NhbF90b19odyhsb2NhbCksCisJCQkJCSAgICBza2IsIHR4X3N0YXR1cyk7CisJCQlrZnJlZSh0eF9zdGF0dXMpOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX0RFTEJBX01TRzoKKwkJCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKKwkJCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKGxvY2FsX3RvX2h3KGxvY2FsKSwKKwkJCQkJCXJhX3RpZC0+cmEsIHJhX3RpZC0+dGlkKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9BRERCQV9NU0c6CisJCQlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7CisJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IobG9jYWxfdG9faHcobG9jYWwpLAorCQkJCQkJIHJhX3RpZC0+cmEsIHJhX3RpZC0+dGlkKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWJyZWFrIDsKKwkJZGVmYXVsdDogLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlISAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5rbm93biBtZXNzYWdlIHR5cGUgKCVkKVxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHNrYi0+cGt0X3R5cGUpOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qIFJlbW92ZSBhZGRlZCBoZWFkZXJzIChlLmcuLCBRb1MgY29udHJvbCksIGVuY3J5cHRpb24gaGVhZGVyL01JQywgZXRjLiB0bworICogbWFrZSBhIHByZXBhcmVkIFRYIGZyYW1lIChvbmUgdGhhdCBoYXMgYmVlbiBnaXZlbiB0byBodykgdG8gbG9vayBsaWtlIGJyYW5kCisgKiBuZXcgSUVFRSA4MDIuMTEgZnJhbWUgdGhhdCBpcyByZWFkeSB0byBnbyB0aHJvdWdoIFRYIHByb2Nlc3NpbmcgYWdhaW4uCisgKiBBbHNvLCB0eF9wYWNrZXRfZGF0YSBpbiBjYiBpcyByZXN0b3JlZCBmcm9tIHR4X2NvbnRyb2wuICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVtb3ZlX3R4X2V4dHJhKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCit7CisJaW50IGhkcmxlbiwgaXZfbGVuLCBtaWNfbGVuOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKnBrdF9kYXRhOworCisJcGt0X2RhdGEgPSAoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqKXNrYi0+Y2I7CisJcGt0X2RhdGEtPmlmaW5kZXggPSB2aWZfdG9fc2RhdGEoY29udHJvbC0+dmlmKS0+ZGV2LT5pZmluZGV4OworCXBrdF9kYXRhLT5mbGFncyA9IDA7CisJaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1JFUV9UWF9TVEFUVVMpCisJCXBrdF9kYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfVFhQRF9SRVFfVFhfU1RBVFVTOworCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9ET19OT1RfRU5DUllQVCkKKwkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX0RPX05PVF9FTkNSWVBUOworCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9SRVFVRVVFKQorCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfUkVRVUVVRTsKKwlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRUFQT0xfRlJBTUUpCisJCXBrdF9kYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfVFhQRF9FQVBPTF9GUkFNRTsKKwlwa3RfZGF0YS0+cXVldWUgPSBjb250cm9sLT5xdWV1ZTsKKworCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisKKwlpZiAoIWtleSkKKwkJZ290byBub19rZXk7CisKKwlzd2l0Y2ggKGtleS0+Y29uZi5hbGcpIHsKKwljYXNlIEFMR19XRVA6CisJCWl2X2xlbiA9IFdFUF9JVl9MRU47CisJCW1pY19sZW4gPSBXRVBfSUNWX0xFTjsKKwkJYnJlYWs7CisJY2FzZSBBTEdfVEtJUDoKKwkJaXZfbGVuID0gVEtJUF9JVl9MRU47CisJCW1pY19sZW4gPSBUS0lQX0lDVl9MRU47CisJCWJyZWFrOworCWNhc2UgQUxHX0NDTVA6CisJCWl2X2xlbiA9IENDTVBfSERSX0xFTjsKKwkJbWljX2xlbiA9IENDTVBfTUlDX0xFTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBub19rZXk7CisJfQorCisJaWYgKHNrYi0+bGVuID49IG1pY19sZW4gJiYKKwkgICAgIShrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKQorCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gbWljX2xlbik7CisJaWYgKHNrYi0+bGVuID49IGl2X2xlbiAmJiBza2ItPmxlbiA+IGhkcmxlbikgeworCQltZW1tb3ZlKHNrYi0+ZGF0YSArIGl2X2xlbiwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIGl2X2xlbik7CisJfQorCitub19rZXk6CisJeworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwkJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwkJaWYgKChmYyAmIDB4OEMpID09IDB4ODgpIC8qIFFvUyBDb250cm9sIEZpZWxkICovIHsKKwkJCWZjICY9IH5JRUVFODAyMTFfU1RZUEVfUU9TX0RBVEE7CisJCQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CisJCQltZW1tb3ZlKHNrYi0+ZGF0YSArIDIsIHNrYi0+ZGF0YSwgaGRybGVuIC0gMik7CisJCQlza2JfcHVsbChza2IsIDIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX2ZpbHRlcmVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXMgKnN0YXR1cykKK3sKKwlzdGEtPnR4X2ZpbHRlcmVkX2NvdW50Kys7CisKKwkvKgorCSAqIENsZWFyIHRoZSBUWCBmaWx0ZXIgbWFzayBmb3IgdGhpcyBTVEEgd2hlbiBzZW5kaW5nIHRoZSBuZXh0CisJICogcGFja2V0LiBJZiB0aGUgU1RBIHdlbnQgdG8gcG93ZXIgc2F2ZSBtb2RlLCB0aGlzIHdpbGwgaGFwcGVuCisJICogaGFwcGVuIHdoZW4gaXQgd2FrZXMgdXAgZm9yIHRoZSBuZXh0IHRpbWUuCisJICovCisJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9DTEVBUl9QU19GSUxUOworCisJLyoKKwkgKiBUaGlzIGNvZGUgcmFjZXMgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisJICoKKwkgKiAgKDEpIFNUQSBzZW5kcyBmcmFtZSBpbmRpY2F0aW5nIGl0IHdpbGwgZ28gdG8gc2xlZXAgYW5kIGRvZXMgc28KKwkgKiAgKDIpIGhhcmR3YXJlL2Zpcm13YXJlIGFkZHMgU1RBIHRvIGZpbHRlciBsaXN0LCBwYXNzZXMgZnJhbWUgdXAKKwkgKiAgKDMpIGhhcmR3YXJlL2Zpcm13YXJlIHByb2Nlc3NlcyBUWCBmaWZvIGFuZCBzdXBwcmVzc2VzIGEgZnJhbWUKKwkgKiAgKDQpIHdlIGdldCBUWCBzdGF0dXMgYmVmb3JlIGhhdmluZyBwcm9jZXNzZWQgdGhlIGZyYW1lIGFuZAorCSAqCWtub3dpbmcgdGhhdCB0aGUgU1RBIGhhcyBnb25lIHRvIHNsZWVwLgorCSAqCisJICogVGhpcyBpcyBhY3R1YWxseSBxdWl0ZSB1bmxpa2VseSBldmVuIHdoZW4gYm90aCB0aG9zZSBldmVudHMgYXJlCisJICogcHJvY2Vzc2VkIGZyb20gaW50ZXJydXB0cyBjb21pbmcgaW4gcXVpY2tseSBhZnRlciBvbmUgYW5vdGhlciBvcgorCSAqIGV2ZW4gYXQgdGhlIHNhbWUgdGltZSBiZWNhdXNlIHdlIHF1ZXVlIGJvdGggVFggc3RhdHVzIGV2ZW50cyBhbmQKKwkgKiBSWCBmcmFtZXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IGEgdGFza2xldCBhbmQgcHJvY2VzcyB0aGVtIGluIHRoZQorCSAqIHNhbWUgb3JkZXIgdGhhdCB0aGV5IHdlcmUgcmVjZWl2ZWQgb3IgVFggc3RhdHVzIGxhc3QuIEhlbmNlLCB0aGVyZQorCSAqIGlzIG5vIHJhY2UgYXMgbG9uZyBhcyB0aGUgZnJhbWUgUlggaXMgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBUWAorCSAqIHN0YXR1cywgd2hpY2ggZHJpdmVycyBjYW4gZW5zdXJlLCBzZWUgYmVsb3cuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGhhcmR3YXJlIG9yIGZpcm13YXJlIGNhbgorCSAqIGFjdHVhbGx5IGFkZCBTVEFzIHRvIHRoZSBmaWx0ZXIgbGlzdCwgaWYgdGhpcyBpcyBkb25lIGJ5IHRoZQorCSAqIGRyaXZlciBpbiByZXNwb25zZSB0byBzZXRfdGltKCkgKHdoaWNoIHdpbGwgb25seSByZWR1Y2UgdGhlIHJhY2UKKwkgKiB0aGlzIHdob2xlIGZpbHRlcmluZyB0cmllcyB0byBzb2x2ZSwgbm90IGNvbXBsZXRlbHkgc29sdmUgaXQpCisJICogdGhpcyBzaXR1YXRpb24gY2Fubm90IGhhcHBlbi4KKwkgKgorCSAqIFRvIGNvbXBsZXRlbHkgc29sdmUgdGhpcyByYWNlIGRyaXZlcnMgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGV5CisJICogIChhKSBkb24ndCBtaXggdGhlIGlycS1zYWZlL25vdCBpcnEtc2FmZSBUWCBzdGF0dXMvUlggcHJvY2Vzc2luZworCSAqCWZ1bmN0aW9ucyBhbmQKKwkgKiAgKGIpIGFsd2F5cyBwcm9jZXNzIFJYIGV2ZW50cyBiZWZvcmUgVFggc3RhdHVzIGV2ZW50cyBpZiBvcmRlcmluZworCSAqICAgICAgY2FuIGJlIHVua25vd24sIGZvciBleGFtcGxlIHdpdGggZGlmZmVyZW50IGludGVycnVwdCBzdGF0dXMKKwkgKgliaXRzLgorCSAqLworCWlmIChzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMgJiYKKwkgICAgc2tiX3F1ZXVlX2xlbigmc3RhLT50eF9maWx0ZXJlZCkgPCBTVEFfTUFYX1RYX0JVRkZFUikgeworCQlpZWVlODAyMTFfcmVtb3ZlX3R4X2V4dHJhKGxvY2FsLCBzdGEtPmtleSwgc2tiLAorCQkJCQkgICZzdGF0dXMtPmNvbnRyb2wpOworCQlza2JfcXVldWVfdGFpbCgmc3RhLT50eF9maWx0ZXJlZCwgc2tiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKHN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9QUykgJiYKKwkgICAgIShzdGF0dXMtPmNvbnRyb2wuZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfUkVRVUVVRSkpIHsKKwkJLyogU29mdHdhcmUgcmV0cnkgdGhlIHBhY2tldCBvbmNlICovCisJCXN0YXR1cy0+Y29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfUkVRVUVVRTsKKwkJaWVlZTgwMjExX3JlbW92ZV90eF9leHRyYShsb2NhbCwgc3RhLT5rZXksIHNrYiwKKwkJCQkJICAmc3RhdHVzLT5jb250cm9sKTsKKwkJZGV2X3F1ZXVlX3htaXQoc2tiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmaWx0ZXJlZCBmcmFtZSwgIgorCQkgICAgICAgInF1ZXVlX2xlbj0lZCBQUz0lZCBAJWx1XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLAorCQkgICAgICAgc2tiX3F1ZXVlX2xlbigmc3RhLT50eF9maWx0ZXJlZCksCisJCSAgICAgICAhIShzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMpLCBqaWZmaWVzKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBza19idWZmICpza2IyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXUxNiBmcmFnLCB0eXBlOworCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyICpydGhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcHJldl9kZXYgPSBOVUxMOworCisJaWYgKCFzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IGllZWU4MDIxMV90eF9zdGF0dXMgY2FsbGVkIHdpdGggTlVMTCBzdGF0dXNcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZiAoc3RhdHVzLT5leGNlc3NpdmVfcmV0cmllcykgeworCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKwkJaWYgKHN0YSkgeworCQkJaWYgKHN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9QUykgeworCQkJCS8qCisJCQkJICogVGhlIFNUQSBpcyBpbiBwb3dlciBzYXZlIG1vZGUsIHNvIGFzc3VtZQorCQkJCSAqIHRoYXQgdGhpcyBUWCBwYWNrZXQgZmFpbGVkIGJlY2F1c2Ugb2YgdGhhdC4KKwkJCQkgKi8KKwkJCQlzdGF0dXMtPmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKKwkJCQlzdGF0dXMtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUVVNfVFhfRklMVEVSRUQ7CisJCQkJaWVlZTgwMjExX2hhbmRsZV9maWx0ZXJlZF9mcmFtZShsb2NhbCwgc3RhLAorCQkJCQkJCQlza2IsIHN0YXR1cyk7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorCisJaWYgKHN0YXR1cy0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVFVTX1RYX0ZJTFRFUkVEKSB7CisJCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOworCQlpZiAoc3RhKSB7CisJCQlpZWVlODAyMTFfaGFuZGxlX2ZpbHRlcmVkX2ZyYW1lKGxvY2FsLCBzdGEsIHNrYiwKKwkJCQkJCQlzdGF0dXMpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UKKwkJcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhsb2NhbC0+bWRldiwgc2tiLCBzdGF0dXMpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZWVlODAyMTFfbGVkX3R4KGxvY2FsLCAwKTsKKworCS8qIFNOTVAgY291bnRlcnMKKwkgKiBGcmFnbWVudHMgYXJlIHBhc3NlZCB0byBsb3ctbGV2ZWwgZHJpdmVycyBhcyBzZXBhcmF0ZSBza2JzLCBzbyB0aGVzZQorCSAqIGFyZSBhY3R1YWxseSBmcmFnbWVudHMsIG5vdCBmcmFtZXMuIFVwZGF0ZSBmcmFtZSBjb3VudGVycyBvbmx5IGZvcgorCSAqIHRoZSBmaXJzdCBmcmFnbWVudCBvZiB0aGUgZnJhbWUuICovCisKKwlmcmFnID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkgJiBJRUVFODAyMTFfU0NUTF9GUkFHOworCXR5cGUgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpICYgSUVFRTgwMjExX0ZDVExfRlRZUEU7CisKKwlpZiAoc3RhdHVzLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLKSB7CisJCWlmIChmcmFnID09IDApIHsKKwkJCWxvY2FsLT5kb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudCsrOworCQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCQkJCWxvY2FsLT5kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCsrOworCQkJaWYgKHN0YXR1cy0+cmV0cnlfY291bnQgPiAwKQorCQkJCWxvY2FsLT5kb3QxMVJldHJ5Q291bnQrKzsKKwkJCWlmIChzdGF0dXMtPnJldHJ5X2NvdW50ID4gMSkKKwkJCQlsb2NhbC0+ZG90MTFNdWx0aXBsZVJldHJ5Q291bnQrKzsKKwkJfQorCisJCS8qIFRoaXMgY291bnRlciBzaGFsbCBiZSBpbmNyZW1lbnRlZCBmb3IgYW4gYWNrbm93bGVkZ2VkIE1QRFUKKwkJICogd2l0aCBhbiBpbmRpdmlkdWFsIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3MgMSBmaWVsZCBvciBhbiBNUERVCisJCSAqIHdpdGggYSBtdWx0aWNhc3QgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyAxIGZpZWxkIG9mIHR5cGUgRGF0YQorCQkgKiBvciBNYW5hZ2VtZW50LiAqLworCQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CisJCSAgICB0eXBlID09IElFRUU4MDIxMV9GVFlQRV9EQVRBIHx8CisJCSAgICB0eXBlID09IElFRUU4MDIxMV9GVFlQRV9NR01UKQorCQkJbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50Kys7CisJfSBlbHNlIHsKKwkJaWYgKGZyYWcgPT0gMCkKKwkJCWxvY2FsLT5kb3QxMUZhaWxlZENvdW50Kys7CisJfQorCisJLyogdGhpcyB3YXMgYSB0cmFuc21pdHRlZCBmcmFtZSwgYnV0IG5vdyB3ZSB3YW50IHRvIHJldXNlIGl0ICovCisJc2tiX29ycGhhbihza2IpOworCisJLyoKKwkgKiBUaGlzIGlzIGEgYml0IHJhY3kgYnV0IHdlIGNhbiBhdm9pZCBhIGxvdCBvZiB3b3JrCisJICogd2l0aCB0aGlzIHRlc3QuLi4KKwkgKi8KKwlpZiAoIWxvY2FsLT5tb25pdG9ycyAmJiAhbG9jYWwtPmNvb2tlZF9tbnRycykgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZW5kIGZyYW1lIHRvIG1vbml0b3IgaW50ZXJmYWNlcyBub3cgKi8KKworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZigqcnRoZHIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExX3R4X3N0YXR1czogaGVhZHJvb20gdG9vIHNtYWxsXG4iKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm47CisJfQorCisJcnRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXNfcnRhcF9oZHIqKQorCQkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGhkcikpOworCisJbWVtc2V0KHJ0aGRyLCAwLCBzaXplb2YoKnJ0aGRyKSk7CisJcnRoZHItPmhkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJ0aGRyKSk7CisJcnRoZHItPmhkci5pdF9wcmVzZW50ID0KKwkJY3B1X3RvX2xlMzIoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTKSB8CisJCQkgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RBVEFfUkVUUklFUykpOworCisJaWYgKCEoc3RhdHVzLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUVVNfQUNLKSAmJgorCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCXJ0aGRyLT50eF9mbGFncyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9GQUlMKTsKKworCWlmICgoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKSAmJgorCSAgICAoc3RhdHVzLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkpCisJCXJ0aGRyLT50eF9mbGFncyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9DVFMpOworCWVsc2UgaWYgKHN0YXR1cy0+Y29udHJvbC5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykKKwkJcnRoZHItPnR4X2ZsYWdzIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9SQURJT1RBUF9GX1RYX1JUUyk7CisKKwlydGhkci0+ZGF0YV9yZXRyaWVzID0gc3RhdHVzLT5yZXRyeV9jb3VudDsKKworCS8qIFhYWDogaXMgdGhpcyBzdWZmaWNpZW50IGZvciBCUEY/ICovCisJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgMCk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOworCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKSB7CisJCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwcmV2X2RldikgeworCQkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoc2tiMikgeworCQkJCQlza2IyLT5kZXYgPSBwcmV2X2RldjsKKwkJCQkJbmV0aWZfcngoc2tiMik7CisJCQkJfQorCQkJfQorCisJCQlwcmV2X2RldiA9IHNkYXRhLT5kZXY7CisJCX0KKwl9CisJaWYgKHByZXZfZGV2KSB7CisJCXNrYi0+ZGV2ID0gcHJldl9kZXY7CisJCW5ldGlmX3J4KHNrYik7CisJCXNrYiA9IE5VTEw7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4X3N0YXR1cyk7CisKK3N0cnVjdCBpZWVlODAyMTFfaHcgKmllZWU4MDIxMV9hbGxvY19odyhzaXplX3QgcHJpdl9kYXRhX2xlbiwKKwkJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlpbnQgcHJpdl9zaXplOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisKKwkvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLgorCSAqIFdlIHVzZSB0aGUgd2lwaHkgcHJpdiBkYXRhIGZvciBib3RoIG91ciBpZWVlODAyMTFfbG9jYWwgYW5kIGZvcgorCSAqIHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEKKwkgKgorCSAqIEluIG1lbW9yeSBpdCdsbCBiZSBsaWtlIHRoaXM6CisJICoKKwkgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiB8IHN0cnVjdCB3aXBoeQkgICAgfAorCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqIHwgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAgfAorCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqIHwgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhICAgfAorCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqCisJICovCisJcHJpdl9zaXplID0gKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCkgKworCQkgICAgICBORVRERVZfQUxJR05fQ09OU1QpICYgfk5FVERFVl9BTElHTl9DT05TVCkgKworCQkgICAgcHJpdl9kYXRhX2xlbjsKKworCXdpcGh5ID0gd2lwaHlfbmV3KCZtYWM4MDIxMV9jb25maWdfb3BzLCBwcml2X3NpemUpOworCisJaWYgKCF3aXBoeSkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aXBoeS0+cHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkOworCisJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlsb2NhbC0+aHcud2lwaHkgPSB3aXBoeTsKKworCWxvY2FsLT5ody5wcml2ID0gKGNoYXIgKilsb2NhbCArCisJCQkgKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCkgKworCQkJICAgTkVUREVWX0FMSUdOX0NPTlNUKSAmIH5ORVRERVZfQUxJR05fQ09OU1QpOworCisJQlVHX09OKCFvcHMtPnR4KTsKKwlCVUdfT04oIW9wcy0+c3RhcnQpOworCUJVR19PTighb3BzLT5zdG9wKTsKKwlCVUdfT04oIW9wcy0+Y29uZmlnKTsKKwlCVUdfT04oIW9wcy0+YWRkX2ludGVyZmFjZSk7CisJQlVHX09OKCFvcHMtPnJlbW92ZV9pbnRlcmZhY2UpOworCUJVR19PTighb3BzLT5jb25maWd1cmVfZmlsdGVyKTsKKwlsb2NhbC0+b3BzID0gb3BzOworCisJbG9jYWwtPmh3LnF1ZXVlcyA9IDE7IC8qIGRlZmF1bHQgKi8KKworCWxvY2FsLT5icmlkZ2VfcGFja2V0cyA9IDE7CisKKwlsb2NhbC0+cnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDsKKwlsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEOworCWxvY2FsLT5zaG9ydF9yZXRyeV9saW1pdCA9IDc7CisJbG9jYWwtPmxvbmdfcmV0cnlfbGltaXQgPSA0OworCWxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgPSAxOworCisJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5pbnRlcmZhY2VzKTsKKworCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+a2V5X2xvY2spOworCisJSU5JVF9ERUxBWUVEX1dPUksoJmxvY2FsLT5zY2FuX3dvcmssIGllZWU4MDIxMV9zdGFfc2Nhbl93b3JrKTsKKworCXN0YV9pbmZvX2luaXQobG9jYWwpOworCisJdGFza2xldF9pbml0KCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0LCBpZWVlODAyMTFfdHhfcGVuZGluZywKKwkJICAgICAodW5zaWduZWQgbG9uZylsb2NhbCk7CisJdGFza2xldF9kaXNhYmxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKKworCXRhc2tsZXRfaW5pdCgmbG9jYWwtPnRhc2tsZXQsCisJCSAgICAgaWVlZTgwMjExX3Rhc2tsZXRfaGFuZGxlciwKKwkJICAgICAodW5zaWduZWQgbG9uZykgbG9jYWwpOworCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnRhc2tsZXQpOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKKworCXJldHVybiBsb2NhbF90b19odyhsb2NhbCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9hbGxvY19odyk7CisKK2ludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmVzdWx0OworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCS8qCisJICogZ2VuZXJpYyBjb2RlIGd1YXJhbnRlZXMgYXQgbGVhc3Qgb25lIGJhbmQsCisJICogc2V0IHRoaXMgdmVyeSBlYXJseSBiZWNhdXNlIG11Y2ggY29kZSBhc3N1bWVzCisJICogdGhhdCBody5jb25mLmNoYW5uZWwgaXMgYXNzaWduZWQKKwkgKi8KKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKKwkJaWYgKHNiYW5kKSB7CisJCQkvKiBpbml0IGNoYW5uZWwgd2UncmUgb24gKi8KKwkJCWxvY2FsLT5ody5jb25mLmNoYW5uZWwgPQorCQkJbG9jYWwtPm9wZXJfY2hhbm5lbCA9CisJCQlsb2NhbC0+c2Nhbl9jaGFubmVsID0gJnNiYW5kLT5jaGFubmVsc1swXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmVzdWx0ID0gd2lwaHlfcmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIGZvciBub3csIG1kZXYgbmVlZHMgc3ViX2lmX2RhdGEgOi8gKi8KKwltZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhKSwKKwkJCSAgICAid21hc3RlciVkIiwgZXRoZXJfc2V0dXApOworCWlmICghbWRldikKKwkJZ290byBmYWlsX21kZXZfYWxsb2M7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKG1kZXYpOworCW1kZXYtPmllZWU4MDIxMV9wdHIgPSAmc2RhdGEtPndkZXY7CisJc2RhdGEtPndkZXYud2lwaHkgPSBsb2NhbC0+aHcud2lwaHk7CisKKwlsb2NhbC0+bWRldiA9IG1kZXY7CisKKwlpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChtZGV2KTsKKworCW1kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdDsKKwltZGV2LT5vcGVuID0gaWVlZTgwMjExX21hc3Rlcl9vcGVuOworCW1kZXYtPnN0b3AgPSBpZWVlODAyMTFfbWFzdGVyX3N0b3A7CisJbWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisJbWRldi0+aGVhZGVyX29wcyA9ICZpZWVlODAyMTFfaGVhZGVyX29wczsKKwltZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfbWFzdGVyX3NldF9tdWx0aWNhc3RfbGlzdDsKKworCXNkYXRhLT52aWYudHlwZSA9IElFRUU4MDIxMV9JRl9UWVBFX0FQOworCXNkYXRhLT5kZXYgPSBtZGV2OworCXNkYXRhLT5sb2NhbCA9IGxvY2FsOworCXNkYXRhLT51LmFwLmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IC0xOworCXNkYXRhLT51LmFwLm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7CisJaWVlZTgwMjExX2lmX3NkYXRhX2luaXQoc2RhdGEpOworCisJLyogbm8gUkNVIG5lZWRlZCBzaW5jZSB3ZSdyZSBzdGlsbCBkdXJpbmcgaW5pdCBwaGFzZSAqLworCWxpc3RfYWRkX3RhaWwoJnNkYXRhLT5saXN0LCAmbG9jYWwtPmludGVyZmFjZXMpOworCisJbmFtZSA9IHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpLT5kcml2ZXItPm5hbWU7CisJbG9jYWwtPmh3LndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5hbWUpOworCWlmICghbG9jYWwtPmh3LndvcmtxdWV1ZSkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfd29ya3F1ZXVlOworCX0KKworCS8qCisJICogVGhlIGhhcmR3YXJlIG5lZWRzIGhlYWRyb29tIGZvciBzZW5kaW5nIHRoZSBmcmFtZSwKKwkgKiBhbmQgd2UgbmVlZCBzb21lIGhlYWRyb29tIGZvciBwYXNzaW5nIHRoZSBmcmFtZSB0byBtb25pdG9yCisJICogaW50ZXJmYWNlcywgYnV0IG5ldmVyIGJvdGggYXQgdGhlIHNhbWUgdGltZS4KKwkgKi8KKwlsb2NhbC0+dHhfaGVhZHJvb20gPSBtYXhfdCh1bnNpZ25lZCBpbnQgLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20sCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyKSk7CisKKwlkZWJ1Z2ZzX2h3X2FkZChsb2NhbCk7CisKKwlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gMTAwMDsKKworCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3Lm1heF9yc3NpID8KKwkJCSAgICAgICBJV19RVUFMX0xFVkVMX1VQREFURUQgOiBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcubWF4X3NpZ25hbCA/CisJCQkgICAgICAgSVdfUVVBTF9RVUFMX1VQREFURUQgOiBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IGxvY2FsLT5ody5tYXhfbm9pc2UgPworCQkJICAgICAgIElXX1FVQUxfTk9JU0VfVVBEQVRFRCA6IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKKwlpZiAobG9jYWwtPmh3Lm1heF9yc3NpIDwgMCB8fCBsb2NhbC0+aHcubWF4X25vaXNlIDwgMCkKKwkJbG9jYWwtPndzdGF0c19mbGFncyB8PSBJV19RVUFMX0RCTTsKKworCXJlc3VsdCA9IHN0YV9pbmZvX3N0YXJ0KGxvY2FsKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBmYWlsX3N0YV9pbmZvOworCisJcnRubF9sb2NrKCk7CisJcmVzdWx0ID0gZGV2X2FsbG9jX25hbWUobG9jYWwtPm1kZXYsIGxvY2FsLT5tZGV2LT5uYW1lKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBmYWlsX2RldjsKKworCW1lbWNweShsb2NhbC0+bWRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CisJU0VUX05FVERFVl9ERVYobG9jYWwtPm1kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKKworCXJlc3VsdCA9IHJlZ2lzdGVyX25ldGRldmljZShsb2NhbC0+bWRldik7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZmFpbF9kZXY7CisKKwlpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGxvY2FsLT5tZGV2KSk7CisJaWVlZTgwMjExX2lmX3NldF90eXBlKGxvY2FsLT5tZGV2LCBJRUVFODAyMTFfSUZfVFlQRV9BUCk7CisKKwlyZXN1bHQgPSBpZWVlODAyMTFfaW5pdF9yYXRlX2N0cmxfYWxnKGxvY2FsLAorCQkJCQkgICAgICBody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSByYXRlIGNvbnRyb2wgIgorCQkgICAgICAgImFsZ29yaXRobVxuIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJZ290byBmYWlsX3JhdGU7CisJfQorCisJcmVzdWx0ID0gaWVlZTgwMjExX3dlcF9pbml0KGxvY2FsKTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgd2VwXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJZ290byBmYWlsX3dlcDsKKwl9CisKKwlpZWVlODAyMTFfaW5zdGFsbF9xZGlzYyhsb2NhbC0+bWRldik7CisKKwkvKiBhZGQgb25lIGRlZmF1bHQgU1RBIGludGVyZmFjZSAqLworCXJlc3VsdCA9IGllZWU4MDIxMV9pZl9hZGQobG9jYWwtPm1kZXYsICJ3bGFuJWQiLCBOVUxMLAorCQkJCSAgSUVFRTgwMjExX0lGX1RZUEVfU1RBLCBOVUxMKTsKKwlpZiAocmVzdWx0KQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRmFpbGVkIHRvIGFkZCBkZWZhdWx0IHZpcnR1YWwgaWZhY2VcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCisJbG9jYWwtPnJlZ19zdGF0ZSA9IElFRUU4MDIxMV9ERVZfUkVHSVNURVJFRDsKKwlydG5sX3VubG9jaygpOworCisJaWVlZTgwMjExX2xlZF9pbml0KGxvY2FsKTsKKworCXJldHVybiAwOworCitmYWlsX3dlcDoKKwlyYXRlX2NvbnRyb2xfZGVpbml0aWFsaXplKGxvY2FsKTsKK2ZhaWxfcmF0ZToKKwlpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGxvY2FsLT5tZGV2KSk7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOworZmFpbF9kZXY6CisJcnRubF91bmxvY2soKTsKKwlzdGFfaW5mb19zdG9wKGxvY2FsKTsKK2ZhaWxfc3RhX2luZm86CisJZGVidWdmc19od19kZWwobG9jYWwpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGxvY2FsLT5ody53b3JrcXVldWUpOworZmFpbF93b3JrcXVldWU6CisJaWVlZTgwMjExX2lmX2ZyZWUobG9jYWwtPm1kZXYpOworCWxvY2FsLT5tZGV2ID0gTlVMTDsKK2ZhaWxfbWRldl9hbGxvYzoKKwl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JlZ2lzdGVyX2h3KTsKKwordm9pZCBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgKnRtcDsKKworCXRhc2tsZXRfa2lsbCgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZsb2NhbC0+dGFza2xldCk7CisKKwlydG5sX2xvY2soKTsKKworCUJVR19PTihsb2NhbC0+cmVnX3N0YXRlICE9IElFRUU4MDIxMV9ERVZfUkVHSVNURVJFRCk7CisKKwlsb2NhbC0+cmVnX3N0YXRlID0gSUVFRTgwMjExX0RFVl9VTlJFR0lTVEVSRUQ7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIGludGVyZmFjZSBsaXN0IG1hbmlwdWxhdGlvbnMgYXJlIGZpbmUKKwkgKiBiZWNhdXNlIHRoZSBkcml2ZXIgY2Fubm90IGJlIGhhbmRpbmcgdXMgZnJhbWVzIGFueQorCSAqIG1vcmUgYW5kIHRoZSB0YXNrbGV0IGlzIGtpbGxlZC4KKwkgKi8KKworCS8qCisJICogRmlyc3QsIHdlIHJlbW92ZSBhbGwgbm9uLW1hc3RlciBpbnRlcmZhY2VzLiBEbyB0aGlzIGJlY2F1c2UgdGhleQorCSAqIG1heSBoYXZlIGJzcyBwb2ludGVyIGRlcGVuZGVuY3kgb24gdGhlIG1hc3RlciwgYW5kIHdoZW4gd2UgZnJlZQorCSAqIHRoZSBtYXN0ZXIgdGhlc2Ugd291bGQgYmUgZnJlZWQgYXMgd2VsbCwgYnJlYWtpbmcgb3VyIGxpc3QKKwkgKiBpdGVyYXRpb24gY29tcGxldGVseS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2RhdGEsIHRtcCwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmIChzZGF0YS0+ZGV2ID09IGxvY2FsLT5tZGV2KQorCQkJY29udGludWU7CisJCWxpc3RfZGVsKCZzZGF0YS0+bGlzdCk7CisJCV9faWVlZTgwMjExX2lmX2RlbChsb2NhbCwgc2RhdGEpOworCX0KKworCS8qIHRoZW4sIGZpbmFsbHksIHJlbW92ZSB0aGUgbWFzdGVyIGludGVyZmFjZSAqLworCV9faWVlZTgwMjExX2lmX2RlbChsb2NhbCwgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYobG9jYWwtPm1kZXYpKTsKKworCXJ0bmxfdW5sb2NrKCk7CisKKwlpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KGxvY2FsLT5tZGV2KTsKKwlpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhsb2NhbCk7CisJc3RhX2luZm9fc3RvcChsb2NhbCk7CisJcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7CisJZGVidWdmc19od19kZWwobG9jYWwpOworCisJaWYgKHNrYl9xdWV1ZV9sZW4oJmxvY2FsLT5za2JfcXVldWUpCisJCQl8fCBza2JfcXVldWVfbGVuKCZsb2NhbC0+c2tiX3F1ZXVlX3VucmVsaWFibGUpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc2tiX3F1ZXVlIG5vdCBlbXB0eVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CisJc2tiX3F1ZXVlX3B1cmdlKCZsb2NhbC0+c2tiX3F1ZXVlKTsKKwlza2JfcXVldWVfcHVyZ2UoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSk7CisKKwlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKwl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CisJaWVlZTgwMjExX3dlcF9mcmVlKGxvY2FsKTsKKwlpZWVlODAyMTFfbGVkX2V4aXQobG9jYWwpOworCWllZWU4MDIxMV9pZl9mcmVlKGxvY2FsLT5tZGV2KTsKKwlsb2NhbC0+bWRldiA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KTsKKwordm9pZCBpZWVlODAyMTFfZnJlZV9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKworCXdpcGh5X2ZyZWUobG9jYWwtPmh3LndpcGh5KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2ZyZWVfaHcpOworCitzdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfaW5pdCh2b2lkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSkgPiBzaXplb2Yoc2tiLT5jYikpOworCisJcmV0ID0gcmM4MDIxMV9waWRfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaWVlZTgwMjExX3dtZV9yZWdpc3RlcigpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9pbml0OiBmYWlsZWQgdG8gIgorCQkgICAgICAgImluaXRpYWxpemUgV01FIChlcnI9JWQpXG4iLCByZXQpOworCQlnb3RvIG91dF9jbGVhbnVwX3BpZDsKKwl9CisKKwlpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCgpOworCisJcmV0dXJuIDA7CisKKyBvdXRfY2xlYW51cF9waWQ6CisJcmM4MDIxMV9waWRfZXhpdCgpOworIG91dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaWVlZTgwMjExX2V4aXQodm9pZCkKK3sKKwlyYzgwMjExX3BpZF9leGl0KCk7CisKKwkvKgorCSAqIEZvciBrZXkgdG9kbywgaXQnbGwgYmUgZW1wdHkgYnkgbm93IGJ1dCB0aGUgd29yaworCSAqIG1pZ2h0IHN0aWxsIGJlIHNjaGVkdWxlZC4KKwkgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJaWYgKG1lc2hfYWxsb2NhdGVkKQorCQlpZWVlODAyMTFzX3N0b3AoKTsKKworCWllZWU4MDIxMV93bWVfdW5yZWdpc3RlcigpOworCWllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9leGl0KCk7Cit9CisKKworc3Vic3lzX2luaXRjYWxsKGllZWU4MDIxMV9pbml0KTsKK21vZHVsZV9leGl0KGllZWU4MDIxMV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJRUVFIDgwMi4xMSBzdWJzeXN0ZW0iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmMgYi9uZXQvbWFjODAyMTEvbWVzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NGEzMzUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvbWVzaC5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IG9wZW44MDIxMXMgTHRkLgorICogQXV0aG9yczogICAgTHVpcyBDYXJsb3MgQ29ibyA8bHVpc2NhQGNvenliaXQuY29tPgorICogCSAgICAgICBKYXZpZXIgQ2FyZG9uYSA8amF2aWVyQGNvenliaXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAibWVzaC5oIgorCisjZGVmaW5lIFBQX09GRlNFVCAJMQkJLyogUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgKi8KKyNkZWZpbmUgUE1fT0ZGU0VUCTUJCS8qIFBhdGggU2VsZWN0aW9uIE1ldHJpYyAgICovCisjZGVmaW5lIENDX09GRlNFVAk5CQkvKiBDb25nZXN0aW9uIENvbnRyb2wgTW9kZSAqLworI2RlZmluZSBDQVBBQl9PRkZTRVQgMTcKKyNkZWZpbmUgQUNDRVBUX1BMSU5LUyAweDgwCisKK2ludCBtZXNoX2FsbG9jYXRlZDsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcm1fY2FjaGU7CisKK3ZvaWQgaWVlZTgwMjExc19pbml0KHZvaWQpCit7CisJbWVzaF9wYXRodGJsX2luaXQoKTsKKwltZXNoX2FsbG9jYXRlZCA9IDE7CisJcm1fY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibWVzaF9ybWMiLCBzaXplb2Yoc3RydWN0IHJtY19lbnRyeSksCisJCQkJICAgICAwLCAwLCBOVUxMKTsKK30KKwordm9pZCBpZWVlODAyMTFzX3N0b3Aodm9pZCkKK3sKKwltZXNoX3BhdGh0YmxfdW5yZWdpc3RlcigpOworCWttZW1fY2FjaGVfZGVzdHJveShybV9jYWNoZSk7Cit9CisKKy8qKgorICogbWVzaF9tYXRjaGVzX2xvY2FsIC0gY2hlY2sgaWYgdGhlIGNvbmZpZyBvZiBhIG1lc2ggcG9pbnQgbWF0Y2hlcyBvdXJzCisgKgorICogQGllOiBpbmZvcm1hdGlvbiBlbGVtZW50cyBvZiBhIG1hbmFnZW1lbnQgZnJhbWUgZnJvbSB0aGUgbWVzaCBwZWVyCisgKiBAZGV2OiBsb2NhbCBtZXNoIGludGVyZmFjZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBtZXNoIGNvbmZpZ3VyYXRpb24gb2YgYSBtZXNoIHBvaW50IG1hdGNoZXMgdGhlCisgKiBsb2NhbCBtZXNoIGNvbmZpZ3VyYXRpb24sIGkuZS4gaWYgYm90aCBub2RlcyBiZWxvbmcgdG8gdGhlIHNhbWUgbWVzaCBuZXR3b3JrLgorICovCitib29sIG1lc2hfbWF0Y2hlc19sb2NhbChzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqaWUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICpzdGEgPSAmc2RhdGEtPnUuc3RhOworCisJLyoKKwkgKiBBcyBzdXBwb3J0IGZvciBlYWNoIGZlYXR1cmUgaXMgYWRkZWQsIGNoZWNrIGZvciBtYXRjaGluZworCSAqIC0gT24gbWVzaCBjb25maWcgY2FwYWJpbGl0aWVzCisJICogICAtIFBvd2VyIFNhdmUgU3VwcG9ydCBFbgorCSAqICAgLSBTeW5jIHN1cHBvcnQgZW5hYmxlZAorCSAqICAgLSBTeW5jIHN1cHBvcnQgYWN0aXZlCisJICogICAtIFN5bmMgc3VwcG9ydCByZXF1aXJlZCBmcm9tIHBlZXIKKwkgKiAgIC0gTURBIGVuYWJsZWQKKwkgKiAtIFBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCBvbiBmYworCSAqLworCWlmIChzdGEtPm1lc2hfaWRfbGVuID09IGllLT5tZXNoX2lkX2xlbiAmJgorCQltZW1jbXAoc3RhLT5tZXNoX2lkLCBpZS0+bWVzaF9pZCwgaWUtPm1lc2hfaWRfbGVuKSA9PSAwICYmCisJCW1lbWNtcChzdGEtPm1lc2hfcHBfaWQsIGllLT5tZXNoX2NvbmZpZyArIFBQX09GRlNFVCwgNCkgPT0gMCAmJgorCQltZW1jbXAoc3RhLT5tZXNoX3BtX2lkLCBpZS0+bWVzaF9jb25maWcgKyBQTV9PRkZTRVQsIDQpID09IDAgJiYKKwkJbWVtY21wKHN0YS0+bWVzaF9jY19pZCwgaWUtPm1lc2hfY29uZmlnICsgQ0NfT0ZGU0VULCA0KSA9PSAwKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBtZXNoX3BlZXJfYWNjZXB0c19wbGlua3MgLSBjaGVjayBpZiBhbiBtcCBpcyB3aWxsaW5nIHRvIGVzdGFibGlzaCBwZWVyIGxpbmtzCisgKgorICogQGllOiBpbmZvcm1hdGlvbiBlbGVtZW50cyBvZiBhIG1hbmFnZW1lbnQgZnJhbWUgZnJvbSB0aGUgbWVzaCBwZWVyCisgKiBAZGV2OiBsb2NhbCBtZXNoIGludGVyZmFjZQorICovCitib29sIG1lc2hfcGVlcl9hY2NlcHRzX3BsaW5rcyhzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqaWUsCisJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoKihpZS0+bWVzaF9jb25maWcgKyBDQVBBQl9PRkZTRVQpICYgQUNDRVBUX1BMSU5LUykgIT0gMDsKK30KKworLyoqCisgKiBtZXNoX2FjY2VwdF9wbGlua3NfdXBkYXRlOiB1cGRhdGUgYWNjZXB0aW5nX3BsaW5rIGluIGxvY2FsIG1lc2ggYmVhY29ucworICoKKyAqIEBzZGF0YTogbWVzaCBpbnRlcmZhY2UgaW4gd2hpY2ggbWVzaCBiZWFjb25zIGFyZSBnb2luZyB0byBiZSB1cGRhdGVkCisgKi8KK3ZvaWQgbWVzaF9hY2NlcHRfcGxpbmtzX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlib29sIGZyZWVfcGxpbmtzOworCisJLyogSW4gY2FzZSBtZXNoX3BsaW5rX2ZyZWVfY291bnQgPiAwIGFuZCBtZXNoX3BsaW5rdGJsX2NhcGFjaXR5ID09IDAsCisJICogdGhlIG1lc2ggaW50ZXJmYWNlIG1pZ2h0IGJlIGFibGUgdG8gZXN0YWJsaXNoIHBsaW5rcyB3aXRoIHBlZXJzIHRoYXQKKwkgKiBhcmUgYWxyZWFkeSBvbiB0aGUgdGFibGUgYnV0IGFyZSBub3Qgb24gUExJTktfRVNUQUIgc3RhdGUuIEhvd2V2ZXIsCisJICogaW4gZ2VuZXJhbCB0aGUgbWVzaCBpbnRlcmZhY2UgaXMgbm90IGFjY2VwdGluZyBwZWVyIGxpbmsgcmVxdWVzdHMKKwkgKiBmcm9tIG5ldyBwZWVycywgYW5kIHRoYXQgbXVzdCBiZSByZWZsZWN0ZWQgaW4gdGhlIGJlYWNvbgorCSAqLworCWZyZWVfcGxpbmtzID0gbWVzaF9wbGlua19hdmFpbGFibGVzKHNkYXRhKTsKKworCWlmIChmcmVlX3BsaW5rcyAhPSBzZGF0YS0+dS5zdGEuYWNjZXB0aW5nX3BsaW5rcykKKwkJaWVlZTgwMjExX3N0YV90aW1lcigodW5zaWduZWQgbG9uZykgc2RhdGEpOworfQorCit2b2lkIG1lc2hfaWRzX3NldF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICpzdGEpCit7CisJdTggZGVmX2lkWzRdID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4ZmZ9OworCisJbWVtY3B5KHN0YS0+bWVzaF9wcF9pZCwgZGVmX2lkLCA0KTsKKwltZW1jcHkoc3RhLT5tZXNoX3BtX2lkLCBkZWZfaWQsIDQpOworCW1lbWNweShzdGEtPm1lc2hfY2NfaWQsIGRlZl9pZCwgNCk7Cit9CisKK2ludCBtZXNoX3JtY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWludCBpOworCisJc2RhdGEtPnUuc3RhLnJtYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXNoX3JtYyksIEdGUF9LRVJORUwpOworCWlmICghc2RhdGEtPnUuc3RhLnJtYykKKwkJcmV0dXJuIC1FTk9NRU07CisJc2RhdGEtPnUuc3RhLnJtYy0+aWR4X21hc2sgPSBSTUNfQlVDS0VUUyAtIDE7CisJZm9yIChpID0gMDsgaSA8IFJNQ19CVUNLRVRTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZzZGF0YS0+dS5zdGEucm1jLT5idWNrZXRbaV0ubGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWVzaF9ybWNfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgbWVzaF9ybWMgKnJtYyA9IHNkYXRhLT51LnN0YS5ybWM7CisJc3RydWN0IHJtY19lbnRyeSAqcCwgKm47CisJaW50IGk7CisKKwlpZiAoIXNkYXRhLT51LnN0YS5ybWMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBSTUNfQlVDS0VUUzsgaSsrKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnJtYy0+YnVja2V0W2ldLmxpc3QsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJCWttZW1fY2FjaGVfZnJlZShybV9jYWNoZSwgcCk7CisJCX0KKworCWtmcmVlKHJtYyk7CisJc2RhdGEtPnUuc3RhLnJtYyA9IE5VTEw7Cit9CisKKy8qKgorICogbWVzaF9ybWNfY2hlY2sgLSBDaGVjayBmcmFtZSBpbiByZWNlbnQgbXVsdGljYXN0IGNhY2hlIGFuZCBhZGQgaWYgYWJzZW50LgorICoKKyAqIEBzYToJCXNvdXJjZSBhZGRyZXNzCisgKiBAbWVzaF9oZHI6CW1lc2hfaGVhZGVyCisgKgorICogUmV0dXJuczogMCBpZiB0aGUgZnJhbWUgaXMgbm90IGluIHRoZSBjYWNoZSwgbm9uemVybyBvdGhlcndpc2UuCisgKgorICogQ2hlY2tzIHVzaW5nIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgdGhlIG1lc2ggc2VxdWVuY2UgbnVtYmVyIGlmIHdlIGhhdmUKKyAqIHJlY2VpdmVkIHRoaXMgZnJhbWUgbGF0ZWx5LiBJZiB0aGUgZnJhbWUgaXMgbm90IGluIHRoZSBjYWNoZSwgaXQgaXMgYWRkZWQgdG8KKyAqIGl0LgorICovCitpbnQgbWVzaF9ybWNfY2hlY2sodTggKnNhLCBzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hfaGRyLAorCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgbWVzaF9ybWMgKnJtYyA9IHNkYXRhLT51LnN0YS5ybWM7CisJdTMyIHNlcW51bSA9IDA7CisJaW50IGVudHJpZXMgPSAwOworCXU4IGlkeDsKKwlzdHJ1Y3Qgcm1jX2VudHJ5ICpwLCAqbjsKKworCS8qIERvbid0IGNhcmUgYWJvdXQgZW5kaWFubmVzcyBzaW5jZSBvbmx5IG1hdGNoIG1hdHRlcnMgKi8KKwltZW1jcHkoJnNlcW51bSwgbWVzaF9oZHItPnNlcW51bSwgc2l6ZW9mKG1lc2hfaGRyLT5zZXFudW0pKTsKKwlpZHggPSBtZXNoX2hkci0+c2VxbnVtWzBdICYgcm1jLT5pZHhfbWFzazsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnJtYy0+YnVja2V0W2lkeF0ubGlzdCwgbGlzdCkgeworCQkrK2VudHJpZXM7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHAtPmV4cF90aW1lKSB8fAorCQkJCShlbnRyaWVzID09IFJNQ19RVUVVRV9NQVhfTEVOKSkgeworCQkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQkJa21lbV9jYWNoZV9mcmVlKHJtX2NhY2hlLCBwKTsKKwkJCS0tZW50cmllczsKKwkJfSBlbHNlIGlmICgoc2VxbnVtID09IHAtPnNlcW51bSkKKwkJCQkmJiAobWVtY21wKHNhLCBwLT5zYSwgRVRIX0FMRU4pID09IDApKQorCQkJcmV0dXJuIC0xOworCX0KKworCXAgPSBrbWVtX2NhY2hlX2FsbG9jKHJtX2NhY2hlLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm8xMXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBSTUMgZW50cnlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcC0+c2VxbnVtID0gc2VxbnVtOworCXAtPmV4cF90aW1lID0gamlmZmllcyArIFJNQ19USU1FT1VUOworCW1lbWNweShwLT5zYSwgc2EsIEVUSF9BTEVOKTsKKwlsaXN0X2FkZCgmcC0+bGlzdCwgJnJtYy0+YnVja2V0W2lkeF0ubGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWVzaF9tZ210X2llc19hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1OCAqcG9zOworCWludCBsZW4sIGksIHJhdGU7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisJbGVuID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJaWYgKGxlbiA+IDgpCisJCWxlbiA9IDg7CisJcG9zID0gc2tiX3B1dChza2IsIGxlbiArIDIpOworCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJKnBvcysrID0gbGVuOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwl9CisKKwlpZiAoc2JhbmQtPm5fYml0cmF0ZXMgPiBsZW4pIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIHNiYW5kLT5uX2JpdHJhdGVzIC0gbGVuICsgMik7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSBzYmFuZC0+bl9iaXRyYXRlcyAtIGxlbjsKKwkJZm9yIChpID0gbGVuOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQkJcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCQl9CisJfQorCisJcG9zID0gc2tiX3B1dChza2IsIDIgKyBzZGF0YS0+dS5zdGEubWVzaF9pZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX01FU0hfSUQ7CisJKnBvcysrID0gc2RhdGEtPnUuc3RhLm1lc2hfaWRfbGVuOworCWlmIChzZGF0YS0+dS5zdGEubWVzaF9pZF9sZW4pCisJCW1lbWNweShwb3MsIHNkYXRhLT51LnN0YS5tZXNoX2lkLCBzZGF0YS0+dS5zdGEubWVzaF9pZF9sZW4pOworCisJcG9zID0gc2tiX3B1dChza2IsIDIxKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9NRVNIX0NPTkZJRzsKKwkqcG9zKysgPSBNRVNIX0NGR19MRU47CisJLyogVmVyc2lvbiAqLworCSpwb3MrKyA9IDE7CisKKwkvKiBBY3RpdmUgcGF0aCBzZWxlY3Rpb24gcHJvdG9jb2wgSUQgKi8KKwltZW1jcHkocG9zLCBzZGF0YS0+dS5zdGEubWVzaF9wcF9pZCwgNCk7CisJcG9zICs9IDQ7CisKKwkvKiBBY3RpdmUgcGF0aCBzZWxlY3Rpb24gbWV0cmljIElEICAgKi8KKwltZW1jcHkocG9zLCBzZGF0YS0+dS5zdGEubWVzaF9wbV9pZCwgNCk7CisJcG9zICs9IDQ7CisKKwkvKiBDb25nZXN0aW9uIGNvbnRyb2wgbW9kZSBpZGVudGlmaWVyICovCisJbWVtY3B5KHBvcywgc2RhdGEtPnUuc3RhLm1lc2hfY2NfaWQsIDQpOworCXBvcyArPSA0OworCisJLyogQ2hhbm5lbCBwcmVjZWRlbmNlOgorCSAqIE5vdCBydW5uaW5nIHNpbXBsZSBjaGFubmVsIHVuaWZpY2F0aW9uIHByb3RvY29sCisJICovCisJbWVtc2V0KHBvcywgMHgwMCwgNCk7CisJcG9zICs9IDQ7CisKKwkvKiBNZXNoIGNhcGFiaWxpdHkgKi8KKwlzZGF0YS0+dS5zdGEuYWNjZXB0aW5nX3BsaW5rcyA9IG1lc2hfcGxpbmtfYXZhaWxhYmxlcyhzZGF0YSk7CisJKnBvcysrID0gc2RhdGEtPnUuc3RhLmFjY2VwdGluZ19wbGlua3MgPyBBQ0NFUFRfUExJTktTIDogMHgwMDsKKwkqcG9zKysgPSAweDAwOworCisJcmV0dXJuOworfQorCit1MzIgbWVzaF90YWJsZV9oYXNoKHU4ICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKQoreworCS8qIFVzZSBsYXN0IGZvdXIgYnl0ZXMgb2YgaHcgYWRkciBhbmQgaW50ZXJmYWNlIGluZGV4IGFzIGhhc2ggaW5kZXggKi8KKwlyZXR1cm4gamhhc2hfMndvcmRzKCoodTMyICopKGFkZHIrMiksIGRldi0+aWZpbmRleCwgdGJsLT5oYXNoX3JuZCkKKwkJJiB0YmwtPmhhc2hfbWFzazsKK30KKwordTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pCit7CisJaWYgKCFtZXNoX2lkX2xlbikKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAobWVzaF9pZF9sZW4gPT0gMSkKKwkJcmV0dXJuICh1OCkgbWVzaF9pZFswXTsKKwllbHNlCisJCXJldHVybiAodTgpIChtZXNoX2lkWzBdICsgMiAqIG1lc2hfaWRbMV0pOworfQorCitzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9hbGxvYyhpbnQgc2l6ZV9vcmRlcikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbWVzaF90YWJsZSAqbmV3dGJsOworCisJbmV3dGJsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lc2hfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld3RibCkKKwkJcmV0dXJuIE5VTEw7CisKKwluZXd0YmwtPmhhc2hfYnVja2V0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSAqCisJCQkoMSA8PCBzaXplX29yZGVyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW5ld3RibC0+aGFzaF9idWNrZXRzKSB7CisJCWtmcmVlKG5ld3RibCk7CisJCXJldHVybiBOVUxMOworCX0KKworCW5ld3RibC0+aGFzaHdsb2NrID0ga21hbGxvYyhzaXplb2Yoc3BpbmxvY2tfdCkgKgorCQkJKDEgPDwgc2l6ZV9vcmRlciksIEdGUF9LRVJORUwpOworCWlmICghbmV3dGJsLT5oYXNod2xvY2spIHsKKwkJa2ZyZWUobmV3dGJsLT5oYXNoX2J1Y2tldHMpOworCQlrZnJlZShuZXd0YmwpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwluZXd0YmwtPnNpemVfb3JkZXIgPSBzaXplX29yZGVyOworCW5ld3RibC0+aGFzaF9tYXNrID0gKDEgPDwgc2l6ZV9vcmRlcikgLSAxOworCWF0b21pY19zZXQoJm5ld3RibC0+ZW50cmllcywgIDApOworCWdldF9yYW5kb21fYnl0ZXMoJm5ld3RibC0+aGFzaF9ybmQsCisJCQlzaXplb2YobmV3dGJsLT5oYXNoX3JuZCkpOworCWZvciAoaSA9IDA7IGkgPD0gbmV3dGJsLT5oYXNoX21hc2s7IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJm5ld3RibC0+aGFzaHdsb2NrW2ldKTsKKworCXJldHVybiBuZXd0Ymw7Cit9CisKK3ZvaWQgbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIGJvb2wgZnJlZV9sZWFmcykKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqbWVzaF9oYXNoOworCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqcTsKKwlpbnQgaTsKKworCW1lc2hfaGFzaCA9IHRibC0+aGFzaF9idWNrZXRzOworCWZvciAoaSA9IDA7IGkgPD0gdGJsLT5oYXNoX21hc2s7IGkrKykgeworCQlzcGluX2xvY2soJnRibC0+aGFzaHdsb2NrW2ldKTsKKwkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbWVzaF9oYXNoW2ldKSB7CisJCQl0YmwtPmZyZWVfbm9kZShwLCBmcmVlX2xlYWZzKTsKKwkJCWF0b21pY19kZWMoJnRibC0+ZW50cmllcyk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnRibC0+aGFzaHdsb2NrW2ldKTsKKwl9CisJa2ZyZWUodGJsLT5oYXNoX2J1Y2tldHMpOworCWtmcmVlKHRibC0+aGFzaHdsb2NrKTsKKwlrZnJlZSh0YmwpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdigmc2RhdGEtPndkZXYpOworCisJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworfQorCitzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9ncm93KHN0cnVjdCBtZXNoX3RhYmxlICp0YmwpCit7CisJc3RydWN0IG1lc2hfdGFibGUgKm5ld3RibDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqb2xkaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKworCWlmIChhdG9taWNfcmVhZCgmdGJsLT5lbnRyaWVzKQorCQkJPCB0YmwtPm1lYW5fY2hhaW5fbGVuICogKHRibC0+aGFzaF9tYXNrICsgMSkpIHsKKwkJZXJyID0gLUVQRVJNOworCQlnb3RvIGVuZGdyb3c7CisJfQorCisJbmV3dGJsID0gbWVzaF90YWJsZV9hbGxvYyh0YmwtPnNpemVfb3JkZXIgKyAxKTsKKwlpZiAoIW5ld3RibCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVuZGdyb3c7CisJfQorCisJbmV3dGJsLT5mcmVlX25vZGUgPSB0YmwtPmZyZWVfbm9kZTsKKwluZXd0YmwtPm1lYW5fY2hhaW5fbGVuID0gdGJsLT5tZWFuX2NoYWluX2xlbjsKKwluZXd0YmwtPmNvcHlfbm9kZSA9IHRibC0+Y29weV9ub2RlOworCWF0b21pY19zZXQoJm5ld3RibC0+ZW50cmllcywgYXRvbWljX3JlYWQoJnRibC0+ZW50cmllcykpOworCisJb2xkaGFzaCA9IHRibC0+aGFzaF9idWNrZXRzOworCWZvciAoaSA9IDA7IGkgPD0gdGJsLT5oYXNoX21hc2s7IGkrKykKKwkJaGxpc3RfZm9yX2VhY2gocCwgJm9sZGhhc2hbaV0pCisJCQl0YmwtPmNvcHlfbm9kZShwLCBuZXd0YmwpOworCitlbmRncm93OgorCWlmIChlcnIpCisJCXJldHVybiBOVUxMOworCWVsc2UKKwkJcmV0dXJuIG5ld3RibDsKK30KKworLyoqCisgKiBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyIC0gY3JlYXRlIGEgbmV3IG1lc2ggaGVhZGVyCisgKiBAbWVzaGhkcjogICAgdW5pbml0aWFsaXplZCBtZXNoIGhlYWRlcgorICogQHNkYXRhOgltZXNoIGludGVyZmFjZSB0byBiZSB1c2VkCisgKgorICogUmV0dXJuIHRoZSBoZWFkZXIgbGVuZ3RoLgorICovCitpbnQgaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcihzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hoZHIsCisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCW1lc2hoZHItPmZsYWdzID0gMDsKKwltZXNoaGRyLT50dGwgPSBzZGF0YS0+dS5zdGEubXNoY2ZnLmRvdDExTWVzaFRUTDsKKworCW1lc2hoZHItPnNlcW51bVswXSA9IHNkYXRhLT51LnN0YS5tZXNoX3NlcW51bVswXSsrOworCW1lc2hoZHItPnNlcW51bVsxXSA9IHNkYXRhLT51LnN0YS5tZXNoX3NlcW51bVsxXTsKKwltZXNoaGRyLT5zZXFudW1bMl0gPSBzZGF0YS0+dS5zdGEubWVzaF9zZXFudW1bMl07CisKKwlpZiAoc2RhdGEtPnUuc3RhLm1lc2hfc2VxbnVtWzBdID09IDApIHsKKwkJc2RhdGEtPnUuc3RhLm1lc2hfc2VxbnVtWzFdKys7CisJCWlmIChzZGF0YS0+dS5zdGEubWVzaF9zZXFudW1bMV0gPT0gMCkKKwkJCXNkYXRhLT51LnN0YS5tZXNoX3NlcW51bVsyXSsrOworCX0KKworCXJldHVybiA1OworfQorCit2b2lkIGllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKworCWlmc3RhLT5tc2hjZmcuZG90MTFNZXNoUmV0cnlUaW1lb3V0ID0gTUVTSF9SRVRfVDsKKwlpZnN0YS0+bXNoY2ZnLmRvdDExTWVzaENvbmZpcm1UaW1lb3V0ID0gTUVTSF9DT05GX1Q7CisJaWZzdGEtPm1zaGNmZy5kb3QxMU1lc2hIb2xkaW5nVGltZW91dCA9IE1FU0hfSE9MRF9UOworCWlmc3RhLT5tc2hjZmcuZG90MTFNZXNoTWF4UmV0cmllcyA9IE1FU0hfTUFYX1JFVFI7CisJaWZzdGEtPm1zaGNmZy5kb3QxMU1lc2hUVEwgPSBNRVNIX1RUTDsKKwlpZnN0YS0+bXNoY2ZnLmF1dG9fb3Blbl9wbGlua3MgPSB0cnVlOworCWlmc3RhLT5tc2hjZmcuZG90MTFNZXNoTWF4UGVlckxpbmtzID0KKwkJTUVTSF9NQVhfRVNUQUJfUExJTktTOworCWlmc3RhLT5tc2hjZmcuZG90MTFNZXNoSFdNUGFjdGl2ZVBhdGhUaW1lb3V0ID0KKwkJTUVTSF9QQVRIX1RJTUVPVVQ7CisJaWZzdGEtPm1zaGNmZy5kb3QxMU1lc2hIV01QcHJlcU1pbkludGVydmFsID0KKwkJTUVTSF9QUkVRX01JTl9JTlQ7CisJaWZzdGEtPm1zaGNmZy5kb3QxMU1lc2hIV01QbmV0RGlhbWV0ZXJUcmF2ZXJzYWxUaW1lID0KKwkJTUVTSF9ESUFNX1RSQVZFUlNBTF9USU1FOworCWlmc3RhLT5tc2hjZmcuZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzID0KKwkJTUVTSF9NQVhfUFJFUV9SRVRSSUVTOworCWlmc3RhLT5tc2hjZmcucGF0aF9yZWZyZXNoX3RpbWUgPQorCQlNRVNIX1BBVEhfUkVGUkVTSF9USU1FOworCWlmc3RhLT5tc2hjZmcubWluX2Rpc2NvdmVyeV90aW1lb3V0ID0KKwkJTUVTSF9NSU5fRElTQ09WRVJZX1RJTUVPVVQ7CisJaWZzdGEtPmFjY2VwdGluZ19wbGlua3MgPSB0cnVlOworCWlmc3RhLT5wcmVxX2lkID0gMDsKKwlpZnN0YS0+ZHNuID0gMDsKKwlhdG9taWNfc2V0KCZpZnN0YS0+bXBhdGhzLCAwKTsKKwltZXNoX3JtY19pbml0KHNkYXRhLT5kZXYpOworCWlmc3RhLT5sYXN0X3ByZXEgPSBqaWZmaWVzOworCS8qIEFsbG9jYXRlIGFsbCBtZXNoIHN0cnVjdHVyZXMgd2hlbiBjcmVhdGluZyB0aGUgZmlyc3QgbWVzaCBpbnRlcmZhY2UuICovCisJaWYgKCFtZXNoX2FsbG9jYXRlZCkKKwkJaWVlZTgwMjExc19pbml0KCk7CisJbWVzaF9pZHNfc2V0X2RlZmF1bHQoaWZzdGEpOworCXNldHVwX3RpbWVyKCZpZnN0YS0+bWVzaF9wYXRoX3RpbWVyLAorCQkgICAgaWVlZTgwMjExX21lc2hfcGF0aF90aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJSU5JVF9MSVNUX0hFQUQoJmlmc3RhLT5wcmVxX3F1ZXVlLmxpc3QpOworCXNwaW5fbG9ja19pbml0KCZpZnN0YS0+bWVzaF9wcmVxX3F1ZXVlX2xvY2spOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2guaCBiL25ldC9tYWM4MDIxMS9tZXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyMDAzZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmgKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggb3BlbjgwMjExcyBMdGQuCisgKiBBdXRob3JzOiAgICBMdWlzIENhcmxvcyBDb2JvIDxsdWlzY2FAY296eWJpdC5jb20+CisgKiAgICAgICAgICAgICBKYXZpZXIgQ2FyZG9uYSA8amF2aWVyQGNvenliaXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBJRUVFODAyMTFTX0gKKyNkZWZpbmUgSUVFRTgwMjExU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKworCisvKiBEYXRhIHN0cnVjdHVyZXMgKi8KKworLyoqCisgKiBlbnVtIG1lc2hfcGF0aF9mbGFncyAtIG1hYzgwMjExIG1lc2ggcGF0aCBmbGFncworICoKKyAqCisgKgorICogQE1FU0hfUEFUSF9BQ1RJVkU6IHRoZSBtZXNoIHBhdGggaXMgY2FuIGJlIHVzZWQgZm9yIGZvcndhcmRpbmcKKyAqIEBNRVNIX1BBVEhfUkVTT0xWRUQ6IHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBpcyBydW5uaW5nIGZvciB0aGlzIG1lc2ggcGF0aAorICogQE1FU0hfUEFUSF9EU05fVkFMSUQ6IHRoZSBtZXNoIHBhdGggY29udGFpbnMgYSB2YWxpZCBkZXN0aW5hdGlvbiBzZXF1ZW5jZQorICogCW51bWJlcgorICogQE1FU0hfUEFUSF9GSVhFRDogdGhlIG1lc2ggcGF0aCBoYXMgYmVlbiBtYW51YWxseSBzZXQgYW5kIHNob3VsZCBub3QgYmUKKyAqIAltb2RpZmllZAorICogQE1FU0hfUEFUSF9SRVNPTFZFRDogdGhlIG1lc2ggcGF0aCBjYW4gaGFzIGJlZW4gcmVzb2x2ZWQKKyAqCisgKiBNRVNIX1BBVEhfUkVTT0xWRUQgYW5kIE1FU0hfUEFUSF9ERUxFVEUgYXJlIHVzZWQgYnkgdGhlIG1lc2ggcGF0aCB0aW1lciB0bworICogZGVjaWRlIHdoZW4gdG8gc3RvcCBvciBjYW5jZWwgdGhlIG1lc2ggcGF0aCBkaXNjb3ZlcnkuCisgKi8KK2VudW0gbWVzaF9wYXRoX2ZsYWdzIHsKKwlNRVNIX1BBVEhfQUNUSVZFID0JQklUKDApLAorCU1FU0hfUEFUSF9SRVNPTFZJTkcgPQlCSVQoMSksCisJTUVTSF9QQVRIX0RTTl9WQUxJRCA9CUJJVCgyKSwKKwlNRVNIX1BBVEhfRklYRUQJPQlCSVQoMyksCisJTUVTSF9QQVRIX1JFU09MVkVEID0JQklUKDQpLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbWVzaF9wYXRoIC0gbWFjODAyMTEgbWVzaCBwYXRoIHN0cnVjdHVyZQorICoKKyAqIEBkc3Q6IG1lc2ggcGF0aCBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcworICogQGRldjogbWVzaCBwYXRoIGRldmljZQorICogQG5leHRfaG9wOiBtZXNoIG5laWdoYm9yIHRvIHdoaWNoIGZyYW1lcyBmb3IgdGhpcyBkZXN0aW5hdGlvbiB3aWxsIGJlCisgKiAJZm9yd2FyZGVkCisgKiBAdGltZXI6IG1lc2ggcGF0aCBkaXNjb3ZlcnkgdGltZXIKKyAqIEBmcmFtZV9xdWV1ZTogcGVuZGluZyBxdWV1ZSBmb3IgZnJhbWVzIHNlbnQgdG8gdGhpcyBkZXN0aW5hdGlvbiB3aGlsZSB0aGUKKyAqIAlwYXRoIGlzIHVucmVzb2x2ZWQKKyAqIEBkc246IGRlc3RpbmF0aW9uIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgZGVzdGluYXRpb24KKyAqIEBtZXRyaWM6IGN1cnJlbnQgbWV0cmljIHRvIHRoaXMgZGVzdGluYXRpb24KKyAqIEBob3BfY291bnQ6IGhvcHMgdG8gZGVzdGluYXRpb24KKyAqIEBleHBfdGltZTogaW4gamlmZmllcywgd2hlbiB0aGUgcGF0aCB3aWxsIGV4cGlyZSBvciB3aGVuIGl0IGV4cGlyZWQKKyAqIEBkaXNjb3ZlcnlfdGltZW91dDogdGltZW91dCAobGFwc2UgaW4gamlmZmllcykgdXNlZCBmb3IgdGhlIGxhc3QgZGlzY292ZXJ5CisgKiAJcmV0cnkKKyAqIEBkaXNjb3ZlcnlfcmV0cmllczogbnVtYmVyIG9mIGRpc2NvdmVyeSByZXRyaWVzCisgKiBAZmxhZ3M6IG1lc2ggcGF0aCBmbGFncywgYXMgc3BlY2lmaWVkIG9uICZlbnVtIG1lc2hfcGF0aF9mbGFncworICogQHN0YXRlX2xvY2s6IG1lc2ggcGF0IHN0YXRlIGxvY2sKKyAqCisgKgorICogVGhlIGNvbWJpbmF0aW9uIG9mIGRzdCBhbmQgZGV2IGlzIHVuaXF1ZSBpbiB0aGUgbWVzaCBwYXRoIHRhYmxlLiBTaW5jZSB0aGUKKyAqIG5leHRfaG9wIFNUQSBpcyBvbmx5IHByb3RlY3RlZCBieSBSQ1UgYXMgd2VsbCwgZGVsZXRpbmcgdGhlIFNUQSBtdXN0IGFsc28KKyAqIHJlbW92ZS9zdWJzdGl0dXRlIHRoZSBtZXNoX3BhdGggc3RydWN0dXJlIGFuZCB3YWl0IHVudGlsIHRoYXQgaXMgbm8gbG9uZ2VyCisgKiByZWFjaGFibGUgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIFNUQSBjb21wbGV0ZWx5LgorICovCitzdHJ1Y3QgbWVzaF9wYXRoIHsKKwl1OCBkc3RbRVRIX0FMRU5dOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYW1lX3F1ZXVlOworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJdTMyIGRzbjsKKwl1MzIgbWV0cmljOworCXU4IGhvcF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGV4cF90aW1lOworCXUzMiBkaXNjb3ZlcnlfdGltZW91dDsKKwl1OCBkaXNjb3ZlcnlfcmV0cmllczsKKwllbnVtIG1lc2hfcGF0aF9mbGFncyBmbGFnczsKKwlzcGlubG9ja190IHN0YXRlX2xvY2s7Cit9OworCisvKioKKyAqIHN0cnVjdCBtZXNoX3RhYmxlCisgKgorICogQGhhc2hfYnVja2V0czogYXJyYXkgb2YgaGFzaCBidWNrZXRzIG9mIHRoZSB0YWJsZQorICogQGhhc2h3bG9jazogYXJyYXkgb2YgbG9ja3MgdG8gcHJvdGVjdCB3cml0ZSBvcGVyYXRpb25zLCBvbmUgcGVyIGJ1Y2tldAorICogQGhhc2hfbWFzazogMl5zaXplX29yZGVyIC0gMSwgdXNlZCB0byBjb21wdXRlIGhhc2ggaWR4CisgKiBAaGFzaF9ybmQ6IHJhbmRvbSB2YWx1ZSB1c2VkIGZvciBoYXNoIGNvbXB1dGF0aW9ucworICogQGVudHJpZXM6IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZQorICogQGZyZWVfbm9kZTogZnVuY3Rpb24gdG8gZnJlZSBub2RlcyBvZiB0aGUgdGFibGUKKyAqIEBjb3B5X25vZGU6IGZ1Y3Rpb24gdG8gY29weSBub2RlcyBvZiB0aGUgdGFibGUKKyAqIEBzaXplX29yZGVyOiBkZXRlcm1pbmVzIHNpemUgb2YgdGhlIHRhYmxlLCB0aGVyZSB3aWxsIGJlIDJec2l6ZV9vcmRlciBoYXNoCisgKglidWNrZXRzCisgKiBAbWVhbl9jaGFpbl9sZW46IG1heGltdW0gYXZlcmFnZSBsZW5ndGggZm9yIHRoZSBoYXNoIGJ1Y2tldHMnIGxpc3QsIGlmIGl0IGlzCisgKglyZWFjaGVkLCB0aGUgdGFibGUgd2lsbCBncm93CisgKi8KK3N0cnVjdCBtZXNoX3RhYmxlIHsKKwkvKiBOdW1iZXIgb2YgYnVja2V0cyB3aWxsIGJlIDJeTiAqLworCXN0cnVjdCBobGlzdF9oZWFkICpoYXNoX2J1Y2tldHM7CisJc3BpbmxvY2tfdCAqaGFzaHdsb2NrOwkJLyogT25lIHBlciBidWNrZXQsIGZvciBhZGQvZGVsICovCisJdW5zaWduZWQgaW50IGhhc2hfbWFzazsJCS8qICgyXnNpemVfb3JkZXIpIC0gMSAqLworCV9fdTMyIGhhc2hfcm5kOwkJCS8qIFVzZWQgZm9yIGhhc2ggZ2VuZXJhdGlvbiAqLworCWF0b21pY190IGVudHJpZXM7CQkvKiBVcCB0byBNQVhfTUVTSF9ORUlHSEJPVVJTICovCisJdm9pZCAoKmZyZWVfbm9kZSkgKHN0cnVjdCBobGlzdF9ub2RlICpwLCBib29sIGZyZWVfbGVhZnMpOworCXZvaWQgKCpjb3B5X25vZGUpIChzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgc3RydWN0IG1lc2hfdGFibGUgKm5ld3RibCk7CisJaW50IHNpemVfb3JkZXI7CisJaW50IG1lYW5fY2hhaW5fbGVuOworfTsKKworLyogUmVjZW50IG11bHRpY2FzdCBjYWNoZSAqLworLyogUk1DX0JVQ0tFVFMgbXVzdCBiZSBhIHBvd2VyIG9mIDIsIG1heGltdW0gMjU2ICovCisjZGVmaW5lIFJNQ19CVUNLRVRTCQkyNTYKKyNkZWZpbmUgUk1DX1FVRVVFX01BWF9MRU4JNAorI2RlZmluZSBSTUNfVElNRU9VVAkJKDMgKiBIWikKKworLyoqCisgKiBzdHJ1Y3Qgcm1jX2VudHJ5IC0gZW50cnkgaW4gdGhlIFJlY2VudCBNdWx0aWNhc3QgQ2FjaGUKKyAqCisgKiBAc2VxbnVtOiBtZXNoIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgZnJhbWUKKyAqIEBleHBfdGltZTogZXhwaXJhdGlvbiB0aW1lIG9mIHRoZSBlbnRyeSwgaW4gamlmZmllcworICogQHNhOiBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZnJhbWUKKyAqCisgKiBUaGUgUmVjZW50IE11bHRpY2FzdCBDYWNoZSBrZWVwcyB0cmFjayBvZiB0aGUgbGF0ZXN0IG11bHRpY2FzdCBmcmFtZXMgdGhhdAorICogaGF2ZSBiZWVuIHJlY2VpdmVkIGJ5IGEgbWVzaCBpbnRlcmZhY2UgYW5kIGRpc2NhcmRzIHJlY2VpdmVkIG11bHRpY2FzdCBmcmFtZXMKKyAqIHRoYXQgYXJlIGZvdW5kIGluIHRoZSBjYWNoZS4KKyAqLworc3RydWN0IHJtY19lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXUzMiBzZXFudW07CisJdW5zaWduZWQgbG9uZyBleHBfdGltZTsKKwl1OCBzYVtFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgbWVzaF9ybWMgeworCXN0cnVjdCBybWNfZW50cnkgYnVja2V0W1JNQ19CVUNLRVRTXTsKKwl1OCBpZHhfbWFzazsKK307CisKKworLyogTWVzaCBJRXMgY29uc3RhbnRzICovCisjZGVmaW5lIE1FU0hfQ0ZHX0xFTgkJMTkKKworLyoKKyAqIE1FU0hfQ0ZHX0NPTVBfTEVOIEluY2x1ZGVzOgorICogCS0gQWN0aXZlIHBhdGggc2VsZWN0aW9uIHByb3RvY29sIElELgorICogCS0gQWN0aXZlIHBhdGggc2VsZWN0aW9uIG1ldHJpYyBJRC4KKyAqIAktIENvbmdlc3Rpb24gY29udHJvbCBtb2RlIGlkZW50aWZpZXIuCisgKiAJLSBDaGFubmVsIHByZWNlZGVuY2UuCisgKiBEb2VzIG5vdCBpbmNsdWRlIG1lc2ggY2FwYWJpbGl0aWVzLCB3aGljaCBtYXkgdmFyeSBhY3Jvc3Mgbm9kZXMgaW4gdGhlIHNhbWUKKyAqIG1lc2gKKyAqLworI2RlZmluZSBNRVNIX0NGR19DTVBfTEVOIAkxNworCisvKiBEZWZhdWx0IHZhbHVlcywgdGltZW91dHMgaW4gbXMgKi8KKyNkZWZpbmUgTUVTSF9UVEwgCQk1CisjZGVmaW5lIE1FU0hfTUFYX1JFVFIJIAkzCisjZGVmaW5lIE1FU0hfUkVUX1QgCQkxMDAKKyNkZWZpbmUgTUVTSF9DT05GX1QgCQkxMDAKKyNkZWZpbmUgTUVTSF9IT0xEX1QgCQkxMDAKKworI2RlZmluZSBNRVNIX1BBVEhfVElNRU9VVAk1MDAwCisvKiBNaW5pbXVtIGludGVydmFsIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIFBSRVFzIG9yaWdpbmF0ZWQgYnkgdGhlIHNhbWUKKyAqIGludGVyZmFjZQorICovCisjZGVmaW5lIE1FU0hfUFJFUV9NSU5fSU5UCTEwCisjZGVmaW5lIE1FU0hfRElBTV9UUkFWRVJTQUxfVElNRSA1MAorLyogUGF0aHMgd2lsbCBiZSByZWZyZXNoZWQgaWYgdGhleSBhcmUgY2xvc2VyIHRoYW4gUEFUSF9SRUZSRVNIX1RJTUUgdG8gdGhlaXIKKyAqIGV4cGlyYXRpb24KKyAqLworI2RlZmluZSBNRVNIX1BBVEhfUkVGUkVTSF9USU1FCQkJMTAwMAorI2RlZmluZSBNRVNIX01JTl9ESVNDT1ZFUllfVElNRU9VVCAoMiAqIE1FU0hfRElBTV9UUkFWRVJTQUxfVElNRSkKKworI2RlZmluZSBNRVNIX01BWF9QUkVRX1JFVFJJRVMgNAorI2RlZmluZSBNRVNIX1BBVEhfRVhQSVJFICg2MDAgKiBIWikKKworLyogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBlc3RhYmxpc2hlZCBwbGlua3MgcGVyIGludGVyZmFjZSAqLworI2RlZmluZSBNRVNIX01BWF9FU1RBQl9QTElOS1MJMzIKKworLyogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBwbGlua3MgcGVyIGludGVyZmFjZSAqLworI2RlZmluZSBNRVNIX01BWF9QTElOS1MJCTI1NgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBwYXRocyBwZXIgaW50ZXJmYWNlICovCisjZGVmaW5lIE1FU0hfTUFYX01QQVRIUwkJMTAyNAorCisvKiBQZW5kaW5nIEFOQSBhcHByb3ZhbCAqLworI2RlZmluZSBQTElOS19DQVRFR09SWQkJMzAKKyNkZWZpbmUgTUVTSF9QQVRIX1NFTF9DQVRFR09SWQkzMgorCisvKiBNZXNoIEhlYWRlciBGbGFncyAqLworI2RlZmluZSBJRUVFODAyMTFTX0ZMQUdTX0FFCTB4MworCisvKiBQdWJsaWMgaW50ZXJmYWNlcyAqLworLyogVmFyaW91cyAqLwordTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pOworaW50IGllZWU4MDIxMV9nZXRfbWVzaF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyKTsKK2ludCBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGhkciwKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaW50IG1lc2hfcm1jX2NoZWNrKHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hfaGRyLAorCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2Jvb2wgbWVzaF9tYXRjaGVzX2xvY2FsKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICppZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG1lc2hfaWRzX3NldF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICpzdGEpOwordm9pZCBtZXNoX21nbXRfaWVzX2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgbWVzaF9ybWNfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBtZXNoX3JtY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBpZWVlODAyMTFzX2luaXQodm9pZCk7Cit2b2lkIGllZWU4MDIxMXNfc3RvcCh2b2lkKTsKK3ZvaWQgaWVlZTgwMjExX21lc2hfaW5pdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CisKKy8qIE1lc2ggcGF0aHMgKi8KK2ludCBtZXNoX25leHRob3BfbG9va3VwKHU4ICpuZXh0X2hvcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG1lc2hfcGF0aF9zdGFydF9kaXNjb3Zlcnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdHJ1Y3QgbWVzaF9wYXRoICptZXNoX3BhdGhfbG9va3VwKHU4ICpkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RydWN0IG1lc2hfcGF0aCAqbWVzaF9wYXRoX2xvb2t1cF9ieV9pZHgoaW50IGlkeCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG1lc2hfcGF0aF9maXhfbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcCk7Cit2b2lkIG1lc2hfcGF0aF9leHBpcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG1lc2hfcGF0aF9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgbWVzaF9yeF9wYXRoX3NlbF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCXNpemVfdCBsZW4pOworaW50IG1lc2hfcGF0aF9hZGQodTggKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisvKiBNZXNoIHBsaW5rcyAqLwordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHU2NCByYXRlcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJYm9vbCBhZGQpOworYm9vbCBtZXNoX3BlZXJfYWNjZXB0c19wbGlua3Moc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmllLAorCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBtZXNoX3BsaW5rX2Jyb2tlbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Cit2b2lkIG1lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CitpbnQgbWVzaF9wbGlua19vcGVuKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKK2ludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKK3ZvaWQgbWVzaF9wbGlua19ibG9jayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Cit2b2lkIG1lc2hfcnhfcGxpbmtfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJIHNpemVfdCBsZW4sIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworCisvKiBQcml2YXRlIGludGVyZmFjZXMgKi8KKy8qIE1lc2ggdGFibGVzICovCitzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9hbGxvYyhpbnQgc2l6ZV9vcmRlcik7Cit2b2lkIG1lc2hfdGFibGVfZnJlZShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBib29sIGZyZWVfbGVhZnMpOworc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfdGFibGVfZ3JvdyhzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKTsKK3UzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtZXNoX3RhYmxlICp0YmwpOworLyogTWVzaCBwYXRocyAqLworaW50IG1lc2hfcGF0aF9lcnJvcl90eCh1OCAqZGVzdCwgX19sZTMyIGRlc3RfZHNuLCB1OCAqcmEsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKK3ZvaWQgbWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpOwordm9pZCBtZXNoX3BhdGhfdHhfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7CitpbnQgbWVzaF9wYXRodGJsX2luaXQodm9pZCk7Cit2b2lkIG1lc2hfcGF0aHRibF91bnJlZ2lzdGVyKHZvaWQpOworaW50IG1lc2hfcGF0aF9kZWwodTggKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBtZXNoX3BhdGhfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3Aoc3RydWN0IHN0YV9pbmZvICpzdGEpOwordm9pZCBtZXNoX3BhdGhfZGlzY2FyZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICitleHRlcm4gaW50IG1lc2hfYWxsb2NhdGVkOworCitzdGF0aWMgaW5saW5lIGludCBtZXNoX3BsaW5rX2ZyZWVfY291bnQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJcmV0dXJuIHNkYXRhLT51LnN0YS5tc2hjZmcuZG90MTFNZXNoTWF4UGVlckxpbmtzIC0KKwkgICAgICAgYXRvbWljX3JlYWQoJnNkYXRhLT51LnN0YS5tc2hzdGF0cy5lc3RhYl9wbGlua3MpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbWVzaF9wbGlua19hdmFpbGFibGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXJldHVybiAobWluX3QobG9uZywgbWVzaF9wbGlua19mcmVlX2NvdW50KHNkYXRhKSwKKwkJICAgTUVTSF9NQVhfUExJTktTIC0gc2RhdGEtPmxvY2FsLT5udW1fc3RhKSkgPiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWVzaF9wYXRoX2FjdGl2YXRlKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKQoreworCW1wYXRoLT5mbGFncyB8PSBNRVNIX1BBVEhfQUNUSVZFIHwgTUVTSF9QQVRIX1JFU09MVkVEOworfQorCisjZGVmaW5lIGZvcl9lYWNoX21lc2hfZW50cnkoeCwgcCwgbm9kZSwgaSkgXAorCWZvciAoaSA9IDA7IGkgPD0geC0+aGFzaF9tYXNrOyBpKyspIFwKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsIHAsICZ4LT5oYXNoX2J1Y2tldHNbaV0sIGxpc3QpCisKKyNlbHNlCisjZGVmaW5lIG1lc2hfYWxsb2NhdGVkCTAKKyNlbmRpZgorCisjZGVmaW5lIE1FU0hfUFJFUShza2IpCShza2ItPmNiICsgMzApCisKKyNlbmRpZiAvKiBJRUVFODAyMTFTX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmRlOGYxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCkBAIC0wLDAgKzEsODU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IG9wZW44MDIxMXMgTHRkLgorICogQXV0aG9yOiAgICAgTHVpcyBDYXJsb3MgQ29ibyA8bHVpc2NhQGNvenliaXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlICJtZXNoLmgiCisKKyNkZWZpbmUgVEVTVF9GUkFNRV9MRU4JODE5MgorI2RlZmluZSBNQVhfTUVUUklDCTB4ZmZmZmZmZmYKKyNkZWZpbmUgQVJJVEhfU0hJRlQJOAorCisvKiBOdW1iZXIgb2YgZnJhbWVzIGJ1ZmZlcmVkIHBlciBkZXN0aW5hdGlvbiBmb3IgdW5yZXNvbHZlZCBkZXN0aW5hdGlvbnMgKi8KKyNkZWZpbmUgTUVTSF9GUkFNRV9RVUVVRV9MRU4JMTAKKyNkZWZpbmUgTUFYX1BSRVFfUVVFVUVfTEVOCTY0CisKKy8qIERlc3RpbmF0aW9uIG9ubHkgKi8KKyNkZWZpbmUgTVBfRl9ETwkweDEKKy8qIFJlcGx5IGFuZCBmb3J3YXJkICovCisjZGVmaW5lIE1QX0ZfUkYJMHgyCisKK3N0YXRpYyBpbmxpbmUgdTMyIHUzMl9maWVsZF9nZXQodTggKnByZXFfZWxlbSwgaW50IG9mZnNldCwgYm9vbCBhZSkKK3sKKwlpZiAoYWUpCisJCW9mZnNldCArPSA2OworCXJldHVybiBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIgKikgKHByZXFfZWxlbSArIG9mZnNldCkpKTsKK30KKworLyogSFdNUCBJRSBwcm9jZXNzaW5nIG1hY3JvcyAqLworI2RlZmluZSBBRV9GCQkJKDE8PDYpCisjZGVmaW5lIEFFX0ZfU0VUKHgpCQkoKnggJiBBRV9GKQorI2RlZmluZSBQUkVRX0lFX0ZMQUdTKHgpCSgqKHgpKQorI2RlZmluZSBQUkVRX0lFX0hPUENPVU5UKHgpCSgqKHggKyAxKSkKKyNkZWZpbmUgUFJFUV9JRV9UVEwoeCkJCSgqKHggKyAyKSkKKyNkZWZpbmUgUFJFUV9JRV9QUkVRX0lEKHgpCXUzMl9maWVsZF9nZXQoeCwgMywgMCkKKyNkZWZpbmUgUFJFUV9JRV9PUklHX0FERFIoeCkJKHggKyA3KQorI2RlZmluZSBQUkVRX0lFX09SSUdfRFNOKHgpCXUzMl9maWVsZF9nZXQoeCwgMTMsIDApOworI2RlZmluZSBQUkVRX0lFX0xJRkVUSU1FKHgpCXUzMl9maWVsZF9nZXQoeCwgMTcsIEFFX0ZfU0VUKHgpKTsKKyNkZWZpbmUgUFJFUV9JRV9NRVRSSUMoeCkgCXUzMl9maWVsZF9nZXQoeCwgMjEsIEFFX0ZfU0VUKHgpKTsKKyNkZWZpbmUgUFJFUV9JRV9EU1RfRih4KQkoKihBRV9GX1NFVCh4KSA/IHggKyAzMiA6IHggKyAyNikpCisjZGVmaW5lIFBSRVFfSUVfRFNUX0FERFIoeCkgCShBRV9GX1NFVCh4KSA/IHggKyAzMyA6IHggKyAyNykKKyNkZWZpbmUgUFJFUV9JRV9EU1RfRFNOKHgpIAl1MzJfZmllbGRfZ2V0KHgsIDMzLCBBRV9GX1NFVCh4KSk7CisKKworI2RlZmluZSBQUkVQX0lFX0ZMQUdTKHgpCVBSRVFfSUVfRkxBR1MoeCkKKyNkZWZpbmUgUFJFUF9JRV9IT1BDT1VOVCh4KQlQUkVRX0lFX0hPUENPVU5UKHgpCisjZGVmaW5lIFBSRVBfSUVfVFRMKHgpCQlQUkVRX0lFX1RUTCh4KQorI2RlZmluZSBQUkVQX0lFX09SSUdfQUREUih4KQkoeCArIDMpCisjZGVmaW5lIFBSRVBfSUVfT1JJR19EU04oeCkJdTMyX2ZpZWxkX2dldCh4LCA5LCAwKTsKKyNkZWZpbmUgUFJFUF9JRV9MSUZFVElNRSh4KQl1MzJfZmllbGRfZ2V0KHgsIDEzLCBBRV9GX1NFVCh4KSk7CisjZGVmaW5lIFBSRVBfSUVfTUVUUklDKHgpCXUzMl9maWVsZF9nZXQoeCwgMTcsIEFFX0ZfU0VUKHgpKTsKKyNkZWZpbmUgUFJFUF9JRV9EU1RfQUREUih4KQkoQUVfRl9TRVQoeCkgPyB4ICsgMjcgOiB4ICsgMjEpCisjZGVmaW5lIFBSRVBfSUVfRFNUX0RTTih4KQl1MzJfZmllbGRfZ2V0KHgsIDI3LCBBRV9GX1NFVCh4KSk7CisKKyNkZWZpbmUgUEVSUl9JRV9EU1RfQUREUih4KQkoeCArIDIpCisjZGVmaW5lIFBFUlJfSUVfRFNUX0RTTih4KQl1MzJfZmllbGRfZ2V0KHgsIDgsIDApOworCisjZGVmaW5lIFRVX1RPX0VYUF9USU1FKHgpIChqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh4ICogMTAyNCAvIDEwMDApKQorI2RlZmluZSBNU0VDX1RPX1RVKHgpICh4KjEwMDAvMTAyNCkKKyNkZWZpbmUgRFNOX0dUKHgsIHkpICgobG9uZykgKHkpIC0gKGxvbmcpICh4KSA8IDApCisjZGVmaW5lIERTTl9MVCh4LCB5KSAoKGxvbmcpICh4KSAtIChsb25nKSAoeSkgPCAwKQorCisjZGVmaW5lIG5ldF90cmF2ZXJzYWxfamlmZmllcyhzKSBcCisJbXNlY3NfdG9famlmZmllcyhzLT51LnN0YS5tc2hjZmcuZG90MTFNZXNoSFdNUG5ldERpYW1ldGVyVHJhdmVyc2FsVGltZSkKKyNkZWZpbmUgZGVmYXVsdF9saWZldGltZShzKSBcCisJTVNFQ19UT19UVShzLT51LnN0YS5tc2hjZmcuZG90MTFNZXNoSFdNUGFjdGl2ZVBhdGhUaW1lb3V0KQorI2RlZmluZSBtaW5fcHJlcV9pbnRfamlmZihzKSBcCisJKG1zZWNzX3RvX2ppZmZpZXMocy0+dS5zdGEubXNoY2ZnLmRvdDExTWVzaEhXTVBwcmVxTWluSW50ZXJ2YWwpKQorI2RlZmluZSBtYXhfcHJlcV9yZXRyaWVzKHMpIChzLT51LnN0YS5tc2hjZmcuZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzKQorI2RlZmluZSBkaXNjX3RpbWVvdXRfamlmZihzKSBcCisJbXNlY3NfdG9famlmZmllcyhzZGF0YS0+dS5zdGEubXNoY2ZnLm1pbl9kaXNjb3ZlcnlfdGltZW91dCkKKworZW51bSBtcGF0aF9mcmFtZV90eXBlIHsKKwlNUEFUSF9QUkVRID0gMCwKKwlNUEFUSF9QUkVQLAorCU1QQVRIX1BFUlIKK307CisKK3N0YXRpYyBpbnQgbWVzaF9wYXRoX3NlbF9mcmFtZV90eChlbnVtIG1wYXRoX2ZyYW1lX3R5cGUgYWN0aW9uLCB1OCBmbGFncywKKwkJdTggKm9yaWdfYWRkciwgX19sZTMyIG9yaWdfZHNuLCB1OCBkc3RfZmxhZ3MsIHU4ICpkc3QsCisJCV9fbGUzMiBkc3RfZHNuLCB1OCAqZGEsIHU4IGhvcF9jb3VudCwgdTggdHRsLCBfX2xlMzIgbGlmZXRpbWUsCisJCV9fbGUzMiBtZXRyaWMsIF9fbGUzMiBwcmVxX2lkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvczsKKwlpbnQgaWVfbGVuOworCisJaWYgKCFza2IpCisJCXJldHVybiAtMTsKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJLyogMjUgaXMgdGhlIHNpemUgb2YgdGhlIGNvbW1vbiBtZ210IHBhcnQgKDI0KSBwbHVzIHRoZSBzaXplIG9mIHRoZQorCSAqIGNvbW1vbiBhY3Rpb24gcGFydCAoMSkKKwkgKi8KKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQorCQlza2JfcHV0KHNrYiwgMjUgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5tZXNoX2FjdGlvbikpOworCW1lbXNldChtZ210LCAwLCAyNSArIHNpemVvZihtZ210LT51LmFjdGlvbi51Lm1lc2hfYWN0aW9uKSk7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKKwkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJLyogQlNTSUQgaXMgbGVmdCB6ZXJvZWQsIHdpbGRjYXJkIHZhbHVlICovCisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBNRVNIX1BBVEhfU0VMX0NBVEVHT1JZOworCW1nbXQtPnUuYWN0aW9uLnUubWVzaF9hY3Rpb24uYWN0aW9uX2NvZGUgPSBhY3Rpb247CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgTVBBVEhfUFJFUToKKwkJaWVfbGVuID0gMzc7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWVfbGVuKTsKKwkJKnBvcysrID0gV0xBTl9FSURfUFJFUTsKKwkJYnJlYWs7CisJY2FzZSBNUEFUSF9QUkVQOgorCQlpZV9sZW4gPSAzMTsKKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZV9sZW4pOworCQkqcG9zKysgPSBXTEFOX0VJRF9QUkVQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrZnJlZShza2IpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCQlicmVhazsKKwl9CisJKnBvcysrID0gaWVfbGVuOworCSpwb3MrKyA9IGZsYWdzOworCSpwb3MrKyA9IGhvcF9jb3VudDsKKwkqcG9zKysgPSB0dGw7CisJaWYgKGFjdGlvbiA9PSBNUEFUSF9QUkVRKSB7CisJCW1lbWNweShwb3MsICZwcmVxX2lkLCA0KTsKKwkJcG9zICs9IDQ7CisJfQorCW1lbWNweShwb3MsIG9yaWdfYWRkciwgRVRIX0FMRU4pOworCXBvcyArPSBFVEhfQUxFTjsKKwltZW1jcHkocG9zLCAmb3JpZ19kc24sIDQpOworCXBvcyArPSA0OworCW1lbWNweShwb3MsICZsaWZldGltZSwgNCk7CisJcG9zICs9IDQ7CisJbWVtY3B5KHBvcywgJm1ldHJpYywgNCk7CisJcG9zICs9IDQ7CisJaWYgKGFjdGlvbiA9PSBNUEFUSF9QUkVRKSB7CisJCS8qIGRlc3RpbmF0aW9uIGNvdW50ICovCisJCSpwb3MrKyA9IDE7CisJCSpwb3MrKyA9IGRzdF9mbGFnczsKKwl9CisJbWVtY3B5KHBvcywgZHN0LCBFVEhfQUxFTik7CisJcG9zICs9IEVUSF9BTEVOOworCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKKworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lc2hfc2VuZF9wYXRoIGVycm9yIC0gU2VuZHMgYSBQRVJSIG1lc2ggbWFuYWdlbWVudCBmcmFtZQorICoKKyAqIEBkc3Q6IGJyb2tlbiBkZXN0aW5hdGlvbgorICogQGRzdF9kc246IGRzbiBvZiB0aGUgYnJva2VuIGRlc3RpbmF0aW9uCisgKiBAcmE6IG5vZGUgdGhpcyBmcmFtZSBpcyBhZGRyZXNzZWQgdG8KKyAqLworaW50IG1lc2hfcGF0aF9lcnJvcl90eCh1OCAqZHN0LCBfX2xlMzIgZHN0X2RzbiwgdTggKnJhLAorCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvczsKKwlpbnQgaWVfbGVuOworCisJaWYgKCFza2IpCisJCXJldHVybiAtMTsKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJLyogMjUgaXMgdGhlIHNpemUgb2YgdGhlIGNvbW1vbiBtZ210IHBhcnQgKDI0KSBwbHVzIHRoZSBzaXplIG9mIHRoZQorCSAqIGNvbW1vbiBhY3Rpb24gcGFydCAoMSkKKwkgKi8KKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQorCQlza2JfcHV0KHNrYiwgMjUgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5tZXNoX2FjdGlvbikpOworCW1lbXNldChtZ210LCAwLCAyNSArIHNpemVvZihtZ210LT51LmFjdGlvbi51Lm1lc2hfYWN0aW9uKSk7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKKwkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwltZW1jcHkobWdtdC0+ZGEsIHJhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJLyogQlNTSUQgaXMgbGVmdCB6ZXJvZWQsIHdpbGRjYXJkIHZhbHVlICovCisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBNRVNIX1BBVEhfU0VMX0NBVEVHT1JZOworCW1nbXQtPnUuYWN0aW9uLnUubWVzaF9hY3Rpb24uYWN0aW9uX2NvZGUgPSBNUEFUSF9QRVJSOworCWllX2xlbiA9IDEyOworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWVfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9QRVJSOworCSpwb3MrKyA9IGllX2xlbjsKKwkvKiBtb2RlIGZsYWdzLCByZXNlcnZlZCAqLworCSpwb3MrKyA9IDA7CisJLyogbnVtYmVyIG9mIGRlc3RpbmF0aW9ucyAqLworCSpwb3MrKyA9IDE7CisJbWVtY3B5KHBvcywgZHN0LCBFVEhfQUxFTik7CisJcG9zICs9IEVUSF9BTEVOOworCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKKworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGFpcnRpbWVfbGlua19tZXRyaWNfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCS8qIFRoaXMgc2hvdWxkIGJlIGFkanVzdGVkIGZvciBlYWNoIGRldmljZSAqLworCWludCBkZXZpY2VfY29uc3RhbnQgPSAxIDw8IEFSSVRIX1NISUZUOworCWludCB0ZXN0X2ZyYW1lX2xlbiA9IFRFU1RfRlJBTUVfTEVOIDw8IEFSSVRIX1NISUZUOworCWludCBzX3VuaXQgPSAxIDw8IEFSSVRIX1NISUZUOworCWludCByYXRlLCBlcnI7CisJdTMyIHR4X3RpbWUsIGVzdGltYXRlZF9yZXR4OworCXU2NCByZXN1bHQ7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlpZiAoc3RhLT5mYWlsX2F2ZyA+PSAxMDApCisJCXJldHVybiBNQVhfTUVUUklDOworCWVyciA9IChzdGEtPmZhaWxfYXZnIDw8IEFSSVRIX1NISUZUKSAvIDEwMDsKKworCS8qIGJpdHJhdGUgaXMgaW4gdW5pdHMgb2YgMTAwIEticHMsIHdoaWxlIHdlIG5lZWQgcmF0ZSBpbiB1bml0cyBvZgorCSAqIDFNYnBzLiBUaGlzIHdpbGwgYmUgY29ycmVjdGVkIG9uIHR4X3RpbWUgY29tcHV0YXRpb24uCisJICovCisJcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tzdGEtPnR4cmF0ZV9pZHhdLmJpdHJhdGU7CisJdHhfdGltZSA9IChkZXZpY2VfY29uc3RhbnQgKyAxMCAqIHRlc3RfZnJhbWVfbGVuIC8gcmF0ZSk7CisJZXN0aW1hdGVkX3JldHggPSAoKDEgPDwgKDIgKiBBUklUSF9TSElGVCkpIC8gKHNfdW5pdCAtIGVycikpOworCXJlc3VsdCA9ICh0eF90aW1lICogZXN0aW1hdGVkX3JldHgpID4+ICgyICogQVJJVEhfU0hJRlQpIDsKKwlyZXR1cm4gKHUzMilyZXN1bHQ7Cit9CisKKy8qKgorICogaHdtcF9yb3V0ZV9pbmZvX2dldCAtIFVwZGF0ZSByb3V0aW5nIGluZm8gdG8gb3JpZ2luYXRvciBhbmQgdHJhbnNtaXR0ZXIKKyAqCisgKiBAZGV2OiBsb2NhbCBtZXNoIGludGVyZmFjZQorICogQG1nbXQ6IG1lc2ggbWFuYWdlbWVudCBmcmFtZQorICogQGh3bXBfaWU6IGh3bXAgaW5mb3JtYXRpb24gZWxlbWVudCAoUFJFUCBvciBQUkVRKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgcGF0aCByb3V0aW5nIGluZm9ybWF0aW9uIHRvIHRoZSBvcmlnaW5hdG9yIGFuZCB0aGUKKyAqIHRyYW5zbWl0dGVyIG9mIGEgSFdNUCBQUkVRIG9yIFBSRVAgZnJhbS4KKyAqCisgKiBSZXR1cm5zOiBtZXRyaWMgdG8gZnJhbWUgb3JpZ2luYXRvciBvciAwIGlmIHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIGZ1cnRoZXIKKyAqIHByb2Nlc3NlZAorICoKKyAqIE5vdGVzOiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmx5IHBsYWNlIChiZXNpZGVzIHVzZXItcHJvdmlkZWQgaW5mbykgd2hlcmUKKyAqIHBhdGggcm91dGluZyBpbmZvcm1hdGlvbiBpcyB1cGRhdGVkLgorICovCitzdGF0aWMgdTMyIGh3bXBfcm91dGVfaW5mb19nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkgICAgdTggKmh3bXBfaWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlib29sIGZyZXNoX2luZm87CisJdTggKm9yaWdfYWRkciwgKnRhOworCXUzMiBvcmlnX2Rzbiwgb3JpZ19tZXRyaWM7CisJdW5zaWduZWQgbG9uZyBvcmlnX2xpZmV0aW1lLCBleHBfdGltZTsKKwl1MzIgbGFzdF9ob3BfbWV0cmljLCBuZXdfbWV0cmljOworCWJvb2wgcHJvY2VzcyA9IHRydWU7CisJdTggYWN0aW9uID0gbWdtdC0+dS5hY3Rpb24udS5tZXNoX2FjdGlvbi5hY3Rpb25fY29kZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbGFzdF9ob3BfbWV0cmljID0gYWlydGltZV9saW5rX21ldHJpY19nZXQobG9jYWwsIHN0YSk7CisJLyogVXBkYXRlIGFuZCBjaGVjayBvcmlnaW5hdG9yIHJvdXRpbmcgaW5mbyAqLworCWZyZXNoX2luZm8gPSB0cnVlOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIE1QQVRIX1BSRVE6CisJCW9yaWdfYWRkciA9IFBSRVFfSUVfT1JJR19BRERSKGh3bXBfaWUpOworCQlvcmlnX2RzbiA9IFBSRVFfSUVfT1JJR19EU04oaHdtcF9pZSk7CisJCW9yaWdfbGlmZXRpbWUgPSBQUkVRX0lFX0xJRkVUSU1FKGh3bXBfaWUpOworCQlvcmlnX21ldHJpYyA9IFBSRVFfSUVfTUVUUklDKGh3bXBfaWUpOworCQlicmVhazsKKwljYXNlIE1QQVRIX1BSRVA6CisJCS8qIE9yaWdpbmF0b3IgaGVyZSByZWZlcnMgdG8gdGhlIE1QIHRoYXQgd2FzIHRoZSBkZXN0aW5hdGlvbiBpbgorCQkgKiB0aGUgUGF0aCBSZXF1ZXN0LiBUaGUgZHJhZnQgcmVmZXJzIHRvIHRoYXQgTVAgYXMgdGhlCisJCSAqIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGV2ZW4gdGhvdWdoIHVzdWFsbHkgaXQgaXMgdGhlIG9yaWdpbiBvZgorCQkgKiB0aGUgUFJFUCBmcmFtZS4gV2UgZGl2ZXJ0IGZyb20gdGhlIG5vbWVuY2xhdHVyZSBpbiB0aGUgZHJhZnQKKwkJICogc28gdGhhdCB3ZSBjYW4gZWFzaWx5IHVzZSBhIHNpbmdsZSBmdW5jdGlvbiB0byBnYXRoZXIgcGF0aAorCQkgKiBpbmZvcm1hdGlvbiBmcm9tIGJvdGggUFJFUSBhbmQgUFJFUCBmcmFtZXMuCisJCSAqLworCQlvcmlnX2FkZHIgPSBQUkVQX0lFX09SSUdfQUREUihod21wX2llKTsKKwkJb3JpZ19kc24gPSBQUkVQX0lFX09SSUdfRFNOKGh3bXBfaWUpOworCQlvcmlnX2xpZmV0aW1lID0gUFJFUF9JRV9MSUZFVElNRShod21wX2llKTsKKwkJb3JpZ19tZXRyaWMgPSBQUkVQX0lFX01FVFJJQyhod21wX2llKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAwOworCX0KKwluZXdfbWV0cmljID0gb3JpZ19tZXRyaWMgKyBsYXN0X2hvcF9tZXRyaWM7CisJaWYgKG5ld19tZXRyaWMgPCBvcmlnX21ldHJpYykKKwkJbmV3X21ldHJpYyA9IE1BWF9NRVRSSUM7CisJZXhwX3RpbWUgPSBUVV9UT19FWFBfVElNRShvcmlnX2xpZmV0aW1lKTsKKworCWlmIChtZW1jbXAob3JpZ19hZGRyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCQkvKiBUaGlzIE1QIGlzIHRoZSBvcmlnaW5hdG9yLCB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhpcworCQkgKiBmcmFtZSwgZXhjZXB0IGZvciB1cGRhdGluZyB0cmFuc21pdHRlcidzIHBhdGggaW5mby4KKwkJICovCisJCXByb2Nlc3MgPSBmYWxzZTsKKwkJZnJlc2hfaW5mbyA9IGZhbHNlOworCX0gZWxzZSB7CisJCW1wYXRoID0gbWVzaF9wYXRoX2xvb2t1cChvcmlnX2FkZHIsIGRldik7CisJCWlmIChtcGF0aCkgeworCQkJc3Bpbl9sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCQlpZiAobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0ZJWEVEKQorCQkJCWZyZXNoX2luZm8gPSBmYWxzZTsKKwkJCWVsc2UgaWYgKChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKSAmJgorCQkJICAgIChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfRFNOX1ZBTElEKSkgeworCQkJCWlmIChEU05fR1QobXBhdGgtPmRzbiwgb3JpZ19kc24pIHx8CisJCQkJICAgIChtcGF0aC0+ZHNuID09IG9yaWdfZHNuICYmCisJCQkJICAgICBhY3Rpb24gPT0gTVBBVEhfUFJFUSAmJgorCQkJCSAgICAgbmV3X21ldHJpYyA+IG1wYXRoLT5tZXRyaWMpKSB7CisJCQkJCXByb2Nlc3MgPSBmYWxzZTsKKwkJCQkJZnJlc2hfaW5mbyA9IGZhbHNlOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1lc2hfcGF0aF9hZGQob3JpZ19hZGRyLCBkZXYpOworCQkJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwKG9yaWdfYWRkciwgZGV2KTsKKwkJCWlmICghbXBhdGgpIHsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCQl9CisKKwkJaWYgKGZyZXNoX2luZm8pIHsKKwkJCW1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChtcGF0aCwgc3RhKTsKKwkJCW1wYXRoLT5mbGFncyB8PSBNRVNIX1BBVEhfRFNOX1ZBTElEOworCQkJbXBhdGgtPm1ldHJpYyA9IG5ld19tZXRyaWM7CisJCQltcGF0aC0+ZHNuID0gb3JpZ19kc247CisJCQltcGF0aC0+ZXhwX3RpbWUgPSB0aW1lX2FmdGVyKG1wYXRoLT5leHBfdGltZSwgZXhwX3RpbWUpCisJCQkJCSAgPyAgbXBhdGgtPmV4cF90aW1lIDogZXhwX3RpbWU7CisJCQltZXNoX3BhdGhfYWN0aXZhdGUobXBhdGgpOworCQkJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwkJCW1lc2hfcGF0aF90eF9wZW5kaW5nKG1wYXRoKTsKKwkJCS8qIGRyYWZ0IHNheXMgcHJlcV9pZCBzaG91bGQgYmUgc2F2ZWQgdG8sIGJ1dCB0aGVyZSBkb2VzCisJCQkgKiBub3Qgc2VlbSB0byBiZSBhbnkgdXNlIGZvciBpdCwgc2tpcHBpbmcgYnkgbm93CisJCQkgKi8KKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCX0KKworCS8qIFVwZGF0ZSBhbmQgY2hlY2sgdHJhbnNtaXR0ZXIgcm91dGluZyBpbmZvICovCisJdGEgPSBtZ210LT5zYTsKKwlpZiAobWVtY21wKG9yaWdfYWRkciwgdGEsIEVUSF9BTEVOKSA9PSAwKQorCQlmcmVzaF9pbmZvID0gZmFsc2U7CisJZWxzZSB7CisJCWZyZXNoX2luZm8gPSB0cnVlOworCisJCW1wYXRoID0gbWVzaF9wYXRoX2xvb2t1cCh0YSwgZGV2KTsKKwkJaWYgKG1wYXRoKSB7CisJCQlzcGluX2xvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwkJCWlmICgobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0ZJWEVEKSB8fAorCQkJCSgobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0FDVElWRSkgJiYKKwkJCQkJKGxhc3RfaG9wX21ldHJpYyA+IG1wYXRoLT5tZXRyaWMpKSkKKwkJCQlmcmVzaF9pbmZvID0gZmFsc2U7CisJCX0gZWxzZSB7CisJCQltZXNoX3BhdGhfYWRkKHRhLCBkZXYpOworCQkJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwKHRhLCBkZXYpOworCQkJaWYgKCFtcGF0aCkgeworCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJc3Bpbl9sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCX0KKworCQlpZiAoZnJlc2hfaW5mbykgeworCQkJbWVzaF9wYXRoX2Fzc2lnbl9uZXh0aG9wKG1wYXRoLCBzdGEpOworCQkJbXBhdGgtPmZsYWdzICY9IH5NRVNIX1BBVEhfRFNOX1ZBTElEOworCQkJbXBhdGgtPm1ldHJpYyA9IGxhc3RfaG9wX21ldHJpYzsKKwkJCW1wYXRoLT5leHBfdGltZSA9IHRpbWVfYWZ0ZXIobXBhdGgtPmV4cF90aW1lLCBleHBfdGltZSkKKwkJCQkJICA/ICBtcGF0aC0+ZXhwX3RpbWUgOiBleHBfdGltZTsKKwkJCW1lc2hfcGF0aF9hY3RpdmF0ZShtcGF0aCk7CisJCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCQkJbWVzaF9wYXRoX3R4X3BlbmRpbmcobXBhdGgpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcHJvY2VzcyA/IG5ld19tZXRyaWMgOiAwOworfQorCitzdGF0aWMgdm9pZCBod21wX3ByZXFfZnJhbWVfcHJvY2VzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICAgIHU4ICpwcmVxX2VsZW0sIHUzMiBtZXRyaWMpIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwl1OCAqZHN0X2FkZHIsICpvcmlnX2FkZHI7CisJdTggZHN0X2ZsYWdzLCB0dGw7CisJdTMyIG9yaWdfZHNuLCBkc3RfZHNuLCBsaWZldGltZTsKKwlib29sIHJlcGx5ID0gZmFsc2U7CisJYm9vbCBmb3J3YXJkID0gdHJ1ZTsKKworCS8qIFVwZGF0ZSBkZXN0aW5hdGlvbiBEU04sIGlmIHByZXNlbnQgKi8KKwlkc3RfYWRkciA9IFBSRVFfSUVfRFNUX0FERFIocHJlcV9lbGVtKTsKKwlvcmlnX2FkZHIgPSBQUkVRX0lFX09SSUdfQUREUihwcmVxX2VsZW0pOworCWRzdF9kc24gPSBQUkVRX0lFX0RTVF9EU04ocHJlcV9lbGVtKTsKKwlvcmlnX2RzbiA9IFBSRVFfSUVfT1JJR19EU04ocHJlcV9lbGVtKTsKKwlkc3RfZmxhZ3MgPSBQUkVRX0lFX0RTVF9GKHByZXFfZWxlbSk7CisKKwlpZiAobWVtY21wKGRzdF9hZGRyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCQlmb3J3YXJkID0gZmFsc2U7CisJCXJlcGx5ID0gdHJ1ZTsKKwkJbWV0cmljID0gMDsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmxhc3RfZHNuX3VwZGF0ZSArCisJCQkJCW5ldF90cmF2ZXJzYWxfamlmZmllcyhzZGF0YSkpIHx8CisJCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBpZnN0YS0+bGFzdF9kc25fdXBkYXRlKSkgeworCQkJZHN0X2RzbiA9ICsraWZzdGEtPmRzbjsKKwkJCWlmc3RhLT5sYXN0X2Rzbl91cGRhdGUgPSBqaWZmaWVzOworCQl9CisJfSBlbHNlIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZHN0X2FkZHIsIGRldik7CisJCWlmIChtcGF0aCkgeworCQkJaWYgKCghKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9EU05fVkFMSUQpKSB8fAorCQkJCQlEU05fTFQobXBhdGgtPmRzbiwgZHN0X2RzbikpIHsKKwkJCQltcGF0aC0+ZHNuID0gZHN0X2RzbjsKKwkJCQltcGF0aC0+ZmxhZ3MgJj0gTUVTSF9QQVRIX0RTTl9WQUxJRDsKKwkJCX0gZWxzZSBpZiAoKCEoZHN0X2ZsYWdzICYgTVBfRl9ETykpICYmCisJCQkJCShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKSkgeworCQkJCXJlcGx5ID0gdHJ1ZTsKKwkJCQltZXRyaWMgPSBtcGF0aC0+bWV0cmljOworCQkJCWRzdF9kc24gPSBtcGF0aC0+ZHNuOworCQkJCWlmIChkc3RfZmxhZ3MgJiBNUF9GX1JGKQorCQkJCQlkc3RfZmxhZ3MgfD0gTVBfRl9ETzsKKwkJCQllbHNlCisJCQkJCWZvcndhcmQgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlpZiAocmVwbHkpIHsKKwkJbGlmZXRpbWUgPSBQUkVRX0lFX0xJRkVUSU1FKHByZXFfZWxlbSk7CisJCXR0bCA9IGlmc3RhLT5tc2hjZmcuZG90MTFNZXNoVFRMOworCQlpZiAodHRsICE9IDApCisJCQltZXNoX3BhdGhfc2VsX2ZyYW1lX3R4KE1QQVRIX1BSRVAsIDAsIGRzdF9hZGRyLAorCQkJCWNwdV90b19sZTMyKGRzdF9kc24pLCAwLCBvcmlnX2FkZHIsCisJCQkJY3B1X3RvX2xlMzIob3JpZ19kc24pLCBtZ210LT5zYSwgMCwgdHRsLAorCQkJCWNwdV90b19sZTMyKGxpZmV0aW1lKSwgY3B1X3RvX2xlMzIobWV0cmljKSwKKwkJCQkwLCBkZXYpOworCQllbHNlCisJCQlpZnN0YS0+bXNoc3RhdHMuZHJvcHBlZF9mcmFtZXNfdHRsKys7CisJfQorCisJaWYgKGZvcndhcmQpIHsKKwkJdTMyIHByZXFfaWQ7CisJCXU4IGhvcGNvdW50LCBmbGFnczsKKworCQl0dGwgPSBQUkVRX0lFX1RUTChwcmVxX2VsZW0pOworCQlsaWZldGltZSA9IFBSRVFfSUVfTElGRVRJTUUocHJlcV9lbGVtKTsKKwkJaWYgKHR0bCA8PSAxKSB7CisJCQlpZnN0YS0+bXNoc3RhdHMuZHJvcHBlZF9mcmFtZXNfdHRsKys7CisJCQlyZXR1cm47CisJCX0KKwkJLS10dGw7CisJCWZsYWdzID0gUFJFUV9JRV9GTEFHUyhwcmVxX2VsZW0pOworCQlwcmVxX2lkID0gUFJFUV9JRV9QUkVRX0lEKHByZXFfZWxlbSk7CisJCWhvcGNvdW50ID0gUFJFUV9JRV9IT1BDT1VOVChwcmVxX2VsZW0pICsgMTsKKwkJbWVzaF9wYXRoX3NlbF9mcmFtZV90eChNUEFUSF9QUkVRLCBmbGFncywgb3JpZ19hZGRyLAorCQkJCWNwdV90b19sZTMyKG9yaWdfZHNuKSwgZHN0X2ZsYWdzLCBkc3RfYWRkciwKKwkJCQljcHVfdG9fbGUzMihkc3RfZHNuKSwgZGV2LT5icm9hZGNhc3QsCisJCQkJaG9wY291bnQsIHR0bCwgY3B1X3RvX2xlMzIobGlmZXRpbWUpLAorCQkJCWNwdV90b19sZTMyKG1ldHJpYyksIGNwdV90b19sZTMyKHByZXFfaWQpLAorCQkJCWRldik7CisJCWlmc3RhLT5tc2hzdGF0cy5md2RlZF9mcmFtZXMrKzsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgaHdtcF9wcmVwX2ZyYW1lX3Byb2Nlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICB1OCAqcHJlcF9lbGVtLCB1MzIgbWV0cmljKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwl1OCAqZHN0X2FkZHIsICpvcmlnX2FkZHI7CisJdTggdHRsLCBob3Bjb3VudCwgZmxhZ3M7CisJdTggbmV4dF9ob3BbRVRIX0FMRU5dOworCXUzMiBkc3RfZHNuLCBvcmlnX2RzbiwgbGlmZXRpbWU7CisKKwkvKiBOb3RlIHRoYXQgd2UgZGl2ZXJ0IGZyb20gdGhlIGRyYWZ0IG5vbWVuY2xhdHVyZSBhbmQgZGVub21pbmF0ZQorCSAqIGRlc3RpbmF0aW9uIHRvIHdoYXQgdGhlIGRyYWZ0IHJlZmVycyB0byBhcyBvcmlnaW5pbmF0b3IuIFNvIGluIHRoaXMKKwkgKiBmdW5jdGlvbiBkZXN0bmF0aW9uIHJlZmVycyB0byB0aGUgZmluYWwgZGVzdGluYXRpb24gb2YgdGhlIFBSRVAsCisJICogd2hpY2ggY29ycmVzcG9uZHMgd2l0aCB0aGUgb3JpZ2luYXRvciBvZiB0aGUgUFJFUSB3aGljaCB0aGlzIFBSRVAKKwkgKiByZXBsaWVzCisJICovCisJZHN0X2FkZHIgPSBQUkVQX0lFX0RTVF9BRERSKHByZXBfZWxlbSk7CisJaWYgKG1lbWNtcChkc3RfYWRkciwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJCS8qIGRlc3RpbmF0aW9uLCBubyBmb3J3YXJkaW5nIHJlcXVpcmVkICovCisJCXJldHVybjsKKworCXR0bCA9IFBSRVBfSUVfVFRMKHByZXBfZWxlbSk7CisJaWYgKHR0bCA8PSAxKSB7CisJCXNkYXRhLT51LnN0YS5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc190dGwrKzsKKwkJcmV0dXJuOworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZHN0X2FkZHIsIGRldik7CisJaWYgKG1wYXRoKQorCQlzcGluX2xvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwllbHNlCisJCWdvdG8gZmFpbDsKKwlpZiAoIShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKSkgeworCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCQlnb3RvIGZhaWw7CisJfQorCW1lbWNweShuZXh0X2hvcCwgbXBhdGgtPm5leHRfaG9wLT5hZGRyLCBFVEhfQUxFTik7CisJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwktLXR0bDsKKwlmbGFncyA9IFBSRVBfSUVfRkxBR1MocHJlcF9lbGVtKTsKKwlsaWZldGltZSA9IFBSRVBfSUVfTElGRVRJTUUocHJlcF9lbGVtKTsKKwlob3Bjb3VudCA9IFBSRVBfSUVfSE9QQ09VTlQocHJlcF9lbGVtKSArIDE7CisJb3JpZ19hZGRyID0gUFJFUF9JRV9PUklHX0FERFIocHJlcF9lbGVtKTsKKwlkc3RfZHNuID0gUFJFUF9JRV9EU1RfRFNOKHByZXBfZWxlbSk7CisJb3JpZ19kc24gPSBQUkVQX0lFX09SSUdfRFNOKHByZXBfZWxlbSk7CisKKwltZXNoX3BhdGhfc2VsX2ZyYW1lX3R4KE1QQVRIX1BSRVAsIGZsYWdzLCBvcmlnX2FkZHIsCisJCWNwdV90b19sZTMyKG9yaWdfZHNuKSwgMCwgZHN0X2FkZHIsCisJCWNwdV90b19sZTMyKGRzdF9kc24pLCBtcGF0aC0+bmV4dF9ob3AtPmFkZHIsIGhvcGNvdW50LCB0dGwsCisJCWNwdV90b19sZTMyKGxpZmV0aW1lKSwgY3B1X3RvX2xlMzIobWV0cmljKSwKKwkJMCwgZGV2KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlzZGF0YS0+dS5zdGEubXNoc3RhdHMuZndkZWRfZnJhbWVzKys7CisJcmV0dXJuOworCitmYWlsOgorCXJjdV9yZWFkX3VubG9jaygpOworCXNkYXRhLT51LnN0YS5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc19ub19yb3V0ZSsrOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgaHdtcF9wZXJyX2ZyYW1lX3Byb2Nlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCB1OCAqcGVycl9lbGVtKQoreworCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOworCXU4ICp0YSwgKmRzdF9hZGRyOworCXUzMiBkc3RfZHNuOworCisJdGEgPSBtZ210LT5zYTsKKwlkc3RfYWRkciA9IFBFUlJfSUVfRFNUX0FERFIocGVycl9lbGVtKTsKKwlkc3RfZHNuID0gUEVSUl9JRV9EU1RfRFNOKHBlcnJfZWxlbSk7CisJcmN1X3JlYWRfbG9jaygpOworCW1wYXRoID0gbWVzaF9wYXRoX2xvb2t1cChkc3RfYWRkciwgZGV2KTsKKwlpZiAobXBhdGgpIHsKKwkJc3Bpbl9sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCWlmIChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFICYmCisJCSAgICBtZW1jbXAodGEsIG1wYXRoLT5uZXh0X2hvcC0+YWRkciwgRVRIX0FMRU4pID09IDAgJiYKKwkJICAgICghKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9EU05fVkFMSUQpIHx8CisJCSAgICBEU05fR1QoZHN0X2RzbiwgbXBhdGgtPmRzbikpKSB7CisJCQltcGF0aC0+ZmxhZ3MgJj0gfk1FU0hfUEFUSF9BQ1RJVkU7CisJCQltcGF0aC0+ZHNuID0gZHN0X2RzbjsKKwkJCXNwaW5fdW5sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCQltZXNoX3BhdGhfZXJyb3JfdHgoZHN0X2FkZHIsIGNwdV90b19sZTMyKGRzdF9kc24pLAorCQkJCQkgICBkZXYtPmJyb2FkY2FzdCwgZGV2KTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworCisKK3ZvaWQgbWVzaF9yeF9wYXRoX3NlbF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCSAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCXNpemVfdCBiYXNlbGVuOworCXUzMiBsYXN0X2hvcF9tZXRyaWM7CisKKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYWN0aW9uLnUubWVzaF9hY3Rpb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUuYWN0aW9uLnUubWVzaF9hY3Rpb24udmFyaWFibGUsCisJCQlsZW4gLSBiYXNlbGVuLCAmZWxlbXMpOworCisJc3dpdGNoIChtZ210LT51LmFjdGlvbi51Lm1lc2hfYWN0aW9uLmFjdGlvbl9jb2RlKSB7CisJY2FzZSBNUEFUSF9QUkVROgorCQlpZiAoIWVsZW1zLnByZXEgfHwgZWxlbXMucHJlcV9sZW4gIT0gMzcpCisJCQkvKiBSaWdodCBub3cgd2Ugc3VwcG9ydCBqdXN0IDEgZGVzdGluYXRpb24gYW5kIG5vIEFFICovCisJCQlyZXR1cm47CisJCWxhc3RfaG9wX21ldHJpYyA9IGh3bXBfcm91dGVfaW5mb19nZXQoZGV2LCBtZ210LCBlbGVtcy5wcmVxKTsKKwkJaWYgKCFsYXN0X2hvcF9tZXRyaWMpCisJCQlyZXR1cm47CisJCWh3bXBfcHJlcV9mcmFtZV9wcm9jZXNzKGRldiwgbWdtdCwgZWxlbXMucHJlcSwgbGFzdF9ob3BfbWV0cmljKTsKKwkJYnJlYWs7CisJY2FzZSBNUEFUSF9QUkVQOgorCQlpZiAoIWVsZW1zLnByZXAgfHwgZWxlbXMucHJlcF9sZW4gIT0gMzEpCisJCQkvKiBSaWdodCBub3cgd2Ugc3VwcG9ydCBubyBBRSAqLworCQkJcmV0dXJuOworCQlsYXN0X2hvcF9tZXRyaWMgPSBod21wX3JvdXRlX2luZm9fZ2V0KGRldiwgbWdtdCwgZWxlbXMucHJlcCk7CisJCWlmICghbGFzdF9ob3BfbWV0cmljKQorCQkJcmV0dXJuOworCQlod21wX3ByZXBfZnJhbWVfcHJvY2VzcyhkZXYsIG1nbXQsIGVsZW1zLnByZXAsIGxhc3RfaG9wX21ldHJpYyk7CisJCWJyZWFrOworCWNhc2UgTVBBVEhfUEVSUjoKKwkJaWYgKCFlbGVtcy5wZXJyIHx8IGVsZW1zLnBlcnJfbGVuICE9IDEyKQorCQkJLyogUmlnaHQgbm93IHdlIHN1cHBvcnQgb25seSBvbmUgZGVzdGluYXRpb24gcGVyIFBFUlIgKi8KKwkJCXJldHVybjsKKwkJaHdtcF9wZXJyX2ZyYW1lX3Byb2Nlc3MoZGV2LCBtZ210LCBlbGVtcy5wZXJyKTsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCit9CisKKy8qKgorICogbWVzaF9xdWV1ZV9wcmVxIC0gcXVldWUgYSBQUkVRIHRvIGEgZ2l2ZW4gZGVzdGluYXRpb24KKyAqCisgKiBAbXBhdGg6IG1lc2ggcGF0aCB0byBkaXNjb3ZlcgorICogQGZsYWdzOiBzcGVjaWFsIGF0dHJpYnV0ZXMgb2YgdGhlIFBSRVEgdG8gYmUgc2VudAorICoKKyAqIExvY2tpbmc6IHRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIHJjdSByZWFkIGxvY2sgYmxvY2suCisgKgorICovCitzdGF0aWMgdm9pZCBtZXNoX3F1ZXVlX3ByZXEoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHU4IGZsYWdzKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJSUVFRTgwMjExX0RFVl9UT19TVUJfSUYobXBhdGgtPmRldik7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgbWVzaF9wcmVxX3F1ZXVlICpwcmVxX25vZGU7CisKKwlwcmVxX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF9wcmVxX3F1ZXVlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmVxX25vZGUpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1lc2ggSFdNUDogY291bGQgbm90IGFsbG9jYXRlIFBSRVEgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2soJmlmc3RhLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CisJaWYgKGlmc3RhLT5wcmVxX3F1ZXVlX2xlbiA9PSBNQVhfUFJFUV9RVUVVRV9MRU4pIHsKKwkJc3Bpbl91bmxvY2soJmlmc3RhLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CisJCWtmcmVlKHByZXFfbm9kZSk7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiTWVzaCBIV01QOiBQUkVRIG5vZGUgcXVldWUgZnVsbFxuIik7CisJCXJldHVybjsKKwl9CisKKwltZW1jcHkocHJlcV9ub2RlLT5kc3QsIG1wYXRoLT5kc3QsIEVUSF9BTEVOKTsKKwlwcmVxX25vZGUtPmZsYWdzID0gZmxhZ3M7CisKKwlsaXN0X2FkZF90YWlsKCZwcmVxX25vZGUtPmxpc3QsICZpZnN0YS0+cHJlcV9xdWV1ZS5saXN0KTsKKwkrK2lmc3RhLT5wcmVxX3F1ZXVlX2xlbjsKKwlzcGluX3VubG9jaygmaWZzdGEtPm1lc2hfcHJlcV9xdWV1ZV9sb2NrKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5sYXN0X3ByZXEgKyBtaW5fcHJlcV9pbnRfamlmZihzZGF0YSkpKQorCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCisJZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgaWZzdGEtPmxhc3RfcHJlcSkpIHsKKwkJLyogYXZvaWQgbG9uZyB3YWl0IGlmIGRpZCBub3Qgc2VuZCBwcmVxcyBmb3IgYSBsb25nIHRpbWUKKwkJICogYW5kIGppZmZpZXMgd3JhcHBlZCBhcm91bmQKKwkJICovCisJCWlmc3RhLT5sYXN0X3ByZXEgPSBqaWZmaWVzIC0gbWluX3ByZXFfaW50X2ppZmYoc2RhdGEpIC0gMTsKKwkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKKwl9IGVsc2UKKwkJbW9kX3RpbWVyKCZpZnN0YS0+bWVzaF9wYXRoX3RpbWVyLCBpZnN0YS0+bGFzdF9wcmVxICsKKwkJCQkJCW1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSk7Cit9CisKKy8qKgorICogbWVzaF9wYXRoX3N0YXJ0X2Rpc2NvdmVyeSAtIGxhdW5jaCBhIHBhdGggZGlzY292ZXJ5IGZyb20gdGhlIFBSRVEgcXVldWUKKyAqCisgKiBAZGV2OiBsb2NhbCBtZXNoIGludGVyZmFjZQorICovCit2b2lkIG1lc2hfcGF0aF9zdGFydF9kaXNjb3Zlcnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCUlFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgbWVzaF9wcmVxX3F1ZXVlICpwcmVxX25vZGU7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJdTggdHRsLCBkc3RfZmxhZ3M7CisJdTMyIGxpZmV0aW1lOworCisJc3Bpbl9sb2NrKCZpZnN0YS0+bWVzaF9wcmVxX3F1ZXVlX2xvY2spOworCWlmICghaWZzdGEtPnByZXFfcXVldWVfbGVuIHx8CisJCXRpbWVfYmVmb3JlKGppZmZpZXMsIGlmc3RhLT5sYXN0X3ByZXEgKworCQkJCW1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSkpIHsKKwkJc3Bpbl91bmxvY2soJmlmc3RhLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlwcmVxX25vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KCZpZnN0YS0+cHJlcV9xdWV1ZS5saXN0LAorCQkJc3RydWN0IG1lc2hfcHJlcV9xdWV1ZSwgbGlzdCk7CisJbGlzdF9kZWwoJnByZXFfbm9kZS0+bGlzdCk7CisJLS1pZnN0YS0+cHJlcV9xdWV1ZV9sZW47CisJc3Bpbl91bmxvY2soJmlmc3RhLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwKHByZXFfbm9kZS0+ZHN0LCBkZXYpOworCWlmICghbXBhdGgpCisJCWdvdG8gZW5kZGlzY292ZXJ5OworCisJc3Bpbl9sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJaWYgKHByZXFfbm9kZS0+ZmxhZ3MgJiBQUkVRX1FfRl9TVEFSVCkgeworCQlpZiAobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykgeworCQkJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwkJCWdvdG8gZW5kZGlzY292ZXJ5OworCQl9IGVsc2UgeworCQkJbXBhdGgtPmZsYWdzICY9IH5NRVNIX1BBVEhfUkVTT0xWRUQ7CisJCQltcGF0aC0+ZmxhZ3MgfD0gTUVTSF9QQVRIX1JFU09MVklORzsKKwkJCW1wYXRoLT5kaXNjb3ZlcnlfcmV0cmllcyA9IDA7CisJCQltcGF0aC0+ZGlzY292ZXJ5X3RpbWVvdXQgPSBkaXNjX3RpbWVvdXRfamlmZihzZGF0YSk7CisJCX0KKwl9IGVsc2UgaWYgKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykgfHwKKwkJCW1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9SRVNPTFZFRCkgeworCQltcGF0aC0+ZmxhZ3MgJj0gfk1FU0hfUEFUSF9SRVNPTFZJTkc7CisJCXNwaW5fdW5sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCWdvdG8gZW5kZGlzY292ZXJ5OworCX0KKworCWlmc3RhLT5sYXN0X3ByZXEgPSBqaWZmaWVzOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmxhc3RfZHNuX3VwZGF0ZSArCisJCQkJbmV0X3RyYXZlcnNhbF9qaWZmaWVzKHNkYXRhKSkgfHwKKwkgICAgdGltZV9iZWZvcmUoamlmZmllcywgaWZzdGEtPmxhc3RfZHNuX3VwZGF0ZSkpIHsKKwkJKytpZnN0YS0+ZHNuOworCQlzZGF0YS0+dS5zdGEubGFzdF9kc25fdXBkYXRlID0gamlmZmllczsKKwl9CisJbGlmZXRpbWUgPSBkZWZhdWx0X2xpZmV0aW1lKHNkYXRhKTsKKwl0dGwgPSBzZGF0YS0+dS5zdGEubXNoY2ZnLmRvdDExTWVzaFRUTDsKKwlpZiAodHRsID09IDApIHsKKwkJc2RhdGEtPnUuc3RhLm1zaHN0YXRzLmRyb3BwZWRfZnJhbWVzX3R0bCsrOworCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCQlnb3RvIGVuZGRpc2NvdmVyeTsKKwl9CisKKwlpZiAocHJlcV9ub2RlLT5mbGFncyAmIFBSRVFfUV9GX1JFRlJFU0gpCisJCWRzdF9mbGFncyA9IE1QX0ZfRE87CisJZWxzZQorCQlkc3RfZmxhZ3MgPSBNUF9GX1JGOworCisJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwltZXNoX3BhdGhfc2VsX2ZyYW1lX3R4KE1QQVRIX1BSRVEsIDAsIGRldi0+ZGV2X2FkZHIsCisJCQljcHVfdG9fbGUzMihpZnN0YS0+ZHNuKSwgZHN0X2ZsYWdzLCBtcGF0aC0+ZHN0LAorCQkJY3B1X3RvX2xlMzIobXBhdGgtPmRzbiksIGRldi0+YnJvYWRjYXN0LCAwLAorCQkJdHRsLCBjcHVfdG9fbGUzMihsaWZldGltZSksIDAsCisJCQljcHVfdG9fbGUzMihpZnN0YS0+cHJlcV9pZCsrKSwgZGV2KTsKKwltb2RfdGltZXIoJm1wYXRoLT50aW1lciwgamlmZmllcyArIG1wYXRoLT5kaXNjb3ZlcnlfdGltZW91dCk7CisKK2VuZGRpc2NvdmVyeToKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlrZnJlZShwcmVxX25vZGUpOworfQorCisvKioKKyAqIGllZWU4MDIxMXNfbG9va3VwX25leHRob3AgLSBwdXQgdGhlIGFwcHJvcHJpYXRlIG5leHQgaG9wIG9uIGEgbWVzaCBmcmFtZQorICoKKyAqIEBuZXh0X2hvcDogb3V0cHV0IGFyZ3VtZW50IGZvciBuZXh0IGhvcCBhZGRyZXNzCisgKiBAc2tiOiBmcmFtZSB0byBiZSBzZW50CisgKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0aGUgZnJhbWUgd2lsbCBiZSBzZW50IHRocm91Z2gKKyAqCisgKiBSZXR1cm5zOiAwIGlmIHRoZSBuZXh0IGhvcCB3YXMgZm91bmQuIE5vbnplcm8gb3RoZXJ3aXNlLiBJZiBubyBuZXh0IGhvcCBpcworICogZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIHN0YXJ0IGEgcGF0aCBkaXNjb3ZlcnkgYW5kIHF1ZXVlIHRoZSBmcmFtZSBzbyBpdCBpcworICogc2VudCB3aGVuIHRoZSBwYXRoIGlzIHJlc29sdmVkLiBUaGlzIG1lYW5zIHRoZSBjYWxsZXIgbXVzdCBub3QgZnJlZSB0aGUgc2tiCisgKiBpbiB0aGlzIGNhc2UuCisgKi8KK2ludCBtZXNoX25leHRob3BfbG9va3VwKHU4ICpuZXh0X2hvcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl90b19mcmVlID0gTlVMTDsKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwlpbnQgZXJyID0gMDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoc2tiLT5kYXRhLCBkZXYpOworCisJaWYgKCFtcGF0aCkgeworCQltZXNoX3BhdGhfYWRkKHNrYi0+ZGF0YSwgZGV2KTsKKwkJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwKHNrYi0+ZGF0YSwgZGV2KTsKKwkJaWYgKCFtcGF0aCkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJc2RhdGEtPnUuc3RhLm1zaHN0YXRzLmRyb3BwZWRfZnJhbWVzX25vX3JvdXRlKys7CisJCQllcnIgPSAtRU5PU1BDOworCQkJZ290byBlbmRsb29rdXA7CisJCX0KKwl9CisKKwlpZiAobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0FDVElWRSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtcGF0aC0+ZXhwX3RpbWUgLQorCQkJbXNlY3NfdG9famlmZmllcyhzZGF0YS0+dS5zdGEubXNoY2ZnLnBhdGhfcmVmcmVzaF90aW1lKSkKKwkJCQkmJiBza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9PVEhFUkhPU1QKKwkJCQkmJiAhKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9SRVNPTFZJTkcpCisJCQkJJiYgIShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfRklYRUQpKSB7CisJCQltZXNoX3F1ZXVlX3ByZXEobXBhdGgsCisJCQkJCVBSRVFfUV9GX1NUQVJUIHwgUFJFUV9RX0ZfUkVGUkVTSCk7CisJCX0KKwkJbWVtY3B5KG5leHRfaG9wLCBtcGF0aC0+bmV4dF9ob3AtPmFkZHIsCisJCQkJRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCWlmICghKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9SRVNPTFZJTkcpKSB7CisJCQkvKiBTdGFydCBkaXNjb3Zlcnkgb25seSBpZiBpdCBpcyBub3QgcnVubmluZyB5ZXQgKi8KKwkJCW1lc2hfcXVldWVfcHJlcShtcGF0aCwgUFJFUV9RX0ZfU1RBUlQpOworCQl9CisKKwkJaWYgKHNrYl9xdWV1ZV9sZW4oJm1wYXRoLT5mcmFtZV9xdWV1ZSkgPj0KKwkJCQlNRVNIX0ZSQU1FX1FVRVVFX0xFTikgeworCQkJc2tiX3RvX2ZyZWUgPSBtcGF0aC0+ZnJhbWVfcXVldWUubmV4dDsKKwkJCXNrYl91bmxpbmsoc2tiX3RvX2ZyZWUsICZtcGF0aC0+ZnJhbWVfcXVldWUpOworCQl9CisKKwkJc2tiX3F1ZXVlX3RhaWwoJm1wYXRoLT5mcmFtZV9xdWV1ZSwgc2tiKTsKKwkJaWYgKHNrYl90b19mcmVlKQorCQkJbWVzaF9wYXRoX2Rpc2NhcmRfZnJhbWUoc2tiX3RvX2ZyZWUsIGRldik7CisJCWVyciA9IC1FTk9FTlQ7CisJfQorCitlbmRsb29rdXA6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBtZXNoX3BhdGhfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOworCisJcmN1X3JlYWRfbG9jaygpOworCW1wYXRoID0gKHN0cnVjdCBtZXNoX3BhdGggKikgZGF0YTsKKwltcGF0aCA9IHJjdV9kZXJlZmVyZW5jZShtcGF0aCk7CisJaWYgKCFtcGF0aCkKKwkJZ290byBlbmRtcGF0aHRpbWVyOworCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYobXBhdGgtPmRldik7CisJaWYgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9SRVNPTFZFRCB8fAorCQkJKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykpKQorCQltcGF0aC0+ZmxhZ3MgJj0gfihNRVNIX1BBVEhfUkVTT0xWSU5HIHwgTUVTSF9QQVRIX1JFU09MVkVEKTsKKwllbHNlIGlmIChtcGF0aC0+ZGlzY292ZXJ5X3JldHJpZXMgPCBtYXhfcHJlcV9yZXRyaWVzKHNkYXRhKSkgeworCQkrK21wYXRoLT5kaXNjb3ZlcnlfcmV0cmllczsKKwkJbXBhdGgtPmRpc2NvdmVyeV90aW1lb3V0ICo9IDI7CisJCW1lc2hfcXVldWVfcHJlcShtcGF0aCwgMCk7CisJfSBlbHNlIHsKKwkJbXBhdGgtPmZsYWdzID0gMDsKKwkJbXBhdGgtPmV4cF90aW1lID0gamlmZmllczsKKwkJbWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcobXBhdGgpOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CitlbmRtcGF0aHRpbWVyOgorCXJjdV9yZWFkX3VubG9jaygpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDVkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggb3BlbjgwMjExcyBMdGQuCisgKiBBdXRob3I6ICAgICBMdWlzIENhcmxvcyBDb2JvIDxsdWlzY2FAY296eWJpdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgIm1lc2guaCIKKworLyogVGhlcmUgd2lsbCBiZSBpbml0aWFsbHkgMl5JTklUX1BBVEhTX1NJWkVfT1JERVIgYnVja2V0cyAqLworI2RlZmluZSBJTklUX1BBVEhTX1NJWkVfT1JERVIJMgorCisvKiBLZWVwIHRoZSBtZWFuIGNoYWluIGxlbmd0aCBiZWxvdyB0aGlzIGNvbnN0YW50ICovCisjZGVmaW5lIE1FQU5fQ0hBSU5fTEVOCQkyCisKKyNkZWZpbmUgTVBBVEhfRVhQSVJFRChtcGF0aCkgKChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKSAmJiBcCisJCQkJdGltZV9hZnRlcihqaWZmaWVzLCBtcGF0aC0+ZXhwX3RpbWUpICYmIFwKKwkJCQkhKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9GSVhFRCkpCisKK3N0cnVjdCBtcGF0aF9ub2RlIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJLyogVGhpcyBpbmRpcmVjdGlvbiBhbGxvd3MgdHdvIGRpZmZlcmVudCB0YWJsZXMgdG8gcG9pbnQgdG8gdGhlIHNhbWUKKwkgKiBtZXNoX3BhdGggc3RydWN0dXJlLCB1c2VmdWwgd2hlbiByZXNpemluZworCSAqLworCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOworfTsKKworc3RhdGljIHN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3BhdGhzOworCisvKiBUaGlzIGxvY2sgd2lsbCBoYXZlIHRoZSBncm93IHRhYmxlIGZ1bmN0aW9uIGFzIHdyaXRlciBhbmQgYWRkIC8gZGVsZXRlIG5vZGVzCisgKiBhcyByZWFkZXJzLiBXaGVuIHJlYWRpbmcgdGhlIHRhYmxlIChpLmUuIGRvaW5nIGxvb2t1cHMpIHdlIGFyZSB3ZWxsIHByb3RlY3RlZAorICogYnkgUkNVCisgKi8KK3N0YXRpYyBERUZJTkVfUldMT0NLKHBhdGh0YmxfcmVzaXplX2xvY2spOworCisvKioKKyAqCisgKiBtZXNoX3BhdGhfYXNzaWduX25leHRob3AgLSB1cGRhdGUgbWVzaCBwYXRoIG5leHQgaG9wCisgKgorICogQG1wYXRoOiBtZXNoIHBhdGggdG8gdXBkYXRlCisgKiBAc3RhOiBuZXh0IGhvcCB0byBhc3NpZ24KKyAqCisgKiBMb2NraW5nOiBtcGF0aC0+c3RhdGVfbG9jayBtdXN0IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAqLwordm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihtcGF0aC0+bmV4dF9ob3AsIHN0YSk7Cit9CisKKworLyoqCisgKiBtZXNoX3BhdGhfbG9va3VwIC0gbG9vayB1cCBhIHBhdGggaW4gdGhlIG1lc2ggcGF0aCB0YWJsZQorICogQGRzdDogaGFyZHdhcmUgYWRkcmVzcyAoRVRIX0FMRU4gbGVuZ3RoKSBvZiBkZXN0aW5hdGlvbgorICogQGRldjogbG9jYWwgaW50ZXJmYWNlCisgKgorICogUmV0dXJuczogcG9pbnRlciB0byB0aGUgbWVzaCBwYXRoIHN0cnVjdHVyZSwgb3IgTlVMTCBpZiBub3QgZm91bmQKKyAqCisgKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoaW4gYSByZWFkIHJjdSBzZWN0aW9uLgorICovCitzdHJ1Y3QgbWVzaF9wYXRoICptZXNoX3BhdGhfbG9va3VwKHU4ICpkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKwlzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsOworCXN0cnVjdCBtcGF0aF9ub2RlICpub2RlOworCisJdGJsID0gcmN1X2RlcmVmZXJlbmNlKG1lc2hfcGF0aHMpOworCisJYnVja2V0ID0gJnRibC0+aGFzaF9idWNrZXRzW21lc2hfdGFibGVfaGFzaChkc3QsIGRldiwgdGJsKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsIG4sIGJ1Y2tldCwgbGlzdCkgeworCQltcGF0aCA9IG5vZGUtPm1wYXRoOworCQlpZiAobXBhdGgtPmRldiA9PSBkZXYgJiYKKwkJCQltZW1jbXAoZHN0LCBtcGF0aC0+ZHN0LCBFVEhfQUxFTikgPT0gMCkgeworCQkJaWYgKE1QQVRIX0VYUElSRUQobXBhdGgpKSB7CisJCQkJc3Bpbl9sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCQkJaWYgKE1QQVRIX0VYUElSRUQobXBhdGgpKQorCQkJCQltcGF0aC0+ZmxhZ3MgJj0gfk1FU0hfUEFUSF9BQ1RJVkU7CisJCQkJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwkJCX0KKwkJCXJldHVybiBtcGF0aDsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBtZXNoX3BhdGhfbG9va3VwX2J5X2lkeCAtIGxvb2sgdXAgYSBwYXRoIGluIHRoZSBtZXNoIHBhdGggdGFibGUgYnkgaXRzIGluZGV4CisgKiBAaWR4OiBpbmRleAorICogQGRldjogbG9jYWwgaW50ZXJmYWNlLCBvciBOVUxMIGZvciBhbGwgZW50cmllcworICoKKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gdGhlIG1lc2ggcGF0aCBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICoKKyAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGhpbiBhIHJlYWQgcmN1IHNlY3Rpb24uCisgKi8KK3N0cnVjdCBtZXNoX3BhdGggKm1lc2hfcGF0aF9sb29rdXBfYnlfaWR4KGludCBpZHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1wYXRoX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X25vZGUgKnA7CisJaW50IGk7CisJaW50IGogPSAwOworCisJZm9yX2VhY2hfbWVzaF9lbnRyeShtZXNoX3BhdGhzLCBwLCBub2RlLCBpKSB7CisJCWlmIChkZXYgJiYgbm9kZS0+bXBhdGgtPmRldiAhPSBkZXYpCisJCQljb250aW51ZTsKKwkJaWYgKGorKyA9PSBpZHgpIHsKKwkJCWlmIChNUEFUSF9FWFBJUkVEKG5vZGUtPm1wYXRoKSkgeworCQkJCXNwaW5fbG9ja19iaCgmbm9kZS0+bXBhdGgtPnN0YXRlX2xvY2spOworCQkJCWlmIChNUEFUSF9FWFBJUkVEKG5vZGUtPm1wYXRoKSkKKwkJCQkJbm9kZS0+bXBhdGgtPmZsYWdzICY9IH5NRVNIX1BBVEhfQUNUSVZFOworCQkJCXNwaW5fdW5sb2NrX2JoKCZub2RlLT5tcGF0aC0+c3RhdGVfbG9jayk7CisJCQl9CisJCQlyZXR1cm4gbm9kZS0+bXBhdGg7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBtZXNoX3BhdGhfYWRkIC0gYWxsb2NhdGUgYW5kIGFkZCBhIG5ldyBwYXRoIHRvIHRoZSBtZXNoIHBhdGggdGFibGUKKyAqIEBhZGRyOiBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBwYXRoIChFVEhfQUxFTiBsZW5ndGgpCisgKiBAZGV2OiBsb2NhbCBpbnRlcmZhY2UKKyAqCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2VzcworICoKKyAqIFN0YXRlOiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgbmV3IHBhdGggaXMgc2V0IHRvIDAKKyAqLworaW50IG1lc2hfcGF0aF9hZGQodTggKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsICpuZXdfbXBhdGg7CisJc3RydWN0IG1wYXRoX25vZGUgKm5vZGUsICpuZXdfbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCWludCBncm93ID0gMDsKKwlpbnQgZXJyID0gMDsKKwl1MzIgaGFzaF9pZHg7CisKKwlpZiAobWVtY21wKGRzdCwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJCS8qIG5ldmVyIGFkZCBvdXJzZWx2ZXMgYXMgbmVpZ2hib3VycyAqLworCQlyZXR1cm4gLUVOT1RTVVBQOworCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRzdCkpCisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlpZiAoYXRvbWljX2FkZF91bmxlc3MoJnNkYXRhLT51LnN0YS5tcGF0aHMsIDEsIE1FU0hfTUFYX01QQVRIUykgPT0gMCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlyZWFkX2xvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCisJbmV3X21wYXRoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1lc2hfcGF0aCksIEdGUF9LRVJORUwpOworCWlmICghbmV3X21wYXRoKSB7CisJCWF0b21pY19kZWMoJnNkYXRhLT51LnN0YS5tcGF0aHMpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVuZGFkZDI7CisJfQorCW1lbWNweShuZXdfbXBhdGgtPmRzdCwgZHN0LCBFVEhfQUxFTik7CisJbmV3X21wYXRoLT5kZXYgPSBkZXY7CisJbmV3X21wYXRoLT5mbGFncyA9IDA7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbmV3X21wYXRoLT5mcmFtZV9xdWV1ZSk7CisJbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXBhdGhfbm9kZSksIEdGUF9LRVJORUwpOworCW5ld19ub2RlLT5tcGF0aCA9IG5ld19tcGF0aDsKKwluZXdfbXBhdGgtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgbmV3X21wYXRoOworCW5ld19tcGF0aC0+dGltZXIuZnVuY3Rpb24gPSBtZXNoX3BhdGhfdGltZXI7CisJbmV3X21wYXRoLT5leHBfdGltZSA9IGppZmZpZXM7CisJc3Bpbl9sb2NrX2luaXQoJm5ld19tcGF0aC0+c3RhdGVfbG9jayk7CisJaW5pdF90aW1lcigmbmV3X21wYXRoLT50aW1lcik7CisKKwloYXNoX2lkeCA9IG1lc2hfdGFibGVfaGFzaChkc3QsIGRldiwgbWVzaF9wYXRocyk7CisJYnVja2V0ID0gJm1lc2hfcGF0aHMtPmhhc2hfYnVja2V0c1toYXNoX2lkeF07CisKKwlzcGluX2xvY2soJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgbiwgYnVja2V0LCBsaXN0KSB7CisJCW1wYXRoID0gbm9kZS0+bXBhdGg7CisJCWlmIChtcGF0aC0+ZGV2ID09IGRldiAmJiBtZW1jbXAoZHN0LCBtcGF0aC0+ZHN0LCBFVEhfQUxFTikKKwkJCQk9PSAwKSB7CisJCQllcnIgPSAtRUVYSVNUOworCQkJYXRvbWljX2RlYygmc2RhdGEtPnUuc3RhLm1wYXRocyk7CisJCQlrZnJlZShuZXdfbm9kZSk7CisJCQlrZnJlZShuZXdfbXBhdGgpOworCQkJZ290byBlbmRhZGQ7CisJCX0KKwl9CisKKwlobGlzdF9hZGRfaGVhZF9yY3UoJm5ld19ub2RlLT5saXN0LCBidWNrZXQpOworCWlmIChhdG9taWNfaW5jX3JldHVybigmbWVzaF9wYXRocy0+ZW50cmllcykgPj0KKwkJbWVzaF9wYXRocy0+bWVhbl9jaGFpbl9sZW4gKiAobWVzaF9wYXRocy0+aGFzaF9tYXNrICsgMSkpCisJCWdyb3cgPSAxOworCitlbmRhZGQ6CisJc3Bpbl91bmxvY2soJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworZW5kYWRkMjoKKwlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJaWYgKCFlcnIgJiYgZ3JvdykgeworCQlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOworCisJCXdyaXRlX2xvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCQlvbGR0YmwgPSBtZXNoX3BhdGhzOworCQluZXd0YmwgPSBtZXNoX3RhYmxlX2dyb3cobWVzaF9wYXRocyk7CisJCWlmICghbmV3dGJsKSB7CisJCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG1lc2hfcGF0aHMsIG5ld3RibCk7CisJCXN5bmNocm9uaXplX3JjdSgpOworCQltZXNoX3RhYmxlX2ZyZWUob2xkdGJsLCBmYWxzZSk7CisJCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJfQorCXJldHVybiBlcnI7Cit9CisKKworLyoqCisgKiBtZXNoX3BsaW5rX2Jyb2tlbiAtIGRlYWN0aXZhdGVzIHBhdGhzIGFuZCBzZW5kcyBwZXJyIHdoZW4gYSBsaW5rIGJyZWFrcworICoKKyAqIEBzdGE6IGJyb2tlbiBwZWVyIGxpbmsKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gaWYgZW5vdWdoCisgKiBkZWxpdmVyeSBlcnJvcnMgc3VnZ2VzdCB0aGF0IGEgcGVlciBsaW5rIGlzIG5vIGxvbmdlciB1c2FibGUuCisgKi8KK3ZvaWQgbWVzaF9wbGlua19icm9rZW4oc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJc3RydWN0IG1wYXRoX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X25vZGUgKnA7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN0YS0+c2RhdGEtPmRldjsKKwlpbnQgaTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9tZXNoX2VudHJ5KG1lc2hfcGF0aHMsIHAsIG5vZGUsIGkpIHsKKwkJbXBhdGggPSBub2RlLT5tcGF0aDsKKwkJc3Bpbl9sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCWlmIChtcGF0aC0+bmV4dF9ob3AgPT0gc3RhICYmCisJCSAgICBtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFICYmCisJCSAgICAhKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9GSVhFRCkpIHsKKwkJCW1wYXRoLT5mbGFncyAmPSB+TUVTSF9QQVRIX0FDVElWRTsKKwkJCSsrbXBhdGgtPmRzbjsKKwkJCXNwaW5fdW5sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7CisJCQltZXNoX3BhdGhfZXJyb3JfdHgobXBhdGgtPmRzdCwKKwkJCQkJY3B1X3RvX2xlMzIobXBhdGgtPmRzbiksCisJCQkJCWRldi0+YnJvYWRjYXN0LCBkZXYpOworCQl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CitFWFBPUlRfU1lNQk9MKG1lc2hfcGxpbmtfYnJva2VuKTsKKworLyoqCisgKiBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcCAtIERlbGV0ZXMgbWVzaCBwYXRocyBpZiB0aGVpciBuZXh0IGhvcCBtYXRjaGVzCisgKgorICogQHN0YSAtIG1lc2ggcGVlciB0byBtYXRjaAorICoKKyAqIFJDVSBub3RlczogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIG1lc2ggcGxpbmsgdHJhbnNpdGlvbnMgZnJvbQorICogUExJTktfRVNUQUIgdG8gYW55IG90aGVyIHN0YXRlLCBzaW5jZSBQTElOS19FU1RBQiBzdGF0ZSBpcyB0aGUgb25seSBvbmUgdGhhdAorICogYWxsb3dzIHBhdGggY3JlYXRpb24uIFRoaXMgd2lsbCBoYXBwZW4gYmVmb3JlIHRoZSBzdGEgY2FuIGJlIGZyZWVkIChiZWNhdXNlCisgKiBzdGFfaW5mb19kZXN0cm95KCkgY2FsbHMgdGhpcykgc28gYW55IHJlYWRlciBpbiBhIHJjdSByZWFkIGJsb2NrIHdpbGwgYmUKKyAqIHByb3RlY3RlZCBhZ2FpbnN0IHRoZSBwbGluayBkaXNhcHBlYXJpbmcuCisgKi8KK3ZvaWQgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3Aoc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJc3RydWN0IG1wYXRoX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X25vZGUgKnA7CisJaW50IGk7CisKKwlmb3JfZWFjaF9tZXNoX2VudHJ5KG1lc2hfcGF0aHMsIHAsIG5vZGUsIGkpIHsKKwkJbXBhdGggPSBub2RlLT5tcGF0aDsKKwkJaWYgKG1wYXRoLT5uZXh0X2hvcCA9PSBzdGEpCisJCQltZXNoX3BhdGhfZGVsKG1wYXRoLT5kc3QsIG1wYXRoLT5kZXYpOworCX0KK30KKwordm9pZCBtZXNoX3BhdGhfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwlzdHJ1Y3QgbXBhdGhfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKKwlpbnQgaTsKKworCWZvcl9lYWNoX21lc2hfZW50cnkobWVzaF9wYXRocywgcCwgbm9kZSwgaSkgeworCQltcGF0aCA9IG5vZGUtPm1wYXRoOworCQlpZiAobXBhdGgtPmRldiA9PSBkZXYpCisJCQltZXNoX3BhdGhfZGVsKG1wYXRoLT5kc3QsIG1wYXRoLT5kZXYpOworCX0KK30KKworc3RhdGljIHZvaWQgbWVzaF9wYXRoX25vZGVfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKnJwKQoreworCXN0cnVjdCBtcGF0aF9ub2RlICpub2RlID0gY29udGFpbmVyX29mKHJwLCBzdHJ1Y3QgbXBhdGhfbm9kZSwgcmN1KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCUlFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKG5vZGUtPm1wYXRoLT5kZXYpOworCisJZGVsX3RpbWVyX3N5bmMoJm5vZGUtPm1wYXRoLT50aW1lcik7CisJYXRvbWljX2RlYygmc2RhdGEtPnUuc3RhLm1wYXRocyk7CisJa2ZyZWUobm9kZS0+bXBhdGgpOworCWtmcmVlKG5vZGUpOworfQorCisvKioKKyAqIG1lc2hfcGF0aF9kZWwgLSBkZWxldGUgYSBtZXNoIHBhdGggZnJvbSB0aGUgdGFibGUKKyAqCisgKiBAYWRkcjogZHN0IGFkZHJlc3MgKEVUSF9BTEVOIGxlbmd0aCkKKyAqIEBkZXY6IGxvY2FsIGludGVyZmFjZQorICoKKyAqIFJldHVybnM6IDAgaWYgc3VjY2VzZnVsCisgKi8KK2ludCBtZXNoX3BhdGhfZGVsKHU4ICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOworCXN0cnVjdCBtcGF0aF9ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJaW50IGhhc2hfaWR4OworCWludCBlcnIgPSAwOworCisJcmVhZF9sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwloYXNoX2lkeCA9IG1lc2hfdGFibGVfaGFzaChhZGRyLCBkZXYsIG1lc2hfcGF0aHMpOworCWJ1Y2tldCA9ICZtZXNoX3BhdGhzLT5oYXNoX2J1Y2tldHNbaGFzaF9pZHhdOworCisJc3Bpbl9sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBuLCBidWNrZXQsIGxpc3QpIHsKKwkJbXBhdGggPSBub2RlLT5tcGF0aDsKKwkJaWYgKG1wYXRoLT5kZXYgPT0gZGV2ICYmCisJCQkJbWVtY21wKGFkZHIsIG1wYXRoLT5kc3QsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQlzcGluX2xvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwkJCW1wYXRoLT5mbGFncyB8PSBNRVNIX1BBVEhfUkVTT0xWSU5HOworCQkJaGxpc3RfZGVsX3JjdSgmbm9kZS0+bGlzdCk7CisJCQljYWxsX3JjdSgmbm9kZS0+cmN1LCBtZXNoX3BhdGhfbm9kZV9yZWNsYWltKTsKKwkJCWF0b21pY19kZWMoJm1lc2hfcGF0aHMtPmVudHJpZXMpOworCQkJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwkJCWdvdG8gZW5kZGVsOworCQl9CisJfQorCisJZXJyID0gLUVOWElPOworZW5kZGVsOgorCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKKwlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBtZXNoX3BhdGhfdHhfcGVuZGluZyAtIHNlbmRzIHBlbmRpbmcgZnJhbWVzIGluIGEgbWVzaCBwYXRoIHF1ZXVlCisgKgorICogQG1wYXRoOiBtZXNoIHBhdGggdG8gYWN0aXZhdGUKKyAqCisgKiBMb2NraW5nOiB0aGUgc3RhdGVfbG9jayBvZiB0aGUgbXBhdGggc3RydWN0dXJlIG11c3QgTk9UIGJlIGhlbGQgd2hlbiBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZtcGF0aC0+ZnJhbWVfcXVldWUpKSAmJgorCQkJKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9BQ1RJVkUpKQorCQlkZXZfcXVldWVfeG1pdChza2IpOworfQorCisvKioKKyAqIG1lc2hfcGF0aF9kaXNjYXJkX2ZyYW1lIC0gZGlzY2FyZCBhIGZyYW1lIHdob3NlIHBhdGggY291bGQgbm90IGJlIHJlc29sdmVkCisgKgorICogQHNrYjogZnJhbWUgdG8gZGlzY2FyZAorICogQGRldjogbmV0d29yayBkZXZpY2UgdGhlIGZyYW1lIHdhcyB0byBiZSBzZW50IHRocm91Z2gKKyAqCisgKiBJZiB0aGUgZnJhbWUgd2FzIGJlaWduIGZvcndhcmRlZCBmcm9tIGFub3RoZXIgTVAsIGEgUEVSUiBmcmFtZSB3aWxsIGJlIHNlbnQKKyAqIHRvIHRoZSBwcmVjdXJzb3IuCisgKgorICogTG9ja2luZzogdGhlIGZ1bmN0aW9uIG11c3QgbWUgY2FsbGVkIHdpdGhpbiBhIHJjdV9yZWFkX2xvY2sgcmVnaW9uCisgKi8KK3ZvaWQgbWVzaF9wYXRoX2Rpc2NhcmRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJdTMyIGRzbiA9IDA7CisKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSB7CisJCXN0cnVjdCBpZWVlODAyMTFzX2hkciAqcHJldl9tZXNoaGRyOworCQlpbnQgbXNoaGRybGVuOworCQl1OCAqcmEsICpkYTsKKworCQlwcmV2X21lc2hoZHIgPSAoKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqKXNrYi0+Y2IpOworCQltc2hoZHJsZW4gPSBpZWVlODAyMTFfZ2V0X21lc2hfaGRybGVuKHByZXZfbWVzaGhkcik7CisJCWRhID0gc2tiLT5kYXRhOworCQlyYSA9IE1FU0hfUFJFUShza2IpOworCQltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZGEsIGRldik7CisJCWlmIChtcGF0aCkKKwkJCWRzbiA9ICsrbXBhdGgtPmRzbjsKKwkJbWVzaF9wYXRoX2Vycm9yX3R4KHNrYi0+ZGF0YSwgY3B1X3RvX2xlMzIoZHNuKSwgcmEsIGRldik7CisJfQorCisJa2ZyZWVfc2tiKHNrYik7CisJc2RhdGEtPnUuc3RhLm1zaHN0YXRzLmRyb3BwZWRfZnJhbWVzX25vX3JvdXRlKys7Cit9CisKKy8qKgorICogbWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcgLSBmcmVlIHRoZSBwZW5kaW5nIHF1ZXVlIG9mIGEgbWVzaCBwYXRoCisgKgorICogQG1wYXRoOiBtZXNoIHBhdGggd2hvc2UgcXVldWUgaGFzIHRvIGJlIGZyZWVkCisgKgorICogTG9ja2luZzogdGhlIGZ1bmN0aW9uIG11c3QgbWUgY2FsbGVkIHdpdGhpbmcgYSByY3VfcmVhZF9sb2NrIHJlZ2lvbgorICovCit2b2lkIG1lc2hfcGF0aF9mbHVzaF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKG1wYXRoLT5kZXYpOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbXBhdGgtPmZyYW1lX3F1ZXVlKSkgJiYKKwkJCShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKSkKKwkJbWVzaF9wYXRoX2Rpc2NhcmRfZnJhbWUoc2tiLCBtcGF0aC0+ZGV2KTsKK30KKworLyoqCisgKiBtZXNoX3BhdGhfZml4X25leHRob3AgLSBmb3JjZSBhIHNwZWNpZmljIG5leHQgaG9wIGZvciBhIG1lc2ggcGF0aAorICoKKyAqIEBtcGF0aDogdGhlIG1lc2ggcGF0aCB0byBtb2RpZnkKKyAqIEBuZXh0X2hvcDogdGhlIG5leHQgaG9wIHRvIGZvcmNlCisgKgorICogTG9ja2luZzogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBob2xkaW5nIG1wYXRoLT5zdGF0ZV9sb2NrCisgKi8KK3ZvaWQgbWVzaF9wYXRoX2ZpeF9uZXh0aG9wKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCBzdHJ1Y3Qgc3RhX2luZm8gKm5leHRfaG9wKQoreworCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCW1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChtcGF0aCwgbmV4dF9ob3ApOworCW1wYXRoLT5kc24gPSAweGZmZmY7CisJbXBhdGgtPm1ldHJpYyA9IDA7CisJbXBhdGgtPmhvcF9jb3VudCA9IDA7CisJbXBhdGgtPmV4cF90aW1lID0gMDsKKwltcGF0aC0+ZmxhZ3MgfD0gTUVTSF9QQVRIX0ZJWEVEOworCW1lc2hfcGF0aF9hY3RpdmF0ZShtcGF0aCk7CisJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKKwltZXNoX3BhdGhfdHhfcGVuZGluZyhtcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIG1lc2hfcGF0aF9ub2RlX2ZyZWUoc3RydWN0IGhsaXN0X25vZGUgKnAsIGJvb2wgZnJlZV9sZWFmcykKK3sKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwlzdHJ1Y3QgbXBhdGhfbm9kZSAqbm9kZSA9IGhsaXN0X2VudHJ5KHAsIHN0cnVjdCBtcGF0aF9ub2RlLCBsaXN0KTsKKwltcGF0aCA9IG5vZGUtPm1wYXRoOworCWhsaXN0X2RlbF9yY3UocCk7CisJc3luY2hyb25pemVfcmN1KCk7CisJaWYgKGZyZWVfbGVhZnMpCisJCWtmcmVlKG1wYXRoKTsKKwlrZnJlZShub2RlKTsKK30KKworc3RhdGljIHZvaWQgbWVzaF9wYXRoX25vZGVfY29weShzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgc3RydWN0IG1lc2hfdGFibGUgKm5ld3RibCkKK3sKKwlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKKwlzdHJ1Y3QgbXBhdGhfbm9kZSAqbm9kZSwgKm5ld19ub2RlOworCXUzMiBoYXNoX2lkeDsKKworCW5vZGUgPSBobGlzdF9lbnRyeShwLCBzdHJ1Y3QgbXBhdGhfbm9kZSwgbGlzdCk7CisJbXBhdGggPSBub2RlLT5tcGF0aDsKKwluZXdfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtcGF0aF9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJbmV3X25vZGUtPm1wYXRoID0gbXBhdGg7CisJaGFzaF9pZHggPSBtZXNoX3RhYmxlX2hhc2gobXBhdGgtPmRzdCwgbXBhdGgtPmRldiwgbmV3dGJsKTsKKwlobGlzdF9hZGRfaGVhZCgmbmV3X25vZGUtPmxpc3QsCisJCQkmbmV3dGJsLT5oYXNoX2J1Y2tldHNbaGFzaF9pZHhdKTsKK30KKworaW50IG1lc2hfcGF0aHRibF9pbml0KHZvaWQpCit7CisJbWVzaF9wYXRocyA9IG1lc2hfdGFibGVfYWxsb2MoSU5JVF9QQVRIU19TSVpFX09SREVSKTsKKwltZXNoX3BhdGhzLT5mcmVlX25vZGUgPSAmbWVzaF9wYXRoX25vZGVfZnJlZTsKKwltZXNoX3BhdGhzLT5jb3B5X25vZGUgPSAmbWVzaF9wYXRoX25vZGVfY29weTsKKwltZXNoX3BhdGhzLT5tZWFuX2NoYWluX2xlbiA9IE1FQU5fQ0hBSU5fTEVOOworCWlmICghbWVzaF9wYXRocykKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWVzaF9wYXRoX2V4cGlyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOworCXN0cnVjdCBtcGF0aF9ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9ub2RlICpwOworCWludCBpOworCisJcmVhZF9sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwlmb3JfZWFjaF9tZXNoX2VudHJ5KG1lc2hfcGF0aHMsIHAsIG5vZGUsIGkpIHsKKwkJaWYgKG5vZGUtPm1wYXRoLT5kZXYgIT0gZGV2KQorCQkJY29udGludWU7CisJCW1wYXRoID0gbm9kZS0+bXBhdGg7CisJCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCQlpZiAoKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykpICYmCisJCSAgICAoIShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfRklYRUQpKSAmJgorCQkJdGltZV9hZnRlcihqaWZmaWVzLAorCQkJIG1wYXRoLT5leHBfdGltZSArIE1FU0hfUEFUSF9FWFBJUkUpKSB7CisJCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCQkJbWVzaF9wYXRoX2RlbChtcGF0aC0+ZHN0LCBtcGF0aC0+ZGV2KTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOworCX0KKwlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7Cit9CisKK3ZvaWQgbWVzaF9wYXRodGJsX3VucmVnaXN0ZXIodm9pZCkKK3sKKwltZXNoX3RhYmxlX2ZyZWUobWVzaF9wYXRocywgdHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2YwYzJiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwpAQCAtMCwwICsxLDc2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBvcGVuODAyMTFzIEx0ZC4KKyAqIEF1dGhvcjogICAgIEx1aXMgQ2FybG9zIENvYm8gPGx1aXNjYUBjb3p5Yml0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJyYXRlLmgiCisjaW5jbHVkZSAibWVzaC5oIgorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfTVBMX0RFQlVHCisjZGVmaW5lIG1wbF9kYmcoZm10LCBhcmdzLi4uKQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIG1wbF9kYmcoZm10LCBhcmdzLi4uKQlkbyB7ICh2b2lkKSgwKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIFBMSU5LX0dFVF9GUkFNRV9TVUJUWVBFKHApIChwKQorI2RlZmluZSBQTElOS19HRVRfTExJRChwKSAocCArIDEpCisjZGVmaW5lIFBMSU5LX0dFVF9QTElEKHApIChwICsgMykKKworI2RlZmluZSBtb2RfcGxpbmtfdGltZXIocywgdCkgKG1vZF90aW1lcigmcy0+cGxpbmtfdGltZXIsIFwKKwkJCQlqaWZmaWVzICsgSFogKiB0IC8gMTAwMCkpCisKKy8qIFBlZXIgbGluayBjYW5jZWwgcmVhc29ucywgYWxsIHN1YmplY3QgdG8gQU5BIGFwcHJvdmFsICovCisjZGVmaW5lIE1FU0hfTElOS19DQU5DRUxMRUQJCQkyCisjZGVmaW5lIE1FU0hfTUFYX05FSUdIQk9SUwkJCTMKKyNkZWZpbmUgTUVTSF9DQVBBQklMSVRZX1BPTElDWV9WSU9MQVRJT04JNAorI2RlZmluZSBNRVNIX0NMT1NFX1JDVkQJCQkJNQorI2RlZmluZSBNRVNIX01BWF9SRVRSSUVTCQkJNgorI2RlZmluZSBNRVNIX0NPTkZJUk1fVElNRU9VVAkJCTcKKyNkZWZpbmUgTUVTSF9TRUNVUklUWV9ST0xFX05FR09USUFUSU9OX0RJRkZFUlMJOAorI2RlZmluZSBNRVNIX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OX0lNUE9TU0lCTEUJOQorI2RlZmluZSBNRVNIX1NFQ1VSSVRZX0ZBSUxFRF9WRVJJRklDQVRJT04JMTAKKworI2RlZmluZSBkb3QxMU1lc2hNYXhSZXRyaWVzKHMpIChzLT51LnN0YS5tc2hjZmcuZG90MTFNZXNoTWF4UmV0cmllcykKKyNkZWZpbmUgZG90MTFNZXNoUmV0cnlUaW1lb3V0KHMpIChzLT51LnN0YS5tc2hjZmcuZG90MTFNZXNoUmV0cnlUaW1lb3V0KQorI2RlZmluZSBkb3QxMU1lc2hDb25maXJtVGltZW91dChzKSAocy0+dS5zdGEubXNoY2ZnLmRvdDExTWVzaENvbmZpcm1UaW1lb3V0KQorI2RlZmluZSBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzKSAocy0+dS5zdGEubXNoY2ZnLmRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KQorI2RlZmluZSBkb3QxMU1lc2hNYXhQZWVyTGlua3MocykgKHMtPnUuc3RhLm1zaGNmZy5kb3QxMU1lc2hNYXhQZWVyTGlua3MpCisKK2VudW0gcGxpbmtfZnJhbWVfdHlwZSB7CisJUExJTktfT1BFTiA9IDAsCisJUExJTktfQ09ORklSTSwKKwlQTElOS19DTE9TRQorfTsKKworZW51bSBwbGlua19ldmVudCB7CisJUExJTktfVU5ERUZJTkVELAorCU9QTl9BQ1BULAorCU9QTl9SSkNULAorCU9QTl9JR05SLAorCUNORl9BQ1BULAorCUNORl9SSkNULAorCUNORl9JR05SLAorCUNMU19BQ1BULAorCUNMU19JR05SCit9OworCitzdGF0aWMgaW5saW5lCit2b2lkIG1lc2hfcGxpbmtfaW5jX2VzdGFiX2NvdW50KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCWF0b21pY19pbmMoJnNkYXRhLT51LnN0YS5tc2hzdGF0cy5lc3RhYl9wbGlua3MpOworCW1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc2RhdGEpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIG1lc2hfcGxpbmtfZGVjX2VzdGFiX2NvdW50KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCWF0b21pY19kZWMoJnNkYXRhLT51LnN0YS5tc2hzdGF0cy5lc3RhYl9wbGlua3MpOworCW1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc2RhdGEpOworfQorCisvKioKKyAqIG1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQgLSByZXN0YXJ0IGEgbWVzaCBwZWVyIGxpbmsgZmluaXRlIHN0YXRlIG1hY2hpbmUKKyAqCisgKiBAc3RhOiBtZXMgcGVlciBsaW5rIHRvIHJlc3RhcnQKKyAqCisgKiBMb2NraW5nOiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGhvbGRpbmcgc3RhLT5wbGlua19sb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZXNoX3BsaW5rX2ZzbV9yZXN0YXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19MSVNURU47CisJc3RhLT5sbGlkID0gc3RhLT5wbGlkID0gc3RhLT5yZWFzb24gPSAwOworCXN0YS0+cGxpbmtfcmV0cmllcyA9IDA7Cit9CisKKy8qCisgKiBOT1RFOiBUaGlzIGlzIGp1c3QgYW4gYWxpYXMgZm9yIHN0YV9pbmZvX2FsbG9jKCksIHNlZSBub3RlcworICogICAgICAgb24gaXQgaW4gdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHNlY3Rpb24hCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RhX2luZm8gKm1lc2hfcGxpbmtfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSB1OCAqaHdfYWRkciwgdTY0IHJhdGVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJaWYgKGxvY2FsLT5udW1fc3RhID49IE1FU0hfTUFYX1BMSU5LUykKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaHdfYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEpCisJCXJldHVybiBOVUxMOworCisJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9BVVRIT1JJWkVEOworCXN0YS0+c3VwcF9yYXRlc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOworCisJcmV0dXJuIHN0YTsKK30KKworLyoqCisgKiBtZXNoX3BsaW5rX2RlYWN0aXZhdGUgLSBkZWFjdGl2YXRlIG1lc2ggcGVlciBsaW5rCisgKgorICogQHN0YTogbWVzaCBwZWVyIGxpbmsgdG8gZGVhY3RpdmF0ZQorICoKKyAqIEFsbCBtZXNoIHBhdGhzIHdpdGggdGhpcyBwZWVyIGFzIG5leHQgaG9wIHdpbGwgYmUgZmx1c2hlZAorICoKKyAqIExvY2tpbmc6IHRoZSBjYWxsZXIgbXVzdCBob2xkIHN0YS0+cGxpbmtfbG9jaworICovCitzdGF0aWMgdm9pZCBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CisKKwlpZiAoc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19FU1RBQikKKwkJbWVzaF9wbGlua19kZWNfZXN0YWJfY291bnQoc2RhdGEpOworCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19CTE9DS0VEOworCW1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0YSk7Cit9CisKKy8qKgorICogX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUgLSBkZWFjdGl2YXRlIG1lc2ggcGVlciBsaW5rCisgKgorICogQHN0YTogbWVzaCBwZWVyIGxpbmsgdG8gZGVhY3RpdmF0ZQorICoKKyAqIEFsbCBtZXNoIHBhdGhzIHdpdGggdGhpcyBwZWVyIGFzIG5leHQgaG9wIHdpbGwgYmUgZmx1c2hlZAorICovCit2b2lkIG1lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlzcGluX2xvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKK30KKworc3RhdGljIGludCBtZXNoX3BsaW5rX2ZyYW1lX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCWVudW0gcGxpbmtfZnJhbWVfdHlwZSBhY3Rpb24sIHU4ICpkYSwgX19sZTE2IGxsaWQsIF9fbGUxNiBwbGlkLAorCQlfX2xlMTYgcmVhc29uKSB7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDApOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwlib29sIGluY2x1ZGVfcGxpZCA9IGZhbHNlOworCXU4ICpwb3M7CisJaW50IGllX2xlbjsKKworCWlmICghc2tiKQorCQlyZXR1cm4gLTE7CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCS8qIDI1IGlzIHRoZSBzaXplIG9mIHRoZSBjb21tb24gbWdtdCBwYXJ0ICgyNCkgcGx1cyB0aGUgc2l6ZSBvZiB0aGUKKwkgKiBjb21tb24gYWN0aW9uIHBhcnQgKDEpCisJICovCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKKwkJc2tiX3B1dChza2IsIDI1ICsgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uKSk7CisJbWVtc2V0KG1nbXQsIDAsIDI1ICsgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uKSk7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKKwkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCS8qIEJTU0lEIGlzIGxlZnQgemVyb2VkLCB3aWxkY2FyZCB2YWx1ZSAqLworCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gUExJTktfQ0FURUdPUlk7CisJbWdtdC0+dS5hY3Rpb24udS5wbGlua19hY3Rpb24uYWN0aW9uX2NvZGUgPSBhY3Rpb247CisKKwlpZiAoYWN0aW9uID09IFBMSU5LX0NMT1NFKQorCQltZ210LT51LmFjdGlvbi51LnBsaW5rX2FjdGlvbi5hdXggPSByZWFzb247CisJZWxzZSB7CisJCW1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLmF1eCA9IGNwdV90b19sZTE2KDB4MCk7CisJCWlmIChhY3Rpb24gPT0gUExJTktfQ09ORklSTSkgeworCQkJcG9zID0gc2tiX3B1dChza2IsIDQpOworCQkJLyogdHdvLWJ5dGUgc3RhdHVzIGNvZGUgZm9sbG93ZWQgYnkgdHdvLWJ5dGUgQUlEICovCisJCQltZW1zZXQocG9zLCAwLCA0KTsKKwkJfQorCQltZXNoX21nbXRfaWVzX2FkZChza2IsIGRldik7CisJfQorCisJLyogQWRkIFBlZXIgTGluayBNYW5hZ2VtZW50IGVsZW1lbnQgKi8KKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgUExJTktfT1BFTjoKKwkJaWVfbGVuID0gMzsKKwkJYnJlYWs7CisJY2FzZSBQTElOS19DT05GSVJNOgorCQlpZV9sZW4gPSA1OworCQlpbmNsdWRlX3BsaWQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFBMSU5LX0NMT1NFOgorCWRlZmF1bHQ6CisJCWlmICghcGxpZCkKKwkJCWllX2xlbiA9IDU7CisJCWVsc2UgeworCQkJaWVfbGVuID0gNzsKKwkJCWluY2x1ZGVfcGxpZCA9IHRydWU7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZV9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1BFRVJfTElOSzsKKwkqcG9zKysgPSBpZV9sZW47CisJKnBvcysrID0gYWN0aW9uOworCW1lbWNweShwb3MsICZsbGlkLCAyKTsKKwlpZiAoaW5jbHVkZV9wbGlkKSB7CisJCXBvcyArPSAyOworCQltZW1jcHkocG9zLCAmcGxpZCwgMik7CisJfQorCWlmIChhY3Rpb24gPT0gUExJTktfQ0xPU0UpIHsKKwkJcG9zICs9IDI7CisJCW1lbWNweShwb3MsICZyZWFzb24sIDIpOworCX0KKworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOworCXJldHVybiAwOworfQorCit2b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTY0IHJhdGVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgYm9vbCBwZWVyX2FjY2VwdGluZ19wbGlua3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGh3X2FkZHIpOworCWlmICghc3RhKSB7CisJCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIGh3X2FkZHIsIHJhdGVzKTsKKwkJaWYgKCFzdGEpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOworCXN0YS0+c3VwcF9yYXRlc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOworCWlmIChwZWVyX2FjY2VwdGluZ19wbGlua3MgJiYgc3RhLT5wbGlua19zdGF0ZSA9PSBQTElOS19MSVNURU4gJiYKKwkJCXNkYXRhLT51LnN0YS5hY2NlcHRpbmdfcGxpbmtzICYmCisJCQlzZGF0YS0+dS5zdGEubXNoY2ZnLmF1dG9fb3Blbl9wbGlua3MpCisJCW1lc2hfcGxpbmtfb3BlbihzdGEpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIG1lc2hfcGxpbmtfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCV9fbGUxNiBsbGlkLCBwbGlkLCByZWFzb247CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfTVBMX0RFQlVHCisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisjZW5kaWYKKworCS8qCisJICogVGhpcyBTVEEgaXMgdmFsaWQgYmVjYXVzZSBzdGFfaW5mb19kZXN0cm95KCkgd2lsbAorCSAqIGRlbF90aW1lcl9zeW5jKCkgdGhpcyB0aW1lciBhZnRlciBoYXZpbmcgbWFkZSBzdXJlCisJICogaXQgY2Fubm90IGJlIHJlYWRkZWQgKGJ5IGRlbGV0aW5nIHRoZSBwbGluay4pCisJICovCisJc3RhID0gKHN0cnVjdCBzdGFfaW5mbyAqKSBkYXRhOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCWlmIChzdGEtPmlnbm9yZV9wbGlua190aW1lcikgeworCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IGZhbHNlOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJcmV0dXJuOworCX0KKwltcGxfZGJnKCJNZXNoIHBsaW5rIHRpbWVyIGZvciAlcyBmaXJlZCBvbiBzdGF0ZSAlZFxuIiwKKwkJCXByaW50X21hYyhtYWMsIHN0YS0+YWRkciksIHN0YS0+cGxpbmtfc3RhdGUpOworCXJlYXNvbiA9IDA7CisJbGxpZCA9IHN0YS0+bGxpZDsKKwlwbGlkID0gc3RhLT5wbGlkOworCXNkYXRhID0gc3RhLT5zZGF0YTsKKwlkZXYgPSBzZGF0YS0+ZGV2OworCisJc3dpdGNoIChzdGEtPnBsaW5rX3N0YXRlKSB7CisJY2FzZSBQTElOS19PUE5fUkNWRDoKKwljYXNlIFBMSU5LX09QTl9TTlQ6CisJCS8qIHJldHJ5IHRpbWVyICovCisJCWlmIChzdGEtPnBsaW5rX3JldHJpZXMgPCBkb3QxMU1lc2hNYXhSZXRyaWVzKHNkYXRhKSkgeworCQkJdTMyIHJhbmQ7CisJCQltcGxfZGJnKCJNZXNoIHBsaW5rIGZvciAlcyAocmV0cnksIHRpbWVvdXQpOiAlZCAlZFxuIiwKKwkJCQkJcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSwKKwkJCQkJc3RhLT5wbGlua19yZXRyaWVzLCBzdGEtPnBsaW5rX3RpbWVvdXQpOworCQkJZ2V0X3JhbmRvbV9ieXRlcygmcmFuZCwgc2l6ZW9mKHUzMikpOworCQkJc3RhLT5wbGlua190aW1lb3V0ID0gc3RhLT5wbGlua190aW1lb3V0ICsKKwkJCQkJICAgICByYW5kICUgc3RhLT5wbGlua190aW1lb3V0OworCQkJKytzdGEtPnBsaW5rX3JldHJpZXM7CisJCQltb2RfcGxpbmtfdGltZXIoc3RhLCBzdGEtPnBsaW5rX3RpbWVvdXQpOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfT1BFTiwgc3RhLT5hZGRyLCBsbGlkLAorCQkJCQkgICAgMCwgMCk7CisJCQlicmVhazsKKwkJfQorCQlyZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX01BWF9SRVRSSUVTKTsKKwkJLyogZmFsbCB0aHJvdWdoIG9uIGVsc2UgKi8KKwljYXNlIFBMSU5LX0NORl9SQ1ZEOgorCQkvKiBjb25maXJtIHRpbWVyICovCisJCWlmICghcmVhc29uKQorCQkJcmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9DT05GSVJNX1RJTUVPVVQpOworCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKKwkJbW9kX3BsaW5rX3RpbWVyKHN0YSwgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DTE9TRSwgc3RhLT5hZGRyLCBsbGlkLCBwbGlkLAorCQkJCSAgICByZWFzb24pOworCQlicmVhazsKKwljYXNlIFBMSU5LX0hPTERJTkc6CisJCS8qIGhvbGRpbmcgdGltZXIgKi8KKwkJZGVsX3RpbWVyKCZzdGEtPnBsaW5rX3RpbWVyKTsKKwkJbWVzaF9wbGlua19mc21fcmVzdGFydChzdGEpOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG1lc2hfcGxpbmtfdGltZXJfc2V0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGltZW91dCkKK3sKKwlzdGEtPnBsaW5rX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaICogdGltZW91dCAvIDEwMDApOworCXN0YS0+cGxpbmtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzdGE7CisJc3RhLT5wbGlua190aW1lci5mdW5jdGlvbiA9IG1lc2hfcGxpbmtfdGltZXI7CisJc3RhLT5wbGlua190aW1lb3V0ID0gdGltZW91dDsKKwlhZGRfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOworfQorCitpbnQgbWVzaF9wbGlua19vcGVuKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCV9fbGUxNiBsbGlkOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9NUExfREVCVUcKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCWdldF9yYW5kb21fYnl0ZXMoJmxsaWQsIDIpOworCXN0YS0+bGxpZCA9IGxsaWQ7CisJaWYgKHN0YS0+cGxpbmtfc3RhdGUgIT0gUExJTktfTElTVEVOKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfT1BOX1NOVDsKKwltZXNoX3BsaW5rX3RpbWVyX3NldChzdGEsIGRvdDExTWVzaFJldHJ5VGltZW91dChzZGF0YSkpOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCW1wbF9kYmcoIk1lc2ggcGxpbms6IHN0YXJ0aW5nIGVzdGFibGlzaG1lbnQgd2l0aCAlc1xuIiwKKwkJcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CisKKwlyZXR1cm4gbWVzaF9wbGlua19mcmFtZV90eChzZGF0YS0+ZGV2LCBQTElOS19PUEVOLAorCQkJCSAgIHN0YS0+YWRkciwgbGxpZCwgMCwgMCk7Cit9CisKK3ZvaWQgbWVzaF9wbGlua19ibG9jayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9NUExfREVCVUcKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCV9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7CisJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0JMT0NLRUQ7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7Cit9CisKK2ludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKKwlfX2xlMTYgbGxpZCwgcGxpZCwgcmVhc29uOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX01QTF9ERUJVRworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworI2VuZGlmCisKKwltcGxfZGJnKCJNZXNoIHBsaW5rOiBjbG9zaW5nIGxpbmsgd2l0aCAlc1xuIiwKKwkJCXByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOworCXNwaW5fbG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwlzdGEtPnJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfTElOS19DQU5DRUxMRUQpOworCXJlYXNvbiA9IHN0YS0+cmVhc29uOworCisJaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfTElTVEVOIHx8CisJICAgIHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfQkxPQ0tFRCkgeworCQltZXNoX3BsaW5rX2ZzbV9yZXN0YXJ0KHN0YSk7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpIHsKKwkJX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKKwkJLyogVGhlIHRpbWVyIHNob3VsZCBub3QgYmUgcnVubmluZyAqLworCQltb2RfcGxpbmtfdGltZXIoc3RhLCBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpOworCX0gZWxzZSBpZiAoIW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSkpCisJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKKworCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOworCWxsaWQgPSBzdGEtPmxsaWQ7CisJcGxpZCA9IHN0YS0+cGxpZDsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwltZXNoX3BsaW5rX2ZyYW1lX3R4KHN0YS0+c2RhdGEtPmRldiwgUExJTktfQ0xPU0UsIHN0YS0+YWRkciwgbGxpZCwKKwkJCSAgICBwbGlkLCByZWFzb24pOworCXJldHVybiAwOworfQorCit2b2lkIG1lc2hfcnhfcGxpbmtfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJIHNpemVfdCBsZW4sIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWVudW0gcGxpbmtfZXZlbnQgZXZlbnQ7CisJZW51bSBwbGlua19mcmFtZV90eXBlIGZ0eXBlOworCXNpemVfdCBiYXNlbGVuOworCXU4IGllX2xlbjsKKwl1OCAqYmFzZWFkZHI7CisJX19sZTE2IHBsaWQsIGxsaWQsIHJlYXNvbjsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9NUExfREVCVUcKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKyNlbmRpZgorCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKG1nbXQtPmRhKSkgeworCQltcGxfZGJnKCJNZXNoIHBsaW5rOiBpZ25vcmUgZnJhbWUgZnJvbSBtdWx0aWNhc3QgYWRkcmVzcyIpOworCQlyZXR1cm47CisJfQorCisJYmFzZWFkZHIgPSBtZ210LT51LmFjdGlvbi51LnBsaW5rX2FjdGlvbi52YXJpYWJsZTsKKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLmFjdGlvbl9jb2RlID09IFBMSU5LX0NPTkZJUk0pIHsKKwkJYmFzZWFkZHIgKz0gNDsKKwkJYmFzZWxlbiAtPSA0OworCX0KKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKGJhc2VhZGRyLCBsZW4gLSBiYXNlbGVuLCAmZWxlbXMpOworCWlmICghZWxlbXMucGVlcl9saW5rKSB7CisJCW1wbF9kYmcoIk1lc2ggcGxpbms6IG1pc3NpbmcgbmVjZXNzYXJ5IHBlZXIgbGluayBpZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmdHlwZSA9ICooKHU4ICopUExJTktfR0VUX0ZSQU1FX1NVQlRZUEUoZWxlbXMucGVlcl9saW5rKSk7CisJaWVfbGVuID0gZWxlbXMucGVlcl9saW5rX2xlbjsKKwlpZiAoKGZ0eXBlID09IFBMSU5LX09QRU4gJiYgaWVfbGVuICE9IDMpIHx8CisJICAgIChmdHlwZSA9PSBQTElOS19DT05GSVJNICYmIGllX2xlbiAhPSA1KSB8fAorCSAgICAoZnR5cGUgPT0gUExJTktfQ0xPU0UgJiYgaWVfbGVuICE9IDUgJiYgaWVfbGVuICE9IDcpKSB7CisJCW1wbF9kYmcoIk1lc2ggcGxpbms6IGluY29ycmVjdCBwbGluayBpZSBsZW5ndGhcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZ0eXBlICE9IFBMSU5LX0NMT1NFICYmICghZWxlbXMubWVzaF9pZCB8fCAhZWxlbXMubWVzaF9jb25maWcpKSB7CisJCW1wbF9kYmcoIk1lc2ggcGxpbms6IG1pc3NpbmcgbmVjZXNzYXJ5IGllXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBOb3RlIHRoZSBsaW5lcyBiZWxvdyBhcmUgY29ycmVjdCwgdGhlIGxsaWQgaW4gdGhlIGZyYW1lIGlzIHRoZSBwbGlkCisJICogZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGlzIGhvc3QuCisJICovCisJbWVtY3B5KCZwbGlkLCBQTElOS19HRVRfTExJRChlbGVtcy5wZWVyX2xpbmspLCAyKTsKKwlpZiAoZnR5cGUgPT0gUExJTktfQ09ORklSTSB8fCAoZnR5cGUgPT0gUExJTktfQ0xPU0UgJiYgaWVfbGVuID09IDcpKQorCQltZW1jcHkoJmxsaWQsIFBMSU5LX0dFVF9QTElEKGVsZW1zLnBlZXJfbGluayksIDIpOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJaWYgKCFzdGEgJiYgZnR5cGUgIT0gUExJTktfT1BFTikgeworCQltcGxfZGJnKCJNZXNoIHBsaW5rOiBjbHMgb3IgY25mIGZyb20gdW5rbm93biBwZWVyXG4iKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3RhICYmIHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfQkxPQ0tFRCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdyB3ZSB3aWxsIGZpZ3VyZSBvdXQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50Li4uICovCisJZXZlbnQgPSBQTElOS19VTkRFRklORUQ7CisJaWYgKGZ0eXBlICE9IFBMSU5LX0NMT1NFICYmICghbWVzaF9tYXRjaGVzX2xvY2FsKCZlbGVtcywgZGV2KSkpIHsKKwkJc3dpdGNoIChmdHlwZSkgeworCQljYXNlIFBMSU5LX09QRU46CisJCQlldmVudCA9IE9QTl9SSkNUOworCQkJYnJlYWs7CisJCWNhc2UgUExJTktfQ09ORklSTToKKwkJCWV2ZW50ID0gQ05GX1JKQ1Q7CisJCQlicmVhazsKKwkJY2FzZSBQTElOS19DTE9TRToKKwkJCS8qIGF2b2lkIHdhcm5pbmcgKi8KKwkJCWJyZWFrOworCQl9CisJCXNwaW5fbG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwl9IGVsc2UgaWYgKCFzdGEpIHsKKwkJLyogZnR5cGUgPT0gUExJTktfT1BFTiAqLworCQl1NjQgcmF0ZXM7CisJCWlmICghbWVzaF9wbGlua19mcmVlX2NvdW50KHNkYXRhKSkgeworCQkJbXBsX2RiZygiTWVzaCBwbGluayBlcnJvcjogbm8gbW9yZSBmcmVlIHBsaW5rc1xuIik7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXJhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsICZlbGVtcywgcnhfc3RhdHVzLT5iYW5kKTsKKwkJc3RhID0gbWVzaF9wbGlua19hbGxvYyhzZGF0YSwgbWdtdC0+c2EsIHJhdGVzKTsKKwkJaWYgKCFzdGEpIHsKKwkJCW1wbF9kYmcoIk1lc2ggcGxpbmsgZXJyb3I6IHBsaW5rIHRhYmxlIGZ1bGxcbiIpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YV9pbmZvX2luc2VydChzdGEpKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybjsKKwkJfQorCQlldmVudCA9IE9QTl9BQ1BUOworCQlzcGluX2xvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQlzd2l0Y2ggKGZ0eXBlKSB7CisJCWNhc2UgUExJTktfT1BFTjoKKwkJCWlmICghbWVzaF9wbGlua19mcmVlX2NvdW50KHNkYXRhKSB8fAorCQkJICAgIChzdGEtPnBsaWQgJiYgc3RhLT5wbGlkICE9IHBsaWQpKQorCQkJCWV2ZW50ID0gT1BOX0lHTlI7CisJCQllbHNlCisJCQkJZXZlbnQgPSBPUE5fQUNQVDsKKwkJCWJyZWFrOworCQljYXNlIFBMSU5LX0NPTkZJUk06CisJCQlpZiAoIW1lc2hfcGxpbmtfZnJlZV9jb3VudChzZGF0YSkgfHwKKwkJCSAgICAoc3RhLT5sbGlkICE9IGxsaWQgfHwgc3RhLT5wbGlkICE9IHBsaWQpKQorCQkJCWV2ZW50ID0gQ05GX0lHTlI7CisJCQllbHNlCisJCQkJZXZlbnQgPSBDTkZfQUNQVDsKKwkJCWJyZWFrOworCQljYXNlIFBMSU5LX0NMT1NFOgorCQkJaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpCisJCQkJLyogRG8gbm90IGNoZWNrIGZvciBsbGlkIG9yIHBsaWQuIFRoaXMgZG9lcyBub3QKKwkJCQkgKiBmb2xsb3cgdGhlIHN0YW5kYXJkIGJ1dCBzaW5jZSBtdWx0aXBsZSBwbGlua3MKKwkJCQkgKiBwZXIgc3RhIGFyZSBub3Qgc3VwcG9ydGVkLCBpdCBpcyBuZWNlc3NhcnkgaW4KKwkJCQkgKiBvcmRlciB0byBhdm9pZCBhIGxpdmVsb2NrIHdoZW4gTVAgQSBzZWVzIGFuCisJCQkJICogZXN0YWJsaXNoIHBlZXIgbGluayB0byBNUCBCIGJ1dCBNUCBCIGRvZXMgbm90CisJCQkJICogc2VlIGl0LiBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0aW1lb3V0IGluCisJCQkJICogQidzIHBlZXIgbGluayBlc3RhYmxpc2htZW50IG9yIEIgYmVpZ24KKwkJCQkgKiByZXN0YXJ0ZWQuCisJCQkJICovCisJCQkJZXZlbnQgPSBDTFNfQUNQVDsKKwkJCWVsc2UgaWYgKHN0YS0+cGxpZCAhPSBwbGlkKQorCQkJCWV2ZW50ID0gQ0xTX0lHTlI7CisJCQllbHNlIGlmIChpZV9sZW4gPT0gNyAmJiBzdGEtPmxsaWQgIT0gbGxpZCkKKwkJCQlldmVudCA9IENMU19JR05SOworCQkJZWxzZQorCQkJCWV2ZW50ID0gQ0xTX0FDUFQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1wbF9kYmcoIk1lc2ggcGxpbms6IHVua25vd24gZnJhbWUgc3VidHlwZVxuIik7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbXBsX2RiZygiTWVzaCBwbGluayAocGVlciwgc3RhdGUsIGxsaWQsIHBsaWQsIGV2ZW50KTogJXMgJWQgJWQgJWQgJWRcbiIsCisJCQlwcmludF9tYWMobWFjLCBtZ210LT5zYSksIHN0YS0+cGxpbmtfc3RhdGUsCisJCQlsZTE2X3RvX2NwdShzdGEtPmxsaWQpLCBsZTE2X3RvX2NwdShzdGEtPnBsaWQpLAorCQkJZXZlbnQpOworCXJlYXNvbiA9IDA7CisJc3dpdGNoIChzdGEtPnBsaW5rX3N0YXRlKSB7CisJCS8qIHNwaW5fdW5sb2NrIGFzIHNvb24gYXMgc3RhdGUgaXMgdXBkYXRlZCBhdCBlYWNoIGNhc2UgKi8KKwljYXNlIFBMSU5LX0xJU1RFTjoKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIENMU19BQ1BUOgorCQkJbWVzaF9wbGlua19mc21fcmVzdGFydChzdGEpOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlicmVhazsKKwkJY2FzZSBPUE5fQUNQVDoKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19PUE5fUkNWRDsKKwkJCXN0YS0+cGxpZCA9IHBsaWQ7CisJCQlnZXRfcmFuZG9tX2J5dGVzKCZsbGlkLCAyKTsKKwkJCXN0YS0+bGxpZCA9IGxsaWQ7CisJCQltZXNoX3BsaW5rX3RpbWVyX3NldChzdGEsIGRvdDExTWVzaFJldHJ5VGltZW91dChzZGF0YSkpOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfT1BFTiwgc3RhLT5hZGRyLCBsbGlkLAorCQkJCQkgICAgMCwgMCk7CisJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ09ORklSTSwgc3RhLT5hZGRyLAorCQkJCQkgICAgbGxpZCwgcGxpZCwgMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBMSU5LX09QTl9TTlQ6CisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSBPUE5fUkpDVDoKKwkJY2FzZSBDTkZfUkpDVDoKKwkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ0FQQUJJTElUWV9QT0xJQ1lfVklPTEFUSU9OKTsKKwkJY2FzZSBDTFNfQUNQVDoKKwkJCWlmICghcmVhc29uKQorCQkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ0xPU0VfUkNWRCk7CisJCQlzdGEtPnJlYXNvbiA9IHJlYXNvbjsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOworCQkJaWYgKCFtb2RfcGxpbmtfdGltZXIoc3RhLAorCQkJCQkgICAgIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSkpCisJCQkJc3RhLT5pZ25vcmVfcGxpbmtfdGltZXIgPSB0cnVlOworCisJCQlsbGlkID0gc3RhLT5sbGlkOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ0xPU0UsIHN0YS0+YWRkciwgbGxpZCwKKwkJCQkJICAgIHBsaWQsIHJlYXNvbik7CisJCQlicmVhazsKKwkJY2FzZSBPUE5fQUNQVDoKKwkJCS8qIHJldHJ5IHRpbWVyIGlzIGxlZnQgdW50b3VjaGVkICovCisJCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfT1BOX1JDVkQ7CisJCQlzdGEtPnBsaWQgPSBwbGlkOworCQkJbGxpZCA9IHN0YS0+bGxpZDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJbWVzaF9wbGlua19mcmFtZV90eChkZXYsIFBMSU5LX0NPTkZJUk0sIHN0YS0+YWRkciwgbGxpZCwKKwkJCQkJICAgIHBsaWQsIDApOworCQkJYnJlYWs7CisJCWNhc2UgQ05GX0FDUFQ6CisJCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfQ05GX1JDVkQ7CisJCQlpZiAoIW1vZF9wbGlua190aW1lcihzdGEsCisJCQkJCSAgICAgZG90MTFNZXNoQ29uZmlybVRpbWVvdXQoc2RhdGEpKSkKKwkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CisKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQTElOS19PUE5fUkNWRDoKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIE9QTl9SSkNUOgorCQljYXNlIENORl9SSkNUOgorCQkJcmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9DQVBBQklMSVRZX1BPTElDWV9WSU9MQVRJT04pOworCQljYXNlIENMU19BQ1BUOgorCQkJaWYgKCFyZWFzb24pCisJCQkJcmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9DTE9TRV9SQ1ZEKTsKKwkJCXN0YS0+cmVhc29uID0gcmVhc29uOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CisJCQlpZiAoIW1vZF9wbGlua190aW1lcihzdGEsCisJCQkJCSAgICAgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKSkKKwkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CisKKwkJCWxsaWQgPSBzdGEtPmxsaWQ7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DTE9TRSwgc3RhLT5hZGRyLCBsbGlkLAorCQkJCQkgICAgcGxpZCwgcmVhc29uKTsKKwkJCWJyZWFrOworCQljYXNlIE9QTl9BQ1BUOgorCQkJbGxpZCA9IHN0YS0+bGxpZDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJbWVzaF9wbGlua19mcmFtZV90eChkZXYsIFBMSU5LX0NPTkZJUk0sIHN0YS0+YWRkciwgbGxpZCwKKwkJCQkJICAgIHBsaWQsIDApOworCQkJYnJlYWs7CisJCWNhc2UgQ05GX0FDUFQ6CisJCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0VTVEFCOworCQkJbWVzaF9wbGlua19pbmNfZXN0YWJfY291bnQoc2RhdGEpOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQltcGxfZGJnKCJNZXNoIHBsaW5rIHdpdGggJXMgRVNUQUJMSVNIRURcbiIsCisJCQkJCXByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQTElOS19DTkZfUkNWRDoKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIE9QTl9SSkNUOgorCQljYXNlIENORl9SSkNUOgorCQkJcmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9DQVBBQklMSVRZX1BPTElDWV9WSU9MQVRJT04pOworCQljYXNlIENMU19BQ1BUOgorCQkJaWYgKCFyZWFzb24pCisJCQkJcmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9DTE9TRV9SQ1ZEKTsKKwkJCXN0YS0+cmVhc29uID0gcmVhc29uOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CisJCQlpZiAoIW1vZF9wbGlua190aW1lcihzdGEsCisJCQkJCSAgICAgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKSkKKwkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CisKKwkJCWxsaWQgPSBzdGEtPmxsaWQ7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DTE9TRSwgc3RhLT5hZGRyLCBsbGlkLAorCQkJCQkgICAgcGxpZCwgcmVhc29uKTsKKwkJCWJyZWFrOworCQljYXNlIE9QTl9BQ1BUOgorCQkJZGVsX3RpbWVyKCZzdGEtPnBsaW5rX3RpbWVyKTsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19FU1RBQjsKKwkJCW1lc2hfcGxpbmtfaW5jX2VzdGFiX2NvdW50KHNkYXRhKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJbXBsX2RiZygiTWVzaCBwbGluayB3aXRoICVzIEVTVEFCTElTSEVEXG4iLAorCQkJCQlwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKKwkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DT05GSVJNLCBzdGEtPmFkZHIsIGxsaWQsCisJCQkJCSAgICBwbGlkLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUExJTktfRVNUQUI6CisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSBDTFNfQUNQVDoKKwkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ0xPU0VfUkNWRCk7CisJCQlzdGEtPnJlYXNvbiA9IHJlYXNvbjsKKwkJCV9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7CisJCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKKwkJCWxsaWQgPSBzdGEtPmxsaWQ7CisJCQltb2RfcGxpbmtfdGltZXIoc3RhLCBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpOworCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQltZXNoX3BsaW5rX2ZyYW1lX3R4KGRldiwgUExJTktfQ0xPU0UsIHN0YS0+YWRkciwgbGxpZCwKKwkJCQkJICAgIHBsaWQsIHJlYXNvbik7CisJCQlicmVhazsKKwkJY2FzZSBPUE5fQUNQVDoKKwkJCWxsaWQgPSBzdGEtPmxsaWQ7CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DT05GSVJNLCBzdGEtPmFkZHIsIGxsaWQsCisJCQkJCSAgICBwbGlkLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBMSU5LX0hPTERJTkc6CisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSBDTFNfQUNQVDoKKwkJCWlmIChkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpKQorCQkJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gMTsKKwkJCW1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RhKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPnBsaW5rX2xvY2spOworCQkJYnJlYWs7CisJCWNhc2UgT1BOX0FDUFQ6CisJCWNhc2UgQ05GX0FDUFQ6CisJCWNhc2UgT1BOX1JKQ1Q6CisJCWNhc2UgQ05GX1JKQ1Q6CisJCQlsbGlkID0gc3RhLT5sbGlkOworCQkJcmVhc29uID0gc3RhLT5yZWFzb247CisJCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJCW1lc2hfcGxpbmtfZnJhbWVfdHgoZGV2LCBQTElOS19DTE9TRSwgc3RhLT5hZGRyLCBsbGlkLAorCQkJCQkgICAgcGxpZCwgcmVhc29uKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+cGxpbmtfbG9jayk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSwgUExJTktfQkxPQ0tFRCBpcyBkZWFsdCB3aXRoIGF0IHRoZQorCQkgKiBiZWdnaW5pbmcgb2YgdGhlIGZ1bmN0aW9uCisJCSAqLworCQlzcGluX3VubG9ja19iaCgmc3RhLT5wbGlua19sb2NrKTsKKwkJYnJlYWs7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjc1Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMCwwICsxLDQyOTkgQEAKKy8qCisgKiBCU1MgY2xpZW50IG1vZGUgaW1wbGVtZW50YXRpb24KKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KKyAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qIFRPRE86CisgKiBvcmRlciBCU1MgbGlzdCBieSBSU1NJKD8pICgicXVhbGl0eSBvZiBBUCIpCisgKiBzY2FuIHJlc3VsdCB0YWJsZSBmaWx0ZXJpbmcgKGJ5IGNhcGFiaWxpdHkgKHByaXZhY3ksIElCU1MvQlNTLCBXUEEvUlNOIElFLAorICogICAgU1NJRCkKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAicmF0ZS5oIgorI2luY2x1ZGUgImxlZC5oIgorI2luY2x1ZGUgIm1lc2guaCIKKworI2RlZmluZSBJRUVFODAyMTFfQVVUSF9USU1FT1VUIChIWiAvIDUpCisjZGVmaW5lIElFRUU4MDIxMV9BVVRIX01BWF9UUklFUyAzCisjZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUIChIWiAvIDUpCisjZGVmaW5lIElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMgMworI2RlZmluZSBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCAoMiAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfTUVTSF9IT1VTRUtFRVBJTkdfSU5URVJWQUwgKDYwICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCAoNjAgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwgKDEgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICgyMCAqIEhaKQorCisjZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9ERUxBWSAoSFogLyAzMykKKyNkZWZpbmUgSUVFRTgwMjExX0NIQU5ORUxfVElNRSAoSFogLyAzMykKKyNkZWZpbmUgSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FIChIWiAvIDUpCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDEwICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMICgzMCAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUICg2MCAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfTUVTSF9QRUVSX0lOQUNUSVZJVFlfTElNSVQgKDE4MDAgKiBIWikKKworI2RlZmluZSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMgMTI4CisKKworI2RlZmluZSBFUlBfSU5GT19VU0VfUFJPVEVDVElPTiBCSVQoMSkKKworLyogbWdtdCBoZWFkZXIgKyAxIGJ5dGUgYWN0aW9uIGNvZGUgKi8KKyNkZWZpbmUgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSAoMjQgKyAxKQorCisjZGVmaW5lIElFRUU4MDIxMV9BRERCQV9QQVJBTV9QT0xJQ1lfTUFTSyAweDAwMDIKKyNkZWZpbmUgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLIDB4MDAzQworI2RlZmluZSBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSyAweEZGQTAKKyNkZWZpbmUgSUVFRTgwMjExX0RFTEJBX1BBUkFNX1RJRF9NQVNLIDB4RjAwMAorI2RlZmluZSBJRUVFODAyMTFfREVMQkFfUEFSQU1fSU5JVElBVE9SX01BU0sgMHgwODAwCisKKy8qIG5leHQgdmFsdWVzIHJlcHJlc2VudCB0aGUgYnVmZmVyIHNpemUgZm9yIEEtTVBEVSBmcmFtZS4KKyAqIEFjY29yZGluZyB0byBJRUVFODAyLjExbiBzcGVjIHNpemUgdmFyaWVzIGZyb20gOEsgdG8gNjRLIChpbiBwb3dlcnMgb2YgMikgKi8KKyNkZWZpbmUgSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgMHg4CisjZGVmaW5lIElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGIDB4NDAKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpkc3QsCisJCQkJICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKgoraWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmJzc2lkLCBpbnQgZnJlcSwKKwkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpOworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSk7CitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfc3RhcnRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKTsKKworCit2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAorCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcykKK3sKKwlzaXplX3QgbGVmdCA9IGxlbjsKKwl1OCAqcG9zID0gc3RhcnQ7CisKKwltZW1zZXQoZWxlbXMsIDAsIHNpemVvZigqZWxlbXMpKTsKKworCXdoaWxlIChsZWZ0ID49IDIpIHsKKwkJdTggaWQsIGVsZW47CisKKwkJaWQgPSAqcG9zKys7CisJCWVsZW4gPSAqcG9zKys7CisJCWxlZnQgLT0gMjsKKworCQlpZiAoZWxlbiA+IGxlZnQpCisJCQlyZXR1cm47CisKKwkJc3dpdGNoIChpZCkgeworCQljYXNlIFdMQU5fRUlEX1NTSUQ6CisJCQllbGVtcy0+c3NpZCA9IHBvczsKKwkJCWVsZW1zLT5zc2lkX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgorCQkJZWxlbXMtPnN1cHBfcmF0ZXMgPSBwb3M7CisJCQllbGVtcy0+c3VwcF9yYXRlc19sZW4gPSBlbGVuOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfRkhfUEFSQU1TOgorCQkJZWxlbXMtPmZoX3BhcmFtcyA9IHBvczsKKwkJCWVsZW1zLT5maF9wYXJhbXNfbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX0RTX1BBUkFNUzoKKwkJCWVsZW1zLT5kc19wYXJhbXMgPSBwb3M7CisJCQllbGVtcy0+ZHNfcGFyYW1zX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9DRl9QQVJBTVM6CisJCQllbGVtcy0+Y2ZfcGFyYW1zID0gcG9zOworCQkJZWxlbXMtPmNmX3BhcmFtc19sZW4gPSBlbGVuOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfVElNOgorCQkJZWxlbXMtPnRpbSA9IHBvczsKKwkJCWVsZW1zLT50aW1fbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX0lCU1NfUEFSQU1TOgorCQkJZWxlbXMtPmlic3NfcGFyYW1zID0gcG9zOworCQkJZWxlbXMtPmlic3NfcGFyYW1zX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9DSEFMTEVOR0U6CisJCQllbGVtcy0+Y2hhbGxlbmdlID0gcG9zOworCQkJZWxlbXMtPmNoYWxsZW5nZV9sZW4gPSBlbGVuOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfV1BBOgorCQkJaWYgKGVsZW4gPj0gNCAmJiBwb3NbMF0gPT0gMHgwMCAmJiBwb3NbMV0gPT0gMHg1MCAmJgorCQkJICAgIHBvc1syXSA9PSAweGYyKSB7CisJCQkJLyogTWljcm9zb2Z0IE9VSSAoMDA6NTA6RjIpICovCisJCQkJaWYgKHBvc1szXSA9PSAxKSB7CisJCQkJCS8qIE9VSSBUeXBlIDEgLSBXUEEgSUUgKi8KKwkJCQkJZWxlbXMtPndwYSA9IHBvczsKKwkJCQkJZWxlbXMtPndwYV9sZW4gPSBlbGVuOworCQkJCX0gZWxzZSBpZiAoZWxlbiA+PSA1ICYmIHBvc1szXSA9PSAyKSB7CisJCQkJCWlmIChwb3NbNF0gPT0gMCkgeworCQkJCQkJZWxlbXMtPndtbV9pbmZvID0gcG9zOworCQkJCQkJZWxlbXMtPndtbV9pbmZvX2xlbiA9IGVsZW47CisJCQkJCX0gZWxzZSBpZiAocG9zWzRdID09IDEpIHsKKwkJCQkJCWVsZW1zLT53bW1fcGFyYW0gPSBwb3M7CisJCQkJCQllbGVtcy0+d21tX3BhcmFtX2xlbiA9IGVsZW47CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9SU046CisJCQllbGVtcy0+cnNuID0gcG9zOworCQkJZWxlbXMtPnJzbl9sZW4gPSBlbGVuOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfRVJQX0lORk86CisJCQllbGVtcy0+ZXJwX2luZm8gPSBwb3M7CisJCQllbGVtcy0+ZXJwX2luZm9fbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOgorCQkJZWxlbXMtPmV4dF9zdXBwX3JhdGVzID0gcG9zOworCQkJZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgorCQkJZWxlbXMtPmh0X2NhcF9lbGVtID0gcG9zOworCQkJZWxlbXMtPmh0X2NhcF9lbGVtX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9IVF9FWFRSQV9JTkZPOgorCQkJZWxlbXMtPmh0X2luZm9fZWxlbSA9IHBvczsKKwkJCWVsZW1zLT5odF9pbmZvX2VsZW1fbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX01FU0hfSUQ6CisJCQllbGVtcy0+bWVzaF9pZCA9IHBvczsKKwkJCWVsZW1zLT5tZXNoX2lkX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9NRVNIX0NPTkZJRzoKKwkJCWVsZW1zLT5tZXNoX2NvbmZpZyA9IHBvczsKKwkJCWVsZW1zLT5tZXNoX2NvbmZpZ19sZW4gPSBlbGVuOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfUEVFUl9MSU5LOgorCQkJZWxlbXMtPnBlZXJfbGluayA9IHBvczsKKwkJCWVsZW1zLT5wZWVyX2xpbmtfbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1BSRVE6CisJCQllbGVtcy0+cHJlcSA9IHBvczsKKwkJCWVsZW1zLT5wcmVxX2xlbiA9IGVsZW47CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9QUkVQOgorCQkJZWxlbXMtPnByZXAgPSBwb3M7CisJCQllbGVtcy0+cHJlcF9sZW4gPSBlbGVuOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfUEVSUjoKKwkJCWVsZW1zLT5wZXJyID0gcG9zOworCQkJZWxlbXMtPnBlcnJfbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlsZWZ0IC09IGVsZW47CisJCXBvcyArPSBlbGVuOworCX0KK30KKworCitzdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQoreworCXJldHVybiAoMSA8PCBlY3cpIC0gMTsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzcywKKwkJCQkJIGludCBpYnNzKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgaSwgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAwOworCisKKwkvKiBjZi4gSUVFRSA4MDIuMTEgOS4yLjEyICovCisJZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykKKwkJaWYgKChic3MtPnN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDUgPiAxMTApCisJCQloYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IDE7CisKKwlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haICYmCisJICAgIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0KQorCQlzZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKKwllbHNlCisJCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKKworCisJaWYgKGxvY2FsLT5vcHMtPmNvbmZfdHgpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcXBhcmFtOworCisJCW1lbXNldCgmcXBhcmFtLCAwLCBzaXplb2YocXBhcmFtKSk7CisKKwkJcXBhcmFtLmFpZnMgPSAyOworCisJCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkJICAgICEoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERSkpCisJCQlxcGFyYW0uY3dfbWluID0gMzE7CisJCWVsc2UKKwkJCXFwYXJhbS5jd19taW4gPSAxNTsKKworCQlxcGFyYW0uY3dfbWF4ID0gMTAyMzsKKwkJcXBhcmFtLnR4b3AgPSAwOworCisJCWZvciAoaSA9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMDsgaSA8IE5VTV9UWF9EQVRBX1FVRVVFUzsgaSsrKQorCQkJbG9jYWwtPm9wcy0+Y29uZl90eChsb2NhbF90b19odyhsb2NhbCksCisJCQkJCSAgIGkgKyBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTAsCisJCQkJCSAgICZxcGFyYW0pOworCisJCWlmIChpYnNzKSB7CisJCQkvKiBJQlNTIHVzZXMgZGlmZmVyZW50IHBhcmFtZXRlcnMgZm9yIEJlYWNvbiBzZW5kaW5nICovCisJCQlxcGFyYW0uY3dfbWluKys7CisJCQlxcGFyYW0uY3dfbWluICo9IDI7CisJCQlxcGFyYW0uY3dfbWluLS07CisJCQlsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwKKwkJCQkJICAgSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTiwgJnFwYXJhbSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAorCQkJCSAgICAgdTggKndtbV9wYXJhbSwgc2l6ZV90IHdtbV9wYXJhbV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBwYXJhbXM7CisJc2l6ZV90IGxlZnQ7CisJaW50IGNvdW50OworCXU4ICpwb3M7CisKKwlpZiAod21tX3BhcmFtX2xlbiA8IDggfHwgd21tX3BhcmFtWzVdIC8qIHZlcnNpb24gKi8gIT0gMSkKKwkJcmV0dXJuOworCWNvdW50ID0gd21tX3BhcmFtWzZdICYgMHgwZjsKKwlpZiAoY291bnQgPT0gaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCkKKwkJcmV0dXJuOworCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSBjb3VudDsKKworCXBvcyA9IHdtbV9wYXJhbSArIDg7CisJbGVmdCA9IHdtbV9wYXJhbV9sZW4gLSA4OworCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKworCWlmICghbG9jYWwtPm9wcy0+Y29uZl90eCkKKwkJcmV0dXJuOworCisJbG9jYWwtPndtbV9hY20gPSAwOworCWZvciAoOyBsZWZ0ID49IDQ7IGxlZnQgLT0gNCwgcG9zICs9IDQpIHsKKwkJaW50IGFjaSA9IChwb3NbMF0gPj4gNSkgJiAweDAzOworCQlpbnQgYWNtID0gKHBvc1swXSA+PiA0KSAmIDB4MDE7CisJCWludCBxdWV1ZTsKKworCQlzd2l0Y2ggKGFjaSkgeworCQljYXNlIDE6CisJCQlxdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMzsKKwkJCWlmIChhY20pIHsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMCkgfCBCSVQoMyk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcXVldWUgPSBJRUVFODAyMTFfVFhfUVVFVUVfREFUQTE7CisJCQlpZiAoYWNtKSB7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDQpIHwgQklUKDUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXF1ZXVlID0gSUVFRTgwMjExX1RYX1FVRVVFX0RBVEEwOworCQkJaWYgKGFjbSkgeworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCg2KSB8IEJJVCg3KTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDA6CisJCWRlZmF1bHQ6CisJCQlxdWV1ZSA9IElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBMjsKKwkJCWlmIChhY20pIHsKKwkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMSkgfCBCSVQoMik7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCXBhcmFtcy5haWZzID0gcG9zWzBdICYgMHgwZjsKKwkJcGFyYW1zLmN3X21heCA9IGVjdzJjdygocG9zWzFdICYgMHhmMCkgPj4gNCk7CisJCXBhcmFtcy5jd19taW4gPSBlY3cyY3cocG9zWzFdICYgMHgwZik7CisJCXBhcmFtcy50eG9wID0gcG9zWzJdIHwgKHBvc1szXSA8PCA4KTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXTU0gcXVldWU9JWQgYWNpPSVkIGFjbT0lZCBhaWZzPSVkICIKKwkJICAgICAgICJjV21pbj0lZCBjV21heD0lZCB0eG9wPSVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBxdWV1ZSwgYWNpLCBhY20sIHBhcmFtcy5haWZzLCBwYXJhbXMuY3dfbWluLAorCQkgICAgICAgcGFyYW1zLmN3X21heCwgcGFyYW1zLnR4b3ApOworI2VuZGlmCisJCS8qIFRPRE86IGhhbmRsZSBBQ00gKGJsb2NrIFRYLCBmYWxsYmFjayB0byBuZXh0IGxvd2VzdCBhbGxvd2VkCisJCSAqIEFDIGZvciBub3cpICovCisJCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgVFggcXVldWUgIgorCQkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwgZGV2LT5uYW1lLCBxdWV1ZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1MzIgaWVlZTgwMjExX2hhbmRsZV9wcm90ZWN0X3ByZWFtYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICAgYm9vbCB1c2VfcHJvdGVjdGlvbiwKKwkJCQkJICAgYm9vbCB1c2Vfc2hvcnRfcHJlYW1ibGUpCit7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPmJzc19jb25mOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJdTMyIGNoYW5nZWQgPSAwOworCisJaWYgKHVzZV9wcm90ZWN0aW9uICE9IGJzc19jb25mLT51c2VfY3RzX3Byb3QpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9IgorCQkJICAgICAgICIlcylcbiIsCisJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwKKwkJCSAgICAgICB1c2VfcHJvdGVjdGlvbiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgaWZzdGEtPmJzc2lkKSk7CisJCX0KKwkJYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCA9IHVzZV9wcm90ZWN0aW9uOworCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVDsKKwl9CisKKwlpZiAodXNlX3Nob3J0X3ByZWFtYmxlICE9IGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzd2l0Y2hlZCB0byAlcyBiYXJrZXIgcHJlYW1ibGUiCisJCQkgICAgICAgIiAoQlNTSUQ9JXMpXG4iLAorCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKKwkJCSAgICAgICBwcmludF9tYWMobWFjLCBpZnN0YS0+YnNzaWQpKTsKKwkJfQorCQlic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID0gdXNlX3Nob3J0X3ByZWFtYmxlOworCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRTsKKwl9CisKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIHUzMiBpZWVlODAyMTFfaGFuZGxlX2VycF9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICB1OCBlcnBfdmFsdWUpCit7CisJYm9vbCB1c2VfcHJvdGVjdGlvbiA9IChlcnBfdmFsdWUgJiBXTEFOX0VSUF9VU0VfUFJPVEVDVElPTikgIT0gMDsKKwlib29sIHVzZV9zaG9ydF9wcmVhbWJsZSA9IChlcnBfdmFsdWUgJiBXTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEUpID09IDA7CisKKwlyZXR1cm4gaWVlZTgwMjExX2hhbmRsZV9wcm90ZWN0X3ByZWFtYihzZGF0YSwKKwkJCXVzZV9wcm90ZWN0aW9uLCB1c2Vfc2hvcnRfcHJlYW1ibGUpOworfQorCitzdGF0aWMgdTMyIGllZWU4MDIxMV9oYW5kbGVfYnNzX2NhcGFiaWxpdHkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKQoreworCXUzMiBjaGFuZ2VkID0gMDsKKworCWlmIChic3MtPmhhc19lcnBfdmFsdWUpCisJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9lcnBfaWUoc2RhdGEsIGJzcy0+ZXJwX3ZhbHVlKTsKKwllbHNlIHsKKwkJdTE2IGNhcGFiID0gYnNzLT5jYXBhYmlsaXR5OworCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfcHJvdGVjdF9wcmVhbWIoc2RhdGEsIGZhbHNlLAorCQkJCShjYXBhYiAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgIT0gMCk7CisJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2ludCBpZWVlODAyMTFfaHRfY2FwX2llX3RvX2h0X2luZm8oc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcF9pZSwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8pCit7CisKKwlpZiAoaHRfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChodF9pbmZvLCAwLCBzaXplb2YoKmh0X2luZm8pKTsKKworCWlmIChodF9jYXBfaWUpIHsKKwkJdTggYW1wZHVfaW5mbyA9IGh0X2NhcF9pZS0+YW1wZHVfcGFyYW1zX2luZm87CisKKwkJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gMTsKKwkJaHRfaW5mby0+Y2FwID0gbGUxNl90b19jcHUoaHRfY2FwX2llLT5jYXBfaW5mbyk7CisJCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9CisJCQlhbXBkdV9pbmZvICYgSUVFRTgwMjExX0hUX0NBUF9BTVBEVV9GQUNUT1I7CisJCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPQorCQkJKGFtcGR1X2luZm8gJiBJRUVFODAyMTFfSFRfQ0FQX0FNUERVX0RFTlNJVFkpID4+IDI7CisJCW1lbWNweShodF9pbmZvLT5zdXBwX21jc19zZXQsIGh0X2NhcF9pZS0+c3VwcF9tY3Nfc2V0LCAxNik7CisJfSBlbHNlCisJCWh0X2luZm8tPmh0X3N1cHBvcnRlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGllZWU4MDIxMV9odF9hZGR0X2luZm9faWVfdG9faHRfYnNzX2luZm8oCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbyAqaHRfYWRkX2luZm9faWUsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvICpic3NfaW5mbykKK3sKKwlpZiAoYnNzX2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoYnNzX2luZm8sIDAsIHNpemVvZigqYnNzX2luZm8pKTsKKworCWlmIChodF9hZGRfaW5mb19pZSkgeworCQl1MTYgb3BfbW9kZTsKKwkJb3BfbW9kZSA9IGxlMTZfdG9fY3B1KGh0X2FkZF9pbmZvX2llLT5vcGVyYXRpb25fbW9kZSk7CisKKwkJYnNzX2luZm8tPnByaW1hcnlfY2hhbm5lbCA9IGh0X2FkZF9pbmZvX2llLT5jb250cm9sX2NoYW47CisJCWJzc19pbmZvLT5ic3NfY2FwID0gaHRfYWRkX2luZm9faWUtPmh0X3BhcmFtOworCQlic3NfaW5mby0+YnNzX29wX21vZGUgPSAodTgpKG9wX21vZGUgJiAweGZmKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQoreworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgbGVuOworCWludCBpOworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKworCWlmICghaWZzdGEtPmFzc29jcmVxX2llcyAmJiAhaWZzdGEtPmFzc29jcmVzcF9pZXMpCisJCXJldHVybjsKKworCWJ1ZiA9IGttYWxsb2MoNTAgKyAyICogKGlmc3RhLT5hc3NvY3JlcV9pZXNfbGVuICsKKwkJCQlpZnN0YS0+YXNzb2NyZXNwX2llc19sZW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCisJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ0lORk8oIik7CisJaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpIHsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiUmVxSUVzPSIpOworCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVxX2llc19sZW47IGkrKykgeworCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCIsCisJCQkJICAgICAgIGlmc3RhLT5hc3NvY3JlcV9pZXNbaV0pOworCQl9CisJfQorCWlmIChpZnN0YS0+YXNzb2NyZXNwX2llcykgeworCQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKKwkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiAiKTsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiUmVzcElFcz0iKTsKKwkJZm9yIChpID0gMDsgaSA8IGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CisJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKKwkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOworCQl9CisJfQorCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIikiKTsKKworCWlmIChsZW4gPiBJV19DVVNUT01fTUFYKSB7CisJCWxlbiA9IHNwcmludGYoYnVmLCAiQVNTT0NSRVNQSUU9Iik7CisJCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgeworCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCIsCisJCQkJICAgICAgIGlmc3RhLT5hc3NvY3Jlc3BfaWVzW2ldKTsKKwkJfQorCX0KKworCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwl3cnF1LmRhdGEubGVuZ3RoID0gbGVuOworCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgYnVmKTsKKworCWtmcmVlKGJ1Zik7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCisJCQkJICAgICBib29sIGFzc29jKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWxfdG9faHcobG9jYWwpLT5jb25mOworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwl1MzIgY2hhbmdlZCA9IEJTU19DSEFOR0VEX0FTU09DOworCisJaWYgKGFzc29jKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOworCisJCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCisJCQlyZXR1cm47CisKKwkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQsCisJCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJaWYgKGJzcykgeworCQkJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLworCQkJc2RhdGEtPmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmJlYWNvbl9pbnQ7CisJCQlzZGF0YS0+YnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT50aW1lc3RhbXA7CisKKwkJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9ic3NfY2FwYWJpbGl0eShzZGF0YSwgYnNzKTsKKworCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOworCQl9CisKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfU1VQUE9SVF9IVF9NT0RFKSB7CisJCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0hUOworCQkJc2RhdGEtPmJzc19jb25mLmFzc29jX2h0ID0gMTsKKwkJCXNkYXRhLT5ic3NfY29uZi5odF9jb25mID0gJmNvbmYtPmh0X2NvbmY7CisJCQlzZGF0YS0+YnNzX2NvbmYuaHRfYnNzX2NvbmYgPSAmY29uZi0+aHRfYnNzX2NvbmY7CisJCX0KKworCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQltZW1jcHkoaWZzdGEtPnByZXZfYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKGRldiwgaWZzdGEpOworCX0gZWxzZSB7CisJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKGRldiwgaWZzdGEtPmJzc2lkKTsKKwkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCWllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhkZXYpOworCisJCXNkYXRhLT5ic3NfY29uZi5hc3NvY19odCA9IDA7CisJCXNkYXRhLT5ic3NfY29uZi5odF9jb25mID0gTlVMTDsKKwkJc2RhdGEtPmJzc19jb25mLmh0X2Jzc19jb25mID0gTlVMTDsKKworCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKKwl9CisJaWZzdGEtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOworCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIGFzc29jKTsKKworCXNkYXRhLT5ic3NfY29uZi5hc3NvYyA9IGFzc29jOworCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKKwl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwgaW50IGRlYXV0aCkKK3sKKwlpZiAoZGVhdXRoKQorCQlpZnN0YS0+YXV0aF90cmllcyA9IDA7CisJaWZzdGEtPmFzc29jX3RyaWVzID0gMDsKKwlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoZGV2LCBpZnN0YSwgMCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3N0YV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBpbnQgZW5jcnlwdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICpwa3RfZGF0YTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlza2ItPmRldiA9IHNkYXRhLT5sb2NhbC0+bWRldjsKKwlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAwKTsKKwlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgMCk7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgMCk7CisKKwlwa3RfZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX3R4X3BhY2tldF9kYXRhICopIHNrYi0+Y2I7CisJbWVtc2V0KHBrdF9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSkpOworCXBrdF9kYXRhLT5pZmluZGV4ID0gc2RhdGEtPmRldi0+aWZpbmRleDsKKwlpZiAoIWVuY3J5cHQpCisJCXBrdF9kYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfVFhQRF9ET19OT1RfRU5DUllQVDsKKworCWRldl9xdWV1ZV94bWl0KHNrYik7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKKwkJCQlpbnQgdHJhbnNhY3Rpb24sIHU4ICpleHRyYSwgc2l6ZV90IGV4dHJhX2xlbiwKKwkJCQlpbnQgZW5jcnlwdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKworCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgorCQkgICAgICAgImZyYW1lXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCArIDYpOworCW1lbXNldChtZ210LCAwLCAyNCArIDYpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCisJCQkJCSAgIElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKKwlpZiAoZW5jcnlwdCkKKwkJbWdtdC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT51LmF1dGguYXV0aF9hbGcgPSBjcHVfdG9fbGUxNihpZnN0YS0+YXV0aF9hbGcpOworCW1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uID0gY3B1X3RvX2xlMTYodHJhbnNhY3Rpb24pOworCWlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24gKyAxOworCW1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSA9IGNwdV90b19sZTE2KDApOworCWlmIChleHRyYSkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBleHRyYV9sZW4pLCBleHRyYSwgZXh0cmFfbGVuKTsKKworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIGVuY3J5cHQpOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZnN0YS0+YXV0aF90cmllcysrOworCWlmIChpZnN0YS0+YXV0aF90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIHdpdGggQVAgJXMiCisJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaWZzdGEtPmJzc2lkKSk7CisJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKKwkJcmV0dXJuOworCX0KKworCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9BVVRIRU5USUNBVEU7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGUgd2l0aCBBUCAlc1xuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBpZnN0YS0+YnNzaWQpKTsKKworCWllZWU4MDIxMV9zZW5kX2F1dGgoZGV2LCBpZnN0YSwgMSwgTlVMTCwgMCwgMCk7CisKKwltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICpwb3MsICppZXM7CisJaW50IGksIGxlbjsKKwl1MTYgY2FwYWI7CisJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7CisJaW50IHdtbSA9IDA7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCisJCQkgICAgc2l6ZW9mKCptZ210KSArIDIwMCArIGlmc3RhLT5leHRyYV9pZV9sZW4gKworCQkJICAgIGlmc3RhLT5zc2lkX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhc3NvYyAiCisJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJY2FwYWIgPSBpZnN0YS0+Y2FwYWI7CisKKwlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFKSkKKwkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUU7CisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1BSRUFNQkxFX0lOQ0FQQUJMRSkpCisJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CisJfQorCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQsCisJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJaWYgKGJzcykgeworCQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwkJaWYgKGJzcy0+d21tX2llKSB7CisJCQl3bW0gPSAxOworCQl9CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKKwl9CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCisJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHsKKwkJc2tiX3B1dChza2IsIDEwKTsKKwkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKKwkJCQkJCSAgIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk7CisJCW1nbXQtPnUucmVhc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKKwkJbWdtdC0+dS5yZWFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNigxKTsKKwkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgaWZzdGEtPnByZXZfYnNzaWQsCisJCSAgICAgICBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJc2tiX3B1dChza2IsIDQpOworCQltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAorCQkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk7CisJCW1nbXQtPnUuYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CisJCW1nbXQtPnUuYXNzb2NfcmVxLmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KDEpOworCX0KKworCS8qIFNTSUQgKi8KKwlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmc3RhLT5zc2lkX2xlbik7CisJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKKwkqcG9zKysgPSBpZnN0YS0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisKKwlsZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKKwlpZiAobGVuID4gOCkKKwkJbGVuID0gODsKKwlwb3MgPSBza2JfcHV0KHNrYiwgbGVuICsgMik7CisJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwkqcG9zKysgPSBsZW47CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwl9CisKKwlpZiAoc2JhbmQtPm5fYml0cmF0ZXMgPiBsZW4pIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIHNiYW5kLT5uX2JpdHJhdGVzIC0gbGVuICsgMik7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSBzYmFuZC0+bl9iaXRyYXRlcyAtIGxlbjsKKwkJZm9yIChpID0gbGVuOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKKwkJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwkJfQorCX0KKworCWlmIChpZnN0YS0+ZXh0cmFfaWUpIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIGlmc3RhLT5leHRyYV9pZV9sZW4pOworCQltZW1jcHkocG9zLCBpZnN0YS0+ZXh0cmFfaWUsIGlmc3RhLT5leHRyYV9pZV9sZW4pOworCX0KKworCWlmICh3bW0gJiYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKKwkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOworCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KKwkJKnBvcysrID0gMHgwMDsgLyogTWljcm9zb2Z0IE9VSSAwMDo1MDpGMiAqLworCQkqcG9zKysgPSAweDUwOworCQkqcG9zKysgPSAweGYyOworCQkqcG9zKysgPSAyOyAvKiBXTUUgKi8KKwkJKnBvcysrID0gMDsgLyogV01FIGluZm8gKi8KKwkJKnBvcysrID0gMTsgLyogV01FIHZlciAqLworCQkqcG9zKysgPSAwOworCX0KKwkvKiB3bW0gc3VwcG9ydCBpcyBhIG11c3QgdG8gSFQgKi8KKwlpZiAod21tICYmIHNiYW5kLT5odF9pbmZvLmh0X3N1cHBvcnRlZCkgeworCQlfX2xlMTYgdG1wID0gY3B1X3RvX2xlMTYoc2JhbmQtPmh0X2luZm8uY2FwKTsKKwkJcG9zID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkrMik7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk7CisJCSpwb3MrKyA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCk7CisJCW1lbXNldChwb3MsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOworCQltZW1jcHkocG9zLCAmdG1wLCBzaXplb2YodTE2KSk7CisJCXBvcyArPSBzaXplb2YodTE2KTsKKwkJLyogVE9ETzogbmVlZHMgYSBkZWZpbmUgaGVyZSBmb3IgPDwgMiAqLworCQkqcG9zKysgPSBzYmFuZC0+aHRfaW5mby5hbXBkdV9mYWN0b3IgfAorCQkJIChzYmFuZC0+aHRfaW5mby5hbXBkdV9kZW5zaXR5IDw8IDIpOworCQltZW1jcHkocG9zLCBzYmFuZC0+aHRfaW5mby5zdXBwX21jc19zZXQsIDE2KTsKKwl9CisKKwlrZnJlZShpZnN0YS0+YXNzb2NyZXFfaWVzKTsKKwlpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiA9IChza2ItPmRhdGEgKyBza2ItPmxlbikgLSBpZXM7CisJaWZzdGEtPmFzc29jcmVxX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVxX2llc19sZW4sIEdGUF9LRVJORUwpOworCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQorCQltZW1jcHkoaWZzdGEtPmFzc29jcmVxX2llcywgaWVzLCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbik7CisKKwlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9kZWF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGRlYXV0aCAiCisJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQobWdtdCwgMCwgMjQpOworCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAorCQkJCQkgICBJRUVFODAyMTFfU1RZUEVfREVBVVRIKTsKKwlza2JfcHV0KHNrYiwgMik7CisJbWdtdC0+dS5kZWF1dGgucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihyZWFzb24pOworCisJaWVlZTgwMjExX3N0YV90eChkZXYsIHNrYiwgMCk7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZGlzYXNzb2MgIgorCQkgICAgICAgImZyYW1lXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKKwkJCQkJICAgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKTsKKwlza2JfcHV0KHNrYiwgMik7CisJbWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbik7CisKKwlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7CisJaW50IGJzc19wcml2YWN5OworCWludCB3ZXBfcHJpdmFjeTsKKwlpbnQgcHJpdmFjeV9pbnZva2VkOworCisJaWYgKCFpZnN0YSB8fCAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NSVhFRF9DRUxMKSkKKwkJcmV0dXJuIDA7CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCwKKwkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwlpZiAoIWJzcykKKwkJcmV0dXJuIDA7CisKKwlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKTsKKwl3ZXBfcHJpdmFjeSA9ICEhaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChkZXYpOworCXByaXZhY3lfaW52b2tlZCA9ICEhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEKTsKKworCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKKworCWlmICgoYnNzX3ByaXZhY3kgPT0gd2VwX3ByaXZhY3kpIHx8IChic3NfcHJpdmFjeSA9PSBwcml2YWN5X2ludm9rZWQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZnN0YS0+YXNzb2NfdHJpZXMrKzsKKwlpZiAoaWZzdGEtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0aW9uIHdpdGggQVAgJXMiCisJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaWZzdGEtPmJzc2lkKSk7CisJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKKwkJcmV0dXJuOworCX0KKworCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVEU7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCBBUCAlc1xuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBpZnN0YS0+YnNzaWQpKTsKKwlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goZGV2LCBpZnN0YSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtaXNtYXRjaCBpbiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gYW5kICIKKwkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gYWJvcnQgYXNzb2NpYXRpb25cbiIsIGRldi0+bmFtZSk7CisJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9ESVNBQkxFRDsKKwkJcmV0dXJuOworCX0KKworCWllZWU4MDIxMV9zZW5kX2Fzc29jKGRldiwgaWZzdGEpOworCisJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IGRpc2Fzc29jOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJLyogVE9ETzogc3RhcnQgbW9uaXRvcmluZyBjdXJyZW50IEFQIHNpZ25hbCBxdWFsaXR5IGFuZCBudW1iZXIgb2YKKwkgKiBtaXNzZWQgYmVhY29ucy4gU2NhbiBvdGhlciBjaGFubmVscyBldmVyeSBub3cgYW5kIHRoZW4gYW5kIHNlYXJjaAorCSAqIGZvciBiZXR0ZXIgQVBzLiAqLworCS8qIFRPRE86IHJlbW92ZSBleHBpcmVkIEJTU2VzICovCisKKwlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfQVNTT0NJQVRFRDsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlpZiAoIXN0YSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFNUQSBlbnRyeSBmb3Igb3duIEFQICVzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBpZnN0YS0+YnNzaWQpKTsKKwkJZGlzYXNzb2MgPSAxOworCX0gZWxzZSB7CisJCWRpc2Fzc29jID0gMDsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCSAgICAgICBzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCkpIHsKKwkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFByb2JlUmVzcCBmcm9tICIKKwkJCQkgICAgICAgImN1cnJlbnQgQVAgJXMgLSBhc3N1bWUgb3V0IG9mICIKKwkJCQkgICAgICAgInJhbmdlXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGlmc3RhLT5ic3NpZCkpOworCQkJCWRpc2Fzc29jID0gMTsKKwkJCQlzdGFfaW5mb191bmxpbmsoJnN0YSk7CisJCQl9IGVsc2UKKwkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoZGV2LCBpZnN0YS0+YnNzaWQsCisJCQkJCQkJIGxvY2FsLT5zY2FuX3NzaWQsCisJCQkJCQkJIGxvY2FsLT5zY2FuX3NzaWRfbGVuKTsKKwkJCWlmc3RhLT5mbGFncyBePSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCX0gZWxzZSB7CisJCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmc3RhLT5sYXN0X3Byb2JlICsKKwkJCQkgICAgICAgSUVFRTgwMjExX1BST0JFX0lOVEVSVkFMKSkgeworCQkJCWlmc3RhLT5sYXN0X3Byb2JlID0gamlmZmllczsKKwkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoZGV2LCBpZnN0YS0+YnNzaWQsCisJCQkJCQkJIGlmc3RhLT5zc2lkLAorCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOworCQkJfQorCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAoZGlzYXNzb2MgJiYgc3RhKQorCQlzdGFfaW5mb19kZXN0cm95KHN0YSk7CisKKwlpZiAoZGlzYXNzb2MpIHsKKwkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoZGV2LCBpZnN0YSwgMCk7CisJfSBlbHNlIHsKKwkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCQkJCSAgICAgIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpkc3QsCisJCQkJICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvcywgKnN1cHBfcmF0ZXMsICplc3VwcF9yYXRlcyA9IE5VTEw7CisJaW50IGk7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkgKyAyMDApOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgorCQkgICAgICAgInJlcXVlc3RcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQobWdtdCwgMCwgMjQpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCisJCQkJCSAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOworCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChkc3QpIHsKKwkJbWVtY3B5KG1nbXQtPmRhLCBkc3QsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkc3QsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwkJbWVtc2V0KG1nbXQtPmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisJfQorCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgc3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gc3NpZF9sZW47CisJbWVtY3B5KHBvcywgc3NpZCwgc3NpZF9sZW4pOworCisJc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAyKTsKKwlzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlzdXBwX3JhdGVzWzFdID0gMDsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCQlpZiAoZXN1cHBfcmF0ZXMpIHsKKwkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKKwkJCWVzdXBwX3JhdGVzWzFdKys7CisJCX0gZWxzZSBpZiAoc3VwcF9yYXRlc1sxXSA9PSA4KSB7CisJCQllc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAzKTsKKwkJCWVzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCQllc3VwcF9yYXRlc1sxXSA9IDE7CisJCQlwb3MgPSAmZXN1cHBfcmF0ZXNbMl07CisJCX0gZWxzZSB7CisJCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7CisJCQlzdXBwX3JhdGVzWzFdKys7CisJCX0KKwkJKnBvcyA9IHJhdGUtPmJpdHJhdGUgLyA1OworCX0KKworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpZiAoIXNkYXRhIHx8ICFzZGF0YS0+ZGVmYXVsdF9rZXkgfHwKKwkgICAgc2RhdGEtPmRlZmF1bHRfa2V5LT5jb25mLmFsZyAhPSBBTEdfV0VQKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZWRcbiIsIGRldi0+bmFtZSk7CisJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwlpZWVlODAyMTFfYXNzb2NpYXRlKGRldiwgaWZzdGEpOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwl1OCAqcG9zOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZXBseWluZyB0byBhdXRoIGNoYWxsZW5nZVxuIiwgZGV2LT5uYW1lKTsKKwlwb3MgPSBtZ210LT51LmF1dGgudmFyaWFibGU7CisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CisJaWYgKCFlbGVtcy5jaGFsbGVuZ2UpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBjaGFsbGVuZ2UgSUUgaW4gc2hhcmVkIGtleSBhdXRoICIKKwkJICAgICAgICJmcmFtZVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlpZWVlODAyMTFfc2VuZF9hdXRoKGRldiwgaWZzdGEsIDMsIGVsZW1zLmNoYWxsZW5nZSAtIDIsCisJCQkgICAgZWxlbXMuY2hhbGxlbmdlX2xlbiArIDIsIDEpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpkYSwgdTE2IHRpZCwKKwkJCQkJdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhdHVzLCB1MTYgcG9saWN5LAorCQkJCQl1MTYgYnVmX3NpemUsIHUxNiB0aW1lb3V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMSArCisJCQkJCXNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgorCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCisJCQkJCSAgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCisJc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSk7CisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVTUDsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCisJY2FwYWIgPSAodTE2KShwb2xpY3kgPDwgMSk7CS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLworCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLworCWNhcGFiIHw9ICh1MTYpKGJ1Zl9zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dyZWdhdGlvbiAqLworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiID0gY3B1X3RvX2xlMTYoY2FwYWIpOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cyA9IGNwdV90b19sZTE2KHN0YXR1cyk7CisKKwlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKKworCXJldHVybjsKK30KKwordm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYSwKKwkJCQl1MTYgdGlkLCB1OCBkaWFsb2dfdG9rZW4sIHUxNiBzdGFydF9zZXFfbnVtLAorCQkJCXUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgY2FwYWI7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyAxICsKKwkJCQlzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKTsKKworCisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCisJCQkJImZvciBhZGRiYSByZXF1ZXN0IGZyYW1lXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCisJCW1lbWNweShtZ210LT5ic3NpZCwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCisJCQkJCUlFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCisJc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKTsKKworCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVROworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCWNhcGFiID0gKHUxNikoMSA8PCAxKTsJCS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLworCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLworCWNhcGFiIHw9ICh1MTYpKGFnZ19zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dlcmdhdGlvbiAqLworCisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7CisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSA9CisJCQkJCWNwdV90b19sZTE2KHN0YXJ0X3NlcV9udW0gPDwgNCk7CisKKwlpZWVlODAyMTFfc3RhX3R4KGRldiwgc2tiLCAwKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9wcm9jZXNzX2FkZGJhX3JlcXVlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJCXNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7CisJdTE2IGNhcGFiLCB0aWQsIHRpbWVvdXQsIGJhX3BvbGljeSwgYnVmX3NpemUsIHN0YXJ0X3NlcV9udW0sIHN0YXR1czsKKwl1OCBkaWFsb2dfdG9rZW47CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBleHRyYWN0IHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIGFkZGJhIHJlcXVlc3QgZnJhbWUgKi8KKwlkaWFsb2dfdG9rZW4gPSBtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW47CisJdGltZW91dCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQpOworCXN0YXJ0X3NlcV9udW0gPQorCQlsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtKSA+PiA0OworCisJY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYik7CisJYmFfcG9saWN5ID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1BPTElDWV9NQVNLKSA+PiAxOworCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKKwlidWZfc2l6ZSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLKSA+PiA2OworCisJc3RhdHVzID0gV0xBTl9TVEFUVVNfUkVRVUVTVF9ERUNMSU5FRDsKKworCS8qIHNhbml0eSBjaGVjayBmb3IgaW5jb21pbmcgcGFyYW1ldGVyczoKKwkgKiBjaGVjayBpZiBjb25maWd1cmF0aW9uIGNhbiBzdXBwb3J0IHRoZSBCQSBwb2xpY3kKKwkgKiBhbmQgaWYgYnVmZmVyIHNpemUgZG9lcyBub3QgZXhjZWVkcyBtYXggdmFsdWUgKi8KKwlpZiAoKChiYV9wb2xpY3kgIT0gMSkKKwkJJiYgKCEoY29uZi0+aHRfY29uZi5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0RFTEFZX0JBKSkpCisJCXx8IChidWZfc2l6ZSA+IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGKSkgeworCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX1FPU19QQVJBTTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJBZGRCQSBSZXEgd2l0aCBiYWQgcGFyYW1zIGZyb20gIgorCQkJCSIlcyBvbiB0aWQgJXUuIHBvbGljeSAlZCwgYnVmZmVyIHNpemUgJWRcbiIsCisJCQkJcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCB0aWQsIGJhX3BvbGljeSwKKwkJCQlidWZfc2l6ZSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gZW5kX25vX2xvY2s7CisJfQorCS8qIGRldGVybWluZSBkZWZhdWx0IGJ1ZmZlciBzaXplICovCisJaWYgKGJ1Zl9zaXplID09IDApIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOworCQlidWZfc2l6ZSA9IElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGOworCQlidWZfc2l6ZSA9IGJ1Zl9zaXplIDw8IHNiYW5kLT5odF9pbmZvLmFtcGR1X2ZhY3RvcjsKKwl9CisKKworCS8qIGV4YW1pbmUgc3RhdGUgbWFjaGluZSAqLworCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKKworCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ1bmV4cGVjdGVkIEFkZEJBIFJlcSBmcm9tICIKKwkJCQkiJXMgb24gdGlkICV1XG4iLAorCQkJCXByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwkJZ290byBlbmQ7CisJfQorCisJLyogcHJlcGFyZSBBLU1QRFUgTUxNRSBmb3IgUnggYWdncmVnYXRpb24gKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV9yeCksIEdGUF9BVE9NSUMpOworCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIgImFsbG9jYXRlIHJ4IG1sbWUgdG8gdGlkICVkIGZhaWxlZFxuIiwKKwkJCQkJdGlkKTsKKwkJZ290byBlbmQ7CisJfQorCS8qIHJ4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmZ1bmN0aW9uID0KKwkJCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZGF0YSA9CisJCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisKKwkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCisJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQorCQlrbWFsbG9jKGJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWYgKiksIEdGUF9BVE9NSUMpOworCWlmICghdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvY2F0ZSByZW9yZGVyaW5nIGJ1ZmZlciAiCisJCQkgICAgICAgInRvIHRpZCAlZFxuIiwgdGlkKTsKKwkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKKwkJZ290byBlbmQ7CisJfQorCW1lbXNldCh0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZiwgMCwKKwkJYnVmX3NpemUgKiBzaXplb2Yoc3RydWN0IHNrX2J1ZiAqKSk7CisKKwlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQorCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKKwkJCQkJICAgICAgIHN0YS0+YWRkciwgdGlkLCAmc3RhcnRfc2VxX251bSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSByZXF1ZXN0IG9uIHRpZCAlZCByZXN1bHQgJWRcbiIsIHRpZCwgcmV0KTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChyZXQpIHsKKwkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpOworCQlrZnJlZSh0aWRfYWdnX3J4KTsKKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwkJZ290byBlbmQ7CisJfQorCisJLyogY2hhbmdlIHN0YXRlIGFuZCBzZW5kIGFkZGJhIHJlc3AgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJdGlkX2FnZ19yeC0+ZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCXRpZF9hZ2dfcngtPnNzbiA9IHN0YXJ0X3NlcV9udW07CisJdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc3RhcnRfc2VxX251bTsKKwl0aWRfYWdnX3J4LT5idWZfc2l6ZSA9IGJ1Zl9zaXplOworCXRpZF9hZ2dfcngtPnRpbWVvdXQgPSB0aW1lb3V0OworCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7CisJc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKK2VuZDoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKKworZW5kX25vX2xvY2s6CisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPnNkYXRhLT5kZXYsIHN0YS0+YWRkciwgdGlkLAorCQkJCSAgZGlhbG9nX3Rva2VuLCBzdGF0dXMsIDEsIGJ1Zl9zaXplLCB0aW1lb3V0KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9wcm9jZXNzX2FkZGJhX3Jlc3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1MTYgY2FwYWI7CisJdTE2IHRpZDsKKwl1OCAqc3RhdGU7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiKTsKKwl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7CisKKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisKKwlzcGluX2xvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisKKwlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInN0YXRlIG5vdCBIVF9BRERCQV9SRVFVRVNURURfTVNLOiIKKwkJCSIlZFxuIiwgKnN0YXRlKTsKKwkJZ290byBhZGRiYV9yZXNwX2V4aXQ7CisJfQorCisJaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJ3cm9uZyBhZGRCQSByZXNwb25zZSB0b2tlbiwgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlnb3RvIGFkZGJhX3Jlc3BfZXhpdDsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQorCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQlpZiAoKnN0YXRlICYgSFRfQUREQkFfUkVDRUlWRURfTVNLKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgImRvdWJsZSBhZGRCQSByZXNwb25zZVxuIik7CisKKwkJKnN0YXRlIHw9IEhUX0FEREJBX1JFQ0VJVkVEX01TSzsKKwkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7CisKKwkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOworCQl9CisKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJyZWNpcGllbnQgYWNjZXB0ZWQgYWdnOiB0aWQgJWQgXG4iLCB0aWQpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJyZWNpcGllbnQgcmVqZWN0ZWQgYWdnOiB0aWQgJWQgXG4iLCB0aWQpOworCisJCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0rKzsKKwkJLyogdGhpcyB3aWxsIGFsbG93IHRoZSBzdGF0ZSBjaGVjayBpbiBzdG9wX0JBX3Nlc3Npb24gKi8KKwkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihodywgc3RhLT5hZGRyLCB0aWQsCisJCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJfQorCithZGRiYV9yZXNwX2V4aXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgcGFyYW1zOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMSArCisJCQkJCXNpemVvZihtZ210LT51LmFjdGlvbi51LmRlbGJhKSk7CisKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKKwkJCQkJImZvciBkZWxiYSBmcmFtZVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChtZ210LCAwLCAyNCk7CisJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfQVApCisJCW1lbWNweShtZ210LT5ic3NpZCwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAorCQkJCQlJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKKworCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEpKTsKKworCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOworCW1nbXQtPnUuYWN0aW9uLnUuZGVsYmEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9ERUxCQTsKKwlwYXJhbXMgPSAodTE2KShpbml0aWF0b3IgPDwgMTEpOyAJLyogYml0IDExIGluaXRpYXRvciAqLworCXBhcmFtcyB8PSAodTE2KSh0aWQgPDwgMTIpOyAJCS8qIGJpdCAxNToxMiBUSUQgbnVtYmVyICovCisKKwltZ210LT51LmFjdGlvbi51LmRlbGJhLnBhcmFtcyA9IGNwdV90b19sZTE2KHBhcmFtcyk7CisJbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbl9jb2RlKTsKKworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOworfQorCit2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpyYSwgdTE2IHRpZCwKKwkJCQkJdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmV0LCBpOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBjaGVjayBpZiBUSUQgaXMgaW4gb3BlcmF0aW9uYWwgc3RhdGUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV9yeCk7CisJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXQorCQkJCSE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0KKwkJSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CisJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV9yeCk7CisKKwkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCisJICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KKwlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiUnggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXMgdGlkICV1XG4iLAorCQkJCXByaW50X21hYyhtYWMsIHJhKSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUT1AsCisJCQkJCXJhLCB0aWQsIE5VTEwpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKKwkJCQkiYWdnZXJnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKKworCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLworCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQorCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCisJaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCisJCWllZWU4MDIxMV9zZW5kX2RlbGJhKGRldiwgcmEsIHRpZCwgMCwgcmVhc29uKTsKKworCS8qIGZyZWUgdGhlIHJlb3JkZXJpbmcgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+YnVmX3NpemU7IGkrKykgeworCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSkgeworCQkJLyogcmVsZWFzZSB0aGUgcmVvcmRlcmVkIGZyYW1lcyAqLworCQkJZGV2X2tmcmVlX3NrYihzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldKTsKKwkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c3RvcmVkX21wZHVfbnVtLS07CisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldID0gTlVMTDsKKwkJfQorCX0KKwkvKiBmcmVlIHJlc291cmNlcyAqLworCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWYpOworCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSk7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfSURMRTsKKworCXJjdV9yZWFkX3VubG9jaygpOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcHJvY2Vzc19kZWxiYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdTE2IHRpZCwgcGFyYW1zOworCXUxNiBpbml0aWF0b3I7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCXBhcmFtcyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zKTsKKwl0aWQgPSAocGFyYW1zICYgSUVFRTgwMjExX0RFTEJBX1BBUkFNX1RJRF9NQVNLKSA+PiAxMjsKKwlpbml0aWF0b3IgPSAocGFyYW1zICYgSUVFRTgwMjExX0RFTEJBX1BBUkFNX0lOSVRJQVRPUl9NQVNLKSA+PiAxMTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0RFQlVHICJkZWxiYSBmcm9tICVzICglcykgdGlkICVkIHJlYXNvbiBjb2RlICVkXG4iLAorCQkJcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLAorCQkJaW5pdGlhdG9yID8gImluaXRpYXRvciIgOiAicmVjaXBpZW50IiwgdGlkLAorCQkJbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5yZWFzb25fY29kZSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisKKwlpZiAoaW5pdGlhdG9yID09IFdMQU5fQkFDS19JTklUSUFUT1IpCisJCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKGRldiwgc3RhLT5hZGRyLCB0aWQsCisJCQkJCQkgV0xBTl9CQUNLX0lOSVRJQVRPUiwgMCk7CisJZWxzZSB7IC8qIFdMQU5fQkFDS19SRUNJUElFTlQgKi8KKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF0gPQorCQkJCUhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+YW1wZHVfbWxtZS5hbXBkdV90eCk7CisJCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oJmxvY2FsLT5odywgc3RhLT5hZGRyLCB0aWQsCisJCQkJCSAgICAgV0xBTl9CQUNLX1JFQ0lQSUVOVCk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQorCisvKgorICogQWZ0ZXIgc2VuZGluZyBhZGQgQmxvY2sgQWNrIHJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIgdW50aWwKKyAqIGFkZCBCbG9jayBBY2sgcmVzcG9uc2Ugd2lsbCBhcnJpdmUgZnJvbSB0aGUgcmVjaXBpZW50LgorICogSWYgdGhpcyB0aW1lciBleHBpcmVzIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQgd2lsbCBiZSBleGVjdXRlZC4KKyAqLwordm9pZCBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwkvKiBub3QgYW4gZWxlZ2FudCBkZXRvdXIsIGJ1dCB0aGVyZSBpcyBubyBjaG9pY2UgYXMgdGhlIHRpbWVyIHBhc3NlcworCSAqIG9ubHkgb25lIGFyZ3VtZW50LCBhbmQgYm90aCBzdGFfaW5mbyBhbmQgVElEIGFyZSBuZWVkZWQsIHNvIGluaXQKKwkgKiBmbG93IGluIHN0YV9pbmZvX2NyZWF0ZSBnaXZlcyB0aGUgVElEIGFzIGRhdGEsIHdoaWxlIHRoZSB0aW1lcl90b19pZAorCSAqIGFycmF5IGdpdmVzIHRoZSBzdGEgdGhyb3VnaCBjb250YWluZXJfb2YgKi8KKwl1MTYgdGlkID0gKihpbnQgKilkYXRhOworCXN0cnVjdCBzdGFfaW5mbyAqdGVtcF9zdGEgPSBjb250YWluZXJfb2YoKHZvaWQgKilkYXRhLAorCQlzdHJ1Y3Qgc3RhX2luZm8sIHRpbWVyX3RvX3RpZFt0aWRdKTsKKworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gdGVtcF9zdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1OCAqc3RhdGU7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHRlbXBfc3RhLT5hZGRyKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwkvKiBjaGVjayBpZiB0aGUgVElEIHdhaXRzIGZvciBhZGRCQSByZXNwb25zZSAqLworCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7CisJCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lciBleHBpcmVkIG9uIHRpZCAlZCBidXQgd2UgYXJlIG5vdCAiCisJCQkJImV4cGVjdGluZyBhZGRCQSByZXNwb25zZSB0aGVyZSIsIHRpZCk7CisJCWdvdG8gdGltZXJfZXhwaXJlZF9leGl0OworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSByZXNwb25zZSB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgdGlkKTsKKworCS8qIGdvIHRocm91Z2ggdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLworCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3R4KTsKKwlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCB0ZW1wX3N0YS0+YWRkciwgdGlkLAorCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisKK3RpbWVyX2V4cGlyZWRfZXhpdDoKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworLyoKKyAqIEFmdGVyIGFjY2VwdGluZyB0aGUgQWRkQkEgUmVxdWVzdCB3ZSBhY3RpdmF0ZWQgYSB0aW1lciwKKyAqIHJlc2V0dGluZyBpdCBhZnRlciBlYWNoIGZyYW1lIHRoYXQgYXJyaXZlcyBmcm9tIHRoZSBvcmlnaW5hdG9yLgorICogaWYgdGhpcyB0aW1lciBleHBpcmVzIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uIHdpbGwgYmUgZXhlY3V0ZWQuCisgKi8KK3ZvaWQgc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCisJICogb25seSBvbmUgYXJndW1lbnQsIGFuZCB2ZXJpb3VzIHN0YV9pbmZvIGFyZSBuZWVkZWQgaGVyZSwgc28gaW5pdAorCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCisJICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLworCXU4ICpwdGlkID0gKHU4ICopZGF0YTsKKwl1OCAqdGltZXJfdG9faWQgPSBwdGlkIC0gKnB0aWQ7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodGltZXJfdG9faWQsIHN0cnVjdCBzdGFfaW5mbywKKwkJCQkJIHRpbWVyX3RvX3RpZFswXSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAicnggc2Vzc2lvbiB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgKHUxNikqcHRpZCk7CisJaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLT5zZGF0YS0+ZGV2LCBzdGEtPmFkZHIsCisJCQkJCSAodTE2KSpwdGlkLCBXTEFOX0JBQ0tfVElNRVIsCisJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOworfQorCit2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICphZGRyKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbigmbG9jYWwtPmh3LCBhZGRyLCBpLAorCQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOworCQlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihkZXYsIGFkZHIsIGksCisJCQkJCQkgV0xBTl9CQUNLX1JFQ0lQSUVOVCwKKwkJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1MpOworCX0KK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURSAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgorCQkgICAgICAgIiVzLCBidXQgbm90IGluIGF1dGhlbnRpY2F0ZSBzdGF0ZSAtIGlnbm9yZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGVuIDwgMjQgKyA2KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIHNob3J0ICglemQpIGF1dGhlbnRpY2F0aW9uIGZyYW1lICIKKwkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCisJICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgorCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKKwkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKKwkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYKKwkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gZnJhbWUgcmVjZWl2ZWQgZnJvbSAiCisJCSAgICAgICAidW5rbm93biBCU1NJRCAoU0E9JXMgQlNTSUQ9JXMpIC0gIgorCQkgICAgICAgImlnbm9yZWRcbiIsIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLAorCQkgICAgICAgcHJpbnRfbWFjKG1hYywgbWdtdC0+YnNzaWQpKTsKKwkJcmV0dXJuOworCX0KKworCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKKwlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOworCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggYXV0aGVudGljYXRpb24gZnJvbSAlcyAoYWxnPSVkICIKKwkgICAgICAgInRyYW5zYWN0aW9uPSVkIHN0YXR1cz0lZClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCBhdXRoX2FsZywKKwkgICAgICAgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGUpOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7CisJCS8qIElFRUUgODAyLjExIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgYXV0aGVudGljYXRpb24gaW4gSUJTUworCQkgKiBuZXR3b3JrcyBhbmQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHNlZW0gdG8gdXNlIGl0LgorCQkgKiBIb3dldmVyLCB0cnkgdG8gcmVwbHkgdG8gYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgaWYgc29tZW9uZQorCQkgKiBoYXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdGhpcy4KKwkJICogVE9ETzogQ291bGQgaW1wbGVtZW50IHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24uICovCisJCWlmIChhdXRoX2FsZyAhPSBXTEFOX0FVVEhfT1BFTiB8fCBhdXRoX3RyYW5zYWN0aW9uICE9IDEpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5leHBlY3RlZCBJQlNTIGF1dGhlbnRpY2F0aW9uICIKKwkJCSAgICAgICAiZnJhbWUgKGFsZz0lZCB0cmFuc2FjdGlvbj0lZClcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbik7CisJCQlyZXR1cm47CisJCX0KKwkJaWVlZTgwMjExX3NlbmRfYXV0aChkZXYsIGlmc3RhLCAyLCBOVUxMLCAwLCAwKTsKKwl9CisKKwlpZiAoYXV0aF9hbGcgIT0gaWZzdGEtPmF1dGhfYWxnIHx8CisJICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmV4cGVjdGVkIGF1dGhlbnRpY2F0aW9uIGZyYW1lICIKKwkJICAgICAgICIoYWxnPSVkIHRyYW5zYWN0aW9uPSVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24pOworCQlyZXR1cm47CisJfQorCisJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCBkZW5pZWQgYXV0aGVudGljYXRpb24gKGF1dGhfYWxnPSVkICIKKwkJICAgICAgICJjb2RlPSVkKVxuIiwgZGV2LT5uYW1lLCBpZnN0YS0+YXV0aF9hbGcsIHN0YXR1c19jb2RlKTsKKwkJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX05PVF9TVVBQT1JURURfQVVUSF9BTEcpIHsKKwkJCXU4IGFsZ3NbM107CisJCQljb25zdCBpbnQgbnVtX2FsZ3MgPSBBUlJBWV9TSVpFKGFsZ3MpOworCQkJaW50IGksIHBvczsKKwkJCWFsZ3NbMF0gPSBhbGdzWzFdID0gYWxnc1syXSA9IDB4ZmY7CisJCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQorCQkJCWFsZ3NbMF0gPSBXTEFOX0FVVEhfT1BFTjsKKwkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCQkJYWxnc1sxXSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOworCQkJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKKwkJCQlhbGdzWzJdID0gV0xBTl9BVVRIX0xFQVA7CisJCQlpZiAoaWZzdGEtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOKQorCQkJCXBvcyA9IDA7CisJCQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCisJCQkJcG9zID0gMTsKKwkJCWVsc2UKKwkJCQlwb3MgPSAyOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9hbGdzOyBpKyspIHsKKwkJCQlwb3MrKzsKKwkJCQlpZiAocG9zID49IG51bV9hbGdzKQorCQkJCQlwb3MgPSAwOworCQkJCWlmIChhbGdzW3Bvc10gPT0gaWZzdGEtPmF1dGhfYWxnIHx8CisJCQkJICAgIGFsZ3NbcG9zXSA9PSAweGZmKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoYWxnc1twb3NdID09IFdMQU5fQVVUSF9TSEFSRURfS0VZICYmCisJCQkJICAgICFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKGRldikpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmc3RhLT5hdXRoX2FsZyA9IGFsZ3NbcG9zXTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldCBhdXRoX2FsZz0lZCBmb3IgIgorCQkJCSAgICAgICAibmV4dCB0cnlcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgaWZzdGEtPmF1dGhfYWxnKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChpZnN0YS0+YXV0aF9hbGcpIHsKKwljYXNlIFdMQU5fQVVUSF9PUEVOOgorCWNhc2UgV0xBTl9BVVRIX0xFQVA6CisJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChkZXYsIGlmc3RhKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKKwkJaWYgKGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpCisJCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoZGV2LCBpZnN0YSk7CisJCWVsc2UKKwkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShkZXYsIGlmc3RhLCBtZ210LCBsZW4pOworCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICAgICBzaXplX3QgbGVuKQoreworCXUxNiByZWFzb25fY29kZTsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKworCWlmIChsZW4gPCAyNCArIDIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gc2hvcnQgKCV6ZCkgZGVhdXRoZW50aWNhdGlvbiBmcmFtZSAiCisJCSAgICAgICAicmVjZWl2ZWQgZnJvbSAlcyAtIGlnbm9yZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgorCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKKwkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKKwkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7CisJCXJldHVybjsKKwl9CisKKwlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggZGVhdXRoZW50aWNhdGlvbiBmcm9tICVzIgorCSAgICAgICAiIChyZWFzb249JWQpXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgcmVhc29uX2NvZGUpOworCisJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRlZFxuIiwgZGV2LT5uYW1lKTsKKwl9CisKKwlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BVVRIRU5USUNBVEUgfHwKKwkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BU1NPQ0lBVEUgfHwKKwkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9BU1NPQ0lBVEVEKSB7CisJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9BVVRIRU5USUNBVEU7CisJCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKKwkJCQkgICAgICBJRUVFODAyMTFfUkVUUllfQVVUSF9JTlRFUlZBTCk7CisJfQorCisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhkZXYsIGlmc3RhLCAxKTsKKwlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgICAgc2l6ZV90IGxlbikKK3sKKwl1MTYgcmVhc29uX2NvZGU7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKwlpZiAobGVuIDwgMjQgKyAyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIHNob3J0ICglemQpIGRpc2Fzc29jaWF0aW9uIGZyYW1lICIKKwkJICAgICAgICJyZWNlaXZlZCBmcm9tICVzIC0gaWdub3JlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbGVuLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0aW9uIGZyYW1lIHJlY2VpdmVkIGZyb20gIgorCQkgICAgICAgInVua25vd24gQVAgKFNBPSVzIEJTU0lEPSVzKSAtICIKKwkJICAgICAgICJpZ25vcmVkXG4iLCBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKKwkJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPmJzc2lkKSk7CisJCXJldHVybjsKKwl9CisKKwlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGlzYXNzb2MucmVhc29uX2NvZGUpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBkaXNhc3NvY2lhdGlvbiBmcm9tICVzIgorCSAgICAgICAiIChyZWFzb249JWQpXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgcmVhc29uX2NvZGUpOworCisJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGVkXG4iLCBkZXYtPm5hbWUpOworCisJaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfQVNTT0NJQVRFRCkgeworCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfQVNTT0NJQVRFOworCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOworCX0KKworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2MoZGV2LCBpZnN0YSwgMCk7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJIHNpemVfdCBsZW4sCisJCQkJCSBpbnQgcmVhc3NvYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2RhdGEtPmRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1NjQgcmF0ZXMsIGJhc2ljX3JhdGVzOworCXUxNiBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgYWlkOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnNkYXRhLT5ic3NfY29uZjsKKwl1OCAqcG9zOworCWludCBpLCBqOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCWJvb2wgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSBmYWxzZTsKKworCS8qIEFzc29jUmVzcCBhbmQgUmVhc3NvY1Jlc3AgaGF2ZSBpZGVudGljYWwgc3RydWN0dXJlLCBzbyBwcm9jZXNzIGJvdGgKKwkgKiBvZiB0aGVtIGluIHRoaXMgZnVuY3Rpb24uICovCisKKwlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9BU1NPQ0lBVEUpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiBmcmFtZSByZWNlaXZlZCBmcm9tICIKKwkJICAgICAgICIlcywgYnV0IG5vdCBpbiBhc3NvY2lhdGUgc3RhdGUgLSBpZ25vcmVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSkpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxlbiA8IDI0ICsgNikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBzaG9ydCAoJXpkKSBhc3NvY2lhdGlvbiBmcmFtZSAiCisJCSAgICAgICAicmVjZWl2ZWQgZnJvbSAlcyAtIGlnbm9yZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiBmcmFtZSByZWNlaXZlZCBmcm9tICIKKwkJICAgICAgICJ1bmtub3duIEFQIChTQT0lcyBCU1NJRD0lcykgLSAiCisJCSAgICAgICAiaWdub3JlZFxuIiwgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5zYSksCisJCSAgICAgICBwcmludF9tYWMobWFjLCBtZ210LT5ic3NpZCkpOworCQlyZXR1cm47CisJfQorCisJY2FwYWJfaW5mbyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5jYXBhYl9pbmZvKTsKKwlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5zdGF0dXNfY29kZSk7CisJYWlkID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmFpZCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYICVzc3NvY1Jlc3AgZnJvbSAlcyAoY2FwYWI9MHgleCAiCisJICAgICAgICJzdGF0dXM9JWQgYWlkPSVkKVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCByZWFzc29jID8gIlJlYSIgOiAiQSIsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKKwkgICAgICAgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsICh1MTYpKGFpZCAmIH4oQklUKDE1KSB8IEJJVCgxNCkpKSk7CisKKwlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1c19jb2RlKTsKKwkJLyogaWYgdGhpcyB3YXMgYSByZWFzc29jaWF0aW9uLCBlbnN1cmUgd2UgdHJ5IGEgImZ1bGwiCisJCSAqIGFzc29jaWF0aW9uIG5leHQgdGltZS4gVGhpcyB3b3JrcyBhcm91bmQgc29tZSBicm9rZW4gQVBzCisJCSAqIHdoaWNoIGRvIG5vdCBjb3JyZWN0bHkgcmVqZWN0IHJlYXNzb2NpYXRpb24gcmVxdWVzdHMuICovCisJCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJcmV0dXJuOworCX0KKworCWlmICgoYWlkICYgKEJJVCgxNSkgfCBCSVQoMTQpKSkgIT0gKEJJVCgxNSkgfCBCSVQoMTQpKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnZhbGlkIGFpZCB2YWx1ZSAlZDsgYml0cyAxNToxNCBub3QgIgorCQkgICAgICAgInNldFxuIiwgZGV2LT5uYW1lLCBhaWQpOworCWFpZCAmPSB+KEJJVCgxNSkgfCBCSVQoMTQpKTsKKworCXBvcyA9IG1nbXQtPnUuYXNzb2NfcmVzcC52YXJpYWJsZTsKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKKworCWlmICghZWxlbXMuc3VwcF9yYXRlcykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vIFN1cHBSYXRlcyBlbGVtZW50IGluIEFzc29jUmVzcFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZWRcbiIsIGRldi0+bmFtZSk7CisJaWZzdGEtPmFpZCA9IGFpZDsKKwlpZnN0YS0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOworCisJa2ZyZWUoaWZzdGEtPmFzc29jcmVzcF9pZXMpOworCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7CisJaWZzdGEtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKQorCQltZW1jcHkoaWZzdGEtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCS8qIEFkZCBTVEEgZW50cnkgZm9yIHRoZSBBUCAqLworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlpZiAoIXN0YSkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzczsKKwkJaW50IGVycjsKKworCQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaWZzdGEtPmJzc2lkLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFzdGEpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jIFNUQSBlbnRyeSBmb3IiCisJCQkgICAgICAgIiB0aGUgQVBcbiIsIGRldi0+bmFtZSk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybjsKKwkJfQorCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCwKKwkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQlpZiAoYnNzKSB7CisJCQlzdGEtPmxhc3RfcnNzaSA9IGJzcy0+cnNzaTsKKwkJCXN0YS0+bGFzdF9zaWduYWwgPSBic3MtPnNpZ25hbDsKKwkJCXN0YS0+bGFzdF9ub2lzZSA9IGJzcy0+bm9pc2U7CisJCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7CisJCX0KKworCQllcnIgPSBzdGFfaW5mb19pbnNlcnQoc3RhKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IFNUQSBlbnRyeSBmb3IiCisJCQkgICAgICAgIiB0aGUgQVAgKGVycm9yICVkKVxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byB1cGRhdGUgdGhlIHN0YV9pbmZvJ3MgaW5mb3JtYXRpb24gaGVyZT8KKwkgKgkgIFdlIGFscmVhZHkga25vdyBhYm91dCB0aGUgQVAgKHdlIGZvdW5kIGl0IGluIG91ciBsaXN0KSBzbyBpdAorCSAqCSAgc2hvdWxkIGFscmVhZHkgYmUgZmlsbGVkIHdpdGggdGhlIHJpZ2h0IGluZm8sIG5vPworCSAqCSAgQXMgaXMgc3RhbmRzLCBhbGwgdGhpcyBpcyByYWN5IGJlY2F1c2UgdHlwaWNhbGx5IHdlIGFzc3VtZQorCSAqCSAgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgZmlsbGVkIGluIGhlcmUgKGV4Y2VwdCBmbGFncykgZG9lc24ndAorCSAqCSAgY2hhbmdlIHdoaWxlIGEgU1RBIHN0cnVjdHVyZSBpcyBhbGl2ZS4gQXMgc3VjaCwgaXQgc2hvdWxkIG1vdmUKKwkgKgkgIHRvIGJldHdlZW4gdGhlIHN0YV9pbmZvX2FsbG9jKCkgYW5kIHN0YV9pbmZvX2luc2VydCgpIGFib3ZlLgorCSAqLworCisJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9BVVRIIHwgV0xBTl9TVEFfQVNTT0MgfCBXTEFOX1NUQV9BU1NPQ19BUCB8CisJCSAgICAgIFdMQU5fU1RBX0FVVEhPUklaRUQ7CisKKwlyYXRlcyA9IDA7CisJYmFzaWNfcmF0ZXMgPSAwOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBlbGVtcy5zdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCByYXRlID0gKGVsZW1zLnN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7CisKKwkJaWYgKHJhdGUgPiAxMTApCisJCQloYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IHRydWU7CisKKwkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspIHsKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSByYXRlKQorCQkJCXJhdGVzIHw9IEJJVChqKTsKKwkJCWlmIChlbGVtcy5zdXBwX3JhdGVzW2ldICYgMHg4MCkKKwkJCQliYXNpY19yYXRlcyB8PSBCSVQoaik7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZWxlbXMuZXh0X3N1cHBfcmF0ZXNfbGVuOyBpKyspIHsKKwkJaW50IHJhdGUgPSAoZWxlbXMuZXh0X3N1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7CisKKwkJaWYgKHJhdGUgPiAxMTApCisJCQloYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IHRydWU7CisKKwkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspIHsKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSByYXRlKQorCQkJCXJhdGVzIHw9IEJJVChqKTsKKwkJCWlmIChlbGVtcy5leHRfc3VwcF9yYXRlc1tpXSAmIDB4ODApCisJCQkJYmFzaWNfcmF0ZXMgfD0gQklUKGopOworCQl9CisJfQorCisJc3RhLT5zdXBwX3JhdGVzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdID0gcmF0ZXM7CisJc2RhdGEtPmJhc2ljX3JhdGVzID0gYmFzaWNfcmF0ZXM7CisKKwkvKiBjZi4gSUVFRSA4MDIuMTEgOS4yLjEyICovCisJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKKwkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisJZWxzZQorCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisKKwlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgZWxlbXMuaHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvIGJzc19pbmZvOworCQlpZWVlODAyMTFfaHRfY2FwX2llX3RvX2h0X2luZm8oCisJCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCisJCQkJZWxlbXMuaHRfY2FwX2VsZW0sICZzdGEtPmh0X2luZm8pOworCQlpZWVlODAyMTFfaHRfYWRkdF9pbmZvX2llX3RvX2h0X2Jzc19pbmZvKAorCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbyAqKQorCQkJCWVsZW1zLmh0X2luZm9fZWxlbSwgJmJzc19pbmZvKTsKKwkJaWVlZTgwMjExX2hhbmRsZV9odChsb2NhbCwgMSwgJnN0YS0+aHRfaW5mbywgJmJzc19pbmZvKTsKKwl9CisKKwlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSwgbG9jYWwpOworCisJaWYgKGVsZW1zLndtbV9wYXJhbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpIHsKKwkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9XTUU7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoZGV2LCBpZnN0YSwgZWxlbXMud21tX3BhcmFtLAorCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CisJfSBlbHNlCisJCXJjdV9yZWFkX3VubG9jaygpOworCisJLyogc2V0IEFJRCBhbmQgYXNzb2MgY2FwYWJpbGl0eSwKKwkgKiBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoKSB3aWxsIHRlbGwgdGhlIGRyaXZlciAqLworCWJzc19jb25mLT5haWQgPSBhaWQ7CisJYnNzX2NvbmYtPmFzc29jX2NhcGFiaWxpdHkgPSBjYXBhYl9pbmZvOworCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChkZXYsIGlmc3RhLCAxKTsKKworCWllZWU4MDIxMV9hc3NvY2lhdGVkKGRldiwgaWZzdGEpOworfQorCisKKy8qIENhbGxlciBtdXN0IGhvbGQgbG9jYWwtPnN0YV9ic3NfbG9jayAqLworc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJdTggaGFzaF9pZHg7CisKKwlpZiAoYnNzX21lc2hfY2ZnKGJzcykpCisJCWhhc2hfaWR4ID0gbWVzaF9pZF9oYXNoKGJzc19tZXNoX2lkKGJzcyksCisJCQkJCWJzc19tZXNoX2lkX2xlbihic3MpKTsKKwllbHNlCisJCWhhc2hfaWR4ID0gU1RBX0hBU0goYnNzLT5ic3NpZCk7CisKKwlic3MtPmhuZXh0ID0gbG9jYWwtPnN0YV9ic3NfaGFzaFtoYXNoX2lkeF07CisJbG9jYWwtPnN0YV9ic3NfaGFzaFtoYXNoX2lkeF0gPSBic3M7Cit9CisKKworLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+c3RhX2Jzc19sb2NrICovCitzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmIsICpwcmV2ID0gTlVMTDsKKwliID0gbG9jYWwtPnN0YV9ic3NfaGFzaFtTVEFfSEFTSChic3MtPmJzc2lkKV07CisJd2hpbGUgKGIpIHsKKwkJaWYgKGIgPT0gYnNzKSB7CisJCQlpZiAoIXByZXYpCisJCQkJbG9jYWwtPnN0YV9ic3NfaGFzaFtTVEFfSEFTSChic3MtPmJzc2lkKV0gPQorCQkJCQlic3MtPmhuZXh0OworCQkJZWxzZQorCQkJCXByZXYtPmhuZXh0ID0gYnNzLT5obmV4dDsKKwkJCWJyZWFrOworCQl9CisJCXByZXYgPSBiOworCQliID0gYi0+aG5leHQ7CisJfQorfQorCisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKgoraWVlZTgwMjExX3J4X2Jzc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmJzc2lkLCBpbnQgZnJlcSwKKwkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzczsKKworCWJzcyA9IGt6YWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJzcykKKwkJcmV0dXJuIE5VTEw7CisJYXRvbWljX2luYygmYnNzLT51c2Vycyk7CisJYXRvbWljX2luYygmYnNzLT51c2Vycyk7CisJbWVtY3B5KGJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJYnNzLT5mcmVxID0gZnJlcTsKKwlpZiAoc3NpZCAmJiBzc2lkX2xlbiA8PSBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCW1lbWNweShic3MtPnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKKwkJYnNzLT5zc2lkX2xlbiA9IHNzaWRfbGVuOworCX0KKworCXNwaW5fbG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7CisJLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KKwlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZsb2NhbC0+c3RhX2Jzc19saXN0KTsKKwlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9hZGQoZGV2LCBic3MpOworCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwlyZXR1cm4gYnNzOworfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICoKK2llZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpic3NpZCwgaW50IGZyZXEsCisJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7CisKKwlzcGluX2xvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOworCWJzcyA9IGxvY2FsLT5zdGFfYnNzX2hhc2hbU1RBX0hBU0goYnNzaWQpXTsKKwl3aGlsZSAoYnNzKSB7CisJCWlmICghYnNzX21lc2hfY2ZnKGJzcykgJiYKKwkJICAgICFtZW1jbXAoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAmJgorCQkgICAgYnNzLT5mcmVxID09IGZyZXEgJiYKKwkJICAgIGJzcy0+c3NpZF9sZW4gPT0gc3NpZF9sZW4gJiYKKwkJICAgIChzc2lkX2xlbiA9PSAwIHx8ICFtZW1jbXAoYnNzLT5zc2lkLCBzc2lkLCBzc2lkX2xlbikpKSB7CisJCQlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKKwkJCWJyZWFrOworCQl9CisJCWJzcyA9IGJzcy0+aG5leHQ7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwlyZXR1cm4gYnNzOworfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKgoraWVlZTgwMjExX3J4X21lc2hfYnNzX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuLAorCQkJICB1OCAqbWVzaF9jZmcsIGludCBmcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7CisKKwlzcGluX2xvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOworCWJzcyA9IGxvY2FsLT5zdGFfYnNzX2hhc2hbbWVzaF9pZF9oYXNoKG1lc2hfaWQsIG1lc2hfaWRfbGVuKV07CisJd2hpbGUgKGJzcykgeworCQlpZiAoYnNzX21lc2hfY2ZnKGJzcykgJiYKKwkJICAgICFtZW1jbXAoYnNzX21lc2hfY2ZnKGJzcyksIG1lc2hfY2ZnLCBNRVNIX0NGR19DTVBfTEVOKSAmJgorCQkgICAgYnNzLT5mcmVxID09IGZyZXEgJiYKKwkJICAgIG1lc2hfaWRfbGVuID09IGJzcy0+bWVzaF9pZF9sZW4gJiYKKwkJICAgIChtZXNoX2lkX2xlbiA9PSAwIHx8ICFtZW1jbXAoYnNzLT5tZXNoX2lkLCBtZXNoX2lkLAorCQkJCQkJIG1lc2hfaWRfbGVuKSkpIHsKKwkJCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOworCQkJYnJlYWs7CisJCX0KKwkJYnNzID0gYnNzLT5obmV4dDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOworCXJldHVybiBic3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKgoraWVlZTgwMjExX3J4X21lc2hfYnNzX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuLAorCQkJICB1OCAqbWVzaF9jZmcsIGludCBtZXNoX2NvbmZpZ19sZW4sIGludCBmcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7CisKKwlpZiAobWVzaF9jb25maWdfbGVuICE9IE1FU0hfQ0ZHX0xFTikKKwkJcmV0dXJuIE5VTEw7CisKKwlic3MgPSBremFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFic3MpCisJCXJldHVybiBOVUxMOworCisJYnNzLT5tZXNoX2NmZyA9IGttYWxsb2MoTUVTSF9DRkdfQ01QX0xFTiwgR0ZQX0FUT01JQyk7CisJaWYgKCFic3MtPm1lc2hfY2ZnKSB7CisJCWtmcmVlKGJzcyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChtZXNoX2lkX2xlbiAmJiBtZXNoX2lkX2xlbiA8PSBJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOKSB7CisJCWJzcy0+bWVzaF9pZCA9IGttYWxsb2MobWVzaF9pZF9sZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIWJzcy0+bWVzaF9pZCkgeworCQkJa2ZyZWUoYnNzLT5tZXNoX2NmZyk7CisJCQlrZnJlZShic3MpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJbWVtY3B5KGJzcy0+bWVzaF9pZCwgbWVzaF9pZCwgbWVzaF9pZF9sZW4pOworCX0KKworCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOworCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOworCW1lbWNweShic3MtPm1lc2hfY2ZnLCBtZXNoX2NmZywgTUVTSF9DRkdfQ01QX0xFTik7CisJYnNzLT5tZXNoX2lkX2xlbiA9IG1lc2hfaWRfbGVuOworCWJzcy0+ZnJlcSA9IGZyZXE7CisJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLworCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5zdGFfYnNzX2xpc3QpOworCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChkZXYsIGJzcyk7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOworCXJldHVybiBic3M7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19mcmVlKHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKQoreworCWtmcmVlKGJzcy0+d3BhX2llKTsKKwlrZnJlZShic3MtPnJzbl9pZSk7CisJa2ZyZWUoYnNzLT53bW1faWUpOworCWtmcmVlKGJzcy0+aHRfaWUpOworCWtmcmVlKGJzc19tZXNoX2lkKGJzcykpOworCWtmcmVlKGJzc19tZXNoX2NmZyhic3MpKTsKKwlrZnJlZShic3MpOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZic3MtPnVzZXJzKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9kZWwoZGV2LCBic3MpOworCWxpc3RfZGVsKCZic3MtPmxpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwlpZWVlODAyMTFfcnhfYnNzX2ZyZWUoYnNzKTsKK30KKworCit2b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5zdGFfYnNzX2xpc3QpOworfQorCisKK3ZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXAsICZsb2NhbC0+c3RhX2Jzc19saXN0LCBsaXN0KQorCQlpZWVlODAyMTFfcnhfYnNzX3B1dChkZXYsIGJzcyk7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCWludCByZXMsIHJhdGVzLCBpLCBqOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCBjb250cm9sOworCXN0cnVjdCByYXRlX3NlbGVjdGlvbiByYXRlc2VsOworCXU4ICpwb3M7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwkvKiBSZW1vdmUgcG9zc2libGUgU1RBIGVudHJpZXMgZnJvbSBvdGhlciBJQlNTIG5ldHdvcmtzLiAqLworCXN0YV9pbmZvX2ZsdXNoX2RlbGF5ZWQoc2RhdGEpOworCisJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgeworCQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCisJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCX0KKwltZW1jcHkoaWZzdGEtPmJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhkZXYpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gYnNzLT5iZWFjb25faW50ID49IDEwID8gYnNzLT5iZWFjb25faW50IDogMTA7CisKKwlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IGJzcy0+Y2FwYWJpbGl0eSAmCisJCVdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gMSA6IDA7CisKKwlyZXMgPSBpZWVlODAyMTFfc2V0X2ZyZXEobG9jYWwsIGJzcy0+ZnJlcSk7CisKKwlpZiAobG9jYWwtPm9wZXJfY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSUJTUyBub3QgYWxsb3dlZCBvbiBmcmVxdWVuY3kgIgorCQkgICAgICAgIiVkIE1IelxuIiwgZGV2LT5uYW1lLCBsb2NhbC0+b3Blcl9jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTZXQgYmVhY29uIHRlbXBsYXRlICovCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDApOworCWRvIHsKKwkJaWYgKCFza2IpCisJCQlicmVhazsKKworCQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwkJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKKwkJCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOworCQltZW1zZXQobWdtdCwgMCwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKKwkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9GQyhJRUVFODAyMTFfRlRZUEVfTUdNVCwKKwkJCQkJCSAgIElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOworCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPQorCQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCk7CisJCW1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihic3MtPmNhcGFiaWxpdHkpOworCisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZzdGEtPnNzaWRfbGVuKTsKKwkJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKKwkJKnBvcysrID0gaWZzdGEtPnNzaWRfbGVuOworCQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKworCQlyYXRlcyA9IGJzcy0+c3VwcF9yYXRlc19sZW47CisJCWlmIChyYXRlcyA+IDgpCisJCQlyYXRlcyA9IDg7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOworCQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSByYXRlczsKKwkJbWVtY3B5KHBvcywgYnNzLT5zdXBwX3JhdGVzLCByYXRlcyk7CisKKwkJaWYgKGJzcy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDEpOworCQkJKnBvcysrID0gV0xBTl9FSURfRFNfUEFSQU1TOworCQkJKnBvcysrID0gMTsKKwkJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChic3MtPmZyZXEpOworCQl9CisKKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKyAyKTsKKwkJKnBvcysrID0gV0xBTl9FSURfSUJTU19QQVJBTVM7CisJCSpwb3MrKyA9IDI7CisJCS8qIEZJWDogc2V0IEFUSU0gd2luZG93IGJhc2VkIG9uIHNjYW4gcmVzdWx0cyAqLworCQkqcG9zKysgPSAwOworCQkqcG9zKysgPSAwOworCisJCWlmIChic3MtPnN1cHBfcmF0ZXNfbGVuID4gOCkgeworCQkJcmF0ZXMgPSBic3MtPnN1cHBfcmF0ZXNfbGVuIC0gODsKKwkJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOworCQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCQkqcG9zKysgPSByYXRlczsKKwkJCW1lbWNweShwb3MsICZic3MtPnN1cHBfcmF0ZXNbOF0sIHJhdGVzKTsKKwkJfQorCisJCW1lbXNldCgmY29udHJvbCwgMCwgc2l6ZW9mKGNvbnRyb2wpKTsKKwkJcmF0ZV9jb250cm9sX2dldF9yYXRlKGRldiwgc2JhbmQsIHNrYiwgJnJhdGVzZWwpOworCQlpZiAoIXJhdGVzZWwucmF0ZSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIFRYIHJhdGUgIgorCQkJICAgICAgICJmb3IgSUJTUyBiZWFjb25cbiIsIGRldi0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCQljb250cm9sLnZpZiA9ICZzZGF0YS0+dmlmOworCQljb250cm9sLnR4X3JhdGUgPSByYXRlc2VsLnJhdGU7CisJCWlmIChzZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlICYmCisJCSAgICByYXRlc2VsLnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpCisJCQljb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9TSE9SVF9QUkVBTUJMRTsKKwkJY29udHJvbC5hbnRlbm5hX3NlbF90eCA9IGxvY2FsLT5ody5jb25mLmFudGVubmFfc2VsX3R4OworCQljb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9OT19BQ0s7CisJCWNvbnRyb2wucmV0cnlfbGltaXQgPSAxOworCisJCWlmc3RhLT5wcm9iZV9yZXNwID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGlmc3RhLT5wcm9iZV9yZXNwKSB7CisJCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQorCQkJCWlmc3RhLT5wcm9iZV9yZXNwLT5kYXRhOworCQkJbWdtdC0+ZnJhbWVfY29udHJvbCA9CisJCQkJSUVFRTgwMjExX0ZDKElFRUU4MDIxMV9GVFlQRV9NR01ULAorCQkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ291bGQgbm90IGFsbG9jYXRlIFByb2JlUmVzcCAiCisJCQkgICAgICAgInRlbXBsYXRlIGZvciBJQlNTXG4iLCBkZXYtPm5hbWUpOworCQl9CisKKwkJaWYgKGxvY2FsLT5vcHMtPmJlYWNvbl91cGRhdGUgJiYKKwkJICAgIGxvY2FsLT5vcHMtPmJlYWNvbl91cGRhdGUobG9jYWxfdG9faHcobG9jYWwpLAorCQkJCQkgICAgIHNrYiwgJmNvbnRyb2wpID09IDApIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ29uZmlndXJlZCBJQlNTIGJlYWNvbiAiCisJCQkgICAgICAgInRlbXBsYXRlXG4iLCBkZXYtPm5hbWUpOworCQkJc2tiID0gTlVMTDsKKwkJfQorCisJCXJhdGVzID0gMDsKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCQlmb3IgKGkgPSAwOyBpIDwgYnNzLT5zdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCQlpbnQgYml0cmF0ZSA9IChic3MtPnN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7CisJCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykKKwkJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gYml0cmF0ZSkKKwkJCQkJcmF0ZXMgfD0gQklUKGopOworCQl9CisJCWlmc3RhLT5zdXBwX3JhdGVzX2JpdHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF0gPSByYXRlczsKKworCQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKGRldiwgYnNzLCAxKTsKKwl9IHdoaWxlICgwKTsKKworCWlmIChza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gY29uZmlndXJlIElCU1MgYmVhY29uICIKKwkJICAgICAgICJ0ZW1wbGF0ZVxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKworCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX0pPSU5FRDsKKwltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKworCWllZWU4MDIxMV9yeF9ic3NfcHV0KGRldiwgYnNzKTsKKworCXJldHVybiByZXM7Cit9CisKK3U2NCBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXM7CisJc2l6ZV90IG51bV9yYXRlczsKKwl1NjQgc3VwcF9yYXRlczsKKwlpbnQgaSwgajsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CisKKwlpZiAoIXNiYW5kKSB7CisJCVdBUk5fT04oMSk7CisJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwl9CisKKwliaXRyYXRlcyA9IHNiYW5kLT5iaXRyYXRlczsKKwludW1fcmF0ZXMgPSBzYmFuZC0+bl9iaXRyYXRlczsKKwlzdXBwX3JhdGVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuICsKKwkJICAgICBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXNfbGVuOyBpKyspIHsKKwkJdTggcmF0ZSA9IDA7CisJCWludCBvd25fcmF0ZTsKKwkJaWYgKGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4pCisJCQlyYXRlID0gZWxlbXMtPnN1cHBfcmF0ZXNbaV07CisJCWVsc2UgaWYgKGVsZW1zLT5leHRfc3VwcF9yYXRlcykKKwkJCXJhdGUgPSBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMKKwkJCQlbaSAtIGVsZW1zLT5zdXBwX3JhdGVzX2xlbl07CisJCW93bl9yYXRlID0gNSAqIChyYXRlICYgMHg3Zik7CisJCWZvciAoaiA9IDA7IGogPCBudW1fcmF0ZXM7IGorKykKKwkJCWlmIChiaXRyYXRlc1tqXS5iaXRyYXRlID09IG93bl9yYXRlKQorCQkJCXN1cHBfcmF0ZXMgfD0gQklUKGopOworCX0KKwlyZXR1cm4gc3VwcF9yYXRlczsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgIHNpemVfdCBsZW4sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAorCQkJCSAgaW50IGJlYWNvbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCXNpemVfdCBiYXNlbGVuOworCWludCBmcmVxLCBjbGVuOworCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwl1NjQgYmVhY29uX3RpbWVzdGFtcCwgcnhfdGltZXN0YW1wOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlERUNMQVJFX01BQ19CVUYobWFjMik7CisKKwlpZiAoIWJlYWNvbiAmJiBtZW1jbXAobWdtdC0+ZGEsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKKwkJcmV0dXJuOyAvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggJXMgZnJvbSAlcyB0byAlc1xuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBiZWFjb24gPyAiQmVhY29uIiA6ICJQcm9iZSBSZXNwb25zZSIsCisJICAgICAgIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwgcHJpbnRfbWFjKG1hYzIsIG1nbXQtPmRhKSk7CisjZW5kaWYKKworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKKwlpZiAoYmFzZWxlbiA+IGxlbikKKwkJcmV0dXJuOworCisJYmVhY29uX3RpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KG1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCk7CisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKKworCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmIGVsZW1zLm1lc2hfaWQgJiYKKwkgICAgZWxlbXMubWVzaF9jb25maWcgJiYgbWVzaF9tYXRjaGVzX2xvY2FsKCZlbGVtcywgZGV2KSkgeworCQl1NjQgcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgJmVsZW1zLAorCQkJCQkJcnhfc3RhdHVzLT5iYW5kKTsKKworCQltZXNoX25laWdoYm91cl91cGRhdGUobWdtdC0+c2EsIHJhdGVzLCBkZXYsCisJCQkJICAgICAgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKCZlbGVtcywgZGV2KSk7CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmIGVsZW1zLnN1cHBfcmF0ZXMgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKSA9PSAwICYmCisJICAgIChzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKSkpIHsKKwkJdTY0IHByZXZfcmF0ZXM7CisJCXU2NCBzdXBwX3JhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsICZlbGVtcywKKwkJCQkJCQlyeF9zdGF0dXMtPmJhbmQpOworCisJCXByZXZfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbcnhfc3RhdHVzLT5iYW5kXTsKKwkJc3RhLT5zdXBwX3JhdGVzW3J4X3N0YXR1cy0+YmFuZF0gJj0gc3VwcF9yYXRlczsKKwkJaWYgKHN0YS0+c3VwcF9yYXRlc1tyeF9zdGF0dXMtPmJhbmRdID09IDApIHsKKwkJCS8qIE5vIG1hdGNoaW5nIHJhdGVzIC0gdGhpcyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4uCisJCQkgKiBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgcmF0ZSBpcyBtYXJrZWQKKwkJCSAqIHN1cHBvcnRlZCB0byBhdm9pZCBpc3N1ZXMgd2l0aCBUWCByYXRlIGN0cmwuICovCisJCQlzdGEtPnN1cHBfcmF0ZXNbcnhfc3RhdHVzLT5iYW5kXSA9CisJCQkJc2RhdGEtPnUuc3RhLnN1cHBfcmF0ZXNfYml0c1tyeF9zdGF0dXMtPmJhbmRdOworCQl9CisJCWlmIChzdGEtPnN1cHBfcmF0ZXNbcnhfc3RhdHVzLT5iYW5kXSAhPSBwcmV2X3JhdGVzKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgZm9yICIKKwkJCSAgICAgICAiJXMgYmFzZWQgb24gYmVhY29uIGluZm8gKDB4JWxseCAmIDB4JWxseCAtPiAiCisJCQkgICAgICAgIjB4JWxseClcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHByZXZfcmF0ZXMsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3VwcF9yYXRlcywKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN1cHBfcmF0ZXNbcnhfc3RhdHVzLT5iYW5kXSk7CisJCX0KKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChlbGVtcy5kc19wYXJhbXMgJiYgZWxlbXMuZHNfcGFyYW1zX2xlbiA9PSAxKQorCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGVsZW1zLmRzX3BhcmFtc1swXSk7CisJZWxzZQorCQlmcmVxID0gcnhfc3RhdHVzLT5mcmVxOworCisJY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksIGZyZXEpOworCisJaWYgKCFjaGFubmVsIHx8IGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCXJldHVybjsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJaWYgKGVsZW1zLm1lc2hfY29uZmlnKQorCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfZ2V0KGRldiwgZWxlbXMubWVzaF9pZCwKKwkJCQllbGVtcy5tZXNoX2lkX2xlbiwgZWxlbXMubWVzaF9jb25maWcsIGZyZXEpOworCWVsc2UKKyNlbmRpZgorCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIG1nbXQtPmJzc2lkLCBmcmVxLAorCQkJCQkgICBlbGVtcy5zc2lkLCBlbGVtcy5zc2lkX2xlbik7CisJaWYgKCFic3MpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCQlpZiAoZWxlbXMubWVzaF9jb25maWcpCisJCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfYWRkKGRldiwgZWxlbXMubWVzaF9pZCwKKwkJCQllbGVtcy5tZXNoX2lkX2xlbiwgZWxlbXMubWVzaF9jb25maWcsCisJCQkJZWxlbXMubWVzaF9jb25maWdfbGVuLCBmcmVxKTsKKwkJZWxzZQorI2VuZGlmCisJCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChkZXYsIG1nbXQtPmJzc2lkLCBmcmVxLAorCQkJCQkJICAgZWxlbXMuc3NpZCwgZWxlbXMuc3NpZF9sZW4pOworCQlpZiAoIWJzcykKKwkJCXJldHVybjsKKwl9IGVsc2UgeworI2lmIDAKKwkJLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KKwkJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5zdGFfYnNzX2xpc3QpOworCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7CisjZW5kaWYKKwl9CisKKwkvKiBzYXZlIHRoZSBFUlAgdmFsdWUgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgYXQgYXNzb2NpYXRpb24gdGltZSAqLworCWlmIChlbGVtcy5lcnBfaW5mbyAmJiBlbGVtcy5lcnBfaW5mb19sZW4gPj0gMSkgeworCQlic3MtPmVycF92YWx1ZSA9IGVsZW1zLmVycF9pbmZvWzBdOworCQlic3MtPmhhc19lcnBfdmFsdWUgPSAxOworCX0KKworCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJgorCSAgICAgKCFic3MtPmh0X2llIHx8IGJzcy0+aHRfaWVfbGVuICE9IGVsZW1zLmh0X2NhcF9lbGVtX2xlbiB8fAorCSAgICAgbWVtY21wKGJzcy0+aHRfaWUsIGVsZW1zLmh0X2NhcF9lbGVtLCBlbGVtcy5odF9jYXBfZWxlbV9sZW4pKSkgeworCQlrZnJlZShic3MtPmh0X2llKTsKKwkJYnNzLT5odF9pZSA9IGttYWxsb2MoZWxlbXMuaHRfY2FwX2VsZW1fbGVuICsgMiwgR0ZQX0FUT01JQyk7CisJCWlmIChic3MtPmh0X2llKSB7CisJCQltZW1jcHkoYnNzLT5odF9pZSwgZWxlbXMuaHRfY2FwX2VsZW0gLSAyLAorCQkJCWVsZW1zLmh0X2NhcF9lbGVtX2xlbiArIDIpOworCQkJYnNzLT5odF9pZV9sZW4gPSBlbGVtcy5odF9jYXBfZWxlbV9sZW4gKyAyOworCQl9IGVsc2UKKwkJCWJzcy0+aHRfaWVfbGVuID0gMDsKKwl9IGVsc2UgaWYgKCFlbGVtcy5odF9jYXBfZWxlbSAmJiBic3MtPmh0X2llKSB7CisJCWtmcmVlKGJzcy0+aHRfaWUpOworCQlic3MtPmh0X2llID0gTlVMTDsKKwkJYnNzLT5odF9pZV9sZW4gPSAwOworCX0KKworCWJzcy0+YmVhY29uX2ludCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQpOworCWJzcy0+Y2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pOworCisJYnNzLT5zdXBwX3JhdGVzX2xlbiA9IDA7CisJaWYgKGVsZW1zLnN1cHBfcmF0ZXMpIHsKKwkJY2xlbiA9IElFRUU4MDIxMV9NQVhfU1VQUF9SQVRFUyAtIGJzcy0+c3VwcF9yYXRlc19sZW47CisJCWlmIChjbGVuID4gZWxlbXMuc3VwcF9yYXRlc19sZW4pCisJCQljbGVuID0gZWxlbXMuc3VwcF9yYXRlc19sZW47CisJCW1lbWNweSgmYnNzLT5zdXBwX3JhdGVzW2Jzcy0+c3VwcF9yYXRlc19sZW5dLCBlbGVtcy5zdXBwX3JhdGVzLAorCQkgICAgICAgY2xlbik7CisJCWJzcy0+c3VwcF9yYXRlc19sZW4gKz0gY2xlbjsKKwl9CisJaWYgKGVsZW1zLmV4dF9zdXBwX3JhdGVzKSB7CisJCWNsZW4gPSBJRUVFODAyMTFfTUFYX1NVUFBfUkFURVMgLSBic3MtPnN1cHBfcmF0ZXNfbGVuOworCQlpZiAoY2xlbiA+IGVsZW1zLmV4dF9zdXBwX3JhdGVzX2xlbikKKwkJCWNsZW4gPSBlbGVtcy5leHRfc3VwcF9yYXRlc19sZW47CisJCW1lbWNweSgmYnNzLT5zdXBwX3JhdGVzW2Jzcy0+c3VwcF9yYXRlc19sZW5dLAorCQkgICAgICAgZWxlbXMuZXh0X3N1cHBfcmF0ZXMsIGNsZW4pOworCQlic3MtPnN1cHBfcmF0ZXNfbGVuICs9IGNsZW47CisJfQorCisJYnNzLT5iYW5kID0gcnhfc3RhdHVzLT5iYW5kOworCisJYnNzLT50aW1lc3RhbXAgPSBiZWFjb25fdGltZXN0YW1wOworCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOworCWJzcy0+cnNzaSA9IHJ4X3N0YXR1cy0+c3NpOworCWJzcy0+c2lnbmFsID0gcnhfc3RhdHVzLT5zaWduYWw7CisJYnNzLT5ub2lzZSA9IHJ4X3N0YXR1cy0+bm9pc2U7CisJaWYgKCFiZWFjb24gJiYgIWJzcy0+cHJvYmVfcmVzcCkKKwkJYnNzLT5wcm9iZV9yZXNwID0gdHJ1ZTsKKworCS8qCisJICogSW4gU1RBIG1vZGUsIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyBzaG91bGQgbm90IGJlIG92ZXJyaWRkZW4KKwkgKiBieSBiZWFjb25zIGJlY2F1c2UgdGhleSdyZSBub3QgbmVjZXNzYXJpbHkgYWNjdXJhdGUgdGhlcmUuCisJICovCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCisJICAgIGJzcy0+cHJvYmVfcmVzcCAmJiBiZWFjb24pIHsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOworCQlyZXR1cm47CisJfQorCisJaWYgKGVsZW1zLndwYSAmJgorCSAgICAoIWJzcy0+d3BhX2llIHx8IGJzcy0+d3BhX2llX2xlbiAhPSBlbGVtcy53cGFfbGVuIHx8CisJICAgICBtZW1jbXAoYnNzLT53cGFfaWUsIGVsZW1zLndwYSwgZWxlbXMud3BhX2xlbikpKSB7CisJCWtmcmVlKGJzcy0+d3BhX2llKTsKKwkJYnNzLT53cGFfaWUgPSBrbWFsbG9jKGVsZW1zLndwYV9sZW4gKyAyLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGJzcy0+d3BhX2llKSB7CisJCQltZW1jcHkoYnNzLT53cGFfaWUsIGVsZW1zLndwYSAtIDIsIGVsZW1zLndwYV9sZW4gKyAyKTsKKwkJCWJzcy0+d3BhX2llX2xlbiA9IGVsZW1zLndwYV9sZW4gKyAyOworCQl9IGVsc2UKKwkJCWJzcy0+d3BhX2llX2xlbiA9IDA7CisJfSBlbHNlIGlmICghZWxlbXMud3BhICYmIGJzcy0+d3BhX2llKSB7CisJCWtmcmVlKGJzcy0+d3BhX2llKTsKKwkJYnNzLT53cGFfaWUgPSBOVUxMOworCQlic3MtPndwYV9pZV9sZW4gPSAwOworCX0KKworCWlmIChlbGVtcy5yc24gJiYKKwkgICAgKCFic3MtPnJzbl9pZSB8fCBic3MtPnJzbl9pZV9sZW4gIT0gZWxlbXMucnNuX2xlbiB8fAorCSAgICAgbWVtY21wKGJzcy0+cnNuX2llLCBlbGVtcy5yc24sIGVsZW1zLnJzbl9sZW4pKSkgeworCQlrZnJlZShic3MtPnJzbl9pZSk7CisJCWJzcy0+cnNuX2llID0ga21hbGxvYyhlbGVtcy5yc25fbGVuICsgMiwgR0ZQX0FUT01JQyk7CisJCWlmIChic3MtPnJzbl9pZSkgeworCQkJbWVtY3B5KGJzcy0+cnNuX2llLCBlbGVtcy5yc24gLSAyLCBlbGVtcy5yc25fbGVuICsgMik7CisJCQlic3MtPnJzbl9pZV9sZW4gPSBlbGVtcy5yc25fbGVuICsgMjsKKwkJfSBlbHNlCisJCQlic3MtPnJzbl9pZV9sZW4gPSAwOworCX0gZWxzZSBpZiAoIWVsZW1zLnJzbiAmJiBic3MtPnJzbl9pZSkgeworCQlrZnJlZShic3MtPnJzbl9pZSk7CisJCWJzcy0+cnNuX2llID0gTlVMTDsKKwkJYnNzLT5yc25faWVfbGVuID0gMDsKKwl9CisKKwkvKgorCSAqIENmLgorCSAqIGh0dHA6Ly93d3cud2lwby5pbnQvcGN0ZGIvZW4vd28uanNwP3dvPTIwMDcwNDcxODEmSUE9V08yMDA3MDQ3MTgxJkRJU1BMQVk9REVTQworCSAqCisJICogcXVvdGluZzoKKwkgKgorCSAqIEluIHBhcnRpY3VsYXIsICJXaS1GaSBDRVJUSUZJRUQgZm9yIFdNTSAtIFN1cHBvcnQgZm9yIE11bHRpbWVkaWEKKwkgKiBBcHBsaWNhdGlvbnMgd2l0aCBRdWFsaXR5IG9mIFNlcnZpY2UgaW4gV2ktRmkgTmV0d29ya3MsIiBXaS0gRmkKKwkgKiBBbGxpYW5jZSAoU2VwdGVtYmVyIDEsIDIwMDQpIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVuY2UgaGVyZWluLgorCSAqIFRoZSBpbmNsdXNpb24gb2YgdGhlIFdNTSBQYXJhbWV0ZXJzIGluIHByb2JlIHJlc3BvbnNlcyBhbmQKKwkgKiBhc3NvY2lhdGlvbiByZXNwb25zZXMgaXMgbWFuZGF0b3J5IGZvciBXTU0gZW5hYmxlZCBuZXR3b3Jrcy4gVGhlCisJICogaW5jbHVzaW9uIG9mIHRoZSBXTU0gUGFyYW1ldGVycyBpbiBiZWFjb25zLCBob3dldmVyLCBpcyBvcHRpb25hbC4KKwkgKi8KKworCWlmIChlbGVtcy53bW1fcGFyYW0gJiYKKwkgICAgKCFic3MtPndtbV9pZSB8fCBic3MtPndtbV9pZV9sZW4gIT0gZWxlbXMud21tX3BhcmFtX2xlbiB8fAorCSAgICAgbWVtY21wKGJzcy0+d21tX2llLCBlbGVtcy53bW1fcGFyYW0sIGVsZW1zLndtbV9wYXJhbV9sZW4pKSkgeworCQlrZnJlZShic3MtPndtbV9pZSk7CisJCWJzcy0+d21tX2llID0ga21hbGxvYyhlbGVtcy53bW1fcGFyYW1fbGVuICsgMiwgR0ZQX0FUT01JQyk7CisJCWlmIChic3MtPndtbV9pZSkgeworCQkJbWVtY3B5KGJzcy0+d21tX2llLCBlbGVtcy53bW1fcGFyYW0gLSAyLAorCQkJICAgICAgIGVsZW1zLndtbV9wYXJhbV9sZW4gKyAyKTsKKwkJCWJzcy0+d21tX2llX2xlbiA9IGVsZW1zLndtbV9wYXJhbV9sZW4gKyAyOworCQl9IGVsc2UKKwkJCWJzcy0+d21tX2llX2xlbiA9IDA7CisJfSBlbHNlIGlmICghZWxlbXMud21tX3BhcmFtICYmIGJzcy0+d21tX2llKSB7CisJCWtmcmVlKGJzcy0+d21tX2llKTsKKwkJYnNzLT53bW1faWUgPSBOVUxMOworCQlic3MtPndtbV9pZV9sZW4gPSAwOworCX0KKworCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gbWVyZ2UgSUJTUyAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJiBiZWFjb24gJiYKKwkgICAgIWxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgJiYgIWxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcgJiYKKwkgICAgYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MgJiYKKwkgICAgYnNzLT5mcmVxID09IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxICYmCisJICAgIGVsZW1zLnNzaWRfbGVuID09IHNkYXRhLT51LnN0YS5zc2lkX2xlbiAmJgorCSAgICBtZW1jbXAoZWxlbXMuc3NpZCwgc2RhdGEtPnUuc3RhLnNzaWQsIHNkYXRhLT51LnN0YS5zc2lkX2xlbikgPT0gMCkgeworCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7CisJCQkvKiBpbiBvcmRlciBmb3IgY29ycmVjdCBJQlNTIG1lcmdpbmcgd2UgbmVlZCBtYWN0aW1lCisJCQkgKgorCQkJICogc2luY2UgbWFjdGltZSBpcyBkZWZpbmVkIGFzIHRoZSB0aW1lIHRoZSBmaXJzdCBkYXRhCisJCQkgKiBzeW1ib2wgb2YgdGhlIGZyYW1lIGhpdHMgdGhlIFBIWSwgYW5kIHRoZSB0aW1lc3RhbXAKKwkJCSAqIG9mIHRoZSBiZWFjb24gaXMgZGVmaW5lZCBhcyAidGhlIHRpbWUgdGhhdCB0aGUgZGF0YQorCQkJICogc3ltYm9sIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGJpdCBvZiB0aGUgdGltZXN0YW1wIGlzCisJCQkgKiB0cmFuc21pdHRlZCB0byB0aGUgUEhZIHBsdXMgdGhlIHRyYW5zbWl0dGluZyBTVEHigJlzCisJCQkgKiBkZWxheXMgdGhyb3VnaCBpdHMgbG9jYWwgUEhZIGZyb20gdGhlIE1BQy1QSFkKKwkJCSAqIGludGVyZmFjZSB0byBpdHMgaW50ZXJmYWNlIHdpdGggdGhlIFdNIgorCQkJICogKDgwMi4xMSAxMS4xLjIpIC0gZXF1YWxzIHRoZSB0aW1lIHRoaXMgYml0IGFycml2ZXMgYXQKKwkJCSAqIHRoZSByZWNlaXZlciAtIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlCisJCQkgKiBvZmZzZXQgYmV0d2VlbiB0aGUgdHdvLgorCQkJICogZS5nOiBhdCAxIE1CaXQgdGhhdCBtZWFucyBtYWN0aW1lIGlzIDE5MiB1c2VjIGVhcmxpZXIKKwkJCSAqICg9MjQgYnl0ZXMgKiA4IHVzZWNzL2J5dGUpIHRoYW4gdGhlIGJlYWNvbiB0aW1lc3RhbXAuCisJCQkgKi8KKwkJCWludCByYXRlID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tyeF9zdGF0dXMtPmJhbmRdLT4KKwkJCQkJYml0cmF0ZXNbcnhfc3RhdHVzLT5yYXRlX2lkeF0uYml0cmF0ZTsKKwkJCXJ4X3RpbWVzdGFtcCA9IHJ4X3N0YXR1cy0+bWFjdGltZSArICgyNCAqIDggKiAxMCAvIHJhdGUpOworCQl9IGVsc2UgaWYgKGxvY2FsICYmIGxvY2FsLT5vcHMgJiYgbG9jYWwtPm9wcy0+Z2V0X3RzZikKKwkJCS8qIHNlY29uZCBiZXN0IG9wdGlvbjogZ2V0IGN1cnJlbnQgVFNGICovCisJCQlyeF90aW1lc3RhbXAgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJCWVsc2UKKwkJCS8qIGNhbid0IG1lcmdlIHdpdGhvdXQga25vd2luZyB0aGUgVFNGICovCisJCQlyeF90aW1lc3RhbXAgPSAtMUxMVTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVzIEJTU0lEPSIKKwkJICAgICAgICIlcyBUU0Y9MHglbGx4IEJDTj0weCVsbHggZGlmZj0lbGxkIEAlbHVcbiIsCisJCSAgICAgICBwcmludF9tYWMobWFjLCBtZ210LT5zYSksCisJCSAgICAgICBwcmludF9tYWMobWFjMiwgbWdtdC0+YnNzaWQpLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyeF90aW1lc3RhbXAsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlYWNvbl90aW1lc3RhbXAsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShyeF90aW1lc3RhbXAgLSBiZWFjb25fdGltZXN0YW1wKSwKKwkJICAgICAgIGppZmZpZXMpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisJCWlmIChiZWFjb25fdGltZXN0YW1wID4gcnhfdGltZXN0YW1wKSB7CisjaWZuZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorI2VuZGlmCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKKwkJCQkgICAgICAgImxvY2FsIFRTRiAtIElCU1MgbWVyZ2Ugd2l0aCBCU1NJRCAlc1xuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBtZ210LT5ic3NpZCkpOworCQkJaWVlZTgwMjExX3N0YV9qb2luX2lic3MoZGV2LCAmc2RhdGEtPnUuc3RhLCBic3MpOworCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShkZXYsIE5VTEwsCisJCQkJCSAgICAgICBtZ210LT5ic3NpZCwgbWdtdC0+c2EpOworCQl9CisJfQorCisJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBic3MpOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJIHNpemVfdCBsZW4sCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhkZXYsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAwKTsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgIHNpemVfdCBsZW4sCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbC0+aHcuY29uZjsKKwl1MzIgY2hhbmdlZCA9IDA7CisKKwlpZWVlODAyMTFfcnhfYnNzX2luZm8oZGV2LCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgMSk7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCisJCXJldHVybjsKKwlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisKKwlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHx8CisJICAgIG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuOworCisJLyogUHJvY2VzcyBiZWFjb24gZnJvbSB0aGUgY3VycmVudCBCU1MgKi8KKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybjsKKworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sICZlbGVtcyk7CisKKwlpZiAoZWxlbXMud21tX3BhcmFtICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgeworCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMoZGV2LCBpZnN0YSwgZWxlbXMud21tX3BhcmFtLAorCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CisJfQorCisJLyogRG8gbm90IHNlbmQgY2hhbmdlcyB0byBkcml2ZXIgaWYgd2UgYXJlIHNjYW5uaW5nLiBUaGlzIHJlbW92ZXMKKwkgKiByZXF1aXJlbWVudCB0aGF0IGRyaXZlcidzIGJzc19pbmZvX2NoYW5nZWQgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKwkgKiBhdG9taWMuICovCisJaWYgKGxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgfHwgbG9jYWwtPnN0YV9od19zY2FubmluZykKKwkJcmV0dXJuOworCisJaWYgKGVsZW1zLmVycF9pbmZvICYmIGVsZW1zLmVycF9pbmZvX2xlbiA+PSAxKQorCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfZXJwX2llKHNkYXRhLCBlbGVtcy5lcnBfaW5mb1swXSk7CisJZWxzZSB7CisJCXUxNiBjYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pOworCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfcHJvdGVjdF9wcmVhbWIoc2RhdGEsIGZhbHNlLAorCQkJCShjYXBhYiAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgIT0gMCk7CisJfQorCisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJgorCSAgICBlbGVtcy53bW1fcGFyYW0gJiYgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9TVVBQT1JUX0hUX01PREUpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyBic3NfaW5mbzsKKworCQlpZWVlODAyMTFfaHRfYWRkdF9pbmZvX2llX3RvX2h0X2Jzc19pbmZvKAorCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbyAqKQorCQkJCWVsZW1zLmh0X2luZm9fZWxlbSwgJmJzc19pbmZvKTsKKwkJY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2h0KGxvY2FsLCAxLCAmY29uZi0+aHRfY29uZiwKKwkJCQkJICAgICAgICZic3NfaW5mbyk7CisJfQorCisJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJc2l6ZV90IGxlbiwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpbnQgdHhfbGFzdF9iZWFjb247CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CisJdTggKnBvcywgKmVuZDsKKwlERUNMQVJFX01BQ19CVUYobWFjKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCURFQ0xBUkVfTUFDX0JVRihtYWMyKTsKKwlERUNMQVJFX01BQ19CVUYobWFjMyk7CisjZW5kaWYKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyB8fAorCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfSk9JTkVEIHx8CisJICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZzdGEtPnByb2JlX3Jlc3ApCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKKwkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOworCWVsc2UKKwkJdHhfbGFzdF9iZWFjb24gPSAxOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVzIERBPSVzIEJTU0lEPSIKKwkgICAgICAgIiVzICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpLCBwcmludF9tYWMobWFjMiwgbWdtdC0+ZGEpLAorCSAgICAgICBwcmludF9tYWMobWFjMywgbWdtdC0+YnNzaWQpLCB0eF9sYXN0X2JlYWNvbik7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCWlmICghdHhfbGFzdF9iZWFjb24pCisJCXJldHVybjsKKworCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybjsKKworCWVuZCA9ICgodTggKikgbWdtdCkgKyBsZW47CisJcG9zID0gbWdtdC0+dS5wcm9iZV9yZXEudmFyaWFibGU7CisJaWYgKHBvc1swXSAhPSBXTEFOX0VJRF9TU0lEIHx8CisJICAgIHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIFNTSUQgSUUgaW4gUHJvYmVSZXEgIgorCQkJICAgICAgICJmcm9tICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgbWdtdC0+c2EpKTsKKwkJfQorCQlyZXR1cm47CisJfQorCWlmIChwb3NbMV0gIT0gMCAmJgorCSAgICAocG9zWzFdICE9IGlmc3RhLT5zc2lkX2xlbiB8fAorCSAgICAgbWVtY21wKHBvcyArIDIsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pICE9IDApKSB7CisJCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCisJCXJldHVybjsKKwl9CisKKwkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLworCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXNcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgcmVzcC0+ZGEpKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCWllZWU4MDIxMV9zdGFfdHgoZGV2LCBza2IsIDApOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hY3Rpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgIHNpemVfdCBsZW4sCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5KSB7CisJY2FzZSBXTEFOX0NBVEVHT1JZX0JBQ0s6CisJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUpIHsKKwkJY2FzZSBXTEFOX0FDVElPTl9BRERCQV9SRVE6CisJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKworCQkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcSkpKQorCQkJCWJyZWFrOworCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2FkZGJhX3JlcXVlc3QoZGV2LCBtZ210LCBsZW4pOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVTUDoKKwkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCisJCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcCkpKQorCQkJCWJyZWFrOworCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2FkZGJhX3Jlc3AoZGV2LCBtZ210LCBsZW4pOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9BQ1RJT05fREVMQkE6CisJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKworCQkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51LmRlbGJhKSkpCisJCQkJYnJlYWs7CisJCQlpZWVlODAyMTFfc3RhX3Byb2Nlc3NfZGVsYmEoZGV2LCBtZ210LCBsZW4pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSeCB1bmtub3duIEEtTVBEVSBhY3Rpb25cbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBMSU5LX0NBVEVHT1JZOgorCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKKwkJCW1lc2hfcnhfcGxpbmtfZnJhbWUoZGV2LCBtZ210LCBsZW4sIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgTUVTSF9QQVRIX1NFTF9DQVRFR09SWToKKwkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCisJCQltZXNoX3J4X3BhdGhfc2VsX2ZyYW1lKGRldiwgbWdtdCwgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUnggdW5rbm93biBhY3Rpb24gZnJhbWUgLSAiCisJCQkiY2F0ZWdvcnk9JWRcbiIsIGRldi0+bmFtZSwgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgZmM7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCkKKwkJZ290byBmYWlsOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKKwkJbWVtY3B5KHNrYi0+Y2IsIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKKwkJc2tiX3F1ZXVlX3RhaWwoJmlmc3RhLT5za2JfcXVldWUsIHNrYik7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgdW5rbm93biBtYW5hZ2VtZW50IGZyYW1lIC0gIgorCQkgICAgICAgInN0eXBlPSVkXG4iLCBkZXYtPm5hbWUsCisJCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCk7CisJCWJyZWFrOworCX0KKworIGZhaWw6CisJa2ZyZWVfc2tiKHNrYik7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGZjOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKworCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgorCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoZGV2LCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICByeF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKGRldiwgbWdtdCwgc2tiLT5sZW4sIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKGRldiwgbWdtdCwgc2tiLT5sZW4sIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCWllZWU4MDIxMV9yeF9tZ210X2F1dGgoZGV2LCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgorCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sIDApOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CisJCWllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIGlmc3RhLCBtZ210LCBza2ItPmxlbiwgMSk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKKwkJaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKGRldiwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CisJCWllZWU4MDIxMV9yeF9tZ210X2Rpc2Fzc29jKGRldiwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgorCQlpZWVlODAyMTFfcnhfbWdtdF9hY3Rpb24oZGV2LCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCX0KKworCWtmcmVlX3NrYihza2IpOworfQorCisKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9zdGFfcnhfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgZmM7CisKKwlpZiAoc2tiLT5sZW4gPCAyKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpIHsKKwkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCkgeworCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChkZXYsIG1nbXQsCisJCQkJCQkgICAgIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJcmV0dXJuIFJYX1FVRVVFRDsKKwkJfSBlbHNlIGlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikgeworCQkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKGRldiwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCQkgcnhfc3RhdHVzKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybiBSWF9RVUVVRUQ7CisJCX0KKwl9CisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJaW50IGFjdGl2ZSA9IDA7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCisJCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAorCQkJICAgICAgIGppZmZpZXMpKSB7CisJCQlhY3RpdmUrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gYWN0aXZlOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfZXhwaXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXhwX3RpbWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGEtPmxhc3RfcnggKyBleHBfdGltZSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhwaXJpbmcgaW5hY3RpdmUgU1RBICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CisJCQlfX3N0YV9pbmZvX3VubGluaygmc3RhKTsKKwkJCWlmIChzdGEpCisJCQkJbGlzdF9hZGQoJnN0YS0+bGlzdCwgJnRtcF9saXN0KTsKKwkJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCAmdG1wX2xpc3QsIGxpc3QpCisJCXN0YV9pbmZvX2Rlc3Ryb3koc3RhKTsKK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3sKKwltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKworCWllZWU4MDIxMV9zdGFfZXhwaXJlKGRldiwgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCk7CisJaWYgKGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3MoZGV2KSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKKwkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgZGV2LT5uYW1lKTsKKwlpZWVlODAyMTFfc3RhX3JlcV9zY2FuKGRldiwgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Cit9CisKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICitzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9ob3VzZWtlZXBpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJYm9vbCBmcmVlX3BsaW5rczsKKworCWllZWU4MDIxMV9zdGFfZXhwaXJlKGRldiwgSUVFRTgwMjExX01FU0hfUEVFUl9JTkFDVElWSVRZX0xJTUlUKTsKKwltZXNoX3BhdGhfZXhwaXJlKGRldik7CisKKwlmcmVlX3BsaW5rcyA9IG1lc2hfcGxpbmtfYXZhaWxhYmxlcyhzZGF0YSk7CisJaWYgKGZyZWVfcGxpbmtzICE9IHNkYXRhLT51LnN0YS5hY2NlcHRpbmdfcGxpbmtzKQorCQlpZWVlODAyMTFfaWZfY29uZmlnX2JlYWNvbihkZXYpOworCisJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCQkJSUVFRTgwMjExX01FU0hfSE9VU0VLRUVQSU5HX0lOVEVSVkFMKTsKK30KKworCit2b2lkIGllZWU4MDIxMV9zdGFydF9tZXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX01FU0hfVVA7CisJaWVlZTgwMjExX3N0YV90aW1lcigodW5zaWduZWQgbG9uZylzZGF0YSk7Cit9CisjZW5kaWYKKworCit2b2lkIGllZWU4MDIxMV9zdGFfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KCZzZGF0YS0+d2Rldik7CisKKwlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3N0YV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LnN0YS53b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2RhdGEtPmRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+c3RhX3N3X3NjYW5uaW5nIHx8IGxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcpCisJCXJldHVybjsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogaWVlZTgwMjExX3N0YV93b3JrOiBub24tU1RBIGludGVyZmFjZSAiCisJCSAgICAgICAiKHR5cGU9JWQpXG4iLCBkZXYtPm5hbWUsIHNkYXRhLT52aWYudHlwZSk7CisJCXJldHVybjsKKwl9CisJaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZzdGEtPnNrYl9xdWV1ZSkpKQorCQlpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KGRldiwgc2tiKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJaWYgKGlmc3RhLT5wcmVxX3F1ZXVlX2xlbiAmJgorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsCisJCSAgICAgICBpZnN0YS0+bGFzdF9wcmVxICsgbXNlY3NfdG9famlmZmllcyhpZnN0YS0+bXNoY2ZnLmRvdDExTWVzaEhXTVBwcmVxTWluSW50ZXJ2YWwpKSkKKwkJbWVzaF9wYXRoX3N0YXJ0X2Rpc2NvdmVyeShkZXYpOworI2VuZGlmCisKKwlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9BVVRIRU5USUNBVEUgJiYKKwkgICAgaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9BU1NPQ0lBVEUgJiYKKwkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZnN0YS0+cmVxdWVzdCkpIHsKKwkJaWYgKGlmc3RhLT5zY2FuX3NzaWRfbGVuKQorCQkJaWVlZTgwMjExX3N0YV9zdGFydF9zY2FuKGRldiwgaWZzdGEtPnNjYW5fc3NpZCwgaWZzdGEtPnNjYW5fc3NpZF9sZW4pOworCQllbHNlCisJCQlpZWVlODAyMTFfc3RhX3N0YXJ0X3NjYW4oZGV2LCBOVUxMLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KSkgeworCQlpZiAoaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChkZXYsIGlmc3RhKSkKKwkJCXJldHVybjsKKwkJY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KTsKKwl9IGVsc2UgaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGlmc3RhLT5zdGF0ZSkgeworCWNhc2UgSUVFRTgwMjExX0RJU0FCTEVEOgorCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BVVRIRU5USUNBVEU6CisJCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoZGV2LCBpZnN0YSk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0FTU09DSUFURToKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZShkZXYsIGlmc3RhKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQVNTT0NJQVRFRDoKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZWQoZGV2LCBpZnN0YSk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lCU1NfU0VBUkNIOgorCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhkZXYsIGlmc3RhKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUJTU19KT0lORUQ6CisJCWllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhkZXYsIGlmc3RhKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwljYXNlIElFRUU4MDIxMV9NRVNIX1VQOgorCQlpZWVlODAyMTFfbWVzaF9ob3VzZWtlZXBpbmcoZGV2LCBpZnN0YSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9zdGFfd29yazogVW5rbm93biBzdGF0ZSAlZFxuIiwKKwkJICAgICAgIGlmc3RhLT5zdGF0ZSk7CisJCWJyZWFrOworCX0KKworCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChkZXYsIGlmc3RhKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHByaXZhY3kgY29uZmlndXJhdGlvbiBtaXNtYXRjaCBhbmQgIgorCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBkaXNhc3NvY2lhdGVcbiIsIGRldi0+bmFtZSk7CisKKwkJaWVlZTgwMjExX3NlbmRfZGlzYXNzb2MoZGV2LCBpZnN0YSwgV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQpOworCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKGRldiwgaWZzdGEsIDApOworCX0KK30KKworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCisJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgeworCQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCisJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCX0KKworCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSAtMTsgLyogYWxsb3cgYW55IFdNTSB1cGRhdGUgKi8KKworCisJaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKKwkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47CisJZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQorCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKKwllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCisJCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9MRUFQOworCWVsc2UKKwkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbml0aWFsIGF1dGhfYWxnPSVkXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIGlmc3RhLT5hdXRoX2FsZyk7CisJaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKKwlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZnN0YS0+YXV0aF90cmllcyA9IGlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKK30KKworCit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkKKwkJcmV0dXJuOworCisJaWYgKChpZnN0YS0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgfAorCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpKSAmJgorCSAgICAoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgfAorCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkpKSB7CisJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCX0KK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX21hdGNoX3NzaWQoc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAorCQkJCSAgICBjb25zdCBjaGFyICpzc2lkLCBpbnQgc3NpZF9sZW4pCit7CisJaW50IHRtcCwgaGlkZGVuX3NzaWQ7CisKKwlpZiAoc3NpZF9sZW4gPT0gaWZzdGEtPnNzaWRfbGVuICYmCisJICAgICFtZW1jbXAoaWZzdGEtPnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkKKwkJcmV0dXJuIDA7CisKKwloaWRkZW5fc3NpZCA9IDE7CisJdG1wID0gc3NpZF9sZW47CisJd2hpbGUgKHRtcC0tKSB7CisJCWlmIChzc2lkW3RtcF0gIT0gJ1wwJykgeworCQkJaGlkZGVuX3NzaWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaGlkZGVuX3NzaWQgJiYgaWZzdGEtPnNzaWRfbGVuID09IHNzaWRfbGVuKQorCQlyZXR1cm4gMTsKKworCWlmIChzc2lkX2xlbiA9PSAxICYmIHNzaWRbMF0gPT0gJyAnKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzcywgKnNlbGVjdGVkID0gTlVMTDsKKwlpbnQgdG9wX3Jzc2kgPSAwLCBmcmVxOworCisJaWYgKCEoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCB8CisJICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfCBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpKSkgeworCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfQVVUSEVOVElDQVRFOworCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoZGV2LCBpZnN0YSk7CisJCXJldHVybiAwOworCX0KKworCXNwaW5fbG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7CisJZnJlcSA9IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPnN0YV9ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgXgorCQkgICAgISFzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCQljb250aW51ZTsKKworCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpICYmCisJCSAgICBic3MtPmZyZXEgIT0gZnJlcSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpICYmCisJCSAgICBtZW1jbXAoYnNzLT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikpCisJCQljb250aW51ZTsKKworCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpICYmCisJCSAgICAhaWVlZTgwMjExX3N0YV9tYXRjaF9zc2lkKGlmc3RhLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pKQorCQkJY29udGludWU7CisKKwkJaWYgKCFzZWxlY3RlZCB8fCB0b3BfcnNzaSA8IGJzcy0+cnNzaSkgeworCQkJc2VsZWN0ZWQgPSBic3M7CisJCQl0b3BfcnNzaSA9IGJzcy0+cnNzaTsKKwkJfQorCX0KKwlpZiAoc2VsZWN0ZWQpCisJCWF0b21pY19pbmMoJnNlbGVjdGVkLT51c2Vycyk7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOworCisJaWYgKHNlbGVjdGVkKSB7CisJCWllZWU4MDIxMV9zZXRfZnJlcShsb2NhbCwgc2VsZWN0ZWQtPmZyZXEpOworCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKKwkJCWllZWU4MDIxMV9zdGFfc2V0X3NzaWQoZGV2LCBzZWxlY3RlZC0+c3NpZCwKKwkJCQkJICAgICAgIHNlbGVjdGVkLT5zc2lkX2xlbik7CisJCWllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKGRldiwgc2VsZWN0ZWQtPmJzc2lkKTsKKwkJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhkZXYsIHNlbGVjdGVkLCAwKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQoZGV2LCBzZWxlY3RlZCk7CisJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9BVVRIRU5USUNBVEU7CisJCWllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChkZXYsIGlmc3RhKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfQVVUSEVOVElDQVRFKSB7CisJCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKQorCQkJCWllZWU4MDIxMV9zdGFfc3RhcnRfc2NhbihkZXYsIE5VTEwsIDApOworCQkJZWxzZQorCQkJCWllZWU4MDIxMV9zdGFfc3RhcnRfc2NhbihkZXYsIGlmc3RhLT5zc2lkLAorCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOworCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX0FVVEhFTlRJQ0FURTsKKwkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKKwkJfSBlbHNlCisJCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfRElTQUJMRUQ7CisJfQorCXJldHVybiAtMTsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1OCBic3NpZFtFVEhfQUxFTl0sICpwb3M7CisJaW50IGk7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisKKyNpZiAwCisJLyogRWFzaWVyIHRlc3RpbmcsIHVzZSBmaXhlZCBCU1NJRC4gKi8KKwltZW1zZXQoYnNzaWQsIDB4ZmUsIEVUSF9BTEVOKTsKKyNlbHNlCisJLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCisJICogb3duIE1BQyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBwcm9wZXIKKwkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLworCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJYnNzaWRbaV0gXj0gZGV2LT5kZXZfYWRkcltpXTsKKwlic3NpZFswXSAmPSB+MHgwMTsKKwlic3NpZFswXSB8PSAweDAyOworI2VuZGlmCisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENyZWF0aW5nIG5ldyBJQlNTIG5ldHdvcmssIEJTU0lEICVzXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGJzc2lkKSk7CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChkZXYsIGJzc2lkLAorCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCSAgIHNkYXRhLT51LnN0YS5zc2lkLCBzZGF0YS0+dS5zdGEuc3NpZF9sZW4pOworCWlmICghYnNzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJzcy0+YmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2Jzcy0+YmFuZF07CisKKwlpZiAobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9PSAwKQorCQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gMTAwMDA7CisJYnNzLT5iZWFjb25faW50ID0gbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludDsKKwlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKKwlic3MtPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKKwlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KSB7CisJCWJzcy0+Y2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwl9IGVsc2UKKwkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOworCWJzcy0+c3VwcF9yYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKKwlwb3MgPSBic3MtPnN1cHBfcmF0ZXM7CisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKKwkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCX0KKworCXJldHVybiBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhkZXYsIGlmc3RhLCBic3MpOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzczsKKwlpbnQgZm91bmQgPSAwOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwlpbnQgYWN0aXZlX2lic3M7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJREVDTEFSRV9NQUNfQlVGKG1hYzIpOworCisJaWYgKGlmc3RhLT5zc2lkX2xlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhkZXYpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdGFfZmluZF9pYnNzIChhY3RpdmVfaWJzcz0lZClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgYWN0aXZlX2lic3MpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmxvY2FsLT5zdGFfYnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlmc3RhLT5zc2lkX2xlbiAhPSBic3MtPnNzaWRfbGVuIHx8CisJCSAgICBtZW1jbXAoaWZzdGEtPnNzaWQsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikgIT0gMAorCQkgICAgfHwgIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCisJCQljb250aW51ZTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiICAgYnNzaWQ9JXMgZm91bmRcbiIsCisJCSAgICAgICBwcmludF9tYWMobWFjLCBic3MtPmJzc2lkKSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKwkJbWVtY3B5KGJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJCWZvdW5kID0gMTsKKwkJaWYgKGFjdGl2ZV9pYnNzIHx8IG1lbWNtcChic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19iaCgmbG9jYWwtPnN0YV9ic3NfbG9jayk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIgICBzdGFfZmluZF9pYnNzOiBzZWxlY3RlZCAlcyBjdXJyZW50ICIKKwkgICAgICAgIiVzXG4iLCBwcmludF9tYWMobWFjLCBic3NpZCksIHByaW50X21hYyhtYWMyLCBpZnN0YS0+YnNzaWQpKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCWlmIChmb3VuZCAmJiBtZW1jbXAoaWZzdGEtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKKwkgICAgKGJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGRldiwgYnNzaWQsCisJCQkJCWxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQlpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVzIgorCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGJzc2lkKSk7CisJCXJldHVybiBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhkZXYsIGlmc3RhLCBic3MpOworCX0KKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCisJaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19KT0lORUQgJiYKKwkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3MoZGV2KSkgeworCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJCQkJICAgICAgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCArCisJCQkgICAgICBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCisJCSAgICAgICAiam9pblxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcmVxX3NjYW4oZGV2LCBpZnN0YS0+c3NpZCwKKwkJCQkJICAgICAgaWZzdGEtPnNzaWRfbGVuKTsKKwl9IGVsc2UgaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19KT0lORUQpIHsKKwkJaW50IGludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUw7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmlic3Nfam9pbl9yZXEgKworCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCkpIHsKKwkJCWlmICgoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUykgJiYKKwkJCSAgICAoIShsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFncyAmCisJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0lCU1MpKSkKKwkJCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhkZXYsIGlmc3RhKTsKKwkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJQlNTIG5vdCBhbGxvd2VkIG9uIgorCQkJCSAgICAgICAiICVkIE1IelxuIiwgZGV2LT5uYW1lLAorCQkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJCQl9CisKKwkJCS8qIE5vIElCU1MgZm91bmQgLSBkZWNyZWFzZSBzY2FuIGludGVydmFsIGFuZCBjb250aW51ZQorCQkJICogc2Nhbm5pbmcuICovCisJCQlpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1c7CisJCX0KKworCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19TRUFSQ0g7CisJCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgaW50ZXJ2YWwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisKKwlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisKKwlpZiAoaWZzdGEtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZzdGEtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkKKwkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCW1lbWNweShpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKTsKKwltZW1zZXQoaWZzdGEtPnNzaWQgKyBsZW4sIDAsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gLSBsZW4pOworCWlmc3RhLT5zc2lkX2xlbiA9IGxlbjsKKworCWlmIChsZW4pCisJCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOworCWVsc2UKKwkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1NTSURfU0VUOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUyAmJgorCSAgICAhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUKSkgeworCQlpZnN0YS0+aWJzc19qb2luX3JlcSA9IGppZmZpZXM7CisJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX1NFQVJDSDsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKGRldiwgaWZzdGEpOworCX0KKwlyZXR1cm4gMDsKK30KKworCitpbnQgaWVlZTgwMjExX3N0YV9nZXRfc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwltZW1jcHkoc3NpZCwgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CisJKmxlbiA9IGlmc3RhLT5zc2lkX2xlbjsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmJzc2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlpbnQgcmVzOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKworCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICE9IDApIHsKKwkJbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhkZXYpOworCQlpZiAocmVzKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBjb25maWcgbmV3IEJTU0lEIHRvICIKKwkJCSAgICAgICAidGhlIGxvdy1sZXZlbCBkcml2ZXJcbiIsIGRldi0+bmFtZSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfQorCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKQorCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7CisJZWxzZQorCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICBpbnQgcG93ZXJzYXZlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOworCXUxNiBmYzsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChudWxsZnVuYywgMCwgMjQpOworCWZjID0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCSAgICAgSUVFRTgwMjExX0ZDVExfVE9EUzsKKwlpZiAocG93ZXJzYXZlKQorCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCisJaWVlZTgwMjExX3N0YV90eChzZGF0YS0+ZGV2LCBza2IsIDApOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X3N0YV90aW1lcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAorCSAgICBpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQorCQlpZWVlODAyMTFfc3RhX3RpbWVyKCh1bnNpZ25lZCBsb25nKXNkYXRhKTsKK30KKwordm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5zY2FuX2RldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwlsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCA9IGppZmZpZXM7CisJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCisJaWYgKGxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcpIHsKKwkJbG9jYWwtPnN0YV9od19zY2FubmluZyA9IDA7CisJCWlmIChpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHJlc3RvcmUgb3BlcmF0aW9uYWwgIgorCQkJICAgICAgICJjaGFubmVsIGFmdGVyIHNjYW5cbiIsIGRldi0+bmFtZSk7CisJCS8qIFJlc3RhcnQgU1RBIHRpbWVyIGZvciBIVyBzY2FuIGNhc2UgKi8KKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQkJaWVlZTgwMjExX3Jlc3RhcnRfc3RhX3RpbWVyKHNkYXRhKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJZ290byBkb25lOworCX0KKworCWxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgPSAwOworCWlmIChpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gcmVzdG9yZSBvcGVyYXRpb25hbCAiCisJCSAgICAgICAiY2hhbm5lbCBhZnRlciBzY2FuXG4iLCBkZXYtPm5hbWUpOworCisKKwluZXRpZl90eF9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKKwlsb2NhbC0+ZmlsdGVyX2ZsYWdzICY9IH5GSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsKKwlsb2NhbC0+b3BzLT5jb25maWd1cmVfZmlsdGVyKGxvY2FsX3RvX2h3KGxvY2FsKSwKKwkJCQkgICAgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDLAorCQkJCSAgICAgJmxvY2FsLT5maWx0ZXJfZmxhZ3MsCisJCQkJICAgICBsb2NhbC0+bWRldi0+bWNfY291bnQsCisJCQkJICAgICBsb2NhbC0+bWRldi0+bWNfbGlzdCk7CisKKwluZXRpZl90eF91bmxvY2tfYmgobG9jYWwtPm1kZXYpOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKworCQkvKiBObyBuZWVkIHRvIHdha2UgdGhlIG1hc3RlciBkZXZpY2UuICovCisJCWlmIChzZGF0YS0+ZGV2ID09IGxvY2FsLT5tZGV2KQorCQkJY29udGludWU7CisKKwkJLyogVGVsbCBBUCB3ZSdyZSBiYWNrICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCisJCSAgICBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCisJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCisJCWllZWU4MDIxMV9yZXN0YXJ0X3N0YV90aW1lcihzZGF0YSk7CisKKwkJbmV0aWZfd2FrZV9xdWV1ZShzZGF0YS0+ZGV2KTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKK2RvbmU6CisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCkgfHwKKwkJICAgICghaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9JQlNTX0pPSU5FRCAmJgorCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3MoZGV2KSkpCisJCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhkZXYsIGlmc3RhKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCk7CisKK3ZvaWQgaWVlZTgwMjExX3N0YV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHNjYW5fd29yay53b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPnNjYW5fZGV2OworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJaW50IHNraXA7CisJdW5zaWduZWQgbG9uZyBuZXh0X2RlbGF5ID0gMDsKKworCWlmICghbG9jYWwtPnN0YV9zd19zY2FubmluZykKKwkJcmV0dXJuOworCisJc3dpdGNoIChsb2NhbC0+c2Nhbl9zdGF0ZSkgeworCWNhc2UgU0NBTl9TRVRfQ0hBTk5FTDoKKwkJLyoKKwkJICogR2V0IGN1cnJlbnQgc2NhbiBiYW5kLiBzY2FuX2JhbmQgbWF5IGJlIElFRUU4MDIxMV9OVU1fQkFORFMKKwkJICogYWZ0ZXIgd2Ugc3VjY2Vzc2Z1bGx5IHNjYW5uZWQgdGhlIGxhc3QgY2hhbm5lbCBvZiB0aGUgbGFzdAorCQkgKiBiYW5kIChhbmQgdGhlIGxhc3QgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGh3KQorCQkgKi8KKwkJaWYgKGxvY2FsLT5zY2FuX2JhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTKQorCQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5zY2FuX2JhbmRdOworCQllbHNlCisJCQlzYmFuZCA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGF0IGFuIHVuc3VwcG9ydGVkIGJhbmQgYW5kIGhhdmUgbW9yZSBiYW5kcworCQkgKiBsZWZ0IHRvIHNjYW4sIGFkdmFuY2UgdG8gdGhlIG5leHQgc3VwcG9ydGVkIG9uZS4KKwkJICovCisJCXdoaWxlICghc2JhbmQgJiYgbG9jYWwtPnNjYW5fYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFMgLSAxKSB7CisJCQlsb2NhbC0+c2Nhbl9iYW5kKys7CisJCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPnNjYW5fYmFuZF07CisJCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7CisJCX0KKworCQkvKiBpZiBubyBtb3JlIGJhbmRzL2NoYW5uZWxzIGxlZnQsIGNvbXBsZXRlIHNjYW4gKi8KKwkJaWYgKCFzYmFuZCB8fCBsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscykgeworCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJCQlyZXR1cm47CisJCX0KKwkJc2tpcCA9IDA7CisJCWNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKKworCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCB8fAorCQkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCisJCSAgICAgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkKKwkJCXNraXAgPSAxOworCisJCWlmICghc2tpcCkgeworCQkJbG9jYWwtPnNjYW5fY2hhbm5lbCA9IGNoYW47CisJCQlpZiAoaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCkpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgZnJlcSB0byAiCisJCQkJICAgICAgICIlZCBNSHogZm9yIHNjYW5cbiIsIGRldi0+bmFtZSwKKwkJCQkgICAgICAgY2hhbi0+Y2VudGVyX2ZyZXEpOworCQkJCXNraXAgPSAxOworCQkJfQorCQl9CisKKwkJLyogYWR2YW5jZSBzdGF0ZSBtYWNoaW5lIHRvIG5leHQgY2hhbm5lbC9iYW5kICovCisJCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4Kys7CisJCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscykgeworCQkJLyoKKwkJCSAqIHNjYW5fYmFuZCBtYXkgZW5kIHVwID09IElFRUU4MDIxMV9OVU1fQkFORFMsIGJ1dAorCQkJICogd2UnbGwgY2F0Y2ggdGhhdCBjYXNlIGFib3ZlIGFuZCBjb21wbGV0ZSB0aGUgc2NhbgorCQkJICogaWYgdGhhdCBpcyB0aGUgY2FzZS4KKwkJCSAqLworCQkJbG9jYWwtPnNjYW5fYmFuZCsrOworCQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOworCQl9CisKKwkJaWYgKHNraXApCisJCQlicmVhazsKKworCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX1BST0JFX0RFTEFZICsKKwkJCSAgICAgdXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY2hhbm5lbF9jaGFuZ2VfdGltZSk7CisJCWxvY2FsLT5zY2FuX3N0YXRlID0gU0NBTl9TRU5EX1BST0JFOworCQlicmVhazsKKwljYXNlIFNDQU5fU0VORF9QUk9CRToKKwkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9QQVNTSVZFX0NIQU5ORUxfVElNRTsKKwkJbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOworCisJCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikKKwkJCWJyZWFrOworCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoZGV2LCBOVUxMLCBsb2NhbC0+c2Nhbl9zc2lkLAorCQkJCQkgbG9jYWwtPnNjYW5fc3NpZF9sZW4pOworCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX0NIQU5ORUxfVElNRTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPnNjYW5fd29yaywKKwkJCQkgICBuZXh0X2RlbGF5KTsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfc3RhcnRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlpZiAoc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE1MTUUtU0NBTi5yZXF1ZXN0IChwYWdlIDExOCkgIHBhZ2UgMTQ0ICgxMS4xLjMuMSkKKwkgKiBCU1NUeXBlOiBJTkZSQVNUUlVDVFVSRSwgSU5ERVBFTkRFTlQsIEFOWV9CU1MKKwkgKiBCU1NJRDogTUFDQWRkcmVzcworCSAqIFNTSUQKKwkgKiBTY2FuVHlwZTogQUNUSVZFLCBQQVNTSVZFCisJICogUHJvYmVEZWxheTogZGVsYXkgKGluIG1pY3Jvc2Vjb25kcykgdG8gYmUgdXNlZCBwcmlvciB0byB0cmFuc21pdHRpbmcKKwkgKiAgICBhIFByb2JlIGZyYW1lIGR1cmluZyBhY3RpdmUgc2Nhbm5pbmcKKwkgKiBDaGFubmVsTGlzdAorCSAqIE1pbkNoYW5uZWxUaW1lICg+PSBQcm9iZURlbGF5KSwgaW4gVFUKKwkgKiBNYXhDaGFubmVsVGltZTogKD49IE1pbkNoYW5uZWxUaW1lKSwgaW4gVFUKKwkgKi8KKworCSAvKiBNTE1FLVNDQU4uY29uZmlybQorCSAgKiBCU1NEZXNjcmlwdGlvblNldAorCSAgKiBSZXN1bHRDb2RlOiBTVUNDRVNTLCBJTlZBTElEX1BBUkFNRVRFUlMKKwkgKi8KKworCWlmIChsb2NhbC0+c3RhX3N3X3NjYW5uaW5nIHx8IGxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcpIHsKKwkJaWYgKGxvY2FsLT5zY2FuX2RldiA9PSBkZXYpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAobG9jYWwtPm9wcy0+aHdfc2NhbikgeworCQlpbnQgcmMgPSBsb2NhbC0+b3BzLT5od19zY2FuKGxvY2FsX3RvX2h3KGxvY2FsKSwKKwkJCQkJICAgICBzc2lkLCBzc2lkX2xlbik7CisJCWlmICghcmMpIHsKKwkJCWxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcgPSAxOworCQkJbG9jYWwtPnNjYW5fZGV2ID0gZGV2OworCQl9CisJCXJldHVybiByYzsKKwl9CisKKwlsb2NhbC0+c3RhX3N3X3NjYW5uaW5nID0gMTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisKKwkJLyogRG9uJ3Qgc3RvcCB0aGUgbWFzdGVyIGludGVyZmFjZSwgb3RoZXJ3aXNlIHdlIGNhbid0IHRyYW5zbWl0CisJCSAqIHByb2JlcyEgKi8KKwkJaWYgKHNkYXRhLT5kZXYgPT0gbG9jYWwtPm1kZXYpCisJCQljb250aW51ZTsKKworCQluZXRpZl9zdG9wX3F1ZXVlKHNkYXRhLT5kZXYpOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgorCQkgICAgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCisJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChzc2lkKSB7CisJCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47CisJCW1lbWNweShsb2NhbC0+c2Nhbl9zc2lkLCBzc2lkLCBzc2lkX2xlbik7CisJfSBlbHNlCisJCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gMDsKKwlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CisJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOworCWxvY2FsLT5zY2FuX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCWxvY2FsLT5zY2FuX2RldiA9IGRldjsKKworCW5ldGlmX3R4X2xvY2tfYmgobG9jYWwtPm1kZXYpOworCWxvY2FsLT5maWx0ZXJfZmxhZ3MgfD0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CisJbG9jYWwtPm9wcy0+Y29uZmlndXJlX2ZpbHRlcihsb2NhbF90b19odyhsb2NhbCksCisJCQkJICAgICBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQywKKwkJCQkgICAgICZsb2NhbC0+ZmlsdGVyX2ZsYWdzLAorCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2NvdW50LAorCQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOworCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7CisKKwkvKiBUT0RPOiBzdGFydCBzY2FuIGFzIHNvb24gYXMgYWxsIG51bGxmdW5jIGZyYW1lcyBhcmUgQUNLZWQgKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmxvY2FsLT5zY2FuX3dvcmssCisJCQkgICBJRUVFODAyMTFfQ0hBTk5FTF9USU1FKTsKKworCXJldHVybiAwOworfQorCisKK2ludCBpZWVlODAyMTFfc3RhX3JlcV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQorCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9zdGFydF9zY2FuKGRldiwgc3NpZCwgc3NpZF9sZW4pOworCisJaWYgKGxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcgfHwgbG9jYWwtPnN0YV9od19zY2FubmluZykgeworCQlpZiAobG9jYWwtPnNjYW5fZGV2ID09IGRldikKKwkJCXJldHVybiAwOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmc3RhLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47CisJaWYgKHNzaWRfbGVuKQorCQltZW1jcHkoaWZzdGEtPnNjYW5fc3NpZCwgc3NpZCwgc3NpZF9sZW4pOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICoKK2llZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MsCisJCQkgIGNoYXIgKmN1cnJlbnRfZXYsIGNoYXIgKmVuZF9idWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaXdfZXZlbnQgaXdlOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJICAgICAgIGJzcy0+bGFzdF91cGRhdGUgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKKwkJcmV0dXJuIGN1cnJlbnRfZXY7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgIElXX0VWX0FERFJfTEVOKTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3NfbWVzaF9pZF9sZW4oYnNzKTsKKwkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkJICBic3NfbWVzaF9pZChic3MpKTsKKwl9IGVsc2UgeworCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzcy0+c3NpZF9sZW47CisJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJCSAgYnNzLT5zc2lkKTsKKwl9CisKKwlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykKKwkgICAgfHwgYnNzX21lc2hfY2ZnKGJzcykpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NRVNIOworCQllbHNlIGlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCQkgIElXX0VWX1VJTlRfTEVOKTsKKwl9CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwlpd2UudS5mcmVxLm0gPSBic3MtPmZyZXE7CisJaXdlLnUuZnJlcS5lID0gNjsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9GUkVRX0xFTik7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5mcmVxKTsKKwlpd2UudS5mcmVxLmUgPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJaXdlLmNtZCA9IElXRVZRVUFMOworCWl3ZS51LnF1YWwucXVhbCA9IGJzcy0+c2lnbmFsOworCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPnJzc2k7CisJaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2U7CisJaXdlLnUucXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9RVUFMX0xFTik7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCWVsc2UKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICIiKTsKKworCWlmIChic3MgJiYgYnNzLT53cGFfaWUpIHsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3MtPndwYV9pZV9sZW47CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkJICBic3MtPndwYV9pZSk7CisJfQorCisJaWYgKGJzcyAmJiBic3MtPnJzbl9pZSkgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzcy0+cnNuX2llX2xlbjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCQkgIGJzcy0+cnNuX2llKTsKKwl9CisKKwlpZiAoYnNzICYmIGJzcy0+c3VwcF9yYXRlc19sZW4gPiAwKSB7CisJCS8qIGRpc3BsYXkgYWxsIHN1cHBvcnRlZCByYXRlcyBpbiByZWFkYWJsZSBmb3JtYXQgKi8KKwkJY2hhciAqcCA9IGN1cnJlbnRfZXYgKyBJV19FVl9MQ1BfTEVOOworCQlpbnQgaTsKKworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgeworCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoYnNzLT5zdXBwX3JhdGVzW2ldICYKKwkJCQkJCQkweDdmKSAqIDUwMDAwMCk7CisJCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoY3VycmVudF9ldiwgcCwKKwkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKKwkJfQorCQljdXJyZW50X2V2ID0gcDsKKwl9CisKKwlpZiAoYnNzKSB7CisJCWNoYXIgKmJ1ZjsKKwkJYnVmID0ga21hbGxvYygzMCwgR0ZQX0FUT01JQyk7CisJCWlmIChidWYpIHsKKwkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJCXNwcmludGYoYnVmLCAidHNmPSUwMTZsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKShic3MtPnRpbWVzdGFtcCkpOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCWtmcmVlKGJ1Zik7CisJCX0KKwl9CisKKwlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKKwkJY2hhciAqYnVmOworCQl1OCAqY2ZnID0gYnNzX21lc2hfY2ZnKGJzcyk7CisJCWJ1ZiA9IGttYWxsb2MoNTAsIEdGUF9BVE9NSUMpOworCQlpZiAoYnVmKSB7CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCQlzcHJpbnRmKGJ1ZiwgIk1lc2ggbmV0d29yayAodmVyc2lvbiAlZCkiLCBjZmdbMF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgSUQ6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzFdLCBjZmdbMl0sIGNmZ1szXSwKKwkJCQkJCQljZmdbNF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gTWV0cmljIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s1XSwgY2ZnWzZdLCBjZmdbN10sCisJCQkJCQkJY2ZnWzhdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIkNvbmdlc3Rpb24gQ29udHJvbCBNb2RlIElEOiAiCisJCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s5XSwgY2ZnWzEwXSwKKwkJCQkJCQljZmdbMTFdLCBjZmdbMTJdKTsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIkNoYW5uZWwgUHJlY2VkZW5jZTogIgorCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMTNdLCBjZmdbMTRdLAorCQkJCQkJCWNmZ1sxNV0sIGNmZ1sxNl0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCWtmcmVlKGJ1Zik7CisJCX0KKwl9CisKKwlyZXR1cm4gY3VycmVudF9ldjsKK30KKworCitpbnQgaWVlZTgwMjExX3N0YV9zY2FuX3Jlc3VsdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJY2hhciAqY3VycmVudF9ldiA9IGJ1ZjsKKwljaGFyICplbmRfYnVmID0gYnVmICsgbGVuOworCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOworCisJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmxvY2FsLT5zdGFfYnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJ1ZiArIGxlbiAtIGN1cnJlbnRfZXYgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwkJCXJldHVybiAtRTJCSUc7CisJCX0KKwkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9zdGFfc2Nhbl9yZXN1bHQoZGV2LCBic3MsIGN1cnJlbnRfZXYsCisJCQkJCQkgICAgICAgZW5kX2J1Zik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKKwlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKK30KKworCitpbnQgaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqaWUsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJa2ZyZWUoaWZzdGEtPmV4dHJhX2llKTsKKwlpZiAobGVuID09IDApIHsKKwkJaWZzdGEtPmV4dHJhX2llID0gTlVMTDsKKwkJaWZzdGEtPmV4dHJhX2llX2xlbiA9IDA7CisJCXJldHVybiAwOworCX0KKwlpZnN0YS0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZnN0YS0+ZXh0cmFfaWUpIHsKKwkJaWZzdGEtPmV4dHJhX2llX2xlbiA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkoaWZzdGEtPmV4dHJhX2llLCBpZSwgbGVuKTsKKwlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gbGVuOworCXJldHVybiAwOworfQorCisKK3N0cnVjdCBzdGFfaW5mbyAqIGllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBza19idWZmICpza2IsIHU4ICpic3NpZCwKKwkJCQkJIHU4ICphZGRyKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJLyogVE9ETzogQ291bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cnkgYW5kCisJICogYWxsb3cgbmV3IG9uZSB0byBiZSBhZGRlZC4gKi8KKwlpZiAobG9jYWwtPm51bV9zdGEgPj0gSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gcm9vbSBmb3IgYSBuZXcgSUJTUyBTVEEgIgorCQkJICAgICAgICJlbnRyeSAlc1xuIiwgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBhZGRyKSk7CisJCX0KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZGRpbmcgbmV3IElCU1Mgc3RhdGlvbiAlcyAoZGV2PSVzKVxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBwcmludF9tYWMobWFjLCBhZGRyKSwgZGV2LT5uYW1lKTsKKworCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXN0YSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX0FVVEhPUklaRUQ7CisKKwlzdGEtPnN1cHBfcmF0ZXNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF0gPQorCQlzZGF0YS0+dS5zdGEuc3VwcF9yYXRlc19iaXRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEsIGxvY2FsKTsKKworCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gc3RhOworfQorCisKK2ludCBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByZWFzb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRlKHJlYXNvbj0lZClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcmVhc29uKTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBICYmCisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWllZWU4MDIxMV9zZW5kX2RlYXV0aChkZXYsIGlmc3RhLCByZWFzb24pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2MoZGV2LCBpZnN0YSwgMSk7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByZWFzb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0ZShyZWFzb249JWQpXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHJlYXNvbik7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1NUQSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQorCQlyZXR1cm4gLTE7CisKKwlpZWVlODAyMTFfc2VuZF9kaXNhc3NvYyhkZXYsIGlmc3RhLCByZWFzb24pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2MoZGV2LCBpZnN0YSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaWVlZTgwMjExX25vdGlmeV9tYWMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIGVudW0gaWVlZTgwMjExX25vdGlmaWNhdGlvbl90eXBlcyAgbm90aWZfdHlwZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXN3aXRjaCAobm90aWZfdHlwZSkgeworCWNhc2UgSUVFRTgwMjExX05PVElGWV9SRV9BU1NPQzoKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisKKwkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKSB7CisJCQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YS0+ZGV2LAorCQkJCQkJICAgICAgICZzZGF0YS0+dS5zdGEpOworCQkJfQorCisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX25vdGlmeV9tYWMpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuYyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxZGY5MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA2IEppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlICJyYXRlLmgiCisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKworc3RydWN0IHJhdGVfY29udHJvbF9hbGcgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzOworfTsKKworc3RhdGljIExJU1RfSEVBRChyYXRlX2N0cmxfYWxncyk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJhdGVfY3RybF9tdXRleCk7CisKK3N0YXRpYyBjaGFyICppZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvID0gQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ7Cittb2R1bGVfcGFyYW0oaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbywgY2hhcnAsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvLAorCQkgIkRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBmb3IgbWFjODAyMTEgdG8gdXNlIik7CisKK2ludCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpCit7CisJc3RydWN0IHJhdGVfY29udHJvbF9hbGcgKmFsZzsKKworCWlmICghb3BzLT5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnJhdGVfY3RybF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhbGcsICZyYXRlX2N0cmxfYWxncywgbGlzdCkgeworCQlpZiAoIXN0cmNtcChhbGctPm9wcy0+bmFtZSwgb3BzLT5uYW1lKSkgeworCQkJLyogZG9uJ3QgcmVnaXN0ZXIgYW4gYWxnb3JpdGhtIHR3aWNlICovCisJCQlXQVJOX09OKDEpOworCQkJbXV0ZXhfdW5sb2NrKCZyYXRlX2N0cmxfbXV0ZXgpOworCQkJcmV0dXJuIC1FQUxSRUFEWTsKKwkJfQorCX0KKworCWFsZyA9IGt6YWxsb2Moc2l6ZW9mKCphbGcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYWxnID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyYXRlX2N0cmxfbXV0ZXgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYWxnLT5vcHMgPSBvcHM7CisKKwlsaXN0X2FkZF90YWlsKCZhbGctPmxpc3QsICZyYXRlX2N0cmxfYWxncyk7CisJbXV0ZXhfdW5sb2NrKCZyYXRlX2N0cmxfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIpOworCit2b2lkIGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcihzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfYWxnICphbGc7CisKKwltdXRleF9sb2NrKCZyYXRlX2N0cmxfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxnLCAmcmF0ZV9jdHJsX2FsZ3MsIGxpc3QpIHsKKwkJaWYgKGFsZy0+b3BzID09IG9wcykgeworCQkJbGlzdF9kZWwoJmFsZy0+bGlzdCk7CisJCQlrZnJlZShhbGcpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZyYXRlX2N0cmxfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIpOworCitzdGF0aWMgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKgoraWVlZTgwMjExX3RyeV9yYXRlX2NvbnRyb2xfb3BzX2dldChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfYWxnICphbGc7CisJc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcyA9IE5VTEw7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJbXV0ZXhfbG9jaygmcmF0ZV9jdHJsX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsZywgJnJhdGVfY3RybF9hbGdzLCBsaXN0KSB7CisJCWlmICghc3RyY21wKGFsZy0+b3BzLT5uYW1lLCBuYW1lKSkKKwkJCWlmICh0cnlfbW9kdWxlX2dldChhbGctPm9wcy0+bW9kdWxlKSkgeworCQkJCW9wcyA9IGFsZy0+b3BzOworCQkJCWJyZWFrOworCQkJfQorCX0KKwltdXRleF91bmxvY2soJnJhdGVfY3RybF9tdXRleCk7CisJcmV0dXJuIG9wczsKK30KKworLyogR2V0IHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtLiAqLworc3RhdGljIHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICoKK2llZWU4MDIxMV9yYXRlX2NvbnRyb2xfb3BzX2dldChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHM7CisJY29uc3QgY2hhciAqYWxnX25hbWU7CisKKwlpZiAoIW5hbWUpCisJCWFsZ19uYW1lID0gaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbzsKKwllbHNlCisJCWFsZ19uYW1lID0gbmFtZTsKKworCW9wcyA9IGllZWU4MDIxMV90cnlfcmF0ZV9jb250cm9sX29wc19nZXQoYWxnX25hbWUpOworCWlmICghb3BzKSB7CisJCXJlcXVlc3RfbW9kdWxlKCJyYzgwMjExXyVzIiwgYWxnX25hbWUpOworCQlvcHMgPSBpZWVlODAyMTFfdHJ5X3JhdGVfY29udHJvbF9vcHNfZ2V0KGFsZ19uYW1lKTsKKwl9CisJaWYgKCFvcHMgJiYgbmFtZSkKKwkJLyogdHJ5IGRlZmF1bHQgaWYgc3BlY2lmaWMgYWxnIHJlcXVlc3RlZCBidXQgbm90IGZvdW5kICovCisJCW9wcyA9IGllZWU4MDIxMV90cnlfcmF0ZV9jb250cm9sX29wc19nZXQoaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyk7CisKKwkvKiB0cnkgYnVpbHQtaW4gb25lIGlmIHNwZWNpZmljIGFsZyByZXF1ZXN0ZWQgYnV0IG5vdCBmb3VuZCAqLworCWlmICghb3BzICYmIHN0cmxlbihDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCkpCisJCW9wcyA9IGllZWU4MDIxMV90cnlfcmF0ZV9jb250cm9sX29wc19nZXQoQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQpOworCisJcmV0dXJuIG9wczsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3JhdGVfY29udHJvbF9vcHNfcHV0KHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpCit7CisJbW9kdWxlX3B1dChvcHMtPm1vZHVsZSk7Cit9CisKK3N0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyYXRlX2NvbnRyb2xfYWxsb2MoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWY7CisKKwlyZWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiksIEdGUF9LRVJORUwpOworCWlmICghcmVmKQorCQlnb3RvIGZhaWxfcmVmOworCWtyZWZfaW5pdCgmcmVmLT5rcmVmKTsKKwlyZWYtPm9wcyA9IGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfb3BzX2dldChuYW1lKTsKKwlpZiAoIXJlZi0+b3BzKQorCQlnb3RvIGZhaWxfb3BzOworCXJlZi0+cHJpdiA9IHJlZi0+b3BzLT5hbGxvYyhsb2NhbCk7CisJaWYgKCFyZWYtPnByaXYpCisJCWdvdG8gZmFpbF9wcml2OworCXJldHVybiByZWY7CisKK2ZhaWxfcHJpdjoKKwlpZWVlODAyMTFfcmF0ZV9jb250cm9sX29wc19wdXQocmVmLT5vcHMpOworZmFpbF9vcHM6CisJa2ZyZWUocmVmKTsKK2ZhaWxfcmVmOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByYXRlX2NvbnRyb2xfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqY3RybF9yZWY7CisKKwljdHJsX3JlZiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiwga3JlZik7CisJY3RybF9yZWYtPm9wcy0+ZnJlZShjdHJsX3JlZi0+cHJpdik7CisJaWVlZTgwMjExX3JhdGVfY29udHJvbF9vcHNfcHV0KGN0cmxfcmVmLT5vcHMpOworCWtmcmVlKGN0cmxfcmVmKTsKK30KKwordm9pZCByYXRlX2NvbnRyb2xfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIHN0cnVjdCByYXRlX3NlbGVjdGlvbiAqc2VsKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IGxvY2FsLT5yYXRlX2N0cmw7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IGk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKworCW1lbXNldChzZWwsIDAsIHNpemVvZihzdHJ1Y3QgcmF0ZV9zZWxlY3Rpb24pKTsKKworCXJlZi0+b3BzLT5nZXRfcmF0ZShyZWYtPnByaXYsIGRldiwgc2JhbmQsIHNrYiwgc2VsKTsKKworCS8qIFNlbGVjdCBhIG5vbi1FUlAgYmFja3VwIHJhdGUuICovCisJaWYgKCFzZWwtPm5vbmVycCkgeworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwkJCWlmIChzZWwtPnJhdGUtPmJpdHJhdGUgPCByYXRlLT5iaXRyYXRlKQorCQkJCWJyZWFrOworCisJCQlpZiAocmF0ZV9zdXBwb3J0ZWQoc3RhLCBzYmFuZC0+YmFuZCwgaSkgJiYKKwkJCSAgICAhKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0cpKQorCQkJCXNlbC0+bm9uZXJwID0gcmF0ZTsKKwkJfQorCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmF0ZV9jb250cm9sX2dldChzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmKQoreworCWtyZWZfZ2V0KCZyZWYtPmtyZWYpOworCXJldHVybiByZWY7Cit9CisKK3ZvaWQgcmF0ZV9jb250cm9sX3B1dChzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmKQoreworCWtyZWZfcHV0KCZyZWYtPmtyZWYsIHJhdGVfY29udHJvbF9yZWxlYXNlKTsKK30KKworaW50IGllZWU4MDIxMV9pbml0X3JhdGVfY3RybF9hbGcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiwgKm9sZDsKKworCUFTU0VSVF9SVE5MKCk7CisJaWYgKGxvY2FsLT5vcGVuX2NvdW50IHx8IG5ldGlmX3J1bm5pbmcobG9jYWwtPm1kZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmVmID0gcmF0ZV9jb250cm9sX2FsbG9jKG5hbWUsIGxvY2FsKTsKKwlpZiAoIXJlZikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRmFpbGVkIHRvIHNlbGVjdCByYXRlIGNvbnRyb2wgIgorCQkgICAgICAgImFsZ29yaXRobVxuIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJb2xkID0gbG9jYWwtPnJhdGVfY3RybDsKKwlsb2NhbC0+cmF0ZV9jdHJsID0gcmVmOworCWlmIChvbGQpIHsKKwkJcmF0ZV9jb250cm9sX3B1dChvbGQpOworCQlzdGFfaW5mb19mbHVzaChsb2NhbCwgTlVMTCk7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCByYXRlIGNvbnRyb2wgIgorCSAgICAgICAiYWxnb3JpdGhtICclcydcbiIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwKKwkgICAgICAgcmVmLT5vcHMtPm5hbWUpOworCisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByYXRlX2NvbnRyb2xfZGVpbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWY7CisKKwlyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOworCWxvY2FsLT5yYXRlX2N0cmwgPSBOVUxMOworCXJhdGVfY29udHJvbF9wdXQocmVmKTsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuaCBiL25ldC9tYWM4MDIxMS9yYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI0NWYzMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmgKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNiBKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIElFRUU4MDIxMV9SQVRFX0gKKyNkZWZpbmUgSUVFRTgwMjExX1JBVEVfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJzdGFfaW5mby5oIgorCisvKiBUT0RPOiBrZG9jICovCitzdHJ1Y3QgcmF0ZV9zZWxlY3Rpb24geworCS8qIFNlbGVjdGVkIHRyYW5zbWlzc2lvbiByYXRlICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOworCS8qIE5vbi1FUlAgcmF0ZSB0byB1c2UgaWYgbWFjODAyMTEgZGVjaWRlcyBpdCBjYW5ub3QgdXNlIGFuIEVSUCByYXRlICovCisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpub25lcnA7CisJLyogcHJvYmUgd2l0aCB0aGlzIHJhdGUsIG9yIE5VTEwgZm9yIG5vIHByb2JpbmcgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnByb2JlOworfTsKKworc3RydWN0IHJhdGVfY29udHJvbF9vcHMgeworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCp0eF9zdGF0dXMpKHZvaWQgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0dXMpOworCXZvaWQgKCpnZXRfcmF0ZSkodm9pZCAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kLAorCQkJIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgc3RydWN0IHJhdGVfc2VsZWN0aW9uICpzZWwpOworCXZvaWQgKCpyYXRlX2luaXQpKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpOworCXZvaWQgKCpjbGVhcikodm9pZCAqcHJpdik7CisKKwl2b2lkICooKmFsbG9jKShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CisJdm9pZCAoKmZyZWUpKHZvaWQgKnByaXYpOworCXZvaWQgKigqYWxsb2Nfc3RhKSh2b2lkICpwcml2LCBnZnBfdCBnZnApOworCXZvaWQgKCpmcmVlX3N0YSkodm9pZCAqcHJpdiwgdm9pZCAqcHJpdl9zdGEpOworCisJaW50ICgqYWRkX2F0dHJzKSh2b2lkICpwcml2LCBzdHJ1Y3Qga29iamVjdCAqa29iaik7CisJdm9pZCAoKnJlbW92ZV9hdHRycykodm9pZCAqcHJpdiwgc3RydWN0IGtvYmplY3QgKmtvYmopOworCXZvaWQgKCphZGRfc3RhX2RlYnVnZnMpKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhLAorCQkJCXN0cnVjdCBkZW50cnkgKmRpcik7CisJdm9pZCAoKnJlbW92ZV9zdGFfZGVidWdmcykodm9pZCAqcHJpdiwgdm9pZCAqcHJpdl9zdGEpOworfTsKKworc3RydWN0IHJhdGVfY29udHJvbF9yZWYgeworCXN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHM7CisJdm9pZCAqcHJpdjsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworfTsKKworaW50IGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcyk7Cit2b2lkIGllZWU4MDIxMV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcihzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzKTsKKworLyogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtLiBJZiBgbmFtZScgaXMgTlVMTCwgZ2V0IHRoZQorICogZmlyc3QgYXZhaWxhYmxlIGFsZ29yaXRobS4gKi8KK3N0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyYXRlX2NvbnRyb2xfYWxsb2MoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgcmF0ZV9jb250cm9sX2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICBzdHJ1Y3QgcmF0ZV9zZWxlY3Rpb24gKnNlbCk7CitzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmF0ZV9jb250cm9sX2dldChzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmKTsKK3ZvaWQgcmF0ZV9jb250cm9sX3B1dChzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF90eF9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0dXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gbG9jYWwtPnJhdGVfY3RybDsKKworCXJlZi0+b3BzLT50eF9zdGF0dXMocmVmLT5wcml2LCBkZXYsIHNrYiwgc3RhdHVzKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gc3RhLT5yYXRlX2N0cmw7CisJcmVmLT5vcHMtPnJhdGVfaW5pdChyZWYtPnByaXYsIHN0YS0+cmF0ZV9jdHJsX3ByaXYsIGxvY2FsLCBzdGEpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXRlX2NvbnRyb2xfY2xlYXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IGxvY2FsLT5yYXRlX2N0cmw7CisJcmVmLT5vcHMtPmNsZWFyKHJlZi0+cHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcmF0ZV9jb250cm9sX2FsbG9jX3N0YShzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmLAorCQkJCQkgICBnZnBfdCBnZnApCit7CisJcmV0dXJuIHJlZi0+b3BzLT5hbGxvY19zdGEocmVmLT5wcml2LCBnZnApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX2ZyZWVfc3RhKHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYsCisJCQkJCSB2b2lkICpwcml2KQoreworCXJlZi0+b3BzLT5mcmVlX3N0YShyZWYtPnByaXYsIHByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX2FkZF9zdGFfZGVidWdmcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUworCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBzdGEtPnJhdGVfY3RybDsKKwlpZiAoc3RhLT5kZWJ1Z2ZzLmRpciAmJiByZWYtPm9wcy0+YWRkX3N0YV9kZWJ1Z2ZzKQorCQlyZWYtPm9wcy0+YWRkX3N0YV9kZWJ1Z2ZzKHJlZi0+cHJpdiwgc3RhLT5yYXRlX2N0cmxfcHJpdiwKKwkJCQkJICBzdGEtPmRlYnVnZnMuZGlyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX3JlbW92ZV9zdGFfZGVidWdmcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUworCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBzdGEtPnJhdGVfY3RybDsKKwlpZiAocmVmLT5vcHMtPnJlbW92ZV9zdGFfZGVidWdmcykKKwkJcmVmLT5vcHMtPnJlbW92ZV9zdGFfZGVidWdmcyhyZWYtPnByaXYsIHN0YS0+cmF0ZV9jdHJsX3ByaXYpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJhdGVfc3VwcG9ydGVkKHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJIGludCBpbmRleCkKK3sKKwlyZXR1cm4gKHN0YSA9PSBOVUxMIHx8IHN0YS0+c3VwcF9yYXRlc1tiYW5kXSAmIEJJVChpbmRleCkpOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmF0ZV9sb3dlc3RfaW5kZXgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykKKwkJaWYgKHJhdGVfc3VwcG9ydGVkKHN0YSwgc2JhbmQtPmJhbmQsIGkpKQorCQkJcmV0dXJuIGk7CisKKwkvKiB3YXJuIHdoZW4gd2UgY2Fubm90IGZpbmQgYSByYXRlLiAqLworCVdBUk5fT04oMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKgorcmF0ZV9sb3dlc3Qoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlyZXR1cm4gJnNiYW5kLT5iaXRyYXRlc1tyYXRlX2xvd2VzdF9pbmRleChsb2NhbCwgc2JhbmQsIHN0YSldOworfQorCisKKy8qIGZ1bmN0aW9ucyBmb3IgcmF0ZSBjb250cm9sIHJlbGF0ZWQgdG8gYSBkZXZpY2UgKi8KK2ludCBpZWVlODAyMTFfaW5pdF9yYXRlX2N0cmxfYWxnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CisKKworLyogUmF0ZSBjb250cm9sIGFsZ29yaXRobXMgKi8KKyNpZiBkZWZpbmVkKFJDODAyMTFfUElEX0NPTVBJTEUpIHx8IFwKKwkoZGVmaW5lZChDT05GSUdfTUFDODAyMTFfUkNfUElEKSAmJiBcCisJICFkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9SQ19QSURfTU9EVUxFKSkKK2V4dGVybiBpbnQgcmM4MDIxMV9waWRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHJjODAyMTFfcGlkX2V4aXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcmM4MDIxMV9waWRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHJjODAyMTFfcGlkX2V4aXQodm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYgLyogSUVFRTgwMjExX1JBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9hbGdvLmMKaW5kZXggYzMzOTU3MS4uYTg0OWI3NCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgogICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNywgTWF0dGlhcyBOaXNzbGVyIDxtYXR0aWFzLm5pc3NsZXJAZ214LmRlPgotICogQ29weXJpZ2h0IDIwMDcsIFN0ZWZhbm8gQnJpdmlvIDxzdGVmYW5vLmJyaXZpb0Bwb2xpbWkuaXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4LCBTdGVmYW5vIEJyaXZpbyA8c3RlZmFuby5icml2aW9AcG9saW1pLml0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTQsOCArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlICJpZWVlODAyMTFfcmF0ZS5oIgotCisjaW5jbHVkZSAicmF0ZS5oIgorI2luY2x1ZGUgIm1lc2guaCIKICNpbmNsdWRlICJyYzgwMjExX3BpZC5oIgogCiAKQEAgLTY0LDcxICs2NCw2NiBAQAogICovCiAKIAotLyogU2hpZnQgdGhlIGFkanVzdG1lbnQgc28gdGhhdCB3ZSB3b24ndCBzd2l0Y2ggdG8gYSBsb3dlciByYXRlIGlmIGl0IGV4aGliaXRlZAotICogYSB3b3JzZSBmYWlsZWQgZnJhbWVzIGJlaGF2aW91ciBhbmQgd2UnbGwgY2hvb3NlIHRoZSBoaWdoZXN0IHJhdGUgd2hvc2UKLSAqIGZhaWxlZCBmcmFtZXMgYmVoYXZpb3VyIGlzIG5vdCB3b3JzZSB0aGFuIHRoZSBvbmUgb2YgdGhlIG9yaWdpbmFsIHJhdGUKLSAqIHRhcmdldC4gV2hpbGUgYXQgaXQsIGNoZWNrIHRoYXQgdGhlIGFkanVzdG1lbnQgaXMgd2l0aGluIHRoZSByYW5nZXMuIFRoZW4sCi0gKiBwcm92aWRlIHRoZSBuZXcgcmF0ZSBpbmRleC4gKi8KLXN0YXRpYyBpbnQgcmF0ZV9jb250cm9sX3BpZF9zaGlmdF9hZGp1c3Qoc3RydWN0IHJjX3BpZF9yYXRlaW5mbyAqciwKLQkJCQkJIGludCBhZGosIGludCBjdXIsIGludCBsKQotewotCWludCBpLCBqLCBrLCB0bXA7Ci0KLQlqID0gcltjdXJdLnJldl9pbmRleDsKLQlpID0gaiArIGFkajsKLQotCWlmIChpIDwgMCkKLQkJcmV0dXJuIHJbMF0uaW5kZXg7Ci0JaWYgKGkgPj0gbCAtIDEpCi0JCXJldHVybiByW2wgLSAxXS5pbmRleDsKLQotCXRtcCA9IGk7Ci0KLQlpZiAoYWRqIDwgMCkgewotCQlmb3IgKGsgPSBqOyBrID49IGk7IGstLSkKLQkJCWlmIChyW2tdLmRpZmYgPD0gcltqXS5kaWZmKQotCQkJCXRtcCA9IGs7Ci0JfSBlbHNlIHsKLQkJZm9yIChrID0gaSArIDE7IGsgKyBpIDwgbDsgaysrKQotCQkJaWYgKHJba10uZGlmZiA8PSByW2ldLmRpZmYpCi0JCQkJdG1wID0gazsKLQl9Ci0KLQlyZXR1cm4gclt0bXBdLmluZGV4OwotfQotCisvKiBBZGp1c3QgdGhlIHJhdGUgd2hpbGUgZW5zdXJpbmcgdGhhdCB3ZSB3b24ndCBzd2l0Y2ggdG8gYSBsb3dlciByYXRlIGlmIGl0CisgKiBleGhpYml0ZWQgYSB3b3JzZSBmYWlsZWQgZnJhbWVzIGJlaGF2aW91ciBhbmQgd2UnbGwgY2hvb3NlIHRoZSBoaWdoZXN0IHJhdGUKKyAqIHdob3NlIGZhaWxlZCBmcmFtZXMgYmVoYXZpb3VyIGlzIG5vdCB3b3JzZSB0aGFuIHRoZSBvbmUgb2YgdGhlIG9yaWdpbmFsIHJhdGUKKyAqIHRhcmdldC4gV2hpbGUgYXQgaXQsIGNoZWNrIHRoYXQgdGhlIG5ldyByYXRlIGlzIHZhbGlkLiAqLwogc3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX3BpZF9hZGp1c3RfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgYWRqLAogCQkJCQkgc3RydWN0IHJjX3BpZF9yYXRlaW5mbyAqcmluZm8pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCWludCBuZXdpZHg7Ci0JaW50IG1heHJhdGU7Ci0JaW50IGJhY2sgPSAoYWRqID4gMCkgPyAxIDogLTE7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJaW50IGN1cl9zb3J0ZWQsIG5ld19zb3J0ZWQsIHByb2JlLCB0bXAsIG5fYml0cmF0ZXMsIGJhbmQ7CisJaW50IGN1ciA9IHN0YS0+dHhyYXRlX2lkeDsKIAotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoc3RhLT5kZXYpOworCXNkYXRhID0gc3RhLT5zZGF0YTsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisJYmFuZCA9IHNiYW5kLT5iYW5kOworCW5fYml0cmF0ZXMgPSBzYmFuZC0+bl9iaXRyYXRlczsKIAotCW1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOwotCW1heHJhdGUgPSBzZGF0YS0+YnNzID8gc2RhdGEtPmJzcy0+bWF4X3JhdGVjdHJsX3JhdGVpZHggOiAtMTsKKwkvKiBNYXAgcGFzc2VkIGFyZ3VtZW50cyB0byBzb3J0ZWQgdmFsdWVzLiAqLworCWN1cl9zb3J0ZWQgPSByaW5mb1tjdXJdLnJldl9pbmRleDsKKwluZXdfc29ydGVkID0gY3VyX3NvcnRlZCArIGFkajsKIAotCW5ld2lkeCA9IHJhdGVfY29udHJvbF9waWRfc2hpZnRfYWRqdXN0KHJpbmZvLCBhZGosIHN0YS0+dHhyYXRlLAotCQkJCQkgICAgICAgbW9kZS0+bnVtX3JhdGVzKTsKKwkvKiBDaGVjayBsaW1pdHMuICovCisJaWYgKG5ld19zb3J0ZWQgPCAwKQorCQluZXdfc29ydGVkID0gcmluZm9bMF0ucmV2X2luZGV4OworCWVsc2UgaWYgKG5ld19zb3J0ZWQgPj0gbl9iaXRyYXRlcykKKwkJbmV3X3NvcnRlZCA9IHJpbmZvW25fYml0cmF0ZXMgLSAxXS5yZXZfaW5kZXg7CiAKLQl3aGlsZSAobmV3aWR4ICE9IHN0YS0+dHhyYXRlKSB7Ci0JCWlmIChyYXRlX3N1cHBvcnRlZChzdGEsIG1vZGUsIG5ld2lkeCkgJiYKLQkJICAgIChtYXhyYXRlIDwgMCB8fCBuZXdpZHggPD0gbWF4cmF0ZSkpIHsKLQkJCXN0YS0+dHhyYXRlID0gbmV3aWR4OworCXRtcCA9IG5ld19zb3J0ZWQ7CisKKwlpZiAoYWRqIDwgMCkgeworCQkvKiBFbnN1cmUgdGhhdCB0aGUgcmF0ZSBkZWNyZWFzZSBpc24ndCBkaXNhZHZhbnRhZ2VvdXMuICovCisJCWZvciAocHJvYmUgPSBjdXJfc29ydGVkOyBwcm9iZSA+PSBuZXdfc29ydGVkOyBwcm9iZS0tKQorCQkJaWYgKHJpbmZvW3Byb2JlXS5kaWZmIDw9IHJpbmZvW2N1cl9zb3J0ZWRdLmRpZmYgJiYKKwkJCSAgICByYXRlX3N1cHBvcnRlZChzdGEsIGJhbmQsIHJpbmZvW3Byb2JlXS5pbmRleCkpCisJCQkJdG1wID0gcHJvYmU7CisJfSBlbHNlIHsKKwkJLyogTG9vayBmb3IgcmF0ZSBpbmNyZWFzZSB3aXRoIHplcm8gKG9yIGJlbG93KSBjb3N0LiAqLworCQlmb3IgKHByb2JlID0gbmV3X3NvcnRlZCArIDE7IHByb2JlIDwgbl9iaXRyYXRlczsgcHJvYmUrKykKKwkJCWlmIChyaW5mb1twcm9iZV0uZGlmZiA8PSByaW5mb1tuZXdfc29ydGVkXS5kaWZmICYmCisJCQkgICAgcmF0ZV9zdXBwb3J0ZWQoc3RhLCBiYW5kLCByaW5mb1twcm9iZV0uaW5kZXgpKQorCQkJCXRtcCA9IHByb2JlOworCX0KKworCS8qIEZpdCB0aGUgcmF0ZSBmb3VuZCB0byB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgcmF0ZS4gKi8KKwlkbyB7CisJCWlmIChyYXRlX3N1cHBvcnRlZChzdGEsIGJhbmQsIHJpbmZvW3RtcF0uaW5kZXgpKSB7CisJCQlzdGEtPnR4cmF0ZV9pZHggPSByaW5mb1t0bXBdLmluZGV4OwogCQkJYnJlYWs7CiAJCX0KLQotCQluZXdpZHggKz0gYmFjazsKLQl9CisJCWlmIChhZGogPCAwKQorCQkJdG1wLS07CisJCWVsc2UKKwkJCXRtcCsrOworCX0gd2hpbGUgKHRtcCA8IG5fYml0cmF0ZXMgJiYgdG1wID49IDApOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlyYXRlX2NvbnRyb2xfcGlkX2V2ZW50X3JhdGVfY2hhbmdlKAogCQkmKChzdHJ1Y3QgcmNfcGlkX3N0YV9pbmZvICopc3RhLT5yYXRlX2N0cmxfcHJpdiktPmV2ZW50cywKLQkJbmV3aWR4LCBtb2RlLT5yYXRlc1tuZXdpZHhdLnJhdGUpOworCQlzdGEtPnR4cmF0ZV9pZHgsIHNiYW5kLT5iaXRyYXRlc1tzdGEtPnR4cmF0ZV9pZHhdLmJpdHJhdGUpOwogI2VuZGlmCiB9CiAKQEAgLTE1Myw5ICsxNDgsMTIgQEAKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworI2VuZGlmCiAJc3RydWN0IHJjX3BpZF9zdGFfaW5mbyAqc3BpbmZvID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKIAlzdHJ1Y3QgcmNfcGlkX3JhdGVpbmZvICpyaW5mbyA9IHBpbmZvLT5yaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdTMyIHBmOwogCXMzMiBlcnJfYXZnOwogCXUzMiBlcnJfcHJvcDsKQEAgLTE2NCw3ICsxNjIsNyBAQAogCWludCBhZGosIGksIGosIHRtcDsKIAl1bnNpZ25lZCBsb25nIHBlcmlvZDsKIAotCW1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKIAlzcGluZm8gPSBzdGEtPnJhdGVfY3RybF9wcml2OwogCiAJLyogSW4gY2FzZSBub3RoaW5nIGhhcHBlbmVkIGR1cmluZyB0aGUgcHJldmlvdXMgY29udHJvbCBpbnRlcnZhbCwgdHVybgpAQCAtMTgzLDI1ICsxODEsMzIgQEAKIAkJcGYgPSBzcGluZm8tPmxhc3RfcGY7CiAJZWxzZSB7CiAJCXBmID0gc3BpbmZvLT50eF9udW1fZmFpbGVkICogMTAwIC8gc3BpbmZvLT50eF9udW1feG1pdDsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCQlpZiAocGYgPT0gMTAwICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkKKwkJCW1lc2hfcGxpbmtfYnJva2VuKHN0YSk7CisjZW5kaWYKIAkJcGYgPDw9IFJDX1BJRF9BUklUSF9TSElGVDsKKwkJc3RhLT5mYWlsX2F2ZyA9ICgocGYgKyAoc3BpbmZvLT5sYXN0X3BmIDw8IDMpKSAvIDkpCisJCQkJCT4+IFJDX1BJRF9BUklUSF9TSElGVDsKIAl9CiAKIAlzcGluZm8tPnR4X251bV94bWl0ID0gMDsKIAlzcGluZm8tPnR4X251bV9mYWlsZWQgPSAwOwogCiAJLyogSWYgd2UganVzdCBzd2l0Y2hlZCByYXRlLCB1cGRhdGUgdGhlIHJhdGUgYmVoYXZpb3VyIGluZm8uICovCi0JaWYgKHBpbmZvLT5vbGRyYXRlICE9IHN0YS0+dHhyYXRlKSB7CisJaWYgKHBpbmZvLT5vbGRyYXRlICE9IHN0YS0+dHhyYXRlX2lkeCkgewogCiAJCWkgPSByaW5mb1twaW5mby0+b2xkcmF0ZV0ucmV2X2luZGV4OwotCQlqID0gcmluZm9bc3RhLT50eHJhdGVdLnJldl9pbmRleDsKKwkJaiA9IHJpbmZvW3N0YS0+dHhyYXRlX2lkeF0ucmV2X2luZGV4OwogCiAJCXRtcCA9IChwZiAtIHNwaW5mby0+bGFzdF9wZik7CiAJCXRtcCA9IFJDX1BJRF9ET19BUklUSF9SSUdIVF9TSElGVCh0bXAsIFJDX1BJRF9BUklUSF9TSElGVCk7CiAKIAkJcmluZm9bal0uZGlmZiA9IHJpbmZvW2ldLmRpZmYgKyB0bXA7Ci0JCXBpbmZvLT5vbGRyYXRlID0gc3RhLT50eHJhdGU7CisJCXBpbmZvLT5vbGRyYXRlID0gc3RhLT50eHJhdGVfaWR4OwogCX0KLQlyYXRlX2NvbnRyb2xfcGlkX25vcm1hbGl6ZShwaW5mbywgbW9kZS0+bnVtX3JhdGVzKTsKKwlyYXRlX2NvbnRyb2xfcGlkX25vcm1hbGl6ZShwaW5mbywgc2JhbmQtPm5fYml0cmF0ZXMpOwogCiAJLyogQ29tcHV0ZSB0aGUgcHJvcG9ydGlvbmFsLCBpbnRlZ3JhbCBhbmQgZGVyaXZhdGl2ZSBlcnJvcnMuICovCiAJZXJyX3Byb3AgPSAocGluZm8tPnRhcmdldCA8PCBSQ19QSURfQVJJVEhfU0hJRlQpIC0gcGY7CkBAIC0yNDIsMjMgKzI0NywyNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCByY19waWRfc3RhX2luZm8gKnNwaW5mbzsKIAl1bnNpZ25lZCBsb25nIHBlcmlvZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCXJjdV9yZWFkX2xvY2soKTsKIAogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCiAJaWYgKCFzdGEpCi0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAKIAkvKiBEb24ndCB1cGRhdGUgdGhlIHN0YXRlIGlmIHdlJ3JlIG5vdCBjb250cm9sbGluZyB0aGUgcmF0ZS4gKi8KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHN0YS0+ZGV2KTsKKwlzZGF0YSA9IHN0YS0+c2RhdGE7CiAJaWYgKHNkYXRhLT5ic3MgJiYgc2RhdGEtPmJzcy0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpIHsKLQkJc3RhLT50eHJhdGUgPSBzZGF0YS0+YnNzLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeDsKLQkJcmV0dXJuOworCQlzdGEtPnR4cmF0ZV9pZHggPSBzZGF0YS0+YnNzLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeDsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJLyogSWdub3JlIGFsbCBmcmFtZXMgdGhhdCB3ZXJlIHNlbnQgd2l0aCBhIGRpZmZlcmVudCByYXRlIHRoYW4gdGhlIHJhdGUKIAkgKiB3ZSBjdXJyZW50bHkgYWR2aXNlIG1hYzgwMjExIHRvIHVzZS4gKi8KLQlpZiAoc3RhdHVzLT5jb250cm9sLnJhdGUgIT0gJmxvY2FsLT5vcGVyX2h3X21vZGUtPnJhdGVzW3N0YS0+dHhyYXRlXSkKLQkJZ290byBpZ25vcmU7CisJaWYgKHN0YXR1cy0+Y29udHJvbC50eF9yYXRlICE9ICZzYmFuZC0+Yml0cmF0ZXNbc3RhLT50eHJhdGVfaWR4XSkKKwkJZ290byB1bmxvY2s7CiAKIAlzcGluZm8gPSBzdGEtPnJhdGVfY3RybF9wcml2OwogCXNwaW5mby0+dHhfbnVtX3htaXQrKzsKQEAgLTI4Myw5ICsyOTIsNiBAQAogCQlzdGEtPnR4X251bV9jb25zZWN1dGl2ZV9mYWlsdXJlcysrOwogCQlzdGEtPnR4X251bV9tcGR1X2ZhaWwrKzsKIAl9IGVsc2UgewotCQlzdGEtPmxhc3RfYWNrX3Jzc2lbMF0gPSBzdGEtPmxhc3RfYWNrX3Jzc2lbMV07Ci0JCXN0YS0+bGFzdF9hY2tfcnNzaVsxXSA9IHN0YS0+bGFzdF9hY2tfcnNzaVsyXTsKLQkJc3RhLT5sYXN0X2Fja19yc3NpWzJdID0gc3RhdHVzLT5hY2tfc2lnbmFsOwogCQlzdGEtPnR4X251bV9jb25zZWN1dGl2ZV9mYWlsdXJlcyA9IDA7CiAJCXN0YS0+dHhfbnVtX21wZHVfb2srKzsKIAl9CkBAIC0yOTksMTIgKzMwNSwxMiBAQAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHNwaW5mby0+bGFzdF9zYW1wbGUgKyBwZXJpb2QpKQogCQlyYXRlX2NvbnRyb2xfcGlkX3NhbXBsZShwaW5mbywgbG9jYWwsIHN0YSk7CiAKLWlnbm9yZToKLQlzdGFfaW5mb19wdXQoc3RhKTsKKyB1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJhdGVfY29udHJvbF9waWRfZ2V0X3JhdGUodm9pZCAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICBzdHJ1Y3QgcmF0ZV9zZWxlY3Rpb24gKnNlbCkKIHsKQEAgLTMxNSw2ICszMjEsOCBAQAogCWludCByYXRlaWR4OwogCXUxNiBmYzsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CiAKIAkvKiBTZW5kIG1hbmFnZW1lbnQgZnJhbWVzIGFuZCBicm9hZGNhc3QvbXVsdGljYXN0IGRhdGEgdXNpbmcgbG93ZXN0CkBAIC0zMjIsMzIgKzMzMCwzMSBAQAogCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8ICFzdGEpIHsKLQkJc2VsLT5yYXRlID0gcmF0ZV9sb3dlc3QobG9jYWwsIG1vZGUsIHN0YSk7Ci0JCWlmIChzdGEpCi0JCQlzdGFfaW5mb19wdXQoc3RhKTsKKwkJc2VsLT5yYXRlID0gcmF0ZV9sb3dlc3QobG9jYWwsIHNiYW5kLCBzdGEpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIElmIGEgZm9yY2VkIHJhdGUgaXMgaW4gZWZmZWN0LCBzZWxlY3QgaXQuICovCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCWlmIChzZGF0YS0+YnNzICYmIHNkYXRhLT5ic3MtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA+IC0xKQotCQlzdGEtPnR4cmF0ZSA9IHNkYXRhLT5ic3MtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeDsKKwkJc3RhLT50eHJhdGVfaWR4ID0gc2RhdGEtPmJzcy0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4OwogCi0JcmF0ZWlkeCA9IHN0YS0+dHhyYXRlOworCXJhdGVpZHggPSBzdGEtPnR4cmF0ZV9pZHg7CiAKLQlpZiAocmF0ZWlkeCA+PSBtb2RlLT5udW1fcmF0ZXMpCi0JCXJhdGVpZHggPSBtb2RlLT5udW1fcmF0ZXMgLSAxOworCWlmIChyYXRlaWR4ID49IHNiYW5kLT5uX2JpdHJhdGVzKQorCQlyYXRlaWR4ID0gc2JhbmQtPm5fYml0cmF0ZXMgLSAxOwogCi0Jc3RhLT5sYXN0X3R4cmF0ZSA9IHJhdGVpZHg7CisJc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSByYXRlaWR4OwogCi0Jc3RhX2luZm9fcHV0KHN0YSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlzZWwtPnJhdGUgPSAmbW9kZS0+cmF0ZXNbcmF0ZWlkeF07CisJc2VsLT5yYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tyYXRlaWR4XTsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiAJcmF0ZV9jb250cm9sX3BpZF9ldmVudF90eF9yYXRlKAogCQkmKChzdHJ1Y3QgcmNfcGlkX3N0YV9pbmZvICopIHN0YS0+cmF0ZV9jdHJsX3ByaXYpLT5ldmVudHMsCi0JCXJhdGVpZHgsIG1vZGUtPnJhdGVzW3JhdGVpZHhdLnJhdGUpOworCQlyYXRlaWR4LCBzYmFuZC0+Yml0cmF0ZXNbcmF0ZWlkeF0uYml0cmF0ZSk7CiAjZW5kaWYKIH0KIApAQCAtMzU5LDI4ICszNjYsMzMgQEAKIAkgKiBhcyB3ZSBuZWVkIHRvIGhhdmUgSUVFRSA4MDIuMVggYXV0aCBzdWNjZWVkIGltbWVkaWF0ZWx5IGFmdGVyIGFzc29jLi4KIAkgKiBVbnRpbCB0aGF0IG1ldGhvZCBpcyBpbXBsZW1lbnRlZCwgd2Ugd2lsbCB1c2UgdGhlIGxvd2VzdCBzdXBwb3J0ZWQKIAkgKiByYXRlIGFzIGEgd29ya2Fyb3VuZC4gKi8KLQlzdGEtPnR4cmF0ZSA9IHJhdGVfbG93ZXN0X2luZGV4KGxvY2FsLCBsb2NhbC0+b3Blcl9od19tb2RlLCBzdGEpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCXN0YS0+dHhyYXRlX2lkeCA9IHJhdGVfbG93ZXN0X2luZGV4KGxvY2FsLCBzYmFuZCwgc3RhKTsKKwlzdGEtPmZhaWxfYXZnID0gMDsKIH0KIAogc3RhdGljIHZvaWQgKnJhdGVfY29udHJvbF9waWRfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IHJjX3BpZF9pbmZvICpwaW5mbzsKIAlzdHJ1Y3QgcmNfcGlkX3JhdGVpbmZvICpyaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJaW50IGksIGosIHRtcDsKIAlib29sIHM7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgcmNfcGlkX2RlYnVnZnNfZW50cmllcyAqZGU7CiAjZW5kaWYKIAorCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwogCXBpbmZvID0ga21hbGxvYyhzaXplb2YoKnBpbmZvKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFwaW5mbykKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBXZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IG9wZXJfaHdfbW9kZSB3b24ndCBjaGFuZ2UgdW5sZXNzIHdlIGdldAorCS8qIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgc2JhbmQgd29uJ3QgY2hhbmdlIHVubGVzcyB3ZSBnZXQKIAkgKiByZWluaXRpYWxpemVkLiAqLwotCW1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOwotCXJpbmZvID0ga21hbGxvYyhzaXplb2YoKnJpbmZvKSAqIG1vZGUtPm51bV9yYXRlcywgR0ZQX0FUT01JQyk7CisJcmluZm8gPSBrbWFsbG9jKHNpemVvZigqcmluZm8pICogc2JhbmQtPm5fYml0cmF0ZXMsIEdGUF9BVE9NSUMpOwogCWlmICghcmluZm8pIHsKIAkJa2ZyZWUocGluZm8pOwogCQlyZXR1cm4gTlVMTDsKQEAgLTM4OSw3ICs0MDEsNyBAQAogCS8qIFNvcnQgdGhlIHJhdGVzLiBUaGlzIGlzIG9wdGltaXplZCBmb3IgdGhlIG1vc3QgY29tbW9uIGNhc2UgKGkuZS4KIAkgKiBhbG1vc3Qtc29ydGVkIENDSytPRkRNIHJhdGVzKS4gS2luZCBvZiBidWJibGUtc29ydCB3aXRoIHJldmVyc2VkCiAJICogbWFwcGluZyB0b28uICovCi0JZm9yIChpID0gMDsgaSA8IG1vZGUtPm51bV9yYXRlczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKIAkJcmluZm9baV0uaW5kZXggPSBpOwogCQlyaW5mb1tpXS5yZXZfaW5kZXggPSBpOwogCQlpZiAocGluZm8tPmZhc3Rfc3RhcnQpCkBAIC0zOTcsMTEgKzQwOSwxMSBAQAogCQllbHNlCiAJCQlyaW5mb1tpXS5kaWZmID0gaSAqIHBpbmZvLT5ub3JtX29mZnNldDsKIAl9Ci0JZm9yIChpID0gMTsgaSA8IG1vZGUtPm51bV9yYXRlczsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKIAkJcyA9IDA7Ci0JCWZvciAoaiA9IDA7IGogPCBtb2RlLT5udW1fcmF0ZXMgLSBpOyBqKyspCi0JCQlpZiAodW5saWtlbHkobW9kZS0+cmF0ZXNbcmluZm9bal0uaW5kZXhdLnJhdGUgPgotCQkJCSAgICAgbW9kZS0+cmF0ZXNbcmluZm9baiArIDFdLmluZGV4XS5yYXRlKSkgeworCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXMgLSBpOyBqKyspCisJCQlpZiAodW5saWtlbHkoc2JhbmQtPmJpdHJhdGVzW3JpbmZvW2pdLmluZGV4XS5iaXRyYXRlID4KKwkJCQkgICAgIHNiYW5kLT5iaXRyYXRlc1tyaW5mb1tqICsgMV0uaW5kZXhdLmJpdHJhdGUpKSB7CiAJCQkJdG1wID0gcmluZm9bal0uaW5kZXg7CiAJCQkJcmluZm9bal0uaW5kZXggPSByaW5mb1tqICsgMV0uaW5kZXg7CiAJCQkJcmluZm9baiArIDFdLmluZGV4ID0gdG1wOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9kZWJ1Z2ZzLmMKaW5kZXggODhiOGRjOS4uYWU3NWQ0MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlICJpZWVlODAyMTFfcmF0ZS5oIgorI2luY2x1ZGUgInJhdGUuaCIKIAogI2luY2x1ZGUgInJjODAyMTFfcGlkLmgiCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYzgwMjExX3NpbXBsZS5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfc2ltcGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNzhiMTEuLjAwMDAwMDAKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfc2ltcGxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KLSAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfcmF0ZS5oIgotI2luY2x1ZGUgImRlYnVnZnMuaCIKLQotCi0vKiBUaGlzIGlzIGEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBUWCByYXRlIGNvbnRyb2xsaW5nIHRoYXQgY2FuIGJlIHVzZWQKLSAqIGFzIHRoZSBkZWZhdWx0IHdoZW4gbm8gaW1wcm92ZWQgbWVjaGFuaXNtcyBhcmUgYXZhaWxhYmxlLiAqLwotCi0jZGVmaW5lIFJBVEVfQ09OVFJPTF9OVU1fRE9XTiAyMAotI2RlZmluZSBSQVRFX0NPTlRST0xfTlVNX1VQICAgMTUKLQotI2RlZmluZSBSQVRFX0NPTlRST0xfRU1FUkdfREVDIDIKLSNkZWZpbmUgUkFURV9DT05UUk9MX0lOVEVSVkFMIChIWiAvIDIwKQotI2RlZmluZSBSQVRFX0NPTlRST0xfTUlOX1RYIDEwCi0KLXN0YXRpYyB2b2lkIHJhdGVfY29udHJvbF9yYXRlX2luYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQlpbnQgaSA9IHN0YS0+dHhyYXRlOwotCWludCBtYXhyYXRlOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihzdGEtPmRldik7Ci0JaWYgKHNkYXRhLT5ic3MgJiYgc2RhdGEtPmJzcy0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpIHsKLQkJLyogZm9yY2VkIHVuaWNhc3QgcmF0ZSAtIGRvIG5vdCBjaGFuZ2UgU1RBIHJhdGUgKi8KLQkJcmV0dXJuOwotCX0KLQotCW1vZGUgPSBsb2NhbC0+b3Blcl9od19tb2RlOwotCW1heHJhdGUgPSBzZGF0YS0+YnNzID8gc2RhdGEtPmJzcy0+bWF4X3JhdGVjdHJsX3JhdGVpZHggOiAtMTsKLQotCWlmIChpID4gbW9kZS0+bnVtX3JhdGVzKQotCQlpID0gbW9kZS0+bnVtX3JhdGVzIC0gMjsKLQotCXdoaWxlIChpICsgMSA8IG1vZGUtPm51bV9yYXRlcykgewotCQlpKys7Ci0JCWlmIChzdGEtPnN1cHBfcmF0ZXMgJiBCSVQoaSkgJiYKLQkJICAgIG1vZGUtPnJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU1VQUE9SVEVEICYmCi0JCSAgICAobWF4cmF0ZSA8IDAgfHwgaSA8PSBtYXhyYXRlKSkgewotCQkJc3RhLT50eHJhdGUgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfZGVjKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCWludCBpID0gc3RhLT50eHJhdGU7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHN0YS0+ZGV2KTsKLQlpZiAoc2RhdGEtPmJzcyAmJiBzZGF0YS0+YnNzLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPiAtMSkgewotCQkvKiBmb3JjZWQgdW5pY2FzdCByYXRlIC0gZG8gbm90IGNoYW5nZSBTVEEgcmF0ZSAqLwotCQlyZXR1cm47Ci0JfQotCi0JbW9kZSA9IGxvY2FsLT5vcGVyX2h3X21vZGU7Ci0JaWYgKGkgPiBtb2RlLT5udW1fcmF0ZXMpCi0JCWkgPSBtb2RlLT5udW1fcmF0ZXM7Ci0KLQl3aGlsZSAoaSA+IDApIHsKLQkJaS0tOwotCQlpZiAoc3RhLT5zdXBwX3JhdGVzICYgQklUKGkpICYmCi0JCSAgICBtb2RlLT5yYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9SQVRFX1NVUFBPUlRFRCkgewotCQkJc3RhLT50eHJhdGUgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLXN0cnVjdCBnbG9iYWxfcmF0ZV9jb250cm9sIHsKLQlpbnQgZHVtbXk7Ci19OwotCi1zdHJ1Y3Qgc3RhX3JhdGVfY29udHJvbCB7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3JhdGVfY2hhbmdlOwotCXUzMiB0eF9udW1fZmFpbHVyZXM7Ci0JdTMyIHR4X251bV94bWl0OwotCi0JdW5zaWduZWQgbG9uZyBhdmdfcmF0ZV91cGRhdGU7Ci0JdTMyIHR4X2F2Z19yYXRlX3N1bTsKLQl1MzIgdHhfYXZnX3JhdGVfbnVtOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLQlzdHJ1Y3QgZGVudHJ5ICp0eF9hdmdfcmF0ZV9zdW1fZGVudHJ5OwotCXN0cnVjdCBkZW50cnkgKnR4X2F2Z19yYXRlX251bV9kZW50cnk7Ci0jZW5kaWYKLX07Ci0KLQotc3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX3NpbXBsZV90eF9zdGF0dXModm9pZCAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzICpzdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlzdHJ1Y3Qgc3RhX3JhdGVfY29udHJvbCAqc3JjdHJsOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKLQotCWlmICghc3RhKQotCSAgICByZXR1cm47Ci0KLQlzcmN0cmwgPSBzdGEtPnJhdGVfY3RybF9wcml2OwotCXNyY3RybC0+dHhfbnVtX3htaXQrKzsKLQlpZiAoc3RhdHVzLT5leGNlc3NpdmVfcmV0cmllcykgewotCQlzcmN0cmwtPnR4X251bV9mYWlsdXJlcysrOwotCQlzdGEtPnR4X3JldHJ5X2ZhaWxlZCsrOwotCQlzdGEtPnR4X251bV9jb25zZWN1dGl2ZV9mYWlsdXJlcysrOwotCQlzdGEtPnR4X251bV9tcGR1X2ZhaWwrKzsKLQl9IGVsc2UgewotCQlzdGEtPmxhc3RfYWNrX3Jzc2lbMF0gPSBzdGEtPmxhc3RfYWNrX3Jzc2lbMV07Ci0JCXN0YS0+bGFzdF9hY2tfcnNzaVsxXSA9IHN0YS0+bGFzdF9hY2tfcnNzaVsyXTsKLQkJc3RhLT5sYXN0X2Fja19yc3NpWzJdID0gc3RhdHVzLT5hY2tfc2lnbmFsOwotCQlzdGEtPnR4X251bV9jb25zZWN1dGl2ZV9mYWlsdXJlcyA9IDA7Ci0JCXN0YS0+dHhfbnVtX21wZHVfb2srKzsKLQl9Ci0Jc3RhLT50eF9yZXRyeV9jb3VudCArPSBzdGF0dXMtPnJldHJ5X2NvdW50OwotCXN0YS0+dHhfbnVtX21wZHVfZmFpbCArPSBzdGF0dXMtPnJldHJ5X2NvdW50OwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIHNyY3RybC0+bGFzdF9yYXRlX2NoYW5nZSArIFJBVEVfQ09OVFJPTF9JTlRFUlZBTCkgJiYKLQkJc3JjdHJsLT50eF9udW1feG1pdCA+IFJBVEVfQ09OVFJPTF9NSU5fVFgpIHsKLQkJdTMyIHBlcl9mYWlsZWQ7Ci0JCXNyY3RybC0+bGFzdF9yYXRlX2NoYW5nZSA9IGppZmZpZXM7Ci0KLQkJcGVyX2ZhaWxlZCA9ICgxMDAgKiBzdGEtPnR4X251bV9tcGR1X2ZhaWwpIC8KLQkJCShzdGEtPnR4X251bV9tcGR1X2ZhaWwgKyBzdGEtPnR4X251bV9tcGR1X29rKTsKLQkJLyogVE9ETzogY2FsY3VsYXRlIGF2ZXJhZ2UgcGVyX2ZhaWxlZCB0byBtYWtlIGFkanVzdGluZwotCQkgKiBwYXJhbWV0ZXJzIGVhc2llciAqLwotI2lmIDAKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1QRFUgZmFpbD0lZCBvaz0lZCBwZXJfZmFpbGVkPSVkXG4iLAotCQkJICAgICAgIHN0YS0+dHhfbnVtX21wZHVfZmFpbCwgc3RhLT50eF9udW1fbXBkdV9vaywKLQkJCSAgICAgICBwZXJfZmFpbGVkKTsKLQkJfQotI2VuZGlmCi0KLQkJLyoKLQkJICogWFhYOiBNYWtlIHRoZXNlIGNvbmZpZ3VyYWJsZSBvbmNlIHdlIGhhdmUgYW4KLQkJICogaW50ZXJmYWNlIHRvIHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtcwotCQkgKi8KLQkJaWYgKHBlcl9mYWlsZWQgPiBSQVRFX0NPTlRST0xfTlVNX0RPV04pIHsKLQkJCXJhdGVfY29udHJvbF9yYXRlX2RlYyhsb2NhbCwgc3RhKTsKLQkJfSBlbHNlIGlmIChwZXJfZmFpbGVkIDwgUkFURV9DT05UUk9MX05VTV9VUCkgewotCQkJcmF0ZV9jb250cm9sX3JhdGVfaW5jKGxvY2FsLCBzdGEpOwotCQl9Ci0JCXNyY3RybC0+dHhfYXZnX3JhdGVfc3VtICs9IHN0YXR1cy0+Y29udHJvbC5yYXRlLT5yYXRlOwotCQlzcmN0cmwtPnR4X2F2Z19yYXRlX251bSsrOwotCQlzcmN0cmwtPnR4X251bV9mYWlsdXJlcyA9IDA7Ci0JCXNyY3RybC0+dHhfbnVtX3htaXQgPSAwOwotCX0gZWxzZSBpZiAoc3RhLT50eF9udW1fY29uc2VjdXRpdmVfZmFpbHVyZXMgPj0KLQkJICAgUkFURV9DT05UUk9MX0VNRVJHX0RFQykgewotCQlyYXRlX2NvbnRyb2xfcmF0ZV9kZWMobG9jYWwsIHN0YSk7Ci0JfQotCi0JaWYgKHNyY3RybC0+YXZnX3JhdGVfdXBkYXRlICsgNjAgKiBIWiA8IGppZmZpZXMpIHsKLQkJc3JjdHJsLT5hdmdfcmF0ZV91cGRhdGUgPSBqaWZmaWVzOwotCQlpZiAoc3JjdHJsLT50eF9hdmdfcmF0ZV9udW0gPiAwKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQkJCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXMgQXZlcmFnZSByYXRlOiAiCi0JCQkgICAgICAgIiVkICglZC8lZClcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpLAotCQkJICAgICAgIHNyY3RybC0+dHhfYXZnX3JhdGVfc3VtIC8KLQkJCSAgICAgICBzcmN0cmwtPnR4X2F2Z19yYXRlX251bSwKLQkJCSAgICAgICBzcmN0cmwtPnR4X2F2Z19yYXRlX3N1bSwKLQkJCSAgICAgICBzcmN0cmwtPnR4X2F2Z19yYXRlX251bSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KLQkJCXNyY3RybC0+dHhfYXZnX3JhdGVfc3VtID0gMDsKLQkJCXNyY3RybC0+dHhfYXZnX3JhdGVfbnVtID0gMDsKLQkJfQotCX0KLQotCXN0YV9pbmZvX3B1dChzdGEpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1yYXRlX2NvbnRyb2xfc2ltcGxlX2dldF9yYXRlKHZvaWQgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSwKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgc3RydWN0IHJhdGVfc2VsZWN0aW9uICpzZWwpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgcmF0ZWlkeDsKLQl1MTYgZmM7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwotCi0JLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nIGxvd2VzdAotCSAqIHJhdGUuICovCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKLQkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwgIXN0YSkgewotCQlzZWwtPnJhdGUgPSByYXRlX2xvd2VzdChsb2NhbCwgbW9kZSwgc3RhKTsKLQkJaWYgKHN0YSkKLQkJCXN0YV9pbmZvX3B1dChzdGEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogSWYgYSBmb3JjZWQgcmF0ZSBpcyBpbiBlZmZlY3QsIHNlbGVjdCBpdC4gKi8KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT5ic3MgJiYgc2RhdGEtPmJzcy0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpCi0JCXN0YS0+dHhyYXRlID0gc2RhdGEtPmJzcy0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4OwotCi0JcmF0ZWlkeCA9IHN0YS0+dHhyYXRlOwotCi0JaWYgKHJhdGVpZHggPj0gbW9kZS0+bnVtX3JhdGVzKQotCQlyYXRlaWR4ID0gbW9kZS0+bnVtX3JhdGVzIC0gMTsKLQotCXN0YS0+bGFzdF90eHJhdGUgPSByYXRlaWR4OwotCi0Jc3RhX2luZm9fcHV0KHN0YSk7Ci0KLQlzZWwtPnJhdGUgPSAmbW9kZS0+cmF0ZXNbcmF0ZWlkeF07Ci19Ci0KLQotc3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX3NpbXBsZV9yYXRlX2luaXQodm9pZCAqcHJpdiwgdm9pZCAqcHJpdl9zdGEsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCWludCBpOwotCXN0YS0+dHhyYXRlID0gMDsKLQltb2RlID0gbG9jYWwtPm9wZXJfaHdfbW9kZTsKLQkvKiBUT0RPOiBUaGlzIHJvdXRpbmUgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIFJTU0kgZnJvbSBwcmV2aW91cyBwYWNrZXRzCi0JICogYXMgd2UgbmVlZCB0byBoYXZlIElFRUUgODAyLjFYIGF1dGggc3VjY2VlZCBpbW1lZGlhdGVseSBhZnRlciBhc3NvYy4uCi0JICogVW50aWwgdGhhdCBtZXRob2QgaXMgaW1wbGVtZW50ZWQsIHdlIHdpbGwgdXNlIHRoZSBsb3dlc3Qgc3VwcG9ydGVkIHJhdGUKLQkgKiBhcyBhIHdvcmthcm91bmQsICovCi0JZm9yIChpID0gMDsgaSA8IG1vZGUtPm51bV9yYXRlczsgaSsrKSB7Ci0JCWlmICgoc3RhLT5zdXBwX3JhdGVzICYgQklUKGkpKSAmJgotCQkgICAgKG1vZGUtPnJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU1VQUE9SVEVEKSkgewotCQkJc3RhLT50eHJhdGUgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgKiByYXRlX2NvbnRyb2xfc2ltcGxlX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXN0cnVjdCBnbG9iYWxfcmF0ZV9jb250cm9sICpyY3RybDsKLQotCXJjdHJsID0ga3phbGxvYyhzaXplb2YoKnJjdHJsKSwgR0ZQX0FUT01JQyk7Ci0KLQlyZXR1cm4gcmN0cmw7Ci19Ci0KLQotc3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX3NpbXBsZV9mcmVlKHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGdsb2JhbF9yYXRlX2NvbnRyb2wgKnJjdHJsID0gcHJpdjsKLQlrZnJlZShyY3RybCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX3NpbXBsZV9jbGVhcih2b2lkICpwcml2KQotewotfQotCi0KLXN0YXRpYyB2b2lkICogcmF0ZV9jb250cm9sX3NpbXBsZV9hbGxvY19zdGEodm9pZCAqcHJpdiwgZ2ZwX3QgZ2ZwKQotewotCXN0cnVjdCBzdGFfcmF0ZV9jb250cm9sICpyY3RybDsKLQotCXJjdHJsID0ga3phbGxvYyhzaXplb2YoKnJjdHJsKSwgZ2ZwKTsKLQotCXJldHVybiByY3RybDsKLX0KLQotCi1zdGF0aWMgdm9pZCByYXRlX2NvbnRyb2xfc2ltcGxlX2ZyZWVfc3RhKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhKQotewotCXN0cnVjdCBzdGFfcmF0ZV9jb250cm9sICpyY3RybCA9IHByaXZfc3RhOwotCWtmcmVlKHJjdHJsKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi0KLXN0YXRpYyBpbnQgb3Blbl9maWxlX2dlbmVyaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RhX3R4X2F2Z19yYXRlX3N1bV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQljaGFyIF9fdXNlciAqdXNlcmJ1ZiwKLQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHN0YV9yYXRlX2NvbnRyb2wgKnNyY3RybCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyIGJ1ZlsyMF07Ci0KLQlzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzcmN0cmwtPnR4X2F2Z19yYXRlX3N1bSk7Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHN0cmxlbihidWYpKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhX3R4X2F2Z19yYXRlX3N1bV9vcHMgPSB7Ci0JLnJlYWQgPSBzdGFfdHhfYXZnX3JhdGVfc3VtX3JlYWQsCi0JLm9wZW4gPSBvcGVuX2ZpbGVfZ2VuZXJpYywKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHN0YV90eF9hdmdfcmF0ZV9udW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBzdGFfcmF0ZV9jb250cm9sICpzcmN0cmwgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMjBdOwotCi0Jc3ByaW50ZihidWYsICIlZFxuIiwgc3JjdHJsLT50eF9hdmdfcmF0ZV9udW0pOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YV90eF9hdmdfcmF0ZV9udW1fb3BzID0gewotCS5yZWFkID0gc3RhX3R4X2F2Z19yYXRlX251bV9yZWFkLAotCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCi19OwotCi1zdGF0aWMgdm9pZCByYXRlX2NvbnRyb2xfc2ltcGxlX2FkZF9zdGFfZGVidWdmcyh2b2lkICpwcml2LCB2b2lkICpwcml2X3N0YSwKLQkJCQkJCXN0cnVjdCBkZW50cnkgKmRpcikKLXsKLQlzdHJ1Y3Qgc3RhX3JhdGVfY29udHJvbCAqc3JjdHJsID0gcHJpdl9zdGE7Ci0KLQlzcmN0cmwtPnR4X2F2Z19yYXRlX251bV9kZW50cnkgPQotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY19zaW1wbGVfc3RhX3R4X2F2Z19yYXRlX251bSIsIDA0MDAsCi0JCQkJICAgIGRpciwgc3JjdHJsLCAmc3RhX3R4X2F2Z19yYXRlX251bV9vcHMpOwotCXNyY3RybC0+dHhfYXZnX3JhdGVfc3VtX2RlbnRyeSA9Ci0JCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjX3NpbXBsZV9zdGFfdHhfYXZnX3JhdGVfc3VtIiwgMDQwMCwKLQkJCQkgICAgZGlyLCBzcmN0cmwsICZzdGFfdHhfYXZnX3JhdGVfc3VtX29wcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJhdGVfY29udHJvbF9zaW1wbGVfcmVtb3ZlX3N0YV9kZWJ1Z2ZzKHZvaWQgKnByaXYsIHZvaWQgKnByaXZfc3RhKQotewotCXN0cnVjdCBzdGFfcmF0ZV9jb250cm9sICpzcmN0cmwgPSBwcml2X3N0YTsKLQotCWRlYnVnZnNfcmVtb3ZlKHNyY3RybC0+dHhfYXZnX3JhdGVfc3VtX2RlbnRyeSk7Ci0JZGVidWdmc19yZW1vdmUoc3JjdHJsLT50eF9hdmdfcmF0ZV9udW1fZGVudHJ5KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgbWFjODAyMTFfcmNzaW1wbGUgPSB7Ci0JLm5hbWUgPSAic2ltcGxlIiwKLQkudHhfc3RhdHVzID0gcmF0ZV9jb250cm9sX3NpbXBsZV90eF9zdGF0dXMsCi0JLmdldF9yYXRlID0gcmF0ZV9jb250cm9sX3NpbXBsZV9nZXRfcmF0ZSwKLQkucmF0ZV9pbml0ID0gcmF0ZV9jb250cm9sX3NpbXBsZV9yYXRlX2luaXQsCi0JLmNsZWFyID0gcmF0ZV9jb250cm9sX3NpbXBsZV9jbGVhciwKLQkuYWxsb2MgPSByYXRlX2NvbnRyb2xfc2ltcGxlX2FsbG9jLAotCS5mcmVlID0gcmF0ZV9jb250cm9sX3NpbXBsZV9mcmVlLAotCS5hbGxvY19zdGEgPSByYXRlX2NvbnRyb2xfc2ltcGxlX2FsbG9jX3N0YSwKLQkuZnJlZV9zdGEgPSByYXRlX2NvbnRyb2xfc2ltcGxlX2ZyZWVfc3RhLAotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi0JLmFkZF9zdGFfZGVidWdmcyA9IHJhdGVfY29udHJvbF9zaW1wbGVfYWRkX3N0YV9kZWJ1Z2ZzLAotCS5yZW1vdmVfc3RhX2RlYnVnZnMgPSByYXRlX2NvbnRyb2xfc2ltcGxlX3JlbW92ZV9zdGFfZGVidWdmcywKLSNlbmRpZgotfTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTaW1wbGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSIpOwotCi1pbnQgX19pbml0IHJjODAyMTFfc2ltcGxlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmbWFjODAyMTFfcmNzaW1wbGUpOwotfQotCi12b2lkIHJjODAyMTFfc2ltcGxlX2V4aXQodm9pZCkKLXsKLQlpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoJm1hYzgwMjExX3Jjc2ltcGxlKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9SQ19TSU1QTEVfTU9EVUxFCi1tb2R1bGVfaW5pdChyYzgwMjExX3NpbXBsZV9pbml0KTsKLW1vZHVsZV9leGl0KHJjODAyMTFfc2ltcGxlX2V4aXQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmVnZG9tYWluLmMgYi9uZXQvbWFjODAyMTEvcmVnZG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MjY3OGYuLjAwMDAwMDAKLS0tIGEvbmV0L21hYzgwMjExL3JlZ2RvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotLyoKLSAqIFRoaXMgcmVndWxhdG9yeSBkb21haW4gY29udHJvbCBpbXBsZW1lbnRhdGlvbiBpcyBrbm93biB0byBiZSBpbmNvbXBsZXRlCi0gKiBhbmQgY29uZnVzaW5nLiBtYWM4MDIxMSByZWd1bGF0b3J5IGRvbWFpbiBjb250cm9sIHdpbGwgYmUgc2lnbmlmaWNhbnRseQotICogcmV3b3JrZWQgaW4gdGhlIG5vdC10b28tZGlzdGFudCBmdXR1cmUuCi0gKgotICogRm9yIG5vdywgZHJpdmVycyB3aXNoaW5nIHRvIGNvbnRyb2wgd2hpY2ggY2hhbm5lbHMgYXJlIGFuZCBhcmVuJ3QgYXZhaWxhYmxlCi0gKiBhcmUgYWR2aXNlZCBhcyBmb2xsb3dzOgotICogIC0gc2V0IHRoZSBJRUVFODAyMTFfSFdfREVGQVVMVF9SRUdfRE9NQUlOX0NPTkZJR1VSRUQgZmxhZwotICogIC0gY29udGludWUgdG8gaW5jbHVkZSAqQUxMKiBwb3NzaWJsZSBjaGFubmVscyBpbiB0aGUgbW9kZXMgcmVnaXN0ZXJlZAotICogICAgdGhyb3VnaCBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKCkKLSAqICAtIGZvciBlYWNoIGFsbG93YWJsZSBpZWVlODAyMTFfY2hhbm5lbCBzdHJ1Y3R1cmUgcmVnaXN0ZXJlZCBpbiB0aGUgYWJvdmUKLSAqICAgIGNhbGwsIHNldCB0aGUgZmxhZyBtZW1iZXIgdG8gc29tZSBtZWFuaW5nZnVsIHZhbHVlIHN1Y2ggYXMKLSAqICAgIElFRUU4MDIxMV9DSEFOX1dfU0NBTiB8IElFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU4gfAotICogICAgSUVFRTgwMjExX0NIQU5fV19JQlNTLgotICogIC0gbGVhdmUgZmxhZyBhcyAwIGZvciBub24tYWxsb3dhYmxlIGNoYW5uZWxzCi0gKgotICogVGhlIHVzdWFsIGltcGxlbWVudGF0aW9uIGlzIGZvciBhIGRyaXZlciB0byByZWFkIGEgZGV2aWNlIEVFUFJPTSB0bwotICogZGV0ZXJtaW5lIHdoaWNoIHJlZ3VsYXRvcnkgZG9tYWluIGl0IHNob3VsZCBiZSBvcGVyYXRpbmcgdW5kZXIsIHRoZW4KLSAqIGxvb2tpbmcgdXAgdGhlIGFsbG93YWJsZSBjaGFubmVscyBpbiBhIGRyaXZlci1sb2NhbCB0YWJsZSwgdGhlbiBwZXJmb3JtaW5nCi0gKiB0aGUgYWJvdmUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3JlZ2RvbSA9IDB4MTA7IC8qIEZDQyAqLwotbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGllZWU4MDIxMV9yZWdkb20sICJJRUVFIDgwMi4xMSByZWd1bGF0b3J5IGRvbWFpbjsgNjQ9TUtLIik7Ci0KLS8qCi0gKiBJZiBmaXJtd2FyZSBpcyB1cGdyYWRlZCBieSB0aGUgdmVuZG9yLCBhZGRpdGlvbmFsIGNoYW5uZWxzIGNhbiBiZSB1c2VkIGJhc2VkCi0gKiBvbiB0aGUgbmV3IEphcGFuZXNlIHJlZ3VsYXRvcnkgcnVsZXMuIFRoaXMgaXMgaW5kaWNhdGVkIGJ5IHNldHRpbmcKLSAqIGllZWU4MDIxMV9qYXBhbl81Z2h6IG1vZHVsZSBwYXJhbWV0ZXIgdG8gb25lIHdoZW4gbG9hZGluZyB0aGUgODAyMTEga2VybmVsCi0gKiBtb2R1bGUuCi0gKi8KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2phcGFuXzVnaHogLyogPSAwICovOwotbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9qYXBhbl81Z2h6LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfamFwYW5fNWdoeiwgIlZlbmRvci11cGRhdGVkIGZpcm13YXJlIGZvciA1IEdIeiIpOwotCi0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9yYW5nZSB7Ci0Jc2hvcnQgc3RhcnRfZnJlcTsKLQlzaG9ydCBlbmRfZnJlcTsKLQl1bnNpZ25lZCBjaGFyIHBvd2VyX2xldmVsOwotCXVuc2lnbmVkIGNoYXIgYW50ZW5uYV9tYXg7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3JhbmdlIGllZWU4MDIxMV9mY2NfY2hhbm5lbHNbXSA9IHsKLQl7IDI0MTIsIDI0NjIsIDI3LCA2IH0gLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjExICovLAotCXsgNTE4MCwgNTI0MCwgMTcsIDYgfSAvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWxzIDM2Li40OCAqLywKLQl7IDUyNjAsIDUzMjAsIDIzLCA2IH0gLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyA1Mi4uNjQgKi8sCi0JeyA1NzQ1LCA1ODI1LCAzMCwgNiB9IC8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMTQ5Li4xNjUsIG91dGRvb3IgKi8sCi0JeyAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfcmFuZ2UgaWVlZTgwMjExX21ra19jaGFubmVsc1tdID0gewotCXsgMjQxMiwgMjQ3MiwgMjAsIDYgfSAvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMS4uMTMgKi8sCi0JeyA1MTcwLCA1MjQwLCAyMCwgNiB9IC8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMzQuLjQ4ICovLAotCXsgNTI2MCwgNTMyMCwgMjAsIDYgfSAvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWxzIDUyLi42NCAqLywKLQl7IDAgfQotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3JhbmdlICpjaGFubmVsX3JhbmdlID0KLQlpZWVlODAyMTFfZmNjX2NoYW5uZWxzOwotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV91bm1hc2tfY2hhbm5lbChpbnQgbW9kZSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQotewotCWludCBpOwotCi0JY2hhbi0+ZmxhZyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBjaGFubmVsX3JhbmdlW2ldLnN0YXJ0X2ZyZXE7IGkrKykgewotCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfcmFuZ2UgKnIgPSAmY2hhbm5lbF9yYW5nZVtpXTsKLQkJaWYgKHItPnN0YXJ0X2ZyZXEgPD0gY2hhbi0+ZnJlcSAmJiByLT5lbmRfZnJlcSA+PSBjaGFuLT5mcmVxKSB7Ci0JCQlpZiAoaWVlZTgwMjExX3JlZ2RvbSA9PSA2NCAmJiAhaWVlZTgwMjExX2phcGFuXzVnaHogJiYKLQkJCSAgICBjaGFuLT5mcmVxID49IDUyNjAgJiYgY2hhbi0+ZnJlcSA8PSA1MzIwKSB7Ci0JCQkJLyoKLQkJCQkgKiBTa2lwIG5ldyBjaGFubmVscyBpbiBKYXBhbiBzaW5jZSB0aGUKLQkJCQkgKiBmaXJtd2FyZSB3YXMgbm90IG1hcmtlZCBoYXZpbmcgYmVlbiB1cGdyYWRlZAotCQkJCSAqIGJ5IHRoZSB2ZW5kb3IuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmIChpZWVlODAyMTFfcmVnZG9tID09IDB4MTAgJiYKLQkJCSAgICAoY2hhbi0+ZnJlcSA9PSA1MTkwIHx8IGNoYW4tPmZyZXEgPT0gNTIxMCB8fAotCQkJICAgICBjaGFuLT5mcmVxID09IDUyMzApKSB7Ci0JCQkJICAgIC8qIFNraXAgTUtLIGNoYW5uZWxzIHdoZW4gaW4gRkNDIGRvbWFpbi4gKi8KLQkJCQkgICAgY29udGludWU7Ci0JCQl9Ci0KLQkJCWNoYW4tPmZsYWcgfD0gSUVFRTgwMjExX0NIQU5fV19TQ0FOIHwKLQkJCQlJRUVFODAyMTFfQ0hBTl9XX0FDVElWRV9TQ0FOIHwKLQkJCQlJRUVFODAyMTFfQ0hBTl9XX0lCU1M7Ci0JCQljaGFuLT5wb3dlcl9sZXZlbCA9IHItPnBvd2VyX2xldmVsOwotCQkJY2hhbi0+YW50ZW5uYV9tYXggPSByLT5hbnRlbm5hX21heDsKLQotCQkJaWYgKGllZWU4MDIxMV9yZWdkb20gPT0gNjQgJiYKLQkJCSAgICAoY2hhbi0+ZnJlcSA9PSA1MTcwIHx8IGNoYW4tPmZyZXEgPT0gNTE5MCB8fAotCQkJICAgICBjaGFuLT5mcmVxID09IDUyMTAgfHwgY2hhbi0+ZnJlcSA9PSA1MjMwKSkgewotCQkJCS8qCi0JCQkJICogTmV3IHJlZ3VsYXRvcnkgcnVsZXMgaW4gSmFwYW4gaGF2ZSBiYWNrd2FyZHMKLQkJCQkgKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGNoYW5uZWxzIGluIDUuMTUtNS4yNQotCQkJCSAqIEdIeiBiYW5kLCBidXQgdGhlIHN0YXRpb24gaXMgbm90IGFsbG93ZWQgdG8KLQkJCQkgKiB1c2UgYWN0aXZlIHNjYW4gb24gdGhlc2Ugb2xkIGNoYW5uZWxzLgotCQkJCSAqLwotCQkJCWNoYW4tPmZsYWcgJj0gfklFRUU4MDIxMV9DSEFOX1dfQUNUSVZFX1NDQU47Ci0JCQl9Ci0KLQkJCWlmIChpZWVlODAyMTFfcmVnZG9tID09IDY0ICYmCi0JCQkgICAgKGNoYW4tPmZyZXEgPT0gNTI2MCB8fCBjaGFuLT5mcmVxID09IDUyODAgfHwKLQkJCSAgICAgY2hhbi0+ZnJlcSA9PSA1MzAwIHx8IGNoYW4tPmZyZXEgPT0gNTMyMCkpIHsKLQkJCQkvKgotCQkJCSAqIElCU1MgaXMgbm90IGFsbG93ZWQgb24gNS4yNS01LjM1IEdIeiBiYW5kCi0JCQkJICogZHVlIHRvIHJhZGFyIGRldGVjdGlvbiByZXF1aXJlbWVudHMuCi0JCQkJICovCi0JCQkJY2hhbi0+ZmxhZyAmPSB+SUVFRTgwMjExX0NIQU5fV19JQlNTOwotCQkJfQotCi0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotCi12b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9yZWdkb21haW4oc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlKQotewotCWludCBjOwotCWZvciAoYyA9IDA7IGMgPCBtb2RlLT5udW1fY2hhbm5lbHM7IGMrKykKLQkJaWVlZTgwMjExX3VubWFza19jaGFubmVsKG1vZGUtPm1vZGUsICZtb2RlLT5jaGFubmVsc1tjXSk7Ci19Ci0KLQotdm9pZCBpZWVlODAyMTFfcmVnZG9tYWluX2luaXQodm9pZCkKLXsKLQlpZiAoaWVlZTgwMjExX3JlZ2RvbSA9PSAweDQwKQotCQljaGFubmVsX3JhbmdlID0gaWVlZTgwMjExX21ra19jaGFubmVsczsKLX0KLQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA1MzU0MDdkLi41MmU0NTU0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtOSw2ICs5LDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0xOCw3ICsxOSw4IEBACiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfbGVkLmgiCisjaW5jbHVkZSAibGVkLmgiCisjaW5jbHVkZSAibWVzaC5oIgogI2luY2x1ZGUgIndlcC5oIgogI2luY2x1ZGUgIndwYS5oIgogI2luY2x1ZGUgInRraXAuaCIKQEAgLTgyLDEwICs4NCwxMCBAQAogICovCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgogaWVlZTgwMjExX3J4X21vbml0b3Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpvcmlnc2tiLAotCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCWludCBuZWVkZWRfaGVhZHJvb20gPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpydGhkcjsKIAlfX2xlNjQgKnJ0dHNmdCA9IE5VTEw7CkBAIC0xOTQsMTQgKzE5NiwxMSBAQAogCQkJcnRmaXhlZC0+cnhfZmxhZ3MgfD0KIAkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURGQ1MpOwogCi0JCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3JhdGUobG9jYWwsIHN0YXR1cy0+cGh5bW9kZSwKLQkJCQkJICBzdGF0dXMtPnJhdGUpOwotCQlpZiAocmF0ZSkKLQkJCXJ0Zml4ZWQtPnJhdGUgPSByYXRlLT5yYXRlIC8gNTsKKwkJcnRmaXhlZC0+cmF0ZSA9IHJhdGUtPmJpdHJhdGUgLyA1OwogCiAJCXJ0Zml4ZWQtPmNoYW5fZnJlcSA9IGNwdV90b19sZTE2KHN0YXR1cy0+ZnJlcSk7CiAKLQkJaWYgKHN0YXR1cy0+cGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEpCisJCWlmIChzdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXJ0Zml4ZWQtPmNoYW5fZmxhZ3MgPQogCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9DSEFOX09GRE0gfAogCQkJCQkgICAgSUVFRTgwMjExX0NIQU5fNUdIWik7CkBAIC0yMjYsNiArMjI1LDkgQEAKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9NTlRSKQogCQkJY29udGludWU7CiAKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09PS19GUkFNRVMpCisJCQljb250aW51ZTsKKwogCQlpZiAocHJldl9kZXYpIHsKIAkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChza2IyKSB7CkBAIC0yNDksMTUgKzI1MSw3IEBACiB9CiAKIAotLyogcHJlLXJ4IGhhbmRsZXJzCi0gKgotICogdGhlc2UgZG9uJ3QgaGF2ZSBkZXYvc2RhdGEgZmllbGRzIGluIHRoZSByeCBkYXRhCi0gKiBUaGUgc3RhIHZhbHVlIHNob3VsZCBhbHNvIG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgbWF5Ci0gKiBiZSBOVUxMIGV2ZW4gdGhvdWdoIGEgU1RBIChpbiBJQlNTIG1vZGUpIHdpbGwgYmUgYWRkZWQuCi0gKi8KLQotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3J4X2hfcGFyc2VfcW9zKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9wYXJzZV9xb3Moc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAl1OCAqZGF0YSA9IHJ4LT5za2ItPmRhdGE7CiAJaW50IHRpZDsKQEAgLTI2OCw5ICsyNjIsOSBAQAogCQkvKiBmcmFtZSBoYXMgcW9zIGNvbnRyb2wgKi8KIAkJdGlkID0gcWNbMF0gJiBRT1NfQ09OVFJPTF9USURfTUFTSzsKIAkJaWYgKHFjWzBdICYgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UKQotCQkJcngtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFJYRF9SWF9BTVNEVTsKKwkJCXJ4LT5mbGFncyB8PSBJRUVFODAyMTFfUlhfQU1TRFU7CiAJCWVsc2UKLQkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYUlhEX1JYX0FNU0RVOworCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfQU1TRFU7CiAJfSBlbHNlIHsKIAkJaWYgKHVubGlrZWx5KChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpKSB7CiAJCQkvKiBTZXBhcmF0ZSBUSUQgZm9yIG1hbmFnZW1lbnQgZnJhbWVzICovCkBAIC0yODYsNjggKzI4MCwxOSBAQAogCWlmIChyeC0+c3RhKQogCQlJODAyX0RFQlVHX0lOQyhyeC0+c3RhLT53bWVfcnhfcXVldWVbdGlkXSk7CiAKLQlyeC0+dS5yeC5xdWV1ZSA9IHRpZDsKKwlyeC0+cXVldWUgPSB0aWQ7CiAJLyogU2V0IHNrYi0+cHJpb3JpdHkgdG8gMWQgdGFnIGlmIGhpZ2hlc3Qgb3JkZXIgYml0IG9mIFRJRCBpcyBub3Qgc2V0LgogCSAqIEZvciBub3csIHNldCBza2ItPnByaW9yaXR5IHRvIDAgZm9yIG90aGVyIGNhc2VzLiAqLwogCXJ4LT5za2ItPnByaW9yaXR5ID0gKHRpZCA+IDcpID8gMCA6IHRpZDsKLQotCXJldHVybiBUWFJYX0NPTlRJTlVFOwogfQogCi0KLXN0YXRpYyB1MzIgaWVlZTgwMjExX3J4X2xvYWRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfaXBfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0JdTMyIGxvYWQgPSAwLCBoZHJ0aW1lOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUgPSBsb2NhbC0+aHcuY29uZi5tb2RlOwotCWludCBpOwotCi0JLyogRXN0aW1hdGUgdG90YWwgY2hhbm5lbCB1c2UgY2F1c2VkIGJ5IHRoaXMgZnJhbWUgKi8KLQotCWlmICh1bmxpa2VseShtb2RlLT5udW1fcmF0ZXMgPCAwKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7Ci0KLQlyYXRlID0gJm1vZGUtPnJhdGVzWzBdOwotCWZvciAoaSA9IDA7IGkgPCBtb2RlLT5udW1fcmF0ZXM7IGkrKykgewotCQlpZiAobW9kZS0+cmF0ZXNbaV0udmFsID09IHN0YXR1cy0+cmF0ZSkgewotCQkJcmF0ZSA9ICZtb2RlLT5yYXRlc1tpXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogMSBiaXQgYXQgMSBNYml0L3MgdGFrZXMgMSB1c2VjOyBpbiBjaGFubmVsX3VzZSB2YWx1ZXMsCi0JICogMSB1c2VjID0gMS84ICogKDEwODAgLyAxMCkgPSAxMy41ICovCi0KLQlpZiAobW9kZS0+bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEgfHwKLQkgICAgKG1vZGUtPm1vZGUgPT0gTU9ERV9JRUVFODAyMTFHICYmCi0JICAgICByYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUCkpCi0JCWhkcnRpbWUgPSBDSEFOX1VUSUxfSERSX1NIT1JUOwotCWVsc2UKLQkJaGRydGltZSA9IENIQU5fVVRJTF9IRFJfTE9ORzsKLQotCWxvYWQgPSBoZHJ0aW1lOwotCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCWxvYWQgKz0gaGRydGltZTsKLQotCWxvYWQgKz0gc2tiLT5sZW4gKiByYXRlLT5yYXRlX2ludjsKLQotCS8qIERpdmlkZSBjaGFubmVsX3VzZSBieSA4IHRvIGF2b2lkIHdyYXBwaW5nIGFyb3VuZCB0aGUgY291bnRlciAqLwotCWxvYWQgPj49IENIQU5fVVRJTF9TSElGVDsKLQotCXJldHVybiBsb2FkOwotfQotCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV9yeF9oX3ZlcmlmeV9pcF9hbGlnbm1lbnQoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4KQotewogCWludCBoZHJsZW47CiAKIAlpZiAoIVdMQU5fRkNfREFUQV9QUkVTRU5UKHJ4LT5mYykpCi0JCXJldHVybiBUWFJYX0NPTlRJTlVFOworCQlyZXR1cm47CiAKIAkvKgogCSAqIERyaXZlcnMgYXJlIHJlcXVpcmVkIHRvIGFsaWduIHRoZSBwYXlsb2FkIGRhdGEgaW4gYSB3YXkgdGhhdApAQCAtMzY5LDgzICszMTQsMTU4IEBACiAJICogdG8gbW92ZSB0aGUgODAyLjExIGhlYWRlciBmdXJ0aGVyIGJhY2sgaW4gdGhhdCBjYXNlLgogCSAqLwogCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKHJ4LT5mYyk7Ci0JaWYgKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9SWF9BTVNEVSkKKwlpZiAocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0FNU0RVKQogCQloZHJsZW4gKz0gRVRIX0hMRU47CiAJV0FSTl9PTl9PTkNFKCgodW5zaWduZWQgbG9uZykocngtPnNrYi0+ZGF0YSArIGhkcmxlbikpICYgMyk7Ci0KLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKyNlbmRpZgogfQotI2VuZGlmCiAKLWllZWU4MDIxMV9yeF9oYW5kbGVyIGllZWU4MDIxMV9yeF9wcmVfaGFuZGxlcnNbXSA9CisKK3N0YXRpYyB1MzIgaWVlZTgwMjExX3J4X2xvYWRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKLQlpZWVlODAyMTFfcnhfaF9wYXJzZV9xb3MsCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKLQlpZWVlODAyMTFfcnhfaF92ZXJpZnlfaXBfYWxpZ25tZW50LAotI2VuZGlmCi0JTlVMTAotfTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwl1MzIgbG9hZCA9IDAsIGhkcnRpbWU7CisKKwkvKiBFc3RpbWF0ZSB0b3RhbCBjaGFubmVsIHVzZSBjYXVzZWQgYnkgdGhpcyBmcmFtZSAqLworCisJLyogMSBiaXQgYXQgMSBNYml0L3MgdGFrZXMgMSB1c2VjOyBpbiBjaGFubmVsX3VzZSB2YWx1ZXMsCisJICogMSB1c2VjID0gMS84ICogKDEwODAgLyAxMCkgPSAxMy41ICovCisKKwlpZiAoc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFogfHwKKwkgICAgKHN0YXR1cy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haICYmCisJICAgICByYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HKSkKKwkJaGRydGltZSA9IENIQU5fVVRJTF9IRFJfU0hPUlQ7CisJZWxzZQorCQloZHJ0aW1lID0gQ0hBTl9VVElMX0hEUl9MT05HOworCisJbG9hZCA9IGhkcnRpbWU7CisJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJbG9hZCArPSBoZHJ0aW1lOworCisJLyogVE9ETzogb3B0aW1pc2UgYWdhaW4gKi8KKwlsb2FkICs9IHNrYi0+bGVuICogQ0hBTl9VVElMX1JBVEVfTENNIC8gcmF0ZS0+Yml0cmF0ZTsKKworCS8qIERpdmlkZSBjaGFubmVsX3VzZSBieSA4IHRvIGF2b2lkIHdyYXBwaW5nIGFyb3VuZCB0aGUgY291bnRlciAqLworCWxvYWQgPj49IENIQU5fVVRJTF9TSElGVDsKKworCXJldHVybiBsb2FkOworfQogCiAvKiByeCBoYW5kbGVycyAqLwogCi1zdGF0aWMgaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfcnhfaF9pZl9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX3J4X2hfaWZfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlpZiAocngtPnN0YSkKLQkJcngtPnN0YS0+Y2hhbm5lbF91c2VfcmF3ICs9IHJ4LT51LnJ4LmxvYWQ7Ci0JcngtPnNkYXRhLT5jaGFubmVsX3VzZV9yYXcgKz0gcngtPnUucngubG9hZDsKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcngtPnN0YS0+Y2hhbm5lbF91c2VfcmF3ICs9IHJ4LT5sb2FkOworCXJ4LT5zZGF0YS0+Y2hhbm5lbF91c2VfcmF3ICs9IHJ4LT5sb2FkOworCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3J4X2hfcGFzc2l2ZV9zY2FuKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCkKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfcnhfaF9wYXNzaXZlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHJ4LT5sb2NhbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKIAogCWlmICh1bmxpa2VseShsb2NhbC0+c3RhX2h3X3NjYW5uaW5nKSkKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfc2NhbihyeC0+ZGV2LCBza2IsIHJ4LT51LnJ4LnN0YXR1cyk7CisJCXJldHVybiBpZWVlODAyMTFfc3RhX3J4X3NjYW4ocngtPmRldiwgc2tiLCByeC0+c3RhdHVzKTsKIAogCWlmICh1bmxpa2VseShsb2NhbC0+c3RhX3N3X3NjYW5uaW5nKSkgewogCQkvKiBkcm9wIGFsbCB0aGUgb3RoZXIgcGFja2V0cyBkdXJpbmcgYSBzb2Z0d2FyZSBzY2FuIGFueXdheSAqLwotCQlpZiAoaWVlZTgwMjExX3N0YV9yeF9zY2FuKHJ4LT5kZXYsIHNrYiwgcngtPnUucnguc3RhdHVzKQotCQkgICAgIT0gVFhSWF9RVUVVRUQpCisJCWlmIChpZWVlODAyMTFfc3RhX3J4X3NjYW4ocngtPmRldiwgc2tiLCByeC0+c3RhdHVzKQorCQkgICAgIT0gUlhfUVVFVUVEKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gVFhSWF9RVUVVRUQ7CisJCXJldHVybiBSWF9RVUVVRUQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KHJ4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9SWElOX1NDQU4pKSB7CisJaWYgKHVubGlrZWx5KHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9JTl9TQ0FOKSkgewogCQkvKiBzY2FubmluZyBmaW5pc2hlZCBkdXJpbmcgaW52b2tpbmcgb2YgaGFuZGxlcnMgKi8KIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfcGFzc2l2ZV9zY2FuKTsKLQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJfQogCi0JcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQogCi1zdGF0aWMgaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfcnhfaF9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX3J4X21lc2hfY2hlY2soc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK3sKKwlpbnQgaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4ocngtPmZjKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHJ4LT5za2ItPmRhdGE7CisKKyNkZWZpbmUgbXNoX2hfZ2V0KGgsIGwpICgoc3RydWN0IGllZWU4MDIxMXNfaGRyICopICgodTggKiloICsgbCkpCisKKwlpZiAoKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgeworCQlpZiAoISgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJgorCQkgICAgICAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykpKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJaWYgKG1lbWNtcChoZHItPmFkZHI0LCByeC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCX0KKworCS8qIElmIHRoZXJlIGlzIG5vdCBhbiBlc3RhYmxpc2hlZCBwZWVyIGxpbmsgYW5kIHRoaXMgaXMgbm90IGEgcGVlciBsaW5rCisJICogZXN0YWJsaXNtZW50IGZyYW1lLCBiZWFjb24gb3IgcHJvYmUsIGRyb3AgdGhlIGZyYW1lLgorCSAqLworCisJaWYgKCFyeC0+c3RhIHx8IHN0YV9wbGlua19zdGF0ZShyeC0+c3RhKSAhPSBQTElOS19FU1RBQikgeworCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisKKwkJaWYgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJCXN3aXRjaCAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgorCQkJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKiloZHI7CisJCQlpZiAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgIT0gUExJTktfQ0FURUdPUlkpCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCS8qIGZhbGwgdGhyb3VnaCBvbiBlbHNlICovCisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQl9CisKKwkgfSBlbHNlIGlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICYmCisJCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgorCQkgICAgbWVzaF9ybWNfY2hlY2soaGRyLT5hZGRyNCwgbXNoX2hfZ2V0KGhkciwgaGRybGVuKSwgcngtPmRldikpCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisjdW5kZWYgbXNoX2hfZ2V0CisKKwlyZXR1cm4gUlhfQ09OVElOVUU7Cit9CisKKworc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9yeF9oX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSByeC0+c2tiLT5kYXRhOwogCiAJLyogRHJvcCBkdXBsaWNhdGUgODAyLjExIHJldHJhbnNtaXNzaW9ucyAoSUVFRSA4MDIuMTEgQ2hhcC4gOS4yLjkpICovCiAJaWYgKHJ4LT5zdGEgJiYgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CiAJCWlmICh1bmxpa2VseShyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9SRVRSWSAmJgotCQkJICAgICByeC0+c3RhLT5sYXN0X3NlcV9jdHJsW3J4LT51LnJ4LnF1ZXVlXSA9PQorCQkJICAgICByeC0+c3RhLT5sYXN0X3NlcV9jdHJsW3J4LT5xdWV1ZV0gPT0KIAkJCSAgICAgaGRyLT5zZXFfY3RybCkpIHsKLQkJCWlmIChyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhSWERfUlhSQV9NQVRDSCkgeworCQkJaWYgKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkgewogCQkJCXJ4LT5sb2NhbC0+ZG90MTFGcmFtZUR1cGxpY2F0ZUNvdW50Kys7CiAJCQkJcngtPnN0YS0+bnVtX2R1cGxpY2F0ZXMrKzsKIAkJCX0KLQkJCXJldHVybiBUWFJYX0RST1A7CisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQl9IGVsc2UKLQkJCXJ4LT5zdGEtPmxhc3Rfc2VxX2N0cmxbcngtPnUucngucXVldWVdID0gaGRyLT5zZXFfY3RybDsKKwkJCXJ4LT5zdGEtPmxhc3Rfc2VxX2N0cmxbcngtPnF1ZXVlXSA9IGhkci0+c2VxX2N0cmw7CiAJfQogCiAJaWYgKHVubGlrZWx5KHJ4LT5za2ItPmxlbiA8IDE2KSkgewogCQlJODAyX0RFQlVHX0lOQyhyeC0+bG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3Bfc2hvcnQpOwotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCX0KIAogCS8qIERyb3AgZGlzYWxsb3dlZCBmcmFtZSBjbGFzc2VzIGJhc2VkIG9uIFNUQSBhdXRoL2Fzc29jIHN0YXRlOwpAQCAtNDU2LDYgKzQ3NiwxMCBAQAogCSAqIGRlYXV0aC9kaXNhc3NvYyBmcmFtZXMgd2hlbiBuZWVkZWQuIEluIGFkZGl0aW9uLCBob3N0YXBkIGlzCiAJICogcmVzcG9uc2libGUgZm9yIGZpbHRlcmluZyBvbiBib3RoIGF1dGggYW5kIGFzc29jIHN0YXRlcy4KIAkgKi8KKworCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnJ4LT5zZGF0YS0+dmlmKSkKKwkJcmV0dXJuIGllZWU4MDIxMV9yeF9tZXNoX2NoZWNrKHJ4KTsKKwogCWlmICh1bmxpa2VseSgoKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSB8fAogCQkgICAgICAoKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMICYmCiAJCSAgICAgICAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpKSAmJgpAQCAtNDY0LDI2ICs0ODgsMjYgQEAKIAkJaWYgKCghKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgJiYKIAkJICAgICAhKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpICYmCiAJCSAgICAgKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKLQkJICAgIHx8ICEocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYUkFfTUFUQ0gpKSB7CisJCSAgICB8fCAhKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpIHsKIAkJCS8qIERyb3AgSUJTUyBmcmFtZXMgYW5kIGZyYW1lcyBmb3Igb3RoZXIgaG9zdHMKIAkJCSAqIHNpbGVudGx5LiAqLwotCQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAJCX0KIAotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCX0KIAotCXJldHVybiBUWFJYX0NPTlRJTlVFOworCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAogCi1zdGF0aWMgaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfcnhfaF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCkKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfcnhfaF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSByeC0+c2tiLT5kYXRhOwogCWludCBrZXlpZHg7CiAJaW50IGhkcmxlbjsKLQlpZWVlODAyMTFfdHhyeF9yZXN1bHQgcmVzdWx0ID0gVFhSWF9EUk9QOworCWllZWU4MDIxMV9yeF9yZXN1bHQgcmVzdWx0ID0gUlhfRFJPUF9VTlVTQUJMRTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqc3Rha2V5ID0gTlVMTDsKIAogCS8qCkBAIC01MTMsMTQgKzUzNywxNCBAQAogCSAqLwogCiAJaWYgKCEocngtPmZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJCXJldHVybiBSWF9DT05USU5VRTsKIAogCS8qCiAJICogTm8gcG9pbnQgaW4gZmluZGluZyBhIGtleSBhbmQgZGVjcnlwdGluZyBpZiB0aGUgZnJhbWUgaXMgbmVpdGhlcgogCSAqIGFkZHJlc3NlZCB0byB1cyBub3IgYSBtdWx0aWNhc3QgZnJhbWUuCiAJICovCi0JaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYUkFfTUFUQ0gpKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAocngtPnN0YSkKIAkJc3Rha2V5ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LT5zdGEtPmtleSk7CkBAIC01MzcsMTQgKzU2MSwxNCBAQAogCQkgKiB3ZSBzb21laG93IGFsbG93IHRoZSBkcml2ZXIgdG8gdGVsbCB1cyB3aGljaCBrZXkKIAkJICogdGhlIGhhcmR3YXJlIHVzZWQgaWYgdGhpcyBmbGFnIGlzIHNldD8KIAkJICovCi0JCWlmICgocngtPnUucnguc3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCi0JCSAgICAocngtPnUucnguc3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCi0JCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJaWYgKChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCisJCSAgICAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKHJ4LT5mYyk7CiAKIAkJaWYgKHJ4LT5za2ItPmxlbiA8IDggKyBoZHJsZW4pCi0JCQlyZXR1cm4gVFhSWF9EUk9QOyAvKiBUT0RPOiBjb3VudCB0aGlzPyAqLworCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7IC8qIFRPRE86IGNvdW50IHRoaXM/ICovCiAKIAkJLyoKIAkJICogbm8gbmVlZCB0byBjYWxsIGllZWU4MDIxMV93ZXBfZ2V0X2tleWlkeCwKQEAgLTU3MywxNCArNTk3LDE0IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIHByb3RlY3RlZCBmcmFtZSwiCiAJCQkgICAgICAgIiBidXQgaGF2ZSBubyBrZXlcbiIsIHJ4LT5kZXYtPm5hbWUpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLwotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCX0KIAogCS8qIENoZWNrIGZvciB3ZWFrIElWcyBpZiBwb3NzaWJsZSAqLwogCWlmIChyeC0+c3RhICYmIHJ4LT5rZXktPmNvbmYuYWxnID09IEFMR19XRVAgJiYKIAkgICAgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpICYmCi0JICAgICghKHJ4LT51LnJ4LnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpIHx8Ci0JICAgICAhKHJ4LT51LnJ4LnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSkgJiYKKwkgICAgKCEocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpIHx8CisJICAgICAhKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpICYmCiAJICAgIGllZWU4MDIxMV93ZXBfaXNfd2Vha19pdihyeC0+c2tiLCByeC0+a2V5KSkKIAkJcngtPnN0YS0+d2VwX3dlYWtfaXZfY291bnQrKzsKIApAQCAtNTk3LDcgKzYyMSw3IEBACiAJfQogCiAJLyogZWl0aGVyIHRoZSBmcmFtZSBoYXMgYmVlbiBkZWNyeXB0ZWQgb3Igd2lsbCBiZSBkcm9wcGVkICovCi0JcngtPnUucnguc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCXJ4LT5zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtNjA3LDEyICs2MzEsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoc3RhLT5kZXYpOworCXNkYXRhID0gc3RhLT5zZGF0YTsKIAogCWlmIChzZGF0YS0+YnNzKQogCQlhdG9taWNfaW5jKCZzZGF0YS0+YnNzLT5udW1fc3RhX3BzKTsKIAlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1BTOwotCXN0YS0+cHNwb2xsID0gMDsKKwlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9QU1BPTEw7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcyBhaWQgJWQgZW50ZXJzIHBvd2VyIHNhdmUgbW9kZVxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpLCBzdGEtPmFpZCk7CkBAIC02MjgsMjEgKzY1MiwyMSBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKnBrdF9kYXRhOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihzdGEtPmRldik7CisJc2RhdGEgPSBzdGEtPnNkYXRhOworCiAJaWYgKHNkYXRhLT5ic3MpCiAJCWF0b21pY19kZWMoJnNkYXRhLT5ic3MtPm51bV9zdGFfcHMpOwotCXN0YS0+ZmxhZ3MgJj0gfihXTEFOX1NUQV9QUyB8IFdMQU5fU1RBX1RJTSk7Ci0Jc3RhLT5wc3BvbGwgPSAwOwotCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpIHsKLQkJaWYgKGxvY2FsLT5vcHMtPnNldF90aW0pCi0JCQlsb2NhbC0+b3BzLT5zZXRfdGltKGxvY2FsX3RvX2h3KGxvY2FsKSwgc3RhLT5haWQsIDApOwotCQlpZiAoc2RhdGEtPmJzcykKLQkJCWJzc190aW1fY2xlYXIobG9jYWwsIHNkYXRhLT5ic3MsIHN0YS0+YWlkKTsKLQl9CisKKwlzdGEtPmZsYWdzICY9IH4oV0xBTl9TVEFfUFMgfCBXTEFOX1NUQV9QU1BPTEwpOworCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSkKKwkJc3RhX2luZm9fY2xlYXJfdGltX2JpdChzdGEpOworCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcyBhaWQgJWQgZXhpdHMgcG93ZXIgc2F2ZSBtb2RlXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIHN0YS0+YWRkciksIHN0YS0+YWlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLworCiAJLyogU2VuZCBhbGwgYnVmZmVyZWQgZnJhbWVzIHRvIHRoZSBzdGF0aW9uICovCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT50eF9maWx0ZXJlZCkpICE9IE5VTEwpIHsKIAkJcGt0X2RhdGEgPSAoc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqKSBza2ItPmNiOwpAQCAtNjY2LDE1ICs2OTAsMTUgQEAKIAlyZXR1cm4gc2VudDsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3J4X2hfc3RhX3Byb2Nlc3Moc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4KQorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9yeF9oX3N0YV9wcm9jZXNzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSByeC0+c3RhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByeC0+ZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgcngtPnNrYi0+ZGF0YTsKIAogCWlmICghc3RhKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJLyogVXBkYXRlIGxhc3Rfcnggb25seSBmb3IgSUJTUyBwYWNrZXRzIHdoaWNoIGFyZSBmb3IgdGhlIGN1cnJlbnQKIAkgKiBCU1NJRCB0byBhdm9pZCBrZWVwaW5nIHRoZSBjdXJyZW50IElCU1MgbmV0d29yayBhbGl2ZSBpbiBjYXNlcyB3aGVyZQpAQCAtNjkwLDI0ICs3MTQsMjYgQEAKIAkJLyogVXBkYXRlIGxhc3Rfcnggb25seSBmb3IgdW5pY2FzdCBmcmFtZXMgaW4gb3JkZXIgdG8gcHJldmVudAogCQkgKiB0aGUgUHJvYmUgUmVxdWVzdCBmcmFtZXMgKHRoZSBvbmx5IGJyb2FkY2FzdCBmcmFtZXMgZnJvbSBhCiAJCSAqIFNUQSBpbiBpbmZyYXN0cnVjdHVyZSBtb2RlKSBmcm9tIGtlZXBpbmcgYSBjb25uZWN0aW9uIGFsaXZlLgorCQkgKiBNZXNoIGJlYWNvbnMgd2lsbCB1cGRhdGUgbGFzdF9yeCB3aGVuIGlmIHRoZXkgYXJlIGZvdW5kIHRvCisJCSAqIG1hdGNoIHRoZSBjdXJyZW50IGxvY2FsIGNvbmZpZ3VyYXRpb24gd2hlbiBwcm9jZXNzZWQuCiAJCSAqLwogCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwogCX0KIAotCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9SWFJBX01BVENIKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJc3RhLT5yeF9mcmFnbWVudHMrKzsKIAlzdGEtPnJ4X2J5dGVzICs9IHJ4LT5za2ItPmxlbjsKLQlzdGEtPmxhc3RfcnNzaSA9IHJ4LT51LnJ4LnN0YXR1cy0+c3NpOwotCXN0YS0+bGFzdF9zaWduYWwgPSByeC0+dS5yeC5zdGF0dXMtPnNpZ25hbDsKLQlzdGEtPmxhc3Rfbm9pc2UgPSByeC0+dS5yeC5zdGF0dXMtPm5vaXNlOworCXN0YS0+bGFzdF9yc3NpID0gcngtPnN0YXR1cy0+c3NpOworCXN0YS0+bGFzdF9zaWduYWwgPSByeC0+c3RhdHVzLT5zaWduYWw7CisJc3RhLT5sYXN0X25vaXNlID0gcngtPnN0YXR1cy0+bm9pc2U7CiAKIAlpZiAoIShyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSB7CiAJCS8qIENoYW5nZSBTVEEgcG93ZXIgc2F2aW5nIG1vZGUgb25seSBpbiB0aGUgZW5kIG9mIGEgZnJhbWUKIAkJICogZXhjaGFuZ2Ugc2VxdWVuY2UgKi8KIAkJaWYgKChzdGEtPmZsYWdzICYgV0xBTl9TVEFfUFMpICYmICEocngtPmZjICYgSUVFRTgwMjExX0ZDVExfUE0pKQotCQkJcngtPnUucnguc2VudF9wc19idWZmZXJlZCArPSBhcF9zdGFfcHNfZW5kKGRldiwgc3RhKTsKKwkJCXJ4LT5zZW50X3BzX2J1ZmZlcmVkICs9IGFwX3N0YV9wc19lbmQoZGV2LCBzdGEpOwogCQllbHNlIGlmICghKHN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9QUykgJiYKIAkJCSAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfUE0pKQogCQkJYXBfc3RhX3BzX3N0YXJ0KGRldiwgc3RhKTsKQEAgLTcyMiwxMCArNzQ4LDEwIEBACiAJCSAqIGFzIGEgZHJvcHBlZCBwYWNrZWQuICovCiAJCXN0YS0+cnhfcGFja2V0cysrOwogCQlkZXZfa2ZyZWVfc2tiKHJ4LT5za2IpOwotCQlyZXR1cm4gVFhSWF9RVUVVRUQ7CisJCXJldHVybiBSWF9RVUVVRUQ7CiAJfQogCi0JcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJcmV0dXJuIFJYX0NPTlRJTlVFOwogfSAvKiBpZWVlODAyMTFfcnhfaF9zdGFfcHJvY2VzcyAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfZW50cnkgKgpAQCAtODAxLDcgKzgyNyw3IEBACiAJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoaGRyLT5hZGRyMiwgZl9oZHItPmFkZHIyKSAhPSAwKQogCQkJY29udGludWU7CiAKLQkJaWYgKGVudHJ5LT5maXJzdF9mcmFnX3RpbWUgKyAyICogSFogPCBqaWZmaWVzKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGVudHJ5LT5maXJzdF9mcmFnX3RpbWUgKyAyICogSFopKSB7CiAJCQlfX3NrYl9xdWV1ZV9wdXJnZSgmZW50cnktPnNrYl9saXN0KTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC04MTEsOCArODM3LDggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IHNjOwpAQCAtODM4LDI3ICs4NjQsMjcgQEAKIAlpZiAoZnJhZyA9PSAwKSB7CiAJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGZyYWdtZW50IG9mIGEgbmV3IGZyYW1lLiAqLwogCQllbnRyeSA9IGllZWU4MDIxMV9yZWFzc2VtYmxlX2FkZChyeC0+c2RhdGEsIGZyYWcsIHNlcSwKLQkJCQkJCSByeC0+dS5yeC5xdWV1ZSwgJihyeC0+c2tiKSk7CisJCQkJCQkgcngtPnF1ZXVlLCAmKHJ4LT5za2IpKTsKIAkJaWYgKHJ4LT5rZXkgJiYgcngtPmtleS0+Y29uZi5hbGcgPT0gQUxHX0NDTVAgJiYKIAkJICAgIChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSB7CiAJCQkvKiBTdG9yZSBDQ01QIFBOIHNvIHRoYXQgd2UgY2FuIHZlcmlmeSB0aGF0IHRoZSBuZXh0CiAJCQkgKiBmcmFnbWVudCBoYXMgYSBzZXF1ZW50aWFsIFBOIHZhbHVlLiAqLwogCQkJZW50cnktPmNjbXAgPSAxOwogCQkJbWVtY3B5KGVudHJ5LT5sYXN0X3BuLAotCQkJICAgICAgIHJ4LT5rZXktPnUuY2NtcC5yeF9wbltyeC0+dS5yeC5xdWV1ZV0sCisJCQkgICAgICAgcngtPmtleS0+dS5jY21wLnJ4X3BuW3J4LT5xdWV1ZV0sCiAJCQkgICAgICAgQ0NNUF9QTl9MRU4pOwogCQl9Ci0JCXJldHVybiBUWFJYX1FVRVVFRDsKKwkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKIAkvKiBUaGlzIGlzIGEgZnJhZ21lbnQgZm9yIGEgZnJhbWUgdGhhdCBzaG91bGQgYWxyZWFkeSBiZSBwZW5kaW5nIGluCiAJICogZnJhZ21lbnQgY2FjaGUuIEFkZCB0aGlzIGZyYWdtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHBlbmRpbmcgZW50cnkuCiAJICovCiAJZW50cnkgPSBpZWVlODAyMTFfcmVhc3NlbWJsZV9maW5kKHJ4LT5zZGF0YSwgcngtPmZjLCBmcmFnLCBzZXEsCi0JCQkJCSAgcngtPnUucngucXVldWUsIGhkcik7CisJCQkJCSAgcngtPnF1ZXVlLCBoZHIpOwogCWlmICghZW50cnkpIHsKIAkJSTgwMl9ERUJVR19JTkMocngtPmxvY2FsLT5yeF9oYW5kbGVyc19kcm9wX2RlZnJhZyk7Ci0JCXJldHVybiBUWFJYX0RST1A7CisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAJfQogCiAJLyogVmVyaWZ5IHRoYXQgTVBEVXMgd2l0aGluIG9uZSBNU0RVIGhhdmUgc2VxdWVudGlhbCBQTiB2YWx1ZXMuCkBAIC04NjcsMTQgKzg5MywxNCBAQAogCQlpbnQgaTsKIAkJdTggcG5bQ0NNUF9QTl9MRU5dLCAqcnBuOwogCQlpZiAoIXJ4LT5rZXkgfHwgcngtPmtleS0+Y29uZi5hbGcgIT0gQUxHX0NDTVApCi0JCQlyZXR1cm4gVFhSWF9EUk9QOworCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCW1lbWNweShwbiwgZW50cnktPmxhc3RfcG4sIENDTVBfUE5fTEVOKTsKIAkJZm9yIChpID0gQ0NNUF9QTl9MRU4gLSAxOyBpID49IDA7IGktLSkgewogCQkJcG5baV0rKzsKIAkJCWlmIChwbltpXSkKIAkJCQlicmVhazsKIAkJfQotCQlycG4gPSByeC0+a2V5LT51LmNjbXAucnhfcG5bcngtPnUucngucXVldWVdOworCQlycG4gPSByeC0+a2V5LT51LmNjbXAucnhfcG5bcngtPnF1ZXVlXTsKIAkJaWYgKG1lbWNtcChwbiwgcnBuLCBDQ01QX1BOX0xFTikgIT0gMCkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlZnJhZzogQ0NNUCBQTiBub3QgIgpAQCAtODg1LDcgKzkxMSw3IEBACiAJCQkJICAgICAgIHJwblswXSwgcnBuWzFdLCBycG5bMl0sIHJwblszXSwgcnBuWzRdLAogCQkJCSAgICAgICBycG5bNV0sIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLAogCQkJCSAgICAgICBwbls0XSwgcG5bNV0pOwotCQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCQl9CiAJCW1lbWNweShlbnRyeS0+bGFzdF9wbiwgcG4sIENDTVBfUE5fTEVOKTsKIAl9CkBAIC04OTYsNyArOTIyLDcgQEAKIAllbnRyeS0+ZXh0cmFfbGVuICs9IHJ4LT5za2ItPmxlbjsKIAlpZiAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSB7CiAJCXJ4LT5za2IgPSBOVUxMOwotCQlyZXR1cm4gVFhSWF9RVUVVRUQ7CisJCXJldHVybiBSWF9RVUVVRUQ7CiAJfQogCiAJcngtPnNrYiA9IF9fc2tiX2RlcXVldWUoJmVudHJ5LT5za2JfbGlzdCk7CkBAIC05MDYsNyArOTMyLDcgQEAKIAkJCQkJICAgICAgR0ZQX0FUT01JQykpKSB7CiAJCQlJODAyX0RFQlVHX0lOQyhyeC0+bG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3BfZGVmcmFnKTsKIAkJCV9fc2tiX3F1ZXVlX3B1cmdlKCZlbnRyeS0+c2tiX2xpc3QpOwotCQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCQl9CiAJfQogCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmZW50cnktPnNrYl9saXN0KSkpIHsKQEAgLTkxNSw3ICs5NDEsNyBAQAogCX0KIAogCS8qIENvbXBsZXRlIGZyYW1lIGhhcyBiZWVuIHJlYXNzZW1ibGVkIC0gcHJvY2VzcyBpdCBub3cgKi8KLQlyeC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUlhEX0ZSQUdNRU5URUQ7CisJcngtPmZsYWdzIHw9IElFRUU4MDIxMV9SWF9GUkFHTUVOVEVEOwogCiAgb3V0OgogCWlmIChyeC0+c3RhKQpAQCAtOTI0LDExICs5NTAsMTEgQEAKIAkJcngtPmxvY2FsLT5kb3QxMU11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudCsrOwogCWVsc2UKIAkJaWVlZTgwMjExX2xlZF9yeChyeC0+bG9jYWwpOwotCXJldHVybiBUWFJYX0NPTlRJTlVFOworCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3J4X2hfcHNfcG9sbChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX3J4X2hfcHNfcG9sbChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTkzOCwxMiArOTY0LDEyIEBACiAJaWYgKGxpa2VseSghcngtPnN0YSB8fAogCQkgICAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9DVEwgfHwKIAkJICAgKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSAhPSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMIHx8Ci0JCSAgICEocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYUkFfTUFUQ0gpKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJCSAgICEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkpCisJCXJldHVybiBSWF9DT05USU5VRTsKIAogCWlmICgoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQKSAmJgogCSAgICAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pKQotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAogCXNrYiA9IHNrYl9kZXF1ZXVlKCZyeC0+c3RhLT50eF9maWx0ZXJlZCk7CiAJaWYgKCFza2IpIHsKQEAgLTk1OCw5ICs5ODQsMTEgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCi0JCS8qIHRlbGwgVFggcGF0aCB0byBzZW5kIG9uZSBmcmFtZSBldmVuIHRob3VnaCB0aGUgU1RBIG1heQotCQkgKiBzdGlsbCByZW1haW4gaXMgUFMgbW9kZSBhZnRlciB0aGlzIGZyYW1lIGV4Y2hhbmdlICovCi0JCXJ4LT5zdGEtPnBzcG9sbCA9IDE7CisJCS8qCisJCSAqIFRlbGwgVFggcGF0aCB0byBzZW5kIG9uZSBmcmFtZSBldmVuIHRob3VnaCB0aGUgU1RBIG1heQorCQkgKiBzdGlsbCByZW1haW4gaXMgUFMgbW9kZSBhZnRlciB0aGlzIGZyYW1lIGV4Y2hhbmdlLgorCQkgKi8KKwkJcngtPnN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfUFNQT0xMOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlNUQSAlcyBhaWQgJWQ6IFBTIFBvbGwgKGVudHJpZXMgYWZ0ZXIgJWQpXG4iLApAQCAtOTcwLDQ2ICs5OTgsNDUgQEAKIAogCQkvKiBVc2UgTW9yZURhdGEgZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlCiAJCSAqIGJ1ZmZlcmVkIGZyYW1lcyBmb3IgdGhpcyBTVEEgKi8KLQkJaWYgKG5vX3BlbmRpbmdfcGt0cykgeworCQlpZiAobm9fcGVuZGluZ19wa3RzKQogCQkJaGRyLT5mcmFtZV9jb250cm9sICY9IGNwdV90b19sZTE2KH5JRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7Ci0JCQlyeC0+c3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfVElNOwotCQl9IGVsc2UKKwkJZWxzZQogCQkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKIAogCQlkZXZfcXVldWVfeG1pdChza2IpOwogCi0JCWlmIChub19wZW5kaW5nX3BrdHMpIHsKLQkJCWlmIChyeC0+bG9jYWwtPm9wcy0+c2V0X3RpbSkKLQkJCQlyeC0+bG9jYWwtPm9wcy0+c2V0X3RpbShsb2NhbF90b19odyhyeC0+bG9jYWwpLAotCQkJCQkJICAgICAgIHJ4LT5zdGEtPmFpZCwgMCk7Ci0JCQlpZiAocngtPnNkYXRhLT5ic3MpCi0JCQkJYnNzX3RpbV9jbGVhcihyeC0+bG9jYWwsIHJ4LT5zZGF0YS0+YnNzLCByeC0+c3RhLT5haWQpOwotCQl9CisJCWlmIChub19wZW5kaW5nX3BrdHMpCisJCQlzdGFfaW5mb19jbGVhcl90aW1fYml0KHJ4LT5zdGEpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCi0JfSBlbHNlIGlmICghcngtPnUucnguc2VudF9wc19idWZmZXJlZCkgeworCX0gZWxzZSBpZiAoIXJ4LT5zZW50X3BzX2J1ZmZlcmVkKSB7CisJCS8qCisJCSAqIEZJWE1FOiBUaGlzIGNhbiBiZSB0aGUgcmVzdWx0IG9mIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbgorCQkgKgkgIHVzIGV4cGlyaW5nIGEgZnJhbWUgYW5kIHRoZSBzdGF0aW9uIHBvbGxpbmcgZm9yIGl0LgorCQkgKgkgIFNob3VsZCB3ZSBzZW5kIGl0IGEgbnVsbC1mdW5jIGZyYW1lIGluZGljYXRpbmcgd2UKKwkJICoJICBoYXZlIG5vdGhpbmcgYnVmZmVyZWQgZm9yIGl0PworCQkgKi8KIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXMgc2VudCBQUyBQb2xsIGV2ZW4gIgogCQkgICAgICAgInRob3VnaCB0aGVyZSBpcyBubyBidWZmZXJlZCBmcmFtZXMgZm9yIGl0XG4iLAogCQkgICAgICAgcngtPmRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgcngtPnN0YS0+YWRkcikpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHICovCi0KIAl9CiAKLQkvKiBGcmVlIFBTIFBvbGwgc2tiIGhlcmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgVFhSWF9EUk9QIHRoYXQgd291bGQKKwkvKiBGcmVlIFBTIFBvbGwgc2tiIGhlcmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgUlhfRFJPUCB0aGF0IHdvdWxkCiAJICogY291bnQgYXMgYW4gZHJvcHBlZCBmcmFtZS4gKi8KIAlkZXZfa2ZyZWVfc2tiKHJ4LT5za2IpOwogCi0JcmV0dXJuIFRYUlhfUVVFVUVEOworCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV9yeF9oX3JlbW92ZV9xb3NfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX3J4X2hfcmVtb3ZlX3Fvc19jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJdTE2IGZjID0gcngtPmZjOwogCXU4ICpkYXRhID0gcngtPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIGRhdGE7CiAKIAlpZiAoIVdMQU5fRkNfSVNfUU9TX0RBVEEoZmMpKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJLyogcmVtb3ZlIHRoZSBxb3MgY29udHJvbCBmaWVsZCwgdXBkYXRlIGZyYW1lIHR5cGUgYW5kIG1ldGEtZGF0YSAqLwogCW1lbW1vdmUoZGF0YSArIDIsIGRhdGEsIGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKSAtIDIpOwpAQCAtMTAxOCwxNyArMTA0NSwxNyBAQAogCXJ4LT5mYyA9IGZjICY9IH5JRUVFODAyMTFfU1RZUEVfUU9TX0RBVEE7CiAJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCi0JcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQogCiBzdGF0aWMgaW50Ci1pZWVlODAyMTFfODAyXzF4X3BvcnRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitpZWVlODAyMTFfODAyXzF4X3BvcnRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewotCWlmICh1bmxpa2VseShyeC0+c2RhdGEtPmllZWU4MDJfMXhfcGFjICYmCi0JCSAgICAgKCFyeC0+c3RhIHx8ICEocngtPnN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9BVVRIT1JJWkVEKSkpKSB7CisJaWYgKHVubGlrZWx5KCFyeC0+c3RhIHx8ICEocngtPnN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9BVVRIT1JJWkVEKSkpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIGZyYW1lICIKLQkJICAgICAgICIodW5hdXRob3JpemVkIHBvcnQpXG4iLCByeC0+ZGV2LT5uYW1lKTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBmcmFtZSAiCisJCQkgICAgICAgIih1bmF1dGhvcml6ZWQgcG9ydClcbiIsIHJ4LT5kZXYtPm5hbWUpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC0xMDM3LDMwICsxMDY0LDI3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCkKK2llZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJLyoKIAkgKiBQYXNzIHRocm91Z2ggdW5lbmNyeXB0ZWQgZnJhbWVzIGlmIHRoZSBoYXJkd2FyZSBoYXMKIAkgKiBkZWNyeXB0ZWQgdGhlbSBhbHJlYWR5LgogCSAqLwotCWlmIChyeC0+dS5yeC5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkKKwlpZiAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKQogCQlyZXR1cm4gMDsKIAogCS8qIERyb3AgdW5lbmNyeXB0ZWQgZnJhbWVzIGlmIGtleSBpcyBzZXQuICovCiAJaWYgKHVubGlrZWx5KCEocngtPmZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSAmJgogCQkgICAgIChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKIAkJICAgICAocngtPmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpICE9IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyAmJgotCQkgICAgIChyeC0+a2V5IHx8IHJ4LT5zZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCkpKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIG5vbi1XRVAgZnJhbWUsIGJ1dCBleHBlY3RlZCAiCi0JCQkgICAgICAgImVuY3J5cHRpb25cbiIsIHJ4LT5kZXYtPm5hbWUpOworCQkgICAgIChyeC0+a2V5IHx8IHJ4LT5zZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCkpKQogCQlyZXR1cm4gLUVBQ0NFUzsKLQl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotaWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitpZWVlODAyMTFfZGF0YV90b184MDIzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ4LT5kZXY7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSByeC0+c2tiLT5kYXRhOwpAQCAtMTA4Miw2ICsxMTA2LDIxIEBACiAKIAloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYyk7CiAKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgeworCQlpbnQgbWVzaGhkcmxlbiA9IGllZWU4MDIxMV9nZXRfbWVzaF9oZHJsZW4oCisJCQkJKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqKSAoc2tiLT5kYXRhICsgaGRybGVuKSk7CisJCS8qIENvcHkgb24gY2I6CisJCSAqICAtIG1lc2ggaGVhZGVyOiB0byBiZSB1c2VkIGZvciBtZXNoIGZvcndhcmRpbmcKKwkJICogZGVjaXNpb24uIEl0IHdpbGwgYWxzbyBiZSB1c2VkIGFzIG1lc2ggaGVhZGVyIHRlbXBsYXRlIGF0CisJCSAqIHR4LmM6aWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoKSBpZiBpbnRlcmZhY2UKKwkJICogdHlwZSBpcyBtZXNoIGFuZCBza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QKKwkJICogIC0gdGE6IHRvIGJlIHVzZWQgaWYgYSBSRVJSIG5lZWRzIHRvIGJlIHNlbnQuCisJCSAqLworCQltZW1jcHkoc2tiLT5jYiwgc2tiLT5kYXRhICsgaGRybGVuLCBtZXNoaGRybGVuKTsKKwkJbWVtY3B5KE1FU0hfUFJFUShza2IpLCBoZHItPmFkZHIyLCBFVEhfQUxFTik7CisJCWhkcmxlbiArPSBtZXNoaGRybGVuOworCX0KKwogCS8qIGNvbnZlcnQgSUVFRSA4MDIuMTEgaGVhZGVyICsgcG9zc2libGUgTExDIGhlYWRlcnMgaW50byBFdGhlcm5ldAogCSAqIGhlYWRlcgogCSAqIElFRUUgODAyLjExIGFkZHJlc3MgZmllbGRzOgpAQCAtMTExNSw5ICsxMTU0LDEwIEBACiAJCW1lbWNweShkc3QsIGhkci0+YWRkcjMsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KHNyYywgaGRyLT5hZGRyNCwgRVRIX0FMRU4pOwogCi0JCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfV0RTKSkgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgRnJvbURTJlRvRFMgIgorCQkgaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9XRFMgJiYKKwkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQpKSB7CisJCQkgaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIEZyb21EUyZUb0RTICIKIAkJCQkgICAgICAgImZyYW1lIChSQT0lcyBUQT0lcyBEQT0lcyBTQT0lcylcbiIsCiAJCQkJICAgICAgIHJ4LT5kZXYtPm5hbWUsCiAJCQkJICAgICAgIHByaW50X21hYyhtYWMsIGhkci0+YWRkcjEpLApAQCAtMTE5Miw3ICsxMjMyLDcgQEAKIC8qCiAgKiByZXF1aXJlcyB0aGF0IHJ4LT5za2IgaXMgYSBmcmFtZSB3aXRoIGV0aGVybmV0IGhlYWRlcgogICovCi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfZnJhbWVfYWxsb3dlZChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitzdGF0aWMgYm9vbCBpZWVlODAyMTFfZnJhbWVfYWxsb3dlZChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0YXRpYyBjb25zdCB1OCBwYWVfZ3JvdXBfYWRkcltFVEhfQUxFTl0KIAkJPSB7IDB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDMgfTsKQEAgLTEyMTgsNyArMTI1OCw3IEBACiAgKiByZXF1aXJlcyB0aGF0IHJ4LT5za2IgaXMgYSBmcmFtZSB3aXRoIGV0aGVybmV0IGhlYWRlcgogICovCiBzdGF0aWMgdm9pZAotaWVlZTgwMjExX2RlbGl2ZXJfc2tiKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCkKK2llZWU4MDIxMV9kZWxpdmVyX3NrYihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByeC0+ZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwpAQCAtMTIzMiw3ICsxMjcyLDcgQEAKIAogCWlmIChsb2NhbC0+YnJpZGdlX3BhY2tldHMgJiYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCB8fAogCQkJCSAgICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOKSAmJgotCSAgICAocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYUkFfTUFUQ0gpKSB7CisJICAgIChyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKSB7CiAJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihlaGRyLT5oX2Rlc3QpKSB7CiAJCQkvKgogCQkJICogc2VuZCBtdWx0aWNhc3QgZnJhbWVzIGJvdGggdG8gaGlnaGVyIGxheWVycyBpbgpAQCAtMTI0NCw3ICsxMjg0LDcgQEAKIAkJCQkgICAgICAgIm11bHRpY2FzdCBmcmFtZVxuIiwgZGV2LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCWRzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNrYi0+ZGF0YSk7Ci0JCQlpZiAoZHN0YSAmJiBkc3RhLT5kZXYgPT0gZGV2KSB7CisJCQlpZiAoZHN0YSAmJiBkc3RhLT5zZGF0YS0+ZGV2ID09IGRldikgewogCQkJCS8qCiAJCQkJICogVGhlIGRlc3RpbmF0aW9uIHN0YXRpb24gaXMgYXNzb2NpYXRlZCB0bwogCQkJCSAqIHRoaXMgQVAgKGluIHRoaXMgVkxBTiksIHNvIHNlbmQgdGhlIGZyYW1lCkBAIC0xMjU0LDggKzEyOTQsMzggQEAKIAkJCQl4bWl0X3NrYiA9IHNrYjsKIAkJCQlza2IgPSBOVUxMOwogCQkJfQotCQkJaWYgKGRzdGEpCi0JCQkJc3RhX2luZm9fcHV0KGRzdGEpOworCQl9CisJfQorCisJLyogTWVzaCBmb3J3YXJkaW5nICovCisJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKKwkJdTggKm1lc2hfdHRsID0gJigoc3RydWN0IGllZWU4MDIxMXNfaGRyICopc2tiLT5jYiktPnR0bDsKKwkJKCptZXNoX3R0bCktLTsKKworCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLT5kYXRhKSkgeworCQkJaWYgKCptZXNoX3R0bCA+IDApIHsKKwkJCQl4bWl0X3NrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKCF4bWl0X3NrYiAmJiBuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNsb25lICIKKwkJCQkJICAgICAgICJtdWx0aWNhc3QgZnJhbWVcbiIsIGRldi0+bmFtZSk7CisJCQkJZWxzZQorCQkJCQl4bWl0X3NrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCQkJfSBlbHNlCisJCQkJSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQygmc2RhdGEtPnUuc3RhLAorCQkJCQkJCSAgICAgZHJvcHBlZF9mcmFtZXNfdHRsKTsKKwkJfSBlbHNlIGlmIChza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9PVEhFUkhPU1QgJiYKKwkJCWNvbXBhcmVfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyLCBza2ItPmRhdGEpICE9IDApIHsKKwkJCWlmICgqbWVzaF90dGwgPT0gMCkgeworCQkJCUlFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMoJnNkYXRhLT51LnN0YSwKKwkJCQkJCQkgICAgIGRyb3BwZWRfZnJhbWVzX3R0bCk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCXNrYiA9IE5VTEw7CisJCQl9IGVsc2UgeworCQkJCXhtaXRfc2tiID0gc2tiOworCQkJCXhtaXRfc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisJCQkJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKKwkJCQkJc2tiICA9IE5VTEw7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTEyNzUsOCArMTM0NSw4IEBACiAJfQogfQogCi1zdGF0aWMgaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfcnhfaF9hbXNkdShzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX3J4X2hfYW1zZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcngtPmRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHJ4LT5sb2NhbDsKQEAgLTEyOTEsMTcgKzEzNjEsMTcgQEAKIAogCWZjID0gcngtPmZjOwogCWlmICh1bmxpa2VseSgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJaWYgKHVubGlrZWx5KCFXTEFOX0ZDX0RBVEFfUFJFU0VOVChmYykpKQotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYX0FNU0RVKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0FNU0RVKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJZXJyID0gaWVlZTgwMjExX2RhdGFfdG9fODAyMyhyeCk7CiAJaWYgKHVubGlrZWx5KGVycikpCi0JCXJldHVybiBUWFJYX0RST1A7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJc2tiLT5kZXYgPSBkZXY7CiAKQEAgLTEzMTEsNyArMTM4MSw3IEBACiAJLyogc2tpcCB0aGUgd3JhcHBpbmcgaGVhZGVyICovCiAJZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwogCWlmICghZXRoKQotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAogCXdoaWxlIChza2IgIT0gZnJhbWUpIHsKIAkJdTggcGFkZGluZzsKQEAgLTEzMjYsNyArMTM5Niw3IEBACiAJCS8qIHRoZSBsYXN0IE1TRFUgaGFzIG5vIHBhZGRpbmcgKi8KIAkJaWYgKHN1YmZyYW1lX2xlbiA+IHJlbWFpbmluZykgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cm9uZyBidWZmZXIgc2l6ZSIsIGRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gVFhSWF9EUk9QOworCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCX0KIAogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CkBAIC0xMzM4LDcgKzE0MDgsNyBAQAogCQkJCQkgICAgICBzdWJmcmFtZV9sZW4pOwogCiAJCQlpZiAoZnJhbWUgPT0gTlVMTCkKLQkJCQlyZXR1cm4gVFhSWF9EUk9QOworCQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJCQlza2JfcmVzZXJ2ZShmcmFtZSwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKQEAgLTEzNTEsNyArMTQyMSw3IEBACiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cm9uZyBidWZmZXIgc2l6ZSAiLAogCQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJCWRldl9rZnJlZV9za2IoZnJhbWUpOwotCQkJCXJldHVybiBUWFJYX0RST1A7CisJCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCQl9CiAJCX0KIApAQCAtMTM4MSw3ICsxNDUxLDcgQEAKIAogCQlpZiAoIWllZWU4MDIxMV9mcmFtZV9hbGxvd2VkKHJ4KSkgewogCQkJaWYgKHNrYiA9PSBmcmFtZSkgLyogbGFzdCBmcmFtZSAqLwotCQkJCXJldHVybiBUWFJYX0RST1A7CisJCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCQlkZXZfa2ZyZWVfc2tiKGZyYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMzg5LDExICsxNDU5LDExIEBACiAJCWllZWU4MDIxMV9kZWxpdmVyX3NrYihyeCk7CiAJfQogCi0JcmV0dXJuIFRYUlhfUVVFVUVEOworCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV9yeF9oX2RhdGEoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4KQorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9yeF9oX2RhdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcngtPmRldjsKIAl1MTYgZmM7CkBAIC0xNDAxLDE3ICsxNDcxLDE3IEBACiAKIAlmYyA9IHJ4LT5mYzsKIAlpZiAodW5saWtlbHkoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJCXJldHVybiBSWF9DT05USU5VRTsKIAogCWlmICh1bmxpa2VseSghV0xBTl9GQ19EQVRBX1BSRVNFTlQoZmMpKSkKLQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCWVyciA9IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMocngpOwogCWlmICh1bmxpa2VseShlcnIpKQotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAogCWlmICghaWVlZTgwMjExX2ZyYW1lX2FsbG93ZWQocngpKQotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJcngtPnNrYi0+ZGV2ID0gZGV2OwogCkBAIC0xNDIwLDExICsxNDkwLDExIEBACiAKIAlpZWVlODAyMTFfZGVsaXZlcl9za2IocngpOwogCi0JcmV0dXJuIFRYUlhfUVVFVUVEOworCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV9yeF9oX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4KQorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9yeF9oX2N0cmwoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHJ4LT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CkBAIC0xNDM1LDE1ICsxNTA1LDE2IEBACiAJdTE2IHRpZDsKIAogCWlmIChsaWtlbHkoKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfQ1RMKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJCXJldHVybiBSWF9DT05USU5VRTsKIAogCWlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSkgewogCQlpZiAoIXJ4LT5zdGEpCi0JCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJCXJldHVybiBSWF9DT05USU5VRTsKIAkJdGlkID0gbGUxNl90b19jcHUoYmFyLT5jb250cm9sKSA+PiAxMjsKLQkJdGlkX2FnZ19yeCA9ICYocngtPnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSk7Ci0JCWlmICh0aWRfYWdnX3J4LT5zdGF0ZSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCi0JCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJaWYgKHJ4LT5zdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0KKwkJCQkJIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCQl0aWRfYWdnX3J4ID0gcngtPnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXTsKIAogCQlzdGFydF9zZXFfbnVtID0gbGUxNl90b19jcHUoYmFyLT5zdGFydF9zZXFfbnVtKSA+PiA0OwogCkBAIC0xNDYwLDc3ICsxNTMxLDM1IEBACiAJCWllZWU4MDIxMV9zdGFfbWFuYWdlX3Jlb3JkZXJfYnVmKGh3LCB0aWRfYWdnX3J4LCBOVUxMLAogCQkJCQkJIHN0YXJ0X3NlcV9udW0sIDEpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJfQogCi0JcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQogCi1zdGF0aWMgaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCkKK3N0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKLQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhSWERfUlhSQV9NQVRDSCkpCi0JCXJldHVybiBUWFJYX0RST1A7CisJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJaWYgKChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8Ci0JICAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykgJiYKKwkgICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTIHx8CisJICAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkgJiYKIAkgICAgIShzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpKQotCQlpZWVlODAyMTFfc3RhX3J4X21nbXQocngtPmRldiwgcngtPnNrYiwgcngtPnUucnguc3RhdHVzKTsKKwkJaWVlZTgwMjExX3N0YV9yeF9tZ210KHJ4LT5kZXYsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogCWVsc2UKLQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCXJldHVybiBUWFJYX1FVRVVFRDsKLX0KLQotc3RhdGljIGlubGluZSBpZWVlODAyMTFfdHhyeF9yZXN1bHQgX19pZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKAotCQkJCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCWllZWU4MDIxMV9yeF9oYW5kbGVyICpoYW5kbGVycywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngsCi0JCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0JaWVlZTgwMjExX3J4X2hhbmRsZXIgKmhhbmRsZXI7Ci0JaWVlZTgwMjExX3R4cnhfcmVzdWx0IHJlcyA9IFRYUlhfRFJPUDsKLQotCWZvciAoaGFuZGxlciA9IGhhbmRsZXJzOyAqaGFuZGxlciAhPSBOVUxMOyBoYW5kbGVyKyspIHsKLQkJcmVzID0gKCpoYW5kbGVyKShyeCk7Ci0KLQkJc3dpdGNoIChyZXMpIHsKLQkJY2FzZSBUWFJYX0NPTlRJTlVFOgotCQkJY29udGludWU7Ci0JCWNhc2UgVFhSWF9EUk9QOgotCQkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnJ4X2hhbmRsZXJzX2Ryb3ApOwotCQkJaWYgKHN0YSkKLQkJCQlzdGEtPnJ4X2Ryb3BwZWQrKzsKLQkJCWJyZWFrOwotCQljYXNlIFRYUlhfUVVFVUVEOgotCQkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnJ4X2hhbmRsZXJzX3F1ZXVlZCk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlpZiAocmVzID09IFRYUlhfRFJPUCkKLQkJZGV2X2tmcmVlX3NrYihyeC0+c2tiKTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJCWllZWU4MDIxMV9yeF9oYW5kbGVyICpoYW5kbGVycywKLQkJCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCwKLQkJCQkJCXN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCWlmIChfX2llZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMobG9jYWwsIGhhbmRsZXJzLCByeCwgc3RhKSA9PQotCSAgICBUWFJYX0NPTlRJTlVFKQotCQlkZXZfa2ZyZWVfc2tiKHJ4LT5za2IpOworCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9taWNoYWVsX21pY19yZXBvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICpyeCkKKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJaW50IGtleWlkeCwgaGRybGVuOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwpAQCAtMTU0OCw3ICsxNTc3LDcgQEAKIAkJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgaGRyLT5hZGRyMiksCiAJCSAgICAgICBwcmludF9tYWMobWFjMiwgaGRyLT5hZGRyMSksIGtleWlkeCk7CiAKLQlpZiAoIXN0YSkgeworCWlmICghcngtPnN0YSkgewogCQkvKgogCQkgKiBTb21lIGhhcmR3YXJlIHNlZW0gdG8gZ2VuZXJhdGUgaW5jb3JyZWN0IE1pY2hhZWwgTUlDCiAJCSAqIHJlcG9ydHM7IGlnbm9yZSB0aGVtIHRvIGF2b2lkIHRyaWdnZXJpbmcgY291bnRlcm1lYXN1cmVzLgpAQCAtMTYwMCw3ICsxNjI5LDg5IEBACiAJcngtPnNrYiA9IE5VTEw7CiB9CiAKLWllZWU4MDIxMV9yeF9oYW5kbGVyIGllZWU4MDIxMV9yeF9oYW5kbGVyc1tdID0KKy8qIFRPRE86IHVzZSBJRUVFODAyMTFfUlhfRlJBR01FTlRFRCAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Nvb2tlZF9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9ydGFwX2hkciB7CisJCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIGhkcjsKKwkJdTggZmxhZ3M7CisJCXU4IHJhdGU7CisJCV9fbGUxNiBjaGFuX2ZyZXE7CisJCV9fbGUxNiBjaGFuX2ZsYWdzOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpydGhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYiwgKnNrYjI7CisJc3RydWN0IG5ldF9kZXZpY2UgKnByZXZfZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gcngtPnN0YXR1czsKKworCWlmIChyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfQ01OVFJfUkVQT1JURUQpCisJCWdvdG8gb3V0X2ZyZWVfc2tiOworCisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKCpydGhkcikgJiYKKwkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIHNpemVvZigqcnRoZHIpLCAwLCBHRlBfQVRPTUlDKSkKKwkJZ290byBvdXRfZnJlZV9za2I7CisKKwlydGhkciA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0aGRyKSk7CisJbWVtc2V0KHJ0aGRyLCAwLCBzaXplb2YoKnJ0aGRyKSk7CisJcnRoZHItPmhkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJ0aGRyKSk7CisJcnRoZHItPmhkci5pdF9wcmVzZW50ID0KKwkJY3B1X3RvX2xlMzIoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJCQkgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKKwkJCSAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkpOworCisJcnRoZHItPnJhdGUgPSByeC0+cmF0ZS0+Yml0cmF0ZSAvIDU7CisJcnRoZHItPmNoYW5fZnJlcSA9IGNwdV90b19sZTE2KHN0YXR1cy0+ZnJlcSk7CisKKwlpZiAoc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXJ0aGRyLT5jaGFuX2ZsYWdzID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0NIQU5fT0ZETSB8CisJCQkJCQlJRUVFODAyMTFfQ0hBTl81R0haKTsKKwllbHNlCisJCXJ0aGRyLT5jaGFuX2ZsYWdzID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0NIQU5fRFlOIHwKKwkJCQkJCUlFRUU4MDIxMV9DSEFOXzJHSFopOworCisJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgMCk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX01OVFIgfHwKKwkJICAgICEoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19DT09LX0ZSQU1FUykpCisJCQljb250aW51ZTsKKworCQlpZiAocHJldl9kZXYpIHsKKwkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChza2IyKSB7CisJCQkJc2tiMi0+ZGV2ID0gcHJldl9kZXY7CisJCQkJbmV0aWZfcngoc2tiMik7CisJCQl9CisJCX0KKworCQlwcmV2X2RldiA9IHNkYXRhLT5kZXY7CisJCXNkYXRhLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJc2RhdGEtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfQorCisJaWYgKHByZXZfZGV2KSB7CisJCXNrYi0+ZGV2ID0gcHJldl9kZXY7CisJCW5ldGlmX3J4KHNrYik7CisJCXNrYiA9IE5VTEw7CisJfSBlbHNlCisJCWdvdG8gb3V0X2ZyZWVfc2tiOworCisJcngtPmZsYWdzIHw9IElFRUU4MDIxMV9SWF9DTU5UUl9SRVBPUlRFRDsKKwlyZXR1cm47CisKKyBvdXRfZnJlZV9za2I6CisJZGV2X2tmcmVlX3NrYihza2IpOworfQorCit0eXBlZGVmIGllZWU4MDIxMV9yeF9yZXN1bHQgKCppZWVlODAyMTFfcnhfaGFuZGxlcikoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICopOworc3RhdGljIGllZWU4MDIxMV9yeF9oYW5kbGVyIGllZWU4MDIxMV9yeF9oYW5kbGVyc1tdID0KIHsKIAlpZWVlODAyMTFfcnhfaF9pZl9zdGF0cywKIAlpZWVlODAyMTFfcnhfaF9wYXNzaXZlX3NjYW4sCkBAIC0xNjIyLDEwICsxNzMzLDUxIEBACiAJTlVMTAogfTsKIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCisJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWllZWU4MDIxMV9yeF9oYW5kbGVyICpoYW5kbGVyOworCWllZWU4MDIxMV9yeF9yZXN1bHQgcmVzID0gUlhfRFJPUF9NT05JVE9SOworCisJcngtPnNrYiA9IHNrYjsKKwlyeC0+c2RhdGEgPSBzZGF0YTsKKwlyeC0+ZGV2ID0gc2RhdGEtPmRldjsKKworCWZvciAoaGFuZGxlciA9IGllZWU4MDIxMV9yeF9oYW5kbGVyczsgKmhhbmRsZXIgIT0gTlVMTDsgaGFuZGxlcisrKSB7CisJCXJlcyA9ICgqaGFuZGxlcikocngpOworCisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgUlhfQ09OVElOVUU6CisJCQljb250aW51ZTsKKwkJY2FzZSBSWF9EUk9QX1VOVVNBQkxFOgorCQljYXNlIFJYX0RST1BfTU9OSVRPUjoKKwkJCUk4MDJfREVCVUdfSU5DKHNkYXRhLT5sb2NhbC0+cnhfaGFuZGxlcnNfZHJvcCk7CisJCQlpZiAocngtPnN0YSkKKwkJCQlyeC0+c3RhLT5yeF9kcm9wcGVkKys7CisJCQlicmVhazsKKwkJY2FzZSBSWF9RVUVVRUQ6CisJCQlJODAyX0RFQlVHX0lOQyhzZGF0YS0+bG9jYWwtPnJ4X2hhbmRsZXJzX3F1ZXVlZCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJlcykgeworCWNhc2UgUlhfQ09OVElOVUU6CisJY2FzZSBSWF9EUk9QX01PTklUT1I6CisJCWllZWU4MDIxMV9yeF9jb29rZWRfbW9uaXRvcihyeCk7CisJCWJyZWFrOworCWNhc2UgUlhfRFJPUF9VTlVTQUJMRToKKwkJZGV2X2tmcmVlX3NrYihyeC0+c2tiKTsKKwkJYnJlYWs7CisJfQorfQorCiAvKiBtYWluIHJlY2VpdmUgcGF0aCAqLwogCiBzdGF0aWMgaW50IHByZXBhcmVfZm9yX2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXU4ICpic3NpZCwgc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4LAorCQkJCXU4ICpic3NpZCwgc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCWludCBtdWx0aWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKQEAgLTE2MzUsMzQgKzE3ODcsNDcgQEAKIAkJaWYgKCFic3NpZCkKIAkJCXJldHVybiAwOwogCQlpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkgewotCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYSU5fU0NBTikpCisJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7Ci0JCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWFJYRF9SWFJBX01BVENIOworCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CiAJCX0gZWxzZSBpZiAoIW11bHRpY2FzdCAmJgogCQkJICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT5kZXYtPmRldl9hZGRyLAogCQkJCQkgICAgICBoZHItPmFkZHIxKSAhPSAwKSB7CiAJCQlpZiAoIShzZGF0YS0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKIAkJCQlyZXR1cm4gMDsKLQkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYUlhEX1JYUkFfTUFUQ0g7CisJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKIAkJfQogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX0lCU1M6CiAJCWlmICghYnNzaWQpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCkpIHsKLQkJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9SWElOX1NDQU4pKQorCQlpZiAoKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJgorCQkgICAgKHJ4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKQorCQkJcmV0dXJuIDE7CisJCWVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCkpIHsKKwkJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9JTl9TQ0FOKSkKIAkJCQlyZXR1cm4gMDsKLQkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYUlhEX1JYUkFfTUFUQ0g7CisJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKIAkJfSBlbHNlIGlmICghbXVsdGljYXN0ICYmCiAJCQkgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCiAJCQkJCSAgICAgIGhkci0+YWRkcjEpICE9IDApIHsKIAkJCWlmICghKHNkYXRhLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKQogCQkJCXJldHVybiAwOwotCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfVFhSWERfUlhSQV9NQVRDSDsKKwkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwogCQl9IGVsc2UgaWYgKCFyeC0+c3RhKQogCQkJcngtPnN0YSA9IGllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEtPmRldiwgcngtPnNrYiwKIAkJCQkJCQkgYnNzaWQsIGhkci0+YWRkcjIpOwogCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQ6CisJCWlmICghbXVsdGljYXN0ICYmCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCQkJICAgICAgIGhkci0+YWRkcjEpICE9IDApIHsKKwkJCWlmICghKHNkYXRhLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKQorCQkJCXJldHVybiAwOworCisJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKKwkJfQorCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46CiAJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9BUDoKIAkJaWYgKCFic3NpZCkgewpAQCAtMTY3MSwxMiArMTgzNiwxMiBAQAogCQkJCXJldHVybiAwOwogCQl9IGVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsCiAJCQkJCXNkYXRhLT5kZXYtPmRldl9hZGRyKSkgewotCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYSU5fU0NBTikpCisJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7Ci0JCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWFJYRF9SWFJBX01BVENIOworCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CiAJCX0KIAkJaWYgKHNkYXRhLT5kZXYgPT0gc2RhdGEtPmxvY2FsLT5tZGV2ICYmCi0JCSAgICAhKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9SWElOX1NDQU4pKQorCQkgICAgIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkvKiBkbyBub3QgcmVjZWl2ZSBhbnl0aGluZyB2aWEKIAkJCSAqIG1hc3RlciBkZXZpY2Ugd2hlbiBub3Qgc2Nhbm5pbmcgKi8KIAkJCXJldHVybiAwOwpAQCAtMTcwNywxMyArMTg3MiwxMyBAQAogc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkJCQkgdTMyIGxvYWQpCisJCQkJCSB1MzIgbG9hZCwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhIHJ4OworCXN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDsKIAl1MTYgdHlwZTsKIAlpbnQgcHJlcGFyZXM7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldiA9IE5VTEw7CkBAIC0xNzI1LDQzICsxODkwLDM0IEBACiAJcnguc2tiID0gc2tiOwogCXJ4LmxvY2FsID0gbG9jYWw7CiAKLQlyeC51LnJ4LnN0YXR1cyA9IHN0YXR1czsKLQlyeC51LnJ4LmxvYWQgPSBsb2FkOworCXJ4LnN0YXR1cyA9IHN0YXR1czsKKwlyeC5sb2FkID0gbG9hZDsKKwlyeC5yYXRlID0gcmF0ZTsKIAlyeC5mYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJdHlwZSA9IHJ4LmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEU7CiAKIAlpZiAodHlwZSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSB8fCB0eXBlID09IElFRUU4MDIxMV9GVFlQRV9NR01UKQogCQlsb2NhbC0+ZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQrKzsKIAotCXN0YSA9IHJ4LnN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMik7Ci0JaWYgKHN0YSkgewotCQlyeC5kZXYgPSByeC5zdGEtPmRldjsKLQkJcnguc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihyeC5kZXYpOworCXJ4LnN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMik7CisJaWYgKHJ4LnN0YSkgeworCQlyeC5zZGF0YSA9IHJ4LnN0YS0+c2RhdGE7CisJCXJ4LmRldiA9IHJ4LnN0YS0+c2RhdGEtPmRldjsKIAl9CiAKIAlpZiAoKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikpIHsKLQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChsb2NhbC0+bWRldiwgaGRyLCBzdGEsICZyeCk7Ci0JCWdvdG8gZW5kOworCQlpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KGxvY2FsLT5tZGV2LCBoZHIsICZyeCk7CisJCXJldHVybjsKIAl9CiAKIAlpZiAodW5saWtlbHkobG9jYWwtPnN0YV9zd19zY2FubmluZyB8fCBsb2NhbC0+c3RhX2h3X3NjYW5uaW5nKSkKLQkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1RYUlhEX1JYSU5fU0NBTjsKKwkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX0lOX1NDQU47CiAKLQlpZiAoX19pZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKGxvY2FsLCBsb2NhbC0+cnhfcHJlX2hhbmRsZXJzLCAmcngsCi0JCQkJCSAgIHN0YSkgIT0gVFhSWF9DT05USU5VRSkKLQkJZ290byBlbmQ7CisJaWVlZTgwMjExX3BhcnNlX3FvcygmcngpOworCWllZWU4MDIxMV92ZXJpZnlfaXBfYWxpZ25tZW50KCZyeCk7CisKIAlza2IgPSByeC5za2I7CiAKLQlpZiAoc3RhICYmICEoc3RhLT5mbGFncyAmIChXTEFOX1NUQV9XRFMgfCBXTEFOX1NUQV9BU1NPQ19BUCkpICYmCi0JICAgICFhdG9taWNfcmVhZCgmbG9jYWwtPmlmZl9wcm9taXNjcykgJiYKLQkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7Ci0JCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9UWFJYRF9SWFJBX01BVENIOwotCQlpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKGxvY2FsLCBsb2NhbC0+cnhfaGFuZGxlcnMsICZyeCwKLQkJCQkJICAgICByeC5zdGEpOwotCQlzdGFfaW5mb19wdXQoc3RhKTsKLQkJcmV0dXJuOwotCX0KLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQogCQkJY29udGludWU7CkBAIC0xNzcwLDEwICsxOTI2LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWJzc2lkID0gaWVlZTgwMjExX2dldF9ic3NpZChoZHIsIHNrYi0+bGVuLCBzZGF0YS0+dmlmLnR5cGUpOwotCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfVFhSWERfUlhSQV9NQVRDSDsKKwkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOwogCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHNkYXRhLCBic3NpZCwgJnJ4LCBoZHIpOwotCQkvKiBwcmVwYXJlX2Zvcl9oYW5kbGVycyBjYW4gY2hhbmdlIHN0YSAqLwotCQlzdGEgPSByeC5zdGE7CiAKIAkJaWYgKCFwcmVwYXJlcykKIAkJCWNvbnRpbnVlOwpAQCAtMTgwNCwyNiArMTk1OCwxNCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJcnguZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCQlyeC5za2IgPSBza2JfbmV3OwotCQlyeC5kZXYgPSBwcmV2LT5kZXY7Ci0JCXJ4LnNkYXRhID0gcHJldjsKLQkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhsb2NhbCwgbG9jYWwtPnJ4X2hhbmRsZXJzLAotCQkJCQkgICAgICZyeCwgc3RhKTsKKwkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhwcmV2LCAmcngsIHNrYl9uZXcpOwogCQlwcmV2ID0gc2RhdGE7CiAJfQogCWlmIChwcmV2KSB7CiAJCXJ4LmZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQkJcnguc2tiID0gc2tiOwotCQlyeC5kZXYgPSBwcmV2LT5kZXY7Ci0JCXJ4LnNkYXRhID0gcHJldjsKLQkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhsb2NhbCwgbG9jYWwtPnJ4X2hhbmRsZXJzLAotCQkJCQkgICAgICZyeCwgc3RhKTsKKwkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhwcmV2LCAmcngsIHNrYik7CiAJfSBlbHNlCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotIGVuZDoKLQlpZiAoc3RhKQotCQlzdGFfaW5mb19wdXQoc3RhKTsKIH0KIAogI2RlZmluZSBTRVFfTU9EVUxPIDB4MTAwMApAQCAtMTg1OSw2ICsyMDAxLDggQEAKIAl1MTYgaGVhZF9zZXFfbnVtLCBidWZfc2l6ZTsKIAlpbnQgaW5kZXg7CiAJdTMyIHBrdF9sb2FkOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKIAogCWJ1Zl9zaXplID0gdGlkX2FnZ19yeC0+YnVmX3NpemU7CiAJaGVhZF9zZXFfbnVtID0gdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtOwpAQCAtMTg4OSwxMiArMjAzMywxNCBAQAogCQkJCW1lbWNweSgmc3RhdHVzLAogCQkJCQl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0tPmNiLAogCQkJCQlzaXplb2Yoc3RhdHVzKSk7CisJCQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW3N0YXR1cy5iYW5kXTsKKwkJCQlyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tzdGF0dXMucmF0ZV9pZHhdOwogCQkJCXBrdF9sb2FkID0gaWVlZTgwMjExX3J4X2xvYWRfc3RhdHMobG9jYWwsCiAJCQkJCQl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0sCi0JCQkJCQkmc3RhdHVzKTsKKwkJCQkJCSZzdGF0dXMsIHJhdGUpOwogCQkJCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsCiAJCQkJCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XSwKLQkJCQkJJnN0YXR1cywgcGt0X2xvYWQpOworCQkJCQkmc3RhdHVzLCBwa3RfbG9hZCwgcmF0ZSk7CiAJCQkJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtLS07CiAJCQkJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdID0gTlVMTDsKIAkJCX0KQEAgLTE5MzQsMTEgKzIwODAsMTMgQEAKIAkJLyogcmVsZWFzZSB0aGUgcmVvcmRlcmVkIGZyYW1lIGJhY2sgdG8gc3RhY2sgKi8KIAkJbWVtY3B5KCZzdGF0dXMsIHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XS0+Y2IsCiAJCQlzaXplb2Yoc3RhdHVzKSk7CisJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tzdGF0dXMuYmFuZF07CisJCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW3N0YXR1cy5yYXRlX2lkeF07CiAJCXBrdF9sb2FkID0gaWVlZTgwMjExX3J4X2xvYWRfc3RhdHMobG9jYWwsCiAJCQkJCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XSwKLQkJCQkJJnN0YXR1cyk7CisJCQkJCSZzdGF0dXMsIHJhdGUpOwogCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCB0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0sCi0JCQkJCQkmc3RhdHVzLCBwa3RfbG9hZCk7CisJCQkJCSAgICAgJnN0YXR1cywgcGt0X2xvYWQsIHJhdGUpOwogCQl0aWRfYWdnX3J4LT5zdG9yZWRfbXBkdV9udW0tLTsKIAkJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdID0gTlVMTDsKIAkJdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc2VxX2luYyh0aWRfYWdnX3J4LT5oZWFkX3NlcV9udW0pOwpAQCAtMTk3MywxMSArMjEyMSwxMiBAQAogCiAJcWMgPSBza2ItPmRhdGEgKyBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYykgLSBRT1NfQ09OVFJPTF9MRU47CiAJdGlkID0gcWNbMF0gJiBRT1NfQ09OVFJPTF9USURfTUFTSzsKLQl0aWRfYWdnX3J4ID0gJihzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOwogCi0JaWYgKHRpZF9hZ2dfcngtPnN0YXRlICE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKKwlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdICE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKIAkJZ290byBlbmRfcmVvcmRlcjsKIAorCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisKIAkvKiBudWxsIGRhdGEgZnJhbWVzIGFyZSBleGNsdWRlZCAqLwogCWlmICh1bmxpa2VseShmYyAmIElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQykpCiAJCWdvdG8gZW5kX3Jlb3JkZXI7CkBAIC0xOTk0LDcgKzIxNDMsNyBAQAogCS8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi8KIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOwogCWlmIChzYyAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpIHsKLQkJaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLT5kZXYsIHN0YS0+YWRkciwKKwkJaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLT5zZGF0YS0+ZGV2LCBzdGEtPmFkZHIsCiAJCQl0aWQsIDAsIFdMQU5fUkVBU09OX1FTVEFfUkVRVUlSRV9TRVRVUCk7CiAJCXJldCA9IDE7CiAJCWdvdG8gZW5kX3Jlb3JkZXI7CkBAIC0yMDA0LDkgKzIxNTMsNyBAQAogCW1wZHVfc2VxX251bSA9IChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKIAlyZXQgPSBpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihodywgdGlkX2FnZ19yeCwgc2tiLAogCQkJCQkJbXBkdV9zZXFfbnVtLCAwKTsKLWVuZF9yZW9yZGVyOgotCWlmIChzdGEpCi0JCXN0YV9pbmZvX3B1dChzdGEpOworIGVuZF9yZW9yZGVyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIwMTksNiArMjE2NiwyNSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXUzMiBwa3RfbG9hZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJaWYgKHN0YXR1cy0+YmFuZCA8IDAgfHwKKwkgICAgc3RhdHVzLT5iYW5kID4gSUVFRTgwMjExX05VTV9CQU5EUykgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW3N0YXR1cy0+YmFuZF07CisKKwlpZiAoIXNiYW5kIHx8CisJICAgIHN0YXR1cy0+cmF0ZV9pZHggPCAwIHx8CisJICAgIHN0YXR1cy0+cmF0ZV9pZHggPj0gc2JhbmQtPm5fYml0cmF0ZXMpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW3N0YXR1cy0+cmF0ZV9pZHhdOwogCiAJLyoKIAkgKiBrZXkgcmVmZXJlbmNlcyBhbmQgdmlydHVhbCBpbnRlcmZhY2VzIGFyZSBwcm90ZWN0ZWQgdXNpbmcgUkNVCkBAIC0yMDMzLDE3ICsyMTk5LDE3IEBACiAJICogaWYgaXQgd2FzIHByZXZpb3VzbHkgcHJlc2VudC4KIAkgKiBBbHNvLCBmcmFtZXMgd2l0aCBsZXNzIHRoYW4gMTYgYnl0ZXMgYXJlIGRyb3BwZWQuCiAJICovCi0Jc2tiID0gaWVlZTgwMjExX3J4X21vbml0b3IobG9jYWwsIHNrYiwgc3RhdHVzKTsKKwlza2IgPSBpZWVlODAyMTFfcnhfbW9uaXRvcihsb2NhbCwgc2tiLCBzdGF0dXMsIHJhdGUpOwogCWlmICghc2tiKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQogCi0JcGt0X2xvYWQgPSBpZWVlODAyMTFfcnhfbG9hZF9zdGF0cyhsb2NhbCwgc2tiLCBzdGF0dXMpOworCXBrdF9sb2FkID0gaWVlZTgwMjExX3J4X2xvYWRfc3RhdHMobG9jYWwsIHNrYiwgc3RhdHVzLCByYXRlKTsKIAlsb2NhbC0+Y2hhbm5lbF91c2VfcmF3ICs9IHBrdF9sb2FkOwogCiAJaWYgKCFpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShsb2NhbCwgc2tiKSkKLQkJX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgc2tiLCBzdGF0dXMsIHBrdF9sb2FkKTsKKwkJX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgc2tiLCBzdGF0dXMsIHBrdF9sb2FkLCByYXRlKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCAxZjc0YmQyLi43ZDRmZTRhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTUsMjEgKzE1LDU3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KIAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExX3JhdGUuaCIKKyNpbmNsdWRlICJyYXRlLmgiCiAjaW5jbHVkZSAic3RhX2luZm8uaCIKICNpbmNsdWRlICJkZWJ1Z2ZzX3N0YS5oIgorI2luY2x1ZGUgIm1lc2guaCIKIAotLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+c3RhX2xvY2sgKi8KLXN0YXRpYyB2b2lkIHN0YV9pbmZvX2hhc2hfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0Jc3RhLT5obmV4dCA9IGxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChzdGEtPmFkZHIpXTsKLQlsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goc3RhLT5hZGRyKV0gPSBzdGE7Ci19Ci0KKy8qKgorICogRE9DOiBTVEEgaW5mb3JtYXRpb24gbGlmZXRpbWUgcnVsZXMKKyAqCisgKiBTVEEgaW5mbyBzdHJ1Y3R1cmVzICgmc3RydWN0IHN0YV9pbmZvKSBhcmUgbWFuYWdlZCBpbiBhIGhhc2ggdGFibGUKKyAqIGZvciBmYXN0ZXIgbG9va3VwIGFuZCBhIGxpc3QgZm9yIGl0ZXJhdGlvbi4gVGhleSBhcmUgbWFuYWdlZCB1c2luZworICogUkNVLCBpLmUuIGFjY2VzcyB0byB0aGUgbGlzdCBhbmQgaGFzaCB0YWJsZSBpcyBwcm90ZWN0ZWQgYnkgUkNVLgorICoKKyAqIFVwb24gYWxsb2NhdGluZyBhIFNUQSBpbmZvIHN0cnVjdHVyZSB3aXRoIHN0YV9pbmZvX2FsbG9jKCksIHRoZSBjYWxsZXIgb3ducworICogdGhhdCBzdHJ1Y3R1cmUuIEl0IG11c3QgdGhlbiBlaXRoZXIgZGVzdHJveSBpdCB1c2luZyBzdGFfaW5mb19kZXN0cm95KCkKKyAqICh3aGljaCBpcyBwcmV0dHkgdXNlbGVzcykgb3IgaW5zZXJ0IGl0IGludG8gdGhlIGhhc2ggdGFibGUgdXNpbmcKKyAqIHN0YV9pbmZvX2luc2VydCgpIHdoaWNoIGRlbW90ZXMgdGhlIHJlZmVyZW5jZSBmcm9tIG93bmVyc2hpcCB0byBhIHJlZ3VsYXIKKyAqIFJDVS1wcm90ZWN0ZWQgcmVmZXJlbmNlOyBpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgcHJvdGVjdGlvbiBieSBhbgorICogUkNVIGNyaXRpY2FsIHNlY3Rpb24gdGhlIHJlZmVyZW5jZSBpcyBpbnN0YW50bHkgaW52YWxpZGF0ZWQuIE5vdGUgdGhhdCB0aGUKKyAqIGNhbGxlciBtYXkgbm90IGRvIG11Y2ggd2l0aCB0aGUgU1RBIGluZm8gYmVmb3JlIGluc2VydGluZyBpdCwgaW4gcGFydGljdWxhciwKKyAqIGl0IG1heSBub3Qgc3RhcnQgYW55IG1lc2ggcGVlciBsaW5rIG1hbmFnZW1lbnQgb3IgYWRkIGVuY3J5cHRpb24ga2V5cy4KKyAqCisgKiBXaGVuIHRoZSBpbnNlcnRpb24gZmFpbHMgKHN0YV9pbmZvX2luc2VydCgpKSByZXR1cm5zIG5vbi16ZXJvKSwgdGhlCisgKiBzdHJ1Y3R1cmUgd2lsbCBoYXZlIGJlZW4gZnJlZWQgYnkgc3RhX2luZm9faW5zZXJ0KCkhCisgKgorICogQmVjYXVzZSB0aGVyZSBhcmUgZGVidWdmcyBlbnRyaWVzIGZvciBlYWNoIHN0YXRpb24sIGFuZCBhZGRpbmcgdGhvc2UKKyAqIG11c3QgYmUgYWJsZSB0byBzbGVlcCwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byAicGluIiBhIHN0YXRpb24gZW50cnksCisgKiB0aGF0IG1lYW5zIGl0IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGhhc2ggdGFibGUgYnV0IG5vdCBiZSBmcmVlZC4KKyAqIFNlZSB0aGUgY29tbWVudCBpbiBfX3N0YV9pbmZvX3VubGluaygpIGZvciBtb3JlIGluZm9ybWF0aW9uLCB0aGlzIGlzCisgKiBhbiBpbnRlcm5hbCBjYXBhYmlsaXR5IG9ubHkuCisgKgorICogSW4gb3JkZXIgdG8gcmVtb3ZlIGEgU1RBIGluZm8gc3RydWN0dXJlLCB0aGUgY2FsbGVyIG5lZWRzIHRvIGZpcnN0CisgKiB1bmxpbmsgaXQgKHN0YV9pbmZvX3VubGluaygpKSBmcm9tIHRoZSBsaXN0IGFuZCBoYXNoIHRhYmxlcyBhbmQKKyAqIHRoZW4gZGVzdHJveSBpdDsgc3RhX2luZm9fZGVzdHJveSgpIHdpbGwgd2FpdCBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZAorICogdG8gZWxhcHNlIGJlZm9yZSBhY3R1YWxseSBmcmVlaW5nIGl0LiBEdWUgdG8gdGhlIHBpbm5pbmcgYW5kIHRoZQorICogcG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgY2FsbGVycyB0cnlpbmcgdG8gcmVtb3ZlIHRoZSBzYW1lIFNUQSBpbmZvIGF0CisgKiB0aGUgc2FtZSB0aW1lLCBzdGFfaW5mb191bmxpbmsoKSBjYW4gY2xlYXIgdGhlIFNUQSBpbmZvIHBvaW50ZXIgaXQgaXMKKyAqIHBhc3NlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBTVEEgaW5mbyBpcyBvd25lZCBieSBzb21lYm9keSBlbHNlIG5vdy4KKyAqCisgKiBJZiBzdGFfaW5mb191bmxpbmsoKSBkaWQgbm90IGNsZWFyIHRoZSBwb2ludGVyIHRoZW4gdGhlIGNhbGxlciBvd25zCisgKiB0aGUgU1RBIGluZm8gc3RydWN0dXJlIG5vdyBhbmQgaXMgcmVzcG9uc2libGUgb2YgZGVzdHJveWluZyBpdCB3aXRoCisgKiBhIGNhbGwgdG8gc3RhX2luZm9fZGVzdHJveSgpLgorICoKKyAqIEluIGFsbCBvdGhlciBjYXNlcywgdGhlcmUgaXMgbm8gY29uY2VwdCBvZiBvd25lcnNoaXAgb24gYSBTVEEgZW50cnksCisgKiBlYWNoIHN0cnVjdHVyZSBpcyBvd25lZCBieSB0aGUgZ2xvYmFsIGhhc2ggdGFibGUvbGlzdCB1bnRpbCBpdCBpcworICogcmVtb3ZlZC4gQWxsIHVzZXJzIG9mIHRoZSBzdHJ1Y3R1cmUgbmVlZCB0byBiZSBSQ1UgcHJvdGVjdGVkIHNvIHRoYXQKKyAqIHRoZSBzdHJ1Y3R1cmUgd29uJ3QgYmUgZnJlZWQgYmVmb3JlIHRoZXkgYXJlIGRvbmUgdXNpbmcgaXQuCisgKi8KIAogLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+c3RhX2xvY2sgKi8KIHN0YXRpYyBpbnQgc3RhX2luZm9faGFzaF9kZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC00MSwyMzcgKzc3LDQzOSBAQAogCWlmICghcykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKHMgPT0gc3RhKSB7Ci0JCWxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChzdGEtPmFkZHIpXSA9IHMtPmhuZXh0OworCQlyY3VfYXNzaWduX3BvaW50ZXIobG9jYWwtPnN0YV9oYXNoW1NUQV9IQVNIKHN0YS0+YWRkcildLAorCQkJCSAgIHMtPmhuZXh0KTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJd2hpbGUgKHMtPmhuZXh0ICYmIHMtPmhuZXh0ICE9IHN0YSkKIAkJcyA9IHMtPmhuZXh0OwogCWlmIChzLT5obmV4dCkgewotCQlzLT5obmV4dCA9IHN0YS0+aG5leHQ7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihzLT5obmV4dCwgc3RhLT5obmV4dCk7CiAJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmFkZHIpCisvKiBwcm90ZWN0ZWQgYnkgUkNVICovCitzdGF0aWMgc3RydWN0IHN0YV9pbmZvICpfX3N0YV9pbmZvX2ZpbmQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCXU4ICphZGRyKQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCi0JcmVhZF9sb2NrX2JoKCZsb2NhbC0+c3RhX2xvY2spOwotCXN0YSA9IGxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChhZGRyKV07CisJc3RhID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChhZGRyKV0pOwogCXdoaWxlIChzdGEpIHsKLQkJaWYgKG1lbWNtcChzdGEtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCQlfX3N0YV9pbmZvX2dldChzdGEpOworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHN0YS0+YWRkciwgYWRkcikgPT0gMCkKIAkJCWJyZWFrOwotCQl9Ci0JCXN0YSA9IHN0YS0+aG5leHQ7CisJCXN0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtPmhuZXh0KTsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7Ci0KIAlyZXR1cm4gc3RhOwogfQorCitzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmFkZHIpCit7CisJcmV0dXJuIF9fc3RhX2luZm9fZmluZChsb2NhbCwgYWRkcik7Cit9CiBFWFBPUlRfU1lNQk9MKHN0YV9pbmZvX2dldCk7CiAKLWludCBzdGFfaW5mb19taW5fdHhyYXRlX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3N0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0X2J5X2lkeChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IGlkeCwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9od19tb2RlICptb2RlOwotCWludCBtaW5fdHhyYXRlID0gOTk5OTk5OTsKLQlpbnQgaTsKKwlpbnQgaSA9IDA7CiAKLQlyZWFkX2xvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7Ci0JbW9kZSA9IGxvY2FsLT5vcGVyX2h3X21vZGU7Ci0JZm9yIChpID0gMDsgaSA8IFNUQV9IQVNIX1NJWkU7IGkrKykgewotCQlzdGEgPSBsb2NhbC0+c3RhX2hhc2hbaV07Ci0JCXdoaWxlIChzdGEpIHsKLQkJCWlmIChzdGEtPnR4cmF0ZSA8IG1pbl90eHJhdGUpCi0JCQkJbWluX3R4cmF0ZSA9IHN0YS0+dHhyYXRlOwotCQkJc3RhID0gc3RhLT5obmV4dDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGRldiAmJiBkZXYgIT0gc3RhLT5zZGF0YS0+ZGV2KQorCQkJY29udGludWU7CisJCWlmIChpIDwgaWR4KSB7CisJCQkrK2k7CisJCQljb250aW51ZTsKIAkJfQorCQlyZXR1cm4gc3RhOwogCX0KLQlyZWFkX3VubG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKLQlpZiAobWluX3R4cmF0ZSA9PSA5OTk5OTk5KQotCQltaW5fdHhyYXRlID0gMDsKIAotCXJldHVybiBtb2RlLT5yYXRlc1ttaW5fdHhyYXRlXS5yYXRlOworCXJldHVybiBOVUxMOwogfQogCi0KLXN0YXRpYyB2b2lkIHN0YV9pbmZvX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCisvKioKKyAqIF9fc3RhX2luZm9fZnJlZSAtIGludGVybmFsIFNUQSBmcmVlIGhlbHBlcgorICoKKyAqIEBzdGE6IFNUQSBpbmZvIHRvIGZyZWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgdW5kbyBldmVyeXRoaW5nIGRvbmUgYnkgc3RhX2luZm9fYWxsb2MoKQorICogdGhhdCBtYXkgaGFwcGVuIGJlZm9yZSBzdGFfaW5mb19pbnNlcnQoKS4KKyAqLworc3RhdGljIHZvaWQgX19zdGFfaW5mb19mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzdGFfaW5mbywga3JlZik7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOworCURFQ0xBUkVfTUFDX0JVRihtYnVmKTsKKworCXJhdGVfY29udHJvbF9mcmVlX3N0YShzdGEtPnJhdGVfY3RybCwgc3RhLT5yYXRlX2N0cmxfcHJpdik7CisJcmF0ZV9jb250cm9sX3B1dChzdGEtPnJhdGVfY3RybCk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogRGVzdHJveWVkIFNUQSAlc1xuIiwKKwkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBwcmludF9tYWMobWJ1Ziwgc3RhLT5hZGRyKSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KKworCWtmcmVlKHN0YSk7Cit9CisKK3ZvaWQgc3RhX2luZm9fZGVzdHJveShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBpOwogCi0JLyogZnJlZSBzdGEgc3RydWN0dXJlOyBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbQotCSAqIGhhc2ggdGFibGUgZXRjLiBleHRlcm5hbCBzdHJ1Y3R1cmVzLiBNYWtlIHN1cmUgdGhhdCBhbGwKLQkgKiBidWZmZXJlZCBmcmFtZXMgYXJlIHJlbGVhc2UgKG9uZSBtaWdodCBoYXZlIGJlZW4gYWRkZWQKLQkgKiBhZnRlciBzdGFfaW5mb19mcmVlKCkgd2FzIGNhbGxlZCkuICovCisJbWlnaHRfc2xlZXAoKTsKKworCWlmICghc3RhKQorCQlyZXR1cm47CisKKwlsb2NhbCA9IHN0YS0+bG9jYWw7CisKKwlyYXRlX2NvbnRyb2xfcmVtb3ZlX3N0YV9kZWJ1Z2ZzKHN0YSk7CisJaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX3JlbW92ZShzdGEpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzdGEtPnNkYXRhLT52aWYpKQorCQltZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKKyNlbmRpZgorCisJLyoKKwkgKiBXZSBoYXZlIG9ubHkgdW5saW5rZWQgdGhlIGtleSwgYW5kIGFjdHVhbGx5IGRlc3Ryb3lpbmcgaXQKKwkgKiBtYXkgbWVhbiBpdCBpcyByZW1vdmVkIGZyb20gaGFyZHdhcmUgd2hpY2ggcmVxdWlyZXMgdGhhdAorCSAqIHRoZSBrZXktPnN0YSBwb2ludGVyIGlzIHN0aWxsIHZhbGlkLCBzbyBmbHVzaCB0aGUga2V5IHRvZG8KKwkgKiBsaXN0IGhlcmUuCisJICoKKwkgKiBpZWVlODAyMTFfa2V5X3RvZG8oKSB3aWxsIHN5bmNocm9uaXplX3JjdSgpIHNvIGFmdGVyIHRoaXMKKwkgKiBub3RoaW5nIGNhbiByZWZlcmVuY2UgdGhpcyBzdGEgc3RydWN0IGFueSBtb3JlLgorCSAqLworCWllZWU4MDIxMV9rZXlfdG9kbygpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzdGEtPnNkYXRhLT52aWYpKQorCQlkZWxfdGltZXJfc3luYygmc3RhLT5wbGlua190aW1lcik7CisjZW5kaWYKKwogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnN0YS0+cHNfdHhfYnVmKSkgIT0gTlVMTCkgewogCQlsb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQtLTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9Ci0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT50eF9maWx0ZXJlZCkpICE9IE5VTEwpIHsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnN0YS0+dHhfZmlsdGVyZWQpKSAhPSBOVUxMKQogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7CisJCXNwaW5fbG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKKwkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0pCisJCSAgZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPnNlc3Npb25fdGltZXIpOworCQlzcGluX3VubG9ja19iaCgmc3RhLT5hbXBkdV9tbG1lLmFtcGR1X3J4KTsKKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOworCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXSkKKwkJICBkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+YWRkYmFfcmVzcF90aW1lcik7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOwogCX0KLQlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspCi0JCWRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLnNlc3Npb25fdGltZXIpOwotCXJhdGVfY29udHJvbF9mcmVlX3N0YShzdGEtPnJhdGVfY3RybCwgc3RhLT5yYXRlX2N0cmxfcHJpdik7Ci0JcmF0ZV9jb250cm9sX3B1dChzdGEtPnJhdGVfY3RybCk7Ci0Ja2ZyZWUoc3RhKTsKKworCV9fc3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTsKIH0KIAogCi12b2lkIHN0YV9pbmZvX3B1dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKKy8qIENhbGxlciBtdXN0IGhvbGQgbG9jYWwtPnN0YV9sb2NrICovCitzdGF0aWMgdm9pZCBzdGFfaW5mb19oYXNoX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewotCWtyZWZfcHV0KCZzdGEtPmtyZWYsIHN0YV9pbmZvX3JlbGVhc2UpOworCXN0YS0+aG5leHQgPSBsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goc3RhLT5hZGRyKV07CisJcmN1X2Fzc2lnbl9wb2ludGVyKGxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChzdGEtPmFkZHIpXSwgc3RhKTsKIH0KLUVYUE9SVF9TWU1CT0woc3RhX2luZm9fcHV0KTsKIAotCi1zdHJ1Y3Qgc3RhX2luZm8gKiBzdGFfaW5mb19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmFkZHIsIGdmcF90IGdmcCkKK3N0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJdTggKmFkZHIsIGdmcF90IGdmcCkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlpbnQgaTsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKKwlERUNMQVJFX01BQ19CVUYobWJ1Zik7CiAKIAlzdGEgPSBremFsbG9jKHNpemVvZigqc3RhKSwgZ2ZwKTsKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlrcmVmX2luaXQoJnN0YS0+a3JlZik7CisJbWVtY3B5KHN0YS0+YWRkciwgYWRkciwgRVRIX0FMRU4pOworCXN0YS0+bG9jYWwgPSBsb2NhbDsKKwlzdGEtPnNkYXRhID0gc2RhdGE7CiAKIAlzdGEtPnJhdGVfY3RybCA9IHJhdGVfY29udHJvbF9nZXQobG9jYWwtPnJhdGVfY3RybCk7Ci0Jc3RhLT5yYXRlX2N0cmxfcHJpdiA9IHJhdGVfY29udHJvbF9hbGxvY19zdGEoc3RhLT5yYXRlX2N0cmwsIGdmcCk7CisJc3RhLT5yYXRlX2N0cmxfcHJpdiA9IHJhdGVfY29udHJvbF9hbGxvY19zdGEoc3RhLT5yYXRlX2N0cmwsCisJCQkJCQkgICAgIGdmcCk7CiAJaWYgKCFzdGEtPnJhdGVfY3RybF9wcml2KSB7CiAJCXJhdGVfY29udHJvbF9wdXQoc3RhLT5yYXRlX2N0cmwpOwogCQlrZnJlZShzdGEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1jcHkoc3RhLT5hZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci0Jc3RhLT5sb2NhbCA9IGxvY2FsOwotCXN0YS0+ZGV2ID0gZGV2OwogCXNwaW5fbG9ja19pbml0KCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfcngpOworCXNwaW5fbG9ja19pbml0KCZzdGEtPmFtcGR1X21sbWUuYW1wZHVfdHgpOwogCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKSB7CiAJCS8qIHRpbWVyX3RvX3RpZCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggaWRlbnRpdHkgbWFwcGluZyB0bwogCQkgKiBlbmFibGUgc2Vzc2lvbl90aW1lcidzIGRhdGEgZGlmZmVyZW50aWF0aW9uLiByZWZlciB0bwogCQkgKiBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCBmb3IgdXNlYWdlICovCiAJCXN0YS0+dGltZXJfdG9fdGlkW2ldID0gaTsKLQkJLyogcnggdGltZXJzICovCi0JCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0uc2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9Ci0JCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXS5zZXNzaW9uX3RpbWVyLmRhdGEgPQotCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW2ldOwotCQlpbml0X3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLnNlc3Npb25fdGltZXIpOworCQkvKiB0aWQgdG8gdHggcXVldWU6IGluaXRpYWxpemUgYWNjb3JkaW5nIHRvIEhXICgwIGlzIHZhbGlkKSAqLworCQlzdGEtPnRpZF90b190eF9xW2ldID0gbG9jYWwtPmh3LnF1ZXVlczsKKwkJLyogcnggKi8KKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFtpXSA9IEhUX0FHR19TVEFURV9JRExFOworCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldID0gTlVMTDsKKwkJLyogdHggKi8KKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA9IEhUX0FHR19TVEFURV9JRExFOworCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldID0gTlVMTDsKKwkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1baV0gPSAwOwogCX0KIAlza2JfcXVldWVfaGVhZF9pbml0KCZzdGEtPnBzX3R4X2J1Zik7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc3RhLT50eF9maWx0ZXJlZCk7Ci0JX19zdGFfaW5mb19nZXQoc3RhKTsJLyogc3RhIHVzZWQgYnkgY2FsbGVyLCBkZWNyZW1lbnRlZCBieQotCQkJCSAqIHN0YV9pbmZvX3B1dCgpICovCi0Jd3JpdGVfbG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKLQlsaXN0X2FkZCgmc3RhLT5saXN0LCAmbG9jYWwtPnN0YV9saXN0KTsKLQlsb2NhbC0+bnVtX3N0YSsrOwotCXN0YV9pbmZvX2hhc2hfYWRkKGxvY2FsLCBzdGEpOwotCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0JCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9WTEFOKQotCQkJc2RhdGEgPSBzZGF0YS0+dS52bGFuLmFwOwotCi0JCWxvY2FsLT5vcHMtPnN0YV9ub3RpZnkobG9jYWxfdG9faHcobG9jYWwpLCAmc2RhdGEtPnZpZiwKLQkJCQkgICAgICAgU1RBX05PVElGWV9BREQsIGFkZHIpOwotCX0KLQl3cml0ZV91bmxvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkZWQgU1RBICVzXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHByaW50X21hYyhtYWMsIGFkZHIpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFsbG9jYXRlZCBTVEEgJXNcbiIsCisJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgcHJpbnRfbWFjKG1idWYsIHN0YS0+YWRkcikpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCiAKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwotCS8qIGRlYnVnZnMgZW50cnkgYWRkaW5nIG1pZ2h0IHNsZWVwLCBzbyBzY2hlZHVsZSBwcm9jZXNzCi0JICogY29udGV4dCB0YXNrIGZvciBhZGRpbmcgZW50cnkgZm9yIFNUQXMgdGhhdCBkbyBub3QgeWV0Ci0JICogaGF2ZSBvbmUuICovCi0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPnN0YV9kZWJ1Z2ZzX2FkZCk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfTElTVEVOOworCXNwaW5fbG9ja19pbml0KCZzdGEtPnBsaW5rX2xvY2spOworCWluaXRfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOwogI2VuZGlmCiAKIAlyZXR1cm4gc3RhOwogfQogCi0vKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5zdGFfbG9jayAqLwotdm9pZCBzdGFfaW5mb19yZW1vdmUoc3RydWN0IHN0YV9pbmZvICpzdGEpCitpbnQgc3RhX2luZm9faW5zZXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCS8qIGRvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3ZlIGJlZW4gcmVtb3ZlZCBhbHJlYWR5ICovCi0JaWYgKHN0YV9pbmZvX2hhc2hfZGVsKGxvY2FsLCBzdGEpKQotCQlyZXR1cm47Ci0KLQlsaXN0X2RlbCgmc3RhLT5saXN0KTsKLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHN0YS0+ZGV2KTsKLQlpZiAoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTKSB7Ci0JCXN0YS0+ZmxhZ3MgJj0gfldMQU5fU1RBX1BTOwotCQlpZiAoc2RhdGEtPmJzcykKLQkJCWF0b21pY19kZWMoJnNkYXRhLT5ic3MtPm51bV9zdGFfcHMpOwotCX0KLQlsb2NhbC0+bnVtX3N0YS0tOwotCXN0YV9pbmZvX3JlbW92ZV9haWRfcHRyKHN0YSk7Ci0KLX0KLQotdm9pZCBzdGFfaW5mb19mcmVlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOwogCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCi0JbWlnaHRfc2xlZXAoKTsKLQotCXdyaXRlX2xvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7Ci0Jc3RhX2luZm9fcmVtb3ZlKHN0YSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZsb2NhbC0+c3RhX2xvY2spOwotCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT5wc190eF9idWYpKSAhPSBOVUxMKSB7Ci0JCWxvY2FsLT50b3RhbF9wc19idWZmZXJlZC0tOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JfQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnN0YS0+dHhfZmlsdGVyZWQpKSAhPSBOVUxMKSB7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkvKgorCSAqIENhbid0IGJlIGEgV0FSTl9PTiBiZWNhdXNlIGl0IGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBhIHJhY2U6CisJICogc29tZXRoaW5nIGluc2VydHMgYSBTVEEgKG9uIG9uZSBDUFUpIHdpdGhvdXQgaG9sZGluZyB0aGUgUlROTAorCSAqIGFuZCBhbm90aGVyIENQVSB0dXJucyBvZmYgdGhlIG5ldCBkZXZpY2UuCisJICovCisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlbW92ZWQgU1RBICVzXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCisJaWYgKFdBUk5fT04oY29tcGFyZV9ldGhlcl9hZGRyKHN0YS0+YWRkciwgc2RhdGEtPmRldi0+ZGV2X2FkZHIpID09IDAgfHwKKwkgICAgICAgICAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihzdGEtPmFkZHIpKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOworCX0KIAotCWllZWU4MDIxMV9rZXlfZnJlZShzdGEtPmtleSk7Ci0Jc3RhLT5rZXkgPSBOVUxMOworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwkvKiBjaGVjayBpZiBTVEEgZXhpc3RzIGFscmVhZHkgKi8KKwlpZiAoX19zdGFfaW5mb19maW5kKGxvY2FsLCBzdGEtPmFkZHIpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQllcnIgPSAtRUVYSVNUOworCQlnb3RvIG91dF9mcmVlOworCX0KKwlsaXN0X2FkZCgmc3RhLT5saXN0LCAmbG9jYWwtPnN0YV9saXN0KTsKKwlsb2NhbC0+bnVtX3N0YSsrOworCXN0YV9pbmZvX2hhc2hfYWRkKGxvY2FsLCBzdGEpOwogCisJLyogbm90aWZ5IGRyaXZlciAqLwogCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0JCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoc3RhLT5kZXYpOwotCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfVkxBTikKIAkJCXNkYXRhID0gc2RhdGEtPnUudmxhbi5hcDsKIAogCQlsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KGxvY2FsX3RvX2h3KGxvY2FsKSwgJnNkYXRhLT52aWYsCi0JCQkJICAgICAgIFNUQV9OT1RJRllfUkVNT1ZFLCBzdGEtPmFkZHIpOworCQkJCSAgICAgICBTVEFfTk9USUZZX0FERCwgc3RhLT5hZGRyKTsKIAl9CiAKLQlyYXRlX2NvbnRyb2xfcmVtb3ZlX3N0YV9kZWJ1Z2ZzKHN0YSk7Ci0JaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX3JlbW92ZShzdGEpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnNlcnRlZCBTVEEgJXNcbiIsCisJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KIAotCXN0YV9pbmZvX3B1dChzdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKKwkvKgorCSAqIERlYnVnZnMgZW50cnkgYWRkaW5nIG1pZ2h0IHNsZWVwLCBzbyBzY2hlZHVsZSBwcm9jZXNzCisJICogY29udGV4dCB0YXNrIGZvciBhZGRpbmcgZW50cnkgZm9yIFNUQXMgdGhhdCBkbyBub3QgeWV0CisJICogaGF2ZSBvbmUuCisJICogTk9URTogZHVlIHRvIGF1dG8tZnJlZWluZyBzZW1hbnRpY3MgdGhpcyBtYXkgb25seSBiZSBkb25lCisJICogICAgICAgaWYgdGhlIGluc2VydGlvbiBpcyBzdWNjZXNzZnVsIQorCSAqLworCXNjaGVkdWxlX3dvcmsoJmxvY2FsLT5zdGFfZGVidWdmc19hZGQpOworI2VuZGlmCisKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKKwkJbWVzaF9hY2NlcHRfcGxpbmtzX3VwZGF0ZShzZGF0YSk7CisKKwlyZXR1cm4gMDsKKyBvdXRfZnJlZToKKwlCVUdfT04oIWVycik7CisJX19zdGFfaW5mb19mcmVlKGxvY2FsLCBzdGEpOworCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Jzc190aW1fc2V0KHN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzcywgdTE2IGFpZCkKK3sKKwkvKgorCSAqIFRoaXMgZm9ybWF0IGhhcyBiZWVuIG1hbmRhdGVkIGJ5IHRoZSBJRUVFIHNwZWNpZmljYXRpb25zLAorCSAqIHNvIHRoaXMgbGluZSBtYXkgbm90IGJlIGNoYW5nZWQgdG8gdXNlIHRoZSBfX3NldF9iaXQoKSBmb3JtYXQuCisJICovCisJYnNzLT50aW1bYWlkIC8gOF0gfD0gKDEgPDwgKGFpZCAlIDgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fYnNzX3RpbV9jbGVhcihzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICpic3MsIHUxNiBhaWQpCit7CisJLyoKKwkgKiBUaGlzIGZvcm1hdCBoYXMgYmVlbiBtYW5kYXRlZCBieSB0aGUgSUVFRSBzcGVjaWZpY2F0aW9ucywKKwkgKiBzbyB0aGlzIGxpbmUgbWF5IG5vdCBiZSBjaGFuZ2VkIHRvIHVzZSB0aGUgX19jbGVhcl9iaXQoKSBmb3JtYXQuCisJICovCisJYnNzLT50aW1bYWlkIC8gOF0gJj0gfigxIDw8IChhaWQgJSA4KSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc3RhX2luZm9fc2V0X3RpbV9iaXQoc3RydWN0IGllZWU4MDIxMV9pZl9hcCAqYnNzLAorCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCWlmIChic3MpCisJCV9fYnNzX3RpbV9zZXQoYnNzLCBzdGEtPmFpZCk7CisJaWYgKHN0YS0+bG9jYWwtPm9wcy0+c2V0X3RpbSkgeworCQlzdGEtPmxvY2FsLT50aW1faW5fbG9ja2VkX3NlY3Rpb24gPSB0cnVlOworCQlzdGEtPmxvY2FsLT5vcHMtPnNldF90aW0obG9jYWxfdG9faHcoc3RhLT5sb2NhbCksIHN0YS0+YWlkLCAxKTsKKwkJc3RhLT5sb2NhbC0+dGltX2luX2xvY2tlZF9zZWN0aW9uID0gZmFsc2U7CisJfQorfQorCit2b2lkIHN0YV9pbmZvX3NldF90aW1fYml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5sb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwlfX3N0YV9pbmZvX3NldF90aW1fYml0KHN0YS0+c2RhdGEtPmJzcywgc3RhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX3N0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc3RydWN0IGllZWU4MDIxMV9pZl9hcCAqYnNzLAorCQkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJaWYgKGJzcykKKwkJX19ic3NfdGltX2NsZWFyKGJzcywgc3RhLT5haWQpOworCWlmIChzdGEtPmxvY2FsLT5vcHMtPnNldF90aW0pIHsKKwkJc3RhLT5sb2NhbC0+dGltX2luX2xvY2tlZF9zZWN0aW9uID0gdHJ1ZTsKKwkJc3RhLT5sb2NhbC0+b3BzLT5zZXRfdGltKGxvY2FsX3RvX2h3KHN0YS0+bG9jYWwpLCBzdGEtPmFpZCwgMCk7CisJCXN0YS0+bG9jYWwtPnRpbV9pbl9sb2NrZWRfc2VjdGlvbiA9IGZhbHNlOworCX0KK30KKwordm9pZCBzdGFfaW5mb19jbGVhcl90aW1fYml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5sb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwlfX3N0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc3RhLT5zZGF0YS0+YnNzLCBzdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YS0+bG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgX19zdGFfaW5mb191bmxpbmsoc3RydWN0IHN0YV9pbmZvICoqc3RhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gKCpzdGEpLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9ICgqc3RhKS0+c2RhdGE7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlERUNMQVJFX01BQ19CVUYobWJ1Zik7CisjZW5kaWYKKwkvKgorCSAqIHB1bGwgY2FsbGVyJ3MgcmVmZXJlbmNlIGlmIHdlJ3JlIGFscmVhZHkgZ29uZS4KKwkgKi8KKwlpZiAoc3RhX2luZm9faGFzaF9kZWwobG9jYWwsICpzdGEpKSB7CisJCSpzdGEgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJaWYgKCgqc3RhKS0+a2V5KSB7CisJCWllZWU4MDIxMV9rZXlfZnJlZSgoKnN0YSktPmtleSk7CisJCVdBUk5fT04oKCpzdGEpLT5rZXkpOworCX0KKworCWxpc3RfZGVsKCYoKnN0YSktPmxpc3QpOworCisJaWYgKCgqc3RhKS0+ZmxhZ3MgJiBXTEFOX1NUQV9QUykgeworCQkoKnN0YSktPmZsYWdzICY9IH5XTEFOX1NUQV9QUzsKKwkJaWYgKHNkYXRhLT5ic3MpCisJCQlhdG9taWNfZGVjKCZzZGF0YS0+YnNzLT5udW1fc3RhX3BzKTsKKwkJX19zdGFfaW5mb19jbGVhcl90aW1fYml0KHNkYXRhLT5ic3MsICpzdGEpOworCX0KKworCWxvY2FsLT5udW1fc3RhLS07CisKKwlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pCisJCQlzZGF0YSA9IHNkYXRhLT51LnZsYW4uYXA7CisKKwkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShsb2NhbF90b19odyhsb2NhbCksICZzZGF0YS0+dmlmLAorCQkJCSAgICAgICBTVEFfTk9USUZZX1JFTU9WRSwgKCpzdGEpLT5hZGRyKTsKKwl9CisKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgeworCQltZXNoX2FjY2VwdF9wbGlua3NfdXBkYXRlKHNkYXRhKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCQlkZWxfdGltZXIoJigqc3RhKS0+cGxpbmtfdGltZXIpOworI2VuZGlmCisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlbW92ZWQgU1RBICVzXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHByaW50X21hYyhtYnVmLCAoKnN0YSktPmFkZHIpKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRyAqLworCisJLyoKKwkgKiBGaW5hbGx5LCBwdWxsIGNhbGxlcidzIHJlZmVyZW5jZSBpZiB0aGUgU1RBIGlzIHBpbm5lZCBieSB0aGUKKwkgKiB0YXNrIHRoYXQgaXMgYWRkaW5nIHRoZSBkZWJ1Z2ZzIGVudHJpZXMuIEluIHRoYXQgY2FzZSwgd2UKKwkgKiBsZWF2ZSB0aGUgU1RBICJ0byBiZSBmcmVlZCIuCisJICoKKwkgKiBUaGUgcnVsZXMgYXJlIG5vdCB0cml2aWFsLCBidXQgbm90IHRvbyBjb21wbGV4IGVpdGhlcjoKKwkgKiAgKDEpIHBpbl9zdGF0dXMgaXMgb25seSBtb2RpZmllZCB1bmRlciB0aGUgc3RhX2xvY2sKKwkgKiAgKDIpIFNUQXMgbWF5IG9ubHkgYmUgcGlubmVkIHVuZGVyIHRoZSBSVE5MIHNvIHRoYXQKKwkgKglzdGFfaW5mb19mbHVzaCgpIGlzIGd1YXJhbnRlZWQgdG8gYWN0dWFsbHkgZGVzdHJveQorCSAqCWFsbCBTVEFzIHRoYXQgYXJlIGFjdGl2ZSBmb3IgYSBnaXZlbiBpbnRlcmZhY2UsIHRoaXMKKwkgKglpcyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgYmVjYXVzZSBvdGhlcndpc2Ugd2UKKwkgKgljb3VsZCBub3RpZnkgYSBkcml2ZXIgdGhhdCBhbiBpbnRlcmZhY2UgaXMgZ29pbmcKKwkgKglhd2F5IGFuZCBvbmx5IGFmdGVyIHRoYXQgKCEpIG5vdGlmeSBpdCBhYm91dCBhIFNUQQorCSAqCW9uIHRoYXQgaW50ZXJmYWNlIGdvaW5nIGF3YXkuCisJICogICgzKSBzdGFfaW5mb19kZWJ1Z2ZzX2FkZF93b3JrKCkgd2lsbCBzZXQgdGhlIHN0YXR1cworCSAqCXRvIFBJTk5FRCB3aGVuIGl0IGZvdW5kIGFuIGl0ZW0gdGhhdCBuZWVkcyBhIG5ldworCSAqCWRlYnVnZnMgZGlyZWN0b3J5IGNyZWF0ZWQuIEluIHRoYXQgY2FzZSwgdGhhdCBpdGVtCisJICoJbXVzdCBub3QgYmUgZnJlZWQgYWx0aG91Z2ggYWxsICpSQ1UqIHVzZXJzIGFyZSBkb25lCisJICoJd2l0aCBpdC4gSGVuY2UsIHdlIHRlbGwgdGhlIGNhbGxlciBvZiBfdW5saW5rKCkKKwkgKgl0aGF0IHRoZSBpdGVtIGlzIGFscmVhZHkgZ29uZSAoYXMgY2FuIGhhcHBlbiB3aGVuCisJICoJdHdvIHRhc2tzIHRyeSB0byB1bmxpbmsvZGVzdHJveSBhdCB0aGUgc2FtZSB0aW1lKQorCSAqICAoNCkgV2Ugc2V0IHRoZSBwaW5fc3RhdHVzIHRvIERFU1RST1kgaGVyZSB3aGVuIHdlCisJICoJZmluZCBzdWNoIGFuIGl0ZW0uCisJICogICg1KSBzdGFfaW5mb19kZWJ1Z2ZzX2FkZF93b3JrKCkgd2lsbCByZXNldCB0aGUgcGluX3N0YXR1cworCSAqCWZyb20gUElOTkVEIHRvIE5PUk1BTCB3aGVuIGl0IGlzIGRvbmUgd2l0aCB0aGUgaXRlbSwKKwkgKglidXQgd2lsbCBjaGVjayBmb3IgREVTVFJPWSBiZWZvcmUgcmVzZXR0aW5nIGl0IGluCisJICoJd2hpY2ggY2FzZSBpdCB3aWxsIGZyZWUgdGhlIGl0ZW0uCisJICovCisJaWYgKCgqc3RhKS0+cGluX3N0YXR1cyA9PSBTVEFfSU5GT19QSU5fU1RBVF9QSU5ORUQpIHsKKwkJKCpzdGEpLT5waW5fc3RhdHVzID0gU1RBX0lORk9fUElOX1NUQVRfREVTVFJPWTsKKwkJKnN0YSA9IE5VTEw7CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgc3RhX2luZm9fdW5saW5rKHN0cnVjdCBzdGFfaW5mbyAqKnN0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9ICgqc3RhKS0+bG9jYWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwlfX3N0YV9pbmZvX3VubGluayhzdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworfQogCiBzdGF0aWMgaW5saW5lIGludCBzdGFfaW5mb19idWZmZXJfZXhwaXJlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKQEAgLTI5OSw2ICs1MzcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAogCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSkKQEAgLTMwNywyMSArNTQ2LDIzIEBACiAJZm9yICg7OykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5wc190eF9idWYubG9jaywgZmxhZ3MpOwogCQlza2IgPSBza2JfcGVlaygmc3RhLT5wc190eF9idWYpOwotCQlpZiAoc3RhX2luZm9fYnVmZmVyX2V4cGlyZWQobG9jYWwsIHN0YSwgc2tiKSkgeworCQlpZiAoc3RhX2luZm9fYnVmZmVyX2V4cGlyZWQobG9jYWwsIHN0YSwgc2tiKSkKIAkJCXNrYiA9IF9fc2tiX2RlcXVldWUoJnN0YS0+cHNfdHhfYnVmKTsKLQkJCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSkKLQkJCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9USU07Ci0JCX0gZWxzZQorCQllbHNlCiAJCQlza2IgPSBOVUxMOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPnBzX3R4X2J1Zi5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHNrYikgewotCQkJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkLS07Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQnVmZmVyZWQgZnJhbWUgZXhwaXJlZCAoU1RBICIKLQkJCSAgICAgICAiJXMpXG4iLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJfSBlbHNlCisJCWlmICghc2tiKQogCQkJYnJlYWs7CisKKwkJc2RhdGEgPSBzdGEtPnNkYXRhOworCQlsb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQtLTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJ1ZmZlcmVkIGZyYW1lIGV4cGlyZWQgKFNUQSAiCisJCSAgICAgICAiJXMpXG4iLCBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCisJCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSkKKwkJCXN0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc3RhKTsKIAl9CiB9CiAKQEAgLTMzMSwxMyArNTcyLDEwIEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqKSBkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCi0JcmVhZF9sb2NrX2JoKCZsb2NhbC0+c3RhX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCV9fc3RhX2luZm9fZ2V0KHN0YSk7CisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkKIAkJc3RhX2luZm9fY2xlYW51cF9leHBpcmVfYnVmZmVyZWQobG9jYWwsIHN0YSk7Ci0JCXN0YV9pbmZvX3B1dChzdGEpOwotCX0KLQlyZWFkX3VubG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWxvY2FsLT5zdGFfY2xlYW51cC5leHBpcmVzID0KIAkJcm91bmRfamlmZmllcyhqaWZmaWVzICsgU1RBX0lORk9fQ0xFQU5VUF9JTlRFUlZBTCk7CkBAIC0zNDUsMzggKzU4MywxMDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi1zdGF0aWMgdm9pZCBzdGFfaW5mb19kZWJ1Z2ZzX2FkZF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKy8qCisgKiBTZWUgY29tbWVudCBpbiBfX3N0YV9pbmZvX3VubGluaywKKyAqIGNhbGxlciBtdXN0IGhvbGQgbG9jYWwtPnN0YV9sb2NrLgorICovCitzdGF0aWMgdm9pZCBfX3N0YV9pbmZvX3BpbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3sKKwlXQVJOX09OKHN0YS0+cGluX3N0YXR1cyAhPSBTVEFfSU5GT19QSU5fU1RBVF9OT1JNQUwpOworCXN0YS0+cGluX3N0YXR1cyA9IFNUQV9JTkZPX1BJTl9TVEFUX1BJTk5FRDsKK30KKworLyoKKyAqIFNlZSBjb21tZW50IGluIF9fc3RhX2luZm9fdW5saW5rLCByZXR1cm5zIHN0YSBpZiBpdAorICogbmVlZHMgdG8gYmUgZGVzdHJveWVkLgorICovCitzdGF0aWMgc3RydWN0IHN0YV9pbmZvICpfX3N0YV9pbmZvX3VucGluKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXN0cnVjdCBzdGFfaW5mbyAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YS0+bG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJV0FSTl9PTihzdGEtPnBpbl9zdGF0dXMgIT0gU1RBX0lORk9fUElOX1NUQVRfREVTVFJPWSAmJgorCQlzdGEtPnBpbl9zdGF0dXMgIT0gU1RBX0lORk9fUElOX1NUQVRfUElOTkVEKTsKKwlpZiAoc3RhLT5waW5fc3RhdHVzID09IFNUQV9JTkZPX1BJTl9TVEFUX0RFU1RST1kpCisJCXJldCA9IHN0YTsKKwlzdGEtPnBpbl9zdGF0dXMgPSBTVEFfSU5GT19QSU5fU1RBVF9OT1JNQUw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhLT5sb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0YV9pbmZvX2RlYnVnZnNfYWRkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHN0YV9kZWJ1Z2ZzX2FkZCk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIFdlIG5lZWQgdG8ga2VlcCB0aGUgUlROTCBhY3Jvc3MgdGhlIHdob2xlIHBpbm5lZCBzdGF0dXMuICovCisJcnRubF9sb2NrKCk7CiAJd2hpbGUgKDEpIHsKIAkJc3RhID0gTlVMTDsKLQkJcmVhZF9sb2NrX2JoKCZsb2NhbC0+c3RhX2xvY2spOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKIAkJCWlmICghdG1wLT5kZWJ1Z2ZzLmRpcikgewogCQkJCXN0YSA9IHRtcDsKLQkJCQlfX3N0YV9pbmZvX2dldChzdGEpOworCQkJCV9fc3RhX2luZm9fcGluKHN0YSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJcmVhZF91bmxvY2tfYmgoJmxvY2FsLT5zdGFfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJCWlmICghc3RhKQogCQkJYnJlYWs7CiAKIAkJaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX2FkZChzdGEpOwogCQlyYXRlX2NvbnRyb2xfYWRkX3N0YV9kZWJ1Z2ZzKHN0YSk7Ci0JCXN0YV9pbmZvX3B1dChzdGEpOworCisJCXN0YSA9IF9fc3RhX2luZm9fdW5waW4oc3RhKTsKKwkJc3RhX2luZm9fZGVzdHJveShzdGEpOwogCX0KKwlydG5sX3VubG9jaygpOwogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J1bl9wZW5kaW5nX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlBU1NFUlRfUlROTCgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmbG9jYWwtPnN0YV9mbHVzaF9saXN0KSkgeworCQlzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZsb2NhbC0+c3RhX2ZsdXNoX2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCBzdGFfaW5mbywgbGlzdCk7CisJCWxpc3RfZGVsKCZzdGEtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwkJc3RhX2luZm9fZGVzdHJveShzdGEpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHN0YV9mbHVzaF93b3JrKTsKKworCXJ0bmxfbG9jaygpOworCV9faWVlZTgwMjExX3J1bl9wZW5kaW5nX2ZsdXNoKGxvY2FsKTsKKwlydG5sX3VubG9jaygpOworfQorCiB2b2lkIHN0YV9pbmZvX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0Jcndsb2NrX2luaXQoJmxvY2FsLT5zdGFfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5zdGFfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5zdGFfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5zdGFfZmx1c2hfbGlzdCk7CisJSU5JVF9XT1JLKCZsb2NhbC0+c3RhX2ZsdXNoX3dvcmssIGllZWU4MDIxMV9zdGFfZmx1c2hfd29yayk7CiAKIAlzZXR1cF90aW1lcigmbG9jYWwtPnN0YV9jbGVhbnVwLCBzdGFfaW5mb19jbGVhbnVwLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpbG9jYWwpOwpAQCAtMzg0LDcgKzY5MCw3IEBACiAJCXJvdW5kX2ppZmZpZXMoamlmZmllcyArIFNUQV9JTkZPX0NMRUFOVVBfSU5URVJWQUwpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLQlJTklUX1dPUksoJmxvY2FsLT5zdGFfZGVidWdmc19hZGQsIHN0YV9pbmZvX2RlYnVnZnNfYWRkX3Rhc2spOworCUlOSVRfV09SSygmbG9jYWwtPnN0YV9kZWJ1Z2ZzX2FkZCwgc3RhX2luZm9fZGVidWdmc19hZGRfd29yayk7CiAjZW5kaWYKIH0KIApAQCAtMzk3LDQ3ICs3MDMsODkgQEAKIHZvaWQgc3RhX2luZm9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlkZWxfdGltZXIoJmxvY2FsLT5zdGFfY2xlYW51cCk7CisJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPnN0YV9mbHVzaF93b3JrKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUworCS8qCisJICogTWFrZSBzdXJlIHRoZSBkZWJ1Z2ZzIGFkZGluZyB3b3JrIGlzbid0IHBlbmRpbmcgYWZ0ZXIgdGhpcworCSAqIGJlY2F1c2Ugd2UncmUgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiBJdCBkb2Vzbid0IG1hdHRlcgorCSAqIHdoZXRoZXIgaXQgcmFuIG9yIG5vdCBzaW5jZSB3ZSdyZSBnb2luZyB0byBmbHVzaCBhbGwgU1RBcworCSAqIGFueXdheS4KKwkgKi8KKwljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+c3RhX2RlYnVnZnNfYWRkKTsKKyNlbmRpZgorCisJcnRubF9sb2NrKCk7CiAJc3RhX2luZm9fZmx1c2gobG9jYWwsIE5VTEwpOworCV9faWVlZTgwMjExX3J1bl9wZW5kaW5nX2ZsdXNoKGxvY2FsKTsKKwlydG5sX3VubG9jaygpOwogfQogCi12b2lkIHN0YV9pbmZvX3JlbW92ZV9haWRfcHRyKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0JaWYgKHN0YS0+YWlkIDw9IDApCi0JCXJldHVybjsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoc3RhLT5kZXYpOwotCi0JaWYgKHNkYXRhLT5sb2NhbC0+b3BzLT5zZXRfdGltKQotCQlzZGF0YS0+bG9jYWwtPm9wcy0+c2V0X3RpbShsb2NhbF90b19odyhzZGF0YS0+bG9jYWwpLAotCQkJCQkgIHN0YS0+YWlkLCAwKTsKLQlpZiAoc2RhdGEtPmJzcykKLQkJX19ic3NfdGltX2NsZWFyKHNkYXRhLT5ic3MsIHN0YS0+YWlkKTsKLX0KLQotCiAvKioKICAqIHN0YV9pbmZvX2ZsdXNoIC0gZmx1c2ggbWF0Y2hpbmcgU1RBIGVudHJpZXMgZnJvbSB0aGUgU1RBIHRhYmxlCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbW92ZWQgU1RBIGVudHJpZXMuCisgKgogICogQGxvY2FsOiBsb2NhbCBpbnRlcmZhY2UgZGF0YQotICogQGRldjogbWF0Y2hpbmcgcnVsZSBmb3IgdGhlIG5ldCBkZXZpY2UgKHN0YS0+ZGV2KSBvciAlTlVMTCB0byBtYXRjaCBhbGwgU1RBcworICogQHNkYXRhOiBtYXRjaGluZyBydWxlIGZvciB0aGUgbmV0IGRldmljZSAoc3RhLT5kZXYpIG9yICVOVUxMIHRvIG1hdGNoIGFsbCBTVEFzCiAgKi8KLXZvaWQgc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDsKIAlMSVNUX0hFQUQodG1wX2xpc3QpOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl3cml0ZV9sb2NrX2JoKCZsb2NhbC0+c3RhX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkKLQkJaWYgKCFkZXYgfHwgZGV2ID09IHN0YS0+ZGV2KSB7Ci0JCQlfX3N0YV9pbmZvX2dldChzdGEpOwotCQkJc3RhX2luZm9fcmVtb3ZlKHN0YSk7Ci0JCQlsaXN0X2FkZF90YWlsKCZzdGEtPmxpc3QsICZ0bXBfbGlzdCk7CisJbWlnaHRfc2xlZXAoKTsKKwlBU1NFUlRfUlROTCgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQlpZiAoIXNkYXRhIHx8IHNkYXRhID09IHN0YS0+c2RhdGEpIHsKKwkJCV9fc3RhX2luZm9fdW5saW5rKCZzdGEpOworCQkJaWYgKHN0YSkgeworCQkJCWxpc3RfYWRkX3RhaWwoJnN0YS0+bGlzdCwgJnRtcF9saXN0KTsKKwkJCQlyZXQrKzsKKwkJCX0KIAkJfQotCXdyaXRlX3VubG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJnRtcF9saXN0LCBsaXN0KSB7Ci0JCXN0YV9pbmZvX2ZyZWUoc3RhKTsKLQkJc3RhX2luZm9fcHV0KHN0YSk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCAmdG1wX2xpc3QsIGxpc3QpCisJCXN0YV9pbmZvX2Rlc3Ryb3koc3RhKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc3RhX2luZm9fZmx1c2hfZGVsYXllZCAtIGZsdXNoIG1hdGNoaW5nIFNUQSBlbnRyaWVzIGZyb20gdGhlIFNUQSB0YWJsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5saW5rcyBhbGwgc3RhdGlvbnMgZm9yIGEgZ2l2ZW4gaW50ZXJmYWNlIGFuZCBxdWV1ZXMKKyAqIHRoZW0gZm9yIGZyZWVpbmcuIE5vdGUgdGhhdCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHNjaGVkdWxlZCBoZXJlIGhhcworICogdG8gcnVuIGJlZm9yZSBhbnkgbmV3IGtleXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0gdG8gYXZvaWQgc2V0X2tleSgpCisgKiBjYWxsYmFjayBvcmRlcmluZyBpc3N1ZXMuCisgKgorICogQHNkYXRhOiB0aGUgaW50ZXJmYWNlCisgKi8KK3ZvaWQgc3RhX2luZm9fZmx1c2hfZGVsYXllZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgd29yayA9IGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQlpZiAoc2RhdGEgPT0gc3RhLT5zZGF0YSkgeworCQkJX19zdGFfaW5mb191bmxpbmsoJnN0YSk7CisJCQlpZiAoc3RhKSB7CisJCQkJbGlzdF9hZGRfdGFpbCgmc3RhLT5saXN0LAorCQkJCQkgICAgICAmbG9jYWwtPnN0YV9mbHVzaF9saXN0KTsKKwkJCQl3b3JrID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKwlpZiAod29yaykKKwkJc2NoZWR1bGVfd29yaygmbG9jYWwtPnN0YV9mbHVzaF93b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggOTZmZTNlZC4uZjhjOTViYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTEyLDE2MCArMTIsMjkzIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExX2tleS5oIgorI2luY2x1ZGUgImtleS5oIgogCi0vKiBTdGF0aW9ucyBmbGFncyAoc3RydWN0IHN0YV9pbmZvOjpmbGFncykgKi8KLSNkZWZpbmUgV0xBTl9TVEFfQVVUSCBCSVQoMCkKLSNkZWZpbmUgV0xBTl9TVEFfQVNTT0MgQklUKDEpCi0jZGVmaW5lIFdMQU5fU1RBX1BTIEJJVCgyKQotI2RlZmluZSBXTEFOX1NUQV9USU0gQklUKDMpIC8qIFRJTSBiaXQgaXMgb24gZm9yIFBTIHN0YXRpb25zICovCi0jZGVmaW5lIFdMQU5fU1RBX1BFUk0gQklUKDQpIC8qIHBlcm1hbmVudDsgZG8gbm90IHJlbW92ZSBlbnRyeSBvbiBleHBpcmF0aW9uICovCi0jZGVmaW5lIFdMQU5fU1RBX0FVVEhPUklaRUQgQklUKDUpIC8qIElmIDgwMi4xWCBpcyB1c2VkLCB0aGlzIGZsYWcgaXMKLQkJCQkgICAgKiBjb250cm9sbGluZyB3aGV0aGVyIFNUQSBpcyBhdXRob3JpemVkIHRvCi0JCQkJICAgICogc2VuZCBhbmQgcmVjZWl2ZSBub24tSUVFRSA4MDIuMVggZnJhbWVzCi0JCQkJICAgICovCi0jZGVmaW5lIFdMQU5fU1RBX1NIT1JUX1BSRUFNQkxFIEJJVCg3KQotLyogd2hldGhlciB0aGlzIGlzIGFuIEFQIHRoYXQgd2UgYXJlIGFzc29jaWF0ZWQgd2l0aCBhcyBhIGNsaWVudCAqLwotI2RlZmluZSBXTEFOX1NUQV9BU1NPQ19BUCBCSVQoOCkKLSNkZWZpbmUgV0xBTl9TVEFfV01FIEJJVCg5KQotI2RlZmluZSBXTEFOX1NUQV9XRFMgQklUKDI3KQorLyoqCisgKiBlbnVtIGllZWU4MDIxMV9zdGFfaW5mb19mbGFncyAtIFN0YXRpb25zIGZsYWdzCisgKgorICogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgd2l0aCAmc3RydWN0IHN0YV9pbmZvJ3MgQGZsYWdzIG1lbWJlci4KKyAqCisgKiBAV0xBTl9TVEFfQVVUSDogU3RhdGlvbiBpcyBhdXRoZW50aWNhdGVkLgorICogQFdMQU5fU1RBX0FTU09DOiBTdGF0aW9uIGlzIGFzc29jaWF0ZWQuCisgKiBAV0xBTl9TVEFfUFM6IFN0YXRpb24gaXMgaW4gcG93ZXItc2F2ZSBtb2RlCisgKiBAV0xBTl9TVEFfQVVUSE9SSVpFRDogU3RhdGlvbiBpcyBhdXRob3JpemVkIHRvIHNlbmQvcmVjZWl2ZSB0cmFmZmljLgorICoJVGhpcyBiaXQgaXMgYWx3YXlzIGNoZWNrZWQgc28gbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgYWxsIHN0YXRpb25zCisgKgl3aGVuIHZpcnR1YWwgcG9ydCBjb250cm9sIGlzIG5vdCBpbiB1c2UuCisgKiBAV0xBTl9TVEFfU0hPUlRfUFJFQU1CTEU6IFN0YXRpb24gaXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgc2hvcnQtcHJlYW1ibGUKKyAqCWZyYW1lcy4KKyAqIEBXTEFOX1NUQV9BU1NPQ19BUDogV2UncmUgYXNzb2NpYXRlZCB0byB0aGF0IHN0YXRpb24sIGl0IGlzIGFuIEFQLgorICogQFdMQU5fU1RBX1dNRTogU3RhdGlvbiBpcyBhIFFvUy1TVEEuCisgKiBAV0xBTl9TVEFfV0RTOiBTdGF0aW9uIGlzIG9uZSBvZiBvdXIgV0RTIHBlZXJzLgorICogQFdMQU5fU1RBX1BTUE9MTDogU3RhdGlvbiBoYXMganVzdCBQUy1wb2xsZWQgdXMuCisgKiBAV0xBTl9TVEFfQ0xFQVJfUFNfRklMVDogQ2xlYXIgUFMgZmlsdGVyIGluIGhhcmR3YXJlICh1c2luZyB0aGUKKyAqCUlFRUU4MDIxMV9UWENUTF9DTEVBUl9QU19GSUxUIGNvbnRyb2wgZmxhZykgd2hlbiB0aGUgbmV4dAorICoJZnJhbWUgdG8gdGhpcyBzdGF0aW9uIGlzIHRyYW5zbWl0dGVkLgorICovCitlbnVtIGllZWU4MDIxMV9zdGFfaW5mb19mbGFncyB7CisJV0xBTl9TVEFfQVVUSAkJPSAxPDwwLAorCVdMQU5fU1RBX0FTU09DCQk9IDE8PDEsCisJV0xBTl9TVEFfUFMJCT0gMTw8MiwKKwlXTEFOX1NUQV9BVVRIT1JJWkVECT0gMTw8MywKKwlXTEFOX1NUQV9TSE9SVF9QUkVBTUJMRQk9IDE8PDQsCisJV0xBTl9TVEFfQVNTT0NfQVAJPSAxPDw1LAorCVdMQU5fU1RBX1dNRQkJPSAxPDw2LAorCVdMQU5fU1RBX1dEUwkJPSAxPDw3LAorCVdMQU5fU1RBX1BTUE9MTAkJPSAxPDw4LAorCVdMQU5fU1RBX0NMRUFSX1BTX0ZJTFQJPSAxPDw5LAorfTsKIAogI2RlZmluZSBTVEFfVElEX05VTSAxNgogI2RlZmluZSBBRERCQV9SRVNQX0lOVEVSVkFMIEhaCisjZGVmaW5lIEhUX0FHR19NQVhfUkVUUklFUwkJKDB4MykKIAogI2RlZmluZSBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUCSg0KQogCisjZGVmaW5lIEhUX0FEREJBX1JFUVVFU1RFRF9NU0sJCUJJVCgwKQorI2RlZmluZSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLCQlCSVQoMSkKKyNkZWZpbmUgSFRfQUREQkFfUkVDRUlWRURfTVNLCQlCSVQoMikKICNkZWZpbmUgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSwlCSVQoMykKLQorI2RlZmluZSBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSyAgICAgIEJJVChIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKQogI2RlZmluZSBIVF9BR0dfU1RBVEVfSURMRQkJKDB4MCkKLSNkZWZpbmUgSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMCSgweDcpCisjZGVmaW5lIEhUX0FHR19TVEFURV9PUEVSQVRJT05BTAkoSFRfQUREQkFfUkVRVUVTVEVEX01TSyB8CVwKKwkJCQkJIEhUX0FEREJBX0RSVl9SRUFEWV9NU0sgfAlcCisJCQkJCSBIVF9BRERCQV9SRUNFSVZFRF9NU0spCisjZGVmaW5lIEhUX0FHR19TVEFURV9ERUJVR0ZTX0NUTAlCSVQoNykKKworLyoqCisgKiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IC0gVElEIGFnZ3JlZ2F0aW9uIGluZm9ybWF0aW9uIChUeCkuCisgKgorICogQGFkZGJhX3Jlc3BfdGltZXI6IHRpbWVyIGZvciBwZWVyJ3MgcmVzcG9uc2UgdG8gYWRkYmEgcmVxdWVzdAorICogQHNzbjogU3RhcnRpbmcgU2VxdWVuY2UgTnVtYmVyIGV4cGVjdGVkIHRvIGJlIGFnZ3JlZ2F0ZWQuCisgKiBAZGlhbG9nX3Rva2VuOiBkaWFsb2cgdG9rZW4gZm9yIGFnZ3JlZ2F0aW9uIHNlc3Npb24KKyAqLworc3RydWN0IHRpZF9hbXBkdV90eCB7CisJc3RydWN0IHRpbWVyX2xpc3QgYWRkYmFfcmVzcF90aW1lcjsKKwl1MTYgc3NuOworCXU4IGRpYWxvZ190b2tlbjsKK307CiAKIC8qKgogICogc3RydWN0IHRpZF9hbXBkdV9yeCAtIFRJRCBhZ2dyZWdhdGlvbiBpbmZvcm1hdGlvbiAoUngpLgogICoKLSAqIEBzdGF0ZTogVElEJ3Mgc3RhdGUgaW4gc2Vzc2lvbiBzdGF0ZSBtYWNoaW5lLgotICogQGRpYWxvZ190b2tlbjogZGlhbG9nIHRva2VuIGZvciBhZ2dyZWdhdGlvbiBzZXNzaW9uCisgKiBAcmVvcmRlcl9idWY6IGJ1ZmZlciB0byByZW9yZGVyIGluY29taW5nIGFnZ3JlZ2F0ZWQgTVBEVXMKKyAqIEBzZXNzaW9uX3RpbWVyOiBjaGVjayBpZiBwZWVyIGtlZXBzIFR4LWluZyBvbiB0aGUgVElEIChieSB0aW1lb3V0IHZhbHVlKQorICogQGhlYWRfc2VxX251bTogaGVhZCBzZXF1ZW5jZSBudW1iZXIgaW4gcmVvcmRlcmluZyBidWZmZXIuCisgKiBAc3RvcmVkX21wZHVfbnVtOiBudW1iZXIgb2YgTVBEVXMgaW4gcmVvcmRlcmluZyBidWZmZXIKICAqIEBzc246IFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBleHBlY3RlZCB0byBiZSBhZ2dyZWdhdGVkLgogICogQGJ1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgaW5jb21pbmcgQS1NUERVcwogICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlLgotICogQGhlYWRfc2VxX251bTogaGVhZCBzZXF1ZW5jZSBudW1iZXIgaW4gcmVvcmRlcmluZyBidWZmZXIuCi0gKiBAc3RvcmVkX21wZHVfbnVtOiBudW1iZXIgb2YgTVBEVXMgaW4gcmVvcmRlcmluZyBidWZmZXIKLSAqIEByZW9yZGVyX2J1ZjogYnVmZmVyIHRvIHJlb3JkZXIgaW5jb21pbmcgYWdncmVnYXRlZCBNUERVcwotICogQHNlc3Npb25fdGltZXI6IGNoZWNrIGlmIHBlZXIga2VlcHMgVHgtaW5nIG9uIHRoZSBUSUQgKGJ5IHRpbWVvdXQgdmFsdWUpCisgKiBAZGlhbG9nX3Rva2VuOiBkaWFsb2cgdG9rZW4gZm9yIGFnZ3JlZ2F0aW9uIHNlc3Npb24KICAqLwogc3RydWN0IHRpZF9hbXBkdV9yeCB7Ci0JdTggc3RhdGU7Ci0JdTggZGlhbG9nX3Rva2VuOworCXN0cnVjdCBza19idWZmICoqcmVvcmRlcl9idWY7CisJc3RydWN0IHRpbWVyX2xpc3Qgc2Vzc2lvbl90aW1lcjsKKwl1MTYgaGVhZF9zZXFfbnVtOworCXUxNiBzdG9yZWRfbXBkdV9udW07CiAJdTE2IHNzbjsKIAl1MTYgYnVmX3NpemU7CiAJdTE2IHRpbWVvdXQ7Ci0JdTE2IGhlYWRfc2VxX251bTsKLQl1MTYgc3RvcmVkX21wZHVfbnVtOwotCXN0cnVjdCBza19idWZmICoqcmVvcmRlcl9idWY7Ci0Jc3RydWN0IHRpbWVyX2xpc3Qgc2Vzc2lvbl90aW1lcjsKKwl1OCBkaWFsb2dfdG9rZW47Cit9OworCisvKioKKyAqIGVudW0gcGxpbmtfc3RhdGUgLSBzdGF0ZSBvZiBhIG1lc2ggcGVlciBsaW5rIGZpbml0ZSBzdGF0ZSBtYWNoaW5lCisgKgorICogQFBMSU5LX0xJU1RFTjogaW5pdGlhbCBzdGF0ZSwgY29uc2lkZXJlZCB0aGUgaW1wbGljaXQgc3RhdGUgb2Ygbm9uIGV4aXN0YW50CisgKiAJbWVzaCBwZWVyIGxpbmtzCisgKiBAUExJTktfT1BOX1NOVDogbWVzaCBwbGluayBvcGVuIGZyYW1lIGhhcyBiZWVuIHNlbnQgdG8gdGhpcyBtZXNoIHBlZXIKKyAqIEBQTElOS19PUE5fUkNWRDogbWVzaCBwbGluayBvcGVuIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhpcyBtZXNoIHBlZXIKKyAqIEBQTElOS19DTkZfUkNWRDogbWVzaCBwbGluayBjb25maXJtIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhpcyBtZXNoCisgKiAJcGVlcgorICogQFBMSU5LX0VTVEFCOiBtZXNoIHBlZXIgbGluayBpcyBlc3RhYmxpc2hlZAorICogQFBMSU5LX0hPTERJTkc6IG1lc2ggcGVlciBsaW5rIGlzIGJlaW5nIGNsb3NlZCBvciBjYW5jZWxsZWQKKyAqIEBQTElOS19CTE9DS0VEOiBhbGwgZnJhbWVzIHRyYW5zbWl0dGVkIGZyb20gdGhpcyBtZXNoIHBsaW5rIGFyZSBkaXNjYXJkZWQKKyAqLworZW51bSBwbGlua19zdGF0ZSB7CisJUExJTktfTElTVEVOLAorCVBMSU5LX09QTl9TTlQsCisJUExJTktfT1BOX1JDVkQsCisJUExJTktfQ05GX1JDVkQsCisJUExJTktfRVNUQUIsCisJUExJTktfSE9MRElORywKKwlQTElOS19CTE9DS0VECiB9OwogCiAvKioKICAqIHN0cnVjdCBzdGFfYW1wZHVfbWxtZSAtIFNUQSBhZ2dyZWdhdGlvbiBpbmZvcm1hdGlvbi4KICAqCi0gKiBAdGlkX2FnZ19pbmZvX3J4OiBhZ2dyZWdhdGlvbiBpbmZvIGZvciBSeCBwZXIgVElECisgKiBAdGlkX3N0YXRlX3J4OiBUSUQncyBzdGF0ZSBpbiBSeCBzZXNzaW9uIHN0YXRlIG1hY2hpbmUuCisgKiBAdGlkX3J4OiBhZ2dyZWdhdGlvbiBpbmZvIGZvciBSeCBwZXIgVElECiAgKiBAYW1wZHVfcng6IGZvciBsb2NraW5nIHNlY3Rpb25zIGluIGFnZ3JlZ2F0aW9uIFJ4IGZsb3cKKyAqIEB0aWRfc3RhdGVfdHg6IFRJRCdzIHN0YXRlIGluIFR4IHNlc3Npb24gc3RhdGUgbWFjaGluZS4KKyAqIEB0aWRfdHg6IGFnZ3JlZ2F0aW9uIGluZm8gZm9yIFR4IHBlciBUSUQKKyAqIEBhZGRiYV9yZXFfbnVtOiBudW1iZXIgb2YgdGltZXMgYWRkQkEgcmVxdWVzdCBoYXMgYmVlbiBzZW50LgorICogQGFtcGR1X3R4OiBmb3IgbG9ja2luZyBzZWN0aW9uc2kgaW4gYWdncmVnYXRpb24gVHggZmxvdworICogQGRpYWxvZ190b2tlbl9hbGxvY2F0b3I6IGRpYWxvZyB0b2tlbiBlbnVtZXJhdG9yIGZvciBlYWNoIG5ldyBzZXNzaW9uOwogICovCiBzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgewotCXN0cnVjdCB0aWRfYW1wZHVfcnggdGlkX3J4W1NUQV9USURfTlVNXTsKKwkvKiByeCAqLworCXU4IHRpZF9zdGF0ZV9yeFtTVEFfVElEX05VTV07CisJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX3J4W1NUQV9USURfTlVNXTsKIAlzcGlubG9ja190IGFtcGR1X3J4OworCS8qIHR4ICovCisJdTggdGlkX3N0YXRlX3R4W1NUQV9USURfTlVNXTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHhbU1RBX1RJRF9OVU1dOworCXU4IGFkZGJhX3JlcV9udW1bU1RBX1RJRF9OVU1dOworCXNwaW5sb2NrX3QgYW1wZHVfdHg7CisJdTggZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKIH07CiAKKworLyogc2VlIF9fc3RhX2luZm9fdW5saW5rICovCisjZGVmaW5lIFNUQV9JTkZPX1BJTl9TVEFUX05PUk1BTAkwCisjZGVmaW5lIFNUQV9JTkZPX1BJTl9TVEFUX1BJTk5FRAkxCisjZGVmaW5lIFNUQV9JTkZPX1BJTl9TVEFUX0RFU1RST1kJMgorCisvKioKKyAqIHN0cnVjdCBzdGFfaW5mbyAtIFNUQSBpbmZvcm1hdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0IGEgc3RhdGlvbiB0aGF0CisgKiBtYWM4MDIxMSBpcyBjb21tdW5pY2F0aW5nIHdpdGguCisgKgorICogQGxpc3Q6IGdsb2JhbCBsaW5rZWQgbGlzdCBlbnRyeQorICogQGhuZXh0OiBoYXNoIHRhYmxlIGxpbmtlZCBsaXN0IHBvaW50ZXIKKyAqIEBsb2NhbDogcG9pbnRlciB0byB0aGUgZ2xvYmFsIGluZm9ybWF0aW9uCisgKiBAYWRkcjogTUFDIGFkZHJlc3Mgb2YgdGhpcyBTVEEKKyAqIEBhaWQ6IFNUQSdzIHVuaXF1ZSBBSUQgKDEuLjIwMDcsIDAgPSBub3QgYXNzaWduZWQgeWV0KSwKKyAqCW9ubHkgdXNlZCBpbiBBUCAoYW5kIElCU1M/KSBtb2RlCisgKiBAZmxhZ3M6IFNUQSBmbGFncywgc2VlICZlbnVtIGllZWU4MDIxMV9zdGFfaW5mb19mbGFncworICogQHBzX3R4X2J1ZjogYnVmZmVyIG9mIGZyYW1lcyB0byB0cmFuc21pdCB0byB0aGlzIHN0YXRpb24KKyAqCXdoZW4gaXQgbGVhdmVzIHBvd2VyIHNhdmluZyBzdGF0ZQorICogQHR4X2ZpbHRlcmVkOiBidWZmZXIgb2YgZnJhbWVzIHdlIGFscmVhZHkgdHJpZWQgdG8gdHJhbnNtaXQKKyAqCWJ1dCB3ZXJlIGZpbHRlcmVkIGJ5IGhhcmR3YXJlIGR1ZSB0byBTVEEgaGF2aW5nIGVudGVyZWQKKyAqCXBvd2VyIHNhdmluZyBzdGF0ZQorICogQHJ4X3BhY2tldHM6IE51bWJlciBvZiBNU0RVcyByZWNlaXZlZCBmcm9tIHRoaXMgU1RBCisgKiBAcnhfYnl0ZXM6IE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBmcm9tIHRoaXMgU1RBCisgKiBAc3VwcF9yYXRlczogQml0bWFwIG9mIHN1cHBvcnRlZCByYXRlcyAocGVyIGJhbmQpCisgKiBAaHRfaW5mbzogSFQgY2FwYWJpbGl0aWVzIG9mIHRoaXMgU1RBCisgKi8KIHN0cnVjdCBzdGFfaW5mbyB7Ci0Jc3RydWN0IGtyZWYga3JlZjsKKwkvKiBHZW5lcmFsIGluZm9ybWF0aW9uLCBtb3N0bHkgc3RhdGljICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBzdGFfaW5mbyAqaG5leHQ7IC8qIG5leHQgZW50cnkgaW4gaGFzaCB0YWJsZSBsaXN0ICovCi0KKwlzdHJ1Y3Qgc3RhX2luZm8gKmhuZXh0OwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwotCi0JdTggYWRkcltFVEhfQUxFTl07Ci0JdTE2IGFpZDsgLyogU1RBJ3MgdW5pcXVlIEFJRCAoMS4uMjAwNyksIDAgPSBub3QgeWV0IGFzc2lnbmVkICovCi0JdTMyIGZsYWdzOyAvKiBXTEFOX1NUQV8gKi8KLQotCXN0cnVjdCBza19idWZmX2hlYWQgcHNfdHhfYnVmOyAvKiBidWZmZXIgb2YgVFggZnJhbWVzIGZvciBzdGF0aW9uIGluCi0JCQkJCSogcG93ZXIgc2F2aW5nIHN0YXRlICovCi0JaW50IHBzcG9sbDsgLyogd2hldGhlciBTVEEgaGFzIHNlbmQgYSBQUyBQb2xsIGZyYW1lICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9maWx0ZXJlZDsgLyogYnVmZmVyIG9mIFRYIGZyYW1lcyB0aGF0IHdlcmUKLQkJCQkJICAqIGFscmVhZHkgZ2l2ZW4gdG8gbG93LWxldmVsIGRyaXZlciwKLQkJCQkJICAqIGJ1dCB3ZXJlIGZpbHRlcmVkICovCi0JaW50IGNsZWFyX2RzdF9tYXNrOwotCi0JdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzLCB0eF9wYWNrZXRzOyAvKiBudW1iZXIgb2YgUlgvVFggTVNEVXMgKi8KLQl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzLCB0eF9ieXRlczsKLQl1bnNpZ25lZCBsb25nIHR4X3JldHJ5X2ZhaWxlZCwgdHhfcmV0cnlfY291bnQ7Ci0JdW5zaWduZWQgbG9uZyB0eF9maWx0ZXJlZF9jb3VudDsKLQotCXVuc2lnbmVkIGludCB3ZXBfd2Vha19pdl9jb3VudDsgLyogbnVtYmVyIG9mIFJYIGZyYW1lcyB3aXRoIHdlYWsgSVYgKi8KLQotCXVuc2lnbmVkIGxvbmcgbGFzdF9yeDsKLQl1MzIgc3VwcF9yYXRlczsgLyogYml0bWFwIG9mIHN1cHBvcnRlZCByYXRlcyBpbiBsb2NhbC0+Y3Vycl9yYXRlcyAqLwotCWludCB0eHJhdGU7IC8qIGluZGV4IGluIGxvY2FsLT5jdXJyX3JhdGVzICovCi0JaW50IGxhc3RfdHhyYXRlOyAvKiBsYXN0IHJhdGUgdXNlZCB0byBzZW5kIGEgZnJhbWUgdG8gdGhpcyBTVEEgKi8KLQlpbnQgbGFzdF9ub25lcnBfaWR4OwotCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsgLyogd2hpY2ggbmV0IGRldmljZSBpcyB0aGlzIHN0YXRpb24gYXNzb2NpYXRlZAotCQkJCSAqIHRvICovCi0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwotCi0JdTMyIHR4X251bV9jb25zZWN1dGl2ZV9mYWlsdXJlczsKLQl1MzIgdHhfbnVtX21wZHVfb2s7Ci0JdTMyIHR4X251bV9tcGR1X2ZhaWw7Ci0KIAlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmF0ZV9jdHJsOwogCXZvaWQgKnJhdGVfY3RybF9wcml2OworCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyBodF9pbmZvOworCXU2NCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCXU4IGFkZHJbRVRIX0FMRU5dOworCXUxNiBhaWQ7CisJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKIAotCS8qIGxhc3QgcmVjZWl2ZWQgc2VxL2ZyYWcgbnVtYmVyIGZyb20gdGhpcyBTVEEgKHBlciBSWCBxdWV1ZSkgKi8KLQlfX2xlMTYgbGFzdF9zZXFfY3RybFtOVU1fUlhfREFUQV9RVUVVRVNdOworCS8qCisJICogZm9yIHVzZSBieSB0aGUgaW50ZXJuYWwgbGlmZXRpbWUgbWFuYWdlbWVudCwKKwkgKiBzZWUgX19zdGFfaW5mb191bmxpbmsKKwkgKi8KKwl1OCBwaW5fc3RhdHVzOworCisJLyogZnJlcXVlbnRseSB1cGRhdGVkIGluZm9ybWF0aW9uLCBuZWVkcyBsb2NraW5nPyAqLworCXUzMiBmbGFnczsKKworCS8qCisJICogU1RBIHBvd2Vyc2F2ZSBmcmFtZSBxdWV1ZXMsIG5vIG1vcmUgdGhhbiB0aGUgaW50ZXJuYWwKKwkgKiBsb2NraW5nIHJlcXVpcmVkLgorCSAqLworCXN0cnVjdCBza19idWZmX2hlYWQgcHNfdHhfYnVmOworCXN0cnVjdCBza19idWZmX2hlYWQgdHhfZmlsdGVyZWQ7CisKKwkvKiBVcGRhdGVkIGZyb20gUlggcGF0aCBvbmx5LCBubyBsb2NraW5nIHJlcXVpcmVtZW50cyAqLworCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0cywgcnhfYnl0ZXM7CisJdW5zaWduZWQgbG9uZyB3ZXBfd2Vha19pdl9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CiAJdW5zaWduZWQgbG9uZyBudW1fZHVwbGljYXRlczsgLyogbnVtYmVyIG9mIGR1cGxpY2F0ZSBmcmFtZXMgcmVjZWl2ZWQKIAkJCQkgICAgICAgKiBmcm9tIHRoaXMgU1RBICovCi0JdW5zaWduZWQgbG9uZyB0eF9mcmFnbWVudHM7IC8qIG51bWJlciBvZiB0cmFuc21pdHRlZCBNUERVcyAqLwogCXVuc2lnbmVkIGxvbmcgcnhfZnJhZ21lbnRzOyAvKiBudW1iZXIgb2YgcmVjZWl2ZWQgTVBEVXMgKi8KIAl1bnNpZ25lZCBsb25nIHJ4X2Ryb3BwZWQ7IC8qIG51bWJlciBvZiBkcm9wcGVkIE1QRFVzIGZyb20gdGhpcyBTVEEgKi8KLQogCWludCBsYXN0X3Jzc2k7IC8qIFJTU0kgb2YgbGFzdCByZWNlaXZlZCBmcmFtZSBmcm9tIHRoaXMgU1RBICovCiAJaW50IGxhc3Rfc2lnbmFsOyAvKiBzaWduYWwgb2YgbGFzdCByZWNlaXZlZCBmcmFtZSBmcm9tIHRoaXMgU1RBICovCiAJaW50IGxhc3Rfbm9pc2U7IC8qIG5vaXNlIG9mIGxhc3QgcmVjZWl2ZWQgZnJhbWUgZnJvbSB0aGlzIFNUQSAqLwotCWludCBsYXN0X2Fja19yc3NpWzNdOyAvKiBSU1NJIG9mIGxhc3QgcmVjZWl2ZWQgQUNLcyBmcm9tIHRoaXMgU1RBICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X2FjazsKKwkvKiBsYXN0IHJlY2VpdmVkIHNlcS9mcmFnIG51bWJlciBmcm9tIHRoaXMgU1RBIChwZXIgUlggcXVldWUpICovCisJX19sZTE2IGxhc3Rfc2VxX2N0cmxbTlVNX1JYX0RBVEFfUVVFVUVTXTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKKwl1bnNpZ25lZCBpbnQgd21lX3J4X3F1ZXVlW05VTV9SWF9EQVRBX1FVRVVFU107CisjZW5kaWYKKworCS8qIFVwZGF0ZWQgZnJvbSBUWCBzdGF0dXMgcGF0aCBvbmx5LCBubyBsb2NraW5nIHJlcXVpcmVtZW50cyAqLworCXVuc2lnbmVkIGxvbmcgdHhfZmlsdGVyZWRfY291bnQ7CisJdW5zaWduZWQgbG9uZyB0eF9yZXRyeV9mYWlsZWQsIHR4X3JldHJ5X2NvdW50OworCS8qIFRPRE86IHVwZGF0ZSBpbiBnZW5lcmljIGNvZGUgbm90IHJhdGUgY29udHJvbD8gKi8KKwl1MzIgdHhfbnVtX2NvbnNlY3V0aXZlX2ZhaWx1cmVzOworCXUzMiB0eF9udW1fbXBkdV9vazsKKwl1MzIgdHhfbnVtX21wZHVfZmFpbDsKKwkvKiBtb3ZpbmcgcGVyY2VudGFnZSBvZiBmYWlsZWQgTVNEVXMgKi8KKwl1bnNpZ25lZCBpbnQgZmFpbF9hdmc7CisKKwkvKiBVcGRhdGVkIGZyb20gVFggcGF0aCBvbmx5LCBubyBsb2NraW5nIHJlcXVpcmVtZW50cyAqLworCXVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsgLyogbnVtYmVyIG9mIFJYL1RYIE1TRFVzICovCisJdW5zaWduZWQgbG9uZyB0eF9ieXRlczsKKwl1bnNpZ25lZCBsb25nIHR4X2ZyYWdtZW50czsgLyogbnVtYmVyIG9mIHRyYW5zbWl0dGVkIE1QRFVzICovCisJaW50IHR4cmF0ZV9pZHg7CisJaW50IGxhc3RfdHhyYXRlX2lkeDsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKKwl1bnNpZ25lZCBpbnQgd21lX3R4X3F1ZXVlW05VTV9SWF9EQVRBX1FVRVVFU107CisjZW5kaWYKKworCS8qIERlYnVnIGNvdW50ZXJzLCBubyBsb2NraW5nIGRvZXNuJ3QgbWF0dGVyICovCiAJaW50IGNoYW5uZWxfdXNlOwogCWludCBjaGFubmVsX3VzZV9yYXc7CiAKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKLQl1bnNpZ25lZCBpbnQgd21lX3J4X3F1ZXVlW05VTV9SWF9EQVRBX1FVRVVFU107Ci0JdW5zaWduZWQgaW50IHdtZV90eF9xdWV1ZVtOVU1fUlhfREFUQV9RVUVVRVNdOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUyAqLwotCi0JdTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQotCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyBodF9pbmZvOyAvKiA4MDIuMTFuIEhUIGNhcGFiaWxpdGllcwotCQkJCQkgICAgIG9mIHRoaXMgU1RBICovCisJLyoKKwkgKiBBZ2dyZWdhdGlvbiBpbmZvcm1hdGlvbiwgY29tZXMgd2l0aCBvd24gbG9ja2luZy4KKwkgKi8KIAlzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgYW1wZHVfbWxtZTsKLQl1OCB0aW1lcl90b190aWRbU1RBX1RJRF9OVU1dOwkvKiBjb252ZXJ0IHRpbWVyIGlkIHRvIHRpZCAqLworCXU4IHRpbWVyX3RvX3RpZFtTVEFfVElEX05VTV07CS8qIGlkZW50aXR5IG1hcHBpbmcgdG8gSUQgdGltZXJzICovCisJdTggdGlkX3RvX3R4X3FbU1RBX1RJRF9OVU1dOwkvKiBtYXAgdGlkIHRvIHR4IHF1ZXVlICovCisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCS8qCisJICogTWVzaCBwZWVyIGxpbmsgYXR0cmlidXRlcworCSAqIFRPRE86IG1vdmUgdG8gYSBzdWItc3RydWN0dXJlIHRoYXQgaXMgcmVmZXJlbmNlZCB3aXRoIHBvaW50ZXI/CisJICovCisJX19sZTE2IGxsaWQ7CQkvKiBMb2NhbCBsaW5rIElEICovCisJX19sZTE2IHBsaWQ7CQkvKiBQZWVyIGxpbmsgSUQgKi8KKwlfX2xlMTYgcmVhc29uOwkJLyogQ2FuY2VsIHJlYXNvbiBvbiBQTElOS19IT0xESU5HIHN0YXRlICovCisJdTggcGxpbmtfcmV0cmllczsJLyogUmV0cmllcyBpbiBlc3RhYmxpc2htZW50ICovCisJYm9vbCBpZ25vcmVfcGxpbmtfdGltZXI7CisJZW51bSBwbGlua19zdGF0ZSBwbGlua19zdGF0ZTsKKwl1MzIgcGxpbmtfdGltZW91dDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBwbGlua190aW1lcjsKKwlzcGlubG9ja190IHBsaW5rX2xvY2s7CS8qIEZvciBwZWVyX3N0YXRlIHJlYWRzIC8gdXBkYXRlcyBhbmQgb3RoZXIKKwkJCQkgICB1cGRhdGVzIGluIHRoZSBzdHJ1Y3R1cmUuIEVuc3VyZXMgcm9idXN0CisJCQkJICAgdHJhbnNpdGlvbnMgZm9yIHRoZSBwZWVybGluayBGU00gKi8KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3Qgc3RhX2luZm9fZGVidWdmc2RlbnRyaWVzIHsKIAkJc3RydWN0IGRlbnRyeSAqZGlyOwogCQlzdHJ1Y3QgZGVudHJ5ICpmbGFnczsKIAkJc3RydWN0IGRlbnRyeSAqbnVtX3BzX2J1Zl9mcmFtZXM7Ci0JCXN0cnVjdCBkZW50cnkgKmxhc3RfYWNrX3Jzc2k7Ci0JCXN0cnVjdCBkZW50cnkgKmxhc3RfYWNrX21zOwogCQlzdHJ1Y3QgZGVudHJ5ICppbmFjdGl2ZV9tczsKIAkJc3RydWN0IGRlbnRyeSAqbGFzdF9zZXFfY3RybDsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAkJc3RydWN0IGRlbnRyeSAqd21lX3J4X3F1ZXVlOwogCQlzdHJ1Y3QgZGVudHJ5ICp3bWVfdHhfcXVldWU7CiAjZW5kaWYKKwkJc3RydWN0IGRlbnRyeSAqYWdnX3N0YXR1czsKIAl9IGRlYnVnZnM7CiAjZW5kaWYKIH07CiAKK3N0YXRpYyBpbmxpbmUgZW51bSBwbGlua19zdGF0ZSBzdGFfcGxpbmtfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlyZXR1cm4gc3RhLT5wbGlua19zdGF0ZTsKKyNlbmRpZgorCXJldHVybiBQTElOS19MSVNURU47Cit9CisKIAogLyogTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudGx5IHJlZ2lzdGVyZWQgc3RhdGlvbnMgKi8KICNkZWZpbmUgTUFYX1NUQV9DT1VOVCAyMDA3CkBAIC0xODUsMjIgKzMxOCw0NiBAQAogICovCiAjZGVmaW5lIFNUQV9JTkZPX0NMRUFOVVBfSU5URVJWQUwgKDEwICogSFopCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N0YV9pbmZvX2dldChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQlrcmVmX2dldCgmc3RhLT5rcmVmKTsKLX0KKy8qCisgKiBHZXQgYSBTVEEgaW5mbywgbXVzdCBoYXZlIGJlIHVuZGVyIFJDVSByZWFkIGxvY2suCisgKi8KK3N0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYWRkcik7CisvKgorICogR2V0IFNUQSBpbmZvIGJ5IGluZGV4LCBCUk9LRU4hCisgKi8KK3N0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0X2J5X2lkeChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IGlkeCwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qCisgKiBDcmVhdGUgYSBuZXcgU1RBIGluZm8sIGNhbGxlciBvd25zIHJldHVybmVkIHN0cnVjdHVyZQorICogdW50aWwgc3RhX2luZm9faW5zZXJ0KCkuCisgKi8KK3N0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJdTggKmFkZHIsIGdmcF90IGdmcCk7CisvKgorICogSW5zZXJ0IFNUQSBpbmZvIGludG8gaGFzaCB0YWJsZS9saXN0LCByZXR1cm5zIHplcm8gb3IgYQorICogLUVFWElTVCBpZiAoaWYgdGhlIHNhbWUgTUFDIGFkZHJlc3MgaXMgYWxyZWFkeSBwcmVzZW50KS4KKyAqCisgKiBDYWxsaW5nIHRoaXMgd2l0aG91dCBSQ1UgcHJvdGVjdGlvbiBtYWtlcyB0aGUgY2FsbGVyCisgKiByZWxpbnF1aXNoIGl0cyByZWZlcmVuY2UgdG8gQHN0YS4KKyAqLworaW50IHN0YV9pbmZvX2luc2VydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CisvKgorICogVW5saW5rIGEgU1RBIGluZm8gZnJvbSB0aGUgaGFzaCB0YWJsZS9saXN0LgorICogVGhpcyBjYW4gTlVMTCB0aGUgU1RBIHBvaW50ZXIgaWYgc29tZWJvZHkgZWxzZQorICogaGFzIGFscmVhZHkgdW5saW5rZWQgaXQuCisgKi8KK3ZvaWQgc3RhX2luZm9fdW5saW5rKHN0cnVjdCBzdGFfaW5mbyAqKnN0YSk7Cit2b2lkIF9fc3RhX2luZm9fdW5saW5rKHN0cnVjdCBzdGFfaW5mbyAqKnN0YSk7CiAKLXN0cnVjdCBzdGFfaW5mbyAqIHN0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKmFkZHIpOwotaW50IHN0YV9pbmZvX21pbl90eHJhdGVfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKLXZvaWQgc3RhX2luZm9fcHV0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLXN0cnVjdCBzdGFfaW5mbyAqIHN0YV9pbmZvX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYWRkciwgZ2ZwX3QgZ2ZwKTsKLXZvaWQgc3RhX2luZm9fcmVtb3ZlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLXZvaWQgc3RhX2luZm9fZnJlZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Cit2b2lkIHN0YV9pbmZvX2Rlc3Ryb3koc3RydWN0IHN0YV9pbmZvICpzdGEpOwordm9pZCBzdGFfaW5mb19zZXRfdGltX2JpdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Cit2b2lkIHN0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc3RydWN0IHN0YV9pbmZvICpzdGEpOworCiB2b2lkIHN0YV9pbmZvX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogaW50IHN0YV9pbmZvX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgc3RhX2luZm9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci12b2lkIHN0YV9pbmZvX3JlbW92ZV9haWRfcHRyKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLXZvaWQgc3RhX2luZm9fZmx1c2goc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IHN0YV9pbmZvX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBzdGFfaW5mb19mbHVzaF9kZWxheWVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAogI2VuZGlmIC8qIFNUQV9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90a2lwLmMgYi9uZXQvbWFjODAyMTEvdGtpcC5jCmluZGV4IDNhYmUxOTQuLmRkZGJmZDYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90a2lwLmMKKysrIGIvbmV0L21hYzgwMjExL3RraXAuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExX2tleS5oIgorI2luY2x1ZGUgImtleS5oIgogI2luY2x1ZGUgInRraXAuaCIKICNpbmNsdWRlICJ3ZXAuaCIKIApAQCAtMjE0LDYgKzIxNCw1OSBAQAogCQkJICAga2V5LT51LnRraXAuaXYxNiwgcmM0a2V5KTsKIH0KIAordm9pZCBpZWVlODAyMTFfZ2V0X3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIGllZWU4MDIxMV90a2lwX2tleV90eXBlIHR5cGUsCisJCQl1OCAqb3V0a2V5KQoreworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSAoc3RydWN0IGllZWU4MDIxMV9rZXkgKikKKwkJCWNvbnRhaW5lcl9vZihrZXljb25mLCBzdHJ1Y3QgaWVlZTgwMjExX2tleSwgY29uZik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJdTggKmRhdGEgPSAodTggKikgaGRyOworCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJaW50IGhkcl9sZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJdTggKnRhID0gaGRyLT5hZGRyMjsKKwl1MTYgaXYxNjsKKwl1MzIgaXYzMjsKKworCWl2MTYgPSBkYXRhW2hkcl9sZW5dIDw8IDg7CisJaXYxNiArPSBkYXRhW2hkcl9sZW4gKyAyXTsKKwlpdjMyID0gZGF0YVtoZHJfbGVuICsgNF0gKworCQkoZGF0YVtoZHJfbGVuICsgNV0gPj4gOCkgKworCQkoZGF0YVtoZHJfbGVuICsgNl0gPj4gMTYpICsKKwkJKGRhdGFbaGRyX2xlbiArIDddID4+IDI0KTsKKworI2lmZGVmIENPTkZJR19US0lQX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVAgZW5jcnlwdDogaXYxNiA9IDB4JTA0eCwgaXYzMiA9IDB4JTA4eFxuIiwKKwkJCWl2MTYsIGl2MzIpOworCisJaWYgKGl2MzIgIT0ga2V5LT51LnRraXAuaXYzMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAic2tiOiBpdjMyID0gMHglMDh4IGtleTogaXYzMiA9IDB4JTA4eFxuIiwKKwkJCWl2MzIsIGtleS0+dS50a2lwLml2MzIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiV3JhcCBhcm91bmQgb2YgaXYxNiBpbiB0aGUgbWlkZGxlIG9mIGEgIgorCQkJImZyYWdtZW50ZWQgcGFja2V0XG4iKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1RLSVBfREVCVUcgKi8KKworCS8qIFVwZGF0ZSB0aGUgcDFrIG9ubHkgd2hlbiB0aGUgaXYxNiBpbiB0aGUgcGFja2V0IHdyYXBzIGFyb3VuZCwgdGhpcworCSAqIG1pZ2h0IG9jY3VyIGFmdGVyIHRoZSB3cmFwIGFyb3VuZCBvZiBpdjE2IGluIHRoZSBrZXkgaW4gY2FzZSBvZgorCSAqIGZyYWdtZW50ZWQgcGFja2V0cy4gKi8KKwlpZiAoaXYxNiA9PSAwIHx8ICFrZXktPnUudGtpcC50eF9pbml0aWFsaXplZCkgeworCQkvKiBJVjE2IHdyYXBwZWQgYXJvdW5kIC0gcGVyZm9ybSBUS0lQIHBoYXNlIDEgKi8KKwkJdGtpcF9taXhpbmdfcGhhc2UxKHRhLCAma2V5LT5jb25mLmtleVtBTEdfVEtJUF9URU1QX0VOQ1JfS0VZXSwKKwkJCWl2MzIsIGtleS0+dS50a2lwLnAxayk7CisJCWtleS0+dS50a2lwLnR4X2luaXRpYWxpemVkID0gMTsKKwl9CisKKwlpZiAodHlwZSA9PSBJRUVFODAyMTFfVEtJUF9QMV9LRVkpIHsKKwkJbWVtY3B5KG91dGtleSwga2V5LT51LnRraXAucDFrLCBzaXplb2YodTE2KSAqIDUpOworCQlyZXR1cm47CisJfQorCisJdGtpcF9taXhpbmdfcGhhc2UyKGtleS0+dS50a2lwLnAxaywKKwkJJmtleS0+Y29uZi5rZXlbQUxHX1RLSVBfVEVNUF9FTkNSX0tFWV0sCWl2MTYsIG91dGtleSk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfdGtpcF9rZXkpOworCiAvKiBFbmNyeXB0IHBhY2tldCBwYXlsb2FkIHdpdGggVEtJUCB1c2luZyBAa2V5LiBAcG9zIGlzIGEgcG9pbnRlciB0byB0aGUKICAqIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgcGF5bG9hZC4gVGhpcyBwYXlsb2FkIG11c3QgaW5jbHVkZQogICogaGVhZHJvb20gb2YgZWlnaHQgb2N0ZXRzIGZvciBJViBhbmQgRXh0LiBJViBhbmQgdGFpbGRyb29tIG9mIGZvdXIgb2N0ZXRzCkBAIC0yMzgsNyArMjkxLDcgQEAKIGludCBpZWVlODAyMTFfdGtpcF9kZWNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJCXU4ICpwYXlsb2FkLCBzaXplX3QgcGF5bG9hZF9sZW4sIHU4ICp0YSwKLQkJCQlpbnQgb25seV9pdiwgaW50IHF1ZXVlLAorCQkJCXU4ICpyYSwgaW50IG9ubHlfaXYsIGludCBxdWV1ZSwKIAkJCQl1MzIgKm91dF9pdjMyLCB1MTYgKm91dF9pdjE2KQogewogCXUzMiBpdjMyOwpAQCAtMzE1LDYgKzM2OCwxOSBAQAogCQkJcHJpbnRrKCJcbiIpOwogCQl9CiAjZW5kaWYgLyogQ09ORklHX1RLSVBfREVCVUcgKi8KKwkJaWYgKGtleS0+bG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5ICYmCisJCQlrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKKwkJCXU4IGJjYXN0W0VUSF9BTEVOXSA9CisJCQkJezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCQkJdTggKnN0YV9hZGRyID0ga2V5LT5zdGEtPmFkZHI7CisKKwkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihyYSkpCisJCQkJc3RhX2FkZHIgPSBiY2FzdDsKKworCQkJa2V5LT5sb2NhbC0+b3BzLT51cGRhdGVfdGtpcF9rZXkoCisJCQkJbG9jYWxfdG9faHcoa2V5LT5sb2NhbCksICZrZXktPmNvbmYsCisJCQkJc3RhX2FkZHIsIGl2MzIsIGtleS0+dS50a2lwLnAxa19yeFtxdWV1ZV0pOworCQl9CiAJfQogCiAJdGtpcF9taXhpbmdfcGhhc2UyKGtleS0+dS50a2lwLnAxa19yeFtxdWV1ZV0sCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGtpcC5oIGIvbmV0L21hYzgwMjExL3RraXAuaAppbmRleCA3M2Q4ZWYyLi5iN2MyZWU3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdGtpcC5oCisrKyBiL25ldC9tYWM4MDIxMS90a2lwLmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExX2tleS5oIgorI2luY2x1ZGUgImtleS5oIgogCiB1OCAqIGllZWU4MDIxMV90a2lwX2FkZF9pdih1OCAqcG9zLCBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LAogCQkJICAgdTggaXYwLCB1OCBpdjEsIHU4IGl2Mik7CkBAIC0zMSw3ICszMSw3IEBACiBpbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCiAJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQl1OCAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfbGVuLCB1OCAqdGEsCi0JCQkJaW50IG9ubHlfaXYsIGludCBxdWV1ZSwKKwkJCQl1OCAqcmEsIGludCBvbmx5X2l2LCBpbnQgcXVldWUsCiAJCQkJdTMyICpvdXRfaXYzMiwgdTE2ICpvdXRfaXYxNik7CiAKICNlbmRpZiAvKiBUS0lQX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggNjdiNTA5ZS4uZjM1ZWFlYTkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0yNSwxMSArMjUsMTIgQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgotI2luY2x1ZGUgImllZWU4MDIxMV9sZWQuaCIKKyNpbmNsdWRlICJsZWQuaCIKKyNpbmNsdWRlICJtZXNoLmgiCiAjaW5jbHVkZSAid2VwLmgiCiAjaW5jbHVkZSAid3BhLmgiCiAjaW5jbHVkZSAid21lLmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExX3JhdGUuaCIKKyNpbmNsdWRlICJyYXRlLmgiCiAKICNkZWZpbmUgSUVFRTgwMjExX1RYX09LCQkwCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9BR0FJTgkxCkBAIC04NiwxNSArODcsMTkgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTE9XVFhfRlJBTUVfRFVNUCAqLwogCi1zdGF0aWMgdTE2IGllZWU4MDIxMV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgsIGludCBncm91cF9hZGRyLAorc3RhdGljIHUxNiBpZWVlODAyMTFfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwgaW50IGdyb3VwX2FkZHIsCiAJCQkgICAgICBpbnQgbmV4dF9mcmFnX2xlbikKIHsKIAlpbnQgcmF0ZSwgbXJhdGUsIGVycCwgZHVyLCBpOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqdHhyYXRlID0gdHgtPnUudHgucmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnR4cmF0ZSA9IHR4LT5yYXRlOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gdHgtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSA9IHR4LT51LnR4Lm1vZGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAKLQllcnAgPSB0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWVycCA9IDA7CisJaWYgKHR4LT5zZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFKQorCQllcnAgPSB0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0c7CiAKIAkvKgogCSAqIGRhdGEgYW5kIG1nbXQgKGV4Y2VwdCBQUyBQb2xsKToKQEAgLTE1MCwyMCArMTU1LDM2IEBACiAJICogTWFuZGF0b3J5IHJhdGVzIGZvciBJRUVFIDgwMi4xMWcgUEhZOiAxLCAyLCA1LjUsIDExLCA2LCAxMiwgMjQgTWJwcwogCSAqLwogCXJhdGUgPSAtMTsKLQltcmF0ZSA9IDEwOyAvKiB1c2UgMSBNYnBzIGlmIGV2ZXJ5dGhpbmcgZmFpbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbW9kZS0+bnVtX3JhdGVzOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyID0gJm1vZGUtPnJhdGVzW2ldOwotCQlpZiAoci0+cmF0ZSA+IHR4cmF0ZS0+cmF0ZSkKKwkvKiB1c2UgbG93ZXN0IGF2YWlsYWJsZSBpZiBldmVyeXRoaW5nIGZhaWxzICovCisJbXJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbMF0uYml0cmF0ZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCisJCWlmIChyLT5iaXRyYXRlID4gdHhyYXRlLT5iaXRyYXRlKQogCQkJYnJlYWs7CiAKLQkJaWYgKElFRUU4MDIxMV9SQVRFX01PRFVMQVRJT04odHhyYXRlLT5mbGFncykgIT0KLQkJICAgIElFRUU4MDIxMV9SQVRFX01PRFVMQVRJT04oci0+ZmxhZ3MpKQotCQkJY29udGludWU7CisJCWlmICh0eC0+c2RhdGEtPmJhc2ljX3JhdGVzICYgQklUKGkpKQorCQkJcmF0ZSA9IHItPmJpdHJhdGU7CiAKLQkJaWYgKHItPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfQkFTSUMpCi0JCQlyYXRlID0gci0+cmF0ZTsKLQkJZWxzZSBpZiAoci0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9NQU5EQVRPUlkpCi0JCQltcmF0ZSA9IHItPnJhdGU7CisJCXN3aXRjaCAoc2JhbmQtPmJhbmQpIHsKKwkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOiB7CisJCQl1MzIgZmxhZzsKKwkJCWlmICh0eC0+c2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERSkKKwkJCQlmbGFnID0gSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZX0c7CisJCQllbHNlCisJCQkJZmxhZyA9IElFRUU4MDIxMV9SQVRFX01BTkRBVE9SWV9COworCQkJaWYgKHItPmZsYWdzICYgZmxhZykKKwkJCQltcmF0ZSA9IHItPmJpdHJhdGU7CisJCQlicmVhazsKKwkJfQorCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCQlpZiAoci0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9NQU5EQVRPUllfQSkKKwkJCQltcmF0ZSA9IHItPmJpdHJhdGU7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfTlVNX0JBTkRTOgorCQkJV0FSTl9PTigxKTsKKwkJCWJyZWFrOworCQl9CiAJfQogCWlmIChyYXRlID09IC0xKSB7CiAJCS8qIE5vIG1hdGNoaW5nIGJhc2ljIHJhdGUgZm91bmQ7IHVzZSBoaWdoZXN0IHN1aXRhYmxlIG1hbmRhdG9yeQpAQCAtMTg0LDcgKzIwNSw3IEBACiAJCWR1ciAqPSAyOyAvKiBBQ0sgKyBTSUZTICovCiAJCS8qIG5leHQgZnJhZ21lbnQgKi8KIAkJZHVyICs9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgbmV4dF9mcmFnX2xlbiwKLQkJCQl0eHJhdGUtPnJhdGUsIGVycCwKKwkJCQl0eHJhdGUtPmJpdHJhdGUsIGVycCwKIAkJCQl0eC0+c2RhdGEtPmJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJfQogCkBAIC0yMTIsOCArMjMzLDggQEAKIAogLyogdHggaGFuZGxlcnMgKi8KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4KQorc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKQEAgLTIyMSwyMCArMjQyLDIzIEBACiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KIAl1MzIgc3RhX2ZsYWdzOwogCi0JaWYgKHVubGlrZWx5KHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9UWF9JTkpFQ1RFRCkpCi0JCXJldHVybiBUWFJYX0NPTlRJTlVFOworCWlmICh1bmxpa2VseSh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5KRUNURUQpKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAKIAlpZiAodW5saWtlbHkodHgtPmxvY2FsLT5zdGFfc3dfc2Nhbm5pbmcpICYmCiAJICAgICgodHgtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9NR01UIHx8CiAJICAgICAodHgtPmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpICE9IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpKQotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gVFhfRFJPUDsKIAotCWlmICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhSWERfVFhQU19CVUZGRVJFRCkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJaWYgKHR4LT5zZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVCkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCisJaWYgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9QU19CVUZGRVJFRCkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCiAJc3RhX2ZsYWdzID0gdHgtPnN0YSA/IHR4LT5zdGEtPmZsYWdzIDogMDsKIAotCWlmIChsaWtlbHkodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1RYVU5JQ0FTVCkpIHsKKwlpZiAobGlrZWx5KHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9VTklDQVNUKSkgewogCQlpZiAodW5saWtlbHkoIShzdGFfZmxhZ3MgJiBXTEFOX1NUQV9BU1NPQykgJiYKIAkJCSAgICAgdHgtPnNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmCiAJCQkgICAgICh0eC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpKSB7CkBAIC0yNDUsNyArMjY5LDcgQEAKIAkJCSAgICAgICB0eC0+ZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBoZHItPmFkZHIxKSk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KIAkJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF9ub3RfYXNzb2MpOwotCQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJCXJldHVybiBUWF9EUk9QOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHVubGlrZWx5KCh0eC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKQEAgLTI1NSwyMyArMjc5LDIzIEBACiAJCQkgKiBObyBhc3NvY2lhdGVkIFNUQXMgLSBubyBuZWVkIHRvIHNlbmQgbXVsdGljYXN0CiAJCQkgKiBmcmFtZXMuCiAJCQkgKi8KLQkJCXJldHVybiBUWFJYX0RST1A7CisJCQlyZXR1cm4gVFhfRFJPUDsKIAkJfQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCX0KIAotCXJldHVybiBUWFJYX0NPTlRJTlVFOworCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3R4X2hfc2VxdWVuY2Uoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4KQorc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV90eF9oX3NlcXVlbmNlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7CiAKIAlpZiAoaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkgPj0gMjQpCiAJCWllZWU4MDIxMV9pbmNsdWRlX3NlcXVlbmNlKHR4LT5zZGF0YSwgaGRyKTsKIAotCXJldHVybiBUWFJYX0NPTlRJTlVFOworCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIEFQIGlzIGFib3V0IHRvIGV4Y2VlZCB0aGUgbWF4aW11bSBsaW1pdApAQCAtMzAzLDEwICszMjcsOCBAQAogCQl9CiAJCXRvdGFsICs9IHNrYl9xdWV1ZV9sZW4oJmFwLT5wc19iY19idWYpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJlYWRfbG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewogCQlza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT5wc190eF9idWYpOwogCQlpZiAoc2tiKSB7CiAJCQlwdXJnZWQrKzsKQEAgLTMxNCwxNSArMzM2LDE2IEBACiAJCX0KIAkJdG90YWwgKz0gc2tiX3F1ZXVlX2xlbigmc3RhLT5wc190eF9idWYpOwogCX0KLQlyZWFkX3VubG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKKworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkID0gdG90YWw7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQUyBidWZmZXJzIGZ1bGwgLSBwdXJnZWQgJWQgZnJhbWVzXG4iLAogCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHB1cmdlZCk7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV90eF9oX211bHRpY2FzdF9wc19idWYoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4KQorc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV90eF9oX211bHRpY2FzdF9wc19idWYoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAkvKgogCSAqIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWUKQEAgLTMzNCwxMSArMzU3LDExIEBACiAKIAkvKiBub3QgQVAvSUJTUyBvciBvcmRlcmVkIGZyYW1lICovCiAJaWYgKCF0eC0+c2RhdGEtPmJzcyB8fCAodHgtPmZjICYgSUVFRTgwMjExX0ZDVExfT1JERVIpKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCiAJLyogbm8gc3RhdGlvbnMgaW4gUFMgbW9kZSAqLwogCWlmICghYXRvbWljX3JlYWQoJnR4LT5zZGF0YS0+YnNzLT5udW1fc3RhX3BzKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJCXJldHVybiBUWF9DT05USU5VRTsKIAogCS8qIGJ1ZmZlcmVkIGluIG1hYzgwMjExICovCiAJaWYgKHR4LT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HKSB7CkBAIC0zNTUsMTcgKzM3OCwxNyBAQAogCQl9IGVsc2UKIAkJCXR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQrKzsKIAkJc2tiX3F1ZXVlX3RhaWwoJnR4LT5zZGF0YS0+YnNzLT5wc19iY19idWYsIHR4LT5za2IpOwotCQlyZXR1cm4gVFhSWF9RVUVVRUQ7CisJCXJldHVybiBUWF9RVUVVRUQ7CiAJfQogCiAJLyogYnVmZmVyZWQgaW4gaGFyZHdhcmUgKi8KLQl0eC0+dS50eC5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0VORF9BRlRFUl9EVElNOworCXR4LT5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0VORF9BRlRFUl9EVElNOwogCi0JcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQogCi1zdGF0aWMgaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfdHhfaF91bmljYXN0X3BzX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfdW5pY2FzdF9wc19idWYoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHR4LT5zdGE7CiAJREVDTEFSRV9NQUNfQlVGKG1hYyk7CkBAIC0zNzMsOSArMzk2LDEwIEBACiAJaWYgKHVubGlrZWx5KCFzdGEgfHwKIAkJICAgICAoKHR4LT5mYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJgogCQkgICAgICAodHgtPmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKSkpCi0JCXJldHVybiBUWFJYX0NPTlRJTlVFOworCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAKLQlpZiAodW5saWtlbHkoKHN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9QUykgJiYgIXN0YS0+cHNwb2xsKSkgeworCWlmICh1bmxpa2VseSgoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTKSAmJgorCQkgICAgICEoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTUE9MTCkpKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKnBrdF9kYXRhOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJTVEEgJXMgYWlkICVkOiBQUyBidWZmZXIgKGVudHJpZXMgIgpAQCAtMzgzLDcgKzQwNyw2IEBACiAJCSAgICAgICBwcmludF9tYWMobWFjLCBzdGEtPmFkZHIpLCBzdGEtPmFpZCwKIAkJICAgICAgIHNrYl9xdWV1ZV9sZW4oJnN0YS0+cHNfdHhfYnVmKSk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KLQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9USU07CiAJCWlmICh0eC0+bG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkID49IFRPVEFMX01BWF9UWF9CVUZGRVIpCiAJCQlwdXJnZV9vbGRfcHNfYnVmZmVycyh0eC0+bG9jYWwpOwogCQlpZiAoc2tiX3F1ZXVlX2xlbigmc3RhLT5wc190eF9idWYpID49IFNUQV9NQVhfVFhfQlVGRkVSKSB7CkBAIC0zOTYsMTggKzQxOSwxNSBAQAogCQkJZGV2X2tmcmVlX3NrYihvbGQpOwogCQl9IGVsc2UKIAkJCXR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQrKzsKKwogCQkvKiBRdWV1ZSBmcmFtZSB0byBiZSBzZW50IGFmdGVyIFNUQSBzZW5kcyBhbiBQUyBQb2xsIGZyYW1lICovCi0JCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSkgewotCQkJaWYgKHR4LT5sb2NhbC0+b3BzLT5zZXRfdGltKQotCQkJCXR4LT5sb2NhbC0+b3BzLT5zZXRfdGltKGxvY2FsX3RvX2h3KHR4LT5sb2NhbCksCi0JCQkJCQkgICAgICAgc3RhLT5haWQsIDEpOwotCQkJaWYgKHR4LT5zZGF0YS0+YnNzKQotCQkJCWJzc190aW1fc2V0KHR4LT5sb2NhbCwgdHgtPnNkYXRhLT5ic3MsIHN0YS0+YWlkKTsKLQkJfQorCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCisJCQlzdGFfaW5mb19zZXRfdGltX2JpdChzdGEpOworCiAJCXBrdF9kYXRhID0gKHN0cnVjdCBpZWVlODAyMTFfdHhfcGFja2V0X2RhdGEgKil0eC0+c2tiLT5jYjsKIAkJcGt0X2RhdGEtPmppZmZpZXMgPSBqaWZmaWVzOwogCQlza2JfcXVldWVfdGFpbCgmc3RhLT5wc190eF9idWYsIHR4LT5za2IpOwotCQlyZXR1cm4gVFhSWF9RVUVVRUQ7CisJCXJldHVybiBUWF9RVUVVRUQ7CiAJfQogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJZWxzZSBpZiAodW5saWtlbHkoc3RhLT5mbGFncyAmIFdMQU5fU1RBX1BTKSkgewpAQCAtNDE2LDQwICs0MzYsNDAgQEAKIAkJICAgICAgIHByaW50X21hYyhtYWMsIHN0YS0+YWRkcikpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwotCXN0YS0+cHNwb2xsID0gMDsKKwlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9QU1BPTEw7CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV90eF9oX3BzX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfcHNfYnVmKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0JaWYgKHVubGlrZWx5KHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9UWFBTX0JVRkZFUkVEKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJaWYgKHVubGlrZWx5KHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9QU19CVUZGRVJFRCkpCisJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhSWERfVFhVTklDQVNUKQorCWlmICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfVU5JQ0FTVCkKIAkJcmV0dXJuIGllZWU4MDIxMV90eF9oX3VuaWNhc3RfcHNfYnVmKHR4KTsKIAllbHNlCiAJCXJldHVybiBpZWVlODAyMTFfdHhfaF9tdWx0aWNhc3RfcHNfYnVmKHR4KTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3R4X2hfc2VsZWN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfc2VsZWN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CiAJdTE2IGZjID0gdHgtPmZjOwogCi0JaWYgKHVubGlrZWx5KHR4LT51LnR4LmNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUKSkKKwlpZiAodW5saWtlbHkodHgtPmNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX0RPX05PVF9FTkNSWVBUKSkKIAkJdHgtPmtleSA9IE5VTEw7CiAJZWxzZSBpZiAodHgtPnN0YSAmJiAoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zdGEtPmtleSkpKQogCQl0eC0+a2V5ID0ga2V5OwogCWVsc2UgaWYgKChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnNkYXRhLT5kZWZhdWx0X2tleSkpKQogCQl0eC0+a2V5ID0ga2V5OwogCWVsc2UgaWYgKHR4LT5zZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCAmJgotCQkgISh0eC0+dS50eC5jb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9FQVBPTF9GUkFNRSkgJiYKLQkJICEodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1RYX0lOSkVDVEVEKSkgeworCQkgISh0eC0+Y29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfRUFQT0xfRlJBTUUpICYmCisJCSAhKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTkpFQ1RFRCkpIHsKIAkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9oYW5kbGVyc19kcm9wX3VuZW5jcnlwdGVkKTsKLQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJcmV0dXJuIFRYX0RST1A7CiAJfSBlbHNlCiAJCXR4LT5rZXkgPSBOVUxMOwogCkBAIC00NzYsMTMgKzQ5NiwxMyBAQAogCX0KIAogCWlmICghdHgtPmtleSB8fCAhKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKQotCQl0eC0+dS50eC5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQ7CisJCXR4LT5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQ7CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV90eF9oX2ZyYWdtZW50KHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICp0eCkKK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CitpZWVlODAyMTFfdHhfaF9mcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgdHgtPnNrYi0+ZGF0YTsKIAlzaXplX3QgaGRybGVuLCBwZXJfZnJhZ20sIG51bV9mcmFnbSwgcGF5bG9hZF9sZW4sIGxlZnQ7CkBAIC00OTIsOCArNTEyLDggQEAKIAl1OCAqcG9zOwogCWludCBmcmFnX3RocmVzaG9sZCA9IHR4LT5sb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQ7CiAKLQlpZiAoISh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhSWERfRlJBR01FTlRFRCkpCi0JCXJldHVybiBUWFJYX0NPTlRJTlVFOworCWlmICghKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCiAJZmlyc3QgPSB0eC0+c2tiOwogCkBAIC01NDQsMTAgKzU2NCwxMCBAQAogCX0KIAlza2JfdHJpbShmaXJzdCwgaGRybGVuICsgcGVyX2ZyYWdtKTsKIAotCXR4LT51LnR4Lm51bV9leHRyYV9mcmFnID0gbnVtX2ZyYWdtIC0gMTsKLQl0eC0+dS50eC5leHRyYV9mcmFnID0gZnJhZ3M7CisJdHgtPm51bV9leHRyYV9mcmFnID0gbnVtX2ZyYWdtIC0gMTsKKwl0eC0+ZXh0cmFfZnJhZyA9IGZyYWdzOwogCi0JcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJcmV0dXJuIFRYX0NPTlRJTlVFOwogCiAgZmFpbDoKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBmcmFnbWVudCBmcmFtZVxuIiwgdHgtPmRldi0+bmFtZSk7CkBAIC01NTgsMTQgKzU3OCwxNCBAQAogCQlrZnJlZShmcmFncyk7CiAJfQogCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF9mcmFnbWVudCk7Ci0JcmV0dXJuIFRYUlhfRFJPUDsKKwlyZXR1cm4gVFhfRFJPUDsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3R4X2hfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCWlmICghdHgtPmtleSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJCXJldHVybiBUWF9DT05USU5VRTsKIAogCXN3aXRjaCAodHgtPmtleS0+Y29uZi5hbGcpIHsKIAljYXNlIEFMR19XRVA6CkBAIC01NzgsNTkgKzU5OCw2MCBAQAogCiAJLyogbm90IHJlYWNoZWQgKi8KIAlXQVJOX09OKDEpOwotCXJldHVybiBUWFJYX0RST1A7CisJcmV0dXJuIFRYX0RST1A7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV90eF9oX3JhdGVfY3RybChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IHJhdGVfc2VsZWN0aW9uIHJzZWw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAKLQlpZiAobGlrZWx5KCF0eC0+dS50eC5yYXRlKSkgewotCQlyYXRlX2NvbnRyb2xfZ2V0X3JhdGUodHgtPmRldiwgdHgtPnUudHgubW9kZSwgdHgtPnNrYiwgJnJzZWwpOwotCQl0eC0+dS50eC5yYXRlID0gcnNlbC5yYXRlOwotCQlpZiAodW5saWtlbHkocnNlbC5wcm9iZSAhPSBOVUxMKSkgewotCQkJdHgtPnUudHguY29udHJvbC0+ZmxhZ3MgfD0KKwlzYmFuZCA9IHR4LT5sb2NhbC0+aHcud2lwaHktPmJhbmRzW3R4LT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWlmIChsaWtlbHkoIXR4LT5yYXRlKSkgeworCQlyYXRlX2NvbnRyb2xfZ2V0X3JhdGUodHgtPmRldiwgc2JhbmQsIHR4LT5za2IsICZyc2VsKTsKKwkJdHgtPnJhdGUgPSByc2VsLnJhdGU7CisJCWlmICh1bmxpa2VseShyc2VsLnByb2JlKSkgeworCQkJdHgtPmNvbnRyb2wtPmZsYWdzIHw9CiAJCQkJSUVFRTgwMjExX1RYQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKLQkJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhSWERfVFhQUk9CRV9MQVNUX0ZSQUc7Ci0JCQl0eC0+dS50eC5jb250cm9sLT5hbHRfcmV0cnlfcmF0ZSA9IHR4LT51LnR4LnJhdGUtPnZhbDsKLQkJCXR4LT51LnR4LnJhdGUgPSByc2VsLnByb2JlOworCQkJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9QUk9CRV9MQVNUX0ZSQUc7CisJCQl0eC0+Y29udHJvbC0+YWx0X3JldHJ5X3JhdGUgPSB0eC0+cmF0ZTsKKwkJCXR4LT5yYXRlID0gcnNlbC5wcm9iZTsKIAkJfSBlbHNlCi0JCQl0eC0+dS50eC5jb250cm9sLT5hbHRfcmV0cnlfcmF0ZSA9IC0xOworCQkJdHgtPmNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlID0gTlVMTDsKIAotCQlpZiAoIXR4LT51LnR4LnJhdGUpCi0JCQlyZXR1cm4gVFhSWF9EUk9QOworCQlpZiAoIXR4LT5yYXRlKQorCQkJcmV0dXJuIFRYX0RST1A7CiAJfSBlbHNlCi0JCXR4LT51LnR4LmNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlID0gLTE7CisJCXR4LT5jb250cm9sLT5hbHRfcmV0cnlfcmF0ZSA9IE5VTEw7CiAKLQlpZiAodHgtPnUudHgubW9kZS0+bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUcgJiYKLQkgICAgdHgtPnNkYXRhLT5ic3NfY29uZi51c2VfY3RzX3Byb3QgJiYKLQkgICAgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9GUkFHTUVOVEVEKSAmJiByc2VsLm5vbmVycCkgewotCQl0eC0+dS50eC5sYXN0X2ZyYWdfcmF0ZSA9IHR4LT51LnR4LnJhdGU7CisJaWYgKHR4LT5zZGF0YS0+YnNzX2NvbmYudXNlX2N0c19wcm90ICYmCisJICAgICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfRlJBR01FTlRFRCkgJiYgcnNlbC5ub25lcnApIHsKKwkJdHgtPmxhc3RfZnJhZ19yYXRlID0gdHgtPnJhdGU7CiAJCWlmIChyc2VsLnByb2JlKQotCQkJdHgtPmZsYWdzICY9IH5JRUVFODAyMTFfVFhSWERfVFhQUk9CRV9MQVNUX0ZSQUc7CisJCQl0eC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9QUk9CRV9MQVNUX0ZSQUc7CiAJCWVsc2UKLQkJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhSWERfVFhQUk9CRV9MQVNUX0ZSQUc7Ci0JCXR4LT51LnR4LnJhdGUgPSByc2VsLm5vbmVycDsKLQkJdHgtPnUudHguY29udHJvbC0+cmF0ZSA9IHJzZWwubm9uZXJwOwotCQl0eC0+dS50eC5jb250cm9sLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKKwkJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUFJPQkVfTEFTVF9GUkFHOworCQl0eC0+cmF0ZSA9IHJzZWwubm9uZXJwOworCQl0eC0+Y29udHJvbC0+dHhfcmF0ZSA9IHJzZWwubm9uZXJwOworCQl0eC0+Y29udHJvbC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWENUTF9SQVRFX0NUUkxfUFJPQkU7CiAJfSBlbHNlIHsKLQkJdHgtPnUudHgubGFzdF9mcmFnX3JhdGUgPSB0eC0+dS50eC5yYXRlOwotCQl0eC0+dS50eC5jb250cm9sLT5yYXRlID0gdHgtPnUudHgucmF0ZTsKKwkJdHgtPmxhc3RfZnJhZ19yYXRlID0gdHgtPnJhdGU7CisJCXR4LT5jb250cm9sLT50eF9yYXRlID0gdHgtPnJhdGU7CiAJfQotCXR4LT51LnR4LmNvbnRyb2wtPnR4X3JhdGUgPSB0eC0+dS50eC5yYXRlLT52YWw7CisJdHgtPmNvbnRyb2wtPnR4X3JhdGUgPSB0eC0+cmF0ZTsKIAotCXJldHVybiBUWFJYX0NPTlRJTlVFOworCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3R4X2hfbWlzYyhzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfbWlzYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgdHgtPnNrYi0+ZGF0YTsKIAl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXUxNiBkdXI7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sID0gdHgtPnUudHguY29udHJvbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUgPSB0eC0+dS50eC5tb2RlOworCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCA9IHR4LT5jb250cm9sOwogCiAJaWYgKCFjb250cm9sLT5yZXRyeV9saW1pdCkgewogCQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CkBAIC02NTIsMjAgKzY3MywyMCBAQAogCQl9CiAJfQogCi0JaWYgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9GUkFHTUVOVEVEKSB7CisJaWYgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSB7CiAJCS8qIERvIG5vdCB1c2UgbXVsdGlwbGUgcmV0cnkgcmF0ZXMgd2hlbiBzZW5kaW5nIGZyYWdtZW50ZWQKIAkJICogZnJhbWVzLgogCQkgKiBUT0RPOiBUaGUgbGFzdCBmcmFnbWVudCBjb3VsZCBzdGlsbCB1c2UgbXVsdGlwbGUgcmV0cnkKIAkJICogcmF0ZXMuICovCi0JCWNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlID0gLTE7CisJCWNvbnRyb2wtPmFsdF9yZXRyeV9yYXRlID0gTlVMTDsKIAl9CiAKIAkvKiBVc2UgQ1RTIHByb3RlY3Rpb24gZm9yIHVuaWNhc3QgZnJhbWVzIHNlbnQgdXNpbmcgZXh0ZW5kZWQgcmF0ZXMgaWYKIAkgKiB0aGVyZSBhcmUgYXNzb2NpYXRlZCBub24tRVJQIHN0YXRpb25zIGFuZCBSVFMvQ1RTIGlzIG5vdCBjb25maWd1cmVkCiAJICogZm9yIHRoZSBmcmFtZS4gKi8KLQlpZiAobW9kZS0+bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUcgJiYKLQkgICAgKHR4LT51LnR4LnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQKSAmJgotCSAgICAodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1RYVU5JQ0FTVCkgJiYKKwlpZiAoKHR4LT5zZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFKSAmJgorCSAgICAodHgtPnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0cpICYmCisJICAgICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfVU5JQ0FTVCkgJiYKIAkgICAgdHgtPnNkYXRhLT5ic3NfY29uZi51c2VfY3RzX3Byb3QgJiYKIAkgICAgIShjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykpCiAJCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9VU0VfQ1RTX1BST1RFQ1Q7CkBAIC02NzQsNjIgKzY5NSw3NyBAQAogCSAqIHNob3J0IHByZWFtYmxlcyBhdCB0aGUgc2VsZWN0ZWQgcmF0ZSBhbmQgc2hvcnQgcHJlYW1ibGVzIGFyZQogCSAqIGF2YWlsYWJsZSBvbiB0aGUgbmV0d29yayBhdCB0aGUgY3VycmVudCBwb2ludCBpbiB0aW1lLiAqLwogCWlmICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSAmJgotCSAgICAodHgtPnUudHgucmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9QUkVBTUJMRTIpICYmCisJICAgICh0eC0+cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSkgJiYKIAkgICAgdHgtPnNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUgJiYKIAkgICAgKCF0eC0+c3RhIHx8ICh0eC0+c3RhLT5mbGFncyAmIFdMQU5fU1RBX1NIT1JUX1BSRUFNQkxFKSkpIHsKLQkJdHgtPnUudHguY29udHJvbC0+dHhfcmF0ZSA9IHR4LT51LnR4LnJhdGUtPnZhbDI7CisJCXR4LT5jb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEU7CiAJfQogCiAJLyogU2V0dXAgZHVyYXRpb24gZmllbGQgZm9yIHRoZSBmaXJzdCBmcmFnbWVudCBvZiB0aGUgZnJhbWUuIER1cmF0aW9uCiAJICogZm9yIHJlbWFpbmluZyBmcmFnbWVudHMgd2lsbCBiZSB1cGRhdGVkIHdoZW4gdGhleSBhcmUgYmVpbmcgc2VudAogCSAqIHRvIGxvdy1sZXZlbCBkcml2ZXIgaW4gaWVlZTgwMjExX3R4KCkuICovCiAJZHVyID0gaWVlZTgwMjExX2R1cmF0aW9uKHR4LCBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSwKLQkJCQkgKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWFJYRF9GUkFHTUVOVEVEKSA/Ci0JCQkJIHR4LT51LnR4LmV4dHJhX2ZyYWdbMF0tPmxlbiA6IDApOworCQkJCSAodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQpID8KKwkJCQkgdHgtPmV4dHJhX2ZyYWdbMF0tPmxlbiA6IDApOwogCWhkci0+ZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNihkdXIpOwogCiAJaWYgKChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykgfHwKIAkgICAgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlLCAqYmFzZXJhdGU7CisJCWludCBpZHg7CisKKwkJc2JhbmQgPSB0eC0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1sKKwkJCQl0eC0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CiAKIAkJLyogRG8gbm90IHVzZSBtdWx0aXBsZSByZXRyeSByYXRlcyB3aGVuIHVzaW5nIFJUUy9DVFMgKi8KLQkJY29udHJvbC0+YWx0X3JldHJ5X3JhdGUgPSAtMTsKKwkJY29udHJvbC0+YWx0X3JldHJ5X3JhdGUgPSBOVUxMOwogCiAJCS8qIFVzZSBtaW4oZGF0YSByYXRlLCBtYXggYmFzZSByYXRlKSBhcyBDVFMvUlRTIHJhdGUgKi8KLQkJcmF0ZSA9IHR4LT51LnR4LnJhdGU7Ci0JCXdoaWxlIChyYXRlID4gbW9kZS0+cmF0ZXMgJiYKLQkJICAgICAgICEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9CQVNJQykpCi0JCQlyYXRlLS07CisJCXJhdGUgPSB0eC0+cmF0ZTsKKwkJYmFzZXJhdGUgPSBOVUxMOwogCi0JCWNvbnRyb2wtPnJ0c19jdHNfcmF0ZSA9IHJhdGUtPnZhbDsKLQkJY29udHJvbC0+cnRzX3JhdGUgPSByYXRlOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpZHgrKykgeworCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tpZHhdLmJpdHJhdGUgPiByYXRlLT5iaXRyYXRlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHR4LT5zZGF0YS0+YmFzaWNfcmF0ZXMgJiBCSVQoaWR4KSAmJgorCQkJICAgICghYmFzZXJhdGUgfHwKKwkJCSAgICAgKGJhc2VyYXRlLT5iaXRyYXRlIDwgc2JhbmQtPmJpdHJhdGVzW2lkeF0uYml0cmF0ZSkpKQorCQkJCWJhc2VyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpZHhdOworCQl9CisKKwkJaWYgKGJhc2VyYXRlKQorCQkJY29udHJvbC0+cnRzX2N0c19yYXRlID0gYmFzZXJhdGU7CisJCWVsc2UKKwkJCWNvbnRyb2wtPnJ0c19jdHNfcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbMF07CiAJfQogCiAJaWYgKHR4LT5zdGEpIHsKKwkJY29udHJvbC0+YWlkID0gdHgtPnN0YS0+YWlkOwogCQl0eC0+c3RhLT50eF9wYWNrZXRzKys7CiAJCXR4LT5zdGEtPnR4X2ZyYWdtZW50cysrOwogCQl0eC0+c3RhLT50eF9ieXRlcyArPSB0eC0+c2tiLT5sZW47Ci0JCWlmICh0eC0+dS50eC5leHRyYV9mcmFnKSB7CisJCWlmICh0eC0+ZXh0cmFfZnJhZykgewogCQkJaW50IGk7Ci0JCQl0eC0+c3RhLT50eF9mcmFnbWVudHMgKz0gdHgtPnUudHgubnVtX2V4dHJhX2ZyYWc7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdHgtPnUudHgubnVtX2V4dHJhX2ZyYWc7IGkrKykgeworCQkJdHgtPnN0YS0+dHhfZnJhZ21lbnRzICs9IHR4LT5udW1fZXh0cmFfZnJhZzsKKwkJCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewogCQkJCXR4LT5zdGEtPnR4X2J5dGVzICs9Ci0JCQkJCXR4LT51LnR4LmV4dHJhX2ZyYWdbaV0tPmxlbjsKKwkJCQkJdHgtPmV4dHJhX2ZyYWdbaV0tPmxlbjsKIAkJCX0KIAkJfQogCX0KIAotCXJldHVybiBUWFJYX0NPTlRJTlVFOworCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX3R4X2hfbG9hZF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfbG9hZF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gdHgtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZSA9IHR4LT51LnR4Lm1vZGU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJdTMyIGxvYWQgPSAwLCBoZHJ0aW1lOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9IHR4LT5yYXRlOwogCiAJLyogVE9ETzogdGhpcyBjb3VsZCBiZSBwYXJ0IG9mIHR4X3N0YXR1cyBoYW5kbGluZywgc28gdGhhdCB0aGUgbnVtYmVyCiAJICogb2YgcmV0cmllcyB3b3VsZCBiZSBrbm93bjsgVFggcmF0ZSBzaG91bGQgaW4gdGhhdCBjYXNlIGJlIHN0b3JlZApAQCAtNzQwLDkgKzc3Niw5IEBACiAJLyogMSBiaXQgYXQgMSBNYml0L3MgdGFrZXMgMSB1c2VjOyBpbiBjaGFubmVsX3VzZSB2YWx1ZXMsCiAJICogMSB1c2VjID0gMS84ICogKDEwODAgLyAxMCkgPSAxMy41ICovCiAKLQlpZiAobW9kZS0+bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEgfHwKLQkgICAgKG1vZGUtPm1vZGUgPT0gTU9ERV9JRUVFODAyMTFHICYmCi0JICAgICB0eC0+dS50eC5yYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUCkpCisJaWYgKHR4LT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFogfHwKKwkgICAgKHR4LT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgIHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0cpKQogCQloZHJ0aW1lID0gQ0hBTl9VVElMX0hEUl9TSE9SVDsKIAllbHNlCiAJCWhkcnRpbWUgPSBDSEFOX1VUSUxfSERSX0xPTkc7CkBAIC03NTEsMTkgKzc4NywyMCBAQAogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCiAJCWxvYWQgKz0gaGRydGltZTsKIAotCWlmICh0eC0+dS50eC5jb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykKKwlpZiAodHgtPmNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTKQogCQlsb2FkICs9IDIgKiBoZHJ0aW1lOwotCWVsc2UgaWYgKHR4LT51LnR4LmNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKKwllbHNlIGlmICh0eC0+Y29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhDVExfVVNFX0NUU19QUk9URUNUKQogCQlsb2FkICs9IGhkcnRpbWU7CiAKLQlsb2FkICs9IHNrYi0+bGVuICogdHgtPnUudHgucmF0ZS0+cmF0ZV9pbnY7CisJLyogVE9ETzogb3B0aW1pc2UgYWdhaW4gKi8KKwlsb2FkICs9IHNrYi0+bGVuICogQ0hBTl9VVElMX1JBVEVfTENNIC8gcmF0ZS0+Yml0cmF0ZTsKIAotCWlmICh0eC0+dS50eC5leHRyYV9mcmFnKSB7CisJaWYgKHR4LT5leHRyYV9mcmFnKSB7CiAJCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPnUudHgubnVtX2V4dHJhX2ZyYWc7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKIAkJCWxvYWQgKz0gMiAqIGhkcnRpbWU7Ci0JCQlsb2FkICs9IHR4LT51LnR4LmV4dHJhX2ZyYWdbaV0tPmxlbiAqCi0JCQkJdHgtPnUudHgucmF0ZS0+cmF0ZTsKKwkJCWxvYWQgKz0gdHgtPmV4dHJhX2ZyYWdbaV0tPmxlbiAqCisJCQkJdHgtPnJhdGUtPmJpdHJhdGU7CiAJCX0KIAl9CiAKQEAgLTc3NCwxMyArODExLDEyIEBACiAJCXR4LT5zdGEtPmNoYW5uZWxfdXNlX3JhdyArPSBsb2FkOwogCXR4LT5zZGF0YS0+Y2hhbm5lbF91c2VfcmF3ICs9IGxvYWQ7CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLS8qIFRPRE86IGltcGxlbWVudCByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucyBmb3IgYWRkaW5nIFRYL1JYIGhhbmRsZXJzCi0gKiBpbnRvIG9yZGVyZWQgbGlzdCAqLwogCi1pZWVlODAyMTFfdHhfaGFuZGxlciBpZWVlODAyMTFfdHhfaGFuZGxlcnNbXSA9Cit0eXBlZGVmIGllZWU4MDIxMV90eF9yZXN1bHQgKCppZWVlODAyMTFfdHhfaGFuZGxlcikoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICopOworc3RhdGljIGllZWU4MDIxMV90eF9oYW5kbGVyIGllZWU4MDIxMV90eF9oYW5kbGVyc1tdID0KIHsKIAlpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYywKIAlpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSwKQEAgLTgwMSw4ICs4MzcsOCBAQAogICogZGVhbCB3aXRoIHBhY2tldCBpbmplY3Rpb24gZG93biBtb25pdG9yIGludGVyZmFjZQogICogd2l0aCBSYWRpb3RhcCBIZWFkZXIgLS0gb25seSBjYWxsZWQgZm9yIG1vbml0b3IgbW9kZSBpbnRlcmZhY2UKICAqLwotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotX19pZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4LAorc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKK19faWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qCkBAIC04MTYsMTMgKzg1MiwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7CiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJ0aGRyID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUgPSB0eC0+bG9jYWwtPmh3LmNvbmYubW9kZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlpbnQgcmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQoJml0ZXJhdG9yLCBydGhkciwgc2tiLT5sZW4pOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCA9IHR4LT51LnR4LmNvbnRyb2w7CisJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sID0gdHgtPmNvbnRyb2w7CisKKwlzYmFuZCA9IHR4LT5sb2NhbC0+aHcud2lwaHktPmJhbmRzW3R4LT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKIAogCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9ET19OT1RfRU5DUllQVDsKLQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUlhEX1RYX0lOSkVDVEVEOwotCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYUlhEX0ZSQUdNRU5URUQ7CisJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTkpFQ1RFRDsKKwl0eC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9GUkFHTUVOVEVEOwogCiAJLyoKIAkgKiBmb3IgZXZlcnkgcmFkaW90YXAgZW50cnkgdGhhdCBpcyBwcmVzZW50CkBAIC04NTIsMTEgKzg5MCwxMyBAQAogCQkJICogaWVlZTgwMjExIHJhdGUgaW50IGlzIGluIDEwMGticHMgdW5pdHMgZWcsIDB4MGE9MU1icHMKIAkJCSAqLwogCQkJdGFyZ2V0X3JhdGUgPSAoKml0ZXJhdG9yLnRoaXNfYXJnKSAqIDU7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbW9kZS0+bnVtX3JhdGVzOyBpKyspIHsKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnIgPSAmbW9kZS0+cmF0ZXNbaV07CisJCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQkJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcjsKIAotCQkJCWlmIChyLT5yYXRlID09IHRhcmdldF9yYXRlKSB7Ci0JCQkJCXR4LT51LnR4LnJhdGUgPSByOworCQkJCXIgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCisJCQkJaWYgKHItPmJpdHJhdGUgPT0gdGFyZ2V0X3JhdGUpIHsKKwkJCQkJdHgtPnJhdGUgPSByOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC04NzAsOSArOTEwLDExIEBACiAJCQljb250cm9sLT5hbnRlbm5hX3NlbF90eCA9ICgqaXRlcmF0b3IudGhpc19hcmcpICsgMTsKIAkJCWJyZWFrOwogCisjaWYgMAogCQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVI6CiAJCQljb250cm9sLT5wb3dlcl9sZXZlbCA9ICppdGVyYXRvci50aGlzX2FyZzsKIAkJCWJyZWFrOworI2VuZGlmCiAKIAkJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTKSB7CkBAIC04ODQsNyArOTI2LDcgQEAKIAkJCQkgKiBvbiB0cmFuc21pc3Npb24KIAkJCQkgKi8KIAkJCQlpZiAoc2tiLT5sZW4gPCAoaXRlcmF0b3IubWF4X2xlbmd0aCArIEZDU19MRU4pKQotCQkJCQlyZXR1cm4gVFhSWF9EUk9QOworCQkJCQlyZXR1cm4gVFhfRFJPUDsKIAogCQkJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBGQ1NfTEVOKTsKIAkJCX0KQEAgLTg5Miw3ICs5MzQsNyBAQAogCQkJCWNvbnRyb2wtPmZsYWdzICY9CiAJCQkJCX5JRUVFODAyMTFfVFhDVExfRE9fTk9UX0VOQ1JZUFQ7CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRykKLQkJCQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUlhEX0ZSQUdNRU5URUQ7CisJCQkJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEOwogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTkwNyw3ICs5NDksNyBAQAogCX0KIAogCWlmIChyZXQgIT0gLUVOT0VOVCkgLyogaWUsIGlmIHdlIGRpZG4ndCBzaW1wbHkgcnVuIG91dCBvZiBmaWVsZHMgKi8KLQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJcmV0dXJuIFRYX0RST1A7CiAKIAkvKgogCSAqIHJlbW92ZSB0aGUgcmFkaW90YXAgaGVhZGVyCkBAIC05MTYsMTQgKzk1OCwxNCBAQAogCSAqLwogCXNrYl9wdWxsKHNrYiwgaXRlcmF0b3IubWF4X2xlbmd0aCk7CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKIC8qCiAgKiBpbml0aWFsaXNlcyBAdHgKICAqLwotc3RhdGljIGllZWU4MDIxMV90eHJ4X3Jlc3VsdAotX19pZWVlODAyMTFfdHhfcHJlcGFyZShzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgsCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAorX19pZWVlODAyMTFfdHhfcHJlcGFyZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCkBAIC05MzksMTggKzk4MSwxOCBAQAogCXR4LT5kZXYgPSBkZXY7IC8qIHVzZSBvcmlnaW5hbCBpbnRlcmZhY2UgKi8KIAl0eC0+bG9jYWwgPSBsb2NhbDsKIAl0eC0+c2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXR4LT51LnR4LmNvbnRyb2wgPSBjb250cm9sOworCXR4LT5jb250cm9sID0gY29udHJvbDsKIAkvKgogCSAqIFNldCB0aGlzIGZsYWcgKHVzZWQgYmVsb3cgdG8gaW5kaWNhdGUgImF1dG9tYXRpYyBmcmFnbWVudGF0aW9uIiksCiAJICogaXQgd2lsbCBiZSBjbGVhcmVkL2xlZnQgYnkgcmFkaW90YXAgYXMgZGVzaXJlZC4KIAkgKi8KLQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUlhEX0ZSQUdNRU5URUQ7CisJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEOwogCiAJLyogcHJvY2VzcyBhbmQgcmVtb3ZlIHRoZSBpbmplY3Rpb24gcmFkaW90YXAgaGVhZGVyICovCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUikpIHsKLQkJaWYgKF9faWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHR4LCBza2IpID09IFRYUlhfRFJPUCkKLQkJCXJldHVybiBUWFJYX0RST1A7CisJCWlmIChfX2llZWU4MDIxMV9wYXJzZV90eF9yYWRpb3RhcCh0eCwgc2tiKSA9PSBUWF9EUk9QKQorCQkJcmV0dXJuIFRYX0RST1A7CiAKIAkJLyoKIAkJICogX19pZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAgaGFzIG5vdyByZW1vdmVkCkBAIC05NjUsMjcgKzEwMDcsMjcgQEAKIAl0eC0+ZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7Ci0JCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYUlhEX1RYVU5JQ0FTVDsKKwkJdHgtPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfVU5JQ0FTVDsKIAkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX05PX0FDSzsKIAl9IGVsc2UgewotCQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUlhEX1RYVU5JQ0FTVDsKKwkJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9VTklDQVNUOwogCQljb250cm9sLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYQ1RMX05PX0FDSzsKIAl9CiAKLQlpZiAodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX0ZSQUdNRU5URUQpIHsKLQkJaWYgKCh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhSWERfVFhVTklDQVNUKSAmJgorCWlmICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfRlJBR01FTlRFRCkgeworCQlpZiAoKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9VTklDQVNUKSAmJgogCQkgICAgc2tiLT5sZW4gKyBGQ1NfTEVOID4gbG9jYWwtPmZyYWdtZW50YXRpb25fdGhyZXNob2xkICYmCiAJCSAgICAhbG9jYWwtPm9wcy0+c2V0X2ZyYWdfdGhyZXNob2xkKQotCQkJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFJYRF9GUkFHTUVOVEVEOworCQkJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEOwogCQllbHNlCi0JCQl0eC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWFJYRF9GUkFHTUVOVEVEOworCQkJdHgtPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfRlJBR01FTlRFRDsKIAl9CiAKIAlpZiAoIXR4LT5zdGEpCi0JCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9DTEVBUl9EU1RfTUFTSzsKLQllbHNlIGlmICh0eC0+c3RhLT5jbGVhcl9kc3RfbWFzaykgewotCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfQ0xFQVJfRFNUX01BU0s7Ci0JCXR4LT5zdGEtPmNsZWFyX2RzdF9tYXNrID0gMDsKKwkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX0NMRUFSX1BTX0ZJTFQ7CisJZWxzZSBpZiAodHgtPnN0YS0+ZmxhZ3MgJiBXTEFOX1NUQV9DTEVBUl9QU19GSUxUKSB7CisJCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9DTEVBUl9QU19GSUxUOworCQl0eC0+c3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfQ0xFQVJfUFNfRklMVDsKIAl9CiAKIAloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbih0eC0+ZmMpOwpAQCAtOTk1LDEzICsxMDM3LDEzIEBACiAJfQogCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9GSVJTVF9GUkFHTUVOVDsKIAotCXJldHVybiBUWFJYX0NPTlRJTlVFOworCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAogLyoKICAqIE5COiBAdHggaXMgdW5pbml0aWFsaXNlZCB3aGVuIHBhc3NlZCBpbiBoZXJlCiAgKi8KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3R4X3ByZXBhcmUoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4LAorc3RhdGljIGludCBpZWVlODAyMTFfdHhfcHJlcGFyZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LAogCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXYsCiAJCQkJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sKQpAQCAtMTAyNCw5ICsxMDY2LDkgQEAKIH0KIAogc3RhdGljIGludCBfX2llZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4KQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCXN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCA9IHR4LT51LnR4LmNvbnRyb2w7CisJc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sID0gdHgtPmNvbnRyb2w7CiAJaW50IHJldCwgaTsKIAogCWlmICghaWVlZTgwMjExX3FkaXNjX2luc3RhbGxlZChsb2NhbC0+bWRldikgJiYKQEAgLTEwNDMsMjAgKzEwODUsMjAgQEAKIAkJbG9jYWwtPm1kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJaWVlZTgwMjExX2xlZF90eChsb2NhbCwgMSk7CiAJfQotCWlmICh0eC0+dS50eC5leHRyYV9mcmFnKSB7CisJaWYgKHR4LT5leHRyYV9mcmFnKSB7CiAJCWNvbnRyb2wtPmZsYWdzICY9IH4oSUVFRTgwMjExX1RYQ1RMX1VTRV9SVFNfQ1RTIHwKIAkJCQkgICAgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCB8Ci0JCQkJICAgIElFRUU4MDIxMV9UWENUTF9DTEVBUl9EU1RfTUFTSyB8CisJCQkJICAgIElFRUU4MDIxMV9UWENUTF9DTEVBUl9QU19GSUxUIHwKIAkJCQkgICAgSUVFRTgwMjExX1RYQ1RMX0ZJUlNUX0ZSQUdNRU5UKTsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT51LnR4Lm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJCWlmICghdHgtPnUudHguZXh0cmFfZnJhZ1tpXSkKKwkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7CisJCQlpZiAoIXR4LT5leHRyYV9mcmFnW2ldKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKF9faWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQobG9jYWwsIGNvbnRyb2wtPnF1ZXVlKSkKIAkJCQlyZXR1cm4gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU47Ci0JCQlpZiAoaSA9PSB0eC0+dS50eC5udW1fZXh0cmFfZnJhZykgewotCQkJCWNvbnRyb2wtPnR4X3JhdGUgPSB0eC0+dS50eC5sYXN0X2ZyYWdfaHdyYXRlOwotCQkJCWNvbnRyb2wtPnJhdGUgPSB0eC0+dS50eC5sYXN0X2ZyYWdfcmF0ZTsKLQkJCQlpZiAodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1RYUFJPQkVfTEFTVF9GUkFHKQorCQkJaWYgKGkgPT0gdHgtPm51bV9leHRyYV9mcmFnKSB7CisJCQkJY29udHJvbC0+dHhfcmF0ZSA9IHR4LT5sYXN0X2ZyYWdfcmF0ZTsKKworCQkJCWlmICh0eC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUFJPQkVfTEFTVF9GUkFHKQogCQkJCQljb250cm9sLT5mbGFncyB8PQogCQkJCQkJSUVFRTgwMjExX1RYQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAkJCQllbHNlCkBAIC0xMDY2LDE4ICsxMTA4LDE4IEBACiAKIAkJCWllZWU4MDIxMV9kdW1wX2ZyYW1lKHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwKIAkJCQkJICAgICAiVFggdG8gbG93LWxldmVsIGRyaXZlciIsCi0JCQkJCSAgICAgdHgtPnUudHguZXh0cmFfZnJhZ1tpXSk7CisJCQkJCSAgICAgdHgtPmV4dHJhX2ZyYWdbaV0pOwogCQkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLAotCQkJCQkgICAgdHgtPnUudHguZXh0cmFfZnJhZ1tpXSwKKwkJCQkJICAgIHR4LT5leHRyYV9mcmFnW2ldLAogCQkJCQkgICAgY29udHJvbCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiBJRUVFODAyMTFfVFhfRlJBR19BR0FJTjsKIAkJCWxvY2FsLT5tZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCQlpZWVlODAyMTFfbGVkX3R4KGxvY2FsLCAxKTsKLQkJCXR4LT51LnR4LmV4dHJhX2ZyYWdbaV0gPSBOVUxMOworCQkJdHgtPmV4dHJhX2ZyYWdbaV0gPSBOVUxMOwogCQl9Ci0JCWtmcmVlKHR4LT51LnR4LmV4dHJhX2ZyYWcpOwotCQl0eC0+dS50eC5leHRyYV9mcmFnID0gTlVMTDsKKwkJa2ZyZWUodHgtPmV4dHJhX2ZyYWcpOworCQl0eC0+ZXh0cmFfZnJhZyA9IE5VTEw7CiAJfQogCXJldHVybiBJRUVFODAyMTFfVFhfT0s7CiB9CkBAIC0xMDg4LDggKzExMzAsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJaWVlZTgwMjExX3R4X2hhbmRsZXIgKmhhbmRsZXI7Ci0Jc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgdHg7Ci0JaWVlZTgwMjExX3R4cnhfcmVzdWx0IHJlcyA9IFRYUlhfRFJPUCwgcmVzX3ByZXBhcmU7CisJc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OworCWllZWU4MDIxMV90eF9yZXN1bHQgcmVzID0gVFhfRFJPUCwgcmVzX3ByZXBhcmU7CiAJaW50IHJldCwgaTsKIAogCVdBUk5fT04oX19pZWVlODAyMTFfcXVldWVfcGVuZGluZyhsb2NhbCwgY29udHJvbC0+cXVldWUpKTsKQEAgLTEwOTksNTkgKzExNDEsNTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJcmN1X3JlYWRfbG9jaygpOworCiAJLyogaW5pdGlhbGlzZXMgdHggKi8KIAlyZXNfcHJlcGFyZSA9IF9faWVlZTgwMjExX3R4X3ByZXBhcmUoJnR4LCBza2IsIGRldiwgY29udHJvbCk7CiAKLQlpZiAocmVzX3ByZXBhcmUgPT0gVFhSWF9EUk9QKSB7CisJaWYgKHJlc19wcmVwYXJlID09IFRYX0RST1ApIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBrZXkgcmVmZXJlbmNlcyBhcmUgcHJvdGVjdGVkIHVzaW5nIFJDVSBhbmQgdGhpcyByZXF1aXJlcyB0aGF0Ci0JICogd2UgYXJlIGluIGEgcmVhZC1zaXRlIFJDVSBzZWN0aW9uIGR1cmluZyByZWNlaXZlIHByb2Nlc3NpbmcKLQkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KIAlzdGEgPSB0eC5zdGE7Ci0JdHgudS50eC5tb2RlID0gbG9jYWwtPmh3LmNvbmYubW9kZTsKKwl0eC5jaGFubmVsID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbDsKIAotCWZvciAoaGFuZGxlciA9IGxvY2FsLT50eF9oYW5kbGVyczsgKmhhbmRsZXIgIT0gTlVMTDsKKwlmb3IgKGhhbmRsZXIgPSBpZWVlODAyMTFfdHhfaGFuZGxlcnM7ICpoYW5kbGVyICE9IE5VTEw7CiAJICAgICBoYW5kbGVyKyspIHsKIAkJcmVzID0gKCpoYW5kbGVyKSgmdHgpOwotCQlpZiAocmVzICE9IFRYUlhfQ09OVElOVUUpCisJCWlmIChyZXMgIT0gVFhfQ09OVElOVUUpCiAJCQlicmVhazsKIAl9CiAKIAlza2IgPSB0eC5za2I7IC8qIGhhbmRsZXJzIGFyZSBhbGxvd2VkIHRvIGNoYW5nZSBza2IgKi8KIAotCWlmIChzdGEpCi0JCXN0YV9pbmZvX3B1dChzdGEpOwotCi0JaWYgKHVubGlrZWx5KHJlcyA9PSBUWFJYX0RST1ApKSB7CisJaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9EUk9QKSkgewogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcCk7CiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpZiAodW5saWtlbHkocmVzID09IFRYUlhfUVVFVUVEKSkgeworCWlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkgewogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfaGFuZGxlcnNfcXVldWVkKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIAotCWlmICh0eC51LnR4LmV4dHJhX2ZyYWcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHR4LnUudHgubnVtX2V4dHJhX2ZyYWc7IGkrKykgeworCWlmICh0eC5leHRyYV9mcmFnKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0eC5udW1fZXh0cmFfZnJhZzsgaSsrKSB7CiAJCQlpbnQgbmV4dF9sZW4sIGR1cjsKIAkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPQogCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKQotCQkJCXR4LnUudHguZXh0cmFfZnJhZ1tpXS0+ZGF0YTsKKwkJCQl0eC5leHRyYV9mcmFnW2ldLT5kYXRhOwogCi0JCQlpZiAoaSArIDEgPCB0eC51LnR4Lm51bV9leHRyYV9mcmFnKSB7Ci0JCQkJbmV4dF9sZW4gPSB0eC51LnR4LmV4dHJhX2ZyYWdbaSArIDFdLT5sZW47CisJCQlpZiAoaSArIDEgPCB0eC5udW1fZXh0cmFfZnJhZykgeworCQkJCW5leHRfbGVuID0gdHguZXh0cmFfZnJhZ1tpICsgMV0tPmxlbjsKIAkJCX0gZWxzZSB7CiAJCQkJbmV4dF9sZW4gPSAwOwotCQkJCXR4LnUudHgucmF0ZSA9IHR4LnUudHgubGFzdF9mcmFnX3JhdGU7Ci0JCQkJdHgudS50eC5sYXN0X2ZyYWdfaHdyYXRlID0gdHgudS50eC5yYXRlLT52YWw7CisJCQkJdHgucmF0ZSA9IHR4Lmxhc3RfZnJhZ19yYXRlOwogCQkJfQogCQkJZHVyID0gaWVlZTgwMjExX2R1cmF0aW9uKCZ0eCwgMCwgbmV4dF9sZW4pOwogCQkJaGRyLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KGR1cik7CkBAIC0xMTg2LDEyICsxMjIxLDExIEBACiAJCW1lbWNweSgmc3RvcmUtPmNvbnRyb2wsIGNvbnRyb2wsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sKSk7CiAJCXN0b3JlLT5za2IgPSBza2I7Ci0JCXN0b3JlLT5leHRyYV9mcmFnID0gdHgudS50eC5leHRyYV9mcmFnOwotCQlzdG9yZS0+bnVtX2V4dHJhX2ZyYWcgPSB0eC51LnR4Lm51bV9leHRyYV9mcmFnOwotCQlzdG9yZS0+bGFzdF9mcmFnX2h3cmF0ZSA9IHR4LnUudHgubGFzdF9mcmFnX2h3cmF0ZTsKLQkJc3RvcmUtPmxhc3RfZnJhZ19yYXRlID0gdHgudS50eC5sYXN0X2ZyYWdfcmF0ZTsKKwkJc3RvcmUtPmV4dHJhX2ZyYWcgPSB0eC5leHRyYV9mcmFnOworCQlzdG9yZS0+bnVtX2V4dHJhX2ZyYWcgPSB0eC5udW1fZXh0cmFfZnJhZzsKKwkJc3RvcmUtPmxhc3RfZnJhZ19yYXRlID0gdHgubGFzdF9mcmFnX3JhdGU7CiAJCXN0b3JlLT5sYXN0X2ZyYWdfcmF0ZV9jdHJsX3Byb2JlID0KLQkJCSEhKHR4LmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1RYUFJPQkVfTEFTVF9GUkFHKTsKKwkJCSEhKHR4LmZsYWdzICYgSUVFRTgwMjExX1RYX1BST0JFX0xBU1RfRlJBRyk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiAwOwpAQCAtMTE5OSwxMCArMTIzMywxMCBAQAogIGRyb3A6CiAJaWYgKHNrYikKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCWZvciAoaSA9IDA7IGkgPCB0eC51LnR4Lm51bV9leHRyYV9mcmFnOyBpKyspCi0JCWlmICh0eC51LnR4LmV4dHJhX2ZyYWdbaV0pCi0JCQlkZXZfa2ZyZWVfc2tiKHR4LnUudHguZXh0cmFfZnJhZ1tpXSk7Ci0Ja2ZyZWUodHgudS50eC5leHRyYV9mcmFnKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHgubnVtX2V4dHJhX2ZyYWc7IGkrKykKKwkJaWYgKHR4LmV4dHJhX2ZyYWdbaV0pCisJCQlkZXZfa2ZyZWVfc2tiKHR4LmV4dHJhX2ZyYWdbaV0pOworCWtmcmVlKHR4LmV4dHJhX2ZyYWcpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiAwOwogfQpAQCAtMTI2MCw2ICsxMjk0LDggQEAKIAkJY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfUkVRVUVVRTsKIAlpZiAocGt0X2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1RYUERfRUFQT0xfRlJBTUUpCiAJCWNvbnRyb2wuZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX0VBUE9MX0ZSQU1FOworCWlmIChwa3RfZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhQRF9BTVBEVSkKKwkJY29udHJvbC5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfQU1QRFU7CiAJY29udHJvbC5xdWV1ZSA9IHBrdF9kYXRhLT5xdWV1ZTsKIAogCXJldCA9IGllZWU4MDIxMV90eChvZGV2LCBza2IsICZjb250cm9sKTsKQEAgLTEzNDYsOCArMTM4Miw5IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9wYWNrZXRfZGF0YSAqcGt0X2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IHJldCA9IDEsIGhlYWRfbmVlZDsKLQl1MTYgZXRoZXJ0eXBlLCBoZHJsZW4sIGZjOworCXUxNiBldGhlcnR5cGUsIGhkcmxlbiwgIG1lc2hoZHJsZW4gPSAwLCBmYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7CisJc3RydWN0IGllZWU4MDIxMXNfaGRyIG1lc2hfaGRyOwogCWNvbnN0IHU4ICplbmNhcHNfZGF0YTsKIAlpbnQgZW5jYXBzX2xlbiwgc2tpcF9oZWFkZXJfYnl0ZXM7CiAJaW50IG5oX3BvcywgaF9wb3M7CkBAIC0xMzg5LDYgKzE0MjYsMzcgQEAKIAkJbWVtY3B5KGhkci5hZGRyNCwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAkJaGRybGVuID0gMzA7CiAJCWJyZWFrOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9NRVNIX1BPSU5UOgorCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTOworCQkvKiBSQSBUQSBEQSBTQSAqLworCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLT5kYXRhKSkKKwkJCW1lbWNweShoZHIuYWRkcjEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOworCQllbHNlIGlmIChtZXNoX25leHRob3BfbG9va3VwKGhkci5hZGRyMSwgc2tiLCBkZXYpKQorCQkJCXJldHVybiAwOworCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLmFkZHI0LCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOworCQlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSB7CisJCQkvKiBGb3J3YXJkZWQgZnJhbWUsIGtlZXAgbWVzaCB0dGwgYW5kIHNlcW51bSAqLworCQkJc3RydWN0IGllZWU4MDIxMXNfaGRyICpwcmV2X21lc2hoZHI7CisJCQlwcmV2X21lc2hoZHIgPSAoKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqKXNrYi0+Y2IpOworCQkJbWVzaGhkcmxlbiA9IGllZWU4MDIxMV9nZXRfbWVzaF9oZHJsZW4ocHJldl9tZXNoaGRyKTsKKwkJCW1lbWNweSgmbWVzaF9oZHIsIHByZXZfbWVzaGhkciwgbWVzaGhkcmxlbik7CisJCQlzZGF0YS0+dS5zdGEubXNoc3RhdHMuZndkZWRfZnJhbWVzKys7CisJCX0gZWxzZSB7CisJCQlpZiAoIXNkYXRhLT51LnN0YS5tc2hjZmcuZG90MTFNZXNoVFRMKSB7CisJCQkJLyogRG8gbm90IHNlbmQgZnJhbWVzIHdpdGggbWVzaF90dGwgPT0gMCAqLworCQkJCXNkYXRhLT51LnN0YS5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc190dGwrKzsKKwkJCQlyZXQgPSAwOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCW1lc2hoZHJsZW4gPSBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwKKwkJCQkJCQkgICAgICAgc2RhdGEpOworCQl9CisJCWhkcmxlbiA9IDMwOworCQlicmVhazsKKyNlbmRpZgogCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfU1RBOgogCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9UT0RTOwogCQkvKiBCU1NJRCBTQSBEQSAqLwpAQCAtMTQwOSwxMCArMTQ3NywxNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHIuYWRkcjEpOwotCWlmIChzdGEpIHsKLQkJc3RhX2ZsYWdzID0gc3RhLT5mbGFnczsKLQkJc3RhX2luZm9fcHV0KHN0YSk7CisJLyoKKwkgKiBUaGVyZSdzIG5vIG5lZWQgdG8gdHJ5IHRvIGxvb2sgdXAgdGhlIGRlc3RpbmF0aW9uCisJICogaWYgaXQgaXMgYSBtdWx0aWNhc3QgYWRkcmVzcyAod2hpY2ggY2FuIG9ubHkgaGFwcGVuCisJICogaW4gQVAgbW9kZSkKKwkgKi8KKwlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci5hZGRyMSkpIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci5hZGRyMSk7CisJCWlmIChzdGEpCisJCQlzdGFfZmxhZ3MgPSBzdGEtPmZsYWdzOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAkvKiByZWNlaXZlciBpcyBRb1MgZW5hYmxlZCwgdXNlIGEgUW9TIHR5cGUgZnJhbWUgKi8KQEAgLTE0MjIsMTIgKzE0OTcsMTIgQEAKIAl9CiAKIAkvKgotCSAqIElmIHBvcnQgYWNjZXNzIGNvbnRyb2wgaXMgZW5hYmxlZCwgZHJvcCBmcmFtZXMgdG8gdW5hdXRob3Jpc2VkCi0JICogc3RhdGlvbnMgdW5sZXNzIHRoZXkgYXJlIEVBUE9MIGZyYW1lcyBmcm9tIHRoZSBsb2NhbCBzdGF0aW9uLgorCSAqIERyb3AgdW5pY2FzdCBmcmFtZXMgdG8gdW5hdXRob3Jpc2VkIHN0YXRpb25zIHVubGVzcyB0aGV5IGFyZQorCSAqIEVBUE9MIGZyYW1lcyBmcm9tIHRoZSBsb2NhbCBzdGF0aW9uLgogCSAqLwotCWlmICh1bmxpa2VseShzZGF0YS0+aWVlZTgwMl8xeF9wYWMgJiYKLQkJICAgICAhKHN0YV9mbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQpICYmCi0JCSAgICAgIShldGhlcnR5cGUgPT0gRVRIX1BfUEFFICYmCisJaWYgKHVubGlrZWx5KCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHIuYWRkcjEpICYmCisJCSAgICAgICEoc3RhX2ZsYWdzICYgV0xBTl9TVEFfQVVUSE9SSVpFRCkgJiYKKwkJICAgICAgIShldGhlcnR5cGUgPT0gRVRIX1BfUEFFICYmCiAJCSAgICAgICBjb21wYXJlX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkciwKIAkJCQkJICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCkpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKQEAgLTE0ODAsNyArMTU1NSw3IEBACiAJICogYnVpbGQgaW4gaGVhZHJvb20gaW4gX19kZXZfYWxsb2Nfc2tiKCkgKGxpbnV4L3NrYnVmZi5oKSBhbmQKIAkgKiBhbGxvY19za2IoKSAobmV0L2NvcmUvc2tidWZmLmMpCiAJICovCi0JaGVhZF9uZWVkID0gaGRybGVuICsgZW5jYXBzX2xlbiArIGxvY2FsLT50eF9oZWFkcm9vbTsKKwloZWFkX25lZWQgPSBoZHJsZW4gKyBlbmNhcHNfbGVuICsgbWVzaGhkcmxlbiArIGxvY2FsLT50eF9oZWFkcm9vbTsKIAloZWFkX25lZWQgLT0gc2tiX2hlYWRyb29tKHNrYik7CiAKIAkvKiBXZSBhcmUgZ29pbmcgdG8gbW9kaWZ5IHNrYiBkYXRhLCBzbyBtYWtlIGEgY29weSBvZiBpdCBpZiBoYXBwZW5zIHRvCkBAIC0xNTE0LDYgKzE1ODksMTIgQEAKIAkJaF9wb3MgKz0gZW5jYXBzX2xlbjsKIAl9CiAKKwlpZiAobWVzaGhkcmxlbiA+IDApIHsKKwkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgbWVzaGhkcmxlbiksICZtZXNoX2hkciwgbWVzaGhkcmxlbik7CisJCW5oX3BvcyArPSBtZXNoaGRybGVuOworCQloX3BvcyArPSBtZXNoaGRybGVuOworCX0KKwogCWlmIChmYyAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkgewogCQlfX2xlMTYgKnFvc19jb250cm9sOwogCkBAIC0xNTgzLDcgKzE2NjQsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKilkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+bWRldjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgKnN0b3JlOwotCXN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhIHR4OworCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDsKIAlpbnQgaSwgcmV0LCByZXNjaGVkdWxlID0gMDsKIAogCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKQEAgLTE1OTUsMTQgKzE2NzYsMTMgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXN0b3JlID0gJmxvY2FsLT5wZW5kaW5nX3BhY2tldFtpXTsKLQkJdHgudS50eC5jb250cm9sID0gJnN0b3JlLT5jb250cm9sOwotCQl0eC51LnR4LmV4dHJhX2ZyYWcgPSBzdG9yZS0+ZXh0cmFfZnJhZzsKLQkJdHgudS50eC5udW1fZXh0cmFfZnJhZyA9IHN0b3JlLT5udW1fZXh0cmFfZnJhZzsKLQkJdHgudS50eC5sYXN0X2ZyYWdfaHdyYXRlID0gc3RvcmUtPmxhc3RfZnJhZ19od3JhdGU7Ci0JCXR4LnUudHgubGFzdF9mcmFnX3JhdGUgPSBzdG9yZS0+bGFzdF9mcmFnX3JhdGU7CisJCXR4LmNvbnRyb2wgPSAmc3RvcmUtPmNvbnRyb2w7CisJCXR4LmV4dHJhX2ZyYWcgPSBzdG9yZS0+ZXh0cmFfZnJhZzsKKwkJdHgubnVtX2V4dHJhX2ZyYWcgPSBzdG9yZS0+bnVtX2V4dHJhX2ZyYWc7CisJCXR4Lmxhc3RfZnJhZ19yYXRlID0gc3RvcmUtPmxhc3RfZnJhZ19yYXRlOwogCQl0eC5mbGFncyA9IDA7CiAJCWlmIChzdG9yZS0+bGFzdF9mcmFnX3JhdGVfY3RybF9wcm9iZSkKLQkJCXR4LmZsYWdzIHw9IElFRUU4MDIxMV9UWFJYRF9UWFBST0JFX0xBU1RfRlJBRzsKKwkJCXR4LmZsYWdzIHw9IElFRUU4MDIxMV9UWF9QUk9CRV9MQVNUX0ZSQUc7CiAJCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCBzdG9yZS0+c2tiLCAmdHgpOwogCQlpZiAocmV0KSB7CiAJCQlpZiAocmV0ID09IElFRUU4MDIxMV9UWF9GUkFHX0FHQUlOKQpAQCAtMTYzNiw3ICsxNzE2LDYgQEAKIAogCS8qIEdlbmVyYXRlIGJpdG1hcCBmb3IgVElNIG9ubHkgaWYgdGhlcmUgYXJlIGFueSBTVEFzIGluIHBvd2VyIHNhdmUKIAkgKiBtb2RlLiAqLwotCXJlYWRfbG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKIAlpZiAoYXRvbWljX3JlYWQoJmJzcy0+bnVtX3N0YV9wcykgPiAwKQogCQkvKiBpbiB0aGUgaG9wZSB0aGF0IHRoaXMgaXMgZmFzdGVyIHRoYW4KIAkJICogY2hlY2tpbmcgYnl0ZS1mb3ItYnl0ZSAqLwpAQCAtMTY4Nyw3ICsxNzY2LDYgQEAKIAkJKnBvcysrID0gYWlkMDsgLyogQml0bWFwIGNvbnRyb2wgKi8KIAkJKnBvcysrID0gMDsgLyogUGFydCBWaXJ0IEJpdG1hcCAqLwogCX0KLQlyZWFkX3VubG9ja19iaCgmbG9jYWwtPnN0YV9sb2NrKTsKIH0KIAogc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9iZWFjb25fZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTcwMSwxNiArMTc3OSw5NiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmFwID0gTlVMTDsKIAlzdHJ1Y3QgcmF0ZV9zZWxlY3Rpb24gcnNlbDsKIAlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJaW50ICpudW1fYmVhY29uczsKKwlib29sIGVyciA9IHRydWU7CisJdTggKnBvczsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAogCXNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CiAJYmRldiA9IHNkYXRhLT5kZXY7Ci0JYXAgPSAmc2RhdGEtPnUuYXA7CiAKLQliZWFjb24gPSByY3VfZGVyZWZlcmVuY2UoYXAtPmJlYWNvbik7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9BUCkgeworCQlhcCA9ICZzZGF0YS0+dS5hcDsKKwkJYmVhY29uID0gcmN1X2RlcmVmZXJlbmNlKGFwLT5iZWFjb24pOworCQlpZiAoYXAgJiYgYmVhY29uKSB7CisJCQkvKgorCQkJICogaGVhZHJvb20sIGhlYWQgbGVuZ3RoLAorCQkJICogdGFpbCBsZW5ndGggYW5kIG1heGltdW0gVElNIGxlbmd0aAorCQkJICovCisJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT50eF9oZWFkcm9vbSArCisJCQkJCSAgICBiZWFjb24tPmhlYWRfbGVuICsKKwkJCQkJICAgIGJlYWNvbi0+dGFpbF9sZW4gKyAyNTYpOworCQkJaWYgKCFza2IpCisJCQkJZ290byBvdXQ7CiAKLQlpZiAoIWFwIHx8IHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9BUCB8fCAhYmVhY29uKSB7CisJCQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT50eF9oZWFkcm9vbSk7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIGJlYWNvbi0+aGVhZF9sZW4pLCBiZWFjb24tPmhlYWQsCisJCQkgICAgICAgYmVhY29uLT5oZWFkX2xlbik7CisKKwkJCWllZWU4MDIxMV9pbmNsdWRlX3NlcXVlbmNlKHNkYXRhLAorCQkJCQkoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEpOworCisJCQkvKgorCQkJICogTm90IHZlcnkgbmljZSwgYnV0IHdlIHdhbnQgdG8gYWxsb3cgdGhlIGRyaXZlciB0byBjYWxsCisJCQkgKiBpZWVlODAyMTFfYmVhY29uX2dldCgpIGFzIGEgcmVzcG9uc2UgdG8gdGhlIHNldF90aW0oKQorCQkJICogY2FsbGJhY2suIFRoYXQsIGhvd2V2ZXIsIGlzIGFscmVhZHkgaW52b2tlZCB1bmRlciB0aGUKKwkJCSAqIHN0YV9sb2NrIHRvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGFuZCByYWNlLWZyZWUgdXBkYXRlCisJCQkgKiBvZiB0aGUgdGltIGJpdG1hcCBpbiBtYWM4MDIxMSBhbmQgdGhlIGRyaXZlci4KKwkJCSAqLworCQkJaWYgKGxvY2FsLT50aW1faW5fbG9ja2VkX3NlY3Rpb24pIHsKKwkJCQlpZWVlODAyMTFfYmVhY29uX2FkZF90aW0obG9jYWwsIGFwLCBza2IsIGJlYWNvbik7CisJCQl9IGVsc2UgeworCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJCQkJaWVlZTgwMjExX2JlYWNvbl9hZGRfdGltKGxvY2FsLCBhcCwgc2tiLCBiZWFjb24pOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQkJfQorCisJCQlpZiAoYmVhY29uLT50YWlsKQorCQkJCW1lbWNweShza2JfcHV0KHNrYiwgYmVhY29uLT50YWlsX2xlbiksCisJCQkJICAgICAgIGJlYWNvbi0+dGFpbCwgYmVhY29uLT50YWlsX2xlbik7CisKKwkJCW51bV9iZWFjb25zID0gJmFwLT5udW1fYmVhY29uczsKKworCQkJZXJyID0gZmFsc2U7CisJCX0KKwl9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKKwkJLyogaGVhZHJvb20sIGhlYWQgbGVuZ3RoLCB0YWlsIGxlbmd0aCBhbmQgbWF4aW11bSBUSU0gbGVuZ3RoICovCisJCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPnR4X2hlYWRyb29tICsgNDAwKTsKKwkJaWYgKCFza2IpCisJCQlnb3RvIG91dDsKKworCQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCisJCQlza2JfcHV0KHNrYiwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKKwkJbWVtc2V0KG1nbXQsIDAsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7CisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBJRUVFODAyMTFfRkMoSUVFRTgwMjExX0ZUWVBFX01HTVQsCisJCQkJCQkgICBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKTsKKwkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJLyogQlNTSUQgaXMgbGVmdCB6ZXJvZWQsIHdpbGRjYXJkIHZhbHVlICovCisJCW1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPQorCQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCk7CisJCW1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gPSAweDA7IC8qIDB4MCBmb3IgTVBzICovCisKKwkJcG9zID0gc2tiX3B1dChza2IsIDIpOworCQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCQkqcG9zKysgPSAweDA7CisKKwkJbWVzaF9tZ210X2llc19hZGQoc2tiLCBzZGF0YS0+ZGV2KTsKKworCQludW1fYmVhY29ucyA9ICZzZGF0YS0+dS5zdGEubnVtX2JlYWNvbnM7CisKKwkJZXJyID0gZmFsc2U7CisJfQorCisJaWYgKGVycikgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAibm8gYmVhY29uIGRhdGEgYXZhaWwgZm9yICVzXG4iLApAQCAtMTcyMCwyNyArMTg3OCw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIGhlYWRyb29tLCBoZWFkIGxlbmd0aCwgdGFpbCBsZW5ndGggYW5kIG1heGltdW0gVElNIGxlbmd0aCAqLwotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPnR4X2hlYWRyb29tICsgYmVhY29uLT5oZWFkX2xlbiArCi0JCQkgICAgYmVhY29uLT50YWlsX2xlbiArIDI1Nik7Ci0JaWYgKCFza2IpCi0JCWdvdG8gb3V0OwotCi0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+dHhfaGVhZHJvb20pOwotCW1lbWNweShza2JfcHV0KHNrYiwgYmVhY29uLT5oZWFkX2xlbiksIGJlYWNvbi0+aGVhZCwKLQkgICAgICAgYmVhY29uLT5oZWFkX2xlbik7Ci0KLQlpZWVlODAyMTFfaW5jbHVkZV9zZXF1ZW5jZShzZGF0YSwgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhKTsKLQotCWllZWU4MDIxMV9iZWFjb25fYWRkX3RpbShsb2NhbCwgYXAsIHNrYiwgYmVhY29uKTsKLQotCWlmIChiZWFjb24tPnRhaWwpCi0JCW1lbWNweShza2JfcHV0KHNrYiwgYmVhY29uLT50YWlsX2xlbiksIGJlYWNvbi0+dGFpbCwKLQkJICAgICAgIGJlYWNvbi0+dGFpbF9sZW4pOwotCiAJaWYgKGNvbnRyb2wpIHsKLQkJcmF0ZV9jb250cm9sX2dldF9yYXRlKGxvY2FsLT5tZGV2LCBsb2NhbC0+b3Blcl9od19tb2RlLCBza2IsCi0JCQkJICAgICAgJnJzZWwpOworCQlyYXRlX2NvbnRyb2xfZ2V0X3JhdGUobG9jYWwtPm1kZXYsIHNiYW5kLCBza2IsICZyc2VsKTsKIAkJaWYgKCFyc2VsLnJhdGUpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGllZWU4MDIxMV9iZWFjb25fZ2V0OiAiCkBAIC0xNzUzLDIwICsxODkyLDE3IEBACiAJCX0KIAogCQljb250cm9sLT52aWYgPSB2aWY7Ci0JCWNvbnRyb2wtPnR4X3JhdGUgPQotCQkJKHNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUgJiYKLQkJCShyc2VsLnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfUFJFQU1CTEUyKSkgPwotCQkJcnNlbC5yYXRlLT52YWwyIDogcnNlbC5yYXRlLT52YWw7CisJCWNvbnRyb2wtPnR4X3JhdGUgPSByc2VsLnJhdGU7CisJCWlmIChzZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlICYmCisJCSAgICByc2VsLnJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpCisJCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfU0hPUlRfUFJFQU1CTEU7CiAJCWNvbnRyb2wtPmFudGVubmFfc2VsX3R4ID0gbG9jYWwtPmh3LmNvbmYuYW50ZW5uYV9zZWxfdHg7Ci0JCWNvbnRyb2wtPnBvd2VyX2xldmVsID0gbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWw7CiAJCWNvbnRyb2wtPmZsYWdzIHw9IElFRUU4MDIxMV9UWENUTF9OT19BQ0s7CiAJCWNvbnRyb2wtPnJldHJ5X2xpbWl0ID0gMTsKLQkJY29udHJvbC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYQ1RMX0NMRUFSX0RTVF9NQVNLOworCQljb250cm9sLT5mbGFncyB8PSBJRUVFODAyMTFfVFhDVExfQ0xFQVJfUFNfRklMVDsKIAl9Ci0KLQlhcC0+bnVtX2JlYWNvbnMrKzsKLQotIG91dDoKKwkoKm51bV9iZWFjb25zKSsrOworb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBza2I7CiB9CkBAIC0xODE0LDggKzE5NTAsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJaWVlZTgwMjExX3R4X2hhbmRsZXIgKmhhbmRsZXI7Ci0Jc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgdHg7Ci0JaWVlZTgwMjExX3R4cnhfcmVzdWx0IHJlcyA9IFRYUlhfRFJPUDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgdHg7CisJaWVlZTgwMjExX3R4X3Jlc3VsdCByZXMgPSBUWF9EUk9QOwogCXN0cnVjdCBuZXRfZGV2aWNlICpiZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzcyA9IE5VTEw7CkBAIC0xODM2LDcgKzE5NzIsNiBAQAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGJzcy0+ZHRpbV9jb3VudCAhPSAwKQogCQlyZXR1cm4gTlVMTDsgLyogc2VuZCBidWZmZXJlZCBiYy9tYyBvbmx5IGFmdGVyIERUSU0gYmVhY29uICovCkBAIC0xODYyLDI3ICsxOTk3LDI2IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQogCXN0YSA9IHR4LnN0YTsKLQl0eC5mbGFncyB8PSBJRUVFODAyMTFfVFhSWERfVFhQU19CVUZGRVJFRDsKLQl0eC51LnR4Lm1vZGUgPSBsb2NhbC0+aHcuY29uZi5tb2RlOworCXR4LmZsYWdzIHw9IElFRUU4MDIxMV9UWF9QU19CVUZGRVJFRDsKKwl0eC5jaGFubmVsID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbDsKIAotCWZvciAoaGFuZGxlciA9IGxvY2FsLT50eF9oYW5kbGVyczsgKmhhbmRsZXIgIT0gTlVMTDsgaGFuZGxlcisrKSB7CisJZm9yIChoYW5kbGVyID0gaWVlZTgwMjExX3R4X2hhbmRsZXJzOyAqaGFuZGxlciAhPSBOVUxMOyBoYW5kbGVyKyspIHsKIAkJcmVzID0gKCpoYW5kbGVyKSgmdHgpOwotCQlpZiAocmVzID09IFRYUlhfRFJPUCB8fCByZXMgPT0gVFhSWF9RVUVVRUQpCisJCWlmIChyZXMgPT0gVFhfRFJPUCB8fCByZXMgPT0gVFhfUVVFVUVEKQogCQkJYnJlYWs7CiAJfQogCXNrYiA9IHR4LnNrYjsgLyogaGFuZGxlcnMgYXJlIGFsbG93ZWQgdG8gY2hhbmdlIHNrYiAqLwogCi0JaWYgKHJlcyA9PSBUWFJYX0RST1ApIHsKKwlpZiAocmVzID09IFRYX0RST1ApIHsKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3ApOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXNrYiA9IE5VTEw7Ci0JfSBlbHNlIGlmIChyZXMgPT0gVFhSWF9RVUVVRUQpIHsKKwl9IGVsc2UgaWYgKHJlcyA9PSBUWF9RVUVVRUQpIHsKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2hhbmRsZXJzX3F1ZXVlZCk7CiAJCXNrYiA9IE5VTEw7CiAJfQogCi0JaWYgKHN0YSkKLQkJc3RhX2luZm9fcHV0KHN0YSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gc2tiOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggNWU2MzFjZS4uY2M5ZjcxNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0yNSw3ICsyNSw4IEBACiAjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgogCiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfcmF0ZS5oIgorI2luY2x1ZGUgInJhdGUuaCIKKyNpbmNsdWRlICJtZXNoLmgiCiAjaW5jbHVkZSAid21lLmgiCiAKIC8qIHByaXZpZCBmb3Igd2lwaHlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYmVsb25nIHRvIHVzIG9yIG5vdCAqLwpAQCAtNDEsOTIgKzQyLDYgQEAKIAl7IDB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZjggfTsKIAogCi1zdGF0aWMgaW50IHJhdGVfbGlzdF9tYXRjaChjb25zdCBpbnQgKnJhdGVfbGlzdCwgaW50IHJhdGUpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIXJhdGVfbGlzdCkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyByYXRlX2xpc3RbaV0gPj0gMDsgaSsrKQotCQlpZiAocmF0ZV9saXN0W2ldID09IHJhdGUpCi0JCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGllZWU4MDIxMV9wcmVwYXJlX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3X21vZGUgKm1vZGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbW9kZS0+bnVtX3JhdGVzOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJm1vZGUtPnJhdGVzW2ldOwotCi0JCXJhdGUtPmZsYWdzICY9IH4oSUVFRTgwMjExX1JBVEVfU1VQUE9SVEVEIHwKLQkJCQkgSUVFRTgwMjExX1JBVEVfQkFTSUMpOwotCi0JCWlmIChsb2NhbC0+c3VwcF9yYXRlc1ttb2RlLT5tb2RlXSkgewotCQkJaWYgKCFyYXRlX2xpc3RfbWF0Y2gobG9jYWwtPnN1cHBfcmF0ZXNbbW9kZS0+bW9kZV0sCi0JCQkJCSAgICAgcmF0ZS0+cmF0ZSkpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfUkFURV9TVVBQT1JURUQ7Ci0KLQkJLyogVXNlIGNvbmZpZ3VyZWQgYmFzaWMgcmF0ZSBzZXQgaWYgaXQgaXMgYXZhaWxhYmxlLiBJZiBub3QsCi0JCSAqIHVzZSBkZWZhdWx0cyB0aGF0IGFyZSBzYW5lIGZvciBtb3N0IGNhc2VzLiAqLwotCQlpZiAobG9jYWwtPmJhc2ljX3JhdGVzW21vZGUtPm1vZGVdKSB7Ci0JCQlpZiAocmF0ZV9saXN0X21hdGNoKGxvY2FsLT5iYXNpY19yYXRlc1ttb2RlLT5tb2RlXSwKLQkJCQkJICAgIHJhdGUtPnJhdGUpKQotCQkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFX0JBU0lDOwotCQl9IGVsc2Ugc3dpdGNoIChtb2RlLT5tb2RlKSB7Ci0JCWNhc2UgTU9ERV9JRUVFODAyMTFBOgotCQkJaWYgKHJhdGUtPnJhdGUgPT0gNjAgfHwgcmF0ZS0+cmF0ZSA9PSAxMjAgfHwKLQkJCSAgICByYXRlLT5yYXRlID09IDI0MCkKLQkJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfUkFURV9CQVNJQzsKLQkJCWJyZWFrOwotCQljYXNlIE1PREVfSUVFRTgwMjExQjoKLQkJCWlmIChyYXRlLT5yYXRlID09IDEwIHx8IHJhdGUtPnJhdGUgPT0gMjApCi0JCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVfQkFTSUM7Ci0JCQlicmVhazsKLQkJY2FzZSBNT0RFX0lFRUU4MDIxMUc6Ci0JCQlpZiAocmF0ZS0+cmF0ZSA9PSAxMCB8fCByYXRlLT5yYXRlID09IDIwIHx8Ci0JCQkgICAgcmF0ZS0+cmF0ZSA9PSA1NSB8fCByYXRlLT5yYXRlID09IDExMCkKLQkJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfUkFURV9CQVNJQzsKLQkJCWJyZWFrOwotCQljYXNlIE5VTV9JRUVFODAyMTFfTU9ERVM6Ci0JCQkvKiBub3QgdXNlZnVsICovCi0JCQlicmVhazsKLQkJfQotCi0JCS8qIFNldCBFUlAgYW5kIE1BTkRBVE9SWSBmbGFncyBiYXNlZCBvbiBwaHltb2RlICovCi0JCXN3aXRjaCAobW9kZS0+bW9kZSkgewotCQljYXNlIE1PREVfSUVFRTgwMjExQToKLQkJCWlmIChyYXRlLT5yYXRlID09IDYwIHx8IHJhdGUtPnJhdGUgPT0gMTIwIHx8Ci0JCQkgICAgcmF0ZS0+cmF0ZSA9PSAyNDApCi0JCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZOwotCQkJYnJlYWs7Ci0JCWNhc2UgTU9ERV9JRUVFODAyMTFCOgotCQkJaWYgKHJhdGUtPnJhdGUgPT0gMTApCi0JCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZOwotCQkJYnJlYWs7Ci0JCWNhc2UgTU9ERV9JRUVFODAyMTFHOgotCQkJaWYgKHJhdGUtPnJhdGUgPT0gMTAgfHwgcmF0ZS0+cmF0ZSA9PSAyMCB8fAotCQkJICAgIHJhdGUtPnJhdGUgPT0gNTUgfHwgcmF0ZS0+cmF0ZSA9PSAxMTAgfHwKLQkJCSAgICByYXRlLT5yYXRlID09IDYwIHx8IHJhdGUtPnJhdGUgPT0gMTIwIHx8Ci0JCQkgICAgcmF0ZS0+cmF0ZSA9PSAyNDApCi0JCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZOwotCQkJYnJlYWs7Ci0JCWNhc2UgTlVNX0lFRUU4MDIxMV9NT0RFUzoKLQkJCS8qIG5vdCB1c2VmdWwgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpZWVlODAyMTFfaXNfZXJwX3JhdGUobW9kZS0+bW9kZSwgcmF0ZS0+cmF0ZSkpCi0JCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfUkFURV9FUlA7Ci0JfQotfQotCiB1OCAqaWVlZTgwMjExX2dldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBzaXplX3QgbGVuLAogCQkJZW51bSBpZWVlODAyMTFfaWZfdHlwZXMgdHlwZSkKIHsKQEAgLTIzMiwxNyArMTQ3LDM1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKTsKIAotdm9pZCBpZWVlODAyMTFfdHhfc2V0X2lzd2VwKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICp0eCkKK2ludCBpZWVlODAyMTFfZ2V0X21lc2hfaGRybGVuKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGhkcikKK3sKKwlpbnQgYWUgPSBtZXNoaGRyLT5mbGFncyAmIElFRUU4MDIxMVNfRkxBR1NfQUU7CisJLyogNy4xLjMuNWEuMiAqLworCXN3aXRjaCAoYWUpIHsKKwljYXNlIDA6CisJCXJldHVybiA1OworCWNhc2UgMToKKwkJcmV0dXJuIDExOworCWNhc2UgMjoKKwkJcmV0dXJuIDE3OworCWNhc2UgMzoKKwkJcmV0dXJuIDIzOworCWRlZmF1bHQ6CisJCXJldHVybiA1OworCX0KK30KKwordm9pZCBpZWVlODAyMTFfdHhfc2V0X3Byb3RlY3RlZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgdHgtPnNrYi0+ZGF0YTsKIAogCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCWlmICh0eC0+dS50eC5leHRyYV9mcmFnKSB7CisJaWYgKHR4LT5leHRyYV9mcmFnKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmaGRyOwogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT51LnR4Lm51bV9leHRyYV9mcmFnOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7CiAJCQlmaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopCi0JCQkJdHgtPnUudHguZXh0cmFfZnJhZ1tpXS0+ZGF0YTsKKwkJCQl0eC0+ZXh0cmFfZnJhZ1tpXS0+ZGF0YTsKIAkJCWZoZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAkJfQogCX0KQEAgLTI2Miw3ICsxOTUsNyBAQAogCSAqIERJVl9ST1VORF9VUCgpIG9wZXJhdGlvbnMuCiAJICovCiAKLQlpZiAobG9jYWwtPmh3LmNvbmYucGh5bW9kZSA9PSBNT0RFX0lFRUU4MDIxMUEgfHwgZXJwKSB7CisJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWiB8fCBlcnApIHsKIAkJLyoKIAkJICogT0ZETToKIAkJICoKQEAgLTMwNCwxNSArMjM3LDE5IEBACiAvKiBFeHBvcnRlZCBkdXJhdGlvbiBmdW5jdGlvbiBmb3IgZHJpdmVyIHVzZSAqLwogX19sZTE2IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCQlzaXplX3QgZnJhbWVfbGVuLCBpbnQgcmF0ZSkKKwkJCQkJc2l6ZV90IGZyYW1lX2xlbiwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CiAJdTE2IGR1cjsKIAlpbnQgZXJwOwogCi0JZXJwID0gaWVlZTgwMjExX2lzX2VycF9yYXRlKGh3LT5jb25mLnBoeW1vZGUsIHJhdGUpOwotCWR1ciA9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgZnJhbWVfbGVuLCByYXRlLCBlcnAsCisJZXJwID0gMDsKKwlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERSkKKwkJZXJwID0gcmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9FUlBfRzsKKworCWR1ciA9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgZnJhbWVfbGVuLCByYXRlLT5iaXRyYXRlLCBlcnAsCiAJCQkJICAgICAgIHNkYXRhLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpOwogCiAJcmV0dXJuIGNwdV90b19sZTE2KGR1cik7CkBAIC0zMzIsMTcgKzI2OSwyMCBAQAogCiAJc2hvcnRfcHJlYW1ibGUgPSBzZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlOwogCi0JcmF0ZSA9IGZyYW1lX3R4Y3RsLT5ydHNfcmF0ZTsKLQllcnAgPSAhIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUCk7CisJcmF0ZSA9IGZyYW1lX3R4Y3RsLT5ydHNfY3RzX3JhdGU7CisKKwllcnAgPSAwOworCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFKQorCQllcnAgPSByYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HOwogCiAJLyogQ1RTIGR1cmF0aW9uICovCi0JZHVyID0gaWVlZTgwMjExX2ZyYW1lX2R1cmF0aW9uKGxvY2FsLCAxMCwgcmF0ZS0+cmF0ZSwKKwlkdXIgPSBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24obG9jYWwsIDEwLCByYXRlLT5iaXRyYXRlLAogCQkJCSAgICAgICBlcnAsIHNob3J0X3ByZWFtYmxlKTsKIAkvKiBEYXRhIGZyYW1lIGR1cmF0aW9uICovCi0JZHVyICs9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgZnJhbWVfbGVuLCByYXRlLT5yYXRlLAorCWR1ciArPSBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24obG9jYWwsIGZyYW1lX2xlbiwgcmF0ZS0+Yml0cmF0ZSwKIAkJCQkJZXJwLCBzaG9ydF9wcmVhbWJsZSk7CiAJLyogQUNLIGR1cmF0aW9uICovCi0JZHVyICs9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgMTAsIHJhdGUtPnJhdGUsCisJZHVyICs9IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihsb2NhbCwgMTAsIHJhdGUtPmJpdHJhdGUsCiAJCQkJCWVycCwgc2hvcnRfcHJlYW1ibGUpOwogCiAJcmV0dXJuIGNwdV90b19sZTE2KGR1cik7CkBAIC0zNjMsMTUgKzMwMywxNyBAQAogCiAJc2hvcnRfcHJlYW1ibGUgPSBzZGF0YS0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlOwogCi0JcmF0ZSA9IGZyYW1lX3R4Y3RsLT5ydHNfcmF0ZTsKLQllcnAgPSAhIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUCk7CisJcmF0ZSA9IGZyYW1lX3R4Y3RsLT5ydHNfY3RzX3JhdGU7CisJZXJwID0gMDsKKwlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERSkKKwkJZXJwID0gcmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9FUlBfRzsKIAogCS8qIERhdGEgZnJhbWUgZHVyYXRpb24gKi8KLQlkdXIgPSBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24obG9jYWwsIGZyYW1lX2xlbiwgcmF0ZS0+cmF0ZSwKKwlkdXIgPSBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24obG9jYWwsIGZyYW1lX2xlbiwgcmF0ZS0+Yml0cmF0ZSwKIAkJCQkgICAgICAgZXJwLCBzaG9ydF9wcmVhbWJsZSk7CiAJaWYgKCEoZnJhbWVfdHhjdGwtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX05PX0FDSykpIHsKIAkJLyogQUNLIGR1cmF0aW9uICovCi0JCWR1ciArPSBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24obG9jYWwsIDEwLCByYXRlLT5yYXRlLAorCQlkdXIgKz0gaWVlZTgwMjExX2ZyYW1lX2R1cmF0aW9uKGxvY2FsLCAxMCwgcmF0ZS0+Yml0cmF0ZSwKIAkJCQkJCWVycCwgc2hvcnRfcHJlYW1ibGUpOwogCX0KIApAQCAtMzc5LDI3ICszMjEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uKTsKIAotc3RydWN0IGllZWU4MDIxMV9yYXRlICoKLWllZWU4MDIxMV9nZXRfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHBoeW1vZGUsIGludCBod19yYXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKLQlpbnQgcjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmxvY2FsLT5tb2Rlc19saXN0LCBsaXN0KSB7Ci0JCWlmIChtb2RlLT5tb2RlICE9IHBoeW1vZGUpCi0JCQljb250aW51ZTsKLQkJZm9yIChyID0gMDsgciA8IG1vZGUtPm51bV9yYXRlczsgcisrKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmbW9kZS0+cmF0ZXNbcl07Ci0JCQlpZiAocmF0ZS0+dmFsID09IGh3X3JhdGUgfHwKLQkJCSAgICAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9QUkVBTUJMRTIgJiYKLQkJCSAgICAgcmF0ZS0+dmFsMiA9PSBod19yYXRlKSkKLQkJCQlyZXR1cm4gcmF0ZTsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CkBAIC00ODAsNiArNDAxLDcgQEAKIAkJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CiAJCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfSUJTUzoKIAkJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9XRFM6CisJCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTUVTSF9QT0lOVDoKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChzZGF0YS0+ZGV2ID09IGxvY2FsLT5tZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dlcC5jIGIvbmV0L21hYzgwMjExL3dlcC5jCmluZGV4IGEwY2ZmNzIuLmFmZmNlY2QgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXAuYworKysgYi9uZXQvbWFjODAyMTEvd2VwLmMKQEAgLTMwNSwzOSArMzA1LDM5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX2NyeXB0b193ZXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX3dlcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJaWYgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKIAkgICAgKChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgfHwKIAkgICAgIChyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgIT0gSUVFRTgwMjExX1NUWVBFX0FVVEgpKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCi0JaWYgKCEocngtPnUucnguc3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpKSB7CisJaWYgKCEocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSkgewogCQlpZiAoaWVlZTgwMjExX3dlcF9kZWNyeXB0KHJ4LT5sb2NhbCwgcngtPnNrYiwgcngtPmtleSkpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUcKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBXRVAgZnJhbWUsIGRlY3J5cHQgIgogCQkJCSAgICAgICAiZmFpbGVkXG4iLCByeC0+ZGV2LT5uYW1lKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfREVCVUcgKi8KLQkJCXJldHVybiBUWFJYX0RST1A7CisJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAkJfQotCX0gZWxzZSBpZiAoIShyeC0+dS5yeC5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSkgeworCX0gZWxzZSBpZiAoIShyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpIHsKIAkJaWVlZTgwMjExX3dlcF9yZW1vdmVfaXYocngtPmxvY2FsLCByeC0+c2tiLCByeC0+a2V5KTsKIAkJLyogcmVtb3ZlIElDViAqLwogCQlza2JfdHJpbShyeC0+c2tiLCByeC0+c2tiLT5sZW4gLSA0KTsKIAl9CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpbnQgd2VwX2VuY3J5cHRfc2tiKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICp0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgd2VwX2VuY3J5cHRfc2tiKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKCEodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkpIHsKIAkJaWYgKGllZWU4MDIxMV93ZXBfZW5jcnlwdCh0eC0+bG9jYWwsIHNrYiwgdHgtPmtleSkpCiAJCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKLQkJdHgtPnUudHguY29udHJvbC0+a2V5X2lkeCA9IHR4LT5rZXktPmNvbmYuaHdfa2V5X2lkeDsKKwkJdHgtPmNvbnRyb2wtPmtleV9pZHggPSB0eC0+a2V5LT5jb25mLmh3X2tleV9pZHg7CiAJCWlmICh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSB7CiAJCQlpZiAoIWllZWU4MDIxMV93ZXBfYWRkX2l2KHR4LT5sb2NhbCwgc2tiLCB0eC0+a2V5KSkKIAkJCQlyZXR1cm4gLTE7CkBAIC0zNDYsMjggKzM0NiwyOCBAQAogCXJldHVybiAwOwogfQogCi1pZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV9jcnlwdG9fd2VwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4KQoraWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b193ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCXR4LT51LnR4LmNvbnRyb2wtPml2X2xlbiA9IFdFUF9JVl9MRU47Ci0JdHgtPnUudHguY29udHJvbC0+aWN2X2xlbiA9IFdFUF9JQ1ZfTEVOOwotCWllZWU4MDIxMV90eF9zZXRfaXN3ZXAodHgpOworCXR4LT5jb250cm9sLT5pdl9sZW4gPSBXRVBfSVZfTEVOOworCXR4LT5jb250cm9sLT5pY3ZfbGVuID0gV0VQX0lDVl9MRU47CisJaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQodHgpOwogCiAJaWYgKHdlcF9lbmNyeXB0X3NrYih0eCwgdHgtPnNrYikgPCAwKSB7CiAJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF93ZXApOwotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gVFhfRFJPUDsKIAl9CiAKLQlpZiAodHgtPnUudHguZXh0cmFfZnJhZykgeworCWlmICh0eC0+ZXh0cmFfZnJhZykgewogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT51LnR4Lm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJCWlmICh3ZXBfZW5jcnlwdF9za2IodHgsIHR4LT51LnR4LmV4dHJhX2ZyYWdbaV0pIDwgMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKKwkJCWlmICh3ZXBfZW5jcnlwdF9za2IodHgsIHR4LT5leHRyYV9mcmFnW2ldKSA8IDApIHsKIAkJCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPgogCQkJCQkgICAgICAgdHhfaGFuZGxlcnNfZHJvcF93ZXApOwotCQkJCXJldHVybiBUWFJYX0RST1A7CisJCQkJcmV0dXJuIFRYX0RST1A7CiAJCQl9CiAJCX0KIAl9CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmggYi9uZXQvbWFjODAyMTEvd2VwLmgKaW5kZXggNzg1ZmJiNC4uMzYzNzc5YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5oCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuaApAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJpZWVlODAyMTFfa2V5LmgiCisjaW5jbHVkZSAia2V5LmgiCiAKIGludCBpZWVlODAyMTFfd2VwX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdm9pZCBpZWVlODAyMTFfd2VwX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwpAQCAtMjgsOSArMjgsOSBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIHU4ICogaWVlZTgwMjExX3dlcF9pc193ZWFrX2l2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogCi1pZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV9jcnlwdG9fd2VwX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4KTsKLWllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX2NyeXB0b193ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpOworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b193ZXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fd2VwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CiAKICNlbmRpZiAvKiBXRVBfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dleHQuYyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlMWRlMQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKQEAgLTAsMCArMSwxMTUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDItMjAwNSwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUtMjAwNiwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAibGVkLmgiCisjaW5jbHVkZSAicmF0ZS5oIgorI2luY2x1ZGUgIndwYS5oIgorI2luY2x1ZGUgImFlc19jY20uaCIKKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqc3RhX2FkZHIsCisJCQkJICAgIGludCBpZHgsIGludCBhbGcsIGludCByZW1vdmUsCisJCQkJICAgIGludCBzZXRfdHhfa2V5LCBjb25zdCB1OCAqX2tleSwKKwkJCQkgICAgc2l6ZV90IGtleV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCWludCBlcnI7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZiAoaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldF9lbmNyeXB0IC0gaW52YWxpZCBpZHg9JWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGlkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyZW1vdmUpIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCisJCWVyciA9IDA7CisKKwkJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHN0YV9hZGRyKSkgeworCQkJa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKKwkJfSBlbHNlIHsKKwkJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc3RhX2FkZHIpOworCQkJaWYgKCFzdGEpIHsKKwkJCQllcnIgPSAtRU5PRU5UOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCWtleSA9IHN0YS0+a2V5OworCQl9CisKKwkJaWVlZTgwMjExX2tleV9mcmVlKGtleSk7CisJfSBlbHNlIHsKKwkJa2V5ID0gaWVlZTgwMjExX2tleV9hbGxvYyhhbGcsIGlkeCwga2V5X2xlbiwgX2tleSk7CisJCWlmICgha2V5KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc3RhID0gTlVMTDsKKwkJZXJyID0gMDsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJaWYgKCFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihzdGFfYWRkcikpIHsKKwkJCXNldF90eF9rZXkgPSAwOworCQkJLyoKKwkJCSAqIEFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQsIHRoZSBrZXkgaW5kZXggb2YgYQorCQkJICogcGFpcndpc2Uga2V5IG11c3QgYmUgemVyby4gSG93ZXZlciwgc29tZSBBUCBhcmUKKwkJCSAqIGJyb2tlbiB3aGVuIGl0IGNvbWVzIHRvIFdFUCBrZXkgaW5kaWNlcywgc28gd2UKKwkJCSAqIHdvcmsgYXJvdW5kIHRoaXMuCisJCQkgKi8KKwkJCWlmIChpZHggIT0gMCAmJiBhbGcgIT0gQUxHX1dFUCkgeworCQkJCWllZWU4MDIxMV9rZXlfZnJlZShrZXkpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCisJCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHN0YV9hZGRyKTsKKwkJCWlmICghc3RhKSB7CisJCQkJaWVlZTgwMjExX2tleV9mcmVlKGtleSk7CisJCQkJZXJyID0gLUVOT0VOVDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCX0KKworCQlpZWVlODAyMTFfa2V5X2xpbmsoa2V5LCBzZGF0YSwgc3RhKTsKKworCQlpZiAoc2V0X3R4X2tleSB8fCAoIXN0YSAmJiAhc2RhdGEtPmRlZmF1bHRfa2V5ICYmIGtleSkpCisJCQlpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBpZHgpOworCX0KKworIG91dF91bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwkJaW50IHJldCA9IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKGRldiwgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoZGV2LCAmc2RhdGEtPnUuc3RhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKK3sKKwlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExIik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCWludCBjID0gMDsKKworCWRhdGEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOworCisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjE7CisJcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+bWluX3JldHJ5ID0gMDsKKwlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OworCXJhbmdlLT5taW5fcnRzID0gMDsKKwlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7CisJcmFuZ2UtPm1pbl9mcmFnID0gMjU2OworCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7CisKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKKwlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKKwlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9ERUZBVUxUX0tFWVM7CisKKwlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IGxvY2FsLT5ody5tYXhfc2lnbmFsOworCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IGxvY2FsLT5ody5tYXhfcnNzaTsKKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSBsb2NhbC0+aHcubWF4X25vaXNlOworCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKKworCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gbG9jYWwtPmh3Lm1heF9zaWduYWwvMjsKKwlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAwOworCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7CisJcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOworCisJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CisJCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7CisKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kICsrKSB7CisJCWludCBpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CisKKwkJaWYgKCFzYmFuZCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVscyAmJiBjIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBpKyspIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbaV07CisKKwkJCWlmICghKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7CisJCQkJcmFuZ2UtPmZyZXFbY10uaSA9CisJCQkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJCQkJCWNoYW4tPmNlbnRlcl9mcmVxKTsKKwkJCQlyYW5nZS0+ZnJlcVtjXS5tID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJCQkJcmFuZ2UtPmZyZXFbY10uZSA9IDY7CisJCQkJYysrOworCQkJfQorCQl9CisJfQorCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBjOworCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gYzsKKworCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7CisJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdUSFJTUFkpOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CisKKwlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaW50IHR5cGU7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1ZMQU4pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXN3aXRjaCAoKm1vZGUpIHsKKwljYXNlIElXX01PREVfSU5GUkE6CisJCXR5cGUgPSBJRUVFODAyMTFfSUZfVFlQRV9TVEE7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJdHlwZSA9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1M7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9SRVBFQVQ6CisJCXR5cGUgPSBJRUVFODAyMTFfSUZfVFlQRV9XRFM7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9NT05JVE9SOgorCQl0eXBlID0gSUVFRTgwMjExX0lGX1RZUEVfTU5UUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHR5cGUgPT0gc2RhdGEtPnZpZi50eXBlKQorCQlyZXR1cm4gMDsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWVlZTgwMjExX2lmX3JlaW5pdChkZXYpOworCWllZWU4MDIxMV9pZl9zZXRfdHlwZShkZXYsIHR5cGUpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9BUDoKKwkJKm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9TVEE6CisJCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTOgorCQkqbW9kZSA9IElXX01PREVfQURIT0M7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfTU5UUjoKKwkJKm1vZGUgPSBJV19NT0RFX01PTklUT1I7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lGX1RZUEVfV0RTOgorCQkqbW9kZSA9IElXX01PREVfUkVQRUFUOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JRl9UWVBFX1ZMQU46CisJCSptb2RlID0gSVdfTU9ERV9TRUNPTkQ7CQkvKiBGSVhNRSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqbW9kZSA9IElXX01PREVfQVVUTzsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX3NldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgZnJlcU1IeikKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisKKwljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwgZnJlcU1Ieik7CisKKwlpZiAoY2hhbiAmJiAhKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7CisJCWxvY2FsLT5vcGVyX2NoYW5uZWwgPSBjaGFuOworCisJCWlmIChsb2NhbC0+c3RhX3N3X3NjYW5uaW5nIHx8IGxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcpCisJCQlyZXQgPSAwOworCQllbHNlCisJCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsKTsKKworCQlyYXRlX2NvbnRyb2xfY2xlYXIobG9jYWwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQorCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKworCS8qIGZyZXEtPmUgPT0gMDogZnJlcS0+bSA9IGNoYW5uZWw7IG90aGVyd2lzZSBmcmVxID0gbSAqIDEwXmUgKi8KKwlpZiAoZnJlcS0+ZSA9PSAwKSB7CisJCWlmIChmcmVxLT5tIDwgMCkgeworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCisJCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UKKwkJCXJldHVybiBpZWVlODAyMTFfc2V0X2ZyZXEobG9jYWwsCisJCQkJaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGZyZXEtPm0pKTsKKwl9IGVsc2UgeworCQlpbnQgaSwgZGl2ID0gMTAwMDAwMDsKKwkJZm9yIChpID0gMDsgaSA8IGZyZXEtPmU7IGkrKykKKwkJCWRpdiAvPSAxMDsKKwkJaWYgKGRpdiA+IDApCisJCQlyZXR1cm4gaWVlZTgwMjExX3NldF9mcmVxKGxvY2FsLCBmcmVxLT5tIC8gZGl2KTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCisJZnJlcS0+bSA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCWZyZXEtPmUgPSA2OworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXNpemVfdCBsZW4gPSBkYXRhLT5sZW5ndGg7CisKKwkvKiBpd2NvbmZpZyB1c2VzIG51bCB0ZXJtaW5hdGlvbiBpbiBTU0lELi4gKi8KKwlpZiAobGVuID4gMCAmJiBzc2lkW2xlbiAtIDFdID09ICdcMCcpCisJCWxlbi0tOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7CisJCWludCByZXQ7CisJCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfVVNFUlNQQUNFX01MTUUpIHsKKwkJCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtY3B5KHNkYXRhLT51LnN0YS5zc2lkLCBzc2lkLCBsZW4pOworCQkJc2RhdGEtPnUuc3RhLnNzaWRfbGVuID0gbGVuOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGRhdGEtPmZsYWdzKQorCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJCWVsc2UKKwkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoZGV2LCBzc2lkLCBsZW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChkZXYsICZzZGF0YS0+dS5zdGEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CisJCW1lbWNweShzZGF0YS0+dS5hcC5zc2lkLCBzc2lkLCBsZW4pOworCQltZW1zZXQoc2RhdGEtPnUuYXAuc3NpZCArIGxlbiwgMCwKKwkJICAgICAgIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gLSBsZW4pOworCQlzZGF0YS0+dS5hcC5zc2lkX2xlbiA9IGxlbjsKKwkJcmV0dXJuIGllZWU4MDIxMV9pZl9jb25maWcoZGV2KTsKKwl9CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKK3sKKwlzaXplX3QgbGVuOworCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTKSB7CisJCWludCByZXMgPSBpZWVlODAyMTFfc3RhX2dldF9zc2lkKGRldiwgc3NpZCwgJmxlbik7CisJCWlmIChyZXMgPT0gMCkgeworCQkJZGF0YS0+bGVuZ3RoID0gbGVuOworCQkJZGF0YS0+ZmxhZ3MgPSAxOworCQl9IGVsc2UKKwkJCWRhdGEtPmZsYWdzID0gMDsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0FQKSB7CisJCWxlbiA9IHNkYXRhLT51LmFwLnNzaWRfbGVuOworCQlpZiAobGVuID4gSVdfRVNTSURfTUFYX1NJWkUpCisJCQlsZW4gPSBJV19FU1NJRF9NQVhfU0laRTsKKwkJbWVtY3B5KHNzaWQsIHNkYXRhLT51LmFwLnNzaWQsIGxlbik7CisJCWRhdGEtPmxlbmd0aCA9IGxlbjsKKwkJZGF0YS0+ZmxhZ3MgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwkJaW50IHJldDsKKwkJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkgeworCQkJbWVtY3B5KHNkYXRhLT51LnN0YS5ic3NpZCwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhLAorCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKKwkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKKwkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CisJCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCisJCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJZWxzZQorCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChkZXYsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKGRldiwgJnNkYXRhLT51LnN0YSk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1dEUykgeworCQkvKgorCQkgKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHRoZSBXRFMgcGVlciBhZGRyZXNzCisJCSAqIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgdGhlbiB3ZSBuZWVkIHRvIGRvCisJCSAqIG1vcmUgd29yayBoZXJlLCBuYW1lbHkgaWYgaXQgaXMgcnVubmluZyB3ZSBuZWVkIHRvCisJCSAqIGFkZCBhIG5ldyBhbmQgcmVtb3ZlIHRoZSBvbGQgU1RBIGVudHJ5LCB0aGlzIGlzCisJCSAqIG5vcm1hbGx5IGhhbmRsZWQgYnkgX29wZW4oKSBhbmQgX3N0b3AoKS4KKwkJICovCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCW1lbWNweSgmc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCisJCSAgICAgICBFVEhfQUxFTik7CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpIHsKKwkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9XRFMpIHsKKwkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwgRVRIX0FMRU4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxID0gTlVMTDsKKwl1OCAqc3NpZCA9IE5VTEw7CisJc2l6ZV90IHNzaWRfbGVuID0gMDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX01FU0hfUE9JTlQgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0FQKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBpZiBTU0lEIHdhcyBzcGVjaWZpZWQgZXhwbGljaXRseSB0aGVuIHVzZSB0aGF0ICovCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpICYmCisJICAgIHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJcmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKWV4dHJhOworCQlzc2lkID0gcmVxLT5lc3NpZDsKKwkJc3NpZF9sZW4gPSByZXEtPmVzc2lkX2xlbjsKKwl9CisKKwlyZXR1cm4gaWVlZTgwMjExX3N0YV9yZXFfc2NhbihkZXYsIHNzaWQsIHNzaWRfbGVuKTsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCWludCByZXM7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCWlmIChsb2NhbC0+c3RhX3N3X3NjYW5uaW5nIHx8IGxvY2FsLT5zdGFfaHdfc2Nhbm5pbmcpCisJCXJldHVybiAtRUFHQUlOOworCisJcmVzID0gaWVlZTgwMjExX3N0YV9zY2FuX3Jlc3VsdHMoZGV2LCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKKwlpZiAocmVzID49IDApIHsKKwkJZGF0YS0+bGVuZ3RoID0gcmVzOworCQlyZXR1cm4gMDsKKwl9CisJZGF0YS0+bGVuZ3RoID0gMDsKKwlyZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJaW50IGksIGVyciA9IC1FSU5WQUw7CisJdTMyIHRhcmdldF9yYXRlID0gcmF0ZS0+dmFsdWUgLyAxMDAwMDA7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWYgKCFzZGF0YS0+YnNzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCS8qIHRhcmdldF9yYXRlID0gLTEsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhdXRvIG9ubHksIHNvIHVzZSBhbGwgcmF0ZXMKKwkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMSBtZWFucyBvbmx5IHJhdGUgWAorCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyA8PSBYICovCisJc2RhdGEtPmJzcy0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKKwlzZGF0YS0+YnNzLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKKwlpZiAocmF0ZS0+dmFsdWUgPCAwKQorCQlyZXR1cm4gMDsKKworCWZvciAoaT0wOyBpPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCQlpbnQgdGhpc19yYXRlID0gYnJhdGUtPmJpdHJhdGU7CisKKwkJaWYgKHRhcmdldF9yYXRlID09IHRoaXNfcmF0ZSkgeworCQkJc2RhdGEtPmJzcy0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSBpOworCQkJaWYgKHJhdGUtPmZpeGVkKQorCQkJCXNkYXRhLT5ic3MtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IGk7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcmF0ZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51LnN0YS5ic3NpZCk7CisKKwlpZiAoc3RhICYmIHN0YS0+dHhyYXRlX2lkeCA8IHNiYW5kLT5uX2JpdHJhdGVzKQorCQlyYXRlLT52YWx1ZSA9IHNiYW5kLT5iaXRyYXRlc1tzdGEtPnR4cmF0ZV9pZHhdLmJpdHJhdGU7CisJZWxzZQorCQlyYXRlLT52YWx1ZSA9IDA7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmICghc3RhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJhdGUtPnZhbHVlICo9IDEwMDAwMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXd0eHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCWJvb2wgbmVlZF9yZWNvbmZpZyA9IDA7CisJaW50IG5ld19wb3dlcl9sZXZlbDsKKworCWlmICgoZGF0YS0+dHhwb3dlci5mbGFncyAmIElXX1RYUE9XX1RZUEUpICE9IElXX1RYUE9XX0RCTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGEtPnR4cG93ZXIuZmxhZ3MgJiBJV19UWFBPV19SQU5HRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YS0+dHhwb3dlci5maXhlZCkgeworCQluZXdfcG93ZXJfbGV2ZWwgPSBkYXRhLT50eHBvd2VyLnZhbHVlOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEF1dG9tYXRpYyBwb3dlciBsZXZlbC4gVXNlIG1heGltdW0gcG93ZXIgZm9yIHRoZSBjdXJyZW50CisJCSAqIGNoYW5uZWwuIFNob3VsZCBiZSBwYXJ0IG9mIHJhdGUgY29udHJvbC4KKwkJICovCisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCogY2hhbiA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWw7CisJCWlmICghY2hhbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW5ld19wb3dlcl9sZXZlbCA9IGNoYW4tPm1heF9wb3dlcjsKKwl9CisKKwlpZiAobG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgIT0gbmV3X3Bvd2VyX2xldmVsKSB7CisJCWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsID0gbmV3X3Bvd2VyX2xldmVsOworCQluZWVkX3JlY29uZmlnID0gMTsKKwl9CisKKwlpZiAobG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCAhPSAhKGRhdGEtPnR4cG93ZXIuZGlzYWJsZWQpKSB7CisJCWxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgPSAhKGRhdGEtPnR4cG93ZXIuZGlzYWJsZWQpOworCQluZWVkX3JlY29uZmlnID0gMTsKKwkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCk7CisJfQorCisJaWYgKG5lZWRfcmVjb25maWcpIHsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCk7CisJCS8qIFRoZSByZXR1cm4gdmFsdWUgb2YgaHdfY29uZmlnIGlzIG5vdCBvZiBiaWcgaW50ZXJlc3QgaGVyZSwKKwkJICogYXMgaXQgZG9lc24ndCBzYXkgdGhhdCBpdCBmYWlsZWQgYmVjYXVzZSBvZiBfdGhpc18gY29uZmlnCisJCSAqIGNoYW5nZSBvciBzb21ldGhpbmcgZWxzZS4gSWdub3JlIGl0LiAqLworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXd0eHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCisJZGF0YS0+dHhwb3dlci5maXhlZCA9IDE7CisJZGF0YS0+dHhwb3dlci5kaXNhYmxlZCA9ICEobG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCk7CisJZGF0YS0+dHhwb3dlci52YWx1ZSA9IGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsOworCWRhdGEtPnR4cG93ZXIuZmxhZ3MgPSBJV19UWFBPV19EQk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisKKwlpZiAocnRzLT5kaXNhYmxlZCkKKwkJbG9jYWwtPnJ0c190aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQ7CisJZWxzZSBpZiAocnRzLT52YWx1ZSA8IDAgfHwgcnRzLT52YWx1ZSA+IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZQorCQlsb2NhbC0+cnRzX3RocmVzaG9sZCA9IHJ0cy0+dmFsdWU7CisKKwkvKiBJZiB0aGUgd2xhbiBjYXJkIHBlcmZvcm1zIFJUUy9DVFMgaW4gaGFyZHdhcmUvZmlybXdhcmUsCisJICogY29uZmlndXJlIGl0IGhlcmUgKi8KKworCWlmIChsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZCkKKwkJbG9jYWwtPm9wcy0+c2V0X3J0c190aHJlc2hvbGQobG9jYWxfdG9faHcobG9jYWwpLAorCQkJCQkgICAgIGxvY2FsLT5ydHNfdGhyZXNob2xkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCXJ0cy0+dmFsdWUgPSBsb2NhbC0+cnRzX3RocmVzaG9sZDsKKwlydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPj0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEKTsKKwlydHMtPmZpeGVkID0gMTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCWlmIChmcmFnLT5kaXNhYmxlZCkKKwkJbG9jYWwtPmZyYWdtZW50YXRpb25fdGhyZXNob2xkID0gSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDsKKwllbHNlIGlmIChmcmFnLT52YWx1ZSA8IDI1NiB8fAorCQkgZnJhZy0+dmFsdWUgPiBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIHsKKwkJLyogRnJhZ21lbnQgbGVuZ3RoIG11c3QgYmUgZXZlbiwgc28gc3RyaXAgTFNCLiAqLworCQlsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBmcmFnLT52YWx1ZSAmIH4weDE7CisJfQorCisJLyogSWYgdGhlIHdsYW4gY2FyZCBwZXJmb3JtcyBmcmFnbWVudGF0aW9uIGluIGhhcmR3YXJlL2Zpcm13YXJlLAorCSAqIGNvbmZpZ3VyZSBpdCBoZXJlICovCisKKwlpZiAobG9jYWwtPm9wcy0+c2V0X2ZyYWdfdGhyZXNob2xkKQorCQlsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQoCisJCQlsb2NhbF90b19odyhsb2NhbCksCisJCQlsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCWZyYWctPnZhbHVlID0gbG9jYWwtPmZyYWdtZW50YXRpb25fdGhyZXNob2xkOworCWZyYWctPmRpc2FibGVkID0gKGZyYWctPnZhbHVlID49IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRCk7CisJZnJhZy0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3cmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BhcmFtICpyZXRyeSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCWlmIChyZXRyeS0+ZGlzYWJsZWQgfHwKKwkgICAgKHJldHJ5LT5mbGFncyAmIElXX1JFVFJZX1RZUEUpICE9IElXX1JFVFJZX0xJTUlUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZXRyeS0+ZmxhZ3MgJiBJV19SRVRSWV9NQVgpCisJCWxvY2FsLT5sb25nX3JldHJ5X2xpbWl0ID0gcmV0cnktPnZhbHVlOworCWVsc2UgaWYgKHJldHJ5LT5mbGFncyAmIElXX1JFVFJZX01JTikKKwkJbG9jYWwtPnNob3J0X3JldHJ5X2xpbWl0ID0gcmV0cnktPnZhbHVlOworCWVsc2UgeworCQlsb2NhbC0+bG9uZ19yZXRyeV9saW1pdCA9IHJldHJ5LT52YWx1ZTsKKwkJbG9jYWwtPnNob3J0X3JldHJ5X2xpbWl0ID0gcmV0cnktPnZhbHVlOworCX0KKworCWlmIChsb2NhbC0+b3BzLT5zZXRfcmV0cnlfbGltaXQpIHsKKwkJcmV0dXJuIGxvY2FsLT5vcHMtPnNldF9yZXRyeV9saW1pdCgKKwkJCWxvY2FsX3RvX2h3KGxvY2FsKSwKKwkJCWxvY2FsLT5zaG9ydF9yZXRyeV9saW1pdCwKKwkJCWxvY2FsLT5sb25nX3JldHJ5X2xpbWl0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdyZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJldHJ5LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCisJcmV0cnktPmRpc2FibGVkID0gMDsKKwlpZiAocmV0cnktPmZsYWdzID09IDAgfHwgcmV0cnktPmZsYWdzICYgSVdfUkVUUllfTUlOKSB7CisJCS8qIGZpcnN0IHJldHVybiBtaW4gdmFsdWUsIGl3Y29uZmlnIHdpbGwgYXNrIG1heCB2YWx1ZQorCQkgKiBsYXRlciBpZiBuZWVkZWQgKi8KKwkJcmV0cnktPmZsYWdzIHw9IElXX1JFVFJZX0xJTUlUOworCQlyZXRyeS0+dmFsdWUgPSBsb2NhbC0+c2hvcnRfcmV0cnlfbGltaXQ7CisJCWlmIChsb2NhbC0+bG9uZ19yZXRyeV9saW1pdCAhPSBsb2NhbC0+c2hvcnRfcmV0cnlfbGltaXQpCisJCQlyZXRyeS0+ZmxhZ3MgfD0gSVdfUkVUUllfTUlOOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHJldHJ5LT5mbGFncyAmIElXX1JFVFJZX01BWCkgeworCQlyZXRyeS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKKwkJcmV0cnktPnZhbHVlID0gbG9jYWwtPmxvbmdfcmV0cnlfbGltaXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKikgZXh0cmE7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChtbG1lLT5jbWQpIHsKKwljYXNlIElXX01MTUVfREVBVVRIOgorCQkvKiBUT0RPOiBtbG1lLT5hZGRyLnNhX2RhdGEgKi8KKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoZGV2LCBtbG1lLT5yZWFzb25fY29kZSk7CisJY2FzZSBJV19NTE1FX0RJU0FTU09DOgorCQkvKiBUT0RPOiBtbG1lLT5hZGRyLnNhX2RhdGEgKi8KKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKGRldiwgbWxtZS0+cmVhc29uX2NvZGUpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleWJ1ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlpbnQgaWR4LCBpLCBhbGcgPSBBTEdfV0VQOworCXU4IGJjYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwlpbnQgcmVtb3ZlID0gMDsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlkeCA9IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisJaWYgKGlkeCA9PSAwKSB7CisJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7CisJCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgeworCQkJCQlpZHggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJfSBlbHNlIGlmIChpZHggPCAxIHx8IGlkeCA+IDQpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UKKwkJaWR4LS07CisKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKKwkJcmVtb3ZlID0gMTsKKwllbHNlIGlmIChlcnEtPmxlbmd0aCA9PSAwKSB7CisJCS8qIE5vIGtleSBkYXRhIC0ganVzdCBzZXQgdGhlIGRlZmF1bHQgVFgga2V5IGluZGV4ICovCisJCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIGlkeCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBpZWVlODAyMTFfc2V0X2VuY3J5cHRpb24oCisJCWRldiwgYmNhZGRyLAorCQlpZHgsIGFsZywgcmVtb3ZlLAorCQkhc2RhdGEtPmRlZmF1bHRfa2V5LAorCQlrZXlidWYsIGVycS0+bGVuZ3RoKTsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCWludCBpZHgsIGk7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZHggPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCWlmIChpZHggPCAxIHx8IGlkeCA+IDQpIHsKKwkJaWR4ID0gLTE7CisJCWlmICghc2RhdGEtPmRlZmF1bHRfa2V5KQorCQkJaWR4ID0gMDsKKwkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7CisJCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKSB7CisJCQkJaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaWR4IDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQlpZHgtLTsKKworCWVycS0+ZmxhZ3MgPSBpZHggKyAxOworCisJaWYgKCFzZGF0YS0+a2V5c1tpZHhdKSB7CisJCWVycS0+bGVuZ3RoID0gMDsKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7CisJCXJldHVybiAwOworCX0KKworCW1lbWNweShrZXksIHNkYXRhLT5rZXlzW2lkeF0tPmNvbmYua2V5LAorCSAgICAgICBtaW5fdChpbnQsIGVycS0+bGVuZ3RoLCBzZGF0YS0+a2V5c1tpZHhdLT5jb25mLmtleWxlbikpOworCWVycS0+bGVuZ3RoID0gc2RhdGEtPmtleXNbaWR4XS0+Y29uZi5rZXlsZW47CisJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgorCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gISFkYXRhLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBJRUVFODAyMTFfSUZfVFlQRV9TVEEpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlIHsKKwkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CisJCQkvKgorCQkJICogUHJpdmFjeSBpbnZva2VkIGJ5IHdwYV9zdXBwbGljYW50LCBzdG9yZSB0aGUKKwkJCSAqIHZhbHVlIGFuZCBhbGxvdyBhc3NvY2lhdGluZyB0byBhIHByb3RlY3RlZAorCQkJICogbmV0d29yayB3aXRob3V0IGhhdmluZyBhIGtleSB1cCBmcm9udC4KKwkJCSAqLworCQkJaWYgKGRhdGEtPnZhbHVlKQorCQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKKwkJfQorCQlicmVhazsKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykKKwkJCXNkYXRhLT51LnN0YS5hdXRoX2FsZ3MgPSBkYXRhLT52YWx1ZTsKKwkJZWxzZQorCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogR2V0IHdpcmVsZXNzIHN0YXRpc3RpY3MuICBDYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzIGFuZCBieSBTSU9DR0lXU1RBVFMgKi8KK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaWVlZTgwMjExX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZsb2NhbC0+d3N0YXRzOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAorCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gSUVFRTgwMjExX0lGX1RZUEVfSUJTUykKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5zdGEuYnNzaWQpOworCWlmICghc3RhKSB7CisJCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7CisJCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKKwkJd3N0YXRzLT5xdWFsLnF1YWwgPSAwOworCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAwOworCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOworCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3Jzc2k7CisJCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3NpZ25hbDsKKwkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOworCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gd3N0YXRzOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX0lCU1MpCisJCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51LnN0YS5hdXRoX2FsZ3M7CisJCWVsc2UKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3ZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJCXN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKSBleHRyYTsKKwlpbnQgdW5pbml0aWFsaXplZF92YXIoYWxnKSwgaWR4LCBpLCByZW1vdmUgPSAwOworCisJc3dpdGNoIChleHQtPmFsZykgeworCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgorCQlyZW1vdmUgPSAxOworCQlicmVhazsKKwljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgorCQlhbGcgPSBBTEdfV0VQOworCQlicmVhazsKKwljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKKwkJYWxnID0gQUxHX1RLSVA7CisJCWJyZWFrOworCWNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgorCQlhbGcgPSBBTEdfQ0NNUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQorCQlyZW1vdmUgPSAxOworCisJaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KSB7CisJCWlkeCA9IC0xOworCQlpZiAoIXNkYXRhLT5kZWZhdWx0X2tleSkKKwkJCWlkeCA9IDA7CisJCWVsc2UgZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykgeworCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgeworCQkJCWlkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGlkeCA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJaWR4LS07CisKKwlyZXR1cm4gaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKGRldiwgZXh0LT5hZGRyLnNhX2RhdGEsIGlkeCwgYWxnLAorCQkJCQlyZW1vdmUsCisJCQkJCWV4dC0+ZXh0X2ZsYWdzICYKKwkJCQkJSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZLAorCQkJCQlleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKK30KKworCisvKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMgKi8KKworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgaWVlZTgwMjExX2hhbmRsZXJbXSA9Cit7CisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdDT01NSVQgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd25hbWUsCQkvKiBTSU9DR0lXTkFNRSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTldJRCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXTldJRCAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3ZnJlcSwJCS8qIFNJT0NTSVdGUkVRICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdmcmVxLAkJLyogU0lPQ0dJV0ZSRVEgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd21vZGUsCQkvKiBTSU9DU0lXTU9ERSAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3bW9kZSwJCS8qIFNJT0NHSVdNT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdTRU5TICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdTRU5TICovCisJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3JhbmdlLAkJLyogU0lPQ0dJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUFJJViAqLworCShpd19oYW5kbGVyKSBOVUxMIC8qIGtlcm5lbCBjb2RlICovLAkJLyogU0lPQ0dJV1BSSVYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBOVUxMIC8qIGtlcm5lbCBjb2RlICovLAkJLyogU0lPQ0dJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdTUFkgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1NQWSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXVEhSU1BZICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdUSFJTUFkgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2FwLAkJLyogU0lPQ1NJV0FQICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdhcCwJCS8qIFNJT0NHSVdBUCAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3bWxtZSwJCS8qIFNJT0NTSVdNTE1FICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdBUExJU1QgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd3NjYW4sCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3c2NhbiwJCS8qIFNJT0NHSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdlc3NpZCwJCS8qIFNJT0NTSVdFU1NJRCAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3ZXNzaWQsCQkvKiBTSU9DR0lXRVNTSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOSUNLTiAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd3JhdGUsCQkvKiBTSU9DU0lXUkFURSAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3cmF0ZSwJCS8qIFNJT0NHSVdSQVRFICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdydHMsCQkvKiBTSU9DU0lXUlRTICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdydHMsCQkvKiBTSU9DR0lXUlRTICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdmcmFnLAkJLyogU0lPQ1NJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2ZyYWcsCQkvKiBTSU9DR0lXRlJBRyAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3dHhwb3dlciwJLyogU0lPQ1NJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXd0eHBvd2VyLAkvKiBTSU9DR0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd3JldHJ5LAkJLyogU0lPQ1NJV1JFVFJZICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdyZXRyeSwJCS8qIFNJT0NHSVdSRVRSWSAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3ZW5jb2RlLAkJLyogU0lPQ1NJV0VOQ09ERSAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3ZW5jb2RlLAkJLyogU0lPQ0dJV0VOQ09ERSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXUE9XRVIgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1BPV0VSICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3Z2VuaWUsCQkvKiBTSU9DU0lXR0VOSUUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV0dFTklFICovCisJKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdhdXRoLAkJLyogU0lPQ1NJV0FVVEggKi8KKwkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2F1dGgsCQkvKiBTSU9DR0lXQVVUSCAqLworCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3ZW5jb2RlZXh0LAkvKiBTSU9DU0lXRU5DT0RFRVhUICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdFTkNPREVFWFQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1BNS1NBICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KK307CisKK2NvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWYgPQoreworCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGllZWU4MDIxMV9oYW5kbGVyKSwKKwkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBpZWVlODAyMTFfaGFuZGxlciwKKwkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gaWVlZTgwMjExX2dldF93aXJlbGVzc19zdGF0cywKK307CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmMgYi9uZXQvbWFjODAyMTEvd21lLmMKaW5kZXggNGUyMzY1OS4uNGU5NGU0MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5jCisrKyBiL25ldC9tYWM4MDIxMS93bWUuYwpAQCAtMTksMTAgKzE5LDEzIEBACiAjaW5jbHVkZSAid21lLmgiCiAKIC8qIG1heGltdW0gbnVtYmVyIG9mIGhhcmR3YXJlIHF1ZXVlcyB3ZSBzdXBwb3J0LiAqLwotI2RlZmluZSBUQ184MDIxMV9NQVhfUVVFVUVTIDgKKyNkZWZpbmUgVENfODAyMTFfTUFYX1FVRVVFUyAxNgorCitjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XSA9IHsgMiwgMywgMywgMiwgMSwgMSwgMCwgMCB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX2RhdGEKIHsKKwl1bnNpZ25lZCBsb25nIHFkaXNjX3Bvb2xbQklUU19UT19MT05HUyhUQ184MDIxMV9NQVhfUVVFVUVTKV07CiAJc3RydWN0IHRjZl9wcm90byAqZmlsdGVyX2xpc3Q7CiAJc3RydWN0IFFkaXNjICpxdWV1ZXNbVENfODAyMTFfTUFYX1FVRVVFU107CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCByZXF1ZXVlZFtUQ184MDIxMV9NQVhfUVVFVUVTXTsKQEAgLTk4LDcgKzEwMSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJdW5zaWduZWQgc2hvcnQgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCWludCBxb3M7Ci0JY29uc3QgaW50IGllZWU4MDJfMWRfdG9fYWNbOF0gPSB7IDIsIDMsIDMsIDIsIDEsIDEsIDAsIDAgfTsKIAogCS8qIHNlZSBpZiBmcmFtZSBpcyBkYXRhIG9yIG5vbiBkYXRhIGZyYW1lICovCiAJaWYgKHVubGlrZWx5KChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkpIHsKQEAgLTE0Niw5ICsxNDgsMjYgQEAKIAl1bnNpZ25lZCBzaG9ydCBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJc3RydWN0IFFkaXNjICpxZGlzYzsKIAlpbnQgZXJyLCBxdWV1ZTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1OCB0aWQ7CiAKIAlpZiAocGt0X2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1RYUERfUkVRVUVVRSkgewotCQlza2JfcXVldWVfdGFpbCgmcS0+cmVxdWV1ZWRbcGt0X2RhdGEtPnF1ZXVlXSwgc2tiKTsKKwkJcXVldWUgPSBwa3RfZGF0YS0+cXVldWU7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKwkJdGlkID0gc2tiLT5wcmlvcml0eSAmIFFPU19DT05UUk9MX1RBRzFEX01BU0s7CisJCWlmIChzdGEpIHsKKwkJCWludCBhbXBkdV9xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKKwkJCWlmICgoYW1wZHVfcXVldWUgPCBsb2NhbC0+aHcucXVldWVzKSAmJgorCQkJICAgIHRlc3RfYml0KGFtcGR1X3F1ZXVlLCBxLT5xZGlzY19wb29sKSkgeworCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7CisJCQkJcGt0X2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9UWFBEX0FNUERVOworCQkJfSBlbHNlIHsKKwkJCQlwa3RfZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWFBEX0FNUERVOworCQkJfQorCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlza2JfcXVldWVfdGFpbCgmcS0+cmVxdWV1ZWRbcXVldWVdLCBza2IpOwogCQlxZC0+cS5xbGVuKys7CiAJCXJldHVybiAwOwogCX0KQEAgLTE1OSwxNCArMTc4LDMxIEBACiAJICovCiAJaWYgKFdMQU5fRkNfSVNfUU9TX0RBVEEoZmMpKSB7CiAJCXU4ICpwID0gc2tiLT5kYXRhICsgaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpIC0gMjsKLQkJdTggcW9zX2hkciA9IHNrYi0+cHJpb3JpdHkgJiBRT1NfQ09OVFJPTF9UQUcxRF9NQVNLOworCQl1OCBhY2tfcG9saWN5ID0gMDsKKwkJdGlkID0gc2tiLT5wcmlvcml0eSAmIFFPU19DT05UUk9MX1RBRzFEX01BU0s7CiAJCWlmIChsb2NhbC0+d2lmaV93bWVfbm9hY2tfdGVzdCkKLQkJCXFvc19oZHIgfD0gUU9TX0NPTlRST0xfQUNLX1BPTElDWV9OT0FDSyA8PAorCQkJYWNrX3BvbGljeSB8PSBRT1NfQ09OVFJPTF9BQ0tfUE9MSUNZX05PQUNLIDw8CiAJCQkJCVFPU19DT05UUk9MX0FDS19QT0xJQ1lfU0hJRlQ7CiAJCS8qIHFvcyBoZWFkZXIgaXMgMiBieXRlcywgc2Vjb25kIHJlc2VydmVkICovCi0JCSpwID0gcW9zX2hkcjsKKwkJKnAgPSBhY2tfcG9saWN5IHwgdGlkOwogCQlwKys7CiAJCSpwID0gMDsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKwkJaWYgKHN0YSkgeworCQkJaW50IGFtcGR1X3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOworCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGxvY2FsLT5ody5xdWV1ZXMpICYmCisJCQkJdGVzdF9iaXQoYW1wZHVfcXVldWUsIHEtPnFkaXNjX3Bvb2wpKSB7CisJCQkJcXVldWUgPSBhbXBkdV9xdWV1ZTsKKwkJCQlwa3RfZGF0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYUERfQU1QRFU7CisJCQl9IGVsc2UgeworCQkJCXBrdF9kYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYUERfQU1QRFU7CisJCQl9CisJCX0KKworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlpZiAodW5saWtlbHkocXVldWUgPj0gbG9jYWwtPmh3LnF1ZXVlcykpIHsKQEAgLTE4NCw2ICsyMjAsNyBAQAogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQllcnIgPSBORVRfWE1JVF9EUk9QOwogCX0gZWxzZSB7CisJCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBRT1NfQ09OVFJPTF9UQUcxRF9NQVNLOwogCQlwa3RfZGF0YS0+cXVldWUgPSAodW5zaWduZWQgaW50KSBxdWV1ZTsKIAkJcWRpc2MgPSBxLT5xdWV1ZXNbcXVldWVdOwogCQllcnIgPSBxZGlzYy0+ZW5xdWV1ZShza2IsIHFkaXNjKTsKQEAgLTIzNSwxMCArMjcyLDExIEBACiAJLyogY2hlY2sgYWxsIHRoZSBoL3cgcXVldWVzIGluIG51bWVyaWMvcHJpb3JpdHkgb3JkZXIgKi8KIAlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBody0+cXVldWVzOyBxdWV1ZSsrKSB7CiAJCS8qIHNlZSBpZiB0aGVyZSBpcyByb29tIGluIHRoaXMgaGFyZHdhcmUgcXVldWUgKi8KLQkJaWYgKHRlc3RfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYsCi0JCQkgICAgICZsb2NhbC0+c3RhdGVbcXVldWVdKSB8fAotCQkgICAgdGVzdF9iaXQoSUVFRTgwMjExX0xJTktfU1RBVEVfUEVORElORywKLQkJCSAgICAgJmxvY2FsLT5zdGF0ZVtxdWV1ZV0pKQorCQlpZiAoKHRlc3RfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1hPRkYsCisJCQkJJmxvY2FsLT5zdGF0ZVtxdWV1ZV0pKSB8fAorCQkgICAgKHRlc3RfYml0KElFRUU4MDIxMV9MSU5LX1NUQVRFX1BFTkRJTkcsCisJCQkJJmxvY2FsLT5zdGF0ZVtxdWV1ZV0pKSB8fAorCQkJICghdGVzdF9iaXQocXVldWUsIHEtPnFkaXNjX3Bvb2wpKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIHRoZXJlIGlzIHNwYWNlIC0gdHJ5IGFuZCBnZXQgYSBmcmFtZSAqLwpAQCAtMzYwLDYgKzM5OCwxMCBAQAogCQl9CiAJfQogCisJLyogcmVzZXJ2ZSBhbGwgbGVnYWN5IFFvUyBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWluKElFRUU4MDIxMV9UWF9RVUVVRV9EQVRBNCwgcXVldWVzKTsgaSsrKQorCQlzZXRfYml0KGksIHEtPnFkaXNjX3Bvb2wpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjA1LDMgKzY0Nyw4MCBAQAogewogCXVucmVnaXN0ZXJfcWRpc2MoJndtZV9xZGlzY19vcHMpOwogfQorCitpbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX2RhdGEgKnEgPQorCQkJcWRpc2NfcHJpdihsb2NhbC0+bWRldi0+cWRpc2Nfc2xlZXBpbmcpOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCisJLyogcHJlcGFyZSB0aGUgZmlsdGVyIGFuZCBzYXZlIGl0IGZvciB0aGUgU1cgcXVldWUKKwkgKiBtYXRjaGluZyB0aGUgcmVjaWV2ZWQgSFcgcXVldWUgKi8KKworCS8qIHRyeSB0byBnZXQgYSBRZGlzYyBmcm9tIHRoZSBwb29sICovCisJZm9yIChpID0gSUVFRTgwMjExX1RYX1FVRVVFX0JFQUNPTjsgaSA8IGxvY2FsLT5ody5xdWV1ZXM7IGkrKykKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksIHEtPnFkaXNjX3Bvb2wpKSB7CisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShsb2NhbF90b19odyhsb2NhbCksIGkpOworCQkJc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gaTsKKworCQkJLyogSUYgdGhlcmUgYXJlIGFscmVhZHkgcGVuZGluZyBwYWNrZXRzCisJCQkgKiBvbiB0aGlzIHRpZCBmaXJzdCB3ZSBuZWVkIHRvIGRyYWluIHRoZW0KKwkJCSAqIG9uIHRoZSBwcmV2aW91cyBxdWV1ZQorCQkJICogc2luY2UgSFQgaXMgc3RyaWN0IGluIG9yZGVyICovCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICJhbGxvY2F0ZWQgYWdncmVnYXRpb24gcXVldWUiCisJCQkJCSIgJWQgdGlkICVkIGFkZHIgJXMgcG9vbD0weCVsWCIsCisJCQkJCWksIHRpZCwgcHJpbnRfbWFjKG1hYywgc3RhLT5hZGRyKSwKKwkJCQkJcS0+cWRpc2NfcG9vbFswXSk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCQlyZXR1cm4gMDsKKwkJfQorCisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qKgorICogdGhlIGNhbGxlciBuZWVkcyB0byBob2xkIGxvY2FsLT5tZGV2LT5xdWV1ZV9sb2NrCisgKi8KK3ZvaWQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJICAgdTggcmVxdWV1ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX2RhdGEgKnEgPQorCQlxZGlzY19wcml2KGxvY2FsLT5tZGV2LT5xZGlzY19zbGVlcGluZyk7CisJaW50IGFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKKworCS8qIHJldHVybiB0aGUgcWRpc2MgdG8gdGhlIHBvb2wgKi8KKwljbGVhcl9iaXQoYWdnX3F1ZXVlLCBxLT5xZGlzY19wb29sKTsKKwlzdGEtPnRpZF90b190eF9xW3RpZF0gPSBsb2NhbC0+aHcucXVldWVzOworCisJaWYgKHJlcXVldWUpCisJCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBhZ2dfcXVldWUpOworCWVsc2UKKwkJcS0+cXVldWVzW2FnZ19xdWV1ZV0tPm9wcy0+cmVzZXQocS0+cXVldWVzW2FnZ19xdWV1ZV0pOworfQorCit2b2lkIGllZWU4MDIxMV9yZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcXVldWUpCit7CisJc3RydWN0IFFkaXNjICpyb290X3FkID0gbG9jYWwtPm1kZXYtPnFkaXNjX3NsZWVwaW5nOworCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYocm9vdF9xZCk7CisJc3RydWN0IFFkaXNjICpxZGlzYyA9IHEtPnF1ZXVlc1txdWV1ZV07CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJdTMyIGxlbiA9IHFkaXNjLT5xLnFsZW47CisKKwlpZiAoIXFkaXNjIHx8ICFxZGlzYy0+ZGVxdWV1ZSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgInJlcXVldWU6IHFsZW4gPSAlZFxuIiwgcWRpc2MtPnEucWxlbik7CisJZm9yIChsZW4gPSBxZGlzYy0+cS5xbGVuOyBsZW4gPiAwOyBsZW4tLSkgeworCQlza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7CisJCXJvb3RfcWQtPnEucWxlbi0tOworCQkvKiBwYWNrZXQgd2lsbCBiZSBjbGFzc2lmaWVkIGFnYWluIGFuZCAqLworCQkvKiBza2ItPnBhY2tldF9kYXRhLT5xdWV1ZSB3aWxsIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkICovCisJCWlmIChza2IpCisJCQl3bWVfcWRpc2NvcF9lbnF1ZXVlKHNrYiwgcm9vdF9xZCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dtZS5oIGIvbmV0L21hYzgwMjExL3dtZS5oCmluZGV4IDc2YzcxM2EuLmZjYzZiMDUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93bWUuaAorKysgYi9uZXQvbWFjODAyMTEvd21lLmgKQEAgLTI0LDYgKzI0LDggQEAKIAogI2RlZmluZSBRT1NfQ09OVFJPTF9UQUcxRF9NQVNLIDB4MDcKIAorZXh0ZXJuIGNvbnN0IGludCBpZWVlODAyXzFkX3RvX2FjWzhdOworCiBzdGF0aWMgaW5saW5lIGludCBXTEFOX0ZDX0lTX1FPU19EQVRBKHUxNiBmYykKIHsKIAlyZXR1cm4gKGZjICYgMHg4QykgPT0gMHg4ODsKQEAgLTMyLDcgKzM0LDEyIEBACiAjaWZkZWYgQ09ORklHX05FVF9TQ0hFRAogdm9pZCBpZWVlODAyMTFfaW5zdGFsbF9xZGlzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBpZWVlODAyMTFfcWRpc2NfaW5zdGFsbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCitpbnQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpOwordm9pZCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICB1OCByZXF1ZXVlKTsKK3ZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSk7CiBpbnQgaWVlZTgwMjExX3dtZV9yZWdpc3Rlcih2b2lkKTsKIHZvaWQgaWVlZTgwMjExX3dtZV91bnJlZ2lzdGVyKHZvaWQpOwogI2Vsc2UKQEAgLTQzLDcgKzUwLDE5IEBACiB7CiAJcmV0dXJuIDA7CiB9Ci0KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9odF9hZ2dfcXVldWVfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkKQoreworCXJldHVybiAtRUFHQUlOOworfQorc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCQkJIHU4IHJlcXVldWUpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSkKK3sKK30KIHN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV93bWVfcmVnaXN0ZXIodm9pZCkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCA2ZjA0MzExLi40NTcwOWFkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC03MCw4ICs3MCw4IEBACiB9CiAKIAotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4KQoraWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJdTggKmRhdGEsICpzYSwgKmRhLCAqa2V5LCAqbWljLCBxb3NfdGlkOwogCXNpemVfdCBkYXRhX2xlbjsKQEAgLTg0LDE4ICs4NCwxOCBAQAogCiAJaWYgKCF0eC0+a2V5IHx8IHR4LT5rZXktPmNvbmYuYWxnICE9IEFMR19US0lQIHx8IHNrYi0+bGVuIDwgMjQgfHwKIAkgICAgIVdMQU5fRkNfREFUQV9QUkVTRU5UKGZjKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJCXJldHVybiBUWF9DT05USU5VRTsKIAogCWlmIChpZWVlODAyMTFfZ2V0X2hkcl9pbmZvKHNrYiwgJnNhLCAmZGEsICZxb3NfdGlkLCAmZGF0YSwgJmRhdGFfbGVuKSkKLQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJcmV0dXJuIFRYX0RST1A7CiAKIAlpZiAoKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmCi0JICAgICEodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX0ZSQUdNRU5URUQpICYmCisJICAgICEodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQpICYmCiAJICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSAmJgogCSAgICAhd3BhX3Rlc3QpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIE1pY2hhZWwgTUlDCiAJCSAqLwotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCX0KIAogCWlmIChza2JfdGFpbHJvb20oc2tiKSA8IE1JQ0hBRUxfTUlDX0xFTikgewpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQkJCSAgICAgIEdGUF9BVE9NSUMpKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkgIgogCQkJICAgICAgICJmb3IgTWljaGFlbCBNSUNcbiIsIHR4LT5kZXYtPm5hbWUpOwotCQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJCXJldHVybiBUWF9EUk9QOwogCQl9CiAJfQogCkBAIC0xMTksMTIgKzExOSwxMiBAQAogCW1pYyA9IHNrYl9wdXQoc2tiLCBNSUNIQUVMX01JQ19MRU4pOwogCW1pY2hhZWxfbWljKGtleSwgZGEsIHNhLCBxb3NfdGlkICYgMHgwZiwgZGF0YSwgZGF0YV9sZW4sIG1pYyk7CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKIAotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfcnhfaF9taWNoYWVsX21pY192ZXJpZnkoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4KQoraWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX3J4X2hfbWljaGFlbF9taWNfdmVyaWZ5KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJdTggKmRhdGEsICpzYSwgKmRhLCAqa2V5ID0gTlVMTCwgcW9zX3RpZDsKIAlzaXplX3QgZGF0YV9sZW47CkBAIC0xMzksMTYgKzEzOSwxNiBAQAogCS8qCiAJICogTm8gd2F5IHRvIHZlcmlmeSB0aGUgTUlDIGlmIHRoZSBoYXJkd2FyZSBzdHJpcHBlZCBpdAogCSAqLwotCWlmIChyeC0+dS5yeC5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfU1RSSVBQRUQpCi0JCXJldHVybiBUWFJYX0NPTlRJTlVFOworCWlmIChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19NTUlDX1NUUklQUEVEKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAoIXJ4LT5rZXkgfHwgcngtPmtleS0+Y29uZi5hbGcgIT0gQUxHX1RLSVAgfHwKIAkgICAgIShyeC0+ZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpIHx8ICFXTEFOX0ZDX0RBVEFfUFJFU0VOVChmYykpCi0JCXJldHVybiBUWFJYX0NPTlRJTlVFOworCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAoaWVlZTgwMjExX2dldF9oZHJfaW5mbyhza2IsICZzYSwgJmRhLCAmcW9zX3RpZCwgJmRhdGEsICZkYXRhX2xlbikKIAkgICAgfHwgZGF0YV9sZW4gPCBNSUNIQUVMX01JQ19MRU4pCi0JCXJldHVybiBUWFJYX0RST1A7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJZGF0YV9sZW4gLT0gTUlDSEFFTF9NSUNfTEVOOwogCkBAIC0xNjEsMjkgKzE2MSwyOSBAQAogCQkJCSBBTEdfVEtJUF9URU1QX0FVVEhfVFhfTUlDX0tFWV07CiAJbWljaGFlbF9taWMoa2V5LCBkYSwgc2EsIHFvc190aWQgJiAweDBmLCBkYXRhLCBkYXRhX2xlbiwgbWljKTsKIAlpZiAobWVtY21wKG1pYywgZGF0YSArIGRhdGFfbGVuLCBNSUNIQUVMX01JQ19MRU4pICE9IDAgfHwgd3BhX3Rlc3QpIHsKLQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1RYUlhEX1JYUkFfTUFUQ0gpKQotCQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW52YWxpZCBNaWNoYWVsIE1JQyBpbiBkYXRhIGZyYW1lIGZyb20gIgogCQkgICAgICAgIiVzXG4iLCByeC0+ZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBzYSkpOwogCiAJCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPmRldiwgcngtPmtleS0+Y29uZi5rZXlpZHgsCiAJCQkJCQkodm9pZCAqKSBza2ItPmRhdGEpOwotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAl9CiAKIAkvKiByZW1vdmUgTWljaGFlbCBNSUMgZnJvbSBwYXlsb2FkICovCiAJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTik7CiAKIAkvKiB1cGRhdGUgSVYgaW4ga2V5IGluZm9ybWF0aW9uIHRvIGJlIGFibGUgdG8gZGV0ZWN0IHJlcGxheXMgKi8KLQlyeC0+a2V5LT51LnRraXAuaXYzMl9yeFtyeC0+dS5yeC5xdWV1ZV0gPSByeC0+dS5yeC50a2lwX2l2MzI7Ci0JcngtPmtleS0+dS50a2lwLml2MTZfcnhbcngtPnUucngucXVldWVdID0gcngtPnUucngudGtpcF9pdjE2OworCXJ4LT5rZXktPnUudGtpcC5pdjMyX3J4W3J4LT5xdWV1ZV0gPSByeC0+dGtpcF9pdjMyOworCXJ4LT5rZXktPnUudGtpcC5pdjE2X3J4W3J4LT5xdWV1ZV0gPSByeC0+dGtpcF9pdjE2OwogCi0JcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQogCiAKLXN0YXRpYyBpbnQgdGtpcF9lbmNyeXB0X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgsCitzdGF0aWMgaW50IHRraXBfZW5jcnlwdF9za2Ioc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwKIAkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGVzdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQkJCQkgICAgMHg3ZiksCiAJCQkJICAgICAgKHU4KSBrZXktPnUudGtpcC5pdjE2KTsKIAotCQl0eC0+dS50eC5jb250cm9sLT5rZXlfaWR4ID0gdHgtPmtleS0+Y29uZi5od19rZXlfaWR4OworCQl0eC0+Y29udHJvbC0+a2V5X2lkeCA9IHR4LT5rZXktPmNvbmYuaHdfa2V5X2lkeDsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yNDIsNDIgKzI0Miw0MiBAQAogfQogCiAKLWllZWU4MDIxMV90eHJ4X3Jlc3VsdAotaWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnR4KQoraWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKIAlpbnQgd3BhX3Rlc3QgPSAwLCB0ZXN0ID0gMDsKIAotCXR4LT51LnR4LmNvbnRyb2wtPmljdl9sZW4gPSBUS0lQX0lDVl9MRU47Ci0JdHgtPnUudHguY29udHJvbC0+aXZfbGVuID0gVEtJUF9JVl9MRU47Ci0JaWVlZTgwMjExX3R4X3NldF9pc3dlcCh0eCk7CisJdHgtPmNvbnRyb2wtPmljdl9sZW4gPSBUS0lQX0lDVl9MRU47CisJdHgtPmNvbnRyb2wtPml2X2xlbiA9IFRLSVBfSVZfTEVOOworCWllZWU4MDIxMV90eF9zZXRfcHJvdGVjdGVkKHR4KTsKIAogCWlmICgodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYKIAkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSAmJgogCSAgICAhd3BhX3Rlc3QpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIElWL0lDViAqLwotCQl0eC0+dS50eC5jb250cm9sLT5rZXlfaWR4ID0gdHgtPmtleS0+Y29uZi5od19rZXlfaWR4OwotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJdHgtPmNvbnRyb2wtPmtleV9pZHggPSB0eC0+a2V5LT5jb25mLmh3X2tleV9pZHg7CisJCXJldHVybiBUWF9DT05USU5VRTsKIAl9CiAKIAlpZiAodGtpcF9lbmNyeXB0X3NrYih0eCwgc2tiLCB0ZXN0KSA8IDApCi0JCXJldHVybiBUWFJYX0RST1A7CisJCXJldHVybiBUWF9EUk9QOwogCi0JaWYgKHR4LT51LnR4LmV4dHJhX2ZyYWcpIHsKKwlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKIAkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+dS50eC5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlpZiAodGtpcF9lbmNyeXB0X3NrYih0eCwgdHgtPnUudHguZXh0cmFfZnJhZ1tpXSwgdGVzdCkKKwkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7CisJCQlpZiAodGtpcF9lbmNyeXB0X3NrYih0eCwgdHgtPmV4dHJhX2ZyYWdbaV0sIHRlc3QpCiAJCQkgICAgPCAwKQotCQkJCXJldHVybiBUWFJYX0RST1A7CisJCQkJcmV0dXJuIFRYX0RST1A7CiAJCX0KIAl9CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKIAotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfY3J5cHRvX3RraXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX3RraXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgcngtPnNrYi0+ZGF0YTsKIAl1MTYgZmM7CkBAIC0yOTAsMTkgKzI5MCwxOSBAQAogCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKTsKIAogCWlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJaWYgKCFyeC0+c3RhIHx8IHNrYi0+bGVuIC0gaGRybGVuIDwgMTIpCi0JCXJldHVybiBUWFJYX0RST1A7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCi0JaWYgKHJ4LT51LnJ4LnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSB7Ci0JCWlmIChyeC0+dS5yeC5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSB7CisJaWYgKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgeworCQlpZiAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpIHsKIAkJCS8qCiAJCQkgKiBIYXJkd2FyZSB0b29rIGNhcmUgb2YgYWxsIHByb2Nlc3NpbmcsIGluY2x1ZGluZwogCQkJICogcmVwbGF5IHByb3RlY3Rpb24sIGFuZCBzdHJpcHBlZCB0aGUgSUNWL0lWIHNvCiAJCQkgKiB3ZSBjYW5ub3QgZG8gYW55IGNoZWNrcyBoZXJlLgogCQkJICovCi0JCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJCXJldHVybiBSWF9DT05USU5VRTsKIAkJfQogCiAJCS8qIGxldCBUS0lQIGNvZGUgdmVyaWZ5IElWLCBidXQgc2tpcCBkZWNyeXB0aW9uICovCkBAIC0zMTIsOSArMzEyLDkgQEAKIAlyZXMgPSBpZWVlODAyMTFfdGtpcF9kZWNyeXB0X2RhdGEocngtPmxvY2FsLT53ZXBfcnhfdGZtLAogCQkJCQkgIGtleSwgc2tiLT5kYXRhICsgaGRybGVuLAogCQkJCQkgIHNrYi0+bGVuIC0gaGRybGVuLCByeC0+c3RhLT5hZGRyLAotCQkJCQkgIGh3YWNjZWwsIHJ4LT51LnJ4LnF1ZXVlLAotCQkJCQkgICZyeC0+dS5yeC50a2lwX2l2MzIsCi0JCQkJCSAgJnJ4LT51LnJ4LnRraXBfaXYxNik7CisJCQkJCSAgaGRyLT5hZGRyMSwgaHdhY2NlbCwgcngtPnF1ZXVlLAorCQkJCQkgICZyeC0+dGtpcF9pdjMyLAorCQkJCQkgICZyeC0+dGtpcF9pdjE2KTsKIAlpZiAocmVzICE9IFRLSVBfREVDUllQVF9PSyB8fCB3cGFfdGVzdCkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtMzIyLDcgKzMyMiw3IEBACiAJCQkgICAgICAgImZyYW1lIGZyb20gJXMgKHJlcz0lZClcbiIsIHJ4LT5kZXYtPm5hbWUsCiAJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgcngtPnN0YS0+YWRkciksIHJlcyk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0RFQlVHICovCi0JCXJldHVybiBUWFJYX0RST1A7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCX0KIAogCS8qIFRyaW0gSUNWICovCkBAIC0zMzIsNyArMzMyLDcgQEAKIAltZW1tb3ZlKHNrYi0+ZGF0YSArIFRLSVBfSVZfTEVOLCBza2ItPmRhdGEsIGhkcmxlbik7CiAJc2tiX3B1bGwoc2tiLCBUS0lQX0lWX0xFTik7CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKIApAQCAtNDI5LDcgKzQyOSw3IEBACiB9CiAKIAotc3RhdGljIGludCBjY21wX2VuY3J5cHRfc2tiKHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICp0eCwKK3N0YXRpYyBpbnQgY2NtcF9lbmNyeXB0X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LAogCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0ZXN0KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAKIAlpZiAoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7CiAJCS8qIGh3YWNjZWwgLSB3aXRoIHByZWFsbG9jYXRlZCByb29tIGZvciBDQ01QIGhlYWRlciAqLwotCQl0eC0+dS50eC5jb250cm9sLT5rZXlfaWR4ID0ga2V5LT5jb25mLmh3X2tleV9pZHg7CisJCXR4LT5jb250cm9sLT5rZXlfaWR4ID0ga2V5LT5jb25mLmh3X2tleV9pZHg7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDkxLDQyICs0OTEsNDIgQEAKIH0KIAogCi1pZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV9jcnlwdG9fY2NtcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhyeF9kYXRhICp0eCkKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fY2NtcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CiAJaW50IHRlc3QgPSAwOwogCi0JdHgtPnUudHguY29udHJvbC0+aWN2X2xlbiA9IENDTVBfTUlDX0xFTjsKLQl0eC0+dS50eC5jb250cm9sLT5pdl9sZW4gPSBDQ01QX0hEUl9MRU47Ci0JaWVlZTgwMjExX3R4X3NldF9pc3dlcCh0eCk7CisJdHgtPmNvbnRyb2wtPmljdl9sZW4gPSBDQ01QX01JQ19MRU47CisJdHgtPmNvbnRyb2wtPml2X2xlbiA9IENDTVBfSERSX0xFTjsKKwlpZWVlODAyMTFfdHhfc2V0X3Byb3RlY3RlZCh0eCk7CiAKIAlpZiAoKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmCiAJICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAgIgogCQkgKiBoZWFkZXIgb3IgTUlDIGZpZWxkcyAqLwotCQl0eC0+dS50eC5jb250cm9sLT5rZXlfaWR4ID0gdHgtPmtleS0+Y29uZi5od19rZXlfaWR4OwotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJdHgtPmNvbnRyb2wtPmtleV9pZHggPSB0eC0+a2V5LT5jb25mLmh3X2tleV9pZHg7CisJCXJldHVybiBUWF9DT05USU5VRTsKIAl9CiAKIAlpZiAoY2NtcF9lbmNyeXB0X3NrYih0eCwgc2tiLCB0ZXN0KSA8IDApCi0JCXJldHVybiBUWFJYX0RST1A7CisJCXJldHVybiBUWF9EUk9QOwogCi0JaWYgKHR4LT51LnR4LmV4dHJhX2ZyYWcpIHsKKwlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKIAkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+dS50eC5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlpZiAoY2NtcF9lbmNyeXB0X3NrYih0eCwgdHgtPnUudHguZXh0cmFfZnJhZ1tpXSwgdGVzdCkKKwkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7CisJCQlpZiAoY2NtcF9lbmNyeXB0X3NrYih0eCwgdHgtPmV4dHJhX2ZyYWdbaV0sIHRlc3QpCiAJCQkgICAgPCAwKQotCQkJCXJldHVybiBUWFJYX0RST1A7CisJCQkJcmV0dXJuIFRYX0RST1A7CiAJCX0KIAl9CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKIAotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgcngtPnNrYi0+ZGF0YTsKIAl1MTYgZmM7CkBAIC01NDEsMjEgKzU0MSwyMSBAQAogCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKTsKIAogCWlmICgocngtPmZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKQotCQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbiAtIENDTVBfSERSX0xFTiAtIENDTVBfTUlDX0xFTjsKIAlpZiAoIXJ4LT5zdGEgfHwgZGF0YV9sZW4gPCAwKQotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAotCWlmICgocngtPnUucnguc3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCi0JICAgIChyeC0+dS5yeC5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSkKLQkJcmV0dXJuIFRYUlhfQ09OVElOVUU7CisJaWYgKChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCisJICAgIChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKIAogCSh2b2lkKSBjY21wX2hkcjJwbihwbiwgc2tiLT5kYXRhICsgaGRybGVuKTsKIAotCWlmIChtZW1jbXAocG4sIGtleS0+dS5jY21wLnJ4X3BuW3J4LT51LnJ4LnF1ZXVlXSwgQ0NNUF9QTl9MRU4pIDw9IDApIHsKKwlpZiAobWVtY21wKHBuLCBrZXktPnUuY2NtcC5yeF9wbltyeC0+cXVldWVdLCBDQ01QX1BOX0xFTikgPD0gMCkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVRwotCQl1OCAqcHBuID0ga2V5LT51LmNjbXAucnhfcG5bcngtPnUucngucXVldWVdOworCQl1OCAqcHBuID0ga2V5LT51LmNjbXAucnhfcG5bcngtPnF1ZXVlXTsKIAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENDTVAgcmVwbGF5IGRldGVjdGVkIGZvciBSWCBmcmFtZSBmcm9tICIKIAkJICAgICAgICIlcyAoUlggUE4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IDw9IHByZXYuIFBOICIKQEAgLTU2NSwxMCArNTY1LDEwIEBACiAJCSAgICAgICBwcG5bMF0sIHBwblsxXSwgcHBuWzJdLCBwcG5bM10sIHBwbls0XSwgcHBuWzVdKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfREVCVUcgKi8KIAkJa2V5LT51LmNjbXAucmVwbGF5cysrOwotCQlyZXR1cm4gVFhSWF9EUk9QOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAl9CiAKLQlpZiAoIShyeC0+dS5yeC5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpIHsKKwlpZiAoIShyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpKSB7CiAJCS8qIGhhcmR3YXJlIGRpZG4ndCBkZWNyeXB0L3ZlcmlmeSBNSUMgKi8KIAkJdTggKnNjcmF0Y2gsICpiXzAsICphYWQ7CiAKQEAgLTU4OSwxNiArNTg5LDE2IEBACiAJCQkJICAgICAgICJmb3IgUlggZnJhbWUgZnJvbSAlc1xuIiwgcngtPmRldi0+bmFtZSwKIAkJCQkgICAgICAgcHJpbnRfbWFjKG1hYywgcngtPnN0YS0+YWRkcikpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVRyAqLwotCQkJcmV0dXJuIFRYUlhfRFJPUDsKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCQl9CiAJfQogCi0JbWVtY3B5KGtleS0+dS5jY21wLnJ4X3BuW3J4LT51LnJ4LnF1ZXVlXSwgcG4sIENDTVBfUE5fTEVOKTsKKwltZW1jcHkoa2V5LT51LmNjbXAucnhfcG5bcngtPnF1ZXVlXSwgcG4sIENDTVBfUE5fTEVOKTsKIAogCS8qIFJlbW92ZSBDQ01QIGhlYWRlciBhbmQgTUlDICovCiAJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIENDTVBfTUlDX0xFTik7CiAJbWVtbW92ZShza2ItPmRhdGEgKyBDQ01QX0hEUl9MRU4sIHNrYi0+ZGF0YSwgaGRybGVuKTsKIAlza2JfcHVsbChza2IsIENDTVBfSERSX0xFTik7CiAKLQlyZXR1cm4gVFhSWF9DT05USU5VRTsKKwlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd3BhLmggYi9uZXQvbWFjODAyMTEvd3BhLmgKaW5kZXggNDlkODBjZi4uZDQyZDIyMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dwYS5oCisrKyBiL25ldC9tYWM4MDIxMS93cGEuaApAQCAtMTMsMTkgKzEzLDE5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogCi1pZWVlODAyMTFfdHhyeF9yZXN1bHQKLWllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpOwotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfcnhfaF9taWNoYWVsX21pY192ZXJpZnkoc3RydWN0IGllZWU4MDIxMV90eHJ4X2RhdGEgKnJ4KTsKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KTsKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9yeF9oX21pY2hhZWxfbWljX3ZlcmlmeShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKIAotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfY3J5cHRvX3RraXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpOwotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfY3J5cHRvX3RraXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpOworaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX3RraXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKIAotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfY3J5cHRvX2NjbXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqdHgpOwotaWVlZTgwMjExX3R4cnhfcmVzdWx0Ci1pZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4cnhfZGF0YSAqcngpOworaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19jY21wX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKIAogI2VuZGlmIC8qIFdQQV9IICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggZGFmNWI4OC4uYzFmYzBmMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtODYsNiArODYsMTYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgYE4nLgogCitjb25maWcgTkZfQ1RfUFJPVE9fRENDUAorCXRyaXN0YXRlICdEQ0NQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKScKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAorCWhlbHAKKwkgIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlIGxheWVyIDMgaW5kZXBlbmRlbnQgY29ubmVjdGlvbgorCSAgdHJhY2tpbmcgY29kZSB3aWxsIGJlIGFibGUgdG8gZG8gc3RhdGUgdHJhY2tpbmcgb24gRENDUCBjb25uZWN0aW9ucy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCiBjb25maWcgTkZfQ1RfUFJPVE9fR1JFCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggZWE3NTA4My4uNWM0YjE4MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC0xMyw2ICsxMyw3IEBACiBvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSArPSBuZl9jb25udHJhY2subwogCiAjIFNDVFAgcHJvdG9jb2wgY29ubmVjdGlvbiB0cmFja2luZworb2JqLSQoQ09ORklHX05GX0NUX1BST1RPX0RDQ1ApICs9IG5mX2Nvbm50cmFja19wcm90b19kY2NwLm8KIG9iai0kKENPTkZJR19ORl9DVF9QUk9UT19HUkUpICs9IG5mX2Nvbm50cmFja19wcm90b19ncmUubwogb2JqLSQoQ09ORklHX05GX0NUX1BST1RPX1NDVFApICs9IG5mX2Nvbm50cmFja19wcm90b19zY3RwLm8KIG9iai0kKENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFKSArPSBuZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IGM0MDY1YjguLjI5MmZhMjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0xNjUsNiArMTY1LDE0IEBACiAJdW5zaWduZWQgaW50IHZlcmRpY3Q7CiAJaW50IHJldCA9IDA7CiAKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJc3RydWN0IG5ldCAqbmV0OworCisJbmV0ID0gaW5kZXYgPT0gTlVMTCA/IGRldl9uZXQob3V0ZGV2KSA6IGRldl9uZXQoaW5kZXYpOworCWlmIChuZXQgIT0gJmluaXRfbmV0KQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCiAJLyogV2UgbWF5IGFscmVhZHkgaGF2ZSB0aGlzLCBidXQgcmVhZC1sb2NrcyBuZXN0IGFueXdheSAqLwogCXJjdV9yZWFkX2xvY2soKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCA3YjgyMzljLi4zOGFlZGVlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtNTMsNyArNTMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB7Ci0JY2hhcgkJCSpzdHJpbmc7CisJY29uc3QgY2hhcgkJKnN0cmluZzsKIAlzaXplX3QJCQlsZW47CiAJc3RydWN0IHRzX2NvbmZpZwkqdHM7CiB9IHNlYXJjaFtdIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC05MSw3ICs5MSw2IEBACiAJY2hhciBwYnVmW3NpemVvZigiNjU1MzUiKV0sICp0bXA7CiAJdV9pbnQxNl90IGxlbjsKIAlfX2JlMTYgcG9ydDsKLQlpbnQgZmFtaWx5ID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bTsKIAlpbnQgcmV0ID0gTkZfQUNDRVBUOwogCXR5cGVvZihuZl9uYXRfYW1hbmRhX2hvb2spIG5mX25hdF9hbWFuZGE7CiAKQEAgLTE0OCw3ICsxNDcsOSBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAkJdHVwbGUgPSAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlOwotCQluZl9jdF9leHBlY3RfaW5pdChleHAsIGZhbWlseSwgJnR1cGxlLT5zcmMudTMsICZ0dXBsZS0+ZHN0LnUzLAorCQluZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULAorCQkJCSAgbmZfY3RfbDNudW0oY3QpLAorCQkJCSAgJnR1cGxlLT5zcmMudTMsICZ0dXBsZS0+ZHN0LnUzLAogCQkJCSAgSVBQUk9UT19UQ1AsIE5VTEwsICZwb3J0KTsKIAogCQluZl9uYXRfYW1hbmRhID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9hbWFuZGFfaG9vayk7CkBAIC0xNjQsMjYgKzE2NSwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgYW1hbmRhX2V4cF9wb2xpY3kgPSB7CisJLm1heF9leHBlY3RlZAkJPSAzLAorCS50aW1lb3V0CQk9IDE4MCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBhbWFuZGFfaGVscGVyWzJdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZQkJCT0gImFtYW5kYSIsCi0JCS5tYXhfZXhwZWN0ZWQJCT0gMywKLQkJLnRpbWVvdXQJCT0gMTgwLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkuaGVscAkJCT0gYW1hbmRhX2hlbHAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAogCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAorCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKIAl7CiAJCS5uYW1lCQkJPSAiYW1hbmRhIiwKLQkJLm1heF9leHBlY3RlZAkJPSAzLAotCQkudGltZW91dAkJPSAxODAsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS5oZWxwCQkJPSBhbWFuZGFfaGVscCwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQ2LAogCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAorCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCAzMjdlODQ3Li40ZWFjNjVjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC05NCw3ICs5NCw3IEBACiAJCQkJbmZfY29ubnRyYWNrX2hhc2hfcm5kKTsKIH0KIAotaW50Citib29sCiBuZl9jdF9nZXRfdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdW5zaWduZWQgaW50IG5ob2ZmLAogCQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAJdHVwbGUtPnNyYy5sM251bSA9IGwzbnVtOwogCWlmIChsM3Byb3RvLT5wa3RfdG9fdHVwbGUoc2tiLCBuaG9mZiwgdHVwbGUpID09IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAl0dXBsZS0+ZHN0LnByb3RvbnVtID0gcHJvdG9udW07CiAJdHVwbGUtPmRzdC5kaXIgPSBJUF9DVF9ESVJfT1JJR0lOQUw7CkBAIC0xMTcsMTAgKzExNyw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9nZXRfdHVwbGUpOwogCi1pbnQgbmZfY3RfZ2V0X3R1cGxlcHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IG5ob2ZmLAotCQkgICAgICB1X2ludDE2X3QgbDNudW0sCi0JCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorYm9vbCBuZl9jdF9nZXRfdHVwbGVwcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCisJCSAgICAgICB1X2ludDE2X3QgbDNudW0sIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CkBAIC0xMzQsNyArMTMyLDcgQEAKIAlyZXQgPSBsM3Byb3RvLT5nZXRfbDRwcm90byhza2IsIG5ob2ZmLCAmcHJvdG9mZiwgJnByb3RvbnVtKTsKIAlpZiAocmV0ICE9IE5GX0FDQ0VQVCkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobDNudW0sIHByb3RvbnVtKTsKQEAgLTE0Nyw3ICsxNDUsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZ2V0X3R1cGxlcHIpOwogCi1pbnQKK2Jvb2wKIG5mX2N0X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8sCkBAIC0xNTcsNyArMTU1LDcgQEAKIAogCWludmVyc2UtPnNyYy5sM251bSA9IG9yaWctPnNyYy5sM251bTsKIAlpZiAobDNwcm90by0+aW52ZXJ0X3R1cGxlKGludmVyc2UsIG9yaWcpID09IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpbnZlcnNlLT5kc3QuZGlyID0gIW9yaWctPmRzdC5kaXI7CiAKQEAgLTE5NCw4ICsxOTIsNyBAQAogCSAqIGRlc3Ryb3lfY29ubnRyYWNrKCkgTVVTVCBOT1QgYmUgY2FsbGVkIHdpdGggYSB3cml0ZSBsb2NrCiAJICogdG8gbmZfY29ubnRyYWNrX2xvY2shISEgLUhXICovCiAJcmN1X3JlYWRfbG9jaygpOwotCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLmwzbnVtLAotCQkJCSAgICAgICBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnByb3RvbnVtKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCWlmIChsNHByb3RvICYmIGw0cHJvdG8tPmRlc3Ryb3kpCiAJCWw0cHJvdG8tPmRlc3Ryb3koY3QpOwogCkBAIC0yNTYsMTMgKzI1MywxOSBAQAogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sodHVwbGUpOwogCisJLyogRGlzYWJsZSBCSHMgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHdlIG5vcm1hbGx5IG5lZWQgdG8gZGlzYWJsZSB0aGVtCisJICogYXQgbGVhc3Qgb25jZSBmb3IgdGhlIHN0YXRzIGFueXdheS4KKwkgKi8KKwlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZl9jb25udHJhY2tfaGFzaFtoYXNoXSwgaG5vZGUpIHsKIAkJaWYgKG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSB7CiAJCQlORl9DVF9TVEFUX0lOQyhmb3VuZCk7CisJCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJCXJldHVybiBoOwogCQl9CiAJCU5GX0NUX1NUQVRfSU5DKHNlYXJjaGVkKTsKIAl9CisJbG9jYWxfYmhfZW5hYmxlKCk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTQwMCwxNyArNDAzLDIwIEBACiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayh0dXBsZSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJLyogRGlzYWJsZSBCSHMgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGVtIGF0CisJICogbGVhc3Qgb25jZSBmb3IgdGhlIHN0YXRzIGFueXdheS4KKwkgKi8KKwlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZl9jb25udHJhY2tfaGFzaFtoYXNoXSwgaG5vZGUpIHsKIAkJaWYgKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCkgIT0gaWdub3JlZF9jb25udHJhY2sgJiYKIAkJICAgIG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSB7CiAJCQlORl9DVF9TVEFUX0lOQyhmb3VuZCk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJTkZfQ1RfU1RBVF9JTkMoc2VhcmNoZWQpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzMwLDEwICs3MzYsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19pbik7CiAKLWludCBuZl9jdF9pbnZlcnRfdHVwbGVwcihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAotCQkJIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCitib29sIG5mX2N0X2ludmVydF90dXBsZXByKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmludmVyc2UsCisJCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7Ci0JaW50IHJldDsKKwlib29sIHJldDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlyZXQgPSBuZl9jdF9pbnZlcnRfdHVwbGUoaW52ZXJzZSwgb3JpZywKQEAgLTc1NywxMCArNzYzLDEwIEBACiAJTkZfQ1RfQVNTRVJUKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKTsKIAogCXByX2RlYnVnKCJBbHRlcmluZyByZXBseSB0dXBsZSBvZiAlcCB0byAiLCBjdCk7Ci0JTkZfQ1RfRFVNUF9UVVBMRShuZXdyZXBseSk7CisJbmZfY3RfZHVtcF90dXBsZShuZXdyZXBseSk7CiAKIAljdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUgPSAqbmV3cmVwbHk7Ci0JaWYgKGN0LT5tYXN0ZXIgfHwgKGhlbHAgJiYgaGVscC0+ZXhwZWN0aW5nICE9IDApKQorCWlmIChjdC0+bWFzdGVyIHx8IChoZWxwICYmICFobGlzdF9lbXB0eSgmaGVscC0+ZXhwZWN0YXRpb25zKSkpCiAJCXJldHVybjsKIAogCXJjdV9yZWFkX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKaW5kZXggZTA2YmYwMC4uZTMxYmVlYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTU0LDcgKzU0LDcgQEAKIAluZl9jdF9leHBlY3RfY291bnQtLTsKIAogCWhsaXN0X2RlbCgmZXhwLT5sbm9kZSk7Ci0JbWFzdGVyX2hlbHAtPmV4cGVjdGluZy0tOworCW1hc3Rlcl9oZWxwLT5leHBlY3RpbmdbZXhwLT5jbGFzc10tLTsKIAluZl9jdF9leHBlY3RfcHV0KGV4cCk7CiAKIAlORl9DVF9TVEFUX0lOQyhleHBlY3RfZGVsZXRlKTsKQEAgLTEyNiw5ICsxMjYsMjEgQEAKIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKIG5mX2N0X2ZpbmRfZXhwZWN0YXRpb24oY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaSwgKmV4cCA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQgaW50IGg7CiAKLQlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKHR1cGxlKTsKKwlpZiAoIW5mX2N0X2V4cGVjdF9jb3VudCkKKwkJcmV0dXJuIE5VTEw7CisKKwloID0gbmZfY3RfZXhwZWN0X2RzdF9oYXNoKHR1cGxlKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShpLCBuLCAmbmZfY3RfZXhwZWN0X2hhc2hbaF0sIGhub2RlKSB7CisJCWlmICghKGktPmZsYWdzICYgTkZfQ1RfRVhQRUNUX0lOQUNUSVZFKSAmJgorCQkgICAgbmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spKSB7CisJCQlleHAgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CiAJaWYgKCFleHApCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNTksNyArMTcxLDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKm5leHQ7CiAKIAkvKiBPcHRpbWl6YXRpb246IG1vc3QgY29ubmVjdGlvbiBuZXZlciBleHBlY3QgYW55IG90aGVycy4gKi8KLQlpZiAoIWhlbHAgfHwgaGVscC0+ZXhwZWN0aW5nID09IDApCisJaWYgKCFoZWxwKQogCQlyZXR1cm47CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgbiwgbmV4dCwgJmhlbHAtPmV4cGVjdGF0aW9ucywgbG5vZGUpIHsKQEAgLTE5Myw3ICsyMDUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgZXhwZWN0X21hdGNoZXMoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmEsCiAJCQkJIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpiKQogewotCXJldHVybiBhLT5tYXN0ZXIgPT0gYi0+bWFzdGVyCisJcmV0dXJuIGEtPm1hc3RlciA9PSBiLT5tYXN0ZXIgJiYgYS0+Y2xhc3MgPT0gYi0+Y2xhc3MKIAkJJiYgbmZfY3RfdHVwbGVfZXF1YWwoJmEtPnR1cGxlLCAmYi0+dHVwbGUpCiAJCSYmIG5mX2N0X3R1cGxlX21hc2tfZXF1YWwoJmEtPm1hc2ssICZiLT5tYXNrKTsKIH0KQEAgLTIyOCwxMCArMjQwLDExIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpOwogCi12b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIGludCBmYW1pbHksCi0JCSAgICAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKnNhZGRyLAotCQkgICAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkciwKLQkJICAgICAgIHVfaW50OF90IHByb3RvLCBfX2JlMTYgKnNyYywgX19iZTE2ICpkc3QpCit2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcywKKwkJICAgICAgIGludCBmYW1pbHksCisJCSAgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKnNhZGRyLAorCQkgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkciwKKwkJICAgICAgIHVfaW50OF90IHByb3RvLCBjb25zdCBfX2JlMTYgKnNyYywgY29uc3QgX19iZTE2ICpkc3QpCiB7CiAJaW50IGxlbjsKIApAQCAtMjQxLDYgKzI1NCw3IEBACiAJCWxlbiA9IDE2OwogCiAJZXhwLT5mbGFncyA9IDA7CisJZXhwLT5jbGFzcyA9IGNsYXNzOwogCWV4cC0+ZXhwZWN0Zm4gPSBOVUxMOwogCWV4cC0+aGVscGVyID0gTlVMTDsKIAlleHAtPnR1cGxlLnNyYy5sM251bSA9IGZhbWlseTsKQEAgLTI5NywxOSArMzExLDIxIEBACiBzdGF0aWMgdm9pZCBuZl9jdF9leHBlY3RfaW5zZXJ0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCiB7CiAJc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHAgPSBuZmN0X2hlbHAoZXhwLT5tYXN0ZXIpOworCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqcDsKIAl1bnNpZ25lZCBpbnQgaCA9IG5mX2N0X2V4cGVjdF9kc3RfaGFzaCgmZXhwLT50dXBsZSk7CiAKIAlhdG9taWNfaW5jKCZleHAtPnVzZSk7CiAKIAlobGlzdF9hZGRfaGVhZCgmZXhwLT5sbm9kZSwgJm1hc3Rlcl9oZWxwLT5leHBlY3RhdGlvbnMpOwotCW1hc3Rlcl9oZWxwLT5leHBlY3RpbmcrKzsKKwltYXN0ZXJfaGVscC0+ZXhwZWN0aW5nW2V4cC0+Y2xhc3NdKys7CiAKIAlobGlzdF9hZGRfaGVhZF9yY3UoJmV4cC0+aG5vZGUsICZuZl9jdF9leHBlY3RfaGFzaFtoXSk7CiAJbmZfY3RfZXhwZWN0X2NvdW50Kys7CiAKIAlzZXR1cF90aW1lcigmZXhwLT50aW1lb3V0LCBuZl9jdF9leHBlY3RhdGlvbl90aW1lZF9vdXQsCiAJCSAgICAodW5zaWduZWQgbG9uZylleHApOwotCWV4cC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIG1hc3Rlcl9oZWxwLT5oZWxwZXItPnRpbWVvdXQgKiBIWjsKKwlwID0gJm1hc3Rlcl9oZWxwLT5oZWxwZXItPmV4cGVjdF9wb2xpY3lbZXhwLT5jbGFzc107CisJZXhwLT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgcC0+dGltZW91dCAqIEhaOwogCWFkZF90aW1lcigmZXhwLT50aW1lb3V0KTsKIAogCWF0b21pY19pbmMoJmV4cC0+dXNlKTsKQEAgLTMxNywzNSArMzMzLDQxIEBACiB9CiAKIC8qIFJhY2Ugd2l0aCBleHBlY3RhdGlvbnMgYmVpbmcgdXNlZCBtZWFucyB3ZSBjb3VsZCBoYXZlIG5vbmUgdG8gZmluZDsgT0suICovCi1zdGF0aWMgdm9pZCBldmljdF9vbGRlc3RfZXhwZWN0KHN0cnVjdCBuZl9jb25uICptYXN0ZXIpCitzdGF0aWMgdm9pZCBldmljdF9vbGRlc3RfZXhwZWN0KHN0cnVjdCBuZl9jb25uICptYXN0ZXIsCisJCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5ldykKIHsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCA9IG5mY3RfaGVscChtYXN0ZXIpOwotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBOVUxMOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsICpsYXN0ID0gTlVMTDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGV4cCwgbiwgJm1hc3Rlcl9oZWxwLT5leHBlY3RhdGlvbnMsIGxub2RlKQotCQk7IC8qIG5vdGhpbmcgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeShleHAsIG4sICZtYXN0ZXJfaGVscC0+ZXhwZWN0YXRpb25zLCBsbm9kZSkgeworCQlpZiAoZXhwLT5jbGFzcyA9PSBuZXctPmNsYXNzKQorCQkJbGFzdCA9IGV4cDsKKwl9CiAKLQlpZiAoZXhwICYmIGRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkgewotCQluZl9jdF91bmxpbmtfZXhwZWN0KGV4cCk7Ci0JCW5mX2N0X2V4cGVjdF9wdXQoZXhwKTsKKwlpZiAobGFzdCAmJiBkZWxfdGltZXIoJmxhc3QtPnRpbWVvdXQpKSB7CisJCW5mX2N0X3VubGlua19leHBlY3QobGFzdCk7CisJCW5mX2N0X2V4cGVjdF9wdXQobGFzdCk7CiAJfQogfQogCiBzdGF0aWMgaW5saW5lIGludCByZWZyZXNoX3RpbWVyKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppKQogewogCXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKGktPm1hc3Rlcik7CisJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwOwogCiAJaWYgKCFkZWxfdGltZXIoJmktPnRpbWVvdXQpKQogCQlyZXR1cm4gMDsKIAotCWktPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBtYXN0ZXJfaGVscC0+aGVscGVyLT50aW1lb3V0KkhaOworCXAgPSAmbWFzdGVyX2hlbHAtPmhlbHBlci0+ZXhwZWN0X3BvbGljeVtpLT5jbGFzc107CisJaS0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIHAtPnRpbWVvdXQgKiBIWjsKIAlhZGRfdGltZXIoJmktPnRpbWVvdXQpOwogCXJldHVybiAxOwogfQogCiBpbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCkKIHsKKwljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnA7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7CiAJc3RydWN0IG5mX2Nvbm4gKm1hc3RlciA9IGV4cGVjdC0+bWFzdGVyOwogCXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKG1hc3Rlcik7CkBAIC0zNzQsMTQgKzM5NiwyMCBAQAogCQl9CiAJfQogCS8qIFdpbGwgYmUgb3ZlciBsaW1pdD8gKi8KLQlpZiAobWFzdGVyX2hlbHAtPmhlbHBlci0+bWF4X2V4cGVjdGVkICYmCi0JICAgIG1hc3Rlcl9oZWxwLT5leHBlY3RpbmcgPj0gbWFzdGVyX2hlbHAtPmhlbHBlci0+bWF4X2V4cGVjdGVkKQotCQlldmljdF9vbGRlc3RfZXhwZWN0KG1hc3Rlcik7CisJcCA9ICZtYXN0ZXJfaGVscC0+aGVscGVyLT5leHBlY3RfcG9saWN5W2V4cGVjdC0+Y2xhc3NdOworCWlmIChwLT5tYXhfZXhwZWN0ZWQgJiYKKwkgICAgbWFzdGVyX2hlbHAtPmV4cGVjdGluZ1tleHBlY3QtPmNsYXNzXSA+PSBwLT5tYXhfZXhwZWN0ZWQpIHsKKwkJZXZpY3Rfb2xkZXN0X2V4cGVjdChtYXN0ZXIsIGV4cGVjdCk7CisJCWlmIChtYXN0ZXJfaGVscC0+ZXhwZWN0aW5nW2V4cGVjdC0+Y2xhc3NdID49IHAtPm1heF9leHBlY3RlZCkgeworCQkJcmV0ID0gLUVNRklMRTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQogCiAJaWYgKG5mX2N0X2V4cGVjdF9jb3VudCA+PSBuZl9jdF9leHBlY3RfbWF4KSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIm5mX2Nvbm50cmFjazogZXhwZWN0YXRpb24gdGFibGUgZnVsbCIpOworCQkJICAgICAgICJuZl9jb25udHJhY2s6IGV4cGVjdGF0aW9uIHRhYmxlIGZ1bGxcbiIpOwogCQlyZXQgPSAtRU1GSUxFOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NjAsNiArNDg4LDcgQEAKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0OwogCXN0cnVjdCBobGlzdF9ub2RlICpuID0gdjsKKwljaGFyICpkZWxpbSA9ICIiOwogCiAJZXhwZWN0ID0gaGxpc3RfZW50cnkobiwgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QsIGhub2RlKTsKIApAQCAtNDc1LDYgKzUwNCwxNCBAQAogCQkgICAgX19uZl9jdF9sM3Byb3RvX2ZpbmQoZXhwZWN0LT50dXBsZS5zcmMubDNudW0pLAogCQkgICAgX19uZl9jdF9sNHByb3RvX2ZpbmQoZXhwZWN0LT50dXBsZS5zcmMubDNudW0sCiAJCQkJICAgICAgIGV4cGVjdC0+dHVwbGUuZHN0LnByb3RvbnVtKSk7CisKKwlpZiAoZXhwZWN0LT5mbGFncyAmIE5GX0NUX0VYUEVDVF9QRVJNQU5FTlQpIHsKKwkJc2VxX3ByaW50ZihzLCAiUEVSTUFORU5UIik7CisJCWRlbGltID0gIiwiOworCX0KKwlpZiAoZXhwZWN0LT5mbGFncyAmIE5GX0NUX0VYUEVDVF9JTkFDVElWRSkKKwkJc2VxX3ByaW50ZihzLCAiJXNJTkFDVElWRSIsIGRlbGltKTsKKwogCXJldHVybiBzZXFfcHV0YyhzLCAnXG4nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwppbmRleCA4YjliZTFlLi5iY2MxOWZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwpAQCAtMTksMTQgKzE5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfZXh0X3R5cGUgKm5mX2N0X2V4dF90eXBlc1tORl9DVF9FWFRfTlVNXTsKIHN0YXRpYyBERUZJTkVfTVVURVgobmZfY3RfZXh0X3R5cGVfbXV0ZXgpOwogCi0vKiBIb3JyaWJsZSB0cmljayB0byBmaWd1cmUgb3V0IHNtYWxsZXN0IGFtb3VudCB3b3J0aCBrbWFsbG9jaW5nLiAqLwotI2RlZmluZSBDQUNIRSh4KSAoeCkgKyAwICoKLWVudW0gewotCU5GX0NUX0VYVF9NSU5fU0laRSA9Ci0jaW5jbHVkZSA8bGludXgva21hbGxvY19zaXplcy5oPgotCTEgfTsKLSN1bmRlZiBDQUNIRQotCiB2b2lkIF9fbmZfY3RfZXh0X2Rlc3Ryb3koc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtNTMsNyArNDUsNyBAQAogc3RhdGljIHZvaWQgKgogbmZfY3RfZXh0X2NyZWF0ZShzdHJ1Y3QgbmZfY3RfZXh0ICoqZXh0LCBlbnVtIG5mX2N0X2V4dF9pZCBpZCwgZ2ZwX3QgZ2ZwKQogewotCXVuc2lnbmVkIGludCBvZmYsIGxlbiwgcmVhbF9sZW47CisJdW5zaWduZWQgaW50IG9mZiwgbGVuOwogCXN0cnVjdCBuZl9jdF9leHRfdHlwZSAqdDsKIAogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTYxLDE2ICs1MywxNCBAQAogCUJVR19PTih0ID09IE5VTEwpOwogCW9mZiA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgbmZfY3RfZXh0KSwgdC0+YWxpZ24pOwogCWxlbiA9IG9mZiArIHQtPmxlbjsKLQlyZWFsX2xlbiA9IHQtPmFsbG9jX3NpemU7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQkqZXh0ID0ga3phbGxvYyhyZWFsX2xlbiwgZ2ZwKTsKKwkqZXh0ID0ga3phbGxvYyh0LT5hbGxvY19zaXplLCBnZnApOwogCWlmICghKmV4dCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkoKmV4dCktPm9mZnNldFtpZF0gPSBvZmY7CiAJKCpleHQpLT5sZW4gPSBsZW47Ci0JKCpleHQpLT5yZWFsX2xlbiA9IHJlYWxfbGVuOwogCiAJcmV0dXJuICh2b2lkICopKCpleHQpICsgb2ZmOwogfQpAQCAtODEsNiArNzEsOSBAQAogCWludCBpLCBuZXdsZW4sIG5ld29mZjsKIAlzdHJ1Y3QgbmZfY3RfZXh0X3R5cGUgKnQ7CiAKKwkvKiBDb25udHJhY2sgbXVzdCBub3QgYmUgY29uZmlybWVkIHRvIGF2b2lkIHJhY2VzIG9uIHJlYWxsb2NhdGlvbi4gKi8KKwlORl9DVF9BU1NFUlQoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpOworCiAJaWYgKCFjdC0+ZXh0KQogCQlyZXR1cm4gbmZfY3RfZXh0X2NyZWF0ZSgmY3QtPmV4dCwgaWQsIGdmcCk7CiAKQEAgLTk1LDcgKzg4LDcgQEAKIAluZXdsZW4gPSBuZXdvZmYgKyB0LT5sZW47CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlpZiAobmV3bGVuID49IGN0LT5leHQtPnJlYWxfbGVuKSB7CisJaWYgKG5ld2xlbiA+PSBrc2l6ZShjdC0+ZXh0KSkgewogCQluZXcgPSBrbWFsbG9jKG5ld2xlbiwgZ2ZwKTsKIAkJaWYgKCFuZXcpCiAJCQlyZXR1cm4gTlVMTDsKQEAgLTExNCw3ICsxMDcsNiBAQAogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCX0KIAkJa2ZyZWUoY3QtPmV4dCk7Ci0JCW5ldy0+cmVhbF9sZW4gPSBuZXdsZW47CiAJCWN0LT5leHQgPSBuZXc7CiAJfQogCkBAIC0xNTYsOCArMTQ4LDYgQEAKIAkJCXQxLT5hbGxvY19zaXplID0gQUxJR04odDEtPmFsbG9jX3NpemUsIHQyLT5hbGlnbikKIAkJCQkJICsgdDItPmxlbjsKIAkJfQotCQlpZiAodDEtPmFsbG9jX3NpemUgPCBORl9DVF9FWFRfTUlOX1NJWkUpCi0JCQl0MS0+YWxsb2Nfc2l6ZSA9IE5GX0NUX0VYVF9NSU5fU0laRTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKaW5kZXggNjc3MGJhZi4uYmIyMDY3MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKQEAgLTM1MCw4ICszNTAsOSBAQAogCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgZGF0YWxlbjsKLQlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7Ci0JY2hhciAqZmJfcHRyOworCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoOworCXN0cnVjdCB0Y3BoZHIgX3RjcGg7CisJY29uc3QgY2hhciAqZmJfcHRyOwogCWludCByZXQ7CiAJdTMyIHNlcTsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwpAQCAtNDA1LDcgKzQwNiw3IEBACiAKIAkvKiBJbml0aWFsaXplIElQL0lQdjYgYWRkciB0byBleHBlY3RlZCBhZGRyZXNzIChpdCdzIG5vdCBtZW50aW9uZWQKIAkgICBpbiBFUFNWIHJlc3BvbnNlcykgKi8KLQljbWQubDNudW0gPSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmwzbnVtOworCWNtZC5sM251bSA9IG5mX2N0X2wzbnVtKGN0KTsKIAltZW1jcHkoY21kLnUzLmFsbCwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMuYWxsLAogCSAgICAgICBzaXplb2YoY21kLnUzLmFsbCkpOwogCkBAIC00NTIsNyArNDUzLDcgQEAKIAlkYWRkciA9ICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MzsKIAogCS8qIFVwZGF0ZSB0aGUgZnRwIGluZm8gKi8KLQlpZiAoKGNtZC5sM251bSA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmwzbnVtKSAmJgorCWlmICgoY21kLmwzbnVtID09IG5mX2N0X2wzbnVtKGN0KSkgJiYKIAkgICAgbWVtY21wKCZjbWQudTMuYWxsLCAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51My5hbGwsCiAJCSAgICAgc2l6ZW9mKGNtZC51My5hbGwpKSkgewogCQkvKiBFbnJpY28gU2Nob2x6J3MgcGFzc2l2ZSBGVFAgdG8gcGFydGlhbGx5IFJOQVQnZCBmdHAKQEAgLTQ4Myw3ICs0ODQsNyBAQAogCQlkYWRkciA9ICZjbWQudTM7CiAJfQogCi0JbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBjbWQubDNudW0sCisJbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgY21kLmwzbnVtLAogCQkJICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIGRhZGRyLAogCQkJICBJUFBST1RPX1RDUCwgTlVMTCwgJmNtZC51LnRjcC5wb3J0KTsKIApAQCAtNTE3LDYgKzUxOCwxMSBAQAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGZ0cFtNQVhfUE9SVFNdWzJdIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgY2hhciBmdHBfbmFtZXNbTUFYX1BPUlRTXVsyXVtzaXplb2YoImZ0cC02NTUzNSIpXSBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGZ0cF9leHBfcG9saWN5ID0geworCS5tYXhfZXhwZWN0ZWQJPSAxLAorCS50aW1lb3V0CT0gNSAqIDYwLAorfTsKKwogLyogZG9uJ3QgbWFrZSB0aGlzIF9fZXhpdCwgc2luY2UgaXQncyBjYWxsZWQgZnJvbSBfX2luaXQgISAqLwogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2Z0cF9maW5pKHZvaWQpCiB7CkBAIC01NTYsOCArNTYyLDcgQEAKIAkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewogCQkJZnRwW2ldW2pdLnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gaHRvbnMocG9ydHNbaV0pOwogCQkJZnRwW2ldW2pdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOwotCQkJZnRwW2ldW2pdLm1heF9leHBlY3RlZCA9IDE7Ci0JCQlmdHBbaV1bal0udGltZW91dCA9IDUgKiA2MDsJLyogNSBNaW51dGVzICovCisJCQlmdHBbaV1bal0uZXhwZWN0X3BvbGljeSA9ICZmdHBfZXhwX3BvbGljeTsKIAkJCWZ0cFtpXVtqXS5tZSA9IFRISVNfTU9EVUxFOwogCQkJZnRwW2ldW2pdLmhlbHAgPSBoZWxwOwogCQkJdG1wbmFtZSA9ICZmdHBfbmFtZXNbaV1bal1bMF07CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDYyMTM3ODcuLjk1ZGExYTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC0yMTgsNyArMjE4LDYgQEAKIAkJCSB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiAqcG9ydCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOwotCWludCBmYW1pbHkgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtOwogCWludCBsZW47CiAKIAlpZiAodGFkZHItPmNob2ljZSAhPSBlSDI0NV9UcmFuc3BvcnRBZGRyZXNzX3VuaWNhc3RBZGRyZXNzKQpAQCAtMjI2LDEzICsyMjUsMTMgQEAKIAogCXN3aXRjaCAodGFkZHItPnVuaWNhc3RBZGRyZXNzLmNob2ljZSkgewogCWNhc2UgZVVuaWNhc3RBZGRyZXNzX2lQQWRkcmVzczoKLQkJaWYgKGZhbWlseSAhPSBBRl9JTkVUKQorCQlpZiAobmZfY3RfbDNudW0oY3QpICE9IEFGX0lORVQpCiAJCQlyZXR1cm4gMDsKIAkJcCA9IGRhdGEgKyB0YWRkci0+dW5pY2FzdEFkZHJlc3MuaVBBZGRyZXNzLm5ldHdvcms7CiAJCWxlbiA9IDQ7CiAJCWJyZWFrOwogCWNhc2UgZVVuaWNhc3RBZGRyZXNzX2lQNkFkZHJlc3M6Ci0JCWlmIChmYW1pbHkgIT0gQUZfSU5FVDYpCisJCWlmIChuZl9jdF9sM251bShjdCkgIT0gQUZfSU5FVDYpCiAJCQlyZXR1cm4gMDsKIAkJcCA9IGRhdGEgKyB0YWRkci0+dW5pY2FzdEFkZHJlc3MuaVA2QWRkcmVzcy5uZXR3b3JrOwogCQlsZW4gPSAxNjsKQEAgLTI3Nyw3ICsyNzYsNyBAQAogCS8qIENyZWF0ZSBleHBlY3QgZm9yIFJUUCAqLwogCWlmICgocnRwX2V4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCiAJCXJldHVybiAtMTsKLQluZl9jdF9leHBlY3RfaW5pdChydHBfZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwluZl9jdF9leHBlY3RfaW5pdChydHBfZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLAogCQkJICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsCiAJCQkgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MywKIAkJCSAgSVBQUk9UT19VRFAsIE5VTEwsICZydHBfcG9ydCk7CkBAIC0yODcsNyArMjg2LDcgQEAKIAkJbmZfY3RfZXhwZWN0X3B1dChydHBfZXhwKTsKIAkJcmV0dXJuIC0xOwogCX0KLQluZl9jdF9leHBlY3RfaW5pdChydGNwX2V4cCwgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW0sCisJbmZfY3RfZXhwZWN0X2luaXQocnRjcF9leHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksCiAJCQkgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywKIAkJCSAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAogCQkJICBJUFBST1RPX1VEUCwgTlVMTCwgJnJ0Y3BfcG9ydCk7CkBAIC0zMDQsOSArMzAzLDkgQEAKIAkJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0cF9leHApID09IDApIHsKIAkJCWlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChydGNwX2V4cCkgPT0gMCkgewogCQkJCXByX2RlYnVnKCJuZl9jdF9oMzIzOiBleHBlY3QgUlRQICIpOwotCQkJCU5GX0NUX0RVTVBfVFVQTEUoJnJ0cF9leHAtPnR1cGxlKTsKKwkJCQluZl9jdF9kdW1wX3R1cGxlKCZydHBfZXhwLT50dXBsZSk7CiAJCQkJcHJfZGVidWcoIm5mX2N0X2gzMjM6IGV4cGVjdCBSVENQICIpOwotCQkJCU5GX0NUX0RVTVBfVFVQTEUoJnJ0Y3BfZXhwLT50dXBsZSk7CisJCQkJbmZfY3RfZHVtcF90dXBsZSgmcnRjcF9leHAtPnR1cGxlKTsKIAkJCX0gZWxzZSB7CiAJCQkJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTsKIAkJCQlyZXQgPSAtMTsKQEAgLTM0NCw3ICszNDMsNyBAQAogCS8qIENyZWF0ZSBleHBlY3QgZm9yIFQuMTIwIGNvbm5lY3Rpb25zICovCiAJaWYgKChleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7Ci0JbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwluZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksCiAJCQkgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywKIAkJCSAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAogCQkJICBJUFBST1RPX1RDUCwgTlVMTCwgJnBvcnQpOwpAQCAtMzYxLDcgKzM2MCw3IEBACiAJfSBlbHNlIHsJCS8qIENvbm50cmFjayBvbmx5ICovCiAJCWlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKIAkJCXByX2RlYnVnKCJuZl9jdF9oMzIzOiBleHBlY3QgVC4xMjAgIik7Ci0JCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwkJCW5mX2N0X2R1bXBfdHVwbGUoJmV4cC0+dHVwbGUpOwogCQl9IGVsc2UKIAkJCXJldCA9IC0xOwogCX0KQEAgLTU4Myw3ICs1ODIsNyBAQAogCXdoaWxlIChnZXRfdHBrdF9kYXRhKHNrYiwgcHJvdG9mZiwgY3QsIGN0aW5mbywKIAkJCSAgICAgJmRhdGEsICZkYXRhbGVuLCAmZGF0YW9mZikpIHsKIAkJcHJfZGVidWcoIm5mX2N0X2gyNDU6IFRQS1QgbGVuPSVkICIsIGRhdGFsZW4pOwotCQlORl9DVF9EVU1QX1RVUExFKCZjdC0+dHVwbGVoYXNoW0NUSU5GTzJESVIoY3RpbmZvKV0udHVwbGUpOworCQluZl9jdF9kdW1wX3R1cGxlKCZjdC0+dHVwbGVoYXNoW0NUSU5GTzJESVIoY3RpbmZvKV0udHVwbGUpOwogCiAJCS8qIERlY29kZSBILjI0NSBzaWduYWwgKi8KIAkJcmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sCkBAIC02MTIsMTMgKzYxMSwxNyBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaDI0NV9leHBfcG9saWN5ID0geworCS5tYXhfZXhwZWN0ZWQJPSBIMzIzX1JUUF9DSEFOTkVMX01BWCAqIDQgKyAyIC8qIFQuMTIwICovLAorCS50aW1lb3V0CT0gMjQwLAorfTsKKwogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQkJPSAiSC4yNDUiLAogCS5tZQkJCT0gVEhJU19NT0RVTEUsCi0JLm1heF9leHBlY3RlZAkJPSBIMzIzX1JUUF9DSEFOTkVMX01BWCAqIDQgKyAyIC8qIFQuMTIwICovLAotCS50aW1lb3V0CQk9IDI0MCwKIAkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCi0JLmhlbHAJCQk9IGgyNDVfaGVscAorCS5oZWxwCQkJPSBoMjQ1X2hlbHAsCisJLmV4cGVjdF9wb2xpY3kJCT0gJmgyNDVfZXhwX3BvbGljeSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjI3LDE4ICs2MzAsMTcgQEAKIAkJICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiAqcG9ydCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOwotCWludCBmYW1pbHkgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtOwogCWludCBsZW47CiAKIAlzd2l0Y2ggKHRhZGRyLT5jaG9pY2UpIHsKIAljYXNlIGVUcmFuc3BvcnRBZGRyZXNzX2lwQWRkcmVzczoKLQkJaWYgKGZhbWlseSAhPSBBRl9JTkVUKQorCQlpZiAobmZfY3RfbDNudW0oY3QpICE9IEFGX0lORVQpCiAJCQlyZXR1cm4gMDsKIAkJcCA9IGRhdGEgKyB0YWRkci0+aXBBZGRyZXNzLmlwOwogCQlsZW4gPSA0OwogCQlicmVhazsKIAljYXNlIGVUcmFuc3BvcnRBZGRyZXNzX2lwNkFkZHJlc3M6Ci0JCWlmIChmYW1pbHkgIT0gQUZfSU5FVDYpCisJCWlmIChuZl9jdF9sM251bShjdCkgIT0gQUZfSU5FVDYpCiAJCQlyZXR1cm4gMDsKIAkJcCA9IGRhdGEgKyB0YWRkci0+aXA2QWRkcmVzcy5pcDsKIAkJbGVuID0gMTY7CkBAIC02NzYsNyArNjc4LDcgQEAKIAkvKiBDcmVhdGUgZXhwZWN0IGZvciBoMjQ1IGNvbm5lY3Rpb24gKi8KIAlpZiAoKGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCiAJCXJldHVybiAtMTsKLQluZl9jdF9leHBlY3RfaW5pdChleHAsIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmwzbnVtLAorCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSwKIAkJCSAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLAogCQkJICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCiAJCQkgIElQUFJPVE9fVENQLCBOVUxMLCAmcG9ydCk7CkBAIC02OTMsNyArNjk1LDcgQEAKIAl9IGVsc2UgewkJLyogQ29ubnRyYWNrIG9ubHkgKi8KIAkJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgewogCQkJcHJfZGVidWcoIm5mX2N0X3E5MzE6IGV4cGVjdCBILjI0NSAiKTsKLQkJCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCQkJbmZfY3RfZHVtcF90dXBsZSgmZXhwLT50dXBsZSk7CiAJCX0gZWxzZQogCQkJcmV0ID0gLTE7CiAJfQpAQCAtNzg0LDcgKzc4Niw3IEBACiAJICogd2UgZG9uJ3QgbmVlZCB0byB0cmFjayB0aGUgc2Vjb25kIGNhbGwgKi8KIAlpZiAoY2FsbGZvcndhcmRfZmlsdGVyICYmCiAJICAgIGNhbGxmb3J3YXJkX2RvX2ZpbHRlcigmYWRkciwgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLAotCQkJCSAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW0pKSB7CisJCQkJICBuZl9jdF9sM251bShjdCkpKSB7CiAJCXByX2RlYnVnKCJuZl9jdF9xOTMxOiBDYWxsIEZvcndhcmRpbmcgbm90IHRyYWNrZWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03OTIsNyArNzk0LDcgQEAKIAkvKiBDcmVhdGUgZXhwZWN0IGZvciB0aGUgc2Vjb25kIGNhbGwgbGVnICovCiAJaWYgKChleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7Ci0JbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwluZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksCiAJCQkgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgJmFkZHIsCiAJCQkgIElQUFJPVE9fVENQLCBOVUxMLCAmcG9ydCk7CiAJZXhwLT5oZWxwZXIgPSBuZl9jb25udHJhY2tfaGVscGVyX3E5MzE7CkBAIC04MDgsNyArODEwLDcgQEAKIAl9IGVsc2UgewkJLyogQ29ubnRyYWNrIG9ubHkgKi8KIAkJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgewogCQkJcHJfZGVidWcoIm5mX2N0X3E5MzE6IGV4cGVjdCBDYWxsIEZvcndhcmRpbmcgIik7Ci0JCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwkJCW5mX2N0X2R1bXBfdHVwbGUoJmV4cC0+dHVwbGUpOwogCQl9IGVsc2UKIAkJCXJldCA9IC0xOwogCX0KQEAgLTg0Miw3ICs4NDQsNyBAQAogCiAJc2V0X2gyMjVfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfaDIyNV9hZGRyX2hvb2spOwogCWlmICgoc2V0dXAtPm9wdGlvbnMgJiBlU2V0dXBfVVVJRV9kZXN0Q2FsbFNpZ25hbEFkZHJlc3MpICYmCi0JICAgIChzZXRfaDIyNV9hZGRyKSAmJiBjdC0+c3RhdHVzICYmIElQU19OQVRfTUFTSyAmJgorCSAgICAoc2V0X2gyMjVfYWRkcikgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSyAmJgogCSAgICBnZXRfaDIyNV9hZGRyKGN0LCAqZGF0YSwgJnNldHVwLT5kZXN0Q2FsbFNpZ25hbEFkZHJlc3MsCiAJCQkgICZhZGRyLCAmcG9ydCkgJiYKIAkgICAgbWVtY21wKCZhZGRyLCAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIHNpemVvZihhZGRyKSkpIHsKQEAgLTExMjgsNyArMTEzMCw3IEBACiAJd2hpbGUgKGdldF90cGt0X2RhdGEoc2tiLCBwcm90b2ZmLCBjdCwgY3RpbmZvLAogCQkJICAgICAmZGF0YSwgJmRhdGFsZW4sICZkYXRhb2ZmKSkgewogCQlwcl9kZWJ1ZygibmZfY3RfcTkzMTogVFBLVCBsZW49JWQgIiwgZGF0YWxlbik7Ci0JCU5GX0NUX0RVTVBfVFVQTEUoJmN0LT50dXBsZWhhc2hbQ1RJTkZPMkRJUihjdGluZm8pXS50dXBsZSk7CisJCW5mX2N0X2R1bXBfdHVwbGUoJmN0LT50dXBsZWhhc2hbQ1RJTkZPMkRJUihjdGluZm8pXS50dXBsZSk7CiAKIAkJLyogRGVjb2RlIFEuOTMxIHNpZ25hbCAqLwogCQlyZXQgPSBEZWNvZGVROTMxKGRhdGEsIGRhdGFsZW4sICZxOTMxKTsKQEAgLTExNTYsMjggKzExNTgsMzAgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHE5MzFfZXhwX3BvbGljeSA9IHsKKwkvKiBULjEyMCBhbmQgSC4yNDUgKi8KKwkubWF4X2V4cGVjdGVkCQk9IEgzMjNfUlRQX0NIQU5ORUxfTUFYICogNCArIDQsCisJLnRpbWVvdXQJCT0gMjQwLAorfTsKKwogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVtdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZQkJCT0gIlEuOTMxIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKLQkJCQkJICAvKiBULjEyMCBhbmQgSC4yNDUgKi8KLQkJLm1heF9leHBlY3RlZAkJPSBIMzIzX1JUUF9DSEFOTkVMX01BWCAqIDQgKyA0LAotCQkudGltZW91dAkJPSAyNDAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAogCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFE5MzFfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKLQkJLmhlbHAJCQk9IHE5MzFfaGVscAorCQkuaGVscAkJCT0gcTkzMV9oZWxwLAorCQkuZXhwZWN0X3BvbGljeQkJPSAmcTkzMV9leHBfcG9saWN5LAogCX0sCiAJewogCQkubmFtZQkJCT0gIlEuOTMxIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKLQkJCQkJICAvKiBULjEyMCBhbmQgSC4yNDUgKi8KLQkJLm1heF9leHBlY3RlZAkJPSBIMzIzX1JUUF9DSEFOTkVMX01BWCAqIDQgKyA0LAotCQkudGltZW91dAkJPSAyNDAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKIAkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhROTMxX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCi0JCS5oZWxwCQkJPSBxOTMxX2hlbHAKKwkJLmhlbHAJCQk9IHE5MzFfaGVscCwKKwkJLmV4cGVjdF9wb2xpY3kJCT0gJnE5MzFfZXhwX3BvbGljeSwKIAl9LAogfTsKIApAQCAtMTI2MSw3ICsxMjY1LDcgQEAKIAkvKiBDcmVhdGUgZXhwZWN0IGZvciBRLjkzMSAqLwogCWlmICgoZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwotCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW0sCisJbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLAogCQkJICBna3JvdXRlZF9vbmx5ID8gLyogb25seSBhY2NlcHQgY2FsbHMgZnJvbSBHSz8gKi8KIAkJCQkmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMgOiBOVUxMLAogCQkJICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCkBAIC0xMjc1LDcgKzEyNzksNyBAQAogCX0gZWxzZSB7CQkvKiBDb25udHJhY2sgb25seSAqLwogCQlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKSB7CiAJCQlwcl9kZWJ1ZygibmZfY3RfcmFzOiBleHBlY3QgUS45MzEgIik7Ci0JCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwkJCW5mX2N0X2R1bXBfdHVwbGUoJmV4cC0+dHVwbGUpOwogCiAJCQkvKiBTYXZlIHBvcnQgZm9yIGxvb2tpbmcgdXAgZXhwZWN0IGluIHByb2Nlc3NpbmcgUkNGICovCiAJCQlpbmZvLT5zaWdfcG9ydFtkaXJdID0gcG9ydDsKQEAgLTEzMzIsMTQgKzEzMzYsMTQgQEAKIAkvKiBOZWVkIG5ldyBleHBlY3QgKi8KIAlpZiAoKGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCiAJCXJldHVybiAtMTsKLQluZl9jdF9leHBlY3RfaW5pdChleHAsIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmwzbnVtLAorCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSwKIAkJCSAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCAmYWRkciwKIAkJCSAgSVBQUk9UT19VRFAsIE5VTEwsICZwb3J0KTsKIAlleHAtPmhlbHBlciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmFzOwogCiAJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgewogCQlwcl9kZWJ1ZygibmZfY3RfcmFzOiBleHBlY3QgUkFTICIpOwotCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwkJbmZfY3RfZHVtcF90dXBsZSgmZXhwLT50dXBsZSk7CiAJfSBlbHNlCiAJCXJldCA9IC0xOwogCkBAIC0xNDIzLDcgKzE0MjcsNyBAQAogCQkJcHJfZGVidWcoIm5mX2N0X3Jhczogc2V0IFEuOTMxIGV4cGVjdCAiCiAJCQkJICJ0aW1lb3V0IHRvICV1IHNlY29uZHMgZm9yIiwKIAkJCQkgaW5mby0+dGltZW91dCk7Ci0JCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwkJCW5mX2N0X2R1bXBfdHVwbGUoJmV4cC0+dHVwbGUpOwogCQkJc2V0X2V4cGVjdF90aW1lb3V0KGV4cCwgaW5mby0+dGltZW91dCk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKQEAgLTE1MzYsNyArMTU0MCw3IEBACiAJLyogTmVlZCBuZXcgZXhwZWN0ICovCiAJaWYgKChleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7Ci0JbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwluZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksCiAJCQkgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgJmFkZHIsCiAJCQkgIElQUFJPVE9fVENQLCBOVUxMLCAmcG9ydCk7CiAJZXhwLT5mbGFncyA9IE5GX0NUX0VYUEVDVF9QRVJNQU5FTlQ7CkBAIC0xNTQ0LDcgKzE1NDgsNyBAQAogCiAJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgewogCQlwcl9kZWJ1ZygibmZfY3RfcmFzOiBleHBlY3QgUS45MzEgIik7Ci0JCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCQluZl9jdF9kdW1wX3R1cGxlKCZleHAtPnR1cGxlKTsKIAl9IGVsc2UKIAkJcmV0ID0gLTE7CiAKQEAgLTE1ODksNyArMTU5Myw3IEBACiAJLyogTmVlZCBuZXcgZXhwZWN0IGZvciBjYWxsIHNpZ25hbCAqLwogCWlmICgoZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwotCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW0sCisJbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLAogCQkJICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsICZhZGRyLAogCQkJICBJUFBST1RPX1RDUCwgTlVMTCwgJnBvcnQpOwogCWV4cC0+ZmxhZ3MgPSBORl9DVF9FWFBFQ1RfUEVSTUFORU5UOwpAQCAtMTU5Nyw3ICsxNjAxLDcgQEAKIAogCWlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKIAkJcHJfZGVidWcoIm5mX2N0X3JhczogZXhwZWN0IFEuOTMxICIpOwotCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwkJbmZfY3RfZHVtcF90dXBsZSgmZXhwLT50dXBsZSk7CiAJfSBlbHNlCiAJCXJldCA9IC0xOwogCkBAIC0xNzAxLDcgKzE3MDUsNyBAQAogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gYWNjZXB0OwogCXByX2RlYnVnKCJuZl9jdF9yYXM6IFJBUyBtZXNzYWdlIGxlbj0lZCAiLCBkYXRhbGVuKTsKLQlORl9DVF9EVU1QX1RVUExFKCZjdC0+dHVwbGVoYXNoW0NUSU5GTzJESVIoY3RpbmZvKV0udHVwbGUpOworCW5mX2N0X2R1bXBfdHVwbGUoJmN0LT50dXBsZWhhc2hbQ1RJTkZPMkRJUihjdGluZm8pXS50dXBsZSk7CiAKIAkvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi8KIAlyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sICZyYXMpOwpAQCAtMTcyOCwyNiArMTczMiwyOSBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgcmFzX2V4cF9wb2xpY3kgPSB7CisJLm1heF9leHBlY3RlZAkJPSAzMiwKKwkudGltZW91dAkJPSAyNDAsCit9OworCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbXSBfX3JlYWRfbW9zdGx5ID0gewogCXsKIAkJLm5hbWUJCQk9ICJSQVMiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAotCQkubWF4X2V4cGVjdGVkCQk9IDMyLAotCQkudGltZW91dAkJPSAyNDAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAogCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFJBU19QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuaGVscAkJCT0gcmFzX2hlbHAsCisJCS5leHBlY3RfcG9saWN5CQk9ICZyYXNfZXhwX3BvbGljeSwKIAl9LAogCXsKIAkJLm5hbWUJCQk9ICJSQVMiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAotCQkubWF4X2V4cGVjdGVkCQk9IDMyLAotCQkudGltZW91dAkJPSAyNDAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKIAkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmhlbHAJCQk9IHJhc19oZWxwLAorCQkuZXhwZWN0X3BvbGljeQkJPSAmcmFzX2V4cF9wb2xpY3ksCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggYjFmZDIxYy4uN2QxYjExNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTExMCw3ICsxMTAsOCBAQAogewogCXVuc2lnbmVkIGludCBoID0gaGVscGVyX2hhc2goJm1lLT50dXBsZSk7CiAKLQlCVUdfT04obWUtPnRpbWVvdXQgPT0gMCk7CisJQlVHX09OKG1lLT5leHBlY3RfcG9saWN5ID09IE5VTEwpOworCUJVR19PTihtZS0+ZXhwZWN0X2NsYXNzX21heCA+PSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpOwogCiAJbXV0ZXhfbG9jaygmbmZfY3RfaGVscGVyX211dGV4KTsKIAlobGlzdF9hZGRfaGVhZF9yY3UoJm1lLT5obm9kZSwgJm5mX2N0X2hlbHBlcl9oYXNoW2hdKTsKQEAgLTEyNSw3ICsxMjYsNyBAQAogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwotCXN0cnVjdCBobGlzdF9ub2RlICpuLCAqbmV4dDsKKwljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKm5leHQ7CiAJdW5zaWduZWQgaW50IGk7CiAKIAltdXRleF9sb2NrKCZuZl9jdF9oZWxwZXJfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwppbmRleCBjMzM2YjA3Li4xYjEyMjZkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwpAQCAtNTAsNyArNTAsNyBAQAogbW9kdWxlX3BhcmFtKGRjY190aW1lb3V0LCB1aW50LCAwNDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGNjX3RpbWVvdXQsICJ0aW1lb3V0IG9uIGZvciB1bmVzdGFibGlzaGVkIERDQyBjaGFubmVscyIpOwogCi1zdGF0aWMgY29uc3QgY2hhciAqZGNjcHJvdG9zW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGNjcHJvdG9zW10gPSB7CiAJIlNFTkQgIiwgIkNIQVQgIiwgIk1PVkUgIiwgIlRTRU5EICIsICJTQ0hBVCAiCiB9OwogCkBAIC02NSw3ICs2NSw3IEBACiAgKglhZF9iZWdfcAlyZXR1cm5zIHBvaW50ZXIgdG8gZmlyc3QgYnl0ZSBvZiBhZGRyIGRhdGEKICAqCWFkX2VuZF9wCXJldHVybnMgcG9pbnRlciB0byBsYXN0IGJ5dGUgb2YgYWRkciBkYXRhCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfZGNjKGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfZW5kLCB1X2ludDMyX3QgKmlwLAorc3RhdGljIGludCBwYXJzZV9kY2MoY2hhciAqZGF0YSwgY29uc3QgY2hhciAqZGF0YV9lbmQsIHVfaW50MzJfdCAqaXAsCiAJCSAgICAgdV9pbnQxNl90ICpwb3J0LCBjaGFyICoqYWRfYmVnX3AsIGNoYXIgKiphZF9lbmRfcCkKIHsKIAkvKiBhdCBsZWFzdCAxMjogIkFBQUFBQUFBIFBcMVxuIiAqLwpAQCAtOTMsOSArOTMsMTEgQEAKIAkJc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YW9mZjsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7Ci0JY2hhciAqZGF0YSwgKmRhdGFfbGltaXQsICppYl9wdHI7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CisJc3RydWN0IHRjcGhkciBfdGNwaDsKKwljb25zdCBjaGFyICpkYXRhX2xpbWl0OworCWNoYXIgKmRhdGEsICppYl9wdHI7CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlOwpAQCAtMTU5LDcgKzE2MSw3IEBACiAJCQkvKiB3ZSBoYXZlIGF0IGxlYXN0CiAJCQkgKiAoMTkrTUlOTUFUQ0hMRU4pLTUtZGNjcHJvdG9zW2ldLm1hdGNobGVuIGJ5dGVzIHZhbGlkCiAJCQkgKiBkYXRhIGxlZnQgKD09IDE0LzEzIGJ5dGVzKSAqLwotCQkJaWYgKHBhcnNlX2RjYygoY2hhciAqKWRhdGEsIGRhdGFfbGltaXQsICZkY2NfaXAsCisJCQlpZiAocGFyc2VfZGNjKGRhdGEsIGRhdGFfbGltaXQsICZkY2NfaXAsCiAJCQkJICAgICAgICZkY2NfcG9ydCwgJmFkZHJfYmVnX3AsICZhZGRyX2VuZF9wKSkgewogCQkJCXByX2RlYnVnKCJ1bmFibGUgdG8gcGFyc2UgZGNjIGNvbW1hbmRcbiIpOwogCQkJCWNvbnRpbnVlOwpAQCAtMTg3LDcgKzE4OSw4IEBACiAJCQl9CiAJCQl0dXBsZSA9ICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlOwogCQkJcG9ydCA9IGh0b25zKGRjY19wb3J0KTsKLQkJCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgdHVwbGUtPnNyYy5sM251bSwKKwkJCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsCisJCQkJCSAgdHVwbGUtPnNyYy5sM251bSwKIAkJCQkJICBOVUxMLCAmdHVwbGUtPmRzdC51MywKIAkJCQkJICBJUFBST1RPX1RDUCwgTlVMTCwgJnBvcnQpOwogCkBAIC0yMTAsNiArMjEzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyY1tNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgY2hhciBpcmNfbmFtZXNbTUFYX1BPUlRTXVtzaXplb2YoImlyYy02NTUzNSIpXSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBpcmNfZXhwX3BvbGljeTsKIAogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2lyY19maW5pKHZvaWQpOwogCkBAIC0yMjMsNiArMjI3LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaXJjX2V4cF9wb2xpY3kubWF4X2V4cGVjdGVkID0gbWF4X2RjY19jaGFubmVsczsKKwlpcmNfZXhwX3BvbGljeS50aW1lb3V0ID0gZGNjX3RpbWVvdXQ7CisKIAlpcmNfYnVmZmVyID0ga21hbGxvYyg2NTUzNiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpcmNfYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIzNSw4ICsyNDIsNyBAQAogCQlpcmNbaV0udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDsKIAkJaXJjW2ldLnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gaHRvbnMocG9ydHNbaV0pOwogCQlpcmNbaV0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7Ci0JCWlyY1tpXS5tYXhfZXhwZWN0ZWQgPSBtYXhfZGNjX2NoYW5uZWxzOwotCQlpcmNbaV0udGltZW91dCA9IGRjY190aW1lb3V0OworCQlpcmNbaV0uZXhwZWN0X3BvbGljeSA9ICZpcmNfZXhwX3BvbGljeTsKIAkJaXJjW2ldLm1lID0gVEhJU19NT0RVTEU7CiAJCWlyY1tpXS5oZWxwID0gaGVscDsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYwppbmRleCA4ZTkxNGU1Li5lN2ViODA3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYwpAQCAtMzEsMjIgKzMxLDIyIEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgogCi1zdGF0aWMgaW50IGdlbmVyaWNfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKLQkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyBib29sIGdlbmVyaWNfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKKwkJCQkgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJbWVtc2V0KCZ0dXBsZS0+c3JjLnUzLCAwLCBzaXplb2YodHVwbGUtPnNyYy51MykpOwogCW1lbXNldCgmdHVwbGUtPmRzdC51MywgMCwgc2l6ZW9mKHR1cGxlLT5kc3QudTMpKTsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IGdlbmVyaWNfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAotCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3N0YXRpYyBib29sIGdlbmVyaWNfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQogewogCW1lbXNldCgmdHVwbGUtPnNyYy51MywgMCwgc2l6ZW9mKHR1cGxlLT5zcmMudTMpKTsKIAltZW1zZXQoJnR1cGxlLT5kc3QudTMsIDAsIHNpemVvZih0dXBsZS0+ZHN0LnUzKSk7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGludCBnZW5lcmljX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCA5ODEwZDgxLi4wODQwNGU2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCkBAIC00Nyw3ICs0Nyw3IEBACiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilza2ItPmRzdDsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAlfX2JlMzIgbWFzayA9IDA7CiAKQEAgLTg2LDYgKzg2LDcgQEAKIAogCWV4cC0+ZXhwZWN0Zm4gICAgICAgICAgICAgPSBOVUxMOwogCWV4cC0+ZmxhZ3MgICAgICAgICAgICAgICAgPSBORl9DVF9FWFBFQ1RfUEVSTUFORU5UOworCWV4cC0+Y2xhc3MJCSAgPSBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVDsKIAlleHAtPmhlbHBlciAgICAgICAgICAgICAgID0gTlVMTDsKIAogCW5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCk7CkBAIC05NiwxOSArOTcsMjMgQEAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGV4cF9wb2xpY3kgPSB7CisJLm1heF9leHBlY3RlZAk9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaGVscGVyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCQk9ICJuZXRiaW9zLW5zIiwKIAkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKIAkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKE5NQkRfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAotCS5tYXhfZXhwZWN0ZWQJCT0gMSwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS5oZWxwCQkJPSBoZWxwLAorCS5leHBlY3RfcG9saWN5CQk9ICZleHBfcG9saWN5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX25ldGJpb3NfbnNfaW5pdCh2b2lkKQogewotCWhlbHBlci50aW1lb3V0ID0gdGltZW91dDsKKwlleHBfcG9saWN5LnRpbWVvdXQgPSB0aW1lb3V0OwogCXJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZoZWxwZXIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggNGExYjQyYi4uMTY3NzRlYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMTQ1LDEwICsxNDUsMTEgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfZHVtcF9wcm90b2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewotCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSwgY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSk7CisJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOwogCXN0cnVjdCBubGF0dHIgKm5lc3RfcHJvdG87CiAJaW50IHJldDsKIAorCWw0cHJvdG8gPSBuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKIAlpZiAoIWw0cHJvdG8tPnRvX25sYXR0cikgewogCQluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKIAkJcmV0dXJuIDA7CkBAIC0zNjgsOCArMzY5LDcgQEAKIAluZm1zZyAgPSBOTE1TR19EQVRBKG5saCk7CiAKIAlubGgtPm5sbXNnX2ZsYWdzICAgID0gKG5vd2FpdCAmJiBwaWQpID8gTkxNX0ZfTVVMVEkgOiAwOwotCW5mbXNnLT5uZmdlbl9mYW1pbHkgPQotCQljdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtOworCW5mbXNnLT5uZmdlbl9mYW1pbHkgPSBuZl9jdF9sM251bShjdCk7CiAJbmZtc2ctPnZlcnNpb24gICAgICA9IE5GTkVUTElOS19WMDsKIAluZm1zZy0+cmVzX2lkCSAgICA9IDA7CiAKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCW5mbXNnID0gTkxNU0dfREFUQShubGgpOwogCiAJbmxoLT5ubG1zZ19mbGFncyAgICA9IGZsYWdzOwotCW5mbXNnLT5uZmdlbl9mYW1pbHkgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtOworCW5mbXNnLT5uZmdlbl9mYW1pbHkgPSBuZl9jdF9sM251bShjdCk7CiAJbmZtc2ctPnZlcnNpb24JPSBORk5FVExJTktfVjA7CiAJbmZtc2ctPnJlc19pZAk9IDA7CiAKQEAgLTUzNSw4ICs1MzUsNiBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEwzUFJPVE8oY3QpIChjdCktPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bQotCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CkBAIC01NTgsNyArNTU2LDcgQEAKIAkJCS8qIER1bXAgZW50cmllcyBvZiBhIGdpdmVuIEwzIHByb3RvY29sIG51bWJlci4KIAkJCSAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIGllLiBsM3Byb3RvID09IDAsCiAJCQkgKiB0aGVuIGR1bXAgZXZlcnl0aGluZy4gKi8KLQkJCWlmIChsM3Byb3RvICYmIEwzUFJPVE8oY3QpICE9IGwzcHJvdG8pCisJCQlpZiAobDNwcm90byAmJiBuZl9jdF9sM251bShjdCkgIT0gbDNwcm90bykKIAkJCQljb250aW51ZTsKIAkJCWlmIChjYi0+YXJnc1sxXSkgewogCQkJCWlmIChjdCAhPSBsYXN0KQpAQCAtNzA0LDIwICs3MDIsMTEgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCW5wdCA9IG5mX25hdF9wcm90b19maW5kX2dldChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKTsKLQotCWlmICghbnB0LT5ubGF0dHJfdG9fcmFuZ2UpIHsKLQkJbmZfbmF0X3Byb3RvX3B1dChucHQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBubGF0dHJfdG9fcmFuZ2UgcmV0dXJucyAxIGlmIGl0IHBhcnNlZCwgMCBpZiBub3QsIG5lZy4gb24gZXJyb3IgKi8KLQlpZiAobnB0LT5ubGF0dHJfdG9fcmFuZ2UodGIsIHJhbmdlKSA+IDApCi0JCXJhbmdlLT5mbGFncyB8PSBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEOwotCisJbnB0ID0gbmZfbmF0X3Byb3RvX2ZpbmRfZ2V0KG5mX2N0X3Byb3RvbnVtKGN0KSk7CisJaWYgKG5wdC0+bmxhdHRyX3RvX3JhbmdlKQorCQllcnIgPSBucHQtPm5sYXR0cl90b19yYW5nZSh0YiwgcmFuZ2UpOwogCW5mX25hdF9wcm90b19wdXQobnB0KTsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuYXRfbmxhX3BvbGljeVtDVEFfTkFUX01BWCsxXSA9IHsKQEAgLTEwMTAsMTQgKzk5OSwxMSBAQAogewogCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9QUk9UT0lORk9fTUFYKzFdLCAqYXR0ciA9IGNkYVtDVEFfUFJPVE9JTkZPXTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87Ci0JdV9pbnQxNl90IG5wdCA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW07Ci0JdV9pbnQxNl90IGwzbnVtID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bTsKIAlpbnQgZXJyID0gMDsKIAogCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT0lORk9fTUFYLCBhdHRyLCBOVUxMKTsKIAotCWw0cHJvdG8gPSBuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KGwzbnVtLCBucHQpOwotCisJbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCWlmIChsNHByb3RvLT5mcm9tX25sYXR0cikKIAkJZXJyID0gbDRwcm90by0+ZnJvbV9ubGF0dHIodGIsIGN0KTsKIAluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCBiNWNiOGU4Li45N2U1NGIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkJLyogb2J2aW91c2x5IHRoaXMgdHVwbGUgaW52ZXJzaW9uIG9ubHkgd29ya3MgdW50aWwgeW91IGRvIE5BVCAqLwogCQluZl9jdF9pbnZlcnRfdHVwbGVwcigmaW52X3QsICZleHAtPnR1cGxlKTsKIAkJcHJfZGVidWcoInRyeWluZyB0byB1bmV4cGVjdCBvdGhlciBkaXI6ICIpOwotCQlORl9DVF9EVU1QX1RVUExFKCZpbnZfdCk7CisJCW5mX2N0X2R1bXBfdHVwbGUoJmludl90KTsKIAogCQlleHBfb3RoZXIgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQoJmludl90KTsKIAkJaWYgKGV4cF9vdGhlcikgewpAQCAtMTQxLDcgKzE0MSw3IEBACiAJc3RydWN0IG5mX2Nvbm4gKnNpYmxpbmc7CiAKIAlwcl9kZWJ1ZygidHJ5aW5nIHRvIHRpbWVvdXQgY3Qgb3IgZXhwIGZvciB0dXBsZSAiKTsKLQlORl9DVF9EVU1QX1RVUExFKHQpOworCW5mX2N0X2R1bXBfdHVwbGUodCk7CiAKIAloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KHQpOwogCWlmIChoKSAgewpAQCAtMjA4LDcgKzIwOCw4IEBACiAKIAkvKiBvcmlnaW5hbCBkaXJlY3Rpb24sIFBOUy0+UEFDICovCiAJZGlyID0gSVBfQ1RfRElSX09SSUdJTkFMOwotCW5mX2N0X2V4cGVjdF9pbml0KGV4cF9vcmlnLCBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmwzbnVtLAorCW5mX2N0X2V4cGVjdF9pbml0KGV4cF9vcmlnLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwKKwkJCSAgbmZfY3RfbDNudW0oY3QpLAogCQkJICAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MywKIAkJCSAgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudTMsCiAJCQkgIElQUFJPVE9fR1JFLCAmcGVlcl9jYWxsaWQsICZjYWxsaWQpOwpAQCAtMjE2LDcgKzIxNyw4IEBACiAKIAkvKiByZXBseSBkaXJlY3Rpb24sIFBBQy0+UE5TICovCiAJZGlyID0gSVBfQ1RfRElSX1JFUExZOwotCW5mX2N0X2V4cGVjdF9pbml0KGV4cF9yZXBseSwgY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5sM251bSwKKwluZl9jdF9leHBlY3RfaW5pdChleHBfcmVwbHksIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULAorCQkJICBuZl9jdF9sM251bShjdCksCiAJCQkgICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLAogCQkJICAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC51MywKIAkJCSAgSVBQUk9UT19HUkUsICZjYWxsaWQsICZwZWVyX2NhbGxpZCk7CkBAIC01NzUsMTcgKzU3NywyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgcHB0cF9leHBfcG9saWN5ID0geworCS5tYXhfZXhwZWN0ZWQJPSAyLAorCS50aW1lb3V0CT0gNSAqIDYwLAorfTsKKwogLyogY29udHJvbCBwcm90b2NvbCBoZWxwZXIgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBwcHRwIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCQk9ICJwcHRwIiwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAotCS5tYXhfZXhwZWN0ZWQJCT0gMiwKLQkudGltZW91dAkJPSA1ICogNjAsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCiAJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhQUFRQX0NPTlRST0xfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVENQLAogCS5oZWxwCQkJPSBjb25udHJhY2tfcHB0cF9oZWxwLAogCS5kZXN0cm95CQk9IHBwdHBfZGVzdHJveV9zaWJsaW5ncywKKwkuZXhwZWN0X3BvbGljeQkJPSAmcHB0cF9leHBfcG9saWN5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKaW5kZXggODU5NWI1OS4uYTQ5ZmM5MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCkBAIC0xNDYsMTggKzE0NiwxNSBAQAogCiBzdGF0aWMgaW50IGtpbGxfbDNwcm90byhzdHJ1Y3QgbmZfY29ubiAqaSwgdm9pZCAqZGF0YSkKIHsKLQlyZXR1cm4gKGktPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSA9PQotCQkJKChzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKilkYXRhKS0+bDNwcm90byk7CisJcmV0dXJuIG5mX2N0X2wzbnVtKGkpID09ICgoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICopZGF0YSktPmwzcHJvdG87CiB9CiAKIHN0YXRpYyBpbnQga2lsbF9sNHByb3RvKHN0cnVjdCBuZl9jb25uICppLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKIAlsNHByb3RvID0gKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqKWRhdGE7Ci0JcmV0dXJuIChpLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0gPT0KLQkJCWw0cHJvdG8tPmw0cHJvdG8pICYmCi0JICAgICAgIChpLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW0gPT0KLQkJCWw0cHJvdG8tPmwzcHJvdG8pOworCXJldHVybiBuZl9jdF9wcm90b251bShpKSA9PSBsNHByb3RvLT5sNHByb3RvICYmCisJICAgICAgIG5mX2N0X2wzbnVtKGkpID09IGw0cHJvdG8tPmwzcHJvdG87CiB9CiAKIHN0YXRpYyBpbnQgbmZfY3RfbDNwcm90b19yZWdpc3Rlcl9zeXNjdGwoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjRhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKQEAgLTAsMCArMSw4MTUgQEAKKy8qCisgKiBEQ0NQIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHJvdG9jb2wgaGVscGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2LCAyMDA4IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZGNjcC5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorCitzdGF0aWMgREVGSU5FX1JXTE9DSyhkY2NwX2xvY2spOworCitzdGF0aWMgaW50IG5mX2N0X2RjY3BfbG9vc2UgX19yZWFkX21vc3RseSA9IDE7CisKKy8qIFRpbWVvdXRzIGFyZSBiYXNlZCBvbiB2YWx1ZXMgZnJvbSBSRkM0MzQwOgorICoKKyAqIC0gUkVRVUVTVDoKKyAqCisgKiAgIDguMS4yLiBDbGllbnQgUmVxdWVzdAorICoKKyAqICAgQSBjbGllbnQgTUFZIGdpdmUgdXAgb24gaXRzIERDQ1AtUmVxdWVzdHMgYWZ0ZXIgc29tZSB0aW1lCisgKiAgICgzIG1pbnV0ZXMsIGZvciBleGFtcGxlKS4KKyAqCisgKiAtIFJFU1BPTkQ6CisgKgorICogICA4LjEuMy4gU2VydmVyIFJlc3BvbnNlCisgKgorICogICBJdCBNQVkgYWxzbyBsZWF2ZSB0aGUgUkVTUE9ORCBzdGF0ZSBmb3IgQ0xPU0VEIGFmdGVyIGEgdGltZW91dCBvZgorICogICBub3QgbGVzcyB0aGFuIDRNU0wgKDggbWludXRlcyk7CisgKgorICogLSBQQVJUT1BFTjoKKyAqCisgKiAgIDguMS41LiBIYW5kc2hha2UgQ29tcGxldGlvbgorICoKKyAqICAgSWYgdGhlIGNsaWVudCByZW1haW5zIGluIFBBUlRPUEVOIGZvciBtb3JlIHRoYW4gNE1TTCAoOCBtaW51dGVzKSwKKyAqICAgaXQgU0hPVUxEIHJlc2V0IHRoZSBjb25uZWN0aW9uIHdpdGggUmVzZXQgQ29kZSAyLCAiQWJvcnRlZCIuCisgKgorICogLSBPUEVOOgorICoKKyAqICAgVGhlIERDQ1AgdGltZXN0YW1wIG92ZXJmbG93cyBhZnRlciAxMS45IGhvdXJzLiBJZiB0aGUgY29ubmVjdGlvbgorICogICBzdGF5cyBpZGxlIHRoaXMgbG9uZyB0aGUgc2VxdWVuY2UgbnVtYmVyIHdvbid0IGJlIHJlY29nbml6ZWQKKyAqICAgYXMgdmFsaWQgYW55bW9yZS4KKyAqCisgKiAtIENMT1NFUkVRL0NMT1NJTkc6CisgKgorICogICA4LjMuIFRlcm1pbmF0aW9uCisgKgorICogICBUaGUgcmV0cmFuc21pc3Npb24gdGltZXIgc2hvdWxkIGluaXRpYWxseSBiZSBzZXQgdG8gZ28gb2ZmIGluIHR3bworICogICByb3VuZC10cmlwIHRpbWVzIGFuZCBzaG91bGQgYmFjayBvZmYgdG8gbm90IGxlc3MgdGhhbiBvbmNlIGV2ZXJ5CisgKiAgIDY0IHNlY29uZHMgLi4uCisgKgorICogLSBUSU1FV0FJVDoKKyAqCisgKiAgIDQuMy4gU3RhdGVzCisgKgorICogICBBIHNlcnZlciBvciBjbGllbnQgc29ja2V0IHJlbWFpbnMgaW4gdGhpcyBzdGF0ZSBmb3IgMk1TTCAoNCBtaW51dGVzKQorICogICBhZnRlciB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiB0b3duIGRvd24sIC4uLgorICovCisKKyNkZWZpbmUgRENDUF9NU0wgKDIgKiA2MCAqIEhaKQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRjY3BfdGltZW91dFtDVF9EQ0NQX01BWCArIDFdIF9fcmVhZF9tb3N0bHkgPSB7CisJW0NUX0RDQ1BfUkVRVUVTVF0JPSAyICogRENDUF9NU0wsCisJW0NUX0RDQ1BfUkVTUE9ORF0JPSA0ICogRENDUF9NU0wsCisJW0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMLAorCVtDVF9EQ0NQX09QRU5dCQk9IDEyICogMzYwMCAqIEhaLAorCVtDVF9EQ0NQX0NMT1NFUkVRXQk9IDY0ICogSFosCisJW0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaLAorCVtDVF9EQ0NQX1RJTUVXQUlUXQk9IDIgKiBEQ0NQX01TTCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGNjcF9zdGF0ZV9uYW1lc1tdID0geworCVtDVF9EQ0NQX05PTkVdCQk9ICJOT05FIiwKKwlbQ1RfRENDUF9SRVFVRVNUXQk9ICJSRVFVRVNUIiwKKwlbQ1RfRENDUF9SRVNQT05EXQk9ICJSRVNQT05EIiwKKwlbQ1RfRENDUF9QQVJUT1BFTl0JPSAiUEFSVE9QRU4iLAorCVtDVF9EQ0NQX09QRU5dCQk9ICJPUEVOIiwKKwlbQ1RfRENDUF9DTE9TRVJFUV0JPSAiQ0xPU0VSRVEiLAorCVtDVF9EQ0NQX0NMT1NJTkddCT0gIkNMT1NJTkciLAorCVtDVF9EQ0NQX1RJTUVXQUlUXQk9ICJUSU1FV0FJVCIsCisJW0NUX0RDQ1BfSUdOT1JFXQk9ICJJR05PUkUiLAorCVtDVF9EQ0NQX0lOVkFMSURdCT0gIklOVkFMSUQiLAorfTsKKworI2RlZmluZSBzTk8JQ1RfRENDUF9OT05FCisjZGVmaW5lIHNSUQlDVF9EQ0NQX1JFUVVFU1QKKyNkZWZpbmUgc1JTCUNUX0RDQ1BfUkVTUE9ORAorI2RlZmluZSBzUE8JQ1RfRENDUF9QQVJUT1BFTgorI2RlZmluZSBzT1AJQ1RfRENDUF9PUEVOCisjZGVmaW5lIHNDUglDVF9EQ0NQX0NMT1NFUkVRCisjZGVmaW5lIHNDRwlDVF9EQ0NQX0NMT1NJTkcKKyNkZWZpbmUgc1RXCUNUX0RDQ1BfVElNRVdBSVQKKyNkZWZpbmUgc0lHCUNUX0RDQ1BfSUdOT1JFCisjZGVmaW5lIHNJVglDVF9EQ0NQX0lOVkFMSUQKKworLyoKKyAqIERDQ1Agc3RhdGUgdHJhbnNpc3Rpb24gdGFibGUKKyAqCisgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgVENQIHRyYWNraW5nOgorICoKKyAqIFdlIGFyZSB0aGUgbWFuIGluIHRoZSBtaWRkbGUuIEFsbCB0aGUgcGFja2V0cyBnbyB0aHJvdWdoIHVzIGJ1dCBtaWdodAorICogZ2V0IGxvc3QgaW4gdHJhbnNpdCB0byB0aGUgZGVzdGluYXRpb24uIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZGVzdGluYXRpb24KKyAqIGNhbid0IHJlY2VpdmUgc2VnbWVudHMgd2UgaGF2ZW4ndCBzZWVuLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgc3RhdGVzIGV4aXN0OgorICoKKyAqIE5PTkU6CUluaXRpYWwgc3RhdGUsIGV4cGVjdGluZyBSZXF1ZXN0CisgKiBSRVFVRVNUOglSZXF1ZXN0IHNlZW4sIHdhaXRpbmcgZm9yIFJlc3BvbnNlIGZyb20gc2VydmVyCisgKiBSRVNQT05EOglSZXNwb25zZSBmcm9tIHNlcnZlciBzZWVuLCB3YWl0aW5nIGZvciBBY2sgZnJvbSBjbGllbnQKKyAqIFBBUlRPUEVOOglBY2sgYWZ0ZXIgUmVzcG9uc2Ugc2Vlbiwgd2FpdGluZyBmb3IgcGFja2V0IG90aGVyIHRoYW4gUmVzcG9uc2UsCisgKiAJCVJlc2V0IG9yIFN5bmMgZnJvbSBzZXJ2ZXIKKyAqIE9QRU46CVBhY2tldCBvdGhlciB0aGFuIFJlc3BvbnNlLCBSZXNldCBvciBTeW5jIHNlZW4KKyAqIENMT1NFUkVROglDbG9zZVJlcSBmcm9tIHNlcnZlciBzZWVuLCBleHBlY3RpbmcgQ2xvc2UgZnJvbSBjbGllbnQKKyAqIENMT1NJTkc6CUNsb3NlIHNlZW4sIGV4cGVjdGluZyBSZXNldAorICogVElNRVdBSVQ6CVJlc2V0IHNlZW4KKyAqIElHTk9SRToJTm90IGRldGVybWluYWJsZSB3aGV0aGVyIHBhY2tldCBpcyB2YWxpZAorICoKKyAqIFNvbWUgc3RhdGVzIGV4aXN0IG9ubHkgb24gb25lIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb246IFJFUVVFU1QsIFJFU1BPTkQsCisgKiBQQVJUT1BFTiwgQ0xPU0VSRVEuIEZvciB0aGUgb3RoZXIgc2lkZSB0aGVzZSBzdGF0ZXMgYXJlIGVxdWl2YWxlbnQgdG8KKyAqIHRoZSBvbmUgaXQgd2FzIGluIGJlZm9yZS4KKyAqCisgKiBQYWNrZXRzIGFyZSBtYXJrZWQgYXMgaWdub3JlZCAoc0lHKSBpZiB3ZSBkb24ndCBrbm93IGlmIHRoZXkncmUgdmFsaWQKKyAqIChmb3IgZXhhbXBsZSBhIHJlaW5jYXJuYXRpb24gb2YgYSBjb25uZWN0aW9uIHdlIGRpZG4ndCBub3RpY2UgaXMgZGVhZAorICogYWxyZWFkeSkgYW5kIHRoZSBzZXJ2ZXIgbWF5IHNlbmQgYmFjayBhIGNvbm5lY3Rpb24gY2xvc2luZyBSZXNldCBvciBhCisgKiBSZXNwb25zZS4gVGhleSdyZSBhbHNvIHVzZWQgZm9yIFN5bmMvU3luY0FjayBwYWNrZXRzLCB3aGljaCB3ZSBkb24ndAorICogY2FyZSBhYm91dC4KKyAqLworc3RhdGljIGNvbnN0IHVfaW50OF90CitkY2NwX3N0YXRlX3RhYmxlW0NUX0RDQ1BfUk9MRV9NQVggKyAxXVtEQ0NQX1BLVF9TWU5DQUNLICsgMV1bQ1RfRENDUF9NQVggKyAxXSA9IHsKKwlbQ1RfRENDUF9ST0xFX0NMSUVOVF0gPSB7CisJCVtEQ0NQX1BLVF9SRVFVRVNUXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNSUQkJUmVndWxhciBSZXF1ZXN0CisJCSAqIHNSUSAtPiBzUlEJCVJldHJhbnNtaXR0ZWQgUmVxdWVzdCBvciByZWluY2FybmF0aW9uCisJCSAqIHNSUyAtPiBzUlMJCVJldHJhbnNtaXR0ZWQgUmVxdWVzdCAoYXBwYXJlbnRseSBSZXNwb25zZQorCQkgKiAJCQlnb3QgbG9zdCBhZnRlciB3ZSBzYXcgaXQpIG9yIHJlaW5jYXJuYXRpb24KKwkJICogc1BPIC0+IHNJRwkJSWdub3JlLCBjb25udHJhY2sgbWlnaHQgYmUgb3V0IG9mIHN5bmMKKwkJICogc09QIC0+IHNJRwkJSWdub3JlLCBjb25udHJhY2sgbWlnaHQgYmUgb3V0IG9mIHN5bmMKKwkJICogc0NSIC0+IHNJRwkJSWdub3JlLCBjb25udHJhY2sgbWlnaHQgYmUgb3V0IG9mIHN5bmMKKwkJICogc0NHIC0+IHNJRwkJSWdub3JlLCBjb25udHJhY2sgbWlnaHQgYmUgb3V0IG9mIHN5bmMKKwkJICogc1RXIC0+IHNSUQkJUmVpbmNhcm5hdGlvbgorCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8uIHNPUCwgc0NSLCBzQ0csIHNUVywgKi8KKwkJCXNSUSwgc1JRLCBzUlMsIHNJRywgc0lHLCBzSUcsIHNJRywgc1JRLAorCQl9LAorCQlbRENDUF9QS1RfUkVTUE9OU0VdID0geworCQkvKgorCQkgKiBzTk8gLT4gc0lWCQlJbnZhbGlkCisJCSAqIHNSUSAtPiBzSUcJCUlnbm9yZSwgbWlnaHQgYmUgcmVzcG9uc2UgdG8gaWdub3JlZCBSZXF1ZXN0CisJCSAqIHNSUyAtPiBzSUcJCUlnbm9yZSwgbWlnaHQgYmUgcmVzcG9uc2UgdG8gaWdub3JlZCBSZXF1ZXN0CisJCSAqIHNQTyAtPiBzSUcJCUlnbm9yZSwgbWlnaHQgYmUgcmVzcG9uc2UgdG8gaWdub3JlZCBSZXF1ZXN0CisJCSAqIHNPUCAtPiBzSUcJCUlnbm9yZSwgbWlnaHQgYmUgcmVzcG9uc2UgdG8gaWdub3JlZCBSZXF1ZXN0CisJCSAqIHNDUiAtPiBzSUcJCUlnbm9yZSwgbWlnaHQgYmUgcmVzcG9uc2UgdG8gaWdub3JlZCBSZXF1ZXN0CisJCSAqIHNDRyAtPiBzSUcJCUlnbm9yZSwgbWlnaHQgYmUgcmVzcG9uc2UgdG8gaWdub3JlZCBSZXF1ZXN0CisJCSAqIHNUVyAtPiBzSVYJCUludmFsaWQsIHJlaW5jYXJuYXRpb24gaW4gcmV2ZXJzZSBkaXJlY3Rpb24KKwkJICoJCQlnb2VzIHRocm91Z2ggc1JRCisJCSAqCisJCSAqCXNOTywgc1JRLCBzUlMsIHNQTywgc09QLCBzQ1IsIHNDRywgc1RXICovCisJCQlzSVYsIHNJRywgc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJViwKKwkJfSwKKwkJW0RDQ1BfUEtUX0FDS10gPSB7CisJCS8qCisJCSAqIHNOTyAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1JRIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlMgLT4gc1BPCQlBY2sgZm9yIFJlc3BvbnNlLCBtb3ZlIHRvIFBBUlRPUEVOICg4LjEuNS4pCisJCSAqIHNQTyAtPiBzUE8JCVJldHJhbnNtaXR0ZWQgQWNrIGZvciBSZXNwb25zZSwgcmVtYWluIGluIFBBUlRPUEVOCisJCSAqIHNPUCAtPiBzT1AJCVJlZ3VsYXIgQUNLLCByZW1haW4gaW4gT1BFTgorCQkgKiBzQ1IgLT4gc0NSCQlBY2sgaW4gQ0xPU0VSRVEgTUFZIGJlIHByb2Nlc3NlZCAoOC4zLikKKwkJICogc0NHIC0+IHNDRwkJQWNrIGluIENMT1NJTkcgTUFZIGJlIHByb2Nlc3NlZCAoOC4zLikKKwkJICogc1RXIC0+IHNJVgorCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lWLCBzSVYsIHNQTywgc1BPLCBzT1AsIHNDUiwgc0NHLCBzSVYKKwkJfSwKKwkJW0RDQ1BfUEtUX0RBVEFdID0geworCQkvKgorCQkgKiBzTk8gLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUSAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1JTIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUE8gLT4gc0lWCQlNVVNUIHVzZSBEYXRhQWNrIGluIFBBUlRPUEVOIHN0YXRlICg4LjEuNS4pCisJCSAqIHNPUCAtPiBzT1AJCVJlZ3VsYXIgRGF0YSBwYWNrZXQKKwkJICogc0NSIC0+IHNDUgkJRGF0YSBpbiBDTE9TRVJFUSBNQVkgYmUgcHJvY2Vzc2VkICg4LjMuKQorCQkgKiBzQ0cgLT4gc0NHCQlEYXRhIGluIENMT1NJTkcgTUFZIGJlIHByb2Nlc3NlZCAoOC4zLikKKwkJICogc1RXIC0+IHNJVgorCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lWLCBzSVYsIHNJViwgc0lWLCBzT1AsIHNDUiwgc0NHLCBzSVYsCisJCX0sCisJCVtEQ0NQX1BLVF9EQVRBQUNLXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUyAtPiBzUE8JCUFjayBmb3IgUmVzcG9uc2UsIG1vdmUgdG8gUEFSVE9QRU4gKDguMS41LikKKwkJICogc1BPIC0+IHNQTwkJUmVtYWluIGluIFBBUlRPUEVOIHN0YXRlCisJCSAqIHNPUCAtPiBzT1AJCVJlZ3VsYXIgRGF0YUFjayBwYWNrZXQgaW4gT1BFTiBzdGF0ZQorCQkgKiBzQ1IgLT4gc0NSCQlEYXRhQWNrIGluIENMT1NFUkVRIE1BWSBiZSBwcm9jZXNzZWQgKDguMy4pCisJCSAqIHNDRyAtPiBzQ0cJCURhdGFBY2sgaW4gQ0xPU0lORyBNQVkgYmUgcHJvY2Vzc2VkICg4LjMuKQorCQkgKiBzVFcgLT4gc0lWCisJCSAqCisJCSAqCXNOTywgc1JRLCBzUlMsIHNQTywgc09QLCBzQ1IsIHNDRywgc1RXICovCisJCQlzSVYsIHNJViwgc1BPLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNJVgorCQl9LAorCQlbRENDUF9QS1RfQ0xPU0VSRVFdID0geworCQkvKgorCQkgKiBDTE9TRVJFUSBtYXkgb25seSBiZSBzZW50IGJ5IHRoZSBzZXJ2ZXIuCisJCSAqCisJCSAqCXNOTywgc1JRLCBzUlMsIHNQTywgc09QLCBzQ1IsIHNDRywgc1RXICovCisJCQlzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYsIHNJVgorCQl9LAorCQlbRENDUF9QS1RfQ0xPU0VdID0geworCQkvKgorCQkgKiBzTk8gLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUSAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1JTIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUE8gLT4gc0NHCQlDbGllbnQtaW5pdGlhdGVkIGNsb3NlCisJCSAqIHNPUCAtPiBzQ0cJCUNsaWVudC1pbml0aWF0ZWQgY2xvc2UKKwkJICogc0NSIC0+IHNDRwkJQ2xvc2UgaW4gcmVzcG9uc2UgdG8gQ2xvc2VSZXEgKDguMy4pCisJCSAqIHNDRyAtPiBzQ0cJCVJldHJhbnNtaXQKKwkJICogc1RXIC0+IHNJVgkJTGF0ZSByZXRyYW5zbWl0LCBhbHJlYWR5IGluIFRJTUVfV0FJVAorCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lWLCBzSVYsIHNJViwgc0NHLCBzQ0csIHNDRywgc0lWLCBzSVYKKwkJfSwKKwkJW0RDQ1BfUEtUX1JFU0VUXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc1RXCQlTeW5jIHJlY2VpdmVkIG9yIHRpbWVvdXQsIFNIT1VMRCBzZW5kIFJlc2V0ICg4LjEuMS4pCisJCSAqIHNSUyAtPiBzVFcJCVJlc3BvbnNlIHJlY2VpdmVkIHdpdGhvdXQgUmVxdWVzdAorCQkgKiBzUE8gLT4gc1RXCQlUaW1lb3V0LCBTSE9VTEQgc2VuZCBSZXNldCAoOC4xLjUuKQorCQkgKiBzT1AgLT4gc1RXCQlDb25uZWN0aW9uIHJlc2V0CisJCSAqIHNDUiAtPiBzVFcJCUNvbm5lY3Rpb24gcmVzZXQKKwkJICogc0NHIC0+IHNUVwkJQ29ubmVjdGlvbiByZXNldAorCQkgKiBzVFcgLT4gc0lHCQlJZ25vcmUgKGRvbid0IHJlZnJlc2ggdGltZXIpCisJCSAqCisJCSAqCXNOTywgc1JRLCBzUlMsIHNQTywgc09QLCBzQ1IsIHNDRywgc1RXICovCisJCQlzSVYsIHNUVywgc1RXLCBzVFcsIHNUVywgc1RXLCBzVFcsIHNJRworCQl9LAorCQlbRENDUF9QS1RfU1lOQ10gPSB7CisJCS8qCisJCSAqIFdlIGN1cnJlbnRseSBpZ25vcmUgU3luYyBwYWNrZXRzCisJCSAqCisJCSAqCXNOTywgc1JRLCBzUlMsIHNQTywgc09QLCBzQ1IsIHNDRywgc1RXICovCisJCQlzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywKKwkJfSwKKwkJW0RDQ1BfUEtUX1NZTkNBQ0tdID0geworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgaWdub3JlIFN5bmNBY2sgcGFja2V0cworCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsCisJCX0sCisJfSwKKwlbQ1RfRENDUF9ST0xFX1NFUlZFUl0gPSB7CisJCVtEQ0NQX1BLVF9SRVFVRVNUXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJSW52YWxpZAorCQkgKiBzUlEgLT4gc0lHCQlJZ25vcmUsIGNvbm50cmFjayBtaWdodCBiZSBvdXQgb2Ygc3luYworCQkgKiBzUlMgLT4gc0lHCQlJZ25vcmUsIGNvbm50cmFjayBtaWdodCBiZSBvdXQgb2Ygc3luYworCQkgKiBzUE8gLT4gc0lHCQlJZ25vcmUsIGNvbm50cmFjayBtaWdodCBiZSBvdXQgb2Ygc3luYworCQkgKiBzT1AgLT4gc0lHCQlJZ25vcmUsIGNvbm50cmFjayBtaWdodCBiZSBvdXQgb2Ygc3luYworCQkgKiBzQ1IgLT4gc0lHCQlJZ25vcmUsIGNvbm50cmFjayBtaWdodCBiZSBvdXQgb2Ygc3luYworCQkgKiBzQ0cgLT4gc0lHCQlJZ25vcmUsIGNvbm50cmFjayBtaWdodCBiZSBvdXQgb2Ygc3luYworCQkgKiBzVFcgLT4gc1JRCQlSZWluY2FybmF0aW9uLCBtdXN0IHJldmVyc2Ugcm9sZXMKKwkJICoKKwkJICoJc05PLCBzUlEsIHNSUywgc1BPLCBzT1AsIHNDUiwgc0NHLCBzVFcgKi8KKwkJCXNJViwgc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywgc1JRCisJCX0sCisJCVtEQ0NQX1BLVF9SRVNQT05TRV0gPSB7CisJCS8qCisJCSAqIHNOTyAtPiBzSVYJCVJlc3BvbnNlIHdpdGhvdXQgUmVxdWVzdAorCQkgKiBzUlEgLT4gc1JTCQlSZXNwb25zZSB0byBjbGllbnRzIFJlcXVlc3QKKwkJICogc1JTIC0+IHNSUwkJUmV0cmFuc21pdHRlZCBSZXNwb25zZSAoOC4xLjMuIFNIT1VMRCBOT1QpCisJCSAqIHNQTyAtPiBzSUcJCVJlc3BvbnNlIHRvIGFuIGlnbm9yZWQgUmVxdWVzdCBvciBsYXRlIHJldHJhbnNtaXQKKwkJICogc09QIC0+IHNJRwkJSWdub3JlLCBtaWdodCBiZSByZXNwb25zZSB0byBpZ25vcmVkIFJlcXVlc3QKKwkJICogc0NSIC0+IHNJRwkJSWdub3JlLCBtaWdodCBiZSByZXNwb25zZSB0byBpZ25vcmVkIFJlcXVlc3QKKwkJICogc0NHIC0+IHNJRwkJSWdub3JlLCBtaWdodCBiZSByZXNwb25zZSB0byBpZ25vcmVkIFJlcXVlc3QKKwkJICogc1RXIC0+IHNJVgkJSW52YWxpZCwgUmVxdWVzdCBmcm9tIGNsaWVudCBpbiBzVFcgbW92ZXMgdG8gc1JRCisJCSAqCisJCSAqCXNOTywgc1JRLCBzUlMsIHNQTywgc09QLCBzQ1IsIHNDRywgc1RXICovCisJCQlzSVYsIHNSUywgc1JTLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJVgorCQl9LAorCQlbRENDUF9QS1RfQUNLXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUyAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1BPIC0+IHNPUAkJRW50ZXIgT1BFTiBzdGF0ZSAoOC4xLjUuKQorCQkgKiBzT1AgLT4gc09QCQlSZWd1bGFyIEFjayBpbiBPUEVOIHN0YXRlCisJCSAqIHNDUiAtPiBzSVYJCVdhaXRpbmcgZm9yIENsb3NlIGZyb20gY2xpZW50CisJCSAqIHNDRyAtPiBzQ0cJCUFjayBpbiBDTE9TSU5HIE1BWSBiZSBwcm9jZXNzZWQgKDguMy4pCisJCSAqIHNUVyAtPiBzSVYKKwkJICoKKwkJICoJc05PLCBzUlEsIHNSUywgc1BPLCBzT1AsIHNDUiwgc0NHLCBzVFcgKi8KKwkJCXNJViwgc0lWLCBzSVYsIHNPUCwgc09QLCBzSVYsIHNDRywgc0lWCisJCX0sCisJCVtEQ0NQX1BLVF9EQVRBXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUyAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1BPIC0+IHNPUAkJRW50ZXIgT1BFTiBzdGF0ZSAoOC4xLjUuKQorCQkgKiBzT1AgLT4gc09QCQlSZWd1bGFyIERhdGEgcGFja2V0IGluIE9QRU4gc3RhdGUKKwkJICogc0NSIC0+IHNJVgkJV2FpdGluZyBmb3IgQ2xvc2UgZnJvbSBjbGllbnQKKwkJICogc0NHIC0+IHNDRwkJRGF0YSBpbiBDTE9TSU5HIE1BWSBiZSBwcm9jZXNzZWQgKDguMy4pCisJCSAqIHNUVyAtPiBzSVYKKwkJICoKKwkJICoJc05PLCBzUlEsIHNSUywgc1BPLCBzT1AsIHNDUiwgc0NHLCBzVFcgKi8KKwkJCXNJViwgc0lWLCBzSVYsIHNPUCwgc09QLCBzSVYsIHNDRywgc0lWCisJCX0sCisJCVtEQ0NQX1BLVF9EQVRBQUNLXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUyAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1BPIC0+IHNPUAkJRW50ZXIgT1BFTiBzdGF0ZSAoOC4xLjUuKQorCQkgKiBzT1AgLT4gc09QCQlSZWd1bGFyIERhdGFBY2sgaW4gT1BFTiBzdGF0ZQorCQkgKiBzQ1IgLT4gc0lWCQlXYWl0aW5nIGZvciBDbG9zZSBmcm9tIGNsaWVudAorCQkgKiBzQ0cgLT4gc0NHCQlEYXRhIGluIENMT1NJTkcgTUFZIGJlIHByb2Nlc3NlZCAoOC4zLikKKwkJICogc1RXIC0+IHNJVgorCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lWLCBzSVYsIHNJViwgc09QLCBzT1AsIHNJViwgc0NHLCBzSVYKKwkJfSwKKwkJW0RDQ1BfUEtUX0NMT1NFUkVRXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUyAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1BPIC0+IHNPUCAtPiBzQ1IJTW92ZSBkaXJlY3RseSB0byBDTE9TRVJFUSAoOC4xLjUuKQorCQkgKiBzT1AgLT4gc0NSCQlDbG9zZVJlcSBpbiBPUEVOIHN0YXRlCisJCSAqIHNDUiAtPiBzQ1IJCVJldHJhbnNtaXQKKwkJICogc0NHIC0+IHNDUgkJU2ltdWx0YW5lb3VzIGNsb3NlLCBjbGllbnQgc2VuZHMgYW5vdGhlciBDbG9zZQorCQkgKiBzVFcgLT4gc0lWCQlBbHJlYWR5IGNsb3NlZAorCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lWLCBzSVYsIHNJViwgc0NSLCBzQ1IsIHNDUiwgc0NSLCBzSVYKKwkJfSwKKwkJW0RDQ1BfUEtUX0NMT1NFXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc0lWCQlObyBjb25uZWN0aW9uCisJCSAqIHNSUyAtPiBzSVYJCU5vIGNvbm5lY3Rpb24KKwkJICogc1BPIC0+IHNPUCAtPiBzQ0cJTW92ZSBkaXJlY2x5IHRvIENMT1NJTkcKKwkJICogc09QIC0+IHNDRwkJTW92ZSB0byBDTE9TSU5HCisJCSAqIHNDUiAtPiBzSVYJCUNsb3NlIGFmdGVyIENsb3NlUmVxIGlzIGludmFsaWQKKwkJICogc0NHIC0+IHNDRwkJUmV0cmFuc21pdAorCQkgKiBzVFcgLT4gc0lWCQlBbHJlYWR5IGNsb3NlZAorCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lWLCBzSVYsIHNJViwgc0NHLCBzQ0csIHNJViwgc0NHLCBzSVYKKwkJfSwKKwkJW0RDQ1BfUEtUX1JFU0VUXSA9IHsKKwkJLyoKKwkJICogc05PIC0+IHNJVgkJTm8gY29ubmVjdGlvbgorCQkgKiBzUlEgLT4gc1RXCQlSZXNldCBpbiByZXNwb25zZSB0byBSZXF1ZXN0CisJCSAqIHNSUyAtPiBzVFcJCVRpbWVvdXQsIFNIT1VMRCBzZW5kIFJlc2V0ICg4LjEuMy4pCisJCSAqIHNQTyAtPiBzVFcJCVRpbWVvdXQsIFNIT1VMRCBzZW5kIFJlc2V0ICg4LjEuMy4pCisJCSAqIHNPUCAtPiBzVFcKKwkJICogc0NSIC0+IHNUVworCQkgKiBzQ0cgLT4gc1RXCisJCSAqIHNUVyAtPiBzSUcJCUlnbm9yZSAoZG9uJ3QgcmVmcmVzaCB0aW1lcikKKwkJICoKKwkJICoJc05PLCBzUlEsIHNSUywgc1BPLCBzT1AsIHNDUiwgc0NHLCBzVFcsIHNUVyAqLworCQkJc0lWLCBzVFcsIHNUVywgc1RXLCBzVFcsIHNUVywgc1RXLCBzVFcsIHNJRworCQl9LAorCQlbRENDUF9QS1RfU1lOQ10gPSB7CisJCS8qCisJCSAqIFdlIGN1cnJlbnRseSBpZ25vcmUgU3luYyBwYWNrZXRzCisJCSAqCisJCSAqCXNOTywgc1JRLCBzUlMsIHNQTywgc09QLCBzQ1IsIHNDRywgc1RXICovCisJCQlzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywKKwkJfSwKKwkJW0RDQ1BfUEtUX1NZTkNBQ0tdID0geworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgaWdub3JlIFN5bmNBY2sgcGFja2V0cworCQkgKgorCQkgKglzTk8sIHNSUSwgc1JTLCBzUE8sIHNPUCwgc0NSLCBzQ0csIHNUVyAqLworCQkJc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBib29sIGRjY3BfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJc3RydWN0IGRjY3BfaGRyIF9oZHIsICpkaDsKKworCWRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7CisJaWYgKGRoID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCXR1cGxlLT5zcmMudS5kY2NwLnBvcnQgPSBkaC0+ZGNjcGhfc3BvcnQ7CisJdHVwbGUtPmRzdC51LmRjY3AucG9ydCA9IGRoLT5kY2NwaF9kcG9ydDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZGNjcF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJaW52LT5zcmMudS5kY2NwLnBvcnQgPSB0dXBsZS0+ZHN0LnUuZGNjcC5wb3J0OworCWludi0+ZHN0LnUuZGNjcC5wb3J0ID0gdHVwbGUtPnNyYy51LmRjY3AucG9ydDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZGNjcF9uZXcoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQoreworCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKKwljb25zdCBjaGFyICptc2c7CisJdV9pbnQ4X3Qgc3RhdGU7CisKKwlkaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfZGgpLCAmZGgpOworCUJVR19PTihkaCA9PSBOVUxMKTsKKworCXN0YXRlID0gZGNjcF9zdGF0ZV90YWJsZVtDVF9EQ0NQX1JPTEVfQ0xJRU5UXVtkaC0+ZGNjcGhfdHlwZV1bQ1RfRENDUF9OT05FXTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJZGVmYXVsdDoKKwkJaWYgKG5mX2N0X2RjY3BfbG9vc2UgPT0gMCkgeworCQkJbXNnID0gIm5mX2N0X2RjY3A6IG5vdCBwaWNraW5nIHVwIGV4aXN0aW5nIGNvbm5lY3Rpb24gIjsKKwkJCWdvdG8gb3V0X2ludmFsaWQ7CisJCX0KKwljYXNlIENUX0RDQ1BfUkVRVUVTVDoKKwkJYnJlYWs7CisJY2FzZSBDVF9EQ0NQX0lOVkFMSUQ6CisJCW1zZyA9ICJuZl9jdF9kY2NwOiBpbnZhbGlkIHN0YXRlIHRyYW5zaXRpb24gIjsKKwkJZ290byBvdXRfaW52YWxpZDsKKwl9CisKKwljdC0+cHJvdG8uZGNjcC5yb2xlW0lQX0NUX0RJUl9PUklHSU5BTF0gPSBDVF9EQ0NQX1JPTEVfQ0xJRU5UOworCWN0LT5wcm90by5kY2NwLnJvbGVbSVBfQ1RfRElSX1JFUExZXSA9IENUX0RDQ1BfUk9MRV9TRVJWRVI7CisJY3QtPnByb3RvLmRjY3Auc3RhdGUgPSBDVF9EQ0NQX05PTkU7CisJcmV0dXJuIHRydWU7CisKK291dF9pbnZhbGlkOgorCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0RDQ1ApKQorCQluZl9sb2dfcGFja2V0KG5mX2N0X2wzbnVtKGN0KSwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLCBtc2cpOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHU2NCBkY2NwX2Fja19zZXEoY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCkKK3sKKwljb25zdCBzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMgKmRoYWNrOworCisJZGhhY2sgPSAodm9pZCAqKWRoICsgX19kY2NwX2Jhc2ljX2hkcl9sZW4oZGgpOworCXJldHVybiAoKHU2NCludG9ocyhkaGFjay0+ZGNjcGhfYWNrX25yX2hpZ2gpIDw8IDMyKSArCisJCSAgICAgbnRvaGwoZGhhY2stPmRjY3BoX2Fja19ucl9sb3cpOworfQorCitzdGF0aWMgaW50IGRjY3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIGludCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CisJdV9pbnQ4X3QgdHlwZSwgb2xkX3N0YXRlLCBuZXdfc3RhdGU7CisJZW51bSBjdF9kY2NwX3JvbGVzIHJvbGU7CisKKwlkaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfZGgpLCAmZGgpOworCUJVR19PTihkaCA9PSBOVUxMKTsKKwl0eXBlID0gZGgtPmRjY3BoX3R5cGU7CisKKwlpZiAodHlwZSA9PSBEQ0NQX1BLVF9SRVNFVCAmJgorCSAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY3QtPnN0YXR1cykpIHsKKwkJLyogVGVhciBkb3duIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHkgaWYgb25seSByZXBseSBpcyBhIFJFU0VUICovCisJCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkKKwkJCWN0LT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKWN0KTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwl3cml0ZV9sb2NrX2JoKCZkY2NwX2xvY2spOworCisJcm9sZSA9IGN0LT5wcm90by5kY2NwLnJvbGVbZGlyXTsKKwlvbGRfc3RhdGUgPSBjdC0+cHJvdG8uZGNjcC5zdGF0ZTsKKwluZXdfc3RhdGUgPSBkY2NwX3N0YXRlX3RhYmxlW3JvbGVdW3R5cGVdW29sZF9zdGF0ZV07CisKKwlzd2l0Y2ggKG5ld19zdGF0ZSkgeworCWNhc2UgQ1RfRENDUF9SRVFVRVNUOgorCQlpZiAob2xkX3N0YXRlID09IENUX0RDQ1BfVElNRVdBSVQgJiYKKwkJICAgIHJvbGUgPT0gQ1RfRENDUF9ST0xFX1NFUlZFUikgeworCQkJLyogUmVpbmNhcm5hdGlvbiBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb246IHJlb3BlbiBhbmQKKwkJCSAqIHJldmVyc2UgY2xpZW50L3NlcnZlciByb2xlcy4gKi8KKwkJCWN0LT5wcm90by5kY2NwLnJvbGVbZGlyXSA9IENUX0RDQ1BfUk9MRV9DTElFTlQ7CisJCQljdC0+cHJvdG8uZGNjcC5yb2xlWyFkaXJdID0gQ1RfRENDUF9ST0xFX1NFUlZFUjsKKwkJfQorCQlicmVhazsKKwljYXNlIENUX0RDQ1BfUkVTUE9ORDoKKwkJaWYgKG9sZF9zdGF0ZSA9PSBDVF9EQ0NQX1JFUVVFU1QpCisJCQljdC0+cHJvdG8uZGNjcC5oYW5kc2hha2Vfc2VxID0gZGNjcF9oZHJfc2VxKGRoKTsKKwkJYnJlYWs7CisJY2FzZSBDVF9EQ0NQX1BBUlRPUEVOOgorCQlpZiAob2xkX3N0YXRlID09IENUX0RDQ1BfUkVTUE9ORCAmJgorCQkgICAgdHlwZSA9PSBEQ0NQX1BLVF9BQ0sgJiYKKwkJICAgIGRjY3BfYWNrX3NlcShkaCkgPT0gY3QtPnByb3RvLmRjY3AuaGFuZHNoYWtlX3NlcSkKKwkJCXNldF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQ1RfRENDUF9JR05PUkU6CisJCS8qCisJCSAqIENvbm5lY3Rpb24gdHJhY2tpbmcgbWlnaHQgYmUgb3V0IG9mIHN5bmMsIHNvIHdlIGlnbm9yZQorCQkgKiBwYWNrZXRzIHRoYXQgbWlnaHQgZXN0YWJsaXNoIGEgbmV3IGNvbm5lY3Rpb24gYW5kIHJlc3luYworCQkgKiBpZiB0aGUgc2VydmVyIHJlc3BvbmRzIHdpdGggYSB2YWxpZCBSZXNwb25zZS4KKwkJICovCisJCWlmIChjdC0+cHJvdG8uZGNjcC5sYXN0X2RpciA9PSAhZGlyICYmCisJCSAgICBjdC0+cHJvdG8uZGNjcC5sYXN0X3BrdCA9PSBEQ0NQX1BLVF9SRVFVRVNUICYmCisJCSAgICB0eXBlID09IERDQ1BfUEtUX1JFU1BPTlNFKSB7CisJCQljdC0+cHJvdG8uZGNjcC5yb2xlWyFkaXJdID0gQ1RfRENDUF9ST0xFX0NMSUVOVDsKKwkJCWN0LT5wcm90by5kY2NwLnJvbGVbZGlyXSA9IENUX0RDQ1BfUk9MRV9TRVJWRVI7CisJCQljdC0+cHJvdG8uZGNjcC5oYW5kc2hha2Vfc2VxID0gZGNjcF9oZHJfc2VxKGRoKTsKKwkJCW5ld19zdGF0ZSA9IENUX0RDQ1BfUkVTUE9ORDsKKwkJCWJyZWFrOworCQl9CisJCWN0LT5wcm90by5kY2NwLmxhc3RfZGlyID0gZGlyOworCQljdC0+cHJvdG8uZGNjcC5sYXN0X3BrdCA9IHR5cGU7CisKKwkJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOworCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19EQ0NQKSkKKwkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICAgICAibmZfY3RfZGNjcDogaW52YWxpZCBwYWNrZXQgaWdub3JlZCAiKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwljYXNlIENUX0RDQ1BfSU5WQUxJRDoKKwkJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOworCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19EQ0NQKSkKKwkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICAgICAibmZfY3RfZGNjcDogaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9uICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwljdC0+cHJvdG8uZGNjcC5sYXN0X2RpciA9IGRpcjsKKwljdC0+cHJvdG8uZGNjcC5sYXN0X3BrdCA9IHR5cGU7CisJY3QtPnByb3RvLmRjY3Auc3RhdGUgPSBuZXdfc3RhdGU7CisJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOworCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGRjY3BfdGltZW91dFtuZXdfc3RhdGVdKTsKKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBpbnQgZGNjcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLCBpbnQgcGYsCisJCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQoreworCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKKwl1bnNpZ25lZCBpbnQgZGNjcF9sZW4gPSBza2ItPmxlbiAtIGRhdGFvZmY7CisJdW5zaWduZWQgaW50IGNzY292OworCWNvbnN0IGNoYXIgKm1zZzsKKworCWRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF9kaCksICZkaCk7CisJaWYgKGRoID09IE5VTEwpIHsKKwkJbXNnID0gIm5mX2N0X2RjY3A6IHNob3J0IHBhY2tldCAiOworCQlnb3RvIG91dF9pbnZhbGlkOworCX0KKworCWlmIChkaC0+ZGNjcGhfZG9mZiAqIDQgPCBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSB8fAorCSAgICBkaC0+ZGNjcGhfZG9mZiAqIDQgPiBkY2NwX2xlbikgeworCQltc2cgPSAibmZfY3RfZGNjcDogdHJ1bmNhdGVkL21hbGZvcm1lZCBwYWNrZXQgIjsKKwkJZ290byBvdXRfaW52YWxpZDsKKwl9CisKKwljc2NvdiA9IGRjY3BfbGVuOworCWlmIChkaC0+ZGNjcGhfY3Njb3YpIHsKKwkJY3Njb3YgPSAoZGgtPmRjY3BoX2NzY292IC0gMSkgKiA0OworCQlpZiAoY3Njb3YgPiBkY2NwX2xlbikgeworCQkJbXNnID0gIm5mX2N0X2RjY3A6IGJhZCBjaGVja3N1bSBjb3ZlcmFnZSAiOworCQkJZ290byBvdXRfaW52YWxpZDsKKwkJfQorCX0KKworCWlmIChuZl9jb25udHJhY2tfY2hlY2tzdW0gJiYgaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HICYmCisJICAgIG5mX2NoZWNrc3VtX3BhcnRpYWwoc2tiLCBob29rbnVtLCBkYXRhb2ZmLCBjc2NvdiwgSVBQUk9UT19EQ0NQLAorCQkJCXBmKSkgeworCQltc2cgPSAibmZfY3RfZGNjcDogYmFkIGNoZWNrc3VtICI7CisJCWdvdG8gb3V0X2ludmFsaWQ7CisJfQorCisJaWYgKGRoLT5kY2NwaF90eXBlID49IERDQ1BfUEtUX0lOVkFMSUQpIHsKKwkJbXNnID0gIm5mX2N0X2RjY3A6IHJlc2VydmVkIHBhY2tldCB0eXBlICI7CisJCWdvdG8gb3V0X2ludmFsaWQ7CisJfQorCisJcmV0dXJuIE5GX0FDQ0VQVDsKKworb3V0X2ludmFsaWQ6CisJaWYgKExPR19JTlZBTElEKElQUFJPVE9fRENDUCkpCisJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwgbXNnKTsKKwlyZXR1cm4gLU5GX0FDQ0VQVDsKK30KKworc3RhdGljIGludCBkY2NwX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3BvcnQ9JWh1IGRwb3J0PSVodSAiLAorCQkJICBudG9ocyh0dXBsZS0+c3JjLnUuZGNjcC5wb3J0KSwKKwkJCSAgbnRvaHModHVwbGUtPmRzdC51LmRjY3AucG9ydCkpOworfQorCitzdGF0aWMgaW50IGRjY3BfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiBzZXFfcHJpbnRmKHMsICIlcyAiLCBkY2NwX3N0YXRlX25hbWVzW2N0LT5wcm90by5kY2NwLnN0YXRlXSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKK3N0YXRpYyBpbnQgZGNjcF90b19ubGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sYXR0ciAqbmxhLAorCQkJICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJc3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtczsKKworCXJlYWRfbG9ja19iaCgmZGNjcF9sb2NrKTsKKwluZXN0X3Bhcm1zID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBDVEFfUFJPVE9JTkZPX0RDQ1AgfCBOTEFfRl9ORVNURUQpOworCWlmICghbmVzdF9wYXJtcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJTkxBX1BVVF9VOChza2IsIENUQV9QUk9UT0lORk9fRENDUF9TVEFURSwgY3QtPnByb3RvLmRjY3Auc3RhdGUpOworCW5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpOworCXJlYWRfdW5sb2NrX2JoKCZkY2NwX2xvY2spOworCXJldHVybiAwOworCitubGFfcHV0X2ZhaWx1cmU6CisJcmVhZF91bmxvY2tfYmgoJmRjY3BfbG9jayk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZGNjcF9ubGFfcG9saWN5W0NUQV9QUk9UT0lORk9fRENDUF9NQVggKyAxXSA9IHsKKwlbQ1RBX1BST1RPSU5GT19EQ0NQX1NUQVRFXQk9IHsgLnR5cGUgPSBOTEFfVTggfSwKK307CisKK3N0YXRpYyBpbnQgbmxhdHRyX3RvX2RjY3Aoc3RydWN0IG5sYXR0ciAqY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlzdHJ1Y3QgbmxhdHRyICphdHRyID0gY2RhW0NUQV9QUk9UT0lORk9fRENDUF07CisJc3RydWN0IG5sYXR0ciAqdGJbQ1RBX1BST1RPSU5GT19EQ0NQX01BWCArIDFdOworCWludCBlcnI7CisKKwlpZiAoIWF0dHIpCisJCXJldHVybiAwOworCisJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPSU5GT19EQ0NQX01BWCwgYXR0ciwKKwkJCSAgICAgICBkY2NwX25sYV9wb2xpY3kpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCF0YltDVEFfUFJPVE9JTkZPX0RDQ1BfU1RBVEVdIHx8CisJICAgIG5sYV9nZXRfdTgodGJbQ1RBX1BST1RPSU5GT19EQ0NQX1NUQVRFXSkgPj0gQ1RfRENDUF9JR05PUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfbG9ja19iaCgmZGNjcF9sb2NrKTsKKwljdC0+cHJvdG8uZGNjcC5zdGF0ZSA9IG5sYV9nZXRfdTgodGJbQ1RBX1BST1RPSU5GT19EQ0NQX1NUQVRFXSk7CisJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdGF0aWMgdW5zaWduZWQgaW50IGRjY3Bfc3lzY3RsX3RhYmxlX3VzZXJzOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpkY2NwX3N5c2N0bF9oZWFkZXI7CitzdGF0aWMgY3RsX3RhYmxlIGRjY3Bfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfcmVxdWVzdCIsCisJCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVFVRVNUXSwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3Jlc3BvbmQiLAorCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF0sCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9wYXJ0b3BlbiIsCisJCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl0sCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9vcGVuIiwKKwkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX09QRU5dLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfY2xvc2VyZXEiLAorCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfY2xvc2luZyIsCisJCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9DTE9TSU5HXSwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3RpbWV3YWl0IiwKKwkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX1RJTUVXQUlUXSwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF9sb29zZSIsCisJCS5kYXRhCQk9ICZuZl9jdF9kY2NwX2xvb3NlLAorCQkubWF4bGVuCQk9IHNpemVvZihuZl9jdF9kY2NwX2xvb3NlKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IDAsCisJfQorfTsKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gZGNjcF9wcm90bzQgX19yZWFkX21vc3RseSA9IHsKKwkubDNwcm90bwkJPSBBRl9JTkVULAorCS5sNHByb3RvCQk9IElQUFJPVE9fRENDUCwKKwkubmFtZQkJCT0gImRjY3AiLAorCS5wa3RfdG9fdHVwbGUJCT0gZGNjcF9wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZQkJPSBkY2NwX2ludmVydF90dXBsZSwKKwkubmV3CQkJPSBkY2NwX25ldywKKwkucGFja2V0CQkJPSBkY2NwX3BhY2tldCwKKwkuZXJyb3IJCQk9IGRjY3BfZXJyb3IsCisJLnByaW50X3R1cGxlCQk9IGRjY3BfcHJpbnRfdHVwbGUsCisJLnByaW50X2Nvbm50cmFjawk9IGRjY3BfcHJpbnRfY29ubnRyYWNrLAorI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQorCS50b19ubGF0dHIJCT0gZGNjcF90b19ubGF0dHIsCisJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19kY2NwLAorCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCisJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCisJLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAorCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gZGNjcF9wcm90bzYgX19yZWFkX21vc3RseSA9IHsKKwkubDNwcm90bwkJPSBBRl9JTkVUNiwKKwkubDRwcm90bwkJPSBJUFBST1RPX0RDQ1AsCisJLm5hbWUJCQk9ICJkY2NwIiwKKwkucGt0X3RvX3R1cGxlCQk9IGRjY3BfcGt0X3RvX3R1cGxlLAorCS5pbnZlcnRfdHVwbGUJCT0gZGNjcF9pbnZlcnRfdHVwbGUsCisJLm5ldwkJCT0gZGNjcF9uZXcsCisJLnBhY2tldAkJCT0gZGNjcF9wYWNrZXQsCisJLmVycm9yCQkJPSBkY2NwX2Vycm9yLAorCS5wcmludF90dXBsZQkJPSBkY2NwX3ByaW50X3R1cGxlLAorCS5wcmludF9jb25udHJhY2sJPSBkY2NwX3ByaW50X2Nvbm50cmFjaywKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKKwkudG9fbmxhdHRyCQk9IGRjY3BfdG9fbmxhdHRyLAorCS5mcm9tX25sYXR0cgkJPSBubGF0dHJfdG9fZGNjcCwKKwkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAorCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNDVEwKKwkuY3RsX3RhYmxlX3VzZXJzCT0gJmRjY3Bfc3lzY3RsX3RhYmxlX3VzZXJzLAorCS5jdGxfdGFibGVfaGVhZGVyCT0gJmRjY3Bfc3lzY3RsX2hlYWRlciwKKwkuY3RsX3RhYmxlCQk9IGRjY3Bfc3lzY3RsX3RhYmxlLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyMTsKKworCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyMjsKKwlyZXR1cm4gMDsKKworZXJyMjoKKwluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CitlcnIxOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9maW5pKHZvaWQpCit7CisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90bzYpOworCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKK30KKworbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX3Byb3RvX2RjY3BfaW5pdCk7Cittb2R1bGVfZXhpdChuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9maW5pKTsKKworTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRDQ1AgY29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoZWxwZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCA1NTQ1ODkxLi5lMzFiMGU3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCkBAIC0xNCwyMyArMTQsMjMgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF9nZW5lcmljX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IDYwMCpIWjsKIAotc3RhdGljIGludCBnZW5lcmljX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorc3RhdGljIGJvb2wgZ2VuZXJpY19wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXR1cGxlLT5zcmMudS5hbGwgPSAwOwogCXR1cGxlLT5kc3QudS5hbGwgPSAwOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgZ2VuZXJpY19pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3N0YXRpYyBib29sIGdlbmVyaWNfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQogewogCXR1cGxlLT5zcmMudS5hbGwgPSAwOwogCXR1cGxlLT5kc3QudS5hbGwgPSAwOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwpAQCAtNTMsMTAgKzUzLDEwIEBACiB9CiAKIC8qIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQuICovCi1zdGF0aWMgaW50IG5ldyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQorc3RhdGljIGJvb2wgbmV3KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJdW5zaWduZWQgaW50IGRhdGFvZmYpCiB7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jCmluZGV4IGUxMDAyNGEuLjY1NGE0ZjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jCkBAIC04Miw3ICs4Miw3IEBACiAJcmVhZF91bmxvY2tfYmgoJm5mX2N0X2dyZV9sb2NrKTsKIAogCXByX2RlYnVnKCJsb29rdXAgc3JjIGtleSAweCV4IGZvciAiLCBrZXkpOwotCU5GX0NUX0RVTVBfVFVQTEUodCk7CisJbmZfY3RfZHVtcF90dXBsZSh0KTsKIAogCXJldHVybiBrZXk7CiB9CkBAIC0xMTMsNyArMTEzLDcgQEAKIAkqa21wID0ga207CiAKIAlwcl9kZWJ1ZygiYWRkaW5nIG5ldyBlbnRyeSAlcDogIiwga20pOwotCU5GX0NUX0RVTVBfVFVQTEUoJmttLT50dXBsZSk7CisJbmZfY3RfZHVtcF90dXBsZSgma20tPnR1cGxlKTsKIAogCXdyaXRlX2xvY2tfYmgoJm5mX2N0X2dyZV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZrbS0+bGlzdCwgJmdyZV9rZXltYXBfbGlzdCk7CkBAIC0xNDgsMTggKzE0OCwxNyBAQAogLyogUFVCTElDIENPTk5UUkFDSyBQUk9UTyBIRUxQRVIgRlVOQ1RJT05TICovCiAKIC8qIGludmVydCBncmUgcGFydCBvZiB0dXBsZSAqLwotc3RhdGljIGludCBncmVfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAotCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCitzdGF0aWMgYm9vbCBncmVfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQogewogCXR1cGxlLT5kc3QudS5ncmUua2V5ID0gb3JpZy0+c3JjLnUuZ3JlLmtleTsKIAl0dXBsZS0+c3JjLnUuZ3JlLmtleSA9IG9yaWctPmRzdC51LmdyZS5rZXk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qIGdyZSBoZHIgaW5mbyB0byB0dXBsZSAqLwotc3RhdGljIGludCBncmVfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJCSAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorc3RhdGljIGJvb2wgZ3JlX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJY29uc3Qgc3RydWN0IGdyZV9oZHJfcHB0cCAqcGdyZWhkcjsKIAlzdHJ1Y3QgZ3JlX2hkcl9wcHRwIF9wZ3JlaGRyOwpAQCAtMTczLDI0ICsxNzIsMjQgQEAKIAkJLyogdHJ5IHRvIGJlaGF2ZSBsaWtlICJuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYyIgKi8KIAkJdHVwbGUtPnNyYy51LmFsbCA9IDA7CiAJCXR1cGxlLT5kc3QudS5hbGwgPSAwOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAJfQogCiAJLyogUFBUUCBoZWFkZXIgaXMgdmFyaWFibGUgbGVuZ3RoLCBvbmx5IG5lZWQgdXAgdG8gdGhlIGNhbGxfaWQgZmllbGQgKi8KIAlwZ3JlaGRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgOCwgJl9wZ3JlaGRyKTsKIAlpZiAoIXBncmVoZHIpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChudG9ocyhncmVoZHItPnByb3RvY29sKSAhPSBHUkVfUFJPVE9DT0xfUFBUUCkgewogCQlwcl9kZWJ1ZygiR1JFX1ZFUlNJT05fUFBUUCBidXQgdW5rbm93biBwcm90b1xuIik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJdHVwbGUtPmRzdC51LmdyZS5rZXkgPSBwZ3JlaGRyLT5jYWxsX2lkOwogCXNyY2tleSA9IGdyZV9rZXltYXBfbG9va3VwKHR1cGxlKTsKIAl0dXBsZS0+c3JjLnUuZ3JlLmtleSA9IHNyY2tleTsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKiBwcmludCBncmUgcGFydCBvZiB0dXBsZSAqLwpAQCAtMjM1LDE4ICsyMzQsMTggQEAKIH0KIAogLyogQ2FsbGVkIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBmb3VuZC4gKi8KLXN0YXRpYyBpbnQgZ3JlX25ldyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQorc3RhdGljIGJvb2wgZ3JlX25ldyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKIHsKIAlwcl9kZWJ1ZygiOiAiKTsKLQlORl9DVF9EVU1QX1RVUExFKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOworCW5mX2N0X2R1bXBfdHVwbGUoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CiAKIAkvKiBpbml0aWFsaXplIHRvIHNhbmUgdmFsdWUuICBJZGVhbGx5IGEgY29ubnRyYWNrIGhlbHBlcgogCSAqIChlLmcuIGluIGNhc2Ugb2YgcHB0cCkgaXMgaW5jcmVhc2luZyB0aGVtICovCiAJY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCA9IEdSRV9TVFJFQU1fVElNRU9VVDsKIAljdC0+cHJvdG8uZ3JlLnRpbWVvdXQgPSBHUkVfVElNRU9VVDsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKiBDYWxsZWQgd2hlbiBhIGNvbm50cmFjayBlbnRyeSBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaGFzaGVzCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKaW5kZXggZjlhMDgzNy4uY2JmMmUyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAgICBBbmQgc28gZm9yIG1lIGZvciBTQ1RQIDpEIC1LaXJhbiAqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqc2N0cF9jb25udHJhY2tfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzY3RwX2Nvbm50cmFja19uYW1lc1tdID0gewogCSJOT05FIiwKIAkiQ0xPU0VEIiwKIAkiQ09PS0lFX1dBSVQiLApAQCAtMTMwLDI4ICsxMzAsMjggQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IHNjdHBfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyBib29sIHNjdHBfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7Ci0Jc2N0cF9zY3RwaGRyX3QgX2hkciwgKmhwOworCWNvbnN0IHN0cnVjdCBzY3RwaGRyICpocDsKKwlzdHJ1Y3Qgc2N0cGhkciBfaGRyOwogCiAJLyogQWN0dWFsbHkgb25seSBuZWVkIGZpcnN0IDggYnl0ZXMuICovCiAJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBkYXRhb2ZmLCA4LCAmX2hkcik7CiAJaWYgKGhwID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAl0dXBsZS0+c3JjLnUuc2N0cC5wb3J0ID0gaHAtPnNvdXJjZTsKIAl0dXBsZS0+ZHN0LnUuc2N0cC5wb3J0ID0gaHAtPmRlc3Q7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgc2N0cF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCitzdGF0aWMgYm9vbCBzY3RwX2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7CiAJdHVwbGUtPnNyYy51LnNjdHAucG9ydCA9IG9yaWctPmRzdC51LnNjdHAucG9ydDsKIAl0dXBsZS0+ZHN0LnUuc2N0cC5wb3J0ID0gb3JpZy0+c3JjLnUuc2N0cC5wb3J0OwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KQEAgLTI5Miw4ICsyOTIsMTAgQEAKIHsKIAllbnVtIHNjdHBfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlOwogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7Ci0Jc2N0cF9zY3RwaGRyX3QgX3NjdHBoLCAqc2g7Ci0Jc2N0cF9jaHVua2hkcl90IF9zY2gsICpzY2g7CisJY29uc3Qgc3RydWN0IHNjdHBoZHIgKnNoOworCXN0cnVjdCBzY3RwaGRyIF9zY3RwaDsKKwljb25zdCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqc2NoOworCXN0cnVjdCBzY3RwX2NodW5raGRyIF9zY2g7CiAJdV9pbnQzMl90IG9mZnNldCwgY291bnQ7CiAJdW5zaWduZWQgbG9uZyBtYXBbMjU2IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXSA9IHsgMCB9OwogCkBAIC0zOTAsMjcgKzM5MiwyOSBAQAogfQogCiAvKiBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGlzIHByb3RvY29sIGZvdW5kLiAqLwotc3RhdGljIGludCBzY3RwX25ldyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKK3N0YXRpYyBib29sIHNjdHBfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKIHsKIAllbnVtIHNjdHBfY29ubnRyYWNrIG5ld19zdGF0ZTsKLQlzY3RwX3NjdHBoZHJfdCBfc2N0cGgsICpzaDsKLQlzY3RwX2NodW5raGRyX3QgX3NjaCwgKnNjaDsKKwljb25zdCBzdHJ1Y3Qgc2N0cGhkciAqc2g7CisJc3RydWN0IHNjdHBoZHIgX3NjdHBoOworCWNvbnN0IHN0cnVjdCBzY3RwX2NodW5raGRyICpzY2g7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgX3NjaDsKIAl1X2ludDMyX3Qgb2Zmc2V0LCBjb3VudDsKIAl1bnNpZ25lZCBsb25nIG1hcFsyNTYgLyBzaXplb2YodW5zaWduZWQgbG9uZyldID0geyAwIH07CiAKIAlzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfc2N0cGgpLCAmX3NjdHBoKTsKIAlpZiAoc2ggPT0gTlVMTCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlmIChkb19iYXNpY19jaGVja3MoY3QsIHNrYiwgZGF0YW9mZiwgbWFwKSAhPSAwKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogSWYgYW4gT09UQiBwYWNrZXQgaGFzIGFueSBvZiB0aGVzZSBjaHVua3MgZGlzY2FyZCAoU2VjIDguNCkgKi8KIAlpZiAodGVzdF9iaXQoU0NUUF9DSURfQUJPUlQsIG1hcCkgfHwKIAkgICAgdGVzdF9iaXQoU0NUUF9DSURfU0hVVERPV05fQ09NUExFVEUsIG1hcCkgfHwKIAkgICAgdGVzdF9iaXQoU0NUUF9DSURfQ09PS0lFX0FDSywgbWFwKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCW5ld19zdGF0ZSA9IFNDVFBfQ09OTlRSQUNLX01BWDsKIAlmb3JfZWFjaF9zY3RwX2NodW5rIChza2IsIHNjaCwgX3NjaCwgb2Zmc2V0LCBkYXRhb2ZmLCBjb3VudCkgewpAQCAtNDIyLDcgKzQyNiw3IEBACiAJCWlmIChuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfTk9ORSB8fAogCQkgICAgbmV3X3N0YXRlID09IFNDVFBfQ09OTlRSQUNLX01BWCkgewogCQkJcHJfZGVidWcoIm5mX2Nvbm50cmFja19zY3RwOiBpbnZhbGlkIG5ldyBkZWxldGluZy5cbiIpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAogCQkvKiBDb3B5IHRoZSB2dGFnIGludG8gdGhlIHN0YXRlIGluZm8gKi8KQEAgLTQzMyw3ICs0MzcsNyBAQAogCQkJCWloID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCksCiAJCQkJCQkJc2l6ZW9mKF9pbml0aGRyKSwgJl9pbml0aGRyKTsKIAkJCQlpZiAoaWggPT0gTlVMTCkKLQkJCQkJcmV0dXJuIDA7CisJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJCXByX2RlYnVnKCJTZXR0aW5nIHZ0YWcgJXggZm9yIG5ldyBjb25uXG4iLAogCQkJCQkgaWgtPmluaXRfdGFnKTsKQEAgLTQ0Miw3ICs0NDYsNyBAQAogCQkJCQkJCQlpaC0+aW5pdF90YWc7CiAJCQl9IGVsc2UgewogCQkJCS8qIFNlYyA4LjUuMSAoQSkgKi8KLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAkJLyogSWYgaXQgaXMgYSBzaHV0ZG93biBhY2sgT09UQiBwYWNrZXQsIHdlIGV4cGVjdCBhIHJldHVybgpAQCAtNDU2LDcgKzQ2MCw3IEBACiAJCWN0LT5wcm90by5zY3RwLnN0YXRlID0gbmV3X3N0YXRlOwogCX0KIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCA2MjU2Nzk1Li5iYTk0MDA0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtMjU3LDkgKzI1Nyw4IEBACiAJfQogfTsKIAotc3RhdGljIGludCB0Y3BfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCQkgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitzdGF0aWMgYm9vbCB0Y3BfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAljb25zdCBzdHJ1Y3QgdGNwaGRyICpocDsKIAlzdHJ1Y3QgdGNwaGRyIF9oZHI7CkBAIC0yNjcsMjAgKzI2NiwyMCBAQAogCS8qIEFjdHVhbGx5IG9ubHkgbmVlZCBmaXJzdCA4IGJ5dGVzLiAqLwogCWhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgOCwgJl9oZHIpOwogCWlmIChocCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJdHVwbGUtPnNyYy51LnRjcC5wb3J0ID0gaHAtPnNvdXJjZTsKIAl0dXBsZS0+ZHN0LnUudGNwLnBvcnQgPSBocC0+ZGVzdDsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IHRjcF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3N0YXRpYyBib29sIHRjcF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7CiAJdHVwbGUtPnNyYy51LnRjcC5wb3J0ID0gb3JpZy0+ZHN0LnUudGNwLnBvcnQ7CiAJdHVwbGUtPmRzdC51LnRjcC5wb3J0ID0gb3JpZy0+c3JjLnUudGNwLnBvcnQ7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwpAQCAtNDc4LDIwICs0NzcsMjAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdGNwX2luX3dpbmRvdyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkgc3RydWN0IGlwX2N0X3RjcCAqc3RhdGUsCi0JCQkgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKLQkJCSB1bnNpZ25lZCBpbnQgaW5kZXgsCi0JCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJCSBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAotCQkJIGludCBwZikKK3N0YXRpYyBib29sIHRjcF9pbl93aW5kb3coY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICBzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSwKKwkJCSAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKKwkJCSAgdW5zaWduZWQgaW50IGluZGV4LAorCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCSAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCwKKwkJCSAgaW50IHBmKQogewogCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9ICZzdGF0ZS0+c2VlbltkaXJdOwogCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnJlY2VpdmVyID0gJnN0YXRlLT5zZWVuWyFkaXJdOwogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlID0gJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZTsKIAlfX3UzMiBzZXEsIGFjaywgc2FjaywgZW5kLCB3aW4sIHN3aW47Ci0JaW50IHJlczsKKwlib29sIHJlczsKIAogCS8qCiAJICogR2V0IHRoZSByZXF1aXJlZCBkYXRhIGZyb20gdGhlIHBhY2tldC4KQEAgLTUwNiw3ICs1MDUsNyBAQAogCiAJcHJfZGVidWcoInRjcF9pbl93aW5kb3c6IFNUQVJUXG4iKTsKIAlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogIik7Ci0JTkZfQ1RfRFVNUF9UVVBMRSh0dXBsZSk7CisJbmZfY3RfZHVtcF90dXBsZSh0dXBsZSk7CiAJcHJfZGVidWcoInNlcT0ldSBhY2s9JXUgc2Fjaz0ldSB3aW49JXUgZW5kPSV1XG4iLAogCQkgc2VxLCBhY2ssIHNhY2ssIHdpbiwgZW5kKTsKIAlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpICIKQEAgLTU5Myw3ICs1OTIsNyBAQAogCQlzZXEgPSBlbmQgPSBzZW5kZXItPnRkX2VuZDsKIAogCXByX2RlYnVnKCJ0Y3BfaW5fd2luZG93OiAiKTsKLQlORl9DVF9EVU1QX1RVUExFKHR1cGxlKTsKKwluZl9jdF9kdW1wX3R1cGxlKHR1cGxlKTsKIAlwcl9kZWJ1Zygic2VxPSV1IGFjaz0ldSBzYWNrID0ldSB3aW49JXUgZW5kPSV1XG4iLAogCQkgc2VxLCBhY2ssIHNhY2ssIHdpbiwgZW5kKTsKIAlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpICIKQEAgLTY1NywxMiArNjU2LDEyIEBACiAJCQkJc3RhdGUtPnJldHJhbnMgPSAwOwogCQkJfQogCQl9Ci0JCXJlcyA9IDE7CisJCXJlcyA9IHRydWU7CiAJfSBlbHNlIHsKLQkJcmVzID0gMDsKKwkJcmVzID0gZmFsc2U7CiAJCWlmIChzZW5kZXItPmZsYWdzICYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fAogCQkgICAgbmZfY3RfdGNwX2JlX2xpYmVyYWwpCi0JCQlyZXMgPSAxOworCQkJcmVzID0gdHJ1ZTsKIAkJaWYgKCFyZXMgJiYgTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQogCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJIm5mX2N0X3RjcDogJXMgIiwKQEAgLTY3Niw3ICs2NzUsNyBAQAogCQkJOiAiU0VRIGlzIG92ZXIgdGhlIHVwcGVyIGJvdW5kIChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKSIpOwogCX0KIAotCXByX2RlYnVnKCJ0Y3BfaW5fd2luZG93OiByZXM9JWkgc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1ICIKKwlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogcmVzPSV1IHNlbmRlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSAiCiAJCSAicmVjZWl2ZXIgZW5kPSV1IG1heGVuZD0ldSBtYXh3aW49JXVcbiIsCiAJCSByZXMsIHNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sCiAJCSByZWNlaXZlci0+dGRfZW5kLCByZWNlaXZlci0+dGRfbWF4ZW5kLCByZWNlaXZlci0+dGRfbWF4d2luKTsKQEAgLTkzNyw3ICs5MzYsNyBAQAogCWN0LT5wcm90by50Y3AubGFzdF9kaXIgPSBkaXI7CiAKIAlwcl9kZWJ1ZygidGNwX2Nvbm50cmFja3M6ICIpOwotCU5GX0NUX0RVTVBfVFVQTEUodHVwbGUpOworCW5mX2N0X2R1bXBfdHVwbGUodHVwbGUpOwogCXByX2RlYnVnKCJzeW49JWkgYWNrPSVpIGZpbj0laSByc3Q9JWkgb2xkPSVpIG5ldz0laVxuIiwKIAkJICh0aC0+c3luID8gMSA6IDApLCAodGgtPmFjayA/IDEgOiAwKSwKIAkJICh0aC0+ZmluID8gMSA6IDApLCAodGgtPnJzdCA/IDEgOiAwKSwKQEAgLTk4Miw5ICs5ODEsOCBAQAogfQogCiAvKiBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGlzIHByb3RvY29sIGZvdW5kLiAqLwotc3RhdGljIGludCB0Y3BfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwKLQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCitzdGF0aWMgYm9vbCB0Y3BfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQogewogCWVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGU7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CkBAIC0xMDAzLDcgKzEwMDEsNyBAQAogCS8qIEludmFsaWQ6IGRlbGV0ZSBjb25udHJhY2sgKi8KIAlpZiAobmV3X3N0YXRlID49IFRDUF9DT05OVFJBQ0tfTUFYKSB7CiAJCXByX2RlYnVnKCJuZl9jdF90Y3A6IGludmFsaWQgbmV3IGRlbGV0aW5nLlxuIik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKG5ld19zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UKSB7CkBAIC0xMDIxLDcgKzEwMTksNyBAQAogCQljdC0+cHJvdG8udGNwLnNlZW5bMV0uZmxhZ3MgPSAwOwogCX0gZWxzZSBpZiAobmZfY3RfdGNwX2xvb3NlID09IDApIHsKIAkJLyogRG9uJ3QgdHJ5IHRvIHBpY2sgdXAgY29ubmVjdGlvbnMuICovCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25uZWN0aW9uLApAQCAtMTA2MSw3ICsxMDU5LDcgQEAKIAkJIHNlbmRlci0+dGRfc2NhbGUsCiAJCSByZWNlaXZlci0+dGRfZW5kLCByZWNlaXZlci0+dGRfbWF4ZW5kLCByZWNlaXZlci0+dGRfbWF4d2luLAogCQkgcmVjZWl2ZXItPnRkX3NjYWxlKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQpAQCAtMTEyOSwxMSArMTEyNywxMyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCF0YltDVEFfUFJPVE9JTkZPX1RDUF9TVEFURV0pCisJaWYgKHRiW0NUQV9QUk9UT0lORk9fVENQX1NUQVRFXSAmJgorCSAgICBubGFfZ2V0X3U4KHRiW0NUQV9QUk9UT0lORk9fVENQX1NUQVRFXSkgPj0gVENQX0NPTk5UUkFDS19NQVgpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJd3JpdGVfbG9ja19iaCgmdGNwX2xvY2spOwotCWN0LT5wcm90by50Y3Auc3RhdGUgPSBubGFfZ2V0X3U4KHRiW0NUQV9QUk9UT0lORk9fVENQX1NUQVRFXSk7CisJaWYgKHRiW0NUQV9QUk9UT0lORk9fVENQX1NUQVRFXSkKKwkJY3QtPnByb3RvLnRjcC5zdGF0ZSA9IG5sYV9nZXRfdTgodGJbQ1RBX1BST1RPSU5GT19UQ1BfU1RBVEVdKTsKIAogCWlmICh0YltDVEFfUFJPVE9JTkZPX1RDUF9GTEFHU19PUklHSU5BTF0pIHsKIAkJc3RydWN0IG5mX2N0X3RjcF9mbGFncyAqYXR0ciA9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IGI4YTM1Y2MuLjhiMjE3NjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC0yNiw3ICsyNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X3VkcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMCpIWjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtIF9fcmVhZF9tb3N0bHkgPSAxODAqSFo7CiAKLXN0YXRpYyBpbnQgdWRwX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGJvb2wgdWRwX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CkBAIC0zNiwyMCArMzYsMjAgQEAKIAkvKiBBY3R1YWxseSBvbmx5IG5lZWQgZmlyc3QgOCBieXRlcy4gKi8KIAlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfaGRyKSwgJl9oZHIpOwogCWlmIChocCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJdHVwbGUtPnNyYy51LnVkcC5wb3J0ID0gaHAtPnNvdXJjZTsKIAl0dXBsZS0+ZHN0LnUudWRwLnBvcnQgPSBocC0+ZGVzdDsKIAotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IHVkcF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3N0YXRpYyBib29sIHVkcF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7CiAJdHVwbGUtPnNyYy51LnVkcC5wb3J0ID0gb3JpZy0+ZHN0LnUudWRwLnBvcnQ7CiAJdHVwbGUtPmRzdC51LnVkcC5wb3J0ID0gb3JpZy0+c3JjLnUudWRwLnBvcnQ7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwpAQCAtODMsMTAgKzgzLDEwIEBACiB9CiAKIC8qIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQuICovCi1zdGF0aWMgaW50IHVkcF9uZXcoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKK3N0YXRpYyBib29sIHVkcF9uZXcoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCiB7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgdWRwX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCmluZGV4IDlkZDAzYzcuLjFmYTYyZjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMKQEAgLTI3LDI4ICsyNywyOCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF91ZHBsaXRlX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IDMwKkhaOwogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF91ZHBsaXRlX3RpbWVvdXRfc3RyZWFtIF9fcmVhZF9tb3N0bHkgPSAxODAqSFo7CiAKLXN0YXRpYyBpbnQgdWRwbGl0ZV9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3N0YXRpYyBib29sIHVkcGxpdGVfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAljb25zdCBzdHJ1Y3QgdWRwaGRyICpocDsKIAlzdHJ1Y3QgdWRwaGRyIF9oZHI7CiAKIAlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfaGRyKSwgJl9oZHIpOwogCWlmIChocCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJdHVwbGUtPnNyYy51LnVkcC5wb3J0ID0gaHAtPnNvdXJjZTsKIAl0dXBsZS0+ZHN0LnUudWRwLnBvcnQgPSBocC0+ZGVzdDsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCB1ZHBsaXRlX2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKLQkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQorc3RhdGljIGJvb2wgdWRwbGl0ZV9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkJIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCiB7CiAJdHVwbGUtPnNyYy51LnVkcC5wb3J0ID0gb3JpZy0+ZHN0LnUudWRwLnBvcnQ7CiAJdHVwbGUtPmRzdC51LnVkcC5wb3J0ID0gb3JpZy0+c3JjLnUudWRwLnBvcnQ7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwpAQCAtODMsMTAgKzgzLDEwIEBACiB9CiAKIC8qIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQuICovCi1zdGF0aWMgaW50IHVkcGxpdGVfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQorc3RhdGljIGJvb2wgdWRwbGl0ZV9uZXcoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJdW5zaWduZWQgaW50IGRhdGFvZmYpCiB7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgdWRwbGl0ZV9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKQEAgLTEyNywzMiArMTI3LDEzIEBACiAJfQogCiAJLyogQ2hlY2tzdW0gaW52YWxpZD8gSWdub3JlLiAqLwotCWlmIChuZl9jb25udHJhY2tfY2hlY2tzdW0gJiYgIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJiYKLQkgICAgaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HKSB7Ci0JCWlmIChwZiA9PSBQRl9JTkVUKSB7Ci0JCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCi0JCQlza2ItPmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKLQkJCQkJCSAgICAgICB1ZHBsZW4sIElQUFJPVE9fVURQTElURSwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaXB2NmhkciAqaXB2NmggPSBpcHY2X2hkcihza2IpOwotCQkJX193c3VtIGhzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCAwLCBkYXRhb2ZmLCAwKTsKLQotCQkJc2tiLT5jc3VtID0gfmNzdW1fdW5mb2xkKAotCQkJCWNzdW1faXB2Nl9tYWdpYygmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyLAotCQkJCQkJdWRwbGVuLCBJUFBST1RPX1VEUExJVEUsCi0JCQkJCQljc3VtX3N1YigwLCBoc3VtKSkpOwotCQl9Ci0KLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGVfaGVhZChza2IsIGRhdGFvZmYgKyBjc2NvdikpIHsKLQkJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1VEUExJVEUpKQotCQkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkJICAgICAgIm5mX2N0X3VkcGxpdGU6IGJhZCBVRFBMaXRlICIKLQkJCQkJICAgICAgImNoZWNrc3VtICIpOwotCQkJcmV0dXJuIC1ORl9BQ0NFUFQ7Ci0JCX0KLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwlpZiAobmZfY29ubnRyYWNrX2NoZWNrc3VtICYmIGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyAmJgorCSAgICBuZl9jaGVja3N1bV9wYXJ0aWFsKHNrYiwgaG9va251bSwgZGF0YW9mZiwgY3Njb3YsIElQUFJPVE9fVURQLAorCSAgICAJCQlwZikpIHsKKwkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVURQTElURSkpCisJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgIm5mX2N0X3VkcGxpdGU6IGJhZCBVRFBMaXRlIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKIAlyZXR1cm4gTkZfQUNDRVBUOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jCmluZGV4IGE3MDA1MWQuLmE5NDI5NGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKQEAgLTcyLDcgKzcyLDYgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTsKIAlzdHJ1Y3Qgc2FuZV9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNhbmVfcmVwbHlfbmV0X3N0YXJ0ICpyZXBseTsKLQlpbnQgZmFtaWx5ID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bTsKIAogCWN0X3NhbmVfaW5mbyA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X3NhbmVfaW5mbzsKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KQEAgLTE0MywxMSArMTQyLDEyIEBACiAJfQogCiAJdHVwbGUgPSAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlOwotCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgZmFtaWx5LCAmdHVwbGUtPnNyYy51MywgJnR1cGxlLT5kc3QudTMsCisJbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLAorCQkJICAmdHVwbGUtPnNyYy51MywgJnR1cGxlLT5kc3QudTMsCiAJCQkgIElQUFJPVE9fVENQLCBOVUxMLCAmcmVwbHktPnBvcnQpOwogCiAJcHJfZGVidWcoIm5mX2N0X3NhbmU6IGV4cGVjdDogIik7Ci0JTkZfQ1RfRFVNUF9UVVBMRSgmZXhwLT50dXBsZSk7CisJbmZfY3RfZHVtcF90dXBsZSgmZXhwLT50dXBsZSk7CiAKIAkvKiBDYW4ndCBleHBlY3QgdGhpcz8gIEJlc3QgdG8gZHJvcCBwYWNrZXQgbm93LiAqLwogCWlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHApICE9IDApCkBAIC0xNjMsNiArMTYzLDExIEBACiBzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2FuZVtNQVhfUE9SVFNdWzJdIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgY2hhciBzYW5lX25hbWVzW01BWF9QT1JUU11bMl1bc2l6ZW9mKCJzYW5lLTY1NTM1IildIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgc2FuZV9leHBfcG9saWN5ID0geworCS5tYXhfZXhwZWN0ZWQJPSAxLAorCS50aW1lb3V0CT0gNSAqIDYwLAorfTsKKwogLyogZG9uJ3QgbWFrZSB0aGlzIF9fZXhpdCwgc2luY2UgaXQncyBjYWxsZWQgZnJvbSBfX2luaXQgISAqLwogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3NhbmVfZmluaSh2b2lkKQogewpAQCAtMjAwLDggKzIwNSw3IEBACiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKIAkJCXNhbmVbaV1bal0udHVwbGUuc3JjLnUudGNwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7CiAJCQlzYW5lW2ldW2pdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOwotCQkJc2FuZVtpXVtqXS5tYXhfZXhwZWN0ZWQgPSAxOwotCQkJc2FuZVtpXVtqXS50aW1lb3V0ID0gNSAqIDYwOwkvKiA1IE1pbnV0ZXMgKi8KKwkJCXNhbmVbaV1bal0uZXhwZWN0X3BvbGljeSA9ICZzYW5lX2V4cF9wb2xpY3k7CiAJCQlzYW5lW2ldW2pdLm1lID0gVEhJU19NT0RVTEU7CiAJCQlzYW5lW2ldW2pdLmhlbHAgPSBoZWxwOwogCQkJdG1wbmFtZSA9ICZzYW5lX25hbWVzW2ldW2pdWzBdOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwppbmRleCBjNTIxYzg5Li45ZjQ5MDAwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMiw2ICsyLDggQEAKICAqCiAgKiAoQykgMjAwNSBieSBDaHJpc3RpYW4gSGVudHNjaGVsIDxjaGVudHNjaGVsQGFybmV0LmNvbS5hcj4KICAqIGJhc2VkIG9uIFJSJ3MgaXBfY29ubnRyYWNrX2Z0cC5jIGFuZCBvdGhlciBtb2R1bGVzLgorICogKEMpIDIwMDcgVW5pdGVkIFNlY3VyaXR5IFByb3ZpZGVycworICogKEMpIDIwMDcsIDIwMDggUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNyw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oPgpAQCAtMzYsMjE0ICszOSwxMDIgQEAKIG1vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNpcF90aW1lb3V0LCAidGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvbiIpOwogCitzdGF0aWMgaW50IHNpcF9kaXJlY3Rfc2lnbmFsbGluZyBfX3JlYWRfbW9zdGx5ID0gMTsKK21vZHVsZV9wYXJhbShzaXBfZGlyZWN0X3NpZ25hbGxpbmcsIGludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpcF9kaXJlY3Rfc2lnbmFsbGluZywgImV4cGVjdCBpbmNvbWluZyBjYWxscyBmcm9tIHJlZ2lzdHJhciAiCisJCQkJCSJvbmx5IChkZWZhdWx0IDEpIik7CisKK3N0YXRpYyBpbnQgc2lwX2RpcmVjdF9tZWRpYSBfX3JlYWRfbW9zdGx5ID0gMTsKK21vZHVsZV9wYXJhbShzaXBfZGlyZWN0X21lZGlhLCBpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhzaXBfZGlyZWN0X21lZGlhLCAiRXhwZWN0IE1lZGlhIHN0cmVhbXMgYmV0d2VlbiBzaWduYWxsaW5nICIKKwkJCQkgICAiZW5kcG9pbnRzIG9ubHkgKGRlZmF1bHQgMSkiKTsKKwogdW5zaWduZWQgaW50ICgqbmZfbmF0X3NpcF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJCXN0cnVjdCBuZl9jb25uICpjdCwKLQkJCQljb25zdCBjaGFyICoqZHB0cikgX19yZWFkX21vc3RseTsKKwkJCQljb25zdCBjaGFyICoqZHB0ciwKKwkJCQl1bnNpZ25lZCBpbnQgKmRhdGFsZW4pIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2lwX2hvb2spOwogCi11bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKLQkJCQljb25zdCBjaGFyICpkcHRyKSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NkcF9ob29rKTsKK3Vuc2lnbmVkIGludCAoKm5mX25hdF9zaXBfZXhwZWN0X2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuKSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NpcF9leHBlY3RfaG9vayk7CiAKLXN0YXRpYyBpbnQgZGlnaXRzX2xlbihjb25zdCBzdHJ1Y3QgbmZfY29ubiAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOwotc3RhdGljIGludCBlcGFkZHJfbGVuKGNvbnN0IHN0cnVjdCBuZl9jb25uICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IHNrcF9kaWdpdHNfbGVuKGNvbnN0IHN0cnVjdCBuZl9jb25uICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IHNrcF9lcGFkZHJfbGVuKGNvbnN0IHN0cnVjdCBuZl9jb25uICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Cit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX2FkZHJfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKipkcHRyLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJICAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdHlwZSwKKwkJCQkgICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0ZXJtLAorCQkJCSAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKQorCQkJCSAgICAgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9zZHBfYWRkcl9ob29rKTsKIAotc3RydWN0IHNpcF9oZWFkZXJfbmZvIHsKLQljb25zdCBjaGFyCSpsbmFtZTsKLQljb25zdCBjaGFyCSpzbmFtZTsKLQljb25zdCBjaGFyCSpsbl9zdHI7Ci0Jc2l6ZV90CQlsbmxlbjsKLQlzaXplX3QJCXNubGVuOwotCXNpemVfdAkJbG5fc3RybGVuOwotCWludAkJY2FzZV9zZW5zaXRpdmU7Ci0JaW50CQkoKm1hdGNoX2xlbikoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKiwgY29uc3QgY2hhciAqLAotCQkJCSAgICAgY29uc3QgY2hhciAqLCBpbnQgKik7Ci19OwordW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9wb3J0X2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBjb25zdCBjaGFyICoqZHB0ciwKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCQkgICAgIHVfaW50MTZfdCBwb3J0KSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NkcF9wb3J0X2hvb2spOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNpcF9oZWFkZXJfbmZvIGN0X3NpcF9oZHJzW10gPSB7Ci0JW1BPU19SRUdfUkVRX1VSSV0gPSB7IAkvKiBTSVAgUkVHSVNURVIgcmVxdWVzdCBVUkkgKi8KLQkJLmxuYW1lCQk9ICJzaXA6IiwKLQkJLmxubGVuCQk9IHNpemVvZigic2lwOiIpIC0gMSwKLQkJLmxuX3N0cgkJPSAiOiIsCi0JCS5sbl9zdHJsZW4JPSBzaXplb2YoIjoiKSAtIDEsCi0JCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuLAotCX0sCi0JW1BPU19SRVFfVVJJXSA9IHsgCS8qIFNJUCByZXF1ZXN0IFVSSSAqLwotCQkubG5hbWUJCT0gInNpcDoiLAotCQkubG5sZW4JCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAotCQkubG5fc3RyCQk9ICJAIiwKLQkJLmxuX3N0cmxlbgk9IHNpemVvZigiQCIpIC0gMSwKLQkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4sCi0JfSwKLQlbUE9TX0ZST01dID0gewkJLyogU0lQIEZyb20gaGVhZGVyICovCi0JCS5sbmFtZQkJPSAiRnJvbToiLAotCQkubG5sZW4JCT0gc2l6ZW9mKCJGcm9tOiIpIC0gMSwKLQkJLnNuYW1lCQk9ICJcclxuZjoiLAotCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxuZjoiKSAtIDEsCi0JCS5sbl9zdHIJCT0gInNpcDoiLAotCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAotCQkubWF0Y2hfbGVuCT0gc2twX2VwYWRkcl9sZW4sCi0JfSwKLQlbUE9TX1RPXSA9IHsJCS8qIFNJUCBUbyBoZWFkZXIgKi8KLQkJLmxuYW1lCQk9ICJUbzoiLAotCQkubG5sZW4JCT0gc2l6ZW9mKCJUbzoiKSAtIDEsCi0JCS5zbmFtZQkJPSAiXHJcbnQ6IiwKLQkJLnNubGVuCQk9IHNpemVvZigiXHJcbnQ6IikgLSAxLAotCQkubG5fc3RyCQk9ICJzaXA6IiwKLQkJLmxuX3N0cmxlbgk9IHNpemVvZigic2lwOiIpIC0gMSwKLQkJLm1hdGNoX2xlbgk9IHNrcF9lcGFkZHJfbGVuCi0JfSwKLQlbUE9TX1ZJQV0gPSB7IAkJLyogU0lQIFZpYSBoZWFkZXIgKi8KLQkJLmxuYW1lCQk9ICJWaWE6IiwKLQkJLmxubGVuCQk9IHNpemVvZigiVmlhOiIpIC0gMSwKLQkJLnNuYW1lCQk9ICJcclxudjoiLAotCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxudjoiKSAtIDEsIC8qIHJmYzMyNjEgIlxyXG4iICovCi0JCS5sbl9zdHIJCT0gIlVEUCAiLAotCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJVRFAgIikgLSAxLAotCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbiwKLQl9LAotCVtQT1NfQ09OVEFDVF0gPSB7IAkvKiBTSVAgQ29udGFjdCBoZWFkZXIgKi8KLQkJLmxuYW1lCQk9ICJDb250YWN0OiIsCi0JCS5sbmxlbgkJPSBzaXplb2YoIkNvbnRhY3Q6IikgLSAxLAotCQkuc25hbWUJCT0gIlxyXG5tOiIsCi0JCS5zbmxlbgkJPSBzaXplb2YoIlxyXG5tOiIpIC0gMSwKLQkJLmxuX3N0cgkJPSAic2lwOiIsCi0JCS5sbl9zdHJsZW4JPSBzaXplb2YoInNpcDoiKSAtIDEsCi0JCS5tYXRjaF9sZW4JPSBza3BfZXBhZGRyX2xlbgotCX0sCi0JW1BPU19DT05URU5UXSA9IHsgCS8qIFNJUCBDb250ZW50IGxlbmd0aCBoZWFkZXIgKi8KLQkJLmxuYW1lCQk9ICJDb250ZW50LUxlbmd0aDoiLAotCQkubG5sZW4JCT0gc2l6ZW9mKCJDb250ZW50LUxlbmd0aDoiKSAtIDEsCi0JCS5zbmFtZQkJPSAiXHJcbmw6IiwKLQkJLnNubGVuCQk9IHNpemVvZigiXHJcbmw6IikgLSAxLAotCQkubG5fc3RyCQk9ICI6IiwKLQkJLmxuX3N0cmxlbgk9IHNpemVvZigiOiIpIC0gMSwKLQkJLm1hdGNoX2xlbgk9IHNrcF9kaWdpdHNfbGVuCi0JfSwKLQlbUE9TX01FRElBXSA9IHsJCS8qIFNEUCBtZWRpYSBpbmZvICovCi0JCS5jYXNlX3NlbnNpdGl2ZQk9IDEsCi0JCS5sbmFtZQkJPSAiXG5tPSIsCi0JCS5sbmxlbgkJPSBzaXplb2YoIlxubT0iKSAtIDEsCi0JCS5zbmFtZQkJPSAiXHJtPSIsCi0JCS5zbmxlbgkJPSBzaXplb2YoIlxybT0iKSAtIDEsCi0JCS5sbl9zdHIJCT0gImF1ZGlvICIsCi0JCS5sbl9zdHJsZW4JPSBzaXplb2YoImF1ZGlvICIpIC0gMSwKLQkJLm1hdGNoX2xlbgk9IGRpZ2l0c19sZW4KLQl9LAotCVtQT1NfT1dORVJfSVA0XSA9IHsJLyogU0RQIG93bmVyIGFkZHJlc3MqLwotCQkuY2FzZV9zZW5zaXRpdmUJPSAxLAotCQkubG5hbWUJCT0gIlxubz0iLAotCQkubG5sZW4JCT0gc2l6ZW9mKCJcbm89IikgLSAxLAotCQkuc25hbWUJCT0gIlxybz0iLAotCQkuc25sZW4JCT0gc2l6ZW9mKCJccm89IikgLSAxLAotCQkubG5fc3RyCQk9ICJJTiBJUDQgIiwKLQkJLmxuX3N0cmxlbgk9IHNpemVvZigiSU4gSVA0ICIpIC0gMSwKLQkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4KLQl9LAotCVtQT1NfQ09OTkVDVElPTl9JUDRdID0gey8qIFNEUCBjb25uZWN0aW9uIGluZm8gKi8KLQkJLmNhc2Vfc2Vuc2l0aXZlCT0gMSwKLQkJLmxuYW1lCQk9ICJcbmM9IiwKLQkJLmxubGVuCQk9IHNpemVvZigiXG5jPSIpIC0gMSwKLQkJLnNuYW1lCQk9ICJccmM9IiwKLQkJLnNubGVuCQk9IHNpemVvZigiXHJjPSIpIC0gMSwKLQkJLmxuX3N0cgkJPSAiSU4gSVA0ICIsCi0JCS5sbl9zdHJsZW4JPSBzaXplb2YoIklOIElQNCAiKSAtIDEsCi0JCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCi0JfSwKLQlbUE9TX09XTkVSX0lQNl0gPSB7CS8qIFNEUCBvd25lciBhZGRyZXNzKi8KLQkJLmNhc2Vfc2Vuc2l0aXZlCT0gMSwKLQkJLmxuYW1lCQk9ICJcbm89IiwKLQkJLmxubGVuCQk9IHNpemVvZigiXG5vPSIpIC0gMSwKLQkJLnNuYW1lCQk9ICJccm89IiwKLQkJLnNubGVuCQk9IHNpemVvZigiXHJvPSIpIC0gMSwKLQkJLmxuX3N0cgkJPSAiSU4gSVA2ICIsCi0JCS5sbl9zdHJsZW4JPSBzaXplb2YoIklOIElQNiAiKSAtIDEsCi0JCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCi0JfSwKLQlbUE9TX0NPTk5FQ1RJT05fSVA2XSA9IHsvKiBTRFAgY29ubmVjdGlvbiBpbmZvICovCi0JCS5jYXNlX3NlbnNpdGl2ZQk9IDEsCi0JCS5sbmFtZQkJPSAiXG5jPSIsCi0JCS5sbmxlbgkJPSBzaXplb2YoIlxuYz0iKSAtIDEsCi0JCS5zbmFtZQkJPSAiXHJjPSIsCi0JCS5zbmxlbgkJPSBzaXplb2YoIlxyYz0iKSAtIDEsCi0JCS5sbl9zdHIJCT0gIklOIElQNiAiLAotCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJJTiBJUDYgIikgLSAxLAotCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbgotCX0sCi0JW1BPU19TRFBfSEVBREVSXSA9IHsgCS8qIFNEUCB2ZXJzaW9uIGhlYWRlciAqLwotCQkuY2FzZV9zZW5zaXRpdmUJPSAxLAotCQkubG5hbWUJCT0gIlxudj0iLAotCQkubG5sZW4JCT0gc2l6ZW9mKCJcbnY9IikgLSAxLAotCQkuc25hbWUJCT0gIlxydj0iLAotCQkuc25sZW4JCT0gc2l6ZW9mKCJccnY9IikgLSAxLAotCQkubG5fc3RyCQk9ICI9IiwKLQkJLmxuX3N0cmxlbgk9IHNpemVvZigiPSIpIC0gMSwKLQkJLm1hdGNoX2xlbgk9IGRpZ2l0c19sZW4KLQl9Ci19OwordW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9zZXNzaW9uX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCWNvbnN0IGNoYXIgKipkcHRyLAorCQkJCQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkJdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCQljb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCisJCQkJCV9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2RwX3Nlc3Npb25faG9vayk7CiAKLS8qIGdldCBsaW5lIGxlbmd0aCB1bnRpbCBmaXJzdCBDUiBvciBMRiBzZWVuLiAqLwotaW50IGN0X3NpcF9sbmxlbihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpsaW1pdCkKLXsKLQljb25zdCBjaGFyICprID0gbGluZTsKK3Vuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfbWVkaWFfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBjb25zdCBjaGFyICoqZHB0ciwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9leHAsCisJCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtZWRpYW9mZiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWVkaWFsZW4sCisJCQkJICAgICAgdW5pb24gbmZfaW5ldF9hZGRyICpydHBfYWRkcikKKwkJCQkgICAgICBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NkcF9tZWRpYV9ob29rKTsKIAotCXdoaWxlICgobGluZSA8PSBsaW1pdCkgJiYgKCpsaW5lID09ICdccicgfHwgKmxpbmUgPT0gJ1xuJykpCi0JCWxpbmUrKzsKLQotCXdoaWxlIChsaW5lIDw9IGxpbWl0KSB7Ci0JCWlmICgqbGluZSA9PSAnXHInIHx8ICpsaW5lID09ICdcbicpCi0JCQlicmVhazsKLQkJbGluZSsrOwotCX0KLQlyZXR1cm4gbGluZSAtIGs7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfbG5sZW4pOwotCi0vKiBMaW5lYXIgc3RyaW5nIHNlYXJjaCwgY2FzZSBzZW5zaXRpdmUuICovCi1jb25zdCBjaGFyICpjdF9zaXBfc2VhcmNoKGNvbnN0IGNoYXIgKm5lZWRsZSwgY29uc3QgY2hhciAqaGF5c3RhY2ssCi0JCQkgIHNpemVfdCBuZWVkbGVfbGVuLCBzaXplX3QgaGF5c3RhY2tfbGVuLAotCQkJICBpbnQgY2FzZV9zZW5zaXRpdmUpCi17Ci0JY29uc3QgY2hhciAqbGltaXQgPSBoYXlzdGFjayArIChoYXlzdGFja19sZW4gLSBuZWVkbGVfbGVuKTsKLQotCXdoaWxlIChoYXlzdGFjayA8PSBsaW1pdCkgewotCQlpZiAoY2FzZV9zZW5zaXRpdmUpIHsKLQkJCWlmIChzdHJuY21wKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCi0JCQkJcmV0dXJuIGhheXN0YWNrOwotCQl9IGVsc2UgewotCQkJaWYgKHN0cm5pY21wKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCi0JCQkJcmV0dXJuIGhheXN0YWNrOwotCQl9Ci0JCWhheXN0YWNrKys7Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoY3Rfc2lwX3NlYXJjaCk7Ci0KLXN0YXRpYyBpbnQgZGlnaXRzX2xlbihjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCitzdGF0aWMgaW50IHN0cmluZ19sZW4oY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAogCQkgICAgICBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCkKIHsKIAlpbnQgbGVuID0gMDsKLQl3aGlsZSAoZHB0ciA8PSBsaW1pdCAmJiBpc2RpZ2l0KCpkcHRyKSkgeworCisJd2hpbGUgKGRwdHIgPCBsaW1pdCAmJiBpc2FscGhhKCpkcHRyKSkgewogCQlkcHRyKys7CiAJCWxlbisrOwogCX0KIAlyZXR1cm4gbGVuOwogfQogCi0vKiBnZXQgZGlnaXRzIGxlbmd0aCwgc2tpcHBpbmcgYmxhbmsgc3BhY2VzLiAqLwotc3RhdGljIGludCBza3BfZGlnaXRzX2xlbihjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCi0JCQkgIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KQorc3RhdGljIGludCBkaWdpdHNfbGVuKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJICAgICAgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpCiB7Ci0JZm9yICg7IGRwdHIgPD0gbGltaXQgJiYgKmRwdHIgPT0gJyAnOyBkcHRyKyspCi0JCSgqc2hpZnQpKys7CisJaW50IGxlbiA9IDA7CisJd2hpbGUgKGRwdHIgPCBsaW1pdCAmJiBpc2RpZ2l0KCpkcHRyKSkgeworCQlkcHRyKys7CisJCWxlbisrOworCX0KKwlyZXR1cm4gbGVuOworfQogCi0JcmV0dXJuIGRpZ2l0c19sZW4oY3QsIGRwdHIsIGxpbWl0LCBzaGlmdCk7CisvKiBnZXQgbWVkaWEgdHlwZSArIHBvcnQgbGVuZ3RoICovCitzdGF0aWMgaW50IG1lZGlhX2xlbihjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCisJCSAgICAgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpCit7CisJaW50IGxlbiA9IHN0cmluZ19sZW4oY3QsIGRwdHIsIGxpbWl0LCBzaGlmdCk7CisKKwlkcHRyICs9IGxlbjsKKwlpZiAoZHB0ciA+PSBsaW1pdCB8fCAqZHB0ciAhPSAnICcpCisJCXJldHVybiAwOworCWxlbisrOworCWRwdHIrKzsKKworCXJldHVybiBsZW4gKyBkaWdpdHNfbGVuKGN0LCBkcHRyLCBsaW1pdCwgc2hpZnQpOwogfQogCiBzdGF0aWMgaW50IHBhcnNlX2FkZHIoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpjcCwKQEAgLTI1MSwxMCArMTQyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGltaXQpCiB7CiAJY29uc3QgY2hhciAqZW5kOwotCWludCBmYW1pbHkgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtOwogCWludCByZXQgPSAwOwogCi0Jc3dpdGNoIChmYW1pbHkpIHsKKwltZW1zZXQoYWRkciwgMCwgc2l6ZW9mKCphZGRyKSk7CisJc3dpdGNoIChuZl9jdF9sM251bShjdCkpIHsKIAljYXNlIEFGX0lORVQ6CiAJCXJldCA9IGluNF9wdG9uKGNwLCBsaW1pdCAtIGNwLCAodTggKikmYWRkci0+aXAsIC0xLCAmZW5kKTsKIAkJYnJlYWs7CkBAIC0zMDIsMTMgKzE5MywxMyBAQAogCS8qIFNlYXJjaCBmb3IgQCwgYnV0IHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KIAkgKiBXZSBhcmUgaW5zaWRlIGEgc2lwOiBVUkksIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKIAkgKiBjb250aW51YXRpb24gbGluZXMuICovCi0Jd2hpbGUgKGRwdHIgPD0gbGltaXQgJiYKKwl3aGlsZSAoZHB0ciA8IGxpbWl0ICYmCiAJICAgICAgICpkcHRyICE9ICdAJyAmJiAqZHB0ciAhPSAnXHInICYmICpkcHRyICE9ICdcbicpIHsKIAkJKCpzaGlmdCkrKzsKIAkJZHB0cisrOwogCX0KIAotCWlmIChkcHRyIDw9IGxpbWl0ICYmICpkcHRyID09ICdAJykgeworCWlmIChkcHRyIDwgbGltaXQgJiYgKmRwdHIgPT0gJ0AnKSB7CiAJCWRwdHIrKzsKIAkJKCpzaGlmdCkrKzsKIAl9IGVsc2UgewpAQCAtMzE5LDc0ICsyMTAsODkyIEBACiAJcmV0dXJuIGVwYWRkcl9sZW4oY3QsIGRwdHIsIGxpbWl0LCBzaGlmdCk7CiB9CiAKLS8qIFJldHVybnMgMCBpZiBub3QgZm91bmQsIC0xIGVycm9yIHBhcnNpbmcuICovCi1pbnQgY3Rfc2lwX2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKLQkJICAgIGNvbnN0IGNoYXIgKmRwdHIsIHNpemVfdCBkbGVuLAotCQkgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwKLQkJICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCi0JCSAgICBlbnVtIHNpcF9oZWFkZXJfcG9zIHBvcykKKy8qIFBhcnNlIGEgU0lQIHJlcXVlc3QgbGluZSBvZiB0aGUgZm9ybToKKyAqCisgKiBSZXF1ZXN0LUxpbmUgPSBNZXRob2QgU1AgUmVxdWVzdC1VUkkgU1AgU0lQLVZlcnNpb24gQ1JMRgorICoKKyAqIGFuZCByZXR1cm4gdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIGNvbnRhaW5lZCBpbiB0aGUgUmVxdWVzdC1VUkkuCisgKi8KK2ludCBjdF9zaXBfcGFyc2VfcmVxdWVzdChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgY29uc3QgY2hhciAqZHB0ciwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbiwKKwkJCSB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiAqcG9ydCkKIHsKLQljb25zdCBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gKmhuZm8gPSAmY3Rfc2lwX2hkcnNbcG9zXTsKLQljb25zdCBjaGFyICpsaW1pdCwgKmF1eCwgKmsgPSBkcHRyOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gZHB0ciwgKmxpbWl0ID0gZHB0ciArIGRhdGFsZW4sICplbmQ7CisJdW5zaWduZWQgaW50IG1sZW47CisJdW5zaWduZWQgaW50IHA7CiAJaW50IHNoaWZ0ID0gMDsKIAotCWxpbWl0ID0gZHB0ciArIChkbGVuIC0gaG5mby0+bG5sZW4pOworCS8qIFNraXAgbWV0aG9kIGFuZCBmb2xsb3dpbmcgd2hpdGVzcGFjZSAqLworCW1sZW4gPSBzdHJpbmdfbGVuKGN0LCBkcHRyLCBsaW1pdCwgTlVMTCk7CisJaWYgKCFtbGVuKQorCQlyZXR1cm4gMDsKKwlkcHRyICs9IG1sZW47CisJaWYgKCsrZHB0ciA+PSBsaW1pdCkKKwkJcmV0dXJuIDA7CiAKLQl3aGlsZSAoZHB0ciA8PSBsaW1pdCkgewotCQlpZiAoKHN0cm5jbXAoZHB0ciwgaG5mby0+bG5hbWUsIGhuZm8tPmxubGVuKSAhPSAwKSAmJgotCQkgICAgKGhuZm8tPnNuYW1lID09IE5VTEwgfHwKLQkJICAgICBzdHJuY21wKGRwdHIsIGhuZm8tPnNuYW1lLCBobmZvLT5zbmxlbikgIT0gMCkpIHsKLQkJCWRwdHIrKzsKKwkvKiBGaW5kIFNJUCBVUkkgKi8KKwlsaW1pdCAtPSBzdHJsZW4oInNpcDoiKTsKKwlmb3IgKDsgZHB0ciA8IGxpbWl0OyBkcHRyKyspIHsKKwkJaWYgKCpkcHRyID09ICdccicgfHwgKmRwdHIgPT0gJ1xuJykKKwkJCXJldHVybiAtMTsKKwkJaWYgKHN0cm5pY21wKGRwdHIsICJzaXA6Iiwgc3RybGVuKCJzaXA6IikpID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKCFza3BfZXBhZGRyX2xlbihjdCwgZHB0ciwgbGltaXQsICZzaGlmdCkpCisJCXJldHVybiAwOworCWRwdHIgKz0gc2hpZnQ7CisKKwlpZiAoIXBhcnNlX2FkZHIoY3QsIGRwdHIsICZlbmQsIGFkZHIsIGxpbWl0KSkKKwkJcmV0dXJuIC0xOworCWlmIChlbmQgPCBsaW1pdCAmJiAqZW5kID09ICc6JykgeworCQllbmQrKzsKKwkJcCA9IHNpbXBsZV9zdHJ0b3VsKGVuZCwgKGNoYXIgKiopJmVuZCwgMTApOworCQlpZiAocCA8IDEwMjQgfHwgcCA+IDY1NTM1KQorCQkJcmV0dXJuIC0xOworCQkqcG9ydCA9IGh0b25zKHApOworCX0gZWxzZQorCQkqcG9ydCA9IGh0b25zKFNJUF9QT1JUKTsKKworCWlmIChlbmQgPT0gZHB0cikKKwkJcmV0dXJuIDA7CisJKm1hdGNob2ZmID0gZHB0ciAtIHN0YXJ0OworCSptYXRjaGxlbiA9IGVuZCAtIGRwdHI7CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfcGFyc2VfcmVxdWVzdCk7CisKKy8qIFNJUCBoZWFkZXIgcGFyc2luZzogU0lQIGhlYWRlcnMgYXJlIGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIGJ1dAorICogbWF5IHNwYW4gc2V2ZXJhbCBsaW5lcywgaW4gd2hpY2ggY2FzZSB0aGUgY29udGludWF0aW9uIGxpbmVzIGJlZ2luIHdpdGggYQorICogd2hpdGVzcGFjZSBjaGFyYWN0ZXIuIFJGQyAyNTQzIGFsbG93cyBsaW5lcyB0byBiZSB0ZXJtaW5hdGVkIHdpdGggQ1IsIExGIG9yCisgKiBDUkxGLCBSRkMgMzI2MSBhbGxvd3Mgb25seSBDUkxGLCB3ZSBzdXBwb3J0IGJvdGguCisgKgorICogSGVhZGVycyBhcmUgZm9sbG93ZWQgYnkgKG9wdGlvbmFsbHkpIHdoaXRlc3BhY2UsIGEgY29sb24sIGFnYWluIChvcHRpb25hbGx5KQorICogd2hpdGVzcGFjZSBhbmQgdGhlIHZhbHVlcy4gV2hpdGVzcGFjZSBpbiB0aGlzIGNvbnRleHQgbWVhbnMgYW55IGFtb3VudCBvZgorICogdGFicywgc3BhY2VzIGFuZCBjb250aW51YXRpb24gbGluZXMsIHdoaWNoIGFyZSB0cmVhdGVkIGFzIGEgc2luZ2xlIHdoaXRlc3BhY2UKKyAqIGNoYXJhY3Rlci4KKyAqCisgKiBTb21lIGhlYWRlcnMgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcy4gQSBjb21tYSBzZXBlcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgaXMKKyAqIGVxdWl2YWxlbnQgdG8gbXVsdGlwbGUgaGVhZGVycy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzaXBfaGVhZGVyIGN0X3NpcF9oZHJzW10gPSB7CisJW1NJUF9IRFJfQ1NFUV0JCQk9IFNJUF9IRFIoIkNTZXEiLCBOVUxMLCBOVUxMLCBkaWdpdHNfbGVuKSwKKwlbU0lQX0hEUl9GUk9NXQkJCT0gU0lQX0hEUigiRnJvbSIsICJmIiwgInNpcDoiLCBza3BfZXBhZGRyX2xlbiksCisJW1NJUF9IRFJfVE9dCQkJPSBTSVBfSERSKCJUbyIsICJ0IiwgInNpcDoiLCBza3BfZXBhZGRyX2xlbiksCisJW1NJUF9IRFJfQ09OVEFDVF0JCT0gU0lQX0hEUigiQ29udGFjdCIsICJtIiwgInNpcDoiLCBza3BfZXBhZGRyX2xlbiksCisJW1NJUF9IRFJfVklBXQkJCT0gU0lQX0hEUigiVmlhIiwgInYiLCAiVURQICIsIGVwYWRkcl9sZW4pLAorCVtTSVBfSERSX0VYUElSRVNdCQk9IFNJUF9IRFIoIkV4cGlyZXMiLCBOVUxMLCBOVUxMLCBkaWdpdHNfbGVuKSwKKwlbU0lQX0hEUl9DT05URU5UX0xFTkdUSF0JPSBTSVBfSERSKCJDb250ZW50LUxlbmd0aCIsICJsIiwgTlVMTCwgZGlnaXRzX2xlbiksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2lwX2ZvbGxvd19jb250aW51YXRpb24oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQpCit7CisJLyogV2FsayBwYXN0IG5ld2xpbmUgKi8KKwlpZiAoKytkcHRyID49IGxpbWl0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFNraXAgJ1xuJyBpbiBDUiBMRiAqLworCWlmICgqKGRwdHIgLSAxKSA9PSAnXHInICYmICpkcHRyID09ICdcbicpIHsKKwkJaWYgKCsrZHB0ciA+PSBsaW1pdCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCS8qIENvbnRpbnVhdGlvbiBsaW5lPyAqLworCWlmICgqZHB0ciAhPSAnICcgJiYgKmRwdHIgIT0gJ1x0JykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworCWZvciAoOyBkcHRyIDwgbGltaXQ7IGRwdHIrKykgeworCQlpZiAoKmRwdHIgIT0gJyAnICYmICpkcHRyICE9ICdcdCcpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGRwdHI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaXBfc2tpcF93aGl0ZXNwYWNlKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0KQoreworCWZvciAoOyBkcHRyIDwgbGltaXQ7IGRwdHIrKykgeworCQlpZiAoKmRwdHIgPT0gJyAnKQorCQkJY29udGludWU7CisJCWlmICgqZHB0ciAhPSAnXHInICYmICpkcHRyICE9ICdcbicpCisJCQlicmVhazsKKwkJZHB0ciA9IHNpcF9mb2xsb3dfY29udGludWF0aW9uKGRwdHIsIGxpbWl0KTsKKwkJaWYgKGRwdHIgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gZHB0cjsKK30KKworLyogU2VhcmNoIHdpdGhpbiBhIFNJUCBoZWFkZXIgdmFsdWUsIGRlYWxpbmcgd2l0aCBjb250aW51YXRpb24gbGluZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjdF9zaXBfaGVhZGVyX3NlYXJjaChjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwKKwkJCQkJY29uc3QgY2hhciAqbmVlZGxlLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWZvciAobGltaXQgLT0gbGVuOyBkcHRyIDwgbGltaXQ7IGRwdHIrKykgeworCQlpZiAoKmRwdHIgPT0gJ1xyJyB8fCAqZHB0ciA9PSAnXG4nKSB7CisJCQlkcHRyID0gc2lwX2ZvbGxvd19jb250aW51YXRpb24oZHB0ciwgbGltaXQpOworCQkJaWYgKGRwdHIgPT0gTlVMTCkKKwkJCQlicmVhazsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWF1eCA9IGN0X3NpcF9zZWFyY2goaG5mby0+bG5fc3RyLCBkcHRyLCBobmZvLT5sbl9zdHJsZW4sCi0JCQkJICAgIGN0X3NpcF9sbmxlbihkcHRyLCBsaW1pdCksCi0JCQkJICAgIGhuZm8tPmNhc2Vfc2Vuc2l0aXZlKTsKLQkJaWYgKCFhdXgpIHsKLQkJCXByX2RlYnVnKCInJXMnIG5vdCBmb3VuZCBpbiAnJXMnLlxuIiwgaG5mby0+bG5fc3RyLAotCQkJCSBobmZvLT5sbmFtZSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJYXV4ICs9IGhuZm8tPmxuX3N0cmxlbjsKIAotCQkqbWF0Y2hsZW4gPSBobmZvLT5tYXRjaF9sZW4oY3QsIGF1eCwgbGltaXQsICZzaGlmdCk7CisJCWlmIChzdHJuaWNtcChkcHRyLCBuZWVkbGUsIGxlbikgPT0gMCkKKwkJCXJldHVybiBkcHRyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGN0X3NpcF9nZXRfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkgICAgICBlbnVtIHNpcF9oZWFkZXJfdHlwZXMgdHlwZSwKKwkJICAgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbikKK3sKKwljb25zdCBzdHJ1Y3Qgc2lwX2hlYWRlciAqaGRyID0gJmN0X3NpcF9oZHJzW3R5cGVdOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gZHB0ciwgKmxpbWl0ID0gZHB0ciArIGRhdGFsZW47CisJaW50IHNoaWZ0ID0gMDsKKworCWZvciAoZHB0ciArPSBkYXRhb2ZmOyBkcHRyIDwgbGltaXQ7IGRwdHIrKykgeworCQkvKiBGaW5kIGJlZ2lubmluZyBvZiBsaW5lICovCisJCWlmICgqZHB0ciAhPSAnXHInICYmICpkcHRyICE9ICdcbicpCisJCQljb250aW51ZTsKKwkJaWYgKCsrZHB0ciA+PSBsaW1pdCkKKwkJCWJyZWFrOworCQlpZiAoKihkcHRyIC0gMSkgPT0gJ1xyJyAmJiAqZHB0ciA9PSAnXG4nKSB7CisJCQlpZiAoKytkcHRyID49IGxpbWl0KQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogU2tpcCBjb250aW51YXRpb24gbGluZXMgKi8KKwkJaWYgKCpkcHRyID09ICcgJyB8fCAqZHB0ciA9PSAnXHQnKQorCQkJY29udGludWU7CisKKwkJLyogRmluZCBoZWFkZXIuIENvbXBhY3QgaGVhZGVycyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEKKwkJICogbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVyIHRvIGF2b2lkIG1pc21hdGNoZXMuICovCisJCWlmIChsaW1pdCAtIGRwdHIgPj0gaGRyLT5sZW4gJiYKKwkJICAgIHN0cm5pY21wKGRwdHIsIGhkci0+bmFtZSwgaGRyLT5sZW4pID09IDApCisJCQlkcHRyICs9IGhkci0+bGVuOworCQllbHNlIGlmIChoZHItPmNuYW1lICYmIGxpbWl0IC0gZHB0ciA+PSBoZHItPmNsZW4gKyAxICYmCisJCQkgc3RybmljbXAoZHB0ciwgaGRyLT5jbmFtZSwgaGRyLT5jbGVuKSA9PSAwICYmCisJCQkgIWlzYWxwaGEoKihkcHRyICsgaGRyLT5jbGVuICsgMSkpKQorCQkJZHB0ciArPSBoZHItPmNsZW47CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCS8qIEZpbmQgYW5kIHNraXAgY29sb24gKi8KKwkJZHB0ciA9IHNpcF9za2lwX3doaXRlc3BhY2UoZHB0ciwgbGltaXQpOworCQlpZiAoZHB0ciA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmICgqZHB0ciAhPSAnOicgfHwgKytkcHRyID49IGxpbWl0KQorCQkJYnJlYWs7CisKKwkJLyogU2tpcCB3aGl0ZXNwYWNlIGFmdGVyIGNvbG9uICovCisJCWRwdHIgPSBzaXBfc2tpcF93aGl0ZXNwYWNlKGRwdHIsIGxpbWl0KTsKKwkJaWYgKGRwdHIgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCSptYXRjaG9mZiA9IGRwdHIgLSBzdGFydDsKKwkJaWYgKGhkci0+c2VhcmNoKSB7CisJCQlkcHRyID0gY3Rfc2lwX2hlYWRlcl9zZWFyY2goZHB0ciwgbGltaXQsIGhkci0+c2VhcmNoLAorCQkJCQkJICAgIGhkci0+c2xlbik7CisJCQlpZiAoIWRwdHIpCisJCQkJcmV0dXJuIC0xOworCQkJZHB0ciArPSBoZHItPnNsZW47CisJCX0KKworCQkqbWF0Y2hsZW4gPSBoZHItPm1hdGNoX2xlbihjdCwgZHB0ciwgbGltaXQsICZzaGlmdCk7CiAJCWlmICghKm1hdGNobGVuKQogCQkJcmV0dXJuIC0xOwotCi0JCSptYXRjaG9mZiA9IChhdXggLSBrKSArIHNoaWZ0OwotCi0JCXByX2RlYnVnKCIlcyBtYXRjaCBzdWNjZWVkZWQhIC0gbGVuOiAldVxuIiwgaG5mby0+bG5hbWUsCi0JCQkgKm1hdGNobGVuKTsKKwkJKm1hdGNob2ZmID0gZHB0ciAtIHN0YXJ0ICsgc2hpZnQ7CiAJCXJldHVybiAxOwogCX0KLQlwcl9kZWJ1ZygiJXMgaGVhZGVyIG5vdCBmb3VuZC5cbiIsIGhuZm8tPmxuYW1lKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9nZXRfaW5mbyk7CitFWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfZ2V0X2hlYWRlcik7CiAKLXN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsCi0JCQkgICAgX19iZTE2IHBvcnQsCi0JCQkgICAgY29uc3QgY2hhciAqZHB0cikKKy8qIEdldCBuZXh0IGhlYWRlciBmaWVsZCBpbiBhIGxpc3Qgb2YgY29tbWEgc2VwZXJhdGVkIHZhbHVlcyAqLworc3RhdGljIGludCBjdF9zaXBfbmV4dF9oZWFkZXIoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJICAgICAgZW51bSBzaXBfaGVhZGVyX3R5cGVzIHR5cGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNobGVuKQogewotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7Ci0JZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKLQlpbnQgZmFtaWx5ID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW07CisJY29uc3Qgc3RydWN0IHNpcF9oZWFkZXIgKmhkciA9ICZjdF9zaXBfaGRyc1t0eXBlXTsKKwljb25zdCBjaGFyICpzdGFydCA9IGRwdHIsICpsaW1pdCA9IGRwdHIgKyBkYXRhbGVuOworCWludCBzaGlmdCA9IDA7CisKKwlkcHRyICs9IGRhdGFvZmY7CisKKwlkcHRyID0gY3Rfc2lwX2hlYWRlcl9zZWFyY2goZHB0ciwgbGltaXQsICIsIiwgc3RybGVuKCIsIikpOworCWlmICghZHB0cikKKwkJcmV0dXJuIDA7CisKKwlkcHRyID0gY3Rfc2lwX2hlYWRlcl9zZWFyY2goZHB0ciwgbGltaXQsIGhkci0+c2VhcmNoLCBoZHItPnNsZW4pOworCWlmICghZHB0cikKKwkJcmV0dXJuIDA7CisJZHB0ciArPSBoZHItPnNsZW47CisKKwkqbWF0Y2hvZmYgPSBkcHRyIC0gc3RhcnQ7CisJKm1hdGNobGVuID0gaGRyLT5tYXRjaF9sZW4oY3QsIGRwdHIsIGxpbWl0LCAmc2hpZnQpOworCWlmICghKm1hdGNobGVuKQorCQlyZXR1cm4gLTE7CisJKm1hdGNob2ZmICs9IHNoaWZ0OworCXJldHVybiAxOworfQorCisvKiBXYWxrIHRocm91Z2ggaGVhZGVycyB1bnRpbCBhIHBhcnNhYmxlIG9uZSBpcyBmb3VuZCBvciBubyBoZWFkZXIgb2YgdGhlCisgKiBnaXZlbiB0eXBlIGlzIGxlZnQuICovCitzdGF0aWMgaW50IGN0X3NpcF93YWxrX2hlYWRlcnMoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJCSAgICAgICBlbnVtIHNpcF9oZWFkZXJfdHlwZXMgdHlwZSwgaW50ICppbl9oZWFkZXIsCisJCQkgICAgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbikKK3sKIAlpbnQgcmV0OwotCXR5cGVvZihuZl9uYXRfc2RwX2hvb2spIG5mX25hdF9zZHA7CisKKwlpZiAoaW5faGVhZGVyICYmICppbl9oZWFkZXIpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXJldCA9IGN0X3NpcF9uZXh0X2hlYWRlcihjdCwgZHB0ciwgZGF0YW9mZiwgZGF0YWxlbiwKKwkJCQkJCSB0eXBlLCBtYXRjaG9mZiwgbWF0Y2hsZW4pOworCQkJaWYgKHJldCA+IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlicmVhazsKKwkJCWRhdGFvZmYgKz0gKm1hdGNob2ZmOworCQl9CisJCSppbl9oZWFkZXIgPSAwOworCX0KKworCXdoaWxlICgxKSB7CisJCXJldCA9IGN0X3NpcF9nZXRfaGVhZGVyKGN0LCBkcHRyLCBkYXRhb2ZmLCBkYXRhbGVuLAorCQkJCQl0eXBlLCBtYXRjaG9mZiwgbWF0Y2hsZW4pOworCQlpZiAocmV0ID4gMCkKKwkJCWJyZWFrOworCQlpZiAocmV0ID09IDApCisJCQlyZXR1cm4gcmV0OworCQlkYXRhb2ZmICs9ICptYXRjaG9mZjsKKwl9CisKKwlpZiAoaW5faGVhZGVyKQorCQkqaW5faGVhZGVyID0gMTsKKwlyZXR1cm4gMTsKK30KKworLyogTG9jYXRlIGEgU0lQIGhlYWRlciwgcGFyc2UgdGhlIFVSSSBhbmQgcmV0dXJuIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBvZgorICogdGhlIGFkZHJlc3MgYXMgd2VsbCBhcyB0aGUgYWRkcmVzcyBhbmQgcG9ydCB0aGVtc2VsdmVzLiBBIHN0cmVhbSBvZgorICogaGVhZGVycyBjYW4gYmUgcGFyc2VkIGJ5IGhhbmRpbmcgaW4gYSBub24tTlVMTCBkYXRhbGVuIGFuZCBpbl9oZWFkZXIKKyAqIHBvaW50ZXIuCisgKi8KK2ludCBjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCisJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJCSAgICBlbnVtIHNpcF9oZWFkZXJfdHlwZXMgdHlwZSwgaW50ICppbl9oZWFkZXIsCisJCQkgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbiwKKwkJCSAgICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsIF9fYmUxNiAqcG9ydCkKK3sKKwljb25zdCBjaGFyICpjLCAqbGltaXQgPSBkcHRyICsgZGF0YWxlbjsKKwl1bnNpZ25lZCBpbnQgcDsKKwlpbnQgcmV0OworCisJcmV0ID0gY3Rfc2lwX3dhbGtfaGVhZGVycyhjdCwgZHB0ciwgZGF0YW9mZiA/ICpkYXRhb2ZmIDogMCwgZGF0YWxlbiwKKwkJCQkgIHR5cGUsIGluX2hlYWRlciwgbWF0Y2hvZmYsIG1hdGNobGVuKTsKKwlXQVJOX09OKHJldCA8IDApOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGFyc2VfYWRkcihjdCwgZHB0ciArICptYXRjaG9mZiwgJmMsIGFkZHIsIGxpbWl0KSkKKwkJcmV0dXJuIC0xOworCWlmICgqYyA9PSAnOicpIHsKKwkJYysrOworCQlwID0gc2ltcGxlX3N0cnRvdWwoYywgKGNoYXIgKiopJmMsIDEwKTsKKwkJaWYgKHAgPCAxMDI0IHx8IHAgPiA2NTUzNSkKKwkJCXJldHVybiAtMTsKKwkJKnBvcnQgPSBodG9ucyhwKTsKKwl9IGVsc2UKKwkJKnBvcnQgPSBodG9ucyhTSVBfUE9SVCk7CisKKwlpZiAoZGF0YW9mZikKKwkJKmRhdGFvZmYgPSBjIC0gZHB0cjsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKTsKKworLyogUGFyc2UgYWRkcmVzcyBmcm9tIGhlYWRlciBwYXJhbWV0ZXIgYW5kIHJldHVybiBhZGRyZXNzLCBvZmZzZXQgYW5kIGxlbmd0aCAqLworaW50IGN0X3NpcF9wYXJzZV9hZGRyZXNzX3BhcmFtKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLAorCQkJICAgICAgIHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcikKK3sKKwljb25zdCBjaGFyICpsaW1pdCA9IGRwdHIgKyBkYXRhbGVuOworCWNvbnN0IGNoYXIgKnN0YXJ0LCAqZW5kOworCisJbGltaXQgPSBjdF9zaXBfaGVhZGVyX3NlYXJjaChkcHRyICsgZGF0YW9mZiwgbGltaXQsICIsIiwgc3RybGVuKCIsIikpOworCWlmICghbGltaXQpCisJCWxpbWl0ID0gZHB0ciArIGRhdGFsZW47CisKKwlzdGFydCA9IGN0X3NpcF9oZWFkZXJfc2VhcmNoKGRwdHIgKyBkYXRhb2ZmLCBsaW1pdCwgbmFtZSwgc3RybGVuKG5hbWUpKTsKKwlpZiAoIXN0YXJ0KQorCQlyZXR1cm4gMDsKKworCXN0YXJ0ICs9IHN0cmxlbihuYW1lKTsKKwlpZiAoIXBhcnNlX2FkZHIoY3QsIHN0YXJ0LCAmZW5kLCBhZGRyLCBsaW1pdCkpCisJCXJldHVybiAwOworCSptYXRjaG9mZiA9IHN0YXJ0IC0gZHB0cjsKKwkqbWF0Y2hsZW4gPSBlbmQgLSBzdGFydDsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9wYXJzZV9hZGRyZXNzX3BhcmFtKTsKKworLyogUGFyc2UgbnVtZXJpY2FsIGhlYWRlciBwYXJhbWV0ZXIgYW5kIHJldHVybiB2YWx1ZSwgb2Zmc2V0IGFuZCBsZW5ndGggKi8KK2ludCBjdF9zaXBfcGFyc2VfbnVtZXJpY2FsX3BhcmFtKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJCQkgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgKnZhbCkKK3sKKwljb25zdCBjaGFyICpsaW1pdCA9IGRwdHIgKyBkYXRhbGVuOworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWNoYXIgKmVuZDsKKworCWxpbWl0ID0gY3Rfc2lwX2hlYWRlcl9zZWFyY2goZHB0ciArIGRhdGFvZmYsIGxpbWl0LCAiLCIsIHN0cmxlbigiLCIpKTsKKwlpZiAoIWxpbWl0KQorCQlsaW1pdCA9IGRwdHIgKyBkYXRhbGVuOworCisJc3RhcnQgPSBjdF9zaXBfaGVhZGVyX3NlYXJjaChkcHRyICsgZGF0YW9mZiwgbGltaXQsIG5hbWUsIHN0cmxlbihuYW1lKSk7CisJaWYgKCFzdGFydCkKKwkJcmV0dXJuIDA7CisKKwlzdGFydCArPSBzdHJsZW4obmFtZSk7CisJKnZhbCA9IHNpbXBsZV9zdHJ0b3VsKHN0YXJ0LCAmZW5kLCAwKTsKKwlpZiAoc3RhcnQgPT0gZW5kKQorCQlyZXR1cm4gMDsKKwlpZiAobWF0Y2hvZmYgJiYgbWF0Y2hsZW4pIHsKKwkJKm1hdGNob2ZmID0gc3RhcnQgLSBkcHRyOworCQkqbWF0Y2hsZW4gPSBlbmQgLSBzdGFydDsKKwl9CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfcGFyc2VfbnVtZXJpY2FsX3BhcmFtKTsKKworLyogU0RQIGhlYWRlciBwYXJzaW5nOiBhIFNEUCBzZXNzaW9uIGRlc2NyaXB0aW9uIGNvbnRhaW5zIGFuIG9yZGVyZWQgc2V0IG9mCisgKiBoZWFkZXJzLCBzdGFydGluZyB3aXRoIGEgc2VjdGlvbiBjb250YWluaW5nIGdlbmVyYWwgc2Vzc2lvbiBwYXJhbWV0ZXJzLAorICogb3B0aW9uYWxseSBmb2xsb3dlZCBieSBtdWx0aXBsZSBtZWRpYSBkZXNjcmlwdGlvbnMuCisgKgorICogU0RQIGhlYWRlcnMgYWx3YXlzIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLiBBY2NvcmRpbmcgdG8gUkZDIDIzMjc6CisgKiAiVGhlIHNlcXVlbmNlIENSTEYgKDB4MGQwYSkgaXMgdXNlZCB0byBlbmQgYSByZWNvcmQsIGFsdGhvdWdoIHBhcnNlcnMgc2hvdWxkCisgKiBiZSB0b2xlcmFudCBhbmQgYWxzbyBhY2NlcHQgcmVjb3JkcyB0ZXJtaW5hdGVkIHdpdGggYSBzaW5nbGUgbmV3bGluZQorICogY2hhcmFjdGVyIi4gV2UgaGFuZGxlIGJvdGggY2FzZXMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2lwX2hlYWRlciBjdF9zZHBfaGRyc1tdID0geworCVtTRFBfSERSX1ZFUlNJT05dCQk9IFNEUF9IRFIoInY9IiwgTlVMTCwgZGlnaXRzX2xlbiksCisJW1NEUF9IRFJfT1dORVJfSVA0XQkJPSBTRFBfSERSKCJvPSIsICJJTiBJUDQgIiwgZXBhZGRyX2xlbiksCisJW1NEUF9IRFJfQ09OTkVDVElPTl9JUDRdCT0gU0RQX0hEUigiYz0iLCAiSU4gSVA0ICIsIGVwYWRkcl9sZW4pLAorCVtTRFBfSERSX09XTkVSX0lQNl0JCT0gU0RQX0hEUigibz0iLCAiSU4gSVA2ICIsIGVwYWRkcl9sZW4pLAorCVtTRFBfSERSX0NPTk5FQ1RJT05fSVA2XQk9IFNEUF9IRFIoImM9IiwgIklOIElQNiAiLCBlcGFkZHJfbGVuKSwKKwlbU0RQX0hEUl9NRURJQV0JCQk9IFNEUF9IRFIoIm09IiwgTlVMTCwgbWVkaWFfbGVuKSwKK307CisKKy8qIExpbmVhciBzdHJpbmcgc2VhcmNoIHdpdGhpbiBTRFAgaGVhZGVyIHZhbHVlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmN0X3NkcF9oZWFkZXJfc2VhcmNoKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0LAorCQkJCQljb25zdCBjaGFyICpuZWVkbGUsIHVuc2lnbmVkIGludCBsZW4pCit7CisJZm9yIChsaW1pdCAtPSBsZW47IGRwdHIgPCBsaW1pdDsgZHB0cisrKSB7CisJCWlmICgqZHB0ciA9PSAnXHInIHx8ICpkcHRyID09ICdcbicpCisJCQlicmVhazsKKwkJaWYgKHN0cm5jbXAoZHB0ciwgbmVlZGxlLCBsZW4pID09IDApCisJCQlyZXR1cm4gZHB0cjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIExvY2F0ZSBhIFNEUCBoZWFkZXIgKG9wdGlvbmFsbHkgYSBzdWJzdHJpbmcgd2l0aGluIHRoZSBoZWFkZXIgdmFsdWUpLAorICogb3B0aW9uYWxseSBzdG9wcGluZyBhdCB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSB0ZXJtIGhlYWRlciwgcGFyc2UKKyAqIGl0IGFuZCByZXR1cm4gdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBkYXRhIHdlJ3JlIGludGVyZXN0ZWQgaW4uCisgKi8KK2ludCBjdF9zaXBfZ2V0X3NkcF9oZWFkZXIoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0eXBlLAorCQkJICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdGVybSwKKwkJCSAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbikKK3sKKwljb25zdCBzdHJ1Y3Qgc2lwX2hlYWRlciAqaGRyID0gJmN0X3NkcF9oZHJzW3R5cGVdOworCWNvbnN0IHN0cnVjdCBzaXBfaGVhZGVyICp0aGRyID0gJmN0X3NkcF9oZHJzW3Rlcm1dOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gZHB0ciwgKmxpbWl0ID0gZHB0ciArIGRhdGFsZW47CisJaW50IHNoaWZ0ID0gMDsKKworCWZvciAoZHB0ciArPSBkYXRhb2ZmOyBkcHRyIDwgbGltaXQ7IGRwdHIrKykgeworCQkvKiBGaW5kIGJlZ2lubmluZyBvZiBsaW5lICovCisJCWlmICgqZHB0ciAhPSAnXHInICYmICpkcHRyICE9ICdcbicpCisJCQljb250aW51ZTsKKwkJaWYgKCsrZHB0ciA+PSBsaW1pdCkKKwkJCWJyZWFrOworCQlpZiAoKihkcHRyIC0gMSkgPT0gJ1xyJyAmJiAqZHB0ciA9PSAnXG4nKSB7CisJCQlpZiAoKytkcHRyID49IGxpbWl0KQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRlcm0gIT0gU0RQX0hEUl9VTlNQRUMgJiYKKwkJICAgIGxpbWl0IC0gZHB0ciA+PSB0aGRyLT5sZW4gJiYKKwkJICAgIHN0cm5pY21wKGRwdHIsIHRoZHItPm5hbWUsIHRoZHItPmxlbikgPT0gMCkKKwkJCWJyZWFrOworCQllbHNlIGlmIChsaW1pdCAtIGRwdHIgPj0gaGRyLT5sZW4gJiYKKwkJCSBzdHJuaWNtcChkcHRyLCBoZHItPm5hbWUsIGhkci0+bGVuKSA9PSAwKQorCQkJZHB0ciArPSBoZHItPmxlbjsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJKm1hdGNob2ZmID0gZHB0ciAtIHN0YXJ0OworCQlpZiAoaGRyLT5zZWFyY2gpIHsKKwkJCWRwdHIgPSBjdF9zZHBfaGVhZGVyX3NlYXJjaChkcHRyLCBsaW1pdCwgaGRyLT5zZWFyY2gsCisJCQkJCQkgICAgaGRyLT5zbGVuKTsKKwkJCWlmICghZHB0cikKKwkJCQlyZXR1cm4gLTE7CisJCQlkcHRyICs9IGhkci0+c2xlbjsKKwkJfQorCisJCSptYXRjaGxlbiA9IGhkci0+bWF0Y2hfbGVuKGN0LCBkcHRyLCBsaW1pdCwgJnNoaWZ0KTsKKwkJaWYgKCEqbWF0Y2hsZW4pCisJCQlyZXR1cm4gLTE7CisJCSptYXRjaG9mZiA9IGRwdHIgLSBzdGFydCArIHNoaWZ0OworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfZ2V0X3NkcF9oZWFkZXIpOworCitzdGF0aWMgaW50IGN0X3NpcF9wYXJzZV9zZHBfYWRkcihjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCisJCQkJIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJCQkgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHR5cGUsCisJCQkJIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0ZXJtLAorCQkJCSB1bnNpZ25lZCBpbnQgKm1hdGNob2ZmLCB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLAorCQkJCSB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCit7CisJaW50IHJldDsKKworCXJldCA9IGN0X3NpcF9nZXRfc2RwX2hlYWRlcihjdCwgZHB0ciwgZGF0YW9mZiwgZGF0YWxlbiwgdHlwZSwgdGVybSwKKwkJCQkgICAgbWF0Y2hvZmYsIG1hdGNobGVuKTsKKwlpZiAocmV0IDw9IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXBhcnNlX2FkZHIoY3QsIGRwdHIgKyAqbWF0Y2hvZmYsIE5VTEwsIGFkZHIsCisJCQlkcHRyICsgKm1hdGNob2ZmICsgKm1hdGNobGVuKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlZnJlc2hfc2lnbmFsbGluZ19leHBlY3RhdGlvbihzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJCSAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLAorCQkJCQkgIF9fYmUxNiBwb3J0LAorCQkJCQkgIHVuc2lnbmVkIGludCBleHBpcmVzKQoreworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CisJc3RydWN0IGhsaXN0X25vZGUgKm4sICpuZXh0OworCWludCBmb3VuZCA9IDA7CisKKwlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgbiwgbmV4dCwgJmhlbHAtPmV4cGVjdGF0aW9ucywgbG5vZGUpIHsKKwkJaWYgKGV4cC0+Y2xhc3MgIT0gU0lQX0VYUEVDVF9TSUdOQUxMSU5HIHx8CisJCSAgICAhbmZfaW5ldF9hZGRyX2NtcCgmZXhwLT50dXBsZS5kc3QudTMsIGFkZHIpIHx8CisJCSAgICBleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ICE9IHBvcnQpCisJCQljb250aW51ZTsKKwkJaWYgKCFkZWxfdGltZXIoJmV4cC0+dGltZW91dCkpCisJCQljb250aW51ZTsKKwkJZXhwLT5mbGFncyAmPSB+TkZfQ1RfRVhQRUNUX0lOQUNUSVZFOworCQlleHAtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBleHBpcmVzICogSFo7CisJCWFkZF90aW1lcigmZXhwLT50aW1lb3V0KTsKKwkJZm91bmQgPSAxOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2V4cGVjdGF0aW9ucyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGJvb2wgbWVkaWEpCit7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscCA9IG5mY3RfaGVscChjdCk7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKm5leHQ7CisKKwlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgbiwgbmV4dCwgJmhlbHAtPmV4cGVjdGF0aW9ucywgbG5vZGUpIHsKKwkJaWYgKChleHAtPmNsYXNzICE9IFNJUF9FWFBFQ1RfU0lHTkFMTElORykgXiBtZWRpYSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkKKwkJCWNvbnRpbnVlOworCQluZl9jdF91bmxpbmtfZXhwZWN0KGV4cCk7CisJCW5mX2N0X2V4cGVjdF9wdXQoZXhwKTsKKwkJaWYgKCFtZWRpYSkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworfQorCitzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSB1bmlvbiBuZl9pbmV0X2FkZHIgKmRhZGRyLCBfX2JlMTYgcG9ydCwKKwkJCQkgZW51bSBzaXBfZXhwZWN0YXRpb25fY2xhc3NlcyBjbGFzcywKKwkJCQkgdW5zaWduZWQgaW50IG1lZGlhb2ZmLCB1bnNpZ25lZCBpbnQgbWVkaWFsZW4pCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgKnJ0cF9leHAsICpydGNwX2V4cDsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVuaW9uIG5mX2luZXRfYWRkciAqc2FkZHI7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKKwlpbnQgZGlyZWN0X3J0cCA9IDAsIHNraXBfZXhwZWN0ID0gMCwgcmV0ID0gTkZfRFJPUDsKKwl1X2ludDE2X3QgYmFzZV9wb3J0OworCV9fYmUxNiBydHBfcG9ydCwgcnRjcF9wb3J0OworCXR5cGVvZihuZl9uYXRfc2RwX3BvcnRfaG9vaykgbmZfbmF0X3NkcF9wb3J0OworCXR5cGVvZihuZl9uYXRfc2RwX21lZGlhX2hvb2spIG5mX25hdF9zZHBfbWVkaWE7CisKKwlzYWRkciA9IE5VTEw7CisJaWYgKHNpcF9kaXJlY3RfbWVkaWEpIHsKKwkJaWYgKCFuZl9pbmV0X2FkZHJfY21wKGRhZGRyLCAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MykpCisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQlzYWRkciA9ICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MzsKKwl9CisKKwkvKiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHJlZ2lzdHJhdGlvbiBleGlzdHMgYmVmb3JlIGF0dGVtcHRpbmcKKwkgKiB0byByZWdpc3RlciBpdCBzaW5jZSB3ZSBjYW4gc2VlIHRoZSBzYW1lIG1lZGlhIGRlc2NyaXB0aW9uIG11bHRpcGxlCisJICogdGltZXMgb24gZGlmZmVyZW50IGNvbm5lY3Rpb25zIGluIGNhc2UgbXVsdGlwbGUgZW5kcG9pbnRzIHJlY2VpdmUKKwkgKiB0aGUgc2FtZSBjYWxsLgorCSAqCisJICogUlRQIG9wdGltaXphdGlvbjogaWYgd2UgZmluZCBhIG1hdGNoaW5nIG1lZGlhIGNoYW5uZWwgZXhwZWN0YXRpb24KKwkgKiBhbmQgYm90aCB0aGUgZXhwZWN0YXRpb24gYW5kIHRoaXMgY29ubmVjdGlvbiBhcmUgU05BVGVkLCB3ZSBhc3N1bWUKKwkgKiBib3RoIHNpZGVzIGNhbiByZWFjaCBlYWNoIG90aGVyIGRpcmVjdGx5IGFuZCB1c2UgdGhlIGZpbmFsCisJICogZGVzdGluYXRpb24gYWRkcmVzcyBmcm9tIHRoZSBleHBlY3RhdGlvbi4gV2Ugc3RpbGwgbmVlZCB0byBrZWVwCisJICogdGhlIE5BVGVkIGV4cGVjdGF0aW9ucyBmb3IgbWVkaWEgdGhhdCBtaWdodCBhcnJpdmUgZnJvbSB0aGUKKwkgKiBvdXRzaWRlLCBhbmQgYWRkaXRpb25hbGx5IG5lZWQgdG8gZXhwZWN0IHRoZSBkaXJlY3QgUlRQIHN0cmVhbQorCSAqIGluIGNhc2UgaXQgcGFzc2VzIHRocm91Z2ggdXMgZXZlbiB3aXRob3V0IE5BVC4KKwkgKi8KKwltZW1zZXQoJnR1cGxlLCAwLCBzaXplb2YodHVwbGUpKTsKKwlpZiAoc2FkZHIpCisJCXR1cGxlLnNyYy51MyA9ICpzYWRkcjsKKwl0dXBsZS5zcmMubDNudW0JCT0gbmZfY3RfbDNudW0oY3QpOworCXR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQOworCXR1cGxlLmRzdC51MwkJPSAqZGFkZHI7CisJdHVwbGUuZHN0LnUudWRwLnBvcnQJPSBwb3J0OworCisJcmN1X3JlYWRfbG9jaygpOworCWRvIHsKKwkJZXhwID0gX19uZl9jdF9leHBlY3RfZmluZCgmdHVwbGUpOworCisJCWlmICghZXhwIHx8IGV4cC0+bWFzdGVyID09IGN0IHx8CisJCSAgICBuZmN0X2hlbHAoZXhwLT5tYXN0ZXIpLT5oZWxwZXIgIT0gbmZjdF9oZWxwKGN0KS0+aGVscGVyIHx8CisJCSAgICBleHAtPmNsYXNzICE9IGNsYXNzKQorCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKwkJaWYgKGV4cC0+dHVwbGUuc3JjLmwzbnVtID09IEFGX0lORVQgJiYgIWRpcmVjdF9ydHAgJiYKKwkJICAgIChleHAtPnNhdmVkX2lwICE9IGV4cC0+dHVwbGUuZHN0LnUzLmlwIHx8CisJCSAgICAgZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCAhPSBleHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0KSAmJgorCQkgICAgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQkJZGFkZHItPmlwCQk9IGV4cC0+c2F2ZWRfaXA7CisJCQl0dXBsZS5kc3QudTMuaXAJCT0gZXhwLT5zYXZlZF9pcDsKKwkJCXR1cGxlLmRzdC51LnVkcC5wb3J0CT0gZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydDsKKwkJCWRpcmVjdF9ydHAgPSAxOworCQl9IGVsc2UKKyNlbmRpZgorCQkJc2tpcF9leHBlY3QgPSAxOworCX0gd2hpbGUgKCFza2lwX2V4cGVjdCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwliYXNlX3BvcnQgPSBudG9ocyh0dXBsZS5kc3QudS51ZHAucG9ydCkgJiB+MTsKKwlydHBfcG9ydCA9IGh0b25zKGJhc2VfcG9ydCk7CisJcnRjcF9wb3J0ID0gaHRvbnMoYmFzZV9wb3J0ICsgMSk7CisKKwlpZiAoZGlyZWN0X3J0cCkgeworCQluZl9uYXRfc2RwX3BvcnQgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NkcF9wb3J0X2hvb2spOworCQlpZiAobmZfbmF0X3NkcF9wb3J0ICYmCisJCSAgICAhbmZfbmF0X3NkcF9wb3J0KHNrYiwgZHB0ciwgZGF0YWxlbiwKKwkJCQkgICAgIG1lZGlhb2ZmLCBtZWRpYWxlbiwgbnRvaHMocnRwX3BvcnQpKSkKKwkJCWdvdG8gZXJyMTsKKwl9CisKKwlpZiAoc2tpcF9leHBlY3QpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwlydHBfZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTsKKwlpZiAocnRwX2V4cCA9PSBOVUxMKQorCQlnb3RvIGVycjE7CisJbmZfY3RfZXhwZWN0X2luaXQocnRwX2V4cCwgY2xhc3MsIG5mX2N0X2wzbnVtKGN0KSwgc2FkZHIsIGRhZGRyLAorCQkJICBJUFBST1RPX1VEUCwgTlVMTCwgJnJ0cF9wb3J0KTsKKworCXJ0Y3BfZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTsKKwlpZiAocnRjcF9leHAgPT0gTlVMTCkKKwkJZ290byBlcnIyOworCW5mX2N0X2V4cGVjdF9pbml0KHJ0Y3BfZXhwLCBjbGFzcywgbmZfY3RfbDNudW0oY3QpLCBzYWRkciwgZGFkZHIsCisJCQkgIElQUFJPVE9fVURQLCBOVUxMLCAmcnRjcF9wb3J0KTsKKworCW5mX25hdF9zZHBfbWVkaWEgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NkcF9tZWRpYV9ob29rKTsKKwlpZiAobmZfbmF0X3NkcF9tZWRpYSAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLICYmICFkaXJlY3RfcnRwKQorCQlyZXQgPSBuZl9uYXRfc2RwX21lZGlhKHNrYiwgZHB0ciwgZGF0YWxlbiwgcnRwX2V4cCwgcnRjcF9leHAsCisJCQkJICAgICAgIG1lZGlhb2ZmLCBtZWRpYWxlbiwgZGFkZHIpOworCWVsc2UgeworCQlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCkgPT0gMCkgeworCQkJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwKSAhPSAwKQorCQkJCW5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7CisJCQllbHNlCisJCQkJcmV0ID0gTkZfQUNDRVBUOworCQl9CisJfQorCW5mX2N0X2V4cGVjdF9wdXQocnRjcF9leHApOworZXJyMjoKKwluZl9jdF9leHBlY3RfcHV0KHJ0cF9leHApOworZXJyMToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkcF9tZWRpYV90eXBlIHNkcF9tZWRpYV90eXBlc1tdID0geworCVNEUF9NRURJQV9UWVBFKCJhdWRpbyAiLCBTSVBfRVhQRUNUX0FVRElPKSwKKwlTRFBfTUVESUFfVFlQRSgidmlkZW8gIiwgU0lQX0VYUEVDVF9WSURFTyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkcF9tZWRpYV90eXBlICpzZHBfbWVkaWFfdHlwZShjb25zdCBjaGFyICpkcHRyLAorCQkJCQkJICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAorCQkJCQkJICAgdW5zaWduZWQgaW50IG1hdGNobGVuKQoreworCWNvbnN0IHN0cnVjdCBzZHBfbWVkaWFfdHlwZSAqdDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkcF9tZWRpYV90eXBlcyk7IGkrKykgeworCQl0ID0gJnNkcF9tZWRpYV90eXBlc1tpXTsKKwkJaWYgKG1hdGNobGVuIDwgdC0+bGVuIHx8CisJCSAgICBzdHJuY21wKGRwdHIgKyBtYXRjaG9mZiwgdC0+bmFtZSwgdC0+bGVuKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gdDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY3NlcSkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIG1hdGNobGVuOworCXVuc2lnbmVkIGludCBtZWRpYW9mZiwgbWVkaWFsZW47CisJdW5zaWduZWQgaW50IHNkcG9mZjsKKwl1bnNpZ25lZCBpbnQgY2FkZHJfbGVuLCBtYWRkcl9sZW47CisJdW5zaWduZWQgaW50IGk7CisJdW5pb24gbmZfaW5ldF9hZGRyIGNhZGRyLCBtYWRkciwgcnRwX2FkZHI7CisJdW5zaWduZWQgaW50IHBvcnQ7CisJZW51bSBzZHBfaGVhZGVyX3R5cGVzIGNfaGRyOworCWNvbnN0IHN0cnVjdCBzZHBfbWVkaWFfdHlwZSAqdDsKKwlpbnQgcmV0ID0gTkZfQUNDRVBUOworCXR5cGVvZihuZl9uYXRfc2RwX2FkZHJfaG9vaykgbmZfbmF0X3NkcF9hZGRyOworCXR5cGVvZihuZl9uYXRfc2RwX3Nlc3Npb25faG9vaykgbmZfbmF0X3NkcF9zZXNzaW9uOworCisJbmZfbmF0X3NkcF9hZGRyID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZHBfYWRkcl9ob29rKTsKKwljX2hkciA9IG5mX2N0X2wzbnVtKGN0KSA9PSBBRl9JTkVUID8gU0RQX0hEUl9DT05ORUNUSU9OX0lQNCA6CisJCQkJCSAgICAgU0RQX0hEUl9DT05ORUNUSU9OX0lQNjsKKworCS8qIEZpbmQgYmVnaW5uaW5nIG9mIHNlc3Npb24gZGVzY3JpcHRpb24gKi8KKwlpZiAoY3Rfc2lwX2dldF9zZHBfaGVhZGVyKGN0LCAqZHB0ciwgMCwgKmRhdGFsZW4sCisJCQkJICBTRFBfSERSX1ZFUlNJT04sIFNEUF9IRFJfVU5TUEVDLAorCQkJCSAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pIDw9IDApCisJCXJldHVybiBORl9BQ0NFUFQ7CisJc2Rwb2ZmID0gbWF0Y2hvZmY7CisKKwkvKiBUaGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBpcyBjb250YWluZWQgaW4gdGhlIHNlc3Npb24gZGVzY3JpcHRpb24KKwkgKiBhbmQvb3Igb25jZSBwZXIgbWVkaWEgZGVzY3JpcHRpb24uIFRoZSBmaXJzdCBtZWRpYSBkZXNjcmlwdGlvbiBtYXJrcworCSAqIHRoZSBlbmQgb2YgdGhlIHNlc3Npb24gZGVzY3JpcHRpb24uICovCisJY2FkZHJfbGVuID0gMDsKKwlpZiAoY3Rfc2lwX3BhcnNlX3NkcF9hZGRyKGN0LCAqZHB0ciwgc2Rwb2ZmLCAqZGF0YWxlbiwKKwkJCQkgIGNfaGRyLCBTRFBfSERSX01FRElBLAorCQkJCSAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sICZjYWRkcikgPiAwKQorCQljYWRkcl9sZW4gPSBtYXRjaGxlbjsKKworCW1lZGlhb2ZmID0gc2Rwb2ZmOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkcF9tZWRpYV90eXBlcyk7ICkgeworCQlpZiAoY3Rfc2lwX2dldF9zZHBfaGVhZGVyKGN0LCAqZHB0ciwgbWVkaWFvZmYsICpkYXRhbGVuLAorCQkJCQkgIFNEUF9IRFJfTUVESUEsIFNEUF9IRFJfVU5TUEVDLAorCQkJCQkgICZtZWRpYW9mZiwgJm1lZGlhbGVuKSA8PSAwKQorCQkJYnJlYWs7CisKKwkJLyogR2V0IG1lZGlhIHR5cGUgYW5kIHBvcnQgbnVtYmVyLiBBIG1lZGlhIHBvcnQgdmFsdWUgb2YgemVybworCQkgKiBpbmRpY2F0ZXMgYW4gaW5hY3RpdmUgc3RyZWFtLiAqLworCQl0ID0gc2RwX21lZGlhX3R5cGUoKmRwdHIsIG1lZGlhb2ZmLCBtZWRpYWxlbik7CisJCWlmICghdCkgeworCQkJbWVkaWFvZmYgKz0gbWVkaWFsZW47CisJCQljb250aW51ZTsKKwkJfQorCQltZWRpYW9mZiArPSB0LT5sZW47CisJCW1lZGlhbGVuIC09IHQtPmxlbjsKKworCQlwb3J0ID0gc2ltcGxlX3N0cnRvdWwoKmRwdHIgKyBtZWRpYW9mZiwgTlVMTCwgMTApOworCQlpZiAocG9ydCA9PSAwKQorCQkJY29udGludWU7CisJCWlmIChwb3J0IDwgMTAyNCB8fCBwb3J0ID4gNjU1MzUpCisJCQlyZXR1cm4gTkZfRFJPUDsKKworCQkvKiBUaGUgbWVkaWEgZGVzY3JpcHRpb24gb3ZlcnJpZGVzIHRoZSBzZXNzaW9uIGRlc2NyaXB0aW9uLiAqLworCQltYWRkcl9sZW4gPSAwOworCQlpZiAoY3Rfc2lwX3BhcnNlX3NkcF9hZGRyKGN0LCAqZHB0ciwgbWVkaWFvZmYsICpkYXRhbGVuLAorCQkJCQkgIGNfaGRyLCBTRFBfSERSX01FRElBLAorCQkJCQkgICZtYXRjaG9mZiwgJm1hdGNobGVuLCAmbWFkZHIpID4gMCkgeworCQkJbWFkZHJfbGVuID0gbWF0Y2hsZW47CisJCQltZW1jcHkoJnJ0cF9hZGRyLCAmbWFkZHIsIHNpemVvZihydHBfYWRkcikpOworCQl9IGVsc2UgaWYgKGNhZGRyX2xlbikKKwkJCW1lbWNweSgmcnRwX2FkZHIsICZjYWRkciwgc2l6ZW9mKHJ0cF9hZGRyKSk7CisJCWVsc2UKKwkJCXJldHVybiBORl9EUk9QOworCisJCXJldCA9IHNldF9leHBlY3RlZF9ydHBfcnRjcChza2IsIGRwdHIsIGRhdGFsZW4sCisJCQkJCSAgICAmcnRwX2FkZHIsIGh0b25zKHBvcnQpLCB0LT5jbGFzcywKKwkJCQkJICAgIG1lZGlhb2ZmLCBtZWRpYWxlbik7CisJCWlmIChyZXQgIT0gTkZfQUNDRVBUKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBVcGRhdGUgbWVkaWEgY29ubmVjdGlvbiBhZGRyZXNzIGlmIHByZXNlbnQgKi8KKwkJaWYgKG1hZGRyX2xlbiAmJiBuZl9uYXRfc2RwX2FkZHIgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQkJcmV0ID0gbmZfbmF0X3NkcF9hZGRyKHNrYiwgZHB0ciwgbWVkaWFvZmYsIGRhdGFsZW4sCisJCQkJCSAgICAgIGNfaGRyLCBTRFBfSERSX01FRElBLCAmcnRwX2FkZHIpOworCQkJaWYgKHJldCAhPSBORl9BQ0NFUFQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpKys7CisJfQorCisJLyogVXBkYXRlIHNlc3Npb24gY29ubmVjdGlvbiBhbmQgb3duZXIgYWRkcmVzc2VzICovCisJbmZfbmF0X3NkcF9zZXNzaW9uID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZHBfc2Vzc2lvbl9ob29rKTsKKwlpZiAobmZfbmF0X3NkcF9zZXNzaW9uICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCisJCXJldCA9IG5mX25hdF9zZHBfc2Vzc2lvbihza2IsIGRwdHIsIHNkcG9mZiwgZGF0YWxlbiwgJnJ0cF9hZGRyKTsKKworCXJldHVybiByZXQ7Cit9CitzdGF0aWMgaW50IHByb2Nlc3NfaW52aXRlX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3NlcSwgdW5zaWduZWQgaW50IGNvZGUpCit7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisKKwlpZiAoKGNvZGUgPj0gMTAwICYmIGNvZGUgPD0gMTk5KSB8fAorCSAgICAoY29kZSA+PSAyMDAgJiYgY29kZSA8PSAyOTkpKQorCQlyZXR1cm4gcHJvY2Vzc19zZHAoc2tiLCBkcHRyLCBkYXRhbGVuLCBjc2VxKTsKKwllbHNlIHsKKwkJZmx1c2hfZXhwZWN0YXRpb25zKGN0LCB0cnVlKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc191cGRhdGVfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgIHVuc2lnbmVkIGludCBjc2VxLCB1bnNpZ25lZCBpbnQgY29kZSkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKworCWlmICgoY29kZSA+PSAxMDAgJiYgY29kZSA8PSAxOTkpIHx8CisJICAgIChjb2RlID49IDIwMCAmJiBjb2RlIDw9IDI5OSkpCisJCXJldHVybiBwcm9jZXNzX3NkcChza2IsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOworCWVsc2UgeworCQlmbHVzaF9leHBlY3RhdGlvbnMoY3QsIHRydWUpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KK30KKworc3RhdGljIGludCBwcm9jZXNzX3ByYWNrX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgdW5zaWduZWQgaW50IGNzZXEsIHVuc2lnbmVkIGludCBjb2RlKQoreworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCisJaWYgKChjb2RlID49IDEwMCAmJiBjb2RlIDw9IDE5OSkgfHwKKwkgICAgKGNvZGUgPj0gMjAwICYmIGNvZGUgPD0gMjk5KSkKKwkJcmV0dXJuIHByb2Nlc3Nfc2RwKHNrYiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CisJZWxzZSB7CisJCWZsdXNoX2V4cGVjdGF0aW9ucyhjdCwgdHJ1ZSk7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorfQorCitzdGF0aWMgaW50IHByb2Nlc3NfYnllX3JlcXVlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjc2VxKQoreworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCisJZmx1c2hfZXhwZWN0YXRpb25zKGN0LCB0cnVlKTsKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCisvKiBQYXJzZSBhIFJFR0lTVEVSIHJlcXVlc3QgYW5kIGNyZWF0ZSBhIHBlcm1hbmVudCBleHBlY3RhdGlvbiBmb3IgaW5jb21pbmcKKyAqIHNpZ25hbGxpbmcgY29ubmVjdGlvbnMuIFRoZSBleHBlY3RhdGlvbiBpcyBtYXJrZWQgaW5hY3RpdmUgYW5kIGlzIGFjdGl2YXRlZAorICogd2hlbiByZWNlaXZpbmcgYSByZXNwb25zZSBpbmRpY2F0aW5nIHN1Y2Nlc3MgZnJvbSB0aGUgcmVnaXN0cmFyLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfcmVnaXN0ZXJfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY3NlcSkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW47CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwl1bmlvbiBuZl9pbmV0X2FkZHIgKnNhZGRyLCBkYWRkcjsKKwlfX2JlMTYgcG9ydDsKKwl1bnNpZ25lZCBpbnQgZXhwaXJlcyA9IDA7CisJaW50IHJldDsKKwl0eXBlb2YobmZfbmF0X3NpcF9leHBlY3RfaG9vaykgbmZfbmF0X3NpcF9leHBlY3Q7CisKKwkvKiBFeHBlY3RlZCBjb25uZWN0aW9ucyBjYW4gbm90IHJlZ2lzdGVyIGFnYWluLiAqLworCWlmIChjdC0+c3RhdHVzICYgSVBTX0VYUEVDVEVEKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJLyogV2UgbXVzdCBjaGVjayB0aGUgZXhwaXJhdGlvbiB0aW1lOiBhIHZhbHVlIG9mIHplcm8gc2lnbmFscyB0aGUKKwkgKiByZWdpc3RyYXIgdG8gcmVsZWFzZSB0aGUgYmluZGluZy4gV2UnbGwgcmVtb3ZlIG91ciBleHBlY3RhdGlvbgorCSAqIHdoZW4gcmVjZWl2aW5nIHRoZSBuZXcgYmluZGluZ3MgaW4gdGhlIHJlc3BvbnNlLCBidXQgd2UgZG9uJ3QKKwkgKiB3YW50IHRvIGNyZWF0ZSBuZXcgb25lcy4KKwkgKgorCSAqIFRoZSBleHBpcmF0aW9uIHRpbWUgbWF5IGJlIGNvbnRhaW5lZCBpbiBFeHBpcmVzOiBoZWFkZXIsIHRoZQorCSAqIENvbnRhY3Q6IGhlYWRlciBwYXJhbWV0ZXJzIG9yIHRoZSBVUkkgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAoY3Rfc2lwX2dldF9oZWFkZXIoY3QsICpkcHRyLCAwLCAqZGF0YWxlbiwgU0lQX0hEUl9FWFBJUkVTLAorCQkJICAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pID4gMCkKKwkJZXhwaXJlcyA9IHNpbXBsZV9zdHJ0b3VsKCpkcHRyICsgbWF0Y2hvZmYsIE5VTEwsIDEwKTsKKworCXJldCA9IGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKGN0LCAqZHB0ciwgTlVMTCwgKmRhdGFsZW4sCisJCQkJICAgICAgU0lQX0hEUl9DT05UQUNULCBOVUxMLAorCQkJCSAgICAgICZtYXRjaG9mZiwgJm1hdGNobGVuLCAmZGFkZHIsICZwb3J0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIE5GX0RST1A7CisJZWxzZSBpZiAocmV0ID09IDApCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwkvKiBXZSBkb24ndCBzdXBwb3J0IHRoaXJkLXBhcnR5IHJlZ2lzdHJhdGlvbnMgKi8KKwlpZiAoIW5mX2luZXRfYWRkcl9jbXAoJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsICZkYWRkcikpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwlpZiAoY3Rfc2lwX3BhcnNlX251bWVyaWNhbF9wYXJhbShjdCwgKmRwdHIsCisJCQkJCSBtYXRjaG9mZiArIG1hdGNobGVuLCAqZGF0YWxlbiwKKwkJCQkJICJleHBpcmVzPSIsIE5VTEwsIE5VTEwsICZleHBpcmVzKSA8IDApCisJCXJldHVybiBORl9EUk9QOworCisJaWYgKGV4cGlyZXMgPT0gMCkgeworCQlyZXQgPSBORl9BQ0NFUFQ7CisJCWdvdG8gc3RvcmVfY3NlcTsKKwl9CiAKIAlleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpOwotCWlmIChleHAgPT0gTlVMTCkKKwlpZiAoIWV4cCkKIAkJcmV0dXJuIE5GX0RST1A7Ci0JbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBmYW1pbHksCi0JCQkgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgYWRkciwKLQkJCSAgSVBQUk9UT19VRFAsIE5VTEwsICZwb3J0KTsKIAotCW5mX25hdF9zZHAgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NkcF9ob29rKTsKLQlpZiAobmZfbmF0X3NkcCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQotCQlyZXQgPSBuZl9uYXRfc2RwKHNrYiwgY3RpbmZvLCBleHAsIGRwdHIpOworCXNhZGRyID0gTlVMTDsKKwlpZiAoc2lwX2RpcmVjdF9zaWduYWxsaW5nKQorCQlzYWRkciA9ICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MzsKKworCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgU0lQX0VYUEVDVF9TSUdOQUxMSU5HLCBuZl9jdF9sM251bShjdCksCisJCQkgIHNhZGRyLCAmZGFkZHIsIElQUFJPVE9fVURQLCBOVUxMLCAmcG9ydCk7CisJZXhwLT50aW1lb3V0LmV4cGlyZXMgPSBzaXBfdGltZW91dCAqIEhaOworCWV4cC0+aGVscGVyID0gbmZjdF9oZWxwKGN0KS0+aGVscGVyOworCWV4cC0+ZmxhZ3MgPSBORl9DVF9FWFBFQ1RfUEVSTUFORU5UIHwgTkZfQ1RfRVhQRUNUX0lOQUNUSVZFOworCisJbmZfbmF0X3NpcF9leHBlY3QgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NpcF9leHBlY3RfaG9vayk7CisJaWYgKG5mX25hdF9zaXBfZXhwZWN0ICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCisJCXJldCA9IG5mX25hdF9zaXBfZXhwZWN0KHNrYiwgZHB0ciwgZGF0YWxlbiwgZXhwLAorCQkJCQltYXRjaG9mZiwgbWF0Y2hsZW4pOwogCWVsc2UgewogCQlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQogCQkJcmV0ID0gTkZfRFJPUDsKQEAgLTM5NSwyMiArMTEwNCwxNjAgQEAKIAl9CiAJbmZfY3RfZXhwZWN0X3B1dChleHApOwogCitzdG9yZV9jc2VxOgorCWlmIChyZXQgPT0gTkZfQUNDRVBUKQorCQloZWxwLT5oZWxwLmN0X3NpcF9pbmZvLnJlZ2lzdGVyX2NzZXEgPSBjc2VxOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZWdpc3Rlcl9yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjc2VxLCB1bnNpZ25lZCBpbnQgY29kZSkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVuaW9uIG5mX2luZXRfYWRkciBhZGRyOworCV9fYmUxNiBwb3J0OworCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW4sIGRhdGFvZmYgPSAwOworCXVuc2lnbmVkIGludCBleHBpcmVzID0gMDsKKwlpbnQgaW5fY29udGFjdCA9IDAsIHJldDsKKworCS8qIEFjY29yZGluZyB0byBSRkMgMzI2MSwgIlVBcyBNVVNUIE5PVCBzZW5kIGEgbmV3IHJlZ2lzdHJhdGlvbiB1bnRpbAorCSAqIHRoZXkgaGF2ZSByZWNlaXZlZCBhIGZpbmFsIHJlc3BvbnNlIGZyb20gdGhlIHJlZ2lzdHJhciBmb3IgdGhlCisJICogcHJldmlvdXMgb25lIG9yIHRoZSBwcmV2aW91cyBSRUdJU1RFUiByZXF1ZXN0IGhhcyB0aW1lZCBvdXQiLgorCSAqCisJICogSG93ZXZlciwgc29tZSBzZXJ2ZXJzIGZhaWwgdG8gZGV0ZWN0IHJldHJhbnNtaXNzaW9ucyBhbmQgc2VuZCBsYXRlCisJICogcmVzcG9uc2VzLCBzbyB3ZSBzdG9yZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBsYXN0IHZhbGlkCisJICogcmVxdWVzdCBhbmQgY29tcGFyZSBpdCBoZXJlLgorCSAqLworCWlmIChoZWxwLT5oZWxwLmN0X3NpcF9pbmZvLnJlZ2lzdGVyX2NzZXEgIT0gY3NlcSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCWlmIChjb2RlID49IDEwMCAmJiBjb2RlIDw9IDE5OSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwlpZiAoY29kZSA8IDIwMCB8fCBjb2RlID4gMjk5KQorCQlnb3RvIGZsdXNoOworCisJaWYgKGN0X3NpcF9nZXRfaGVhZGVyKGN0LCAqZHB0ciwgMCwgKmRhdGFsZW4sIFNJUF9IRFJfRVhQSVJFUywKKwkJCSAgICAgICZtYXRjaG9mZiwgJm1hdGNobGVuKSA+IDApCisJCWV4cGlyZXMgPSBzaW1wbGVfc3RydG91bCgqZHB0ciArIG1hdGNob2ZmLCBOVUxMLCAxMCk7CisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBpbnQgY19leHBpcmVzID0gZXhwaXJlczsKKworCQlyZXQgPSBjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjdCwgKmRwdHIsICZkYXRhb2ZmLCAqZGF0YWxlbiwKKwkJCQkJICAgICAgU0lQX0hEUl9DT05UQUNULCAmaW5fY29udGFjdCwKKwkJCQkJICAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sCisJCQkJCSAgICAgICZhZGRyLCAmcG9ydCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIE5GX0RST1A7CisJCWVsc2UgaWYgKHJldCA9PSAwKQorCQkJYnJlYWs7CisKKwkJLyogV2UgZG9uJ3Qgc3VwcG9ydCB0aGlyZC1wYXJ0eSByZWdpc3RyYXRpb25zICovCisJCWlmICghbmZfaW5ldF9hZGRyX2NtcCgmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC51MywgJmFkZHIpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gY3Rfc2lwX3BhcnNlX251bWVyaWNhbF9wYXJhbShjdCwgKmRwdHIsCisJCQkJCQkgICBtYXRjaG9mZiArIG1hdGNobGVuLAorCQkJCQkJICAgKmRhdGFsZW4sICJleHBpcmVzPSIsCisJCQkJCQkgICBOVUxMLCBOVUxMLCAmY19leHBpcmVzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gTkZfRFJPUDsKKwkJaWYgKGNfZXhwaXJlcyA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChyZWZyZXNoX3NpZ25hbGxpbmdfZXhwZWN0YXRpb24oY3QsICZhZGRyLCBwb3J0LCBjX2V4cGlyZXMpKQorCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKK2ZsdXNoOgorCWZsdXNoX2V4cGVjdGF0aW9ucyhjdCwgZmFsc2UpOworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2lwX2hhbmRsZXIgc2lwX2hhbmRsZXJzW10gPSB7CisJU0lQX0hBTkRMRVIoIklOVklURSIsIHByb2Nlc3Nfc2RwLCBwcm9jZXNzX2ludml0ZV9yZXNwb25zZSksCisJU0lQX0hBTkRMRVIoIlVQREFURSIsIHByb2Nlc3Nfc2RwLCBwcm9jZXNzX3VwZGF0ZV9yZXNwb25zZSksCisJU0lQX0hBTkRMRVIoIkFDSyIsIHByb2Nlc3Nfc2RwLCBOVUxMKSwKKwlTSVBfSEFORExFUigiUFJBQ0siLCBwcm9jZXNzX3NkcCwgcHJvY2Vzc19wcmFja19yZXNwb25zZSksCisJU0lQX0hBTkRMRVIoIkJZRSIsIHByb2Nlc3NfYnllX3JlcXVlc3QsIE5VTEwpLAorCVNJUF9IQU5ETEVSKCJSRUdJU1RFUiIsIHByb2Nlc3NfcmVnaXN0ZXJfcmVxdWVzdCwgcHJvY2Vzc19yZWdpc3Rlcl9yZXNwb25zZSksCit9OworCitzdGF0aWMgaW50IHByb2Nlc3Nfc2lwX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbikKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNpcF9oYW5kbGVyICpoYW5kbGVyOworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW47CisJdW5zaWduZWQgaW50IGNvZGUsIGNzZXEsIGRhdGFvZmYsIGk7CisKKwlpZiAoKmRhdGFsZW4gPCBzdHJsZW4oIlNJUC8yLjAgMjAwIikpCisJCXJldHVybiBORl9BQ0NFUFQ7CisJY29kZSA9IHNpbXBsZV9zdHJ0b3VsKCpkcHRyICsgc3RybGVuKCJTSVAvMi4wICIpLCBOVUxMLCAxMCk7CisJaWYgKCFjb2RlKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCWlmIChjdF9zaXBfZ2V0X2hlYWRlcihjdCwgKmRwdHIsIDAsICpkYXRhbGVuLCBTSVBfSERSX0NTRVEsCisJCQkgICAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbikgPD0gMCkKKwkJcmV0dXJuIE5GX0RST1A7CisJY3NlcSA9IHNpbXBsZV9zdHJ0b3VsKCpkcHRyICsgbWF0Y2hvZmYsIE5VTEwsIDEwKTsKKwlpZiAoIWNzZXEpCisJCXJldHVybiBORl9EUk9QOworCWRhdGFvZmYgPSBtYXRjaG9mZiArIG1hdGNobGVuICsgMTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpcF9oYW5kbGVycyk7IGkrKykgeworCQloYW5kbGVyID0gJnNpcF9oYW5kbGVyc1tpXTsKKwkJaWYgKGhhbmRsZXItPnJlc3BvbnNlID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCpkYXRhbGVuIDwgZGF0YW9mZiArIGhhbmRsZXItPmxlbiB8fAorCQkgICAgc3RybmljbXAoKmRwdHIgKyBkYXRhb2ZmLCBoYW5kbGVyLT5tZXRob2QsIGhhbmRsZXItPmxlbikpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIGhhbmRsZXItPnJlc3BvbnNlKHNrYiwgZHB0ciwgZGF0YWxlbiwgY3NlcSwgY29kZSk7CisJfQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zaXBfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzaXBfaGFuZGxlciAqaGFuZGxlcjsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIG1hdGNobGVuOworCXVuc2lnbmVkIGludCBjc2VxLCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2lwX2hhbmRsZXJzKTsgaSsrKSB7CisJCWhhbmRsZXIgPSAmc2lwX2hhbmRsZXJzW2ldOworCQlpZiAoaGFuZGxlci0+cmVxdWVzdCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmICgqZGF0YWxlbiA8IGhhbmRsZXItPmxlbiB8fAorCQkgICAgc3RybmljbXAoKmRwdHIsIGhhbmRsZXItPm1ldGhvZCwgaGFuZGxlci0+bGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjdF9zaXBfZ2V0X2hlYWRlcihjdCwgKmRwdHIsIDAsICpkYXRhbGVuLCBTSVBfSERSX0NTRVEsCisJCQkJICAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4pIDw9IDApCisJCQlyZXR1cm4gTkZfRFJPUDsKKwkJY3NlcSA9IHNpbXBsZV9zdHJ0b3VsKCpkcHRyICsgbWF0Y2hvZmYsIE5VTEwsIDEwKTsKKwkJaWYgKCFjc2VxKQorCQkJcmV0dXJuIE5GX0RST1A7CisKKwkJcmV0dXJuIGhhbmRsZXItPnJlcXVlc3Qoc2tiLCBkcHRyLCBkYXRhbGVuLCBjc2VxKTsKKwl9CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKwogc3RhdGljIGludCBzaXBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCiAJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKIHsKLQlpbnQgZmFtaWx5ID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bTsKLQl1bmlvbiBuZl9pbmV0X2FkZHIgYWRkcjsKIAl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgZGF0YWxlbjsKIAljb25zdCBjaGFyICpkcHRyOwotCWludCByZXQgPSBORl9BQ0NFUFQ7Ci0JdW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjsKLQl1X2ludDE2X3QgcG9ydDsKLQllbnVtIHNpcF9oZWFkZXJfcG9zIHBvczsKKwlpbnQgcmV0OwogCXR5cGVvZihuZl9uYXRfc2lwX2hvb2spIG5mX25hdF9zaXA7CiAKIAkvKiBObyBEYXRhID8gKi8KQEAgLTQyNCw1OCArMTI3MSw0NSBAQAogCQlkcHRyID0gc2tiLT5kYXRhICsgZGF0YW9mZjsKIAllbHNlIHsKIAkJcHJfZGVidWcoIkNvcHkgb2Ygc2tidWZmIG5vdCBzdXBwb3J0ZWQgeWV0LlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW5mX25hdF9zaXAgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NpcF9ob29rKTsKLQlpZiAobmZfbmF0X3NpcCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7Ci0JCWlmICghbmZfbmF0X3NpcChza2IsIGN0aW5mbywgY3QsICZkcHRyKSkgewotCQkJcmV0ID0gTkZfRFJPUDsKLQkJCWdvdG8gb3V0OwotCQl9CisJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCiAJZGF0YWxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKLQlpZiAoZGF0YWxlbiA8IHNpemVvZigiU0lQLzIuMCAyMDAiKSAtIDEpCi0JCWdvdG8gb3V0OworCWlmIChkYXRhbGVuIDwgc3RybGVuKCJTSVAvMi4wIDIwMCIpKQorCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JLyogUlRQIGluZm8gb25seSBpbiBzb21lIFNEUCBwa3RzICovCi0JaWYgKG1lbWNtcChkcHRyLCAiSU5WSVRFIiwgc2l6ZW9mKCJJTlZJVEUiKSAtIDEpICE9IDAgJiYKLQkgICAgbWVtY21wKGRwdHIsICJVUERBVEUiLCBzaXplb2YoIlVQREFURSIpIC0gMSkgIT0gMCAmJgotCSAgICBtZW1jbXAoZHB0ciwgIlNJUC8yLjAgMTgwIiwgc2l6ZW9mKCJTSVAvMi4wIDE4MCIpIC0gMSkgIT0gMCAmJgotCSAgICBtZW1jbXAoZHB0ciwgIlNJUC8yLjAgMTgzIiwgc2l6ZW9mKCJTSVAvMi4wIDE4MyIpIC0gMSkgIT0gMCAmJgotCSAgICBtZW1jbXAoZHB0ciwgIlNJUC8yLjAgMjAwIiwgc2l6ZW9mKCJTSVAvMi4wIDIwMCIpIC0gMSkgIT0gMCkgewotCQlnb3RvIG91dDsKLQl9Ci0JLyogR2V0IGFkZHJlc3MgYW5kIHBvcnQgZnJvbSBTRFAgcGFja2V0LiAqLwotCXBvcyA9IGZhbWlseSA9PSBBRl9JTkVUID8gUE9TX0NPTk5FQ1RJT05fSVA0IDogUE9TX0NPTk5FQ1RJT05fSVA2OwotCWlmIChjdF9zaXBfZ2V0X2luZm8oY3QsIGRwdHIsIGRhdGFsZW4sICZtYXRjaG9mZiwgJm1hdGNobGVuLCBwb3MpID4gMCkgeworCWlmIChzdHJuaWNtcChkcHRyLCAiU0lQLzIuMCAiLCBzdHJsZW4oIlNJUC8yLjAgIikpICE9IDApCisJCXJldCA9IHByb2Nlc3Nfc2lwX3JlcXVlc3Qoc2tiLCAmZHB0ciwgJmRhdGFsZW4pOworCWVsc2UKKwkJcmV0ID0gcHJvY2Vzc19zaXBfcmVzcG9uc2Uoc2tiLCAmZHB0ciwgJmRhdGFsZW4pOwogCi0JCS8qIFdlJ2xsIGRyb3Agb25seSBpZiB0aGVyZSBhcmUgcGFyc2UgcHJvYmxlbXMuICovCi0JCWlmICghcGFyc2VfYWRkcihjdCwgZHB0ciArIG1hdGNob2ZmLCBOVUxMLCAmYWRkciwKLQkJCQlkcHRyICsgZGF0YWxlbikpIHsKKwlpZiAocmV0ID09IE5GX0FDQ0VQVCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CisJCW5mX25hdF9zaXAgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NpcF9ob29rKTsKKwkJaWYgKG5mX25hdF9zaXAgJiYgIW5mX25hdF9zaXAoc2tiLCAmZHB0ciwgJmRhdGFsZW4pKQogCQkJcmV0ID0gTkZfRFJPUDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChjdF9zaXBfZ2V0X2luZm8oY3QsIGRwdHIsIGRhdGFsZW4sICZtYXRjaG9mZiwgJm1hdGNobGVuLAotCQkJCSAgICBQT1NfTUVESUEpID4gMCkgewotCi0JCQlwb3J0ID0gc2ltcGxlX3N0cnRvdWwoZHB0ciArIG1hdGNob2ZmLCBOVUxMLCAxMCk7Ci0JCQlpZiAocG9ydCA8IDEwMjQpIHsKLQkJCQlyZXQgPSBORl9EUk9QOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcmV0ID0gc2V0X2V4cGVjdGVkX3J0cChza2IsIGN0LCBjdGluZm8sICZhZGRyLAotCQkJCQkgICAgICAgaHRvbnMocG9ydCksIGRwdHIpOwotCQl9CiAJfQotb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFNdWzJdIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgY2hhciBzaXBfbmFtZXNbTUFYX1BPUlRTXVsyXVtzaXplb2YoInNpcC02NTUzNSIpXSBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IHNpcF9leHBfcG9saWN5W1NJUF9FWFBFQ1RfTUFYICsgMV0gPSB7CisJW1NJUF9FWFBFQ1RfU0lHTkFMTElOR10gPSB7CisJCS5tYXhfZXhwZWN0ZWQJPSAxLAorCQkudGltZW91dAk9IDMgKiA2MCwKKwl9LAorCVtTSVBfRVhQRUNUX0FVRElPXSA9IHsKKwkJLm1heF9leHBlY3RlZAk9IDIgKiBJUF9DVF9ESVJfTUFYLAorCQkudGltZW91dAk9IDMgKiA2MCwKKwl9LAorCVtTSVBfRVhQRUNUX1ZJREVPXSA9IHsKKwkJLm1heF9leHBlY3RlZAk9IDIgKiBJUF9DVF9ESVJfTUFYLAorCQkudGltZW91dAk9IDMgKiA2MCwKKwl9LAorfTsKKwogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3NpcF9maW5pKHZvaWQpCiB7CiAJaW50IGksIGo7CkBAIC01MDUsOCArMTMzOSw4IEBACiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKIAkJCXNpcFtpXVtqXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKIAkJCXNpcFtpXVtqXS50dXBsZS5zcmMudS51ZHAucG9ydCA9IGh0b25zKHBvcnRzW2ldKTsKLQkJCXNpcFtpXVtqXS5tYXhfZXhwZWN0ZWQgPSAyOwotCQkJc2lwW2ldW2pdLnRpbWVvdXQgPSAzICogNjA7IC8qIDMgbWludXRlcyAqLworCQkJc2lwW2ldW2pdLmV4cGVjdF9wb2xpY3kgPSBzaXBfZXhwX3BvbGljeTsKKwkJCXNpcFtpXVtqXS5leHBlY3RfY2xhc3NfbWF4ID0gU0lQX0VYUEVDVF9NQVg7CiAJCQlzaXBbaV1bal0ubWUgPSBUSElTX01PRFVMRTsKIAkJCXNpcFtpXVtqXS5oZWxwID0gc2lwX2hlbHA7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBlODhlOTZhLi5iNTk4NzFmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0xMjcsMjEgKzEyNywxNCBAQAogCWlmIChORl9DVF9ESVJFQ1RJT04oaGFzaCkpCiAJCXJldHVybiAwOwogCi0JbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQotCQkJCSAgICAgICAudHVwbGUuc3JjLmwzbnVtKTsKLQorCWwzcHJvdG8gPSBfX25mX2N0X2wzcHJvdG9fZmluZChuZl9jdF9sM251bShjdCkpOwogCU5GX0NUX0FTU0VSVChsM3Byb3RvKTsKLQlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCi0JCQkJICAgLnR1cGxlLnNyYy5sM251bSwKLQkJCQkgICBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0KLQkJCQkgICAudHVwbGUuZHN0LnByb3RvbnVtKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCU5GX0NUX0FTU0VSVChsNHByb3RvKTsKIAogCWlmIChzZXFfcHJpbnRmKHMsICIlLThzICV1ICUtOHMgJXUgJWxkICIsCi0JCSAgICAgICBsM3Byb3RvLT5uYW1lLAotCQkgICAgICAgY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSwKLQkJICAgICAgIGw0cHJvdG8tPm5hbWUsCi0JCSAgICAgICBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtLAorCQkgICAgICAgbDNwcm90by0+bmFtZSwgbmZfY3RfbDNudW0oY3QpLAorCQkgICAgICAgbDRwcm90by0+bmFtZSwgbmZfY3RfcHJvdG9udW0oY3QpLAogCQkgICAgICAgdGltZXJfcGVuZGluZygmY3QtPnRpbWVvdXQpCiAJCSAgICAgICA/IChsb25nKShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwKSAhPSAwKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTI5Myw4ICsyODYsNDMgQEAKIAkub3BlbgkgPSBjdF9jcHVfc2VxX29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCiAJLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9OworCitzdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfcHJvYyh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCisJcGRlID0gcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAibmZfY29ubnRyYWNrIiwgMDQ0MCwgJmN0X2ZpbGVfb3BzKTsKKwlpZiAoIXBkZSkKKwkJZ290byBvdXRfbmZfY29ubnRyYWNrOworCXBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBTX0lSVUdPLCBpbml0X25ldC5wcm9jX25ldF9zdGF0KTsKKwlpZiAoIXBkZSkKKwkJZ290byBvdXRfc3RhdF9uZl9jb25udHJhY2s7CisJcGRlLT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXBkZS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlyZXR1cm4gMDsKKworb3V0X3N0YXRfbmZfY29ubnRyYWNrOgorCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJuZl9jb25udHJhY2siKTsKK291dF9uZl9jb25udHJhY2s6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmlfcHJvYyh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBpbml0X25ldC5wcm9jX25ldF9zdGF0KTsKKwlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAibmZfY29ubnRyYWNrIik7Cit9CisjZWxzZQorc3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3Byb2Modm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9wcm9jKHZvaWQpCit7Cit9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyogU3lzY3RsIHN1cHBvcnQgKi8KQEAgLTM5MCw2MyArNDE4LDYxIEBACiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sb2dfaW52YWxpZCk7CisKK3N0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwodm9pZCkKK3sKKwluZl9jdF9zeXNjdGxfaGVhZGVyID0KKwkJcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKG5mX2N0X3BhdGgsIG5mX2N0X25ldGZpbHRlcl90YWJsZSk7CisJaWYgKG5mX2N0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bCh2b2lkKQoreworCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X3N5c2N0bF9oZWFkZXIpOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9zeXNjdGwodm9pZCkKK3sKK30KICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCiAKIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2Nfc3RhdDsKLSNlbmRpZgotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAlyZXQgPSBuZl9jb25udHJhY2tfaW5pdCgpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKKwlyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3Byb2MoKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfcHJvYzsKKwlyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bCgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zeXNjdGw7CisJcmV0dXJuIDA7CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2MgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJuZl9jb25udHJhY2siLCAwNDQwLCAmY3RfZmlsZV9vcHMpOwotCWlmICghcHJvYykgZ290byBjbGVhbnVwX2luaXQ7Ci0KLQlwcm9jX3N0YXQgPSBjcmVhdGVfcHJvY19lbnRyeSgibmZfY29ubnRyYWNrIiwgU19JUlVHTywgaW5pdF9uZXQucHJvY19uZXRfc3RhdCk7Ci0JaWYgKCFwcm9jX3N0YXQpCi0JCWdvdG8gY2xlYW51cF9wcm9jOwotCi0JcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOwotCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TWVNDVEwKLQluZl9jdF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKG5mX2N0X3BhdGgsCi0JCQluZl9jdF9uZXRmaWx0ZXJfdGFibGUpOwotCWlmIChuZl9jdF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfcHJvY19zdGF0OwotCX0KLSNlbmRpZgotCXJldHVybiByZXQ7Ci0KLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0gY2xlYW51cF9wcm9jX3N0YXQ6Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBpbml0X25ldC4gcHJvY19uZXRfc3RhdCk7Ci0gY2xlYW51cF9wcm9jOgotCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsICJuZl9jb25udHJhY2siKTsKLSBjbGVhbnVwX2luaXQ6Ci0jZW5kaWYgLyogQ05GSUdfUFJPQ19GUyAqLworb3V0X3N5c2N0bDoKKwluZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3Byb2MoKTsKK291dF9wcm9jOgogCW5mX2Nvbm50cmFja19jbGVhbnVwKCk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmkodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3Rfc3lzY3RsX2hlYWRlcik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJuZl9jb25udHJhY2siLCBpbml0X25ldC5wcm9jX25ldF9zdGF0KTsKLQlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAibmZfY29ubnRyYWNrIik7Ci0jZW5kaWYgLyogQ05GSUdfUFJPQ19GUyAqLworCW5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmlfc3lzY3RsKCk7CisJbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9wcm9jKCk7CiAJbmZfY29ubnRyYWNrX2NsZWFudXAoKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jCmluZGV4IGJkMmU4MDAuLmY1N2Y2ZTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlOwogCXVuc2lnbmVkIGludCByZXQgPSBORl9BQ0NFUFQ7Ci0JaW50IGZhbWlseSA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW07CiAJdHlwZW9mKG5mX25hdF90ZnRwX2hvb2spIG5mX25hdF90ZnRwOwogCiAJdGZoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcHJvdG9mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwKQEAgLTU2LDE4ICs1NSwyMCBAQAogCWNhc2UgVEZUUF9PUENPREVfUkVBRDoKIAljYXNlIFRGVFBfT1BDT0RFX1dSSVRFOgogCQkvKiBSUlEgYW5kIFdSUSB3b3JrcyB0aGUgc2FtZSB3YXkgKi8KLQkJTkZfQ1RfRFVNUF9UVVBMRSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKLQkJTkZfQ1RfRFVNUF9UVVBMRSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwkJbmZfY3RfZHVtcF90dXBsZSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKKwkJbmZfY3RfZHVtcF90dXBsZSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKIAogCQlleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpOwogCQlpZiAoZXhwID09IE5VTEwpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAkJdHVwbGUgPSAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlOwotCQluZl9jdF9leHBlY3RfaW5pdChleHAsIGZhbWlseSwgJnR1cGxlLT5zcmMudTMsICZ0dXBsZS0+ZHN0LnUzLAorCQluZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULAorCQkJCSAgbmZfY3RfbDNudW0oY3QpLAorCQkJCSAgJnR1cGxlLT5zcmMudTMsICZ0dXBsZS0+ZHN0LnUzLAogCQkJCSAgSVBQUk9UT19VRFAsIE5VTEwsICZ0dXBsZS0+ZHN0LnUudWRwLnBvcnQpOwogCiAJCXByX2RlYnVnKCJleHBlY3Q6ICIpOwotCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwkJbmZfY3RfZHVtcF90dXBsZSgmZXhwLT50dXBsZSk7CiAKIAkJbmZfbmF0X3RmdHAgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3RmdHBfaG9vayk7CiAJCWlmIChuZl9uYXRfdGZ0cCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQpAQCAtOTIsNiArOTMsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciB0ZnRwW01BWF9QT1JUU11bMl0gX19yZWFkX21vc3RseTsKIHN0YXRpYyBjaGFyIHRmdHBfbmFtZXNbTUFYX1BPUlRTXVsyXVtzaXplb2YoInRmdHAtNjU1MzUiKV0gX19yZWFkX21vc3RseTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSB0ZnRwX2V4cF9wb2xpY3kgPSB7CisJLm1heF9leHBlY3RlZAk9IDEsCisJLnRpbWVvdXQJPSA1ICogNjAsCit9OworCiBzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfdGZ0cF9maW5pKHZvaWQpCiB7CiAJaW50IGksIGo7CkBAIC0xMTgsOCArMTI0LDcgQEAKIAkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewogCQkJdGZ0cFtpXVtqXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKIAkJCXRmdHBbaV1bal0udHVwbGUuc3JjLnUudWRwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7Ci0JCQl0ZnRwW2ldW2pdLm1heF9leHBlY3RlZCA9IDE7Ci0JCQl0ZnRwW2ldW2pdLnRpbWVvdXQgPSA1ICogNjA7IC8qIDUgbWludXRlcyAqLworCQkJdGZ0cFtpXVtqXS5leHBlY3RfcG9saWN5ID0gJnRmdHBfZXhwX3BvbGljeTsKIAkJCXRmdHBbaV1bal0ubWUgPSBUSElTX01PRFVMRTsKIAkJCXRmdHBbaV1bal0uaGVscCA9IHRmdHBfaGVscDsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggY2VjOTk3Ni4uYmMxMWQ3MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC0xNjgsMTMgKzE2OCw5IEBACiBpbnQgX19pbml0IG5ldGZpbHRlcl9sb2dfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7Ci0KLQlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeSgibmZfbG9nIiwgU19JUlVHTywgcHJvY19uZXRfbmV0ZmlsdGVyKTsKLQlpZiAoIXBkZSkKKwlpZiAoIXByb2NfY3JlYXRlKCJuZl9sb2ciLCBTX0lSVUdPLAorCQkJIHByb2NfbmV0X25ldGZpbHRlciwgJm5mbG9nX2ZpbGVfb3BzKSkKIAkJcmV0dXJuIC0xOwotCi0JcGRlLT5wcm9jX2ZvcHMgPSAmbmZsb2dfZmlsZV9vcHM7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYwppbmRleCBiZmMyOTI4Li5iYmQyNjg5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCkBAIC01MSw3ICs1MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmcXVldWVfaGFuZGxlcl9tdXRleCk7Ci0JaWYgKHF1ZXVlX2hhbmRsZXJbcGZdICE9IHFoKSB7CisJaWYgKHF1ZXVlX2hhbmRsZXJbcGZdICYmIHF1ZXVlX2hhbmRsZXJbcGZdICE9IHFoKSB7CiAJCW11dGV4X3VubG9jaygmcXVldWVfaGFuZGxlcl9tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTM0OCwxMiArMzQ4LDkgQEAKIGludCBfX2luaXQgbmV0ZmlsdGVyX3F1ZXVlX2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwotCi0JcGRlID0gY3JlYXRlX3Byb2NfZW50cnkoIm5mX3F1ZXVlIiwgU19JUlVHTywgcHJvY19uZXRfbmV0ZmlsdGVyKTsKLQlpZiAoIXBkZSkKKwlpZiAoIXByb2NfY3JlYXRlKCJuZl9xdWV1ZSIsIFNfSVJVR08sCisJCQkgcHJvY19uZXRfbmV0ZmlsdGVyLCAmbmZxdWV1ZV9maWxlX29wcykpCiAJCXJldHVybiAtMTsKLQlwZGUtPnByb2NfZm9wcyA9ICZuZnF1ZXVlX2ZpbGVfb3BzOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3NvY2tvcHQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfc29ja29wdC5jCmluZGV4IDNkZDRiM2MuLjY5ZDY5OWY5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3NvY2tvcHQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3NvY2tvcHQuYwpAQCAtNjUsNyArNjUsNyBAQAogewogCXN0cnVjdCBuZl9zb2Nrb3B0X29wcyAqb3BzOwogCi0JaWYgKHNrLT5za19uZXQgIT0gJmluaXRfbmV0KQorCWlmIChzb2NrX25ldChzaykgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PUFJPVE9PUFQpOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmZfc29ja29wdF9tdXRleCkgIT0gMCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKaW5kZXggN2VmYTQwZC4uYjgxNzNhZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKQEAgLTU1Niw3ICs1NTYsNyBAQAogCS8qIEZJWE1FOiBkbyB3ZSB3YW50IHRvIG1ha2UgdGhlIHNpemUgY2FsY3VsYXRpb24gY29uZGl0aW9uYWwgYmFzZWQgb24KIAkgKiB3aGF0IGlzIGFjdHVhbGx5IHByZXNlbnQ/ICB3YXkgbW9yZSBicmFuY2hlcyBhbmQgY2hlY2tzLCBidXQgbW9yZQogCSAqIG1lbW9yeSBlZmZpY2llbnQuLi4gKi8KLQlzaXplID0gICAgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZmdlbm1zZykpCisJc2l6ZSA9ICAgIE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKQogCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaGRyKSkKIAkJKyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSkJLyogaWZpbmRleCAqLwogCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCkBAIC03MDIsMjAgKzcwMiwzMCBAQAogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBOTE1TR19EQVRBKG5saCk7CiAJdV9pbnQxNl90IGdyb3VwX251bSA9IG50b2hzKG5mbXNnLT5yZXNfaWQpOwogCXN0cnVjdCBuZnVsbmxfaW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX2NtZCAqY21kID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChuZnVsYVtORlVMQV9DRkdfQ01EXSkgeworCQl1X2ludDhfdCBwZiA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7CisJCWNtZCA9IG5sYV9kYXRhKG5mdWxhW05GVUxBX0NGR19DTURdKTsKKworCQkvKiBDb21tYW5kcyB3aXRob3V0IHF1ZXVlIGNvbnRleHQgKi8KKwkJc3dpdGNoIChjbWQtPmNvbW1hbmQpIHsKKwkJY2FzZSBORlVMTkxfQ0ZHX0NNRF9QRl9CSU5EOgorCQkJcmV0dXJuIG5mX2xvZ19yZWdpc3RlcihwZiwgJm5mdWxubF9sb2dnZXIpOworCQljYXNlIE5GVUxOTF9DRkdfQ01EX1BGX1VOQklORDoKKwkJCW5mX2xvZ191bnJlZ2lzdGVyX3BmKHBmKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCiAJaW5zdCA9IGluc3RhbmNlX2xvb2t1cF9nZXQoZ3JvdXBfbnVtKTsKIAlpZiAoaW5zdCAmJiBpbnN0LT5wZWVyX3BpZCAhPSBORVRMSU5LX0NCKHNrYikucGlkKSB7CiAJCXJldCA9IC1FUEVSTTsKIAkJZ290byBvdXRfcHV0OwogCX0KIAotCWlmIChuZnVsYVtORlVMQV9DRkdfQ01EXSkgewotCQl1X2ludDhfdCBwZiA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7Ci0JCXN0cnVjdCBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgKmNtZDsKLQotCQljbWQgPSBubGFfZGF0YShuZnVsYVtORlVMQV9DRkdfQ01EXSk7Ci0KKwlpZiAoY21kICE9IE5VTEwpIHsKIAkJc3dpdGNoIChjbWQtPmNvbW1hbmQpIHsKIAkJY2FzZSBORlVMTkxfQ0ZHX0NNRF9CSU5EOgogCQkJaWYgKGluc3QpIHsKQEAgLTczOCwxNCArNzQ4LDYgQEAKIAogCQkJaW5zdGFuY2VfZGVzdHJveShpbnN0KTsKIAkJCWdvdG8gb3V0OwotCQljYXNlIE5GVUxOTF9DRkdfQ01EX1BGX0JJTkQ6Ci0JCQlyZXQgPSBuZl9sb2dfcmVnaXN0ZXIocGYsICZuZnVsbmxfbG9nZ2VyKTsKLQkJCWJyZWFrOwotCQljYXNlIE5GVUxOTF9DRkdfQ01EX1BGX1VOQklORDoKLQkJCS8qIFRoaXMgaXMgYSBidWcgYW5kIGEgZmVhdHVyZS4gIFdlIGNhbm5vdCB1bnJlZ2lzdGVyCi0JCQkgKiBvdGhlciBoYW5kbGVycywgbGlrZSBuZm5ldGxpbmtfaW5zdCBjYW4gKi8KLQkJCW5mX2xvZ191bnJlZ2lzdGVyX3BmKHBmKTsKLQkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0ID0gLUVOT1RTVVBQOwogCQkJYnJlYWs7CkBAIC05MjEsOSArOTIzLDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5mbmV0bGlua19sb2dfaW5pdCh2b2lkKQogewogCWludCBpLCBzdGF0dXMgPSAtRU5PTUVNOwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX25mdWw7Ci0jZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBJTlNUQU5DRV9CVUNLRVRTOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRCgmaW5zdGFuY2VfdGFibGVbaV0pOwpAQCAtOTQxLDExICs5NDAsOSBAQAogCX0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcHJvY19uZnVsID0gY3JlYXRlX3Byb2NfZW50cnkoIm5mbmV0bGlua19sb2ciLCAwNDQwLAotCQkJCSAgICAgIHByb2NfbmV0X25ldGZpbHRlcik7Ci0JaWYgKCFwcm9jX25mdWwpCisJaWYgKCFwcm9jX2NyZWF0ZSgibmZuZXRsaW5rX2xvZyIsIDA0NDAsCisJCQkgcHJvY19uZXRfbmV0ZmlsdGVyLCAmbmZ1bF9maWxlX29wcykpCiAJCWdvdG8gY2xlYW51cF9zdWJzeXM7Ci0JcHJvY19uZnVsLT5wcm9jX2ZvcHMgPSAmbmZ1bF9maWxlX29wczsKICNlbmRpZgogCXJldHVybiBzdGF0dXM7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IGE0OGIyMGYuLjJjOWZlNWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmluZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXY7CiAKLQlzaXplID0gICAgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZmdlbm1zZykpCisJc2l6ZSA9ICAgIE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKQogCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9oZHIpKQogCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCiAJCSsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpCS8qIGlmaW5kZXggKi8KQEAgLTQ0Myw4ICs0NDMsOCBAQAogc3RhdGljIGludAogbmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKQogeworCXN0cnVjdCBza19idWZmICpuc2tiOwogCWludCBkaWZmOwotCWludCBlcnI7CiAKIAlkaWZmID0gZGF0YV9sZW4gLSBlLT5za2ItPmxlbjsKIAlpZiAoZGlmZiA8IDApIHsKQEAgLTQ1NCwxNCArNDU0LDE2IEBACiAJCWlmIChkYXRhX2xlbiA+IDB4RkZGRikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZGlmZiA+IHNrYl90YWlscm9vbShlLT5za2IpKSB7Ci0JCQllcnIgPSBwc2tiX2V4cGFuZF9oZWFkKGUtPnNrYiwgMCwKKwkJCW5za2IgPSBza2JfY29weV9leHBhbmQoZS0+c2tiLCAwLAogCQkJCQkgICAgICAgZGlmZiAtIHNrYl90YWlscm9vbShlLT5za2IpLAogCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoZXJyKSB7CisJCQlpZiAoIW5za2IpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuZl9xdWV1ZTogT09NICIKIAkJCQkgICAgICAiaW4gbWFuZ2xlLCBkcm9wcGluZyBwYWNrZXRcbiIpOwotCQkJCXJldHVybiBlcnI7CisJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CisJCQlrZnJlZV9za2IoZS0+c2tiKTsKKwkJCWUtPnNrYiA9IG5za2I7CiAJCX0KIAkJc2tiX3B1dChlLT5za2IsIGRpZmYpOwogCX0KQEAgLTU1NSw3ICs1NTcsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAkvKiBEcm9wIGFueSBwYWNrZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG93bmVkIGRldmljZSAqLwpAQCAtNzAxLDE5ICs3MDMsMTIgQEAKIAkJLyogQ29tbWFuZHMgd2l0aG91dCBxdWV1ZSBjb250ZXh0IC0gbWlnaHQgc2xlZXAgKi8KIAkJc3dpdGNoIChjbWQtPmNvbW1hbmQpIHsKIAkJY2FzZSBORlFOTF9DRkdfQ01EX1BGX0JJTkQ6Ci0JCQlyZXQgPSBuZl9yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVyKG50b2hzKGNtZC0+cGYpLAotCQkJCQkJCSZuZnFoKTsKLQkJCWJyZWFrOworCQkJcmV0dXJuIG5mX3JlZ2lzdGVyX3F1ZXVlX2hhbmRsZXIobnRvaHMoY21kLT5wZiksCisJCQkJCQkJICZuZnFoKTsKIAkJY2FzZSBORlFOTF9DRkdfQ01EX1BGX1VOQklORDoKLQkJCXJldCA9IG5mX3VucmVnaXN0ZXJfcXVldWVfaGFuZGxlcihudG9ocyhjbWQtPnBmKSwKLQkJCQkJCQkgICZuZnFoKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJCQlyZXR1cm4gbmZfdW5yZWdpc3Rlcl9xdWV1ZV9oYW5kbGVyKG50b2hzKGNtZC0+cGYpLAorCQkJCQkJCSAgICZuZnFoKTsKIAkJfQotCi0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC05MDEsOSArODk2LDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5mbmV0bGlua19xdWV1ZV9pbml0KHZvaWQpCiB7CiAJaW50IGksIHN0YXR1cyA9IC1FTk9NRU07Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmZxdWV1ZTsKLSNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IElOU1RBTkNFX0JVQ0tFVFM7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZpbnN0YW5jZV90YWJsZVtpXSk7CkBAIC05MTYsMTEgKzkwOCw5IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcm9jX25mcXVldWUgPSBjcmVhdGVfcHJvY19lbnRyeSgibmZuZXRsaW5rX3F1ZXVlIiwgMDQ0MCwKLQkJCQkJIHByb2NfbmV0X25ldGZpbHRlcik7Ci0JaWYgKCFwcm9jX25mcXVldWUpCisJaWYgKCFwcm9jX2NyZWF0ZSgibmZuZXRsaW5rX3F1ZXVlIiwgMDQ0MCwKKwkJCSBwcm9jX25ldF9uZXRmaWx0ZXIsICZuZnFubF9maWxlX29wcykpCiAJCWdvdG8gY2xlYW51cF9zdWJzeXM7Ci0JcHJvY19uZnF1ZXVlLT5wcm9jX2ZvcHMgPSAmbmZxbmxfZmlsZV9vcHM7CiAjZW5kaWYKIAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZxbmxfZGV2X25vdGlmaWVyKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwppbmRleCBhNjc5MjA4Li5mNTJmN2Y4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKKysrIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIGR1cHJpbnRmKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciAqeHRfcHJlZml4W05QUk9UT10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeHRfcHJlZml4W05QUk9UT10gPSB7CiAJW0FGX0lORVRdCT0gImlwIiwKIAlbQUZfSU5FVDZdCT0gImlwNiIsCiAJW05GX0FSUF0JPSAiYXJwIiwKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiBzdGF0aWMgaW50IG1hdGNoX3JldmZuKGludCBhZiwgY29uc3QgY2hhciAqbmFtZSwgdTggcmV2aXNpb24sIGludCAqYmVzdHApCiB7Ci0Jc3RydWN0IHh0X21hdGNoICptOworCWNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbTsKIAlpbnQgaGF2ZV9yZXYgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtLCAmeHRbYWZdLm1hdGNoLCBsaXN0KSB7CkBAIC0yNjQsNyArMjY0LDcgQEAKIAogc3RhdGljIGludCB0YXJnZXRfcmV2Zm4oaW50IGFmLCBjb25zdCBjaGFyICpuYW1lLCB1OCByZXZpc2lvbiwgaW50ICpiZXN0cCkKIHsKLQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0OworCWNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnQ7CiAJaW50IGhhdmVfcmV2ID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnh0W2FmXS50YXJnZXQsIGxpc3QpIHsKQEAgLTM4NSw3ICszODUsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X2NhbGNfanVtcCk7CiAKLWludCB4dF9jb21wYXRfbWF0Y2hfb2Zmc2V0KHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gpCitpbnQgeHRfY29tcGF0X21hdGNoX29mZnNldChjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKQogewogCXVfaW50MTZfdCBjc2l6ZSA9IG1hdGNoLT5jb21wYXRzaXplID8gOiBtYXRjaC0+bWF0Y2hzaXplOwogCXJldHVybiBYVF9BTElHTihtYXRjaC0+bWF0Y2hzaXplKSAtIENPTVBBVF9YVF9BTElHTihjc2l6ZSk7CkBAIC0zOTUsNyArMzk1LDcgQEAKIGludCB4dF9jb21wYXRfbWF0Y2hfZnJvbV91c2VyKHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbSwgdm9pZCAqKmRzdHB0ciwKIAkJCSAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKIHsKLQlzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoID0gbS0+dS5rZXJuZWwubWF0Y2g7CisJY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCA9IG0tPnUua2VybmVsLm1hdGNoOwogCXN0cnVjdCBjb21wYXRfeHRfZW50cnlfbWF0Y2ggKmNtID0gKHN0cnVjdCBjb21wYXRfeHRfZW50cnlfbWF0Y2ggKiltOwogCWludCBwYWQsIG9mZiA9IHh0X2NvbXBhdF9tYXRjaF9vZmZzZXQobWF0Y2gpOwogCXVfaW50MTZfdCBtc2l6ZSA9IGNtLT51LnVzZXIubWF0Y2hfc2l6ZTsKQEAgLTQyMiw3ICs0MjIsNyBAQAogaW50IHh0X2NvbXBhdF9tYXRjaF90b191c2VyKHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbSwgdm9pZCBfX3VzZXIgKipkc3RwdHIsCiAJCQkgICAgdW5zaWduZWQgaW50ICpzaXplKQogewotCXN0cnVjdCB4dF9tYXRjaCAqbWF0Y2ggPSBtLT51Lmtlcm5lbC5tYXRjaDsKKwljb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoID0gbS0+dS5rZXJuZWwubWF0Y2g7CiAJc3RydWN0IGNvbXBhdF94dF9lbnRyeV9tYXRjaCBfX3VzZXIgKmNtID0gKmRzdHB0cjsKIAlpbnQgb2ZmID0geHRfY29tcGF0X21hdGNoX29mZnNldChtYXRjaCk7CiAJdV9pbnQxNl90IG1zaXplID0gbS0+dS51c2VyLm1hdGNoX3NpemUgLSBvZmY7CkBAIC00NzksNyArNDc5LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NoZWNrX3RhcmdldCk7CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1pbnQgeHRfY29tcGF0X3RhcmdldF9vZmZzZXQoc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0KQoraW50IHh0X2NvbXBhdF90YXJnZXRfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCkKIHsKIAl1X2ludDE2X3QgY3NpemUgPSB0YXJnZXQtPmNvbXBhdHNpemUgPyA6IHRhcmdldC0+dGFyZ2V0c2l6ZTsKIAlyZXR1cm4gWFRfQUxJR04odGFyZ2V0LT50YXJnZXRzaXplKSAtIENPTVBBVF9YVF9BTElHTihjc2l6ZSk7CkBAIC00ODksNyArNDg5LDcgQEAKIHZvaWQgeHRfY29tcGF0X3RhcmdldF9mcm9tX3VzZXIoc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdCwgdm9pZCAqKmRzdHB0ciwKIAkJCQl1bnNpZ25lZCBpbnQgKnNpemUpCiB7Ci0Jc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OworCWNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKIAlzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X3RhcmdldCAqY3QgPSAoc3RydWN0IGNvbXBhdF94dF9lbnRyeV90YXJnZXQgKil0OwogCWludCBwYWQsIG9mZiA9IHh0X2NvbXBhdF90YXJnZXRfb2Zmc2V0KHRhcmdldCk7CiAJdV9pbnQxNl90IHRzaXplID0gY3QtPnUudXNlci50YXJnZXRfc2l6ZTsKQEAgLTUxNSw3ICs1MTUsNyBAQAogaW50IHh0X2NvbXBhdF90YXJnZXRfdG9fdXNlcihzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0LCB2b2lkIF9fdXNlciAqKmRzdHB0ciwKIAkJCSAgICAgdW5zaWduZWQgaW50ICpzaXplKQogewotCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKKwljb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSB0LT51Lmtlcm5lbC50YXJnZXQ7CiAJc3RydWN0IGNvbXBhdF94dF9lbnRyeV90YXJnZXQgX191c2VyICpjdCA9ICpkc3RwdHI7CiAJaW50IG9mZiA9IHh0X2NvbXBhdF90YXJnZXRfb2Zmc2V0KHRhcmdldCk7CiAJdV9pbnQxNl90IHRzaXplID0gdC0+dS51c2VyLnRhcmdldF9zaXplIC0gb2ZmOwpAQCAtNzI3LDcgKzcyNyw3IEBACiBzdGF0aWMgdm9pZCAqeHRfdGFibGVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgeHRfbmFtZXNfcHJpdiAqcHJpdiA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBwcml2LT5wLm5ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAlpbnQgYWYgPSBwcml2LT5hZjsKIAogCW11dGV4X2xvY2soJnh0W2FmXS5tdXRleCk7CkBAIC03MzcsNyArNzM3LDcgQEAKIHN0YXRpYyB2b2lkICp4dF90YWJsZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHh0X25hbWVzX3ByaXYgKnByaXYgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gcHJpdi0+cC5uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJaW50IGFmID0gcHJpdi0+YWY7CiAKIAlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmbmV0LT54dC50YWJsZXNbYWZdLCBwb3MpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCmluZGV4IDFmYWE5MTMuLjIxMTE4OWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyB2b2lkIHNlY21hcmtfcmVzdG9yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmICghc2tiLT5zZWNtYXJrKSB7Ci0JCXN0cnVjdCBuZl9jb25uICpjdDsKKwkJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OwogCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAogCQljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SQVRFRVNULmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYwppbmRleCAyNGM3M2JhLi42NGQ2YWQzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYwpAQCAtOTYsNyArOTYsNyBAQAogCQkJIHZvaWQgKnRhcmdpbmZvLAogCQkJIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7Ci0Jc3RydWN0IHh0X3JhdGVlc3RfdGFyZ2V0X2luZm8gKmluZm8gPSAodm9pZCAqKXRhcmdpbmZvOworCXN0cnVjdCB4dF9yYXRlZXN0X3RhcmdldF9pbmZvICppbmZvID0gdGFyZ2luZm87CiAJc3RydWN0IHh0X3JhdGVlc3QgKmVzdDsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgbmxhdHRyCQlvcHQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYwppbmRleCAzYjAxMTE5Li4yZTg5YTAwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKQEAgLTcyLDkgKzcyLDcgQEAKIAogc3RhdGljIGlubGluZSBib29sIGFscmVhZHlfY2xvc2VkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjb25uKQogewotCXVfaW50MTZfdCBwcm90byA9IGNvbm4tPnR1cGxlaGFzaFswXS50dXBsZS5kc3QucHJvdG9udW07Ci0KLQlpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApCisJaWYgKG5mX2N0X3Byb3RvbnVtKGNvbm4pID09IElQUFJPVE9fVENQKQogCQlyZXR1cm4gY29ubi0+cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfVElNRV9XQUlUOwogCWVsc2UKIAkJcmV0dXJuIDA7CkBAIC0xMDYsMTAgKzEwNCwxMCBAQAogCQkgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKm1hc2ssCiAJCSAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gpCiB7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpmb3VuZDsKKwljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmZvdW5kOwogCXN0cnVjdCB4dF9jb25ubGltaXRfY29ubiAqY29ubjsKIAlzdHJ1Y3QgeHRfY29ubmxpbWl0X2Nvbm4gKnRtcDsKLQlzdHJ1Y3QgbmZfY29ubiAqZm91bmRfY3Q7CisJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmZvdW5kX2N0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2g7CiAJYm9vbCBhZGRpdCA9IHRydWU7CiAJaW50IG1hdGNoZXMgPSAwOwpAQCAtMjU2LDcgKzI1NCw3IEBACiBzdGF0aWMgdm9pZAogY29ubmxpbWl0X210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvKQogewotCXN0cnVjdCB4dF9jb25ubGltaXRfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfY29ubmxpbWl0X2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAJc3RydWN0IHh0X2Nvbm5saW1pdF9jb25uICpjb25uOwogCXN0cnVjdCB4dF9jb25ubGltaXRfY29ubiAqdG1wOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2ggPSBpbmZvLT5kYXRhLT5pcGhhc2g7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYwppbmRleCA4NTMzMDg1Li5kNjE0MTJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAl9CiAKIAlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX1BST1RPICYmCi0JICAgIEZXSU5WKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0gIT0KKwkgICAgRldJTlYobmZfY3RfcHJvdG9udW0oY3QpICE9CiAJCSAgc2luZm8tPnR1cGxlW0lQX0NUX0RJUl9PUklHSU5BTF0uZHN0LnByb3RvbnVtLAogCQkgIFhUX0NPTk5UUkFDS19QUk9UTykpCiAJCXJldHVybiBmYWxzZTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp1bWFzaywgdW5zaWduZWQgaW50IGwzcHJvdG8pCiB7CiAJaWYgKGwzcHJvdG8gPT0gQUZfSU5FVCkKLQkJcmV0dXJuIChrYWRkci0+aXAgJiB1bWFzay0+aXApID09IHVhZGRyLT5pcDsKKwkJcmV0dXJuICgoa2FkZHItPmlwIF4gdWFkZHItPmlwKSAmIHVtYXNrLT5pcCkgPT0gMDsKIAllbHNlIGlmIChsM3Byb3RvID09IEFGX0lORVQ2KQogCQlyZXR1cm4gaXB2Nl9tYXNrZWRfYWRkcl9jbXAoJmthZGRyLT5pbjYsICZ1bWFzay0+aW42LAogCQkgICAgICAgJnVhZGRyLT5pbjYpID09IDA7CkBAIC0xNzQsNyArMTc0LDcgQEAKIAogCXR1cGxlID0gJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTsKIAlpZiAoKGluZm8tPm1hdGNoX2ZsYWdzICYgWFRfQ09OTlRSQUNLX1BST1RPKSAmJgotCSAgICAodHVwbGUtPmRzdC5wcm90b251bSA9PSBpbmZvLT5sNHByb3RvKSBeCisJICAgIChuZl9jdF9wcm90b251bShjdCkgPT0gaW5mby0+bDRwcm90bykgXgogCSAgICAhKGluZm8tPmludmVydF9mbGFncyAmIFhUX0NPTk5UUkFDS19QUk9UTykpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMjMxLDcgKzIzMSw3IEBACiAJCQlpZiAodGVzdF9iaXQoSVBTX0RTVF9OQVRfQklULCAmY3QtPnN0YXR1cykpCiAJCQkJc3RhdGViaXQgfD0gWFRfQ09OTlRSQUNLX1NUQVRFX0ROQVQ7CiAJCX0KLQkJaWYgKChpbmZvLT5zdGF0ZV9tYXNrICYgc3RhdGViaXQpIF4KKwkJaWYgKCEhKGluZm8tPnN0YXRlX21hc2sgJiBzdGF0ZWJpdCkgXgogCQkgICAgIShpbmZvLT5pbnZlcnRfZmxhZ3MgJiBYVF9DT05OVFJBQ0tfU1RBVEUpKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfZGNjcC5jIGIvbmV0L25ldGZpbHRlci94dF9kY2NwLmMKaW5kZXggNjY3ZjQ1ZS4uOGI2NTIyMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9kY2NwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9kY2NwLmMKQEAgLTk4LDcgKzk4LDggQEAKICAgICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgYm9vbCAqaG90ZHJvcCkKIHsKIAljb25zdCBzdHJ1Y3QgeHRfZGNjcF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwotCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKKwljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoOworCXN0cnVjdCBkY2NwX2hkciBfZGg7CiAKIAlpZiAob2Zmc2V0KQogCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jIGIvbmV0L25ldGZpbHRlci94dF9lc3AuYwppbmRleCA3MWM3YzM3Li5hMTMzZWI5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMKQEAgLTQ3LDcgKzQ3LDggQEAKICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHByb3RvZmYsIGJvb2wgKmhvdGRyb3ApCiB7Ci0Jc3RydWN0IGlwX2VzcF9oZHIgX2VzcCwgKmVoOworCWNvbnN0IHN0cnVjdCBpcF9lc3BfaGRyICplaDsKKwlzdHJ1Y3QgaXBfZXNwX2hkciBfZXNwOwogCWNvbnN0IHN0cnVjdCB4dF9lc3AgKmVzcGluZm8gPSBtYXRjaGluZm87CiAKIAkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKaW5kZXggNzQ0YzdmMi4uNDBkMzQ0YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0yMzcsMTQgKzIzNywxNCBAQAogCWhpbmZvLT5mYW1pbHkgPSBmYW1pbHk7CiAJaGluZm8tPnJuZF9pbml0aWFsaXplZCA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmhpbmZvLT5sb2NrKTsKLQloaW5mby0+cGRlID0gY3JlYXRlX3Byb2NfZW50cnkobWluZm8tPm5hbWUsIDAsCi0JCQkJICAgICAgIGZhbWlseSA9PSBBRl9JTkVUID8gaGFzaGxpbWl0X3Byb2NkaXI0IDoKLQkJCQkJCQkgICBoYXNobGltaXRfcHJvY2RpcjYpOworCWhpbmZvLT5wZGUgPSBwcm9jX2NyZWF0ZShtaW5mby0+bmFtZSwgMCwKKwkJCQkgZmFtaWx5ID09IEFGX0lORVQgPyBoYXNobGltaXRfcHJvY2RpcjQgOgorCQkJCQkJICAgICBoYXNobGltaXRfcHJvY2RpcjYsCisJCQkJICZkbF9maWxlX29wcyk7CiAJaWYgKCFoaW5mby0+cGRlKSB7CiAJCXZmcmVlKGhpbmZvKTsKIAkJcmV0dXJuIC0xOwogCX0KLQloaW5mby0+cGRlLT5wcm9jX2ZvcHMgPSAmZGxfZmlsZV9vcHM7CiAJaGluZm8tPnBkZS0+ZGF0YSA9IGhpbmZvOwogCiAJc2V0dXBfdGltZXIoJmhpbmZvLT50aW1lciwgaHRhYmxlX2djLCAodW5zaWduZWQgbG9uZyApaGluZm8pOwpAQCAtMzAxLDE0ICszMDEsMTQgQEAKIAloaW5mby0+cm5kX2luaXRpYWxpemVkID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmaGluZm8tPmxvY2spOwogCi0JaGluZm8tPnBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KG1pbmZvLT5uYW1lLCAwLAotCQkJCSAgICAgICBmYW1pbHkgPT0gQUZfSU5FVCA/IGhhc2hsaW1pdF9wcm9jZGlyNCA6Ci0JCQkJCQkJICAgaGFzaGxpbWl0X3Byb2NkaXI2KTsKKwloaW5mby0+cGRlID0gcHJvY19jcmVhdGUobWluZm8tPm5hbWUsIDAsCisJCQkJIGZhbWlseSA9PSBBRl9JTkVUID8gaGFzaGxpbWl0X3Byb2NkaXI0IDoKKwkJCQkJCSAgICAgaGFzaGxpbWl0X3Byb2NkaXI2LAorCQkJCSAmZGxfZmlsZV9vcHMpOwogCWlmIChoaW5mby0+cGRlID09IE5VTEwpIHsKIAkJdmZyZWUoaGluZm8pOwogCQlyZXR1cm4gLTE7CiAJfQotCWhpbmZvLT5wZGUtPnByb2NfZm9wcyA9ICZkbF9maWxlX29wczsKIAloaW5mby0+cGRlLT5kYXRhID0gaGluZm87CiAKIAlzZXR1cF90aW1lcigmaGluZm8tPnRpbWVyLCBodGFibGVfZ2MsICh1bnNpZ25lZCBsb25nKWhpbmZvKTsKQEAgLTQ2NiwzOCArNDY2LDI1IEBACiAKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1hc2tsKF9fYmUzMiBhLCB1bnNpZ25lZCBpbnQgbCkKIHsKLQlyZXR1cm4gaHRvbmwobnRvaGwoYSkgJiB+KH4odV9pbnQzMl90KTAgPj4gbCkpOworCXJldHVybiBsID8gaHRvbmwobnRvaGwoYSkgJiB+MCA8PCAoMzIgLSBsKSkgOiAwOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSVA2X05GX0lQVEFCTEVTKSB8fCBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVNfTU9EVUxFKQogc3RhdGljIHZvaWQgaGFzaGxpbWl0X2lwdjZfbWFzayhfX2JlMzIgKmksIHVuc2lnbmVkIGludCBwKQogewogCXN3aXRjaCAocCkgewotCWNhc2UgMDoKLQkJaVswXSA9IGlbMV0gPSAwOwotCQlpWzJdID0gaVszXSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMSAuLi4gMzE6CisJY2FzZSAwIC4uLiAzMToKIAkJaVswXSA9IG1hc2tsKGlbMF0sIHApOwogCQlpWzFdID0gaVsyXSA9IGlbM10gPSAwOwogCQlicmVhazsKLQljYXNlIDMyOgotCQlpWzFdID0gaVsyXSA9IGlbM10gPSAwOwotCQlicmVhazsKLQljYXNlIDMzIC4uLiA2MzoKKwljYXNlIDMyIC4uLiA2MzoKIAkJaVsxXSA9IG1hc2tsKGlbMV0sIHAgLSAzMik7CiAJCWlbMl0gPSBpWzNdID0gMDsKIAkJYnJlYWs7Ci0JY2FzZSA2NDoKLQkJaVsyXSA9IGlbM10gPSAwOwotCQlicmVhazsKLQljYXNlIDY1IC4uLiA5NToKKwljYXNlIDY0IC4uLiA5NToKIAkJaVsyXSA9IG1hc2tsKGlbMl0sIHAgLSA2NCk7CiAJCWlbM10gPSAwOwotCWNhc2UgOTY6Ci0JCWlbM10gPSAwOwotCQlicmVhazsKLQljYXNlIDk3IC4uLiAxMjc6CisJY2FzZSA5NiAuLi4gMTI3OgogCQlpWzNdID0gbWFza2woaVszXSwgcCAtIDk2KTsKIAkJYnJlYWs7CiAJY2FzZSAxMjg6CkBAIC03NzQsOSArNzYxLDYgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7Ci0KLQkvKiBVZ2x5IGhhY2s6IEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCAqLwotCWluZm8tPm1hc3RlciA9IGluZm87CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKaW5kZXggNGY5ODRkYy4uNTAwNTI4ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCWludCByOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQlyID0gKF9fZm9yY2UgdTMyKWEtPnM2X2FkZHIzMltpXSAtIChfX2ZvcmNlIHUzMiliLT5zNl9hZGRyMzJbaV07CisJCXIgPSBudG9obChhLT5zNl9hZGRyMzJbaV0pIC0gbnRvaGwoYi0+czZfYWRkcjMyW2ldKTsKIAkJaWYgKHIgIT0gMCkKIAkJCXJldHVybiByOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCmluZGV4IDMxZGFhODEuLmZkODhjNDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKICAgICAgICAgICAgICAgICBib29sICpob3Rkcm9wKQogewotCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOworCWNvbnN0IF9fYmUxNiAqcHB0cjsKKwlfX2JlMTYgX3BvcnRzWzJdOwogCWNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnQgKm11bHRpaW5mbyA9IG1hdGNoaW5mbzsKIAogCWlmIChvZmZzZXQpCkBAIC0xMjYsNyArMTI3LDggQEAKICAgICAgICAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogICAgICAgICAgICAgIGJvb2wgKmhvdGRyb3ApCiB7Ci0JX19iZTE2IF9wb3J0c1syXSwgKnBwdHI7CisJY29uc3QgX19iZTE2ICpwcHRyOworCV9fYmUxNiBfcG9ydHNbMl07CiAJY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOwogCiAJaWYgKG9mZnNldCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3BvbGljeS5jCmluZGV4IDllOTE4YWQuLmQzNTE1ODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9wb2xpY3kuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7Ci0Jc3RydWN0IHh0X3BvbGljeV9pbmZvICppbmZvID0gbWF0Y2hpbmZvOworCWNvbnN0IHN0cnVjdCB4dF9wb2xpY3lfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAogCWlmICghKGluZm8tPmZsYWdzICYgKFhUX1BPTElDWV9NQVRDSF9JTnxYVF9QT0xJQ1lfTUFUQ0hfT1VUKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4dF9wb2xpY3k6IG5laXRoZXIgaW5jb21pbmcgbm9yICIKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5jIGIvbmV0L25ldGZpbHRlci94dF9yYXRlZXN0LmMKaW5kZXggZmRiODZhNS4uZWJkODRmMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yYXRlZXN0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9yYXRlZXN0LmMKQEAgLTg2LDcgKzg2LDcgQEAKIAkJCQkgICAgIHZvaWQgKm1hdGNoaW5mbywKIAkJCQkgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7Ci0Jc3RydWN0IHh0X3JhdGVlc3RfbWF0Y2hfaW5mbyAqaW5mbyA9ICh2b2lkICopbWF0Y2hpbmZvOworCXN0cnVjdCB4dF9yYXRlZXN0X21hdGNoX2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAJc3RydWN0IHh0X3JhdGVlc3QgKmVzdDEsICplc3QyOwogCiAJaWYgKGh3ZWlnaHQzMihpbmZvLT5mbGFncyAmIChYVF9SQVRFRVNUX01BVENIX0FCUyB8CkBAIC0xMzAsNyArMTMwLDcgQEAKIHN0YXRpYyB2b2lkIHh0X3JhdGVlc3RfbXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCQkJCSAgdm9pZCAqbWF0Y2hpbmZvKQogewotCXN0cnVjdCB4dF9yYXRlZXN0X21hdGNoX2luZm8gKmluZm8gPSAodm9pZCAqKW1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfcmF0ZWVzdF9tYXRjaF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwogCiAJeHRfcmF0ZWVzdF9wdXQoaW5mby0+ZXN0MSk7CiAJaWYgKGluZm8tPmVzdDIpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jCmluZGV4IGI3MThlYzYuLmU2ZTQ2ODEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jCkBAIC00Niw3ICs0Niw4IEBACiAJICAgICBib29sICpob3Rkcm9wKQogewogCXVfaW50MzJfdCBjaHVua21hcGNvcHlbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsKLQlzY3RwX2NodW5raGRyX3QgX3NjaCwgKnNjaDsKKwljb25zdCBzY3RwX2NodW5raGRyX3QgKnNjaDsKKwlzY3RwX2NodW5raGRyX3QgX3NjaDsKIAlpbnQgY2h1bmtfbWF0Y2hfdHlwZSA9IGluZm8tPmNodW5rX21hdGNoX3R5cGU7CiAJY29uc3Qgc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvICpmbGFnX2luZm8gPSBpbmZvLT5mbGFnX2luZm87CiAJaW50IGZsYWdfY291bnQgPSBpbmZvLT5mbGFnX2NvdW50OwpAQCAtMTIxLDcgKzEyMiw4IEBACiAgICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHByb3RvZmYsIGJvb2wgKmhvdGRyb3ApCiB7CiAJY29uc3Qgc3RydWN0IHh0X3NjdHBfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKLQlzY3RwX3NjdHBoZHJfdCBfc2gsICpzaDsKKwljb25zdCBzY3RwX3NjdHBoZHJfdCAqc2g7CisJc2N0cF9zY3RwaGRyX3QgX3NoOwogCiAJaWYgKG9mZnNldCkgewogCQlkdXByaW50ZigiRHJvcHBpbmcgbm9uLWZpcnN0IGZyYWdtZW50Li4gRklYTUVcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuYyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMKaW5kZXggZDdhNWIyNy4uNjc3MWJmMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jCkBAIC0zMSw5ICszMSwxMSBAQAogICAgICAgICAgIGJvb2wgKmhvdGRyb3ApCiB7CiAJY29uc3Qgc3RydWN0IHh0X3RjcG1zc19tYXRjaF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwotCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKKwljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDsKKwlzdHJ1Y3QgdGNwaGRyIF90Y3BoOwogCS8qIHRjcC5kb2ZmIGlzIG9ubHkgNCBiaXRzLCBpZS4gbWF4IDE1ICogNCBieXRlcyAqLwotCXU4IF9vcHRbMTUgKiA0IC0gc2l6ZW9mKF90Y3BoKV0sICpvcDsKKwljb25zdCB1X2ludDhfdCAqb3A7CisJdTggX29wdFsxNSAqIDQgLSBzaXplb2YoX3RjcGgpXTsKIAl1bnNpZ25lZCBpbnQgaSwgb3B0bGVuOwogCiAJLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgd2hvbGUgaGVhZGVyLCBkcm9wIHBhY2tldC4gKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCmluZGV4IDRmYTNiNjYuLjk1MWIwNmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYwpAQCAtNDIsNyArNDIsOCBAQAogCQlib29sICpob3Rkcm9wKQogewogCS8qIHRjcC5kb2ZmIGlzIG9ubHkgNCBiaXRzLCBpZS4gbWF4IDE1ICogNCBieXRlcyAqLwotCXVfaW50OF90IF9vcHRbNjAgLSBzaXplb2Yoc3RydWN0IHRjcGhkcildLCAqb3A7CisJY29uc3QgdV9pbnQ4X3QgKm9wOworCXVfaW50OF90IF9vcHRbNjAgLSBzaXplb2Yoc3RydWN0IHRjcGhkcildOwogCXVuc2lnbmVkIGludCBpOwogCiAJZHVwcmludGYoInRjcF9tYXRjaDogZmluZGluZyBvcHRpb25cbiIpOwpAQCAtNzIsNyArNzMsOCBAQAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgYm9vbCAqaG90ZHJvcCkKIHsKLQlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CisJY29uc3Qgc3RydWN0IHRjcGhkciAqdGg7CisJc3RydWN0IHRjcGhkciBfdGNwaDsKIAljb25zdCBzdHJ1Y3QgeHRfdGNwICp0Y3BpbmZvID0gbWF0Y2hpbmZvOwogCiAJaWYgKG9mZnNldCkgewpAQCAtMTQ0LDcgKzE0Niw4IEBACiAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBwcm90b2ZmLCBib29sICpob3Rkcm9wKQogewotCXN0cnVjdCB1ZHBoZHIgX3VkcGgsICp1aDsKKwljb25zdCBzdHJ1Y3QgdWRwaGRyICp1aDsKKwlzdHJ1Y3QgdWRwaGRyIF91ZHBoOwogCWNvbnN0IHN0cnVjdCB4dF91ZHAgKnVkcGluZm8gPSBtYXRjaGluZm87CiAKIAkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF90aW1lLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RpbWUuYwppbmRleCBlOWE4Nzk0Li5lZDc2YmFhYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF90aW1lLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF90aW1lLmMKQEAgLTk1LDggKzk1LDExIEBACiAJICovCiAJci0+ZHNlID0gdGltZSAvIDg2NDAwOwogCi0JLyogMTk3MC0wMS0wMSAodz0wKSB3YXMgYSBUaHVyc2RheSAoNCkuICovCi0Jci0+d2Vla2RheSA9ICg0ICsgci0+ZHNlKSAlIDc7CisJLyoKKwkgKiAxOTcwLTAxLTAxICh3PTApIHdhcyBhIFRodXJzZGF5ICg0KS4KKwkgKiAtMSBhbmQgKzEgbWFwIFN1bmRheSBwcm9wZXJseSBvbnRvIDcuCisJICovCisJci0+d2Vla2RheSA9ICg0ICsgci0+ZHNlIC0gMSkgJSA3ICsgMTsKIH0KIAogc3RhdGljIHZvaWQgbG9jYWx0aW1lXzMoc3RydWN0IHh0bSAqciwgdGltZV90IHRpbWUpCkBAIC0yMjAsNyArMjIzLDcgQEAKICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCXN0cnVjdCB4dF90aW1lX2luZm8gKmluZm8gPSBtYXRjaGluZm87CisJY29uc3Qgc3RydWN0IHh0X3RpbWVfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAogCWlmIChpbmZvLT5kYXl0aW1lX3N0YXJ0ID4gWFRfVElNRV9NQVhfREFZVElNRSB8fAogCSAgICBpbmZvLT5kYXl0aW1lX3N0b3AgPiBYVF9USU1FX01BWF9EQVlUSU1FKSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3UzMi5jIGIvbmV0L25ldGZpbHRlci94dF91MzIuYwppbmRleCA5YjhlZDM5Li42MjdlMGYzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3UzMi5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdTMyLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAl1X2ludDMyX3QgcG9zOwogCXVfaW50MzJfdCB2YWw7CiAJdV9pbnQzMl90IGF0OwotCWludCByZXQ7CiAKIAkvKgogCSAqIFNtYWxsIGV4YW1wbGU6ICIwID4+IDI4ID09IDQgJiYgOCAmIDB4RkYwMDAwID4+IDE2ID0gNiwgMTciCkBAIC00MCw4ICszOSw4IEBACiAJCWlmIChza2ItPmxlbiA8IDQgfHwgcG9zID4gc2tiLT5sZW4gLSA0KQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCXJldCAgID0gc2tiX2NvcHlfYml0cyhza2IsIHBvcywgJm4sIHNpemVvZihuKSk7Ci0JCUJVR19PTihyZXQgPCAwKTsKKwkJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBwb3MsICZuLCBzaXplb2YobikpIDwgMCkKKwkJCUJVRygpOwogCQl2YWwgICA9IG50b2hsKG4pOwogCQlubnVtcyA9IGN0LT5ubnVtczsKIApAQCAtNjcsOSArNjYsOSBAQAogCQkJCSAgICBwb3MgPiBza2ItPmxlbiAtIGF0IC0gNCkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQkJcmV0ID0gc2tiX2NvcHlfYml0cyhza2IsIGF0ICsgcG9zLCAmbiwKLQkJCQkJCSAgICBzaXplb2YobikpOwotCQkJCUJVR19PTihyZXQgPCAwKTsKKwkJCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIGF0ICsgcG9zLCAmbiwKKwkJCQkJCSAgICBzaXplb2YobikpIDwgMCkKKwkJCQkJQlVHKCk7CiAJCQkJdmFsID0gbnRvaGwobik7CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCmluZGV4IGM3YWQ2NGQuLmZkYzE0YTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCkBAIC03MTgsMzYgKzcxOCwzNSBAQAogICogTmV0TGFiZWwgR2VuZXJpYyBORVRMSU5LIENvbW1hbmQgRGVmaW5pdGlvbnMKICAqLwogCi1zdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5ldGxibF9jaXBzb3Y0X2dlbmxfY19hZGQgPSB7CitzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5ldGxibF9jaXBzb3Y0X29wc1tdID0geworCXsKIAkuY21kID0gTkxCTF9DSVBTT1Y0X0NfQURELAogCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAkucG9saWN5ID0gbmV0bGJsX2NpcHNvdjRfZ2VubF9wb2xpY3ksCiAJLmRvaXQgPSBuZXRsYmxfY2lwc292NF9hZGQsCiAJLmR1bXBpdCA9IE5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5ldGxibF9jaXBzb3Y0X2dlbmxfY19yZW1vdmUgPSB7CisJfSwKKwl7CiAJLmNtZCA9IE5MQkxfQ0lQU09WNF9DX1JFTU9WRSwKIAkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJLnBvbGljeSA9IG5ldGxibF9jaXBzb3Y0X2dlbmxfcG9saWN5LAogCS5kb2l0ID0gbmV0bGJsX2NpcHNvdjRfcmVtb3ZlLAogCS5kdW1waXQgPSBOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBnZW5sX29wcyBuZXRsYmxfY2lwc292NF9nZW5sX2NfbGlzdCA9IHsKKwl9LAorCXsKIAkuY21kID0gTkxCTF9DSVBTT1Y0X0NfTElTVCwKIAkuZmxhZ3MgPSAwLAogCS5wb2xpY3kgPSBuZXRsYmxfY2lwc292NF9nZW5sX3BvbGljeSwKIAkuZG9pdCA9IG5ldGxibF9jaXBzb3Y0X2xpc3QsCiAJLmR1bXBpdCA9IE5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5ldGxibF9jaXBzb3Y0X2dlbmxfY19saXN0YWxsID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX0NJUFNPVjRfQ19MSVNUQUxMLAogCS5mbGFncyA9IDAsCiAJLnBvbGljeSA9IG5ldGxibF9jaXBzb3Y0X2dlbmxfcG9saWN5LAogCS5kb2l0ID0gTlVMTCwKIAkuZHVtcGl0ID0gbmV0bGJsX2NpcHNvdjRfbGlzdGFsbCwKKwl9LAogfTsKIAogLyoKQEAgLTc2MiwzMCArNzYxLDIwIEBACiAgKiBtZWNoYW5pc20uICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi1pbnQgbmV0bGJsX2NpcHNvdjRfZ2VubF9pbml0KHZvaWQpCitpbnQgX19pbml0IG5ldGxibF9jaXBzb3Y0X2dlbmxfaW5pdCh2b2lkKQogewotCWludCByZXRfdmFsOworCWludCByZXRfdmFsLCBpOwogCiAJcmV0X3ZhbCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZuZXRsYmxfY2lwc292NF9nbmxfZmFtaWx5KTsKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX2NpcHNvdjRfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF9jaXBzb3Y0X2dlbmxfY19hZGQpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCXJldHVybiByZXRfdmFsOwotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX2NpcHNvdjRfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF9jaXBzb3Y0X2dlbmxfY19yZW1vdmUpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCXJldHVybiByZXRfdmFsOwotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX2NpcHNvdjRfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF9jaXBzb3Y0X2dlbmxfY19saXN0KTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF9jaXBzb3Y0X2dubF9mYW1pbHksCi0JCQkJICAgICZuZXRsYmxfY2lwc292NF9nZW5sX2NfbGlzdGFsbCk7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmV0bGJsX2NpcHNvdjRfb3BzKTsgaSsrKSB7CisJCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX2NpcHNvdjRfZ25sX2ZhbWlseSwKKwkJCQkmbmV0bGJsX2NpcHNvdjRfb3BzW2ldKTsKKwkJaWYgKHJldF92YWwgIT0gMCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKaW5kZXggZmQ0NjIzMS4uMDJjMmY3YyAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCkBAIC0xNzEsNyArMTcxLDcgQEAKICAqIHZhbHVlcyBvbiBlcnJvci4KICAqCiAgKi8KLWludCBuZXRsYmxfZG9taHNoX2luaXQodTMyIHNpemUpCitpbnQgX19pbml0IG5ldGxibF9kb21oc2hfaW5pdCh1MzIgc2l6ZSkKIHsKIAl1MzIgaXRlcjsKIAlzdHJ1Y3QgbmV0bGJsX2RvbWhzaF90YmwgKmhzaF90Ymw7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYwppbmRleCBlMjI1OGRjLi4yMmMxOTEyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKQEAgLTUxNyw2OCArNTE3LDYzIEBACiAgKiBOZXRMYWJlbCBHZW5lcmljIE5FVExJTksgQ29tbWFuZCBEZWZpbml0aW9ucwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX21nbXRfZ2VubF9jX2FkZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX21nbXRfZ2VubF9vcHNbXSA9IHsKKwl7CiAJLmNtZCA9IE5MQkxfTUdNVF9DX0FERCwKIAkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJLnBvbGljeSA9IG5ldGxibF9tZ210X2dlbmxfcG9saWN5LAogCS5kb2l0ID0gbmV0bGJsX21nbXRfYWRkLAogCS5kdW1waXQgPSBOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBnZW5sX29wcyBuZXRsYmxfbWdtdF9nZW5sX2NfcmVtb3ZlID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX01HTVRfQ19SRU1PVkUsCiAJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCS5wb2xpY3kgPSBuZXRsYmxfbWdtdF9nZW5sX3BvbGljeSwKIAkuZG9pdCA9IG5ldGxibF9tZ210X3JlbW92ZSwKIAkuZHVtcGl0ID0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX21nbXRfZ2VubF9jX2xpc3RhbGwgPSB7CisJfSwKKwl7CiAJLmNtZCA9IE5MQkxfTUdNVF9DX0xJU1RBTEwsCiAJLmZsYWdzID0gMCwKIAkucG9saWN5ID0gbmV0bGJsX21nbXRfZ2VubF9wb2xpY3ksCiAJLmRvaXQgPSBOVUxMLAogCS5kdW1waXQgPSBuZXRsYmxfbWdtdF9saXN0YWxsLAotfTsKLQotc3RhdGljIHN0cnVjdCBnZW5sX29wcyBuZXRsYmxfbWdtdF9nZW5sX2NfYWRkZGVmID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX01HTVRfQ19BRERERUYsCiAJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCS5wb2xpY3kgPSBuZXRsYmxfbWdtdF9nZW5sX3BvbGljeSwKIAkuZG9pdCA9IG5ldGxibF9tZ210X2FkZGRlZiwKIAkuZHVtcGl0ID0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX21nbXRfZ2VubF9jX3JlbW92ZWRlZiA9IHsKKwl9LAorCXsKIAkuY21kID0gTkxCTF9NR01UX0NfUkVNT1ZFREVGLAogCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAkucG9saWN5ID0gbmV0bGJsX21nbXRfZ2VubF9wb2xpY3ksCiAJLmRvaXQgPSBuZXRsYmxfbWdtdF9yZW1vdmVkZWYsCiAJLmR1bXBpdCA9IE5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5ldGxibF9tZ210X2dlbmxfY19saXN0ZGVmID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX01HTVRfQ19MSVNUREVGLAogCS5mbGFncyA9IDAsCiAJLnBvbGljeSA9IG5ldGxibF9tZ210X2dlbmxfcG9saWN5LAogCS5kb2l0ID0gbmV0bGJsX21nbXRfbGlzdGRlZiwKIAkuZHVtcGl0ID0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX21nbXRfZ2VubF9jX3Byb3RvY29scyA9IHsKKwl9LAorCXsKIAkuY21kID0gTkxCTF9NR01UX0NfUFJPVE9DT0xTLAogCS5mbGFncyA9IDAsCiAJLnBvbGljeSA9IG5ldGxibF9tZ210X2dlbmxfcG9saWN5LAogCS5kb2l0ID0gTlVMTCwKIAkuZHVtcGl0ID0gbmV0bGJsX21nbXRfcHJvdG9jb2xzLAotfTsKLQotc3RhdGljIHN0cnVjdCBnZW5sX29wcyBuZXRsYmxfbWdtdF9nZW5sX2NfdmVyc2lvbiA9IHsKKwl9LAorCXsKIAkuY21kID0gTkxCTF9NR01UX0NfVkVSU0lPTiwKIAkuZmxhZ3MgPSAwLAogCS5wb2xpY3kgPSBuZXRsYmxfbWdtdF9nZW5sX3BvbGljeSwKIAkuZG9pdCA9IG5ldGxibF9tZ210X3ZlcnNpb24sCiAJLmR1bXBpdCA9IE5VTEwsCisJfSwKIH07CiAKIC8qCkBAIC01OTMsNDYgKzU4OCwyMCBAQAogICogbWVjaGFuaXNtLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgogICoKICAqLwotaW50IG5ldGxibF9tZ210X2dlbmxfaW5pdCh2b2lkKQoraW50IF9faW5pdCBuZXRsYmxfbWdtdF9nZW5sX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0X3ZhbDsKKwlpbnQgcmV0X3ZhbCwgaTsKIAogCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmbmV0bGJsX21nbXRfZ25sX2ZhbWlseSk7CiAJaWYgKHJldF92YWwgIT0gMCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF9tZ210X2dubF9mYW1pbHksCi0JCQkJICAgICZuZXRsYmxfbWdtdF9nZW5sX2NfYWRkKTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF9tZ210X2dubF9mYW1pbHksCi0JCQkJICAgICZuZXRsYmxfbWdtdF9nZW5sX2NfcmVtb3ZlKTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF9tZ210X2dubF9mYW1pbHksCi0JCQkJICAgICZuZXRsYmxfbWdtdF9nZW5sX2NfbGlzdGFsbCk7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7Ci0JcmV0X3ZhbCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRsYmxfbWdtdF9nbmxfZmFtaWx5LAotCQkJCSAgICAmbmV0bGJsX21nbXRfZ2VubF9jX2FkZGRlZik7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7Ci0JcmV0X3ZhbCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRsYmxfbWdtdF9nbmxfZmFtaWx5LAotCQkJCSAgICAmbmV0bGJsX21nbXRfZ2VubF9jX3JlbW92ZWRlZik7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7Ci0JcmV0X3ZhbCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRsYmxfbWdtdF9nbmxfZmFtaWx5LAotCQkJCSAgICAmbmV0bGJsX21nbXRfZ2VubF9jX2xpc3RkZWYpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCXJldHVybiByZXRfdmFsOwotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX21nbXRfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF9tZ210X2dlbmxfY19wcm90b2NvbHMpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCXJldHVybiByZXRfdmFsOwotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX21nbXRfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF9tZ210X2dlbmxfY192ZXJzaW9uKTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuZXRsYmxfbWdtdF9nZW5sX29wcyk7IGkrKykgeworCQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF9tZ210X2dubF9mYW1pbHksCisJCQkJJm5ldGxibF9tZ210X2dlbmxfb3BzW2ldKTsKKwkJaWYgKHJldF92YWwgIT0gMCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCmluZGV4IDNlNzQ1YjcuLmQyODJhZDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKQEAgLTk1NCw3ICs5NTQsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAJc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgKmlmYWNlID0gTlVMTDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCS8qIFhYWCAtIHNob3VsZCB0aGlzIGJlIGEgY2hlY2sgZm9yIE5FVERFVl9ET1dOIG9yIF9VTlJFR0lTVEVSPyAqLwpAQCAtMTMzOSw2ICsxMzM5LDEwIEBACiAKIAlpZiAoaWZhY2UtPmlmaW5kZXggPiAwKSB7CiAJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmFjZS0+aWZpbmRleCk7CisJCWlmICghZGV2KSB7CisJCQlyZXRfdmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gbGlzdF9jYl9mYWlsdXJlOworCQl9CiAJCXJldF92YWwgPSBubGFfcHV0X3N0cmluZyhjYl9hcmctPnNrYiwKIAkJCQkJIE5MQkxfVU5MQUJFTF9BX0lGQUNFLCBkZXYtPm5hbWUpOwogCQlkZXZfcHV0KGRldik7CkBAIC0xNTUzLDY4ICsxNTU3LDYzIEBACiAgKiBOZXRMYWJlbCBHZW5lcmljIE5FVExJTksgQ29tbWFuZCBEZWZpbml0aW9ucwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX3VubGFiZWxfZ2VubF9jX3N0YXRpY2FkZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX3VubGFiZWxfZ2VubF9vcHNbXSA9IHsKKwl7CiAJLmNtZCA9IE5MQkxfVU5MQUJFTF9DX1NUQVRJQ0FERCwKIAkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJLnBvbGljeSA9IG5ldGxibF91bmxhYmVsX2dlbmxfcG9saWN5LAogCS5kb2l0ID0gbmV0bGJsX3VubGFiZWxfc3RhdGljYWRkLAogCS5kdW1waXQgPSBOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBnZW5sX29wcyBuZXRsYmxfdW5sYWJlbF9nZW5sX2Nfc3RhdGljcmVtb3ZlID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX1VOTEFCRUxfQ19TVEFUSUNSRU1PVkUsCiAJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCS5wb2xpY3kgPSBuZXRsYmxfdW5sYWJlbF9nZW5sX3BvbGljeSwKIAkuZG9pdCA9IG5ldGxibF91bmxhYmVsX3N0YXRpY3JlbW92ZSwKIAkuZHVtcGl0ID0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX3VubGFiZWxfZ2VubF9jX3N0YXRpY2xpc3QgPSB7CisJfSwKKwl7CiAJLmNtZCA9IE5MQkxfVU5MQUJFTF9DX1NUQVRJQ0xJU1QsCiAJLmZsYWdzID0gMCwKIAkucG9saWN5ID0gbmV0bGJsX3VubGFiZWxfZ2VubF9wb2xpY3ksCiAJLmRvaXQgPSBOVUxMLAogCS5kdW1waXQgPSBuZXRsYmxfdW5sYWJlbF9zdGF0aWNsaXN0LAotfTsKLQotc3RhdGljIHN0cnVjdCBnZW5sX29wcyBuZXRsYmxfdW5sYWJlbF9nZW5sX2Nfc3RhdGljYWRkZGVmID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX1VOTEFCRUxfQ19TVEFUSUNBRERERUYsCiAJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCS5wb2xpY3kgPSBuZXRsYmxfdW5sYWJlbF9nZW5sX3BvbGljeSwKIAkuZG9pdCA9IG5ldGxibF91bmxhYmVsX3N0YXRpY2FkZGRlZiwKIAkuZHVtcGl0ID0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX3VubGFiZWxfZ2VubF9jX3N0YXRpY3JlbW92ZWRlZiA9IHsKKwl9LAorCXsKIAkuY21kID0gTkxCTF9VTkxBQkVMX0NfU1RBVElDUkVNT1ZFREVGLAogCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAkucG9saWN5ID0gbmV0bGJsX3VubGFiZWxfZ2VubF9wb2xpY3ksCiAJLmRvaXQgPSBuZXRsYmxfdW5sYWJlbF9zdGF0aWNyZW1vdmVkZWYsCiAJLmR1bXBpdCA9IE5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5ldGxibF91bmxhYmVsX2dlbmxfY19zdGF0aWNsaXN0ZGVmID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX1VOTEFCRUxfQ19TVEFUSUNMSVNUREVGLAogCS5mbGFncyA9IDAsCiAJLnBvbGljeSA9IG5ldGxibF91bmxhYmVsX2dlbmxfcG9saWN5LAogCS5kb2l0ID0gTlVMTCwKIAkuZHVtcGl0ID0gbmV0bGJsX3VubGFiZWxfc3RhdGljbGlzdGRlZiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmV0bGJsX3VubGFiZWxfZ2VubF9jX2FjY2VwdCA9IHsKKwl9LAorCXsKIAkuY21kID0gTkxCTF9VTkxBQkVMX0NfQUNDRVBULAogCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAkucG9saWN5ID0gbmV0bGJsX3VubGFiZWxfZ2VubF9wb2xpY3ksCiAJLmRvaXQgPSBuZXRsYmxfdW5sYWJlbF9hY2NlcHQsCiAJLmR1bXBpdCA9IE5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5ldGxibF91bmxhYmVsX2dlbmxfY19saXN0ID0geworCX0sCisJewogCS5jbWQgPSBOTEJMX1VOTEFCRUxfQ19MSVNULAogCS5mbGFncyA9IDAsCiAJLnBvbGljeSA9IG5ldGxibF91bmxhYmVsX2dlbmxfcG9saWN5LAogCS5kb2l0ID0gbmV0bGJsX3VubGFiZWxfbGlzdCwKIAkuZHVtcGl0ID0gTlVMTCwKKwl9LAogfTsKIAogLyoKQEAgLTE2MjksNTMgKzE2MjgsMjAgQEAKICAqIG1lY2hhbmlzbS4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBuZXRsYmxfdW5sYWJlbF9nZW5sX2luaXQodm9pZCkKK2ludCBfX2luaXQgbmV0bGJsX3VubGFiZWxfZ2VubF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldF92YWw7CisJaW50IHJldF92YWwsIGk7CiAKIAlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJm5ldGxibF91bmxhYmVsX2dubF9mYW1pbHkpOwogCWlmIChyZXRfdmFsICE9IDApCiAJCXJldHVybiByZXRfdmFsOwogCi0JcmV0X3ZhbCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRsYmxfdW5sYWJlbF9nbmxfZmFtaWx5LAotCQkJCSAgICAmbmV0bGJsX3VubGFiZWxfZ2VubF9jX3N0YXRpY2FkZCk7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF91bmxhYmVsX2dubF9mYW1pbHksCi0JCQkJICAgICZuZXRsYmxfdW5sYWJlbF9nZW5sX2Nfc3RhdGljcmVtb3ZlKTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX3VubGFiZWxfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF91bmxhYmVsX2dlbmxfY19zdGF0aWNsaXN0KTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX3VubGFiZWxfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF91bmxhYmVsX2dlbmxfY19zdGF0aWNhZGRkZWYpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCXJldHVybiByZXRfdmFsOwotCi0JcmV0X3ZhbCA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZuZXRsYmxfdW5sYWJlbF9nbmxfZmFtaWx5LAotCQkJCSAgICAmbmV0bGJsX3VubGFiZWxfZ2VubF9jX3N0YXRpY3JlbW92ZWRlZik7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF91bmxhYmVsX2dubF9mYW1pbHksCi0JCQkJICAgICZuZXRsYmxfdW5sYWJlbF9nZW5sX2Nfc3RhdGljbGlzdGRlZik7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF91bmxhYmVsX2dubF9mYW1pbHksCi0JCQkJICAgICZuZXRsYmxfdW5sYWJlbF9nZW5sX2NfYWNjZXB0KTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQotCXJldF92YWwgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0bGJsX3VubGFiZWxfZ25sX2ZhbWlseSwKLQkJCQkgICAgJm5ldGxibF91bmxhYmVsX2dlbmxfY19saXN0KTsKLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuZXRsYmxfdW5sYWJlbF9nZW5sX29wcyk7IGkrKykgeworCQlyZXRfdmFsID0gZ2VubF9yZWdpc3Rlcl9vcHMoJm5ldGxibF91bmxhYmVsX2dubF9mYW1pbHksCisJCQkJJm5ldGxibF91bmxhYmVsX2dlbmxfb3BzW2ldKTsKKwkJaWYgKHJldF92YWwgIT0gMCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTY5OSw3ICsxNjY1LDcgQEAKICAqIG5vbi16ZXJvIHZhbHVlcyBvbiBlcnJvci4KICAqCiAgKi8KLWludCBuZXRsYmxfdW5sYWJlbF9pbml0KHUzMiBzaXplKQoraW50IF9faW5pdCBuZXRsYmxfdW5sYWJlbF9pbml0KHUzMiBzaXplKQogewogCXUzMiBpdGVyOwogCXN0cnVjdCBuZXRsYmxfdW5saHNoX3RibCAqaHNoX3RibDsKQEAgLTE4MDMsNyArMTc2OSw3IEBACiAgKiBhbmQgdG8gc2VuZCB1bmxhYmVsZWQgbmV0d29yayB0cmFmZmljIGJ5IGRlZmF1bHQuCiAgKgogICovCi1pbnQgbmV0bGJsX3VubGFiZWxfZGVmY29uZih2b2lkKQoraW50IF9faW5pdCBuZXRsYmxfdW5sYWJlbF9kZWZjb25mKHZvaWQpCiB7CiAJaW50IHJldF92YWw7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jCmluZGV4IDAyM2ZjOGYuLmIxN2Q0MjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuYwpAQCAtNTksNyArNTksNyBAQAogICogbm9uLXplcm8gb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBuZXRsYmxfbmV0bGlua19pbml0KHZvaWQpCitpbnQgX19pbml0IG5ldGxibF9uZXRsaW5rX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0X3ZhbDsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDFhYjBkYTIuLjQ2ZjNlNDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CkBAIC0yMjgsNyArMjI3LDcgQEAKIAlyZWFkX2xvY2soJm5sX3RhYmxlX2xvY2spOwogCWhlYWQgPSBubF9waWRfaGFzaGZuKGhhc2gsIHBpZCk7CiAJc2tfZm9yX2VhY2goc2ssIG5vZGUsIGhlYWQpIHsKLQkJaWYgKChzay0+c2tfbmV0ID09IG5ldCkgJiYgKG5sa19zayhzayktPnBpZCA9PSBwaWQpKSB7CisJCWlmIChuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpICYmIChubGtfc2soc2spLT5waWQgPT0gcGlkKSkgewogCQkJc29ja19ob2xkKHNrKTsKIAkJCWdvdG8gZm91bmQ7CiAJCX0KQEAgLTM0OCw3ICszNDcsNyBAQAogCWhlYWQgPSBubF9waWRfaGFzaGZuKGhhc2gsIHBpZCk7CiAJbGVuID0gMDsKIAlza19mb3JfZWFjaChvc2ssIG5vZGUsIGhlYWQpIHsKLQkJaWYgKChvc2stPnNrX25ldCA9PSBuZXQpICYmIChubGtfc2sob3NrKS0+cGlkID09IHBpZCkpCisJCWlmIChuZXRfZXEoc29ja19uZXQob3NrKSwgbmV0KSAmJiAobmxrX3NrKG9zayktPnBpZCA9PSBwaWQpKQogCQkJYnJlYWs7CiAJCWxlbisrOwogCX0KQEAgLTQ4Niw3ICs0ODUsNyBAQAogCiAJaWYgKG5say0+cGlkICYmICFubGstPnN1YnNjcmlwdGlvbnMpIHsKIAkJc3RydWN0IG5ldGxpbmtfbm90aWZ5IG4gPSB7Ci0JCQkJCQkubmV0ID0gc2stPnNrX25ldCwKKwkJCQkJCS5uZXQgPSBzb2NrX25ldChzayksCiAJCQkJCQkucHJvdG9jb2wgPSBzay0+c2tfcHJvdG9jb2wsCiAJCQkJCQkucGlkID0gbmxrLT5waWQsCiAJCQkJCSAgfTsKQEAgLTUxOCw3ICs1MTcsNyBAQAogc3RhdGljIGludCBuZXRsaW5rX2F1dG9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IG5sX3BpZF9oYXNoICpoYXNoID0gJm5sX3RhYmxlW3NrLT5za19wcm90b2NvbF0uaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3Qgc29jayAqb3NrOwpAQCAtNTMyLDcgKzUzMSw3IEBACiAJbmV0bGlua190YWJsZV9ncmFiKCk7CiAJaGVhZCA9IG5sX3BpZF9oYXNoZm4oaGFzaCwgcGlkKTsKIAlza19mb3JfZWFjaChvc2ssIG5vZGUsIGhlYWQpIHsKLQkJaWYgKChvc2stPnNrX25ldCAhPSBuZXQpKQorCQlpZiAoIW5ldF9lcShzb2NrX25ldChvc2spLCBuZXQpKQogCQkJY29udGludWU7CiAJCWlmIChubGtfc2sob3NrKS0+cGlkID09IHBpZCkgewogCQkJLyogQmluZCBjb2xsaXNpb24sIHNlYXJjaCBuZWdhdGl2ZSBwaWQgdmFsdWVzLiAqLwpAQCAtNjExLDcgKzYxMCw3IEBACiAJCQlpbnQgYWRkcl9sZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHNrKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfbmwgKm5sYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfbmwgKilhZGRyOwogCWludCBlcnI7CkBAIC03MjAsNyArNzE5LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc29jazsKIAlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGs7CiAKLQlzb2NrID0gbmV0bGlua19sb29rdXAoc3NrLT5za19uZXQsIHNzay0+c2tfcHJvdG9jb2wsIHBpZCk7CisJc29jayA9IG5ldGxpbmtfbG9va3VwKHNvY2tfbmV0KHNzayksIHNzay0+c2tfcHJvdG9jb2wsIHBpZCk7CiAJaWYgKCFzb2NrKQogCQlyZXR1cm4gRVJSX1BUUigtRUNPTk5SRUZVU0VEKTsKIApAQCAtODg2LDYgKzg4NSwxMyBAQAogCWlmIChuZXRsaW5rX2lzX2tlcm5lbChzaykpCiAJCXJldHVybiBuZXRsaW5rX3VuaWNhc3Rfa2VybmVsKHNrLCBza2IpOwogCisJaWYgKHNrX2ZpbHRlcihzaywgc2tiKSkgeworCQlpbnQgZXJyID0gc2tiLT5sZW47CisJCWtmcmVlX3NrYihza2IpOworCQlzb2NrX3B1dChzayk7CisJCXJldHVybiBlcnI7CisJfQorCiAJZXJyID0gbmV0bGlua19hdHRhY2hza2Ioc2ssIHNrYiwgbm9uYmxvY2ssICZ0aW1lbywgc3NrKTsKIAlpZiAoZXJyID09IDEpCiAJCWdvdG8gcmV0cnk7CkBAIC05NTUsNyArOTYxLDcgQEAKIAkgICAgIXRlc3RfYml0KHAtPmdyb3VwIC0gMSwgbmxrLT5ncm91cHMpKQogCQlnb3RvIG91dDsKIAotCWlmICgoc2stPnNrX25ldCAhPSBwLT5uZXQpKQorCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgcC0+bmV0KSkKIAkJZ290byBvdXQ7CiAKIAlpZiAocC0+ZmFpbHVyZSkgewpAQCAtOTgwLDYgKzk4Niw5IEBACiAJCW5ldGxpbmtfb3ZlcnJ1bihzayk7CiAJCS8qIENsb25lIGZhaWxlZC4gTm90aWZ5IEFMTCBsaXN0ZW5lcnMuICovCiAJCXAtPmZhaWx1cmUgPSAxOworCX0gZWxzZSBpZiAoc2tfZmlsdGVyKHNrLCBwLT5za2IyKSkgeworCQlrZnJlZV9za2IocC0+c2tiMik7CisJCXAtPnNrYjIgPSBOVUxMOwogCX0gZWxzZSBpZiAoKHZhbCA9IG5ldGxpbmtfYnJvYWRjYXN0X2RlbGl2ZXIoc2ssIHAtPnNrYjIpKSA8IDApIHsKIAkJbmV0bGlua19vdmVycnVuKHNrKTsKIAl9IGVsc2UgewpAQCAtOTk2LDcgKzEwMDUsNyBAQAogaW50IG5ldGxpbmtfYnJvYWRjYXN0KHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsCiAJCSAgICAgIHUzMiBncm91cCwgZ2ZwX3QgYWxsb2NhdGlvbikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzc2spOwogCXN0cnVjdCBuZXRsaW5rX2Jyb2FkY2FzdF9kYXRhIGluZm87CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IHNvY2sgKnNrOwpAQCAtMTA1NCw3ICsxMDYzLDcgQEAKIAlpZiAoc2sgPT0gcC0+ZXhjbHVkZV9zaykKIAkJZ290byBvdXQ7CiAKLQlpZiAoc2stPnNrX25ldCAhPSBwLT5leGNsdWRlX3NrLT5za19uZXQpCisJaWYgKHNvY2tfbmV0KHNrKSAhPSBzb2NrX25ldChwLT5leGNsdWRlX3NrKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAobmxrLT5waWQgPT0gcC0+cGlkIHx8IHAtPmdyb3VwIC0gMSA+PSBubGstPm5ncm91cHMgfHwKQEAgLTEyMzksNyArMTI0OCw3IEBACiAJTkVUTElOS19DQihza2IpLnBpZAk9IG5say0+cGlkOwogCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXAgPSBkc3RfZ3JvdXA7CiAJTkVUTElOS19DQihza2IpLmxvZ2ludWlkID0gYXVkaXRfZ2V0X2xvZ2ludWlkKGN1cnJlbnQpOwotCXNlbGludXhfZ2V0X3Rhc2tfc2lkKGN1cnJlbnQsICYoTkVUTElOS19DQihza2IpLnNpZCkpOworCXNlY3VyaXR5X3Rhc2tfZ2V0c2VjaWQoY3VycmVudCwgJihORVRMSU5LX0NCKHNrYikuc2lkKSk7CiAJbWVtY3B5KE5FVExJTktfQ1JFRFMoc2tiKSwgJnNpb2NiLT5zY20tPmNyZWRzLCBzaXplb2Yoc3RydWN0IHVjcmVkKSk7CiAKIAkvKiBXaGF0IGNhbiBJIGRvPyBOZXRsaW5rIGlzIGFzeW5jaHJvbm91cywgc28gdGhhdApAQCAtMTM0NCwyMiArMTM1Myw2IEBACiAgKglxdWV1ZWluZy4KICAqLwogCi1zdGF0aWMgdm9pZCBfX25ldGxpbmtfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spCi17Ci0JLyoKLQkgKiBMYXN0IHNvY2tfcHV0IHNob3VsZCBkcm9wIHJlZmVycmVuY2UgdG8gc2stPnNrX25ldC4gSXQgaGFzIGFscmVhZHkKLQkgKiBiZWVuIGRyb3BwZWQgaW4gbmV0bGlua19rZXJuZWxfY3JlYXRlLiBUYWtpbmcgcmVmZXJyZW5jZSB0byBzdG9wcGluZwotCSAqIG5hbWVzcGFjZSBpcyBub3QgYW4gb3B0aW9uLgotCSAqIFRha2UgcmVmZXJyZW5jZSB0byBhIHNvY2tldCB0byByZW1vdmUgaXQgZnJvbSBuZXRsaW5rIGxvb2t1cCB0YWJsZQotCSAqIF9hbGl2ZV8gYW5kIGFmdGVyIHRoYXQgZGVzdHJveSBpdCBpbiB0aGUgY29udGV4dCBvZiBpbml0X25ldC4KLQkgKi8KLQotCXNvY2tfaG9sZChzayk7Ci0Jc29ja19yZWxlYXNlKHNrLT5za19zb2NrZXQpOwotCXNrLT5za19uZXQgPSBnZXRfbmV0KCZpbml0X25ldCk7Ci0Jc29ja19wdXQoc2spOwotfQotCiBzdHJ1Y3Qgc29jayAqCiBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdW5pdCwgdW5zaWduZWQgaW50IGdyb3VwcywKIAkJICAgICAgdm9pZCAoKmlucHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKQEAgLTEzODgsOCArMTM4MSw3IEBACiAJCWdvdG8gb3V0X3NvY2tfcmVsZWFzZV9ub3NrOwogCiAJc2sgPSBzb2NrLT5zazsKLQlwdXRfbmV0KHNrLT5za19uZXQpOwotCXNrLT5za19uZXQgPSBuZXQ7CisJc2tfY2hhbmdlX25ldChzaywgbmV0KTsKIAogCWlmIChncm91cHMgPCAzMikKIAkJZ3JvdXBzID0gMzI7CkBAIC0xNDI0LDcgKzE0MTYsNyBAQAogCiBvdXRfc29ja19yZWxlYXNlOgogCWtmcmVlKGxpc3RlbmVycyk7Ci0JX19uZXRsaW5rX3JlbGVhc2Uoc2spOworCW5ldGxpbmtfa2VybmVsX3JlbGVhc2Uoc2spOwogCXJldHVybiBOVUxMOwogCiBvdXRfc29ja19yZWxlYXNlX25vc2s6CkBAIC0xNDM3LDEwICsxNDI5LDcgQEAKIHZvaWQKIG5ldGxpbmtfa2VybmVsX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKQogewotCWlmIChzayA9PSBOVUxMIHx8IHNrLT5za19zb2NrZXQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JX19uZXRsaW5rX3JlbGVhc2Uoc2spOworCXNrX3JlbGVhc2Vfa2VybmVsKHNrKTsKIH0KIEVYUE9SVF9TWU1CT0wobmV0bGlua19rZXJuZWxfcmVsZWFzZSk7CiAKQEAgLTE1NTMsOCArMTU0MiwxMyBAQAogCiAJaWYgKGxlbiA+IDApIHsKIAkJbXV0ZXhfdW5sb2NrKG5say0+Y2JfbXV0ZXgpOwotCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7Ci0JCXNrLT5za19kYXRhX3JlYWR5KHNrLCBsZW4pOworCisJCWlmIChza19maWx0ZXIoc2ssIHNrYikpCisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJZWxzZSB7CisJCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CisJCQlzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOworCQl9CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTU2NCw4ICsxNTU4LDEyIEBACiAKIAltZW1jcHkobmxtc2dfZGF0YShubGgpLCAmbGVuLCBzaXplb2YobGVuKSk7CiAKLQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7Ci0Jc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKKwlpZiAoc2tfZmlsdGVyKHNrLCBza2IpKQorCQlrZnJlZV9za2Ioc2tiKTsKKwllbHNlIHsKKwkJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOworCQlzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOworCX0KIAogCWlmIChjYi0+ZG9uZSkKIAkJY2ItPmRvbmUoY2IpOwpAQCAtMTYwMiw3ICsxNjAwLDcgQEAKIAlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKIAljYi0+c2tiID0gc2tiOwogCi0Jc2sgPSBuZXRsaW5rX2xvb2t1cChzc2stPnNrX25ldCwgc3NrLT5za19wcm90b2NvbCwgTkVUTElOS19DQihza2IpLnBpZCk7CisJc2sgPSBuZXRsaW5rX2xvb2t1cChzb2NrX25ldChzc2spLCBzc2stPnNrX3Byb3RvY29sLCBORVRMSU5LX0NCKHNrYikucGlkKTsKIAlpZiAoc2sgPT0gTlVMTCkgewogCQluZXRsaW5rX2Rlc3Ryb3lfY2FsbGJhY2soY2IpOwogCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKQEAgLTE2NDQsNyArMTY0Miw3IEBACiAJaWYgKCFza2IpIHsKIAkJc3RydWN0IHNvY2sgKnNrOwogCi0JCXNrID0gbmV0bGlua19sb29rdXAoaW5fc2tiLT5zay0+c2tfbmV0LAorCQlzayA9IG5ldGxpbmtfbG9va3VwKHNvY2tfbmV0KGluX3NrYi0+c2spLAogCQkJCSAgICBpbl9za2ItPnNrLT5za19wcm90b2NvbCwKIAkJCQkgICAgTkVUTElOS19DQihpbl9za2IpLnBpZCk7CiAJCWlmIChzaykgewpAQCAtMTc1OSw3ICsxNzU3LDcgQEAKIAogCQlmb3IgKGogPSAwOyBqIDw9IGhhc2gtPm1hc2s7IGorKykgewogCQkJc2tfZm9yX2VhY2gocywgbm9kZSwgJmhhc2gtPnRhYmxlW2pdKSB7Ci0JCQkJaWYgKGl0ZXItPnAubmV0ICE9IHMtPnNrX25ldCkKKwkJCQlpZiAoc29ja19uZXQocykgIT0gc2VxX2ZpbGVfbmV0KHNlcSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChvZmYgPT0gcG9zKSB7CiAJCQkJCWl0ZXItPmxpbmsgPSBpOwpAQCAtMTc5NSw3ICsxNzkzLDcgQEAKIAlzID0gdjsKIAlkbyB7CiAJCXMgPSBza19uZXh0KHMpOwotCX0gd2hpbGUgKHMgJiYgKGl0ZXItPnAubmV0ICE9IHMtPnNrX25ldCkpOworCX0gd2hpbGUgKHMgJiYgc29ja19uZXQocykgIT0gc2VxX2ZpbGVfbmV0KHNlcSkpOwogCWlmIChzKQogCQlyZXR1cm4gczsKIApAQCAtMTgwNyw3ICsxODA1LDcgQEAKIAogCQlmb3IgKDsgaiA8PSBoYXNoLT5tYXNrOyBqKyspIHsKIAkJCXMgPSBza19oZWFkKCZoYXNoLT50YWJsZVtqXSk7Ci0JCQl3aGlsZSAocyAmJiAoaXRlci0+cC5uZXQgIT0gcy0+c2tfbmV0KSkKKwkJCXdoaWxlIChzICYmIHNvY2tfbmV0KHMpICE9IHNlcV9maWxlX25ldChzZXEpKQogCQkJCXMgPSBza19uZXh0KHMpOwogCQkJaWYgKHMpIHsKIAkJCQlpdGVyLT5saW5rID0gaTsKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCmluZGV4IDk3MjI1MGM5Li40YmFlOGI5IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX0RPV04pCkBAIC00NjYsNyArNDY2LDcgQEAKIAlpZiAob3NrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUKQogCQlyZXR1cm4gTlVMTDsKIAotCXNrID0gc2tfYWxsb2Mob3NrLT5za19uZXQsIFBGX05FVFJPTSwgR0ZQX0FUT01JQywgb3NrLT5za19wcm90KTsKKwlzayA9IHNrX2FsbG9jKHNvY2tfbmV0KG9zayksIFBGX05FVFJPTSwgR0ZQX0FUT01JQywgb3NrLT5za19wcm90KTsKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGI4YjgyN2MuLjI1MDcwMjQgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0xPT1BCQUNLKQogCQlnb3RvIG91dDsKIAotCWlmIChkZXYtPm5kX25ldCAhPSBzay0+c2tfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gc29ja19uZXQoc2spKQogCQlnb3RvIG91dDsKIAogCWlmICgoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpCkBAIC0zMzcsNyArMzM3LDcgQEAKIAkgKi8KIAogCXNhZGRyLT5zcGt0X2RldmljZVsxM10gPSAwOwotCWRldiA9IGRldl9nZXRfYnlfbmFtZShzay0+c2tfbmV0LCBzYWRkci0+c3BrdF9kZXZpY2UpOworCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIHNhZGRyLT5zcGt0X2RldmljZSk7CiAJZXJyID0gLUVOT0RFVjsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCXNrID0gcHQtPmFmX3BhY2tldF9wcml2OwogCXBvID0gcGt0X3NrKHNrKTsKIAotCWlmIChkZXYtPm5kX25ldCAhPSBzay0+c2tfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gc29ja19uZXQoc2spKQogCQlnb3RvIGRyb3A7CiAKIAlza2ItPmRldiA9IGRldjsKQEAgLTU2OCw3ICs1NjgsNyBAQAogCXNrID0gcHQtPmFmX3BhY2tldF9wcml2OwogCXBvID0gcGt0X3NrKHNrKTsKIAotCWlmIChkZXYtPm5kX25ldCAhPSBzay0+c2tfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gc29ja19uZXQoc2spKQogCQlnb3RvIGRyb3A7CiAKIAlpZiAoZGV2LT5oZWFkZXJfb3BzKSB7CkBAIC03MjgsNyArNzI4LDcgQEAKIAl9CiAKIAotCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoc2stPnNrX25ldCwgaWZpbmRleCk7CisJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIGlmaW5kZXgpOwogCWVyciA9IC1FTlhJTzsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTgwMCw3ICs4MDAsNyBAQAogCWlmICghc2spCiAJCXJldHVybiAwOwogCi0JbmV0ID0gc2stPnNrX25ldDsKKwluZXQgPSBzb2NrX25ldChzayk7CiAJcG8gPSBwa3Rfc2soc2spOwogCiAJd3JpdGVfbG9ja19iaCgmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOwpAQCAtOTE0LDcgKzkxNCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXN0cmxjcHkobmFtZSx1YWRkci0+c2FfZGF0YSxzaXplb2YobmFtZSkpOwogCi0JZGV2ID0gZGV2X2dldF9ieV9uYW1lKHNrLT5za19uZXQsIG5hbWUpOworCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIG5hbWUpOwogCWlmIChkZXYpIHsKIAkJZXJyID0gcGFja2V0X2RvX2JpbmQoc2ssIGRldiwgcGt0X3NrKHNrKS0+bnVtKTsKIAkJZGV2X3B1dChkZXYpOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIAlpZiAoc2xsLT5zbGxfaWZpbmRleCkgewogCQllcnIgPSAtRU5PREVWOwotCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNrLT5za19uZXQsIHNsbC0+c2xsX2lmaW5kZXgpOworCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc2xsLT5zbGxfaWZpbmRleCk7CiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTExMzUsNyArMTEzNSw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXVhZGRyLT5zYV9mYW1pbHkgPSBBRl9QQUNLRVQ7Ci0JZGV2ID0gZGV2X2dldF9ieV9pbmRleChzay0+c2tfbmV0LCBwa3Rfc2soc2spLT5pZmluZGV4KTsKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgcGt0X3NrKHNrKS0+aWZpbmRleCk7CiAJaWYgKGRldikgewogCQlzdHJsY3B5KHVhZGRyLT5zYV9kYXRhLCBkZXYtPm5hbWUsIDE1KTsKIAkJZGV2X3B1dChkZXYpOwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAlzbGwtPnNsbF9mYW1pbHkgPSBBRl9QQUNLRVQ7CiAJc2xsLT5zbGxfaWZpbmRleCA9IHBvLT5pZmluZGV4OwogCXNsbC0+c2xsX3Byb3RvY29sID0gcG8tPm51bTsKLQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNrLT5za19uZXQsIHBvLT5pZmluZGV4KTsKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgcG8tPmlmaW5kZXgpOwogCWlmIChkZXYpIHsKIAkJc2xsLT5zbGxfaGF0eXBlID0gZGV2LT50eXBlOwogCQlzbGwtPnNsbF9oYWxlbiA9IGRldi0+YWRkcl9sZW47CkBAIC0xMjEyLDcgKzEyMTIsNyBAQAogCXJ0bmxfbG9jaygpOwogCiAJZXJyID0gLUVOT0RFVjsKLQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoc2stPnNrX25ldCwgbXJlcS0+bXJfaWZpbmRleCk7CisJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbXJlcS0+bXJfaWZpbmRleCk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gZG9uZTsKIApAQCAtMTI2Niw3ICsxMjY2LDcgQEAKIAkJCWlmICgtLW1sLT5jb3VudCA9PSAwKSB7CiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAkJCQkqbWxwID0gbWwtPm5leHQ7Ci0JCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzay0+c2tfbmV0LCBtbC0+aWZpbmRleCk7CisJCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIG1sLT5pZmluZGV4KTsKIAkJCQlpZiAoZGV2KSB7CiAJCQkJCXBhY2tldF9kZXZfbWMoZGV2LCBtbCwgLTEpOwogCQkJCQlkZXZfcHV0KGRldik7CkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJCXBvLT5tY2xpc3QgPSBtbC0+bmV4dDsKLQkJaWYgKChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNrLT5za19uZXQsIG1sLT5pZmluZGV4KSkgIT0gTlVMTCkgeworCQlpZiAoKGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBtbC0+aWZpbmRleCkpICE9IE5VTEwpIHsKIAkJCXBhY2tldF9kZXZfbWMoZGV2LCBtbCwgLTEpOwogCQkJZGV2X3B1dChkZXYpOwogCQl9CkBAIC0xNDUwLDcgKzE0NTAsNyBAQAogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXYtPm5kX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKIAlyZWFkX2xvY2soJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKIAlza19mb3JfZWFjaChzaywgbm9kZSwgJm5ldC0+cGFja2V0LnNrbGlzdCkgewpAQCAtMTU0MCw3ICsxNTQwLDcgQEAKIAkJY2FzZSBTSU9DR0lGRFNUQUREUjoKIAkJY2FzZSBTSU9DU0lGRFNUQUREUjoKIAkJY2FzZSBTSU9DU0lGRkxBR1M6Ci0JCQlpZiAoc2stPnNrX25ldCAhPSAmaW5pdF9uZXQpCisJCQlpZiAoc29ja19uZXQoc2spICE9ICZpbml0X25ldCkKIAkJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCQkJcmV0dXJuIGluZXRfZGdyYW1fb3BzLmlvY3RsKHNvY2ssIGNtZCwgYXJnKTsKICNlbmRpZgpAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAlpbnQgZXJyID0gMDsKIAogCWlmIChyZXEtPnRwX2Jsb2NrX25yKSB7Ci0JCWludCBpLCBsOworCQlpbnQgaTsKIAogCQkvKiBTYW5pdHkgdGVzdHMgYW5kIHNvbWUgY2FsY3VsYXRpb25zICovCiAKQEAgLTE2ODcsNyArMTY4Nyw2IEBACiAJCWlmICh1bmxpa2VseSghcGdfdmVjKSkKIAkJCWdvdG8gb3V0OwogCi0JCWwgPSAwOwogCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT50cF9ibG9ja19ucjsgaSsrKSB7CiAJCQljaGFyICpwdHIgPSBwZ192ZWNbaV07CiAJCQlzdHJ1Y3QgdHBhY2tldF9oZHIgKmhlYWRlcjsKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvcmZraWxsLmMgYi9uZXQvcmZraWxsL3Jma2lsbC5jCmluZGV4IDFhNDdmNWQuLjRlMTBhOTUgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvcmZraWxsLmMKKysrIGIvbmV0L3Jma2lsbC9yZmtpbGwuYwpAQCAtOTIsNyArOTIsNyBAQAogCXJma2lsbF9zdGF0ZXNbdHlwZV0gPSBzdGF0ZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmZraWxsLCAmcmZraWxsX2xpc3QsIG5vZGUpIHsKLQkJaWYgKCFyZmtpbGwtPnVzZXJfY2xhaW0pCisJCWlmICgoIXJma2lsbC0+dXNlcl9jbGFpbSkgJiYgKHJma2lsbC0+dHlwZSA9PSB0eXBlKSkKIAkJCXJma2lsbF90b2dnbGVfcmFkaW8ocmZraWxsLCBzdGF0ZSk7CiAJfQogCkBAIC0yMzIsNyArMjMyLDcgQEAKIAlzdHJ1Y3QgcmZraWxsICpyZmtpbGwgPSB0b19yZmtpbGwoZGV2KTsKIAogCWlmIChkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IHN0YXRlLmV2ZW50KSB7Ci0JCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7CisJCWlmIChzdGF0ZS5ldmVudCAmIFBNX0VWRU5UX1NMRUVQKSB7CiAJCQltdXRleF9sb2NrKCZyZmtpbGwtPm11dGV4KTsKIAogCQkJaWYgKHJma2lsbC0+c3RhdGUgPT0gUkZLSUxMX1NUQVRFX09OKQpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2UvYWZfcm9zZS5jIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCmluZGV4IDRhMzFhODEuLjFlYmY2NTIgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL2FmX3Jvc2UuYworKysgYi9uZXQvcm9zZS9hZl9yb3NlLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwdHI7CiAKLQlpZiAoZGV2LT5uZF9uZXQgIT0gJmluaXRfbmV0KQorCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX0RPV04pCkBAIC01NTEsNyArNTUxLDcgQEAKIAlpZiAob3NrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUKQogCQlyZXR1cm4gTlVMTDsKIAotCXNrID0gc2tfYWxsb2Mob3NrLT5za19uZXQsIFBGX1JPU0UsIEdGUF9BVE9NSUMsICZyb3NlX3Byb3RvKTsKKwlzayA9IHNrX2FsbG9jKHNvY2tfbmV0KG9zayksIFBGX1JPU0UsIEdGUF9BVE9NSUMsICZyb3NlX3Byb3RvKTsKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTU5OCwxNyArNTk4LDI0IEBACiAKIAlpZiAoc2sgPT0gTlVMTCkgcmV0dXJuIDA7CiAKKwlzb2NrX2hvbGQoc2spOworCXNvY2tfb3JwaGFuKHNrKTsKKwlsb2NrX3NvY2soc2spOwogCXJvc2UgPSByb3NlX3NrKHNrKTsKIAogCXN3aXRjaCAocm9zZS0+c3RhdGUpIHsKIAljYXNlIFJPU0VfU1RBVEVfMDoKKwkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJcm9zZV9kaXNjb25uZWN0KHNrLCAwLCAtMSwgLTEpOworCQlsb2NrX3NvY2soc2spOwogCQlyb3NlX2Rlc3Ryb3lfc29ja2V0KHNrKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJPU0VfU1RBVEVfMjoKIAkJcm9zZS0+bmVpZ2hib3VyLT51c2UtLTsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJcm9zZV9kaXNjb25uZWN0KHNrLCAwLCAtMSwgLTEpOworCQlsb2NrX3NvY2soc2spOwogCQlyb3NlX2Rlc3Ryb3lfc29ja2V0KHNrKTsKIAkJYnJlYWs7CiAKQEAgLTYzMyw2ICs2NDAsOCBAQAogCX0KIAogCXNvY2stPnNrID0gTlVMTDsKKwlyZWxlYXNlX3NvY2soc2spOworCXNvY2tfcHV0KHNrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzUxLDggKzc2MCwxMCBAQAogCiAJcm9zZS0+bmVpZ2hib3VyID0gcm9zZV9nZXRfbmVpZ2goJmFkZHItPnNyb3NlX2FkZHIsICZjYXVzZSwKIAkJCQkJICZkaWFnbm9zdGljKTsKLQlpZiAoIXJvc2UtPm5laWdoYm91cikKLQkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKKwlpZiAoIXJvc2UtPm5laWdoYm91cikgeworCQllcnIgPSAtRU5FVFVOUkVBQ0g7CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQogCiAJcm9zZS0+bGNpID0gcm9zZV9uZXdfbGNpKHJvc2UtPm5laWdoYm91cik7CiAJaWYgKCFyb3NlLT5sY2kpIHsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hZl9yeHJwYy5jIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmMKaW5kZXggMmQwYzI5Yy4uNGIyNjgyZiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMKKysrIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogdW5zaWduZWQgcnhycGNfZGVidWc7IC8vID0gUlhSUENfREVCVUdfS1BST1RPOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCByeHJwY19kZWJ1ZywgdWludCwgU19JV1VTUiB8IFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhyeHJwY19kZWJ1ZywgIlJ4UlBDIGRlYnVnZ2luZyBtYXNrIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiUnhSUEMgZGVidWdnaW5nIG1hc2siKTsKIAogc3RhdGljIGludCBzeXNjdGxfcnhycGNfbWF4X3FsZW4gX19yZWFkX21vc3RseSA9IDEwOwogCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItYWNjZXB0LmMgYi9uZXQvcnhycGMvYXItYWNjZXB0LmMKaW5kZXggOTJhODdmZC4uYmRmYjc3NCAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWFjY2VwdC5jCisrKyBiL25ldC9yeHJwYy9hci1hY2NlcHQuYwpAQCAtMTU2LDggKzE1Niw3IEBACiAJCQkJCQkgIGZhbHNlKTsKIAkJCXNwaW5fdW5sb2NrKCZjYWxsLT5sb2NrKTsKIAkJCW5vdGlmaWNhdGlvbiA9IE5VTEw7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTihyZXQgPCAwKTsKIAkJfQogCQlzcGluX3VubG9jaygmY2FsbC0+Y29ubi0+c3RhdGVfbG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1hY2suYyBiL25ldC9yeHJwYy9hci1hY2suYwppbmRleCA2NTdlZTY5Li4zYWMxNjcyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItYWNrLmMKKysrIGIvbmV0L3J4cnBjL2FyLWFjay5jCkBAIC04MTQsOCArODE0LDcgQEAKIAkJc3Bpbl9sb2NrX2JoKCZjYWxsLT5sb2NrKTsKIAkJcmV0ID0gcnhycGNfcXVldWVfcmN2X3NrYihjYWxsLCBza2IsIHRydWUsIGZhdGFsKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmNhbGwtPmxvY2spOwotCQlpZiAocmV0IDwgMCkKLQkJCUJVRygpOworCQlCVUdfT04ocmV0IDwgMCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaCBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oCmluZGV4IDFhYWEyZTguLjNlNzMxOGMgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oCisrKyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oCkBAIC0yMyw3ICsyMyw3IEBACiBzdHJ1Y3QgcnhycGNfY3J5cHQgewogCXVuaW9uIHsKIAkJdTgJeFtGQ1JZUFRfQlNJWkVdOwotCQl1MzIJblsyXTsKKwkJX19iZTMyCW5bMl07CiAJfTsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwogCkBAIC02MTEsNyArNjExLDcgQEAKIGV4dGVybiB1bnNpZ25lZCByeHJwY19kZWJ1ZzsKIAogI2RlZmluZSBkYmdwcmludGsoRk1ULC4uLikgXAotCXByaW50aygiWyV4JS02LjZzXSAiRk1UIlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjdXJyZW50LT5jb21tICwjI19fVkFfQVJHU19fKQorCXByaW50aygiWyUtNi42c10gIkZNVCJcbiIsIGN1cnJlbnQtPmNvbW0gLCMjX19WQV9BUkdTX18pCiAKIC8qIG1ha2Ugc3VyZSB3ZSBtYWludGFpbiB0aGUgZm9ybWF0IHN0cmluZ3MsIGV2ZW4gd2hlbiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQgKi8KIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwxLDIpKSkKQEAgLTYxOSw4ICs2MTksOCBAQAogewogfQogCi0jZGVmaW5lIGtlbnRlcihGTVQsLi4uKQlkYmdwcmludGsoIj09PiAlcygiRk1UIikiLF9fRlVOQ1RJT05fXyAsIyNfX1ZBX0FSR1NfXykKLSNkZWZpbmUga2xlYXZlKEZNVCwuLi4pCWRiZ3ByaW50aygiPD09ICVzKCkiRk1UIiIsX19GVU5DVElPTl9fICwjI19fVkFfQVJHU19fKQorI2RlZmluZSBrZW50ZXIoRk1ULC4uLikJZGJncHJpbnRrKCI9PT4gJXMoIkZNVCIpIixfX2Z1bmNfXyAsIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2xlYXZlKEZNVCwuLi4pCWRiZ3ByaW50aygiPD09ICVzKCkiRk1UIiIsX19mdW5jX18gLCMjX19WQV9BUkdTX18pCiAjZGVmaW5lIGtkZWJ1ZyhGTVQsLi4uKQlkYmdwcmludGsoIiAgICAiRk1UICwjI19fVkFfQVJHU19fKQogI2RlZmluZSBrcHJvdG8oRk1ULC4uLikJZGJncHJpbnRrKCIjIyMgIkZNVCAsIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUga25ldChGTVQsLi4uKQlkYmdwcmludGsoIkBAQCAiRk1UICwjI19fVkFfQVJHU19fKQpAQCAtNjcxLDggKzY3MSw4IEBACiB9IHdoaWxlICgwKQogCiAjZWxzZQotI2RlZmluZSBfZW50ZXIoRk1ULC4uLikJX2RicHJpbnRrKCI9PT4gJXMoIkZNVCIpIixfX0ZVTkNUSU9OX18gLCMjX19WQV9BUkdTX18pCi0jZGVmaW5lIF9sZWF2ZShGTVQsLi4uKQlfZGJwcmludGsoIjw9PSAlcygpIkZNVCIiLF9fRlVOQ1RJT05fXyAsIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2VudGVyKEZNVCwuLi4pCV9kYnByaW50aygiPT0+ICVzKCJGTVQiKSIsX19mdW5jX18gLCMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9sZWF2ZShGTVQsLi4uKQlfZGJwcmludGsoIjw9PSAlcygpIkZNVCIiLF9fZnVuY19fICwjI19fVkFfQVJHU19fKQogI2RlZmluZSBfZGVidWcoRk1ULC4uLikJX2RicHJpbnRrKCIgICAgIkZNVCAsIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgX3Byb3RvKEZNVCwuLi4pCV9kYnByaW50aygiIyMjICJGTVQgLCMjX19WQV9BUkdTX18pCiAjZGVmaW5lIF9uZXQoRk1ULC4uLikJX2RicHJpbnRrKCJAQEAgIkZNVCAsIyNfX1ZBX0FSR1NfXykKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1wcm9jLmMgYi9uZXQvcnhycGMvYXItcHJvYy5jCmluZGV4IDgzZWRhMjQuLjAxNzMyMmUgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1wcm9jLmMKKysrIGIvbmV0L3J4cnBjL2FyLXByb2MuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJLm9wZW4JCT0gcnhycGNfY2FsbF9zZXFfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKIC8qCkBAIC0xODgsNSArMTg4LDUgQEAKIAkub3BlbgkJPSByeHJwY19jb25uZWN0aW9uX3NlcV9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1yZWN2bXNnLmMgYi9uZXQvcnhycGMvYXItcmVjdm1zZy5jCmluZGV4IGYxOTEyMWQuLmEzOWJmOTcgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1yZWN2bXNnLmMKKysrIGIvbmV0L3J4cnBjL2FyLXJlY3Ztc2cuYwpAQCAtMTQzLDcgKzE0Myw4IEBACiAJCS8qIGNvcHkgdGhlIHBlZXIgYWRkcmVzcyBhbmQgdGltZXN0YW1wICovCiAJCWlmICghY29udGludWVfY2FsbCkgewogCQkJaWYgKG1zZy0+bXNnX25hbWUgJiYgbXNnLT5tc2dfbmFtZWxlbiA+IDApCi0JCQkJbWVtY3B5KCZtc2ctPm1zZ19uYW1lLCAmY2FsbC0+Y29ubi0+dHJhbnMtPnBlZXItPnNyeCwKKwkJCQltZW1jcHkobXNnLT5tc2dfbmFtZSwKKwkJCQkgICAgICAgJmNhbGwtPmNvbm4tPnRyYW5zLT5wZWVyLT5zcngsCiAJCQkJICAgICAgIHNpemVvZihjYWxsLT5jb25uLT50cmFucy0+cGVlci0+c3J4KSk7CiAJCQlzb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgJnJ4LT5zaywgc2tiKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4a2FkLmMgYi9uZXQvcnhycGMvcnhrYWQuYwppbmRleCBmNDg0MzRhLi42ZDM4YTgxIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhrYWQuYworKysgYi9uZXQvcnhycGMvcnhrYWQuYwpAQCAtMzEsNyArMzEsNyBAQAogCiB1bnNpZ25lZCByeHJwY19kZWJ1ZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgcnhycGNfZGVidWcsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MocnhycGNfZGVidWcsICJyeGthZCBkZWJ1Z2dpbmcgbWFzayIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInJ4a2FkIGRlYnVnZ2luZyBtYXNrIik7CiAKIHN0cnVjdCByeGthZF9sZXZlbDFfaGRyIHsKIAlfX2JlMzIJZGF0YV9zaXplOwkvKiB0cnVlIGRhdGEgc2l6ZSAoZXhjbHVkaW5nIHBhZGRpbmcpICovCkBAIC0yNjEsNiArMjYxLDcgQEAKIAkJX19iZTMyIHhbMl07CiAJfSB0bXBidWYgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOyAvKiBtdXN0IGFsbCBiZSBpbiBzYW1lIHBhZ2UgKi8KIAlfX2JlMzIgeDsKKwl1MzIgeTsKIAlpbnQgcmV0OwogCiAJc3AgPSByeHJwY19za2Ioc2tiKTsKQEAgLTI5MiwxMSArMjkzLDExIEBACiAJc2dfaW5pdF9vbmUoJnNnWzFdLCAmdG1wYnVmLCBzaXplb2YodG1wYnVmKSk7CiAJY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0X2l2KCZkZXNjLCAmc2dbMF0sICZzZ1sxXSwgc2l6ZW9mKHRtcGJ1ZikpOwogCi0JeCA9IG50b2hsKHRtcGJ1Zi54WzFdKTsKLQl4ID0gKHggPj4gMTYpICYgMHhmZmZmOwotCWlmICh4ID09IDApCi0JCXggPSAxOyAvKiB6ZXJvIGNoZWNrc3VtcyBhcmUgbm90IHBlcm1pdHRlZCAqLwotCXNwLT5oZHIuY2tzdW0gPSBodG9ucyh4KTsKKwl5ID0gbnRvaGwodG1wYnVmLnhbMV0pOworCXkgPSAoeSA+PiAxNikgJiAweGZmZmY7CisJaWYgKHkgPT0gMCkKKwkJeSA9IDE7IC8qIHplcm8gY2hlY2tzdW1zIGFyZSBub3QgcGVybWl0dGVkICovCisJc3AtPmhkci5ja3N1bSA9IGh0b25zKHkpOwogCiAJc3dpdGNoIChjYWxsLT5jb25uLT5zZWN1cml0eV9sZXZlbCkgewogCWNhc2UgUlhSUENfU0VDVVJJVFlfUExBSU46CkBAIC0zMTQsNyArMzE1LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JX2xlYXZlKCIgPSAlZCBbc2V0ICVoeF0iLCByZXQsIHgpOworCV9sZWF2ZSgiID0gJWQgW3NldCAlaHhdIiwgcmV0LCB5KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00OTIsNiArNDkzLDcgQEAKIAkJX19iZTMyIHhbMl07CiAJfSB0bXBidWYgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOyAvKiBtdXN0IGFsbCBiZSBpbiBzYW1lIHBhZ2UgKi8KIAlfX2JlMzIgeDsKKwl1MTYgeTsKIAlfX2JlMTYgY2tzdW07CiAJaW50IHJldDsKIApAQCAtNTI2LDEyICs1MjgsMTIgQEAKIAlzZ19pbml0X29uZSgmc2dbMV0sICZ0bXBidWYsIHNpemVvZih0bXBidWYpKTsKIAljcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHRfaXYoJmRlc2MsICZzZ1swXSwgJnNnWzFdLCBzaXplb2YodG1wYnVmKSk7CiAKLQl4ID0gbnRvaGwodG1wYnVmLnhbMV0pOwotCXggPSAoeCA+PiAxNikgJiAweGZmZmY7Ci0JaWYgKHggPT0gMCkKLQkJeCA9IDE7IC8qIHplcm8gY2hlY2tzdW1zIGFyZSBub3QgcGVybWl0dGVkICovCisJeSA9IG50b2hsKHRtcGJ1Zi54WzFdKTsKKwl5ID0gKHkgPj4gMTYpICYgMHhmZmZmOworCWlmICh5ID09IDApCisJCXkgPSAxOyAvKiB6ZXJvIGNoZWNrc3VtcyBhcmUgbm90IHBlcm1pdHRlZCAqLwogCi0JY2tzdW0gPSBodG9ucyh4KTsKKwlja3N1bSA9IGh0b25zKHkpOwogCWlmIChzcC0+aGRyLmNrc3VtICE9IGNrc3VtKSB7CiAJCSpfYWJvcnRfY29kZSA9IFJYS0FEU0VBTEVESU5DT047CiAJCV9sZWF2ZSgiID0gLUVQUk9UTyBbY3N1bSBmYWlsZWRdIik7CkBAIC0xMDAxLDcgKzEwMDMsOCBAQAogCXN0cnVjdCByeHJwY19jcnlwdCBzZXNzaW9uX2tleTsKIAl0aW1lX3QgZXhwaXJ5OwogCXZvaWQgKnRpY2tldDsKLQl1MzIgYWJvcnRfY29kZSwgdmVyc2lvbiwga3ZubywgdGlja2V0X2xlbiwgY3N1bSwgbGV2ZWw7CisJdTMyIGFib3J0X2NvZGUsIHZlcnNpb24sIGt2bm8sIHRpY2tldF9sZW4sIGxldmVsOworCV9fYmUzMiBjc3VtOwogCWludCByZXQ7CiAKIAlfZW50ZXIoInslZCwleH0iLCBjb25uLT5kZWJ1Z19pZCwga2V5X3NlcmlhbChjb25uLT5zZXJ2ZXJfa2V5KSk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwppbmRleCAwYjhlYjIzLi43NGU2NjJjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCisrKyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogCiBzdGF0aWMgaW50IHRjX2N0bF9hY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBubGF0dHIgKnRjYVtUQ0FfQUNUX01BWCArIDFdOwogCXUzMiBwaWQgPSBza2IgPyBORVRMSU5LX0NCKHNrYikucGlkIDogMDsKIAlpbnQgcmV0ID0gMCwgb3ZyID0gMDsKQEAgLTEwMjksNyArMTAyOSw3IEBACiBzdGF0aWMgaW50CiB0Y19kdW1wX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXVuc2lnbmVkIGNoYXIgKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CiAJc3RydWN0IG5sYXR0ciAqbmVzdDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCmluZGV4IGZiZGU0NjEuLjY0YjJkMTMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGF0YWxlbiA9IG5sYV9sZW4odGJbVENBX0RFRl9EQVRBXSk7Ci0JaWYgKGRhdGFsZW4gPD0gMCkKKwlpZiAoZGF0YWxlbiA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBjID0gdGNmX2hhc2hfY2hlY2socGFybS0+aW5kZXgsIGEsIGJpbmQsICZzaW1wX2hhc2hfaW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwppbmRleCAwZmJlZGNhLi4xMDg2ZGY3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCiBzdGF0aWMgaW50IHRjX2N0bF90ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbiwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCArIDFdOwogCXN0cnVjdCB0Y21zZyAqdDsKIAl1MzIgcHJvdG9jb2w7CkBAIC0zODksNyArMzg5LDcgQEAKIAogc3RhdGljIGludCB0Y19kdW1wX3RmaWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlpbnQgdDsKIAlpbnQgc190OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCBiMThmYTk1Li40ZDc1NTQ0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCisrKyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAogc3RhdGljIHN0cnVjdCB0Y191X2NvbW1vbiAqdTMyX2xpc3Q7CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHUzMl9oYXNoX2ZvbGQodTMyIGtleSwgc3RydWN0IHRjX3UzMl9zZWwgKnNlbCwgdTggZnNoaWZ0KQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgdTMyX2hhc2hfZm9sZChfX2JlMzIga2V5LCBzdHJ1Y3QgdGNfdTMyX3NlbCAqc2VsLCB1OCBmc2hpZnQpCiB7CiAJdW5zaWduZWQgaCA9IG50b2hsKGtleSAmIHNlbC0+aG1hc2spPj5mc2hpZnQ7CiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogCiAJCWZvciAoaSA9IG4tPnNlbC5ua2V5czsgaT4wOyBpLS0sIGtleSsrKSB7CiAKLQkJCWlmICgoKih1MzIqKShwdHIra2V5LT5vZmYrKG9mZjIma2V5LT5vZmZtYXNrKSlea2V5LT52YWwpJmtleS0+bWFzaykgeworCQkJaWYgKCgqKF9fYmUzMiopKHB0citrZXktPm9mZisob2ZmMiZrZXktPm9mZm1hc2spKV5rZXktPnZhbCkma2V5LT5tYXNrKSB7CiAJCQkJbiA9IG4tPm5leHQ7CiAJCQkJZ290byBuZXh0X2tub2RlOwogCQkJfQpAQCAtMTgyLDcgKzE4Miw3IEBACiAJCWh0ID0gbi0+aHRfZG93bjsKIAkJc2VsID0gMDsKIAkJaWYgKGh0LT5kaXZpc29yKQotCQkJc2VsID0gaHQtPmRpdmlzb3ImdTMyX2hhc2hfZm9sZCgqKHUzMiopKHB0cituLT5zZWwuaG9mZiksICZuLT5zZWwsbi0+ZnNoaWZ0KTsKKwkJCXNlbCA9IGh0LT5kaXZpc29yJnUzMl9oYXNoX2ZvbGQoKihfX2JlMzIqKShwdHIrbi0+c2VsLmhvZmYpLCAmbi0+c2VsLG4tPmZzaGlmdCk7CiAKIAkJaWYgKCEobi0+c2VsLmZsYWdzJihUQ19VMzJfVkFST0ZGU0VUfFRDX1UzMl9PRkZTRVR8VENfVTMyX0VBVCkpKQogCQkJZ290byBuZXh0X2h0OwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJCWlmIChuLT5zZWwuZmxhZ3MmKFRDX1UzMl9PRkZTRVR8VENfVTMyX1ZBUk9GRlNFVCkpIHsKIAkJCW9mZjIgPSBuLT5zZWwub2ZmICsgMzsKIAkJCWlmIChuLT5zZWwuZmxhZ3MmVENfVTMyX1ZBUk9GRlNFVCkKLQkJCQlvZmYyICs9IG50b2hzKG4tPnNlbC5vZmZtYXNrICYgKih1MTYqKShwdHIrbi0+c2VsLm9mZm9mZikpID4+bi0+c2VsLm9mZnNoaWZ0OworCQkJCW9mZjIgKz0gbnRvaHMobi0+c2VsLm9mZm1hc2sgJiAqKF9fYmUxNiopKHB0cituLT5zZWwub2Zmb2ZmKSkgPj5uLT5zZWwub2Zmc2hpZnQ7CiAJCQlvZmYyICY9IH4zOwogCQl9CiAJCWlmIChuLT5zZWwuZmxhZ3MmVENfVTMyX0VBVCkgewpAQCAtNDExLDggKzQxMSwxMCBAQAogCQkJfQogCQl9CiAKLQkJZm9yIChodD10cF9jLT5obGlzdDsgaHQ7IGh0ID0gaHQtPm5leHQpCisJCWZvciAoaHQgPSB0cF9jLT5obGlzdDsgaHQ7IGh0ID0gaHQtPm5leHQpIHsKKwkJCWh0LT5yZWZjbnQtLTsKIAkJCXUzMl9jbGVhcl9obm9kZSh0cCwgaHQpOworCQl9CiAKIAkJd2hpbGUgKChodCA9IHRwX2MtPmhsaXN0KSAhPSBOVUxMKSB7CiAJCQl0cF9jLT5obGlzdCA9IGh0LT5uZXh0OwpAQCAtNDQxLDggKzQ0MywxMiBAQAogCWlmICh0cC0+cm9vdCA9PSBodCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoLS1odC0+cmVmY250ID09IDApCisJaWYgKGh0LT5yZWZjbnQgPT0gMSkgeworCQlodC0+cmVmY250LS07CiAJCXUzMl9kZXN0cm95X2hub2RlKHRwLCBodCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU2OCw3ICs1NzQsNyBAQAogCQlpZiAoaHQgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PQlVGUzsKIAkJaHQtPnRwX2MgPSB0cF9jOwotCQlodC0+cmVmY250ID0gMDsKKwkJaHQtPnJlZmNudCA9IDE7CiAJCWh0LT5kaXZpc29yID0gZGl2aXNvcjsKIAkJaHQtPmhhbmRsZSA9IGhhbmRsZTsKIAkJaHQtPnByaW8gPSB0cC0+cHJpbzsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV9tZXRhLmMgYi9uZXQvc2NoZWQvZW1fbWV0YS5jCmluZGV4IDNkYTQxMjkuLjcyY2Y4NmUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV9tZXRhLmMKKysrIGIvbmV0L3NjaGVkL2VtX21ldGEuYwpAQCAtMjU2LDEwICsyNTYsMTAgQEAKIAogTUVUQV9DT0xMRUNUT1IoaW50X3J0aWlmKQogewotCWlmICh1bmxpa2VseShza2ItPmRzdCA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoc2tiLT5ydGFibGUgPT0gTlVMTCkpCiAJCSplcnIgPSAtMTsKIAllbHNlCi0JCWRzdC0+dmFsdWUgPSAoKHN0cnVjdCBydGFibGUqKSBza2ItPmRzdCktPmZsLmlpZjsKKwkJZHN0LT52YWx1ZSA9IHNrYi0+cnRhYmxlLT5mbC5paWY7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2VtX3UzMi5jIGIvbmV0L3NjaGVkL2VtX3UzMi5jCmluZGV4IDExMjc5NmUuLjk1M2YxNDcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV91MzIuYworKysgYi9uZXQvc2NoZWQvZW1fdTMyLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlpZiAoIXRjZl92YWxpZF9vZmZzZXQoc2tiLCBwdHIsIHNpemVvZih1MzIpKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gISgoKCoodTMyKikgcHRyKSAgXiBrZXktPnZhbCkgJiBrZXktPm1hc2spOworCXJldHVybiAhKCgoKihfX2JlMzIqKSBwdHIpICBeIGtleS0+dmFsKSAmIGtleS0+bWFzayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGNmX2VtYXRjaF9vcHMgZW1fdTMyX29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDdlM2MwNDguLmM0MDc3M2MgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtMzg2LDYgKzM4Niw5IEBACiAJaWYgKG4gPT0gMCkKIAkJcmV0dXJuOwogCXdoaWxlICgocGFyZW50aWQgPSBzY2gtPnBhcmVudCkpIHsKKwkJaWYgKFRDX0hfTUFKKHBhcmVudGlkKSA9PSBUQ19IX01BSihUQ19IX0lOR1JFU1MpKQorCQkJcmV0dXJuOworCiAJCXNjaCA9IHFkaXNjX2xvb2t1cChzY2gtPmRldiwgVENfSF9NQUoocGFyZW50aWQpKTsKIAkJaWYgKHNjaCA9PSBOVUxMKSB7CiAJCQlXQVJOX09OKHBhcmVudGlkICE9IFRDX0hfUk9PVCk7CkBAIC02MDUsNyArNjA4LDcgQEAKIAogc3RhdGljIGludCB0Y19nZXRfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCB0Y21zZyAqdGNtID0gTkxNU0dfREFUQShuKTsKIAlzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCArIDFdOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC02NzQsNyArNjc3LDcgQEAKIAogc3RhdGljIGludCB0Y19tb2RpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCB0Y21zZyAqdGNtOwogCXN0cnVjdCBubGF0dHIgKnRjYVtUQ0FfTUFYICsgMV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTg5Myw3ICs4OTYsNyBAQAogCiBzdGF0aWMgaW50IHRjX2R1bXBfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYi0+c2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlpbnQgaWR4LCBxX2lkeDsKIAlpbnQgc19pZHgsIHNfcV9pZHg7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTk0NSw3ICs5NDgsNyBAQAogCiBzdGF0aWMgaW50IHRjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2tiLT5zay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCB0Y21zZyAqdGNtID0gTkxNU0dfREFUQShuKTsKIAlzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCArIDFdOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMTM5LDcgKzExNDIsNyBAQAogCiBzdGF0aWMgaW50IHRjX2R1bXBfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBza2ItPnNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IHQ7CiAJaW50IHNfdDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCAxMGI1YzA4Li5iNzQxNjE4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMTg0LDEwICsxODQsMjIgQEAKIAogdm9pZCBfX3FkaXNjX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRvIHsKLQkJaWYgKCFxZGlzY19yZXN0YXJ0KGRldikpCisJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lID0gamlmZmllczsKKworCXdoaWxlIChxZGlzY19yZXN0YXJ0KGRldikpIHsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKIAkJCWJyZWFrOwotCX0gd2hpbGUgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpOworCisJCS8qCisJCSAqIFBvc3Rwb25lIHByb2Nlc3NpbmcgaWYKKwkJICogMS4gYW5vdGhlciBwcm9jZXNzIG5lZWRzIHRoZSBDUFU7CisJCSAqIDIuIHdlJ3ZlIGJlZW4gZG9pbmcgaXQgZm9yIHRvbyBsb25nLgorCQkgKi8KKwkJaWYgKG5lZWRfcmVzY2hlZCgpIHx8IGppZmZpZXMgIT0gc3RhcnRfdGltZSkgeworCQkJbmV0aWZfc2NoZWR1bGUoZGV2KTsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJY2xlYXJfYml0KF9fTElOS19TVEFURV9RRElTQ19SVU5OSU5HLCAmZGV2LT5zdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCA3OTVjNzYxLi42NjE0OGNjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTcxMSw5ICs3MTEsMTEgQEAKICAqLwogc3RhdGljIHBzY2hlZF90aW1lX3QgaHRiX2RvX2V2ZW50cyhzdHJ1Y3QgaHRiX3NjaGVkICpxLCBpbnQgbGV2ZWwpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKwkvKiBkb24ndCBydW4gZm9yIGxvbmdlciB0aGFuIDIgamlmZmllczsgMiBpcyB1c2VkIGluc3RlYWQgb2YKKwkgICAxIHRvIHNpbXBsaWZ5IHRoaW5ncyB3aGVuIGppZmZ5IGlzIGdvaW5nIHRvIGJlIGluY3JlbWVudGVkCisJICAgdG9vIHNvb24gKi8KKwl1bnNpZ25lZCBsb25nIHN0b3BfYXQgPSBqaWZmaWVzICsgMjsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcF9hdCkpIHsKIAkJc3RydWN0IGh0Yl9jbGFzcyAqY2w7CiAJCWxvbmcgZGlmZjsKIAkJc3RydWN0IHJiX25vZGUgKnAgPSByYl9maXJzdCgmcS0+d2FpdF9wcVtsZXZlbF0pOwpAQCAtNzMxLDkgKzczMyw4IEBACiAJCWlmIChjbC0+Y21vZGUgIT0gSFRCX0NBTl9TRU5EKQogCQkJaHRiX2FkZF90b193YWl0X3RyZWUocSwgY2wsIGRpZmYpOwogCX0KLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJodGI6IHRvbyBtYW55IGV2ZW50cyAhXG4iKTsKLQlyZXR1cm4gcS0+bm93ICsgUFNDSEVEX1RJQ0tTX1BFUl9TRUMgLyAxMDsKKwkvKiB0b28gbXVjaCBsb2FkIC0gbGV0J3MgY29udGludWUgb24gbmV4dCBqaWZmaWUgKi8KKwlyZXR1cm4gcS0+bm93ICsgUFNDSEVEX1RJQ0tTX1BFUl9TRUMgLyBIWjsKIH0KIAogLyogUmV0dXJucyBjbGFzcy0+bm9kZStwcmlvIGZyb20gaWQtdHJlZSB3aGVyZSBjbGFzc2UncyBpZCBpcyA+PSBpZC4gTlVMTApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCBkMjlmNzkyLi5iNGNkMmI3IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYworKysgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtNzE4LDEyICs3MTgsMTEgQEAKIAkJCQkJY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyZXNzKQogewogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAKIAkvKiBDeWNsZSB0aHJvdWdoIGFsbCB0cmFuc3BvcnRzIHNlYXJjaGluZyBmb3IgYSBwZWVyIGFkZHJlc3MuICovCiAKLQlsaXN0X2Zvcl9lYWNoKHBvcywgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQl0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwgdHJhbnNwb3J0cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0LAorCQkJdHJhbnNwb3J0cykgewogCQlpZiAoc2N0cF9jbXBfYWRkcl9leGFjdChhZGRyZXNzLCAmdC0+aXBhZGRyKSkKIAkJCXJldHVybiB0OwogCX0KQEAgLTc2Miw3ICs3NjEsNiBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqc2Vjb25kOwogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudDsKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlpbnQgc3BjX3N0YXRlID0gMDsKIAogCS8qIFJlY29yZCB0aGUgdHJhbnNpdGlvbiBvbiB0aGUgdHJhbnNwb3J0LiAgKi8KQEAgLTgxNCw4ICs4MTIsOCBAQAogCSAqLwogCWZpcnN0ID0gTlVMTDsgc2Vjb25kID0gTlVMTDsKIAotCWxpc3RfZm9yX2VhY2gocG9zLCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KSB7Ci0JCXQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfdHJhbnNwb3J0LCB0cmFuc3BvcnRzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQl0cmFuc3BvcnRzKSB7CiAKIAkJaWYgKCh0LT5zdGF0ZSA9PSBTQ1RQX0lOQUNUSVZFKSB8fAogCQkgICAgKHQtPnN0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpKQpAQCAtOTMyLDcgKzkzMCw2IEBACiB7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICphY3RpdmU7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICptYXRjaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKnBvczsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CiAJX19iZTMyIGtleSA9IGh0b25sKHRzbik7CkBAIC05NTYsOCArOTUzLDggQEAKIAogCWFjdGl2ZSA9IGFzb2MtPnBlZXIuYWN0aXZlX3BhdGg7CiAKLQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmYWN0aXZlLT50cmFuc21pdHRlZCkgewotCQljaHVuayA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCBzY3RwX2NodW5rLCB0cmFuc21pdHRlZF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmYWN0aXZlLT50cmFuc21pdHRlZCwKKwkJCXRyYW5zbWl0dGVkX2xpc3QpIHsKIAogCQlpZiAoa2V5ID09IGNodW5rLT5zdWJoLmRhdGFfaGRyLT50c24pIHsKIAkJCW1hdGNoID0gYWN0aXZlOwpAQCAtOTY2LDE0ICs5NjMsMTMgQEAKIAl9CiAKIAkvKiBJZiBub3QgZm91bmQsIGdvIHNlYXJjaCBhbGwgdGhlIG90aGVyIHRyYW5zcG9ydHMuICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJdHJhbnNwb3J0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwgdHJhbnNwb3J0cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQl0cmFuc3BvcnRzKSB7CiAKIAkJaWYgKHRyYW5zcG9ydCA9PSBhY3RpdmUpCiAJCQlicmVhazsKLQkJbGlzdF9mb3JfZWFjaChlbnRyeSwgJnRyYW5zcG9ydC0+dHJhbnNtaXR0ZWQpIHsKLQkJCWNodW5rID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHNjdHBfY2h1bmssCi0JCQkJCSAgIHRyYW5zbWl0dGVkX2xpc3QpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmdHJhbnNwb3J0LT50cmFuc21pdHRlZCwKKwkJCQl0cmFuc21pdHRlZF9saXN0KSB7CiAJCQlpZiAoa2V5ID09IGNodW5rLT5zdWJoLmRhdGFfaGRyLT50c24pIHsKIAkJCQltYXRjaCA9IHRyYW5zcG9ydDsKIAkJCQlnb3RvIG91dDsKQEAgLTExNTQsOSArMTE1MCw4IEBACiAKIAl9IGVsc2UgewogCQkvKiBBZGQgYW55IHBlZXIgYWRkcmVzc2VzIGZyb20gdGhlIG5ldyBhc3NvY2lhdGlvbi4gKi8KLQkJbGlzdF9mb3JfZWFjaChwb3MsICZuZXctPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQkJdHJhbnMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfdHJhbnNwb3J0LAotCQkJCQkgICB0cmFuc3BvcnRzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJm5ldy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0LAorCQkJCXRyYW5zcG9ydHMpIHsKIAkJCWlmICghc2N0cF9hc3NvY19sb29rdXBfcGFkZHIoYXNvYywgJnRyYW5zLT5pcGFkZHIpKQogCQkJCXNjdHBfYXNzb2NfYWRkX3BlZXIoYXNvYywgJnRyYW5zLT5pcGFkZHIsCiAJCQkJCQkgICAgR0ZQX0FUT01JQywgdHJhbnMtPnN0YXRlKTsKQEAgLTEzMDYsMTUgKzEzMDEsMTQgQEAKIHZvaWQgc2N0cF9hc3NvY19zeW5jX3BtdHUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0OwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlfX3UzMiBwbXR1ID0gMDsKIAogCWlmICghYXNvYykKIAkJcmV0dXJuOwogCiAJLyogR2V0IHRoZSBsb3dlc3QgcG10dSBvZiBhbGwgdGhlIHRyYW5zcG9ydHMuICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsIHRyYW5zcG9ydHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKKwkJCQl0cmFuc3BvcnRzKSB7CiAJCWlmICh0LT5wbXR1X3BlbmRpbmcgJiYgdC0+ZHN0KSB7CiAJCQlzY3RwX3RyYW5zcG9ydF91cGRhdGVfcG10dSh0LCBkc3RfbXR1KHQtPmRzdCkpOwogCQkJdC0+cG10dV9wZW5kaW5nID0gMDsKQEAgLTEzMzAsNyArMTMyNCw3IEBACiAJfQogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBhc29jOiVwLCBwbXR1OiVkLCBmcmFnX3BvaW50OiVkXG4iLAotCQkJICBfX0ZVTkNUSU9OX18sIGFzb2MsIGFzb2MtPnBhdGhtdHUsIGFzb2MtPmZyYWdfcG9pbnQpOworCQkJICBfX2Z1bmNfXywgYXNvYywgYXNvYy0+cGF0aG10dSwgYXNvYy0+ZnJhZ19wb2ludCk7CiB9CiAKIC8qIFNob3VsZCB3ZSBzZW5kIGEgU0FDSyB0byB1cGRhdGUgb3VyIHBlZXI/ICovCkBAIC0xMzcwLDcgKzEzNjQsNyBAQAogCX0KIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogYXNvYyAlcCByd25kIGluY3JlYXNlZCBieSAlZCB0byAoJXUsICV1KSAiCi0JCQkgICItICV1XG4iLCBfX0ZVTkNUSU9OX18sIGFzb2MsIGxlbiwgYXNvYy0+cnduZCwKKwkJCSAgIi0gJXVcbiIsIF9fZnVuY19fLCBhc29jLCBsZW4sIGFzb2MtPnJ3bmQsCiAJCQkgIGFzb2MtPnJ3bmRfb3ZlciwgYXNvYy0+YV9yd25kKTsKIAogCS8qIFNlbmQgYSB3aW5kb3cgdXBkYXRlIFNBQ0sgaWYgdGhlIHJ3bmQgaGFzIGluY3JlYXNlZCBieSBhdCBsZWFzdCB0aGUKQEAgLTEzODEsNyArMTM3NSw3IEBACiAJaWYgKHNjdHBfcGVlcl9uZWVkc191cGRhdGUoYXNvYykpIHsKIAkJYXNvYy0+YV9yd25kID0gYXNvYy0+cnduZDsKIAkJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBTZW5kaW5nIHdpbmRvdyB1cGRhdGUgU0FDSy0gYXNvYzogJXAgIgotCQkJCSAgInJ3bmQ6ICV1IGFfcnduZDogJXVcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkgICJyd25kOiAldSBhX3J3bmQ6ICV1XG4iLCBfX2Z1bmNfXywKIAkJCQkgIGFzb2MsIGFzb2MtPnJ3bmQsIGFzb2MtPmFfcnduZCk7CiAJCXNhY2sgPSBzY3RwX21ha2Vfc2Fjayhhc29jKTsKIAkJaWYgKCFzYWNrKQpAQCAtMTQxMCw3ICsxNDA0LDcgQEAKIAkJYXNvYy0+cnduZCA9IDA7CiAJfQogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogYXNvYyAlcCByd25kIGRlY3JlYXNlZCBieSAlZCB0byAoJXUsICV1KVxuIiwKLQkJCSAgX19GVU5DVElPTl9fLCBhc29jLCBsZW4sIGFzb2MtPnJ3bmQsCisJCQkgIF9fZnVuY19fLCBhc29jLCBsZW4sIGFzb2MtPnJ3bmQsCiAJCQkgIGFzb2MtPnJ3bmRfb3Zlcik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguYwppbmRleCA4YmI3OWYyLi42NzVhNWMzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hdXRoLmMKKysrIGIvbmV0L3NjdHAvYXV0aC5jCkBAIC04MzgsMTEgKzgzOCwxMSBAQAogCX0KIAogCS8qIENyZWF0ZSBhIG5ldyBrZXkgZGF0YSBiYXNlZCBvbiB0aGUgaW5mbyBwYXNzZWQgaW4gKi8KLQlrZXkgPSBzY3RwX2F1dGhfY3JlYXRlX2tleShhdXRoX2tleS0+c2NhX2tleWxlbiwgR0ZQX0tFUk5FTCk7CisJa2V5ID0gc2N0cF9hdXRoX2NyZWF0ZV9rZXkoYXV0aF9rZXktPnNjYV9rZXlsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICgha2V5KQogCQlnb3RvIG5vbWVtOwogCi0JbWVtY3B5KGtleS0+ZGF0YSwgJmF1dGhfa2V5LT5zY2Ffa2V5WzBdLCBhdXRoX2tleS0+c2NhX2tleWxlbik7CisJbWVtY3B5KGtleS0+ZGF0YSwgJmF1dGhfa2V5LT5zY2Ffa2V5WzBdLCBhdXRoX2tleS0+c2NhX2tleWxlbmd0aCk7CiAKIAkvKiBJZiB3ZSBhcmUgcmVwbGFjaW5nLCByZW1vdmUgdGhlIG9sZCBrZXlzIGRhdGEgZnJvbSB0aGUKIAkgKiBrZXkgaWQuICBJZiB3ZSBhcmUgYWRkaW5nIG5ldyBrZXkgaWQsIGFkZCBpdCB0byB0aGUKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2JpbmRfYWRkci5jIGIvbmV0L3NjdHAvYmluZF9hZGRyLmMKaW5kZXggYTI3NTExZS4uODBlNmRmMCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYmluZF9hZGRyLmMKKysrIGIvbmV0L3NjdHAvYmluZF9hZGRyLmMKQEAgLTY3LDE1ICs2NywxMyBAQAogCQkJaW50IGZsYWdzKQogewogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlpbnQgZXJyb3IgPSAwOwogCiAJLyogQWxsIGFkZHJlc3NlcyBzaGFyZSB0aGUgc2FtZSBwb3J0LiAgKi8KIAlkZXN0LT5wb3J0ID0gc3JjLT5wb3J0OwogCiAJLyogRXh0cmFjdCB0aGUgYWRkcmVzc2VzIHdoaWNoIGFyZSByZWxldmFudCBmb3IgdGhpcyBzY29wZS4gICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZzcmMtPmFkZHJlc3NfbGlzdCkgewotCQlhZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkZHIsICZzcmMtPmFkZHJlc3NfbGlzdCwgbGlzdCkgewogCQllcnJvciA9IHNjdHBfY29weV9vbmVfYWRkcihkZXN0LCAmYWRkci0+YSwgc2NvcGUsCiAJCQkJCSAgIGdmcCwgZmxhZ3MpOwogCQlpZiAoZXJyb3IgPCAwKQpAQCAtODcsOSArODUsNyBAQAogCSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgbXVzdCBiZSBzaXR0aW5nIGJlaGluZCBhIE5BVC4KIAkgKi8KIAlpZiAobGlzdF9lbXB0eSgmZGVzdC0+YWRkcmVzc19saXN0KSAmJiAoU0NUUF9TQ09QRV9HTE9CQUwgPT0gc2NvcGUpKSB7Ci0JCWxpc3RfZm9yX2VhY2gocG9zLCAmc3JjLT5hZGRyZXNzX2xpc3QpIHsKLQkJCWFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksCi0JCQkJCSAgbGlzdCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRkciwgJnNyYy0+YWRkcmVzc19saXN0LCBsaXN0KSB7CiAJCQllcnJvciA9IHNjdHBfY29weV9vbmVfYWRkcihkZXN0LCAmYWRkci0+YSwKIAkJCQkJCSAgIFNDVFBfU0NPUEVfTElOSywgZ2ZwLAogCQkJCQkJICAgZmxhZ3MpOwpAQCAtMTE1LDE0ICsxMTEsMTIgQEAKIAkJCWdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJaW50IGVycm9yID0gMDsKIAogCS8qIEFsbCBhZGRyZXNzZXMgc2hhcmUgdGhlIHNhbWUgcG9ydC4gICovCiAJZGVzdC0+cG9ydCA9IHNyYy0+cG9ydDsKIAotCWxpc3RfZm9yX2VhY2gocG9zLCAmc3JjLT5hZGRyZXNzX2xpc3QpIHsKLQkJYWRkciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGRyLCAmc3JjLT5hZGRyZXNzX2xpc3QsIGxpc3QpIHsKIAkJZXJyb3IgPSBzY3RwX2FkZF9iaW5kX2FkZHIoZGVzdCwgJmFkZHItPmEsIDEsIGdmcCk7CiAJCWlmIChlcnJvciA8IDApCiAJCQlicmVhazsKQEAgLTIwOSw2ICsyMDMsNyBAQAogaW50IHNjdHBfZGVsX2JpbmRfYWRkcihzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKmJwLCB1bmlvbiBzY3RwX2FkZHIgKmRlbF9hZGRyKQogewogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyLCAqdGVtcDsKKwlpbnQgZm91bmQgPSAwOwogCiAJLyogV2UgaG9sZCB0aGUgc29ja2V0IGxvY2sgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sCiAJICogYW5kIHRoYXQgYWN0cyBhcyBhIHdyaXRlciBzeW5jaHJvbml6aW5nIGxvY2suCkBAIC0yMTYsMTMgKzIxMSwxNCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLCB0ZW1wLCAmYnAtPmFkZHJlc3NfbGlzdCwgbGlzdCkgewogCQlpZiAoc2N0cF9jbXBfYWRkcl9leGFjdCgmYWRkci0+YSwgZGVsX2FkZHIpKSB7CiAJCQkvKiBGb3VuZCB0aGUgZXhhY3QgbWF0Y2guICovCisJCQlmb3VuZCA9IDE7CiAJCQlhZGRyLT52YWxpZCA9IDA7CiAJCQlsaXN0X2RlbF9yY3UoJmFkZHItPmxpc3QpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlpZiAoYWRkciAmJiAhYWRkci0+dmFsaWQpIHsKKwlpZiAoZm91bmQpIHsKIAkJY2FsbF9yY3UoJmFkZHItPnJjdSwgc2N0cF9sb2NhbF9hZGRyX2ZyZWUpOwogCQlTQ1RQX0RCR19PQkpDTlRfREVDKGFkZHIpOwogCQlyZXR1cm4gMDsKQEAgLTI3MSw4ICsyNjcsNyBAQAogCiAJYWRkcnBhcm1zID0gcmV0dmFsOwogCi0JbGlzdF9mb3JfZWFjaChwb3MsICZicC0+YWRkcmVzc19saXN0KSB7Ci0JCWFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRkciwgJmJwLT5hZGRyZXNzX2xpc3QsIGxpc3QpIHsKIAkJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhhZGRyLT5hLnY0LnNpbl9mYW1pbHkpOwogCQlsZW4gPSBhZi0+dG9fYWRkcl9wYXJhbSgmYWRkci0+YSwgJnJhd2FkZHIpOwogCQltZW1jcHkoYWRkcnBhcm1zLnYsICZyYXdhZGRyLCBsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvY2h1bmsuYyBiL25ldC9zY3RwL2NodW5rLmMKaW5kZXggNGQzMTI4Zi4uMTc0OGVmOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvY2h1bmsuYworKysgYi9uZXQvc2N0cC9jaHVuay5jCkBAIC02Niw5ICs2NiwxMCBAQAogewogCXN0cnVjdCBzY3RwX2RhdGFtc2cgKm1zZzsKIAltc2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhbXNnKSwgZ2ZwKTsKLQlpZiAobXNnKQorCWlmIChtc2cpIHsKIAkJc2N0cF9kYXRhbXNnX2luaXQobXNnKTsKLQlTQ1RQX0RCR19PQkpDTlRfSU5DKGRhdGFtc2cpOworCQlTQ1RQX0RCR19PQkpDTlRfSU5DKGRhdGFtc2cpOworCX0KIAlyZXR1cm4gbXNnOwogfQogCkBAIC0xMzYsMjAgKzEzNyw2IEBACiAJCXNjdHBfZGF0YW1zZ19kZXN0cm95KG1zZyk7CiB9CiAKLS8qIEZyZWUgYSBtZXNzYWdlLiAgUmVhbGx5IGp1c3QgZ2l2ZSB1cCBhIHJlZmVyZW5jZSwgdGhlCi0gKiByZWFsbHkgZnJlZSBoYXBwZW5zIGluIHNjdHBfZGF0YW1zZ19kZXN0cm95KCkuCi0gKi8KLXZvaWQgc2N0cF9kYXRhbXNnX2ZyZWUoc3RydWN0IHNjdHBfZGF0YW1zZyAqbXNnKQotewotCXNjdHBfZGF0YW1zZ19wdXQobXNnKTsKLX0KLQotLyogSG9sZCBvbiB0byBhbGwgdGhlIGZyYWdtZW50cyB1bnRpbCBhbGwgY2h1bmtzIGhhdmUgYmVlbiBzZW50LiAqLwotdm9pZCBzY3RwX2RhdGFtc2dfdHJhY2soc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rKQotewotCXNjdHBfY2h1bmtfaG9sZChjaHVuayk7Ci19Ci0KIC8qIEFzc2lnbiBhIGNodW5rIHRvIHRoaXMgZGF0YW1zZy4gKi8KIHN0YXRpYyB2b2lkIHNjdHBfZGF0YW1zZ19hc3NpZ24oc3RydWN0IHNjdHBfZGF0YW1zZyAqbXNnLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmspCiB7CkBAIC0xODksNyArMTc2LDcgQEAKIAkJCQkgICAgbXNlY3NfdG9famlmZmllcyhzaW5mby0+c2luZm9fdGltZXRvbGl2ZSk7CiAJCW1zZy0+Y2FuX2FiYW5kb24gPSAxOwogCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IG1zZzolcCBleHBpcmVzX2F0OiAlbGQgamlmZmllczolbGRcbiIsCi0JCQkJICBfX0ZVTkNUSU9OX18sIG1zZywgbXNnLT5leHBpcmVzX2F0LCBqaWZmaWVzKTsKKwkJCQkgIF9fZnVuY19fLCBtc2csIG1zZy0+ZXhwaXJlc19hdCwgamlmZmllcyk7CiAJfQogCiAJbWF4ID0gYXNvYy0+ZnJhZ19wb2ludDsKQEAgLTI5NSw3ICsyODIsNyBAQAogCQljaHVuayA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF9jaHVuaywgZnJhZ19saXN0KTsKIAkJc2N0cF9jaHVua19mcmVlKGNodW5rKTsKIAl9Ci0Jc2N0cF9kYXRhbXNnX2ZyZWUobXNnKTsKKwlzY3RwX2RhdGFtc2dfcHV0KG1zZyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2NvbW1hbmQuYyBiL25ldC9zY3RwL2NvbW1hbmQuYwppbmRleCBiYjk3NzMzMC4uYzAwNDQwMSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvY29tbWFuZC5jCisrKyBiL25ldC9zY3RwL2NvbW1hbmQuYwpAQCAtNTIsMTggKzUyLDEyIEBACiAvKiBBZGQgYSBjb21tYW5kIHRvIGEgc2N0cF9jbWRfc2VxX3QuCiAgKiBSZXR1cm4gMCBpZiB0aGUgY29tbWFuZCBzZXF1ZW5jZSBpcyBmdWxsLgogICovCi1pbnQgc2N0cF9hZGRfY21kKHNjdHBfY21kX3NlcV90ICpzZXEsIHNjdHBfdmVyYl90IHZlcmIsIHNjdHBfYXJnX3Qgb2JqKQordm9pZCBzY3RwX2FkZF9jbWRfc2Yoc2N0cF9jbWRfc2VxX3QgKnNlcSwgc2N0cF92ZXJiX3QgdmVyYiwgc2N0cF9hcmdfdCBvYmopCiB7Ci0JaWYgKHNlcS0+bmV4dF9mcmVlX3Nsb3QgPj0gU0NUUF9NQVhfTlVNX0NPTU1BTkRTKQotCQlnb3RvIGZhaWw7CisJQlVHX09OKHNlcS0+bmV4dF9mcmVlX3Nsb3QgPj0gU0NUUF9NQVhfTlVNX0NPTU1BTkRTKTsKIAogCXNlcS0+Y21kc1tzZXEtPm5leHRfZnJlZV9zbG90XS52ZXJiID0gdmVyYjsKIAlzZXEtPmNtZHNbc2VxLT5uZXh0X2ZyZWVfc2xvdCsrXS5vYmogPSBvYmo7Ci0KLQlyZXR1cm4gMTsKLQotZmFpbDoKLQlyZXR1cm4gMDsKIH0KIAogLyogUmV0dXJuIHRoZSBuZXh0IGNvbW1hbmQgc3RydWN0dXJlIGluIGEgc2N0cF9jbWRfc2VxLgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5wdXQuYyBiL25ldC9zY3RwL2lucHV0LmMKaW5kZXggNTdmZTJmOC4uY2E2YjAyMiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5wdXQuYworKysgYi9uZXQvc2N0cC9pbnB1dC5jCkBAIC00MDksNyArNDA5LDcgQEAKIAkJCSAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0KQogewotCVNDVFBfREVCVUdfUFJJTlRLKCIlc1xuIiwgIF9fRlVOQ1RJT05fXyk7CisJU0NUUF9ERUJVR19QUklOVEsoIiVzXG4iLCAgX19mdW5jX18pOwogCiAJc2N0cF9kb19zbShTQ1RQX0VWRU5UX1RfT1RIRVIsCiAJCSAgIFNDVFBfU1RfT1RIRVIoU0NUUF9FVkVOVF9JQ01QX1BST1RPX1VOUkVBQ0gpLApAQCAtNzI1LDcgKzcyNSw2IEBACiAJfQogCiAJZXAgPSBzY3RwX3NrKChzY3RwX2dldF9jdGxfc29jaygpKSktPmVwOwotCWVwYiA9ICZlcC0+YmFzZTsKIAogaGl0OgogCXNjdHBfZW5kcG9pbnRfaG9sZChlcCk7CkBAIC05NDQsNyArOTQzLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqX19zY3RwX3Jjdl9hc2NvbmZfbG9va3VwKAogCQkJCQlzY3RwX2NodW5raGRyX3QgKmNoLAogCQkJCQljb25zdCB1bmlvbiBzY3RwX2FkZHIgKmxhZGRyLAotCQkJCQlfX2JlMzIgcGVlcl9wb3J0LAorCQkJCQlfX2JlMTYgcGVlcl9wb3J0LAogCQkJCQlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKip0cmFuc3BvcnRwKQogewogCXNjdHBfYWRkaXBfY2h1bmtfdCAqYXNjb25mID0gKHN0cnVjdCBzY3RwX2FkZGlwX2NodW5rICopY2g7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggNGQ3ZWM5Ni4uZTQ1ZTQ0YyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtODksNiArODksNyBAQAogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSA9IChzdHJ1Y3QgaW5ldDZfaWZhZGRyICopcHRyOwogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyID0gTlVMTDsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqdGVtcDsKKwlpbnQgZm91bmQgPSAwOwogCiAJc3dpdGNoIChldikgewogCWNhc2UgTkVUREVWX1VQOgpAQCAtMTA5LDE1ICsxMTAsMTcgQEAKIAkJc3Bpbl9sb2NrX2JoKCZzY3RwX2xvY2FsX2FkZHJfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLCB0ZW1wLAogCQkJCQkmc2N0cF9sb2NhbF9hZGRyX2xpc3QsIGxpc3QpIHsKLQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmFkZHItPmEudjYuc2luNl9hZGRyLAotCQkJCQkgICAgICZpZmEtPmFkZHIpKSB7CisJCQlpZiAoYWRkci0+YS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKwkJCQkJaXB2Nl9hZGRyX2VxdWFsKCZhZGRyLT5hLnY2LnNpbjZfYWRkciwKKwkJCQkJCSZpZmEtPmFkZHIpKSB7CisJCQkJZm91bmQgPSAxOwogCQkJCWFkZHItPnZhbGlkID0gMDsKIAkJCQlsaXN0X2RlbF9yY3UoJmFkZHItPmxpc3QpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZzY3RwX2xvY2FsX2FkZHJfbG9jayk7Ci0JCWlmIChhZGRyICYmICFhZGRyLT52YWxpZCkKKwkJaWYgKGZvdW5kKQogCQkJY2FsbF9yY3UoJmFkZHItPnJjdSwgc2N0cF9sb2NhbF9hZGRyX2ZyZWUpOwogCQlicmVhazsKIAl9CkBAIC0yMjMsNyArMjI2LDcgQEAKIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogc2tiOiVwLCBsZW46JWQsICIKIAkJCSAgInNyYzoiIE5JUDZfRk1UICIgZHN0OiIgTklQNl9GTVQgIlxuIiwKLQkJCSAgX19GVU5DVElPTl9fLCBza2IsIHNrYi0+bGVuLAorCQkJICBfX2Z1bmNfXywgc2tiLCBza2ItPmxlbiwKIAkJCSAgTklQNihmbC5mbDZfc3JjKSwgTklQNihmbC5mbDZfZHN0KSk7CiAKIAlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9PVVRTQ1RQUEFDS1MpOwpAQCAtMjQ4LDcgKzI1MSw3IEBACiAKIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogRFNUPSIgTklQNl9GTVQgIiAiLAotCQkJICBfX0ZVTkNUSU9OX18sIE5JUDYoZmwuZmw2X2RzdCkpOworCQkJICBfX2Z1bmNfXywgTklQNihmbC5mbDZfZHN0KSk7CiAKIAlpZiAoc2FkZHIpIHsKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZzYWRkci0+djYuc2luNl9hZGRyKTsKQEAgLTI1Nyw3ICsyNjAsNyBAQAogCQkJTklQNihmbC5mbDZfc3JjKSk7CiAJfQogCi0JZHN0ID0gaXA2X3JvdXRlX291dHB1dChOVUxMLCAmZmwpOworCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoJmluaXRfbmV0LCBOVUxMLCAmZmwpOwogCWlmICghZHN0LT5lcnJvcikgewogCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCQlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilkc3Q7CkBAIC0zMTAsMTAgKzMxMywxMyBAQAogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBhc29jOiVwIGRzdDolcCAiCiAJCQkgICJkYWRkcjoiIE5JUDZfRk1UICIgIiwKLQkJCSAgX19GVU5DVElPTl9fLCBhc29jLCBkc3QsIE5JUDYoZGFkZHItPnY2LnNpbjZfYWRkcikpOworCQkJICBfX2Z1bmNfXywgYXNvYywgZHN0LCBOSVA2KGRhZGRyLT52Ni5zaW42X2FkZHIpKTsKIAogCWlmICghYXNvYykgewotCQlpcHY2X2dldF9zYWRkcihkc3QsICZkYWRkci0+djYuc2luNl9hZGRyLCZzYWRkci0+djYuc2luNl9hZGRyKTsKKwkJaXB2Nl9kZXZfZ2V0X3NhZGRyKGRzdCA/IGlwNl9kc3RfaWRldihkc3QpLT5kZXYgOiBOVUxMLAorCQkJCSAgICZkYWRkci0+djYuc2luNl9hZGRyLAorCQkJCSAgIGluZXQ2X3NrKGFzb2MtPmJhc2Uuc2spLT5zcmNwcmVmcywKKwkJCQkgICAmc2FkZHItPnY2LnNpbjZfYWRkcik7CiAJCVNDVFBfREVCVUdfUFJJTlRLKCJzYWRkciBmcm9tIGlwdjZfZ2V0X3NhZGRyOiAiIE5JUDZfRk1UICJcbiIsCiAJCQkJICBOSVA2KHNhZGRyLT52Ni5zaW42X2FkZHIpKTsKIAkJcmV0dXJuOwpAQCAtMzQ4LDcgKzM1NCw3IEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYXNvYzolcCBDb3VsZCBub3QgZmluZCBhIHZhbGlkIHNvdXJjZSAiCiAJCSAgICAgICAiYWRkcmVzcyBmb3IgdGhlIGRlc3Q6IiBOSVA2X0ZNVCAiXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBhc29jLCBOSVA2KGRhZGRyLT52Ni5zaW42X2FkZHIpKTsKKwkJICAgICAgIF9fZnVuY19fLCBhc29jLCBOSVA2KGRhZGRyLT52Ni5zaW42X2FkZHIpKTsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTYzMSw3ICs2MzcsNyBAQAogCXN0cnVjdCBpcHY2X3BpbmZvICpuZXducCwgKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBzY3RwNl9zb2NrICpuZXdzY3RwNnNrOwogCi0JbmV3c2sgPSBza19hbGxvYyhzay0+c2tfbmV0LCBQRl9JTkVUNiwgR0ZQX0tFUk5FTCwgc2stPnNrX3Byb3QpOworCW5ld3NrID0gc2tfYWxsb2Moc29ja19uZXQoc2spLCBQRl9JTkVUNiwgR0ZQX0tFUk5FTCwgc2stPnNrX3Byb3QpOwogCWlmICghbmV3c2spCiAJCWdvdG8gb3V0OwogCkBAIC05NjYsNyArOTcyLDcgQEAKIAkuZmxhZ3MgICAgICAgID0gSU5FVDZfUFJPVE9fTk9QT0xJQ1kgfCBJTkVUNl9QUk9UT19GSU5BTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2lwdjZfc3BlY2lmaWMgPSB7CitzdGF0aWMgc3RydWN0IHNjdHBfYWYgc2N0cF9hZl9pbmV0NiA9IHsKIAkuc2FfZmFtaWx5CSAgID0gQUZfSU5FVDYsCiAJLnNjdHBfeG1pdAkgICA9IHNjdHBfdjZfeG1pdCwKIAkuc2V0c29ja29wdAkgICA9IGlwdjZfc2V0c29ja29wdCwKQEAgLTk5OCw3ICsxMDA0LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBzY3RwX3BmIHNjdHBfcGZfaW5ldDZfc3BlY2lmaWMgPSB7CitzdGF0aWMgc3RydWN0IHNjdHBfcGYgc2N0cF9wZl9pbmV0NiA9IHsKIAkuZXZlbnRfbXNnbmFtZSA9IHNjdHBfaW5ldDZfZXZlbnRfbXNnbmFtZSwKIAkuc2tiX21zZ25hbWUgICA9IHNjdHBfaW5ldDZfc2tiX21zZ25hbWUsCiAJLmFmX3N1cHBvcnRlZCAgPSBzY3RwX2luZXQ2X2FmX3N1cHBvcnRlZCwKQEAgLTEwMDgsMTkgKzEwMTQsMjggQEAKIAkuc3VwcG9ydGVkX2FkZHJzID0gc2N0cF9pbmV0Nl9zdXBwb3J0ZWRfYWRkcnMsCiAJLmNyZWF0ZV9hY2NlcHRfc2sgPSBzY3RwX3Y2X2NyZWF0ZV9hY2NlcHRfc2ssCiAJLmFkZHJfdjRtYXAgICAgPSBzY3RwX3Y2X2FkZHJfdjRtYXAsCi0JLmFmICAgICAgICAgICAgPSAmc2N0cF9pcHY2X3NwZWNpZmljLAorCS5hZiAgICAgICAgICAgID0gJnNjdHBfYWZfaW5ldDYsCiB9OwogCiAvKiBJbml0aWFsaXplIElQdjYgc3VwcG9ydCBhbmQgcmVnaXN0ZXIgd2l0aCBzb2NrZXQgbGF5ZXIuICAqLwotaW50IHNjdHBfdjZfaW5pdCh2b2lkKQordm9pZCBzY3RwX3Y2X3BmX2luaXQodm9pZCkKIHsKLQlpbnQgcmM7Ci0KIAkvKiBSZWdpc3RlciB0aGUgU0NUUCBzcGVjaWZpYyBQRl9JTkVUNiBmdW5jdGlvbnMuICovCi0Jc2N0cF9yZWdpc3Rlcl9wZigmc2N0cF9wZl9pbmV0Nl9zcGVjaWZpYywgUEZfSU5FVDYpOworCXNjdHBfcmVnaXN0ZXJfcGYoJnNjdHBfcGZfaW5ldDYsIFBGX0lORVQ2KTsKIAogCS8qIFJlZ2lzdGVyIHRoZSBTQ1RQIHNwZWNpZmljIEFGX0lORVQ2IGZ1bmN0aW9ucy4gKi8KLQlzY3RwX3JlZ2lzdGVyX2FmKCZzY3RwX2lwdjZfc3BlY2lmaWMpOworCXNjdHBfcmVnaXN0ZXJfYWYoJnNjdHBfYWZfaW5ldDYpOworfQorCit2b2lkIHNjdHBfdjZfcGZfZXhpdCh2b2lkKQoreworCWxpc3RfZGVsKCZzY3RwX2FmX2luZXQ2Lmxpc3QpOworfQorCisvKiBJbml0aWFsaXplIElQdjYgc3VwcG9ydCBhbmQgcmVnaXN0ZXIgd2l0aCBzb2NrZXQgbGF5ZXIuICAqLworaW50IHNjdHBfdjZfcHJvdG9zd19pbml0KHZvaWQpCit7CisJaW50IHJjOwogCiAJcmMgPSBwcm90b19yZWdpc3Rlcigmc2N0cHY2X3Byb3QsIDEpOwogCWlmIChyYykKQEAgLTEwMzMsNiArMTA0OCwxNCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHNjdHBfdjZfcHJvdG9zd19leGl0KHZvaWQpCit7CisJaW5ldDZfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwdjZfc2VxcGFja2V0X3Byb3Rvc3cpOworCWluZXQ2X3VucmVnaXN0ZXJfcHJvdG9zdygmc2N0cHY2X3N0cmVhbV9wcm90b3N3KTsKKwlwcm90b191bnJlZ2lzdGVyKCZzY3RwdjZfcHJvdCk7Cit9CisKKwogLyogUmVnaXN0ZXIgd2l0aCBpbmV0NiBsYXllci4gKi8KIGludCBzY3RwX3Y2X2FkZF9wcm90b2NvbCh2b2lkKQogewpAQCAtMTA0NSwxNSArMTA2OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIElQdjYgc3BlY2lmaWMgZXhpdCBzdXBwb3J0LiAqLwotdm9pZCBzY3RwX3Y2X2V4aXQodm9pZCkKLXsKLQlpbmV0Nl91bnJlZ2lzdGVyX3Byb3Rvc3coJnNjdHB2Nl9zZXFwYWNrZXRfcHJvdG9zdyk7Ci0JaW5ldDZfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwdjZfc3RyZWFtX3Byb3Rvc3cpOwotCXByb3RvX3VucmVnaXN0ZXIoJnNjdHB2Nl9wcm90KTsKLQlsaXN0X2RlbCgmc2N0cF9pcHY2X3NwZWNpZmljLmxpc3QpOwotfQotCiAvKiBVbnJlZ2lzdGVyIHdpdGggaW5ldDYgbGF5ZXIuICovCiB2b2lkIHNjdHBfdjZfZGVsX3Byb3RvY29sKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vYmpjbnQuYyBiL25ldC9zY3RwL29iamNudC5jCmluZGV4IDE0ZTI5NGUuLmNmZWIwN2UgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL29iamNudC5jCisrKyBiL25ldC9zY3RwL29iamNudC5jCkBAIC0xMzIsMTIgKzEzMiwxMSBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInNjdHBfZGJnX29iamNudCIsIDAsIHByb2NfbmV0X3NjdHApOworCWVudCA9IHByb2NfY3JlYXRlKCJzY3RwX2RiZ19vYmpjbnQiLCAwLAorCQkJICBwcm9jX25ldF9zY3RwLCAmc2N0cF9vYmpjbnRfb3BzKTsKIAlpZiAoIWVudCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJInNjdHBfZGJnX29iamNudDogVW5hYmxlIHRvIGNyZWF0ZSAvcHJvYyBlbnRyeS5cbiIpOwotCWVsc2UKLQkJZW50LT5wcm9jX2ZvcHMgPSAmc2N0cF9vYmpjbnRfb3BzOwogfQogCiAvKiBDbGVhbnVwIHRoZSBvYmpjb3VudCBlbnRyeSBpbiB0aGUgcHJvYyBmaWxlc3lzdGVtLiAgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggYWE3MDBmZS4uY2Y0ZjlmYiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKKysrIGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTc0LDcgKzc0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBOVUxMOwogCi0JU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXAgdnRhZzoweCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXAgdnRhZzoweCV4XG4iLCBfX2Z1bmNfXywKIAkJCSAgcGFja2V0LCB2dGFnKTsKIAogCXBhY2tldC0+dnRhZyA9IHZ0YWc7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHRyYW5zcG9ydC0+YXNvYzsKIAlzaXplX3Qgb3ZlcmhlYWQ7CiAKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHBhY2tldDolcCB0cmFuc3BvcnQ6JXBcbiIsIF9fRlVOQ1RJT05fXywKKwlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHBhY2tldDolcCB0cmFuc3BvcnQ6JXBcbiIsIF9fZnVuY19fLAogCQkJICBwYWNrZXQsIHRyYW5zcG9ydCk7CiAKIAlwYWNrZXQtPnRyYW5zcG9ydCA9IHRyYW5zcG9ydDsKQEAgLTEzOCw3ICsxMzgsNyBAQAogewogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAotCVNDVFBfREVCVUdfUFJJTlRLKCIlczogcGFja2V0OiVwXG4iLCBfX0ZVTkNUSU9OX18sIHBhY2tldCk7CisJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXBcbiIsIF9fZnVuY19fLCBwYWNrZXQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNodW5rLCB0bXAsICZwYWNrZXQtPmNodW5rX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWxfaW5pdCgmY2h1bmstPmxpc3QpOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJc2N0cF94bWl0X3QgcmV0dmFsOwogCWludCBlcnJvciA9IDA7CiAKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHBhY2tldDolcCBjaHVuazolcFxuIiwgX19GVU5DVElPTl9fLAorCVNDVFBfREVCVUdfUFJJTlRLKCIlczogcGFja2V0OiVwIGNodW5rOiVwXG4iLCBfX2Z1bmNfXywKIAkJCSAgcGFja2V0LCBjaHVuayk7CiAKIAlzd2l0Y2ggKChyZXR2YWwgPSAoc2N0cF9wYWNrZXRfYXBwZW5kX2NodW5rKHBhY2tldCwgY2h1bmspKSkpIHsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCXNpemVfdCBwbXR1OwogCWludCB0b29fYmlnOwogCi0JU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXAgY2h1bms6JXBcbiIsIF9fRlVOQ1RJT05fXywgcGFja2V0LAorCVNDVFBfREVCVUdfUFJJTlRLKCIlczogcGFja2V0OiVwIGNodW5rOiVwXG4iLCBfX2Z1bmNfXywgcGFja2V0LAogCQkJICBjaHVuayk7CiAKIAkvKiBUcnkgdG8gYnVuZGxlIEFVVEggY2h1bmsgKi8KQEAgLTM3Miw3ICszNzIsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmF1dGggPSBOVUxMOwkvKiBwb2ludGVyIHRvIGF1dGggaW4gc2tiIGRhdGEgKi8KIAlfX3UzMiBja3N1bV9idWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKIAotCVNDVFBfREVCVUdfUFJJTlRLKCIlczogcGFja2V0OiVwXG4iLCBfX0ZVTkNUSU9OX18sIHBhY2tldCk7CisJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXBcbiIsIF9fZnVuY19fLCBwYWNrZXQpOwogCiAJLyogRG8gTk9UIGdlbmVyYXRlIGEgY2h1bmtsZXNzIHBhY2tldC4gKi8KIAlpZiAobGlzdF9lbXB0eSgmcGFja2V0LT5jaHVua19saXN0KSkKQEAgLTY3Nyw3ICs2NzcsNyBAQAogCQkJCSAgInRyYW5zcG9ydDogJXAsIGN3bmQ6ICVkLCAiCiAJCQkJICAic3N0aHJlc2g6ICVkLCBmbGlnaHRfc2l6ZTogJWQsICIKIAkJCQkgICJwYmE6ICVkXG4iLAotCQkJCSAgX19GVU5DVElPTl9fLCB0cmFuc3BvcnQsCisJCQkJICBfX2Z1bmNfXywgdHJhbnNwb3J0LAogCQkJCSAgdHJhbnNwb3J0LT5jd25kLAogCQkJCSAgdHJhbnNwb3J0LT5zc3RocmVzaCwKIAkJCQkgIHRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUsCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCAxYmIzYzVjLi41OWVkZmQyIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTIyMSwxMiArMjIxLDEyIEBACiB2b2lkIHNjdHBfb3V0cV90ZWFyZG93bihzdHJ1Y3Qgc2N0cF9vdXRxICpxKQogewogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxjaHVuaywgKnBvcywgKnRlbXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGNodW5rLCAqdGVtcDsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssICp0bXA7CiAKIAkvKiBUaHJvdyBhd2F5IHVuYWNrbm93bGVkZ2VkIGNodW5rcy4gKi8KLQlsaXN0X2Zvcl9lYWNoKHBvcywgJnEtPmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQl0cmFuc3BvcnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfdHJhbnNwb3J0LCB0cmFuc3BvcnRzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zcG9ydCwgJnEtPmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKKwkJCXRyYW5zcG9ydHMpIHsKIAkJd2hpbGUgKChsY2h1bmsgPSBzY3RwX2xpc3RfZGVxdWV1ZSgmdHJhbnNwb3J0LT50cmFuc21pdHRlZCkpICE9IE5VTEwpIHsKIAkJCWNodW5rID0gbGlzdF9lbnRyeShsY2h1bmssIHN0cnVjdCBzY3RwX2NodW5rLAogCQkJCQkgICB0cmFuc21pdHRlZF9saXN0KTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiB0cmFuc3BvcnQ6ICVwLCByZWFzb246ICVkLCAiCiAJCQkgICJjd25kOiAlZCwgc3N0aHJlc2g6ICVkLCBmbGlnaHRfc2l6ZTogJWQsICIKLQkJCSAgInBiYTogJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgInBiYTogJWRcbiIsIF9fZnVuY19fLAogCQkJICB0cmFuc3BvcnQsIHJlYXNvbiwKIAkJCSAgdHJhbnNwb3J0LT5jd25kLCB0cmFuc3BvcnQtPnNzdGhyZXNoLAogCQkJICB0cmFuc3BvcnQtPmZsaWdodF9zaXplLApAQCAtNDk0LDYgKzQ5NCw4IEBACiAJCSAqLwogCQlpZiAodHJhbnNwb3J0ID09IHRyYW5zcG9ydC0+YXNvYy0+cGVlci5yZXRyYW5fcGF0aCkKIAkJCXNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKHRyYW5zcG9ydC0+YXNvYyk7CisJCXRyYW5zcG9ydC0+YXNvYy0+cnR4X2RhdGFfY2h1bmtzICs9CisJCQl0cmFuc3BvcnQtPmFzb2MtPnVuYWNrX2RhdGE7CiAJCWJyZWFrOwogCWNhc2UgU0NUUF9SVFhSX0ZBU1RfUlRYOgogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9GQVNUX1JFVFJBTlNNSVRTKTsKQEAgLTUwNCw2ICs1MDYsNyBAQAogCQlicmVhazsKIAljYXNlIFNDVFBfUlRYUl9UMV9SVFg6CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX1QxX1JFVFJBTlNNSVRTKTsKKwkJdHJhbnNwb3J0LT5hc29jLT5pbml0X3JldHJpZXMrKzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CkBAIC01MzUsNyArNTM4LDcgQEAKIAkJCSAgICAgICBpbnQgcnR4X3RpbWVvdXQsIGludCAqc3RhcnRfdGltZXIpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHF1ZXVlOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxjaHVuaywgKmxjaHVuazE7CisJc3RydWN0IGxpc3RfaGVhZCAqbGNodW5rOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gcGt0LT50cmFuc3BvcnQ7CiAJc2N0cF94bWl0X3Qgc3RhdHVzOwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKmNodW5rMTsKQEAgLTY0Niw5ICs2NDksNyBAQAogCQkgKiB0byBiZSBtYXJrZWQgYXMgaW5lbGlnaWJsZSBmb3IgYSBzdWJzZXF1ZW50IGZhc3QgcmV0cmFuc21pdC4KIAkJICovCiAJCWlmIChydHhfdGltZW91dCAmJiAhbGNodW5rKSB7Ci0JCQlsaXN0X2Zvcl9lYWNoKGxjaHVuazEsIGxxdWV1ZSkgewotCQkJCWNodW5rMSA9IGxpc3RfZW50cnkobGNodW5rMSwgc3RydWN0IHNjdHBfY2h1bmssCi0JCQkJCQkgICAgdHJhbnNtaXR0ZWRfbGlzdCk7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rMSwgbHF1ZXVlLCB0cmFuc21pdHRlZF9saXN0KSB7CiAJCQkJaWYgKGNodW5rMS0+ZmFzdF9yZXRyYW5zbWl0ID4gMCkKIAkJCQkJY2h1bmsxLT5mYXN0X3JldHJhbnNtaXQgPSAtMTsKIAkJCX0KQEAgLTc5Myw2ICs3OTQsOSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1RQX0NJRF9BQk9SVDoKKwkJCWlmIChzY3RwX3Rlc3RfVF9iaXQoY2h1bmspKSB7CisJCQkJcGFja2V0LT52dGFnID0gYXNvYy0+Yy5teV92dGFnOworCQkJfQogCQljYXNlIFNDVFBfQ0lEX1NBQ0s6CiAJCWNhc2UgU0NUUF9DSURfSEVBUlRCRUFUOgogCQljYXNlIFNDVFBfQ0lEX0hFQVJUQkVBVF9BQ0s6CkBAIC0xMDM0LDcgKzEwMzgsNiBAQAogc3RhdGljIF9fdTMyIHNjdHBfaGlnaGVzdF9uZXdfdHNuKHN0cnVjdCBzY3RwX3NhY2toZHIgKnNhY2ssCiAJCQkJICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsdHJhbnNwb3J0LCAqbGNodW5rOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKIAlfX3UzMiBoaWdoZXN0X25ld190c24sIHRzbjsKQEAgLTEwNDIsMTIgKzEwNDUsOSBAQAogCiAJaGlnaGVzdF9uZXdfdHNuID0gbnRvaGwoc2Fjay0+Y3VtX3Rzbl9hY2spOwogCi0JbGlzdF9mb3JfZWFjaChsdHJhbnNwb3J0LCB0cmFuc3BvcnRfbGlzdCkgewotCQl0cmFuc3BvcnQgPSBsaXN0X2VudHJ5KGx0cmFuc3BvcnQsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwKLQkJCQkgICAgICAgdHJhbnNwb3J0cyk7Ci0JCWxpc3RfZm9yX2VhY2gobGNodW5rLCAmdHJhbnNwb3J0LT50cmFuc21pdHRlZCkgewotCQkJY2h1bmsgPSBsaXN0X2VudHJ5KGxjaHVuaywgc3RydWN0IHNjdHBfY2h1bmssCi0JCQkJCSAgIHRyYW5zbWl0dGVkX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnNwb3J0LCB0cmFuc3BvcnRfbGlzdCwgdHJhbnNwb3J0cykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmdHJhbnNwb3J0LT50cmFuc21pdHRlZCwKKwkJCQl0cmFuc21pdHRlZF9saXN0KSB7CiAJCQl0c24gPSBudG9obChjaHVuay0+c3ViaC5kYXRhX2hkci0+dHNuKTsKIAogCQkJaWYgKCFjaHVuay0+dHNuX2dhcF9hY2tlZCAmJgpAQCAtMTA3MCw3ICsxMDcwLDcgQEAKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHEtPmFzb2M7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnRjaHVuayA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGNodW5rLCAqdHJhbnNwb3J0X2xpc3QsICpwb3MsICp0ZW1wOworCXN0cnVjdCBsaXN0X2hlYWQgKmxjaHVuaywgKnRyYW5zcG9ydF9saXN0LCAqdGVtcDsKIAlzY3RwX3NhY2tfdmFyaWFibGVfdCAqZnJhZ3MgPSBzYWNrLT52YXJpYWJsZTsKIAlfX3UzMiBzYWNrX2N0c24sIGN0c24sIHRzbjsKIAlfX3UzMiBoaWdoZXN0X3RzbiwgaGlnaGVzdF9uZXdfdHNuOwpAQCAtMTA5Niw5ICsxMDk2LDggQEAKIAkgKi8KIAlpZiAoVFNOX2x0ZShwcmltYXJ5LT5jYWNjLm5leHRfdHNuX2F0X2NoYW5nZSwgc2Fja19jdHNuKSkgewogCQlwcmltYXJ5LT5jYWNjLmNoYW5nZW92ZXJfYWN0aXZlID0gMDsKLQkJbGlzdF9mb3JfZWFjaChwb3MsIHRyYW5zcG9ydF9saXN0KSB7Ci0JCQl0cmFuc3BvcnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfdHJhbnNwb3J0LAotCQkJCQl0cmFuc3BvcnRzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsIHRyYW5zcG9ydF9saXN0LAorCQkJCXRyYW5zcG9ydHMpIHsKIAkJCXRyYW5zcG9ydC0+Y2FjYy5jeWNsaW5nX2NoYW5nZW92ZXIgPSAwOwogCQl9CiAJfQpAQCAtMTExMyw5ICsxMTEyLDcgQEAKIAkgKi8KIAlpZiAoc2Fjay0+bnVtX2dhcF9hY2tfYmxvY2tzICYmCiAJICAgIHByaW1hcnktPmNhY2MuY2hhbmdlb3Zlcl9hY3RpdmUpIHsKLQkJbGlzdF9mb3JfZWFjaChwb3MsIHRyYW5zcG9ydF9saXN0KSB7Ci0JCQl0cmFuc3BvcnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfdHJhbnNwb3J0LAotCQkJCQl0cmFuc3BvcnRzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsIHRyYW5zcG9ydF9saXN0LCB0cmFuc3BvcnRzKSB7CiAJCQl0cmFuc3BvcnQtPmNhY2MuY2FjY19zYXdfbmV3YWNrID0gMDsKIAkJfQogCX0KQEAgLTExNDQsOSArMTE0MSw3IEBACiAJICoKIAkgKiBUaGlzIGlzIGEgTUFTU0lWRSBjYW5kaWRhdGUgZm9yIG9wdGltaXphdGlvbi4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoKHBvcywgdHJhbnNwb3J0X2xpc3QpIHsKLQkJdHJhbnNwb3J0ICA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsCi0JCQkJCXRyYW5zcG9ydHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnNwb3J0LCB0cmFuc3BvcnRfbGlzdCwgdHJhbnNwb3J0cykgewogCQlzY3RwX2NoZWNrX3RyYW5zbWl0dGVkKHEsICZ0cmFuc3BvcnQtPnRyYW5zbWl0dGVkLAogCQkJCSAgICAgICB0cmFuc3BvcnQsIHNhY2ssIGhpZ2hlc3RfbmV3X3Rzbik7CiAJCS8qCkBAIC0xMTU4LDkgKzExNTMsNyBAQAogCQkJY291bnRfb2ZfbmV3YWNrcyArKzsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoKHBvcywgdHJhbnNwb3J0X2xpc3QpIHsKLQkJdHJhbnNwb3J0ICA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsCi0JCQkJCXRyYW5zcG9ydHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnNwb3J0LCB0cmFuc3BvcnRfbGlzdCwgdHJhbnNwb3J0cykgewogCQlzY3RwX21hcmtfbWlzc2luZyhxLCAmdHJhbnNwb3J0LT50cmFuc21pdHRlZCwgdHJhbnNwb3J0LAogCQkJCSAgaGlnaGVzdF9uZXdfdHNuLCBjb3VudF9vZl9uZXdhY2tzKTsKIAl9CkBAIC0xMjAzLDEwICsxMTk2LDEwIEBACiAJc2N0cF9nZW5lcmF0ZV9md2R0c24ocSwgc2Fja19jdHNuKTsKIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogc2FjayBDdW11bGF0aXZlIFRTTiBBY2sgaXMgMHgleC5cbiIsCi0JCQkgIF9fRlVOQ1RJT05fXywgc2Fja19jdHNuKTsKKwkJCSAgX19mdW5jX18sIHNhY2tfY3Rzbik7CiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBDdW11bGF0aXZlIFRTTiBBY2sgb2YgYXNzb2NpYXRpb24sICIKIAkJCSAgIiVwIGlzIDB4JXguIEFkdiBwZWVyIGFjayBwb2ludDogMHgleFxuIiwKLQkJCSAgX19GVU5DVElPTl9fLCBhc29jLCBjdHNuLCBhc29jLT5hZHZfcGVlcl9hY2tfcG9pbnQpOworCQkJICBfX2Z1bmNfXywgYXNvYywgY3RzbiwgYXNvYy0+YWR2X3BlZXJfYWNrX3BvaW50KTsKIAogCS8qIFNlZSBpZiBhbGwgY2h1bmtzIGFyZSBhY2tlZC4KIAkgKiBNYWtlIHN1cmUgdGhlIGVtcHR5IHF1ZXVlIGhhbmRsZXIgd2lsbCBnZXQgcnVuIGxhdGVyLgpAQCAtMTIxNyw5ICsxMjEwLDcgQEAKIAlpZiAoIXEtPmVtcHR5KQogCQlnb3RvIGZpbmlzaDsKIAotCWxpc3RfZm9yX2VhY2gocG9zLCB0cmFuc3BvcnRfbGlzdCkgewotCQl0cmFuc3BvcnQgID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwKLQkJCQkJdHJhbnNwb3J0cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsIHRyYW5zcG9ydF9saXN0LCB0cmFuc3BvcnRzKSB7CiAJCXEtPmVtcHR5ID0gcS0+ZW1wdHkgJiYgbGlzdF9lbXB0eSgmdHJhbnNwb3J0LT50cmFuc21pdHRlZCk7CiAJCWlmICghcS0+ZW1wdHkpCiAJCQlnb3RvIGZpbmlzaDsKQEAgLTE0NDEsNyArMTQzMiw3IEBACiAJCQlpZiAodGNodW5rLT50c25fZ2FwX2Fja2VkKSB7CiAJCQkJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBSZWNlaXZlciByZW5lZ2VkIG9uICIKIAkJCQkJCSAgImRhdGEgVFNOOiAweCV4XG4iLAotCQkJCQkJICBfX0ZVTkNUSU9OX18sCisJCQkJCQkgIF9fZnVuY19fLAogCQkJCQkJICB0c24pOwogCQkJCXRjaHVuay0+dHNuX2dhcF9hY2tlZCA9IDA7CiAKQEAgLTE1NDEsNiArMTUzMiw4IEBACiAJCQkJCQkgIGJ5dGVzX2Fja2VkKTsKIAogCQkJdHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSAtPSBieXRlc19hY2tlZDsKKwkJCWlmICh0cmFuc3BvcnQtPmZsaWdodF9zaXplID09IDApCisJCQkJdHJhbnNwb3J0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKIAkJCXEtPm91dHN0YW5kaW5nX2J5dGVzIC09IGJ5dGVzX2Fja2VkOwogCQl9IGVsc2UgewogCQkJLyogUkZDIDI5NjAgNi4xLCBzY3RwaW1wZ3VpZGUtMDYgMi4xNS4yCkBAIC0xNTU4LDcgKzE1NTEsNyBAQAogCQkJICAgIChzYWNrX2N0c24rMiA9PSBxLT5hc29jLT5uZXh0X3RzbikpIHsKIAkJCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IFNBQ0sgcmVjZWl2ZWQgZm9yIHplcm8gIgogCQkJCQkJICAid2luZG93IHByb2JlOiAldVxuIiwKLQkJCQkJCSAgX19GVU5DVElPTl9fLCBzYWNrX2N0c24pOworCQkJCQkJICBfX2Z1bmNfXywgc2Fja19jdHNuKTsKIAkJCQlxLT5hc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKIAkJCQl0cmFuc3BvcnQtPmVycm9yX2NvdW50ID0gMDsKIAkJCX0KQEAgLTE1OTMsMTQgKzE1ODYsMTIgQEAKIAkJCSAgICAgIGludCBjb3VudF9vZl9uZXdhY2tzKQogewogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJX191MzIgdHNuOwogCWNoYXIgZG9fZmFzdF9yZXRyYW5zbWl0ID0gMDsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnByaW1hcnkgPSBxLT5hc29jLT5wZWVyLnByaW1hcnlfcGF0aDsKIAotCWxpc3RfZm9yX2VhY2gocG9zLCB0cmFuc21pdHRlZF9xdWV1ZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssIHRyYW5zbWl0dGVkX3F1ZXVlLCB0cmFuc21pdHRlZF9saXN0KSB7CiAKLQkJY2h1bmsgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfY2h1bmssIHRyYW5zbWl0dGVkX2xpc3QpOwogCQl0c24gPSBudG9obChjaHVuay0+c3ViaC5kYXRhX2hkci0+dHNuKTsKIAogCQkvKiBSRkMgMjk2MCA3LjIuNCwgc2N0cGltcGd1aWRlLTA1IDIuOC4yIE0zKSBFeGFtaW5lIGFsbApAQCAtMTYyMyw3ICsxNjE0LDcgQEAKIAogCQkJCVNDVFBfREVCVUdfUFJJTlRLKAogCQkJCQkiJXM6IFRTTiAweCV4IG1pc3NpbmcgY291bnRlcjogJWRcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgdHNuLAorCQkJCQlfX2Z1bmNfXywgdHNuLAogCQkJCQljaHVuay0+dHNuX21pc3NpbmdfcmVwb3J0KTsKIAkJCX0KIAkJfQpAQCAtMTY0Niw3ICsxNjM3LDcgQEAKIAogCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHRyYW5zcG9ydDogJXAsIGN3bmQ6ICVkLCAiCiAJCQkJICAic3N0aHJlc2g6ICVkLCBmbGlnaHRfc2l6ZTogJWQsIHBiYTogJWRcbiIsCi0JCQkJICBfX0ZVTkNUSU9OX18sIHRyYW5zcG9ydCwgdHJhbnNwb3J0LT5jd25kLAorCQkJCSAgX19mdW5jX18sIHRyYW5zcG9ydCwgdHJhbnNwb3J0LT5jd25kLAogCQkJCSAgdHJhbnNwb3J0LT5zc3RocmVzaCwgdHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSwKIAkJCQkgIHRyYW5zcG9ydC0+cGFydGlhbF9ieXRlc19hY2tlZCk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvYy5jIGIvbmV0L3NjdHAvcHJvYy5jCmluZGV4IDY5YmI1YTYuLjBhYmE3NTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb2MuYworKysgYi9uZXQvc2N0cC9wcm9jLmMKQEAgLTEwOCwxMiArMTA4LDEwIEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwogCi0JcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzbm1wIiwgU19JUlVHTywgcHJvY19uZXRfc2N0cCk7CisJcCA9IHByb2NfY3JlYXRlKCJzbm1wIiwgU19JUlVHTywgcHJvY19uZXRfc2N0cCwgJnNjdHBfc25tcF9zZXFfZm9wcyk7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXAtPnByb2NfZm9wcyA9ICZzY3RwX3NubXBfc2VxX2ZvcHM7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI2LDcgKzEyNCw2IEBACiAvKiBEdW1wIGxvY2FsIGFkZHJlc3NlcyBvZiBhbiBhc3NvY2lhdGlvbi9lbmRwb2ludC4gKi8KIHN0YXRpYyB2b2lkIHNjdHBfc2VxX2R1bXBfbG9jYWxfYWRkcnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzY3RwX2VwX2NvbW1vbiAqZXBiKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqbGFkZHI7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpwZWVyOwpAQCAtMTM5LDggKzEzNiw3IEBACiAJICAgIHByaW1hcnkgPSAmcGVlci0+c2FkZHI7CiAJfQogCi0JbGlzdF9mb3JfZWFjaChwb3MsICZlcGItPmJpbmRfYWRkci5hZGRyZXNzX2xpc3QpIHsKLQkJbGFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobGFkZHIsICZlcGItPmJpbmRfYWRkci5hZGRyZXNzX2xpc3QsIGxpc3QpIHsKIAkJYWRkciA9ICZsYWRkci0+YTsKIAkJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhhZGRyLT5zYS5zYV9mYW1pbHkpOwogCQlpZiAocHJpbWFyeSAmJiBhZi0+Y21wX2FkZHIoYWRkciwgcHJpbWFyeSkpIHsKQEAgLTE1MywxNCArMTQ5LDEzIEBACiAvKiBEdW1wIHJlbW90ZSBhZGRyZXNzZXMgb2YgYW4gYXNzb2NpYXRpb24uICovCiBzdGF0aWMgdm9pZCBzY3RwX3NlcV9kdW1wX3JlbW90ZV9hZGRycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAl1bmlvbiBzY3RwX2FkZHIgKmFkZHIsICpwcmltYXJ5OwogCXN0cnVjdCBzY3RwX2FmICphZjsKIAogCXByaW1hcnkgPSAmYXNzb2MtPnBlZXIucHJpbWFyeV9hZGRyOwotCWxpc3RfZm9yX2VhY2gocG9zLCAmYXNzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQl0cmFuc3BvcnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfdHJhbnNwb3J0LCB0cmFuc3BvcnRzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zcG9ydCwgJmFzc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQl0cmFuc3BvcnRzKSB7CiAJCWFkZHIgPSAmdHJhbnNwb3J0LT5pcGFkZHI7CiAJCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMoYWRkci0+c2Euc2FfZmFtaWx5KTsKIAkJaWYgKGFmLT5jbXBfYWRkcihhZGRyLCBwcmltYXJ5KSkgewpAQCAtMjU4LDEyICsyNTMsMTAgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoImVwcyIsIFNfSVJVR08sIHByb2NfbmV0X3NjdHApOworCXAgPSBwcm9jX2NyZWF0ZSgiZXBzIiwgU19JUlVHTywgcHJvY19uZXRfc2N0cCwgJnNjdHBfZXBzX3NlcV9mb3BzKTsKIAlpZiAoIXApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcC0+cHJvY19mb3BzID0gJnNjdHBfZXBzX3NlcV9mb3BzOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4Myw4ICsyNzYsMTAgQEAKIAkJKnBvcyA9IDA7CiAKIAlpZiAoKnBvcyA9PSAwKQotCQlzZXFfcHJpbnRmKHNlcSwgIiBBU1NPQyAgICAgU09DSyAgIFNUWSBTU1QgU1QgSEJLVCBBU1NPQy1JRCBUWF9RVUVVRSBSWF9RVUVVRSBVSUQgSU5PREUgTFBPUlQgIgotCQkJCSJSUE9SVCBMQUREUlMgPC0+IFJBRERSU1xuIik7CisJCXNlcV9wcmludGYoc2VxLCAiIEFTU09DICAgICBTT0NLICAgU1RZIFNTVCBTVCBIQktUICIKKwkJCQkiQVNTT0MtSUQgVFhfUVVFVUUgUlhfUVVFVUUgVUlEIElOT0RFIExQT1JUICIKKwkJCQkiUlBPUlQgTEFERFJTIDwtPiBSQUREUlMgIgorCQkJCSJIQklOVCBJTlMgT1VUUyBNQVhSVCBUMVggVDJYIFJUWENcbiIpOwogCiAJcmV0dXJuICh2b2lkICopcG9zOwogfQpAQCAtMzIzLDE5ICszMTgsMjUgQEAKIAkJYXNzb2MgPSBzY3RwX2Fzc29jKGVwYik7CiAJCXNrID0gZXBiLT5zazsKIAkJc2VxX3ByaW50ZihzZXEsCi0JCQkgICAiJThwICU4cCAlLTNkICUtM2QgJS0yZCAlLTRkICU0ZCAlOGQgJThkICU3ZCAlNWx1ICUtNWQgJTVkICIsCisJCQkgICAiJThwICU4cCAlLTNkICUtM2QgJS0yZCAlLTRkICIKKwkJCSAgICIlNGQgJThkICU4ZCAlN2QgJTVsdSAlLTVkICU1ZCAiLAogCQkJICAgYXNzb2MsIHNrLCBzY3RwX3NrKHNrKS0+dHlwZSwgc2stPnNrX3N0YXRlLAotCQkJICAgYXNzb2MtPnN0YXRlLCBoYXNoLCBhc3NvYy0+YXNzb2NfaWQsCisJCQkgICBhc3NvYy0+c3RhdGUsIGhhc2gsCisJCQkgICBhc3NvYy0+YXNzb2NfaWQsCiAJCQkgICBhc3NvYy0+c25kYnVmX3VzZWQsCiAJCQkgICBhdG9taWNfcmVhZCgmYXNzb2MtPnJtZW1fYWxsb2MpLAogCQkJICAgc29ja19pX3VpZChzayksIHNvY2tfaV9pbm8oc2spLAogCQkJICAgZXBiLT5iaW5kX2FkZHIucG9ydCwKIAkJCSAgIGFzc29jLT5wZWVyLnBvcnQpOwotCiAJCXNlcV9wcmludGYoc2VxLCAiICIpOwogCQlzY3RwX3NlcV9kdW1wX2xvY2FsX2FkZHJzKHNlcSwgZXBiKTsKIAkJc2VxX3ByaW50ZihzZXEsICI8LT4gIik7CiAJCXNjdHBfc2VxX2R1bXBfcmVtb3RlX2FkZHJzKHNlcSwgYXNzb2MpOworCQlzZXFfcHJpbnRmKHNlcSwgIlx0JThsdSAlNWQgJTVkICU0ZCAlNGQgJTRkICU4ZCAiLAorCQkJYXNzb2MtPmhiaW50ZXJ2YWwsIGFzc29jLT5jLnNpbml0X21heF9pbnN0cmVhbXMsCisJCQlhc3NvYy0+Yy5zaW5pdF9udW1fb3N0cmVhbXMsIGFzc29jLT5tYXhfcmV0cmFucywKKwkJCWFzc29jLT5pbml0X3JldHJpZXMsIGFzc29jLT5zaHV0ZG93bl9yZXRyaWVzLAorCQkJYXNzb2MtPnJ0eF9kYXRhX2NodW5rcyk7CiAJCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKIAl9CiAJcmVhZF91bmxvY2soJmhlYWQtPmxvY2spOwpAQCAtMzY5LDEyICszNzAsMTEgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoImFzc29jcyIsIFNfSVJVR08sIHByb2NfbmV0X3NjdHApOworCXAgPSBwcm9jX2NyZWF0ZSgiYXNzb2NzIiwgU19JUlVHTywgcHJvY19uZXRfc2N0cCwKKwkJCSZzY3RwX2Fzc29jc19zZXFfZm9wcyk7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXAtPnByb2NfZm9wcyA9ICZzY3RwX2Fzc29jc19zZXFfZm9wczsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCAyMmExNjU3Li4wZWMyMzRiIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTc0LDcgKzc0LDcgQEAKICAqIHRoZSBPdXQtb2YtdGhlLWJsdWUgKE9PVEIpIHBhY2tldHMuICBBIGNvbnRyb2wgc29jayB3aWxsIGJlIGNyZWF0ZWQKICAqIGZvciB0aGlzIHNvY2tldCBhdCB0aGUgaW5pdGlhbGl6YXRpb24gdGltZS4KICAqLwotc3RhdGljIHN0cnVjdCBzb2NrZXQgKnNjdHBfY3RsX3NvY2tldDsKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF9jdGxfc29jazsKIAogc3RhdGljIHN0cnVjdCBzY3RwX3BmICpzY3RwX3BmX2luZXQ2X3NwZWNpZmljOwogc3RhdGljIHN0cnVjdCBzY3RwX3BmICpzY3RwX3BmX2luZXRfc3BlY2lmaWM7CkBAIC05MSw3ICs5MSw3IEBACiAvKiBSZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgc29jay4gKi8KIHN0cnVjdCBzb2NrICpzY3RwX2dldF9jdGxfc29jayh2b2lkKQogewotCXJldHVybiBzY3RwX2N0bF9zb2NrZXQtPnNrOworCXJldHVybiBzY3RwX2N0bF9zb2NrOwogfQogCiAvKiBTZXQgdXAgdGhlIHByb2MgZnMgZW50cnkgZm9yIHRoZSBTQ1RQIHByb3RvY29sLiAqLwpAQCAtMzM3LDE0ICszMzcsMTQgQEAKIHN0YXRpYyB2b2lkIHNjdHBfdjRfaW5hZGRyX2FueSh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KQogewogCWFkZHItPnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWFkZHItPnY0LnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJYWRkci0+djQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CiAJYWRkci0+djQuc2luX3BvcnQgPSBwb3J0OwogfQogCiAvKiBJcyB0aGlzIGEgd2lsZGNhcmQgYWRkcmVzcz8gKi8KIHN0YXRpYyBpbnQgc2N0cF92NF9pc19hbnkoY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyKQogewotCXJldHVybiBJTkFERFJfQU5ZID09IGFkZHItPnY0LnNpbl9hZGRyLnNfYWRkcjsKKwlyZXR1cm4gaHRvbmwoSU5BRERSX0FOWSkgPT0gYWRkci0+djQuc2luX2FkZHIuc19hZGRyOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgYWRkcmVzcyBpcyBhIHZhbGlkIGFkZHJlc3MgdG8gYmUgdXNlZCBmb3IKQEAgLTM2Myw3ICszNjMsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIElzIHRoaXMgYSBicm9hZGNhc3QgYWRkcmVzcz8gKi8KLQlpZiAoc2tiICYmICgoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0KS0+cnRfZmxhZ3MgJiBSVENGX0JST0FEQ0FTVCkKKwlpZiAoc2tiICYmIHNrYi0+cnRhYmxlLT5ydF9mbGFncyAmIFJUQ0ZfQlJPQURDQVNUKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJaW50IHJldCA9IGluZXRfYWRkcl90eXBlKCZpbml0X25ldCwgYWRkci0+djQuc2luX2FkZHIuc19hZGRyKTsKIAogCi0JaWYgKGFkZHItPnY0LnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZICYmCisJaWYgKGFkZHItPnY0LnNpbl9hZGRyLnNfYWRkciAhPSBodG9ubChJTkFERFJfQU5ZKSAmJgogCSAgIHJldCAhPSBSVE5fTE9DQUwgJiYKIAkgICAhc3AtPmluZXQuZnJlZWJpbmQgJiYKIAkgICAhc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQpCkBAIC00NTEsNyArNDUxLDcgQEAKIAkJZmwuZmw0X3NyYyA9IHNhZGRyLT52NC5zaW5fYWRkci5zX2FkZHI7CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IERTVDoldS4ldS4ldS4ldSwgU1JDOiV1LiV1LiV1LiV1IC0gIiwKLQkJCSAgX19GVU5DVElPTl9fLCBOSVBRVUFEKGZsLmZsNF9kc3QpLAorCQkJICBfX2Z1bmNfXywgTklQUVVBRChmbC5mbDRfZHN0KSwKIAkJCSAgTklQUVVBRChmbC5mbDRfc3JjKSk7CiAKIAlpZiAoIWlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpIHsKQEAgLTUzOSw3ICs1MzksNyBAQAogLyogV2hhdCBpbnRlcmZhY2UgZGlkIHRoaXMgc2tiIGFycml2ZSBvbj8gKi8KIHN0YXRpYyBpbnQgc2N0cF92NF9za2JfaWlmKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcmV0dXJuICgoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0KS0+cnRfaWlmOworCXJldHVybiBza2ItPnJ0YWJsZS0+cnRfaWlmOwogfQogCiAvKiBXYXMgdGhpcyBwYWNrZXQgbWFya2VkIGJ5IEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uPyAqLwpAQCAtNTU0LDcgKzU1NCw3IEBACiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7Ci0Jc3RydWN0IHNvY2sgKm5ld3NrID0gc2tfYWxsb2Moc2stPnNrX25ldCwgUEZfSU5FVCwgR0ZQX0tFUk5FTCwKKwlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19hbGxvYyhzb2NrX25ldChzayksIFBGX0lORVQsIEdGUF9LRVJORUwsCiAJCQlzay0+c2tfcHJvdCk7CiAKIAlpZiAoIW5ld3NrKQpAQCAtNjI4LDYgKzYyOCwxMCBAQAogCXN0cnVjdCBpbl9pZmFkZHIgKmlmYSA9IChzdHJ1Y3QgaW5faWZhZGRyICopcHRyOwogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyID0gTlVMTDsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqdGVtcDsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKGRldl9uZXQoaWZhLT5pZmFfZGV2LT5kZXYpICE9ICZpbml0X25ldCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoIChldikgewogCWNhc2UgTkVUREVWX1VQOgpAQCAtNjQ2LDE0ICs2NTAsMTcgQEAKIAkJc3Bpbl9sb2NrX2JoKCZzY3RwX2xvY2FsX2FkZHJfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLCB0ZW1wLAogCQkJCQkmc2N0cF9sb2NhbF9hZGRyX2xpc3QsIGxpc3QpIHsKLQkJCWlmIChhZGRyLT5hLnY0LnNpbl9hZGRyLnNfYWRkciA9PSBpZmEtPmlmYV9sb2NhbCkgeworCQkJaWYgKGFkZHItPmEuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgJiYKKwkJCQkJYWRkci0+YS52NC5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJaWZhLT5pZmFfbG9jYWwpIHsKKwkJCQlmb3VuZCA9IDE7CiAJCQkJYWRkci0+dmFsaWQgPSAwOwogCQkJCWxpc3RfZGVsX3JjdSgmYWRkci0+bGlzdCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJnNjdHBfbG9jYWxfYWRkcl9sb2NrKTsKLQkJaWYgKGFkZHIgJiYgIWFkZHItPnZhbGlkKQorCQlpZiAoZm91bmQpCiAJCQljYWxsX3JjdSgmYWRkci0+cmN1LCBzY3RwX2xvY2FsX2FkZHJfZnJlZSk7CiAJCWJyZWFrOwogCX0KQEAgLTY3NSwxNiArNjgyLDEzIEBACiAJZWxzZQogCQlmYW1pbHkgPSBQRl9JTkVUOwogCi0JZXJyID0gc29ja19jcmVhdGVfa2VybihmYW1pbHksIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsCi0JCQkgICAgICAgJnNjdHBfY3RsX3NvY2tldCk7CisJZXJyID0gaW5ldF9jdGxfc29ja19jcmVhdGUoJnNjdHBfY3RsX3NvY2ssIGZhbWlseSwKKwkJCQkgICBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQLCAmaW5pdF9uZXQpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIlNDVFA6IEZhaWxlZCB0byBjcmVhdGUgdGhlIFNDVFAgY29udHJvbCBzb2NrZXQuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0Jc2N0cF9jdGxfc29ja2V0LT5zay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7Ci0JaW5ldF9zayhzY3RwX2N0bF9zb2NrZXQtPnNrKS0+dWNfdHRsID0gLTE7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzgzLDggKzc4Nyw4IEBACiAJLyogUEZfSU5FVCBvbmx5IHN1cHBvcnRzIEFGX0lORVQgYWRkcmVzc2VzLiAqLwogCWlmIChhZGRyMS0+c2Euc2FfZmFtaWx5ICE9IGFkZHIyLT5zYS5zYV9mYW1pbHkpCiAJCXJldHVybiAwOwotCWlmIChJTkFERFJfQU5ZID09IGFkZHIxLT52NC5zaW5fYWRkci5zX2FkZHIgfHwKLQkgICAgSU5BRERSX0FOWSA9PSBhZGRyMi0+djQuc2luX2FkZHIuc19hZGRyKQorCWlmIChodG9ubChJTkFERFJfQU5ZKSA9PSBhZGRyMS0+djQuc2luX2FkZHIuc19hZGRyIHx8CisJICAgIGh0b25sKElOQUREUl9BTlkpID09IGFkZHIyLT52NC5zaW5fYWRkci5zX2FkZHIpCiAJCXJldHVybiAxOwogCWlmIChhZGRyMS0+djQuc2luX2FkZHIuc19hZGRyID09IGFkZHIyLT52NC5zaW5fYWRkci5zX2FkZHIpCiAJCXJldHVybiAxOwpAQCAtODI0LDE1ICs4MjgsMTUgQEAKIHsKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHNrYjolcCwgbGVuOiVkLCAiCiAJCQkgICJzcmM6JXUuJXUuJXUuJXUsIGRzdDoldS4ldS4ldS4ldVxuIiwKLQkJCSAgX19GVU5DVElPTl9fLCBza2IsIHNrYi0+bGVuLAotCQkJICBOSVBRVUFEKCgoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0KS0+cnRfc3JjKSwKLQkJCSAgTklQUVVBRCgoKHN0cnVjdCBydGFibGUgKilza2ItPmRzdCktPnJ0X2RzdCkpOworCQkJICBfX2Z1bmNfXywgc2tiLCBza2ItPmxlbiwKKwkJCSAgTklQUVVBRChza2ItPnJ0YWJsZS0+cnRfc3JjKSwKKwkJCSAgTklQUVVBRChza2ItPnJ0YWJsZS0+cnRfZHN0KSk7CiAKIAlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9PVVRTQ1RQUEFDS1MpOwogCXJldHVybiBpcF9xdWV1ZV94bWl0KHNrYiwgaXBmcmFnb2spOwogfQogCi1zdGF0aWMgc3RydWN0IHNjdHBfYWYgc2N0cF9pcHY0X3NwZWNpZmljOworc3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfYWZfaW5ldDsKIAogc3RhdGljIHN0cnVjdCBzY3RwX3BmIHNjdHBfcGZfaW5ldCA9IHsKIAkuZXZlbnRfbXNnbmFtZSA9IHNjdHBfaW5ldF9ldmVudF9tc2duYW1lLApAQCAtODQ0LDcgKzg0OCw3IEBACiAJLnN1cHBvcnRlZF9hZGRycyA9IHNjdHBfaW5ldF9zdXBwb3J0ZWRfYWRkcnMsCiAJLmNyZWF0ZV9hY2NlcHRfc2sgPSBzY3RwX3Y0X2NyZWF0ZV9hY2NlcHRfc2ssCiAJLmFkZHJfdjRtYXAJPSBzY3RwX3Y0X2FkZHJfdjRtYXAsCi0JLmFmICAgICAgICAgICAgPSAmc2N0cF9pcHY0X3NwZWNpZmljLAorCS5hZiAgICAgICAgICAgID0gJnNjdHBfYWZfaW5ldAogfTsKIAogLyogTm90aWZpZXIgZm9yIGluZXRhZGRyIGFkZGl0aW9uL2RlbGV0aW9uIGV2ZW50cy4gICovCkBAIC05MDYsNyArOTEwLDcgQEAKIH07CiAKIC8qIElQdjQgYWRkcmVzcyByZWxhdGVkIGZ1bmN0aW9ucy4gICovCi1zdGF0aWMgc3RydWN0IHNjdHBfYWYgc2N0cF9pcHY0X3NwZWNpZmljID0geworc3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfYWZfaW5ldCA9IHsKIAkuc2FfZmFtaWx5CSAgID0gQUZfSU5FVCwKIAkuc2N0cF94bWl0CSAgID0gc2N0cF92NF94bWl0LAogCS5zZXRzb2Nrb3B0CSAgID0gaXBfc2V0c29ja29wdCwKQEAgLTk3MCwyNCArOTc0LDY2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfc2N0cF9taWJzKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBpbml0X3NjdHBfbWlicyh2b2lkKQogewotCXNjdHBfc3RhdGlzdGljc1swXSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgc2N0cF9taWIpOwotCWlmICghc2N0cF9zdGF0aXN0aWNzWzBdKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzY3RwX3N0YXRpc3RpY3NbMV0gPSBhbGxvY19wZXJjcHUoc3RydWN0IHNjdHBfbWliKTsKLQlpZiAoIXNjdHBfc3RhdGlzdGljc1sxXSkgewotCQlmcmVlX3BlcmNwdShzY3RwX3N0YXRpc3RpY3NbMF0pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcmV0dXJuIDA7Ci0KKwlyZXR1cm4gc25tcF9taWJfaW5pdCgodm9pZCoqKXNjdHBfc3RhdGlzdGljcywgc2l6ZW9mKHN0cnVjdCBzY3RwX21pYikpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwX3NjdHBfbWlicyh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfc2N0cF9taWJzKHZvaWQpCiB7Ci0JZnJlZV9wZXJjcHUoc2N0cF9zdGF0aXN0aWNzWzBdKTsKLQlmcmVlX3BlcmNwdShzY3RwX3N0YXRpc3RpY3NbMV0pOworCXNubXBfbWliX2ZyZWUoKHZvaWQqKilzY3RwX3N0YXRpc3RpY3MpOworfQorCitzdGF0aWMgdm9pZCBzY3RwX3Y0X3BmX2luaXQodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBTQ1RQIHNwZWNpZmljIFBGIGZ1bmN0aW9ucy4gKi8KKwlzY3RwX3JlZ2lzdGVyX3BmKCZzY3RwX3BmX2luZXQsIFBGX0lORVQpOworCXNjdHBfcmVnaXN0ZXJfYWYoJnNjdHBfYWZfaW5ldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjdHBfdjRfcGZfZXhpdCh2b2lkKQoreworCWxpc3RfZGVsKCZzY3RwX2FmX2luZXQubGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgc2N0cF92NF9wcm90b3N3X2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHByb3RvX3JlZ2lzdGVyKCZzY3RwX3Byb3QsIDEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogUmVnaXN0ZXIgU0NUUChVRFAgYW5kIFRDUCBzdHlsZSkgd2l0aCBzb2NrZXQgbGF5ZXIuICAqLworCWluZXRfcmVnaXN0ZXJfcHJvdG9zdygmc2N0cF9zZXFwYWNrZXRfcHJvdG9zdyk7CisJaW5ldF9yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3N0cmVhbV9wcm90b3N3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzY3RwX3Y0X3Byb3Rvc3dfZXhpdCh2b2lkKQoreworCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3N0cmVhbV9wcm90b3N3KTsKKwlpbmV0X3VucmVnaXN0ZXJfcHJvdG9zdygmc2N0cF9zZXFwYWNrZXRfcHJvdG9zdyk7CisJcHJvdG9fdW5yZWdpc3Rlcigmc2N0cF9wcm90KTsKK30KKworc3RhdGljIGludCBzY3RwX3Y0X2FkZF9wcm90b2NvbCh2b2lkKQoreworCS8qIFJlZ2lzdGVyIG5vdGlmaWVyIGZvciBpbmV0IGFkZHJlc3MgYWRkaXRpb25zL2RlbGV0aW9ucy4gKi8KKwlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmc2N0cF9pbmV0YWRkcl9ub3RpZmllcik7CisKKwkvKiBSZWdpc3RlciBTQ1RQIHdpdGggaW5ldCBsYXllci4gICovCisJaWYgKGluZXRfYWRkX3Byb3RvY29sKCZzY3RwX3Byb3RvY29sLCBJUFBST1RPX1NDVFApIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2N0cF92NF9kZWxfcHJvdG9jb2wodm9pZCkKK3sKKwlpbmV0X2RlbF9wcm90b2NvbCgmc2N0cF9wcm90b2NvbCwgSVBQUk9UT19TQ1RQKTsKKwl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZzY3RwX2luZXRhZGRyX25vdGlmaWVyKTsKIH0KIAogLyogSW5pdGlhbGl6ZSB0aGUgdW5pdmVyc2UgaW50byBzb21ldGhpbmcgc2Vuc2libGUuICAqLwpAQCAtMTAzMyw4ICsxMDc5LDYgQEAKIAkvKiBJbml0aWFsaXplIG9iamVjdCBjb3VudCBkZWJ1Z2dpbmcuICAqLwogCXNjdHBfZGJnX29iamNudF9pbml0KCk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBTQ1RQIHNwZWNpZmljIFBGIGZ1bmN0aW9ucy4gKi8KLQlzY3RwX3JlZ2lzdGVyX3BmKCZzY3RwX3BmX2luZXQsIFBGX0lORVQpOwogCS8qCiAJICogMTQuIFN1Z2dlc3RlZCBTQ1RQIFByb3RvY29sIFBhcmFtZXRlciBWYWx1ZXMKIAkgKi8KQEAgLTExOTIsMTkgKzEyMzYsMjIgQEAKIAlzY3RwX3N5c2N0bF9yZWdpc3RlcigpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNjdHBfYWRkcmVzc19mYW1pbGllcyk7Ci0Jc2N0cF9yZWdpc3Rlcl9hZigmc2N0cF9pcHY0X3NwZWNpZmljKTsKKwlzY3RwX3Y0X3BmX2luaXQoKTsKKwlzY3RwX3Y2X3BmX2luaXQoKTsKIAotCXN0YXR1cyA9IHByb3RvX3JlZ2lzdGVyKCZzY3RwX3Byb3QsIDEpOworCS8qIEluaXRpYWxpemUgdGhlIGxvY2FsIGFkZHJlc3MgbGlzdC4gKi8KKwlJTklUX0xJU1RfSEVBRCgmc2N0cF9sb2NhbF9hZGRyX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZzY3RwX2xvY2FsX2FkZHJfbG9jayk7CisJc2N0cF9nZXRfbG9jYWxfYWRkcl9saXN0KCk7CisKKwlzdGF0dXMgPSBzY3RwX3Y0X3Byb3Rvc3dfaW5pdCgpOworCiAJaWYgKHN0YXR1cykKLQkJZ290byBlcnJfcHJvdG9fcmVnaXN0ZXI7CisJCWdvdG8gZXJyX3Byb3Rvc3dfaW5pdDsKIAotCS8qIFJlZ2lzdGVyIFNDVFAoVURQIGFuZCBUQ1Agc3R5bGUpIHdpdGggc29ja2V0IGxheWVyLiAgKi8KLQlpbmV0X3JlZ2lzdGVyX3Byb3Rvc3coJnNjdHBfc2VxcGFja2V0X3Byb3Rvc3cpOwotCWluZXRfcmVnaXN0ZXJfcHJvdG9zdygmc2N0cF9zdHJlYW1fcHJvdG9zdyk7Ci0KLQlzdGF0dXMgPSBzY3RwX3Y2X2luaXQoKTsKKwlzdGF0dXMgPSBzY3RwX3Y2X3Byb3Rvc3dfaW5pdCgpOwogCWlmIChzdGF0dXMpCi0JCWdvdG8gZXJyX3Y2X2luaXQ7CisJCWdvdG8gZXJyX3Y2X3Byb3Rvc3dfaW5pdDsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgaW5vZGUvc29ja2V0IGZvciBoYW5kbGluZyBPT1RCIHBhY2tldHMuICAqLwogCWlmICgoc3RhdHVzID0gc2N0cF9jdGxfc29ja19pbml0KCkpKSB7CkBAIC0xMjEzLDE5ICsxMjYwLDkgQEAKIAkJZ290byBlcnJfY3RsX3NvY2tfaW5pdDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIHRoZSBsb2NhbCBhZGRyZXNzIGxpc3QuICovCi0JSU5JVF9MSVNUX0hFQUQoJnNjdHBfbG9jYWxfYWRkcl9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmc2N0cF9sb2NhbF9hZGRyX2xvY2spOwotCXNjdHBfZ2V0X2xvY2FsX2FkZHJfbGlzdCgpOwotCi0JLyogUmVnaXN0ZXIgbm90aWZpZXIgZm9yIGluZXQgYWRkcmVzcyBhZGRpdGlvbnMvZGVsZXRpb25zLiAqLwotCXJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZzY3RwX2luZXRhZGRyX25vdGlmaWVyKTsKLQotCS8qIFJlZ2lzdGVyIFNDVFAgd2l0aCBpbmV0IGxheWVyLiAgKi8KLQlpZiAoaW5ldF9hZGRfcHJvdG9jb2woJnNjdHBfcHJvdG9jb2wsIElQUFJPVE9fU0NUUCkgPCAwKSB7Ci0JCXN0YXR1cyA9IC1FQUdBSU47CisJc3RhdHVzID0gc2N0cF92NF9hZGRfcHJvdG9jb2woKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIGVycl9hZGRfcHJvdG9jb2w7Ci0JfQogCiAJLyogUmVnaXN0ZXIgU0NUUCB3aXRoIGluZXQ2IGxheWVyLiAgKi8KIAlzdGF0dXMgPSBzY3RwX3Y2X2FkZF9wcm90b2NvbCgpOwpAQCAtMTIzNiwyMCArMTI3MywyMCBAQAogb3V0OgogCXJldHVybiBzdGF0dXM7CiBlcnJfdjZfYWRkX3Byb3RvY29sOgotCWluZXRfZGVsX3Byb3RvY29sKCZzY3RwX3Byb3RvY29sLCBJUFBST1RPX1NDVFApOwotCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnNjdHBfaW5ldGFkZHJfbm90aWZpZXIpOworCXNjdHBfdjZfZGVsX3Byb3RvY29sKCk7CiBlcnJfYWRkX3Byb3RvY29sOgotCXNjdHBfZnJlZV9sb2NhbF9hZGRyX2xpc3QoKTsKLQlzb2NrX3JlbGVhc2Uoc2N0cF9jdGxfc29ja2V0KTsKKwlzY3RwX3Y0X2RlbF9wcm90b2NvbCgpOworCWluZXRfY3RsX3NvY2tfZGVzdHJveShzY3RwX2N0bF9zb2NrKTsKIGVycl9jdGxfc29ja19pbml0OgotCXNjdHBfdjZfZXhpdCgpOwotZXJyX3Y2X2luaXQ6Ci0JaW5ldF91bnJlZ2lzdGVyX3Byb3Rvc3coJnNjdHBfc3RyZWFtX3Byb3Rvc3cpOwotCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3NlcXBhY2tldF9wcm90b3N3KTsKLQlwcm90b191bnJlZ2lzdGVyKCZzY3RwX3Byb3QpOwotZXJyX3Byb3RvX3JlZ2lzdGVyOgorCXNjdHBfdjZfcHJvdG9zd19leGl0KCk7CitlcnJfdjZfcHJvdG9zd19pbml0OgorCXNjdHBfdjRfcHJvdG9zd19leGl0KCk7CitlcnJfcHJvdG9zd19pbml0OgorCXNjdHBfZnJlZV9sb2NhbF9hZGRyX2xpc3QoKTsKKwlzY3RwX3Y0X3BmX2V4aXQoKTsKKwlzY3RwX3Y2X3BmX2V4aXQoKTsKIAlzY3RwX3N5c2N0bF91bnJlZ2lzdGVyKCk7Ci0JbGlzdF9kZWwoJnNjdHBfaXB2NF9zcGVjaWZpYy5saXN0KTsKKwlsaXN0X2RlbCgmc2N0cF9hZl9pbmV0Lmxpc3QpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpc2N0cF9wb3J0X2hhc2h0YWJsZSwKIAkJICAgZ2V0X29yZGVyKHNjdHBfcG9ydF9oYXNoc2l6ZSAqCiAJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9iaW5kX2hhc2hidWNrZXQpKSk7CkBAIC0xMjgwLDI2ICsxMzE3LDI0IEBACiAKIAkvKiBVbnJlZ2lzdGVyIHdpdGggaW5ldDYvaW5ldCBsYXllcnMuICovCiAJc2N0cF92Nl9kZWxfcHJvdG9jb2woKTsKLQlpbmV0X2RlbF9wcm90b2NvbCgmc2N0cF9wcm90b2NvbCwgSVBQUk9UT19TQ1RQKTsKKwlzY3RwX3Y0X2RlbF9wcm90b2NvbCgpOwogCi0JLyogVW5yZWdpc3RlciBub3RpZmllciBmb3IgaW5ldCBhZGRyZXNzIGFkZGl0aW9ucy9kZWxldGlvbnMuICovCi0JdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmc2N0cF9pbmV0YWRkcl9ub3RpZmllcik7CisJLyogRnJlZSB0aGUgY29udHJvbCBlbmRwb2ludC4gICovCisJaW5ldF9jdGxfc29ja19kZXN0cm95KHNjdHBfY3RsX3NvY2spOworCisJLyogRnJlZSBwcm90b3N3IHJlZ2lzdHJhdGlvbnMgKi8KKwlzY3RwX3Y2X3Byb3Rvc3dfZXhpdCgpOworCXNjdHBfdjRfcHJvdG9zd19leGl0KCk7CiAKIAkvKiBGcmVlIHRoZSBsb2NhbCBhZGRyZXNzIGxpc3QuICAqLwogCXNjdHBfZnJlZV9sb2NhbF9hZGRyX2xpc3QoKTsKIAotCS8qIEZyZWUgdGhlIGNvbnRyb2wgZW5kcG9pbnQuICAqLwotCXNvY2tfcmVsZWFzZShzY3RwX2N0bF9zb2NrZXQpOwotCi0JLyogQ2xlYW51cCB2NiBpbml0aWFsaXphdGlvbnMuICovCi0Jc2N0cF92Nl9leGl0KCk7Ci0KIAkvKiBVbnJlZ2lzdGVyIHdpdGggc29ja2V0IGxheWVyLiAqLwotCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZzY3RwX3N0cmVhbV9wcm90b3N3KTsKLQlpbmV0X3VucmVnaXN0ZXJfcHJvdG9zdygmc2N0cF9zZXFwYWNrZXRfcHJvdG9zdyk7CisJc2N0cF92Nl9wZl9leGl0KCk7CisJc2N0cF92NF9wZl9leGl0KCk7CiAKIAlzY3RwX3N5c2N0bF91bnJlZ2lzdGVyKCk7Ci0JbGlzdF9kZWwoJnNjdHBfaXB2NF9zcGVjaWZpYy5saXN0KTsKKwlsaXN0X2RlbCgmc2N0cF9hZl9pbmV0Lmxpc3QpOwogCiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylzY3RwX2Fzc29jX2hhc2h0YWJsZSwKIAkJICAgZ2V0X29yZGVyKHNjdHBfYXNzb2NfaGFzaHNpemUgKgpAQCAtMTMxNSw4ICsxMzUwLDYgQEAKIAogCWttZW1fY2FjaGVfZGVzdHJveShzY3RwX2NodW5rX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KHNjdHBfYnVja2V0X2NhY2hlcCk7Ci0KLQlwcm90b191bnJlZ2lzdGVyKCZzY3RwX3Byb3QpOwogfQogCiBtb2R1bGVfaW5pdChzY3RwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IGU0NWJlNGUuLjgxYjYwNjQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTE3ODIsNyArMTc4Miw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKIAkJCQkJc3RydWN0IHNjdHBfY2h1bmsgKiplcnJwKQogewotCWNoYXIJCWVycm9yW10gPSAiVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgaGFkIGludmFsaWQgbGVuZ3RoOiI7CisJc3RhdGljIGNvbnN0IGNoYXIgZXJyb3JbXSA9ICJUaGUgZm9sbG93aW5nIHBhcmFtZXRlciBoYWQgaW52YWxpZCBsZW5ndGg6IjsKIAlzaXplX3QJCXBheWxvYWRfbGVuID0gV09SRF9ST1VORChzaXplb2YoZXJyb3IpKSArCiAJCQkJCQlzaXplb2Yoc2N0cF9wYXJhbWhkcl90KTsKIApAQCAtMTk4Miw3ICsxOTgyLDEwIEBACiAJCQkJCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKIAkJCQkJc3RydWN0IHNjdHBfY2h1bmsgKiplcnJfY2h1bmspCiB7CisJc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICpobWFjczsKIAlpbnQgcmV0dmFsID0gU0NUUF9JRVJST1JfTk9fRVJST1I7CisJX191MTYgbl9lbHQsIGlkID0gMDsKKwlpbnQgaTsKIAogCS8qIEZJWE1FIC0gVGhpcyByb3V0aW5lIGlzIG5vdCBsb29raW5nIGF0IGVhY2ggcGFyYW1ldGVyIHBlciB0aGUKIAkgKiBjaHVuayB0eXBlLCBpLmUuLCB1bnJlY29nbml6ZWQgcGFyYW1ldGVycyBzaG91bGQgYmUgZnVydGhlcgpAQCAtMjA1Niw5ICsyMDU5LDI5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTQ1RQX1BBUkFNX0hNQUNfQUxHTzoKLQkJaWYgKHNjdHBfYXV0aF9lbmFibGUpCi0JCQlicmVhazsKLQkJLyogRmFsbCBUaHJvdWdoICovCisJCWlmICghc2N0cF9hdXRoX2VuYWJsZSkKKwkJCWdvdG8gZmFsbHRocm91Z2g7CisKKwkJaG1hY3MgPSAoc3RydWN0IHNjdHBfaG1hY19hbGdvX3BhcmFtICopcGFyYW0ucDsKKwkJbl9lbHQgPSAobnRvaHMocGFyYW0ucC0+bGVuZ3RoKSAtIHNpemVvZihzY3RwX3BhcmFtaGRyX3QpKSA+PiAxOworCisJCS8qIFNDVFAtQVVUSDogU2VjdGlvbiA2LjEKKwkJICogVGhlIEhNQUMgYWxnb3JpdGhtIGJhc2VkIG9uIFNIQS0xIE1VU1QgYmUgc3VwcG9ydGVkIGFuZAorCQkgKiBpbmNsdWRlZCBpbiB0aGUgSE1BQy1BTEdPIHBhcmFtZXRlci4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuX2VsdDsgaSsrKSB7CisJCQlpZCA9IG50b2hzKGhtYWNzLT5obWFjX2lkc1tpXSk7CisKKwkJCWlmIChpZCA9PSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGlkICE9IFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEpIHsKKwkJCXNjdHBfcHJvY2Vzc19pbnZfcGFyYW1sZW5ndGgoYXNvYywgcGFyYW0ucCwgY2h1bmssCisJCQkJCQkgICAgIGVycl9jaHVuayk7CisJCQlyZXR2YWwgPSBTQ1RQX0lFUlJPUl9BQk9SVDsKKwkJfQorCQlicmVhazsKIGZhbGx0aHJvdWdoOgogCWRlZmF1bHQ6CiAJCVNDVFBfREVCVUdfUFJJTlRLKCJVbnJlY29nbml6ZWQgcGFyYW06ICVkIGZvciBjaHVuayAlZC5cbiIsCkBAIC0yMjQ2LDggKzIyNjksOCBAQAogCSAqIGhpZ2ggKGZvciBleGFtcGxlLCBpbXBsZW1lbnRhdGlvbnMgTUFZIHVzZSB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZXIKIAkgKiBhZHZlcnRpc2VkIHdpbmRvdykuCiAJICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJdHJhbnNwb3J0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwgdHJhbnNwb3J0cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQl0cmFuc3BvcnRzKSB7CiAJCXRyYW5zcG9ydC0+c3N0aHJlc2ggPSBhc29jLT5wZWVyLmkuYV9yd25kOwogCX0KIApAQCAtMjM3NSw2ICsyMzk4LDE0IEBACiAJCWFzb2MtPnBlZXIuaXB2NF9hZGRyZXNzID0gMDsKIAkJYXNvYy0+cGVlci5pcHY2X2FkZHJlc3MgPSAwOwogCisJCS8qIEFzc3VtZSB0aGF0IHBlZXIgc3VwcG9ydHMgdGhlIGFkZHJlc3MgZmFtaWx5CisJCSAqIGJ5IHdoaWNoIGl0IHNlbmRzIGEgcGFja2V0LgorCQkgKi8KKwkJaWYgKHBlZXJfYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQkJYXNvYy0+cGVlci5pcHY2X2FkZHJlc3MgPSAxOworCQllbHNlIGlmIChwZWVyX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkJYXNvYy0+cGVlci5pcHY0X2FkZHJlc3MgPSAxOworCiAJCS8qIEN5Y2xlIHRocm91Z2ggYWRkcmVzcyB0eXBlczsgYXZvaWQgZGl2aWRlIGJ5IDAuICovCiAJCXNhdCA9IG50b2hzKHBhcmFtLnAtPmxlbmd0aCkgLSBzaXplb2Yoc2N0cF9wYXJhbWhkcl90KTsKIAkJaWYgKHNhdCkKQEAgLTMwMzUsNyArMzA2Niw2IEBACiAJdW5pb24gc2N0cF9hZGRyCWFkZHI7CiAJc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCA9ICZhc29jLT5iYXNlLmJpbmRfYWRkcjsKIAl1bmlvbiBzY3RwX2FkZHJfcGFyYW0gKmFkZHJfcGFyYW07Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICpzYWRkcjsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTMwNjMsOSArMzA5Myw4IEBACiAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAkJcmV0dmFsID0gc2N0cF9kZWxfYmluZF9hZGRyKGJwLCAmYWRkcik7CiAJCWxvY2FsX2JoX2VuYWJsZSgpOwotCQlsaXN0X2Zvcl9lYWNoKHBvcywgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQkJdHJhbnNwb3J0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwKLQkJCQkJCSB0cmFuc3BvcnRzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQkJdHJhbnNwb3J0cykgewogCQkJZHN0X3JlbGVhc2UodHJhbnNwb3J0LT5kc3QpOwogCQkJc2N0cF90cmFuc3BvcnRfcm91dGUodHJhbnNwb3J0LCBOVUxMLAogCQkJCQkgICAgIHNjdHBfc2soYXNvYy0+YmFzZS5zaykpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDI4ZWIzOGUuLjIzYTlmMWEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogCiAJc2N0cF9iaF9sb2NrX3NvY2soYXNvYy0+YmFzZS5zayk7CiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihhc29jLT5iYXNlLnNrKSkgewotCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6U29jayBpcyBidXN5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJU0NUUF9ERUJVR19QUklOVEsoIiVzOlNvY2sgaXMgYnVzeS5cbiIsIF9fZnVuY19fKTsKIAogCQkvKiBUcnkgYWdhaW4gbGF0ZXIuICAqLwogCQlpZiAoIW1vZF90aW1lcigmdHJhbnNwb3J0LT5UM19ydHhfdGltZXIsIGppZmZpZXMgKyAoSFovMjApKSkKQEAgLTI4Myw3ICsyODMsNyBAQAogCXNjdHBfYmhfbG9ja19zb2NrKGFzb2MtPmJhc2Uuc2spOwogCWlmIChzb2NrX293bmVkX2J5X3VzZXIoYXNvYy0+YmFzZS5zaykpIHsKIAkJU0NUUF9ERUJVR19QUklOVEsoIiVzOlNvY2sgaXMgYnVzeTogdGltZXIgJWRcbiIsCi0JCQkJICBfX0ZVTkNUSU9OX18sCisJCQkJICBfX2Z1bmNfXywKIAkJCQkgIHRpbWVvdXRfdHlwZSk7CiAKIAkJLyogVHJ5IGFnYWluIGxhdGVyLiAgKi8KQEAgLTM2MSw3ICszNjEsNyBAQAogCiAJc2N0cF9iaF9sb2NrX3NvY2soYXNvYy0+YmFzZS5zayk7CiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihhc29jLT5iYXNlLnNrKSkgewotCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6U29jayBpcyBidXN5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJU0NUUF9ERUJVR19QUklOVEsoIiVzOlNvY2sgaXMgYnVzeS5cbiIsIF9fZnVuY19fKTsKIAogCQkvKiBUcnkgYWdhaW4gbGF0ZXIuICAqLwogCQlpZiAoIW1vZF90aW1lcigmdHJhbnNwb3J0LT5oYl90aW1lciwgamlmZmllcyArIChIWi8yMCkpKQpAQCAtNTQ1LDE0ICs1NDUsMTIgQEAKIAkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAKIAkvKiBTdGFydCBhIGhlYXJ0YmVhdCB0aW1lciBmb3IgZWFjaCB0cmFuc3BvcnQgb24gdGhlIGFzc29jaWF0aW9uLgogCSAqIGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIHRyYW5zcG9ydCB0byBtYWtlIHN1cmUgbm9uZSBvZgogCSAqIHRoZSBuZWVkZWQgZGF0YSBzdHJ1Y3R1cmVzIGdvIGF3YXkuCiAJICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsIHRyYW5zcG9ydHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwgdHJhbnNwb3J0cykgewogCiAJCWlmICghbW9kX3RpbWVyKCZ0LT5oYl90aW1lciwgc2N0cF90cmFuc3BvcnRfdGltZW91dCh0KSkpCiAJCQlzY3RwX3RyYW5zcG9ydF9ob2xkKHQpOwpAQCAtNTYzLDEyICs1NjEsMTEgQEAKIAkJCQkgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0OwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAogCS8qIFN0b3AgYWxsIGhlYXJ0YmVhdCB0aW1lcnMuICovCiAKLQlsaXN0X2Zvcl9lYWNoKHBvcywgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQl0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwgdHJhbnNwb3J0cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0LAorCQkJdHJhbnNwb3J0cykgewogCQlpZiAoZGVsX3RpbWVyKCZ0LT5oYl90aW1lcikpCiAJCQlzY3RwX3RyYW5zcG9ydF9wdXQodCk7CiAJfQpAQCAtNTc5LDEwICs1NzYsOSBAQAogCQkJCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCi0JbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsIHRyYW5zcG9ydHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKKwkJCXRyYW5zcG9ydHMpIHsKIAkJaWYgKHRpbWVyX3BlbmRpbmcoJnQtPlQzX3J0eF90aW1lcikgJiYKIAkJICAgIGRlbF90aW1lcigmdC0+VDNfcnR4X3RpbWVyKSkgewogCQkJc2N0cF90cmFuc3BvcnRfcHV0KHQpOwpAQCAtNTkzLDcgKzU4OSw2IEBACiAKIC8qIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIGhlYXJ0YmVhdCB0aW1lci4gKi8KIHN0YXRpYyB2b2lkIHNjdHBfY21kX2hiX3RpbWVyX3VwZGF0ZShzY3RwX2NtZF9zZXFfdCAqY21kcywKLQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJCSAgICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0KQogewogCS8qIFVwZGF0ZSB0aGUgaGVhcnRiZWF0IHRpbWVyLiAgKi8KQEAgLTEwNjUsNyArMTA2MCw2IEBACiAJc3RydWN0IHNjdHBfY2h1bmsgKm5ld19vYmo7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gTlVMTDsKIAlzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQ7CkBAIC0xMzk3LDkgKzEzOTEsOCBAQAogCQkJLyogSWYgd2UndmUgc2VudCBhbnkgZGF0YSBidW5kbGVkIHdpdGgKIAkJCSAqIENPT0tJRS1FQ0hPIHdlIG5lZWQgdG8gcmVzZW5kLgogCQkJICovCi0JCQlsaXN0X2Zvcl9lYWNoKHBvcywgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQkJCXQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfdHJhbnNwb3J0LAotCQkJCQkgICAgICAgdHJhbnNwb3J0cyk7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQkJCXRyYW5zcG9ydHMpIHsKIAkJCQlzY3RwX3JldHJhbnNtaXRfbWFyaygmYXNvYy0+b3V0cXVldWUsIHQsCiAJCQkJCSAgICBTQ1RQX1JUWFJfVDFfUlRYKTsKIAkJCX0KQEAgLTE0NTcsNyArMTQ1MCw3IEBACiAKIAkJY2FzZSBTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEU6CiAJCQl0ID0gY21kLT5vYmoudHJhbnNwb3J0OwotCQkJc2N0cF9jbWRfaGJfdGltZXJfdXBkYXRlKGNvbW1hbmRzLCBhc29jLCB0KTsKKwkJCXNjdHBfY21kX2hiX3RpbWVyX3VwZGF0ZShjb21tYW5kcywgdCk7CiAJCQlicmVhazsKIAogCQljYXNlIFNDVFBfQ01EX0hCX1RJTUVSU19TVE9QOgpAQCAtMTUzNiw2ICsxNTI5LDkgQEAKIAkJCWVycm9yID0gc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KGFzb2MsCiAJCQkJCQlHRlBfQVRPTUlDKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVFBfQ01EX1VQREFURV9JTklUVEFHOgorCQkJYXNvYy0+cGVlci5pLmluaXRfdGFnID0gY21kLT5vYmoudTMyOworCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkltcG9zc2libGUgY29tbWFuZDogJXUsICVwXG4iLApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCBmMmVkNjQ3Li4wYzlkNWE2IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJICAgICIlcyBhc3NvY2lhdGlvbiAlcCBjb3VsZCBub3QgZmluZCBhZGRyZXNzICIKIAkJCQkgICAgTklQNl9GTVQgIlxuIiwKLQkJCQkgICAgX19GVU5DVElPTl9fLAorCQkJCSAgICBfX2Z1bmNfXywKIAkJCQkgICAgYXNvYywKIAkJCQkgICAgTklQNihmcm9tX2FkZHIudjYuc2luNl9hZGRyKSk7CiAJCX0gZWxzZSB7CkBAIC0xMTMyLDcgKzExMzIsNyBAQAogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkgICAgIiVzIGFzc29jaWF0aW9uICVwIGNvdWxkIG5vdCBmaW5kIGFkZHJlc3MgIgogCQkJCSAgICBOSVBRVUFEX0ZNVCAiXG4iLAotCQkJCSAgICBfX0ZVTkNUSU9OX18sCisJCQkJICAgIF9fZnVuY19fLAogCQkJCSAgICBhc29jLAogCQkJCSAgICBOSVBRVUFEKGZyb21fYWRkci52NC5zaW5fYWRkci5zX2FkZHIpKTsKIAkJfQpAQCAtMTE1MCw3ICsxMTUwLDcgQEAKIAkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBoYmluZm8tPnNlbnRfYXQgKyBtYXhfaW50ZXJ2YWwpKSB7CiAJCVNDVFBfREVCVUdfUFJJTlRLKCIlczogSEVBUlRCRUFUIEFDSyB3aXRoIGludmFsaWQgdGltZXN0YW1wICIKIAkJCQkgICJyZWNlaXZlZCBmb3IgdHJhbnNwb3J0OiAlcFxuIiwKLQkJCQkgICBfX0ZVTkNUSU9OX18sIGxpbmspOworCQkJCSAgIF9fZnVuY19fLCBsaW5rKTsKIAkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDsKIAl9CiAKQEAgLTEyMjYsNyArMTIyNiw2IEBACiAJCQkJICAgICAgIHNjdHBfY21kX3NlcV90ICpjb21tYW5kcykKIHsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKm5ld19hZGRyLCAqYWRkcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpwb3MyOwogCWludCBmb3VuZDsKIAogCS8qIEltcGxlbWVudG9yJ3MgR3VpZGUgLSBTZWN0aW4gNS4yLjIKQEAgLTEyNDMsMTIgKzEyNDIsMTEgQEAKIAluZXdfYWRkciA9IE5VTEw7CiAJZm91bmQgPSAwOwogCi0JbGlzdF9mb3JfZWFjaChwb3MsICZuZXdfYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KSB7Ci0JCW5ld19hZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwgdHJhbnNwb3J0cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXdfYWRkciwgJm5ld19hc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQl0cmFuc3BvcnRzKSB7CiAJCWZvdW5kID0gMDsKLQkJbGlzdF9mb3JfZWFjaChwb3MyLCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KSB7Ci0JCQlhZGRyID0gbGlzdF9lbnRyeShwb3MyLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsCi0JCQkJCSAgdHJhbnNwb3J0cyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRkciwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKKwkJCQl0cmFuc3BvcnRzKSB7CiAJCQlpZiAoc2N0cF9jbXBfYWRkcl9leGFjdCgmbmV3X2FkZHItPmlwYWRkciwKIAkJCQkJCSZhZGRyLT5pcGFkZHIpKSB7CiAJCQkJZm91bmQgPSAxOwpAQCAtMzEzNSwxMiArMzEzMyw4IEBACiAJCWlmICghZXYpCiAJCQlnb3RvIG5vbWVtOwogCi0JCWlmICghc2N0cF9hZGRfY21kKGNvbW1hbmRzLCBTQ1RQX0NNRF9FVkVOVF9VTFAsCi0JCQkJICBTQ1RQX1VMUEVWRU5UKGV2KSkpIHsKLQkJCXNjdHBfdWxwZXZlbnRfZnJlZShldik7Ci0JCQlnb3RvIG5vbWVtOwotCQl9Ci0KKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9FVkVOVF9VTFAsCisJCQkJU0NUUF9VTFBFVkVOVChldikpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1BST0NFU1NfT1BFUlIsCiAJCQkJU0NUUF9DSFVOSyhjaHVuaykpOwogCX0KQEAgLTM2NjgsNyArMzY2Miw3IEBACiAJc2tiX3B1bGwoY2h1bmstPnNrYiwgbGVuKTsKIAogCXRzbiA9IG50b2hsKGZ3ZHRzbl9oZHItPm5ld19jdW1fdHNuKTsKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IFRTTiAweCV4LlxuIiwgX19GVU5DVElPTl9fLCB0c24pOworCVNDVFBfREVCVUdfUFJJTlRLKCIlczogVFNOIDB4JXguXG4iLCBfX2Z1bmNfXywgdHNuKTsKIAogCS8qIFRoZSBUU04gaXMgdG9vIGhpZ2gtLXNpbGVudGx5IGRpc2NhcmQgdGhlIGNodW5rIGFuZCBjb3VudCBvbiBpdAogCSAqIGdldHRpbmcgcmV0cmFuc21pdHRlZCBsYXRlci4KQEAgLTM3MjgsNyArMzcyMiw3IEBACiAJc2tiX3B1bGwoY2h1bmstPnNrYiwgbGVuKTsKIAogCXRzbiA9IG50b2hsKGZ3ZHRzbl9oZHItPm5ld19jdW1fdHNuKTsKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IFRTTiAweCV4LlxuIiwgX19GVU5DVElPTl9fLCB0c24pOworCVNDVFBfREVCVUdfUFJJTlRLKCIlczogVFNOIDB4JXguXG4iLCBfX2Z1bmNfXywgdHNuKTsKIAogCS8qIFRoZSBUU04gaXMgdG9vIGhpZ2gtLXNpbGVudGx5IGRpc2NhcmQgdGhlIGNodW5rIGFuZCBjb3VudCBvbiBpdAogCSAqIGdldHRpbmcgcmV0cmFuc21pdHRlZCBsYXRlci4KQEAgLTQxNDQsNiArNDEzOCwyNCBAQAogCQlnb3RvIG5vbWVtOwogCiAJaWYgKGFzb2MpIHsKKwkJLyogVHJlYXQgSU5JVC1BQ0sgYXMgYSBzcGVjaWFsIGNhc2UgZHVyaW5nIENPT0tJRS1XQUlULiAqLworCQlpZiAoY2h1bmstPmNodW5rX2hkci0+dHlwZSA9PSBTQ1RQX0NJRF9JTklUX0FDSyAmJgorCQkgICAgIWFzb2MtPnBlZXIuaS5pbml0X3RhZykgeworCQkJc2N0cF9pbml0YWNrX2NodW5rX3QgKmluaXRhY2s7CisKKwkJCWluaXRhY2sgPSAoc2N0cF9pbml0YWNrX2NodW5rX3QgKiljaHVuay0+Y2h1bmtfaGRyOworCQkJaWYgKCFzY3RwX2NodW5rX2xlbmd0aF92YWxpZChjaHVuaywKKwkJCQkJCSAgICAgc2l6ZW9mKHNjdHBfaW5pdGFja19jaHVua190KSkpCisJCQkJYWJvcnQtPmNodW5rX2hkci0+ZmxhZ3MgfD0gU0NUUF9DSFVOS19GTEFHX1Q7CisJCQllbHNlIHsKKwkJCQl1bnNpZ25lZCBpbnQgaW5pdHRhZzsKKworCQkJCWluaXR0YWcgPSBudG9obChpbml0YWNrLT5pbml0X2hkci5pbml0X3RhZyk7CisJCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9VUERBVEVfSU5JVFRBRywKKwkJCQkJCVNDVFBfVTMyKGluaXR0YWcpKTsKKwkJCX0KKwkJfQorCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksoYWJvcnQpKTsKIAkJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfT1VUQ1RSTENIVU5LUyk7CiAKQEAgLTQyMTksNyArNDIzMSw3IEBACiAJCQkJICAgICB2b2lkICphcmcsCiAJCQkJICAgICBzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpCiB7Ci0JY2hhciBlcnJfc3RyW109IlRoZSBmb2xsb3dpbmcgY2h1bmsgaGFkIGludmFsaWQgbGVuZ3RoOiI7CisJc3RhdGljIGNvbnN0IGNoYXIgZXJyX3N0cltdPSJUaGUgZm9sbG93aW5nIGNodW5rIGhhZCBpbnZhbGlkIGxlbmd0aDoiOwogCiAJcmV0dXJuIHNjdHBfc2ZfYWJvcnRfdmlvbGF0aW9uKGVwLCBhc29jLCBhcmcsIGNvbW1hbmRzLCBlcnJfc3RyLAogCQkJCQlzaXplb2YoZXJyX3N0cikpOwpAQCAtNDIzNiw3ICs0MjQ4LDcgQEAKIAkJCQkgICAgIGNvbnN0IHNjdHBfc3VidHlwZV90IHR5cGUsCiAJCQkJICAgICB2b2lkICphcmcsCiAJCQkJICAgICBzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpIHsKLQljaGFyIGVycl9zdHJbXSA9ICJUaGUgZm9sbG93aW5nIHBhcmFtZXRlciBoYWQgaW52YWxpZCBsZW5ndGg6IjsKKwlzdGF0aWMgY29uc3QgY2hhciBlcnJfc3RyW10gPSAiVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgaGFkIGludmFsaWQgbGVuZ3RoOiI7CiAKIAlyZXR1cm4gc2N0cF9zZl9hYm9ydF92aW9sYXRpb24oZXAsIGFzb2MsIGFyZywgY29tbWFuZHMsIGVycl9zdHIsCiAJCQkJCXNpemVvZihlcnJfc3RyKSk7CkBAIC00MjU1LDcgKzQyNjcsNyBAQAogCQkJCSAgICAgdm9pZCAqYXJnLAogCQkJCSAgICAgc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzKQogewotCWNoYXIgZXJyX3N0cltdPSJUaGUgY3VtdWxhdGl2ZSB0c24gYWNrIGJleW9uZCB0aGUgbWF4IHRzbiBjdXJyZW50bHkgc2VudDoiOworCXN0YXRpYyBjb25zdCBjaGFyIGVycl9zdHJbXT0iVGhlIGN1bXVsYXRpdmUgdHNuIGFjayBiZXlvbmQgdGhlIG1heCB0c24gY3VycmVudGx5IHNlbnQ6IjsKIAogCXJldHVybiBzY3RwX3NmX2Fib3J0X3Zpb2xhdGlvbihlcCwgYXNvYywgYXJnLCBjb21tYW5kcywgZXJyX3N0ciwKIAkJCQkJc2l6ZW9mKGVycl9zdHIpKTsKQEAgLTQyNzQsNyArNDI4Niw3IEBACiAJCQkJICAgICB2b2lkICphcmcsCiAJCQkJICAgICBzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpCiB7Ci0JY2hhciBlcnJfc3RyW109IlRoZSBmb2xsb3dpbmcgY2h1bmsgdmlvbGF0ZXMgcHJvdG9jb2w6IjsKKwlzdGF0aWMgY29uc3QgY2hhciBlcnJfc3RyW109IlRoZSBmb2xsb3dpbmcgY2h1bmsgdmlvbGF0ZXMgcHJvdG9jb2w6IjsKIAogCWlmICghYXNvYykKIAkJcmV0dXJuIHNjdHBfc2ZfdmlvbGF0aW9uKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKQEAgLTQzNDksNiArNDM2MSw3IEBACiAJCQkJICAgICAgIHNjdHBfY21kX3NlcV90ICpjb21tYW5kcykKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiogbXlfYXNvYzsKIAogCS8qIFRoZSBjb21tZW50IGJlbG93IHNheXMgdGhhdCB3ZSBlbnRlciBDT09LSUUtV0FJVCBBRlRFUgogCSAqIHNlbmRpbmcgdGhlIElOSVQsIGJ1dCB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBpbiBvdXIKQEAgLTQzNzIsOCArNDM4NSw4IEBACiAJLyogQ2FzdCBhd2F5IHRoZSBjb25zdCBtb2RpZmllciwgYXMgd2Ugd2FudCB0byBqdXN0CiAJICogcmVydW4gaXQgdGhyb3VnaCBhcyBhIHNpZGVmZmVjdC4KIAkgKi8KLQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19BU09DLAotCQkJU0NUUF9BU09DKChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKSBhc29jKSk7CisJbXlfYXNvYyA9IChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2M7CisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfQVNPQywgU0NUUF9BU09DKG15X2Fzb2MpKTsKIAogCS8qIENob29zZSB0cmFuc3BvcnQgZm9yIElOSVQuICovCiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0NIT09TRV9UUkFOU1BPUlQsCkBAIC01MzEyLDYgKzUzMjUsOCBAQAogCVNDVFBfREVCVUdfUFJJTlRLKCJUaW1lciBUMiBleHBpcmVkLlxuIik7CiAJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfVDJfU0hVVERPV05fRVhQSVJFRFMpOwogCisJKChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MpLT5zaHV0ZG93bl9yZXRyaWVzKys7CisKIAlpZiAoYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA+PSBhc29jLT5tYXhfcmV0cmFucykgewogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCiAJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggZDQ3ZDU3OC4uZTdlM2JhZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTUxMyw3ICs1MTMsNiBAQAogCXVuaW9uIHNjdHBfYWRkcgkJCXNhdmVhZGRyOwogCXZvaWQJCQkJKmFkZHJfYnVmOwogCXN0cnVjdCBzY3RwX2FmCQkJKmFmOwotCXN0cnVjdCBsaXN0X2hlYWQJCSpwb3M7CiAJc3RydWN0IGxpc3RfaGVhZAkJKnA7CiAJaW50IAkJCQlpOwogCWludCAJCQkJcmV0dmFsID0gMDsKQEAgLTUyNSwxMCArNTI0LDkgQEAKIAllcCA9IHNwLT5lcDsKIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogKHNrOiAlcCwgYWRkcnM6ICVwLCBhZGRyY250OiAlZClcbiIsCi0JCQkgIF9fRlVOQ1RJT05fXywgc2ssIGFkZHJzLCBhZGRyY250KTsKKwkJCSAgX19mdW5jX18sIHNrLCBhZGRycywgYWRkcmNudCk7CiAKLQlsaXN0X2Zvcl9lYWNoKHBvcywgJmVwLT5hc29jcykgewotCQlhc29jID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uLCBhc29jcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAmZXAtPmFzb2NzLCBhc29jcykgewogCiAJCWlmICghYXNvYy0+cGVlci5hc2NvbmZfY2FwYWJsZSkKIAkJCWNvbnRpbnVlOwpAQCAtNjk5LDcgKzY5Nyw2IEBACiAJdW5pb24gc2N0cF9hZGRyCQkqbGFkZHI7CiAJdm9pZAkJCSphZGRyX2J1ZjsKIAlzdHJ1Y3Qgc2N0cF9hZgkJKmFmOwotCXN0cnVjdCBsaXN0X2hlYWQJKnBvcywgKnBvczE7CiAJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKnNhZGRyOwogCWludCAJCQlpOwogCWludCAJCQlyZXR2YWwgPSAwOwpAQCAtNzExLDEwICs3MDgsOSBAQAogCWVwID0gc3AtPmVwOwogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiAoc2s6ICVwLCBhZGRyczogJXAsIGFkZHJjbnQ6ICVkKVxuIiwKLQkJCSAgX19GVU5DVElPTl9fLCBzaywgYWRkcnMsIGFkZHJjbnQpOworCQkJICBfX2Z1bmNfXywgc2ssIGFkZHJzLCBhZGRyY250KTsKIAotCWxpc3RfZm9yX2VhY2gocG9zLCAmZXAtPmFzb2NzKSB7Ci0JCWFzb2MgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24sIGFzb2NzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZlcC0+YXNvY3MsIGFzb2NzKSB7CiAKIAkJaWYgKCFhc29jLT5wZWVyLmFzY29uZl9jYXBhYmxlKQogCQkJY29udGludWU7CkBAIC03ODcsOSArNzgzLDggQEAKIAkJICogYXMgc29tZSBvZiB0aGUgYWRkcmVzc2VzIGluIHRoZSBiaW5kIGFkZHJlc3MgbGlzdCBhcmUKIAkJICogYWJvdXQgdG8gYmUgZGVsZXRlZCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgc291cmNlIGFkZHJlc3Nlcy4KIAkJICovCi0JCWxpc3RfZm9yX2VhY2gocG9zMSwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewotCQkJdHJhbnNwb3J0ID0gbGlzdF9lbnRyeShwb3MxLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsCi0JCQkJCSAgICAgICB0cmFuc3BvcnRzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQkJCXRyYW5zcG9ydHMpIHsKIAkJCWRzdF9yZWxlYXNlKHRyYW5zcG9ydC0+ZHN0KTsKIAkJCXNjdHBfdHJhbnNwb3J0X3JvdXRlKHRyYW5zcG9ydCwgTlVMTCwKIAkJCQkJICAgICBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spKTsKQEAgLTExOTcsNyArMTE5Miw3IEBACiAJc3RydWN0IHNvY2thZGRyICprYWRkcnM7CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXMgLSBzayAlcCBhZGRycyAlcCBhZGRyc19zaXplICVkXG4iLAotCQkJICBfX0ZVTkNUSU9OX18sIHNrLCBhZGRycywgYWRkcnNfc2l6ZSk7CisJCQkgIF9fZnVuY19fLCBzaywgYWRkcnMsIGFkZHJzX3NpemUpOwogCiAJaWYgKHVubGlrZWx5KGFkZHJzX3NpemUgPD0gMCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM5Nyw3ICsxMzkyLDYgQEAKIAlsb25nIHRpbWVvOwogCV9fdTE2IHNpbmZvX2ZsYWdzID0gMDsKIAlzdHJ1Y3Qgc2N0cF9kYXRhbXNnICpkYXRhbXNnOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlpbnQgbXNnX2ZsYWdzID0gbXNnLT5tc2dfZmxhZ3M7CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygic2N0cF9zZW5kbXNnKHNrOiAlcCwgbXNnOiAlcCwgbXNnX2xlbjogJXp1KVxuIiwKQEAgLTE3MjcsOSArMTcyMSw4IEBACiAJfQogCiAJLyogTm93IHNlbmQgdGhlIChwb3NzaWJseSkgZnJhZ21lbnRlZCBtZXNzYWdlLiAqLwotCWxpc3RfZm9yX2VhY2gocG9zLCAmZGF0YW1zZy0+Y2h1bmtzKSB7Ci0JCWNodW5rID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX2NodW5rLCBmcmFnX2xpc3QpOwotCQlzY3RwX2RhdGFtc2dfdHJhY2soY2h1bmspOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZkYXRhbXNnLT5jaHVua3MsIGZyYWdfbGlzdCkgeworCQlzY3RwX2NodW5rX2hvbGQoY2h1bmspOwogCiAJCS8qIERvIGFjY291bnRpbmcgZm9yIHRoZSB3cml0ZSBzcGFjZS4gICovCiAJCXNjdHBfc2V0X293bmVyX3coY2h1bmspOwpAQCAtMTc0OCw3ICsxNzQxLDcgQEAKIAkJU0NUUF9ERUJVR19QUklOVEsoIldlIHNlbnQgcHJpbWl0aXZlbHkuXG4iKTsKIAl9CiAKLQlzY3RwX2RhdGFtc2dfZnJlZShkYXRhbXNnKTsKKwlzY3RwX2RhdGFtc2dfcHV0KGRhdGFtc2cpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CiAJZWxzZQpAQCAtMTk2NCw3ICsxOTU3LDcgQEAKIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2V2ZW50cyhzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJCQkJCWludCBvcHRsZW4pCiB7Ci0JaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlKSkKKwlpZiAob3B0bGVuID4gc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChjb3B5X2Zyb21fdXNlcigmc2N0cF9zayhzayktPnN1YnNjcmliZSwgb3B0dmFsLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIzMDEsMTEgKzIyOTQsOCBAQAogCSAqIHRyYW5zcG9ydC4KIAkgKi8KIAlpZiAoIXRyYW5zICYmIGFzb2MpIHsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCi0JCWxpc3RfZm9yX2VhY2gocG9zLCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KSB7Ci0JCQl0cmFucyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsCi0JCQkJCSAgIHRyYW5zcG9ydHMpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zLCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0LAorCQkJCXRyYW5zcG9ydHMpIHsKIAkJCXNjdHBfYXBwbHlfcGVlcl9hZGRyX3BhcmFtcygmcGFyYW1zLCB0cmFucywgYXNvYywgc3AsCiAJCQkJCQkgICAgaGJfY2hhbmdlLCBwbXR1ZF9jaGFuZ2UsCiAJCQkJCQkgICAgc2Fja2RlbGF5X2NoYW5nZSk7CkBAIC0yMzk2LDExICsyMzg2LDggQEAKIAogCS8qIElmIGNoYW5nZSBpcyBmb3IgYXNzb2NpYXRpb24sIGFsc28gYXBwbHkgdG8gZWFjaCB0cmFuc3BvcnQuICovCiAJaWYgKGFzb2MpIHsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCi0JCWxpc3RfZm9yX2VhY2gocG9zLCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KSB7Ci0JCQl0cmFucyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsCi0JCQkJCSAgIHRyYW5zcG9ydHMpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zLCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0LAorCQkJCXRyYW5zcG9ydHMpIHsKIAkJCWlmIChwYXJhbXMuYXNzb2NfdmFsdWUpIHsKIAkJCQl0cmFucy0+c2Fja2RlbGF5ID0KIAkJCQkJbXNlY3NfdG9famlmZmllcyhwYXJhbXMuYXNzb2NfdmFsdWUpOwpAQCAtMjYzMiwxMyArMjYxOSwxMCBAQAogCQlpZiAoYXNzb2NwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCAhPSAwKSB7CiAJCQlfX3UzMiBwYXRoX3N1bSA9IDA7CiAJCQlpbnQgICBwYXRocyA9IDA7Ci0JCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJCQlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnBlZXJfYWRkcjsKIAotCQkJbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJCQlwZWVyX2FkZHIgPSBsaXN0X2VudHJ5KHBvcywKLQkJCQkJCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCwKLQkJCQkJCXRyYW5zcG9ydHMpOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwZWVyX2FkZHIsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQkJCXRyYW5zcG9ydHMpIHsKIAkJCQlwYXRoX3N1bSArPSBwZWVyX2FkZHItPnBhdGhtYXhyeHQ7CiAJCQkJcGF0aHMrKzsKIAkJCX0KQEAgLTI3MTYsNyArMjcwMCw2IEBACiBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOwogCWludCB2YWw7CiAKQEAgLTI3MjksOCArMjcxMiw3IEBACiAJc3AtPnVzZXJfZnJhZyA9IHZhbDsKIAogCS8qIFVwZGF0ZSB0aGUgZnJhZ19wb2ludCBvZiB0aGUgZXhpc3RpbmcgYXNzb2NpYXRpb25zLiAqLwotCWxpc3RfZm9yX2VhY2gocG9zLCAmKHNwLT5lcC0+YXNvY3MpKSB7Ci0JCWFzb2MgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24sIGFzb2NzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICYoc3AtPmVwLT5hc29jcyksIGFzb2NzKSB7CiAJCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoc3AsIGFzb2MtPnBhdGhtdHUpOwogCX0KIApAQCAtMjkzMywxNyArMjkxNSwzOSBAQAogCQkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLAogCQkJCSAgICBpbnQgb3B0bGVuKQogeworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtczsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICpzcDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlpbnQgdmFsOworCWludCBhc3NvY19pZCA9IDA7CiAKLQlpZiAob3B0bGVuICE9IHNpemVvZihpbnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKW9wdHZhbCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKHZhbCA8IDApCisJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNjdHBfc2soc2spLT5tYXhfYnVyc3QgPSB2YWw7CisJaWYgKG9wdGxlbiA9PSBzaXplb2YoaW50KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICJTQ1RQOiBVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJlY2F0ZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICJTQ1RQOiBVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIik7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsLCBvcHR2YWwsIG9wdGxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgaWYgKG9wdGxlbiA9PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIG9wdGxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdmFsID0gcGFyYW1zLmFzc29jX3ZhbHVlOworCQlhc3NvY19pZCA9IHBhcmFtcy5hc3NvY19pZDsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcCA9IHNjdHBfc2soc2spOworCisJaWYgKGFzc29jX2lkICE9IDApIHsKKwkJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIGFzc29jX2lkKTsKKwkJaWYgKCFhc29jKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWFzb2MtPm1heF9idXJzdCA9IHZhbDsKKwl9IGVsc2UKKwkJc3AtPm1heF9idXJzdCA9IHZhbDsKIAogCXJldHVybiAwOwogfQpAQCAtMzI4MCw3ICszMjg0LDcgQEAKIAlzY3RwX2xvY2tfc29jayhzayk7CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXMgLSBzazogJXAsIHNvY2thZGRyOiAlcCwgYWRkcl9sZW46ICVkXG4iLAotCQkJICBfX0ZVTkNUSU9OX18sIHNrLCBhZGRyLCBhZGRyX2xlbik7CisJCQkgIF9fZnVuY19fLCBzaywgYWRkciwgYWRkcl9sZW4pOwogCiAJLyogVmFsaWRhdGUgYWRkcl9sZW4gYmVmb3JlIGNhbGxpbmcgY29tbW9uIGNvbm5lY3QvY29ubmVjdHggcm91dGluZS4gKi8KIAlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFkZHItPnNhX2ZhbWlseSk7CkBAIC0zODAxLDcgKzM4MDUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHNrOiAlcCBhc29jOiAlcFxuIiwgX19GVU5DVElPTl9fLCBzaywgYXNvYyk7CisJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBzazogJXAgYXNvYzogJXBcbiIsIF9fZnVuY19fLCBzaywgYXNvYyk7CiAKIAlyZXR2YWwgPSBzY3RwX2RvX3BlZWxvZmYoYXNvYywgJm5ld3NvY2spOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzgxNSw3ICszODE5LDcgQEAKIAl9CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHNrOiAlcCBhc29jOiAlcCBuZXdzazogJXAgc2Q6ICVkXG4iLAotCQkJICBfX0ZVTkNUSU9OX18sIHNrLCBhc29jLCBuZXdzb2NrLT5zaywgcmV0dmFsKTsKKwkJCSAgX19mdW5jX18sIHNrLCBhc29jLCBuZXdzb2NrLT5zaywgcmV0dmFsKTsKIAogCS8qIFJldHVybiB0aGUgZmQgbWFwcGVkIHRvIHRoZSBuZXcgc29ja2V0LiAgKi8KIAlwZWVsb2ZmLnNkID0gcmV0dmFsOwpAQCAtNDEyOSw3ICs0MTMzLDYgQEAKIAkJCQkJICBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCWludCBjbnQgPSAwOwogCXN0cnVjdCBzY3RwX2dldGFkZHJzX29sZCBnZXRhZGRyczsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKmZyb207CkBAIC00MTU0LDggKzQxNTcsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXRvID0gKHZvaWQgX191c2VyICopZ2V0YWRkcnMuYWRkcnM7Ci0JbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJZnJvbSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsIHRyYW5zcG9ydHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZnJvbSwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKKwkJCQl0cmFuc3BvcnRzKSB7CiAJCW1lbWNweSgmdGVtcCwgJmZyb20tPmlwYWRkciwgc2l6ZW9mKHRlbXApKTsKIAkJc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2stPnNrX2ZhbWlseSktPmFkZHJfdjRtYXAoc3AsICZ0ZW1wKTsKIAkJYWRkcmxlbiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHNrLT5za19mYW1pbHkpLT5zb2NrYWRkcl9sZW47CkBAIC00MTc4LDcgKzQxODEsNiBAQAogCQkJCSAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJaW50IGNudCA9IDA7CiAJc3RydWN0IHNjdHBfZ2V0YWRkcnMgZ2V0YWRkcnM7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpmcm9tOwpAQCAtNDIwMyw4ICs0MjA1LDggQEAKIAl0byA9IG9wdHZhbCArIG9mZnNldG9mKHN0cnVjdCBzY3RwX2dldGFkZHJzLGFkZHJzKTsKIAlzcGFjZV9sZWZ0ID0gbGVuIC0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMsYWRkcnMpOwogCi0JbGlzdF9mb3JfZWFjaChwb3MsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKLQkJZnJvbSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQsIHRyYW5zcG9ydHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZnJvbSwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKKwkJCQl0cmFuc3BvcnRzKSB7CiAJCW1lbWNweSgmdGVtcCwgJmZyb20tPmlwYWRkciwgc2l6ZW9mKHRlbXApKTsKIAkJc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2stPnNrX2ZhbWlseSktPmFkZHJfdjRtYXAoc3AsICZ0ZW1wKTsKIAkJYWRkcmxlbiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHNrLT5za19mYW1pbHkpLT5zb2NrYWRkcl9sZW47CkBAIC01MDA1LDIwICs1MDA3LDQ1IEBACiAJCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsCiAJCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbikKIHsKLQlpbnQgdmFsOworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtczsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICpzcDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAogCWlmIChsZW4gPCBzaXplb2YoaW50KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlsZW4gPSBzaXplb2YoaW50KTsKKwlpZiAobGVuID09IHNpemVvZihpbnQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgIlNDVFA6IFVzZSBvZiBpbnQgaW4gbWF4X2J1cnN0IHNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgIlNDVFA6IFVzZSBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBpbnN0ZWFkXG4iKTsKKwkJcGFyYW1zLmFzc29jX2lkID0gMDsKKwl9IGVsc2UgaWYgKGxlbiA9PSBzaXplb2YgKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBhcmFtcywgb3B0dmFsLCBsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOwogCi0JdmFsID0gc2N0cF9zayhzayktPm1heF9idXJzdDsKLQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnZhbCwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJc3AgPSBzY3RwX3NrKHNrKTsKIAotCXJldHVybiAtRU5PVFNVUFA7CisJaWYgKHBhcmFtcy5hc3NvY19pZCAhPSAwKSB7CisJCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNzb2NfaWQpOworCQlpZiAoIWFzb2MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFyYW1zLmFzc29jX3ZhbHVlID0gYXNvYy0+bWF4X2J1cnN0OworCX0gZWxzZQorCQlwYXJhbXMuYXNzb2NfdmFsdWUgPSBzcC0+bWF4X2J1cnN0OworCisJaWYgKGxlbiA9PSBzaXplb2YoaW50KSkgeworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnBhcmFtcy5hc3NvY192YWx1ZSwgbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmcGFyYW1zLCBsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7CisKIH0KIAogc3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCkBAIC01MDcwLDYgKzUwOTcsNyBAQAogCXN0cnVjdCBzY3RwX2F1dGhjaHVua3MgdmFsOwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwogCXN0cnVjdCBzY3RwX2NodW5rc19wYXJhbSAqY2g7CisJdTMyICAgIG51bV9jaHVua3M7CiAJY2hhciBfX3VzZXIgKnRvOwogCiAJaWYgKGxlbiA8PSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGNodW5rcykpCkBAIC01MDg2LDEyICs1MTE0LDE1IEBACiAJY2ggPSBhc29jLT5wZWVyLnBlZXJfY2h1bmtzOwogCiAJLyogU2VlIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGVub3VnaCByb29tIGZvciBhbGwgdGhlIGRhdGEgKi8KLQlpZiAobGVuIDwgbnRvaHMoY2gtPnBhcmFtX2hkci5sZW5ndGgpKQorCW51bV9jaHVua3MgPSBudG9ocyhjaC0+cGFyYW1faGRyLmxlbmd0aCkgLSBzaXplb2Yoc2N0cF9wYXJhbWhkcl90KTsKKwlpZiAobGVuIDwgbnVtX2NodW5rcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlsZW4gPSBudG9ocyhjaC0+cGFyYW1faGRyLmxlbmd0aCk7CisJbGVuID0gbnVtX2NodW5rczsKIAlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIobnVtX2NodW5rcywgJnAtPmdhdXRoX251bWJlcl9vZl9jaHVua3MpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKHRvLCBjaC0+Y2h1bmtzLCBsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtNTEwNSw2ICs1MTM2LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzIHZhbDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlzdHJ1Y3Qgc2N0cF9jaHVua3NfcGFyYW0gKmNoOworCXUzMiAgICBudW1fY2h1bmtzOwogCWNoYXIgX191c2VyICp0bzsKIAogCWlmIChsZW4gPD0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVua3MpKQpAQCAtNTEyMywxMiArNTE1NSwxNSBAQAogCWVsc2UKIAkJY2ggPSBzY3RwX3NrKHNrKS0+ZXAtPmF1dGhfY2h1bmtfbGlzdDsKIAotCWlmIChsZW4gPCBudG9ocyhjaC0+cGFyYW1faGRyLmxlbmd0aCkpCisJbnVtX2NodW5rcyA9IG50b2hzKGNoLT5wYXJhbV9oZHIubGVuZ3RoKSAtIHNpemVvZihzY3RwX3BhcmFtaGRyX3QpOworCWlmIChsZW4gPCBudW1fY2h1bmtzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxlbiA9IG50b2hzKGNoLT5wYXJhbV9oZHIubGVuZ3RoKTsKKwlsZW4gPSBudW1fY2h1bmtzOwogCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOworCWlmIChwdXRfdXNlcihudW1fY2h1bmtzLCAmcC0+Z2F1dGhfbnVtYmVyX29mX2NodW5rcykpCisJCXJldHVybiAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIodG8sIGNoLT5jaHVua3MsIGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC01NzA2LDggKzU3NDEsOCBAQAogCXN0cnVjdCBzY3RwX2JpbmRfYnVja2V0ICpwcDsKIAogCXBwID0ga21lbV9jYWNoZV9hbGxvYyhzY3RwX2J1Y2tldF9jYWNoZXAsIEdGUF9BVE9NSUMpOwotCVNDVFBfREJHX09CSkNOVF9JTkMoYmluZF9idWNrZXQpOwogCWlmIChwcCkgeworCQlTQ1RQX0RCR19PQkpDTlRfSU5DKGJpbmRfYnVja2V0KTsKIAkJcHAtPnBvcnQgPSBzbnVtOwogCQlwcC0+ZmFzdHJldXNlID0gMDsKIAkJSU5JVF9ITElTVF9IRUFEKCZwcC0+b3duZXIpOwpAQCAtNTgxMywxMSArNTg0OCwxMiBAQAogCQkJCSAgc2N0cF9jbXNnc190ICpjbXNncykKIHsKIAlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwlzdHJ1Y3QgbXNnaGRyICpteV9tc2cgPSAoc3RydWN0IG1zZ2hkciAqKW1zZzsKIAogCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIobXNnKTsKIAkgICAgIGNtc2cgIT0gTlVMTDsKLQkgICAgIGNtc2cgPSBDTVNHX05YVEhEUigoc3RydWN0IG1zZ2hkciopbXNnLCBjbXNnKSkgewotCQlpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSkKKwkgICAgIGNtc2cgPSBDTVNHX05YVEhEUihteV9tc2csIGNtc2cpKSB7CisJCWlmICghQ01TR19PSyhteV9tc2csIGNtc2cpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJLyogU2hvdWxkIHdlIHBhcnNlIHRoaXMgaGVhZGVyIG9yIGlnbm9yZT8gICovCkBAIC02MTM4LDExICs2MTc0LDkgQEAKIHZvaWQgc2N0cF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCiAJLyogV2FrZSB1cCB0aGUgdGFza3MgaW4gZWFjaCB3YWl0IHF1ZXVlLiAgKi8KLQlsaXN0X2Zvcl9lYWNoKHBvcywgJigoc2N0cF9zayhzaykpLT5lcC0+YXNvY3MpKSB7Ci0JCWFzb2MgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24sIGFzb2NzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICYoKHNjdHBfc2soc2spKS0+ZXAtPmFzb2NzKSwgYXNvY3MpIHsKIAkJX19zY3RwX3dyaXRlX3NwYWNlKGFzb2MpOwogCX0KIH0KQEAgLTYxNzgsNyArNjIxMiw3IEBACiAJbG9uZyBjdXJyZW50X3RpbWVvID0gKnRpbWVvX3A7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGFzb2M9JXAsIHRpbWVvPSVsZFxuIiwgX19GVU5DVElPTl9fLCBhc29jLAorCVNDVFBfREVCVUdfUFJJTlRLKCIlczogYXNvYz0lcCwgdGltZW89JWxkXG4iLCBfX2Z1bmNfXywgYXNvYywKIAkJCSAgKGxvbmcpKCp0aW1lb19wKSk7CiAKIAkvKiBJbmNyZW1lbnQgdGhlIGFzc29jaWF0aW9uJ3MgcmVmY250LiAgKi8KQEAgLTY0NTgsOCArNjQ5Miw2IEBACiB9CiAKIAotREVGSU5FX1BST1RPX0lOVVNFKHNjdHApCi0KIC8qIFRoaXMgcHJvdG8gc3RydWN0IGRlc2NyaWJlcyB0aGUgVUxQIGludGVyZmFjZSBmb3IgU0NUUC4gICovCiBzdHJ1Y3QgcHJvdG8gc2N0cF9wcm90ID0gewogCS5uYW1lICAgICAgICA9CSJTQ1RQIiwKQEAgLTY0ODgsMTEgKzY1MjAsMTAgQEAKIAkubWVtb3J5X3ByZXNzdXJlID0gJnNjdHBfbWVtb3J5X3ByZXNzdXJlLAogCS5lbnRlcl9tZW1vcnlfcHJlc3N1cmUgPSBzY3RwX2VudGVyX21lbW9yeV9wcmVzc3VyZSwKIAkubWVtb3J5X2FsbG9jYXRlZCA9ICZzY3RwX21lbW9yeV9hbGxvY2F0ZWQsCi0JUkVGX1BST1RPX0lOVVNFKHNjdHApCisJLnNvY2tldHNfYWxsb2NhdGVkID0gJnNjdHBfc29ja2V0c19hbGxvY2F0ZWQsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1ERUZJTkVfUFJPVE9fSU5VU0Uoc2N0cHY2KQogCiBzdHJ1Y3QgcHJvdG8gc2N0cHY2X3Byb3QgPSB7CiAJLm5hbWUJCT0gIlNDVFB2NiIsCkBAIC02NTIxLDYgKzY1NTIsNiBAQAogCS5tZW1vcnlfcHJlc3N1cmUgPSAmc2N0cF9tZW1vcnlfcHJlc3N1cmUsCiAJLmVudGVyX21lbW9yeV9wcmVzc3VyZSA9IHNjdHBfZW50ZXJfbWVtb3J5X3ByZXNzdXJlLAogCS5tZW1vcnlfYWxsb2NhdGVkID0gJnNjdHBfbWVtb3J5X2FsbG9jYXRlZCwKLQlSRUZfUFJPVE9fSU5VU0Uoc2N0cHY2KQorCS5zb2NrZXRzX2FsbG9jYXRlZCA9ICZzY3RwX3NvY2tldHNfYWxsb2NhdGVkLAogfTsKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3RyYW5zcG9ydC5jIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKaW5kZXggZDlmOGFmOC4uZjQ5MzhmNiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCWlmICh1bmxpa2VseShwbXR1IDwgU0NUUF9ERUZBVUxUX01JTlNFR01FTlQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXBvcnRlZCBwbXR1ICVkIHRvbyBsb3csICIKIAkJICAgICAgICJ1c2luZyBkZWZhdWx0IG1pbmltdW0gb2YgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHBtdHUsCisJCSAgICAgICBfX2Z1bmNfXywgcG10dSwKIAkJICAgICAgIFNDVFBfREVGQVVMVF9NSU5TRUdNRU5UKTsKIAkJLyogVXNlIGRlZmF1bHQgbWluaW11bSBzZWdtZW50IHNpemUgYW5kIGRpc2FibGUKIAkJICogcG10dSBkaXNjb3Zlcnkgb24gdGhpcyB0cmFuc3BvcnQuCkBAIC0zODgsNyArMzg4LDcgQEAKIAl0cC0+cnRvX3BlbmRpbmcgPSAwOwogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiB0cmFuc3BvcnQ6ICVwLCBydHQ6ICVkLCBzcnR0OiAlZCAiCi0JCQkgICJydHR2YXI6ICVkLCBydG86ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkJICAicnR0dmFyOiAlZCwgcnRvOiAlbGRcbiIsIF9fZnVuY19fLAogCQkJICB0cCwgcnR0LCB0cC0+c3J0dCwgdHAtPnJ0dHZhciwgdHAtPnJ0byk7CiB9CiAKQEAgLTQzNCw3ICs0MzQsNyBAQAogCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IFNMT1cgU1RBUlQ6IHRyYW5zcG9ydDogJXAsICIKIAkJCQkgICJieXRlc19hY2tlZDogJWQsIGN3bmQ6ICVkLCBzc3RocmVzaDogJWQsICIKIAkJCQkgICJmbGlnaHRfc2l6ZTogJWQsIHBiYTogJWRcbiIsCi0JCQkJICBfX0ZVTkNUSU9OX18sCisJCQkJICBfX2Z1bmNfXywKIAkJCQkgIHRyYW5zcG9ydCwgYnl0ZXNfYWNrZWQsIGN3bmQsCiAJCQkJICBzc3RocmVzaCwgZmxpZ2h0X3NpemUsIHBiYSk7CiAJfSBlbHNlIHsKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IENPTkdFU1RJT04gQVZPSURBTkNFOiAiCiAJCQkJICAidHJhbnNwb3J0OiAlcCwgYnl0ZXNfYWNrZWQ6ICVkLCBjd25kOiAlZCwgIgogCQkJCSAgInNzdGhyZXNoOiAlZCwgZmxpZ2h0X3NpemU6ICVkLCBwYmE6ICVkXG4iLAotCQkJCSAgX19GVU5DVElPTl9fLAorCQkJCSAgX19mdW5jX18sCiAJCQkJICB0cmFuc3BvcnQsIGJ5dGVzX2Fja2VkLCBjd25kLAogCQkJCSAgc3N0aHJlc2gsIGZsaWdodF9zaXplLCBwYmEpOwogCX0KQEAgLTU0Niw3ICs1NDYsNyBAQAogCiAJdHJhbnNwb3J0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHRyYW5zcG9ydDogJXAgcmVhc29uOiAlZCBjd25kOiAiCi0JCQkgICIlZCBzc3RocmVzaDogJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgIiVkIHNzdGhyZXNoOiAlZFxuIiwgX19mdW5jX18sCiAJCQkgIHRyYW5zcG9ydCwgcmVhc29uLAogCQkJICB0cmFuc3BvcnQtPmN3bmQsIHRyYW5zcG9ydC0+c3N0aHJlc2gpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmMKaW5kZXggZTI3YjExZi4uY2U2Y2RhNiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdWxwZXZlbnQuYworKysgYi9uZXQvc2N0cC91bHBldmVudC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkgKiBUaGlzIGZpZWxkIGlzIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIG5vdGlmaWNhdGlvbiBkYXRhLCBpbmNsdWRpbmcKIAkgKiB0aGUgbm90aWZpY2F0aW9uIGhlYWRlci4KIAkgKi8KLQlzYWMtPnNhY19sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKTsKKwlzYWMtPnNhY19sZW5ndGggPSBza2ItPmxlbjsKIAogCS8qIFNvY2tldCBFeHRlbnNpb25zIGZvciBTQ1RQCiAJICogNS4zLjEuMSBTQ1RQX0FTU09DX0NIQU5HRQpAQCAtODU5LDcgKzg1OSw3IEBACiAJdW5pb24gc2N0cF9ub3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jc2tiID0gc2N0cF9ldmVudDJza2IoKHN0cnVjdCBzY3RwX3VscGV2ZW50ICopZXZlbnQpOworCXNrYiA9IHNjdHBfZXZlbnQyc2tiKGV2ZW50KTsKIAlub3RpZmljYXRpb24gPSAodW5pb24gc2N0cF9ub3RpZmljYXRpb24gKikgc2tiLT5kYXRhOwogCXJldHVybiBub3RpZmljYXRpb24tPnNuX2hlYWRlci5zbl90eXBlOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGI2ZDM1Y2QuLjliNWM5MTcgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCiAJc29jayA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzayA9IHNvY2stPnNrOwotCW5ldCA9IHNrLT5za19uZXQ7CisJbmV0ID0gc29ja19uZXQoc2spOwogCWlmIChjbWQgPj0gU0lPQ0RFVlBSSVZBVEUgJiYgY21kIDw9IChTSU9DREVWUFJJVkFURSArIDE1KSkgewogCQllcnIgPSBkZXZfaW9jdGwobmV0LCBjbWQsIGFyZ3ApOwogCX0gZWxzZQpAQCAtOTA5LDExICs5MDksMTAgQEAKIAkJCWlmICghZGxjaV9pb2N0bF9ob29rKQogCQkJCXJlcXVlc3RfbW9kdWxlKCJkbGNpIik7CiAKLQkJCWlmIChkbGNpX2lvY3RsX2hvb2spIHsKLQkJCQltdXRleF9sb2NrKCZkbGNpX2lvY3RsX211dGV4KTsKKwkJCW11dGV4X2xvY2soJmRsY2lfaW9jdGxfbXV0ZXgpOworCQkJaWYgKGRsY2lfaW9jdGxfaG9vaykKIAkJCQllcnIgPSBkbGNpX2lvY3RsX2hvb2soY21kLCBhcmdwKTsKLQkJCQltdXRleF91bmxvY2soJmRsY2lfaW9jdGxfbXV0ZXgpOwotCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZkbGNpX2lvY3RsX211dGV4KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyID0gc29jay0+b3BzLT5pb2N0bChzb2NrLCBjbWQsIGFyZyk7CkBAIC0xMzc2LDcgKzEzNzUsNyBAQAogCiAJc29jayA9IHNvY2tmZF9sb29rdXBfbGlnaHQoZmQsICZlcnIsICZmcHV0X25lZWRlZCk7CiAJaWYgKHNvY2spIHsKLQkJc29tYXhjb25uID0gc29jay0+c2stPnNrX25ldC0+c3lzY3RsX3NvbWF4Y29ubjsKKwkJc29tYXhjb25uID0gc29ja19uZXQoc29jay0+c2spLT5jb3JlLnN5c2N0bF9zb21heGNvbm47CiAJCWlmICgodW5zaWduZWQpYmFja2xvZyA+IHNvbWF4Y29ubikKIAkJCWJhY2tsb2cgPSBzb21heGNvbm47CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCA2ZGFjMzg3Li41ODI4ZTVjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC02MjUsNyArNjI1LDcgQEAKIAlnc3NfYXV0aC0+bWVjaCA9IGdzc19tZWNoX2dldF9ieV9wc2V1ZG9mbGF2b3IoZmxhdm9yKTsKIAlpZiAoIWdzc19hdXRoLT5tZWNoKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQc2V1ZG9mbGF2b3IgJWQgbm90IGZvdW5kIVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGZsYXZvcik7CisJCQkJX19mdW5jX18sIGZsYXZvcik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCWdzc19hdXRoLT5zZXJ2aWNlID0gZ3NzX3BzZXVkb2ZsYXZvcl90b19zZXJ2aWNlKGdzc19hdXRoLT5tZWNoLCBmbGF2b3IpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKaW5kZXggNjE4MDFhMC4uYmNlOWQ1MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAogCWlmICghKmNvbnRleHRfaGFuZGxlKQogCQlyZXR1cm4oR1NTX1NfTk9fQ09OVEVYVCk7Ci0JaWYgKCgqY29udGV4dF9oYW5kbGUpLT5pbnRlcm5hbF9jdHhfaWQgIT0gMCkKKwlpZiAoKCpjb250ZXh0X2hhbmRsZSktPmludGVybmFsX2N0eF9pZCkKIAkJKCpjb250ZXh0X2hhbmRsZSktPm1lY2hfdHlwZS0+Z21fb3BzCiAJCQktPmdzc19kZWxldGVfc2VjX2NvbnRleHQoKCpjb250ZXh0X2hhbmRsZSkKIAkJCQkJCQktPmludGVybmFsX2N0eF9pZCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NhY2hlLmMgYi9uZXQvc3VucnBjL2NhY2hlLmMKaW5kZXggNjM2YzhlMC4uYjVmMjc4NiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jYWNoZS5jCisrKyBiL25ldC9zdW5ycGMvY2FjaGUuYwpAQCAtMzE2LDMxICszMTYsMjkgQEAKIAljZC0+cHJvY19lbnQtPm93bmVyID0gY2QtPm93bmVyOwogCWNkLT5jaGFubmVsX2VudCA9IGNkLT5jb250ZW50X2VudCA9IE5VTEw7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoImZsdXNoIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsIGNkLT5wcm9jX2VudCk7CisJcCA9IHByb2NfY3JlYXRlKCJmbHVzaCIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLAorCQkJY2QtPnByb2NfZW50LCAmY2FjaGVfZmx1c2hfb3BlcmF0aW9ucyk7CiAJY2QtPmZsdXNoX2VudCA9IHA7CiAJaWYgKHAgPT0gTlVMTCkKIAkJZ290byBvdXRfbm9tZW07Ci0JcC0+cHJvY19mb3BzID0gJmNhY2hlX2ZsdXNoX29wZXJhdGlvbnM7CiAJcC0+b3duZXIgPSBjZC0+b3duZXI7CiAJcC0+ZGF0YSA9IGNkOwogCiAJaWYgKGNkLT5jYWNoZV9yZXF1ZXN0IHx8IGNkLT5jYWNoZV9wYXJzZSkgewotCQlwID0gY3JlYXRlX3Byb2NfZW50cnkoImNoYW5uZWwiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKLQkJCQkgICAgICBjZC0+cHJvY19lbnQpOworCQlwID0gcHJvY19jcmVhdGUoImNoYW5uZWwiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKKwkJCQljZC0+cHJvY19lbnQsICZjYWNoZV9maWxlX29wZXJhdGlvbnMpOwogCQljZC0+Y2hhbm5lbF9lbnQgPSBwOwogCQlpZiAocCA9PSBOVUxMKQogCQkJZ290byBvdXRfbm9tZW07Ci0JCXAtPnByb2NfZm9wcyA9ICZjYWNoZV9maWxlX29wZXJhdGlvbnM7CiAJCXAtPm93bmVyID0gY2QtPm93bmVyOwogCQlwLT5kYXRhID0gY2Q7CiAJfQogCWlmIChjZC0+Y2FjaGVfc2hvdykgewotCQlwID0gY3JlYXRlX3Byb2NfZW50cnkoImNvbnRlbnQiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKLQkJCQkgICAgICBjZC0+cHJvY19lbnQpOworCQlwID0gcHJvY19jcmVhdGUoImNvbnRlbnQiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKKwkJCQljZC0+cHJvY19lbnQsICZjb250ZW50X2ZpbGVfb3BlcmF0aW9ucyk7CiAJCWNkLT5jb250ZW50X2VudCA9IHA7CiAJCWlmIChwID09IE5VTEwpCiAJCQlnb3RvIG91dF9ub21lbTsKLQkJcC0+cHJvY19mb3BzID0gJmNvbnRlbnRfZmlsZV9vcGVyYXRpb25zOwogCQlwLT5vd25lciA9IGNkLT5vd25lcjsKIAkJcC0+ZGF0YSA9IGNkOwogCX0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggOGM2YTdmMS4uN2I5NmZmMyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTQzLDcgKzQzLDcgQEAKIAogI2RlZmluZSBkcHJpbnRfc3RhdHVzKHQpCQkJCQlcCiAJZHByaW50aygiUlBDOiAlNXUgJXMgKHN0YXR1cyAlZClcbiIsIHQtPnRrX3BpZCwJCVwKLQkJCV9fRlVOQ1RJT05fXywgdC0+dGtfc3RhdHVzKQorCQkJX19mdW5jX18sIHQtPnRrX3N0YXR1cykKIAogLyoKICAqIEFsbCBSUEMgY2xpZW50cyBhcmUgbGlua2VkIGludG8gdGhpcyBsaXN0CkBAIC0yNjEsMTAgKzI2MSw2IEBACiAJfTsKIAljaGFyIHNlcnZlcm5hbWVbNDhdOwogCi0JeHBydCA9IHhwcnRfY3JlYXRlX3RyYW5zcG9ydCgmeHBydGFyZ3MpOwotCWlmIChJU19FUlIoeHBydCkpCi0JCXJldHVybiAoc3RydWN0IHJwY19jbG50ICopeHBydDsKLQogCS8qCiAJICogSWYgdGhlIGNhbGxlciBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgaG9zdG5hbWUsIHdoaXAKIAkgKiB1cCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFzc2VkLWluIGFkZHJlc3MuCkBAIC0zNzIsNyArMzY4LDcgQEAKIG91dF9ub19zdGF0czoKIAlrZnJlZShuZXcpOwogb3V0X25vX2NsbnQ6Ci0JZHByaW50aygiUlBDOiAgICAgICAlczogcmV0dXJuZWQgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiByZXR1cm5lZCBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19jbG9uZV9jbGllbnQpOwpAQCAtNzU2LDcgKzc1Miw3IEBACiAJCX0KIAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzdGF0dXM9JWQsIGJ1dCBubyByZXF1ZXN0IHNsb3QsIGV4aXRpbmdcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlycGNfZXhpdCh0YXNrLCAtRUlPKTsKIAkJcmV0dXJuOwogCX0KQEAgLTc2Nyw3ICs3NjMsNyBAQAogCSAqLwogCWlmICh0YXNrLT50a19ycXN0cCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzdGF0dXM9JWQsIHJlcXVlc3QgYWxsb2NhdGVkIGFueXdheVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXhwcnRfcmVsZWFzZSh0YXNrKTsKIAl9CiAKQEAgLTc3OSw3ICs3NzUsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbml6ZWQgZXJyb3IgJWQsIGV4aXRpbmdcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlicmVhazsKIAl9CiAJcnBjX2V4aXQodGFzaywgc3RhdHVzKTsKQEAgLTEzMjcsNyArMTMyMyw3IEBACiAJCSAqICAgdW5kZWZpbmVkIHJlc3VsdHMKIAkJICovCiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBYRFIgcmVwcmVzZW50YXRpb24gbm90IGEgbXVsdGlwbGUgb2YiCi0JCSAgICAgICAiIDQgYnl0ZXM6IDB4JXhcbiIsIHRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fLAorCQkgICAgICAgIiA0IGJ5dGVzOiAweCV4XG4iLCB0YXNrLT50a19waWQsIF9fZnVuY19fLAogCQkgICAgICAgdGFzay0+dGtfcnFzdHAtPnJxX3Jjdl9idWYubGVuKTsKIAkJZ290byBvdXRfZWlvOwogCX0KQEAgLTEzMzcsNyArMTMzMyw3IEBACiAKIAlpZiAoKG4gPSBudG9obCgqcCsrKSkgIT0gUlBDX1JFUExZKSB7CiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBub3QgYW4gUlBDIHJlcGx5OiAleFxuIiwKLQkJCQl0YXNrLT50a19waWQsIF9fRlVOQ1RJT05fXywgbik7CisJCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXywgbik7CiAJCWdvdG8gb3V0X2dhcmJhZ2U7CiAJfQogCWlmICgobiA9IG50b2hsKCpwKyspKSAhPSBSUENfTVNHX0FDQ0VQVEVEKSB7CkBAIC0xMzQ5LDEzICsxMzQ1LDEzIEBACiAJCQljYXNlIFJQQ19NSVNNQVRDSDoKIAkJCQlkcHJpbnRrKCJSUEM6ICU1dSAlczogUlBDIGNhbGwgdmVyc2lvbiAiCiAJCQkJCQkibWlzbWF0Y2ghXG4iLAotCQkJCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18pOworCQkJCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXyk7CiAJCQkJZXJyb3IgPSAtRVBST1RPTk9TVVBQT1JUOwogCQkJCWdvdG8gb3V0X2VycjsKIAkJCWRlZmF1bHQ6CiAJCQkJZHByaW50aygiUlBDOiAlNXUgJXM6IFJQQyBjYWxsIHJlamVjdGVkLCAiCiAJCQkJCQkidW5rbm93biBlcnJvcjogJXhcbiIsCi0JCQkJCQl0YXNrLT50a19waWQsIF9fRlVOQ1RJT05fXywgbik7CisJCQkJCQl0YXNrLT50a19waWQsIF9fZnVuY19fLCBuKTsKIAkJCQlnb3RvIG91dF9laW87CiAJCX0KIAkJaWYgKC0tbGVuIDwgMCkKQEAgLTEzNjksNyArMTM2NSw3IEBACiAJCQkJYnJlYWs7CiAJCQl0YXNrLT50a19jcmVkX3JldHJ5LS07CiAJCQlkcHJpbnRrKCJSUEM6ICU1dSAlczogcmV0cnkgc3RhbGUgY3JlZHNcbiIsCi0JCQkJCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fKTsKKwkJCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXyk7CiAJCQlycGNhdXRoX2ludmFsY3JlZCh0YXNrKTsKIAkJCS8qIEVuc3VyZSB3ZSBvYnRhaW4gYSBuZXcgWElEISAqLwogCQkJeHBydF9yZWxlYXNlKHRhc2spOwpAQCAtMTM4Miw3ICsxMzc4LDcgQEAKIAkJCQlicmVhazsKIAkJCXRhc2stPnRrX2dhcmJfcmV0cnktLTsKIAkJCWRwcmludGsoIlJQQzogJTV1ICVzOiByZXRyeSBnYXJibGVkIGNyZWRzXG4iLAotCQkJCQl0YXNrLT50a19waWQsIF9fRlVOQ1RJT05fXyk7CisJCQkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18pOwogCQkJdGFzay0+dGtfYWN0aW9uID0gY2FsbF9iaW5kOwogCQkJZ290byBvdXRfcmV0cnk7CiAJCWNhc2UgUlBDX0FVVEhfVE9PV0VBSzoKQEAgLTEzOTEsMTYgKzEzODcsMTYgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZHByaW50aygiUlBDOiAlNXUgJXM6IHVua25vd24gYXV0aCBlcnJvcjogJXhcbiIsCi0JCQkJCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fLCBuKTsKKwkJCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXywgbik7CiAJCQllcnJvciA9IC1FSU87CiAJCX0KIAkJZHByaW50aygiUlBDOiAlNXUgJXM6IGNhbGwgcmVqZWN0ZWQgJWRcbiIsCi0JCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18sIG4pOworCQkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18sIG4pOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCWlmICghKHAgPSBycGNhdXRoX2NoZWNrdmVyZih0YXNrLCBwKSkpIHsKIAkJZHByaW50aygiUlBDOiAlNXUgJXM6IGF1dGggY2hlY2sgZmFpbGVkXG4iLAotCQkJCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fKTsKKwkJCQl0YXNrLT50a19waWQsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZ2FyYmFnZTsJCS8qIGJhZCB2ZXJpZmllciwgcmV0cnkgKi8KIAl9CiAJbGVuID0gcCAtIChfX2JlMzIgKilpb3YtPmlvdl9iYXNlIC0gMTsKQEAgLTE0MTEsMTQgKzE0MDcsMTQgQEAKIAkJcmV0dXJuIHA7CiAJY2FzZSBSUENfUFJPR19VTkFWQUlMOgogCQlkcHJpbnRrKCJSUEM6ICU1dSAlczogcHJvZ3JhbSAldSBpcyB1bnN1cHBvcnRlZCBieSBzZXJ2ZXIgJXNcbiIsCi0JCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18sCisJCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXywKIAkJCQkodW5zaWduZWQgaW50KXRhc2stPnRrX2NsaWVudC0+Y2xfcHJvZywKIAkJCQl0YXNrLT50a19jbGllbnQtPmNsX3NlcnZlcik7CiAJCWVycm9yID0gLUVQRk5PU1VQUE9SVDsKIAkJZ290byBvdXRfZXJyOwogCWNhc2UgUlBDX1BST0dfTUlTTUFUQ0g6CiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBwcm9ncmFtICV1LCB2ZXJzaW9uICV1IHVuc3VwcG9ydGVkIGJ5ICIKLQkJCQkic2VydmVyICVzXG4iLCB0YXNrLT50a19waWQsIF9fRlVOQ1RJT05fXywKKwkJCQkic2VydmVyICVzXG4iLCB0YXNrLT50a19waWQsIF9fZnVuY19fLAogCQkJCSh1bnNpZ25lZCBpbnQpdGFzay0+dGtfY2xpZW50LT5jbF9wcm9nLAogCQkJCSh1bnNpZ25lZCBpbnQpdGFzay0+dGtfY2xpZW50LT5jbF92ZXJzLAogCQkJCXRhc2stPnRrX2NsaWVudC0+Y2xfc2VydmVyKTsKQEAgLTE0MjcsNyArMTQyMyw3IEBACiAJY2FzZSBSUENfUFJPQ19VTkFWQUlMOgogCQlkcHJpbnRrKCJSUEM6ICU1dSAlczogcHJvYyAlcCB1bnN1cHBvcnRlZCBieSBwcm9ncmFtICV1LCAiCiAJCQkJInZlcnNpb24gJXUgb24gc2VydmVyICVzXG4iLAotCQkJCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fLAorCQkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18sCiAJCQkJdGFzay0+dGtfbXNnLnJwY19wcm9jLAogCQkJCXRhc2stPnRrX2NsaWVudC0+Y2xfcHJvZywKIAkJCQl0YXNrLT50a19jbGllbnQtPmNsX3ZlcnMsCkBAIC0xNDM2LDExICsxNDMyLDExIEBACiAJCWdvdG8gb3V0X2VycjsKIAljYXNlIFJQQ19HQVJCQUdFX0FSR1M6CiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBzZXJ2ZXIgc2F3IGdhcmJhZ2VcbiIsCi0JCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18pOworCQkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18pOwogCQlicmVhazsJCQkvKiByZXRyeSAqLwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBzZXJ2ZXIgYWNjZXB0IHN0YXR1czogJXhcbiIsCi0JCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18sIG4pOworCQkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18sIG4pOwogCQkvKiBBbHNvIHJldHJ5ICovCiAJfQogCkBAIC0xNDQ5LDcgKzE0NDUsNyBAQAogCWlmICh0YXNrLT50a19nYXJiX3JldHJ5KSB7CiAJCXRhc2stPnRrX2dhcmJfcmV0cnktLTsKIAkJZHByaW50aygiUlBDOiAlNXUgJXM6IHJldHJ5aW5nXG4iLAotCQkJCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fKTsKKwkJCQl0YXNrLT50a19waWQsIF9fZnVuY19fKTsKIAkJdGFzay0+dGtfYWN0aW9uID0gY2FsbF9iaW5kOwogb3V0X3JldHJ5OgogCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKQEAgLTE0NTksMTEgKzE0NTUsMTEgQEAKIG91dF9lcnI6CiAJcnBjX2V4aXQodGFzaywgZXJyb3IpOwogCWRwcmludGsoIlJQQzogJTV1ICVzOiBjYWxsIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCB0YXNrLT50a19waWQsCi0JCQlfX0ZVTkNUSU9OX18sIGVycm9yKTsKKwkJCV9fZnVuY19fLCBlcnJvcik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogb3V0X292ZXJmbG93OgogCWRwcmludGsoIlJQQzogJTV1ICVzOiBzZXJ2ZXIgcmVwbHkgd2FzIHRydW5jYXRlZC5cbiIsIHRhc2stPnRrX3BpZCwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJZ290byBvdXRfZ2FyYmFnZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IDFiMzk1YTQuLjVhOWIwZTcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTQ3OSwxMyArNDc5LDEzIEBACiAJbW50ID0gcnBjX2dldF9tb3VudCgpOwogCWlmIChJU19FUlIobW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgZmFpbGVkIHRvIG1vdW50ICIKLQkJCSAgICAgICAicHNldWRvZmlsZXN5c3RlbSBcbiIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18pOworCQkJICAgICAgICJwc2V1ZG9maWxlc3lzdGVtIFxuIiwgX19GSUxFX18sIF9fZnVuY19fKTsKIAkJcmV0dXJuIFBUUl9FUlIobW50KTsKIAl9CiAKIAlpZiAodmZzX3BhdGhfbG9va3VwKG1udC0+bW50X3Jvb3QsIG1udCwgcGF0aCwgTE9PS1VQX1BBUkVOVCwgbmQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBmYWlsZWQgdG8gZmluZCBwYXRoICVzXG4iLAotCQkJCV9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIHBhdGgpOworCQkJCV9fRklMRV9fLCBfX2Z1bmNfXywgcGF0aCk7CiAJCXJwY19wdXRfbW91bnQoKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQpAQCAtNjA0LDcgKzYwNCw3IEBACiBvdXRfYmFkOgogCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgZmFpbGVkIHRvIHBvcHVsYXRlIGRpcmVjdG9yeSAlc1xuIiwKLQkJCV9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOworCQkJX19GSUxFX18sIF9fZnVuY19fLCBwYXJlbnQtPmRfbmFtZS5uYW1lKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtNjIzLDcgKzYyMyw3IEBACiAJcmV0dXJuIDA7CiBvdXRfZXJyOgogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBmYWlsZWQgdG8gYWxsb2NhdGUgaW5vZGUgZm9yIGRlbnRyeSAlc1xuIiwKLQkJCV9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJX19GSUxFX18sIF9fZnVuY19fLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtNzE1LDcgKzcxNSw3IEBACiBlcnJfZHB1dDoKIAlkcHV0KGRlbnRyeSk7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzKCkgZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMgKGVycm5vID0gJWQpXG4iLAotCQkJX19GSUxFX18sIF9fRlVOQ1RJT05fXywgcGF0aCwgZXJyb3IpOworCQkJX19GSUxFX18sIF9fZnVuY19fLCBwYXRoLCBlcnJvcik7CiAJZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7CiAJZ290byBvdXQ7CiB9CkBAIC04MDQsNyArODA0LDcgQEAKIAlkcHV0KGRlbnRyeSk7CiAJZGVudHJ5ID0gRVJSX1BUUigtRU5PTUVNKTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMoKSBmYWlsZWQgdG8gY3JlYXRlIHBpcGUgJXMvJXMgKGVycm5vID0gJWQpXG4iLAotCQkJX19GSUxFX18sIF9fRlVOQ1RJT05fXywgcGFyZW50LT5kX25hbWUubmFtZSwgbmFtZSwKKwkJCV9fRklMRV9fLCBfX2Z1bmNfXywgcGFyZW50LT5kX25hbWUubmFtZSwgbmFtZSwKIAkJCS1FTk9NRU0pOwogCWdvdG8gb3V0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggMzE2NGEwOC4uNTZhYTAxOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJZHByaW50aygiUlBDOiAgICAgICAlcygiIE5JUFFVQURfRk1UICIsICV1LCAldSwgJWQpXG4iLAotCQlfX0ZVTkNUSU9OX18sIE5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBwcm9nLCB2ZXJzLCBwcm90KTsKKwkJX19mdW5jX18sIE5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBwcm9nLCB2ZXJzLCBwcm90KTsKIAogCXJwY2JfY2xudCA9IHJwY2JfY3JlYXRlKE5VTEwsIChzdHJ1Y3Qgc29ja2FkZHIgKilzaW4sCiAJCQkJc2l6ZW9mKCpzaW4pLCBwcm90LCAyLCAwKTsKQEAgLTI4Myw3ICsyODMsNyBAQAogCXN0cnVjdCBycGNiX2luZm8gKmluZm87CiAKIAlkcHJpbnRrKCJSUEM6ICU1dSAlcyglcywgJXUsICV1LCAlZClcbiIsCi0JCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fLAorCQl0YXNrLT50a19waWQsIF9fZnVuY19fLAogCQljbG50LT5jbF9zZXJ2ZXIsIGNsbnQtPmNsX3Byb2csIGNsbnQtPmNsX3ZlcnMsIHhwcnQtPnByb3QpOwogCiAJLyogQXV0b2JpbmQgb24gY2xvbmVkIHJwYyBjbGllbnRzIGlzIGRpc2NvdXJhZ2VkICovCkBAIC0yOTIsNyArMjkyLDcgQEAKIAlpZiAoeHBydF90ZXN0X2FuZF9zZXRfYmluZGluZyh4cHJ0KSkgewogCQlzdGF0dXMgPSAtRUFHQUlOOwkvKiB0ZWxsIGNhbGxlciB0byBjaGVjayBhZ2FpbiAqLwogCQlkcHJpbnRrKCJSUEM6ICU1dSAlczogd2FpdGluZyBmb3IgYW5vdGhlciBiaW5kZXJcbiIsCi0JCQl0YXNrLT50a19waWQsIF9fRlVOQ1RJT05fXyk7CisJCQl0YXNrLT50a19waWQsIF9fZnVuY19fKTsKIAkJZ290byBiYWlsb3V0X25vd2FrZTsKIAl9CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCWlmICh4cHJ0X2JvdW5kKHhwcnQpKSB7CiAJCXN0YXR1cyA9IDA7CiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBhbHJlYWR5IGJvdW5kXG4iLAotCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18pOworCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXyk7CiAJCWdvdG8gYmFpbG91dF9ub2ZyZWU7CiAJfQogCkBAIC0zMjEsMjcgKzMyMSwyNyBAQAogCWRlZmF1bHQ6CiAJCXN0YXR1cyA9IC1FQUZOT1NVUFBPUlQ7CiAJCWRwcmludGsoIlJQQzogJTV1ICVzOiBiYWQgYWRkcmVzcyBmYW1pbHlcbiIsCi0JCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18pOworCQkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18pOwogCQlnb3RvIGJhaWxvdXRfbm9mcmVlOwogCX0KIAlpZiAoaW5mb1t4cHJ0LT5iaW5kX2luZGV4XS5ycGNfcHJvYyA9PSBOVUxMKSB7CiAJCXhwcnQtPmJpbmRfaW5kZXggPSAwOwogCQlzdGF0dXMgPSAtRVBGTk9TVVBQT1JUOwogCQlkcHJpbnRrKCJSUEM6ICU1dSAlczogbm8gbW9yZSBnZXRwb3J0IHZlcnNpb25zIGF2YWlsYWJsZVxuIiwKLQkJCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fKTsKKwkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18pOwogCQlnb3RvIGJhaWxvdXRfbm9mcmVlOwogCX0KIAliaW5kX3ZlcnNpb24gPSBpbmZvW3hwcnQtPmJpbmRfaW5kZXhdLnJwY192ZXJzOwogCiAJZHByaW50aygiUlBDOiAlNXUgJXM6IHRyeWluZyBycGNiaW5kIHZlcnNpb24gJXVcbiIsCi0JCXRhc2stPnRrX3BpZCwgX19GVU5DVElPTl9fLCBiaW5kX3ZlcnNpb24pOworCQl0YXNrLT50a19waWQsIF9fZnVuY19fLCBiaW5kX3ZlcnNpb24pOwogCiAJcnBjYl9jbG50ID0gcnBjYl9jcmVhdGUoY2xudC0+Y2xfc2VydmVyLCBzYXAsIHNhbGVuLCB4cHJ0LT5wcm90LAogCQkJCWJpbmRfdmVyc2lvbiwgMCk7CiAJaWYgKElTX0VSUihycGNiX2NsbnQpKSB7CiAJCXN0YXR1cyA9IFBUUl9FUlIocnBjYl9jbG50KTsKIAkJZHByaW50aygiUlBDOiAlNXUgJXM6IHJwY2JfY3JlYXRlIGZhaWxlZCwgZXJyb3IgJWxkXG4iLAotCQkJdGFzay0+dGtfcGlkLCBfX0ZVTkNUSU9OX18sIFBUUl9FUlIocnBjYl9jbG50KSk7CisJCQl0YXNrLT50a19waWQsIF9fZnVuY19fLCBQVFJfRVJSKHJwY2JfY2xudCkpOwogCQlnb3RvIGJhaWxvdXRfbm9mcmVlOwogCX0KIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJaWYgKCFtYXApIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJZHByaW50aygiUlBDOiAlNXUgJXM6IG5vIG1lbW9yeSBhdmFpbGFibGVcbiIsCi0JCQl0YXNrLT50a19waWQsIF9fRlVOQ1RJT05fXyk7CisJCQl0YXNrLT50a19waWQsIF9fZnVuY19fKTsKIAkJZ290byBiYWlsb3V0X25vZnJlZTsKIAl9CiAJbWFwLT5yX3Byb2cgPSBjbG50LT5jbF9wcm9nOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJaWYgKElTX0VSUihjaGlsZCkpIHsKIAkJc3RhdHVzID0gLUVJTzsKIAkJZHByaW50aygiUlBDOiAlNXUgJXM6IHJwY19ydW5fdGFzayBmYWlsZWRcbiIsCi0JCQl0YXNrLT50a19waWQsIF9fRlVOQ1RJT05fXyk7CisJCQl0YXNrLT50a19waWQsIF9fZnVuY19fKTsKIAkJZ290byBiYWlsb3V0OwogCX0KIAlycGNfcHV0X3Rhc2soY2hpbGQpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdGF0cy5jIGIvbmV0L3N1bnJwYy9zdGF0cy5jCmluZGV4IDVhMTY4NzUuLmM2MDYxYTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3RhdHMuYworKysgYi9uZXQvc3VucnBjL3N0YXRzLmMKQEAgLTIyOSw5ICsyMjksOCBAQAogCXJwY19wcm9jX2luaXQoKTsKIAlkcHJpbnRrKCJSUEM6ICAgICAgIHJlZ2lzdGVyaW5nIC9wcm9jL25ldC9ycGMvJXNcbiIsIG5hbWUpOwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgMCwgcHJvY19uZXRfcnBjKTsKKwllbnQgPSBwcm9jX2NyZWF0ZShuYW1lLCAwLCBwcm9jX25ldF9ycGMsIGZvcHMpOwogCWlmIChlbnQpIHsKLQkJZW50LT5wcm9jX2ZvcHMgPSBmb3BzOwogCQllbnQtPmRhdGEgPSBkYXRhOwogCX0KIAlyZXR1cm4gZW50OwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggYTI5MGUxNS4uMDkwYWY3OCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0zMDEsNyArMzAxLDYgQEAKIHN2Y19wb29sX21hcF9zZXRfY3B1bWFzayh1bnNpZ25lZCBpbnQgcGlkeCwgY3B1bWFza190ICpvbGRtYXNrKQogewogCXN0cnVjdCBzdmNfcG9vbF9tYXAgKm0gPSAmc3ZjX3Bvb2xfbWFwOwotCXVuc2lnbmVkIGludCBub2RlOyAvKiBvciBjcHUgKi8KIAogCS8qCiAJICogVGhlIGNhbGxlciBjaGVja3MgZm9yIHN2X25ycG9vbHMgPiAxLCB3aGljaApAQCAtMzE0LDE2ICszMTMsMjMgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAljYXNlIFNWQ19QT09MX1BFUkNQVToKLQkJbm9kZSA9IG0tPnBvb2xfdG9bcGlkeF07CisJeworCQl1bnNpZ25lZCBpbnQgY3B1ID0gbS0+cG9vbF90b1twaWR4XTsKKwogCQkqb2xkbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQkJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShub2RlKSk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKIAkJcmV0dXJuIDE7CisJfQogCWNhc2UgU1ZDX1BPT0xfUEVSTk9ERToKLQkJbm9kZSA9IG0tPnBvb2xfdG9bcGlkeF07CisJeworCQl1bnNpZ25lZCBpbnQgbm9kZSA9IG0tPnBvb2xfdG9bcGlkeF07CisJCW5vZGVfdG9fY3B1bWFza19wdHIobm9kZWNwdW1hc2ssIG5vZGUpOworCiAJCSpvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG5vZGVfdG9fY3B1bWFzayhub2RlKSk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG5vZGVjcHVtYXNrKTsKIAkJcmV0dXJuIDE7CiAJfQorCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwppbmRleCBlYTM3N2UwLi4zMzJlYjQ3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAlzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3MgKnhjbDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luID0gewogCQkuc2luX2ZhbWlseQkJPSBBRl9JTkVULAotCQkuc2luX2FkZHIuc19hZGRyCT0gSU5BRERSX0FOWSwKKwkJLnNpbl9hZGRyLnNfYWRkcgk9IGh0b25sKElOQUREUl9BTlkpLAogCQkuc2luX3BvcnQJCT0gaHRvbnMocG9ydCksCiAJfTsKIAlkcHJpbnRrKCJzdmM6IGNyZWF0aW5nIHRyYW5zcG9ydCAlc1slZF1cbiIsIHhwcnRfbmFtZSwgcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDFkM2U1ZmMuLmM0NzU5NzcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlzaXplX3QJCWJhc2UgPSB4ZHItPnBhZ2VfYmFzZTsKIAl1bnNpZ25lZCBpbnQJcGdsZW4gPSB4ZHItPnBhZ2VfbGVuOwogCXVuc2lnbmVkIGludAlmbGFncyA9IE1TR19NT1JFOwotCWNoYXIJCWJ1ZltSUENfTUFYX0FERFJCVUZMRU5dOworCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwogCiAJc2xlbiA9IHhkci0+bGVuOwogCkBAIC03MTYsNyArNzE2LDcgQEAKIAlzdHJ1Y3Qgc29ja2V0CSpuZXdzb2NrOwogCXN0cnVjdCBzdmNfc29jawkqbmV3c3ZzazsKIAlpbnQJCWVyciwgc2xlbjsKLQljaGFyCQlidWZbUlBDX01BWF9BRERSQlVGTEVOXTsKKwlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKIAogCWRwcmludGsoInN2YzogdGNwX2FjY2VwdCAlcCBzb2NrICVwXG4iLCBzdnNrLCBzb2NrKTsKIAlpZiAoIXNvY2spCkBAIC0xMjA2LDEwICsxMjA2LDEwIEBACiAJc3RydWN0IHNvY2tldAkqc29jazsKIAlpbnQJCWVycm9yOwogCWludAkJdHlwZTsKLQljaGFyCQlidWZbUlBDX01BWF9BRERSQlVGTEVOXTsKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOwogCXN0cnVjdCBzb2NrYWRkciAqbmV3c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyOwogCWludAkJbmV3bGVuOworCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwogCiAJZHByaW50aygic3ZjOiBzdmNfY3JlYXRlX3NvY2tldCglcywgJWQsICVzKVxuIiwKIAkJCXNlcnYtPnN2X3Byb2dyYW0tPnBnX25hbWUsIHByb3RvY29sLApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94ZHIuYyBiL25ldC9zdW5ycGMveGRyLmMKaW5kZXggOTk1YzNmZC4uNzlhNTVkNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94ZHIuYworKysgYi9uZXQvc3VucnBjL3hkci5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlwZ3RvID0gcGFnZXMgKyAocGdiYXNlID4+IFBBR0VfQ0FDSEVfU0hJRlQpOwogCXBnYmFzZSAmPSB+UEFHRV9DQUNIRV9NQVNLOwogCi0JZG8geworCWZvciAoOzspIHsKIAkJY29weSA9IFBBR0VfQ0FDSEVfU0laRSAtIHBnYmFzZTsKIAkJaWYgKGNvcHkgPiBsZW4pCiAJCQljb3B5ID0gbGVuOwpAQCAtMjUzLDYgKzI1MywxMCBAQAogCQltZW1jcHkodnRvICsgcGdiYXNlLCBwLCBjb3B5KTsKIAkJa3VubWFwX2F0b21pYyh2dG8sIEtNX1VTRVIwKTsKIAorCQlsZW4gLT0gY29weTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisKIAkJcGdiYXNlICs9IGNvcHk7CiAJCWlmIChwZ2Jhc2UgPT0gUEFHRV9DQUNIRV9TSVpFKSB7CiAJCQlmbHVzaF9kY2FjaGVfcGFnZSgqcGd0byk7CkBAIC0yNjAsOCArMjY0LDcgQEAKIAkJCXBndG8rKzsKIAkJfQogCQlwICs9IGNvcHk7Ci0KLQl9IHdoaWxlICgobGVuIC09IGNvcHkpICE9IDApOworCX0KIAlmbHVzaF9kY2FjaGVfcGFnZSgqcGd0byk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYwppbmRleCBhYjU0YTczLi5jMjJkNmI2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3JlY3Zmcm9tLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9yZWN2ZnJvbS5jCkBAIC0yMzcsMTQgKzIzNywxMiBAQAogCiBzdGF0aWMgaW50IHJkbWFfcmVhZF9tYXhfc2dlKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsIGludCBzZ2VfY291bnQpCiB7Ci0jaWZkZWYgUkRNQV9UUkFOU1BPUlRfSVdBUlAKIAlpZiAoKFJETUFfVFJBTlNQT1JUX0lXQVJQID09CiAJICAgICByZG1hX25vZGVfZ2V0X3RyYW5zcG9ydCh4cHJ0LT5zY19jbV9pZC0+CiAJCQkJICAgICBkZXZpY2UtPm5vZGVfdHlwZSkpCiAJICAgICYmIHNnZV9jb3VudCA+IDEpCiAJCXJldHVybiAxOwogCWVsc2UKLSNlbmRpZgogCQlyZXR1cm4gbWluX3QoaW50LCBzZ2VfY291bnQsIHhwcnQtPnNjX21heF9zZ2UpOwogfQogCkBAIC0zMjQsMTUgKzMyMiw2IEBACiAJCWN0eHQtPmRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAkJY2xlYXJfYml0KFJETUFDVFhUX0ZfUkVBRF9ET05FLCAmY3R4dC0+ZmxhZ3MpOwogCQljbGVhcl9iaXQoUkRNQUNUWFRfRl9MQVNUX0NUWFQsICZjdHh0LT5mbGFncyk7Ci0JCWlmICgoY2grMSktPnJjX2Rpc2NyaW0gPT0gMCkgewotCQkJLyoKLQkJCSAqIENoZWNrZWQgaW4gc3FfY3FfcmVhcCB0byBzZWUgaWYgd2UgbmVlZCB0bwotCQkJICogYmUgZW5xdWV1ZWQKLQkJCSAqLwotCQkJc2V0X2JpdChSRE1BQ1RYVF9GX0xBU1RfQ1RYVCwgJmN0eHQtPmZsYWdzKTsKLQkJCWN0eHQtPm5leHQgPSBoZHJfY3R4dDsKLQkJCWhkcl9jdHh0LT5uZXh0ID0gaGVhZDsKLQkJfQogCiAJCS8qIFByZXBhcmUgUkVBRCBXUiAqLwogCQltZW1zZXQoJnJlYWRfd3IsIDAsIHNpemVvZiByZWFkX3dyKTsKQEAgLTM1MCw3ICszMzksMTcgQEAKIAkJcmRtYV9zZXRfY3R4dF9zZ2UoY3R4dCwgJnNnZVtjaF9zZ2VfYXJ5W2NoX25vXS5zdGFydF0sCiAJCQkJICAmc2dsX29mZnNldCwKIAkJCQkgIHJlYWRfd3IubnVtX3NnZSk7Ci0KKwkJaWYgKCgoY2grMSktPnJjX2Rpc2NyaW0gPT0gMCkgJiYKKwkJICAgIChyZWFkX3dyLm51bV9zZ2UgPT0gY2hfc2dlX2FyeVtjaF9ub10uY291bnQpKSB7CisJCQkvKgorCQkJICogTWFyayB0aGUgbGFzdCBSRE1BX1JFQUQgd2l0aCBhIGJpdCB0bworCQkJICogaW5kaWNhdGUgYWxsIFJQQyBkYXRhIGhhcyBiZWVuIGZldGNoZWQgZnJvbQorCQkJICogdGhlIGNsaWVudCBhbmQgdGhlIFJQQyBuZWVkcyB0byBiZSBlbnF1ZXVlZC4KKwkJCSAqLworCQkJc2V0X2JpdChSRE1BQ1RYVF9GX0xBU1RfQ1RYVCwgJmN0eHQtPmZsYWdzKTsKKwkJCWN0eHQtPm5leHQgPSBoZHJfY3R4dDsKKwkJCWhkcl9jdHh0LT5uZXh0ID0gaGVhZDsKKwkJfQogCQkvKiBQb3N0IHRoZSByZWFkICovCiAJCWVyciA9IHN2Y19yZG1hX3NlbmQoeHBydCwgJnJlYWRfd3IpOwogCQlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYwppbmRleCAwNTk4YjIyLi45ODFmMTkwIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfc2VuZHRvLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0OwogCWludCByZXQgPSAwOwogCi0JQlVHX09OKHNnZV9jb3VudCA+PSAzMik7CisJQlVHX09OKHNnZV9jb3VudCA+IFJQQ1NWQ19NQVhQQUdFUyk7CiAJZHByaW50aygic3ZjcmRtYTogUkRNQV9XUklURSBybXI9JXgsIHRvPSVsbHgsIHhkcl9vZmY9JWQsICIKIAkJIndyaXRlX2xlbj0lZCwgeGRyX3NnZT0lcCwgc2dlX2NvdW50PSVkXG4iLAogCQlybXIsICh1bnNpZ25lZCBsb25nIGxvbmcpdG8sIHhkcl9vZmYsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwppbmRleCBmMDk0NDRjLi4xNmZkM2Y2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKQEAgLTU0LDcgKzU0LDYgQEAKIAkJCQkJaW50IGZsYWdzKTsKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y19yZG1hX2FjY2VwdChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpOwogc3RhdGljIHZvaWQgc3ZjX3JkbWFfcmVsZWFzZV9ycXN0KHN0cnVjdCBzdmNfcnFzdCAqKTsKLXN0YXRpYyB2b2lkIHJkbWFfZGVzdHJveV94cHJ0KHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQpOwogc3RhdGljIHZvaWQgZHRvX3Rhc2tsZXRfZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgc3ZjX3JkbWFfZGV0YWNoKHN0cnVjdCBzdmNfeHBydCAqeHBydCk7CiBzdGF0aWMgdm9pZCBzdmNfcmRtYV9mcmVlKHN0cnVjdCBzdmNfeHBydCAqeHBydCk7CkBAIC0yNDcsNiArMjQ2LDcgQEAKIAkJCXNxX2NxX3JlYXAoeHBydCk7CiAJCX0KIAorCQlzdmNfeHBydF9wdXQoJnhwcnQtPnNjX3hwcnQpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHRvX2xvY2ssIGZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHRvX2xvY2ssIGZsYWdzKTsKQEAgLTI3NSw4ICsyNzUsMTAgQEAKIAkgKiBhZGQgaXQKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHRvX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmeHBydC0+c2NfZHRvX3EpKQorCWlmIChsaXN0X2VtcHR5KCZ4cHJ0LT5zY19kdG9fcSkpIHsKKwkJc3ZjX3hwcnRfZ2V0KCZ4cHJ0LT5zY194cHJ0KTsKIAkJbGlzdF9hZGRfdGFpbCgmeHBydC0+c2NfZHRvX3EsICZkdG9feHBydF9xKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHRvX2xvY2ssIGZsYWdzKTsKIAogCS8qIFRhc2tsZXQgZG9lcyBhbGwgdGhlIHdvcmsgdG8gYXZvaWQgaXJxc2F2ZSBsb2Nrcy4gKi8KQEAgLTM4Niw4ICszODgsMTAgQEAKIAkgKiBhZGQgaXQKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHRvX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmeHBydC0+c2NfZHRvX3EpKQorCWlmIChsaXN0X2VtcHR5KCZ4cHJ0LT5zY19kdG9fcSkpIHsKKwkJc3ZjX3hwcnRfZ2V0KCZ4cHJ0LT5zY194cHJ0KTsKIAkJbGlzdF9hZGRfdGFpbCgmeHBydC0+c2NfZHRvX3EsICZkdG9feHBydF9xKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHRvX2xvY2ssIGZsYWdzKTsKIAogCS8qIFRhc2tsZXQgZG9lcyBhbGwgdGhlIHdvcmsgdG8gYXZvaWQgaXJxc2F2ZSBsb2Nrcy4gKi8KQEAgLTYxMSw2ICs2MTUsNyBAQAogCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CiAJY2FzZSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOgogCQkvKiBBY2NlcHQgY29tcGxldGUgKi8KKwkJc3ZjX3hwcnRfZ2V0KHhwcnQpOwogCQlkcHJpbnRrKCJzdmNyZG1hOiBDb25uZWN0aW9uIGNvbXBsZXRlZCBvbiBEVE8geHBydD0lcCwgIgogCQkJImNtX2lkPSVwXG4iLCB4cHJ0LCBjbWFfaWQpOwogCQljbGVhcl9iaXQoUkRNQVhQUlRfQ09OTl9QRU5ESU5HLCAmcmRtYS0+c2NfZmxhZ3MpOwpAQCAtNjYxLDE1ICs2NjYsMTUgQEAKIAogCWxpc3Rlbl9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkbWFfbGlzdGVuX2hhbmRsZXIsIGNtYV94cHJ0LCBSRE1BX1BTX1RDUCk7CiAJaWYgKElTX0VSUihsaXN0ZW5faWQpKSB7Ci0JCXJkbWFfZGVzdHJveV94cHJ0KGNtYV94cHJ0KTsKKwkJc3ZjX3hwcnRfcHV0KCZjbWFfeHBydC0+c2NfeHBydCk7CiAJCWRwcmludGsoInN2Y3JkbWE6IHJkbWFfY3JlYXRlX2lkIGZhaWxlZCA9ICVsZFxuIiwKIAkJCVBUUl9FUlIobGlzdGVuX2lkKSk7CiAJCXJldHVybiAodm9pZCAqKWxpc3Rlbl9pZDsKIAl9CiAJcmV0ID0gcmRtYV9iaW5kX2FkZHIobGlzdGVuX2lkLCBzYSk7CiAJaWYgKHJldCkgewotCQlyZG1hX2Rlc3Ryb3lfeHBydChjbWFfeHBydCk7CiAJCXJkbWFfZGVzdHJveV9pZChsaXN0ZW5faWQpOworCQlzdmNfeHBydF9wdXQoJmNtYV94cHJ0LT5zY194cHJ0KTsKIAkJZHByaW50aygic3ZjcmRtYTogcmRtYV9iaW5kX2FkZHIgZmFpbGVkID0gJWRcbiIsIHJldCk7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQpAQCAtNjc4LDggKzY4Myw5IEBACiAJcmV0ID0gcmRtYV9saXN0ZW4obGlzdGVuX2lkLCBSUENSRE1BX0xJU1RFTl9CQUNLTE9HKTsKIAlpZiAocmV0KSB7CiAJCXJkbWFfZGVzdHJveV9pZChsaXN0ZW5faWQpOwotCQlyZG1hX2Rlc3Ryb3lfeHBydChjbWFfeHBydCk7CisJCXN2Y194cHJ0X3B1dCgmY21hX3hwcnQtPnNjX3hwcnQpOwogCQlkcHJpbnRrKCJzdmNyZG1hOiByZG1hX2xpc3RlbiBmYWlsZWQgPSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKIAkvKgpAQCAtODIwLDYgKzgyNiw3IEBACiAJCW5ld3hwcnQtPnNjX3NxX2RlcHRoID0gcXBfYXR0ci5jYXAubWF4X3NlbmRfd3I7CiAJCW5ld3hwcnQtPnNjX21heF9yZXF1ZXN0cyA9IHFwX2F0dHIuY2FwLm1heF9yZWN2X3dyOwogCX0KKwlzdmNfeHBydF9nZXQoJm5ld3hwcnQtPnNjX3hwcnQpOwogCW5ld3hwcnQtPnNjX3FwID0gbmV3eHBydC0+c2NfY21faWQtPnFwOwogCiAJLyogUmVnaXN0ZXIgYWxsIG9mIHBoeXNpY2FsIG1lbW9yeSAqLwpAQCAtODkxLDggKzg5OCwxNSBAQAogCiAgZXJyb3V0OgogCWRwcmludGsoInN2Y3JkbWE6IGZhaWx1cmUgYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9uIHJjPSVkLlxuIiwgcmV0KTsKKwkvKiBUYWtlIGEgcmVmZXJlbmNlIGluIGNhc2UgdGhlIERUTyBoYW5kbGVyIHJ1bnMgKi8KKwlzdmNfeHBydF9nZXQoJm5ld3hwcnQtPnNjX3hwcnQpOworCWlmIChuZXd4cHJ0LT5zY19xcCAmJiAhSVNfRVJSKG5ld3hwcnQtPnNjX3FwKSkgeworCQlpYl9kZXN0cm95X3FwKG5ld3hwcnQtPnNjX3FwKTsKKwkJc3ZjX3hwcnRfcHV0KCZuZXd4cHJ0LT5zY194cHJ0KTsKKwl9CiAJcmRtYV9kZXN0cm95X2lkKG5ld3hwcnQtPnNjX2NtX2lkKTsKLQlyZG1hX2Rlc3Ryb3lfeHBydChuZXd4cHJ0KTsKKwkvKiBUaGlzIGNhbGwgdG8gcHV0IHdpbGwgZGVzdHJveSB0aGUgdHJhbnNwb3J0ICovCisJc3ZjX3hwcnRfcHV0KCZuZXd4cHJ0LT5zY194cHJ0KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtOTE5LDU2ICs5MzMsNjIgQEAKIAlycXN0cC0+cnFfeHBydF9jdHh0ID0gTlVMTDsKIH0KIAotLyogRGlzYWJsZSBkYXRhIHJlYWR5IGV2ZW50cyBmb3IgdGhpcyBjb25uZWN0aW9uICovCisvKgorICogV2hlbiBjb25uZWN0ZWQsIGFuIHN2Y194cHJ0IGhhcyBhdCBsZWFzdCB0aHJlZSByZWZlcmVuY2VzOgorICoKKyAqIC0gQSByZWZlcmVuY2UgaGVsZCBieSB0aGUgUVAuIFdlIHN0aWxsIGhvbGQgdGhhdCBoZXJlIGJlY2F1c2UgdGhpcworICogICBjb2RlIGRlbGV0ZXMgdGhlIFFQIGFuZCBwdXRzIHRoZSByZWZlcmVuY2UuCisgKgorICogLSBBIHJlZmVyZW5jZSBoZWxkIGJ5IHRoZSBjbV9pZCBiZXR3ZWVuIHRoZSBFU1RBQkxJU0hFRCBhbmQKKyAqICAgRElTQ09OTkVDVEVEIGV2ZW50cy4gSWYgdGhlIHJlbW90ZSBwZWVyIGRpc2Nvbm5lY3RlZCBmaXJzdCwgdGhpcworICogICByZWZlcmVuY2UgY291bGQgYmUgZ29uZS4KKyAqCisgKiAtIEEgcmVmZXJlbmNlIGhlbGQgYnkgdGhlIHN2Y19yZWN2IGNvZGUgdGhhdCBjYWxsZWQgdGhpcyBmdW5jdGlvbgorICogICBhcyBwYXJ0IG9mIGNsb3NlIHByb2Nlc3NpbmcuCisgKgorICogQXQgYSBtaW5pbXVtIHR3byByZWZlcmVuY2VzIHNob3VsZCBzdGlsbCBiZSBoZWxkLgorICovCiBzdGF0aWMgdm9pZCBzdmNfcmRtYV9kZXRhY2goc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogewogCXN0cnVjdCBzdmN4cHJ0X3JkbWEgKnJkbWEgPQogCQljb250YWluZXJfb2YoeHBydCwgc3RydWN0IHN2Y3hwcnRfcmRtYSwgc2NfeHBydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCWRwcmludGsoInN2Yzogc3ZjX3JkbWFfZGV0YWNoKCVwKVxuIiwgeHBydCk7Ci0JLyoKLQkgKiBTaHV0ZG93biB0aGUgY29ubmVjdGlvbi4gVGhpcyB3aWxsIGVuc3VyZSB3ZSBkb24ndCBnZXQgYW55Ci0JICogbW9yZSBldmVudHMgZnJvbSB0aGUgcHJvdmlkZXIuCi0JICovCi0JcmRtYV9kaXNjb25uZWN0KHJkbWEtPnNjX2NtX2lkKTsKLQlyZG1hX2Rlc3Ryb3lfaWQocmRtYS0+c2NfY21faWQpOwogCi0JLyogV2UgbWF5IGFscmVhZHkgYmUgb24gdGhlIERUTyBsaXN0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmR0b19sb2NrLCBmbGFncyk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZyZG1hLT5zY19kdG9fcSkpCi0JCWxpc3RfZGVsX2luaXQoJnJkbWEtPnNjX2R0b19xKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdG9fbG9jaywgZmxhZ3MpOworCS8qIERpc2Nvbm5lY3QgYW5kIGZsdXNoIHBvc3RlZCBXUUUgKi8KKwlyZG1hX2Rpc2Nvbm5lY3QocmRtYS0+c2NfY21faWQpOworCisJLyogRGVzdHJveSB0aGUgUVAgaWYgcHJlc2VudCAobm90IGEgbGlzdGVuZXIpICovCisJaWYgKHJkbWEtPnNjX3FwICYmICFJU19FUlIocmRtYS0+c2NfcXApKSB7CisJCWliX2Rlc3Ryb3lfcXAocmRtYS0+c2NfcXApOworCQlzdmNfeHBydF9wdXQoeHBydCk7CisJfQorCisJLyogRGVzdHJveSB0aGUgQ00gSUQgKi8KKwlyZG1hX2Rlc3Ryb3lfaWQocmRtYS0+c2NfY21faWQpOwogfQogCiBzdGF0aWMgdm9pZCBzdmNfcmRtYV9mcmVlKHN0cnVjdCBzdmNfeHBydCAqeHBydCkKIHsKIAlzdHJ1Y3Qgc3ZjeHBydF9yZG1hICpyZG1hID0gKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKil4cHJ0OwogCWRwcmludGsoInN2Y3JkbWE6IHN2Y19yZG1hX2ZyZWUoJXApXG4iLCByZG1hKTsKLQlyZG1hX2Rlc3Ryb3lfeHBydChyZG1hKTsKKwkvKiBXZSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBrcmVmX3B1dCAqLworCUJVR19PTihhdG9taWNfcmVhZCgmeHBydC0+eHB0X3JlZi5yZWZjb3VudCkgIT0gMCk7CisJaWYgKHJkbWEtPnNjX3NxX2NxICYmICFJU19FUlIocmRtYS0+c2Nfc3FfY3EpKQorCQlpYl9kZXN0cm95X2NxKHJkbWEtPnNjX3NxX2NxKTsKKworCWlmIChyZG1hLT5zY19ycV9jcSAmJiAhSVNfRVJSKHJkbWEtPnNjX3JxX2NxKSkKKwkJaWJfZGVzdHJveV9jcShyZG1hLT5zY19ycV9jcSk7CisKKwlpZiAocmRtYS0+c2NfcGh5c19tciAmJiAhSVNfRVJSKHJkbWEtPnNjX3BoeXNfbXIpKQorCQlpYl9kZXJlZ19tcihyZG1hLT5zY19waHlzX21yKTsKKworCWlmIChyZG1hLT5zY19wZCAmJiAhSVNfRVJSKHJkbWEtPnNjX3BkKSkKKwkJaWJfZGVhbGxvY19wZChyZG1hLT5zY19wZCk7CisKKwlkZXN0cm95X2NvbnRleHRfY2FjaGUocmRtYS0+c2NfY3R4dF9oZWFkKTsKIAlrZnJlZShyZG1hKTsKIH0KIAotc3RhdGljIHZvaWQgcmRtYV9kZXN0cm95X3hwcnQoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCkKLXsKLQlpZiAoeHBydC0+c2NfcXAgJiYgIUlTX0VSUih4cHJ0LT5zY19xcCkpCi0JCWliX2Rlc3Ryb3lfcXAoeHBydC0+c2NfcXApOwotCi0JaWYgKHhwcnQtPnNjX3NxX2NxICYmICFJU19FUlIoeHBydC0+c2Nfc3FfY3EpKQotCQlpYl9kZXN0cm95X2NxKHhwcnQtPnNjX3NxX2NxKTsKLQotCWlmICh4cHJ0LT5zY19ycV9jcSAmJiAhSVNfRVJSKHhwcnQtPnNjX3JxX2NxKSkKLQkJaWJfZGVzdHJveV9jcSh4cHJ0LT5zY19ycV9jcSk7Ci0KLQlpZiAoeHBydC0+c2NfcGh5c19tciAmJiAhSVNfRVJSKHhwcnQtPnNjX3BoeXNfbXIpKQotCQlpYl9kZXJlZ19tcih4cHJ0LT5zY19waHlzX21yKTsKLQotCWlmICh4cHJ0LT5zY19wZCAmJiAhSVNfRVJSKHhwcnQtPnNjX3BkKSkKLQkJaWJfZGVhbGxvY19wZCh4cHJ0LT5zY19wZCk7Ci0KLQlkZXN0cm95X2NvbnRleHRfY2FjaGUoeHBydC0+c2NfY3R4dF9oZWFkKTsKLX0KLQogc3RhdGljIGludCBzdmNfcmRtYV9oYXNfd3NwYWNlKHN0cnVjdCBzdmNfeHBydCAqeHBydCkKIHsKIAlzdHJ1Y3Qgc3ZjeHBydF9yZG1hICpyZG1hID0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCmluZGV4IDAyYzUyMmMuLmE1NjRjMWEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYwpAQCAtNjE0LDcgKzYxNCwxMSBAQAogCQlyZXR1cm47CiAKIAlyZXEgPSBjb250YWluZXJfb2YoYnVmZmVyLCBzdHJ1Y3QgcnBjcmRtYV9yZXEsIHJsX3hkcl9idWZbMF0pOwotCXJfeHBydCA9IGNvbnRhaW5lcl9vZihyZXEtPnJsX2J1ZmZlciwgc3RydWN0IHJwY3JkbWFfeHBydCwgcnhfYnVmKTsKKwlpZiAocmVxLT5ybF9pb3YubGVuZ3RoID09IDApIHsJLyogc2VlIGFsbG9jYXRlIGFib3ZlICovCisJCXJfeHBydCA9IGNvbnRhaW5lcl9vZigoKHN0cnVjdCBycGNyZG1hX3JlcSAqKSByZXEtPnJsX2J1ZmZlciktPnJsX2J1ZmZlciwKKwkJCQkgICAgICBzdHJ1Y3QgcnBjcmRtYV94cHJ0LCByeF9idWYpOworCX0gZWxzZQorCQlyX3hwcnQgPSBjb250YWluZXJfb2YocmVxLT5ybF9idWZmZXIsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHJ4X2J1Zik7CiAJcmVwID0gcmVxLT5ybF9yZXBseTsKIAogCWRwcmludGsoIlJQQzogICAgICAgJXM6IGNhbGxlZCBvbiAweCVwJXNcbiIsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKaW5kZXggZmZiZjIyYS4uOGVhMjgzZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYwpAQCAtMTU3Myw3ICsxNTczLDYgQEAKIAlzZW5kX3dyLnNnX2xpc3QgPSByZXEtPnJsX3NlbmRfaW92OwogCXNlbmRfd3IubnVtX3NnZSA9IHJlcS0+cmxfbmlvdnM7CiAJc2VuZF93ci5vcGNvZGUgPSBJQl9XUl9TRU5EOwotCXNlbmRfd3IuaW1tX2RhdGEgPSAwOwogCWlmIChzZW5kX3dyLm51bV9zZ2UgPT0gNCkJLyogbm8gbmVlZCB0byBzeW5jIGFueSBwYWQgKGNvbnN0YW50KSAqLwogCQlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShpYS0+cmlfaWQtPmRldmljZSwKIAkJCXJlcS0+cmxfc2VuZF9pb3ZbM10uYWRkciwgcmVxLT5ybF9zZW5kX2lvdlszXS5sZW5ndGgsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKaW5kZXggMzBlN2FjMi4uNjEzZGFmOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jCisrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAKIAkJCW5sb29wKys7CiAJfSB3aGlsZSAoZXJyID09IC1FQUREUklOVVNFICYmIG5sb29wICE9IDIpOwogCWRwcmludGsoIlJQQzogICAgICAgJXMgIk5JUFFVQURfRk1UIjoldTogJXMgKCVkKVxuIiwKLQkJCV9fRlVOQ1RJT05fXywgTklQUVVBRChteWFkZHIuc2luX2FkZHIpLAorCQkJX19mdW5jX18sIE5JUFFVQUQobXlhZGRyLnNpbl9hZGRyKSwKIAkJCXBvcnQsIGVyciA/ICJmYWlsZWQiIDogIm9rIiwgZXJyKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY2x1c3Rlci5jIGIvbmV0L3RpcGMvY2x1c3Rlci5jCmluZGV4IDk1YjM3MzkuLjRiYjM0MDQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NsdXN0ZXIuYworKysgYi9uZXQvdGlwYy9jbHVzdGVyLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQltYXhfbl9udW0gPSB0aXBjX2hpZ2hlc3RfYWxsb3dlZF9zbGF2ZTsKIAlhc3NlcnQobl9udW0gPiAwKTsKIAlhc3NlcnQobl9udW0gPD0gbWF4X25fbnVtKTsKLQlhc3NlcnQoY19wdHItPm5vZGVzW25fbnVtXSA9PSAwKTsKKwlhc3NlcnQoY19wdHItPm5vZGVzW25fbnVtXSA9PSBOVUxMKTsKIAljX3B0ci0+bm9kZXNbbl9udW1dID0gbl9wdHI7CiAJaWYgKG5fbnVtID4gY19wdHItPmhpZ2hlc3Rfbm9kZSkKIAkJY19wdHItPmhpZ2hlc3Rfbm9kZSA9IG5fbnVtOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jCmluZGV4IGQyZDdkMzIuLjc0MGFhYzUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuYworKysgYi9uZXQvdGlwYy9jb3JlLmMKQEAgLTQ4LDE2ICs0OCw4IEBACiAjaW5jbHVkZSAic3Vic2NyLmgiCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLWludCAgdGlwY19ldGhfbWVkaWFfc3RhcnQodm9pZCk7Ci12b2lkIHRpcGNfZXRoX21lZGlhX3N0b3Aodm9pZCk7Ci1pbnQgIHRpcGNfaGFuZGxlcl9zdGFydCh2b2lkKTsKLXZvaWQgdGlwY19oYW5kbGVyX3N0b3Aodm9pZCk7Ci1pbnQgIHRpcGNfc29ja2V0X2luaXQodm9pZCk7Ci12b2lkIHRpcGNfc29ja2V0X3N0b3Aodm9pZCk7Ci1pbnQgIHRpcGNfbmV0bGlua19zdGFydCh2b2lkKTsKLXZvaWQgdGlwY19uZXRsaW5rX3N0b3Aodm9pZCk7CiAKLSNkZWZpbmUgVElQQ19NT0RfVkVSICIxLjYuMiIKKyNkZWZpbmUgVElQQ19NT0RfVkVSICIxLjYuMyIKIAogI2lmbmRlZiBDT05GSUdfVElQQ19aT05FUwogI2RlZmluZSBDT05GSUdfVElQQ19aT05FUyAzCkBAIC0yNzcsNyArMjY5LDYgQEAKIC8qIFRJUEMgQVBJIGZvciBleHRlcm5hbCBBUElzIChzZWUgdGlwY19wb3J0LmgpICovCiAKIEVYUE9SVF9TWU1CT0wodGlwY19jcmVhdGVwb3J0X3Jhdyk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfc2V0X21zZ19vcHRpb24pOwogRVhQT1JUX1NZTUJPTCh0aXBjX3JlamVjdF9tc2cpOwogRVhQT1JUX1NZTUJPTCh0aXBjX3NlbmRfYnVmX2Zhc3QpOwogRVhQT1JUX1NZTUJPTCh0aXBjX2Fja25vd2xlZGdlKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCBmZWFiY2E1Li4zMjU0MDRmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKKysrIGIvbmV0L3RpcGMvY29yZS5oCkBAIC0xODAsNiArMTgwLDEyIEBACiBleHRlcm4gdm9pZCB0aXBjX2NvcmVfc3RvcCh2b2lkKTsKIGV4dGVybiBpbnQgIHRpcGNfY29yZV9zdGFydF9uZXQodm9pZCk7CiBleHRlcm4gdm9pZCB0aXBjX2NvcmVfc3RvcF9uZXQodm9pZCk7CitleHRlcm4gaW50ICB0aXBjX2hhbmRsZXJfc3RhcnQodm9pZCk7CitleHRlcm4gdm9pZCB0aXBjX2hhbmRsZXJfc3RvcCh2b2lkKTsKK2V4dGVybiBpbnQgIHRpcGNfbmV0bGlua19zdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIHRpcGNfbmV0bGlua19zdG9wKHZvaWQpOworZXh0ZXJuIGludCAgdGlwY19zb2NrZXRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHRpcGNfc29ja2V0X3N0b3Aodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRlbGltaXQoaW50IHZhbCwgaW50IG1pbiwgaW50IG1heCkKIHsKQEAgLTMxMCw3ICszMTYsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgaW50IGJ1Zl9zaXplID0gKEJVRl9IRUFEUk9PTSArIHNpemUgKyAzKSAmIH4zdTsKIAotCXNrYiA9IGFsbG9jX3NrYihidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiX2ZjbG9uZShidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYikgewogCQlza2JfcmVzZXJ2ZShza2IsIEJVRl9IRUFEUk9PTSk7CiAJCXNrYl9wdXQoc2tiLCBzaXplKTsKQEAgLTMyOCw4ICszMzQsMTkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGJ1Zl9kaXNjYXJkKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKGxpa2VseShza2IgIT0gTlVMTCkpCi0JCWtmcmVlX3NrYihza2IpOworCWtmcmVlX3NrYihza2IpOworfQorCisvKioKKyAqIGJ1Zl9saW5lYXJpemUgLSBjb252ZXJ0IGEgVElQQyBtZXNzYWdlIGJ1ZmZlciBpbnRvIGEgc2luZ2xlIGNvbnRpZ3VvdXMgcGllY2UKKyAqIEBza2I6IG1lc3NhZ2UgYnVmZmVyCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgYnVmX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2JfbGluZWFyaXplKHNrYik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZXRoX21lZGlhLmMgYi9uZXQvdGlwYy9ldGhfbWVkaWEuYwppbmRleCAzYmJlZjJhLi45Y2QzNWVlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ldGhfbWVkaWEuYworKysgYi9uZXQvdGlwYy9ldGhfbWVkaWEuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJc3RydWN0IGV0aF9iZWFyZXIgKmViX3B0ciA9IChzdHJ1Y3QgZXRoX2JlYXJlciAqKXB0LT5hZl9wYWNrZXRfcHJpdjsKIAl1MzIgc2l6ZTsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpIHsKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkgewogCQlrZnJlZV9za2IoYnVmKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTk4LDcgKzE5OCw3IEBACiAJc3RydWN0IGV0aF9iZWFyZXIgKmViX3B0ciA9ICZldGhfYmVhcmVyc1swXTsKIAlzdHJ1Y3QgZXRoX2JlYXJlciAqc3RvcCA9ICZldGhfYmVhcmVyc1tNQVhfRVRIX0JFQVJFUlNdOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJd2hpbGUgKChlYl9wdHItPmRldiAhPSBkZXYpKSB7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggMWIxN2ZlYy4uMmEyNmExNiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCisrKyBiL25ldC90aXBjL2xpbmsuYwpAQCAtMTc4NSw2ICsxNzg1LDU2IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAorLyoqCisgKiBsaW5rX3JlY3ZfYnVmX3ZhbGlkYXRlIC0gdmFsaWRhdGUgYmFzaWMgZm9ybWF0IG9mIHJlY2VpdmVkIG1lc3NhZ2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgZW5zdXJlcyBhIFRJUEMgbWVzc2FnZSBoYXMgYW4gYWNjZXB0YWJsZSBoZWFkZXIsIGFuZCBhdCBsZWFzdAorICogYXMgbXVjaCBkYXRhIGFzIHRoZSBoZWFkZXIgaW5kaWNhdGVzIGl0IHNob3VsZC4gIFRoZSByb3V0aW5lIGFsc28gZW5zdXJlcworICogdGhhdCB0aGUgZW50aXJlIG1lc3NhZ2UgaGVhZGVyIGlzIHN0b3JlZCBpbiB0aGUgbWFpbiBmcmFnbWVudCBvZiB0aGUgbWVzc2FnZQorICogYnVmZmVyLCB0byBzaW1wbGlmeSBmdXR1cmUgYWNjZXNzIHRvIG1lc3NhZ2UgaGVhZGVyIGZpZWxkcy4KKyAqCisgKiBOb3RlOiBIYXZpbmcgZXh0cmEgaW5mbyBwcmVzZW50IGluIHRoZSBtZXNzYWdlIGhlYWRlciBvciBkYXRhIGFyZWFzIGlzIE9LLgorICogVElQQyB3aWxsIGlnbm9yZSB0aGUgZXhjZXNzLCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGl0IGlzIG9wdGlvbmFsIGluZm8KKyAqIGludHJvZHVjZWQgYnkgYSBsYXRlciByZWxlYXNlIG9mIHRoZSBwcm90b2NvbC4KKyAqLworCitzdGF0aWMgaW50IGxpbmtfcmVjdl9idWZfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKK3sKKwlzdGF0aWMgdTMyIG1pbl9kYXRhX2hkcl9zaXplWzhdID0geworCQlTSE9SVF9IX1NJWkUsIE1DQVNUX0hfU0laRSwgTE9OR19IX1NJWkUsIERJUl9NU0dfSF9TSVpFLAorCQlNQVhfSF9TSVpFLCBNQVhfSF9TSVpFLCBNQVhfSF9TSVpFLCBNQVhfSF9TSVpFCisJCX07CisKKwlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKKwl1MzIgdGlwY19oZHJbMl07CisJdTMyIHNpemU7CisJdTMyIGhkcl9zaXplOworCXUzMiBtaW5faGRyX3NpemU7CisKKwlpZiAodW5saWtlbHkoYnVmLT5sZW4gPCBNSU5fSF9TSVpFKSkKKwkJcmV0dXJuIDA7CisKKwltc2cgPSBza2JfaGVhZGVyX3BvaW50ZXIoYnVmLCAwLCBzaXplb2YodGlwY19oZHIpLCB0aXBjX2hkcik7CisJaWYgKG1zZyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseShtc2dfdmVyc2lvbihtc2cpICE9IFRJUENfVkVSU0lPTikpCisJCXJldHVybiAwOworCisJc2l6ZSA9IG1zZ19zaXplKG1zZyk7CisJaGRyX3NpemUgPSBtc2dfaGRyX3N6KG1zZyk7CisJbWluX2hkcl9zaXplID0gbXNnX2lzZGF0YShtc2cpID8KKwkJbWluX2RhdGFfaGRyX3NpemVbbXNnX3R5cGUobXNnKV0gOiBJTlRfSF9TSVpFOworCisJaWYgKHVubGlrZWx5KChoZHJfc2l6ZSA8IG1pbl9oZHJfc2l6ZSkgfHwKKwkJICAgICAoc2l6ZSA8IGhkcl9zaXplKSB8fAorCQkgICAgIChidWYtPmxlbiA8IHNpemUpIHx8CisJCSAgICAgKHNpemUgLSBoZHJfc2l6ZSA+IFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcHNrYl9tYXlfcHVsbChidWYsIGhkcl9zaXplKTsKK30KKwogdm9pZCB0aXBjX3JlY3ZfbXNnKHN0cnVjdCBza19idWZmICpoZWFkLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKnRiX3B0cikKIHsKIAlyZWFkX2xvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwpAQCAtMTc5NCw5ICsxODQ0LDkgQEAKIAkJc3RydWN0IGxpbmsgKmxfcHRyOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqY3JzOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gaGVhZDsKLQkJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKGJ1Zik7Ci0JCXUzMiBzZXFfbm8gPSBtc2dfc2Vxbm8obXNnKTsKLQkJdTMyIGFja2QgPSBtc2dfYWNrKG1zZyk7CisJCXN0cnVjdCB0aXBjX21zZyAqbXNnOworCQl1MzIgc2VxX25vOworCQl1MzIgYWNrZDsKIAkJdTMyIHJlbGVhc2VkID0gMDsKIAkJaW50IHR5cGU7CiAKQEAgLTE4MDQsMTIgKzE4NTQsMjEgQEAKIAkJVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlID0gYl9wdHI7CiAKIAkJaGVhZCA9IGhlYWQtPm5leHQ7Ci0JCWlmICh1bmxpa2VseShtc2dfdmVyc2lvbihtc2cpICE9IFRJUENfVkVSU0lPTikpCisKKwkJLyogRW5zdXJlIG1lc3NhZ2UgaXMgd2VsbC1mb3JtZWQgKi8KKworCQlpZiAodW5saWtlbHkoIWxpbmtfcmVjdl9idWZfdmFsaWRhdGUoYnVmKSkpCiAJCQlnb3RvIGNvbnQ7Ci0jaWYgMAotCQlpZiAobXNnX3VzZXIobXNnKSAhPSBMSU5LX1BST1RPQ09MKQotI2VuZGlmCi0JCQltc2dfZGJnKG1zZywiPFJFQzwiKTsKKworCQkvKiBFbnN1cmUgbWVzc2FnZSBkYXRhIGlzIGEgc2luZ2xlIGNvbnRpZ3VvdXMgdW5pdCAqLworCisJCWlmICh1bmxpa2VseShidWZfbGluZWFyaXplKGJ1ZikpKSB7CisJCQlnb3RvIGNvbnQ7CisJCX0KKworCQkvKiBIYW5kbGUgYXJyaXZhbCBvZiBhIG5vbi11bmljYXN0IGxpbmsgbWVzc2FnZSAqLworCisJCW1zZyA9IGJ1Zl9tc2coYnVmKTsKIAogCQlpZiAodW5saWtlbHkobXNnX25vbl9zZXEobXNnKSkpIHsKIAkJCWxpbmtfcmVjdl9ub25fc2VxKGJ1Zik7CkBAIC0xODIwLDE5ICsxODc5LDI2IEBACiAJCQkgICAgIChtc2dfZGVzdG5vZGUobXNnKSAhPSB0aXBjX293bl9hZGRyKSkpCiAJCQlnb3RvIGNvbnQ7CiAKKwkJLyogTG9jYXRlIHVuaWNhc3QgbGluayBlbmRwb2ludCB0aGF0IHNob3VsZCBoYW5kbGUgbWVzc2FnZSAqLworCiAJCW5fcHRyID0gdGlwY19ub2RlX2ZpbmQobXNnX3ByZXZub2RlKG1zZykpOwogCQlpZiAodW5saWtlbHkoIW5fcHRyKSkKIAkJCWdvdG8gY29udDsKLQogCQl0aXBjX25vZGVfbG9jayhuX3B0cik7CisKIAkJbF9wdHIgPSBuX3B0ci0+bGlua3NbYl9wdHItPmlkZW50aXR5XTsKIAkJaWYgKHVubGlrZWx5KCFsX3B0cikpIHsKIAkJCXRpcGNfbm9kZV91bmxvY2sobl9wdHIpOwogCQkJZ290byBjb250OwogCQl9Ci0JCS8qCi0JCSAqIFJlbGVhc2UgYWNrZWQgbWVzc2FnZXMKLQkJICovCisKKwkJLyogVmFsaWRhdGUgbWVzc2FnZSBzZXF1ZW5jZSBudW1iZXIgaW5mbyAqLworCisJCXNlcV9ubyA9IG1zZ19zZXFubyhtc2cpOworCQlhY2tkID0gbXNnX2Fjayhtc2cpOworCisJCS8qIFJlbGVhc2UgYWNrZWQgbWVzc2FnZXMgKi8KKwogCQlpZiAobGVzcyhuX3B0ci0+YmNsaW5rLmFja2VkLCBtc2dfYmNhc3RfYWNrKG1zZykpKSB7CiAJCQlpZiAodGlwY19ub2RlX2lzX3VwKG5fcHRyKSAmJiBuX3B0ci0+YmNsaW5rLnN1cHBvcnRlZCkKIAkJCQl0aXBjX2JjbGlua19hY2tub3dsZWRnZShuX3B0ciwgbXNnX2JjYXN0X2Fjayhtc2cpKTsKQEAgLTE4NTEsNiArMTkxNyw5IEBACiAJCQlsX3B0ci0+Zmlyc3Rfb3V0ID0gY3JzOwogCQkJbF9wdHItPm91dF9xdWV1ZV9zaXplIC09IHJlbGVhc2VkOwogCQl9CisKKwkJLyogVHJ5IHNlbmRpbmcgYW55IG1lc3NhZ2VzIGxpbmsgZW5kcG9pbnQgaGFzIHBlbmRpbmcgKi8KKwogCQlpZiAodW5saWtlbHkobF9wdHItPm5leHRfb3V0KSkKIAkJCXRpcGNfbGlua19wdXNoX3F1ZXVlKGxfcHRyKTsKIAkJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZsX3B0ci0+d2FpdGluZ19wb3J0cykpKQpAQCAtMTg2MCw2ICsxOTI5LDggQEAKIAkJCXRpcGNfbGlua19zZW5kX3Byb3RvX21zZyhsX3B0ciwgU1RBVEVfTVNHLCAwLCAwLCAwLCAwLCAwKTsKIAkJfQogCisJCS8qIE5vdyAoZmluYWxseSEpIHByb2Nlc3MgdGhlIGluY29taW5nIG1lc3NhZ2UgKi8KKwogcHJvdG9jb2xfY2hlY2s6CiAJCWlmIChsaWtlbHkobGlua193b3JraW5nX3dvcmtpbmcobF9wdHIpKSkgewogCQkJaWYgKGxpa2VseShzZXFfbm8gPT0gbW9kKGxfcHRyLT5uZXh0X2luX25vKSkpIHsKQEAgLTI4MzIsMTUgKzI5MDMsMTUgQEAKIHZvaWQgdGlwY19saW5rX3NldF9xdWV1ZV9saW1pdHMoc3RydWN0IGxpbmsgKmxfcHRyLCB1MzIgd2luZG93KQogewogCS8qIERhdGEgbWVzc2FnZXMgZnJvbSB0aGlzIG5vZGUsIGluY2x1c2l2ZSBGSVJTVF9GUkFHTSAqLwotCWxfcHRyLT5xdWV1ZV9saW1pdFtEQVRBX0xPV10gPSB3aW5kb3c7Ci0JbF9wdHItPnF1ZXVlX2xpbWl0W0RBVEFfTUVESVVNXSA9ICh3aW5kb3cgLyAzKSAqIDQ7Ci0JbF9wdHItPnF1ZXVlX2xpbWl0W0RBVEFfSElHSF0gPSAod2luZG93IC8gMykgKiA1OwotCWxfcHRyLT5xdWV1ZV9saW1pdFtEQVRBX0NSSVRJQ0FMXSA9ICh3aW5kb3cgLyAzKSAqIDY7CisJbF9wdHItPnF1ZXVlX2xpbWl0W1RJUENfTE9XX0lNUE9SVEFOQ0VdID0gd2luZG93OworCWxfcHRyLT5xdWV1ZV9saW1pdFtUSVBDX01FRElVTV9JTVBPUlRBTkNFXSA9ICh3aW5kb3cgLyAzKSAqIDQ7CisJbF9wdHItPnF1ZXVlX2xpbWl0W1RJUENfSElHSF9JTVBPUlRBTkNFXSA9ICh3aW5kb3cgLyAzKSAqIDU7CisJbF9wdHItPnF1ZXVlX2xpbWl0W1RJUENfQ1JJVElDQUxfSU1QT1JUQU5DRV0gPSAod2luZG93IC8gMykgKiA2OwogCS8qIFRyYW5zaXRpbmcgZGF0YSBtZXNzYWdlcyxpbmNsdXNpdmUgRklSU1RfRlJBR00gKi8KLQlsX3B0ci0+cXVldWVfbGltaXRbREFUQV9MT1cgKyA0XSA9IDMwMDsKLQlsX3B0ci0+cXVldWVfbGltaXRbREFUQV9NRURJVU0gKyA0XSA9IDYwMDsKLQlsX3B0ci0+cXVldWVfbGltaXRbREFUQV9ISUdIICsgNF0gPSA5MDA7Ci0JbF9wdHItPnF1ZXVlX2xpbWl0W0RBVEFfQ1JJVElDQUwgKyA0XSA9IDEyMDA7CisJbF9wdHItPnF1ZXVlX2xpbWl0W1RJUENfTE9XX0lNUE9SVEFOQ0UgKyA0XSA9IDMwMDsKKwlsX3B0ci0+cXVldWVfbGltaXRbVElQQ19NRURJVU1fSU1QT1JUQU5DRSArIDRdID0gNjAwOworCWxfcHRyLT5xdWV1ZV9saW1pdFtUSVBDX0hJR0hfSU1QT1JUQU5DRSArIDRdID0gOTAwOworCWxfcHRyLT5xdWV1ZV9saW1pdFtUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UgKyA0XSA9IDEyMDA7CiAJbF9wdHItPnF1ZXVlX2xpbWl0W0NPTk5fTUFOQUdFUl0gPSAxMjAwOwogCWxfcHRyLT5xdWV1ZV9saW1pdFtST1VURV9ESVNUUklCVVRPUl0gPSAxMjAwOwogCWxfcHRyLT5xdWV1ZV9saW1pdFtDSEFOR0VPVkVSX1BST1RPQ09MXSA9IDI1MDA7CkBAIC0zMjUxLDcgKzMzMjIsNyBAQAogCQlpZiAoKG1vZChtc2dfc2Vxbm8oYnVmX21zZyhsX3B0ci0+bGFzdF9vdXQpKSAtCiAJCQkgbXNnX3NlcW5vKGJ1Zl9tc2cobF9wdHItPmZpcnN0X291dCkpKQogCQkgICAgICE9IChsX3B0ci0+b3V0X3F1ZXVlX3NpemUgLSAxKSkKLQkJICAgIHx8IChsX3B0ci0+bGFzdF9vdXQtPm5leHQgIT0gMCkpIHsKKwkJICAgIHx8IChsX3B0ci0+bGFzdF9vdXQtPm5leHQgIT0gTlVMTCkpIHsKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlxuU2VuZCBxdWV1ZSBpbmNvbnNpc3RlbmN5XG4iKTsKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgImZpcnN0X291dD0gJXggIiwgbF9wdHItPmZpcnN0X291dCk7CiAJCQl0aXBjX3ByaW50ZihidWYsICJuZXh0X291dD0gJXggIiwgbF9wdHItPm5leHRfb3V0KTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL21zZy5jIGIvbmV0L3RpcGMvbXNnLmMKaW5kZXggNzgyNDg1NC4uNjk2YTg2MyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbXNnLmMKKysrIGIvbmV0L3RpcGMvbXNnLmMKQEAgLTczLDEwICs3MywxMCBAQAogCQl0aXBjX3ByaW50ZihidWYsICJOTygldS8ldSk6Iixtc2dfbG9uZ19tc2dubyhtc2cpLAogCQkJICAgIG1zZ19mcmFnbV9ubyhtc2cpKTsKIAkJYnJlYWs7Ci0JY2FzZSBEQVRBX0xPVzoKLQljYXNlIERBVEFfTUVESVVNOgotCWNhc2UgREFUQV9ISUdIOgotCWNhc2UgREFUQV9DUklUSUNBTDoKKwljYXNlIFRJUENfTE9XX0lNUE9SVEFOQ0U6CisJY2FzZSBUSVBDX01FRElVTV9JTVBPUlRBTkNFOgorCWNhc2UgVElQQ19ISUdIX0lNUE9SVEFOQ0U6CisJY2FzZSBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0U6CiAJCXRpcGNfcHJpbnRmKGJ1ZiwgIkRBVCV1OiIsIG1zZ191c2VyKG1zZykpOwogCQlpZiAobXNnX3Nob3J0KG1zZykpIHsKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIkNPTjoiKTsKQEAgLTIyOSwxMCArMjI5LDEwIEBACiAJc3dpdGNoICh1c3IpIHsKIAljYXNlIENPTk5fTUFOQUdFUjoKIAljYXNlIE5BTUVfRElTVFJJQlVUT1I6Ci0JY2FzZSBEQVRBX0xPVzoKLQljYXNlIERBVEFfTUVESVVNOgotCWNhc2UgREFUQV9ISUdIOgotCWNhc2UgREFUQV9DUklUSUNBTDoKKwljYXNlIFRJUENfTE9XX0lNUE9SVEFOQ0U6CisJY2FzZSBUSVBDX01FRElVTV9JTVBPUlRBTkNFOgorCWNhc2UgVElQQ19ISUdIX0lNUE9SVEFOQ0U6CisJY2FzZSBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0U6CiAJCWlmIChtc2dfc2hvcnQobXNnKSkKIAkJCWJyZWFrOwkvKiBObyBlcnJvciAqLwogCQlzd2l0Y2ggKG1zZ19lcnJjb2RlKG1zZykpIHsKZGlmZiAtLWdpdCBhL25ldC90aXBjL21zZy5oIGIvbmV0L3RpcGMvbXNnLmgKaW5kZXggZTllZjZkZi4uNmFkMDcwZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbXNnLmgKKysrIGIvbmV0L3RpcGMvbXNnLmgKQEAgLTQwLDE4ICs0MCwxNiBAQAogI2luY2x1ZGUgImNvcmUuaCIKIAogI2RlZmluZSBUSVBDX1ZFUlNJT04gICAgICAgICAgICAgIDIKLSNkZWZpbmUgREFUQV9MT1cgICAgICAgICAgICAgICAgICBUSVBDX0xPV19JTVBPUlRBTkNFCi0jZGVmaW5lIERBVEFfTUVESVVNICAgICAgICAgICAgICAgVElQQ19NRURJVU1fSU1QT1JUQU5DRQotI2RlZmluZSBEQVRBX0hJR0ggICAgICAgICAgICAgICAgIFRJUENfSElHSF9JTVBPUlRBTkNFCi0jZGVmaW5lIERBVEFfQ1JJVElDQUwgICAgICAgICAgICAgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFCi0jZGVmaW5lIFNIT1JUX0hfU0laRSAgICAgICAgICAgICAgMjQJLyogQ29ubmVjdGVkLGluIGNsdXN0ZXIgKi8KKworI2RlZmluZSBTSE9SVF9IX1NJWkUgICAgICAgICAgICAgIDI0CS8qIENvbm5lY3RlZCwgaW4tY2x1c3RlciBtZXNzYWdlcyAqLwogI2RlZmluZSBESVJfTVNHX0hfU0laRSAgICAgICAgICAgIDMyCS8qIERpcmVjdGx5IGFkZHJlc3NlZCBtZXNzYWdlcyAqLwotI2RlZmluZSBDT05OX01TR19IX1NJWkUgICAgICAgICAgIDM2CS8qIFJvdXRlZCBjb25uZWN0ZWQgbXNncyovCi0jZGVmaW5lIExPTkdfSF9TSVpFICAgICAgICAgICAgICAgNDAJLyogTmFtZWQgTWVzc2FnZXMgKi8KKyNkZWZpbmUgTE9OR19IX1NJWkUgICAgICAgICAgICAgICA0MAkvKiBOYW1lZCBtZXNzYWdlcyAqLwogI2RlZmluZSBNQ0FTVF9IX1NJWkUgICAgICAgICAgICAgIDQ0CS8qIE11bHRpY2FzdCBtZXNzYWdlcyAqLwotI2RlZmluZSBNQVhfSF9TSVpFICAgICAgICAgICAgICAgIDYwCS8qIEluY2x1c2l2ZSBmdWxsIG9wdGlvbnMgKi8KKyNkZWZpbmUgSU5UX0hfU0laRSAgICAgICAgICAgICAgICA0MAkvKiBJbnRlcm5hbCBtZXNzYWdlcyAqLworI2RlZmluZSBNSU5fSF9TSVpFICAgICAgICAgICAgICAgIDI0CS8qIFNtYWxsZXN0IGxlZ2FsIFRJUEMgaGVhZGVyIHNpemUgKi8KKyNkZWZpbmUgTUFYX0hfU0laRSAgICAgICAgICAgICAgICA2MAkvKiBMYXJnZXN0IHBvc3NpYmxlIFRJUEMgaGVhZGVyIHNpemUgKi8KKwogI2RlZmluZSBNQVhfTVNHX1NJWkUgKE1BWF9IX1NJWkUgKyBUSVBDX01BWF9VU0VSX01TR19TSVpFKQotI2RlZmluZSBMSU5LX0NPTkZJRyAgICAgICAgICAgICAgIDEzCiAKIAogLyoKQEAgLTcyLDggKzcwLDEwIEBACiAJCQkJdTMyIHBvcywgdTMyIG1hc2ssIHUzMiB2YWwpCiB7CiAJdmFsID0gKHZhbCAmIG1hc2spIDw8IHBvczsKLQltLT5oZHJbd10gJj0gfmh0b25sKG1hc2sgPDwgcG9zKTsKLQltLT5oZHJbd10gfD0gaHRvbmwodmFsKTsKKwl2YWwgPSBodG9ubCh2YWwpOworCW1hc2sgPSBodG9ubChtYXNrIDw8IHBvcyk7CisJbS0+aGRyW3ddICY9IH5tYXNrOworCW0tPmhkclt3XSB8PSB2YWw7CiB9CiAKIC8qCkBAIC04Nyw3ICs4Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X3ZlcnNpb24oc3RydWN0IHRpcGNfbXNnICptKQogewotCW1zZ19zZXRfYml0cyhtLCAwLCAyOSwgMHhmLCBUSVBDX1ZFUlNJT04pOworCW1zZ19zZXRfYml0cyhtLCAwLCAyOSwgNywgVElQQ19WRVJTSU9OKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgbXNnX3VzZXIoc3RydWN0IHRpcGNfbXNnICptKQpAQCAtOTcsNyArOTcsNyBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBtc2dfaXNkYXRhKHN0cnVjdCB0aXBjX21zZyAqbSkKIHsKLQlyZXR1cm4gKG1zZ191c2VyKG0pIDw9IERBVEFfQ1JJVElDQUwpOworCXJldHVybiAobXNnX3VzZXIobSkgPD0gVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfdXNlcihzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBuKQpAQCAtMTkwLDE4ICsxOTAsNiBAQAogCW1zZ19zZXRfYml0cyhtLCAxLCAxOSwgMHgzLCBuKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfb3B0aW9ucyhzdHJ1Y3QgdGlwY19tc2cgKm0sIGNvbnN0IGNoYXIgKm9wdCwgdTMyIHN6KQotewotCXUzMiBoc3ogPSBtc2dfaGRyX3N6KG0pOwotCWNoYXIgKnRvID0gKGNoYXIgKikmbS0+aGRyW2hzei80XTsKLQotCWlmICgoaHN6IDwgRElSX01TR19IX1NJWkUpIHx8ICgoaHN6ICsgc3opID4gTUFYX0hfU0laRSkpCi0JCXJldHVybjsKLQltc2dfc2V0X2JpdHMobSwgMSwgMTYsIDB4NywgKGhzeiAtIDI4KS80KTsKLQltc2dfc2V0X2hkcl9zeihtLCBoc3ogKyBzeik7Ci0JbWVtY3B5KHRvLCBvcHQsIHN6KTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgbXNnX2JjYXN0X2FjayhzdHJ1Y3QgdGlwY19tc2cgKm0pCiB7CiAJcmV0dXJuIG1zZ19iaXRzKG0sIDEsIDAsIDB4ZmZmZik7CkBAIC0zMzAsMTcgKzMxOCw2IEBACiAJcmV0dXJuIChzdHJ1Y3QgdGlwY19tc2cgKiltc2dfZGF0YShtKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1zZ19leHBhbmQoc3RydWN0IHRpcGNfbXNnICptLCB1MzIgZGVzdG5vZGUpCi17Ci0JaWYgKCFtc2dfc2hvcnQobSkpCi0JCXJldHVybjsKLQltc2dfc2V0X2hkcl9zeihtLCBMT05HX0hfU0laRSk7Ci0JbXNnX3NldF9vcmlnbm9kZShtLCBtc2dfcHJldm5vZGUobSkpOwotCW1zZ19zZXRfZGVzdG5vZGUobSwgZGVzdG5vZGUpOwotCW1lbXNldCgmbS0+aGRyWzhdLCAwLCAxMik7Ci19Ci0KLQogCiAvKgogCQlUSVBDIGludGVybmFsIG1lc3NhZ2UgaGVhZGVyIGZvcm1hdCwgdmVyc2lvbiAyCkBAIC0zODgsNyArMzY1LDYgQEAKICNkZWZpbmUgIE5BTUVfRElTVFJJQlVUT1IgICAgIDExCiAjZGVmaW5lICBNU0dfRlJBR01FTlRFUiAgICAgICAxMgogI2RlZmluZSAgTElOS19DT05GSUcgICAgICAgICAgMTMKLSNkZWZpbmUgIElOVF9IX1NJWkUgICAgICAgICAgIDQwCiAjZGVmaW5lICBEU0NfSF9TSVpFICAgICAgICAgICA0MAogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcG9ydC5jIGIvbmV0L3RpcGMvcG9ydC5jCmluZGV4IGY1MDg2MTQuLjJmNTgwNjQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3BvcnQuYworKysgYi9uZXQvdGlwYy9wb3J0LmMKQEAgLTI0Miw3ICsyNDIsOCBAQAogCXBfcHRyLT5wdWJsLm1heF9wa3QgPSBNQVhfUEtUX0RFRkFVTFQ7CiAJcF9wdHItPnB1YmwucmVmID0gcmVmOwogCW1zZyA9ICZwX3B0ci0+cHVibC5waGRyOwotCW1zZ19pbml0KG1zZywgREFUQV9MT1csIFRJUENfTkFNRURfTVNHLCBUSVBDX09LLCBMT05HX0hfU0laRSwgMCk7CisJbXNnX2luaXQobXNnLCBUSVBDX0xPV19JTVBPUlRBTkNFLCBUSVBDX05BTUVEX01TRywgVElQQ19PSywgTE9OR19IX1NJWkUsCisJCSAwKTsKIAltc2dfc2V0X29yaWdub2RlKG1zZywgdGlwY19vd25fYWRkcik7CiAJbXNnX3NldF9wcmV2bm9kZShtc2csIHRpcGNfb3duX2FkZHIpOwogCW1zZ19zZXRfb3JpZ3BvcnQobXNnLCByZWYpOwpAQCAtNDEzLDEzICs0MTQsNiBAQAogCXJldHVybiBidWY7CiB9CiAKLWludCB0aXBjX3NldF9tc2dfb3B0aW9uKHN0cnVjdCB0aXBjX3BvcnQgKnRwX3B0ciwgY29uc3QgY2hhciAqb3B0LCBjb25zdCB1MzIgc3opCi17Ci0JbXNnX2V4cGFuZCgmdHBfcHRyLT5waGRyLCBtc2dfZGVzdG5vZGUoJnRwX3B0ci0+cGhkcikpOwotCW1zZ19zZXRfb3B0aW9ucygmdHBfcHRyLT5waGRyLCBvcHQsIHN6KTsKLQlyZXR1cm4gVElQQ19PSzsKLX0KLQogaW50IHRpcGNfcmVqZWN0X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgZXJyKQogewogCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwpAQCAtNjMyLDcgKzYyNiw3IEBACiAJCQkJCSAgICAgbXNnX29yaWdub2RlKG1zZyksCiAJCQkJCSAgICAgbXNnX2Rlc3Rwb3J0KG1zZyksCiAJCQkJCSAgICAgdGlwY19vd25fYWRkciwKLQkJCQkJICAgICBEQVRBX0hJR0gsCisJCQkJCSAgICAgVElQQ19ISUdIX0lNUE9SVEFOQ0UsCiAJCQkJCSAgICAgVElQQ19DT05OX01TRywKIAkJCQkJICAgICBlcnIsCiAJCQkJCSAgICAgMCwKQEAgLTEyNDYsNiArMTI0MCwyOCBAQAogCXJldHVybiByZXM7CiB9CiAKKy8qKgorICogdGlwY19kaXNjb25uZWN0X3BvcnQgLSBkaXNjb25uZWN0IHBvcnQgZnJvbSBwZWVyCisgKgorICogUG9ydCBtdXN0IGJlIGxvY2tlZC4KKyAqLworCitpbnQgdGlwY19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHRpcGNfcG9ydCAqdHBfcHRyKQoreworCWludCByZXM7CisKKwlpZiAodHBfcHRyLT5jb25uZWN0ZWQpIHsKKwkJdHBfcHRyLT5jb25uZWN0ZWQgPSAwOworCQkvKiBsZXQgdGltZXIgZXhwaXJlIG9uIGl0J3Mgb3duIHRvIGF2b2lkIGRlYWRsb2NrISAqLworCQl0aXBjX25vZGVzdWJfdW5zdWJzY3JpYmUoCisJCQkmKChzdHJ1Y3QgcG9ydCAqKXRwX3B0ciktPnN1YnNjcmlwdGlvbik7CisJCXJlcyA9IFRJUENfT0s7CisJfSBlbHNlIHsKKwkJcmVzID0gLUVOT1RDT05OOworCX0KKwlyZXR1cm4gcmVzOworfQorCiAvKgogICogdGlwY19kaXNjb25uZWN0KCk6IERpc2Nvbm5lY3QgcG9ydCBmb3JtIHBlZXIuCiAgKiAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIG5vZGUgbG9jYWwgb3BlcmF0aW9uLgpAQCAtMTI1NCwxNyArMTI3MCwxMiBAQAogaW50IHRpcGNfZGlzY29ubmVjdCh1MzIgcmVmKQogewogCXN0cnVjdCBwb3J0ICpwX3B0cjsKLQlpbnQgcmVzID0gLUVOT1RDT05OOworCWludCByZXM7CiAKIAlwX3B0ciA9IHRpcGNfcG9ydF9sb2NrKHJlZik7CiAJaWYgKCFwX3B0cikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHBfcHRyLT5wdWJsLmNvbm5lY3RlZCkgewotCQlwX3B0ci0+cHVibC5jb25uZWN0ZWQgPSAwOwotCQkvKiBsZXQgdGltZXIgZXhwaXJlIG9uIGl0J3Mgb3duIHRvIGF2b2lkIGRlYWRsb2NrISAqLwotCQl0aXBjX25vZGVzdWJfdW5zdWJzY3JpYmUoJnBfcHRyLT5zdWJzY3JpcHRpb24pOwotCQlyZXMgPSBUSVBDX09LOwotCX0KKwlyZXMgPSB0aXBjX2Rpc2Nvbm5lY3RfcG9ydCgoc3RydWN0IHRpcGNfcG9ydCAqKXBfcHRyKTsKIAl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcmVmLmMgYi9uZXQvdGlwYy9yZWYuYwppbmRleCA2NzA0YTU4Li44OWNiYWIyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9yZWYuYworKysgYi9uZXQvdGlwYy9yZWYuYwpAQCAtMiw3ICsyLDcgQEAKICAqIG5ldC90aXBjL3JlZi5jOiBUSVBDIG9iamVjdCByZWdpc3RyeSBjb2RlCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTkxLTIwMDYsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSwgV2luZCBSaXZlciBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNywgV2luZCBSaXZlciBTeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzYsMzIgKzM2LDYwIEBACiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAicmVmLmgiCi0jaW5jbHVkZSAicG9ydC5oIgotI2luY2x1ZGUgInN1YnNjci5oIgotI2luY2x1ZGUgIm5hbWVfZGlzdHIuaCIKLSNpbmNsdWRlICJuYW1lX3RhYmxlLmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZGlzY292ZXIuaCIKLSNpbmNsdWRlICJiZWFyZXIuaCIKLSNpbmNsdWRlICJub2RlLmgiCi0jaW5jbHVkZSAiYmNhc3QuaCIKKworLyoqCisgKiBzdHJ1Y3QgcmVmZXJlbmNlIC0gVElQQyBvYmplY3QgcmVmZXJlbmNlIGVudHJ5CisgKiBAb2JqZWN0OiBwb2ludGVyIHRvIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggcmVmZXJlbmNlIGVudHJ5CisgKiBAbG9jazogc3BpbmxvY2sgY29udHJvbGxpbmcgYWNjZXNzIHRvIG9iamVjdAorICogQHJlZjogcmVmZXJlbmNlIHZhbHVlIGZvciBvYmplY3QgKGNvbWJpbmVzIGluc3RhbmNlICYgYXJyYXkgaW5kZXggaW5mbykKKyAqLworCitzdHJ1Y3QgcmVmZXJlbmNlIHsKKwl2b2lkICpvYmplY3Q7CisJc3BpbmxvY2tfdCBsb2NrOworCXUzMiByZWY7Cit9OworCisvKioKKyAqIHN0cnVjdCB0aXBjX3JlZl90YWJsZSAtIHRhYmxlIG9mIFRJUEMgb2JqZWN0IHJlZmVyZW5jZSBlbnRyaWVzCisgKiBAZW50cmllczogcG9pbnRlciB0byBhcnJheSBvZiByZWZlcmVuY2UgZW50cmllcworICogQGNhcGFjaXR5OiBhcnJheSBpbmRleCBvZiBmaXJzdCB1bnVzYWJsZSBlbnRyeQorICogQGluaXRfcG9pbnQ6IGFycmF5IGluZGV4IG9mIGZpcnN0IHVuaW5pdGlhbGl6ZWQgZW50cnkKKyAqIEBmaXJzdF9mcmVlOiBhcnJheSBpbmRleCBvZiBmaXJzdCB1bnVzZWQgb2JqZWN0IHJlZmVyZW5jZSBlbnRyeQorICogQGxhc3RfZnJlZTogYXJyYXkgaW5kZXggb2YgbGFzdCB1bnVzZWQgb2JqZWN0IHJlZmVyZW5jZSBlbnRyeQorICogQGluZGV4X21hc2s6IGJpdG1hc2sgZm9yIGFycmF5IGluZGV4IHBvcnRpb24gb2YgcmVmZXJlbmNlIHZhbHVlcworICogQHN0YXJ0X21hc2s6IGluaXRpYWwgdmFsdWUgZm9yIGluc3RhbmNlIHZhbHVlIHBvcnRpb24gb2YgcmVmZXJlbmNlIHZhbHVlcworICovCisKK3N0cnVjdCByZWZfdGFibGUgeworCXN0cnVjdCByZWZlcmVuY2UgKmVudHJpZXM7CisJdTMyIGNhcGFjaXR5OworCXUzMiBpbml0X3BvaW50OworCXUzMiBmaXJzdF9mcmVlOworCXUzMiBsYXN0X2ZyZWU7CisJdTMyIGluZGV4X21hc2s7CisJdTMyIHN0YXJ0X21hc2s7Cit9OwogCiAvKgogICogT2JqZWN0IHJlZmVyZW5jZSB0YWJsZSBjb25zaXN0cyBvZiAyKipOIGVudHJpZXMuCiAgKgotICogQSB1c2VkIGVudHJ5IGhhcyBvYmplY3QgcHRyICE9IDAsIHJlZmVyZW5jZSA9PSBYWFhYfG93biBpbmRleAotICoJCQkJICAgICAoWFhYWCBjaGFuZ2VzIGVhY2ggdGltZSBlbnRyeSBpcyBhY3F1aXJlZCkKLSAqIEEgZnJlZSBlbnRyeSBoYXMgb2JqZWN0IHB0ciA9PSAwLCByZWZlcmVuY2UgPT0gWVlZWXxuZXh0IGZyZWUgaW5kZXgKLSAqCQkJCSAgICAgKFlZWVkgaXMgb25lIG1vcmUgdGhhbiBsYXN0IHVzZWQgWFhYWCkKKyAqIFN0YXRlCU9iamVjdCBwdHIJUmVmZXJlbmNlCisgKiAtLS0tLSAgICAgICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLQorICogSW4gdXNlICAgICAgICBub24tTlVMTCAgICAgICBYWFhYfG93biBpbmRleAorICoJCQkJKFhYWFggY2hhbmdlcyBlYWNoIHRpbWUgZW50cnkgaXMgYWNxdWlyZWQpCisgKiBGcmVlICAgICAgICAgICAgTlVMTCAgICAgICAgIFlZWVl8bmV4dCBmcmVlIGluZGV4CisgKgkJCQkoWVlZWSBpcyBvbmUgbW9yZSB0aGFuIGxhc3QgdXNlZCBYWFhYKQorICogVW5pbml0aWFsaXplZCAgIE5VTEwgICAgICAgICAwCiAgKgotICogRnJlZSBsaXN0IGlzIGluaXRpYWxseSBjaGFpbmVkIGZyb20gZW50cnkgKDIqKk4pLTEgdG8gZW50cnkgMS4KLSAqIEVudHJ5IDAgaXMgbm90IHVzZWQgdG8gYWxsb3cgaW5kZXggMCB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBmcmVlIGxpc3QuCisgKiBFbnRyeSAwIGlzIG5vdCB1c2VkOyB0aGlzIGFsbG93cyBpbmRleCAwIHRvIGRlbm90ZSB0aGUgZW5kIG9mIHRoZSBmcmVlIGxpc3QuCiAgKgotICogTm90ZTogQW55IGFjY2lkZW50YWwgcmVmZXJlbmNlIG9mIHRoZSBmb3JtIFhYWFh8MC0tMCB3b24ndCBtYXRjaCBlbnRyeSAwCi0gKiBiZWNhdXNlIGVudHJ5IDAncyByZWZlcmVuY2UgZmllbGQgaGFzIHRoZSBmb3JtIFhYWFh8MS0tMS4KKyAqIE5vdGUgdGhhdCBhIHJlZmVyZW5jZSB2YWx1ZSBvZiAwIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGluZGljYXRlIHRoYXQgYW4KKyAqIGVudHJ5IGlzIHVuaW5pdGlhbGl6ZWQsIHNpbmNlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBmcmVlIGxpc3QgY291bGQgYWxzbworICogaGF2ZSBhIHJlZmVyZW5jZSB2YWx1ZSBvZiAwIChhbHRob3VnaCB0aGlzIGlzIHVubGlrZWx5KS4KICAqLwogCi1zdHJ1Y3QgcmVmX3RhYmxlIHRpcGNfcmVmX3RhYmxlID0geyBOVUxMIH07CitzdGF0aWMgc3RydWN0IHJlZl90YWJsZSB0aXBjX3JlZl90YWJsZSA9IHsgTlVMTCB9OwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhyZWZfdGFibGVfbG9jayk7CiAKQEAgLTcyLDI5ICsxMDAsMjkgQEAKIGludCB0aXBjX3JlZl90YWJsZV9pbml0KHUzMiByZXF1ZXN0ZWRfc2l6ZSwgdTMyIHN0YXJ0KQogewogCXN0cnVjdCByZWZlcmVuY2UgKnRhYmxlOwotCXUzMiBzeiA9IDEgPDwgNDsKLQl1MzIgaW5kZXhfbWFzazsKLQlpbnQgaTsKKwl1MzIgYWN0dWFsX3NpemU7CiAKLQl3aGlsZSAoc3ogPCByZXF1ZXN0ZWRfc2l6ZSkgewotCQlzeiA8PD0gMTsKLQl9Ci0JdGFibGUgPSB2bWFsbG9jKHN6ICogc2l6ZW9mKCp0YWJsZSkpOworCS8qIGFjY291bnQgZm9yIHVudXNlZCBlbnRyeSwgdGhlbiByb3VuZCB1cCBzaXplIHRvIGEgcG93ZXIgb2YgMiAqLworCisJcmVxdWVzdGVkX3NpemUrKzsKKwlmb3IgKGFjdHVhbF9zaXplID0gMTY7IGFjdHVhbF9zaXplIDwgcmVxdWVzdGVkX3NpemU7IGFjdHVhbF9zaXplIDw8PSAxKQorCQkvKiBkbyBub3RoaW5nICovIDsKKworCS8qIGFsbG9jYXRlIHRhYmxlICYgbWFyayBhbGwgZW50cmllcyBhcyB1bmluaXRpYWxpemVkICovCisKKwl0YWJsZSA9IF9fdm1hbGxvYyhhY3R1YWxfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgcmVmZXJlbmNlKSwKKwkJCSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCk7CiAJaWYgKHRhYmxlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jd3JpdGVfbG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwotCWluZGV4X21hc2sgPSBzeiAtIDE7Ci0JZm9yIChpID0gc3ogLSAxOyBpID49IDA7IGktLSkgewotCQl0YWJsZVtpXS5vYmplY3QgPSBOVUxMOwotCQlzcGluX2xvY2tfaW5pdCgmdGFibGVbaV0ubG9jayk7Ci0JCXRhYmxlW2ldLmRhdGEubmV4dF9wbHVzX3VwcGVyID0gKHN0YXJ0ICYgfmluZGV4X21hc2spICsgaSAtIDE7Ci0JfQogCXRpcGNfcmVmX3RhYmxlLmVudHJpZXMgPSB0YWJsZTsKLQl0aXBjX3JlZl90YWJsZS5pbmRleF9tYXNrID0gaW5kZXhfbWFzazsKLQl0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlID0gc3ogLSAxOwotCXRpcGNfcmVmX3RhYmxlLmxhc3RfZnJlZSA9IDE7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZyZWZfdGFibGVfbG9jayk7CisJdGlwY19yZWZfdGFibGUuY2FwYWNpdHkgPSByZXF1ZXN0ZWRfc2l6ZTsKKwl0aXBjX3JlZl90YWJsZS5pbml0X3BvaW50ID0gMTsKKwl0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlID0gMDsKKwl0aXBjX3JlZl90YWJsZS5sYXN0X2ZyZWUgPSAwOworCXRpcGNfcmVmX3RhYmxlLmluZGV4X21hc2sgPSBhY3R1YWxfc2l6ZSAtIDE7CisJdGlwY19yZWZfdGFibGUuc3RhcnRfbWFzayA9IHN0YXJ0ICYgfnRpcGNfcmVmX3RhYmxlLmluZGV4X21hc2s7CisKIAlyZXR1cm4gVElQQ19PSzsKIH0KIApAQCAtMTI1LDcgKzE1Myw3IEBACiAJdTMyIGluZGV4OwogCXUzMiBpbmRleF9tYXNrOwogCXUzMiBuZXh0X3BsdXNfdXBwZXI7Ci0JdTMyIHJlZmVyZW5jZSA9IDA7CisJdTMyIHJlZjsKIAogCWlmICghb2JqZWN0KSB7CiAJCWVycigiQXR0ZW1wdCB0byBhY3F1aXJlIHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgb2JqZWN0XG4iKTsKQEAgLTEzNiw2ICsxNjQsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwkvKiB0YWtlIGEgZnJlZSBlbnRyeSwgaWYgYXZhaWxhYmxlOyBvdGhlcndpc2UgaW5pdGlhbGl6ZSBhIG5ldyBlbnRyeSAqLworCiAJd3JpdGVfbG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwogCWlmICh0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlKSB7CiAJCWluZGV4ID0gdGlwY19yZWZfdGFibGUuZmlyc3RfZnJlZTsKQEAgLTE0MywxNyArMTczLDI5IEBACiAJCWluZGV4X21hc2sgPSB0aXBjX3JlZl90YWJsZS5pbmRleF9tYXNrOwogCQkvKiB0YWtlIGxvY2sgaW4gY2FzZSBhIHByZXZpb3VzIHVzZXIgb2YgZW50cnkgc3RpbGwgaG9sZHMgaXQgKi8KIAkJc3Bpbl9sb2NrX2JoKCZlbnRyeS0+bG9jayk7Ci0JCW5leHRfcGx1c191cHBlciA9IGVudHJ5LT5kYXRhLm5leHRfcGx1c191cHBlcjsKKwkJbmV4dF9wbHVzX3VwcGVyID0gZW50cnktPnJlZjsKIAkJdGlwY19yZWZfdGFibGUuZmlyc3RfZnJlZSA9IG5leHRfcGx1c191cHBlciAmIGluZGV4X21hc2s7Ci0JCXJlZmVyZW5jZSA9IChuZXh0X3BsdXNfdXBwZXIgJiB+aW5kZXhfbWFzaykgKyBpbmRleDsKLQkJZW50cnktPmRhdGEucmVmZXJlbmNlID0gcmVmZXJlbmNlOworCQlyZWYgPSAobmV4dF9wbHVzX3VwcGVyICYgfmluZGV4X21hc2spICsgaW5kZXg7CisJCWVudHJ5LT5yZWYgPSByZWY7CiAJCWVudHJ5LT5vYmplY3QgPSBvYmplY3Q7Ci0JCWlmIChsb2NrICE9IDApCi0JCQkqbG9jayA9ICZlbnRyeS0+bG9jazsKIAkJc3Bpbl91bmxvY2tfYmgoJmVudHJ5LT5sb2NrKTsKKwkJKmxvY2sgPSAmZW50cnktPmxvY2s7CisJfQorCWVsc2UgaWYgKHRpcGNfcmVmX3RhYmxlLmluaXRfcG9pbnQgPCB0aXBjX3JlZl90YWJsZS5jYXBhY2l0eSkgeworCQlpbmRleCA9IHRpcGNfcmVmX3RhYmxlLmluaXRfcG9pbnQrKzsKKwkJZW50cnkgPSAmKHRpcGNfcmVmX3RhYmxlLmVudHJpZXNbaW5kZXhdKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmVudHJ5LT5sb2NrKTsKKwkJcmVmID0gdGlwY19yZWZfdGFibGUuc3RhcnRfbWFzayArIGluZGV4OworCQllbnRyeS0+cmVmID0gcmVmOworCQllbnRyeS0+b2JqZWN0ID0gb2JqZWN0OworCQkqbG9jayA9ICZlbnRyeS0+bG9jazsKKwl9CisJZWxzZSB7CisJCXJlZiA9IDA7CiAJfQogCXdyaXRlX3VubG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwotCXJldHVybiByZWZlcmVuY2U7CisKKwlyZXR1cm4gcmVmOwogfQogCiAvKioKQEAgLTE2OSw0MiArMjExLDk5IEBACiAJdTMyIGluZGV4OwogCXUzMiBpbmRleF9tYXNrOwogCi0JaWYgKCFyZWYpIHsKLQkJZXJyKCJBdHRlbXB0IHRvIGRpc2NhcmQgcmVmZXJlbmNlIDBcbiIpOwotCQlyZXR1cm47Ci0JfQogCWlmICghdGlwY19yZWZfdGFibGUuZW50cmllcykgewogCQllcnIoIlJlZmVyZW5jZSB0YWJsZSBub3QgZm91bmQgZHVyaW5nIGRpc2NhcmQgYXR0ZW1wdFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZyZWZfdGFibGVfbG9jayk7CiAJaW5kZXhfbWFzayA9IHRpcGNfcmVmX3RhYmxlLmluZGV4X21hc2s7CiAJaW5kZXggPSByZWYgJiBpbmRleF9tYXNrOwogCWVudHJ5ID0gJih0aXBjX3JlZl90YWJsZS5lbnRyaWVzW2luZGV4XSk7CiAKKwl3cml0ZV9sb2NrX2JoKCZyZWZfdGFibGVfbG9jayk7CisKIAlpZiAoIWVudHJ5LT5vYmplY3QpIHsKIAkJZXJyKCJBdHRlbXB0IHRvIGRpc2NhcmQgcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBvYmplY3RcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQotCWlmIChlbnRyeS0+ZGF0YS5yZWZlcmVuY2UgIT0gcmVmKSB7CisJaWYgKGVudHJ5LT5yZWYgIT0gcmVmKSB7CiAJCWVycigiQXR0ZW1wdCB0byBkaXNjYXJkIG5vbi1leGlzdGVudCByZWZlcmVuY2VcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyogbWFyayBlbnRyeSBhcyB1bnVzZWQgKi8KKwkvKgorCSAqIG1hcmsgZW50cnkgYXMgdW51c2VkOyBpbmNyZW1lbnQgaW5zdGFuY2UgcGFydCBvZiBlbnRyeSdzIHJlZmVyZW5jZQorCSAqIHRvIGludmFsaWRhdGUgYW55IHN1YnNlcXVlbnQgcmVmZXJlbmNlcworCSAqLworCiAJZW50cnktPm9iamVjdCA9IE5VTEw7CisJZW50cnktPnJlZiA9IChyZWYgJiB+aW5kZXhfbWFzaykgKyAoaW5kZXhfbWFzayArIDEpOworCisJLyogYXBwZW5kIGVudHJ5IHRvIGZyZWUgZW50cnkgbGlzdCAqLworCiAJaWYgKHRpcGNfcmVmX3RhYmxlLmZpcnN0X2ZyZWUgPT0gMCkKIAkJdGlwY19yZWZfdGFibGUuZmlyc3RfZnJlZSA9IGluZGV4OwogCWVsc2UKLQkJLyogbmV4dF9wbHVzX3VwcGVyIGlzIGFsd2F5cyBYWFhYfDAtLTAgZm9yIGxhc3QgZnJlZSBlbnRyeSAqLwotCQl0aXBjX3JlZl90YWJsZS5lbnRyaWVzW3RpcGNfcmVmX3RhYmxlLmxhc3RfZnJlZV0uZGF0YS5uZXh0X3BsdXNfdXBwZXIKLQkJCXw9IGluZGV4OworCQl0aXBjX3JlZl90YWJsZS5lbnRyaWVzW3RpcGNfcmVmX3RhYmxlLmxhc3RfZnJlZV0ucmVmIHw9IGluZGV4OwogCXRpcGNfcmVmX3RhYmxlLmxhc3RfZnJlZSA9IGluZGV4OwogCi0JLyogaW5jcmVtZW50IHVwcGVyIGJpdHMgb2YgZW50cnkgdG8gaW52YWxpZGF0ZSBzdWJzZXF1ZW50IHJlZmVyZW5jZXMgKi8KLQllbnRyeS0+ZGF0YS5uZXh0X3BsdXNfdXBwZXIgPSAocmVmICYgfmluZGV4X21hc2spICsgKGluZGV4X21hc2sgKyAxKTsKIGV4aXQ6CiAJd3JpdGVfdW5sb2NrX2JoKCZyZWZfdGFibGVfbG9jayk7CiB9CiAKKy8qKgorICogdGlwY19yZWZfbG9jayAtIGxvY2sgcmVmZXJlbmNlZCBvYmplY3QgYW5kIHJldHVybiBwb2ludGVyIHRvIGl0CisgKi8KKwordm9pZCAqdGlwY19yZWZfbG9jayh1MzIgcmVmKQoreworCWlmIChsaWtlbHkodGlwY19yZWZfdGFibGUuZW50cmllcykpIHsKKwkJc3RydWN0IHJlZmVyZW5jZSAqZW50cnk7CisKKwkJZW50cnkgPSAmdGlwY19yZWZfdGFibGUuZW50cmllc1tyZWYgJgorCQkJCQkJdGlwY19yZWZfdGFibGUuaW5kZXhfbWFza107CisJCWlmIChsaWtlbHkoZW50cnktPnJlZiAhPSAwKSkgeworCQkJc3Bpbl9sb2NrX2JoKCZlbnRyeS0+bG9jayk7CisJCQlpZiAobGlrZWx5KChlbnRyeS0+cmVmID09IHJlZikgJiYgKGVudHJ5LT5vYmplY3QpKSkKKwkJCQlyZXR1cm4gZW50cnktPm9iamVjdDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZlbnRyeS0+bG9jayk7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdGlwY19yZWZfdW5sb2NrIC0gdW5sb2NrIHJlZmVyZW5jZWQgb2JqZWN0CisgKi8KKwordm9pZCB0aXBjX3JlZl91bmxvY2sodTMyIHJlZikKK3sKKwlpZiAobGlrZWx5KHRpcGNfcmVmX3RhYmxlLmVudHJpZXMpKSB7CisJCXN0cnVjdCByZWZlcmVuY2UgKmVudHJ5OworCisJCWVudHJ5ID0gJnRpcGNfcmVmX3RhYmxlLmVudHJpZXNbcmVmICYKKwkJCQkJCXRpcGNfcmVmX3RhYmxlLmluZGV4X21hc2tdOworCQlpZiAobGlrZWx5KChlbnRyeS0+cmVmID09IHJlZikgJiYgKGVudHJ5LT5vYmplY3QpKSkKKwkJCXNwaW5fdW5sb2NrX2JoKCZlbnRyeS0+bG9jayk7CisJCWVsc2UKKwkJCWVycigiQXR0ZW1wdCB0byB1bmxvY2sgbm9uLWV4aXN0ZW50IHJlZmVyZW5jZVxuIik7CisJfQorfQorCisvKioKKyAqIHRpcGNfcmVmX2RlcmVmIC0gcmV0dXJuIHBvaW50ZXIgcmVmZXJlbmNlZCBvYmplY3QgKHdpdGhvdXQgbG9ja2luZyBpdCkKKyAqLworCit2b2lkICp0aXBjX3JlZl9kZXJlZih1MzIgcmVmKQoreworCWlmIChsaWtlbHkodGlwY19yZWZfdGFibGUuZW50cmllcykpIHsKKwkJc3RydWN0IHJlZmVyZW5jZSAqZW50cnk7CisKKwkJZW50cnkgPSAmdGlwY19yZWZfdGFibGUuZW50cmllc1tyZWYgJgorCQkJCQkJdGlwY19yZWZfdGFibGUuaW5kZXhfbWFza107CisJCWlmIChsaWtlbHkoZW50cnktPnJlZiA9PSByZWYpKQorCQkJcmV0dXJuIGVudHJ5LT5vYmplY3Q7CisJfQorCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9yZWYuaCBiL25ldC90aXBjL3JlZi5oCmluZGV4IDM4ZjNhN2YuLjdlMzc5OGUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3JlZi5oCisrKyBiL25ldC90aXBjL3JlZi5oCkBAIC0yLDcgKzIsNyBAQAogICogbmV0L3RpcGMvcmVmLmg6IEluY2x1ZGUgZmlsZSBmb3IgVElQQyBvYmplY3QgcmVnaXN0cnkgY29kZQogICoKICAqIENvcHlyaWdodCAoYykgMTk5MS0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LCBXaW5kIFJpdmVyIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2LCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw5NSArMzcsMTQgQEAKICNpZm5kZWYgX1RJUENfUkVGX0gKICNkZWZpbmUgX1RJUENfUkVGX0gKIAotLyoqCi0gKiBzdHJ1Y3QgcmVmZXJlbmNlIC0gVElQQyBvYmplY3QgcmVmZXJlbmNlIGVudHJ5Ci0gKiBAb2JqZWN0OiBwb2ludGVyIHRvIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggcmVmZXJlbmNlIGVudHJ5Ci0gKiBAbG9jazogc3BpbmxvY2sgY29udHJvbGxpbmcgYWNjZXNzIHRvIG9iamVjdAotICogQGRhdGE6IHJlZmVyZW5jZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggb2JqZWN0IChvciBsaW5rIHRvIG5leHQgdW51c2VkIGVudHJ5KQotICovCi0KLXN0cnVjdCByZWZlcmVuY2UgewotCXZvaWQgKm9iamVjdDsKLQlzcGlubG9ja190IGxvY2s7Ci0JdW5pb24gewotCQl1MzIgbmV4dF9wbHVzX3VwcGVyOwotCQl1MzIgcmVmZXJlbmNlOwotCX0gZGF0YTsKLX07Ci0KLS8qKgotICogc3RydWN0IHRpcGNfcmVmX3RhYmxlIC0gdGFibGUgb2YgVElQQyBvYmplY3QgcmVmZXJlbmNlIGVudHJpZXMKLSAqIEBlbnRyaWVzOiBwb2ludGVyIHRvIGFycmF5IG9mIHJlZmVyZW5jZSBlbnRyaWVzCi0gKiBAaW5kZXhfbWFzazogYml0bWFzayBmb3IgYXJyYXkgaW5kZXggcG9ydGlvbiBvZiByZWZlcmVuY2UgdmFsdWVzCi0gKiBAZmlyc3RfZnJlZTogYXJyYXkgaW5kZXggb2YgZmlyc3QgdW51c2VkIG9iamVjdCByZWZlcmVuY2UgZW50cnkKLSAqIEBsYXN0X2ZyZWU6IGFycmF5IGluZGV4IG9mIGxhc3QgdW51c2VkIG9iamVjdCByZWZlcmVuY2UgZW50cnkKLSAqLwotCi1zdHJ1Y3QgcmVmX3RhYmxlIHsKLQlzdHJ1Y3QgcmVmZXJlbmNlICplbnRyaWVzOwotCXUzMiBpbmRleF9tYXNrOwotCXUzMiBmaXJzdF9mcmVlOwotCXUzMiBsYXN0X2ZyZWU7Ci19OwotCi1leHRlcm4gc3RydWN0IHJlZl90YWJsZSB0aXBjX3JlZl90YWJsZTsKLQogaW50IHRpcGNfcmVmX3RhYmxlX2luaXQodTMyIHJlcXVlc3RlZF9zaXplLCB1MzIgc3RhcnQpOwogdm9pZCB0aXBjX3JlZl90YWJsZV9zdG9wKHZvaWQpOwogCiB1MzIgdGlwY19yZWZfYWNxdWlyZSh2b2lkICpvYmplY3QsIHNwaW5sb2NrX3QgKipsb2NrKTsKIHZvaWQgdGlwY19yZWZfZGlzY2FyZCh1MzIgcmVmKTsKIAotCi0vKioKLSAqIHRpcGNfcmVmX2xvY2sgLSBsb2NrIHJlZmVyZW5jZWQgb2JqZWN0IGFuZCByZXR1cm4gcG9pbnRlciB0byBpdAotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqdGlwY19yZWZfbG9jayh1MzIgcmVmKQotewotCWlmIChsaWtlbHkodGlwY19yZWZfdGFibGUuZW50cmllcykpIHsKLQkJc3RydWN0IHJlZmVyZW5jZSAqciA9Ci0JCQkmdGlwY19yZWZfdGFibGUuZW50cmllc1tyZWYgJiB0aXBjX3JlZl90YWJsZS5pbmRleF9tYXNrXTsKLQotCQlzcGluX2xvY2tfYmgoJnItPmxvY2spOwotCQlpZiAobGlrZWx5KHItPmRhdGEucmVmZXJlbmNlID09IHJlZikpCi0JCQlyZXR1cm4gci0+b2JqZWN0OwotCQlzcGluX3VubG9ja19iaCgmci0+bG9jayk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIHRpcGNfcmVmX3VubG9jayAtIHVubG9jayByZWZlcmVuY2VkIG9iamVjdAotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3JlZl91bmxvY2sodTMyIHJlZikKLXsKLQlpZiAobGlrZWx5KHRpcGNfcmVmX3RhYmxlLmVudHJpZXMpKSB7Ci0JCXN0cnVjdCByZWZlcmVuY2UgKnIgPQotCQkJJnRpcGNfcmVmX3RhYmxlLmVudHJpZXNbcmVmICYgdGlwY19yZWZfdGFibGUuaW5kZXhfbWFza107Ci0KLQkJaWYgKGxpa2VseShyLT5kYXRhLnJlZmVyZW5jZSA9PSByZWYpKQotCQkJc3Bpbl91bmxvY2tfYmgoJnItPmxvY2spOwotCQllbHNlCi0JCQllcnIoInRpcGNfcmVmX3VubG9jaygpIGludm9rZWQgdXNpbmcgb2Jzb2xldGUgcmVmZXJlbmNlXG4iKTsKLQl9Ci19Ci0KLS8qKgotICogdGlwY19yZWZfZGVyZWYgLSByZXR1cm4gcG9pbnRlciByZWZlcmVuY2VkIG9iamVjdCAod2l0aG91dCBsb2NraW5nIGl0KQotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqdGlwY19yZWZfZGVyZWYodTMyIHJlZikKLXsKLQlpZiAobGlrZWx5KHRpcGNfcmVmX3RhYmxlLmVudHJpZXMpKSB7Ci0JCXN0cnVjdCByZWZlcmVuY2UgKnIgPQotCQkJJnRpcGNfcmVmX3RhYmxlLmVudHJpZXNbcmVmICYgdGlwY19yZWZfdGFibGUuaW5kZXhfbWFza107Ci0KLQkJaWYgKGxpa2VseShyLT5kYXRhLnJlZmVyZW5jZSA9PSByZWYpKQotCQkJcmV0dXJuIHItPm9iamVjdDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Cit2b2lkICp0aXBjX3JlZl9sb2NrKHUzMiByZWYpOwordm9pZCB0aXBjX3JlZl91bmxvY2sodTMyIHJlZik7Cit2b2lkICp0aXBjX3JlZl9kZXJlZih1MzIgcmVmKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IDIyOTA5MDMuLjA1ODUzMTUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCisrKyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC01OCwxNiArNTcsMTggQEAKICNkZWZpbmUgU1NfTElTVEVOSU5HCS0xCS8qIHNvY2tldCBpcyBsaXN0ZW5pbmcgKi8KICNkZWZpbmUgU1NfUkVBRFkJLTIJLyogc29ja2V0IGlzIGNvbm5lY3Rpb25sZXNzICovCiAKLSNkZWZpbmUgT1ZFUkxPQURfTElNSVRfQkFTRSAgICA1MDAwCisjZGVmaW5lIE9WRVJMT0FEX0xJTUlUX0JBU0UJNTAwMAorI2RlZmluZSBDT05OX1RJTUVPVVRfREVGQVVMVAk4MDAwCS8qIGRlZmF1bHQgY29ubmVjdCB0aW1lb3V0ID0gOHMgKi8KIAogc3RydWN0IHRpcGNfc29jayB7CiAJc3RydWN0IHNvY2sgc2s7CiAJc3RydWN0IHRpcGNfcG9ydCAqcDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKIH07CiAKLSNkZWZpbmUgdGlwY19zayhzaykgKChzdHJ1Y3QgdGlwY19zb2NrKilzaykKKyNkZWZpbmUgdGlwY19zayhzaykgKChzdHJ1Y3QgdGlwY19zb2NrICopKHNrKSkKKyNkZWZpbmUgdGlwY19za19wb3J0KHNrKSAoKHN0cnVjdCB0aXBjX3BvcnQgKikodGlwY19zayhzayktPnApKQogCitzdGF0aWMgaW50IGJhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdTMyIGRpc3BhdGNoKHN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmKTsKIHN0YXRpYyB2b2lkIHdha2V1cGRpc3BhdGNoKHN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0KTsKIApAQCAtODEsOTMgKzgyLDExNSBAQAogCiBzdGF0aWMgYXRvbWljX3QgdGlwY19xdWV1ZV9zaXplID0gQVRPTUlDX0lOSVQoMCk7CiAKLQogLyoKLSAqIHNvY2tfbG9jaygpOiBMb2NrIGEgcG9ydC9zb2NrZXQgcGFpci4gbG9ja19zb2NrKCkgY2FuCi0gKiBub3QgYmUgdXNlZCBoZXJlLCBzaW5jZSB0aGUgc2FtZSBsb2NrIG11c3QgcHJvdGVjdCBwb3J0cwotICogd2l0aCBub24tc29ja2V0IGludGVyZmFjZXMuCi0gKiBTZWUgbmV0LmMgZm9yIGRlc2NyaXB0aW9uIG9mIGxvY2tpbmcgcG9saWN5LgorICogUmV2aXNlZCBUSVBDIHNvY2tldCBsb2NraW5nIHBvbGljeToKKyAqCisgKiBNb3N0IHNvY2tldCBvcGVyYXRpb25zIHRha2UgdGhlIHN0YW5kYXJkIHNvY2tldCBsb2NrIHdoZW4gdGhleSBzdGFydAorICogYW5kIGhvbGQgaXQgdW50aWwgdGhleSBmaW5pc2ggKG9yIHVudGlsIHRoZXkgbmVlZCB0byBzbGVlcCkuICBBY3F1aXJpbmcKKyAqIHRoaXMgbG9jayBncmFudHMgdGhlIG93bmVyIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGZpZWxkcyBvZiB0aGUgc29ja2V0CisgKiBkYXRhIHN0cnVjdHVyZXMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgYmFja2xvZyBxdWV1ZS4gIEEgZmV3IHNvY2tldAorICogb3BlcmF0aW9ucyBjYW4gYmUgZG9uZSB3aXRob3V0IHRha2luZyB0aGUgc29ja2V0IGxvY2sgYmVjYXVzZSB0aGV5IG9ubHkKKyAqIHJlYWQgc29ja2V0IGluZm9ybWF0aW9uIHRoYXQgbmV2ZXIgY2hhbmdlcyBkdXJpbmcgdGhlIGxpZmUgb2YgdGhlIHNvY2tldC4KKyAqCisgKiBTb2NrZXQgb3BlcmF0aW9ucyBtYXkgYWNxdWlyZSB0aGUgbG9jayBmb3IgdGhlIGFzc29jaWF0ZWQgVElQQyBwb3J0IGlmIHRoZXkKKyAqIG5lZWQgdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24gb24gdGhlIHBvcnQuICBJZiBhbnkgcm91dGluZSBuZWVkcyB0byBhY3F1aXJlCisgKiBib3RoIHRoZSBzb2NrZXQgbG9jayBhbmQgdGhlIHBvcnQgbG9jayBpdCBtdXN0IHRha2UgdGhlIHNvY2tldCBsb2NrIGZpcnN0CisgKiB0byBhdm9pZCB0aGUgcmlzayBvZiBkZWFkbG9jay4KKyAqCisgKiBUaGUgZGlzcGF0Y2hlciBoYW5kbGluZyBpbmNvbWluZyBtZXNzYWdlcyBjYW5ub3QgZ3JhYiB0aGUgc29ja2V0IGxvY2sgaW4KKyAqIHRoZSBzdGFuZGFyZCBmYXNoaW9uLCBzaW5jZSBpbnZva2VkIGl0IHJ1bnMgYXQgdGhlIEJIIGxldmVsIGFuZCBjYW5ub3QgYmxvY2suCisgKiBJbnN0ZWFkLCBpdCBjaGVja3MgdG8gc2VlIGlmIHRoZSBzb2NrZXQgbG9jayBpcyBjdXJyZW50bHkgb3duZWQgYnkgc29tZW9uZSwKKyAqIGFuZCBlaXRoZXIgaGFuZGxlcyB0aGUgbWVzc2FnZSBpdHNlbGYgb3IgYWRkcyBpdCB0byB0aGUgc29ja2V0J3MgYmFja2xvZworICogcXVldWU7IGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcXVldWVkIG1lc3NhZ2UgaXMgcHJvY2Vzc2VkIG9uY2UgdGhlIHByb2Nlc3MKKyAqIG93bmluZyB0aGUgc29ja2V0IGxvY2sgcmVsZWFzZXMgaXQuCisgKgorICogTk9URTogUmVsZWFzaW5nIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBhbiBvcGVyYXRpb24gaXMgc2xlZXBpbmcgb3ZlcmNvbWVzCisgKiB0aGUgcHJvYmxlbSBvZiBhIGJsb2NrZWQgc29ja2V0IG9wZXJhdGlvbiBwcmV2ZW50aW5nIGFueSBvdGhlciBvcGVyYXRpb25zCisgKiBmcm9tIG9jY3VycmluZy4gIEhvd2V2ZXIsIGFwcGxpY2F0aW9ucyBtdXN0IGJlIGNhcmVmdWwgaWYgdGhleSBoYXZlCisgKiBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0byBzZW5kIChvciByZWNlaXZlKSBvbiB0aGUgc2FtZSBzb2NrZXQsIGFzIHRoZXNlCisgKiBvcGVyYXRpb25zIG1pZ2h0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuICBGb3IgZXhhbXBsZSwgZG9pbmcgYSBjb25uZWN0CisgKiBhbmQgYSByZWNlaXZlIGF0IHRoZSBzYW1lIHRpbWUgbWlnaHQgYWxsb3cgdGhlIHJlY2VpdmUgdG8gY29uc3VtZSB0aGUKKyAqIEFDSyBtZXNzYWdlIG1lYW50IGZvciB0aGUgY29ubmVjdC4gIFdoaWxlIGFkZGl0aW9uYWwgd29yayBjb3VsZCBiZSBkb25lCisgKiB0byB0cnkgYW5kIG92ZXJjb21lIHRoaXMsIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSB3b3J0aHdoaWxlIGF0IHRoZSBwcmVzZW50LgorICoKKyAqIE5PVEU6IFJlbGVhc2luZyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgYW4gb3BlcmF0aW9uIGlzIHNsZWVwaW5nIGFsc28gZW5zdXJlcworICogdGhhdCBhbm90aGVyIG9wZXJhdGlvbiB0aGF0IG11c3QgYmUgcGVyZm9ybWVkIGluIGEgbm9uLWJsb2NraW5nIG1hbm5lciBpcworICogbm90IGRlbGF5ZWQgZm9yIHZlcnkgbG9uZyBiZWNhdXNlIHRoZSBsb2NrIGhhcyBhbHJlYWR5IGJlZW4gdGFrZW4uCisgKgorICogTk9URTogVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBjZXJ0YWluIGZpZWxkcyBvZiBhIHBvcnQvc29ja2V0IHBhaXIgYXJlCisgKiBjb25zdGFudCBvdmVyIGl0cyBsaWZldGltZTsgc3VjaCBmaWVsZHMgY2FuIGJlIGV4YW1pbmVkIHdpdGhvdXQgdGFraW5nCisgKiB0aGUgc29ja2V0IGxvY2sgYW5kL29yIHBvcnQgbG9jaywgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIHJlLXJlYWQgZXZlbgorICogYWZ0ZXIgcmVzdW1pbmcgcHJvY2Vzc2luZyBhZnRlciB3YWl0aW5nLiAgVGhlc2UgZmllbGRzIGluY2x1ZGU6CisgKiAgIC0gc29ja2V0IHR5cGUKKyAqICAgLSBwb2ludGVyIHRvIHNvY2tldCBzayBzdHJ1Y3R1cmUgKGFrYSB0aXBjX3NvY2sgc3RydWN0dXJlKQorICogICAtIHBvaW50ZXIgdG8gcG9ydCBzdHJ1Y3R1cmUKKyAqICAgLSBwb3J0IHJlZmVyZW5jZQogICovCi1zdGF0aWMgdm9pZCBzb2NrX2xvY2soc3RydWN0IHRpcGNfc29jayogdHNvY2spCi17Ci0Jc3Bpbl9sb2NrX2JoKHRzb2NrLT5wLT5sb2NrKTsKLX0KLQotLyoKLSAqIHNvY2tfdW5sb2NrKCk6IFVubG9jayBhIHBvcnQvc29ja2V0IHBhaXIKLSAqLwotc3RhdGljIHZvaWQgc29ja191bmxvY2soc3RydWN0IHRpcGNfc29jayogdHNvY2spCi17Ci0Jc3Bpbl91bmxvY2tfYmgodHNvY2stPnAtPmxvY2spOwotfQogCiAvKioKLSAqIHBvbGxtYXNrIC0gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNldCBvZiBwb2xsKCkgZXZlbnRzIGZvciBhIHNvY2tldAotICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmUKKyAqIGFkdmFuY2VfcnhfcXVldWUgLSBkaXNjYXJkIGZpcnN0IGJ1ZmZlciBpbiBzb2NrZXQgcmVjZWl2ZSBxdWV1ZQogICoKLSAqIFRJUEMgc2V0cyB0aGUgcmV0dXJuZWQgZXZlbnRzIGFzIGZvbGxvd3M6Ci0gKiBhKSBQT0xMUkROT1JNIGFuZCBQT0xMSU4gYXJlIHNldCBpZiB0aGUgc29ja2V0J3MgcmVjZWl2ZSBxdWV1ZSBpcyBub24tZW1wdHkKLSAqICAgIG9yIGlmIGEgY29ubmVjdGlvbi1vcmllbnRlZCBzb2NrZXQgaXMgZG9lcyBub3QgaGF2ZSBhbiBhY3RpdmUgY29ubmVjdGlvbgotICogICAgKGkuZS4gYSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBibG9jaykuCi0gKiBiKSBQT0xMT1VUIGlzIHNldCBleGNlcHQgd2hlbiBhIHNvY2tldCdzIGNvbm5lY3Rpb24gaGFzIGJlZW4gdGVybWluYXRlZAotICogICAgKGkuZS4gYSB3cml0ZSBvcGVyYXRpb24gd2lsbCBub3QgYmxvY2spLgotICogYykgUE9MTEhVUCBpcyBzZXQgd2hlbiBhIHNvY2tldCdzIGNvbm5lY3Rpb24gaGFzIGJlZW4gdGVybWluYXRlZC4KLSAqCi0gKiBJTVBPUlRBTlQ6IFRoZSBmYWN0IHRoYXQgYSByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbiB3aWxsIG5vdCBibG9jayBkb2VzIE5PVAotICogaW1wbHkgdGhhdCB0aGUgb3BlcmF0aW9uIHdpbGwgc3VjY2VlZCEKLSAqCi0gKiBSZXR1cm5zIHBvbGxtYXNrIHZhbHVlCisgKiBDYWxsZXIgbXVzdCBob2xkIHNvY2tldCBsb2NrCiAgKi8KIAotc3RhdGljIHUzMiBwb2xsbWFzayhzdHJ1Y3Qgc29ja2V0ICpzb2NrKQorc3RhdGljIHZvaWQgYWR2YW5jZV9yeF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JdTMyIG1hc2s7Ci0KLQlpZiAoKHNrYl9xdWV1ZV9sZW4oJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSAhPSAwKSB8fAotCSAgICAoc29jay0+c3RhdGUgPT0gU1NfVU5DT05ORUNURUQpIHx8Ci0JICAgIChzb2NrLT5zdGF0ZSA9PSBTU19ESVNDT05ORUNUSU5HKSkKLQkJbWFzayA9IChQT0xMUkROT1JNIHwgUE9MTElOKTsKLQllbHNlCi0JCW1hc2sgPSAwOwotCi0JaWYgKHNvY2stPnN0YXRlID09IFNTX0RJU0NPTk5FQ1RJTkcpCi0JCW1hc2sgfD0gUE9MTEhVUDsKLQllbHNlCi0JCW1hc2sgfD0gUE9MTE9VVDsKLQotCXJldHVybiBtYXNrOwotfQotCi0KLS8qKgotICogYWR2YW5jZV9xdWV1ZSAtIGRpc2NhcmQgZmlyc3QgYnVmZmVyIGluIHF1ZXVlCi0gKiBAdHNvY2s6IFRJUEMgc29ja2V0Ci0gKi8KLQotc3RhdGljIHZvaWQgYWR2YW5jZV9xdWV1ZShzdHJ1Y3QgdGlwY19zb2NrICp0c29jaykKLXsKLQlzb2NrX2xvY2sodHNvY2spOwotCWJ1Zl9kaXNjYXJkKHNrYl9kZXF1ZXVlKCZ0c29jay0+c2suc2tfcmVjZWl2ZV9xdWV1ZSkpOwotCXNvY2tfdW5sb2NrKHRzb2NrKTsKKwlidWZfZGlzY2FyZChfX3NrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpOwogCWF0b21pY19kZWMoJnRpcGNfcXVldWVfc2l6ZSk7CiB9CiAKIC8qKgorICogZGlzY2FyZF9yeF9xdWV1ZSAtIGRpc2NhcmQgYWxsIGJ1ZmZlcnMgaW4gc29ja2V0IHJlY2VpdmUgcXVldWUKKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNvY2tldCBsb2NrCisgKi8KKworc3RhdGljIHZvaWQgZGlzY2FyZF9yeF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKKworCXdoaWxlICgoYnVmID0gX19za2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSkgeworCQlhdG9taWNfZGVjKCZ0aXBjX3F1ZXVlX3NpemUpOworCQlidWZfZGlzY2FyZChidWYpOworCX0KK30KKworLyoqCisgKiByZWplY3RfcnhfcXVldWUgLSByZWplY3QgYWxsIGJ1ZmZlcnMgaW4gc29ja2V0IHJlY2VpdmUgcXVldWUKKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNvY2tldCBsb2NrCisgKi8KKworc3RhdGljIHZvaWQgcmVqZWN0X3J4X3F1ZXVlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOworCisJd2hpbGUgKChidWYgPSBfX3NrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSB7CisJCXRpcGNfcmVqZWN0X21zZyhidWYsIFRJUENfRVJSX05PX1BPUlQpOworCQlhdG9taWNfZGVjKCZ0aXBjX3F1ZXVlX3NpemUpOworCX0KK30KKworLyoqCiAgKiB0aXBjX2NyZWF0ZSAtIGNyZWF0ZSBhIFRJUEMgc29ja2V0CisgKiBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZSAobXVzdCBiZSBkZWZhdWx0IG5ldHdvcmspCiAgKiBAc29jazogcHJlLWFsbG9jYXRlZCBzb2NrZXQgc3RydWN0dXJlCiAgKiBAcHJvdG9jb2w6IHByb3RvY29sIGluZGljYXRvciAobXVzdCBiZSAwKQogICoKLSAqIFRoaXMgcm91dGluZSBjcmVhdGVzIGFuZCBhdHRhY2hlcyBhICdzdHJ1Y3Qgc29jaycgdG8gdGhlICdzdHJ1Y3Qgc29ja2V0JywKLSAqIHRoZW4gY3JlYXRlIGFuZCBhdHRhY2hlcyBhIFRJUEMgcG9ydCB0byB0aGUgJ3N0cnVjdCBzb2NrJyBwYXJ0LgorICogVGhpcyByb3V0aW5lIGNyZWF0ZXMgYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgVElQQyBzb2NrZXQsCisgKiBpbml0aWFsaXplcyB0aGVtLCBhbmQgbGlua3MgdGhlbSB0b2dldGhlci4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlCiAgKi8KKwogc3RhdGljIGludCB0aXBjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCkKIHsKLQlzdHJ1Y3QgdGlwY19zb2NrICp0c29jazsKLQlzdHJ1Y3QgdGlwY19wb3J0ICpwb3J0OworCWNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wczsKKwlzb2NrZXRfc3RhdGUgc3RhdGU7CiAJc3RydWN0IHNvY2sgKnNrOwotCXUzMiByZWY7CisJdTMyIHBvcnRyZWY7CisKKwkvKiBWYWxpZGF0ZSBhcmd1bWVudHMgKi8KIAogCWlmIChuZXQgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKQEAgLTE3NSw1NCArMTk4LDU2IEBACiAJaWYgKHVubGlrZWx5KHByb3RvY29sICE9IDApKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAotCXJlZiA9IHRpcGNfY3JlYXRlcG9ydF9yYXcoTlVMTCwgJmRpc3BhdGNoLCAmd2FrZXVwZGlzcGF0Y2gsIFRJUENfTE9XX0lNUE9SVEFOQ0UpOwotCWlmICh1bmxpa2VseSghcmVmKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzb2NrLT5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwotCiAJc3dpdGNoIChzb2NrLT50eXBlKSB7CiAJY2FzZSBTT0NLX1NUUkVBTToKLQkJc29jay0+b3BzID0gJnN0cmVhbV9vcHM7CisJCW9wcyA9ICZzdHJlYW1fb3BzOworCQlzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwogCQlicmVhazsKIAljYXNlIFNPQ0tfU0VRUEFDS0VUOgotCQlzb2NrLT5vcHMgPSAmcGFja2V0X29wczsKKwkJb3BzID0gJnBhY2tldF9vcHM7CisJCXN0YXRlID0gU1NfVU5DT05ORUNURUQ7CiAJCWJyZWFrOwogCWNhc2UgU09DS19ER1JBTToKLQkJdGlwY19zZXRfcG9ydHVucmVsaWFibGUocmVmLCAxKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBTT0NLX1JETToKLQkJdGlwY19zZXRfcG9ydHVucmV0dXJuYWJsZShyZWYsIDEpOwotCQlzb2NrLT5vcHMgPSAmbXNnX29wczsKLQkJc29jay0+c3RhdGUgPSBTU19SRUFEWTsKKwkJb3BzID0gJm1zZ19vcHM7CisJCXN0YXRlID0gU1NfUkVBRFk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXRpcGNfZGVsZXRlcG9ydChyZWYpOwogCQlyZXR1cm4gLUVQUk9UT1RZUEU7CiAJfQogCisJLyogQWxsb2NhdGUgc29ja2V0J3MgcHJvdG9jb2wgYXJlYSAqLworCiAJc2sgPSBza19hbGxvYyhuZXQsIEFGX1RJUEMsIEdGUF9LRVJORUwsICZ0aXBjX3Byb3RvKTsKLQlpZiAoIXNrKSB7Ci0JCXRpcGNfZGVsZXRlcG9ydChyZWYpOworCWlmIChzayA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEFsbG9jYXRlIFRJUEMgcG9ydCBmb3Igc29ja2V0IHRvIHVzZSAqLworCisJcG9ydHJlZiA9IHRpcGNfY3JlYXRlcG9ydF9yYXcoc2ssICZkaXNwYXRjaCwgJndha2V1cGRpc3BhdGNoLAorCQkJCSAgICAgIFRJUENfTE9XX0lNUE9SVEFOQ0UpOworCWlmICh1bmxpa2VseShwb3J0cmVmID09IDApKSB7CisJCXNrX2ZyZWUoc2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwkvKiBGaW5pc2ggaW5pdGlhbGl6aW5nIHNvY2tldCBkYXRhIHN0cnVjdHVyZXMgKi8KKworCXNvY2stPm9wcyA9IG9wczsKKwlzb2NrLT5zdGF0ZSA9IHN0YXRlOworCiAJc29ja19pbml0X2RhdGEoc29jaywgc2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoc2stPnNrX3NsZWVwKTsKLQlzay0+c2tfcmN2dGltZW8gPSA4ICogSFo7ICAgLyogZGVmYXVsdCBjb25uZWN0IHRpbWVvdXQgPSA4cyAqLworCXNrLT5za19yY3Z0aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMoQ09OTl9USU1FT1VUX0RFRkFVTFQpOworCXNrLT5za19iYWNrbG9nX3JjdiA9IGJhY2tsb2dfcmN2OworCXRpcGNfc2soc2spLT5wID0gdGlwY19nZXRfcG9ydChwb3J0cmVmKTsKIAotCXRzb2NrID0gdGlwY19zayhzayk7Ci0JcG9ydCA9IHRpcGNfZ2V0X3BvcnQocmVmKTsKLQotCXRzb2NrLT5wID0gcG9ydDsKLQlwb3J0LT51c3JfaGFuZGxlID0gdHNvY2s7Ci0KLQlpbml0X01VVEVYKCZ0c29jay0+c2VtKTsKLQotCWRiZygic29ja19jcmVhdGU6ICV4XG4iLHRzb2NrKTsKKwlpZiAoc29jay0+c3RhdGUgPT0gU1NfUkVBRFkpIHsKKwkJdGlwY19zZXRfcG9ydHVucmV0dXJuYWJsZShwb3J0cmVmLCAxKTsKKwkJaWYgKHNvY2stPnR5cGUgPT0gU09DS19ER1JBTSkKKwkJCXRpcGNfc2V0X3BvcnR1bnJlbGlhYmxlKHBvcnRyZWYsIDEpOworCX0KIAogCWF0b21pY19pbmMoJnRpcGNfdXNlcl9jb3VudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ1LDUyICsyNzAsNjIgQEAKIAogc3RhdGljIGludCByZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7Ci0Jc3RydWN0IHRpcGNfc29jayAqdHNvY2sgPSB0aXBjX3NrKHNvY2stPnNrKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlpbnQgcmVzID0gVElQQ19PSzsKKwlzdHJ1Y3QgdGlwY19wb3J0ICp0cG9ydDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOworCWludCByZXM7CiAKLQlkYmcoInNvY2tfZGVsZXRlOiAleFxuIix0c29jayk7Ci0JaWYgKCF0c29jaykKLQkJcmV0dXJuIDA7Ci0JZG93bigmdHNvY2stPnNlbSk7Ci0JaWYgKCFzb2NrLT5zaykgewotCQl1cCgmdHNvY2stPnNlbSk7Ci0JCXJldHVybiAwOwotCX0KKwkvKgorCSAqIEV4aXQgaWYgc29ja2V0IGlzbid0IGZ1bGx5IGluaXRpYWxpemVkIChvY2N1cnMgd2hlbiBhIGZhaWxlZCBhY2NlcHQoKQorCSAqIHJlbGVhc2VzIGEgcHJlLWFsbG9jYXRlZCBjaGlsZCBzb2NrZXQgdGhhdCB3YXMgbmV2ZXIgdXNlZCkKKwkgKi8KIAotCS8qIFJlamVjdCB1bnJlY2VpdmVkIG1lc3NhZ2VzLCB1bmxlc3Mgbm8gbG9uZ2VyIGNvbm5lY3RlZCAqLworCWlmIChzayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXRwb3J0ID0gdGlwY19za19wb3J0KHNrKTsKKwlsb2NrX3NvY2soc2spOworCisJLyoKKwkgKiBSZWplY3QgYWxsIHVucmVjZWl2ZWQgbWVzc2FnZXMsIGV4Y2VwdCBvbiBhbiBhY3RpdmUgY29ubmVjdGlvbgorCSAqICh3aGljaCBkaXNjb25uZWN0cyBsb2NhbGx5ICYgc2VuZHMgYSAnRklOKycgdG8gcGVlcikKKwkgKi8KIAogCXdoaWxlIChzb2NrLT5zdGF0ZSAhPSBTU19ESVNDT05ORUNUSU5HKSB7Ci0JCXNvY2tfbG9jayh0c29jayk7Ci0JCWJ1ZiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JCWlmICghYnVmKQotCQkJdHNvY2stPnAtPnVzcl9oYW5kbGUgPSBOVUxMOwotCQlzb2NrX3VubG9jayh0c29jayk7Ci0JCWlmICghYnVmKQorCQlidWYgPSBfX3NrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJCWlmIChidWYgPT0gTlVMTCkKIAkJCWJyZWFrOworCQlhdG9taWNfZGVjKCZ0aXBjX3F1ZXVlX3NpemUpOwogCQlpZiAoVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlICE9IG1zZ19kYXRhKGJ1Zl9tc2coYnVmKSkpCiAJCQlidWZfZGlzY2FyZChidWYpOwotCQllbHNlCisJCWVsc2UgeworCQkJaWYgKChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNUSU5HKSB8fAorCQkJICAgIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpKSB7CisJCQkJc29jay0+c3RhdGUgPSBTU19ESVNDT05ORUNUSU5HOworCQkJCXRpcGNfZGlzY29ubmVjdCh0cG9ydC0+cmVmKTsKKwkJCX0KIAkJCXRpcGNfcmVqZWN0X21zZyhidWYsIFRJUENfRVJSX05PX1BPUlQpOwotCQlhdG9taWNfZGVjKCZ0aXBjX3F1ZXVlX3NpemUpOworCQl9CiAJfQogCi0JLyogRGVsZXRlIFRJUEMgcG9ydCAqLworCS8qCisJICogRGVsZXRlIFRJUEMgcG9ydDsgdGhpcyBlbnN1cmVzIG5vIG1vcmUgbWVzc2FnZXMgYXJlIHF1ZXVlZAorCSAqIChhbHNvIGRpc2Nvbm5lY3RzIGFuIGFjdGl2ZSBjb25uZWN0aW9uICYgc2VuZHMgYSAnRklOLScgdG8gcGVlcikKKwkgKi8KIAotCXJlcyA9IHRpcGNfZGVsZXRlcG9ydCh0c29jay0+cC0+cmVmKTsKLQlzb2NrLT5zayA9IE5VTEw7CisJcmVzID0gdGlwY19kZWxldGVwb3J0KHRwb3J0LT5yZWYpOwogCi0JLyogRGlzY2FyZCBhbnkgcmVtYWluaW5nIG1lc3NhZ2VzICovCisJLyogRGlzY2FyZCBhbnkgcmVtYWluaW5nIChjb25uZWN0aW9uLWJhc2VkKSBtZXNzYWdlcyBpbiByZWNlaXZlIHF1ZXVlICovCiAKLQl3aGlsZSAoKGJ1ZiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSB7Ci0JCWJ1Zl9kaXNjYXJkKGJ1Zik7Ci0JCWF0b21pY19kZWMoJnRpcGNfcXVldWVfc2l6ZSk7Ci0JfQorCWRpc2NhcmRfcnhfcXVldWUoc2spOwogCi0JdXAoJnRzb2NrLT5zZW0pOworCS8qIFJlamVjdCBhbnkgbWVzc2FnZXMgdGhhdCBhY2N1bXVsYXRlZCBpbiBiYWNrbG9nIHF1ZXVlICovCisKKwlzb2NrLT5zdGF0ZSA9IFNTX0RJU0NPTk5FQ1RJTkc7CisJcmVsZWFzZV9zb2NrKHNrKTsKIAogCXNvY2tfcHV0KHNrKTsKKwlzb2NrLT5zayA9IE5VTEw7CiAKIAlhdG9taWNfZGVjKCZ0aXBjX3VzZXJfY291bnQpOwogCXJldHVybiByZXM7CkBAIC0zMDcsNDcgKzM0MiwzMiBAQAogICogKGkuZS4gYSBzb2NrZXQgYWRkcmVzcyBsZW5ndGggb2YgMCkgdW5iaW5kcyBhbGwgbmFtZXMgZnJvbSB0aGUgc29ja2V0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UKKyAqCisgKiBOT1RFOiBUaGlzIHJvdXRpbmUgZG9lc24ndCBuZWVkIHRvIHRha2UgdGhlIHNvY2tldCBsb2NrIHNpbmNlIGl0IGRvZXNuJ3QKKyAqICAgICAgIGFjY2VzcyBhbnkgbm9uLWNvbnN0YW50IHNvY2tldCBpbmZvcm1hdGlvbi4KICAqLwogCiBzdGF0aWMgaW50IGJpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IHVhZGRyX2xlbikKIHsKLQlzdHJ1Y3QgdGlwY19zb2NrICp0c29jayA9IHRpcGNfc2soc29jay0+c2spOwogCXN0cnVjdCBzb2NrYWRkcl90aXBjICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl90aXBjICopdWFkZHI7Ci0JaW50IHJlczsKKwl1MzIgcG9ydHJlZiA9IHRpcGNfc2tfcG9ydChzb2NrLT5zayktPnJlZjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnRzb2NrLT5zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmICh1bmxpa2VseSghdWFkZHJfbGVuKSkKKwkJcmV0dXJuIHRpcGNfd2l0aGRyYXcocG9ydHJlZiwgMCwgTlVMTCk7CiAKLQlpZiAodW5saWtlbHkoIXVhZGRyX2xlbikpIHsKLQkJcmVzID0gdGlwY193aXRoZHJhdyh0c29jay0+cC0+cmVmLCAwLCBOVUxMKTsKLQkJZ290byBleGl0OwotCX0KKwlpZiAodWFkZHJfbGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl90aXBjKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGFkZHItPmZhbWlseSAhPSBBRl9USVBDKQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAotCWlmICh1YWRkcl9sZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3RpcGMpKSB7Ci0JCXJlcyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoYWRkci0+ZmFtaWx5ICE9IEFGX1RJUEMpIHsKLQkJcmVzID0gLUVBRk5PU1VQUE9SVDsKLQkJZ290byBleGl0OwotCX0KIAlpZiAoYWRkci0+YWRkcnR5cGUgPT0gVElQQ19BRERSX05BTUUpCiAJCWFkZHItPmFkZHIubmFtZXNlcS51cHBlciA9IGFkZHItPmFkZHIubmFtZXNlcS5sb3dlcjsKLQllbHNlIGlmIChhZGRyLT5hZGRydHlwZSAhPSBUSVBDX0FERFJfTkFNRVNFUSkgewotCQlyZXMgPSAtRUFGTk9TVVBQT1JUOwotCQlnb3RvIGV4aXQ7Ci0JfQorCWVsc2UgaWYgKGFkZHItPmFkZHJ0eXBlICE9IFRJUENfQUREUl9OQU1FU0VRKQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAotCWlmIChhZGRyLT5zY29wZSA+IDApCi0JCXJlcyA9IHRpcGNfcHVibGlzaCh0c29jay0+cC0+cmVmLCBhZGRyLT5zY29wZSwKLQkJCQkgICAmYWRkci0+YWRkci5uYW1lc2VxKTsKLQllbHNlCi0JCXJlcyA9IHRpcGNfd2l0aGRyYXcodHNvY2stPnAtPnJlZiwgLWFkZHItPnNjb3BlLAotCQkJCSAgICAmYWRkci0+YWRkci5uYW1lc2VxKTsKLWV4aXQ6Ci0JdXAoJnRzb2NrLT5zZW0pOwotCXJldHVybiByZXM7CisJcmV0dXJuIChhZGRyLT5zY29wZSA+IDApID8KKwkJdGlwY19wdWJsaXNoKHBvcnRyZWYsIGFkZHItPnNjb3BlLCAmYWRkci0+YWRkci5uYW1lc2VxKSA6CisJCXRpcGNfd2l0aGRyYXcocG9ydHJlZiwgLWFkZHItPnNjb3BlLCAmYWRkci0+YWRkci5uYW1lc2VxKTsKIH0KIAogLyoqCkBAIC0zNTgsMzAgKzM3OCwzMyBAQAogICogQHBlZXI6IDAgdG8gb2J0YWluIHNvY2tldCBuYW1lLCAxIHRvIG9idGFpbiBwZWVyIHNvY2tldCBuYW1lCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZQorICoKKyAqIE5PVEU6IFRoaXMgcm91dGluZSBkb2Vzbid0IG5lZWQgdG8gdGFrZSB0aGUgc29ja2V0IGxvY2sgc2luY2UgaXQgZG9lc24ndAorICogICAgICAgYWNjZXNzIGFueSBub24tY29uc3RhbnQgc29ja2V0IGluZm9ybWF0aW9uLgogICovCiAKIHN0YXRpYyBpbnQgZ2V0X25hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKIAkJICAgIGludCAqdWFkZHJfbGVuLCBpbnQgcGVlcikKIHsKLQlzdHJ1Y3QgdGlwY19zb2NrICp0c29jayA9IHRpcGNfc2soc29jay0+c2spOwogCXN0cnVjdCBzb2NrYWRkcl90aXBjICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl90aXBjICopdWFkZHI7CisJdTMyIHBvcnRyZWYgPSB0aXBjX3NrX3BvcnQoc29jay0+c2spLT5yZWY7CiAJdTMyIHJlczsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnRzb2NrLT5zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChwZWVyKSB7CisJCXJlcyA9IHRpcGNfcGVlcihwb3J0cmVmLCAmYWRkci0+YWRkci5pZCk7CisJCWlmIChyZXMpCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSB7CisJCXRpcGNfb3duaWRlbnRpdHkocG9ydHJlZiwgJmFkZHItPmFkZHIuaWQpOworCX0KIAogCSp1YWRkcl9sZW4gPSBzaXplb2YoKmFkZHIpOwogCWFkZHItPmFkZHJ0eXBlID0gVElQQ19BRERSX0lEOwogCWFkZHItPmZhbWlseSA9IEFGX1RJUEM7CiAJYWRkci0+c2NvcGUgPSAwOwotCWlmIChwZWVyKQotCQlyZXMgPSB0aXBjX3BlZXIodHNvY2stPnAtPnJlZiwgJmFkZHItPmFkZHIuaWQpOwotCWVsc2UKLQkJcmVzID0gdGlwY19vd25pZGVudGl0eSh0c29jay0+cC0+cmVmLCAmYWRkci0+YWRkci5pZCk7CiAJYWRkci0+YWRkci5uYW1lLmRvbWFpbiA9IDA7CiAKLQl1cCgmdHNvY2stPnNlbSk7Ci0JcmV0dXJuIHJlczsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0zOTAsMTUgKzQxMyw0NyBAQAogICogQHNvY2s6IHNvY2tldCBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBwb2xsIGJpdHMKICAqIEB3YWl0OiA/Pz8KICAqCi0gKiBSZXR1cm5zIHRoZSBwb2xsbWFzaworICogUmV0dXJucyBwb2xsbWFzayB2YWx1ZQorICoKKyAqIENPTU1FTlRBUlk6CisgKiBJdCBhcHBlYXJzIHRoYXQgdGhlIHVzdWFsIHNvY2tldCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIG5vdCB1c2VmdWwgaGVyZQorICogc2luY2UgdGhlIHBvbGxtYXNrIGluZm8gaXMgcG90ZW50aWFsbHkgb3V0LW9mLWRhdGUgdGhlIG1vbWVudCB0aGlzIHJvdXRpbmUKKyAqIGV4aXRzLiAgVENQIGFuZCBvdGhlciBwcm90b2NvbHMgc2VlbSB0byByZWx5IG9uIGhpZ2hlciBsZXZlbCBwb2xsIHJvdXRpbmVzCisgKiB0byBoYW5kbGUgYW55IHByZXZlbnRhYmxlIHJhY2UgY29uZGl0aW9ucywgc28gVElQQyB3aWxsIGRvIHRoZSBzYW1lIC4uLgorICoKKyAqIFRJUEMgc2V0cyB0aGUgcmV0dXJuZWQgZXZlbnRzIGFzIGZvbGxvd3M6CisgKiBhKSBQT0xMUkROT1JNIGFuZCBQT0xMSU4gYXJlIHNldCBpZiB0aGUgc29ja2V0J3MgcmVjZWl2ZSBxdWV1ZSBpcyBub24tZW1wdHkKKyAqICAgIG9yIGlmIGEgY29ubmVjdGlvbi1vcmllbnRlZCBzb2NrZXQgaXMgZG9lcyBub3QgaGF2ZSBhbiBhY3RpdmUgY29ubmVjdGlvbgorICogICAgKGkuZS4gYSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBibG9jaykuCisgKiBiKSBQT0xMT1VUIGlzIHNldCBleGNlcHQgd2hlbiBhIHNvY2tldCdzIGNvbm5lY3Rpb24gaGFzIGJlZW4gdGVybWluYXRlZAorICogICAgKGkuZS4gYSB3cml0ZSBvcGVyYXRpb24gd2lsbCBub3QgYmxvY2spLgorICogYykgUE9MTEhVUCBpcyBzZXQgd2hlbiBhIHNvY2tldCdzIGNvbm5lY3Rpb24gaGFzIGJlZW4gdGVybWluYXRlZC4KKyAqCisgKiBJTVBPUlRBTlQ6IFRoZSBmYWN0IHRoYXQgYSByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbiB3aWxsIG5vdCBibG9jayBkb2VzIE5PVAorICogaW1wbHkgdGhhdCB0aGUgb3BlcmF0aW9uIHdpbGwgc3VjY2VlZCEKICAqLwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQlwb2xsX3dhaXQoZmlsZSwgc29jay0+c2stPnNrX3NsZWVwLCB3YWl0KTsKLQkvKiBORUVEIExPQ0sgSEVSRT8gKi8KLQlyZXR1cm4gcG9sbG1hc2soc29jayk7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJdTMyIG1hc2s7CisKKwlwb2xsX3dhaXQoZmlsZSwgc2stPnNrX3NsZWVwLCB3YWl0KTsKKworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkgfHwKKwkgICAgKHNvY2stPnN0YXRlID09IFNTX1VOQ09OTkVDVEVEKSB8fAorCSAgICAoc29jay0+c3RhdGUgPT0gU1NfRElTQ09OTkVDVElORykpCisJCW1hc2sgPSAoUE9MTFJETk9STSB8IFBPTExJTik7CisJZWxzZQorCQltYXNrID0gMDsKKworCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19ESVNDT05ORUNUSU5HKQorCQltYXNrIHw9IFBPTExIVVA7CisJZWxzZQorCQltYXNrIHw9IFBPTExPVVQ7CisKKwlyZXR1cm4gbWFzazsKIH0KIAogLyoqCkBAIC00MjAsNyArNDc1LDYgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKGxpa2VseShkZXN0LT5hZGRyLm5hbWUubmFtZS50eXBlID09IFRJUENfVE9QX1NSVikpCiAJCXJldHVybiAwOwotCiAJaWYgKGxpa2VseShkZXN0LT5hZGRyLm5hbWUubmFtZS50eXBlICE9IFRJUENfQ0ZHX1NSVikpCiAJCXJldHVybiAtRUFDQ0VTOwogCkBAIC00MzQsNyArNDg4LDcgQEAKIAogLyoqCiAgKiBzZW5kX21zZyAtIHNlbmQgbWVzc2FnZSBpbiBjb25uZWN0aW9ubGVzcyBtYW5uZXIKLSAqIEBpb2NiOiAodW51c2VkKQorICogQGlvY2I6IGlmIE5VTEwsIGluZGljYXRlcyB0aGF0IHNvY2tldCBsb2NrIGlzIGFscmVhZHkgaGVsZAogICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmUKICAqIEBtOiBtZXNzYWdlIHRvIHNlbmQKICAqIEB0b3RhbF9sZW46IGxlbmd0aCBvZiBtZXNzYWdlCkBAIC00NTAsOSArNTA0LDkgQEAKIHN0YXRpYyBpbnQgc2VuZF9tc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkgICAgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbikKIHsKLQlzdHJ1Y3QgdGlwY19zb2NrICp0c29jayA9IHRpcGNfc2soc29jay0+c2spOworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0ID0gdGlwY19za19wb3J0KHNrKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqZGVzdCA9IChzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqKW0tPm1zZ19uYW1lOwotCXN0cnVjdCBza19idWZmICpidWY7CiAJaW50IG5lZWRzX2Nvbm47CiAJaW50IHJlcyA9IC1FSU5WQUw7CiAKQEAgLTQ2Miw0OCArNTE2LDQ2IEBACiAJCSAgICAgKGRlc3QtPmZhbWlseSAhPSBBRl9USVBDKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGlvY2IpCisJCWxvY2tfc29jayhzayk7CisKIAluZWVkc19jb25uID0gKHNvY2stPnN0YXRlICE9IFNTX1JFQURZKTsKIAlpZiAodW5saWtlbHkobmVlZHNfY29ubikpIHsKLQkJaWYgKHNvY2stPnN0YXRlID09IFNTX0xJU1RFTklORykKLQkJCXJldHVybiAtRVBJUEU7Ci0JCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKLQkJCXJldHVybiAtRUlTQ09OTjsKLQkJaWYgKCh0c29jay0+cC0+cHVibGlzaGVkKSB8fAotCQkgICAgKChzb2NrLT50eXBlID09IFNPQ0tfU1RSRUFNKSAmJiAodG90YWxfbGVuICE9IDApKSkKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9OQU1FKSB7Ci0JCQl0c29jay0+cC0+Y29ubl90eXBlID0gZGVzdC0+YWRkci5uYW1lLm5hbWUudHlwZTsKLQkJCXRzb2NrLT5wLT5jb25uX2luc3RhbmNlID0gZGVzdC0+YWRkci5uYW1lLm5hbWUuaW5zdGFuY2U7CisJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19MSVNURU5JTkcpIHsKKwkJCXJlcyA9IC1FUElQRTsKKwkJCWdvdG8gZXhpdDsKIAkJfQotCX0KLQotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnRzb2NrLT5zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JaWYgKG5lZWRzX2Nvbm4pIHsKKwkJaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKSB7CisJCQlyZXMgPSAtRUlTQ09OTjsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlpZiAoKHRwb3J0LT5wdWJsaXNoZWQpIHx8CisJCSAgICAoKHNvY2stPnR5cGUgPT0gU09DS19TVFJFQU0pICYmICh0b3RhbF9sZW4gIT0gMCkpKSB7CisJCQlyZXMgPSAtRU9QTk9UU1VQUDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlpZiAoZGVzdC0+YWRkcnR5cGUgPT0gVElQQ19BRERSX05BTUUpIHsKKwkJCXRwb3J0LT5jb25uX3R5cGUgPSBkZXN0LT5hZGRyLm5hbWUubmFtZS50eXBlOworCQkJdHBvcnQtPmNvbm5faW5zdGFuY2UgPSBkZXN0LT5hZGRyLm5hbWUubmFtZS5pbnN0YW5jZTsKKwkJfQogCiAJCS8qIEFib3J0IGFueSBwZW5kaW5nIGNvbm5lY3Rpb24gYXR0ZW1wdHMgKHZlcnkgdW5saWtlbHkpICovCiAKLQkJd2hpbGUgKChidWYgPSBza2JfZGVxdWV1ZSgmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpKSkgewotCQkJdGlwY19yZWplY3RfbXNnKGJ1ZiwgVElQQ19FUlJfTk9fUE9SVCk7Ci0JCQlhdG9taWNfZGVjKCZ0aXBjX3F1ZXVlX3NpemUpOwotCQl9Ci0KLQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNUSU5HOworCQlyZWplY3RfcnhfcXVldWUoc2spOwogCX0KIAogCWRvIHsKIAkJaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9OQU1FKSB7CiAJCQlpZiAoKHJlcyA9IGRlc3RfbmFtZV9jaGVjayhkZXN0LCBtKSkpCi0JCQkJZ290byBleGl0OwotCQkJcmVzID0gdGlwY19zZW5kMm5hbWUodHNvY2stPnAtPnJlZiwKKwkJCQlicmVhazsKKwkJCXJlcyA9IHRpcGNfc2VuZDJuYW1lKHRwb3J0LT5yZWYsCiAJCQkJCSAgICAgJmRlc3QtPmFkZHIubmFtZS5uYW1lLAogCQkJCQkgICAgIGRlc3QtPmFkZHIubmFtZS5kb21haW4sCiAJCQkJCSAgICAgbS0+bXNnX2lvdmxlbiwKIAkJCQkJICAgICBtLT5tc2dfaW92KTsKIAkJfQogCQllbHNlIGlmIChkZXN0LT5hZGRydHlwZSA9PSBUSVBDX0FERFJfSUQpIHsKLQkJCXJlcyA9IHRpcGNfc2VuZDJwb3J0KHRzb2NrLT5wLT5yZWYsCisJCQlyZXMgPSB0aXBjX3NlbmQycG9ydCh0cG9ydC0+cmVmLAogCQkJCQkgICAgICZkZXN0LT5hZGRyLmlkLAogCQkJCQkgICAgIG0tPm1zZ19pb3ZsZW4sCiAJCQkJCSAgICAgbS0+bXNnX2lvdik7CkBAIC01MTEsMzYgKzU2Myw0MyBAQAogCQllbHNlIGlmIChkZXN0LT5hZGRydHlwZSA9PSBUSVBDX0FERFJfTUNBU1QpIHsKIAkJCWlmIChuZWVkc19jb25uKSB7CiAJCQkJcmVzID0gLUVPUE5PVFNVUFA7Ci0JCQkJZ290byBleGl0OworCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKChyZXMgPSBkZXN0X25hbWVfY2hlY2soZGVzdCwgbSkpKQotCQkJCWdvdG8gZXhpdDsKLQkJCXJlcyA9IHRpcGNfbXVsdGljYXN0KHRzb2NrLT5wLT5yZWYsCisJCQkJYnJlYWs7CisJCQlyZXMgPSB0aXBjX211bHRpY2FzdCh0cG9ydC0+cmVmLAogCQkJCQkgICAgICZkZXN0LT5hZGRyLm5hbWVzZXEsCiAJCQkJCSAgICAgMCwKIAkJCQkJICAgICBtLT5tc2dfaW92bGVuLAogCQkJCQkgICAgIG0tPm1zZ19pb3YpOwogCQl9CiAJCWlmIChsaWtlbHkocmVzICE9IC1FTElOS0NPTkcpKSB7Ci1leGl0OgotCQkJdXAoJnRzb2NrLT5zZW0pOwotCQkJcmV0dXJuIHJlczsKKwkJCWlmIChuZWVkc19jb25uICYmIChyZXMgPj0gMCkpIHsKKwkJCQlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RJTkc7CisJCQl9CisJCQlicmVhazsKIAkJfQogCQlpZiAobS0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUKSB7CiAJCQlyZXMgPSAtRVdPVUxEQkxPQ0s7Ci0JCQlnb3RvIGV4aXQ7CisJCQlicmVhazsKIAkJfQotCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpzb2NrLT5zay0+c2tfc2xlZXAsCi0JCQkJCSAgICAgIXRzb2NrLT5wLT5jb25nZXN0ZWQpKSB7Ci0JCSAgICByZXMgPSAtRVJFU1RBUlRTWVM7Ci0JCSAgICBnb3RvIGV4aXQ7Ci0JCX0KKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJcmVzID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpzay0+c2tfc2xlZXAsCisJCQkJCSAgICAgICAhdHBvcnQtPmNvbmdlc3RlZCk7CisJCWxvY2tfc29jayhzayk7CisJCWlmIChyZXMpCisJCQlicmVhazsKIAl9IHdoaWxlICgxKTsKKworZXhpdDoKKwlpZiAoaW9jYikKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gcmVzOwogfQogCiAvKioKICAqIHNlbmRfcGFja2V0IC0gc2VuZCBhIGNvbm5lY3Rpb24tb3JpZW50ZWQgbWVzc2FnZQotICogQGlvY2I6ICh1bnVzZWQpCisgKiBAaW9jYjogaWYgTlVMTCwgaW5kaWNhdGVzIHRoYXQgc29ja2V0IGxvY2sgaXMgYWxyZWFkeSBoZWxkCiAgKiBAc29jazogc29ja2V0IHN0cnVjdHVyZQogICogQG06IG1lc3NhZ2UgdG8gc2VuZAogICogQHRvdGFsX2xlbjogbGVuZ3RoIG9mIG1lc3NhZ2UKQEAgLTU1Myw3ICs2MTIsOCBAQAogc3RhdGljIGludCBzZW5kX3BhY2tldChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKQogewotCXN0cnVjdCB0aXBjX3NvY2sgKnRzb2NrID0gdGlwY19zayhzb2NrLT5zayk7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHRpcGNfcG9ydCAqdHBvcnQgPSB0aXBjX3NrX3BvcnQoc2spOwogCXN0cnVjdCBzb2NrYWRkcl90aXBjICpkZXN0ID0gKHN0cnVjdCBzb2NrYWRkcl90aXBjICopbS0+bXNnX25hbWU7CiAJaW50IHJlczsKIApAQCAtNTYyLDkgKzYyMiw4IEBACiAJaWYgKHVubGlrZWx5KGRlc3QpKQogCQlyZXR1cm4gc2VuZF9tc2coaW9jYiwgc29jaywgbSwgdG90YWxfbGVuKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnRzb2NrLT5zZW0pKSB7Ci0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQorCWlmIChpb2NiKQorCQlsb2NrX3NvY2soc2spOwogCiAJZG8gewogCQlpZiAodW5saWtlbHkoc29jay0+c3RhdGUgIT0gU1NfQ09OTkVDVEVEKSkgewpAQCAtNTcyLDI1ICs2MzEsMjggQEAKIAkJCQlyZXMgPSAtRVBJUEU7CiAJCQllbHNlCiAJCQkJcmVzID0gLUVOT1RDT05OOwotCQkJZ290byBleGl0OworCQkJYnJlYWs7CiAJCX0KIAotCQlyZXMgPSB0aXBjX3NlbmQodHNvY2stPnAtPnJlZiwgbS0+bXNnX2lvdmxlbiwgbS0+bXNnX2lvdik7CisJCXJlcyA9IHRpcGNfc2VuZCh0cG9ydC0+cmVmLCBtLT5tc2dfaW92bGVuLCBtLT5tc2dfaW92KTsKIAkJaWYgKGxpa2VseShyZXMgIT0gLUVMSU5LQ09ORykpIHsKLWV4aXQ6Ci0JCQl1cCgmdHNvY2stPnNlbSk7Ci0JCQlyZXR1cm4gcmVzOworCQkJYnJlYWs7CiAJCX0KIAkJaWYgKG0tPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCkgewogCQkJcmVzID0gLUVXT1VMREJMT0NLOwotCQkJZ290byBleGl0OworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgqc29jay0+c2stPnNrX3NsZWVwLAotCQkJCQkgICAgICF0c29jay0+cC0+Y29uZ2VzdGVkKSkgewotCQkgICAgcmVzID0gLUVSRVNUQVJUU1lTOwotCQkgICAgZ290byBleGl0OwotCQl9CisJCXJlbGVhc2Vfc29jayhzayk7CisJCXJlcyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgqc2stPnNrX3NsZWVwLAorCQkJKCF0cG9ydC0+Y29uZ2VzdGVkIHx8ICF0cG9ydC0+Y29ubmVjdGVkKSk7CisJCWxvY2tfc29jayhzayk7CisJCWlmIChyZXMpCisJCQlicmVhazsKIAl9IHdoaWxlICgxKTsKKworCWlmIChpb2NiKQorCQlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiByZXM7CiB9CiAKIC8qKgpAQCAtNjA2LDExICs2NjgsMTEgQEAKICAqIG9yIGVycm5vIGlmIG5vIGRhdGEgc2VudAogICovCiAKLQogc3RhdGljIGludCBzZW5kX3N0cmVhbShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKQogewotCXN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0OworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0ID0gdGlwY19za19wb3J0KHNrKTsKIAlzdHJ1Y3QgbXNnaGRyIG15X21zZzsKIAlzdHJ1Y3QgaW92ZWMgbXlfaW92OwogCXN0cnVjdCBpb3ZlYyAqY3Vycl9pb3Y7CkBAIC02MjIsMTkgKzY4NCwyNyBAQAogCWludCBieXRlc19zZW50OwogCWludCByZXM7CiAKKwlsb2NrX3NvY2soc2spOworCiAJLyogSGFuZGxlIHNwZWNpYWwgY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gY29ubmVjdGlvbiAqLwogCiAJaWYgKHVubGlrZWx5KHNvY2stPnN0YXRlICE9IFNTX0NPTk5FQ1RFRCkpIHsKLQkJaWYgKHNvY2stPnN0YXRlID09IFNTX1VOQ09OTkVDVEVEKQotCQkJcmV0dXJuIHNlbmRfcGFja2V0KGlvY2IsIHNvY2ssIG0sIHRvdGFsX2xlbik7Ci0JCWVsc2UgaWYgKHNvY2stPnN0YXRlID09IFNTX0RJU0NPTk5FQ1RJTkcpCi0JCQlyZXR1cm4gLUVQSVBFOwotCQllbHNlCi0JCQlyZXR1cm4gLUVOT1RDT05OOworCQlpZiAoc29jay0+c3RhdGUgPT0gU1NfVU5DT05ORUNURUQpIHsKKwkJCXJlcyA9IHNlbmRfcGFja2V0KE5VTEwsIHNvY2ssIG0sIHRvdGFsX2xlbik7CisJCQlnb3RvIGV4aXQ7CisJCX0gZWxzZSBpZiAoc29jay0+c3RhdGUgPT0gU1NfRElTQ09OTkVDVElORykgeworCQkJcmVzID0gLUVQSVBFOworCQkJZ290byBleGl0OworCQl9IGVsc2UgeworCQkJcmVzID0gLUVOT1RDT05OOworCQkJZ290byBleGl0OworCQl9CiAJfQogCi0JaWYgKHVubGlrZWx5KG0tPm1zZ19uYW1lKSkKLQkJcmV0dXJuIC1FSVNDT05OOworCWlmICh1bmxpa2VseShtLT5tc2dfbmFtZSkpIHsKKwkJcmVzID0gLUVJU0NPTk47CisJCWdvdG8gZXhpdDsKKwl9CiAKIAkvKgogCSAqIFNlbmQgZWFjaCBpb3ZlYyBlbnRyeSB1c2luZyBvbmUgb3IgbW9yZSBtZXNzYWdlcwpAQCAtNjUyLDcgKzcyMiw2IEBACiAJbXlfbXNnLm1zZ19uYW1lID0gTlVMTDsKIAlieXRlc19zZW50ID0gMDsKIAotCXRwb3J0ID0gdGlwY19zayhzb2NrLT5zayktPnA7CiAJaGRyX3NpemUgPSBtc2dfaGRyX3N6KCZ0cG9ydC0+cGhkcik7CiAKIAl3aGlsZSAoY3Vycl9pb3ZsZW4tLSkgewpAQCAtNjY3LDEwICs3MzYsMTAgQEAKIAkJCQlieXRlc190b19zZW5kID0gY3Vycl9sZWZ0OwogCQkJbXlfaW92Lmlvdl9iYXNlID0gY3Vycl9zdGFydDsKIAkJCW15X2lvdi5pb3ZfbGVuID0gYnl0ZXNfdG9fc2VuZDsKLQkJCWlmICgocmVzID0gc2VuZF9wYWNrZXQoaW9jYiwgc29jaywgJm15X21zZywgMCkpIDwgMCkgewotCQkJCWlmIChieXRlc19zZW50ICE9IDApCisJCQlpZiAoKHJlcyA9IHNlbmRfcGFja2V0KE5VTEwsIHNvY2ssICZteV9tc2csIDApKSA8IDApIHsKKwkJCQlpZiAoYnl0ZXNfc2VudCkKIAkJCQkJcmVzID0gYnl0ZXNfc2VudDsKLQkJCQlyZXR1cm4gcmVzOworCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAkJCWN1cnJfbGVmdCAtPSBieXRlc190b19zZW5kOwogCQkJY3Vycl9zdGFydCArPSBieXRlc190b19zZW5kOwpAQCAtNjc5LDIyICs3NDgsMjMgQEAKIAogCQljdXJyX2lvdisrOwogCX0KLQotCXJldHVybiBieXRlc19zZW50OworCXJlcyA9IGJ5dGVzX3NlbnQ7CitleGl0OgorCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIHJlczsKIH0KIAogLyoqCiAgKiBhdXRvX2Nvbm5lY3QgLSBjb21wbGV0ZSBjb25uZWN0aW9uIHNldHVwIHRvIGEgcmVtb3RlIHBvcnQKICAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlCi0gKiBAdHNvY2s6IFRJUEMtc3BlY2lmaWMgc29ja2V0IHN0cnVjdHVyZQogICogQG1zZzogcGVlcidzIHJlc3BvbnNlIG1lc3NhZ2UKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlCiAgKi8KIAotc3RhdGljIGludCBhdXRvX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHRpcGNfc29jayAqdHNvY2ssCi0JCQlzdHJ1Y3QgdGlwY19tc2cgKm1zZykKK3N0YXRpYyBpbnQgYXV0b19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCB0aXBjX21zZyAqbXNnKQogeworCXN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0ID0gdGlwY19za19wb3J0KHNvY2stPnNrKTsKIAlzdHJ1Y3QgdGlwY19wb3J0aWQgcGVlcjsKIAogCWlmIChtc2dfZXJyY29kZShtc2cpKSB7CkBAIC03MDQsOCArNzc0LDggQEAKIAogCXBlZXIucmVmID0gbXNnX29yaWdwb3J0KG1zZyk7CiAJcGVlci5ub2RlID0gbXNnX29yaWdub2RlKG1zZyk7Ci0JdGlwY19jb25uZWN0MnBvcnQodHNvY2stPnAtPnJlZiwgJnBlZXIpOwotCXRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKHRzb2NrLT5wLT5yZWYsIG1zZ19pbXBvcnRhbmNlKG1zZykpOworCXRpcGNfY29ubmVjdDJwb3J0KHRwb3J0LT5yZWYsICZwZWVyKTsKKwl0aXBjX3NldF9wb3J0aW1wb3J0YW5jZSh0cG9ydC0+cmVmLCBtc2dfaW1wb3J0YW5jZShtc2cpKTsKIAlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKIAlyZXR1cm4gMDsKIH0KQEAgLTgxOCw2MiArODg4LDU0IEBACiBzdGF0aWMgaW50IHJlY3ZfbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJICAgIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBidWZfbGVuLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHRpcGNfc29jayAqdHNvY2sgPSB0aXBjX3NrKHNvY2stPnNrKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgdGlwY19wb3J0ICp0cG9ydCA9IHRpcGNfc2tfcG9ydChzayk7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKLQl1bnNpZ25lZCBpbnQgcV9sZW47CiAJdW5zaWduZWQgaW50IHN6OwogCXUzMiBlcnI7CiAJaW50IHJlczsKIAotCS8qIEN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgcmVjZWl2aW5nIGludG8gbXVsdGlwbGUgaW92ZWMgZW50cmllcyAqLworCS8qIENhdGNoIGludmFsaWQgcmVjZWl2ZSByZXF1ZXN0cyAqLwogCiAJaWYgKG0tPm1zZ19pb3ZsZW4gIT0gMSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogQ2F0Y2ggaW52YWxpZCByZWNlaXZlIGF0dGVtcHRzICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsgICAvKiBEb24ndCBkbyBtdWx0aXBsZSBpb3ZlYyBlbnRyaWVzIHlldCAqLwogCiAJaWYgKHVubGlrZWx5KCFidWZfbGVuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc29jay0+dHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgewotCQlpZiAodW5saWtlbHkoc29jay0+c3RhdGUgPT0gU1NfVU5DT05ORUNURUQpKQotCQkJcmV0dXJuIC1FTk9UQ09OTjsKLQkJaWYgKHVubGlrZWx5KChzb2NrLT5zdGF0ZSA9PSBTU19ESVNDT05ORUNUSU5HKSAmJgotCQkJICAgICAoc2tiX3F1ZXVlX2xlbigmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpID09IDApKSkKLQkJCXJldHVybiAtRU5PVENPTk47Ci0JfQorCWxvY2tfc29jayhzayk7CiAKLQkvKiBMb29rIGZvciBhIG1lc3NhZ2UgaW4gcmVjZWl2ZSBxdWV1ZTsgd2FpdCBpZiBuZWNlc3NhcnkgKi8KLQotCWlmICh1bmxpa2VseShkb3duX2ludGVycnVwdGlibGUoJnRzb2NrLT5zZW0pKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotcmVzdGFydDoKLQlpZiAodW5saWtlbHkoKHNrYl9xdWV1ZV9sZW4oJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSA9PSAwKSAmJgotCQkgICAgIChmbGFncyAmIE1TR19ET05UV0FJVCkpKSB7Ci0JCXJlcyA9IC1FV09VTERCTE9DSzsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICgocmVzID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKAotCQkqc29jay0+c2stPnNrX3NsZWVwLAotCQkoKHFfbGVuID0gc2tiX3F1ZXVlX2xlbigmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpKSB8fAotCQkgKHNvY2stPnN0YXRlID09IFNTX0RJU0NPTk5FQ1RJTkcpKSkgKSkgewotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogQ2F0Y2ggYXR0ZW1wdCB0byByZWNlaXZlIG9uIGFuIGFscmVhZHkgdGVybWluYXRlZCBjb25uZWN0aW9uICovCi0JLyogW1RISVMgQ0hFQ0sgTUFZIE9WRVJMQVAgV0lUSCBBTiBFQVJMSUVSIENIRUNLXSAqLwotCi0JaWYgKCFxX2xlbikgeworCWlmICh1bmxpa2VseShzb2NrLT5zdGF0ZSA9PSBTU19VTkNPTk5FQ1RFRCkpIHsKIAkJcmVzID0gLUVOT1RDT05OOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyogR2V0IGFjY2VzcyB0byBmaXJzdCBtZXNzYWdlIGluIHJlY2VpdmUgcXVldWUgKi8KK3Jlc3RhcnQ6CiAKLQlidWYgPSBza2JfcGVlaygmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpOworCS8qIExvb2sgZm9yIGEgbWVzc2FnZSBpbiByZWNlaXZlIHF1ZXVlOyB3YWl0IGlmIG5lY2Vzc2FyeSAqLworCisJd2hpbGUgKHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSB7CisJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19ESVNDT05ORUNUSU5HKSB7CisJCQlyZXMgPSAtRU5PVENPTk47CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaWYgKGZsYWdzICYgTVNHX0RPTlRXQUlUKSB7CisJCQlyZXMgPSAtRVdPVUxEQkxPQ0s7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJcmVzID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpzay0+c2tfc2xlZXAsCisJCQkoIXNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpIHx8CisJCQkgKHNvY2stPnN0YXRlID09IFNTX0RJU0NPTk5FQ1RJTkcpKSk7CisJCWxvY2tfc29jayhzayk7CisJCWlmIChyZXMpCisJCQlnb3RvIGV4aXQ7CisJfQorCisJLyogTG9vayBhdCBmaXJzdCBtZXNzYWdlIGluIHJlY2VpdmUgcXVldWUgKi8KKworCWJ1ZiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJbXNnID0gYnVmX21zZyhidWYpOwogCXN6ID0gbXNnX2RhdGFfc3oobXNnKTsKIAllcnIgPSBtc2dfZXJyY29kZShtc2cpOwpAQCAtODgxLDE0ICs5NDMsMTUgQEAKIAkvKiBDb21wbGV0ZSBjb25uZWN0aW9uIHNldHVwIGZvciBhbiBpbXBsaWVkIGNvbm5lY3QgKi8KIAogCWlmICh1bmxpa2VseShzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNUSU5HKSkgewotCQlpZiAoKHJlcyA9IGF1dG9fY29ubmVjdChzb2NrLCB0c29jaywgbXNnKSkpCisJCXJlcyA9IGF1dG9fY29ubmVjdChzb2NrLCBtc2cpOworCQlpZiAocmVzKQogCQkJZ290byBleGl0OwogCX0KIAogCS8qIERpc2NhcmQgYW4gZW1wdHkgbm9uLWVycm9yZWQgbWVzc2FnZSAmIHRyeSBhZ2FpbiAqLwogCiAJaWYgKCghc3opICYmICghZXJyKSkgewotCQlhZHZhbmNlX3F1ZXVlKHRzb2NrKTsKKwkJYWR2YW5jZV9yeF9xdWV1ZShzayk7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTg5OCw3ICs5NjEsOCBAQAogCiAJLyogQ2FwdHVyZSBhbmNpbGxhcnkgZGF0YSAob3B0aW9uYWwpICovCiAKLQlpZiAoKHJlcyA9IGFuY19kYXRhX3JlY3YobSwgbXNnLCB0c29jay0+cCkpKQorCXJlcyA9IGFuY19kYXRhX3JlY3YobSwgbXNnLCB0cG9ydCk7CisJaWYgKHJlcykKIAkJZ290byBleGl0OwogCiAJLyogQ2FwdHVyZSBtZXNzYWdlIGRhdGEgKGlmIHZhbGlkKSAmIGNvbXB1dGUgcmV0dXJuIHZhbHVlIChhbHdheXMpICovCkBAIC05MjUsMTIgKzk4OSwxMyBAQAogCS8qIENvbnN1bWUgcmVjZWl2ZWQgbWVzc2FnZSAob3B0aW9uYWwpICovCiAKIAlpZiAobGlrZWx5KCEoZmxhZ3MgJiBNU0dfUEVFSykpKSB7Ci0JCWlmICh1bmxpa2VseSgrK3Rzb2NrLT5wLT5jb25uX3VuYWNrZWQgPj0gVElQQ19GTE9XX0NPTlRST0xfV0lOKSkKLQkJCXRpcGNfYWNrbm93bGVkZ2UodHNvY2stPnAtPnJlZiwgdHNvY2stPnAtPmNvbm5fdW5hY2tlZCk7Ci0JCWFkdmFuY2VfcXVldWUodHNvY2spOworCQlpZiAoKHNvY2stPnN0YXRlICE9IFNTX1JFQURZKSAmJgorCQkgICAgKCsrdHBvcnQtPmNvbm5fdW5hY2tlZCA+PSBUSVBDX0ZMT1dfQ09OVFJPTF9XSU4pKQorCQkJdGlwY19hY2tub3dsZWRnZSh0cG9ydC0+cmVmLCB0cG9ydC0+Y29ubl91bmFja2VkKTsKKwkJYWR2YW5jZV9yeF9xdWV1ZShzayk7CiAJfQogZXhpdDoKLQl1cCgmdHNvY2stPnNlbSk7CisJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC05NTAsMTAgKzEwMTUsMTAgQEAKIHN0YXRpYyBpbnQgcmVjdl9zdHJlYW0oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkgICAgICAgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGJ1Zl9sZW4sIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgdGlwY19zb2NrICp0c29jayA9IHRpcGNfc2soc29jay0+c2spOworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0ID0gdGlwY19za19wb3J0KHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnOwotCXVuc2lnbmVkIGludCBxX2xlbjsKIAl1bnNpZ25lZCBpbnQgc3o7CiAJaW50IHN6X3RvX2NvcHk7CiAJaW50IHN6X2NvcGllZCA9IDA7CkBAIC05NjEsNTQgKzEwMjYsNDkgQEAKIAljaGFyIF9fdXNlciAqY3JzID0gbS0+bXNnX2lvdi0+aW92X2Jhc2U7CiAJdW5zaWduZWQgY2hhciAqYnVmX2NyczsKIAl1MzIgZXJyOwotCWludCByZXM7Ci0KLQkvKiBDdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IHJlY2VpdmluZyBpbnRvIG11bHRpcGxlIGlvdmVjIGVudHJpZXMgKi8KLQotCWlmIChtLT5tc2dfaW92bGVuICE9IDEpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpbnQgcmVzID0gMDsKIAogCS8qIENhdGNoIGludmFsaWQgcmVjZWl2ZSBhdHRlbXB0cyAqLwogCisJaWYgKG0tPm1zZ19pb3ZsZW4gIT0gMSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOyAgIC8qIERvbid0IGRvIG11bHRpcGxlIGlvdmVjIGVudHJpZXMgeWV0ICovCisKIAlpZiAodW5saWtlbHkoIWJ1Zl9sZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh1bmxpa2VseShzb2NrLT5zdGF0ZSA9PSBTU19ESVNDT05ORUNUSU5HKSkgewotCQlpZiAoc2tiX3F1ZXVlX2xlbigmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpID09IDApCi0JCQlyZXR1cm4gLUVOT1RDT05OOwotCX0gZWxzZSBpZiAodW5saWtlbHkoc29jay0+c3RhdGUgIT0gU1NfQ09OTkVDVEVEKSkKLQkJcmV0dXJuIC1FTk9UQ09OTjsKKwlsb2NrX3NvY2soc2spOwogCi0JLyogTG9vayBmb3IgYSBtZXNzYWdlIGluIHJlY2VpdmUgcXVldWU7IHdhaXQgaWYgbmVjZXNzYXJ5ICovCi0KLQlpZiAodW5saWtlbHkoZG93bl9pbnRlcnJ1cHRpYmxlKCZ0c29jay0+c2VtKSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLXJlc3RhcnQ6Ci0JaWYgKHVubGlrZWx5KChza2JfcXVldWVfbGVuKCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkgPT0gMCkgJiYKLQkJICAgICAoZmxhZ3MgJiBNU0dfRE9OVFdBSVQpKSkgewotCQlyZXMgPSAtRVdPVUxEQkxPQ0s7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoKHJlcyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgKLQkJKnNvY2stPnNrLT5za19zbGVlcCwKLQkJKChxX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgfHwKLQkJIChzb2NrLT5zdGF0ZSA9PSBTU19ESVNDT05ORUNUSU5HKSkpICkpIHsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIENhdGNoIGF0dGVtcHQgdG8gcmVjZWl2ZSBvbiBhbiBhbHJlYWR5IHRlcm1pbmF0ZWQgY29ubmVjdGlvbiAqLwotCS8qIFtUSElTIENIRUNLIE1BWSBPVkVSTEFQIFdJVEggQU4gRUFSTElFUiBDSEVDS10gKi8KLQotCWlmICghcV9sZW4pIHsKKwlpZiAodW5saWtlbHkoKHNvY2stPnN0YXRlID09IFNTX1VOQ09OTkVDVEVEKSB8fAorCQkgICAgIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNUSU5HKSkpIHsKIAkJcmVzID0gLUVOT1RDT05OOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyogR2V0IGFjY2VzcyB0byBmaXJzdCBtZXNzYWdlIGluIHJlY2VpdmUgcXVldWUgKi8KK3Jlc3RhcnQ6CiAKLQlidWYgPSBza2JfcGVlaygmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpOworCS8qIExvb2sgZm9yIGEgbWVzc2FnZSBpbiByZWNlaXZlIHF1ZXVlOyB3YWl0IGlmIG5lY2Vzc2FyeSAqLworCisJd2hpbGUgKHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSB7CisJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19ESVNDT05ORUNUSU5HKSB7CisJCQlyZXMgPSAtRU5PVENPTk47CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaWYgKGZsYWdzICYgTVNHX0RPTlRXQUlUKSB7CisJCQlyZXMgPSAtRVdPVUxEQkxPQ0s7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJcmVzID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpzay0+c2tfc2xlZXAsCisJCQkoIXNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpIHx8CisJCQkgKHNvY2stPnN0YXRlID09IFNTX0RJU0NPTk5FQ1RJTkcpKSk7CisJCWxvY2tfc29jayhzayk7CisJCWlmIChyZXMpCisJCQlnb3RvIGV4aXQ7CisJfQorCisJLyogTG9vayBhdCBmaXJzdCBtZXNzYWdlIGluIHJlY2VpdmUgcXVldWUgKi8KKworCWJ1ZiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJbXNnID0gYnVmX21zZyhidWYpOwogCXN6ID0gbXNnX2RhdGFfc3oobXNnKTsKIAllcnIgPSBtc2dfZXJyY29kZShtc2cpOwpAQCAtMTAxNiw3ICsxMDc2LDcgQEAKIAkvKiBEaXNjYXJkIGFuIGVtcHR5IG5vbi1lcnJvcmVkIG1lc3NhZ2UgJiB0cnkgYWdhaW4gKi8KIAogCWlmICgoIXN6KSAmJiAoIWVycikpIHsKLQkJYWR2YW5jZV9xdWV1ZSh0c29jayk7CisJCWFkdmFuY2VfcnhfcXVldWUoc2spOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC0xMDI0LDcgKzEwODQsOCBAQAogCiAJaWYgKHN6X2NvcGllZCA9PSAwKSB7CiAJCXNldF9vcmlnX2FkZHIobSwgbXNnKTsKLQkJaWYgKChyZXMgPSBhbmNfZGF0YV9yZWN2KG0sIG1zZywgdHNvY2stPnApKSkKKwkJcmVzID0gYW5jX2RhdGFfcmVjdihtLCBtc2csIHRwb3J0KTsKKwkJaWYgKHJlcykKIAkJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTEwMzIsNyArMTA5Myw3IEBACiAKIAlpZiAoIWVycikgewogCQlidWZfY3JzID0gKHVuc2lnbmVkIGNoYXIgKikoVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlKTsKLQkJc3ogPSBza2JfdGFpbF9wb2ludGVyKGJ1ZikgLSBidWZfY3JzOworCQlzeiA9ICh1bnNpZ25lZCBjaGFyICopbXNnICsgbXNnX3NpemUobXNnKSAtIGJ1Zl9jcnM7CiAKIAkJbmVlZGVkID0gKGJ1Zl9sZW4gLSBzel9jb3BpZWQpOwogCQlzel90b19jb3B5ID0gKHN6IDw9IG5lZWRlZCkgPyBzeiA6IG5lZWRlZDsKQEAgLTEwNjIsMzUgKzExMjMsMzcgQEAKIAkvKiBDb25zdW1lIHJlY2VpdmVkIG1lc3NhZ2UgKG9wdGlvbmFsKSAqLwogCiAJaWYgKGxpa2VseSghKGZsYWdzICYgTVNHX1BFRUspKSkgewotCQlpZiAodW5saWtlbHkoKyt0c29jay0+cC0+Y29ubl91bmFja2VkID49IFRJUENfRkxPV19DT05UUk9MX1dJTikpCi0JCQl0aXBjX2Fja25vd2xlZGdlKHRzb2NrLT5wLT5yZWYsIHRzb2NrLT5wLT5jb25uX3VuYWNrZWQpOwotCQlhZHZhbmNlX3F1ZXVlKHRzb2NrKTsKKwkJaWYgKHVubGlrZWx5KCsrdHBvcnQtPmNvbm5fdW5hY2tlZCA+PSBUSVBDX0ZMT1dfQ09OVFJPTF9XSU4pKQorCQkJdGlwY19hY2tub3dsZWRnZSh0cG9ydC0+cmVmLCB0cG9ydC0+Y29ubl91bmFja2VkKTsKKwkJYWR2YW5jZV9yeF9xdWV1ZShzayk7CiAJfQogCiAJLyogTG9vcCBhcm91bmQgaWYgbW9yZSBkYXRhIGlzIHJlcXVpcmVkICovCiAKIAlpZiAoKHN6X2NvcGllZCA8IGJ1Zl9sZW4pICAgIC8qIGRpZG4ndCBnZXQgYWxsIHJlcXVlc3RlZCBkYXRhICovCi0JICAgICYmIChmbGFncyAmIE1TR19XQUlUQUxMKSAvKiAuLi4gYW5kIG5lZWQgdG8gd2FpdCBmb3IgbW9yZSAqLworCSAgICAmJiAoIXNrYl9xdWV1ZV9lbXB0eSgmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpIHx8CisJCShmbGFncyAmIE1TR19XQUlUQUxMKSkKKwkJCQkgICAgIC8qIC4uLiBhbmQgbW9yZSBpcyByZWFkeSBvciByZXF1aXJlZCAqLwogCSAgICAmJiAoIShmbGFncyAmIE1TR19QRUVLKSkgLyogLi4uIGFuZCBhcmVuJ3QganVzdCBwZWVraW5nIGF0IGRhdGEgKi8KIAkgICAgJiYgKCFlcnIpICAgICAgICAgICAgICAgIC8qIC4uLiBhbmQgaGF2ZW4ndCByZWFjaGVkIGEgRklOICovCiAJICAgICkKIAkJZ290byByZXN0YXJ0OwogCiBleGl0OgotCXVwKCZ0c29jay0+c2VtKTsKKwlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBzel9jb3BpZWQgPyBzel9jb3BpZWQgOiByZXM7CiB9CiAKIC8qKgotICogcXVldWVfb3ZlcmxvYWRlZCAtIHRlc3QgaWYgcXVldWUgb3ZlcmxvYWQgY29uZGl0aW9uIGV4aXN0cworICogcnhfcXVldWVfZnVsbCAtIGRldGVybWluZSBpZiByZWNlaXZlIHF1ZXVlIGNhbiBhY2NlcHQgYW5vdGhlciBtZXNzYWdlCisgKiBAbXNnOiBtZXNzYWdlIHRvIGJlIGFkZGVkIHRvIHF1ZXVlCiAgKiBAcXVldWVfc2l6ZTogY3VycmVudCBzaXplIG9mIHF1ZXVlCiAgKiBAYmFzZTogbm9taW5hbCBtYXhpbXVtIHNpemUgb2YgcXVldWUKLSAqIEBtc2c6IG1lc3NhZ2UgdG8gYmUgYWRkZWQgdG8gcXVldWUKICAqCi0gKiBSZXR1cm5zIDEgaWYgcXVldWUgaXMgY3VycmVudGx5IG92ZXJsb2FkZWQsIDAgb3RoZXJ3aXNlCisgKiBSZXR1cm5zIDEgaWYgcXVldWUgaXMgdW5hYmxlIHRvIGFjY2VwdCBtZXNzYWdlLCAwIG90aGVyd2lzZQogICovCiAKLXN0YXRpYyBpbnQgcXVldWVfb3ZlcmxvYWRlZCh1MzIgcXVldWVfc2l6ZSwgdTMyIGJhc2UsIHN0cnVjdCB0aXBjX21zZyAqbXNnKQorc3RhdGljIGludCByeF9xdWV1ZV9mdWxsKHN0cnVjdCB0aXBjX21zZyAqbXNnLCB1MzIgcXVldWVfc2l6ZSwgdTMyIGJhc2UpCiB7CiAJdTMyIHRocmVzaG9sZDsKIAl1MzIgaW1wID0gbXNnX2ltcG9ydGFuY2UobXNnKTsKQEAgLTExMDcsNDEgKzExNzAsMjggQEAKIAlpZiAobXNnX2Nvbm5lY3RlZChtc2cpKQogCQl0aHJlc2hvbGQgKj0gNDsKIAotCXJldHVybiAocXVldWVfc2l6ZSA+IHRocmVzaG9sZCk7CisJcmV0dXJuIChxdWV1ZV9zaXplID49IHRocmVzaG9sZCk7CiB9CiAKIC8qKgotICogYXN5bmNfZGlzY29ubmVjdCAtIHdyYXBwZXIgZnVuY3Rpb24gdXNlZCB0byBkaXNjb25uZWN0IHBvcnQKLSAqIEBwb3J0cmVmOiBUSVBDIHBvcnQgcmVmZXJlbmNlIChwYXNzZWQgYXMgcG9pbnRlci1zaXplZCB2YWx1ZSkKLSAqLwotCi1zdGF0aWMgdm9pZCBhc3luY19kaXNjb25uZWN0KHVuc2lnbmVkIGxvbmcgcG9ydHJlZikKLXsKLQl0aXBjX2Rpc2Nvbm5lY3QoKHUzMilwb3J0cmVmKTsKLX0KLQotLyoqCi0gKiBkaXNwYXRjaCAtIGhhbmRsZSBhcnJpdmluZyBtZXNzYWdlCi0gKiBAdHBvcnQ6IFRJUEMgcG9ydCB0aGF0IHJlY2VpdmVkIG1lc3NhZ2UKKyAqIGZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlCisgKiBAc2s6IHNvY2tldAogICogQGJ1ZjogbWVzc2FnZQogICoKLSAqIENhbGxlZCB3aXRoIHBvcnQgbG9ja2VkLiAgTXVzdCBub3QgdGFrZSBzb2NrZXQgbG9jayB0byBhdm9pZCBkZWFkbG9jayByaXNrLgorICogRW5xdWV1ZXMgbWVzc2FnZSBvbiByZWNlaXZlIHF1ZXVlIGlmIGFjY2VwdGFibGU7IG9wdGlvbmFsbHkgaGFuZGxlcworICogZGlzY29ubmVjdCBpbmRpY2F0aW9uIGZvciBhIGNvbm5lY3RlZCBzb2NrZXQuCisgKgorICogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgYWxyZWFkeSB0YWtlbjsgcG9ydCBsb2NrIG1heSBhbHNvIGJlIHRha2VuLgogICoKICAqIFJldHVybnMgVElQQyBlcnJvciBzdGF0dXMgY29kZSAoVElQQ19PSyBpZiBtZXNzYWdlIGlzIG5vdCB0byBiZSByZWplY3RlZCkKICAqLwogCi1zdGF0aWMgdTMyIGRpc3BhdGNoKHN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQorc3RhdGljIHUzMiBmaWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gc2stPnNrX3NvY2tldDsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKLQlzdHJ1Y3QgdGlwY19zb2NrICp0c29jayA9IChzdHJ1Y3QgdGlwY19zb2NrICopdHBvcnQtPnVzcl9oYW5kbGU7Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKIAl1MzIgcmVjdl9xX2xlbjsKIAotCS8qIFJlamVjdCBtZXNzYWdlIGlmIHNvY2tldCBpcyBjbG9zaW5nICovCi0KLQlpZiAoIXRzb2NrKQotCQlyZXR1cm4gVElQQ19FUlJfTk9fUE9SVDsKLQogCS8qIFJlamVjdCBtZXNzYWdlIGlmIGl0IGlzIHdyb25nIHNvcnQgb2YgbWVzc2FnZSBmb3Igc29ja2V0ICovCiAKIAkvKgpAQCAtMTE0OSw3ICsxMTk5LDcgQEAKIAkgKiAiTk8gUE9SVCIgSVNOJ1QgUkVBTExZIFRIRSBSSUdIVCBFUlJPUiBDT0RFLCBBTkQgVEhFUkUgTUFZCiAJICogQkUgU0VDVVJJVFkgSU1QTElDQVRJT05TIElOSEVSRU5UIElOIFJFSkVDVElORyBJTlZBTElEIFRSQUZGSUMKIAkgKi8KLQlzb2NrID0gdHNvY2stPnNrLnNrX3NvY2tldDsKKwogCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19SRUFEWSkgewogCQlpZiAobXNnX2Nvbm5lY3RlZChtc2cpKSB7CiAJCQltc2dfZGJnKG1zZywgImRpc3BhdGNoIGZpbHRlciAxXG4iKTsKQEAgLTExOTIsNTIgKzEyNDIsMTAzIEBACiAKIAkvKiBSZWplY3QgbWVzc2FnZSBpZiB0aGVyZSBpc24ndCByb29tIHRvIHF1ZXVlIGl0ICovCiAKLQlpZiAodW5saWtlbHkoKHUzMilhdG9taWNfcmVhZCgmdGlwY19xdWV1ZV9zaXplKSA+Ci0JCSAgICAgT1ZFUkxPQURfTElNSVRfQkFTRSkpIHsKLQkJaWYgKHF1ZXVlX292ZXJsb2FkZWQoYXRvbWljX3JlYWQoJnRpcGNfcXVldWVfc2l6ZSksCi0JCQkJICAgICBPVkVSTE9BRF9MSU1JVF9CQVNFLCBtc2cpKQorCXJlY3ZfcV9sZW4gPSAodTMyKWF0b21pY19yZWFkKCZ0aXBjX3F1ZXVlX3NpemUpOworCWlmICh1bmxpa2VseShyZWN2X3FfbGVuID49IE9WRVJMT0FEX0xJTUlUX0JBU0UpKSB7CisJCWlmIChyeF9xdWV1ZV9mdWxsKG1zZywgcmVjdl9xX2xlbiwgT1ZFUkxPQURfTElNSVRfQkFTRSkpCiAJCQlyZXR1cm4gVElQQ19FUlJfT1ZFUkxPQUQ7CiAJfQotCXJlY3ZfcV9sZW4gPSBza2JfcXVldWVfbGVuKCZ0c29jay0+c2suc2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JaWYgKHVubGlrZWx5KHJlY3ZfcV9sZW4gPiAoT1ZFUkxPQURfTElNSVRfQkFTRSAvIDIpKSkgewotCQlpZiAocXVldWVfb3ZlcmxvYWRlZChyZWN2X3FfbGVuLAotCQkJCSAgICAgT1ZFUkxPQURfTElNSVRfQkFTRSAvIDIsIG1zZykpCisJcmVjdl9xX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwlpZiAodW5saWtlbHkocmVjdl9xX2xlbiA+PSAoT1ZFUkxPQURfTElNSVRfQkFTRSAvIDIpKSkgeworCQlpZiAocnhfcXVldWVfZnVsbChtc2csIHJlY3ZfcV9sZW4sIE9WRVJMT0FEX0xJTUlUX0JBU0UgLyAyKSkKIAkJCXJldHVybiBUSVBDX0VSUl9PVkVSTE9BRDsKIAl9CiAKKwkvKiBFbnF1ZXVlIG1lc3NhZ2UgKGZpbmFsbHkhKSAqLworCisJbXNnX2RiZyhtc2csICI8RElTUDw6ICIpOworCVRJUENfU0tCX0NCKGJ1ZiktPmhhbmRsZSA9IG1zZ19kYXRhKG1zZyk7CisJYXRvbWljX2luYygmdGlwY19xdWV1ZV9zaXplKTsKKwlfX3NrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgYnVmKTsKKwogCS8qIEluaXRpYXRlIGNvbm5lY3Rpb24gdGVybWluYXRpb24gZm9yIGFuIGluY29taW5nICdGSU4nICovCiAKIAlpZiAodW5saWtlbHkobXNnX2VycmNvZGUobXNnKSAmJiAoc29jay0+c3RhdGUgPT0gU1NfQ09OTkVDVEVEKSkpIHsKIAkJc29jay0+c3RhdGUgPSBTU19ESVNDT05ORUNUSU5HOwotCQkvKiBOb3RlOiBVc2Ugc2lnbmFsIHNpbmNlIHBvcnQgbG9jayBpcyBhbHJlYWR5IHRha2VuISAqLwotCQl0aXBjX2tfc2lnbmFsKChIYW5kbGVyKWFzeW5jX2Rpc2Nvbm5lY3QsIHRwb3J0LT5yZWYpOworCQl0aXBjX2Rpc2Nvbm5lY3RfcG9ydCh0aXBjX3NrX3BvcnQoc2spKTsKIAl9CiAKLQkvKiBFbnF1ZXVlIG1lc3NhZ2UgKGZpbmFsbHkhKSAqLwotCi0JbXNnX2RiZyhtc2csIjxESVNQPDogIik7Ci0JVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlID0gbXNnX2RhdGEobXNnKTsKLQlhdG9taWNfaW5jKCZ0aXBjX3F1ZXVlX3NpemUpOwotCXNrYl9xdWV1ZV90YWlsKCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSwgYnVmKTsKLQotCWlmICh3YWl0cXVldWVfYWN0aXZlKHNvY2stPnNrLT5za19zbGVlcCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShzb2NrLT5zay0+c2tfc2xlZXApOworCWlmICh3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZShzay0+c2tfc2xlZXApOwogCXJldHVybiBUSVBDX09LOwogfQogCiAvKioKKyAqIGJhY2tsb2dfcmN2IC0gaGFuZGxlIGluY29taW5nIG1lc3NhZ2UgZnJvbSBiYWNrbG9nIHF1ZXVlCisgKiBAc2s6IHNvY2tldAorICogQGJ1ZjogbWVzc2FnZQorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc29ja2V0IGxvY2ssIGJ1dCBub3QgcG9ydCBsb2NrLgorICoKKyAqIFJldHVybnMgMAorICovCisKK3N0YXRpYyBpbnQgYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQoreworCXUzMiByZXM7CisKKwlyZXMgPSBmaWx0ZXJfcmN2KHNrLCBidWYpOworCWlmIChyZXMpCisJCXRpcGNfcmVqZWN0X21zZyhidWYsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZGlzcGF0Y2ggLSBoYW5kbGUgaW5jb21pbmcgbWVzc2FnZQorICogQHRwb3J0OiBUSVBDIHBvcnQgdGhhdCByZWNlaXZlZCBtZXNzYWdlCisgKiBAYnVmOiBtZXNzYWdlCisgKgorICogQ2FsbGVkIHdpdGggcG9ydCBsb2NrIGFscmVhZHkgdGFrZW4uCisgKgorICogUmV0dXJucyBUSVBDIGVycm9yIHN0YXR1cyBjb2RlIChUSVBDX09LIGlmIG1lc3NhZ2UgaXMgbm90IHRvIGJlIHJlamVjdGVkKQorICovCisKK3N0YXRpYyB1MzIgZGlzcGF0Y2goc3RydWN0IHRpcGNfcG9ydCAqdHBvcnQsIHN0cnVjdCBza19idWZmICpidWYpCit7CisJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopdHBvcnQtPnVzcl9oYW5kbGU7CisJdTMyIHJlczsKKworCS8qCisJICogUHJvY2VzcyBtZXNzYWdlIGlmIHNvY2tldCBpcyB1bmxvY2tlZDsgb3RoZXJ3aXNlIGFkZCB0byBiYWNrbG9nIHF1ZXVlCisJICoKKwkgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gc2tfcmVjZWl2ZV9za2IoKSwgYnV0IG11c3QgYmUgZGlzdGluY3QgZnJvbSBpdAorCSAqIHNpbmNlIGEgVElQQy1zcGVjaWZpYyBmaWx0ZXIvcmVqZWN0IG1lY2hhbmlzbSBpcyB1dGlsaXplZAorCSAqLworCisJYmhfbG9ja19zb2NrKHNrKTsKKwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJcmVzID0gZmlsdGVyX3JjdihzaywgYnVmKTsKKwl9IGVsc2UgeworCQlza19hZGRfYmFja2xvZyhzaywgYnVmKTsKKwkJcmVzID0gVElQQ19PSzsKKwl9CisJYmhfdW5sb2NrX3NvY2soc2spOworCisJcmV0dXJuIHJlczsKK30KKworLyoqCiAgKiB3YWtldXBkaXNwYXRjaCAtIHdha2UgdXAgcG9ydCBhZnRlciBjb25nZXN0aW9uCiAgKiBAdHBvcnQ6IHBvcnQgdG8gd2FrZXVwCiAgKgotICogQ2FsbGVkIHdpdGggcG9ydCBsb2NrIG9uLgorICogQ2FsbGVkIHdpdGggcG9ydCBsb2NrIGFscmVhZHkgdGFrZW4uCiAgKi8KIAogc3RhdGljIHZvaWQgd2FrZXVwZGlzcGF0Y2goc3RydWN0IHRpcGNfcG9ydCAqdHBvcnQpCiB7Ci0Jc3RydWN0IHRpcGNfc29jayAqdHNvY2sgPSAoc3RydWN0IHRpcGNfc29jayAqKXRwb3J0LT51c3JfaGFuZGxlOworCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXRwb3J0LT51c3JfaGFuZGxlOwogCi0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUodHNvY2stPnNrLnNrX3NsZWVwKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHRzb2NrLT5zay5za19zbGVlcCk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNrX3NsZWVwKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNrLT5za19zbGVlcCk7CiB9CiAKIC8qKgpAQCAtMTI0NSw3ICsxMzQ2LDcgQEAKICAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlCiAgKiBAZGVzdDogc29ja2V0IGFkZHJlc3MgZm9yIGRlc3RpbmF0aW9uIHBvcnQKICAqIEBkZXN0bGVuOiBzaXplIG9mIHNvY2tldCBhZGRyZXNzIGRhdGEgc3RydWN0dXJlCi0gKiBAZmxhZ3M6ICh1bnVzZWQpCisgKiBAZmxhZ3M6IGZpbGUtcmVsYXRlZCBmbGFncyBhc3NvY2lhdGVkIHdpdGggc29ja2V0CiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZQogICovCkBAIC0xMjUzLDcyICsxMzU0LDEwNSBAQAogc3RhdGljIGludCBjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqZGVzdCwgaW50IGRlc3RsZW4sCiAJCSAgIGludCBmbGFncykKIHsKLSAgIHN0cnVjdCB0aXBjX3NvY2sgKnRzb2NrID0gdGlwY19zayhzb2NrLT5zayk7Ci0gICBzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqZHN0ID0gKHN0cnVjdCBzb2NrYWRkcl90aXBjICopZGVzdDsKLSAgIHN0cnVjdCBtc2doZHIgbSA9IHtOVUxMLH07Ci0gICBzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwotICAgc3RydWN0IHRpcGNfbXNnICptc2c7Ci0gICBpbnQgcmVzOworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrYWRkcl90aXBjICpkc3QgPSAoc3RydWN0IHNvY2thZGRyX3RpcGMgKilkZXN0OworCXN0cnVjdCBtc2doZHIgbSA9IHtOVUxMLH07CisJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKKwlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKKwlpbnQgcmVzOwogCi0gICAvKiBGb3Igbm93LCBUSVBDIGRvZXMgbm90IGFsbG93IHVzZSBvZiBjb25uZWN0KCkgd2l0aCBER1JBTSBvciBSRE0gdHlwZXMgKi8KKwlsb2NrX3NvY2soc2spOwogCi0gICBpZiAoc29jay0+c3RhdGUgPT0gU1NfUkVBRFkpCi0JICAgcmV0dXJuIC1FT1BOT1RTVVBQOworCS8qIEZvciBub3csIFRJUEMgZG9lcyBub3QgYWxsb3cgdXNlIG9mIGNvbm5lY3QoKSB3aXRoIERHUkFNL1JETSB0eXBlcyAqLwogCi0gICAvKiBJc3N1ZSBQb3NpeC1jb21wbGlhbnQgZXJyb3IgY29kZSBpZiBzb2NrZXQgaXMgaW4gdGhlIHdyb25nIHN0YXRlICovCisJaWYgKHNvY2stPnN0YXRlID09IFNTX1JFQURZKSB7CisJCXJlcyA9IC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICBpZiAoc29jay0+c3RhdGUgPT0gU1NfTElTVEVOSU5HKQotCSAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgIGlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNUSU5HKQotCSAgIHJldHVybiAtRUFMUkVBRFk7Ci0gICBpZiAoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQpCi0JICAgcmV0dXJuIC1FSVNDT05OOworCS8qIEZvciBub3csIFRJUEMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbm9uLWJsb2NraW5nIGZvcm0gb2YgY29ubmVjdCgpICovCiAKLSAgIC8qCi0gICAgKiBSZWplY3QgY29ubmVjdGlvbiBhdHRlbXB0IHVzaW5nIG11bHRpY2FzdCBhZGRyZXNzCi0gICAgKgotICAgICogTm90ZTogc2VuZF9tc2coKSB2YWxpZGF0ZXMgdGhlIHJlc3Qgb2YgdGhlIGFkZHJlc3MgZmllbGRzLAotICAgICogICAgICAgc28gdGhlcmUncyBubyBuZWVkIHRvIGRvIGl0IGhlcmUKLSAgICAqLworCWlmIChmbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJcmVzID0gLUVXT1VMREJMT0NLOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICBpZiAoZHN0LT5hZGRydHlwZSA9PSBUSVBDX0FERFJfTUNBU1QpCi0JICAgcmV0dXJuIC1FSU5WQUw7CisJLyogSXNzdWUgUG9zaXgtY29tcGxpYW50IGVycm9yIGNvZGUgaWYgc29ja2V0IGlzIGluIHRoZSB3cm9uZyBzdGF0ZSAqLwogCi0gICAvKiBTZW5kIGEgJ1NZTi0nIHRvIGRlc3RpbmF0aW9uICovCisJaWYgKHNvY2stPnN0YXRlID09IFNTX0xJU1RFTklORykgeworCQlyZXMgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBleGl0OworCX0KKwlpZiAoc29jay0+c3RhdGUgPT0gU1NfQ09OTkVDVElORykgeworCQlyZXMgPSAtRUFMUkVBRFk7CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKSB7CisJCXJlcyA9IC1FSVNDT05OOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICBtLm1zZ19uYW1lID0gZGVzdDsKLSAgIG0ubXNnX25hbWVsZW4gPSBkZXN0bGVuOwotICAgaWYgKChyZXMgPSBzZW5kX21zZyhOVUxMLCBzb2NrLCAmbSwgMCkpIDwgMCkgewotCSAgIHNvY2stPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKLQkgICByZXR1cm4gcmVzOwotICAgfQorCS8qCisJICogUmVqZWN0IGNvbm5lY3Rpb24gYXR0ZW1wdCB1c2luZyBtdWx0aWNhc3QgYWRkcmVzcworCSAqCisJICogTm90ZTogc2VuZF9tc2coKSB2YWxpZGF0ZXMgdGhlIHJlc3Qgb2YgdGhlIGFkZHJlc3MgZmllbGRzLAorCSAqICAgICAgIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBpdCBoZXJlCisJICovCiAKLSAgIGlmIChkb3duX2ludGVycnVwdGlibGUoJnRzb2NrLT5zZW0pKQotCSAgIHJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKGRzdC0+YWRkcnR5cGUgPT0gVElQQ19BRERSX01DQVNUKSB7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CiAKLSAgIC8qIFdhaXQgZm9yIGRlc3RpbmF0aW9uJ3MgJ0FDSycgcmVzcG9uc2UgKi8KKwkvKiBSZWplY3QgYW55IG1lc3NhZ2VzIGFscmVhZHkgaW4gcmVjZWl2ZSBxdWV1ZSAodmVyeSB1bmxpa2VseSkgKi8KIAotICAgcmVzID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKnNvY2stPnNrLT5za19zbGVlcCwKLQkJCQkJICBza2JfcXVldWVfbGVuKCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSksCi0JCQkJCSAgc29jay0+c2stPnNrX3JjdnRpbWVvKTsKLSAgIGJ1ZiA9IHNrYl9wZWVrKCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0gICBpZiAocmVzID4gMCkgewotCSAgIG1zZyA9IGJ1Zl9tc2coYnVmKTsKLQkgICByZXMgPSBhdXRvX2Nvbm5lY3Qoc29jaywgdHNvY2ssIG1zZyk7Ci0JICAgaWYgKCFyZXMpIHsKLQkJICAgaWYgKCFtc2dfZGF0YV9zeihtc2cpKQotCQkJICAgYWR2YW5jZV9xdWV1ZSh0c29jayk7Ci0JICAgfQotICAgfSBlbHNlIHsKLQkgICBpZiAocmVzID09IDApIHsKLQkJICAgcmVzID0gLUVUSU1FRE9VVDsKLQkgICB9IGVsc2UKLQkJICAgeyAvKiBsZWF2ZSAicmVzIiB1bmNoYW5nZWQgKi8gfQotCSAgIHNvY2stPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKLSAgIH0KKwlyZWplY3RfcnhfcXVldWUoc2spOwogCi0gICB1cCgmdHNvY2stPnNlbSk7Ci0gICByZXR1cm4gcmVzOworCS8qIFNlbmQgYSAnU1lOLScgdG8gZGVzdGluYXRpb24gKi8KKworCW0ubXNnX25hbWUgPSBkZXN0OworCW0ubXNnX25hbWVsZW4gPSBkZXN0bGVuOworCXJlcyA9IHNlbmRfbXNnKE5VTEwsIHNvY2ssICZtLCAwKTsKKwlpZiAocmVzIDwgMCkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogV2FpdCB1bnRpbCBhbiAnQUNLJyBvciAnUlNUJyBhcnJpdmVzLCBvciBhIHRpbWVvdXQgb2NjdXJzICovCisKKwlyZWxlYXNlX3NvY2soc2spOworCXJlcyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpzay0+c2tfc2xlZXAsCisJCQkoIXNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3JlY2VpdmVfcXVldWUpIHx8CisJCQkoc29jay0+c3RhdGUgIT0gU1NfQ09OTkVDVElORykpLAorCQkJc2stPnNrX3JjdnRpbWVvKTsKKwlsb2NrX3NvY2soc2spOworCisJaWYgKHJlcyA+IDApIHsKKwkJYnVmID0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCQltc2cgPSBidWZfbXNnKGJ1Zik7CisJCQlyZXMgPSBhdXRvX2Nvbm5lY3Qoc29jaywgbXNnKTsKKwkJCWlmICghcmVzKSB7CisJCQkJaWYgKCFtc2dfZGF0YV9zeihtc2cpKQorCQkJCQlhZHZhbmNlX3J4X3F1ZXVlKHNrKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpIHsKKwkJCQlyZXMgPSAtRUlTQ09OTjsKKwkJCX0gZWxzZSB7CisJCQkJcmVzID0gLUVDT05OUkVGVVNFRDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChyZXMgPT0gMCkKKwkJCXJlcyA9IC1FVElNRURPVVQ7CisJCWVsc2UKKwkJCTsgLyogbGVhdmUgInJlcyIgdW5jaGFuZ2VkICovCisJCXNvY2stPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKKwl9CisKK2V4aXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gcmVzOwogfQogCiAvKioKQEAgLTEzMzEsMTQgKzE0NjUsMjIgQEAKIAogc3RhdGljIGludCBsaXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxlbikKIHsKLQkvKiBSRVFVSVJFUyBTT0NLRVQgTE9DS0lORyBPRiBTT01FIFNPUlQ/ICovCisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJaW50IHJlczsKKworCWxvY2tfc29jayhzayk7CiAKIAlpZiAoc29jay0+c3RhdGUgPT0gU1NfUkVBRFkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQpCi0JCXJldHVybiAtRUlOVkFMOwotCXNvY2stPnN0YXRlID0gU1NfTElTVEVOSU5HOwotCXJldHVybiAwOworCQlyZXMgPSAtRU9QTk9UU1VQUDsKKwllbHNlIGlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKKwkJcmVzID0gLUVJTlZBTDsKKwllbHNlIHsKKwkJc29jay0+c3RhdGUgPSBTU19MSVNURU5JTkc7CisJCXJlcyA9IDA7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gcmVzOwogfQogCiAvKioKQEAgLTEzNTAsNTAgKzE0OTIsNjkgQEAKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UKICAqLwogCi1zdGF0aWMgaW50IGFjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IGFjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jaywgaW50IGZsYWdzKQogewotCXN0cnVjdCB0aXBjX3NvY2sgKnRzb2NrID0gdGlwY19zayhzb2NrLT5zayk7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKLQlpbnQgcmVzID0gLUVGQVVMVDsKKwlpbnQgcmVzOwogCi0JaWYgKHNvY2stPnN0YXRlID09IFNTX1JFQURZKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKHNvY2stPnN0YXRlICE9IFNTX0xJU1RFTklORykKLQkJcmV0dXJuIC1FSU5WQUw7CisJbG9ja19zb2NrKHNrKTsKIAotCWlmICh1bmxpa2VseSgoc2tiX3F1ZXVlX2xlbigmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpID09IDApICYmCi0JCSAgICAgKGZsYWdzICYgT19OT05CTE9DSykpKQotCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdHNvY2stPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpzb2NrLT5zay0+c2tfc2xlZXAsCi0JCQkJICAgICBza2JfcXVldWVfbGVuKCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSB7Ci0JCXJlcyA9IC1FUkVTVEFSVFNZUzsKKwlpZiAoc29jay0+c3RhdGUgPT0gU1NfUkVBRFkpIHsKKwkJcmVzID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JYnVmID0gc2tiX3BlZWsoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwlpZiAoc29jay0+c3RhdGUgIT0gU1NfTElTVEVOSU5HKSB7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CiAKLQlyZXMgPSB0aXBjX2NyZWF0ZShzb2NrLT5zay0+c2tfbmV0LCBuZXdzb2NrLCAwKTsKKwl3aGlsZSAoc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKKwkJaWYgKGZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmVzID0gLUVXT1VMREJMT0NLOworCQkJZ290byBleGl0OworCQl9CisJCXJlbGVhc2Vfc29jayhzayk7CisJCXJlcyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgqc2stPnNrX3NsZWVwLAorCQkJCSghc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKTsKKwkJbG9ja19zb2NrKHNrKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZXhpdDsKKwl9CisKKwlidWYgPSBza2JfcGVlaygmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCisJcmVzID0gdGlwY19jcmVhdGUoc29ja19uZXQoc29jay0+c2spLCBuZXdfc29jaywgMCk7CiAJaWYgKCFyZXMpIHsKLQkJc3RydWN0IHRpcGNfc29jayAqbmV3X3Rzb2NrID0gdGlwY19zayhuZXdzb2NrLT5zayk7CisJCXN0cnVjdCBzb2NrICpuZXdfc2sgPSBuZXdfc29jay0+c2s7CisJCXN0cnVjdCB0aXBjX3BvcnQgKm5ld190cG9ydCA9IHRpcGNfc2tfcG9ydChuZXdfc2spOworCQl1MzIgbmV3X3JlZiA9IG5ld190cG9ydC0+cmVmOwogCQlzdHJ1Y3QgdGlwY19wb3J0aWQgaWQ7CiAJCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwotCQl1MzIgbmV3X3JlZiA9IG5ld190c29jay0+cC0+cmVmOworCisJCWxvY2tfc29jayhuZXdfc2spOworCisJCS8qCisJCSAqIFJlamVjdCBhbnkgc3RyYXkgbWVzc2FnZXMgcmVjZWl2ZWQgYnkgbmV3IHNvY2tldAorCQkgKiBiZWZvcmUgdGhlIHNvY2tldCBsb2NrIHdhcyB0YWtlbiAodmVyeSwgdmVyeSB1bmxpa2VseSkKKwkJICovCisKKwkJcmVqZWN0X3J4X3F1ZXVlKG5ld19zayk7CisKKwkJLyogQ29ubmVjdCBuZXcgc29ja2V0IHRvIGl0J3MgcGVlciAqLwogCiAJCWlkLnJlZiA9IG1zZ19vcmlncG9ydChtc2cpOwogCQlpZC5ub2RlID0gbXNnX29yaWdub2RlKG1zZyk7CiAJCXRpcGNfY29ubmVjdDJwb3J0KG5ld19yZWYsICZpZCk7Ci0JCW5ld3NvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOworCQluZXdfc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CiAKIAkJdGlwY19zZXRfcG9ydGltcG9ydGFuY2UobmV3X3JlZiwgbXNnX2ltcG9ydGFuY2UobXNnKSk7CiAJCWlmIChtc2dfbmFtZWQobXNnKSkgewotCQkJbmV3X3Rzb2NrLT5wLT5jb25uX3R5cGUgPSBtc2dfbmFtZXR5cGUobXNnKTsKLQkJCW5ld190c29jay0+cC0+Y29ubl9pbnN0YW5jZSA9IG1zZ19uYW1laW5zdChtc2cpOworCQkJbmV3X3Rwb3J0LT5jb25uX3R5cGUgPSBtc2dfbmFtZXR5cGUobXNnKTsKKwkJCW5ld190cG9ydC0+Y29ubl9pbnN0YW5jZSA9IG1zZ19uYW1laW5zdChtc2cpOwogCQl9CiAKLQkgICAgICAgLyoKKwkJLyoKIAkJICogUmVzcG9uZCB0byAnU1lOLScgYnkgZGlzY2FyZGluZyBpdCAmIHJldHVybmluZyAnQUNLJy0uCiAJCSAqIFJlc3BvbmQgdG8gJ1NZTisnIGJ5IHF1ZXVpbmcgaXQgb24gbmV3IHNvY2tldC4KIAkJICovCkBAIC0xNDAyLDI0ICsxNTYzLDIzIEBACiAJCWlmICghbXNnX2RhdGFfc3oobXNnKSkgewogCQkJc3RydWN0IG1zZ2hkciBtID0ge05VTEwsfTsKIAotCQkJc2VuZF9wYWNrZXQoTlVMTCwgbmV3c29jaywgJm0sIDApOwotCQkJYWR2YW5jZV9xdWV1ZSh0c29jayk7CisJCQlhZHZhbmNlX3J4X3F1ZXVlKHNrKTsKKwkJCXNlbmRfcGFja2V0KE5VTEwsIG5ld19zb2NrLCAmbSwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlzb2NrX2xvY2sodHNvY2spOwotCQkJc2tiX2RlcXVldWUoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKLQkJCXNvY2tfdW5sb2NrKHRzb2NrKTsKLQkJCXNrYl9xdWV1ZV9oZWFkKCZuZXdzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSwgYnVmKTsKKwkJCV9fc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJm5ld19zay0+c2tfcmVjZWl2ZV9xdWV1ZSwgYnVmKTsKIAkJfQorCQlyZWxlYXNlX3NvY2sobmV3X3NrKTsKIAl9CiBleGl0OgotCXVwKCZ0c29jay0+c2VtKTsKKwlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiByZXM7CiB9CiAKIC8qKgogICogc2h1dGRvd24gLSBzaHV0ZG93biBzb2NrZXQgY29ubmVjdGlvbgogICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmUKLSAqIEBob3c6IGRpcmVjdGlvbiB0byBjbG9zZSAodW51c2VkOyBhbHdheXMgdHJlYXRlZCBhcyByZWFkICsgd3JpdGUpCisgKiBAaG93OiBkaXJlY3Rpb24gdG8gY2xvc2UgKG11c3QgYmUgU0hVVF9SRFdSKQogICoKICAqIFRlcm1pbmF0ZXMgY29ubmVjdGlvbiAoaWYgbmVjZXNzYXJ5KSwgdGhlbiBwdXJnZXMgc29ja2V0J3MgcmVjZWl2ZSBxdWV1ZS4KICAqCkBAIC0xNDI4LDUzICsxNTg4LDQ2IEBACiAKIHN0YXRpYyBpbnQgc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKLQlzdHJ1Y3QgdGlwY19zb2NrKiB0c29jayA9IHRpcGNfc2soc29jay0+c2spOworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCB0aXBjX3BvcnQgKnRwb3J0ID0gdGlwY19za19wb3J0KHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwogCWludCByZXM7CiAKLQkvKiBDb3VsZCByZXR1cm4gLUVJTlZBTCBmb3IgYW4gaW52YWxpZCAiaG93IiwgYnV0IHdoeSBib3RoZXI/ICovCisJaWYgKGhvdyAhPSBTSFVUX1JEV1IpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdHNvY2stPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlzb2NrX2xvY2sodHNvY2spOworCWxvY2tfc29jayhzayk7CiAKIAlzd2l0Y2ggKHNvY2stPnN0YXRlKSB7CisJY2FzZSBTU19DT05ORUNUSU5HOgogCWNhc2UgU1NfQ09OTkVDVEVEOgogCi0JCS8qIFNlbmQgJ0ZJTisnIG9yICdGSU4tJyBtZXNzYWdlIHRvIHBlZXIgKi8KLQotCQlzb2NrX3VubG9jayh0c29jayk7CisJCS8qIERpc2Nvbm5lY3QgYW5kIHNlbmQgYSAnRklOKycgb3IgJ0ZJTi0nIG1lc3NhZ2UgdG8gcGVlciAqLwogcmVzdGFydDoKLQkJaWYgKChidWYgPSBza2JfZGVxdWV1ZSgmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpKSkgeworCQlidWYgPSBfX3NrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJCWlmIChidWYpIHsKIAkJCWF0b21pY19kZWMoJnRpcGNfcXVldWVfc2l6ZSk7CiAJCQlpZiAoVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlICE9IG1zZ19kYXRhKGJ1Zl9tc2coYnVmKSkpIHsKIAkJCQlidWZfZGlzY2FyZChidWYpOwogCQkJCWdvdG8gcmVzdGFydDsKIAkJCX0KKwkJCXRpcGNfZGlzY29ubmVjdCh0cG9ydC0+cmVmKTsKIAkJCXRpcGNfcmVqZWN0X21zZyhidWYsIFRJUENfQ09OTl9TSFVURE9XTik7CisJCX0gZWxzZSB7CisJCQl0aXBjX3NodXRkb3duKHRwb3J0LT5yZWYpOwogCQl9Ci0JCWVsc2UgewotCQkJdGlwY19zaHV0ZG93bih0c29jay0+cC0+cmVmKTsKLQkJfQotCQlzb2NrX2xvY2sodHNvY2spOworCisJCXNvY2stPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKIAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCWNhc2UgU1NfRElTQ09OTkVDVElORzoKIAotCQkvKiBEaXNjYXJkIGFueSB1bnJlY2VpdmVkIG1lc3NhZ2VzICovCisJCS8qIERpc2NhcmQgYW55IHVucmVjZWl2ZWQgbWVzc2FnZXM7IHdha2UgdXAgc2xlZXBpbmcgdGFza3MgKi8KIAotCQl3aGlsZSAoKGJ1ZiA9IHNrYl9kZXF1ZXVlKCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSB7Ci0JCQlhdG9taWNfZGVjKCZ0aXBjX3F1ZXVlX3NpemUpOwotCQkJYnVmX2Rpc2NhcmQoYnVmKTsKLQkJfQotCQl0c29jay0+cC0+Y29ubl91bmFja2VkID0gMDsKLQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgU1NfQ09OTkVDVElORzoKLQkJc29jay0+c3RhdGUgPSBTU19ESVNDT05ORUNUSU5HOworCQlkaXNjYXJkX3J4X3F1ZXVlKHNrKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoc2stPnNrX3NsZWVwKSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZShzay0+c2tfc2xlZXApOwogCQlyZXMgPSAwOwogCQlicmVhazsKIApAQCAtMTQ4Miw5ICsxNjM1LDcgQEAKIAkJcmVzID0gLUVOT1RDT05OOwogCX0KIAotCXNvY2tfdW5sb2NrKHRzb2NrKTsKLQotCXVwKCZ0c29jay0+c2VtKTsKKwlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE1MDUsNyArMTY1Niw4IEBACiBzdGF0aWMgaW50IHNldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywKIAkJICAgICAgaW50IGx2bCwgaW50IG9wdCwgY2hhciBfX3VzZXIgKm92LCBpbnQgb2wpCiB7Ci0Jc3RydWN0IHRpcGNfc29jayAqdHNvY2sgPSB0aXBjX3NrKHNvY2stPnNrKTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgdGlwY19wb3J0ICp0cG9ydCA9IHRpcGNfc2tfcG9ydChzayk7CiAJdTMyIHZhbHVlOwogCWludCByZXM7CiAKQEAgLTE1MTgsMzAgKzE2NzAsMzEgQEAKIAlpZiAoKHJlcyA9IGdldF91c2VyKHZhbHVlLCAodTMyIF9fdXNlciAqKW92KSkpCiAJCXJldHVybiByZXM7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ0c29jay0+c2VtKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlsb2NrX3NvY2soc2spOwogCiAJc3dpdGNoIChvcHQpIHsKIAljYXNlIFRJUENfSU1QT1JUQU5DRToKLQkJcmVzID0gdGlwY19zZXRfcG9ydGltcG9ydGFuY2UodHNvY2stPnAtPnJlZiwgdmFsdWUpOworCQlyZXMgPSB0aXBjX3NldF9wb3J0aW1wb3J0YW5jZSh0cG9ydC0+cmVmLCB2YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVElQQ19TUkNfRFJPUFBBQkxFOgogCQlpZiAoc29jay0+dHlwZSAhPSBTT0NLX1NUUkVBTSkKLQkJCXJlcyA9IHRpcGNfc2V0X3BvcnR1bnJlbGlhYmxlKHRzb2NrLT5wLT5yZWYsIHZhbHVlKTsKKwkJCXJlcyA9IHRpcGNfc2V0X3BvcnR1bnJlbGlhYmxlKHRwb3J0LT5yZWYsIHZhbHVlKTsKIAkJZWxzZQogCQkJcmVzID0gLUVOT1BST1RPT1BUOwogCQlicmVhazsKIAljYXNlIFRJUENfREVTVF9EUk9QUEFCTEU6Ci0JCXJlcyA9IHRpcGNfc2V0X3BvcnR1bnJldHVybmFibGUodHNvY2stPnAtPnJlZiwgdmFsdWUpOworCQlyZXMgPSB0aXBjX3NldF9wb3J0dW5yZXR1cm5hYmxlKHRwb3J0LT5yZWYsIHZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBUSVBDX0NPTk5fVElNRU9VVDoKLQkJc29jay0+c2stPnNrX3JjdnRpbWVvID0gKHZhbHVlICogSFogLyAxMDAwKTsKKwkJc2stPnNrX3JjdnRpbWVvID0gbXNlY3NfdG9famlmZmllcyh2YWx1ZSk7CisJCS8qIG5vIG5lZWQgdG8gc2V0ICJyZXMiLCBzaW5jZSBhbHJlYWR5IDAgYXQgdGhpcyBwb2ludCAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXMgPSAtRUlOVkFMOwogCX0KIAotCXVwKCZ0c29jay0+c2VtKTsKKwlyZWxlYXNlX3NvY2soc2spOworCiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTU2Miw3ICsxNzE1LDggQEAKIHN0YXRpYyBpbnQgZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkgICAgICBpbnQgbHZsLCBpbnQgb3B0LCBjaGFyIF9fdXNlciAqb3YsIGludCBfX3VzZXIgKm9sKQogewotCXN0cnVjdCB0aXBjX3NvY2sgKnRzb2NrID0gdGlwY19zayhzb2NrLT5zayk7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHRpcGNfcG9ydCAqdHBvcnQgPSB0aXBjX3NrX3BvcnQoc2spOwogCWludCBsZW47CiAJdTMyIHZhbHVlOwogCWludCByZXM7CkBAIC0xNTc0LDI2ICsxNzI4LDI4IEBACiAJaWYgKChyZXMgPSBnZXRfdXNlcihsZW4sIG9sKSkpCiAJCXJldHVybiByZXM7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ0c29jay0+c2VtKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlsb2NrX3NvY2soc2spOwogCiAJc3dpdGNoIChvcHQpIHsKIAljYXNlIFRJUENfSU1QT1JUQU5DRToKLQkJcmVzID0gdGlwY19wb3J0aW1wb3J0YW5jZSh0c29jay0+cC0+cmVmLCAmdmFsdWUpOworCQlyZXMgPSB0aXBjX3BvcnRpbXBvcnRhbmNlKHRwb3J0LT5yZWYsICZ2YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVElQQ19TUkNfRFJPUFBBQkxFOgotCQlyZXMgPSB0aXBjX3BvcnR1bnJlbGlhYmxlKHRzb2NrLT5wLT5yZWYsICZ2YWx1ZSk7CisJCXJlcyA9IHRpcGNfcG9ydHVucmVsaWFibGUodHBvcnQtPnJlZiwgJnZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBUSVBDX0RFU1RfRFJPUFBBQkxFOgotCQlyZXMgPSB0aXBjX3BvcnR1bnJldHVybmFibGUodHNvY2stPnAtPnJlZiwgJnZhbHVlKTsKKwkJcmVzID0gdGlwY19wb3J0dW5yZXR1cm5hYmxlKHRwb3J0LT5yZWYsICZ2YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVElQQ19DT05OX1RJTUVPVVQ6Ci0JCXZhbHVlID0gKHNvY2stPnNrLT5za19yY3Z0aW1lbyAqIDEwMDApIC8gSFo7CisJCXZhbHVlID0gamlmZmllc190b19tc2Vjcyhzay0+c2tfcmN2dGltZW8pOworCQkvKiBubyBuZWVkIHRvIHNldCAicmVzIiwgc2luY2UgYWxyZWFkeSAwIGF0IHRoaXMgcG9pbnQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKKwlyZWxlYXNlX3NvY2soc2spOworCiAJaWYgKHJlcykgewogCQkvKiAiZ2V0IiBmYWlsZWQgKi8KIAl9CkBAIC0xNjA3LDcgKzE3NjMsNiBAQAogCQlyZXMgPSBwdXRfdXNlcihzaXplb2YodmFsdWUpLCBvbCk7CiAJfQogCi0JdXAoJnRzb2NrLT5zZW0pOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE3MjAsNiArMTg3NSw3IEBACiAvKioKICAqIHRpcGNfc29ja2V0X3N0b3AgLSBzdG9wIFRJUEMgc29ja2V0IGludGVyZmFjZQogICovCisKIHZvaWQgdGlwY19zb2NrZXRfc3RvcCh2b2lkKQogewogCWlmICghc29ja2V0c19lbmFibGVkKQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvem9uZS5jIGIvbmV0L3RpcGMvem9uZS5jCmluZGV4IDExNGUxNzMuLjM1MDZmODUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3pvbmUuYworKysgYi9uZXQvdGlwYy96b25lLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAogCWFzc2VydChjX3B0ci0+YWRkcik7CiAJYXNzZXJ0KGNfbnVtIDw9IHRpcGNfbWF4X2NsdXN0ZXJzKTsKLQlhc3NlcnQoel9wdHItPmNsdXN0ZXJzW2NfbnVtXSA9PSAwKTsKKwlhc3NlcnQoel9wdHItPmNsdXN0ZXJzW2NfbnVtXSA9PSBOVUxMKTsKIAl6X3B0ci0+Y2x1c3RlcnNbY19udW1dID0gY19wdHI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBiODc4OGZkLi4xNDU0YWZjIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0yNTIsNyArMjUyLDcgQEAKIAlza19mb3JfZWFjaChzLCBub2RlLCAmdW5peF9zb2NrZXRfdGFibGVbaGFzaCBeIHR5cGVdKSB7CiAJCXN0cnVjdCB1bml4X3NvY2sgKnUgPSB1bml4X3NrKHMpOwogCi0JCWlmIChzLT5za19uZXQgIT0gbmV0KQorCQlpZiAoIW5ldF9lcShzb2NrX25ldChzKSwgbmV0KSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICh1LT5hZGRyLT5sZW4gPT0gbGVuICYmCkBAIC0yODksNyArMjg5LDcgQEAKIAkJICAgICZ1bml4X3NvY2tldF90YWJsZVtpLT5pX2lubyAmIChVTklYX0hBU0hfU0laRSAtIDEpXSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSB1bml4X3NrKHMpLT5kZW50cnk7CiAKLQkJaWYgKHMtPnNrX25ldCAhPSBuZXQpCisJCWlmICghbmV0X2VxKHNvY2tfbmV0KHMpLCBuZXQpKQogCQkJY29udGludWU7CiAKIAkJaWYoZGVudHJ5ICYmIGRlbnRyeS0+ZF9pbm9kZSA9PSBpKQpAQCAtNjU0LDcgKzY1NCw3IEBACiBzdGF0aWMgaW50IHVuaXhfYXV0b2JpbmQoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgdW5peF9zb2NrICp1ID0gdW5peF9zayhzayk7CiAJc3RhdGljIHUzMiBvcmRlcm51bSA9IDE7CiAJc3RydWN0IHVuaXhfYWRkcmVzcyAqIGFkZHI7CkBAIC03NTgsNyArNzU4LDcgQEAKIHN0YXRpYyBpbnQgdW5peF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgdW5peF9zb2NrICp1ID0gdW5peF9zayhzayk7CiAJc3RydWN0IHNvY2thZGRyX3VuICpzdW5hZGRyPShzdHJ1Y3Qgc29ja2FkZHJfdW4gKil1YWRkcjsKIAlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gTlVMTDsKQEAgLTgxOSw3ICs4MTksMTEgQEAKIAkJICovCiAJCW1vZGUgPSBTX0lGU09DSyB8CiAJCSAgICAgICAoU09DS19JTk9ERShzb2NrKS0+aV9tb2RlICYgfmN1cnJlbnQtPmZzLT51bWFzayk7CisJCWVyciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X21rbm9kX2RwdXQ7CiAJCWVyciA9IHZmc19ta25vZChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LCBtb2RlLCAwKTsKKwkJbW50X2Ryb3Bfd3JpdGUobmQucGF0aC5tbnQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfbWtub2RfZHB1dDsKIAkJbXV0ZXhfdW5sb2NrKCZuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CkBAIC04OTksNyArOTAzLDcgQEAKIAkJCSAgICAgIGludCBhbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2stPnNrX25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IHNvY2thZGRyX3VuICpzdW5hZGRyPShzdHJ1Y3Qgc29ja2FkZHJfdW4qKWFkZHI7CiAJc3RydWN0IHNvY2sgKm90aGVyOwogCXVuc2lnbmVkIGhhc2g7CkBAIC05OTYsNyArMTAwMCw3IEBACiB7CiAJc3RydWN0IHNvY2thZGRyX3VuICpzdW5hZGRyPShzdHJ1Y3Qgc29ja2FkZHJfdW4gKil1YWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzay0+c2tfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgdW5peF9zb2NrICp1ID0gdW5peF9zayhzayksICpuZXd1LCAqb3RoZXJ1OwogCXN0cnVjdCBzb2NrICpuZXdzayA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKm90aGVyID0gTlVMTDsKQEAgLTEwMjUsNyArMTAyOSw3IEBACiAJZXJyID0gLUVOT01FTTsKIAogCS8qIGNyZWF0ZSBuZXcgc29jayBmb3IgY29tcGxldGUgY29ubmVjdGlvbiAqLwotCW5ld3NrID0gdW5peF9jcmVhdGUxKHNrLT5za19uZXQsIE5VTEwpOworCW5ld3NrID0gdW5peF9jcmVhdGUxKHNvY2tfbmV0KHNrKSwgTlVMTCk7CiAJaWYgKG5ld3NrID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCkBAIC0xMzEyLDcgKzEzMTYsNyBAQAogewogCXN0cnVjdCBzb2NrX2lvY2IgKnNpb2NiID0ga2lvY2JfdG9fc2lvY2Ioa2lvY2IpOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCBuZXQgKm5ldCA9IHNrLT5za19uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCB1bml4X3NvY2sgKnUgPSB1bml4X3NrKHNrKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfdW4gKnN1bmFkZHI9bXNnLT5tc2dfbmFtZTsKIAlzdHJ1Y3Qgc29jayAqb3RoZXIgPSBOVUxMOwpAQCAtMjAxNiwxMyArMjAyMCwxNCBAQAogCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKIAlpbnQgaTsKIH07Ci1zdGF0aWMgc3RydWN0IHNvY2sgKnVuaXhfc2VxX2lkeChzdHJ1Y3QgdW5peF9pdGVyX3N0YXRlICppdGVyLCBsb2ZmX3QgcG9zKQorc3RhdGljIHN0cnVjdCBzb2NrICp1bml4X3NlcV9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCiB7CisJc3RydWN0IHVuaXhfaXRlcl9zdGF0ZSAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKIAlsb2ZmX3Qgb2ZmID0gMDsKIAlzdHJ1Y3Qgc29jayAqczsKIAogCWZvciAocyA9IGZpcnN0X3VuaXhfc29ja2V0KCZpdGVyLT5pKTsgczsgcyA9IG5leHRfdW5peF9zb2NrZXQoJml0ZXItPmksIHMpKSB7Ci0JCWlmIChzLT5za19uZXQgIT0gaXRlci0+cC5uZXQpCisJCWlmIChzb2NrX25ldChzKSAhPSBzZXFfZmlsZV9uZXQoc2VxKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAob2ZmID09IHBvcykKIAkJCXJldHVybiBzOwpAQCAtMjAzNSw5ICsyMDQwLDggQEAKIHN0YXRpYyB2b2lkICp1bml4X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyh1bml4X3RhYmxlX2xvY2spCiB7Ci0Jc3RydWN0IHVuaXhfaXRlcl9zdGF0ZSAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKIAlzcGluX2xvY2soJnVuaXhfdGFibGVfbG9jayk7Ci0JcmV0dXJuICpwb3MgPyB1bml4X3NlcV9pZHgoaXRlciwgKnBvcyAtIDEpIDogKCh2b2lkICopIDEpOworCXJldHVybiAqcG9zID8gdW5peF9zZXFfaWR4KHNlcSwgKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOwogfQogCiBzdGF0aWMgdm9pZCAqdW5peF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCkBAIC0yMDQ2LDExICsyMDUwLDExIEBACiAJc3RydWN0IHNvY2sgKnNrID0gdjsKIAkrKypwb3M7CiAKLQlpZiAodiA9PSAodm9pZCAqKTEpCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzayA9IGZpcnN0X3VuaXhfc29ja2V0KCZpdGVyLT5pKTsKIAllbHNlCiAJCXNrID0gbmV4dF91bml4X3NvY2tldCgmaXRlci0+aSwgc2spOwotCXdoaWxlIChzayAmJiAoc2stPnNrX25ldCAhPSBpdGVyLT5wLm5ldCkpCisJd2hpbGUgKHNrICYmIChzb2NrX25ldChzaykgIT0gc2VxX2ZpbGVfbmV0KHNlcSkpKQogCQlzayA9IG5leHRfdW5peF9zb2NrZXQoJml0ZXItPmksIHNrKTsKIAlyZXR1cm4gc2s7CiB9CkBAIC0yMDY0LDcgKzIwNjgsNyBAQAogc3RhdGljIGludCB1bml4X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCi0JaWYgKHYgPT0gKHZvaWQgKikxKQorCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3B1dHMoc2VxLCAiTnVtICAgICAgIFJlZkNvdW50IFByb3RvY29sIEZsYWdzICAgIFR5cGUgU3QgIgogCQkJICJJbm9kZSBQYXRoXG4iKTsKIAllbHNlIHsKQEAgLTIxNzYsNyArMjE4MCw3IEBACiAJcmMgPSBwcm90b19yZWdpc3RlcigmdW5peF9wcm90bywgMSk7CiAJaWYgKHJjICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IENhbm5vdCBjcmVhdGUgdW5peF9zb2NrIFNMQUIgY2FjaGUhXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbnByb2MuYyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCmluZGV4IGYyZTU0YzMuLjViZWJlNDAgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCkBAIC0yOTIsMTQgKzI5MiwxMiBAQAogCWlmICghcHJvY19yb3V0ZXIpCiAJCWdvdG8gZmFpbDsKIAotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiY29uZmlnIiwgU19JUlVHTywgcHJvY19yb3V0ZXIpOworCXAgPSBwcm9jX2NyZWF0ZSgiY29uZmlnIiwgU19JUlVHTywgcHJvY19yb3V0ZXIsICZjb25maWdfZm9wcyk7CiAJaWYgKCFwKQogCQlnb3RvIGZhaWxfY29uZmlnOwotCXAtPnByb2NfZm9wcyA9ICZjb25maWdfZm9wczsKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoInN0YXR1cyIsIFNfSVJVR08sIHByb2Nfcm91dGVyKTsKKwlwID0gcHJvY19jcmVhdGUoInN0YXR1cyIsIFNfSVJVR08sIHByb2Nfcm91dGVyLCAmc3RhdHVzX2ZvcHMpOwogCWlmICghcCkKIAkJZ290byBmYWlsX3N0YXQ7Ci0JcC0+cHJvY19mb3BzID0gJnN0YXR1c19mb3BzOwogCXJldHVybiAwOwogZmFpbF9zdGF0OgogCXJlbW92ZV9wcm9jX2VudHJ5KCJjb25maWciLCBwcm9jX3JvdXRlcik7CkBAIC0zMjksMTAgKzMyNywxMCBAQAogCWlmICh3YW5kZXYtPm1hZ2ljICE9IFJPVVRFUl9NQUdJQykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl3YW5kZXYtPmRlbnQgPSBjcmVhdGVfcHJvY19lbnRyeSh3YW5kZXYtPm5hbWUsIFNfSVJVR08sIHByb2Nfcm91dGVyKTsKKwl3YW5kZXYtPmRlbnQgPSBwcm9jX2NyZWF0ZSh3YW5kZXYtPm5hbWUsIFNfSVJVR08sCisJCQkJICAgcHJvY19yb3V0ZXIsICZ3YW5kZXZfZm9wcyk7CiAJaWYgKCF3YW5kZXYtPmRlbnQpCiAJCXJldHVybiAtRU5PTUVNOwotCXdhbmRldi0+ZGVudC0+cHJvY19mb3BzCT0gJndhbmRldl9mb3BzOwogCXdhbmRldi0+ZGVudC0+ZGF0YQk9IHdhbmRldjsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCA2NTcxMGE0Li5iOWY5NDNjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogb2JqLSQoQ09ORklHX1dJUkVMRVNTX0VYVCkgKz0gd2V4dC5vCiBvYmotJChDT05GSUdfQ0ZHODAyMTEpICs9IGNmZzgwMjExLm8KIAotY2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vCitjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vCiBjZmc4MDIxMS0kKENPTkZJR19OTDgwMjExKSArPSBubDgwMjExLm8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGNmYzVmYzUuLjgwYWZhY2QgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMjMyLDYgKzIzMiw0NyBAQAogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAlpbnQgcmVzOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlib29sIGhhdmVfYmFuZCA9IGZhbHNlOworCWludCBpOworCisJLyogc2FuaXR5IGNoZWNrIHN1cHBvcnRlZCBiYW5kcy9jaGFubmVscyAqLworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisJCWlmICghc2JhbmQpCisJCQljb250aW51ZTsKKworCQlzYmFuZC0+YmFuZCA9IGJhbmQ7CisKKwkJaWYgKCFzYmFuZC0+bl9jaGFubmVscyB8fCAhc2JhbmQtPm5fYml0cmF0ZXMpIHsKKwkJCVdBUk5fT04oMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisJCQlzYmFuZC0+Y2hhbm5lbHNbaV0ub3JpZ19mbGFncyA9CisJCQkJc2JhbmQtPmNoYW5uZWxzW2ldLmZsYWdzOworCQkJc2JhbmQtPmNoYW5uZWxzW2ldLm9yaWdfbWFnID0KKwkJCQlzYmFuZC0+Y2hhbm5lbHNbaV0ubWF4X2FudGVubmFfZ2FpbjsKKwkJCXNiYW5kLT5jaGFubmVsc1tpXS5vcmlnX21wd3IgPQorCQkJCXNiYW5kLT5jaGFubmVsc1tpXS5tYXhfcG93ZXI7CisJCQlzYmFuZC0+Y2hhbm5lbHNbaV0uYmFuZCA9IGJhbmQ7CisJCX0KKworCQloYXZlX2JhbmQgPSB0cnVlOworCX0KKworCWlmICghaGF2ZV9iYW5kKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGFuZCBzZXQgdXAgYml0cmF0ZXMgKi8KKwlpZWVlODAyMTFfc2V0X2JpdHJhdGVfZmxhZ3Mod2lwaHkpOworCisJLyogc2V0IHVwIHJlZ3VsYXRvcnkgaW5mbyAqLworCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5KTsKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IGViMGY4NDYuLjdhMDJjMzUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtNzgsNCArNzgsNyBAQAogZXh0ZXJuIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2LAogCQkJICAgICAgIGNoYXIgKm5ld25hbWUpOwogCit2b2lkIGllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKICNlbmRpZiAvKiBfX05FVF9XSVJFTEVTU19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGUzYTIxNGYuLjJiZGQ0ZGQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtODEsNyArODEsMTIgQEAKIAlbTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUxdID0geyAudHlwZSA9IE5MQV9VMTYgfSwKIAlbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJCSAgICAgICAubGVuID0gTkw4MDIxMV9NQVhfU1VQUF9SQVRFUyB9LAorCVtOTDgwMjExX0FUVFJfU1RBX1BMSU5LX0FDVElPTl0gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAJW05MODAyMTFfQVRUUl9TVEFfVkxBTl0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfTU5UUl9GTEFHU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtOTDgwMjExX0FUVFJfTUVTSF9JRF0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCQkubGVuID0gSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTiB9LAorCVtOTDgwMjExX0FUVFJfTVBBVEhfTkVYVF9IT1BdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKIC8qIG1lc3NhZ2UgYnVpbGRpbmcgaGVscGVyICovCkBAIC05OCw2ICsxMDMsMTMgQEAKIAkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2KQogewogCXZvaWQgKmhkcjsKKwlzdHJ1Y3QgbmxhdHRyICpubF9iYW5kcywgKm5sX2JhbmQ7CisJc3RydWN0IG5sYXR0ciAqbmxfZnJlcXMsICpubF9mcmVxOworCXN0cnVjdCBubGF0dHIgKm5sX3JhdGVzLCAqbmxfcmF0ZTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwlpbnQgaTsKIAogCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLCBOTDgwMjExX0NNRF9ORVdfV0lQSFkpOwogCWlmICghaGRyKQpAQCAtMTA1LDYgKzExNyw3MyBAQAogCiAJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+aWR4KTsKIAlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLCB3aXBoeV9uYW1lKCZkZXYtPndpcGh5KSk7CisKKwlubF9iYW5kcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0JBTkRTKTsKKwlpZiAoIW5sX2JhbmRzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJaWYgKCFkZXYtPndpcGh5LmJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisKKwkJbmxfYmFuZCA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgYmFuZCk7CisJCWlmICghbmxfYmFuZCkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJCS8qIGFkZCBmcmVxdWVuY2llcyAqLworCQlubF9mcmVxcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9CQU5EX0FUVFJfRlJFUVMpOworCQlpZiAoIW5sX2ZyZXFzKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+d2lwaHkuYmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGkrKykgeworCQkJbmxfZnJlcSA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgaSk7CisJCQlpZiAoIW5sX2ZyZXEpCisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJCWNoYW4gPSAmZGV2LT53aXBoeS5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbaV07CisJCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfRlJFUSwKKwkJCQkgICAgY2hhbi0+Y2VudGVyX2ZyZXEpOworCisJCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0RJU0FCTEVEKTsKKwkJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikKKwkJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1BBU1NJVkVfU0NBTik7CisJCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKQorCQkJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSUJTUyk7CisJCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikKKwkJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1JBREFSKTsKKworCQkJbmxhX25lc3RfZW5kKG1zZywgbmxfZnJlcSk7CisJCX0KKworCQlubGFfbmVzdF9lbmQobXNnLCBubF9mcmVxcyk7CisKKwkJLyogYWRkIGJpdHJhdGVzICovCisJCW5sX3JhdGVzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0JBTkRfQVRUUl9SQVRFUyk7CisJCWlmICghbmxfcmF0ZXMpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT53aXBoeS5iYW5kc1tiYW5kXS0+bl9iaXRyYXRlczsgaSsrKSB7CisJCQlubF9yYXRlID0gbmxhX25lc3Rfc3RhcnQobXNnLCBpKTsKKwkJCWlmICghbmxfcmF0ZSkKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQkJcmF0ZSA9ICZkZXYtPndpcGh5LmJhbmRzW2JhbmRdLT5iaXRyYXRlc1tpXTsKKwkJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CSVRSQVRFX0FUVFJfUkFURSwKKwkJCQkgICAgcmF0ZS0+Yml0cmF0ZSk7CisJCQlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSkKKwkJCQlOTEFfUFVUX0ZMQUcobXNnLAorCQkJCQlOTDgwMjExX0JJVFJBVEVfQVRUUl8yR0haX1NIT1JUUFJFQU1CTEUpOworCisJCQlubGFfbmVzdF9lbmQobXNnLCBubF9yYXRlKTsKKwkJfQorCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX3JhdGVzKTsKKworCQlubGFfbmVzdF9lbmQobXNnLCBubF9iYW5kKTsKKwl9CisJbmxhX25lc3RfZW5kKG1zZywgbmxfYmFuZHMpOworCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTI2MiwxMiArMzQxLDQ1IEBACiAJcmV0dXJuIC1FTk9CVUZTOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbW50cl9mbGFnc19wb2xpY3lbTkw4MDIxMV9NTlRSX0ZMQUdfTUFYICsgMV0gPSB7CisJW05MODAyMTFfTU5UUl9GTEFHX0ZDU0ZBSUxdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfTU5UUl9GTEFHX1BMQ1BGQUlMXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtOTDgwMjExX01OVFJfRkxBR19DT05UUk9MXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtOTDgwMjExX01OVFJfRkxBR19PVEhFUl9CU1NdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfTU5UUl9GTEFHX0NPT0tfRlJBTUVTXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorfTsKKworc3RhdGljIGludCBwYXJzZV9tb25pdG9yX2ZsYWdzKHN0cnVjdCBubGF0dHIgKm5sYSwgdTMyICptbnRyZmxhZ3MpCit7CisJc3RydWN0IG5sYXR0ciAqZmxhZ3NbTkw4MDIxMV9NTlRSX0ZMQUdfTUFYICsgMV07CisJaW50IGZsYWc7CisKKwkqbW50cmZsYWdzID0gMDsKKworCWlmICghbmxhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChubGFfcGFyc2VfbmVzdGVkKGZsYWdzLCBOTDgwMjExX01OVFJfRkxBR19NQVgsCisJCQkgICAgIG5sYSwgbW50cl9mbGFnc19wb2xpY3kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoZmxhZyA9IDE7IGZsYWcgPD0gTkw4MDIxMV9NTlRSX0ZMQUdfTUFYOyBmbGFnKyspCisJCWlmIChmbGFnc1tmbGFnXSkKKwkJCSptbnRyZmxhZ3MgfD0gKDE8PGZsYWcpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IHZpZl9wYXJhbXMgcGFyYW1zOwogCWludCBlcnIsIGlmaW5kZXg7CiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdTMyIGZsYWdzOworCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZUWVBFXSkgewogCQl0eXBlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGVFlQRV0pOwpAQCAtMjg3LDggKzM5OSwxOCBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAKKwlpZiAodHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCisJICAgIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSkgeworCQlwYXJhbXMubWVzaF9pZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CisJCXBhcmFtcy5tZXNoX2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKKwl9CisKIAlydG5sX2xvY2soKTsKLQllcnIgPSBkcnYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZigmZHJ2LT53aXBoeSwgaWZpbmRleCwgdHlwZSk7CisJZXJyID0gcGFyc2VfbW9uaXRvcl9mbGFncyh0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgPworCQkJCSAgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01OVFJfRkxBR1NdIDogTlVMTCwKKwkJCQkgICZmbGFncyk7CisJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksIGlmaW5kZXgsCisJCQkJCSAgICB0eXBlLCBlcnIgPyBOVUxMIDogJmZsYWdzLCAmcGFyYW1zKTsKIAlydG5sX3VubG9jaygpOwogCiAgdW5sb2NrOgpAQCAtMjk5LDggKzQyMSwxMiBAQAogc3RhdGljIGludCBubDgwMjExX25ld19pbnRlcmZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgdmlmX3BhcmFtcyBwYXJhbXM7CiAJaW50IGVycjsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKKwl1MzIgZmxhZ3M7CisKKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZOQU1FXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjAsMTEgKzQ0NiwyMiBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAKKwlpZiAodHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCisJICAgIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSkgeworCQlwYXJhbXMubWVzaF9pZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CisJCXBhcmFtcy5tZXNoX2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKKwl9CisKIAlydG5sX2xvY2soKTsKKwllcnIgPSBwYXJzZV9tb25pdG9yX2ZsYWdzKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiA/CisJCQkJICBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTU5UUl9GTEFHU10gOiBOVUxMLAorCQkJCSAgJmZsYWdzKTsKIAllcnIgPSBkcnYtPm9wcy0+YWRkX3ZpcnR1YWxfaW50ZigmZHJ2LT53aXBoeSwKLQkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGTkFNRV0pLCB0eXBlKTsKKwkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGTkFNRV0pLAorCQl0eXBlLCBlcnIgPyBOVUxMIDogJmZsYWdzLCAmcGFyYW1zKTsKIAlydG5sX3VubG9jaygpOwogCisKICB1bmxvY2s6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCXJldHVybiBlcnI7CkBAIC03NTIsMTAgKzg4OSwxMCBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9zdGF0aW9uKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJaW50IGZsYWdzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXU4ICptYWNfYWRkciwgc3RydWN0IHN0YXRpb25fc3RhdHMgKnN0YXRzKQorCQkJCXU4ICptYWNfYWRkciwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCiB7CiAJdm9pZCAqaGRyOwotCXN0cnVjdCBubGF0dHIgKnN0YXRzYXR0cjsKKwlzdHJ1Y3QgbmxhdHRyICpzaW5mb2F0dHI7CiAKIAloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIHBpZCwgc2VxLCBmbGFncywgTkw4MDIxMV9DTURfTkVXX1NUQVRJT04pOwogCWlmICghaGRyKQpAQCAtNzY0LDIwICs5MDEsMjkgQEAKIAlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBkZXYtPmlmaW5kZXgpOwogCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgbWFjX2FkZHIpOwogCi0Jc3RhdHNhdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfU1RBX1NUQVRTKTsKLQlpZiAoIXN0YXRzYXR0cikKKwlzaW5mb2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVEFfSU5GTyk7CisJaWYgKCFzaW5mb2F0dHIpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmIChzdGF0cy0+ZmlsbGVkICYgU1RBVElPTl9TVEFUX0lOQUNUSVZFX1RJTUUpCi0JCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfU1RBVF9JTkFDVElWRV9USU1FLAotCQkJICAgIHN0YXRzLT5pbmFjdGl2ZV90aW1lKTsKLQlpZiAoc3RhdHMtPmZpbGxlZCAmIFNUQVRJT05fU1RBVF9SWF9CWVRFUykKLQkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9TVEFUX1JYX0JZVEVTLAotCQkJICAgIHN0YXRzLT5yeF9ieXRlcyk7Ci0JaWYgKHN0YXRzLT5maWxsZWQgJiBTVEFUSU9OX1NUQVRfVFhfQllURVMpCi0JCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfU1RBVF9UWF9CWVRFUywKLQkJCSAgICBzdGF0cy0+dHhfYnl0ZXMpOworCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19JTkFDVElWRV9USU1FLAorCQkJICAgIHNpbmZvLT5pbmFjdGl2ZV90aW1lKTsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19SWF9CWVRFUykKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTLAorCQkJICAgIHNpbmZvLT5yeF9ieXRlcyk7CisJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fVFhfQllURVMpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUywKKwkJCSAgICBzaW5mby0+dHhfYnl0ZXMpOworCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0xMSUQpCisJCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9TVEFfSU5GT19MTElELAorCQkJICAgIHNpbmZvLT5sbGlkKTsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19QTElEKQorCQlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfU1RBX0lORk9fUExJRCwKKwkJCSAgICBzaW5mby0+cGxpZCk7CisJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fUExJTktfU1RBVEUpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX1NUQV9JTkZPX1BMSU5LX1NUQVRFLAorCQkJICAgIHNpbmZvLT5wbGlua19zdGF0ZSk7CiAKLQlubGFfbmVzdF9lbmQobXNnLCBzdGF0c2F0dHIpOworCW5sYV9uZXN0X2VuZChtc2csIHNpbmZvYXR0cik7CiAKIAlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOwogCkBAIC03ODUsMTcgKzkzMSw4MCBAQAogCXJldHVybiBnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9kdW1wX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCWludCB3cF9pZHggPSAwOworCWludCBpZl9pZHggPSAwOworCWludCBzdGFfaWR4ID0gY2ItPmFyZ3NbMl07CisJaW50IHdwX3N0YXJ0ID0gY2ItPmFyZ3NbMF07CisJaW50IGlmX3N0YXJ0ID0gY2ItPmFyZ3NbMV07CisJc3RydWN0IHN0YXRpb25faW5mbyBzaW5mbzsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwlpbnQgZXJyOworCWludCBleGl0ID0gMDsKKworCS8qIFRPRE86IGZpbHRlciBieSBkZXZpY2UgKi8KKwltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGV4aXQpCisJCQlicmVhazsKKwkJaWYgKCsrd3BfaWR4IDwgd3Bfc3RhcnQpCisJCQljb250aW51ZTsKKwkJaWZfaWR4ID0gMDsKKworCQltdXRleF9sb2NrKCZkZXYtPmRldmxpc3RfbXR4KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkgeworCQkJaWYgKGV4aXQpCisJCQkJYnJlYWs7CisJCQlpZiAoKytpZl9pZHggPCBpZl9zdGFydCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghZGV2LT5vcHMtPmR1bXBfc3RhdGlvbikKKwkJCQljb250aW51ZTsKKworCQkJZm9yICg7OyArK3N0YV9pZHgpIHsKKwkJCQlydG5sX2xvY2soKTsKKwkJCQllcnIgPSBkZXYtPm9wcy0+ZHVtcF9zdGF0aW9uKCZkZXYtPndpcGh5LAorCQkJCQkJd2Rldi0+bmV0ZGV2LCBzdGFfaWR4LCBtYWNfYWRkciwKKwkJCQkJCSZzaW5mbyk7CisJCQkJcnRubF91bmxvY2soKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCXN0YV9pZHggPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKG5sODAyMTFfc2VuZF9zdGF0aW9uKHNrYiwKKwkJCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCQkJY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKKwkJCQkJCXdkZXYtPm5ldGRldiwgbWFjX2FkZHIsCisJCQkJCQkmc2luZm8pIDwgMCkgeworCQkJCQlleGl0ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmZGV2LT5kZXZsaXN0X210eCk7CisJfQorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKworCWNiLT5hcmdzWzBdID0gd3BfaWR4OworCWNiLT5hcmdzWzFdID0gaWZfaWR4OworCWNiLT5hcmdzWzJdID0gc3RhX2lkeDsKKworCXJldHVybiBza2ItPmxlbjsKK30KIAogc3RhdGljIGludCBubDgwMjExX2dldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBzdGF0aW9uX3N0YXRzIHN0YXRzOworCXN0cnVjdCBzdGF0aW9uX2luZm8gc2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKm1zZzsKIAl1OCAqbWFjX2FkZHIgPSBOVUxMOwogCi0JbWVtc2V0KCZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7CisJbWVtc2V0KCZzaW5mbywgMCwgc2l6ZW9mKHNpbmZvKSk7CiAKIAlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgxMiwxNSArMTAyMSwxOCBAQAogCX0KIAogCXJ0bmxfbG9jaygpOwotCWVyciA9IGRydi0+b3BzLT5nZXRfc3RhdGlvbigmZHJ2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnN0YXRzKTsKKwllcnIgPSBkcnYtPm9wcy0+Z2V0X3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZzaW5mbyk7CiAJcnRubF91bmxvY2soKTsKIAorCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1zZykKIAkJZ290byBvdXQ7CiAKIAlpZiAobmw4MDIxMV9zZW5kX3N0YXRpb24obXNnLCBpbmZvLT5zbmRfcGlkLCBpbmZvLT5zbmRfc2VxLCAwLAotCQkJCSBkZXYsIG1hY19hZGRyLCAmc3RhdHMpIDwgMCkKKwkJCQkgZGV2LCBtYWNfYWRkciwgJnNpbmZvKSA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKQEAgLTg5MSw2ICsxMTAzLDEwIEBACiAJCQkJJnBhcmFtcy5zdGF0aW9uX2ZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9QTElOS19BQ1RJT05dKQorCQlwYXJhbXMucGxpbmtfYWN0aW9uID0KKwkJICAgIG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9QTElOS19BQ1RJT05dKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtOTQ1LDcgKzExNjEsNyBAQAogCQlubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTXSk7CiAJcGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9CiAJCW5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSk7Ci0JcGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSk7CisJcGFyYW1zLmFpZCA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfQUlEXSk7CiAKIAlpZiAocGFyc2Vfc3RhdGlvbl9mbGFncyhpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX0ZMQUdTXSwKIAkJCQkmcGFyYW1zLnN0YXRpb25fZmxhZ3MpKQpAQCAtMTAwNSw2ICsxMjIxLDI3MyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX21wYXRoKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsCisJCQkJaW50IGZsYWdzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXU4ICpkc3QsIHU4ICpuZXh0X2hvcCwKKwkJCQlzdHJ1Y3QgbXBhdGhfaW5mbyAqcGluZm8pCit7CisJdm9pZCAqaGRyOworCXN0cnVjdCBubGF0dHIgKnBpbmZvYXR0cjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLCBOTDgwMjExX0NNRF9ORVdfU1RBVElPTik7CisJaWYgKCFoZHIpCisJCXJldHVybiAtMTsKKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCk7CisJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBkc3QpOworCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTVBBVEhfTkVYVF9IT1AsIEVUSF9BTEVOLCBuZXh0X2hvcCk7CisKKwlwaW5mb2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9NUEFUSF9JTkZPKTsKKwlpZiAoIXBpbmZvYXR0cikKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaWYgKHBpbmZvLT5maWxsZWQgJiBNUEFUSF9JTkZPX0ZSQU1FX1FMRU4pCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9NUEFUSF9JTkZPX0ZSQU1FX1FMRU4sCisJCQkgICAgcGluZm8tPmZyYW1lX3FsZW4pOworCWlmIChwaW5mby0+ZmlsbGVkICYgTVBBVEhfSU5GT19EU04pCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9NUEFUSF9JTkZPX0RTTiwKKwkJCSAgICBwaW5mby0+ZHNuKTsKKwlpZiAocGluZm8tPmZpbGxlZCAmIE1QQVRIX0lORk9fTUVUUklDKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfTVBBVEhfSU5GT19NRVRSSUMsCisJCQkgICAgcGluZm8tPm1ldHJpYyk7CisJaWYgKHBpbmZvLT5maWxsZWQgJiBNUEFUSF9JTkZPX0VYUFRJTUUpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9NUEFUSF9JTkZPX0VYUFRJTUUsCisJCQkgICAgcGluZm8tPmV4cHRpbWUpOworCWlmIChwaW5mby0+ZmlsbGVkICYgTVBBVEhfSU5GT19GTEFHUykKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfTVBBVEhfSU5GT19GTEFHUywKKwkJCSAgICBwaW5mby0+ZmxhZ3MpOworCWlmIChwaW5mby0+ZmlsbGVkICYgTVBBVEhfSU5GT19ESVNDT1ZFUllfVElNRU9VVCkKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX01QQVRIX0lORk9fRElTQ09WRVJZX1RJTUVPVVQsCisJCQkgICAgcGluZm8tPmRpc2NvdmVyeV90aW1lb3V0KTsKKwlpZiAocGluZm8tPmZpbGxlZCAmIE1QQVRIX0lORk9fRElTQ09WRVJZX1JFVFJJRVMpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX01QQVRIX0lORk9fRElTQ09WRVJZX1JFVFJJRVMsCisJCQkgICAgcGluZm8tPmRpc2NvdmVyeV9yZXRyaWVzKTsKKworCW5sYV9uZXN0X2VuZChtc2csIHBpbmZvYXR0cik7CisKKwlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCisgbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiBnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9kdW1wX21wYXRoKHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlpbnQgd3BfaWR4ID0gMDsKKwlpbnQgaWZfaWR4ID0gMDsKKwlpbnQgc3RhX2lkeCA9IGNiLT5hcmdzWzJdOworCWludCB3cF9zdGFydCA9IGNiLT5hcmdzWzBdOworCWludCBpZl9zdGFydCA9IGNiLT5hcmdzWzFdOworCXN0cnVjdCBtcGF0aF9pbmZvIHBpbmZvOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJdTggZHN0W0VUSF9BTEVOXTsKKwl1OCBuZXh0X2hvcFtFVEhfQUxFTl07CisJaW50IGVycjsKKwlpbnQgZXhpdCA9IDA7CisKKwkvKiBUT0RPOiBmaWx0ZXIgYnkgZGV2aWNlICovCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CisJCWlmIChleGl0KQorCQkJYnJlYWs7CisJCWlmICgrK3dwX2lkeCA8IHdwX3N0YXJ0KQorCQkJY29udGludWU7CisJCWlmX2lkeCA9IDA7CisKKwkJbXV0ZXhfbG9jaygmZGV2LT5kZXZsaXN0X210eCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJCWlmIChleGl0KQorCQkJCWJyZWFrOworCQkJaWYgKCsraWZfaWR4IDwgaWZfc3RhcnQpCisJCQkJY29udGludWU7CisJCQlpZiAoIWRldi0+b3BzLT5kdW1wX21wYXRoKQorCQkJCWNvbnRpbnVlOworCisJCQlmb3IgKDs7ICsrc3RhX2lkeCkgeworCQkJCXJ0bmxfbG9jaygpOworCQkJCWVyciA9IGRldi0+b3BzLT5kdW1wX21wYXRoKCZkZXYtPndpcGh5LAorCQkJCQkJd2Rldi0+bmV0ZGV2LCBzdGFfaWR4LCBkc3QsCisJCQkJCQluZXh0X2hvcCwgJnBpbmZvKTsKKwkJCQlydG5sX3VubG9jaygpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJc3RhX2lkeCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAobmw4MDIxMV9zZW5kX21wYXRoKHNrYiwKKwkJCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCQkJY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKKwkJCQkJCXdkZXYtPm5ldGRldiwgZHN0LCBuZXh0X2hvcCwKKwkJCQkJCSZwaW5mbykgPCAwKSB7CisJCQkJCWV4aXQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmxpc3RfbXR4KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCisJY2ItPmFyZ3NbMF0gPSB3cF9pZHg7CisJY2ItPmFyZ3NbMV0gPSBpZl9pZHg7CisJY2ItPmFyZ3NbMl0gPSBzdGFfaWR4OworCisJcmV0dXJuIHNrYi0+bGVuOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfZ2V0X21wYXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBtcGF0aF9pbmZvIHBpbmZvOworCXN0cnVjdCBza19idWZmICptc2c7CisJdTggKmRzdCA9IE5VTEw7CisJdTggbmV4dF9ob3BbRVRIX0FMRU5dOworCisJbWVtc2V0KCZwaW5mbywgMCwgc2l6ZW9mKHBpbmZvKSk7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCFkcnYtPm9wcy0+Z2V0X21wYXRoKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlydG5sX2xvY2soKTsKKwllcnIgPSBkcnYtPm9wcy0+Z2V0X21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3AsICZwaW5mbyk7CisJcnRubF91bmxvY2soKTsKKworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJZ290byBvdXQ7CisKKwlpZiAobmw4MDIxMV9zZW5kX21wYXRoKG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCQkgZGV2LCBkc3QsIG5leHRfaG9wLCAmcGluZm8pIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKKworCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWdvdG8gb3V0OworCisgb3V0X2ZyZWU6CisJbmxtc2dfZnJlZShtc2cpOworCisgb3V0OgorCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwlkZXZfcHV0KGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX3NldF9tcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCWludCBlcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1OCAqZHN0ID0gTlVMTDsKKwl1OCAqbmV4dF9ob3AgPSBOVUxMOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUF0pCisJCXJldHVybiAtRUlOVkFMOworCisJZHN0ID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOworCW5leHRfaG9wID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01QQVRIX05FWFRfSE9QXSk7CisKKwllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghZHJ2LT5vcHMtPmNoYW5nZV9tcGF0aCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJcnRubF9sb2NrKCk7CisJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wKTsKKwlydG5sX3VubG9jaygpOworCisgb3V0OgorCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwlkZXZfcHV0KGRldik7CisJcmV0dXJuIGVycjsKK30KK3N0YXRpYyBpbnQgbmw4MDIxMV9uZXdfbXBhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlpbnQgZXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdTggKmRzdCA9IE5VTEw7CisJdTggKm5leHRfaG9wID0gTlVMTDsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTVBBVEhfTkVYVF9IT1BdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKKwluZXh0X2hvcCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUF0pOworCisJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZkcnYsICZkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoIWRydi0+b3BzLT5hZGRfbXBhdGgpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCXJ0bmxfbG9jaygpOworCWVyciA9IGRydi0+b3BzLT5hZGRfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7CisJcnRubF91bmxvY2soKTsKKworIG91dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9kZWxfbXBhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlpbnQgZXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdTggKmRzdCA9IE5VTEw7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCisJCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCFkcnYtPm9wcy0+ZGVsX21wYXRoKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlydG5sX2xvY2soKTsKKwllcnIgPSBkcnYtPm9wcy0+ZGVsX21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCk7CisJcnRubF91bmxvY2soKTsKKworIG91dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmw4MDIxMV9vcHNbXSA9IHsKIAl7CiAJCS5jbWQgPSBOTDgwMjExX0NNRF9HRVRfV0lQSFksCkBAIC0xMDg5LDcgKzE1NzIsNyBAQAogCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9TVEFUSU9OLAogCQkuZG9pdCA9IG5sODAyMTFfZ2V0X3N0YXRpb24sCi0JCS8qIFRPRE86IGltcGxlbWVudCBkdW1waXQgKi8KKwkJLmR1bXBpdCA9IG5sODAyMTFfZHVtcF9zdGF0aW9uLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCiAJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAl9LApAQCAtMTExMSw2ICsxNTk0LDMxIEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX01QQVRILAorCQkuZG9pdCA9IG5sODAyMTFfZ2V0X21wYXRoLAorCQkuZHVtcGl0ID0gbmw4MDIxMV9kdW1wX21wYXRoLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9NUEFUSCwKKwkJLmRvaXQgPSBubDgwMjExX3NldF9tcGF0aCwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9ORVdfTVBBVEgsCisJCS5kb2l0ID0gbmw4MDIxMV9uZXdfbXBhdGgsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfREVMX01QQVRILAorCQkuZG9pdCA9IG5sODAyMTFfZGVsX21wYXRoLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAogfTsKIAogLyogbXVsdGljYXN0IGdyb3VwcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTQ4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDcJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBUaGlzIHJlZ3VsYXRvcnkgZG9tYWluIGNvbnRyb2wgaW1wbGVtZW50YXRpb24gaXMgaGlnaGx5IGluY29tcGxldGUsIGl0CisgKiBvbmx5IGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm90IHJlZ3Jlc3NpbmcgbWFjODAyMTEuCisgKgorICogRm9yIG5vdywgZHJpdmVycyBjYW4gcmVzdHJpY3QgdGhlIHNldCBvZiBhbGxvd2VkIGNoYW5uZWxzIGJ5IGVpdGhlcgorICogbm90IHJlZ2lzdGVyaW5nIHRob3NlIGNoYW5uZWxzIG9yIHNldHRpbmcgdGhlIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVECisgKiBmbGFnOyB0aGF0IGZsYWcgd2lsbCBvbmx5IGJlICpzZXQqIGJ5IHRoaXMgY29kZSwgbmV2ZXIgKmNsZWFyZWQuCisgKgorICogVGhlIHVzdWFsIGltcGxlbWVudGF0aW9uIGlzIGZvciBhIGRyaXZlciB0byByZWFkIGEgZGV2aWNlIEVFUFJPTSB0bworICogZGV0ZXJtaW5lIHdoaWNoIHJlZ3VsYXRvcnkgZG9tYWluIGl0IHNob3VsZCBiZSBvcGVyYXRpbmcgdW5kZXIsIHRoZW4KKyAqIGxvb2tpbmcgdXAgdGhlIGFsbG93YWJsZSBjaGFubmVscyBpbiBhIGRyaXZlci1sb2NhbCB0YWJsZSBhbmQgZmluYWxseQorICogcmVnaXN0ZXJpbmcgdGhvc2UgY2hhbm5lbHMgaW4gdGhlIHdpcGh5IHN0cnVjdHVyZS4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCBkcml2ZXJzIHRoYXQgdHJ1c3QgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGNvbnRyb2wgaGVyZQorICogd2lsbCByZWdpc3RlciBhIGNvbXBsZXRlIHNldCBvZiBjYXBhYmlsaXRpZXMgYW5kIHRoZSBjb250cm9sIGNvZGUKKyAqIHdpbGwgcmVzdHJpY3QgdGhlIHNldCBieSBzZXR0aW5nIHRoZSBJRUVFODAyMTFfQ0hBTl8qIGZsYWdzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L3dpcmVsZXNzLmg+CisjaW5jbHVkZSAiY29yZS5oIgorCitzdGF0aWMgY2hhciAqaWVlZTgwMjExX3JlZ2RvbSA9ICJVUyI7Cittb2R1bGVfcGFyYW0oaWVlZTgwMjExX3JlZ2RvbSwgY2hhcnAsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfcmVnZG9tLCAiSUVFRSA4MDIuMTEgcmVndWxhdG9yeSBkb21haW4gY29kZSIpOworCitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfcmFuZ2UgeworCXNob3J0IHN0YXJ0X2ZyZXE7CisJc2hvcnQgZW5kX2ZyZXE7CisJaW50IG1heF9wb3dlcjsKKwlpbnQgbWF4X2FudGVubmFfZ2FpbjsKKwl1MzIgZmxhZ3M7Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB7CisJY29uc3QgY2hhciAqY29kZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfcmFuZ2UgKnJhbmdlczsKKwlpbnQgbl9yYW5nZXM7Cit9OworCisjZGVmaW5lIFJBTkdFX1BXUihfc3RhcnQsIF9lbmQsIF9wd3IsIF9hZywgX2ZsYWdzKQlcCisJeyBfc3RhcnQsIF9lbmQsIF9wd3IsIF9hZywgX2ZsYWdzIH0KKworCisvKgorICogSWRlYWxseSwgaW4gdGhlIGZ1dHVyZSwgdGhlc2UgZGVmaW5pdGlvbnMgd2lsbCBiZSBsb2FkZWQgZnJvbSBhCisgKiB1c2Vyc3BhY2UgdGFibGUgdmlhIHNvbWUgZGFlbW9uLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3JhbmdlIGllZWU4MDIxMV9VU19jaGFubmVsc1tdID0geworCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLworCVJBTkdFX1BXUigyNDEyLCAyNDYyLCAyNywgNiwgMCksCisJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVsIDM2Ki8KKwlSQU5HRV9QV1IoNTE4MCwgNTE4MCwgMjMsIDYsIDApLAorCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbCA0MCovCisJUkFOR0VfUFdSKDUyMDAsIDUyMDAsIDIzLCA2LCAwKSwKKwkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgNDQqLworCVJBTkdFX1BXUig1MjIwLCA1MjIwLCAyMywgNiwgMCksCisJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyA0OC4uNjQgKi8KKwlSQU5HRV9QV1IoNTI0MCwgNTMyMCwgMjMsIDYsIDApLAorCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMTQ5Li4xNjUsIG91dGRvb3IgKi8KKwlSQU5HRV9QV1IoNTc0NSwgNTgyNSwgMzAsIDYsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9yYW5nZSBpZWVlODAyMTFfSlBfY2hhbm5lbHNbXSA9IHsKKwkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMS4uMTQgKi8KKwlSQU5HRV9QV1IoMjQxMiwgMjQ4NCwgMjAsIDYsIDApLAorCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMzQuLjQ4ICovCisJUkFOR0VfUFdSKDUxNzAsIDUyNDAsIDIwLCA2LCBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pLAorCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgNTIuLjY0ICovCisJUkFOR0VfUFdSKDUyNjAsIDUzMjAsIDIwLCA2LCBJRUVFODAyMTFfQ0hBTl9OT19JQlNTIHwKKwkJCQkgICAgIElFRUU4MDIxMV9DSEFOX1JBREFSKSwKK307CisKKyNkZWZpbmUgUkVHRE9NKF9jb2RlKQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuY29kZSA9IF9fc3RyaW5naWZ5KF9jb2RlKSwJCQkJXAorCQkucmFuZ2VzID0gaWVlZTgwMjExXyAjI19jb2RlIyMgX2NoYW5uZWxzLAkJXAorCQkubl9yYW5nZXMgPSBBUlJBWV9TSVpFKGllZWU4MDIxMV8gIyNfY29kZSMjIF9jaGFubmVscyksCVwKKwl9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBpZWVlODAyMTFfcmVnZG9tc1tdID0geworCVJFR0RPTShVUyksCisJUkVHRE9NKEpQKSwKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpnZXRfcmVnZG9tKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9yYW5nZQorCWllZWU4MDIxMV93b3JsZF9jaGFubmVsc1tdID0geworCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMS4uMTEgKi8KKwkJUkFOR0VfUFdSKDI0MTIsIDI0NjIsIDI3LCA2LCAwKSwKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiByZWdkb21fd29ybGQgPSBSRUdET00od29ybGQpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWVlZTgwMjExX3JlZ2RvbXMpOyBpKyspCisJCWlmIChzdHJjbXAoaWVlZTgwMjExX3JlZ2RvbSwgaWVlZTgwMjExX3JlZ2RvbXNbaV0uY29kZSkgPT0gMCkKKwkJCXJldHVybiAmaWVlZTgwMjExX3JlZ2RvbXNbaV07CisKKwlyZXR1cm4gJnJlZ2RvbV93b3JsZDsKK30KKworCitzdGF0aWMgdm9pZCBoYW5kbGVfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCit7CisJaW50IGk7CisJdTMyIGZsYWdzID0gY2hhbi0+b3JpZ19mbGFnczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfcmFuZ2UgKnJnID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCByZC0+bl9yYW5nZXM7IGkrKykgeworCQlpZiAocmQtPnJhbmdlc1tpXS5zdGFydF9mcmVxIDw9IGNoYW4tPmNlbnRlcl9mcmVxICYmCisJCSAgICBjaGFuLT5jZW50ZXJfZnJlcSA8PSByZC0+cmFuZ2VzW2ldLmVuZF9mcmVxKSB7CisJCQlyZyA9ICZyZC0+cmFuZ2VzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXJnKSB7CisJCS8qIG5vdCBmb3VuZCAqLworCQlmbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKKwkJY2hhbi0+ZmxhZ3MgPSBmbGFnczsKKwkJcmV0dXJuOworCX0KKworCWNoYW4tPmZsYWdzID0gZmxhZ3M7CisJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IG1pbihjaGFuLT5vcmlnX21hZywKKwkJCQkJIHJnLT5tYXhfYW50ZW5uYV9nYWluKTsKKwlpZiAoY2hhbi0+b3JpZ19tcHdyKQorCQljaGFuLT5tYXhfcG93ZXIgPSBtaW4oY2hhbi0+b3JpZ19tcHdyLCByZy0+bWF4X3Bvd2VyKTsKKwllbHNlCisJCWNoYW4tPm1heF9wb3dlciA9IHJnLT5tYXhfcG93ZXI7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCWhhbmRsZV9jaGFubmVsKCZzYmFuZC0+Y2hhbm5lbHNbaV0sIHJkKTsKK30KKwordm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQgPSBnZXRfcmVnZG9tKCk7CisKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKQorCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJaGFuZGxlX2JhbmQod2lwaHktPmJhbmRzW2JhbmRdLCByZCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQ0MjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIFdpcmVsZXNzIHV0aWxpdHkgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDcJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqLworI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisKK2ludCBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koaW50IGNoYW4pCit7CisJaWYgKGNoYW4gPCAxNCkKKwkJcmV0dXJuIDI0MDcgKyBjaGFuICogNTsKKworCWlmIChjaGFuID09IDE0KQorCQlyZXR1cm4gMjQ4NDsKKworCS8qIEZJWE1FOiA4MDIuMTFqIDE3LjMuOC4zLjIgKi8KKwlyZXR1cm4gKGNoYW4gKyAxMDAwKSAqIDU7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSk7CisKK2ludCBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoaW50IGZyZXEpCit7CisJaWYgKGZyZXEgPT0gMjQ4NCkKKwkJcmV0dXJuIDE0OworCisJaWYgKGZyZXEgPCAyNDg0KQorCQlyZXR1cm4gKGZyZXEgLSAyNDA3KSAvIDU7CisKKwkvKiBGSVhNRTogODAyLjExaiAxNy4zLjguMy4yICovCisJcmV0dXJuIGZyZXEvNSAtIDEwMDA7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCk7CisKK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqX19pZWVlODAyMTFfZ2V0X2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJCSAgaW50IGZyZXEpCit7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCWludCBpOworCisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCQlpZiAoIXNiYW5kKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCWlmIChzYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEgPT0gZnJlcSkKKwkJCQlyZXR1cm4gJnNiYW5kLT5jaGFubmVsc1tpXTsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChfX2llZWU4MDIxMV9nZXRfY2hhbm5lbCk7CisKK3N0YXRpYyB2b2lkIHNldF9tYW5kYXRvcnlfZmxhZ3NfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwlpbnQgaSwgd2FudDsKKworCXN3aXRjaCAoYmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJd2FudCA9IDM7CisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUgPT0gNjAgfHwKKwkJCSAgICBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSA9PSAxMjAgfHwKKwkJCSAgICBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSA9PSAyNDApIHsKKwkJCQlzYmFuZC0+Yml0cmF0ZXNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZX0E7CisJCQkJd2FudC0tOworCQkJfQorCQl9CisJCVdBUk5fT04od2FudCk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJd2FudCA9IDc7CisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUgPT0gMTApIHsKKwkJCQlzYmFuZC0+Yml0cmF0ZXNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZX0IgfAorCQkJCQlJRUVFODAyMTFfUkFURV9NQU5EQVRPUllfRzsKKwkJCQl3YW50LS07CisJCQl9CisKKwkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSA9PSAyMCB8fAorCQkJICAgIHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlID09IDU1IHx8CisJCQkgICAgc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUgPT0gMTEwIHx8CisJCQkgICAgc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUgPT0gNjAgfHwKKwkJCSAgICBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSA9PSAxMjAgfHwKKwkJCSAgICBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSA9PSAyNDApIHsKKwkJCQlzYmFuZC0+Yml0cmF0ZXNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX1JBVEVfTUFOREFUT1JZX0c7CisJCQkJd2FudC0tOworCQkJfQorCisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUgIT0gMTAgJiYKKwkJCSAgICBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZSAhPSAyMCAmJgorCQkJICAgIHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlICE9IDU1ICYmCisJCQkgICAgc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGUgIT0gMTEwKQorCQkJCXNiYW5kLT5iaXRyYXRlc1tpXS5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfUkFURV9FUlBfRzsKKwkJfQorCQlXQVJOX09OKHdhbnQgIT0gMCAmJiB3YW50ICE9IDMgJiYgd2FudCAhPSA2KTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfTlVNX0JBTkRTOgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKKwkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCXNldF9tYW5kYXRvcnlfZmxhZ3NfYmFuZCh3aXBoeS0+YmFuZHNbYmFuZF0sIGJhbmQpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQuYyBiL25ldC93aXJlbGVzcy93ZXh0LmMKaW5kZXggMmM1NjliNi4uOTQ3MTg4YSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC5jCkBAIC0xMTU3LDcgKzExNTcsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVycjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybjsKIAogCXNrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS9hZl94MjUuYyBiL25ldC94MjUvYWZfeDI1LmMKaW5kZXggMzM5Y2E0YS4uNmJhNjdjNSAxMDA2NDQKLS0tIGEvbmV0L3gyNS9hZl94MjUuYworKysgYi9uZXQveDI1L2FmX3gyNS5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCXN0cnVjdCB4MjVfbmVpZ2ggKm5iOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfWDI1CkBAIC01NDksNyArNTQ5LDcgQEAKIAlpZiAob3NrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUKQogCQlnb3RvIG91dDsKIAotCWlmICgoc2sgPSB4MjVfYWxsb2Nfc29ja2V0KG9zay0+c2tfbmV0KSkgPT0gTlVMTCkKKwlpZiAoKHNrID0geDI1X2FsbG9jX3NvY2tldChzb2NrX25ldChvc2spKSkgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAl4MjUgPSB4MjVfc2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfZGV2LmMgYi9uZXQveDI1L3gyNV9kZXYuYwppbmRleCBmMDY3OWQyLi4zZmYyMDZjIDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9kZXYuYworKysgYi9uZXQveDI1L3gyNV9kZXYuYwpAQCAtOTUsNyArOTUsNyBAQAogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXN0cnVjdCB4MjVfbmVpZ2ggKm5iOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJZ290byBkcm9wOwogCiAJbnNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9wcm9jLmMgYi9uZXQveDI1L3gyNV9wcm9jLmMKaW5kZXggM2Y1MmIwOS4uMWFmYTQ0ZCAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfcHJvYy5jCisrKyBiL25ldC94MjUveDI1X3Byb2MuYwpAQCAtMzEyLDIwICszMTIsMTggQEAKIAlpZiAoIXgyNV9wcm9jX2RpcikKIAkJZ290byBvdXQ7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoInJvdXRlIiwgU19JUlVHTywgeDI1X3Byb2NfZGlyKTsKKwlwID0gcHJvY19jcmVhdGUoInJvdXRlIiwgU19JUlVHTywgeDI1X3Byb2NfZGlyLCAmeDI1X3NlcV9yb3V0ZV9mb3BzKTsKIAlpZiAoIXApCiAJCWdvdG8gb3V0X3JvdXRlOwotCXAtPnByb2NfZm9wcyA9ICZ4MjVfc2VxX3JvdXRlX2ZvcHM7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoInNvY2tldCIsIFNfSVJVR08sIHgyNV9wcm9jX2Rpcik7CisJcCA9IHByb2NfY3JlYXRlKCJzb2NrZXQiLCBTX0lSVUdPLCB4MjVfcHJvY19kaXIsICZ4MjVfc2VxX3NvY2tldF9mb3BzKTsKIAlpZiAoIXApCiAJCWdvdG8gb3V0X3NvY2tldDsKLQlwLT5wcm9jX2ZvcHMgPSAmeDI1X3NlcV9zb2NrZXRfZm9wczsKIAotCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiZm9yd2FyZCIsIFNfSVJVR08sIHgyNV9wcm9jX2Rpcik7CisJcCA9IHByb2NfY3JlYXRlKCJmb3J3YXJkIiwgU19JUlVHTywgeDI1X3Byb2NfZGlyLAorCQkJJngyNV9zZXFfZm9yd2FyZF9mb3BzKTsKIAlpZiAoIXApCiAJCWdvdG8gb3V0X2ZvcndhcmQ7Ci0JcC0+cHJvY19mb3BzID0gJngyNV9zZXFfZm9yd2FyZF9mb3BzOwogCXJjID0gMDsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCmluZGV4IDYyMTg4YzYuLjc1Mjc5NDAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuYworKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKQEAgLTg0LDE0ICs4NCwyMSBAQAogCiBpbnQgeGZybV9wcmVwYXJlX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCB4ZnJtX21vZGUgKmlubmVyX21vZGUgPSB4LT5pbm5lcl9tb2RlOwogCWludCBlcnI7CiAKIAllcnIgPSB4LT5vdXRlcl9tb2RlLT5hZmluZm8tPmV4dHJhY3RfaW5wdXQoeCwgc2tiKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jc2tiLT5wcm90b2NvbCA9IHgtPmlubmVyX21vZGUtPmFmaW5mby0+ZXRoX3Byb3RvOwotCXJldHVybiB4LT5pbm5lcl9tb2RlLT5pbnB1dDIoeCwgc2tiKTsKKwlpZiAoeC0+c2VsLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKKwkJaW5uZXJfbW9kZSA9IHhmcm1faXAyaW5uZXJfbW9kZSh4LCBYRlJNX01PREVfU0tCX0NCKHNrYiktPnByb3RvY29sKTsKKwkJaWYgKGlubmVyX21vZGUgPT0gTlVMTCkKKwkJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCX0KKworCXNrYi0+cHJvdG9jb2wgPSBpbm5lcl9tb2RlLT5hZmluZm8tPmV0aF9wcm90bzsKKwlyZXR1cm4gaW5uZXJfbW9kZS0+aW5wdXQyKHgsIHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fcHJlcGFyZV9pbnB1dCk7CiAKQEAgLTEwMSw2ICsxMDgsNyBAQAogCV9fYmUzMiBzZXE7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAJeGZybV9hZGRyZXNzX3QgKmRhZGRyOworCXN0cnVjdCB4ZnJtX21vZGUgKmlubmVyX21vZGU7CiAJdW5zaWduZWQgaW50IGZhbWlseTsKIAlpbnQgZGVjYXBzID0gMDsKIAlpbnQgYXN5bmMgPSAwOwpAQCAtMjA3LDcgKzIxNSwxNSBAQAogCiAJCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+cHJvdG9jb2wgPSBuZXh0aGRyOwogCi0JCWlmICh4LT5pbm5lcl9tb2RlLT5pbnB1dCh4LCBza2IpKSB7CisJCWlubmVyX21vZGUgPSB4LT5pbm5lcl9tb2RlOworCisJCWlmICh4LT5zZWwuZmFtaWx5ID09IEFGX1VOU1BFQykgeworCQkJaW5uZXJfbW9kZSA9IHhmcm1faXAyaW5uZXJfbW9kZSh4LCBYRlJNX01PREVfU0tCX0NCKHNrYiktPnByb3RvY29sKTsKKwkJCWlmIChpbm5lcl9tb2RlID09IE5VTEwpCisJCQkJZ290byBkcm9wOworCQl9CisKKwkJaWYgKGlubmVyX21vZGUtPmlucHV0KHgsIHNrYikpIHsKIAkJCVhGUk1fSU5DX1NUQVRTKExJTlVYX01JQl9YRlJNSU5TVEFURU1PREVFUlJPUik7CiAJCQlnb3RvIGRyb3A7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jCmluZGV4IDU2OWQzNzcuLjI1MTkxMjkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKKysrIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJCWlmICgheCkKIAkJCXJldHVybiBkc3Rfb3V0cHV0KHNrYik7CiAKLQkJZXJyID0gbmZfaG9vayh4LT5pbm5lcl9tb2RlLT5hZmluZm8tPmZhbWlseSwKKwkJZXJyID0gbmZfaG9vayhza2ItPmRzdC0+b3BzLT5mYW1pbHksCiAJCQkgICAgICBORl9JTkVUX1BPU1RfUk9VVElORywgc2tiLAogCQkJICAgICAgTlVMTCwgc2tiLT5kc3QtPmRldiwgeGZybV9vdXRwdXQyKTsKIAkJaWYgKHVubGlrZWx5KGVyciAhPSAxKSkKQEAgLTE5Myw0ICsxOTMsMjAgQEAKIAogCXJldHVybiB4ZnJtX291dHB1dDIoc2tiKTsKIH0KKworaW50IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHhmcm1fbW9kZSAqaW5uZXJfbW9kZTsKKwlpZiAoeC0+c2VsLmZhbWlseSA9PSBBRl9VTlNQRUMpCisJCWlubmVyX21vZGUgPSB4ZnJtX2lwMmlubmVyX21vZGUoeCwKKwkJCQl4ZnJtX2FmMnByb3RvKHNrYi0+ZHN0LT5vcHMtPmZhbWlseSkpOworCWVsc2UKKwkJaW5uZXJfbW9kZSA9IHgtPmlubmVyX21vZGU7CisKKwlpZiAoaW5uZXJfbW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKwlyZXR1cm4gaW5uZXJfbW9kZS0+YWZpbmZvLT5leHRyYWN0X291dHB1dCh4LCBza2IpOworfQorCiBFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dCk7CitFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2lubmVyX2V4dHJhY3Rfb3V0cHV0KTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDQ3MjE5ZjkuLmFiNGQwZTUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtNDYsNiArNDYsNyBAQAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyh4ZnJtX3BvbGljeV9sb2NrKTsKIAorc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgeGZybV9wb2xpY3lfYnl0eXBlW1hGUk1fUE9MSUNZX1RZUEVfTUFYXTsKIHVuc2lnbmVkIGludCB4ZnJtX3BvbGljeV9jb3VudFtYRlJNX1BPTElDWV9NQVgqMl07CiBFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2NvdW50KTsKIApAQCAtOTYsMjUgKzk3LDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9kc3RfbG9va3VwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdG9zLAotCQkJCQkJaW50IGZhbWlseSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqX194ZnJtX2RzdF9sb29rdXAoaW50IHRvcywKKwkJCQkJCSAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAorCQkJCQkJICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCisJCQkJCQkgIGludCBmYW1pbHkpCiB7Ci0JeGZybV9hZGRyZXNzX3QgKnNhZGRyID0gJngtPnByb3BzLnNhZGRyOwotCXhmcm1fYWRkcmVzc190ICpkYWRkciA9ICZ4LT5pZC5kYWRkcjsKIAlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCi0JaWYgKHgtPnR5cGUtPmZsYWdzICYgWEZSTV9UWVBFX0xPQ0FMX0NPQUREUikKLQkJc2FkZHIgPSB4LT5jb2FkZHI7Ci0JaWYgKHgtPnR5cGUtPmZsYWdzICYgWEZSTV9UWVBFX1JFTU9URV9DT0FERFIpCi0JCWRhZGRyID0geC0+Y29hZGRyOwotCiAJYWZpbmZvID0geGZybV9wb2xpY3lfZ2V0X2FmaW5mbyhmYW1pbHkpOwogCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCiAJCXJldHVybiBFUlJfUFRSKC1FQUZOT1NVUFBPUlQpOwogCiAJZHN0ID0gYWZpbmZvLT5kc3RfbG9va3VwKHRvcywgc2FkZHIsIGRhZGRyKTsKKwogCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKKworCXJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9kc3RfbG9va3VwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdG9zLAorCQkJCQkJeGZybV9hZGRyZXNzX3QgKnByZXZfc2FkZHIsCisJCQkJCQl4ZnJtX2FkZHJlc3NfdCAqcHJldl9kYWRkciwKKwkJCQkJCWludCBmYW1pbHkpCit7CisJeGZybV9hZGRyZXNzX3QgKnNhZGRyID0gJngtPnByb3BzLnNhZGRyOworCXhmcm1fYWRkcmVzc190ICpkYWRkciA9ICZ4LT5pZC5kYWRkcjsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CisKKwlpZiAoeC0+dHlwZS0+ZmxhZ3MgJiBYRlJNX1RZUEVfTE9DQUxfQ09BRERSKSB7CisJCXNhZGRyID0geC0+Y29hZGRyOworCQlkYWRkciA9IHByZXZfZGFkZHI7CisJfQorCWlmICh4LT50eXBlLT5mbGFncyAmIFhGUk1fVFlQRV9SRU1PVEVfQ09BRERSKSB7CisJCXNhZGRyID0gcHJldl9zYWRkcjsKKwkJZGFkZHIgPSB4LT5jb2FkZHI7CisJfQorCisJZHN0ID0gX194ZnJtX2RzdF9sb29rdXAodG9zLCBzYWRkciwgZGFkZHIsIGZhbWlseSk7CisKKwlpZiAoIUlTX0VSUihkc3QpKSB7CisJCWlmIChwcmV2X3NhZGRyICE9IHNhZGRyKQorCQkJbWVtY3B5KHByZXZfc2FkZHIsIHNhZGRyLCAgc2l6ZW9mKCpwcmV2X3NhZGRyKSk7CisJCWlmIChwcmV2X2RhZGRyICE9IGRhZGRyKQorCQkJbWVtY3B5KHByZXZfZGFkZHIsIGRhZGRyLCAgc2l6ZW9mKCpwcmV2X2RhZGRyKSk7CisJfQorCiAJcmV0dXJuIGRzdDsKIH0KIApAQCAtMjA4LDYgKzIzNiw3IEBACiAJcG9saWN5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhmcm1fcG9saWN5KSwgZ2ZwKTsKIAogCWlmIChwb2xpY3kpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJnBvbGljeS0+Ynl0eXBlKTsKIAkJSU5JVF9ITElTVF9OT0RFKCZwb2xpY3ktPmJ5ZHN0KTsKIAkJSU5JVF9ITElTVF9OT0RFKCZwb2xpY3ktPmJ5aWR4KTsKIAkJcndsb2NrX2luaXQoJnBvbGljeS0+bG9jayk7CkBAIC0yMzAsNyArMjU5LDExIEBACiAJaWYgKGRlbF90aW1lcigmcG9saWN5LT50aW1lcikpCiAJCUJVRygpOwogCi0Jc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShwb2xpY3kpOworCXdyaXRlX2xvY2tfYmgoJnhmcm1fcG9saWN5X2xvY2spOworCWxpc3RfZGVsKCZwb2xpY3ktPmJ5dHlwZSk7CisJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKKworCXNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUocG9saWN5LT5zZWN1cml0eSk7CiAJa2ZyZWUocG9saWN5KTsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfZGVzdHJveSk7CkBAIC0zMzEsMTUgKzM2NCwzMSBAQAogCQkJCSAgIHN0cnVjdCBobGlzdF9oZWFkICpuZHN0dGFibGUsCiAJCQkJICAgdW5zaWduZWQgaW50IG5oYXNobWFzaykKIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnksICp0bXA7CisJc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5LCAqdG1wLCAqZW50cnkwID0gTlVMTDsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbDsKKwl1bnNpZ25lZCBpbnQgaDAgPSAwOwogCityZWRvOgogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9sLCBlbnRyeSwgdG1wLCBsaXN0LCBieWRzdCkgewogCQl1bnNpZ25lZCBpbnQgaDsKIAogCQloID0gX19hZGRyX2hhc2goJnBvbC0+c2VsZWN0b3IuZGFkZHIsICZwb2wtPnNlbGVjdG9yLnNhZGRyLAogCQkJCXBvbC0+ZmFtaWx5LCBuaGFzaG1hc2spOwotCQlobGlzdF9hZGRfaGVhZCgmcG9sLT5ieWRzdCwgbmRzdHRhYmxlK2gpOworCQlpZiAoIWVudHJ5MCkgeworCQkJaGxpc3RfZGVsKGVudHJ5KTsKKwkJCWhsaXN0X2FkZF9oZWFkKCZwb2wtPmJ5ZHN0LCBuZHN0dGFibGUraCk7CisJCQloMCA9IGg7CisJCX0gZWxzZSB7CisJCQlpZiAoaCAhPSBoMCkKKwkJCQljb250aW51ZTsKKwkJCWhsaXN0X2RlbChlbnRyeSk7CisJCQlobGlzdF9hZGRfYWZ0ZXIoZW50cnkwLCAmcG9sLT5ieWRzdCk7CisJCX0KKwkJZW50cnkwID0gZW50cnk7CisJfQorCWlmICghaGxpc3RfZW1wdHkobGlzdCkpIHsKKwkJZW50cnkwID0gTlVMTDsKKwkJZ290byByZWRvOwogCX0KIH0KIApAQCAtNTY4LDYgKzYxNyw3IEBACiAJcG9saWN5LT5jdXJsZnQudXNlX3RpbWUgPSAwOwogCWlmICghbW9kX3RpbWVyKCZwb2xpY3ktPnRpbWVyLCBqaWZmaWVzICsgSFopKQogCQl4ZnJtX3BvbF9ob2xkKHBvbGljeSk7CisJbGlzdF9hZGRfdGFpbCgmcG9saWN5LT5ieXR5cGUsICZ4ZnJtX3BvbGljeV9ieXR5cGVbcG9saWN5LT50eXBlXSk7CiAJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKIAogCWlmIChkZWxwb2wpCkBAIC02MjYsNyArNjc2LDggQEAKIAkJICAgIHhmcm1fc2VjX2N0eF9tYXRjaChjdHgsIHBvbC0+c2VjdXJpdHkpKSB7CiAJCQl4ZnJtX3BvbF9ob2xkKHBvbCk7CiAJCQlpZiAoZGVsZXRlKSB7Ci0JCQkJKmVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZShwb2wpOworCQkJCSplcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9kZWxldGUoCisJCQkJCQkJCXBvbC0+c2VjdXJpdHkpOwogCQkJCWlmICgqZXJyKSB7CiAJCQkJCXdyaXRlX3VubG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CiAJCQkJCXJldHVybiBwb2w7CkBAIC02NjgsNyArNzE5LDggQEAKIAkJaWYgKHBvbC0+dHlwZSA9PSB0eXBlICYmIHBvbC0+aW5kZXggPT0gaWQpIHsKIAkJCXhmcm1fcG9sX2hvbGQocG9sKTsKIAkJCWlmIChkZWxldGUpIHsKLQkJCQkqZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKHBvbCk7CisJCQkJKmVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZSgKKwkJCQkJCQkJcG9sLT5zZWN1cml0eSk7CiAJCQkJaWYgKCplcnIpIHsKIAkJCQkJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKIAkJCQkJcmV0dXJuIHBvbDsKQEAgLTcwNiw3ICs3NTgsNyBAQAogCQkJCSAgICAgJnhmcm1fcG9saWN5X2luZXhhY3RbZGlyXSwgYnlkc3QpIHsKIAkJCWlmIChwb2wtPnR5cGUgIT0gdHlwZSkKIAkJCQljb250aW51ZTsKLQkJCWVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZShwb2wpOworCQkJZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKHBvbC0+c2VjdXJpdHkpOwogCQkJaWYgKGVycikgewogCQkJCXhmcm1fYXVkaXRfcG9saWN5X2RlbGV0ZShwb2wsIDAsCiAJCQkJCQkJIGF1ZGl0X2luZm8tPmxvZ2ludWlkLApAQCAtNzIwLDcgKzc3Miw4IEBACiAJCQkJCSAgICAgYnlkc3QpIHsKIAkJCQlpZiAocG9sLT50eXBlICE9IHR5cGUpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZShwb2wpOworCQkJCWVyciA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZSgKKwkJCQkJCQkJcG9sLT5zZWN1cml0eSk7CiAJCQkJaWYgKGVycikgewogCQkJCQl4ZnJtX2F1ZGl0X3BvbGljeV9kZWxldGUocG9sLCAwLAogCQkJCQkJCWF1ZGl0X2luZm8tPmxvZ2ludWlkLApAQCAtODA2LDU3ICs4NTksNjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfZmx1c2gpOwogCi1pbnQgeGZybV9wb2xpY3lfd2Fsayh1OCB0eXBlLCBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9wb2xpY3kgKiwgaW50LCBpbnQsIHZvaWQqKSwKK2ludCB4ZnJtX3BvbGljeV93YWxrKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrLAorCQkgICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3BvbGljeSAqLCBpbnQsIGludCwgdm9pZCopLAogCQkgICAgIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsICpsYXN0ID0gTlVMTDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnk7Ci0JaW50IGRpciwgbGFzdF9kaXIgPSAwLCBjb3VudCwgZXJyb3I7CisJc3RydWN0IHhmcm1fcG9saWN5ICpvbGQsICpwb2wsICpsYXN0ID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOwogCisJaWYgKHdhbGstPnR5cGUgPj0gWEZSTV9QT0xJQ1lfVFlQRV9NQVggJiYKKwkgICAgd2Fsay0+dHlwZSAhPSBYRlJNX1BPTElDWV9UWVBFX0FOWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod2Fsay0+cG9saWN5ID09IE5VTEwgJiYgd2Fsay0+Y291bnQgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlvbGQgPSBwb2wgPSB3YWxrLT5wb2xpY3k7CisJd2Fsay0+cG9saWN5ID0gTlVMTDsKIAlyZWFkX2xvY2tfYmgoJnhmcm1fcG9saWN5X2xvY2spOwotCWNvdW50ID0gMDsKIAotCWZvciAoZGlyID0gMDsgZGlyIDwgMipYRlJNX1BPTElDWV9NQVg7IGRpcisrKSB7Ci0JCXN0cnVjdCBobGlzdF9oZWFkICp0YWJsZSA9IHhmcm1fcG9saWN5X2J5ZHN0W2Rpcl0udGFibGU7Ci0JCWludCBpOworCWZvciAoOyB3YWxrLT5jdXJfdHlwZSA8IFhGUk1fUE9MSUNZX1RZUEVfTUFYOyB3YWxrLT5jdXJfdHlwZSsrKSB7CisJCWlmICh3YWxrLT50eXBlICE9IHdhbGstPmN1cl90eXBlICYmCisJCSAgICB3YWxrLT50eXBlICE9IFhGUk1fUE9MSUNZX1RZUEVfQU5ZKQorCQkJY29udGludWU7CiAKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkocG9sLCBlbnRyeSwKLQkJCQkgICAgICZ4ZnJtX3BvbGljeV9pbmV4YWN0W2Rpcl0sIGJ5ZHN0KSB7Ci0JCQlpZiAocG9sLT50eXBlICE9IHR5cGUpCisJCWlmIChwb2wgPT0gTlVMTCkgeworCQkJcG9sID0gbGlzdF9maXJzdF9lbnRyeSgmeGZybV9wb2xpY3lfYnl0eXBlW3dhbGstPmN1cl90eXBlXSwKKwkJCQkJICAgICAgIHN0cnVjdCB4ZnJtX3BvbGljeSwgYnl0eXBlKTsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20ocG9sLCAmeGZybV9wb2xpY3lfYnl0eXBlW3dhbGstPmN1cl90eXBlXSwgYnl0eXBlKSB7CisJCQlpZiAocG9sLT5kZWFkKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGxhc3QpIHsKLQkJCQllcnJvciA9IGZ1bmMobGFzdCwgbGFzdF9kaXIgJSBYRlJNX1BPTElDWV9NQVgsCi0JCQkJCSAgICAgY291bnQsIGRhdGEpOwotCQkJCWlmIChlcnJvcikKKwkJCQllcnJvciA9IGZ1bmMobGFzdCwgeGZybV9wb2xpY3lfaWQyZGlyKGxhc3QtPmluZGV4KSwKKwkJCQkJICAgICB3YWxrLT5jb3VudCwgZGF0YSk7CisJCQkJaWYgKGVycm9yKSB7CisJCQkJCXhmcm1fcG9sX2hvbGQobGFzdCk7CisJCQkJCXdhbGstPnBvbGljeSA9IGxhc3Q7CiAJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCX0KIAkJCWxhc3QgPSBwb2w7Ci0JCQlsYXN0X2RpciA9IGRpcjsKLQkJCWNvdW50Kys7CisJCQl3YWxrLT5jb3VudCsrOwogCQl9Ci0JCWZvciAoaSA9IHhmcm1fcG9saWN5X2J5ZHN0W2Rpcl0uaG1hc2s7IGkgPj0gMDsgaS0tKSB7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeShwb2wsIGVudHJ5LCB0YWJsZSArIGksIGJ5ZHN0KSB7Ci0JCQkJaWYgKHBvbC0+dHlwZSAhPSB0eXBlKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAobGFzdCkgewotCQkJCQllcnJvciA9IGZ1bmMobGFzdCwgbGFzdF9kaXIgJSBYRlJNX1BPTElDWV9NQVgsCi0JCQkJCQkgICAgIGNvdW50LCBkYXRhKTsKLQkJCQkJaWYgKGVycm9yKQotCQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCWxhc3QgPSBwb2w7Ci0JCQkJbGFzdF9kaXIgPSBkaXI7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJfQorCQlwb2wgPSBOVUxMOwogCX0KLQlpZiAoY291bnQgPT0gMCkgeworCWlmICh3YWxrLT5jb3VudCA9PSAwKSB7CiAJCWVycm9yID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQotCWVycm9yID0gZnVuYyhsYXN0LCBsYXN0X2RpciAlIFhGUk1fUE9MSUNZX01BWCwgMCwgZGF0YSk7CisJaWYgKGxhc3QpCisJCWVycm9yID0gZnVuYyhsYXN0LCB4ZnJtX3BvbGljeV9pZDJkaXIobGFzdC0+aW5kZXgpLCAwLCBkYXRhKTsKIG91dDoKIAlyZWFkX3VubG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CisJaWYgKG9sZCAhPSBOVUxMKQorCQl4ZnJtX3BvbF9wdXQob2xkKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X3dhbGspOwpAQCAtODc4LDcgKzkzNCw4IEBACiAKIAltYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCwgZmFtaWx5KTsKIAlpZiAobWF0Y2gpCi0JCXJldCA9IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChwb2wsIGZsLT5zZWNpZCwgZGlyKTsKKwkJcmV0ID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfbG9va3VwKHBvbC0+c2VjdXJpdHksIGZsLT5zZWNpZCwKKwkJCQkJCSAgZGlyKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC05OTUsOCArMTA1Miw5IEBACiAJCWludCBlcnIgPSAwOwogCiAJCWlmIChtYXRjaCkgewotCQkJZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfbG9va3VwKHBvbCwgZmwtPnNlY2lkLAotCQkJCQlwb2xpY3lfdG9fZmxvd19kaXIoZGlyKSk7CisJCQllcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9sb29rdXAocG9sLT5zZWN1cml0eSwKKwkJCQkJCSAgICAgIGZsLT5zZWNpZCwKKwkJCQkJCSAgICAgIHBvbGljeV90b19mbG93X2RpcihkaXIpKTsKIAkJCWlmICghZXJyKQogCQkJCXhmcm1fcG9sX2hvbGQocG9sKTsKIAkJCWVsc2UgaWYgKGVyciA9PSAtRVNSQ0gpCkBAIC0xMDg1LDcgKzExNDMsOCBAQAogCiAJaWYgKG5ld3ApIHsKIAkJbmV3cC0+c2VsZWN0b3IgPSBvbGQtPnNlbGVjdG9yOwotCQlpZiAoc2VjdXJpdHlfeGZybV9wb2xpY3lfY2xvbmUob2xkLCBuZXdwKSkgeworCQlpZiAoc2VjdXJpdHlfeGZybV9wb2xpY3lfY2xvbmUob2xkLT5zZWN1cml0eSwKKwkJCQkJICAgICAgICZuZXdwLT5zZWN1cml0eSkpIHsKIAkJCWtmcmVlKG5ld3ApOwogCQkJcmV0dXJuIE5VTEw7ICAvKiBFTk9NRU0gKi8KIAkJfQpAQCAtMTMyOCw2ICsxMzg3LDkgQEAKIAlpbnQgdHJhaWxlcl9sZW4gPSAwOwogCWludCB0b3M7CiAJaW50IGZhbWlseSA9IHBvbGljeS0+c2VsZWN0b3IuZmFtaWx5OworCXhmcm1fYWRkcmVzc190IHNhZGRyLCBkYWRkcjsKKworCXhmcm1fZmxvd2lfYWRkcl9nZXQoZmwsICZzYWRkciwgJmRhZGRyLCBmYW1pbHkpOwogCiAJdG9zID0geGZybV9nZXRfdG9zKGZsLCBmYW1pbHkpOwogCWVyciA9IHRvczsKQEAgLTEzNTgsNyArMTQyMCw4IEBACiAKIAkJaWYgKHhmcm1baV0tPnByb3BzLm1vZGUgIT0gWEZSTV9NT0RFX1RSQU5TUE9SVCkgewogCQkJZmFtaWx5ID0geGZybVtpXS0+cHJvcHMuZmFtaWx5OwotCQkJZHN0ID0geGZybV9kc3RfbG9va3VwKHhmcm1baV0sIHRvcywgZmFtaWx5KTsKKwkJCWRzdCA9IHhmcm1fZHN0X2xvb2t1cCh4ZnJtW2ldLCB0b3MsICZzYWRkciwgJmRhZGRyLAorCQkJCQkgICAgICBmYW1pbHkpOwogCQkJZXJyID0gUFRSX0VSUihkc3QpOwogCQkJaWYgKElTX0VSUihkc3QpKQogCQkJCWdvdG8gcHV0X3N0YXRlczsKQEAgLTIwMjIsNyArMjA4NSw3IEBACiB2b2lkIHhmcm1fZHN0X2lmZG93bihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJd2hpbGUgKChkc3QgPSBkc3QtPmNoaWxkKSAmJiBkc3QtPnhmcm0gJiYgZHN0LT5kZXYgPT0gZGV2KSB7Ci0JCWRzdC0+ZGV2ID0gZGV2LT5uZF9uZXQtPmxvb3BiYWNrX2RldjsKKwkJZHN0LT5kZXYgPSBkZXZfbmV0KGRldiktPmxvb3BiYWNrX2RldjsKIAkJZGV2X2hvbGQoZHN0LT5kZXYpOwogCQlkZXZfcHV0KGRldik7CiAJfQpAQCAtMjI5Myw3ICsyMzU2LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCi0JaWYgKGRldi0+bmRfbmV0ICE9ICZpbml0X25ldCkKKwlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMjM0OSw2ICsyNDEyLDkgQEAKIAkJCXBhbmljKCJYRlJNOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnlkc3QgaGFzaFxuIik7CiAJfQogCisJZm9yIChkaXIgPSAwOyBkaXIgPCBYRlJNX1BPTElDWV9UWVBFX01BWDsgZGlyKyspCisJCUlOSVRfTElTVF9IRUFEKCZ4ZnJtX3BvbGljeV9ieXR5cGVbZGlyXSk7CisKIAlJTklUX1dPUksoJnhmcm1fcG9saWN5X2djX3dvcmssIHhmcm1fcG9saWN5X2djX3Rhc2spOwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmeGZybV9kZXZfbm90aWZpZXIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IDdiYTY1ZTguLjVkY2MxMGIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTUwLDYgKzUwLDcgQEAKICAqIE1haW4gdXNlIGlzIGZpbmRpbmcgU0EgYWZ0ZXIgcG9saWN5IHNlbGVjdGVkIHR1bm5lbCBvciB0cmFuc3BvcnQgbW9kZS4KICAqIEFsc28sIGl0IGNhbiBiZSB1c2VkIGJ5IGFoL2VzcCBpY21wIGVycm9yIGhhbmRsZXIgdG8gZmluZCBvZmZlbmRpbmcgU0EuCiAgKi8KK3N0YXRpYyBMSVNUX0hFQUQoeGZybV9zdGF0ZV9hbGwpOwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICp4ZnJtX3N0YXRlX2J5ZHN0IF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnhmcm1fc3RhdGVfYnlzcmMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqeGZybV9zdGF0ZV9ieXNwaSBfX3JlYWRfbW9zdGx5OwpAQCAtMzg4LDYgKzM4OSw4IEBACiAJa2ZyZWUoeC0+Y29hZGRyKTsKIAlpZiAoeC0+aW5uZXJfbW9kZSkKIAkJeGZybV9wdXRfbW9kZSh4LT5pbm5lcl9tb2RlKTsKKwlpZiAoeC0+aW5uZXJfbW9kZV9pYWYpCisJCXhmcm1fcHV0X21vZGUoeC0+aW5uZXJfbW9kZV9pYWYpOwogCWlmICh4LT5vdXRlcl9tb2RlKQogCQl4ZnJtX3B1dF9tb2RlKHgtPm91dGVyX21vZGUpOwogCWlmICh4LT50eXBlKSB7CkBAIC01MTAsNiArNTEzLDcgQEAKIAlpZiAoeCkgewogCQlhdG9taWNfc2V0KCZ4LT5yZWZjbnQsIDEpOwogCQlhdG9taWNfc2V0KCZ4LT50dW5uZWxfdXNlcnMsIDApOworCQlJTklUX0xJU1RfSEVBRCgmeC0+YWxsKTsKIAkJSU5JVF9ITElTVF9OT0RFKCZ4LT5ieWRzdCk7CiAJCUlOSVRfSExJU1RfTk9ERSgmeC0+YnlzcmMpOwogCQlJTklUX0hMSVNUX05PREUoJngtPmJ5c3BpKTsKQEAgLTUyMyw2ICs1MjcsOCBAQAogCQl4LT5sZnQuaGFyZF9wYWNrZXRfbGltaXQgPSBYRlJNX0lORjsKIAkJeC0+cmVwbGF5X21heGFnZSA9IDA7CiAJCXgtPnJlcGxheV9tYXhkaWZmID0gMDsKKwkJeC0+aW5uZXJfbW9kZSA9IE5VTEw7CisJCXgtPmlubmVyX21vZGVfaWFmID0gTlVMTDsKIAkJc3Bpbl9sb2NrX2luaXQoJngtPmxvY2spOwogCX0KIAlyZXR1cm4geDsKQEAgLTUzMyw2ICs1MzksMTAgQEAKIHsKIAlCVUdfVFJBUCh4LT5rbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0RFQUQpOwogCisJc3Bpbl9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOworCWxpc3RfZGVsKCZ4LT5hbGwpOworCXNwaW5fdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOworCiAJc3Bpbl9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2djX2xvY2spOwogCWhsaXN0X2FkZF9oZWFkKCZ4LT5ieWRzdCwgJnhmcm1fc3RhdGVfZ2NfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJnhmcm1fc3RhdGVfZ2NfbG9jayk7CkBAIC03OTYsNyArODA2LDcgQEAKIAkJCSAgICAgIHNlbGVjdG9yLgogCQkJICovCiAJCQlpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkgewotCQkJCWlmICgheGZybV9zZWxlY3Rvcl9tYXRjaCgmeC0+c2VsLCBmbCwgeC0+c2VsLmZhbWlseSkgfHwKKwkJCQlpZiAoKHgtPnNlbC5mYW1pbHkgJiYgIXhmcm1fc2VsZWN0b3JfbWF0Y2goJngtPnNlbCwgZmwsIHgtPnNlbC5mYW1pbHkpKSB8fAogCQkJCSAgICAhc2VjdXJpdHlfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCh4LCBwb2wsIGZsKSkKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKCFiZXN0IHx8CkBAIC05MDksNiArOTE5LDggQEAKIAogCXgtPmdlbmlkID0gKyt4ZnJtX3N0YXRlX2dlbmlkOwogCisJbGlzdF9hZGRfdGFpbCgmeC0+YWxsLCAmeGZybV9zdGF0ZV9hbGwpOworCiAJaCA9IHhmcm1fZHN0X2hhc2goJngtPmlkLmRhZGRyLCAmeC0+cHJvcHMuc2FkZHIsCiAJCQkgIHgtPnByb3BzLnJlcWlkLCB4LT5wcm9wcy5mYW1pbHkpOwogCWhsaXN0X2FkZF9oZWFkKCZ4LT5ieWRzdCwgeGZybV9zdGF0ZV9ieWRzdCtoKTsKQEAgLTE1MTgsMzYgKzE1MzAsNDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9hbGxvY19zcGkpOwogCi1pbnQgeGZybV9zdGF0ZV93YWxrKHU4IHByb3RvLCBpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9zdGF0ZSAqLCBpbnQsIHZvaWQqKSwKK2ludCB4ZnJtX3N0YXRlX3dhbGsoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsaywKKwkJICAgIGludCAoKmZ1bmMpKHN0cnVjdCB4ZnJtX3N0YXRlICosIGludCwgdm9pZCopLAogCQkgICAgdm9pZCAqZGF0YSkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgKmxhc3QgPSBOVUxMOwotCXN0cnVjdCBobGlzdF9ub2RlICplbnRyeTsKLQlpbnQgY291bnQgPSAwOworCXN0cnVjdCB4ZnJtX3N0YXRlICpvbGQsICp4LCAqbGFzdCA9IE5VTEw7CiAJaW50IGVyciA9IDA7CiAKKwlpZiAod2Fsay0+c3RhdGUgPT0gTlVMTCAmJiB3YWxrLT5jb3VudCAhPSAwKQorCQlyZXR1cm4gMDsKKworCW9sZCA9IHggPSB3YWxrLT5zdGF0ZTsKKwl3YWxrLT5zdGF0ZSA9IE5VTEw7CiAJc3Bpbl9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPD0geGZybV9zdGF0ZV9obWFzazsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHgsIGVudHJ5LCB4ZnJtX3N0YXRlX2J5ZHN0K2ksIGJ5ZHN0KSB7Ci0JCQlpZiAoIXhmcm1faWRfcHJvdG9fbWF0Y2goeC0+aWQucHJvdG8sIHByb3RvKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChsYXN0KSB7Ci0JCQkJZXJyID0gZnVuYyhsYXN0LCBjb3VudCwgZGF0YSk7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBvdXQ7CisJaWYgKHggPT0gTlVMTCkKKwkJeCA9IGxpc3RfZmlyc3RfZW50cnkoJnhmcm1fc3RhdGVfYWxsLCBzdHJ1Y3QgeGZybV9zdGF0ZSwgYWxsKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oeCwgJnhmcm1fc3RhdGVfYWxsLCBhbGwpIHsKKwkJaWYgKHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfREVBRCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXhmcm1faWRfcHJvdG9fbWF0Y2goeC0+aWQucHJvdG8sIHdhbGstPnByb3RvKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobGFzdCkgeworCQkJZXJyID0gZnVuYyhsYXN0LCB3YWxrLT5jb3VudCwgZGF0YSk7CisJCQlpZiAoZXJyKSB7CisJCQkJeGZybV9zdGF0ZV9ob2xkKGxhc3QpOworCQkJCXdhbGstPnN0YXRlID0gbGFzdDsKKwkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWxhc3QgPSB4OwotCQkJY291bnQrKzsKIAkJfQorCQlsYXN0ID0geDsKKwkJd2Fsay0+Y291bnQrKzsKIAl9Ci0JaWYgKGNvdW50ID09IDApIHsKKwlpZiAod2Fsay0+Y291bnQgPT0gMCkgewogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9Ci0JZXJyID0gZnVuYyhsYXN0LCAwLCBkYXRhKTsKKwlpZiAobGFzdCkKKwkJZXJyID0gZnVuYyhsYXN0LCAwLCBkYXRhKTsKIG91dDoKIAlzcGluX3VubG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKKwlpZiAob2xkICE9IE5VTEwpCisJCXhmcm1fc3RhdGVfcHV0KG9sZCk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV93YWxrKTsKQEAgLTE5NDQsNiArMTk2Nyw3IEBACiBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewogCXN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvOworCXN0cnVjdCB4ZnJtX21vZGUgKmlubmVyX21vZGU7CiAJaW50IGZhbWlseSA9IHgtPnByb3BzLmZhbWlseTsKIAlpbnQgZXJyOwogCkBAIC0xOTYyLDEzICsxOTg2LDQ4IEBACiAJCWdvdG8gZXJyb3I7CiAKIAllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCXgtPmlubmVyX21vZGUgPSB4ZnJtX2dldF9tb2RlKHgtPnByb3BzLm1vZGUsIHgtPnNlbC5mYW1pbHkpOwotCWlmICh4LT5pbm5lcl9tb2RlID09IE5VTEwpCi0JCWdvdG8gZXJyb3I7CiAKLQlpZiAoISh4LT5pbm5lcl9tb2RlLT5mbGFncyAmIFhGUk1fTU9ERV9GTEFHX1RVTk5FTCkgJiYKLQkgICAgZmFtaWx5ICE9IHgtPnNlbC5mYW1pbHkpCi0JCWdvdG8gZXJyb3I7CisJaWYgKHgtPnNlbC5mYW1pbHkgIT0gQUZfVU5TUEVDKSB7CisJCWlubmVyX21vZGUgPSB4ZnJtX2dldF9tb2RlKHgtPnByb3BzLm1vZGUsIHgtPnNlbC5mYW1pbHkpOworCQlpZiAoaW5uZXJfbW9kZSA9PSBOVUxMKQorCQkJZ290byBlcnJvcjsKKworCQlpZiAoIShpbm5lcl9tb2RlLT5mbGFncyAmIFhGUk1fTU9ERV9GTEFHX1RVTk5FTCkgJiYKKwkJICAgIGZhbWlseSAhPSB4LT5zZWwuZmFtaWx5KSB7CisJCQl4ZnJtX3B1dF9tb2RlKGlubmVyX21vZGUpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXgtPmlubmVyX21vZGUgPSBpbm5lcl9tb2RlOworCX0gZWxzZSB7CisJCXN0cnVjdCB4ZnJtX21vZGUgKmlubmVyX21vZGVfaWFmOworCisJCWlubmVyX21vZGUgPSB4ZnJtX2dldF9tb2RlKHgtPnByb3BzLm1vZGUsIEFGX0lORVQpOworCQlpZiAoaW5uZXJfbW9kZSA9PSBOVUxMKQorCQkJZ290byBlcnJvcjsKKworCQlpZiAoIShpbm5lcl9tb2RlLT5mbGFncyAmIFhGUk1fTU9ERV9GTEFHX1RVTk5FTCkpIHsKKwkJCXhmcm1fcHV0X21vZGUoaW5uZXJfbW9kZSk7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJaW5uZXJfbW9kZV9pYWYgPSB4ZnJtX2dldF9tb2RlKHgtPnByb3BzLm1vZGUsIEFGX0lORVQ2KTsKKwkJaWYgKGlubmVyX21vZGVfaWFmID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCisJCWlmICghKGlubmVyX21vZGVfaWFmLT5mbGFncyAmIFhGUk1fTU9ERV9GTEFHX1RVTk5FTCkpIHsKKwkJCXhmcm1fcHV0X21vZGUoaW5uZXJfbW9kZV9pYWYpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWlmICh4LT5wcm9wcy5mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJeC0+aW5uZXJfbW9kZSA9IGlubmVyX21vZGU7CisJCQl4LT5pbm5lcl9tb2RlX2lhZiA9IGlubmVyX21vZGVfaWFmOworCQl9IGVsc2UgeworCQkJeC0+aW5uZXJfbW9kZSA9IGlubmVyX21vZGVfaWFmOworCQkJeC0+aW5uZXJfbW9kZV9pYWYgPSBpbm5lcl9tb2RlOworCQl9CisJfQogCiAJeC0+dHlwZSA9IHhmcm1fZ2V0X3R5cGUoeC0+aWQucHJvdG8sIGZhbWlseSk7CiAJaWYgKHgtPnR5cGUgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggZjk3MWNhNS4uMTgxMGY1NiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTI4OCwxMiArMjg4LDkgQEAKIAltZW1jcHkoJngtPnByb3BzLnNhZGRyLCAmcC0+c2FkZHIsIHNpemVvZih4LT5wcm9wcy5zYWRkcikpOwogCXgtPnByb3BzLmZsYWdzID0gcC0+ZmxhZ3M7CiAKLQkvKgotCSAqIFNldCBpbm5lciBhZGRyZXNzIGZhbWlseSBpZiB0aGUgS00gbGVmdCBpdCBhcyB6ZXJvLgotCSAqIFNlZSBjb21tZW50IGluIHZhbGlkYXRlX3RtcGwuCi0JICovCiAJaWYgKCF4LT5zZWwuZmFtaWx5KQogCQl4LT5zZWwuZmFtaWx5ID0gcC0+ZmFtaWx5OworCiB9CiAKIC8qCkBAIC01MzIsOCArNTI5LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqb3V0X3NrYjsKIAl1MzIgbmxtc2dfc2VxOwogCXUxNiBubG1zZ19mbGFnczsKLQlpbnQgc3RhcnRfaWR4OwotCWludCB0aGlzX2lkeDsKIH07CiAKIHN0YXRpYyBpbnQgY29weV9zZWNfY3R4KHN0cnVjdCB4ZnJtX3NlY19jdHggKnMsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC02MDAsOSArNTk1LDYgQEAKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlpbnQgZXJyOwogCi0JaWYgKHNwLT50aGlzX2lkeCA8IHNwLT5zdGFydF9pZHgpCi0JCWdvdG8gb3V0OwotCiAJbmxoID0gbmxtc2dfcHV0KHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBpZCwgc3AtPm5sbXNnX3NlcSwKIAkJCVhGUk1fTVNHX05FV1NBLCBzaXplb2YoKnApLCBzcC0+bmxtc2dfZmxhZ3MpOwogCWlmIChubGggPT0gTlVMTCkKQEAgLTYxNSw4ICs2MDcsNiBAQAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7Ci1vdXQ6Ci0Jc3AtPnRoaXNfaWR4Kys7CiAJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTYyNCwxOCArNjE0LDMyIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCB4ZnJtX2R1bXBfc2FfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCit7CisJc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICopICZjYi0+YXJnc1sxXTsKKwl4ZnJtX3N0YXRlX3dhbGtfZG9uZSh3YWxrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB4ZnJtX2R1bXBfc2Eoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogeworCXN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGsgPSAoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqKSAmY2ItPmFyZ3NbMV07CiAJc3RydWN0IHhmcm1fZHVtcF9pbmZvIGluZm87CiAKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGspID4KKwkJICAgICBzaXplb2YoY2ItPmFyZ3MpIC0gc2l6ZW9mKGNiLT5hcmdzWzBdKSk7CisKIAlpbmZvLmluX3NrYiA9IGNiLT5za2I7CiAJaW5mby5vdXRfc2tiID0gc2tiOwogCWluZm8ubmxtc2dfc2VxID0gY2ItPm5saC0+bmxtc2dfc2VxOwogCWluZm8ubmxtc2dfZmxhZ3MgPSBOTE1fRl9NVUxUSTsKLQlpbmZvLnRoaXNfaWR4ID0gMDsKLQlpbmZvLnN0YXJ0X2lkeCA9IGNiLT5hcmdzWzBdOwotCSh2b2lkKSB4ZnJtX3N0YXRlX3dhbGsoMCwgZHVtcF9vbmVfc3RhdGUsICZpbmZvKTsKLQljYi0+YXJnc1swXSA9IGluZm8udGhpc19pZHg7CisKKwlpZiAoIWNiLT5hcmdzWzBdKSB7CisJCWNiLT5hcmdzWzBdID0gMTsKKwkJeGZybV9zdGF0ZV93YWxrX2luaXQod2FsaywgMCk7CisJfQorCisJKHZvaWQpIHhmcm1fc3RhdGVfd2Fsayh3YWxrLCBkdW1wX29uZV9zdGF0ZSwgJmluZm8pOwogCiAJcmV0dXJuIHNrYi0+bGVuOwogfQpAQCAtNjU0LDcgKzY1OCw2IEBACiAJaW5mby5vdXRfc2tiID0gc2tiOwogCWluZm8ubmxtc2dfc2VxID0gc2VxOwogCWluZm8ubmxtc2dfZmxhZ3MgPSAwOwotCWluZm8udGhpc19pZHggPSBpbmZvLnN0YXJ0X2lkeCA9IDA7CiAKIAlpZiAoZHVtcF9vbmVfc3RhdGUoeCwgMCwgJmluZm8pKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtOTU2LDcgKzk1OSw3IEBACiAJCXJldHVybiAwOwogCiAJdWN0eCA9IG5sYV9kYXRhKHJ0KTsKLQlyZXR1cm4gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MocG9sLCB1Y3R4KTsKKwlyZXR1cm4gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MoJnBvbC0+c2VjdXJpdHksIHVjdHgpOwogfQogCiBzdGF0aWMgdm9pZCBjb3B5X3RlbXBsYXRlcyhzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgeGZybV91c2VyX3RtcGwgKnV0LApAQCAtMTE0MCw3ICsxMTQzLDcgQEAKIAkJCSAgICAgIE5FVExJTktfQ0Ioc2tiKS5zaWQpOwogCiAJaWYgKGVycikgewotCQlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKHhwKTsKKwkJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZSh4cC0+c2VjdXJpdHkpOwogCQlrZnJlZSh4cCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTIzMiw5ICsxMjM1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc3AtPm91dF9za2I7CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CiAKLQlpZiAoc3AtPnRoaXNfaWR4IDwgc3AtPnN0YXJ0X2lkeCkKLQkJZ290byBvdXQ7Ci0KIAlubGggPSBubG1zZ19wdXQoc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBzcC0+bmxtc2dfc2VxLAogCQkJWEZSTV9NU0dfTkVXUE9MSUNZLCBzaXplb2YoKnApLCBzcC0+bmxtc2dfZmxhZ3MpOwogCWlmIChubGggPT0gTlVMTCkKQEAgLTEyNTAsOCArMTI1MCw2IEBACiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7Ci1vdXQ6Ci0Jc3AtPnRoaXNfaWR4Kys7CiAJcmV0dXJuIDA7CiAKIG5sbXNnX2ZhaWx1cmU6CkBAIC0xMjU5LDIxICsxMjU3LDMzIEBACiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAorc3RhdGljIGludCB4ZnJtX2R1bXBfcG9saWN5X2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCXN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrID0gKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICopICZjYi0+YXJnc1sxXTsKKworCXhmcm1fcG9saWN5X3dhbGtfZG9uZSh3YWxrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB4ZnJtX2R1bXBfcG9saWN5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKKwlzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayAqd2FsayA9IChzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayAqKSAmY2ItPmFyZ3NbMV07CiAJc3RydWN0IHhmcm1fZHVtcF9pbmZvIGluZm87CiAKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrKSA+CisJCSAgICAgc2l6ZW9mKGNiLT5hcmdzKSAtIHNpemVvZihjYi0+YXJnc1swXSkpOworCiAJaW5mby5pbl9za2IgPSBjYi0+c2tiOwogCWluZm8ub3V0X3NrYiA9IHNrYjsKIAlpbmZvLm5sbXNnX3NlcSA9IGNiLT5ubGgtPm5sbXNnX3NlcTsKIAlpbmZvLm5sbXNnX2ZsYWdzID0gTkxNX0ZfTVVMVEk7Ci0JaW5mby50aGlzX2lkeCA9IDA7Ci0JaW5mby5zdGFydF9pZHggPSBjYi0+YXJnc1swXTsKLQkodm9pZCkgeGZybV9wb2xpY3lfd2FsayhYRlJNX1BPTElDWV9UWVBFX01BSU4sIGR1bXBfb25lX3BvbGljeSwgJmluZm8pOwotI2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kKLQkodm9pZCkgeGZybV9wb2xpY3lfd2FsayhYRlJNX1BPTElDWV9UWVBFX1NVQiwgZHVtcF9vbmVfcG9saWN5LCAmaW5mbyk7Ci0jZW5kaWYKLQljYi0+YXJnc1swXSA9IGluZm8udGhpc19pZHg7CisKKwlpZiAoIWNiLT5hcmdzWzBdKSB7CisJCWNiLT5hcmdzWzBdID0gMTsKKwkJeGZybV9wb2xpY3lfd2Fsa19pbml0KHdhbGssIFhGUk1fUE9MSUNZX1RZUEVfQU5ZKTsKKwl9CisKKwkodm9pZCkgeGZybV9wb2xpY3lfd2Fsayh3YWxrLCBkdW1wX29uZV9wb2xpY3ksICZpbmZvKTsKIAogCXJldHVybiBza2ItPmxlbjsKIH0KQEAgLTEyOTMsNyArMTMwMyw2IEBACiAJaW5mby5vdXRfc2tiID0gc2tiOwogCWluZm8ubmxtc2dfc2VxID0gc2VxOwogCWluZm8ubmxtc2dfZmxhZ3MgPSAwOwotCWluZm8udGhpc19pZHggPSBpbmZvLnN0YXJ0X2lkeCA9IDA7CiAKIAlpZiAoZHVtcF9vbmVfcG9saWN5KHhwLCBkaXIsIDAsICZpbmZvKSA8IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xMzI4LDIyICsxMzM3LDIzIEBACiAJCXhwID0geGZybV9wb2xpY3lfYnlpZCh0eXBlLCBwLT5kaXIsIHAtPmluZGV4LCBkZWxldGUsICZlcnIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1NFQ19DVFhdOwotCQlzdHJ1Y3QgeGZybV9wb2xpY3kgdG1wOworCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHg7CiAKIAkJZXJyID0gdmVyaWZ5X3NlY19jdHhfbGVuKGF0dHJzKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZihzdHJ1Y3QgeGZybV9wb2xpY3kpKTsKKwkJY3R4ID0gTlVMTDsKIAkJaWYgKHJ0KSB7CiAJCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHggPSBubGFfZGF0YShydCk7CiAKLQkJCWlmICgoZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MoJnRtcCwgdWN0eCkpKQorCQkJZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MoJmN0eCwgdWN0eCk7CisJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KLQkJeHAgPSB4ZnJtX3BvbGljeV9ieXNlbF9jdHgodHlwZSwgcC0+ZGlyLCAmcC0+c2VsLCB0bXAuc2VjdXJpdHksCisJCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KHR5cGUsIHAtPmRpciwgJnAtPnNlbCwgY3R4LAogCQkJCQkgICBkZWxldGUsICZlcnIpOwotCQlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKCZ0bXApOworCQlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKGN0eCk7CiAJfQogCWlmICh4cCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTE1NjMsMjYgKzE1NzMsMjYgQEAKIAkJeHAgPSB4ZnJtX3BvbGljeV9ieWlkKHR5cGUsIHAtPmRpciwgcC0+aW5kZXgsIDAsICZlcnIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1NFQ19DVFhdOwotCQlzdHJ1Y3QgeGZybV9wb2xpY3kgdG1wOworCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHg7CiAKIAkJZXJyID0gdmVyaWZ5X3NlY19jdHhfbGVuKGF0dHJzKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZihzdHJ1Y3QgeGZybV9wb2xpY3kpKTsKKwkJY3R4ID0gTlVMTDsKIAkJaWYgKHJ0KSB7CiAJCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHggPSBubGFfZGF0YShydCk7CiAKLQkJCWlmICgoZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MoJnRtcCwgdWN0eCkpKQorCQkJZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MoJmN0eCwgdWN0eCk7CisJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KLQkJeHAgPSB4ZnJtX3BvbGljeV9ieXNlbF9jdHgodHlwZSwgcC0+ZGlyLCAmcC0+c2VsLCB0bXAuc2VjdXJpdHksCi0JCQkJCSAgIDAsICZlcnIpOwotCQlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKCZ0bXApOworCQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eCh0eXBlLCBwLT5kaXIsICZwLT5zZWwsIGN0eCwgMCwgJmVycik7CisJCXNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoY3R4KTsKIAl9Ci0KIAlpZiAoeHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CisKIAlyZWFkX2xvY2soJnhwLT5sb2NrKTsKIAlpZiAoeHAtPmRlYWQpIHsKIAkJcmVhZF91bmxvY2soJnhwLT5sb2NrKTsKQEAgLTE4OTEsMTUgKzE5MDEsMTggQEAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9saW5rIHsKIAlpbnQgKCpkb2l0KShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgbmxtc2doZHIgKiwgc3RydWN0IG5sYXR0ciAqKik7CiAJaW50ICgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKik7CisJaW50ICgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKik7CiB9IHhmcm1fZGlzcGF0Y2hbWEZSTV9OUl9NU0dUWVBFU10gPSB7CiAJW1hGUk1fTVNHX05FV1NBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sCiAJW1hGUk1fTVNHX0RFTFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kZWxfc2EgICAgICAgIH0sCiAJW1hGUk1fTVNHX0dFVFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfc2EsCi0JCQkJCQkgICAuZHVtcCA9IHhmcm1fZHVtcF9zYSAgICAgICB9LAorCQkJCQkJICAgLmR1bXAgPSB4ZnJtX2R1bXBfc2EsCisJCQkJCQkgICAuZG9uZSA9IHhmcm1fZHVtcF9zYV9kb25lICB9LAogCVtYRlJNX01TR19ORVdQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3BvbGljeSAgICB9LAogCVtYRlJNX01TR19ERUxQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X3BvbGljeSAgICB9LAogCVtYRlJNX01TR19HRVRQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X3BvbGljeSwKLQkJCQkJCSAgIC5kdW1wID0geGZybV9kdW1wX3BvbGljeSAgIH0sCisJCQkJCQkgICAuZHVtcCA9IHhmcm1fZHVtcF9wb2xpY3ksCisJCQkJCQkgICAuZG9uZSA9IHhmcm1fZHVtcF9wb2xpY3lfZG9uZSB9LAogCVtYRlJNX01TR19BTExPQ1NQSSAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWxsb2NfdXNlcnNwaSB9LAogCVtYRlJNX01TR19BQ1FVSVJFICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX2FjcXVpcmUgICB9LAogCVtYRlJNX01TR19FWFBJUkUgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhX2V4cGlyZSB9LApAQCAtMTkzOCw3ICsxOTUxLDcgQEAKIAkJaWYgKGxpbmstPmR1bXAgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQoeGZybV9ubCwgc2tiLCBubGgsIGxpbmstPmR1bXAsIE5VTEwpOworCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KHhmcm1fbmwsIHNrYiwgbmxoLCBsaW5rLT5kdW1wLCBsaW5rLT5kb25lKTsKIAl9CiAKIAllcnIgPSBubG1zZ19wYXJzZShubGgsIHhmcm1fbXNnX21pblt0eXBlXSwgYXR0cnMsIFhGUk1BX01BWCwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvS2NvbmZpZyBiL3NhbXBsZXMvS2NvbmZpZwppbmRleCA3NGQ5N2NjLi5lMWZiNDcxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0tjb25maWcKKysrIGIvc2FtcGxlcy9LY29uZmlnCkBAIC0yMiw1ICsyMiwxNiBAQAogCiAJICBJZiBpbiBkb3VidCwgc2F5ICJOIiBoZXJlLgogCitjb25maWcgU0FNUExFX0tQUk9CRVMKKwl0cmlzdGF0ZSAiQnVpbGQga3Byb2JlcyBleGFtcGxlcyAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCisJZGVwZW5kcyBvbiBLUFJPQkVTICYmIG0KKwloZWxwCisJICBUaGlzIGJ1aWxkIHNldmVyYWwga3Byb2JlcyBleGFtcGxlIG1vZHVsZXMuCisKK2NvbmZpZyBTQU1QTEVfS1JFVFBST0JFUworCXRyaXN0YXRlICJCdWlsZCBrcmV0cHJvYmVzIGV4YW1wbGUgLS0gbG9hZGFibGUgbW9kdWxlcyBvbmx5IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gU0FNUExFX0tQUk9CRVMgJiYgS1JFVFBST0JFUworCiBlbmRpZiAjIFNBTVBMRVMKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NYWtlZmlsZSBiL3NhbXBsZXMvTWFrZWZpbGUKaW5kZXggODY1MmQwZi4uMmUwMjU3NSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NYWtlZmlsZQorKysgYi9zYW1wbGVzL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAogIyBNYWtlZmlsZSBmb3IgTGludXggc2FtcGxlcyBjb2RlCiAKLW9iai0kKENPTkZJR19TQU1QTEVTKQkrPSBtYXJrZXJzLyBrb2JqZWN0Lworb2JqLSQoQ09ORklHX1NBTVBMRVMpCSs9IG1hcmtlcnMvIGtvYmplY3QvIGtwcm9iZXMvCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYyBiL3NhbXBsZXMvZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTE0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGZpcm13YXJlX3NhbXBsZV9kcml2ZXIuYyAtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIE1hbnVlbCBFc3RyYWRhIFNhaW56CisgKgorICogU2FtcGxlIGNvZGUgb24gaG93IHRvIHVzZSByZXF1ZXN0X2Zpcm13YXJlKCkgZnJvbSBkcml2ZXJzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGdob3N0X2RldmljZSA9IHsKKwkuYnVzX2lkICAgID0gImdob3N0MCIsCit9OworCisKK3N0YXRpYyB2b2lkIHNhbXBsZV9maXJtd2FyZV9sb2FkKGNoYXIgKmZpcm13YXJlLCBpbnQgc2l6ZSkKK3sKKwl1OCBidWZbc2l6ZSsxXTsKKwltZW1jcHkoYnVmLCBmaXJtd2FyZSwgc2l6ZSk7CisJYnVmW3NpemVdID0gJ1wwJzsKKwlwcmludGsoS0VSTl9JTkZPICJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiBmaXJtd2FyZTogJXNcbiIsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHNhbXBsZV9wcm9iZV9kZWZhdWx0KHZvaWQpCit7CisJLyogdXNlcyB0aGUgZGVmYXVsdCBtZXRob2QgdG8gZ2V0IHRoZSBmaXJtd2FyZSAqLworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJaW50IHJldHZhbDsKKworCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6ICIKKwkJImEgZ2hvc3QgZGV2aWNlIGdvdCBpbnNlcnRlZCA6KVxuIik7CisKKwlyZXR2YWwgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgInNhbXBsZV9kcml2ZXJfZnciLCAmZ2hvc3RfZGV2aWNlKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IEZpcm13YXJlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm47CisJfQorCisJc2FtcGxlX2Zpcm13YXJlX2xvYWQoZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCisJLyogZmluaXNoIHNldHRpbmcgdXAgdGhlIGRldmljZSAqLworfQorCitzdGF0aWMgdm9pZCBzYW1wbGVfcHJvYmVfc3BlY2lmaWModm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCS8qIFVzZXMgc29tZSBzcGVjaWZpYyBob3RwbHVnIHN1cHBvcnQgdG8gZ2V0IHRoZSBmaXJtd2FyZSBmcm9tCisJICogdXNlcnNwYWNlICBkaXJlY3RseSBpbnRvIHRoZSBoYXJkd2FyZSwgb3IgdmlhIHNvbWUgc3lzZnMgZmlsZSAqLworCisJLyogTk9URTogVGhpcyBjdXJyZW50bHkgZG9lc24ndCB3b3JrICovCisKKwlwcmludGsoS0VSTl9JTkZPICJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiAiCisJCSJhIGdob3N0IGRldmljZSBnb3QgaW5zZXJ0ZWQgOilcbiIpOworCisJcmV0dmFsID0gcmVxdWVzdF9maXJtd2FyZShOVUxMLCAic2FtcGxlX2RyaXZlcl9mdyIsICZnaG9zdF9kZXZpY2UpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogRmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogcmVxdWVzdF9maXJtd2FyZSBibG9ja3MgdW50aWwgdXNlcnNwYWNlIGZpbmlzaGVkLCBzbyBhdAorCSAqIHRoaXMgcG9pbnQgdGhlIGZpcm13YXJlIHNob3VsZCBiZSBhbHJlYWR5IGluIHRoZSBkZXZpY2UgKi8KKworCS8qIGZpbmlzaCBzZXR0aW5nIHVwIHRoZSBkZXZpY2UgKi8KK30KKworc3RhdGljIHZvaWQgc2FtcGxlX3Byb2JlX2FzeW5jX2NvbnQoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkKK3sKKwlpZiAoIWZ3KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGZpcm13YXJlIGxvYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGRldmljZSBwb2ludGVyIFwiJXNcIlxuIiwKKwkgICAgICAgKGNoYXIgKiljb250ZXh0KTsKKwlzYW1wbGVfZmlybXdhcmVfbG9hZChmdy0+ZGF0YSwgZnctPnNpemUpOworfQorCitzdGF0aWMgdm9pZCBzYW1wbGVfcHJvYmVfYXN5bmModm9pZCkKK3sKKwkvKiBMZXQncyBzYXkgdGhhdCBJIGNhbid0IHNsZWVwICovCisJaW50IGVycm9yOworCWVycm9yID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIEZXX0FDVElPTl9OT0hPVFBMVUcsCisJCQkJCSJzYW1wbGVfZHJpdmVyX2Z3IiwgJmdob3N0X2RldmljZSwKKwkJCQkJIm15IGRldmljZSBwb2ludGVyIiwKKwkJCQkJc2FtcGxlX3Byb2JlX2FzeW5jX2NvbnQpOworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSICJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiIKKwkJICAgICAgICIgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQgZmFpbGVkXG4iKTsKK30KKworc3RhdGljIGludCBzYW1wbGVfaW5pdCh2b2lkKQoreworCWRldmljZV9pbml0aWFsaXplKCZnaG9zdF9kZXZpY2UpOworCS8qIHNpbmNlIHRoZXJlIGlzIG5vIHJlYWwgaGFyZHdhcmUgaW5zZXJ0aW9uIEkganVzdCBjYWxsIHRoZQorCSAqIHNhbXBsZSBwcm9iZSBmdW5jdGlvbnMgaGVyZSAqLworCXNhbXBsZV9wcm9iZV9zcGVjaWZpYygpOworCXNhbXBsZV9wcm9iZV9kZWZhdWx0KCk7CisJc2FtcGxlX3Byb2JlX2FzeW5jKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYW1wbGVfZXhpdCh2b2lkKQoreworfQorCittb2R1bGVfaW5pdChzYW1wbGVfaW5pdCk7Cittb2R1bGVfZXhpdChzYW1wbGVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMgYi9zYW1wbGVzL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9maXJtd2FyZV9jbGFzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTIxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9maXJtd2FyZV9jbGFzcy5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMgLQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBNYW51ZWwgRXN0cmFkYSBTYWluegorICoKKyAqIE5PVEU6IFRoaXMgaXMganVzdCBhIHByb2JlIG9mIGNvbmNlcHQsIGlmIHlvdSB0aGluayB0aGF0IHlvdXIgZHJpdmVyIHdvdWxkCisgKiBiZSB3ZWxsIHNlcnZlZCBieSB0aGlzIG1lY2hhbmlzbSBwbGVhc2UgY29udGFjdCBtZSBmaXJzdC4KKyAqCisgKiBET04nVCBVU0UgVEhJUyBDT0RFIEFTIElTCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworCitNT0RVTEVfQVVUSE9SKCJNYW51ZWwgRXN0cmFkYSBTYWlueiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJIYWNraXNoIHNhbXBsZSBmb3IgdXNpbmcgZmlybXdhcmUgY2xhc3MgZGlyZWN0bHkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xhc3NfZGV2aWNlICp0b19jbGFzc19kZXYoc3RydWN0IGtvYmplY3QgKm9iaikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNsYXNzX2RldmljZSwga29iaik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICp0b19jbGFzc19kZXZfYXR0cihzdHJ1Y3QgYXR0cmlidXRlICpfYXR0cikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKF9hdHRyLCBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSwgYXR0cik7Cit9CisKK3N0cnVjdCBmaXJtd2FyZV9wcml2IHsKKwljaGFyIGZ3X2lkW0ZJUk1XQVJFX05BTUVfTUFYXTsKKwlzMzIgbG9hZGluZzoyOworCXUzMiBhYm9ydDoxOworfTsKKworc3RhdGljIHNzaXplX3QgZmlybXdhcmVfbG9hZGluZ19zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZndfcHJpdi0+bG9hZGluZyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpcm13YXJlX2xvYWRpbmdfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlpbnQgcHJldl9sb2FkaW5nID0gZndfcHJpdi0+bG9hZGluZzsKKworCWZ3X3ByaXYtPmxvYWRpbmcgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCisJc3dpdGNoIChmd19wcml2LT5sb2FkaW5nKSB7CisJY2FzZSAtMToKKwkJLyogYWJvcnQgbG9hZCBhbiBwYW5pYyAqLworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIHNldHVwIGxvYWQgKi8KKwkJYnJlYWs7CisJY2FzZSAwOgorCQlpZiAocHJldl9sb2FkaW5nID09IDEpIHsKKwkJCS8qIGZpbmlzaCBsb2FkIGFuZCBnZXQgdGhlIGRldmljZSBiYWNrIHRvIHdvcmtpbmcKKwkJCSAqIHN0YXRlICovCisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxvYWRpbmcsIDA2NDQsCisJCQkgZmlybXdhcmVfbG9hZGluZ19zaG93LCBmaXJtd2FyZV9sb2FkaW5nX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgZmlybXdhcmVfZGF0YV9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCSAgY2hhciAqYnVmZmVyLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gdG9fY2xhc3NfZGV2KGtvYmopOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKworCS8qIHJlYWQgZnJvbSB0aGUgZGV2aWNlcyBmaXJtd2FyZSBtZW1vcnkgKi8KKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBzc2l6ZV90IGZpcm13YXJlX2RhdGFfd3JpdGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCSAgIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IHRvX2NsYXNzX2Rldihrb2JqKTsKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisKKwkvKiB3cml0ZSB0byB0aGUgZGV2aWNlcyBmaXJtd2FyZSBtZW1vcnkgKi8KKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBmaXJtd2FyZV9hdHRyX2RhdGEgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiZGF0YSIsIC5tb2RlID0gMDY0NH0sCisJLnNpemUgPSAwLAorCS5yZWFkID0gZmlybXdhcmVfZGF0YV9yZWFkLAorCS53cml0ZSA9IGZpcm13YXJlX2RhdGFfd3JpdGUsCit9Oworc3RhdGljIGludCBmd19zZXR1cF9jbGFzc19kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorCQkJCSBjb25zdCBjaGFyICpmd19uYW1lLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdjsKKworCWZ3X3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZmlybXdhcmVfcHJpdiksCUdGUF9LRVJORUwpOworCWlmICghZndfcHJpdikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoY2xhc3NfZGV2LCAwLCBzaXplb2YoKmNsYXNzX2RldikpOworCisJc3RybmNweShmd19wcml2LT5md19pZCwgZndfbmFtZSwgRklSTVdBUkVfTkFNRV9NQVgpOworCWZ3X3ByaXYtPmZ3X2lkW0ZJUk1XQVJFX05BTUVfTUFYLTFdID0gJ1wwJzsKKworCXN0cm5jcHkoY2xhc3NfZGV2LT5jbGFzc19pZCwgZGV2aWNlLT5idXNfaWQsIEJVU19JRF9TSVpFKTsKKwljbGFzc19kZXYtPmNsYXNzX2lkW0JVU19JRF9TSVpFLTFdID0gJ1wwJzsKKwljbGFzc19kZXYtPmRldiA9IGRldmljZTsKKworCWNsYXNzX2Rldi0+Y2xhc3MgPSAmZmlybXdhcmVfY2xhc3MsCisJY2xhc3Nfc2V0X2RldmRhdGEoY2xhc3NfZGV2LCBmd19wcml2KTsKKwlyZXR2YWwgPSBjbGFzc19kZXZpY2VfcmVnaXN0ZXIoY2xhc3NfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNsYXNzX2RldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3JfZnJlZV9md19wcml2OworCX0KKworCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmY2xhc3NfZGV2LT5rb2JqLCAmZmlybXdhcmVfYXR0cl9kYXRhKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3JfdW5yZWdfY2xhc3NfZGV2OworCX0KKworCXJldHZhbCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGFzc19kZXYsCisJCQkJCSAgJmNsYXNzX2RldmljZV9hdHRyX2xvYWRpbmcpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcl9yZW1vdmVfZGF0YTsKKwl9CisKKwlnb3RvIG91dDsKKworZXJyb3JfcmVtb3ZlX2RhdGE6CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZjbGFzc19kZXYtPmtvYmosICZmaXJtd2FyZV9hdHRyX2RhdGEpOworZXJyb3JfdW5yZWdfY2xhc3NfZGV2OgorCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7CitlcnJvcl9mcmVlX2Z3X3ByaXY6CisJa2ZyZWUoZndfcHJpdik7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KK3N0YXRpYyB2b2lkIGZ3X3JlbW92ZV9jbGFzc19kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2KQoreworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9sb2FkaW5nKTsKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNsYXNzX2Rldi0+a29iaiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7CisJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoY2xhc3NfZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKKworc3RhdGljIHN0cnVjdCBkZXZpY2UgbXlfZGV2aWNlID0geworCS5idXNfaWQgICAgPSAibXlfZGV2MCIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmaXJtd2FyZV9zYW1wbGVfaW5pdCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWRldmljZV9pbml0aWFsaXplKCZteV9kZXZpY2UpOworCWNsYXNzX2RldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGFzc19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsYXNzX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnJvciA9IGZ3X3NldHVwX2NsYXNzX2RldmljZShjbGFzc19kZXYsICJteV9maXJtd2FyZV9pbWFnZSIsCisJCQkJICAgICAgJm15X2RldmljZSk7CisJaWYgKGVycm9yKSB7CisJCWtmcmVlKGNsYXNzX2Rldik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJcmV0dXJuIDA7CisKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBmaXJtd2FyZV9zYW1wbGVfZXhpdCh2b2lkKQoreworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlmd19yZW1vdmVfY2xhc3NfZGV2aWNlKGNsYXNzX2Rldik7CisJa2ZyZWUoZndfcHJpdik7CisJa2ZyZWUoY2xhc3NfZGV2KTsKK30KKworbW9kdWxlX2luaXQoZmlybXdhcmVfc2FtcGxlX2luaXQpOworbW9kdWxlX2V4aXQoZmlybXdhcmVfc2FtcGxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9rcHJvYmVzL01ha2VmaWxlIGIvc2FtcGxlcy9rcHJvYmVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzM5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2twcm9iZXMvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjIGJ1aWxkcyB0aGUga3Byb2JlcyBleGFtcGxlIGtlcm5lbCBtb2R1bGVzOworIyB0aGVuIHRvIHVzZSBvbmUgKGFzIHJvb3QpOiAgaW5zbW9kIDxtb2R1bGVfbmFtZS5rbz4KKworb2JqLSQoQ09ORklHX1NBTVBMRV9LUFJPQkVTKSArPSBrcHJvYmVfZXhhbXBsZS5vIGpwcm9iZV9leGFtcGxlLm8KK29iai0kKENPTkZJR19TQU1QTEVfS1JFVFBST0JFUykgKz0ga3JldHByb2JlX2V4YW1wbGUubwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9rcHJvYmVzL2pwcm9iZV9leGFtcGxlLmMgYi9zYW1wbGVzL2twcm9iZXMvanByb2JlX2V4YW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzU0MTM1Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9rcHJvYmVzL2pwcm9iZV9leGFtcGxlLmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIEhlcmUncyBhIHNhbXBsZSBrZXJuZWwgbW9kdWxlIHNob3dpbmcgdGhlIHVzZSBvZiBqcHJvYmVzIHRvIGR1bXAKKyAqIHRoZSBhcmd1bWVudHMgb2YgZG9fZm9yaygpLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZW9yeSBvZiBvcGVyYXRpb24gb2YganByb2Jlcywgc2VlCisgKiBEb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CisgKgorICogQnVpbGQgYW5kIGluc2VydCB0aGUga2VybmVsIG1vZHVsZSBhcyBkb25lIGluIHRoZSBrcHJvYmUgZXhhbXBsZS4KKyAqIFlvdSB3aWxsIHNlZSB0aGUgdHJhY2UgZGF0YSBpbiAvdmFyL2xvZy9tZXNzYWdlcyBhbmQgb24gdGhlCisgKiBjb25zb2xlIHdoZW5ldmVyIGRvX2ZvcmsoKSBpcyBpbnZva2VkIHRvIGNyZWF0ZSBhIG5ldyBwcm9jZXNzLgorICogKFNvbWUgbWVzc2FnZXMgbWF5IGJlIHN1cHByZXNzZWQgaWYgc3lzbG9nZCBpcyBjb25maWd1cmVkIHRvCisgKiBlbGltaW5hdGUgZHVwbGljYXRlIG1lc3NhZ2VzLikKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorCisvKgorICogSnVtcGVyIHByb2JlIGZvciBkb19mb3JrLgorICogTWlycm9yIHByaW5jaXBsZSBlbmFibGVzIGFjY2VzcyB0byBhcmd1bWVudHMgb2YgdGhlIHByb2JlZCByb3V0aW5lCisgKiBmcm9tIHRoZSBwcm9iZSBoYW5kbGVyLgorICovCisKKy8qIFByb3h5IHJvdXRpbmUgaGF2aW5nIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBhY3R1YWwgZG9fZm9yaygpIHJvdXRpbmUgKi8KK3N0YXRpYyBsb25nIGpkb19mb3JrKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQsCisJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZSwKKwkgICAgICBpbnQgX191c2VyICpwYXJlbnRfdGlkcHRyLCBpbnQgX191c2VyICpjaGlsZF90aWRwdHIpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAianByb2JlOiBjbG9uZV9mbGFncyA9IDB4JWx4LCBzdGFja19zaXplID0gMHglbHgsIgorCQkJIiByZWdzID0gMHglcFxuIiwKKwkgICAgICAgY2xvbmVfZmxhZ3MsIHN0YWNrX3NpemUsIHJlZ3MpOworCisJLyogQWx3YXlzIGVuZCB3aXRoIGEgY2FsbCB0byBqcHJvYmVfcmV0dXJuKCkuICovCisJanByb2JlX3JldHVybigpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGpwcm9iZSBteV9qcHJvYmUgPSB7CisJLmVudHJ5CQkJPSBqZG9fZm9yaywKKwkua3AgPSB7CisJCS5zeW1ib2xfbmFtZQk9ICJkb19mb3JrIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQganByb2JlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfanByb2JlKCZteV9qcHJvYmUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJlZ2lzdGVyX2pwcm9iZSBmYWlsZWQsIHJldHVybmVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLTE7CisJfQorCXByaW50ayhLRVJOX0lORk8gIlBsYW50ZWQganByb2JlIGF0ICVwLCBoYW5kbGVyIGFkZHIgJXBcbiIsCisJICAgICAgIG15X2pwcm9iZS5rcC5hZGRyLCBteV9qcHJvYmUuZW50cnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQganByb2JlX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2pwcm9iZSgmbXlfanByb2JlKTsKKwlwcmludGsoS0VSTl9JTkZPICJqcHJvYmUgYXQgJXAgdW5yZWdpc3RlcmVkXG4iLCBteV9qcHJvYmUua3AuYWRkcik7Cit9CisKK21vZHVsZV9pbml0KGpwcm9iZV9pbml0KQorbW9kdWxlX2V4aXQoanByb2JlX2V4aXQpCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2twcm9iZXMva3Byb2JlX2V4YW1wbGUuYyBiL3NhbXBsZXMva3Byb2Jlcy9rcHJvYmVfZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODE5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2twcm9iZXMva3Byb2JlX2V4YW1wbGUuYwpAQCAtMCwwICsxLDkxIEBACisvKgorICogTk9URTogVGhpcyBleGFtcGxlIGlzIHdvcmtzIG9uIHg4NiBhbmQgcG93ZXJwYy4KKyAqIEhlcmUncyBhIHNhbXBsZSBrZXJuZWwgbW9kdWxlIHNob3dpbmcgdGhlIHVzZSBvZiBrcHJvYmVzIHRvIGR1bXAgYQorICogc3RhY2sgdHJhY2UgYW5kIHNlbGVjdGVkIHJlZ2lzdGVycyB3aGVuIGRvX2ZvcmsoKSBpcyBjYWxsZWQuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlb3J5IG9mIG9wZXJhdGlvbiBvZiBrcHJvYmVzLCBzZWUKKyAqIERvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKKyAqCisgKiBZb3Ugd2lsbCBzZWUgdGhlIHRyYWNlIGRhdGEgaW4gL3Zhci9sb2cvbWVzc2FnZXMgYW5kIG9uIHRoZSBjb25zb2xlCisgKiB3aGVuZXZlciBkb19mb3JrKCkgaXMgaW52b2tlZCB0byBjcmVhdGUgYSBuZXcgcHJvY2Vzcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorCisvKiBGb3IgZWFjaCBwcm9iZSB5b3UgbmVlZCB0byBhbGxvY2F0ZSBhIGtwcm9iZSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIGtwID0geworCS5zeW1ib2xfbmFtZQk9ICJkb19mb3JrIiwKK307CisKKy8qIGtwcm9iZSBwcmVfaGFuZGxlcjogY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQgKi8KK3N0YXRpYyBpbnQgaGFuZGxlcl9wcmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHX1g4NgorCXByaW50ayhLRVJOX0lORk8gInByZV9oYW5kbGVyOiBwLT5hZGRyID0gMHglcCwgaXAgPSAlbHgsIgorCQkJIiBmbGFncyA9IDB4JWx4XG4iLAorCQlwLT5hZGRyLCByZWdzLT5pcCwgcmVncy0+ZmxhZ3MpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BQQworCXByaW50ayhLRVJOX0lORk8gInByZV9oYW5kbGVyOiBwLT5hZGRyID0gMHglcCwgbmlwID0gMHglbHgsIgorCQkJIiBtc3IgPSAweCVseFxuIiwKKwkJcC0+YWRkciwgcmVncy0+bmlwLCByZWdzLT5tc3IpOworI2VuZGlmCisKKwkvKiBBIGR1bXBfc3RhY2soKSBoZXJlIHdpbGwgZ2l2ZSBhIHN0YWNrIGJhY2t0cmFjZSAqLworCXJldHVybiAwOworfQorCisvKiBrcHJvYmUgcG9zdF9oYW5kbGVyOiBjYWxsZWQgYWZ0ZXIgdGhlIHByb2JlZCBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCAqLworc3RhdGljIHZvaWQgaGFuZGxlcl9wb3N0KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisjaWZkZWYgQ09ORklHX1g4NgorCXByaW50ayhLRVJOX0lORk8gInBvc3RfaGFuZGxlcjogcC0+YWRkciA9IDB4JXAsIGZsYWdzID0gMHglbHhcbiIsCisJCXAtPmFkZHIsIHJlZ3MtPmZsYWdzKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUEMKKwlwcmludGsoS0VSTl9JTkZPICJwb3N0X2hhbmRsZXI6IHAtPmFkZHIgPSAweCVwLCBtc3IgPSAweCVseFxuIiwKKwkJcC0+YWRkciwgcmVncy0+bXNyKTsKKyNlbmRpZgorfQorCisvKgorICogZmF1bHRfaGFuZGxlcjogdGhpcyBpcyBjYWxsZWQgaWYgYW4gZXhjZXB0aW9uIGlzIGdlbmVyYXRlZCBmb3IgYW55CisgKiBpbnN0cnVjdGlvbiB3aXRoaW4gdGhlIHByZS0gb3IgcG9zdC1oYW5kbGVyLCBvciB3aGVuIEtwcm9iZXMKKyAqIHNpbmdsZS1zdGVwcyB0aGUgcHJvYmVkIGluc3RydWN0aW9uLgorICovCitzdGF0aWMgaW50IGhhbmRsZXJfZmF1bHQoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiZmF1bHRfaGFuZGxlcjogcC0+YWRkciA9IDB4JXAsIHRyYXAgIyVkbiIsCisJCXAtPmFkZHIsIHRyYXBucik7CisJLyogUmV0dXJuIDAgYmVjYXVzZSB3ZSBkb24ndCBoYW5kbGUgdGhlIGZhdWx0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBrcHJvYmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJa3AucHJlX2hhbmRsZXIgPSBoYW5kbGVyX3ByZTsKKwlrcC5wb3N0X2hhbmRsZXIgPSBoYW5kbGVyX3Bvc3Q7CisJa3AuZmF1bHRfaGFuZGxlciA9IGhhbmRsZXJfZmF1bHQ7CisKKwlyZXQgPSByZWdpc3Rlcl9rcHJvYmUoJmtwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJyZWdpc3Rlcl9rcHJvYmUgZmFpbGVkLCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiUGxhbnRlZCBrcHJvYmUgYXQgJXBcbiIsIGtwLmFkZHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQga3Byb2JlX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2twcm9iZSgma3ApOworCXByaW50ayhLRVJOX0lORk8gImtwcm9iZSBhdCAlcCB1bnJlZ2lzdGVyZWRcbiIsIGtwLmFkZHIpOworfQorCittb2R1bGVfaW5pdChrcHJvYmVfaW5pdCkKK21vZHVsZV9leGl0KGtwcm9iZV9leGl0KQorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9rcHJvYmVzL2tyZXRwcm9iZV9leGFtcGxlLmMgYi9zYW1wbGVzL2twcm9iZXMva3JldHByb2JlX2V4YW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc2NGIzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9rcHJvYmVzL2tyZXRwcm9iZV9leGFtcGxlLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBrcmV0cHJvYmVfZXhhbXBsZS5jCisgKgorICogSGVyZSdzIGEgc2FtcGxlIGtlcm5lbCBtb2R1bGUgc2hvd2luZyB0aGUgdXNlIG9mIHJldHVybiBwcm9iZXMgdG8KKyAqIHJlcG9ydCB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0b3RhbCB0aW1lIHRha2VuIGZvciBwcm9iZWQgZnVuY3Rpb24KKyAqIHRvIHJ1bi4KKyAqCisgKiB1c2FnZTogaW5zbW9kIGtyZXRwcm9iZV9leGFtcGxlLmtvIGZ1bmM9PGZ1bmNfbmFtZT4KKyAqCisgKiBJZiBubyBmdW5jX25hbWUgaXMgc3BlY2lmaWVkLCBkb19mb3JrIGlzIGluc3RydW1lbnRlZAorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZW9yeSBvZiBvcGVyYXRpb24gb2Yga3JldHByb2Jlcywgc2VlCisgKiBEb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CisgKgorICogQnVpbGQgYW5kIGluc2VydCB0aGUga2VybmVsIG1vZHVsZSBhcyBkb25lIGluIHRoZSBrcHJvYmUgZXhhbXBsZS4KKyAqIFlvdSB3aWxsIHNlZSB0aGUgdHJhY2UgZGF0YSBpbiAvdmFyL2xvZy9tZXNzYWdlcyBhbmQgb24gdGhlIGNvbnNvbGUKKyAqIHdoZW5ldmVyIHRoZSBwcm9iZWQgZnVuY3Rpb24gcmV0dXJucy4gKFNvbWUgbWVzc2FnZXMgbWF5IGJlIHN1cHByZXNzZWQKKyAqIGlmIHN5c2xvZ2QgaXMgY29uZmlndXJlZCB0byBlbGltaW5hdGUgZHVwbGljYXRlIG1lc3NhZ2VzLikKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisKK3N0YXRpYyBjaGFyIGZ1bmNfbmFtZVtOQU1FX01BWF0gPSAiZG9fZm9yayI7Cittb2R1bGVfcGFyYW1fc3RyaW5nKGZ1bmMsIGZ1bmNfbmFtZSwgTkFNRV9NQVgsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhmdW5jLCAiRnVuY3Rpb24gdG8ga3JldHByb2JlOyB0aGlzIG1vZHVsZSB3aWxsIHJlcG9ydCB0aGUiCisJCQkiIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIHRpbWUiKTsKKworLyogcGVyLWluc3RhbmNlIHByaXZhdGUgZGF0YSAqLworc3RydWN0IG15X2RhdGEgeworCWt0aW1lX3QgZW50cnlfc3RhbXA7Cit9OworCisvKiBIZXJlIHdlIHVzZSB0aGUgZW50cnlfaGFubGRlciB0byB0aW1lc3RhbXAgZnVuY3Rpb24gZW50cnkgKi8KK3N0YXRpYyBpbnQgZW50cnlfaGFuZGxlcihzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG15X2RhdGEgKmRhdGE7CisKKwlpZiAoIWN1cnJlbnQtPm1tKQorCQlyZXR1cm4gMTsJLyogU2tpcCBrZXJuZWwgdGhyZWFkcyAqLworCisJZGF0YSA9IChzdHJ1Y3QgbXlfZGF0YSAqKXJpLT5kYXRhOworCWRhdGEtPmVudHJ5X3N0YW1wID0ga3RpbWVfZ2V0KCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4tcHJvYmUgaGFuZGxlcjogTG9nIHRoZSByZXR1cm4gdmFsdWUgYW5kIGR1cmF0aW9uLiBEdXJhdGlvbiBtYXkgdHVybgorICogb3V0IHRvIGJlIHplcm8gY29uc2lzdGVudGx5LCBkZXBlbmRpbmcgdXBvbiB0aGUgZ3JhbnVsYXJpdHkgb2YgdGltZQorICogYWNjb3VudGluZyBvbiB0aGUgcGxhdGZvcm0uCisgKi8KK3N0YXRpYyBpbnQgcmV0X2hhbmRsZXIoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCByZXR2YWwgPSByZWdzX3JldHVybl92YWx1ZShyZWdzKTsKKwlzdHJ1Y3QgbXlfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgbXlfZGF0YSAqKXJpLT5kYXRhOworCXM2NCBkZWx0YTsKKwlrdGltZV90IG5vdzsKKworCW5vdyA9IGt0aW1lX2dldCgpOworCWRlbHRhID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKG5vdywgZGF0YS0+ZW50cnlfc3RhbXApKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcyByZXR1cm5lZCAlZCBhbmQgdG9vayAlbGxkIG5zIHRvIGV4ZWN1dGVcbiIsCisJCQlmdW5jX25hbWUsIHJldHZhbCwgKGxvbmcgbG9uZylkZWx0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3JldHByb2JlIG15X2tyZXRwcm9iZSA9IHsKKwkuaGFuZGxlcgkJPSByZXRfaGFuZGxlciwKKwkuZW50cnlfaGFuZGxlcgkJPSBlbnRyeV9oYW5kbGVyLAorCS5kYXRhX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBteV9kYXRhKSwKKwkvKiBQcm9iZSB1cCB0byAyMCBpbnN0YW5jZXMgY29uY3VycmVudGx5LiAqLworCS5tYXhhY3RpdmUJCT0gMjAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrcmV0cHJvYmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlteV9rcmV0cHJvYmUua3Auc3ltYm9sX25hbWUgPSBmdW5jX25hbWU7CisJcmV0ID0gcmVnaXN0ZXJfa3JldHByb2JlKCZteV9rcmV0cHJvYmUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJlZ2lzdGVyX2tyZXRwcm9iZSBmYWlsZWQsIHJldHVybmVkICVkXG4iLAorCQkJCXJldCk7CisJCXJldHVybiAtMTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiUGxhbnRlZCByZXR1cm4gcHJvYmUgYXQgJXM6ICVwXG4iLAorCQkJbXlfa3JldHByb2JlLmtwLnN5bWJvbF9uYW1lLCBteV9rcmV0cHJvYmUua3AuYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrcmV0cHJvYmVfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfa3JldHByb2JlKCZteV9rcmV0cHJvYmUpOworCXByaW50ayhLRVJOX0lORk8gImtyZXRwcm9iZSBhdCAlcCB1bnJlZ2lzdGVyZWRcbiIsCisJCQlteV9rcmV0cHJvYmUua3AuYWRkcik7CisKKwkvKiBubWlzc2VkID4gMCBzdWdnZXN0cyB0aGF0IG1heGFjdGl2ZSB3YXMgc2V0IHRvbyBsb3cuICovCisJcHJpbnRrKEtFUk5fSU5GTyAiTWlzc2VkIHByb2JpbmcgJWQgaW5zdGFuY2VzIG9mICVzXG4iLAorCQlteV9rcmV0cHJvYmUubm1pc3NlZCwgbXlfa3JldHByb2JlLmtwLnN5bWJvbF9uYW1lKTsKK30KKworbW9kdWxlX2luaXQoa3JldHByb2JlX2luaXQpCittb2R1bGVfZXhpdChrcmV0cHJvYmVfZXhpdCkKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdCBiL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAppbmRleCBjZmMwMDRlLi4yZDIwNjQwIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CkBAIC01OCw2ICs1OCw5IEBACiAjIFN0b3AgYWZ0ZXIgYnVpbGRpbmcgLm8gZmlsZXMgaWYgTk9GSU5BTCBpcyBzZXQuIE1ha2VzIGNvbXBpbGUgdGVzdHMgcXVpY2tlcgogX21vZHBvc3Q6ICQoaWYgJChLQlVJTERfTU9EUE9TVF9OT0ZJTkFMKSwgJChtb2R1bGVzOi5rbzoubyksJChtb2R1bGVzKSkKIAoraWZuZXEgKCQoS0JVSUxEX0JVSUxESE9TVCksJChBUkNIKSkKKyAgICAgICAgY3Jvc3NfYnVpbGQgOj0gMQorZW5kaWYKIAogIyBTdGVwIDIpLCBpbnZva2UgbW9kcG9zdAogIyAgSW5jbHVkZXMgc3RlcCAzLDQKQEAgLTcwLDcgKzczLDggQEAKICAkKGlmICQoQ09ORklHX0RFQlVHX1NFQ1RJT05fTUlTTUFUQ0gpLCwtUykgICAgICBcCiAgJChpZiAkKENPTkZJR19NQVJLRVJTKSwtSyAkKGtlcm5lbG1hcmtlcnNmaWxlKSkgXAogICQoaWYgJChDT05GSUdfTUFSS0VSUyksLU0gJChtYXJrZXJzZmlsZSkpCSBcCi0gJChpZiAkKEtCVUlMRF9FWFRNT0QpJChLQlVJTERfTU9EUE9TVF9XQVJOKSwtdykKKyAkKGlmICQoS0JVSUxEX0VYVE1PRCkkKEtCVUlMRF9NT0RQT1NUX1dBUk4pLC13KSBcCisgJChpZiAkKGNyb3NzX2J1aWxkKSwtYykKIAogcXVpZXRfY21kX21vZHBvc3QgPSBNT0RQT1NUICQod29yZHMgJChmaWx0ZXItb3V0IHZtbGludXggRk9SQ0UsICReKSkgbW9kdWxlcwogICAgICAgY21kX21vZHBvc3QgPSAkKG1vZHBvc3QpIC1zCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggMjA4NmE4NS4uNThhOTQ5NCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtOSw3ICs5LDcgQEAKIG15ICRQID0gJDA7CiAkUCA9fiBzQC4qL0BAZzsKIAotbXkgJFYgPSAnMC4xNCc7CitteSAkViA9ICcwLjE2JzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMTgsNiArMTgsNyBAQAogbXkgJGNoa19zaWdub2ZmID0gMTsKIG15ICRjaGtfcGF0Y2ggPSAxOwogbXkgJHRzdF90eXBlID0gMDsKK215ICR0c3Rfb25seTsKIG15ICRlbWFjcyA9IDA7CiBteSAkdGVyc2UgPSAwOwogbXkgJGZpbGUgPSAwOwpAQCAtNDQsNiArNDUsNyBAQAogCiAJJ2RlYnVnPXMnCT0+IFwlZGVidWcsCiAJJ3Rlc3QtdHlwZSEnCT0+IFwkdHN0X3R5cGUsCisJJ3Rlc3Qtb25seT1zJwk9PiBcJHRzdF9vbmx5LAogKSBvciBleGl0OwogCiBteSAkZXhpdCA9IDA7CkBAIC0xMDUsOCArMTA3LDcgQEAKIAkJCV9faW9tZW18CiAJCQlfX211c3RfY2hlY2t8CiAJCQlfX2luaXRfcmVmb2t8Ci0JCQlfX2twcm9iZXN8Ci0JCQlmYXN0Y2FsbAorCQkJX19rcHJvYmVzCiAJCX14Owogb3VyICRBdHRyaWJ1dGUJPSBxcnsKIAkJCWNvbnN0fApAQCAtMTU4LDcgKzE1OSwxMCBAQAogCQkJXGIKIAkJCSg/OmNvbnN0XHMrKT8KIAkJCSg/OnVuc2lnbmVkXHMrKT8KLQkJCSRhbGwKKwkJCSg/OgorCQkJCSRhbGx8CisJCQkJKD86dHlwZW9mfF9fdHlwZW9mX18pXHMqXChccypcKipccyokSWRlbnRccypcKQorCQkJKQogCQkJKD86XHMrJFNwYXJzZXxccytjb25zdCkqCiAJCQlcYgogCQkgIH14OwpAQCAtMjYxLDE3ICsyNjUsNyBAQAogCXJldHVybiAkcmVzOwogfQogc3ViIGNvcHlfc3BhY2luZyB7Ci0JbXkgKCRzdHIpID0gQF87Ci0KLQlteSAkcmVzID0gJyc7Ci0JZm9yIG15ICRjIChzcGxpdCgvLywgJHN0cikpIHsKLQkJaWYgKCRjIGVxICJcdCIpIHsKLQkJCSRyZXMgLj0gJGM7Ci0JCX0gZWxzZSB7Ci0JCQkkcmVzIC49ICcgJzsKLQkJfQotCX0KLQorCShteSAkcmVzID0gc2hpZnQpID1+IHRyL1x0LyAvYzsKIAlyZXR1cm4gJHJlczsKIH0KIApAQCAtMjg4LDUzICsyODIsNzYgQEAKIAlyZXR1cm4gKGxlbmd0aCgkbGluZSksIGxlbmd0aCgkd2hpdGUpKTsKIH0KIAorbXkgJHNhbml0aXNlX3F1b3RlID0gJyc7CisKK3N1YiBzYW5pdGlzZV9saW5lX3Jlc2V0IHsKKwlteSAoJGluX2NvbW1lbnQpID0gQF87CisKKwlpZiAoJGluX2NvbW1lbnQpIHsKKwkJJHNhbml0aXNlX3F1b3RlID0gJyovJzsKKwl9IGVsc2UgeworCQkkc2FuaXRpc2VfcXVvdGUgPSAnJzsKKwl9Cit9CiBzdWIgc2FuaXRpc2VfbGluZSB7CiAJbXkgKCRsaW5lKSA9IEBfOwogCiAJbXkgJHJlcyA9ICcnOwogCW15ICRsID0gJyc7CiAKLQlteSAkcXVvdGUgPSAnJzsKIAlteSAkcWxlbiA9IDA7CisJbXkgJG9mZiA9IDA7CisJbXkgJGM7CiAKLQlmb3JlYWNoIG15ICRjIChzcGxpdCgvLywgJGxpbmUpKSB7Ci0JCSMgVGhlIHNlY29uZCBiYWNrc2xhc2ggb2YgYSBwYWlyIGlzIG5vdCBhICJxdW90ZSIuCi0JCWlmICgkbCBlcSAiXFwiICYmICRjIGVxICJcXCIpIHsKLQkJCSRjID0gJ1gnOworCSMgQWx3YXlzIGNvcHkgb3ZlciB0aGUgZGlmZiBtYXJrZXIuCisJJHJlcyA9IHN1YnN0cigkbGluZSwgMCwgMSk7CisKKwlmb3IgKCRvZmYgPSAxOyAkb2ZmIDwgbGVuZ3RoKCRsaW5lKTsgJG9mZisrKSB7CisJCSRjID0gc3Vic3RyKCRsaW5lLCAkb2ZmLCAxKTsKKworCQkjIENvbW1lbnRzIHdlIGFyZSB3YWNraW5nIGNvbXBsZXRseSBpbmNsdWRpbmcgdGhlIGJlZ2luCisJCSMgYW5kIGVuZCwgYWxsIHRvICQ7LgorCQlpZiAoJHNhbml0aXNlX3F1b3RlIGVxICcnICYmIHN1YnN0cigkbGluZSwgJG9mZiwgMikgZXEgJy8qJykgeworCQkJJHNhbml0aXNlX3F1b3RlID0gJyovJzsKKworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDIsICIkOyQ7Iik7CisJCQkkb2ZmKys7CisJCQluZXh0OwogCQl9Ci0JCWlmICgkbCBuZSAiXFwiICYmICgkYyBlcSAiJyIgfHwgJGMgZXEgJyInKSkgewotCQkJaWYgKCRxdW90ZSBlcSAnJykgewotCQkJCSRxdW90ZSA9ICRjOwotCQkJCSRyZXMgLj0gJGM7Ci0JCQkJJGwgPSAkYzsKLQkJCQkkcWxlbiA9IDA7CisJCWlmIChzdWJzdHIoJGxpbmUsICRvZmYsIDIpIGVxICRzYW5pdGlzZV9xdW90ZSkgeworCQkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMiwgIiQ7JDsiKTsKKwkJCSRvZmYrKzsKKwkJCW5leHQ7CisJCX0KKworCQkjIEEgXCBpbiBhIHN0cmluZyBtZWFucyBpZ25vcmUgdGhlIG5leHQgY2hhcmFjdGVyLgorCQlpZiAoKCRzYW5pdGlzZV9xdW90ZSBlcSAiJyIgfHwgJHNhbml0aXNlX3F1b3RlIGVxICciJykgJiYKKwkJICAgICRjIGVxICJcXCIpIHsKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAyLCAnWFgnKTsKKwkJCSRvZmYrKzsKKwkJCW5leHQ7CisJCX0KKwkJIyBSZWd1bGFyIHF1b3Rlcy4KKwkJaWYgKCRjIGVxICInIiB8fCAkYyBlcSAnIicpIHsKKwkJCWlmICgkc2FuaXRpc2VfcXVvdGUgZXEgJycpIHsKKwkJCQkkc2FuaXRpc2VfcXVvdGUgPSAkYzsKKworCQkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAkYyk7CiAJCQkJbmV4dDsKLQkJCX0gZWxzaWYgKCRxdW90ZSBlcSAkYykgewotCQkJCSRxdW90ZSA9ICcnOworCQkJfSBlbHNpZiAoJHNhbml0aXNlX3F1b3RlIGVxICRjKSB7CisJCQkJJHNhbml0aXNlX3F1b3RlID0gJyc7CiAJCQl9CiAJCX0KLQkJaWYgKCRxdW90ZSBlcSAiJyIgJiYgJHFsZW4gPiAxKSB7Ci0JCQkkcXVvdGUgPSAnJzsKLQkJfQotCQlpZiAoJHF1b3RlICYmICRjIG5lICJcdCIpIHsKLQkJCSRyZXMgLj0gIlgiOwotCQkJJHFsZW4rKzsKKworCQkjcHJpbnQgIlNROiRzYW5pdGlzZV9xdW90ZVxuIjsKKwkJaWYgKCRvZmYgIT0gMCAmJiAkc2FuaXRpc2VfcXVvdGUgZXEgJyovJyAmJiAkYyBuZSAiXHQiKSB7CisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMSwgJDspOworCQl9IGVsc2lmICgkb2ZmICE9IDAgJiYgJHNhbml0aXNlX3F1b3RlICYmICRjIG5lICJcdCIpIHsKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAnWCcpOwogCQl9IGVsc2UgewotCQkJJHJlcyAuPSAkYzsKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAkYyk7CiAJCX0KLQotCQkkbCA9ICRjOwotCX0KLQotCSMgQ2xlYXIgb3V0IHRoZSBjb21tZW50cy4KLQl3aGlsZSAoJHJlcyA9fiBtQCgvXCouKj9cKi8pQGcpIHsKLQkJc3Vic3RyKCRyZXMsICQtWzFdLCAkK1sxXSAtICQtWzFdKSA9ICQ7IHggKCQrWzFdIC0gJC1bMV0pOwotCX0KLQlpZiAoJHJlcyA9fiBtQCgvXCouKilAKSB7Ci0JCXN1YnN0cigkcmVzLCAkLVsxXSwgJCtbMV0gLSAkLVsxXSkgPSAkOyB4ICgkK1sxXSAtICQtWzFdKTsKLQl9Ci0JaWYgKCRyZXMgPX4gbUBeLiguKlwqLylAKSB7Ci0JCXN1YnN0cigkcmVzLCAkLVsxXSwgJCtbMV0gLSAkLVsxXSkgPSAkOyB4ICgkK1sxXSAtICQtWzFdKTsKIAl9CiAKIAkjIFRoZSBwYXRobmFtZSBvbiBhICNpbmNsdWRlIG1heSBiZSBzdXJyb3VuZGVkIGJ5ICc8JyBhbmQgJz4nLgpAQCAtMzU3LDE3ICszNzQsMTkgQEAKIAlteSAkYmxrID0gJyc7CiAJbXkgJHNvZmYgPSAkb2ZmOwogCW15ICRjb2ZmID0gJG9mZiAtIDE7CisJbXkgJGNvZmZfc2V0ID0gMDsKIAogCW15ICRsb2ZmID0gMDsKIAogCW15ICR0eXBlID0gJyc7CiAJbXkgJGxldmVsID0gMDsKKwlteSAkcDsKIAlteSAkYzsKIAlteSAkbGVuID0gMDsKIAogCW15ICRyZW1haW5kZXI7CiAJd2hpbGUgKDEpIHsKLQkJI3dhcm4gIkNTQjogYmxrPCRibGs+XG4iOworCQkjd2FybiAiQ1NCOiBibGs8JGJsaz4gcmVtYWluPCRyZW1haW4+XG4iOwogCQkjIElmIHdlIGFyZSBhYm91dCB0byBkcm9wIG9mZiB0aGUgZW5kLCBwdWxsIGluIG1vcmUKIAkJIyBjb250ZXh0LgogCQlpZiAoJG9mZiA+PSAkbGVuKSB7CkBAIC0zODYsMTAgKzQwNSwxMSBAQAogCQkJCWxhc3Q7CiAJCQl9CiAJCX0KKwkJJHAgPSAkYzsKIAkJJGMgPSBzdWJzdHIoJGJsaywgJG9mZiwgMSk7CiAJCSRyZW1haW5kZXIgPSBzdWJzdHIoJGJsaywgJG9mZik7CiAKLQkJI3dhcm4gIkNTQjogYzwkYz4gdHlwZTwkdHlwZT4gbGV2ZWw8JGxldmVsPlxuIjsKKwkJI3dhcm4gIkNTQjogYzwkYz4gdHlwZTwkdHlwZT4gbGV2ZWw8JGxldmVsPiByZW1haW5kZXI8JHJlbWFpbmRlcj4gY29mZl9zZXQ8JGNvZmZfc2V0PlxuIjsKIAkJIyBTdGF0ZW1lbnQgZW5kcyBhdCB0aGUgJzsnIG9yIGEgY2xvc2UgJ30nIGF0IHRoZQogCQkjIG91dGVybW9zdCBsZXZlbC4KIAkJaWYgKCRsZXZlbCA9PSAwICYmICRjIGVxICc7JykgewpAQCAtMzk3LDkgKzQxNywxNCBAQAogCQl9CiAKIAkJIyBBbiBlbHNlIGlzIHJlYWxseSBhIGNvbmRpdGlvbmFsIGFzIGxvbmcgYXMgaXRzIG5vdCBlbHNlIGlmCi0JCWlmICgkbGV2ZWwgPT0gMCAmJiAkcmVtYWluZGVyID1+IC8oXHMrZWxzZSkoPzpcc3x7KS8gJiYKLQkJCQkJJHJlbWFpbmRlciAhfiAvXHMrZWxzZVxzK2lmXGIvKSB7Ci0JCQkkY29mZiA9ICRvZmYgKyBsZW5ndGgoJDEpOworCQlpZiAoJGxldmVsID09IDAgJiYgJGNvZmZfc2V0ID09IDAgJiYKKwkJCQkoIWRlZmluZWQoJHApIHx8ICRwID1+IC8oPzpcc3xcfXxcKykvKSAmJgorCQkJCSRyZW1haW5kZXIgPX4gL14oZWxzZSkoPzpcc3x7KS8gJiYKKwkJCQkkcmVtYWluZGVyICF+IC9eZWxzZVxzK2lmXGIvKSB7CisJCQkkY29mZiA9ICRvZmYgKyBsZW5ndGgoJDEpIC0gMTsKKwkJCSRjb2ZmX3NldCA9IDE7CisJCQkjd2FybiAiQ1NCOiBtYXJrIGNvZmY8JGNvZmY+IHNvZmY8JHNvZmY+IDE8JDE+XG4iOworCQkJI3dhcm4gIlsiIC4gc3Vic3RyKCRibGssICRzb2ZmLCAkY29mZiAtICRzb2ZmICsgMSkgLiAiXVxuIjsKIAkJfQogCiAJCWlmICgoJHR5cGUgZXEgJycgfHwgJHR5cGUgZXEgJygnKSAmJiAkYyBlcSAnKCcpIHsKQEAgLTQxMiw2ICs0MzcsOCBAQAogCiAJCQlpZiAoJGxldmVsID09IDAgJiYgJGNvZmYgPCAkc29mZikgewogCQkJCSRjb2ZmID0gJG9mZjsKKwkJCQkkY29mZl9zZXQgPSAxOworCQkJCSN3YXJuICJDU0I6IG1hcmsgY29mZjwkY29mZj5cbiI7CiAJCQl9CiAJCX0KIAkJaWYgKCgkdHlwZSBlcSAnJyB8fCAkdHlwZSBlcSAneycpICYmICRjIGVxICd7JykgewpAQCAtNDM5LDI3ICs0NjYsNzkgQEAKIAkjd2FybiAiU1RBVEVNRU5UPCRzdGF0ZW1lbnQ+XG4iOwogCSN3YXJuICJDT05ESVRJT048JGNvbmRpdGlvbj5cbiI7CiAKLQkjcHJpbnQgIm9mZjwkb2ZmPiBsb2ZmPCRsb2ZmPlxuIjsKKwkjcHJpbnQgImNvZmY8JGNvZmY+IHNvZmY8JG9mZj4gbG9mZjwkbG9mZj5cbiI7CiAKIAlyZXR1cm4gKCRzdGF0ZW1lbnQsICRjb25kaXRpb24sCiAJCQkkbGluZSwgJHJlbWFpbiArIDEsICRvZmYgLSAkbG9mZiArIDEsICRsZXZlbCk7CiB9CiAKK3N1YiBzdGF0ZW1lbnRfbGluZXMgeworCW15ICgkc3RtdCkgPSBAXzsKKworCSMgU3RyaXAgdGhlIGRpZmYgbGluZSBwcmVmaXhlcyBhbmQgcmlwIGJsYW5rIGxpbmVzIGF0IHN0YXJ0IGFuZCBlbmQuCisJJHN0bXQgPX4gcy8oXnxcbikuLyQxL2c7CisJJHN0bXQgPX4gcy9eXHMqLy87CisJJHN0bXQgPX4gcy9ccyokLy87CisKKwlteSBAc3RtdF9saW5lcyA9ICgkc3RtdCA9fiAvXG4vZyk7CisKKwlyZXR1cm4gJCNzdG10X2xpbmVzICsgMjsKK30KKworc3ViIHN0YXRlbWVudF9yYXdsaW5lcyB7CisJbXkgKCRzdG10KSA9IEBfOworCisJbXkgQHN0bXRfbGluZXMgPSAoJHN0bXQgPX4gL1xuL2cpOworCisJcmV0dXJuICQjc3RtdF9saW5lcyArIDI7Cit9CisKK3N1YiBzdGF0ZW1lbnRfYmxvY2tfc2l6ZSB7CisJbXkgKCRzdG10KSA9IEBfOworCisJJHN0bXQgPX4gcy8oXnxcbikuLyQxL2c7CisJJHN0bXQgPX4gcy9eXHMqey8vOworCSRzdG10ID1+IHMvfVxzKiQvLzsKKwkkc3RtdCA9fiBzL15ccyovLzsKKwkkc3RtdCA9fiBzL1xzKiQvLzsKKworCW15IEBzdG10X2xpbmVzID0gKCRzdG10ID1+IC9cbi9nKTsKKwlteSBAc3RtdF9zdGF0ZW1lbnRzID0gKCRzdG10ID1+IC87L2cpOworCisJbXkgJHN0bXRfbGluZXMgPSAkI3N0bXRfbGluZXMgKyAyOworCW15ICRzdG10X3N0YXRlbWVudHMgPSAkI3N0bXRfc3RhdGVtZW50cyArIDE7CisKKwlpZiAoJHN0bXRfbGluZXMgPiAkc3RtdF9zdGF0ZW1lbnRzKSB7CisJCXJldHVybiAkc3RtdF9saW5lczsKKwl9IGVsc2UgeworCQlyZXR1cm4gJHN0bXRfc3RhdGVtZW50czsKKwl9Cit9CisKIHN1YiBjdHhfc3RhdGVtZW50X2Z1bGwgewogCW15ICgkbGluZW5yLCAkcmVtYWluLCAkb2ZmKSA9IEBfOwogCW15ICgkc3RhdGVtZW50LCAkY29uZGl0aW9uLCAkbGV2ZWwpOwogCiAJbXkgKEBjaHVua3MpOwogCisJIyBHcmFiIHRoZSBmaXJzdCBjb25kaXRpb25hbC9ibG9jayBwYWlyLgogCSgkc3RhdGVtZW50LCAkY29uZGl0aW9uLCAkbGluZW5yLCAkcmVtYWluLCAkb2ZmLCAkbGV2ZWwpID0KIAkJCQljdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZW1haW4sICRvZmYpOwotCSNwcmludCAiRjogYzwkY29uZGl0aW9uPiBzPCRzdGF0ZW1lbnQ+XG4iOworCSNwcmludCAiRjogYzwkY29uZGl0aW9uPiBzPCRzdGF0ZW1lbnQ+IHJlbWFpbjwkcmVtYWluPlxuIjsKKwlwdXNoKEBjaHVua3MsIFsgJGNvbmRpdGlvbiwgJHN0YXRlbWVudCBdKTsKKwlpZiAoISgkcmVtYWluID4gMCAmJiAkY29uZGl0aW9uID1+IC9eXHMqKD86XG5bKy1dKT9ccyooPzppZnxlbHNlfGRvKVxiL3MpKSB7CisJCXJldHVybiAoJGxldmVsLCAkbGluZW5yLCBAY2h1bmtzKTsKKwl9CisKKwkjIFB1bGwgaW4gdGhlIGZvbGxvd2luZyBjb25kaXRpb25hbC9ibG9jayBwYWlycyBhbmQgc2VlIGlmIHRoZXkKKwkjIGNvdWxkIGNvbnRpbnVlIHRoZSBzdGF0ZW1lbnQuCiAJZm9yICg7OykgewotCQlwdXNoKEBjaHVua3MsIFsgJGNvbmRpdGlvbiwgJHN0YXRlbWVudCBdKTsKLQkJbGFzdCBpZiAoISgkcmVtYWluID4gMCAmJiAkY29uZGl0aW9uID1+IC9eLlxzKig/OmlmfGVsc2V8ZG8pLykpOwogCQkoJHN0YXRlbWVudCwgJGNvbmRpdGlvbiwgJGxpbmVuciwgJHJlbWFpbiwgJG9mZiwgJGxldmVsKSA9CiAJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVtYWluLCAkb2ZmKTsKLQkJI3ByaW50ICJDOiBjPCRjb25kaXRpb24+IHM8JHN0YXRlbWVudD5cbiI7CisJCSNwcmludCAiQzogYzwkY29uZGl0aW9uPiBzPCRzdGF0ZW1lbnQ+IHJlbWFpbjwkcmVtYWluPlxuIjsKKwkJbGFzdCBpZiAoISgkcmVtYWluID4gMCAmJiAkY29uZGl0aW9uID1+IC9eKD86XHMqXG5bKy1dKSpccyooPzplbHNlfGRvKVxiL3MpKTsKKwkJI3ByaW50ICJDOiBwdXNoXG4iOworCQlwdXNoKEBjaHVua3MsIFsgJGNvbmRpdGlvbiwgJHN0YXRlbWVudCBdKTsKIAl9CiAKIAlyZXR1cm4gKCRsZXZlbCwgJGxpbmVuciwgQGNodW5rcyk7CkBAIC01OTMsMTMgKzY3MiwxMyBAQAogfQogCiBteSAkYXZfcHJlcHJvY2Vzc29yID0gMDsKLW15ICRhdl9wYXJlbiA9IDA7CitteSAkYXZfcGVuZGluZzsKIG15IEBhdl9wYXJlbl90eXBlOwogCiBzdWIgYW5ub3RhdGVfcmVzZXQgewogCSRhdl9wcmVwcm9jZXNzb3IgPSAwOwotCSRhdl9wYXJlbiA9IDA7Ci0JQGF2X3BhcmVuX3R5cGUgPSAoKTsKKwkkYXZfcGVuZGluZyA9ICdfJzsKKwlAYXZfcGFyZW5fdHlwZSA9ICgnRScpOwogfQogCiBzdWIgYW5ub3RhdGVfdmFsdWVzIHsKQEAgLTYxMSwxMiArNjkwLDE0IEBACiAJcHJpbnQgIiRzdHJlYW1cbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CiAKIAl3aGlsZSAobGVuZ3RoKCRjdXIpKSB7Ci0JCXByaW50ICIgPCR0eXBlPiAiIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQlAYXZfcGFyZW5fdHlwZSA9ICgnRScpIGlmICgkI2F2X3BhcmVuX3R5cGUgPCAwKTsKKwkJcHJpbnQgIiA8IiAuIGpvaW4oJycsIEBhdl9wYXJlbl90eXBlKSAuCisJCQkJCSI+IDwkdHlwZT4gIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKIAkJaWYgKCRjdXIgPX4gL14oXHMrKS9vKSB7CiAJCQlwcmludCAiV1MoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwogCQkJaWYgKCQxID1+IC9cbi8gJiYgJGF2X3ByZXByb2Nlc3NvcikgeworCQkJCSR0eXBlID0gcG9wKEBhdl9wYXJlbl90eXBlKTsKIAkJCQkkYXZfcHJlcHJvY2Vzc29yID0gMDsKLQkJCQkkdHlwZSA9ICdOJzsKIAkJCX0KIAogCQl9IGVsc2lmICgkY3VyID1+IC9eKCRUeXBlKS8pIHsKQEAgLTYyNiwxMSArNzA3LDMzIEBACiAJCX0gZWxzaWYgKCRjdXIgPX4gL14oI1xzKmRlZmluZVxzKiRJZGVudCkoXCg/KS9vKSB7CiAJCQlwcmludCAiREVGSU5FKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKIAkJCSRhdl9wcmVwcm9jZXNzb3IgPSAxOwotCQkJJGF2X3BhcmVuX3R5cGVbJGF2X3BhcmVuXSA9ICdOJzsKKwkJCSRhdl9wZW5kaW5nID0gJ04nOwogCi0JCX0gZWxzaWYgKCRjdXIgPX4gL14oI1xzKig/OmlmZGVmfGlmbmRlZnxpZnxlbHNlfGVsaWZ8ZW5kaWYpKS9vKSB7Ci0JCQlwcmludCAiUFJFKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigjXHMqKD86aWZkZWZ8aWZuZGVmfGlmKSkvbykgeworCQkJcHJpbnQgIlBSRV9TVEFSVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CiAJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJHR5cGUpOworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJHR5cGUpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigjXHMqKD86ZWxzZXxlbGlmKSkvbykgeworCQkJcHJpbnQgIlBSRV9SRVNUQVJUKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSRhdl9wcmVwcm9jZXNzb3IgPSAxOworCisJCQlwdXNoKEBhdl9wYXJlbl90eXBlLCAkYXZfcGFyZW5fdHlwZVskI2F2X3BhcmVuX3R5cGVdKTsKKworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigjXHMqKD86ZW5kaWYpKS9vKSB7CisJCQlwcmludCAiUFJFX0VORCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisKKwkJCSRhdl9wcmVwcm9jZXNzb3IgPSAxOworCisJCQkjIEFzc3VtZSBhbGwgYXJtcyBvZiB0aGUgY29uZGl0aW9uYWwgZW5kIGFzIHRoaXMKKwkJCSMgb25lIGRvZXMsIGFuZCBjb250aW51ZSBhcyBpZiB0aGUgI2VuZGlmIHdhcyBub3QgaGVyZS4KKwkJCXBvcChAYXZfcGFyZW5fdHlwZSk7CisJCQlwdXNoKEBhdl9wYXJlbl90eXBlLCAkdHlwZSk7CiAJCQkkdHlwZSA9ICdOJzsKIAogCQl9IGVsc2lmICgkY3VyID1+IC9eKFxcXG4pL28pIHsKQEAgLTYzOSwxMyArNzQyLDEzIEBACiAJCX0gZWxzaWYgKCRjdXIgPX4gL14oc2l6ZW9mKVxzKihcKCk/L28pIHsKIAkJCXByaW50ICJTSVpFT0YoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwogCQkJaWYgKGRlZmluZWQgJDIpIHsKLQkJCQkkYXZfcGFyZW5fdHlwZVskYXZfcGFyZW5dID0gJ1YnOworCQkJCSRhdl9wZW5kaW5nID0gJ1YnOwogCQkJfQogCQkJJHR5cGUgPSAnTic7CiAKIAkJfSBlbHNpZiAoJGN1ciA9fiAvXihpZnx3aGlsZXx0eXBlb2Z8X190eXBlb2ZfX3xmb3IpXGIvbykgewogCQkJcHJpbnQgIkNPTkQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwotCQkJJGF2X3BhcmVuX3R5cGVbJGF2X3BhcmVuXSA9ICdOJzsKKwkJCSRhdl9wZW5kaW5nID0gJ04nOwogCQkJJHR5cGUgPSAnTic7CiAKIAkJfSBlbHNpZiAoJGN1ciA9fi9eKHJldHVybnxjYXNlfGVsc2UpL28pIHsKQEAgLTY1NCwxNCArNzU3LDE0IEBACiAKIAkJfSBlbHNpZiAoJGN1ciA9fiAvXihcKCkvbykgewogCQkJcHJpbnQgIlBBUkVOKCckMScpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwotCQkJJGF2X3BhcmVuKys7CisJCQlwdXNoKEBhdl9wYXJlbl90eXBlLCAkYXZfcGVuZGluZyk7CisJCQkkYXZfcGVuZGluZyA9ICdfJzsKIAkJCSR0eXBlID0gJ04nOwogCiAJCX0gZWxzaWYgKCRjdXIgPX4gL14oXCkpL28pIHsKLQkJCSRhdl9wYXJlbi0tIGlmICgkYXZfcGFyZW4gPiAwKTsKLQkJCWlmIChkZWZpbmVkICRhdl9wYXJlbl90eXBlWyRhdl9wYXJlbl0pIHsKLQkJCQkkdHlwZSA9ICRhdl9wYXJlbl90eXBlWyRhdl9wYXJlbl07Ci0JCQkJdW5kZWYgJGF2X3BhcmVuX3R5cGVbJGF2X3BhcmVuXTsKKwkJCW15ICRuZXdfdHlwZSA9IHBvcChAYXZfcGFyZW5fdHlwZSk7CisJCQlpZiAoJG5ld190eXBlIG5lICdfJykgeworCQkJCSR0eXBlID0gJG5ld190eXBlOwogCQkJCXByaW50ICJQQVJFTignJDEnKSAtPiAkdHlwZVxuIgogCQkJCQkJCWlmICgkZGJnX3ZhbHVlcyA+IDEpOwogCQkJfSBlbHNlIHsKQEAgLTY3MCw3ICs3NzMsNyBAQAogCiAJCX0gZWxzaWYgKCRjdXIgPX4gL14oJElkZW50KVwoL28pIHsKIAkJCXByaW50ICJGVU5DKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKLQkJCSRhdl9wYXJlbl90eXBlWyRhdl9wYXJlbl0gPSAnVic7CisJCQkkYXZfcGVuZGluZyA9ICdWJzsKIAogCQl9IGVsc2lmICgkY3VyID1+IC9eKCRJZGVudHwkQ29uc3RhbnQpL28pIHsKIAkJCXByaW50ICJJREVOVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CkBAIC02ODAsMTEgKzc4MywxMSBAQAogCQkJcHJpbnQgIkFTU0lHTigkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CiAJCQkkdHlwZSA9ICdOJzsKIAotCQl9IGVsc2lmICgkY3VyID1+L14oOykvKSB7CisJCX0gZWxzaWYgKCRjdXIgPX4vXig7fHt8fSkvKSB7CiAJCQlwcmludCAiRU5EKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKIAkJCSR0eXBlID0gJ0UnOwogCi0JCX0gZWxzaWYgKCRjdXIgPX4gL14oO3x7fH18XD98OnxcWykvbykgeworCQl9IGVsc2lmICgkY3VyID1+IC9eKDt8XD98OnxcWykvbykgewogCQkJcHJpbnQgIkNMT1NFKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKIAkJCSR0eXBlID0gJ04nOwogCkBAIC03MjQsMjggKzgyNywzNCBAQAogbXkgJHByZWZpeCA9ICcnOwogCiBzdWIgcmVwb3J0IHsKKwlpZiAoZGVmaW5lZCAkdHN0X29ubHkgJiYgJF9bMF0gIX4gL1xRJHRzdF9vbmx5XEUvKSB7CisJCXJldHVybiAwOworCX0KIAlteSAkbGluZSA9ICRwcmVmaXggLiAkX1swXTsKIAogCSRsaW5lID0gKHNwbGl0KCdcbicsICRsaW5lKSlbMF0gLiAiXG4iIGlmICgkdGVyc2UpOwogCiAJcHVzaChvdXIgQHJlcG9ydCwgJGxpbmUpOworCisJcmV0dXJuIDE7CiB9CiBzdWIgcmVwb3J0X2R1bXAgewogCW91ciBAcmVwb3J0OwogfQogc3ViIEVSUk9SIHsKLQlyZXBvcnQoIkVSUk9SOiAkX1swXVxuIik7Ci0Jb3VyICRjbGVhbiA9IDA7Ci0Jb3VyICRjbnRfZXJyb3IrKzsKKwlpZiAocmVwb3J0KCJFUlJPUjogJF9bMF1cbiIpKSB7CisJCW91ciAkY2xlYW4gPSAwOworCQlvdXIgJGNudF9lcnJvcisrOworCX0KIH0KIHN1YiBXQVJOIHsKLQlyZXBvcnQoIldBUk5JTkc6ICRfWzBdXG4iKTsKLQlvdXIgJGNsZWFuID0gMDsKLQlvdXIgJGNudF93YXJuKys7CisJaWYgKHJlcG9ydCgiV0FSTklORzogJF9bMF1cbiIpKSB7CisJCW91ciAkY2xlYW4gPSAwOworCQlvdXIgJGNudF93YXJuKys7CisJfQogfQogc3ViIENISyB7Ci0JaWYgKCRjaGVjaykgewotCQlyZXBvcnQoIkNIRUNLOiAkX1swXVxuIik7CisJaWYgKCRjaGVjayAmJiByZXBvcnQoIkNIRUNLOiAkX1swXVxuIikpIHsKIAkJb3VyICRjbGVhbiA9IDA7CiAJCW91ciAkY250X2NoaysrOwogCX0KQEAgLTc4NywzMCArODk2LDc2IEBACiAJbXkgJHByZXZfdmFsdWVzID0gJ0UnOwogCiAJIyBzdXBwcmVzc2lvbiBmbGFncwotCW15ICRzdXBwcmVzc19pZmJyYWNlcyA9IDA7CisJbXkgJXN1cHByZXNzX2lmYnJhY2VzOwogCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggc2FuaXRpemluZyB0aGUgbGluZXMuCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggbG9va2luZyBmb3IgYW55IF9fc2V0dXAgZG9jdW1lbnRhdGlvbi4KIAkjCiAJbXkgQHNldHVwX2RvY3MgPSAoKTsKIAlteSAkc2V0dXBfZG9jcyA9IDA7CisKKwlzYW5pdGlzZV9saW5lX3Jlc2V0KCk7CiAJbXkgJGxpbmU7CiAJZm9yZWFjaCBteSAkcmF3bGluZSAoQHJhd2xpbmVzKSB7Ci0JCSMgU3RhbmRhcmRpc2UgdGhlIHN0cmluZ3MgYW5kIGNoYXJzIHdpdGhpbiB0aGUgaW5wdXQgdG8KLQkJIyBzaW1wbGlmeSBtYXRjaGluZy4KLQkJJGxpbmUgPSBzYW5pdGlzZV9saW5lKCRyYXdsaW5lKTsKLQkJcHVzaChAbGluZXMsICRsaW5lKTsKKwkJJGxpbmVucisrOworCQkkbGluZSA9ICRyYXdsaW5lOwogCi0JCSMjcHJpbnQgIj09PiRyYXdsaW5lXG4iOwotCQkjI3ByaW50ICItLT4kbGluZVxuIjsKLQotCQlpZiAoJGxpbmU9fi9eXCtcK1wrXHMrKFxTKykvKSB7CisJCWlmICgkcmF3bGluZT1+L15cK1wrXCtccysoXFMrKS8pIHsKIAkJCSRzZXR1cF9kb2NzID0gMDsKIAkJCWlmICgkMSA9fiBtQERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0JEApIHsKIAkJCQkkc2V0dXBfZG9jcyA9IDE7CiAJCQl9Ci0JCQluZXh0OworCQkJI25leHQ7CiAJCX0KKwkJaWYgKCRyYXdsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CisJCQkkcmVhbGxpbmU9JDEtMTsKKwkJCWlmIChkZWZpbmVkICQyKSB7CisJCQkJJHJlYWxjbnQ9JDMrMTsKKwkJCX0gZWxzZSB7CisJCQkJJHJlYWxjbnQ9MSsxOworCQkJfQorCisJCQkjIEd1ZXN0aW1hdGUgaWYgdGhpcyBpcyBhIGNvbnRpbnVpbmcgY29tbWVudC4gIFJ1bgorCQkJIyB0aGUgY29udGV4dCBsb29raW5nIGZvciBhIGNvbW1lbnQgImVkZ2UiLiAgSWYgdGhpcworCQkJIyBlZGdlIGlzIGEgY2xvc2UgY29tbWVudCB0aGVuIHdlIG11c3QgYmUgaW4gYSBjb21tZW50CisJCQkjIGF0IGNvbnRleHQgc3RhcnQuCisJCQlteSAkZWRnZTsKKwkJCWZvciAobXkgJGxuID0gJGxpbmVucjsgJGxuIDwgKCRsaW5lbnIgKyAkcmVhbGNudCk7ICRsbisrKSB7CisJCQkJbmV4dCBpZiAoJGxpbmUgPX4gL14tLyk7CisJCQkJKCRlZGdlKSA9ICgkcmF3bGluZXNbJGxuIC0gMV0gPX4gbUAoL1wqfFwqLylAKTsKKwkJCQlsYXN0IGlmIChkZWZpbmVkICRlZGdlKTsKKwkJCX0KKwkJCWlmIChkZWZpbmVkICRlZGdlICYmICRlZGdlIGVxICcqLycpIHsKKwkJCQkkaW5fY29tbWVudCA9IDE7CisJCQl9CisKKwkJCSMgR3Vlc3RpbWF0ZSBpZiB0aGlzIGlzIGEgY29udGludWluZyBjb21tZW50LiAgSWYgdGhpcworCQkJIyBpcyB0aGUgc3RhcnQgb2YgYSBkaWZmIGJsb2NrIGFuZCB0aGlzIGxpbmUgc3RhcnRzCisJCQkjICcgKicgdGhlbiBpdCBpcyB2ZXJ5IGxpa2VseSBhIGNvbW1lbnQuCisJCQlpZiAoIWRlZmluZWQgJGVkZ2UgJiYKKwkJCSAgICAkcmF3bGluZXNbJGxpbmVucl0gPX4gbUBeLlxzKiBcKig/OlxzfCQpQCkKKwkJCXsKKwkJCQkkaW5fY29tbWVudCA9IDE7CisJCQl9CisKKwkJCSMjcHJpbnQgIkNPTU1FTlQ6JGluX2NvbW1lbnQgZWRnZTwkZWRnZT4gJHJhd2xpbmVcbiI7CisJCQlzYW5pdGlzZV9saW5lX3Jlc2V0KCRpbl9jb21tZW50KTsKKworCQl9IGVsc2lmICgkcmVhbGNudCkgeworCQkJIyBTdGFuZGFyZGlzZSB0aGUgc3RyaW5ncyBhbmQgY2hhcnMgd2l0aGluIHRoZSBpbnB1dCB0bworCQkJIyBzaW1wbGlmeSBtYXRjaGluZy4KKwkJCSRsaW5lID0gc2FuaXRpc2VfbGluZSgkcmF3bGluZSk7CisJCX0KKwkJcHVzaChAbGluZXMsICRsaW5lKTsKKworCQlpZiAoJHJlYWxjbnQgPiAxKSB7CisJCQkkcmVhbGNudC0tIGlmICgkbGluZSA9fiAvXig/OlwrfCB8JCkvKTsKKwkJfSBlbHNlIHsKKwkJCSRyZWFsY250ID0gMDsKKwkJfQorCisJCSNwcmludCAiPT0+JHJhd2xpbmVcbiI7CisJCSNwcmludCAiLS0+JGxpbmVcbiI7CiAKIAkJaWYgKCRzZXR1cF9kb2NzICYmICRsaW5lID1+IC9eXCsvKSB7CiAJCQlwdXNoKEBzZXR1cF9kb2NzLCAkbGluZSk7CkBAIC04MTksMjMgKzk3NCwxNyBAQAogCiAJJHByZWZpeCA9ICcnOwogCisJJHJlYWxjbnQgPSAwOworCSRsaW5lbnIgPSAwOwogCWZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgewogCQkkbGluZW5yKys7CiAKIAkJbXkgJHJhd2xpbmUgPSAkcmF3bGluZXNbJGxpbmVuciAtIDFdOwogCi0jZXh0cmFjdCB0aGUgZmlsZW5hbWUgYXMgaXQgcGFzc2VzCi0JCWlmICgkbGluZT1+L15cK1wrXCtccysoXFMrKS8pIHsKLQkJCSRyZWFsZmlsZT0kMTsKLQkJCSRyZWFsZmlsZSA9fiBzQF5bXi9dKi9AQDsKLQkJCSRpbl9jb21tZW50ID0gMDsKLQkJCW5leHQ7Ci0JCX0KICNleHRyYWN0IHRoZSBsaW5lIHJhbmdlIGluIHRoZSBmaWxlIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkCiAJCWlmICgkbGluZT1+L15cQFxAIC1cZCsoPzosXGQrKT8gXCsoXGQrKSgsKFxkKykpPyBcQFxALykgewogCQkJJGlzX3BhdGNoID0gMTsKIAkJCSRmaXJzdF9saW5lID0gJGxpbmVuciArIDE7Ci0JCQkkaW5fY29tbWVudCA9IDA7CiAJCQkkcmVhbGxpbmU9JDEtMTsKIAkJCWlmIChkZWZpbmVkICQyKSB7CiAJCQkJJHJlYWxjbnQ9JDMrMTsKQEAgLTg0NSw1MCArOTk0LDE2IEBACiAJCQlhbm5vdGF0ZV9yZXNldCgpOwogCQkJJHByZXZfdmFsdWVzID0gJ0UnOwogCi0JCQkkc3VwcHJlc3NfaWZicmFjZXMgPSAkbGluZW5yIC0gMTsKKwkJCSVzdXBwcmVzc19pZmJyYWNlcyA9ICgpOwogCQkJbmV4dDsKLQkJfQogCiAjIHRyYWNrIHRoZSBsaW5lIG51bWJlciBhcyB3ZSBtb3ZlIHRocm91Z2ggdGhlIGh1bmssIG5vdGUgdGhhdAogIyBuZXcgdmVyc2lvbnMgb2YgR05VIGRpZmYgb21pdCB0aGUgbGVhZGluZyBzcGFjZSBvbiBjb21wbGV0ZWx5CiAjIGJsYW5rIGNvbnRleHQgbGluZXMgc28gd2UgbmVlZCB0byBjb3VudCB0aGF0IHRvby4KLQkJaWYgKCRsaW5lID1+IC9eKCB8XCt8JCkvKSB7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eKCB8XCt8JCkvKSB7CiAJCQkkcmVhbGxpbmUrKzsKIAkJCSRyZWFsY250LS0gaWYgKCRyZWFsY250ICE9IDApOwogCi0JCQkjIEd1ZXN0aW1hdGUgaWYgdGhpcyBpcyBhIGNvbnRpbnVpbmcgY29tbWVudC4gIFJ1bgotCQkJIyB0aGUgY29udGV4dCBsb29raW5nIGZvciBhIGNvbW1lbnQgImVkZ2UiLiAgSWYgdGhpcwotCQkJIyBlZGdlIGlzIGEgY2xvc2UgY29tbWVudCB0aGVuIHdlIG11c3QgYmUgaW4gYSBjb21tZW50Ci0JCQkjIGF0IGNvbnRleHQgc3RhcnQuCi0JCQlpZiAoJGxpbmVuciA9PSAkZmlyc3RfbGluZSkgewotCQkJCW15ICRlZGdlOwotCQkJCWZvciAobXkgJGxuID0gJGZpcnN0X2xpbmU7ICRsbiA8ICgkbGluZW5yICsgJHJlYWxjbnQpOyAkbG4rKykgewotCQkJCQkoJGVkZ2UpID0gKCRyYXdsaW5lc1skbG4gLSAxXSA9fiBtQCgvXCp8XCovKUApOwotCQkJCQlsYXN0IGlmIChkZWZpbmVkICRlZGdlKTsKLQkJCQl9Ci0JCQkJaWYgKGRlZmluZWQgJGVkZ2UgJiYgJGVkZ2UgZXEgJyovJykgewotCQkJCQkkaW5fY29tbWVudCA9IDE7Ci0JCQkJfQotCQkJfQotCi0JCQkjIEd1ZXN0aW1hdGUgaWYgdGhpcyBpcyBhIGNvbnRpbnVpbmcgY29tbWVudC4gIElmIHRoaXMKLQkJCSMgaXMgdGhlIHN0YXJ0IG9mIGEgZGlmZiBibG9jayBhbmQgdGhpcyBsaW5lIHN0YXJ0cwotCQkJIyAnIConIHRoZW4gaXQgaXMgdmVyeSBsaWtlbHkgYSBjb21tZW50LgotCQkJaWYgKCRsaW5lbnIgPT0gJGZpcnN0X2xpbmUgYW5kICRyYXdsaW5lID1+IG1AXi5ccyogXCooPzpcc3wkKUApIHsKLQkJCQkkaW5fY29tbWVudCA9IDE7Ci0JCQl9Ci0KLQkJCSMgRmluZCB0aGUgbGFzdCBjb21tZW50IGVkZ2Ugb24gX3RoaXNfIGxpbmUuCi0JCQkkY29tbWVudF9lZGdlID0gMDsKLQkJCXdoaWxlICgoJHJhd2xpbmUgPX4gbUAoL1wqfFwqLylAZykpIHsKLQkJCQlpZiAoJDEgZXEgJy8qJykgewotCQkJCQkkaW5fY29tbWVudCA9IDE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJJGluX2NvbW1lbnQgPSAwOwotCQkJCX0KLQkJCQkkY29tbWVudF9lZGdlID0gMTsKLQkJCX0KLQogCQkJIyBNZWFzdXJlIHRoZSBsaW5lIGxlbmd0aCBhbmQgaW5kZW50LgogCQkJKCRsZW5ndGgsICRpbmRlbnQpID0gbGluZV9zdGF0cygkcmF3bGluZSk7CiAKQEAgLTg5NywyMyArMTAxMiwzNiBAQAogCQkJKCRwcmV2aW5kZW50LCAkc3Rhc2hpbmRlbnQpID0gKCRzdGFzaGluZGVudCwgJGluZGVudCk7CiAJCQkoJHByZXZyYXdsaW5lLCAkc3Rhc2hyYXdsaW5lKSA9ICgkc3Rhc2hyYXdsaW5lLCAkcmF3bGluZSk7CiAKLQkJCSN3YXJuICJpYzwkaW5fY29tbWVudD4gY2U8JGNvbW1lbnRfZWRnZT4gbGluZTwkbGluZT5cbiI7CisJCQkjd2FybiAibGluZTwkbGluZT5cbiI7CiAKIAkJfSBlbHNpZiAoJHJlYWxjbnQgPT0gMSkgewogCQkJJHJlYWxjbnQtLTsKIAkJfQogCiAjbWFrZSB1cCB0aGUgaGFuZGxlIGZvciBhbnkgZXJyb3Igd2UgcmVwb3J0IG9uIHRoaXMgbGluZQorCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokcmVhbGxpbmU6ICIgaWYgKCRlbWFjcyAmJiAkZmlsZSk7CisJCSRwcmVmaXggPSAiJGZpbGVuYW1lOiRsaW5lbnI6ICIgaWYgKCRlbWFjcyAmJiAhJGZpbGUpOworCiAJCSRoZXJlID0gIiMkbGluZW5yOiAiIGlmICghJGZpbGUpOwogCQkkaGVyZSA9ICIjJHJlYWxsaW5lOiAiIGlmICgkZmlsZSk7CisKKwkJIyBleHRyYWN0IHRoZSBmaWxlbmFtZSBhcyBpdCBwYXNzZXMKKwkJaWYgKCRsaW5lPX4vXlwrXCtcK1xzKyhcUyspLykgeworCQkJJHJlYWxmaWxlID0gJDE7CisJCQkkcmVhbGZpbGUgPX4gc0BeW14vXSovQEA7CisKKwkJCWlmICgkcmVhbGZpbGUgPX4gbUBpbmNsdWRlL2FzbS9AKSB7CisJCQkJRVJST1IoImRvIG5vdCBtb2RpZnkgZmlsZXMgaW4gaW5jbHVkZS9hc20sIGNoYW5nZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmlsZXMgaW4gaW5jbHVkZS9hc20tPGFyY2hpdGVjdHVyZT5cbiIgLiAiJGhlcmUkcmF3bGluZVxuIik7CisJCQl9CisJCQluZXh0OworCQl9CisKIAkJJGhlcmUgLj0gIkZJTEU6ICRyZWFsZmlsZTokcmVhbGxpbmU6IiBpZiAoJHJlYWxjbnQgIT0gMCk7CiAKIAkJbXkgJGhlcmVsaW5lID0gIiRoZXJlXG4kcmF3bGluZVxuIjsKIAkJbXkgJGhlcmVjdXJyID0gIiRoZXJlXG4kcmF3bGluZVxuIjsKIAkJbXkgJGhlcmVwcmV2ID0gIiRoZXJlXG4kcHJldnJhd2xpbmVcbiRyYXdsaW5lXG4iOwogCi0JCSRwcmVmaXggPSAiJGZpbGVuYW1lOiRyZWFsbGluZTogIiBpZiAoJGVtYWNzICYmICRmaWxlKTsKLQkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JGxpbmVucjogIiBpZiAoJGVtYWNzICYmICEkZmlsZSk7CiAJCSRjbnRfbGluZXMrKyBpZiAoJHJlYWxjbnQgIT0gMCk7CiAKICNjaGVjayB0aGUgcGF0Y2ggZm9yIGEgc2lnbm9mZjoKQEAgLTkyNSw3ICsxMDUzLDcgQEAKIAkJCQkJJGhlcmVjdXJyKTsKIAkJCX0KIAkJCWlmICgkbGluZSA9fiAvXlxzKnNpZ25lZC1vZmYtYnk6XFMvaSkgewotCQkJCVdBUk4oIm5lZWQgc3BhY2UgYWZ0ZXIgU2lnbmVkLW9mZi1ieTpcbiIgLgorCQkJCVdBUk4oInNwYWNlIHJlcXVpcmVkIGFmdGVyIFNpZ25lZC1vZmYtYnk6XG4iIC4KIAkJCQkJJGhlcmVjdXJyKTsKIAkJCX0KIAkJfQpAQCAtOTg4LDUyICsxMTE2LDUwIEBACiAJCX0KIAogIyBjaGVjayBmb3IgUkNTL0NWUyByZXZpc2lvbiBtYXJrZXJzCi0JCWlmICgkcmF3bGluZSA9fiAvXCQoUmV2aXNpb258TG9nfElkKSg/OlwkfCkvKSB7CisJCWlmICgkcmF3bGluZSA9fiAvXlwrLipcJChSZXZpc2lvbnxMb2d8SWQpKD86XCR8KS8pIHsKIAkJCVdBUk4oIkNWUyBzdHlsZSBrZXl3b3JkIG1hcmtlcnMsIHRoZXNlIHdpbGwgX25vdF8gYmUgdXBkYXRlZFxuIi4gJGhlcmVjdXJyKTsKIAkJfQogCi0jIFRoZSByZXN0IG9mIG91ciBjaGVja3MgcmVmZXIgc3BlY2lmaWNhbGx5IHRvIEMgc3R5bGUKLSMgb25seSBhcHBseSB0aG9zZSBfb3V0c2lkZV8gY29tbWVudHMuICBPbmx5IHNraXAKLSMgbGluZXMgaW4gdGhlIG1pZGRsZSBvZiBjb21tZW50cy4KLQkJbmV4dCBpZiAoISRjb21tZW50X2VkZ2UgJiYgJGluX2NvbW1lbnQpOwotCiAjIENoZWNrIGZvciBwb3RlbnRpYWwgJ2JhcmUnIHR5cGVzCiAJCWlmICgkcmVhbGNudCkgeworCQkJbXkgKCRzLCAkYykgPSBjdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZWFsY250LCAwKTsKKwkJCSRzID1+IHMvXG4uLyAvZzsKKwkJCSRzID1+IHMvey4qJC8vOworCiAJCQkjIElnbm9yZSBnb3RvIGxhYmVscy4KLQkJCWlmICgkbGluZSA9fiAvJElkZW50OlwqJC8pIHsKKwkJCWlmICgkcyA9fiAvJElkZW50OlwqJC8pIHsKIAogCQkJIyBJZ25vcmUgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZAotCQkJfSBlbHNpZiAoJGxpbmUgPX4gL14uXHMqJElkZW50XHMqXCgvKSB7CisJCQl9IGVsc2lmICgkcyA9fiAvXi5ccyokSWRlbnRccypcKC8pIHsKIAogCQkJIyBkZWZpbml0aW9ucyBpbiBnbG9iYWwgc2NvcGUgY2FuIG9ubHkgc3RhcnQgd2l0aCB0eXBlcwotCQkJfSBlbHNpZiAoJGxpbmUgPX4gL14uKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPyg/OmNvbnN0XHMrKT8oJElkZW50KVxiLykgewotCQkJCXBvc3NpYmxlKCQxLCAkbGluZSk7CisJCQl9IGVsc2lmICgkcyA9fiAvXi4oPzokU3RvcmFnZVxzKyk/KD86JElubGluZVxzKyk/KD86Y29uc3RccyspPygkSWRlbnQpXGIvKSB7CisJCQkJcG9zc2libGUoJDEsICRzKTsKIAogCQkJIyBkZWNsYXJhdGlvbnMgYWx3YXlzIHN0YXJ0IHdpdGggdHlwZXMKLQkJCX0gZWxzaWYgKCRwcmV2X3ZhbHVlcyBlcSAnRScgJiYgJGxpbmUgPX4gL14uXHMqKD86JFN0b3JhZ2VccyspPyg/OmNvbnN0XHMrKT8oJElkZW50KVxiKDo/XHMrJFNwYXJzZSk/XHMqXCoqXHMqJElkZW50XHMqKD86O3w9fCwpLykgewotCQkJCXBvc3NpYmxlKCQxKTsKKwkJCX0gZWxzaWYgKCRwcmV2X3ZhbHVlcyBlcSAnRScgJiYgJHMgPX4gL14uXHMqKD86JFN0b3JhZ2VccyspPyg/OmNvbnN0XHMrKT8oJElkZW50KVxiKDo/XHMrJFNwYXJzZSk/XHMqXCoqXHMqJElkZW50XHMqKD86O3w9fCwpLykgeworCQkJCXBvc3NpYmxlKCQxLCAkcyk7CiAJCQl9CiAKIAkJCSMgYW55IChmb28gLi4uICopIGlzIGEgcG9pbnRlciBjYXN0LCBhbmQgZm9vIGlzIGEgdHlwZQotCQkJd2hpbGUgKCRsaW5lID1+IC9cKCgkSWRlbnQpKD86XHMrJFNwYXJzZSkqXHMqXCorXHMqXCkvZykgewotCQkJCXBvc3NpYmxlKCQxLCAkbGluZSk7CisJCQl3aGlsZSAoJHMgPX4gL1woKCRJZGVudCkoPzpccyskU3BhcnNlKSpccypcKitccypcKS9nKSB7CisJCQkJcG9zc2libGUoJDEsICRzKTsKIAkJCX0KIAogCQkJIyBDaGVjayBmb3IgYW55IHNvcnQgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb24uCiAJCQkjIGludCBmb28oc29tZXRoaW5nIGJhciwgb3RoZXIgYmF6KTsKIAkJCSMgdm9pZCAoKnN0b3JlX2dkdCkoeDg2X2Rlc2NyX3B0ciAqKTsKLQkJCWlmICgkcHJldl92YWx1ZXMgZXEgJ0UnICYmICRsaW5lID1+IC9eKC4oPzp0eXBlZGVmXHMqKT8oPzooPzokU3RvcmFnZXwkSW5saW5lKVxzKikqXHMqJFR5cGVccyooPzpcYiRJZGVudHxcKFwqXHMqJElkZW50XCkpXHMqKVwoLykgeworCQkJaWYgKCRwcmV2X3ZhbHVlcyBlcSAnRScgJiYgJHMgPX4gL14oLig/OnR5cGVkZWZccyopPyg/Oig/OiRTdG9yYWdlfCRJbmxpbmUpXHMqKSpccyokVHlwZVxzKig/OlxiJElkZW50fFwoXCpccyokSWRlbnRcKSlccyopXCgvKSB7CiAJCQkJbXkgKCRuYW1lX2xlbikgPSBsZW5ndGgoJDEpOwotCQkJCW15ICgkbGV2ZWwsIEBjdHgpID0gY3R4X3N0YXRlbWVudF9sZXZlbCgkbGluZW5yLCAkcmVhbGNudCwgJG5hbWVfbGVuKTsKLQkJCQlteSAkY3R4ID0gam9pbigiXG4iLCBAY3R4KTsKIAotCQkJCSRjdHggPX4gcy9cbi4vLzsKLQkJCQlzdWJzdHIoJGN0eCwgMCwgJG5hbWVfbGVuICsgMSkgPSAnJzsKKwkJCQlteSAkY3R4ID0gJHM7CisJCQkJc3Vic3RyKCRjdHgsIDAsICRuYW1lX2xlbiArIDEsICcnKTsKIAkJCQkkY3R4ID1+IHMvXClbXlwpXSokLy87CisKIAkJCQlmb3IgbXkgJGFyZyAoc3BsaXQoL1xzKixccyovLCAkY3R4KSkgewogCQkJCQlpZiAoJGFyZyA9fiAvXig/OmNvbnN0XHMrKT8oJElkZW50KSg/OlxzKyRTcGFyc2UpKlxzKlwqKlxzKig6P1xiJElkZW50KT8kLyB8fCAkYXJnID1+IC9eKCRJZGVudCkkLykgewogCi0JCQkJCQlwb3NzaWJsZSgkMSwgJGxpbmUpOworCQkJCQkJcG9zc2libGUoJDEsICRzKTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTEwNjgsMjcgKzExOTQsMzMgQEAKIAogIyBpZi93aGlsZS9ldGMgYnJhY2UgZG8gbm90IGdvIG9uIG5leHQgbGluZSwgdW5sZXNzIGRlZmluaW5nIGEgZG8gd2hpbGUgbG9vcCwKICMgb3IgaWYgdGhhdCBicmFjZSBvbiB0aGUgbmV4dCBsaW5lIGlzIGZvciBzb21ldGhpbmcgZWxzZQotCQlpZiAoJGxpbmUgPX4gL1xiKD86KGlmfHdoaWxlfGZvcnxzd2l0Y2gpXHMqXCh8ZG9cYnxlbHNlXGIpLyAmJiAkbGluZSAhfiAvXi4jLykgeworCQlpZiAoJGxpbmUgPX4gLyguKilcYigoPzppZnx3aGlsZXxmb3J8c3dpdGNoKVxzKlwofGRvXGJ8ZWxzZVxiKS8gJiYgJGxpbmUgIX4gL14uIy8pIHsKKwkJCW15ICRwcmVfY3R4ID0gIiQxJDIiOworCiAJCQlteSAoJGxldmVsLCBAY3R4KSA9IGN0eF9zdGF0ZW1lbnRfbGV2ZWwoJGxpbmVuciwgJHJlYWxjbnQsIDApOwogCQkJbXkgJGN0eF9sbiA9ICRsaW5lbnIgKyAkI2N0eCArIDE7CiAJCQlteSAkY3R4X2NudCA9ICRyZWFsY250IC0gJCNjdHggLSAxOwogCQkJbXkgJGN0eCA9IGpvaW4oIlxuIiwgQGN0eCk7CiAKLQkJCSMgU2tpcCBvdmVyIGFueSByZW1vdmVkIGxpbmVzIGluIHRoZSBjb250ZXh0IGZvbGxvd2luZyBzdGF0ZW1lbnQuCi0JCQl3aGlsZSAoJGN0eF9jbnQgPiAwICYmICRsaW5lc1skY3R4X2xuIC0gMV0gPX4gL14tLykgewotCQkJCSRjdHhfbG4rKzsKLQkJCQkkY3R4X2NudC0tOwotCQkJfQotCQkJIyN3YXJuICJsaW5lPCRsaW5lPlxuY3R4PCRjdHg+XG5uZXh0PCRsaW5lc1skY3R4X2xuIC0gMV0+IjsKKwkJCSMjd2FybiAicmVhbGNudDwkcmVhbGNudD4gY3R4X2NudDwkY3R4X2NudD5cbiI7CiAKLQkJCWlmICgkY3R4ICF+IC97XHMqLyAmJiAkY3R4X2NudCA+IDAgJiYgJGxpbmVzWyRjdHhfbG4gLSAxXSA9fiAvXlwrXHMqey8pIHsKLQkJCQlFUlJPUigiVGhhdCBvcGVuIGJyYWNlIHsgc2hvdWxkIGJlIG9uIHRoZSBwcmV2aW91cyBsaW5lXG4iIC4KKwkJCSMgU2tpcCBvdmVyIGFueSByZW1vdmVkIGxpbmVzIGluIHRoZSBjb250ZXh0IGZvbGxvd2luZyBzdGF0ZW1lbnQuCisJCQl3aGlsZSAoZGVmaW5lZCgkbGluZXNbJGN0eF9sbiAtIDFdKSAmJiAkbGluZXNbJGN0eF9sbiAtIDFdID1+IC9eLS8pIHsKKwkJCQkkY3R4X2xuKys7CisJCQl9CisJCQkjI3dhcm4gInByZTwkcHJlX2N0eD5cbmxpbmU8JGxpbmU+XG5jdHg8JGN0eD5cbm5leHQ8JGxpbmVzWyRjdHhfbG4gLSAxXT5cbiI7CisKKwkJCWlmICgkY3R4ICF+IC97XHMqLyAmJiBkZWZpbmVkKCRsaW5lc1skY3R4X2xuIC0xXSkgJiYgJGxpbmVzWyRjdHhfbG4gLSAxXSA9fiAvXlwrXHMqey8pIHsKKwkJCQlFUlJPUigidGhhdCBvcGVuIGJyYWNlIHsgc2hvdWxkIGJlIG9uIHRoZSBwcmV2aW91cyBsaW5lXG4iIC4KIAkJCQkJIiRoZXJlXG4kY3R4XG4kbGluZXNbJGN0eF9sbiAtIDFdIik7CiAJCQl9Ci0JCQlpZiAoJGxldmVsID09IDAgJiYgJGN0eCA9fiAvXClccypcO1xzKiQvICYmIGRlZmluZWQgJGxpbmVzWyRjdHhfbG4gLSAxXSkgeworCQkJaWYgKCRsZXZlbCA9PSAwICYmICRwcmVfY3R4ICF+IC99XHMqd2hpbGVccypcKCQvICYmCisJCQkgICAgJGN0eCA9fiAvXClccypcO1xzKiQvICYmCisJCQkgICAgZGVmaW5lZCAkbGluZXNbJGN0eF9sbiAtIDFdKQorCQkJewogCQkJCW15ICgkbmxlbmd0aCwgJG5pbmRlbnQpID0gbGluZV9zdGF0cygkbGluZXNbJGN0eF9sbiAtIDFdKTsKIAkJCQlpZiAoJG5pbmRlbnQgPiAkaW5kZW50KSB7Ci0JCQkJCVdBUk4oIlRyYWlsaW5nIHNlbWljb2xvbiBpbmRpY2F0ZXMgbm8gc3RhdGVtZW50cywgaW5kZW50IGltcGxpZXMgb3RoZXJ3aXNlXG4iIC4KKwkJCQkJV0FSTigidHJhaWxpbmcgc2VtaWNvbG9uIGluZGljYXRlcyBubyBzdGF0ZW1lbnRzLCBpbmRlbnQgaW1wbGllcyBvdGhlcndpc2VcbiIgLgogCQkJCQkJIiRoZXJlXG4kY3R4XG4kbGluZXNbJGN0eF9sbiAtIDFdIik7CiAJCQkJfQogCQkJfQpAQCAtMTEwMCw4ICsxMjMyLDggQEAKIAkJJGN1cnJfdmFsdWVzID0gJHByZXZfdmFsdWVzIC4gJGN1cnJfdmFsdWVzOwogCQlpZiAoJGRiZ192YWx1ZXMpIHsKIAkJCW15ICRvdXRsaW5lID0gJG9wbGluZTsgJG91dGxpbmUgPX4gcy9cdC8gL2c7Ci0JCQl3YXJuICItLT4gLiRvdXRsaW5lXG4iOwotCQkJd2FybiAiLS0+ICRjdXJyX3ZhbHVlc1xuIjsKKwkJCXByaW50ICIkbGluZW5yID4gLiRvdXRsaW5lXG4iOworCQkJcHJpbnQgIiRsaW5lbnIgPiAkY3Vycl92YWx1ZXNcbiI7CiAJCX0KIAkJJHByZXZfdmFsdWVzID0gc3Vic3RyKCRjdXJyX3ZhbHVlcywgLTEpOwogCkBAIC0xMTE3LDcgKzEyNDksNyBAQAogIyBjaGVjayBmb3IgaW5pdGlhbGlzYXRpb24gdG8gYWdncmVnYXRlcyBvcGVuIGJyYWNlIG9uIHRoZSBuZXh0IGxpbmUKIAkJaWYgKCRwcmV2bGluZSA9fiAvJERlY2xhcmVccyokSWRlbnRccyo9XHMqJC8gJiYKIAkJICAgICRsaW5lID1+IC9eLlxzKnsvKSB7Ci0JCQlFUlJPUigiVGhhdCBvcGVuIGJyYWNlIHsgc2hvdWxkIGJlIG9uIHRoZSBwcmV2aW91cyBsaW5lXG4iIC4gJGhlcmVwcmV2KTsKKwkJCUVSUk9SKCJ0aGF0IG9wZW4gYnJhY2UgeyBzaG91bGQgYmUgb24gdGhlIHByZXZpb3VzIGxpbmVcbiIgLiAkaGVyZXByZXYpOwogCQl9CiAKICMKQEAgLTExNDgsNyArMTI4MCw5IEBACiAJCQlpZiAoKCRwcmV2bGluZSAhfiAvXn0vKSAmJgogCQkJICAgKCRwcmV2bGluZSAhfiAvXlwrfS8pICYmCiAJCQkgICAoJHByZXZsaW5lICF+IC9eIH0vKSAmJgotCQkJICAgKCRwcmV2bGluZSAhfiAvXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKT9ccyooPzo7fD0pLykpIHsKKwkJCSAgICgkcHJldmxpbmUgIX4gL14uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpLykgJiYKKwkJCSAgICgkcHJldmxpbmUgIX4gL14uTElTVF9IRUFEXChcUSRuYW1lXEVcKS8pICYmCisJCQkgICAoJHByZXZsaW5lICF+IC9cYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpP1xzKig/Ojt8PXxcWykvKSkgewogCQkJCVdBUk4oIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOwogCQkJfQogCQl9CkBAIC0xMjQwLDIyICsxMzc0LDMxIEBACiAjIGNoZWNrIGZvciBzcGFjZXMgYmV0d2VlbiBmdW5jdGlvbnMgYW5kIHRoZWlyIHBhcmVudGhlc2VzLgogCQl3aGlsZSAoJGxpbmUgPX4gLygkSWRlbnQpXHMrXCgvZykgewogCQkJbXkgJG5hbWUgPSAkMTsKLQkJCW15ICRjdHggPSBzdWJzdHIoJGxpbmUsIDAsICQtWzFdKTsKKwkJCW15ICRjdHhfYmVmb3JlID0gc3Vic3RyKCRsaW5lLCAwLCAkLVsxXSk7CisJCQlteSAkY3R4ID0gIiRjdHhfYmVmb3JlJG5hbWUiOwogCiAJCQkjIElnbm9yZSB0aG9zZSBkaXJlY3RpdmVzIHdoZXJlIHNwYWNlcyBfYXJlXyBwZXJtaXR0ZWQuCi0JCQlpZiAoJG5hbWUgPX4gL14oPzppZnxmb3J8d2hpbGV8c3dpdGNofHJldHVybnx2b2xhdGlsZXxfX3ZvbGF0aWxlX198X19hdHRyaWJ1dGVfX3xmb3JtYXR8X19leHRlbnNpb25fX3xDb3B5cmlnaHR8Y2FzZXxfX2FzbV9fKSQvKSB7CisJCQlpZiAoJG5hbWUgPX4gL14oPzoKKwkJCQlpZnxmb3J8d2hpbGV8c3dpdGNofHJldHVybnxjYXNlfAorCQkJCXZvbGF0aWxlfF9fdm9sYXRpbGVfX3wKKwkJCQlfX2F0dHJpYnV0ZV9ffGZvcm1hdHxfX2V4dGVuc2lvbl9ffAorCQkJCWFzbXxfX2FzbV9fKSQveCkKKwkJCXsKIAogCQkJIyBjcHAgI2RlZmluZSBzdGF0ZW1lbnRzIGhhdmUgbm9uLW9wdGlvbmFsIHNwYWNlcywgaWUKIAkJCSMgaWYgdGhlcmUgaXMgYSBzcGFjZSBiZXR3ZWVuIHRoZSBuYW1lIGFuZCB0aGUgb3BlbgogCQkJIyBwYXJlbnRoZXNpcyBpdCBpcyBzaW1wbHkgbm90IGEgcGFyYW1ldGVyIGdyb3VwLgotCQkJfSBlbHNpZiAoJGN0eCA9fiAvXi5cI1xzKmRlZmluZVxzKiQvKSB7CisJCQl9IGVsc2lmICgkY3R4X2JlZm9yZSA9fiAvXi5cI1xzKmRlZmluZVxzKiQvKSB7CisKKwkJCSMgY3BwICNlbGlmIHN0YXRlbWVudCBjb25kaXRpb24gbWF5IHN0YXJ0IHdpdGggYSAoCisJCQl9IGVsc2lmICgkY3R4ID1+IC9eLlwjXHMqZWxpZlxzKiQvKSB7CiAKIAkJCSMgSWYgdGhpcyB3aG9sZSB0aGluZ3MgZW5kcyB3aXRoIGEgdHlwZSBpdHMgbW9zdAogCQkJIyBsaWtlbHkgYSB0eXBlZGVmIGZvciBhIGZ1bmN0aW9uLgotCQkJfSBlbHNpZiAoIiRjdHgkbmFtZSIgPX4gLyRUeXBlJC8pIHsKKwkJCX0gZWxzaWYgKCRjdHggPX4gLyRUeXBlJC8pIHsKIAogCQkJfSBlbHNlIHsKLQkJCQlXQVJOKCJubyBzcGFjZSBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIG9wZW4gcGFyZW50aGVzaXMgJygnXG4iIC4gJGhlcmVjdXJyKTsKKwkJCQlXQVJOKCJzcGFjZSBwcm9oaWJpdGVkIGJldHdlZW4gZnVuY3Rpb24gbmFtZSBhbmQgb3BlbiBwYXJlbnRoZXNpcyAnKCdcbiIgLiAkaGVyZWN1cnIpOwogCQkJfQogCQl9CiAjIENoZWNrIG9wZXJhdG9yIHNwYWNpbmcuCkBAIC0xMjY2LDcgKzE0MDksNyBAQAogCQkJCT0+fC0+fDw8fD4+fDx8Pnw9fCF8fnwKIAkJCQkmJnxcfFx8fCx8XF58XCtcK3wtLXwmfFx8fFwrfC18XCp8XC98JQogCQkJfXg7Ci0JCQlteSBAZWxlbWVudHMgPSBzcGxpdCgvKCQ7K3wkb3BzfDspLywgJG9wbGluZSk7CisJCQlteSBAZWxlbWVudHMgPSBzcGxpdCgvKCRvcHN8OykvLCAkb3BsaW5lKTsKIAkJCW15ICRvZmYgPSAwOwogCiAJCQlteSAkYmxhbmsgPSBjb3B5X3NwYWNpbmcoJG9wbGluZSk7CkBAIC0xMjc0LDI2ICsxNDE3LDYgQEAKIAkJCWZvciAobXkgJG4gPSAwOyAkbiA8ICQjZWxlbWVudHM7ICRuICs9IDIpIHsKIAkJCQkkb2ZmICs9IGxlbmd0aCgkZWxlbWVudHNbJG5dKTsKIAotCQkJCW15ICRhID0gJyc7Ci0JCQkJJGEgPSAnVicgaWYgKCRlbGVtZW50c1skbl0gbmUgJycpOwotCQkJCSRhID0gJ1cnIGlmICgkZWxlbWVudHNbJG5dID1+IC9ccyQvKTsKLQkJCQkkYSA9ICdCJyBpZiAoJGVsZW1lbnRzWyRuXSA9fiAvKFxbfFwoKSQvKTsKLQkJCQkkYSA9ICdPJyBpZiAoJGVsZW1lbnRzWyRuXSBlcSAnJyk7Ci0JCQkJJGEgPSAnRScgaWYgKCRlbGVtZW50c1skbl0gZXEgJycgJiYgJG4gPT0gMCk7Ci0KLQkJCQlteSAkb3AgPSAkZWxlbWVudHNbJG4gKyAxXTsKLQotCQkJCW15ICRjID0gJyc7Ci0JCQkJaWYgKGRlZmluZWQgJGVsZW1lbnRzWyRuICsgMl0pIHsKLQkJCQkJJGMgPSAnVicgaWYgKCRlbGVtZW50c1skbiArIDJdIG5lICcnKTsKLQkJCQkJJGMgPSAnVycgaWYgKCRlbGVtZW50c1skbiArIDJdID1+IC9eXHMvKTsKLQkJCQkJJGMgPSAnQicgaWYgKCRlbGVtZW50c1skbiArIDJdID1+IC9eKFwpfFxdfDspLyk7Ci0JCQkJCSRjID0gJ08nIGlmICgkZWxlbWVudHNbJG4gKyAyXSBlcSAnJyk7Ci0JCQkJCSRjID0gJ0UnIGlmICgkZWxlbWVudHNbJG4gKyAyXSA9fiAvXHMqXFwkLyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJJGMgPSAnRSc7Ci0JCQkJfQotCiAJCQkJIyBQaWNrIHVwIHRoZSBwcmVjZWVkaW5nIGFuZCBzdWNjZWVkaW5nIGNoYXJhY3RlcnMuCiAJCQkJbXkgJGNhID0gc3Vic3RyKCRvcGxpbmUsIDAsICRvZmYpOwogCQkJCW15ICRjYyA9ICcnOwpAQCAtMTMwMiw2ICsxNDI1LDI4IEBACiAJCQkJfQogCQkJCW15ICRjYiA9ICIkY2EkOyRjYyI7CiAKKwkJCQlteSAkYSA9ICcnOworCQkJCSRhID0gJ1YnIGlmICgkZWxlbWVudHNbJG5dIG5lICcnKTsKKwkJCQkkYSA9ICdXJyBpZiAoJGVsZW1lbnRzWyRuXSA9fiAvXHMkLyk7CisJCQkJJGEgPSAnQycgaWYgKCRlbGVtZW50c1skbl0gPX4gLyQ7JC8pOworCQkJCSRhID0gJ0InIGlmICgkZWxlbWVudHNbJG5dID1+IC8oXFt8XCgpJC8pOworCQkJCSRhID0gJ08nIGlmICgkZWxlbWVudHNbJG5dIGVxICcnKTsKKwkJCQkkYSA9ICdFJyBpZiAoJGNhID1+IC9eXHMqJC8pOworCisJCQkJbXkgJG9wID0gJGVsZW1lbnRzWyRuICsgMV07CisKKwkJCQlteSAkYyA9ICcnOworCQkJCWlmIChkZWZpbmVkICRlbGVtZW50c1skbiArIDJdKSB7CisJCQkJCSRjID0gJ1YnIGlmICgkZWxlbWVudHNbJG4gKyAyXSBuZSAnJyk7CisJCQkJCSRjID0gJ1cnIGlmICgkZWxlbWVudHNbJG4gKyAyXSA9fiAvXlxzLyk7CisJCQkJCSRjID0gJ0MnIGlmICgkZWxlbWVudHNbJG4gKyAyXSA9fiAvXiQ7Lyk7CisJCQkJCSRjID0gJ0InIGlmICgkZWxlbWVudHNbJG4gKyAyXSA9fiAvXihcKXxcXXw7KS8pOworCQkJCQkkYyA9ICdPJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gZXEgJycpOworCQkJCQkkYyA9ICdFJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gPX4gL1xzKlxcJC8pOworCQkJCX0gZWxzZSB7CisJCQkJCSRjID0gJ0UnOworCQkJCX0KKwogCQkJCW15ICRjdHggPSAiJHthfXgke2N9IjsKIAogCQkJCW15ICRhdCA9ICIoY3R4OiRjdHgpIjsKQEAgLTEzMzAsMTQgKzE0NzUsMTQgQEAKIAkJCQlpZiAoJG9wX3R5cGUgbmUgJ1YnICYmCiAJCQkJICAgICRjYSA9fiAvXHMkLyAmJiAkY2MgPX4gL15ccyosLykgewogCi0JCQkJIyBJZ25vcmUgY29tbWVudHMKLQkJCQl9IGVsc2lmICgkb3AgPX4gL14kOyskLykgeworIwkJCQkjIElnbm9yZSBjb21tZW50cworIwkJCQl9IGVsc2lmICgkb3AgPX4gL14kOyskLykgewogCiAJCQkJIyA7IHNob3VsZCBoYXZlIGVpdGhlciB0aGUgZW5kIG9mIGxpbmUgb3IgYSBzcGFjZSBvciBcIGFmdGVyIGl0CiAJCQkJfSBlbHNpZiAoJG9wIGVxICc7JykgewotCQkJCQlpZiAoJGN0eCAhfiAvLnhbV0VCXS8gJiYgJGNjICF+IC9eXFwvICYmCi0JCQkJCSAgICAkY2MgIX4gL147LykgewotCQkJCQkJRVJST1IoIm5lZWQgc3BhY2UgYWZ0ZXIgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCWlmICgkY3R4ICF+IC8ueFtXRUJDXS8gJiYKKwkJCQkJICAgICRjYyAhfiAvXlxcLyAmJiAkY2MgIX4gL147LykgeworCQkJCQkJRVJST1IoInNwYWNlIHJlcXVpcmVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOwogCQkJCQl9CiAKIAkJCQkjIC8vIGlzIGEgY29tbWVudApAQCAtMTM0NiwxMyArMTQ5MSwxMyBAQAogCQkJCSMgLT4gc2hvdWxkIGhhdmUgbm8gc3BhY2VzCiAJCQkJfSBlbHNpZiAoJG9wIGVxICctPicpIHsKIAkJCQkJaWYgKCRjdHggPX4gL1d4LnwueFcvKSB7Ci0JCQkJCQlFUlJPUigibm8gc3BhY2VzIGFyb3VuZCB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJCUVSUk9SKCJzcGFjZXMgcHJvaGliaXRlZCBhcm91bmQgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CiAJCQkJCX0KIAogCQkJCSMgLCBtdXN0IGhhdmUgYSBzcGFjZSBvbiB0aGUgcmlnaHQuCiAJCQkJfSBlbHNpZiAoJG9wIGVxICcsJykgewotCQkJCQlpZiAoJGN0eCAhfiAvLnhXfC54RS8gJiYgJGNjICF+IC9efS8pIHsKLQkJCQkJCUVSUk9SKCJuZWVkIHNwYWNlIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQlpZiAoJGN0eCAhfiAvLnhbV0VDXS8gJiYgJGNjICF+IC9efS8pIHsKKwkJCQkJCUVSUk9SKCJzcGFjZSByZXF1aXJlZCBhZnRlciB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKIAkJCQkJfQogCiAJCQkJIyAnKicgYXMgcGFydCBvZiBhIHR5cGUgZGVmaW5pdGlvbiAtLSByZXBvcnRlZCBhbHJlYWR5LgpAQCAtMTM2NCwyMSArMTUwOSwyNiBAQAogCQkJCSMgdW5hcnkgb3BlcmF0b3IsIG9yIGEgY2FzdAogCQkJCX0gZWxzaWYgKCRvcCBlcSAnIScgfHwgJG9wIGVxICd+JyB8fAogCQkJCSAgICAgICAgICgkaXNfdW5hcnkgJiYgKCRvcCBlcSAnKicgfHwgJG9wIGVxICctJyB8fCAkb3AgZXEgJyYnKSkpIHsKLQkJCQkJaWYgKCRjdHggIX4gL1tXRUJdeC4vICYmICRjYSAhfiAvKD86XCl8IXx+fFwqfC18XCZ8XHx8XCtcK3xcLVwtfFx7KSQvKSB7Ci0JCQkJCQlFUlJPUigibmVlZCBzcGFjZSBiZWZvcmUgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCWlmICgkY3R4ICF+IC9bV0VCQ114Li8gJiYgJGNhICF+IC8oPzpcKXwhfH58XCp8LXxcJnxcfHxcK1wrfFwtXC18XHspJC8pIHsKKwkJCQkJCUVSUk9SKCJzcGFjZSByZXF1aXJlZCBiZWZvcmUgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CiAJCQkJCX0KIAkJCQkJaWYgKCRjdHggPX4gLy54Vy8pIHsKLQkJCQkJCUVSUk9SKCJubyBzcGFjZSBhZnRlciB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJCUVSUk9SKCJzcGFjZSBwcm9oaWJpdGVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOwogCQkJCQl9CiAKIAkJCQkjIHVuYXJ5ICsrIGFuZCB1bmFyeSAtLSBhcmUgYWxsb3dlZCBubyBzcGFjZSBvbiBvbmUgc2lkZS4KIAkJCQl9IGVsc2lmICgkb3AgZXEgJysrJyBvciAkb3AgZXEgJy0tJykgewotCQkJCQlpZiAoJGN0eCAhfiAvW1dPQl14W15XXS8gJiYgJGN0eCAhfiAvW15XXXhbV09CRV0vKSB7Ci0JCQkJCQlFUlJPUigibmVlZCBzcGFjZSBvbmUgc2lkZSBvZiB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJaWYgKCRjdHggIX4gL1tXRU9CQ114W15XXS8gJiYgJGN0eCAhfiAvW15XXXhbV09CRUNdLykgeworCQkJCQkJRVJST1IoInNwYWNlIHJlcXVpcmVkIG9uZSBzaWRlIG9mIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOwogCQkJCQl9Ci0JCQkJCWlmICgkY3R4ID1+IC9XeEIvIHx8ICgkY3R4ID1+IC9XeC4vICYmICRjYyA9fiAvXjsvKSkgewotCQkJCQkJRVJST1IoIm5vIHNwYWNlIGJlZm9yZSB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJaWYgKCRjdHggPX4gL1d4W0JFXS8gfHwKKwkJCQkJICAgICgkY3R4ID1+IC9XeC4vICYmICRjYyA9fiAvXjsvKSkgeworCQkJCQkJRVJST1IoInNwYWNlIHByb2hpYml0ZWQgYmVmb3JlIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOwogCQkJCQl9CisJCQkJCWlmICgkY3R4ID1+IC9FeFcvKSB7CisJCQkJCQlFUlJPUigic3BhY2UgcHJvaGliaXRlZCBhZnRlciB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJfQorCiAKIAkJCQkjIDw8IGFuZCA+PiBtYXkgZWl0aGVyIGhhdmUgb3Igbm90IGhhdmUgc3BhY2VzIGJvdGggc2lkZXMKIAkJCQl9IGVsc2lmICgkb3AgZXEgJzw8JyBvciAkb3AgZXEgJz4+JyBvcgpAQCAtMTM4NywxNyArMTUzNywxNyBAQAogCQkJCQkgJG9wIGVxICcqJyBvciAkb3AgZXEgJy8nIG9yCiAJCQkJCSAkb3AgZXEgJyUnKQogCQkJCXsKLQkJCQkJaWYgKCRjdHggIX4gL1Z4VnxXeFd8VnhFfFd4RXxWeE8vKSB7CisJCQkJCWlmICgkY3R4ID1+IC9XeFteV0NFXXxbXldDRV14Vy8pIHsKIAkJCQkJCUVSUk9SKCJuZWVkIGNvbnNpc3RlbnQgc3BhY2luZyBhcm91bmQgJyRvcCcgJGF0XG4iIC4KIAkJCQkJCQkkaGVyZXB0cik7CiAJCQkJCX0KIAogCQkJCSMgQWxsIHRoZSBvdGhlcnMgbmVlZCBzcGFjZXMgYm90aCBzaWRlcy4KLQkJCQl9IGVsc2lmICgkY3R4ICF+IC9bRVddeFtXRV0vKSB7CisJCQkJfSBlbHNpZiAoJGN0eCAhfiAvW0VXQ114W0NXRV0vKSB7CiAJCQkJCSMgSWdub3JlIGVtYWlsIGFkZHJlc3NlcyA8Zm9vQGJhcj4KIAkJCQkJaWYgKCEoJG9wIGVxICc8JyAmJiAkY2IgPX4gLyQ7XFMrXEBcUys+LykgJiYKIAkJCQkJICAgICEoJG9wIGVxICc+JyAmJiAkY2IgPX4gLzxcUytcQFxTKyQ7LykpIHsKLQkJCQkJCUVSUk9SKCJuZWVkIHNwYWNlcyBhcm91bmQgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCQlFUlJPUigic3BhY2VzIHJlcXVpcmVkIGFyb3VuZCB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKIAkJCQkJfQogCQkJCX0KIAkJCQkkb2ZmICs9IGxlbmd0aCgkZWxlbWVudHNbJG4gKyAxXSk7CkBAIC0xNDI3LDMxICsxNTc3LDMxIEBACiAjbmVlZCBzcGFjZSBiZWZvcmUgYnJhY2UgZm9sbG93aW5nIGlmLCB3aGlsZSwgZXRjCiAJCWlmICgoJGxpbmUgPX4gL1woLipcKXsvICYmICRsaW5lICF+IC9cKCRUeXBlXCl7LykgfHwKIAkJICAgICRsaW5lID1+IC9kb3svKSB7Ci0JCQlFUlJPUigibmVlZCBhIHNwYWNlIGJlZm9yZSB0aGUgb3BlbiBicmFjZSAneydcbiIgLiAkaGVyZWN1cnIpOworCQkJRVJST1IoInNwYWNlIHJlcXVpcmVkIGJlZm9yZSB0aGUgb3BlbiBicmFjZSAneydcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKICMgY2xvc2luZyBicmFjZSBzaG91bGQgaGF2ZSBhIHNwYWNlIGZvbGxvd2luZyBpdCB3aGVuIGl0IGhhcyBhbnl0aGluZwogIyBvbiB0aGUgbGluZQogCQlpZiAoJGxpbmUgPX4gL30oPyEoPzosfDt8XCkpKVxTLykgewotCQkJRVJST1IoIm5lZWQgYSBzcGFjZSBhZnRlciB0aGF0IGNsb3NlIGJyYWNlICd9J1xuIiAuICRoZXJlY3Vycik7CisJCQlFUlJPUigic3BhY2UgcmVxdWlyZWQgYWZ0ZXIgdGhhdCBjbG9zZSBicmFjZSAnfSdcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKICMgY2hlY2sgc3BhY2luZyBvbiBzcXVhcmUgYnJhY2tldHMKIAkJaWYgKCRsaW5lID1+IC9cW1xzLyAmJiAkbGluZSAhfiAvXFtccyokLykgewotCQkJRVJST1IoIm5vIHNwYWNlIGFmdGVyIHRoYXQgb3BlbiBzcXVhcmUgYnJhY2tldCAnWydcbiIgLiAkaGVyZWN1cnIpOworCQkJRVJST1IoInNwYWNlIHByb2hpYml0ZWQgYWZ0ZXIgdGhhdCBvcGVuIHNxdWFyZSBicmFja2V0ICdbJ1xuIiAuICRoZXJlY3Vycik7CiAJCX0KIAkJaWYgKCRsaW5lID1+IC9cc1xdLykgewotCQkJRVJST1IoIm5vIHNwYWNlIGJlZm9yZSB0aGF0IGNsb3NlIHNxdWFyZSBicmFja2V0ICddJ1xuIiAuICRoZXJlY3Vycik7CisJCQlFUlJPUigic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgdGhhdCBjbG9zZSBzcXVhcmUgYnJhY2tldCAnXSdcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKICMgY2hlY2sgc3BhY2luZyBvbiBwYXJldGhlc2VzCiAJCWlmICgkbGluZSA9fiAvXChccy8gJiYgJGxpbmUgIX4gL1woXHMqKD86XFwpPyQvICYmCiAJCSAgICAkbGluZSAhfiAvZm9yXHMqXChccys7LykgewotCQkJRVJST1IoIm5vIHNwYWNlIGFmdGVyIHRoYXQgb3BlbiBwYXJlbnRoZXNpcyAnKCdcbiIgLiAkaGVyZWN1cnIpOworCQkJRVJST1IoInNwYWNlIHByb2hpYml0ZWQgYWZ0ZXIgdGhhdCBvcGVuIHBhcmVudGhlc2lzICcoJ1xuIiAuICRoZXJlY3Vycik7CiAJCX0KIAkJaWYgKCRsaW5lID1+IC8oXHMrKVwpLyAmJiAkbGluZSAhfiAvXi5ccypcKS8gJiYKIAkJICAgICRsaW5lICF+IC9mb3JccypcKC4qO1xzK1wpLykgewotCQkJRVJST1IoIm5vIHNwYWNlIGJlZm9yZSB0aGF0IGNsb3NlIHBhcmVudGhlc2lzICcpJ1xuIiAuICRoZXJlY3Vycik7CisJCQlFUlJPUigic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgdGhhdCBjbG9zZSBwYXJlbnRoZXNpcyAnKSdcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKICNnb3RvIGxhYmVscyBhcmVuJ3QgaW5kZW50ZWQsIGFsbG93IGEgc2luZ2xlIHNwYWNlIGhvd2V2ZXIKQEAgLTE0NjIsNyArMTYxMiw3IEBACiAKICMgTmVlZCBhIHNwYWNlIGJlZm9yZSBvcGVuIHBhcmVudGhlc2lzIGFmdGVyIGlmLCB3aGlsZSBldGMKIAkJaWYgKCRsaW5lPX4vXGIoaWZ8d2hpbGV8Zm9yfHN3aXRjaClcKC8pIHsKLQkJCUVSUk9SKCJuZWVkIGEgc3BhY2UgYmVmb3JlIHRoZSBvcGVuIHBhcmVudGhlc2lzICcoJ1xuIiAuICRoZXJlY3Vycik7CisJCQlFUlJPUigic3BhY2UgcmVxdWlyZWQgYmVmb3JlIHRoZSBvcGVuIHBhcmVudGhlc2lzICcoJ1xuIiAuICRoZXJlY3Vycik7CiAJCX0KIAogIyBDaGVjayBmb3IgaWxsZWdhbCBhc3NpZ25tZW50IGluIGlmIGNvbmRpdGlvbmFsLgpAQCAtMTQ3NSwxMCArMTYyNSwxMiBAQAogCiAJCQkjIEZpbmQgb3V0IHdoYXQgaXMgb24gdGhlIGVuZCBvZiB0aGUgbGluZSBhZnRlciB0aGUKIAkJCSMgY29uZGl0aW9uYWwuCi0JCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYykpID0gJyc7CisJCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYyksICcnKTsKIAkJCSRzID1+IHMvXG4uKi8vZzsKIAkJCSRzID1+IHMvJDsvL2c7IAkjIFJlbW92ZSBhbnkgY29tbWVudHMKLQkJCWlmIChsZW5ndGgoJGMpICYmICRzICF+IC9eXHMqKHt8O3wpXHMqXFwqXHMqJC8pIHsKKwkJCWlmIChsZW5ndGgoJGMpICYmICRzICF+IC9eXHMqKHt8O3wpXHMqXFwqXHMqJC8gJiYKKwkJCSAgICAkYyAhfiAvXi5cI1xzKmlmLykKKwkJCXsKIAkJCQlFUlJPUigidHJhaWxpbmcgc3RhdGVtZW50cyBzaG91bGQgYmUgb24gbmV4dCBsaW5lXG4iIC4gJGhlcmVjdXJyKTsKIAkJCX0KIAkJfQpAQCAtMTUyMCw3ICsxNjcyLDcgQEAKIAogCQkJIyBGaW5kIG91dCB3aGF0IGlzIG9uIHRoZSBlbmQgb2YgdGhlIGxpbmUgYWZ0ZXIgdGhlCiAJCQkjIGNvbmRpdGlvbmFsLgotCQkJc3Vic3RyKCRzLCAwLCBsZW5ndGgoJGMpKSA9ICcnOworCQkJc3Vic3RyKCRzLCAwLCBsZW5ndGgoJGMpLCAnJyk7CiAJCQkkcyA9fiBzL1xuLiovL2c7CiAKIAkJCWlmICgkcyA9fiAvXlxzKjsvKSB7CkBAIC0xNTQ0LDE0ICsxNjk2LDE0IEBACiAJCWlmICgkdHJlZSAmJiAkcmF3bGluZSA9fiBte14uXCNccyppbmNsdWRlXHMqXDxhc21cLyguKilcLmhcPn0pIHsKIAkJCW15ICRjaGVja2ZpbGUgPSAiJHJvb3QvaW5jbHVkZS9saW51eC8kMS5oIjsKIAkJCWlmICgtZiAkY2hlY2tmaWxlICYmICQxIG5lICdpcnEuaCcpIHsKLQkJCQlDSEsoIlVzZSAjaW5jbHVkZSA8bGludXgvJDEuaD4gaW5zdGVhZCBvZiA8YXNtLyQxLmg+XG4iIC4KKwkJCQlXQVJOKCJVc2UgI2luY2x1ZGUgPGxpbnV4LyQxLmg+IGluc3RlYWQgb2YgPGFzbS8kMS5oPlxuIiAuCiAJCQkJCSRoZXJlY3Vycik7CiAJCQl9CiAJCX0KIAogIyBtdWx0aS1zdGF0ZW1lbnQgbWFjcm9zIHNob3VsZCBiZSBlbmNsb3NlZCBpbiBhIGRvIHdoaWxlIGxvb3AsIGdyYWIgdGhlCiAjIGZpcnN0IHN0YXRlbWVudCBhbmQgZW5zdXJlIGl0cyB0aGUgd2hvbGUgbWFjcm8gaWYgaXRzIG5vdCBlbmNsb3NlZAotIyBpbiBhIGtub3duIGdvb3QgY29udGFpbmVyCisjIGluIGEga25vd24gZ29vZCBjb250YWluZXIKIAkJaWYgKCRwcmV2bGluZSA9fiAvXCNkZWZpbmUuKlxcLyAmJgogCQkgICAkcHJldmxpbmUgIX4vKD86ZG9ccyt7fFwoXHt8XHspLyAmJgogCQkgICAkbGluZSAhfiAvKD86ZG9ccyt7fFwoXHt8XHspLyAmJgpAQCAtMTU5OSw4NCArMTc1MSwxMDMgQEAKICMgY2hlY2sgZm9yIHJlZHVuZGFudCBicmFjaW5nIHJvdW5kIGlmIGV0YwogCQlpZiAoJGxpbmUgPX4gLyheLiopXGJpZlxiLyAmJiAkMSAhfiAvZWxzZVxzKiQvKSB7CiAJCQlteSAoJGxldmVsLCAkZW5kbG4sIEBjaHVua3MpID0KLQkJCQljdHhfc3RhdGVtZW50X2Z1bGwoJGxpbmVuciwgJHJlYWxjbnQsIDApOworCQkJCWN0eF9zdGF0ZW1lbnRfZnVsbCgkbGluZW5yLCAkcmVhbGNudCwgMSk7CiAJCQkjcHJpbnQgImNodW5rczwkI2NodW5rcz4gbGluZW5yPCRsaW5lbnI+IGVuZGxuPCRlbmRsbj4gbGV2ZWw8JGxldmVsPlxuIjsKLQkJCWlmICgkI2NodW5rcyA+IDEgJiYgJGxldmVsID09IDApIHsKKwkJCSNwcmludCAiQVBXOiA8PCRjaHVua3NbMV1bMF0+Pjw8JGNodW5rc1sxXVsxXT4+XG4iOworCQkJaWYgKCQjY2h1bmtzID4gMCAmJiAkbGV2ZWwgPT0gMCkgewogCQkJCW15ICRhbGxvd2VkID0gMDsKIAkJCQlteSAkc2VlbiA9IDA7CisJCQkJbXkgJGhlcmVjdHggPSAkaGVyZSAuICJcbiI7CisJCQkJbXkgJGxuID0gJGxpbmVuciAtIDE7CiAJCQkJZm9yIG15ICRjaHVuayAoQGNodW5rcykgewogCQkJCQlteSAoJGNvbmQsICRibG9jaykgPSBAeyRjaHVua307CiAKLQkJCQkJc3Vic3RyKCRibG9jaywgMCwgbGVuZ3RoKCRjb25kKSkgPSAnJzsKKwkJCQkJIyBJZiB0aGUgY29uZGl0aW9uIGNhcnJpZXMgbGVhZGluZyBuZXdsaW5lcywgdGhlbiBjb3VudCB0aG9zZSBhcyBvZmZzZXRzLgorCQkJCQlteSAoJHdoaXRlc3BhY2UpID0gKCRjb25kID1+IC9eKCg/OlxzKlxuWystXSkqXHMqKS9zKTsKKwkJCQkJbXkgJG9mZnNldCA9IHN0YXRlbWVudF9yYXdsaW5lcygkd2hpdGVzcGFjZSkgLSAxOworCisJCQkJCSNwcmludCAiQ09ORDwkY29uZD4gd2hpdGVzcGFjZTwkd2hpdGVzcGFjZT4gb2Zmc2V0PCRvZmZzZXQ+XG4iOworCisJCQkJCSMgV2UgaGF2ZSBsb29rZWQgYXQgYW5kIGFsbG93ZWQgdGhpcyBzcGVjaWZpYyBsaW5lLgorCQkJCQkkc3VwcHJlc3NfaWZicmFjZXN7JGxuICsgJG9mZnNldH0gPSAxOworCisJCQkJCSRoZXJlY3R4IC49ICIkcmF3bGluZXNbJGxuICsgJG9mZnNldF1cblsuLi5dXG4iOworCQkJCQkkbG4gKz0gc3RhdGVtZW50X3Jhd2xpbmVzKCRibG9jaykgLSAxOworCisJCQkJCXN1YnN0cigkYmxvY2ssIDAsIGxlbmd0aCgkY29uZCksICcnKTsKIAogCQkJCQkkc2VlbisrIGlmICgkYmxvY2sgPX4gL15ccyp7Lyk7CiAKLQkJCQkJJGJsb2NrID1+IHMvKF58XG4pLi8kMS9nOwotCQkJCQkkYmxvY2sgPX4gcy9eXHMqey8vOwotCQkJCQkkYmxvY2sgPX4gcy99XHMqJC8vOwotCQkJCQkkYmxvY2sgPX4gcy9eXHMqLy87Ci0JCQkJCSRibG9jayA9fiBzL1xzKiQvLzsKLQotCQkJCQlteSBAbGluZXMgPSAoJGJsb2NrID1+IC9cbi9nKTsKLQkJCQkJbXkgQHN0YXRlbWVudHMgPSAoJGJsb2NrID1+IC87L2cpOwotCi0JCQkJCSNwcmludCAiY29uZDwkY29uZD4gYmxvY2s8JGJsb2NrPiBsaW5lczwiIC4gc2NhbGFyKEBsaW5lcykgLiAiPiBzdGF0ZW1lbnRzPCIgLiBzY2FsYXIoQHN0YXRlbWVudHMpIC4gIj4gc2Vlbjwkc2Vlbj4gYWxsb3dlZDwkYWxsb3dlZD5cbiI7Ci0JCQkJCWlmIChzY2FsYXIoQGxpbmVzKSAhPSAwKSB7CisJCQkJCSNwcmludCAiY29uZDwkY29uZD4gYmxvY2s8JGJsb2NrPiBhbGxvd2VkPCRhbGxvd2VkPlxuIjsKKwkJCQkJaWYgKHN0YXRlbWVudF9saW5lcygkY29uZCkgPiAxKSB7CisJCQkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogY29uZDwkY29uZD5cbiI7CiAJCQkJCQkkYWxsb3dlZCA9IDE7CiAJCQkJCX0KIAkJCQkJaWYgKCRibG9jayA9fi9cYig/OmlmfGZvcnx3aGlsZSlcYi8pIHsKKwkJCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBibG9jazwkYmxvY2s+XG4iOwogCQkJCQkJJGFsbG93ZWQgPSAxOwogCQkJCQl9Ci0JCQkJCWlmIChzY2FsYXIoQHN0YXRlbWVudHMpID4gMSkgeworCQkJCQlpZiAoc3RhdGVtZW50X2Jsb2NrX3NpemUoJGJsb2NrKSA+IDEpIHsKKwkJCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBsaW5lcyBibG9jazwkYmxvY2s+XG4iOwogCQkJCQkJJGFsbG93ZWQgPSAxOwogCQkJCQl9CiAJCQkJfQogCQkJCWlmICgkc2VlbiAmJiAhJGFsbG93ZWQpIHsKLQkJCQkJV0FSTigiYnJhY2VzIHt9IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbnkgYXJtIG9mIHRoaXMgc3RhdGVtZW50XG4iIC4gJGhlcmVjdXJyKTsKLQkJCQkJJHN1cHByZXNzX2lmYnJhY2VzID0gJGVuZGxuOworCQkJCQlXQVJOKCJicmFjZXMge30gYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGFueSBhcm0gb2YgdGhpcyBzdGF0ZW1lbnRcbiIgLiAkaGVyZWN0eCk7CiAJCQkJfQogCQkJfQogCQl9Ci0JCWlmICgkbGluZW5yID4gJHN1cHByZXNzX2lmYnJhY2VzICYmCisJCWlmICghZGVmaW5lZCAkc3VwcHJlc3NfaWZicmFjZXN7JGxpbmVuciAtIDF9ICYmCiAJCQkJCSRsaW5lID1+IC9cYihpZnx3aGlsZXxmb3J8ZWxzZSlcYi8pIHsKLQkJCSMgTG9jYXRlIHRoZSBlbmQgb2YgdGhlIG9wZW5pbmcgc3RhdGVtZW50LgotCQkJbXkgQGNvbnRyb2wgPSBjdHhfc3RhdGVtZW50KCRsaW5lbnIsICRyZWFsY250LCAwKTsKLQkJCW15ICRuciA9ICRsaW5lbnIgKyAoc2NhbGFyKEBjb250cm9sKSAtIDEpOwotCQkJbXkgJGNudCA9ICRyZWFsY250IC0gKHNjYWxhcihAY29udHJvbCkgLSAxKTsKKwkJCW15ICRhbGxvd2VkID0gMDsKIAotCQkJbXkgJG9mZiA9ICRyZWFsY250IC0gJGNudDsKLQkJCSNwcmludCAiJG9mZjogbGluZTwkbGluZT5lbmQ8IiAuICRsaW5lc1skbnIgLSAxXSAuICI+XG4iOworCQkJIyBDaGVjayB0aGUgcHJlLWNvbnRleHQuCisJCQlpZiAoc3Vic3RyKCRsaW5lLCAwLCAkLVswXSkgPX4gLyhcfVxzKikkLykgeworCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBwcmU8JDE+XG4iOworCQkJCSRhbGxvd2VkID0gMTsKKwkJCX0KIAotCQkJIyBJZiB0aGlzIGlzIGlzIGEgYnJhY2VkIHN0YXRlbWVudCBncm91cCBjaGVjayBpdAotCQkJaWYgKCRsaW5lc1skbnIgLSAxXSA9fiAve1xzKiQvKSB7Ci0JCQkJbXkgKCRsdmwsIEBibG9jaykgPSBjdHhfYmxvY2tfbGV2ZWwoJG5yLCAkY250KTsKKwkJCW15ICgkbGV2ZWwsICRlbmRsbiwgQGNodW5rcykgPQorCQkJCWN0eF9zdGF0ZW1lbnRfZnVsbCgkbGluZW5yLCAkcmVhbGNudCwgJC1bMF0pOwogCi0JCQkJbXkgJHN0bXQgPSBqb2luKCJcbiIsIEBibG9jayk7Ci0JCQkJIyBEcm9wIHRoZSBkaWZmIGxpbmUgbGVhZGVyLgotCQkJCSRzdG10ID1+IHMvXG4uL1xuL2c7Ci0JCQkJIyBEcm9wIHRoZSBjb2RlIG91dHNpZGUgdGhlIGJsb2NrLgotCQkJCSRzdG10ID1+IHMvKF5bXntdKil7XHMqLy87Ci0JCQkJbXkgJGJlZm9yZSA9ICQxOwotCQkJCSRzdG10ID1+IHMvXHMqfShbXn1dKiQpLy87Ci0JCQkJbXkgJGFmdGVyID0gJDE7Ci0KLQkJCQkjcHJpbnQgImJsb2NrPCIgLiBqb2luKCcgJywgQGJsb2NrKSAuICI+PCIgLiBzY2FsYXIoQGJsb2NrKSAuICI+XG4iOwotCQkJCSNwcmludCAiYmVmb3JlPCRiZWZvcmU+IHN0bXQ8JHN0bXQ+IGFmdGVyPCRhZnRlcj5cblxuIjsKLQotCQkJCSMgQ291bnQgdGhlIG5ld2xpbmVzLCBpZiB0aGVyZSBpcyBvbmx5IG9uZQotCQkJCSMgdGhlbiB0aGUgYmxvY2sgc2hvdWxkIG5vdCBoYXZlIHt9J3MuCi0JCQkJbXkgQGxpbmVzID0gKCRzdG10ID1+IC9cbi9nKTsKLQkJCQlteSBAc3RhdGVtZW50cyA9ICgkc3RtdCA9fiAvOy9nKTsKLQkJCQkjcHJpbnQgImxpbmVzPCIgLiBzY2FsYXIoQGxpbmVzKSAuICI+XG4iOwotCQkJCSNwcmludCAic3RhdGVtZW50czwiIC4gc2NhbGFyKEBzdGF0ZW1lbnRzKSAuICI+XG4iOwotCQkJCWlmICgkbHZsID09IDAgJiYgc2NhbGFyKEBsaW5lcykgPT0gMCAmJgotCQkJCSAgICBzY2FsYXIoQHN0YXRlbWVudHMpIDwgMiAmJgotCQkJCSAgICAkc3RtdCAhfiAvey8gJiYgJHN0bXQgIX4gL1xiaWZcYi8gJiYKLQkJCQkgICAgJGJlZm9yZSAhfiAvfS8gJiYgJGFmdGVyICF+IC97LykgewotCQkJCSAgICAJbXkgJGhlcmVjdHggPSAiJGhlcmVcbiIgLiBqb2luKCJcbiIsIEBjb250cm9sLCBAYmxvY2tbMSAuLiAkI2Jsb2NrXSkgLiAiXG4iOwotCQkJCSAgICAJc2hpZnQoQGJsb2NrKTsKLQkJCQkJV0FSTigiYnJhY2VzIHt9IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBzaW5nbGUgc3RhdGVtZW50IGJsb2Nrc1xuIiAuICRoZXJlY3R4KTsKKwkJCSMgQ2hlY2sgdGhlIGNvbmRpdGlvbi4KKwkJCW15ICgkY29uZCwgJGJsb2NrKSA9IEB7JGNodW5rc1swXX07CisJCQkjcHJpbnQgIkNIRUNLSU5HPCRsaW5lbnI+IGNvbmQ8JGNvbmQ+IGJsb2NrPCRibG9jaz5cbiI7CisJCQlpZiAoZGVmaW5lZCAkY29uZCkgeworCQkJCXN1YnN0cigkYmxvY2ssIDAsIGxlbmd0aCgkY29uZCksICcnKTsKKwkJCX0KKwkJCWlmIChzdGF0ZW1lbnRfbGluZXMoJGNvbmQpID4gMSkgeworCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBjb25kPCRjb25kPlxuIjsKKwkJCQkkYWxsb3dlZCA9IDE7CisJCQl9CisJCQlpZiAoJGJsb2NrID1+L1xiKD86aWZ8Zm9yfHdoaWxlKVxiLykgeworCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBibG9jazwkYmxvY2s+XG4iOworCQkJCSRhbGxvd2VkID0gMTsKKwkJCX0KKwkJCWlmIChzdGF0ZW1lbnRfYmxvY2tfc2l6ZSgkYmxvY2spID4gMSkgeworCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBsaW5lcyBibG9jazwkYmxvY2s+XG4iOworCQkJCSRhbGxvd2VkID0gMTsKKwkJCX0KKwkJCSMgQ2hlY2sgdGhlIHBvc3QtY29udGV4dC4KKwkJCWlmIChkZWZpbmVkICRjaHVua3NbMV0pIHsKKwkJCQlteSAoJGNvbmQsICRibG9jaykgPSBAeyRjaHVua3NbMV19OworCQkJCWlmIChkZWZpbmVkICRjb25kKSB7CisJCQkJCXN1YnN0cigkYmxvY2ssIDAsIGxlbmd0aCgkY29uZCksICcnKTsKIAkJCQl9CisJCQkJaWYgKCRibG9jayA9fiAvXlxzKlx7LykgeworCQkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogY2h1bmstMSBibG9jazwkYmxvY2s+XG4iOworCQkJCQkkYWxsb3dlZCA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYgKCRsZXZlbCA9PSAwICYmICRibG9jayA9fiAvXlxzKlx7LyAmJiAhJGFsbG93ZWQpIHsKKwkJCQlteSAkaGVyZWN0eCA9ICRoZXJlIC4gIlxuIjs7CisJCQkJbXkgJGVuZCA9ICRsaW5lbnIgKyBzdGF0ZW1lbnRfcmF3bGluZXMoJGJsb2NrKSAtIDE7CisKKwkJCQlmb3IgKG15ICRsbiA9ICRsaW5lbnIgLSAxOyAkbG4gPCAkZW5kOyAkbG4rKykgeworCQkJCQkkaGVyZWN0eCAuPSAkcmF3bGluZXNbJGxuXSAuICJcbiI7OworCQkJCX0KKworCQkJCVdBUk4oImJyYWNlcyB7fSBhcmUgbm90IG5lY2Vzc2FyeSBmb3Igc2luZ2xlIHN0YXRlbWVudCBibG9ja3NcbiIgLiAkaGVyZWN0eCk7CiAJCQl9CiAJCX0KIApAQCAtMTc4NCw2ICsxOTU1LDI4IEBACiAJCWlmICgkbGluZSA9fiAvX19GVU5DVElPTl9fLykgewogCQkJV0FSTigiX19mdW5jX18gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBnY2Mgc3BlY2lmaWMgX19GVU5DVElPTl9fXG4iICAuICRoZXJlY3Vycik7CiAJCX0KKworIyBjaGVjayBmb3Igc2VtYXBob3JlcyB1c2VkIGFzIG11dGV4ZXMKKwkJaWYgKCRsaW5lID1+IC9cYihERUNMQVJFX01VVEVYfGluaXRfTVVURVgpXHMqXCgvKSB7CisJCQlXQVJOKCJtdXRleGVzIGFyZSBwcmVmZXJyZWQgZm9yIHNpbmdsZSBob2xkZXIgc2VtYXBob3Jlc1xuIiAuICRoZXJlY3Vycik7CisJCX0KKyMgY2hlY2sgZm9yIHNlbWFwaG9yZXMgdXNlZCBhcyBtdXRleGVzCisJCWlmICgkbGluZSA9fiAvXGJpbml0X01VVEVYX0xPQ0tFRFxzKlwoLykgeworCQkJV0FSTigiY29uc2lkZXIgdXNpbmcgYSBjb21wbGV0aW9uXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorIyByZWNvbW1lbmQgc3RyaWN0X3N0cnRvKiBvdmVyIHNpbXBsZV9zdHJ0byoKKwkJaWYgKCRsaW5lID1+IC9cYnNpbXBsZV8oc3RydG8uKj8pXHMqXCgvKSB7CisJCQlXQVJOKCJjb25zaWRlciB1c2luZyBzdHJpY3RfJDEgaW4gcHJlZmVyZW5jZSB0byBzaW1wbGVfJDFcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgdXNlIG9mIE5SX0NQVVMgaXMgdXN1YWxseSB3cm9uZworIyBpZ25vcmUgZGVmaW5pdGlvbnMgb2YgTlJfQ1BVUyBhbmQgdXNhZ2UgdG8gZGVmaW5lIGFycmF5cyBhcyBsaWtlbHkgcmlnaHQKKwkJaWYgKCRsaW5lID1+IC9cYk5SX0NQVVNcYi8gJiYKKwkJICAgICRsaW5lICF+IC9eLiNccypkZWZpbmVccytOUl9DUFVTXHMrLyAmJgorCQkgICAgJGxpbmUgIX4gL14uXHMqJERlY2xhcmVccy4qXFtbXlxdXSpOUl9DUFVTW15cXV0qXF0vKQorCQl7CisJCQlXQVJOKCJ1c2FnZSBvZiBOUl9DUFVTIGlzIG9mdGVuIHdyb25nIC0gY29uc2lkZXIgdXNpbmcgY3B1X3Bvc3NpYmxlKCksIG51bV9wb3NzaWJsZV9jcHVzKCksIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdSgpLCBldGNcbiIgLiAkaGVyZWN1cnIpOworCQl9CiAJfQogCiAJIyBJZiB3ZSBoYXZlIG5vIGlucHV0IGF0IGFsbCwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcG9ydCBvbgpAQCAtMTgyOCwxNSArMjAyMSw2IEBACiAJCXByaW50ICJhcmUgZmFsc2UgcG9zaXRpdmVzIHJlcG9ydCB0aGVtIHRvIHRoZSBtYWludGFpbmVyLCBzZWVcbiI7CiAJCXByaW50ICJDSEVDS1BBVENIIGluIE1BSU5UQUlORVJTLlxuIjsKIAl9Ci0JcHJpbnQgPDxFT0wgaWYgKCRmaWxlID09IDEgJiYgJHF1aWV0ID09IDApOwotCi1XQVJOSU5HOiBVc2luZyAtLWZpbGUgbW9kZS4gUGxlYXNlIGRvIG5vdCBzZW5kIHBhdGNoZXMgdG8gbGludXgta2VybmVsCi10aGF0IGNoYW5nZSB3aG9sZSBleGlzdGluZyBmaWxlcyBpZiB5b3UgZGlkIG5vdCBzaWduaWZpY2FudGx5IGNoYW5nZSBtb3N0Ci1vZiB0aGUgdGhlIGZpbGUgZm9yIG90aGVyIHJlYXNvbnMgYW55d2F5cyBvciBqdXN0IHdyb3RlIHRoZSBmaWxlIG5ld2x5Ci1mcm9tIHNjcmF0Y2guIFB1cmUgY29kZSBzdHlsZSBwYXRjaGVzIGhhdmUgYSBzaWduaWZpY2FudCBjb3N0IGluIGEKLXF1aWNrbHkgY2hhbmdpbmcgY29kZSBiYXNlIGxpa2UgTGludXggYmVjYXVzZSB0aGV5IGNhdXNlIHJlamVjdHMKLXdpdGggb3RoZXIgY2hhbmdlcy4KLUVPTAogCiAJcmV0dXJuICRjbGVhbjsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYyBiL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYwppbmRleCAzOTI5ZTViLi40YTAzMTkxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jCkBAIC0yOTgsMjIgKzI5OCwzMCBAQAogCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpIHsKIAkJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CiAJCQluZXd2YWwudHJpID0gKHByb3BfZ2V0X3N5bWJvbChwcm9wKS0+Y3Vyci52YWwgPT0gc3ltKSA/IHllcyA6IG5vOwotCQl9IGVsc2UgaWYgKEVYUFJfT1Ioc3ltLT52aXNpYmxlLCBzeW0tPnJldl9kZXAudHJpKSAhPSBubykgewotCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7Ci0JCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKQotCQkJCW5ld3ZhbC50cmkgPSBzeW0tPmRlZltTX0RFRl9VU0VSXS50cmk7Ci0JCQllbHNlIGlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7Ci0JCQkJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7Ci0JCQkJaWYgKHByb3ApCi0JCQkJCW5ld3ZhbC50cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwcik7Ci0JCQl9Ci0JCQluZXd2YWwudHJpID0gRVhQUl9PUihFWFBSX0FORChuZXd2YWwudHJpLCBzeW0tPnZpc2libGUpLCBzeW0tPnJldl9kZXAudHJpKTsKLQkJfSBlbHNlIGlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7Ci0JCQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKLQkJCWlmIChwcm9wKSB7CisJCX0gZWxzZSB7CisJCQlpZiAoc3ltLT52aXNpYmxlICE9IG5vKSB7CisJCQkJLyogaWYgdGhlIHN5bWJvbCBpcyB2aXNpYmxlIHVzZSB0aGUgdXNlciB2YWx1ZQorCQkJCSAqIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRyeSB0aGUgZGVmYXVsdCB2YWx1ZQorCQkJCSAqLwogCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOwotCQkJCW5ld3ZhbC50cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwcik7CisJCQkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgeworCQkJCQluZXd2YWwudHJpID0gRVhQUl9BTkQoc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpLAorCQkJCQkJCSAgICAgIHN5bS0+dmlzaWJsZSk7CisJCQkJCWdvdG8gY2FsY19uZXd2YWw7CisJCQkJfQogCQkJfQorCQkJaWYgKHN5bS0+cmV2X2RlcC50cmkgIT0gbm8pCisJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJCXByb3AgPSBzeW1fZ2V0X2RlZmF1bHRfcHJvcChzeW0pOworCQkJCWlmIChwcm9wKSB7CisJCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOworCQkJCQluZXd2YWwudHJpID0gRVhQUl9BTkQoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLAorCQkJCQkJCSAgICAgIHByb3AtPnZpc2libGUudHJpKTsKKwkJCQl9CisJCQl9CisJCWNhbGNfbmV3dmFsOgorCQkJbmV3dmFsLnRyaSA9IEVYUFJfT1IobmV3dmFsLnRyaSwgc3ltLT5yZXZfZGVwLnRyaSk7CiAJCX0KIAkJaWYgKG5ld3ZhbC50cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikKIAkJCW5ld3ZhbC50cmkgPSB5ZXM7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggMjYxNDZjYi4uMjYzZDA0YSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMjQ3LDYgKzI0NywxMCBAQAogbXkgKCR0eXBlLCRkZWNsYXJhdGlvbl9uYW1lLCRyZXR1cm5fdHlwZSk7CiBteSAoJG5ld3NlY3Rpb24sJG5ld2NvbnRlbnRzLCRwcm90b3R5cGUsJGZpbGVsaXN0LCAkYnJjb3VudCwgJXNvdXJjZV9tYXApOwogCitpZiAoZGVmaW5lZCgkRU5WeydLQlVJTERfVkVSQk9TRSd9KSkgeworCSR2ZXJib3NlID0gIiRFTlZ7J0tCVUlMRF9WRVJCT1NFJ30iOworfQorCiAjIEdlbmVyYXRlZCBkb2Nib29rIGNvZGUgaXMgaW5zZXJ0ZWQgaW4gYSB0ZW1wbGF0ZSBhdCBhIHBvaW50IHdoZXJlCiAjIGRvY2Jvb2sgdjMuMSByZXF1aXJlcyBhIG5vbi16ZXJvIHNlcXVlbmNlIG9mIFJlZkVudHJ5J3M7IHNlZToKICMgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL2RvY3VtZW50YXRpb24vcmVmZXJlbmNlL2h0bWwvcmVmZW50cnkuaHRtbApAQCAtMTUxMiwxMyArMTUxNiwxMyBAQAogCSAgICAjIGNvcnJlc3BvbmRpbmcgZGF0YSBzdHJ1Y3R1cmVzICJjb3JyZWN0bHkiLiBDYXRjaCBpdCBsYXRlciBpbgogCSAgICAjIG91dHB1dF8qIHN1YnMuCiAJICAgIHB1c2hfcGFyYW1ldGVyKCRhcmcsICIiLCAkZmlsZSk7Ci0JfSBlbHNpZiAoJGFyZyA9fiBtL1woLipcKi8pIHsKKwl9IGVsc2lmICgkYXJnID1+IG0vXCguK1wpXHMqXCgvKSB7CiAJICAgICMgcG9pbnRlci10by1mdW5jdGlvbgogCSAgICAkYXJnID1+IHRyLyMvLC87Ci0JICAgICRhcmcgPX4gbS9bXlwoXStcKFwqXHMqKFteXCldKylcKS87CisJICAgICRhcmcgPX4gbS9bXlwoXStcKFwqP1xzKihcdyopXHMqXCkvOwogCSAgICAkcGFyYW0gPSAkMTsKIAkgICAgJHR5cGUgPSAkYXJnOwotCSAgICAkdHlwZSA9fiBzLyhbXlwoXStcKFwqKSRwYXJhbS8kMS87CisJICAgICR0eXBlID1+IHMvKFteXChdK1woXCo/KVxzKiRwYXJhbS8kMS87CiAJICAgIHB1c2hfcGFyYW1ldGVyKCRwYXJhbSwgJHR5cGUsICRmaWxlKTsKIAl9IGVsc2lmICgkYXJnKSB7CiAJICAgICRhcmcgPX4gcy9ccyo6XHMqLzovZzsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCA5ZGRmOTQ0Li43NjliNjlkIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC01MSwxMSArNTEsMTMgQEAKICAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciArIHN0cmxlbihzdHIpLCAiKiIpOyAgICAgICAgICAgICAgICBcCiB9IHdoaWxlKDApCiAKK3Vuc2lnbmVkIGludCBjcm9zc19idWlsZCA9IDA7CiAvKioKICAqIENoZWNrIHRoYXQgc2l6ZW9mKGRldmljZV9pZCB0eXBlKSBhcmUgY29uc2lzdGVudCB3aXRoIHNpemUgb2Ygc2VjdGlvbgogICogaW4gLm8gZmlsZS4gSWYgaW4tY29uc2lzdGVudCB0aGVuIHVzZXJzcGFjZSBhbmQga2VybmVsIGRvZXMgbm90IGFncmVlCiAgKiBvbiBhY3R1YWwgc2l6ZSB3aGljaCBpcyBhIGJ1Zy4KICAqIEFsc28gdmVyaWZ5IHRoYXQgdGhlIGZpbmFsIGVudHJ5IGluIHRoZSB0YWJsZSBpcyBhbGwgemVyb3MuCisgKiBJZ25vcmUgYm90aCBjaGVja3MgaWYgYnVpbGQgaG9zdCBkaWZmZXIgZnJvbSB0YXJnZXQgaG9zdCBhbmQgc2l6ZSBkaWZmZXJzLgogICoqLwogc3RhdGljIHZvaWQgZGV2aWNlX2lkX2NoZWNrKGNvbnN0IGNoYXIgKm1vZG5hbWUsIGNvbnN0IGNoYXIgKmRldmljZV9pZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgaWRfc2l6ZSwKQEAgLTY0LDYgKzY2LDggQEAKIAlpbnQgaTsKIAogCWlmIChzaXplICUgaWRfc2l6ZSB8fCBzaXplIDwgaWRfc2l6ZSkgeworCQlpZiAoY3Jvc3NfYnVpbGQgIT0gMCkKKwkJCXJldHVybjsKIAkJZmF0YWwoIiVzOiBzaXplb2Yoc3RydWN0ICVzX2RldmljZV9pZCk9JWx1IGlzIG5vdCBhIG1vZHVsbyAiCiAJCSAgICAgICJvZiB0aGUgc2l6ZSBvZiBzZWN0aW9uIF9fbW9kXyVzX2RldmljZV90YWJsZT0lbHUuXG4iCiAJCSAgICAgICJGaXggZGVmaW5pdGlvbiBvZiBzdHJ1Y3QgJXNfZGV2aWNlX2lkICIKQEAgLTMyNCwxOSArMzI4LDUyIEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIGxvb2tzIGxpa2U6ICJwbnA6Y0NkRC4uLiIgKi8KLXN0YXRpYyBpbnQgZG9fcG5wX2NhcmRfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQlzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCisvKiBsb29rcyBsaWtlOiAicG5wOmREIiBmb3IgZXZlcnkgZGV2aWNlIG9mIHRoZSBjYXJkICovCitzdGF0aWMgdm9pZCBkb19wbnBfY2FyZF9lbnRyaWVzKHZvaWQgKnN5bXZhbCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLQlpbnQgaTsKKwljb25zdCB1bnNpZ25lZCBsb25nIGlkX3NpemUgPSBzaXplb2Yoc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCk7CisJY29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0gKHNpemUgLyBpZF9zaXplKS0xOworCWNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKmNhcmRzID0gc3ltdmFsOworCXVuc2lnbmVkIGludCBpOwogCi0Jc3ByaW50ZihhbGlhcywgInBucDpjJXMiLCBpZC0+aWQpOwotCWZvciAoaSA9IDA7IGkgPCBQTlBfTUFYX0RFVklDRVM7IGkrKykgewotCQlpZiAoISAqaWQtPmRldnNbaV0uaWQpCi0JCQlicmVhazsKLQkJc3ByaW50ZihhbGlhcyArIHN0cmxlbihhbGlhcyksICJkJXMiLCBpZC0+ZGV2c1tpXS5pZCk7CisJZGV2aWNlX2lkX2NoZWNrKG1vZC0+bmFtZSwgInBucCIsIHNpemUsIGlkX3NpemUsIHN5bXZhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgajsKKwkJY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqY2FyZCA9ICZjYXJkc1tpXTsKKworCQlmb3IgKGogPSAwOyBqIDwgUE5QX01BWF9ERVZJQ0VTOyBqKyspIHsKKwkJCWNvbnN0IGNoYXIgKmlkID0gKGNoYXIgKiljYXJkLT5kZXZzW2pdLmlkOworCQkJaW50IGkyLCBqMjsKKwkJCWludCBkdXAgPSAwOworCisJCQlpZiAoIWlkWzBdKQorCQkJCWJyZWFrOworCisJCQkvKiBmaW5kIGR1cGxpY2F0ZSwgYWxyZWFkeSBhZGRlZCB2YWx1ZSAqLworCQkJZm9yIChpMiA9IDA7IGkyIDwgaSAmJiAhZHVwOyBpMisrKSB7CisJCQkJY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqY2FyZDIgPSAmY2FyZHNbaTJdOworCisJCQkJZm9yIChqMiA9IDA7IGoyIDwgUE5QX01BWF9ERVZJQ0VTOyBqMisrKSB7CisJCQkJCWNvbnN0IGNoYXIgKmlkMiA9IChjaGFyICopY2FyZDItPmRldnNbajJdLmlkOworCisJCQkJCWlmICghaWQyWzBdKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWYgKCFzdHJjbXAoaWQsIGlkMikpIHsKKwkJCQkJCWR1cCA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJLyogYWRkIGFuIGluZGl2aWR1YWwgYWxpYXMgZm9yIGV2ZXJ5IGRldmljZSBlbnRyeSAqLworCQkJaWYgKCFkdXApCisJCQkJYnVmX3ByaW50ZigmbW9kLT5kZXZfdGFibGVfYnVmLAorCQkJCQkgICAiTU9EVUxFX0FMSUFTKFwicG5wOmQlcypcIik7XG4iLCBpZCk7CisJCX0KIAl9Ci0JcmV0dXJuIDE7CiB9CiAKIC8qIExvb2tzIGxpa2U6IHBjbWNpYTptTmNOZk5mbk5wZm5OdmFOdmJOdmNOdmROLiAqLwpAQCAtNjMwLDkgKzY2Nyw3IEBACiAJCQkgc2l6ZW9mKHN0cnVjdCBwbnBfZGV2aWNlX2lkKSwgInBucCIsCiAJCQkgZG9fcG5wX2VudHJ5LCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcG5wX2NhcmRfZGV2aWNlX3RhYmxlIikpCi0JCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAotCQkJIHNpemVvZihzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkKSwgInBucF9jYXJkIiwKLQkJCSBkb19wbnBfY2FyZF9lbnRyeSwgbW9kKTsKKwkJZG9fcG5wX2NhcmRfZW50cmllcyhzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX3BjbWNpYV9kZXZpY2VfdGFibGUiKSkKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkKSwgInBjbWNpYSIsCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggNjE3NDI3Ny4uMTEwY2YyNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMTIwMCw3ICsxMjAwLDcgQEAKIAkJImFubm90YXRlICVzIHdpdGggYSBtYXRjaGluZyBhbm5vdGF0aW9uLlxuIiwKIAkJZnJvbSwgc2VjMmFubm90YXRpb24oZnJvbXNlYyksIGZyb21zeW0sIGZyb21fcCwKIAkJdG8sIHNlYzJhbm5vdGF0aW9uKHRvc2VjKSwgdG9zeW0sIHRvX3AsCi0JCWZyb21zeW0sIHRvc3ltLCBmcm9tc3ltKTsKKwkJdG9zeW0sIGZyb21zeW0sIHRvc3ltKTsKIAkJYnJlYWs7CiAJY2FzZSBJTklUX1RPX0VYSVQ6CiAJCWZwcmludGYoc3RkZXJyLApAQCAtMjAyNiw3ICsyMDI2LDcgQEAKIAlpbnQgb3B0OwogCWludCBlcnI7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiaTpJOm1zU286YXdNOks6IikpICE9IC0xKSB7CisJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgImk6STpjbXNTbzphd006SzoiKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAnaSc6CiAJCQlrZXJuZWxfcmVhZCA9IG9wdGFyZzsKQEAgLTIwMzUsNiArMjAzNSw5IEBACiAJCQltb2R1bGVfcmVhZCA9IG9wdGFyZzsKIAkJCWV4dGVybmFsX21vZHVsZSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQljcm9zc19idWlsZCA9IDE7CisJCQlicmVhazsKIAkJY2FzZSAnbSc6CiAJCQltb2R2ZXJzaW9ucyA9IDE7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuaCBiL3NjcmlwdHMvbW9kL21vZHBvc3QuaAppbmRleCA1NjVjNTg3Li4wOWY1OGUzIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCkBAIC0xMzUsNiArMTM1LDcgQEAKIH07CiAKIC8qIGZpbGUyYWxpYXMuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBjcm9zc19idWlsZDsKIHZvaWQgaGFuZGxlX21vZGRldnRhYmxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGVsZl9pbmZvICppbmZvLAogCQkJRWxmX1N5bSAqc3ltLCBjb25zdCBjaGFyICpzeW1uYW1lKTsKIHZvaWQgYWRkX21vZGRldnRhYmxlKHN0cnVjdCBidWZmZXIgKmJ1Ziwgc3RydWN0IG1vZHVsZSAqbW9kKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L0tjb25maWcgYi9zZWN1cml0eS9LY29uZmlnCmluZGV4IDVkZmMyMDYuLjQ5YjUxZjkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L0tjb25maWcKKysrIGIvc2VjdXJpdHkvS2NvbmZpZwpAQCAtMTEzLDEwICsxMTMsMTIgQEAKIAkgIGZyb20gdXNlcnNwYWNlIGFsbG9jYXRpb24uICBLZWVwaW5nIGEgdXNlciBmcm9tIHdyaXRpbmcgdG8gbG93IHBhZ2VzCiAJICBjYW4gaGVscCByZWR1Y2UgdGhlIGltcGFjdCBvZiBrZXJuZWwgTlVMTCBwb2ludGVyIGJ1Z3MuCiAKLQkgIEZvciBtb3N0IHVzZXJzIHdpdGggbG90cyBvZiBhZGRyZXNzIHNwYWNlIGEgdmFsdWUgb2YgNjU1MzYgaXMKLQkgIHJlYXNvbmFibGUgYW5kIHNob3VsZCBjYXVzZSBubyBwcm9ibGVtcy4gIFByb2dyYW1zIHdoaWNoIHVzZSB2bTg2Ci0JICBmdW5jdGlvbmFsaXR5IHdvdWxkIGVpdGhlciBuZWVkIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSBlaXRoZXIKLQkgIHRoZSBMU00gb3IgdGhlIGNhcGFiaWxpdGllcyBtb2R1bGUgb3IgaGF2ZSB0aGlzIHByb3RlY3Rpb24gZGlzYWJsZWQuCisJICBGb3IgbW9zdCBpYTY0LCBwcGM2NCBhbmQgeDg2IHVzZXJzIHdpdGggbG90cyBvZiBhZGRyZXNzIHNwYWNlCisJICBhIHZhbHVlIG9mIDY1NTM2IGlzIHJlYXNvbmFibGUgYW5kIHNob3VsZCBjYXVzZSBubyBwcm9ibGVtcy4KKwkgIE9uIGFybSBhbmQgb3RoZXIgYXJjaHMgaXQgc2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbiAzMjc2OC4KKwkgIFByb2dyYW1zIHdoaWNoIHVzZSB2bTg2IGZ1bmN0aW9uYWxpdHkgd291bGQgZWl0aGVyIG5lZWQgYWRkaXRpb25hbAorCSAgcGVybWlzc2lvbnMgZnJvbSBlaXRoZXIgdGhlIExTTSBvciB0aGUgY2FwYWJpbGl0aWVzIG1vZHVsZSBvciBoYXZlCisJICB0aGlzIHByb3RlY3Rpb24gZGlzYWJsZWQuCiAKIAkgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgYm9vdCB1c2luZyB0aGUKIAkgIC9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIHR1bmFibGUuCmRpZmYgLS1naXQgYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKaW5kZXggOWU5OWYzNmEuLjJjNmUwNmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYworKysgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKQEAgLTQwLDcgKzQwLDYgQEAKIAkuaW5vZGVfbmVlZF9raWxscHJpdiA9CQljYXBfaW5vZGVfbmVlZF9raWxscHJpdiwKIAkuaW5vZGVfa2lsbHByaXYgPQkJY2FwX2lub2RlX2tpbGxwcml2LAogCi0JLnRhc2tfa2lsbCA9CQkJY2FwX3Rhc2tfa2lsbCwKIAkudGFza19zZXRzY2hlZHVsZXIgPQkJY2FwX3Rhc2tfc2V0c2NoZWR1bGVyLAogCS50YXNrX3NldGlvcHJpbyA9CQljYXBfdGFza19zZXRpb3ByaW8sCiAJLnRhc2tfc2V0bmljZSA9CQkJY2FwX3Rhc2tfc2V0bmljZSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXggNWFiYTgyNi4uODUyOTA1NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY29tbW9uY2FwLmMKKysrIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCXJjID0gY2FwX2Zyb21fZGlzaygmdmNhcHMsIGJwcm0sIHJjKTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGNhcF9mcm9tX2Rpc2sgcmV0dXJuZWQgJWQgZm9yICVzXG4iLAotCQkJX19GVU5DVElPTl9fLCByYywgYnBybS0+ZmlsZW5hbWUpOworCQkJX19mdW5jX18sIHJjLCBicHJtLT5maWxlbmFtZSk7CiAKIG91dDoKIAlkcHV0KGRlbnRyeSk7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAlyZXQgPSBnZXRfZmlsZV9jYXBzKGJwcm0pOwogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGdldF9maWxlX2NhcHMgcmV0dXJuZWQgJWQgZm9yICVzXG4iLAotCQkJX19GVU5DVElPTl9fLCByZXQsIGJwcm0tPmZpbGVuYW1lKTsKKwkJCV9fZnVuY19fLCByZXQsIGJwcm0tPmZpbGVuYW1lKTsKIAogCS8qICBUbyBzdXBwb3J0IGluaGVyaXRhbmNlIG9mIHJvb3QtcGVybWlzc2lvbnMgYW5kIHN1aWQtcm9vdAogCSAqICBleGVjdXRhYmxlcyB1bmRlciBjb21wYXRpYmlsaXR5IG1vZGUsIHdlIHJhaXNlIGFsbCB0aHJlZQpAQCAtNTQwLDQxICs1NDAsNiBAQAogCXJldHVybiBjYXBfc2FmZV9uaWNlKHApOwogfQogCi1pbnQgY2FwX3Rhc2tfa2lsbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBzaWdpbmZvICppbmZvLAotCQkJCWludCBzaWcsIHUzMiBzZWNpZCkKLXsKLQlpZiAoaW5mbyAhPSBTRU5EX1NJR19OT0lORk8gJiYgKGlzX3NpX3NwZWNpYWwoaW5mbykgfHwgU0lfRlJPTUtFUk5FTChpbmZvKSkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBSdW5uaW5nIGEgc2V0dWlkIHJvb3QgcHJvZ3JhbSByYWlzZXMgeW91ciBjYXBhYmlsaXRpZXMuCi0JICogS2lsbGluZyB5b3VyIG93biBzZXR1aWQgcm9vdCBwcm9jZXNzZXMgd2FzIHByZXZpb3VzbHkKLQkgKiBhbGxvd2VkLgotCSAqIFdlIG11c3QgcHJlc2VydmUgbGVnYWN5IHNpZ25hbCBiZWhhdmlvciBpbiB0aGlzIGNhc2UuCi0JICovCi0JaWYgKHAtPmV1aWQgPT0gMCAmJiBwLT51aWQgPT0gY3VycmVudC0+dWlkKQotCQlyZXR1cm4gMDsKLQotCS8qIHNpZ2NvbnQgaXMgcGVybWl0dGVkIHdpdGhpbiBzYW1lIHNlc3Npb24gKi8KLQlpZiAoc2lnID09IFNJR0NPTlQgJiYgKHRhc2tfc2Vzc2lvbl9ucihjdXJyZW50KSA9PSB0YXNrX3Nlc3Npb25fbnIocCkpKQotCQlyZXR1cm4gMDsKLQotCWlmIChzZWNpZCkKLQkJLyoKLQkJICogU2lnbmFsIHNlbnQgYXMgYSBwYXJ0aWN1bGFyIHVzZXIuCi0JCSAqIENhcGFiaWxpdGllcyBhcmUgaWdub3JlZC4gIE1heSBiZSB3cm9uZywgYnV0IGl0J3MgdGhlCi0JCSAqIG9ubHkgdGhpbmcgd2UgY2FuIGRvIGF0IHRoZSBtb21lbnQuCi0JCSAqIFVzZWQgb25seSBieSB1c2IgZHJpdmVycz8KLQkJICovCi0JCXJldHVybiAwOwotCWlmIChjYXBfaXNzdWJzZXQocC0+Y2FwX3Blcm1pdHRlZCwgY3VycmVudC0+Y2FwX3Blcm1pdHRlZCkpCi0JCXJldHVybiAwOwotCWlmIChjYXBhYmxlKENBUF9LSUxMKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gLUVQRVJNOwotfQotCiAvKgogICogY2FsbGVkIGZyb20ga2VybmVsL3N5cy5jIGZvciBwcmN0bChQUl9DQUJTRVRfRFJPUCkKICAqIGRvbmUgd2l0aG91dCB0YXNrX2NhcGFiaWxpdHlfbG9jaygpIGJlY2F1c2UgaXQgaW50cm9kdWNlcwpAQCAtNjA1LDExICs1NzAsNiBAQAogewogCXJldHVybiAwOwogfQotaW50IGNhcF90YXNrX2tpbGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywKLQkJCQlpbnQgc2lnLCB1MzIgc2VjaWQpCi17Ci0JcmV0dXJuIDA7Ci19CiAjZW5kaWYKIAogdm9pZCBjYXBfdGFza19yZXBhcmVudF90b19pbml0IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9kdW1teS5jIGIvc2VjdXJpdHkvZHVtbXkuYwppbmRleCA2NDkzMjZiLi45OGQ1Zjk2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9kdW1teS5jCisrKyBiL3NlY3VyaXR5L2R1bW15LmMKQEAgLTE4MSw4ICsxODEsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBkdW1teV9zYl9jb3B5X2RhdGEgKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLAotCQkJICAgICAgIHZvaWQgKm9yaWcsIHZvaWQgKmNvcHkpCitzdGF0aWMgaW50IGR1bW15X3NiX2NvcHlfZGF0YSAoY2hhciAqb3JpZywgY2hhciAqY29weSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NSwxOSArMjQ0LDE3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGR1bW15X3NiX2dldF9tbnRfb3B0cyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICoqKm1vdW50X29wdGlvbnMsCi0JCQkJIGludCAqKmZsYWdzLCBpbnQgKm51bV9vcHRzKQorc3RhdGljIGludCBkdW1teV9zYl9nZXRfbW50X29wdHMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgc3RydWN0IHNlY3VyaXR5X21udF9vcHRzICpvcHRzKQogewotCSptb3VudF9vcHRpb25zID0gTlVMTDsKLQkqZmxhZ3MgPSBOVUxMOwotCSpudW1fb3B0cyA9IDA7CisJc2VjdXJpdHlfaW5pdF9tbnRfb3B0cyhvcHRzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV9zYl9zZXRfbW50X29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqKm1vdW50X29wdGlvbnMsCi0JCQkJIGludCAqZmxhZ3MsIGludCBudW1fb3B0cykKK3N0YXRpYyBpbnQgZHVtbXlfc2Jfc2V0X21udF9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJIHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKIHsKLQlpZiAodW5saWtlbHkobnVtX29wdHMpKQorCWlmICh1bmxpa2VseShvcHRzLT5udW1fbW50X29wdHMpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjgsNiArMjY1LDExIEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IGR1bW15X3NiX3BhcnNlX29wdHNfc3RyKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkdW1teV9pbm9kZV9hbGxvY19zZWN1cml0eSAoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTQyMiw2ICs0MjQsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZHVtbXlfaW5vZGVfZ2V0c2VjaWQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpzZWNpZCkKK3sKKwkqc2VjaWQgPSAwOworfQorCiBzdGF0aWMgaW50IGR1bW15X2ZpbGVfcGVybWlzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewogCXJldHVybiAwOwpAQCAtNTQwLDcgKzU0Nyw5IEBACiB9CiAKIHN0YXRpYyB2b2lkIGR1bW15X3Rhc2tfZ2V0c2VjaWQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTMyICpzZWNpZCkKLXsgfQoreworCSpzZWNpZCA9IDA7Cit9CiAKIHN0YXRpYyBpbnQgZHVtbXlfdGFza19zZXRncm91cHMgKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKQogewpAQCAtNjE0LDYgKzYyMywxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBkdW1teV9pcGNfZ2V0c2VjaWQoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHUzMiAqc2VjaWQpCit7CisJKnNlY2lkID0gMDsKK30KKwogc3RhdGljIGludCBkdW1teV9tc2dfbXNnX2FsbG9jX3NlY3VyaXR5IChzdHJ1Y3QgbXNnX21zZyAqbXNnKQogewogCXJldHVybiAwOwpAQCAtODc0LDIyICs4ODgsMjMgQEAKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQotc3RhdGljIGludCBkdW1teV94ZnJtX3BvbGljeV9hbGxvY19zZWN1cml0eShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLAotCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCitzdGF0aWMgaW50IGR1bW15X3hmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3NlY19jdHggKipjdHhwLAorCQkJCQkgICAgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkdW1teV94ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eShzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgc3RydWN0IHhmcm1fcG9saWN5ICpuZXcpCitzdGF0aWMgaW5saW5lIGludCBkdW1teV94ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eShzdHJ1Y3QgeGZybV9zZWNfY3R4ICpvbGRfY3R4LAorCQkJCQkgICBzdHJ1Y3QgeGZybV9zZWNfY3R4ICoqbmV3X2N0eHApCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bW15X3hmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKK3N0YXRpYyB2b2lkIGR1bW15X3hmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4KQogewogfQogCi1zdGF0aWMgaW50IGR1bW15X3hmcm1fcG9saWN5X2RlbGV0ZV9zZWN1cml0eShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQorc3RhdGljIGludCBkdW1teV94ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHkoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4KQogewogCXJldHVybiAwOwogfQpAQCAtOTA5LDcgKzkyNCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHUzMiBza19zaWQsIHU4IGRpcikKK3N0YXRpYyBpbnQgZHVtbXlfeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCwKKwkJCQkgICAgdTMyIHNrX3NpZCwgdTggZGlyKQogewogCXJldHVybiAwOwogfQpAQCAtOTc5LDcgKzk5NSwzMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19LRVlTICovCiAKLXN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIGR1bW15X3NlY3VyaXR5X29wczsKKyNpZmRlZiBDT05GSUdfQVVESVQKK3N0YXRpYyBpbmxpbmUgaW50IGR1bW15X2F1ZGl0X3J1bGVfaW5pdCh1MzIgZmllbGQsIHUzMiBvcCwgY2hhciAqcnVsZXN0ciwKKwkJCQkJdm9pZCAqKmxzbXJ1bGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGR1bW15X2F1ZGl0X3J1bGVfa25vd24oc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHVtbXlfYXVkaXRfcnVsZV9tYXRjaCh1MzIgc2VjaWQsIHUzMiBmaWVsZCwgdTMyIG9wLAorCQkJCQkgdm9pZCAqbHNtcnVsZSwKKwkJCQkJIHN0cnVjdCBhdWRpdF9jb250ZXh0ICphY3R4KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtbXlfYXVkaXRfcnVsZV9mcmVlKHZvaWQgKmxzbXJ1bGUpCit7IH0KKworI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLworCitzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyBkdW1teV9zZWN1cml0eV9vcHMgPSB7CisJLm5hbWUgPSAiZHVtbXkiLAorfTsKIAogI2RlZmluZSBzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIGZ1bmN0aW9uKQkJCQlcCiAJZG8gewkJCQkJCQkJXApAQCAtMTAyOCw2ICsxMDcwLDcgQEAKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHNiX2dldF9tbnRfb3B0cyk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBzYl9zZXRfbW50X29wdHMpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc2JfY2xvbmVfbW50X29wdHMpOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc2JfcGFyc2Vfb3B0c19zdHIpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgaW5vZGVfYWxsb2Nfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgaW5vZGVfZnJlZV9zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpbm9kZV9pbml0X3NlY3VyaXR5KTsKQEAgLTEwNTUsNiArMTA5OCw3IEBACiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpbm9kZV9nZXRzZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpbm9kZV9zZXRzZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpbm9kZV9saXN0c2VjdXJpdHkpOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgaW5vZGVfZ2V0c2VjaWQpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgZmlsZV9wZXJtaXNzaW9uKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIGZpbGVfYWxsb2Nfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgZmlsZV9mcmVlX3NlY3VyaXR5KTsKQEAgLTEwOTEsNiArMTEzNSw3IEBACiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB0YXNrX3JlcGFyZW50X3RvX2luaXQpOwogIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfdG9faW5vZGUpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgaXBjX3Blcm1pc3Npb24pOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgaXBjX2dldHNlY2lkKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIG1zZ19tc2dfYWxsb2Nfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgbXNnX21zZ19mcmVlX3NlY3VyaXR5KTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIG1zZ19xdWV1ZV9hbGxvY19zZWN1cml0eSk7CkBAIC0xMTY1LDYgKzEyMTAsMTEgQEAKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIGtleV9mcmVlKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIGtleV9wZXJtaXNzaW9uKTsKICNlbmRpZgkvKiBDT05GSUdfS0VZUyAqLwotCisjaWZkZWYgQ09ORklHX0FVRElUCisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBhdWRpdF9ydWxlX2luaXQpOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgYXVkaXRfcnVsZV9rbm93bik7CisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBhdWRpdF9ydWxlX21hdGNoKTsKKwlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIGF1ZGl0X3J1bGVfZnJlZSk7CisjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oIGIvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCmluZGV4IGQzNmQ2OTMuLjdkODk0ZWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaAorKysgYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKQEAgLTIyLDE2ICsyMiwxNiBAQAogCiAjaWZkZWYgX19LREVCVUcKICNkZWZpbmUga2VudGVyKEZNVCwgLi4uKSBcCi0JcHJpbnRrKEtFUk5fREVCVUcgIj09PiAlcygiRk1UIilcbiIsIF9fRlVOQ1RJT05fXywgIyNfX1ZBX0FSR1NfXykKKwlwcmludGsoS0VSTl9ERUJVRyAiPT0+ICVzKCJGTVQiKVxuIiwgX19mdW5jX18sICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIGtsZWF2ZShGTVQsIC4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHICI8PT0gJXMoKSJGTVQiXG4iLCBfX0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18pCisJcHJpbnRrKEtFUk5fREVCVUcgIjw9PSAlcygpIkZNVCJcbiIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBrZGVidWcoRk1ULCAuLi4pIFwKIAlwcmludGsoS0VSTl9ERUJVRyAieHh4IiBGTVQieXl5XG4iLCAjI19fVkFfQVJHU19fKQogI2Vsc2UKICNkZWZpbmUga2VudGVyKEZNVCwgLi4uKSBcCi0Jbm9fcHJpbnRrKEtFUk5fREVCVUcgIj09PiAlcygiRk1UIilcbiIsIF9fRlVOQ1RJT05fXywgIyNfX1ZBX0FSR1NfXykKKwlub19wcmludGsoS0VSTl9ERUJVRyAiPT0+ICVzKCJGTVQiKVxuIiwgX19mdW5jX18sICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIGtsZWF2ZShGTVQsIC4uLikgXAotCW5vX3ByaW50ayhLRVJOX0RFQlVHICI8PT0gJXMoKSJGTVQiXG4iLCBfX0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18pCisJbm9fcHJpbnRrKEtFUk5fREVCVUcgIjw9PSAlcygpIkZNVCJcbiIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBrZGVidWcoRk1ULCAuLi4pIFwKIAlub19wcmludGsoS0VSTl9ERUJVRyBGTVQiXG4iLCAjI19fVkFfQVJHU19fKQogI2VuZGlmCmRpZmYgLS1naXQgYS9zZWN1cml0eS9yb290X3BsdWcuYyBiL3NlY3VyaXR5L3Jvb3RfcGx1Zy5jCmluZGV4IDg3MGYxMzAuLjYxMTJkMTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3Jvb3RfcGx1Zy5jCisrKyBiL3NlY3VyaXR5L3Jvb3RfcGx1Zy5jCkBAIC00OSw3ICs0OSw3IEBACiAJZG8gewkJCQkJCQlcCiAJCWlmIChkZWJ1ZykJCQkJCVwKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXM6ICIgZm10ICwJXAotCQkJCU1ZX05BTUUgLCBfX0ZVTkNUSU9OX18gLCAJXAorCQkJCU1ZX05BTUUgLCBfX2Z1bmNfXyAsIAlcCiAJCQkJIyMgYXJnKTsJCQlcCiAJfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggZDE1ZTU2Yy4uMmUyNTBjNzAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKKy8qIEJvb3QtdGltZSBMU00gdXNlciBjaG9pY2UgKi8KK3N0YXRpYyBfX2luaXRkYXRhIGNoYXIgY2hvc2VuX2xzbVtTRUNVUklUWV9OQU1FX01BWCArIDFdOwogCiAvKiB0aGluZ3MgdGhhdCBsaXZlIGluIGR1bW15LmMgKi8KIGV4dGVybiBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyBkdW1teV9zZWN1cml0eV9vcHM7CkBAIC01Nyw3ICs1OSw3IEBACiAKIAlpZiAodmVyaWZ5KCZkdW1teV9zZWN1cml0eV9vcHMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgY291bGQgbm90IHZlcmlmeSAiCi0JCSAgICAgICAiZHVtbXlfc2VjdXJpdHlfb3BzIHN0cnVjdHVyZS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICAiZHVtbXlfc2VjdXJpdHlfb3BzIHN0cnVjdHVyZS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02NywxMyArNjksNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogU2F2ZSB1c2VyIGNob3NlbiBMU00gKi8KK3N0YXRpYyBpbnQgX19pbml0IGNob29zZV9sc20oY2hhciAqc3RyKQoreworCXN0cm5jcHkoY2hvc2VuX2xzbSwgc3RyLCBTRUNVUklUWV9OQU1FX01BWCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJzZWN1cml0eT0iLCBjaG9vc2VfbHNtKTsKKworLyoqCisgKiBzZWN1cml0eV9tb2R1bGVfZW5hYmxlIC0gTG9hZCBnaXZlbiBzZWN1cml0eSBtb2R1bGUgb24gYm9vdCA/CisgKiBAb3BzOiBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIHRoYXQgaXMgdG8gYmUgY2hlY2tlZC4KKyAqCisgKiBFYWNoIExTTSBtdXN0IHBhc3MgdGhpcyBtZXRob2QgYmVmb3JlIHJlZ2lzdGVyaW5nIGl0cyBvd24gb3BlcmF0aW9ucworICogdG8gYXZvaWQgc2VjdXJpdHkgcmVnaXN0cmF0aW9uIHJhY2VzLiBUaGlzIG1ldGhvZCBtYXkgYWxzbyBiZSB1c2VkCisgKiB0byBjaGVjayBpZiB5b3VyIExTTSBpcyBjdXJyZW50bHkgbG9hZGVkIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24uCisgKgorICogUmV0dXJuIHRydWUgaWY6CisgKgktVGhlIHBhc3NlZCBMU00gaXMgdGhlIG9uZSBjaG9zZW4gYnkgdXNlciBhdCBib290IHRpbWUsCisgKgktb3IgdXNlciBkaWRzbid0IHNwZWNpZnkgYSBzcGVjaWZpYyBMU00gYW5kIHdlJ3JlIHRoZSBmaXJzdCB0byBhc2sKKyAqCSBmb3IgcmVnaXN0ZXJhdGlvbiBwZXJtaXNzb2luLAorICoJLW9yIHRoZSBwYXNzZWQgTFNNIGlzIGN1cnJlbnRseSBsb2FkZWQuCisgKiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KKyAqLworaW50IF9faW5pdCBzZWN1cml0eV9tb2R1bGVfZW5hYmxlKHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpCit7CisJaWYgKCEqY2hvc2VuX2xzbSkKKwkJc3RybmNweShjaG9zZW5fbHNtLCBvcHMtPm5hbWUsIFNFQ1VSSVRZX05BTUVfTUFYKTsKKwllbHNlIGlmIChzdHJuY21wKG9wcy0+bmFtZSwgY2hvc2VuX2xzbSwgU0VDVVJJVFlfTkFNRV9NQVgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiAvKioKICAqIHJlZ2lzdGVyX3NlY3VyaXR5IC0gcmVnaXN0ZXJzIGEgc2VjdXJpdHkgZnJhbWV3b3JrIHdpdGggdGhlIGtlcm5lbAogICogQG9wczogYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgc2VjdXJpdHlfb3B0aW9ucyB0aGF0IGlzIHRvIGJlIHJlZ2lzdGVyZWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGFsbG93IGEgc2VjdXJpdHkgbW9kdWxlIHRvIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZQogICoga2VybmVsIHNlY3VyaXR5IHN1YnN5c3RlbS4gIFNvbWUgcnVkaW1lbnRhcnkgY2hlY2tpbmcgaXMgZG9uZSBvbiB0aGUgQG9wcwotICogdmFsdWUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24uCisgKiB2YWx1ZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi4gWW91J2xsIG5lZWQgdG8gY2hlY2sgZmlyc3QgaWYgeW91ciBMU00KKyAqIGlzIGFsbG93ZWQgdG8gcmVnaXN0ZXIgaXRzIEBvcHMgYnkgY2FsbGluZyBzZWN1cml0eV9tb2R1bGVfZW5hYmxlKEBvcHMpLgogICoKICAqIElmIHRoZXJlIGlzIGFscmVhZHkgYSBzZWN1cml0eSBtb2R1bGUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwsCiAgKiBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLiAgT3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQgb24gc3VjY2Vzcy4KQEAgLTgyLDcgKzExOCw3IEBACiB7CiAJaWYgKHZlcmlmeShvcHMpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyBjb3VsZCBub3QgdmVyaWZ5ICIKLQkJICAgICAgICJzZWN1cml0eV9vcGVyYXRpb25zIHN0cnVjdHVyZS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICAic2VjdXJpdHlfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTEwLDEzICsxNDYsMTMgQEAKIHsKIAlpZiAodmVyaWZ5KG9wcykpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgY291bGQgbm90IHZlcmlmeSAiCi0JCSAgICAgICAic2VjdXJpdHkgb3BlcmF0aW9ucy5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCSAgICAgICAic2VjdXJpdHkgb3BlcmF0aW9ucy5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKG9wcyA9PSBzZWN1cml0eV9vcHMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgc2VjdXJpdHkgb3BlcmF0aW9ucyAiCi0JCSAgICAgICAiYWxyZWFkeSByZWdpc3RlcmVkLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJICAgICAgICJhbHJlYWR5IHJlZ2lzdGVyZWQuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjQ0LDEwICsyODAsMTEgQEAKIAlzZWN1cml0eV9vcHMtPnNiX2ZyZWVfc2VjdXJpdHkoc2IpOwogfQogCi1pbnQgc2VjdXJpdHlfc2JfY29weV9kYXRhKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCB2b2lkICpvcmlnLCB2b2lkICpjb3B5KQoraW50IHNlY3VyaXR5X3NiX2NvcHlfZGF0YShjaGFyICpvcmlnLCBjaGFyICpjb3B5KQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPnNiX2NvcHlfZGF0YSh0eXBlLCBvcmlnLCBjb3B5KTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zYl9jb3B5X2RhdGEob3JpZywgY29weSk7CiB9CitFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X3NiX2NvcHlfZGF0YSk7CiAKIGludCBzZWN1cml0eV9zYl9rZXJuX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCiB7CkBAIC0zMDYsMjQgKzM0MywzMCBAQAogfQogCiBpbnQgc2VjdXJpdHlfc2JfZ2V0X21udF9vcHRzKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkgICAgICBjaGFyICoqKm1vdW50X29wdGlvbnMsCi0JCQkgICAgICBpbnQgKipmbGFncywgaW50ICpudW1fb3B0cykKKwkJCQlzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpCiB7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+c2JfZ2V0X21udF9vcHRzKHNiLCBtb3VudF9vcHRpb25zLCBmbGFncywgbnVtX29wdHMpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnNiX2dldF9tbnRfb3B0cyhzYiwgb3B0cyk7CiB9CiAKIGludCBzZWN1cml0eV9zYl9zZXRfbW50X29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCSAgICAgIGNoYXIgKiptb3VudF9vcHRpb25zLAotCQkJICAgICAgaW50ICpmbGFncywgaW50IG51bV9vcHRzKQorCQkJCXN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zYl9zZXRfbW50X29wdHMoc2IsIG1vdW50X29wdGlvbnMsIGZsYWdzLCBudW1fb3B0cyk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2Jfc2V0X21udF9vcHRzKHNiLCBvcHRzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2VjdXJpdHlfc2Jfc2V0X21udF9vcHRzKTsKIAogdm9pZCBzZWN1cml0eV9zYl9jbG9uZV9tbnRfb3B0cyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9sZHNiLAogCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqbmV3c2IpCiB7CiAJc2VjdXJpdHlfb3BzLT5zYl9jbG9uZV9tbnRfb3B0cyhvbGRzYiwgbmV3c2IpOwogfQorRVhQT1JUX1NZTUJPTChzZWN1cml0eV9zYl9jbG9uZV9tbnRfb3B0cyk7CisKK2ludCBzZWN1cml0eV9zYl9wYXJzZV9vcHRzX3N0cihjaGFyICpvcHRpb25zLCBzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c2JfcGFyc2Vfb3B0c19zdHIob3B0aW9ucywgb3B0cyk7Cit9CitFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X3NiX3BhcnNlX29wdHNfc3RyKTsKIAogaW50IHNlY3VyaXR5X2lub2RlX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC01MTYsNiArNTU5LDExIEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfbGlzdHNlY3VyaXR5KGlub2RlLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIH0KIAordm9pZCBzZWN1cml0eV9pbm9kZV9nZXRzZWNpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNlY2lkKQoreworCXNlY3VyaXR5X29wcy0+aW5vZGVfZ2V0c2VjaWQoaW5vZGUsIHNlY2lkKTsKK30KKwogaW50IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+ZmlsZV9wZXJtaXNzaW9uKGZpbGUsIG1hc2spOwpAQCAtNzA1LDYgKzc1MywxMSBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPmlwY19wZXJtaXNzaW9uKGlwY3AsIGZsYWcpOwogfQogCit2b2lkIHNlY3VyaXR5X2lwY19nZXRzZWNpZChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgdTMyICpzZWNpZCkKK3sKKwlzZWN1cml0eV9vcHMtPmlwY19nZXRzZWNpZChpcGNwLCBzZWNpZCk7Cit9CisKIGludCBzZWN1cml0eV9tc2dfbXNnX2FsbG9jKHN0cnVjdCBtc2dfbXNnICptc2cpCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+bXNnX21zZ19hbGxvY19zZWN1cml0eShtc2cpOwpAQCAtMTAwNywyNiArMTA2MCwyNyBAQAogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQogCi1pbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2Moc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KQoraW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3NlY19jdHggKipjdHhwLCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCiB7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9wb2xpY3lfYWxsb2Nfc2VjdXJpdHkoeHAsIHNlY19jdHgpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KGN0eHAsIHNlY19jdHgpOwogfQogRVhQT1JUX1NZTUJPTChzZWN1cml0eV94ZnJtX3BvbGljeV9hbGxvYyk7CiAKLWludCBzZWN1cml0eV94ZnJtX3BvbGljeV9jbG9uZShzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgc3RydWN0IHhmcm1fcG9saWN5ICpuZXcpCitpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfY2xvbmUoc3RydWN0IHhmcm1fc2VjX2N0eCAqb2xkX2N0eCwKKwkJCSAgICAgIHN0cnVjdCB4ZnJtX3NlY19jdHggKipuZXdfY3R4cCkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT54ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eShvbGQsIG5ldyk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9wb2xpY3lfY2xvbmVfc2VjdXJpdHkob2xkX2N0eCwgbmV3X2N0eHApOwogfQogCi12b2lkIHNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKK3ZvaWQgc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgpCiB7Ci0Jc2VjdXJpdHlfb3BzLT54ZnJtX3BvbGljeV9mcmVlX3NlY3VyaXR5KHhwKTsKKwlzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkoY3R4KTsKIH0KIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZSk7CiAKLWludCBzZWN1cml0eV94ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKK2ludCBzZWN1cml0eV94ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4KQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2RlbGV0ZV9zZWN1cml0eSh4cCk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9wb2xpY3lfZGVsZXRlX3NlY3VyaXR5KGN0eCk7CiB9CiAKIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCkBAIC0xMDU4LDkgKzExMTIsOSBAQAogCXNlY3VyaXR5X29wcy0+eGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5KHgpOwogfQogCi1pbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHUzMiBmbF9zZWNpZCwgdTggZGlyKQoraW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgsIHUzMiBmbF9zZWNpZCwgdTggZGlyKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2xvb2t1cCh4cCwgZmxfc2VjaWQsIGRpcik7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9wb2xpY3lfbG9va3VwKGN0eCwgZmxfc2VjaWQsIGRpcik7CiB9CiAKIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX3BvbF9mbG93X21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LApAQCAtMTEwMywzICsxMTU3LDI4IEBACiB9CiAKICNlbmRpZgkvKiBDT05GSUdfS0VZUyAqLworCisjaWZkZWYgQ09ORklHX0FVRElUCisKK2ludCBzZWN1cml0eV9hdWRpdF9ydWxlX2luaXQodTMyIGZpZWxkLCB1MzIgb3AsIGNoYXIgKnJ1bGVzdHIsIHZvaWQgKipsc21ydWxlKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmF1ZGl0X3J1bGVfaW5pdChmaWVsZCwgb3AsIHJ1bGVzdHIsIGxzbXJ1bGUpOworfQorCitpbnQgc2VjdXJpdHlfYXVkaXRfcnVsZV9rbm93bihzdHJ1Y3QgYXVkaXRfa3J1bGUgKmtydWxlKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmF1ZGl0X3J1bGVfa25vd24oa3J1bGUpOworfQorCit2b2lkIHNlY3VyaXR5X2F1ZGl0X3J1bGVfZnJlZSh2b2lkICpsc21ydWxlKQoreworCXNlY3VyaXR5X29wcy0+YXVkaXRfcnVsZV9mcmVlKGxzbXJ1bGUpOworfQorCitpbnQgc2VjdXJpdHlfYXVkaXRfcnVsZV9tYXRjaCh1MzIgc2VjaWQsIHUzMiBmaWVsZCwgdTMyIG9wLCB2b2lkICpsc21ydWxlLAorCQkJICAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmFjdHgpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+YXVkaXRfcnVsZV9tYXRjaChzZWNpZCwgZmllbGQsIG9wLCBsc21ydWxlLCBhY3R4KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnIGIvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCmluZGV4IDJiNTE3ZDYuLmE0MzZkMWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvS2NvbmZpZworKysgYi9zZWN1cml0eS9zZWxpbnV4L0tjb25maWcKQEAgLTE0NSw3ICsxNDUsNyBAQAogY29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfUE9MSUNZREJfVkVSU0lPTl9NQVhfVkFMVUUKIAlpbnQgIk5TQSBTRUxpbnV4IG1heGltdW0gc3VwcG9ydGVkIHBvbGljeSBmb3JtYXQgdmVyc2lvbiB2YWx1ZSIKIAlkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhfUE9MSUNZREJfVkVSU0lPTl9NQVgKLQlyYW5nZSAxNSAyMgorCXJhbmdlIDE1IDIzCiAJZGVmYXVsdCAxOQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHNldHMgdGhlIHZhbHVlIGZvciB0aGUgbWF4aW11bSBwb2xpY3kgZm9ybWF0IHZlcnNpb24KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUgYi9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlCmluZGV4IDAwYWZkODUuLmQ0N2ZjNWUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogCSAgICAgbmxtc2d0YWIubyBcCiAJICAgICBuZXRpZi5vIFwKIAkgICAgIG5ldG5vZGUubyBcCisJICAgICBuZXRwb3J0Lm8gXAogCSAgICAgZXhwb3J0cy5vCiAKIHNlbGludXgtJChDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNKSArPSB4ZnJtLm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCmluZGV4IDE4Nzk2NGUuLjFkNjlmNjYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwpAQCAtMiwxNiArMiwxNiBAQAogICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGtlcm5lbCBhY2Nlc3MgdmVjdG9yIGNhY2hlIChBVkMpLgogICoKICAqIEF1dGhvcnM6ICBTdGVwaGVuIFNtYWxsZXksIDxzZHNAZXBvY2gubmNzYy5taWw+Ci0gKiAgICAgICAgICAgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CisgKgkgICAgIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgogICoKICAqIFVwZGF0ZTogICBLYWlHYWksIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KLSAqICAgICBSZXBsYWNlZCB0aGUgYXZjX2xvY2sgc3BpbmxvY2sgYnkgUkNVLgorICoJUmVwbGFjZWQgdGhlIGF2Y19sb2NrIHNwaW5sb2NrIGJ5IFJDVS4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KQEAgLTQ0LDcgKzQ0LDcgQEAKICN1bmRlZiBTXwogfTsKIAotI2RlZmluZSBUQl8ocykgc3RhdGljIGNvbnN0IGNoYXIgKiBzIFtdID0geworI2RlZmluZSBUQl8ocykgc3RhdGljIGNvbnN0IGNoYXIgKnNbXSA9IHsKICNkZWZpbmUgVEVfKHMpIH07CiAjZGVmaW5lIFNfKHMpIHMsCiAjaW5jbHVkZSAiY29tbW9uX3Blcm1fdG9fc3RyaW5nLmgiCkBAIC03Miw3ICs3Miw3IEBACiAjZGVmaW5lIEFWQ19DQUNIRV9SRUNMQUlNCQkxNgogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTCi0jZGVmaW5lIGF2Y19jYWNoZV9zdGF0c19pbmNyKGZpZWxkKSAJCQkJXAorI2RlZmluZSBhdmNfY2FjaGVfc3RhdHNfaW5jcihmaWVsZCkJCQkJXAogZG8gewkJCQkJCQkJXAogCXBlcl9jcHUoYXZjX2NhY2hlX3N0YXRzLCBnZXRfY3B1KCkpLmZpZWxkKys7CQlcCiAJcHV0X2NwdSgpOwkJCQkJCVwKQEAgLTkyLDcgKzkyLDcgQEAKIHN0cnVjdCBhdmNfbm9kZSB7CiAJc3RydWN0IGF2Y19lbnRyeQlhZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jc3RydWN0IHJjdV9oZWFkICAgICAgICAgcmhlYWQ7CisJc3RydWN0IHJjdV9oZWFkCQlyaGVhZDsKIH07CiAKIHN0cnVjdCBhdmNfY2FjaGUgewpAQCAtMTA1LDggKzEwNSw4IEBACiAKIHN0cnVjdCBhdmNfY2FsbGJhY2tfbm9kZSB7CiAJaW50ICgqY2FsbGJhY2spICh1MzIgZXZlbnQsIHUzMiBzc2lkLCB1MzIgdHNpZCwKLQkgICAgICAgICAgICAgICAgIHUxNiB0Y2xhc3MsIHUzMiBwZXJtcywKLQkgICAgICAgICAgICAgICAgIHUzMiAqb3V0X3JldGFpbmVkKTsKKwkJCSB1MTYgdGNsYXNzLCB1MzIgcGVybXMsCisJCQkgdTMyICpvdXRfcmV0YWluZWQpOwogCXUzMiBldmVudHM7CiAJdTMyIHNzaWQ7CiAJdTMyIHRzaWQ7CkBAIC0yMDIsNyArMjAyLDcgQEAKIAljaGFyICpzY29udGV4dDsKIAl1MzIgc2NvbnRleHRfbGVuOwogCi0gCXJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHQoc3NpZCwgJnNjb250ZXh0LCAmc2NvbnRleHRfbGVuKTsKKwlyYyA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0KHNzaWQsICZzY29udGV4dCwgJnNjb250ZXh0X2xlbik7CiAJaWYgKHJjKQogCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAic3NpZD0lZCIsIHNzaWQpOwogCWVsc2UgewpAQCAtMzA2LDcgKzMwNiw3IEBACiAJaW50IGh2YWx1ZSwgdHJ5LCBlY3g7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWZvciAodHJ5ID0gMCwgZWN4ID0gMDsgdHJ5IDwgQVZDX0NBQ0hFX1NMT1RTOyB0cnkrKyApIHsKKwlmb3IgKHRyeSA9IDAsIGVjeCA9IDA7IHRyeSA8IEFWQ19DQUNIRV9TTE9UUzsgdHJ5KyspIHsKIAkJaHZhbHVlID0gYXRvbWljX2luY19yZXR1cm4oJmF2Y19jYWNoZS5scnVfaGludCkgJiAoQVZDX0NBQ0hFX1NMT1RTIC0gMSk7CiAKIAkJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZ3MpKQpAQCAtNDI2LDcgKzQyNiw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5vdGlmX2xvY2ssIGZsYWcpOwogCWlmIChpc19pbnNlcnQpIHsKIAkJaWYgKHNlcW5vIDwgYXZjX2NhY2hlLmxhdGVzdF9ub3RpZikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXZjOiAgc2Vxbm8gJWQgPCBsYXRlc3Rfbm90aWYgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiBhdmM6ICBzZXFubyAlZCA8IGxhdGVzdF9ub3RpZiAlZFxuIiwKIAkJCSAgICAgICBzZXFubywgYXZjX2NhY2hlLmxhdGVzdF9ub3RpZik7CiAJCQlyZXQgPSAtRUFHQUlOOwogCQl9CkBAIC00NzUsNyArNDc1LDcgQEAKIAkJCWlmIChwb3MtPmFlLnNzaWQgPT0gc3NpZCAmJgogCQkJICAgIHBvcy0+YWUudHNpZCA9PSB0c2lkICYmCiAJCQkgICAgcG9zLT5hZS50Y2xhc3MgPT0gdGNsYXNzKSB7Ci0JCQkgICAgCWF2Y19ub2RlX3JlcGxhY2Uobm9kZSwgcG9zKTsKKwkJCQlhdmNfbm9kZV9yZXBsYWNlKG5vZGUsIHBvcyk7CiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJfQpAQCAtNTI2LDggKzUyNiw4IEBACiAgKiBiZWZvcmUgY2FsbGluZyB0aGUgYXVkaXRpbmcgY29kZS4KICAqLwogdm9pZCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAotICAgICAgICAgICAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKLSAgICAgICAgICAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkLCBpbnQgcmVzdWx0LCBzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmEpCisJICAgICAgIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsCisJICAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkLCBpbnQgcmVzdWx0LCBzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmEpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwpAQCAtNTQxLDcgKzU0MSw3IEBACiAJCQlyZXR1cm47CiAJfSBlbHNlIGlmIChyZXN1bHQpIHsKIAkJYXVkaXRlZCA9IGRlbmllZCA9IHJlcXVlc3RlZDsKLSAgICAgICAgfSBlbHNlIHsKKwl9IGVsc2UgewogCQlhdWRpdGVkID0gcmVxdWVzdGVkOwogCQlpZiAoIShhdWRpdGVkICYgYXZkLT5hdWRpdGFsbG93KSkKIAkJCXJldHVybjsKQEAgLTU1MSw3ICs1NTEsNyBAQAogCWlmICghYWIpCiAJCXJldHVybjsJCS8qIGF1ZGl0X3BhbmljIGhhcyBiZWVuIGNhbGxlZCAqLwogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhdmM6ICAlcyAiLCBkZW5pZWQgPyAiZGVuaWVkIiA6ICJncmFudGVkIik7Ci0JYXZjX2R1bXBfYXYoYWIsIHRjbGFzcyxhdWRpdGVkKTsKKwlhdmNfZHVtcF9hdihhYiwgdGNsYXNzLCBhdWRpdGVkKTsKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGZvciAiKTsKIAlpZiAoYSAmJiBhLT50c2spCiAJCXRzayA9IGEtPnRzazsKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQkKKwogCQkJc3dpdGNoIChhLT51Lm5ldC5mYW1pbHkpIHsKIAkJCWNhc2UgQUZfSU5FVDoKIAkJCQlhdmNfcHJpbnRfaXB2NF9hZGRyKGFiLCBhLT51Lm5ldC52NGluZm8uc2FkZHIsCkBAIC03MDIsMTAgKzcwMiwxMCBAQAogICogLSVFTk9NRU0gaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBleGlzdHMgdG8gYWRkIHRoZSBjYWxsYmFjay4KICAqLwogaW50IGF2Y19hZGRfY2FsbGJhY2soaW50ICgqY2FsbGJhY2spKHUzMiBldmVudCwgdTMyIHNzaWQsIHUzMiB0c2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB0Y2xhc3MsIHUzMiBwZXJtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKm91dF9yZXRhaW5lZCksCi0gICAgICAgICAgICAgICAgICAgICB1MzIgZXZlbnRzLCB1MzIgc3NpZCwgdTMyIHRzaWQsCi0gICAgICAgICAgICAgICAgICAgICB1MTYgdGNsYXNzLCB1MzIgcGVybXMpCisJCQkJICAgICB1MTYgdGNsYXNzLCB1MzIgcGVybXMsCisJCQkJICAgICB1MzIgKm91dF9yZXRhaW5lZCksCisJCSAgICAgdTMyIGV2ZW50cywgdTMyIHNzaWQsIHUzMiB0c2lkLAorCQkgICAgIHUxNiB0Y2xhc3MsIHUzMiBwZXJtcykKIHsKIAlzdHJ1Y3QgYXZjX2NhbGxiYWNrX25vZGUgKmM7CiAJaW50IHJjID0gMDsKQEAgLTc1OSwxMCArNzU5LDEwIEBACiAJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmF2Y19jYWNoZS5zbG90c1todmFsdWVdLCBsaXN0KXsKLQkJaWYgKCBzc2lkPT1wb3MtPmFlLnNzaWQgJiYKLQkJICAgICB0c2lkPT1wb3MtPmFlLnRzaWQgJiYKLQkJICAgICB0Y2xhc3M9PXBvcy0+YWUudGNsYXNzICl7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgeworCQlpZiAoc3NpZCA9PSBwb3MtPmFlLnNzaWQgJiYKKwkJICAgIHRzaWQgPT0gcG9zLT5hZS50c2lkICYmCisJCSAgICB0Y2xhc3MgPT0gcG9zLT5hZS50Y2xhc3MpewogCQkJb3JpZyA9IHBvczsKIAkJCWJyZWFrOwogCQl9CkBAIC04MjksNyArODI5LDcgQEAKIAlmb3IgKGMgPSBhdmNfY2FsbGJhY2tzOyBjOyBjID0gYy0+bmV4dCkgewogCQlpZiAoYy0+ZXZlbnRzICYgQVZDX0NBTExCQUNLX1JFU0VUKSB7CiAJCQl0bXByYyA9IGMtPmNhbGxiYWNrKEFWQ19DQUxMQkFDS19SRVNFVCwKLQkJCSAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgTlVMTCk7CisJCQkJCSAgICAwLCAwLCAwLCAwLCBOVUxMKTsKIAkJCS8qIHNhdmUgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkIGZvciB0aGUgcmV0dXJuCiAJCQkgICB2YWx1ZSBhbmQgY29udGludWUgcHJvY2Vzc2luZyB0aGUgY2FsbGJhY2tzICovCiAJCQlpZiAoIXJjKQpAQCAtODcxLDE2ICs4NzEsMTggQEAKIAlpbnQgcmMgPSAwOwogCXUzMiBkZW5pZWQ7CiAKKwlCVUdfT04oIXJlcXVlc3RlZCk7CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCk7CiAJaWYgKCFub2RlKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlyYyA9IHNlY3VyaXR5X2NvbXB1dGVfYXYoc3NpZCx0c2lkLHRjbGFzcyxyZXF1ZXN0ZWQsJmVudHJ5LmF2ZCk7CisJCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgJmVudHJ5LmF2ZCk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCW5vZGUgPSBhdmNfaW5zZXJ0KHNzaWQsdHNpZCx0Y2xhc3MsJmVudHJ5KTsKKwkJbm9kZSA9IGF2Y19pbnNlcnQoc3NpZCwgdHNpZCwgdGNsYXNzLCAmZW50cnkpOwogCX0KIAogCXBfYWUgPSBub2RlID8gJm5vZGUtPmFlIDogJmVudHJ5OwpAQCAtODkwLDEzICs4OTIsMTQgQEAKIAogCWRlbmllZCA9IHJlcXVlc3RlZCAmIH4ocF9hZS0+YXZkLmFsbG93ZWQpOwogCi0JaWYgKCFyZXF1ZXN0ZWQgfHwgZGVuaWVkKSB7Ci0JCWlmIChzZWxpbnV4X2VuZm9yY2luZyB8fCAoZmxhZ3MgJiBBVkNfU1RSSUNUKSkKKwlpZiAoZGVuaWVkKSB7CisJCWlmIChmbGFncyAmIEFWQ19TVFJJQ1QpCiAJCQlyYyA9IC1FQUNDRVM7CisJCWVsc2UgaWYgKCFzZWxpbnV4X2VuZm9yY2luZyB8fCBzZWN1cml0eV9wZXJtaXNzaXZlX3NpZChzc2lkKSkKKwkJCWF2Y191cGRhdGVfbm9kZShBVkNfQ0FMTEJBQ0tfR1JBTlQsIHJlcXVlc3RlZCwgc3NpZCwKKwkJCQkJdHNpZCwgdGNsYXNzKTsKIAkJZWxzZQotCQkJaWYgKG5vZGUpCi0JCQkJYXZjX3VwZGF0ZV9ub2RlKEFWQ19DQUxMQkFDS19HUkFOVCxyZXF1ZXN0ZWQsCi0JCQkJCQlzc2lkLHRzaWQsdGNsYXNzKTsKKwkJCXJjID0gLUVBQ0NFUzsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTkyMSw3ICs5MjQsNyBAQAogICogYW5vdGhlciAtZXJybm8gdXBvbiBvdGhlciBlcnJvcnMuCiAgKi8KIGludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLAotICAgICAgICAgICAgICAgICB1MzIgcmVxdWVzdGVkLCBzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSkKKwkJIHUzMiByZXF1ZXN0ZWQsIHN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYXVkaXRkYXRhKQogewogCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2V4cG9ydHMuYwppbmRleCA4N2QyYmIzLi42NGFmMmQzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2V4cG9ydHMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2V4cG9ydHMuYwpAQCAtMjUsNDggKzI1LDYgQEAKIC8qIFNFQ01BUksgcmVmZXJlbmNlIGNvdW50ICovCiBleHRlcm4gYXRvbWljX3Qgc2VsaW51eF9zZWNtYXJrX3JlZmNvdW50OwogCi1pbnQgc2VsaW51eF9zaWRfdG9fc3RyaW5nKHUzMiBzaWQsIGNoYXIgKipjdHgsIHUzMiAqY3R4bGVuKQotewotCWlmIChzZWxpbnV4X2VuYWJsZWQpCi0JCXJldHVybiBzZWN1cml0eV9zaWRfdG9fY29udGV4dChzaWQsIGN0eCwgY3R4bGVuKTsKLQllbHNlIHsKLQkJKmN0eCA9IE5VTEw7Ci0JCSpjdHhsZW4gPSAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIHNlbGludXhfZ2V0X2lub2RlX3NpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNpZCkKLXsKLQlpZiAoc2VsaW51eF9lbmFibGVkKSB7Ci0JCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKLQkJKnNpZCA9IGlzZWMtPnNpZDsKLQkJcmV0dXJuOwotCX0KLQkqc2lkID0gMDsKLX0KLQotdm9pZCBzZWxpbnV4X2dldF9pcGNfc2lkKGNvbnN0IHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLCB1MzIgKnNpZCkKLXsKLQlpZiAoc2VsaW51eF9lbmFibGVkKSB7Ci0JCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gaXBjcC0+c2VjdXJpdHk7Ci0JCSpzaWQgPSBpc2VjLT5zaWQ7Ci0JCXJldHVybjsKLQl9Ci0JKnNpZCA9IDA7Ci19Ci0KLXZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKQotewotCWlmIChzZWxpbnV4X2VuYWJsZWQpIHsKLQkJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gdHNrLT5zZWN1cml0eTsKLQkJKnNpZCA9IHRzZWMtPnNpZDsKLQkJcmV0dXJuOwotCX0KLQkqc2lkID0gMDsKLX0KLQogaW50IHNlbGludXhfc3RyaW5nX3RvX3NpZChjaGFyICpzdHIsIHUzMiAqc2lkKQogewogCWlmIChzZWxpbnV4X2VuYWJsZWQpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggNzVjMmU5OS4uMWJmMjU0MyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNCwyMiArNCwyMiBAQAogICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgU0VMaW51eCBob29rIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KICAqCiAgKiAgQXV0aG9yczogIFN0ZXBoZW4gU21hbGxleSwgPHNkc0BlcG9jaC5uY3NjLm1pbD4KLSAqICAgICAgICAgICAgQ2hyaXMgVmFuY2UsIDxjdmFuY2VAbmFpLmNvbT4KLSAqICAgICAgICAgICAgV2F5bmUgU2FsYW1vbiwgPHdzYWxhbW9uQG5haS5jb20+Ci0gKiAgICAgICAgICAgIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoJICAgICAgQ2hyaXMgVmFuY2UsIDxjdmFuY2VAbmFpLmNvbT4KKyAqCSAgICAgIFdheW5lIFNhbGFtb24sIDx3c2FsYW1vbkBuYWkuY29tPgorICoJICAgICAgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIE5ldHdvcmtzIEFzc29jaWF0ZXMgVGVjaG5vbG9neSwgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgotICogICAgICAgICAgICAgICAgICAgICAgICAgIDxkZ29lZGRlbEB0cnVzdGVkY3MuY29tPgorICoJCQkgICAgPGRnb2VkZGVsQHRydXN0ZWRjcy5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiAgICAgICAgICAgICAgICBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqCQlQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSGl0YWNoaSBTb2Z0d2FyZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KLSAqICAgICAgICAgICAgICAgICAgICAgWXVpY2hpIE5ha2FtdXJhIDx5bmFrYW1AaGl0YWNoaXNvZnQuanA+CisgKgkJICAgICAgIFl1aWNoaSBOYWthbXVyYSA8eW5ha2FtQGhpdGFjaGlzb2Z0LmpwPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKLSAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtODAsOCArODAsMTAgQEAKICNpbmNsdWRlICJvYmpzZWMuaCIKICNpbmNsdWRlICJuZXRpZi5oIgogI2luY2x1ZGUgIm5ldG5vZGUuaCIKKyNpbmNsdWRlICJuZXRwb3J0LmgiCiAjaW5jbHVkZSAieGZybS5oIgogI2luY2x1ZGUgIm5ldGxhYmVsLmgiCisjaW5jbHVkZSAiYXVkaXQuaCIKIAogI2RlZmluZSBYQVRUUl9TRUxJTlVYX1NVRkZJWCAic2VsaW51eCIKICNkZWZpbmUgWEFUVFJfTkFNRV9TRUxJTlVYIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TRUxJTlVYX1NVRkZJWApAQCAtOTcsMTEgKzk5LDExIEBACiBhdG9taWNfdCBzZWxpbnV4X3NlY21hcmtfcmVmY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1AKLWludCBzZWxpbnV4X2VuZm9yY2luZyA9IDA7CitpbnQgc2VsaW51eF9lbmZvcmNpbmc7CiAKIHN0YXRpYyBpbnQgX19pbml0IGVuZm9yY2luZ19zZXR1cChjaGFyICpzdHIpCiB7Ci0Jc2VsaW51eF9lbmZvcmNpbmcgPSBzaW1wbGVfc3RydG9sKHN0cixOVUxMLDApOworCXNlbGludXhfZW5mb3JjaW5nID0gc2ltcGxlX3N0cnRvbChzdHIsIE5VTEwsIDApOwogCXJldHVybiAxOwogfQogX19zZXR1cCgiZW5mb3JjaW5nPSIsIGVuZm9yY2luZ19zZXR1cCk7CkBAIC0xMjEsMTMgKzEyMywxMyBAQAogI2VuZGlmCiAKIC8qIE9yaWdpbmFsIChkdW1teSkgc2VjdXJpdHkgbW9kdWxlLiAqLwotc3RhdGljIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcmlnaW5hbF9vcHMgPSBOVUxMOworc3RhdGljIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcmlnaW5hbF9vcHM7CiAKIC8qIE1pbmltYWwgc3VwcG9ydCBmb3IgYSBzZWNvbmRhcnkgc2VjdXJpdHkgbW9kdWxlLAogICAganVzdCB0byBhbGxvdyB0aGUgdXNlIG9mIHRoZSBkdW1teSBvciBjYXBhYmlsaXR5IG1vZHVsZXMuCiAgICBUaGUgb3dsc20gbW9kdWxlIGNhbiBhbHRlcm5hdGl2ZWx5IGJlIHVzZWQgYXMgYSBzZWNvbmRhcnkKICAgIG1vZHVsZSBhcyBsb25nIGFzIENPTkZJR19PV0xTTV9GRCBpcyBub3QgZW5hYmxlZC4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqc2Vjb25kYXJ5X29wcyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKnNlY29uZGFyeV9vcHM7CiAKIC8qIExpc3RzIG9mIGlub2RlIGFuZCBzdXBlcmJsb2NrIHNlY3VyaXR5IHN0cnVjdHVyZXMgaW5pdGlhbGl6ZWQKICAgIGJlZm9yZSB0aGUgcG9saWN5IHdhcyBsb2FkZWQuICovCkBAIC0xNjEsOCArMTYzLDcgQEAKIAlpZiAoIXRzZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdHNlYy0+dGFzayA9IHRhc2s7Ci0JdHNlYy0+b3NpZCA9IHRzZWMtPnNpZCA9IHRzZWMtPnB0cmFjZV9zaWQgPSBTRUNJTklUU0lEX1VOTEFCRUxFRDsKKwl0c2VjLT5vc2lkID0gdHNlYy0+c2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7CiAJdGFzay0+c2VjdXJpdHkgPSB0c2VjOwogCiAJcmV0dXJuIDA7CkBAIC0xODAsNyArMTgxLDcgQEAKIAlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjdXJyZW50LT5zZWN1cml0eTsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwogCi0JaXNlYyA9IGttZW1fY2FjaGVfemFsbG9jKHNlbF9pbm9kZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaXNlYyA9IGttZW1fY2FjaGVfemFsbG9jKHNlbF9pbm9kZV9jYWNoZSwgR0ZQX05PRlMpOwogCWlmICghaXNlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIxOCw3ICsyMTksNiBAQAogCWlmICghZnNlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmc2VjLT5maWxlID0gZmlsZTsKIAlmc2VjLT5zaWQgPSB0c2VjLT5zaWQ7CiAJZnNlYy0+Zm93bl9zaWQgPSB0c2VjLT5zaWQ7CiAJZmlsZS0+Zl9zZWN1cml0eSA9IGZzZWM7CkBAIC0yNzUsMTIgKzI3NSwxMSBAQAogCWlmICghc3NlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzc2VjLT5zayA9IHNrOwogCXNzZWMtPnBlZXJfc2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7CiAJc3NlYy0+c2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7CiAJc2stPnNrX3NlY3VyaXR5ID0gc3NlYzsKIAotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2luaXQoc3NlYywgZmFtaWx5KTsKKwlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzc2VjLCBmYW1pbHkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjQsMTAgKzMyMywxMCBAQAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewotCXtPcHRfY29udGV4dCwgImNvbnRleHQ9JXMifSwKLQl7T3B0X2ZzY29udGV4dCwgImZzY29udGV4dD0lcyJ9LAotCXtPcHRfZGVmY29udGV4dCwgImRlZmNvbnRleHQ9JXMifSwKLQl7T3B0X3Jvb3Rjb250ZXh0LCAicm9vdGNvbnRleHQ9JXMifSwKKwl7T3B0X2NvbnRleHQsIENPTlRFWFRfU1RSICIlcyJ9LAorCXtPcHRfZnNjb250ZXh0LCBGU0NPTlRFWFRfU1RSICIlcyJ9LAorCXtPcHRfZGVmY29udGV4dCwgREVGQ09OVEVYVF9TVFIgIiVzIn0sCisJe09wdF9yb290Y29udGV4dCwgUk9PVENPTlRFWFRfU1RSICIlcyJ9LAogCXtPcHRfZXJyb3IsIE5VTEx9LAogfTsKIApAQCAtNDQzLDggKzQ0Miw3IEBACiAgKiBtb3VudCBvcHRpb25zLCBvciB3aGF0ZXZlci4KICAqLwogc3RhdGljIGludCBzZWxpbnV4X2dldF9tbnRfb3B0cyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCWNoYXIgKioqbW91bnRfb3B0aW9ucywgaW50ICoqbW50X29wdHNfZmxhZ3MsCi0JCQkJaW50ICpudW1fb3B0cykKKwkJCQlzdHJ1Y3Qgc2VjdXJpdHlfbW50X29wdHMgKm9wdHMpCiB7CiAJaW50IHJjID0gMCwgaTsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjID0gc2ItPnNfc2VjdXJpdHk7CkBAIC00NTIsOSArNDUwLDcgQEAKIAl1MzIgbGVuOwogCWNoYXIgdG1wOwogCi0JKm51bV9vcHRzID0gMDsKLQkqbW91bnRfb3B0aW9ucyA9IE5VTEw7Ci0JKm1udF9vcHRzX2ZsYWdzID0gTlVMTDsKKwlzZWN1cml0eV9pbml0X21udF9vcHRzKG9wdHMpOwogCiAJaWYgKCFzYnNlYy0+aW5pdGlhbGl6ZWQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDcwLDE4ICs0NjYsMTggQEAKIAkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgc2IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmICh0bXAgJiAweDAxKQotCQkJKCpudW1fb3B0cykrKzsKKwkJCW9wdHMtPm51bV9tbnRfb3B0cysrOwogCQl0bXAgPj49IDE7CiAJfQogCi0JKm1vdW50X29wdGlvbnMgPSBrY2FsbG9jKCpudW1fb3B0cywgc2l6ZW9mKGNoYXIgKiksIEdGUF9BVE9NSUMpOwotCWlmICghKm1vdW50X29wdGlvbnMpIHsKKwlvcHRzLT5tbnRfb3B0cyA9IGtjYWxsb2Mob3B0cy0+bnVtX21udF9vcHRzLCBzaXplb2YoY2hhciAqKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFvcHRzLT5tbnRfb3B0cykgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0JKm1udF9vcHRzX2ZsYWdzID0ga2NhbGxvYygqbnVtX29wdHMsIHNpemVvZihpbnQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoISptbnRfb3B0c19mbGFncykgeworCW9wdHMtPm1udF9vcHRzX2ZsYWdzID0ga2NhbGxvYyhvcHRzLT5udW1fbW50X29wdHMsIHNpemVvZihpbnQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW9wdHMtPm1udF9vcHRzX2ZsYWdzKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CkBAIC00OTEsMjIgKzQ4NywyMiBAQAogCQlyYyA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0KHNic2VjLT5zaWQsICZjb250ZXh0LCAmbGVuKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXRfZnJlZTsKLQkJKCptb3VudF9vcHRpb25zKVtpXSA9IGNvbnRleHQ7Ci0JCSgqbW50X29wdHNfZmxhZ3MpW2krK10gPSBGU0NPTlRFWFRfTU5UOworCQlvcHRzLT5tbnRfb3B0c1tpXSA9IGNvbnRleHQ7CisJCW9wdHMtPm1udF9vcHRzX2ZsYWdzW2krK10gPSBGU0NPTlRFWFRfTU5UOwogCX0KIAlpZiAoc2JzZWMtPmZsYWdzICYgQ09OVEVYVF9NTlQpIHsKIAkJcmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dChzYnNlYy0+bW50cG9pbnRfc2lkLCAmY29udGV4dCwgJmxlbik7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0X2ZyZWU7Ci0JCSgqbW91bnRfb3B0aW9ucylbaV0gPSBjb250ZXh0OwotCQkoKm1udF9vcHRzX2ZsYWdzKVtpKytdID0gQ09OVEVYVF9NTlQ7CisJCW9wdHMtPm1udF9vcHRzW2ldID0gY29udGV4dDsKKwkJb3B0cy0+bW50X29wdHNfZmxhZ3NbaSsrXSA9IENPTlRFWFRfTU5UOwogCX0KIAlpZiAoc2JzZWMtPmZsYWdzICYgREVGQ09OVEVYVF9NTlQpIHsKIAkJcmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dChzYnNlYy0+ZGVmX3NpZCwgJmNvbnRleHQsICZsZW4pOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dF9mcmVlOwotCQkoKm1vdW50X29wdGlvbnMpW2ldID0gY29udGV4dDsKLQkJKCptbnRfb3B0c19mbGFncylbaSsrXSA9IERFRkNPTlRFWFRfTU5UOworCQlvcHRzLT5tbnRfb3B0c1tpXSA9IGNvbnRleHQ7CisJCW9wdHMtPm1udF9vcHRzX2ZsYWdzW2krK10gPSBERUZDT05URVhUX01OVDsKIAl9CiAJaWYgKHNic2VjLT5mbGFncyAmIFJPT1RDT05URVhUX01OVCkgewogCQlzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBzYnNlYy0+c2ItPnNfcm9vdC0+ZF9pbm9kZTsKQEAgLTUxNSwyNCArNTExLDE2IEBACiAJCXJjID0gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHQoaXNlYy0+c2lkLCAmY29udGV4dCwgJmxlbik7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0X2ZyZWU7Ci0JCSgqbW91bnRfb3B0aW9ucylbaV0gPSBjb250ZXh0OwotCQkoKm1udF9vcHRzX2ZsYWdzKVtpKytdID0gUk9PVENPTlRFWFRfTU5UOworCQlvcHRzLT5tbnRfb3B0c1tpXSA9IGNvbnRleHQ7CisJCW9wdHMtPm1udF9vcHRzX2ZsYWdzW2krK10gPSBST09UQ09OVEVYVF9NTlQ7CiAJfQogCi0JQlVHX09OKGkgIT0gKm51bV9vcHRzKTsKKwlCVUdfT04oaSAhPSBvcHRzLT5udW1fbW50X29wdHMpOwogCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgotCS8qIGRvbid0IGxlYWsgY29udGV4dCBzdHJpbmcgaWYgc2VjdXJpdHlfc2lkX3RvX2NvbnRleHQgaGFkIGFuIGVycm9yICovCi0JaWYgKCptb3VudF9vcHRpb25zICYmIGkpCi0JCWZvciAoOyBpID4gMDsgaS0tKQotCQkJa2ZyZWUoKCptb3VudF9vcHRpb25zKVtpLTFdKTsKLQlrZnJlZSgqbW91bnRfb3B0aW9ucyk7Ci0JKm1vdW50X29wdGlvbnMgPSBOVUxMOwotCWtmcmVlKCptbnRfb3B0c19mbGFncyk7Ci0JKm1udF9vcHRzX2ZsYWdzID0gTlVMTDsKLQkqbnVtX29wdHMgPSAwOworCXNlY3VyaXR5X2ZyZWVfbW50X29wdHMob3B0cyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NTMsMTIgKzU0MSwxMyBAQAogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CisKIC8qCiAgKiBBbGxvdyBmaWxlc3lzdGVtcyB3aXRoIGJpbmFyeSBtb3VudCBkYXRhIHRvIGV4cGxpY2l0bHkgc2V0IG1vdW50IHBvaW50CiAgKiBsYWJlbGluZyBpbmZvcm1hdGlvbi4KICAqLwotc3RhdGljIGludCBzZWxpbnV4X3NldF9tbnRfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICoqbW91bnRfb3B0aW9ucywKLQkJCQlpbnQgKmZsYWdzLCBpbnQgbnVtX29wdHMpCitzdGF0aWMgaW50IHNlbGludXhfc2V0X21udF9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJc3RydWN0IHNlY3VyaXR5X21udF9vcHRzICpvcHRzKQogewogCWludCByYyA9IDAsIGk7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3VycmVudC0+c2VjdXJpdHk7CkBAIC01NjgsNiArNTU3LDkgQEAKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICpyb290X2lzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAl1MzIgZnNjb250ZXh0X3NpZCA9IDAsIGNvbnRleHRfc2lkID0gMCwgcm9vdGNvbnRleHRfc2lkID0gMDsKIAl1MzIgZGVmY29udGV4dF9zaWQgPSAwOworCWNoYXIgKiptb3VudF9vcHRpb25zID0gb3B0cy0+bW50X29wdHM7CisJaW50ICpmbGFncyA9IG9wdHMtPm1udF9vcHRzX2ZsYWdzOworCWludCBudW1fb3B0cyA9IG9wdHMtPm51bV9tbnRfb3B0czsKIAogCW11dGV4X2xvY2soJnNic2VjLT5sb2NrKTsKIApAQCAtNTgzLDEyICs1NzUsMjcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXJjID0gLUVJTlZBTDsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIG9wdGlvbnMgYmVmb3JlICIKLQkJICAgICAgICJ0aGUgc2VjdXJpdHkgc2VydmVyIGlzIGluaXRpYWxpemVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogVW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIG9wdGlvbnMgIgorCQkJImJlZm9yZSB0aGUgc2VjdXJpdHkgc2VydmVyIGlzIGluaXRpYWxpemVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyoKKwkgKiBCaW5hcnkgbW91bnQgZGF0YSBGUyB3aWxsIGNvbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHR3aWNlLiAgT25jZQorCSAqIGZyb20gYW4gZXhwbGljaXQgY2FsbCBhbmQgb25jZSBmcm9tIHRoZSBnZW5lcmljIGNhbGxzIGZyb20gdGhlIHZmcy4KKwkgKiBTaW5jZSB0aGUgZ2VuZXJpYyBWRlMgY2FsbHMgd2lsbCBub3QgY29udGFpbiBhbnkgc2VjdXJpdHkgbW91bnQgZGF0YQorCSAqIHdlIG5lZWQgdG8gc2tpcCB0aGUgZG91YmxlIG1vdW50IHZlcmlmaWNhdGlvbi4KKwkgKgorCSAqIFRoaXMgZG9lcyBvcGVuIGEgaG9sZSBpbiB3aGljaCB3ZSB3aWxsIG5vdCBub3RpY2UgaWYgdGhlIGZpcnN0CisJICogbW91bnQgdXNpbmcgdGhpcyBzYiBzZXQgZXhwbGljdCBvcHRpb25zIGFuZCBhIHNlY29uZCBtb3VudCB1c2luZworCSAqIHRoaXMgc2IgZG9lcyBub3Qgc2V0IGFueSBzZWN1cml0eSBvcHRpb25zLiAgKFRoZSBmaXJzdCBvcHRpb25zCisJICogd2lsbCBiZSB1c2VkIGZvciBib3RoIG1vdW50cykKKwkgKi8KKwlpZiAoc2JzZWMtPmluaXRpYWxpemVkICYmIChzYi0+c190eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpCisJICAgICYmIChudW1fb3B0cyA9PSAwKSkKKwkgICAgICAgIGdvdG8gb3V0OworCisJLyoKIAkgKiBwYXJzZSB0aGUgbW91bnQgb3B0aW9ucywgY2hlY2sgaWYgdGhleSBhcmUgdmFsaWQgc2lkcy4KIAkgKiBhbHNvIGNoZWNrIGlmIHNvbWVvbmUgaXMgdHJ5aW5nIHRvIG1vdW50IHRoZSBzYW1lIHNiIG1vcmUKIAkgKiB0aGFuIG9uY2Ugd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgb3B0aW9ucy4KQEAgLTY2Myw3ICs2NzAsNyBAQAogCXJjID0gc2VjdXJpdHlfZnNfdXNlKHNiLT5zX3R5cGUtPm5hbWUsICZzYnNlYy0+YmVoYXZpb3IsICZzYnNlYy0+c2lkKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHNlY3VyaXR5X2ZzX3VzZSglcykgcmV0dXJuZWQgJWRcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIHNiLT5zX3R5cGUtPm5hbWUsIHJjKTsKKwkJICAgICAgIF9fZnVuY19fLCBzYi0+c190eXBlLT5uYW1lLCByYyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNzUyLDEzICs3NTksMTMgQEAKIAkgKiB0aGlzIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MuICovCiAJQlVHX09OKCFzc19pbml0aWFsaXplZCk7CiAKLQkvKiB0aGlzIG1pZ2h0IGdvIGF3YXkgc29tZXRpbWUgZG93biB0aGUgbGluZSBpZiB0aGVyZSBpcyBhIG5ldyB1c2VyCi0JICogb2YgY2xvbmUsIGJ1dCBmb3Igbm93LCBuZnMgYmV0dGVyIG5vdCBnZXQgaGVyZS4uLiAqLwotCUJVR19PTihuZXdzYnNlYy0+aW5pdGlhbGl6ZWQpOwotCiAJLyogaG93IGNhbiB3ZSBjbG9uZSBpZiB0aGUgb2xkIG9uZSB3YXNuJ3Qgc2V0IHVwPz8gKi8KIAlCVUdfT04oIW9sZHNic2VjLT5pbml0aWFsaXplZCk7CiAKKwkvKiBpZiBmcyBpcyByZXVzaW5nIGEgc2IsIGp1c3QgbGV0IGl0cyBvcHRpb25zIHN0YW5kLi4uICovCisJaWYgKG5ld3Nic2VjLT5pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCiAJbXV0ZXhfbG9jaygmbmV3c2JzZWMtPmxvY2spOwogCiAJbmV3c2JzZWMtPmZsYWdzID0gb2xkc2JzZWMtPmZsYWdzOwpAQCAtNzkyLDQzICs3OTksMTUgQEAKIAltdXRleF91bmxvY2soJm5ld3Nic2VjLT5sb2NrKTsKIH0KIAotLyoKLSAqIHN0cmluZyBtb3VudCBvcHRpb25zIHBhcnNpbmcgYW5kIGNhbGwgc2V0IHRoZSBzYnNlYwotICovCi1zdGF0aWMgaW50IHN1cGVyYmxvY2tfZG9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNlbGludXhfcGFyc2Vfb3B0c19zdHIoY2hhciAqb3B0aW9ucywKKwkJCQkgIHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyAqb3B0cykKIHsKKwljaGFyICpwOwogCWNoYXIgKmNvbnRleHQgPSBOVUxMLCAqZGVmY29udGV4dCA9IE5VTEw7CiAJY2hhciAqZnNjb250ZXh0ID0gTlVMTCwgKnJvb3Rjb250ZXh0ID0gTlVMTDsKLQlpbnQgcmMgPSAwOwotCWNoYXIgKnAsICpvcHRpb25zID0gZGF0YTsKLQkvKiBzZWxpbnV4IG9ubHkga25vdyBhYm91dCBhIGZpeGVkIG51bWJlciBvZiBtb3VudCBvcHRpb25zICovCi0JY2hhciAqbW50X29wdHNbTlVNX1NFTF9NTlRfT1BUU107Ci0JaW50IG1udF9vcHRzX2ZsYWdzW05VTV9TRUxfTU5UX09QVFNdLCBudW1fbW50X29wdHMgPSAwOworCWludCByYywgbnVtX21udF9vcHRzID0gMDsKIAotCWlmICghZGF0YSkKLQkJZ290byBvdXQ7Ci0KLQkvKiB3aXRoIHRoZSBuZnMgcGF0Y2ggdGhpcyB3aWxsIGJlY29tZSBhIGdvdG8gb3V0OyAqLwotCWlmIChzYi0+c190eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpIHsKLQkJY29uc3QgY2hhciAqbmFtZSA9IHNiLT5zX3R5cGUtPm5hbWU7Ci0JCS8qIE5GUyB3ZSB1bmRlcnN0YW5kLiAqLwotCQlpZiAoIXN0cmNtcChuYW1lLCAibmZzIikpIHsKLQkJCXN0cnVjdCBuZnNfbW91bnRfZGF0YSAqZCA9IGRhdGE7Ci0KLQkJCWlmIChkLT52ZXJzaW9uICE9ICBORlNfTU9VTlRfVkVSU0lPTikKLQkJCQlnb3RvIG91dDsKLQotCQkJaWYgKGQtPmNvbnRleHRbMF0pIHsKLQkJCQljb250ZXh0ID0ga3N0cmR1cChkLT5jb250ZXh0LCBHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIWNvbnRleHQpIHsKLQkJCQkJcmMgPSAtRU5PTUVNOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQl9Ci0JCQlnb3RvIGJ1aWxkX2ZsYWdzOwotCQl9IGVsc2UKLQkJCWdvdG8gb3V0OwotCX0KKwlvcHRzLT5udW1fbW50X29wdHMgPSAwOwogCiAJLyogU3RhbmRhcmQgc3RyaW5nLWJhc2VkIG9wdGlvbnMuICovCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRpb25zLCAifCIpKSAhPSBOVUxMKSB7CkBAIC05MDEsMjYgKzg4MCwzNyBAQAogCQl9CiAJfQogCi1idWlsZF9mbGFnczoKLQlpZiAoZnNjb250ZXh0KSB7Ci0JCW1udF9vcHRzW251bV9tbnRfb3B0c10gPSBmc2NvbnRleHQ7Ci0JCW1udF9vcHRzX2ZsYWdzW251bV9tbnRfb3B0cysrXSA9IEZTQ09OVEVYVF9NTlQ7Ci0JfQotCWlmIChjb250ZXh0KSB7Ci0JCW1udF9vcHRzW251bV9tbnRfb3B0c10gPSBjb250ZXh0OwotCQltbnRfb3B0c19mbGFnc1tudW1fbW50X29wdHMrK10gPSBDT05URVhUX01OVDsKLQl9Ci0JaWYgKHJvb3Rjb250ZXh0KSB7Ci0JCW1udF9vcHRzW251bV9tbnRfb3B0c10gPSByb290Y29udGV4dDsKLQkJbW50X29wdHNfZmxhZ3NbbnVtX21udF9vcHRzKytdID0gUk9PVENPTlRFWFRfTU5UOwotCX0KLQlpZiAoZGVmY29udGV4dCkgewotCQltbnRfb3B0c1tudW1fbW50X29wdHNdID0gZGVmY29udGV4dDsKLQkJbW50X29wdHNfZmxhZ3NbbnVtX21udF9vcHRzKytdID0gREVGQ09OVEVYVF9NTlQ7CisJcmMgPSAtRU5PTUVNOworCW9wdHMtPm1udF9vcHRzID0ga2NhbGxvYyhOVU1fU0VMX01OVF9PUFRTLCBzaXplb2YoY2hhciAqKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFvcHRzLT5tbnRfb3B0cykKKwkJZ290byBvdXRfZXJyOworCisJb3B0cy0+bW50X29wdHNfZmxhZ3MgPSBrY2FsbG9jKE5VTV9TRUxfTU5UX09QVFMsIHNpemVvZihpbnQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW9wdHMtPm1udF9vcHRzX2ZsYWdzKSB7CisJCWtmcmVlKG9wdHMtPm1udF9vcHRzKTsKKwkJZ290byBvdXRfZXJyOwogCX0KIAotb3V0OgotCXJjID0gc2VsaW51eF9zZXRfbW50X29wdHMoc2IsIG1udF9vcHRzLCBtbnRfb3B0c19mbGFncywgbnVtX21udF9vcHRzKTsKKwlpZiAoZnNjb250ZXh0KSB7CisJCW9wdHMtPm1udF9vcHRzW251bV9tbnRfb3B0c10gPSBmc2NvbnRleHQ7CisJCW9wdHMtPm1udF9vcHRzX2ZsYWdzW251bV9tbnRfb3B0cysrXSA9IEZTQ09OVEVYVF9NTlQ7CisJfQorCWlmIChjb250ZXh0KSB7CisJCW9wdHMtPm1udF9vcHRzW251bV9tbnRfb3B0c10gPSBjb250ZXh0OworCQlvcHRzLT5tbnRfb3B0c19mbGFnc1tudW1fbW50X29wdHMrK10gPSBDT05URVhUX01OVDsKKwl9CisJaWYgKHJvb3Rjb250ZXh0KSB7CisJCW9wdHMtPm1udF9vcHRzW251bV9tbnRfb3B0c10gPSByb290Y29udGV4dDsKKwkJb3B0cy0+bW50X29wdHNfZmxhZ3NbbnVtX21udF9vcHRzKytdID0gUk9PVENPTlRFWFRfTU5UOworCX0KKwlpZiAoZGVmY29udGV4dCkgeworCQlvcHRzLT5tbnRfb3B0c1tudW1fbW50X29wdHNdID0gZGVmY29udGV4dDsKKwkJb3B0cy0+bW50X29wdHNfZmxhZ3NbbnVtX21udF9vcHRzKytdID0gREVGQ09OVEVYVF9NTlQ7CisJfQorCisJb3B0cy0+bnVtX21udF9vcHRzID0gbnVtX21udF9vcHRzOworCXJldHVybiAwOworCiBvdXRfZXJyOgogCWtmcmVlKGNvbnRleHQpOwogCWtmcmVlKGRlZmNvbnRleHQpOwpAQCAtOTI4LDYgKzkxOCwzMyBAQAogCWtmcmVlKHJvb3Rjb250ZXh0KTsKIAlyZXR1cm4gcmM7CiB9CisvKgorICogc3RyaW5nIG1vdW50IG9wdGlvbnMgcGFyc2luZyBhbmQgY2FsbCBzZXQgdGhlIHNic2VjCisgKi8KK3N0YXRpYyBpbnQgc3VwZXJibG9ja19kb2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmMgPSAwOworCWNoYXIgKm9wdGlvbnMgPSBkYXRhOworCXN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyBvcHRzOworCisJc2VjdXJpdHlfaW5pdF9tbnRfb3B0cygmb3B0cyk7CisKKwlpZiAoIWRhdGEpCisJCWdvdG8gb3V0OworCisJQlVHX09OKHNiLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfQklOQVJZX01PVU5UREFUQSk7CisKKwlyYyA9IHNlbGludXhfcGFyc2Vfb3B0c19zdHIob3B0aW9ucywgJm9wdHMpOworCWlmIChyYykKKwkJZ290byBvdXRfZXJyOworCitvdXQ6CisJcmMgPSBzZWxpbnV4X3NldF9tbnRfb3B0cyhzYiwgJm9wdHMpOworCitvdXRfZXJyOgorCXNlY3VyaXR5X2ZyZWVfbW50X29wdHMoJm9wdHMpOworCXJldHVybiByYzsKK30KIAogc3RhdGljIGlubGluZSB1MTYgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyh1bW9kZV90IG1vZGUpCiB7CkBAIC0xMDM3LDcgKzEwNTQsNyBAQAogCWludCBidWZsZW4sIHJjOwogCWNoYXIgKmJ1ZmZlciwgKnBhdGgsICplbmQ7CiAKLQlidWZmZXIgPSAoY2hhciopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTExOCwxNCArMTEzNSwxNCBAQAogCQkJZGVudHJ5ID0gZF9maW5kX2FsaWFzKGlub2RlKTsKIAkJfQogCQlpZiAoIWRlbnRyeSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICBubyBkZW50cnkgZm9yIGRldj0lcyAiCi0JCQkgICAgICAgImlubz0lbGRcbiIsIF9fRlVOQ1RJT05fXywgaW5vZGUtPmlfc2ItPnNfaWQsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAlczogIG5vIGRlbnRyeSBmb3IgZGV2PSVzICIKKwkJCSAgICAgICAiaW5vPSVsZFxuIiwgX19mdW5jX18sIGlub2RlLT5pX3NiLT5zX2lkLAogCQkJICAgICAgIGlub2RlLT5pX2lubyk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsZW4gPSBJTklUQ09OVEVYVExFTjsKLQkJY29udGV4dCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJY29udGV4dCA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CiAJCWlmICghY29udGV4dCkgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJZHB1dChkZW50cnkpOwpAQCAtMTE0Myw3ICsxMTYwLDcgQEAKIAkJCX0KIAkJCWtmcmVlKGNvbnRleHQpOwogCQkJbGVuID0gcmM7Ci0JCQljb250ZXh0ID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCQkJY29udGV4dCA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CiAJCQlpZiAoIWNvbnRleHQpIHsKIAkJCQlyYyA9IC1FTk9NRU07CiAJCQkJZHB1dChkZW50cnkpOwpAQCAtMTE1Niw4ICsxMTczLDggQEAKIAkJZHB1dChkZW50cnkpOwogCQlpZiAocmMgPCAwKSB7CiAJCQlpZiAocmMgIT0gLUVOT0RBVEEpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIGdldHhhdHRyIHJldHVybmVkICIKLQkJCQkgICAgICAgIiVkIGZvciBkZXY9JXMgaW5vPSVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgZ2V0eGF0dHIgcmV0dXJuZWQgIgorCQkJCSAgICAgICAiJWQgZm9yIGRldj0lcyBpbm89JWxkXG4iLCBfX2Z1bmNfXywKIAkJCQkgICAgICAgLXJjLCBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKIAkJCQlrZnJlZShjb250ZXh0KTsKIAkJCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMTY3LDExICsxMTg0LDEyIEBACiAJCQlyYyA9IDA7CiAJCX0gZWxzZSB7CiAJCQlyYyA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkX2RlZmF1bHQoY29udGV4dCwgcmMsICZzaWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JzZWMtPmRlZl9zaWQpOworCQkJCQkJCSAgICAgc2JzZWMtPmRlZl9zaWQsCisJCQkJCQkJICAgICBHRlBfTk9GUyk7CiAJCQlpZiAocmMpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIGNvbnRleHRfdG9fc2lkKCVzKSAiCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogJXM6ICBjb250ZXh0X3RvX3NpZCglcykgIgogCQkJCSAgICAgICAicmV0dXJuZWQgJWQgZm9yIGRldj0lcyBpbm89JWxkXG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNvbnRleHQsIC1yYywKKwkJCQkgICAgICAgX19mdW5jX18sIGNvbnRleHQsIC1yYywKIAkJCQkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CiAJCQkJa2ZyZWUoY29udGV4dCk7CiAJCQkJLyogTGVhdmUgd2l0aCB0aGUgdW5sYWJlbGVkIFNJRCAqLwpAQCAtMTI4Nyw3ICsxMzA1LDcgQEAKIAogCXRzZWMgPSB0c2stPnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsQ0FQKTsKKwlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgQ0FQKTsKIAlhZC50c2sgPSB0c2s7CiAJYWQudS5jYXAgPSBjYXA7CiAKQEAgLTEzMzAsNyArMTM0OCw3IEBACiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAKLQlpZiAodW5saWtlbHkgKElTX1BSSVZBVEUgKGlub2RlKSkpCisJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7CiAKIAl0c2VjID0gdHNrLT5zZWN1cml0eTsKQEAgLTEzNTUsNyArMTM3Myw3IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7Ci0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsRlMpOworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CiAJYWQudS5mcy5wYXRoLm1udCA9IG1udDsKIAlhZC51LmZzLnBhdGguZGVudHJ5ID0gZGVudHJ5OwogCXJldHVybiBpbm9kZV9oYXNfcGVybSh0c2ssIGlub2RlLCBhdiwgJmFkKTsKQEAgLTE0NTIsOSArMTQ3MCw5IEBACiAJcmV0dXJuIGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGtzaWQsIFNFQ0NMQVNTX0tFWSwgS0VZX19DUkVBVEUsIE5VTEwpOwogfQogCi0jZGVmaW5lIE1BWV9MSU5LICAgMAotI2RlZmluZSBNQVlfVU5MSU5LIDEKLSNkZWZpbmUgTUFZX1JNRElSICAyCisjZGVmaW5lIE1BWV9MSU5LCTAKKyNkZWZpbmUgTUFZX1VOTElOSwkxCisjZGVmaW5lIE1BWV9STURJUgkyCiAKIC8qIENoZWNrIHdoZXRoZXIgYSB0YXNrIGNhbiBsaW5rLCB1bmxpbmssIG9yIHJtZGlyIGEgZmlsZS9kaXJlY3RvcnkuICovCiBzdGF0aWMgaW50IG1heV9saW5rKHN0cnVjdCBpbm9kZSAqZGlyLApAQCAtMTQ5Miw3ICsxNTEwLDggQEAKIAkJYXYgPSBESVJfX1JNRElSOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYXlfbGluazogIHVucmVjb2duaXplZCBraW5kICVkXG4iLCBraW5kKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQga2luZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBraW5kKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNTk5LDYgKzE2MTgsMzUgQEAKIAlyZXR1cm4gYXY7CiB9CiAKKy8qCisgKiBDb252ZXJ0IGEgZmlsZSBtYXNrIHRvIGFuIGFjY2VzcyB2ZWN0b3IgYW5kIGluY2x1ZGUgdGhlIGNvcnJlY3Qgb3BlbgorICogb3BlbiBwZXJtaXNzaW9uLgorICovCitzdGF0aWMgaW5saW5lIHUzMiBvcGVuX2ZpbGVfbWFza190b19hdihpbnQgbW9kZSwgaW50IG1hc2spCit7CisJdTMyIGF2ID0gZmlsZV9tYXNrX3RvX2F2KG1vZGUsIG1hc2spOworCisJaWYgKHNlbGludXhfcG9saWN5Y2FwX29wZW5wZXJtKSB7CisJCS8qCisJCSAqIGxuayBmaWxlcyBhbmQgc29ja3MgZG8gbm90IHJlYWxseSBoYXZlIGFuICdvcGVuJworCQkgKi8KKwkJaWYgKFNfSVNSRUcobW9kZSkpCisJCQlhdiB8PSBGSUxFX19PUEVOOworCQllbHNlIGlmIChTX0lTQ0hSKG1vZGUpKQorCQkJYXYgfD0gQ0hSX0ZJTEVfX09QRU47CisJCWVsc2UgaWYgKFNfSVNCTEsobW9kZSkpCisJCQlhdiB8PSBCTEtfRklMRV9fT1BFTjsKKwkJZWxzZSBpZiAoU19JU0ZJRk8obW9kZSkpCisJCQlhdiB8PSBGSUZPX0ZJTEVfX09QRU47CisJCWVsc2UgaWYgKFNfSVNESVIobW9kZSkpCisJCQlhdiB8PSBESVJfX09QRU47CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogV0FSTklORzogaW5zaWRlICVzIHdpdGggIgorCQkJCSJ1bmtub3duIG1vZGU6JXhcbiIsIF9fZnVuY19fLCBtb2RlKTsKKwl9CisJcmV0dXJuIGF2OworfQorCiAvKiBDb252ZXJ0IGEgTGludXggZmlsZSB0byBhbiBhY2Nlc3MgdmVjdG9yLiAqLwogc3RhdGljIGlubGluZSB1MzIgZmlsZV90b19hdihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTE2MTIsNiArMTY2MCwxMiBAQAogCQllbHNlCiAJCQlhdiB8PSBGSUxFX19XUklURTsKIAl9CisJaWYgKCFhdikgeworCQkvKgorCQkgKiBTcGVjaWFsIGZpbGUgb3BlbmVkIHdpdGggZmxhZ3MgMyBmb3IgaW9jdGwtb25seSB1c2UuCisJCSAqLworCQlhdiA9IEZJTEVfX0lPQ1RMOworCX0KIAogCXJldHVybiBhdjsKIH0KQEAgLTE2MjAsMjMgKzE2NzQsMTcgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKLQlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnBzZWMgPSBwYXJlbnQtPnNlY3VyaXR5OwotCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqY3NlYyA9IGNoaWxkLT5zZWN1cml0eTsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnB0cmFjZShwYXJlbnQsY2hpbGQpOworCXJjID0gc2Vjb25kYXJ5X29wcy0+cHRyYWNlKHBhcmVudCwgY2hpbGQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmMgPSB0YXNrX2hhc19wZXJtKHBhcmVudCwgY2hpbGQsIFBST0NFU1NfX1BUUkFDRSk7Ci0JLyogU2F2ZSB0aGUgU0lEIG9mIHRoZSB0cmFjaW5nIHByb2Nlc3MgZm9yIGxhdGVyIHVzZSBpbiBhcHBseV9jcmVkcy4gKi8KLQlpZiAoIShjaGlsZC0+cHRyYWNlICYgUFRfUFRSQUNFRCkgJiYgIXJjKQotCQljc2VjLT5wdHJhY2Vfc2lkID0gcHNlYy0+c2lkOwotCXJldHVybiByYzsKKwlyZXR1cm4gdGFza19oYXNfcGVybShwYXJlbnQsIGNoaWxkLCBQUk9DRVNTX19QVFJBQ0UpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfY2FwZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCisJCQkgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQogewogCWludCBlcnJvcjsKIApAQCAtMTY0OCw3ICsxNjk2LDcgQEAKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2NhcHNldF9jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQorCQkJCWtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQogewogCWludCBlcnJvcjsKIApAQCAtMTY2MCw3ICsxNzA4LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9jYXBzZXRfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKKwkJCSAgICAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIHsKIAlzZWNvbmRhcnlfb3BzLT5jYXBzZXRfc2V0KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KQEAgLTE2NzMsNyArMTcyMSw3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gdGFza19oYXNfY2FwYWJpbGl0eSh0c2ssY2FwKTsKKwlyZXR1cm4gdGFza19oYXNfY2FwYWJpbGl0eSh0c2ssIGNhcCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zeXNjdGxfZ2V0X3NpZChjdGxfdGFibGUgKnRhYmxlLCB1MTYgdGNsYXNzLCB1MzIgKnNpZCkKQEAgLTE2ODIsNyArMTczMCw3IEBACiAJY2hhciAqYnVmZmVyLCAqcGF0aCwgKmVuZDsKIAogCXJjID0gLUVOT01FTTsKLQlidWZmZXIgPSAoY2hhciopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghYnVmZmVyKQogCQlnb3RvIG91dDsKIApAQCAtMTc0MCw3ICsxNzg4LDcgQEAKIAogCS8qIFRoZSBvcCB2YWx1ZXMgYXJlICJkZWZpbmVkIiBpbiBzeXNjdGwuYywgdGhlcmVieSBjcmVhdGluZwogCSAqIGEgYmFkIGNvdXBsaW5nIGJldHdlZW4gdGhpcyBtb2R1bGUgYW5kIHN5c2N0bC5jICovCi0JaWYob3AgPT0gMDAxKSB7CisJaWYgKG9wID09IDAwMSkgewogCQllcnJvciA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIHRzaWQsCiAJCQkJICAgICBTRUNDTEFTU19ESVIsIERJUl9fU0VBUkNILCBOVUxMKTsKIAl9IGVsc2UgewpAQCAtMTc1Miw3ICsxODAwLDcgQEAKIAkJaWYgKGF2KQogCQkJZXJyb3IgPSBhdmNfaGFzX3Blcm0odHNlYy0+c2lkLCB0c2lkLAogCQkJCQkgICAgIFNFQ0NMQVNTX0ZJTEUsIGF2LCBOVUxMKTsKLSAgICAgICAgfQorCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTE3NjUsMjUgKzE4MTMsMjMgQEAKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGNtZHMpIHsKLQkJY2FzZSBRX1NZTkM6Ci0JCWNhc2UgUV9RVU9UQU9OOgotCQljYXNlIFFfUVVPVEFPRkY6Ci0JICAgICAgICBjYXNlIFFfU0VUSU5GTzoKLQkJY2FzZSBRX1NFVFFVT1RBOgotCQkJcmMgPSBzdXBlcmJsb2NrX2hhc19wZXJtKGN1cnJlbnQsCi0JCQkJCQkgc2IsCi0JCQkJCQkgRklMRVNZU1RFTV9fUVVPVEFNT0QsIE5VTEwpOwotCQkJYnJlYWs7Ci0JICAgICAgICBjYXNlIFFfR0VURk1UOgotCSAgICAgICAgY2FzZSBRX0dFVElORk86Ci0JCWNhc2UgUV9HRVRRVU9UQToKLQkJCXJjID0gc3VwZXJibG9ja19oYXNfcGVybShjdXJyZW50LAotCQkJCQkJIHNiLAotCQkJCQkJIEZJTEVTWVNURU1fX1FVT1RBR0VULCBOVUxMKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmMgPSAwOyAgLyogbGV0IHRoZSBrZXJuZWwgaGFuZGxlIGludmFsaWQgY21kcyAqLwotCQkJYnJlYWs7CisJY2FzZSBRX1NZTkM6CisJY2FzZSBRX1FVT1RBT046CisJY2FzZSBRX1FVT1RBT0ZGOgorCWNhc2UgUV9TRVRJTkZPOgorCWNhc2UgUV9TRVRRVU9UQToKKwkJcmMgPSBzdXBlcmJsb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNiLCBGSUxFU1lTVEVNX19RVU9UQU1PRCwKKwkJCQkJIE5VTEwpOworCQlicmVhazsKKwljYXNlIFFfR0VURk1UOgorCWNhc2UgUV9HRVRJTkZPOgorCWNhc2UgUV9HRVRRVU9UQToKKwkJcmMgPSBzdXBlcmJsb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNiLCBGSUxFU1lTVEVNX19RVU9UQUdFVCwKKwkJCQkJIE5VTEwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYyA9IDA7ICAvKiBsZXQgdGhlIGtlcm5lbCBoYW5kbGUgaW52YWxpZCBjbWRzICovCisJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0xODAyLDIzICsxODQ4LDIzIEBACiAJCXJldHVybiByYzsKIAogCXN3aXRjaCAodHlwZSkgewotCQljYXNlIDM6ICAgICAgICAgLyogUmVhZCBsYXN0IGtlcm5lbCBtZXNzYWdlcyAqLwotCQljYXNlIDEwOiAgICAgICAgLyogUmV0dXJuIHNpemUgb2YgdGhlIGxvZyBidWZmZXIgKi8KLQkJCXJjID0gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fU1lTTE9HX1JFQUQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjogICAgICAgICAvKiBEaXNhYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwotCQljYXNlIDc6ICAgICAgICAgLyogRW5hYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwotCQljYXNlIDg6CQkvKiBTZXQgbGV2ZWwgb2YgbWVzc2FnZXMgcHJpbnRlZCB0byBjb25zb2xlICovCi0JCQlyYyA9IHRhc2tfaGFzX3N5c3RlbShjdXJyZW50LCBTWVNURU1fX1NZU0xPR19DT05TT0xFKTsKLQkJCWJyZWFrOwotCQljYXNlIDA6ICAgICAgICAgLyogQ2xvc2UgbG9nICovCi0JCWNhc2UgMTogICAgICAgICAvKiBPcGVuIGxvZyAqLwotCQljYXNlIDI6ICAgICAgICAgLyogUmVhZCBmcm9tIGxvZyAqLwotCQljYXNlIDQ6ICAgICAgICAgLyogUmVhZC9jbGVhciBsYXN0IGtlcm5lbCBtZXNzYWdlcyAqLwotCQljYXNlIDU6ICAgICAgICAgLyogQ2xlYXIgcmluZyBidWZmZXIgKi8KLQkJZGVmYXVsdDoKLQkJCXJjID0gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fU1lTTE9HX01PRCk7Ci0JCQlicmVhazsKKwljYXNlIDM6CQkvKiBSZWFkIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCisJY2FzZSAxMDoJLyogUmV0dXJuIHNpemUgb2YgdGhlIGxvZyBidWZmZXIgKi8KKwkJcmMgPSB0YXNrX2hhc19zeXN0ZW0oY3VycmVudCwgU1lTVEVNX19TWVNMT0dfUkVBRCk7CisJCWJyZWFrOworCWNhc2UgNjoJCS8qIERpc2FibGUgbG9nZ2luZyB0byBjb25zb2xlICovCisJY2FzZSA3OgkJLyogRW5hYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLworCWNhc2UgODoJCS8qIFNldCBsZXZlbCBvZiBtZXNzYWdlcyBwcmludGVkIHRvIGNvbnNvbGUgKi8KKwkJcmMgPSB0YXNrX2hhc19zeXN0ZW0oY3VycmVudCwgU1lTVEVNX19TWVNMT0dfQ09OU09MRSk7CisJCWJyZWFrOworCWNhc2UgMDoJCS8qIENsb3NlIGxvZyAqLworCWNhc2UgMToJCS8qIE9wZW4gbG9nICovCisJY2FzZSAyOgkJLyogUmVhZCBmcm9tIGxvZyAqLworCWNhc2UgNDoJCS8qIFJlYWQvY2xlYXIgbGFzdCBrZXJuZWwgbWVzc2FnZXMgKi8KKwljYXNlIDU6CQkvKiBDbGVhciByaW5nIGJ1ZmZlciAqLworCWRlZmF1bHQ6CisJCXJjID0gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fU1lTTE9HX01PRCk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0xODU0LDYgKzE5MDAsMjIgQEAKIAlyZXR1cm4gX192bV9lbm91Z2hfbWVtb3J5KG1tLCBwYWdlcywgY2FwX3N5c19hZG1pbik7CiB9CiAKKy8qKgorICogdGFza190cmFjZXJfdGFzayAtIHJldHVybiB0aGUgdGFzayB0aGF0IGlzIHRyYWNpbmcgdGhlIGdpdmVuIHRhc2sKKyAqIEB0YXNrOgkJdGFzayB0byBjb25zaWRlcgorICoKKyAqIFJldHVybnMgTlVMTCBpZiBub29uZSBpcyB0cmFjaW5nIEB0YXNrLCBvciB0aGUgJnN0cnVjdCB0YXNrX3N0cnVjdAorICogcG9pbnRlciB0byBpdHMgdHJhY2VyLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKS4KKyAqLworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza190cmFjZXJfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJaWYgKHRhc2stPnB0cmFjZSAmIFBUX1BUUkFDRUQpCisJCXJldHVybiByY3VfZGVyZWZlcmVuY2UodGFzay0+cGFyZW50KTsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyogYmlucHJtIHNlY3VyaXR5IG9wZXJhdGlvbnMgKi8KIAogc3RhdGljIGludCBzZWxpbnV4X2Jwcm1fYWxsb2Nfc2VjdXJpdHkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKQEAgLTE4NjQsNyArMTkyNiw2IEBACiAJaWYgKCFic2VjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWJzZWMtPmJwcm0gPSBicHJtOwogCWJzZWMtPnNpZCA9IFNFQ0lOSVRTSURfVU5MQUJFTEVEOwogCWJzZWMtPnNldCA9IDA7CiAKQEAgLTE5MDksNyArMTk3MCw3IEBACiAJfSBlbHNlIHsKIAkJLyogQ2hlY2sgZm9yIGEgZGVmYXVsdCB0cmFuc2l0aW9uIG9uIHRoaXMgcHJvZ3JhbS4gKi8KIAkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZCh0c2VjLT5zaWQsIGlzZWMtPnNpZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNDTEFTU19QUk9DRVNTLCAmbmV3c2lkKTsKKwkJCQkJICAgICBTRUNDTEFTU19QUk9DRVNTLCAmbmV3c2lkKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCX0KQEAgLTE5MjAsNyArMTk4MSw3IEBACiAJaWYgKGJwcm0tPmZpbGUtPmZfcGF0aC5tbnQtPm1udF9mbGFncyAmIE1OVF9OT1NVSUQpCiAJCW5ld3NpZCA9IHRzZWMtPnNpZDsKIAotICAgICAgICBpZiAodHNlYy0+c2lkID09IG5ld3NpZCkgeworCWlmICh0c2VjLT5zaWQgPT0gbmV3c2lkKSB7CiAJCXJjID0gYXZjX2hhc19wZXJtKHRzZWMtPnNpZCwgaXNlYy0+c2lkLAogCQkJCSAgU0VDQ0xBU1NfRklMRSwgRklMRV9fRVhFQ1VURV9OT19UUkFOUywgJmFkKTsKIAkJaWYgKHJjKQpAQCAtMTk0OCwxMyArMjAwOSwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfYnBybV9jaGVja19zZWN1cml0eSAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3N0YXRpYyBpbnQgc2VsaW51eF9icHJtX2NoZWNrX3NlY3VyaXR5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJcmV0dXJuIHNlY29uZGFyeV9vcHMtPmJwcm1fY2hlY2tfc2VjdXJpdHkoYnBybSk7CiB9CiAKIAotc3RhdGljIGludCBzZWxpbnV4X2Jwcm1fc2VjdXJlZXhlYyAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK3N0YXRpYyBpbnQgc2VsaW51eF9icHJtX3NlY3VyZWV4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBjdXJyZW50LT5zZWN1cml0eTsKIAlpbnQgYXRzZWN1cmUgPSAwOwpAQCAtMTk4MSw3ICsyMDQyLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpzZWxpbnV4X251bGw7CiAKIC8qIERlcml2ZWQgZnJvbSBmcy9leGVjLmM6Zmx1c2hfb2xkX2ZpbGVzLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3VuYXV0aG9yaXplZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICogZmlsZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdW5hdXRob3JpemVkX2ZpbGVzKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKQogewogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSwgKmRldm51bGwgPSBOVUxMOwpAQCAtMjAxNiw3ICsyMDc3LDcgQEAKIAogCS8qIFJldmFsaWRhdGUgYWNjZXNzIHRvIGluaGVyaXRlZCBvcGVuIGZpbGVzLiAqLwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsRlMpOworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CiAKIAlzcGluX2xvY2soJmZpbGVzLT5maWxlX2xvY2spOwogCWZvciAoOzspIHsKQEAgLTIwMzIsNyArMjA5Myw3IEBACiAJCWlmICghc2V0KQogCQkJY29udGludWU7CiAJCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKLQkJZm9yICggOyBzZXQgOyBpKyssc2V0ID4+PSAxKSB7CisJCWZvciAoIDsgc2V0IDsgaSsrLCBzZXQgPj49IDEpIHsKIAkJCWlmIChzZXQgJiAxKSB7CiAJCQkJZmlsZSA9IGZnZXQoaSk7CiAJCQkJaWYgKCFmaWxlKQpAQCAtMjEwMSwxMiArMjE2MiwyNSBAQAogCQkvKiBDaGVjayBmb3IgcHRyYWNpbmcsIGFuZCB1cGRhdGUgdGhlIHRhc2sgU0lEIGlmIG9rLgogCQkgICBPdGhlcndpc2UsIGxlYXZlIFNJRCB1bmNoYW5nZWQgYW5kIGtpbGwuICovCiAJCWlmICh1bnNhZmUgJiAoTFNNX1VOU0FGRV9QVFJBQ0UgfCBMU01fVU5TQUZFX1BUUkFDRV9DQVApKSB7Ci0JCQlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5wdHJhY2Vfc2lkLCBzaWQsCi0JCQkJCSAgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLAotCQkJCQkgIE5VTEwpOwotCQkJaWYgKHJjKSB7Ci0JCQkJYnNlYy0+dW5zYWZlID0gMTsKLQkJCQlyZXR1cm47CisJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlcjsKKwkJCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqc2VjOworCQkJdTMyIHB0c2lkID0gMDsKKworCQkJcmN1X3JlYWRfbG9jaygpOworCQkJdHJhY2VyID0gdGFza190cmFjZXJfdGFzayhjdXJyZW50KTsKKwkJCWlmIChsaWtlbHkodHJhY2VyICE9IE5VTEwpKSB7CisJCQkJc2VjID0gdHJhY2VyLT5zZWN1cml0eTsKKwkJCQlwdHNpZCA9IHNlYy0+c2lkOworCQkJfQorCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJCWlmIChwdHNpZCAhPSAwKSB7CisJCQkJcmMgPSBhdmNfaGFzX3Blcm0ocHRzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywKKwkJCQkJCSAgUFJPQ0VTU19fUFRSQUNFLCBOVUxMKTsKKwkJCQlpZiAocmMpIHsKKwkJCQkJYnNlYy0+dW5zYWZlID0gMTsKKwkJCQkJcmV0dXJuOworCQkJCX0KIAkJCX0KIAkJfQogCQl0c2VjLT5zaWQgPSBzaWQ7CkBAIC0yMTc2LDcgKzIyNTAsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgUkxJTV9OTElNSVRTOyBpKyspIHsKIAkJCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW0gKyBpOwogCQkJaW5pdHJsaW0gPSBpbml0X3Rhc2suc2lnbmFsLT5ybGltK2k7Ci0JCQlybGltLT5ybGltX2N1ciA9IG1pbihybGltLT5ybGltX21heCxpbml0cmxpbS0+cmxpbV9jdXIpOworCQkJcmxpbS0+cmxpbV9jdXIgPSBtaW4ocmxpbS0+cmxpbV9tYXgsIGluaXRybGltLT5ybGltX2N1cik7CiAJCX0KIAkJaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSB7CiAJCQkvKgpAQCAtMjIxNCwxMCArMjI4OCwxMCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X29wdGlvbihjaGFyICpvcHRpb24sIGludCBsZW4pCiB7Ci0JcmV0dXJuIChtYXRjaF9wcmVmaXgoImNvbnRleHQ9Iiwgc2l6ZW9mKCJjb250ZXh0PSIpLTEsIG9wdGlvbiwgbGVuKSB8fAotCSAgICAgICAgbWF0Y2hfcHJlZml4KCJmc2NvbnRleHQ9Iiwgc2l6ZW9mKCJmc2NvbnRleHQ9IiktMSwgb3B0aW9uLCBsZW4pIHx8Ci0JICAgICAgICBtYXRjaF9wcmVmaXgoImRlZmNvbnRleHQ9Iiwgc2l6ZW9mKCJkZWZjb250ZXh0PSIpLTEsIG9wdGlvbiwgbGVuKSB8fAotCQltYXRjaF9wcmVmaXgoInJvb3Rjb250ZXh0PSIsIHNpemVvZigicm9vdGNvbnRleHQ9IiktMSwgb3B0aW9uLCBsZW4pKTsKKwlyZXR1cm4gKG1hdGNoX3ByZWZpeChDT05URVhUX1NUUiwgc2l6ZW9mKENPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKKwkJbWF0Y2hfcHJlZml4KEZTQ09OVEVYVF9TVFIsIHNpemVvZihGU0NPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKKwkJbWF0Y2hfcHJlZml4KERFRkNPTlRFWFRfU1RSLCBzaXplb2YoREVGQ09OVEVYVF9TVFIpLTEsIG9wdGlvbiwgbGVuKSB8fAorCQltYXRjaF9wcmVmaXgoUk9PVENPTlRFWFRfU1RSLCBzaXplb2YoUk9PVENPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGFrZV9vcHRpb24oY2hhciAqKnRvLCBjaGFyICpmcm9tLCBpbnQgKmZpcnN0LCBpbnQgbGVuKQpAQCAtMjIzMSwxNiArMjMwNSwxNSBAQAogCSp0byArPSBsZW47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0YWtlX3NlbGludXhfb3B0aW9uKGNoYXIgKip0bywgY2hhciAqZnJvbSwgaW50ICpmaXJzdCwgCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YWtlX3NlbGludXhfb3B0aW9uKGNoYXIgKip0bywgY2hhciAqZnJvbSwgaW50ICpmaXJzdCwKKwkJCQkgICAgICAgaW50IGxlbikKIHsKIAlpbnQgY3VycmVudF9zaXplID0gMDsKIAogCWlmICghKmZpcnN0KSB7CiAJCSoqdG8gPSAnfCc7CiAJCSp0byArPSAxOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCSpmaXJzdCA9IDA7CiAKIAl3aGlsZSAoY3VycmVudF9zaXplIDwgbGVuKSB7CkBAIC0yMjUzLDcgKzIzMjYsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3NiX2NvcHlfZGF0YShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgdm9pZCAqb3JpZywgdm9pZCAqY29weSkKK3N0YXRpYyBpbnQgc2VsaW51eF9zYl9jb3B5X2RhdGEoY2hhciAqb3JpZywgY2hhciAqY29weSkKIHsKIAlpbnQgZm5vc2VjLCBmc2VjLCByYyA9IDA7CiAJY2hhciAqaW5fc2F2ZSwgKmluX2N1cnIsICppbl9lbmQ7CkBAIC0yMjYzLDEyICsyMzM2LDYgQEAKIAlpbl9jdXJyID0gb3JpZzsKIAlzZWNfY3VyciA9IGNvcHk7CiAKLQkvKiBCaW5hcnkgbW91bnQgZGF0YToganVzdCBjb3B5ICovCi0JaWYgKHR5cGUtPmZzX2ZsYWdzICYgRlNfQklOQVJZX01PVU5UREFUQSkgewotCQljb3B5X3BhZ2Uoc2VjX2N1cnIsIGluX2N1cnIpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlub3NlYyA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghbm9zZWMpIHsKIAkJcmMgPSAtRU5PTUVNOwpAQCAtMjMxMCw3ICsyMzc3LDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLEZTKTsKKwlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCWFkLnUuZnMucGF0aC5kZW50cnkgPSBzYi0+c19yb290OwogCXJldHVybiBzdXBlcmJsb2NrX2hhc19wZXJtKGN1cnJlbnQsIHNiLCBGSUxFU1lTVEVNX19NT1VOVCwgJmFkKTsKIH0KQEAgLTIzMTksMTYgKzIzODYsMTYgQEAKIHsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCxGUyk7CisJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKIAlhZC51LmZzLnBhdGguZGVudHJ5ID0gZGVudHJ5LT5kX3NiLT5zX3Jvb3Q7CiAJcmV0dXJuIHN1cGVyYmxvY2tfaGFzX3Blcm0oY3VycmVudCwgZGVudHJ5LT5kX3NiLCBGSUxFU1lTVEVNX19HRVRBVFRSLCAmYWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfbW91bnQoY2hhciAqIGRldl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuYW1laWRhdGEgKm5kLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIGRhdGEpCitzdGF0aWMgaW50IHNlbGludXhfbW91bnQoY2hhciAqZGV2X25hbWUsCisJCQkgc3RydWN0IG5hbWVpZGF0YSAqbmQsCisJCQkgY2hhciAqdHlwZSwKKwkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJjOwogCkBAIC0yMzM4LDEwICsyNDA1LDEwIEBACiAKIAlpZiAoZmxhZ3MgJiBNU19SRU1PVU5UKQogCQlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjdXJyZW50LCBuZC0+cGF0aC5tbnQtPm1udF9zYiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRVNZU1RFTV9fUkVNT1VOVCwgTlVMTCk7CisJCQkJCSAgIEZJTEVTWVNURU1fX1JFTU9VTlQsIE5VTEwpOwogCWVsc2UKIAkJcmV0dXJuIGRlbnRyeV9oYXNfcGVybShjdXJyZW50LCBuZC0+cGF0aC5tbnQsIG5kLT5wYXRoLmRlbnRyeSwKLQkJICAgICAgICAgICAgICAgICAgICAgICBGSUxFX19NT1VOVE9OKTsKKwkJCQkgICAgICAgRklMRV9fTU9VTlRPTik7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF91bW91bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBmbGFncykKQEAgLTIzNTIsOCArMjQxOSw4IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjdXJyZW50LG1udC0+bW50X3NiLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVTWVNURU1fX1VOTU9VTlQsTlVMTCk7CisJcmV0dXJuIHN1cGVyYmxvY2tfaGFzX3Blcm0oY3VycmVudCwgbW50LT5tbnRfc2IsCisJCQkJICAgRklMRVNZU1RFTV9fVU5NT1VOVCwgTlVMTCk7CiB9CiAKIC8qIGlub2RlIHNlY3VyaXR5IG9wZXJhdGlvbnMgKi8KQEAgLTIzOTMsNyArMjQ2MCw3IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICIKIAkJCSAgICAgICAic2VjdXJpdHlfdHJhbnNpdGlvbl9zaWQgZmFpbGVkLCByYz0lZCAoZGV2PSVzICIKIAkJCSAgICAgICAiaW5vPSVsZClcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLAorCQkJICAgICAgIF9fZnVuY19fLAogCQkJICAgICAgIC1yYywgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KQEAgLTI0MTEsNyArMjQ3OCw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChuYW1lKSB7Ci0JCW5hbWVwID0ga3N0cmR1cChYQVRUUl9TRUxJTlVYX1NVRkZJWCwgR0ZQX0tFUk5FTCk7CisJCW5hbWVwID0ga3N0cmR1cChYQVRUUl9TRUxJTlVYX1NVRkZJWCwgR0ZQX05PRlMpOwogCQlpZiAoIW5hbWVwKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCSpuYW1lID0gbmFtZXA7CkBAIC0yNDM5LDcgKzI1MDYsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfbGluayhvbGRfZGVudHJ5LGRpcixuZXdfZGVudHJ5KTsKKwlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CkBAIC0yNDgyLDcgKzI1NDksNyBAQAogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKKwkJCQlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gbWF5X3JlbmFtZShvbGRfaW5vZGUsIG9sZF9kZW50cnksIG5ld19pbm9kZSwgbmV3X2RlbnRyeSk7CiB9CkBAIC0yNDk2LDcgKzI1NjMsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfZm9sbG93X2xpbmsoZGVudHJ5LG5hbWVpZGF0YSk7CisJcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9mb2xsb3dfbGluayhkZW50cnksIG5hbWVpZGF0YSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJcmV0dXJuIGRlbnRyeV9oYXNfcGVybShjdXJyZW50LCBOVUxMLCBkZW50cnksIEZJTEVfX1JFQUQpOwpAQCAtMjUxNyw3ICsyNTg0LDcgQEAKIAl9CiAKIAlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3VycmVudCwgaW5vZGUsCi0JCQkgICAgICAgZmlsZV9tYXNrX3RvX2F2KGlub2RlLT5pX21vZGUsIG1hc2spLCBOVUxMKTsKKwkJCSAgICAgICBvcGVuX2ZpbGVfbWFza190b19hdihpbm9kZS0+aV9tb2RlLCBtYXNrKSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKQEAgLTI1ODIsNyArMjY0OSw3IEBACiAJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsRlMpOworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CiAJYWQudS5mcy5wYXRoLmRlbnRyeSA9IGRlbnRyeTsKIAogCXJjID0gYXZjX2hhc19wZXJtKHRzZWMtPnNpZCwgaXNlYy0+c2lkLCBpc2VjLT5zY2xhc3MsCkBAIC0yNjAwLDcgKzI2NjcsNyBAQAogCQlyZXR1cm4gcmM7CiAKIAlyYyA9IHNlY3VyaXR5X3ZhbGlkYXRlX3RyYW5zaXRpb24oaXNlYy0+c2lkLCBuZXdzaWQsIHRzZWMtPnNpZCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNlYy0+c2NsYXNzKTsKKwkJCQkJICBpc2VjLT5zY2xhc3MpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yNjEyLDcgKzI2NzksNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X2lub2RlX3Bvc3Rfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQorCQkJCQl2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKQEAgLTI2MjcsNyArMjY5NCw3IEBACiAJcmMgPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZCh2YWx1ZSwgc2l6ZSwgJm5ld3NpZCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgdW5hYmxlIHRvIG9idGFpbiBTSUQgZm9yIGNvbnRleHQgIgotCQkgICAgICAgIiVzLCByYz0lZFxuIiwgX19GVU5DVElPTl9fLCAoY2hhciopdmFsdWUsIC1yYyk7CisJCSAgICAgICAiJXMsIHJjPSVkXG4iLCBfX2Z1bmNfXywgKGNoYXIgKil2YWx1ZSwgLXJjKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjYzNSwxNyArMjcwMiwxNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2dldHhhdHRyIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lKQogewogCXJldHVybiBkZW50cnlfaGFzX3Blcm0oY3VycmVudCwgTlVMTCwgZGVudHJ5LCBGSUxFX19HRVRBVFRSKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpc3R4YXR0ciAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJcmV0dXJuIGRlbnRyeV9oYXNfcGVybShjdXJyZW50LCBOVUxMLCBkZW50cnksIEZJTEVfX0dFVEFUVFIpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcmVtb3ZleGF0dHIgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSkKK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKm5hbWUpCiB7CiAJaWYgKHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NFTElOVVgpKQogCQlyZXR1cm4gc2VsaW51eF9pbm9kZV9zZXRvdGhlcnhhdHRyKGRlbnRyeSwgbmFtZSk7CkBAIC0yNjg2LDcgKzI3NTMsNyBAQAogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc2V0c2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKKwkJCQkgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAl1MzIgbmV3c2lkOwpAQCAtMjY5OCw3ICsyNzY1LDcgQEAKIAlpZiAoIXZhbHVlIHx8ICFzaXplKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCXJjID0gc2VjdXJpdHlfY29udGV4dF90b19zaWQoKHZvaWQqKXZhbHVlLCBzaXplLCAmbmV3c2lkKTsKKwlyYyA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKCh2b2lkICopdmFsdWUsIHNpemUsICZuZXdzaWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yNzI0LDYgKzI3OTEsMTIgQEAKIAlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+aW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKIH0KIAorc3RhdGljIHZvaWQgc2VsaW51eF9pbm9kZV9nZXRzZWNpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNlY2lkKQoreworCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKKwkqc2VjaWQgPSBpc2VjLT5zaWQ7Cit9CisKIC8qIGZpbGUgc2VjdXJpdHkgb3BlcmF0aW9ucyAqLwogCiBzdGF0aWMgaW50IHNlbGludXhfcmV2YWxpZGF0ZV9maWxlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQpAQCAtMjc4Myw0MiArMjg1Niw0MSBAQAogCWludCBlcnJvciA9IDA7CiAKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIEZJT05SRUFEOgotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBGSUJNQVA6Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIEZJR0VUQlNaOgotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBFWFQyX0lPQ19HRVRGTEFHUzoKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgRVhUMl9JT0NfR0VUVkVSU0lPTjoKLQkJCWVycm9yID0gZmlsZV9oYXNfcGVybShjdXJyZW50LCBmaWxlLCBGSUxFX19HRVRBVFRSKTsKLQkJCWJyZWFrOworCWNhc2UgRklPTlJFQUQ6CisJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBGSUJNQVA6CisJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBGSUdFVEJTWjoKKwkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEVYVDJfSU9DX0dFVEZMQUdTOgorCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRVhUMl9JT0NfR0VUVkVSU0lPTjoKKwkJZXJyb3IgPSBmaWxlX2hhc19wZXJtKGN1cnJlbnQsIGZpbGUsIEZJTEVfX0dFVEFUVFIpOworCQlicmVhazsKIAotCQljYXNlIEVYVDJfSU9DX1NFVEZMQUdTOgotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBFWFQyX0lPQ19TRVRWRVJTSU9OOgotCQkJZXJyb3IgPSBmaWxlX2hhc19wZXJtKGN1cnJlbnQsIGZpbGUsIEZJTEVfX1NFVEFUVFIpOwotCQkJYnJlYWs7CisJY2FzZSBFWFQyX0lPQ19TRVRGTEFHUzoKKwkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEVYVDJfSU9DX1NFVFZFUlNJT046CisJCWVycm9yID0gZmlsZV9oYXNfcGVybShjdXJyZW50LCBmaWxlLCBGSUxFX19TRVRBVFRSKTsKKwkJYnJlYWs7CiAKLQkJLyogc3lzX2lvY3RsKCkgY2hlY2tzICovCi0JCWNhc2UgRklPTkJJTzoKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgRklPQVNZTkM6Ci0JCQllcnJvciA9IGZpbGVfaGFzX3Blcm0oY3VycmVudCwgZmlsZSwgMCk7Ci0JCQlicmVhazsKKwkvKiBzeXNfaW9jdGwoKSBjaGVja3MgKi8KKwljYXNlIEZJT05CSU86CisJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBGSU9BU1lOQzoKKwkJZXJyb3IgPSBmaWxlX2hhc19wZXJtKGN1cnJlbnQsIGZpbGUsIDApOworCQlicmVhazsKIAotCSAgICAgICAgY2FzZSBLRFNLQkVOVDoKLQkgICAgICAgIGNhc2UgS0RTS0JTRU5UOgotCQkJZXJyb3IgPSB0YXNrX2hhc19jYXBhYmlsaXR5KGN1cnJlbnQsQ0FQX1NZU19UVFlfQ09ORklHKTsKLQkJCWJyZWFrOworCWNhc2UgS0RTS0JFTlQ6CisJY2FzZSBLRFNLQlNFTlQ6CisJCWVycm9yID0gdGFza19oYXNfY2FwYWJpbGl0eShjdXJyZW50LCBDQVBfU1lTX1RUWV9DT05GSUcpOworCQlicmVhazsKIAotCQkvKiBkZWZhdWx0IGNhc2UgYXNzdW1lcyB0aGF0IHRoZSBjb21tYW5kIHdpbGwgZ28KLQkJICogdG8gdGhlIGZpbGUncyBpb2N0bCgpIGZ1bmN0aW9uLgotCQkgKi8KLQkJZGVmYXVsdDoKLQkJCWVycm9yID0gZmlsZV9oYXNfcGVybShjdXJyZW50LCBmaWxlLCBGSUxFX19JT0NUTCk7Ci0KKwkvKiBkZWZhdWx0IGNhc2UgYXNzdW1lcyB0aGF0IHRoZSBjb21tYW5kIHdpbGwgZ28KKwkgKiB0byB0aGUgZmlsZSdzIGlvY3RsKCkgZnVuY3Rpb24uCisJICovCisJZGVmYXVsdDoKKwkJZXJyb3IgPSBmaWxlX2hhc19wZXJtKGN1cnJlbnQsIGZpbGUsIEZJTEVfX0lPQ1RMKTsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjg1OSw3ICsyOTMxLDcgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGFkZHJfb25seSkKIHsKIAlpbnQgcmMgPSAwOwotCXUzMiBzaWQgPSAoKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCopKGN1cnJlbnQtPnNlY3VyaXR5KSktPnNpZDsKKwl1MzIgc2lkID0gKChzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKikoY3VycmVudC0+c2VjdXJpdHkpKS0+c2lkOwogCiAJaWYgKGFkZHIgPCBtbWFwX21pbl9hZGRyKQogCQlyYyA9IGF2Y19oYXNfcGVybShzaWQsIHNpZCwgU0VDQ0xBU1NfTUVNUFJPVEVDVCwKQEAgLTI5MjgsMzkgKzMwMDAsMzkgQEAKIAlpbnQgZXJyID0gMDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JICAgICAgICBjYXNlIEZfU0VURkw6Ci0JCQlpZiAoIWZpbGUtPmZfcGF0aC5kZW50cnkgfHwgIWZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQorCWNhc2UgRl9TRVRGTDoKKwkJaWYgKCFmaWxlLT5mX3BhdGguZGVudHJ5IHx8ICFmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KIAotCQkJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICEoYXJnICYgT19BUFBFTkQpKSB7Ci0JCQkJZXJyID0gZmlsZV9oYXNfcGVybShjdXJyZW50LCBmaWxlLEZJTEVfX1dSSVRFKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCSAgICAgICAgY2FzZSBGX1NFVE9XTjoKLQkgICAgICAgIGNhc2UgRl9TRVRTSUc6Ci0JICAgICAgICBjYXNlIEZfR0VURkw6Ci0JICAgICAgICBjYXNlIEZfR0VUT1dOOgotCSAgICAgICAgY2FzZSBGX0dFVFNJRzoKLQkJCS8qIEp1c3QgY2hlY2sgRkRfX1VTRSBwZXJtaXNzaW9uICovCi0JCQllcnIgPSBmaWxlX2hhc19wZXJtKGN1cnJlbnQsIGZpbGUsIDApOworCQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShhcmcgJiBPX0FQUEVORCkpIHsKKwkJCWVyciA9IGZpbGVfaGFzX3Blcm0oY3VycmVudCwgZmlsZSwgRklMRV9fV1JJVEUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgRl9HRVRMSzoKLQkJY2FzZSBGX1NFVExLOgotCSAgICAgICAgY2FzZSBGX1NFVExLVzoKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEZfU0VUT1dOOgorCWNhc2UgRl9TRVRTSUc6CisJY2FzZSBGX0dFVEZMOgorCWNhc2UgRl9HRVRPV046CisJY2FzZSBGX0dFVFNJRzoKKwkJLyogSnVzdCBjaGVjayBGRF9fVVNFIHBlcm1pc3Npb24gKi8KKwkJZXJyID0gZmlsZV9oYXNfcGVybShjdXJyZW50LCBmaWxlLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBGX0dFVExLOgorCWNhc2UgRl9TRVRMSzoKKwljYXNlIEZfU0VUTEtXOgogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKLQkgICAgICAgIGNhc2UgRl9HRVRMSzY0OgotCQljYXNlIEZfU0VUTEs2NDoKLQkgICAgICAgIGNhc2UgRl9TRVRMS1c2NDoKKwljYXNlIEZfR0VUTEs2NDoKKwljYXNlIEZfU0VUTEs2NDoKKwljYXNlIEZfU0VUTEtXNjQ6CiAjZW5kaWYKLQkJCWlmICghZmlsZS0+Zl9wYXRoLmRlbnRyeSB8fCAhZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQllcnIgPSBmaWxlX2hhc19wZXJtKGN1cnJlbnQsIGZpbGUsIEZJTEVfX0xPQ0spOworCQlpZiAoIWZpbGUtPmZfcGF0aC5kZW50cnkgfHwgIWZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHsKKwkJCWVyciA9IC1FSU5WQUw7CiAJCQlicmVhazsKKwkJfQorCQllcnIgPSBmaWxlX2hhc19wZXJtKGN1cnJlbnQsIGZpbGUsIEZJTEVfX0xPQ0spOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMjk4MSwxMyArMzA1MywxMyBAQAogc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfc2VuZF9zaWdpb3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkJICAgICAgIHN0cnVjdCBmb3duX3N0cnVjdCAqZm93biwgaW50IHNpZ251bSkKIHsKLSAgICAgICAgc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IGZpbGUgKmZpbGU7CiAJdTMyIHBlcm07CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjOwogCXN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCAqZnNlYzsKIAogCS8qIHN0cnVjdCBmb3duX3N0cnVjdCBpcyBuZXZlciBvdXRzaWRlIHRoZSBjb250ZXh0IG9mIGEgc3RydWN0IGZpbGUgKi8KLSAgICAgICAgZmlsZSA9IGNvbnRhaW5lcl9vZihmb3duLCBzdHJ1Y3QgZmlsZSwgZl9vd25lcik7CisJZmlsZSA9IGNvbnRhaW5lcl9vZihmb3duLCBzdHJ1Y3QgZmlsZSwgZl9vd25lcik7CiAKIAl0c2VjID0gdHNrLT5zZWN1cml0eTsKIAlmc2VjID0gZmlsZS0+Zl9zZWN1cml0eTsKQEAgLTMwNjgsMTEgKzMxNDAsNiBAQAogCXRzZWMyLT5rZXljcmVhdGVfc2lkID0gdHNlYzEtPmtleWNyZWF0ZV9zaWQ7CiAJdHNlYzItPnNvY2tjcmVhdGVfc2lkID0gdHNlYzEtPnNvY2tjcmVhdGVfc2lkOwogCi0JLyogUmV0YWluIHB0cmFjZXIgU0lEIGFjcm9zcyBmb3JrLCBpZiBhbnkuCi0JICAgVGhpcyB3aWxsIGJlIHJlc2V0IGJ5IHRoZSBwdHJhY2UgaG9vayB1cG9uIGFueQotCSAgIHN1YnNlcXVlbnQgcHRyYWNlX2F0dGFjaCBvcGVyYXRpb25zLiAqLwotCXRzZWMyLT5wdHJhY2Vfc2lkID0gdHNlYzEtPnB0cmFjZV9zaWQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA5NCw3ICszMTYxLDcgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfcG9zdF9zZXR1aWQodWlkX3QgaWQwLCB1aWRfdCBpZDEsIHVpZF90IGlkMiwgaW50IGZsYWdzKQogewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT50YXNrX3Bvc3Rfc2V0dWlkKGlkMCxpZDEsaWQyLGZsYWdzKTsKKwlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+dGFza19wb3N0X3NldHVpZChpZDAsIGlkMSwgaWQyLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldGdpZChnaWRfdCBpZDAsIGdpZF90IGlkMSwgZ2lkX3QgaWQyLCBpbnQgZmxhZ3MpCkBAIC0zMTIwLDcgKzMxODcsOCBAQAogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X3Rhc2tfZ2V0c2VjaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgKnNlY2lkKQogewotCXNlbGludXhfZ2V0X3Rhc2tfc2lkKHAsIHNlY2lkKTsKKwlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBwLT5zZWN1cml0eTsKKwkqc2VjaWQgPSB0c2VjLT5zaWQ7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldGdyb3VwcyhzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbykKQEAgLTMxMzcsNyArMzIwNSw3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gdGFza19oYXNfcGVybShjdXJyZW50LHAsIFBST0NFU1NfX1NFVFNDSEVEKTsKKwlyZXR1cm4gdGFza19oYXNfcGVybShjdXJyZW50LCBwLCBQUk9DRVNTX19TRVRTQ0hFRCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldGlvcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpb3ByaW8pCkBAIC0zMjQxLDcgKzMzMDksNyBAQAogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X3Rhc2tfcmVwYXJlbnRfdG9faW5pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0gIAlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWM7CisJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjOwogCiAJc2Vjb25kYXJ5X29wcy0+dGFza19yZXBhcmVudF90b19pbml0KHApOwogCkBAIC0zMjg2LDExICszMzU0LDExIEBACiAJCSpwcm90byA9IGloLT5wcm90b2NvbDsKIAogCXN3aXRjaCAoaWgtPnByb3RvY29sKSB7Ci0gICAgICAgIGNhc2UgSVBQUk9UT19UQ1A6IHsKLSAgICAgICAgCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKKwljYXNlIElQUFJPVE9fVENQOiB7CisJCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKIAotICAgICAgICAJaWYgKG50b2hzKGloLT5mcmFnX29mZikgJiBJUF9PRkZTRVQpCi0gICAgICAgIAkJYnJlYWs7CisJCWlmIChudG9ocyhpaC0+ZnJhZ19vZmYpICYgSVBfT0ZGU0VUKQorCQkJYnJlYWs7CiAKIAkJb2Zmc2V0ICs9IGlobGVuOwogCQl0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKQEAgLTMzMDAsMjMgKzMzNjgsMjMgQEAKIAkJYWQtPnUubmV0LnNwb3J0ID0gdGgtPnNvdXJjZTsKIAkJYWQtPnUubmV0LmRwb3J0ID0gdGgtPmRlc3Q7CiAJCWJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIElQUFJPVE9fVURQOiB7Ci0gICAgICAgIAlzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7Ci0gICAgICAgIAkKLSAgICAgICAgCWlmIChudG9ocyhpaC0+ZnJhZ19vZmYpICYgSVBfT0ZGU0VUKQotICAgICAgICAJCWJyZWFrOwotICAgICAgICAJCQotCQlvZmZzZXQgKz0gaWhsZW47Ci0gICAgICAgIAl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF91ZHBoKSwgJl91ZHBoKTsKLQkJaWYgKHVoID09IE5VTEwpCi0JCQlicmVhazsJCisJfQogCi0gICAgICAgIAlhZC0+dS5uZXQuc3BvcnQgPSB1aC0+c291cmNlOwotICAgICAgICAJYWQtPnUubmV0LmRwb3J0ID0gdWgtPmRlc3Q7Ci0gICAgICAgIAlicmVhazsKLSAgICAgICAgfQorCWNhc2UgSVBQUk9UT19VRFA6IHsKKwkJc3RydWN0IHVkcGhkciBfdWRwaCwgKnVoOworCisJCWlmIChudG9ocyhpaC0+ZnJhZ19vZmYpICYgSVBfT0ZGU0VUKQorCQkJYnJlYWs7CisKKwkJb2Zmc2V0ICs9IGlobGVuOworCQl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF91ZHBoKSwgJl91ZHBoKTsKKwkJaWYgKHVoID09IE5VTEwpCisJCQlicmVhazsKKworCQlhZC0+dS5uZXQuc3BvcnQgPSB1aC0+c291cmNlOworCQlhZC0+dS5uZXQuZHBvcnQgPSB1aC0+ZGVzdDsKKwkJYnJlYWs7CisJfQogCiAJY2FzZSBJUFBST1RPX0RDQ1A6IHsKIAkJc3RydWN0IGRjY3BfaGRyIF9kY2NwaCwgKmRoOwpAQCAtMzMzMiwxMSArMzQwMCwxMSBAQAogCQlhZC0+dS5uZXQuc3BvcnQgPSBkaC0+ZGNjcGhfc3BvcnQ7CiAJCWFkLT51Lm5ldC5kcG9ydCA9IGRoLT5kY2NwaF9kcG9ydDsKIAkJYnJlYWs7Ci0gICAgICAgIH0KKwl9CiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgCWJyZWFrOwotICAgICAgICB9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0zMzcxLDcgKzM0MzksNyBAQAogCiAJc3dpdGNoIChuZXh0aGRyKSB7CiAJY2FzZSBJUFBST1RPX1RDUDogewotICAgICAgICAJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRoOworCQlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CiAKIAkJdGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfdGNwaCksICZfdGNwaCk7CiAJCWlmICh0aCA9PSBOVUxMKQpAQCAtMzQwNCw3ICszNDcyLDcgQEAKIAkJYWQtPnUubmV0LnNwb3J0ID0gZGgtPmRjY3BoX3Nwb3J0OwogCQlhZC0+dS5uZXQuZHBvcnQgPSBkaC0+ZGNjcGhfZHBvcnQ7CiAJCWJyZWFrOwotICAgICAgICB9CisJfQogCiAJLyogaW5jbHVkZXMgZnJhZ21lbnRzICovCiAJZGVmYXVsdDoKQEAgLTM1MDIsNyArMzU3MCw3IEBACiAJaWYgKGlzZWMtPnNpZCA9PSBTRUNJTklUU0lEX0tFUk5FTCkKIAkJZ290byBvdXQ7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCxORVQpOworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCWFkLnUubmV0LnNrID0gc29jay0+c2s7CiAJZXJyID0gYXZjX2hhc19wZXJtKHRzZWMtPnNpZCwgaXNlYy0+c2lkLCBpc2VjLT5zY2xhc3MsIHBlcm1zLCAmYWQpOwogCkBAIC0zNjA4LDEzICszNjc2LDExIEBACiAJCQlpbmV0X2dldF9sb2NhbF9wb3J0X3JhbmdlKCZsb3csICZoaWdoKTsKIAogCQkJaWYgKHNudW0gPCBtYXgoUFJPVF9TT0NLLCBsb3cpIHx8IHNudW0gPiBoaWdoKSB7Ci0JCQkJZXJyID0gc2VjdXJpdHlfcG9ydF9zaWQoc2stPnNrX2ZhbWlseSwKLQkJCQkJCQlzay0+c2tfdHlwZSwKLQkJCQkJCQlzay0+c2tfcHJvdG9jb2wsIHNudW0sCi0JCQkJCQkJJnNpZCk7CisJCQkJZXJyID0gc2VsX25ldHBvcnRfc2lkKHNrLT5za19wcm90b2NvbCwKKwkJCQkJCSAgICAgIHNudW0sICZzaWQpOwogCQkJCWlmIChlcnIpCiAJCQkJCWdvdG8gb3V0OwotCQkJCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLE5FVCk7CisJCQkJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CiAJCQkJYWQudS5uZXQuc3BvcnQgPSBodG9ucyhzbnVtKTsKIAkJCQlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CiAJCQkJZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgc2lkLApAQCAtMzYyNCwxMiArMzY5MCwxMiBAQAogCQkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQotCQkKLQkJc3dpdGNoKGlzZWMtPnNjbGFzcykgeworCisJCXN3aXRjaCAoaXNlYy0+c2NsYXNzKSB7CiAJCWNhc2UgU0VDQ0xBU1NfVENQX1NPQ0tFVDoKIAkJCW5vZGVfcGVybSA9IFRDUF9TT0NLRVRfX05PREVfQklORDsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSBTRUNDTEFTU19VRFBfU09DS0VUOgogCQkJbm9kZV9wZXJtID0gVURQX1NPQ0tFVF9fTk9ERV9CSU5EOwogCQkJYnJlYWs7CkBAIC0zNjQyLDEyICszNzA4LDEyIEBACiAJCQlub2RlX3Blcm0gPSBSQVdJUF9TT0NLRVRfX05PREVfQklORDsKIAkJCWJyZWFrOwogCQl9Ci0JCQorCiAJCWVyciA9IHNlbF9uZXRub2RlX3NpZChhZGRycCwgZmFtaWx5LCAmc2lkKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQkKLQkJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsTkVUKTsKKworCQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAkJYWQudS5uZXQuc3BvcnQgPSBodG9ucyhzbnVtKTsKIAkJYWQudS5uZXQuZmFtaWx5ID0gZmFtaWx5OwogCkBAIC0zNjU3LDcgKzM3MjMsNyBAQAogCQkJaXB2Nl9hZGRyX2NvcHkoJmFkLnUubmV0LnY2aW5mby5zYWRkciwgJmFkZHI2LT5zaW42X2FkZHIpOwogCiAJCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIHNpZCwKLQkJICAgICAgICAgICAgICAgICAgIGlzZWMtPnNjbGFzcywgbm9kZV9wZXJtLCAmYWQpOworCQkJCSAgIGlzZWMtPnNjbGFzcywgbm9kZV9wZXJtLCAmYWQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMzY5OSwxNSArMzc2NSwxNCBAQAogCQkJc251bSA9IG50b2hzKGFkZHI2LT5zaW42X3BvcnQpOwogCQl9CiAKLQkJZXJyID0gc2VjdXJpdHlfcG9ydF9zaWQoc2stPnNrX2ZhbWlseSwgc2stPnNrX3R5cGUsCi0JCQkJCXNrLT5za19wcm90b2NvbCwgc251bSwgJnNpZCk7CisJCWVyciA9IHNlbF9uZXRwb3J0X3NpZChzay0+c2tfcHJvdG9jb2wsIHNudW0sICZzaWQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKIAkJcGVybSA9IChpc2VjLT5zY2xhc3MgPT0gU0VDQ0xBU1NfVENQX1NPQ0tFVCkgPwogCQkgICAgICAgVENQX1NPQ0tFVF9fTkFNRV9DT05ORUNUIDogRENDUF9TT0NLRVRfX05BTUVfQ09OTkVDVDsKIAotCQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCxORVQpOworCQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAkJYWQudS5uZXQuZHBvcnQgPSBodG9ucyhzbnVtKTsKIAkJYWQudS5uZXQuZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKIAkJZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgc2lkLCBpc2VjLT5zY2xhc3MsIHBlcm0sICZhZCk7CkBAIC0zNzQ1LDcgKzM4MTAsNyBAQAogfQogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotIAkJCQkgIGludCBzaXplKQorCQkJCSAgaW50IHNpemUpCiB7CiAJaW50IHJjOwogCkBAIC0zNzcyLDcgKzM4MzcsNyBAQAogCXJldHVybiBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgU09DS0VUX19HRVRBVFRSKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssaW50IGxldmVsLGludCBvcHRuYW1lKQorc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUpCiB7CiAJaW50IGVycjsKIApAQCAtMzgxMSw3ICszODc2LDcgQEAKIAlpc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKIAlvdGhlcl9pc2VjID0gU09DS19JTk9ERShvdGhlciktPmlfc2VjdXJpdHk7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCxORVQpOworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCWFkLnUubmV0LnNrID0gb3RoZXItPnNrOwogCiAJZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgb3RoZXJfaXNlYy0+c2lkLApAQCAtMzgyMyw3ICszODg4LDcgQEAKIAkvKiBjb25uZWN0aW5nIHNvY2tldCAqLwogCXNzZWMgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7CiAJc3NlYy0+cGVlcl9zaWQgPSBvdGhlcl9pc2VjLT5zaWQ7Ci0JCisKIAkvKiBzZXJ2ZXIgY2hpbGQgc29ja2V0ICovCiAJc3NlYyA9IG5ld3NrLT5za19zZWN1cml0eTsKIAlzc2VjLT5wZWVyX3NpZCA9IGlzZWMtPnNpZDsKQEAgLTM4NDMsNyArMzkwOCw3IEBACiAJaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7CiAJb3RoZXJfaXNlYyA9IFNPQ0tfSU5PREUob3RoZXIpLT5pX3NlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsTkVUKTsKKwlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAlhZC51Lm5ldC5zayA9IG90aGVyLT5zazsKIAogCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIG90aGVyX2lzZWMtPnNpZCwKQEAgLTM5MjEsNyArMzk4Niw3IEBACiAJZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgaWZfc2lkLCBTRUNDTEFTU19ORVRJRiwgbmV0aWZfcGVybSwgYWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JCisKIAllcnIgPSBzZWxfbmV0bm9kZV9zaWQoYWRkcnAsIGZhbWlseSwgJm5vZGVfc2lkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMzkzMSw5ICszOTk2LDggQEAKIAogCWlmICghcmVjdl9wZXJtKQogCQlyZXR1cm4gMDsKLQllcnIgPSBzZWN1cml0eV9wb3J0X3NpZChzay0+c2tfZmFtaWx5LCBzay0+c2tfdHlwZSwKLQkJCQlzay0+c2tfcHJvdG9jb2wsIG50b2hzKGFkLT51Lm5ldC5zcG9ydCksCi0JCQkJJnBvcnRfc2lkKTsKKwllcnIgPSBzZWxfbmV0cG9ydF9zaWQoc2stPnNrX3Byb3RvY29sLAorCQkJICAgICAgbnRvaHMoYWQtPnUubmV0LnNwb3J0KSwgJnBvcnRfc2lkKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiU0VMaW51eDogZmFpbHVyZSBpbiIKQEAgLTQwNzMsNyArNDEzNyw3IEBACiAJCWVyciA9IC1FRkFVTFQ7CiAKIAlrZnJlZShzY29udGV4dCk7Ci1vdXQ6CQorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQwOTAsNyArNDE1NCw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHNvY2sgJiYgZmFtaWx5ID09IFBGX1VOSVgpCi0JCXNlbGludXhfZ2V0X2lub2RlX3NpZChTT0NLX0lOT0RFKHNvY2spLCAmcGVlcl9zZWNpZCk7CisJCXNlbGludXhfaW5vZGVfZ2V0c2VjaWQoU09DS19JTk9ERShzb2NrKSwgJnBlZXJfc2VjaWQpOwogCWVsc2UgaWYgKHNrYikKIAkJc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBmYW1pbHksICZwZWVyX3NlY2lkKTsKIApAQCAtNDEyMCw3ICs0MTg0LDcgQEAKIAluZXdzc2VjLT5wZWVyX3NpZCA9IHNzZWMtPnBlZXJfc2lkOwogCW5ld3NzZWMtPnNjbGFzcyA9IHNzZWMtPnNjbGFzczsKIAotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2Nsb25lKHNzZWMsIG5ld3NzZWMpOworCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KG5ld3NzZWMsIG5ld3NrLT5za19mYW1pbHkpOwogfQogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X3NrX2dldHNlY2lkKHN0cnVjdCBzb2NrICpzaywgdTMyICpzZWNpZCkKQEAgLTQxMzQsNyArNDE5OCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZWxpbnV4X3NvY2tfZ3JhZnQoc3RydWN0IHNvY2sqIHNrLCBzdHJ1Y3Qgc29ja2V0ICpwYXJlbnQpCitzdGF0aWMgdm9pZCBzZWxpbnV4X3NvY2tfZ3JhZnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpwYXJlbnQpCiB7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IFNPQ0tfSU5PREUocGFyZW50KS0+aV9zZWN1cml0eTsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKQEAgLTQyMTEsMTMgKzQyNzUsMTMgQEAKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gc2stPnNrX3NvY2tldDsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKLQkKKwogCWlmIChza2ItPmxlbiA8IE5MTVNHX1NQQUNFKDApKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAlubGggPSBubG1zZ19oZHIoc2tiKTsKLQkKKwogCWVyciA9IHNlbGludXhfbmxtc2dfbG9va3VwKGlzZWMtPnNjbGFzcywgbmxoLT5ubG1zZ190eXBlLCAmcGVybSk7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID09IC1FSU5WQUwpIHsKQEAgLTQzNDMsNyArNDQwNyw3IEBACiAJCXJldHVybiBlcnI7CiAJZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgaWZfc2lkLCBTRUNDTEFTU19ORVRJRiwgbmV0aWZfcGVybSwgYWQpOwogCQlyZXR1cm4gZXJyOwotCQkKKwogCWVyciA9IHNlbF9uZXRub2RlX3NpZChhZGRycCwgZmFtaWx5LCAmbm9kZV9zaWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC00MzU0LDkgKzQ0MTgsOCBAQAogCWlmIChzZW5kX3Blcm0gIT0gMCkKIAkJcmV0dXJuIDA7CiAKLQllcnIgPSBzZWN1cml0eV9wb3J0X3NpZChzay0+c2tfZmFtaWx5LCBzay0+c2tfdHlwZSwKLQkJCQlzay0+c2tfcHJvdG9jb2wsIG50b2hzKGFkLT51Lm5ldC5kcG9ydCksCi0JCQkJJnBvcnRfc2lkKTsKKwllcnIgPSBzZWxfbmV0cG9ydF9zaWQoc2stPnNrX3Byb3RvY29sLAorCQkJICAgICAgbnRvaHMoYWQtPnUubmV0LmRwb3J0KSwgJnBvcnRfc2lkKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiU0VMaW51eDogZmFpbHVyZSBpbiIKQEAgLTQ1MjcsNyArNDU5MCw3IEBACiAJYWQudS5jYXAgPSBjYXBhYmlsaXR5OwogCiAJcmV0dXJuIGF2Y19oYXNfcGVybShORVRMSU5LX0NCKHNrYikuc2lkLCBORVRMSU5LX0NCKHNrYikuc2lkLAotCSAgICAgICAgICAgICAgICAgICAgU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQX1RPX01BU0soY2FwYWJpbGl0eSksICZhZCk7CisJCQkgICAgU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQX1RPX01BU0soY2FwYWJpbGl0eSksICZhZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXBjX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKQEAgLTQ1NDIsNyArNDYwNSw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaXNlYy0+c2NsYXNzID0gc2NsYXNzOwotCWlzZWMtPmlwY19wZXJtID0gcGVybTsKIAlpc2VjLT5zaWQgPSB0c2VjLT5zaWQ7CiAJcGVybS0+c2VjdXJpdHkgPSBpc2VjOwogCkBAIC00NTY0LDcgKzQ2MjYsNiBAQAogCWlmICghbXNlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltc2VjLT5tc2cgPSBtc2c7CiAJbXNlYy0+c2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7CiAJbXNnLT5zZWN1cml0eSA9IG1zZWM7CiAKQEAgLTQ2MjEsNyArNDY4Miw3IEBACiAJaXNlYyA9IG1zcS0+cV9wZXJtLnNlY3VyaXR5OwogCiAJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7Ci0gCWFkLnUuaXBjX2lkID0gbXNxLT5xX3Blcm0ua2V5OworCWFkLnUuaXBjX2lkID0gbXNxLT5xX3Blcm0ua2V5OwogCiAJcmMgPSBhdmNfaGFzX3Blcm0odHNlYy0+c2lkLCBpc2VjLT5zaWQsIFNFQ0NMQVNTX01TR1EsCiAJCQkgIE1TR1FfX0NSRUFURSwgJmFkKTsKQEAgLTQ2NTgsNyArNDcxOSw3IEBACiAJaW50IGVycjsKIAlpbnQgcGVybXM7CiAKLQlzd2l0Y2goY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIElQQ19JTkZPOgogCWNhc2UgTVNHX0lORk86CiAJCS8qIE5vIHNwZWNpZmljIG9iamVjdCwganVzdCBnZW5lcmFsIHN5c3RlbS13aWRlIGluZm9ybWF0aW9uLiAqLwpAQCAtNDc0Miw3ICs0ODAzLDcgQEAKIAltc2VjID0gbXNnLT5zZWN1cml0eTsKIAogCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBJUEMpOwotIAlhZC51LmlwY19pZCA9IG1zcS0+cV9wZXJtLmtleTsKKwlhZC51LmlwY19pZCA9IG1zcS0+cV9wZXJtLmtleTsKIAogCXJjID0gYXZjX2hhc19wZXJtKHRzZWMtPnNpZCwgaXNlYy0+c2lkLAogCQkJICBTRUNDTEFTU19NU0dRLCBNU0dRX19SRUFELCAmYWQpOwpAQCAtNDc2OCw3ICs0ODI5LDcgQEAKIAlpc2VjID0gc2hwLT5zaG1fcGVybS5zZWN1cml0eTsKIAogCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBJUEMpOwotIAlhZC51LmlwY19pZCA9IHNocC0+c2htX3Blcm0ua2V5OworCWFkLnUuaXBjX2lkID0gc2hwLT5zaG1fcGVybS5rZXk7CiAKIAlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGlzZWMtPnNpZCwgU0VDQ0xBU1NfU0hNLAogCQkJICBTSE1fX0NSRUFURSwgJmFkKTsKQEAgLTQ4MDYsNyArNDg2Nyw3IEBACiAJaW50IHBlcm1zOwogCWludCBlcnI7CiAKLQlzd2l0Y2goY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIElQQ19JTkZPOgogCWNhc2UgU0hNX0lORk86CiAJCS8qIE5vIHNwZWNpZmljIG9iamVjdCwganVzdCBnZW5lcmFsIHN5c3RlbS13aWRlIGluZm9ybWF0aW9uLiAqLwpAQCAtNDg2Nyw3ICs0OTI4LDcgQEAKIAlpc2VjID0gc21hLT5zZW1fcGVybS5zZWN1cml0eTsKIAogCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBJUEMpOwotIAlhZC51LmlwY19pZCA9IHNtYS0+c2VtX3Blcm0ua2V5OworCWFkLnUuaXBjX2lkID0gc21hLT5zZW1fcGVybS5rZXk7CiAKIAlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGlzZWMtPnNpZCwgU0VDQ0xBU1NfU0VNLAogCQkJICBTRU1fX0NSRUFURSwgJmFkKTsKQEAgLTQ5MDUsNyArNDk2Niw3IEBACiAJaW50IGVycjsKIAl1MzIgcGVybXM7CiAKLQlzd2l0Y2goY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIElQQ19JTkZPOgogCWNhc2UgU0VNX0lORk86CiAJCS8qIE5vIHNwZWNpZmljIG9iamVjdCwganVzdCBnZW5lcmFsIHN5c3RlbS13aWRlIGluZm9ybWF0aW9uLiAqLwpAQCAtNDk3MCwyNSArNTAzMSwzMSBAQAogCXJldHVybiBpcGNfaGFzX3Blcm0oaXBjcCwgYXYpOwogfQogCitzdGF0aWMgdm9pZCBzZWxpbnV4X2lwY19nZXRzZWNpZChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgdTMyICpzZWNpZCkKK3sKKwlzdHJ1Y3QgaXBjX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IGlwY3AtPnNlY3VyaXR5OworCSpzZWNpZCA9IGlzZWMtPnNpZDsKK30KKwogLyogbW9kdWxlIHN0YWNraW5nIG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBpbnQgc2VsaW51eF9yZWdpc3Rlcl9zZWN1cml0eSAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcykKK3N0YXRpYyBpbnQgc2VsaW51eF9yZWdpc3Rlcl9zZWN1cml0eShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKQogewogCWlmIChzZWNvbmRhcnlfb3BzICE9IG9yaWdpbmFsX29wcykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgVGhlcmUgaXMgYWxyZWFkeSBhIHNlY29uZGFyeSBzZWN1cml0eSAiCi0JCSAgICAgICAibW9kdWxlIHJlZ2lzdGVyZWQuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkgICAgICAgIm1vZHVsZSByZWdpc3RlcmVkLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKLSAJfQorCX0KIAogCXNlY29uZGFyeV9vcHMgPSBvcHM7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogIFJlZ2lzdGVyaW5nIHNlY29uZGFyeSBtb2R1bGUgJXNcbiIsCi0JICAgICAgIF9fRlVOQ1RJT05fXywKKwkgICAgICAgX19mdW5jX18sCiAJICAgICAgIG5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNlbGludXhfZF9pbnN0YW50aWF0ZSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgc2VsaW51eF9kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpZiAoaW5vZGUpCiAJCWlub2RlX2RvaW5pdF93aXRoX2RlbnRyeShpbm9kZSwgZGVudHJ5KTsKQEAgLTUwMzgsNiArNTEwNSw3IEBACiAJCQkgICAgICAgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlcjsKIAl1MzIgc2lkID0gMDsKIAlpbnQgZXJyb3I7CiAJY2hhciAqc3RyID0gdmFsdWU7CkBAIC01MTE1LDM0ICs1MTgzLDM5IEBACiAJCQkJfQogCQkJd2hpbGVfZWFjaF90aHJlYWQoZywgdCk7CiAJCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0gICAgICAgICAgICAgICAgfQorCQl9CiAKIAkJLyogQ2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSB0cmFuc2l0aW9uLiAqLwogCQllcnJvciA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywKLQkJICAgICAgICAgICAgICAgICAgICAgUFJPQ0VTU19fRFlOVFJBTlNJVElPTiwgTlVMTCk7CisJCQkJICAgICBQUk9DRVNTX19EWU5UUkFOU0lUSU9OLCBOVUxMKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCiAJCS8qIENoZWNrIGZvciBwdHJhY2luZywgYW5kIHVwZGF0ZSB0aGUgdGFzayBTSUQgaWYgb2suCiAJCSAgIE90aGVyd2lzZSwgbGVhdmUgU0lEIHVuY2hhbmdlZCBhbmQgZmFpbC4gKi8KIAkJdGFza19sb2NrKHApOwotCQlpZiAocC0+cHRyYWNlICYgUFRfUFRSQUNFRCkgewotCQkJZXJyb3IgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdCh0c2VjLT5wdHJhY2Vfc2lkLCBzaWQsCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJdHJhY2VyID0gdGFza190cmFjZXJfdGFzayhwKTsKKwkJaWYgKHRyYWNlciAhPSBOVUxMKSB7CisJCQlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnB0c2VjID0gdHJhY2VyLT5zZWN1cml0eTsKKwkJCXUzMiBwdHNpZCA9IHB0c2VjLT5zaWQ7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWVycm9yID0gYXZjX2hhc19wZXJtX25vYXVkaXQocHRzaWQsIHNpZCwKIAkJCQkJCSAgICAgU0VDQ0xBU1NfUFJPQ0VTUywKIAkJCQkJCSAgICAgUFJPQ0VTU19fUFRSQUNFLCAwLCAmYXZkKTsKIAkJCWlmICghZXJyb3IpCiAJCQkJdHNlYy0+c2lkID0gc2lkOwogCQkJdGFza191bmxvY2socCk7Ci0JCQlhdmNfYXVkaXQodHNlYy0+cHRyYWNlX3NpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLAorCQkJYXZjX2F1ZGl0KHB0c2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsCiAJCQkJICBQUk9DRVNTX19QVFJBQ0UsICZhdmQsIGVycm9yLCBOVUxMKTsKIAkJCWlmIChlcnJvcikKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0gZWxzZSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXRzZWMtPnNpZCA9IHNpZDsKIAkJCXRhc2tfdW5sb2NrKHApOwogCQl9Ci0JfQotCWVsc2UKKwl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gc2l6ZTsKQEAgLTUxNzUsNyArNTI0OCw2IEBACiAJaWYgKCFrc2VjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWtzZWMtPm9iaiA9IGs7CiAJaWYgKHRzZWMtPmtleWNyZWF0ZV9zaWQpCiAJCWtzZWMtPnNpZCA9IHRzZWMtPmtleWNyZWF0ZV9zaWQ7CiAJZWxzZQpAQCAtNTIxOSw2ICs1MjkxLDggQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgc2VsaW51eF9vcHMgPSB7CisJLm5hbWUgPQkJCQkic2VsaW51eCIsCisKIAkucHRyYWNlID0JCQlzZWxpbnV4X3B0cmFjZSwKIAkuY2FwZ2V0ID0JCQlzZWxpbnV4X2NhcGdldCwKIAkuY2Fwc2V0X2NoZWNrID0JCQlzZWxpbnV4X2NhcHNldF9jaGVjaywKQEAgLTUyMzEsNyArNTMwNSw3IEBACiAJLnZtX2Vub3VnaF9tZW1vcnkgPQkJc2VsaW51eF92bV9lbm91Z2hfbWVtb3J5LAogCiAJLm5ldGxpbmtfc2VuZCA9CQkJc2VsaW51eF9uZXRsaW5rX3NlbmQsCi0gICAgICAgIC5uZXRsaW5rX3JlY3YgPQkJCXNlbGludXhfbmV0bGlua19yZWN2LAorCS5uZXRsaW5rX3JlY3YgPQkJCXNlbGludXhfbmV0bGlua19yZWN2LAogCiAJLmJwcm1fYWxsb2Nfc2VjdXJpdHkgPQkJc2VsaW51eF9icHJtX2FsbG9jX3NlY3VyaXR5LAogCS5icHJtX2ZyZWVfc2VjdXJpdHkgPQkJc2VsaW51eF9icHJtX2ZyZWVfc2VjdXJpdHksCkBAIC01MjQ0LDEzICs1MzE4LDE1IEBACiAJLnNiX2FsbG9jX3NlY3VyaXR5ID0JCXNlbGludXhfc2JfYWxsb2Nfc2VjdXJpdHksCiAJLnNiX2ZyZWVfc2VjdXJpdHkgPQkJc2VsaW51eF9zYl9mcmVlX3NlY3VyaXR5LAogCS5zYl9jb3B5X2RhdGEgPQkJCXNlbGludXhfc2JfY29weV9kYXRhLAotCS5zYl9rZXJuX21vdW50ID0JICAgICAgICBzZWxpbnV4X3NiX2tlcm5fbW91bnQsCisJLnNiX2tlcm5fbW91bnQgPQkJc2VsaW51eF9zYl9rZXJuX21vdW50LAogCS5zYl9zdGF0ZnMgPQkJCXNlbGludXhfc2Jfc3RhdGZzLAogCS5zYl9tb3VudCA9CQkJc2VsaW51eF9tb3VudCwKIAkuc2JfdW1vdW50ID0JCQlzZWxpbnV4X3Vtb3VudCwKIAkuc2JfZ2V0X21udF9vcHRzID0JCXNlbGludXhfZ2V0X21udF9vcHRzLAogCS5zYl9zZXRfbW50X29wdHMgPQkJc2VsaW51eF9zZXRfbW50X29wdHMsCi0JLnNiX2Nsb25lX21udF9vcHRzID0gCQlzZWxpbnV4X3NiX2Nsb25lX21udF9vcHRzLAorCS5zYl9jbG9uZV9tbnRfb3B0cyA9CQlzZWxpbnV4X3NiX2Nsb25lX21udF9vcHRzLAorCS5zYl9wYXJzZV9vcHRzX3N0ciA9IAkJc2VsaW51eF9wYXJzZV9vcHRzX3N0ciwKKwogCiAJLmlub2RlX2FsbG9jX3NlY3VyaXR5ID0JCXNlbGludXhfaW5vZGVfYWxsb2Nfc2VjdXJpdHksCiAJLmlub2RlX2ZyZWVfc2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9mcmVlX3NlY3VyaXR5LApAQCAtNTI3MywxMSArNTM0OSwxMiBAQAogCS5pbm9kZV9nZXR4YXR0ciA9CQlzZWxpbnV4X2lub2RlX2dldHhhdHRyLAogCS5pbm9kZV9saXN0eGF0dHIgPQkJc2VsaW51eF9pbm9kZV9saXN0eGF0dHIsCiAJLmlub2RlX3JlbW92ZXhhdHRyID0JCXNlbGludXhfaW5vZGVfcmVtb3ZleGF0dHIsCi0JLmlub2RlX2dldHNlY3VyaXR5ID0gICAgICAgICAgICBzZWxpbnV4X2lub2RlX2dldHNlY3VyaXR5LAotCS5pbm9kZV9zZXRzZWN1cml0eSA9ICAgICAgICAgICAgc2VsaW51eF9pbm9kZV9zZXRzZWN1cml0eSwKLQkuaW5vZGVfbGlzdHNlY3VyaXR5ID0gICAgICAgICAgIHNlbGludXhfaW5vZGVfbGlzdHNlY3VyaXR5LAorCS5pbm9kZV9nZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lub2RlX2dldHNlY3VyaXR5LAorCS5pbm9kZV9zZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lub2RlX3NldHNlY3VyaXR5LAorCS5pbm9kZV9saXN0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9saXN0c2VjdXJpdHksCiAJLmlub2RlX25lZWRfa2lsbHByaXYgPQkJc2VsaW51eF9pbm9kZV9uZWVkX2tpbGxwcml2LAogCS5pbm9kZV9raWxscHJpdiA9CQlzZWxpbnV4X2lub2RlX2tpbGxwcml2LAorCS5pbm9kZV9nZXRzZWNpZCA9ICAgICAgICAgICAgICAgc2VsaW51eF9pbm9kZV9nZXRzZWNpZCwKIAogCS5maWxlX3Blcm1pc3Npb24gPQkJc2VsaW51eF9maWxlX3Blcm1pc3Npb24sCiAJLmZpbGVfYWxsb2Nfc2VjdXJpdHkgPQkJc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5LApAQCAtNTI5MSw3ICs1MzY4LDcgQEAKIAkuZmlsZV9zZW5kX3NpZ2lvdGFzayA9CQlzZWxpbnV4X2ZpbGVfc2VuZF9zaWdpb3Rhc2ssCiAJLmZpbGVfcmVjZWl2ZSA9CQkJc2VsaW51eF9maWxlX3JlY2VpdmUsCiAKLQkuZGVudHJ5X29wZW4gPSAgICAgICAgICAgICAgICAgIHNlbGludXhfZGVudHJ5X29wZW4sCisJLmRlbnRyeV9vcGVuID0JCQlzZWxpbnV4X2RlbnRyeV9vcGVuLAogCiAJLnRhc2tfY3JlYXRlID0JCQlzZWxpbnV4X3Rhc2tfY3JlYXRlLAogCS50YXNrX2FsbG9jX3NlY3VyaXR5ID0JCXNlbGludXhfdGFza19hbGxvY19zZWN1cml0eSwKQEAgLTUzMDEsNyArNTM3OCw3IEBACiAJLnRhc2tfc2V0Z2lkID0JCQlzZWxpbnV4X3Rhc2tfc2V0Z2lkLAogCS50YXNrX3NldHBnaWQgPQkJCXNlbGludXhfdGFza19zZXRwZ2lkLAogCS50YXNrX2dldHBnaWQgPQkJCXNlbGludXhfdGFza19nZXRwZ2lkLAotCS50YXNrX2dldHNpZCA9CQkgICAgICAgIHNlbGludXhfdGFza19nZXRzaWQsCisJLnRhc2tfZ2V0c2lkID0JCQlzZWxpbnV4X3Rhc2tfZ2V0c2lkLAogCS50YXNrX2dldHNlY2lkID0JCXNlbGludXhfdGFza19nZXRzZWNpZCwKIAkudGFza19zZXRncm91cHMgPQkJc2VsaW51eF90YXNrX3NldGdyb3VwcywKIAkudGFza19zZXRuaWNlID0JCQlzZWxpbnV4X3Rhc2tfc2V0bmljZSwKQEAgLTUzMTUsOSArNTM5MiwxMCBAQAogCS50YXNrX3dhaXQgPQkJCXNlbGludXhfdGFza193YWl0LAogCS50YXNrX3ByY3RsID0JCQlzZWxpbnV4X3Rhc2tfcHJjdGwsCiAJLnRhc2tfcmVwYXJlbnRfdG9faW5pdCA9CXNlbGludXhfdGFza19yZXBhcmVudF90b19pbml0LAotCS50YXNrX3RvX2lub2RlID0gICAgICAgICAgICAgICAgc2VsaW51eF90YXNrX3RvX2lub2RlLAorCS50YXNrX3RvX2lub2RlID0JCXNlbGludXhfdGFza190b19pbm9kZSwKIAogCS5pcGNfcGVybWlzc2lvbiA9CQlzZWxpbnV4X2lwY19wZXJtaXNzaW9uLAorCS5pcGNfZ2V0c2VjaWQgPSAgICAgICAgICAgICAgICAgc2VsaW51eF9pcGNfZ2V0c2VjaWQsCiAKIAkubXNnX21zZ19hbGxvY19zZWN1cml0eSA9CXNlbGludXhfbXNnX21zZ19hbGxvY19zZWN1cml0eSwKIAkubXNnX21zZ19mcmVlX3NlY3VyaXR5ID0Jc2VsaW51eF9tc2dfbXNnX2ZyZWVfc2VjdXJpdHksCkBAIC01MzM1LDI0ICs1NDEzLDI0IEBACiAJLnNobV9zaG1jdGwgPQkJCXNlbGludXhfc2htX3NobWN0bCwKIAkuc2htX3NobWF0ID0JCQlzZWxpbnV4X3NobV9zaG1hdCwKIAotCS5zZW1fYWxsb2Nfc2VjdXJpdHkgPSAJCXNlbGludXhfc2VtX2FsbG9jX3NlY3VyaXR5LAotCS5zZW1fZnJlZV9zZWN1cml0eSA9ICAJCXNlbGludXhfc2VtX2ZyZWVfc2VjdXJpdHksCisJLnNlbV9hbGxvY19zZWN1cml0eSA9CQlzZWxpbnV4X3NlbV9hbGxvY19zZWN1cml0eSwKKwkuc2VtX2ZyZWVfc2VjdXJpdHkgPQkJc2VsaW51eF9zZW1fZnJlZV9zZWN1cml0eSwKIAkuc2VtX2Fzc29jaWF0ZSA9CQlzZWxpbnV4X3NlbV9hc3NvY2lhdGUsCiAJLnNlbV9zZW1jdGwgPQkJCXNlbGludXhfc2VtX3NlbWN0bCwKIAkuc2VtX3NlbW9wID0JCQlzZWxpbnV4X3NlbV9zZW1vcCwKIAogCS5yZWdpc3Rlcl9zZWN1cml0eSA9CQlzZWxpbnV4X3JlZ2lzdGVyX3NlY3VyaXR5LAogCi0JLmRfaW5zdGFudGlhdGUgPSAgICAgICAgICAgICAgICBzZWxpbnV4X2RfaW5zdGFudGlhdGUsCisJLmRfaW5zdGFudGlhdGUgPQkJc2VsaW51eF9kX2luc3RhbnRpYXRlLAogCi0JLmdldHByb2NhdHRyID0gICAgICAgICAgICAgICAgICBzZWxpbnV4X2dldHByb2NhdHRyLAotCS5zZXRwcm9jYXR0ciA9ICAgICAgICAgICAgICAgICAgc2VsaW51eF9zZXRwcm9jYXR0ciwKKwkuZ2V0cHJvY2F0dHIgPQkJCXNlbGludXhfZ2V0cHJvY2F0dHIsCisJLnNldHByb2NhdHRyID0JCQlzZWxpbnV4X3NldHByb2NhdHRyLAogCiAJLnNlY2lkX3RvX3NlY2N0eCA9CQlzZWxpbnV4X3NlY2lkX3RvX3NlY2N0eCwKIAkuc2VjY3R4X3RvX3NlY2lkID0JCXNlbGludXhfc2VjY3R4X3RvX3NlY2lkLAogCS5yZWxlYXNlX3NlY2N0eCA9CQlzZWxpbnV4X3JlbGVhc2Vfc2VjY3R4LAogCi0gICAgICAgIC51bml4X3N0cmVhbV9jb25uZWN0ID0JCXNlbGludXhfc29ja2V0X3VuaXhfc3RyZWFtX2Nvbm5lY3QsCisJLnVuaXhfc3RyZWFtX2Nvbm5lY3QgPQkJc2VsaW51eF9zb2NrZXRfdW5peF9zdHJlYW1fY29ubmVjdCwKIAkudW5peF9tYXlfc2VuZCA9CQlzZWxpbnV4X3NvY2tldF91bml4X21heV9zZW5kLAogCiAJLnNvY2tldF9jcmVhdGUgPQkJc2VsaW51eF9zb2NrZXRfY3JlYXRlLApAQCAtNTM3NCw3ICs1NDUyLDcgQEAKIAkuc2tfYWxsb2Nfc2VjdXJpdHkgPQkJc2VsaW51eF9za19hbGxvY19zZWN1cml0eSwKIAkuc2tfZnJlZV9zZWN1cml0eSA9CQlzZWxpbnV4X3NrX2ZyZWVfc2VjdXJpdHksCiAJLnNrX2Nsb25lX3NlY3VyaXR5ID0JCXNlbGludXhfc2tfY2xvbmVfc2VjdXJpdHksCi0JLnNrX2dldHNlY2lkID0gCQkJc2VsaW51eF9za19nZXRzZWNpZCwKKwkuc2tfZ2V0c2VjaWQgPQkJCXNlbGludXhfc2tfZ2V0c2VjaWQsCiAJLnNvY2tfZ3JhZnQgPQkJCXNlbGludXhfc29ja19ncmFmdCwKIAkuaW5ldF9jb25uX3JlcXVlc3QgPQkJc2VsaW51eF9pbmV0X2Nvbm5fcmVxdWVzdCwKIAkuaW5ldF9jc2tfY2xvbmUgPQkJc2VsaW51eF9pbmV0X2Nza19jbG9uZSwKQEAgLTUzODksMTUgKzU0NjcsMjIgQEAKIAkueGZybV9zdGF0ZV9hbGxvY19zZWN1cml0eSA9CXNlbGludXhfeGZybV9zdGF0ZV9hbGxvYywKIAkueGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5ID0Jc2VsaW51eF94ZnJtX3N0YXRlX2ZyZWUsCiAJLnhmcm1fc3RhdGVfZGVsZXRlX3NlY3VyaXR5ID0Jc2VsaW51eF94ZnJtX3N0YXRlX2RlbGV0ZSwKLQkueGZybV9wb2xpY3lfbG9va3VwID0gCQlzZWxpbnV4X3hmcm1fcG9saWN5X2xvb2t1cCwKKwkueGZybV9wb2xpY3lfbG9va3VwID0JCXNlbGludXhfeGZybV9wb2xpY3lfbG9va3VwLAogCS54ZnJtX3N0YXRlX3BvbF9mbG93X21hdGNoID0Jc2VsaW51eF94ZnJtX3N0YXRlX3BvbF9mbG93X21hdGNoLAogCS54ZnJtX2RlY29kZV9zZXNzaW9uID0JCXNlbGludXhfeGZybV9kZWNvZGVfc2Vzc2lvbiwKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tFWVMKLQkua2V5X2FsbG9jID0gICAgICAgICAgICAgICAgICAgIHNlbGludXhfa2V5X2FsbG9jLAotCS5rZXlfZnJlZSA9ICAgICAgICAgICAgICAgICAgICAgc2VsaW51eF9rZXlfZnJlZSwKLQkua2V5X3Blcm1pc3Npb24gPSAgICAgICAgICAgICAgIHNlbGludXhfa2V5X3Blcm1pc3Npb24sCisJLmtleV9hbGxvYyA9CQkJc2VsaW51eF9rZXlfYWxsb2MsCisJLmtleV9mcmVlID0JCQlzZWxpbnV4X2tleV9mcmVlLAorCS5rZXlfcGVybWlzc2lvbiA9CQlzZWxpbnV4X2tleV9wZXJtaXNzaW9uLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVVESVQKKwkuYXVkaXRfcnVsZV9pbml0ID0JCXNlbGludXhfYXVkaXRfcnVsZV9pbml0LAorCS5hdWRpdF9ydWxlX2tub3duID0JCXNlbGludXhfYXVkaXRfcnVsZV9rbm93biwKKwkuYXVkaXRfcnVsZV9tYXRjaCA9CQlzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2gsCisJLmF1ZGl0X3J1bGVfZnJlZSA9CQlzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZSwKICNlbmRpZgogfTsKIApAQCAtNTQwNSw2ICs1NDkwLDExIEBACiB7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjOwogCisJaWYgKCFzZWN1cml0eV9tb2R1bGVfZW5hYmxlKCZzZWxpbnV4X29wcykpIHsKKwkJc2VsaW51eF9lbmFibGVkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKCFzZWxpbnV4X2VuYWJsZWQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU0VMaW51eDogIERpc2FibGVkIGF0IGJvb3QuXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC01NDI1LDE1ICs1NTE1LDE0IEBACiAKIAlvcmlnaW5hbF9vcHMgPSBzZWNvbmRhcnlfb3BzID0gc2VjdXJpdHlfb3BzOwogCWlmICghc2Vjb25kYXJ5X29wcykKLQkJcGFuaWMgKCJTRUxpbnV4OiBObyBpbml0aWFsIHNlY3VyaXR5IG9wZXJhdGlvbnNcbiIpOwotCWlmIChyZWdpc3Rlcl9zZWN1cml0eSAoJnNlbGludXhfb3BzKSkKKwkJcGFuaWMoIlNFTGludXg6IE5vIGluaXRpYWwgc2VjdXJpdHkgb3BlcmF0aW9uc1xuIik7CisJaWYgKHJlZ2lzdGVyX3NlY3VyaXR5KCZzZWxpbnV4X29wcykpCiAJCXBhbmljKCJTRUxpbnV4OiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBrZXJuZWwuXG4iKTsKIAotCWlmIChzZWxpbnV4X2VuZm9yY2luZykgeworCWlmIChzZWxpbnV4X2VuZm9yY2luZykKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlNFTGludXg6ICBTdGFydGluZyBpbiBlbmZvcmNpbmcgbW9kZVxuIik7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXByaW50ayhLRVJOX0RFQlVHICJTRUxpbnV4OiAgU3RhcnRpbmcgaW4gcGVybWlzc2l2ZSBtb2RlXG4iKTsKLQl9CiAKICNpZmRlZiBDT05GSUdfS0VZUwogCS8qIEFkZCBzZWN1cml0eSBpbmZvcm1hdGlvbiB0byBpbml0aWFsIGtleXJpbmdzICovCkBAIC01NDU4LDggKzU1NDcsOCBAQAogCWlmICghbGlzdF9lbXB0eSgmc3VwZXJibG9ja19zZWN1cml0eV9oZWFkKSkgewogCQlzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjID0KIAkJCQlsaXN0X2VudHJ5KHN1cGVyYmxvY2tfc2VjdXJpdHlfaGVhZC5uZXh0LAotCQkJCSAgICAgICAgICAgc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0LAotCQkJCSAgICAgICAgICAgbGlzdCk7CisJCQkJCSAgIHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCwKKwkJCQkJICAgbGlzdCk7CiAJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYnNlYy0+c2I7CiAJCXNiLT5zX2NvdW50Kys7CiAJCXNwaW5fdW5sb2NrKCZzYl9zZWN1cml0eV9sb2NrKTsKQEAgLTU1NzgsMTAgKzU2NjcsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfTkVURklMVEVSICovCiAKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ESVNBQkxFCitzdGF0aWMgaW50IHNlbGludXhfZGlzYWJsZWQ7CisKIGludCBzZWxpbnV4X2Rpc2FibGUodm9pZCkKIHsKIAlleHRlcm4gdm9pZCBleGl0X3NlbF9mcyh2b2lkKTsKLQlzdGF0aWMgaW50IHNlbGludXhfZGlzYWJsZWQgPSAwOwogCiAJaWYgKHNzX2luaXRpYWxpemVkKSB7CiAJCS8qIE5vdCBwZXJtaXR0ZWQgYWZ0ZXIgaW5pdGlhbCBwb2xpY3kgbG9hZC4gKi8KQEAgLTU2MTAsNSArNTcwMCwzIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKLQotCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXVkaXQuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdWRpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOGI5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXVkaXQuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogU0VMaW51eCBzdXBwb3J0IGZvciB0aGUgQXVkaXQgTFNNIGhvb2tzCisgKgorICogTW9zdCBvZiBiZWxvdyBoZWFkZXIgd2FzIG1vdmVkIGZyb20gaW5jbHVkZS9saW51eC9zZWxpbnV4Lmggd2hpY2ggCisgKiBpcyByZWxlYXNlZCB1bmRlciBiZWxvdyBjb3B5cmlnaHRzOgorICoKKyAqIEF1dGhvcjogSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRydXN0ZWQgQ29tcHV0ZXIgU29sdXRpb25zLCBJbmMuIDxkZ29lZGRlbEB0cnVzdGVkY3MuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiwgVGltb3RoeSBSLiBDaGF2ZXogPHRpbnl0aW1AdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9TRUxJTlVYX0FVRElUX0gKKyNkZWZpbmUgX1NFTElOVVhfQVVESVRfSAorCisvKioKKyAqCXNlbGludXhfYXVkaXRfcnVsZV9pbml0IC0gYWxsb2MvaW5pdCBhbiBzZWxpbnV4IGF1ZGl0IHJ1bGUgc3RydWN0dXJlLgorICoJQGZpZWxkOiB0aGUgZmllbGQgdGhpcyBydWxlIHJlZmVycyB0bworICoJQG9wOiB0aGUgb3BlcmF0ZXIgdGhlIHJ1bGUgdXNlcworICoJQHJ1bGVzdHI6IHRoZSB0ZXh0ICJ0YXJnZXQiIG9mIHRoZSBydWxlCisgKglAcnVsZTogcG9pbnRlciB0byB0aGUgbmV3IHJ1bGUgc3RydWN0dXJlIHJldHVybmVkIHZpYSB0aGlzCisgKgorICoJUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1lcnJubyBpZiBub3QuICBPbiBzdWNjZXNzLCB0aGUgcnVsZSBzdHJ1Y3R1cmUKKyAqCXdpbGwgYmUgYWxsb2NhdGVkIGludGVybmFsbHkuICBUaGUgY2FsbGVyIG11c3QgZnJlZSB0aGlzIHN0cnVjdHVyZSB3aXRoCisgKglzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZSgpIGFmdGVyIHVzZS4KKyAqLworaW50IHNlbGludXhfYXVkaXRfcnVsZV9pbml0KHUzMiBmaWVsZCwgdTMyIG9wLCBjaGFyICpydWxlc3RyLCB2b2lkICoqcnVsZSk7CisKKy8qKgorICoJc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUgLSBmcmVlIGFuIHNlbGludXggYXVkaXQgcnVsZSBzdHJ1Y3R1cmUuCisgKglAcnVsZTogcG9pbnRlciB0byB0aGUgYXVkaXQgcnVsZSB0byBiZSBmcmVlZAorICoKKyAqCVRoaXMgd2lsbCBmcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBydWxlLgorICoJSWYgQHJ1bGUgaXMgTlVMTCwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KKyAqLwordm9pZCBzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZSh2b2lkICpydWxlKTsKKworLyoqCisgKglzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2ggLSBkZXRlcm1pbmUgaWYgYSBjb250ZXh0IElEIG1hdGNoZXMgYSBydWxlLgorICoJQHNpZDogdGhlIGNvbnRleHQgSUQgdG8gY2hlY2sKKyAqCUBmaWVsZDogdGhlIGZpZWxkIHRoaXMgcnVsZSByZWZlcnMgdG8KKyAqCUBvcDogdGhlIG9wZXJhdGVyIHRoZSBydWxlIHVzZXMKKyAqCUBydWxlOiBwb2ludGVyIHRvIHRoZSBhdWRpdCBydWxlIHRvIGNoZWNrIGFnYWluc3QKKyAqCUBhY3R4OiB0aGUgYXVkaXQgY29udGV4dCAoY2FuIGJlIE5VTEwpIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2sKKyAqCisgKglSZXR1cm5zIDEgaWYgdGhlIGNvbnRleHQgaWQgbWF0Y2hlcyB0aGUgcnVsZSwgMCBpZiBpdCBkb2VzIG5vdCwgYW5kCisgKgktZXJybm8gb24gZmFpbHVyZS4KKyAqLworaW50IHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaCh1MzIgc2lkLCB1MzIgZmllbGQsIHUzMiBvcCwgdm9pZCAqcnVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmFjdHgpOworCisvKioKKyAqCXNlbGludXhfYXVkaXRfcnVsZV9rbm93biAtIGNoZWNrIHRvIHNlZSBpZiBydWxlIGNvbnRhaW5zIHNlbGludXggZmllbGRzLgorICoJQHJ1bGU6IHJ1bGUgdG8gYmUgY2hlY2tlZAorICoJUmV0dXJucyAxIGlmIHRoZXJlIGFyZSBzZWxpbnV4IGZpZWxkcyBzcGVjaWZpZWQgaW4gdGhlIHJ1bGUsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX2tub3duKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUpOworCisjZW5kaWYgLyogX1NFTElOVVhfQVVESVRfSCAqLworCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCmluZGV4IGQ1Njk2NjkuLjEyMjNiNGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCkBAIC0xNCwxMiArMTQsMTcgQEAKICAgIFNfKFNFQ0NMQVNTX0RJUiwgRElSX19SRVBBUkVOVCwgInJlcGFyZW50IikKICAgIFNfKFNFQ0NMQVNTX0RJUiwgRElSX19TRUFSQ0gsICJzZWFyY2giKQogICAgU18oU0VDQ0xBU1NfRElSLCBESVJfX1JNRElSLCAicm1kaXIiKQorICAgU18oU0VDQ0xBU1NfRElSLCBESVJfX09QRU4sICJvcGVuIikKICAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX0VYRUNVVEVfTk9fVFJBTlMsICJleGVjdXRlX25vX3RyYW5zIikKICAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX0VOVFJZUE9JTlQsICJlbnRyeXBvaW50IikKICAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX0VYRUNNT0QsICJleGVjbW9kIikKKyAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX09QRU4sICJvcGVuIikKICAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fRVhFQ1VURV9OT19UUkFOUywgImV4ZWN1dGVfbm9fdHJhbnMiKQogICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19FTlRSWVBPSU5ULCAiZW50cnlwb2ludCIpCiAgICBTXyhTRUNDTEFTU19DSFJfRklMRSwgQ0hSX0ZJTEVfX0VYRUNNT0QsICJleGVjbW9kIikKKyAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fT1BFTiwgIm9wZW4iKQorICAgU18oU0VDQ0xBU1NfQkxLX0ZJTEUsIEJMS19GSUxFX19PUEVOLCAib3BlbiIpCisgICBTXyhTRUNDTEFTU19GSUZPX0ZJTEUsIEZJRk9fRklMRV9fT1BFTiwgIm9wZW4iKQogICAgU18oU0VDQ0xBU1NfRkQsIEZEX19VU0UsICJ1c2UiKQogICAgU18oU0VDQ0xBU1NfVENQX1NPQ0tFVCwgVENQX1NPQ0tFVF9fQ09OTkVDVFRPLCAiY29ubmVjdHRvIikKICAgIFNfKFNFQ0NMQVNTX1RDUF9TT0NLRVQsIFRDUF9TT0NLRVRfX05FV0NPTk4sICJuZXdjb25uIikKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKaW5kZXggNzViNDEzMS4uYzRjNTExNiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKQEAgLTc5LDYgKzc5LDcgQEAKICNkZWZpbmUgRElSX19SRVBBUkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCiAjZGVmaW5lIERJUl9fU0VBUkNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAogI2RlZmluZSBESVJfX1JNRElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVUwKKyNkZWZpbmUgRElSX19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMFVMCiAjZGVmaW5lIEZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBGSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKICNkZWZpbmUgRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCkBAIC05OSw2ICsxMDAsNyBAQAogI2RlZmluZSBGSUxFX19FWEVDVVRFX05PX1RSQU5TICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKICNkZWZpbmUgRklMRV9fRU5UUllQT0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCiAjZGVmaW5lIEZJTEVfX0VYRUNNT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAorI2RlZmluZSBGSUxFX19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKICNkZWZpbmUgTE5LX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCiAjZGVmaW5lIExOS19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAogI2RlZmluZSBMTktfRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKQEAgLTEzNiw2ICsxMzgsNyBAQAogI2RlZmluZSBDSFJfRklMRV9fRVhFQ1VURV9OT19UUkFOUyAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKICNkZWZpbmUgQ0hSX0ZJTEVfX0VOVFJZUE9JTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCiAjZGVmaW5lIENIUl9GSUxFX19FWEVDTU9EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAorI2RlZmluZSBDSFJfRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKICNkZWZpbmUgQkxLX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCiAjZGVmaW5lIEJMS19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAogI2RlZmluZSBCTEtfRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKQEAgLTE1Myw2ICsxNTYsNyBAQAogI2RlZmluZSBCTEtfRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKICNkZWZpbmUgQkxLX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCiAjZGVmaW5lIEJMS19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAorI2RlZmluZSBCTEtfRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKICNkZWZpbmUgU09DS19GSUxFX19JT0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCiAjZGVmaW5lIFNPQ0tfRklMRV9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAogI2RlZmluZSBTT0NLX0ZJTEVfX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKQEAgLTE4Nyw2ICsxOTEsNyBAQAogI2RlZmluZSBGSUZPX0ZJTEVfX1NXQVBPTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKICNkZWZpbmUgRklGT19GSUxFX19RVU9UQU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCiAjZGVmaW5lIEZJRk9fRklMRV9fTU9VTlRPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAorI2RlZmluZSBGSUZPX0ZJTEVfX09QRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKICNkZWZpbmUgRkRfX1VTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCiAjZGVmaW5lIFNPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBTT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmgKaW5kZXggMDBhMjgwOS4uOWE5ZTdjZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmgKQEAgLTQxLDEwICs0MSw2IEBACiAKIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKIAkJCQkgICAgICBpbnQgZmFtaWx5KTsKLXZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfaW5pdChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAotCQkJCSAgICAgaW50IGZhbWlseSk7Ci12b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2Nsb25lKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCi0JCQkJICAgICAgc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqbmV3c3NlYyk7CiAKIGludCBzZWxpbnV4X25ldGxibF9za2J1ZmZfZ2V0c2lkKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHUxNiBmYW1pbHksCkBAIC03MywxOCArNjksNiBAQAogewogCXJldHVybjsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9pbml0KAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCi0JCQkJCSAgICAgICBpbnQgZmFtaWx5KQotewotCXJldHVybjsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9jbG9uZSgKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAotCQkJCQkgICAgc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqbmV3c3NlYykKLXsKLQlyZXR1cm47Ci19CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfbmV0bGJsX3NrYnVmZl9nZXRzaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgICAgIHUxNiBmYW1pbHksCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0cG9ydC5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkxNzUyCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldHBvcnQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogTmV0d29yayBwb3J0IHRhYmxlCisgKgorICogU0VMaW51eCBtdXN0IGtlZXAgYSBtYXBwaW5nIG9mIG5ldHdvcmsgcG9ydHMgdG8gbGFiZWxzL1NJRHMuICBUaGlzCisgKiBtYXBwaW5nIGlzIG1haW50YWluZWQgYXMgcGFydCBvZiB0aGUgbm9ybWFsIHBvbGljeSBidXQgYSBmYXN0IGNhY2hlIGlzCisgKiBuZWVkZWQgdG8gcmVkdWNlIHRoZSBsb29rdXAgb3ZlcmhlYWQuCisgKgorICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqCisgKi8KKworLyoKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX1NFTElOVVhfTkVUUE9SVF9ICisjZGVmaW5lIF9TRUxJTlVYX05FVFBPUlRfSAorCitpbnQgc2VsX25ldHBvcnRfc2lkKHU4IHByb3RvY29sLCB1MTYgcG51bSwgdTMyICpzaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAppbmRleCBjNmMyYmI0Li4zMDBiNjFiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCkBAIC0yOCwxNCArMjgsMTIgQEAKICNpbmNsdWRlICJhdmMuaCIKIAogc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0IHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7ICAgICAgLyogYmFjayBwb2ludGVyIHRvIHRhc2sgb2JqZWN0ICovCiAJdTMyIG9zaWQ7ICAgICAgICAgICAgLyogU0lEIHByaW9yIHRvIGxhc3QgZXhlY3ZlICovCiAJdTMyIHNpZDsgICAgICAgICAgICAgLyogY3VycmVudCBTSUQgKi8KIAl1MzIgZXhlY19zaWQ7ICAgICAgICAvKiBleGVjIFNJRCAqLwogCXUzMiBjcmVhdGVfc2lkOyAgICAgIC8qIGZzY3JlYXRlIFNJRCAqLwogCXUzMiBrZXljcmVhdGVfc2lkOyAgIC8qIGtleWNyZWF0ZSBTSUQgKi8KIAl1MzIgc29ja2NyZWF0ZV9zaWQ7ICAvKiBmc2NyZWF0ZSBTSUQgKi8KLQl1MzIgcHRyYWNlX3NpZDsgICAgICAvKiBTSUQgb2YgcHRyYWNlIHBhcmVudCAqLwogfTsKIAogc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCB7CkBAIC01MCw3ICs0OCw2IEBACiB9OwogCiBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QgewotCXN0cnVjdCBmaWxlICpmaWxlOyAgICAgICAgICAgICAgLyogYmFjayBwb2ludGVyIHRvIGZpbGUgb2JqZWN0ICovCiAJdTMyIHNpZDsgICAgICAgICAgICAgIC8qIFNJRCBvZiBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKi8KIAl1MzIgZm93bl9zaWQ7ICAgICAgICAgLyogU0lEIG9mIGZpbGUgb3duZXIgKGZvciBTSUdJTykgKi8KIAl1MzIgaXNpZDsgICAgICAgICAgICAgLyogU0lEIG9mIGlub2RlIGF0IHRoZSB0aW1lIG9mIGZpbGUgb3BlbiAqLwpAQCAtNzMsMTggKzcwLDE1IEBACiB9OwogCiBzdHJ1Y3QgbXNnX3NlY3VyaXR5X3N0cnVjdCB7Ci0Jc3RydWN0IG1zZ19tc2cgKm1zZzsJCS8qIGJhY2sgcG9pbnRlciAqLwogCXUzMiBzaWQ7ICAgICAgICAgICAgICAvKiBTSUQgb2YgbWVzc2FnZSAqLwogfTsKIAogc3RydWN0IGlwY19zZWN1cml0eV9zdHJ1Y3QgewotCXN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfcGVybTsgLyogYmFjayBwb2ludGVyICovCiAJdTE2IHNjbGFzczsJLyogc2VjdXJpdHkgY2xhc3Mgb2YgdGhpcyBvYmplY3QgKi8KIAl1MzIgc2lkOyAgICAgICAgICAgICAgLyogU0lEIG9mIElQQyByZXNvdXJjZSAqLwogfTsKIAogc3RydWN0IGJwcm1fc2VjdXJpdHlfc3RydWN0IHsKLQlzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtOyAgICAgLyogYmFjayBwb2ludGVyIHRvIGJwcm0gb2JqZWN0ICovCiAJdTMyIHNpZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNJRCBmb3IgdHJhbnNmb3JtZWQgcHJvY2VzcyAqLwogCXVuc2lnbmVkIGNoYXIgc2V0OwogCkBAIC0xMDksOCArMTAzLDEzIEBACiAJdTE2IGZhbWlseTsJCQkvKiBhZGRyZXNzIGZhbWlseSAqLwogfTsKIAorc3RydWN0IG5ldHBvcnRfc2VjdXJpdHlfc3RydWN0IHsKKwl1MzIgc2lkOwkJCS8qIFNJRCBmb3IgdGhpcyBub2RlICovCisJdTE2IHBvcnQ7CQkJLyogcG9ydCBudW1iZXIgKi8KKwl1OCBwcm90b2NvbDsJCQkvKiB0cmFuc3BvcnQgcHJvdG9jb2wgKi8KK307CisKIHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgewotCXN0cnVjdCBzb2NrICpzazsJCS8qIGJhY2sgcG9pbnRlciB0byBzayBvYmplY3QgKi8KIAl1MzIgc2lkOwkJCS8qIFNJRCBvZiB0aGlzIG9iamVjdCAqLwogCXUzMiBwZWVyX3NpZDsJCQkvKiBTSUQgb2YgcGVlciAqLwogCXUxNiBzY2xhc3M7CQkJLyogc29jayBzZWN1cml0eSBjbGFzcyAqLwpAQCAtMTIwLDEyICsxMTksMTAgQEAKIAkJTkxCTF9SRVFVSVJFLAogCQlOTEJMX0xBQkVMRUQsCiAJfSBubGJsX3N0YXRlOwotCXNwaW5sb2NrX3QgbmxibF9sb2NrOwkJLyogcHJvdGVjdHMgbmxibF9zdGF0ZSAqLwogI2VuZGlmCiB9OwogCiBzdHJ1Y3Qga2V5X3NlY3VyaXR5X3N0cnVjdCB7Ci0Jc3RydWN0IGtleSAqb2JqOyAvKiBiYWNrIHBvaW50ZXIgKi8KIAl1MzIgc2lkOyAgICAgICAgIC8qIFNJRCBvZiBrZXkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKaW5kZXggODM3Y2U0Mi4uMTkwNGM0NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKQEAgLTI2LDE1ICsyNiwyNiBAQAogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX0FWVEFCCQkyMAogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX1JBTkdFVFJBTlMJMjEKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9QT0xDQVAJCTIyCisjZGVmaW5lIFBPTElDWURCX1ZFUlNJT05fUEVSTUlTU0lWRQkyMwogCiAvKiBSYW5nZSBvZiBwb2xpY3kgdmVyc2lvbnMgd2UgdW5kZXJzdGFuZCovCiAjZGVmaW5lIFBPTElDWURCX1ZFUlNJT05fTUlOICAgUE9MSUNZREJfVkVSU0lPTl9CQVNFCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfUE9MSUNZREJfVkVSU0lPTl9NQVgKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9NQVgJQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfUE9MSUNZREJfVkVSU0lPTl9NQVhfVkFMVUUKICNlbHNlCi0jZGVmaW5lIFBPTElDWURCX1ZFUlNJT05fTUFYCVBPTElDWURCX1ZFUlNJT05fUE9MQ0FQCisjZGVmaW5lIFBPTElDWURCX1ZFUlNJT05fTUFYCVBPTElDWURCX1ZFUlNJT05fUEVSTUlTU0lWRQogI2VuZGlmCiAKKyNkZWZpbmUgQ09OVEVYVF9NTlQJMHgwMQorI2RlZmluZSBGU0NPTlRFWFRfTU5UCTB4MDIKKyNkZWZpbmUgUk9PVENPTlRFWFRfTU5UCTB4MDQKKyNkZWZpbmUgREVGQ09OVEVYVF9NTlQJMHgwOAorCisjZGVmaW5lIENPTlRFWFRfU1RSCSJjb250ZXh0PSIKKyNkZWZpbmUgRlNDT05URVhUX1NUUgkiZnNjb250ZXh0PSIKKyNkZWZpbmUgUk9PVENPTlRFWFRfU1RSCSJyb290Y29udGV4dD0iCisjZGVmaW5lIERFRkNPTlRFWFRfU1RSCSJkZWZjb250ZXh0PSIKKwogc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cjsKIAogZXh0ZXJuIGludCBzZWxpbnV4X2VuYWJsZWQ7CkBAIC00MywxMSArNTQsMTMgQEAKIC8qIFBvbGljeSBjYXBhYmlsaXRpZXMgKi8KIGVudW0gewogCVBPTElDWURCX0NBUEFCSUxJVFlfTkVUUEVFUiwKKwlQT0xJQ1lEQl9DQVBBQklMSVRZX09QRU5QRVJNLAogCV9fUE9MSUNZREJfQ0FQQUJJTElUWV9NQVgKIH07CiAjZGVmaW5lIFBPTElDWURCX0NBUEFCSUxJVFlfTUFYIChfX1BPTElDWURCX0NBUEFCSUxJVFlfTUFYIC0gMSkKIAogZXh0ZXJuIGludCBzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyOworZXh0ZXJuIGludCBzZWxpbnV4X3BvbGljeWNhcF9vcGVucGVybTsKIAogaW50IHNlY3VyaXR5X2xvYWRfcG9saWN5KHZvaWQgKiBkYXRhLCBzaXplX3QgbGVuKTsKIApAQCAtNjIsNiArNzUsOCBAQAogCXUzMiBzZXFubzsKIH07CiAKK2ludCBzZWN1cml0eV9wZXJtaXNzaXZlX3NpZCh1MzIgc2lkKTsKKwogaW50IHNlY3VyaXR5X2NvbXB1dGVfYXYodTMyIHNzaWQsIHUzMiB0c2lkLAogCXUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsCiAJc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOwpAQCAtODEsMTMgKzk2LDEzIEBACiBpbnQgc2VjdXJpdHlfY29udGV4dF90b19zaWQoY2hhciAqc2NvbnRleHQsIHUzMiBzY29udGV4dF9sZW4sCiAJdTMyICpvdXRfc2lkKTsKIAotaW50IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkX2RlZmF1bHQoY2hhciAqc2NvbnRleHQsIHUzMiBzY29udGV4dF9sZW4sIHUzMiAqb3V0X3NpZCwgdTMyIGRlZl9zaWQpOworaW50IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkX2RlZmF1bHQoY2hhciAqc2NvbnRleHQsIHUzMiBzY29udGV4dF9sZW4sCisJCQkJICAgIHUzMiAqb3V0X3NpZCwgdTMyIGRlZl9zaWQsIGdmcF90IGdmcF9mbGFncyk7CiAKIGludCBzZWN1cml0eV9nZXRfdXNlcl9zaWRzKHUzMiBjYWxsc2lkLCBjaGFyICp1c2VybmFtZSwKIAkJCSAgIHUzMiAqKnNpZHMsIHUzMiAqbmVsKTsKIAotaW50IHNlY3VyaXR5X3BvcnRfc2lkKHUxNiBkb21haW4sIHUxNiB0eXBlLCB1OCBwcm90b2NvbCwgdTE2IHBvcnQsCi0JdTMyICpvdXRfc2lkKTsKK2ludCBzZWN1cml0eV9wb3J0X3NpZCh1OCBwcm90b2NvbCwgdTE2IHBvcnQsIHUzMiAqb3V0X3NpZCk7CiAKIGludCBzZWN1cml0eV9uZXRpZl9zaWQoY2hhciAqbmFtZSwgdTMyICppZl9zaWQpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaAppbmRleCAzNmIwNTEwLi4yODllMjRiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmgKQEAgLTcsMTYgKzcsMTcgQEAKICNpZm5kZWYgX1NFTElOVVhfWEZSTV9IXwogI2RlZmluZSBfU0VMSU5VWF9YRlJNX0hfCiAKLWludCBzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsCi0JCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCk7Ci1pbnQgc2VsaW51eF94ZnJtX3BvbGljeV9jbG9uZShzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgc3RydWN0IHhmcm1fcG9saWN5ICpuZXcpOwotdm9pZCBzZWxpbnV4X3hmcm1fcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7Ci1pbnQgc2VsaW51eF94ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7CitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9hbGxvYyhzdHJ1Y3QgeGZybV9zZWNfY3R4ICoqY3R4cCwKKwkJCSAgICAgIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCk7CitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9jbG9uZShzdHJ1Y3QgeGZybV9zZWNfY3R4ICpvbGRfY3R4LAorCQkJICAgICAgc3RydWN0IHhmcm1fc2VjX2N0eCAqKm5ld19jdHhwKTsKK3ZvaWQgc2VsaW51eF94ZnJtX3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCk7CitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4KTsKIGludCBzZWxpbnV4X3hmcm1fc3RhdGVfYWxsb2Moc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4LCB1MzIgc2VjaWQpOwogdm9pZCBzZWxpbnV4X3hmcm1fc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiBpbnQgc2VsaW51eF94ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7Ci1pbnQgc2VsaW51eF94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIGZsX3NlY2lkLCB1OCBkaXIpOworaW50IHNlbGludXhfeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCwgdTMyIGZsX3NlY2lkLCB1OCBkaXIpOwogaW50IHNlbGludXhfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAkJCXN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHN0cnVjdCBmbG93aSAqZmwpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L25ldGlmLmMgYi9zZWN1cml0eS9zZWxpbnV4L25ldGlmLmMKaW5kZXggMDEzZDMxMS4uYzY1OGI4NCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9uZXRpZi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmV0aWYuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmVkIEhhdCwgSW5jLiwgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KLSAqICAgICAgICAgICAgICAgICAgICBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqCQkgICAgICBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCkBAIC0zMSw4ICszMSw3IEBACiAjZGVmaW5lIFNFTF9ORVRJRl9IQVNIX1NJWkUJNjQKICNkZWZpbmUgU0VMX05FVElGX0hBU0hfTUFYCTEwMjQKIAotc3RydWN0IHNlbF9uZXRpZgoteworc3RydWN0IHNlbF9uZXRpZiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBuZXRpZl9zZWN1cml0eV9zdHJ1Y3QgbnNlYzsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CkBAIC05MiwxMCArOTEsMTAgQEAKIHN0YXRpYyBpbnQgc2VsX25ldGlmX2luc2VydChzdHJ1Y3Qgc2VsX25ldGlmICpuZXRpZikKIHsKIAlpbnQgaWR4OwotCQorCiAJaWYgKHNlbF9uZXRpZl90b3RhbCA+PSBTRUxfTkVUSUZfSEFTSF9NQVgpCiAJCXJldHVybiAtRU5PU1BDOwotCQorCiAJaWR4ID0gc2VsX25ldGlmX2hhc2hmbihuZXRpZi0+bnNlYy5pZmluZGV4KTsKIAlsaXN0X2FkZF9yY3UoJm5ldGlmLT5saXN0LCAmc2VsX25ldGlmX2hhc2hbaWR4XSk7CiAJc2VsX25ldGlmX3RvdGFsKys7CkBAIC0yNjcsNyArMjY2LDcgQEAKIH0KIAogc3RhdGljIGludCBzZWxfbmV0aWZfYXZjX2NhbGxiYWNrKHUzMiBldmVudCwgdTMyIHNzaWQsIHUzMiB0c2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBjbGFzcywgdTMyIHBlcm1zLCB1MzIgKnJldGFpbmVkKQorCQkJCSAgdTE2IGNsYXNzLCB1MzIgcGVybXMsIHUzMiAqcmV0YWluZWQpCiB7CiAJaWYgKGV2ZW50ID09IEFWQ19DQUxMQkFDS19SRVNFVCkgewogCQlzZWxfbmV0aWZfZmx1c2goKTsKQEAgLTI3NywxMSArMjc2LDExIEBACiB9CiAKIHN0YXRpYyBpbnQgc2VsX25ldGlmX25ldGRldl9ub3RpZmllcl9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKIAotCWlmIChkZXYtPm5kX25ldCAhPSAmaW5pdF9uZXQpCisJaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChldmVudCA9PSBORVRERVZfRE9XTikKQEAgLTI5Nyw3ICsyOTYsNyBAQAogc3RhdGljIF9faW5pdCBpbnQgc2VsX25ldGlmX2luaXQodm9pZCkKIHsKIAlpbnQgaSwgZXJyOwotCQorCiAJaWYgKCFzZWxpbnV4X2VuYWJsZWQpCiAJCXJldHVybiAwOwogCkBAIC0zMDUsOSArMzA0LDkgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnNlbF9uZXRpZl9oYXNoW2ldKTsKIAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmc2VsX25ldGlmX25ldGRldl9ub3RpZmllcik7Ci0JCisKIAllcnIgPSBhdmNfYWRkX2NhbGxiYWNrKHNlbF9uZXRpZl9hdmNfY2FsbGJhY2ssIEFWQ19DQUxMQkFDS19SRVNFVCwKLQkgICAgICAgICAgICAgICAgICAgICAgIFNFQ1NJRF9OVUxMLCBTRUNTSURfTlVMTCwgU0VDQ0xBU1NfTlVMTCwgMCk7CisJCQkgICAgICAgU0VDU0lEX05VTEwsIFNFQ1NJRF9OVUxMLCBTRUNDTEFTU19OVUxMLCAwKTsKIAlpZiAoZXJyKQogCQlwYW5pYygiYXZjX2FkZF9jYWxsYmFjaygpIGZhaWxlZCwgZXJyb3IgJWRcbiIsIGVycik7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwppbmRleCAwZmEyYmU0Li44OWI0MTgzOSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAib2Jqc2VjLmgiCiAjaW5jbHVkZSAic2VjdXJpdHkuaCIKKyNpbmNsdWRlICJuZXRsYWJlbC5oIgogCiAvKioKICAqIHNlbGludXhfbmV0bGJsX3NpZGxvb2t1cF9jYWNoZWQgLSBDYWNoZSBhIFNJRCBsb29rdXAKQEAgLTY5LDkgKzcwLDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIEF0dGVtcHQgdG8gbGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbSB1c2luZyB0aGUgZ2l2ZW4KLSAqIFNJRC4gIFJldHVybnMgemVybyB2YWx1ZXMgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuICBUaGUKLSAqIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGNhbGxpbmcgcmN1X3JlYWRfbG9jaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMKLSAqIHRoaXMgZnVuY3Rpb24gYW5kIHJjdV9yZWFkX3VubG9jaygpIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqIFNJRC4gIFJldHVybnMgemVybyB2YWx1ZXMgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCiBzdGF0aWMgaW50IHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIHNpZCkKQEAgLTg2LDExICs4NSw4IEBACiAJaWYgKHJjICE9IDApCiAJCWdvdG8gc29ja19zZXRzaWRfcmV0dXJuOwogCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgJnNlY2F0dHIpOwotCWlmIChyYyA9PSAwKSB7Ci0JCXNwaW5fbG9ja19iaCgmc2tzZWMtPm5sYmxfbG9jayk7CisJaWYgKHJjID09IDApCiAJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9MQUJFTEVEOwotCQlzcGluX3VubG9ja19iaCgmc2tzZWMtPm5sYmxfbG9jayk7Ci0JfQogCiBzb2NrX3NldHNpZF9yZXR1cm46CiAJbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2VjYXR0cik7CkBAIC0xMjIsNTIgKzExOCwxMyBAQAogdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAogCQkJCSAgICAgIGludCBmYW1pbHkpCiB7Ci0gICAgICAgIGlmIChmYW1pbHkgPT0gUEZfSU5FVCkKKwlpZiAoZmFtaWx5ID09IFBGX0lORVQpCiAJCXNzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVVJUkU7CiAJZWxzZQogCQlzc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9VTlNFVDsKIH0KIAogLyoqCi0gKiBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9pbml0IC0gU2V0dXAgdGhlIE5ldExhYmVsIGZpZWxkcwotICogQHNzZWM6IHRoZSBza19zZWN1cml0eV9zdHJ1Y3QKLSAqIEBmYW1pbHk6IHRoZSBzb2NrZXQgZmFtaWx5Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKiBDYWxsZWQgd2hlbiBhIG5ldyBza19zZWN1cml0eV9zdHJ1Y3QgaXMgYWxsb2NhdGVkIHRvIGluaXRpYWxpemUgdGhlIE5ldExhYmVsCi0gKiBmaWVsZHMuCi0gKgotICovCi12b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2luaXQoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKLQkJCQkgICAgIGludCBmYW1pbHkpCi17Ci0JLyogTm8gbG9ja2luZyBuZWVkZWQsIHdlIGFyZSB0aGUgb25seSBvbmUgd2hvIGhhcyBhY2Nlc3MgdG8gc3NlYyAqLwotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHNzZWMsIGZhbWlseSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNzZWMtPm5sYmxfbG9jayk7Ci19Ci0KLS8qKgotICogc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfY2xvbmUgLSBDb3B5IHRoZSBOZXRMYWJlbCBmaWVsZHMKLSAqIEBzc2VjOiB0aGUgb3JpZ2luYWwgc2tfc2VjdXJpdHlfc3RydWN0Ci0gKiBAbmV3c3NlYzogdGhlIGNsb25lZCBza19zZWN1cml0eV9zdHJ1Y3QKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIENsb25lIHRoZSBOZXRMYWJlbCBzcGVjaWZpYyBza19zZWN1cml0eV9zdHJ1Y3QgZmllbGRzIGZyb20gQHNzZWMgdG8KLSAqIEBuZXdzc2VjLgotICoKLSAqLwotdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9jbG9uZShzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAotCQkJCSAgICAgIHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKm5ld3NzZWMpCi17Ci0JLyogV2UgZG9uJ3QgbmVlZCB0byB0YWtlIG5ld3NzZWMtPm5sYmxfbG9jayBiZWNhdXNlIHdlIGFyZSB0aGUgb25seQotCSAqIHRocmVhZCB3aXRoIGFjY2VzcyB0byBuZXdzc2VjLCBidXQgd2UgZG8gbmVlZCB0byB0YWtlIHRoZSBSQ1UgcmVhZAotCSAqIGxvY2sgYXMgb3RoZXIgdGhyZWFkcyBjb3VsZCBoYXZlIGFjY2VzcyB0byBzc2VjICovCi0JcmN1X3JlYWRfbG9jaygpOwotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KG5ld3NzZWMsIHNzZWMtPnNrLT5za19mYW1pbHkpOwotCXJjdV9yZWFkX3VubG9jaygpOwotfQotCi0vKioKICAqIHNlbGludXhfbmV0bGJsX3NrYnVmZl9nZXRzaWQgLSBHZXQgdGhlIHNpZCBvZiBhIHBhY2tldCB1c2luZyBOZXRMYWJlbAogICogQHNrYjogdGhlIHBhY2tldAogICogQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5CkBAIC0yMjEsMTIgKzE3OCw4IEBACiAJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwogCXUzMiBubGJsX3BlZXJfc2lkOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAoc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKQogCQlyZXR1cm47Ci0JfQogCiAJbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7CiAJaWYgKG5ldGxibF9zb2NrX2dldGF0dHIoc2ssICZzZWNhdHRyKSA9PSAwICYmCkBAIC0yMzksOCArMTkyLDYgQEAKIAkgKiBoZXJlIHdlIHdpbGwgcGljayB1cCB0aGUgcGllY2VzIGluIGxhdGVyIGNhbGxzIHRvCiAJICogc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbigpLiAqLwogCXNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkKHNrLCBza3NlYy0+c2lkKTsKLQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTI1NCwxNiArMjA1LDEzIEBACiAgKi8KIGludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jaykKIHsKLQlpbnQgcmMgPSAwOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmIChza3NlYy0+bmxibF9zdGF0ZSA9PSBOTEJMX1JFUVVJUkUpCi0JCXJjID0gc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc2ssIHNrc2VjLT5zaWQpOwotCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpCisJCXJldHVybiAwOwogCi0JcmV0dXJuIHJjOworCXJldHVybiBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzaywgc2tzZWMtPnNpZCk7CiB9CiAKIC8qKgpAQCAtMjg4LDIxICsyMzYsMjEgQEAKIAlpZiAoIVNfSVNTT0NLKGlub2RlLT5pX21vZGUpIHx8CiAJICAgICgobWFzayAmIChNQVlfV1JJVEUgfCBNQVlfQVBQRU5EKSkgPT0gMCkpCiAJCXJldHVybiAwOworCiAJc29jayA9IFNPQ0tFVF9JKGlub2RlKTsKIAlzayA9IHNvY2stPnNrOwogCXNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWJoX2xvY2tfc29ja19uZXN0ZWQoc2spOwotCXJjID0gc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc2ssIHNrc2VjLT5zaWQpOworCWlmIChsaWtlbHkoc2tzZWMtPm5sYmxfc3RhdGUgPT0gTkxCTF9SRVFVSVJFKSkKKwkJcmMgPSBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzaywgc2tzZWMtPnNpZCk7CisJZWxzZQorCQlyYyA9IDA7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogCWxvY2FsX2JoX2VuYWJsZSgpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzg1LDcgKzMzMyw2IEBACiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWlmIChsZXZlbCA9PSBJUFBST1RPX0lQICYmIG9wdG5hbWUgPT0gSVBfT1BUSU9OUyAmJgogCSAgICBza3NlYy0+bmxibF9zdGF0ZSA9PSBOTEJMX0xBQkVMRUQpIHsKIAkJbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7CkBAIC0zOTYsNyArMzQzLDYgQEAKIAkJCXJjID0gLUVBQ0NFUzsKIAkJbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2VjYXR0cik7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9uZXRsaW5rLmMgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxpbmsuYwppbmRleCBiNTk4NzFkLi4xYWU1NTY0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldGxpbmsuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxpbmsuYwpAQCAtMjQsMTYgKzI0LDE2IEBACiBzdGF0aWMgaW50IHNlbG5sX21zZ2xlbihpbnQgbXNndHlwZSkKIHsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCXN3aXRjaCAobXNndHlwZSkgewogCWNhc2UgU0VMTkxfTVNHX1NFVEVORk9SQ0U6CiAJCXJldCA9IHNpemVvZihzdHJ1Y3Qgc2VsbmxfbXNnX3NldGVuZm9yY2UpOwogCQlicmVhazsKLQkKKwogCWNhc2UgU0VMTkxfTVNHX1BPTElDWUxPQUQ6CiAJCXJldCA9IHNpemVvZihzdHJ1Y3Qgc2VsbmxfbXNnX3BvbGljeWxvYWQpOwogCQlicmVhazsKLQkJCisKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CkBAIC00NSwxNSArNDUsMTUgQEAKIAlzd2l0Y2ggKG1zZ3R5cGUpIHsKIAljYXNlIFNFTE5MX01TR19TRVRFTkZPUkNFOiB7CiAJCXN0cnVjdCBzZWxubF9tc2dfc2V0ZW5mb3JjZSAqbXNnID0gTkxNU0dfREFUQShubGgpOwotCQkKKwogCQltZW1zZXQobXNnLCAwLCBsZW4pOwogCQltc2ctPnZhbCA9ICooKGludCAqKWRhdGEpOwogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFNFTE5MX01TR19QT0xJQ1lMT0FEOiB7CiAJCXN0cnVjdCBzZWxubF9tc2dfcG9saWN5bG9hZCAqbXNnID0gTkxNU0dfREFUQShubGgpOwotCQkKKwogCQltZW1zZXQobXNnLCAwLCBsZW4pOwogCQltc2ctPnNlcW5vID0gKigodTMyICopZGF0YSk7CiAJCWJyZWFrOwpAQCAtNzAsOSArNzAsOSBAQAogCXNrX2J1ZmZfZGF0YV90IHRtcDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCQorCiAJbGVuID0gc2VsbmxfbXNnbGVuKG1zZ3R5cGUpOwotCQorCiAJc2tiID0gYWxsb2Nfc2tiKE5MTVNHX1NQQUNFKGxlbiksIEdGUF9VU0VSKTsKIAlpZiAoIXNrYikKIAkJZ290byBvb207CkBAIC04NSwxMSArODUsMTEgQEAKIAluZXRsaW5rX2Jyb2FkY2FzdChzZWxubCwgc2tiLCAwLCBTRUxOTEdSUF9BVkMsIEdGUF9VU0VSKTsKIG91dDoKIAlyZXR1cm47Ci0JCisKIG5sbXNnX2ZhaWx1cmU6CiAJa2ZyZWVfc2tiKHNrYik7CiBvb206Ci0JcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgT09NIGluICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIE9PTSBpbiAlc1xuIiwgX19mdW5jX18pOwogCWdvdG8gb3V0OwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAKIAkJCQkgICAgICBTRUxOTEdSUF9NQVgsIE5VTEwsIE5VTEwsIFRISVNfTU9EVUxFKTsKIAlpZiAoc2VsbmwgPT0gTlVMTCkKIAkJcGFuaWMoIlNFTGludXg6ICBDYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0LiIpOwotCW5ldGxpbmtfc2V0X25vbnJvb3QoTkVUTElOS19TRUxJTlVYLCBOTF9OT05ST09UX1JFQ1YpOwkKKwluZXRsaW5rX3NldF9ub25yb290KE5FVExJTktfU0VMSU5VWCwgTkxfTk9OUk9PVF9SRUNWKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9uZXRub2RlLmMgYi9zZWN1cml0eS9zZWxpbnV4L25ldG5vZGUuYwppbmRleCBmM2M1MjZmLi4yZWRjNGM1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldG5vZGUuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldG5vZGUuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJCUlOSVRfTElTVF9IRUFEKCZzZWxfbmV0bm9kZV9oYXNoW2l0ZXJdKTsKIAogCXJldCA9IGF2Y19hZGRfY2FsbGJhY2soc2VsX25ldG5vZGVfYXZjX2NhbGxiYWNrLCBBVkNfQ0FMTEJBQ0tfUkVTRVQsCi0JICAgICAgICAgICAgICAgICAgICAgICBTRUNTSURfTlVMTCwgU0VDU0lEX05VTEwsIFNFQ0NMQVNTX05VTEwsIDApOworCQkJICAgICAgIFNFQ1NJRF9OVUxMLCBTRUNTSURfTlVMTCwgU0VDQ0xBU1NfTlVMTCwgMCk7CiAJaWYgKHJldCAhPSAwKQogCQlwYW5pYygiYXZjX2FkZF9jYWxsYmFjaygpIGZhaWxlZCwgZXJyb3IgJWRcbiIsIHJldCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0cG9ydC5jIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlZGUzYwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmV0cG9ydC5jCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogTmV0d29yayBwb3J0IHRhYmxlCisgKgorICogU0VMaW51eCBtdXN0IGtlZXAgYSBtYXBwaW5nIG9mIG5ldHdvcmsgcG9ydHMgdG8gbGFiZWxzL1NJRHMuICBUaGlzCisgKiBtYXBwaW5nIGlzIG1haW50YWluZWQgYXMgcGFydCBvZiB0aGUgbm9ybWFsIHBvbGljeSBidXQgYSBmYXN0IGNhY2hlIGlzCisgKiBuZWVkZWQgdG8gcmVkdWNlIHRoZSBsb29rdXAgb3ZlcmhlYWQuCisgKgorICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgIm5ldGlmIiBjb25jZXB0IG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5CisgKiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KKyAqICAgKHNlZSBzZWN1cml0eS9zZWxpbnV4L25ldGlmLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24pCisgKgorICovCisKKy8qCisgKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisKKyNpbmNsdWRlICJuZXRwb3J0LmgiCisjaW5jbHVkZSAib2Jqc2VjLmgiCisKKyNkZWZpbmUgU0VMX05FVFBPUlRfSEFTSF9TSVpFICAgICAgIDI1NgorI2RlZmluZSBTRUxfTkVUUE9SVF9IQVNIX0JLVF9MSU1JVCAgIDE2CisKK3N0cnVjdCBzZWxfbmV0cG9ydF9ia3QgeworCWludCBzaXplOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBzZWxfbmV0cG9ydCB7CisJc3RydWN0IG5ldHBvcnRfc2VjdXJpdHlfc3RydWN0IHBzZWM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKK307CisKKy8qIE5PVEU6IHdlIGFyZSB1c2luZyBhIGNvbWJpbmVkIGhhc2ggdGFibGUgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiwgdGhlIHJlYXNvbgorICogZm9yIHRoaXMgaXMgdGhhdCBJIHN1c3BlY3QgbW9zdCB1c2VycyB3aWxsIG5vdCBtYWtlIGhlYXZ5IHVzZSBvZiBib3RoCisgKiBhZGRyZXNzIGZhbWlsaWVzIGF0IHRoZSBzYW1lIHRpbWUgc28gb25lIHRhYmxlIHdpbGwgdXN1YWxseSBlbmQgdXAgd2FzdGVkLAorICogaWYgdGhpcyBiZWNvbWVzIGEgcHJvYmxlbSB3ZSBjYW4gYWx3YXlzIGFkZCBhIGhhc2ggdGFibGUgZm9yIGVhY2ggYWRkcmVzcworICogZmFtaWx5IGxhdGVyICovCisKK3N0YXRpYyBMSVNUX0hFQUQoc2VsX25ldHBvcnRfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNlbF9uZXRwb3J0X2xvY2spOworc3RhdGljIHN0cnVjdCBzZWxfbmV0cG9ydF9ia3Qgc2VsX25ldHBvcnRfaGFzaFtTRUxfTkVUUE9SVF9IQVNIX1NJWkVdOworCisvKioKKyAqIHNlbF9uZXRwb3J0X2ZyZWUgLSBGcmVlcyBhIHBvcnQgZW50cnkKKyAqIEBwOiB0aGUgZW50cnkncyBSQ1UgZmllbGQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGNhbGxiYWNrIHRvIHRoZSBjYWxsX3JjdSgpCisgKiBmdW5jdGlvbiBzbyB0aGF0IG1lbW9yeSBhbGxvY2F0ZWQgdG8gYSBoYXNoIHRhYmxlIHBvcnQgZW50cnkgY2FuIGJlCisgKiByZWxlYXNlZCBzYWZlbHkuCisgKgorICovCitzdGF0aWMgdm9pZCBzZWxfbmV0cG9ydF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcCkKK3sKKwlzdHJ1Y3Qgc2VsX25ldHBvcnQgKnBvcnQgPSBjb250YWluZXJfb2YocCwgc3RydWN0IHNlbF9uZXRwb3J0LCByY3UpOworCWtmcmVlKHBvcnQpOworfQorCisvKioKKyAqIHNlbF9uZXRwb3J0X2hhc2hmbiAtIEhhc2hpbmcgZnVuY3Rpb24gZm9yIHRoZSBwb3J0IHRhYmxlCisgKiBAcG51bTogcG9ydCBudW1iZXIKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgaXMgdGhlIGhhc2hpbmcgZnVuY3Rpb24gZm9yIHRoZSBwb3J0IHRhYmxlLCBpdCByZXR1cm5zIHRoZSBidWNrZXQKKyAqIG51bWJlciBmb3IgdGhlIGdpdmVuIHBvcnQuCisgKgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNlbF9uZXRwb3J0X2hhc2hmbih1MTYgcG51bSkKK3sKKwlyZXR1cm4gKHBudW0gJiAoU0VMX05FVFBPUlRfSEFTSF9TSVpFIC0gMSkpOworfQorCisvKioKKyAqIHNlbF9uZXRwb3J0X2ZpbmQgLSBTZWFyY2ggZm9yIGEgcG9ydCByZWNvcmQKKyAqIEBwcm90b2NvbDogcHJvdG9jb2wKKyAqIEBwb3J0OiBwbnVtCisgKgorICogRGVzY3JpcHRpb246CisgKiBTZWFyY2ggdGhlIG5ldHdvcmsgcG9ydCB0YWJsZSBhbmQgcmV0dXJuIHRoZSBtYXRjaGluZyByZWNvcmQuICBJZiBhbiBlbnRyeQorICogY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGFibGUgcmV0dXJuIE5VTEwuCisgKgorICovCitzdGF0aWMgc3RydWN0IHNlbF9uZXRwb3J0ICpzZWxfbmV0cG9ydF9maW5kKHU4IHByb3RvY29sLCB1MTYgcG51bSkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCXN0cnVjdCBzZWxfbmV0cG9ydCAqcG9ydDsKKworCWlkeCA9IHNlbF9uZXRwb3J0X2hhc2hmbihwbnVtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmc2VsX25ldHBvcnRfaGFzaFtpZHhdLmxpc3QsIGxpc3QpCisJCWlmIChwb3J0LT5wc2VjLnBvcnQgPT0gcG51bSAmJgorCQkgICAgcG9ydC0+cHNlYy5wcm90b2NvbCA9PSBwcm90b2NvbCkKKwkJCXJldHVybiBwb3J0OworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogc2VsX25ldHBvcnRfaW5zZXJ0IC0gSW5zZXJ0IGEgbmV3IHBvcnQgaW50byB0aGUgdGFibGUKKyAqIEBwb3J0OiB0aGUgbmV3IHBvcnQgcmVjb3JkCisgKgorICogRGVzY3JpcHRpb246CisgKiBBZGQgYSBuZXcgcG9ydCByZWNvcmQgdG8gdGhlIG5ldHdvcmsgYWRkcmVzcyBoYXNoIHRhYmxlLiAgUmV0dXJucyB6ZXJvIG9uCisgKiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc2VsX25ldHBvcnRfaW5zZXJ0KHN0cnVjdCBzZWxfbmV0cG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCisJLyogd2UgbmVlZCB0byBpbXBvc2UgYSBsaW1pdCBvbiB0aGUgZ3Jvd3RoIG9mIHRoZSBoYXNoIHRhYmxlIHNvIGNoZWNrCisJICogdGhpcyBidWNrZXQgdG8gbWFrZSBzdXJlIGl0IGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGJvdW5kcyAqLworCWlkeCA9IHNlbF9uZXRwb3J0X2hhc2hmbihwb3J0LT5wc2VjLnBvcnQpOworCWxpc3RfYWRkX3JjdSgmcG9ydC0+bGlzdCwgJnNlbF9uZXRwb3J0X2hhc2hbaWR4XS5saXN0KTsKKwlpZiAoc2VsX25ldHBvcnRfaGFzaFtpZHhdLnNpemUgPT0gU0VMX05FVFBPUlRfSEFTSF9CS1RfTElNSVQpIHsKKwkJc3RydWN0IHNlbF9uZXRwb3J0ICp0YWlsOworCQl0YWlsID0gbGlzdF9lbnRyeShwb3J0LT5saXN0LnByZXYsIHN0cnVjdCBzZWxfbmV0cG9ydCwgbGlzdCk7CisJCWxpc3RfZGVsX3JjdShwb3J0LT5saXN0LnByZXYpOworCQljYWxsX3JjdSgmdGFpbC0+cmN1LCBzZWxfbmV0cG9ydF9mcmVlKTsKKwl9IGVsc2UKKwkJc2VsX25ldHBvcnRfaGFzaFtpZHhdLnNpemUrKzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNlbF9uZXRwb3J0X3NpZF9zbG93IC0gTG9va3VwIHRoZSBTSUQgb2YgYSBuZXR3b3JrIGFkZHJlc3MgdXNpbmcgdGhlIHBvbGljeQorICogQHByb3RvY29sOiBwcm90b2NvbAorICogQHBudW06IHBvcnQKKyAqIEBzaWQ6IHBvcnQgU0lECisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgdGhlIFNJRCBvZiBhIG5ldHdvcmsgcG9ydCBieSBxdWVyaW5nIHRoZSBzZWN1cml0eQorICogcG9saWN5LiAgVGhlIHJlc3VsdCBpcyBhZGRlZCB0byB0aGUgbmV0d29yayBwb3J0IHRhYmxlIHRvIHNwZWVkdXAgZnV0dXJlCisgKiBxdWVyaWVzLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBzZWxfbmV0cG9ydF9zaWRfc2xvdyh1OCBwcm90b2NvbCwgdTE2IHBudW0sIHUzMiAqc2lkKQoreworCWludCByZXQ7CisJc3RydWN0IHNlbF9uZXRwb3J0ICpwb3J0OworCXN0cnVjdCBzZWxfbmV0cG9ydCAqbmV3ID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmc2VsX25ldHBvcnRfbG9jayk7CisJcG9ydCA9IHNlbF9uZXRwb3J0X2ZpbmQocHJvdG9jb2wsIHBudW0pOworCWlmIChwb3J0ICE9IE5VTEwpIHsKKwkJKnNpZCA9IHBvcnQtPnBzZWMuc2lkOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisJbmV3ID0ga3phbGxvYyhzaXplb2YoKm5ldyksIEdGUF9BVE9NSUMpOworCWlmIChuZXcgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gc2VjdXJpdHlfcG9ydF9zaWQocHJvdG9jb2wsIHBudW0sICZuZXctPnBzZWMuc2lkKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0OworCW5ldy0+cHNlYy5wb3J0ID0gcG51bTsKKwluZXctPnBzZWMucHJvdG9jb2wgPSBwcm90b2NvbDsKKwlyZXQgPSBzZWxfbmV0cG9ydF9pbnNlcnQobmV3KTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0OworCSpzaWQgPSBuZXctPnBzZWMuc2lkOworCitvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJnNlbF9uZXRwb3J0X2xvY2spOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJTRUxpbnV4OiBmYWlsdXJlIGluIHNlbF9uZXRwb3J0X3NpZF9zbG93KCksIgorCQkgICAgICAgIiB1bmFibGUgdG8gZGV0ZXJtaW5lIG5ldHdvcmsgcG9ydCBsYWJlbFxuIik7CisJCWtmcmVlKG5ldyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc2VsX25ldHBvcnRfc2lkIC0gTG9va3VwIHRoZSBTSUQgb2YgYSBuZXR3b3JrIHBvcnQKKyAqIEBwcm90b2NvbDogcHJvdG9jb2wKKyAqIEBwbnVtOiBwb3J0CisgKiBAc2lkOiBwb3J0IFNJRAorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBTSUQgb2YgYSBuZXR3b3JrIHBvcnQgdXNpbmcgdGhlIGZhc3Rlc3QgbWV0aG9kCisgKiBwb3NzaWJsZS4gIEZpcnN0IHRoZSBwb3J0IHRhYmxlIGlzIHF1ZXJpZWQsIGJ1dCBpZiBhbiBlbnRyeSBjYW4ndCBiZSBmb3VuZAorICogdGhlbiB0aGUgcG9saWN5IGlzIHF1ZXJpZWQgYW5kIHRoZSByZXN1bHQgaXMgYWRkZWQgdG8gdGhlIHRhYmxlIHRvIHNwZWVkdXAKKyAqIGZ1dHVyZSBxdWVyaWVzLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IHNlbF9uZXRwb3J0X3NpZCh1OCBwcm90b2NvbCwgdTE2IHBudW0sIHUzMiAqc2lkKQoreworCXN0cnVjdCBzZWxfbmV0cG9ydCAqcG9ydDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwb3J0ID0gc2VsX25ldHBvcnRfZmluZChwcm90b2NvbCwgcG51bSk7CisJaWYgKHBvcnQgIT0gTlVMTCkgeworCQkqc2lkID0gcG9ydC0+cHNlYy5zaWQ7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gMDsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gc2VsX25ldHBvcnRfc2lkX3Nsb3cocHJvdG9jb2wsIHBudW0sIHNpZCk7Cit9CisKKy8qKgorICogc2VsX25ldHBvcnRfZmx1c2ggLSBGbHVzaCB0aGUgZW50aXJlIG5ldHdvcmsgcG9ydCB0YWJsZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlIGFsbCBlbnRyaWVzIGZyb20gdGhlIG5ldHdvcmsgYWRkcmVzcyB0YWJsZS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHNlbF9uZXRwb3J0X2ZsdXNoKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlzdHJ1Y3Qgc2VsX25ldHBvcnQgKnBvcnQ7CisKKwlzcGluX2xvY2tfYmgoJnNlbF9uZXRwb3J0X2xvY2spOworCWZvciAoaWR4ID0gMDsgaWR4IDwgU0VMX05FVFBPUlRfSEFTSF9TSVpFOyBpZHgrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZzZWxfbmV0cG9ydF9oYXNoW2lkeF0ubGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWxfcmN1KCZwb3J0LT5saXN0KTsKKwkJCWNhbGxfcmN1KCZwb3J0LT5yY3UsIHNlbF9uZXRwb3J0X2ZyZWUpOworCQl9CisJCXNlbF9uZXRwb3J0X2hhc2hbaWR4XS5zaXplID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNlbF9uZXRwb3J0X2xvY2spOworfQorCitzdGF0aWMgaW50IHNlbF9uZXRwb3J0X2F2Y19jYWxsYmFjayh1MzIgZXZlbnQsIHUzMiBzc2lkLCB1MzIgdHNpZCwKKwkJCQkgICAgdTE2IGNsYXNzLCB1MzIgcGVybXMsIHUzMiAqcmV0YWluZWQpCit7CisJaWYgKGV2ZW50ID09IEFWQ19DQUxMQkFDS19SRVNFVCkgeworCQlzZWxfbmV0cG9ydF9mbHVzaCgpOworCQlzeW5jaHJvbml6ZV9uZXQoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IHNlbF9uZXRwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgaXRlcjsKKwlpbnQgcmV0OworCisJaWYgKCFzZWxpbnV4X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJZm9yIChpdGVyID0gMDsgaXRlciA8IFNFTF9ORVRQT1JUX0hBU0hfU0laRTsgaXRlcisrKSB7CisJCUlOSVRfTElTVF9IRUFEKCZzZWxfbmV0cG9ydF9oYXNoW2l0ZXJdLmxpc3QpOworCQlzZWxfbmV0cG9ydF9oYXNoW2l0ZXJdLnNpemUgPSAwOworCX0KKworCXJldCA9IGF2Y19hZGRfY2FsbGJhY2soc2VsX25ldHBvcnRfYXZjX2NhbGxiYWNrLCBBVkNfQ0FMTEJBQ0tfUkVTRVQsCisJICAgICAgICAgICAgICAgICAgICAgICBTRUNTSURfTlVMTCwgU0VDU0lEX05VTEwsIFNFQ0NMQVNTX05VTEwsIDApOworCWlmIChyZXQgIT0gMCkKKwkJcGFuaWMoImF2Y19hZGRfY2FsbGJhY2soKSBmYWlsZWQsIGVycm9yICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworX19pbml0Y2FsbChzZWxfbmV0cG9ydF9pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYyBiL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYwppbmRleCBlZGRjN2I0Li5mZjU5YzBjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCkBAIC0yMyw4ICsyMyw3IEBACiAjaW5jbHVkZSAiZmxhc2suaCIKICNpbmNsdWRlICJhdl9wZXJtaXNzaW9ucy5oIgogCi1zdHJ1Y3Qgbmxtc2dfcGVybQoteworc3RydWN0IG5sbXNnX3Blcm0gewogCXUxNglubG1zZ190eXBlOwogCXUzMglwZXJtOwogfTsKQEAgLTE1OSw3ICsxNTgsNyBAQAogCQlpZiAoKG5sbXNnX3R5cGUgPj0gQVVESVRfRklSU1RfVVNFUl9NU0cgJiYKIAkJICAgICBubG1zZ190eXBlIDw9IEFVRElUX0xBU1RfVVNFUl9NU0cpIHx8CiAJCSAgICAobmxtc2dfdHlwZSA+PSBBVURJVF9GSVJTVF9VU0VSX01TRzIgJiYKLSAgICAgICAgICAgICAgICAgICAgIG5sbXNnX3R5cGUgPD0gQVVESVRfTEFTVF9VU0VSX01TRzIpKSB7CisJCSAgICAgbmxtc2dfdHlwZSA8PSBBVURJVF9MQVNUX1VTRVJfTVNHMikpIHsKIAkJCSpwZXJtID0gTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFTEFZOwogCQl9IGVsc2UgewogCQkJZXJyID0gbmxtc2dfcGVybShubG1zZ190eXBlLCBwZXJtLCBubG1zZ19hdWRpdF9wZXJtcywKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IDAzNDE1NjcuLmFjMWNjYzEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtMSwxNiArMSwxNiBAQAogLyogVXBkYXRlZDogS2FybCBNYWNNaWxsYW4gPGttYWNtaWxsYW5AdHJlc3lzLmNvbT4KICAqCi0gKiAJQWRkZWQgY29uZGl0aW9uYWwgcG9saWN5IGxhbmd1YWdlIGV4dGVuc2lvbnMKKyAqCUFkZGVkIGNvbmRpdGlvbmFsIHBvbGljeSBsYW5ndWFnZSBleHRlbnNpb25zCiAgKgogICogIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bC5tb29yZUBocC5jb20+CiAgKgotICogICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgcG9saWN5IGNhcGFiaWxpdHkgYml0bWFwCisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgcG9saWN5IGNhcGFiaWxpdHkgYml0bWFwCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA0IFRyZXN5cyBUZWNobm9sb2d5LCBMTEMKICAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICovCiAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAvKiBzZWxpbnV4ZnMgcHNldWRvIGZpbGVzeXN0ZW0gZm9yIGV4cG9ydGluZyB0aGUgc2VjdXJpdHkgcG9saWN5IEFQSS4KICAgIEJhc2VkIG9uIHRoZSBwcm9jIGNvZGUgYW5kIHRoZSBmcy9uZnNkL25mc2N0bC5jIGNvZGUuICovCkBAIC00Miw3ICs0MSw4IEBACiAKIC8qIFBvbGljeSBjYXBhYmlsaXR5IGZpbGVuYW1lcyAqLwogc3RhdGljIGNoYXIgKnBvbGljeWNhcF9uYW1lc1tdID0gewotCSJuZXR3b3JrX3BlZXJfY29udHJvbHMiCisJIm5ldHdvcmtfcGVlcl9jb250cm9scyIsCisJIm9wZW5fcGVybXMiCiB9OwogCiB1bnNpZ25lZCBpbnQgc2VsaW51eF9jaGVja3JlcXByb3QgPSBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9DSEVDS1JFUVBST1RfVkFMVUU7CkBAIC01NywxNCArNTcsMTQgQEAKIAogc3RhdGljIGludCBfX2luaXQgY2hlY2tyZXFwcm90X3NldHVwKGNoYXIgKnN0cikKIHsKLQlzZWxpbnV4X2NoZWNrcmVxcHJvdCA9IHNpbXBsZV9zdHJ0b3VsKHN0cixOVUxMLDApID8gMSA6IDA7CisJc2VsaW51eF9jaGVja3JlcXByb3QgPSBzaW1wbGVfc3RydG91bChzdHIsIE5VTEwsIDApID8gMSA6IDA7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJjaGVja3JlcXByb3Q9IiwgY2hlY2tyZXFwcm90X3NldHVwKTsKIAogc3RhdGljIGludCBfX2luaXQgc2VsaW51eF9jb21wYXRfbmV0X3NldHVwKGNoYXIgKnN0cikKIHsKLQlzZWxpbnV4X2NvbXBhdF9uZXQgPSBzaW1wbGVfc3RydG91bChzdHIsTlVMTCwwKSA/IDEgOiAwOworCXNlbGludXhfY29tcGF0X25ldCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCkgPyAxIDogMDsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoInNlbGludXhfY29tcGF0X25ldD0iLCBzZWxpbnV4X2NvbXBhdF9uZXRfc2V0dXApOwpAQCAtNzMsMTcgKzczLDE3IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKHNlbF9tdXRleCk7CiAKIC8qIGdsb2JhbCBkYXRhIGZvciBib29sZWFucyAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmJvb2xfZGlyID0gTlVMTDsKLXN0YXRpYyBpbnQgYm9vbF9udW0gPSAwOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJvb2xfZGlyOworc3RhdGljIGludCBib29sX251bTsKIHN0YXRpYyBjaGFyICoqYm9vbF9wZW5kaW5nX25hbWVzOwotc3RhdGljIGludCAqYm9vbF9wZW5kaW5nX3ZhbHVlcyA9IE5VTEw7CitzdGF0aWMgaW50ICpib29sX3BlbmRpbmdfdmFsdWVzOwogCiAvKiBnbG9iYWwgZGF0YSBmb3IgY2xhc3NlcyAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmNsYXNzX2RpciA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqY2xhc3NfZGlyOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9jbGFzc19pbm87CiAKIC8qIGdsb2JhbCBkYXRhIGZvciBwb2xpY3kgY2FwYWJpbGl0aWVzICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqcG9saWN5Y2FwX2RpciA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcG9saWN5Y2FwX2RpcjsKIAogZXh0ZXJuIHZvaWQgc2Vsbmxfbm90aWZ5X3NldGVuZm9yY2UoaW50IHZhbCk7CiAKQEAgLTE0Miw3ICsxNDIsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUAotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2VuZm9yY2Uoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9lbmZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAogewpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCS8qIE5vIHBhcnRpYWwgd3JpdGVzLiAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcGFnZSA9IChjaGFyKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJcGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbGVuZ3RoID0gLUVGQVVMVDsKQEAgLTIxMyw3ICsyMTMsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEUKLXN0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9kaXNhYmxlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfZGlzYWJsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiAKIHsKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXBhZ2UgPSAoY2hhciopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWxlbmd0aCA9IC1FRkFVTFQ7CkBAIC0yNjMsNyArMjYzLDcgQEAKIH07CiAKIHN0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX3BvbGljeXZlcnMoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWNoYXIgdG1wYnVmW1RNUEJVRkxFTl07CiAJc3NpemVfdCBsZW5ndGg7CkBAIC0yOTksNyArMjk5LDcgQEAKIAkucmVhZAkJPSBzZWxfcmVhZF9tbHMsCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfbG9hZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAorc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2xvYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAogewpAQCAtMzcxLDcgKzM3MSw3IEBACiAJLndyaXRlCQk9IHNlbF93cml0ZV9sb2FkLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NvbnRleHQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQorc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NvbnRleHQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAJY2hhciAqY2Fub247CiAJdTMyIHNpZCwgbGVuOwpAQCAtMzkwLDggKzM5MCw4IEBACiAJCXJldHVybiBsZW5ndGg7CiAKIAlpZiAobGVuID4gU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICBjb250ZXh0IHNpemUgKCV1KSBleGNlZWRzIHBheWxvYWQgIgotCQkgICAgICAgIm1heFxuIiwgX19GVU5DVElPTl9fLCBsZW4pOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgY29udGV4dCBzaXplICgldSkgZXhjZWVkcyAiCisJCQkicGF5bG9hZCBtYXhcbiIsIF9fZnVuY19fLCBsZW4pOwogCQlsZW5ndGggPSAtRVJBTkdFOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MTMsNyArNDEzLDcgQEAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY2hlY2tyZXFwcm90KHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY2hlY2tyZXFwcm90KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWNoYXIgKnBhZ2U7CkBAIC00MzAsNyArNDMwLDcgQEAKIAkJLyogTm8gcGFydGlhbCB3cml0ZXMuICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwYWdlID0gKGNoYXIqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlwYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlsZW5ndGggPSAtRUZBVUxUOwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIHRtcGJ1ZiwgbGVuZ3RoKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NvbXBhdF9uZXQoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9jb21wYXRfbmV0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyICpwYWdlOwpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJCS8qIE5vIHBhcnRpYWwgd3JpdGVzLiAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcGFnZSA9IChjaGFyKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJcGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbGVuZ3RoID0gLUVGQVVMVDsKQEAgLTUwNCwxMSArNTA0LDExIEBACiAvKgogICogUmVtYWluaW5nIG5vZGVzIHVzZSB0cmFuc2FjdGlvbiBiYXNlZCBJTyBtZXRob2RzIGxpa2UgbmZzZC9uZnNjdGwuYwogICovCi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7Ci1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY3JlYXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7Ci1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfcmVsYWJlbChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOwotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX3VzZXIoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKLXN0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9tZW1iZXIoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKK3N0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOworc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfcmVsYWJlbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfdXNlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfbWVtYmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKIAogc3RhdGljIHNzaXplX3QgKCp3cml0ZV9vcFtdKShzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCkgPSB7CiAJW1NFTF9BQ0NFU1NdID0gc2VsX3dyaXRlX2FjY2VzcywKQEAgLTUyMSw3ICs1MjEsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBzZWxpbnV4X3RyYW5zYWN0aW9uX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCiB7Ci0JaW5vX3QgaW5vID0gIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vOworCWlub190IGlubyA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vOwogCWNoYXIgKmRhdGE7CiAJc3NpemVfdCBydjsKIApAQCAtNTMyLDggKzUzMiw4IEBACiAJaWYgKElTX0VSUihkYXRhKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CiAKLQlydiA9ICB3cml0ZV9vcFtpbm9dKGZpbGUsIGRhdGEsIHNpemUpOwotCWlmIChydj4wKSB7CisJcnYgPSB3cml0ZV9vcFtpbm9dKGZpbGUsIGRhdGEsIHNpemUpOworCWlmIChydiA+IDApIHsKIAkJc2ltcGxlX3RyYW5zYWN0aW9uX3NldChmaWxlLCBydik7CiAJCXJ2ID0gc2l6ZTsKIAl9CkBAIC01NTIsNyArNTUyLDcgQEAKICAqIGFuZCB0aGUgbGVuZ3RoIHJldHVybmVkLiAgT3RoZXJ3aXNlIHJldHVybiAwIG9yIGFuZCAtZXJyb3IuCiAgKi8KIAotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCWNoYXIgKnNjb24sICp0Y29uOwogCXUzMiBzc2lkLCB0c2lkOwpAQCAtNjAxLDcgKzYwMSw3IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCWNoYXIgKnNjb24sICp0Y29uOwogCXUzMiBzc2lkLCB0c2lkLCBuZXdzaWQ7CkBAIC02NDMsOCArNjQzLDggQEAKIAkJZ290byBvdXQyOwogCiAJaWYgKGxlbiA+IFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgY29udGV4dCBzaXplICgldSkgZXhjZWVkcyBwYXlsb2FkICIKLQkJICAgICAgICJtYXhcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIGNvbnRleHQgc2l6ZSAoJXUpIGV4Y2VlZHMgIgorCQkJInBheWxvYWQgbWF4XG4iLCBfX2Z1bmNfXywgbGVuKTsKIAkJbGVuZ3RoID0gLUVSQU5HRTsKIAkJZ290byBvdXQzOwogCX0KQEAgLTY2MCw3ICs2NjAsNyBAQAogCXJldHVybiBsZW5ndGg7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9yZWxhYmVsKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9yZWxhYmVsKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCWNoYXIgKnNjb24sICp0Y29uOwogCXUzMiBzc2lkLCB0c2lkLCBuZXdzaWQ7CkBAIC03MTcsNyArNzE3LDcgQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfdXNlcihzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfdXNlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljaGFyICpjb24sICp1c2VyLCAqcHRyOwogCXUzMiBzaWQsICpzaWRzOwpAQCAtNzc4LDcgKzc3OCw3IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2VsX3dyaXRlX21lbWJlcihzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfbWVtYmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCWNoYXIgKnNjb24sICp0Y29uOwogCXUzMiBzc2lkLCB0c2lkLCBuZXdzaWQ7CkBAIC04MjAsOCArODIwLDggQEAKIAkJZ290byBvdXQyOwogCiAJaWYgKGxlbiA+IFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAgY29udGV4dCBzaXplICgldSkgZXhjZWVkcyBwYXlsb2FkICIKLQkJICAgICAgICJtYXhcbiIsIF9fRlVOQ1RJT05fXywgbGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIGNvbnRleHQgc2l6ZSAoJXUpIGV4Y2VlZHMgIgorCQkJInBheWxvYWQgbWF4XG4iLCBfX2Z1bmNfXywgbGVuKTsKIAkJbGVuZ3RoID0gLUVSQU5HRTsKIAkJZ290byBvdXQzOwogCX0KQEAgLTg3Miw3ICs4NzIsOCBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKCEocGFnZSA9IChjaGFyKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpKSB7CisJcGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghcGFnZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC05MjMsNyArOTI0LDcgQEAKIAkJbGVuZ3RoID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQotCXBhZ2UgPSAoY2hhciopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXBhZ2UpIHsKIAkJbGVuZ3RoID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC05NTEsOCArOTUyLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2Jvb2xfb3BzID0gewotCS5yZWFkICAgICAgICAgICA9IHNlbF9yZWFkX2Jvb2wsCi0JLndyaXRlICAgICAgICAgID0gc2VsX3dyaXRlX2Jvb2wsCisJLnJlYWQJCT0gc2VsX3JlYWRfYm9vbCwKKwkud3JpdGUJCT0gc2VsX3dyaXRlX2Jvb2wsCiB9OwogCiBzdGF0aWMgc3NpemVfdCBzZWxfY29tbWl0X2Jvb2xzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlcCwKQEAgLTk3Nyw3ICs5NzgsNyBAQAogCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KIAkJZ290byBvdXQ7CiAJfQotCXBhZ2UgPSAoY2hhciopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXBhZ2UpIHsKIAkJbGVuZ3RoID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC05OTEsOSArOTkyLDggQEAKIAlpZiAoc3NjYW5mKHBhZ2UsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpCiAJCWdvdG8gb3V0OwogCi0JaWYgKG5ld192YWx1ZSAmJiBib29sX3BlbmRpbmdfdmFsdWVzKSB7CisJaWYgKG5ld192YWx1ZSAmJiBib29sX3BlbmRpbmdfdmFsdWVzKQogCQlzZWN1cml0eV9zZXRfYm9vbHMoYm9vbF9udW0sIGJvb2xfcGVuZGluZ192YWx1ZXMpOwotCX0KIAogCWxlbmd0aCA9IGNvdW50OwogCkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfY29tbWl0X2Jvb2xzX29wcyA9IHsKLQkud3JpdGUgICAgICAgICAgPSBzZWxfY29tbWl0X2Jvb2xzX3dyaXRlLAorCS53cml0ZQkJPSBzZWxfY29tbWl0X2Jvb2xzX3dyaXRlLAogfTsKIAogc3RhdGljIHZvaWQgc2VsX3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBkZW50cnkgKmRlKQpAQCAtMTA1NSw3ICsxMDU1LDggQEAKIAogCXNlbF9yZW1vdmVfZW50cmllcyhkaXIpOwogCi0JaWYgKCEocGFnZSA9IChjaGFyKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpKQorCXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0ID0gc2VjdXJpdHlfZ2V0X2Jvb2xzKCZudW0sICZuYW1lcywgJnZhbHVlcyk7CkBAIC0xMDgyLDggKzEwODMsOSBAQAogCQkJcmV0ID0gLUVOQU1FVE9PTE9ORzsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCWlzZWMgPSAoc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCopaW5vZGUtPmlfc2VjdXJpdHk7Ci0JCWlmICgocmV0ID0gc2VjdXJpdHlfZ2VuZnNfc2lkKCJzZWxpbnV4ZnMiLCBwYWdlLCBTRUNDTEFTU19GSUxFLCAmc2lkKSkpCisJCWlzZWMgPSAoc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqKWlub2RlLT5pX3NlY3VyaXR5OworCQlyZXQgPSBzZWN1cml0eV9nZW5mc19zaWQoInNlbGludXhmcyIsIHBhZ2UsIFNFQ0NMQVNTX0ZJTEUsICZzaWQpOworCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAJCWlzZWMtPnNpZCA9IHNpZDsKIAkJaXNlYy0+aW5pdGlhbGl6ZWQgPSAxOwpAQCAtMTExMSw3ICsxMTEzLDcgQEAKIAogI2RlZmluZSBOVUxMX0ZJTEVfTkFNRSAibnVsbCIKIAotc3RydWN0IGRlbnRyeSAqc2VsaW51eF9udWxsID0gTlVMTDsKK3N0cnVjdCBkZW50cnkgKnNlbGludXhfbnVsbDsKIAogc3RhdGljIHNzaXplX3Qgc2VsX3JlYWRfYXZjX2NhY2hlX3RocmVzaG9sZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtMTEyMyw4ICsxMTI1LDggQEAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfYXZjX2NhY2hlX3RocmVzaG9sZChzdHJ1Y3QgZmlsZSAqIGZpbGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfYXZjX2NhY2hlX3RocmVzaG9sZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogCiB7CkBAIC0xMTQzLDcgKzExNDUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlwYWdlID0gKGNoYXIqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlwYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYWdlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMTMwMSw3ICsxMzAzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzZWxfcmVhZF9pbml0Y29uKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX2luaXRjb24oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTEzNzUsNyArMTM3Nyw3IEBACiAJcmV0dXJuIChpbm8gJiBTRUxfSU5PX01BU0spICUgKFNFTF9WRUNfTUFYICsgMSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX2NsYXNzKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX2NsYXNzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXNzaXplX3QgcmMsIGxlbjsKQEAgLTEzOTksNyArMTQwMSw3IEBACiAJLnJlYWQJCT0gc2VsX3JlYWRfY2xhc3MsCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzZWxfcmVhZF9wZXJtKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX3Blcm0oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3NpemVfdCByYywgbGVuOwpAQCAtMTQxMiw3ICsxNDE0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbGVuID0gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCIlZCIsIHNlbF9pbm9fdG9fcGVybShpbm8pKTsKKwlsZW4gPSBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIlZCIsIHNlbF9pbm9fdG9fcGVybShpbm8pKTsKIAlyYyA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIHBhZ2UsIGxlbik7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOwogb3V0OgpAQCAtMTY0MCw3ICsxNjQyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNlbF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB2b2lkICogZGF0YSwgaW50IHNpbGVudCkKK3N0YXRpYyBpbnQgc2VsX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKQEAgLTE2OTYsNyArMTY5OCw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAlpbm9kZS0+aV9pbm8gPSArK3NlbF9sYXN0X2lubzsKLQlpc2VjID0gKHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QqKWlub2RlLT5pX3NlY3VyaXR5OworCWlzZWMgPSAoc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqKWlub2RlLT5pX3NlY3VyaXR5OwogCWlzZWMtPnNpZCA9IFNFQ0lOSVRTSURfREVWTlVMTDsKIAlpc2VjLT5zY2xhc3MgPSBTRUNDTEFTU19DSFJfRklMRTsKIAlpc2VjLT5pbml0aWFsaXplZCA9IDE7CkBAIC0xNzYwLDcgKzE3NjIsOCBAQAogb3V0OgogCXJldHVybiByZXQ7CiBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogIGZhaWxlZCB3aGlsZSBjcmVhdGluZyBpbm9kZXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIGZhaWxlZCB3aGlsZSBjcmVhdGluZyBpbm9kZXNcbiIsCisJCV9fZnVuY19fKTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jCmluZGV4IGNkMTBlMjcuLjllNjYyNjMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMKQEAgLTYsMTUgKzYsMTUgQEAKIAogLyogVXBkYXRlZDogRnJhbmsgTWF5ZXIgPG1heWVyZkB0cmVzeXMuY29tPiBhbmQgS2FybCBNYWNNaWxsYW4gPGttYWNtaWxsYW5AdHJlc3lzLmNvbT4KICAqCi0gKiAJQWRkZWQgY29uZGl0aW9uYWwgcG9saWN5IGxhbmd1YWdlIGV4dGVuc2lvbnMKKyAqCUFkZGVkIGNvbmRpdGlvbmFsIHBvbGljeSBsYW5ndWFnZSBleHRlbnNpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzIFRyZXN5cyBUZWNobm9sb2d5LCBMTEMKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICoKICAqIFVwZGF0ZWQ6IFl1aWNoaSBOYWthbXVyYSA8eW5ha2FtQGhpdGFjaGlzb2Z0LmpwPgotICogCVR1bmVkIG51bWJlciBvZiBoYXNoIHNsb3RzIGZvciBhdnRhYiB0byByZWR1Y2UgbWVtb3J5IHVzYWdlCisgKglUdW5lZCBudW1iZXIgb2YgaGFzaCBzbG90cyBmb3IgYXZ0YWIgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTMzLDEwICszMywxMCBAQAogCiBzdGF0aWMgc3RydWN0IGF2dGFiX25vZGUqCiBhdnRhYl9pbnNlcnRfbm9kZShzdHJ1Y3QgYXZ0YWIgKmgsIGludCBodmFsdWUsCi0JCSAgc3RydWN0IGF2dGFiX25vZGUgKiBwcmV2LCBzdHJ1Y3QgYXZ0YWJfbm9kZSAqIGN1ciwKKwkJICBzdHJ1Y3QgYXZ0YWJfbm9kZSAqcHJldiwgc3RydWN0IGF2dGFiX25vZGUgKmN1ciwKIAkJICBzdHJ1Y3QgYXZ0YWJfa2V5ICprZXksIHN0cnVjdCBhdnRhYl9kYXR1bSAqZGF0dW0pCiB7Ci0Jc3RydWN0IGF2dGFiX25vZGUgKiBuZXdub2RlOworCXN0cnVjdCBhdnRhYl9ub2RlICpuZXdub2RlOwogCW5ld25vZGUgPSBrbWVtX2NhY2hlX3phbGxvYyhhdnRhYl9ub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5ld25vZGUgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC04NCw3ICs4NCw3IEBACiAJfQogCiAJbmV3bm9kZSA9IGF2dGFiX2luc2VydF9ub2RlKGgsIGh2YWx1ZSwgcHJldiwgY3VyLCBrZXksIGRhdHVtKTsKLQlpZighbmV3bm9kZSkKKwlpZiAoIW5ld25vZGUpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0dXJuIDA7CkBAIC05NSw3ICs5NSw3IEBACiAgKiBJdCBhbHNvIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBub2RlIGluc2VydGVkLgogICovCiBzdHJ1Y3QgYXZ0YWJfbm9kZSAqCi1hdnRhYl9pbnNlcnRfbm9udW5pcXVlKHN0cnVjdCBhdnRhYiAqIGgsIHN0cnVjdCBhdnRhYl9rZXkgKiBrZXksIHN0cnVjdCBhdnRhYl9kYXR1bSAqIGRhdHVtKQorYXZ0YWJfaW5zZXJ0X25vbnVuaXF1ZShzdHJ1Y3QgYXZ0YWIgKmgsIHN0cnVjdCBhdnRhYl9rZXkgKmtleSwgc3RydWN0IGF2dGFiX2RhdHVtICpkYXR1bSkKIHsKIAlpbnQgaHZhbHVlOwogCXN0cnVjdCBhdnRhYl9ub2RlICpwcmV2LCAqY3VyLCAqbmV3bm9kZTsKQEAgLTI4MCw4ICsyODAsOCBAQAogCWgtPm5lbCA9IDA7CiAJaC0+bnNsb3QgPSBuc2xvdDsKIAloLT5tYXNrID0gbWFzazsKLQlwcmludGsoS0VSTl9ERUJVRyAiU0VMaW51eDolZCBhdnRhYiBoYXNoIHNsb3RzIGFsbG9jYXRlZC4gIgotCSAgICAgICAiTnVtIG9mIHJ1bGVzOiVkXG4iLCBoLT5uc2xvdCwgbnJ1bGVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiU0VMaW51eDogJWQgYXZ0YWIgaGFzaCBzbG90cywgJWQgcnVsZXMuXG4iLAorCSAgICAgICBoLT5uc2xvdCwgbnJ1bGVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEwLDggKzMxMCw4IEBACiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICAlZCBlbnRyaWVzIGFuZCAlZC8lZCBidWNrZXRzIHVzZWQsIGxvbmdlc3QgIgotCSAgICAgICAiY2hhaW4gbGVuZ3RoICVkIHN1bSBvZiBjaGFpbiBsZW5ndGheMiAlTHVcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIlNFTGludXg6ICVzOiAgJWQgZW50cmllcyBhbmQgJWQvJWQgYnVja2V0cyB1c2VkLCAiCisJICAgICAgICJsb25nZXN0IGNoYWluIGxlbmd0aCAlZCBzdW0gb2YgY2hhaW4gbGVuZ3RoXjIgJUx1XG4iLAogCSAgICAgICB0YWcsIGgtPm5lbCwgc2xvdHNfdXNlZCwgaC0+bnNsb3QsIG1heF9jaGFpbl9sZW4sCiAJICAgICAgIGNoYWluMl9sZW5fc3VtKTsKIH0KQEAgLTMyNiw3ICszMjYsNyBAQAogfTsKIAogaW50IGF2dGFiX3JlYWRfaXRlbShzdHJ1Y3QgYXZ0YWIgKmEsIHZvaWQgKmZwLCBzdHJ1Y3QgcG9saWN5ZGIgKnBvbCwKLQkgICAgICAgICAgICBpbnQgKCppbnNlcnRmKShzdHJ1Y3QgYXZ0YWIgKmEsIHN0cnVjdCBhdnRhYl9rZXkgKmssCisJCSAgICBpbnQgKCppbnNlcnRmKShzdHJ1Y3QgYXZ0YWIgKmEsIHN0cnVjdCBhdnRhYl9rZXkgKmssCiAJCQkJICAgc3RydWN0IGF2dGFiX2RhdHVtICpkLCB2b2lkICpwKSwKIAkJICAgIHZvaWQgKnApCiB7CkBAIC0zNDUsMTggKzM0NSwxOCBAQAogCWlmICh2ZXJzIDwgUE9MSUNZREJfVkVSU0lPTl9BVlRBQikgewogCQlyYyA9IG5leHRfZW50cnkoYnVmMzIsIGZwLCBzaXplb2YodTMyKSk7CiAJCWlmIChyYyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGF2dGFiOiB0cnVuY2F0ZWQgZW50cnlcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIGVudHJ5XG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpdGVtczIgPSBsZTMyX3RvX2NwdShidWYzMlswXSk7CiAJCWlmIChpdGVtczIgPiBBUlJBWV9TSVpFKGJ1ZjMyKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogYXZ0YWI6IGVudHJ5IG92ZXJmbG93XG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogYXZ0YWI6IGVudHJ5IG92ZXJmbG93XG4iKTsKIAkJCXJldHVybiAtMTsKIAogCQl9CiAJCXJjID0gbmV4dF9lbnRyeShidWYzMiwgZnAsIHNpemVvZih1MzIpKml0ZW1zMik7CiAJCWlmIChyYyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGF2dGFiOiB0cnVuY2F0ZWQgZW50cnlcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIGVudHJ5XG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpdGVtcyA9IDA7CkBAIC0zNjQsMTkgKzM2NCwxOSBAQAogCQl2YWwgPSBsZTMyX3RvX2NwdShidWYzMltpdGVtcysrXSk7CiAJCWtleS5zb3VyY2VfdHlwZSA9ICh1MTYpdmFsOwogCQlpZiAoa2V5LnNvdXJjZV90eXBlICE9IHZhbCkgewotCQkJcHJpbnRrKCJzZWN1cml0eTogYXZ0YWI6IHRydW5jYXRlZCBzb3VyY2UgdHlwZVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiB0cnVuY2F0ZWQgc291cmNlIHR5cGVcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCXZhbCA9IGxlMzJfdG9fY3B1KGJ1ZjMyW2l0ZW1zKytdKTsKIAkJa2V5LnRhcmdldF90eXBlID0gKHUxNil2YWw7CiAJCWlmIChrZXkudGFyZ2V0X3R5cGUgIT0gdmFsKSB7Ci0JCQlwcmludGsoInNlY3VyaXR5OiBhdnRhYjogdHJ1bmNhdGVkIHRhcmdldCB0eXBlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogYXZ0YWI6IHRydW5jYXRlZCB0YXJnZXQgdHlwZVxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJdmFsID0gbGUzMl90b19jcHUoYnVmMzJbaXRlbXMrK10pOwogCQlrZXkudGFyZ2V0X2NsYXNzID0gKHUxNil2YWw7CiAJCWlmIChrZXkudGFyZ2V0X2NsYXNzICE9IHZhbCkgewotCQkJcHJpbnRrKCJzZWN1cml0eTogYXZ0YWI6IHRydW5jYXRlZCB0YXJnZXQgY2xhc3NcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIHRhcmdldCBjbGFzc1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMzg0LDEyICszODQsMTIgQEAKIAkJZW5hYmxlZCA9ICh2YWwgJiBBVlRBQl9FTkFCTEVEX09MRCkgPyBBVlRBQl9FTkFCTEVEIDogMDsKIAogCQlpZiAoISh2YWwgJiAoQVZUQUJfQVYgfCBBVlRBQl9UWVBFKSkpIHsKLQkJCXByaW50aygic2VjdXJpdHk6IGF2dGFiOiBudWxsIGVudHJ5XG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogYXZ0YWI6IG51bGwgZW50cnlcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlmICgodmFsICYgQVZUQUJfQVYpICYmCiAJCSAgICAodmFsICYgQVZUQUJfVFlQRSkpIHsKLQkJCXByaW50aygic2VjdXJpdHk6IGF2dGFiOiBlbnRyeSBoYXMgYm90aCBhY2Nlc3MgdmVjdG9ycyBhbmQgdHlwZXNcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogZW50cnkgaGFzIGJvdGggYWNjZXNzIHZlY3RvcnMgYW5kIHR5cGVzXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCkBAIC0zOTgsMTIgKzM5OCwxMyBAQAogCQkJCWtleS5zcGVjaWZpZWQgPSBzcGVjX29yZGVyW2ldIHwgZW5hYmxlZDsKIAkJCQlkYXR1bS5kYXRhID0gbGUzMl90b19jcHUoYnVmMzJbaXRlbXMrK10pOwogCQkJCXJjID0gaW5zZXJ0ZihhLCAma2V5LCAmZGF0dW0sIHApOwotCQkJCWlmIChyYykgcmV0dXJuIHJjOworCQkJCWlmIChyYykKKwkJCQkJcmV0dXJuIHJjOwogCQkJfQogCQl9CiAKIAkJaWYgKGl0ZW1zICE9IGl0ZW1zMikgewotCQkJcHJpbnRrKCJzZWN1cml0eTogYXZ0YWI6IGVudHJ5IG9ubHkgaGFkICVkIGl0ZW1zLCBleHBlY3RlZCAlZFxuIiwgaXRlbXMyLCBpdGVtcyk7CisJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiBlbnRyeSBvbmx5IGhhZCAlZCBpdGVtcywgZXhwZWN0ZWQgJWRcbiIsIGl0ZW1zMiwgaXRlbXMpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCXJldHVybiAwOwpAQCAtNDExLDcgKzQxMiw3IEBACiAKIAlyYyA9IG5leHRfZW50cnkoYnVmMTYsIGZwLCBzaXplb2YodTE2KSo0KTsKIAlpZiAocmMgPCAwKSB7Ci0JCXByaW50aygic2VjdXJpdHk6IGF2dGFiOiB0cnVuY2F0ZWQgZW50cnlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiB0cnVuY2F0ZWQgZW50cnlcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC00MjQsNyArNDI1LDcgQEAKIAlpZiAoIXBvbGljeWRiX3R5cGVfaXN2YWxpZChwb2wsIGtleS5zb3VyY2VfdHlwZSkgfHwKIAkgICAgIXBvbGljeWRiX3R5cGVfaXN2YWxpZChwb2wsIGtleS50YXJnZXRfdHlwZSkgfHwKIAkgICAgIXBvbGljeWRiX2NsYXNzX2lzdmFsaWQocG9sLCBrZXkudGFyZ2V0X2NsYXNzKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZWN1cml0eTogYXZ0YWI6IGludmFsaWQgdHlwZSBvciBjbGFzc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogYXZ0YWI6IGludmFsaWQgdHlwZSBvciBjbGFzc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQzNCwyMCArNDM1LDE5IEBACiAJCQlzZXQrKzsKIAl9CiAJaWYgKCFzZXQgfHwgc2V0ID4gMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkic2VjdXJpdHk6ICBhdnRhYjogIG1vcmUgdGhhbiBvbmUgc3BlY2lmaWVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgYXZ0YWI6ICBtb3JlIHRoYW4gb25lIHNwZWNpZmllclxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlyYyA9IG5leHRfZW50cnkoYnVmMzIsIGZwLCBzaXplb2YodTMyKSk7CiAJaWYgKHJjIDwgMCkgewotCQlwcmludGsoInNlY3VyaXR5OiBhdnRhYjogdHJ1bmNhdGVkIGVudHJ5XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogdHJ1bmNhdGVkIGVudHJ5XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlkYXR1bS5kYXRhID0gbGUzMl90b19jcHUoKmJ1ZjMyKTsKIAlpZiAoKGtleS5zcGVjaWZpZWQgJiBBVlRBQl9UWVBFKSAmJgogCSAgICAhcG9saWN5ZGJfdHlwZV9pc3ZhbGlkKHBvbCwgZGF0dW0uZGF0YSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2VjdXJpdHk6IGF2dGFiOiBpbnZhbGlkIHR5cGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiBpbnZhbGlkIHR5cGVcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiBpbnNlcnRmKGEsICZrZXksICZkYXR1bSwgcCk7CkBAIC00NjgsMTIgKzQ2OCwxMiBAQAogCiAJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKTsKIAlpZiAocmMgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGF2dGFiOiB0cnVuY2F0ZWQgdGFibGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiB0cnVuY2F0ZWQgdGFibGVcbiIpOwogCQlnb3RvIGJhZDsKIAl9CiAJbmVsID0gbGUzMl90b19jcHUoYnVmWzBdKTsKIAlpZiAoIW5lbCkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiBhdnRhYjogdGFibGUgaXMgZW1wdHlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiB0YWJsZSBpcyBlbXB0eVxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBiYWQ7CiAJfQpAQCAtNDg2LDkgKzQ4Niw5IEBACiAJCXJjID0gYXZ0YWJfcmVhZF9pdGVtKGEsIGZwLCBwb2wsIGF2dGFiX2luc2VydGYsIE5VTEwpOwogCQlpZiAocmMpIHsKIAkJCWlmIChyYyA9PSAtRU5PTUVNKQotCQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGF2dGFiOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGF2dGFiOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCWVsc2UgaWYgKHJjID09IC1FRVhJU1QpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogYXZ0YWI6IGR1cGxpY2F0ZSBlbnRyeVxuIik7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBhdnRhYjogZHVwbGljYXRlIGVudHJ5XG4iKTsKIAkJCWVsc2UKIAkJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGJhZDsKQEAgLTUxMyw1ICs1MTMsNSBAQAogCiB2b2lkIGF2dGFiX2NhY2hlX2Rlc3Ryb3kodm9pZCkKIHsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3kgKGF2dGFiX25vZGVfY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koYXZ0YWJfbm9kZV9jYWNoZXApOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCmluZGV4IDUwYWQ4NWQuLmZiNGVmZTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKQEAgLTEsOSArMSw5IEBACiAvKiBBdXRob3JzOiBLYXJsIE1hY01pbGxhbiA8a21hY21pbGxhbkB0cmVzeXMuY29tPgotICogICAgICAgICAgRnJhbmsgTWF5ZXIgPG1heWVyZkB0cmVzeXMuY29tPgorICoJICAgIEZyYW5rIE1heWVyIDxtYXllcmZAdHJlc3lzLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA0IFRyZXN5cyBUZWNobm9sb2d5LCBMTEMKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICovCiAKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgInNlY3VyaXR5LmgiCkBAIC05MCwyOSArODksMjcgQEAKIGludCBldmFsdWF0ZV9jb25kX25vZGUoc3RydWN0IHBvbGljeWRiICpwLCBzdHJ1Y3QgY29uZF9ub2RlICpub2RlKQogewogCWludCBuZXdfc3RhdGU7Ci0Jc3RydWN0IGNvbmRfYXZfbGlzdCogY3VyOworCXN0cnVjdCBjb25kX2F2X2xpc3QgKmN1cjsKIAogCW5ld19zdGF0ZSA9IGNvbmRfZXZhbHVhdGVfZXhwcihwLCBub2RlLT5leHByKTsKIAlpZiAobmV3X3N0YXRlICE9IG5vZGUtPmN1cl9zdGF0ZSkgewogCQlub2RlLT5jdXJfc3RhdGUgPSBuZXdfc3RhdGU7CiAJCWlmIChuZXdfc3RhdGUgPT0gLTEpCi0JCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiBleHByZXNzaW9uIHJlc3VsdCB3YXMgdW5kZWZpbmVkIC0gZGlzYWJsaW5nIGFsbCBydWxlcy5cbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBleHByZXNzaW9uIHJlc3VsdCB3YXMgdW5kZWZpbmVkIC0gZGlzYWJsaW5nIGFsbCBydWxlcy5cbiIpOwogCQkvKiB0dXJuIHRoZSBydWxlcyBvbiBvciBvZmYgKi8KIAkJZm9yIChjdXIgPSBub2RlLT50cnVlX2xpc3Q7IGN1ciAhPSBOVUxMOyBjdXIgPSBjdXItPm5leHQpIHsKLQkJCWlmIChuZXdfc3RhdGUgPD0gMCkgeworCQkJaWYgKG5ld19zdGF0ZSA8PSAwKQogCQkJCWN1ci0+bm9kZS0+a2V5LnNwZWNpZmllZCAmPSB+QVZUQUJfRU5BQkxFRDsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJY3VyLT5ub2RlLT5rZXkuc3BlY2lmaWVkIHw9IEFWVEFCX0VOQUJMRUQ7Ci0JCQl9CiAJCX0KIAogCQlmb3IgKGN1ciA9IG5vZGUtPmZhbHNlX2xpc3Q7IGN1ciAhPSBOVUxMOyBjdXIgPSBjdXItPm5leHQpIHsKIAkJCS8qIC0xIG9yIDEgKi8KLQkJCWlmIChuZXdfc3RhdGUpIHsKKwkJCWlmIChuZXdfc3RhdGUpCiAJCQkJY3VyLT5ub2RlLT5rZXkuc3BlY2lmaWVkICY9IH5BVlRBQl9FTkFCTEVEOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQljdXItPm5vZGUtPmtleS5zcGVjaWZpZWQgfD0gQVZUQUJfRU5BQkxFRDsKLQkJCX0KIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE3NCw4ICsxNzEsOCBAQAogaW50IGNvbmRfaW5pdF9ib29sX2luZGV4ZXMoc3RydWN0IHBvbGljeWRiICpwKQogewogCWtmcmVlKHAtPmJvb2xfdmFsX3RvX3N0cnVjdCk7Ci0JcC0+Ym9vbF92YWxfdG9fc3RydWN0ID0gKHN0cnVjdCBjb25kX2Jvb2xfZGF0dW0qKikKLQkJa21hbGxvYyhwLT5wX2Jvb2xzLm5wcmltICogc2l6ZW9mKHN0cnVjdCBjb25kX2Jvb2xfZGF0dW0qKSwgR0ZQX0tFUk5FTCk7CisJcC0+Ym9vbF92YWxfdG9fc3RydWN0ID0gKHN0cnVjdCBjb25kX2Jvb2xfZGF0dW0gKiopCisJCWttYWxsb2MocC0+cF9ib29scy5ucHJpbSAqIHNpemVvZihzdHJ1Y3QgY29uZF9ib29sX2RhdHVtICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXAtPmJvb2xfdmFsX3RvX3N0cnVjdCkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwpAQCAtMjAwLDcgKzE5Nyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcC0+cF9ib29sX3ZhbF90b19uYW1lW2Jvb2xkYXR1bS0+dmFsdWUgLSAxXSA9IGtleTsKLQlwLT5ib29sX3ZhbF90b19zdHJ1Y3RbYm9vbGRhdHVtLT52YWx1ZSAtMV0gPSBib29sZGF0dW07CisJcC0+Ym9vbF92YWxfdG9fc3RydWN0W2Jvb2xkYXR1bS0+dmFsdWUgLSAxXSA9IGJvb2xkYXR1bTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUyLDggKzI0OSw3IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdHJ1Y3QgY29uZF9pbnNlcnRmX2RhdGEKLXsKK3N0cnVjdCBjb25kX2luc2VydGZfZGF0YSB7CiAJc3RydWN0IHBvbGljeWRiICpwOwogCXN0cnVjdCBjb25kX2F2X2xpc3QgKm90aGVyOwogCXN0cnVjdCBjb25kX2F2X2xpc3QgKmhlYWQ7CkBAIC0yNzYsNyArMjcyLDcgQEAKIAkgKi8KIAlpZiAoay0+c3BlY2lmaWVkICYgQVZUQUJfVFlQRSkgewogCQlpZiAoYXZ0YWJfc2VhcmNoKCZwLT50ZV9hdnRhYiwgaykpIHsKLQkJCXByaW50aygic2VjdXJpdHk6IHR5cGUgcnVsZSBhbHJlYWR5IGV4aXN0cyBvdXRzaWRlIG9mIGEgY29uZGl0aW9uYWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IHR5cGUgcnVsZSBhbHJlYWR5IGV4aXN0cyBvdXRzaWRlIG9mIGEgY29uZGl0aW9uYWwuXG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCS8qCkBAIC0yOTEsNyArMjg3LDcgQEAKIAkJCW5vZGVfcHRyID0gYXZ0YWJfc2VhcmNoX25vZGUoJnAtPnRlX2NvbmRfYXZ0YWIsIGspOwogCQkJaWYgKG5vZGVfcHRyKSB7CiAJCQkJaWYgKGF2dGFiX3NlYXJjaF9ub2RlX25leHQobm9kZV9wdHIsIGstPnNwZWNpZmllZCkpIHsKLQkJCQkJcHJpbnRrKCJzZWN1cml0eTogdG9vIG1hbnkgY29uZmxpY3RpbmcgdHlwZSBydWxlcy4iKTsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiB0b28gbWFueSBjb25mbGljdGluZyB0eXBlIHJ1bGVzLlxuIik7CiAJCQkJCWdvdG8gZXJyOwogCQkJCX0KIAkJCQlmb3VuZCA9IDA7CkBAIC0zMDIsMTMgKzI5OCwxMyBAQAogCQkJCQl9CiAJCQkJfQogCQkJCWlmICghZm91bmQpIHsKLQkJCQkJcHJpbnRrKCJzZWN1cml0eTogY29uZmxpY3RpbmcgdHlwZSBydWxlcy5cbiIpOworCQkJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGNvbmZsaWN0aW5nIHR5cGUgcnVsZXMuXG4iKTsKIAkJCQkJZ290byBlcnI7CiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKGF2dGFiX3NlYXJjaCgmcC0+dGVfY29uZF9hdnRhYiwgaykpIHsKLQkJCQlwcmludGsoInNlY3VyaXR5OiBjb25mbGljdGluZyB0eXBlIHJ1bGVzIHdoZW4gYWRkaW5nIHR5cGUgcnVsZSBmb3IgdHJ1ZS5cbiIpOworCQkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogY29uZmxpY3RpbmcgdHlwZSBydWxlcyB3aGVuIGFkZGluZyB0eXBlIHJ1bGUgZm9yIHRydWUuXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJfQpAQCAtMzE2LDcgKzMxMiw3IEBACiAKIAlub2RlX3B0ciA9IGF2dGFiX2luc2VydF9ub251bmlxdWUoJnAtPnRlX2NvbmRfYXZ0YWIsIGssIGQpOwogCWlmICghbm9kZV9wdHIpIHsKLQkJcHJpbnRrKCJzZWN1cml0eTogY291bGQgbm90IGluc2VydCBydWxlLiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGNvdWxkIG5vdCBpbnNlcnQgcnVsZS5cbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTM1Myw5ICszNDksOCBAQAogCQlyZXR1cm4gLTE7CiAKIAlsZW4gPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCWlmIChsZW4gPT0gMCkgeworCWlmIChsZW4gPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJZGF0YS5wID0gcDsKIAlkYXRhLm90aGVyID0gb3RoZXI7CkBAIC0zNzYsMTIgKzM3MSwxMiBAQAogc3RhdGljIGludCBleHByX2lzdmFsaWQoc3RydWN0IHBvbGljeWRiICpwLCBzdHJ1Y3QgY29uZF9leHByICpleHByKQogewogCWlmIChleHByLT5leHByX3R5cGUgPD0gMCB8fCBleHByLT5leHByX3R5cGUgPiBDT05EX0xBU1QpIHsKLQkJcHJpbnRrKCJzZWN1cml0eTogY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgdXNlcyB1bmtub3duIG9wZXJhdG9yLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgdXNlcyB1bmtub3duIG9wZXJhdG9yLlxuIik7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChleHByLT5ib29sID4gcC0+cF9ib29scy5ucHJpbSkgewotCQlwcmludGsoInNlY3VyaXR5OiBjb25kaXRpb25hbCBleHByZXNzaW9ucyB1c2VzIHVua25vd24gYm9vbC5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIHVzZXMgdW5rbm93biBib29sLlxuIik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTQwOCwxNSArNDAzLDE0IEBACiAJLyogZXhwciAqLwogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSAqIDIpOwogCQlpZiAocmMgPCAwKQogCQkJZ290byBlcnI7CiAKIAkJZXhwciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25kX2V4cHIpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFleHByKSB7CisJCWlmICghZXhwcikKIAkJCWdvdG8gZXJyOwotCQl9CiAKIAkJZXhwci0+ZXhwcl90eXBlID0gbGUzMl90b19jcHUoYnVmWzBdKTsKIAkJZXhwci0+Ym9vbCA9IGxlMzJfdG9fY3B1KGJ1ZlsxXSk7CkBAIC00MjYsMTEgKzQyMCwxMCBAQAogCQkJZ290byBlcnI7CiAJCX0KIAotCQlpZiAoaSA9PSAwKSB7CisJCWlmIChpID09IDApCiAJCQlub2RlLT5leHByID0gZXhwcjsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJbGFzdC0+bmV4dCA9IGV4cHI7Ci0JCX0KIAkJbGFzdCA9IGV4cHI7CiAJfQogCkBAIC00NjksMTEgKzQ2MiwxMCBAQAogCQlpZiAoY29uZF9yZWFkX25vZGUocCwgbm9kZSwgZnApICE9IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoaSA9PSAwKSB7CisJCWlmIChpID09IDApCiAJCQlwLT5jb25kX2xpc3QgPSBub2RlOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlsYXN0LT5uZXh0ID0gbm9kZTsKLQkJfQogCQlsYXN0ID0gbm9kZTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00OTAsMjQgKzQ4MiwyNCBAQAogewogCXN0cnVjdCBhdnRhYl9ub2RlICpub2RlOwogCi0JaWYoIWN0YWIgfHwgIWtleSB8fCAhYXZkKQorCWlmICghY3RhYiB8fCAha2V5IHx8ICFhdmQpCiAJCXJldHVybjsKIAotCWZvcihub2RlID0gYXZ0YWJfc2VhcmNoX25vZGUoY3RhYiwga2V5KTsgbm9kZSAhPSBOVUxMOworCWZvciAobm9kZSA9IGF2dGFiX3NlYXJjaF9ub2RlKGN0YWIsIGtleSk7IG5vZGUgIT0gTlVMTDsKIAkJCQlub2RlID0gYXZ0YWJfc2VhcmNoX25vZGVfbmV4dChub2RlLCBrZXktPnNwZWNpZmllZCkpIHsKLQkJaWYgKCAodTE2KSAoQVZUQUJfQUxMT1dFRHxBVlRBQl9FTkFCTEVEKSA9PQotCQkgICAgIChub2RlLT5rZXkuc3BlY2lmaWVkICYgKEFWVEFCX0FMTE9XRUR8QVZUQUJfRU5BQkxFRCkpKQorCQlpZiAoKHUxNikoQVZUQUJfQUxMT1dFRHxBVlRBQl9FTkFCTEVEKSA9PQorCQkgICAgKG5vZGUtPmtleS5zcGVjaWZpZWQgJiAoQVZUQUJfQUxMT1dFRHxBVlRBQl9FTkFCTEVEKSkpCiAJCQlhdmQtPmFsbG93ZWQgfD0gbm9kZS0+ZGF0dW0uZGF0YTsKLQkJaWYgKCAodTE2KSAoQVZUQUJfQVVESVRERU5ZfEFWVEFCX0VOQUJMRUQpID09Ci0JCSAgICAgKG5vZGUtPmtleS5zcGVjaWZpZWQgJiAoQVZUQUJfQVVESVRERU5ZfEFWVEFCX0VOQUJMRUQpKSkKKwkJaWYgKCh1MTYpKEFWVEFCX0FVRElUREVOWXxBVlRBQl9FTkFCTEVEKSA9PQorCQkgICAgKG5vZGUtPmtleS5zcGVjaWZpZWQgJiAoQVZUQUJfQVVESVRERU5ZfEFWVEFCX0VOQUJMRUQpKSkKIAkJCS8qIFNpbmNlIGEgJzAnIGluIGFuIGF1ZGl0ZGVueSBtYXNrIHJlcHJlc2VudHMgYQogCQkJICogcGVybWlzc2lvbiB3ZSBkbyBOT1Qgd2FudCB0byBhdWRpdCAoZG9udGF1ZGl0KSwgd2UgdXNlCiAJCQkgKiB0aGUgJyYnIG9wZXJhbmQgdG8gZW5zdXJlIHRoYXQgYWxsICcwJ3MgaW4gdGhlIG1hc2sKIAkJCSAqIGFyZSByZXRhaW5lZCAobXVjaCB1bmxpa2UgdGhlIGFsbG93IGFuZCBhdWRpdGFsbG93IGNhc2VzKS4KIAkJCSAqLwogCQkJYXZkLT5hdWRpdGRlbnkgJj0gbm9kZS0+ZGF0dW0uZGF0YTsKLQkJaWYgKCAodTE2KSAoQVZUQUJfQVVESVRBTExPV3xBVlRBQl9FTkFCTEVEKSA9PQotCQkgICAgIChub2RlLT5rZXkuc3BlY2lmaWVkICYgKEFWVEFCX0FVRElUQUxMT1d8QVZUQUJfRU5BQkxFRCkpKQorCQlpZiAoKHUxNikoQVZUQUJfQVVESVRBTExPV3xBVlRBQl9FTkFCTEVEKSA9PQorCQkgICAgKG5vZGUtPmtleS5zcGVjaWZpZWQgJiAoQVZUQUJfQVVESVRBTExPV3xBVlRBQl9FTkFCTEVEKSkpCiAJCQlhdmQtPmF1ZGl0YWxsb3cgfD0gbm9kZS0+ZGF0dW0uZGF0YTsKIAl9CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwppbmRleCA5MjBiNWUzLi5kZGMyNzU0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJY291bnQgPSBsZTMyX3RvX2NwdShidWZbMl0pOwogCiAJaWYgKG1hcHVuaXQgIT0gc2l6ZW9mKHU2NCkgKiA4KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGViaXRtYXA6IG1hcCBzaXplICV1IGRvZXMgbm90ICIKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBlYml0bWFwOiBtYXAgc2l6ZSAldSBkb2VzIG5vdCAiCiAJCSAgICAgICAibWF0Y2ggbXkgc2l6ZSAlWmQgKGhpZ2ggYml0IHdhcyAlZClcbiIsCiAJCSAgICAgICBtYXB1bml0LCBzaXplb2YodTY0KSAqIDgsIGUtPmhpZ2hiaXQpOwogCQlnb3RvIGJhZDsKQEAgLTM4MiwxOSArMzgyLDE5IEBACiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJcmMgPSBuZXh0X2VudHJ5KCZzdGFydGJpdCwgZnAsIHNpemVvZih1MzIpKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogZWJpdG1hcDogdHJ1bmNhdGVkIG1hcFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGViaXRtYXA6IHRydW5jYXRlZCBtYXBcbiIpOwogCQkJZ290byBiYWQ7CiAJCX0KIAkJc3RhcnRiaXQgPSBsZTMyX3RvX2NwdShzdGFydGJpdCk7CiAKIAkJaWYgKHN0YXJ0Yml0ICYgKG1hcHVuaXQgLSAxKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogZWJpdG1hcCBzdGFydCBiaXQgKCVkKSBpcyAiCisJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IGViaXRtYXAgc3RhcnQgYml0ICglZCkgaXMgIgogCQkJICAgICAgICJub3QgYSBtdWx0aXBsZSBvZiB0aGUgbWFwIHVuaXQgc2l6ZSAoJXUpXG4iLAogCQkJICAgICAgIHN0YXJ0Yml0LCBtYXB1bml0KTsKIAkJCWdvdG8gYmFkOwogCQl9CiAJCWlmIChzdGFydGJpdCA+IGUtPmhpZ2hiaXQgLSBtYXB1bml0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiBlYml0bWFwIHN0YXJ0IGJpdCAoJWQpIGlzICIKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogZWJpdG1hcCBzdGFydCBiaXQgKCVkKSBpcyAiCiAJCQkgICAgICAgImJleW9uZCB0aGUgZW5kIG9mIHRoZSBiaXRtYXAgKCV1KVxuIiwKIAkJCSAgICAgICBzdGFydGJpdCwgKGUtPmhpZ2hiaXQgLSBtYXB1bml0KSk7CiAJCQlnb3RvIGJhZDsKQEAgLTQwNSwyMCArNDA1LDE5IEBACiAJCQl0bXAgPSBremFsbG9jKHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXRtcCkgewogCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAic2VjdXJpdHk6IGViaXRtYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQkJCSAgICAgICAiU0VMaW51eDogZWJpdG1hcDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJcmMgPSAtRU5PTUVNOwogCQkJCWdvdG8gYmFkOwogCQkJfQogCQkJLyogcm91bmQgZG93biAqLwogCQkJdG1wLT5zdGFydGJpdCA9IHN0YXJ0Yml0IC0gKHN0YXJ0Yml0ICUgRUJJVE1BUF9TSVpFKTsKLQkJCWlmIChuKSB7CisJCQlpZiAobikKIAkJCQluLT5uZXh0ID0gdG1wOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQllLT5ub2RlID0gdG1wOwotCQkJfQogCQkJbiA9IHRtcDsKIAkJfSBlbHNlIGlmIChzdGFydGJpdCA8PSBuLT5zdGFydGJpdCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogZWJpdG1hcDogc3RhcnQgYml0ICVkIgorCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBlYml0bWFwOiBzdGFydCBiaXQgJWQiCiAJCQkgICAgICAgIiBjb21lcyBhZnRlciBzdGFydCBiaXQgJWRcbiIsCiAJCQkgICAgICAgc3RhcnRiaXQsIG4tPnN0YXJ0Yml0KTsKIAkJCWdvdG8gYmFkOwpAQCAtNDI2LDcgKzQyNSw3IEBACiAKIAkJcmMgPSBuZXh0X2VudHJ5KCZtYXAsIGZwLCBzaXplb2YodTY0KSk7CiAJCWlmIChyYyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGViaXRtYXA6IHRydW5jYXRlZCBtYXBcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBlYml0bWFwOiB0cnVuY2F0ZWQgbWFwXG4iKTsKIAkJCWdvdG8gYmFkOwogCQl9CiAJCW1hcCA9IGxlNjRfdG9fY3B1KG1hcCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jCmluZGV4IDc3YjUzMGMuLjJlNzc4OGUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jCkBAIC05LDggKzksOCBAQAogI2luY2x1ZGUgImhhc2h0YWIuaCIKIAogc3RydWN0IGhhc2h0YWIgKmhhc2h0YWJfY3JlYXRlKHUzMiAoKmhhc2hfdmFsdWUpKHN0cnVjdCBoYXNodGFiICpoLCBjb25zdCB2b2lkICprZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmtleWNtcCkoc3RydWN0IGhhc2h0YWIgKmgsIGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzaXplKQorCQkJICAgICAgIGludCAoKmtleWNtcCkoc3RydWN0IGhhc2h0YWIgKmgsIGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIpLAorCQkJICAgICAgIHUzMiBzaXplKQogewogCXN0cnVjdCBoYXNodGFiICpwOwogCXUzMiBpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKaW5kZXggZmVhZjBhNS4uOGIxNzA2YiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiBSZXR1cm4gdGhlIGxlbmd0aCBpbiBieXRlcyBmb3IgdGhlIE1MUyBmaWVsZHMgb2YgdGhlCiAgKiBzZWN1cml0eSBjb250ZXh0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBgY29udGV4dCcuCiAgKi8KLWludCBtbHNfY29tcHV0ZV9jb250ZXh0X2xlbihzdHJ1Y3QgY29udGV4dCAqIGNvbnRleHQpCitpbnQgbWxzX2NvbXB1dGVfY29udGV4dF9sZW4oc3RydWN0IGNvbnRleHQgKmNvbnRleHQpCiB7CiAJaW50IGksIGwsIGxlbiwgaGVhZCwgcHJldjsKIAljaGFyICpubTsKQEAgLTg2LDcgKzg2LDcgQEAKICAqIFVwZGF0ZSBgKnNjb250ZXh0JyB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBNTFMgZmllbGRzLgogICovCiB2b2lkIG1sc19zaWRfdG9fY29udGV4dChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipzY29udGV4dCkKKwkJCWNoYXIgKipzY29udGV4dCkKIHsKIAljaGFyICpzY29udGV4dHAsICpubTsKIAlpbnQgaSwgbCwgaGVhZCwgcHJldjsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAJCWlmIChsID09IDApIHsKIAkJCWlmIChtbHNfbGV2ZWxfZXEoJmNvbnRleHQtPnJhbmdlLmxldmVsWzBdLAotCQkJICAgICAgICAgICAgICAgICAmY29udGV4dC0+cmFuZ2UubGV2ZWxbMV0pKQorCQkJCQkgJmNvbnRleHQtPnJhbmdlLmxldmVsWzFdKSkKIAkJCQlicmVhazsKIAkJCWVsc2UKIAkJCQkqc2NvbnRleHRwKysgPSAnLSc7CkBAIC0zMDUsMjAgKzMwNSwyMSBAQAogCQkJCQkqcCsrID0gMDsKIAogCQkJCS8qIFNlcGFyYXRlIGludG8gcmFuZ2UgaWYgZXhpc3RzICovCi0JCQkJaWYgKChybmdwdHIgPSBzdHJjaHIoc2NvbnRleHRwLCAnLicpKSAhPSBOVUxMKSB7CisJCQkJcm5ncHRyID0gc3RyY2hyKHNjb250ZXh0cCwgJy4nKTsKKwkJCQlpZiAocm5ncHRyICE9IE5VTEwpIHsKIAkJCQkJLyogUmVtb3ZlICcuJyAqLwogCQkJCQkqcm5ncHRyKysgPSAwOwogCQkJCX0KIAogCQkJCWNhdGRhdHVtID0gaGFzaHRhYl9zZWFyY2gocG9saWN5ZGIucF9jYXRzLnRhYmxlLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvbnRleHRwKTsKKwkJCQkJCQkgIHNjb250ZXh0cCk7CiAJCQkJaWYgKCFjYXRkYXR1bSkgewogCQkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAogCQkJCXJjID0gZWJpdG1hcF9zZXRfYml0KCZjb250ZXh0LT5yYW5nZS5sZXZlbFtsXS5jYXQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgY2F0ZGF0dW0tPnZhbHVlIC0gMSwgMSk7CisJCQkJCQkgICAgIGNhdGRhdHVtLT52YWx1ZSAtIDEsIDEpOwogCQkJCWlmIChyYykKIAkJCQkJZ290byBvdXQ7CiAKQEAgLTM5NSw3ICszOTYsNyBAQAogCQlyYyA9IC1FTk9NRU07CiAJfSBlbHNlIHsKIAkJcmMgPSBtbHNfY29udGV4dF90b19zaWQoJzonLCAmdG1wc3RyLCBjb250ZXh0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBTRUNTSURfTlVMTCk7CisJCQkJCU5VTEwsIFNFQ1NJRF9OVUxMKTsKIAkJa2ZyZWUoZnJlZXN0cik7CiAJfQogCkBAIC00MDYsNyArNDA3LDcgQEAKICAqIENvcGllcyB0aGUgTUxTIHJhbmdlIGByYW5nZScgaW50byBgY29udGV4dCcuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1sc19yYW5nZV9zZXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbHNfcmFuZ2UgKnJhbmdlKQorCQkJCXN0cnVjdCBtbHNfcmFuZ2UgKnJhbmdlKQogewogCWludCBsLCByYyA9IDA7CiAKQEAgLTQyMyw3ICs0MjQsNyBAQAogfQogCiBpbnQgbWxzX3NldHVwX3VzZXJfcmFuZ2Uoc3RydWN0IGNvbnRleHQgKmZyb21jb24sIHN0cnVjdCB1c2VyX2RhdHVtICp1c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZXh0ICp1c2VyY29uKQorCQkJIHN0cnVjdCBjb250ZXh0ICp1c2VyY29uKQogewogCWlmIChzZWxpbnV4X21sc19lbmFibGVkKSB7CiAJCXN0cnVjdCBtbHNfbGV2ZWwgKmZyb21jb25fc2VuID0gJihmcm9tY29uLT5yYW5nZS5sZXZlbFswXSk7CkBAIC00NDksMTEgKzQ1MCwxMSBAQAogCQkgICB0aGF0IG9mIHRoZSB1c2VyJ3MgZGVmYXVsdCBjbGVhcmFuY2UgKGJ1dAogCQkgICBvbmx5IGlmIHRoZSAiZnJvbWNvbiIgY2xlYXJhbmNlIGRvbWluYXRlcwogCQkgICB0aGUgdXNlcidzIGNvbXB1dGVkIHNlbnNpdGl2aXR5IGxldmVsKSAqLwotCQlpZiAobWxzX2xldmVsX2RvbSh1c2VyX2NsciwgZnJvbWNvbl9jbHIpKSB7CisJCWlmIChtbHNfbGV2ZWxfZG9tKHVzZXJfY2xyLCBmcm9tY29uX2NscikpCiAJCQkqdXNlcmNvbl9jbHIgPSAqZnJvbWNvbl9jbHI7Ci0JCX0gZWxzZSBpZiAobWxzX2xldmVsX2RvbShmcm9tY29uX2NsciwgdXNlcl9jbHIpKSB7CisJCWVsc2UgaWYgKG1sc19sZXZlbF9kb20oZnJvbWNvbl9jbHIsIHVzZXJfY2xyKSkKIAkJCSp1c2VyY29uX2NsciA9ICp1c2VyX2NscjsKLQkJfSBlbHNlCisJCWVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTI1LDcgKzUyNiw3IEBACiAJCQkgICAgcnRyLT50YXJnZXRfY2xhc3MgPT0gdGNsYXNzKSB7CiAJCQkJLyogU2V0IHRoZSByYW5nZSBmcm9tIHRoZSBydWxlICovCiAJCQkJcmV0dXJuIG1sc19yYW5nZV9zZXQobmV3Y29udGV4dCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAmcnRyLT50YXJnZXRfcmFuZ2UpOworCQkJCQkJICAgICAmcnRyLT50YXJnZXRfcmFuZ2UpOwogCQkJfQogCQl9CiAJCS8qIEZhbGx0aHJvdWdoICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKaW5kZXggYmQ3ZDZhMC4uODRmOGNjNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwpAQCAtMTEsNyArMTEsNyBAQAogICoKICAqIFVwZGF0ZWQ6IEZyYW5rIE1heWVyIDxtYXllcmZAdHJlc3lzLmNvbT4gYW5kIEthcmwgTWFjTWlsbGFuIDxrbWFjbWlsbGFuQHRyZXN5cy5jb20+CiAgKgotICogCUFkZGVkIGNvbmRpdGlvbmFsIHBvbGljeSBsYW5ndWFnZSBleHRlbnNpb25zCisgKglBZGRlZCBjb25kaXRpb25hbCBwb2xpY3kgbGFuZ3VhZ2UgZXh0ZW5zaW9ucwogICoKICAqIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bC5tb29yZUBocC5jb20+CiAgKgpAQCAtMjEsNyArMjEsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgVHJ1c3RlZCBDb21wdXRlciBTb2x1dGlvbnMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDQgVHJlc3lzIFRlY2hub2xvZ3ksIExMQwogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCiAgKi8KIApAQCAtNTEsNyArNTEsNyBAQAogfTsKICNlbmRpZgogCi1pbnQgc2VsaW51eF9tbHNfZW5hYmxlZCA9IDA7CitpbnQgc2VsaW51eF9tbHNfZW5hYmxlZDsKIAogc3RhdGljIHVuc2lnbmVkIGludCBzeW10YWJfc2l6ZXNbU1lNX05VTV0gPSB7CiAJMiwKQEAgLTczLDQ0ICs3Myw0OSBAQAogLyogVGhlc2UgbmVlZCB0byBiZSB1cGRhdGVkIGlmIFNZTV9OVU0gb3IgT0NPTl9OVU0gY2hhbmdlcyAqLwogc3RhdGljIHN0cnVjdCBwb2xpY3lkYl9jb21wYXRfaW5mbyBwb2xpY3lkYl9jb21wYXRbXSA9IHsKIAl7Ci0JCS52ZXJzaW9uICAgICAgICA9IFBPTElDWURCX1ZFUlNJT05fQkFTRSwKLQkJLnN5bV9udW0gICAgICAgID0gU1lNX05VTSAtIDMsCi0JCS5vY29uX251bSAgICAgICA9IE9DT05fTlVNIC0gMSwKKwkJLnZlcnNpb24JPSBQT0xJQ1lEQl9WRVJTSU9OX0JBU0UsCisJCS5zeW1fbnVtCT0gU1lNX05VTSAtIDMsCisJCS5vY29uX251bQk9IE9DT05fTlVNIC0gMSwKIAl9LAogCXsKLQkJLnZlcnNpb24gICAgICAgID0gUE9MSUNZREJfVkVSU0lPTl9CT09MLAotCQkuc3ltX251bSAgICAgICAgPSBTWU1fTlVNIC0gMiwKLQkJLm9jb25fbnVtICAgICAgID0gT0NPTl9OVU0gLSAxLAorCQkudmVyc2lvbgk9IFBPTElDWURCX1ZFUlNJT05fQk9PTCwKKwkJLnN5bV9udW0JPSBTWU1fTlVNIC0gMiwKKwkJLm9jb25fbnVtCT0gT0NPTl9OVU0gLSAxLAogCX0sCiAJewotCQkudmVyc2lvbiAgICAgICAgPSBQT0xJQ1lEQl9WRVJTSU9OX0lQVjYsCi0JCS5zeW1fbnVtICAgICAgICA9IFNZTV9OVU0gLSAyLAotCQkub2Nvbl9udW0gICAgICAgPSBPQ09OX05VTSwKKwkJLnZlcnNpb24JPSBQT0xJQ1lEQl9WRVJTSU9OX0lQVjYsCisJCS5zeW1fbnVtCT0gU1lNX05VTSAtIDIsCisJCS5vY29uX251bQk9IE9DT05fTlVNLAogCX0sCiAJewotCQkudmVyc2lvbiAgICAgICAgPSBQT0xJQ1lEQl9WRVJTSU9OX05MQ0xBU1MsCi0JCS5zeW1fbnVtICAgICAgICA9IFNZTV9OVU0gLSAyLAotCQkub2Nvbl9udW0gICAgICAgPSBPQ09OX05VTSwKKwkJLnZlcnNpb24JPSBQT0xJQ1lEQl9WRVJTSU9OX05MQ0xBU1MsCisJCS5zeW1fbnVtCT0gU1lNX05VTSAtIDIsCisJCS5vY29uX251bQk9IE9DT05fTlVNLAogCX0sCiAJewotCQkudmVyc2lvbiAgICAgICAgPSBQT0xJQ1lEQl9WRVJTSU9OX01MUywKLQkJLnN5bV9udW0gICAgICAgID0gU1lNX05VTSwKLQkJLm9jb25fbnVtICAgICAgID0gT0NPTl9OVU0sCisJCS52ZXJzaW9uCT0gUE9MSUNZREJfVkVSU0lPTl9NTFMsCisJCS5zeW1fbnVtCT0gU1lNX05VTSwKKwkJLm9jb25fbnVtCT0gT0NPTl9OVU0sCiAJfSwKIAl7Ci0JCS52ZXJzaW9uICAgICAgICA9IFBPTElDWURCX1ZFUlNJT05fQVZUQUIsCi0JCS5zeW1fbnVtICAgICAgICA9IFNZTV9OVU0sCi0JCS5vY29uX251bSAgICAgICA9IE9DT05fTlVNLAorCQkudmVyc2lvbgk9IFBPTElDWURCX1ZFUlNJT05fQVZUQUIsCisJCS5zeW1fbnVtCT0gU1lNX05VTSwKKwkJLm9jb25fbnVtCT0gT0NPTl9OVU0sCiAJfSwKIAl7Ci0JCS52ZXJzaW9uICAgICAgICA9IFBPTElDWURCX1ZFUlNJT05fUkFOR0VUUkFOUywKLQkJLnN5bV9udW0gICAgICAgID0gU1lNX05VTSwKLQkJLm9jb25fbnVtICAgICAgID0gT0NPTl9OVU0sCisJCS52ZXJzaW9uCT0gUE9MSUNZREJfVkVSU0lPTl9SQU5HRVRSQU5TLAorCQkuc3ltX251bQk9IFNZTV9OVU0sCisJCS5vY29uX251bQk9IE9DT05fTlVNLAogCX0sCiAJewogCQkudmVyc2lvbgk9IFBPTElDWURCX1ZFUlNJT05fUE9MQ0FQLAogCQkuc3ltX251bQk9IFNZTV9OVU0sCiAJCS5vY29uX251bQk9IE9DT05fTlVNLAorCX0sCisJeworCQkudmVyc2lvbgk9IFBPTElDWURCX1ZFUlNJT05fUEVSTUlTU0lWRSwKKwkJLnN5bV9udW0JPSBTWU1fTlVNLAorCQkub2Nvbl9udW0JPSBPQ09OX05VTSwKIAl9CiB9OwogCkBAIC0xNDcsNyArMTUyLDcgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9mcmVlX3JvbGU7CiAJfQotCWtleSA9IGttYWxsb2Moc3RybGVuKE9CSkVDVF9SKSsxLEdGUF9LRVJORUwpOworCWtleSA9IGttYWxsb2Moc3RybGVuKE9CSkVDVF9SKSsxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtleSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWVfcm9sZTsKQEAgLTE5NCw2ICsxOTksNyBAQAogCQlnb3RvIG91dF9mcmVlX3N5bXRhYjsKIAogCWViaXRtYXBfaW5pdCgmcC0+cG9saWN5Y2Fwcyk7CisJZWJpdG1hcF9pbml0KCZwLT5wZXJtaXNzaXZlX21hcCk7CiAKIG91dDoKIAlyZXR1cm4gcmM7CkBAIC0zODQsNyArMzkwLDcgQEAKIAkJc3RydWN0IGhhc2h0YWJfaW5mbyBpbmZvOwogCiAJCWhhc2h0YWJfc3RhdChoLCAmaW5mbyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogICVkIGVudHJpZXMgYW5kICVkLyVkIGJ1Y2tldHMgdXNlZCwgIgorCQlwcmludGsoS0VSTl9ERUJVRyAiU0VMaW51eDogJXM6ICAlZCBlbnRyaWVzIGFuZCAlZC8lZCBidWNrZXRzIHVzZWQsICIKIAkJICAgICAgICJsb25nZXN0IGNoYWluIGxlbmd0aCAlZFxuIiwgc3ltdGFiX25hbWVbaV0sIGgtPm5lbCwKIAkJICAgICAgIGluZm8uc2xvdHNfdXNlZCwgaC0+c2l6ZSwgaW5mby5tYXhfY2hhaW5fbGVuKTsKIAl9CkBAIC00MDEsMTQgKzQwNywxNCBAQAogewogCWludCBpLCByYyA9IDA7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAic2VjdXJpdHk6ICAlZCB1c2VycywgJWQgcm9sZXMsICVkIHR5cGVzLCAlZCBib29scyIsCisJcHJpbnRrKEtFUk5fREVCVUcgIlNFTGludXg6ICAlZCB1c2VycywgJWQgcm9sZXMsICVkIHR5cGVzLCAlZCBib29scyIsCiAJICAgICAgIHAtPnBfdXNlcnMubnByaW0sIHAtPnBfcm9sZXMubnByaW0sIHAtPnBfdHlwZXMubnByaW0sIHAtPnBfYm9vbHMubnByaW0pOwogCWlmIChzZWxpbnV4X21sc19lbmFibGVkKQogCQlwcmludGsoIiwgJWQgc2VucywgJWQgY2F0cyIsIHAtPnBfbGV2ZWxzLm5wcmltLAogCQkgICAgICAgcC0+cF9jYXRzLm5wcmltKTsKIAlwcmludGsoIlxuIik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAic2VjdXJpdHk6ICAlZCBjbGFzc2VzLCAlZCBydWxlc1xuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiU0VMaW51eDogICVkIGNsYXNzZXMsICVkIHJ1bGVzXG4iLAogCSAgICAgICBwLT5wX2NsYXNzZXMubnByaW0sIHAtPnRlX2F2dGFiLm5lbCk7CiAKICNpZmRlZiBERUJVR19IQVNIRVMKQEAgLTQxOCw3ICs0MjQsNyBAQAogCiAJcC0+cm9sZV92YWxfdG9fc3RydWN0ID0KIAkJa21hbGxvYyhwLT5wX3JvbGVzLm5wcmltICogc2l6ZW9mKCoocC0+cm9sZV92YWxfdG9fc3RydWN0KSksCi0JCSAgICAgICAgR0ZQX0tFUk5FTCk7CisJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXAtPnJvbGVfdmFsX3RvX3N0cnVjdCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNDI2LDcgKzQzMiw3IEBACiAKIAlwLT51c2VyX3ZhbF90b19zdHJ1Y3QgPQogCQlrbWFsbG9jKHAtPnBfdXNlcnMubnByaW0gKiBzaXplb2YoKihwLT51c2VyX3ZhbF90b19zdHJ1Y3QpKSwKLQkJICAgICAgICBHRlBfS0VSTkVMKTsKKwkJCUdGUF9LRVJORUwpOwogCWlmICghcC0+dXNlcl92YWxfdG9fc3RydWN0KSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC02MjgsNyArNjM0LDcgQEAKIAkJd2hpbGUgKGMpIHsKIAkJCWN0bXAgPSBjOwogCQkJYyA9IGMtPm5leHQ7Ci0JCQlvY29udGV4dF9kZXN0cm95KGN0bXAsaSk7CisJCQlvY29udGV4dF9kZXN0cm95KGN0bXAsIGkpOwogCQl9CiAJCXAtPm9jb250ZXh0c1tpXSA9IE5VTEw7CiAJfQpAQCAtNjQxLDcgKzY0Nyw3IEBACiAJCXdoaWxlIChjKSB7CiAJCQljdG1wID0gYzsKIAkJCWMgPSBjLT5uZXh0OwotCQkJb2NvbnRleHRfZGVzdHJveShjdG1wLE9DT05fRlNVU0UpOworCQkJb2NvbnRleHRfZGVzdHJveShjdG1wLCBPQ09OX0ZTVVNFKTsKIAkJfQogCQlndG1wID0gZzsKIAkJZyA9IGctPm5leHQ7CkBAIC02NTgsMTQgKzY2NCwxNCBAQAogCX0KIAlrZnJlZShsdHIpOwogCi0JZm9yIChyYSA9IHAtPnJvbGVfYWxsb3c7IHJhOyByYSA9IHJhIC0+IG5leHQpIHsKKwlmb3IgKHJhID0gcC0+cm9sZV9hbGxvdzsgcmE7IHJhID0gcmEtPm5leHQpIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWtmcmVlKGxyYSk7CiAJCWxyYSA9IHJhOwogCX0KIAlrZnJlZShscmEpOwogCi0JZm9yIChydCA9IHAtPnJhbmdlX3RyOyBydDsgcnQgPSBydCAtPiBuZXh0KSB7CisJZm9yIChydCA9IHAtPnJhbmdlX3RyOyBydDsgcnQgPSBydC0+bmV4dCkgewogCQljb25kX3Jlc2NoZWQoKTsKIAkJaWYgKGxydCkgewogCQkJZWJpdG1hcF9kZXN0cm95KCZscnQtPnRhcmdldF9yYW5nZS5sZXZlbFswXS5jYXQpOwpAQCAtNjg3LDYgKzY5Myw3IEBACiAJa2ZyZWUocC0+dHlwZV9hdHRyX21hcCk7CiAJa2ZyZWUocC0+dW5kZWZpbmVkX3Blcm1zKTsKIAllYml0bWFwX2Rlc3Ryb3koJnAtPnBvbGljeWNhcHMpOworCWViaXRtYXBfZGVzdHJveSgmcC0+cGVybWlzc2l2ZV9tYXApOwogCiAJcmV0dXJuOwogfQpAQCAtNzAyLDIwICs3MDksMjAgQEAKIAogCXJjID0gc2lkdGFiX2luaXQocyk7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6ICBvdXQgb2YgbWVtb3J5IG9uIFNJRCB0YWJsZSBpbml0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgb3V0IG9mIG1lbW9yeSBvbiBTSUQgdGFibGUgaW5pdFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWhlYWQgPSBwLT5vY29udGV4dHNbT0NPTl9JU0lEXTsKIAlmb3IgKGMgPSBoZWFkOyBjOyBjID0gYy0+bmV4dCkgewogCQlpZiAoIWMtPmNvbnRleHRbMF0udXNlcikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIFNJRCAlcyB3YXMgbmV2ZXIgIgorCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgU0lEICVzIHdhcyBuZXZlciAiCiAJCQkgICAgICAgImRlZmluZWQuXG4iLCBjLT51Lm5hbWUpOwogCQkJcmMgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKHNpZHRhYl9pbnNlcnQocywgYy0+c2lkWzBdLCAmYy0+Y29udGV4dFswXSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6ICB1bmFibGUgdG8gbG9hZCBpbml0aWFsICIKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHVuYWJsZSB0byBsb2FkIGluaXRpYWwgIgogCQkJICAgICAgICJTSUQgJXMuXG4iLCBjLT51Lm5hbWUpOwogCQkJcmMgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CkBAIC04MDksMTMgKzgxNiwxMyBAQAogCiAJaXRlbXMgPSBsZTMyX3RvX2NwdShidWZbMF0pOwogCWlmIChpdGVtcyA+IEFSUkFZX1NJWkUoYnVmKSkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiBtbHM6ICByYW5nZSBvdmVyZmxvd1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogbWxzOiAgcmFuZ2Ugb3ZlcmZsb3dcbiIpOwogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikgKiBpdGVtcyk7CiAJaWYgKHJjIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiBtbHM6ICB0cnVuY2F0ZWQgcmFuZ2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IG1sczogIHRydW5jYXRlZCByYW5nZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlyLT5sZXZlbFswXS5zZW5zID0gbGUzMl90b19jcHUoYnVmWzBdKTsKQEAgLTgyNiwyMSArODMzLDIxIEBACiAKIAlyYyA9IGViaXRtYXBfcmVhZCgmci0+bGV2ZWxbMF0uY2F0LCBmcCk7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IG1sczogIGVycm9yIHJlYWRpbmcgbG93ICIKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBtbHM6ICBlcnJvciByZWFkaW5nIGxvdyAiCiAJCSAgICAgICAiY2F0ZWdvcmllc1xuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAoaXRlbXMgPiAxKSB7CiAJCXJjID0gZWJpdG1hcF9yZWFkKCZyLT5sZXZlbFsxXS5jYXQsIGZwKTsKIAkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiBtbHM6ICBlcnJvciByZWFkaW5nIGhpZ2ggIgorCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBtbHM6ICBlcnJvciByZWFkaW5nIGhpZ2ggIgogCQkJICAgICAgICJjYXRlZ29yaWVzXG4iKTsKIAkJCWdvdG8gYmFkX2hpZ2g7CiAJCX0KIAl9IGVsc2UgewogCQlyYyA9IGViaXRtYXBfY3B5KCZyLT5sZXZlbFsxXS5jYXQsICZyLT5sZXZlbFswXS5jYXQpOwogCQlpZiAocmMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IG1sczogIG91dCBvZiBtZW1vcnlcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBtbHM6ICBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCWdvdG8gYmFkX2hpZ2g7CiAJCX0KIAl9CkBAIC04NjYsNyArODczLDcgQEAKIAogCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YgYnVmKTsKIAlpZiAocmMgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGNvbnRleHQgdHJ1bmNhdGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBjb250ZXh0IHRydW5jYXRlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAljLT51c2VyID0gbGUzMl90b19jcHUoYnVmWzBdKTsKQEAgLTg3NCw3ICs4ODEsNyBAQAogCWMtPnR5cGUgPSBsZTMyX3RvX2NwdShidWZbMl0pOwogCWlmIChwLT5wb2xpY3l2ZXJzID49IFBPTElDWURCX1ZFUlNJT05fTUxTKSB7CiAJCWlmIChtbHNfcmVhZF9yYW5nZV9oZWxwZXIoJmMtPnJhbmdlLCBmcCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IGVycm9yIHJlYWRpbmcgTUxTIHJhbmdlIG9mICIKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogZXJyb3IgcmVhZGluZyBNTFMgcmFuZ2Ugb2YgIgogCQkJICAgICAgICJjb250ZXh0XG4iKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwpAQCAtODgyLDcgKzg4OSw3IEBACiAJfQogCiAJaWYgKCFwb2xpY3lkYl9jb250ZXh0X2lzdmFsaWQocCwgYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIGludmFsaWQgc2VjdXJpdHkgY29udGV4dFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIGludmFsaWQgc2VjdXJpdHkgY29udGV4dFxuIik7CiAJCWNvbnRleHRfZGVzdHJveShjKTsKIAkJcmMgPSAtRUlOVkFMOwogCX0KQEAgLTkxNyw3ICs5MjQsNyBAQAogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJcGVyZGF0dW0tPnZhbHVlID0gbGUzMl90b19jcHUoYnVmWzFdKTsKIAotCWtleSA9IGttYWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKKwlrZXkgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCWlmICgha2V5KSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBiYWQ7CkBAIC05NjQsNyArOTcxLDcgQEAKIAljb21kYXR1bS0+cGVybWlzc2lvbnMubnByaW0gPSBsZTMyX3RvX2NwdShidWZbMl0pOwogCW5lbCA9IGxlMzJfdG9fY3B1KGJ1ZlszXSk7CiAKLQlrZXkgPSBrbWFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CisJa2V5ID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtleSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gYmFkOwpAQCAtOTkxLDcgKzk5OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9jb25zX2hlbHBlcihzdHJ1Y3QgY29uc3RyYWludF9ub2RlICoqbm9kZXAsIGludCBuY29ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3d4dGFyZ2V0LCB2b2lkICpmcCkKKwkJCSAgICBpbnQgYWxsb3d4dGFyZ2V0LCB2b2lkICpmcCkKIHsKIAlzdHJ1Y3QgY29uc3RyYWludF9ub2RlICpjLCAqbGM7CiAJc3RydWN0IGNvbnN0cmFpbnRfZXhwciAqZSwgKmxlOwpAQCAtMTAwNSwxMSArMTAxMiwxMCBAQAogCQlpZiAoIWMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlpZiAobGMpIHsKKwkJaWYgKGxjKQogCQkJbGMtPm5leHQgPSBjOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQkqbm9kZXAgPSBjOwotCQl9CiAKIAkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIChzaXplb2YodTMyKSAqIDIpKTsKIAkJaWYgKHJjIDwgMCkKQEAgLTEwMjMsMTEgKzEwMjksMTAgQEAKIAkJCWlmICghZSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAotCQkJaWYgKGxlKSB7CisJCQlpZiAobGUpCiAJCQkJbGUtPm5leHQgPSBlOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQljLT5leHByID0gZTsKLQkJCX0KIAogCQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIChzaXplb2YodTMyKSAqIDMpKTsKIAkJCWlmIChyYyA8IDApCkBAIC0xMTA0LDcgKzExMDksNyBAQAogCiAJbmNvbnMgPSBsZTMyX3RvX2NwdShidWZbNV0pOwogCi0Ja2V5ID0ga21hbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCWtleSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrZXkpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGJhZDsKQEAgLTExMTUsNyArMTEyMCw3IEBACiAJa2V5W2xlbl0gPSAwOwogCiAJaWYgKGxlbjIpIHsKLQkJY2xhZGF0dW0tPmNvbWtleSA9IGttYWxsb2MobGVuMiArIDEsR0ZQX0tFUk5FTCk7CisJCWNsYWRhdHVtLT5jb21rZXkgPSBrbWFsbG9jKGxlbjIgKyAxLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjbGFkYXR1bS0+Y29ta2V5KSB7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIGJhZDsKQEAgLTExMjgsNyArMTEzMyw3IEBACiAJCWNsYWRhdHVtLT5jb21kYXR1bSA9IGhhc2h0YWJfc2VhcmNoKHAtPnBfY29tbW9ucy50YWJsZSwKIAkJCQkJCSAgICBjbGFkYXR1bS0+Y29ta2V5KTsKIAkJaWYgKCFjbGFkYXR1bS0+Y29tZGF0dW0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6ICB1bmtub3duIGNvbW1vbiAlc1xuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHVua25vd24gY29tbW9uICVzXG4iLAogCQkJICAgICAgIGNsYWRhdHVtLT5jb21rZXkpOwogCQkJcmMgPSAtRUlOVkFMOwogCQkJZ290byBiYWQ7CkBAIC0xMTg4LDcgKzExOTMsNyBAQAogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJcm9sZS0+dmFsdWUgPSBsZTMyX3RvX2NwdShidWZbMV0pOwogCi0Ja2V5ID0ga21hbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCWtleSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrZXkpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGJhZDsKQEAgLTEyMDgsNyArMTIxMyw3IEBACiAKIAlpZiAoc3RyY21wKGtleSwgT0JKRUNUX1IpID09IDApIHsKIAkJaWYgKHJvbGUtPnZhbHVlICE9IE9CSkVDVF9SX1ZBTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJSb2xlICVzIGhhcyB3cm9uZyB2YWx1ZSAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogUm9sZSAlcyBoYXMgd3JvbmcgdmFsdWUgJWRcbiIsCiAJCQkgICAgICAgT0JKRUNUX1IsIHJvbGUtPnZhbHVlKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gYmFkOwpAQCAtMTIzNSw3ICsxMjQwLDcgQEAKIAlfX2xlMzIgYnVmWzNdOwogCXUzMiBsZW47CiAKLQl0eXBkYXR1bSA9IGt6YWxsb2Moc2l6ZW9mKCp0eXBkYXR1bSksR0ZQX0tFUk5FTCk7CisJdHlwZGF0dW0gPSBremFsbG9jKHNpemVvZigqdHlwZGF0dW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXR5cGRhdHVtKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJcmV0dXJuIHJjOwpAQCAtMTI0OSw3ICsxMjU0LDcgQEAKIAl0eXBkYXR1bS0+dmFsdWUgPSBsZTMyX3RvX2NwdShidWZbMV0pOwogCXR5cGRhdHVtLT5wcmltYXJ5ID0gbGUzMl90b19jcHUoYnVmWzJdKTsKIAotCWtleSA9IGttYWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKKwlrZXkgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCWlmICgha2V5KSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBiYWQ7CkBAIC0xMjgzLDEzICsxMjg4LDEzIEBACiAKIAlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mIGJ1Zik7CiAJaWYgKHJjIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiBtbHM6IHRydW5jYXRlZCBsZXZlbFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogbWxzOiB0cnVuY2F0ZWQgbGV2ZWxcbiIpOwogCQlnb3RvIGJhZDsKIAl9CiAJbHAtPnNlbnMgPSBsZTMyX3RvX2NwdShidWZbMF0pOwogCiAJaWYgKGViaXRtYXBfcmVhZCgmbHAtPmNhdCwgZnApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6IG1sczogIGVycm9yIHJlYWRpbmcgbGV2ZWwgIgorCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IG1sczogIGVycm9yIHJlYWRpbmcgbGV2ZWwgIgogCQkgICAgICAgImNhdGVnb3JpZXNcbiIpOwogCQlnb3RvIGJhZDsKIAl9CkBAIC0xMzIxLDcgKzEzMjYsNyBAQAogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJdXNyZGF0dW0tPnZhbHVlID0gbGUzMl90b19jcHUoYnVmWzFdKTsKIAotCWtleSA9IGttYWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKKwlrZXkgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCWlmICgha2V5KSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBiYWQ7CkBAIC0xMzc1LDcgKzEzODAsNyBAQAogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJbGV2ZGF0dW0tPmlzYWxpYXMgPSBsZTMyX3RvX2NwdShidWZbMV0pOwogCi0Ja2V5ID0ga21hbGxvYyhsZW4gKyAxLEdGUF9BVE9NSUMpOworCWtleSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFrZXkpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGJhZDsKQEAgLTE0MjcsNyArMTQzMiw3IEBACiAJY2F0ZGF0dW0tPnZhbHVlID0gbGUzMl90b19jcHUoYnVmWzFdKTsKIAljYXRkYXR1bS0+aXNhbGlhcyA9IGxlMzJfdG9fY3B1KGJ1ZlsyXSk7CiAKLQlrZXkgPSBrbWFsbG9jKGxlbiArIDEsR0ZQX0FUT01JQyk7CisJa2V5ID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWtleSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gYmFkOwpAQCAtMTQ4NiwxMiArMTQ5MSwxMiBAQAogCQlnb3RvIG91dDsKIAogCS8qIFJlYWQgdGhlIG1hZ2ljIG51bWJlciBhbmQgc3RyaW5nIGxlbmd0aC4gKi8KLQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikqIDIpOworCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSAqIDIpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gYmFkOwogCiAJaWYgKGxlMzJfdG9fY3B1KGJ1ZlswXSkgIT0gUE9MSUNZREJfTUFHSUMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIHBvbGljeWRiIG1hZ2ljIG51bWJlciAweCV4IGRvZXMgIgorCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBwb2xpY3lkYiBtYWdpYyBudW1iZXIgMHgleCBkb2VzICIKIAkJICAgICAgICJub3QgbWF0Y2ggZXhwZWN0ZWQgbWFnaWMgbnVtYmVyIDB4JXhcbiIsCiAJCSAgICAgICBsZTMyX3RvX2NwdShidWZbMF0pLCBQT0xJQ1lEQl9NQUdJQyk7CiAJCWdvdG8gYmFkOwpAQCAtMTQ5OSwyNyArMTUwNCwyNyBAQAogCiAJbGVuID0gbGUzMl90b19jcHUoYnVmWzFdKTsKIAlpZiAobGVuICE9IHN0cmxlbihQT0xJQ1lEQl9TVFJJTkcpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6ICBwb2xpY3lkYiBzdHJpbmcgbGVuZ3RoICVkIGRvZXMgbm90ICIKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgcG9saWN5ZGIgc3RyaW5nIGxlbmd0aCAlZCBkb2VzIG5vdCAiCiAJCSAgICAgICAibWF0Y2ggZXhwZWN0ZWQgbGVuZ3RoICVadVxuIiwKIAkJICAgICAgIGxlbiwgc3RybGVuKFBPTElDWURCX1NUUklORykpOwogCQlnb3RvIGJhZDsKIAl9Ci0JcG9saWN5ZGJfc3RyID0ga21hbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCXBvbGljeWRiX3N0ciA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb2xpY3lkYl9zdHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIHVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBvbGljeWRiICIKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgdW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcG9saWN5ZGIgIgogCQkgICAgICAgInN0cmluZyBvZiBsZW5ndGggJWRcbiIsIGxlbik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBiYWQ7CiAJfQogCXJjID0gbmV4dF9lbnRyeShwb2xpY3lkYl9zdHIsIGZwLCBsZW4pOwogCWlmIChyYyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIHRydW5jYXRlZCBwb2xpY3lkYiBzdHJpbmcgaWRlbnRpZmllclxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHRydW5jYXRlZCBwb2xpY3lkYiBzdHJpbmcgaWRlbnRpZmllclxuIik7CiAJCWtmcmVlKHBvbGljeWRiX3N0cik7CiAJCWdvdG8gYmFkOwogCX0KIAlwb2xpY3lkYl9zdHJbbGVuXSA9IDA7CiAJaWYgKHN0cmNtcChwb2xpY3lkYl9zdHIsIFBPTElDWURCX1NUUklORykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIHBvbGljeWRiIHN0cmluZyAlcyBkb2VzIG5vdCBtYXRjaCAiCisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHBvbGljeWRiIHN0cmluZyAlcyBkb2VzIG5vdCBtYXRjaCAiCiAJCSAgICAgICAibXkgc3RyaW5nICVzXG4iLCBwb2xpY3lkYl9zdHIsIFBPTElDWURCX1NUUklORyk7CiAJCWtmcmVlKHBvbGljeWRiX3N0cik7CiAJCWdvdG8gYmFkOwpAQCAtMTUzNiwzMCArMTU0MSwzMSBAQAogCXAtPnBvbGljeXZlcnMgPSBsZTMyX3RvX2NwdShidWZbMF0pOwogCWlmIChwLT5wb2xpY3l2ZXJzIDwgUE9MSUNZREJfVkVSU0lPTl9NSU4gfHwKIAkgICAgcC0+cG9saWN5dmVycyA+IFBPTElDWURCX1ZFUlNJT05fTUFYKSB7Ci0JICAgIAlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiAgcG9saWN5ZGIgdmVyc2lvbiAlZCBkb2VzIG5vdCBtYXRjaCAiCi0JICAgIAkgICAgICAgIm15IHZlcnNpb24gcmFuZ2UgJWQtJWRcbiIsCi0JICAgIAkgICAgICAgbGUzMl90b19jcHUoYnVmWzBdKSwgUE9MSUNZREJfVkVSU0lPTl9NSU4sIFBPTElDWURCX1ZFUlNJT05fTUFYKTsKLQkgICAgCWdvdG8gYmFkOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBwb2xpY3lkYiB2ZXJzaW9uICVkIGRvZXMgbm90IG1hdGNoICIKKwkJICAgICAgICJteSB2ZXJzaW9uIHJhbmdlICVkLSVkXG4iLAorCQkgICAgICAgbGUzMl90b19jcHUoYnVmWzBdKSwgUE9MSUNZREJfVkVSU0lPTl9NSU4sIFBPTElDWURCX1ZFUlNJT05fTUFYKTsKKwkJZ290byBiYWQ7CiAJfQogCiAJaWYgKChsZTMyX3RvX2NwdShidWZbMV0pICYgUE9MSUNZREJfQ09ORklHX01MUykpIHsKIAkJaWYgKHNzX2luaXRpYWxpemVkICYmICFzZWxpbnV4X21sc19lbmFibGVkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBzd2l0Y2ggYmV0d2VlbiBub24tTUxTIGFuZCBNTFMgIgotCQkJICAgICAgICJwb2xpY2llc1xuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IENhbm5vdCBzd2l0Y2ggYmV0d2VlbiBub24tTUxTIgorCQkJCSIgYW5kIE1MUyBwb2xpY2llc1xuIik7CiAJCQlnb3RvIGJhZDsKIAkJfQogCQlzZWxpbnV4X21sc19lbmFibGVkID0gMTsKIAkJY29uZmlnIHw9IFBPTElDWURCX0NPTkZJR19NTFM7CiAKIAkJaWYgKHAtPnBvbGljeXZlcnMgPCBQT0xJQ1lEQl9WRVJTSU9OX01MUykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eSBwb2xpY3lkYiB2ZXJzaW9uICVkIChNTFMpICIKLQkJCSAgICAgICAibm90IGJhY2t3YXJkcyBjb21wYXRpYmxlXG4iLCBwLT5wb2xpY3l2ZXJzKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogc2VjdXJpdHkgcG9saWN5ZGIgdmVyc2lvbiAlZCAiCisJCQkJIihNTFMpIG5vdCBiYWNrd2FyZHMgY29tcGF0aWJsZVxuIiwKKwkJCQlwLT5wb2xpY3l2ZXJzKTsKIAkJCWdvdG8gYmFkOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHNzX2luaXRpYWxpemVkICYmIHNlbGludXhfbWxzX2VuYWJsZWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHN3aXRjaCBiZXR3ZWVuIE1MUyBhbmQgbm9uLU1MUyAiCi0JCQkgICAgICAgInBvbGljaWVzXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogQ2Fubm90IHN3aXRjaCBiZXR3ZWVuIE1MUyBhbmQiCisJCQkJIiBub24tTUxTIHBvbGljaWVzXG4iKTsKIAkJCWdvdG8gYmFkOwogCQl9CiAJfQpAQCAtMTU3MCwxNiArMTU3NiwyMCBAQAogCSAgICBlYml0bWFwX3JlYWQoJnAtPnBvbGljeWNhcHMsIGZwKSAhPSAwKQogCQlnb3RvIGJhZDsKIAorCWlmIChwLT5wb2xpY3l2ZXJzID49IFBPTElDWURCX1ZFUlNJT05fUEVSTUlTU0lWRSAmJgorCSAgICBlYml0bWFwX3JlYWQoJnAtPnBlcm1pc3NpdmVfbWFwLCBmcCkgIT0gMCkKKwkJZ290byBiYWQ7CisKIAlpbmZvID0gcG9saWN5ZGJfbG9va3VwX2NvbXBhdChwLT5wb2xpY3l2ZXJzKTsKIAlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIHVuYWJsZSB0byBmaW5kIHBvbGljeSBjb21wYXQgaW5mbyAiCisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHVuYWJsZSB0byBmaW5kIHBvbGljeSBjb21wYXQgaW5mbyAiCiAJCSAgICAgICAiZm9yIHZlcnNpb24gJWRcbiIsIHAtPnBvbGljeXZlcnMpOwogCQlnb3RvIGJhZDsKIAl9CiAKIAlpZiAobGUzMl90b19jcHUoYnVmWzJdKSAhPSBpbmZvLT5zeW1fbnVtIHx8CiAJCWxlMzJfdG9fY3B1KGJ1ZlszXSkgIT0gaW5mby0+b2Nvbl9udW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIHBvbGljeWRiIHRhYmxlIHNpemVzICglZCwlZCkgZG8gIgorCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBwb2xpY3lkYiB0YWJsZSBzaXplcyAoJWQsJWQpIGRvICIKIAkJICAgICAgICJub3QgbWF0Y2ggbWluZSAoJWQsJWQpXG4iLCBsZTMyX3RvX2NwdShidWZbMl0pLAogCQkJbGUzMl90b19jcHUoYnVmWzNdKSwKIAkJICAgICAgIGluZm8tPnN5bV9udW0sIGluZm8tPm9jb25fbnVtKTsKQEAgLTE2MjIsMTEgKzE2MzIsMTAgQEAKIAkJCXJjID0gLUVOT01FTTsKIAkJCWdvdG8gYmFkOwogCQl9Ci0JCWlmIChsdHIpIHsKKwkJaWYgKGx0cikKIAkJCWx0ci0+bmV4dCA9IHRyOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwLT5yb2xlX3RyID0gdHI7Ci0JCX0KIAkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKjMpOwogCQlpZiAocmMgPCAwKQogCQkJZ290byBiYWQ7CkBAIC0xNjUzLDExICsxNjYyLDEwIEBACiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIGJhZDsKIAkJfQotCQlpZiAobHJhKSB7CisJCWlmIChscmEpCiAJCQlscmEtPm5leHQgPSByYTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcC0+cm9sZV9hbGxvdyA9IHJhOwotCQl9CiAJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSoyKTsKIAkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gYmFkOwpAQCAtMTY5MSwxMSArMTY5OSwxMCBAQAogCQkJCXJjID0gLUVOT01FTTsKIAkJCQlnb3RvIGJhZDsKIAkJCX0KLQkJCWlmIChsKSB7CisJCQlpZiAobCkKIAkJCQlsLT5uZXh0ID0gYzsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJcC0+b2NvbnRleHRzW2ldID0gYzsKLQkJCX0KIAkJCWwgPSBjOwogCQkJcmMgPSAtRUlOVkFMOwogCQkJc3dpdGNoIChpKSB7CkBAIC0xNzE0LDcgKzE3MjEsNyBAQAogCQkJCWlmIChyYyA8IDApCiAJCQkJCWdvdG8gYmFkOwogCQkJCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7Ci0JCQkJYy0+dS5uYW1lID0ga21hbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCQkJCWMtPnUubmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFjLT51Lm5hbWUpIHsKIAkJCQkJcmMgPSAtRU5PTUVNOwogCQkJCQlnb3RvIGJhZDsKQEAgLTE3NDIsNyArMTc0OSw3IEBACiAJCQkJCWdvdG8gYmFkOwogCQkJCWJyZWFrOwogCQkJY2FzZSBPQ09OX05PREU6Ci0JCQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKiAyKTsKKwkJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikgKiAyKTsKIAkJCQlpZiAocmMgPCAwKQogCQkJCQlnb3RvIGJhZDsKIAkJCQljLT51Lm5vZGUuYWRkciA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CkBAIC0xNzU5LDcgKzE3NjYsNyBAQAogCQkJCWlmIChjLT52LmJlaGF2aW9yID4gU0VDVVJJVFlfRlNfVVNFX05PTkUpCiAJCQkJCWdvdG8gYmFkOwogCQkJCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlsxXSk7Ci0JCQkJYy0+dS5uYW1lID0ga21hbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCQkJCWMtPnUubmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFjLT51Lm5hbWUpIHsKIAkJCQkJcmMgPSAtRU5PTUVNOwogCQkJCQlnb3RvIGJhZDsKQEAgLTE4MDcsNyArMTgxNCw3IEBACiAJCQlnb3RvIGJhZDsKIAkJfQogCi0JCW5ld2dlbmZzLT5mc3R5cGUgPSBrbWFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CisJCW5ld2dlbmZzLT5mc3R5cGUgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCQlpZiAoIW5ld2dlbmZzLT5mc3R5cGUpIHsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWtmcmVlKG5ld2dlbmZzKTsKQEAgLTE4MjMsNyArMTgzMCw3IEBACiAJCWZvciAoZ2VuZnNfcCA9IE5VTEwsIGdlbmZzID0gcC0+Z2VuZnM7IGdlbmZzOwogCQkgICAgIGdlbmZzX3AgPSBnZW5mcywgZ2VuZnMgPSBnZW5mcy0+bmV4dCkgewogCQkJaWYgKHN0cmNtcChuZXdnZW5mcy0+ZnN0eXBlLCBnZW5mcy0+ZnN0eXBlKSA9PSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIGR1cCBnZW5mcyAiCisJCQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgZHVwIGdlbmZzICIKIAkJCQkgICAgICAgImZzdHlwZSAlc1xuIiwgbmV3Z2VuZnMtPmZzdHlwZSk7CiAJCQkJa2ZyZWUobmV3Z2VuZnMtPmZzdHlwZSk7CiAJCQkJa2ZyZWUobmV3Z2VuZnMpOwpAQCAtMTg1Myw3ICsxODYwLDcgQEAKIAkJCQlnb3RvIGJhZDsKIAkJCX0KIAotCQkJbmV3Yy0+dS5uYW1lID0ga21hbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCQkJbmV3Yy0+dS5uYW1lID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghbmV3Yy0+dS5uYW1lKSB7CiAJCQkJcmMgPSAtRU5PTUVNOwogCQkJCWdvdG8gYmFkX25ld2M7CkBAIC0xODczLDcgKzE4ODAsNyBAQAogCQkJCWlmICghc3RyY21wKG5ld2MtPnUubmFtZSwgYy0+dS5uYW1lKSAmJgogCQkJCSAgICAoIWMtPnYuc2NsYXNzIHx8ICFuZXdjLT52LnNjbGFzcyB8fAogCQkJCSAgICAgbmV3Yy0+di5zY2xhc3MgPT0gYy0+di5zY2xhc3MpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHk6ICBkdXAgZ2VuZnMgIgorCQkJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBkdXAgZ2VuZnMgIgogCQkJCQkgICAgICAgImVudHJ5ICglcywlcylcbiIsCiAJCQkJCSAgICAgICBuZXdnZW5mcy0+ZnN0eXBlLCBjLT51Lm5hbWUpOwogCQkJCQlnb3RvIGJhZF9uZXdjOwpAQCAtMTkzMSw3ICsxOTM4LDcgQEAKIAkJCWlmIChyYykKIAkJCQlnb3RvIGJhZDsKIAkJCWlmICghbWxzX3JhbmdlX2lzdmFsaWQocCwgJnJ0LT50YXJnZXRfcmFuZ2UpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2VjdXJpdHk6ICByYW5nZXRyYW5zOiAgaW52YWxpZCByYW5nZVxuIik7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogIHJhbmdldHJhbnM6ICBpbnZhbGlkIHJhbmdlXG4iKTsKIAkJCQlnb3RvIGJhZDsKIAkJCX0KIAkJCWxydCA9IHJ0OwpAQCAtMTk1Nyw3ICsxOTY0LDcgQEAKIG91dDoKIAlyZXR1cm4gcmM7CiBiYWRfbmV3YzoKLQlvY29udGV4dF9kZXN0cm95KG5ld2MsT0NPTl9GU1VTRSk7CisJb2NvbnRleHRfZGVzdHJveShuZXdjLCBPQ09OX0ZTVVNFKTsKIGJhZDoKIAlpZiAoIXJjKQogCQlyYyA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmggYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmgKaW5kZXggYzRjZTk5Ni4uYmE1OTNhMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaApAQCAtMjQzLDYgKzI0Myw4IEBACiAKIAlzdHJ1Y3QgZWJpdG1hcCBwb2xpY3ljYXBzOwogCisJc3RydWN0IGViaXRtYXAgcGVybWlzc2l2ZV9tYXA7CisKIAl1bnNpZ25lZCBpbnQgcG9saWN5dmVyczsKIAogCXVuc2lnbmVkIGludCByZWplY3RfdW5rbm93biA6IDE7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggZjM3NDE4Ni4uMmRhYWRkYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBzZXJ2aWNlcy4KICAqCiAgKiBBdXRob3JzIDogU3RlcGhlbiBTbWFsbGV5LCA8c2RzQGVwb2NoLm5jc2MubWlsPgotICogICAgICAgICAgIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoJICAgICBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KICAqCiAgKiBVcGRhdGVkOiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLiA8ZGdvZWRkZWxAdHJ1c3RlZGNzLmNvbT4KICAqCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICogVXBkYXRlZDogRnJhbmsgTWF5ZXIgPG1heWVyZkB0cmVzeXMuY29tPiBhbmQgS2FybCBNYWNNaWxsYW4gPGttYWNtaWxsYW5AdHJlc3lzLmNvbT4KICAqCi0gKiAJQWRkZWQgY29uZGl0aW9uYWwgcG9saWN5IGxhbmd1YWdlIGV4dGVuc2lvbnMKKyAqCUFkZGVkIGNvbmRpdGlvbmFsIHBvbGljeSBsYW5ndWFnZSBleHRlbnNpb25zCiAgKgogICogVXBkYXRlZDogSGV3bGV0dC1QYWNrYXJkIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqCkBAIC0yNyw3ICsyNyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA0LCAyMDA2IFRyZXN5cyBUZWNobm9sb2d5LCBMTEMKICAqIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgogCiAjaW5jbHVkZSAiZmxhc2suaCIKQEAgLTU2LDExICs1NywxMyBAQAogI2luY2x1ZGUgIm5ldGxhYmVsLmgiCiAjaW5jbHVkZSAieGZybS5oIgogI2luY2x1ZGUgImViaXRtYXAuaCIKKyNpbmNsdWRlICJhdWRpdC5oIgogCiBleHRlcm4gdm9pZCBzZWxubF9ub3RpZnlfcG9saWN5bG9hZCh1MzIgc2Vxbm8pOwogdW5zaWduZWQgaW50IHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uOwogCiBpbnQgc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcjsKK2ludCBzZWxpbnV4X3BvbGljeWNhcF9vcGVucGVybTsKIAogLyoKICAqIFRoaXMgaXMgZGVjbGFyZWQgaW4gYXZjLmMKQEAgLTc5LDcgKzgyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBzaWR0YWIgc2lkdGFiOwogc3RydWN0IHBvbGljeWRiIHBvbGljeWRiOwotaW50IHNzX2luaXRpYWxpemVkID0gMDsKK2ludCBzc19pbml0aWFsaXplZDsKIAogLyoKICAqIFRoZSBsYXJnZXN0IHNlcXVlbmNlIG51bWJlciB0aGF0IGhhcyBiZWVuIHVzZWQgd2hlbgpAQCAtODcsNyArOTAsNyBAQAogICogVGhlIHNlcXVlbmNlIG51bWJlciBvbmx5IGNoYW5nZXMgd2hlbiBhIHBvbGljeSBjaGFuZ2UKICAqIG9jY3Vycy4KICAqLwotc3RhdGljIHUzMiBsYXRlc3RfZ3JhbnRpbmcgPSAwOworc3RhdGljIHUzMiBsYXRlc3RfZ3JhbnRpbmc7CiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24uICovCiBzdGF0aWMgaW50IGNvbnRleHRfc3RydWN0X3RvX3N0cmluZyhzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwgY2hhciAqKnNjb250ZXh0LApAQCAtMTYwLDEwICsxNjMsMTAgQEAKIAkJCQkJCQkJICB2YWwxIC0gMSk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCWNhc2UgQ0VYUFJfSU5DT01QOgotCQkJCQlzWysrc3BdID0gKCAhZWJpdG1hcF9nZXRfYml0KCZyMS0+ZG9taW5hdGVzLAotCQkJCQkJCQkgICAgIHZhbDIgLSAxKSAmJgotCQkJCQkJICAgICFlYml0bWFwX2dldF9iaXQoJnIyLT5kb21pbmF0ZXMsCi0JCQkJCQkJCSAgICAgdmFsMSAtIDEpICk7CisJCQkJCXNbKytzcF0gPSAoIWViaXRtYXBfZ2V0X2JpdCgmcjEtPmRvbWluYXRlcywKKwkJCQkJCQkJICAgIHZhbDIgLSAxKSAmJgorCQkJCQkJICAgIWViaXRtYXBfZ2V0X2JpdCgmcjItPmRvbWluYXRlcywKKwkJCQkJCQkJICAgIHZhbDEgLSAxKSk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCWRlZmF1bHQ6CiAJCQkJCWJyZWFrOwpAQCAtNDA2LDIwICs0MDksNDYgQEAKIAkJfQogCQlpZiAoIXJhKQogCQkJYXZkLT5hbGxvd2VkID0gKGF2ZC0+YWxsb3dlZCkgJiB+KFBST0NFU1NfX1RSQU5TSVRJT04gfAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9DRVNTX19EWU5UUkFOU0lUSU9OKTsKKwkJCQkJCQlQUk9DRVNTX19EWU5UUkFOU0lUSU9OKTsKIAl9CiAKIAlyZXR1cm4gMDsKIAogaW52YWxfY2xhc3M6Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogIHVucmVjb2duaXplZCBjbGFzcyAlZFxuIiwgX19GVU5DVElPTl9fLCB0Y2xhc3MpOworCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgY2xhc3MgJWRcbiIsIF9fZnVuY19fLAorCQl0Y2xhc3MpOwogCXJldHVybiAtRUlOVkFMOwogfQogCisvKgorICogR2l2ZW4gYSBzaWQgZmluZCBpZiB0aGUgdHlwZSBoYXMgdGhlIHBlcm1pc3NpdmUgZmxhZyBzZXQKKyAqLworaW50IHNlY3VyaXR5X3Blcm1pc3NpdmVfc2lkKHUzMiBzaWQpCit7CisJc3RydWN0IGNvbnRleHQgKmNvbnRleHQ7CisJdTMyIHR5cGU7CisJaW50IHJjOworCisJUE9MSUNZX1JETE9DSzsKKworCWNvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNpZCk7CisJQlVHX09OKCFjb250ZXh0KTsKKworCXR5cGUgPSBjb250ZXh0LT50eXBlOworCS8qCisJICogd2UgYXJlIGludGVudGlvbmFsbHkgdXNpbmcgdHlwZSBoZXJlLCBub3QgdHlwZS0xLCB0aGUgMHRoIGJpdCBtYXkKKwkgKiBzb21lZGF5IGluZGljYXRlIHRoYXQgd2UgYXJlIGdsb2JhbGx5IHNldHRpbmcgcGVybWlzc2l2ZSBpbiBwb2xpY3kuCisJICovCisJcmMgPSBlYml0bWFwX2dldF9iaXQoJnBvbGljeWRiLnBlcm1pc3NpdmVfbWFwLCB0eXBlKTsKKworCVBPTElDWV9SRFVOTE9DSzsKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgc2VjdXJpdHlfdmFsaWR0cmFuc19oYW5kbGVfZmFpbChzdHJ1Y3QgY29udGV4dCAqb2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRleHQgKm5jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZXh0ICp0Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdGNsYXNzKQorCQkJCQkgICBzdHJ1Y3QgY29udGV4dCAqbmNvbnRleHQsCisJCQkJCSAgIHN0cnVjdCBjb250ZXh0ICp0Y29udGV4dCwKKwkJCQkJICAgdTE2IHRjbGFzcykKIHsKIAljaGFyICpvID0gTlVMTCwgKm4gPSBOVUxMLCAqdCA9IE5VTEw7CiAJdTMyIG9sZW4sIG5sZW4sIHRsZW47CkBAIC00MzEsOSArNDYwLDkgQEAKIAlpZiAoY29udGV4dF9zdHJ1Y3RfdG9fc3RyaW5nKHRjb250ZXh0LCAmdCwgJnRsZW4pIDwgMCkKIAkJZ290byBvdXQ7CiAJYXVkaXRfbG9nKGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQsIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSLAotCSAgICAgICAgICAic2VjdXJpdHlfdmFsaWRhdGVfdHJhbnNpdGlvbjogIGRlbmllZCBmb3IiCi0JICAgICAgICAgICIgb2xkY29udGV4dD0lcyBuZXdjb250ZXh0PSVzIHRhc2tjb250ZXh0PSVzIHRjbGFzcz0lcyIsCi0JICAgICAgICAgIG8sIG4sIHQsIHBvbGljeWRiLnBfY2xhc3NfdmFsX3RvX25hbWVbdGNsYXNzLTFdKTsKKwkJICAic2VjdXJpdHlfdmFsaWRhdGVfdHJhbnNpdGlvbjogIGRlbmllZCBmb3IiCisJCSAgIiBvbGRjb250ZXh0PSVzIG5ld2NvbnRleHQ9JXMgdGFza2NvbnRleHQ9JXMgdGNsYXNzPSVzIiwKKwkJICBvLCBuLCB0LCBwb2xpY3lkYi5wX2NsYXNzX3ZhbF90b19uYW1lW3RjbGFzcy0xXSk7CiBvdXQ6CiAJa2ZyZWUobyk7CiAJa2ZyZWUobik7CkBAIC00NDUsNyArNDc0LDcgQEAKIH0KIAogaW50IHNlY3VyaXR5X3ZhbGlkYXRlX3RyYW5zaXRpb24odTMyIG9sZHNpZCwgdTMyIG5ld3NpZCwgdTMyIHRhc2tzaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdGNsYXNzKQorCQkJCSB1MTYgdGNsYXNzKQogewogCXN0cnVjdCBjb250ZXh0ICpvY29udGV4dDsKIAlzdHJ1Y3QgY29udGV4dCAqbmNvbnRleHQ7CkBAIC00NzEsOCArNTAwLDggQEAKIAkJCXRjbGFzcyA9IFNFQ0NMQVNTX05FVExJTktfU09DS0VUOwogCiAJaWYgKCF0Y2xhc3MgfHwgdGNsYXNzID4gcG9saWN5ZGIucF9jbGFzc2VzLm5wcmltKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHlfdmFsaWRhdGVfdHJhbnNpdGlvbjogICIKLQkJICAgICAgICJ1bnJlY29nbml6ZWQgY2xhc3MgJWRcbiIsIHRjbGFzcyk7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgY2xhc3MgJWRcbiIsCisJCQlfX2Z1bmNfXywgdGNsYXNzKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC00ODAsMjQgKzUwOSwyNCBAQAogCiAJb2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIG9sZHNpZCk7CiAJaWYgKCFvY29udGV4dCkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5X3ZhbGlkYXRlX3RyYW5zaXRpb246ICIKLQkJICAgICAgICIgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwgb2xkc2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCQlfX2Z1bmNfXywgb2xkc2lkKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAluY29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgbmV3c2lkKTsKIAlpZiAoIW5jb250ZXh0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHlfdmFsaWRhdGVfdHJhbnNpdGlvbjogIgotCQkgICAgICAgIiB1bnJlY29nbml6ZWQgU0lEICVkXG4iLCBuZXdzaWQpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJCV9fZnVuY19fLCBuZXdzaWQpOwogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAogCXRjb250ZXh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCB0YXNrc2lkKTsKIAlpZiAoIXRjb250ZXh0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VjdXJpdHlfdmFsaWRhdGVfdHJhbnNpdGlvbjogIgotCQkgICAgICAgIiB1bnJlY29nbml6ZWQgU0lEICVkXG4iLCB0YXNrc2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCQlfX2Z1bmNfXywgdGFza3NpZCk7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNTA1LDkgKzUzNCw5IEBACiAJY29uc3RyYWludCA9IHRjbGFzc19kYXR1bS0+dmFsaWRhdGV0cmFuczsKIAl3aGlsZSAoY29uc3RyYWludCkgewogCQlpZiAoIWNvbnN0cmFpbnRfZXhwcl9ldmFsKG9jb250ZXh0LCBuY29udGV4dCwgdGNvbnRleHQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludC0+ZXhwcikpIHsKKwkJCQkJICBjb25zdHJhaW50LT5leHByKSkgewogCQkJcmMgPSBzZWN1cml0eV92YWxpZHRyYW5zX2hhbmRsZV9mYWlsKG9jb250ZXh0LCBuY29udGV4dCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y29udGV4dCwgdGNsYXNzKTsKKwkJCQkJCQkgICAgIHRjb250ZXh0LCB0Y2xhc3MpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJY29uc3RyYWludCA9IGNvbnN0cmFpbnQtPm5leHQ7CkBAIC01NTMsMTUgKzU4MiwxNSBAQAogCiAJc2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNzaWQpOwogCWlmICghc2NvbnRleHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eV9jb21wdXRlX2F2OiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKLQkJICAgICAgIHNzaWQpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzc2lkKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAJdGNvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHRzaWQpOwogCWlmICghdGNvbnRleHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eV9jb21wdXRlX2F2OiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKLQkJICAgICAgIHRzaWQpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB0c2lkKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC01OTUsOSArNjI0LDggQEAKIAogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgY29udGV4dDsgY2FsbGVyIG11c3QgZnJlZSB0aGlzIHNwYWNlLiAqLwogCXNjb250ZXh0cCA9IGttYWxsb2MoKnNjb250ZXh0X2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzY29udGV4dHApIHsKKwlpZiAoIXNjb250ZXh0cCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCSpzY29udGV4dCA9IHNjb250ZXh0cDsKIAogCS8qCkBAIC02MDgsOCArNjM2LDggQEAKIAkJcG9saWN5ZGIucF9yb2xlX3ZhbF90b19uYW1lW2NvbnRleHQtPnJvbGUgLSAxXSwKIAkJcG9saWN5ZGIucF90eXBlX3ZhbF90b19uYW1lW2NvbnRleHQtPnR5cGUgLSAxXSk7CiAJc2NvbnRleHRwICs9IHN0cmxlbihwb2xpY3lkYi5wX3VzZXJfdmFsX3RvX25hbWVbY29udGV4dC0+dXNlciAtIDFdKSArCi0JICAgICAgICAgICAgIDEgKyBzdHJsZW4ocG9saWN5ZGIucF9yb2xlX3ZhbF90b19uYW1lW2NvbnRleHQtPnJvbGUgLSAxXSkgKwotCSAgICAgICAgICAgICAxICsgc3RybGVuKHBvbGljeWRiLnBfdHlwZV92YWxfdG9fbmFtZVtjb250ZXh0LT50eXBlIC0gMV0pOworCQkgICAgIDEgKyBzdHJsZW4ocG9saWN5ZGIucF9yb2xlX3ZhbF90b19uYW1lW2NvbnRleHQtPnJvbGUgLSAxXSkgKworCQkgICAgIDEgKyBzdHJsZW4ocG9saWN5ZGIucF90eXBlX3ZhbF90b19uYW1lW2NvbnRleHQtPnR5cGUgLSAxXSk7CiAKIAltbHNfc2lkX3RvX2NvbnRleHQoY29udGV4dCwgJnNjb250ZXh0cCk7CiAKQEAgLTY1MCw3ICs2NzgsNyBAQAogCQkJY2hhciAqc2NvbnRleHRwOwogCiAJCQkqc2NvbnRleHRfbGVuID0gc3RybGVuKGluaXRpYWxfc2lkX3RvX3N0cmluZ1tzaWRdKSArIDE7Ci0JCQlzY29udGV4dHAgPSBrbWFsbG9jKCpzY29udGV4dF9sZW4sR0ZQX0FUT01JQyk7CisJCQlzY29udGV4dHAgPSBrbWFsbG9jKCpzY29udGV4dF9sZW4sIEdGUF9BVE9NSUMpOwogCQkJaWYgKCFzY29udGV4dHApIHsKIAkJCQlyYyA9IC1FTk9NRU07CiAJCQkJZ290byBvdXQ7CkBAIC02NTksMTYgKzY4NywxNiBAQAogCQkJKnNjb250ZXh0ID0gc2NvbnRleHRwOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eV9zaWRfdG9fY29udGV4dDogIGNhbGxlZCBiZWZvcmUgaW5pdGlhbCAiCi0JCSAgICAgICAibG9hZF9wb2xpY3kgb24gdW5rbm93biBTSUQgJWRcbiIsIHNpZCk7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICBjYWxsZWQgYmVmb3JlIGluaXRpYWwgIgorCQkgICAgICAgImxvYWRfcG9saWN5IG9uIHVua25vd24gU0lEICVkXG4iLCBfX2Z1bmNfXywgc2lkKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAJUE9MSUNZX1JETE9DSzsKIAljb250ZXh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCBzaWQpOwogCWlmICghY29udGV4dCkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5X3NpZF90b19jb250ZXh0OiAgdW5yZWNvZ25pemVkIFNJRCAiCi0JCSAgICAgICAiJWRcbiIsIHNpZCk7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgU0lEICVkXG4iLAorCQkJX19mdW5jX18sIHNpZCk7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KQEAgLTY4MCw3ICs3MDgsOCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgc2VjdXJpdHlfY29udGV4dF90b19zaWRfY29yZShjaGFyICpzY29udGV4dCwgdTMyIHNjb250ZXh0X2xlbiwgdTMyICpzaWQsIHUzMiBkZWZfc2lkKQorc3RhdGljIGludCBzZWN1cml0eV9jb250ZXh0X3RvX3NpZF9jb3JlKGNoYXIgKnNjb250ZXh0LCB1MzIgc2NvbnRleHRfbGVuLAorCQkJCQl1MzIgKnNpZCwgdTMyIGRlZl9zaWQsIGdmcF90IGdmcF9mbGFncykKIHsKIAljaGFyICpzY29udGV4dDI7CiAJc3RydWN0IGNvbnRleHQgY29udGV4dDsKQEAgLTcwOSw3ICs3MzgsNyBAQAogCSAgIG51bGwgc3VmZml4IHRvIHRoZSBjb3B5IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGhlIGV4aXN0aW5nCiAJICAgYXR0ciBwYWNrYWdlLCB3aGljaCBkb2Vzbid0IHZpZXcgdGhlIG51bGwgdGVybWluYXRvciBhcyBwYXJ0CiAJICAgb2YgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4gKi8KLQlzY29udGV4dDIgPSBrbWFsbG9jKHNjb250ZXh0X2xlbisxLEdGUF9LRVJORUwpOworCXNjb250ZXh0MiA9IGttYWxsb2Moc2NvbnRleHRfbGVuKzEsIGdmcF9mbGFncyk7CiAJaWYgKCFzY29udGV4dDIpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTgwOSw3ICs4MzgsNyBAQAogaW50IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKGNoYXIgKnNjb250ZXh0LCB1MzIgc2NvbnRleHRfbGVuLCB1MzIgKnNpZCkKIHsKIAlyZXR1cm4gc2VjdXJpdHlfY29udGV4dF90b19zaWRfY29yZShzY29udGV4dCwgc2NvbnRleHRfbGVuLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZCwgU0VDU0lEX05VTEwpOworCQkJCQkgICAgc2lkLCBTRUNTSURfTlVMTCwgR0ZQX0tFUk5FTCk7CiB9CiAKIC8qKgpAQCAtODI5LDEwICs4NTgsMTEgQEAKICAqIFJldHVybnMgLSVFSU5WQUwgaWYgdGhlIGNvbnRleHQgaXMgaW52YWxpZCwgLSVFTk9NRU0gaWYgaW5zdWZmaWNpZW50CiAgKiBtZW1vcnkgaXMgYXZhaWxhYmxlLCBvciAwIG9uIHN1Y2Nlc3MuCiAgKi8KLWludCBzZWN1cml0eV9jb250ZXh0X3RvX3NpZF9kZWZhdWx0KGNoYXIgKnNjb250ZXh0LCB1MzIgc2NvbnRleHRfbGVuLCB1MzIgKnNpZCwgdTMyIGRlZl9zaWQpCitpbnQgc2VjdXJpdHlfY29udGV4dF90b19zaWRfZGVmYXVsdChjaGFyICpzY29udGV4dCwgdTMyIHNjb250ZXh0X2xlbiwgdTMyICpzaWQsCisJCQkJICAgIHUzMiBkZWZfc2lkLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJcmV0dXJuIHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkX2NvcmUoc2NvbnRleHQsIHNjb250ZXh0X2xlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQsIGRlZl9zaWQpOworCQkJCQkgICAgc2lkLCBkZWZfc2lkLCBnZnBfZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGNvbXB1dGVfc2lkX2hhbmRsZV9pbnZhbGlkX2NvbnRleHQoCkBAIC04OTYsMTUgKzkyNiwxNSBAQAogCiAJc2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNzaWQpOwogCWlmICghc2NvbnRleHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eV9jb21wdXRlX3NpZDogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCi0JCSAgICAgICBzc2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3NpZCk7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAl0Y29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgdHNpZCk7CiAJaWYgKCF0Y29udGV4dCkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5X2NvbXB1dGVfc2lkOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKLQkJICAgICAgIHRzaWQpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB0c2lkKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtOTQ0LDcgKzk3NCw3IEBACiAJYXZkYXR1bSA9IGF2dGFiX3NlYXJjaCgmcG9saWN5ZGIudGVfYXZ0YWIsICZhdmtleSk7CiAKIAkvKiBJZiBubyBwZXJtYW5lbnQgcnVsZSwgYWxzbyBjaGVjayBmb3IgZW5hYmxlZCBjb25kaXRpb25hbCBydWxlcyAqLwotCWlmKCFhdmRhdHVtKSB7CisJaWYgKCFhdmRhdHVtKSB7CiAJCW5vZGUgPSBhdnRhYl9zZWFyY2hfbm9kZSgmcG9saWN5ZGIudGVfY29uZF9hdnRhYiwgJmF2a2V5KTsKIAkJZm9yICg7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IGF2dGFiX3NlYXJjaF9ub2RlX25leHQobm9kZSwgc3BlY2lmaWVkKSkgewogCQkJaWYgKG5vZGUtPmtleS5zcGVjaWZpZWQgJiBBVlRBQl9FTkFCTEVEKSB7CkBAIC0xMDk0LDcgKzExMjQsNyBAQAogCQkJY29udGludWU7CiAJCWlmIChpID4gcC0+cF9jbGFzc2VzLm5wcmltKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgInNlY3VyaXR5OiAgY2xhc3MgJXMgbm90IGRlZmluZWQgaW4gcG9saWN5XG4iLAorCQkJICAgICAgICJTRUxpbnV4OiAgY2xhc3MgJXMgbm90IGRlZmluZWQgaW4gcG9saWN5XG4iLAogCQkJICAgICAgIGRlZl9jbGFzcyk7CiAJCQlpZiAocC0+cmVqZWN0X3Vua25vd24pCiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTA1LDcgKzExMzUsNyBAQAogCQlwb2xfY2xhc3MgPSBwLT5wX2NsYXNzX3ZhbF90b19uYW1lW2ktMV07CiAJCWlmIChzdHJjbXAocG9sX2NsYXNzLCBkZWZfY2xhc3MpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAic2VjdXJpdHk6ICBjbGFzcyAlZCBpcyBpbmNvcnJlY3QsIGZvdW5kICVzIGJ1dCBzaG91bGQgYmUgJXNcbiIsCisJCQkgICAgICAgIlNFTGludXg6ICBjbGFzcyAlZCBpcyBpbmNvcnJlY3QsIGZvdW5kICVzIGJ1dCBzaG91bGQgYmUgJXNcbiIsCiAJCQkgICAgICAgaSwgcG9sX2NsYXNzLCBkZWZfY2xhc3MpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTExMjMsNyArMTE1Myw3IEBACiAJCW5wcmltID0gMSA8PCAocGVybXMtPm5wcmltIC0gMSk7CiAJCWlmIChwZXJtX3ZhbCA+IG5wcmltKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgInNlY3VyaXR5OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZGVmaW5lZCBpbiBwb2xpY3lcbiIsCisJCQkgICAgICAgIlNFTGludXg6ICBwZXJtaXNzaW9uICVzIGluIGNsYXNzICVzIG5vdCBkZWZpbmVkIGluIHBvbGljeVxuIiwKIAkJCSAgICAgICBkZWZfcGVybSwgcG9sX2NsYXNzKTsKIAkJCWlmIChwLT5yZWplY3RfdW5rbm93bikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMzQsMTQgKzExNjQsMTQgQEAKIAkJcGVyZGF0dW0gPSBoYXNodGFiX3NlYXJjaChwZXJtcy0+dGFibGUsIGRlZl9wZXJtKTsKIAkJaWYgKHBlcmRhdHVtID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJzZWN1cml0eTogIHBlcm1pc3Npb24gJXMgaW4gY2xhc3MgJXMgbm90IGZvdW5kIGluIHBvbGljeSwgYmFkIHBvbGljeVxuIiwKKwkJCSAgICAgICAiU0VMaW51eDogIHBlcm1pc3Npb24gJXMgaW4gY2xhc3MgJXMgbm90IGZvdW5kIGluIHBvbGljeSwgYmFkIHBvbGljeVxuIiwKIAkJCSAgICAgICBkZWZfcGVybSwgcG9sX2NsYXNzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXBvbF92YWwgPSAxIDw8IChwZXJkYXR1bS0+dmFsdWUgLSAxKTsKIAkJaWYgKHBvbF92YWwgIT0gcGVybV92YWwpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJzZWN1cml0eTogIHBlcm1pc3Npb24gJXMgaW4gY2xhc3MgJXMgaGFzIGluY29ycmVjdCB2YWx1ZVxuIiwKKwkJCSAgICAgICAiU0VMaW51eDogIHBlcm1pc3Npb24gJXMgaW4gY2xhc3MgJXMgaGFzIGluY29ycmVjdCB2YWx1ZVxuIiwKIAkJCSAgICAgICBkZWZfcGVybSwgcG9sX2NsYXNzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xMTU1LDcgKzExODUsNyBAQAogCQlCVUdfT04oIWNsYWRhdHVtKTsKIAkJaWYgKCFjbGFkYXR1bS0+Y29tZGF0dW0pIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJzZWN1cml0eTogIGNsYXNzICVzIHNob3VsZCBoYXZlIGFuIGluaGVyaXRzIGNsYXVzZSBidXQgZG9lcyBub3RcbiIsCisJCQkgICAgICAgIlNFTGludXg6ICBjbGFzcyAlcyBzaG91bGQgaGF2ZSBhbiBpbmhlcml0cyBjbGF1c2UgYnV0IGRvZXMgbm90XG4iLAogCQkJICAgICAgIHBvbF9jbGFzcyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTE3MCw3ICsxMjAwLDcgQEAKIAkJCWRlZl9wZXJtID0ga2RlZnMtPmF2X2luaGVyaXRbaV0uY29tbW9uX3B0c1tqXTsKIAkJCWlmIChqID49IHBlcm1zLT5ucHJpbSkgewogCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgInNlY3VyaXR5OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZGVmaW5lZCBpbiBwb2xpY3lcbiIsCisJCQkJICAgICAgICJTRUxpbnV4OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZGVmaW5lZCBpbiBwb2xpY3lcbiIsCiAJCQkJICAgICAgIGRlZl9wZXJtLCBwb2xfY2xhc3MpOwogCQkJCWlmIChwLT5yZWplY3RfdW5rbm93bikKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTgxLDEzICsxMjExLDEzIEBACiAJCQlwZXJkYXR1bSA9IGhhc2h0YWJfc2VhcmNoKHBlcm1zLT50YWJsZSwgZGVmX3Blcm0pOwogCQkJaWYgKHBlcmRhdHVtID09IE5VTEwpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgInNlY3VyaXR5OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZm91bmQgaW4gcG9saWN5LCBiYWQgcG9saWN5XG4iLAorCQkJCSAgICAgICAiU0VMaW51eDogIHBlcm1pc3Npb24gJXMgaW4gY2xhc3MgJXMgbm90IGZvdW5kIGluIHBvbGljeSwgYmFkIHBvbGljeVxuIiwKIAkJCQkgICAgICAgZGVmX3Blcm0sIHBvbF9jbGFzcyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAocGVyZGF0dW0tPnZhbHVlICE9IGogKyAxKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJzZWN1cml0eTogIHBlcm1pc3Npb24gJXMgaW4gY2xhc3MgJXMgaGFzIGluY29ycmVjdCB2YWx1ZVxuIiwKKwkJCQkgICAgICAgIlNFTGludXg6ICBwZXJtaXNzaW9uICVzIGluIGNsYXNzICVzIGhhcyBpbmNvcnJlY3QgdmFsdWVcbiIsCiAJCQkJICAgICAgIGRlZl9wZXJtLCBwb2xfY2xhc3MpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQpAQCAtMTIxNyw3ICsxMjQ3LDcgQEAKIAkJdTMyIGxlbjsKIAogCQljb250ZXh0X3N0cnVjdF90b19zdHJpbmcoY29udGV4dCwgJnMsICZsZW4pOwotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiAgY29udGV4dCAlcyBpcyBpbnZhbGlkXG4iLCBzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgY29udGV4dCAlcyBpcyBpbnZhbGlkXG4iLCBzKTsKIAkJa2ZyZWUocyk7CiAJfQogCXJldHVybiByYzsKQEAgLTEyNTgsMjYgKzEyODgsMjMgQEAKIAogCS8qIENvbnZlcnQgdGhlIHVzZXIuICovCiAJdXNyZGF0dW0gPSBoYXNodGFiX3NlYXJjaChhcmdzLT5uZXdwLT5wX3VzZXJzLnRhYmxlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+b2xkcC0+cF91c2VyX3ZhbF90b19uYW1lW2MtPnVzZXIgLSAxXSk7Ci0JaWYgKCF1c3JkYXR1bSkgeworCQkJCSAgYXJncy0+b2xkcC0+cF91c2VyX3ZhbF90b19uYW1lW2MtPnVzZXIgLSAxXSk7CisJaWYgKCF1c3JkYXR1bSkKIAkJZ290byBiYWQ7Ci0JfQogCWMtPnVzZXIgPSB1c3JkYXR1bS0+dmFsdWU7CiAKIAkvKiBDb252ZXJ0IHRoZSByb2xlLiAqLwogCXJvbGUgPSBoYXNodGFiX3NlYXJjaChhcmdzLT5uZXdwLT5wX3JvbGVzLnRhYmxlLAotCSAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5vbGRwLT5wX3JvbGVfdmFsX3RvX25hbWVbYy0+cm9sZSAtIDFdKTsKLQlpZiAoIXJvbGUpIHsKKwkJCSAgICAgIGFyZ3MtPm9sZHAtPnBfcm9sZV92YWxfdG9fbmFtZVtjLT5yb2xlIC0gMV0pOworCWlmICghcm9sZSkKIAkJZ290byBiYWQ7Ci0JfQogCWMtPnJvbGUgPSByb2xlLT52YWx1ZTsKIAogCS8qIENvbnZlcnQgdGhlIHR5cGUuICovCiAJdHlwZGF0dW0gPSBoYXNodGFiX3NlYXJjaChhcmdzLT5uZXdwLT5wX3R5cGVzLnRhYmxlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+b2xkcC0+cF90eXBlX3ZhbF90b19uYW1lW2MtPnR5cGUgLSAxXSk7Ci0JaWYgKCF0eXBkYXR1bSkgeworCQkJCSAgYXJncy0+b2xkcC0+cF90eXBlX3ZhbF90b19uYW1lW2MtPnR5cGUgLSAxXSk7CisJaWYgKCF0eXBkYXR1bSkKIAkJZ290byBiYWQ7Ci0JfQogCWMtPnR5cGUgPSB0eXBkYXR1bS0+dmFsdWU7CiAKIAlyYyA9IG1sc19jb252ZXJ0X2NvbnRleHQoYXJncy0+b2xkcCwgYXJncy0+bmV3cCwgYyk7CkBAIC0xMjk3LDcgKzEzMjQsNyBAQAogYmFkOgogCWNvbnRleHRfc3RydWN0X3RvX3N0cmluZygmb2xkYywgJnMsICZsZW4pOwogCWNvbnRleHRfZGVzdHJveSgmb2xkYyk7Ci0JcHJpbnRrKEtFUk5fRVJSICJzZWN1cml0eTogIGludmFsaWRhdGluZyBjb250ZXh0ICVzXG4iLCBzKTsKKwlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICBpbnZhbGlkYXRpbmcgY29udGV4dCAlc1xuIiwgcyk7CiAJa2ZyZWUocyk7CiAJZ290byBvdXQ7CiB9CkBAIC0xMzA2LDYgKzEzMzMsOCBAQAogewogCXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIgPSBlYml0bWFwX2dldF9iaXQoJnBvbGljeWRiLnBvbGljeWNhcHMsCiAJCQkJCQkgIFBPTElDWURCX0NBUEFCSUxJVFlfTkVUUEVFUik7CisJc2VsaW51eF9wb2xpY3ljYXBfb3BlbnBlcm0gPSBlYml0bWFwX2dldF9iaXQoJnBvbGljeWRiLnBvbGljeWNhcHMsCisJCQkJCQkgIFBPTElDWURCX0NBUEFCSUxJVFlfT1BFTlBFUk0pOwogfQogCiBleHRlcm4gdm9pZCBzZWxpbnV4X2NvbXBsZXRlX2luaXQodm9pZCk7CkBAIC0xMzQ4LDcgKzEzNzcsNyBAQAogCQkvKiBWZXJpZnkgdGhhdCB0aGUga2VybmVsIGRlZmluZWQgY2xhc3NlcyBhcmUgY29ycmVjdC4gKi8KIAkJaWYgKHZhbGlkYXRlX2NsYXNzZXMoJnBvbGljeWRiKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgInNlY3VyaXR5OiAgdGhlIGRlZmluaXRpb24gb2YgYSBjbGFzcyBpcyBpbmNvcnJlY3RcbiIpOworCQkJICAgICAgICJTRUxpbnV4OiAgdGhlIGRlZmluaXRpb24gb2YgYSBjbGFzcyBpcyBpbmNvcnJlY3RcbiIpOwogCQkJTE9BRF9VTkxPQ0s7CiAJCQlzaWR0YWJfZGVzdHJveSgmc2lkdGFiKTsKIAkJCXBvbGljeWRiX2Rlc3Ryb3koJnBvbGljeWRiKTsKQEAgLTEzODIsMTQgKzE0MTEsMTQgQEAKIAkvKiBWZXJpZnkgdGhhdCB0aGUga2VybmVsIGRlZmluZWQgY2xhc3NlcyBhcmUgY29ycmVjdC4gKi8KIAlpZiAodmFsaWRhdGVfY2xhc3NlcygmbmV3cG9saWN5ZGIpKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgInNlY3VyaXR5OiAgdGhlIGRlZmluaXRpb24gb2YgYSBjbGFzcyBpcyBpbmNvcnJlY3RcbiIpOworCQkgICAgICAgIlNFTGludXg6ICB0aGUgZGVmaW5pdGlvbiBvZiBhIGNsYXNzIGlzIGluY29ycmVjdFxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBlcnI7CiAJfQogCiAJcmMgPSBzZWN1cml0eV9wcmVzZXJ2ZV9ib29scygmbmV3cG9saWN5ZGIpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5OiAgdW5hYmxlIHRvIHByZXNlcnZlIGJvb2xlYW5zXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAgdW5hYmxlIHRvIHByZXNlcnZlIGJvb2xlYW5zXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0xNDQxLDE3ICsxNDcwLDExIEBACiAKIC8qKgogICogc2VjdXJpdHlfcG9ydF9zaWQgLSBPYnRhaW4gdGhlIFNJRCBmb3IgYSBwb3J0LgotICogQGRvbWFpbjogY29tbXVuaWNhdGlvbiBkb21haW4gYWthIGFkZHJlc3MgZmFtaWx5Ci0gKiBAdHlwZTogc29ja2V0IHR5cGUKICAqIEBwcm90b2NvbDogcHJvdG9jb2wgbnVtYmVyCiAgKiBAcG9ydDogcG9ydCBudW1iZXIKICAqIEBvdXRfc2lkOiBzZWN1cml0eSBpZGVudGlmaWVyCiAgKi8KLWludCBzZWN1cml0eV9wb3J0X3NpZCh1MTYgZG9tYWluLAotCQkgICAgICB1MTYgdHlwZSwKLQkJICAgICAgdTggcHJvdG9jb2wsCi0JCSAgICAgIHUxNiBwb3J0LAotCQkgICAgICB1MzIgKm91dF9zaWQpCitpbnQgc2VjdXJpdHlfcG9ydF9zaWQodTggcHJvdG9jb2wsIHUxNiBwb3J0LCB1MzIgKm91dF9zaWQpCiB7CiAJc3RydWN0IG9jb250ZXh0ICpjOwogCWludCByYyA9IDA7CkBAIC0xNTMwLDggKzE1NTMsOCBAQAogewogCWludCBpLCBmYWlsID0gMDsKIAotCWZvcihpID0gMDsgaSA8IDQ7IGkrKykKLQkJaWYoYWRkcltpXSAhPSAoaW5wdXRbaV0gJiBtYXNrW2ldKSkgeworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWlmIChhZGRyW2ldICE9IChpbnB1dFtpXSAmIG1hc2tbaV0pKSB7CiAJCQlmYWlsID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjMwLDcgKzE2NTMsNyBAQAogICovCiAKIGludCBzZWN1cml0eV9nZXRfdXNlcl9zaWRzKHUzMiBmcm9tc2lkLAotCSAgICAgICAgICAgICAgICAgICBjaGFyICp1c2VybmFtZSwKKwkJCSAgIGNoYXIgKnVzZXJuYW1lLAogCQkJICAgdTMyICoqc2lkcywKIAkJCSAgIHUzMiAqbmVsKQogewpAQCAtMTc0MCw3ICsxNzYzLDcgQEAKICAqIHRyYW5zaXRpb24gU0lEcyBvciB0YXNrIFNJRHMuCiAgKi8KIGludCBzZWN1cml0eV9nZW5mc19zaWQoY29uc3QgY2hhciAqZnN0eXBlLAotCSAgICAgICAgICAgICAgIGNoYXIgKnBhdGgsCisJCSAgICAgICBjaGFyICpwYXRoLAogCQkgICAgICAgdTE2IHNjbGFzcywKIAkJICAgICAgIHUzMiAqc2lkKQogewpAQCAtMTg1NSw3ICsxODc4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0gICAgICAgKm5hbWVzID0ga2NhbGxvYygqbGVuLCBzaXplb2YoY2hhciopLCBHRlBfQVRPTUlDKTsKKyAgICAgICAqbmFtZXMgPSBrY2FsbG9jKCpsZW4sIHNpemVvZihjaGFyICopLCBHRlBfQVRPTUlDKTsKIAlpZiAoISpuYW1lcykKIAkJZ290byBlcnI7CiAKQEAgLTE4NjcsNyArMTg5MCw3IEBACiAJCXNpemVfdCBuYW1lX2xlbjsKIAkJKCp2YWx1ZXMpW2ldID0gcG9saWN5ZGIuYm9vbF92YWxfdG9fc3RydWN0W2ldLT5zdGF0ZTsKIAkJbmFtZV9sZW4gPSBzdHJsZW4ocG9saWN5ZGIucF9ib29sX3ZhbF90b19uYW1lW2ldKSArIDE7Ci0gICAgICAgICAgICAgICAoKm5hbWVzKVtpXSA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbmFtZV9sZW4sIEdGUF9BVE9NSUMpOworCSAgICAgICAoKm5hbWVzKVtpXSA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbmFtZV9sZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoISgqbmFtZXMpW2ldKQogCQkJZ290byBlcnI7CiAJCXN0cm5jcHkoKCpuYW1lcylbaV0sIHBvbGljeWRiLnBfYm9vbF92YWxfdG9fbmFtZVtpXSwgbmFtZV9sZW4pOwpAQCAtMTkxMiwxMSArMTkzNSwxMCBAQAogCQkJCWF1ZGl0X2dldF9sb2dpbnVpZChjdXJyZW50KSwKIAkJCQlhdWRpdF9nZXRfc2Vzc2lvbmlkKGN1cnJlbnQpKTsKIAkJfQotCQlpZiAodmFsdWVzW2ldKSB7CisJCWlmICh2YWx1ZXNbaV0pCiAJCQlwb2xpY3lkYi5ib29sX3ZhbF90b19zdHJ1Y3RbaV0tPnN0YXRlID0gMTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcG9saWN5ZGIuYm9vbF92YWxfdG9fc3RydWN0W2ldLT5zdGF0ZSA9IDA7Ci0JCX0KIAl9CiAKIAlmb3IgKGN1ciA9IHBvbGljeWRiLmNvbmRfbGlzdDsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCkgewpAQCAtMjAxMCwxNiArMjAzMiwxNiBAQAogCVBPTElDWV9SRExPQ0s7CiAJY29udGV4dDEgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNpZCk7CiAJaWYgKCFjb250ZXh0MSkgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5X3NpZF9tbHNfY29weTogIHVucmVjb2duaXplZCBTSUQgIgotCQkgICAgICAgIiVkXG4iLCBzaWQpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJCV9fZnVuY19fLCBzaWQpOwogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAljb250ZXh0MiA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgbWxzX3NpZCk7CiAJaWYgKCFjb250ZXh0MikgewotCQlwcmludGsoS0VSTl9FUlIgInNlY3VyaXR5X3NpZF9tbHNfY29weTogIHVucmVjb2duaXplZCBTSUQgIgotCQkgICAgICAgIiVkXG4iLCBtbHNfc2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCQlfX2Z1bmNfXywgbWxzX3NpZCk7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KQEAgLTIxMTAsMTcgKzIxMzIsMTUgQEAKIAogCW5sYmxfY3R4ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCBubGJsX3NpZCk7CiAJaWYgKCFubGJsX2N0eCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJzZWN1cml0eV9zaWRfbWxzX2NtcDogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCi0JCSAgICAgICBubGJsX3NpZCk7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgU0lEICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIG5sYmxfc2lkKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9zbG93cGF0aDsKIAl9CiAJeGZybV9jdHggPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHhmcm1fc2lkKTsKIAlpZiAoIXhmcm1fY3R4KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgInNlY3VyaXR5X3NpZF9tbHNfY21wOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKLQkJICAgICAgIHhmcm1fc2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgeGZybV9zaWQpOwogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3Nsb3dwYXRoOwogCX0KQEAgLTIyMDAsOCArMjIyMCw4IEBACiAKIAltYXRjaCA9IGhhc2h0YWJfc2VhcmNoKHBvbGljeWRiLnBfY2xhc3Nlcy50YWJsZSwgY2xhc3MpOwogCWlmICghbWF0Y2gpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogIHVucmVjb2duaXplZCBjbGFzcyAlc1xuIiwKLQkJCV9fRlVOQ1RJT05fXywgY2xhc3MpOworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIGNsYXNzICVzXG4iLAorCQkJX19mdW5jX18sIGNsYXNzKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMjcxLDIxICsyMjkxLDIzIEBACiAJc3RydWN0IGNvbnRleHQgYXVfY3R4dDsKIH07CiAKLXZvaWQgc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUoc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSkKK3ZvaWQgc2VsaW51eF9hdWRpdF9ydWxlX2ZyZWUodm9pZCAqdnJ1bGUpCiB7CisJc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqcnVsZSA9IHZydWxlOworCiAJaWYgKHJ1bGUpIHsKIAkJY29udGV4dF9kZXN0cm95KCZydWxlLT5hdV9jdHh0KTsKIAkJa2ZyZWUocnVsZSk7CiAJfQogfQogCi1pbnQgc2VsaW51eF9hdWRpdF9ydWxlX2luaXQodTMyIGZpZWxkLCB1MzIgb3AsIGNoYXIgKnJ1bGVzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbGludXhfYXVkaXRfcnVsZSAqKnJ1bGUpCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX2luaXQodTMyIGZpZWxkLCB1MzIgb3AsIGNoYXIgKnJ1bGVzdHIsIHZvaWQgKip2cnVsZSkKIHsKIAlzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICp0bXBydWxlOwogCXN0cnVjdCByb2xlX2RhdHVtICpyb2xlZGF0dW07CiAJc3RydWN0IHR5cGVfZGF0dW0gKnR5cGVkYXR1bTsKIAlzdHJ1Y3QgdXNlcl9kYXR1bSAqdXNlcmRhdHVtOworCXN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKipydWxlID0gKHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKiopdnJ1bGU7CiAJaW50IHJjID0gMDsKIAogCSpydWxlID0gTlVMTDsKQEAgLTIzNzIsMTcgKzIzOTQsNDIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2godTMyIHNpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWxpbnV4X2F1ZGl0X3J1bGUgKnJ1bGUsCisvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJ1bGUgY29udGFpbnMgYW55IHNlbGludXggZmllbGRzICovCitpbnQgc2VsaW51eF9hdWRpdF9ydWxlX2tub3duKHN0cnVjdCBhdWRpdF9rcnVsZSAqcnVsZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBydWxlLT5maWVsZF9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBhdWRpdF9maWVsZCAqZiA9ICZydWxlLT5maWVsZHNbaV07CisJCXN3aXRjaCAoZi0+dHlwZSkgeworCQljYXNlIEFVRElUX1NVQkpfVVNFUjoKKwkJY2FzZSBBVURJVF9TVUJKX1JPTEU6CisJCWNhc2UgQVVESVRfU1VCSl9UWVBFOgorCQljYXNlIEFVRElUX1NVQkpfU0VOOgorCQljYXNlIEFVRElUX1NVQkpfQ0xSOgorCQljYXNlIEFVRElUX09CSl9VU0VSOgorCQljYXNlIEFVRElUX09CSl9ST0xFOgorCQljYXNlIEFVRElUX09CSl9UWVBFOgorCQljYXNlIEFVRElUX09CSl9MRVZfTE9XOgorCQljYXNlIEFVRElUX09CSl9MRVZfSElHSDoKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2godTMyIHNpZCwgdTMyIGZpZWxkLCB1MzIgb3AsIHZvaWQgKnZydWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYWN0eCkKIHsKIAlzdHJ1Y3QgY29udGV4dCAqY3R4dDsKIAlzdHJ1Y3QgbWxzX2xldmVsICpsZXZlbDsKKwlzdHJ1Y3Qgc2VsaW51eF9hdWRpdF9ydWxlICpydWxlID0gdnJ1bGU7CiAJaW50IG1hdGNoID0gMDsKIAogCWlmICghcnVsZSkgewogCQlhdWRpdF9sb2coYWN0eCwgR0ZQX0FUT01JQywgQVVESVRfU0VMSU5VWF9FUlIsCi0JCSAgICAgICAgICAic2VsaW51eF9hdWRpdF9ydWxlX21hdGNoOiBtaXNzaW5nIHJ1bGVcbiIpOworCQkJICAic2VsaW51eF9hdWRpdF9ydWxlX21hdGNoOiBtaXNzaW5nIHJ1bGVcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTIzOTAsNyArMjQzNyw3IEBACiAKIAlpZiAocnVsZS0+YXVfc2Vxbm8gPCBsYXRlc3RfZ3JhbnRpbmcpIHsKIAkJYXVkaXRfbG9nKGFjdHgsIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSLAotCQkgICAgICAgICAgInNlbGludXhfYXVkaXRfcnVsZV9tYXRjaDogc3RhbGUgcnVsZVxuIik7CisJCQkgICJzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2g6IHN0YWxlIHJ1bGVcbiIpOwogCQltYXRjaCA9IC1FU1RBTEU7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIzOTgsOCArMjQ0NSw4IEBACiAJY3R4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgc2lkKTsKIAlpZiAoIWN0eHQpIHsKIAkJYXVkaXRfbG9nKGFjdHgsIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSLAotCQkgICAgICAgICAgInNlbGludXhfYXVkaXRfcnVsZV9tYXRjaDogdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKLQkJICAgICAgICAgIHNpZCk7CisJCQkgICJzZWxpbnV4X2F1ZGl0X3J1bGVfbWF0Y2g6IHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCQkgIHNpZCk7CiAJCW1hdGNoID0gLUVOT0VOVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjQ0NSwzNiArMjQ5MiwzNiBAQAogCWNhc2UgQVVESVRfT0JKX0xFVl9MT1c6CiAJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6CiAJCWxldmVsID0gKChmaWVsZCA9PSBBVURJVF9TVUJKX1NFTiB8fAotCQkgICAgICAgICAgZmllbGQgPT0gQVVESVRfT0JKX0xFVl9MT1cpID8KLQkJICAgICAgICAgJmN0eHQtPnJhbmdlLmxldmVsWzBdIDogJmN0eHQtPnJhbmdlLmxldmVsWzFdKTsKKwkJCSAgZmllbGQgPT0gQVVESVRfT0JKX0xFVl9MT1cpID8KKwkJCSAmY3R4dC0+cmFuZ2UubGV2ZWxbMF0gOiAmY3R4dC0+cmFuZ2UubGV2ZWxbMV0pOwogCQlzd2l0Y2ggKG9wKSB7CiAJCWNhc2UgQVVESVRfRVFVQUw6CiAJCQltYXRjaCA9IG1sc19sZXZlbF9lcSgmcnVsZS0+YXVfY3R4dC5yYW5nZS5sZXZlbFswXSwKLQkJCSAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKwkJCQkJICAgICBsZXZlbCk7CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9OT1RfRVFVQUw6CiAJCQltYXRjaCA9ICFtbHNfbGV2ZWxfZXEoJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCQkJCQkgICAgICBsZXZlbCk7CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9MRVNTX1RIQU46CiAJCQltYXRjaCA9IChtbHNfbGV2ZWxfZG9tKCZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdLAotCQkJICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCkgJiYKLQkJCSAgICAgICAgICFtbHNfbGV2ZWxfZXEoJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKSk7CisJCQkJCSAgICAgICBsZXZlbCkgJiYKKwkJCQkgIW1sc19sZXZlbF9lcSgmcnVsZS0+YXVfY3R4dC5yYW5nZS5sZXZlbFswXSwKKwkJCQkJICAgICAgIGxldmVsKSk7CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9MRVNTX1RIQU5fT1JfRVFVQUw6CiAJCQltYXRjaCA9IG1sc19sZXZlbF9kb20oJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworCQkJCQkgICAgICBsZXZlbCk7CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9HUkVBVEVSX1RIQU46CiAJCQltYXRjaCA9IChtbHNfbGV2ZWxfZG9tKGxldmVsLAotCQkJICAgICAgICAgICAgICAgICAgICAgICZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdKSAmJgotCQkJICAgICAgICAgIW1sc19sZXZlbF9lcShsZXZlbCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0pKTsKKwkJCQkJICAgICAgJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0pICYmCisJCQkJICFtbHNfbGV2ZWxfZXEobGV2ZWwsCisJCQkJCSAgICAgICAmcnVsZS0+YXVfY3R4dC5yYW5nZS5sZXZlbFswXSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfR1JFQVRFUl9USEFOX09SX0VRVUFMOgogCQkJbWF0Y2ggPSBtbHNfbGV2ZWxfZG9tKGxldmVsLAotCQkJICAgICAgICAgICAgICAgICAgICAgICZydWxlLT5hdV9jdHh0LnJhbmdlLmxldmVsWzBdKTsKKwkJCQkJICAgICAgJnJ1bGUtPmF1X2N0eHQucmFuZ2UubGV2ZWxbMF0pOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yNDg0LDcgKzI1MzEsNyBAQAogCXJldHVybiBtYXRjaDsKIH0KIAotc3RhdGljIGludCAoKmF1cnVsZV9jYWxsYmFjaykodm9pZCkgPSBOVUxMOworc3RhdGljIGludCAoKmF1cnVsZV9jYWxsYmFjaykodm9pZCkgPSBhdWRpdF91cGRhdGVfbHNtX3J1bGVzOwogCiBzdGF0aWMgaW50IGF1cnVsZV9hdmNfY2FsbGJhY2sodTMyIGV2ZW50LCB1MzIgc3NpZCwgdTMyIHRzaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNsYXNzLCB1MzIgcGVybXMsIHUzMiAqcmV0YWluZWQpCkBAIC0yNTAxLDcgKzI1NDgsNyBAQAogCWludCBlcnI7CiAKIAllcnIgPSBhdmNfYWRkX2NhbGxiYWNrKGF1cnVsZV9hdmNfY2FsbGJhY2ssIEFWQ19DQUxMQkFDS19SRVNFVCwKLQkgICAgICAgICAgICAgICAgICAgICAgIFNFQ1NJRF9OVUxMLCBTRUNTSURfTlVMTCwgU0VDQ0xBU1NfTlVMTCwgMCk7CisJCQkgICAgICAgU0VDU0lEX05VTEwsIFNFQ1NJRF9OVUxMLCBTRUNDTEFTU19OVUxMLCAwKTsKIAlpZiAoZXJyKQogCQlwYW5pYygiYXZjX2FkZF9jYWxsYmFjaygpIGZhaWxlZCwgZXJyb3IgJWRcbiIsIGVycik7CiAKQEAgLTI1MDksMTEgKzI1NTYsNiBAQAogfQogX19pbml0Y2FsbChhdXJ1bGVfaW5pdCk7CiAKLXZvaWQgc2VsaW51eF9hdWRpdF9zZXRfY2FsbGJhY2soaW50ICgqY2FsbGJhY2spKHZvaWQpKQotewotCWF1cnVsZV9jYWxsYmFjayA9IGNhbGxiYWNrOwotfQotCiAjaWZkZWYgQ09ORklHX05FVExBQkVMCiAvKioKICAqIHNlY3VyaXR5X25ldGxibF9jYWNoZV9hZGQgLSBBZGQgYW4gZW50cnkgdG8gdGhlIE5ldExhYmVsIGNhY2hlCkBAIC0yNjQ5LDcgKzI2OTEsNyBAQAogCQlnb3RvIG5ldGxibF9zaWRfdG9fc2VjYXR0cl9mYWlsdXJlOwogCXNlY2F0dHItPmRvbWFpbiA9IGtzdHJkdXAocG9saWN5ZGIucF90eXBlX3ZhbF90b19uYW1lW2N0eC0+dHlwZSAtIDFdLAogCQkJCSAgR0ZQX0FUT01JQyk7Ci0Jc2VjYXR0ci0+ZmxhZ3MgfD0gTkVUTEJMX1NFQ0FUVFJfRE9NQUlOOworCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX0RPTUFJTl9DUFk7CiAJbWxzX2V4cG9ydF9uZXRsYmxfbHZsKGN0eCwgc2VjYXR0cik7CiAJcmMgPSBtbHNfZXhwb3J0X25ldGxibF9jYXQoY3R4LCBzZWNhdHRyKTsKIAlpZiAocmMgIT0gMCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jCmluZGV4IDUzYTU0YTcuLjRhNTE2ZmYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYwpAQCAtMTU2LDEyICsxNTYsMTAgQEAKIAkJd2hpbGUgKGN1ciAhPSBOVUxMKSB7CiAJCQlyZXQgPSBhcHBseShjdXItPnNpZCwgJmN1ci0+Y29udGV4dCwgYXJncyk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJaWYgKGxhc3QpIHsKKwkJCQlpZiAobGFzdCkKIAkJCQkJbGFzdC0+bmV4dCA9IGN1ci0+bmV4dDsKLQkJCQl9IGVsc2UgeworCQkJCWVsc2UKIAkJCQkJcy0+aHRhYmxlW2ldID0gY3VyLT5uZXh0OwotCQkJCX0KLQogCQkJCXRlbXAgPSBjdXI7CiAJCQkJY3VyID0gY3VyLT5uZXh0OwogCQkJCWNvbnRleHRfZGVzdHJveSgmdGVtcC0+Y29udGV4dCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCmluZGV4IDdlMTU4MjAuLjhmMTdmNTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImF2Yy5oIgpAQCAtNzcsMjAgKzc2LDE4IEBACiAgKiBMU00gaG9vayBpbXBsZW1lbnRhdGlvbiB0aGF0IGF1dGhvcml6ZXMgdGhhdCBhIGZsb3cgY2FuIHVzZQogICogYSB4ZnJtIHBvbGljeSBydWxlLgogICovCi1pbnQgc2VsaW51eF94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgdTMyIGZsX3NlY2lkLCB1OCBkaXIpCitpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9sb29rdXAoc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4LCB1MzIgZmxfc2VjaWQsIHU4IGRpcikKIHsKIAlpbnQgcmM7CiAJdTMyIHNlbF9zaWQ7Ci0Jc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4OwogCiAJLyogQ29udGV4dCBzaWQgaXMgZWl0aGVyIHNldCB0byBsYWJlbCBvciBBTllfQVNTT0MgKi8KLQlpZiAoKGN0eCA9IHhwLT5zZWN1cml0eSkpIHsKKwlpZiAoY3R4KSB7CiAJCWlmICghc2VsaW51eF9hdXRob3JpemFibGVfY3R4KGN0eCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlzZWxfc2lkID0gY3R4LT5jdHhfc2lkOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCS8qCiAJCSAqIEFsbCBmbG93cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBwb2xtYXRjaCdpbmcgYW4KIAkJICogb3RoZXJ3aXNlIGFwcGxpY2FibGUgIm5vbi1sYWJlbGVkIiBwb2xpY3kuIFRoaXMKQEAgLTEwMyw3ICsxMDAsNyBAQAogCQkJICBOVUxMKTsKIAogCWlmIChyYyA9PSAtRUFDQ0VTKQotCQlyYyA9IC1FU1JDSDsKKwkJcmV0dXJuIC1FU1JDSDsKIAogCXJldHVybiByYzsKIH0KQEAgLTE4Myw4ICsxODAsNyBAQAogCiAJCQkJCWlmICghY2thbGwpCiAJCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoKnNpZCAhPSBjdHgtPmN0eF9zaWQpCisJCQkJfSBlbHNlIGlmICgqc2lkICE9IGN0eC0+Y3R4X3NpZCkKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KQEAgLTI4NywxNSArMjgzLDE0IEBACiAgKiBMU00gaG9vayBpbXBsZW1lbnRhdGlvbiB0aGF0IGFsbG9jcyBhbmQgdHJhbnNmZXJzIHVjdHggc3BlYyB0bwogICogeGZybV9wb2xpY3kuCiAgKi8KLWludCBzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsCi0JCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqdWN0eCkKK2ludCBzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3NlY19jdHggKipjdHhwLAorCQkJICAgICAgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4KQogewogCWludCBlcnI7CiAKLQlCVUdfT04oIXhwKTsKIAlCVUdfT04oIXVjdHgpOwogCi0JZXJyID0gc2VsaW51eF94ZnJtX3NlY19jdHhfYWxsb2MoJnhwLT5zZWN1cml0eSwgdWN0eCwgMCk7CisJZXJyID0gc2VsaW51eF94ZnJtX3NlY19jdHhfYWxsb2MoY3R4cCwgdWN0eCwgMCk7CiAJaWYgKGVyciA9PSAwKQogCQlhdG9taWNfaW5jKCZzZWxpbnV4X3hmcm1fcmVmY291bnQpOwogCkBAIC0zMDcsNDMgKzMwMiwzOCBAQAogICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBjb3BpZXMgc2VjdXJpdHkgZGF0YSBzdHJ1Y3R1cmUgZnJvbSBvbGQgdG8KICAqIG5ldyBmb3IgcG9saWN5IGNsb25pbmcuCiAgKi8KLWludCBzZWxpbnV4X3hmcm1fcG9saWN5X2Nsb25lKHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldykKK2ludCBzZWxpbnV4X3hmcm1fcG9saWN5X2Nsb25lKHN0cnVjdCB4ZnJtX3NlY19jdHggKm9sZF9jdHgsCisJCQkgICAgICBzdHJ1Y3QgeGZybV9zZWNfY3R4ICoqbmV3X2N0eHApCiB7Ci0Jc3RydWN0IHhmcm1fc2VjX2N0eCAqb2xkX2N0eCwgKm5ld19jdHg7Ci0KLQlvbGRfY3R4ID0gb2xkLT5zZWN1cml0eTsKKwlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpuZXdfY3R4OwogCiAJaWYgKG9sZF9jdHgpIHsKLQkJbmV3X2N0eCA9IG5ldy0+c2VjdXJpdHkgPSBrbWFsbG9jKHNpemVvZigqbmV3X2N0eCkgKwotCQkJCQkJICBvbGRfY3R4LT5jdHhfbGVuLAotCQkJCQkJICBHRlBfS0VSTkVMKTsKLQorCQluZXdfY3R4ID0ga21hbGxvYyhzaXplb2YoKm9sZF9jdHgpICsgb2xkX2N0eC0+Y3R4X2xlbiwKKwkJCQkgIEdGUF9LRVJORUwpOwogCQlpZiAoIW5ld19jdHgpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQltZW1jcHkobmV3X2N0eCwgb2xkX2N0eCwgc2l6ZW9mKCpuZXdfY3R4KSk7CiAJCW1lbWNweShuZXdfY3R4LT5jdHhfc3RyLCBvbGRfY3R4LT5jdHhfc3RyLCBuZXdfY3R4LT5jdHhfbGVuKTsKKwkJKm5ld19jdHhwID0gbmV3X2N0eDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBMU00gaG9vayBpbXBsZW1lbnRhdGlvbiB0aGF0IGZyZWVzIHhmcm1fcG9saWN5IHNlY3VyaXR5IGluZm9ybWF0aW9uLgorICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBmcmVlcyB4ZnJtX3NlY19jdHggc2VjdXJpdHkgaW5mb3JtYXRpb24uCiAgKi8KLXZvaWQgc2VsaW51eF94ZnJtX3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCit2b2lkIHNlbGludXhfeGZybV9wb2xpY3lfZnJlZShzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgpCiB7Ci0Jc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geHAtPnNlY3VyaXR5OwotCWlmIChjdHgpCi0JCWtmcmVlKGN0eCk7CisJa2ZyZWUoY3R4KTsKIH0KIAogLyoKICAqIExTTSBob29rIGltcGxlbWVudGF0aW9uIHRoYXQgYXV0aG9yaXplcyBkZWxldGlvbiBvZiBsYWJlbGVkIHBvbGljaWVzLgogICovCi1pbnQgc2VsaW51eF94ZnJtX3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKK2ludCBzZWxpbnV4X3hmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgpCiB7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3VycmVudC0+c2VjdXJpdHk7Ci0Jc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geHAtPnNlY3VyaXR5OwogCWludCByYyA9IDA7CiAKIAlpZiAoY3R4KSB7CkBAIC0zODAsOCArMzcwLDcgQEAKIHZvaWQgc2VsaW51eF94ZnJtX3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CiAJc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geC0+c2VjdXJpdHk7Ci0JaWYgKGN0eCkKLQkJa2ZyZWUoY3R4KTsKKwlrZnJlZShjdHgpOwogfQogCiAgLyoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmggYi9zZWN1cml0eS9zbWFjay9zbWFjay5oCmluZGV4IGEyMWEwZTkuLjRhNDQ3N2YgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmgKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2suaApAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGFiZWwuaD4KIAogLyoKQEAgLTI2LDE0ICsyNyw2IEBACiAjZGVmaW5lIFNNS19NQVhMRU4JMjMKICNkZWZpbmUgU01LX0xBQkVMTEVOCShTTUtfTUFYTEVOKzEpCiAKLS8qCi0gKiBIb3cgbWFueSBraW5kcyBvZiBhY2Nlc3MgYXJlIHRoZXJlPwotICogSGVyZSdzIHlvdXIgYW5zd2VyLgotICovCi0jZGVmaW5lIFNNS19BQ0NFU1NEQVNICSctJwotI2RlZmluZSBTTUtfQUNDRVNTTE9XCSJyd3hhIgotI2RlZmluZSBTTUtfQUNDRVNTS0lORFMJKHNpemVvZihTTUtfQUNDRVNTTE9XKSAtIDEpCi0KIHN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrIHsKIAljaGFyCQkqc21rX3Jvb3Q7CiAJY2hhcgkJKnNta19mbG9vcjsKQEAgLTE5NSw2ICsxODgsNyBAQAogZXh0ZXJuIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl91bnNldDsKIAogZXh0ZXJuIHN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqc21hY2tfbGlzdDsKK2V4dGVybiBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyBzbWFja19vcHM7CiAKIC8qCiAgKiBTdHJpY2x5IGZvciBDSVBTTyBsZXZlbCBtYW5pcHVsYXRpb24uCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDJiNWQ2ZjcuLjkzZjViMGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0xODksMTcgKzE4OSwxMCBAQAogICogQ29weSB0aGUgU21hY2sgc3BlY2lmaWMgbW91bnQgb3B0aW9ucyBvdXQgb2YgdGhlIG1vdW50CiAgKiBvcHRpb25zIGxpc3QuCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfc2JfY29weV9kYXRhKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCB2b2lkICpvcmlnLAotCQkJICAgICAgdm9pZCAqc21hY2tvcHRzKQorc3RhdGljIGludCBzbWFja19zYl9jb3B5X2RhdGEoY2hhciAqb3JpZywgY2hhciAqc21hY2tvcHRzKQogewogCWNoYXIgKmNwLCAqY29tbWFwLCAqb3RoZXJvcHRzLCAqZHA7CiAKLQkvKiBCaW5hcnkgbW91bnQgZGF0YToganVzdCBjb3B5ICovCi0JaWYgKHR5cGUtPmZzX2ZsYWdzICYgRlNfQklOQVJZX01PVU5UREFUQSkgewotCQljb3B5X3BhZ2Uoc21hY2tvcHRzLCBvcmlnKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJb3RoZXJvcHRzID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKG90aGVyb3B0cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU4NCwxNCArNTc3LDIwIEBACiBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSwKIAkJCQl2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKLQlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpIHsKLQkJaWYgKHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NNQUNLKSA9PSAwIHx8Ci0JCSAgICBzdHJjbXAobmFtZSwgWEFUVFJfTkFNRV9TTUFDS0lQSU4pID09IDAgfHwKLQkJICAgIHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NNQUNLSVBPVVQpID09IDApCi0JCQlyZXR1cm4gLUVQRVJNOwotCX0KKwlpbnQgcmMgPSAwOwogCi0JcmV0dXJuIHNta19jdXJhY2Moc21rX29mX2lub2RlKGRlbnRyeS0+ZF9pbm9kZSksIE1BWV9XUklURSk7CisJaWYgKHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NNQUNLKSA9PSAwIHx8CisJICAgIHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NNQUNLSVBJTikgPT0gMCB8fAorCSAgICBzdHJjbXAobmFtZSwgWEFUVFJfTkFNRV9TTUFDS0lQT1VUKSA9PSAwKSB7CisJCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKKwkJCXJjID0gLUVQRVJNOworCX0gZWxzZQorCQlyYyA9IGNhcF9pbm9kZV9zZXR4YXR0cihkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CisKKwlpZiAocmMgPT0gMCkKKwkJcmMgPSBzbWtfY3VyYWNjKHNta19vZl9pbm9kZShkZW50cnktPmRfaW5vZGUpLCBNQVlfV1JJVEUpOworCisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTY1OCwxMCArNjU3LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lKQogewotCWlmIChzdHJjbXAobmFtZSwgWEFUVFJfTkFNRV9TTUFDSykgPT0gMCAmJiAhY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKKwlpbnQgcmMgPSAwOwogCi0JcmV0dXJuIHNta19jdXJhY2Moc21rX29mX2lub2RlKGRlbnRyeS0+ZF9pbm9kZSksIE1BWV9XUklURSk7CisJaWYgKHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NNQUNLKSA9PSAwIHx8CisJICAgIHN0cmNtcChuYW1lLCBYQVRUUl9OQU1FX1NNQUNLSVBJTikgPT0gMCB8fAorCSAgICBzdHJjbXAobmFtZSwgWEFUVFJfTkFNRV9TTUFDS0lQT1VUKSA9PSAwKSB7CisJCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKKwkJCXJjID0gLUVQRVJNOworCX0gZWxzZQorCQlyYyA9IGNhcF9pbm9kZV9yZW1vdmV4YXR0cihkZW50cnksIG5hbWUpOworCisJaWYgKHJjID09IDApCisJCXJjID0gc21rX2N1cmFjYyhzbWtfb2ZfaW5vZGUoZGVudHJ5LT5kX2lub2RlKSwgTUFZX1dSSVRFKTsKKworCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0xMDE2LDcgKzEwMjUsMTIgQEAKICAqLwogc3RhdGljIGludCBzbWFja190YXNrX3NldG5pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZSkKIHsKLQlyZXR1cm4gc21rX2N1cmFjYyhwLT5zZWN1cml0eSwgTUFZX1dSSVRFKTsKKwlpbnQgcmM7CisKKwlyYyA9IGNhcF90YXNrX3NldG5pY2UocCwgbmljZSk7CisJaWYgKHJjID09IDApCisJCXJjID0gc21rX2N1cmFjYyhwLT5zZWN1cml0eSwgTUFZX1dSSVRFKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMTAyOCw3ICsxMDQyLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgc21hY2tfdGFza19zZXRpb3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgaW9wcmlvKQogewotCXJldHVybiBzbWtfY3VyYWNjKHAtPnNlY3VyaXR5LCBNQVlfV1JJVEUpOworCWludCByYzsKKworCXJjID0gY2FwX3Rhc2tfc2V0aW9wcmlvKHAsIGlvcHJpbyk7CisJaWYgKHJjID09IDApCisJCXJjID0gc21rX2N1cmFjYyhwLT5zZWN1cml0eSwgTUFZX1dSSVRFKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMTA1Myw3ICsxMDcyLDEyIEBACiBzdGF0aWMgaW50IHNtYWNrX3Rhc2tfc2V0c2NoZWR1bGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHBvbGljeSwKIAkJCQkgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKmxwKQogewotCXJldHVybiBzbWtfY3VyYWNjKHAtPnNlY3VyaXR5LCBNQVlfV1JJVEUpOworCWludCByYzsKKworCXJjID0gY2FwX3Rhc2tfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgbHApOworCWlmIChyYyA9PSAwKQorCQlyYyA9IHNta19jdXJhY2MocC0+c2VjdXJpdHksIE1BWV9XUklURSk7CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTEyNTEsOSArMTI3NSw4IEBACiAKIAlzd2l0Y2ggKHNtYWNrX25ldF9ubHR5cGUpIHsKIAljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJbmxzcC0+ZG9tYWluID0gTlVMTDsKLQkJbmxzcC0+ZmxhZ3MgPSBORVRMQkxfU0VDQVRUUl9ET01BSU47Ci0JCW5sc3AtPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX01MU19MVkw7CisJCW5sc3AtPmRvbWFpbiA9IHNtYWNrOworCQlubHNwLT5mbGFncyA9IE5FVExCTF9TRUNBVFRSX0RPTUFJTiB8IE5FVExCTF9TRUNBVFRSX01MU19MVkw7CiAKIAkJcmMgPSBzbWFja190b19jaXBzbyhzbWFjaywgJmNpcHNvKTsKIAkJaWYgKHJjID09IDApIHsKQEAgLTEyODIsMTUgKzEzMDUsMTQgQEAKIHsKIAlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3A7CiAJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwotCWludCByYyA9IDA7CisJaW50IHJjOwogCiAJc3NwID0gc2stPnNrX3NlY3VyaXR5OwogCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOwogCXNtYWNrX3RvX3NlY2F0dHIoc3NwLT5zbWtfb3V0LCAmc2VjYXR0cik7Ci0JaWYgKHNlY2F0dHIuZmxhZ3MgIT0gTkVUTEJMX1NFQ0FUVFJfTk9ORSkKLQkJcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCAmc2VjYXR0cik7Ci0KKwlyYyA9IG5ldGxibF9zb2NrX3NldGF0dHIoc2ssICZzZWNhdHRyKTsKIAluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKKwogCXJldHVybiByYzsKIH0KIApAQCAtMTMxMyw2ICsxMzM1LDcgQEAKIAlzdHJ1Y3QgaW5vZGVfc21hY2sgKm5zcCA9IGlub2RlLT5pX3NlY3VyaXR5OwogCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcDsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCWludCByYyA9IDA7CiAKIAlpZiAodmFsdWUgPT0gTlVMTCB8fCBzaXplID4gU01LX0xBQkVMTEVOKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTEzNDEsNyArMTM2NCwxMCBAQAogCQlzc3AtPnNta19pbiA9IHNwOwogCWVsc2UgaWYgKHN0cmNtcChuYW1lLCBYQVRUUl9TTUFDS19JUE9VVCkgPT0gMCkgewogCQlzc3AtPnNta19vdXQgPSBzcDsKLQkJcmV0dXJuIHNtYWNrX25ldGxhYmVsKHNvY2stPnNrKTsKKwkJcmMgPSBzbWFja19uZXRsYWJlbChzb2NrLT5zayk7CisJCWlmIChyYyAhPSAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU21hY2s6IFwiJXNcIiBuZXRsYmwgZXJyb3IgJWQuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCAtcmMpOwogCX0gZWxzZQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTE0NzcsNyArMTUwMyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc21hY2tfc2htX3NobWN0bChzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHAsIGludCBjbWQpCiB7Ci0JY2hhciAqc3NwID0gc21hY2tfb2Zfc2htKHNocCk7CisJY2hhciAqc3NwOwogCWludCBtYXk7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMTUwMSw2ICsxNTI3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJc3NwID0gc21hY2tfb2Zfc2htKHNocCk7CiAJcmV0dXJuIHNta19jdXJhY2Moc3NwLCBtYXkpOwogfQogCkBAIC0xNTg1LDcgKzE2MTIsNyBAQAogICovCiBzdGF0aWMgaW50IHNtYWNrX3NlbV9zZW1jdGwoc3RydWN0IHNlbV9hcnJheSAqc21hLCBpbnQgY21kKQogewotCWNoYXIgKnNzcCA9IHNtYWNrX29mX3NlbShzbWEpOworCWNoYXIgKnNzcDsKIAlpbnQgbWF5OwogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTE2MTQsNiArMTY0MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXNzcCA9IHNtYWNrX29mX3NlbShzbWEpOwogCXJldHVybiBzbWtfY3VyYWNjKHNzcCwgbWF5KTsKIH0KIApAQCAtMTY5OSw3ICsxNzI3LDcgQEAKICAqLwogc3RhdGljIGludCBzbWFja19tc2dfcXVldWVfbXNnY3RsKHN0cnVjdCBtc2dfcXVldWUgKm1zcSwgaW50IGNtZCkKIHsKLQljaGFyICptc3AgPSBzbWFja19vZl9tc3EobXNxKTsKKwljaGFyICptc3A7CiAJaW50IG1heTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC0xNzIxLDYgKzE3NDksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltc3AgPSBzbWFja19vZl9tc3EobXNxKTsKIAlyZXR1cm4gc21rX2N1cmFjYyhtc3AsIG1heSk7CiB9CiAKQEAgLTE3NzYsNiArMTgwNSwyNyBAQAogCXJldHVybiBzbWtfY3VyYWNjKGlzcCwgbWF5KTsKIH0KIAorLyogbW9kdWxlIHN0YWNraW5nIG9wZXJhdGlvbnMgKi8KKworLyoqCisgKiBzbWFja19yZWdpc3Rlcl9zZWN1cml0eSAtIHN0YWNrIGNhcGFiaWxpdHkgbW9kdWxlCisgKiBAbmFtZTogbW9kdWxlIG5hbWUKKyAqIEBvcHM6IG1vZHVsZSBvcGVyYXRpb25zIC0gaWdub3JlZAorICoKKyAqIEFsbG93IHRoZSBjYXBhYmlsaXR5IG1vZHVsZSB0byByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBzbWFja19yZWdpc3Rlcl9zZWN1cml0eShjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiY2FwYWJpbGl0eSIpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICBSZWdpc3RlcmluZyBzZWNvbmRhcnkgbW9kdWxlICVzXG4iLAorCSAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBzbWFja19kX2luc3RhbnRpYXRlIC0gTWFrZSBzdXJlIHRoZSBibG9iIGlzIGNvcnJlY3Qgb24gYW4gaW5vZGUKICAqIEBvcHRfZGVudHJ5OiB1bnVzZWQKQEAgLTIyMTQsNiArMjI2NCw5IEBACiAJc3NwLT5zbWtfcGFja2V0WzBdID0gJ1wwJzsKIAogCXJjID0gc21hY2tfbmV0bGFiZWwoc2spOworCWlmIChyYyAhPSAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJTbWFjazogXCIlc1wiIG5ldGxibCBlcnJvciAlZC5cbiIsCisJCSAgICAgICBfX2Z1bmNfXywgLXJjKTsKIH0KIAogLyoqCkBAIC0yMzQ2LDYgKzIzOTksMjAgQEAKIH0KIAogLyoKKyAqIHNtYWNrX3NlY2N0eF90b19zZWNpZCAtIHJldHVybiB0aGUgc2VjaWQgZm9yIGEgc21hY2sgbGFiZWwKKyAqIEBzZWNkYXRhOiBzbWFjayBsYWJlbAorICogQHNlY2xlbjogaG93IGxvbmcgcmVzdWx0IGlzCisgKiBAc2VjaWQ6IG91dGdvaW5nIGludGVnZXIKKyAqCisgKiBFeGlzdHMgZm9yIGF1ZGl0IGFuZCBuZXR3b3JraW5nIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgc21hY2tfc2VjY3R4X3RvX3NlY2lkKGNoYXIgKnNlY2RhdGEsIHUzMiBzZWNsZW4sIHUzMiAqc2VjaWQpCit7CisJKnNlY2lkID0gc21hY2tfdG9fc2VjaWQoc2VjZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBzbWFja19yZWxlYXNlX3NlY2N0eCAtIGRvbid0IGRvIGFueXRoaW5nLgogICogQGtleV9yZWY6IHVudXNlZAogICogQGNvbnRleHQ6IHVudXNlZApAQCAtMjM1Nyw3ICsyNDI0LDkgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIHNtYWNrX29wcyA9IHsKK3N0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIHNtYWNrX29wcyA9IHsKKwkubmFtZSA9CQkJCSJzbWFjayIsCisKIAkucHRyYWNlID0gCQkJc21hY2tfcHRyYWNlLAogCS5jYXBnZXQgPSAJCQljYXBfY2FwZ2V0LAogCS5jYXBzZXRfY2hlY2sgPSAJCWNhcF9jYXBzZXRfY2hlY2ssCkBAIC0yMzkzLDYgKzI0NjIsOCBAQAogCS5pbm9kZV9wb3N0X3NldHhhdHRyID0gCQlzbWFja19pbm9kZV9wb3N0X3NldHhhdHRyLAogCS5pbm9kZV9nZXR4YXR0ciA9IAkJc21hY2tfaW5vZGVfZ2V0eGF0dHIsCiAJLmlub2RlX3JlbW92ZXhhdHRyID0gCQlzbWFja19pbm9kZV9yZW1vdmV4YXR0ciwKKwkuaW5vZGVfbmVlZF9raWxscHJpdiA9CQljYXBfaW5vZGVfbmVlZF9raWxscHJpdiwKKwkuaW5vZGVfa2lsbHByaXYgPQkJY2FwX2lub2RlX2tpbGxwcml2LAogCS5pbm9kZV9nZXRzZWN1cml0eSA9IAkJc21hY2tfaW5vZGVfZ2V0c2VjdXJpdHksCiAJLmlub2RlX3NldHNlY3VyaXR5ID0gCQlzbWFja19pbm9kZV9zZXRzZWN1cml0eSwKIAkuaW5vZGVfbGlzdHNlY3VyaXR5ID0gCQlzbWFja19pbm9kZV9saXN0c2VjdXJpdHksCkBAIC0yNDUyLDYgKzI1MjMsOCBAQAogCS5uZXRsaW5rX3NlbmQgPQkJCWNhcF9uZXRsaW5rX3NlbmQsCiAJLm5ldGxpbmtfcmVjdiA9IAkJY2FwX25ldGxpbmtfcmVjdiwKIAorCS5yZWdpc3Rlcl9zZWN1cml0eSA9IAkJc21hY2tfcmVnaXN0ZXJfc2VjdXJpdHksCisKIAkuZF9pbnN0YW50aWF0ZSA9IAkJc21hY2tfZF9pbnN0YW50aWF0ZSwKIAogCS5nZXRwcm9jYXR0ciA9IAkJCXNtYWNrX2dldHByb2NhdHRyLApAQCAtMjQ3NSw2ICsyNTQ4LDcgQEAKIAkua2V5X3Blcm1pc3Npb24gPSAJCXNtYWNrX2tleV9wZXJtaXNzaW9uLAogI2VuZGlmIC8qIENPTkZJR19LRVlTICovCiAJLnNlY2lkX3RvX3NlY2N0eCA9IAkJc21hY2tfc2VjaWRfdG9fc2VjY3R4LAorCS5zZWNjdHhfdG9fc2VjaWQgPSAJCXNtYWNrX3NlY2N0eF90b19zZWNpZCwKIAkucmVsZWFzZV9zZWNjdHggPSAJCXNtYWNrX3JlbGVhc2Vfc2VjY3R4LAogfTsKIApAQCAtMjQ4NSw2ICsyNTU5LDkgQEAKICAqLwogc3RhdGljIF9faW5pdCBpbnQgc21hY2tfaW5pdCh2b2lkKQogeworCWlmICghc2VjdXJpdHlfbW9kdWxlX2VuYWJsZSgmc21hY2tfb3BzKSkKKwkJcmV0dXJuIDA7CisKIAlwcmludGsoS0VSTl9JTkZPICJTbWFjazogIEluaXRpYWxpemluZy5cbiIpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwppbmRleCAxNWFhMzdmLi42YmEyODM3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bmV0L2NpcHNvX2lwdjQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlICJzbWFjay5oIgogCiAvKgpAQCAtNDUsNiArNDYsNyBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNtYWNrX2xpc3RfbG9jayk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHNtYWNrX2NpcHNvX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChzbWFja19hbWJpZW50X2xvY2spOwogCiAvKgogICogVGhpcyBpcyB0aGUgImFtYmllbnQiIGxhYmVsIGZvciBuZXR3b3JrIHRyYWZmaWMuCkBAIC03MiwxNyArNzQsMjUgQEAKICNkZWZpbmUJU0VRX1JFQURfRklOSVNIRUQJMQogCiAvKgotICogRGlzYWJsZSBjb25jdXJyZW50IHdyaXRpbmcgb3BlbigpIG9wZXJhdGlvbnMKLSAqLwotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgc21hY2tfd3JpdGVfc2VtOwotCi0vKgogICogVmFsdWVzIGZvciBwYXJzaW5nIGNpcHNvIHJ1bGVzCiAgKiBTTUtfRElHSVRMRU46IExlbmd0aCBvZiBhIGRpZ2l0IGZpZWxkIGluIGEgcnVsZS4KLSAqIFNNS19DSVBTT01FTjogTWluaW11bSBwb3NzaWJsZSBjaXBzbyBydWxlIGxlbmd0aC4KKyAqIFNNS19DSVBTT01JTjogTWluaW11bSBwb3NzaWJsZSBjaXBzbyBydWxlIGxlbmd0aC4KKyAqIFNNS19DSVBTT01BWDogTWF4aW11bSBwb3NzaWJsZSBjaXBzbyBydWxlIGxlbmd0aC4KICAqLwogI2RlZmluZSBTTUtfRElHSVRMRU4gNAotI2RlZmluZSBTTUtfQ0lQU09NSU4gKFNNS19NQVhMRU4gKyAyICogU01LX0RJR0lUTEVOKQorI2RlZmluZSBTTUtfQ0lQU09NSU4gKFNNS19MQUJFTExFTiArIDIgKiBTTUtfRElHSVRMRU4pCisjZGVmaW5lIFNNS19DSVBTT01BWCAoU01LX0NJUFNPTUlOICsgU01BQ0tfQ0lQU09fTUFYQ0FUTlVNICogU01LX0RJR0lUTEVOKQorCisvKgorICogVmFsdWVzIGZvciBwYXJzaW5nIE1BQyBydWxlcworICogU01LX0FDQ0VTUzogTWF4aW11bSBwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiBhY2Nlc3MgcGVybWlzc2lvbnMKKyAqIFNNS19BQ0NFU1NMRU46IE1heGltdW0gbGVuZ3RoIGZvciBhIHJ1bGUgYWNjZXNzIGZpZWxkCisgKiBTTUtfTE9BRExFTjogU21hY2sgcnVsZSBsZW5ndGgKKyAqLworI2RlZmluZSBTTUtfQUNDRVNTICAgICJyd3hhIgorI2RlZmluZSBTTUtfQUNDRVNTTEVOIChzaXplb2YoU01LX0FDQ0VTUykgLSAxKQorI2RlZmluZSBTTUtfTE9BRExFTiAgIChTTUtfTEFCRUxMRU4gKyBTTUtfTEFCRUxMRU4gKyBTTUtfQUNDRVNTTEVOKQorCiAKIC8qCiAgKiBTZXFfZmlsZSByZWFkIG9wZXJhdGlvbnMgZm9yIC9zbWFjay9sb2FkCkBAIC0xNTMsMzIgKzE2Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc21rX29wZW5fbG9hZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKQotCQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmxvYWRfc2VxX29wcyk7Ci0KLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbWFja193cml0ZV9zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogc21rX3JlbGVhc2VfbG9hZCAtIHJlbGVhc2UoKSBmb3IgL3NtYWNrL2xvYWQKLSAqIEBpbm9kZTogaW5vZGUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBmaWxlCi0gKiBAZmlsZTogImxvYWQiIGZpbGUgcG9pbnRlcgotICoKLSAqIEZvciBhIHJlYWRpbmcgc2Vzc2lvbiwgdXNlIHRoZSBzZXFfZmlsZSByZWxlYXNlCi0gKiBpbXBsZW1lbnRhdGlvbi4KLSAqIE90aGVyd2lzZSwgd2UgYXJlIGF0IHRoZSBlbmQgb2YgYSB3cml0aW5nIHNlc3Npb24gc28KLSAqIGNsZWFuIGV2ZXJ5dGhpbmcgdXAuCi0gKi8KLXN0YXRpYyBpbnQgc21rX3JlbGVhc2VfbG9hZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKQotCQlyZXR1cm4gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwotCi0JdXAoJnNtYWNrX3dyaXRlX3NlbSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZsb2FkX3NlcV9vcHMpOwogfQogCiAvKioKQEAgLTIyNywxNCArMjEyLDEwIEBACiAgKiBUaGUgZm9ybWF0IGlzIGV4YWN0bHk6CiAgKiAgICAgY2hhciBzdWJqZWN0W1NNS19MQUJFTExFTl0KICAqICAgICBjaGFyIG9iamVjdFtTTUtfTEFCRUxMRU5dCi0gKiAgICAgY2hhciBhY2Nlc3NbU01LX0FDQ0VTU0tJTkRTXQorICogICAgIGNoYXIgYWNjZXNzW1NNS19BQ0NFU1NMRU5dCiAgKgotICogICAgIEFueXRoaW5nIGZvbGxvd2luZyBpcyBjb21tZW50YXJ5IGFuZCBpZ25vcmVkLgotICoKLSAqIHdyaXRlcyBtdXN0IGJlIFNNS19MQUJFTExFTitTTUtfTEFCRUxMRU4rNCBieXRlcy4KKyAqIHdyaXRlcyBtdXN0IGJlIFNNS19MQUJFTExFTitTTUtfTEFCRUxMRU4rU01LX0FDQ0VTU0xFTiBieXRlcy4KICAqLwotI2RlZmluZSBNSU5JTVVNX0xPQUQgKFNNS19MQUJFTExFTiArIFNNS19MQUJFTExFTiArIFNNS19BQ0NFU1NLSU5EUykKLQogc3RhdGljIHNzaXplX3Qgc21rX3dyaXRlX2xvYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTI1MSw3ICsyMzIsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCWlmICgqcHBvcyAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY291bnQgPCBNSU5JTVVNX0xPQUQpCisJaWYgKGNvdW50ICE9IFNNS19MT0FETEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEgPSBremFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKQEAgLTMzMCw3ICszMTEsNyBAQAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKIAkud3JpdGUJCT0gc21rX3dyaXRlX2xvYWQsCi0JLnJlbGVhc2UgICAgICAgID0gc21rX3JlbGVhc2VfbG9hZCwKKwkucmVsZWFzZSAgICAgICAgPSBzZXFfcmVsZWFzZSwKIH07CiAKIC8qKgpAQCAtMzQyLDYgKzMyMyw5IEBACiAJc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pcDsKIAlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKKwlhdWRpdF9pbmZvLmxvZ2ludWlkID0gYXVkaXRfZ2V0X2xvZ2ludWlkKGN1cnJlbnQpOworCWF1ZGl0X2luZm8uc2VjaWQgPSBzbWFja190b19zZWNpZChjdXJyZW50LT5zZWN1cml0eSk7CisKIAlyYyA9IG5ldGxibF9jZmdfbWFwX2RlbChOVUxMLCAmYXVkaXRfaW5mbyk7CiAJaWYgKHJjICE9IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiVkIHJlbW92ZSByYyA9ICVkXG4iLApAQCAtMzYzLDYgKzM0NywzMCBAQAogCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCByYyk7CiB9CiAKKy8qKgorICogc21rX3VubGJsX2FtYmllbnQgLSBpbml0aWFsaXplIHRoZSB1bmxhYmVsZWQgZG9tYWluCisgKi8KK3ZvaWQgc21rX3VubGJsX2FtYmllbnQoY2hhciAqb2xkYW1iaWVudCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IG5ldGxibF9hdWRpdCBhdWRpdF9pbmZvOworCisJYXVkaXRfaW5mby5sb2dpbnVpZCA9IGF1ZGl0X2dldF9sb2dpbnVpZChjdXJyZW50KTsKKwlhdWRpdF9pbmZvLnNlY2lkID0gc21hY2tfdG9fc2VjaWQoY3VycmVudC0+c2VjdXJpdHkpOworCisJaWYgKG9sZGFtYmllbnQgIT0gTlVMTCkgeworCQlyYyA9IG5ldGxibF9jZmdfbWFwX2RlbChvbGRhbWJpZW50LCAmYXVkaXRfaW5mbyk7CisJCWlmIChyYyAhPSAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6JWQgcmVtb3ZlIHJjID0gJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCByYyk7CisJfQorCisJcmMgPSBuZXRsYmxfY2ZnX3VubGJsX2FkZF9tYXAoc21hY2tfbmV0X2FtYmllbnQsICZhdWRpdF9pbmZvKTsKKwlpZiAocmMgIT0gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6JWQgYWRkIHJjID0gJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIHJjKTsKK30KKwogLyoKICAqIFNlcV9maWxlIHJlYWQgb3BlcmF0aW9ucyBmb3IgL3NtYWNrL2NpcHNvCiAgKi8KQEAgLTQ4NCw3ICs0OTIsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCWlmICgqcHBvcyAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY291bnQgPD0gU01LX0NJUFNPTUlOKQorCWlmIChjb3VudCA8IFNNS19DSVBTT01JTiB8fCBjb3VudCA+IFNNS19DSVBTT01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkYXRhID0ga3phbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwpAQCAtNTE4LDcgKzUyNiw3IEBACiAJaWYgKHJldCAhPSAxIHx8IGNhdGxlbiA+IFNNQUNLX0NJUFNPX01BWENBVE5VTSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoY291bnQgPD0gKFNNS19DSVBTT01JTiArIGNhdGxlbiAqIFNNS19ESUdJVExFTikpCisJaWYgKGNvdW50ICE9IChTTUtfQ0lQU09NSU4gKyBjYXRsZW4gKiBTTUtfRElHSVRMRU4pKQogCQlnb3RvIG91dDsKIAogCW1lbXNldChtYXBjYXRzZXQsIDAsIHNpemVvZihtYXBjYXRzZXQpKTsKQEAgLTcwOSw3ICs3MTcsNiBAQAogCQkJCXNpemVfdCBjbiwgbG9mZl90ICpwcG9zKQogewogCXNzaXplX3QgcmM7Ci0JY2hhciBvdXRbU01LX0xBQkVMTEVOXTsKIAlpbnQgYXNpemU7CiAKIAlpZiAoKnBwb3MgIT0gMCkKQEAgLTcxNywyMyArNzI0LDE4IEBACiAJLyoKIAkgKiBCZWluZyBjYXJlZnVsIHRvIGF2b2lkIGEgcHJvYmxlbSBpbiB0aGUgY2FzZSB3aGVyZQogCSAqIHNtYWNrX25ldF9hbWJpZW50IGdldHMgY2hhbmdlZCBpbiBtaWRzdHJlYW0uCi0JICogU2luY2Ugc21hY2tfbmV0X2FtYmllbnQgaXMgYWx3YXlzIHNldCB3aXRoIGEgdmFsdWUKLQkgKiBmcm9tIHRoZSBsYWJlbCBsaXN0LCBpbmNsdWRpbmcgaW5pdGlhbGx5LCBhbmQgdGhvc2UKLQkgKiBuZXZlciBnZXQgZnJlZWQsIHRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgdGhlIHBvaW50ZXIKLQkgKiBnZXRzIGNoYW5nZWQganVzdCBhZnRlciB0aGlzIHN0cm5jcHksIGluIHdoaWNoIGNhc2UKLQkgKiB0aGUgdmFsdWUgcGFzc2VkIHVwIGlzIGluY29ycmVjdC4gTG9ja2luZyBhcm91bmQKLQkgKiBzbWFja19uZXRfYW1iaWVudCB3b3VsZG4ndCBiZSBhbnkgYmV0dGVyIHRoYW4gdGhpcwotCSAqIGNvcHkgc2NoZW1lIGFzIGJ5IHRoZSB0aW1lIHRoZSBjYWxsZXIgZ290IHRvIGxvb2sKLQkgKiBhdCB0aGUgYW1iaWVudCB2YWx1ZSBpdCB3b3VsZCBoYXZlIGNsZWFyZWQgdGhlIGxvY2sKLQkgKiBhbmQgYmVlbiBjaGFuZ2VkLgogCSAqLwotCXN0cm5jcHkob3V0LCBzbWFja19uZXRfYW1iaWVudCwgU01LX0xBQkVMTEVOKTsKLQlhc2l6ZSA9IHN0cmxlbihvdXQpICsgMTsKKwltdXRleF9sb2NrKCZzbWFja19hbWJpZW50X2xvY2spOwogCi0JaWYgKGNuIDwgYXNpemUpCi0JCXJldHVybiAtRUlOVkFMOworCWFzaXplID0gc3RybGVuKHNtYWNrX25ldF9hbWJpZW50KSArIDE7CiAKLQlyYyA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY24sIHBwb3MsIG91dCwgYXNpemUpOworCWlmIChjbiA+PSBhc2l6ZSkKKwkJcmMgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNuLCBwcG9zLAorCQkJCQkgICAgIHNtYWNrX25ldF9hbWJpZW50LCBhc2l6ZSk7CisJZWxzZQorCQlyYyA9IC1FSU5WQUw7CisKKwltdXRleF91bmxvY2soJnNtYWNrX2FtYmllbnRfbG9jayk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC03NTEsNiArNzUzLDcgQEAKIAkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJY2hhciBpbltTTUtfTEFCRUxMRU5dOworCWNoYXIgKm9sZGFtYmllbnQ7CiAJY2hhciAqc21hY2s7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX01BQ19BRE1JTikpCkBAIC03NjYsNyArNzY5LDEzIEBACiAJaWYgKHNtYWNrID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmc21hY2tfYW1iaWVudF9sb2NrKTsKKworCW9sZGFtYmllbnQgPSBzbWFja19uZXRfYW1iaWVudDsKIAlzbWFja19uZXRfYW1iaWVudCA9IHNtYWNrOworCXNta191bmxibF9hbWJpZW50KG9sZGFtYmllbnQpOworCisJbXV0ZXhfdW5sb2NrKCZzbWFja19hbWJpZW50X2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtOTU2LDEyICs5NjUsMjEgQEAKICAqCiAgKiByZWdpc3RlciB0aGUgc21hY2tmcwogICoKLSAqIFJldHVybnMgMCB1bmxlc3MgdGhlIHJlZ2lzdHJhdGlvbiBmYWlscy4KKyAqIERvIG5vdCByZWdpc3RlciBzbWFja2ZzIGlmIFNtYWNrIHdhc24ndCBlbmFibGVkCisgKiBvbiBib290LiBXZSBjYW4gbm90IHB1dCB0aGlzIG1ldGhvZCBub3JtYWxseSB1bmRlciB0aGUKKyAqIHNtYWNrX2luaXQoKSBjb2RlIHBhdGggc2luY2UgdGhlIHNlY3VyaXR5IHN1YnN5c3RlbSBnZXQKKyAqIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgdmZzIGNhY2hlcy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgd2Ugd2VyZSBub3QgY2hvc2VuIG9uIGJvb3Qgb3IgaWYKKyAqIHdlIHdlcmUgY2hvc2VuIGFuZCBmaWxlc3lzdGVtIHJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGluaXRfc21rX2ZzKHZvaWQpCiB7CiAJaW50IGVycjsKIAorCWlmICghc2VjdXJpdHlfbW9kdWxlX2VuYWJsZSgmc21hY2tfb3BzKSkKKwkJcmV0dXJuIDA7CisKIAllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZzbWtfZnNfdHlwZSk7CiAJaWYgKCFlcnIpIHsKIAkJc21hY2tmc19tb3VudCA9IGtlcm5fbW91bnQoJnNta19mc190eXBlKTsKQEAgLTk3Miw4ICs5OTAsOCBAQAogCQl9CiAJfQogCi0Jc2VtYV9pbml0KCZzbWFja193cml0ZV9zZW0sIDEpOwogCXNta19jaXBzb19kb2koKTsKKwlzbWtfdW5sYmxfYW1iaWVudChOVUxMKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDVkODZlNjguLjg3MDRlMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXVkaW8uaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKQEAgLTM1LDYgKzM3LDEwIEBACiBzdGF0aWMgREVGSU5FX01VVEVYKGNhcl9tdXRleCk7CiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZ3NyX3dxKTsKIHN0YXRpYyB2b2xhdGlsZSBsb25nIGdzcl9iaXRzOworc3RhdGljIHN0cnVjdCBjbGsgKmFjOTdfY2xrOworI2lmZGVmIENPTkZJR19QWEEyN3gKK3N0YXRpYyBzdHJ1Y3QgY2xrICphYzk3Y29uZl9jbGs7CisjZW5kaWYKIAogLyoKICAqIEJld2FyZSBQWEEyN3ggYnVnczoKQEAgLTExMiw5ICsxMTgsOSBAQAogCWdzcl9iaXRzID0gMDsKICNpZmRlZiBDT05GSUdfUFhBMjd4CiAJLyogUFhBMjd4IERldmVsb3BlcnMgTWFudWFsIHNlY3Rpb24gMTMuNS4yLjIuMSAqLwotCXB4YV9zZXRfY2tlbihDS0VOX0FDOTdDT05GLCAxKTsKKwljbGtfZW5hYmxlKGFjOTdjb25mX2Nsayk7CiAJdWRlbGF5KDUpOwotCXB4YV9zZXRfY2tlbihDS0VOX0FDOTdDT05GLCAwKTsKKwljbGtfZGlzYWJsZShhYzk3Y29uZl9jbGspOwogCUdDUiA9IEdDUl9DT0xEX1JTVDsKIAl1ZGVsYXkoNTApOwogI2Vsc2UKQEAgLTI1OSw3ICsyNjUsNyBAQAogCWlmIChwbGF0Zm9ybV9vcHMgJiYgcGxhdGZvcm1fb3BzLT5zdXNwZW5kKQogCQlwbGF0Zm9ybV9vcHMtPnN1c3BlbmQocGxhdGZvcm1fb3BzLT5wcml2KTsKIAlHQ1IgfD0gR0NSX0FDTElOS19PRkY7Ci0JcHhhX3NldF9ja2VuKENLRU5fQUM5NywgMCk7CisJY2xrX2Rpc2FibGUoYWM5N19jbGspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjgsNyArMjc0LDcgQEAKIHsKIAlweGEyeHhfYXVkaW9fb3BzX3QgKnBsYXRmb3JtX29wcyA9IGNhcmQtPmRldi0+cGxhdGZvcm1fZGF0YTsKIAotCXB4YV9zZXRfY2tlbihDS0VOX0FDOTcsIDEpOworCWNsa19lbmFibGUoYWM5N19jbGspOwogCWlmIChwbGF0Zm9ybV9vcHMgJiYgcGxhdGZvcm1fb3BzLT5yZXN1bWUpCiAJCXBsYXRmb3JtX29wcy0+cmVzdW1lKHBsYXRmb3JtX29wcy0+cHJpdik7CiAJc25kX2FjOTdfcmVzdW1lKHB4YTJ4eF9hYzk3X2FjOTcpOwpAQCAtMzM1LDggKzM0MSwyMSBAQAogI2lmZGVmIENPTkZJR19QWEEyN3gKIAkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwogCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCWFjOTdjb25mX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQUM5N0NPTkZDTEsiKTsKKwlpZiAoSVNfRVJSKGFjOTdjb25mX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihhYzk3Y29uZl9jbGspOworCQlhYzk3Y29uZl9jbGsgPSBOVUxMOworCQlnb3RvIGVycjsKKwl9CiAjZW5kaWYKLQlweGFfc2V0X2NrZW4oQ0tFTl9BQzk3LCAxKTsKKworCWFjOTdfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJBQzk3Q0xLIik7CisJaWYgKElTX0VSUihhYzk3X2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihhYzk3X2Nsayk7CisJCWFjOTdfY2xrID0gTlVMTDsKKwkJZ290byBlcnI7CisJfQorCWNsa19lbmFibGUoYWM5N19jbGspOwogCiAJcmV0ID0gc25kX2FjOTdfYnVzKGNhcmQsIDAsICZweGEyeHhfYWM5N19vcHMsIE5VTEwsICZhYzk3X2J1cyk7CiAJaWYgKHJldCkKQEAgLTM2MSwxMSArMzgwLDE5IEBACiAgZXJyOgogCWlmIChjYXJkKQogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCWlmIChDS0VOICYgKDEgPDwgQ0tFTl9BQzk3KSkgeworCWlmIChhYzk3X2NsaykgewogCQlHQ1IgfD0gR0NSX0FDTElOS19PRkY7CiAJCWZyZWVfaXJxKElSUV9BQzk3LCBOVUxMKTsKLQkJcHhhX3NldF9ja2VuKENLRU5fQUM5NywgMCk7CisJCWNsa19kaXNhYmxlKGFjOTdfY2xrKTsKKwkJY2xrX3B1dChhYzk3X2Nsayk7CisJCWFjOTdfY2xrID0gTlVMTDsKIAl9CisjaWZkZWYgQ09ORklHX1BYQTI3eAorCWlmIChhYzk3Y29uZl9jbGspIHsKKwkJY2xrX3B1dChhYzk3Y29uZl9jbGspOworCQlhYzk3Y29uZl9jbGsgPSBOVUxMOworCX0KKyNlbmRpZgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3OCw3ICs0MDUsMTMgQEAKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAkJR0NSIHw9IEdDUl9BQ0xJTktfT0ZGOwogCQlmcmVlX2lycShJUlFfQUM5NywgTlVMTCk7Ci0JCXB4YV9zZXRfY2tlbihDS0VOX0FDOTcsIDApOworCQljbGtfZGlzYWJsZShhYzk3X2Nsayk7CisJCWNsa19wdXQoYWM5N19jbGspOworCQlhYzk3X2NsayA9IE5VTEw7CisjaWZkZWYgQ09ORklHX1BYQTI3eAorCQljbGtfcHV0KGFjOTdjb25mX2Nsayk7CisJCWFjOTdjb25mX2NsayA9IE5VTEw7CisjZW5kaWYKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCmluZGV4IGE3YmY3YTQuLmZiNjRjODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYwpAQCAtMjIsNiArMjIsMTAgQEAKICNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kX2ZtLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfU0VRVUVOQ0VSKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfU0VRVUVOQ0VSX01PRFVMRSkKKyNkZWZpbmUgT1BMM19TVVBQT1JUX1NZTlRICisjZW5kaWYKKwogLyoKICAqICAgIFRoZXJlIGlzIDE4IHBvc3NpYmxlIDIgT1Agdm9pY2VzCiAgKiAgICAgICg5IGluIHRoZSBsZWZ0IGFuZCA5IGluIHRoZSByaWdodCkuCkBAIC0xNTUsOSArMTU5LDExIEBACiAjZW5kaWYKIAkJcmV0dXJuIHNuZF9vcGwzX3NldF9jb25uZWN0aW9uKG9wbDMsIChpbnQpIGFyZyk7CiAKKyNpZmRlZiBPUEwzX1NVUFBPUlRfU1lOVEgKIAljYXNlIFNORFJWX0RNX0ZNX0lPQ1RMX0NMRUFSX1BBVENIRVM6CiAJCXNuZF9vcGwzX2NsZWFyX3BhdGNoZXMob3BsMyk7CiAJCXJldHVybiAwOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJZGVmYXVsdDoKQEAgLTE3OCw2ICsxODQsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgT1BMM19TVVBQT1JUX1NZTlRICiAvKgogICogd3JpdGUgdGhlIGRldmljZSAtIGxvYWQgcGF0Y2hlcwogICovCkBAIC0zNDEsNiArMzQ4LDcgQEAKIAl9CiAJbWVtc2V0KG9wbDMtPnBhdGNoX3RhYmxlLCAwLCBzaXplb2Yob3BsMy0+cGF0Y2hfdGFibGUpKTsKIH0KKyNlbmRpZiAvKiBPUEwzX1NVUFBPUlRfU1lOVEggKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jIGIvc291bmQvaXNhL3NiL3NiOF9tYWluLmMKaW5kZXggNjMwNGMzYS4uZmUwM2JiOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiOF9tYWluLmMKKysrIGIvc291bmQvaXNhL3NiL3NiOF9tYWluLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCX0gZWxzZSB7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuKTsKIAl9Ci0JaWYgKGNoaXAtPmNhcHR1cmVfZm9ybWF0ICE9IFNCX0RTUF9PVVRQVVQpIHsKKwlpZiAoY2hpcC0+Y2FwdHVyZV9mb3JtYXQgIT0gU0JfRFNQX0lOUFVUKSB7CiAJCWNvdW50LS07CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9CTE9DS19TSVpFKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgY291bnQgJiAweGZmKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMgYi9zb3VuZC9vc3MvYWM5N19jb2RlYy5jCmluZGV4IDg3YTY3MjYuLmI2MzgzOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvb3NzL2FjOTdfY29kZWMuYwpAQCAtMTIwMiwzICsxMjAyLDUgQEAKIAogRVhQT1JUX1NZTUJPTChhYzk3X3Byb2JlX2NvZGVjKTsKIAorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IGM5YTI0MjEuLjRlY2RkNjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC02ODEsMTUgKzY4MSwxMiBAQAogCiBzdGF0aWMgaW50IHNuZF9idDg3eF9mcmVlKHN0cnVjdCBzbmRfYnQ4N3ggKmNoaXApCiB7Ci0JaWYgKGNoaXAtPm1taW8pIHsKKwlpZiAoY2hpcC0+bW1pbykKIAkJc25kX2J0ODd4X3N0b3AoY2hpcCk7Ci0JCWlmIChjaGlwLT5pcnEgPj0gMCkKLQkJCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwotCi0JCWlvdW5tYXAoY2hpcC0+bW1pbyk7Ci0JfQogCWlmIChjaGlwLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwlpZiAoY2hpcC0+bW1pbykKKwkJaW91bm1hcChjaGlwLT5tbWlvKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAJa2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTY4LmMgYi9zb3VuZC9wY2kvZXMxOTY4LmMKaW5kZXggMjVjY2ZjZS4uN2Q5MTFhMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTk2OC5jCisrKyBiL3NvdW5kL3BjaS9lczE5NjguYwpAQCAtNjE3LDYgKzYxNywxOCBAQAogCXJldHVybiAxOyAvKiB0aW1lb3V0ICovCiB9CiAKK3N0YXRpYyBpbnQgc25kX2VzMTk2OF9hYzk3X3dhaXRfcG9sbChzdHJ1Y3QgZXMxOTY4ICpjaGlwKQoreworCWludCB0aW1lb3V0ID0gMTAwMDAwOworCisJd2hpbGUgKHRpbWVvdXQtLSA+IDApIHsKKwkJaWYgKCEoaW5iKGNoaXAtPmlvX3BvcnQgKyBFU01fQUM5N19JTkRFWCkgJiAxKSkKKwkJCXJldHVybiAwOworCX0KKwlzbmRfcHJpbnRkKCJlczE5Njg6IGFjOTcgdGltZW91dFxuIik7CisJcmV0dXJuIDE7IC8qIHRpbWVvdXQgKi8KK30KKwogc3RhdGljIHZvaWQgc25kX2VzMTk2OF9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCiB7CiAJc3RydWN0IGVzMTk2OCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKQEAgLTY0NSw3ICs2NTcsNyBAQAogCW91dGIocmVnIHwgMHg4MCwgY2hpcC0+aW9fcG9ydCArIEVTTV9BQzk3X0lOREVYKTsKIAkvKm1zbGVlcCgxKTsqLwogCi0JaWYgKCEgc25kX2VzMTk2OF9hYzk3X3dhaXQoY2hpcCkpIHsKKwlpZiAoIXNuZF9lczE5NjhfYWM5N193YWl0X3BvbGwoY2hpcCkpIHsKIAkJZGF0YSA9IGludyhjaGlwLT5pb19wb3J0ICsgRVNNX0FDOTdfREFUQSk7CiAJCS8qbXNsZWVwKDEpOyovCiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggMjY4MTJkYy4uMzdjNDEzOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC0xMDU1LDYgKzEwNTUsMTIgQEAKIAljb25zdCBjaGFyICoqczsKIAlpbnQgZXJyOwogCisJZm9yIChzID0gc2xhdmVzOyAqcyAmJiAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgKnMpOyBzKyspCisJCTsKKwlpZiAoISpzKSB7CisJCXNuZF9wcmludGRkKCJObyBzbGF2ZSBmb3VuZCBmb3IgJXNcbiIsIG5hbWUpOworCQlyZXR1cm4gMDsKKwl9CiAJa2N0bCA9IHNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcihuYW1lLCB0bHYpOwogCWlmICgha2N0bCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMTk3LDggKzEyMDMsOCBAQAogCXN0cnVjdCBoZGFfYmluZF9jdGxzICpjOwogCWludCBlcnI7CiAKLQljID0gKHN0cnVjdCBoZGFfYmluZF9jdGxzICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsgLyogcmV1c2Ugc3BkaWZfbXV0ZXggKi8KKwljID0gKHN0cnVjdCBoZGFfYmluZF9jdGxzICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPSAqYy0+dmFsdWVzOwogCWVyciA9IGMtPm9wcy0+aW5mbyhrY29udHJvbCwgdWluZm8pOwogCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gKGxvbmcpYzsKQEAgLTEyMTMsOCArMTIxOSw4IEBACiAJc3RydWN0IGhkYV9iaW5kX2N0bHMgKmM7CiAJaW50IGVycjsKIAotCWMgPSAoc3RydWN0IGhkYV9iaW5kX2N0bHMgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOyAvKiByZXVzZSBzcGRpZl9tdXRleCAqLworCWMgPSAoc3RydWN0IGhkYV9iaW5kX2N0bHMgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA9ICpjLT52YWx1ZXM7CiAJZXJyID0gYy0+b3BzLT5nZXQoa2NvbnRyb2wsIHVjb250cm9sKTsKIAlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA9IChsb25nKWM7CkBAIC0xMjMwLDggKzEyMzYsOCBAQAogCXVuc2lnbmVkIGxvbmcgKnZhbHM7CiAJaW50IGVyciA9IDAsIGNoYW5nZSA9IDA7CiAKLQljID0gKHN0cnVjdCBoZGFfYmluZF9jdGxzICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsgLyogcmV1c2Ugc3BkaWZfbXV0ZXggKi8KKwljID0gKHN0cnVjdCBoZGFfYmluZF9jdGxzICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJZm9yICh2YWxzID0gYy0+dmFsdWVzOyAqdmFsczsgdmFscysrKSB7CiAJCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gKnZhbHM7CiAJCWVyciA9IGMtPm9wcy0+cHV0KGtjb250cm9sLCB1Y29udHJvbCk7CkBAIC0xMjUxLDggKzEyNTcsOCBAQAogCXN0cnVjdCBoZGFfYmluZF9jdGxzICpjOwogCWludCBlcnI7CiAKLQljID0gKHN0cnVjdCBoZGFfYmluZF9jdGxzICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsgLyogcmV1c2Ugc3BkaWZfbXV0ZXggKi8KKwljID0gKHN0cnVjdCBoZGFfYmluZF9jdGxzICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPSAqYy0+dmFsdWVzOwogCWVyciA9IGMtPm9wcy0+dGx2KGtjb250cm9sLCBvcF9mbGFnLCBzaXplLCB0bHYpOwogCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gKGxvbmcpYzsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDU2ZjhhMzAuLjRiZTM2YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMjc1LDYgKzI3NSwxMSBAQAogI2RlZmluZSBOVklESUFfSERBX1RSQU5TUkVHX0FERFIgICAgICAweDRlCiAjZGVmaW5lIE5WSURJQV9IREFfRU5BQkxFX0NPSEJJVFMgICAgIDB4MGYKIAorLyogRGVmaW5lcyBmb3IgSW50ZWwgU0NIIEhEQSBzbm9vcCBjb250cm9sICovCisjZGVmaW5lIElOVEVMX1NDSF9IREFfREVWQyAgICAgIDB4NzgKKyNkZWZpbmUgSU5URUxfU0NIX0hEQV9ERVZDX05PU05PT1AgICAgICAgKDB4MTw8MTEpCisKKwogLyoKICAqLwogCkBAIC04NjgsNiArODczLDggQEAKIAogc3RhdGljIHZvaWQgYXp4X2luaXRfcGNpKHN0cnVjdCBhenggKmNoaXApCiB7CisJdW5zaWduZWQgc2hvcnQgc25vb3A7CisKIAkvKiBDbGVhciBiaXRzIDAtMiBvZiBQQ0kgcmVnaXN0ZXIgVENTRUwgKGF0IG9mZnNldCAweDQ0KQogCSAqIFRDU0VMID09IFRyYWZmaWMgQ2xhc3MgU2VsZWN0IFJlZ2lzdGVyLCB3aGljaCBzZXRzIFBDSSBleHByZXNzIFFPUwogCSAqIEVuc3VyaW5nIHRoZXNlIGJpdHMgYXJlIDAgY2xlYXJzIHBsYXliYWNrIHN0YXRpYyBvbiBzb21lIEhEIEF1ZGlvCkBAIC04ODgsNiArODk1LDE5IEBACiAJCQkJTlZJRElBX0hEQV9UUkFOU1JFR19BRERSLAogCQkJCTB4MGYsIE5WSURJQV9IREFfRU5BQkxFX0NPSEJJVFMpOwogCQlicmVhazsKKwljYXNlIEFaWF9EUklWRVJfU0NIOgorCQlwY2lfcmVhZF9jb25maWdfd29yZChjaGlwLT5wY2ksIElOVEVMX1NDSF9IREFfREVWQywgJnNub29wKTsKKwkJaWYgKHNub29wICYgSU5URUxfU0NIX0hEQV9ERVZDX05PU05PT1ApIHsKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIElOVEVMX1NDSF9IREFfREVWQywgXAorCQkJCXNub29wICYgKH5JTlRFTF9TQ0hfSERBX0RFVkNfTk9TTk9PUCkpOworCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoY2hpcC0+cGNpLAorCQkJCUlOVEVMX1NDSF9IREFfREVWQywgJnNub29wKTsKKwkJCXNuZF9wcmludGRkKCJIREEgc25vb3AgZGlzYWJsZWQsIGVuYWJsaW5nIC4uLiAlc1xuIixcCisJCQkJKHNub29wICYgSU5URUxfU0NIX0hEQV9ERVZDX05PU05PT1ApIFwKKwkJCQk/ICJGYWlsZWQiIDogIk9LIik7CisJCX0KKwkJYnJlYWs7CisKICAgICAgICAgfQogfQogCkBAIC0xMDQwLDYgKzEwNjAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGF6eF9tYXhfY29kZWNzW10gX19kZXZpbml0ZGF0YSA9IHsKIAlbQVpYX0RSSVZFUl9JQ0hdID0gMywKKwlbQVpYX0RSSVZFUl9TQ0hdID0gMywKIAlbQVpYX0RSSVZFUl9BVEldID0gNCwKIAlbQVpYX0RSSVZFUl9BVElIRE1JXSA9IDQsCiAJW0FaWF9EUklWRVJfVklBXSA9IDMsCQkvKiBGSVhNRTogY29ycmVjdD8gKi8KQEAgLTE3OTcsNyArMTgxOCw3IEBACiAJCSAqLwogCQljaGlwLT5wbGF5YmFja19zdHJlYW1zID0gKGdjYXAgJiAoMHhGIDw8IDEyKSkgPj4gMTI7CiAJCWNoaXAtPmNhcHR1cmVfc3RyZWFtcyA9IChnY2FwICYgKDB4RiA8PCA4KSkgPj4gODsKLQkJY2hpcC0+cGxheWJhY2tfaW5kZXhfb2Zmc2V0ID0gKGdjYXAgJiAoMHhGIDw8IDEyKSkgPj4gMTI7CisJCWNoaXAtPnBsYXliYWNrX2luZGV4X29mZnNldCA9IGNoaXAtPmNhcHR1cmVfc3RyZWFtczsKIAkJY2hpcC0+Y2FwdHVyZV9pbmRleF9vZmZzZXQgPSAwOwogCX0gZWxzZSB7CiAJCS8qIGdjYXAgZGlkbid0IGdpdmUgYW55IGluZm8sIHN3aXRjaGluZyB0byBvbGQgbWV0aG9kICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggMzVhNjMwZC4uNTYzM2Y3NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtNTg0LDcgKzU4NCw4IEBACiAJCQlwcmludF9hbXBfY2FwcyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9JTlBVVCk7CiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEFtcC1JbiB2YWxzOiAiKTsKIAkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX0lOUFVULAotCQkJCSAgICAgICB3aWRfY2FwcyAmIEFDX1dDQVBfU1RFUkVPLCBjb25uX2xlbik7CisJCQkJICAgICAgIHdpZF9jYXBzICYgQUNfV0NBUF9TVEVSRU8sCisJCQkJICAgICAgIHdpZF90eXBlID09IEFDX1dJRF9QSU4gPyAxIDogY29ubl9sZW4pOwogCQl9CiAJCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfT1VUX0FNUCkgewogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBBbXAtT3V0IGNhcHM6ICIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggMTlmMDg4NC4uYzg2NDkyOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0xNzc4LDkgKzE3NzgsOSBAQAogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4OF82c3RhY2tfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDUsCiAJLml0ZW1zID0gewotCQl7ICJGcm9udCBNaWMiLCAweDAgfSwKLQkJeyAiTGluZSIsIDB4MSB9LAotCQl7ICJNaWMiLCAweDQgfSwKKwkJeyAiRnJvbnQgTWljIiwgMHgxIH0sCS8qIHBvcnQtQiAqLworCQl7ICJMaW5lIiwgMHgyIH0sCS8qIHBvcnQtQyAqLworCQl7ICJNaWMiLCAweDQgfSwJCS8qIHBvcnQtRSAqLwogCQl7ICJDRCIsIDB4NSB9LAogCQl7ICJNaXgiLCAweDkgfSwKIAl9LApAQCAtMTc4OSw3ICsxNzg5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODhfbGFwdG9wX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAzLAogCS5pdGVtcyA9IHsKLQkJeyAiTWljL0xpbmUiLCAweDAgfSwKKwkJeyAiTWljL0xpbmUiLCAweDEgfSwJLyogcG9ydC1CICovCiAJCXsgIkNEIiwgMHg1IH0sCiAJCXsgIk1peCIsIDB4OSB9LAogCX0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggZjZkZDUxYy4uNzIwNmIzMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNDg4LDcgKzQ4OCw3IEBACiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNDVfZGFjX25pZHNbMV0gPSB7IDB4MTkgfTsKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0NV9hZGNfbmlkc1sxXSA9IHsgMHgxYSB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ1X2NhcHNyY19uaWRzWzFdID0geyAweDFhIH07Ci0jZGVmaW5lIENYVDUwNDVfU1BESUZfT1VUCTB4MTMKKyNkZWZpbmUgQ1hUNTA0NV9TUERJRl9PVVQJMHgxOAogCiBzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgY3h0NTA0NV9tb2Rlc1sxXSA9IHsKIAl7IDIsIE5VTEwgfSwKQEAgLTY1OCw2ICs2NTgsNyBAQAogCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCSBBQ19BTVBfU0VUX0lOUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MTd9LAogCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7IDB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAgfSwKIAkvKiBFQVBEICovCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDIgfSwgLyogZGVmYXVsdCBvbiAqLyAKQEAgLTY4Myw2ICs2ODQsNyBAQAogCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCSBBQ19BTVBfU0VUX0lOUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MTd9LAogCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCiAJLyogRUFQRCAqLwogCXsweDEwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLwpAQCAtNzgxLDcgKzc4Myw4IEBACiAJICogUENNIGZvcm1hdCwgY29weXJpZ2h0IGFzc2VydGVkLCBubyBwcmUtZW1waGFzaXMgYW5kIG5vIHZhbGlkaXR5CiAJICogY29udHJvbC4KIAkgKi8KLQl7MHgxMywgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIDB9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCiAKIAkvKiBTdGFydCB3aXRoIG91dHB1dCBzdW0gd2lkZ2V0cyBtdXRlZCBhbmQgdGhlaXIgb3V0cHV0IGdhaW5zIGF0IG1pbiAqLwogCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCkBAIC0xMjI3LDYgKzEyMzAsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0N19ocF9pbml0X3ZlcmJzW10gPSB7CiAJLyogcGluIHNlbnNpbmcgb24gSFAgamFjayAqLwogCXsweDEzLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAorCS8qIDB4MTMgaXMgYWN0dWFsbHkgc2hhcmVkIGJ5IGJvdGggSFAgYW5kIHNwZWFrZXI7CisJICogc2V0dGluZyB0aGUgY29ubmVjdGlvbiB0byAwICg9MHgxOSkgbWFrZXMgdGhlIG1hc3RlciB2b2x1bWUgY29udHJvbAorCSAqIHdvcmtpbmcgbXlzdGVyaW91c2xseS4uLgorCSAqLworCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKIAkvKiBSZWNvcmQgc2VsZWN0b3I6IEV4dCBNaWMgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDU4NmQ5OGYuLjMzMjgyZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0zOTczLDggKzM5NzMsOCBAQAogCUFMQ19QSU5fTU9ERSgiTWljL0xpbmUgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAogCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQklORF9NVVRFKCJJbnRlcm5hbCBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDksIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOSwgMiwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC00MDA1LDkgKzQwMDUsOSBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAogCUFMQ19QSU5fTU9ERSgiSGVhZHBob25lIEphY2sgTW9kZSIsIDB4MGYsIEFMQ19QSU5fRElSX0lOT1VUKSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIk1vbm8gU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBhLCAxLCAweDAsCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGEsIDEsIDB4MCwKIAkJCSAgICAgIEhEQV9PVVRQVVQpLAotCUhEQV9CSU5EX01VVEVfTU9OTygiTW9ubyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGEsIDEsIDIsCisJSERBX0JJTkRfTVVURV9NT05PKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGEsIDEsIDIsCiAJCQkgICBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCkBAIC01MjI3LDEwICs1MjI3LDE0IEBACiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSBzcGVjLT5pbnB1dF9tdXg7CiAJdW5zaWduZWQgaW50IGFkY19pZHggPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKIAlzdGF0aWMgaGRhX25pZF90IGNhcHR1cmVfbWl4ZXJzWzNdID0geyAweDI0LCAweDIzLCAweDIyIH07Ci0JaGRhX25pZF90IG5pZCA9IGNhcHR1cmVfbWl4ZXJzW2FkY19pZHhdOworCWhkYV9uaWRfdCBuaWQ7CiAJdW5zaWduZWQgaW50ICpjdXJfdmFsID0gJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF07CiAJdW5zaWduZWQgaW50IGksIGlkeDsKIAorCWlmIChzcGVjLT5udW1fYWRjX25pZHMgPCAzKQorCQluaWQgPSBjYXB0dXJlX21peGVyc1thZGNfaWR4ICsgMV07CisJZWxzZQorCQluaWQgPSBjYXB0dXJlX21peGVyc1thZGNfaWR4XTsKIAlpZHggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwogCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQogCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOwpAQCAtNjQ1Nyw3ICs2NDYxLDcgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9IHNwZWMtPmlucHV0X211eDsKIAl1bnNpZ25lZCBpbnQgYWRjX2lkeCA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOwotCXN0YXRpYyBoZGFfbmlkX3QgY2FwdHVyZV9taXhlcnNbM10gPSB7IDB4MjQsIDB4MjMsIDB4MjIgfTsKKwlzdGF0aWMgaGRhX25pZF90IGNhcHR1cmVfbWl4ZXJzWzJdID0geyAweDIzLCAweDIyIH07CiAJaGRhX25pZF90IG5pZCA9IGNhcHR1cmVfbWl4ZXJzW2FkY19pZHhdOwogCXVuc2lnbmVkIGludCAqY3VyX3ZhbCA9ICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdOwogCXVuc2lnbmVkIGludCBpLCBpZHg7CkBAIC03NjM1LDYgKzc2MzksNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZmMsICJMZW5vdm8gTkIwNzYzIiwgQUxDODgzX0xFTk9WT19OQjA3NjMpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZmQsICJMZW5vdm8gTkIwNzYzIiwgQUxDODgzX0xFTk9WT19OQjA3NjMpLAogCVNORF9QQ0lfUVVJUksoMHgxN2MwLCAweDQwNzEsICJNRURJT04gTUQyIiwgQUxDODgzX01FRElPTl9NRDIpLAorCVNORF9QQ0lfUVVJUksoMHgxN2YyLCAweDUwMDAsICJBbGJhdHJvbiBLSTY5MC1BTTIiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE5OTEsIDB4NTYyNSwgIkhhaWVyIFc2NiIsIEFMQzg4M19IQUlFUl9XNjYpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGQ2MDEsICJEMTAyR0dDIiwgQUxDODgzXzNTVF82Y2gpLAogCXt9CkBAIC04MDk4LDcgKzgxMDMsNyBAQAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQkgICBIREFfQ09ERUNfTVVURSgiUEMgQmVlbHAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwgKi8KKwkgICBIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLCAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDBELCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTgxMjAsNyArODEyNSw3IEBACiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJLyogSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCSAgIEhEQV9DT0RFQ19NVVRFKCJQQyBCZWVscCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLCAqLworCSAgIEhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksICovCiAJLypIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwRCwgMHgwLCBIREFfT1VUUFVUKSwqLwogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC05MjM0LDYgKzkyMzksNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMGUsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNSwgIlNvbnkgMHg5MDE1IiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxMzk3LCAiRnVqaXRzdSIsIEFMQzI2Ml9GVUpJVFNVKSwKKwlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDJkLCAiRnVqaXRzdSBMaWZlYm9vayBFODQxMCIsIEFMQzI2Ml9GVUpJVFNVKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDMyLCAiU2Ftc3VuZyBRMSBVbHRyYSIsIEFMQzI2Ml9VTFRSQSksCiAJU05EX1BDSV9RVUlSSygweDE3ZmYsIDB4MDU2MCwgIkJlbnEgRUQ4IiwgQUxDMjYyX0JFTlFfRUQ4KSwKIAlTTkRfUENJX1FVSVJLKDB4MTdmZiwgMHgwNThkLCAiQmVucSBUMzEtMTYiLCBBTEMyNjJfQkVOUV9UMzEpLApAQCAtMTI5ODksOCArMTI5OTUsOCBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9lZWVwY19wNzAxX21peGVyW10gPSB7CiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmVPdXQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTGluZU91dCBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtT3V0IFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUtT3V0IFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAKIAlIREFfQ09ERUNfVk9MVU1FKCJlLU1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiZS1NaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTMwMDMsOCArMTMwMDksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9lZWVwY19lcDIwX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiTGluZU91dCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJMaW5lT3V0IFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZS1PdXQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZS1PdXQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MDMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9waGFzZS5jCmluZGV4IDlhYjRhOWYuLjVhMTU4YjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcGhhc2UuYwpAQCAtNTEsNyArNTEsNyBAQAogc3RydWN0IHBoYXNlMjhfc3BlYyB7CiAJdW5zaWduZWQgc2hvcnQgbWFzdGVyWzJdOwogCXVuc2lnbmVkIHNob3J0IHZvbFs4XTsKLX0gcGhhc2UyODsKK307CiAKIC8qIFdNODc3MCByZWdpc3RlcnMgKi8KICNkZWZpbmUgV01fREFDX0FUVEVOCQkweDAwCS8qIERBQzEtOCBhbmFsb2cgYXR0ZW51YXRpb24gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3Jldm8uYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Jldm8uYwppbmRleCBkZGQ1ZmM4Li4zMDFiZjkyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9yZXZvLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcmV2by5jCkBAIC0zNiw3ICszNiw3IEBACiBzdHJ1Y3QgcmV2bzUxX3NwZWMgewogCXN0cnVjdCBzbmRfaTJjX2RldmljZSAqZGV2OwogCXN0cnVjdCBzbmRfcHQyMjU4ICpwdDIyNTg7Ci19IHJldm81MTsKK307CiAKIHN0YXRpYyB2b2lkIHJldm9faTJzX21jbGtfY2hhbmdlZChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggMDYxMDcyYy4uYzUyYWJkMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTE3MDgsNiArMTcwOCwxMiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBhYzk3X3F1aXJrIGFjOTdfcXVpcmtzW10gX19kZXZpbml0ZGF0YSA9IHsKKyAgICAgICAgeworCQkuc3VidmVuZG9yID0gMHgwZTExLAorCQkuc3ViZGV2aWNlID0gMHgwMDBlLAorCQkubmFtZSA9ICJDb21wYXEgRGVza3BybyBFTiIsCS8qIEFEMTg4NSAqLworCQkudHlwZSA9IEFDOTdfVFVORV9IUF9PTkxZCisgICAgICAgIH0sCiAJewogCQkuc3VidmVuZG9yID0gMHgwZTExLAogCQkuc3ViZGV2aWNlID0gMHgwMDhhLApAQCAtMTc0MCw2ICsxNzQ2LDEyIEBACiAJfSwKIAl7CiAJCS5zdWJ2ZW5kb3IgPSAweDEwMjUsCisJCS5zdWJkZXZpY2UgPSAweDAwODIsCisJCS5uYW1lID0gIkFjZXIgVHJhdmVsbWF0ZSAyMzEwIiwKKwkJLnR5cGUgPSBBQzk3X1RVTkVfSFBfT05MWQorCX0sCisJeworCQkuc3VidmVuZG9yID0gMHgxMDI1LAogCQkuc3ViZGV2aWNlID0gMHgwMDgzLAogCQkubmFtZSA9ICJBY2VyIEFzcGlyZSAzMDAzTENpIiwKIAkJLnR5cGUgPSBBQzk3X1RVTkVfSFBfT05MWQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKaW5kZXggM2VhMWYwNS4uNjY2ZjY5YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCkBAIC0xNTAsNiArMTUwLDcgQEAKIAkuc2hvcnRuYW1lID0gIkMtTWVkaWEgQ01JODc4NyIsCiAJLmxvbmduYW1lID0gIkMtTWVkaWEgT3h5Z2VuIEhEIEF1ZGlvIiwKIAkuY2hpcCA9ICJDTUk4Nzg4IiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaW5pdCA9IGhpZmllcl9pbml0LAogCS5jb250cm9sX2ZpbHRlciA9IGhpZmllcl9jb250cm9sX2ZpbHRlciwKIAkubWl4ZXJfaW5pdCA9IGhpZmllcl9taXhlcl9pbml0LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKaW5kZXggZjMxYTBlYi4uOWE5OTQxYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCkBAIC0yOCw3ICsyOCw5IEBACiAgKiBHUElPIDEgLT4gREZTMSBvZiBBSzUzODUKICAqLwogCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC0zNyw2ICszOSw3IEBACiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSAib3h5Z2VuLmgiCiAjaW5jbHVkZSAiYWs0Mzk2LmgiCisjaW5jbHVkZSAiY205NzgwLmgiCiAKIE1PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDLU1lZGlhIENNSTg3ODggZHJpdmVyIik7CkBAIC03NSw2ICs3OCw4IEBACiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19ET1VCTEUJMHgwMDAxCiAjZGVmaW5lIEdQSU9fQUs1Mzg1X0RGU19RVUFECTB4MDAwMgogCisjZGVmaW5lIEdQSU9fTElORV9NVVRFCQlDTTk3ODBfR1BPMAorCiAjZGVmaW5lIFdNODc4NV9SMAkwCiAjZGVmaW5lIFdNODc4NV9SMQkxCiAjZGVmaW5lIFdNODc4NV9SMgkyCkBAIC0xODAsMTYgKzE4NSwyMyBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJXTTg3ODUiKTsKIH0KIAorc3RhdGljIHZvaWQgY21pOTc4MF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJb3h5Z2VuX2FjOTdfY2xlYXJfYml0cyhjaGlwLCAwLCBDTTk3ODBfR1BJT19TVEFUVVMsIEdQSU9fTElORV9NVVRFKTsKK30KKwogc3RhdGljIHZvaWQgZ2VuZXJpY19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJYWs0Mzk2X2luaXQoY2hpcCk7CiAJd204Nzg1X2luaXQoY2hpcCk7CisJY21pOTc4MF9pbml0KGNoaXApOwogfQogCiBzdGF0aWMgdm9pZCBtZXJpZGlhbl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJYWs0Mzk2X2luaXQoY2hpcCk7CiAJYWs1Mzg1X2luaXQoY2hpcCk7CisJY21pOTc4MF9pbml0KGNoaXApOwogfQogCiBzdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKQEAgLTI4NSw2ICsyOTcsMjcgQEAKIAkJCSAgICAgIHZhbHVlLCBHUElPX0FLNTM4NV9ERlNfTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIGNtaTk3ODBfc3dpdGNoX2hvb2soc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGNvZGVjLAorCQkJCXVuc2lnbmVkIGludCByZWcsIGludCBtdXRlKQoreworCWlmIChjb2RlYyAhPSAwKQorCQlyZXR1cm47CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFDOTdfTElORToKKwkJb3h5Z2VuX3dyaXRlX2FjOTdfbWFza2VkKGNoaXAsIDAsIENNOTc4MF9HUElPX1NUQVRVUywKKwkJCQkJIG11dGUgPyBHUElPX0xJTkVfTVVURSA6IDAsCisJCQkJCSBHUElPX0xJTkVfTVVURSk7CisJCWJyZWFrOworCWNhc2UgQUM5N19NSUM6CisJY2FzZSBBQzk3X0NEOgorCWNhc2UgQUM5N19BVVg6CisJCWlmICghbXV0ZSkKKwkJCW94eWdlbl9hYzk3X3NldF9iaXRzKGNoaXAsIDAsIENNOTc4MF9HUElPX1NUQVRVUywKKwkJCQkJICAgICBHUElPX0xJTkVfTVVURSk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihhazQzOTZfZGJfc2NhbGUsIFRMVl9EQl9HQUlOX01VVEUsIDApOwogCiBzdGF0aWMgaW50IGFrNDM5Nl9jb250cm9sX2ZpbHRlcihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpCkBAIC0zMDgsNiArMzQxLDcgQEAKIAkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzg1X3BhcmFtcywKIAkudXBkYXRlX2RhY192b2x1bWUgPSB1cGRhdGVfYWs0Mzk2X3ZvbHVtZSwKIAkudXBkYXRlX2RhY19tdXRlID0gdXBkYXRlX2FrNDM5Nl9tdXRlLAorCS5hYzk3X3N3aXRjaF9ob29rID0gY21pOTc4MF9zd2l0Y2hfaG9vaywKIAkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZW5lcmljX2RhdGEpLAogCS5kYWNfY2hhbm5lbHMgPSA4LAogCS51c2VkX2NoYW5uZWxzID0gT1hZR0VOX0NIQU5ORUxfQSB8CkBAIC0zMzEsNiArMzY1LDcgQEAKIAkuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtcywKIAkudXBkYXRlX2RhY192b2x1bWUgPSB1cGRhdGVfYWs0Mzk2X3ZvbHVtZSwKIAkudXBkYXRlX2RhY19tdXRlID0gdXBkYXRlX2FrNDM5Nl9tdXRlLAorCS5hYzk3X3N3aXRjaF9ob29rID0gY21pOTc4MF9zd2l0Y2hfaG9vaywKIAkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZW5lcmljX2RhdGEpLAogCS5kYWNfY2hhbm5lbHMgPSA4LAogCS51c2VkX2NoYW5uZWxzID0gT1hZR0VOX0NIQU5ORUxfQiB8CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCmluZGV4IDZlYjM2ZGQuLjc4YzIxMTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IG94eWdlbl9wcm9jX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKK3N0YXRpYyB2b2lkIG94eWdlbl9wcm9jX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwogCkBAIC0yMTUsNyArMjE1LDcgQEAKICNkZWZpbmUgb3h5Z2VuX3Byb2NfaW5pdChjaGlwKQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBveHlnZW5faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQorc3RhdGljIHZvaWQgb3h5Z2VuX2luaXQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtMzk5LDggKzM5OSw4IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiB9CiAKLWludCBfX2RldmluaXQgb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLAotCQkJICAgICAgIGludCBtaWRpLCBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsICptb2RlbCkKK2ludCBveHlnZW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCBpbmRleCwgY2hhciAqaWQsCisJCSAgICAgaW50IG1pZGksIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKm1vZGVsKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgb3h5Z2VuICpjaGlwOwpAQCAtNTA3LDcgKzUwNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG94eWdlbl9wY2lfcHJvYmUpOwogCi12b2lkIF9fZGV2ZXhpdCBveHlnZW5fcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQordm9pZCBveHlnZW5fcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQogewogCXNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOwogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fcGNtLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9wY20uYwppbmRleCBkZmFkM2RiLi5iNzAwNDZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9wY20uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9wY20uYwpAQCAtNjM0LDcgKzYzNCw3IEBACiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7CiB9CiAKLWludCBfX2RldmluaXQgb3h5Z2VuX3BjbV9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCitpbnQgb3h5Z2VuX3BjbV9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgb3V0cywgaW5zOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCmluZGV4IDQwZTkyZjUuLmQxNjMzOTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKQEAgLTM4OSw2ICszODksNyBAQAogCS5zaG9ydG5hbWUgPSAiQXN1cyBBVjIwMCIsCiAJLmxvbmduYW1lID0gIkFzdXMgVmlydHVvc28gMjAwIiwKIAkuY2hpcCA9ICJBVjIwMCIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmluaXQgPSB4b25hcl9pbml0LAogCS5jb250cm9sX2ZpbHRlciA9IHhvbmFyX2NvbnRyb2xfZmlsdGVyLAogCS5taXhlcl9pbml0ID0geG9uYXJfbWl4ZXJfaW5pdCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCBjMmJkNDM4Li4xYmU4NGYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC03NDUsNyArNzQ1LDcgQEAKIAogCiAjaWZkZWYgSERTUF9GV19MT0FERVIKLXN0YXRpYyBpbnQgX19kZXZpbml0IGhkc3BfcmVxdWVzdF9md19sb2FkZXIoc3RydWN0IGhkc3AgKmhkc3ApOworc3RhdGljIGludCBoZHNwX3JlcXVlc3RfZndfbG9hZGVyKHN0cnVjdCBoZHNwICpoZHNwKTsKICNlbmRpZgogCiBzdGF0aWMgaW50IGhkc3BfY2hlY2tfZm9yX2Zpcm13YXJlIChzdHJ1Y3QgaGRzcCAqaGRzcCwgaW50IGxvYWRfb25fZGVtYW5kKQpAQCAtNDY4OCw4ICs0Njg4LDcgQEAKIAkuY29weSA9CQlzbmRfaGRzcF9jYXB0dXJlX2NvcHksCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaGRzcF9jcmVhdGVfaHdkZXAoc3RydWN0IHNuZF9jYXJkICpjYXJkLAotCQkJCQkgICBzdHJ1Y3QgaGRzcCAqaGRzcCkKK3N0YXRpYyBpbnQgc25kX2hkc3BfY3JlYXRlX2h3ZGVwKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHc7CiAJaW50IGVycjsKQEAgLTQ4NTcsNyArNDg1Niw3IEBACiAKICNpZmRlZiBIRFNQX0ZXX0xPQURFUgogLyogbG9hZCBmaXJtd2FyZSB2aWEgaG90cGx1ZyBmdyBsb2FkZXIgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGhkc3BfcmVxdWVzdF9md19sb2FkZXIoc3RydWN0IGhkc3AgKmhkc3ApCitzdGF0aWMgaW50IGhkc3BfcmVxdWVzdF9md19sb2FkZXIoc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJY29uc3QgY2hhciAqZndmaWxlOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCBkY2Q3Y2QwLi43NDJmMTE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTkyMCw3ICs5MjAsNyBAQAogCXUxNiBzdGF0dXM7CiAJdTE2IHJkeTsKIAlpbnQgY291bnQ7Ci0JY29uc3Qgc3RhdGljIHUxNiBjb2RlY19yZWFkeVszXSA9IHsKKwlzdGF0aWMgY29uc3QgdTE2IGNvZGVjX3JlYWR5WzNdID0gewogCQlTSVNfQUM5N19TVEFUVVNfQ09ERUNfUkVBRFksCiAJCVNJU19BQzk3X1NUQVRVU19DT0RFQzJfUkVBRFksCiAJCVNJU19BQzk3X1NUQVRVU19DT0RFQzNfUkVBRFksCkBAIC05ODQsNyArOTg0LDcgQEAKIHN0YXRpYyB2b2lkIHNpc19hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIHNob3J0IHZhbCkKIHsKLQljb25zdCBzdGF0aWMgdTMyIGNtZFszXSA9IHsKKwlzdGF0aWMgY29uc3QgdTMyIGNtZFszXSA9IHsKIAkJU0lTX0FDOTdfQ01EX0NPREVDX1dSSVRFLAogCQlTSVNfQUM5N19DTURfQ09ERUMyX1dSSVRFLAogCQlTSVNfQUM5N19DTURfQ09ERUMzX1dSSVRFLApAQCAtOTk1LDcgKzk5NSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaXNfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQogewotCWNvbnN0IHN0YXRpYyB1MzIgY21kWzNdID0geworCXN0YXRpYyBjb25zdCB1MzIgY21kWzNdID0gewogCQlTSVNfQUM5N19DTURfQ09ERUNfUkVBRCwKIAkJU0lTX0FDOTdfQ01EX0NPREVDMl9SRUFELAogCQlTSVNfQUM5N19DTURfQ09ERUMzX1JFQUQsCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5jIGIvc291bmQvcHBjL3NuZF9wczMuYwppbmRleCBkOGQwYjRiLi4yMGQwZTMyIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5jCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogLyoKICAqIEFMU0EgZGVmcwogICovCi1jb25zdCBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3BzM19wY21faHcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3BzM19wY21faHcgPSB7CiAJLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCSBTTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRCB8CiAJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDkxL2V0aV9iMV93bTg3MzEuYyBiL3NvdW5kL3NvYy9hdDkxL2V0aV9iMV93bTg3MzEuYwppbmRleCBhZDNhZDlkLi4xMzQ3ZGNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXQ5MS9ldGlfYjFfd204NzMxLmMKKysrIGIvc291bmQvc29jL2F0OTEvZXRpX2IxX3dtODczMS5jCkBAIC0zMyw4ICszMyw3IEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9waW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzMxLmgiCkBAIC00NywxMyArNDYsNiBAQAogI2RlZmluZQlEQkcoeC4uLikKICNlbmRpZgogCi0jZGVmaW5lIEFUOTFfUElPX1RGMQkoMSA8PCAoQVQ5MV9QSU5fUEI2IC0gUElOX0JBU0UpICUgMzIpCi0jZGVmaW5lIEFUOTFfUElPX1RLMQkoMSA8PCAoQVQ5MV9QSU5fUEI3IC0gUElOX0JBU0UpICUgMzIpCi0jZGVmaW5lIEFUOTFfUElPX1REMQkoMSA8PCAoQVQ5MV9QSU5fUEI4IC0gUElOX0JBU0UpICUgMzIpCi0jZGVmaW5lIEFUOTFfUElPX1JEMQkoMSA8PCAoQVQ5MV9QSU5fUEI5IC0gUElOX0JBU0UpICUgMzIpCi0jZGVmaW5lIEFUOTFfUElPX1JLMQkoMSA8PCAoQVQ5MV9QSU5fUEIxMCAtIFBJTl9CQVNFKSAlIDMyKQotI2RlZmluZSBBVDkxX1BJT19SRjEJKDEgPDwgKEFUOTFfUElOX1BCMTEgLSBQSU5fQkFTRSkgJSAzMikKLQogc3RhdGljIHN0cnVjdCBjbGsgKnBjazFfY2xrOwogc3RhdGljIHN0cnVjdCBjbGsgKnBsbGJfY2xrOwogCkBAIC0yNzYsNyArMjY4LDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGV0aV9iMV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQl1MzIgc3NjX3Bpb19saW5lczsKIAlzdHJ1Y3QgYXQ5MV9zc2NfcGVyaXBoICpzc2MgPSBldGlfYjFfZGFpLmNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKEFUOTFSTTkyMDBfQkFTRV9TU0MxLCBTWl8xNkssICJzb2MtYXVkaW8iKSkgewpAQCAtMzEwLDE5ICszMDEsMTIgQEAKIAkJZ290byBmYWlsX2lvX3VubWFwOwogCX0KIAotIAlzc2NfcGlvX2xpbmVzID0gQVQ5MV9QSU9fVEYxIHwgQVQ5MV9QSU9fVEsxIHwgQVQ5MV9QSU9fVEQxCi0JCQl8IEFUOTFfUElPX1JEMSAvKiB8IEFUOTFfUElPX1JLMSAqLyB8IEFUOTFfUElPX1JGMTsKLQotCS8qIFJlc2V0IGFsbCBQSU8gcmVnaXN0ZXJzIGFuZCBhc3NpZ24gbGluZXMgdG8gcGVyaXBoZXJhbCBBICovCi0gCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19QRFIsICBzc2NfcGlvX2xpbmVzKTsKLSAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9CICsgUElPX09EUiwgIHNzY19waW9fbGluZXMpOwotIAlhdDkxX3N5c193cml0ZShBVDkxX1BJT0IgKyBQSU9fSUZEUiwgc3NjX3Bpb19saW5lcyk7Ci0gCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19DT0RSLCBzc2NfcGlvX2xpbmVzKTsKLSAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9CICsgUElPX0lEUiwgIHNzY19waW9fbGluZXMpOwotIAlhdDkxX3N5c193cml0ZShBVDkxX1BJT0IgKyBQSU9fTUREUiwgc3NjX3Bpb19saW5lcyk7Ci0gCWF0OTFfc3lzX3dyaXRlKEFUOTFfUElPQiArIFBJT19QVURSLCBzc2NfcGlvX2xpbmVzKTsKLSAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSU9CICsgUElPX0FTUiwgIHNzY19waW9fbGluZXMpOwotIAlhdDkxX3N5c193cml0ZShBVDkxX1BJT0IgKyBQSU9fT1dEUiwgc3NjX3Bpb19saW5lcyk7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI2LCAwKTsJLyogVEYxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI3LCAwKTsJLyogVEsxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAwKTsJLyogVEQxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAwKTsJLyogUkQxICovCisvKglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEwLCAwKTsqLwkvKiBSSzEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjExLCAwKTsJLyogUkYxICovCiAKIAkvKgogCSAqIFNldCBQQ0sxIHBhcmVudCB0byBQTExCIGFuZCBpdHMgcmF0ZSB0byAxMiBNaHouCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKaW5kZXggNzEwZTAyOC4uODg5YTg5NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwpAQCAtNjgxLDggKzY4MSw4IEBACiAJezIyNTc5MjAwLCA0ODAwMCwgNDgwMDAsIDB4MCwgOCwgNzA3NX0sCiAJezMzODY4ODAwLCA0ODAwMCwgNDgwMDAsIDB4MCwgNSwgODA0OX0sCiAJLyogNjRrICovCi0JezIyNTc5MjAwLCA5NjAwMCwgOTYwMDAsIDB4MSwgOCwgNzA3NX0sCi0JezMzODY4ODAwLCA5NjAwMCwgOTYwMDAsIDB4MSwgNSwgODA0OX0sCisJezIyNTc5MjAwLCA2NDAwMCwgOTYwMDAsIDB4MSwgOCwgNzA3NX0sCisJezMzODY4ODAwLCA2NDAwMCwgOTYwMDAsIDB4MSwgNSwgODA0OX0sCiAJLyogODguMmsgKi8KIAl7MjI1NzkyMDAsIDg4MjAwLCA4ODIwMCwgMHgwLCA4LCAwfSwKIAl7MzM4Njg4MDAsIDg4MjAwLCA4ODIwMCwgMHgwLCA1LCAzMzMzfSwKQEAgLTExODcsMTAgKzExODcsOCBAQAogCQkubmFtZSA9ICJhaWMzeCBJMkMgQ29kZWMiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAotCS5pZCA9IEkyQ19EUklWRVJJRF9JMkNERVYsCiAJLmF0dGFjaF9hZGFwdGVyID0gYWljM3hfaTJjX2F0dGFjaCwKIAkuZGV0YWNoX2NsaWVudCA9IGFpYzN4X2kyY19kZXRhY2gsCi0JLmNvbW1hbmQgPSBOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCmluZGV4IDU5MGJhZWEuLjUyNGY3NDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwpAQCAtMTc2LDcgKzE3Niw4IEBACiAgKiB0aGUgY29kZWMgb25seSBoYXMgYSBzaW5nbGUgY29udHJvbCB0aGF0IGlzIHNoYXJlZCBieSBib3RoIGNoYW5uZWxzLgogICogVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgYXVkaW8gcGF0aC4KICAqLwotc3RhdGljIGludCBtaXhlcl9ldmVudCAoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsIGludCBldmVudCkKK3N0YXRpYyBpbnQgbWl4ZXJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQogewogCXUxNiBsLCByLCBiZWVwLCBsaW5lLCBwaG9uZSwgbWljLCBwY20sIGF1eDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYyBiL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKaW5kZXggZjI2YzRiMi4uYTAwYWFjNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYworKysgYi9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJbWFjaGluZV9kYXRhLT5kYWlfZm9ybWF0ID0gU05EX1NPQ19EQUlGTVRfTEVGVF9KOwogCQltYWNoaW5lX2RhdGEtPmNvZGVjX2Nsa19kaXJlY3Rpb24gPSBTTkRfU09DX0NMT0NLX0lOOwogCQltYWNoaW5lX2RhdGEtPmNwdV9jbGtfZGlyZWN0aW9uID0gU05EX1NPQ19DTE9DS19PVVQ7Ci0JfSBlbHNlIGlmIChzdHJjYXNlY21wKHNwcm9wLCAicmotbWFzdGVyIikgPT0gMCkgeworCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChzcHJvcCwgInJqLXNsYXZlIikgPT0gMCkgewogCQltYWNoaW5lX2RhdGEtPmRhaV9mb3JtYXQgPSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOwogCQltYWNoaW5lX2RhdGEtPmNvZGVjX2Nsa19kaXJlY3Rpb24gPSBTTkRfU09DX0NMT0NLX09VVDsKIAkJbWFjaGluZV9kYXRhLT5jcHVfY2xrX2RpcmVjdGlvbiA9IFNORF9TT0NfQ0xPQ0tfSU47CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKaW5kZXggM2YzNGU1My4uMWE3MGE2YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9jb3JnaS5jCisrKyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwpAQCAtMjE1LDcgKzIxNSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LCBpbnQgZXZlbnQpCitzdGF0aWMgaW50IGNvcmdpX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCiB7CiAJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpCiAJCXNldF9zY29vcF9ncGlvKCZjb3JnaXNjb29wX2RldmljZS5kZXYsIENPUkdJX1NDUF9BUE1fT04pOwpAQCAtMjI1LDcgKzIyNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lfbWljX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LCBpbnQgZXZlbnQpCitzdGF0aWMgaW50IGNvcmdpX21pY19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCiB7CiAJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpCiAJCXNldF9zY29vcF9ncGlvKCZjb3JnaXNjb29wX2RldmljZS5kZXYsIENPUkdJX1NDUF9NSUNfQklBUyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCA1YWU1OWJkLi40ZmJmOGJiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTE5Niw3ICsxOTYsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHBvb2RsZV9hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsIGludCBldmVudCkKK3N0YXRpYyBpbnQgcG9vZGxlX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCiB7CiAJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpCiAJCWxvY29tb19ncGlvX3dyaXRlKCZwb29kbGVfbG9jb21vX2RldmljZS5kZXYsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKaW5kZXggODE1YzE1My4uZTE3Mzc5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMjcsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCkBAIC0zNSw2ICszNywxMCBAQAogc3RhdGljIERFRklORV9NVVRFWChjYXJfbXV0ZXgpOwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGdzcl93cSk7CiBzdGF0aWMgdm9sYXRpbGUgbG9uZyBnc3JfYml0czsKK3N0YXRpYyBzdHJ1Y3QgY2xrICphYzk3X2NsazsKKyNpZmRlZiBDT05GSUdfUFhBMjd4CitzdGF0aWMgc3RydWN0IGNsayAqYWM5N2NvbmZfY2xrOworI2VuZGlmCiAKIC8qCiAgKiBCZXdhcmUgUFhBMjd4IGJ1Z3M6CkBAIC0xNTksOSArMTY1LDkgQEAKIAlnc3JfYml0cyA9IDA7CiAjaWZkZWYgQ09ORklHX1BYQTI3eAogCS8qIFBYQTI3eCBEZXZlbG9wZXJzIE1hbnVhbCBzZWN0aW9uIDEzLjUuMi4yLjEgKi8KLQlweGFfc2V0X2NrZW4oQ0tFTl9BQzk3Q09ORiwgMSk7CisJY2xrX2VuYWJsZShhYzk3Y29uZl9jbGspOwogCXVkZWxheSg1KTsKLQlweGFfc2V0X2NrZW4oQ0tFTl9BQzk3Q09ORiwgMCk7CisJY2xrX2Rpc2FibGUoYWM5N2NvbmZfY2xrKTsKIAlHQ1IgPSBHQ1JfQ09MRF9SU1Q7CiAJdWRlbGF5KDUwKTsKICNlbHNlCkBAIC0yNTUsNyArMjYxLDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpICpkYWkpCiB7CiAJR0NSIHw9IEdDUl9BQ0xJTktfT0ZGOwotCXB4YV9zZXRfY2tlbihDS0VOX0FDOTcsIDApOworCWNsa19kaXNhYmxlKGFjOTdfY2xrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjcwLDcgKzI3Niw3IEBACiAJLyogVXNlIEdQSU8gMTEzIGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KIAlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKICNlbmRpZgotCXB4YV9zZXRfY2tlbihDS0VOX0FDOTcsIDEpOworCWNsa19lbmFibGUoYWM5N19jbGspOwogCXJldHVybiAwOwogfQogCkBAIC0yOTQsMTYgKzMwMCwzMyBAQAogI2lmZGVmIENPTkZJR19QWEEyN3gKIAkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwogCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCisJYWM5N2NvbmZfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiQUM5N0NPTkZDTEsiKTsKKwlpZiAoSVNfRVJSKGFjOTdjb25mX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihhYzk3Y29uZl9jbGspOworCQlhYzk3Y29uZl9jbGsgPSBOVUxMOworCQlnb3RvIGVycl9pcnE7CisJfQogI2VuZGlmCi0JcHhhX3NldF9ja2VuKENLRU5fQUM5NywgMSk7CisJYWM5N19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJBQzk3Q0xLIik7CisJaWYgKElTX0VSUihhYzk3X2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihhYzk3X2Nsayk7CisJCWFjOTdfY2xrID0gTlVMTDsKKwkJZ290byBlcnJfaXJxOworCX0KKwljbGtfZW5hYmxlKGFjOTdfY2xrKTsKIAlyZXR1cm4gMDsKIAotIGVycjoKLQlpZiAoQ0tFTiAmICgxIDw8IENLRU5fQUM5NykpIHsKLQkJR0NSIHw9IEdDUl9BQ0xJTktfT0ZGOwotCQlmcmVlX2lycShJUlFfQUM5NywgTlVMTCk7Ci0JCXB4YV9zZXRfY2tlbihDS0VOX0FDOTcsIDApOworIGVycl9pcnE6CisJR0NSIHw9IEdDUl9BQ0xJTktfT0ZGOworI2lmZGVmIENPTkZJR19QWEEyN3gKKwlpZiAoYWM5N2NvbmZfY2xrKSB7CisJCWNsa19wdXQoYWM5N2NvbmZfY2xrKTsKKwkJYWM5N2NvbmZfY2xrID0gTlVMTDsKIAl9CisjZW5kaWYKKwlmcmVlX2lycShJUlFfQUM5NywgTlVMTCk7CisgZXJyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxMSw3ICszMzQsMTMgQEAKIHsKIAlHQ1IgfD0gR0NSX0FDTElOS19PRkY7CiAJZnJlZV9pcnEoSVJRX0FDOTcsIE5VTEwpOwotCXB4YV9zZXRfY2tlbihDS0VOX0FDOTcsIDApOworI2lmZGVmIENPTkZJR19QWEEyN3gKKwljbGtfcHV0KGFjOTdjb25mX2Nsayk7CisJYWM5N2NvbmZfY2xrID0gTlVMTDsKKyNlbmRpZgorCWNsa19kaXNhYmxlKGFjOTdfY2xrKTsKKwljbGtfcHV0KGFjOTdfY2xrKTsKKwlhYzk3X2NsayA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwppbmRleCA2OTJiOTAwLi40MjUwNzEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKaW5kZXggZDU2NzA5ZS4uZWNjYTM5MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9zcGl0ei5jCisrKyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwpAQCAtMjE1LDcgKzIxNSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgc3BpdHpfbWljX2JpYXMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsIGludCBldmVudCkKK3N0YXRpYyBpbnQgc3BpdHpfbWljX2JpYXMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQogewogCWlmIChtYWNoaW5lX2lzX2JvcnpvaSgpIHx8IG1hY2hpbmVfaXNfc3BpdHooKSkgewogCQlpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvdG9zYS5jIGIvc291bmQvc29jL3B4YS90b3NhLmMKaW5kZXggZTRkNDBiNS4uNzM0NmQ3ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS90b3NhLmMKKysrIGIvc291bmQvc29jL3B4YS90b3NhLmMKQEAgLTEzNSw3ICsxMzUsOCBAQAogfQogCiAvKiB0b3NhIGRhcG0gZXZlbnQgaGFuZGxlcnMgKi8KLXN0YXRpYyBpbnQgdG9zYV9ocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywgaW50IGV2ZW50KQorc3RhdGljIGludCB0b3NhX2hwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKIHsKIAlpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSkKIAkJc2V0X3RjNjM5M19ncGlvKCZ0YzYzOTNfZGV2aWNlLmRldixUT1NBX1RDNjM5M19MX01VVEUpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCmluZGV4IDU4ZDI1ZTQuLjdjNDRhMmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYworKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCQkJCQkgIHRtcCwgc2l6ZW9mKHRtcCkpOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9jYXJkKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc2V0dXBfY2FyZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQogewogCWludCByZXQ7CiAJY2hhciB2YWxbNF07CkBAIC0zNTksNyArMzU5LDcgQEAKIAlyZXR1cm4gY2FyZDsKIH0KIAotc3RhdGljIGludCBpbml0X2NhcmQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfY2FyZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQogewogCWNoYXIgKmM7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBkZXYtPmNoaXAuZGV2OwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCWludCByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IDhmYTkzNTYuLmY0ODgzOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC00NzksNiArNDc5LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBwcm9jZXNzIGFmdGVyIEUtTXUgMDIwMi8wNDA0IGhpZ2ggc3BlZWQgcGxheWJhY2sgc3luYyBjb21wbGV0ZQorICoKKyAqIFRoZXNlIGRldmljZXMgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgcGFja2V0IGluc3RlYWQgb2YgdGhlIG51bWJlcgorICogb2Ygc2FtcGxlcyBwZXIgbWljcm9mcmFtZS4KKyAqLworc3RhdGljIGludCByZXRpcmVfcGxheWJhY2tfc3luY191cmJfaHNfZW11KHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3VicywKKwkJCQkJICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSwKKwkJCQkJICAgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1swXS5zdGF0dXMgPT0gMCAmJgorCSAgICB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmFjdHVhbF9sZW5ndGggPT0gNCkgeworCQlmID0gY29tYmluZV9xdWFkKCh1OCopdXJiLT50cmFuc2Zlcl9idWZmZXIpICYgMHgwZmZmZmZmZjsKKwkJZiA+Pj0gc3Vicy0+ZGF0YWludGVydmFsOworCQlpZiAoZiA+PSBzdWJzLT5mcmVxbiAtIHN1YnMtPmZyZXFuIC8gOCAmJiBmIDw9IHN1YnMtPmZyZXFtYXgpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzLT5sb2NrLCBmbGFncyk7CisJCQlzdWJzLT5mcmVxbSA9IGY7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJzLT5sb2NrLCBmbGFncyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBuZXh0IHBhY2tldCAqLwogc3RhdGljIGludCBzbmRfdXNiX2F1ZGlvX25leHRfcGFja2V0X3NpemUoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzKQogewpAQCAtMTczNSw2ICsxNzYyLDggQEAKIAogCWNoYW5uZWxzID0ga2NhbGxvYyhNQVhfTUFTSywgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwogCXJhdGVzID0ga2NhbGxvYyhNQVhfTUFTSywgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICghY2hhbm5lbHMgfHwgIXJhdGVzKQorCQlnb3RvIF9fb3V0OwogCiAJbGlzdF9mb3JfZWFjaChwLCAmc3Vicy0+Zm10X2xpc3QpIHsKIAkJc3RydWN0IGF1ZGlvZm9ybWF0ICpmOwpAQCAtMjIxOSwxMCArMjI0OCwxNyBAQAogCXN1YnMtPnN0cmVhbSA9IGFzOwogCXN1YnMtPmRpcmVjdGlvbiA9IHN0cmVhbTsKIAlzdWJzLT5kZXYgPSBhcy0+Y2hpcC0+ZGV2OwotCWlmIChzbmRfdXNiX2dldF9zcGVlZChzdWJzLT5kZXYpID09IFVTQl9TUEVFRF9GVUxMKQorCWlmIChzbmRfdXNiX2dldF9zcGVlZChzdWJzLT5kZXYpID09IFVTQl9TUEVFRF9GVUxMKSB7CiAJCXN1YnMtPm9wcyA9IGF1ZGlvX3VyYl9vcHNbc3RyZWFtXTsKLQllbHNlCisJfSBlbHNlIHsKIAkJc3Vicy0+b3BzID0gYXVkaW9fdXJiX29wc19oaWdoX3NwZWVkW3N0cmVhbV07CisJCXN3aXRjaCAoYXMtPmNoaXAtPnVzYl9pZCkgeworCQljYXNlIFVTQl9JRCgweDA0MWUsIDB4M2YwMik6IC8qIEUtTXUgMDIwMiBVU0IgKi8KKwkJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMDQpOiAvKiBFLU11IDA0MDQgVVNCICovCisJCQlzdWJzLT5vcHMucmV0aXJlX3N5bmMgPSByZXRpcmVfcGxheWJhY2tfc3luY191cmJfaHNfZW11OworCQkJYnJlYWs7CisJCX0KKwl9CiAJc25kX3BjbV9zZXRfb3BzKGFzLT5wY20sIHN0cmVhbSwKIAkJCXN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID8KIAkJCSZzbmRfdXNiX3BsYXliYWNrX29wcyA6ICZzbmRfdXNiX2NhcHR1cmVfb3BzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaWRpLmMgYi9zb3VuZC91c2IvdXNibWlkaS5jCmluZGV4IDc1MGU5MjkuLjY2NzZhMTc3IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWlkaS5jCisrKyBiL3NvdW5kL3VzYi91c2JtaWRpLmMKQEAgLTEwNCwxMiArMTA0LDE0IEBACiAJc3RydWN0IHVzYl9wcm90b2NvbF9vcHMqIHVzYl9wcm90b2NvbF9vcHM7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCB0aW1lcl9saXN0IGVycm9yX3RpbWVyOworCXNwaW5sb2NrX3QgZGlzY19sb2NrOwogCiAJc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludCB7CiAJCXN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50ICpvdXQ7CiAJCXN0cnVjdCBzbmRfdXNiX21pZGlfaW5fZW5kcG9pbnQgKmluOwogCX0gZW5kcG9pbnRzW01JRElfTUFYX0VORFBPSU5UU107CiAJdW5zaWduZWQgbG9uZyBpbnB1dF90cmlnZ2VyZWQ7CisJdW5zaWduZWQgY2hhciBkaXNjb25uZWN0ZWQ7CiB9OwogCiBzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCB7CkBAIC0zMDYsNiArMzA4LDExIEBACiAJc3RydWN0IHNuZF91c2JfbWlkaSAqdW1pZGkgPSAoc3RydWN0IHNuZF91c2JfbWlkaSAqKWRhdGE7CiAJaW50IGk7CiAKKwlzcGluX2xvY2soJnVtaWRpLT5kaXNjX2xvY2spOworCWlmICh1bWlkaS0+ZGlzY29ubmVjdGVkKSB7CisJCXNwaW5fdW5sb2NrKCZ1bWlkaS0+ZGlzY19sb2NrKTsKKwkJcmV0dXJuOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgTUlESV9NQVhfRU5EUE9JTlRTOyArK2kpIHsKIAkJc3RydWN0IHNuZF91c2JfbWlkaV9pbl9lbmRwb2ludCAqaW4gPSB1bWlkaS0+ZW5kcG9pbnRzW2ldLmluOwogCQlpZiAoaW4gJiYgaW4tPmVycm9yX3Jlc3VibWl0KSB7CkBAIC0zMTYsNiArMzIzLDcgQEAKIAkJaWYgKHVtaWRpLT5lbmRwb2ludHNbaV0ub3V0KQogCQkJc25kX3VzYm1pZGlfZG9fb3V0cHV0KHVtaWRpLT5lbmRwb2ludHNbaV0ub3V0KTsKIAl9CisJc3Bpbl91bmxvY2soJnVtaWRpLT5kaXNjX2xvY2spOwogfQogCiAvKiBoZWxwZXIgZnVuY3Rpb24gdG8gc2VuZCBzdGF0aWMgZGF0YSB0aGF0IG1heSBub3QgRE1BLWFibGUgKi8KQEAgLTEwNDksNyArMTA1NywxNCBAQAogCWludCBpOwogCiAJdW1pZGkgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzbmRfdXNiX21pZGksIGxpc3QpOwotCWRlbF90aW1lcl9zeW5jKCZ1bWlkaS0+ZXJyb3JfdGltZXIpOworCS8qCisJICogYW4gVVJCJ3MgY29tcGxldGlvbiBoYW5kbGVyIG1heSBzdGFydCB0aGUgdGltZXIgYW5kCisJICogYSB0aW1lciBtYXkgc3VibWl0IGFuIFVSQi4gVG8gcmVsaWFibHkgYnJlYWsgdGhlIGN5Y2xlCisJICogYSBmbGFnIHVuZGVyIGxvY2sgbXVzdCBiZSB1c2VkCisJICovCisJc3Bpbl9sb2NrX2lycSgmdW1pZGktPmRpc2NfbG9jayk7CisJdW1pZGktPmRpc2Nvbm5lY3RlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxKCZ1bWlkaS0+ZGlzY19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUlESV9NQVhfRU5EUE9JTlRTOyArK2kpIHsKIAkJc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludCogZXAgPSAmdW1pZGktPmVuZHBvaW50c1tpXTsKIAkJaWYgKGVwLT5vdXQpCkBAIC0xMDYyLDYgKzEwNzcsNyBAQAogCQlpZiAoZXAtPmluKQogCQkJdXNiX2tpbGxfdXJiKGVwLT5pbi0+dXJiKTsKIAl9CisJZGVsX3RpbWVyX3N5bmMoJnVtaWRpLT5lcnJvcl90aW1lcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF91c2JtaWRpX3Jhd21pZGlfZnJlZShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpKQpAQCAtMTY4NSw2ICsxNzAxLDcgQEAKIAl1bWlkaS0+cXVpcmsgPSBxdWlyazsKIAl1bWlkaS0+dXNiX3Byb3RvY29sX29wcyA9ICZzbmRfdXNibWlkaV9zdGFuZGFyZF9vcHM7CiAJaW5pdF90aW1lcigmdW1pZGktPmVycm9yX3RpbWVyKTsKKwlzcGluX2xvY2tfaW5pdCgmdW1pZGktPmRpc2NfbG9jayk7CiAJdW1pZGktPmVycm9yX3RpbWVyLmZ1bmN0aW9uID0gc25kX3VzYm1pZGlfZXJyb3JfdGltZXI7CiAJdW1pZGktPmVycm9yX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyl1bWlkaTsKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmMgYi92aXJ0L2t2bS9pb2FwaWMuYwppbmRleCAzMTdmOGUyLi40MjMyZmQ3IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtMjExLDYgKzIxMSwxMCBAQAogCWNhc2UgSU9BUElDX0xPV0VTVF9QUklPUklUWToKIAkJdmNwdSA9IGt2bV9nZXRfbG93ZXN0X3ByaW9fdmNwdShpb2FwaWMtPmt2bSwgdmVjdG9yLAogCQkJCWRlbGl2ZXJfYml0bWFzayk7CisjaWZkZWYgQ09ORklHX1g4NgorCQlpZiAoaXJxID09IDApCisJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzWzBdOworI2VuZGlmCiAJCWlmICh2Y3B1ICE9IE5VTEwpCiAJCQlpb2FwaWNfaW5qX2lycShpb2FwaWMsIHZjcHUsIHZlY3RvciwKIAkJCQkgICAgICAgdHJpZ19tb2RlLCBkZWxpdmVyeV9tb2RlKTsKQEAgLTIyMCw2ICsyMjQsMTAgQEAKIAkJCQkgICAgIGRlbGl2ZXJfYml0bWFzaywgdmVjdG9yLCBJT0FQSUNfTE9XRVNUX1BSSU9SSVRZKTsKIAkJYnJlYWs7CiAJY2FzZSBJT0FQSUNfRklYRUQ6CisjaWZkZWYgQ09ORklHX1g4NgorCQlpZiAoaXJxID09IDApCisJCQlkZWxpdmVyX2JpdG1hc2sgPSAxOworI2VuZGlmCiAJCWZvciAodmNwdV9pZCA9IDA7IGRlbGl2ZXJfYml0bWFzayAhPSAwOyB2Y3B1X2lkKyspIHsKIAkJCWlmICghKGRlbGl2ZXJfYml0bWFzayAmICgxIDw8IHZjcHVfaWQpKSkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDMyZmJmODAuLmIyZTEyODkgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTY5LDYgKzE2OSw3IEBACiAJa3ZtX2lvX2J1c19pbml0KCZrdm0tPnBpb19idXMpOwogCW11dGV4X2luaXQoJmt2bS0+bG9jayk7CiAJa3ZtX2lvX2J1c19pbml0KCZrdm0tPm1taW9fYnVzKTsKKwlpbml0X3J3c2VtKCZrdm0tPnNsb3RzX2xvY2spOwogCXNwaW5fbG9jaygma3ZtX2xvY2spOwogCWxpc3RfYWRkKCZrdm0tPnZtX2xpc3QsICZ2bV9saXN0KTsKIAlzcGluX3VubG9jaygma3ZtX2xvY2spOwpAQCAtMzM5LDkgKzM0MCw5IEBACiB7CiAJaW50IHI7CiAKLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAJciA9IF9fa3ZtX3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgbWVtLCB1c2VyX2FsbG9jKTsKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zZXRfbWVtb3J5X3JlZ2lvbik7Cg==